ZGlmZiAtLWdpdCBhL0FCT1VULU5MUyBiL0FCT1VULU5MUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2JjNzJlCi0tLSAvZGV2L251bGwKKysrIGIvQUJPVVQtTkxTCkBAIC0wLDAgKzEsMTA2OCBAQAorMSBOb3RlcyBvbiB0aGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworRnJlZSBzb2Z0d2FyZSBpcyBnb2luZyBpbnRlcm5hdGlvbmFsISAgVGhlIEZyZWUgVHJhbnNsYXRpb24gUHJvamVjdCBpcworYSB3YXkgdG8gZ2V0IG1haW50YWluZXJzIG9mIGZyZWUgc29mdHdhcmUsIHRyYW5zbGF0b3JzLCBhbmQgdXNlcnMgYWxsCit0b2dldGhlciwgc28gdGhhdCBmcmVlIHNvZnR3YXJlIHdpbGwgZ3JhZHVhbGx5IGJlY29tZSBhYmxlIHRvIHNwZWFrIG1hbnkKK2xhbmd1YWdlcy4gIEEgZmV3IHBhY2thZ2VzIGFscmVhZHkgcHJvdmlkZSB0cmFuc2xhdGlvbnMgZm9yIHRoZWlyCittZXNzYWdlcy4KKworICAgSWYgeW91IGZvdW5kIHRoaXMgYEFCT1VULU5MUycgZmlsZSBpbnNpZGUgYSBkaXN0cmlidXRpb24sIHlvdSBtYXkKK2Fzc3VtZSB0aGF0IHRoZSBkaXN0cmlidXRlZCBwYWNrYWdlIGRvZXMgdXNlIEdOVSBgZ2V0dGV4dCcgaW50ZXJuYWxseSwKK2l0c2VsZiBhdmFpbGFibGUgYXQgeW91ciBuZWFyZXN0IEdOVSBhcmNoaXZlIHNpdGUuICBCdXQgeW91IGRvIF9ub3RfCituZWVkIHRvIGluc3RhbGwgR05VIGBnZXR0ZXh0JyBwcmlvciB0byBjb25maWd1cmluZywgaW5zdGFsbGluZyBvciB1c2luZwordGhpcyBwYWNrYWdlIHdpdGggbWVzc2FnZXMgdHJhbnNsYXRlZC4KKworICAgSW5zdGFsbGVycyB3aWxsIGZpbmQgaGVyZSBzb21lIHVzZWZ1bCBoaW50cy4gIFRoZXNlIG5vdGVzIGFsc28KK2V4cGxhaW4gaG93IHVzZXJzIHNob3VsZCBwcm9jZWVkIGZvciBnZXR0aW5nIHRoZSBwcm9ncmFtcyB0byB1c2UgdGhlCithdmFpbGFibGUgdHJhbnNsYXRpb25zLiAgVGhleSB0ZWxsIGhvdyBwZW9wbGUgd2FudGluZyB0byBjb250cmlidXRlIGFuZAord29yayBvbiB0cmFuc2xhdGlvbnMgY2FuIGNvbnRhY3QgdGhlIGFwcHJvcHJpYXRlIHRlYW0uCisKKyAgIFdoZW4gcmVwb3J0aW5nIGJ1Z3MgaW4gdGhlIGBpbnRsLycgZGlyZWN0b3J5IG9yIGJ1Z3Mgd2hpY2ggbWF5IGJlCityZWxhdGVkIHRvIGludGVybmF0aW9uYWxpemF0aW9uLCB5b3Ugc2hvdWxkIHRlbGwgYWJvdXQgdGhlIHZlcnNpb24gb2YKK2BnZXR0ZXh0JyB3aGljaCBpcyB1c2VkLiAgVGhlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUKK2BpbnRsL1ZFUlNJT04nIGZpbGUsIGluIGludGVybmF0aW9uYWxpemVkIHBhY2thZ2VzLgorCisxLjEgUXVpY2sgY29uZmlndXJhdGlvbiBhZHZpY2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJZiB5b3Ugd2FudCB0byBleHBsb2l0IHRoZSBmdWxsIHBvd2VyIG9mIGludGVybmF0aW9uYWxpemF0aW9uLCB5b3UKK3Nob3VsZCBjb25maWd1cmUgaXQgdXNpbmcKKworICAgICAuL2NvbmZpZ3VyZSAtLXdpdGgtaW5jbHVkZWQtZ2V0dGV4dAorCit0byBmb3JjZSB1c2FnZSBvZiBpbnRlcm5hdGlvbmFsaXppbmcgcm91dGluZXMgcHJvdmlkZWQgd2l0aGluIHRoaXMKK3BhY2thZ2UsIGRlc3BpdGUgdGhlIGV4aXN0ZW5jZSBvZiBpbnRlcm5hdGlvbmFsaXppbmcgY2FwYWJpbGl0aWVzIGluIHRoZQorb3BlcmF0aW5nIHN5c3RlbSB3aGVyZSB0aGlzIHBhY2thZ2UgaXMgYmVpbmcgaW5zdGFsbGVkLiAgU28gZmFyLCBvbmx5Cit0aGUgYGdldHRleHQnIGltcGxlbWVudGF0aW9uIGluIHRoZSBHTlUgQyBsaWJyYXJ5IHZlcnNpb24gMiBwcm92aWRlcyBhcworbWFueSBmZWF0dXJlcyAoc3VjaCBhcyBsb2NhbGUgYWxpYXMsIG1lc3NhZ2UgaW5oZXJpdGFuY2UsIGF1dG9tYXRpYworY2hhcnNldCBjb252ZXJzaW9uIG9yIHBsdXJhbCBmb3JtIGhhbmRsaW5nKSBhcyB0aGUgaW1wbGVtZW50YXRpb24gaGVyZS4KK0l0IGlzIGFsc28gbm90IHBvc3NpYmxlIHRvIG9mZmVyIHRoaXMgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5IG9uIHRvcAorb2YgYSBgY2F0Z2V0cycgaW1wbGVtZW50YXRpb24uICBGdXR1cmUgdmVyc2lvbnMgb2YgR05VIGBnZXR0ZXh0JyB3aWxsCit2ZXJ5IGxpa2VseSBjb252ZXkgZXZlbiBtb3JlIGZ1bmN0aW9uYWxpdHkuICBTbyBpdCBtaWdodCBiZSBhIGdvb2QgaWRlYQordG8gY2hhbmdlIHRvIEdOVSBgZ2V0dGV4dCcgYXMgc29vbiBhcyBwb3NzaWJsZS4KKworICAgU28geW91IG5lZWQgX25vdF8gcHJvdmlkZSB0aGlzIG9wdGlvbiBpZiB5b3UgYXJlIHVzaW5nIEdOVSBsaWJjIDIgb3IKK3lvdSBoYXZlIGluc3RhbGxlZCBhIHJlY2VudCBjb3B5IG9mIHRoZSBHTlUgZ2V0dGV4dCBwYWNrYWdlIHdpdGggdGhlCitpbmNsdWRlZCBgbGliaW50bCcuCisKKzEuMiBJTlNUQUxMIE1hdHRlcnMKKz09PT09PT09PT09PT09PT09PT0KKworU29tZSBwYWNrYWdlcyBhcmUgImxvY2FsaXphYmxlIiB3aGVuIHByb3Blcmx5IGluc3RhbGxlZDsgdGhlIHByb2dyYW1zCit0aGV5IGNvbnRhaW4gY2FuIGJlIG1hZGUgdG8gc3BlYWsgeW91ciBvd24gbmF0aXZlIGxhbmd1YWdlLiAgTW9zdCBzdWNoCitwYWNrYWdlcyB1c2UgR05VIGBnZXR0ZXh0Jy4gIE90aGVyIHBhY2thZ2VzIGhhdmUgdGhlaXIgb3duIHdheXMgdG8KK2ludGVybmF0aW9uYWxpemF0aW9uLCBwcmVkYXRpbmcgR05VIGBnZXR0ZXh0Jy4KKworICAgQnkgZGVmYXVsdCwgdGhpcyBwYWNrYWdlIHdpbGwgYmUgaW5zdGFsbGVkIHRvIGFsbG93IHRyYW5zbGF0aW9uIG9mCittZXNzYWdlcy4gIEl0IHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3Qgd2hldGhlciB0aGUgc3lzdGVtIGFscmVhZHkKK3Byb3ZpZGVzIHRoZSBHTlUgYGdldHRleHQnIGZ1bmN0aW9ucy4gIElmIG5vdCwgdGhlIGluY2x1ZGVkIEdOVQorYGdldHRleHQnIGxpYnJhcnkgd2lsbCBiZSB1c2VkLiAgVGhpcyBsaWJyYXJ5IGlzIHdob2xseSBjb250YWluZWQKK3dpdGhpbiB0aGlzIHBhY2thZ2UsIHVzdWFsbHkgaW4gdGhlIGBpbnRsLycgc3ViZGlyZWN0b3J5LCBzbyBwcmlvcgoraW5zdGFsbGF0aW9uIG9mIHRoZSBHTlUgYGdldHRleHQnIHBhY2thZ2UgaXMgX25vdF8gcmVxdWlyZWQuCitJbnN0YWxsZXJzIG1heSB1c2Ugc3BlY2lhbCBvcHRpb25zIGF0IGNvbmZpZ3VyYXRpb24gdGltZSBmb3IgY2hhbmdpbmcKK3RoZSBkZWZhdWx0IGJlaGF2aW91ci4gIFRoZSBjb21tYW5kczoKKworICAgICAuL2NvbmZpZ3VyZSAtLXdpdGgtaW5jbHVkZWQtZ2V0dGV4dAorICAgICAuL2NvbmZpZ3VyZSAtLWRpc2FibGUtbmxzCisKK3dpbGwsIHJlc3BlY3RpdmVseSwgYnlwYXNzIGFueSBwcmUtZXhpc3RpbmcgYGdldHRleHQnIHRvIHVzZSB0aGUKK2ludGVybmF0aW9uYWxpemluZyByb3V0aW5lcyBwcm92aWRlZCB3aXRoaW4gdGhpcyBwYWNrYWdlLCBvciBlbHNlLAorX3RvdGFsbHlfIGRpc2FibGUgdHJhbnNsYXRpb24gb2YgbWVzc2FnZXMuCisKKyAgIFdoZW4geW91IGFscmVhZHkgaGF2ZSBHTlUgYGdldHRleHQnIGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbSBhbmQgcnVuCitjb25maWd1cmUgd2l0aG91dCBhbiBvcHRpb24gZm9yIHlvdXIgbmV3IHBhY2thZ2UsIGBjb25maWd1cmUnIHdpbGwKK3Byb2JhYmx5IGRldGVjdCB0aGUgcHJldmlvdXNseSBidWlsdCBhbmQgaW5zdGFsbGVkIGBsaWJpbnRsLmEnIGZpbGUgYW5kCit3aWxsIGRlY2lkZSB0byB1c2UgdGhpcy4gIFRoaXMgbWlnaHQgbm90IGJlIGRlc2lyYWJsZS4gIFlvdSBzaG91bGQgdXNlCit0aGUgbW9yZSByZWNlbnQgdmVyc2lvbiBvZiB0aGUgR05VIGBnZXR0ZXh0JyBsaWJyYXJ5LiAgSS5lLiBpZiB0aGUgZmlsZQorYGludGwvVkVSU0lPTicgc2hvd3MgdGhhdCB0aGUgbGlicmFyeSB3aGljaCBjb21lcyB3aXRoIHRoaXMgcGFja2FnZSBpcworbW9yZSByZWNlbnQsIHlvdSBzaG91bGQgdXNlCisKKyAgICAgLi9jb25maWd1cmUgLS13aXRoLWluY2x1ZGVkLWdldHRleHQKKwordG8gcHJldmVudCBhdXRvLWRldGVjdGlvbi4KKworICAgVGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyB3aWxsIG5vdCB0ZXN0IGZvciB0aGUgYGNhdGdldHMnIGZ1bmN0aW9uCithbmQgdGhlcmVmb3JlIGl0IHdpbGwgbm90IGJlIHVzZWQuICBUaGUgcmVhc29uIGlzIHRoYXQgZXZlbiBhbgorZW11bGF0aW9uIG9mIGBnZXR0ZXh0JyBvbiB0b3Agb2YgYGNhdGdldHMnIGNvdWxkIG5vdCBwcm92aWRlIGFsbCB0aGUKK2V4dGVuc2lvbnMgb2YgdGhlIEdOVSBgZ2V0dGV4dCcgbGlicmFyeS4KKworICAgSW50ZXJuYXRpb25hbGl6ZWQgcGFja2FnZXMgdXN1YWxseSBoYXZlIG1hbnkgYHBvL0xMLnBvJyBmaWxlcywgd2hlcmUKK0xMIGdpdmVzIGFuIElTTyA2MzkgdHdvLWxldHRlciBjb2RlIGlkZW50aWZ5aW5nIHRoZSBsYW5ndWFnZS4gIFVubGVzcwordHJhbnNsYXRpb25zIGhhdmUgYmVlbiBmb3JiaWRkZW4gYXQgYGNvbmZpZ3VyZScgdGltZSBieSB1c2luZyB0aGUKK2AtLWRpc2FibGUtbmxzJyBzd2l0Y2gsIGFsbCBhdmFpbGFibGUgdHJhbnNsYXRpb25zIGFyZSBpbnN0YWxsZWQKK3RvZ2V0aGVyIHdpdGggdGhlIHBhY2thZ2UuICBIb3dldmVyLCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYExJTkdVQVMnCittYXkgYmUgc2V0LCBwcmlvciB0byBjb25maWd1cmF0aW9uLCB0byBsaW1pdCB0aGUgaW5zdGFsbGVkIHNldC4KK2BMSU5HVUFTJyBzaG91bGQgdGhlbiBjb250YWluIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgdHdvLWxldHRlcgorY29kZXMsIHN0YXRpbmcgd2hpY2ggbGFuZ3VhZ2VzIGFyZSBhbGxvd2VkLgorCisxLjMgVXNpbmcgVGhpcyBQYWNrYWdlCis9PT09PT09PT09PT09PT09PT09PT09CisKK0FzIGEgdXNlciwgaWYgeW91ciBsYW5ndWFnZSBoYXMgYmVlbiBpbnN0YWxsZWQgZm9yIHRoaXMgcGFja2FnZSwgeW91Citvbmx5IGhhdmUgdG8gc2V0IHRoZSBgTEFORycgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGFwcHJvcHJpYXRlCitgTExfQ0MnIGNvbWJpbmF0aW9uLiAgSWYgeW91IGhhcHBlbiB0byBoYXZlIHRoZSBgTENfQUxMJyBvciBzb21lIG90aGVyCitgTENfeHh4JyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc2V0LCB5b3Ugc2hvdWxkIHVuc2V0IHRoZW0gYmVmb3JlCitzZXR0aW5nIGBMQU5HJywgb3RoZXJ3aXNlIHRoZSBzZXR0aW5nIG9mIGBMQU5HJyB3aWxsIG5vdCBoYXZlIHRoZQorZGVzaXJlZCBlZmZlY3QuICBIZXJlIGBMTCcgaXMgYW4gSVNPIDYzOSB0d28tbGV0dGVyIGxhbmd1YWdlIGNvZGUsIGFuZAorYENDJyBpcyBhbiBJU08gMzE2NiB0d28tbGV0dGVyIGNvdW50cnkgY29kZS4gIEZvciBleGFtcGxlLCBsZXQncworc3VwcG9zZSB0aGF0IHlvdSBzcGVhayBHZXJtYW4gYW5kIGxpdmUgaW4gR2VybWFueS4gIEF0IHRoZSBzaGVsbAorcHJvbXB0LCBtZXJlbHkgZXhlY3V0ZSBgc2V0ZW52IExBTkcgZGVfREUnIChpbiBgY3NoJyksCitgZXhwb3J0IExBTkc7IExBTkc9ZGVfREUnIChpbiBgc2gnKSBvciBgZXhwb3J0IExBTkc9ZGVfREUnIChpbiBgYmFzaCcpLgorVGhpcyBjYW4gYmUgZG9uZSBmcm9tIHlvdXIgYC5sb2dpbicgb3IgYC5wcm9maWxlJyBmaWxlLCBvbmNlIGFuZCBmb3IKK2FsbC4KKworICAgWW91IG1pZ2h0IHRoaW5rIHRoYXQgdGhlIGNvdW50cnkgY29kZSBzcGVjaWZpY2F0aW9uIGlzIHJlZHVuZGFudC4KK0J1dCBpbiBmYWN0LCBzb21lIGxhbmd1YWdlcyBoYXZlIGRpYWxlY3RzIGluIGRpZmZlcmVudCBjb3VudHJpZXMuICBGb3IKK2V4YW1wbGUsIGBkZV9BVCcgaXMgdXNlZCBmb3IgQXVzdHJpYSwgYW5kIGBwdF9CUicgZm9yIEJyYXppbC4gIFRoZQorY291bnRyeSBjb2RlIHNlcnZlcyB0byBkaXN0aW5ndWlzaCB0aGUgZGlhbGVjdHMuCisKKyAgIFRoZSBsb2NhbGUgbmFtaW5nIGNvbnZlbnRpb24gb2YgYExMX0NDJywgd2l0aCBgTEwnIGRlbm90aW5nIHRoZQorbGFuZ3VhZ2UgYW5kIGBDQycgZGVub3RpbmcgdGhlIGNvdW50cnksIGlzIHRoZSBvbmUgdXNlIG9uIHN5c3RlbXMgYmFzZWQKK29uIEdOVSBsaWJjLiAgT24gb3RoZXIgc3lzdGVtcywgc29tZSB2YXJpYXRpb25zIG9mIHRoaXMgc2NoZW1lIGFyZQordXNlZCwgc3VjaCBhcyBgTEwnIG9yIGBMTF9DQy5FTkNPRElORycuICBZb3UgY2FuIGdldCB0aGUgbGlzdCBvZgorbG9jYWxlcyBzdXBwb3J0ZWQgYnkgeW91ciBzeXN0ZW0gZm9yIHlvdXIgbGFuZ3VhZ2UgYnkgcnVubmluZyB0aGUKK2NvbW1hbmQgYGxvY2FsZSAtYSB8IGdyZXAgJ15MTCcnLgorCisgICBOb3QgYWxsIHByb2dyYW1zIGhhdmUgdHJhbnNsYXRpb25zIGZvciBhbGwgbGFuZ3VhZ2VzLiAgQnkgZGVmYXVsdCwgYW4KK0VuZ2xpc2ggbWVzc2FnZSBpcyBzaG93biBpbiBwbGFjZSBvZiBhIG5vbmV4aXN0ZW50IHRyYW5zbGF0aW9uLiAgSWYgeW91Cit1bmRlcnN0YW5kIG90aGVyIGxhbmd1YWdlcywgeW91IGNhbiBzZXQgdXAgYSBwcmlvcml0eSBsaXN0IG9mIGxhbmd1YWdlcy4KK1RoaXMgaXMgZG9uZSB0aHJvdWdoIGEgZGlmZmVyZW50IGVudmlyb25tZW50IHZhcmlhYmxlLCBjYWxsZWQKK2BMQU5HVUFHRScuICBHTlUgYGdldHRleHQnIGdpdmVzIHByZWZlcmVuY2UgdG8gYExBTkdVQUdFJyBvdmVyIGBMQU5HJworZm9yIHRoZSBwdXJwb3NlIG9mIG1lc3NhZ2UgaGFuZGxpbmcsIGJ1dCB5b3Ugc3RpbGwgbmVlZCB0byBoYXZlIGBMQU5HJworc2V0IHRvIHRoZSBwcmltYXJ5IGxhbmd1YWdlOyB0aGlzIGlzIHJlcXVpcmVkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZQorc3lzdGVtIGxpYnJhcmllcy4gIEZvciBleGFtcGxlLCBzb21lIFN3ZWRpc2ggdXNlcnMgd2hvIHdvdWxkIHJhdGhlcgorcmVhZCB0cmFuc2xhdGlvbnMgaW4gR2VybWFuIHRoYW4gRW5nbGlzaCBmb3Igd2hlbiBTd2VkaXNoIGlzIG5vdAorYXZhaWxhYmxlLCBzZXQgYExBTkdVQUdFJyB0byBgc3Y6ZGUnIHdoaWxlIGxlYXZpbmcgYExBTkcnIHRvIGBzdl9TRScuCisKKyAgIFNwZWNpYWwgYWR2aWNlIGZvciBOb3J3ZWdpYW4gdXNlcnM6IFRoZSBsYW5ndWFnZSBjb2RlIGZvciBOb3J3ZWdpYW4KK2Jva21hKmwgY2hhbmdlZCBmcm9tIGBubycgdG8gYG5iJyByZWNlbnRseSAoaW4gMjAwMykuICBEdXJpbmcgdGhlCit0cmFuc2l0aW9uIHBlcmlvZCwgd2hpbGUgc29tZSBtZXNzYWdlIGNhdGFsb2dzIGZvciB0aGlzIGxhbmd1YWdlIGFyZQoraW5zdGFsbGVkIHVuZGVyIGBuYicgYW5kIHNvbWUgb2xkZXIgb25lcyB1bmRlciBgbm8nLCBpdCdzIHJlY29tbWVuZGVkCitmb3IgTm9yd2VnaWFuIHVzZXJzIHRvIHNldCBgTEFOR1VBR0UnIHRvIGBuYjpubycgc28gdGhhdCBib3RoIG5ld2VyIGFuZAorb2xkZXIgdHJhbnNsYXRpb25zIGFyZSB1c2VkLgorCisgICBJbiB0aGUgYExBTkdVQUdFJyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgYnV0IG5vdCBpbiB0aGUgYExBTkcnCitlbnZpcm9ubWVudCB2YXJpYWJsZSwgYExMX0NDJyBjb21iaW5hdGlvbnMgY2FuIGJlIGFiYnJldmlhdGVkIGFzIGBMTCcKK3RvIGRlbm90ZSB0aGUgbGFuZ3VhZ2UncyBtYWluIGRpYWxlY3QuICBGb3IgZXhhbXBsZSwgYGRlJyBpcyBlcXVpdmFsZW50Cit0byBgZGVfREUnIChHZXJtYW4gYXMgc3Bva2VuIGluIEdlcm1hbnkpLCBhbmQgYHB0JyB0byBgcHRfUFQnCisoUG9ydHVndWVzZSBhcyBzcG9rZW4gaW4gUG9ydHVnYWwpIGluIHRoaXMgY29udGV4dC4KKworMS40IFRyYW5zbGF0aW5nIFRlYW1zCis9PT09PT09PT09PT09PT09PT09PT0KKworRm9yIHRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QgdG8gYmUgYSBzdWNjZXNzLCB3ZSBuZWVkIGludGVyZXN0ZWQKK3Blb3BsZSB3aG8gbGlrZSB0aGVpciBvd24gbGFuZ3VhZ2UgYW5kIHdyaXRlIGl0IHdlbGwsIGFuZCB3aG8gYXJlIGFsc28KK2FibGUgdG8gc3luZXJnaXplIHdpdGggb3RoZXIgdHJhbnNsYXRvcnMgc3BlYWtpbmcgdGhlIHNhbWUgbGFuZ3VhZ2UuCitFYWNoIHRyYW5zbGF0aW9uIHRlYW0gaGFzIGl0cyBvd24gbWFpbGluZyBsaXN0LiAgVGhlIHVwLXRvLWRhdGUgbGlzdCBvZgordGVhbXMgY2FuIGJlIGZvdW5kIGF0IHRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QncyBob21lcGFnZSwKK2BodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy8nLCBpbiB0aGUgIlRlYW1zIiBhcmVhLgorCisgICBJZiB5b3UnZCBsaWtlIHRvIHZvbHVudGVlciB0byBfd29ya18gYXQgdHJhbnNsYXRpbmcgbWVzc2FnZXMsIHlvdQorc2hvdWxkIGJlY29tZSBhIG1lbWJlciBvZiB0aGUgdHJhbnNsYXRpbmcgdGVhbSBmb3IgeW91ciBvd24gbGFuZ3VhZ2UuCitUaGUgc3Vic2NyaWJpbmcgYWRkcmVzcyBpcyBfbm90XyB0aGUgc2FtZSBhcyB0aGUgbGlzdCBpdHNlbGYsIGl0IGhhcworYC1yZXF1ZXN0JyBhcHBlbmRlZC4gIEZvciBleGFtcGxlLCBzcGVha2VycyBvZiBTd2VkaXNoIGNhbiBzZW5kIGEKK21lc3NhZ2UgdG8gYHN2LXJlcXVlc3RAbGkub3JnJywgaGF2aW5nIHRoaXMgbWVzc2FnZSBib2R5OgorCisgICAgIHN1YnNjcmliZQorCisgICBLZWVwIGluIG1pbmQgdGhhdCB0ZWFtIG1lbWJlcnMgYXJlIGV4cGVjdGVkIHRvIHBhcnRpY2lwYXRlCitfYWN0aXZlbHlfIGluIHRyYW5zbGF0aW9ucywgb3IgYXQgc29sdmluZyB0cmFuc2xhdGlvbmFsIGRpZmZpY3VsdGllcywKK3JhdGhlciB0aGFuIG1lcmVseSBsdXJraW5nIGFyb3VuZC4gIElmIHlvdXIgdGVhbSBkb2VzIG5vdCBleGlzdCB5ZXQgYW5kCit5b3Ugd2FudCB0byBzdGFydCBvbmUsIG9yIGlmIHlvdSBhcmUgdW5zdXJlIGFib3V0IHdoYXQgdG8gZG8gb3IgaG93IHRvCitnZXQgc3RhcnRlZCwgcGxlYXNlIHdyaXRlIHRvIGBjb29yZGluYXRvckB0cmFuc2xhdGlvbnByb2plY3Qub3JnJyB0bworcmVhY2ggdGhlIGNvb3JkaW5hdG9yIGZvciBhbGwgdHJhbnNsYXRvciB0ZWFtcy4KKworICAgVGhlIEVuZ2xpc2ggdGVhbSBpcyBzcGVjaWFsLiAgSXQgd29ya3MgYXQgaW1wcm92aW5nIGFuZCB1bmlmb3JtaXppbmcKK3RoZSB0ZXJtaW5vbG9neSBpbiB1c2UuICBQcm92ZW4gbGluZ3Vpc3RpYyBza2lsbHMgYXJlIHByYWlzZWQgbW9yZSB0aGFuCitwcm9ncmFtbWluZyBza2lsbHMsIGhlcmUuCisKKzEuNSBBdmFpbGFibGUgUGFja2FnZXMKKz09PT09PT09PT09PT09PT09PT09PT0KKworTGFuZ3VhZ2VzIGFyZSBub3QgZXF1YWxseSBzdXBwb3J0ZWQgaW4gYWxsIHBhY2thZ2VzLiAgVGhlIGZvbGxvd2luZworbWF0cml4IHNob3dzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGludGVybmF0aW9uYWxpemF0aW9uLCBhcyBvZiBOb3ZlbWJlcgorMjAwNy4gIFRoZSBtYXRyaXggc2hvd3MsIGluIHJlZ2FyZCBvZiBlYWNoIHBhY2thZ2UsIGZvciB3aGljaCBsYW5ndWFnZXMKK1BPIGZpbGVzIGhhdmUgYmVlbiBzdWJtaXR0ZWQgdG8gdHJhbnNsYXRpb24gY29vcmRpbmF0aW9uLCB3aXRoIGEKK3RyYW5zbGF0aW9uIHBlcmNlbnRhZ2Ugb2YgYXQgbGVhc3QgNTAlLgorCisgICAgIFJlYWR5IFBPIGZpbGVzICAgICAgIGFmIGFtIGFyIGF6IGJlIGJnIGJzIGNhIGNzIGN5IGRhIGRlIGVsIGVuIGVuX0dCIGVvCisgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgQ29tcGVuZGl1bSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgIFtdICAgICAgfAorICAgICBhMnBzICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICAgW10gICAgICB8CisgICAgIGFlZ2lzICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgIHwKKyAgICAgYW50LXBob25lICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgfAorICAgICBhbnViaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGFwLXV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYXNwZWxsICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgW10gW10gICAgICAgIFtdICAgICAgfAorICAgICBiYXNoICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGJmZCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYmlic2hlbGYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBiaW51dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGJpc29uICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgYmlzb24tcnVudGltZSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBibHVlei1waW4gICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICBbXSB8CisgICAgIGNmbG93ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY2xpc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgW10gICAgICAgICAgfAorICAgICBjb25zb2xlLXRvb2xzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGNvcmV1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgY3BpbyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjcHBsaWIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisgICAgIGNyeXB0b25pdCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZGlhbG9nICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBkaWZmdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSBbXSBbXSAgICAgICAgICBbXSB8CisgICAgIGRvb2RsZSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZTJmc3Byb2dzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBlbnNjcmlwdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgW10gICAgICB8CisgICAgIGZldGNobWFpbCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICgpIFtdICAgICBbXSAgICAgIHwKKyAgICAgZmluZHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBmaW5kdXRpbHNfc3RhYmxlICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisgICAgIGZsZXggICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZnNsaW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnYXMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdhd2sgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZ2NhbCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnY2MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGdldHRleHQtZXhhbXBsZXMgICB8IFtdICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdICAgICAgICAgIFtdIHwKKyAgICAgZ2V0dGV4dC1ydW50aW1lICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgW10gfAorICAgICBnZXR0ZXh0LXRvb2xzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGdpcCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2xpdiAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBnbHVuYXJjbG9jayAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdtdWx0ICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZ251YmlmZiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgfAorICAgICBnbnVjYXNoICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAoKSAoKSAgICAgW10gICAgICB8CisgICAgIGdudWVkdSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251bGliICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnVuZXQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdudW5ldC1ndGsgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251dGxzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBncGUtYWVyaWFsICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1iZWFtICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWNhbGVuZGFyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtY2xvY2sgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1jb25mICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWNvbnRhY3RzICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtZWRpdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1maWxlbWFuYWdlciAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWdvICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtbG9naW4gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1vd25lcmluZm8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLXBhY2thZ2UgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtc2tldGNoYm9vayAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1zdSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLXRhc2ttYW5hZ2VyICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBncGUtdGltZXNoZWV0ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS10b2RheSAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLXRvZG8gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGhvdG8yICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgW10gICAgICB8CisgICAgIGdwcm9mICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BzZHJpdmUgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncmFtYWRvaXIgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGdyZXAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKyAgICAgZ3JldGwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgfAorICAgICBnc2FzbCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdzcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMtYmFkICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorICAgICBnc3QtcGx1Z2lucy1iYXNlICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisgICAgIGdzdC1wbHVnaW5zLWdvb2QgICB8ICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMtdWdseSAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorICAgICBnc3RyZWFtZXIgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgICAgW10gICAgICB8CisgICAgIGd0aWNrICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgIHwKKyAgICAgZ3RrYW0gICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgfAorICAgICBndGtvcnBoYW4gICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGd0a3NwZWxsICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgIFtdIHwKKyAgICAgZ3V0ZW5wcmludCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorICAgICBoZWxsbyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSB8CisgICAgIGhlcnJpZSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgaHlsYWZheCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBpZHV0aWxzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisgICAgIGluZGVudCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgIFtdICAgICAgICAgICAgIFtdIHwKKyAgICAgaXNvXzE1OTI0ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBpc29fMzE2NiAgICAgICAgICAgfCAgICAgICBbXSAgICBbXSBbXSBbXSBbXSBbXSBbXSBbXSBbXSBbXSAgICAgICAgICBbXSB8CisgICAgIGlzb18zMTY2XzIgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgaXNvXzQyMTcgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgfAorICAgICBpc29fNjM5ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICBbXSB8CisgICAgIGpwaWxvdCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAganRhZyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBqd2hvaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGtiZCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdIFtdICAgICAgICAgICAgIHwKKyAgICAga2V5dG91Y2ggICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBrZXl0b3VjaC1lZGl0b3IgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGtleXRvdWNoLWtleWJvYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGF0cmluZSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgfAorICAgICBsZCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisgICAgIGxlYWZwYWQgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgIHwKKyAgICAgbGliYyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgW10gW10gICAgICAgICAgICAgICAgfAorICAgICBsaWJleGlmICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGxpYmV4dHJhY3RvciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZ3Bld2lkZ2V0ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgfAorICAgICBsaWJncGctZXJyb3IgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGxpYmdwaG90bzIgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZ3Bob3RvMl9wb3J0ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfAorICAgICBsaWJnc2FzbCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmljb252ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdIHwKKyAgICAgbGliaWRuICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgW10gfAorICAgICBsaWZlbGluZXMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAoKSAgICAgICAgICAgICAgICB8CisgICAgIGxpbHlwb25kICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgbGluZ290ZWFjaCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBscHJuZyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGx5bnggICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgbTQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gW10gICAgICAgICAgICAgfAorICAgICBtYWlsZnJvbWQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIG1haWx1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbWFrZSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfAorICAgICBtYW4tZGIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisgICAgIG1pbmljb20gICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgbmFubyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIHBhcnRlZCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgcGlsb3QtcW9mICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBwb3B0ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisgICAgIHBzbWlzYyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcHdkdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBxb2YgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHJhZGl1cyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcmVjb2RlICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgW10gW10gW10gICAgICAgICAgW10gfAorICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisgICAgIHNjcmVlbSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc2Nyb2xsa2VlcGVyICAgICAgIHwgICAgICAgICAgW10gW10gICAgICAgW10gW10gW10gW10gW10gICAgICAgIFtdICAgICAgfAorICAgICBzZWQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgICAgICAgICBbXSB8CisgICAgIHNoYXJlZC1taW1lLWluZm8gICB8ICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgIFtdICgpIFtdICAgICBbXSAgIFtdIHwKKyAgICAgc2hhcnV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgW10gW10gW10gICAgICAgICAgICAgfAorICAgICBzaGlzaGkgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNrZW5jaWwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICgpICAgICAgICAgICAgICAgIHwKKyAgICAgc29sZmVnZSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisgICAgIHNwICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgc3lzdGVtLXRvb2xzLWJhLi4uIHwgICAgICAgW10gICAgICAgW10gW10gW10gW10gICAgW10gW10gW10gICAgIFtdICAgICAgfAorICAgICB0YXIgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIHRleGluZm8gICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgIFtdIHwKKyAgICAgdGluICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICgpICAgICAgfAorICAgICB0dXhwYWludCAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICAgICAgW10gICBbXSB8CisgICAgIHVuaWNvZGUtaGFuLXRyYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdW5pY29kZS10cmFuc2xhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB1dGlsLWxpbnV4ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisgICAgIHV0aWwtbGludXgtbmcgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgdm9yYmlzLXRvb2xzICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICB8CisgICAgIHdkaWZmICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICBbXSAgICAgIHwKKyAgICAgd2dldCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICB4Y2hhdCAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICBbXSBbXSAgICAgICBbXSBbXSAgICAgW10gICAgICB8CisgICAgIHhrZXlib2FyZC1jb25maWcgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgeHBhZCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFmIGFtIGFyIGF6IGJlIGJnIGJzIGNhIGNzIGN5IGRhIGRlIGVsIGVuIGVuX0dCIGVvCisgICAgICAgICAgICAgICAgICAgICAgICAgICA2ICAwICAyICAxICA4IDI2ICAyIDQwIDQ4ICAyIDU2IDg4IDE1ICAxICAxNSAgIDE4CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXMgZXQgZXUgZmEgZmkgZnIgIGdhIGdsIGd1IGhlIGhpIGhyIGh1IGlkIGlzIGl0CisgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgIENvbXBlbmRpdW0gICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGEycHMgICAgICAgICAgICAgICB8ICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSB8CisgICAgIGFlZ2lzICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGFudC1waG9uZSAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGFudWJpcyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGFwLXV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGFzcGVsbCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGJhc2ggICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGJmZCAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGJpYnNoZWxmICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGJpbnV0aWxzICAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGJpc29uICAgICAgICAgICAgICB8IFtdIFtdICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICBbXSB8CisgICAgIGJpc29uLXJ1bnRpbWUgICAgICB8ICAgIFtdICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICBbXSB8CisgICAgIGJsdWV6LXBpbiAgICAgICAgICB8ICAgICAgICAgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICBbXSBbXSAgICAgICB8CisgICAgIGNmbG93ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGNsaXNwICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGNvbnNvbGUtdG9vbHMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGNvcmV1dGlscyAgICAgICAgICB8IFtdIFtdICAgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGNwaW8gICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGNwcGxpYiAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGNyeXB0b25pdCAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGRpYWxvZyAgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGRpZmZ1dGlscyAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICBbXSBbXSAgICBbXSAgICAgICBbXSBbXSAgICBbXSB8CisgICAgIGRvb2RsZSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGUyZnNwcm9ncyAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGVuc2NyaXB0ICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICB8CisgICAgIGZldGNobWFpbCAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGZpbmR1dGlscyAgICAgICAgICB8ICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGZpbmR1dGlsc19zdGFibGUgICB8ICAgIFtdICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGZsZXggICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGZzbGludCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdhcyAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdhd2sgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAoKSB8CisgICAgIGdjYWwgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdjYyAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdldHRleHQtZXhhbXBsZXMgICB8IFtdICAgICAgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSB8CisgICAgIGdldHRleHQtcnVudGltZSAgICB8IFtdICAgICAgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICBbXSB8CisgICAgIGdldHRleHQtdG9vbHMgICAgICB8IFtdICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGdpcCAgICAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdsaXYgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdsdW5hcmNsb2NrICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGdtdWx0ICAgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGdudWJpZmYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSB8CisgICAgIGdudWNhc2ggICAgICAgICAgICB8ICgpICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICB8CisgICAgIGdudWVkdSAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdudWxpYiAgICAgICAgICAgICB8IFtdIFtdICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdudW5ldCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdudW5ldC1ndGsgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdudXRscyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1hZXJpYWwgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1iZWFtICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1jYWxlbmRhciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1jbG9jayAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGdwZS1jb25mICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1jb250YWN0cyAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1lZGl0ICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICB8CisgICAgIGdwZS1maWxlbWFuYWdlciAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1nbyAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGdwZS1sb2dpbiAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGdwZS1vd25lcmluZm8gICAgICB8IFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICB8CisgICAgIGdwZS1wYWNrYWdlICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1za2V0Y2hib29rICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1zdSAgICAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGdwZS10YXNrbWFuYWdlciAgICB8IFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS10aW1lc2hlZXQgICAgICB8IFtdICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisgICAgIGdwZS10b2RheSAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS10b2RvICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwaG90bzIgICAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIGdwcm9mICAgICAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisgICAgIGdwc2RyaXZlICAgICAgICAgICB8ICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdyYW1hZG9pciAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdyZXAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdyZXRsICAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSB8CisgICAgIGdzYXNsICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisgICAgIGdzcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdzdC1wbHVnaW5zLWJhZCAgICB8IFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIGdzdC1wbHVnaW5zLWJhc2UgICB8IFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIGdzdC1wbHVnaW5zLWdvb2QgICB8IFtdICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIGdzdC1wbHVnaW5zLXVnbHkgICB8IFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIGdzdHJlYW1lciAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIGd0aWNrICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGd0a2FtICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIGd0a29ycGhhbiAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGd0a3NwZWxsICAgICAgICAgICB8IFtdICAgIFtdICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIGd1dGVucHJpbnQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGhlbGxvICAgICAgICAgICAgICB8IFtdIFtdIFtdIFtdIFtdIFtdICBbXSBbXSAgICBbXSAgICBbXSBbXSBbXSAgICBbXSB8CisgICAgIGhlcnJpZSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGh5bGFmYXggICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGlkdXRpbHMgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSB8CisgICAgIGluZGVudCAgICAgICAgICAgICB8IFtdIFtdIFtdICAgIFtdIFtdICBbXSBbXSAgICAgICAgICAgICBbXSBbXSAgICBbXSB8CisgICAgIGlzb18xNTkyNCAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGlzb18zMTY2ICAgICAgICAgICB8IFtdIFtdIFtdICAgIFtdIFtdICAgICBbXSBbXSBbXSBbXSBbXSBbXSBbXSAgICBbXSB8CisgICAgIGlzb18zMTY2XzIgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGlzb180MjE3ICAgICAgICAgICB8IFtdIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIGlzb182MzkgICAgICAgICAgICB8IFtdICAgICAgIFtdIFtdIFtdICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGpwaWxvdCAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGp0YWcgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGp3aG9pcyAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSB8CisgICAgIGtiZCAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGtleXRvdWNoICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGtleXRvdWNoLWVkaXRvciAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGtleXRvdWNoLWtleWJvYS4uLiB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGxhdHJpbmUgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGxkICAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxlYWZwYWQgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICBbXSAgICAgICBbXSAgICAgICBbXSAgICAgICBbXSB8CisgICAgIGxpYmMgICAgICAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGxpYmV4aWYgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmV4dHJhY3RvciAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmdwZXdpZGdldCAgICAgICB8IFtdICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICBbXSBbXSAgICAgICB8CisgICAgIGxpYmdwZy1lcnJvciAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmdwaG90bzIgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGxpYmdwaG90bzJfcG9ydCAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGxpYmdzYXNsICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmljb252ICAgICAgICAgICB8ICAgIFtdICAgICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmlkbiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIGxpZmVsaW5lcyAgICAgICAgICB8ICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpbHlwb25kICAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpbmdvdGVhY2ggICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSB8CisgICAgIGxwcm5nICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGx5bnggICAgICAgICAgICAgICB8ICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIG00ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICBbXSBbXSAgICAgICAgICAgICAgICBbXSAgICAgICB8CisgICAgIG1haWxmcm9tZCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIG1haWx1dGlscyAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIG1ha2UgICAgICAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICBbXSBbXSAgICBbXSAgICBbXSAgICBbXSAgICAgICB8CisgICAgIG1hbi1kYiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIG1pbmljb20gICAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIG5hbm8gICAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgIFtdICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIG9wY29kZXMgICAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHBhcnRlZCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSB8CisgICAgIHBpbG90LXFvZiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHBvcHQgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICBbXSBbXSAgICAgICAgICAgICAgICAgICBbXSAgICB8CisgICAgIHBzbWlzYyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIHB3ZHV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHFvZiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisgICAgIHJhZGl1cyAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHJlY29kZSAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICBbXSBbXSAgICBbXSAgICAgICBbXSBbXSAgICBbXSB8CisgICAgIHJwbSAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisgICAgIHNjcmVlbSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNjcm9sbGtlZXBlciAgICAgICB8IFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIHNlZCAgICAgICAgICAgICAgICB8IFtdIFtdICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIHNoYXJlZC1taW1lLWluZm8gICB8IFtdICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIHNoYXJ1dGlscyAgICAgICAgICB8IFtdIFtdICAgICAgIFtdIFtdICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIHNoaXNoaSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNrZW5jaWwgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNvbGZlZ2UgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIHNvdW5kdHJhY2tlciAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisgICAgIHNwICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHN5c3RlbS10b29scy1iYS4uLiB8IFtdICAgIFtdICAgIFtdIFtdICBbXSAgICAgICAgICAgICBbXSBbXSBbXSAgICBbXSB8CisgICAgIHRhciAgICAgICAgICAgICAgICB8ICAgIFtdIFtdICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIHRleGluZm8gICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICB8CisgICAgIHRpbiAgICAgICAgICAgICAgICB8ICAgIFtdICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHR1eHBhaW50ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIHVuaWNvZGUtaGFuLXRyYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHVuaWNvZGUtdHJhbnNsYS4uLiB8ICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHV0aWwtbGludXggICAgICAgICB8IFtdIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSB8CisgICAgIHV0aWwtbGludXgtbmcgICAgICB8IFtdIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSB8CisgICAgIHZvcmJpcy10b29scyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHdhc3Rlc2VkZ2UgICAgICAgICB8ICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHdkaWZmICAgICAgICAgICAgICB8IFtdIFtdICAgICAgICAgIFtdICBbXSBbXSAgICAgICAgICAgICBbXSBbXSAgICBbXSB8CisgICAgIHdnZXQgICAgICAgICAgICAgICB8ICAgIFtdICAgICAgIFtdIFtdICBbXSAgICAgICAgICAgICBbXSBbXSBbXSAgICBbXSB8CisgICAgIHhjaGF0ICAgICAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICAgICAgICBbXSAgICBbXSAgICBbXSAgICAgICBbXSB8CisgICAgIHhrZXlib2FyZC1jb25maWcgICB8IFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIHhwYWQgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVzIGV0IGV1IGZhIGZpIGZyICBnYSBnbCBndSBoZSBoaSBociBodSBpZCBpcyBpdAorICAgICAgICAgICAgICAgICAgICAgICAgICA4NSAyMiAxNCAgMiA0OCAxMDEgNjEgMTIgIDIgIDggIDIgIDYgNTMgMjkgIDEgNTIKKworICAgICAgICAgICAgICAgICAgICAgICAgICBqYSBrYSBrbyBrdSBreSBsZyBsdCBsdiBtayBtbiBtcyBtdCBuYiBuZSBubCAgbm4KKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgQ29tcGVuZGl1bSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgYTJwcyAgICAgICAgICAgICAgIHwgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgIHwKKyAgICAgYWVnaXMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgIHwKKyAgICAgYW50LXBob25lICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgYW51YmlzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgW10gICAgIHwKKyAgICAgYXAtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgYXNwZWxsICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgIHwKKyAgICAgYmFzaCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYmlic2hlbGYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgYmludXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYmlzb24gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgW10gICAgIHwKKyAgICAgYmlzb24tcnVudGltZSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgW10gICAgIHwKKyAgICAgYmx1ZXotcGluICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgIHwKKyAgICAgY2Zsb3cgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY2xpc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgY29uc29sZS10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY29yZXV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgY3BpbyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgY3BwbGliICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgY3J5cHRvbml0ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZGlhbG9nICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgIHwKKyAgICAgZGlmZnV0aWxzICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgIHwKKyAgICAgZG9vZGxlICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZTJmc3Byb2dzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZmV0Y2htYWlsICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZmluZHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZmluZHV0aWxzX3N0YWJsZSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZmxleCAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZnNsaW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2FzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2F3ayAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ2NhbCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2NjICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2V0dGV4dC1leGFtcGxlcyAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgIHwKKyAgICAgZ2V0dGV4dC1ydW50aW1lICAgIHwgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2lwICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgIHwKKyAgICAgZ2xpdiAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgIHwKKyAgICAgZ211bHQgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgIHwKKyAgICAgZ251YmlmZiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251Y2FzaCAgICAgICAgICAgIHwgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgKCkgICAgICAgIHwKKyAgICAgZ251ZWR1ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251bGliICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ251bmV0ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251bmV0LWd0ayAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251dGxzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWFlcmlhbCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3BlLWNhbGVuZGFyICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWNsb2NrICAgICAgICAgIHwgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3BlLWNvbnRhY3RzICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWVkaXQgICAgICAgICAgIHwgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3BlLWZpbGVtYW5hZ2VyICAgIHwgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWdvICAgICAgICAgICAgIHwgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3BlLWxvZ2luICAgICAgICAgIHwgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3BlLW93bmVyaW5mbyAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3BlLXBhY2thZ2UgICAgICAgIHwgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3BlLXN1ICAgICAgICAgICAgIHwgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3BlLXRhc2ttYW5hZ2VyICAgIHwgW10gICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3BlLXRvZGF5ICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3BlLXRvZG8gICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3Byb2YgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BzZHJpdmUgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3JhbWFkb2lyICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgIHwKKyAgICAgZ3JlcCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3JldGwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3Nhc2wgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3NzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMtYmFkICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMtYmFzZSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMtZ29vZCAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMtdWdseSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3N0cmVhbWVyICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3RrYW0gICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3Rrb3JwaGFuICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3Rrc3BlbGwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgIHwKKyAgICAgZ3V0ZW5wcmludCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgaGVsbG8gICAgICAgICAgICAgIHwgW10gW10gW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgW10gIFtdIHwKKyAgICAgaGVycmllICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgaHlsYWZheCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgaWR1dGlscyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgaW5kZW50ICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgaXNvXzE1OTI0ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgaXNvXzMxNjYgICAgICAgICAgIHwgW10gICAgW10gW10gICAgICAgW10gICAgW10gICAgICAgICAgW10gICAgW10gIFtdIHwKKyAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgaXNvXzQyMTcgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgaXNvXzYzOSAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gIFtdIHwKKyAgICAganBpbG90ICAgICAgICAgICAgIHwgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgIHwKKyAgICAganRhZyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgandob2lzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAga2JkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAga2V5dG91Y2ggICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAga2V5dG91Y2gtZWRpdG9yICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAga2V5dG91Y2gta2V5Ym9hLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGF0cmluZSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbGQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGVhZnBhZCAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliYyAgICAgICAgICAgICAgIHwgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbGliZXhpZiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZXh0cmFjdG9yICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZ3Bld2lkZ2V0ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbGliZ3BnLWVycm9yICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZ3Bob3RvMiAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZ3Bob3RvMl9wb3J0ICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZ3Nhc2wgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbGliaWNvbnYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbGliaWRuICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbGlmZWxpbmVzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbGlseXBvbmQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbGluZ290ZWFjaCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbHBybmcgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbHlueCAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbTQgICAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbWFpbGZyb21kICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbWFpbHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbWFrZSAgICAgICAgICAgICAgIHwgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgbWFuLWRiICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbWluaWNvbSAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbmFubyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgW10gICAgIHwKKyAgICAgb3Bjb2RlcyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgcGFydGVkICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgcGlsb3QtcW9mICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcG9wdCAgICAgICAgICAgICAgIHwgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgcHNtaXNjICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgIHwKKyAgICAgcHdkdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcW9mICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcmVjb2RlICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgcnBtICAgICAgICAgICAgICAgIHwgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc2NyZWVtICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc2Nyb2xsa2VlcGVyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gIFtdIHwKKyAgICAgc2VkICAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgc2hhcmVkLW1pbWUtaW5mbyAgIHwgW10gICAgW10gICAgICAgICAgW10gICAgICAgICAgW10gICAgW10gICAgW10gIFtdIHwKKyAgICAgc2hhcnV0aWxzICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgc2hpc2hpICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc2tlbmNpbCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc29sZmVnZSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICgpIHwKKyAgICAgc291bmR0cmFja2VyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc3AgICAgICAgICAgICAgICAgIHwgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc3lzdGVtLXRvb2xzLWJhLi4uIHwgW10gICAgW10gICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgdGFyICAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgIHwKKyAgICAgdGluICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdHV4cGFpbnQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgW10gIFtdIHwKKyAgICAgdW5pY29kZS1oYW4tdHJhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdW5pY29kZS10cmFuc2xhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdXRpbC1saW51eCAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgdXRpbC1saW51eC1uZyAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgdm9yYmlzLXRvb2xzICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgd2FzdGVzZWRnZSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgd2RpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgIHwKKyAgICAgd2dldCAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgeGNoYXQgICAgICAgICAgICAgIHwgW10gICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgeGtleWJvYXJkLWNvbmZpZyAgIHwgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKyAgICAgeHBhZCAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgamEga2Ega28ga3Uga3kgbGcgbHQgbHYgbWsgbW4gbXMgbXQgbmIgbmUgbmwgIG5uCisgICAgICAgICAgICAgICAgICAgICAgICAgIDUxICAyIDI1ICAzICAyICAwICA2ICAwICAyICAyIDIwICAwIDExICAxIDEwMyAgNgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHBhIHBsIHB0IHB0X0JSIHJtIHJvIHJ1IHJ3IHNrIHNsIHNxIHNyIHN2ICB0YQorICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICBDb21wZW5kaXVtICAgICAgICAgfCAgICAgICAgICBbXSAgW10gICAgICBbXSAgICAgICBbXSAgICAgICAgICBbXSAgICAgfAorICAgICBhMnBzICAgICAgICAgICAgICAgfCAgICAgICAoKSAgICAgW10gICAgICBbXSBbXSAgICAgICBbXSAgICBbXSBbXSAgICAgfAorICAgICBhZWdpcyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAoKSAoKSAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBhbnQtcGhvbmUgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBhbnViaXMgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBhcC11dGlscyAgICAgICAgICAgfCAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBhc3BlbGwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBiYXNoICAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBiZmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBiaWJzaGVsZiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBiaW51dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBiaXNvbiAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgW10gICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBiaXNvbi1ydW50aW1lICAgICAgfCAgICAgICBbXSAgICAgW10gICAgICBbXSAgICAgICAgICBbXSAgICAgICBbXSAgICAgfAorICAgICBibHVlei1waW4gICAgICAgICAgfCAgICAgICBbXSAgICAgW10gICBbXSBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorICAgICBjZmxvdyAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjb25zb2xlLXRvb2xzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjb3JldXRpbHMgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICBbXSAgICAgfAorICAgICBjcGlvICAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBjcHBsaWIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBjcnlwdG9uaXQgICAgICAgICAgfCAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBkaWFsb2cgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBkaWZmdXRpbHMgICAgICAgICAgfCAgICAgICBbXSAgICAgW10gICAgICBbXSBbXSAgICAgICAgICAgICBbXSBbXSAgICAgfAorICAgICBkb29kbGUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgfAorICAgICBlMmZzcHJvZ3MgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBlbnNjcmlwdCAgICAgICAgICAgfCAgICAgICAgICAgICAgW10gICAgICBbXSBbXSAgICAgICBbXSAgICAgICBbXSAgICAgfAorICAgICBmZXRjaG1haWwgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgICAgICAgfAorICAgICBmaW5kdXRpbHMgICAgICAgICAgfCAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBmaW5kdXRpbHNfc3RhYmxlICAgfCAgICAgICBbXSBbXSAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICBbXSAgICAgfAorICAgICBmbGV4ICAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgW10gICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBmc2xpbnQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBnYXMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnYXdrICAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBnY2FsICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBnY2MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgfAorICAgICBnZXR0ZXh0LWV4YW1wbGVzICAgfCAgICAgICBbXSBbXSAgICAgICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorICAgICBnZXR0ZXh0LXJ1bnRpbWUgICAgfCAgICAgICBbXSBbXSAgICAgICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorICAgICBnZXR0ZXh0LXRvb2xzICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorICAgICBnaXAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgfAorICAgICBnbGl2ICAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgW10gICAgICBbXSBbXSAgICBbXSAgICAgICAgICBbXSAgICAgfAorICAgICBnbHVuYXJjbG9jayAgICAgICAgfCAgICAgICAgICAgICAgW10gICAgICBbXSBbXSAgICBbXSAgICAgICBbXSBbXSAgICAgfAorICAgICBnbXVsdCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSBbXSAgICAgfAorICAgICBnbnViaWZmICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBnbnVjYXNoICAgICAgICAgICAgfCAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBnbnVlZHUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnVsaWIgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgfAorICAgICBnbnVuZXQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnVuZXQtZ3RrICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBnbnV0bHMgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBncGUtYWVyaWFsICAgICAgICAgfCAgICAgICAgICBbXSAgW10gICAgICBbXSBbXSAgICAgICBbXSAgICBbXSBbXSAgICAgfAorICAgICBncGUtYmVhbSAgICAgICAgICAgfCAgICAgICAgICBbXSAgW10gICAgICBbXSBbXSAgICAgICBbXSAgICBbXSBbXSAgICAgfAorICAgICBncGUtY2FsZW5kYXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICBbXSBbXSAgICAgfAorICAgICBncGUtY2xvY2sgICAgICAgICAgfCAgICAgICAgICBbXSAgW10gICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorICAgICBncGUtY29uZiAgICAgICAgICAgfCAgICAgICAgICBbXSAgW10gICAgICBbXSBbXSAgICBbXSBbXSAgICAgICBbXSAgICAgfAorICAgICBncGUtY29udGFjdHMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICBbXSAgICBbXSBbXSAgICAgfAorICAgICBncGUtZWRpdCAgICAgICAgICAgfCAgICAgICBbXSBbXSAgW10gICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorICAgICBncGUtZmlsZW1hbmFnZXIgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgfAorICAgICBncGUtZ28gICAgICAgICAgICAgfCAgICAgICBbXSAgICAgW10gICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorICAgICBncGUtbG9naW4gICAgICAgICAgfCAgICAgICAgICBbXSAgW10gICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorICAgICBncGUtb3duZXJpbmZvICAgICAgfCAgICAgICAgICBbXSAgW10gICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorICAgICBncGUtcGFja2FnZSAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgfAorICAgICBncGUtc2tldGNoYm9vayAgICAgfCAgICAgICAgICBbXSAgW10gICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorICAgICBncGUtc3UgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgW10gICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorICAgICBncGUtdGFza21hbmFnZXIgICAgfCAgICAgICAgICBbXSAgW10gICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorICAgICBncGUtdGltZXNoZWV0ICAgICAgfCAgICAgICAgICBbXSAgW10gICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorICAgICBncGUtdG9kYXkgICAgICAgICAgfCAgICAgICAgICBbXSAgW10gICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorICAgICBncGUtdG9kbyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICBbXSBbXSAgICAgfAorICAgICBncGhvdG8yICAgICAgICAgICAgfCAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICBbXSBbXSAgICAgfAorICAgICBncHJvZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBncHNkcml2ZSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBncmFtYWRvaXIgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgfAorICAgICBncmVwICAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICBbXSAgICAgfAorICAgICBncmV0bCAgICAgICAgICAgICAgfCAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnc2FzbCAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgfAorICAgICBnc3MgICAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICBbXSAgICAgfAorICAgICBnc3QtcGx1Z2lucy1iYWQgICAgfCAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBnc3QtcGx1Z2lucy1iYXNlICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBnc3QtcGx1Z2lucy1nb29kICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBnc3QtcGx1Z2lucy11Z2x5ICAgfCAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBnc3RyZWFtZXIgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICAgfAorICAgICBndGljayAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBndGthbSAgICAgICAgICAgICAgfCAgICBbXSBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBndGtvcnBoYW4gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBndGtzcGVsbCAgICAgICAgICAgfCAgICAgICAgICAgICAgW10gICBbXSBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorICAgICBndXRlbnByaW50ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBoZWxsbyAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgW10gICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorICAgICBoZXJyaWUgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBoeWxhZmF4ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBpZHV0aWxzICAgICAgICAgICAgfCAgICAgICBbXSAgICAgW10gICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBpbmRlbnQgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgW10gICAgICBbXSBbXSAgICBbXSAgICAgICBbXSBbXSAgICAgfAorICAgICBpc29fMTU5MjQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBpc29fMzE2NiAgICAgICAgICAgfCAgICBbXSBbXSBbXSAgW10gICAgICBbXSBbXSBbXSBbXSBbXSBbXSBbXSBbXSAgW10gfAorICAgICBpc29fMzE2Nl8yICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBpc29fNDIxNyAgICAgICAgICAgfCAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSBbXSAgICBbXSAgICBbXSBbXSAgICAgfAorICAgICBpc29fNjM5ICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICBbXSBbXSBbXSBbXSAgICBbXSBbXSAgICAgfAorICAgICBqcGlsb3QgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBqdGFnICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBqd2hvaXMgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBrYmQgICAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBrZXl0b3VjaCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBrZXl0b3VjaC1lZGl0b3IgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBrZXl0b3VjaC1rZXlib2EuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBsYXRyaW5lICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsZCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBsZWFmcGFkICAgICAgICAgICAgfCAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICBbXSAgW10gfAorICAgICBsaWJjICAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICBbXSAgICAgfAorICAgICBsaWJleGlmICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBsaWJleHRyYWN0b3IgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBsaWJncGV3aWRnZXQgICAgICAgfCAgICAgICBbXSBbXSAgW10gICAgICBbXSAgICAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorICAgICBsaWJncGctZXJyb3IgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBsaWJncGhvdG8yICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJncGhvdG8yX3BvcnQgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBsaWJnc2FzbCAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSBbXSAgICAgfAorICAgICBsaWJpY29udiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgfAorICAgICBsaWJpZG4gICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAoKSAgICAgfAorICAgICBsaWZlbGluZXMgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBsaWx5cG9uZCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaW5nb3RlYWNoICAgICAgICAgfCAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBscHJuZyAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBseW54ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBtNCAgICAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgW10gICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBtYWlsZnJvbWQgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBtYWlsdXRpbHMgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBtYWtlICAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBtYW4tZGIgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBtaW5pY29tICAgICAgICAgICAgfCAgICAgICBbXSAgICAgW10gICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBuYW5vICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgW10gICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBwYXJ0ZWQgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBwaWxvdC1xb2YgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBwb3B0ICAgICAgICAgICAgICAgfCAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBwc21pc2MgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBwd2R1dGlscyAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBxb2YgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICByYWRpdXMgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICByZWNvZGUgICAgICAgICAgICAgfCAgICAgICBbXSBbXSAgW10gICAgICBbXSBbXSAgICAgICBbXSAgICAgICBbXSAgICAgfAorICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBzY3JlZW0gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzY3JvbGxrZWVwZXIgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICBbXSAgICBbXSBbXSBbXSAgICAgfAorICAgICBzZWQgICAgICAgICAgICAgICAgfCAgICAgICBbXSBbXSAgW10gICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorICAgICBzaGFyZWQtbWltZS1pbmZvICAgfCAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICAgfAorICAgICBzaGFydXRpbHMgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICAgfAorICAgICBzaGlzaGkgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBza2VuY2lsICAgICAgICAgICAgfCAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBzb2xmZWdlICAgICAgICAgICAgfCAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgfAorICAgICBzcCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzeXN0ZW0tdG9vbHMtYmEuLi4gfCAgICBbXSBbXSBbXSAgW10gICAgICBbXSAgICAgICAgICAgICBbXSBbXSBbXSAgW10gfAorICAgICB0YXIgICAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICBbXSAgICAgfAorICAgICB0ZXhpbmZvICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICB0aW4gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB0dXhwYWludCAgICAgICAgICAgfCAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICBbXSBbXSBbXSBbXSAgICAgfAorICAgICB1bmljb2RlLWhhbi10cmEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB1bmljb2RlLXRyYW5zbGEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB1dGlsLWxpbnV4ICAgICAgICAgfCAgICAgICAgICAgICAgW10gICAgICAgICBbXSAgICAgICBbXSAgICAgICBbXSAgICAgfAorICAgICB1dGlsLWxpbnV4LW5nICAgICAgfCAgICAgICAgICAgICAgW10gICAgICAgICBbXSAgICAgICBbXSAgICAgICBbXSAgICAgfAorICAgICB2b3JiaXMtdG9vbHMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB3ZGlmZiAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgW10gICAgICBbXSBbXSAgICBbXSBbXSAgICAgICBbXSAgICAgfAorICAgICB3Z2V0ICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICBbXSAgICAgfAorICAgICB4Y2hhdCAgICAgICAgICAgICAgfCAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSBbXSBbXSBbXSAgICAgfAorICAgICB4a2V5Ym9hcmQtY29uZmlnICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICBbXSAgICAgfAorICAgICB4cGFkICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICBbXSAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICBvciBwYSBwbCBwdCBwdF9CUiBybSBybyBydSBydyBzayBzbCBzcSBzciBzdiAgdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIDUgNzcgMzEgIDUzICAgIDQgNTggNzIgIDMgNDUgNDYgIDkgNDUgMTIyICAzCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGcgdGggdGsgdHIgdWsgdmVuIHZpICB3YSB4aCB6aF9DTiB6aF9ISyB6aF9UVyB6dQorICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgQ29tcGVuZGl1bSAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDE5CisgICAgIGEycHMgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxOQorICAgICBhZWdpcyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEKKyAgICAgYW50LXBob25lICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2CisgICAgIGFudWJpcyAgICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMQorICAgICBhcC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAoKSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKyAgICAgYXNwZWxsICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8IDE2CisgICAgIGJhc2ggICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorICAgICBiZmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKyAgICAgYmlic2hlbGYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3CisgICAgIGJpbnV0aWxzICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAgOQorICAgICBiaXNvbiAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMjAKKyAgICAgYmlzb24tcnVudGltZSAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDE4CisgICAgIGJsdWV6LXBpbiAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgW10gICAgIFtdICAgICAgICAgIFtdICAgICAgfCAyOAorICAgICBjZmxvdyAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKyAgICAgY2xpc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5CisgICAgIGNvbnNvbGUtdG9vbHMgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorICAgICBjb3JldXRpbHMgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTgKKyAgICAgY3BpbyAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDExCisgICAgIGNwcGxpYiAgICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAxMgorICAgICBjcnlwdG9uaXQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYKKyAgICAgZGlhbG9nICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICBbXSAgICAgW10gICAgICAgICAgICAgICAgICB8ICA5CisgICAgIGRpZmZ1dGlscyAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAyOQorICAgICBkb29kbGUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYKKyAgICAgZTJmc3Byb2dzICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwCisgICAgIGVuc2NyaXB0ICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNgorICAgICBmZXRjaG1haWwgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTIKKyAgICAgZmluZHV0aWxzICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDExCisgICAgIGZpbmR1dGlsc19zdGFibGUgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAxOAorICAgICBmbGV4ICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTUKKyAgICAgZnNsaW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCisgICAgIGdhcyAgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworICAgICBnYXdrICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICAgICAgICAgIHwgMTYKKyAgICAgZ2NhbCAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1CisgICAgIGdjYyAgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAgNworICAgICBnZXR0ZXh0LWV4YW1wbGVzICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICBbXSAgICBbXSAgICBbXSAgICAgIHwgMjkKKyAgICAgZ2V0dGV4dC1ydW50aW1lICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgW10gICAgW10gICAgW10gICAgICB8IDI4CisgICAgIGdldHRleHQtdG9vbHMgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAyMAorICAgICBnaXAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTMKKyAgICAgZ2xpdiAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDExCisgICAgIGdsdW5hcmNsb2NrICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgIFtdICAgICAgfCAxNQorICAgICBnbXVsdCAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMTYKKyAgICAgZ251YmlmZiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCisgICAgIGdudWNhc2ggICAgICAgICAgICB8ICAgICAgICAgICgpIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorICAgICBnbnVlZHUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKyAgICAgZ251bGliICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwCisgICAgIGdudW5ldCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAorICAgICBnbnVuZXQtZ3RrICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKyAgICAgZ251dGxzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0CisgICAgIGdwZS1hZXJpYWwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAxNAorICAgICBncGUtYmVhbSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICAgICAgICAgIHwgMTQKKyAgICAgZ3BlLWNhbGVuZGFyICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3CisgICAgIGdwZS1jbG9jayAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgfCAyMQorICAgICBncGUtY29uZiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gIFtdICAgICBbXSAgICAgICAgICAgICAgICAgIHwgMTYKKyAgICAgZ3BlLWNvbnRhY3RzICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDEwCisgICAgIGdwZS1lZGl0ICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgW10gICAgIFtdICAgICAgICAgIFtdICAgICAgfCAyMgorICAgICBncGUtZmlsZW1hbmFnZXIgICAgfCAgICAgICAgICAgICAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcKKyAgICAgZ3BlLWdvICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICBbXSAgICAgW10gICAgICAgICAgICAgICAgICB8IDE5CisgICAgIGdwZS1sb2dpbiAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgW10gICAgIFtdICAgICAgICAgIFtdICAgICAgfCAyMQorICAgICBncGUtb3duZXJpbmZvICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjEKKyAgICAgZ3BlLXBhY2thZ2UgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2CisgICAgIGdwZS1za2V0Y2hib29rICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNgorICAgICBncGUtc3UgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gIFtdICAgICBbXSAgICAgICAgICAgICAgICAgIHwgMjEKKyAgICAgZ3BlLXRhc2ttYW5hZ2VyICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICBbXSAgICAgW10gICAgICAgICAgICAgICAgICB8IDIxCisgICAgIGdwZS10aW1lc2hlZXQgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAxOAorICAgICBncGUtdG9kYXkgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gIFtdICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjEKKyAgICAgZ3BlLXRvZG8gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8ICA4CisgICAgIGdwaG90bzIgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAyMQorICAgICBncHJvZiAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTMKKyAgICAgZ3BzZHJpdmUgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1CisgICAgIGdyYW1hZG9pciAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNworICAgICBncmVwICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTIKKyAgICAgZ3JldGwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2CisgICAgIGdzYXNsICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAgOQorICAgICBnc3MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcKKyAgICAgZ3N0LXBsdWdpbnMtYmFkICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDEzCisgICAgIGdzdC1wbHVnaW5zLWJhc2UgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMQorICAgICBnc3QtcGx1Z2lucy1nb29kICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICBbXSAgICBbXSAgICBbXSAgICAgIHwgMTYKKyAgICAgZ3N0LXBsdWdpbnMtdWdseSAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDEzCisgICAgIGdzdHJlYW1lciAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxOAorICAgICBndGljayAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcKKyAgICAgZ3RrYW0gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE2CisgICAgIGd0a29ycGhhbiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNworICAgICBndGtzcGVsbCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gIFtdICAgICBbXSAgICBbXSAgICBbXSAgICAgIHwgMjcKKyAgICAgZ3V0ZW5wcmludCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0CisgICAgIGhlbGxvICAgICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAzOAorICAgICBoZXJyaWUgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDgKKyAgICAgaHlsYWZheCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAwCisgICAgIGlkdXRpbHMgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNQorICAgICBpbmRlbnQgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjgKKyAgICAgaXNvXzE1OTI0ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8ICA0CisgICAgIGlzb18zMTY2ICAgICAgICAgICB8ICAgIFtdIFtdIFtdIFtdICAgICBbXSAgW10gICAgIFtdICAgIFtdICAgIFtdICAgICAgfCA1NAorICAgICBpc29fMzE2Nl8yICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICAgICAgICAgIHwgIDQKKyAgICAgaXNvXzQyMTcgICAgICAgICAgIHwgICAgW10gICAgW10gICAgICAgIFtdICAgICAgICAgW10gICAgW10gICAgICAgICAgICB8IDI0CisgICAgIGlzb182MzkgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgW10gICAgIFtdICAgIFtdICAgICAgICAgICAgfCAyNgorICAgICBqcGlsb3QgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICAgICAgICAgIHwgIDcKKyAgICAganRhZyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisgICAgIGp3aG9pcyAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAxMworICAgICBrYmQgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTMKKyAgICAga2V5dG91Y2ggICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA4CisgICAgIGtleXRvdWNoLWVkaXRvciAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorICAgICBrZXl0b3VjaC1rZXlib2EuLi4gfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKyAgICAgbGF0cmluZSAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1CisgICAgIGxkICAgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAxMAorICAgICBsZWFmcGFkICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjQKKyAgICAgbGliYyAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDE5CisgICAgIGxpYmV4aWYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorICAgICBsaWJleHRyYWN0b3IgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKyAgICAgbGliZ3Bld2lkZ2V0ICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICBbXSAgICAgW10gICAgICAgICAgICAgICAgICB8IDIwCisgICAgIGxpYmdwZy1lcnJvciAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorICAgICBsaWJncGhvdG8yICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkKKyAgICAgbGliZ3Bob3RvMl9wb3J0ICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDExCisgICAgIGxpYmdzYXNsICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOAorICAgICBsaWJpY29udiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEKKyAgICAgbGliaWRuICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDExCisgICAgIGxpZmVsaW5lcyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAorICAgICBsaWx5cG9uZCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYKKyAgICAgbGluZ290ZWFjaCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2CisgICAgIGxwcm5nICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgorICAgICBseW54ICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTUKKyAgICAgbTQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDE4CisgICAgIG1haWxmcm9tZCAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworICAgICBtYWlsdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDgKKyAgICAgbWFrZSAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDIwCisgICAgIG1hbi1kYiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOQorICAgICBtaW5pY29tICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTQKKyAgICAgbmFubyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDIwCisgICAgIG9wY29kZXMgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMAorICAgICBwYXJ0ZWQgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTEKKyAgICAgcGlsb3QtcW9mICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxCisgICAgIHBvcHQgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAxOAorICAgICBwc21pc2MgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICAgICAgICAgIHwgMTAKKyAgICAgcHdkdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisgICAgIHFvZiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAorICAgICByYWRpdXMgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcKKyAgICAgcmVjb2RlICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDI1CisgICAgIHJwbSAgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAxMworICAgICBzY3JlZW0gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKyAgICAgc2Nyb2xsa2VlcGVyICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDI2CisgICAgIHNlZCAgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAyMworICAgICBzaGFyZWQtbWltZS1pbmZvICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICAgICAgICAgIHwgMjkKKyAgICAgc2hhcnV0aWxzICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDIzCisgICAgIHNoaXNoaSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworICAgICBza2VuY2lsICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcKKyAgICAgc29sZmVnZSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisgICAgIHNvdW5kdHJhY2tlciAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOQorICAgICBzcCAgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKyAgICAgc3lzdGVtLXRvb2xzLWJhLi4uIHwgICAgW10gICAgW10gW10gICAgIFtdICAgICBbXSAgW10gICAgICAgICAgW10gICAgICB8IDM4CisgICAgIHRhciAgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNworICAgICB0ZXhpbmZvICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICAgICAgICAgIHwgMTUKKyAgICAgdGluICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxCisgICAgIHR1eHBhaW50ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgIFtdICAgICAgfCAxOQorICAgICB1bmljb2RlLWhhbi10cmEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDAKKyAgICAgdW5pY29kZS10cmFuc2xhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCisgICAgIHV0aWwtbGludXggICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyMAorICAgICB1dGlsLWxpbnV4LW5nICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjAKKyAgICAgdm9yYmlzLXRvb2xzICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0CisgICAgIHdhc3Rlc2VkZ2UgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMQorICAgICB3ZGlmZiAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjMKKyAgICAgd2dldCAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDIwCisgICAgIHhjaGF0ICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAyOQorICAgICB4a2V5Ym9hcmQtY29uZmlnICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTQKKyAgICAgeHBhZCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDE1CisgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgIDc2IHRlYW1zICAgICAgICAgICB0ZyB0aCB0ayB0ciB1ayB2ZW4gdmkgIHdhIHhoIHpoX0NOIHpoX0hLIHpoX1RXIHp1CisgICAgICAxNjMgZG9tYWlucyAgICAgICAgICAwICAzICAxIDc0IDUxICAwICAxNDMgMjEgIDEgIDU3ICAgICA3ICAgIDQ1ICAgIDAgIDIwMzYKKworICAgU29tZSBjb3VudGVycyBpbiB0aGUgcHJlY2VkaW5nIG1hdHJpeCBhcmUgaGlnaGVyIHRoYW4gdGhlIG51bWJlciBvZgordmlzaWJsZSBibG9ja3MgbGV0IHVzIGV4cGVjdC4gIFRoaXMgaXMgYmVjYXVzZSBhIGZldyBleHRyYSBQTyBmaWxlcyBhcmUKK3VzZWQgZm9yIGltcGxlbWVudGluZyByZWdpb25hbCB2YXJpYW50cyBvZiBsYW5ndWFnZXMsIG9yIGxhbmd1YWdlCitkaWFsZWN0cy4KKworICAgRm9yIGEgUE8gZmlsZSBpbiB0aGUgbWF0cml4IGFib3ZlIHRvIGJlIGVmZmVjdGl2ZSwgdGhlIHBhY2thZ2UgdG8KK3doaWNoIGl0IGFwcGxpZXMgc2hvdWxkIGFsc28gaGF2ZSBiZWVuIGludGVybmF0aW9uYWxpemVkIGFuZAorZGlzdHJpYnV0ZWQgYXMgc3VjaCBieSBpdHMgbWFpbnRhaW5lci4gIFRoZXJlIG1pZ2h0IGJlIGFuIG9ic2VydmFibGUKK2xhZyBiZXR3ZWVuIHRoZSBtZXJlIGV4aXN0ZW5jZSBhIFBPIGZpbGUgYW5kIGl0cyB3aWRlIGF2YWlsYWJpbGl0eSBpbiBhCitkaXN0cmlidXRpb24uCisKKyAgIElmIE5vdmVtYmVyIDIwMDcgc2VlbXMgdG8gYmUgb2xkLCB5b3UgbWF5IGZldGNoIGEgbW9yZSByZWNlbnQgY29weQorb2YgdGhpcyBgQUJPVVQtTkxTJyBmaWxlIG9uIG1vc3QgR05VIGFyY2hpdmUgc2l0ZXMuICBUaGUgbW9zdAordXAtdG8tZGF0ZSBtYXRyaXggd2l0aCBmdWxsIHBlcmNlbnRhZ2UgZGV0YWlscyBjYW4gYmUgZm91bmQgYXQKK2BodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy9leHRyYS9tYXRyaXguaHRtbCcuCisKKzEuNiBVc2luZyBgZ2V0dGV4dCcgaW4gbmV3IHBhY2thZ2VzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJZiB5b3UgYXJlIHdyaXRpbmcgYSBmcmVlbHkgYXZhaWxhYmxlIHByb2dyYW0gYW5kIHdhbnQgdG8KK2ludGVybmF0aW9uYWxpemUgaXQgeW91IGFyZSB3ZWxjb21lIHRvIHVzZSBHTlUgYGdldHRleHQnIGluIHlvdXIKK3BhY2thZ2UuICBPZiBjb3Vyc2UgeW91IGhhdmUgdG8gcmVzcGVjdCB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2Ugd2hpY2ggY292ZXJzIHRoZSB1c2Ugb2YgdGhlIEdOVSBgZ2V0dGV4dCcgbGlicmFyeS4gIFRoaXMgbWVhbnMKK2luIHBhcnRpY3VsYXIgdGhhdCBldmVuIG5vbi1mcmVlIHByb2dyYW1zIGNhbiB1c2UgYGxpYmludGwnIGFzIGEgc2hhcmVkCitsaWJyYXJ5LCB3aGVyZWFzIG9ubHkgZnJlZSBzb2Z0d2FyZSBjYW4gdXNlIGBsaWJpbnRsJyBhcyBhIHN0YXRpYworbGlicmFyeSBvciB1c2UgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYGxpYmludGwnLgorCisgICBPbmNlIHRoZSBzb3VyY2VzIGFyZSBjaGFuZ2VkIGFwcHJvcHJpYXRlbHkgYW5kIHRoZSBzZXR1cCBjYW4gaGFuZGxlCit0aGUgdXNlIG9mIGBnZXR0ZXh0JyB0aGUgb25seSB0aGluZyBtaXNzaW5nIGFyZSB0aGUgdHJhbnNsYXRpb25zLiAgVGhlCitGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QgaXMgYWxzbyBhdmFpbGFibGUgZm9yIHBhY2thZ2VzIHdoaWNoIGFyZSBub3QKK2RldmVsb3BlZCBpbnNpZGUgdGhlIEdOVSBwcm9qZWN0LiAgVGhlcmVmb3JlIHRoZSBpbmZvcm1hdGlvbiBnaXZlbiBhYm92ZQorYXBwbGllcyBhbHNvIGZvciBldmVyeSBvdGhlciBGcmVlIFNvZnR3YXJlIFByb2plY3QuICBDb250YWN0CitgY29vcmRpbmF0b3JAdHJhbnNsYXRpb25wcm9qZWN0Lm9yZycgdG8gbWFrZSB0aGUgYC5wb3QnIGZpbGVzIGF2YWlsYWJsZQordG8gdGhlIHRyYW5zbGF0aW9uIHRlYW1zLgorCmRpZmYgLS1naXQgYS9BVVRIT1JTIGIvQVVUSE9SUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzQ5YTkyCi0tLSAvZGV2L251bGwKKysrIGIvQVVUSE9SUwpAQCAtMCwwICsxLDMyIEBACitFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQHRlbXBsZS1iYXB0aXN0LmNvbT4KK01hdHQgSG93ZWxsIDxtaG93ZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0JyZW50IEJyYWRidXJuIDxiYnJhZGJ1cm5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgorV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNoZWxsby5iZT4KK1JpY2hhcmQgQm91bHRvbiA8cmljaGFyZEB0YXJ0YXJ1cy5vcmc+CitaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KKyAgLSB0aHJlYWQgc3luY2hyb25pemF0aW9uIHJld29yaworRGF2aWQgSS4gTGVobiA8ZGxlaG5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICAtIGRlYmlhbiBwYWNrYWdpbmcKKyAgLSB2YXJpb3VzIGZpeGVzCitDaHJpcyBFbWVyc29uIDxjaHJpc0B0YXJ0YXJ1cy5vcmc+CisgIC0gUFBDIHBvcnQKKyAgLSBzbWFsbCBsaWJ4bWwgcGF0Y2hlcworSmVucyBUaGllbGUgPGthcm1lQHVuZm9yZ2V0dGFibGUuY29tPgorICAtIGNvbG9yIGNvbnZlcnNpb24gcGF0Y2hlcworVGhvbWFzIE55YmVyZyA8dGhvbWFzQGNvZGVmYWN0b3J5LnNlPgorICAtIGdzdHJlYW1lci5tNCBtYWNyb3MKKyAgLSBBTFNBIHBsdWdpbnMKK0Jhc3RpZW4gTm9jZXJhIDxoYWRlc3NAaGFkZXNzLm5ldD4KKyAgLSBnbm9tZXZmcyBzaW5rIGFuZCBzb3VyY2UKK0NocmlzdGlhbiBGcmVkcmlrIEthbGFnZXIgU2NoYWxsZXIgPFVyYWV1c0BsaW51eHJpc2luZy5vcmc+CisgIC0gUmVkIEhhdCBwYWNrYWdpbmcgYW5kIHdlYnNpdGUgd29yaworVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisgIC0gYnVpbGQgc3lzdGVtIGNsZWFuaW5nCisgIC0gc29tZSBhdWRpbyBwbHVnaW5zCisgIC0gcmVsZWFzZSBwdXNoaW5nCitEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KK0JlbmphbWluIE90dGUgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgorUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgorQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+CitKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CmRpZmYgLS1naXQgYS9DT1BZSU5HIGIvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjY4NWE1Ci0tLSAvZGV2L251bGwKKysrIGIvQ09QWUlORwpAQCAtMCwwICsxLDQ4MSBAQAorCQkgIEdOVSBMSUJSQVJZIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgICAgICAgICAgICAgICAgIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKK1tUaGlzIGlzIHRoZSBmaXJzdCByZWxlYXNlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IEdQTC4gIEl0IGlzCisgbnVtYmVyZWQgMiBiZWNhdXNlIGl0IGdvZXMgd2l0aCB2ZXJzaW9uIDIgb2YgdGhlIG9yZGluYXJ5IEdQTC5dCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlCitmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuCisKKyAgVGhpcyBsaWNlbnNlLCB0aGUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIHNvbWUKK3NwZWNpYWxseSBkZXNpZ25hdGVkIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSwgYW5kIHRvIGFueQorb3RoZXIgbGlicmFyaWVzIHdob3NlIGF1dGhvcnMgZGVjaWRlIHRvIHVzZSBpdC4gIFlvdSBjYW4gdXNlIGl0IGZvcgoreW91ciBsaWJyYXJpZXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZgoreW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5LCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIHdoZXRoZXIgZ3JhdGlzCitvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdCB3ZSBnYXZlCit5b3UuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlCitjb2RlLiAgSWYgeW91IGxpbmsgYSBwcm9ncmFtIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKK2NvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cyBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtCit3aXRoIHRoZSBsaWJyYXJ5LCBhZnRlciBtYWtpbmcgY2hhbmdlcyB0byB0aGUgbGlicmFyeSBhbmQgcmVjb21waWxpbmcKK2l0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCisgIE91ciBtZXRob2Qgb2YgcHJvdGVjdGluZyB5b3VyIHJpZ2h0cyBoYXMgdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0Cit0aGUgbGlicmFyeSwgYW5kICgyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbAorcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIGxpYnJhcnkuCisKKyAgQWxzbywgZm9yIGVhY2ggZGlzdHJpYnV0b3IncyBwcm90ZWN0aW9uLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK2xpYnJhcnkuICBJZiB0aGUgbGlicmFyeSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwKK3ZlcnNpb24sIHNvIHRoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24KK3RoZSBvcmlnaW5hbCBhdXRob3JzJyByZXB1dGF0aW9ucy4KKwwKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCBjb21wYW5pZXMgZGlzdHJpYnV0aW5nIGZyZWUKK3NvZnR3YXJlIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIHRodXMgaW4gZWZmZWN0Cit0cmFuc2Zvcm1pbmcgdGhlIHByb2dyYW0gaW50byBwcm9wcmlldGFyeSBzb2Z0d2FyZS4gIFRvIHByZXZlbnQgdGhpcywKK3dlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueSBwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncworZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBNb3N0IEdOVSBzb2Z0d2FyZSwgaW5jbHVkaW5nIHNvbWUgbGlicmFyaWVzLCBpcyBjb3ZlcmVkIGJ5IHRoZSBvcmRpbmFyeQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdoaWNoIHdhcyBkZXNpZ25lZCBmb3IgdXRpbGl0eSBwcm9ncmFtcy4gIFRoaXMKK2xpY2Vuc2UsIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4KK2Rlc2lnbmF0ZWQgbGlicmFyaWVzLiAgVGhpcyBsaWNlbnNlIGlzIHF1aXRlIGRpZmZlcmVudCBmcm9tIHRoZSBvcmRpbmFyeQorb25lOyBiZSBzdXJlIHRvIHJlYWQgaXQgaW4gZnVsbCwgYW5kIGRvbid0IGFzc3VtZSB0aGF0IGFueXRoaW5nIGluIGl0IGlzCit0aGUgc2FtZSBhcyBpbiB0aGUgb3JkaW5hcnkgbGljZW5zZS4KKworICBUaGUgcmVhc29uIHdlIGhhdmUgYSBzZXBhcmF0ZSBwdWJsaWMgbGljZW5zZSBmb3Igc29tZSBsaWJyYXJpZXMgaXMgdGhhdAordGhleSBibHVyIHRoZSBkaXN0aW5jdGlvbiB3ZSB1c3VhbGx5IG1ha2UgYmV0d2VlbiBtb2RpZnlpbmcgb3IgYWRkaW5nIHRvIGEKK3Byb2dyYW0gYW5kIHNpbXBseSB1c2luZyBpdC4gIExpbmtpbmcgYSBwcm9ncmFtIHdpdGggYSBsaWJyYXJ5LCB3aXRob3V0CitjaGFuZ2luZyB0aGUgbGlicmFyeSwgaXMgaW4gc29tZSBzZW5zZSBzaW1wbHkgdXNpbmcgdGhlIGxpYnJhcnksIGFuZCBpcworYW5hbG9nb3VzIHRvIHJ1bm5pbmcgYSB1dGlsaXR5IHByb2dyYW0gb3IgYXBwbGljYXRpb24gcHJvZ3JhbS4gIEhvd2V2ZXIsIGluCithIHRleHR1YWwgYW5kIGxlZ2FsIHNlbnNlLCB0aGUgbGlua2VkIGV4ZWN1dGFibGUgaXMgYSBjb21iaW5lZCB3b3JrLCBhCitkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LCBhbmQgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK3RyZWF0cyBpdCBhcyBzdWNoLgorCisgIEJlY2F1c2Ugb2YgdGhpcyBibHVycmVkIGRpc3RpbmN0aW9uLCB1c2luZyB0aGUgb3JkaW5hcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgZm9yIGxpYnJhcmllcyBkaWQgbm90IGVmZmVjdGl2ZWx5IHByb21vdGUgc29mdHdhcmUKK3NoYXJpbmcsIGJlY2F1c2UgbW9zdCBkZXZlbG9wZXJzIGRpZCBub3QgdXNlIHRoZSBsaWJyYXJpZXMuICBXZQorY29uY2x1ZGVkIHRoYXQgd2Vha2VyIGNvbmRpdGlvbnMgbWlnaHQgcHJvbW90ZSBzaGFyaW5nIGJldHRlci4KKworICBIb3dldmVyLCB1bnJlc3RyaWN0ZWQgbGlua2luZyBvZiBub24tZnJlZSBwcm9ncmFtcyB3b3VsZCBkZXByaXZlIHRoZQordXNlcnMgb2YgdGhvc2UgcHJvZ3JhbXMgb2YgYWxsIGJlbmVmaXQgZnJvbSB0aGUgZnJlZSBzdGF0dXMgb2YgdGhlCitsaWJyYXJpZXMgdGhlbXNlbHZlcy4gIFRoaXMgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVkIHRvCitwZXJtaXQgZGV2ZWxvcGVycyBvZiBub24tZnJlZSBwcm9ncmFtcyB0byB1c2UgZnJlZSBsaWJyYXJpZXMsIHdoaWxlCitwcmVzZXJ2aW5nIHlvdXIgZnJlZWRvbSBhcyBhIHVzZXIgb2Ygc3VjaCBwcm9ncmFtcyB0byBjaGFuZ2UgdGhlIGZyZWUKK2xpYnJhcmllcyB0aGF0IGFyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlbS4gIChXZSBoYXZlIG5vdCBzZWVuIGhvdyB0byBhY2hpZXZlCit0aGlzIGFzIHJlZ2FyZHMgY2hhbmdlcyBpbiBoZWFkZXIgZmlsZXMsIGJ1dCB3ZSBoYXZlIGFjaGlldmVkIGl0IGFzIHJlZ2FyZHMKK2NoYW5nZXMgaW4gdGhlIGFjdHVhbCBmdW5jdGlvbnMgb2YgdGhlIExpYnJhcnkuKSAgVGhlIGhvcGUgaXMgdGhhdCB0aGlzCit3aWxsIGxlYWQgdG8gZmFzdGVyIGRldmVsb3BtZW50IG9mIGZyZWUgbGlicmFyaWVzLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEKKyJ3b3JrIGJhc2VkIG9uIHRoZSBsaWJyYXJ5IiBhbmQgYSAid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnkiLiAgVGhlCitmb3JtZXIgY29udGFpbnMgY29kZSBkZXJpdmVkIGZyb20gdGhlIGxpYnJhcnksIHdoaWxlIHRoZSBsYXR0ZXIgb25seQord29ya3MgdG9nZXRoZXIgd2l0aCB0aGUgbGlicmFyeS4KKworICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgZm9yIGEgbGlicmFyeSB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBvcmRpbmFyeQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSByYXRoZXIgdGhhbiBieSB0aGlzIHNwZWNpYWwgb25lLgorDAorCQkgIEdOVSBMSUJSQVJZIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSB3aGljaAorY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9yIG90aGVyIGF1dGhvcml6ZWQKK3BhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGlicmFyeQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYWxzbyBjYWxsZWQgInRoaXMgTGljZW5zZSIpLiAgRWFjaCBsaWNlbnNlZSBpcworYWRkcmVzc2VkIGFzICJ5b3UiLgorCisgIEEgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEKK3ByZXBhcmVkIHNvIGFzIHRvIGJlIGNvbnZlbmllbnRseSBsaW5rZWQgd2l0aCBhcHBsaWNhdGlvbiBwcm9ncmFtcworKHdoaWNoIHVzZSBzb21lIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgZGF0YSkgdG8gZm9ybSBleGVjdXRhYmxlcy4KKworICBUaGUgIkxpYnJhcnkiLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHNvZnR3YXJlIGxpYnJhcnkgb3Igd29yaword2hpY2ggaGFzIGJlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuICBBICJ3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIKK2NvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgTGlicmFyeSBvciBhCitwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkCitzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzCitpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKQorCisgICJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhIGxpYnJhcnksIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zCithbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZAoraW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uCithbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCisgIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIGEgcHJvZ3JhbSB1c2luZyB0aGUgTGlicmFyeSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIG91dHB1dCBmcm9tCitzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkCitvbiB0aGUgTGlicmFyeSAoaW5kZXBlbmRlbnQgb2YgdGhlIHVzZSBvZiB0aGUgTGlicmFyeSBpbiBhIHRvb2wgZm9yCit3cml0aW5nIGl0KS4gIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzCithbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4KKyAgCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIExpYnJhcnkncworY29tcGxldGUgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQKK3lvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCithcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdAorYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkKK3dhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlCitMaWJyYXJ5LgorCisgIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksCithbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhCitmZWUuCisMCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIHRoZSBmaWxlcyBtb2RpZmllZCB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBjKSBZb3UgbXVzdCBjYXVzZSB0aGUgd2hvbGUgb2YgdGhlIHdvcmsgdG8gYmUgbGljZW5zZWQgYXQgbm8KKyAgICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGQpIElmIGEgZmFjaWxpdHkgaW4gdGhlIG1vZGlmaWVkIExpYnJhcnkgcmVmZXJzIHRvIGEgZnVuY3Rpb24gb3IgYQorICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMKKyAgICB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5CisgICAgaXMgaW52b2tlZCwgdGhlbiB5b3UgbXVzdCBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQsCisgICAgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yCisgICAgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YKKyAgICBpdHMgcHVycG9zZSByZW1haW5zIG1lYW5pbmdmdWwuCisKKyAgICAoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcworICAgIGEgcHVycG9zZSB0aGF0IGlzIGVudGlyZWx5IHdlbGwtZGVmaW5lZCBpbmRlcGVuZGVudCBvZiB0aGUKKyAgICBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQorICAgIGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0CisgICAgYmUgb3B0aW9uYWw6IGlmIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgaXQsIHRoZSBzcXVhcmUKKyAgICByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIExpYnJhcnksIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlCitpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQord2l0aCB0aGUgTGlicmFyeSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IG9wdCB0byBhcHBseSB0aGUgdGVybXMgb2YgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbwordGhpcywgeW91IG11c3QgYWx0ZXIgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLCBzbwordGhhdCB0aGV5IHJlZmVyIHRvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLAoraW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQorb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeQordGhhdCB2ZXJzaW9uIGluc3RlYWQgaWYgeW91IHdpc2guKSAgRG8gbm90IG1ha2UgYW55IG90aGVyIGNoYW5nZSBpbgordGhlc2Ugbm90aWNlcy4KKwwKKyAgT25jZSB0aGlzIGNoYW5nZSBpcyBtYWRlIGluIGEgZ2l2ZW4gY29weSwgaXQgaXMgaXJyZXZlcnNpYmxlIGZvcgordGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKK3N1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCisKKyAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCit0aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuCisKKyAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKK2Rlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtCit1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhY2NvbXBhbnkKK2l0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKK211c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorCisgIElmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5Citmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZQorc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCitkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlCitMaWJyYXJ5LCBidXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBMaWJyYXJ5IGJ5IGJlaW5nIGNvbXBpbGVkIG9yCitsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQord29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZAordGhlcmVmb3JlIGZhbGxzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICBIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5CitjcmVhdGVzIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnkgKGJlY2F1c2UgaXQKK2NvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCitsaWJyYXJ5Ii4gIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KK1NlY3Rpb24gNiBzdGF0ZXMgdGVybXMgZm9yIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGV4ZWN1dGFibGVzLgorCisgIFdoZW4gYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlCit0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnksIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgbWF5IGJlIGEKK2Rlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgorV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUKK2xpbmtlZCB3aXRob3V0IHRoZSBMaWJyYXJ5LCBvciBpZiB0aGUgd29yayBpcyBpdHNlbGYgYSBsaWJyYXJ5LiAgVGhlCit0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgorCisgIElmIHN1Y2ggYW4gb2JqZWN0IGZpbGUgdXNlcyBvbmx5IG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhCitzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKK2Z1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QKK2ZpbGUgaXMgdW5yZXN0cmljdGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgbGVnYWxseSBhIGRlcml2YXRpdmUKK3dvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCitMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQorCisgIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5CitkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4KK0FueSBleGVjdXRhYmxlcyBjb250YWluaW5nIHRoYXQgd29yayBhbHNvIGZhbGwgdW5kZXIgU2VjdGlvbiA2LAord2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgorDAorICA2LiBBcyBhbiBleGNlcHRpb24gdG8gdGhlIFNlY3Rpb25zIGFib3ZlLCB5b3UgbWF5IGFsc28gY29tcGlsZSBvcgorbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEKK3dvcmsgY29udGFpbmluZyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSwgYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCit1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB0aGUgdGVybXMgcGVybWl0Cittb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UKK2VuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLgorCisgIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQorTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5Cit0aGlzIExpY2Vuc2UuICBZb3UgbXVzdCBzdXBwbHkgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIElmIHRoZSB3b3JrCitkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZQorY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZQorZGlyZWN0aW5nIHRoZSB1c2VyIHRvIHRoZSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIEFsc28sIHlvdSBtdXN0IGRvIG9uZQorb2YgdGhlc2UgdGhpbmdzOgorCisgICAgYSkgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcKKyAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIKKyAgICBjaGFuZ2VzIHdlcmUgdXNlZCBpbiB0aGUgd29yayAod2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlcgorICAgIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUpOyBhbmQsIGlmIHRoZSB3b3JrIGlzIGFuIGV4ZWN1dGFibGUgbGlua2VkCisgICAgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0CisgICAgdXNlcyB0aGUgTGlicmFyeSIsIGFzIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSwgc28gdGhhdCB0aGUKKyAgICB1c2VyIGNhbiBtb2RpZnkgdGhlIExpYnJhcnkgYW5kIHRoZW4gcmVsaW5rIHRvIHByb2R1Y2UgYSBtb2RpZmllZAorICAgIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gIChJdCBpcyB1bmRlcnN0b29kCisgICAgdGhhdCB0aGUgdXNlciB3aG8gY2hhbmdlcyB0aGUgY29udGVudHMgb2YgZGVmaW5pdGlvbnMgZmlsZXMgaW4gdGhlCisgICAgTGlicmFyeSB3aWxsIG5vdCBuZWNlc3NhcmlseSBiZSBhYmxlIHRvIHJlY29tcGlsZSB0aGUgYXBwbGljYXRpb24KKyAgICB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKKworICAgIGIpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0CisgICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCisgICAgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZQorICAgIHRoYW4gdGhlIGNvc3Qgb2YgcGVyZm9ybWluZyB0aGlzIGRpc3RyaWJ1dGlvbi4KKworICAgIGMpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5CisgICAgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIGFib3ZlCisgICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgorCisgICAgZCkgVmVyaWZ5IHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZXNlCisgICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCisKKyAgRm9yIGFuIGV4ZWN1dGFibGUsIHRoZSByZXF1aXJlZCBmb3JtIG9mIHRoZSAid29yayB0aGF0IHVzZXMgdGhlCitMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgorcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sCit0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5CitkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3IKK2NvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24KK3doaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMKK3RoZSBleGVjdXRhYmxlLgorCisgIEl0IG1heSBoYXBwZW4gdGhhdCB0aGlzIHJlcXVpcmVtZW50IGNvbnRyYWRpY3RzIHRoZSBsaWNlbnNlCityZXN0cmljdGlvbnMgb2Ygb3RoZXIgcHJvcHJpZXRhcnkgbGlicmFyaWVzIHRoYXQgZG8gbm90IG5vcm1hbGx5CithY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90Cit1c2UgYm90aCB0aGVtIGFuZCB0aGUgTGlicmFyeSB0b2dldGhlciBpbiBhbiBleGVjdXRhYmxlIHRoYXQgeW91CitkaXN0cmlidXRlLgorDAorICA3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5IHNpZGUtYnktc2lkZSBpbiBhIHNpbmdsZSBsaWJyYXJ5IHRvZ2V0aGVyIHdpdGggb3RoZXIgbGlicmFyeQorZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZAorbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uCit0aGUgTGlicmFyeSBhbmQgb2YgdGhlIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyBpcyBvdGhlcndpc2UKK3Blcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CisKKyAgICBhKSBBY2NvbXBhbnkgdGhlIGNvbWJpbmVkIGxpYnJhcnkgd2l0aCBhIGNvcHkgb2YgdGhlIHNhbWUgd29yaworICAgIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkKKyAgICBmYWNpbGl0aWVzLiAgVGhpcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAgICBTZWN0aW9ucyBhYm92ZS4KKworICAgIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IG9mIHRoZSBmYWN0CisgICAgdGhhdCBwYXJ0IG9mIGl0IGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGV4cGxhaW5pbmcKKyAgICB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCisKKyAgOC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUKK3RoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55CithdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91cgorcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLAorb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcwordGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDkuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIExpYnJhcnkgb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgMTAuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkpLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5CitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorDAorICAxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhbnkKK3BhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKK2FuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMTIuIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZAorYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsCitzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKK2V4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmCit3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICAxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKK3ZlcnNpb25zIG9mIHRoZSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuCitTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sCitidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIExpYnJhcnkKK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZAorImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZAorY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBMaWJyYXJ5IGRvZXMgbm90IHNwZWNpZnkgYQorbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisMCisgIDE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGVzZSwKK3dyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzCitjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91cgorZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cworb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcKK2FuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDE1LiBCRUNBVVNFIFRIRSBMSUJSQVJZIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTworV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4KK0VYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SCitPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIExJQlJBUlkgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRQorTElCUkFSWSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUKK1RIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgorV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkKK0FORC9PUiBSRURJU1RSSUJVVEUgVEhFIExJQlJBUlkgQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VCitGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRQorTElCUkFSWSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORworUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEKK0ZBSUxVUkUgT0YgVEhFIExJQlJBUlkgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYKK1NVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwwKKyAgICAgQXBwZW5kaXg6IEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBsaWJyYXJ5LCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQKK2V2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZS4gIFlvdSBjYW4gZG8gc28gYnkgcGVybWl0dGluZworcmVkaXN0cmlidXRpb24gdW5kZXIgdGhlc2UgdGVybXMgKG9yLCBhbHRlcm5hdGl2ZWx5LCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCitvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKS4KKworICBUbyBhcHBseSB0aGVzZSB0ZXJtcywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgbGlicmFyeS4gIEl0IGlzCitzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlCisiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIGxpYnJhcnkncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgbGlicmFyeSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZQorICBsaWJyYXJ5IGBGcm9iJyAoYSBsaWJyYXJ5IGZvciB0d2Vha2luZyBrbm9icykgd3JpdHRlbiBieSBKYW1lcyBSYW5kb20gSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk5MAorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGF0J3MgYWxsIHRoZXJlIGlzIHRvIGl0IQpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MWQwMjEKLS0tIC9kZXYvbnVsbAorKysgYi9DaGFuZ2VMb2cKQEAgLTAsMCArMSw3MzA3MCBAQAorPT09IHJlbGVhc2UgMC4xMS4xID09PQorCisyMDExLTA5LTI5ICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJICByZWxlYXNpbmcgMC4xMS4xLCAiU3dlZXQgTmV3IEJsb3Nzb20iCisKKzIwMTEtMDktMjggMTg6NDY6MDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RtZW1vcnkuYzoKKwkgIG1lbW9yeTogZml4IG1lbW9yeSBhbGlnbm1lbnQKKwkgIEZpeCBjb21waWxhdGlvbiB3aGVuIFBPU0lYX01FTUFMSUdOIGlzIG5vdCBzZXQuCisJICBEZWJ1ZyB0aGUgY29uZmlndXJlZCBhbGlnbm1lbnQuCisJICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYwMzAwCisKKzIwMTEtMDktMjggMTg6NDQ6MTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogaW1wcm92ZSBkZWJ1ZworCisyMDExLTA5LTI4IDExOjI4OjI1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIHRyYW5zZm9ybTogZml4IGFmdGVyIG1lcmdlCisKKzIwMTEtMDktMjggMTE6MjQ6NDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKKworMjAxMS0wOS0yOCAxMToxNjozMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKKwkgIGRvY3M6IGZpeCBzb21lIG1vcmUgZG9jcworCisyMDExLTA5LTI2IDE5OjUyOjEzICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBiYXNldHJhbnNmb3JtOiBzZW5kIGRlbGF5ZWQgZXZlbnRzIGVhcmxpZXIKKwkgIFNvbWUgZWxlbWVudHMgKHN1Y2ggYXMgdmlkZW9yYXRlKSBtaWdodCBwdXNoIGJ1ZmZlcnMgZWFybHksCisJICBmb3IgaW5zdGFuY2UgaW4gaW4gdHJhbnNmb3JtX2lwLiBXZSB3YW50IGV2ZW50cyAoYW5kIGluIHBhcnRpY3VsYXIKKwkgIGFueSBORVdTRUdNRU5UIGV2ZW50KSB0byBiZSBwdXNoZWQgYmVmb3JlIHRoYXQuCisJICBUaGlzIGZpeGVzIHRyYW5zbWFnZWRkb24gd2VkZ2luZyBvbiBjb252ZXJ0aW5nIGEgZmlsZSBzdGFydGluZworCSAgd2l0aCBhIG5vbiB6ZXJvIG9mZnNldCB0byBPZ2cuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYwMTY1CisKKzIwMTEtMDktMjYgMjA6NDc6MzUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBnc3QvZ3N0YnVmZmVyLmg6CisJKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgorCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuaDoKKwkqIGdzdC9nc3RjYXBzLmg6CisJKiBnc3QvZ3N0ZXZlbnQuaDoKKwkqIGdzdC9nc3RpdGVyYXRvci5oOgorCSogZ3N0L2dzdG1lbW9yeS5jOgorCSogZ3N0L2dzdG1lc3NhZ2UuaDoKKwkqIGdzdC9nc3RtZXRhLmg6CisJKiBnc3QvZ3N0bWluaW9iamVjdC5jOgorCSogZ3N0L2dzdG1pbmlvYmplY3QuaDoKKwkqIGdzdC9nc3RwYWQuaDoKKwkqIGdzdC9nc3RxdWVyeS5jOgorCSAgZG9jczogZml4IGRvY3MKKworMjAxMS0wOS0yNiAxOToyNToyMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQorCisyMDExLTA5LTI2IDE5OjI0OjE5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0c2VnbWVudC5oOgorCSAgc2VnbWVudDogaW1wcm92ZSBBUEkgZG9jcyBhIGxpdHRsZQorCisyMDExLTA5LTI2IDAwOjMwOjQ3ICswMzAwICBSYWltbyBKw6RydmkgPHJhaW1vLmphcnZpQGdtYWlsLmNvbT4KKworCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6CisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJICBnc3Q6IEZpeCBjb21waWxlciB3YXJuaW5ncyBvbiA2NCBiaXQgbWluZ3ctdzY0CisJICBGaXhlcyBidWcgIzY2MDA4My4KKworMjAxMS0wOS0yNSAxNjoxMDo1MyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2V4YW1wbGVzL2hlbGxvd29ybGQvaGVsbG93b3JsZC5jOgorCSAgZXhhbXBsZXM6IGZpeCBib2d1cyBnX29iamVjdF91bnJlZiBpbiBoZWxsb3dvcmxkIGV4YW1wbGUKKwkgIEdNYWluTG9vcCBpcyBub3QgYSBHT2JqZWN0LgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTQyNDE0MworCisyMDExLTA5LTIzIDEzOjA5OjI1ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCisJICBDb25mbGljdHM6CisJICBnc3QvZ3N0Y2Fwcy5jCisJICBnc3QvZ3N0cGFkLmMKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYworCisyMDExLTA5LTIxIDEzOjQzOjQ4ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBjb21tb246CisJICBVcGRhdGUgY29tbW9uIHRvIDAuMTEgYnJhbmNoCisKKzIwMTEtMDktMjAgMTM6MDQ6MDYgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIGJhc2V0cmFuc2Zvcm06IGRlbGF5IHNlcmlhbGl6ZWQgZXZlbnRzIHdoZW4gc3JjIGNhcHMgYXJlIG5vdCBzZXQgeWV0CisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU5NTcxCisKKzIwMTEtMDktMTMgMTc6MDQ6MzEgKzA0MDAgIFN0YXMgU2VyZ2VldiA8c3RzcEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogU2V0IGNhcHMgb24gcGFkIGJlZm9yZSBjaGVja2luZyBpZiB0aGUgcGFkIGlzIGxpbmtlZAorCSAgVGhpcyBhbGxvd3MgdGhlIHNldGNhcHMgaGFuZGxlciBhbmQgbm90aWZ5OjpjYXBzIHRvIGxpbmsKKwkgIHRoZSBwYWQgZG93bnN0cmVhbSBhbmQgZG9lc24ndCByZXF1aXJlIGhhY2tzIHRvIGFsd2F5cworCSAgcHJvdmlkZSBhIHBlZXIgdG8gdGhlIHBhZCwgbGlrZSBpbiBkZWNvZGViaW4yLgorCisyMDExLTA5LTE1IDExOjQ5OjQzIC0wNzAwICBGYWJyaXppbyAoTWlzdG8pIE1pbG8gPG1pc3RvYmFhbkBnbWFpbC5jb20+CisKKwkqIGdzdC9nc3RjYXBzLmM6CisJICBjYXBzOiB1c2UgZ192YWx1ZV90YWtlX3N0cmluZygpIGFuZCBnc3RfdmFsdWVfZ2V0X2NhcHMoKSBpbnN0ZWFkIG9mIGFjY2Vzc2luZyBpbnRlcm5hbCBmaWVsZHMKKworMjAxMS0wOS0xNiAxMzozODo0MSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogYWRkIG1vcmUgZGVidWcgbG9nZ2luZyBmb3Igb3RoZXIgY2hhaW4gZnVuY3Rpb24gY29kZSBwYXRoIGFzIHdlbGwKKworMjAxMS0wOS0xNiAxMzoxMzozMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogZml4IHVwIHByaW50ZiBmb3JtYXQgaW4gZGVidWcgbWVzc2FnZQorCSAgV2hpY2ggSSBtZXNzZWQgdXAuCisKKzIwMTEtMDktMTUgMTM6MjA6MTUgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IG1ha2Ugc29tZSBkZWJ1ZyB0cmFjZXMgbW9yZSB1c2VmdWwKKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTkxMzkKKworMjAxMS0wOS0xNCAyMjo1NDoxOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHNjcmlwdHMvZ3N0Y3ZzdGVzdC5zaDoKKwkgIHNjcmlwdHM6IHJlbW92ZSBnc3RjdnN0ZXN0LnNoCisKKzIwMTEtMDktMTMgMjM6MDQ6MDkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuYzoKKwkgIGxmb2NvbnRyb2xzb3VyY2U6IGZpeCBjbGFuZyBjb21waWxlciB3YXJuaW5nCisJICBDYXN0IGVudW0gdG8gaW50IGJlZm9yZSBjaGVja2luZyBmb3IgbmVnYXRpdmUgdmFsdWVzLCB3aGljaCBhcmUKKwkgIGltcG9zc2libGUgYWNjb3JkaW5nIHRvIHRoZSBlbnVtIGxpc3QuCisJICBnc3RsZm9jb250cm9sc291cmNlLmM6NjUyOjQ1OiBlcnJvcjogY29tcGFyaXNvbiBvZiB1bnNpZ25lZCBlbnVtIGV4cHJlc3Npb24gPCAwCisJICBpcyBhbHdheXMgZmFsc2UgWy1XZXJyb3IsLVd0YXV0b2xvZ2ljYWwtY29tcGFyZV0KKwkgIGlmICh3YXZlZm9ybSA+PSBudW1fd2F2ZWZvcm1zIHx8IHdhdmVmb3JtIDwgMCkgeworCSAgfn5+fn5+fn4gXiB+CisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUzMTM3CisKKzIwMTEtMDktMTMgMjE6NTg6MjEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc3JjLmM6CisJICB0ZXN0czogbWFrZSBzdXJlIGZpbGVzcmMgcmV0dXJucyBlc2NhcGVkIFVSSXMgZXZlbiBpZiB0aGUgaW5wdXQgd2FzIHVuZXNjYXBlZAorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1NDY3MworCisyMDExLTA5LTEwIDE4OjE1OjQ5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGNhcHMuYzoKKwkgIGNhcHM6IG1vdmUgbG9nIG1lc3NhZ2VzIGZvciBjYXBzIGNyZWF0aW9uL2ZyZWVpbmcgaW50byBUUkFDRSBjYXRlZ29yeQorCSAgUmVkdWNlIFNQQU0gZm9yIEdTVF9DQVBTOjUuCisKKzIwMTEtMDktMDkgMTI6NTY6MjAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IE9ubHkgZG8gdGhlIHN1YnNldCBjaGVjayBpbiBnc3RfcGFkX2FjY2VwdF9jYXBzKCkgaWYgdGhlIHBhZCBjbGFpbXMgdG8gYWNjZXB0IHRoZSBjYXBzCisKKzIwMTEtMDktMDcgMTc6MjE6NTUgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgorCSAgYmFzZXNpbms6IG1ha2UgaXQgZWFzeSB0byBvdmVycmlkZSB0aGUgcGFkIHF1ZXJ5CisJICBBZGQgYSB2bWV0aG9kIHRvIGhhbmRsZSB0aGUgcGFkIHF1ZXJ5LgorCSAgSW5zdGFsbCBhIGRlZmF1bHQgaGFuZGxlciBmb3IgdGhlIHBhZCBxdWVyeS4KKwkgIFVzZSB0aGUgbmV3IHF1ZXJ5IGZ1bmN0aW9uIGluIGZpbGVzaW5rCisKKzIwMTEtMDktMDggMTQ6Mzk6MzAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIFJldmVydCAiUmV2ZXJ0ICJiYXNldHJhbnNmb3JtOiBVc2UgY2hlY2sgZm9yIHN1YnNldHMgYW5kIG5vdCBub24tZW1wdHkgaW50ZXJzZWN0aW9uIHRvIGNoZWNrIGlmIGNhcHMgYXJlIGNvbXBhdGlibGUiIgorCSAgVGhpcyByZXZlcnRzIGNvbW1pdCAwYmM2ZDQ5Yzk1MDIxMGJmNDIyNjE1ZmI4ZGM5OGM1YWRjZDVlNDU2LgorCSAgQ29uZmxpY3RzOgorCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmMKKworMjAxMS0wOS0wOCAxNDozMTo1MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIFJldmVydCAiUmV2ZXJ0ICJwYWQ6IENoZWNrIGZvciBzdWJzZXRzLCBub3Qgbm9uLWVtcHR5IGludGVyc2VjdGlvbnMgdG8gY2hlY2sgaWYgY2FwcyBhcmUgY29tcGF0aWJsZSIiCisJICBUaGlzIHJldmVydHMgY29tbWl0IDJiZmFkYTU1ODFlMzVhMmQzNzE4OGY0OGEyYzc0NDI2NDRmMTBiYjMuCisJICBDb25mbGljdHM6CisJICBnc3QvZ3N0cGFkLmMKKwkgIEZvciAwLjExIHdlIHdhbnQgdG8gZW5mb3JjZSB0aGF0IG9ubHkgc3Vic2V0cyBvZiB0aGUgcGFkCisJICBjYXBzIGFyZSBhbGxvd2VkLiBUaGlzIGJyZWFrcyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvcgorCSAgc29tZSBlbGVtZW50cywgd2hpY2ggaXMgd2h5IHdlIG9ubHkgcHJpbnQgYSB3YXJuaW5nIGluCisJICAwLjEwLgorCisyMDExLTA5LTA4IDE0OjMwOjA3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQorCSAgQ29uZmxpY3RzOgorCSAgZ3N0L2dzdHBhZC5jCisKKzIwMTEtMDktMDggMTQ6Mjk6MDAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBSZXZlcnQgInBhZDogVXNlIGdzdF9wYWRfYWNjZXB0X2NhcHMoKSBpbnN0ZWFkIG9mIG1hbnVhbGx5IGNoZWNraW5nIHdoZW4gY29uZmlndXJpbmcgYSBzaW5rcGFkIgorCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBkM2NhZDI4ZGE5MzZiMDM3ZDg3N2RjNzBjMDIyODZiODFiNjgwMjg0LgorCSAgSXQgY2F1c2VzIHBlcmZvcm1hbmNlIHByb2JsZW1zIGJlY2F1c2UgYWNjZXB0Y2FwcygpIHByb3BhZ2F0ZXMgZG93bnN0cmVhbS4KKworMjAxMS0wOS0wOCAxNDoyMzo1MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKKwkgIENvbmZsaWN0czoKKwkgIGRvY3MvZGVzaWduL2RyYWZ0LWJ1ZmZlcjIudHh0CisJICBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0CisJICBkb2NzL2Rlc2lnbi9wYXJ0LWJsb2NrLnR4dAorCSAgZG9jcy9kZXNpZ24vcGFydC1idWZmZXJsaXN0LnR4dAorCSAgZG9jcy9kZXNpZ24vcGFydC1jYXBzLnR4dAorCSAgZG9jcy9kZXNpZ24vcGFydC1lbGVtZW50LXRyYW5zZm9ybS50eHQKKwkgIGRvY3MvZGVzaWduL3BhcnQtZXZlbnRzLnR4dAorCSAgZG9jcy9kZXNpZ24vcGFydC1uZWdvdGlhdGlvbi50eHQKKwkgIGdzdC9nc3RjYXBzLmMKKwkgIGdzdC9nc3RldmVudC5oCisJICBnc3QvZ3N0Z2hvc3RwYWQuYworCSAgZ3N0L2dzdGludGVyZmFjZS5jCisJICBnc3QvZ3N0cGFkLmMKKwkgIGdzdC9nc3RwYWQuaAorCSAgZ3N0L2dzdHV0aWxzLmMKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmMKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jCisJICBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmMKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jCisJICB0ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmMKKwkgIHRvb2xzL2dzdC1sYXVuY2guMS5pbgorCisyMDExLTA5LTA4IDEzOjQxOjE5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiBVc2UgZ3N0X3BhZF9hY2NlcHRfY2FwcygpIGluc3RlYWQgb2YgbWFudWFsbHkgY2hlY2tpbmcgd2hlbiBjb25maWd1cmluZyBhIHNpbmtwYWQKKworMjAxMS0wOS0wOCAxMzo0MDowNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogUHJpbnQgYSBnX3dhcm5pbmcoKSBpZiBwYWQgYWNjZXB0IGNhcHMgdGhhdCBhcmUgbm90IGEgc3Vic2V0IG9mIGl0cyBjYXBzCisJICBJbiAwLjExIG9ubHkgc3Vic2V0cyBhcmUgc3VwcG9ydGVkIGFnYWluIGFzIGRvY3VtZW50ZWQgaW5zdGVhZCBvZiBhbHNvCisJICBhbGxvd2luZyBub24tZW1wdHkgaW50ZXJzZWN0aW9ucy4KKworMjAxMS0wOS0wOCAxMzoyNjoyNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgUmV2ZXJ0ICJiYXNldHJhbnNmb3JtOiBVc2UgY2hlY2sgZm9yIHN1YnNldHMgYW5kIG5vdCBub24tZW1wdHkgaW50ZXJzZWN0aW9uIHRvIGNoZWNrIGlmIGNhcHMgYXJlIGNvbXBhdGlibGUiCisJICBUaGlzIHJldmVydHMgY29tbWl0IDVlNWNjNWU4OWU3ZTI4NThhNjM1MmZhNGM4MWEzNzRmNmU1YTYyOTcuCisJICBTZWUgYnVnICM2NTg1NDEuCisKKzIwMTEtMDktMDggMTM6MjY6MDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBSZXZlcnQgInBhZDogQ2hlY2sgZm9yIHN1YnNldHMsIG5vdCBub24tZW1wdHkgaW50ZXJzZWN0aW9ucyB0byBjaGVjayBpZiBjYXBzIGFyZSBjb21wYXRpYmxlIgorCSAgVGhpcyByZXZlcnRzIGNvbW1pdCAwYzVkNTAyMDczMjZkNzRhNDgwNWJjZDg5OGJmYWM4ODc1NDBmMTJiLgorCSAgU2VlIGJ1ZyAjNjU4NTQxLgorCisyMDExLTA5LTA3IDEzOjE0OjM4ICswMjAwICBQaW90ciBGdXNpayA8Zm94QHNjZW5lLnBsPgorCisJKiBSRUFETUU6CisJKiBkb2NzL1JFQURNRToKKwkqIGRvY3MvZGVzaWduL2RyYWZ0LWJ1ZmZlcjIudHh0OgorCSogZG9jcy9kZXNpZ24vZHJhZnQta2xhc3MudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1NVC1yZWZjb3VudGluZy50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1hY3RpdmF0aW9uLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtYmxvY2sudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1idWZmZXJpbmcudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1idWZmZXJsaXN0LnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtY2Fwcy50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LWNsb2Nrcy50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtc2luay50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtdHJhbnNmb3JtLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtZXZlbnRzLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtZnJhbWVzdGVwLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtZ3N0ZWxlbWVudC50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdGdob3N0cGFkLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtbGF0ZW5jeS50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LW1lc3NhZ2VzLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtbWlzc2luZy1wbHVnaW5zLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtbmVnb3RpYXRpb24udHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1xb3MudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1zY2hlZHVsaW5nLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtc2Vla2luZy50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LXN0YXRlcy50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LXN0cmVhbS1zdGF0dXMudHh0OgorCSogZG9jcy9mYXEvTWFrZWZpbGUuYW06CisJKiBkb2NzL2ZhcS9kZXBlbmRlbmNpZXMueG1sOgorCSogZG9jcy9mYXEvZ2VuZXJhbC54bWw6CisJKiBkb2NzL21hbnVhbC9NYWtlZmlsZS5hbToKKwkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWNsb2Nrcy54bWw6CisJKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kcGFyYW1zLnhtbDoKKwkqIGRvY3MvbWFudWFsL2Jhc2ljcy1lbGVtZW50cy54bWw6CisJKiBkb2NzL21hbnVhbC9iYXNpY3MtaW5pdC54bWw6CisJKiBkb2NzL21hbnVhbC9iYXNpY3MtcGFkcy54bWw6CisJKiBkb2NzL21hbnVhbC9kaWFncmFtcy1nZW5lcmFsLnN2ZzoKKwkqIGRvY3MvbWFudWFsL2hpZ2hsZXZlbC1jb21wb25lbnRzLnhtbDoKKwkqIGRvY3MvbWFudWFsL2ludHJvLWdzdHJlYW1lci54bWw6CisJKiBkb2NzL3B3Zy9NYWtlZmlsZS5hbToKKwkqIGRvY3MvcHdnL2FkdmFuY2VkLXRhZ2dpbmcueG1sOgorCSogZG9jcy9wd2cvaW50cm8tYmFzaWNzLnhtbDoKKwkqIGRvY3MvcHdnL2ludHJvLXByZWZhY2UueG1sOgorCSogZG9jcy9wd2cvb3RoZXItYmFzZS54bWw6CisJKiBkb2NzL3B3Zy9vdGhlci1zb3VyY2UueG1sOgorCSogZG9jcy9yYW5kb20vYXV0b3BsdWcyOgorCSogZG9jcy9yYW5kb20vYmJiL29wdGlvbmFsLXByb3BlcnRpZXM6CisJKiBkb2NzL3JhbmRvbS9iYmIvc3RyZWFtc2VsZWN0aW9uOgorCSogZG9jcy9yYW5kb20vY2FwczoKKwkqIGRvY3MvcmFuZG9tL2NvbXBhbnkvZ3ZhZGVjLnR4dDoKKwkqIGRvY3MvcmFuZG9tL2Vuc29uaWMvZHJhZnQtYnVmZmVycG9vbHMudHh0OgorCSogZG9jcy9yYW5kb20vZW5zb25pYy9lbWJlZGRlZC50eHQ6CisJKiBkb2NzL3JhbmRvbS9lbnNvbmljL21lZGlhLWRldmljZS1kYWVtb24udHh0OgorCSogZG9jcy9yYW5kb20vZW5zb25pYy9wbHVnaW5kb2NzLnR4dDoKKwkqIGRvY3MvcmFuZG9tL2Vuc29uaWMvcHJvZmlsaW5nLnR4dDoKKwkqIGRvY3MvcmFuZG9tL2VvczoKKwkqIGRvY3MvcmFuZG9tL2hpZXJhcmNoeToKKwkqIGRvY3MvcmFuZG9tL2kxOG46CisJKiBkb2NzL3JhbmRvbS9pbnRlcmZhY2VzOgorCSogZG9jcy9yYW5kb20vbmVnb3RpYXRpb246CisJKiBkb2NzL3JhbmRvbS9vbWVnYS9zY2hlZC9jaGFpbnM6CisJKiBkb2NzL3JhbmRvbS9vbWVnYS90ZXN0aW5nL2ZyYW1ld29yazoKKwkqIGRvY3MvcmFuZG9tL3BsdWdpbnM6CisJKiBkb2NzL3JhbmRvbS9ydHA6CisJKiBkb2NzL3JhbmRvbS9zbG9tby9jb250cm9sbGVyLnR4dDoKKwkqIGRvY3MvcmFuZG9tL3NvdXJjZXM6CisJKiBkb2NzL3JhbmRvbS9zdHJlYW1oZWFkZXI6CisJKiBkb2NzL3JhbmRvbS90ZXN0aW5nL3N5bnRheDoKKwkqIGRvY3MvcmFuZG9tL3R5cGVzMjoKKwkqIGRvY3MvcmFuZG9tL3VyYWV1cy9nc3RyZWFtZXJfYW5kX21pZGkudHh0OgorCSogZG9jcy9yYW5kb20vdmlzLXRyYW5zZm9ybToKKwkqIGRvY3MvcmFuZG9tL3d0YXkvY2Fwcy1uZWdvY2lhdGlvbjoKKwkqIGRvY3MvcmFuZG9tL3d0YXkvdGhyZWFkaW5nOgorCSogZG9jcy9yYW5kb20vd3RheS90aHJlYWRzX2hpbGV2ZWw6CisJKiBnc3QvZ3N0YmluLmM6CisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSogZ3N0L2dzdGNoaWxkcHJveHkuYzoKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJKiBnc3QvZ3N0ZXZlbnQuYzoKKwkqIGdzdC9nc3RldmVudC5oOgorCSogZ3N0L2dzdGdob3N0cGFkLmM6CisJKiBnc3QvZ3N0aW50ZXJmYWNlLmM6CisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkLmg6CisJKiBnc3QvZ3N0cGFyYW1zcGVjcy5oOgorCSogZ3N0L2dzdHBhcnNlLmM6CisJKiBnc3QvZ3N0cGlwZWxpbmUuYzoKKwkqIGdzdC9nc3RwbHVnaW4uYzoKKwkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6CisJKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oOgorCSogZ3N0L2dzdHBvbGwuYzoKKwkqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSogZ3N0L2dzdHV0aWxzLmM6CisJKiBnc3QvZ3N0dXRpbHMuaDoKKwkqIGdzdC9nc3R2YWx1ZS5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzoKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgorCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RoZWxwZXIuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKKwkqIHRlc3RzL2JlbmNobWFya3MvY2Fwc25lZ28uYzoKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzaW5rLmM6CisJKiB0ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOgorCSogdG9vbHMvZ3N0LWxhdW5jaC4xLmluOgorCSogd2luMzIvUkVBRE1FLnR4dDoKKwkgIGRvY3MsIGdzdDogdHlwbyBmaXhlcworCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1ODQ0OQorCisyMDExLTA5LTA3IDE1OjA3OjIwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvTWFrZWZpbGUuYW06CisJKiBkb2NzL2xpYnMvTWFrZWZpbGUuYW06CisJICBkb2NzOiBmaXggbWFrZSBkaXN0Y2hlY2sKKwkgIE5vIHBvaW50IHJlbW92aW4gdGhvc2UgZW1wdHkgb3ZlcnJpZGUgZmlsZXMgZnJvbSBnaXQsIHRoZXknbGwKKwkgIGp1c3QgYmUgcmUtY3JlYXRlZCBsYXRlciwgc28gbGV0J3MgdGVsbCBndGstZG9jIGFib3V0IHRoZW0sIHNvCisJICBpdCBjYW4gY2xlYW4gdGhlbSB1cCBwcm9wZXJseS4KKworMjAxMS0wOS0wNyAxNjowMjozMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYmFzZXRyYW5zZm9ybTogSWYgdGhlcmUncyBubyBwZWVyIHdlIHN0aWxsIGhhdmUgdG8gdHJhbnNmb3JtIEFOWSBjYXBzIGluIGdldGNhcHMoKQorCSAgT3RoZXJ3aXNlIGVsZW1lbnRzIGxpa2UgY2Fwc2ZpbHRlciB3aWxsIHJldHVybiBBTlkgY2FwcyBpZiBubworCSAgcGVlciBpcyBwcmVzZW50IGluc3RlYWQgb2YgdGhlIGZpbHRlciBjYXBzLiBUaGUgdHJhbnNmb3JtX2NhcHMoKQorCSAgdmZ1bmMgY291bGQgZG8gdHJhbnNmb3JtYXRpb25zIHRvIHRoZSB0ZW1wbGF0ZSBjYXBzIHRoYXQgZG8gbm90CisJICByZXN1bHQgaW4gdGhlIHVubW9kaWZpZWQgdGVtcGxhdGUgY2Fwcy4KKworMjAxMS0wOS0wNyAxNDowNTowMyArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZG9jcy9nc3QvTWFrZWZpbGUuYW06CisJKiBkb2NzL2xpYnMvTWFrZWZpbGUuYW06CisJKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06CisJICBkb2NzOiBjbGVhbnVwIG1ha2VmaWxlcworCSAgUmVtb3ZlIGNvbW1lbnRlZCBvdXQgcGFydHMgdGhhdCB3ZSBkb24ndCBuZWVkLiBSZW1vdmUgInRoZSB3aW5nbyBhZGRpdGlvbiIgLSBubworCSAgc28gdXNlZnVsIGFmdGVyIGFsbC4gTmFycm93IGRvd24gZmlsZS1nbG9icyBmb3IgcGx1Z2luIGRvY3MuCisKKzIwMTEtMDktMDcgMTM6NTA6MDggKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJICBkb2NzOiBlc2NhcGUgJSBpbiBkb2NibG9iCisKKzIwMTEtMDktMDIgMTk6NDY6MDYgKzA0MDAgIFN0YXMgU2VyZ2VldiA8c3Rhc0BzdGFzLihub25lKT4KKworCSogZ3N0L2dzdGdob3N0cGFkLmM6CisJICBnaG9zdHBhZDogVXNlIGdzdF9wYWRfc2V0X2NhcHMoKSBpbnN0ZWFkIG9mIG1hbnVhbGx5IGNoYW5naW5nIGNhcHMKKwkgIGdzdF9wYWRfc2V0X2NhcHMoKSBkb2VzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGJ1dCBhZGRpdGlvbmFsbHkgY2FsbHMKKwkgIHRoZSBwYWQncyBzZXRjYXBzIGZ1bmN0aW9uLgorCSAgRml4ZXMgYnVnICM2NTgwNzYuCisKKzIwMTEtMDktMDYgMjE6MjQ6MTAgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSBhMzllYjgzIHRvIDExZjBjZDUKKworMjAxMS0wOS0wNiAxNTozOTo1MiArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIDYwNWNkOWEgdG8gYTM5ZWI4MworCisyMDExLTA5LTA2IDEyOjE3OjA1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBiYXNldHJhbnNmb3JtOiBVc2UgY2hlY2sgZm9yIHN1YnNldHMgYW5kIG5vdCBub24tZW1wdHkgaW50ZXJzZWN0aW9uIHRvIGNoZWNrIGlmIGNhcHMgYXJlIGNvbXBhdGlibGUKKworMjAxMS0wOS0wNiAxMjoxOTo1OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogQ2hlY2sgZm9yIHN1YnNldHMsIG5vdCBub24tZW1wdHkgaW50ZXJzZWN0aW9ucyB0byBjaGVjayBpZiBjYXBzIGFyZSBjb21wYXRpYmxlCisJICBQYWRzIHNob3VsZCBvbmx5IGFjY2VwdCBjYXBzIHRoYXQgYXJlIGEgc3Vic2V0IG9mIHRoZSBwYWQgY2FwcywgZS5nLgorCSAgdGhleSBzaG91bGQgYWNjZXB0IG9ubHkgY2FwcyB0aGF0IGhhdmUgYSBub24tZW1wdHkgaW50ZXJzZWN0aW9uIGFuZAorCSAgYXQgbGVhc3QgYWxsIGZpZWxkcyBvZiB0aGUgcGFkIGNhcHMuCisJICBXaXRob3V0IHRoaXMgYSBwYWQgdGhhdCB3YW50cyBmb3IgZXhhbXBsZQorCSAgInZpZGVvL3gtaDI2NCxzdHJlYW0tZm9ybWF0PWJ5dGUtc3RyZWFtIgorCSAgd2lsbCBiZSBoYXBweSB0byBhY2NlcHQKKwkgICJ2aWRlby94LWgyNjQiLgorCisyMDExLTA4LTI5IDE3OjA2OjE4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgorCSogZ3N0L2dzdGNhcHMuYzoKKwkqIGdzdC9nc3RldmVudC5jOgorCSogZ3N0L2dzdG1lc3NhZ2UuYzoKKwkqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6CisJKiBnc3QvZ3N0cXVlcnkuYzoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgbWluaW9iamVjdDogY2hhbmdlIHRvIEdTVF9ERUZJTkVfTUlOSV9PQkpFQ1RfVFlQRQorCSAgQXBwZW5kIF9UWVBFIHRvIHRoZSBtYWNybyBmb3IgY29uc2lzdGVuY3kgd2l0aCBvdGhlciBzaW1pbGFyIG1hY3Jvcy4KKworMjAxMS0wOC0yOSAxNTozNDozMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdC5jOgorCSogZ3N0L2dzdF9wcml2YXRlLmg6CisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBnc3QvZ3N0YnVmZmVyLmg6CisJKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgorCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuaDoKKwkqIGdzdC9nc3RjYXBzLmM6CisJKiBnc3QvZ3N0Y2Fwcy5oOgorCSogZ3N0L2dzdGV2ZW50LmM6CisJKiBnc3QvZ3N0ZXZlbnQuaDoKKwkqIGdzdC9nc3RtZW1vcnkuYzoKKwkqIGdzdC9nc3RtZW1vcnkuaDoKKwkqIGdzdC9nc3RtZXNzYWdlLmM6CisJKiBnc3QvZ3N0bWV0YS5jOgorCSogZ3N0L2dzdG1ldGEuaDoKKwkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6CisJKiBnc3QvZ3N0bWluaW9iamVjdC5oOgorCSogZ3N0L2dzdHF1ZXJ5LmM6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGluaXQ6IGFkZCBfZ2V0X3R5cGUoKSBmdW5jdGlvbnMKKwkgIFJlbW92ZSBnc3RfbWluaV9vYmplY3RfcmVnaXN0ZXIoKSBhbmQgYWRkIGEgR1NUX0RFRklORV9NSU5JX09CSkVDVCBtYWNybyB0bworCSAgZGVmaW5lIGEgX2dldF90eXBlKCkgZnVuY3Rpb24gZm9yIHRoZSBib3hlZCBtaW5pb2JqZWN0LgorCSAgUmVtb3ZlIGEgYnVuY2ggb2YgY3VzdG9tIF9nZXRfdHlwZSgpIGZ1bmN0aW9ucyBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlCisJICBtaW5pb2JqZWN0IG1hY3JvLgorCSAgUmVuYW1lIHNvbWUgX2luaXQgbWV0aG9kIHRvIF9wcml2XypfaW5pdGlhbGl6ZSgpIGxpa2UgdGhlIHJlc3Qgb2YgdGhlbS4KKwkgIEluc3BpcmVkIGJ5IHBhdGNoIGZyb20gSm9oYW4gRGFobGluIGFuZCBzZWUgYnVnICM2NTc2MDMKKworMjAxMS0wOC0yOSAxMzoyNzoyNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdC5jOgorCSogZ3N0L2dzdF9wcml2YXRlLmg6CisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgorCSogZ3N0L2dzdGNhcHMuYzoKKwkqIGdzdC9nc3RldmVudC5jOgorCSogZ3N0L2dzdGZvcm1hdC5jOgorCSogZ3N0L2dzdG1lc3NhZ2UuYzoKKwkqIGdzdC9nc3RwbHVnaW4uYzoKKwkqIGdzdC9nc3RxdWVyeS5jOgorCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6CisJKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkqIGdzdC9nc3R0YWdsaXN0LmM6CisJKiBnc3QvZ3N0dmFsdWUuYzoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgZ3N0OiBhZGQgc29tZSBfcHJpdiBwcmVmaXhlcyB0byBwcml2YXRlIG1ldGhvZHMKKworMjAxMS0wOC0yOSAxMjozODo1NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKKwkgIG1pbmktb2JqZWN0OiB1c2UgcmVmL3VucmVmIGRpcmVjdGx5IGluIGJveGVkIGNvcHkvZnJlZQorCSAgR0xpYiB3aWxsIG5vdCBjYWxsIG91ciBjb3B5L2ZyZWUgd2l0aCBhIE5VTEwgb2JqZWN0CisKKzIwMTEtMDgtMjYgMTQ6Mzc6NTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKKwkgIENvbmZsaWN0czoKKwkgIGdzdC9nc3RtZXNzYWdlLmMKKwkgIGdzdC9nc3RxdWVyeS5jCisJICBnc3QvZ3N0cmVnaXN0cnljaHVua3MuYworCSAgZ3N0L2dzdHNlZ21lbnQuYworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmMKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oCisJICBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmMKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmMKKworMjAxMS0wOC0yNiAxNDoxODozMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6CisJICBiYXNlOiByZW5hbWUgYWxsb2NhdGlvbiB2bWV0aG9kcworCSAgTmFtZSB0aGUgYWxsb2NhdGlvbiB2bWV0aG9kIG9uIHNyY3BhZCBkZWNpZGVfYWxsb2NhdGlvbiBiZWNhdXNlIHNvdXJjZSBwYWRzIHdpbGwKKwkgIGhhdmUgdG8gZGVjaWRlIHdoYXQgYWxsb2NhdGlvbiBwYXJhbWV0ZXJzIHdpbGwgYmUgdXNlZC4KKwkgIE5hbWUgdGhlIGFsbG9jYXRpb24gdm1ldGhvZCBvbiBzaW5rcGFkcyBwcm9wb3NlX2FsbG9jYXRpb24gYmVjYXVzZSB0aGV5IHdpbGwKKwkgIG5lZWQgdG8gY29uZmlndXJlIHRoZSBhbGxvY2F0aW9uIHF1ZXJ5IHdpdGggYSBwcm9wb3NlZCB2YWx1ZXMgZm9yIHVwc3RyZWFtLgorCisyMDExLTA4LTI2IDE0OjE3OjIzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmg6CisJICBidWZmZXI6IGltcHJvdmUgZmxhZ3MKKwkgIFJlbmFtZSBEUk9QIHRvIERFQ09ERV9PTkxZLgorCSAgQWRkIERST1BQQUJMRSBmbGFnIHRvIG1hcmsgYnVmZmVycyB0aGF0IGNhbiBiZSBkcm9wcGVkIHRvIHNhdmUgYmFuZHdpZHRoIHdpdGhvdXQKKwkgIGRlc3Ryb3lpbmcgdGhlIHN0cmVhbS4KKworMjAxMS0wOC0yNiAxNDowOTo0NyArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgorCisJKiBnc3QvZ3N0dHJhY2UuaDoKKwkqIGdzdC9nc3R0eXBlZmluZC5oOgorCSAgZG9jczogYWRkIHNpbmNlIDAuMTAuMzYgb24gdGhlIG5ldyBfTk9ORSBlbnVtIHZhbHVlcworCisyMDExLTA4LTI2IDAwOjEzOjE2ICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+CisKKwkqIHRlc3RzL2V4YW1wbGVzL3N0ZXBwaW5nL2ZyYW1lc3RlcDEuYzoKKwkgIHN0ZXBwaW5nOiB1c2UgdGhlIHByb3BlciBhcmd1bWVudCBvcmRlcgorCSAgRml4ZXMgd2FybmluZyAjMTg4OiBlbnVtZXJhdGVkIHR5cGUgbWl4ZWQgd2l0aCBhbm90aGVyIHR5cGUgcmVwb3J0ZWQgYnkgSUNDLgorCisyMDExLTA4LTI2IDAwOjA2OjEyICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+CisKKwkqIHBsdWdpbnMvaW5kZXhlcnMvZ3N0ZmlsZWluZGV4LmM6CisJICBmaWxlaW5kZXg6IGV4cGxpY2l0bHkgY2FzdCB0byB0aGUgZW51bSB0eXBlcworCSAgRml4ZXMgd2FybmluZyAjMTg4OiBlbnVtZXJhdGVkIHR5cGUgbWl4ZWQgd2l0aCBhbm90aGVyIHR5cGUgcmVwb3J0ZWQgYnkgSUNDLgorCisyMDExLTA4LTI2IDAwOjAwOjI1ICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6CisJICB0eXBlZmluZGVyOiB1c2UgR1NUX1RZUEVfRklORF9OT05FIGluc3RlYWQgb2YgMAorCSAgRml4ZXMgd2FybmluZyAjMTg4OiBlbnVtZXJhdGVkIHR5cGUgbWl4ZWQgd2l0aCBhbm90aGVyIHR5cGUgcmVwb3J0ZWQgYnkgSUNDLgorCisyMDExLTA4LTI1IDIzOjUzOjU4ICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+CisKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5jOgorCSAgbGZvY29udHJvbHNvdXJjZTogZXhwbGljaXRseSBjYXN0IHRvIHRoZSBlbnVtIHR5cGUKKwkgIEZpeGVzIHdhcm5pbmcgIzE4ODogZW51bWVyYXRlZCB0eXBlIG1peGVkIHdpdGggYW5vdGhlciB0eXBlIHJlcG9ydGVkIGJ5IElDQy4KKworMjAxMS0wOC0yNSAyMzo0OTozOCArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgorCisJKiBnc3QvZ3N0dHlwZWZpbmQuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzoKKwkgIHR5cGVmaW5kOiBhZGQgR1NUX1RZUEVfRklORF9OT05FIGFuZCB1c2UgaXQKKwkgIEZpeGVzIHdhcm5pbmcgIzE4ODogZW51bWVyYXRlZCB0eXBlIG1peGVkIHdpdGggYW5vdGhlciB0eXBlIHJlcG9ydGVkIGJ5IElDQy4KKworMjAxMS0wOC0yNSAyMzoyNjowOCArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiB1c2UgdGhlIGVudW0gdmFsdWVzIGZvciAwIGFuZCBkb24ndCBhYnVzZSBvbiBnYm9vbGVhbiBjb2luY2lkZW5jZQorCSAgRml4ZXMgd2FybmluZyAjMTg4OiBlbnVtZXJhdGVkIHR5cGUgbWl4ZWQgd2l0aCBhbm90aGVyIHR5cGUgcmVwb3J0ZWQgYnkgSUNDLgorCisyMDExLTA4LTI1IDIzOjA2OjU2ICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IHB1dCB0aGUgYXJndW1lbnRzIG9mIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIGluIHRoZSBwcm9wZXIgb3JkZXIKKworMjAxMS0wOC0yNSAyMjo0ODo1NCArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgorCisJKiBnc3QvZ3N0cGFyc2UuYzoKKwkgIHBhcnNlOiB1c2UgR1NUX1BBUlNFX0ZMQUdfTk9ORSBpbnN0ZWFkIG9mIDAKKwkgIEZpeGVzIHdhcm5pbmcgIzE4ODogZW51bWVyYXRlZCB0eXBlIG1peGVkIHdpdGggYW5vdGhlciB0eXBlIHJlcG9ydGVkIGJ5IElDQy4KKworMjAxMS0wOC0yNSAyMjo0MjowOCArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgorCisJKiBnc3QvZ3N0dmFsdWUuYzoKKwkgIHZhbHVlOiBleHBsaWNpdGx5IGNhc3QgdG8gdGhlIGVudW0gdHlwZQorCSAgRml4ZXMgd2FybmluZyAjMTg4OiBlbnVtZXJhdGVkIHR5cGUgbWl4ZWQgd2l0aCBhbm90aGVyIHR5cGUgcmVwb3J0ZWQgYnkgSUNDLgorCisyMDExLTA4LTI1IDIyOjI5OjQ1ICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+CisKKwkqIGdzdC9nc3R1dGlscy5jOgorCSAgdXRpbHM6IG1pbm9yIGNoYW5nZXMgcmVsYXRlZCB0byBlbnVtIHR5cGVzCisJICBGaXhlcyB3YXJuaW5nICMxODg6IGVudW1lcmF0ZWQgdHlwZSBtaXhlZCB3aXRoIGFub3RoZXIgdHlwZSByZXBvcnRlZCBieSBJQ0MuCisKKzIwMTEtMDgtMjUgMjI6MDU6MjYgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KKworCSogZ3N0L2dzdHRyYWNlLmM6CisJKiBnc3QvZ3N0dHJhY2UuaDoKKwkgIHRyYWNlOiBhZGQgR1NUX0FMTE9DX1RSQUNFX05PTkUgZm9yIGNvbnNpc3RlbmN5IGFuZCB1c2UgaXQKKwkgIEZpeGVzIHdhcm5pbmcgIzE4ODogZW51bWVyYXRlZCB0eXBlIG1peGVkIHdpdGggYW5vdGhlciB0eXBlIHJlcG9ydGVkIGJ5IElDQy4KKworMjAxMS0wOC0yNSAyMTo1MjowNSArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgorCisJKiBnc3QvZ3N0dGFzay5jOgorCSAgdGFzazogZXhwbGljaXRseSBjYXN0IHRvIHRoZSBlbnVtIHR5cGUKKwkgIEZpeGVzIHdhcm5pbmcgIzE4ODogZW51bWVyYXRlZCB0eXBlIG1peGVkIHdpdGggYW5vdGhlciB0eXBlIHJlcG9ydGVkIGJ5IElDQy4KKworMjAxMS0wOC0yNSAyMTo0OToyOSArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgorCisJKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKKwkqIGdzdC9nc3R0YWdzZXR0ZXIuYzoKKwkgIHRhZ3NldHRlcjogdXNlIEdTVF9UQUdfTUVSR0VfVU5ERUZJTkVEIGluc3RlYWQgb2YgRkFMU0UKKwkgIEZpeGVzIHdhcm5pbmcgIzE4ODogZW51bWVyYXRlZCB0eXBlIG1peGVkIHdpdGggYW5vdGhlciB0eXBlIHJlcG9ydGVkIGJ5IElDQy4KKworMjAxMS0wOC0yNSAyMTozMDo1NyArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgorCisJKiBnc3QvZ3N0c2VnbWVudC5jOgorCSAgc2VnbWVudDogdXNlIEdTVF9TRUVLX0ZMQUdfTk9ORSBpbnN0ZWFkIG9mIDAKKwkgIEZpeGVzIHdhcm5pbmcgIzE4ODogZW51bWVyYXRlZCB0eXBlIG1peGVkIHdpdGggYW5vdGhlciB0eXBlIHJlcG9ydGVkIGJ5IElDQy4KKworMjAxMS0wOC0yNSAyMToyNTo0NiArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgorCisJKiBnc3QvZ3N0cmVnaXN0cnljaHVua3MuYzoKKwkgIHJlZ2lzdHJ5Y2h1bmtzOiBleHBsaWNpdGx5IGNhc3QgdG8gdGhlIGVudW0gdHlwZXMKKwkgIEZpeGVzIHdhcm5pbmcgIzE4ODogZW51bWVyYXRlZCB0eXBlIG1peGVkIHdpdGggYW5vdGhlciB0eXBlIHJlcG9ydGVkIGJ5IElDQy4KKworMjAxMS0wOC0yNSAyMToxODoxNSArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgorCisJKiBnc3QvZ3N0cXVlcnkuYzoKKwkgIHF1ZXJ5OiBtaW5vciBjaGFuZ2VzIHJlbGF0ZWQgdG8gZW51bSB0eXBlcworCSAgRml4ZXMgd2FybmluZyAjMTg4OiBlbnVtZXJhdGVkIHR5cGUgbWl4ZWQgd2l0aCBhbm90aGVyIHR5cGUgcmVwb3J0ZWQgYnkgSUNDLgorCisyMDExLTA4LTI1IDIxOjAzOjUzICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+CisKKwkqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOgorCSAgcGFkdGVtcGxhdGU6IGV4cGxpY2l0bHkgY2FzdCB0byB0aGUgZW51bSB0eXBlcworCSAgRml4ZXMgd2FybmluZyAjMTg4OiBlbnVtZXJhdGVkIHR5cGUgbWl4ZWQgd2l0aCBhbm90aGVyIHR5cGUgcmVwb3J0ZWQgYnkgSUNDLgorCisyMDExLTA4LTE2IDIzOjAwOjQ3ICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RwYWQuaDoKKwkgIHBhZDogZXhwbGljaXRseSBjYXN0IHRvIHRoZSBlbnVtIHR5cGUKKwkgIEZpeGVzIHdhcm5pbmcgIzE4ODogZW51bWVyYXRlZCB0eXBlIG1peGVkIHdpdGggYW5vdGhlciB0eXBlIHJlcG9ydGVkIGJ5IElDQy4KKworMjAxMS0wOC0xNiAyMjo1MToyOSArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgorCisJKiBnc3QvZ3N0bWVzc2FnZS5jOgorCSAgbWVzc2FnZTogZXhwbGljaXRseSBjYXN0IHRvIHRoZSByaWdodCBlbnVtIHR5cGVzCisJICBGaXhlcyB3YXJuaW5nICMxODg6IGVudW1lcmF0ZWQgdHlwZSBtaXhlZCB3aXRoIGFub3RoZXIgdHlwZSByZXBvcnRlZCBieSBJQ0MuCisKKzIwMTEtMDgtMTYgMjI6NDE6MzIgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KKworCSogZ3N0L2dzdGluZm8uYzoKKwkgIGluZm86IGV4cGxpY2l0bHkgY2FzdCB0byB0aGUgZW51bSB0eXBlCisJICBGaXhlcyB3YXJuaW5nICMxODg6IGVudW1lcmF0ZWQgdHlwZSBtaXhlZCB3aXRoIGFub3RoZXIgdHlwZSByZXBvcnRlZCBieSBJQ0MuCisKKzIwMTEtMDgtMTYgMjI6Mzc6MDggKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KKworCSogZ3N0L2dzdGluZGV4LmM6CisJICBpbmRleDogZXhwbGljaXRseSBjYXN0IHRvIHRoZSBlbnVtIHR5cGUKKwkgIEZpeGVzIHdhcm5pbmcgIzE4ODogZW51bWVyYXRlZCB0eXBlIG1peGVkIHdpdGggYW5vdGhlciB0eXBlIHJlcG9ydGVkIGJ5IElDQy4KKworMjAxMS0wOC0xNiAyMjoyOTo1OSArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgorCisJKiBnc3QvZ3N0Zm9ybWF0LmM6CisJICBmb3JtYXQ6IHVzZSBHU1RfRk9STUFUX1VOREVGSU5FRCBhbmQgZmV3IGNhc3RzIHRvIEdzdEZvcm1hdAorCSAgRml4ZXMgd2FybmluZyAjMTg4OiBlbnVtZXJhdGVkIHR5cGUgbWl4ZWQgd2l0aCBhbm90aGVyIHR5cGUgcmVwb3J0ZWQgYnkgSUNDLgorCisyMDExLTA4LTI2IDEzOjAyOjM0ICswMTAwICBTam9lcmQgU2ltb25zIDxzam9lcmQuc2ltb25zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6CisJICBiYXNldHJhbnNmb3JtOiBGaXggYm9kZ2VkIHByZXZpb3VzIGNvbW1pdAorCisyMDExLTA4LTI2IDEyOjM3OjQzICswMTAwICBTam9lcmQgU2ltb25zIDxzam9lcmQuc2ltb25zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKKwkgIGJhc2V0cmFuc2Zvcm06IFVzZSBHc3RQYWREaXJlY3Rpb24gaW4gdGhlIHF1ZXJ5IHZmdW5jCisJICBXaW0gc3VnZ2VzdGVkIHRoYXQgdXNpbmcgR3N0UGFkRGlyZWN0aW9uIGluc3RlYWQgb2YgYSBHc3RQYWQgaW4gdGhlCisJICBhcmd1bWVudHMgdG8gdGhlIG5ldyBxdWVyeSB2ZnVuYyB3b3VsZCBiZSBtb3JlIGNvbnNpc3RlbnQgd2l0aCB0aGUgb3RoZXIKKwkgIGZ1bmN0aW9ucy4KKworMjAxMS0wOC0yNiAxMzo0MDo0NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5oOgorCSAgYnVmZmVyOiByZW5hbWUgX0NMSVAgdG8gX0RST1AgZmxhZworCSAgV2UgY2FuIGFsc28gdXNlIGEgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IGEgZnJhbWUgc2hvdWxkIGJlIGRlY29kZWQgYnV0IG5vdAorCSAgZGlzcGxheWVkIHJlZ2FyZGxlc3Mgb2YgdGhlIHRoZSBzZWdtZW50IGJvdW5kYXJpZXMgc28gd2UgdXNlIHRoZSBtb3JlIGdlbmVyaWMKKwkgIF9EUk9QLgorCisyMDExLTA4LTI2IDEyOjI4OjI4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgorCSAgYmFzZXRyYW5zZm9ybTogcmVtb3ZlIHNvbWUgdW51c2VkIHZhcmlhYmxlcworCisyMDExLTA4LTI2IDExOjQ0OjEyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgorCSAgYmFzZXRyYW5zZm9ybTogYWRkIHZtZXRob2QgdG8gY29uZmlndXJlIHVwc3RyZWFtIGJ1ZmZlcnBvb2wKKwkgIEFkZCBhIHZtZXRob2QgdGhhdCBjYW4gYmUgaW1wbGVtZW50ZWQgdG8gaW5mbHVlbmNlIHRoZSBidWZmZXJwb29sIHRoYXQgdXBzdHJlYW0KKwkgIGVsZW1lbnRzIHdpbGwgdXNlLgorCisyMDExLTA4LTI2IDExOjI0OjQyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgorCSAgYmFzZXRyYW5zZm9ybTogdXNlIHBhZCBkaXJlY3Rpb24gbGlrZSBvdGhlciB2bWV0aG9kcworCisyMDExLTA4LTI2IDExOjA5OjA3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCisJICBDb25mbGljdHM6CisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmgKKworMjAxMS0wOC0yNiAxMDo1NzozNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHVyaS5oOgorCSAgdXJpOiBzb21lIGRvYyBmaXhlcworCisyMDExLTA4LTI1IDExOjAyOjE2ICswMTAwICBTam9lcmQgU2ltb25zIDxzam9lcmQuc2ltb25zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKKwkgIEJhc2VUcmFuc2Zvcm06IEFkZCBhIHF1ZXJ5IHZmdW5jCisKKzIwMTEtMDctMjAgMTQ6MDU6MjcgKzAyMDAgIFNqb2VyZCBTaW1vbnMgPHNqb2VyZC5zaW1vbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKKwkgIGNhcHNmaWx0ZXI6IGRvbid0IGFzc3VtZSBfZ2V0X2NhcHMgc3RpbGwgaGFzIHRvIGJlCisJICBfc2V0X2NhcHMgb25seSBnZXRzIGNhbGxlZCB3aGVuIHRoZSBidWZmZXIgaXMgYWN0dWFsbHkgcHVzaGVkLCBzbyB0aGVyZQorCSAgaXMgYSByZWFzb25hYmx5IGJpZyB3aW5kb3cgYmV0d2VlbiB3aGVuIHRoZSBpbml0aWFsIGNhcHMgYXJlIHJldHJpZXZlZAorCSAgYW5kIHdoZW4gdGhlIGNhcHMgYXJlIHNldCBvbiBvdXIgc3JjIHBhZC4gU28gd2UgY2FuJ3QgYXNzdW1lIHRoZSBub3QKKwkgIGhhdmluZyBuZWdvdGlhdGVkIGNhcHMgb24gb3VyIHNyYyBwYWQgbWVhbnMgX2dldF9jYXBzIHN0aWxsIGhhcyB0byBiZQorCSAgY2FsbGVkLgorCSAgSW5zdGVhZCBzaW1wbHkgYWx3YXlzIHN1Z2dlc3QgdGhlIG5ldyBjYXBzIG9uIGJ1ZmZlcl9hbGxvYy4KKworMjAxMS0wOC0yNSAxODowNDoyOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5oOgorCSAgYnVmZmVyOiBhZGQgY2xpcCBmbGFnCisKKzIwMTEtMDgtMjUgMTY6MjE6MTggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXIuaDoKKwkgIGJ1ZmZlcjogcmV3b3JrIGZsYWdzIGEgbGl0dGxlCisJICBSZW9yZGVyIGJ1ZmZlciBmbGFncyBhbmQgYWRkIHNvbWUgbmV3IG9uZXMuCisJICBSZW1vdmUgdGhlIG1lZGlhIHNwZWNpZmljIGZsYWdzLCB3ZSBjYW4gbm93IGVhc2lseSBkbyB0aGlzIHdpdGggdGhlIEZMQUdfTEFTVAorCSAgZmxhZyBiZWNhdXNlIHdlIGRvbid0IGV4dGVuZCBmcm9tIEdzdEJ1ZmZlciBhbnltb3JlLgorCisyMDExLTA4LTI1IDE2OjIwOjIxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIGJ1ZmZlcjogYWx3YXlzIGNvcHkgYWxsIGJ1ZmZlciBmbGFncyB3aGVuIGFza2VkCisJICBEb24ndCB0cnkgdG8gYmUgc21hcnQgYW5kIGNvcHkgb25seSBhIHN1YnNldCBvZiBidWZmZXIgZmxhZworCisyMDExLTA4LTI1IDE2OjE5OjUyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIHVwZGF0ZSBkZWZzCisKKzIwMTEtMDgtMjUgMTQ6MDk6MzcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3QuYzoKKwkqIGdzdC9nc3RidWZmZXIuaDoKKwkgIGJ1ZmZlcjogcGx1cmFsaXplIHRoZSBidWZmZXIgZmxhZ3MKKworMjAxMS0wOC0yNSAxMjozODo1OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSogdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jOgorCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3N0cmVzcy5jOgorCSAgYmFzZXNpbms6IHJlbW92ZSBwcmVyb2xsLXF1ZXVlLWxlbiBwcm9wZXJ0eQorCSAgUmVtb3ZlIHRoZSBwcmVyb2xsLXF1ZXVlLWxlbiBwcm9wZXJ0eSBhbmQgbW92ZSBpdHMgdmFyaWFibGVzIHRvIGEgcHJpdmF0ZQorCSAgc2VjdGlvbiBzbyB0aGF0IHdlIGNhbiByZW1vdmUgdGhlbSBsYXRlci4KKworMjAxMS0wOC0yNCAxMDo0MzowOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQorCSAgQ29uZmxpY3RzOgorCSAgZ3N0L2dzdG9iamVjdC5jCisKKzIwMTEtMDgtMjMgMTg6MTk6NTMgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBiYXNlc2luazogZW5zdXJlIHN0YXJ0X3RpbWUgcmVzZXQgdXBvbiBmbHVzaAorCisyMDExLTA4LTIzIDExOjU1OjE3ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RvYmplY3QuYzoKKwkgIGdzdG9iamVjdDogYWxzbyByZW1vdmUgdGhlIGNhc3QgYXMgdGhpcyBpcyBjYXVzaW5nIHRoZSB0cm91YmxlCisKKzIwMTEtMDgtMjMgMTE6NDE6MDIgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdG9iamVjdC5jOgorCSAgZ3N0b2JqZWN0OiB1c2UgdGhlIGF0b21pYyBtYWNyb3MgdG8gZGVhbCB3aXRoIHRoZSBnbGliIGNoYW5nZSBpbiB0aGUgaW1wbC4KKworMjAxMS0wOC0yMiAxMjo0OTowNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdG9iamVjdC5jOgorCSogZ3N0L2dzdG9iamVjdC5oOgorCSAgb2JqZWN0OiBtYWtlIF9yZXBsYWNlIGxpa2UgdGhlIG1pbmlvYmplY3QgdmVyc2lvbgorCisyMDExLTA4LTIyIDEyOjMzOjM1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCisJICBDb25mbGljdHM6CisJICBnc3QvZ3N0YnVmZmVyLmgKKwkgIGdzdC9nc3RjYXBzLmMKKwkgIGdzdC9nc3RjYXBzLmgKKwkgIGdzdC9nc3RldmVudC5jCisKKzIwMTEtMDgtMjIgMTI6MTk6MTkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RjYXBzLmM6CisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJKiBnc3QvZ3N0c3RydWN0dXJlLmg6CisJKiBnc3QvZ3N0dmFsdWUuYzoKKwkqIGdzdC9nc3R2YWx1ZS5oOgorCSogdGVzdHMvY2hlY2svZ3N0L2NhcHNsaXN0Lmg6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6CisJKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvcGFyc2UtbGF1bmNoLmM6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIHZhbHVlOiByZW1vdmUgb3VyIEZPVVJDQyBHVHlwZQorCSAgUmVtb3ZlIG91ciBjdXN0b20gZm91cmNjIEdWYWx1ZS4KKworMjAxMS0wOC0yMSAxNDowNzowOCAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkqIGdzdC9nc3RvYmplY3QuYzoKKwkgIG9iamVjdDogbWFrZSBnc3Rfb2JqZWN0X3JlcGxhY2UoKSBhdG9taWMKKworMjAxMS0wOC0yMCAxNDowNzo1NSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSAgZG9jczogbW9yZSBjbGFyaWZpY2F0aW9uIGZvciBlbGVtZW50IGRvY3MKKwkgIERvbid0IHN1Z2dlc3QgZGVwcmVjYXRlZCBtZXRob2QgaW4gdGhlIGRlc2N0aW9uIGRvY3MgYW5kIHRyeSB0byBiZSBtb3JlIGhlbHBmdWwKKwkgIGluIG90aGVyIHBsYWNlcyBieSBzdWdnZXN0aW5nIHJlbGF0ZWQgZnVuY3Rpb25zLgorCisyMDExLTA4LTIwIDA5OjU2OjAxICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJICBkb2NzOiBzbWFsbCBjbGFyaWZpY2F0aW9uIGluIHRoZSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgZG9jcworCSAgTWFrZSBpdCBtb3JlIG9idmlvdXMgdGhhdCBvbmUgc2hvdWxkIHBhc3MgdGhlIHRlbXBsYXRlIG5hbWUuCisKKzIwMTEtMDgtMTggMjA6NDY6MDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBkb24ndCB1c2UgPT0gaW4gZGVidWcgc3RyaW5nCisJICBJdCBtZXNzZXMgdXAgR1NUX0RFQlVHPSo6NSBtYWtlIGZvby9iYXIudmFsZ3JpbmQsIGJlY2F1c2UKKwkgIG91ciBNYWtlZmlsZSBsb29rcyBmb3IgJz09JyBhcyBtYXJrZXIgb2YgdmFsZ3JpbmQgb3V0cHV0LgorCisyMDExLTA4LTE4IDIwOjQ0OjAxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogZml4IGNyYXNoIG9uIHNlZWsgZnJvbSBzdHJlYW1pbmcgdGhyZWFkIG9uIG5ld3NlZ21lbnQgZXZlbnQKKwkgIEV2ZW50IGlmIGl0J3Mgbm90IGFsbG93ZWQsIHdlIGNhbiBlYXNpbHkgcHJldmVudCBpdCwgc28gbGV0J3MgZG8KKwkgIHRoYXQuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU2NzcxCisKKzIwMTEtMDgtMTcgMTc6NTY6NDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuaDoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgc3RydWN0dXJlOiBhZGQgbWV0aG9kIHRvIGZpeGF0ZSBvbmUgZmllbGQKKworMjAxMS0wOC0xNyAxNzoxNjoyMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJICBiYXNlc3JjOiBhZGQgZGVmYXVsdCBmaXhhdGUgZnVuY3Rpb24KKwkgIEFkZCBhIGRlZmF1bHQgZml4YXRlIGZ1bmN0aW9uIHdoaWNoIGRvZXMgZ3N0X2NhcHNfZml4YXRlKCkgYmVjYXVzZQorCSAgZ3N0X3BhZF9maXhhdGUoKSBkb2VzIG5vdCBkbyB0aGF0IGFueW1vcmUuCisKKzIwMTEtMDgtMTcgMDk6MjU6MDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgorCSAgZG9jczogaW1wcm92ZSBzb21lIGRvY3MKKworMjAxMS0wOC0xNiAxODoyOToyOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSogZ3N0L2dzdGJ1ZmZlci5oOgorCSAgYnVmZmVyOiByZXR1cm4gcHJvY2Vzc2VkIG51bWJlciBvZiBieXRlcworCSAgTWFrZSBfZmlsbCwgX2V4dHJhY3QgYW5kIF9tZW1zZXQgcmV0dXJuIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2VyZQorCSAgaGFuZGxlZCBpbiBjYXNlIHRoZSBidWZmZXIgc2l6ZSBpcyBsZXNzIHRoYW4gdGhlIHNwZWNpZmllZCBzaXplLgorCisyMDExLTA4LTE2IDE3OjE5OjI5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6CisJICBkb2NzOiBmaXggdHlwbyBpbiBlbGVtZW50IGZhY3RvcnkgZG9jdW1lbnRhdGlvbgorCisyMDExLTA4LTE2IDE3OjMyOjIwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBnc3QvZ3N0YnVmZmVyLmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzoKKwkgIGJ1ZmZlcjogcmVuYW1lIFBSRVJPTEwgLT4gTElWRSBmbGFnCisJICBSZW5hbWUgdGhlIEdTVF9CVUZGRVJfRkxBR19QUkVST0xMIHRvIEdTVF9CVUZGRVJfRkxBR19MSVZFIGFuZCBnaXZlIHRoZSBuZXcgZmxhZworCSAgYSBtZWFuaW5nLiBUaGUgb2xkIFBSRVJPTEwgZmxhZyBuZXZlciBoYWQgYSBjbGVhciBtZWFuaW5nLgorCisyMDExLTA4LTE1IDIxOjA1OjM0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGNhcHMuYzoKKwkgIGNhcHM6IGZpeCBjb21waWxlciB3YXJuaW5nIHJlcG9ydGVkIGJ5IElDQworCSAgVGhlIE1BWCBtYWNybyBleHBhbmRzIHRvIGNvZGUgdGhhdCBjaGVja3MgaWYgYW4gdW5zaWduZWQgaW50ZWdlciBpcyA8IDAuCisJICBGaXhlcyB3YXJuaW5nICMxODY6IHBvaW50bGVzcyBjb21wYXJpc29uIG9mIHVuc2lnbmVkIGludGVnZXIgcmVwb3J0ZWQgYnkgSUNDLgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1NjI2NQorCisyMDExLTA4LTEwIDExOjM5OjIzICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+CisKKwkqIGdzdC9nc3RidWZmZXIuaDoKKwkgIGJ1ZmZlcjogZXhwbGljaXRseSBjYXN0IHRvIHRoZSBlbnVtIHR5cGUKKwkgIEZpeGVzIHdhcm5pbmcgIzE4ODogZW51bWVyYXRlZCB0eXBlIG1peGVkIHdpdGggYW5vdGhlciB0eXBlIHJlcG9ydGVkIGJ5IElDQy4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTYyNjUKKworMjAxMS0wOC0xMCAxMTowNzo0OSArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgorCisJKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSAgZ3N0c3RhdGU6IGV4cGxpY2l0bHkgY2FzdCB0byB0aGUgZW51bSB0eXBlCisJICBGaXhlcyB3YXJuaW5nICMxODg6IGVudW1lcmF0ZWQgdHlwZSBtaXhlZCB3aXRoIGFub3RoZXIgdHlwZSByZXBvcnRlZCBieSBJQ0MuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU2MjY1CisKKzIwMTEtMDgtMDkgMjM6NDI6MjYgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KKworCSogZ3N0L2dzdGV2ZW50LmM6CisJICBldmVudDogZXhwbGljaXRseSBjYXN0IHRvIHRoZSByaWdodCBlbnVtIHR5cGVzCisJICBGaXhlcyB3YXJuaW5nICMxODg6IGVudW1lcmF0ZWQgdHlwZSBtaXhlZCB3aXRoIGFub3RoZXIgdHlwZSByZXBvcnRlZCBieSBJQ0MuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU2MjY1CisKKzIwMTEtMDgtMDkgMjM6MzM6NDMgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KKworCSogZ3N0L2dzdGVycm9yLmM6CisJICBnc3RlcnJvcjogZXhwbGljaXRseSBjYXN0IHRvIHRoZSByaWdodCBHc3RHRXJyb3IgY29kZSBlbnVtIHR5cGVzCisJICBGaXhlcyB3YXJuaW5nICMxODg6IGVudW1lcmF0ZWQgdHlwZSBtaXhlZCB3aXRoIGFub3RoZXIgdHlwZSByZXBvcnRlZCBieSBJQ0MuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU2MjY1CisKKzIwMTEtMDgtMDkgMjM6MjY6MTMgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KKworCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKKwkgIGRlYnVndXRpbHM6IHVzZSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HIGZvciBHc3RTdGF0ZSBpbnN0ZWFkIG9mIDAKKwkgIEZpeGVzIGEgd2FybmluZyByZXBvcnRlZCBieSBJQ0MuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU2MjY1CisKKzIwMTEtMDgtMDkgMjI6NDg6NTMgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KKworCSogZ3N0L2dzdGNhcHMuYzoKKwkqIGdzdC9nc3RjYXBzLmg6CisJICBjYXBzOiBkZWZpbmUgR1NUX0NBUFNfRkxBR1NfTk9ORSBmb3IgY29uc2lzdGVuY3kgd2l0aCBvdGhlciBlbnVtZXJhdGlvbnMKKwkgIFVzZSB0aGVtIHRvIGZpeCB3YXJuaW5ncyB3aGVuIGJ1aWxkaW5nIHdpdGggSUNDLgorCSAgQVBJOiBHU1RfQ0FQU19GTEFHU19OT05FCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU2MjY1CisKKzIwMTEtMDgtMDkgMjI6Mjk6NDQgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KKworCSogZ3N0L2dzdC5jOgorCSAgZ3N0OiB1c2UgR3N0RGVidWdMZXZlbCBlbnVtIHR5cGUgdG8gZml4IGEgd2FybmluZyBidWlsZGluZyB3aXRoIElDQworCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1NjI2NQorCisyMDExLTA4LTE1IDE2OjQ1OjMzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IG1ha2UgZml4YXRlIGNhcHMgYmVoYXZlIGxpa2Ugb3RoZXIgZnVuY3Rpb25zCisJICBJbnN0YWxsIGEgZGVmYXVsdCBmaXhhdGUgY2FwcyBmdW5jdGlvbiBvbiBwYWRzIGxpa2UgYWxsIHRoZSBvdGhlciBwYWQgZnVuY3Rpb25zLgorCisyMDExLTA4LTE1IDE2OjQ1OjA1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGRlZnM6IHVwZGF0ZSBmb3IgbmV3IHN5bWJvbHMKKworMjAxMS0wOC0xNSAxNDo0MzoxNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQorCisyMDExLTA4LTE1IDE0OjQwOjM4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSogZ3N0L2dzdGNhcHMuaDoKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkgIGNhcHM6IGFkZCBmaXhhdGUgZnVuY3Rpb24KKwkgIEFkZCBhIGZpeGF0ZSBmdW5jdGlvbiBhbmQgdXNlIGl0IGluIGdzdHBhZC5jCisKKzIwMTEtMDgtMTUgMTQ6MzI6MTcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuaDoKKwkgIHN0cnVjdHVyZTogYWRkIGZ1bmN0aW9uIHRvIGZpeGF0ZQorCSAgQWRkIGEgZnVuY3Rpb24gdG8gZml4YXRlIGEgc3RydWN0dXJlIGFuZCB1c2UgaXQgZm9yIHRoZSBkZWZhdWx0IGZpeGF0ZSBmdW5jdGlvbgorCSAgaW4gZ3N0cGFkLmMuCisKKzIwMTEtMDgtMTUgMTM6MTc6NDQgKzAyMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgorCisJKiBzY3JpcHRzL2dzdC11bmluc3RhbGxlZDoKKwkgIGdzdC11bmluc3RhbGxlZDogYWRkIEZhcnNpZ2h0IGFuZCBOaWNlIHN1cHBvcnQKKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTY1NTcKKworMjAxMS0wOC0xNSAxNDoxNzozOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiBmaXggZGVmYXVsdCBhY2NlcHRjYXBzCisJICBNYWtlIHRoZSBhY2NlcHRjYXBzIGZ1bmN0aW9uIGJlaGF2ZSBsaWtlIGFsbCB0aGUgb3RoZXIgZnVuY3Rpb25zIHdpdGggYSBkZWZhdWx0CisJICBpbXBsZW1lbnRhdGlvbi4gRG9uJ3QgdHJ5IHRvIGNoYWluIHVwIHRvIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdoZW4gaXQgd2FzCisJICBzZXQgdG8gTlVMTCBleHBsaWNpdGx5IGJ1dCByZXR1cm4gRkFMU0UgaW5zdGVhZC4KKwkgIEZpeCBzb21lIGRvY3MKKworMjAxMS0wOC0xNSAxMzoyNDoxMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5oOgorCSAgcGFkOiBmaXggc29tZSBtYWNyb3MKKwkgIFJlbW92ZSBhIHJhdGhlciB1c2xlc3MgbWFjcm8gdG8gY2hlY2sgaWYgYSBwYWQgbW9kZSBpcyBhY3RpdmUgYW5kCisJICBhZGQgR1NUX1BBRF9JU19BQ1RJVkUoKS4KKworMjAxMS0wOC0xNSAxMjoxODo1OSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKKwkgIGRvY3M6IHVwZGF0ZSBwb3J0aW5nIGRvYworCisyMDExLTA4LTE1IDEyOjE2OjMwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgorCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBwYWQ6IHJlbW92ZSBnc3RfcGFkX2dldF9uZWdvdGlhdGVkX2NhcHMoKQorCSAgUmVtb3ZlIGdzdF9wYWRfZ2V0X25lZ290aWF0ZWRfY2FwcygpLCBpdCBkb2VzIG5vdCByZWFseSBkbyB3aGF0IGl0IHNheXMsCisJICBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMoKSByZXR1cm5zIHRoZSBjdXJyZW50bHkgbmVnb3RpYXRlZCBjYXBzIG9uIHRoZSBwYWQKKwkgIGNvcnJlY3RseS4KKworMjAxMS0wOC0xMiAxOToyNzoyMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IGZpeCBkZWFkbG9jayBpbiBlcnJvciBwYXRoCisJICBEb24ndCBsb2NrIHRoZSBzYW1lIGxvY2sgdHdpY2UuIFNwb3R0ZWQgYnkgSm9zZXAgVG9ycmUgVmFsbGVzLgorCisyMDExLTA4LTEyIDEyOjQ1OjAxICswMzAwICBQZXRlcmlzIEtyaXNqYW5pcyA8cGVjaXNrQGdtYWlsLmNvbT4KKworCSogZ3N0L2dzdGl0ZXJhdG9yLmM6CisJICBpdGVyYXRvcjogRml4IGdzdF9pdGVyYXRvcl9uZXh0KCkgZWxlbWVudCBhbm5vdGF0aW9uCisKKzIwMTEtMDgtMTEgMDk6MzE6MjUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL3B3Zy9hZHZhbmNlZC10eXBlcy54bWw6CisJICBkb2NzOiBmaXggdHlwbyBpbiBQV0cKKwkgIFJCRyAtPiBSR0IuIFNwb3R0ZWQgYnkgV2lsbCBUaG9tcHNvbi4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTYzMjYKKworMjAxMS0wOC0xMSAxMDowOTo0MSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgorCSAgZGVidWd1dGlsczogcmVtb3ZlZCBub24tc2Vuc2UgY29tbWVudAorCisyMDExLTA4LTEwIDE3OjA3OjU0ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KKworCSAgTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL21hc3RlcicgaW50byAwLjExCisJICBDb25mbGljdHM6CisJICBnc3QvZ3N0ZGVidWd1dGlscy5jCisJICBnc3QvZ3N0ZWxlbWVudGRldGFpbHMuaAorCSAgZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmMKKwkgIHRvb2xzL2dzdC1ydW4uYworCisyMDExLTA4LTA4IDE5OjM2OjA0ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RlbGVtZW50ZGV0YWlscy5oOgorCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmM6CisJICByZWdpc3RyeTogbW92ZSB1dGYtOCB2YWxpZGF0aW9uIHRvIHJlZ2lzdHJ5IHNhdmluZyB0aW1lCisJICBJbnN0ZWFkIG9mIGNoZWNraW5nIGZvciB2YWxpZCB1dGYtOCBlbGVtZW50LWRldGFpbHMgZXZlcnkgdGltZSB3ZSBjcmVhdGUKKwkgIGVsZW1lbnRzIChmcm9tIHBsdWdpbi1pbml0IG9yIHJlZ2lzdHJ5KSwgZG8gaXQgYmVmb3JlIHdlIHNhdmUgdGhlIHJlZ2lzdHJ5LgorCSAgRml4ZXMgIzY1NjE5My4KKworMjAxMS0wOC0xMCAxMTowMTo1OCArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBnc3QvZ3N0bWVtb3J5LmM6CisJKiBnc3QvZ3N0bWV0YS5jOgorCSogZ3N0L2dzdHBhZC5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6CisJICBGaXggYW5kIGNsYXJpZnkgZGVidWcgc3RhdGVtZW50cworCSAgRml4ZXMgYnVpbGQgb24gTWFjT1NYCisJICBTaWduZWQtb2ZmLWJ5OiBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KKworMjAxMS0wOC0wNSAxMDo1OTo0MiArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkgIGdzdGJ1ZmZlcjogQ2xhcmlmeSBkb2MKKworMjAxMS0wOC0wNyAwOToxNDo1MCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvbWFudWFsL2Jhc2ljcy1oZWxsb3dvcmxkLnhtbDoKKwkgIGRvY3M6IGZpeCBoZWxsb3dvcmxkIGNvbXBpbGUgY29tbWFuZCBsaW5lIGZvciBuZXdlciBnY2MKKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTYwOTIKKworMjAxMS0wOC0wNiAxODoyMDo1MSArMDIwMCAgU2hhdW4gSG9vcGVzIDxob29wZXMwMUBzdHVkZW50LnV3YS5lZHUuYXU+CisKKwkqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6CisJICBkZWJ1Z3V0aWxzOiBpbXByb3ZlIGRvdCBmaWxlIGZsb3cgbGF5b3V0CisJICBJdGVyYXRlIHNvdXJjZS0gYW5kIHNpbmstcGFkcyBzZXBhcmF0ZWx5IHRvIGVuc3VyZSB0aGF0IHRoZSBncmFwaCByZWZsZWN0cyB0aGUKKwkgIHVwc3RyZWFtL2Rvd25zdHJlYW0gb3JkZXIuIEZpeGVzICM2NDMyNjkKKworMjAxMS0wOC0wNiAxNDoxNzo1MCArMDIwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIChhdCkgYXBlc3RhYXJ0IChkb3QpIG9yZz4KKworCSogZ3N0cmVhbWVyLnNwZWMuaW46CisJICBnc3RyZWFtZXIuc3BlYzogbWFrZSBidWlsZGFibGUgYW5kIHBhcmFsbGVsCisKKzIwMTEtMDgtMDUgMTI6MTI6MzMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0b29scy9nc3QtcnVuLmM6CisJICB0b29sczogbWFrZSB1bnZlcnNpb25lZCB3cmFwcGVyIGxvb2sgZm9yIC0wLjEwIHRvb2xzIG9ubHkKKwkgIERvbid0IHdhbnQgKGluY29tcGF0aWJsZSkgMC4xMSB0b29scyB0byBiZSBwaWNrZWQgdXAgYnkgYWNjaWRlbnQuCisKKzIwMTEtMDgtMDQgMTg6MDA6MDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJICBiYXNlc3JjOiBhZGQgYWxsb2Mgdm1ldGhvZAorCSAgTWFrZSBhbiBhbGxvYyB2bWV0aG9kIHNvIHRoYXQgc3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgb3IgY2FsbCB0aGUgZGVmYXVsdAorCSAgaW1wbGVtZW50YXRpb24gd2hlbiB0aGV5IHdhbnQuCisKKzIwMTEtMDgtMDQgMTc6MjY6MzQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgZGVmczogdXBkYXRlIGRlZnMKKworMjAxMS0wOC0wNCAxNzoxMjo0NyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJICBiYXNlc3JjOiBjbGVhbnVwcyBhbmQgbWFyayByZWNvbmZpZ3VyZQorCSAgRG9uJ3QgYWJ1c2UgdGhlIHJlc3VsdCB2YXJpYWJsZS4KKwkgIE1hcmsgdGhlIHNyY3BhZCB3aXRoIGEgcmVjb25maWd1cmUgc28gdGhhdCBuZWdvdGlhdGlvbiBoYXBwZW5zLgorCisyMDExLTA4LTA0IDE3OjEyOjIxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkLmg6CisJICBwYWQ6IGFkZCBtZXRob2QgdG8gbWFyayByZWNvbmZpZ3VyZQorCisyMDExLTA4LTA0IDE2OjU2OjQyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIGJhc2VzcmM6IHJlbW92ZSBuZWdvdGlhdGlvbiBmcm9tIHRoZSBzdGF0ZSBjaGFuZ2UKKwkgIFJlbW92ZSB0aGUgbmVnb3RpYXRpb24gZnJvbSB0aGUgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uLCBpdCBjYXVzZXMgZGF0YSB0cmFuc2ZlcgorCSAgYW5kIGJ1ZmZlcnBvb2wgbmVnb3RpYXRpb24sIHdoaWNoIGlzIG5vdCBzdXBwb3NlZCB0byBiZSBkb25lLiBTaW5jZSB3ZSBoYXZlIHRoZQorCSAgcmVjb25maWd1cmUgc3RhdGUgb24gdGhlIHBhZCwgdGhlIGNyZWF0ZSBmdW5jdGlvbiB3aWxsIGRvIHRoZSBuZWdvdGlhdGlvbiBhcworCSAgc29vbiBhcyBpdCBnZXRzIGluIHRoZSBzdHJlYW1pbmcgdGhyZWFkLgorCisyMDExLTA4LTA0IDE2OjM0OjQ5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgorCSAgYmFzZXNyYzogZXhwb3NlIHNldF9jYXBzIG1ldGhvZAorCSAgRXhwb3NlIGEgcHJldmlvdXNseSBzdGF0aWMgbWV0aG9kIHNvIHRoYXQgY3VzdG9tIG5lZ290aWF0ZSBpbXBsZW1lbnRhdGlvbiBjYW4KKwkgIGNhbGwgaXQgYW5kIGRvIHRoZSByaWdodCB0aGluZy4KKworMjAxMS0wOC0wNCAxMzo0ODoxMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJICBiYXNlc3JjOiBQQVVTRUQ8LT5QTEFZIGRvZXNuJ3QgY2hhbmdlIHBvb2wgc3RhdGUKKwkgIERvbid0IGNoYW5nZSB0aGUgc3RhdGUgb2YgdGhlIGJ1ZmZlcnBvb2wgd2hlbiBnb2luZyBiZXR3ZWVuIFBBVVNFRCBhbmQgUExBWUlORywKKwkgIGl0IHdpbGwgZGVhbGxvYyBhbmQgcmVhbGxvYyBhbGwgYnVmZmVycywgd2hpY2ggaXMgY2xlYXJseSB0b28gaW52YXNpdmUuIFdlIHdpbGwKKwkgIG5lZWQgdG8gYWRkIHNvbWUgb3RoZXIgd2F5IG9mIHVuYmxvY2tpbmcgdGhlIGJ1ZmZlcnBvb2wuCisKKzIwMTEtMDgtMDQgMTE6MDA6NTcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXJwb29sLmM6CisJKiBnc3QvZ3N0bWVtb3J5LmM6CisJICBmaXggZGVmYXVsdCBhbGlnbm1lbnQKKwkgIEEgMCBhbGlnbm1lbnQgaXMgdGhlIGRlZmF1bHQuCisKKzIwMTEtMDgtMDQgMTA6NTQ6MjkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXJwb29sLmM6CisJKiBnc3QvZ3N0YnVmZmVycG9vbC5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBidWZmZXJwb29sOiBhZGQgZ3N0X2J1ZmZlcl9wb29sX2lzX2FjdGl2ZSgpCisKKzIwMTEtMDgtMDMgMTE6NTc6NTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6CisJICBiYWNrIHRvIGRldmVsb3BtZW50CisKKz09PSByZWxlYXNlIDAuMTEuMCA9PT0KKworMjAxMS0wOC0wMiAyMDo1NToyOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogQ2hhbmdlTG9nOgorCSogTkVXUzoKKwkqIFJFTEVBU0U6CisJKiBjb25maWd1cmUuYWM6CisJKiBnc3RyZWFtZXIuZG9hcDoKKwkqIHBvL2FmLnBvOgorCSogcG8vYXoucG86CisJKiBwby9iZS5wbzoKKwkqIHBvL2JnLnBvOgorCSogcG8vY2EucG86CisJKiBwby9jcy5wbzoKKwkqIHBvL2RhLnBvOgorCSogcG8vZGUucG86CisJKiBwby9lbC5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZXMucG86CisJKiBwby9ldS5wbzoKKwkqIHBvL2ZpLnBvOgorCSogcG8vZnIucG86CisJKiBwby9nbC5wbzoKKwkqIHBvL2h1LnBvOgorCSogcG8vaWQucG86CisJKiBwby9pdC5wbzoKKwkqIHBvL2phLnBvOgorCSogcG8vbHQucG86CisJKiBwby9uYi5wbzoKKwkqIHBvL25sLnBvOgorCSogcG8vcGwucG86CisJKiBwby9wdF9CUi5wbzoKKwkqIHBvL3JvLnBvOgorCSogcG8vcnUucG86CisJKiBwby9ydy5wbzoKKwkqIHBvL3NrLnBvOgorCSogcG8vc2wucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJKiBwby96aF9DTi5wbzoKKwkqIHBvL3poX1RXLnBvOgorCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgorCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jOgorCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5oOgorCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKKwkgIFJFTEVBU0UgMC4xMQorCisyMDExLTA4LTAzIDExOjA0OjEyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKKwkgIHBvcnRpbmctdG8tMC4xMTogQWRkIHNlY3Rpb24gYWJvdXQgR3N0SXRlcmF0b3IKKworMjAxMS0wOC0wMSAxODoxMjoxMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKKwkgIGJ1ZmZlcnBvb2w6IGRvbid0IGFkZCB0aGUgc2FtZSBvcHRpb24gdHdpY2UKKwkgIE1ha2Ugc3VyZSB0aGF0IHdlIG9ubHkgYWRkIGFuIG9wdGlvbiB0byB0aGUgYXJyYXkgb25jZS4KKworMjAxMS0wNy0zMCAxNDowNDo0MyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKKwkqIGdzdC9nc3RidWZmZXJwb29sLmg6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGJ1ZmZlcnBvb2w6IGFkZCBtZXRob2QgdG8gY2hlY2sgZm9yIGFuIG9wdGlvbgorCSAgQWRkIGEgbWV0aG9kIHRvIGNoZWNrIGlmIGFuIG9wdGlvbiBpcyBzdXBwb3J0ZWQgb24gdGhlIGJ1ZmZlcnBvb2wuCisKKzIwMTEtMDctMjkgMTc6MTA6MDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXJwb29sLmM6CisJKiBnc3QvZ3N0YnVmZmVycG9vbC5oOgorCSogZ3N0L2dzdHF1YXJrLmM6CisJKiBnc3QvZ3N0cXVhcmsuaDoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgYnVmZmVycG9vbDogYWRkIG9wdGlvbnMgQVBJIHRvIGJ1ZmZlcnBvb2wKKwkgIE1ha2UgaXQgcG9zc2libGUgdG8gcXVlcnkgdGhlIHN1cHBvcnRlZCBvcHRpb25zIG9mIGEgYnVmZmVycG9vbCBhbmQgZW5hYmxlCisJICBvcHRpb25zLiBUaGlzIGlzIGEgYml0IG1vcmUgZ2VuZXJpYyB0aGFuIHRoZSBBUEkgdG8gZW5hYmxlIG1ldGFkYXRhLiBUaGUgcHVycG9zZQorCSAgaXMgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byBhZGQgbmV3IGN1c3RvbSBjb25maWcgb3B0aW9ucyB0byB0aGUgY29uZmlndXJhdGlvbiBvZgorCSAgdGhlIGJ1ZmZlcnBvb2wgd2hlbiBzdXBwb3J0ZWQuCisKKzIwMTEtMDctMjggMTI6MTE6MzYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSogZ3N0L2dzdGVsZW1lbnQuaDoKKwkgIGVsZW1lbnQ6IGRvbid0IHVzZSBHX0NPTlNUX1JFVFVSTgorCSAgSXQncyBiZWVuIGRlcHJlY2F0ZWQgaW4gbmV3ZXIgR0xpYiB2ZXJzaW9ucworCisyMDExLTA3LTI4IDEyOjAxOjU4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtcG9zaXRpb24ueG1sOgorCSAgbWFudWFsOiB1cGRhdGUgZm9yIHBvc2l0aW9uL2R1cmF0aW9uIHF1ZXJ5IEFQSSBjaGFuZ2UKKworMjAxMS0wNy0yNyAwMDoyODo1MCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzaW5rLmM6CisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc2luay5jOgorCSogdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jOgorCSogdGVzdHMvZXhhbXBsZXMvc3RlcHBpbmcvZnJhbWVzdGVwMS5jOgorCSAgdGVzdHM6IHVwZGF0ZSBmb3IgcXVlcnkgQVBJIGNoYW5nZXMKKworMjAxMS0wNy0yNyAwMDoyODoxOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSAgcGx1Z2luczogdXBkYXRlIGZvciBxdWVyeSBBUEkgY2hhbmdlcworCisyMDExLTA3LTI3IDAwOjI2OjQzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgYmFzZTogdXBkYXRlIGZvciBxdWVyeSBBUEkgY2hhbmdlcworCisyMDExLTA3LTI3IDAwOjE3OjAyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKKwkqIGdzdC9nc3RxdWVyeS5jOgorCSogZ3N0L2dzdHV0aWxzLmM6CisJKiBnc3QvZ3N0dXRpbHMuaDoKKwkgIGdzdDogZml4IGF3a3dhcmQgZGVzdF9mb3JtYXQgaW5vdXQgcGFyYW1ldGVyIGluIHF1ZXJ5IHV0aWxpdHkgZnVuY3Rpb25zCisJICBUaGUgaWRlYSB3YXMgb3JpZ2luYWxseSB0aGF0IGlmIG9uZSBwYXNzZWQgJmRlc3RfZm10IHdpdGgKKwkgIGRlc3RfZm10PUdTVF9GT1JNQVRfREVGQVVMVCwgdGhlbiB0aGUgY29kZSBhbnN3ZXJpbmcgdGhlIHF1ZXJ5CisJICBjb3VsZCBjaGFuZ2UgZGVzdF9mbXQgdG8gdGhlIGFjdHVhbCBkZWZhdWx0IGZvcm1hdCB1c2VkLiBIb3dldmVyLAorCSAgaW4gbW9yZSB0aGFuIGhhbGYgYSBkZWNhZGUgb2YgR1N0cmVhbWVyIDAuMTAgbm8gcGllY2Ugb2YgY29kZSBpbgorCSAgR1N0cmVhbWVyIGhhcyBldmVyIHVzZWQgdGhhdCBmZWF0dXJlLCBub3IgYXJlIHRoZXJlIHRoYXQgbWFueQorCSAgdXNlcnMgb2YgdGhpcyBBUEkgdGhhdCBhY3R1YWxseSBjaGVjayB3aGV0aGVyIHRoZSBmb3JtYXQgcmV0dXJuZWQKKwkgIGlzIHRoZSBvcmlnaW5hbCBmb3JtYXQgcGFzc2VkIGJlZm9yZSB1c2luZyB0aGUgdmFsdWVzIHJldHVybmVkLgorCSAgQWxzbywgaXQncyBqdXN0IGFubm95aW5nLXRvLXVzZSBBUEkgaW4gaXRzIG93biByaWdodC4KKwkgIEZvciBhbGwgdGhlc2UgcmVhc29ucywgbWFrZSBpdCBzbyB0aGF0IHRoZSBkZXN0aW5hdGlvbiBmb3JtYXQgaXMKKwkgIHBhc3NlZCBkaXJlY3RseSBhbmQgY2FuJ3QgYmUgY2hhbmdlZCBieSB0aGUgZWxlbWVudCBxdWVyaWVkLgorCisyMDExLTA3LTI3IDEyOjUwOjM5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCisKKzIwMTEtMDctMjcgMTI6NDk6NDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYmFzZXRyYW5zZm9ybTogYWRkIG1vcmUgY29tbWVudHMKKworMjAxMS0wNy0yNyAxMjo0NToxNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBiYXNldHJhbnM6IGFsc28gcGFzcyBhbGxvY2F0aW9uIHF1ZXJ5IGluIGluX3BsYWNlCisJICBXaGVuIHdlIGFyZSBkb2luZyBhbiBpbl9wbGFjZSB0cmFuc2Zvcm0sIGRvbid0IGRvIHRoZSBhbGxvY2F0aW9uIHF1ZXJ5IGJ1dCBsZXQKKwkgIHRoZSB1cHN0cmVhbSBlbGVtZW50IGRlY2lkZS4KKworMjAxMS0wNy0yNiAyMjo0MTo1OSAtMDcwMCAgRXZhbiBOZW1lcnNvbiA8ZXZhbkBjb2V1cy1ncm91cC5jb20+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuYzoKKwkgIGJhc2U6IGFkZCBtaXNzaW5nIChvdXQpIGFubm90YXRpb24gZm9yIGJ5dGUgcmVhZGVyL3dyaXRlciBmdW5jdGlvbnMKKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTUzODEKKworMjAxMS0wNy0yNyAxMDowOToxMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgorCSAgZWxlbWVudGZhY3Rvcnk6IGZpeCBnLWkgYW5ub3RhdGlvbiBmb3IgX2NyZWF0ZSgpIGFuZCBfbWFrZSgpIHRvIGFsbG93IE5VTEwgb2JqZWN0IG5hbWVzCisKKzIwMTEtMDctMjYgMTg6NDg6MjAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogaW1wcm92ZSB0aGUgZ2V0Y2FwcyBmdW5jdGlvbgorCSAgUmVmYWN0b3IgY2FsbGluZyB0aGUgR0VUQ0FQUyBmdW5jdGlvbiBhbmQgY2hlY2tzLgorCSAgTW92ZSB0aGUgZmlsdGVyIGNvZGUgaW4gb25lIHBsYWNlLgorCSAgV2hlbiB1c2luZyBmaXhlZCBwYWQgY2FwcywgZ2V0IHRoZSBjdXJyZW50bHkgY29uZmlndXJlZCBjYXBzIGFuZCB0aGVuIGZhbGxiYWNrCisJICB0byB0aGUgR0VUQ0FQUyBmdW5jdGlvbi4gV2UgdXNlZCB0byBzaW1wbHkgaWdub3JlIHRoZSBHRVRDQVBTIGZ1bmN0aW9uLCB3aGljaAorCSAgcmVzdWx0ZWQgaW4gdHJhbnNmb3JtIGVsZW1lbnRzIHJldHVybmluZyB0aGUgdGVtcGxhdGUgY2FwcyBpbnN0ZWFkIG9mIGRvaW5nIHRoZQorCSAgY2FwcyB0cmFuc2Zvcm0uCisKKzIwMTEtMDctMjYgMTU6NDM6NTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogb25seSB1cGRhdGUgY2FwcyB3aGVuIGNoYW5nZWQKKwkgIE9ubHkgY2FsbCB0aGUgZXZlbnQgZnVuY3Rpb24gd2l0aCB0aGUgY2FwcyBldmVudCB3aGVuIHRoZSBjYXBzIGNoYW5nZWQuCisKKzIwMTEtMDctMjYgMTQ6Mzc6NTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgYmFzZXNyYzogYWRkIHNvbWUgbW9yZSBkZWJ1ZyBpbmZvCisKKzIwMTEtMDctMjYgMTI6MjE6MzggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKKwkgIGJhc2VzaW5rOiBtYWtlIGl0IGVhc3kgdG8gb3ZlcnJpZGUgdGhlIHBhZCBxdWVyeQorCSAgQWRkIGEgdm1ldGhvZCB0byBoYW5kbGUgdGhlIHBhZCBxdWVyeS4KKwkgIEluc3RhbGwgYSBkZWZhdWx0IGhhbmRsZXIgZm9yIHRoZSBwYWQgcXVlcnkuCisJICBBZGQgYSB2bWV0aG9kIHRvIHNldHVwIHRoZSBhbGxvY2F0aW9uIHByb3BlcnRpZXMuCisJICBVc2UgdGhlIG5ldyBxdWVyeSBmdW5jdGlvbiBpbiBmaWxlc2luaworCisyMDExLTA3LTI2IDEyOjIwOjU1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkgIGJhc2VzcmM6IGltcHJvdmUgZG9jcworCisyMDExLTA3LTI2IDEyOjIwOjA0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IGFkZCBhbGxvY2F0aW9uIHF1ZXJ5IGp1c3QgYmVjYXVzZQorCisyMDExLTA3LTI1IDE1OjIxOjIxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cG9sbC5jOgorCSAgcG9sbDogaW1wcm92ZSBkZWJ1Z2dpbmcKKworMjAxMS0wNy0yNSAxMjo1MzoxMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKKwkqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6CisJICBtaW5pb2JqZWN0OiBhdm9pZCByYWNlIGluIGJ1ZmZlcnBvb2wgcmVsZWFzZQorCSAgQXZvaWQgcGxheWluZyB3aXRoIHRoZSByZWZjb3VudCB0byBkZWNpZGUgd2hlbiBhIGJ1ZmZlciBoYXMgYmVlbiByZWN5Y2xlZCBieSB0aGUKKwkgIGRpc3Bvc2UgZnVuY3Rpb24uIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2UgdGhlbiB0ZW1wb3JhcmlseSBjYW4gaGF2ZSBhIGJ1ZmZlciB3aXRoCisJICBhIHJlZmNvdW50ID4gMSBiZWluZyBhY3F1aXJlZCBmcm9tIHRoZSBwb29sLCB3aGljaCBpcyBub3Qgd3JpdGFibGUuIEluc3RlYWQgdXNlCisJICBhIHNpbXBsZSBib29sZWFuIHJldHVybiB2YWx1ZSBmcm9tIHRoZSBkaXNwb3NlIGZ1bmN0aW9uIHRvIGluZm9ybSB0aGUgY2FsbGVkCisJICB0aGF0IHRoZSBvYmplY3Qgd2FzIHJlY3ljbGVkIG9yIG5vdC4KKworMjAxMS0wNy0yNSAxMjo0OToyNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJICBiYXNlc3JjOiB1c2UgREVCVUcgaW5zdGVhZCBvZiBFUlJPUiBmb3IgbG9nZ2luZworCSAgRG9uJ3QgdXNlIHRoZSBFUlJPUiBsb2cgY2F0ZWdvcnkgYmVjYXVzZSB0aGUgYWxsb2NhdGlvbiBmYWlsdXJlIG1pZ2ggb25seSBiZQorCSAgYmFjYXVzZSBvZiBhIHN0YXRlIGNoYW5nZS4KKworMjAxMS0wNy0yNSAxMjoxNDoxNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKKwkgIGJ1ZmZlcnBvb2w6IHN0YXJ0IHdpdGggcmFpc2VkIGNvbnRyb2wgc29ja2V0CisJICBJbiB0aGUgaW5hY3RpdmUgc3RhdGUsIHRoZSBjb250cm9sIHNvY2tldCBzaG91bGQgYmUgaW4gdGhlIHJhaXNlZCBzdGF0ZSwgd2Ugd2lsbAorCSAgcmVsZWFzZSBpdCB3aGVuIHdlIHN0YXJ0LgorCisyMDExLTA3LTI0IDExOjI0OjQ0ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGRvY3MvcHdnL2FkdmFuY2VkLWNsb2NrLnhtbDoKKwkqIGRvY3MvcHdnL2J1aWxkaW5nLWNoYWluZm4ueG1sOgorCSAgcHdkOiBkaXNjb250aW5vdXMgZXZlbnQgLT4gbmV3c2VnbWVudCBldmVudAorCSAgRml4IGEgMC44IGxlZnRvdmVyIGFzIG1lbnRpb25lZCBvbiBidWcgIzYyMTEyMS4KKworMjAxMS0wNy0yNCAwOTowNToyMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKKwkgIHRhbGsgYWJvdXQgdGhlIGJhc2V0cmFuc2Zvcm0gc2lua19ldmVudCB2bWV0aG9kCisKKzIwMTEtMDctMjMgMDg6MDA6MDkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXJwcml2YXRlLmg6CisJICBjb250cm9sbGVyOiBmaXggYnVpbGQgZmFpbHVyZSBkdWUgdG8gY29tcGlsZXIgd2FybmluZworCSAgUHJlc3VtYWJseSB3aXRoIG5ld2VyIEdMaWIgdmVyc2lvbi4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTUxNTUKKworMjAxMS0wNy0yMiAyMToxNzo0MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKKwkgIGJhc2V0cmFuc2Zvcm06IGZpeCBzaW5rIGV2ZW50IGhhbmRsaW5nCisJICBJbXBsZW1lbnQgdGhlIHNpbmsgZXZlbnQgaGFuZGxpbmcgbGlrZSB0aGUgc3JjIGV2ZW50IGhhbmRsZXIuIE1ha2UgdGhlIGRlZmF1bHQKKwkgIGltcGxlbWVudGF0aW9uIHBhcnNlIGFuZCBmb3J3YXJkIHRoZSBldmVudC4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBhY3R1YWxseQorCSAgcmV0dXJuIGFuIGVycm9yIHZhbHVlIGZyb20gdGhlIGV2ZW50IGhhbmRsZXIuCisKKzIwMTEtMDctMjIgMTk6MTk6NTkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYmFzZXRyYW5zZm9ybTogaGFuZGxlIGZhaWx1cmVzCisJICBIYW5kbGUgZmFpbHVyZSB0byBhY3RpdmF0ZSB0aGUgYnVmZmVycG9vbC4KKworMjAxMS0wNy0yMiAxOToxMTo1NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBiYXNldHJhbnM6IGltcHJvdmUgZGVidWdnaW5nLgorCisyMDExLTA3LTIxIDE4OjUwOjI1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgorCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuaDoKKwkgIGJ1ZmZlcnBvb2w6IGFkZCByZXNldF9idWZmZXIgdm1ldGhvZAorCSAgQWRkIGEgdm1ldGhvZCB0byByZXNldCBhIGJ1ZmZlciB0byBpdHMgb3JpZ2luYWwgc3RhdGUuIEFkZCBhIGRlZmF1bHQKKwkgIGltcGxlbWVudGF0aW9uIHRoYXQgcmVzZXRzIHRoZSBmbGFncywgdGltZXN0YW1wcyBhbmQgb2Zmc2V0cy4KKwkgIEFkZCBzb21lIG1vcmUgZG9jcy4KKworMjAxMS0wNy0yMSAxNzo0MjowOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgorCSAgYmFzZXRyYW5zOiBSZW1vdmUgcmVmIGluIHBhc3N0aHJvdWdoCisJICBSZW1vdmUgdGhlIHJlcXVpcmVtZW50IHRvIGhhdmUgdG8gcmV0dXJuIGEgcmVmIHRvIHRoZSBpbnB1dCBidWZmZXIgd2hlbiBpbgorCSAgcGFzc3Rocm91Z2ggbW9kZS4gVGhpcyBzYXZlcyBhIGZldyByZWYvdW5yZWYgY3ljbGVzIGFuZCBmaXhlcyBhbm90aGVyIDAuMTEKKwkgIEZJWE1FLgorCisyMDExLTA3LTIxIDE3OjI5OjEzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgorCSAgYmFzZXRyYW5zZm9ybTogbWFrZSBuZXcgIGNvcHlfbWV0YWRhdGEgdm1ldGhvZAorCSAgTWFrZSBhIG5ldyBjb3B5X21ldGFkYXRhIHZtZXRob2QgYW5kIG1vdmUgdGhlIGNvZGUgdG8gY29weSB0aGUgdGltZXN0YW1wcywgZmxhZ3MKKwkgIGFuZCBvZmZzZXRzIGludG8gYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLiBUaGlzIHdpbGwgYWxsb3cgdXMgdG8gZ2l2ZSB0aGUKKwkgIHN1YmNsYXNzZXMgYSBjaGFuY2UgdG8gb3ZlcnJpZGUgdGhlIGNvcHkgbWV0aG9kLgorCisyMDExLTA3LTIxIDE2OjQ5OjEzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCisJICBDb25mbGljdHM6CisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmMKKworMjAxMS0wNy0yMSAxNjozOTowNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBiYXNldHJhbnM6IGF2b2lkIGludGVybWVkaWF0ZSBtZXRob2QKKwkgIFNpbXBseSBjYWxsIHRoZSBwcmVwYXJlX291dHB1dF9idWZmZXIgbWV0aG9kIGluc3RlYWQgb2YgY2FsbGluZyBhbiBpbnRlcm1lZGlhdGUKKwkgIGZ1bmN0aW9uLgorCisyMDExLTA3LTIxIDE2OjMwOjA3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIGJhc2V0cmFuc2Zvcm06IG1vdmUgdGhlIG1ldGFkYXRhIGNvcHkgY29kZQorCSAgTW92ZSB0aGUgbWV0YWRhdGEgY29weSBjb2RlIHRvIHRoZSBkZWZhdWx0IHByZXBhcmVfb3V0cHV0X2J1ZmZlciBpbXBsZW1lbnRhdGlvbi4KKworMjAxMS0wNy0yMSAxNTo0OTowMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBiYXNldHJhbnNmb3JtOiBtb3ZlIHByZXBhcmVfb3V0cHV0X2J1ZmZlciBjb2RlCisJICBNb3ZlIHRoZSBjb2RlIGZvciBwcmVwYXJlX291dHB1dF9idWZmZXIgdG8gYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLiB0aGlzIGFsbG93cworCSAgdXMgdG8gc2ltcGxpZnkgc29tZSB0aGluZ3MgYW5kIGhhdmUgc3ViY2xhc3NlcyBjYWxsIGludG8gdGhlIGRlZmF1bHQKKwkgIGltcGxlbWVudGF0aW9uIHdoZW4gbmVlZGVkLgorCisyMDExLTA3LTIxIDE1OjQ4OjI1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIGJhc2V0cmFuc2Zvcm06IG9ubHkgZ2V0IHNpemUgZm9yIGRlYnVnCisKKzIwMTEtMDctMjEgMTQ6MTg6MzAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYmFzZXRyYW5zOiBmaXggY29tbWVudCBhbmQgd2FybgorCSAgRW1pdCBhIHdhcm5pbmcgaW4gdGhlIGRlYnVnIGxvZyB3aGVuIHNvbWV0aGluZyBzZWVtcyB3ZWlyZC4KKworMjAxMS0wNy0yMSAxNDoxNDo1OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBiYXNldHJhbnNmb3JtOiBvbmx5IGdldCBjYXBzIGZvciBzaXplIHRyYW5zZm9ybQorCSAgRGVsYXkgZ2V0dGluZyB0aGUgY2FwcyB1bnRpbCB3ZSBuZWVkIHRvIGNhbGwgdGhlIHRyYW5zZm9ybV9zaXplIGZ1bmN0aW9uLgorCisyMDExLTA3LTIxIDEzOjU2OjExICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6CisJICBiYXNldHJhbnM6IHJlbW92ZSB1c2VsZXNzIHZhcmlhYmxlcyBmcm9tIHByZXBhcmVfb3V0cHV0X2J1ZmZlcgorCSAgUmVtb3ZlIHRoZSBjYXBzIGFuZCBzaXplIGZyb20gdGhlIHByZXBhcmVfb3V0cHV0X2J1ZmZlciBmdW5jdGlvbi4gd2l0aAorCSAgYnVmZmVycG9vbHMgYW5kIGNhcHNuZWdvIGRvbmUgZGlmZmVyZW50bHksIHdlIGRvbid0IG5lZWQgdGhpcyBpbiBtb3N0IGNhc2VzIGFuZAorCSAgaWYgd2UgZG8sIHdlIGNhbiBzaW1wbHkgdXNlIHRoZSB0cmFuc2Zvcm1fc2l6ZSBmdW5jdGlvbiBhbmQgZ2V0IHRoZSBjYXBzIGZyb20KKwkgIHRoZSBzcmNwYWQuCisKKzIwMTEtMDctMTggMTc6MjI6NDEgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtY2xvY2tzLnhtbDoKKwkgIGRvY3M6IGNsYXJpZnkgY2xvY2tzIGRvY3MgaW4gbWFudWFsCisJICBBZnRlciBhIHF1ZXN0aW9uIG9uIHRoZSBtYWlsaW5nIGxpc3QsIG1lbnRpb24gdGhhdCAqZmx1c2hpbmcqIHNlZWtzIHJlc2V0IHRoZQorCSAgcnVubmluZyB0aW1lLgorCisyMDExLTA3LTE2IDIyOjAwOjE1ICswMzAwICBSYWx1Y2EgRWxlbmEgUG9kaXVjIDxyYWx1Y2FlbGVuYTE5ODVAZ21haWwuY29tPgorCisJKiBnc3QvZ3N0ZXZlbnQuYzoKKwkqIGdzdC9nc3RtZXNzYWdlLmM6CisJICBkb2NzOiByZW1vdmVkIGRvdWJsZSBuZWdhdGlvbiBpbiBldmVudC9tZXNzYWdlIHNlcSBudW0gZGVzY3JpcHRpb24KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTQ3NTEKKworMjAxMS0wNy0xNiAxMjoyMToxMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzcmMuYzoKKwkgIHRlc3RzOiBtYWtlIHN1cmUgbm9uLUFTQ0lJIGNoYXJzIGluIGZpbGVuYW1lcyBhcmUgZXNjYXBlZCB3aGVuIGNyZWF0aW5nIFVSSXMgZnJvbSB0aGVtCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU0NjczCisKKzIwMTEtMDctMTUgMTY6MDQ6MTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgYmFzZXNyYzogZG9uJ3QgYWNjaWRlbnRhbGx5IGRpc2FibGUgdGhlIHBvb2wKKwkgIFdoZW4gd2Ugc2V0IGEgcG9vbCBhbmQgaXQgaXMgdGhlIHNhbWUgYXMgdGhlIG9sZCBwb29sLCBkb24ndCBkaXNhYmxlIHRoZSBwb29sLgorCisyMDExLTA3LTE1IDEzOjI3OjEzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgorCSAgYnVmZmVycG9vbDogY2FsbCByZWxlYXNlX2J1ZmZlciBhZnRlciBhbGxvYworCSAgQWZ0ZXIgd2UgYWxsb2NhdGVkIGEgbmV3IGJ1ZmZlciwgY2FsbCB0aGUgcmVsZWFzZV9idWZmZXIgdm1ldGhvZCB0byBwdXQgdGhlIG5ldworCSAgYnVmZmVyIGluIHRoZSBwb29sIGluc3RlYWQgb2YgYXNzdW1pbmcgdGhhdCB0aGUgcG9vbCB1c2VzIHRoZSBkZWZhdWx0CisJICByZWxlYXNlX21ldGhvZCBpbXBsZW1lbnRhdGlvbi4KKworMjAxMS0wNy0xNSAxMTo1MjoyMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKKwkqIGdzdC9nc3RidWZmZXJwb29sLmg6CisJICBidWZmZXJwb29sOiBhZGQgbWFjcm8gdG8gY2hlY2sgZm9yIGZsdXNoaW5nCisKKzIwMTEtMDctMTUgMTE6NTE6NTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkgIGJ1ZmZlcjogaW1wcm92ZSBkZWJ1ZyBtZXNzYWdlCisKKzIwMTEtMDctMTQgMTI6NDU6MzMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBmaXggcHJpbnRmIGZvcm1hdCBpbiBkZWJ1ZyBtZXNzYWdlCisKKzIwMTEtMDctMTMgMTE6Mzk6MTUgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBiYXNlc2luazogdW5zZXQgUExBWUlORyB0cmFuc2l0aW9uIGZsYWcgd2hlbiB0cmFuc2l0aW9uIGNvbXBsZXRlZAorCisyMDExLTA3LTEyIDE0OjA3OjU3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJICBidWZmZXI6IGZpeCByZXNpemUgZnVuY3Rpb24gc29tZSBtb3JlCisJICBEb24ndCByZW1vdmUgbWVtb3J5IGJsb2NrcyBmcm9tIHRoZSBidWZmZXIgd2hlbiB3ZSBjbGlwIGFuZCByZXNpemUsIGluc3RlYWQgc2V0CisJICB0aGUgbWVtb3J5IG9mZnNldCBhbmQgc2l6ZSB0byAwLiBUaGlzIGFsbG93cyB1cyB0byBtYWtlIHRoZSBidWZmZXIgbGFyZ2VyIGFnYWluCisJICBsYXRlci4KKworMjAxMS0wNy0xMiAxMzo0MDozNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOgorCSAgYnVmZmVyOiBpbXByb3ZlIHNpemUgaGFuZGxpbmcKKwkgIEFsc28gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG11bHRpcGxlIGVtcHR5IG1lbW9yeSBibG9ja3MgYXJlIGluIHRoZSBidWZmZXIuCisJICBBZGQgdW5pdCB0ZXN0IGZvciB0aGlzLgorCisyMDExLTA3LTEyIDEyOjAwOjU4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6CisJICBidWZmZXI6IGZpeCBfcmVzaXplIHNvbWUgbW9yZQorCSAgQWRkIG1vcmUgZGVidWcuCisJICBBbG93IHJlc2l6ZSB0byAwIGJ5dGVzLgorCSAgRG8gY2xpcHBpbmcgY29ycmVjdGx5LgorCSAgQWRkIG1vcmUgdW5pdCB0ZXN0cy4gQWxzbyBhZGQgYSBmYWlsaW5nIHRlc3Q6IHdoZW4gd2UgcmVzaXplIHRvIDAgYW5kIHRoZW4KKwkgIHRyeSB0byByZXNpemUgYmFjayB0byB0aGUgb3JpZ2luYWwgc2l6ZSBpdCBmYWlscyBiZWNhdXNlIHRoZSBtZW1vcnkgd2FzCisJICByZW1vdmVkLgorCisyMDExLTA3LTExIDE4OjAwOjUyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBnc3QvZ3N0bWVtb3J5LmM6CisJKiBnc3QvZ3N0bWVtb3J5Lmg6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6CisJICBidWZmZXI6IGZpeCBuZWdhdGl2ZSBvZmZzZXRzIHNvbWUgbW9yZQorCSAgQWxsb3cgZm9yIG5lZ2F0aXZlIG9mZnNldHMgd2hlbiBkb2luZyBtZW1vcnkgY29weSBhbmQgc2hhcmUuCisJICBBZGQgZmFzdCBwYXRoIGluIHRoZSBfZ2V0X3NpemVzKCkgZnVuY3Rpb24uCisJICBGaXggcmVzaXplIGZvciBuZWdhdGl2ZSBvZmZzZXQgYW5kIGV4cGFuZGluZyB0aGUgYnVmZmVyLgorCSAgQWRkIHNvbWUgdW5pdCB0ZXN0cy4KKworMjAxMS0wNy0xMSAxNjo0MzozMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBkZWZzOiBhZGQgZGVmcyBmb3IgbmV3IG1ldGhvZHMKKworMjAxMS0wNy0xMSAxNjo0Mjo1NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSAgYnVmZmVyOiBmaXggX3Jlc2l6ZSBiZXR0ZXIKKworMjAxMS0wNy0xMSAxNjoxNzo1NyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSogZ3N0L2dzdGJ1ZmZlci5oOgorCSogZ3N0L2dzdG1lbW9yeS5jOgorCSogZ3N0L2dzdG1lbW9yeS5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBidWZmZXI6IGFkZCBhcGkgdG8gZ2V0IHRoZSBjdXJyZW50IG1lbW9yeSBvZmZzZXQKKwkgIEFsc28gcmV0dXJuIHRoZSBvZmZzZXQgaW4gYSBHc3RNZW1vcnkgYmxvY2sgd2l0aCB0aGUgZ2V0X3NpemVzKCkgbWV0aG9kLiBUaGlzCisJICBhbGxvd3MgdXMgdG8gZmlndXJlIG91dCBob3cgbXVjaCBwcmVmaXggdGhlcmUgaXMgdW51c2VkLgorCSAgQ2hhbmdlIHRoZSByZXNpemUgZnVuY3Rpb24gc28gdGhhdCBhIG5lZ2F0aXZlIG9mZnNldCBjYW4gYmUgZ2l2ZW4uIFRoaXMgd291bGQKKwkgIG1ha2UgaXQgcG9zc2libGUgdG8gcmVzaXplIHRoZSBidWZmZXIgc28gdGhhdCB0aGUgcHJlZml4IGJlY29tZXMgYXZhaWxhYmxlLgorCSAgQWRkIGdzdF9idWZmZXJfZ2V0X3NpemVzKCkgdG8gcmV0dXJuIHRoZSBvZmZzZXQgYW5kIG1heHNpemUgYXMgd2VsbCBhcyB0aGUgc2l6ZS4KKwkgIEFsc28gY2hhbmdlIHRoZSBidWZmZXIgcmVzaXplIG1ldGhvZCBzbyB0aGF0IHdlIGNhbiBzcGVjaWZ5IGEgbmVnYXRpdmUgb2Zmc2V0CisJICB0byByZW1vdmUgcHJlZml4IGJ5dGVzLgorCisyMDExLTA3LTExIDE0OjQwOjA3ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSogZ3N0L2dzdGJ1ZmZlci5oOgorCSAgYnVmZmVyOiBhZGQgc29tZSBtZW1vcnkgd3JhcHBlZCBidWZmZXIgYWxsb2NhdGlvbiBoZWxwZXJzCisKKzIwMTEtMDctMTEgMTI6MTE6MTMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6CisJICBtaW5pb2JqZWN0OiBjbGVhbnVwIGhlYWRlcnMKKworMjAxMS0wNy0xMSAxMTo0MDowOCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IGVhdCBpbmNvbWluZyBjYXBzIGV2ZW50CisJICAuLi4gYXMgaXQgaXMgdHlwaWNhbGx5IHVwIHRvIGJhc2VjbGFzcyB0byBzZXQgcHJvcGVyIHNyYyBjYXBzLgorCisyMDExLTA3LTExIDExOjM3OjI4ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiBhdm9pZCBpbmFkdmVydGVudGx5IGRyb3BwaW5nIGFuIGV2ZW50CisJICAuLi4gcGFydGljdWxhcmx5IGEgbm9uLXN0aWNreSBzZXJpYWxpemVkIGV2ZW50IHRoYXQgaGFwcGVucyB0byBwYXNzCisJICB3aGVuIGFuIGV2ZW50IHVwZGF0ZSBpcyBwZW5kaW5nLgorCisyMDExLTA3LTA0IDEyOjU4OjU0ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgYmFzZXNpbms6IHRyeSBoYXJkZXIgdG8gYXJyYW5nZSBpbmNyZWFzaW5nIHBvc2l0aW9uIHJlcG9ydGluZworCSAgLi4uIHJhdGhlciB0aGFuIGhhdmluZyBhIG1vbWVudGFyeSBkZWNyZWFzaW5nIG9uZSB3aGlsZSB0cmFuc2l0aW9uaW5nCisJICB0byBQTEFZSU5HLgorCSAgRml4ZXMgIzYyODAyMS4KKworMjAxMS0wNy0wOCAxNjowNzoxMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgd2luMzI6IGFkZCBuZXcgQVBJIHRvIC5kZWYgZmlsZQorCisyMDExLTA3LTA2IDE1OjEzOjMwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSogZ3N0L2dzdGJ1ZmZlci5oOgorCSAgYnVmZmVyOiBtYWtlIGlkeCBhcmd1bWVudCB0byBnc3RfYnVmZmVyX3Rha2VfbWVtb3J5KCkgc2lnbmVkCisJICBTaW5jZSAtMSBpcyBhY2NlcHRhYmxlLCBpdCBzaG91bGQgYmUgc2lnbmVkLgorCisyMDExLTA3LTA3IDE0OjU3OjE4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogZml4IGludmFsaWQgbWVtb3J5IGFjY2VzcyBpbiBkZWJ1ZyBtZXNzYWdlcworCSAgRG9uJ3QgdXNlIGJ1ZmZlcnMgdGhhdCB3ZSd2ZSBnaXZlbiBhd2F5IG9yIHVucmVmZWQgaW4gZGVidWcgbWVzc2FnZXMuCisKKzIwMTEtMDctMDcgMTE6MTQ6MzQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgYmFzZXNyYzogZml4IGFmdGVyIG1lcmdlCisKKzIwMTEtMDctMDcgMTE6MTM6MTkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKKwkgIENvbmZsaWN0czoKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jCisKKzIwMTEtMDctMDYgMTY6MDg6NTYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkqIGdzdC9nc3RidWZmZXIuaDoKKwkgIGJ1ZmZlcjogYWRkIG1lbXNldCBmdW5jdGlvbgorCisyMDExLTA3LTA2IDEyOjA5OjI4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSAgYnVmZmVyOiBmaXggZ3VhcmRzIGZvciBnc3RfYnVmZmVyX3Rha2VfbWVtb3J5KCkKKwkgIFNpbmNlIGlkeCA9IC0xIG1ha2VzIGl0IGRlZmF1bHQgdG8gaWR4PWxlbiwgbGVuIGlzIGFsc28KKwkgIGEgdmFsaWQgaW5wdXQgaWR4LgorCisyMDExLTA3LTA1IDE2OjM4OjA2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0LmM6CisJICBnc3Q6IGFkZCBjbGFzcyByZWYvdW5yZWYKKworMjAxMS0wNy0wNSAxNjozMjo0NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svbGlicy90cmFuc2Zvcm0xLmM6CisJICB0ZXN0OiBkaXNhYmxlIGZhaWxpbmcgdW5pdCB0ZXN0cworCSAgRGlzYWJsZSB1bml0IHRlc3RzIHRoYXQgYXJlIGZhaWxpbmcgdW50aWwgc29tZW9uZSBwb3J0cyB0aGlzIHRvIDAuMTEKKworMjAxMS0wNy0wNSAxNjoyMDowMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcXVldWUuYzoKKwkgIHF1ZXVlOiBmaXggdW5pdCB0ZXN0CisJICBTZXQgdGhlIHJpZ2h0IHBvc2l0aW9uIG1lbWJlciBpbiB0aGUgc2VnbWVudCBldmVudC4KKwkgIEFkZCBzb21lIGRlYnVnIHRvIHF1ZXVlLgorCisyMDExLTA3LTA1IDAwOjEwOjI2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogY29uZmlndXJlLmFjOgorCSogZ3N0L01ha2VmaWxlLmFtOgorCSogZ3N0L2dzdC5oOgorCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbToKKwkgIGdzdDogbWFrZSBjb21waWxlciB3YXJuIGFib3V0IHVuc3RhYmxlIEFQSSBpZiBHU1RfVVNFX1VOU1RBQkxFX0FQSSBpcyBub3QgZGVmaW5lZAorCSAgQW5kIGRlZmluZSBpdCBpbiBvdXIgb3duIGJ1aWxkLgorCisyMDExLTA3LTA1IDAwOjEyOjEzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICB3aW4zMjogdXBkYXRlIC5kZWYgZmlsZXMgZm9yIGxhdGVzdCBBUEkgY2hhbmdlcy9hZGRpdGlvbnMKKworMjAxMS0wNi0zMCAxNzozOTozNyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgYmFzZXNyYzogZG8gbm90IHNuZWFraWx5IG1lc3Mgd2l0aCBjdXJyZW50IG9mZnNldCB3aGVuIHVwZGF0aW5nIGxlbmd0aAorCisyMDExLTA2LTI4IDIyOjE4OjQ2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJICBiYXNlc3JjOiB1bnJlZiBhbGxvY2F0aW9uIHF1ZXJ5IHdoZW4gbm8gbG9uZ2VyIG5lZWRlZAorCisyMDExLTA2LTI4IDE5OjAxOjU3ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6CisJICBpbnB1dHNlbGVjdG9yOiBhdm9pZCBpdGVyYXRpbmcgb3ZlciBhIHNpbmdsZSBOVUxMIHBhZAorCisyMDExLTA2LTIwIDIzOjI4OjA3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXMuaW46CisJKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgorCSogZ3N0L01ha2VmaWxlLmFtOgorCSogZ3N0L2dzdC5oOgorCSogZ3N0L2dzdGludGVyZmFjZS5jOgorCSogZ3N0L2dzdGludGVyZmFjZS5oOgorCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9jaGVjay9nc3QvLmdpdGlnbm9yZToKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RpbnRlcmZhY2UuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfYXJtLmg6CisJKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X2hwcGEuaDoKKwkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfaTM4Ni5oOgorCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9wcGMzMi5oOgorCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9wcGM2NC5oOgorCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9zcGFyYy5oOgorCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF94ODZfNjQuaDoKKwkgIFJlbW92ZSBHc3RJbXBsZW1lbnRzSW50ZXJmYWNlCisJICBJdCB3YXMgYSBiaXQgdG9vIGNsZXZlciwgYW5kIGRpZG4ndCByZWFsbHkgd29yayBhcyBhbiBBUEksCisJICBjb25mdXNpbmcgcGVvcGxlIHRvIG5vIGVuZC4gQmV0dGVyIGltcGxlbWVudCBzcGVjaWZpYyBtZXRob2RzCisJICB3aGV0aGVyIGFuIGludGVyZmFjZSBpcyB1c2FibGUvYXZhaWxhYmxlL3JlYWR5IG9uIHRoZSBpbnRlcmZhY2UKKwkgIGl0c2VsZiwgb3IgZXZlbiBhZGQgR0Vycm9yIGFyZ3VtZW50cywgcmF0aGVyIHRoYW4gdHJ5IHRvIGhhdmUKKwkgIHBlci1pbnN0YW5jZSBpbnRlcmZhY2VzLgorCisyMDExLTA2LTI1IDEzOjUxOjUyIC0wNzAwICBFbW1hbnVlbCBQYWNhdWQgPGVtbWFudWVsLnBhY2F1ZEBsYXBwLmluMnAzLmZyPgorCisJKiBnc3QvZ3N0dGFzay5jOgorCSAgdGFzazogQ2hlY2sgZm9yIFBSX1NFVF9OQU1FIGJlZm9yZSB1c2luZworCSAgRml4ZXM6ICM2NTMxNzIuCisJICBTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworMjAxMS0wNi0yMyAxMToyNzo1MiAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSA2OWI5ODFmIHRvIDYwNWNkOWEKKworMjAxMS0wNi0yMyAxODowMzoyMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHF1ZXJ5LmM6CisJKiBnc3QvZ3N0cXVlcnkuaDoKKwkgIHF1ZXJ5OiBhZGQgbWV0aG9kIHRvIGNoZWNrIGZvciBtZXRhZGF0YQorCSAgQWRkIGEgbWV0aG9kIHRvIGNoZWNrIGlmIGEgY2VydGFpbiBtZXRhZGF0YSBpcyBzdXBwb3J0ZWQgaW4gdGhlIEFMTE9DQVRJT04KKwkgIHF1ZXJ5LgorCisyMDExLTA2LTIyIDE4OjA3OjE4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2Rlc2lnbi9wYXJ0LW1ldGEudHh0OgorCSAgZG9jczogdXBkYXRlIGRlc2lnbiBkb2NzIGEgbGl0dGxlCisJICBVcGRhdGUgdGhlIGRlc2lnbiBkb2Mgd2l0aCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgdmlkZW9tZXRhZGF0YS4KKworMjAxMS0wNi0yMiAxNzoxMjozNCArMDIwMCAgS29vcCBNYXN0IDxrd20gYXQgRnJlZUJTRC5vcmc+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6CisJICB0ZWU6IHVzZSAmIGluc3RlYWQgb2YgJiYgZm9yIG1hc2tpbmcgYml0cworCSAgU2VlICM2NTMxMzcKKworMjAxMS0wNi0yMiAxNzowOTo1MiArMDIwMCAgS29vcCBNYXN0IDxrd20gYXQgRnJlZUJTRC5vcmc+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYmFzZXRyYW5zZm9ybTogcmVtb3ZlIHJlZHVuZGFudCAoKQorCSAgU2VlICM2NTMxMzcKKworMjAxMS0wNi0yMiAxNzowNToyNyArMDIwMCAgS29vcCBNYXN0IDxrd20gYXQgRnJlZUJTRC5vcmc+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IGZpeCBzZWVrc3RvcAorCSAgU2VlICM2NTMxMzcKKworMjAxMS0wNi0yMiAxNjo1ODo1MyArMDIwMCAgS29vcCBNYXN0IDxrd20gYXQgRnJlZUJTRC5vcmc+CisKKwkqIGdzdC9nc3RzZWdtZW50LmM6CisJICBzZWdtZW50OiBjYXN0IHRvIHJpZ2h0IHR5cGUKKwkgIFNlZSAjNjUzMTM3CisKKzIwMTEtMDYtMjIgMTY6Mzg6MDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgorCSogZ3N0L2dzdHVyaS5jOgorCSogZ3N0L2dzdHVyaS5oOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgorCSAgdXJpOiByZW1vdmUgc29tZSBfZnVsbCB2YXJpYW50cworCisyMDExLTA2LTIyIDE2OjE2OjU2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0bWVzc2FnZS5jOgorCSogZ3N0L2dzdG1lc3NhZ2UuaDoKKwkqIGdzdC9nc3R1dGlscy5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgdGFnczogUmVtb3ZlIGNyYXp5IHRhZyBtZXNzYWdlcworCSAgRG9uJ3QgbWl4IG1lc3NhZ2VzIGFuZCBwYWRzIGFuZCB0YWdzLgorCSAgTWFrZSB0aGUgc2luayBwb3N0IHRhZyBtZXNzYWdlcyB3aGVuIGEgdGFnIGV2ZW50IGlzIHJlY2VpdmVkLgorCSAgU2luY2UgdGFncyBhcmUgc3RpY2t5IG9uIHBhZHMgbm93LCB0aGV5IGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGVyZQorCSAgd2hlbiBuZWVkZWQuCisKKzIwMTEtMDYtMjIgMTI6Mjg6MTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RjYXBzLmM6CisJKiBnc3QvZ3N0Y2Fwcy5oOgorCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6CisJICBjYXBzOiBIaWRlIGltcGxlbWVudGF0aW9uIGRldGFpbHMKKwkgIE1ha2UgdGhlIEFycmF5IG9mIHN0cnVjdHVyZXMgcHJpdmF0ZS4gVGhpcyBzaG91bGQgYWxsb3cgdXMgdG8gaW1wbGVtZW50CisJICB0aGUgYXJyYXkgbW9yZSBlZmZpY2llbnRseSBvciB3aXRoIHNvbWUgcHJlYWxsb2NhdGVkIHN0cnVjdHVyZXMgd2hlbgorCSAgd2Ugd2FudCB0byBsYXRlci4KKwkgIEFkZCBhIG5ldyBtZXRob2QgdG8gY2xlYW4gdXAgYSBzdGF0aWMgc3RydWN0dXJlIHNvIHRoYXQgd2UgY2FuIHJlbW92ZSBzb21lIGNvZGUKKwkgIHRoYXQgcG9rZXMgaW50byB0aGUgcHJpdmF0ZSBiaXRzIG9mIHRoZSBjYXBzLgorCisyMDExLTA2LTIyIDEyOjI2OjE5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2Rlc2lnbi9wYXJ0LW5lZ290aWF0aW9uLnR4dDoKKwkgIGRvY3M6IHVwZGF0ZSBuZWdvdGlhdGlvbiBkZXNpZ24gZG9jCisKKzIwMTEtMDYtMjIgMTE6NDI6NDYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkqIGdzdC9nc3RidWZmZXIuaDoKKwkqIGdzdC9nc3RidWZmZXJwb29sLmM6CisJKiBnc3QvZ3N0bWVtb3J5LmM6CisJKiBnc3QvZ3N0bWVtb3J5Lmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgbWVtb3J5OiByZW5hbWUgR3N0TWVtb3J5QWxsb2NhdG9yIC0+IEdzdEFsbG9jYXRvcgorCSAgc2ltcGxpZnkgdGhlIG5hbWUgb2YgdGhlIGFsbG9jYXRvciBvYmplY3QuCisKKzIwMTEtMDYtMjEgMTc6NTQ6MzggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKKwkgIENvbmZsaWN0czoKKwkgIGNvbmZpZ3VyZS5hYworCSAgd2luMzIvY29tbW9uL2NvbmZpZy5oCisJICB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oCisKKzIwMTEtMDYtMjEgMTc6NDc6MzYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZGVzaWduL3BhcnQtYnVmZmVycG9vbC50eHQ6CisJICBkb2NzOiB1cGRhdGUgYnVmZmVycG9vbCBkZXNpZ24gZG9jCisKKzIwMTEtMDYtMjEgMTc6NDc6MjMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgYmFzZXNyYzogaW1wcm92ZSBkZWJ1Z2dpbmcKKworMjAxMS0wNi0yMSAxNToxNTo0NCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBkb2NzL21hbnVhbC9jb21tdW5pY2F0aW9uLnBuZzoKKwkgIGltYWdlczogc3RyaXAgaW1hZ2VzIG9mIGV4dHJhIHRleHQgdGFncworCisyMDExLTA2LTIxIDEyOjMyOjQ2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgorCSAgYnVmZmVycG9vbDogcmV0dXJuIGVtcHR5IG1ldGFkYXRhIGFycmF5CisJICBSZXR1cm4gYSBzdHJpbmcgYXJyYXkgd2l0aCBOVUxMIGluc3RlYWQgb2YgTlVMTCBmcm9tIHRoZSBkZWZhdWx0IGdldF9tZXRhcworCSAgZnVuY3Rpb24uCisKKzIwMTEtMDYtMjEgMTI6MzE6NTcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogdXNlIGV2ZW50IGZ1bmN0aW9uIGRpcmVjdGx5CisJICBXZSB3aWxsIG5ldmVyIGdvIGluIHRoaXMgY29kZSBwYXRoIGZvciBDQVBTIGV2ZW50cyBzbyBkaXJlY3RseSBjYWxsIHRoZSBldmVudAorCSAgZnVuY3Rpb24uCisKKzIwMTEtMDYtMjEgMTA6Mjk6NTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogbm90aWZ5IGNhcHMgYWZ0ZXIgd2Ugc3RvcmUgdGhlIG5ldyBjYXBzCisJICBub3RpZnkgY2FwcyBhZnRlciB3ZSBzdG9yZSB0aGUgbmV3IGNhcHMgc28gdGhhdCB0aGUgbmV3IGNhcHMgYXJlIGFjdHVhbGx5CisJICB2aXNpYmxlIGZvciB0aGUgYXBwLgorCisyMDExLTA2LTIwIDE3OjMyOjQ3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIGJhc2V0cmFuc2Zvcm06IGFjdGl2YXRlIHRoZSBidWZmZXJwb29sCisJICBhbHdheXMgYWN0aXZhdGUgdGhlIGJ1ZmZlcnBvb2wsIGV2ZW4gaWYgd2UgZ2V0IGl0IGZyb20gdGhlIGFsbG9jYXRpb24KKwkgIHF1ZXJ5LgorCisyMDExLTA2LTIwIDE3OjMyOjExICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIGJhc2VzcmM6IGFsd2F5cyBhY3RpdmF0ZSB0aGUgcG9vbCB3ZSBnZXQKKwkgIEFjdGl2YXRlIHRoZSBwb29sIHdoZW4gd2UgZ2V0IGl0IGZyb20gdGhlIGFsbG9jYXRpb24gcXVlcnkuCisKKzIwMTEtMDYtMjAgMTY6NDc6NDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6CisJICBiYXNldHJhbnNmb3JtOiBpbnByb3ZlIGFsbG9jYXRpb24gaGFuZGxpbmcKKwkgIEFkZCB2bWV0aG9kIGZvciBzdWJjbGFzc2VzIHRvIGluZmx1ZW5jZSB0aGUgcG9vbCBhbmQgYWxsb2NhdG9yLgorCSAgTG9nIHdoZW4gcXVlcnkgZmFpbHMuCisJICBSZXNwZWN0IG5lZ290aWF0ZWQgYWxsb2NhdG9yIGFuZCBhbGlnbm1lbnQuCisKKzIwMTEtMDYtMjAgMTY6NDY6MDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgYmFzZXNyYzogSW1wcm92ZSBsb2dnaW5nCisJICBMb2cgd2hlbiB0aGluZ3MgZmFpbC4KKwkgIEZpeCBhIHF1ZXJ5IGxlYWsuCisKKzIwMTEtMDYtMjAgMTY6NDQ6MzUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RnaG9zdHBhZC5jOgorCSAgZ2hvc3RwYWQ6IGltcHJvdmUgZGVidWcKKwkgIExvZyBhIGRlYnVnIGxpbmUgd2hlbiB0aGVyZSBpcyBubyB0YXJnZXQgcGFkIGFuZCB3aGVuIHRoaXMgbWFrZXMgdGhlIGRlZmF1bHQKKwkgIGltcGxlbWVudGF0aW9uIGZhaWwuCisJICBUYWtlIHRoZSBpbnRlcm5hbCBwYWRzIGRpcmVjdGx5IHdoZW4gd2UgY2FuLgorCisyMDExLTA2LTIwIDE1OjQwOjUxICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogY29uZmlndXJlLmFjOgorCSAgY29uZmlndXJlLmFjOiBidW1wIHJlcXVpcmVkIEdMaWIgdG8gMi4yNgorCisyMDExLTA2LTIwIDEzOjI2OjA2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgorCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuaDoKKwkgIGJ1ZmZlcnBvb2w6IGFkZCBmdW5jdGlvbiB0byBzZXQgbWV0YWRhdGEgYXBpCisJICBBZGQgYSBmdW5jdGlvbiB0byByZXRyaWV2ZSBhbiBhcnJheSBvZiBzdXBwb3J0ZWQgbWV0YWRhdGEgYXBpcyBmcm9tIHRoZSB0aGUKKwkgIGJ1ZmZlcnBvb2wuCisJICBBZGQgZnVuY3Rpb25zIHRvIGNvbmZpZ3VyZSBhbmQgcXVlcnkgdGhlIGNvbmZpZ3VyZWQgbWV0YWRhdGEgYXBpcyBpbiBhCisJICBidWZmZXJwb29sIGNvbmZpZ3VyYXRpb24uCisKKzIwMTEtMDYtMTkgMTM6MTU6MTkgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJICBnc3RidWZmZXI6IE1pbm9yIGZpeCB0byBkb2NzCisJICBBZGRzIG1pc3NpbmcgcGFyYW1ldGVyIHRvIGRvY3Mgb2YgZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbgorCisyMDExLTA2LTE4IDE3OjM1OjQxICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBnc3RwYWQ6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgZG9fZXZlbnRfYWN0aW9ucworCSAgZG9fZXZlbnRfYWN0aW9ucyB3YXMgYWx3YXlzIHVzZWQgYXMgVFJVRQorCisyMDExLTA2LTE4IDE0OjM4OjUzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogY29uZmlndXJlLmFjOgorCSAgQnVtcCBnb2JqZWN0LWludHJvc3BlY3Rpb24gcmVxdWlyZW1lbnQgdG8gPj0gMC42LjgKKwkgIEZvciAtLWFkZC1pbml0LXNlY3Rpb24KKworMjAxMS0wNi0xNiAxNzoyNzoyMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkgIEJ1bXAgZ2l0IHZlcnNpb24gYWZ0ZXIgdW5wbGFubmVkIDAuMTAuMzUgcmVsZWFzZQorCSAgTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luLzAuMTAuMzUnCisKKzIwMTEtMDYtMTQgMTc6NTc6MjEgKzAyMDAgIFBoaWxpcCBKw6RnZW5zdGVkdCA8cGhpbGlwakBvcGVyYS5jb20+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJhc2VzaW5rOiBGaXggdHlwbyBpbiBkb2N1bWVudGF0aW9uCisJICBGaXhlcyAjNjUyNTc3LgorCisyMDExLTA2LTE2IDEwOjU1OjE1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHV0aWxzLmg6CisJICBSZXZlcnQgInV0aWxzOiByZW1vdmUgc29tZSBtYWNyb3Mgbm93IGluIGdsaWIiCisJICBUaGlzIHJldmVydHMgY29tbWl0IGRlMjlhZTdiOTI5Y2VkYmY2Yjk4MzhlYTUzYjA1ZWZhYmRjZTRjZTcuCisJICBSZS1hZGRzIEdGTE9BVF9UT19MRSwgR0ZMT0FUX1RPX0JFLCBHRE9VQkxFX1RPX0xFLCBhbmQgR0RPVUJMRV9UT19CRS4KKwkgIFR1cm5zIG91dCB0aGVzZSBhcmVuJ3QgaW4gR0xpYiB5ZXQgYWZlciBhbGwgKHNpbmNlIHdlIGRpZG4ndAorCSAgYWN0dWFsbHkgb3BlbiBhIGJ1ZyB0byBnZXQgdGhlbSBhZGRlZC4uKQorCis9PT0gcmVsZWFzZSAwLjEwLjM1ID09PQorCisyMDExLTA2LTE1IDE5OjE1OjI0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogQ2hhbmdlTG9nOgorCSogTkVXUzoKKwkqIFJFTEVBU0U6CisJKiBjb25maWd1cmUuYWM6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgorCSogZ3N0cmVhbWVyLmRvYXA6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgorCSAgUmVsZWFzZSAwLjEwLjM1CisJICBUaGlzIGlzIGFuIGFkLWhvYyByZWxlYXNlIHRoYXQgaXMgYWxtb3N0IGlkZW50aWNhbCB0byAwLjEwLjM0OgorCSAgKiB3b3JrIGFyb3VuZCBHTGliIGF0b21pYyBvcHMgQVBJIGNoYW5nZQorCSAgKiBzb21lIG1pbm9yIHdpbjMyL21pbmd3IGZpeGVzCisJICAqIGRvbid0IHVzZSBHX0NPTlNUX1JFVFVSTiBpbiBwdWJsaWMgaGVhZGVycworCisyMDExLTA2LTE1IDE2OjU2OjMwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIGJhc2VzcmM6IGZpeCByZWZjb3VudGluZyBwcm9ibGVtCisKKzIwMTEtMDYtMDkgMTc6MTM6MzUgKzAxMDAgIEphdmllciBKYXJkw7NuIDxqamFyZG9uQGdub21lLm9yZz4KKworCSogZ3N0L2dzdGVsZW1lbnQuaDoKKwkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgorCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5Lmg6CisJKiBnc3QvZ3N0Zm9ybWF0Lmg6CisJKiBnc3QvZ3N0aW5mby5jOgorCSogZ3N0L2dzdGluZm8uaDoKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RwYWQuaDoKKwkqIGdzdC9nc3RwbHVnaW4uYzoKKwkqIGdzdC9nc3RwbHVnaW4uaDoKKwkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6CisJKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oOgorCSogZ3N0L2dzdHF1ZXJ5Lmg6CisJKiBnc3QvZ3N0c3RydWN0dXJlLmg6CisJKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSogZ3N0L2dzdHRhZ2xpc3QuaDoKKwkqIGdzdC9nc3R0YWdzZXR0ZXIuYzoKKwkqIGdzdC9nc3R0YWdzZXR0ZXIuaDoKKwkqIGdzdC9nc3R0cmFjZS5oOgorCSogZ3N0L2dzdHVyaS5jOgorCSogZ3N0L2dzdHVyaS5oOgorCSogZ3N0L2dzdHV0aWxzLmM6CisJKiBnc3QvZ3N0dXRpbHMuaDoKKwkqIGdzdC9nc3R2YWx1ZS5oOgorCSAgVXNlICJjb25zdCIgaW5zdGVhZCBHX0NPTlNUX1JFVFVSTgorCSAgR19DT05TVF9SRVRVUk4gd2lsbCBiZSBkZXByZWNhdGVkIHNvb24uCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUyMjExCisKKzIwMTEtMDYtMDQgMDA6MzA6MTUgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJKiBnc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oOgorCSogZ3N0L2dzdGF0b21pY3F1ZXVlLmM6CisJKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKKwkqIGdzdC9nc3Rwb2xsLmM6CisJKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKKwkqIGdzdC9nc3R1dGlscy5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6CisJKiB0ZXN0cy9iZW5jaG1hcmtzL2dzdGNsb2Nrc3RyZXNzLmM6CisJICBXb3JrIGFyb3VuZCBjaGFuZ2VzIGluIGdfYXRvbWljIEFQSQorCSAgU2VlICM2NTE1MTQgZm9yIGRldGFpbHMuICBJdCdzIGFwcGFyZW50bHkgaW1wb3NzaWJsZSB0byB3cml0ZSBjb2RlCisJICB0aGF0IGF2b2lkcyBib3RoIHR5cGUgcHVubmluZyB3YXJuaW5ncyB3aXRoIG9sZCBnX2F0b21pYyBoZWFkZXJzIGFuZAorCSAgYXNzZXJ0aW9ucyBpbiB0aGUgbmV3LiAgVGh1cywgbWFjcm9zIGFuZCBhIHZlcnNpb24gY2hlY2suCisKKzIwMTEtMDUtMjUgMTM6NDA6MzAgKzA0MDAgINCg0YPRgdC70LDQvSDQmNC20LHRg9C70LDRgtC+0LIgPGxybjE5ODZAZ21haWwuY29tPgorCisJKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKKwkgIHN5c3RlbWNsb2NrOiBQbGFjYXRlIGdjYyBieSBkZWZpbmluZyBFV09VTERCTE9DSyB0byBzb21ldGhpbmcKKworMjAxMS0wNS0yNSAxMjo0Nzo1MSArMDQwMCAg0KDRg9GB0LvQsNC9INCY0LbQsdGD0LvQsNGC0L7QsiA8bHJuMTk4NkBnbWFpbC5jb20+CisKKwkqIGdzdC9nc3Rwb2xsLmM6CisJICBwb2xsOiBGaXggV0FLRV9FVkVOVCgpIHRvIGJlaGF2ZSBwb3NpeGx5IG9uIFdpbmRvd3MKKworMjAxMS0wNi0xNCAxNToxODoyNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKKwkqIGRvY3MvcmFuZG9tL3N0YXR1cy0wLjExLTE0LWp1bi0yMDExLnR4dDoKKwkgIGRvY3M6IHVwZGF0ZSBkb2NzCisKKzIwMTEtMDYtMTMgMTk6MTA6MDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKKworMjAxMS0wNi0xMyAxNjozMTo1MyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSogZ3N0L2dzdGJ1ZmZlci5oOgorCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6CisJKiB0ZXN0cy9jaGVjay9saWJzL2JpdHJlYWRlci5jOgorCSogdGVzdHMvY2hlY2svbGlicy9ieXRlcmVhZGVyLmM6CisJKiB0ZXN0cy9jaGVjay9saWJzL3R5cGVmaW5kaGVscGVyLmM6CisJICBidWZmZXI6IGFkZCBpbmRleCB0byBfdGFrZV9tZW1vcnkoKQorCSAgQWRkIGFuIGluZGV4IHRvIGdzdF9idWZmZXJfdGFrZV9tZW1vcnkoKSBzbyB0aGF0IHdlIGNhbiBhbHNvIGluc2VydCBtZW1vcnkgYXQgYQorCSAgY2VydGFpbiBvZmZzZXQuIFRoaXMgaXMgbW9zdGx5IGludGVyZXN0aW5nIHRvIHByZXBlbmQgYSBoZWFkZXIgbWVtb3J5IGJsb2NrIHRvCisJICB0aGUgYnVmZmVyLgorCisyMDExLTA2LTEzIDE2OjMwOjIyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IGRvbid0IGZvcndhcmQgc2NoZWR1bGluZyBxdWVyeQorCSAgVGhlIHNjaGVkdWxpbmcgcXVlcnkgc2hvdWxkIG5vdCBiZSBmb3J3YXJkZWQsIGJlY2F1c2UgZWxlbWVudHMgbmVlZCB0byBpbXBsZW1lbnQKKwkgIHNwZWNpYWwgY29kZSB0byBoYW5kbGUgZGlmZmVyZW50IHNjaGVkdWxpbmcgbWV0aG9kcy4KKworMjAxMS0wNi0xMyAxMjowNzowMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdHB1c2hzcmMuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5oOgorCSAgYmFzZXNyYzogQWxsb2NhdG9yIGJ1ZmZlcnMgZnJvbSBuZWdvdGlhdGVkIGFsbG9jYXRvcgorCSAgQWxsb2NhdGUgYnVmZmVycyBmcm9tIHRoZSBuZWdvdGlhdGVkIGFsbG9jYXRvciBvciBidWZmZXJwb29sLgorCSAgSGFuZGxlIHRoZSBzdGF0ZSBvZiB0aGUgYnVmZmVycG9vbCB3aGVuIGZsdXNoaW5nLgorCSAgQWRkIGZpbGwgbWV0aG9kIHRvIHB1c2hzcmMuCisKKzIwMTEtMDYtMTMgMTI6MDQ6MjggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkgIGJ1ZmZlcjogYWRkIG1vcmUgZGVidWcKKworMjAxMS0wNi0xMyAxMTo1MTowOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuaDoKKwkgIGJ1ZmZlcnBvb2w6IHNtYWxsIGluZGVudGF0aW9uIGZpeAorCisyMDExLTA2LTEzIDExOjUwOjQyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBnc3QvZ3N0YnVmZmVyLmg6CisJICBidWZmZXI6IHBhc3MgdGhlIGFsbG9jYXRvciBhcyBjb25zdAorCisyMDExLTA2LTEzIDEwOjE5OjMwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgorCSAgYmFzZXNyYzogbmVnb3RpYXRlIGFsbG9jYXRpb24KKwkgIEFkZCB2bWV0aG9kIHRvIGNvbmZpZ3VyZSBhbGxvY2F0aW9uIG1ldGhvZHMuCisJICBSZW1vdmUgc29tZSB1bnVzZWQgdmFyaWFibGVzCisKKzIwMTEtMDYtMTEgMjA6NDU6NDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RxdWVyeS5jOgorCSAgcXVlcnk6IGFkZCBzb21lIG1vcmUgY2hlY2tzCisJICBNYWtlIHN1cmUgdGhhdCB0aGUgYWxpZ25tZW50IGlzIHZhbGlkLgorCSAgV2hlbiB3ZSBoYXZlIGEgMCBzaXplICh2YXJpYWJsZSBidWZmZXIgc2l6ZSksIHdlIGNhbid0IGhhdmUgYSBidWZmZXJwb29sLgorCisyMDExLTA2LTExIDE5OjU0OjQ3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cXVlcnkuYzoKKwkgIHF1ZXJ5OiBzZXQgYWxsIGRlZmF1bHQgdmFsdWVzCisJICBGaWxsIGFsbCBxdWVyeSB2YWx1ZXMgd2l0aCBnb29kIGRlZmF1bHRzLgorCisyMDExLTA2LTExIDE4OjUyOjQyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgorCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYnVmZmVycG9vbDogcmVtb3ZlIHBvc3RmaXggcGFyYW1ldGVyCisJICBSZW1vdmUgdGhlIHBvc3RmaXggcGFyYW1ldGVyLCBpdCdzIG5vdCB1c2VkIGFuZCBjYW4gYmUgZG9uZSBkaWZmZXJlbnRseS4KKworMjAxMS0wNi0xMCAxNzo1MDoyNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKKwkgIGJ1ZmZlcnBvb2w6IHVzZSBzYW1lIGFsaWdubWVudCB2YWx1ZXMgYXMgR3N0TWVtb3J5CisJICBVc2UgdGhlIHNhbWUgYWxpZ25tZW50IHZhbHVlcyBmb3IgdGhlIGJ1ZmZlcnBvb2wgYXMgd2UgdXNlIGZvciB0aGUgR3N0TWVtb3J5CisJICBBUEkuCisKKzIwMTEtMDYtMTAgMTc6MzI6NDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgYmFzZXNyYzogdXNlIG5ldyBfY2hlY2tfcmVjb25maWd1cmUoKSBtZXRob2QKKworMjAxMS0wNi0xMCAxNzozMjoyMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5oOgorCSAgcGFkOiBhZGQgX2NoZWNrX3JlY29uZmlndXJlKCkgbWV0aG9kCisJICBBZGQgYSBtZXRob2QgdG8gY2hlY2sgYW5kIGNsZWFyIHRoZSBSRUNPTkZJR1VSRSBmbGFnIG9uIGEgcGFkLgorCisyMDExLTA2LTEwIDE2OjQ3OjI5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJICBidWZmZXI6IGFkZCBzdXBwb3J0IGZvciBidWZmZXIgaW4gbWVtb3J5CisJICBGaXggdGhlIGNvZGUgdG8gc3VwcG9ydCBhbGxvY2F0aW5nIHRoZSBidWZmZXIgYW5kIG1lbW9yeSBpbiBvbmUgbWVtb3J5IGJsb2NrLgorCSAgQWRkIGFuIGV4dHJhIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBtZW1vcnkgb2YgdGhlIGJ1ZmZlci4KKwkgIFRoaXMgY29kZSBpcyBkaXNhYmxlZCBzdGlsbCBiZWNhdXNlIG9mIGNvbXBsaWNhdGlvbnMuCisKKzIwMTEtMDYtMTAgMTY6NDY6MTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RtZW1vcnkuYzoKKwkqIGdzdC9nc3RtZW1vcnkuaDoKKwkgIG1lbW9yeTogZXhwb3NlIGRlZmF1bHQgYWxpZ25tZW50CisJICBFeHBvcnQgdGhlIGdzdF9tZW1vcnlfYWxpZ25tZW50IHZhcmlhYmxlIHNvIHRoYXQgb3RoZXJzIGNhbiBrbm93IHRoZSBkZWZhdWx0CisJICBjb25maWd1cmVkIGFsaWdubWVudCBvZiB0aGUgc3lzdGVtLgorCisyMDExLTA2LTEwIDE2OjE5OjQ2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0bWVtb3J5LmM6CisJICBtZW1vcnk6IGZpeCBpc19zcGFuCisJICBTdWJ0cmFjdCB0aGUgb2Zmc2V0IG9mIHRoZSBwYXJlbnQgZnJvbSBpc19zcGFuLgorCisyMDExLTA2LTEwIDEzOjU5OjMxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBnc3QvZ3N0bWVtb3J5LmM6CisJICBtZW1vcnk6IHJlc3BlY3QgY29uZmlndXJlZCBhbGlnbm1lbnQKKwkgIE1vdmUgdGhlIGFsaWdubWVudCBmcm9tIEdzdEJ1ZmZlciB0byBHc3RNZW1vcnkuCisJICBtYWtlIHN1cmUgbWVtb3J5IGlzIGF0IGxlYXN0IGFsaWduZWQgdG8gdGhlIGNvbmZpZ3VyZWQgdmFsdWVzLgorCisyMDExLTA2LTEwIDEzOjQwOjU3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBnc3QvZ3N0YnVmZmVyLmg6CisJKiBnc3QvZ3N0Y29tcGF0Lmg6CisJKiBnc3QvZ3N0dmFsdWUuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBidWZmZXI6IG1ha2UgbmV3IF9idWZmZXJfYWxsb2NhdGUgbWV0aG9kCisJICBNYWtlIGEgbmV3IG1ldGhvZCB0byBhbGxvY2F0ZSBhIGJ1ZmZlciArIG1lbW9yeSB0aGF0IHRha2VzIHRoZSBhbGxvY2F0b3IgYW5kIHRoZQorCSAgYWxpZ25tZW50IGFzIHBhcmFtZXRlcnMuIFByb3ZpZGUgYSBtYWNybyBmb3IgdGhlIG9sZCBtZXRob2QgYnV0IHByZWZlciB0byB1c2UKKwkgIHRoZSBuZXcgbWV0aG9kIHRvIGVuY291cmFnZSBwbHVnaW5zIHRvIG5lZ290aWF0ZSB0aGUgYWxsb2NhdG9yIHByb3Blcmx5LgorCisyMDExLTA2LTEwIDEyOjQ0OjQwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgorCSAgZG9jczogdXBkYXRlIGZvciBnc3RfYmFzZV9zcmNfc2V0X2R5bmFtaWNfc2l6ZQorCSAgQWRkIHRvIHNlY3Rpb25zIGZpbGUgYW5kIGFkZCBTaW5jZTogbWFya2VyLiBBbHNvIHVwZGF0ZQorCSAgd2luMzIgLmRlZiBmaWxlLgorCSAgQVBJOiBnc3RfYmFzZV9zcmNfc2V0X2R5bmFtaWNfc2l6ZSgpCisKKzIwMTEtMDYtMTAgMTM6NDQ6MTkgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2Rlc2lnbi9NYWtlZmlsZS5hbToKKwkgIGRlc2lnbjogcGFydC1idWZmZXJsaXN0LnR4dCB3YXMgbWVyZ2VkIGludG8gYW5vdGhlciBkb2MKKworMjAxMS0wNi0xMCAxMzozNDo1OSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSAgZG9jczogVXBkYXRlIHNlY3Rpb25zIGZpbGVzIGZvciBhZGRlZC9yZW1vdmVkIHN5bWJvbHMKKworMjAxMS0wNi0xMCAxMzoxMDo0MiArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgd2luMzI6IFVwZGF0ZSBmb3IgYWRkZWQvcmVtb3ZlZCBzeW1ib2xzCisKKzIwMTEtMDYtMTAgMTM6MDQ6MjMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKKwkgIGJhc2VzcmM6IGFkZCBmaWxsIHZtZXRob2QgdG8gYmFzZXNyYworCSAgQWRkIGEgbmV3IGZpbGwgdmlydHVhbCBtZXRob2QgdG8gYmFzZXNyYy4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXMgdG8gZmlsbAorCSAgYSBwcm92aWRlZCBidWZmZXIgd2l0aCBkYXRhLgorCSAgQWRkIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY3JlYXRlIG1ldGhvZCB0aGF0IGFsbG9jYXRlcyBhIGJ1ZmZlciBhbmQKKwkgIGNhbGxzIHRoZSBmaWxsIG1ldGhvZCBvbiBpdC4gVGhpcyB3b3VsZCBhbGxvdyB0aGUgYmFzZSBjbGFzcyB0byBpbXBsZW1lbnQKKwkgIGJ1ZmZlcnBvb2wgYW5kIGFsbG9jYXRvciBuZWdvdGlhdGlvbiBvbiBiZWhhbGYgb2YgdGhlIHN1YmNsYXNzZXMuCisJICBGaXggdGhlIGJsb2Nrc2l6ZSBwcm9wZXJ0eS4KKwkgIE1ha2UgZmlsZXNyYyB1c2UgdGhlIG5ldyBmaWxsIG1ldGhvZC4KKworMjAxMS0wNi0xMCAxMjowOTo0OSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQorCSAgQ29uZmxpY3RzOgorCSAgZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmMKKwkgIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5oCisJICBnc3QvZ3N0cGFkLmgKKwkgIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmMKKwkgIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmgKKworMjAxMS0wNi0xMCAxMTo1NTowOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGV2ZW50LmM6CisJKiBnc3QvZ3N0ZXZlbnQuaDoKKwkqIGdzdC9nc3RxdWFyay5jOgorCSogZ3N0L2dzdHF1YXJrLmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc2luay5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6CisJICBldmVudDogYWRkIHJlc2V0X3RpbWUgYm9vbGVhbiB0byBmbHVzaF9zdG9wIGV2ZW50CisJICBBZGQgYSBib29sZWFuIHRvIHRoZSBmbHVzaF9zdG9wIGV2ZW50IHRvIG1ha2UgaXQgcG9zc2libGUgdG8gaW1wbGVtZW50IGZsdXNoZXMKKwkgIHRoYXQgZG9uJ3QgcmVzZXRfdGltZS4KKwkgIE1ha2UgYmFzZXNpbmsgcG9zdCBhc3luY19kb25lIHdpdGggdGhlIHJlc2V0X3RpbWUgcHJvcGVydHkgZnJvbSB0aGUgZmx1c2ggc3RvcAorCSAgZXZlbnQuCisJICBGaXggc29tZSB1bml0IHRlc3RzCisKKzIwMTEtMDYtMDkgMTc6MTM6MzUgKzAxMDAgIEphdmllciBKYXJkw7NuIDxqamFyZG9uQGdub21lLm9yZz4KKworCSogZ3N0L2dzdGVsZW1lbnQuaDoKKwkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgorCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5Lmg6CisJKiBnc3QvZ3N0Zm9ybWF0Lmg6CisJKiBnc3QvZ3N0aW5mby5jOgorCSogZ3N0L2dzdGluZm8uaDoKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RwYWQuaDoKKwkqIGdzdC9nc3RwbHVnaW4uYzoKKwkqIGdzdC9nc3RwbHVnaW4uaDoKKwkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6CisJKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oOgorCSogZ3N0L2dzdHF1ZXJ5Lmg6CisJKiBnc3QvZ3N0c3RydWN0dXJlLmg6CisJKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSogZ3N0L2dzdHRhZ2xpc3QuaDoKKwkqIGdzdC9nc3R0YWdzZXR0ZXIuYzoKKwkqIGdzdC9nc3R0YWdzZXR0ZXIuaDoKKwkqIGdzdC9nc3R0cmFjZS5oOgorCSogZ3N0L2dzdHVyaS5jOgorCSogZ3N0L2dzdHVyaS5oOgorCSogZ3N0L2dzdHV0aWxzLmM6CisJKiBnc3QvZ3N0dXRpbHMuaDoKKwkqIGdzdC9nc3R2YWx1ZS5oOgorCSAgVXNlICJjb25zdCIgaW5zdGVhZCBHX0NPTlNUX1JFVFVSTgorCSAgR19DT05TVF9SRVRVUk4gd2lsbCBiZSBkZXByZWNhdGVkIHNvb24uCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUyMjExCisKKzIwMTEtMDYtMDkgMTM6Mzc6MjggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogdXNlIG5ldyBldmVudCBtZXRob2RzIHRvIHJlcGxhY2UgZXZlbnRzCisJICBVc2luZyB0aGUgbmV3IGV2ZW50IG1ldGhvZHMsIHdlIGNhbiBhdG9taWNhbGx5IHRyYW5zZmVyIHRoZSBldmVudCBmcm9tIHRoZQorCSAgcGVuZGluZyBsaXN0IHRvIHRoZSBhY3RpdmUgbGlzdC4KKworMjAxMS0wNi0wOSAxMzozNjo1MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGV2ZW50Lmg6CisJICBldmVudDogbWFrZSBtYWNyb3MgZm9yIG5ldyBtaW5pb2JqZWN0IG1ldGhvZHMKKworMjAxMS0wNi0wOSAxMzozNTowOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKKwkqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6CisJICBtaW5pb2JqZWN0OiBhZGQgbmV3IG1ldGhvZHMgdG8gbWFuYWdlIG1pbmlvYmplY3QgcG9pbnRlcnMKKwkgIEFkZCBhIG5ldyBtZXRob2QgdG8gc3RlYWwgdGhlIG1pbmlvYmplY3Qgc3RvcmVkIGF0IGEgbG9jYXRpb24uCisJICBBZGQgYSBuZXcgbWV0aG9kIHRvIHN0b3JlIGEgbWluaW9iamVjdCBpbiBhIGxvY2F0aW9uIGFuZCB0YWtpbmcgb3duZXJzaGlwCisJICBvZiB0aGUgbWluaW9iamVjdC4KKworMjAxMS0wNi0wOSAxMzozNDoxOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5oOgorCSAgcGFkOiBmaXggaGVhZGVyCisKKzIwMTEtMDYtMDkgMTI6MzE6NDcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuaDoKKwkgIHBhZDogZml4IHNwdXJpb3VzIGluY2x1ZGUKKworMjAxMS0wNi0wOSAxMjowMTowMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQorCSAgQ29uZmxpY3RzOgorCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmMKKworMjAxMS0wNi0wOSAxMTozOTowOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5oOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKKwkgIHBhZDogZm9yd2FyZCBldmVudHMgYnkgZGVmYXVsdAorCSAgQWx3YXlzIGZvcndhcmQgYWxsIGV2ZW50cyBpbiB0aGUgZGVmYXVsdCBoYW5kbGVyLiBQcmV2aW91c2x5IGl0IHVzZWQgdG8gbm90CisJICBmb3J3YXJkIGNhcHMgZXZlbnRzIGJ5IGRlZmF1bHQuIEl0IG1ha2VzIG1vcmUgc2Vuc2UgdG8gZm9yd2FyZCB0aGUgY2FwcyBldmVudHMsCisJICBpZiB0aGUgZWxlbWVudCBpcyBpbnRlcmVzdGVkIGluIHRoZSBjYXBzLCBpdCB3aWxsIGltcGxlbWVudCBhbiBldmVudCBoYW5kbGVyIHRvCisJICByZXRyaWV2ZSB0aGUgY2FwcyBhbmQgdGhlbiBpdCBjYW4gZGVjaWRlIHRvIGZvcndhcmQgb3Igbm90LiBJZiB0aGUgZWxlbWVudCBoYXMKKwkgIG5vIGV2ZW50IGhhbmRsZXIsIGl0IHByb2JhYmx5IGp1c3QgZG9lc24ndCBjYXJlIGFib3V0IGNhcHMgYW5kIGl0IHByb2JhYmx5IGlzCisJICBhbHNvIG5vdCBnb2luZyB0byBtb2RpZnkgdGhlIGRhdGEgaW4gYSB3YXkgdGhhdCBuZWVkcyBhIGNhcHMgY2hhbmdlLgorCisyMDExLTA2LTA5IDExOjEzOjU1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJICBidWZmZXI6IGZpeCB0eXBvIGluIGRvY3MKKworMjAxMS0wNi0wOCAxODoyMjozNiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgorCSAgZmlsZXNyYy9mZHNyYzogaW5kaWNhdGUgZHluYW1pYyBzaXplIGhhbmRsaW5nIHRvIGJhc2VzcmMKKworMjAxMS0wNi0wOCAxODoyMjowMyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJICBiYXNlc3JjOiBhZGQgZHluYW1pYyBzaXplIGhhbmRsaW5nCisJICBUaGlzIGFsbG93cyBzdWJjbGFzcyB0byBpbmRpY2F0ZSB0aGF0IHNpemUgcmVwb3J0ZWQgYnkgc3JjIG1heSBub3QgYmUgc3RhdGljCisJICBhbmQgc2hvdWxkIGFzIHN1Y2ggYmUgdXBkYXRlZCByZWd1bGFybHksIHJhdGhlciB0aGFuIG9ubHkgd2hlbiByZWFsbHkKKwkgIG5lZWRlZC4KKwkgIFBhcnRpY3VsYXIgZXhhbXBsZXMgYXJlIGZpbGVzcmMgb3IgZmRzcmMgcmVhZGluZyBmcm9tIGEgZmlsZSB0aGF0IGlzIHN0aWxsCisJICBncm93aW5nIChlLmcuIGJlaW5nIGRvd25sb2FkZWQpLgorCSAgRml4ZXMgIzY1MjAzNy4KKworMjAxMS0wNi0wOCAyMDoxNDoxNiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgUmV2ZXJ0ICJiYXNlc3JjOiBTZW5kIGFuIHVwZGF0ZSBORVdTRUdNRU5UIGV2ZW50IGRvd25zdHJlYW0gaWYgdGhlIGR1cmF0aW9uIGNoYW5nZXMiCisJICBUaGlzIHJldmVydHMgY29tbWl0IDkzNGZhZjE2M2NhZjEwZWQzZDU0ZDgxZmQ3Yjc5MzA2OTkxM2RmZmQuCisJICBPcmlnaW5hbCBjb21taXQgbGVhZHMgdG8gcG9zc2libHkgc2VuZGluZyBuZXdzZWdtZW50IGV2ZW50IGRvd25zdHJlYW0KKwkgIGluIHB1bGwgbW9kZS4gIEluIHB1c2ggbW9kZSwgcXVpdGUgc29tZSBkb3duc3RyZWFtIGVsZW1lbnRzCisJICBhcmUgbGlrZWx5IHRvIG9ubHkgZXhwZWN0IG5ld3NlZ21lbnQgZXZlbnQgZm9sbG93aW5nIGEgc2VlayB0aGV5IHBlcmZvcm1lZAorCSAgYW5kIGFzIHN1Y2ggbWF5IGhhdmUgdGhlaXIgc3RhdGUgbWVzc2VkIHVwLgorCisyMDExLTA2LTA4IDE4OjM1OjE2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJICBiYXNlc2luazogaW5saW5lIHRoZSBjbGlwIHNlZ21lbnQKKworMjAxMS0wNi0wOCAxNzoyNTo0MyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJpbi5jOgorCSogZ3N0L2dzdG1lc3NhZ2UuYzoKKwkqIGdzdC9nc3RtZXNzYWdlLmg6CisJKiBnc3QvZ3N0cGlwZWxpbmUuYzoKKwkqIGdzdC9nc3RxdWFyay5jOgorCSogZ3N0L2dzdHF1YXJrLmg6CisJICBtZXNzYWdlOiByZW5hbWUgdmFyaWFibGUKKwkgIFJlbmFtZSB0aGUgbmV3X2Jhc2VfdGltZSB2YXJpYWJsZSB0byByZXNldF90aW1lLCB3aGljaCBsb29rcyBiZXR0ZXIuCisKKzIwMTEtMDYtMDggMTY6NDE6MDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RzZWdtZW50Lmg6CisJICBzZWdtZW50OiBzZXBhcmF0ZSB0aGUgc2VlayBhbmQgc2VnbWVudCBmbGFncworCSAgU2VwYXJhdGUgdGhlIHNlZWsgZmxhZ3MgYW5kIHNlZ21lbnQgZmxhZ3MgYXMgc2VwYXJhdGUgZW51bXMgYmVjYXVzZSB3ZSBtaWdodAorCSAgd2FudCB0byBoYXZlIGRpZmZlcmVudCBmbGFncyBmb3IgYm90aC4KKworMjAxMS0wNi0wOCAxMzo0MDozMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJpbi5jOgorCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3RlbGVtZW50Lmg6CisJKiBnc3QvZ3N0bWVzc2FnZS5jOgorCSogZ3N0L2dzdG1lc3NhZ2UuaDoKKwkqIGdzdC9nc3RwaXBlbGluZS5jOgorCSogZ3N0L2dzdHF1YXJrLmM6CisJKiBnc3QvZ3N0cXVhcmsuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIG1lc3NhZ2U6IG1vdmUgdGhlIG5ld19iYXNlX3RpbWUgZmxhZyB0byBhc3luY19kb25lCisJICBNb3ZlIHRoZSBmbGFnIHRvIGluZGljYXRlIHRoYXQgYSBuZXdfYmFzZV90aW1lIHNob3VsZCBiZSBkaXN0cmlidXRlZCB0byB0aGUKKwkgIHBpcGVsaW5lLCBmcm9tIHRoZSBhc3luY19zdGFydCB0byB0aGUgYXN5bmNfZG9uZSBtZXNzYWdlLiBUaGlzIHdvdWxkIGFsbG93IHVzIHRvCisJICBkZWNpZGUgd2hlbiB0byByZXNldCB0aGUgcGlwZWxpbmUgdGltZSBiYXNlZCBvbiBvdGhlciByZWFzb25zIHRoYW4gdGhlCisJICBGTFVTSF9TVEFSVCBldmVudC4KKwkgIFRoZSBtYWluIGdvYWwgZXZlbnR1YWxseSBpcyB0byBtYWtlIHRoZSBGTFVTSCBldmVudHMgbm90IHJlc2V0IHRpbWUgYXQgYWxsIGJ1dAorCSAgcmVzZXQgdGhlIHRpbWUgYmFzZWQgb24gdGhlIGZpcnN0IGJ1ZmZlciBvciBzZWdtZW50IHRoYXQgcHJlcm9sbHMgdGhlIHBpcGVsaW5lCisJICBhZ2Fpbi4KKworMjAxMS0wNi0wOCAxMzozOToxOSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICBkb2NzOiBVcGRhdGUgZ3N0cmVhbWVyLXNlY3Rpb25zIGZvciBuZXcvcmVtb3ZlZCBBUEkKKworMjAxMS0wNi0wOCAxMzozMDo0OSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXIuaDoKKwkgIGdzdGJ1ZmZlcjogUmVtb3ZlIGRlcHJlY2F0ZWQgR1NUX0JVRkZFUl8qIG1hY3JvcworCSAgZGF0YSwgc2l6ZSwgbWFsbG9jZGF0YSBhbmQgZnJlZV9mdW5jIG5vIGxvbmdlciBleGlzdC4KKworMjAxMS0wNi0wOCAxMzowNjoxNyArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgd2luMzI6IFVwZGF0ZSBmb3IgYWRkZWQvcmVtb3ZlZCBzeW1ib2xzCisKKzIwMTEtMDYtMDggMTI6NTg6MjkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RwYWQuaDoKKwkgIHBhZDogcmVtb3ZlIHNldGNhcHMgZnVuY3Rpb24KKwkgIFJlbW92ZSB0aGUgc2V0Y2FwcyBmdW5jdGlvbiwgZWxlbWVudHMgc2hvdWxkIHVzZSB0aGUgY2FwcyBldmVudCB0byBiZSBpbmZvcm1lZAorCSAgb2YgdGhlIGZvcm1hdC4KKworMjAxMS0wNi0wOCAxMjowNDo0OSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9kZXNpZ24vcGFydC1tZW1vcnkudHh0OgorCSogZ3N0L2dzdG1lbW9yeS5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1ldGEuYzoKKwkgIG1lbW9yeTogUmVxdWlyZSBpbXBsZW1lbnRhdGlvbiB0byBpbXBsZW1lbnQgX3NoYXJlCisJICBSZXF1aXJlIHRoZSBtZW1vcnkgaW1wbGVtZW50YXRpb25zIHRvIGltcGxlbWVudCBhIHNoYXJlIG9wZXJhdGlvbi4gVGhpcyBhbGxvd3MKKwkgIHVzIHRvIHJlbW92ZSB0aGUgZmFsbGJhY2sgc2hhcmUgaW1wbGVtZW50YXRpb24gd2hpY2ggdXNlcyBhIGRpZmZlcmVudCBhbGxvY2F0b3IKKwkgIGltcGxlbWVudGF0aW9uIGFuZCBjb21wbGljYXRlcyB0aGluZ3MgdG9vIG11Y2guCisJICBVcGRhdGUgZGVzaWduIGRvYyBhIGJpdC4KKworMjAxMS0wNi0wOCAxMTowMzo1MCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdG1lbW9yeS5jOgorCSogZ3N0L2dzdG1lbW9yeS5oOgorCSogZ3N0L2dzdHF1ZXJ5LmM6CisJICBtZW1vcnk6IGNsZWFudXBzIGFuZCBpbXByb3ZlIGRvY3MKKwkgIE1ha2UgdGhlIGZhbGxiYWNrIGNvcHkgdXNlIHRoZSBzYW1lIG1lbW9yeSBhbGxvY2F0b3IgYXMgdGhlIG9yaWdpbmFsIG9iamVjdC4KKwkgIEltcHJvdmUgc29tZSBkb2NzLgorCSAgUmVxdWlyZSBhbiBhbGxvYyBmdW5jdGlvbiB3aGVuIHJlZ2lzdGVyaW5nIGFuIGFsbG9jYXRvci4KKwkgIFJlbW92ZSBnc3RfbWVtb3J5X2FsbG9jYXRvcl9nZXRfZGVmYXVsdCgpIGFuZCBtZXJnZSB0aGUgZmVhdHVyZSBpbgorCSAgZ3N0X21lbW9yeV9hbGxvY2F0b3JfZmluZCgpCisJICBGaXggbG9ja3Mgb24gdGhlIGhhc2h0YWJsZS4KKwkgIFJlbW92ZSBkZWZpbmVkIGJ1dCBub3QtaW1wbGVtZW50ZWQgZ3N0X21lbW9yeV9zcGFuKCkgbWV0aG9kLgorCisyMDExLTA2LTA3IDE4OjE4OjI3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2Rlc2lnbi9wYXJ0LW1lbW9yeS50eHQ6CisJICBkb2NzOiBhZGQgYmVnaW5uaW5ncyBvZiBtZW1vcnkgZGVzaWduIGRvYworCisyMDExLTA2LTA3IDE3OjU0OjMzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0bWVtb3J5LmM6CisJKiBnc3QvZ3N0bWVtb3J5Lmg6CisJICBtZW1vcnk6IHBhc3MgdXNlcl9kYXRhIHRvIHRoZSBhbGxvYyBmdW5jdGlvbgorCSAgUGFzcyB0aGUgdXNlciBkYXRhIHRoYXQgd2FzIHBhc3NlZCB0byBfcmVnaXN0ZXIgdG8gdGhlIGFsbG9jIGZ1bmN0aW9uIG9mIGFuCisJICBhbGxvY2F0b3IuCisKKzIwMTEtMDYtMDcgMTc6MzQ6MTcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RtZW1vcnkuaDoKKwkgIG1lbW9yeTogZml4IHNvbWUgdHlwb3MKKworMjAxMS0wNi0wNyAxNzowMzowOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuaDoKKwkgIGZpbGVzcmM6IHJlbW92ZSBNTUFQIGNvZGUKKwkgIFJlbW92ZSB0aGUgbW1hcCBjb2RlLCBpdCB3YXMgZGlzYWJsZWQgYW5kIHByb2JhYmx5IG5lZWRzIGEgY29tcGxldGUgcmV3cml0ZQorCSAgYW55d2F5IGlmIHRoaXMgaXMgdG8gYmUgcG9ydGVkIHRvIDAuMTEuCisKKzIwMTEtMDYtMDcgMTY6MzU6MDcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RxdWFyay5jOgorCSogZ3N0L2dzdHF1YXJrLmg6CisJKiBnc3QvZ3N0cXVlcnkuYzoKKwkqIGdzdC9nc3RxdWVyeS5oOgorCSAgcXVlcnk6IGFkZCBtZXRob2RzIHRvIHF1ZXJ5IGFsbG9jYXRvcnMKKwkgIEFkZCBBUEkgdG8gYWRkIGFuZCBxdWVyeSBhbGxvY2F0b3IgaW1wbGVtZW50YXRpb25zIHRvL2Zyb20gdGhlIEFMTE9DQVRJT04gcXVlcnkuCisKKzIwMTEtMDYtMDcgMTY6MTQ6NTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkqIGdzdC9nc3RidWZmZXJwb29sLmM6CisJKiBnc3QvZ3N0bWVtb3J5LmM6CisJKiBnc3QvZ3N0bWVtb3J5Lmg6CisJICBtZW1vcnk6IHVzZSBhbGxvY2F0b3JzIHRvIGFsbG9jYXRlIG1lbW9yeQorCSAgUmVuYW1lIHRoZSBHc3RNZW1vcnlJbXBsIHRvIEdzdE1lbW9yeUFsbG9jYXRvciBiZWNhdXNlIHRoYXQncyByZWFsbHkgd2hhdCBpdCBpcy4KKwkgIEFkZCBhbiBhbGxvYyB2bWV0aG9kIHRvIHRoZSBhbGxvY2F0b3IgbWVtYmVycy4KKwkgIEltcHJvdmUgcmVnaXN0cmF0aW9uIG9mIGFsbG9jYXRvcnMuCisJICBBZGQgbWV0aG9kcyB0byBnZXQgYW5kIHNldCB0aGUgZGVmYXVsdCBhbGxvY2F0b3IKKwkgIEFsd2F5cyB1c2UgYW4gYWxsb2NhdG9yIHRvIGFsbG9jYXRlIG1lbW9yeSwgdXNlIHRoZSBkZWZhdWx0IGFsbG9jYXRvciB3aGVuIE5VTEwKKwkgIGlzIHBhc3NlZC4KKwkgIEFkZCB1c2VyX2RhdGEgdG8gdGhlIGFsbG9jYXRvciBJbmZvIHNvIHRoYXQgd2UgY2FuIHBhc3MgZXh0cmEgaW5mbyB0byB0aGUKKwkgIGFsbG9jYXRvciBuZXcgbWV0aG9kLgorCisyMDExLTA2LTA3IDEzOjAzOjI5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9kZXNpZ24vcGFydC1tZXRhLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtbmVnb3RpYXRpb24udHh0OgorCSAgZG9jczogbWlub3IgZml4IGFuZCBjbGFyaWZpY2F0aW9uCisKKzIwMTEtMDYtMDcgMTM6Mzg6MzUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RldmVudC5oOgorCSAgZXZlbnQ6IG1vdmUgc29tZSBtb3JlIGRlZmluZXMgb24gdG9wCisKKzIwMTEtMDYtMDcgMTM6MjU6MjYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RlbGVtZW50Lmg6CisJKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKKwkqIGdzdC9nc3RldmVudC5oOgorCSogZ3N0L2dzdG1lc3NhZ2UuaDoKKwkqIGdzdC9nc3RwYWQuaDoKKwkqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5oOgorCSogZ3N0L2dzdHV0aWxzLmM6CisJKiBnc3QvZ3N0dXRpbHMuaDoKKwkgIGZpeCBzb21lIGNpcmN1bGFyIGluY2x1ZGVzCisJICB0eXBlZGVmIHNvbWUgc3RydWN0cyBiZWZvcmUgaW5jbHVkaW5nIG90aGVyIGZpbGVzIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcworCSAgaW4gdGhlIGhlYWRlciBmaWxlcy4KKworMjAxMS0wNi0wNyAxMTowMTozNiArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgd2luMzI6IFVwZGF0ZSBmb3IgYWRkZWQvcmVtb3ZlZCBzeW1ib2xzCisKKzIwMTEtMDYtMDYgMTI6MjM6MDQgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy90ZWUuYzoKKwkgIGNoZWNrL3RlZTogUGFkcyBuZWVkIHRvIGJlIGFjdGl2YXRlZCBiZWZvcmUgY2FwcyBhcmUgc2V0CisJICBBbHNvIGFkZCBkZWJ1Z2dpbmcgdG8gZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24KKworMjAxMS0wNi0wNyAxMDo1MjowMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHV0aWxzLmM6CisJKiBnc3QvZ3N0dXRpbHMuaDoKKwkgIHV0aWxzOiByZW1vdmUgcHJveHlfc2V0Y2FwcworCSAgUmVtb3ZlIHByb3h5X3NldGNhcHMsIGVsZW1lbnRzIHNob3VsZCB1c2UgdGhlIGNhcHMgZXZlbnQgYW5kIGZvcndhcmQgY2FwcworCSAgdGhlbXNlbHZlcy4KKworMjAxMS0wNi0wNyAxMDo1MToyMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgorCSAgb3V0cHV0c2VsZWN0b3I6IGZpeCByZWZjb3VudGluZyBvZiBldmVudHMKKwkgIF9wYWRfZXZlbnRfZm9yd2FyZCgpIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgY2Fwcy4KKworMjAxMS0wNi0wNyAxMDo0OTozNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiBJbXByb3ZlIHBhZCBldmVudCBmb3J3YXJkIGNvZGUKKwkgIFJldHVybiBUUlVFIHdoZW4gdGhlIHBhZCBoYXMgbm8gcGFyZW50IG9yIHdoZW4gdGhlcmUgYXJlIG5vIGludGVybmFsbHkgbGlua2VkCisJICBwYWRzLgorCisyMDExLTA2LTA3IDEwOjA0OjUyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgorCSAgcGx1Z2luczogdXNlIHRoZSBjYXBzIGV2ZW50CisJICBVc2UgdGhlIGNhcHMgZXZlbnQgYW5kIGF2b2lkIHVzaW5nIHRoZSBzZXRjYXBzIGZ1bmN0aW9uLiBVc2Ugc29tZSBvZiB0aGUgbmV3IHBhZAorCSAgZm9yd2FyZCBmdW5jdGlvbnMgdG8gaW1wbGVtZW50IGRlc2lyZWQgYmVoYXZpb3VyLgorCisyMDExLTA2LTA3IDEwOjAyOjA2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkLmg6CisJICBwYWQ6IFJlbmFtZSBhbmQgcmV3b3JrIHRoZSBkaXNwYXRjaGVyIGZ1bmN0aW9uCisJICBSZW5hbWUgZ3N0X3BhZF9kaXNwYXRjaGVyKCkgdG8gZ3N0X3BhZF9mb3J3YXJkKCkgYW5kIG1ha2UgaXQgbW9yZSB1c2VmdWwgYnkKKwkgIGl0ZXJhdGluZyB0aGUgaW50ZXJuYWwgbGlua3Mgb2YgYSBwYWQgYW5kIGhhbmRsaW5nIHJlc3luYyBwcm9wZXJseS4KKwkgIEFkZCBhIG1ldGhvZCBnc3RfcGFkX2V2ZW50X2ZvcndhcmQoKSB0aGF0IHVuY29uZGl0aW9uYWxseSBmb3J3YXJkcyBhbiBldmVudCB0bworCSAgYWxsIGludGVybmFsbHkgbGlua2VkIHBhZHMuCisJICBVcGRhdGUgc29tZSBwYWQgY29kZSB0byB1c2UgdGhlIG5ldyBmb3J3YXJkIGZ1bmN0aW9uLgorCisyMDExLTA2LTA3IDA5OjQzOjIwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKKwkgIGNhcHM6IHVzZSB0aGUgY2FwcyBldmVudAorCSAgVXNlIHRoZSBjYXBzIGV2ZW50IGluc3RlYWQgb2YgZ3N0X3BhZF9zZXRfY2FwcygpIGFuZCB0aGUgc2V0Y2FwcyBmdW5jdGlvbgorCisyMDExLTA2LTA2IDE2OjExOjMxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1ibG9jay50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlci50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlcmxpc3QudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1jYXBzLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtZWxlbWVudC10cmFuc2Zvcm0udHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1ldmVudHMudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1nc3RlbGVtZW50LnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtZ3N0b2JqZWN0LnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtbGF0ZW5jeS50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LW1lc3NhZ2VzLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtbWV0YS50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LW5lZ290aWF0aW9uLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtb3ZlcnZpZXcudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1wcm9iZXMudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1zZWVraW5nLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtc2VnbWVudHMudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1zcGFyc2VzdHJlYW1zLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtc3RyZWFtcy50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LXN5bmNocm9uaXNhdGlvbi50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LXRyaWNrbW9kZXMudHh0OgorCSAgZG9jczogZ28gb3ZlciBkZXNpZ24gZG9jcyBhbmQgZml4IHRoaW5ncworCSAgUmVtb3ZlIGJ1ZmZlcmxpc3QgcGFydCwgaXQncyBtZXJnZWQgd2l0aCBwYXJ0LWJ1ZmZlci50eHQKKworMjAxMS0wNi0wNiAxMToyMToyMyArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3QuYzoKKwkgIGdzdDogQWRkIGVudW0vZmxhZ3MgKGRlKXJlZ2lzdHJhdGlvbiBpbiBnc3RfKGRlKWluaXQKKworMjAxMS0wNi0wNiAxMToyMDoyOSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJhc2VzaW5rOiBEb24ndCBhY2NlcHQgc2VnbWVudHMgYWZ0ZXIgRU9TCisJICBBbmQgcmVmYWN0b3IgdGhlIGNvZGUgc2xpZ2h0bHkgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvbi4KKwkgIFRoaXMgc29sdmVzIGEgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGJ5IGJkYmMwNjkzCisKKzIwMTEtMDYtMDYgMTA6Mjc6NTcgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzoKKwkgIGNoZWNrL2dob3N0cGFkOiBBY3RpdmF0ZSBwYWRzIGJlZm9yZSBjaGVja2luZyBmb3IgY2FwcyBmb3J3YXJkaW5nL3NldHRpbmcKKwkgIFRoaXMgaXMgbm93IGRvbmUgdmlhIGluLWJhbmQgZXZlbnRzLCBzbyB0aGUgcGFkcyBuZWVkIHRvIGJlIGFjdGl2ZQorCisyMDExLTA2LTA1IDE4OjExOjIyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKKwkqIGdzdC9nc3RidWZmZXIuaDoKKwkqIGdzdC9nc3RidWZmZXJwb29sLmg6CisJKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSogZ3N0L2dzdGV2ZW50Lmg6CisJKiBnc3QvZ3N0aXRlcmF0b3IuYzoKKwkqIGdzdC9nc3RtZW1vcnkuaDoKKwkqIGdzdC9nc3RtZXNzYWdlLmg6CisJKiBnc3QvZ3N0bWluaW9iamVjdC5oOgorCSogZ3N0L2dzdG9iamVjdC5oOgorCSogZ3N0L2dzdHBhZC5oOgorCSogZ3N0L2dzdHF1ZXJ5Lmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdHB1c2hzcmMuYzoKKwkgIGRvY3M6IHVwZGF0ZSBmb3IgQVBJIGNoYW5nZXMKKwkgIEFsc28gcmVtb3ZlIEdTVF9QQURfQ0hFQ0tHRVRSQU5HRUZVTkMgbWFjcm8KKworMjAxMS0wNi0wNSAxNTo0Njo1NCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKKworMjAxMS0wNi0wNCAxNTo0MjoxMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9wYXJzZS9NYWtlZmlsZS5hbToKKwkgIHBhcnNlOiBhZGQgcHJvdG90eXBlcyBmb3IgdW51c2VkIGZ1bmN0aW9ucyB0byBhdm9pZCBjb21waWxlciB3YXJuaW5nCisJICBUaGUgd2FybmluZyBpcyBuZXZlciBmYXRhbCwgYmVjYXVzZSB3ZSBkb24ndCB1c2UgLVdlcnJvciBmb3IgdGhlCisJICBwYXJzZXIgaGVscGVyIGxpYnJhcnkgYnVpbGQsIGJ1dCB0aGUgd2FybmluZ3MgYXJlIGFubm95aW5nIGFueXdheS4KKworMjAxMS0wNi0wNSAxNDoxMDo1MCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRvb2xzL01ha2VmaWxlLmFtOgorCSogdG9vbHMvZ3N0LXJ1bi5jOgorCSAgdG9vbHM6IHJlbW92ZSB1bnZlcnNpb25lZCBnc3QtbGF1bmNoLCBnc3QtaW5zcGVjdCBhbmQgZ3N0LXR5cGVmaW5kCisJICBUaGUgdW52ZXJzaW9uZWQgdG9vbCB3cmFwcGVycyBhcmUgY29uZnVzaW5nIGFuZCBhbm5veWluZyBmb3IgcGFja2FnZXJzLAorCSAgdXNlcnMgYW5kIGRldmVsb3BlcnMgYWxpa2UuIEEgZ3N0LWxhdW5jaCBwaXBlbGluZSB0aGF0IHdvcmtzIGluIDAuMTAKKwkgIHdpbGwgbGlrZWx5IG5vdCB3b3JrIGluIDAuMTEgKGUuZy4gYmVjYXVzZSBlbGVtZW50cyBvciBwcm9wZXJ0aWVzIGdldAorCSAgcmVuYW1lZCwgb3Igc3ludGF4IGNoYW5nZXMpLiBUaGUgdW52ZXJzaW9uZWQgdG9vbHMgYWxzbyB5aWVsZCB1c2VsZXNzCisJICByZXN1bHRzIHdoZW4gdXNlZCB3aXRoIGdkYiBvciB2YWxncmluZC4gUGFja2FnZXJzIG5lZWQgdG8gY28tb3JkaW5hdGUKKwkgIHRoZSBwYWNrYWdpbmcgb2YgYWxsIG1ham9yIHZlcnNpb25zIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gY29uZmxpY3RzCisJICB3aGVuIGJvdGggdHJ5IHRvIGluc3RhbGwgdGhlIHNhbWUgZmlsZXMuIFdoZW4gdHdvIG1ham9yIHZlcnNpb25zIGFyZQorCSAgaW4gdXNlIChlLmcuIDAuMTAgYW5kIDAuMTEvMS4wKSwgaXQgbWF5IGJlIHVuY2xlYXIgKHdoZW4gbG9va2luZyBhdAorCSAgdGhpbmdzIG9uIElSQy9wYXN0ZWJpbi9tYWlsaW5nIGxpc3QgZXRjLikgd2hpY2ggdmVyc2lvbiBpcyBhY3R1YWxseQorCSAgYmVpbmcgdXNlZCB3aGVuIHRoZXJlIGFyZSB1bnZlcnNpb25lZCB3cmFwcGVycy4gRm9yIGFsbCB0aGVzZSByZWFzb25zLAorCSAgaXQgc2VlbXMgYmVzdCB0byBqdXN0IHJlbW92ZSB0aGVtIGZvciBub3cuCisKKzIwMTEtMDYtMDQgMTY6MDQ6MzUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmM6CisJKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmg6CisJKiB3aW4zMi9jb21tb24vZ3N0bWFyc2hhbC5jOgorCSogd2luMzIvY29tbW9uL2dzdG1hcnNoYWwuaDoKKwkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIHdpbjMyOiB1cGRhdGUgZXhwb3J0cyBhbmQgb3RoZXIgdGhpbmdzCisKKzIwMTEtMDYtMDQgMTU6NDQ6MzkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmUucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kYS5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZWwucG86CisJKiBwby9lbl9HQi5wbzoKKwkqIHBvL2VzLnBvOgorCSogcG8vZXUucG86CisJKiBwby9maS5wbzoKKwkqIHBvL2ZyLnBvOgorCSogcG8vZ2wucG86CisJKiBwby9odS5wbzoKKwkqIHBvL2lkLnBvOgorCSogcG8vaXQucG86CisJKiBwby9qYS5wbzoKKwkqIHBvL2x0LnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3BsLnBvOgorCSogcG8vcHRfQlIucG86CisJKiBwby9yby5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vcncucG86CisJKiBwby9zay5wbzoKKwkqIHBvL3NsLnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkgIHBvOiB1cGRhdGUgZm9yIG5ldyB0cmFuc2xhdGFibGUgc3RyaW5nIGFuZCByZW1vdmVkIHN0cmluZ3MKKworMjAxMS0wNi0wNCAxNToyMzo1NiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RfcHJpdmF0ZS5oOgorCSogZ3N0L2dzdGluZm8uYzoKKwkgIGluZm86IHJlbW92ZSBHU1RfWE1MIGRlYnVnIGNhdGVnb3J5IGFzIHdlbGwKKworMjAxMS0wNi0wNCAxNToyMjowNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIEFuZHJvaWQubWs6CisJKiBNYWtlZmlsZS5hbToKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6CisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L01ha2VmaWxlLmFtOgorCSogZ3N0L2dzdGNvbmZpZy5oLmluOgorCSogZ3N0L3BhcnNlL01ha2VmaWxlLmFtOgorCSogZ3N0cmVhbWVyLnNwZWMuaW46CisJKiBwa2djb25maWcvZ3N0cmVhbWVyLXVuaW5zdGFsbGVkLnBjLmluOgorCSogcGtnY29uZmlnL2dzdHJlYW1lci5wYy5pbjoKKwkqIHBsdWdpbnMvaW5kZXhlcnMvTWFrZWZpbGUuYW06CisJKiBwbHVnaW5zL2luZGV4ZXJzL2dzdGluZGV4ZXJzLmM6CisJKiBwbHVnaW5zL2luZGV4ZXJzL2dzdGluZGV4ZXJzLmg6CisJKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL2NoZWNrL2dzdC8uZ2l0aWdub3JlOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHhtbC5jOgorCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9hcm0uaDoKKwkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfaHBwYS5oOgorCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9pMzg2Lmg6CisJKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3BwYzMyLmg6CisJKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3BwYzY0Lmg6CisJKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3NwYXJjLmg6CisJKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3g4Nl82NC5oOgorCSogdGVzdHMvZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlLmFtOgorCSogdG9vbHMvLmdpdGlnbm9yZToKKwkqIHRvb2xzL01ha2VmaWxlLmFtOgorCSogdG9vbHMvZ3N0LWxhdW5jaC4xLmluOgorCSogdG9vbHMvZ3N0LXhtbGxhdW5jaC4xLmluOgorCSAgUmVtb3ZlIGV2ZXJ5dGhpbmcgbGlieG1sMi0gYW5kIGxvYWRzYXZlLXJlbGF0ZWQKKworMjAxMS0wNi0wNCAxNDo0MToxNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKKwkqIHRvb2xzL2dzdC1sYXVuY2guYzoKKwkgIHRvb2xzOiByZW1vdmUgU0lHVVNSKiBoYW5kbGluZyBmcm9tIGdzdC1sYXVuY2gKKwkgIFJlbW92ZSBTSUdVU1IqIGhhbmRsaW5nIGZyb20gZ3N0LWxhdW5jaCwgc2luY2UgaXQgbWlnaHQgaW50ZXJmZXJlCisJICB3aXRoIG90aGVyIHRoaW5ncyAoZS5nLiBsaWJsZWFrcyksIGFuZCBzaG91bGQgYmUgZG9uZSBkaWZmZXJlbnRseQorCSAgYW55d2F5IChlaXRoZXIgdmlhIHN1cHBvcnQgZm9yIHNpbXBsZSB0aW1lZC1jb21tYW5kcyBzY3JpcHRpbmcgb3IKKwkgIHJlbW90ZSBjb250cm9sIHZpYSBEQnVzIG9yIHNvKS4KKworMjAxMS0wNi0wNCAxNDoyODowOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdHJlYW1lci5zcGVjLmluOgorCSogdG9vbHMvLmdpdGlnbm9yZToKKwkqIHRvb2xzL0JVR1M6CisJKiB0b29scy9NYWtlZmlsZS5hbToKKwkqIHRvb2xzL1JFQURNRToKKwkqIHRvb2xzL2dzdC14bWxpbnNwZWN0LjEuaW46CisJKiB0b29scy9nc3QteG1saW5zcGVjdC5jOgorCSogdG9vbHMveG1sMnRleHQueHNsOgorCSAgdG9vbHM6IHJlbW92ZSBnc3QteG1saW5zcGVjdAorCSAgUGVvcGxlIHNob3VsZCBqdXN0IHF1ZXJ5IHRoZSByZWdpc3RyeSB0aGVtc2VsdmVzIG9yIHdyaXRlIGEgc21hbGwKKwkgIHB5dGhvbiBzY3JpcHQgaWYgdGhleSBuZWVkIHRoaXMgZnVuY3Rpb25hbGl0eSAod2hpY2ggaXMgbGlrZWx5CisJICBsZXNzIHdvcmsgdGhhbiBwYXJzaW5nIHRoZSBYTUwgdGhhdCB0aGlzIHNjcmlwdCBvdXRwdXRzLCBhbmQgSSdtCisJICBub3QgYXdhcmUgb2YgYW55dGhpbmcgdXNpbmcgdGhlIHhtbDJ0ZXh0IHhzbCBlaXRoZXIpLgorCisyMDExLTA2LTA0IDE0OjIyOjA1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9mYXEvdXNpbmcueG1sOgorCSogZ3N0cmVhbWVyLnNwZWMuaW46CisJKiB0b29scy8uZ2l0aWdub3JlOgorCSogdG9vbHMvTWFrZWZpbGUuYW06CisJKiB0b29scy9nc3QtZmVlZGJhY2stbS5tOgorCSogdG9vbHMvZ3N0LWZlZWRiYWNrLjEuaW46CisJICB0b29sczogcmVtb3ZlIGdzdC1mZWVkYmFjaworCSAgSXQncyBub3QgcmVhbGx5IHRoYXQgdXNlZnVsLCBhbmQgbm8gb25lJ3MgYmVlbiB1c2luZyBpdCBmb3IgeWVhcnMuCisKKzIwMTEtMDYtMDQgMTQ6MTM6MDcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6CisJKiB0b29scy9nc3QtaW5zcGVjdC5jOgorCSogdG9vbHMvZ3N0LXhtbGluc3BlY3QuYzoKKwkgIHRvb2xzLCB0ZXN0czogZml4IHNvbWUgdW51c2VkLWJ1dC1zZXQtdmFyaWFibGUgY29tcGlsZXIgd2FybmluZ3MKKworMjAxMS0wNi0wNCAxNDowMjoyMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBvL2FmLnBvOgorCSogcG8vYXoucG86CisJKiBwby9iZS5wbzoKKwkqIHBvL2JnLnBvOgorCSogcG8vY2EucG86CisJKiBwby9jcy5wbzoKKwkqIHBvL2RhLnBvOgorCSogcG8vZGUucG86CisJKiBwby9lbC5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZXMucG86CisJKiBwby9ldS5wbzoKKwkqIHBvL2ZpLnBvOgorCSogcG8vZnIucG86CisJKiBwby9nbC5wbzoKKwkqIHBvL2h1LnBvOgorCSogcG8vaWQucG86CisJKiBwby9pdC5wbzoKKwkqIHBvL2phLnBvOgorCSogcG8vbHQucG86CisJKiBwby9uYi5wbzoKKwkqIHBvL25sLnBvOgorCSogcG8vcGwucG86CisJKiBwby9wdF9CUi5wbzoKKwkqIHBvL3JvLnBvOgorCSogcG8vcnUucG86CisJKiBwby9ydy5wbzoKKwkqIHBvL3NrLnBvOgorCSogcG8vc2wucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJKiBwby96aF9DTi5wbzoKKwkqIHBvL3poX1RXLnBvOgorCSAgcG86IHVwZGF0ZSBmb3IgbmV3IHRyYW5zbGF0YWJsZSBzdHJpbmcKKworMjAxMS0wNi0wNCAwMDozMDoxNSAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkqIGdzdC9nbGliLWNvbXBhdC1wcml2YXRlLmg6CisJKiBnc3QvZ3N0YXRvbWljcXVldWUuYzoKKwkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgorCSogZ3N0L2dzdHBvbGwuYzoKKwkqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgorCSogZ3N0L2dzdHV0aWxzLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkqIHRlc3RzL2JlbmNobWFya3MvZ3N0Y2xvY2tzdHJlc3MuYzoKKwkgIFdvcmsgYXJvdW5kIGNoYW5nZXMgaW4gZ19hdG9taWMgQVBJCisJICBTZWUgIzY1MTUxNCBmb3IgZGV0YWlscy4gIEl0J3MgYXBwYXJlbnRseSBpbXBvc3NpYmxlIHRvIHdyaXRlIGNvZGUKKwkgIHRoYXQgYXZvaWRzIGJvdGggdHlwZSBwdW5uaW5nIHdhcm5pbmdzIHdpdGggb2xkIGdfYXRvbWljIGhlYWRlcnMgYW5kCisJICBhc3NlcnRpb25zIGluIHRoZSBuZXcuICBUaHVzLCBtYWNyb3MgYW5kIGEgdmVyc2lvbiBjaGVjay4KKworMjAxMS0wNi0wMyAxODoxMDoyNCArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuaDoKKwkgIGdzdHBhZDogU21hbGwgZG9jIGZpeHVwCisKKzIwMTEtMDYtMDMgMTU6NTM6MjEgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgorCisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIHdpbjMyOiBVcGRhdGUgLmRlZiBmb3IgbGF0ZXN0IEFQaSBjaGFuZ2VzCisKKzIwMTEtMDYtMDMgMTc6MjQ6NDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuaDoKKwkgIHBhZDogY2xlYW4gdXAgcHJvYmUgZmxhZ3MKKworMjAxMS0wNi0wMyAxNzoyNDoyMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9kZXNpZ24vcGFydC1wcm9iZXMudHh0OgorCSAgZG9jczogZmlyc3QgdmVyc2lvbiBvZiBwcm9iZXMgZG9jdW1lbnQKKworMjAxMS0wNi0wMyAxNjo0NjoyNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiBjaGVjayBmbHVzaGluZyBpbiBwdWxscmFuZ2UgdG9vCisKKzIwMTEtMDYtMDMgMTM6NTY6MDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogY2xlYW51cHMKKwkgIFVzZSBkZWZpbmVzIGluc3RlYWQgb2YgaGFyZGNvZGVkIHZhbHVlcyBmb3IgbWFza3MuCisKKzIwMTEtMDYtMDMgMTM6MjU6NTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkgIHN0cnVjdHVyZTogZml4IHNvbWUgbW9yZSAwLjExIGZpeG1lcworCSAgZG9uJ3QgYWxsb3cgc3BhY2VzIGluIHN0cnVjdHVyZSBuYW1lcyBhbmQgZml4IHVuaXQgdGVzdHMuCisKKzIwMTEtMDYtMDMgMTI6NDM6MzIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZGVzaWduL2RyYWZ0LWFsbG9jYXRpb24udHh0OgorCSogZG9jcy9kZXNpZ24vZHJhZnQtYnVmZmVycG9vbC50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlcnBvb2wudHh0OgorCSAgZG9jczogdXBkYXRlIGJ1ZmZlcnBvb2wgZGVzaWduIGRvYworCSAgTW92ZSB0aGUgYnVmZmVycG9vbCBkZXNpZ24gZG9jIGZyb20gZHJhZnQgdG8gcGFydCBhbmQgbWVyZ2UgaXQgd2l0aAorCSAgdGhlIGFsbG9jYXRpb24gZHJhZnQuCisKKzIwMTEtMDYtMDMgMTI6NDA6NTYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXJwb29sLmM6CisJKiBnc3QvZ3N0YnVmZmVycG9vbC5oOgorCSAgYnVmZmVycG9vbDogbWFrZSB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgdG8gd2FpdAorCSAgVGhlIG1vc3QgY29tbW9uIGNhc2UgaXMgdG8gbm90IHNwZWNpZnkgYW55IGZsYWdzIHdoZW4gZG9pbmcgdGhlIGFsbG9jYXRpb24uIE1ha2UKKwkgIHRoZSBhbGxvY2F0aW9uIGZyb20gYSBwb29sIHdpdGggYSBtYXhpbXVtIGFtb3VudCBvZiBidWZmZXJzIGJsb2NrIGJ5IGRlZmF1bHQgZm9yCisJICB0aGlzIHJlYXNvbi4KKworMjAxMS0wNi0wMyAxMToxNTozMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKKwkgIGRvY3M6IHVwZGF0ZSBwb3J0aW5nIGRvYworCisyMDExLTA2LTAyIDE5OjI0OjI2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiB1c2UgY2FwcyBldmVudCBpbnN0ZWFkIG9mIHNldGNhcHMKKworMjAxMS0wNi0wMiAxOToyMzo0NyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGdob3N0cGFkLmM6CisJKiBnc3QvZ3N0Z2hvc3RwYWQuaDoKKwkgIGdob3N0cGFkOiByZW1vdmUgc2V0Y2FwcyBmdW5jdGlvbnMKKwkgIFJlbW92ZSB0aGUgc2V0Y2FwcyBmdW5jdGlvbnMsIGl0IGlzIG5vdyBoYW5kbGVkIHdpdGggdGhlIGNhcHMgZXZlbnQuCisKKzIwMTEtMDYtMDIgMTg6Mjg6NTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkgIGJ1ZmZlcjogcGFzcyB0aGUgcmlnaHQgYWxpZ25tZW50CisKKzIwMTEtMDYtMDIgMTg6Mjg6MTcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RtZW1vcnkuYzoKKwkgIG1lbW1vcnk6IHNtYWxsIGNsZWFudXAKKworMjAxMS0wNi0wMiAxODoxMzozMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdG1lbW9yeS5jOgorCSAgbWVtb3J5OiBmaXggYWxpZ25tZW50IGNhbGN1bGF0aW9ucworCSAgRml4IHRoZSBhbGlnbm1lbnQgY2FsY3VsYXRpb24uCisJICBJbXByb3ZlIGRvY3VtZW50YXRpb24uCisKKzIwMTEtMDYtMDIgMTg6MTM6MTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXJwb29sLmM6CisJICBwb29sOiBkZWJ1ZyB0aGUgY29uZmlnCisKKzIwMTEtMDYtMDIgMTU6Mzg6NDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R1dGlscy5oOgorCSAgdXRpbHM6IHJlbW92ZSBzb21lIG1hY3JvcyBub3cgaW4gZ2xpYgorCSAgV2UgZGVwZW5kIG9uIHRoZSByaWdodCBnbGliIG5vdworCisyMDExLTA2LTAyIDE1OjM4OjI5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJICBzdHJ1Y3R1cmU6IGZpeCBhIEZJWE1FCisKKzIwMTEtMDYtMDIgMTU6Mzg6MDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R1dGlscy5jOgorCSAgdXRpbHM6IHVzZSBnX3ByaW50ZXJyKCkgYXMgc3RhdGVkIGluIHRoZSBGSVhNRQorCisyMDExLTA2LTAyIDE1OjM3OjQxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSAgZWxlbWVudDogc21hbGwgY2xlYW51cHMKKworMjAxMS0wNi0wMiAxNDowOTo0NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3RlbGVtZW50Lmg6CisJICBlbGVtZW50OiBpbmxpbmUgdGhlIHJlY3Vyc2ljZSBzdGF0ZSBsb2NrCisKKzIwMTEtMDYtMDIgMTM6NDY6MjYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RwYWQuaDoKKwkgIHBhZDogaW5saW5lIHRoZSByZWN1cnNpdmUgc3RyZWFtIGxvY2sKKworMjAxMS0wNi0wMiAxMzozNTo1MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5oOgorCSAgcGFkOiByZW1vdmUgdW51c2VkIGZpZWxkcyBhbmQgbWV0aG9kcyBhbmQgc2lnbmFscworCisyMDExLTA2LTAyIDEzOjIzOjUzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IHVzZSBuZXcgZ3N0X3ZhbHVlX2ZpeGF0ZSBpbnN0ZWFkCisJICBVc2UgdGhlIG5ldyBnc3RfdmFsdWVfZml4YXRlKCkgZnVuY3Rpb24gaW5zdGVhZCBvZiBvdXIgb3duIHZlcnNpb24uCisKKzIwMTEtMDYtMDIgMTM6MjE6NTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R2YWx1ZS5jOgorCSogZ3N0L2dzdHZhbHVlLmg6CisJICB2YWx1ZTogYWRkIGZ1bmN0aW9uIHRvIGZpeGF0ZSBhIHZhbHVlCisJICBBZGQgYSBmdW5jdGlvbiB0byBmaXhhdGUgYSBHVmFsdWUuIFRoaXMgaXMgdGhlIHNhbWUgZnVuY3Rpb24gYXMgaXMgaW4gR3N0UGFkLgorCisyMDExLTA2LTAyIDEzOjE4OjM5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSogZ3N0L2dzdGNhcHMuaDoKKwkgIGNhcHM6IHJlbW92ZSBzb21lIGN1c3RvbSByZWZjb3VudGluZyBtZXRob2RzCisJICBSZW1vdmUgc29tZSBjdXN0b20gbWFkZSByZWZjb3VudGluZyBtZXRob2RzIGFuZCB1c2UgdGhlIG1pbmlvYmplY3Qgb25lcyBpbnN0ZWFkLgorCisyMDExLTA2LTAyIDEyOjQwOjA1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IG9wdGltaXplIGxpbmtpbmcKKwkgIE9wdGltaXplIGxpbmtpbmcgYnkgb25seSByZWxlYXNpbmcgdGhlIHBhZCBsb2NrcyB3aGVuIHRoZXJlIGFyZSBsaW5rIGZ1bmN0aW9ucworCSAgaW5zdGFsbGVkIG9uIHRoZSBwYWRzLgorCSAgQWRkIHNvbWUgR19MSUtFTFkgaGVyZSBhbmQgdGhlcmUuCisJICBNb3ZlIGVycm9yIHBhdGhzIG91dCBvZiB0aGUgbWFpbiBjb2RlIGZsb3cuCisKKzIwMTEtMDYtMDIgMTI6Mzk6MzQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RwYWQuaDoKKwkgIHBhZDogcmVtb3ZlIGRlcHJlY2F0ZWQgaGF2ZS1kYXRhIHNpZ25hbAorCisyMDExLTA2LTAyIDExOjIxOjA5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IGFkZCBpZGxlIHByb2JlIGZvciBwdWxsIG1ldGhvZCB0b28KKworMjAxMS0wNi0wMiAxMTowMTozMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiBtb3JlIGNsZWFudXBzCisJICBVc2UgbWluaW9iamVjdCB1bnJlZiB3aGVuIHdlIGNhbgorCSAgUmV1c2UgZXhpc3RpbmcgZGF0YSB0eXBlIGlkZW50aWZpZXIgaW5zdGVhZCBvZiBhbiBleHRyYSBib29sZWFuLgorCisyMDExLTA2LTAxIDE5OjQ3OjEwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCisJICBDb25mbGljdHM6CisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmMKKworMjAxMS0wNi0wMSAxOToyNzo1NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5oOgorCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc2VsZWN0b3IuYzoKKwkqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc2lua3MuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzoKKwkqIHRlc3RzL2NoZWNrL2xpYnMvYmFzZXNyYy5jOgorCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3F1ZXVlLWVycm9yLmM6CisJICBwYWQ6IGZ1cnRoZXIgaW1wcm92ZSBwcm9iZXMgYW5kIHBhZCBibG9ja2luZworCSAgS2VlcCB0cmFjayBvZiBpbnN0YWxsZWQgbnVtYmVyIG9mIHByb2JlcyB0byBzaG9ydGN1dCBlbWlzc2lvbi4KKwkgIEFsbG93IE5VTEwgY2FsbGJhY2tzLCB0aGlzIGlzIHVzZWZ1bCBmb3IgYmxvY2tpbmcgcHJvYmVzLgorCSAgSW1wcm92ZSBwcm9iZSBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIG1hc2ssIGFuIGVtcHR5IG1hc2sgZm9yIHRoZSBkYXRhIG9yIHRoZQorCSAgc2NoZWR1bGluZyBmbGFncyBlcXVhbHMgdGhhdCBhbGwgcHJvYmVzIG1hdGNoLgorCSAgQWRkIHNvbWUgbW9yZSBkZWJ1ZyBpbmZvLgorCSAgRG9uJ3QgY2hlY2sgdGhlIGZsdXNoaW5nIGZsYWcgaW4gdGhlIHByb2JlIGNhbGxiYWNrIGhhbmRsZXIsIHRoaXMgbmVlZHMgdG8gYmUKKwkgIGRvbmUgYmVmb3JlIGNhbGxpbmcgdGhlIGhhbmRsZXIuCisJICBGaXggYmxvY2tpbmcgcHJvYmVzLgorCSAgRml4IHVuaXQgdGVzdHMKKworMjAxMS0wNS0zMSAxOToxNjowOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5oOgorCSogZ3N0L2dzdHV0aWxzLmM6CisJKiBnc3QvZ3N0dXRpbHMuaDoKKwkqIGxpYnMvZ3N0L2NoZWNrL2dzdGJ1ZmZlcnN0cmF3LmM6CisJKiBsaWJzL2dzdC9jaGVjay9nc3Rjb25zaXN0ZW5jeWNoZWNrZXIuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzoKKwkgIHBhZDogaW1wbGVtZW50IHBhZCBibG9jayB3aXRoIHByb2JlcworCisyMDExLTA1LTMwIDE5OjAzOjM4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkqIGdzdC9nc3R1dGlscy5oOgorCSogbGlicy9nc3QvY2hlY2svZ3N0YnVmZmVyc3RyYXcuYzoKKwkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNvbnNpc3RlbmN5Y2hlY2tlci5jOgorCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc2VsZWN0b3IuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzoKKwkqIHRlc3RzL2NoZWNrL2xpYnMvYmFzZXNyYy5jOgorCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3F1ZXVlLWVycm9yLmM6CisJICB1dGlsczogcmVtb3ZlIF9mdWxsIHZhcmlhbnRzIG9mIHByb2JlcworCSAgUmVtb3ZlIHRoZSBfZnVsbCB2YXJpYW50cyBhbmQgYWRkIHRoZSBkZXN0cm95IG5vdGlmeSB0byB0aGUgcmVndWxhciBtZXRob2RzLgorCisyMDExLTA2LTAxIDE1OjI5OjIwICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9hcm0uaDoKKwkgIGNoZWNrL2FiaTogSWdub3JlIEdzdFhNTCogb24gYXJtIHdoZW4gbm90IHByZXNlbnQKKworMjAxMS0wNS0zMSAxODozMTo1MyArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBiYXNldHJhbnNmb3JtOiBVc2UgbG9jYWwgcHJpdiB2YXJpYWJsZSBpbnN0ZWFkIG9mIHRyYW5zLT5wcml2CisKKzIwMTEtMDUtMzEgMTg6MzA6NTAgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGdzdC9nc3RzZWdtZW50LmM6CisJICBnc3RzZWdtZW50OiBSZW1vdmUgZGVhZCBhc3NpZ25tZW50CisJICBiYXNlIGlzIHVuY29uZGl0aW9uYWxseSB3cml0dGVuIGEgY291cGxlIG9mIGxpbmVzIGJlbG93CisKKzIwMTEtMDUtMzEgMTg6MzA6MzAgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGdzdC9nc3RiaW4uYzoKKwkqIGdzdC9nc3RidWZmZXJwb29sLmM6CisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgZ3N0OiBSZW1vdmUgb2J2aW91cyBkZWFkIGFzc2lnbm1lbnRzCisKKzIwMTEtMDUtMzEgMTM6NDM6NDcgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6CisJICBvdXRwdXRzZWxlY3RvcjogUmVtb3ZlIGRlYWQgYXNzaWdubWVudAorCisyMDExLTA1LTMwIDE4OjI5OjA2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkLmg6CisJKiB0ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiBSZXdvcmsgcGFkIGJsb2NraW5nLCBhbm90aGVyIGF0dGVtcHQKKwkgIE1ha2UgdGhlIFBhZEJsb2NrIGNhbGxiYWNrIHRha2UgYSBHc3RCbG9ja1R5cGUgcGFyYW1ldGVyIHRvIGhhbmRsZSB0aGUgZGlmZmVyZW50CisJICBraW5kIG9mIHN0YWdlcyBpbiB0aGUgcGFkIGJsb2NrLiBUaGlzIHByb3ZpZGVzIGZvciBtb3JlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CisJICBpbiB0aGUgcGFkIGJsb2NrIEFQSS4KKwkgIFNlcGFyYXRlIGJsb2NraW5nIGFuZCB1bmJsb2NraW5nIGludG8gZGlmZmVyZW50IG1ldGhvZHMsIG9ubHkgYmxvY2tpbmcgY2FuIGRvIGEKKwkgIGNhbGxiYWNrLCB1bmJsb2NrIGlzIGFsd2F5cyBpbW1lZGlhdGVseS4gQWxzbyByZW1vdmVkIHN5bmNocm9ub3VzIGJsb2NraW5nLCBpdAorCSAgY2FuIGFsd2F5cyBiZSBpbXBsZW1lbnRlZCB3aXRoIGEgY2FsbGJhY2suCisKKzIwMTEtMDUtMzAgMTM6NDA6MDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzaW5rLmM6CisJKiB0ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKKwkgIFJldmVydCAicGFkOiByZXdvcmsgcGFkIGJsb2NraW5nLCBmaXJzdCBwYXJ0IgorCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA0MTVkYTg5ZjNjOWZlNDZmYzMzNjEyMzZkZjlhM2I3NmU2MDdlMTM4LgorCSAgQ29uZmxpY3RzOgorCSAgZ3N0L2dzdHBhZC5jCisKKzIwMTEtMDUtMzAgMTI6Mjc6MzEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogaW1wcm92ZSBkZWJ1Z2dpbmcKKworMjAxMS0wNS0zMCAxMTozMzo1NyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkqIGdzdC9nc3R2YWx1ZS5jOgorCSAgdmFsdWU6IENvbnNpZGVyICIxIiBhbmQgInsxfSIgYXMgZXF1YWwgaW4gZ3N0X3ZhbHVlX2NvbXBhcmUoKQorCSAgUHJldmlvdXNseSB0aGlzIHdhcyBvbmx5IGRvbmUgaW4gdGhlIGlzX3N1YnNldCgpIGNoZWNrIGJ1dAorCSAgaGF2aW5nIGl0IG9ubHkgdGhlcmUgYnJpbmdzIHVzIGludG8gZGVmaW5pdGlvbi1oZWxsIHdoZXJlCisJICAiMSIgYW5kICJ7MX0iIGFyZSBzdWJzZXQgb2YgZWFjaCBvdGhlciBidXQgbm90IGVxdWFsLgorCisyMDExLTA1LTMwIDA3OjQ0OjUwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgorCSAgZ3N0LWxhdW5jaDogRG9uJ3QgYWNjZXNzIHRoZSBHc3RNZXNzYWdlIHN0cnVjdHVyZSBkaXJlY3RseQorCisyMDExLTA1LTMwIDA3OjQxOjEzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQorCisyMDExLTA1LTMwIDA3OjM2OjU4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYzoKKwkgIGNhcHM6IEZpeCBzdWJzZXQgY2hlY2sgZm9yIGVxdWl2YWxlbnQgbGlzdHMgYW5kIHNjYWxhciB2YWx1ZXMKKwkgIEZvciBleGFtcGxlICJ7IDEgfSIgYW5kICIxIiBhcmUgbm90IHN0cmljdGx5IGVxdWFsIGJ1dAorCSAgYm90aCBhcmUgYSBzdWJzZXQgb2YgZWFjaCBvdGhlci4gQWxzbyBhZGQgYSB1bml0IHRlc3QKKwkgIGZvciB0aGlzLgorCisyMDExLTA1LTI5IDE5OjI4OjM0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9mYXEvZ2VuZXJhbC54bWw6CisJICBkb2NzOiBmaXggYnVnemlsbGEgVVJMCisJICBodHBwIC0+IGh0dHAKKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTEzNjIKKworMjAxMS0wNS0yOCAxMDoyNDozNyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSAgZG9jczogeHJlZnMgbW9yZSBhcGkgYXJvdW5kIEdzdFN0YXRlQ2hhbmdlIGFuZCBHc3RTdGF0ZUNoYW5nZVJldHVybi4KKworMjAxMS0wNS0yOCAwOTo1MTo0NSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0bWVzc2FnZS5oOgorCSAgZG9jczogeHJlZiB0aGUgYXN5bmMgbWVzc2FnZXMgdG8gR3N0U3RhdGVDaGFuZ2UKKworMjAxMS0wNS0yNyAxNzoyMDo1NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmFrZXNpbmsuYzoKKwkqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc2lua3MuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiByZXdvcmsgcGFkIGJsb2NraW5nLCBmaXJzdCBwYXJ0CisJICBNYWtlIHBhZCBibG9jayBjYWxsIHRoZSBjYWxsYmFjayBhcyBzb29uIGFzIHRoZSBwYWQgaXMgbm90IGluIHVzZS4gVGhpcyBtYWtlcyBpdAorCSAgcG9zc2libGUgdG8gbWFrZSBzdXJlIHRoYXQgd2hlbiB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkLCBubyBhY3Rpdml0eSBpcyBoYXBwZW5pbmcKKwkgIG9uIHRoZSBwYWQgYW5kIHRoYXQgbm8gYWN0aXZpdHkgd2lsbCBldmVyIGhhcHBlbiB1bnRpbCB0aGUgcGFkIGlzIHVuYmxvY2tlZAorCSAgYWdhaW4uIFRoaXMgbWFrZXMgcGFkIGJsb2NraW5nIHdvcmsgd2hlbiB0aGVyZSBpcyBubyBkYXRhZmxvdyBvciBhZnRlciBFT1MgYW5kCisJICBncmVhdGx5IGhlbHBzIGR5bmFtaWMgcGlwZWxpbmVzLgorCSAgTW92ZSB0aGUgcHJvYmUgaGFuZGxpbmcgcmlnaHQgd2hlcmUgd2Ugd2FpdCBvbiB0aGUgcGFkIGJsb2NrLiBUaGUgdHdvIGFyZQorCSAgcmVsYXRlZCBidXQgbm90IHRoZSBzYW1lIGFuZCB0aGUgcHJvYmUgY2FuIGV2ZW50dWFsbHkgaW5mbHVlbmNlIHRoZSBwYWQKKwkgIGJsb2NraW5nIGFzIHdlJ2xsIHNlIGxhdGVyLgorCSAgRml4IHVwIHNvbWUgYnJva2VuIHVuaXQgdGVzdHMgb3IgdGVzdHMgdGhhdCBmYWlsIHdpdGggdGhlIG5ldyBiZWhhdmlvdXIuCisKKzIwMTEtMDUtMjcgMTc6MTg6MDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogdGVzdHMvY2hlY2svbGlicy9iYXNlc3JjLmM6CisJICBiYXNlc3JjOiByZW1vdmUgZGVwcmVjYXRlZCBjbGVhbiBzaHV0ZG93biBtZXRob2QKKworMjAxMS0wNS0yNyAxNDowMDo1NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKKwkgIHRlZTogZGVhY3RpdmF0ZSB0aGUgcGFkIGFmdGVyIHJlbW92aW5nIGl0CisJICBXaGVuIHJlbGVhc2luZyB0aGUgcmVxdWVzdCBwYWQsIGZpcnN0IHJlbW92ZSBpdCBmcm9tIHRoZSBlbGVtZW50IGFuZCB0aGVuCisJICBkZWFjdGl2YXRlIGl0LiBJZiB3ZSBkbyBpdCB0aGUgb3RoZXIgd2F5IGFyb3VuZCwgYSBnc3RfcGFkX3B1c2ggb24gdGhlIGVsZW1lbnQKKwkgIG1pZ2h0IHJldHVybiB3cm9uZy1zdGF0ZSBiZWZvcmUgd2UgaGFkIGEgY2hhbmNlIHRvIGRldGVjdCB0aGUgcmVtb3ZlZCBwYWQgaW4gdGhlCisJICBjaGFpbiBmdW5jdGlvbi4KKworMjAxMS0wNS0yNyAxNToxNDozMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRvb2xzL2dzdC1sYXVuY2guYzoKKwkgIHRvb2xzOiBjYXRjaCBhbmQgcHJpbnQgbWlzc2luZy1wbHVnaW4gbWVzc2FnZXMgaW4gZ3N0LWxhdW5jaAorCSAgU28gdGhhdCB1c2VycyBnZXQgc29tZSBmZWVkYmFjayBpZiB0aGV5J3JlIHVzaW5nIGEgcGlwZWxpbmUKKwkgIGxpa2UgIHNyYyAhIGRlY29kZWJpbjIgISBzaW5rICBhbmQgYXJlIG1pc3NpbmcgYW4gZWxlbWVudC4KKworMjAxMS0wNS0yNyAxNDowMjowMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgYmFzZXNyYzogRml4IGZvciBTRUdNRU5UIGV2ZW50IEFQSSBjaGFuZ2VzCisKKzIwMTEtMDUtMjcgMTM6NTg6MjYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCisKKzIwMTEtMDUtMjcgMTM6NTU6MzEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdGNhcHMuYzoKKwkqIGdzdC9nc3RjYXBzLmg6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGNhcHM6IEFkZCBnc3RfY2Fwc19pc19zdWJzZXRfc3RydWN0dXJlKCkKKwkgIEFQSTogZ3N0X2NhcHNfaXNfc3Vic2V0X3N0cnVjdHVyZSgpCisJICBUaGlzIGFsbG93cyB0byBjaGVjayBpZiBhIHN0cnVjdHVyZSBpcyBhIHN1YnNldCBvZiBnaXZlbgorCSAgY2FwcyB3aXRob3V0IGFsbG9jYXRpbmcgYSBuZXcgY2FwcyBpbnN0YW5jZSBmb3IgaXQuCisKKzIwMTEtMDUtMjcgMTM6NDc6MTEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdGNhcHMuYzoKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuaDoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgc3RydWN0dXJlOiBBZGQgZ3N0X3N0cnVjdHVyZV9pc19zdWJzZXQoKQorCSAgQVBJOiBnc3Rfc3RydWN0dXJlX2lzX3N1YnNldCgpCisKKzIwMTEtMDUtMjcgMTM6Mzg6NTEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYzoKKwkgIGNhcHM6IE9wdGltaXplIGdzdF9jYXBzX2lzX3N1YnNldCgpCisJICAuLmFuZCBhcyBhIHJlc3VsdCBnc3RfY2Fwc19pc19lcXVhbCgpIGFuZCBvdGhlcnMuCisJICBUaGlzIG5vdyBvbmx5IGNoZWNrcyBpZiBmb3IgZXZlcnkgc3Vic2V0IHN0cnVjdHVyZSB0aGVyZSBpcworCSAgYSBzdXBlcnNldCBzdHJ1Y3R1cmUgaW4gdGhlIHN1cGVyc2V0IGNhcHMuIFByZXZpb3VzbHkgd2Ugd2VyZQorCSAgc3VidHJhY3Rpbmcgb25lIGZyb20gYW5vdGhlciwgY3JlYXRpbmcgY29tcGxldGVseSBuZXcgY2FwcworCSAgYW5kIHRoZW4gZXZlbiBzaW1wbGlmaWVkIHRoZW0uCisJICBUaGUgbmV3IGltcGxlbWVudGlvbiBub3cgaXMgYWJvdXQgMS4yNyB0aW1lcyBmYXN0ZXIgYW5kIGRvZXNuJ3QKKwkgIGJyZWFrIHRoZSAtYmFzZSB1bml0IHRlc3RzIGFyZSBhbnl0aGluZyBhbnltb3JlLgorCisyMDExLTA1LTI3IDEzOjM3OjA2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGNhcHMuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RjYXBzLmM6CisJICBjYXBzOiBGaXggc3Vic2V0IGNoZWNrIGluIGdzdF9jYXBzX21lcmdlKCkKKwkgIENhcHMgQSBhcmUgYSBzdWJzZXQgb2YgY2FwcyBCIGV2ZW4gaWYgY2FwcyBCIGRvZXNuJ3QKKwkgIGhhdmUgYWxsIGZpZWxkcyBvZiBjYXBzIEEuCisJICBBbHNvIGFkZCBhIHVuaXQgdGVzdCBmb3IgdGhpcy4KKworMjAxMS0wNS0yNyAxMjo1NjowMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RjYXBzLmM6CisJICBSZXZlcnQgImNhcHM6IE9wdGltaXplIGdzdF9jYXBzX2lzX3N1YnNldCgpIgorCSAgVGhpcyByZXZlcnRzIGNvbW1pdCAzMjI0OGE5Yjg1MmJjYjU2OGE1YjY0MjI5OWVjYzhlNWJmNDhlYTEzLgorCSAgVGhpcyBicmVha3Mgc29tZSB0ZXN0cyBpbiAtYmFzZSBhbmQgdGhlIGZhaWx1cmVzIHNob3VsZAorCSAgYmUgZml4ZWQgZmlyc3QuCisKKzIwMTEtMDUtMjcgMTI6NDU6NTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSAgY2FwczogT3B0aW1pemUgZ3N0X2NhcHNfaXNfc3Vic2V0KCkKKwkgIC4uYW5kIGFzIGEgcmVzdWx0IGdzdF9jYXBzX2lzX2VxdWFsKCkgYW5kIG90aGVycy4KKwkgIFRoaXMgbm93IG9ubHkgY2hlY2tzIGlmIGZvciBldmVyeSBzdWJzZXQgc3RydWN0dXJlIHRoZXJlIGlzCisJICBhIHN1cGVyc2V0IHN0cnVjdHVyZSBpbiB0aGUgc3VwZXJzZXQgY2Fwcy4gUHJldmlvdXNseSB3ZSB3ZXJlCisJICBzdWJ0cmFjdGluZyBvbmUgZnJvbSBhbm90aGVyLCBjcmVhdGluZyBjb21wbGV0ZWx5IG5ldyBjYXBzCisJICBhbmQgdGhlbiBldmVuIHNpbXBsaWZpZWQgdGhlbS4KKwkgIFRoZSBuZXcgaW1wbGVtZW50aW9uIG5vdyBpcyBhYm91dCAxLjI3IHRpbWVzIGZhc3Rlci4KKworMjAxMS0wNS0yNyAxMTo0NToxNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogRHJvcCBzdGlja3kgZXZlbnRzIHB1c2hlZCBvbiBmbHVzaGluZyBzcmNwYWRzIGluc3RlYWQgb2YgYWN0aXZhdGluZyB0aGVtIGltbWVkaWF0ZWx5CisKKzIwMTEtMDUtMjYgMTQ6NTY6MTIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBiYXNldHJhbnNmb3JtOiBQYXNzIHRoZSBjb21wbGV0ZSBjYXBzIHRvIHRyYW5zZm9ybV9jYXBzCisJICBJbnN0ZWFkIG9mIHBhc3NpbmcgaXQgc3RydWN0dXJlIGJ5IHN0cnVjdHVyZS4gVGhpcyBhbGxvd3MKKwkgIGJldHRlciBvcHRpbWl6ZWQgdHJhbnNmb3JtX2NhcHMgZnVuY3Rpb25zIGFuZCBhbGxvd3MgYmV0dGVyCisJICB0cmFuc2Zvcm1hdGlvbiBkZWNpc2lvbnMuCisJICBTZWUgYnVnICM2MTk4NDQuCisKKzIwMTEtMDUtMjcgMDk6MDU6NDYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIGJhc2VzcmM6IFNlbmQgYW4gdXBkYXRlIE5FV1NFR01FTlQgZXZlbnQgZG93bnN0cmVhbSBpZiB0aGUgZHVyYXRpb24gY2hhbmdlcworCSAgVGhpcyBhbGxvd3Mgc3RyZWFtaW5nIHRoZSBjb21wbGV0ZSBmaWxlIGZvciBmaWxlcyB0aGF0IGhhdmUgZ3Jvd24gc2luY2UKKwkgIHN0cmVhbWluZyBzdGFydGVkLgorCSAgRml4ZXMgYnVnICM2NDc5NDAuCisKKzIwMTEtMDUtMjYgMTk6NDU6MTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogcmVmYWN0b3IgX3B1c2hfZXZlbnQKKwkgIFJld29yayBfcHVzaF9ldmVudCgpIGEgbGl0dGxlIHNvIHRoYXQgaXQgZHJvcHMgZXZlbnRzIG9uIGJsb2NraW5nIHBhZHMuCisJICBNYWtlIHN1cmUgdGhhdCBldmVudHMgYXJlIGZvcndhcmRlZCB3aGVuIHdlIHVuYmxvY2suCisJICBBZGQgY291bnRlciBvbiB0aGUgcGFkIHRvIGtlZXAgdHJhY2sgb2YgYnVzeSBwYWRzLgorCisyMDExLTA1LTI2IDE4OjIxOjA5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IHJlZmFjdG9yIHByZSBhbmQgcG9zdCBjaGFpbiBjb2RlCisKKzIwMTEtMDUtMjYgMTc6NTA6MTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDoga2VlcCBjb3VudGVyIGZvciBhY3RpdmUgcGFkcworCSAgS2VlcCBhIGNvdW50ZXIgdG8gbWFyayB0aGUgYW1vdW50IG9mIHRocmVhZHMgY3VycmVudGx5IHB1c2hpbmcgZGF0YSBvbiB0aGUgcGFkLgorCisyMDExLTA1LTI2IDE3OjM5OjE3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IHJlZmFjdG9yIHByZSBwdXNoIGNvZGUKKwkgIFJlZmFjdG9yIHRoZSBjb2RlIHRoYXQgaXMgZXhlY3V0ZWQgYXMgdGhlIGZpcnN0IHN0ZXAgb2YgYSBwdXNoIG9wZXJhdGlvbiB3aGVyZQorCSAgd2UgY2hlY2sgdGhlIHByb2JlcyBhbmQgYmxvY2tpbmcgYW5kIHJlc29sdmUgdGhlIHBlZXIuCisKKzIwMTEtMDUtMjYgMTc6MDg6MDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RfcHJpdmF0ZS5oOgorCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHV0aWxzLmM6CisJICBwYWQ6IHJlbW92ZSBwYWQgY2FjaGUKKwkgIFJlbW92ZSB0aGUgcGFkIGNhY2hlIGFzIHRoaXMgaXMgZ29pbmcgdG8gYmUgcmV3b3JrZWQgZm9yIG5ldyBwYWQgYmxvY2tpbmcgYW5kCisJICBwcm9iZXMuCisKKzIwMTEtMDUtMjYgMTY6NDg6MTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogc2ltcGxpZnkgaGFuZGxpbmcgb2YgYnVmZmVyIGxpc3RzCisJICBJbXBsZW1lbnQgYSBkZWZhdWx0IGJ1ZmZlci1saXN0IGZ1bmN0aW9uIGluIGNhc2UgdGhlIGVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQKKwkgIG9uZS4KKwkgIEFsc28gcGFzcyBidWZmZXItbGlzdHMgdG8gdGhlIGhhdmUtZGF0YSBzaWduYWwsIHRoaXMgYWxsb3dzIHVzIHRvIHJlbW92ZSBzb21lCisJICBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGNvZGUuCisKKzIwMTEtMDUtMjYgMTY6MTU6NTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RwYWQuaDoKKwkqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc2lua3MuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6CisJICBwYWQ6IHJlbW92ZSBvbGQgZ3N0X3BhZF9zZXRfYmxvY2tlZCBtZXRob2RzCisKKzIwMTEtMDUtMjYgMTQ6MTQ6MTMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdHB1c2hzcmMuYzoKKwkgIHB1c2hzcmM6IEZpeCBpbmZpbml0ZSByZWN1cnNpb24gaW4gcHVzaHNyYyBxdWVyeSBoYW5kbGVyCisKKzIwMTEtMDUtMjYgMTM6MzY6NDggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCisKKzIwMTEtMDUtMjUgMTY6MDI6MTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSogZ3N0L2dzdGNoaWxkcHJveHkuYzoKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkqIGdzdC9nc3R0YWdsaXN0LmM6CisJICBnc3Q6IHdlIGNhbiBub3cgdXNlIEdMaWIgMi4yNCBBUEkgdW5jb25kaXRpb25hbGx5CisKKzIwMTEtMDUtMjUgMTU6NTQ6MDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJICBjb25maWd1cmU6IGJ1bXAgR0xpYiByZXF1aXJlbWVudCB0byA+PSAyLjI0CisJICBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy93aWtpL1JlbGVhc2VQbGFubmluZy9HTGliUmVxdWlyZW1lbnQKKworMjAxMS0wNS0yNSAxNTozODozMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvcmFuZG9tL3JlbGVhc2U6CisJICBkb2NzOiB1cGRhdGUgcmVsZWFzZSBpbnN0cnVjdGlvbnMgZm9yIGdub21lIGNoYW5nZQorCisyMDExLTA1LTI1IDEzOjQwOjMwICswNDAwICDQoNGD0YHQu9Cw0L0g0JjQttCx0YPQu9Cw0YLQvtCyIDxscm4xOTg2QGdtYWlsLmNvbT4KKworCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6CisJICBzeXN0ZW1jbG9jazogUGxhY2F0ZSBnY2MgYnkgZGVmaW5pbmcgRVdPVUxEQkxPQ0sgdG8gc29tZXRoaW5nCisKKzIwMTEtMDUtMjUgMTI6NDc6NTEgKzA0MDAgINCg0YPRgdC70LDQvSDQmNC20LHRg9C70LDRgtC+0LIgPGxybjE5ODZAZ21haWwuY29tPgorCisJKiBnc3QvZ3N0cG9sbC5jOgorCSAgcG9sbDogRml4IFdBS0VfRVZFTlQoKSB0byBiZWhhdmUgcG9zaXhseSBvbiBXaW5kb3dzCisKKzIwMTEtMDUtMjQgMjA6Mjg6MTggKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5Lmg6CisJICByZWdpc3RyeWJpbmFyeTogc21hbGwgY2xlYW51cHMKKwkgIFJlbW92ZSB1bm5lZWRlZCBicmFjZXMgZnJvbSBzdHJpbmcgZGVmaW5lLiBTbWFsbCBkb2MgaW1wcm92ZW1lbnQuCisKKzIwMTEtMDUtMjQgMjA6Mjc6MDIgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdHByZXNldC5jOgorCSAgcHJlc2V0OiB1c2UgZ3VpbnQgZm9yIHRoZSB2ZXJzaW9uIG51bWJlciBwYXJ0cworCSAgVXNlIHVuc2lnbmVkIGludGVnZXJzIGZvciBleHRyYSBzYWZldHkgKGxpa2Ugd2UgZG8gaW4gcGx1Z2luIHZlcnNpb24gcGFyc2luZykuCisKKzIwMTEtMDUtMjQgMTg6Mzk6NDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RfcHJpdmF0ZS5oOgorCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkgIHJlbW92ZSBzb21lIG1vcmUgZGVwcmVjYXRlZCBtZXRob2RzCisKKzIwMTEtMDUtMjQgMTg6Mjk6NDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5oOgorCSAgcGFkdGVtcGxhdGU6IHJlbW92ZSB1bnVzZWQgZmxhZworCisyMDExLTA1LTI0IDE4OjE3OjI0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKKwkqIGdzdC9nc3RpbmRleGZhY3RvcnkuYzoKKwkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6CisJKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oOgorCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6CisJKiBnc3QvZ3N0cmVnaXN0cnljaHVua3MuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwbHVnaW4uYzoKKwkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6CisJKiB0b29scy9nc3QteG1saW5zcGVjdC5jOgorCSAgZmVhdHVyZTogdXNlIG9iamVjdCBuYW1lCisJICBSZW1vdmUgdGhlIG5hbWUgcHJvcGVydHkgZnJvbSB0aGUgcGx1Z2luIGZlYXR1cmUgYW5kIHBvcnQgY29kZSB0byB1c2UgdGhlIG9iamVjdAorCSAgbmFtZSBpbnN0ZWFkLgorCisyMDExLTA1LTI0IDE4OjE2OjM2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJKiBnc3QvZ3N0Y29uZmlnLmguaW46CisJICByZW1vdmUgb2xkIGdsaWIgY2hlY2sKKworMjAxMS0wNS0yNCAxNzo0MzozNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQorCisyMDExLTA1LTI0IDE3OjM2OjI0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKKwkqIGdzdC9nc3RnaG9zdHBhZC5oOgorCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5oOgorCSogZ3N0L2dzdHF1ZXJ5LmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RwdXNoc3JjLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6CisJICBzY2hlZHVsaW5nOiBwb3J0IHRvIG5ldyBzY2hlZHVsaW5nIHF1ZXJ5CisKKzIwMTEtMDUtMjQgMTI6NTI6MDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZGVzaWduL3BhcnQtc2NoZWR1bGluZy50eHQ6CisJKiBnc3QvZ3N0cXVhcmsuYzoKKwkqIGdzdC9nc3RxdWFyay5oOgorCSogZ3N0L2dzdHF1ZXJ5LmM6CisJKiBnc3QvZ3N0cXVlcnkuaDoKKwkgIHF1ZXJ5OiBhZGQgU0NIRURVTElORyBxdWVyeQorCSAgQWRkIGEgbmV3IHF1ZXJ5IHRvIHJlcGxhY2UgdGhlIGNoZWNrZ2V0cmFuZ2UgZnVuY3Rpb24uCisKKzIwMTEtMDUtMjQgMTk6NDM6NTggKzA1MzAgIERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KKworCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKKwkgIGNoZWNrOiBhZGQgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0CisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUwOTczCisKKzIwMTEtMDUtMjQgMTY6MTQ6NTcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6CisJICBvdXRwdXRzZWxlY3RvcjogRm9yd2FyZCBzdGlja3kgZXZlbnRzIHRvIG5ld2x5IGNyZWF0ZWQgc3JjcGFkcworCisyMDExLTA1LTI0IDE2OjEzOjIyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKKwkgIHRlZTogRm9yd2FyZCBzdGlja3kgZXZlbnRzIHRvIG5ld2x5IGNyZWF0ZWQgc3JjcGFkcworCisyMDExLTA1LTI0IDE2OjA4OjQxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5oOgorCSAgcGFkOiBBZGQgZ3N0X3BhZF9zdGlja3lfZXZlbnRzX2l0ZXJhdGUoKSBmdW5jdGlvbgorCisyMDExLTA1LTI0IDEzOjI3OjA5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKKwkgIGRlYnVndXRpbHM6IEZpeCBmb3IgR3N0SXRlcmF0b3IgQVBJIGNoYW5nZXMKKworMjAxMS0wNS0yNCAxMzoyODowMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6CisJICBSZXZlcnQgImRlYnVndXRpbHM6IEZpeCBmb3IgR3N0SXRlcmF0b3IgQVBJIGNoYW5nZXMiCisJICBUaGlzIHJldmVydHMgY29tbWl0IGUxY2MzMTc2ZDZmYjgwMjNiYmUwYzczMzYxNWIyYThjNDIwYTIwNzcuCisJICBUaGlzIGlzIG5vdCB0aGUgMC4xMSBicmFuY2guLi4KKworMjAxMS0wNS0yNCAxMzoyNzowOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6CisJICBkZWJ1Z3V0aWxzOiBGaXggZm9yIEdzdEl0ZXJhdG9yIEFQSSBjaGFuZ2VzCisKKzIwMTEtMDUtMjQgMDk6NDg6NDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKKwkgIENvbmZsaWN0czoKKwkgIGdzdC9nc3RwYWQuaAorCisyMDExLTA1LTI0IDAwOjI2OjQwICswMzAwICBLaXBwIENhbm5vbiA8a2Nhbm5vbkBjaXRhLnV0b3JvbnRvLmNhPgorCisJKiBnc3QvZ3N0Y2xvY2suaDoKKwkgIGNsb2NrOiBpbXByb3ZlIHRoZSBHU1RfVElNRV9GT1JNQVQvQVJHUyBkb2NzCisKKzIwMTEtMDUtMjMgMjM6NDA6MjAgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdHBhZC5oOgorCSAgZG9jczogaGlkZSB0aGlzIGZyb20gdGhlIGRvY3MKKworMjAxMS0wNS0yMyAxODozMDoxOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGV2ZW50LmM6CisJICBldmVudDogdXNlIEdTVF9TRUdNRU5UX0ZPUk1BVCBmb3Igc2VnbWVudHMKKworMjAxMS0wNS0yMyAxODoxNTowMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICB0cmFuc2Zvcm06IGZpeGVzIGZvciBidWZmZXJwb29sIGhhbmRsaW5nCisJICBEb24ndCBlcnJvciBvdXQgd2hlbiB0aGUgYWxsb2NhdGlvbiBxdWVyeSByZXR1cm5zIHN1Y2Nlc3MuCisJICBEbyBidWZmZXJwb29sIHF1ZXJ5IGFmdGVyIHdlIHB1c2hlZCB0aGUgY2FwcyBldmVudCBkb3duc3RyZWFtIHNvIHRoYXQgd2UgY2FuIGdldAorCSAgYSBnb29kIGJ1ZmZlcnBvb2wgc3VnZ2VzdGlvbi4KKwkgIEFsc28gcHJveHkgdGhlIGJ1ZmZlcnBvb2wgcXVlcnkgZG93bnN0cmVhbSB3aGVuIHdlIG9wZXJhdGUgaW4gaW5fcGxhY2UgbW9kZS4KKworMjAxMS0wNS0yMyAxODoxNDoyNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiBpbXByb3ZlIGRlYnVnZ2luZworCisyMDExLTA1LTIzIDE2OjUzOjAxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIHRyYW5zZm9ybTogcmVzZXQgcmVjb25maWd1cmUgc3RhdGUKKwkgIFdoZW4gd2UgbmVnb3RpYXRlIG5ldyBjYXBzLCByZXNldCB0aGUgcmVjb25maWd1cmUgc3RhdGUuCisKKzIwMTEtMDUtMjAgMTg6NTY6MzcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYmFzZXRyYW5zZm9ybTogV0lQIGhhbmRsZSBidWZmZXJwb29sCisKKzIwMTEtMDUtMjEgMTk6MDY6MDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgYmFzZXNyYzogYXZvaWQgY2FsbGluZyBfc2V0X2NhcHMoKSBvbiB0aGUgc3JjcGFkCisJICBBdm9pZCBpbnN0YWxsaW5nIGEgc2V0Y2FwcyBmdW5jdGlvbiBvbiB0aGUgc3JjcGFkIGFuZCBjYWxsaW5nIHRoZSBzZXRjYXBzCisJICBmdW5jdGlvbiwgd2UgY2FuIGRvIG1vcmUgZWZmaWNpZW50bHkgd2l0aCBzZW5kaW5nIHRoZSBldmVudCBvdXJzZWxmIGFuZCBjYWxsaW5nCisJICBvdXIgdm1ldGhvZC4KKworMjAxMS0wNS0yMCAxNjowMzoxMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQorCSAgQ29uZmxpY3RzOgorCSAgZ3N0L2dzdHBhZC5oCisJICBnc3QvZ3N0cGx1Z2luLmgKKworMjAxMS0wNS0yMCAxNTo1ODoxMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBiYXNldHJhbnNmb3JtOiByZW1vdmUgc29tZSBtb3JlIGNvZGUKKwkgIFJlbW92ZSBzb21lIG1vcmUgdW51c2VkIGNvZGUgZnJvbSBiYXNldHJhbnNmb3JtLgorCSAgUHJlcGFyZSBmb3IgaW1wbGVtZW50aW5nIGJ1ZmZlcnBvb2xzLgorCisyMDExLTA1LTIwIDE1OjUwOjA1ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKKwkgIHdpbjMyOiBhZGQgbmV3IGFwaQorCisyMDExLTA1LTIwIDE1OjQ4OjA5ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RwYWQuaDoKKwkqIGdzdC9nc3RwbHVnaW4uaDoKKwkgIGRlcHJlY2F0aW9uLWd1YXJkczogZml4dXAgZm9yIGNvbW1pdCA5ZmY0ZWMzMTA0ZDI1MTBiOGYzNzlmZjM4YzY3MTY4MmZmNzk1ZTMzCisJICBSZW1vdmUgdGhlIGRlcHJlY2F0aW9uIGd1YXJkcyBmb3IgR1NUX1BMVUdJTl9ERUZJTkVfU1RBVElDIGFnYWluIChldmVuIHRob3VnaCBpdAorCSAgaXMgZGVwcmVjYXRlZCkgYXMgd2UgdXNlIGl0IGluIHRoZSB0ZXN0cy4gUmVtb3ZlICJfIiBmb3IgaW50bGlua2Z1bmMuCisKKzIwMTEtMDUtMjAgMTM6MDY6NTcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCisKKzIwMTEtMDUtMjAgMTM6MDM6NTEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBiYXNlc2luazogT25seSByZWluaXQgdGhlIGNhY2hlZCBHc3RDbG9ja0lEIGlmIGl0IGlzIGZvciB0aGUgc2FtZSBjbG9jaworCSAgVGhlIGNsb2NrIG1pZ2h0IGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgY2xvY2sgSUQgd2FzIGNyZWF0ZWQgYW5kIGluCisJICB0aGF0IGNhc2Ugd2UgaGF2ZSB0byByZXF1ZXN0IGEgbmV3IG9uZS4KKworMjAxMS0wNS0yMCAxMjo0MzoyNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3RlbGVtZW50Lmg6CisJICBlbGVtZW50OiBhZGQgbWV0aG9kIHRvIGdldCBtZXRhZGF0YQorCSAgQWRkIGEgbWV0aG9kIHRvIGdldCB0aGUgbWV0YWRhdGEgZnJvbSBhIGtsYXNzLgorCisyMDExLTA1LTIwIDEyOjQzOjAyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKKwkgIGZhY3Rvcnk6IGZpeCB0eXBvCisKKzIwMTEtMDUtMjAgMTI6MTg6NDggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKKwkgIGlucHV0c2VsZWN0b3I6IEFsd2F5cyBzZW5kIGEgU0VHTUVOVCBldmVudCB3aGVuIHRoZSBhY3RpdmUgcGFkIGNoYW5nZXMKKworMjAxMS0wNS0yMCAxMjoxNjo1OSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSAgaW5wdXRzZWxlY3RvcjogRml4IGNvcHkmcGFzdGUgbWlzdGFrZSBpbiB0aGUgc3JjcGFkIGV2ZW50IGZ1bmN0aW9uCisKKzIwMTEtMDUtMjAgMTI6MDc6NDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKKwkgIENvbmZsaWN0czoKKwkgIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5oaWVyYXJjaHkKKworMjAxMS0wNS0yMCAxMjowMDoxMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSAgaW5wdXRzZWxlY3RvcjogU2VuZCB1cHN0cmVhbSBldmVudHMgdG8gYWxsIHNpbmtwYWRzLCBub3Qgb25seSB0aGUgc2VsZWN0ZWQgb25lCisJICBUaGlzIG1ha2VzIHN1cmUgdGhhdCBTRUVLIGV2ZW50cyBhcmUgc2VudCB0byBhbGwgdXBzdHJlYW0gZWxlbWVudHMsIHdoaWNoIGlzCisJICByZXF1aXJlZCBpZiBkaWZmZXJlbnQgc3RyZWFtcyBhcmUgY29tcGxldGVseSBkaXN0aW5jdCBwaXBlbGluZSBwYXJ0cy4gQWxzbyB0aGlzCisJICBhbGxvd3MgUW9TIHRvIGJlIGRvbmUgb24gZGVzZWxlY3RlZCBzdHJlYW1zLCBmbHVzaGVzIHRvIGJlIGhhbmRsZWQgY29ycmVjdGx5LAorCSAgZXRjLgorCisyMDExLTA1LTIwIDExOjM2OjI1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkLmg6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6CisJICBwYWQ6IGFkZCBwZW5kaW5nIGV2ZW50IGZvciBzdGlja3kgZXZlbnRzCisJICBDaGFuZ2UgdGhlIHN0aWNreSBldmVudCBhcnJheSBzbyB0aGF0IGl0IGNvbnRhaW5zIGEgcGVuZGluZyBhbmQgYW4gYWN0aXZlIGV2ZW50LgorCSAgRXZlbnRzIG9uIHRoZSBzaW5rcGFkIGFyZSBjb3BpZWQgdG8gdGhlIHBlbmRpbmcgYXJyYXkgYW5kIGFmdGVyIHRoZSBldmVudGZ1bmMKKwkgIHJldHVybmVkIFRSVUUsIG1vdmVkIHRvIHRoZSBhY3RpdmUgZXZlbnQuIFRoaXMgYWxsb3dzIHVzIHRvIHF1ZXVlIG5ldyBldmVudHMKKwkgIGxpa2Ugd2hlbiB3ZSBkbyBwZXItcGFkIG9mZnNldHMgd2l0aG91dCByZW1vdmluZyB0aGUgY3VycmVudGx5IGFjdGl2ZSBldmVudC4KKwkgIFJlbW92ZSB0aGUgYWN0aXZlIGFyZ3VtZW50IGZyb20gdGhlIGdzdF9wYWRfZ2V0X3N0aWNreV9ldmVudCgpIG1ldGhvZCwgdGhlCisJICBwZW5kaW5nIGV2ZW50cyBhcmUgbm90IHNvbWV0aGluZyB3ZSB3YW50IHRvIGV4cG9zZS4KKworMjAxMS0wNS0yMCAwMDozOToxMCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0cHJlc2V0LmM6CisJKiBnc3QvZ3N0cHJlc2V0Lmg6CisJICBwcmVzZXQ6IGluY2x1ZGUgY2xlYW51cAorCSAgT25seSBoYXZlIGluY2x1ZGUgaW4gdGhlIGluc3RhbGxlZCBoZWFkZXIgd2UgbmVlZCB0byB1c2UgaXQuIE1vdmUgdGhlIGluY2x1ZGVzCisJICBuZWVkZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uIHRvIHRoZSBjIGZpbGUuCisKKzIwMTEtMDUtMTkgMjM6MTk6MzAgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmFyZ3M6CisJKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuaGllcmFyY2h5OgorCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmludGVyZmFjZXM6CisJICBkb2NzOiB1cGRhdGUgcGx1Z2luIGludHJvc3BlY3Rpb24gZGF0YQorCSAgTm93IG1vcmUgZmlsZXMgYXJlIG1lcmdlZCBhbmQgcHJvZHVjZWQgaW4gYSBjYW5vbmljYWwgZmFzaGlvbiwgd2hpY2ggaG9wZWZ1bGx5CisJICBjcmVhdGVzIGxlc3Mgb3Igbm8gZGVsdGEgaW4gdGhlIGZ1dHVyZS4KKworMjAxMS0wNS0xOSAyMjo1NjoyOCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBjb21tb246CisJICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKKwkgIEZyb20gOWU1YmJkNSB0byA2OWI5ODFmCisKKzIwMTEtMDUtMTkgMTk6MDc6MjkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKKwkgIHRlc3RzOiBjYXBzIGFyZSBub3Qgc3RvcmVkIG9uIGZsdXNoaW5nIHBhZHMKKwkgIENhcHMgYXJlIG5vdyBhbHNvIHN0b3JlZCBvbiBmbHVzaGluZyBwYWRzIGluIHRoZSBpbmFjdGl2ZSBzdGF0ZS4KKworMjAxMS0wNS0xOSAxOTowMTowOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiBhcHBseSBwYWQgb2Zmc2V0IG9uIHNpbmtwYWQgZXZlbnRzIHRvbworCSAgQXBwbHkgdGhlIHBhZCBvZmZzZXQgaW4gdGhlIHNlbmRfZXZlbnQoKSBmdW5jdGlvbiBhcyB3ZWxsLgorCisyMDExLTA1LTE5IDE4OjI3OjU1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IGFkZCBwZXItcGFkIG9mZnNldHMKKwkgIFdoZW4gbGlua2luZyBwYWRzIGFuZCB3aGVuIGNvcHlpbmcgYSBzZWdtZW50IGV2ZW50IGZyb20gdGhlIHNvdXJjIHBhZCB0byB0aGUKKwkgIHNpbmtwYWQsIGFwcGx5IHRoZSBzcmMgYW5kIHNpbmtwYWQgb2Zmc2V0cyB0byB0aGUgc2VnbWVudCBiYXNlLiBNYWtlIHN1cmUgdGhhdAorCSAgd2Ugb25seSBtb2RpZnkgdGhlIGV2ZW50IHN0b3JlZCBvbiB0aGUgc2lua3BhZCBhbmQgbmV2ZXIgdGhlIG9uZSBvbiB0aGUgc291cmNlCisJICBwYWQuCisJICBXaGVuIGNoYW5naW5nIHRoZSBwYWQgb2Zmc2V0LCBwZXJmb3JtIHRoZSBzZWdtZW50IGNvcHkgd2l0aCB0aGUgdXBkYXRlZCBvZmZzZXRzLgorCSAgV2hlbiBwdXNoaW5nIGEgc2VnbWVudCBldmVudCwgYXBwbHkgdGhlIHNyY3BhZCBvZmZzZXQgYmVmb3JlIHNlbmRpbmcgdGhlIGV2ZW50CisJICB0byB0aGUgcGVlciBwYWQuCisJICBUaGlzIHBhcnQgaXMgbWlzc2luZyB0aGUgYWRqdXN0bWVudCBvZiB0aGUgc2VnbWVudCBldmVudCBvbiB0aGUgc2lua3BhZCwgd2hpY2gKKwkgIGlzIGZvciBhIGxhdGVyIHBhdGNoLgorCisyMDExLTA1LTE5IDE2OjI2OjA2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkLmg6CisJICBwYWQ6IGFkZCBtZXRob2RzIHRvIGFkanVzdCB0aGUgb2Zmc2V0CisJICBBZGQgbWV0aG9kcyB0byBhZGp1c3QgdGhlIG9mZnNldC4gVGhpcyB3aWxsIGJlIHVzZWQgdG8gY2hhbmdlIHRoZSBzZWdtZW50IGV2ZW50cworCSAgd2l0aCBhbiBvZmZzZXQgc28gdGhhdCB3ZSBjYW4gdHdlYWsgdGhlIHRpbWluZyBvZiB0aGUgc3RyZWFtIG9uIGEgcGVyLXBhZCBiYXNlLgorCisyMDExLTA1LTE5IDEyOjExOjQzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuaDoKKwkgIGlucHV0c2VsZWN0b3I6IFBvcnQgdG8gdGhlIG5ldyBzZWdtZW50IEFQSQorCSAgVGhlIHN3aXRjaCBhY3Rpb24gc2lnbmFsIHdpdGggdGhlIHN0b3AgYW5kIHN0YXJ0IHJ1bm5pbmcgdGltZXMKKwkgIGlzIG5vdCBuZWNlc3NhcnkgYW55bW9yZS4gQ2xvc2luZyBvZiBzZWdtZW50cyBpcyBub3QgbmVjZXNzYXJ5CisJICBhbmQgYWRqdXN0aW5nIHRoZSBzdGFydCBydW5uaW5nIHRpbWUgb2YgYSBzZWdtZW50IGNhbiBsYXRlciBiZQorCSAgZG9uZSB3aXRoIG5ldyBHc3RQYWQgQVBJLgorCisyMDExLTA1LTE5IDExOjMwOjA2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCisJICBDb25mbGljdHM6CisJICBnc3QvZ3N0Z2hvc3RwYWQuaAorCisyMDExLTA1LTE4IDE5OjQzOjQ0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IHN0b3JlIHN0aWNreSBldmVudHMgb24gZmx1c2hpbmcgc2lua3BhZHMgdG9vCisJICBGaXJzdCBzdG9yZSB0aGUgc3RpY2t5IGV2ZW50IG9uIHRoZSBzaW5rcGFkIGluIHRoZSBpbmFjdGl2ZSBzdGF0ZSwgdGhlbiBjaGVjaworCSAgZm9yIHRoZSBmbHVzaGluZyBmbGFnLiBXZSB3YW50IHRvIGhhdmUgdGhlIGV2ZW50cyBvbiBzaW5rcGFkcyBhdCBhbGwgdGltZXMsCisJICByZWFkeSB0byBiZSBhY3RpdmF0ZWQgd2hlbiB0aGUgcGFkIGJlY29tZXMgYWN0aXZlLgorCisyMDExLTA1LTE4IDE4OjUzOjM1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IG1vdmUgY2FwcyBjaGVjayB0byBjZW50cmFsIGxvY2F0aW9uCisJICBNYWtlIGEgZnVuY3Rpb24gdG8gY2FsbCB0aGUgZXZlbnRmdW5jIGFuZCBwZXJmb3JtIGEgY2FwcyBjaGVjayB3aGVuIHdlIGFyZQorCSAgZGlzcGF0Y2hpbmcgYSBjYXBzIGV2ZW50LgorCSAgVGhpcyBtYWtlcyBzdXJlIHRoYXQgYWxsIGNvZGUgcGF0aHMgY29ycmVjdGx5IGNoZWNrIHRoYXQgdGhlIGNhcHMgYXJlCisJICBhY2NlcHRhYmxlIGJlZm9yZSBzZW5kaW5nIHRoZSBjYXBzIHRvIHRoZSBldmVudGZ1bmN0aW9uLgorCisyMDExLTA1LTE4IDE4OjUyOjIyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKKwkgIGdob3N0cGFkOiBhdm9pZCBjYWxsaW5nIHNldGNhcHMgdG9vIG1hbnkgdGltZXMKKwkgIERvbid0IGNhbGwgc2V0Y2FwcywgdGhlIGNhcHMgZXZlbnQgd2lsbCB0YWtlIGNhcmUgb2YgcHJvcGFnYXRpbmcgdGhlIGNhcHMgb24gYWxsCisJICBwYWRzLgorCisyMDExLTA1LTE4IDE4OjQ4OjAzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cXVlcnkuYzoKKwkgIHF1ZXJ5OiBhZGQgYWxsb2NhdGlvbiBxdWVyeSBuYW1lCisJICBBZGQgQUxMT0NBVElPTiBxdWVyeSBuYW1lIGFuZCBndWFyZCBzb21lIGZ1bmN0aW9ucyBhZ2FpbnN0IGludmFsaWQgcXVlcmllcy4KKworMjAxMS0wNS0xOCAxNjo1NjoxMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RldmVudC5jOgorCSogZ3N0L2dzdGV2ZW50Lmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmdW5uZWwuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmM6CisJKiB0ZXN0cy9jaGVjay9saWJzL2Jhc2VzcmMuYzoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgZXZlbnQ6IE1ha2UgU0VHTUVOVCBldmVudCBwYXJzaW5nIEFQSSBtb3JlIGNvbnNpc3RlbnQgd2l0aCB0aGUgb3RoZXJzCisKKzIwMTEtMDUtMTggMTY6NDc6NDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYmFzZXRyYW5zZm9ybTogcmVsYXggY2FwcyBjaGVjaworCSAgQWxzbyBydW4gdGhlIGNhcHMgdHJhbnNmb3JtIGZ1bmN0aW9uIG9uIEFOWSBjYXBzLCBsaWtlIHdlIHVzZWQgdG8gZG8gYmVmb3JlLgorCSAgVGhpcyBtYWtlcyBzdXJlIHRoYXQgY2Fwc2ZpbHRlciBoYXMgYSBjaGFuY2UgdG8gZmlsdGVyIEFOWSBjYXBzIGFzIHdlbGwuCisKKzIwMTEtMDUtMTggMTY6Mjk6MTAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IERvbid0IGZvcmdldCB0byB0YWtlIHRoZSBvYmplY3QgbG9jayB3aGVuIGdldHRpbmcgYSBzdGlja3kgZXZlbnQKKworMjAxMS0wNS0xOCAxNjoyNjozMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RwYWQuaDoKKwkgIHBhZDogQWRkIGZ1bmN0aW9uIHRvIGdldCBzdGlja3kgZXZlbnRzIGZyb20gYSBwYWQKKwkgIEFQSTogZ3N0X3BhZF9nZXRfc3RpY2t5X2V2ZW50KCkKKworMjAxMS0wNS0xOCAxNTo0MzoyMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGV2ZW50LmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzoKKwkgIGV2ZW50OiBmaXggZXZlbnQgY29weQorCSAgRml4IHBhcmVudCByZWZjb3VudCBvbiBldmVudCBjb3B5LgorCSAgRml4IHVuaXQgdGVzdC4KKworMjAxMS0wNS0xOCAxNToyOToyNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiBub3RpZnkgY2FwcyBwcm9wZXJ0eSBjaGFuZ2UgaW4gY2FsbHNldGNhcHMKKwkgIE5vdGlmeSB0aGUgY2FwcyBwcm9wZXJ0eSBjaGFuZ2UgaW4gdGhlIGJhY2t3YXJkcyBjb21wYXRpYmxlIGZ1bmN0aW9uIHRvIGNhbGwgdGhlCisJICBzZXRjYXBzIGZ1bmN0aW9uLgorCisyMDExLTA1LTE4IDE2OjA5OjE5ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSBmZDM1MDczIHRvIDllNWJiZDUKKworMjAxMS0wNS0xOCAxNTowNDo0OCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgZG9jczogcmVtb3ZlIEdzdFByb3h5UGFkIGZyb20gcHJpdmF0ZSBzZWN0aW9uCisKKzIwMTEtMDUtMTggMTU6MDI6MDIgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdGdob3N0cGFkLmg6CisJKiBnc3QvZ3N0bWluaW9iamVjdC5jOgorCSAgZG9jczogdXNlIHRoZSBzYW1lIG5hbWUgZm9yIHRoZSBhcmd1bWVudCBpbiBwcm90b3R5cGUgYW5kIGRvY3MKKworMjAxMS0wNS0xOCAxNDo1OTo0NSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiB0ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuYW06CisJICBtYW51YWw6IHB1dCBnZW5lcmF0ZWQgc291cmNlcyB0byBCVUlMVF9TT1VSQ0VTIGFuZCBjbGVhbiB0aGVtIG9uIG1ha2UgY2xlYW4KKworMjAxMS0wNS0xOCAxMzoxOTozMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQorCisyMDExLTA1LTE4IDEzOjE0OjU3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCisJICBDb25mbGljdHM6CisJICBnc3QvZ3N0bWluaW9iamVjdC5jCisJICBnc3QvZ3N0cGFkLmMKKwkgIGdzdC9nc3RwYWQuaAorCSAgZ3N0L2dzdHBsdWdpbi5oCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jCisKKzIwMTEtMDUtMTggMTQ6MTA6MTIgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogdGVzdHMvZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlLmFtOgorCSAgbWFudWFsOiByZWluc2VydCBtaXNzaW5nIHNwYWNlIHRvIGZpeCBwcmV2aW91cyBjb21taXQKKworMjAxMS0wNS0xOCAxMzo1NDo0MiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiB0ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuYW06CisJICBtYW51YWw6IHNpbXBsaWZ5IHRoZSBzbmlwZXQgZXh0cmFjdGlvbiBydWxlcworCSAgVXNlICQ8IGluc3RlYWQgb2YgcmVwZWF0aW5nIHRoZSBuYW1lIG9mIHRoZSBkZXBlbmRlbmN5LgorCisyMDExLTA1LTE4IDEwOjU5OjM4ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHRlc3RzL2V4YW1wbGVzL21hbnVhbC9NYWtlZmlsZS5hbToKKwkgIG1hbnVhbDogZG9uJ3QgZXh0cmFjdCB0aGUgeG1sIGV4YW1wbGUgYW55bW9yZSwgaXRzIGdvbmUKKwkgIEFzIGEgZm9sbG93dXAgZm9yIGNvbW1pdCBjZGE1YTM1M2QyNzMyNmMwMjcyYTc5YzkyYzExYzIyMWE0MDkyZGE0IGRvbid0IHRyeQorCSAgZXh0cmFjdGluZyBhbiBleGFtcGxlIHRoYXQgaGFzIGJlZW4gcmVtb3ZlZC4KKworMjAxMS0wNS0xOCAxMjoyMzozOSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBjb21tb246CisJICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKKwkgIEZyb20gNDZkZmNlYSB0byBmZDM1MDczCisKKzIwMTEtMDUtMTggMTE6MjE6NTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZGVzaWduL3BhcnQtZXZlbnRzLnR4dDoKKwkgIGRvY3M6IHVwZGF0ZSBkb2NzIHNvbWUgbW9yZQorCisyMDExLTA1LTE4IDExOjA4OjUyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQ6CisJKiBnc3QvZ3N0cGFkLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6CisJICBwYWQ6IHJld29yayBzdGlja3kgZXZlbnRzIGEgbGl0dGxlCisJICBVcGRhdGUgdGhlIGRlc2lnbiBkb2NzIHdpdGggc29tZSBjbGVhciBydWxlcyBmb3IgaG93IHN0aWNreSBldmVudHMgYXJlCisJICBoYW5kbGVkLgorCSAgUmVpbXBsZW1lbnQgdGhlIHN0aWNreSB0YWdzLCB1c2UgYSBzbWFsbCBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgZXZlbnQgYW5kIGl0cworCSAgY3VycmVudCBzdGF0ZSAoYWN0aXZlIG9yIGluYWN0aXZlKS4KKwkgIEV2ZW50cyBvbiBzaW5rcGFkcyBvbmx5IGJlY29tZSBhY3RpdmUgd2hlbiB0aGUgZXZlbnQgZnVuY3Rpb24gcmV0dXJuZWQgc3VjY2VzcworCSAgZm9yIHRoZSBldmVudC4KKwkgIFdoZW4gbGlua2luZywgb25seSB1cGRhdGUgZXZlbnRzIHRoYXQgYXJlIGRpZmZlcmVudC4KKwkgIEF2b2lkIG1ha2luZyBhIGNvcHkgb2YgdGhlIGV2ZW50IGFycmF5LCB1c2UgdGhlIG9iamVjdCBsb2NrIHRvIHByb3RlY3QgdGhlIGV2ZW50CisJICBhcnJheSBhbmQgcmVsZWFzZSBpdCBvbmx5IHRvIGNhbGwgdGhlIGV2ZW50IGZ1bmN0aW9uLiBUaGlzIHdpbGwgbmVlZCB0byBjaGVjaworCSAgaWYgc29tZXRoaW5nIGNoYW5nZWQsIGxhdGVyLgorCSAgRGlzYWJsZSBhIHRlc3QgaW4gdGhlIHVuaXQgdGVzdCwgaXQgY2FuJ3Qgd29yayB5ZXQuCisKKzIwMTEtMDUtMTcgMjI6MTc6MTQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBtYWludGFpbiBmcmFtZSBzdGF0ZSBkdXJpbmcgZnJhbWUgcGFyc2luZyByb3VuZAorCSAgU2VlICM2NTAwOTMuCisKKzIwMTEtMDUtMTIgMTE6NTU6MjAgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuaDoKKwkgIGJhc2VwYXJzZTogcHJvdmlkZSBsYXRlbmN5IHF1ZXJ5IHN1cHBvcnQKKworMjAxMS0wNS0xNyAyMjoxNTozOCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IG1ha2UgbWluaW11bSBmcmFtZSBzaXplIGhhbmRsaW5nIG1vcmUgZWZmaWNpZW50IGFuZCBjb252ZW5pZW50CisJICBXaGlsZSBzb21lIGZvcm1hdHMgYWxsb3cgc3ViY2xhc3MgdG8gZGV0ZXJtaW5lIGEgc3BlY2lmaWMgc3Vic2VxdWVudAorCSAgbmVlZGVkIGZyYW1lIHNpemUsIG90aGVycyBtYXkgdG8gbmVlZCB0byBzY2FuIGZvciBtYXJrZXJzIGFuZCBjYW4gb25seQorCSAgcmVxdWVzdCAnYWRkaXRpb25hbCBkYXRhJyBieSB3aGF0ZXZlciByZWFzb25hYmxlIGF2YWlsYWJsZSBzdGVwLgorCSAgSW4gcHVzaCBtb2RlLCB0cnlpbmcgdG8gbWluaW1pemUgYWRkaXRpb25hbCBsYXRlbmN5IGxlYWRzIHRvIHN0ZXAgc2l6ZQorCSAgYmVpbmcgdGhlIG5leHQgaW5wdXQgYnVmZmVyLiAgSW4gcHVsbCBtb2RlLCBhbnkgcmVhc29uYWJsZSBzdGVwIHNpemUKKwkgIChzdWNoIGFzIGFscmVhZHkgdXNlZCBieSBidWZmZXIgY2FjaGluZykgY2FuIGJlIGFwcGxpZWQuCisKKzIwMTEtMDUtMTcgMjI6Mzg6MTQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBzZXQgY29ycmVjdCBidWZmZXIgc2l6ZQorCisyMDExLTA1LTA2IDEwOjU0OjA4ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6CisJICBpbnNwZWN0OiBzaG93IGZsYWdzIHRoZSBzYW1lIHdheSB0aGV5IG5lZWQgdG8gYmUgZW50ZXJlZAorCSAgVGhlIChkZSlzZXJpYWxpc2F0aW9uIHVzZXMgIisiIGFuZCBub3QgIiB8ICIuCisKKzIwMTEtMDQtMjggMTE6MzQ6MzkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzoKKwkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmg6CisJKiBnc3QvZ3N0cmVnaXN0cnkuYzoKKwkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5jOgorCSAgcGx1Z2luZmVhdHVyZTogYXZvaWQgZHVwbGljYXRpbmcgZmVhdHVyZS0+bmFtZQorCSAgVGhlIGZlYXR1cmUgbmFtZSBpcyBub3Qgc3VwcG9zZWQgdG8gY2hhbmdlIG92ZXIgdGltZSBhbnl3YXkuIEluIG9yZGVyIHRvIGVuZm9yY2UKKwkgIHRoaXMgcGFyZW50aXplIGZlYXR1cmVzIHRvIHRoZSByZWdpc3RyeSBhbmQgbWFrZSB0aGUgZmVhdHVyZS0+bmFtZSBwb2ludGluZyB0bworCSAgR3N0T2JqZWN0Om5hbWUuIEluIDAuMTEgd2UgY291bGQgY29uc2lkZXIgb2YgcmVtb3ZpbmcgdGhlIGZlYXR1cmUtPm5hbWUgdmFyaWFibGUKKwkgIChGSVhNRSBjb21tZW50IGFkZGVkKS4KKwkgIEZpeGVzOiAjNDU5NDY2CisKKzIwMTEtMDUtMDIgMTU6MzY6MTQgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdF9wcml2YXRlLmg6CisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkLmg6CisJKiBnc3QvZ3N0cGx1Z2luLmg6CisJICBkb2NzOiBhZGQgZGVwcmVjYXRpb24gZ3VhcmRzCisJICBNb3ZlIEdzdFBhZEludExpbmtGdW5jdGlvbiB0byBwcml2YXRlIGhlYWRlciB0byBhdm9pZCBhIGRvemVuICNpZmRlZnMuIFVzZSBhCisJICBncG9pbnRlciBpbiBwdWJsaWMgaGVhZGVyIGluc3RlYWQuCisKKzIwMTEtMDUtMTcgMTk6MDM6MzAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogZG9uJ3QgcHVzaCBzdGlja3kgZXZlbnRzIG9uIGZsdXNoCisJICBPbmx5IGFsbG93IHNlcmlhbGl6ZWQgYW5kIG5vbi1mbHVzaCBldmVudHMgZm9yd2FyZCB0aGUgc3RpY2t5IGV2ZW50cy4KKworMjAxMS0wNS0xNyAxODoyMzoyMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6CisJICB0ZXN0OiByZXNldCBwYWQgY2FwcyBwcm9wZXJseQorCisyMDExLTA1LTE3IDE4OjIzOjA2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IGFkZCBtb3JlIGRlYnVnCisKKzIwMTEtMDUtMTcgMTg6MjE6MzggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RnaG9zdHBhZC5jOgorCSAgZ2hvc3RwYWQ6IHJlbW92ZSB1bnVzZWQgY29kZQorCSAgVGhlIGNvZGUgdG8gbWFrZSBzdXJlIHRoYXQgY2FwcyBhcmUgcHJvcGVybHkgc2V0IG9uIGJvdGggcGFkcywgaXQgbm93IGhhcHBlbnMKKwkgIGF1dG9tYXRpY2FsbHkgd2l0aCB0aGUgY2FwcyBldmVudC4KKworMjAxMS0wNS0xNyAxNzo1MzowMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdHNlZ21lbnQuYzoKKwkgIHRlc3RzOiBmaXggdGVzdHMKKwkgIFJlbW92ZSB0aGUgdGVzdHMgdGhhdCBoYW5kbGUgaW5jb21wYXRpYmxlIGZvcm1hdHMsIHdlIGRvbid0IHdhbnQgdGhhdCBhbnltb3JlLgorCisyMDExLTA1LTE3IDE3OjUxOjU4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0c2VnbWVudC5jOgorCSAgc2VnbWVudDogaGFuZGxlIHdyYXBhcm91bmQgYmV0dGVyCisJICBOb3cgdGhhdCB3ZSB1c2UgdW5zaWduZWQgdmFsdWVzIGZvciB0aGUgc2VnbWVudCwgaGFuZGxlIHdyYXBhcm91bmQgd2hlbiBzZWVraW5nCisJICBiZXR0ZXIuCisKKzIwMTEtMDUtMTcgMTY6NTA6NTMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKKwkgIHBhZDogcmVtb3ZlIHVucmVmLCB0aGUgb2JqZWN0IGlzIE5VTEwKKworMjAxMS0wNS0xNyAxNDowMTowNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RldmVudC5jOgorCSogZ3N0L2dzdGV2ZW50Lmg6CisJICBldmVudDogVGhlIFJFQ09ORklHVVJFIGVsZW1lbnQgb25seSBleGlzdHMgaW4gMC4xMQorCSAgSW1wbGVtZW50aW5nIGl0IHByb3Blcmx5IGluIDAuMTAgc2VlbXMgdG8gYmUgaW1wb3NzaWJsZS4KKworMjAxMS0wNS0xNyAxMzoxMzoxMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NlbGVjdG9yLmM6CisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92YWx2ZS5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6CisJICB0ZXN0czogVXBkYXRlIGZvciBjYXBzL3BhZCB0ZW1wbGF0ZSByZWxhdGVkIEFQSSBjaGFuZ2VzCisKKzIwMTEtMDUtMTcgMTI6MjU6MjIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYmFzZTogVXBkYXRlIGZvciBjYXBzL3BhZCB0ZW1wbGF0ZSByZWxhdGVkIEFQSSBjaGFuZ2VzCisKKzIwMTEtMDUtMTcgMTI6MDQ6MjcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIGdzdDogVXBkYXRlIGZvciBjYXBzL3BhZCB0ZW1wbGF0ZSByZWxhdGVkIEFQSSBjaGFuZ2VzCisKKzIwMTEtMDUtMTcgMTI6MTI6MjMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgorCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkgIGVsZW1lbnQ6IENvbnNpZGVyIEdzdFBhZFRlbXBsYXRlIGFzIGltbXV0YWJsZQorCSAgRG9uJ3QgY29weSB0aGUgdGVtcGxhdGVzIHdoZW4gY3JlYXRpbmcgc3ViY2xhc3NlcyBidXQgb25seSBpbmNyZWFzZQorCSAgdGhlaXIgcmVmY291bnQuCisKKzIwMTEtMDUtMTcgMTI6MTA6MjcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgorCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOgorCSAgcGFkdGVtcGxhdGU6IENyZWF0ZSBwYWQgdGVtcGxhdGVzIHdpdGggZmxvYXRpbmcgcmVmcworCSAgQW5kIHRha2Ugb3duZXJzaGlwIG9mIHRoZSBmbG9hdGluZyByZWYgaW4gZ3N0X2VsZW1lbnRfYWRkX3BhZF90ZW1wbGF0ZSgpCisKKzIwMTEtMDUtMTcgMTI6MDc6MDMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgorCSogZ3N0L2dzdHBhZHRlbXBsYXRlLmM6CisJICBwYWR0ZW1wbGF0ZTogSW1wcm92ZSByZWZlcmVuY2UgaGFuZGxpbmcgb2YgdGhlIHRlbXBsYXRlJ3MgY2FwcworCSAgZ3N0X3BhZF90ZW1wbGF0ZV9uZXcoKSBkb2VzIG5vdCB0YWtlIG93bmVyc2hpcCBvZiB0aGUgY2FwcyBhbnltb3JlLgorCisyMDExLTA1LTE2IDEzOjM5OjI1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKKwkgIG1pbmlvYmplY3Q6IGRlbGF5IHByaXZhdGUgZGF0YSBpbml0aWFsaXNhdGlvbiB1bnRpbCBhY3R1YWxseSBuZWVkZWQKKwkgIFdlIG9ubHkgdXNlIHRoZSBwcml2YXRlIGluc3RhbmNlIGRhdGEgZm9yIHdlYWsgcmVmZXJlbmNlcyBmb3Igbm93LAorCSAgc28gY2FuIGRlbGF5IGluaXRpYWxpc2F0aW9uIHVudGlsIGFjdHVhbGx5IG5lZWRlZCAobWljcm9vcHRpbWlzYXRpb24pCisKKzIwMTEtMDUtMTcgMTE6NTk6MDAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgorCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5oOgorCSogZ3N0L2dzdHBhZHRlbXBsYXRlLmM6CisJICBwYWQ6IExldCB0ZW1wbGF0ZSByZWxhdGVkIGZ1bmN0aW9ucyByZXR1cm4gbmV3IHJlZmVyZW5jZXMKKwkgIGdzdF9wYWRfdGVtcGxhdGVfZ2V0X2NhcHMoKSwgZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMoKQorCSAgYW5kIGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZSgpIHJldHVybiBhIG5ldyByZWZlcmVuY2Ugb2YgdGhlCisJICBjYXBzIG9yIHRlbXBsYXRlIG5vdyBhbmQgdGhlIHJldHVybiB2YWx1ZSBuZWVkcyB0byBiZQorCSAgdW5yZWZmZWQgYWZ0ZXIgdXNhZ2UuCisKKzIwMTEtMDUtMTcgMTE6NDU6NDYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZXZlbnQuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOgorCSAgUmV2ZXJ0ICJldmVudDogZXhhbXBsZSBvZiBob3cgdG8gb3B0aW1pemUgZXZlbnRzIgorCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBmYTI4ZTJjNWU2ZTVlMTcyYmUzMDhjMGM1MGY0NGVkNmYzOWUxYTcxLgorCSAgVGhlIG9wdGltaXphdGlvbiBvbmx5IGhhcyBtaW5pbWFsIGltcGFjdCBvbiB0aGUgcGVyZm9ybWFuY2UgYW5kCisJICBtYWtlcyBldmVyeXRoaW5nIG1vcmUgY29tcGxleC4KKworMjAxMS0wNS0xNyAxMTo0NTo0MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RldmVudC5jOgorCSAgUmV2ZXJ0ICJldmVudDogdXBkYXRlIHRoZSBzdHJ1Y3R1cmUgd2hlbiBuZWVkZWQiCisJICBUaGlzIHJldmVydHMgY29tbWl0IDkwNTEwMGNkYmU1ODBkNGQxODJiZmQ5ZDVlYzliMzY4YTExMGY0NjQuCisKKzIwMTEtMDUtMTcgMTE6MjI6NTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJICBzdHJ1Y3R1cmU6IEZpeCBjb21waWxhdGlvbgorCisyMDExLTA1LTE3IDExOjIwOjA1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJpbi5jOgorCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3RlbGVtZW50Lmg6CisJKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RwYWQuaDoKKwkqIGdzdC9nc3R1dGlscy5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zkc3JjLmM6CisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc3JjLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cXVlcnkuYzoKKwkgIFJldmVydCAicXVlcnk6IGFsbG93IF9tYWtlX3dyaXRhYmxlIG9uIHF1ZXJ5IGhhbmRsZXJzIgorCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBjZjRmYmMwMDVjNWM1MzBjMmE1MDlhOTQzYTA1YjkxZDZjOWFmM2ZiLgorCSAgVGhpcyBjaGFuZ2UgZGlkIG5vdCBpbXByb3ZlIHRoZSBzaXR1YXRpb24gZm9yIGJpbmRpbmdzIGJlY2F1c2UKKwkgIHF1ZXJpZXMgYXJlIHVzdWFsbHkgY3JlYXRlZCwgdGhlbiBkaXJlY3RseSBwYXNzZWQgdG8gYSBmdW5jdGlvbgorCSAgYW5kIG5vdCBzdG9yZWQgZWxzZXdoZXJlLCBhbmQgdGhlIHdyaXRhYmlsaXR5IHByb2JsZW0gd2l0aAorCSAgbWluaW9iamVjdHMgdXN1YWxseSBoYXBwZW5zIHdpdGggYnVmZmVycyBvciBjYXBzIGluc3RlYWQuCisKKzIwMTEtMDUtMTcgMTE6MTk6MTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YmluLmM6CisJICBSZXZlcnQgImJpbjogRGVyZWZlcmVuY2UgR3N0UXVlcnkqKiBiZWZvcmUgcGFzc2luZyBpdCB0byBHU1RfUVVFUllfVFlQRV9OQU1FIgorCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA0MzdjOTJiNDAzZTBjN2RhOWI5ZDQ1MDllZjRmZmJkMDU3MTBkZjJiLgorCisyMDExLTA1LTE3IDExOjE5OjE0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGdob3N0cGFkLmM6CisJKiBnc3QvZ3N0Z2hvc3RwYWQuaDoKKwkgIFJldmVydCAiZ2hvc3RwYWQ6IGZpeCBnX3JldHVybl8qIHdpdGggbmV3IHF1ZXJ5IgorCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA4NzdjMWMyOGZmOTU3Y2E5MjkxMWVhZGZjNzg1Zjg2NjFkOWUwMTI3LgorCisyMDExLTA1LTE3IDA5OjQwOjM4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQorCSAgQ29uZmxpY3RzOgorCSAgd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWYKKworMjAxMS0wNS0xNyAwOTozNTo1NCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuaDoKKwkgIHN0cnVjdHVyZTogTWFrZSBib3RoIHBhcmFtZXRlcnMgdG8gZ3N0X3N0cnVjdHVyZV9pc19lcXVhbCgpIGNvbnN0CisKKzIwMTEtMDUtMTcgMDk6MzM6NDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJICBzdHJ1Y3R1cmU6IFVwZGF0ZSBTaW5jZSBtYXJrZXJzIHRvIHRoZSBjb3JyZWN0IHZlcnNpb24KKworMjAxMS0wNS0xNyAwOTozMzowNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSogZ3N0L2dzdHN0cnVjdHVyZS5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBzdHJ1Y3R1cmU6IEFkZCBnc3Rfc3RydWN0dXJlX2ludGVyc2VjdCgpCisJICBBUEk6IGdzdF9zdHJ1Y3R1cmVfaW50ZXJzZWN0KCkKKworMjAxMC0wOS0xMCAxODozMzozNCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3RjYXBzLmM6CisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJKiBnc3QvZ3N0c3RydWN0dXJlLmg6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGdzdHN0cnVjdHVyZTogQWRkIGdzdF9zdHJ1Y3R1cmVfY2FuX2ludGVyc2VjdCBBUEkKKwkgIEFsbG93cyBjaGVja2luZyBpZiB0d28gc3RydWN0dXJlcyBjYW4gaW50ZXJzZWN0IHdpdGhvdXQgaGF2aW5nIHRvCisJICBnbyB0aHJvdWdoIEdzdENhcHMKKwkgIEFQSTogZ3N0X3N0cnVjdHVyZV9jYW5faW50ZXJzZWN0CisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI5MzAwCisKKzIwMTAtMDktMTAgMTg6MTQ6MDUgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSogZ3N0L2dzdHN0cnVjdHVyZS5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBnc3RydWN0dXJlOiBOZXcgQVBJOiBnc3Rfc3RydWN0dXJlX2lzX2VxdWFsCisJICBBbGxvd3MgY2hlY2tpbmcgZXF1YWxpdHkgb2YgR3N0U3RydWN0dXJlIHdpdGhvdXQgaGF2aW5nIHRvIGNyZWF0ZQorCSAgaW50ZXJtZWRpYXJ5IEdzdENhcHMuCisJICBBUEk6IGdzdF9zdHJ1Y3R1cmVfaXNfZXF1YWwKKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MjkzMDAKKworMjAxMS0wNS0xNiAxOTowOTo1NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6CisJICB0ZXN0czogc2V0IGVsZW1lbnRzIGluIFBBVVNFRAorCSAgU2V0IGVsZW1lbnRzIGluIFBBVVNFRCBiZWZvcmUgdHJ5aW5nIHRvIHNldCBjYXBzIG9uIHBhZHMuCisKKzIwMTEtMDUtMTYgMTk6MDU6MjMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgorCSAgdGVzdDogZml4IGdob3N0cGFkIHRlc3QKKwkgIFdlIG5lZWQgdG8gaGF2ZSBhY3RpdmF0ZWQgcGFkcyBiZWZvcmUgd2UgY2FuIHBhc3MgYXJvdW5kIGNhcHMuCisJICBEb24ndCBzZXQgTlVMTCBjYXBzIG9uIHBhZHMuCisKKzIwMTEtMDUtMTYgMTk6MDQ6MzUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogYXZvaWQgc2V0dGluZyBOVUxMIGNhcHMgb24gcGFkcworCisyMDExLTA1LTE2IDE4OjQ4OjIwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIGJhc2V0cmFuc2Zvcm06IGZpeCBidWZmZXIgcmVmY291bnRpbmcKKwkgIFdoZW4gd2UgZmFpbCB0byBhbGxvY2F0ZSBhbiBvdXRwdXQgYnVmZmVyLCBzZXQgdGhlIGJ1ZmZlciBwb2ludGVyIHRvIE5VTEwgb3IKKwkgIGVsc2UgdGhlIGNhbGxpbmcgZnVuY3Rpb24gd2lsbCB0cnkgdG8gdW5yZWYgaXQuCisJICBSZW1vdmUgc29tZSBvbGQgY29tbWVudHMKKworMjAxMS0wNS0xNiAxODoyOToyOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6CisJICBjYXBzZmlsdGVyOiBhbGxvdyBOVUxMIGZpbHRlcnMgYW5kIGZpeCByZWZjb3VudGluZworCisyMDExLTA1LTE2IDE4OjEyOjMzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSAgY2Fwczogb25seSBhZGQgdGhlIHN0cnVjdHVyZSB3aGVuIHdlIGNvdWxkIHNldCB0aGUgcGFyZW50CisKKzIwMTEtMDUtMTYgMTc6NTM6NDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RnaG9zdHBhZC5jOgorCSAgZ2hvc3RwYWQ6IGZpeCBnX3JldHVybl8qIHdpdGggbmV3IHF1ZXJ5CisKKzIwMTEtMDUtMTYgMTc6MjQ6MTEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIHdpbjMyOiBVcGRhdGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzCisKKzIwMTEtMDUtMTYgMTY6NTk6MjAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSAgaW5wdXRzZWxlY3RvcjogaGFuZGxlIG1vcmUgZm9ybWF0cworCSAgVXNlIHRoZSBzZWdtZW50IGZvcm1hdCBpbnN0ZWFkIG9mIGEgaGFyZGNvZGVkIF9USU1FLgorCisyMDExLTA1LTE2IDE2OjU3OjQ4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBiYXNlc2luazogaGFuZGxlIG1vcmUgZm9ybWF0cworCSAgRG9uJ3QgaGFyZGNvZGUgR1NUX0ZPUk1BVF9USU1FIGluIHBsYWNlcywgd2UgY2FuIHdvcmsgd2l0aCBtYW55IGZvcm1hdHMuCisKKzIwMTEtMDUtMTYgMTY6NTQ6MDIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJICBNZXJnZSBicmFuY2ggJzAuMTEnIG9mIHNzaDovL2dpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L2dzdHJlYW1lci9nc3RyZWFtZXIgaW50byAwLjExCisKKzIwMTEtMDUtMTYgMTY6NTM6MDQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCisJICBDb25mbGljdHM6CisJICBjb25maWd1cmUuYWMKKwkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQKKwkgIGdzdC9nc3RiaW4uYworCSAgZ3N0L2dzdGVsZW1lbnQuYworCSAgZ3N0L2dzdGVsZW1lbnQuaAorCSAgZ3N0L2dzdGdob3N0cGFkLmMKKwkgIGdzdC9nc3RtaW5pb2JqZWN0LmMKKwkgIGdzdC9nc3RtaW5pb2JqZWN0LmgKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmMKKwkgIHRlc3RzL2NoZWNrL2dzdC9nc3RtaW5pb2JqZWN0LmMKKworMjAxMS0wNS0xNiAxNjoxMDo0OSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtYXV0b3BsdWdnaW5nLnhtbDoKKwkqIGRvY3MvbWFudWFsL2hpZ2hsZXZlbC1jb21wb25lbnRzLnhtbDoKKwkgIHVwZGF0ZSBtYW51YWwgY29kZSBleGFtcGxlcyBmb3IgbmV3IF9nZXRfY2FwcygpCisKKzIwMTEtMDUtMTMgMDg6MzQ6MzMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tdWx0aXF1ZXVlLmM6CisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zZWxlY3Rvci5jOgorCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdmFsdmUuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6CisJKiB0ZXN0cy9jaGVjay9saWJzL3Rlc3RfdHJhbnNmb3JtLmM6CisJKiB0ZXN0cy9jaGVjay9saWJzL3RyYW5zZm9ybTEuYzoKKwkgIHRlc3RzOiBVcGRhdGUgZm9yIG5lZ290aWF0aW9uIHJlbGF0ZWQgQVBJIGNoYW5nZXMKKworMjAxMS0wNS0xMSAxNTozODowOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmdW5uZWwuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgorCSAgZWxlbWVudHM6IFVwZGF0ZSBmb3IgbmVnb3RpYXRpb24gcmVsYXRlZCBBUEkgY2hhbmdlcworCSAgVGhlIGZpbHRlciBjYXBzIGFyZSBvbmx5IGZvcndhcmRlZCBhbmQgcmV0dXJuZWQgaW5zdGVhZAorCSAgb2YgQU5ZIGNhcHMgaW4gdGhlIGNvcmUgZWxlbWVudHMgYmVjYXVzZSB0aGV5IGRvbid0IGRvCisJICBhbnl0aGluZyBjYXBzIHNwZWNpZmljLgorCisyMDExLTA1LTExIDE1OjEyOjA0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgorCSAgYmFzZTogSW1wcm92ZSBuZWdvdGlhdGlvbiB3aXRoIG5ldyBnZXRjYXBzKCkgZmlsdGVyCisKKzIwMTEtMDUtMTAgMTc6NTY6MzMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgorCSogZ3N0L2dzdGdob3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkLmg6CisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkqIGdzdC9nc3R1dGlscy5oOgorCSAgZ3N0OiBBZGQgYSBmaWx0ZXIgY2FwcyBwYXJhbWV0ZXIgdG8gYWxsIGdldF9jYXBzKCkgZnVuY3Rpb25zCisJICBUaGlzIGlzIHVzZWQgdG8gcGFzcyB0aGUgcG9zc2libGUgY2FwcyBhbmQgcHJlZmVyZW5jZXMgdG8KKwkgIHRoZSBwYWQgYW5kIHRvIGFsbG93IGJldHRlciBuZWdvdGlhdGlvbiBkZWNpc2lvbnMuCisKKzIwMTEtMDQtMTkgMjA6MDU6MDcgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuaDoKKwkgIHF1ZXVlMjogYWRqdXN0IGlucHV0IGRhdGEgcmF0ZSBlc3RpbWF0aW9uCisJICAuLi4gYmVpbmcgYXdhcmUgb2YgcG9zc2libGUgaW5pdGlhbCBoaWdoZXIgYnVyc3QgcmF0ZS4KKworMjAxMS0wNS0xMyAxODowNzoyNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmFyZ3M6CisJKiBnc3QvZ3N0ZXZlbnQuYzoKKwkqIGdzdC9nc3RldmVudC5oOgorCSogZ3N0L2dzdGluZm8uYzoKKwkqIGdzdC9nc3RxdWFyay5jOgorCSogZ3N0L2dzdHF1YXJrLmg6CisJKiBnc3QvZ3N0c2VnbWVudC5jOgorCSogZ3N0L2dzdHNlZ21lbnQuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6CisJKiBsaWJzL2dzdC9jaGVjay9nc3Rjb25zaXN0ZW5jeWNoZWNrZXIuYzoKKwkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc2luay5jOgorCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNpbmsuYzoKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpcXVldWUuYzoKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlLmM6CisJKiB0ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RpbmZvLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c2VnbWVudC5jOgorCSogdGVzdHMvY2hlY2svbGlicy9iYXNlc3JjLmM6CisJICBSZXdvcmsgR3N0U2VnbWVudCBoYW5kbGluZworCSAgSW1wcm92ZSBHc3RTZWdtZW50LCByZW5hbWUgc29tZSBmaWVsZHMuIFRoZSBpZGVhIGlzIHRvIGhhdmUgdGhlIEdzdFNlZ21lbnQKKwkgIHN0cnVjdHVyZSByZXByZXNlbnQgdGhlIHRpbWluZyBzdHJ1Y3R1cmUgb2YgdGhlIGJ1ZmZlcnMgYXMgdGhleSBhcmUgZ2VuZXJhdGVkIGJ5CisJICB0aGUgc291cmNlIG9yIGRlbXV4ZXIgZWxlbWVudC4KKwkgIGdzdF9zZWdtZW50X3NldF9zZWVrKCkgLT4gZ3N0X3NlZ21lbnRfZG9fc2VlaygpCisJICBSZW5hbWUgdGhlIE5FV1NFR01FTlQgZXZlbnQgdG8gU0VHTUVOVC4KKwkgIE1ha2UgcGFyc2luZyBvZiB0aGUgU0VHTUVOVCBldmVudCBpbnRvIGEgR3N0U2VnbWVudCBzdHJ1Y3R1cmUuCisJICBQYXNzIGEgR3N0U2VnbWVudCBzdHJ1Y3R1cmUgd2hlbiBtYWtpbmcgYSBuZXcgU0VHTUVOVCBldmVudC4gVGhpcyBhbGxvd3MgdXMgdG8KKwkgIHBhc3MgdGhlIHRpbWluZyBpbmZvIGRpcmVjdGx5IHRvIHRoZSBuZXh0IGVsZW1lbnQuIE5vIGFjY3VtdWxhdGlvbiBpcyBuZWVkZWQgaW4KKwkgIHRoZSByZWNlaXZpbmcgZWxlbWVudCwgYWxsIHRoZSBpbmZvIGlzIGluc2lkZSB0aGUgZWxlbWVudC4KKwkgIFJlbW92ZSBnc3Rfc2VnbWVudF9zZXRfbmV3c2VnbWVudCgpOiBUaGlzIGZ1bmN0aW9uIGFzIHVzZWQgdG8gYWNjdW11bGF0ZQorCSAgc2VnbWVudHMgcmVjZWl2ZWQgZnJvbSB1cHN0cmVhbSwgd2hpY2ggaXMgbm93IG5vdCBuZWVkZWQgYW55bW9yZSBiZWNhdXNlIHRoZQorCSAgc2VnbWVudCBldmVudCBjb250YWlucyB0aGUgY29tcGxldGUgdGltaW5nIGluZm9ybWF0aW9uLgorCisyMDExLTA1LTE2IDEwOjI1OjEwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiBSZS1pbXBsZW1lbnQgbm90aWZ5OjpjYXBzCisKKzIwMTEtMDUtMTQgMTQ6MDI6MDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuYXJnczoKKwkqIGdzdC9nc3RlbGVtZW50Lmg6CisJKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKKwkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6CisJKiBnc3QvZ3N0bWluaW9iamVjdC5oOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkgIGRvY3M6IGZpeCB1cCBzb21lIFNpbmNlIG1hcmtlcnMgYW5kIHVwZGF0ZSBmb3IgbmV3IG11bHRpcXVldWUgYXJncworCisyMDExLTA1LTEyIDE2OjQ4OjQxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJpbi5jOgorCSAgYmluOiBEb24ndCBpbnRlcnByZXRlIHBpcGVsaW5lcyB3aXRob3V0IHNpbmsgZWxlbWVudHMgYXMgYWx3YXlzIGJlaW5nIGluIEVPUyBzdGF0ZQorCSAgU29tZSB0ZXN0cyAoZS5nLiBlbGVtZW50cy9jYXBzZmlsdGVyKSBoYXZlIHBpcGVsaW5lcyB3aXRoIGRhbmdsaW5nCisJICBzaW5rcGFkcyBhbmQgd2l0aG91dCBhIHNpbmsgZWxlbWVudC4gVGhlc2UgcGlwZWxpbmVzIGNhbiBuZXZlciBwb3N0CisJICBhbiBFT1MgbWVzc2FnZSAoYmVjYXVzZSB0aGlzIGlzIG9ubHkgdmFsaWQgYnkgYSBzaW5rKSBhbmQgYXMgc3VjaAorCSAgc2hvdWxkIG5ldmVyIGdldCBhbiBFT1MgbWVzc2FnZSBwb3N0ZWQgYnkgdGhlIGJpbi4KKworMjAxMS0wNS0xMiAxNTo1MToyMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgorCSAgc3lzdGVtY2xvY2s6IE9ubHkgcmV0cnkgd3JpdGluZyB0byB0aGUgc29ja2V0IGZvciBFQUdBSU4sIEVXT1VMREJMT0NLIGFuZCBFSU5UUgorCSAgRml4ZXMgaW5maW5pdGUgbG9vcCBpbiBzb21lIGNhc2VzLCBidWcgIzY1MDAwMi4KKworMjAxMS0wNS0xMiAwOTo1OToyMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIG1pbmlvYmplY3Q6IEFkZCBuZXcgbWluaW9iamVjdCB3ZWFrIHJlZi91bnJlZiBmdW5jdGlvbnMgdG8gdGhlIGRvY3MKKworMjAxMS0wNS0xMiAwOTo1NTo0NSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6CisJKiBnc3QvZ3N0bWluaW9iamVjdC5oOgorCSAgbWluaW9iamVjdDogTWlub3IgY2xlYW51cCBvZiBsYXN0IGNvbW1pdAorCisyMDExLTA1LTExIDEzOjA5OjE5IC0wNDAwICBKb3PDqSBBbGJ1cnF1ZXJxdWUgPGphYWxidXJxdUBzdm4uZ25vbWUub3JnPgorCisJKiBnc3QvZ3N0bWluaW9iamVjdC5jOgorCSogZ3N0L2dzdG1pbmlvYmplY3QuaDoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtaW5pb2JqZWN0LmM6CisJICBtaW5pb2JqZWN0OiBBZGQgd2VhayByZWZlcmVuY2luZyBmdW5jdGlvbmFsaXR5CisJICBBUEk6IGdzdF9taW5pX29iamVjdF93ZWFrX3JlZigpCisJICBBUEk6IGdzdF9taW5pX29iamVjdF93ZWFrX3VucmVmKCkKKwkgIEFkZCB3ZWFrIHJlZmVyZW5jaW5nIGZ1bmN0aW9uYWxpdHkgdG8gR3N0TWluaU9iamVjdCwgd2hpY2gKKwkgIGFsbG93cyB0byBnZXQgbm90aWZpY2F0aW9ucyB3aGVuIGFuIG1pbmkgb2JqZWN0IGlzIGRlc3Ryb3llZAorCSAgYnV0IGRvZXNuJ3QgaW5jcmVhc2UgdGhlIHJlYWwgcmVmY291bnQuIFRoaXMgaXMgbW9zdGx5CisJICB1c2VmdWwgZm9yIGJpbmRpbmdzLgorCSAgRml4ZXMgYnVnICM2MDk0NzMuCisKKzIwMTEtMDMtMTkgMTA6Mjg6NDkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5oOgorCSAgaW5wdXRzZWxlY3RvcjogQWRkIHN5bmMgbW9kZSB0aGF0IHN5bmNzIGluYWN0aXZlIHBhZHMgdG8gdGhlIHJ1bm5pbmcgdGltZSBvZiB0aGUgYWN0aXZlIHBhZAorCSAgRml4ZXMgYnVnICM2NDUwMTcuCisKKzIwMTEtMDMtMjIgMTM6MTk6NDcgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5oOgorCSAgbXVsdGlxdWV1ZTogQWRkIG1vZGUgdG8gc3luY2hyb25pemUgZGVhY3RpdmF0ZWQvbm90LWxpbmtlZCBzdHJlYW1zIGJ5IHRoZSBydW5uaW5nIHRpbWUKKwkgIEZpeGVzIGJ1ZyAjNjQ1MTA3LCAjNjAwNjQ4LgorCisyMDExLTA0LTE4IDE0OjI2OjMzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJpbi5jOgorCSAgYmluOiBPbmx5IHBvc3QgRU9TIG1lc3NhZ2VzIGFmdGVyIHJlYWNoaW5nIHRoZSBQTEFZSU5HIHN0YXRlCisJICBGaXhlcyBidWcgIzY0Nzc1Ni4KKworMjAxMS0wNS0xMCAxNjozNzo0NCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RfcHJpdmF0ZS5oOgorCSogZ3N0L2dzdGJpbi5jOgorCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3RlbGVtZW50Lmg6CisJICBlbGVtZW50OiBBZGQgR3N0RWxlbWVudDo6c3RhdGVfY2hhbmdlZCB2ZnVuYworCSAgQVBJOiBHc3RFbGVtZW50OjpzdGF0ZV9jaGFuZ2VkCisJICBUaGlzIGlzIGFsd2F5cyBjYWxsZWQgd2hlbiB0aGUgc3RhdGUgb2YgYW4gZWxlbWVudCBoYXMgY2hhbmdlZCBhbmQKKwkgIGJlZm9yZSB0aGUgY29ycmVzcG9uZGluZyBzdGF0ZS1jaGFuZ2VkIG1lc3NhZ2UgaXMgcG9zdGVkIG9uIHRoZSBidXMuCisKKzIwMTEtMDUtMDYgMTY6NDQ6MjkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdGdob3N0cGFkLmM6CisJKiBnc3QvZ3N0Z2hvc3RwYWQuaDoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgZ2hvc3RwYWQ6IEFkZCBkb2NzIGZvciBhbGwgdGhlIG5ldywgcHVibGljIGZ1bmN0aW9ucworCisyMDExLTA1LTA2IDE2OjE1OjUxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGdob3N0cGFkLmM6CisJICBnaG9zdHBhZDogQWRkIGd1YXJkcyBhZ2FpbnN0IGludmFsaWQgcGFyYW1ldGVycyB0byB0aGUgbmV3LCBwdWJsaWMgZnVuY3Rpb25zCisKKzIwMTEtMDUtMDYgMTY6MDA6MjIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKKwkqIGdzdC9nc3RnaG9zdHBhZC5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBnaG9zdHBhZDogUmVuYW1lIGdob3N0cGFkL3Byb3h5cGFkIGRlZmF1bHQgZnVuY3Rpb25zCisJICBBUEk6IGdzdF9naG9zdF9wYWRfYWN0aXZhdGVfcHVsbF9kZWZhdWx0CisJICBBUEk6IGdzdF9naG9zdF9wYWRfYWN0aXZhdGVfcHVzaF9kZWZhdWx0CisJICBBUEk6IGdzdF9naG9zdF9wYWRfaW50ZXJuYWxfYWN0aXZhdGVfcHVsbF9kZWZhdWx0CisJICBBUEk6IGdzdF9naG9zdF9wYWRfaW50ZXJuYWxfYWN0aXZhdGVfcHVzaF9kZWZhdWx0CisJICBBUEk6IGdzdF9naG9zdF9wYWRfbGlua19kZWZhdWx0CisJICBBUEk6IGdzdF9naG9zdF9wYWRfc2V0Y2Fwc19kZWZhdWx0CisJICBBUEk6IGdzdF9naG9zdF9wYWRfdW5saW5rX2RlZmF1bHQKKwkgIEFQSTogZ3N0X3Byb3h5X3BhZF9hY2NlcHRjYXBzX2RlZmF1bHQKKwkgIEFQSTogZ3N0X3Byb3h5X3BhZF9idWZmZXJhbGxvY19kZWZhdWx0CisJICBBUEk6IGdzdF9wcm94eV9wYWRfY2hhaW5fZGVmYXVsdAorCSAgQVBJOiBnc3RfcHJveHlfcGFkX2NoYWluX2xpc3RfZGVmYXVsdAorCSAgQVBJOiBnc3RfcHJveHlfcGFkX2NoZWNrZ2V0cmFuZ2VfZGVmYXVsdAorCSAgQVBJOiBnc3RfcHJveHlfcGFkX2V2ZW50X2RlZmF1bHQKKwkgIEFQSTogZ3N0X3Byb3h5X3BhZF9maXhhdGVjYXBzX2RlZmF1bHQKKwkgIEFQSTogZ3N0X3Byb3h5X3BhZF9nZXRjYXBzX2RlZmF1bHQKKwkgIEFQSTogZ3N0X3Byb3h5X3BhZF9nZXRyYW5nZV9kZWZhdWx0CisJICBBUEk6IGdzdF9wcm94eV9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19kZWZhdWx0CisJICBBUEk6IGdzdF9wcm94eV9wYWRfcXVlcnlfZGVmYXVsdAorCSAgQVBJOiBnc3RfcHJveHlfcGFkX3F1ZXJ5X3R5cGVfZGVmYXVsdAorCSAgQVBJOiBnc3RfcHJveHlfcGFkX3NldGNhcHNfZGVmYXVsdAorCisyMDExLTA1LTA2IDE1OjUwOjIwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGdob3N0cGFkLmM6CisJKiBnc3QvZ3N0Z2hvc3RwYWQuaDoKKwkgIGdob3N0cGFkOiBNYWtlIGFsbCB0aGUgaW50ZXJuYWwgY2FwcyBmdW5jdGlvbnMgcHVibGljCisJICBUaGlzIGlzIHVzZWZ1bCBpZiBnaG9zdHBhZC9wcm94eXBhZHMgc2hvdWxkIGJlIHVzZWQgYnV0CisJICBhZGRpdGlvbmFsIGNvZGUgc2hvdWxkIGJlIGV4ZWN1dGVkLCBlLmcuIGZvciB0cmFja2luZworCSAgc2VnbWVudHMgaW4gdGhlIGV2ZW50IGZ1bmN0aW9uLgorCisyMDExLTA1LTA2IDE1OjI1OjA0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGdob3N0cGFkLmM6CisJICBnaG9zdHBhZDogT25seSBpbXBsZW1lbnQgdGhlIGl0ZXJhdGVfaW50ZXJuYWxfbGlua3MgZnVuY3Rpb24gb24gcHJveHlwYWRzCisJICBnaG9zdHBhZHMgaW5oZXJpdCBpdCBmcm9tIHRoZWlyIHBhcmVudCBjbGFzcy4gQWxzbyBtYWtlIGl0IHRocmVhZHNhZmUuCisKKzIwMTEtMDUtMDYgMTU6MTY6MDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdGdob3N0cGFkLmM6CisJKiBnc3QvZ3N0Z2hvc3RwYWQuaDoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBnaG9zdHBhZDogQVBJOiBFeHBvc2UgZ3N0X3Byb3h5X3BhZF9nZXRfaW50ZXJuYWwoKQorCSAgVGhpcyBhbGxvd3MgdG8gZ2V0IHRoZSBpbnRlcm5hbCBwYWQgb2YgZ2hvc3RwYWRzIGFuZAorCSAgcHJveHlwYWRzIHdpdGhvdXQgdXNpbmcgZ3N0X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzKCkKKwkgIGFuZCBpcyBtdWNoIG1vcmUgY29udmVuaWVudC4KKwkgIFRoZSBpbnRlcm5hbCBwYWQgb2YgYSBnaG9zdHBhZCBpcyB0aGUgcGFkIG9mIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24KKwkgIHRoYXQgaXMgdXNlZCB0byBsaW5rIHRvIHRoZSBnaG9zdHBhZCB0YXJnZXQuCisKKzIwMTEtMDUtMDUgMTc6NTQ6NTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIGJhc2V0cmFuc2Zvcm06IFdoZW4gdHJ5aW5nIHRvIGZpeGF0ZSB0aGUgc2luayBzdWdnZXN0aW9uIHByZWZlciBpdHMgc3RydWN0dXJlIG9yZGVyCisKKzIwMTEtMDUtMDUgMTE6Mjg6MzggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYzoKKwkgIGNhcHM6IE1lcmdlIHN0cnVjdHVyZXMgd2hlbiBpbnRlcnNlY3RpbmcgaW5zdGVhZCBvZiBhcHBlbmRpbmcgdGhlbQorCSAgVGhpcyBwcmV2ZW50cyBhZGRpbmcgZHVwbGljYXRlcyBvdmVyIGFuZCBvdmVyIGFnYWluIHRvIHRoZSByZXN1bHRpbmcKKwkgIGNhcHMgaWYgdGhleSBhbHJlYWR5IGRlc2NyaWJlIHRoZSBuZXcgaW50ZXJzZWN0aW9uIHJlc3VsdC4KKwkgIFdoaWxlIHRoaXMgY2hhbmdlcyBpbnRlcnNlY3Rpb24gZnJvbSBPKG4qbSkgdG8gTyhuXjIqbSksIGl0IHJlc3VsdHMgaW4KKwkgIHNtYWxsZXIgY2Fwcywgd2hpY2ggaW4gdGhlIGVuZCB3aWxsIGRlY3JlYXNlIGZ1cnRoZXIgcHJvY2Vzc2luZyB0aW1lcy4KKwkgIEZvciBleGFtcGxlIGluIGFuIGF1ZGlvY29udmVydCAhIGF1ZGlvY29udmVydCAhIGF1ZGlvY29udmVydCBwaXBlbGluZSwKKwkgIHdoZW4gZm9yd2FyZGluZyB0aGUgZG93bnN0cmVhbSBjYXBzIHByZWZlcmVuY2UgaW4gYmFzZXRyYW5zZm9ybQorCSAgKHNlZSBlMjZkYTcyZGUyNWE5MWMzZWFhZDlmN2M4YjJmNTNiYTg4OGEwMzk0KSB0aGlzIHJlc3VsdHMgaW4KKwkgIDE2IGluc3RlYWQgb2YgMTkxIGNhcHMgc3RydWN0dXJlcy4KKworMjAxMS0wNS0wNCAxMToyOToxNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYmFzZXRyYW5zZm9ybTogSW4gZ2V0Y2FwcygpIHByZWZlciB0aGUgY2FwcyBvcmRlciBhbmQgY2FwcyBvZiBkb3duc3RyZWFtIGlmIHBvc3NpYmxlCisKKzIwMTEtMDUtMDMgMTc6MjY6NTMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIGJhc2V0cmFuc2Zvcm06IFByZWZlciBjYXBzIG9yZGVyIGdpdmVuIGJ5IHRoZSBzdWJjbGFzcyBvZiB0aGUgdGVtcGxhdGUgY2FwcyBvcmRlcgorCisyMDExLTA0LTIwIDIyOjUyOjM2ICswMjAwICBNaWd1ZWwgQW5nZWwgQ2FicmVyYSBNb3lhIDxtYWRtYWMyNTAxQGdtYWlsLmNvbT4KKworCSogZ3N0L3BhcnNlL3R5cGVzLmg6CisJKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvcGFyc2UtbGF1bmNoLmM6CisJICBwYXJzZTogZG9uJ3QgdW5lc2NhcGUgaW5zaWRlIHF1b3RlcworCSAgRXNjYXBlZCBjaGFyYWN0ZXJzIGluc2lkZSBxdW90ZWQgc3RyaW5ncyBhcmUgc3VwcG9zZWQgdG8gYmUgdW5lc2NhcGVkIGJ5CisJICBkZXNlcmlhbGl6YXRpb24gZnVuY3Rpb25zLCBub3QgYnkgcGFyc2luZyBmdW5jdGlvbnMuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ4MDI1CisKKzIwMTEtMDQtMTggMTA6MDQ6MjQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IFJlbW92ZSB1bm5lY2Vzc2FyeSBGSVhNRQorCSAgUmVzZXR0aW5nIHRoZSByZXN1bHQgaXMgbm90IG5lY2Vzc2FyeSB3aGVuIHJlc3luY2luZyBiZWNhdXNlCisJICBwYWRzIHRoYXQgcHJldmlvdXNseSBnb3QgdGhlIGV2ZW50IHdpbGwgYmUgc2tpcHBlZCBhbmQgd2UKKwkgIG5lZWQgdG8gY29uc2lkZXIgdGhlIHJlc3VsdHMgb2YgdGhlIHByZXZpb3VzIHB1c2hlcy4KKworMjAxMS0wNC0xOCAwOTo1Mzo1NSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJICBlbGVtZW50OiBJZiBhY3RpdmF0aW5nIG9uZSBwYWQgZmFpbGVkIGVycm9yIG91dCBlYXJseSBpbnN0ZWFkIG9mIHRyeWluZyB0byBhY3RpdmF0ZSB0aGUgbmV4dCBwYWRzCisJICBJZiBvbmUgcGFkIGZhaWxzIHRvIGFjdGl2YXRlIHRoZSBjb21wbGV0ZSBhY3RpdmF0aW9uIHByb2Nlc3Mgd2lsbCBmYWlsCisJICBhbnl3YXkgYW5kIHRyeWluZyB0byBhY3RpdmF0ZSB0aGUgb3RoZXIgcGFkcyBvbmx5IHdhc3RlcyB0aW1lLgorCisyMDExLTA0LTE4IDA5OjQ5OjA0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJpbi5jOgorCSAgYmluOiBJZiBhY3RpdmF0aW5nIG9uZSBwYWQgZmFpbGVkIGVycm9yIG91dCBlYXJseSBpbnN0ZWFkIG9mIHRyeWluZyB0byBhY3RpdmF0ZSB0aGUgbmV4dCBwYWRzCisJICBJZiBvbmUgcGFkIGZhaWxzIHRvIGFjdGl2YXRlIHRoZSBjb21wbGV0ZSBhY3RpdmF0aW9uIHByb2Nlc3Mgd2lsbCBmYWlsCisJICBhbnl3YXkgYW5kIHRyeWluZyB0byBhY3RpdmF0ZSB0aGUgb3RoZXIgcGFkcyBvbmx5IHdhc3RlcyB0aW1lLgorCisyMDExLTA1LTE0IDA5OjMxOjMzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogY29uZmlndXJlLmFjOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6CisJICBCYWNrIHRvIGRldmVsb3BtZW50CisKKz09PSByZWxlYXNlIDAuMTAuMzQgPT09CisKKzIwMTEtMDUtMTQgMDE6MDA6MjMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBDaGFuZ2VMb2c6CisJKiBORVdTOgorCSogUkVMRUFTRToKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6CisJKiBnc3RyZWFtZXIuZG9hcDoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6CisJICBSZWxlYXNlIDAuMTAuMzQKKworMjAxMS0wNS0xMyAwODozODowNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZXRhLmM6CisJICBtZXRhOiBGaXggY29tcGlsYXRpb24gb2YgdGhlIHVuaXQgdGVzdCBhZnRlciByZW1vdmFsIG9mIHRoZSBzZXJpYWxpemUvZGVzZXJpYWxpemUgZnVuY3Rpb25zCisKKzIwMTEtMDUtMDQgMTU6MzE6NTYgKzAzMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIGJhc2VzcmM6IGRvIG5vdCBzZXQgZmlyc3QgYnVmZmVyIHRpbWVzdGFtcCB0byAwIGZvciBsaXZlIHNvdXJjZXMKKwkgIERvaW5nIHNvIGF2b2lkcyBhIGxhcmdlIHRpbWVzdGFtcCBnYXAgYmV0d2VlbiBmaXJzdCBhbmQgc2Vjb25kIGJ1ZmZlcgorCSAgZm9yIGxpdmUgc291cmNlcyB3aGljaCB0YWtlIHRpbWUgdG8gc3RhcnQgdXAuCisJICBUaGUgZmlyc3QgYnVmZmVyIG5vdyBoYXMgYSAibGl2ZSIgdGltZXN0YW1wIGJhc2VkIG9uIHRoZSBydW5uaW5nIHRpbWUsCisJICBhcyBvdGhlciBidWZmZXJzIGRvLgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0OTM2OQorCisyMDExLTA1LTExIDE5OjEwOjI0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0bWV0YS5jOgorCSogZ3N0L2dzdG1ldGEuaDoKKwkgIG1ldGE6IHJlbW92ZSAoZGUpc2VyaWFsaXplIGZ1bmN0aW9ucworCSAgQWRkIGEgR1R5cGUgdG8gdGhlIG1ldGFkYXRhIHRvIGlkZW50aWZ5IHRoZSBHc3RNZXRhSW5mby4KKwkgIFdlIGNhbiByZW1vdmUgdGhlIChkZSlzZXJpYWxpemUgZnVuY3Rpb25zIGZvciB0aGUgbWV0YWRhdGEgYmVjYXVzZSB3ZSBjYW4KKwkgIHJlZ2lzdGVyIEdUdHlwZSB0cmFuc2Zvcm0gZnVuY3Rpb25zIGJldHdlZW4gdmFyaW91cyB0eXBlcyB0byBpbXBsZW1lbnQKKwkgIHNlcmlhbGl6YXRpb24gbGF0ZXIuCisKKzIwMTEtMDUtMTEgMTg6MTc6NDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3QuYzoKKwkqIGdzdC9nc3RfcHJpdmF0ZS5oOgorCSogZ3N0L2dzdGNhcHMuYzoKKwkqIGdzdC9nc3RldmVudC5jOgorCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSogZ3N0L2dzdHN0cnVjdHVyZS5oOgorCSAgc3RydWN0dXJlOiBtb3JlIGNsZWFudXBzCisJICBnc3Rfc3RydWN0dXJlX2dldF90eXBlKCkgLT4gX2dzdF9zdHJ1Y3R1cmVfdHlwZSB0byBhdm9pZCBtZXRob2QgY2FsbHMgZm9yCisJICBnZXR0aW5nIHRoZSBHVHlwZSB0aGF0IGluaXRpYWxpemVkIGF0IHRoZSBzdGFydC4KKwkgIEhpZGUgc29tZSBzdHJ1Y3R1cmUgZmllbGRzIGluIHByaXZhdGUgZGF0YSBzbyB0aGF0IHdlIGNhbiBjaGFuZ2UgdGhlCisJICBpbXBsZW1lbnRhdGlvbi4KKwkgIE1vdmUgc3RydWN0dXJlIGVxdWFsaXR5IGNoZWNrIGZyb20gY2Fwcy5jIHRvIHN0cnVjdHVyZS5jIHdoZXJlIGl0IGJlbG9uZ3MuCisKKzIwMTEtMDUtMTEgMTg6MDc6MjMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYmFzZXRyYW5zZm9ybTogcmVtb3ZlIG9ic29sZXRlIGNvZGUKKwkgIFJlbW92ZSBzb21lIG9ic29sZXRlIGNvZGUuCisJICBEb24ndCB0cnkgdG8gcmVjb25maWd1cmUgd2hlbiB3ZSBkb24ndCBoYXZlIHNpbmsgY2Fwcy4KKworMjAxMS0wNS0xMSAxNjo0Njo0OSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RiaW4uYzoKKwkgIGJpbjogRGVyZWZlcmVuY2UgR3N0UXVlcnkqKiBiZWZvcmUgcGFzc2luZyBpdCB0byBHU1RfUVVFUllfVFlQRV9OQU1FCisKKzIwMTEtMDUtMTEgMTY6MDM6NDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RldmVudC5jOgorCSAgZXZlbnQ6IHVwZGF0ZSB0aGUgc3RydWN0dXJlIHdoZW4gbmVlZGVkCisJICBXaGVuIHdlIGdldCB0aGUgc3RydWN0dXJlIG9mIGFuIGV2ZW50LCBtYWtlIHN1cmUgaXQgYWxzbyBjb250YWlucyB0aGUgZmllbGRzCisJICB0aGF0IHdlIGtlZXAgaW4gZmFzdCB2YXJpYWJsZXMsIHRoaXMgd2F5IHdlIGNhbiBlYXNpbHkgc2VyaWFsaXplIGFuZCBkZWJ1ZworCSAgdGhlIGV2ZW50cy4gV2Ugd291bGQgcHJvYmFibHkgbGF0ZXIgc2ltcGx5IHByZWZlciB0byByZWdpc3RlciBhIHRyYW5zZm9ybQorCSAgZnVuY3Rpb24gdG8gR19UWVBFX1NUUklORyBhbmQgR19UWVBFX0JZVEVBUlJBWSBldGMuLgorCisyMDExLTA1LTExIDE2OjAxOjQxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSAgY2FwczogY2xlYW51cHMKKwkgIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgaWYgdGhlIHR5cGUgaXMgMCwgdGhlIGluaXQgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgb25jZQorCSAgaW4gdGhlIGJlZ2lubmluZy4KKworMjAxMS0wNS0xMSAxMjowNDo0MyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGV2ZW50LmM6CisJKiBnc3QvZ3N0ZXZlbnQuaDoKKwkgIGV2ZW50OiBjbGVhbiB1cCBzb21lIG1hY3JvcworCSAgQXZvaWQgZXhlY3V0aW5nIGEgbWV0aG9kIGZvciBHU1RfVFlQRV9FVkVOVCBidXQgaW5zdGVhZCB1c2UgdGhlIHR5cGUgdmFyaWFibGUKKwkgIGRpcmVjdGx5LiBXZSBjYW4gZG8gdGhpcyBiZWNhdXNlIHdlIHJlZ2lzdGVyIGl0IGJlZm9yZSBhbnl0aGluZyBlbHNlLgorCisyMDExLTA1LTExIDE1OjQ4OjE1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1cy5jOgorCSAgYnVzOiBGaXggR1NUX0RFQlVHIHBhcmFtZXRlcnMgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBmb3JtYXQgc3RyaW5nCisKKzIwMTEtMDUtMTEgMTU6MjY6MDIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIGJhc2V0cmFuc2Zvcm06IEltcGxlbWVudCBzdXBwb3J0IGZvciBwYWQgcmVjb25maWd1cmF0aW9uIGFnYWluCisKKzIwMTEtMDUtMTEgMTU6MTg6NTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKKwkgIGNhcHNmaWx0ZXI6IEZpeCBkZWFkbG9jaywgZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzKCkgYWxyZWFkeSB0YWtlcyB0aGUgcGFkJ3Mgb2JqZWN0IGxvY2sKKworMjAxMS0wNS0xMSAxMTowNjozNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGV2ZW50LmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzoKKwkgIGV2ZW50OiBleGFtcGxlIG9mIGhvdyB0byBvcHRpbWl6ZSBldmVudHMKKwkgIFVzZSBhIHN0cnVjdHVyZSBmb3IgdGhlIFFvUyBldmVudCBieSAnZXh0ZW5kaW5nJyB0aGUgR3N0RXZlbnRJbXBsIHN0cnVjdHVyZS4KKwkgIFRoaXMgc2hvdWxkIGF2b2lkIGFsbG9jYXRpb24gb2YgR3N0U3RydWN0dXJlcyBhbmQgaXRzIGNvbnRlbnRzLgorCisyMDExLTA1LTEwIDExOjExOjE1ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6CisJICBtdWx0aXF1ZXVlOiBlbnN1cmUgdGhyZWFkIHNhZmV0eSB3aGVuIGFkZGluZyBhIHBhZAorCSAgVGhpcyBzZWVtcyB0byBiZSBhIHJlZ3Jlc3Npb24sIGFuZCB3YXMgY2F1c2luZyBjcmFzaGVzLgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0OTg3OAorCisyMDExLTA1LTEwIDE4OjM2OjMzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YmluLmM6CisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSogZ3N0L2dzdGVsZW1lbnQuaDoKKwkqIGdzdC9nc3RnaG9zdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5oOgorCSogZ3N0L2dzdHV0aWxzLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmRzcmMuYzoKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzcmMuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RxdWVyeS5jOgorCSAgcXVlcnk6IGFsbG93IF9tYWtlX3dyaXRhYmxlIG9uIHF1ZXJ5IGhhbmRsZXJzCisJICBQYXNzIGEgR3N0UXVlcnkgKiogdG8gdGhlIHF1ZXJ5IGhhbmRsZXJzIHNvIHRoYXQgdGhleSBjYW4gbWFrZSB0aGUgcXVlcnkKKwkgIHdyaXRhYmxlIGJlZm9yZSB1c2luZyBhIHNldHRlciBvbiBpdC4KKwkgIFBvcnQgY29kZSB0byBuZXcgQVBJLgorCisyMDExLTA1LTEwIDE2OjQ2OjE1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgorCSAgcG9ydGluZzogdXBkYXRlIHBvcnRpbmcgZG9jCisKKzIwMTEtMDUtMTAgMTY6NDE6MzYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmdW5uZWwuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgorCSAgZWxlbWVudDogdXNlIHJlcXVlc3RfbmV3X3BhZF9mdWxsIGFzIHRoZSBkZWZhdWx0CisJICBBZGQgR3N0Q2FwcyB0byByZXF1ZXN0X25ld19wYWQgc28gdGhhdCByZXF1ZXN0X25ld19wYWRfZnVsbCBjYW4gYmUgcmVtb3ZlZC4KKwkgIEZpeCBlbGVtZW50cy4KKworMjAxMS0wNS0xMCAxNjoyMzowOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKKwkgIHBvcnRpbmc6IHVwZGF0ZSBwb3J0aW5nIGRvYworCisyMDExLTA1LTEwIDE1OjQxOjU0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cXVlcnkuYzoKKwkgIHF1ZXJ5OiBtYWtlIHN1cmUgcXVlcnkgaXMgd3JpdGFibGUKKwkgIE1ha2Ugc3VyZSB0aGUgUXVlcnkgaXMgd3JpdGFibGUgYmVmb3JlIGV4ZWN1dGluZyB0aGUgc2V0dGVycy4KKworMjAxMS0wNS0xMCAxNTozMzo1MyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGluZm8uYzoKKwkqIGdzdC9nc3RxdWVyeS5jOgorCSogZ3N0L2dzdHF1ZXJ5Lmg6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cXVlcnkuYzoKKwkgIHF1ZXJ5OiBIaWRlIEdzdFN0cnVjdHVyZSBpbiBxdWVyaWVzCisJICBIaWRlIHRoZSBHc3RTdHJ1Y3R1cmUgZnJvbSB0aGUgcXVlcnkgQVBJLgorCSAgUmVuYW1lIHNvbWUgbWV0aG9kcyB0byBtYXRjaCB0aGUgbW9yZSBjb21tb24gbmFtZXMgaW4gR09iamVjdCBsaWJyYXJpZXMuCisJICBBZGQgc29tZSBtb3JlIHVzZWZ1bCBxdWVyeSBBUEkuCisKKzIwMTEtMDUtMTAgMTM6MzQ6MTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidXMuYzoKKwkqIGdzdC9nc3RpbmZvLmM6CisJKiBnc3QvZ3N0bWVzc2FnZS5jOgorCSogZ3N0L2dzdG1lc3NhZ2UuaDoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKKwkgIG1lc3NhZ2U6IGhpZGUgdGhlIG1lc3NhZ2Ugc3RydWN0dXJlIGZpZWxkCisJICBNYWtlIGEgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgR3N0U3RydWN0dXJlIGJpdHMgb2YgdGhlIG1lc3NhZ2UuCisJICBBZGQgc29tZSBtb3JlIHVzZWZ1bCBtYWNyb3MgbGlrZSB3ZSBoYXZlIGZvciBldmVudHMuCisKKz09PSByZWxlYXNlIDAuMTAuMzMgPT09CisKKzIwMTEtMDUtMTAgMDg6NTU6MTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBDaGFuZ2VMb2c6CisJKiBORVdTOgorCSogUkVMRUFTRToKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6CisJKiBnc3RyZWFtZXIuZG9hcDoKKwkqIHBvL2FmLnBvOgorCSogcG8vYXoucG86CisJKiBwby9iZS5wbzoKKwkqIHBvL2JnLnBvOgorCSogcG8vY2EucG86CisJKiBwby9jcy5wbzoKKwkqIHBvL2RhLnBvOgorCSogcG8vZGUucG86CisJKiBwby9lbC5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZXMucG86CisJKiBwby9ldS5wbzoKKwkqIHBvL2ZpLnBvOgorCSogcG8vZnIucG86CisJKiBwby9nbC5wbzoKKwkqIHBvL2h1LnBvOgorCSogcG8vaWQucG86CisJKiBwby9pdC5wbzoKKwkqIHBvL2phLnBvOgorCSogcG8vbHQucG86CisJKiBwby9uYi5wbzoKKwkqIHBvL25sLnBvOgorCSogcG8vcGwucG86CisJKiBwby9wdF9CUi5wbzoKKwkqIHBvL3JvLnBvOgorCSogcG8vcnUucG86CisJKiBwby9ydy5wbzoKKwkqIHBvL3NrLnBvOgorCSogcG8vc2wucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJKiBwby96aF9DTi5wbzoKKwkqIHBvL3poX1RXLnBvOgorCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgorCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKKwkgIFJlbGVhc2UgMC4xMC4zMworCSAgSGlnaGxpZ2h0czoKKwkgIC0gbmV3IHBhcnNlciBiYXNlIGNsYXNzOiBHc3RCYXNlUGFyc2UKKwkgIC0gbmV3IGNvcmUgZWxlbWVudDogZnVubmVsCisJICAtIE9TWCBtdWx0aS1hcmNoIGZpeGVzCisJICAtIG5ldyBRb1MgdHlwZSBmb3IgUW9TIGV2ZW50cworCSAgLSBuZXcgcHJvZ3Jlc3MgbWVzc2FnZSBBUEkgdG8gbm90aWZ5IGFwcGxpY2F0aW9ucyBvZiBhc3luY2hyb25vdXMgb3BlcmF0aW9ucworCSAgLSBjb3VudGxlc3Mgb3RoZXIgZml4ZXMgYW5kIGltcHJvdmVtZW50cworCisyMDExLTA1LTEwIDEyOjI5OjA2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Y2Fwcy5oOgorCSAgY2FwczogZml4IHRoZSBtYWNyb3MgYSBsaXR0bGUKKworMjAxMS0wNS0xMCAxMTo1MDoxNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGV2ZW50LmM6CisJKiBnc3QvZ3N0ZXZlbnQuaDoKKwkqIGdzdC9nc3RpbmZvLmM6CisJKiBsaWJzL2dzdC9jaGVjay9nc3Rjb25zaXN0ZW5jeWNoZWNrZXIuYzoKKwkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzoKKwkgIGV2ZW50OiBIaWRlIHRoZSBHc3RTdHJ1Y3R1cmUKKwkgIEhpZGUgdGhlIEdzdFN0cnVjdHVyZSBvZiB0aGUgZXZlbnQgaW4gdGhlIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHBhcnQgc28gdGhhdAorCSAgd2UgY2FuIGNoYW5nZSBpdC4KKwkgIEFkZCBtZXRob2RzIHRvIGNoZWNrIGFuZCBtYWtlIHRoZSBldmVudCB3cml0YWJsZS4KKwkgIEFkZCBhIG5ldyBtZXRob2QgdG8gZ2V0IGEgd3JpdGFibGUgR3N0U3RydWN0dXJlIG9mIHRoZSBlbGVtZW50LgorCSAgQXZvaWQgZGlyZWN0bHkgYWNjaXNpbmcgdGhlIGV2ZW50IHN0cnVjdHVyZS4KKworMjAxMS0wNS0wOSAxODo0ODo1NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGV2ZW50LmM6CisJKiBnc3QvZ3N0ZXZlbnQuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzoKKwkgIGV2ZW50OiBfcW9zX2Z1bGwgLT4gX3FvcworCisyMDExLTA1LTA5IDE3OjUxOjA3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZXZlbnQuYzoKKwkqIGdzdC9nc3RldmVudC5oOgorCSogZ3N0L2dzdHNlZ21lbnQuYzoKKwkqIGdzdC9nc3RzZWdtZW50Lmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc2luay5jOgorCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNpbmsuYzoKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpcXVldWUuYzoKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlLmM6CisJKiB0ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RpbmZvLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c2VnbWVudC5jOgorCSogdGVzdHMvY2hlY2svbGlicy9iYXNlc3JjLmM6CisJICBzZWdtZW50OiByZW1vdmUgX2Z1bGwgdmVyc2lvbgorCSAgUmVuYW1lIHRoZSBfZnVsbCB2ZXJzaW9ucyBvZiB0aGUgZnVuY3Rpb25zIHRvIHRoZSBub3JtYWwgZnVuY3Rpb24gbmFtZXMuCisKKzIwMTEtMDUtMDkgMTY6Mzk6MTMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RzZWdtZW50LmM6CisJKiBnc3QvZ3N0c2VnbWVudC5oOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6CisJICBzZWdtZW50OiByZW1vdmUgYWJzX3JhdGUgZnJvbSBzZWdtZW50IHN0cnVjdHVyZQorCSAgUmVtb3ZlIHRoZSBhYnNfcmF0ZSBmaWVsZCBmcm9tIHRoZSBzZWdtZW50IHN0cnVjdHVyZSwgd2UgY2FuIHRyaXZpYWxseSBjb21wdXRlCisJICBpdCB3aGVuIG5lZWRlZC4KKworMjAxMS0wNS0wOSAxNjoyMToyOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSogZ3N0L2dzdGJ1ZmZlci5oOgorCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5oOgorCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc2VsZWN0b3IuYzoKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3RlZS5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgorCSogdGVzdHMvY2hlY2svbGlicy90cmFuc2Zvcm0xLmM6CisJICBjYXBzOiByZW1vdmUgY2FwcyBmcm9tIGJ1ZmZlcnMgYW5kIHBhZHMKKwkgIFJlbW92ZSB0aGUgR3N0Q2FwcyBmcm9tIGJ1ZmZlcnMgYW5kIHBhZHMuIFdlIG5vdyB1c2UgQ0FQUyBldmVudHMgdG8gbmVnb3RpYXRlCisJICBmb3JtYXRzIGJldHdlZW4gZWxlbWVudC4KKworMjAxMS0wNS0wOSAxNTowNjoyMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBiYXNldHJhbnNmb3JtOiBVc2UgQ0FQcyBldmVudAorCSAgVXNlIHRoZSBjYXBzIGV2ZW50IHRvIGNvbmZpZ3VyZSBiYXNldHJhbnNmb3JtLgorCSAgUmVtb3ZlIGZvcmNlX2FsbG9jIGhhY2ssIHdlIGRvbid0IG5lZWQgdGhpcyBpbiAwLjExIHdpdGggbmV3IHVwc3RyZWFtCisJICBuZWdvdGlhdGlvbi4KKwkgIEF2b2lkIGdldHRpbmcgc29tZSBwYWQgY2Fwcy4KKworMjAxMS0wNS0wOSAxNTowNjowNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgYmFzZXNpbms6IGFkZCBzb21lIG1vcmUgZGVidWcKKworMjAxMS0wNS0wOCAxMTowMjoxNiArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgd2luMzI6IEFkZCBuZXcgc3ltYm9scworCisyMDExLTA1LTA4IDExOjAxOjU3ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSAgZ3N0YnVmZmVyOiBGaXggdW5pdGlhbGl6ZWQgdmFyaWFibGVzCisKKzIwMTEtMDUtMDkgMTA6NTQ6MTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R1dGlscy5jOgorCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKKwkqIHRvb2xzL2dzdC14bWxpbnNwZWN0LmM6CisJICB0b29sczogYXZvaWQgdXNpbmcgcGFkIGNhcHMKKwkgIEF2b2lkIGRpcmVjdGx5IGFjY2Vzc2luZyB0aGUgcGFkIGNhcHMsIHVzZSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMoKSBpbnN0ZWFkLgorCisyMDExLTA1LTA4IDEzOjE0OjU1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCisKKzIwMTEtMDUtMDggMTM6MDc6MTMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJhc2VzaW5rOiB1c2UgQ0FQUyBldmVudCBpbnN0ZWFkIG9mIHNldGNhcHMgZnVuY3Rpb24KKworMjAxMS0wNS0wOCAxMjo0NjoxNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6CisJKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgorCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgorCSAgYmFzZTogYXZvaWQgdXNpbmcgYnVmZmVyIGNhcHMKKwkgIENvbW1lbnQgYWxsIGNvZGUgdXNpbmcgYnVmZmVyIGNhcHMuCisJICBSZXdvcmsgY2Fwc2ZpbHRlciBjb2RlIGEgbGl0dGxlLgorCSAgRml4IHNvbWUgdW5pdCB0ZXN0cworCisyMDExLTA1LTA4IDEyOjQzOjI2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IGltcHJvdmUgY2FwcyBldmVudCBoYW5kbGluZworCSAgRml4IHJlcGxhY2Ugb2YgY2FwcyBldmVudHMgd2hlbiBsaW5raW5nOiB3ZSBuZWVkIHRvIHVucmVmIHRoZSBvbGQgb25lcy4KKwkgIE1ha2Ugc3VyZSB3ZSBwYXNzIGVycm9yIHZhbHVlcyBhcm91bmQuCisJICBNb3ZlIGJhY2t3YXJkIGNvbXBhdCBjb2RlIGludG8gdGhlIGRlZmF1bHQgaGFuZGxlciBmb3Igbm93LgorCisyMDExLTA1LTA4IDEyOjM4OjA1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZXZlbnQuYzoKKwkgIGV2ZW50OiBkb24ndCByZWYgdGhlIGNhcHMKKwkgIFVzZSBhIGRpZmZlcmVudCB3YXkgb2YgZ2V0dGluZyB0aGUgY2FwcyBmcm9tIHRoZSBjYXBzIGV2ZW50IHNvIHRoYXQgbm8KKwkgIHJlZmNvdW50aW5nIGhhcHBlbnMuCisKKzIwMTEtMDUtMDggMTI6Mzc6NDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkgIGJ1ZmZlcjogYXZvaWQgdXNpbmcgYnVmZmVyIGNhcHMKKworMjAxMS0wNS0wNiAyMzo0MDo1OCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IGRvbid0IHBvc3QgbG9hZHMgb2YgZW1wdHkgdGFnbGlzdHMKKwkgIE9ubHkgcG9zdCBiaXRyYXRlIHVwZGF0ZXMgaWYgdGhlcmUncyBzb21ldGhpbmcgdG8gcG9zdCwgZG9uJ3QKKwkgIHBvc3QgZW1wdHkgdGFnbGlzdHMgaWYgbm90aGluZyBjaGFuZ2VkLgorCisyMDExLTA1LTA2IDE5OjA0OjU0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBwYWQ6IGF2b2lkIHVzaW5nIHRoZSBvbGQgR1NUX1BBRF9DQVBTCisJICBEb24ndCB1c2UgR1NUX1BBRF9DQVBTIGJ1dCBpbnN0ZWFkIHVzZSB0aGUgbmV3IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcygpCisJICBtZXRob2QuCisJICBBdm9pZCBzZXR0aW5nIGNhcHMgb24gYnVmZmVycy4KKworMjAxMS0wNS0wNiAxOTowMzozMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5oOgorCSAgcGFkOiBhZGQgMiBuZXcgY2FwcyBtZXRob2RzCisJICBBZGQgbWV0aG9kIHRvIGdldCB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQgY2FwcyBvbiB0aGUgcGFkLgorCSAgQWRkIGEgbWV0aG9kIHRvIGNoZWNrIGlmIGNhcHMgYXJlIGNvbmZpZ3VyZWQgb24gYSBwYWQuCisKKzIwMTEtMDUtMDYgMTc6NTk6MzMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RwYWQuaDoKKwkqIGdzdC9nc3R1dGlscy5jOgorCSogZ3N0L2dzdHV0aWxzLmg6CisJICBwYWQ6IGltcGxlbWVudCBmaXhlZCBjYXBzIHdpdGggYW4gb2JqZWN0IGZsYWcKKwkgIEltcGxlbWVudCBmaXhlZCBjYXBzIHdpdGggYW4gb2JqZWN0IGZsYWcgaW5zdGVhZCBvZiBhIGN1c3RvbSBnZXRjYXBzIGZ1bmN0aW9uLgorCisyMDExLTA1LTA2IDE3OjMwOjI0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IGRvbid0IHVzZSBidWZmZXIgY2FwcyBmb3IgbmVnb3RpYXRpb24KKwkgIERvbid0IHVzZSB0aGUgYnVmZmVyIGNhcHMgZm9yIG5lZ290aWF0aW9uIGFueW1vcmUgYnV0IHVzZSB0aGUgQ0FQUyBldmVudHMuCisJICBNYWtlIHRoZSBfc2V0X2NhcHMgbWV0aG9kIHByb2R1Y2UgdGhlIENBUFMgZXZlbnQsIGFkZCBzb21lIGJhY2t3YXJkCisJICBjb21wYXRpYmlsaXR5IGNvZGUgdG8gdHJpZ2dlciB0aGUgc2V0Y2FwcyBmdW5jdGlvbnMgb24gc3JjIGFuZCBzaW5rcGFkcy4KKwkgIFJlbW92ZSBhbGwgbmVnb3RpYXRpb24gY29kZSBmcm9tIHRoZSBjaGFpbiBmdW5jdGlvbnMuCisJICBEb24ndCB1c2UgdGhlIEdTVF9QQURfQ0FQUyB2YXJpYWJsZSBhbnltb3JlIHRvIHN0b3JlIHRoZSBjYXBzIGJ1dCByZXRyaWV2ZSB0aGUKKwkgIGNhcHMgZnJvbSB0aGUgc3RpY2t5IGV2ZW50IGFycmF5LgorCisyMDExLTA1LTA2IDE2OjE0OjQxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zZWxlY3Rvci5jOgorCSAgc2VsZWN0b3I6IGRvbid0IHVuc2V0IGNhcHMKKworMjAxMS0wNS0wNiAxNjoxNDoyMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkgIHR5cGVmaW5kOiBkb24ndCB1bnNldCBjYXBzCisKKzIwMTEtMDUtMDYgMTY6MTM6NTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6CisJICBjaGVjazogbGV0IHRoZSBub3JtYWwgY29kZSB1bnNldCBjYXBzCisKKzIwMTEtMDUtMDYgMTY6MTE6NDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKKwkgIG91dHB1dHNlbGVjdG9yOiBoYW5kbGUgTlVMTCBwYWRzIGluIHNvbWUgY2FzZXMKKworMjAxMS0wNS0wNiAxNjoxMToxOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJpbi5jOgorCSAgYmluOiBsZXQgdGhlIHBhZCBjbGVhbiB1cCBpbiBhY3RpdmF0ZQorCisyMDExLTA1LTA2IDE1OjU1OjMxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSAgZWxlbWVudDogZG9uJ3QgbWVzcyB3aXRoIHBhZCBjYXBzIGluIGFjdGl2YXRlCisJICBXaGVuIGRlYWN0aXZhdGluZyBhIHBhZCwgbGV0IHRoZSBwYWQgZGVjaWRlIHdoYXQgZmllbGRzIHRvIGNsZWFyLgorCisyMDExLTA1LTA2IDE1OjUxOjExICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZXZlbnQuYzoKKwkgIGV2ZW50OiBvbmx5IGFsbG93IGZpeGVkIGNhcHMgaW4gY2FwcyBldmVudAorCisyMDExLTA1LTA2IDEzOjAxOjI0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGV2ZW50LmM6CisJICBldmVudDogSW1wcm92ZSBkb2N1bWVudGF0aW9uIG9mIGdzdF9ldmVudF9uZXdfcmVjb25maWd1cmUoKQorCisyMDExLTA1LTA2IDEyOjIzOjAxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgorCSAgcG9ydGluZzogdXBkYXRlIHBvcnRpbmcgZG9jCisKKzIwMTEtMDUtMDYgMTI6MTk6MTYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBlbGVtZW50OiByZW5hbWUgZ3N0X2VsZW1lbnRfbG9zdF9zdGF0ZV9mdWxsKCkKKwkgIFJlbmFtZSBnc3RfZWxlbWVudF9sb3N0X3N0YXRlX2Z1bGwoKSB0byBnc3RfZWxlbWVudF9sb3N0X3N0YXRlKCkgYW5kCisJICByZW1vdmUgdGhlIG9sZCBtZXRob2QgbmFtZS4KKworMjAxMS0wNS0wNiAxMjowOTowMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5oOgorCSAgcGFkOiBjbGVhbiB1cCB0aGUgLmggZmlsZSBhIGJpdAorCisyMDExLTA1LTA2IDExOjE0OjAyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvTWFrZWZpbGUuYW06CisJKiBnc3QvZ3N0LmM6CisJKiBnc3QvZ3N0Y29udGV4dC5jOgorCSogZ3N0L2dzdGNvbnRleHQuaDoKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RwYWQuaDoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgcGFkOiBpbXBsZW1lbnQgbW9yZSBzdGlja3kgZXZlbnRzCisJICBSZW1vdmUgdGhlIGNvbnRleHQgYWdhaW4sIGFkZGluZyBhbiBleHRyYSBsYXllciBvZiByZWZjb3VudGluZyBhbmQgb2JqZWN0CisJICBjcmVhdGlvbiB0byBtYW5hZ2UgYW4gYXJyYXkgaXMgdG9vIGNvbXBsaWNhdGVkIGFuZCBpbmVmZmljaWVudC4gVXNlIGEgc2ltcGxlCisJICBhcnJheSBhZ2Fpbi4KKwkgIEFsc28gaW1wbGVtZW50IGV2ZW50IHVwZGF0ZXMgd2hlbiBjYWxsaW5nIGdzdF9wYWRfY2hhaW4oKSBhbmQKKwkgIGdzdF9ldmVudF9zZW5kX2V2ZW50KCkgZGlyZWN0bHkuCisKKzIwMTEtMDUtMDYgMTE6MzU6MzYgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdGluZm8uaDoKKwkgIGluZm86IGF2b2lkIHJlZGVmaW5pdGlvbiBvZiBzeW1ib2xzIHdoZW4gZGVidWdnaW5nIGlzIG9mZgorCSAgVGhlIHJlZmFjdG9yaW5nIG9mIGdzdF9kZWJ1Z19hZGRfbG9nX2Z1bmN0aW9uKCkgbm93IGNhdXNlcyBidWlsZCBmYWlsdXJlIHdoZW4KKwkgIGRlYnVnLWxvZ2dpbmcgaXMgdHVybmVkIG9mZi4gSnVzdCBtb3ZlIGl0IHRvIHRoZSBjb25kaXRpb25hbCBwYXJ0IG9mIHRoZSBoZWFkZXIuCisKKzIwMTEtMDUtMDYgMTE6MDA6MTggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RldmVudC5oOgorCSAgZXZlbnQ6IHJlb3JkZXIgZXZlbnRzCisJICBSZW9yZGVyIHRoZSBzdGlja3kgZXZlbnRzIHNvIHRoYXQgdGhleSBhcmUgaW4gdGhlIG9yZGVyIHRoZXkgc2hvdWxkIGJlIHB1c2hlZC4KKworMjAxMS0wNS0wNSAxOToyNDo0NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiBzaW1wbGlmeSBzb21lIG1vcmUKKwkgIElmIHdlIGdldCBhIGNvbnRleHQgaW4gdGhlIGNoYWluIGZ1bmN0aW9ucyB3ZSBhbHdheXMgbmVlZCB0byBkbyBhIGZ1bGwgdXBkYXRlIG9mCisJICB0aGUgY29udGV4dCBvbiB0aGUgcGVlciBwYWQuCisKKzIwMTEtMDUtMDUgMTg6NTY6NDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogaW1wcm92ZSBjb250ZXh0IHBhc3Npbmcgc29tZSBtb3JlCisJICBQYXNzIHRoZSBjb250ZXh0IGRvd25zdHJlYW0gd2hlbiBpdCBnb3QgdXBkYXRlZC4KKwkgIEhhdmUgdHdvIHdheXMgb2YgaW5mb3JtaW5nIGRvd25zdHJlYW0gb2YgZXZlbnRzLCBkbyBhIGZ1bGwgY29udGV4dCB1cGRhdGUgd2hlbgorCSAgdGhlIENPTlRFWFRfUEVORElORyBmbGFnIGlzIHNldCBhbmQgc2ltcGx5IGZvcndhcmQgdGhlIGV2ZW50IG90aGVyd2lzZS4KKwkgIFNldCB0aGUgQ09OVEVOVF9QRU5ESU5HIGZsYWcgd2hlbiBsaW5raW5nIHBhZHMuCisJICBXZSBkb24ndCBuZWVkIHRvIG9sZCBjb250ZXh0IGFueW1vcmUgd2hlbiB1cGRhdGluZyB0aGUgY29udGV4dCBvZiBhIHBhZC4KKworMjAxMS0wNS0wNSAxODoyMToyMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYmFzZXRyYW5zZm9ybTogRG9uJ3QgZ2V0IHRoZSBwYXJlbnQgdHdpY2UgaW4gdGhlIHNldGNhcHMgZnVuY3Rpb24KKworMjAxMS0wNS0wNSAxNjo1OTozNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogRml4IHJlZmNvdW50IGxlYWsgb2YgdGhlIHBhcmVudCBpbiB0aGUgZGVmYXVsdCBldmVudCBkaXNwYXRjaCBmdW5jdGlvbgorCisyMDExLTA1LTA1IDE2OjMyOjExICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkLmg6CisJICBwYWQ6IGltcHJvdmUgcGFzc2luZyBhcm91bmQgdGhlIGNvbnRleHQKKwkgIEltcHJvdmUgcGFzc2luZyBhcm91bmQgdGhlIGNvbnRleHQsIG9ubHkgc2VuZCB0aGUgY29udGV4dCB0byB0aGUgcGVlciBlbGVtZW50CisJICB3aGVuIHRoZSBDT05URVhUX1BFTkRJTkcgZmxhZyBpcyBzZXQuCisKKzIwMTEtMDUtMDUgMTY6MDU6MjAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIHdpbjMyOiBVcGRhdGUgZXhwb3J0cworCisyMDExLTAzLTE3IDExOjUyOjQyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdGVlLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0aXRlcmF0b3IuYzoKKwkgIHRlc3RzOiBVcGRhdGUgZm9yIG5ldyBHc3RJdGVyYXRvciBBUEkKKworMjAxMS0wMy0xNyAxMTozMjoyNCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGRvY3MvZGVmOiBBZGQgbmV3IHN5bWJvbHMsIHJlbW92ZSBvbGQgc3ltYm9scworCisyMDExLTAzLTE3IDExOjMyOjExICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmdW5uZWwuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgorCSAgZWxlbWVudHM6IFVwZGF0ZSBldmVyeXRoaW5nIGZvciB0aGUgbmV3IEdzdEl0ZXJhdG9yIEFQSQorCisyMDExLTAzLTE3IDExOjMxOjU5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJpbi5jOgorCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3Rmb3JtYXQuYzoKKwkqIGdzdC9nc3RnaG9zdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHF1ZXJ5LmM6CisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkqIGdzdC9nc3R2YWx1ZS5jOgorCSAgZ3N0OiBVcGRhdGUgZXZlcnl0aGluZyBmb3IgdGhlIG5ldyBHc3RJdGVyYXRvciBBUEkKKworMjAxMS0wMy0xNiAxMDo1MDozOSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RpdGVyYXRvci5jOgorCSogZ3N0L2dzdGl0ZXJhdG9yLmg6CisJKiBnc3QvZ3N0cGx1Z2luLmM6CisJICBpdGVyYXRvcjogUmVmYWN0b3IgR3N0SXRlcmF0b3IgdG8gYmUgbW9yZSBiaW5kaW5nIGZyaWVuZGx5IGFuZCBoYXZlIHNhbmVyIHJlZmNvdW50aW5nCisJICBGaXhlcyBidWcgIzYzODk4Ny4KKworMjAxMS0wMS0wOCAxMjoyNzo1NSAtMDIwMCAgSm9oYW4gRGFobGluIDxqb2hhbkBnbm9tZS5vcmc+CisKKwkqIGdzdC9nc3RpdGVyYXRvci5jOgorCSogZ3N0L2dzdGl0ZXJhdG9yLmg6CisJICBpdGVyYXRvcjogcmVnaXN0ZXIgYXMgYSBib3hlZCB0eXBlCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM4OTg3CisKKzIwMTEtMDEtMDggMTI6MTQ6NDAgLTAyMDAgIEpvaGFuIERhaGxpbiA8am9oYW5AZ25vbWUub3JnPgorCisJKiBnc3QvZ3N0aXRlcmF0b3IuYzoKKwkgIGl0ZXJhdG9yOiB1c2UgR1NsaWNlCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM4OTg3CisKKzIwMTEtMDEtMDggMTI6MTI6NDEgLTAyMDAgIEpvaGFuIERhaGxpbiA8am9oYW5AZ25vbWUub3JnPgorCisJKiBnc3QvZ3N0YmluLmM6CisJKiBnc3QvZ3N0aXRlcmF0b3IuYzoKKwkgIGl0ZXJhdG9yOiBmcmVlIHN0cnVjdCBpbiBnc3RfaXRlcmF0b3JfZnJlZQorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzODk4NworCisyMDExLTAxLTA4IDEyOjA3OjU1IC0wMjAwICBKb2hhbiBEYWhsaW4gPGpvaGFuQGdub21lLm9yZz4KKworCSogZ3N0L2dzdGl0ZXJhdG9yLmM6CisJKiBnc3QvZ3N0aXRlcmF0b3IuaDoKKwkgIGl0ZXJhdG9yOiBzdG9yZSBzaXplIGluIHRoZSBzdHJ1Y3QKKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Mzg5ODcKKworMjAxMS0wNS0wNSAxMToyODozOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RjYXBzLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOgorCSAgY2FwczogTWVyZ2Ugc3RydWN0dXJlcyB3aGVuIGludGVyc2VjdGluZyBpbnN0ZWFkIG9mIGFwcGVuZGluZyB0aGVtCisJICBUaGlzIHByZXZlbnRzIGFkZGluZyBkdXBsaWNhdGVzIG92ZXIgYW5kIG92ZXIgYWdhaW4gdG8gdGhlIHJlc3VsdGluZworCSAgY2FwcyBpZiB0aGV5IGFscmVhZHkgZGVzY3JpYmUgdGhlIG5ldyBpbnRlcnNlY3Rpb24gcmVzdWx0LgorCSAgV2hpbGUgdGhpcyBjaGFuZ2VzIGludGVyc2VjdGlvbiBmcm9tIE8obiptKSB0byBPKG5eMiptKSwgaXQgcmVzdWx0cyBpbgorCSAgc21hbGxlciBjYXBzLCB3aGljaCBpbiB0aGUgZW5kIHdpbGwgZGVjcmVhc2UgZnVydGhlciBwcm9jZXNzaW5nIHRpbWVzLgorCSAgRm9yIGV4YW1wbGUgaW4gYW4gYXVkaW9jb252ZXJ0ICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9jb252ZXJ0IHBpcGVsaW5lLAorCSAgd2hlbiBmb3J3YXJkaW5nIHRoZSBkb3duc3RyZWFtIGNhcHMgcHJlZmVyZW5jZSBpbiBiYXNldHJhbnNmb3JtCisJICAoc2VlIGUyNmRhNzJkZTI1YTkxYzNlYWFkOWY3YzhiMmY1M2JhODg4YTAzOTQpIHRoaXMgcmVzdWx0cyBpbgorCSAgMTYgaW5zdGVhZCBvZiAxOTEgY2FwcyBzdHJ1Y3R1cmVzLgorCisyMDExLTA1LTA0IDExOjI5OjE1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBiYXNldHJhbnNmb3JtOiBJbiBnZXRjYXBzKCkgcHJlZmVyIHRoZSBjYXBzIG9yZGVyIGFuZCBjYXBzIG9mIGRvd25zdHJlYW0gaWYgcG9zc2libGUKKworMjAxMS0wNS0wMyAxNzoyNjo1MyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYmFzZXRyYW5zZm9ybTogUHJlZmVyIGNhcHMgb3JkZXIgZ2l2ZW4gYnkgdGhlIHN1YmNsYXNzIG9mIHRoZSB0ZW1wbGF0ZSBjYXBzIG9yZGVyCisKKzIwMTEtMDUtMDMgMTQ6MTM6NTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIGJhc2VzcmM6IFVzZSB0aGUgcmVjb25maWd1cmUgZmxhZyBvbiB0aGUgcGFkIGluc3RlYWQgb2YgdGhlIGV2ZW50CisKKzIwMTEtMDUtMDMgMTQ6MTE6MzQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIGJhc2V0cmFuc2Zvcm06IFVzZSBuZXcgcmVjb25maWd1cmUgZmxhZyBvbiB0aGUgcGFkcyBpbnN0ZWFkIG9mIHRoZSByZWNvbmZpZ3VyZSBldmVudAorCisyMDExLTA1LTAzIDEzOjQyOjQ0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5oOgorCSAgcGFkOiBLZWVwIHRyYWNrIG9mIHJlY29uZmlndXJlIGV2ZW50cyBhbmQgdGhlIHBhZC1uZWVkcy1yZWNvbmZpZ3VyaW5nIHN0YXR1cworCisyMDExLTA1LTAzIDEzOjA1OjA2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3RldmVudC5jOgorCSogZ3N0L2dzdGV2ZW50Lmg6CisJKiBnc3QvZ3N0cXVhcmsuYzoKKwkqIGdzdC9nc3RxdWFyay5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBldmVudDogUmVuYW1lIHJlbmVnb3RpYXRlIGV2ZW50IHRvIHJlY29uZmlndXJlCisJICBJbiAwLjExIHRoaXMgZXZlbnQgd2lsbCBhbHNvIGRvIHJlY29uZmlndXJhdGlvbiBvZiBidWZmZXIgcG9vbHMKKwkgIGFuZCBzaW1pbGFyIHRoaW5ncywgbm90IGp1c3QgcmVuZWdvdGlhdGlvbi4KKworMjAxMC0wMy0xNyAyMToyNDo1NSArMDAwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IFNlbmQgcmVuZWdvdGlhdGUgZXZlbnQgb24gbGluaworCisyMDEwLTAzLTE3IDIxOjE3OjEwICswMDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogRHJvcCByZW5lZ290aWF0ZSBldmVudCBpZiB0aGVyZSBpcyBubyBnZXRjYXBzIGZ1bmN0aW9uIG9uIGEgc2luayBwYWQKKwkgIElmIHRoZXJlIGlzIG5vIGN1c3RvbSBnZXRjYXBzIGZ1bmN0aW9uIG9uIGEgc2luayBwYWQsIHRoZW4gY2hhbmdlcyBpbgorCSAgZG93bnN0cmVhbSBjYXBzIHdpbGwgbmV2ZXIgYmUgcHJvcGFnYXRlZCwgc28gdGhlcmUgaXMgbm8gcG9pbnQgaW4gdHJ5aW5nIHRvCisJICByZW5lZ290aWF0ZSB0aGUgY2FwYWJpbGl0aWVzLgorCisyMDExLTA0LTI2IDE2OjM5OjU2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJICBiYXNlc3JjOiBPbmx5IHJlbmVnb3RpYXRlIG9uY2UgYWZ0ZXIgcmVjZWl2aW5nIGEgcmVuZWdvdGlhdGUgZXZlbnQKKwkgIEFsc28gbWFrZSB0aGlzIHRocmVhZHNhZmUuCisKKzIwMTEtMDEtMTcgMTQ6MTM6NDYgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIGJhc2VzcmM6IEhhbmRsZSB0aGUgbmV3IHJlbmVnb3RpYXRlIGV2ZW50CisJICBNYWtlcyBiYXNlc3JjIGhhbmRsZSB0aGUgbmV3IHJlbmVnb3RpYXRlIGV2ZW50IGJ5IHVzaW5nIGEKKwkgIHJlbmVnb3RpYXRlIGZsYWcuCisKKzIwMTEtMDQtMjYgMTY6NDg6MDUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIGJhc2V0cmFuc2Zvcm06IEFsc28gY2FsbCBnc3RfYmFzZV90cmFuc2Zvcm1fcmVjb25maWd1cmUoKSBvbiByZW5lZ290aWF0ZSBldmVudHMKKworMjAxMS0wMS0xNyAxNDoxMzo0NiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYmFzZXRyYW5zZm9ybTogSGFuZGxlIHRoZSBuZXcgcmVuZWdvdGlhdGUgZXZlbnQKKwkgIExldCBiYXNldHJhbnNmb3JtIHB1c2ggYSByZW5lZ290aWF0ZSBldmVudCB1cHN0cmVhbQorCSAgd2hlbiBpdCBnZXRzIGEgbmV3IHN1Z2dlc3Rpb24KKworMjAxMS0wMS0xNyAxMTo1MTo0OSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RldmVudC5jOgorCSogZ3N0L2dzdGV2ZW50Lmg6CisJKiBnc3QvZ3N0cXVhcmsuYzoKKwkqIGdzdC9nc3RxdWFyay5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBldmVudDogQWRkaW5nIG5ldyByZW5lZ290aWF0ZSBldmVudAorCisyMDExLTA1LTA1IDEzOjEwOjQyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IHBhc3MgdGhlIGNvbnRleHQgYXJvdW5kCisJICBQYXNzIHRoZSBjb250ZXh0IGZyb20gc3JjcGFkIHRvIHNpbmtwYWQgYmVmb3JlIGRhdGFmbG93IHdoZW4gc29tZXRoaW5nCisJICBjaGFuZ2VkLgorCisyMDExLTA1LTA1IDExOjE3OjIwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkLmg6CisJICBwYWQ6IHVwZGF0ZSB0aGUgY29udGV4dCBsYXp5bHkKKworMjAxMS0wNS0wNSAxMToxNjo0OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdC5jOgorCSAgZ3N0OiBpbml0IHRoZSBHVHlwZSBlYXJseQorCisyMDExLTA1LTA1IDExOjE2OjIzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGRlZnM6IHVwZGF0ZSBkZWZzCisKKzIwMTEtMDUtMDUgMTA6NDA6MTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3Rjb250ZXh0LmM6CisJKiBnc3QvZ3N0Y29udGV4dC5oOgorCSAgY29udGV4dDogYWRkIGZvcmVhY2ggZnVuY3Rpb24KKwkgIEFkZCBhIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBhbGwgc3RvcmVkIGV2ZW50cy4KKworMjAxMS0wNS0wNSAxMDozNzoxOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdC5jOgorCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSogZ3N0L2dzdGJ1ZmZlci5oOgorCSogZ3N0L2dzdGNvbnRleHQuYzoKKwkqIGdzdC9nc3Rjb250ZXh0Lmg6CisJKiBnc3QvZ3N0ZXZlbnQuaDoKKwkqIGdzdC9nc3RnaG9zdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5oOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6CisJKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc2VsZWN0b3IuYzoKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3RlZS5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKKwkqIHRlc3RzL2NoZWNrL2xpYnMvdHJhbnNmb3JtMS5jOgorCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgorCSAgUmV2ZXJ0ICJjb250ZXh0OiB1c2UgY29udGV4dCBvbiBidWZmZXJzIGluc3RlYWQgb2YgY2FwcyIKKwkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgOWVmMTM0NmIxZmEwYmQyYmI0MmNkOTkxYTUyZmYzMDhhNzI4YmRiNi4KKwkgIFdheSB0byBtdWNoIGZvciBvbmUgY29tbWl0IGFuZCBJJ20gbm90IHN1cmUgd2Ugd2FudCB0byBnZXQgcmlkIG9mIHRoZSBwYWQgY2FwcworCSAganVzdCBsaWtlIHRoYXQuIEl0J3MgbmljZSB0byBoYXZlIHRoZSBidWZmZXIgYW5kIGl0cyB0eXBlIGluIG9udyBuaWNlIGJ1bmRsZQorCSAgd2l0aG91dCBoYXZpbmcgdG8gZHJhZyB0aGUgY29tcGxldGUgY29udGV4dCB3aXRoIGl0LgorCisyMDExLTA0LTIwIDIyOjUyOjM2ICswMjAwICBNaWd1ZWwgQW5nZWwgQ2FicmVyYSBNb3lhIDxtYWRtYWMyNTAxQGdtYWlsLmNvbT4KKworCSogZ3N0L3BhcnNlL3R5cGVzLmg6CisJKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvcGFyc2UtbGF1bmNoLmM6CisJICBwYXJzZTogZG9uJ3QgdW5lc2NhcGUgaW5zaWRlIHF1b3RlcworCSAgRXNjYXBlZCBjaGFyYWN0ZXJzIGluc2lkZSBxdW90ZWQgc3RyaW5ncyBhcmUgc3VwcG9zZWQgdG8gYmUgdW5lc2NhcGVkIGJ5CisJICBkZXNlcmlhbGl6YXRpb24gZnVuY3Rpb25zLCBub3QgYnkgcGFyc2luZyBmdW5jdGlvbnMuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ4MDI1CisKKzIwMTEtMDQtMTggMTQ6MjY6MzMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YmluLmM6CisJICBiaW46IE9ubHkgcG9zdCBFT1MgbWVzc2FnZXMgYWZ0ZXIgcmVhY2hpbmcgdGhlIFBMQVlJTkcgc3RhdGUKKwkgIEZpeGVzIGJ1ZyAjNjQ3NzU2LgorCisyMDExLTA0LTE4IDEwOjA0OjI0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiBSZW1vdmUgdW5uZWNlc3NhcnkgRklYTUUKKwkgIFJlc2V0dGluZyB0aGUgcmVzdWx0IGlzIG5vdCBuZWNlc3Nhcnkgd2hlbiByZXN5bmNpbmcgYmVjYXVzZQorCSAgcGFkcyB0aGF0IHByZXZpb3VzbHkgZ290IHRoZSBldmVudCB3aWxsIGJlIHNraXBwZWQgYW5kIHdlCisJICBuZWVkIHRvIGNvbnNpZGVyIHRoZSByZXN1bHRzIG9mIHRoZSBwcmV2aW91cyBwdXNoZXMuCisKKzIwMTEtMDQtMTggMDk6NTM6NTUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSAgZWxlbWVudDogSWYgYWN0aXZhdGluZyBvbmUgcGFkIGZhaWxlZCBlcnJvciBvdXQgZWFybHkgaW5zdGVhZCBvZiB0cnlpbmcgdG8gYWN0aXZhdGUgdGhlIG5leHQgcGFkcworCSAgSWYgb25lIHBhZCBmYWlscyB0byBhY3RpdmF0ZSB0aGUgY29tcGxldGUgYWN0aXZhdGlvbiBwcm9jZXNzIHdpbGwgZmFpbAorCSAgYW55d2F5IGFuZCB0cnlpbmcgdG8gYWN0aXZhdGUgdGhlIG90aGVyIHBhZHMgb25seSB3YXN0ZXMgdGltZS4KKworMjAxMS0wNC0xOCAwOTo0OTowNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RiaW4uYzoKKwkgIGJpbjogSWYgYWN0aXZhdGluZyBvbmUgcGFkIGZhaWxlZCBlcnJvciBvdXQgZWFybHkgaW5zdGVhZCBvZiB0cnlpbmcgdG8gYWN0aXZhdGUgdGhlIG5leHQgcGFkcworCSAgSWYgb25lIHBhZCBmYWlscyB0byBhY3RpdmF0ZSB0aGUgY29tcGxldGUgYWN0aXZhdGlvbiBwcm9jZXNzIHdpbGwgZmFpbAorCSAgYW55d2F5IGFuZCB0cnlpbmcgdG8gYWN0aXZhdGUgdGhlIG90aGVyIHBhZHMgb25seSB3YXN0ZXMgdGltZS4KKworMjAxMS0wNS0wNSAxMjoyODowMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYmFzZXRyYW5zZm9ybTogUmVtb3ZlIG5vd2FkYXlzIHVudXNlZCBhbmQgdW5pbml0aWFsaXplZCBzZXRjYXBzIHZhcmlhYmxlCisKKzIwMTEtMDUtMDUgMTI6Mjc6NTEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCisJICBDb25mbGljdHM6CisJICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0CisJICBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYworCSAgZ3N0L2dzdG1pbmlvYmplY3QuYworCisyMDExLTA1LTA0IDE4OjU5OjQ3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0LmM6CisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBnc3QvZ3N0YnVmZmVyLmg6CisJKiBnc3QvZ3N0Y29udGV4dC5jOgorCSogZ3N0L2dzdGNvbnRleHQuaDoKKwkqIGdzdC9nc3RldmVudC5oOgorCSogZ3N0L2dzdGdob3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkLmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzoKKwkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6CisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zZWxlY3Rvci5jOgorCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdGVlLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgorCSogdGVzdHMvY2hlY2svbGlicy90cmFuc2Zvcm0xLmM6CisJKiB0b29scy9nc3QtbGF1bmNoLmM6CisJICBjb250ZXh0OiB1c2UgY29udGV4dCBvbiBidWZmZXJzIGluc3RlYWQgb2YgY2FwcworCSAgUHV0IHRoZSBzcmNwYWQgY29udGV4dCBvbiBidWZmZXJzIGluc3RlYWQgb2YgY2Fwcy4gVGhpcyBhbGxvd3MgdXMgdG8gYXNzb2NpYXRlCisJICBhbGwgdGhlIHJlbGV2YW50IGluZm8gY29udGFpbmVkIGluIGV2ZW50cyB3aXRoIGEgYnVmZmVyLgorCisyMDExLTA1LTA0IDE1OjI5OjQyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1pbmlvYmplY3QuYzoKKwkgIHRlc3RzOiBmaXggY29tcGlsZXIgd2FybmluZyBpbiBuZXcgbWluaW9iamVjdCB0ZXN0CisJICBnc3QvZ3N0bWluaW9iamVjdC5jOiBJbiBmdW5jdGlvbiDigJh0ZXN0X2R1cF9udWxsX21pbmlfb2JqZWN04oCZOgorCSAgZ3N0L2dzdG1pbmlvYmplY3QuYzo0NTk6Nzogd2FybmluZzogYXNzaWdubWVudCBmcm9tIGluY29tcGF0aWJsZSBwb2ludGVyIHR5cGUKKworMjAxMS0wNS0wNCAxNTo1MzoyMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGNvbnRleHQuaDoKKwkqIGdzdC9nc3RldmVudC5jOgorCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5oOgorCSAgcGFkOiB1c2UgdGhlIGNvbnRleHQgdG8gc3RvcmUgc3RpY2t5IGV2ZW50cworCSAgU3RvcmUgdGhlIHN0aWNreSBldmVudHMgaW4gdGhlIGNvbnRleHQgb2YgYSBzb3VyY2UgcGFkLgorCisyMDExLTA1LTA0IDE1OjIwOjEwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvTWFrZWZpbGUuYW06CisJKiBnc3QvZ3N0Y29udGV4dC5jOgorCSogZ3N0L2dzdGNvbnRleHQuaDoKKwkqIGdzdC9nc3RldmVudC5oOgorCSAgY29udGV4dDogYWRkIGhlbHBlciBvYmplY3QgdG8gbWFuYWdlIGV2ZW50cworCSAgQWRkIGEgaGVscGVyIG9iamVjdCB0byBtYW5hZ2UgdGhlIGV2ZW50cyB0aGF0IGRlZmluZSB0aGUgY29udGV4dCBvZiBhIGJ1ZmZlciBhbmQKKwkgIGEgc3RyZWFtLgorCisyMDExLTA1LTA0IDExOjA3OjE5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGRlZnM6IHVwZGF0ZSBkZWZzCisKKzIwMTEtMDUtMDQgMTE6MDM6MDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RldmVudC5jOgorCSogZ3N0L2dzdGV2ZW50Lmg6CisJKiBnc3QvZ3N0cXVhcmsuYzoKKwkqIGdzdC9nc3RxdWFyay5oOgorCSAgZXZlbnQ6IGFkZCBuZXcgQ0FQUyBldmVudAorCSAgQWRkIGEgbmV3IENBUFMgZXZlbnQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gbmVnb3RpYXRlIGRvd25zdHJlYW0gZWxlbWVudHMuIEl0J2xsCisJICBhbHNvIHN0aWNrIG9uIHBhZCBzbyB0aGF0IHdlIGNhbiByZW1vdmUgdGhlIEdzdENhcHMgZmllbGQgb24gcGFkcyBhbmQgdGhlCisJICBHc3RDYXBzIGZpZWxkIG9uIGJ1ZmZlcnMuCisKKzIwMTEtMDUtMDMgMTg6NTg6MTggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RldmVudC5oOgorCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5oOgorCSAgcGFkOiBtb3JlIHN0aWNreSBldmVudHMgd29yaworCSAgQ29weSB0aGUgc3RpY2t5IGV2ZW50cyBmcm9tIHRoZSBzcmNwYWQgdG8gdGhlIHNpbmtwYWQgd2hlbiBsaW5raW5nIHBhZHMuIFNldCB0aGUKKwkgIFNUSUNLWV9QRU5ESU5HIGZsYWcgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHN0aWNreSBldmVudHMgYXJlIGRpc3BhdGNoZWQgYmVmb3JlCisJICBwdXNoaW5nIHRoZSBuZXh0IGJ1ZmZlciB0byB0aGUgZWxlbWVudC4KKworMjAxMS0wNS0wMyAxNjoxMToxMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKKwkgIGRvY3M6IGltcHJvdmUgcG9ydGluZyBkb2MKKworMjAxMS0wNS0wMiAxODo0NToyNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKKwkgIHBvcnRpbmc6IHVwZGF0ZSBwb3J0aW5nIGRvY3VtZW50CisKKzIwMTEtMDUtMDIgMTE6MzA6MDYgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0bWluaW9iamVjdC5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1pbmlvYmplY3QuYzoKKwkgIG1pbmlvYmplY3Q6IEZpeCBkdXBfbWluaV9vYmplY3QgZnVuY3Rpb24gdG8gaGFuZGxlIE5VTEwgZ3ZhbHVlcworCSAgZ192YWx1ZV9kdXBfb2JqZWN0IGhhbmRsZXMgZ3ZhbHVlcyB0aGF0IGNvbnRhaW4gTlVMTCBwb2ludGVycywKKwkgIGdzdF92YWx1ZV9kdXBfbWluaV9vYmplY3Qgc2hvdWxkIGRvIHRoZSBzYW1lLgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0OTE5NQorCisyMDExLTA1LTAzIDEzOjU1OjQzICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6CisJICBkb2NzOiBpdCBpdHMgJVRSVUUgKGNvbnN0YW50KQorCSAgQXMgc3BvdHRlZCBieSBUaW0uCisKKzIwMTEtMDUtMDIgMTY6MjI6NTYgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6CisJICBkb2NzOiBmaXggY29weSduJ3Bhc3RlIGRvYyBoZWFkZXIgbWlzdGFrZQorCisyMDExLTA1LTAyIDE2OjIwOjI0ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RlbGVtZW50Lmg6CisJKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oOgorCSAgZG9jczogYWRkIHR3byB0cml2aWFsIGRvYyBibG9icworCisyMDExLTA1LTAyIDE2OjAzOjI5ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6CisJICBkb2NzOiBhZGQgbWlzc2luZyBwYXJhbWV0ZXIgZG9jcworCisyMDExLTA1LTAyIDE2OjAwOjUyICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuaDoKKwkgIGRvY3M6IGFkZCBkb2NzIGZvciBHc3REUFBhY2tldGl6ZXIKKworMjAxMS0wNS0wMiAxNTo1Mjo1OCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0Y2Fwcy5oOgorCSAgZG9jczogaW1wcm92ZSB0aGUgc3ludGF4IGZvciB0aGUgY2Fwc2ludGVyc2VjdG1vZGUgZG9jcworCisyMDExLTA1LTAyIDE1OjQ4OjAxICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJICBkb2NzOiBmaXh1cCBicm9rZW4geHJlZgorCisyMDExLTA1LTAyIDE1OjQ2OjU5ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSAgZG9jczogYWRkIG5ldyBhcGkgdG8gLXNlY3Rpb24udHh0CisKKzIwMTEtMDUtMDIgMTU6MzU6NTIgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdGF0b21pY3F1ZXVlLmg6CisJICBkb2NzOiBmaXggZ3RrLWRvYyBzeW50YXgKKworMjAxMS0wNS0wMiAxNTozMDoxMyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5jOgorCSAgZG9jczogZG9uJ3QgZHVwbGljYXRlIGluZm8gdGhhdCB3ZSB0YWtlIGZyb20gZWxlbWVudC1kZXRhaWxzCisKKzIwMTEtMDQtMjggMTU6Mzc6MDIgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgIGRvY3M6IHJlbW92ZSBub24gZXhpc3Rpbmcgc3ltYm9sCisKKzIwMTEtMDQtMjggMTU6MDU6MjggKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKKwkqIGdzdC9nc3RzeXN0ZW1jbG9jay5oOgorCSAgZG9jczogd2UgZG9uJ3QgbmVlZCB0byBkb2N1bWVudCBwcml2YXRlIG1lbWJlcnMgaW4gb3BhcXVlIHN0cnVjdHMKKworMjAxMS0wNC0yOSAxMzo0MzowNyArMDIwMCAgUGhpbGlwcGUgTm9ybWFuZCA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKKwkqIGdzdC9nc3RwcmVzZXQuYzoKKwkqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHByZXNldC5jOgorCSAgY29yZTogc3RvcmUgcHJlc2V0cywgcmVnaXN0cnkgYW5kIHBsdWdpbnMgaW4gWERHIGRpcmVjdG9yaWVzLgorCSAgUHJlc2V0cyBhbmQgcGx1Z2lucyBtb3ZlZCB0byAkWERHX0RBVEFfSE9NRS9nc3RyZWFtZXItMC4xMS8KKwkgIHJvb3QgZGlyZWN0b3J5LiBSZWdpc3RyeSBtb3ZlZCB0byAkWERHX0NBQ0hFX0hPTUUvZ3N0cmVhbWVyLTAuMTEvLgorCSAgRml4ZXMgYnVnICM1MTg1OTcuCisKKzIwMTEtMDUtMDMgMDk6NDE6NDggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCisJICBDb25mbGljdHM6CisJICBjb25maWd1cmUuYWMKKwkgIGdzdC9nc3RidXMuYworCisyMDExLTA1LTAyIDE4OjM0OjE4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZXZlbnQuYzoKKwkqIGdzdC9nc3RldmVudC5oOgorCSogZ3N0L2dzdGluZm8uYzoKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RwYWQuaDoKKwkgIGV2ZW50OiBhZGQgc3RpY2t5IGZsYWdzIHRvIGV2ZW50cworCSAgQWRkIHRoZSBzdGlja3kgZmxhZyB0byBldmVudHMgYW5kIGEgc3RpY2t5IGluZGV4LgorCSAgS2VlcCBzdGlja3kgZXZlbnRzIGluIGFuIGFycmF5IG9uIGVhY2ggcGFkLgorCSAgUmVtb3ZlIEdTVF9FVkVOVF9TUkMoKSwgaXQgaXMgY2F1c2luZyByZWZjeWNsZXMgd2l0aCBzdGlja3kgZXZlbnRzLCB3YXMgbm90IHVzZWQKKwkgIGFuZCBpcyBub3QgdmVyeSBpbnRlcmVzdGluZyBhbnl3YXkuCisKKzIwMTEtMDUtMDIgMTE6MDk6NTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RxdWVyeS5jOgorCSogZ3N0L2dzdHF1ZXJ5Lmg6CisJICBxdWVyeTogaW1wcm92ZSBhbGxvY2F0aW9uIHBhcmFtZXRlcnMgcXVlcnkKKwkgIFVzZSB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHRob3NlIHVzZWQgZm9yIHRoZSBidWZmZXJwb29sLiBNYWtlIHN1cmUgd2UgY2FuIHBhc3MKKwkgIGEgbWluaW11bSBhbmQgbWF4aW11bSBhbW91bnQgb2YgYnVmZmVycyBuZWVkZWQuCisKKzIwMTEtMDQtMzAgMTY6NTU6MzYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXN0YXRpY2VsZW1lbnRzLnhtbDoKKwkqIHBvL2RlLnBvOgorCSogcG8vZnIucG86CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgorCSAgMC4xMC4zMi40IHByZS1yZWxlYXNlCisKKzIwMTEtMDQtMjkgMjM6NDQ6NTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oOgorCSAgcGx1Z2luZmVhdHVyZTogaW5jbHVkZSBwbHVnaW4uaCBpbiBoZWFkZXIgd2hlcmUgd2UgdXNlIGEgR3N0UGx1Z2luIHBvaW50ZXIKKwkgIFNob3VsZCBmaXggaXNzdWUgd2l0aCBnc3RyZWFtZXJtbSBidWlsZCB3aGVyZSA8Z3N0L2dzdGluZGV4Lmg+IGlzIGluY2x1ZGVkCisJICBkaXJlY3RseSBpbnN0ZWFkIG9mIGdzdC9nc3QuaC4KKworMjAxMS0wNC0yOSAxMzo0Mjo1NyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICB0cmFuc2Zvcm06IGRvIHBhZF9hbGxvYyBmYWxsYmFjayBjb3JyZWN0bHkKKworMjAxMS0wNC0yOSAxMzoyNjoxOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGdob3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkLmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6CisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mdW5uZWwuYzoKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3RlZS5jOgorCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdmFsdmUuYzoKKwkqIHRlc3RzL2NoZWNrL2xpYnMvdGVzdF90cmFuc2Zvcm0uYzoKKwkqIHRlc3RzL2NoZWNrL2xpYnMvdHJhbnNmb3JtMS5jOgorCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKKwkqIHRvb2xzL2dzdC14bWxpbnNwZWN0LmM6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIFJlbW92ZSBwYWRfYWxsb2MsIHRoaXMgY2FuIG5vdyBiZSBkb25lIGJldHRlcgorCSAgUmVtb3ZlIHBhZF9hbGxvYyBhbmQgYWxsIHJlZmVyZW5jZXMuIFRoaXMgY2FuIG5vdyBiZSBkb25lIG1vcmUgZWZmaWNpZW50bHkgYW5kCisJICBtb3JlIGZsZXhpYmxlIHdpdGggdGhlIEFMTE9DQVRJT04gcXVlcnkgYW5kIHRoZSBidWZmZXJwb29sIG9iamVjdHMuIFRoZXJlIGlzIG5vCisJICByZXZlcnNlIG5lZ290aWF0aW9uIHlldCBidXQgdGhhdCB3aWxsIGJlIGRvbmUgd2l0aCBhbiBldmVudCBsYXRlci4KKworMjAxMS0wNC0yOSAxMjoxMTo1NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHF1ZXJ5LmM6CisJICBxdWVyeTogaW5pdCB0aGUgQUxMT0NBVElPTiBxdWVyeSBjb3JyZWN0bHkKKwkgIERvbid0IGFkZCB0aGUgJ3Bvb2wnIHByb3BlcnR5IGluc3RlYWQgb2YgYWRkaW5nIGl0IHdpdGggYSBOVUxMIGFycmF5LgorCisyMDExLTA0LTI5IDEwOjUwOjE3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cXVlcnkuYzoKKwkqIGdzdC9nc3RxdWVyeS5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBxdWVyeTogZml4IHBhcnNpbmcgb2YgdGhlIEFMTE9DQVRJT04gcXVlcnkKKwkgIEFkZCBtZXRob2RzIGZvciBwYXJzaW5nIHRoZSBjYXBzIGFuZCB0aGUgbmVlZF9wb29sIGJvb2xlYW4uCisKKzIwMTEtMDQtMjggMTY6MjA6MjIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RxdWVyeS5jOgorCSogZ3N0L2dzdHF1ZXJ5Lmg6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIHF1ZXJ5OiBmaXggdHlwbyBpbiBtZXRob2QgbmFtZSBhbmQgaW1wcm92ZSBkb2NzCisJICBGaXhlZCB0eXBvIGluIG1ldGhvZCBuYW1lIGFuZCBhZGQvaW1wcm92ZSB0aGUgZG9jcy4KKworMjAxMS0wNC0yOCAxNTozMTo0OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9kZXNpZ24vZHJhZnQtYWxsb2NhdGlvbi50eHQ6CisJKiBnc3QvZ3N0cXVhcmsuYzoKKwkqIGdzdC9nc3RxdWFyay5oOgorCSogZ3N0L2dzdHF1ZXJ5LmM6CisJKiBnc3QvZ3N0cXVlcnkuaDoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgYnVmZmVycG9vbDogYWRkIHF1ZXJ5IHRvIHJlcXVlc3QgcG9vbCBhbmQgY29uZmlndXJhdGlvbgorCSAgQWRkIGEgcXVlcnkgdG8gcmVxdWVzdCBhbGxvY2F0aW9uIHBhcmFtZXRlcnMgYW5kIG9wdGlvbmFsbHkgYSBidWZmZXJwb29sIGFzCisJICB3ZWxsLiBUaGlzIHNob3VsZCBhbGxvdyBlbGVtZW50cyB0byBkaXNjb3ZlciBkb3duc3RyZWFtIGNhcGFiaWxpdGllcyBhbmQgYWxzbworCSAgdXNlIHRoZSBkb3duc3RyZWFtIGFsbG9jYXRvcnMuCisKKzIwMTEtMDQtMjcgMTg6MTA6NTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidXMuYzoKKwkgIGJ1czogZml4IHRpbWVvdXQgaGFuZGxpbmcKKworMjAxMS0wNC0yNyAxNzo1NjoxMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9kZXNpZ24vZHJhZnQtYnVmZmVycG9vbC50eHQ6CisJKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgorCSAgYnVmZmVycG9vbDogZml4IHNvbWUgZG9jcworCisyMDExLTA0LTI3IDE3OjU1OjIwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZXZlbnQuYzoKKwkqIGdzdC9nc3RldmVudC5oOgorCSogZ3N0L2dzdHF1YXJrLmM6CisJKiBnc3QvZ3N0cXVhcmsuaDoKKwkgIGV2ZW50OiBpbXByb3ZlIGFyZ3VtZW50IG5hbWVzIG9mIHNlZ21lbnRzCisKKzIwMTEtMDQtMjcgMTE6NDk6MTEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgorCSogcG8vYmcucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3BsLnBvOgorCSogcG8vcnUucG86CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgorCSAgMC4xMC4zMi4zIHByZS1yZWxlYXNlCisKKzIwMTEtMDQtMjYgMTU6NDI6NDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0X3ByaXZhdGUuaDoKKwkqIGdzdC9nc3RiaW4uYzoKKwkqIGdzdC9nc3RidXMuYzoKKwkqIGdzdC9nc3RidXMuaDoKKwkgIFJldmVydCBsb2NrZnJlZSBHc3RCdXMgZm9yIHRoZSByZWxlYXNlCisJICBEcm9wIGluIG9sZCBHc3RCdXMgY29kZSBmb3IgdGhlIHJlbGVhc2UgdG8gcGxheSBpdCBzYWZlLCBzaW5jZQorCSAgcmVncmVzc2lvbnMgdGhhdCBhcmUgYXBwYXJlbnRseSBoYXJkIHRvIHRyYWNrIGRvd24gYW5kIHJlcHJvZHVjZQorCSAgaGF2ZSBiZWVuIHJlcG9ydGVkIChvbiB3aW5kb3dzL09TWCBtb3N0bHkpIGFnYWluc3QgdGhlIGxvY2tmcmVlCisJICB2ZXJzaW9uLCBhbmQgbW9yZSB0aW1lIGlzIG5lZWRlZCB0byBmaXggdGhlbS4KKwkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgMDMzOTFhODk3MDAxZDM1ZDFkMjkwZjI3ZGQxMmU5OGE4YjcyOWZiNC4KKwkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgNDNjZGJjMTdlNmY5NDRjZGYwMmFlZWQ3OGQxZDVmNmJkZTUxOTBjOS4KKwkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgODBlYjE2MGUwZjYyMzUwMjcxZjA2MWRhYTVmMjg5ZDlkNDI3N2NmNC4KKwkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgYzQxYjBhZGUyODc5MGZmZGIwZTQ4NGI0MWNkNzkyOWM0ZTE0NWRlYy4KKwkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgODc0ZDYwZTU4OTlkZDViODk4NTQ2NzlkMWE0YWQwMTZhNThiYTRlMC4KKwkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgNzkzNzBkNGIxNzgxYWY5YzlhNjVmMmQxZTM0OTgxMjRkOGM0YzQxMy4KKwkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgMmNiM2U1MjM1MTk2ZWI3MWZiMjVlMGE0YTRiODc0OWQ2ZDBhODQ1My4KKwkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgYmQxYzQwMDExNDM0YzFlZmFhNjk2ZGM5OGVmODU1ZWY5Y2NlOWIyOC4KKwkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgNGJmOGYxNTI0ZjZlMzM3NGIzZjNiYzU3MzIyMzM3NzIzZDA2YjkyOC4KKwkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgMTRkN2RiMWI1MjdiMDVmMDI5ODE5MDU3YWVmNWMxMjNhYzdlMDEzZC4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDc0OTMKKworMjAxMS0wNC0yNSAxMToxMDo0NyArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgorCisJKiBnc3QvZ3N0Zm9ybWF0LmM6CisJKiBnc3QvZ3N0cGFyc2UuYzoKKwkqIGdzdC9nc3RxdWVyeS5jOgorCSogZ3N0L2dzdHRhZ3NldHRlci5jOgorCSogZ3N0L2dzdHV0aWxzLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgorCSAgU21hbGwgY29zbWV0aWMgY2xlYW51cHMKKwkgIE1ha2Ugc3VyZSB0aGUgcmV0dXJuIHZhbHVlcyBmcm9tIGdfcmV0dXJuXyogYXJlIG9mIHRoZSByaWdodCB0eXBlLgorCisyMDExLTA0LTI1IDEwOjU2OjA2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSAgcXVldWUyOiBmaXggbWl4aW5nIG9mIHJldHVybiB2YWx1ZXMKKworMjAxMS0wNC0yNSAxMDozMDo0MSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQorCisyMDExLTA0LTE1IDIyOjAwOjExIC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSogZ3N0L2dzdHV0aWxzLmM6CisJICBtaW5vciBpbmxpbmUgZG9jdW1lbnRhdGlvbiBmaXgKKworMjAxMS0wNC0yNCAxNDowMjo1MSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSBjM2NhZmUxIHRvIDQ2ZGZjZWEKKworMjAxMS0wNC0yNCAxMTo0NDoxOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RiaW4uYzoKKwkgIHRlc3RzOiBjbGVhbiB1cCBwcm9wZXJseSBpbiB0aGUgYmluIHRlc3RfbGlua19zdHJ1Y3R1cmVfY2hhbmdlIHVuaXQgdGVzdAorCSAgRG9uJ3QgZm9yZ2V0IHRvIHNldCB0aGUgcGlwZWxpbmUgYmFjayB0byBOVUxMIHN0YXRlLCB3aGljaCBtYWtlcworCSAgdmFsZ3JpbmQgaGFwcHkgYWdhaW4uCisKKzIwMTEtMDQtMjQgMDk6NTg6NTMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cmVnaXN0cnkuYzoKKwkgIHJlZ2lzdHJ5OiB3aGVuIHJlbW92aW5nIGEgY2FjaGVkLWJ1dC1uby1sb25nZXItZXhpc3RpbmcgcGx1Z2luLCBvbmx5IHJlbW92ZSBmZWF0dXJlcyB0aGF0IGJlbG9uZyB0byBpdAorCSAgV2hlbiBhIHBsdWdpbiBmaWxlIG5vIGxvbmdlciBleGlzdHMsIGUuZy4gYmVjYXVzZSBpdCdzIGJlZW4gcmVtb3ZlZCBvcgorCSAgcmVuYW1lZCwgZG9uJ3QgcmVtb3ZlIGFsbCBmZWF0dXJlcyBpbiB0aGUgcmVnaXN0cnkgYmFzZWQgb24gdGhlICpuYW1lKgorCSAgb2YgdGhlIHBsdWdpbiB0aGV5IGJlbG9uZyB0bywgYnV0IG9ubHkgcmVtb3ZlIHRob3NlIHdobyBhY3R1YWxseSBiZWxvbmcKKwkgIHRvIHRoYXQgcGFydGljdWxhciBwbHVnaW4gKG9iamVjdC9wb2ludGVyKS4KKwkgIFRoaXMgZml4ZXMgaXNzdWVzIG9mIHBsdWdpbiBmZWF0dXJlcyBkaXNhcHBlYXJpbmcgd2hlbiBhIHBsdWdpbiAuc28gZmlsZQorCSAgaXMgcmVuYW1lZC4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MDQwOTQKKworMjAxMS0wNC0yNCAwOTo1MzozOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgorCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzoKKwkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmg6CisJKiBnc3QvZ3N0cmVnaXN0cnljaHVua3MuYzoKKwkqIGdzdC9nc3R0eXBlZmluZC5jOgorCSAgcGx1Z2luZmVhdHVyZTogc3RvcmUgcG9pbnRlciB0byBwbHVnaW4gaW4gYWRkaXRpb24gdG8gdGhlIHBsdWdpbiBuYW1lCisJICBTbyB3ZSBjYW4gcmVsaWFibHkgcmVtb3ZlIHBsdWdpbiBmZWF0dXJlcyBmb3IgYSBzcGVjaWZpYyBwbHVnaW4gbGF0ZXIuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA0MDk0CisKKzIwMTEtMDQtMjQgMTE6MDU6NTggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cmVnaXN0cnkuYzoKKwkgIHJlZ2lzdHJ5OiB1c2UgVFJBQ0UgbG9nIGxldmVsIHRvIGxvZyBmaWxlcyB0aGF0IGRvbid0IGxvb2sgbGlrZSBwbHVnaW5zCisJICBDdXRzIGRvd24gdGhlIG5vaXNlIGluIHVuaW5zdGFsbGVkIHNldHVwcy4KKworMjAxMS0wNC0xOSAyMDozNTowNCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYmFzZXRyYW5zZm9ybTogZml4IG5lZ290aWF0aW9uIHJlZ3Jlc3Npb24KKwkgIEZpeHVwIHBhdGNoIGZvciA4MzU5Nzc2N2IxNjlkZDZjMzlhMDdiNjE0NGE2NTBjMWYwOTg4MjVhCisJICBVc2UgYSBzZXBhcmF0ZSB2YXJpYWJsZSBmb3Iga25vd2luZyBpZiBhIHBhZCBhbGxvYyBoYXMgYmVlbiBtYWRlCisJICBpbnN0ZWFkIG9mIGNoZWNraW5nIGZvciB0aGUgZmxvdyByZXR1cm4gdGhhdCBtaWdodCBub3QgYmUgdGhlCisJICByZXN1bHQgb2YgdGhlIHBhZCBhbGxvYworCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0ODIyMAorCisyMDExLTA0LTIxIDEyOjMzOjEwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmM6CisJICB0ZXN0czogYWRkIHNpbXBsZSBwaXBlbGluZS1pbi1waXBlbGluZSB1bml0IHRlc3QKKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDgyOTcKKworMjAxMS0wNC0yMCAxNTozOToxNiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidXMuYzoKKwkgIGJ1czogYWxzbyBhbGxvdyBwb3BwaW5nIGEgbWVzc2FnZSB3aXRob3V0IHRpbWVvdXQgaWYgbm8gcG9sbCBhdmFpbGFibGUKKwkgIC4uLiB3aGljaCBoYXBwZW5zIGluIHBhcnRpY3VsYXIgZmx1c2hpbmcgYSBidXMsIHBvc3NpYmx5IGFzIHBhcnQKKwkgIG9mIGEgc3RhdGUgY2hhbmdlLCBlLmcuIHdoZW4gaGF2aW5nIGEgcGlwZWxpbmUgaW4gYSBwaXBlbGluZQorCSAgYW5kIHRoZW4gY2hhbmdpbmcgc3RhdGUgYmFjayB0byBOVUxMLiBUaGUgaW50ZXJpb3IgcGlwZWxpbmUKKwkgIHdpbGwvbWlnaHQgdGhlbiBmbHVzaCB0aGUgYnVzLCB3aGljaCBpcyBhIGNoaWxkIGJ1cyBmcm9tIHRoZQorCSAgcGFyZW50IHdoaWNoIGRvZXMgbm90IGhhdmUgYSBwb2xsIGFueW1vcmUgdGhlc2UgZGF5cy4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDgyOTcKKworMjAxMS0wNC0yMCAxOTowODo0MCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBkZWZzOiB1cGRhdGUgZGVmcworCisyMDExLTA0LTIwIDE5OjAzOjQ5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSAgZWxlbWVudDogcmVtb3ZlIHVudXNlZCB2YXJpYWJsZQorCisyMDExLTA0LTIwIDE5OjAwOjA3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSAgZWxlbWVudDogZG9uJ3QgdG91Y2ggYmFzZV90aW1lIG9yIGNsb2NrIGluIHN0YXRlIGNoYW5nZQorCSAgRG9uJ3QgdG91Y2ggdGhlIGJhc2VfdGltZSBvciB0aGUgY2xvY2sgd2hlbiBzZXR0aW5nIGFuIGVsZW1lbnQgdG8gdGhlIFJFQURZIG9yCisJICBOVUxMIHN0YXRlLiBJdCBpcyB0aGUgcGFyZW50IHRoYXQgd2lsbCBtYW5hZ2UgdGhpcyBmb3IgdXMuCisKKzIwMTEtMDQtMTkgMjA6NTI6MDUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgorCSAgYnVmZmVybGlzdDogSW1wbGVtZW50IGdzdF9idWZmZXJfbGlzdF9mb3JlYWNoKCkKKworMjAxMS0wNC0xOSAxOTozMDoyOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQorCisyMDExLTA0LTE5IDE4OjU3OjQzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBnc3QvZ3N0YnVmZmVyLmg6CisJICBidWZmZXI6IGFkZCBtZXRob2QgdG8gY29tcGFyZSBidWZmZXIgZGF0YQorCSAgQWRkIG1ldGhvZCB0byBjb21wYXJlIHRoZSBkYXRhIGluIGEgYnVmZmVyLgorCisyMDExLTA0LTE5IDE2OjIxOjE1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCisJICBDb25mbGljdHM6CisJICBjb25maWd1cmUuYWMKKworMjAxMS0wNC0xOSAxNDowNToyMyArMDIwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAdGFuZGJlcmcuY29tPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IHVubG9jayBiZWZvcmUgZnJlZWluZyB0aGUgY2FjaGUgdG8gYXZvaWQgZGVhZGxvY2sKKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDgxOTkKKworMjAxMS0wNC0xNCAxMDoxNToyNiArMDIwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAdGFuZGJlcmcuY29tPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIGJhc2V0cmFuc2Zvcm06IGRvbid0IHVucmVmIHRyYW5zIHVudGlsIHRoZSBmdW5jdGlvbiBpcyBkb25lIHVzaW5nIGl0CisJICB0cmFucy0+cHJpdi0+Zm9yY2VfYWxsb2MgPSBGQUxTRSB3b3VsZCBjcmFzaCBpZiB0aGUgcmVmIGhlbGQgaXMgdGhlIGxhc3QKKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDgyMTUKKworMjAxMS0wNC0xOSAxMzoyMzoxOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RpbmRleC5jOgorCSAgZG9jczogYWRkIG5vdGUvd2FybmluZyB0byBnc3RfaW5kZXhfZ2V0X3dyaXRlcl9pZCgpIGRvY3MgYWJvdXQgdGhlIE9CSkVDVF9MT0NLCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ2ODExCisKKzIwMTEtMDQtMTkgMTM6MDU6NTMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBkb24ndCBkZWFkbG9jayB3aGVuIHNldHRpbmcgZXh0ZXJuYWwgaW5kZXgKKwkgIFByb3RlY3QgaW5kZXggd2l0aCBpdHMgb3duIGxvY2suIGdzdF9pbmRleF9nZXRfd3JpdGVyX2lkKCkgbWF5IHRha2UKKwkgIHRoZSBvYmplY3QgbG9jayBpbnRlcm5hbGx5ICh0aGUgZGVmYXVsdCByZXNvbHZlciwgR1NUX0lOREVYX1JFU09MVkVSX1BBVEgsCisJICB3aWxsIGFueXdheSksIHNvIGlmIHdlJ3JlIHVzaW5nIHRoYXQgdG8gcHJvdGVjdCB0aGUgaW5kZXggYXMgd2VsbCwKKwkgIHdlJ2xsIGRlYWRsb2NrLgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0NjgxMQorCisyMDExLTA0LTE5IDExOjUxOjMwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogbWFrZSBmbXRsaXN0IGNvbnN0YW50CisKKzIwMTEtMDQtMTkgMTE6NDg6MDUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cXVlcnkuYzoKKwkqIGdzdC9nc3RxdWVyeS5oOgorCSAgcXVlcnk6IGNvbnN0LWlmeSBmb3JtYXRzIGFyZ3VtZW50cyB0byBnc3RfcXVlcnlfc2V0X2Zvcm1hdHN2KCkKKworMjAxMS0wNC0xOCAxODoxOTo1MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzaW5rLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFyYW1zcGVjcy5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRhZ3NldHRlci5jOgorCSogdGVzdHMvY2hlY2svbGlicy90ZXN0X3RyYW5zZm9ybS5jOgorCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOgorCSAgdGVzdHM6IFVzZSBHX0RFRklORV9UWVBFIGluc3RlYWQgb2YgR1NUX0JPSUxFUlBMQVRFCisKKzIwMTEtMDQtMTggMTg6MTk6MjQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIGJhc2V7c2luayxzcmN9OiBEb24ndCB0cnkgdG8gZml4YXRlIEFOWSBjYXBzCisKKzIwMTEtMDQtMTggMTg6MDc6MDYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmdW5uZWwuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6CisJICBlbGVtZW50czogVXNlIEdfREVGSU5FX1RZUEUgaW5zdGVhZCBvZiBHU1RfQk9JTEVSUExBVEUKKworMjAxMS0wNC0xOCAxNzozMzozNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgorCSAgbmV0OiBVc2UgR19ERUZJTkVfVFlQRSBpbnN0ZWFkIG9mIEdTVF9CT0lMRVJQTEFURQorCisyMDExLTA0LTE4IDE3OjMyOjE3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdHB1c2hzcmMuYzoKKwkgIGJhc2U6IFVzZSBHX0RFRklORV9UWVBFIGluc3RlYWQgb2YgR1NUX0JPSUxFUlBMQVRFCisKKzIwMTEtMDQtMTggMTc6Mjg6MzcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgorCSogZ3N0L2dzdHV0aWxzLmg6CisJICB1dGlsczogUmVtb3ZlIEdTVF9CT0lMRVJQTEFURSBhbmQgZnJpZW5kcworCisyMDExLTA0LTE4IDEwOjQ3OjI2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5oOgorCSAgcGFkOiBNYWtlIHRoZSBzaXplIHBhcmFtZXRlciBvZiBnc3RfcGFkX2FsbG9jX2J1ZmZlcigpIHVuc2lnbmVkCisJICBJbnRlcm5hbGx5IGd1aW50cyB3ZXJlIHVzZWQgZXZlcnl3aGVyZSBhbHJlYWR5LgorCisyMDExLTA0LTE4IDEwOjQxOjE4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiBEb24ndCBhbGxvdyBmaXhhdGluZyBBTlkgY2FwcyBhbmQgcmVtb3ZlIEZJWE1FCisKKzIwMTEtMDQtMTggMTA6MzY6NDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgorCSogZ3N0L2dzdGJpbi5jOgorCSAgYmluOiBFbmFibGUgRFVSQVRJT04gcXVlcnkgY2FjaGluZworCSAgRWxlbWVudHMgbXVzdCBub3cgcG9zdCBhIERVUkFUSU9OIG1lc3NhZ2Ugb24gdGhlIGJ1cyBpZiB0aGV5CisJICBjaGFuZ2UgdGhlIGR1cmF0aW9uIGluIFBBVVNFRCBvciBQTEFZSU5HLgorCisyMDExLTA0LTE2IDE1OjIwOjA4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKKwkgIGRvY3M6IHJlbW92ZSByZWZlcmVuY2UgdG8gYmFzZXBhcnNlIEFQSSB0aGF0IGRpZG4ndCBtYWtlIGl0CisKKzIwMTEtMDQtMTYgMTY6MDY6MDIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCisKKzIwMTEtMDQtMTYgMTU6Mjg6NTMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZWxlbWVudC5jOgorCSAgZWxlbWVudDogQWRkIHRlc3QgZm9yIGluaGVyaXRpbmcgbWV0YWRhdGEvcGFkIHRlbXBsYXRlcworCisyMDExLTA0LTE2IDE1OjI0OjAxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJICBiYXNlOiBVcGRhdGUgZG9jcyB0byBzYXkgY2xhc3NfaW5pdCBpbnN0ZWFkIG9mIGJhc2VfaW5pdAorCSAgQW5kIHJlbW92ZSBhIHVzZWxlc3MgYmFzZV9pbml0IGluIGJhc2VzcmMKKworMjAxMS0wNC0xNiAxNToyMzo0NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzoKKwkgIG5ldDogVXNlIEdfREVGSU5FX1RZUEUKKworMjAxMS0wNC0xNiAxNToyMzoxOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RiaW4uYzoKKwkqIGdzdC9nc3RwaXBlbGluZS5jOgorCSAgZ3N0OiBEb24ndCB1c2UgYmFzZV9pbml0IGFuZCB1c2UgR19ERUZJTkVfVFlQRSBpbnN0ZWFkIG9mIEdTVF9CT0lMRVJQTEFURQorCisyMDExLTA0LTE2IDE1OjAzOjMzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzoKKwkgIGVsZW1lbnQ6IEluaGVyaXQgZWxlbWVudCBtZXRhZGF0YSBhbmQgcGFkIHRlbXBsYXRlcyBmcm9tIHBhcmVudCBjbGFzc2VzCisJICBUaGlzIGFsbG93cyB0byBhZGQgcGFkIHRlbXBsYXRlcyBhbmQgc2V0IG1ldGFkYXRhIGluIGNsYXNzX2luaXQgaW5zdGVhZCBvZgorCSAgYmFzZV9pbml0LiBiYXNlX2luaXQgaXMgYSBjb25jZXB0IHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSBhbG1vc3QgYWxsCisJICBsYW5ndWFnZXMgYW5kIGNvcHlpbmcgdGhlIHRlbXBsYXRlcy9tZXRhZGF0YSBmb3Igc3ViY2xhc3NlcyBpcyB0aGUgbW9yZQorCSAgaW50dWl0aXZlIHdheSBvZiBkb2luZyB0aGluZ3MuCisJICBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSBwYWQgdGVtcGxhdGVzIG9mIHBhcmVudCBjbGFzc2VzIGJ5IGFkZGluZyBhIG5ldworCSAgdGVtcGxhdGUgd2l0aCB0aGUgc2FtZSBub3cuCisJICBBbHNvIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUoKSBub3cgdGFrZXMgb3duZXJzaGlwIG9mIHRoZQorCSAgcGFkIHRlbXBsYXRlLCB3aGljaCB3YXMgYXNzdW1lZCBieSBhbGwgY29kZSBiZWZvcmUgYW55d2F5LgorCSAgRml4ZXMgYnVnICM0OTE1MDEuCisKKzIwMTEtMDQtMTYgMTQ6NTY6MDMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuYXJnczoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmM6CisJKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmg6CisJKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgorCSAgMC4xMC4zMi4yIHByZS1yZWxlYXNlCisKKzIwMTEtMDQtMTYgMTQ6NTQ6MDAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmUucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kYS5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZWwucG86CisJKiBwby9lbl9HQi5wbzoKKwkqIHBvL2VzLnBvOgorCSogcG8vZXUucG86CisJKiBwby9maS5wbzoKKwkqIHBvL2ZyLnBvOgorCSogcG8vZ2wucG86CisJKiBwby9odS5wbzoKKwkqIHBvL2lkLnBvOgorCSogcG8vaXQucG86CisJKiBwby9qYS5wbzoKKwkqIHBvL2x0LnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3BsLnBvOgorCSogcG8vcHRfQlIucG86CisJKiBwby9yby5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vcncucG86CisJKiBwby9zay5wbzoKKwkqIHBvL3NsLnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkgIHBvOiB1cGRhdGUgdHJhbnNsYXRpb25zCisKKzIwMTEtMDQtMTYgMTQ6NTI6NDAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0b29scy9nc3QtbGF1bmNoLmM6CisJICBnc3QtbGF1bmNoOiByZW1vdmUgbmV3bGluZSBmcm9tIHRyYW5zbGF0YWJsZSBzdHJpbmcKKworMjAxMS0wNC0xNiAxMzo0OTo0NSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9NYWtlZmlsZS5hbToKKwkgIGdzdDogZ29iamVjdC1pbnRyb3NwZWN0aW9uIHNjYW5uZXIgZG9lc24ndCBuZWVkIHRvIHNjYW4gb3IgdXBkYXRlIHBsdWdpbiBpbmZvCisKKzIwMTEtMDQtMTYgMTQ6MzQ6MDggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvTWFrZWZpbGUuYW06CisJICBnc3Q6IG1ha2Ugc3VyZSBnb2JqZWN0LWludHJvc3BlY3Rpb24gc2Nhbm5lciBjYWxscyBnc3RfaW5pdCgpCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ3OTIyCisKKzIwMTEtMDQtMTYgMTA6NDU6MTYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvZGF0YXByb3RvY29sL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvbmV0L01ha2VmaWxlLmFtOgorCSAgbGliczogZ29iamVjdC1pbnRyb3NwZWN0aW9uIHNjYW5uZXIgZG9lc24ndCBuZWVkIHRvIHNjYW4gb3IgdXBkYXRlIHBsdWdpbiBpbmZvCisJICBNYWtlIHN1cmUgdGhlIHNjYW5uZXIgZG9lc24ndCBsb2FkIG9yIGludHJvc3BlY3Qgb3IgY2hlY2sgYW55IHBsdWdpbnMsCisJICAoZXNwZWNpYWxseSBub3Qgb3V0c2lkZSB0aGUgYnVpbGQgZGlyZWN0b3J5KS4KKworMjAxMS0wNC0xNiAxMDozMzoyMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9uZXQvTWFrZWZpbGUuYW06CisJICBsaWJzOiBtYWtlIHN1cmUgZ29iamVjdC1pbnRyb3NwZWN0aW9uIHNjYW5uZXIgY2FsbHMgZ3N0X2luaXQoKQorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0NzkyMgorCisyMDExLTA0LTE2IDEwOjE3OjI0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgorCSAgd2luMzI6IGFkZCBuZXcgYmFzZXBhcnNlIEFQSSB0byBsaWJnc3RiYXNlLmRlZgorCisyMDExLTA0LTE2IDA5OjMzOjA2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQorCisyMDExLTA0LTE2IDA5OjMyOjE3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICB3aW4zMjogQWRkIGV4cG9ydHMgZm9yIHRoZSBHc3RQYXJzZUNvbnRleHQgYW5kIEdzdEJ1ZmZlckxpc3RJdGVyYXRvciB0eXBlcworCisyMDExLTA0LTE2IDA4OjU5OjU4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQorCisyMDExLTA0LTE1IDIwOjU4OjUxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBsdWdpbmxvYWRlci5jOgorCSAgcGx1Z2lubG9hZGVyOiBvbmx5IHJ1biBnc3QtcGx1Z2luLXNjYW5uZXIgd2l0aCAvdXNyL2Jpbi9hcmNoIHdyYXBwZXIgb24gT1MgWCA+PSAxMC41CisJICBCYXNlZCBvbiBwYXRjaCBieTogRGFuaWVsIE1hY2tzIDxkbWFja3NAbmV0c3BhY2Uub3JnPgorCSAgRWFybGllciB2ZXJzaW9ucyBvZiBPU1ggZG9uJ3Qgc3VwcG9ydCBwcm9wZXIgbXVsdGlhcmNoIGFuZAorCSAgdHJ5aW5nIHRvIHVzZSAvdXNyL2Jpbi9hcmNoIC1mb28gd2l0aCB0aG9zZSB2ZXJzaW9ucyB3b3VsZAorCSAganVzdCBicmVhayB0aGluZ3MuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE1MzU3CisKKzIwMTEtMDQtMTUgMTk6MDc6NTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg6CisJICBiYXNlcGFyc2U6IGV4cG9zZSBnc3RfYmFzZV9wYXJzZV9mcmFtZV9mcmVlKCkgZm9yIGNvbXBsZXRlbmVzcworCSAgQVBJOiBnc3RfYmFzZV9wYXJzZV9mcmFtZV9mcmVlKCkKKworMjAxMS0wNC0xNSAxODo1MjoxOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IGluaXQgZnJhbWVzIG9uIHRoZSBzdGFjayB3aXRoIGdzdF9iYXNlX3BhcnNlX2ZyYW1lX2luaXQoKQorCSAgRnJhbWVzIG11c3Qgbm93IGJlIGluaXRlZCB0aGlzIHdheSwgY2FuJ3QganVzdCB6ZXJvIHRoZW0KKwkgIG91dCBhbmQgdXNlIHRoZW0uCisKKzIwMTEtMDQtMTUgMTg6Mzg6NDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBtb3JlIGRlYnVnIGxvZ2dpbmcsIG1pbm9yIGNsZWFuLXVwCisJICBUcmFjZSBmcmFtZXMsIHNwbGl0IG91dCBjb2RlIHRvIHF1ZXVlIGEgZnJhbWUgZm9yIGxhdGVyLgorCisyMDExLTA0LTE1IDE4OjAwOjIxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg6CisJICBiYXNlcGFyc2U6IGNoYW5nZSBnc3RfYmFzZV9wYXJzZV9mcmFtZV9pbml0KCkgdG8gbm90IHRha2UgYSBHc3RCYXNlUGFyc2UgYXJndW1lbnQKKworMjAxMS0wNC0xNSAxNzo0MTowMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5oOgorCSAgYmFzZXBhcnNlOiBtYWtlIEdzdEJhc2VQYXJzZUZyYW1lIGhhbmRsaW5nIG1vcmUgYmluZGluZ3MtZnJpZW5kbHkKKwkgIENoYW5nZSBzZW1hbnRpY3Mgb2YgZ3N0X2Jhc2VfcGFyc2VfcHVzaF9mcmFtZSgpIGFuZCBtYWtlIGl0IHRha2UKKwkgIG93bmVyc2hpcCBvZiB0aGUgd2hvbGUgZnJhbWUsIG5vdCBqdXN0IHRoZSBmcmFtZSBjb250ZW50cy4gVGhpcworCSAgaXMgbW9yZSBpbiBsaW5lIHdpdGggaG93IGdzdF9wYWRfcHVzaCgpIGV0Yy4gd29yay4gSnVzdCB0cmFuc2ZlcmluZworCSAgdGhlIGNvbnRlbnQsIGJ1dCBub3QgdGhlIGNvbnRhaW5lciBvZiBzb21ldGhpbmcgdGhhdCdzIG5vdCByZWFsbHkKKwkgIGtub3duIHRvIGJlIGEgY29udGFpbmVyIGlzIGhhcmQgdG8gYW5ub3RhdGUgcHJvcGVybHkgYW5kIHByb2JhYmx5CisJICB3b24ndCB3b3JrLiBXZSBtYXJrIGZyYW1lcyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIG5vdyB3aXRoIGEgcHJpdmF0ZQorCSAgZmxhZyBpbiBnc3RfYmFzZV9wYXJzZV9mcmFtZV9pbml0KCksIHNvIGdzdF9iYXNlX3BhcnNlX2ZyYW1lX2ZyZWUoKQorCSAgb25seSBmcmVlcyB0aGUgY29udGVudHMgaW4gdGhhdCBjYXNlIGJ1dCBub3QgdGhlIGZyYW1lIHN0cnVjdCBpdHNlbGYuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE4ODU3CisJICBBUEk6IGdzdF9iYXNlX3BhcnNlX2ZyYW1lX25ldygpCisKKzIwMTEtMDQtMTUgMTU6MDI6MjAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuaDoKKwkgIGJhc2VwYXJzZTogcmVnaXN0ZXIgYm94ZWQgdHlwZSBmb3IgR3N0QmFzZUZyYW1lUGFyc2UKKwkgIFRvIG1ha2UgdGhpcyB1c2FibGUgZm9yIGJpbmRpbmdzLgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTUxODg1NworCisyMDExLTA0LTE1IDEzOjU3OjQ3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkgIHF1ZXVlMjogQWRkIG1pc3NpbmcgKSB0byB0aGUgcmluZy1idWZmZXItbWF4LXNpemUgcHJvcGVydHkgZGVzY3JpcHRpb24KKworMjAxMS0wNC0xNSAxMDo1Mzo1NiArMDIwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBSZW1vdmUgdW51c2VkIGJ1dCBzZXQgdmFyaWFibGUKKwkgIEdDQyA0LjYuMCBzcGl0cyB3YXJuaW5ncyBhYm91dCB0aGVzZS4KKworMjAxMS0wNC0xNCAxNjowNjoxNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3QuYzoKKwkqIGdzdC9nc3RidWZmZXJsaXN0LmM6CisJKiBnc3QvZ3N0YnVmZmVybGlzdC5oOgorCSAgYnVmZmVybGlzdDogQWRkIGJveGVkIHR5cGUgZm9yIEdzdEJ1ZmZlckxpc3RJdGVyYXRvciBmb3IgZ29iamVjdC1pbnRyb3NwZWN0aW9uCisKKzIwMTEtMDQtMTQgMTU6NTk6MjggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0LmM6CisJKiBnc3QvZ3N0cGFyc2UuYzoKKwkqIGdzdC9nc3RwYXJzZS5oOgorCSAgcGFyc2U6IEFkZCBib3hlZCB0eXBlIGZvciBHc3RQYXJzZUNvbnRleHQgZm9yIGdvYmplY3QtaW50cm9zcGVjdGlvbgorCisyMDExLTA0LTE0IDE1OjUxOjI0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKKwkqIGdzdC9nc3RmaWx0ZXIuYzoKKwkqIGdzdC9nc3RpbnRlcmZhY2UuYzoKKwkqIGdzdC9nc3RpdGVyYXRvci5jOgorCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKKwkqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSogZ3N0L2dzdHV0aWxzLmM6CisJICBnc3Q6IEFkZCBzb21lIG1vcmUgZ29iamVjdC1pbnRyb3NwZWN0aW9uIGFubm90YXRpb25zCisKKzIwMTEtMDQtMTQgMDk6MDc6NDggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkgIG11bHRpcXVldWU6IERvbid0IGxlYWsgdGhlIHNpbmtwYWQgbmFtZQorCisyMDExLTA0LTE0IDA5OjA3OjI1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlxdWV1ZS5jOgorCSAgbXVsdGlxdWV1ZTogRG9uJ3QgbGVhayBwYWRzIGluIHRoZSBuYW1lZCBwYWRzIHVuaXQgdGVzdAorCisyMDExLTA0LTE0IDA4OjU5OjE0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHV0aWxzLmM6CisJICB1dGlsczogRml4IGNhcHMgbGVha3MgaW4gZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fYWNjZXB0X3thbnksYWxsfV9jYXBzX2luX2RpcmVjdGlvbigpCisKKzIwMTEtMDQtMTMgMDk6MjA6MTMgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJKiBnc3QvcGFyc2UvcGFyc2UubDoKKwkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9wYXJzZS1sYXVuY2guYzoKKwkgIHBhcnNlcjogQWxsb3cgZWxlbWVudCBuYW1lcyB0byBiZWdpbiB3aXRoIGRpZ2l0cworCisyMDExLTA0LTEzIDEwOjI0OjMzIC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6CisJICB0ZXN0czogQWRkIHRlc3QgZm9yIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yCisKKzIwMTEtMDEtMDYgMTg6MTE6MzEgKzAxMDAgIE9sZSBBbmRyw6kgVmFkbGEgUmF2bsOlcyA8b3Jhdm5hc0BjaXNjby5jb20+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6CisJICBlbGVtZW50czogRml4IHBhZCBjYWxsYmFja3Mgc28gdGhleSBoYW5kbGUgd2hlbiBwYXJlbnQgZ29lcyBhd2F5CisJICAxKSBXZSBuZWVkIHRvIGxvY2sgYW5kIGdldCBhIHN0cm9uZyByZWYgdG8gdGhlIHBhcmVudCwgaWYgc3RpbGwgdGhlcmUuCisJICAyKSBJZiBpdCBoYXMgZ29uZSBhd2F5LCB3ZSBuZWVkIHRvIGhhbmRsZSB0aGF0IGdyYWNlZnVsbHkuCisJICBUaGlzIGlzIG5lY2Vzc2FyeSBpbiBvcmRlciB0byBzYWZlbHkgbW9kaWZ5IGEgcnVubmluZyBwaXBlbGluZS4gSGFzIGJlZW4KKwkgIG9ic2VydmVkIHdoZW4gYSBzdHJlYW1pbmcgdGhyZWFkIGlzIGRvaW5nIGEgYnVmZmVyX2FsbG9jKCkgd2hpbGUgYW4KKwkgIGFwcGxpY2F0aW9uIHRocmVhZCBzZW5kcyBhbiBldmVudCBvbiBhIHBhZCBmdXJ0aGVyIGRvd25zdHJlYW0sIGFuZCBmcm9tCisJICB3aXRoaW4gYSBwYWQgcHJvYmUgKGhvbGRpbmcgU1RSRUFNX0xPQ0spIGNhcnJpZXMgb3V0IHRoZSBwaXBlbGluZSBwbHVtYmluZworCSAgd2hpbGUgdGhlIHN0cmVhbWluZyB0aHJlYWQgaGFzIGl0cyBidWZmZXJfYWxsb2MoKSBpbiBwcm9ncmVzcy4KKworMjAxMS0wMS0wNiAxODoxMTozMSArMDEwMCAgT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzIDxvcmF2bmFzQGNpc2NvLmNvbT4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBiYXNlOiBGaXggcGFkIGNhbGxiYWNrcyBzbyB0aGV5IGhhbmRsZSB3aGVuIHBhcmVudCBnb2VzIGF3YXkKKwkgIDEpIFdlIG5lZWQgdG8gbG9jayBhbmQgZ2V0IGEgc3Ryb25nIHJlZiB0byB0aGUgcGFyZW50LCBpZiBzdGlsbCB0aGVyZS4KKwkgIDIpIElmIGl0IGhhcyBnb25lIGF3YXksIHdlIG5lZWQgdG8gaGFuZGxlIHRoYXQgZ3JhY2VmdWxseS4KKwkgIFRoaXMgaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIHNhZmVseSBtb2RpZnkgYSBydW5uaW5nIHBpcGVsaW5lLiBIYXMgYmVlbgorCSAgb2JzZXJ2ZWQgd2hlbiBhIHN0cmVhbWluZyB0aHJlYWQgaXMgZG9pbmcgYSBidWZmZXJfYWxsb2MoKSB3aGlsZSBhbgorCSAgYXBwbGljYXRpb24gdGhyZWFkIHNlbmRzIGFuIGV2ZW50IG9uIGEgcGFkIGZ1cnRoZXIgZG93bnN0cmVhbSwgYW5kIGZyb20KKwkgIHdpdGhpbiBhIHBhZCBwcm9iZSAoaG9sZGluZyBTVFJFQU1fTE9DSykgY2FycmllcyBvdXQgdGhlIHBpcGVsaW5lIHBsdW1iaW5nCisJICB3aGlsZSB0aGUgc3RyZWFtaW5nIHRocmVhZCBoYXMgaXRzIGJ1ZmZlcl9hbGxvYygpIGluIHByb2dyZXNzLgorCisyMDExLTAxLTA2IDE4OjExOjMxICswMTAwICBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMgPG9yYXZuYXNAY2lzY28uY29tPgorCisJKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKKwkgIGdob3N0cGFkOiBGaXggcGFkIGNhbGxiYWNrcyBzbyB0aGV5IGhhbmRsZSB3aGVuIHBhcmVudCBnb2VzIGF3YXkKKwkgIDEpIFdlIG5lZWQgdG8gbG9jayBhbmQgZ2V0IGEgc3Ryb25nIHJlZiB0byB0aGUgcGFyZW50LCBpZiBzdGlsbCB0aGVyZS4KKwkgIDIpIElmIGl0IGhhcyBnb25lIGF3YXksIHdlIG5lZWQgdG8gaGFuZGxlIHRoYXQgZ3JhY2VmdWxseS4KKwkgIFRoaXMgaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIHNhZmVseSBtb2RpZnkgYSBydW5uaW5nIHBpcGVsaW5lLiBIYXMgYmVlbgorCSAgb2JzZXJ2ZWQgd2hlbiBhIHN0cmVhbWluZyB0aHJlYWQgaXMgZG9pbmcgYSBidWZmZXJfYWxsb2MoKSB3aGlsZSBhbgorCSAgYXBwbGljYXRpb24gdGhyZWFkIHNlbmRzIGFuIGV2ZW50IG9uIGEgcGFkIGZ1cnRoZXIgZG93bnN0cmVhbSwgYW5kIGZyb20KKwkgIHdpdGhpbiBhIHBhZCBwcm9iZSAoaG9sZGluZyBTVFJFQU1fTE9DSykgY2FycmllcyBvdXQgdGhlIHBpcGVsaW5lIHBsdW1iaW5nCisJICB3aGlsZSB0aGUgc3RyZWFtaW5nIHRocmVhZCBoYXMgaXRzIGJ1ZmZlcl9hbGxvYygpIGluIHByb2dyZXNzLgorCisyMDExLTA0LTEzIDE3OjI2OjU0ICswMjAwICBKYW5uZSBHcnVuYXUgPGphbm5lLmdydW5hdUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IHByZXZlbnQgY2FsY3VsYXRpb24gd2l0aCBHU1RfQ0xPQ0tfVElNRV9OT05FIGluIHVwZGF0ZV90aW1lX2xldmVsKCkKKworMjAxMS0wNC0xMSAxNTowODozMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpcXVldWUuYzoKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlMi5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6CisJKiB0ZXN0cy9jaGVjay9saWJzL3Rlc3RfdHJhbnNmb3JtLmM6CisJICB0ZXN0czogZml4IHVudXN1ZWQtYnV0LWFzc2lnbmVkLXZhcmlhYmxlIHdhcm5pbmdzIHdpdGggZ2NjIDQuNgorCisyMDExLTA0LTExIDEzOjA0OjMyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOgorCSAgdGVzdHM6IGRpc2FibGUgdGVzdF9tYW55X2JpbnMgdW5pdCB0ZXN0IGZvciBub3cKKwkgIEl0IGZhaWxzIG9uIHRoZSBPU1ggYm90IChib3RoIHdpdGggZ2l0IGFuZCB0aGUgbGFzdCByZWxlYXNlKSwgYW5kCisJICBpdCBkb2Vzbid0IHJlYWxseSB0ZXN0IGFueXRoaW5nIHVzZWZ1bCwgc28gbWF5IGp1c3QgYXMgd2VsbCBkaXNhYmxlCisJICBpdCBmb3Igbm93LgorCisyMDExLTA0LTExIDEyOjUxOjM2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBsdWdpbmxvYWRlci5jOgorCSAgcGx1Z2lubG9hZGVyOiBmaXggY29tcGlsZXIgd2FybmluZ3MKKwkgIENhc3Qgc3RyaW5nIGNvbnN0YW50cyB0byBtYWtlIGNvbXBpbGVyIGhhcHB5LgorCisyMDExLTA0LTExIDEyOjA0OjM0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOgorCSAgdGVzdHM6IGFsbG93IG1vcmUgdGltZSBmb3IgdGhlIHRlc3RfbWFueV9iaW5zIHBpcGVsaW5lIHRvIHByZXJvbGwKKwkgIEhvcGVmdWxseSBtYWtlcyB0aGlzIHRlc3Qgd29yayBvbiB0aGUgT1NYIGJ1aWxkIGJvdCBhbmQgb3RoZXIKKwkgIG5vdC1zby1wb3dlcmZ1bCBtYWNoaW5lcy4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDY2MjQKKworMjAxMS0wNC0xMSAxMToyOTowMCArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkqIGdzdC9nc3RwbHVnaW5sb2FkZXIuYzoKKwkgIHBsdWdpbmxvYWRlcjogbWFrZSBzdXJlIGdzdC1wbHVnaW4tc2Nhbm5lciBpcyBjYWxsZWQgd2l0aCB0aGUgcmlnaHQgYXJjaCBvbiBPU1gKKwkgIE9uIE9TWCwgR1N0cmVhbWVyIG1pZ2h0IGJlIGJ1aWx0IGFzIGEgJ2ZhdC91bml2ZXJzYWwnIGJpbmFyeSBjb250YWluaW5nCisJICBib3RoIDMyLWJpdCBhbmQgNjQtYml0IGNvZGUuIFdlIG11c3QgdGFrZSBjYXJlIHRoYXQgZ3N0LXBsdWdpbi1zY2FubmVyCisJICBpcyBleGVjdXRlZCB3aXRoIHRoZSBzYW1lIGFyY2hpdGVjdHVyZSBhcyB0aGUgR1N0cmVhbWVyIGNvcmUsIG90aGVyd2lzZQorCSAgYmFkIHRoaW5ncyBtYXkgaGFwcGVuIGFuZCBjb3JlL3NjYW5uZXIgd2lsbCBub3QgYmUgYWJsZSB0byBjb21tdW5pY2F0ZQorCSAgcHJvcGVybHkuCisJICBTaG91bGQgZml4IGlzc3VlcyB3aXRoICgzMi1iaXQpIGZpcmVmb3ggdXNpbmcgYSAzMi1iaXQgR1N0cmVhbWVyIGNvcmUKKwkgIHdoaWNoIHRoZW4gc3Bhd25zIGEgJ3VuaXZlcnNhbCcgZ3N0LXBsdWdpbi1zY2FubmVyIGJpbmFyeSB3aGljaCBnZXRzCisJICBydW4gaW4gNjQtYml0IG1vZGUsIGNhdXNpbmcgMTAwJSBjcHUgdXNhZ2UgLyBidXN5IGxvb3BzIG9yIGp1c3QgaGFuZ2luZworCSAgZmlyZWZveCB1bnRpbCBraWxsZWQuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE1MzU3CisKKzIwMTEtMDQtMTEgMTE6MDU6MjQgKzAyMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiBBbGxvdyB0cmFja2luZyBvZiBidWZmZXJzIGluIEdTVF9TQ0hFRFVMSU5HIGRlYnVnIG91dHB1dAorCSAgQXMgR1NUX1NDSEVEVUxJTkcgcmVwb3J0cyB3aGVuIGJ1ZmZlcnMgcGFzcyB0aHJvdWdoIHBhZHMgZHVlIHRvCisJICBnc3RfcGFkX3B1c2ggY2FsbHMsIHRoZXkgYXJlIGEgZ29vZCB3YXkgb2YgdHJhY2tpbmcgdGhlIHByb2dyZXNzIG9mCisJICBidWZmZXJzIHRocm91Z2ggcGlwZWxpbmVzLiBBcyBzdWNoLCBhZGRpbmcgb3V0cHV0IG9mIHRoZSBidWZmZXIgcG9pbnRlcnMKKwkgIHRvIHRoZXNlIG1lc3NhZ2VzIGFsbG93cyB0cmFja2luZyBvZiBzcGVjaWZpYyBidWZmZXJzLCBlYXNpbmcgZGVidWdnaW5nLgorCisyMDExLTA0LTExIDEwOjUzOjM5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBwb3J0IHRvIDAuMTEKKworMjAxMS0wNC0xMSAxMDoyNjo1NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQorCSAgQ29uZmxpY3RzOgorCSAgYW5kcm9pZC9iYXNlLm1rCisJICBhbmRyb2lkL2NvbnRyb2xsZXIubWsKKwkgIGFuZHJvaWQvZGF0YXByb3RvY29sLm1rCisJICBhbmRyb2lkL2VsZW1lbnRzLm1rCisJICBhbmRyb2lkL2dzdC1pbnNwZWN0Lm1rCisJICBhbmRyb2lkL2dzdC1sYXVuY2gubWsKKwkgIGFuZHJvaWQvZ3N0LXBsdWdpbi1zY2FubmVyLm1rCisJICBhbmRyb2lkL2dzdC5taworCSAgYW5kcm9pZC9pbmRleGVycy5taworCSAgYW5kcm9pZC9uZXQubWsKKwkgIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZgorCisyMDExLTA0LTExIDEwOjIwOjEwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJICBidWZmZXI6IGFkZCBGSVhNRQorCisyMDExLTAxLTI3IDE0OjMzOjA4ICswMTAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyby5kQGdtYWlsLmNvbT4KKworCSogLmdpdGlnbm9yZToKKwkqIEFuZHJvaWQubWs6CisJKiBhbmRyb2lkL05PVElDRToKKwkqIGFuZHJvaWQvYmFzZS5tazoKKwkqIGFuZHJvaWQvY29udHJvbGxlci5tazoKKwkqIGFuZHJvaWQvZGF0YXByb3RvY29sLm1rOgorCSogYW5kcm9pZC9lbGVtZW50cy5tazoKKwkqIGFuZHJvaWQvZ3N0LWluc3BlY3QubWs6CisJKiBhbmRyb2lkL2dzdC1sYXVuY2gubWs6CisJKiBhbmRyb2lkL2dzdC1wbHVnaW4tc2Nhbm5lci5tazoKKwkqIGFuZHJvaWQvZ3N0Lm1rOgorCSogYW5kcm9pZC9nc3QvZ3N0Y29uZmlnLmg6CisJKiBhbmRyb2lkL2dzdC9nc3RlbnVtdHlwZXMuYzoKKwkqIGFuZHJvaWQvZ3N0L2dzdGVudW10eXBlcy5oOgorCSogYW5kcm9pZC9nc3QvZ3N0bWFyc2hhbC5jOgorCSogYW5kcm9pZC9nc3QvZ3N0bWFyc2hhbC5oOgorCSogYW5kcm9pZC9nc3QvZ3N0dmVyc2lvbi5oOgorCSogYW5kcm9pZC9nc3QvcGFyc2UvZ3JhbW1hci5vdXRwdXQ6CisJKiBhbmRyb2lkL2dzdC9wYXJzZS9ncmFtbWFyLnRhYi5jOgorCSogYW5kcm9pZC9nc3QvcGFyc2UvZ3JhbW1hci50YWIuaDoKKwkqIGFuZHJvaWQvZ3N0L3BhcnNlL2xleC5fZ3N0X3BhcnNlX3l5LmM6CisJKiBhbmRyb2lkL2luZGV4ZXJzLm1rOgorCSogYW5kcm9pZC9uZXQubWs6CisJKiBhbmRyb2lkL3Rvb2xzLm1rOgorCSogZ3N0L01ha2VmaWxlLmFtOgorCSogZ3N0L3BhcnNlL01ha2VmaWxlLmFtOgorCSogbGlicy9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9oZWxwZXJzL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvbmV0L01ha2VmaWxlLmFtOgorCSogcGx1Z2lucy9NYWtlZmlsZS5hbToKKwkqIHBsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUuYW06CisJKiBwbHVnaW5zL2luZGV4ZXJzL01ha2VmaWxlLmFtOgorCSogdG9vbHMvTWFrZWZpbGUuYW06CisJICBhbmRyb2lkOiBtYWtlIGl0IHJlYWR5IGZvciBhbmRyb2dlbml6ZXIKKwkgIFJlbW92ZSB0aGUgYW5kcm9pZC8gdG9wIGRpcgorCSAgRml4ZSB0aGUgTWFrZWZpbGUuYW0gdG8gYmUgYW5kcm9nZW5pemVkCisJICBUbyBidWlsZCBnc3RyZWFtZXIgZm9yIGFuZHJvaWQgd2UgYXJlIG5vdyB1c2luZyBhbmRyb2dlbml6ZXIgd2hpY2ggZ2VuZXJhdGVzIHRoZSBuZWVkZWQgQW5kcm9pZC5tayBmaWxlcy4KKwkgIEFuZHJvZ2VuaXplciBjYW4gYmUgZm91bmQgaGVyZTogaHR0cDovL2dpdC5jb2xsYWJvcmEuY28udWsvP3A9dXNlci9kZXJlay9hbmRyb2dlbml6ZXIuZ2l0CisKKzIwMTEtMDQtMDkgMjM6NTQ6MjAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dHJhY2UuYzoKKwkgIHRyYWNlOiBkb24ndCBwdXQgY29kZSB3aXRoIHNpZGUgZWZmZWN0cyBpbnRvIGdfcmV0dXJuX2lmX2ZhaWwoKQorCisyMDExLTA0LTA5IDIyOjU3OjQ2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKKwkgIGRvY3M6IG1pbm9yIGZpeGVzIGZvciBiYXNlcGFyc2UgZG9jcworCSAgQ2xhc3MgdmZ1bmMgcmVmZXJlbmNlcyBzdGlsbCBhcmVuJ3QgcmlnaHQsIG5vIGlkZWEgd2hhdAorCSAgdGhlIGNvcnJlY3QgbWFya3VwIGZvciB0aG9zZSBpcy4KKworMjAxMS0wNC0wOSAxODowNDo1NSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJICBlbGVtZW50OiB1bnJlZiBldmVudCBpbiBkZWZhdWx0X3NlbmRfZXZlbnQgaW4gY2FzZSBlbGVtZW50IGhhcyBubyBwYWRzCisJICBTcG90dGVkIGJ5ICBIYWFrb24gU3BvcnNoZWltLgorCisyMDExLTA0LTA5IDA0OjA3OjA0ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZ3N0Ly5naXRpZ25vcmU6CisJICBjaGVjazogSWdub3JlIG5ldyBnc3RtZXRhIGJpbmFyeQorCisyMDExLTA0LTA5IDA0OjA1OjQ4ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9kZXNpZ24vTWFrZWZpbGUuYW06CisJICBkZXNpZ246IGRyYWZ0LWJ1ZmZlcjIudHh0IG5vIGxvbmdlciBleGlzdHMKKworMjAxMS0wNC0wOSAwNDowNToyMCArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9NYWtlZmlsZS5hbToKKwkgIGdzdDogRG9uJ3QgZm9yZ2V0IHRvIGRpc3QgZ3N0ZWxlbWVudG1ldGFkYXRhLmgKKworMjAxMS0wNC0wOCAxOTowNzowMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IG1pbm9yIHZhcmlhYmxlIG5hbWUgY2xlYW4tdXAKKworMjAxMS0wNC0wOCAxNTozMToxNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuYXJnczoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgorCSAgYmFzZXBhcnNlOiByZW5hbWUgX3NldF9mcmFtZV9wcm9wcygpIHRvIF9zZXRfZnJhbWVfcmF0ZSgpCisJICBTZWVtcyBsaWtlIHRoZSBiZXN0IGZpdCB0byB3aGF0IGl0IGRvZXMsIGFuZCBpcyBzaG9ydGVyIHRoYW4KKwkgIHNldF9mcmFtZV9wcm9wZXJ0aWVzKCkgd2hpY2ggbWlnaHQgYWxzbyBoYXZlIGJlZW4gY29uZnVzaW5nCisJICBiZWNhdXNlIG9mIEdzdEJhc2VQYXJzZUZyYW1lLgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTUxODg1NworCisyMDExLTA0LTA2IDE3OjQzOjI3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5oOgorCSAgYmFzZXBhcnNlOiByZXBsYWNlIGZvcm1hdCBmbGFncyB3aXRoIGdzdF9iYXNlX3BhcnNlX3NldF97cGFzc3Rocm91Z2gsc3luY2FibGUsaGFzX3RpbWluZ19pbmZvfQorCSAgVGhpcyBpcyBtb3JlIGluIGxpbmUgd2l0aCBlLmcuIEdzdEJhc2VUcmFuc2Zvcm0ncyBBUEksIGFuZCBtYWtlcyBmb3IgbmljZXIKKwkgIHRvIHJlYWQgY29kZS4gTm8gZ2V0dGVycyBmb3Igbm93IHNpbmNlIEkgZG9uJ3Qgc2VlIGFueSB1c2UgY2FzZSBmb3IgdGhlbSwKKwkgIHRoZSBBUEkgaXMgZm9yIHN1YmNsYXNzZXMsIHdoaWNoIHVzdWFsbHkga25vdyB3aGF0IGZvcm1hdCB0aGV5J3JlCisJICBkZWFsaW5nIHdpdGggYWxyZWFkeSBhbmQgaGVuY2Uga25vdyB3aGF0IHRoZXkndmUgc2V0LgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTUxODg1NworCisyMDExLTA0LTA0IDE3OjU4OjU5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg6CisJICBiYXNlcGFyc2U6IG1ha2UgRFJBSU4gYW5kIFNZTkMgZmxhZ3Mgb24gYmFzZXBhcnNlLCBub3QgdGhlIGZyYW1lLCBhbmQgY2hhbmdlIHRvIERSQUlOSU5HIGFuZCBMT1NUX1NZTkMKKwkgIFRoZSBmaXJzdCBiZWNhdXNlIGl0IHNlZW1zIGEgYmV0dGVyIGZpdCBjb25jZXB0dWFsbHksIHRoZSBzZWNvbmQKKwkgIHRvIGV4cHJlc3MgYm9vbGVhbm5lc3MuIEFsc28gY2hhbmdlIHRoZSBhY2Nlc3NvciBtYWNyb3MgZm9yIHN1YmNsYXNzZXMKKwkgIHRvIEdTVF9CQVNFX1BBUlNFX0RSQUlOSU5HIGFuZCBHU1RfQkFTRV9QQVJTRV9MT1NUX1NZTkMuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE4ODU3CisKKzIwMTEtMDQtMDIgMTQ6MTg6NTcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5oOgorCSAgYmFzZXBhcnNlOiBhZGQgc29tZSBwYWRkaW5nIHRvIEdzdEJhc2VQYXJzZUZyYW1lCisJICBFc3AuIHNpbmNlIGl0J3MgdXN1YWxseSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrLgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTUxODg1NworCisyMDExLTA0LTAyIDE0OjA4OjQ2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuaDoKKwkgIGJhc2VwYXJzZTogZml4IHR5cG8gaW4gZG9jcyBmb3IgR1NUX0JBU0VfUEFSU0VfRk9STUFUX0ZMQUdfUEFTU1RIUk9VR0gKKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg4NTcKKworMjAxMS0wNC0wMiAxNDowNDo0MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IHVzZSBHUXVldWUgaW5zdGVhZCBvZiBHTGlzdCBmb3IgcXVldWVkIGZyYW1lcworCSAgYW5kIG1ha2UgYnVmZmVyIG1ldGFkYXRhIHdyaXRhYmxlIGJlZm9yZSBzZXR0aW5nIGNhcHMgb24gcXVldWVkCisJICBidWZmZXIuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ2MzQxCisKKzIwMTEtMDQtMDIgMTM6MDI6MDEgKzAxMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcm1lcmFsaUBnbWFpbC5jb20+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5oOgorCSAgYmFzZXBhcnNlOiBhZGQgR1NUX0JBU0VfUEFSU0VfRkxPV19RVUVVRUQgdG8gcXVldWUgYnVmZmVycyB1bnRpbCBjYXBzIGFyZSBrbm93bgorCSAgVGhpcyBpcyB1c2VmdWwgZm9yIHBhcnNlciBsaWtlIGZsYWNwYXJzZSBvciBoMjY0cGFyc2Ugd2hpY2ggbWF5IG5lZWQgdG8gcHJvY2VzcworCSAgc29tZSBidWZmZXJzIGJlZm9yZSB0aGV5IGNhbiBjb25zdHJ1Y3QgdGhlIGZpbmFsIGNhcHMsIGluIHdoaWNoIGNhc2UgdGhleSBtYXkKKwkgIHdhbnQgdG8gZGVsYXkgcHVzaGluZyB0aGUgaW5pdGlhbCBidWZmZXJzIHVudGlsIHRoZSBmdWxsIGFuZCBwcm9wZXIgY2FwcyBhcmUKKwkgIGtub3duLgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0NjM0MQorCisyMDExLTAzLTMxIDE1OjUwOjIyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbDoKKwkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuaDoKKwkgIGJhc2VwYXJzZTogYWRkIHRvIGRvY3MgYW5kIGZpeCB1cCBndGstZG9jIG1hcmt1cCBhIGxpdHRsZQorCSAgQW5kIGFkZCBTaW5jZSBtYXJrZXJzLgorCisyMDExLTAzLTMxIDE0OjQ4OjQ3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg6CisJICBiYXNlcGFyc2U6IHJlcGxhY2Ugc2V0X3NlZWsoKSB3aXRoIF9zZXRfYXZlcmFnZV9iaXRyYXRlKCkgYW5kIEZMQUdfU1lOQ0FCTEUKKwkgIFRoaXMgbWFrZXMgbW9yZSBzZW5zZSBjb25jZXB0dWFsbHksIHNpbmNlIHRoZSBiaXRyYXRlIG1heSBiZSB1c2VkCisJICB0byBlc3RpbWF0ZSBhIHNlZWsgcG9zaXRpb24gaWYgdGhlcmUncyBubyBzZWVrIHRhYmxlIG9yIGp1c3QgZm9yCisJICBkdXJhdGlvbiByZXBvcnRpbmcvZXN0aW1hdGlvbiBpZiB3ZSBjYW4ndCBzZWVrLiBBbHNvLCBldmVuIGlmIHRoZQorCSAgZm9ybWF0IGlzIG5vdCBzeW5jYWJsZSwgd2UgY291bGQgc3RpbGwgc2VlayBieSBwdXNoaW5nIGRhdGEgZnJvbSB0aGUKKwkgIHN0YXJ0IGFuZCB1c2luZyB0aGUgc2VnbWVudCB0byBtYWtlIGRvd25zdHJlYW0gY2xpcC4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg4NTcKKworMjAxMS0wMy0yNCAxNzozMDo1MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5oOgorCSAgYmFzZXBhcnNlOiByZW5hbWUgR3N0QmFzZUZvcm1hdCB0byBHc3RCYXNlRm9ybWF0RmxhZ3MgYW5kIGZpeCB1cCBhc3NvY2lhdGVkIEFQSQorCSAgQWxzbyBjaGFuZ2UgZ3N0X2Jhc2VfcGFyc2Vfc2V0X2Zvcm1hdChwYXJzZSxmbGFncyxzd2l0Y2hfb24pIHRvCisJICBnc3RfYmFzZV9wYXJzZV9zZXRfZm9ybWF0X2ZsYWdzKHBhcnNlLGZsYWdzKSB3aGljaCBpcyBtb3JlIGluIGxpbmUKKwkgIHdpdGggdGhlIHJlc3Qgb2Ygb3VyIEFQSSBhbmQgaG93IHRoZSBmdW5jdGlvbiBpcyB1c2VkLgorCisyMDExLTAzLTEzIDIzOjQzOjUyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg6CisJICBiYXNlcGFyc2U6IGRvbid0IGV4cG9zZSBHc3RBZGFwdGVyIGluIHB1YmxpYyBoZWFkZXIKKwkgIE5vbmUgb2YgdGhlIGV4aXN0aW5nIHN1YmNsYXNzZXMgbmVlZHMgYWNjZXNzIHRvIHRoYXQsIHNvIHRoZXJlJ3MKKwkgIG5vIHJlYXNvbiB0byBleHBvc2UgaXQgZm9yIG5vdy4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg4NTcKKworMjAxMS0wMy0xMyAyMzozODoxMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5oOgorCSAgYmFzZXBhcnNlOiBtb3ZlIHZhcmlvdXMgc2VnbWVudC1yZWxhdGVkIG1lbWJlcnMgaW50byB0aGUgcHJpdmF0ZSBpbnN0YW5jZSBzdHJ1Y3QKKwkgIElmIG5vbmUgb2YgdGhlIGV4aXN0aW5nIHN1YmNsYXNzZXMgdXNlcyB0aGVzZSwgdGhlcmUncyBwcm9iYWJseSBubworCSAgbmVlZCB0byBleHBvc2UgdGhlbSBhdCB0aGUgbW9tZW50LiBLZWVwIHRoZSBzZWdtZW50IGl0c2VsZiBleHBvc2VkCisJICB0aG91Z2guCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE4ODU3CisKKzIwMTEtMDMtMTMgMjM6MzA6NTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5oOgorCSAgYmFzZXBhcnNlOiByZW1vdmUgdW51c2VkIEdTVF9CQVNFX1BBUlNFX3tTSU5LLFNSQ31fTkFNRQorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTUxODg1NworCisyMDExLTAzLTEyIDE2OjE2OjIyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuaDoKKwkgIGJhc2VwYXJzZTogcmUtaW5kZW50IGhlYWRlcgorCisyMDExLTAzLTEyIDE1OjM0OjMzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogZml4IHVwIEdUeXBlIG5hbWUgYW5kIG1ha2UgX2dldF90eXBlKCkgZnVuY3Rpb24gdGhyZWFkLXNhZmUKKwkgIFJlbmFtZSBHVHlwZSBmcm9tIEdzdEJhc2VQYXJzZUJhZCB0byBHc3RCYXNlUGFyc2UuCisKKzIwMTEtMDMtMTIgMTU6Mjk6MzggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgorCSAgbGliczogYWRkIEdzdEJhc2VQYXJzZSB3aGljaCB3YXMgbW92ZWQgZnJvbSAtYmFkCisKKzIwMTEtMDItMjMgMTc6MjQ6MTQgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBtYWtlX21ldGFkYXRhX3dyaXRhYmxlKCkgZml4CisKKzIwMTEtMDItMjEgMTM6MjQ6MDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiByZW5hbWUgR1R5cGUgZnJvbSBHc3RBdWRpb0Jhc2VQYXJzZUJhZCB0byBHc3RCYXNlUGFyc2VCYWQKKwkgIFdlIHVzZSBpdCBmb3IgdmlkZW8gYXMgd2VsbCBub3cuCisKKzIwMTEtMDItMTggMTU6MDU6MzEgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogdHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlCisKKzIwMTEtMDItMTggMTU6MDU6MDMgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogdXNlIGRlbHRhLXVuaXQgZmxhZ3MgaW5zdGVhZCBvZiBub25lCisKKzIwMTEtMDItMTcgMTM6MjI6MjggLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5oOgorCSAgYmFzZXBhcnNlOiB1cGRhdGUgZG9jdW1lbnRhdGlvbiBmb3IgQVBJIGNoYW5nZXMKKworMjAxMC0xMC0xMyAxNTozOTo1NSAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6CisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5oOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg6CisJICBiYXNlcGFyc2U6IENyZWF0ZSBiYXNlcGFyc2UgbGlicmFyeQorCisyMDExLTAyLTA3IDE0OjQ2OjU3ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogdHVuZSBRVUVSWV9TRUVLSU5HIHJlc3BvbnNlCisJICBFdmVuIGlmIHdlIGN1cnJlbnRseSBkbyBub3QgaGF2ZSBhIGR1cmF0aW9uIHlldCwgYXNzdW1lIHNlZWthYmxlIGlmCisJICBpdCBsb29rcyBsaWtlIHdlJ2xsIGxpa2VseSBiZSBhYmxlIHRvIGRldGVybWluZSBpdCBsYXRlciBvbgorCSAgKHdoaWNoIGNvaW5jaWRlcyB3aXRoIG5lZWRlZCBpbmZvcm1hdGlvbiB0byBwZXJmb3JtIHNlZWtpbmcpLgorCSAgRml4ZXMgIzY0MTA0Ny4KKworMjAxMS0wMi0wOCAyMzozOToyNCArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IFVwZGF0ZSBtaW4vbWF4IGJpdHJhdGUgYmVmb3JlIGZpcnN0IHBvc3RpbmcgdGhlbQorCSAgVGhpcyBhdm9pZHMgcG9zdGluZyBhbiBpbml0aWFsIG1pbi1iaXRyYXRlIG9mIEdfVUlOVE1BWCBhbmQgbWF4LWJpdHJhdGUKKwkgIG9mIDAuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQxODU3CisKKzIwMTEtMDEtMjEgMTQ6NTM6MzkgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiB0dW5lIGRlZmF1bHQgZHVyYXRpb24gZXN0aW1hdGUgdXBkYXRlIGludGVydmFsCisJICBSYXRoZXIgdGhhbiBhIGZpeGVkIGRlZmF1bHQgZnJhbWUgY291bnQsIGVzdGltYXRlIGZyYW1lIGNvdW50IHRvIGFpbSBmb3IKKwkgIGFuIGludGVydmFsIGR1cmF0aW9uIGRlcGVuZGluZyBvbiBmcHMgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdXNlIG9sZAorCSAgZml4ZWQgZGVmYXVsdC4KKworMjAxMS0wMS0xNCAxNToxNjowNCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IHJldmVyc2UgcGxheWJhY2s7IG1pbmQga2V5ZnJhbWVzIGZvciBmcmFnbWVudCBib3VuZGFyeQorCisyMDExLTAxLTEyIDE0OjQwOjM3ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogZW5zdXJlIG5vbi1lbXB0eSBjYW5kaWRhdGUgZnJhbWVzCisKKzIwMTEtMDEtMTEgMTU6MjQ6MjMgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBjbGFyaWZ5IHNvbWUgZGVidWcgc3RhdGVtZW50cworCisyMDExLTAxLTExIDE1OjI0OjAyICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogcHJvcGVybHkgdHJhY2sgdXBzdHJlYW0gdGltZXN0YW1wcworCSAgLi4uIHJhdGhlciB0aGFuIHdpdGggYSBkZWxheS4KKworMjAxMS0wMS0xMSAxNToyMzoyOSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IG5lZWQgcHJvcGVyIGZyYW1lIGR1cmF0aW9uIHRvIG9idGFpbiBzZW5zaWJsZSBmcmFtZSBiaXRyYXRlCisKKzIwMTEtMDEtMTEgMTU6MjI6NTEgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBwcm9wZXIgaW5pdGlhbCB2YWx1ZXMgZm9yIGluZGV4IHRyYWNraW5nIHZhcmlhYmxlcworCisyMDExLTAxLTExIDEyOjA1OjEzICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogYXJyYW5nZSBmb3IgY29uc2lzdGVudCBldmVudCBoYW5kbGluZworCisyMDExLTAxLTEwIDE2OjU5OjU5ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuaDoKKwkgIGJhc2VwYXJzZTogaGVhZGVyIHN0eWxlIGNsZWFuaW5nCisKKzIwMTEtMDEtMTAgMTc6MDc6MzggKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBwcm92aWRlIHNvbWUgbW9yZSBpbml0aWFsIGZyYW1lIG1ldGFkYXRhIGluIHBhcnNlX2ZyYW1lCisJICAuLi4gYW5kIGRvY3VtZW50IGFjY29yZGluZ2x5LgorCisyMDExLTAxLTEwIDE2OjU2OjM2ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmg6CisJICBiYXNlcGFyc2U6IHJlZmFjdG9yIHBhc3N0aHJvdWdoIGludG8gZm9ybWF0IGZsYWdzCisJICBBbHNvIGFkZCBhIGZvcm1hdCBmbGFnIHRvIHNpZ25hbCBiYXNlcGFyc2UgdGhhdCBzdWJjbGFzcy9mb3JtYXQgY2FuIHByb3ZpZGUKKwkgIChwYXJzZWQpIHRpbWVzdGFtcCByYXRoZXIgdGhhbiBhbiBlc3RpbWF0ZWQgb25lLiAgSW4gcGFydGljdWxhciwgc3VjaCAic3Ryb25nIgorCSAgdGltZXN0YW1wIHRoZW4gYWxsb3dzIHRvIGUuZy4gZGV0ZXJtaW5lIGR1cmF0aW9uLgorCisyMDExLTAxLTEwIDE1OjM0OjQ4ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmg6CisJICBiYXNlcGFyc2U6IGludHJvZHVjZSBhIGJhc2VwYXJzZSBmcmFtZSB0byBzZXJ2ZSBhcyBjb250ZXh0CisJICAuLi4gYW5kIGFkanVzdCBzdWJjbGFzcyBwYXJzZXJzIGFjY29yZGluZ2x5CisKKzIwMTEtMDEtMDcgMTY6Mzk6NTEgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuaDoKKwkgIGJhc2VwYXJzZTogcmVzdHJpY3QgZHVyYXRpb24gc2Nhbm5pbmcgdG8gcHVsbCBtb2RlIGFuZCBhdm9pZCBleHRyYSBzZXRfY2FwcyBjYWxsCisKKzIwMTEtMDEtMDcgMTU6NTg6NDkgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuaDoKKwkgIGJhc2VwYXJzZTogdXBkYXRlIHNvbWUgZG9jdW1lbnRhdGlvbgorCSAgQWxzbyBhZGQgc29tZSBtb3JlIGRlYnVnLgorCisyMDExLTAxLTA2IDExOjQxOjQ0ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogYWxsb3cgaW5jcmVhc2luZyBtaW5fc2l6ZSBmb3IgY3VycmVudCBmcmFtZSBwYXJzaW5nIG9ubHkKKwkgIEFsc28gY2hlY2sgdGhhdCBzdWJjbGFzcyBhY3R1YWxseSBlaXRoZXIgZGlyZWN0cyB0byBza2lwIGJ5dGVzIG9yCisJICBpbmNyZWFzZXMgZXhwZWN0ZWQgZnJhbWUgc2l6ZSB0byBhdm9pZCBnb2luZyBub3doZXJlIGluIGJvZ3VzCisJICBpbmRlZmluaXRlIGxvb3BpbmcuCisKKzIwMTEtMDEtMTQgMTU6MjY6MzcgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFlc3BhcnNlOiBmaXggcmVmYWN0b3IgcmVncmVzc2lvbiBpbiBsb29wIGJhc2VkIHBhcnNpbmcKKworMjAxMS0wMS0wNiAxMToxNjo1NiArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IHBhc3MgYWxsIGF2YWlsYWJsZSBkYXRhIHRvIHN1YmNsYXNzIHJhdGhlciB0aGFuIG1pbmltdW0KKwkgIEFsc28gcmVkdWNlIHNvbWUgYWRhcHRlciBjYWxscyBhbmQgYWRkIGEgZmV3IGRlYnVnIHN0YXRlbWVudHMuCisKKzIwMTAtMTItMTAgMTU6NTk6NDkgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBmaXggcmV2ZXJzZSBwbGF5YmFjayBoYW5kbGluZworCisyMDEwLTEyLTEwIDE0OjU2OjEzICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogbWlub3IgdHlwbyBhbmQgZGVidWcgc3RhdGVtZW50IGNsZWFudXAKKworMjAxMC0xMi0xMCAxNDo0MDowNSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6CisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5oOgorCSAgYmFzZXBhcnNlOiByZWR1Y2UgbG9ja2luZworCSAgLi4uIHdoaWNoIGlzIGVpdGhlciBhbHJlYWR5IG11dGUgYW5kL29yIGltcGxpY2l0bHkgaGFuZGxlZCBieSBTVFJFQU1fTE9DSy4KKworMjAxMS0wMS0xNCAxNDowODozOCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IGF2b2lkIGxvb3AgaW4gZnJhbWUgbG9jYXRpbmcgaW50ZXJwb2xhdGlvbgorCisyMDExLTAxLTE0IDE2OjMwOjExIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkgIGF1ZGlvcGFyc2VyczogYmFzZXBhcnNlOiBCZSBjYXJlZnVsIHRvIG5vdCBsb3NlIHRoZSBldmVudCByZWYKKwkgIERvbid0IHVucmVmIHRoZSBldmVudCBpZiBpdCBoYXNuJ3QgYmVlbiBoYW5kbGVkLCBiZWNhdXNlIHRoZSBjYWxsZXIKKwkgIGFzc3VtZXMgaXQgaXMgc3RpbGwgdmFsaWQgYW5kIG1pZ2h0IHJldXNlIGl0LgorCSAgSSByYW4gaW50byB0aGlzIHByb2JsZW0gd2hlbiB0cmFuc2NvZGluZyBhbiBBVkkgKHdpdGggbXAzIGluc2lkZSkKKwkgIHRvIGdwcC4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Mzk1NTUKKworMjAxMS0wMS0xMyAxNjoyNzowNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6CisJICBkb2NzOiBtaW5vciBiYXNlcGFyc2UgZG9jcy9jb21tZW50IGZpeGVzCisJICBSZW1vdmUgY29weSduJ3Bhc3RlIGxlZnRvdmVycy4KKworMjAxMC0xMS0wOCAxOTo1ODozMSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IGluY3JlYXNlIGtleWZyYW1lIGF3YXJlbmVzcworCSAgLi4uIHdoaWNoIGlzIG5vdCBwYXJ0aWN1bGFyIHJlbGV2YW50IGZvciBhdWRpbyBwYXJzaW5nLCBidXQgbW9yZSBzbworCSAgaW4gdmlkZW8gY2FzZXMuICBJbiBwYXJ0aWN1bGFyLCBhdXRvLWRldGVybWluZSBpZiBkZWFsaW5nIHdpdGggdmlkZW8gKGNhcHMpLgorCisyMDEwLTExLTMwIDE1OjQxOjAyICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogYXZvaWQgdW5leHBlY3RlZCBzdHJheSBtZXRhZGF0YQorCisyMDEwLTExLTMwIDE1OjQwOjI4ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogdXNlIHByb3BlciBfTk9ORSBvdXRwdXQgdmFsdWUgd2hlbiBhcHBsaWNhYmxlCisKKzIwMTAtMTEtMjUgMTg6NTY6NDIgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6CisJICBhdWRpb3BhcnNlcnM6IFJlbW92ZSBkZWFkIGFzc2lnbm1lbnRzCisKKzIwMTAtMTEtMjUgMTc6MTQ6MjMgKzAxMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8YW1vcmFsZXNAZmx1bW90aW9uLmNvbT4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkgIGF1ZGlvcGFyc2U6IGZpeCBwb3NzaWJsZSBkaXZpc2lvbi1ieS16ZXJvCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM1Nzg2CisKKzIwMTAtMTEtMTcgMTY6MjM6NDIgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiB1c2UgY29ycmVjdCBvZmZzZXQgd2hlbiBhZGRpbmcgaW5kZXggZW50cnkKKwkgIC4uLiBiZWFyaW5nIGluIG1pbmQgdGhhdCBCVUZGRVJfT0ZGU0VUIGlzIG1lZGlhIHNwZWNpZmljIGFuZCBtYXkgbm90CisJICByZWZsZWN0IHRoZSBiYXNpYyBvZmZzZXQgYWZ0ZXIgaGF2aW5nIGJlZW4gcGFyc2VkLgorCisyMDEwLTExLTE3IDE0OjMwOjA5ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogZW5oYW5jZW1lbnRzIGZvciB0aW1lc3RhbXAgbWFya2VkIGZyYW1lZCBmb3JtYXRzCisJICBUaGF0IGlzLCBhcyBzdWNoIGZvcm1hdHMgYWxsb3cgc3ViY2xhc3MgdG8gZXh0cmFjdCBwb3NpdGlvbiBmcm9tIGZyYW1lLAorCSAgaXQgaXMgcG9zc2libGUgdG8gZXh0cmFjdCBkdXJhdGlvbiAoaWYgbm90IG90aGVyd2lzZSBwcm92aWRlZCkKKwkgIGZyb20gKG5lYXIpIGxhc3QgZnJhbWUsIGFuZCBhIHNlZWsgY2FuIGZhaXJseSBhY2N1cmF0ZWx5IHRhcmdldCB0aGUgcmVxdWlyZWQKKwkgIHBvc2l0aW9uLgorCSAgRml4ZXMgIzYzMTM4OS4KKworMjAxMC0xMS0xNiAxNzowNjoxNCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IHJlZmFjdG9yIGZyYW1lIHNjYW5uaW5nIHBlZm9ybWVkIGJ5IF9sb29wCisKKzIwMTAtMTEtMTYgMTg6MDQ6MDAgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBzbGlnaHRseSBvcHRpbWl6ZSBzZW5kaW5nIG9mIHBlbmRpbmcgbmV3c2VnbWVudCBldmVudHMKKworMjAxMC0xMS0xNiAxNzowNDozNSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IG1pbm9yIGZpeGVzIGFuZCBlbmhhbmNlbWVudHMKKwkgIEFycmFuZ2UgZm9yIHVwc3RyZWFtIGFzIHdlbGwgYXMgZG93bnN0cmVhbSBmbHVzaGluZyB3aGVuIHNlZWtpbmcuCisJICBBbHNvIGRldGVybWluZSB1cHN0cmVhbSBzaXplIGFzIHdlbGwgYXMgc2Vla2FiaWxpdHkuICBBZGp1c3Qgc29tZSBjb21tZW50cworCSAgdG8gcmVhbGl0eSBhbmQgZW1wbG95IGRlYnVnIHN0YXRlbWVudCBpbiBwcm9wZXIgb3JkZXIuCisKKzIwMTAtMTAtMjkgMTQ6MDg6NTggKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiB1c2Ugb25seSB1cHN0cmVhbSBkdXJhdGlvbiBpZiBpdCBwcm92aWRlcyBvbmUKKworMjAxMC0xMC0yNSAxNDoxNTo1MCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IHJlZmxvdyB1cGRhdGVfYml0cmF0ZSBjb2RlCisJICAuLi4gd2hpY2ggbWFrZXMgbG9jYWwgdmFyaWFibGVzIHJlcHJlc2VudCByZWFsIHN0YXRlIGJldHRlciwgYW5kIGF2b2lkcworCSAgdHJpZ2dlcmluZyB1bm5lZWRlZCB1cGRhdGVzL2FjdGlvbnMuCisKKzIwMTAtMTAtMjUgMTQ6MTM6NTEgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBhZGQgc29tZSBkZWJ1ZyBzdGF0ZW1lbnRzCisKKzIwMTAtMTAtMTEgMTc6NDk6NDYgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBwZXJmb3JtIGJpdHJhdGUgaGFuZGxpbmcgYW5kIHBvc3RpbmcgYWZ0ZXIgbmV3c2VnbWVudCBzZW5kaW5nCisKKzIwMTAtMTAtMTEgMTc6MzY6MTkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBpbW1lZGlhdGVseSBwb3N0IHN1YmNsYXNzIHByb3ZpZGVkIGJpdHJhdGUKKworMjAxMC0xMC0wNSAxMToxNzo1MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6CisJICBSZXZlcnQgImJhc2VwYXJzZTogYWRkIHNraXAgcHJvcGVydHkiCisJICBUaGlzIHJldmVydHMgY29tbWl0IGI1YTNkNjAzNjNkODM3YTEwZjA1MzNjMTQxZWM5M2QxMGI3NDIzMTIuCisJICBSZXZlcnRpbmcgdGhpcyBmb3Igbm93LCBzaW5jZSBubyBvbmUgcmVhbGx5IHNlZW1zIHRvIHJlbWVtYmVyIHdoeSB0aGlzCisJICBwcm9wZXJ0eSBleGlzdHMgb3Igd2hhdCBpdCBjb3VsZCBwb3NzaWJseSBiZSBnb29kIGZvci4gSXQgc2VlbXMgdG8gaGF2ZQorCSAgYmVlbiBpbiB0aGUgb3JpZ2luYWwgbXAzcGFyc2Ugc2luY2UgdGhlIGJlZ2lubmluZyBvZiB0aW1lIGFuZCB3YXMgYmFjay0KKwkgIHBvcnRlZCBmcm9tIHRoZXJlLgorCisyMDEwLTEwLTAzIDIzOjUwOjI5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkgIGF1ZGlvcGFyc2VyOiBMZXQgdGhlIGZvcm1hdCBzdHJpbmcgYWdyZWUgd2l0aCB0aGUgcGFyYW1ldGVycyB0byBmaXggY29tcGlsZXIgd2FybmluZworCisyMDEwLTA5LTIyIDE1OjQ0OjQzICswNTMwICBBcnVuIFJhZ2hhdmFuIDxhcnVuLnJhZ2hhdmFuQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogRml4IGRlYnVnIG91dHB1dAorCSAgV2UgbG9zZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBidWZmZXIgYWZ0ZXIgZ3N0X3BhZF9wdXNoKCksIHNvIHRoZSBkZWJ1ZworCSAgcHJpbnQgc2hvdWxkIGhhcHBlbiBiZWZvcmUuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIyMjc2CisKKzIwMTAtMDktMjkgMTY6MTI6NDIgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBzdXBwb3J0IHJldmVyc2UgcGxheWJhY2sKKwkgIC4uLiBpbiBwdWxsIG1vZGUgb3IgdXBzdHJlYW0gZHJpdmVuLgorCisyMDEwLTA5LTI3IDEyOjE2OjQzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogcmVtb3ZlIGRvbmUgVE9ET3MgYW5kIHVwZGF0ZSBkb2N1bWVudGF0aW9uCisKKzIwMTAtMDktMjUgMTQ6NDA6NTQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiB1c2UgZGV0ZXJtaW5lZCBzZWVrYWJpbGl0eSBpbiBhbnN3ZXJpbmcgU0VFS0lORyBxdWVyeQorCisyMDEwLTA5LTI1IDE0OjMyOjA2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogYWRkIHNraXAgcHJvcGVydHkKKworMjAxMC0wOS0yMiAxNTowNzowOSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6CisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5oOgorCSAgYmFzZXBhcnNlOiB1c2UgX3NldF9mcmFtZV9wcm9wcyB0byBjb25maWd1cmUgZnJhbWUgbGVhZF9pbiBhbmQgbGVhZF9vdXQKKwkgIC4uLiBwcm92aWRlZCBhIGNvcnJlc3BvbmRpbmcgZGVjb2RlciB3aXRoIHN1ZmZpY2llbnQgbGVhZGluZyBhbmQgZm9sbG93aW5nCisJICBmcmFtZXMgdG8gY2Fycnkgb3V0IGZ1bGwgZGVjb2RpbmcgZm9yIGEgcGFydGljdWxhciBzZWdtZW50LgorCisyMDEwLTA5LTIyIDE0OjEzOjE3ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmg6CisJICBiYXNlcGFyc2U6IHVzZSBfc2V0X2R1cmF0aW9uIHRvIGNvbmZpZ3VyZSBkdXJhdGlvbiB1cGRhdGUgaW50ZXJ2YWwKKwkgIC4uLiBhcyBpdCBsb2dpY2FsbHkgYmVsb25ncyB0aGVyZSBhcyBvbmUgb3IgdGhlIG90aGVyOyBlaXRoZXIgc3ViY2xhc3MKKwkgIGNhbiBwcm92aWRlIGEgZHVyYXRpb24sIG9yIGFuIGVzdGltYXRlIG11c3QgYmUgbWFkZSAocmVndWFybHkgdXBkYXRlZCkuCisKKzIwMTAtMDktMjIgMTM6NTU6MjAgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBsb2NhbGl6ZSB1c2Ugb2YgcHJvdmlkZWQgZnBzIGluZm9ybWF0aW9uCisKKzIwMTAtMDktMjIgMTI6MTM6MTIgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBzZWVrIHRhYmxlIGFuZCBhY2N1cmF0ZSBzZWVrIHN1cHBvcnQKKworMjAxMC0wOS0yMSAxMzo1NzoxMCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IHByb3BlciBhbmQgbW9yZSBleHRlbmRlZCBzZWdtZW50IGFuZCBzZWVrIGhhbmRsaW5nCisJICBUaGF0IGlzLCBsb29wIHBhdXNlIGhhbmRsaW5nLCBzZWdtZW50IHNlZWsgc3VwcG9ydCwgbmV3c2VnbWVudCBmb3IgZ2FwcywgZXRjCisKKzIwMTAtMDktMjEgMTA6NTc6MDQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuaDoKKwkgIGJhc2VwYXJzZTogYWRkIGluZGV4IHN1cHBvcnQKKworMjAxMC0wOS0yMSAwOTo1OTo1NiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IHJlZmFjdG9yIHN0YXRlIHJlc2V0CisKKzIwMTAtMDktMjAgMTY6Mzk6MzcgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBwcmV2ZW50IGluZGVmaW5pdGUgcmVzeW5jaW5nCisKKzIwMTAtMDktMjAgMTM6NTc6NTUgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBzcGVjaWZpYyBFT1MgaGFuZGxpbmcgaWYgbm8gb3V0cHV0IHNvIGZhcgorCisyMDEwLTA5LTIwIDEzOjMxOjU3ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogYWRqdXN0IF9zZXRfZnJhbWVfcHJvcCBkb2N1bWVudGF0aW9uIGFuZCBzZXQgZGVmYXVsdCBhcyBjbGFpbWVkCisKKzIwMTAtMDktMjAgMTM6MzA6NTQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBmaXggYml0cmF0ZSBjb3B5LWFuZC1wYXN0ZSBhbmQgdXBkYXRlIGhldXJpc3RpYworCisyMDEwLTA5LTE3IDE4OjMzOjI5ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogcG9zdCBkdXJhdGlvbiBtZXNzYWdlIGlmIGF2ZXJhZ2UgYml0cmF0ZXMgaXMgdXBkYXRlZAorCisyMDEwLTA5LTE3IDE4OjI0OjIyICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmg6CisJICBiYXNlcGFyc2U6IHJlbW92ZSBpc19zZWVrYWJsZSB2bWV0aG9kIGFuZCB1c2UgYSBzZXRfc2VlayBpbnN0ZWFkCisJICBTZWVrYWJpbGl0eSwgbGlrZSBkdXJhdGlvbiwgZXRjIGlzIHVubGlrZWx5IHRvIGNoYW5nZSAoZnJlcXVlbnRseSksIGFuZAorCSAgdGhlIGRlZmF1bHQgYXNzdW1wdGlvbiBjb3ZlcnMgbW9zdCBjYXNlcywgc28gbGV0IHN1YmNsYXNzIHNldCB3aGVuIG5lZWRlZC4KKwkgIEF0IHRoZSBzYW1lIHRpbWUsIGFsbG93IHN1YmNsYXNzIHRvIGluZGljYXRlIGlmIGl0IGhhcyBzZWVrLW1ldGFkYXRhICh0YWJsZSkKKwkgIGF2YWlsYWJsZSwgYW5kIHBvc3NpYmx5IGhhdmUgaXQgcHJvdmlkZSBhbiBhdmVyYWdlIGJpdHJhdGUuCisKKzIwMTAtMDktMTcgMTc6MjE6NDYgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuaDoKKwkgIGJhc2VwYXJzZTogYWRkIGFub3RoZXIgaG9vayBmb3Igc3ViY2xhc3MgcHJpb3IgdG8gcHVzaGluZyBidWZmZXIKKwkgIC4uLiBhbmQgYWxsb3cgc3ViY2xhc3MgdG8gcGVyZm9ybSBjdXN0b20gc2VnbWVudCBjbGlwcGluZywgb3IgdG8KKwkgIGVtaXQgdGFncyBvciBtZXNzYWdlcyBhdCB0aGlzIHRpbWUuCisKKzIwMTAtMDktMTcgMTc6MTk6MzcgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiAwIGNvbnZlcnRzIHRvIDAgYnkgZGVmYXVsdAorCisyMDEwLTA5LTE2IDE4OjU2OjQ2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmg6CisJICBiYXNlcGFyc2U6IHJlZmFjdG9yIGNvbnZlcnNpb24gdXNpbmcgaGVscGVyIGZ1bmN0aW9uIGFuZCBleHBvcnQgZGVmYXVsdCBjb252ZXJ0CisKKzIwMTAtMDktMTYgMTg6MzU6NDcgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBzdHJlYW1saW5lIHF1ZXJ5IGhhbmRsaW5nCisKKzIwMTAtMDktMTYgMTE6NTE6MjAgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuaDoKKwkgIGJhc2VwYXJzZTogY2xlYW51cCBzdHJ1Y3QgYW5kIHJlbW92ZSB1bnVzZWQgbWVtYmVyCisKKzIwMTAtMDktMjIgMTY6MDc6MjQgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBBbGxvdyBjaGFpbmluZyBvZiBzdWJjbGFzcyBldmVudCBoYW5kbGVycworCSAgVGhpcyBhbGxvd3MgdGhlIGNoaWxkIGNsYXNzIHRvIGNoYWluIGl0cyBldmVudCBoYW5kbGVyIHdpdGgKKwkgIEdzdEJhc2VQYXJzZSwgc28gdGhhdCBzdWJjbGFzc2VzIGRvbid0IGhhdmUgdG8gZHVwbGljYXRlIGFsbCB0aGUgZGVmYXVsdAorCSAgZXZlbnQgaGFuZGxpbmcgbG9naWMuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIyMjc2CisKKzIwMTAtMDgtMjcgMTg6MzU6MTAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBEb24ndCB1c2UgR1NUX0ZMT1dfSVNfRkFUQUwoKQorCSAgQWxzbyBkb24ndCBwb3N0IGFuIGVycm9yIG1lc3NhZ2UgZm9yIFVORVhQRUNURUQgYW5kIGRvIGl0CisJICBmb3IgTk9UX0xJTktFRC4KKworMjAxMC0wOS0wNiAxNDoxMjowMCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IG5vbi1USU1FIHNlZWsgZXZlbnQgaXMgc2ltcGx5IG5vdCBoYW5kbGVkCisKKzIwMTAtMDYtMTUgMTU6MzQ6MDUgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBmaXggc2VlayBldmVudCByZWYgaGFuZGxpbmcKKworMjAxMC0wNi0xNSAxNTozMzozNyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IHByZXZlbnQgYXJpdGhtZXRpYyBvdmVyZmxvd3MgaW4gcHVsbCBtb2RlIGJ1ZmZlciBjYWNoZSBoYW5kbGluZworCisyMDEwLTA2LTE1IDE1OjMyOjM0ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogZml4IHNlZWsgaGFuZGxpbmcKKwkgIEFsbG93IGEgZmV3IG1vcmUgc2VlayBldmVudCB0eXBlIGNvbWJpbmF0aW9ucywgYW5kIHJlYWxseSB1c2UgdGhlIHJlc3VsdAorCSAgb2YgZ3N0X3NlZ21lbnRfc2V0X3NlZWsgdG8gcGVyZm9ybSB0aGUgc2Vlay4gIEFsc28gYWRkIHNvbWUgZGVidWcuCisKKzIwMTAtMDMtMjYgMTg6NTY6NDkgKzAwMDAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBEb24ndCBlbWl0IGJpdHJhdGUgdGFncyB0b28gZWFybHkKKwkgIFdlIHdhaXQgdG8gcGFyc2UgYSBtaW5pbXVtIG51bWJlciBvZiBmcmFtZXMgKDEwLCBhcmJpdHJhcmlseSkgYmVmb3JlCisJICBlbWl0aW5nIGJpdHJhdGUgdGFncyBzbyB0aGF0IG91ciBlYXJseSBlc3RpbWF0ZXMgYXJlIG5vdCB3aWxkbHkKKwkgIGluYWNjdXJhdGUgZm9yIHN0cmVhbXMgdGhhdCBzdGFydCB3aXRoIGEgc2lsZW5jZS4gSWYgdGhlIHN0cmVhbSBlbmRzCisJICBiZWZvcmUgdGhhdCwgd2UganVzdCBlbWl0IHRoZSB0YWdzIGFueXdheS4KKwkgIFdoaWxlIGl0IF93b3VsZF8gYmUgbmljZXIgdG8gYmUgc3BlY2lmeSB0aGUgdGhyZXNob2xkIHRvIHN0YXJ0IHB1c2hpbmcKKwkgIHRoZSB0YWdzIGluIHRlcm1zIG9mIGR1cmF0aW9uLCB0aGlzIHdvdWxkIGludHJvZHVjZSBtb3JlIGNvbXBsZXhpdHkgdGhhbgorCSAgdGhpcyBtZXJpdHMuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE0OTkxCisKKzIwMTAtMDMtMjYgMTg6MjA6MjQgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBTZXQgdGhlIGxhc3Qgc3RvcCB0byB0aGUgYnVmZmVyIHN0YXJ0dGltZSBpZiB0aGUgZHVyYXRpb24gaXMgaW52YWxpZAorCSAgLi4uaW5zdGVhZCBvZiBub3Qgc2V0dGluZyBpdCBhdCBhbGwuCisKKzIwMTAtMDMtMjYgMTg6MTk6MDAgKzAxMDAgIEpvc2h1YSBNLiBEb2UgPGpvc2hAam9zaGRvZS5jb20+CisKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IFNlbmQgTkVXU0VHTUVOVCBldmVudCB3aXRoIGNvcnJlY3Qgc3RhcnQgYW5kIHBvc2l0aW9uCisJICBJbnN0ZWFkIG9mIHRha2luZyB0aGUgbGFzdCBzdG9wICh3aGljaCBjb3VsZCBiZSBidWZmZXIgZW5kdGltZSBpbnN0ZWFkCisJICBvZiBzdGFydHRpbWUpIGFsd2F5cyB0YWtlIHRoZSBidWZmZXIgc3RhcnR0aW1lLgorCSAgRml4ZXMgYnVnICM2MTQwMTYuCisKKzIwMTAtMDMtMjUgMTc6MDk6MTcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuaDoKKwkgIGF1ZGlvcGFyc2VyczogcmVtb3ZlIHVudXNlZCBHc3RCYXNlUGFyc2VDbGFzc1ByaXZhdGUgc3RydWN0dXJlCisKKzIwMTAtMDMtMjUgMTE6MjI6NTggKzAwMDAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuaDoKKwkgIGF1ZGlvcGFyc2VyczogQWRkIGJpdHJhdGUgY2FsY3VsYXRpb24gdG8gYmFzZXBhcnNlCisJICBUaGlzIG1ha2VzIGJhc2VwYXJzZSBrZWVwIGEgcnVubmluZyBhdmVyYWdlIG9mIHRoZSBzdHJlYW0gYml0cmF0ZSwgYXMKKwkgIHdlbGwgYXMgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gYml0cmF0ZXMuIFN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIGEKKwkgIHZmdW5jIHRvIG1ha2Ugc3VyZSB0aGF0IHBlci1mcmFtZSBvdmVyaGVhZCBmcm9tIHRoZSBjb250YWluZXIgaXMgbm90CisJICBhY2NvdW50ZWQgZm9yIGluIHRoZSBiaXRyYXRlIGNhbGN1bGF0aW9uLgorCSAgV2UgdGFrZSBjYXJlIG5vdCB0byBvdmVycmlkZSB0aGUgYml0cmF0ZSwgbWluaW11bS1iaXRyYXRlLCBhbmQKKwkgIG1heGltdW0tYml0cmF0ZSB0YWdzIGlmIHRoZXkgaGF2ZSBiZWVuIHBvc3RlZCB1cHN0cmVhbS4gV2UgYWxzbworCSAgcmF0ZS1saW1pdCB0aGUgZW1pc3Npb24gb2YgYml0cmF0ZSBzbyB0aGF0IGl0IGlzIG9ubHkgdHJpZ2dlcmVkIGJ5IGEKKwkgIGNoYW5nZSBvZiA+MTAga2Jwcy4KKworMjAxMC0wMS0xNCAxMTo1MDozMyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6CisJICBhdWRpb3BhcnNlcnM6IHJlbmFtZSBiYXNlcGFyc2UgR1R5cGUgbmFtZSB0byBhdm9pZCBwb3NzaWJsZSBjb25mbGljdHMKKworMjAxMC0wMS0wNSAxNTowNTowNSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6CisJICBhdWRpb3BhcnNlcnM6IGRvY3VtZW50YXRpb24gZml4ZXMKKworMjAwOS0xMi0yMSAxODoxODozOSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IGFkanVzdCBzZWVrIGhhbmRsaW5nIGFuZCBuZXdzZWdtZW50IHNlbmRpbmcKKwkgIFBlcmZvcm0gc2FuaXR5IGNoZWNrIG9uIHR5cGUgb2Ygc2VlaywgYW5kIG9ubHkgcGVyZm9ybSBvbmUgdGhhdCBpcworCSAgYXBwcm9wcmlhdGVseSBzdXBwb3J0ZWQuICBBZGp1c3QgZG93bnN0cmVhbSBuZXdzZWdtZW50IGV2ZW50CisJICB0byBmaXJzdCBidWZmZXIgdGltZXN0YW1wIHRoYXQgaXMgc2VudCBkb3duc3RyZWFtLgorCisyMDA5LTEyLTIxIDExOjU5OjQ1ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogbWlub3IgcmVmYWN0b3IgY2xlYW51cAorCSAgQWxzbyBhZGQgc29tZSBkZWJ1ZyBsb2dnaW5nLgorCisyMDA5LTEyLTE4IDIxOjAyOjQwICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogaW1wbGVtZW50IGxlZnRvdmVyIGRyYWluaW5nIGluIHB1bGwgbW9kZQorCisyMDA5LTEyLTE2IDE4OjM4OjMzICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogcHJvdmlkZSBkZWZhdWx0IGNvbnZlcnNpb24gdXNpbmcgYnBzIGlmIG5vIGZwcyBhdmFpbGFibGUKKwkgIEFsc28gc3RvcmUgZXN0aW1hdGVkIGR1cmF0aW9uIGFzIHN1Y2gsIHJhdGhlciB0aGFuIHByZXRlbmRpbmcgb3RoZXJ3aXNlCisJICAoZS5nLiBzZXQgYnkgc3ViY2xhc3MpLgorCisyMDA5LTEyLTE4IDEzOjMwOjI5ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogY2hlY2sgZm9yIHJlbWFpbmluZyBkYXRhIHdoZW4gZHJhaW5pbmcgaW4gcHVzaCBtb2RlCisKKzIwMDktMTItMTggMTM6MzA6MDcgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBmaXggcHVsbCBtb2RlIGNhY2hlIHNpemUgY29tcGFyaXNvbgorCisyMDA5LTEyLTExIDEwOjI1OjE2IC0wODAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAc29uZ2JpcmRuZXN0LmNvbT4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkgIGF1ZGlvcGFyc2U6IGZpeCBhIGZvcm1hdCBzdHJpbmcgYXMgcmVwb3J0ZWQgb24gaXJjLgorCisyMDA5LTEwLTI5IDE1OjE4OjM3ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmg6CisJICBiYXNlcGFyc2U6IGN1c3RvbSBidWZmZXJmbGFnIGluZGljYXRlcyBub3QgdG8gY291bnQgZnJhbWUgaW4gc3RhdHMKKworMjAwOS0xMS0yNyAxNzoyNzozMiArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6CisJICBhdWRpb3BhcnNlcnM6IHJlZmVyZW5jZSBHc3RCYXNlUGFyc2Ugbm93IGxpdmVzIGhlcmUKKworMjAwOS0xMS0yOCAxODoxMzozMSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuYzoKKwkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuaDoKKwkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6CisJKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5oOgorCSAgYXVkaW9wYXJzZXJzOiByZW5hbWUgJ2FhY3BhcnNlJyBwbHVnaW4gdG8gZ2VuZXJpYyAnYXVkaW9wYXJzZXJzJyBwbHVnaW4KKworMjAwOS0xMC0yOSAxNjowNTowMCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogcmVzZXQgcGFzc3Rocm91Z2ggbW9kZSB0byBkZWZhdWx0IChkaXNhYmxlZCkgb24gYWN0aXZhdGlvbgorCisyMDA5LTEwLTI5IDE1OjE2OjU5ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2FhY3BhcnNlL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBlbnN1cmUgYnVmZmVyIG1ldGFkYXRhIGlzIHdyaXRhYmxlCisKKzIwMDktMTAtMjggMTQ6MDY6MTMgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmM6CisJKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmg6CisJICBiYXNlcGFyc2U6IGZpeC9lbmhhbmNlIERJU0NPTlQgbWFya2luZworCSAgSW4gcGFydGljdWxhciwgY29uc2lkZXIgRElTQ09OVCA9PSAhc3luYywgYW5kIGFsbG93IHN1YmNsYXNzIHRvIHF1ZXJ5CisJICBzeW5jIHN0YXRlLCBhcyBpdCBtYXkgd2FudCB0byBwZXJmb3JtIGFkZGl0aW9uYWwgY2hlY2tzIGRlcGVuZGluZworCSAgb24gd2hldGhlciBzeW5jIHdhcyBhY2hpZXZlZCBlYXJsaWVyIG9uLgorCSAgQWxzbyBhcnJhbmdlIGZvciBzdWJjbGFzcyB0byBxdWVyeSB3aGV0aGVyIGxlZnRvdmVyIGRhdGEgaXMgYmVpbmcgZHJhaW5lZC4KKworMjAwOS0xMS0yMyAxNTo0ODoyNSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuYzoKKwkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuaDoKKwkgIGJhc2VwYXJzZTogYWRkIHRpbWVzdGFtcCBoYW5kbGluZywgYW5kIGRlZmF1bHQgY29udmVyc2lvbgorCSAgSW4gcGFydGljdWxhciwgKG9wdGlvbmFsbHkpIHByb3ZpZGUgYmFzZXBhcnNlIHdpdGggYSBub3Rpb24gb2YgZnJhbWVzIHBlciBzZWNvbmQKKwkgIChhbmQgdGhlcmVmb3JlIGFsc28gZnJhbWUgZHVyYXRpb24pIGFuZCBoYXZlIGl0IHRyYWNrIGZyYW1lIGFuZCBieXRlIGNvdW50cy4KKwkgIFRoaXMgd2F5LCBzdWJjbGFzcyBjYW4gcHJvdmlkZSBiYXNlcGFyc2Ugd2l0aCBmcHMgYW5kIGhhdmUgaXQgcHJvdmlkZSBkZWZhdWx0CisJICBidWZmZXIgdGltZSBtZXRhZGF0YSBhbmQgY29udmVyc2lvbnMsIHRob3VnaCBzdWJjbGFzcyBjYW4gc3RpbGwgaW5zdGFsbAorCSAgY2FsbGJhY2tzIHRvIGhhbmRsZSBzdWNoIGl0c2VsZi4KKworMjAwOS0xMC0yOCAxMjowMjowMyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogZG9jdW1lbnRhdGlvbiBmaXhlcworCisyMDA5LTEwLTI4IDEyOjAwOjA4ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2FhY3BhcnNlL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiB1c2VfZml4ZWRfY2FwcyBmb3Igc3JjIHBhZAorCSAgQWZ0ZXIgYWxsLCBzdHJlYW0gaXMgYXMtaXMsIGFuZCB0aGVyZSBpcyBsaXR0bGUgbW9sZGluZyB0byBkb3duc3RyZWFtJ3MKKwkgIHRhc3RlIHRoYXQgY2FuIGJlIGRvbmUuICBJZiBzdWJjbGFzcyBjYW4gYW5kIHdhbnRzIHRvIGRvIHNvLCBpdCBjYW4KKwkgIHN0aWxsIG92ZXJyaWRlIGFzIHN1Y2guCisKKzIwMDktMTEtMjAgMTc6MzI6MTMgKzAxMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBmbHVlbmRvLmNvbT4KKworCSogZ3N0L2FhY3BhcnNlL2dzdGJhc2VwYXJzZS5jOgorCSAgYWFjcGFyc2U6IEZpeCBjb21waWxhdGlvbiB3YXJuaW5ncworCisyMDA5LTEwLTExIDExOjIyOjExICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+CisKKwkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuYzoKKwkgIGFhY3BhcnNlOiBmaXggd2FybmluZ3MgaW4gbWFjb3N4IHNub3cgbGVvcGFyZAorCisyMDA5LTA5LTI1IDE3OjAyOjUzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2FhY3BhcnNlL2dzdGJhc2VwYXJzZS5jOgorCSogZ3N0L2FhY3BhcnNlL2dzdGJhc2VwYXJzZS5oOgorCSAgYWFjcGFyc2U6IGZvcmVnbyAoYm9ndXMpIHBhcnNpbmcgb2YgYWxyZWFkeSBwYXJzZWQgKHJhdykgaW5wdXQKKworMjAwOS0wOC0wNyAxMzowNzoxNyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogcHJldmVudCBpbmZpbml0ZSBsb29wIHdoZW4gZHJhaW5pbmcKKworMjAwOS0wOC0wNyAxMzowNjoyOCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogZml4IG1pbm9yIG1lbW9yeSBsZWFrCisKKzIwMDktMDctMTQgMTQ6MDg6MDQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmM6CisJKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmg6CisJICBhYWNwYXJzZTogQWRkIGZ1bmN0aW9uIGZvciB0aGUgYmFzZXBhcnNlIHN1YmNsYXNzIHRvIHB1c2ggYnVmZmVycyBkb3duc3RyZWFtCisJICBBbHNvIGhhbmRsZSB0aGUgY2FzZSBncmFjZWZ1bGx5IHdoZXJlIHRoZSBzdWJjbGFzcyBkZWNpZGVzIHRvIGRyb3AKKwkgIHRoZSBmaXJzdCBidWZmZXJzIGFuZCBoYXMgbm8gY2FwcyBzZXQgeWV0LiBJdCdzIHN0aWxsIHJlcXVpcmVkIHRvCisJICBoYXZlIHZhbGlkIGNhcHMgc2V0IHdoZW4gdGhlIGZpcnN0IGJ1ZmZlciBzaG91bGQgYmUgcGFzc2VkIGRvd25zdHJlYW0uCisKKzIwMDktMDctMTQgMTQ6MDc6NDQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IEZpeCBzZWVrIGV2ZW50IGxlYWtpbmcKKworMjAwOS0wNi0wMSAxMzo1NjoxOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogcHJvcGFnYXRlIHJldHVybiB2YWx1ZSBvZiBHc3RCYXNlUGFyc2U6OnNldF9zaW5rX2NhcHMoKQorCSAgZ3N0X2Jhc2VfcGFyc2Vfc2lua19zZXRjYXBzKCkgcHJlc3VtYWJseSBzaG91bGQgZmFpbCBpZiB0aGUgc3ViY2xhc3MKKwkgIHJldHVybnMgRkFMU0UgZnJvbSBpdHMgOjpzZXRfc2lua19jYXBzKCkgZnVuY3Rpb24uCisKKzIwMDktMDYtMDEgMTM6NDc6MDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IGRvbid0IHRyeSB0byBHU1RfTE9HIGFuIGFscmVhZHktZnJlZWQgY2FwcyBzdHJpbmcKKwkgIFRoZSBwcm9wZXIgd2F5IHRvIGxvZyBjYXBzIGlzIHZpYSBHU1RfUFRSX0ZPUk1BVCBhbnl3YXkuCisKKzIwMDktMDUtMjYgMTk6NDM6NTMgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IGZpeCBkZWJ1ZyBjYXRlZ29yeQorCisyMDA5LTA0LTI3IDIyOjM5OjE1ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2FhY3BhcnNlL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBmaXggKHJlZ3Jlc3Npb24gaW4pIG5ld3NlZ21lbnQgaGFuZGxpbmcKKwkgIChhYWNwYXJzZSwgYW1ycGFyc2UsIGZsYWNwYXJzZSkuICBGaXhlcyAjNTgwMTMzLgorCisyMDA5LTA0LTA3IDA0OjUzOjAyICswMzAwICBSZW7DqSBTdGFkbGVyIDxtYWlsQHJlbmVzdGFkbGVyLmRlPgorCisJKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IEZpeCBzbGlnaHRseSBicm9rZW4gYnVmZmVyLWluLXNlZ21lbnQgY2hlY2sgKGFhY3BhcnNlLCBhbXJwYXJzZSwgZmxhY3BhcnNlKQorCisyMDA5LTA0LTA1IDAzOjUwOjE5ICswMzAwICBSZW7DqSBTdGFkbGVyIDxtYWlsQHJlbmVzdGFkbGVyLmRlPgorCisJKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmM6CisJICBiYXNlcGFyc2U6IEZpeCBwdXNoIG1vZGUgc2Vla2luZyAoYWFjcGFyc2UsIGFtcnBhcnNlKQorCSAgU2VuZGluZyB0aGUgZmx1c2gtc3RhcnQgZXZlbnQgZm9yd2FyZCBiZWZvcmUgdGFraW5nIHRoZSBzdHJlYW0gbG9jayBhY3R1YWxseQorCSAgd29ya3MsIGluIGNvbnRyYXN0IHRvIGRlYWRsb2NraW5nIGluIGRvd25zdHJlYW0gcHJlcm9sbF93YWl0IChodW5rIDEpLgorCSAgQWZ0ZXIgdGhhdCB3ZSBnZXQgdGhlIGNoYWluIGZ1bmN0aW9uIGJlaW5nIHN0dWNrIGluIGEgYnVzeSBsb29wLiBUaGlzIGlzIGZpeGVkCisJICBieSB1cGRhdGluZyB0aGUgbWluaW11bSBmcmFtZSBzaXplIGluc2lkZSB0aGUgc3luY2hyb25pemF0aW9uIGxvb3AgYmVjYXVzZSB0aGUKKwkgIHN1YmNsYXNzIGFza3MgZm9yIG1vcmUgZGF0YSBpbiB0aGlzIHdheSAoaHVuayAyKS4KKwkgIEZpbmFsbHksIHRoaXMgbGVhZHMgdG8gYSB2ZXJ5IHByb2JhYmxlIGNyYXNoIGJlY2F1c2UgdGhlIHN1YmNsYXNzIGNhbiBmaW5kIGEKKwkgIHZhbGlkIGZyYW1lIHdpdGggYSBzaXplIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudGx5IGF2YWlsYWJsZSBkYXRhIGluIHRoZQorCSAgYWRhcHRlci4gVGhpcyBtYWtlcyB0aGUgc3Vic2VxdWVudCBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciBjYWxsIHJldHVybiBOVUxMLAorCSAgd2hpY2ggaXMgbm90IGV4cGVjdGVkIChodW5rIDMpLgorCisyMDA5LTAzLTMxIDE2OjA3OjQ2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2FhY3BhcnNlL2dzdGJhc2VwYXJzZS5jOgorCSAgYmFzZXBhcnNlOiBEZWxheSBuZXdzZWdtZW50IGFzIGxvbmcgYXMgcG9zc2libGUuCisJICBJZiBuZXdzZWdtZW50IGlzIHNlbnQgKHRvbykgZWFybHksIGNhcHMgbWF5IG5vdCB5ZXQgYmUgZml4ZWQvc2V0LAorCSAgYW5kIGRvd25zdHJlYW0gbWF5IG5vdCBoYXZlIGJlZW4gbGlua2VkLgorCisyMDA5LTAyLTI3IDExOjI0OjM3ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogcmV2ZXJ0IGxhc3QgY2hhbmdlIGFuZCBwcm9wZXJseSBmaXgKKwkgIEJhc2VwYXJzZSBpbnRlcm5hbHkgYnJlYWtzIHRoZSBzZW1hbnRpY3Mgb2YgYSBfY2hhaW4gZnVuY3Rpb24gYnkgY2FsbGluZyBpdCB3aXRoCisJICBidWZmZXI9PU5VTEwuIFRoZSByZXNvbiBJIGJlbGl2ZWQgaXQgd2FzIG9rYXkgdG8gcmVtb3ZlIGl0IHdhcyB0aGF0IHRoZXJlIGlzCisJICBhbHNvIGFuIHVuY2hlY2tlZCBhY2Nlc3MgdG8gYnVmZmVyIGxhdGVyIGluIF9jaGFpbi4gQWN0dWFsbHkgdGhhdCBjb2RlIGlzIHdyb25nLAorCSAgYXMgaXQgbW9zdCBwcm9iYWJseSB3YW50cyB0byBzZXQgZGlzY29udCBvbiB0aGUgb3V0Z29pbmcgYnVmZmVyLgorCisyMDA5LTAyLTI2IDExOjAyOjA2ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuYzoKKwkgIGJhc2VwYXJzZTogcmVtb3ZlIGNoZWNrcyBmb3IgYnVmZmVyPT1OVUxMCisJICBBY2NvcmRpZm4gdG8gZG9jcyBmb3IgR3N0UGFkQ2hhaW5GdW5jdGlvbiBidWZmZXIgY2Fubm90IGJlIE5VTEwuIElmIHdlIHdvdWxkCisJICBsZWF2ZSB0aGUgY2hlY2ssIHdlIHdvdWxkIGFsc28gbmVlZCBtb3JlIHN1Y2ggY2hlY2sgYmVsb3cuCisKKzIwMDktMDEtMzAgMTg6MTg6MTAgKzAwMDAgIEphbiBTY2htaWR0IDxqYW4uc2NobWlkdEBzdW4uY29tPgorCisJKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmM6CisJICBGaXggdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZGVmYXVsdCBwYXJzZV9mcmFtZSBmdW5jdGlvbi4KKwkgIEZpeCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBkZWZhdWx0IHBhcnNlX2ZyYW1lIGZ1bmN0aW9uIGluIGJvdGgKKwkgIGNvcGllcyBvZiBHc3RCYXNlUGFyc2UKKworMjAwOC0xMS0xMyAxNDoyMTozOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvOiBGaXggYmFzZXBhcnNlIHR5cGUgbmFtZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmM6CisJICAqIGdzdC9hbXJwYXJzZS9nc3RiYXNlcGFyc2UuYzoKKwkgIEZpeCBiYXNlcGFyc2UgdHlwZSBuYW1lLgorCisyMDA4LTExLTEzIDEyOjU5OjM0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIEFkZCB0d28gbmV3IGJhc2VwYXJzZSBiYXNlZCBwYXJzZXJzIChhYWMgYW5kIGFtcikgZnJvbSBCdWcgIzUxODg1Ny4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICAqIGdzdC9hYWNwYXJzZS9NYWtlZmlsZS5hbToKKwkgICogZ3N0L2FhY3BhcnNlL2dzdGFhY3BhcnNlLmM6CisJICAqIGdzdC9hYWNwYXJzZS9nc3RhYWNwYXJzZS5oOgorCSAgKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmM6CisJICAqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuaDoKKwkgICogZ3N0L2FtcnBhcnNlL01ha2VmaWxlLmFtOgorCSAgKiBnc3QvYW1ycGFyc2UvZ3N0YW1ycGFyc2UuYzoKKwkgICogZ3N0L2FtcnBhcnNlL2dzdGFtcnBhcnNlLmg6CisJICAqIGdzdC9hbXJwYXJzZS9nc3RiYXNlcGFyc2UuYzoKKwkgICogZ3N0L2FtcnBhcnNlL2dzdGJhc2VwYXJzZS5oOgorCSAgQWRkIHR3byBuZXcgYmFzZXBhcnNlIGJhc2VkIHBhcnNlcnMgKGFhYyBhbmQgYW1yKSBmcm9tIEJ1ZyAjNTE4ODU3LgorCisyMDExLTAzLTIwIDAwOjU2OjA4ICswMTAwICBIYXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkB0YW5kYmVyZy5jb20+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZVsyXTogTWFrZSBzcmMgcXVlcnkgTVQtc2FmZQorCSAgSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgZWxlbWVudCBtaWdodCBiZSBnb2luZyBkb3duIHdoaWxlIHRoZSBldmVudCBhcnJpdmVzCisKKzIwMTEtMDMtMjAgMDA6NTY6MDggKzAxMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQHRhbmRiZXJnLmNvbT4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJICBiYXNlc3JjOiBNYWtlIHNyYyBxdWVyeSBNVC1zYWZlCisJICBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBlbGVtZW50IG1pZ2h0IGJlIGdvaW5nIGRvd24gd2hpbGUgdGhlIGV2ZW50IGFycml2ZXMKKworMjAxMS0wNC0wOCAxNDo1NjozNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZVsyXTogVW5yZWYgZXZlbnRzIGlmIHRoZSBwYXJlbnQgZWxlbWVudCBkaXNhcHBlYXJlZAorCisyMDExLTAzLTIxIDE2OjAxOjA1ICswMTAwICBIYXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkB0YW5kYmVyZy5jb20+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZVsyXTogTWFrZSB1cHN0cmVhbSBldmVudHMgTVQtc2FmZQorCisyMDExLTA0LTA4IDE0OjU1OjA5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIGJhc2U6IFVucmVmIGV2ZW50cyBpZiB0aGUgcGFyZW50IGVsZW1lbnQgZGlzYXBwZWFyZWQKKwkgIEFuZCBhbHNvIHVucmVmIGV2ZW50cyBpZiB0aGUgYmFzZXRyYW5zZm9ybSBzdWJjbGFzcyBoYXMgbm8KKwkgIGV2ZW50IGhhbmRsZXIgYW5kIHRoZSBldmVudCBpcyBub3QgZm9yd2FyZGVkIGF0IGFsbC4KKworMjAxMS0wMy0yMSAxNjowMTowNSArMDEwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAdGFuZGJlcmcuY29tPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYmFzZTogTWFrZSB1cHN0cmVhbSBldmVudHMgTVQtc2FmZQorCisyMDExLTAzLTI5IDExOjU3OjA2ICswMjAwICBTdGlhbiBTZWxuZXMgPHN0aWFzZWxuQGNpc2NvLmNvbT4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkgIGdzdHF1ZXVlLCBnc3RxdWV1ZTI6IGNoZWNrIGlmIHBhcmVudCBvZiBwYWQgaXMgTlVMTCBpbiBfZ2V0Y2FwcworCSAgUGFyZW50IG9mIHRoZSBwYWQgKHRoZSBxdWV1ZSkgbWF5IGJlIHNldCB0byBOVUxMIHdoaWxlIHRoZXJlIGlzCisJICBhIGJ1ZmZlciBhbGxvYyBnb2luZyBvbi4KKworMjAxMS0wNC0wOCAxNDo1MDoxMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSAgaW5wdXRzZWxlY3RvcjogRml4IGdldGNhcHMgYW5kIGV2ZW50IGZ1bmN0aW9uIGZyb20gbGFzdCBjb21taXQKKwkgIFJldHVybiBBTlkgY2FwcyBpZiB0aGUgcGFyZW50IGRpc2FwcGVhcmVkLCBpLmUuIHRoZSB0ZW1wbGF0ZSBjYXBzCisJICBhbmQgZG9uJ3QgbGVhayBldmVudHMgaWYgdGhlIHBhcmVudCBkaXNhcHBlYXJlZC4KKworMjAxMS0wNC0wMSAwODo0NjoxNCArMDIwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAdGFuZGJlcmcuY29tPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKKwkgIGlucHV0c2VsZWN0b3I6IFByb3RlY3QgYWdhaW5zdCBwYWQtcGFyZW50IGRpc2FwcGVhcmluZworCisyMDEwLTEyLTE0IDE2OjA2OjQ2ICswMTAwICBTdGlhbiBTZWxuZXMgPHN0aWFuLnNlbG5lc0B0YW5kYmVyZy5jb20+CisKKwkqIGdzdC9nc3RpdGVyYXRvci5jOgorCSAgaXRlcmF0b3I6IHJlc3luYyB0byBhdm9pZCBpbmZpbml0ZSBsb29wCisKKzIwMTEtMDQtMDggMDk6MjA6MjggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzoKKwkgIHV0aWxzOiBGaXggdW5pbml0aWFsaXplZCB2YXJpYWJsZSBjb21waWxlciB3YXJuaW5ncworCisyMDExLTA0LTA4IDA5OjE1OjEwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1cy5jOgorCSAgYnVzOiBSZW1vdmVkIHVudXNlZCBHQ29uZAorCisyMDExLTA0LTA4IDA5OjA3OjU5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6CisJICBtdWx0aXF1ZXVlOiBBZGQgYW5vdGhlciBjaGVjayBmb3IgdGhlIGZsdXNoaW5nIGZsYWcgYWZ0ZXIgdGFraW5nIHRoZSBsb2NrCisJICBUaGlzIHByZXZlbnRzIGFub3RoZXIgcG90ZW50aWFsIGRlYWRsb2NrIHdoZW4gZmx1c2hpbmcgdGhlIHBhZAorCSAgYXQgZXhhY3RseSB0aGUgcmlnaHQgdGltZS4KKworMjAxMS0wNC0wNyAxMToyNDozNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidXMuYzoKKwkgIGJ1czogSW1tZWRpYXRlbHkgZHJvcCBtZXNzYWdlcyBhZnRlciBjYWxsaW5nIHRoZSBzeW5jIGhhbmRsZXIgaWYgdGhpcyBpcyBhIHN5bmNocm9ub3VzIGJ1cworCSAgT3RoZXJ3aXNlIHdlIG1pZ2h0IHdhaXQgZm9yZXZlciBmb3IgdGhlIG1lc3NhZ2UgdG8gYmUgcG9wcGVkIGZyb20KKwkgIHRoZSBxdWV1ZSBpZiBhIHN5bmMgaGFuZGxlciByZXR1cm5lZCBHU1RfQlVTX0FTWU5DLgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0NzAwNQorCisyMDExLTA0LTA3IDExOjE5OjU3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdF9wcml2YXRlLmg6CisJKiBnc3QvZ3N0YmluLmM6CisJKiBnc3QvZ3N0YnVzLmM6CisJICBidXM6IFVzZSBhIGNvbnN0cnVjdC1vbmx5IHByb3BlcnR5IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gY2hpbGQgYnVzZXMgYW5kIG5vcm1hbCBidXNlcworCSAgVGhpcyBhbGxvd3MgdG8gb25seSBjcmVhdGUgdGhlIHNvY2tldHBhaXIgd2hlbiBpdCBpcyByZWFsbHkgcmVxdWlyZWQgaW5zdGVhZAorCSAgb2YgYWx3YXlzIGNyZWF0aW5nIGl0IGFuZCBpbW1lZGlhdGVseSBkZXN0cm95aW5nIGl0IGFnYWluIGZvciBjaGlsZCBidXNlcy4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDcwMDUKKworMjAxMS0wNC0wNyAyMDo0NzoyNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSogdGVzdHMvY2hlY2svZWxlbWVudHMvLmdpdGlnbm9yZToKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlMi5jOgorCSAgdGVzdHM6IGFkZCBzb21lIGJhc2ljIHVuaXQgdGVzdHMgZm9yIHF1ZXVlMgorCisyMDExLTA0LTA3IDIwOjQ1OjIyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkgIHF1ZXVlMjogZml4IGJ1ZmZlciBsZWFrIG9uIGVvcyB3aGVuIHVzaW5nIHRoZSByaW5nIGJ1ZmZlcgorCisyMDExLTAxLTExIDE0OjI3OjM1ICswMTAwICBJZGFyIFRvbGxlZnNlbiA8aXRvbGxlZnNAY2lzY28uY29tPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSAgcXVldWUyOiBGaXhlcyBtZW1vcnkgbGVhayBvbiBvdXRfZmx1c2hpbmcgZXJyb3IgaW4gZ3N0X3F1ZXVlMl9jcmVhdGVfcmVhZC4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDY5NzIKKworMjAxMS0wNC0wNyAxOTo0NDo0NCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IGZpeCBtaW5vciBtZW1vcnkgbGVhaworCisyMDExLTA0LTA3IDE3OjM0OjEwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmdW5uZWwuYzoKKwkgIGZ1bm5lbDogbWlub3IgZWxlbWVudCBkZXNjcmlwdGlvbiBmaXgKKworMjAxMS0wNC0wNyAxNjoxMzo1NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQorCisyMDExLTA0LTA3IDE2OjAyOjQzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBnc3QvZ3N0bWVtb3J5Lmg6CisJICBtZW1vcnk6IGFkZCBOT19TSEFSRSBmbGFnIHRvIG1lbW9yeQorCSAgQWRkIGEgTk9fU0hBUkUgZmxhZyB0byBtZW1vcnkgdG8gaW5kaWNhdGUgdGhhdCBpdCBzaG91bGQgbm90IGJlIHNoYXJlZAorCSAgYmV0d2VlbiBidWZmZXJzLgorCisyMDExLTA0LTA3IDE2OjA4OjM0ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGRvY3MvcmFuZG9tL2RyYWZ0LW1pc3NpbmctcGx1Z2lucy50eHQ6CisJICBkb2NzOiByZW1vdmUgZmlsZSBhcyB3ZSBoYXZlIGRvY3MvZGVzaWduL3BhcnQtbWlzc2luZy1wbHVnaW5zLnR4dAorCisyMDExLTA0LTA3IDEwOjQ4OjA0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJICBiYXNlc3JjOiBIYW5kbGUgdGFnIGFuZCBjdXN0b20gZG93bnN0cmVhbSBldmVudHMgdGhlIHNhbWUKKwkgIEVzcGVjaWFsbHkgZHJvcCB0YWcgZXZlbnRzIHdoZW4gZmx1c2hpbmcgdG8gbm90IHNlbmQgdGhlbSBvdmVyCisJICBhbmQgb3ZlciBhZ2Fpbi4KKwkgIFNob3VsZCd2ZSBiZWVuIGluIHRoZSBsYXN0IGNvbW1pdCBhbHJlYWR5IGJ1dCBJIGZvcmdvdCB0byBjYWxsCisJICBnaXQgcmViYXNlIC0tY29udGludWUuLi4KKworMjAxMS0wNC0wNyAxMDo0MDoxNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgYmxhCisKKzIwMTEtMDQtMDcgMTA6Mjk6NDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIGJhc2VzcmM6IFNlbmQgc3luY3Jvbml6ZWQgY3VzdG9tIGRvd25zdHJlYW0vYm90aCBldmVudHMgZG93bnN0cmVhbSBmcm9tIHRoZSBzdHJlYW1pbmcgdGhyZWFkCisJICBJbnN0ZWFkIG9mIGp1c3Qgc2lsZW50bHkgZHJvcHBpbmcgdGhlbS4gVGhlIHNhbWUgd2FzIGRvbmUgZm9yIHRhZyBldmVudHMKKwkgIGJlZm9yZSBhbHJlYWR5LgorCSAgRml4ZXMgYnVnICM2MzU3MTguCisKKzIwMTEtMDQtMDYgMTk6MTk6NTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RtZW1vcnkuYzoKKwkgIG1lbW9yeTogZG9uJ3QgZm9sbG93IHRoZSBwYXJlbnQgaW4gdGhlIGZhbGxiYWNrIHNoYXJlCisKKzIwMTEtMDQtMDYgMTg6NTc6NTcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6CisJICBidWZmZXI6IG1ha2UgbWVtb3J5IHdyaXRhYmxlIGluIF9wZWVrCisJICBNYWtlIHRoZSBtZW1vcnkgd3JpdGFibGUgd2hlbiB3ZSBhcmUgYXNrZWQgdG8gX3BlZWsgd2l0aCBNQVBfV1JJVEUuCisJICBJbXByb3ZlIGRlYnVnZ2luZyBvZiBtaW5pb2JqZWN0LgorCisyMDExLTA0LTA2IDE2OjM3OjQwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0bWluaW9iamVjdC5jOgorCSAgbWluaW9iamVjdDogZml4IGRlYnVnCisKKzIwMTEtMDQtMDYgMTQ6MjA6NTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCisKKzIwMTEtMDQtMDYgMTQ6MDY6NDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0X3ByaXZhdGUuaDoKKwkqIGdzdC9nc3RiaW4uYzoKKwkqIGdzdC9nc3RidXMuYzoKKwkgIGJ1czogQWRkIHByaXZhdGUgQVBJIHRvIHNldCBhIEdzdEJ1cyBpbiBjaGlsZCBtb2RlCisJICBUaGlzIGlzIHVzZWQgYnkgR3N0QmluIHRvIGNyZWF0ZSBhIGNoaWxkIGJ1cyB3aXRob3V0CisJICBhIHNvY2tldHBhaXIgYmVjYXVzZSBjaGlsZCBidXNlcyB3aWxsIGFsd2F5cyB3b3JrCisJICBzeW5jaHJvbm91cy4gT3RoZXJ3aXNlIHRvbyBtYW55IHNvY2tldHMgY291bGQgYmUKKwkgIGNyZWF0ZWQgYW5kIHRoZSBsaW1pdCBvZiBmaWxlIGRlc2NyaXB0b3JzIGZvciB0aGUKKwkgIHByb2Nlc3MgY291bGQgYmUgcmVhY2hlZC4KKwkgIEZpeGVzIGJ1ZyAjNjQ2NjI0LgorCisyMDExLTA0LTA2IDEzOjU2OjQ5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1cy5jOgorCSAgUmV2ZXJ0ICJidXM6IE9ubHkgY3JlYXRlIHRoZSBzaWduYWxsaW5nIHNvY2tldCBwYWlyIHdoZW4gcmVxdWlyZWQiCisJICBUaGlzIHJldmVydHMgY29tbWl0IDRiZjhmMTUyNGY2ZTMzNzRiM2YzYmM1NzMyMjMzNzcyM2QwNmI5MjguCisKKzIwMTEtMDQtMDYgMTM6NTY6NDYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVzLmM6CisJICBSZXZlcnQgImJ1czogQ2hlY2sgaWYgcGVuZGluZyBtZXNzYWdlcyBhcmUgaW4gdGhlIHF1ZXVlIgorCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBiZDFjNDAwMTE0MzRjMWVmYWE2OTZkYzk4ZWY4NTVlZjljY2U5YjI4LgorCisyMDExLTA0LTA2IDExOjM4OjU3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOgorCSAgY2hlY2tzOiBtYWtlIHRlc3RzX21hbnlfYmlucyBpbiBiaW4gdW5pdCB0ZXN0IGEgYml0IGZhc3RlcgorCSAgTm90IGRvaW5nIGV4cGVuc2l2ZSBjaGVja3Mgd2hlbiBsaW5raW5nIGVsZW1lbnRzIG1ha2VzIHRoaW5ncworCSAgbXVjaCBmYXN0ZXIuCisKKzIwMTEtMDQtMDYgMTE6MzA6MTggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6CisJICBjaGVja3M6IGFkZCBzb21lIHF1ZXVlcyB0byB0ZXN0X21hbnlfYmlucyB1bml0IHRlc3QKKwkgIFRvIGxpbWl0IHRoZSBudW1iZXIgb2YgY2FsbHMgaW4gYSByb3cgcGVyIHRocmVhZC4KKworMjAxMS0wNC0wNiAxMjowMzoxOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidXMuYzoKKwkgIGJ1czogQ2hlY2sgaWYgcGVuZGluZyBtZXNzYWdlcyBhcmUgaW4gdGhlIHF1ZXVlCisJICBXZSBjYW4ndCByZWx5IGNvbXBsZXRlbHkgb24gdGhlIHBvbGwgZmQgYmVjYXVzZSB0aGUgZmQgbWlnaHQgYmUKKwkgIGNyZWF0ZWQgYWZ0ZXIgbWVzc2FnZXMgd2VyZSBwb3N0ZWQgdG8gdGhlIGJ1cy4KKworMjAxMS0wNC0wNiAxMTo0NToyNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOgorCSAgdmFsdWU6IEdzdERhdGUvR0RhdGUgaGFzIGEgYWJicmV2aWF0aW9uIG5vdworCisyMDExLTA0LTAzIDE2OjExOjUwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOgorCSAgY2hlY2tzOiBhZGQgR3N0QmluIHVuaXQgdGVzdCB0aGF0IGNyZWF0ZXMgYSBsb3Qgb2YgYmlucworCSAgQ3VycmVudGx5IGZhaWxzIChpbiBub3JtYWwgY2lyY3Vtc3RhbmNlcykgYmVjYXVzZSB3ZSBjcmVhdGUgYQorCSAgc29ja2V0IHBhaXIgZm9yIGVhY2ggYmluJ3MgYnVzIGFuZCBleGhhdXN0IHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlCisJICBmaWxlIGRlc2NyaXB0b3JzLgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0NjYyNAorCisyMDExLTA0LTA1IDE2OjIyOjQ4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1cy5jOgorCSAgYnVzOiBPbmx5IGNyZWF0ZSB0aGUgc2lnbmFsbGluZyBzb2NrZXQgcGFpciB3aGVuIHJlcXVpcmVkCisJICBPdGhlcndpc2UgYSBuZXcgb25lIHdvdWxkIGJlIGNyZWF0ZWQgZm9yIGV2ZXJ5IHNpbmdsZSBidXMgYW5kCisJICB0aGUgcHJvY2VzcyBjb3VsZCBlYXNpbHkgcnVuIG91dCBvZiBmaWxlIGRlc2NyaXB0b3JzLgorCSAgRml4ZXMgYnVnICM2NDY2MjQuCisKKzIwMTEtMDQtMDUgMTQ6MzY6NDMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJICBzdHJ1Y3R1cmU6IEFkZCBkYXRlIGFzIGEgdHlwZSBhYmJyZXZpYXRpb24gb2YgR0RhdGUKKwkgIFNlZSBidWcgIzY0NjY5Ni4KKworMjAxMS0wNC0wNCAxNTo1NjozMCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBjb21tb246CisJICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKKwkgIEZyb20gMWNjYmUwOSB0byBjM2NhZmUxCisKKzIwMTEtMDQtMDQgMTE6MTc6MjggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKKworMjAxMS0wNC0wNCAwMzozMzo0NiArMDIwMCAgQW5kb25pIE1vcmFsZXMgQWxhc3RydWV5IDx5bGF0dXlhQGdtYWlsLmNvbT4KKworCSogZ3N0L2dzdHBvbGwuYzoKKwkgIGdzdHBvbGw6IHJldHJ5IHJlYWRpbmcgdGhlIGNvbnRyb2wgc29ja2V0IHRvIHJlbGVhc2UgcHJvcGVybHkgYWxsIHdha2V1cHMKKwkgIGlmIHNldC0+Y29udHJvbF9wZW5kaW5nIGlzIHNldCB0byAwIGJ1dCB3ZSBkaWRuJ3Qgbm90IHN1Y2NlZCByZWFkaW5nCisJICB0aGUgY29udHJvbCBzb2NrZXQsIGZ1dHVyZSBjYWxscyB0byBnc3RfcG9sbF93YWl0KCkgd2lsbCBiZSBhd2Fpa2VuCisJICBieSB0aGUgY29udHJvbCBzb2NrZXQgd2hpY2ggd2lsbCBub3QgYmUgcmVsZWFzZWQgcHJvcGVybHkgYmVjYXVzZQorCSAgc2V0LT5jb250cm9sX3BlbmRpbmcgaXMgYWxyZWFkeSAwLCBjYXVzaW5nIGFuIGluZmluaXRlIGxvb3AuCisKKzIwMTEtMDQtMDQgMTA6MTg6MTQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJICBzdHJ1Y3R1cmU6IERvbid0IGFsbG93IGludmFsaWQgR0RhdGVzIGluIGFsbCBzdHJ1Y3R1cmVzIGFuZCBkb24ndCBhbGxvdyBOVUxMIEdEYXRlcyBpbiB0YWdsaXN0cworCSAgU29tZSBjb2RlIChlLmcuIGdzdHZvcmJpc3RhZy5jKSBhc3N1bWVzIG5vbi1OVUxMIEdEYXRlcyBpbiB0YWdsaXN0cyBhbmQKKwkgIGV4cGxvZGVzIG90aGVyd2lzZSBhbmQgTlVMTCBvciBpbnZhbGlkIEdEYXRlcyBkb24ndCBtYWtlIG11Y2ggc2Vuc2UgYW55d2F5LgorCisyMDExLTAzLTI1IDE1OjU2OjA3ICswMTAwICBUaG9tYXMgS3Jpc3RlbnNlbiA8dGhvbWFzLmtyaXN0ZW5zZW5AY2lzY28uY29tPgorCisJKiBnc3QvZ3N0cG9sbC5jOgorCSAgcG9sbDogZG9uJ3QgY2FsbCBXU0FXYWl0Rm9yTXVsdGlwbGVFdmVudHMgd2l0aCBubyBldmVudHMKKwkgIEZpeGVzIGVycm9yIGNhdWdodCBieSBNaWNyb3NvZnQgQXBwbGljYXRpb24gVmVyaWZpZXIuCisKKzIwMTEtMDQtMDMgMTY6MTg6NTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZXZlbnQuaDoKKwkgIGRvY3M6IGFkZCBwb2ludGVyIHRvIHBhcnQtc2Vla2luZy50eHQgZGVzaWduIGRvY3MgdG8gZXZlbnQgc2VlayBmbGFncyBkb2NzCisKKzIwMTEtMDQtMDMgMTY6MTg6MTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uZ2l0aWdub3JlOgorCSAgY2hlY2tzOiBpZ25vcmUgbmV3IGZ1bm5lbCB1bml0IHRlc3QgYmluYXJ5CisKKzIwMTEtMDQtMDIgMTQ6NTE6MTggKzAxMDAgIEJhc3RpZW4gTm9jZXJhIDxoYWRlc3NAaGFkZXNzLm5ldD4KKworCSogZ3N0L2dzdHV0aWxzLmg6CisJICB1dGlsczogQXZvaWQgdXNpbmcgInR5cGUiIGFzIG5hbWUgZm9yIGEgdmFyaWFibGUgYW5kIGEgbWFjcm8gYXJndW1lbnQgaW4gR1NUX0JPSUxFUlBMQVRFCisJICBUaGlzIGNhdXNlZCAicmUtZGVjbGFyYXRpb24iIHByb2JsZW1zLgorCSAgLi9jbHV0dGVyLWdzdC12aWRlby1zaW5rLmM6IEluIGZ1bmN0aW9uIOKAmGNsdXR0ZXJfZ3N0X3ZpZGVvX3NpbmtfaW5pdF9pbnRlcmZhY2Vz4oCZOgorCSAgLi9jbHV0dGVyLWdzdC12aWRlby1zaW5rLmM6MjMxOjE6IHdhcm5pbmc6IGRlY2xhcmF0aW9uIG9mIOKAmENsdXR0ZXJHc3RWaWRlb1NpbmvigJkgc2hhZG93cyBhIGdsb2JhbCBkZWNsYXJhdGlvbiBbLVdzaGFkb3ddCisJICAuL2NsdXR0ZXItZ3N0LXZpZGVvLXNpbmsuaDo2NDo0NDogd2FybmluZzogc2hhZG93ZWQgZGVjbGFyYXRpb24gaXMgaGVyZSBbLVdzaGFkb3ddCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ2NTMxCisKKzIwMTEtMDQtMDEgMTM6NTY6MDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSAgZWxlbWVudDogV2hlbiByZXF1ZXN0aW5nIGFuIGV4aXN0aW5nIHBhZCBwcmludCBhIGdfY3JpdGljYWwoKSBpbnN0ZWFkIG9mIHVzaW5nIGFuIGFzc2VydGlvbgorCSAgU29tZSBhcHBsaWNhdGlvbnMgYXJlIHJlcXVlc3RpbmcgdGhlIHNhbWUgcGFkIG5hbWUgbXVsdGlwbGUgdGltZXMKKwkgIGFuZCB0aGUgYmVoYXZpb3VyIGlzIHVuZGVmaW5lZCBhbmQgZGlmZmVyZW50IGZyb20gZWxlbWVudCB0byBlbGVtZW50CisJICBidXQgd2UgZG9uJ3Qgd2FudCB0byBicmVhayBhcHBsaWNhdGlvbnMgdGhhdCB3b3JrIGp1c3QgZmluZS4KKwkgIEluIDAuMTEgdGhpcyBjaGVjayBzaG91bGQgYmUgYW4gYXNzZXJ0aW9uIGFnYWluLCBhbHRob3VnaCBlbGVtZW50cworCSAgaGF2ZSB0byBkbyBtYW51YWwgY2hlY2tpbmcgaWYgdGhlIHBhZCBhbHJlYWR5IGV4aXN0cyBhZ2FpbiBiZWNhdXNlCisJICBpdCBjYW4ndCBiZSBkb25lIGluIGEgdGhyZWFkc2FmZSB3YXkgaGVyZS4KKworMjAxMS0wNC0wMSAxMzo1MzozOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJICBlbGVtZW50OiBVc2UgZ2ludDY0L2d1aW50NjQgc3RyaW5nIHBhcnNpbmcgZnVuY3Rpb25zCisJICBBbmQgY2hlY2sgdGhhdCB0aGUgcmVxdWVzdGVkIHBhZCBuYW1lcyBhcmUgaW5zaWRlIHRoZSB2YWxpZAorCSAgZ2ludC9ndWludCByYW5nZS4KKworMjAxMS0wNC0wMSAxMzo1MTozMSArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgorCisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSAgZWxlbWVudDogc3RydG9bdV1sKCkgcmV0dXJucyBhIGdbdV1sb25nCisKKzIwMTEtMDQtMDEgMTA6NDc6NDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKKworMjAxMS0wNC0wMSAxMDo0NjowNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKKwkgIGRvY3M6IHVwZGF0ZSBwb3J0aW5nIGd1aWRlIHdpdGggYnVmZmVybGlzdCBjaGFuZ2VzCisKKzIwMTEtMDMtMzEgMTk6MjU6MzAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2Rlc2lnbi9wYXJ0LXNlZWtpbmcudHh0OgorCSAgZGVzaWduIGRvY3M6IGRvY3VtZW50IGV4cGVjdGVkIGJlaGF2aW91ciBmb3IgQUNDVVJBVEUgYW5kIEtFWV9VTklUIHNlZWsgZmxhZ3MKKworMjAxMS0wMy0zMSAxODozOTo1NyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLmM6CisJICBieXRld3JpdGVyOiBkb24ndCBhZGQgTlVMTCBkYXRhCisKKzIwMTEtMDMtMzEgMTc6NTU6MjIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKKwkgIENvbmZsaWN0czoKKwkgIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfeDg2XzY0LmgKKworMjAxMS0wMy0zMSAxNzo1MTowMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3QuYzoKKwkqIGdzdC9nc3RidWZmZXJsaXN0LmM6CisJKiBnc3QvZ3N0YnVmZmVybGlzdC5oOgorCSogZ3N0L2dzdHBhZC5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgYnVmZmVybGlzdDogc2ltcGxpZnkgYnVmZmVybGlzdHMKKwkgIFdlIG5vdyBoYXZlIG11bHRpcGxlIG1lbW9yeSBibG9ja3MgYXMgcGFydCBvZiB0aGUgYnVmZmVycyBhbmQgd2UgY2FuIHRoZXJlZm9yZQorCSAgcmVkdWNlIHRoZSBidWZmZXJsaXN0IHRvIGEgc2ltcGxlIGFycmF5IG9mIGJ1ZmZlcnMuCisKKzIwMTEtMDMtMzEgMTA6NTM6MDMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3g4Nl82NC5oOgorCSAgZ3N0YWJpOiBBZGQgc29tZSBuZXcgc3RydWN0dXJlcyBmb3IgeDg2LTY0CisKKzIwMTEtMDMtMzEgMTA6NDY6NDAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9saWJzL2xpYnNhYmkuYzoKKwkqIHRlc3RzL2NoZWNrL2xpYnMvc3RydWN0X3g4Nl82NC5oOgorCSAgbGlic2FiaTogQWRkIGxvdHMgb2YgbmV3IHN0cnVjdHVyZXMgZm9yIHg4Ni02NAorCisyMDExLTAzLTMxIDEwOjMxOjIyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgorCSAgZG9jczogdXBkYXRlIHBvcnRpbmcgZG9jCisKKzIwMTEtMDMtMzAgMjA6MDU6MjYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmM6CisJICBmdW5uZWw6IGZpeCBmb3IgQVBJIGNoYW5nZQorCisyMDExLTAzLTMwIDE5OjU4OjUyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExLWZkbworCSAgQ29uZmxpY3RzOgorCSAgZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmhpZXJhcmNoeQorCSAgZ3N0L2dzdGVsZW1lbnQuYworCisyMDExLTAzLTMwIDE5OjAxOjEzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSogZ3N0L2dzdGJ1ZmZlci5oOgorCSogZ3N0L2dzdG1ldGEuYzoKKwkgIGRvY3M6IHVwZGF0ZSBkb2NzCisKKzIwMTEtMDMtMzAgMTg6NDU6MDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6CisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmhpZXJhcmNoeToKKwkqIGdzdC9nc3RtZW1vcnkuYzoKKwkqIGdzdC9nc3RtZW1vcnkuaDoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgZG9jczogdXBkYXRlIGRvY3VtZW50YXRpb24KKworMjAxMS0wMy0zMCAxNjo0Nzo1NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSogZ3N0L2dzdGJ1ZmZlci5oOgorCSogZ3N0L2dzdGNvbXBhdC5oOgorCSogZ3N0L2dzdG1lbW9yeS5jOgorCSogZ3N0L2dzdG1lbW9yeS5oOgorCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWV0YS5jOgorCSogdGVzdHMvY2hlY2svbGlicy9hZGFwdGVyLmM6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGJ1ZmZlcjogbW9yZSBBUEkgdHdlYWtzCisJICBfdHJpbSAtPiBfcmVzaXplCisJICBfY3JlYXRlX3N1YiAtPiBjb3B5X3JlZ2lvbgorCisyMDExLTAzLTMwIDE1OjI5OjM5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlci50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlcmxpc3QudHh0OgorCSAgZGVzaWduOiB1cGRhdGUgZGVzaWduIGRvY3MKKworMjAxMS0wMy0zMCAxMzowNDozNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9kZXNpZ24vcGFydC1tZXRhLnR4dDoKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkgIGRlc2lnbjogdXBkYXRlIGRvY3MKKworMjAxMS0wMy0zMCAxMDo0ODo0NyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgorCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlxdWV1ZS5jOgorCSAgbXVsdGlxdWV1ZTogTWFrZSBhc3NpZ25tZW50IG9mIHF1ZXVlIElEcyBhbmQgcGFkIG5hbWVzIHRocmVhZHNhZmUKKwkgIEFsc28gYWRkIGEgdGVzdCBmb3IgbmFtaW5nIHBhZHMgYnkgdGhlIGNhbGxlciBhbmQgcmV0dXJuIE5VTEwKKwkgIHdoZW4gcmVxdWVzdGluZyBhbiBhbHJlYWR5IGV4aXN0aW5nIHBhZC4KKworMjAxMS0wMy0yOSAyMzo1ODo0MyArMDIwMCAgQW5kcmVhcyBGcmlzY2ggPGZyYXhpbmFzQG9wZW5kcmVhbWJveC5vcmc+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgorCSAgbXVsdGlxdWV1ZTogU2V0IHRoZSBzaW5nbGUgcXVldWUgSUQgdG8gdGhlIElEIG9mIHRoZSByZXF1ZXN0ZWQgcGFkIGlmIG9uZSB3YXMgZ2l2ZW4gYnkgdGhlIGNhbGxlcgorCisyMDExLTAzLTI5IDE5OjE3OjU1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBnc3QvZ3N0YnVmZmVyLmg6CisJKiBnc3QvZ3N0bWVtb3J5LmM6CisJKiBnc3QvZ3N0bWVtb3J5Lmg6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIG1lbW9yeTogZnVydGhlciBtZW1vcnkgdHdlYWtpbmcKKwkgIEFsbG93IGZvciBhdXRvbWF0aWMgbWVyZ2luZyBvZiBtZW1vcnkgYmxvY2sgaW4gdGhlIF9tYXAgZnVuY3Rpb24gYW5kIGF1dG9tYXRpYworCSAgZnJlZWluZyBvZiB0aGUgdGVtcG9yYXJ5IG1lbW9yeS4KKwkgIFJlbW92ZSBzb21lIHVubmVlZGVkIGZ1bmN0aW9ucy4KKwkgIEFkZCBwb3NzaWJpbGl0eSB0byBmb3JjZSB3cml0YWJsZSBzcGFubmVkIG1lbW9yeS4KKworMjAxMS0wMy0yOSAxNzoxNzo0NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSAgYnVmZmVyOiBpbXBsZW1lbnQgQ09QWV9NRVJHRQorCisyMDExLTAzLTI5IDE2OjUyOjIxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBnc3QvZ3N0bWVtb3J5LmM6CisJKiBnc3QvZ3N0bWVtb3J5Lmg6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGJ1ZmZlcjogY2xlYW4gdXAgX3NwYW4gYW5kIGFkZCBtb3JlIGdfcmV0dXJuX2lmLi4KKworMjAxMS0wMy0yOSAxNjoyMjo0NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJICBlbGVtZW50OiBGaXggc2FuaXR5IGNoZWNrcyBmb3IgcmVxdWVzdCBwYWQgdGVtcGxhdGVzIHdpdGhvdXQgJQorCisyMDExLTAzLTI5IDEzOjUxOjI1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBnc3QvZ3N0YnVmZmVyLmg6CisJICBidWZmZXI6IG9wdGltaXplIG1lbW9yeSBoYW5kbGluZworCisyMDExLTAzLTI5IDExOjU3OjU4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkgIGVsZW1lbnQ6IEFkZCBzb21lIG1vcmUgc2FuaXR5IGNoZWNrcyB0byB0aGUgcGFkIG5hbWUgY2hlY2tpbmcgb2YgcmVxdWVzdCBwYWRzIGluIGFsbCBjYXNlcworCSAgRXNwZWNpYWxseSBjaGVjayBpZiBhIHBhZCB3aXRoIHRoYXQgbmFtZSBhbHJlYWR5IGV4aXN0cy4KKworMjAxMS0wMy0yOSAxMTo1MjowNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJICBlbGVtZW50OiBDaGVjayAldSB0b28gd2hlbiB0cnlpbmcgdG8gZmluZCBhIHBhZCB0ZW1wbGF0ZSBmb3IgYSByZXF1ZXN0IHBhZAorCisyMDExLTAzLTI5IDExOjMxOjMwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBnc3QvZ3N0YnVmZmVyLmg6CisJICBidWZmZXI6IG1vdmUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBpbiBwcml2YXRlIHN0cnVjdAorCisyMDExLTAzLTI4IDIxOjAxOjEzICswMjAwICBGcmF4aW5hcyA8YW5kcmVhcy5mcmlzY2hAbXVsdGltZWRpYS1sYWJzLmRlPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkgIG11bHRpcXVldWU6IEZpeCBhcmJpdHJhcnkgc2luayArIHNvdXJjZSBwYWQgbmFtaW5nCisJICBVc2UgdGhlIHN0cmluZyBwcm92aWRlZCBieSB0aGUgY2FsbGVyIGZvciB0aGUgc2lua3BhZCBuYW1lCisJICBpZiBwb3NzaWJsZS4gTm90ZSB0aGF0IGFsbCBzYW5pdHkgY2hlY2tpbmcgZm9yIHRoaXMgbmFtZQorCSAgaXMgYWxyZWFkeSBkb25lIGluIEdzdEVsZW1lbnQuCisJICBGaXhlcyBCdWcgIzY0NTkzMQorCisyMDExLTAzLTI5IDExOjE4OjM2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmdW5uZWwuYzoKKwkgIGZ1bm5lbDogQWRkIHNvbWUgbW9yZSBkb2N1bWVudGF0aW9uIGFib3V0IHRoZSBiZWhhdmlvdXIgb2YgZnVubmVsCisKKzIwMTEtMDMtMjkgMTE6MDg6NTcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5jOgorCSAgZnVubmVsOiBTZW5kIGEgbmV3c2VnbWVudCBldmVudCBhZnRlciBmbHVzaC1zdG9wCisKKzIwMTEtMDMtMjkgMTE6MDc6NDggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5jOgorCSAgZnVubmVsOiBTb21lIHJhbmRvbSBjbGVhbnVwCisKKzIwMTEtMDMtMjkgMTA6NTY6MDAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5jOgorCSAgZnVubmVsOiBVc2UgYSBHc3RQYWQgc3ViY2xhc3MgZm9yIHRoZSBzaW5rcGFkcyBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBwYWQncyBlbGVtZW50IHByaXZhdGUgZGF0YQorCisyMDExLTAzLTI5IDEwOjQyOjMxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLWRvY3Muc2dtbDoKKwkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy1zZWN0aW9ucy50eHQ6CisJKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuaGllcmFyY2h5OgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3RhdGljZWxlbWVudHMueG1sOgorCSogcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZS5hbToKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5oOgorCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mdW5uZWwuYzoKKwkgIGZ1bm5lbDogSW50ZWdyYXRlIGludG8gdGhlIGJ1aWxkIHN5c3RlbSBhbmQgcmVuYW1lIHRoZSB0eXBlcworCisyMDExLTAzLTI5IDEwOjM5OjQyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmdW5uZWwuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmg6CisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mdW5uZWwuYzoKKwkgIGZ1bm5lbDogSW1wb3J0IGZ1bm5lbCBlbGVtZW50IGZyb20gZmFyc2lnaHQyCisKKzIwMTEtMDMtMjkgMTE6MDc6MzYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkqIGdzdC9nc3RidWZmZXIuaDoKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBidWZmZXI6IG1vcmUgYnVmZmVyIHVwZGF0ZXMKKworMjAxMS0wMy0yOCAyMDoyMDozOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBkZWZzOiBmaXggZGVmcworCisyMDExLTAzLTI4IDIwOjExOjIwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExLWZkbworCSAgQ29uZmxpY3RzOgorCSAgZ3N0L2dzdC5jCisJICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmMKKworMjAxMS0wMy0yOCAxOToxOTo0NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSogZ3N0L2dzdG1lbW9yeS5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBidWZmZXI6IGZpeCBzdWJidWZmZXJzCisKKzIwMTEtMDMtMjggMTY6NDA6MjQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkgIGJ1ZmZlcjogaW1wbGVtZXQgdHJpbSBhbmQgc2V0X3NpemUKKworMjAxMS0wMy0yOCAxNTo1MjoxNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSogZ3N0L2dzdGJ1ZmZlci5oOgorCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgorCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgYnVmZmVyOiBtb3JlIGZpeGVzCisKKzIwMTEtMDMtMjggMTA6Mjg6MDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkqIGdzdC9nc3RidWZmZXIuaDoKKwkqIGdzdC9nc3RtZW1vcnkuaDoKKwkgIGJ1ZmZlcjogYWRkIG1vcmUgbWV0aG9kcworCisyMDExLTAzLTI0IDIxOjIxOjAwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0LmM6CisJICBnc3Q6IGFkZCBjbGFzcyBpbml0CisKKzIwMTEtMDMtMjQgMjE6MTg6NTIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkqIGdzdC9nc3RidWZmZXIuaDoKKwkqIGdzdC9nc3RidWZmZXJsaXN0LmM6CisJKiBnc3QvZ3N0bWV0YS5jOgorCSogZ3N0L2dzdG1ldGEuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgorCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNyYy5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1ldGEuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKKwkqIHRlc3RzL2NoZWNrL2xpYnMvYWRhcHRlci5jOgorCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBidWZmZXI6IGZpeCByZW1haW5pbmcgdW5pdCB0ZXN0cworCisyMDExLTAzLTI0IDIwOjA5OjAyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6CisJICBidWZmZXI6IGZpeCB1bml0IHRlc3QKKworMjAxMS0wMy0yNCAxMzowMTowMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdC5jOgorCSogZ3N0L2dzdG1ldGEuYzoKKwkqIGdzdC9nc3RtZXRhLmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXJsaXN0LmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWV0YS5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgorCSAgbWVtb3J5OiByZW1vdmUgbWVtb3J5IG1ldGFkYXRhIGFnYWluCisKKzIwMTEtMDMtMjQgMTE6NDk6NDYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkqIGdzdC9nc3RtZW1vcnkuYzoKKwkqIHRlc3RzL2NoZWNrL2xpYnMvYWRhcHRlci5jOgorCSAgbWVtb3J5OiBtb3JlIGZpeGVzCisJICBBdXRvbWF0aWNhbGx5IG1ha2UgdGhlIG1lbW9yeSBvZiBhIGJ1ZmZlciB3cml0YWJsZSB3aGVuIHRoZSBidWZmZXIgaXMgd3JpdGFibGUKKwkgIGFuZCB0aGUgbWVtb3J5IGlzIGFza2VkIHRvIG1hcHBlZCBXUklURS4KKwkgIEFkZCBkb2NzCisKKzIwMTEtMDMtMjMgMjA6NTI6MjcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkqIGdzdC9nc3RidWZmZXIuaDoKKwkqIGdzdC9nc3RtZW1vcnkuYzoKKwkqIGdzdC9nc3RtZW1vcnkuaDoKKwkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6CisJKiBnc3QvZ3N0bWluaW9iamVjdC5oOgorCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1pbmlvYmplY3QuYzoKKwkqIHRlc3RzL2NoZWNrL2xpYnMvYml0cmVhZGVyLmM6CisJKiB0ZXN0cy9jaGVjay9saWJzL2J5dGVyZWFkZXIuYzoKKwkqIHRlc3RzL2NoZWNrL2xpYnMvdHlwZWZpbmRoZWxwZXIuYzoKKwkgIG1lbW9yeTogbW9yZSB3b3JrIG9uIGltcGxlbWVudGluZyBidWZmZXIgbWVtb3J5CisKKzIwMTEtMDMtMjIgMjA6NTE6MDYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3QuYzoKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkqIGdzdC9nc3RidWZmZXIuaDoKKwkqIGdzdC9nc3RtZW1vcnkuYzoKKwkqIGdzdC9nc3RtZW1vcnkuaDoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXIuYzoKKwkqIHRlc3RzL2NoZWNrL2xpYnMvYWRhcHRlci5jOgorCSogdGVzdHMvY2hlY2svbGlicy9iaXRyZWFkZXIuYzoKKwkqIHRlc3RzL2NoZWNrL2xpYnMvYnl0ZXJlYWRlci5jOgorCSogdGVzdHMvY2hlY2svbGlicy90ZXN0X3RyYW5zZm9ybS5jOgorCSogdGVzdHMvY2hlY2svbGlicy90cmFuc2Zvcm0xLmM6CisJICBtZW1vcnk6IG1vcmUgd29yayBvbiBwb3J0aW5nIHRoZSB1bml0IHRlc3RzCisKKzIwMTEtMDMtMjEgMTk6MTU6MjcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzcmMuYzoKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzaW5rLmM6CisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc3JjLmM6CisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pZGVudGl0eS5jOgorCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlxdWV1ZS5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1ldGEuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtaW5pb2JqZWN0LmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFnLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKKwkqIHRlc3RzL2NoZWNrL2xpYnMvdHlwZWZpbmRoZWxwZXIuYzoKKwkgIHRlc3RzOiBtYWtlIHNvbWUgdGVzdHMgY29tcGlsZQorCisyMDExLTAzLTIxIDE4OjEzOjU1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbDoKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkqIGdzdC9nc3RidWZmZXIuaDoKKwkqIGdzdC9nc3R0eXBlZmluZC5jOgorCSogZ3N0L2dzdHR5cGVmaW5kLmg6CisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkqIGdzdC9nc3R2YWx1ZS5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJpdHJlYWRlci5oOgorCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmg6CisJKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgorCSogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuaDoKKwkqIHRlc3RzL2V4YW1wbGVzL2FkYXB0ZXIvYWRhcHRlcl90ZXN0LmM6CisJKiB0b29scy9nc3QtbGF1bmNoLmM6CisJICBtZW1vcnk6IHBvcnQgY29kZSB0byBuZXcgYnVmZmVyIGRhdGEgQVBJCisKKzIwMTEtMDMtMjEgMTM6MDc6NDIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkqIGdzdC9nc3RidWZmZXIuaDoKKwkqIGdzdC9nc3RidWZmZXJsaXN0LmM6CisJKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgorCSogZ3N0L2dzdG1lbW9yeS5jOgorCSogZ3N0L2dzdG1lbW9yeS5oOgorCSogZ3N0L2dzdG1ldGEuYzoKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIG1lbW9yeTogbW9yZSBmaXhlcworCSAgRml4IHNwYW4gYW5kIGlzX3NwYW4KKwkgIEltcGxlbWVudCBidWZmZXIgbWVtb3J5CisKKzIwMTEtMDMtMjEgMDk6NTE6NTMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkqIGdzdC9nc3RidWZmZXIuaDoKKwkqIGdzdC9nc3RtZW1vcnkuaDoKKwkgIFdJUCB1c2UgbWVtb3J5IGluIGJ1ZmZlcgorCisyMDExLTAzLTIwIDExOjQyOjM5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0bWVtb3J5LmM6CisJKiBnc3QvZ3N0bWVtb3J5Lmg6CisJICBtZW1vcnk6IG1vcmUgaW1wcm92ZW1lbnRzCisKKzIwMTEtMDMtMTkgMTA6NDU6MzcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RtZW1vcnkuYzoKKwkqIGdzdC9nc3RtZW1vcnkuaDoKKwkgIG1lbW9yeTogbW9yZSBtZW1vcnkgaW1wcm92ZW1lbnRzCisKKzIwMTEtMDMtMTggMjE6NDU6MzkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RtZW1vcnkuYzoKKwkqIGdzdC9nc3RtZW1vcnkuaDoKKwkgIG1lbW9yeTogYWRkIG1vcmUgbWVtb3J5IG9wZXJhdGlvbnMKKworMjAxMS0wMy0xOCAxOToyODoxNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L01ha2VmaWxlLmFtOgorCSogZ3N0L2dzdC5oOgorCSogZ3N0L2dzdG1lbW9yeS5jOgorCSogZ3N0L2dzdG1lbW9yeS5oOgorCSAgbWVtb3J5OiBhZGQgbWVtb3J5IGltcGxlbWVudGF0aW9uCisKKzIwMTEtMDMtMTggMTg6MzU6NDIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RtZW1vcnkuaDoKKwkgIG1lbW9yeTogYWRkIEFQSSBmb3IgaGFuZGxpbmcgbWVtb3J5IGJsb2NrcworCSAgQWRkcyBzb21lIEFQSSB0byBoYW5kbGUgbWVtb3J5IGJsb2Nrcy4KKworMjAxMS0wMy0wOCAxODoxODoyNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdG1ldGEuaDoKKwkgIG1ldGE6IGZpeCBkb2NzCisKKzIwMTEtMDMtMjggMjE6MjE6MDAgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YmluLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIGJhc2VzcmM6IFJldHVybiBGQUxTRSBpZiB3ZSBkb24ndCBoYW5kbGUgYW4gZXZlbnQKKwkgIGJhc2VzcmMncyBkZWZhdWx0IGV2ZW50IGhhbmRsZXIgcmV0dXJucyBUUlVFIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUKKwkgIGV2ZW50IGlzIGhhbmRsZWQgb3Igbm90LiBUaGlzIGZpeGVzIHRoZSBoYW5kbGVyIHRvIGNvbmZvcm0gd2l0aCB0aGUKKwkgIGV4cGVjdGVkIGJlaGF2aW91ciAod2hpY2ggaXMgdG8gb25seSByZXR1cm4gVFJVRSB3aGVuIHRoZSBldmVudCBoYXMKKwkgIGFjdHVhbGx5IGJlbm4gaGFuZGxlZCkuIGdzdF9iaW5fZG9fbGF0ZW5jeV9mdW5jKCkgZGVwZW5kZWQgb24gdGhpcworCSAgKGluY29ycmVjdCkgYmVoYXZpb3VyLCBhbmQgaXMgbm93IG1vZGlmaWVkIGFzIHdlbGwuCisJICAoUmVtYWluaW5nIDEtbGluZXIgY2hhbmdlIGluIGdzdGJhc2VzcmMuYyBpcyB0byBrZWVwIGdzdC1pbmRlbnQgaGFwcHkpCisKKzIwMTEtMDMtMjUgMjI6MDg6NDEgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb21tb246CisJICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKKwkgIEZyb20gMTkzYjcxNyB0byAxY2NiZTA5CisKKzIwMTEtMDMtMjUgMTQ6NTU6MzkgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIGI3N2UyYmYgdG8gMTkzYjcxNworCisyMDExLTAzLTI1IDA5OjI3OjU4ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIGQ4ODE0YjYgdG8gYjc3ZTJiZgorCisyMDExLTAzLTI1IDA4OjU5OjM3ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIDZhYWEyODYgdG8gZDg4MTRiNgorCisyMDExLTAzLTI0IDE4OjQ4OjQxICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSA2YWVjNmI5IHRvIDZhYWEyODYKKworMjAxMS0wMy0yNCAxODoyNzowOSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMtc2VjdGlvbnMudHh0OgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5oOgorCSAgZG9jczogZml4IHNvbWUgZ3RrLWRvYyB3YXJuaW5ncworCSAgRG9jdW1lbnQgdGhlIHF1ZXVlIGxlYWt5IGVudW1zLgorCisyMDExLTAzLTI0IDE4OjI1OjA4ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IHNldCBtYXggdmFsdWUgZm9yIHRvIHRoZSBtYXRjaGluZyBvbmUgZm9yIHRoZSBkYXRhdHlwZQorCSAgVGhlIHByb3BlcnR5IGlzIGd1aW50NjQsIHNvIHVzZSBHX01BWFVJTlQ2NCBpbnN0ZWFkIG9mIEdfTUFYVUlOVC4KKworMjAxMS0wMy0yNCAxMzoyMjo1NyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6CisJICBkb2NzOiBjbGVhbnVwIGFuZCB4cmVmIGZpeGVzCisJICBEZWFsIHdpdGggdGhlIGhpbnRzIGZyb20gZ3RrLWRvYyBhbmQgZml4IHRoZSB4cmVmcy4gQXBwbHkgYSB3b3JrLWFyb3VuZCBmb3IgKCkKKwkgIHByZWNlZGVuY2Ugb3ZlciBALiBNb3ZlICJNVCBTYWZlIiB0ZXh0IHRvIGRvYyBib2R5IGluIG1hbnkgcGxhY2VzLiBUcmltIGVvbAorCSAgd2hpdGVzcGFjZXMuCisKKzIwMTEtMDMtMjMgMTY6NDI6MjQgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgYmFzZXNpbms6IHByaW50IGZsb3cgcmV0dXJuIGFzIGEgbmFtZSBpbiBkZWJ1ZyBsb2cKKworMjAxMS0wMy0yMyAxNzoxMzo1OCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBkb2NzL2xpYnMvTWFrZWZpbGUuYW06CisJKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06CisJICBkb2NzOiBkbyB4cmVmcyBmb3Igbm9uIGluc3RhbGxlZCBib29rcyB0b28KKwkgIEdldCB0aGUgeHJlZnMgZnJvbSB0aGUgYnVpbGRkaXIgZm9yIHRoZSBib29rcyBpbiB0aGUgc2FtZSBwYWNrYWdlcy4gVGhpcyBmaXhlcworCSAgdGhlIGNyb3NzIHJlZmVyZW5jZXMgaWYgb25lIGRvZXMgbm90IGhhdmUgdGhlIGRvY3MgYWxyZWFkeSBpbnN0YWxsZWQuCisKKzIwMTAtMDQtMTkgMjA6Mzk6NTMgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgYmFzZXNyYzogS2VlcCBkb3duc3RyZWFtIGNhcHMgb3JkZXIgd2hlbiBmaXhhdGluZworCSAgVGhpcyBhbGxvd3MgdXNlIHRvIHVzZSB0aGUgZmlyc3QgaW50ZXJzZWN0aW5nIGZvcm1hdCBwcmVmZXJlZCBieSBkb3duc3RyZWFtLgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYxNzA0NQorCisyMDEwLTA0LTE5IDIwOjQwOjU2ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIGJhc2V0cmFuc2Zvcm06IFJldGFpbiBjYXBzIG9yZGVyIHdoZW4gZ2V0dGluZyBjYXBzCisJICBJZiB0aGUgZWxlbWVudCBnYXZlIHVzIGNhcHMgaW4gYSBzcGVjaWZpYyBvcmRlciwgbGV0J3MgcmV0YWluIHRoYXQKKwkgIGJ5IGludGVyc2VjdGluZyBhZ2FpbnN0IHRoZSB0ZW1wbGF0ZSBidXQgcmV0YWluaW5nIHRoZSBvcmRlciBnaXZlbgorCSAgYnkgdGhlIGVsZW1lbnQuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE3MDQ1CisKKzIwMTEtMDItMjUgMTA6MjU6MjYgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOgorCSAgdGVzdHM6IGNhcHM6IFRlc3RzIGZvciB0aGUgbmV3IGNhcHMgaW50ZXJzZWN0aW9uIG1vZGUKKwkgIEFkZHMgdGVzdCBjYXNlcyBmb3IgdGhlIGNhcHMgJ2ZpcnN0JyBpbnRlcnNlY3QgbW9kZQorCSAgQWRkcyBhbm90aGVyIHRlc3QgZm9yIHRoZSAnemlnemFnJyBtb2RlCisJICBGaXhlcyAjNjE3MDQ1CisKKzIwMTEtMDItMjUgMDg6NTA6MTIgLTAzMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGdzdC9nc3QuYzoKKwkqIGdzdC9nc3RjYXBzLmM6CisJKiBnc3QvZ3N0Y2Fwcy5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBnc3RjYXBzOiBuZXcgQVBJIDogZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwKKwkgIEp1c3QgbGlrZSBnc3RfY2Fwc19pbnRlcnNlY3QsIGJ1dCBhZGRzIGEgbmV3IHBhcmFtZXRlciAnbW9kZScKKwkgIHRoYXQgYWxsb3dzIHNlbGVjdGluZyB0aGUgaW50ZXJzZWN0aW9uIGFsZ29yaXRobSB0byB1c2UuCisJICBDdXJyZW50bHkgd2UgaGF2ZSBHU1RfQ0FQU19JTlRFUlNFQ1RfTU9ERV9aSUdfWkFHIChkZWZhdWx0KSBhbmQKKwkgIEdTVF9DQVBTX0lOVEVSU0VDVF9NT0RFX0ZJUlNULgorCSAgQVBJOiBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbAorCSAgQVBJOiBHc3RDYXBzSW50ZXJzZWN0TW9kZQorCSAgQVBJOiBHU1RfQ0FQU19JTlRFUlNFQ1RfTU9ERV9aSUdfWkFHCisJICBBUEk6IEdTVF9DQVBTX0lOVEVSU0VDVF9NT0RFX0ZJUlNUCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE3MDQ1CisKKzIwMTEtMDMtMTIgMTc6MDE6MzkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL2NoZWNrL2xpYnMvLmdpdGlnbm9yZToKKwkqIHRlc3RzL2NoZWNrL2xpYnMvZ3N0bGlic2NwcC5jYzoKKwkgIHRlc3RzOiBhZGQgbGlic2NwcCB1bml0IHRlc3QgdG8gbWFrZSBzdXJlIGcrKyBsaWtlcyBvdXIgbGlicmFyeSBoZWFkZXJzCisKKzIwMTEtMDMtMTIgMTY6NTg6MDEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5oOgorCSAgYnl0ZXJlYWRlciwgYnl0ZXdyaXRlcjogZml4IHVwIGlubGluZSBmdW5jdGlvbnMgdG8gbWFrZSBnKysgaGFwcHkKKwkgIGdzdGJ5dGVyZWFkZXIuaDogSW4gZnVuY3Rpb24g4oCYZ3VpbnQ4KiBnc3RfYnl0ZV9yZWFkZXJfZHVwX2RhdGFfdW5jaGVja2VkKEdzdEJ5dGVSZWFkZXIqLCBndWludCnigJk6CisJICBnc3RieXRlcmVhZGVyLmg6MjQ5Ojc1OiBlcnJvcjogaW52YWxpZCBjb252ZXJzaW9uIGZyb20g4oCYdm9pZCrigJkgdG8g4oCYZ3VpbnQ4KuKAmQorCSAgZ3N0Ynl0ZXdyaXRlci5oOiBJbiBmdW5jdGlvbiDigJhnYm9vbGVhbiBfZ3N0X2J5dGVfd3JpdGVyX2Vuc3VyZV9mcmVlX3NwYWNlX2lubGluZShHc3RCeXRlV3JpdGVyKiwgZ3VpbnQp4oCZOgorCSAgZ3N0Ynl0ZXdyaXRlci5oOjE5Njo3NTogZXJyb3I6IGludmFsaWQgY29udmVyc2lvbiBmcm9tIOKAmHZvaWQq4oCZIHRvIOKAmGd1aW50OCrigJkKKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDU1OTUKKworMjAxMS0wMy0yMiAxNjoyNjo1NiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RlbGVtZW50Lmg6CisJICBnc3RlbGVtZW50OiBGaXggdHlwbyBpbiB0aGUgZG9jcworCSAgR1NUX0VMRU1FTlRfSU5GTyB3aWxsIHBvc3QgYSBJTkZPIG1lc3NhZ2UsIG5vdCBhIFdBUk5JTkcKKworMjAxMS0wMy0xOCAwODoyMjoyMyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R0YWdzZXR0ZXIuYzoKKwkgIHRhZ3NldHRlcjogUmVtb3ZpbmcgdW51c2VkIGRlYnVnIGNhdGVnb3J5CisJICB0YWdzZXR0ZXIncyBkZWJ1ZyBjYXRlZ29yeSBoYWQgYSB0eXBvIGFuZCB3YXMgdW51c2VkLiBSZW1vdmluZyBpdC4KKworMjAxMS0wMy0xOCAxOTozNDo1NyArMDEwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc0BkZWJldGhlbmNvdXJ0LmNvbT4KKworCSogYXV0b2dlbi5zaDoKKwkgIGF1dG9nZW46IHdpbmdvIHNpZ25lZCBjb21tZW50CisKKzIwMTEtMDMtMjIgMTE6MDQ6MjAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkgIG11bHRpcXVldWU6IERvbid0IGxlYWsgb2JqZWN0cyB3aGVuIGZsdXNoaW5nIGFmdGVyIGRlcXVldWVpbmcgYW5kIGJlZm9yZSBwdXNoaW5nIHRoZSBvYmplY3QKKworMjAxMS0wMy0yMSAxNzo1NDoxMCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5oOgorCSAgbXVsdGlxdWV1ZTogUmVhbGx5IHJlbW92ZSB1bnVzZWQgdmFyaWFibGUKKworMjAxMS0wMy0yMSAxNzo1MjoxMyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmg6CisJICBtdWx0aXF1ZXVlOiBJbmNyZW1lbnQgdW5pcXVlIGl0ZW0gY291bnRlciB3aXRoIGF0b21pYyBvcGVyYXRpb25zCisJICBCZWZvcmUgaXQgd2FzIG9ubHkgcHJvdGVjdGVkIGJ5IHRoZSBzdHJlYW0gbG9jayBidXQgZXZlcnkgcGFkCisJICBoYXMgaXRzIG93biBzdHJlYW0gbG9jaywgbWFraW5nIHRoZSBwcm90ZWN0aW9uIHJhdGhlciB1c2VsZXNzLgorCisyMDExLTAzLTIxIDE3OjE3OjIyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6CisJICBtdWx0aXF1ZXVlOiBVbmJsb2NrIGFsbCB3YWl0aW5nIHBhZHMgd2hlbiBzaHV0dGluZyBkb3duCisKKzIwMTEtMDMtMjEgMTI6Mzk6MzQgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkgIG11bHRpcXVldWU6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUKKworMjAxMS0wMy0yMSAxNjoyODozNyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgorCSAgbXVsdGlxdWV1ZTogRXhpdCBsb29wIGZ1bmN0aW9uIGlmIHRoZSBwYWQgaXMgZmx1c2hpbmcKKwkgIEZpeGVzIHBvc3NpYmxlIGRlYWRsb2NrcyB3aGVuIGZsdXNoaW5nIGFuIHVubGlua2VkIHBhZCB0aGF0IHdhaXRzCisJICBmb3Igb3RoZXIgcGFkcyB0byBhZHZhbmNlLgorCisyMDExLTAzLTE5IDE3OjA2OjEyIC0wNTAwICBKYXNvbiBELiBDbGludG9uIDxtZUBqYXNvbmNsaW50b24uY29tPgorCisJKiBnc3QvZ3N0cG9sbC5jOgorCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKKwkgIGJ1aWxkOiBmaXggYnVpbGQgd2l0aCAtV2Vycm9yIHdpdGggR0NDIDQuNi4wCisJICBUaGlzIHRvdWNoZXMgdGhyZWUgYXJlYXMgb2YgY29kZSwgcmVtb3ZlcyB1bnVzZWQgdmFyaWFibGVzIGFuZCBkaXNjYXJkcworCSAgcmV0dXJuIHZhbHVlcyBmcm9tIHR3byBmdW5jdGlvbnMgd2l0aCAodm9pZCkuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ1MjY3CisKKzIwMTEtMDMtMTkgMTA6Mzk6MjggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZXZlbnQuaDoKKwkgIGV2ZW50OiBBZGQgc2luY2UgbWFya2VyIHRvIEdTVF9FVkVOVF9TSU5LX01FU1NBR0UKKworMjAxMS0wMy0xOSAwODo1NTo1NyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSAgaW5wdXRzZWxlY3RvcjogU3RvcCB3YWl0aW5nIGZvciBhIHBhZCBzd2l0Y2ggd2hlbiB0aGUgcGFkIGlzIGZsdXNoaW5nCisKKzIwMTEtMDMtMTkgMDg6NTA6MDYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKKwkgIGlucHV0c2VsZWN0b3I6IE1vdmUgbG9ja2luZyBhbmQgc2lnbmFsbGluZyBtYWNyb3MgZnJvbSB0aGUgaGVhZGVyIHRvIHRoZSBzb3VyY2UgZmlsZQorCisyMDExLTAzLTE3IDIzOjQyOjQ4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHRhc2suaDoKKwkgIHRhc2s6IGZpeCBHU1RfVEFTS19CUk9BRENBU1QKKwkgIFN1cnByaXNpbmdseSBlbm91Z2gsIHlvdSBjYW4ndCAiYnJlYWRjYXN0IiBvbiBhIEdDb25kLgorCSAgU3BvdHRlZCBieSBSdW5lIFPDpnRyZS4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDUwMjIKKworMjAxMS0wMy0xNyAxNDoyMToxNyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSAgaW5wdXRzZWxlY3RvcjogSG9sZCB0aGUgc2VsZWN0b3IgbG9jayB3aGlsZSByZWFkaW5nIHByb3BlcnRpZXMgb2YgdGhlIGFjdGl2ZSBwYWQKKworMjAxMS0wMy0xNyAxNDoxMDo0OSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSAgaW5wdXRzZWxlY3RvcjogTWFrZSBzdXJlIHRoYXQgRU9TIGlzIGFsd2F5cyBzZW50IGRvd25zdHJlYW0gZm9yIHRoZSBhY3RpdmUgcGFkCisJICBJdCBjYW4gaGFwcGVuIHRoYXQgdGhlIGN1cnJlbnRseSBhY3RpdmUgcGFkIGdvdCB0aGUgRU9TIGV2ZW50CisJICBiZWZvcmUgaXQgd2FzIGFjdGl2YXRlZCBhbmQgdGhlIHByZXZpb3VzbHkgYWN0aXZlIHBhZCBnb3QgdGhlCisJICBFT1MgZXZlbnQgYWZ0ZXIgaXQgd2FzIGRlYWN0aXZhdGVkLiBJbiB0aGF0IGNhc2Ugd2UgaGF2ZSB0bworCSAgc2VuZCB0aGUgRU9TIGV2ZW50IGZyb20gYW4gaW5hY3RpdmUgcGFkIGRvd25zdHJlYW0uCisKKzIwMTEtMDMtMTYgMTg6MTk6MTEgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKKwkgIGlucHV0c2VsZWN0b3I6IFJldHVybiBHU1RfRkxPV19PSyB1bnRpbCB0aGUgc2VsZWN0ZWQgcGFkIHB1c2hlZCBzb21ldGhpbmcgZG93bnN0cmVhbQorCSAgVGhpcyBtYWtlcyBzdXJlIHRoYXQgZHVyaW5nIHN3aXRjaGVzIGF0IG5vIHBvaW50IGluIHRpbWUgYWxsIHBhZHMKKwkgIGhhdmUgcmV0dXJuZWQgbm90LWxpbmtlZCwgd2hpY2ggY2FuIGhhcHBlbiB3aGVuIHBsYXlpbmcgYW4gYXVkaW8tb25seQorCSAgZmlsZSB3aXRoIHBsYXliaW4yIGFuZCBzd2l0Y2hpbmcgYmV0d2VlbiB0aGUgc3RyZWFtcyBmb3IgZXhhbXBsZS4KKwkgIEZpeGVzIGJ1ZyAjNjQ0OTM1LgorCisyMDExLTAzLTE3IDEwOjUzOjQ5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHV0aWxzLmM6CisJKiBnc3QvZ3N0dXRpbHMuaDoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgdXRpbHM6IFJlbW92ZSBkZXByZWNhdGVkIGdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3tzaW5rLHNyY31fY2FwcygpCisKKzIwMTEtMDMtMTcgMTA6NTA6NDMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCisJICBDb25mbGljdHM6CisJICBnc3QvZ3N0YnVmZmVybGlzdC5jCisKKzIwMTEtMDMtMTYgMTI6MDE6MjEgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IERvY3VtZW50IHRoYXQgcGFkIGJsb2NrcyBvbmx5IG1ha2Ugc2Vuc2UgZm9yIHNpbmsgcGFkcyBpbiBwdWxsIG1vZGUgYW5kIHNyYyBwYWRzIGluIHB1c2ggbW9kZQorCSAgU2VlIGJ1ZyAjNjQ0OTA3LgorCisyMDExLTAzLTE2IDExOjUzOjUzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGdob3N0cGFkLmM6CisJICBnaG9zdHBhZDogVGhlIGludGVybmFsbHkgbGlua2VkIHBhZCBvZiB0aGUgcHJveHlwYWQgaXMgdGhlIGdob3N0cGFkCisJICBQcmV2aW91c2x5IHdlIHdlcmUgcmV0dXJuaW5nIHRoZSBwZWVycGFkLCB3aGljaCBpcyB0aGUgdGFyZ2V0CisJICBvZiB0aGUgZ2hvc3RwYWQuCisKKzIwMTEtMDItMjUgMTY6MjA6NDkgKzAxMDAgIEpvbmFzIEhvbG1iZXJnIDxqb25hcy5ob2xtYmVyZ0BheGlzLmNvbT4KKworCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXJsaXN0LmM6CisJICBidWZmZXJsaXN0OiBVc2UgYSBHUXVldWUgaW5zdGVhZCBvZiBhIEdMaXN0CisJICBBZGRpbmcgYSBidWZmZXIgdG8gdGhlIGVuZCBvZiBhIEdzdEJ1ZmZlckxpc3QgaXMgc3VwcG9zZWQgdG8gYmUgYSBmYXN0CisJICBvcGVyYXRpb24sIGJ1dCBpdCB3YXMgbm90IHNpbmNlIHRoZSBpdGVyYXRvciBkb2VzIG5vdCBhZHZhbmNlIGl0cworCSAgbmV4dHBvaW50ZXIgd2hlbiBhZGRpbmcgYnVmZmVycyBhbmQgR0xpc3QgZG9lcyBub3QgaGF2ZSBhIHRhaWwgcG9pbnRlci4KKwkgIFVzaW5nIGEgR1F1ZXVlIHRvIHN0b3JlIHRoZSBidWZmZXJzIG1ha2VzIGl0IGVhc2llciB0byBhZGQgYnVmZmVycyB0bworCSAgdGhlIGVuZCBvZiB0aGUgbGlzdCBhbmQgdGhpcyBvcGVyYXRpb24gd2lsbCBub3cgYmUgbXVjaCBtb3JlIGVmZmljaWVudC4KKwkgIEFkZGluZyBhbiBlbnRpcmUgR0xpc3Qgb2YgYnVmZmVycyB1c2luZworCSAgZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX2FkZF9saXN0KCkgd2lsbCBob3dldmVyIGhhdmUgdG8gaXRlcmF0ZSBvdmVyCisJICB0aGUgbGlzdCBiZWluZyBhZGRlZCB0byBiZSBhYmxlIHRvIHVwZGF0ZSB0aGUgdGFpbCBwb2ludGVyIGluIHRoZQorCSAgR1F1ZXVlLgorCisyMDExLTAzLTEwIDE3OjQ4OjI2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHV0aWxzLmM6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIHV0aWxzOiBmaXggQUJJIGJyZWFrIHdoZW4gY29tcGlsaW5nIGdzdHJlYW1lciB3aXRoIC1ER1NUX0RJU0FCTEVfREVQUkVDQVRFRAorCSAgR1NUX0RJU0FCTEVfREVQUkVDQVRFRCBzaG91bGQgb25seSBhZmZlY3QgdmlzaWJpbGl0eSBvZiBkZWNsYXJhdGlvbnMgaW4gaGVhZGVycywKKwkgIG5vdCBhY3R1YWxseSByZW1vdmUgc3ltYm9scy4gU2VlIEdpdERldmVsb3Blckd1aWRlbGluZXMgYW5kIERlcHJlY2F0aW5nQVBJCisJICBwYWdlcyBpbiB3aWtpLgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTQwMjE0MQorCisyMDExLTAzLTEwIDE2OjQ2OjA0ICswMTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KKworCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICB3aW4zMjogVXBkYXRlIC5kZWYgZmlsZSBmb3IgQVBJIGFkZGl0aW9uCisKKzIwMTEtMDMtMTAgMTA6MjU6MDcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKKworMjAxMS0wMy0wOSAxNjoxNTozMyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBkb2NzL3B3Zy9hZHZhbmNlZC10eXBlcy54bWw6CisJICBwd2c6IGZpeCBlbGVtZW50IG5hbWUgInZpZGVvZHJvcCIgdG8gInZpZGVvcmF0ZSIKKworMjAxMS0wMy0wOCAxMjoxMTowOCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKKwkgIHRlc3Q6IGFkZCB0ZXN0cyBmb3IgbmV3IGVsZW1lbnRfZmFjdG9yeSBhcGkuCisKKzIwMTAtMDYtMjMgMjI6MDA6MDQgKzAyMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+CisKKwkqIGdzdC9nc3R1dGlscy5jOgorCSogZ3N0L2dzdHV0aWxzLmg6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGdzdHV0aWxzOiByZXBsYWNlIGdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3tzaW5rLHNyY31fY2FwcworCSAgQWRkIG5ldyBmdW5jdGlvbnMgdG8gY2xhcmlmeSBob3cgdGhlIGNhcHMgYXJlIGNvbXBhcmVkIHRvIHRoZSB0ZW1wbGF0ZSBjYXBzIG9mCisJICB0aGUgZWxlbWVudCBmYWN0b3J5LiBJbXByb3ZlIHRoZSBkb2NzIHRvIHBvaW50IG91dCB0aGUgZGlmZmVyZW5jZS4KKwkgIERlcHJlY2F0ZTogZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fe3NyY3xzaW5rfV9jYXBzCisJICBBUEk6IGFkZCBnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl97c3JjfHNpbmt9X3thbnl8YWxsfV9jYXBwcworCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTQwMjE0MQorCisyMDExLTAzLTA3IDIzOjEzOjU2ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RjYXBzLmM6CisJICB0ZXN0czogYWRkIGEgdW5pdCB0ZXN0IGZvciBnc3RfY2Fwc19uZXdfc2ltcGxlCisJICBBZGQgYSB0ZXN0IGZvciB0aGUgY3Jhc2ggaW4gYnVnICM2NDIyNzEuCisKKzIwMTEtMDMtMDggMTg6MDU6NDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZGVzaWduL2RyYWZ0LWJ1ZmZlcjIudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1tZXRhLnR4dDoKKwkgIGRvY3M6IHJlbmFtZSBkcmFmdCB0byBvZmZpY2lhbCBkb2MKKworMjAxMS0wMy0wOCAxNjo1ODo0OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSogZ3N0L2dzdG1ldGEuYzoKKwkqIGdzdC9nc3RtZXRhLmg6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWV0YS5jOgorCSAgbWV0YTogaW1wbGVtZW50IHRyYW5zZm9ybSBmdW5jdGlvbgorCSAgUmVwbGFjZSBzdWJidWZmZXIgYW5kIGNvcHkgdm1ldGhvZHMgYnkgYSBtb3JlIGdlbmVyaWMgdHJhbnNmb3JtIGZ1bmN0aW9uIHRoYXQKKwkgIGNhbiB0aGVuIGJlIHBhcmFtZXRyaXNlZCBieSB0cmFuc2Zvcm0gc3BlY2lmaWMgZGF0YS4gVGhpcyBzaG91bGQgYWxsb3cgdXMgdG8KKwkgIGltcGxlbWVudCBtYWtlLXdyaXRhYmxlIGFuZCBtb3JlIGZ1dHVyZSB0cmFuc2Zvcm0gZnVuY3Rpb25zLgorCisyMDExLTAzLTA4IDE3OjA2OjMwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCisKKzIwMTEtMDMtMDggMTE6NTU6MjkgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6CisJICB0ZXN0czogYWRkIHRlc3QgdG8gY3JlYXRlIGEgZmFjdG9yeQorCisyMDExLTAzLTA4IDEwOjM2OjMwICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSogdGVzdHMvY2hlY2svZ3N0Ly5naXRpZ25vcmU6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZWxlbWVudC5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6CisJICB0ZXN0czogc3RhcnQgYSBuZXcgdGVzdCBzdWl0ZSBmb3IgZWxlbWVudCBmYWN0b3JpZXMKKwkgIE1vdmUgb25lIHRlc3QgZnJvbSBnc3RlbGVtZW50IHN1aXRlLgorCisyMDExLTAzLTA4IDExOjM0OjE5ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOgorCSAgcGFkdGVtcGxhdGU6IGFkZCBtaXNzaW5nIDsgaW4gZXhhbXBsZSAoYW5kIHRyaW0gd2hpdGVzcGFjZSkKKworMjAxMS0wMy0wOCAwOTo1ODo1NSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJICBzdHJ1Y3R1cmU6IGdzdF9zdHJ1Y3R1cmVfZW1wdHlfbmV3KCkgZG9lcyBiZXR0ZXIgZXJyb3IgY2hlY2tpbmcKKwkgIE5vIG5lZWQgdG8gY2hlY2sgZm9yIG1lZGlhX3R5cGUhPU5VTEwgYXMgdGhlIGZ1bmN0aW9uIHdlIGNhbGwgdGhhdCBhY3R1YWwgY3JlYXRlCisJICB0aGUgc3RydWN0dXJlIGRvZXMgYSBmdWxsIGNoZWNrIGFueXdheS4KKworMjAxMS0wMy0wOCAxMDowNjoyMyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSAgY2FwcyxzdHJ1Y3R1cmU6IHRyaW0gdHJhaWxpbmcgd2hpdGVzcGFjZQorCisyMDExLTAzLTA0IDA4OjI4OjI1ICsxMDAwICBKb25hdGhhbiBNYXR0aGV3IDxqb25hdGhhbkBkMTRuLm9yZz4KKworCSogZ3N0L2dzdGNhcHMuYzoKKwkgIGNhcHM6IGRvbid0IGNyZWF0ZSBicm9rZW4gY2FwcyBmb3IgaW52YWxpZCBtZWRpYSB0eXBlcworCSAgQ2hlY2sgaWYgc3RydWN0dXJlIGhhcyBiZWVuIGNyZWF0ZWQgYmVmb3JlIGFwcGVuZGluZyBpdCB0byB0aGUgY2Fwcy4gRnJlZSB0aGUKKwkgIGNhcHMgaW4gdGhlIGNhc2Ugb2YgYW4gZXJyb3IgdG8gbm90IGNvbmNlYWwgaXQgYmUgcmV0dXJuaW5nIGVtcHR5IGNhcHMuCisJICBGaXhlcyAjNjQyMjcxCisKKzIwMTEtMDMtMDcgMTY6MjE6NDcgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogdGVzdHMvZXhhbXBsZXMvaGVsbG93b3JsZC9oZWxsb3dvcmxkLmM6CisJICBleGFtcGxlczogdXBkYXRlIGhlbGxvIHdvcmxkIGV4YW1wbGUKKwkgIE91ciBoZWxsb3dvcmxkIGV4YW1wbGUgdGhhdHcgZSByZWZlcmVuY2UgZnJvbSB0aGUgbWFudWFsIGhhcyBiZWVuIGEgYml0CisJICBjb21wbGljYXRlZCB0byBzZXJ2ZSBhIGZpcnN0IGNvbnRhY3Qgd2l0aCBnc3RyZWFtZXIuIFNpbmNlIHdlIGhhdmUgYW5kCisJICBwcm9tb3RlIHBsYXliaW4yIGFzIGEgcGxheWJhY2sgYXBpIHVzZSBpdCBoZXJlLgorCSAgQmFzZWQgb24gd29yayBmcm9tIE1hdGhpYXMgSGFzc2VsbWFubiA8bWF0aGlhcy5oYXNzZWxtYW5uQGdteC5kZT4KKwkgIEZpeGVzICM0MjQxNDMKKworMjAxMS0wMy0wNCAxOTowMjozMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9kZXNpZ24vZHJhZnQtYnVmZmVyMi50eHQ6CisJICBkb2NzOiB1cGRhdGUgbWV0YWRhdGEgZHJhZnQKKworMjAxMS0wMy0wNCAxODoxMToxOSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKKwkgIG1pbmlvYmplY3Q6IHJlbW92ZSBGSVhNRQorCSAgTm93IHRoYXQgd2UgZG9uJ3Qgc3ViY2xhc3MgYnVmZmVycyBhbnltb3JlLCB0aGUgRklYTUUgYWJvdXQgbGltaXRlZAorCSAgZnVuY3Rpb25hbGl0eSBvZiB0aGUgY29weSBmdW5jdGlvbiBpcyBpcnJlbGV2YW50LgorCisyMDExLTAzLTA0IDE3OjQzOjI0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0LmM6CisJICBnc3Q6IGFkZCBmbGFnIHJlZ2lzdHJhdGlvbgorCisyMDExLTAzLTA0IDE3OjI1OjAyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkLmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJICBwYWQ6IG1vcmUgcHJlcm9sbCBsb2NrIHRvIGJhc2VzaW5rCisJICBNb3ZlIHRoZSBwcmVyb2xsIGxvY2sgdG8gYmFzZXNpbmsgd2hlcmUgaXQgYmVsb25ncy4KKworMjAxMS0wMy0wNCAxNjowNTo0NCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9kZXNpZ24vZHJhZnQtYnVmZmVycG9vbC50eHQ6CisJICBkb2NzOiB1cGRhdGUgYnVmZmVycG9vbCBkcmFmdAorCisyMDExLTAzLTA0IDEyOjA2OjExICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgorCSAgYnVmZmVycG9vbDogYWRkIG1vcmUgZGVidWcgaW5mbworCisyMDExLTAzLTAzIDE4OjM4OjMyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgorCSAgYnVmZmVycG9vbDogYWRkIGRlYnVnCisKKzIwMTEtMDMtMDMgMTg6MjE6MzEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXJwb29sLmM6CisJICBidWZmZXJwb29sOiBhZGQgc29tZSBtb3JlIGRlYnVnIGluZm8KKworMjAxMS0wMy0wMyAxNjozMTo0OSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKKwkqIGdzdC9nc3RidWZmZXJwb29sLmg6CisJKiBnc3QvZ3N0cXVhcmsuYzoKKwkqIGdzdC9nc3RxdWFyay5oOgorCSAgYnVmZmVycG9vbDogYWRkIGNhcHMgdG8gdGhlIGNvbmZpZworCSAgQWRkIHRoZSBjYXBzIHRvIHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgb2YgdGhlIHBvb2wuCisJICBJbml0aWFsaXplIHRoZSBwcml2YXRlIGRhdGEKKworMjAxMS0wMy0wMiAxMTo1Nzo0MCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBkZWZzOiB1cGRhdGUgZGVmcworCisyMDExLTAzLTAyIDExOjU3OjA2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJICBidWZmZXI6IHJlbGVhc2UgYnVmZmVyIHRvIHBvb2wgaW4gZGlzcG9zZQorCSAgVXNlIHRoZSBkaXNwb3NlIG1ldGhvZCB0byByZWxlYXNlIHRoZSBidWZmZXIgdG8gdGhlIHBvb2wgd2hlbiBpdCBpcyBjb25maWd1cmVkLgorCisyMDExLTAyLTIyIDEyOjM1OjQ1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBnc3QvZ3N0YnVmZmVyLmg6CisJKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgorCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuaDoKKwkgIGJ1ZmZlcjogYWRkIHBvb2wgdG8gYnVmZmVyIHN0cnVjdHVyZQorCSAgS2VlcCBhIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlcnBvb2wuIFJlbGVhc2UgdGhlIGJ1ZmZlciB0byB0aGUgcG9vbCB3aGVuCisJICBmaW5hbGl6aW5nLiBNYWtlIHN1cmUgdGhlIHBvb2wgc2V0cyBpdHNlbGYgYXMgdGhlIHBvb2wgbWVtYmVyIG9mIGJ1ZmZlcnMgdGhhdCBpdAorCSAgc2VuZHMgb3V0LgorCisyMDExLTAyLTIyIDEyOjM1OjA2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0LmM6CisJICBnc3Q6IGFkZCBwb29sIGZsYWdzIHR5cGUKKworMjAxMS0wMi0yMiAxMTowNTowOSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGRvY3M6IHVwZGF0ZSBidWZmZXJwb29sIGRvY3MKKworMjAxMS0wMi0yMSAxODo0MzoxOSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKKwkgIGJ1ZmZlcnBvb2w6IFJlZmFjdG9yIHN0b3BwaW5nIG9mIHRoZSBwb29sCisJICBNb3ZlIHNvbWUgbWV0aG9kcyBhcm91bmQuCisJICBNYWtlIHN1cmUgd2UgY2hlY2sgZm9yIGNvbmZpZyBwYXJzaW5nIGVycm9ycy4KKwkgIEluY3JlbWVudCB0aGUgb3V0c3RhbmRpbmcgYnVmZmVycyBiZWZvcmUgY2FsbGluZyBhY3F1aXJlIHNvIHRoYXQgd2UgY2FuIGJlIHN1cmUKKwkgIHRoYXQgc2V0X2FjdGl2ZSgpIGRvZXNuJ3QgZnJlZSB0aGUgcG9vbCBmcm9tIHVuZGVyIHVzLgorCisyMDExLTAyLTIxIDE3OjMzOjM4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgorCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuaDoKKwkgIGJ1ZmZlcnBvb2w6IFJld29yayBidWZmZXIgbWFuYWdlbWVudCBhIGxpdHRsZQorCSAgQWRkIHN0YXJ0L3N0b3AgbWV0aG9kcyB0byBhbGxvdyBmb3IgYnVsayBhbGxvY2F0aW9uIG9mIGJ1ZmZlcnMuCisJICBGcmVlIGJ1ZmZlcnMgb25seSB3aGVuIGFsbCBvdXRzdGFuZGluZyBidWZmZXJzIHJldHVybmVkLgorCSAgTWFrZSB0aGluZ3MgbW9yZSB0aHJlYWRzYWZlIHdydCBmbHVzaGluZyBhbmQgc3RhcnRpbmcvc3RvcHBpbmcgYnkKKwkgIGtlZXBpbmcgdHJhY2sgb2Ygc3RhcnQgYW5kIHN0b3AgbWV0aG9kIGNhbGxzLgorCisyMDExLTAyLTIxIDEyOjE4OjQxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgorCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuaDoKKwkgIGJ1ZmZlcnBvb2w6IG1lbW9yeSBtYW5hZ2VtZW50IGNsZWFudXBzCisJICBVc2UgYSBsb2NrIHRvIHByb3RlY3QgY29uY3VycmVjdCBleGVjdXRpb24gb2Ygc2V0X2NvbmZpZyBhbmQgc2V0X2FjdGl2ZS4KKwkgIFN0YXJ0IGZyZWVpbmcgdGhlIGJ1ZmZlcnMgd2hlbiBmbHVzaGluZyBhbmQgYWxsIGJ1ZmZlcnMgYXJlIHJldHVybmVkIHRvIHRoZQorCSAgcG9vbC4KKwkgIE1ha2UgYSBjb3B5IG9mIHRoZSBjb25maWcgdG8gYXZvaWQgY3Jhc2hpbmcgd2l0aCBjb25jdXJyZW50IGFjY2Vzcy4KKworMjAxMS0wMi0xOCAxNjozNTo0NiArMDEwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgorCSAgYnVmZmVycG9vbDogYWxzbyBhbGxvdyBOVUxMIHBhcmFtcyBpbiBfYWNxdWlyZQorCisyMDExLTAyLTE4IDE2OjE1OjMwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgorCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuaDoKKwkgIGJ1ZmZlcnBvb2w6IG1vcmUgdXBkYXRlcworCSAgS2VlcCB0cmFjayBpZiB0aGUgYnVmZmVyIGlzIGNvbmZpZ3VyZWQgYW5kIGJsb2NrIGFjdGl2YXRpb24gd2hlbiBub3QgY29uZmlndXJlZAorCSAgeWV0LgorCSAgS2VlcCB0cmFjayBvZiBvdXRzdGFuZGluZyBidWZmZXJzIGFuZCBkaXNhbGxvdyBjb25maWd1cmF0aW9uIHdoZW4gbm90IGFsbAorCSAgYnVmZmVycyBhcmUgcmV0dXJuZWQgdG8gdGhlIHBvb2wuIFdlIG5lZWQgdG8gZG8gdGhpcyBvciBlbHNlIHdlIG1pZ2h0IGVuZCB1cAorCSAgd2l0aCB3cm9uZyBidWZmZXJzIGluIHRoZSBwb29sLgorCSAgQWRkIHJldHVybiB2YWx1ZSB0byBzZXRfYWN0aXZlLgorCSAgU21hbGwgY2xlYW51cHMuIEZpeCBmaW5hbGl6ZS4KKworMjAxMS0wMi0xOCAxMjo1MDoyMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKKwkqIGdzdC9nc3RidWZmZXJwb29sLmg6CisJICBidWZmZXJwb29sOiByZW5hbWUgJ2ZsdXNoaW5nJyB0byAnYWN0aXZlJworCSAgUmVuYW1lIHRoZSBmbHVzaGluZyB2YXJpYWJsZSBhbmQgbWV0aG9kcyB0byBhY3RpdmUgdG8gYmV0dGVyIG1hdGNoCisJICB0aGUgb3RoZXIgZ3N0cmVhbWVyIG5hbWUgY29udmVudGlvbnMKKworMjAxMS0wMi0xNyAxODozNzoxOSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKKwkgIGJ1ZmZlcnBvb2w6IHByZWFsbG9jIHdoZW4gdW5zZXQgZmx1c2hpbmcKKwkgIEFjY29yZGluZyB0byB0aGUgZGVzaWduIGRvYyB3ZSBuZWVkIHRvIHByZWFsbG9jIGJ1ZmZlcnMgd2hlbiB3ZSB1bnNldCB0aGUKKwkgIGZsdXNoaW5nIHN0YXRlLCBub3QgaW4gc2V0X2NvbmZpZy4KKwkgIFNldCB0aGUgZmx1c2hpbmcgc3RhdGUgYmV0dGVyLgorCisyMDExLTAyLTE3IDE3OjI5OjI3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgorCSogZ3N0L2dzdHF1YXJrLmM6CisJKiBnc3QvZ3N0cXVhcmsuaDoKKwkgIGJ1ZmZlcnBvb2w6IHVzZSBxdWFya3MgZm9yIHN0cnVjdHVyZSBmaWVsZHMKKworMjAxMS0wMi0xNyAxNjo0Njo1MSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKKwkqIGdzdC9nc3RidWZmZXJwb29sLmg6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGJ1ZmZlcnBvb2w6IHVzZSBHc3RTdHJ1Y3R1cmUgdG8gY29uZmlndXJlIHRoZSBwb29sCisJICBVc2UgYSBHc3RTdHJ1Y3R1cmUgdG8gcHJvdmlkZSB0aGUgcG9vbCB3aXRoIHRoZSByaWdodCBjb25maWd1cmF0aW9uLiBBbHNvCisJICBwcm92aWRlIHNvbWUgaGVscGVyIG1ldGhvZHMgdG8gY29uZmlndXJlIHN1Y2ggYSBzdHJ1Y3R1cmUuCisJICBkb24ndCBwYXNzIHRoZSBjb25maWcgaW4gYWxsb2NfYnVmZmVyLCBwb29sIGltcGxlbWVudGF0aW9uIHdpbGwgYWxyZWFkeSBoYXZlCisJICBwYXJzZWQgaXQgZHVyaW5nIHNldF9jb25maWcuCisJICBVcGRhdGUgZGVmcworCisyMDExLTAyLTE3IDEyOjU1OjM3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGZpeCBkZWZzCisKKzIwMTAtMTEtMDIgMTg6NTY6MjkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9NYWtlZmlsZS5hbToKKwkqIGdzdC9nc3QuaDoKKwkqIGdzdC9nc3RidWZmZXJwb29sLmM6CisJKiBnc3QvZ3N0YnVmZmVycG9vbC5oOgorCSAgYnVmZmVycG9vbDogYWRkIHNpbXBsZSBidWZmZXJwb29sIGhlbHBlciBvYmplY3QKKworMjAxMS0wMy0wMiAxMTowODozNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQorCSAgQ29uZmxpY3RzOgorCSAgZ3N0L2dzdHJlZ2lzdHJ5LmgKKworMjAxMS0wMy0wMiAxMzo1NTozNiArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZmFxL2dpdC54bWw6CisJICBmYXE6IE1pbm9yIHVwZGF0ZSB0byBzc2gga2V5IGdlbmVyYXRpb24gY29tbWFuZHMKKwkgIGZkLm8gcmVxdWlyZXMgUlNBIGtleXMsIGFuZCBpbiBnZW5lcmFsLCB1c2VycyB3b3VsZCBwcm9iYWJseSB3YW50IHRvCisJICBtYWtlIGEgcGVyLXNlcnZlciBrZXkgZmlsZSByYXRoZXIgdGhhbiBvdmVyd3JpdGUgaWRfcnNhLCBpZF9yc2EucHViLgorCisyMDExLTAyLTI4IDE4OjQzOjQxICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogY29uZmlndXJlLmFjOgorCSAgY29uZmlndXJlLmFjOiBleHBvcnQgcGx1Z2luIGRlc2NyaXB0aW9uIG1vcmUgcGxhdGZvcm0gaW5kZXBlbmRlbnQKKwkgIEZpeGVzICM2NDI1MDQuCisKKzIwMTEtMDItMjggMTg6MzI6MDcgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb21tb246CisJICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKKwkgIEZyb20gMWRlN2Y2YSB0byA2YWVjNmI5CisKKzIwMTEtMDItMjggMTU6MDE6NTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cmVnaXN0cnkuaDoKKwkqIGdzdC9nc3R1dGlscy5jOgorCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RoZWxwZXIuYzoKKwkgIGRvY3M6IHR5cG8gZml4ZXMKKwkgIGNvbnZpbmllbmNlIC0+IGNvbnZlbmllbmNlCisKKzIwMTEtMDItMjggMTQ6NTY6MjMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0b29scy9nc3QtaW5zcGVjdC5jOgorCSAgdG9vbHM6IHByaW50ICJwYWQtYWRkZWQiLCAicGFkLXJlbW92ZWQiIGFuZCAibm8tbW9yZS1wYWRzIiBzaWduYWxzIGZvciBlbGVtZW50cyB3aXRoIHNvbWV0aW1lcyBwYWRzCisJICBJdCdzIG9mdGVuIG5vdCBvYnZpb3VzIHRvIHBlb3BsZSB0aGF0IGVsZW1lbnRzIGxpa2UgZS5nLiB1cmlkZWNvZGViaW4KKwkgIChvciBkZW11eGVycykgYXV0b21hdGljYWxseSBzdXBwb3J0IHRoZSBzdGFuZGFyZCBzaWduYWxzIG9mIHRoZQorCSAgR3N0RWxlbWVudCBjbGFzcywgc28gbGV0J3MgcHJpbnQgdGhlIHVzZWZ1bCBwYWQtcmVsYXRlZCBvbmVzIGZvcgorCSAgZWxlbWVudHMgd2l0aCBzb21ldGltZXMgcGFkcy4KKworMjAxMS0wMi0yOCAxNjoyNzowMSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIGRvY3M6IHNtYWxsIHVwZGF0ZXMgYXMgc3VnZ2VzdGVkIG9uIGEgYmxvZworCSAgTGluayBmcm9tIGNvbnZpbmllbmNlIGFwaSB0byB0aGUgdW5kZXJseWluZyBhcGkuCisKKzIwMTEtMDItMjggMTA6MDU6NDcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RtZXRhLmM6CisJKiBnc3QvZ3N0bWV0YS5oOgorCSAgbWV0YTogYWRkIHRpbWluZyBtZXRhZGF0YQorCisyMDExLTAyLTI4IDEwOjA1OjM4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0bWluaW9iamVjdC5oOgorCSAgbWluaW9iamVjdDogZml4IHdoaXRlc3BhY2UKKworMjAxMS0wMi0yOCAwOTozOTo0NCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1ldGEuYzoKKwkgIHRlc3RzOiBhZGQgbWVtb3J5IHVuaXQgdGVzdAorCisyMDExLTAyLTI3IDIwOjU0OjU4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0bWV0YS5jOgorCSogZ3N0L2dzdG1ldGEuaDoKKwkgIG1ldGE6IHNpbXBsaWZ5IGEgYml0CisKKzIwMTEtMDItMjcgMjA6NDI6MTUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RtZXRhLmM6CisJKiBnc3QvZ3N0bWV0YS5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBtZXRhOiBhZGQgZGVmYXVsdCBtZW1vcnkgbWV0YWRhdGEKKwkgIEFkZCBhIG1ldGFkYXRhIGltcGxlbWVudGF0aW9uIGZvciBub3JtYWxsIG1hbGxvY2VkIG1lbW9yeS4KKworMjAxMS0wMi0yNyAxOTo0MDo0NSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSogZ3N0L2dzdGJ1ZmZlci5oOgorCSogZ3N0L2dzdG1ldGEuaDoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZXRhLmM6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIG1ldGE6IHNlcGFyYXRlIGFkZCBhbmQgZ2V0IG1ldGhvZHMKKwkgIE1ha2Ugc2VwYXJhdGUgYXBpIGZvciBnZXR0aW5nIGFuZCBhZGRpbmcgbWV0YWRhdGEuIFRoaXMgYWxsb3dzIHVzIHRvIHBhc3MgZXh0cmEKKwkgIHBhcmFtZXRlcnMgdG8gdGhlIGluaXQgZnVuY3Rpb25zIHdoZW4gY3JlYXRpbmcgbWV0YWRhdGEsIHdoaWNoIGlzIG5lZWRlZCBmb3IKKwkgIHNwZWNpZmljIEFQSSBpbXBsZW1lbnRhdGlvbnMuCisJICBBZGQgYmVnaW5uaW5ncyBvZiBtZW1vcnkgbWV0YWRhdGEuCisKKzIwMTEtMDItMjcgMTI6MjE6MzIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZGVzaWduL2RyYWZ0LWJ1ZmZlcjIudHh0OgorCSogZ3N0L2dzdG1pbmlvYmplY3QuaDoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgZG9jczogdXBkYXRlIGRvY3MgYW5kIGRlZnMKKworMjAxMS0wMi0yNiAxODoxNDozNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSogZ3N0L2dzdGJ1ZmZlci5oOgorCSAgYnVmZmVyOiByZW1vdmUgdXNlbGVzcyBtZXRob2QKKwkgIFJlbW92ZSB0aGUgbWV0aG9kIHRvIHJldHJpZXZlIG1ldGFkYXRhIGJ5IGFwaS4gT25lIHdpbGwgYWx3YXlzIHVzZSB0aGUKKwkgIEdzdE1ldGFJbmZvIHRvIGdldCBtZXRhZGF0YS4KKworMjAxMS0wMi0yNSAxNjozMToxMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSogZ3N0L2dzdGJ1ZmZlci5oOgorCSAgYnVmZmVyOiByZW1vdmUgb3duZXJfcHJpdiBub3cgdGhhdCB3ZSBoYXZlIG1ldGFkYXRhCisJICBOb3cgdGhhdCB3ZSBoYXZlIG1ldGFkYXRhIHdlIGNhbiByZW1vdmUgdGhlIG93bmVyX3ByaXYgZmllbGQuCisKKzIwMTEtMDItMjUgMTM6MjM6MTkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgZGVmczogZml4IGRlZnMKKworMjAxMS0wMi0yNSAxMzoxNToyNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvTWFrZWZpbGUuYW06CisJKiBnc3QvZ3N0LmM6CisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBnc3QvZ3N0YnVmZmVyLmg6CisJKiBnc3QvZ3N0YnVmZmVybWV0YS5jOgorCSogZ3N0L2dzdGJ1ZmZlcm1ldGEuaDoKKwkqIGdzdC9nc3RtZXRhLmM6CisJKiBnc3QvZ3N0bWV0YS5oOgorCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVybWV0YS5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1ldGEuYzoKKwkgIG1ldGFkYXRhOiBSZW5hbWUgdG8gR3N0TWV0YQorCSAgUmVuYW1lIHRvIHRoZSBzaG9ydGVyIEdzdE1ldGEKKwkgIEFkZCBkb2NzCisJICBBZGQgYXBpIHRvIGdldCBtZXRhZGF0YSBieSBBUEkKKworMjAxMS0wMi0yNSAxMDozNzowNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBkZWZzOiBmaXggZGVmcworCisyMDEwLTExLTE1IDExOjQ5OjI0ICswMTAwICBQaGlsaXBwZSBOb3JtYW5kIDxwaGlsIGF0IGJhc2UtYXJ0Lm5ldD4KKworCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSAgYnVmZmVyOiBmaXggbWVtb3J5IGNvcnJ1cHRpb24KKworMjAxMC0wNC0wNyAxMTozNDoyMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3RidWZmZXJtZXRhLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVybWV0YS5jOgorCSAgYnVmZmVybWV0YTogZml4IGNvbXBpbGF0aW9uCisKKzIwMTAtMDItMjYgMTM6MTE6NDMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZGVzaWduL2RyYWZ0LWJ1ZmZlcjIudHh0OgorCSogZ3N0L2dzdGJ1ZmZlcm1ldGEuaDoKKwkgIHVwZGF0ZXMKKworMjAwOS0xMi0yNyAyMjowMzozMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlcm1ldGEuYzoKKwkgIG1ldGE6IGltcHJvdmUgdGVzdCBhIGxpdHRsZQorCisyMDA5LTEyLTE3IDEyOjM0OjQyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L01ha2VmaWxlLmFtOgorCSogZ3N0L2dzdC5jOgorCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSogZ3N0L2dzdGJ1ZmZlci5oOgorCSogZ3N0L2dzdGJ1ZmZlcm1ldGEuYzoKKwkqIGdzdC9nc3RidWZmZXJtZXRhLmg6CisJKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXJtZXRhLmM6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGJ1ZmZlcm1ldGE6IGFkZCBiZWdpbm5pbmdzIG9mIGJ1ZmZlciBtZXRhZGF0YQorCSAgQWRkIGZpcnN0IGltcGxlbWVudGF0aW9uIG9mIGFyYml0cmFyeSBidWZmZXIgbWV0YWRhdGEuIFdlIHVzZSBhIHNpbXBsZSBsaW5rZWQKKwkgIGxpbmtlZCBvZiBzbGljZSBhbGxvY2F0ZWQgbWV0YWRhdGEgY2h1bmtzLiBGdXR1cmUgaW1wbGVtZW50YXRpb25zIGNvdWxkIHVzZQorCSAgc29tZXRoaW5nIG1vcmUgcGVyZm9ybWFudC4KKwkgIEFkZCBnZXQsIHJlbW92ZSwgaXRlcmF0ZSBtZXRob2RzIHRvIGhhbmRsZSB0aGUgbWV0YWRhdGEuCisKKzIwMTEtMDItMjUgMTA6MTk6MjUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZGVzaWduL2RyYWZ0LWJ1ZmZlcjIudHh0OgorCSAgZGVzaWduOiBhZGQgYXBpIHRhZworCSAgV2Ugd2FudCB0byBmaW5kIG1ldGFkYXRhIGJhc2VkIG9uIHRoZSBBUEkgaXQgaW1wbGVtZW50cyBhbmQgYmFzZWQgb24gdGhlCisJICBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4KKworMjAxMS0wMi0yNCAxNzoxMTo0OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R1cmkuYzoKKwkgIHVyaTogbWFrZSB3aW4zMiBidWlsZGJvdCBoYXBweQorCSAgZ3N0dXJpLmM6ODU0OjE2OiBlcnJvcjogdW51c2VkIHZhcmlhYmxlICdhYnNfY2xlYW4nCisJICBnc3R1cmkuYzo3ODg6MTogZXJyb3I6ICdnc3RfZmlsZV91dGlsc19jYW5vbmljYWxpc2VfcGF0aCcgZGVmaW5lZCBidXQgbm90IHVzZWQKKworMjAxMS0wMi0yNCAxNTozMjowMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgorCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNyYy5jOgorCSAgZmlsZXNyYywgZmlsZXNpbms6IGZpeCBVUkkgY3JlYXRpb24gcmVncmVzc2lvbiBmb3Igbm9uLWFic29sdXRlIGxvY2F0aW9ucworCSAgUGFzc2luZyBlLmcuIGxvY2F0aW9uPWZvbyB3b3VsZCBsZWFkIHRvIHdhcm5pbmdzIGJlY2F1c2UgZ19maWxlbmFtZV90b191cmkoKQorCSAgd2FudHMgYW4gYWJzb2x1dGUgZmlsZSBwYXRoIGFuZCByZXR1cm5zIE5VTEwgb3RoZXJ3aXNlLiBVc2UgYnJhbmQtbmV3CisJICBnc3RfZmlsZW5hbWVfdG9fdXJpKCkgaW5zdGVhZCwgd2hpY2ggd2lsbCB0cnkgaGFyZGVyIHRvIGNyZWF0ZSBhIHByb3BlcgorCSAgVVJJIGZvciB1cy4KKwkgIEFsc28gYWRkIHVuaXQgdGVzdC4KKworMjAxMS0wMi0yNCAxNToxODo0MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0dXJpLmM6CisJKiBnc3QvZ3N0dXJpLmg6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIHVyaTogYWRkIGdzdF9maWxlbmFtZV90b191cmkoKSB0aGF0IHRha2VzIHJlbGF0aXZlIGZpbGVuYW1lcworCSAgQWRkIGZ1bmN0aW9uIHRoYXQgKHVubGlrZSB0aGUgR0xpYiBlcXVpdmFsZW50KSBhbHNvIGFjY2VwdHMgcGF0aHMgdGhhdAorCSAgYXJlbid0IGFic29sdXRlIGFuZCB3aWxsIGNsZWFuIHVwIHJlbGF0aXZlIG1hcmtlcnMgc3VjaCBhcyAuLyBhbmQgLi4vCisJICBiZWZvcmUgZm9ybWluZyBhIFVSSS4KKwkgIEZpeGVzIHdhcm5pbmdzIHdpdGggZS5nLiBmaWxlc3JjIGxvY2F0aW9uPWZvbyAhIHR5cGVmaW5kIGNhdXNlZCBieSB0aGUKKwkgIHJlY2VudCBzd2l0Y2ggdG8gZ19maWxlbmFtZV90b191cmkoKSwgYnV0IGFsc28gYWN0dWFsbHkgY3JlYXRlcyB2YWxpZAorCSAgVVJJcyBmb3IgdGhlIGZpcnN0IHRpbWUuCisJICBXaW5kb3dzIGNvZGUgcGF0aHMgY291bGQgbmVlZCBzb21lIG1vcmUgd29yaywgZS5nLiB3ZSBkb24ndCBjbGVhbiB1cAorCSAgdGhlIHJlbGF0aXZlIG1hcmtlcnMgdGhlcmUgZm9yIG5vdyAoYmVjYXVzZSBwYXRoIGNvdWxkIGhhdmUgXCBhbmQgLworCSAgYXMgc2VwYXJhdG9ycykuCisJICBBUEk6IGdzdF9maWxlbmFtZV90b191cmkoKQorCisyMDExLTAyLTI0IDE2OjIwOjAxICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RhYmkuYzoKKwkqIHRlc3RzL2NoZWNrL2xpYnMvbGlic2FiaS5jOgorCSAgdGVzdHM6IHJlZml4IHRoZSB0ZXN0cyAobWlzc2luZyAjZW5kaWYpCisKKzIwMTEtMDItMjQgMTY6MTE6MTcgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICBNYWtlZmlsZS5hbTogYWRkIG5ldyBhYmkgaGVhZGVycyB0byBub2Rpc3RfSEVBREVSUworCisyMDExLTAyLTIxIDExOjI0OjQ1ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKKwkqIHRvb2xzL2dzdC1sYXVuY2guYzoKKwkgIGdzdC1sYXVuY2g6IGFkZCBpbmRleCBzdXBwb3J0CisJICBXaGVuIG9wdGlvbiAiLWkiIGlzIGdpdmVuLCBzZXQgYW4gaW5kZXggb2JqZWN0IG9uIHRoZSBwaXBlbGluZSBhbmQgY29tcHV0ZQorCSAgc3RhdGlzdGljcyBmb3IgYWxsIGluZGV4IHdyaXRlcnMuIFByaW50IGEgc3VtYXJ5IHdoZW4gc2h1dHRpbmcgZG93biB0aGUKKwkgIHBpcGVsaW5lLgorCisyMDExLTAyLTI0IDE1OjEyOjE0ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHRlc3RzL2NoZWNrL2xpYnMvbGlic2FiaS5jOgorCSogdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfYXJtLmg6CisJICB0ZXN0czogYWRkIGFiaSBjaGVjayBkYXRhIGZvciBBUk0gKGxpYnMpCisKKzIwMTEtMDItMjQgMTU6MDI6MzcgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdGFiaS5jOgorCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9hcm0uaDoKKwkgIHRlc3RzOiBhZGQgYWJpIGNoZWNrIGRhdGEgZm9yIEFSTQorCisyMDExLTAyLTI0IDEzOjU1OjM1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmg6CisJICBidWZmZXI6IGFkZCBvd25lciBwcml2YXRlIGFzIGludGVybWVkaWF0ZSBzb2x1dGlvbgorCSAgQWRkIGFuIG93bmVyIHByaXZhdGUgZmllbGQgd2hlcmUgdGhlIG93bmVyIG9mIGEgYnVmZmVyIGNhbiBzdG9yZSBzb21lIGV4dHJhCisJICBpbmZvcm1hdGlvbi4gV2UgY2FuIHVzZSB0aGlzIHRvIGltcGxlbWVudCBtb3N0IG9mIHRoZSBzdWJjbGFzc2luZyB0aGF0IGhhcHBlbnMKKwkgIG5vdy4gTGF0ZXIgdGhpcyB3aWxsIGJlIHJlbW92ZWQgYW5kIHJlcGxhY2VkIGJ5IGFyYml0cmFyeSBidWZmZXIgbWV0YWRhdGEuCisKKzIwMTEtMDItMjQgMTA6Mjg6MjAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RjYXBzLmM6CisJICBjYXBzOiByZW1vdmUgcG9pc29uaW5nCisKKzIwMTEtMDItMjMgMTY6NDg6MDAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkqIGdzdC9nc3RidWZmZXJsaXN0LmM6CisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSogZ3N0L2dzdGV2ZW50LmM6CisJKiBnc3QvZ3N0bWVzc2FnZS5jOgorCSogZ3N0L2dzdG1pbmlvYmplY3QuaDoKKwkqIGdzdC9nc3RxdWVyeS5jOgorCSAgbWluaW9iamVjdDogY2xlYW51cHMKKwkgIFVzZSB0aGUgc3RvcmVkIHNpemUgaW4gdGhlIG1pbmlvYmplY3QgdG8gZnJlZSB0aGUgbWluaW9iamVjdC4KKwkgIFJlZmFjdG9yIHNvbWUgaW5pdCBtZXRob2RzLgorCisyMDExLTAyLTIzIDE1OjQzOjQ5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgorCSAgZG9jczogdXBkYXRlIHBvcnRpbmcgZ3VpZGUKKworMjAxMS0wMi0yMyAxMjo1NDoyMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKKwkgIGRvY3M6IHVwZGF0ZSBwb3J0aW5nIGd1aWRlCisKKzIwMTEtMDItMjMgMTI6NDQ6NTQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RjYXBzLmg6CisJICBjYXBzOiB3YXJuIHdoZW4gbWFrZV93cml0YWJsZSByZXN1bHQgaXMgaWdub3JlZAorCisyMDExLTAyLTIzIDEyOjA4OjAzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGRlZnM6IGZpeCBkZWZzCisKKzIwMTEtMDItMjMgMTI6MDE6NTUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3QuYzoKKwkgIGdzdDogZml4IHR5cGUgcmVnaXN0cmF0aW9uCisJICBXZSBuZWVkIHRvIGhhdmUgdGhlIHR5cGVzIG9mIHRoZSBtaW5pb2JqZWN0cyBiZWZvcmUgcmVnaXN0ZXJpbmcgdGhlCisJICB0cmFuZm9ybXMuCisKKzIwMTEtMDItMjMgMTI6MDE6MTYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgorCSAgZWxlbWVudGZhY3Rvcnk6IGltcHJvdmUgY2FwcyBzdHJpbmcgbWFuYWdlbWVudAorCisyMDExLTAyLTIzIDEyOjAwOjQyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0bWluaW9iamVjdC5jOgorCSAgbWluaW9iamVjdDogY2xlYXIgZmxhZ3MgaW4gaW5pdAorCisyMDExLTAyLTIzIDEyOjMzOjU4ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGRvY3MvZ3N0L3J1bm5pbmcueG1sOgorCSAgZG9jczogdGVsbCB0aGF0IE9SQ19DT0RFIGNhbiBjb250YWluIGEgbGlzdCBvZiBmbGFncworCisyMDExLTAyLTIzIDEwOjMxOjQ0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmg6CisJKiBnc3QvZ3N0bWluaW9iamVjdC5oOgorCSAgbWluaW9iamVjdDogZml4IGZsYWdzCisKKzIwMTEtMDItMjIgMTk6MzA6NTkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RldmVudC5jOgorCSAgZml4IGNvbXBpbGF0aW9uIGFmdGVyIHJlYmFzZQorCisyMDEwLTExLTAyIDEzOjMxOjI1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0LmM6CisJKiBnc3QvZ3N0X3ByaXZhdGUuaDoKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkqIGdzdC9nc3RidWZmZXIuaDoKKwkqIGdzdC9nc3RidWZmZXJsaXN0LmM6CisJKiBnc3QvZ3N0YnVmZmVybGlzdC5oOgorCSogZ3N0L2dzdGNhcHMuYzoKKwkqIGdzdC9nc3RjYXBzLmg6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSAgaW1wcm92ZSB0eXBlIHJlZ2lzdHJhdGlvbgorCisyMDEwLTExLTAyIDEyOjU4OjE0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgorCSogZ3N0L2dzdGNhcHMuYzoKKwkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgorCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKKwkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5jOgorCSAgZml4IGNvbXBpbGF0aW9uCisKKzIwMDktMTItMDcgMjA6MzI6MTIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXIuaDoKKwkqIGdzdC9nc3RidWZmZXJsaXN0Lmg6CisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSogZ3N0L2dzdGNhcHMuaDoKKwkqIGdzdC9nc3RldmVudC5oOgorCSogZ3N0L2dzdG1lc3NhZ2UuaDoKKwkqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6CisJKiBnc3QvZ3N0cXVlcnkuaDoKKwkgIGZpeCBtYWNyb3MKKworMjAwOS0xMi0wNSAxNToxODowOSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiBzZXQgYm94ZWQgdHlwZSBjb3JyZWN0bHkKKworMjAwOS0xMi0wNSAxNDoxNjo1NyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGNhcHMuYzoKKwkqIGdzdC9nc3RldmVudC5jOgorCSAgbWluaW9iamVjdDogc21hbGwgZml4ZXMKKwkgIE1ha2UgZGF0YWZsb3cgaGFwcGVuLgorCisyMDA5LTEyLTA0IDIzOjUyOjMyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSogZ3N0L2dzdGV2ZW50LmM6CisJKiBnc3QvZ3N0bWVzc2FnZS5jOgorCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RxdWVyeS5jOgorCSogZ3N0L2dzdHRhZ2xpc3QuYzoKKwkqIGdzdC9nc3R2YWx1ZS5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWluaW9iamVjdC5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfeDg2XzY0Lmg6CisJKiB0b29scy9nc3QtaW5zcGVjdC5jOgorCSAgbWluaW9iamVjdDogbW9yZSBib3hlZCB0eXBlIGZpeGluZworCSAgTW9yZSBtaW5pb2JqZWN0IGZpeGluZywgbGVha3MgaG9ycmlibHkgc29tZXdoZXJlLi4KKworMjAwOS0xMi0wNCAyMjozMjozOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGNhcHMuaDoKKwkqIGdzdC9nc3RldmVudC5jOgorCSogZ3N0L2dzdG1hcnNoYWwubGlzdDoKKwkqIGdzdC9nc3RtZXNzYWdlLmM6CisJKiBnc3QvZ3N0bWluaW9iamVjdC5jOgorCSogZ3N0L2dzdHBhZC5jOgorCSAgbWluaW9iamVjdDogbWFrZSBxdWVyaWVzIGEgYm94ZWQgdHlwZQorCSAgTW9yZSBtaW5pb25qZWN0IHN0dWZmLgorCisyMDA5LTEyLTAzIDIwOjQ5OjMwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSogZ3N0L2dzdGNhcHMuaDoKKwkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgorCSogZ3N0L2dzdGV2ZW50LmM6CisJKiBnc3QvZ3N0ZXZlbnQuaDoKKwkqIGdzdC9nc3RtZXNzYWdlLmM6CisJICBtZXNzYWdlczogbWFrZSBtZXNzYWdlIGEgc2ltcGxlIGJveGVkIHR5cGUKKworMjAwOS0xMi0wMiAyMToyMTo0OCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKKwkqIGdzdC9nc3RidWZmZXJsaXN0Lmg6CisJKiBnc3QvZ3N0YnVzLmM6CisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSogZ3N0L2dzdGNhcHMuaDoKKwkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6CisJKiBnc3QvZ3N0bWluaW9iamVjdC5oOgorCSAgbWluaW9iamVjdDogd29yayBvbiBtYWtpbmcgY2FwcyBhIGJveGVkIHR5cGUKKwkgIE1vcmUgd29yayBvbiBtYWtpbmcgbWluaW9iamVjdCBhIHNpbXBsZSBhbGxvY2F0ZWQgc3RydWN0LgorCisyMDA5LTExLTI5IDAwOjIxOjI0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBnc3QvZ3N0YnVmZmVyLmg6CisJKiBnc3QvZ3N0Y2Fwcy5oOgorCSogZ3N0L2dzdGV2ZW50Lmg6CisJKiBnc3QvZ3N0bWVzc2FnZS5oOgorCSogZ3N0L2dzdG1pbmlvYmplY3QuaDoKKwkqIGdzdC9nc3RxdWVyeS5oOgorCSAgbWluaW9iamVjdDogbWFrZSBtaW5pb2JqZWN0IGEgYm94ZWQgdHlwZQorCSAgRmlyc3QgYXR0ZW1wdCBhdCBtYWtpbmcgbWluaW9iamVjdCBhIHNpbXBsZSBib3hlZCB0eXBlLgorCisyMDExLTAyLTIyIDE5OjA5OjQ4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5oOgorCSAgbGliczogY2xlYW51cHMgZm9yIDAuMTEKKwkgIFJlbW92ZSBkZXByZWNhdGVkIHN0dWZmLCBmaXggcGFkZGluZywgcmVhcnJhbmdlIG1ldGhvZHMuCisKKzIwMTEtMDItMjIgMTY6MDQ6MTIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RiaW4uaDoKKwkqIGdzdC9nc3RidWZmZXIuaDoKKwkqIGdzdC9nc3RjbG9jay5jOgorCSogZ3N0L2dzdGNsb2NrLmg6CisJKiBnc3QvZ3N0ZXZlbnQuYzoKKwkqIGdzdC9nc3RldmVudC5oOgorCSogZ3N0L2dzdGluZGV4Lmg6CisJKiBnc3QvZ3N0bWVzc2FnZS5jOgorCSogZ3N0L2dzdG1lc3NhZ2UuaDoKKwkqIGdzdC9nc3RwbHVnaW4uaDoKKwkqIGdzdC9nc3RyZWdpc3RyeS5oOgorCSogZ3N0L2dzdHNlZ21lbnQuaDoKKwkqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgorCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmg6CisJKiBnc3QvZ3N0dGFzay5jOgorCSogZ3N0L2dzdHRhc2suaDoKKwkgIGNsZWFudXBzCisJICBGaXggcGFkZGluZywgcmVtb3ZlIGRlcHJlY2F0ZWQgc3ltYm9scy4KKworMjAxMS0wMi0yMiAxNTowODo1MSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQorCisyMDExLTAyLTIyIDE0OjExOjU5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCisJICBDb25mbGljdHM6CisJICBjb25maWd1cmUuYWMKKwkgIGdzdC9nc3RlbGVtZW50LmMKKwkgIGdzdC9nc3RlbGVtZW50LmgKKwkgIGdzdC9nc3RwYWQuYworCSAgZ3N0L2dzdHV0aWxzLmMKKwkgIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW0KKwkgIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtCisJICBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmFtCisJICBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvTWFrZWZpbGUuYW0KKwkgIGxpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbQorCSAgd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWYKKworMjAxMS0wMi0xNCAxODowNTowOSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSogdGVzdHMvY2hlY2svbGlicy90cmFuc2Zvcm0xLmM6CisJICBiYXNldHJhbnNmb3JtOiBCZSBzbWFydGVyIHdpdGggcGFkIGFsbG9jcworCSAgQXZvaWQgZG9pbmcgdW5uZWNlc3NhcnkgcGFkLWFsbG9jcyB3aGVuIG9uIHBhc3N0aHJvdWdoIG1vZGUuCisJICBJZiBtdWx0aXBsZSBiYXNldHJhbnNmb3JtIGVsZW1lbnRzIGFyZSBvbiBhIHBpcGVsaW5lLCB0aGV5CisJICB3b3VsZCBkbyBhIHBhZC1hbGxvYyBmb3IgZWFjaCByZWNlaXZlZCBidWZmZXIsIGVhY2ggZWxlbWVudAorCSAgd291bGQgZG8gdGhpcywgc28gd2Ugd291bGQgaGF2ZSBsb3RzIG9mIHBhZCBhbGxvY3Mgb24gdGhlCisJICBwaXBlbGluZSBmb3IgYSBzaW5nbGUgYnVmZmVyIGJlaW5nIHB1c2hlZCB0aHJvdWdoIGl0LgorCSAgVGhpcyBwYXRjaCBhdHRlbXB0cyB0byByZWR1Y2UgdGhpcyBhbW91bnQgYnkgYXZvaWRpbmcKKwkgIGRvaW5nIHBhZC1hbGxvY3MgaWYgdGhlIGVsZW1lbnQgaGFzIGFscmVhZHkgZG9uZSBpdAorCSAgYWZ0ZXIgdGhlIGxhc3QgcHVzaGVkIGJ1ZmZlci4gU28gaXQgd2lsbCBvbmx5IGJlIGFsbG93ZWQKKwkgIHRvIGRvIGEgbmV3IHBhZC1hbGxvYyBhZnRlciBpdCBoYXMgcHVzaGVkIGEgYnVmZmVyLCBzbyB3ZSBnZXQKKwkgIDF4MSBwYWQtYWxsb2MgYW5kIGJ1ZmZlciByYXRpbworCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0MjM3MworCisyMDExLTAyLTIxIDEzOjM5OjM4ICswMTAwICBQaGlsaXAgSsOkZ2Vuc3RlZHQgPHBoaWxpcGpAb3BlcmEuY29tPgorCisJKiBnc3QvZ3N0aW5kZXguYzoKKwkgIGRvY3M6IGZpeCB0eXBvIGluIGdzdF9pbmRleF9uZXcoKSBkb2NzCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQyODY5CisKKzIwMTEtMDItMjEgMTI6NDQ6MDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6CisJICBmYWtlc2luazogcHJpbnQgbmV3IE1FRElBNCBmbGFnIGFzIHdlbGwKKworMjAxMS0wMS0wMyAxMTozNzowNSArMDEwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmg6CisJKiBnc3QvZ3N0bWluaW9iamVjdC5oOgorCSAgbWluaW9iamVjdCwgYnVmZmVyOiBzdGVhbCBtaW5pb2JqZWN0IGZsYWcgZm9yIHVzZSBhcyBNRURJQTQgYnVmZmVyIGZsYWcKKwkgIFRoaXMgd2FzIHJlcXVpcmVkIHRvIGFkZCBhIG5ldyBNRURJQTQgYnVmZmVyIGZsYWcgZm9yIGluZGljYXRpbmcKKwkgIHByb2dyZXNzaXZlL21peGVkIHRlbGVjaW5lIHZpZGVvIGJ1ZmZlcnMuIFRoZXJlIGlzIG5vIHNwYWNlIGZvcgorCSAgYWRkaXRpb25hbCBmbGFncyBpbiBHc3RCdWZmZXIsIHNvIHN0ZWFsIG9uZSBmcm9tIEdzdE1pbmlPYmplY3QuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQyNjcxCisKKzIwMTEtMDItMjAgMTY6MTE6MjcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YXRvbWljcXVldWUuYzoKKwkqIGdzdC9nc3RhdG9taWNxdWV1ZS5oOgorCSAgZG9jczogYWRkIHNvbWUgbW9yZSBTaW5jZTogbWFya2VycyB0byBhdG9taWMgcXVldWUgZG9jcworCisyMDExLTAyLTIxIDExOjU1OjUwICswMTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkgIFJldmVydCAiZWxlbWVudDogQ2FsbCAtPnJlbGVhc2VfcGFkKCkgdG8gY2xlYW4gdXAgcGFkIgorCSAgVGhpcyBjb21taXQgY2hhbmdlcyB0aGUgcmVxdWVzdCBwYWQgYmVoYXZpb3VyIGZvciBwbHVnaW5zIGFuZCBhcHBsaWNhdGlvbnMuCisJICBSZW9wZW5zIEJ1ZyAjNDAyNTYyCisJICBUaGUgcHJvcGVyIGZpeCBmb3IgdGhhdCBidWcgaXMgdG8ga2VlcCB0cmFjayBvZiBjcmVhdGVkIHJlcXVlc3QgcGFkcy4KKwkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgYTVlNDRmZmZmYWE2ZDdhOGQ3YWY4ZGNiNzdlMzc5OTA5OTYyNTNhNS4KKworMjAxMS0wMi0yMSAxMDowMzoxNiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0aW5kZXguYzoKKwkgIGluZGV4OiBhZGQgRklYTUUtMC4xMTogY29tbWVudHMKKworMjAxMS0wMi0xNSAxMDo1NzowOCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0aW5kZXguYzoKKwkgIGRvY3M6IGltcHJvdmUgaW5kZXggZG9jcworCisyMDExLTAyLTE4IDE3OjA5OjE0ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGRvY3MvZGVzaWduL3BhcnQtcHJvZ3Jlc3MudHh0OgorCSAgZG9jczogc3BlbGwtY2hlY2sKKworMjAxMS0wMi0xNSAxOToxNToxNiAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKKwkgIGZha2VzaW5rOiBwcmludCBidWZmZXIgZmxhZ3MKKworMjAxMC0xMi0wNCAxODo1Mzo1NSAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJICBlbGVtZW50OiBDYWxsIC0+cmVsZWFzZV9wYWQoKSB0byBjbGVhbiB1cCBwYWQKKwkgIEZpeGVzICM2MzYwMTEgYW5kICM0MDI1NjIuCisKKzIwMTEtMDItMTcgMTQ6NTA6NDAgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdGluZGV4LmM6CisJICBpbmRleDogZml4IGNyZWF0aW9uIG9mIHdyaXRlciBpZCBmb3IgdW5wYXJlbnRlZCBwYWRzCisJICBBbHNvIGRvIHNvbWUgY2xlYW51cCBpbiB0aGUgaW1wbC4KKworMjAxMS0wMi0xNyAxMDozNDozNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R2YWx1ZS5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6CisJICB2YWx1ZTogYWRkIChkZSlzZXJpYWxpc2F0aW9uIGZ1bmN0aW9uIGZvciB1Y2hhcgorCSAgLi4gc2luY2Ugd2Ugc2FkbHkgaGF2ZSBhIHBsdWdpbiBpbiAtZ29vZCB0aGF0IGhhcyBhIHVjaGFyIHByb3BlcnR5CisJICAoY21tbGVuYykKKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDI1MjIKKworMjAxMS0wMi0xNiAxOTo1NDo1NyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGF0b21pY3F1ZXVlLmM6CisJICBhdG9taWNxdWV1ZTogZml4IGluY2x1ZGUgb3JkZXIgYXRvbWljcXVldWU6IGZpeCBpbmNsdWRlIG9yZGVyIyBQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nCisKKzIwMTAtMTAtMjggMTM6Mjc6NDMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidXMuYzoKKwkqIGdzdC9nc3RidXMuaDoKKwkgIGJ1czogbWFrZSB0aGUgYnVzIGFsbW9zdCBsb2NrZnJlZQorCSAgVXNlIG5ldyBHc3RQb2xsIGZ1bmN0aW9uYWxpdHkgdG8gd2FrZXVwIHRoZSBtYWlubG9vcC4KKwkgIFVzZSBhbiBhdG9taWMgcXVldWUgb24gdGhlIHdyaXRlciBzaWRlIHRvIHBvc3QgdGhlIG1lc3NhZ2VzLgorCSAgVGhlIHJlYWRlciBzaWRlIGl0IHByb3RlY3RlZCB3aXRoIHRoZSBsb2NrIHN0aWxsIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCBtdWx0aXBsZQorCSAgY29uY3VycmVudCByZWFkZXJzLgorCisyMDExLTAyLTE2IDE3OjIxOjUyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGRlZnM6IGZpeCBkZWZzIGZpbGUgZm9yIG5ldyBzeW1ib2xzCisKKzIwMTEtMDItMTYgMTc6MTQ6MTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RhdG9taWNxdWV1ZS5jOgorCSAgYXRvbWljcXVldWU6IHVzZSBjb3JyZWN0IGFycmF5IHNpemVzCisKKzIwMTEtMDItMTYgMTY6MjE6NTggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RhdG9taWNxdWV1ZS5jOgorCSAgYXRvbWljcXVldWU6IGZpeCBkb2NzIHNvbWUgbW9yZQorCisyMDExLTAyLTE2IDE2OjE5OjQ2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgorCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3RhdG9taWNxdWV1ZS5jOgorCSogZ3N0L2dzdGF0b21pY3F1ZXVlLmg6CisJICBhdG9taWNxdWV1ZTogYWRkIHJlZmNvdW50aW5nIGFuZCBkb2NzCisKKzIwMTEtMDItMTYgMTI6NDg6NTkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RhdG9taWNxdWV1ZS5jOgorCSAgYXRvbWljcXVldWU6IG1ha2Ugc3VyZSBhIG1pbiBpbml0aWFsX3NpemUgaXMgdXNlZAorCisyMDEwLTEwLTI4IDE2OjAyOjM5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvTWFrZWZpbGUuYW06CisJKiBnc3QvZ3N0YXRvbWljcXVldWUuYzoKKwkqIGdzdC9nc3RhdG9taWNxdWV1ZS5oOgorCSAgYXRvbWljcXVldWU6IGFkZCBhbiBhdG9taWMgcXVldWUKKwkgIEFkZCBhbiBhdG9taWMgcXVldWUuIFRoZSBxdWV1ZSBjYW4gYmUgdXNlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMgc2ltdWx0YW5lb3VzbHkKKwkgIGFuZCB3aXRob3V0IHRha2luZyBhbnkgbG9ja3Mgb3IgZG9pbmcgYW55IGJsb2NraW5nIG9wZXJhdGlvbnMuIFRoaXMgbWFrZXMgaXQKKwkgIGhpZ2hseSBzY2FsYWJsZSBmb3IgdGhpbmdzIGxpa2UgdGhlIGJ1cywgYnVmZmVycG9vbHMgYW5kIG9iamVjdCByZWN5Y2xpbmcuCisKKzIwMTEtMDItMTYgMTc6MTQ6NDYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidXMuYzoKKwkgIGNoZWNrOiBmaXggYSBsZWFrIGluIHRoZSBidXMgdW5pdCB0ZXN0CisKKzIwMTEtMDItMTYgMTc6Mjg6MTUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3QuYzoKKwkgIGRlaW5pdDogYWRkIHByb2dyZXNzIHR5cGUgY2xhc3MgdW5yZWYKKworMjAxMS0wMi0xNiAxNToxMzowNSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIHV0aWxzOiB0ZWxsIGFsc28gd2hhdCBwYWQgYSBwYWQgaXMgYWxyZWFkeSBsaW5rZWQgYWdhaW5zdAorCisyMDExLTAyLTE1IDIyOjU2OjM1ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNpbmsuYzoKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzcmMuYzoKKwkgIGZpbGV7c2luayxzcmN9OiBDaGVjayBpZiBub24tVVJJIGNoYXJhY3RlcnMgYXJlIGVzY2FwZWQsIGJ1dCBvbmx5IGZvciB0aGUgVVJJIG5vdCB0aGUgbG9jYXRpb24gcHJvcGVydHkKKworMjAxMS0wMi0xNSAyMjo0OToyNiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzaW5rLmM6CisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc3JjLmM6CisJICBmaWxle3NyYyxzaW5rfTogRml4IHVuaXQgdGVzdHMKKwkgIGZpbGVzaW5rIGFuZCBmaWxlc3JjIHNob3VsZCByZXR1cm4gZXhhY3RseSB0aGUgc2FtZSBVUkkgYXMgcGFzc2VkCisJICBhbmQgbXVzdCBub3QgZXNjYXBlIHBhdGggc2VwYXJhdG9ycy4KKworMjAxMS0wMi0xNSAyMjo0ODo0NCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKKwkgIGZpbGVzaW5rOiBGaXggZXNjYXBpbmcgb2YgVVJJcworCSAgRXNwZWNpYWxseSBkb24ndCBlc2NhcGUgLyBhcyBwYXRoIHNlcGFyYXRvcnMKKworMjAxMS0wMi0xNSAyMjowNTozMSArMDEwMCAgQW5kb25pIE1vcmFsZXMgQWxhc3RydWV5IDx5bGF0dXlhQGdtYWlsLmNvbT4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6CisJICBmaWxlc3JjOiBGaXggZXNjYXBpbmcgb2YgZmlsZSB1cmlzCisJICBGaXhlcyBidWcgIzY0MjM5My4KKworMjAxMS0wMi0xNSAxODoyNjowMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdG1lc3NhZ2UuYzoKKwkqIGdzdC9nc3RxdWFyay5jOgorCSogZ3N0L2dzdHF1YXJrLmg6CisJICBtZXNzYWdlOiBhZGQgdGltZW91dCB0byBwcm9ncmVzcyBtZXNzYWdlCisJICBBZGQgYSB0aW1lb3V0IG1lbWJlciB0byB0aGUgcHJvZ3Jlc3MgbWVzc2FnZXMgdG8gbGV0IHRoZSBhcHBsaWNhdGlvbiBrbm93IGFib3V0CisJICB0aGUgdGltZW91dCBzbyB0aGF0IGl0IGNhbiBkbyBzb21lIGd1aSB0aGluZ3Mgd2l0aCBpdC4KKworMjAxMS0wMi0xNSAxODoxNDoxNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9kZXNpZ24vcGFydC1wcm9ncmVzcy50eHQ6CisJICBkZXNpZ246IG1lbnRpb24gdGltZW91dCBpbiB0aGUgcHJvZ3Jlc3MgbWVzc2FnZQorCisyMDExLTAyLTE1IDE3OjIwOjA4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2Rlc2lnbi9kcmFmdC1wcm9ncmVzcy50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LXByb2dyZXNzLnR4dDoKKwkgIGRlc2lnbjogbWFrZSBwcm9ncmVzcyBkcmFmdCBvZmZpY2lhbAorCisyMDExLTAxLTA2IDE4OjU1OjQzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2Rlc2lnbi9kcmFmdC1wcm9ncmVzcy50eHQ6CisJKiBnc3QvZ3N0bWVzc2FnZS5jOgorCSogZ3N0L2dzdG1lc3NhZ2UuaDoKKwkqIGdzdC9nc3RxdWFyay5jOgorCSogZ3N0L2dzdHF1YXJrLmg6CisJICBtZXNzYWdlOiByZW5hbWUgY2F0ZWdvcnkgdG8gY29kZQorCisyMDExLTAxLTA2IDE1OjU4OjQ3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0bWVzc2FnZS5jOgorCSAgbWVzc2FnZTogYWRkIG5ldyBtZXNzYWdlIHF1YXJrCisKKzIwMTEtMDEtMDYgMTU6NTg6MjMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZGVzaWduL2RyYWZ0LXByb2dyZXNzLnR4dDoKKwkgIGRvY3M6IGFkZCBtb3JlIHN0YW5kYXJkIGNhdGVnb3JpZXMKKworMjAxMS0wMS0wNSAxMzo1MzowMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdC5jOgorCSAgZ3N0OiByZWdpc3RlciBuZXcgdHlwZQorCisyMDExLTAxLTA1IDEzOjQ4OjUxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWVzc2FnZS5jOgorCSAgY2hlY2s6IGFkZCBwcm9ncmVzcyBtZXNzYWdlIHVuaXQgdGVzdAorCisyMDExLTAxLTA1IDEzOjQxOjA4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdG1lc3NhZ2UuYzoKKwkqIGdzdC9nc3RtZXNzYWdlLmg6CisJKiBnc3QvZ3N0cXVhcmsuYzoKKwkqIGdzdC9nc3RxdWFyay5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBtZXNzYWdlOiBhZGQgcHJvZ3Jlc3MgbWVzc2FnZSBmdW5jdGlvbnMKKworMjAxMS0wMS0wNSAxMzozOToxOSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9kZXNpZ24vZHJhZnQtcHJvZ3Jlc3MudHh0OgorCSAgZG9jczogdXBkYXRlIHByb2dyZXNzIGZpZWxkCisJICBBdm9pZCBuYW1pbmcgdGhlIHByb2dyZXNzIGZyZWUgdGV4dCBmaWVsZCAnbWVzc2FnZScgYXMgaXQgY29uZmxpY3RzIHdpdGggdGhlCisJICBtZXNzYWdlIGl0c2VsZi4KKworMjAxMS0wMi0xNSAxNDo0Mjo1OCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IGRvbid0IHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgZmlsZSB1cHN0cmVhbSBpbiBwdWxsIG1vZGUKKwkgIC4uLiB3aGljaCBjb3VsZCBsZWFkIHRvIGEgcHJlbWF0dXJlIGVvcyBiZWluZyByZXBvcnRlZCBkb3duc3RyZWFtLAorCSAgcmF0aGVyIHRoYW4gYSBzdWNjZXNzZnVsIHBhcnRpYWwgcmVhZCB3aGljaCB3b3VsZCByZXN1bHQgd2hlbgorCSAgcGVyZm9ybWVkIGRpcmVjdGx5IG9uIGUuZy4gYmFzZXNyYy4KKworMjAxMS0wMS0yNiAxNjo0NjoyNSArMDgwMCAgQ2hlbiBSdWkgPHJ1aS5jaGVuQHRpZXRvLmNvbT4KKworCSogZ3N0L2dzdHV0aWxzLmM6CisJICB1dGlsczogcmV0dXJuIHJlYWwgZXJyb3IgaW4gY29tcGF0aWJsZSBsaW5rIGNoZWNrCisJICBXZSBuZWVkIHRvIGVuc3VyZSB3ZSBjYWxsIGdzdF9wYWRfY2hlY2tfbGluaygpIHdpdGggdGhlIHR3byBwYWRzIGluIHRoZSBjb3JyZWN0CisJICBvcmRlci4gVGhlIG9yZGVyIGRlcGVuZHMgb24gd2hldGVyIHdlIGl0ZXJhdGUgc3JjIG9yIHNpbmsgcGFkcy4KKwkgIFNpZ25lZC1vZmYtYnk6IENoZW4gUnVpIDxydWkuY2hlbkB0aWV0by5jb20+CisKKzIwMTEtMDItMTQgMTc6MzE6MjUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogQ2hlY2sgc2lua3BhZCBmb3IgZmx1c2hpbmcKKwkgIENoZWNrIHRoZSBzaW5rcGFkIGZvciB0aGUgZmx1c2hpbmcgc3RhdGUgYmVmb3JlIGNhbGxpbmcgdGhlIGNoYWluZnVuY3Rpb24gb24gdGhlCisJICBwYWQuIFdlIGRvIHRoaXMgYnkgY2hlY2tpbmcgdGhlIGNhY2hlICh3aGljaCBpcyBhbHNvIGNsZWFyZWQgb24gdGhlIHNyY3BhZCB3aGVuCisJICB0aGUgc2luayBpcyBzZXQgdG8gZmx1c2hpbmcpLgorCSAgRml4ZXMgIzY0MTkyOAorCisyMDExLTAyLTExIDE3OjQ3OjE3IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBiYXNldHJhbnNmb3JtOiBDaGVjayBmb3IgcGFkIGFsbG9jIGNhcHMgd2hlbiBzdWdnZXN0aW9uIGlzIG5vdCBmaXhlZAorCSAgSWYgYWZ0ZXIgY29tcHV0aW5nIHRoZSBzdWdnZXN0aW9uIHdpdGggZG93bnN0cmVhbSBjYXBzIHdlIHN0aWxsIGhhdmUKKwkgIGEgbm9uLWZpeGVkIHN1Z2dlc3Rpb24gY2FwcyB0cnkgdG8gaW50ZXJzZWN0IHdpdGggdGhlIGlucHV0IGNhcHMKKwkgIG9mIHRoZSBwYWQgYWxsb2MgdG8gYXZvaWQgdXNlbGVzcyByZW5lZ290aWF0aW9ucy4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDIxMzAKKworMjAxMS0wMi0xNCAxNDowMDozOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgYmFzZXNpbms6IGltcHJvdmUgZHVyYXRpb24gY2FsY3VsYXRpb24KKwkgIEtlZXAgdHJhY2sgb2YgdGhlIGF2ZXJhZ2UgZGlzdGFuY2UgYmV0d2VlbiBpbmNvbW1pbmcgdGltZXN0YW1wcyBhbmQKKwkgIHVzZSB0aGF0IHRvIGVzdGltYXRlIHRoZSBmcmFtZSBkdXJhdGlvbiB3aGVuIGJ1ZmZlcnMgaGF2ZSBubyBkdXJhdGlvbiBzZXQgb24KKwkgIHRoZW0uCisKKzIwMTEtMDItMTQgMTM6NDk6MTAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJhc2VzaW5rOiBpbXByb3ZlIHJhdGUgY2FsY3VsYXRpb24KKwkgIFdoZW4gdGhlcmUgaXMgbm8gZHVyYXRpb24gb24gaW5wdXQgYnVmZmVycywgYXNzdW1lIHRoZSByYXRlIGlzIDEuMAorCSAgaW5zdGVhZCBvZiAodGhlIHVuZGVmaW5lZCkgMC4wLgorCisyMDExLTAyLTE0IDEzOjQ3OjAyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBiYXNlc2luazogaW1wcm92ZSBhdmVyYWdlIGR1cmF0aW9uIGNhbGN1bGF0aW9uCisJICBJbXByb3ZlIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgZHVyYXRpb24uIFdoZW4gd2UgaGF2ZSBubyBpbnB1dCBkdXJhdGlvbiBzZXQgb24KKwkgIHRoZSBpbnB1dCBidWZmZXJzIHN0b3AgaXMgc2V0IHRvIHN0YXJ0IGFuZCB0aGVuIHdlIGVuZCB1cCB1c2luZyBhIDAgZHVyYXRpb24gaW4KKwkgIHRoZSBhdmVyYWdlIGNhbGN1bGF0aW9uLgorCisyMDExLTAyLTE0IDEyOjIxOjM5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBiYXNlc2luazogcmVuYW1lIHZhcmlhYmxlCisJICBSZW5hbWUgYW4gaW50ZXJuYWwgdmFyaWFibGUgdG8gYmV0dGVyIHJlZmxhY3Qgd2hhdCBpdHMgdmFsdWUgbWVhbnMuCisKKzIwMTEtMDItMTQgMTU6Mzk6MjEgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L3BhcnNlL2dyYW1tYXIueToKKwkgIHBhcnNlLWxhdW5jaDogdHJpbSB3aGl0ZXNwYWNlcworCisyMDExLTAyLTE0IDE1OjM3OjIzICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9wYXJzZS9ncmFtbWFyLnk6CisJICBwYXJzZS1sYXVuY2g6IGZpeCB0eXBvIGluIHBhZC1saXN0IGxlbmd0aCBjb21wYXJpc2lvbgorCSAgSXQgd2FzIGNvbXBhcmluZyB0aGUgbGVuZ3RoIHdpdGggaXRzZWxmLgorCSAgRml4ZXMgIzY0MjA3MS4KKworMjAxMS0wMi0xNCAxMjo1MjozMCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBjb21tb246CisJICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKKwkgIEZyb20gZjk0ZDczOSB0byAxZGU3ZjZhCisKKzIwMTEtMDItMTMgMjI6NTY6MTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0b29scy9nc3QtbGF1bmNoLmM6CisJICBnc3QtbGF1bmNoOiBwcmV0dHktcHJpbnQgZGF0ZXRpbWUgdGFncworCisyMDExLTAyLTEwIDIzOjMwOjIxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0cmVhbWVyLmRvYXA6CisJICBnc3RyZWFtZXIuZG9hcDogdXBkYXRlIG1haWxpbmcgbGlzdCBob3N0CisKKzIwMTEtMDItMTAgMTQ6NTM6MzQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJhc2VzaW5rOiBmaXggc29tZSBjb21tZW50cworCisyMDExLTAyLTEwIDE0OjUwOjA0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBiYXNlc2luazoga2VlcCB0cmFjayBvZiBlYXJsaWVzdCBRb1MgdGltZXN0YW1wCisJICBLZWVwIHRyYWNrIG9mIHRoZSBlYXJsaWVzdCBhbGxvd2VkIHRpbWVzdGFtcCBhY2NvcmRpbmcgdG8gdGhlIGxhdGVzdAorCSAgUW9TIHJlcG9ydCBhbmQgZHJvcCBidWZmZXJzIGJlZm9yZSB0aGF0IHRpbWUuIEFjdGl2YXRlIHRoaXMgZmlsdGVyCisJICB3aGVuIHRocm90dGxpbmcgaXMgZW5hYmxlZC4gV2UgY291bGQgbGF0ZXIgYWxzbyBhY3RpdmF0ZSB0aGlzIGluIHRoZQorCSAgb3RoZXIgUW9TIGNhc2VzLgorCSAgU2VlICM2Mzg4OTEKKworMjAxMS0wMi0xMCAxNDoxNzoxMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgYmFzZXNpbms6IHVzZSBuZXcgUW9TIHR5cGUKKwkgIFVzZSB0aGUgbmV3IFFvUyB0eXBlIGFuZCBzZW5kIHRocm90dGxpbmcgUW9TIG1lc3NhZ2VzLgorCisyMDExLTAyLTEwIDEzOjQyOjA1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgorCSAgYmFzZXNpbms6IGFkZCBwcm9wZXJ0eSB0byBjb25maWd1cmUgYSB0aHJvdHRsZS10aW1lCisJICBBZGQgYSBwcm9wZXJ0eSB0byBjb25maWd1cmUgdGhlIHRocm90dGxlIHRpbWUgb24gYSBzaW5rLiBUaGUKKwkgIHByb3BlcnR5IGlzIG5vdCB5ZXQgdXNlZC4KKwkgIFNlZSAjNjM4ODkxCisKKzIwMTEtMDItMTAgMTI6MDI6MDMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0LmM6CisJKiBnc3QvZ3N0ZXZlbnQuYzoKKwkqIGdzdC9nc3RldmVudC5oOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmM6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGV2ZW50OiBhZGQgUW9TIGV2ZW50IHR5cGUKKwkgIEFkZCBhIHBhcmFtZXRlciB0byB0aGUgUW9TIGV2ZW50IHRvIHNwZWNpZnkgdGhlIFFvUyBldmVudCB0eXBlLgorCSAgVXBkYXRlIGRvY3MgYW5kIGFkZCB1bml0IHRlc3QuCisJICBTZWUgIzYzODg5MQorCisyMDExLTAyLTEwIDEyOjAwOjQ3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Y2xvY2suYzoKKwkgIGNsb2NrOiBmaXggcGFyYW1ldGVyIGRvY3MKKworMjAxMS0wMi0xMCAxMDo0OToyMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9kZXNpZ24vcGFydC1xb3MudHh0OgorCSAgZGVzaWduOiB0d2VhayBkb2NzIGEgbGl0dGxlCisKKzIwMTEtMDItMTAgMTA6MzQ6NTcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZGVzaWduL3BhcnQtcW9zLnR4dDoKKwkgIGRlc2lnbjogdXBkYXRlIFFvUyBkb2N1bWVudAorCSAgQWRkIG5ldyBRb1MgdHlwZXMgYW5kIHRhbGsgYWJvdXQgdGhlIG5ldyB0aHJvdHRsZSBRb1MgbWVzc2FnZS4KKworMjAxMS0wMi0xMCAxMzo0NjowOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZGVzaWduL2RyYWZ0LWJ1ZmZlcnBvb2wudHh0OgorCSAgZG9jczogZml4IHNvbWUgdHlwb3MgaW4gdGhlIGJ1ZmZlcnBvb2wgZHJhZnQKKworMjAxMS0wMi0xMCAxMDoxOTozOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RldmVudC5jOgorCSAgZXZlbnRzOiBmaXggZy1pIGFubm90YXRpb24gZm9yIGdzdF9ldmVudF9uZXdfdGFnKCkgd2hpY2ggdGFrZXMgb3duZXJzaGlwIG9mIHRoZSB0YWcgbGlzdAorCisyMDExLTAyLTEwIDAwOjAyOjIzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9tYW51YWwvYmFzaWNzLWJpbnMueG1sOgorCSogZG9jcy9tYW51YWwvYmFzaWNzLWVsZW1lbnRzLnhtbDoKKwkqIGRvY3MvbWFudWFsL2Jhc2ljcy1wYWRzLnhtbDoKKwkqIGdzdC9nc3RiaW4uYzoKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJICBkb2NzOiBtZW50aW9uIHRoYXQgaXQncyBuZWNlc3NhcnkgdG8gc2V0IHRoZSBzdGF0ZSBvZiBlbGVtZW50cyBhZGRlZCB0byBhbiBhbHJlYWR5LXJ1bm5pbmcgcGlwZWxpbmUKKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDE2MzEKKworMjAxMS0wMi0wOSAxNjoyMjowNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9kZXNpZ24vZHJhZnQtYnVmZmVycG9vbC50eHQ6CisJICBkZXNpZ246IGFkZCBkcmFmdCBmb3IgZmlyc3QgaWRlYXMgZm9yIGEgYnVmZmVycG9vbCBmZWF0dXJlCisJICBBZGQgYSBmaXJzdCBkcmFmdCB3aXRoIHNvbWUgaWRlYXMgYW5kIHVzZSBjYXNlcyBmb3IgdGhlIGltcGxlbWVudGF0aW9uCisJICBmb3IgYnVmZmVycG9vbHMuIFRoZSBwdXJwb3NlIGlzIHRvIGJlIGFibGUgdG8gbWFrZSBlbGVtZW50cyBuZWdvdGlhdGUKKwkgIHRoZWlyIGJ1ZmZlciByZXF1aXJlbWVudHMgYXMgd2VsbCBhcyBwcm92aWRlIGFuIGluZnJhc3RydWN0dXJlIHRvCisJICBwcmVhbGxvY2F0ZSBhbmQgcmV1c2UgYnVmZmVycyBpbiBhbiBlYXN5IHdheS4KKworMjAxMS0wMi0wOSAxNToyMzoxMyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0dGFnbGlzdC5oOgorCSAgZG9jczogY2xhcmlmeSB0aGUgTk9NSU5BTF9CSVRSQVRFIGRvY3MKKwkgIFRlbGwgdGhhdCBpdHMgYSB0YXJnZXQgYml0cmF0ZSBhbmQgYWN0dWFsIHZhbHVlcyBtaWdodCBiZSBkaWZmZXJlbnQuCisKKzIwMTEtMDItMDMgMTU6MTc6MTMgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cG9sbC5jOgorCSAgcG9sbDogdHJpZ2dlciByZWJ1aWxkIHNldHVwIGluIF9uZXcKKwkgIEZhaWxpbmcgdG8gZG8gc28gaW4gdGhlIFdpbmRvd3MgY2FzZSAoaW1wbGljaXRseSB0cmlnZ2VyZWQgb3RoZXJ3aXNlKQorCSAgd291bGQgaGF2ZSBhIHN1YnNlcXVlbnQgX3dhaXQgcmV0dXJuIGltbWVkaWF0ZWx5IGxlYWRpbmcgdG8gaGlnaCBDUFUKKwkgIHVzYWdlIHRpbWVvdXQgbG9vcHMuCisJICBGaXhlcyAjNjQwNjc1LgorCisyMDExLTAyLTAzIDEwOjUzOjI3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGluZm8uYzoKKwkqIGdzdC9nc3RpbmZvLmg6CisJICBpbmZvOiBtYWtlIGFkZGluZy9yZW1vdmluZyBvZiBnc3RfZGVidWdfbG9nX2RlZmF1bHQoKSB3b3JrIHByb3Blcmx5CisJICBNYWtlIGFkZGluZy9yZW1vdmluZyBnc3RfZGVidWdfbG9nX2RlZmF1bHQoKSB3b3JrIHJlbGlhYmx5IGluIGFsbAorCSAgY2lyY3Vtc3RhbmNlcy4gVGhlIHByb2JsZW0gd2FzIHRoYXQgZGVwZW5kaW5nIG9uIHBsYXRmb3JtIGFuZCBsaW5rZXIKKwkgIGZsYWdzIHRoZSBmdW5jdGlvbiBhcmd1bWVudCBtaWdodCByZXNvbHZlIHRvIGRpZmZlcmVudCBhZGRyZXNzZXMsCisJICB3aGljaCBtYWRlIGl0IGltcG9zc2libGUgdG8gcmVtb3ZlIHRoZSBkZWZhdWx0IGxvZyBmdW5jdGlvbiBhZGRlZAorCSAgaW4gZ3N0X2luaXQoKSBmcm9tIGFwcGxpY2F0aW9uIGNvZGUgKGJlY2F1c2UgdGhlIHBvaW50ZXIgdmFsdWVzCisJICBkaWRuJ3QgbWF0Y2gpLiBUaGUgbmV3IGFwcHJvYWNoIHNob3VsZCBrZWVwIHRoaW5ncyBzaW1wbGUgYnkgcGFzc2luZworCSAgTlVMTCBmb3IgdGhlIGRlZmF1bHQgZnVuY3Rpb24sIHdoaWNoIHRoZSBjb2RlIGluIGxpYmdzdHJlYW1lciBjYW4KKwkgIHRoZW4gaGFuZGxlLgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyNTM5NgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0MDc3MQorCisyMDExLTAyLTAzIDEwOjI4OjAxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGluZm8uYzoKKwkgIFJldmVydCAiaW5mbzogdXNlIHRoZSBwdWJsaWNseSB2aXNpYmxlIGFkZHJlc3MgdG8gZml4IHRoZSB0ZXN0cyIKKwkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgZWI1NjY4N2E2ZGZkMjA3NTA3YTRjYTAwMGVhZTUzZjkzYjVlMzNlYS4KKwkgIFdoaWxlIHRoaXMgY29tbWl0IG1heSBoYXZlIGZpeGVkIGEgcHJvYmxlbSBvbiBvbmUgb2YgdGhlIGJ1aWxkIGJvdHMsCisJICBpdCBkaWRuJ3QgYWN0dWFsbHkgZml4IHRoZSBvcmlnaW5hbCBidWcgcmVwb3J0ZWQgZm9yIHdpbjMyLgorCSAgQWxzbywgaXQgY2F1c2VzIG90aGVyIHByb2JsZW1zLCBzdWNoIGFzIHRoZSBsb29rdXAgZmFpbGluZyB3aGVuCisJICBjYWxsZWQgZnJvbSBDKysgY29kZSAoZ3N0LXBob25vbiwgYW1hcm9rKS4KKwkgIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgZGlmZmVyZW50bHkuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQwNzcxCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI1Mzk2CisKKzIwMTEtMDItMDIgMTU6MzU6NDUgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSAgcXVldWUyOiBwcm9wZXJseSBpZGVudGl0eSBkZXF1ZXVlZCBldmVudCBhcyBzdWNoCisJICAuLi4gd2hpY2ggYXZvaWRzIHRlcm1pbmF0aW5nIHdpdGggRVJST1IgcmF0aGVyIHRoYW4gVU5FWFBFQ1RFRC4KKworMjAxMS0wMi0wMiAwMjowNzo1OCArMDAwMCAgUGV0ZXIgQ29sbGluZ2JvdXJuZSA8cGV0ZXJAcGNjLm1lLnVrPgorCisJKiBzY3JpcHRzL2dzdC11bmluc3RhbGxlZDoKKwkgIGdzdC11bmluc3RhbGxlZDogdXNlICRHU1RfUFJFRklYIHZhcmlhYmxlCisJICBUaGlzIG1ha2VzIGl0IGVhc2llciB0byBjaGFuZ2UgdGhlIHByZWZpeCBieSBlZGl0aW5nIHRoZSBzY3JpcHQuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQxMjEyCisKKzIwMTAtMDgtMTkgMjI6NDM6MDcgKzAzMDAgIFNyZWVyZW5qIEJhbGFjaGFuZHJhbiA8c3JlZXJlbmouYmFsYWNoYW5kcmFuQG5va2lhLmNvbT4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3R0YWdsaXN0LmM6CisJKiBnc3QvZ3N0dGFnbGlzdC5oOgorCSAgdGFnbGlzdDogYWRkIGEgbmV3ICJlbmNvZGVkLWJ5IiB0YWcKKwkgIFVzZWNhc2U6IElEM3YyIFRFTkMgKCJFbmNvZGVkIGJ5IikgZnJhbWUuCisJICBBUEk6IEdTVF9UQUdfRU5DT0RFRF9CWQorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyNzI2OAorCisyMDExLTAxLTI5IDE4OjAyOjExICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jOgorCSogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5oOgorCSAgbmV0OiB1c2Ugc29ja2xlbl90IHdoZXJlIGFwcHJvcHJpYXRlIHJhdGhlciB0aGFuIHNwZWNpZmljIHR5cGUKKwkgIEluIHBhcnRpY3VsYXIsIGZpeGVzIEN5Z3dpbiBidWlsZCB3aGVyZSBzb2NrbGVuX3QgaXMgZGVmaW5lZCBhcyBpbnQKKwkgIGluIGxpbmUgd2l0aCBuYXRpdmUgd2luMzIgYXBpIGRlZmluaXRpb24uCisKKzIwMTEtMDEtMzEgMTU6NTg6MTggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVzLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVzLmM6CisJICBidXM6IGhvbm91ciBhbnkgcGVyLXRocmVhZCBkZWZhdWx0IG1haW4gY29udGV4dCBzZXQgdmlhIGdfbWFpbl90aHJlYWRfcHVzaF90aHJlYWRfZGVmYXVsdCgpCisJICBNYWtlcyBnc3RfYnVzX2FkZF93YXRjaCgpLCBnc3RfYnVzX2FkZF93YXRjaF9mdWxsKCksIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaCgpLAorCSAgYW5kIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaF9mdWxsKCkgY29udmVuaWVuY2UgZnVuY3Rpb25zIGF1dG9tYXRpY2FsbHkgcGljayB1cAorCSAgYW55IG5vbi1kZWZhdWx0IG1haW4gY29udGV4dHMgc2V0IGZvciB0aGUgY3VycmVudCB0aHJlYWQgdmlhCisJICBnX21haW5fdGhyZWFkX3B1c2hfdGhyZWFkX2RlZmF1bHQoKS4KKworMjAxMS0wMS0yOCAxNTozNjozMyAtMDUwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6CisJICB2YWx2ZTogT25seSBzZXQgZGlzY29udCBvbiB0aGUgZmlyc3QgYnVmZmVyIGFmdGVyIGRyb3BzCisJICBSZXNldCB0aGUgZGlzY29udCBtZW1iZXIgYWZ0ZXIgc2V0dGluZyBkaXNjb250IG9uIHRoZSBmaXJzdCBidWZmZXIgYWZ0ZXIKKwkgIGRyb3BwaW5nLgorCisyMDExLTAxLTI4IDE5OjA4OjA4ICswMDAwICBCYXN0aWVuIE5vY2VyYSA8aGFkZXNzQGhhZGVzcy5uZXQ+CisKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJICBHc3RFbGVtZW50OiBGaXggd2FybmluZyB3aXRoIEdDQyA0LjYKKwkgIGdzdGVsZW1lbnQuYzogSW4gZnVuY3Rpb24g4oCYZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFk4oCZOgorCSAgZ3N0ZWxlbWVudC5jOjEwNTI6MTg6IGVycm9yOiB2YXJpYWJsZSDigJh0bXDigJkgc2V0IGJ1dCBub3QgdXNlZCBbLVdlcnJvcj11bnVzZWQtYnV0LXNldC12YXJpYWJsZV0KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDA4NTAKKworMjAxMS0wMS0yNyAwOToyODowNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKKwkgIGlkZW50aXR5OiBwcmludCB1bnNldCBidWZmZXIgdGltZXN0YW1wcyBvciBkdXJhdGlvbnMgYXMgJ25vbmUnCisJICBMaWtlIGZha2VzaW5rIGFuZCBmYWtlc3JjIGRvLgorCisyMDExLTAxLTEyIDE2OjAzOjMwICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6CisJICB0eXBlZmluZDogZG9uJ3QgdGFrZSBvYmplY3QgbG9jayBmb3IgcmVhZGluZyB0aGUgZm91bmQgY2FwcworCSAgT25jZSB3ZSBzd2l0Y2ggdG8gbm9ybWFsIG1vZGUsIHdlJ3JlIG5vdCB0eXBlZmluZGluZyBhbnltb3JlIGFuZCB0aHVzIHRoZSBjYXBzCisJICB3aWxsIG5vdCBjaGFuZ2UuIFRoZXJlZm9yZSBjYW4gYXZvaWQgdGhlIG9iamVjdCBsb2NrIGluIHRoZSBkYXRhLWZsb3cgcGF0aC4KKwkgIFRoZSBsb2NraW5nIHdhcyBhZGRlZCBpbiBvcmRlciB0byBmaXggYnVnICM2MDg4NzcuCisKKzIwMTEtMDEtMjUgMDk6Mzk6NDUgKzA4MDAgIFpoYW5nIFdhbm1pbmcgPFdhbm1pbmcuWmhhbmdAdGlldG8uY29tPgorCisJKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdGJpbi50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdGdob3N0cGFkLnR4dDoKKwkqIGRvY3MvcmFuZG9tL2NhcHM6CisJKiBkb2NzL3JhbmRvbS9vbWVnYS9UT0RPLTAuMS4wOgorCSogZG9jcy9yYW5kb20vdGhvbWFzdnMvY2FwdHVyaW5nOgorCSogZG9jcy9yYW5kb20vd3RheS9ldmVudHM6CisJKiBkb2NzL3JhbmRvbS93dGF5L2V2ZW50czM6CisJKiBkb2NzL3NsaWRlcy9vdXRsaW5lOgorCSAgZG9jczogZml4IGEgZmV3IG1vcmUgdHlwb3MKKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDA1MDIKKworMjAxMS0wMS0yNSAxODo0ODo0MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6CisJICBkb2NzOiBmbGVzaCBvdXQgdHlwZWZpbmRlbGVtZW50IGRvY3Mgc29tZSBtb3JlCisJICBNZW50aW9uIHRoYXQgaGF2ZS10eXBlIHNpZ25hbCBtYXkgYmUgZW1pdHRlZCBmcm9tIHN0cmVhbWluZworCSAgdGhyZWFkIG9yIGFwcGxpY2F0aW9uIHRocmVhZCwgYW5kIGZpeCBhIHR5cG8uCisKKzIwMTEtMDEtMTIgMTY6MDM6NTcgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkgIHR5cGVmaW5kOiBjb2RlIGFuZCBjb21tZW50IGNsZWFudXBzCisJICBNYWtlIGNvZGUgdHdvIHBsYWNlcyBvZiB0aGUgY29kZSB0aGUgcHVzaGVzIHRoZSBidWZmZXIgc3RvcmUgbW9yZSBzaW1pbGFyLiBNb3JlCisJICBjb21tZW50cyBhbmQgZGVidWcgbG9nZ2luZy4KKworMjAxMS0wMS0xMiAxMzowNTowNiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0dHJhY2UuYzoKKwkgIHRyYWNlOiBlbnN1cmUgbWVzc2FnZXMgYXJlIFwwIHRlcm1pbmF0ZWQKKworMjAxMS0wMS0xMiAxMjo1ODo0NCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmM6CisJICBuZXR0aW1lcHJvdmlkZXI6IGhhbmRsZSBpbnZhbGlkIG5ldHdvcmsgYWRkcmVzc2VzIGVhcmxpZXIKKwkgIEhhbmRsZSBpbmV0X2F0b24oKSByZXR1cm4gY29kZS4KKworMjAxMS0wMS0xMiAxMjo0NDo1OSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBsaWJzL2dzdC9jaGVjay9nc3Rjb25zaXN0ZW5jeWNoZWNrZXIuYzoKKwkgIGNoZWNrczogYWRkIGEgY29tbWVudCB0byBpbmRpY2F0ZSB0aGF0IHdlIGludGVudGlvbmFsbHkgbGVhdmUgb3V0IHRoZSAnYnJlYWsnCisKKzIwMTEtMDEtMTIgMTI6NDM6MDQgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6CisJICByZWdpc3RyeTogcmVtb3ZlIGRlYWQgY29kZQorCSAgVGhlIEdFcnJvciBpcyBvbmx5IHVzZWQgZm9yIHRoZSBtbWFwIG9wZXJhdGlvbnMuIElmIHdlIGhhdmUgYW4gZXJyb3Igd2UgaGFuZGxlCisJICBhbmQgY2xlYW4gaXQgdGhlcmUgYWxyZWFkeS4KKworMjAxMS0wMS0xMiAwOTozMzo1MyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKKwkgIGRvY3M6IHNtYWxsIGNvbnRyb2xsZXIgYXBpIGRvY3MgaW1wcm92ZW1lbnQKKworMjAxMS0wMS0xMSAxNTowOTo1MiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSAgdHlwZWZpbmQ6IGNhbm9uaWNhbGl6ZSBzaWduYWwgbmFtZQorCisyMDExLTAxLTExIDE1OjA5OjMwICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6CisJICBkb2NzOiBtZW50aW9uIGhhdmUtdHlwZSBzaWduYWwgaW4gdGhlIGRvY3MuCisKKzIwMTEtMDEtMjUgMDk6MTU6NDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0b29scy9nc3QtbGF1bmNoLjEuaW46CisJICBkb2NzOiBtaW5vciBnc3QtbGF1bmNoIG1hbiBwYWdlIGZpeAorCSAgVHJhbnNtaXR0ZXIvcmVjZWl2ZXIgcGlwZWxpbmVzIHdlcmUgbWlzbGFiZWxsZWQuIFNwb3R0ZWQgYnkgTWFqaW4uCisKKzIwMTEtMDEtMjUgMTY6MDk6MTggKzEwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlxdWV1ZS5jOgorCSAgbXVsdGlxdWV1ZSB0ZXN0OiBSZW1vdmUgd29ya2Fyb3VuZCBmb3IgcGFkX3Rhc2sgaGFuZ3MKKwkgIFJlbW92ZSBjb2RlIHRoYXQgaXNuJ3QgbmVlZGVkIGFueSBsb25nZXIsIHdoaWNoIHNldHMgdGhlIG11bHRpcXVldWUKKwkgIHRvIFBMQVlJTkcgYW5kIGJhY2sgYmVmb3JlIHVucmVmZmluZywgaW4gb3JkZXIgdG8gYXZvaWQgYSBkZWFkbG9jaworCSAgd2FpdGluZyBmb3IgZ3N0cGFkIHRhc2tzIHRoYXQgd2VyZSBuZXZlciBzdGFydGVkLiBUaGUgcHJvYmxlbSBzZWVtcworCSAgdG8gaGF2ZSBiZWVuIGZpeGVkIGxvbmcgYWdvLgorCisyMDExLTAxLTI1IDAwOjIwOjM0ICswODAwICBDYWkgWXVhbnFpbmcgPGNramFja2V0QGdtYWlsLmNvbT4KKworCSogZG9jcy9kZXNpZ24vcGFydC1NVC1yZWZjb3VudGluZy50eHQ6CisJICBkZXNpZ24gZG9jczogZml4IDIgdHlwb3MgaW4gcGFydC1NVC1yZWZjb3VudGluZworCisyMDExLTAxLTI0IDE3OjQ2OjE1ICswODAwICBZYW5nIFhpY2h1YW4gPHhpY2h1YW4ueWFuZ0B0aWV0by5jb20+CisKKwkqIGRvY3MvZGVzaWduL3BhcnQtZ3N0YmluLnR4dDoKKwkgIGRlc2lnbiBkb2NzOiBwYXJ0LWdzdGJpbi50eHQgZml4IHR5cG8KKwkgIFNpZ25lZC1vZmYtYnk6IFlhbmcgWGljaHVhbiA8eGljaHVhbi55YW5nQHRpZXRvLmNvbT4KKworMjAxMS0wMS0xOSAxNTo0ODoyNiArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZGVzaWduL3BhcnQtYmxvY2sudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1idWZmZXJsaXN0LnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtY2xvY2tzLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtZWxlbWVudC1zaW5rLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtb3ZlcnZpZXcudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1wcmVyb2xsLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtcHVzaC1wdWxsLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtc2NoZWR1bGluZy50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LXNlZWtpbmcudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1zZWdtZW50cy50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LXN0YXRlcy50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LXN0cmVhbXMudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1zeW5jaHJvbmlzYXRpb24udHh0OgorCSAgZGVzaWduIGRvY3M6IGZpeCBhIGZldyB0eXBvcyBhbmQgYSB0aGlua28KKworMjAxMS0wMS0xMSAxNzo0Mzo1NyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0Y2xvY2suYzoKKwkqIGdzdC9nc3RjbG9jay5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBjbG9jazogQVBJOiBBZGQgZnVuY3Rpb24gdG8gcmUtaW5pdCBwZXJpb2RpYyBHc3RDbG9ja0lEcworCisyMDExLTAxLTIwIDE0OjM3OjI1ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBsdWdpbmxvYWRlci5jOgorCSAgZ3N0cGx1Z2lubG9hZGVyOiBkbyBub3QgbGVhayB0aGUgZGVzY3JpcHRpb24gc3RyaW5nCisJICBUaGUgZGVzY3JpcHRpb24gc3RyaW5nIHdhcyBjaGFuZ2VkIHRvIGFuIGlubGluZWQgc3RyaW5nIGEgd2hpbGUgYmFjay4KKwkgIChCdXQ6IG5vIG5lZWQgdG8gaW50ZXJuIHRoZSBjb25zdCBzdHJpbmdzIGhlcmUsIHdlIGp1c3QgdXNlIHRoZSBpbnRlcm5pbmcKKwkgIHRvIGF2b2lkIGFsbG9jYXRpbmcgZHVwbGljYXRlcyBhbmQgbWFrZSBtZW1vcnkgbWFuYWdlbWVudCBlYXNpZXIsCisJICBzaW5jZSB0aGUgc3RyaW5ncyB3aWxsIGJlIGFyb3VuZCBmb3IgdGhlIGxpZmUtdGltZSBvZiB0aGUgYXBwIGFueXdheSkuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQwMDcxCisKKzIwMTEtMDEtMjIgMTU6MzM6NTggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkgIGJ1ZmZlcjogY2xhcmlmeSBkb2NzCisKKzIwMTEtMDEtMTEgMTA6MzM6MzIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZGVzaWduL3BhcnQtYnVmZmVyaW5nLnR4dDoKKwkgIGRlc2lnbjogdXBkYXRlIGJ1ZmZlcmluZyBkb2MKKwkgIEFkZCBzdHJhdGVnaWVzIHRvIGJ1ZmZlcmluZyBkb2MKKworMjAxMS0wMS0yNCAxMTo1MzoxMiArMDIwMCAgTWFydCBSYXVkc2VwcCA8bWFydC5yYXVkc2VwcEBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RjbG9jay5jOgorCSogZ3N0L2dzdGNsb2NrLmg6CisJICBkb2NzOiBhZGQgbWlzc2luZyAiU2luY2U6IDAuMTAuMzIiIG1hcmtlcnMgZm9yIEdzdENsb2NrCisJICBTaW5jZSB0YWdzIHdlcmUgbWlzc2luZyBmb3IgZ3N0X2Nsb2NrX3NpbmdsZV9zaG90X2lkX3JlaW5pdCgpCisJICBhbmQgR1NUX0NMT0NLX0RPTkUuCisKKzIwMTEtMDEtMjQgMTA6NTY6MjEgKzAyMDAgIE1hcnQgUmF1ZHNlcHAgPG1hcnQucmF1ZHNlcHBAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSAgZG9jczogRml4IEdzdFF1ZXVlMjpyaW5nLWJ1ZmZlci1tYXgtc2l6ZSBwcm9wZXJ0eSBTaW5jZSB0YWcgKDAuMTAuMzEsIG5vdCAwLjEwLjMwKQorCisyMDExLTAxLTI0IDEwOjI2OjQ1ICswMjAwICBNYXJ0IFJhdWRzZXBwIDxtYXJ0LnJhdWRzZXBwQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSAgZG9jczogYWRkIG1pc3NpbmcgIlNpbmNlOiAwLjEwLjMxIiBtYXJrZXIgZm9yIGdzdF9zdHJ1Y3R1cmVfZ2V0X2RhdGVfdGltZSgpCisKKzIwMTEtMDEtMjQgMTQ6MjI6MjcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvcGFyc2UtbGF1bmNoLmM6CisJICB0ZXN0czogYWRkIHVuaXQgdGVzdCBmb3IgcmVhZC1iZXlvbmQtZW5kLW9mLXN0cmluZyBidWcKKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Mzk2NzQKKworMjAxMS0wMS0yNCAxNDoxNjozNyArMDAwMCAgTWlndWVsIEFuZ2VsIENhYnJlcmEgTW95YSA8bWFkbWFjMjUwMUBnbWFpbC5jb20+CisKKwkqIGdzdC9wYXJzZS90eXBlcy5oOgorCSAgcGFyc2UtbGF1bmNoOiBkb24ndCByZWFkIHBhc3QgZW5kIG9mIHN0cmluZyBpZiBsYXN0IGNoYXJhY3RlciBpcyBhbiBlc2NhcGUgY2hhcgorCSAgV2hlbiB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgYSBwcm9wZXJ0eSB2YWx1ZSBpcyBhIGJhY2tzbGFzaAorCSAgdGhlIHVuZXNjYXBpbmcgY29kZSByZWFkcyBvbmUgYnl0ZSBwYXNzIHRoZSBlbmQgb2YgdGhlIHN0cmluZy4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Mzk2NzQKKworMjAxMS0wMS0xNCAwOToyMToyMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvbWFudWFscy5tYWs6CisJICBkb2NzOiBoYWNrIGEgY2hhcnNldD11dGYtOCBpbnRvIHB3Zy9hZG0gaHRtbCB2ZXJzaW9ucworCSAgU28gdGhlIGVuY29kaW5nIG9mIHRoZSBvcmlnaW5hbCBkb2N1bWVudCBpcyByZXNwZWN0ZWQgYW5kCisJICBkaXNwbGF5cyBwcm9wZXJseSBpbiBicm93c2VycyB3aGVyZSB0aGUgZW5jb2RpbmcgYXV0b2RldGVjdGlvbgorCSAgZmFpbHMgdG8gcmVjb2duaXNlIHRoYXQgaXQncyB1dGYtOC4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Mzk0NDgKKworMjAxMS0wMS0xMyAxNTo0MTo1MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6CisJICBjaGVjazogZG9uJ3QgbGVhayB4bWwgZmlsZSBuYW1lIGlmIEdTVF9DSEVDS19YTUwgaXMgc2V0CisJICBTcG90dGVkIGJ5IG52aW5lZXRoQGdtYWlsLmNvbQorCisyMDExLTAxLTIzIDIzOjQ1OjQwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogUkVMRUFTRToKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgorCSAgQmFjayB0byBkZXZlbG9wbWVudAorCis9PT0gcmVsZWFzZSAwLjEwLjMyID09PQorCisyMDExLTAxLTIxIDEwOjI1OjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogQ2hhbmdlTG9nOgorCSogTkVXUzoKKwkqIFJFTEVBU0U6CisJKiBjb25maWd1cmUuYWM6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgorCSogZ3N0cmVhbWVyLmRvYXA6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgorCSAgUmVsZWFzZSAwLjEwLjMyCisKKzIwMTEtMDEtMjAgMTk6MDc6MzUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJICBSZXZlcnQgImNvbmZpZ3VyZTogcmVxdWlyZSBnb2JqZWN0LWludHJvc3BlY3Rpb24gPj0gMC45LjEyIgorCSAgVGhpcyByZXZlcnRzIGNvbW1pdCAzYTU5ZDQxNmFmNmQwZjhiNjFlMjQ2MDgzMGViNmYxMTM4OTI5ZWMyLgorCSAgUmV2ZXJ0aW5nIHRoaXMsIGFzIHRoZSBmZWF0dXJlIHdlIGJ1bXBlZCB0aGUgcmVxdWlyZW1lbnQgZm9yCisJICBkaWRuJ3QgYWN0dWFsbHkgd29yayBwcm9wZXJseSBvciBoZWxwIHdpdGggdGhlIGlzc3VlIHdlIHdlcmUKKwkgIHRyeWluZyB0byBmaXggKGFuZCBpdCB3YXMgZml4ZWQgZGlmZmVyZW50bHkgaW4gdGhlIGVuZCkuCisKKzIwMTEtMDEtMTggMjI6NTE6NDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL21hbnVhbC9hZHZhbmNlZC10aHJlYWRzLnhtbDoKKwkgIGRvY3M6IGZpeCBzcGVsbGluZyBvZiAndGhyZXNob2xkJyBpbiBhcHAgZGV2IG1hbnVhbAorCisyMDExLTAxLTE4IDEwOjEwOjA1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogY29uZmlndXJlLmFjOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6CisJICAwLjEwLjMxLjQgcHJlLXJlbGVhc2UKKworMjAxMS0wMS0xOCAwOTowNDo1MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbToKKwkgIGdvYmplY3QtaW50cm9zcGVjdGlvbjogdHJ5IGhhcmRlciB0byBtYWtlIGctaXItc2Nhbm5lciB1c2UgdGhlIHJpZ2h0IGxpYmdzdHJlYW1lcgorCSAgQXBwbHkgZml4IGZyb20gbGliZ3N0YmFzZSB0byBhbGwgY29yZSBsaWJzIG5vdyB0aGF0IHdlIGtub3cgdGhhdCBpdAorCSAgd29ya3MuIFNob3VsZCBmaXggcHJvYmxlbXMgd2l0aCBnLWlyLXNjYW5uZXIgdXNpbmcgdGhlIHdyb25nCisJICAoaWUuIHN5c3RlbSkgbGliZ3N0cmVhbWVyLCBsZWFkaW5nIHRvIGxpbmtpbmcgZXJyb3JzIHN1Y2ggYXMKKwkgIHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGdzdF9jbG9ja19zaW5nbGVfc2hvdF9pZF9yZWluaXQnLgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzNzU0OQorCisyMDExLTAxLTE0IDAwOjIwOjQzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9tYW51YWxzLm1hazoKKwkqIGRvY3MvcHdnL3B3Zy54bWw6CisJICBkb2NzOiBmaXggZ2FyYmxlZCBVVEYtOCBjaGFyYWN0ZXJzIHdoZW4gZ2VuZXJhdGluZyBhcHAgZGV2IG1hbnVhbCBwcy9wZGYKKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Mzk0NDgKKworMjAxMS0wMS0xMyAyMDoxMjoxNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06CisJICBnb2JqZWN0LWludHJvc3BlY3Rpb246IGFub3RoZXIgYXR0ZW1wdCB0byBtYWtlIGctaSBmaW5kIHRoZSByaWdodCBsaWJnc3RyZWFtZXIKKwkgIFR1cm5zIG91dCBnLWkgcHV0cyB0aGUgYWRkaXRpb25hbCAtTCB3ZSBzcGVjaWZ5IGF0IHRoZSBlbmQsIGhlbHBmdWxseS4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Mzc1NDkKKworMjAxMS0wMS0xMiAxNTo0NjowMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkgIGNvbmZpZ3VyZTogcmVxdWlyZSBnb2JqZWN0LWludHJvc3BlY3Rpb24gPj0gMC45LjEyCisJICBFYXJsaWVyIHZlcnNpb25zIGRvbid0IGhvbm91ciB0aGUgLUwvLS1saWJyYXJ5LXBhdGggb3B0aW9uLAorCSAgd2hpY2ggd2UgbmVlZC4gU2VlIGNvbW1pdCA0ZDBjY2RhZCBpbiBnb2JqZWN0LWludHJvc3BlY3Rpb24gZ2l0LgorCisyMDExLTAxLTEyIDEwOjE3OjA1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbToKKwkgIGNvbnRyb2xsZXI6IHVwZGF0ZSBnLWkgaW5jbHVkZSBwYXRocyBhcyB3ZWxsIGZvciBoZWFkZXIgY2hhbmdlcworCSAgSG9wZWZ1bGx5IG1ha2VzIEx1Y2lkIGFuZCBNYXZlcmljayBidWlsZCBib3RzIGhhcHB5IGFnYWluCisKKzIwMTEtMDEtMTEgMTg6Mzk6MDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgorCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgorCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKKwkgIDAuMTAuMzEuMyBwcmUtcmVsZWFzZQorCisyMDExLTAxLTExIDE4OjM4OjM3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogcG8vTElOR1VBUzoKKwkqIHBvL2dsLnBvOgorCSogcG8vcHRfQlIucG86CisJKiBwby9zdi5wbzoKKwkgIHBvOiB1cGRhdGUgdHJhbnNsYXRpb25zCisKKzIwMTEtMDEtMTEgMTk6MjY6NDAgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KKworCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmg6CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXJwcml2YXRlLmg6CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmg6CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuaDoKKwkgIGNvbnRyb2xsZXI6IEZpeCBoZWFkZXJzIHRvIHVzZSA8ID4gaW4gI2luY2x1ZGUgc3RhdGVtZW50cworCSAgVGhlIGJlaGF2aW9yIG9mICIgIiBpbiBpbmNsdWRlIHN0YXRlbWVudHMgaXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZCAtCisJICBzZWUgdGhlIEMgc3RhbmRhcmQsIHNlY3Rpb24gNi4xMC4yIG9yCisJICBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNTkzCisKKzIwMTEtMDEtMTEgMTk6MTQ6MjggKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KKworCSogbGlicy9nc3QvbmV0L01ha2VmaWxlLmFtOgorCSAgZ3N0bmV0OiBGaXggLS1jLWluY2x1ZGUgZm9yIGdpciBnZW5lcmF0aW9uCisJICBQcmV2aW91c2x5IGl0IHdhcyAtIHByb2JhYmx5IGR1ZSB0byBjb3B5L3Bhc3RlIGVycm9yIC0gbG9va2luZyBmb3IKKwkgIGdzdGJhc2UgaGVhZGVycy4KKwkgIEl0J3MgY2hhbmdlZCBub3cgdG8gb25seSBpbmNsdWRlIHRoZSBvbmUgcHVibGljIGhlYWRlciBmb3IgZ3N0bmV0LmgKKworMjAxMS0wMS0xMSAxMzo0NzozOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9uZXQvTWFrZWZpbGUuYW06CisJICBnb2JqZWN0LWludHJvc3BlY3Rpb246IG1ha2UgZy1pci1zY2FubmVyIHRyeSBoYXJkZXIgdG8gZmluZCB0aGUgcmlnaHQgbGliZ3N0cmVhbWVyCisJICBJdCdzIG5vdCBxdWl0ZSBjbGVhciB0byBtZSB3aHkgZy1pci1zY2FubmVyIGRvZXNuJ3QgZ2V0IHRoaXMgaW5mbyBmcm9tCisJICB0aGUgcGtnLWNvbmZpZyBmaWxlLCBub3Igd2h5IGxpYnRvb2wgZG9lc24ndCBnZXQgaXQgZnJvbSB0aGUgLmxhLgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzNzU0OQorCisyMDExLTAxLTExIDEzOjA1OjEyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogcGtnY29uZmlnL2dzdHJlYW1lci1iYXNlLXVuaW5zdGFsbGVkLnBjLmluOgorCSogcGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay11bmluc3RhbGxlZC5wYy5pbjoKKwkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItY29udHJvbGxlci11bmluc3RhbGxlZC5wYy5pbjoKKwkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItZGF0YXByb3RvY29sLXVuaW5zdGFsbGVkLnBjLmluOgorCSogcGtnY29uZmlnL2dzdHJlYW1lci1uZXQtdW5pbnN0YWxsZWQucGMuaW46CisJKiBwa2djb25maWcvZ3N0cmVhbWVyLXVuaW5zdGFsbGVkLnBjLmluOgorCSAgcGtnY29uZmlnOiBhbHNvIGFkZCBsaWJkaXIgdG8gLXVuaW5zdGFsbGVkIC5wYyBmaWxlcworCSAgVGhpcyB3YXkgd2UgY2FuIGZpbmQgdGhlIHBhdGhzIHRvIHBhc3MgZS5nLiBnLWlyLXNjYW5uZXIgZm9yCisJICB1bmluc3RhbGxlZCBzZXR1cHMuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM5MDM5CisKKzIwMTEtMDEtMTEgMTU6NDk6MjMgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIGU1NzJjODcgdG8gZjk0ZDczOQorCisyMDExLTAxLTExIDE1OjEwOjMyICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuYzoKKwkgIHZhbHZlOiBmaXhlIHRoZSBwcm9wZXJ0eSBsaW5rIGFuZCB0aGUgc2ljZSBkb2NzCisKKzIwMTEtMDEtMTEgMTI6NDY6MzEgKzAwMDAgIFJhaW1vIErDpHJ2aSA8cmFpbW8uamFydmlAZ21haWwuY29tPgorCisJKiBnc3QvZ3N0cG9sbC5jOgorCSAgZ3N0cG9sbDogZml4IGNvbXBpbGVyIHdhcm5pbmcgd2l0aCBNaW5nVworCSAgZ3N0cG9sbC5jOiBJbiBmdW5jdGlvbiAnZ3N0X3BvbGxfZ2V0X3JlYWRfZ3BvbGxmZCc6CisJICBnc3Rwb2xsLmM6NjkyOjEwOiB3YXJuaW5nOiBhc3NpZ25tZW50IG1ha2VzIGludGVnZXIgZnJvbSBwb2ludGVyIHdpdGhvdXQgYSBjYXN0CisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM4OTAwCisKKzIwMTEtMDEtMTAgMTQ6Mzc6NDEgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zZWxlY3Rvci5jOgorCSAgdGVzdDogb3V0cHV0c2VsZWN0b3I6IEFkZCBhbm90aGVyIG5lZ290aWF0aW9uIHRlc3QKKwkgIEFkZHMgYW4gdW5pdCB0ZXN0IHRvIGNoZWNrIHRoYXQgdGhlIG91dHB1dC1zZWxlY3RvciB3b3JrcworCSAgd2hlbiBuZWdvdGlhdGluZyBiZWZvcmUgc3JjcGFkcyBhcmUgcmVxdWVzdGVkCisKKzIwMTEtMDEtMTAgMTQ6MTk6MTcgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6CisJICBvdXRwdXRzZWxlY3RvcjogSW1wcm92ZSBnZXQgYW5kIHNldCBjYXBzIGZ1bmN0aW9ucworCSAgSW1wcm92ZSBzaW5rIHBhZCBnZXRjYXBzIGFuZCBzZXRjYXBzIGJ5IGhhbmRsaW5nIHRoZSBjYXNlIHdoZXJlCisJICBubyBzcmMgcGFkcyBleGlzdCB5ZXQKKworMjAxMS0wMS0xMCAxNjozNToyNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSBjY2JhYTg1IHRvIGU1NzJjODcKKworMjAxMS0wMS0xMCAxNDo1Mjo0MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSA0NjQ0NWFkIHRvIGNjYmFhODUKKworMjAxMS0wMS0xMCAwOTo1OToxOSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NlbGVjdG9yLmM6CisJICB0ZXN0czogc2VsZWN0b3I6IHVucmVmIHBlZXIgcGFkCisJICBEbyBub3QgZm9yZ2V0IHRvIHVucmVmIHBlZXIncyBwYWQgb24gb3V0cHV0LXNlbGVjdG9yIG5lZ290aWF0aW9uCisJICB0ZXN0cworCisyMDExLTAxLTEwIDEzOjE4OjE2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIGJhc2VzcmM6IG1ha2Ugc3VyZSB3ZSB3YWl0IGFuZCByZWxlYXNlIHRoZSBsaXZlIGxvY2sKKwkgIE1ha2Ugc3VyZSB3ZSByZWxlYXNlIHRoZSBsaXZlIGxvY2sgYW5kIHdhaXQgaW4gYWxsIGNhc2VzIHdoZW4gd2UgbmVlZCB0byB3YWl0CisJICBmb3IgdGhlIHBsYXlpbmcgb3IgZmx1c2hpbmcgc3RhdGUgY2hhbmdlLgorCSAgRml4ZXMgIzYzNTc4NQorCisyMDExLTAxLTA4IDE0OjUyOjI3ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0cmVnaXN0cnkuYzoKKwkgIHJlZ2lzdHJ5OiBEb24ndCByZXBsYWNlIHZhbGlkIGV4aXN0aW5nIHBsdWdpbnMgYnkgYmxhY2tsaXN0ZWQgb25lcworCSAgT25seSByZXBsYWNlIGV4aXN0aW5nIHBsdWdpbnMgYnkgYmxhY2tsaXN0ZWQgb25lcyBpZiB0aGV5IGNvcnJlc3BvbmQKKwkgIHRvIHRoZSBleGFjdCBzYW1lIHBsdWdpbi4gSWYgdGhleSdyZSBub3QgdGhlIHNhbWUsIGtlZXAgdGhlIGV4aXN0aW5nCisJICB2YWxpZCBvbmUuCisJICBGaXhlcyAjNjM4OTQxCisKKzIwMTEtMDEtMDggMDI6MTk6MzEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJKiBnc3QtZWxlbWVudC1jaGVjay5tNC5pbjoKKwkqIHNjcmlwdHMvZ3N0LXVuaW5zdGFsbGVkOgorCSAgY29uZmlndXJlLCBnc3QtdW5pbnN0YWxsZWQ6IHJlbW92ZSBhIGZldyBiYXNoaXNtCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM4OTYxCisKKzIwMTEtMDEtMDcgMTI6MTM6MzcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuYXJnczoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmM6CisJKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgorCSAgMC4xMC4zMS4yIHByZS1yZWxlYXNlCisKKzIwMTEtMDEtMDcgMDI6MTg6MzcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2luZGV4ZXJzL2dzdGZpbGVpbmRleC5jOgorCSogcGx1Z2lucy9pbmRleGVycy9nc3RtZW1pbmRleC5jOgorCSAgaW5kZXhlcnM6IGZpeCB0d28gc21hbGwgbGVha3MKKwkgIGVsZW1lbnQgZmFjdG9yeSBwbHVnaW5fbmFtZXMgYXJlIGludGVybmVkIHN0cmluZ3MgdGhlc2UgZGF5cy4KKworMjAxMS0wMS0wNyAwMDo1MzoxMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSAgdGVzdHM6IG5ldmVyIGRpc2FibGUgZ19hc3NlcnQoKSBhbmQgY2FzdCBjaGVja3MgZm9yIHRoZSB1bml0IHRlc3RzCisJICBUaGUgdW5pdCB0ZXN0cyBhcmUgcmlkZGxlZCB3aXRoIGdfYXNzZXJ0KCkgYW5kIGZyaWVuZHMsIG1ha2Ugc3VyZSB3ZQorCSAgZG9uJ3QgZGlzYWJsZSBhc3NlcnQgYW5kIGNhc3QgY2hlY2tzIGZvciB0aGUgdW5pdCB0ZXN0cyBldmVuIGlmCisJICB0aGlzIGhhcyBiZWVuIHNwZWNpZmllZCBmb3IgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgYmFzZSwgZS5nLiB2aWEKKwkgIC0tZGlzYWJsZS1nbGliLWFzc2VydHMuCisKKzIwMTEtMDEtMDYgMTk6NDA6MjcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cmVnaXN0cnkuYzoKKwkgIHJlZ2lzdHJ5OiBpZ25vcmUgb2xkIGxpYmdzdHZhbHZlLnNvIGFuZCBsaWJnc3RzZWxlY3Rvci5zbyBwbHVnaW5zIHRvIG1pbmltaXplIHVwZ3JhZGUgcGFpbgorCSAgSWdub3JlIHBsdWdpbnMgd2hpY2ggaGF2ZSBiZWVuIG1vdmVkIGludG8gY29yZWVsZW1lbnRzLCBzbyBpdCdzCisJICBzdGlsbCBwb3NzaWJsZSB0byBqdXN0IHVwZ3JhZGUgR1N0cmVhbWVyIGNvcmUgd2l0aG91dCBoYXZpbmcgdG8KKwkgIHVwZ3JhZGUgdGhlIHdob2xlIHN0YWNrLgorCisyMDExLTAxLTA2IDE5OjIxOjU2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZHRlbXBsYXRlLmM6CisJICBSZXZlcnQgInBhZHRlbXBsYXRlOiBhbGxvdyBkaXNhYmxpbmJnIHRoZSB0ZW1wbGF0ZSBuYW1lIGNvbmZvcm1hbmNlIGNoZWNrcyIKKwkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgZjkwMzljMjIwNDBlMWEzOGEzNjkxYmM0ZDI5OWFmNDI3Yzk2MzI1NS4KKwkgIFdlIHVzZSAtREdfRElTQUJMRV9BU1NFUlRTIGZvciByZWxlYXNlcyBhbmQgcHJlLXJlbGVhc2VzLCBidXQKKwkgIGRvbid0IHdhbnQgdG8gZGlzYWJsZSBwYWQgbmFtZSBjaGVja2luZyBmb3IgcmVsZWFzZXMgaW4gZ2VuZXJhbCwKKwkgIEkgdGhpbmsuIE5lZWQgYSBiZXR0ZXIgc29sdXRpb24gaGVyZS4gRml4ZXMgcGFkIHVuaXQgdGVzdCBpbgorCSAgcHJlLXJlbGVhc2UvcmVsZWFzZSBtb2RlLgorCisyMDExLTAxLTA0IDEyOjQyOjUwIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KKworCSAgb3V0cHV0LXNlbGVjdG9yOiBBZGQgcGFkLW5lZ290aWF0aW9uLW1vZGUgcHJvcGVydHkKKwkgIEFkZHMgZ2V0Y2Fwcy9zZXRjYXBzIHRvIG91dHB1dC1zZWxlY3RvciBhbmQgYWRkcyBhIHByb3BlcnR5CisJICB0byBzZWxlY3Qgd2hpY2ggdHlwZSBvZiBuZWdvdGlhdGlvbiBzaG91bGQgYmUgZG9uZS4KKwkgIFRoZSBhdmFpbGFibGUgbW9kZXMgYXJlOgorCSAgKiBub25lOiAgIG5vIG5lZ290aWF0aW9uIChjdXJyZW50IGJlaGF2aW9yKSwgZ2V0Y2FwcyByZXR1cm4gQU5ZIGFuZAorCSAgc2V0Y2FwcyBhcmVuJ3Qgc2V0IG9uIGFueSBvZiB0aGUgcGVlcnMKKwkgICogYWxsOiAgICB1c2UgYWxsIHBhZHMgKGRlZmF1bHQpLCBnZXRjYXBzIHJldHVybnMgdGhlIGludGVyc2VjdGlvbiBvZgorCSAgcGVlciBwYWRzIGFuZCBzZXRjYXBzIGlzIHNldCBvbiBhbGwgcGVlcnMKKwkgICogYWN0aXZlOiBnZXRjYXBzIGFuZCBzZXRjYXBzIGFyZSBwcm94aWVkIHRvIHRoZSBhY3RpdmUgcGFkCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM4MzgxCisKKzIwMTEtMDEtMDYgMTg6MTg6MjkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKKwkgIGRvY3M6IG1lbnRpb24gZXh0cmEgaW5wdXQtc2VsZWN0b3IgcGFkIHByb3BlcnRpZXMKKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzgzODEKKworMjAxMS0wMS0wNiAxNzo0NzozOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBvL0xJTkdVQVM6CisJKiBwby9lbC5wbzoKKwkgIHBvOiB1cGRhdGUgdHJhbnNsYXRpb25zCisKKzIwMTAtMDktMjMgMTI6NDk6NTkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0aW5mby5jOgorCSAgaW5mbzogYXZvaWQgdW5uZWNlc3NhcnkgbWFsbG9jL2ZyZWUgZm9yIGVhY2ggbG9nIGZ1bmN0aW9uIGNhbGwgb24gTVNWQworCSAgQXZvaWQgdW5uZWNlc3NhcnkgbWFsbG9jL2ZyZWUgdG8gZ2V0IHRoZSBmaWxlIGJhc2VuYW1lIG9uIE1TVkMgdG8gYXZvaWQKKwkgIHVubmVjZXNzYXJ5IG92ZXJoZWFkIHdoZW4gZG9pbmcgR1NUX0RFQlVHPWZvbzo1IG9yIHNvIChzaW5jZSBpdCB3b3VsZCBiZQorCSAgZG9uZSBiZWZvcmUgdGhlIGNhdGVnb3J5IGxvZyBsZXZlbCBmaWx0ZXJpbmcpLgorCisyMDExLTAxLTA2IDE3OjI5OjQ2ICswMDAwICBjaHJpc3RpYW4gc2NoYWxsZXIgPGNocmlzdGlhbi5zY2hhbGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdHJlYW1lci5zcGVjLmluOgorCSAgVXBkYXRlIHNwZWMgZmlsZSB3aXRoIGxhdGVzdCBjaGFuZ2VzIGFuZCBlbmFibGUgR0lSCisKKzIwMTEtMDEtMDUgMTI6NTk6NDggLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJKiBnc3QvZ3N0b2JqZWN0LmM6CisJICBvYmplY3Q6IEZpeCBjcmVhdGlvbiBvZiBkZWZhdWx0IG5hbWUKKwkgIENoYW5nZSB0aGUgZml4ZWQgYWxsb2NhdGlvbiAoISkgdG8gZ19zdHJkdXBfcHJpbnRmKCkuCisKKzIwMTAtMTItMjAgMTM6MzA6NDMgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3RlbGVtZW50Lmg6CisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgR3N0RWxlbWVudDogQWRkIGEgbW9yZSBmbGV4aWJsZSB3YXkgdG8gZ2V0IHJlcXVlc3QgcGFkcy4KKwkgIFRoZSBuZXcgcmVxdWVzdF9uZXdfcGFkX2Z1bGwgdm1ldGhvZCBwcm92aWRlcyBhbiBhZGRpdGlvbmFsIGNhcHMgZmllbGQsCisJICB3aGljaCBhbGxvd3MgZWxlbWVudHMgdG8gdGFrZSBiZXR0ZXIgZGVjaXNpb24gcHJvY2Vzcy4KKwkgIEFsc28sIGFkZCBhIGdzdF9lbGVtZW50X3JlcXVlc3RfcGFkKCkgZnVuY3Rpb24gdG8gYWxsb3cgZGV2ZWxvcGVycyB0byBiZQorCSAgYWJsZSB0byBzcGVjaWZ5IHdoaWNoIHBhZCB0ZW1wbGF0ZSB0aGV5IHdhbnQgYSBwYWQgb2YuCisJICBDb252ZXJ0IGdzdHV0aWxzIHRvIHVzZSB0aGF0IG5ldyBtZXRob2QgaW5zdGVhZCBvZiB0aGUgb2xkIG9uZSB3aGVuIG1vcmUKKwkgIGVmZmljaWVudC4KKwkgIFRoaXMgaXMgdXNlZnVsIGZvciBiZWluZyBhYmxlIHRvIHJlcXVlc3QgcGFkcyBpbiBhIG1vcmUgZmxleGlibGUgd2F5LAorCSAgZXNwZWNpYWxseSB3aGVuIHRoZSBlbGVtZW50IGNhbiBwcm92aWRlIHBhZHMgd2hvc2UgY2FwcyBkZXBlbmQgb24KKwkgIHJ1bnRpbWUgY29uZmlndXJhdGlvbiBhbmQgdGhlcmVmb3JlIGNhbid0IHByb3ZpZGUgcHJlLXJlZ2lzdGVyZWQKKwkgIHBhZCB0ZW1wbGF0ZXMuCisJICBBUEk6IEdzdEVsZW1lbnQ6OnJlcXVlc3RfbmV3X3BhZF9mdWxsCisJICBBUEk6IGdzdF9lbGVtZW50X3JlcXVlc3RfcGFkCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM3MzAwCisKKzIwMTEtMDEtMDUgMTU6NTM6MjggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5oOgorCSAgaW5wdXRzZWxlY3RvcjogcmVtb3ZlICJzZWxlY3QtYWxsIiBwcm9wZXJ0eQorCSAgc2VsZWN0LWFsbCBtb2RlIGlzIGEgYml0IGJyb2tlbiAoZS5nLiBuZXdzZWdtZW50IGV2ZW50CisJICBoYW5kbGluZyksIHNvIHJlbW92ZSB0aGF0IGZvciBub3cuIFRoZSBmdW5uZWwgZWxlbWVudAorCSAgaW4gZmFyc2lnaHQgcHJvdmlkZXMgc2ltaWxhciBmdW5jdGlvbmFsaXR5LgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTUzOTA0MgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzODM4MQorCisyMDExLTAxLTA1IDE1OjM2OjU1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdC5jOgorCSAgZ3N0OiByZW1vdmUgc2FmZXR5IGNoZWNrIGZvciBHTGliIDwgMi44CisJICBEb24ndCB3b3JyeSBhYm91dCBhY2NpZGVudGFsbHkgdXNpbmcgR0xpYiA8IDIuOCBhdCBydW50aW1lIGFueW1vcmUuCisKKzIwMTEtMDEtMDUgMTE6MjY6MTMgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZGF0ZXRpbWUuYzoKKwkgIGdzdGRhdGV0aW1lOiBEaXNhYmxlIHVzYWdlIG9mIEdEYXRlVGltZSBvbiBNYWNPU1gKKwkgIEdMaWIncyBHRGF0ZVRpbWUgZG9lc24ndCBoYW5kbGUgcHJvcGVybHkgdGhlIGdtdCBvZmZzZXQuIFRoZXJlZm9yZQorCSAgdXNlIG91ciBvd24gaW50ZXJuYWwgdmVyc2lvbiBpbnN0ZWFkIG9uIE1hY09TWC4KKwkgIFNlZSBidWcgIzYzODY2NgorCisyMDExLTAxLTA1IDEwOjU2OjM3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2Rlc2lnbi9kcmFmdC1wcm9ncmVzcy50eHQ6CisJICBkZXNpZ246IG1vcmUgdXBkYXRlcyBmb3IgdGhlIHByb2dyZXNzIG1lc3NhZ2VzCisKKzIwMTEtMDEtMDQgMTg6MzY6NDEgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL3B3Zy9idWlsZGluZy1zaWduYWxzLnhtbDoKKwkgIHB3ZzogRml4IGxpbmsgdG8gR09iamVjdCBkb2N1bWVudGF0aW9uCisJICBCZXR0ZXIgaGF2ZSBnbm9tZS5vcmcgdGhhbiB2aWFncmEgOikKKworMjAxMS0wMS0wMyAyMDozMjoyMyArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwbHVnaW5sb2FkZXIuYzoKKwkgIHBsdWdpbmxvYWRlcjogQWx3YXlzIG1hcmsgcmVjZXB0aW9uIGFzIGNvbXBsZXRlIGFmdGVyIEVYSVQKKwkgIEF2b2lkcyB3YWl0aW5nIGZvcmV2ZXIgb24gZ3N0X3BvbGxfd2FpdCB3aGVuIHVzaW5nIHRoZSBzZWxlY3QKKwkgIGJhY2tlbmQuCisJICBGaXhlcyAjNjM3MDU3CisKKzIwMTEtMDEtMDQgMDA6NDg6MTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Y29uZmlnLmguaW46CisJICBnc3RpbmZvOiBkb24ndCB1c2UgcHJpbnRmIGV4dGVuc2lvbnMgaWYgR0xpYiBpc24ndCB1c2luZyB0aGUgc3lzdGVtIHByaW50ZgorCSAgTWlnaHQgaGVscCB3aXRoIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Mzg1OTkKKworMjAxMS0wMS0wMyAyMDoxOTowNSArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3Rwb2xsLmM6CisJICBnc3Rwb2xsOiBGaXggZm9yIChwKXNlbGVjdCBiYWNrZW5kCisJICBXZSBuZWVkIHRvIHJlc2V0IHRoZSByZXZlbnRzIGZpZWxkIG9mIGVhY2ggcG9sbGZkIHdoZW4gcmVhZGluZyB0aGUgcmVzdWx0cworCSAgZnJvbSBzZWxlY3QgZWxzZSB3ZSdsbCBlbmQgdXAgd2l0aCBzdHJheSBpbmZvIGZyb20gcHJldmlvdXMgY2FsbHMgdG8KKwkgIHNlbGVjdC4KKworMjAxMS0wMS0wMyAwMTowNjowNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R2YWx1ZS5jOgorCSAgZ3N0dmFsdWU6IG1ha2UgbmV3IGdzdF92YWx1ZV9saXN0X21lcmdlKCkgd29yayBwcm9wZXJseQorCSAgRml4IGZyZWVpbmcgb2YgcGFydGlhbGx5LWluaXRlZCBsaXN0IHZhbHVlIHdoZW4gYm90aCB2YWx1ZXMKKwkgIHBhc3NlZCBhcmUgZXF1YWwgYW5kIHdlIHdhbnQgdG8gcmV0dXJuIGEgc2luZ2xlIG5vbi1saXN0CisJICB2YWx1ZSBhcyByZXN1bHQuIEZpeGVzIHVuaXQgdGVzdC4gQWxzbyBmaXggdXAgZG9jcyBhIGJpdC4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Mzc3NzYKKworMjAxMC0xMi0yMSAyMzowMzoxMiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdHRhZ2xpc3QuYzoKKwkqIGdzdC9nc3R2YWx1ZS5jOgorCSogZ3N0L2dzdHZhbHVlLmg6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIHRhZ3M6IGRvbid0IHByb2R1Y2UgZHVwbGljYXRlZCBlbnRyaWVzIHdoZW4gbWVyZ2luZyBzYW1lIHZhbHVlIHR3aWNlCisJICBBZGQgYSB2YXJpYW50IG9mIGdzdF92YWx1ZV9saXN0X2NvbmNhdCgpIHRoYXQgc2tpcHMgZHVwbGljYXRlcyBhbmQgdXNlIHRoYXQgd2hlbgorCSAgbWVyZ2luZyB0YWdsaXN0cy4KKwkgIEFQSTogZ3N0X3ZhbHVlX2xpc3RfbWVyZ2UoKQorCisyMDExLTAxLTAyIDE2OjU4OjM5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJICBiYXNlc3JjLCBiYXNlc2luazogYWRkIHNvbWUgRklYTUVzIGZvciB0aGUgdHlwZSBvZiB0aGUgYmxvY2tzaXplIHByb3BlcnR5CisKKzIwMTAtMTItMzEgMTI6MDg6MTkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKKwkgIGlucHV0c2VsZWN0b3I6IG1ha2UgcGFkJ3MgZ2V0X3R5cGUgZnVuY3Rpb24gdGhyZWFkLXNhZmUKKworMjAxMC0xMi0zMSAxMTozNzo1NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0c2VsZWN0b3ItbWFyc2hhbC5saXN0OgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RzZWxlY3Rvci5jOgorCSAgY29yZWVsZW1lbnRzOiByZW1vdmUgdW51c2VkIGZpbGVzCisKKzIwMTAtMTItMzEgMTI6Mjc6NDUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKKwkgIGlucHV0c2VsZWN0b3I6IFByb3RlY3RlZCBnX29iamVjdF9ub3RpZnkoKSBjYWxscyBmb3IgdGhlIGFjdGl2ZS1wYWQgd2l0aCBhIHJlY3Vyc2l2ZSBtdXRleAorCSAgVGhpcyB3b3JrcyBhcm91bmQgYSB0aHJlYWQgc2FmZXR5IHByb2JsZW0gaW4gR0xpYiA8IDIuMjYuMCBhbmQgc2hvdWxkCisJICBiZSByZW1vdmVkIHdoZW4gd2UgZGVwZW5kIG9uIDIuMjYuMC4KKwkgIEZpeGVzIGJ1ZyAjNjA3NTEzLgorCisyMDEwLTEyLTMxIDE2OjUyOjU0ICswODAwICBaaGFuZyBXYW5taW5nIDxXYW5taW5nLlpoYW5nQHRpZXRvLmNvbT4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6CisJICB0ZXN0czogZml4IHR5cG8KKwkgIFNpZ25lZC1vZmYtYnk6IFpoYW5nIFdhbm1pbmcgPFdhbm1pbmcuWmhhbmdAdGlldG8uY29tPgorCisyMDEwLTEyLTMxIDE2OjUwOjU3ICswODAwICBaaGFuZyBXYW5taW5nIDxXYW5taW5nLlpoYW5nQHRpZXRvLmNvbT4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzoKKwkgIGdzdGZkc2luazogZml4IHR5cG8KKwkgIFNpZ25lZC1vZmYtYnk6IFpoYW5nIFdhbm1pbmcgPFdhbm1pbmcuWmhhbmdAdGlldG8uY29tPgorCisyMDEwLTEyLTMxIDE2OjUwOjE3ICswODAwICBaaGFuZyBXYW5taW5nIDxXYW5taW5nLlpoYW5nQHRpZXRvLmNvbT4KKworCSogZG9jcy9yYW5kb20vZW5zb25pYy9kcmFmdC1idWZmZXJwb29scy50eHQ6CisJICBkb2NzOiBmaXggdHlwbworCSAgU2lnbmVkLW9mZi1ieTogWmhhbmcgV2FubWluZyA8V2FubWluZy5aaGFuZ0B0aWV0by5jb20+CisKKzIwMTAtMTItMzEgMDE6MDk6NDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9pY2xlcy9vdXRwdXQtc2VsZWN0b3ItdGVzdC5jOgorCSAgdGVzdHM6IHJlbW92ZSBvdXRwdXQtc2VsZWN0b3IgdGVzdCB3aGljaCBuZWVkcyBlbGVtZW50cyBmcm9tIC1iYXNlCisJICBNb3ZlIGl0IHRvIC1iYXNlIGluc3RlYWQuCisKKzIwMTAtMTItMzEgMDA6NTk6NTMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5naXRpZ25vcmU6CisJICBjaGVja3M6IGVuYWJsZSBpbnB1dC1zZWxlY3RvciBhbmQgb3V0cHV0LXNlbGVjdG9yIHVuaXQgdGVzdHMgYWZ0ZXIgbW92ZQorCisyMDEwLTEyLTMxIDAwOjQ4OjU1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgorCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLWRvY3Muc2dtbDoKKwkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy1zZWN0aW9ucy50eHQ6CisJKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuYXJnczoKKwkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5oaWVyYXJjaHk6CisJKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuc2lnbmFsczoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgorCSAgZG9jczogYWRkIGlucHV0LXNlbGVjdG9yIGFuZCBvdXRwdXQtc2VsZWN0b3IgdG8gZG9jcworCisyMDEwLTEyLTMxIDAwOjQ1OjU0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSAgY29yZWVsZW1lbnRzOiBHU1RfQk9JTEVSUExBVEUgYWxyZWFkeSBzZXRzIHBhcmVudF9jbGFzcworCisyMDEwLTEyLTMxIDAwOjQzOjM3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6CisJICBpbnB1dC1zZWxlY3Rvciwgb3V0cHV0LXNlbGVjdG9yOiBtaW5vciBjbGVhbi11cHMKKworMjAxMC0xMi0zMCAxODo1NzoxMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUuYW06CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKKwkgIGNvcmVlbGVtZW50czogbW92ZSBpbnB1dC1zZWxlY3RvciBhbmQgb3V0cHV0LXNlbGVjdG9yIHRvIGNvcmUKKwkgIE1vdmVkIHRvIGNvcmUgZnJvbSBnc3QtcGx1Z2lucy1iYWQuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE0MzA2CisKKzIwMTAtMTEtMjQgMTI6MjI6MDEgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogdGVzdHMvaWNsZXMvb3V0cHV0LXNlbGVjdG9yLXRlc3QuYzoKKwkgIG91dHB1dC1zZWxlY3Rvci10ZXN0OiBkb24ndCBoYXJkY29kZSB2aWRlb3NpbmtzIGFuZCB1c2UgbW9yZSBjb2xvcnNwYWNlIGNvbnYuCisJICBVc2UgYXV0b3ZpZGVvc2luayBpbnN0ZWFkIG9mIGhhcmRjb2RlZCBzaW5rcy4gVXNlIGFuIGFkZGl0aW9uYWwgY29sb3JzcGFjZQorCSAgY29udmVydGVyIGJldHdlZW4gdmlkZW90ZXN0c3JjIGFuZCB0aW1lb3ZlcmxheS4KKworMjAxMC0wOS0xNyAwOTo1MjoxMiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKKwkgIG91dHB1dHNlbGVjdG9yOiBBdm9pZCBsb3NpbmcgdGhlIGxhc3RfYnVmZmVyIHdoZW4gc3dpdGNoaW5nCisJICBUaGlzIHBhdGNoIG1ha2VzIG91dHB1dHNlbGVjdG9yIHRha2UgYW4gZXh0cmEgcmVmIHdoZW4gcHVzaGluZworCSAgdGhlIGxhc3RfYnVmZmVyIHRvIGF2b2lkIGl0IGxvc2luZyBpdCBkdXJpbmcgdGhlIHN3aXRjaCBmdW5jdGlvbi4KKwkgIFRoaXMgbWFrZXMgcmVzZW5kLWxhdGVzdCBwcm9wZXJseSB3b3JrIGlmIHRoZSBhY3RpdmUtcGFkIGlzIGNoYW5nZWQKKwkgIGR1cmluZyB0aGUgc3dpdGNoIGZ1bmN0aW9uIGJ1ZmZlciBwdXNoaW5nIChvbiBhIHBhZCBwcm9iZSwgZm9yIGV4YW1wbGUpLgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyOTkxNworCisyMDEwLTA5LTE3IDA5OjQ0OjAyIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgorCSAgb3V0cHV0c2VsZWN0b3I6IFJlY2hlY2sgcGVuZGluZyBzd2l0Y2ggYWZ0ZXIgcHVzaGluZyBidWZmZXIKKwkgIFRoaXMgcGF0Y2ggbWFrZXMgb3V0cHV0LXNlbGVjdG9yIGFsd2F5cyByZWNoZWNrIGlmIHRoZXJlJ3MgYQorCSAgcGVuZGluZyBwYWQgc3dpdGNoIGFmdGVyIHB1c2hpbmcgYSBidWZmZXIsIHByZXZlbnRpbmcgdGhhdAorCSAgaXQgcHVzaGVzIGEgYnVmZmVyIG9uIHRoZSAnd3JvbmcnIHBhZC4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Mjk5MTcKKworMjAxMC0xMS0wMSAyMzowNDo0NCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKKwkgIGlucHV0c2VsZWN0b3I6IGxvZyB0aW1lcyBpbiBodW1hbiByZWFkYWJsZSBmb3JtCisKKzIwMTAtMTEtMDEgMjI6NDA6MzYgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6CisJICBpbnB1dHNlbGVjdG9yOiBtb3ZlIHJlb2NjdXJpbmcgbG9ncyB0byBMT0cgYW5kIHJlbW92ZSBhIGRvdWJsZSBpbmZvCisJICBMZXNzIGRlYnVnIHNwZXcgaW4gREVCVUcgY2F0ZWdvcnkuIE5vIG5lZWQgdG8gbG9nIHBhZCBhZ2FpbiBpZiB3ZSB1c2UKKwkgIEdTVF9MT0dfT0JKRUNUKHBhZCwuLi4pLgorCisyMDEwLTEwLTE5IDEzOjQzOjE0ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgorCSAgdmFyaW91cyAoZ3N0KTogYWRkIG1pc3NpbmcgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyBmbGFncworCSAgQ2Fub25pY2FsaXplIHByb3BlcnR5IG5hbWVzIGFzIG5lZWRlZC4KKworMjAxMC0wOS0wNiAxMTowMzowNyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKKwkgIGlucHV0c2VsZWN0b3I6IHN5bmMgd2l0aCBjb3B5IGluIC1iYXNlCisJICBVc2UgX2dldF9jYXBzX3JlZmZlZCB0byBhdm9pZCBjb3BpZXMuCisKKzIwMTAtMDgtMjQgMTE6NTA6NDcgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgorCSAgb3V0cHV0c2VsZWN0b3I6IG1vdmUgdGhlIGRlYnVnIGluaXQgdG8gdGhlIGJvaWxlcnBsYXRlIG1hY3JvCisKKzIwMTAtMDgtMjQgMTE6NTA6MDkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6CisJICBpbnB1dHNlbGVjdG9yOiB1c2UgR1NUX0JPSUxFUlBMQVRFIG1hY3JvCisKKzIwMTAtMDMtMjIgMTM6MTY6MzMgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KKworCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc2VsZWN0b3IuYzoKKwkgIEFkZCAtV3dyaXRlLXN0cmluZ3MKKwkgIGFuZCBmaXggaXRzIHdhcm5pbmdzCisKKzIwMTAtMDMtMjEgMjE6Mzk6MTggKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KKworCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc2VsZWN0b3IuYzoKKwkgIEFkZCAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1XbWlzc2luZy1wcm90b3R5cGVzIHRvIGNvbmZpZ3VyZSBmbGFncworCSAgQW5kIGZpeCBhbGwgd2FybmluZ3MKKworMjAxMC0wMy0xOCAxNzozMDoyNiArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKKwkgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzID0+IGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZQorCisyMDEwLTAxLTI1IDEyOjIxOjM0ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6CisJICBSZXZlcnQgImlucHV0c2VsZWN0b3I6IFByb3RlY3QgZ19vYmplY3Rfbm90aWZ5KCkgd2l0aCB0aGUgb2JqZWN0J3MgbXV0ZXgiCisJICBUaGlzIHJldmVydHMgY29tbWl0IDdlMDY3NjE1ZmZiNTYxNGYwNjhmNzc1M2MxMGRkZTk5YWZlNDljM2MsIGl0J3MgY2F1c2luZworCSAgZGVhZGxvY2tzIHdpdGggcGxheWJpbjIuCisKKzIwMTAtMDEtMjQgMjA6NTM6MDAgKzAxMDAgIEtpcHAgQ2Fubm9uIDxrY2Fubm9uQGxpZ28uY2FsdGVjaC5lZHU+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSAgaW5wdXRzZWxlY3RvcjogUHJvdGVjdCBnX29iamVjdF9ub3RpZnkoKSB3aXRoIHRoZSBvYmplY3QncyBtdXRleAorCSAgVGhpcyB3b3JrcyBhcm91bmQgdGhlIHRocmVhZCB1bnNhZmV0eSBvZiBnX29iamVjdF9ub3RpZnkoKQorCSAgRml4ZXMgYnVnICM2MDc1MTMuCisKKzIwMDktMTEtMDkgMTE6NDk6MTUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKKwkgIGlucHV0c2VsZWN0b3I6IFJlbW92ZSB1c2VsZXNzIHZhcmlhYmxlcyBhbmQgZml4IGEgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBjb21waWxlciB3YXJuaW5ncworCSAgTWVyZ2VkIGZyb20gZ3N0LXBsdWdpbnMtYmFzZSwgZGZkNTFhYTgyYTllMWM5OTI0Mzc1MTgzNzk2ZWFiNzBlNTc0YTIzMS4KKworMjAwOS0xMS0wOSAxMTo0ODozOSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSAgaW5wdXRzZWxlY3RvcjogTWFrZSBzdXJlIHRoYXQgcnVubmluZ190aW1lLT50aW1lc3RhbXAgY2FsY3VsYXRpb24gbmV2ZXIgYmVjb21lcyBuZWdhdGl2ZQorCSAgTWVyZ2VkIGZyb20gZ3N0LXBsdWdpbnMtYmFzZSwgZjM2NTM4NTQ1ODU4NjRhMDlkMzVlMDM3ODUzNDA3MzMyZWE2OTAxZi4KKworMjAwOS0xMS0wOSAxMTo0ODowMCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSAgaW5wdXRzZWxlY3RvcjogVXNlIHRoZSBzdGFydCB0aW1lIChpLmUuIHRpbWVzdGFtcCkgYXMgdGhlIGxhc3Qgc3RvcAorCSAgVXNpbmcgdGhlIGVuZCB0aW1lIG1ha2VzIGl0IGltcG9zc2libGUgdG8gcmVwbGFjZSBidWZmZXJzLCB3aGljaCBpcworCSAgYSBiaWcgcHJvYmxlbSBmb3Igc3VidGl0bGVzIHRoYXQgY291bGQgaGF2ZSB2ZXJ5IGxvbmcgZHVyYXRpb25zLgorCSAgTWVyZ2VkIGZyb20gZ3N0LXBsdWdpbnMtYmFzZSwgMjcwMzRiZTQ2MTEyMzFjYzU1ZmEzZDNlMjUzYmFhNDBjNmJmZjQxZC4KKworMjAwOS0xMS0wOSAxMTo0NzoxNSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSAgaW5wdXRzZWxlY3RvcjogSW1wcm92ZSBkZWJ1Z2dpbmcKKwkgIE1lcmdlZCBmcm9tIGdzdC1wbHVnaW5zLWJhc2UuCisKKzIwMDktMTEtMDUgMTM6NTM6NDYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSAgUmV2ZXJ0ICJpbnB1dHNlbGVjdG9yOiB1c2UgZ2V0X2NhcHNfcmVmZmVkKCkiCisJICBUaGlzIHJldmVydHMgY29tbWl0IDQ5ZWM0Zjc5NmEwZTNmODhhODUxNzA4NzgyYzg1M2JhZjRiMDU3MjQuCisJICBXZSBjYW4ndCB1c2UgdGhpcyBuZXcgZnVuY3Rpb24geWV0LgorCisyMDA5LTExLTA1IDEzOjI5OjU1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKKwkgIGlucHV0c2VsZWN0b3I6IHVzZSBnZXRfY2Fwc19yZWZmZWQoKQorCisyMDA5LTExLTA0IDAwOjIxOjE5ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSAgaW5wdXRzZWxlY3RvcjogYWxzbyBhZGQgaW5saW5lIHRvIHRoZSBwcm90byB0byBmaXggdGhlIGJ1aWxkCisKKzIwMDktMTEtMDMgMTg6MTQ6MTIgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSAgZ3N0OiBSZW1vdmUgZGVhZCBhc3NpZ25tZW50cyBhbmQgcmVzdWx0aW5nIHVudXNlZCB2YXJpYWJsZXMKKwkgIE1lcmdlZCBmcm9tIGdzdC1wbHVnaW5zLWJhc2UsIDhjZDFiNTIwOWI2ODk0NGUxYmU1NmNhOGJiNjllNDZkNGFiYjdhMzQuCisKKzIwMDktMTEtMDMgMTg6MTI6MjEgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKKwkgIGlucHV0c2VsZWN0b3I6IFVzZSB0aGUgc2FtZSBpdGVyYXRlIGludGVybmFsIGxpbmtzIGZ1bmN0aW9uIGFzIGluIGdzdC1wbHVnaW5zLWJhc2UKKworMjAwOS0xMS0wMyAxODoxMToxMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSAgaW5wdXQtc2VsZWN0b3I6IFJlbW92ZSBHU1RfREVCVUdfRlVOQ1BUUiB3aGVyZSB0aGV5J3JlIHBvaW50bGVzcworCSAgVGhlcmUncyBub3QgbXVjaCBwb2ludCBpbiB1c2luZyBHU1RfREVCVUdfRlVOQ1BUUiB3aXRoIEdPYmplY3QKKwkgIHZpcnR1YWwgZnVuY3Rpb25zIHN1Y2ggYXMgZ2V0X3Byb3BlcnR5LCBzZXRfcHJvcGVyeSwgZmluYWxpemUgYW5kCisJICBkaXNwb3NlLCBzaW5jZSB0aGV5J2xsIG5ldmVyIGJlIHVzZWQgYnkgYW55b25lIGFueXdheS4gU2F2ZXMgYQorCSAgZmV3IGJ5dGVzIGFuZCBwb3NzaWJseSBhIHNpeHRlZW50aCBvZiBhIHBvbGFyIGJlYXIuCisJICBNZXJnZWQgZnJvbSBnc3QtcGx1Z2lucy1iYXNlLCA2ZjRjMWFjNTgzNDFlZTE4OTIyNWQzMTNkZGZlOWFlMjRhNjVjODhjLgorCisyMDA5LTExLTAzIDE4OjA5OjU1ICswMTAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6CisJICBpbnB1dC1zZWxlY3RvcjogUmVtb3ZlIFJvbmFsZCBCdWx0amUgZnJvbSBBdXRob3JzIGZpZWxkCisJICBSZXBsYWNlZCB3aXRoICJHU3RyZWFtZXIgbWFpbnRhaW5lcnMKKwkgIDxnc3RyZWFtZXItZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PiIgb3IganVzdCByZW1vdmVkLAorCSAgZGVwZW5kaW5nIG9uIHRoZSBudW1iZXIgb2Ygb3RoZXIgYXV0aG9ycy4KKwkgIE1lcmdlZCBmcm9tIGdzdC1wbHVnaW5zLWJhc2UsIDBlOWJjNTEyNWFjYTU0NmQ3NzNlZDEwMDJkZjU3M2RkOGUyZGMxMzYuCisKKzIwMDktMTEtMDMgMTg6MDg6MDUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSAgaW5wdXRzZWxlY3Rvcjogc2V0IG91dHB1dCBjYXBzIGJlZm9yZSBwdXNoaW5nCisJICBTZXQgdGhlIG91dHB1dCBjYXBzIG9uIHRoZSBzcmNwYWQgYmVmb3JlIHB1c2hpbmcgdGhlIGJ1ZmZlciBiZWNhdXNlIGVsc2UgY29yZQorCSAgd2lsbCBkbyBhIHJhdGhlciBleHBlbnNpdmUgY2hlY2sgdG8gc2VlIGlmIHdlIGNhbiBhY3R1YWxseSBhY2NlcHQgdGhvc2UgY2FwcyBvbgorCSAgdGhlIHNyY3BhZC4KKwkgIE1lcmdlZCBmcm9tIGdzdC1wbHVnaW5zLWJhc2UsIGJkZmI0YjQ2ZDc0NmVmMjk4ZmNmNDQyNjA4NzljMzQyYWY0Y2FmYTMuCisKKzIwMDktMTEtMDMgMTg6MDY6MTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSAgaW5wdXRzZWxlY3RvcjogaW5zdGFsbCBhbiBhY2NlcHRjYXBzIGZ1bmN0aW9uCisJICBJbnN0YWxsIGEgY3VzdG9tIGFjY2VwdGNhcHMgZnVuY3Rpb24gaW5zdGVhZCBvZiB1c2luZyB0aGUgZGVmYXVsdCBleHBlbnNpdmUKKwkgIGNoZWNrLiBXZSBhY2NlcHQgd2hhdGV2ZXIgZG93bnN0cmVhbSBhY2NlcHRzIHNvIHdlIHBhc3MgYWxvbmcgdGhlIGFjY2VwdGNhcHMKKwkgIGNhbGwgdG8gdGhlIGRvd25zdHJlYW0gcGVlci4KKwkgIE1lcmdlZCBmcm9tIGdzdC1wbHVnaW5zLWJhc2UsIDViNzJmMmFkZjk5NjczOTAzNmU4ZDliNWY5MTAwNTQ1NWQxZmZhY2UuCisKKzIwMDktMTAtMjcgMTE6NTE6MDUgLTA3MDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBzb25nYmlyZG5lc3QuY29tPgorCisJKiB0ZXN0cy9pY2xlcy9vdXRwdXQtc2VsZWN0b3ItdGVzdC5jOgorCSAgUmVtb3ZlIGV4ZWN1dGFibGUgYml0cyBmcm9tIG5vbi1leGVjdXRhYmxlIGZpbGVzLgorCisyMDA5LTA5LTI1IDExOjA3OjAyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6CisJICBpbnB1dHNlbGVjdG9yOiBVc2UgbmV3IHNpbmdsZSBpdGVyYXRvciBmb3IgdGhlIGludGVybmFsbHkgbGlua2VkIHBhZHMKKwkgIFRoaXMgZml4ZXMgYSBkZWFkbG9jayBhbmQgcmVtb3ZlcyBzb21lIHVzZWxlc3MgY29kZS4KKworMjAwOS0wOC0zMSAxOTozMTo1NyArMDIwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAdGFuZGJlcmcuY29tPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6CisJICBvdXRwdXRzZWxlY3RvcjogbWFrZSBHU1RfRk9STUFUX1RJTUUgdGhlIGRlZmF1bHQgc2VnbWVudCBmb3JtYXQKKworMjAwOS0wOC0xOSAxNzowNTozMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSAgaW5wdXRzZWxlY3RvcjogVXNlIGl0ZXJhdGUgaW50ZXJuYWwgbGlua3MgaW5zdGVhZCBvZiBkZXByZWNhdGVkIGdldCBpbnRlcm5hbCBsaW5rcworCisyMDA5LTA3LTMxIDExOjI3OjAzICswMzAwICBUb21taSBNecO2aMOkbmVuIDxleHQtdG9tbWkuMS5teW9oYW5lbkBub2tpYS5jb20+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKKwkgIG91dHB1dHNlbGVjdG9yOiBjaGVjayBmb3IgcGVuZGluZyBzcmNwYWQgaW4gX2dldF9wcm9wZXJ0eSgpCisJICBJZiB0aGVyZSBpcyBhIHBlbmRpbmcgc3JjcGFkLCByZXR1cm4gaXQgaW5zdGVhZCBvZiBhY3RpdmUgc3JjcGFkCisJICBpbiBnc3Rfb3V0cHV0X3NlbGVjdG9yX2dldF9wcm9wZXJ0eSgpIGZ1bmN0aW9uLgorCisyMDA5LTA2LTEyIDEwOjE0OjI3ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKKwkgIG91dHB1dHNlbGVjdG9yOiBkbyB0aGUgcGFkX2FsbG9jIGZvciB0aGUgcGFkIHRoYXQgaXMgcGVuZGluZyBhbmQgaGF2ZSBhIGZhbGxiYWNrCisJICBXZSBzaG91bGQgZG8gdGhlIHBhZF9hbGxvYyBmb3IgdGhlIHBlbmRpbmcgcGFkIGlmIGFueSwgYXMgd2Ugd2lsbCBzd2l0Y2ggdG8gdGhhdAorCSAgcGFkIG9uIG5leHQgX2NoYWluKCkgY2FsbC4gQWxzbyBkbyBhIGZhbGxiYWNrIGFsbG9jLCBpZiB0aGVyZSBpcyBubyBvdXRwdXQgeWV0IHRvCisJICBub3QgZmFpbCBzdGF0ZSB0cmFuc2l0aW9ucyBpbiBkeW5hbWljIHBpcGVsaW5lcy4KKworMjAwOS0wNi0wMSAxNjozMTo0MiArMDMwMCAgTGFzc2UgTGF1a2thbmVuIDxleHQtbGFzc2UuMi5sYXVra2FuZW5Abm9raWEuY29tPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6CisJICBvdXRwdXQtc2VsZWN0b3I6IHNlcmlhbGl6ZSBzZXR0aW5nIGFuZCBhY3R1YWwgY2hhbmdpbmcgb2YgbmV3IGFjdGl2ZSBwYWQKKworMjAwOS0wNS0wNCAxMjoyOTo1NCArMDMwMCAgTGFzc2UgTGF1a2thbmVuIDxleHQtbGFzc2UuMi5sYXVra2FuZW5Abm9raWEuY29tPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6CisJICBvdXRwdXQtc2VsZWN0b3I6IHVucmVmIGxhdGVzdCBidWZmZXIgYWxzbyB3aGVuIHJlc2VuZGluZyBoYXMgYmVlbiBkaXNhYmxlZAorCisyMDA5LTA0LTE2IDE3OjMyOjAzICswMzAwICBMYXNzZSBMYXVra2FuZW4gPGV4dC1sYXNzZS4yLmxhdWtrYW5lbkBub2tpYS5jb20+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKKwkgIG91dHB1dC1zZWxlY3Rvcjoga2VlcCByZWYgdG8gYnVmZmVyIGZvciByZXNlbmRpbmcgb25seSBpZiBleHBsaWNpdGx5IHJlcXVlc3RlZAorCisyMDA5LTA2LTA0IDE5OjA4OjE2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKKwkgIGlucHV0c2VsZWN0b3I6IGRvbid0IGxlYWsgcGFkcyBpbiBpdGVyYXRvcgorCisyMDA5LTA2LTA0IDA4OjU2OjI5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6CisJICBpbnB1dHNlbGVjdG9yOiBOb3RpZnkgd2hlbiB0aGUgdGFncyBwcm9wZXJ0eSBvZiB0aGUgc2VsZWN0b3Igc2lua3BhZHMgY2hhbmdlcworCSAgRmlyc3QgcGFydCBvZiBidWcgIzU4NDY4Ni4KKworMjAwOS0wNS0yOCAxMDozODo1MCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmg6CisJICBzZWxlY3RvcjogcmVtb3ZlIG5vdCBuZWVkZWQgaW5zdGFuY2UgdmFyIChwcmV2aW91cyBjb21taXQpLgorCisyMDA5LTA1LTI4IDEwOjEyOjU4ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuaDoKKwkgIG91dHB1dHNlbGVjdG9yOiBpbXBsZW1lbnQgcGFkX2FsbG9jIG9uIGFjdGl2ZSBwYWQuCisKKzIwMDktMDQtMjMgMTE6MDQ6NDYgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6CisJICBpbnB1dC1zZWxlY3RvcjogRm9yd2FyZCBzZWdtZW50IGV2ZW50cyBmb3IgdGhlIGFjdGl2ZSBwYWQgaW1tZWRpYXRlbHkuCisJICBXaGVuIGEgc2VnbWVudCBldmVudCBpcyByZWNlaXZlZCBvbiB0aGUgYWN0aXZlIHBhZCwgZm9yd2FyZCBpdCBkb3duc3RyZWFtCisJICBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIGRlZmVycmluZyBpdCB1bnRpbCB0aGUgbmV4dCBkYXRhIGJ1ZmZlciBhcnJpdmVzLiBUaGlzCisJICBmaXhlcyBwcm9ibGVtcyB3aXRoIHNlZ21lbnQgdXBkYXRlcyBuZXZlciBiZWluZyBzZW50IGRvd25zdHJlYW0sIGxpa2UgdGhvc2UKKwkgIG5lZWRlZCBmb3Igc3BhcnNlIHN0cmVhbXMsIG9yIGZvciBjbG9zaW5nIHByZXZpb3VzbHkgb3BlbmVkIHNlZ21lbnRzLgorCSAgVGhpcyBmaXhlcyBwbGF5YmFjayBvZiBEVkQgbWVudXMgd2l0aCBhIHN0aWxsIHZpZGVvIGZyYW1lIGFuZCBhbiBhdWRpbyB0cmFjaywKKwkgIGZvciBleGFtcGxlLgorCSAgRml4ZXM6ICM1Nzc4NDMKKworMjAwOS0wMy0yNyAxMToyMDowMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgorCSAgb3V0cHV0c2VsZWN0b3I6IHJlc2V0IHN0YXRlIHdoZW4gZ29pbmcgdG8gUkVBRFkKKwkgIFJlc2V0IHRoZSBsYXN0LWJ1ZmZlciwgdGhlIHBlbmRpbmcgcGFkIGFuZCB0aGUgc2VnbWVudCB3aGVuIGdvaW5nIHRvIHRoZSBSRUFEWQorCSAgc3RhdGUuCisJICBGaXhlcyAjNTc2NzEyLgorCisyMDA5LTAzLTI0IDE1OjIzOjAzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKKwkgIHNlbGVjdG9yOiBtZXJnZSB0aGUgdGFncworCSAgTWVyZ2UgdGhlIHRhZ3MgcmVjZWl2ZWQgb24gdGhlIGlucHV0LXNlbGVjdG9yIHNpbmtwYWRzIGluc3RlYWQgb2Ygb25seSBrZWVwaW5nCisJICB0aGUgbGFzdCBvbmUgd2Ugc2F3LgorCisyMDA5LTAyLTI1IDExOjQ1OjA1ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSAgZG9jczogdmFyaW91cyBkb2MgZml4ZXMKKwkgIE5vIHNob3J0LWRlc2MgYXMgd2UgaGF2ZSB0aGVtIGluIHRoZSBlbGVtZW50IGRldGFpbHMuCisJICBBbHNvIGtlZXAgdGhpbmdzIChNYWtlZmlsZS5hbSBhbmQgc2VjdGlvbnMudHh0KSBzb3J0ZWQuCisJICBSZXdvcmQgYW1iaWdvdXMgcmV0dXJucy4gTm8gdGV4dCBhZnRlciBzaW5jZSBwbGVhc2UuCisKKzIwMDktMDItMTEgMTc6MjE6MjAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKKwkgIGlucHV0c2VsZWN0b3I6IEZpeCBjb21waWxhdGlvbiwgYWN0aXZhdGVfc2lua3BhZCgpIGhhcyBubyBub3RpZnkgcGFyYW1ldGVyCisKKzIwMDktMDItMTAgMTY6MjI6NTQgLTA4MDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBzb25nYmlyZG5lc3QuY29tPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKKwkgIGlucHV0LXNlbGVjdG9yOiBBY3RpdmF0ZSBhbmQgbm90aWZ5IHBhZCBiZWZvcmUgcHJvY2Vzc2luZyBldmVudHMuCisJICBFdmVudHMgc2hvdWxkIHRyaWdnZXIgcGFkIHNlbGVjdGlvbiBpZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgYW4KKwkgIGV4cGxpY2l0bHkgc2VsZWN0ZWQgcGFkLCBzbyB0aGF0IGV2ZW50cyBwcmlvciB0byBmaXJzdCBidWZmZXIgZG9uJ3QgZ2V0CisJICBsb3N0LgorCisyMDA5LTAxLTMwIDE4OjI3OjAzIC0wODAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAc29uZ2JpcmRuZXN0LmNvbT4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6CisJICBVbnJlZiBldmVudCBpZiB3ZSBkb24ndCBmb3J3YXJkIGl0LCB1bnJlZiBwYWRzIHdoZW4gZG9uZSB3aXRoIHRoZW0uCisKKzIwMDgtMTItMDQgMTc6NTE6MzcgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6IEVuc3VyZSB3ZSBlbWl0IG5vdGlmeTo6YWN0aXZlLXBhZCB3aGVuIGF1dG8tc2VsZWN0aW5nIGEgcGFkIGR1ZSB0byBpdCBoYXZpbmcgYWN0aXZpdC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSAgRW5zdXJlIHdlIGVtaXQgbm90aWZ5OjphY3RpdmUtcGFkIHdoZW4gYXV0by1zZWxlY3RpbmcgYSBwYWQKKwkgIGR1ZSB0byBpdCBoYXZpbmcgYWN0aXZpdHkgYW5kIHVzIG5vdCBoYXZpbmcgYW4gZXhpc3RpbmcgYWN0aXZlCisJICBwYWQuIEZpeGVzICM1NjMxNDcKKworMjAwOC0xMC0xNSAxNzo0NTozNyArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6IEdyYWNlZnVsbHkgaGFuZGxlIHRoZSBjYXNlcyB3aGVuIHdlIGRvbnQnIGhhdmUgb3RoZXJwYWQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6IChnc3RfaW5wdXRfc2VsZWN0b3JfZXZlbnQpLAorCSAgKGdzdF9pbnB1dF9zZWxlY3Rvcl9xdWVyeSk6CisJICBHcmFjZWZ1bGx5IGhhbmRsZSB0aGUgY2FzZXMgd2hlbiB3ZSBkb250JyBoYXZlIG90aGVycGFkLgorCSAgRml4ZXMgIzU1NjQzMAorCisyMDA4LTEwLTA3IDEzOjE0OjQwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzogQ2hvb3NlIHJpZ2h0IHBhZCBmb3Igc2VuZGluZyBldmVudHMuIEZpeGVzICM1NTUyNDQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6CisJICBDaG9vc2UgcmlnaHQgcGFkIGZvciBzZW5kaW5nIGV2ZW50cy4gRml4ZXMgIzU1NTI0NAorCisyMDA4LTA5LTA4IDIwOjI3OjIzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzogUmVzZXQgdGhlIHNlbGVjdG9yIHN0YXRlIHdoZW4gZ29pbmcgdG8gUkVBRFkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6IChnc3Rfc2VsZWN0b3JfcGFkX3Jlc2V0KSwKKwkgIChnc3RfaW5wdXRfc2VsZWN0b3JfcmVzZXQpLCAoZ3N0X2lucHV0X3NlbGVjdG9yX2NoYW5nZV9zdGF0ZSk6CisJICBSZXNldCB0aGUgc2VsZWN0b3Igc3RhdGUgd2hlbiBnb2luZyB0byBSRUFEWS4KKworMjAwOC0wOS0wMSAxMzoyMzowMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6IFJldXNlIHRoZSBnZXRfbGlua2VkX3BhZHMgZm9yIGJvdGggc291cmNlIGFuZCBzaW5rcGFkcyBiZWNhdXNlIHRoZXkgYXJlIHRoZSBzYW1lLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOiAoZ3N0X2lucHV0X3NlbGVjdG9yX2luaXQpLAorCSAgKGdzdF9pbnB1dF9zZWxlY3Rvcl9ldmVudCksIChnc3RfaW5wdXRfc2VsZWN0b3JfcXVlcnkpOgorCSAgUmV1c2UgdGhlIGdldF9saW5rZWRfcGFkcyBmb3IgYm90aCBzb3VyY2UgYW5kIHNpbmtwYWRzIGJlY2F1c2UgdGhleSBhcmUKKwkgIHRoZSBzYW1lLgorCSAgSW1wbGVtZW50IGEgY3VzdHVtIGV2ZW50IGhhbmRsZXIgYW5kIGdldCB0aGUgaW50ZXJuYWxseSBsaW5rZWQgcGFkCisJICBkaXJlY3RseSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gdGhlIGRlZmF1bHQgKHNsb3dlcikgaW1wbGVtZW50YXRpb24uCisKKzIwMDgtMDgtMjcgMTU6NDU6MTYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOiBJbXBsZW1lbnQgdGhlIExBVEVOQ1kgcXVlcnkgaW4gYSBiZXR0ZXIgd2F5IGJ5IHRha2luZyB0aGUgbGF0ZW5jeSBvZiBhbGwgc2lua3BhZHMgYW4uLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzogKGdzdF9pbnB1dF9zZWxlY3Rvcl9pbml0KSwKKwkgIChnc3RfaW5wdXRfc2VsZWN0b3JfcXVlcnkpOgorCSAgSW1wbGVtZW50IHRoZSBMQVRFTkNZIHF1ZXJ5IGluIGEgYmV0dGVyIHdheSBieSB0YWtpbmcgdGhlIGxhdGVuY3kgb2YgYWxsCisJICBzaW5rcGFkcyBhbmQgdGFraW5nIHRoZSBtaW4vbWF4IGluc3RlYWQgb2YganVzdCB0YWtpbmcgYSByYW5kb20gcGFkLgorCisyMDA4LTA4LTA1IDA5OjA1OjM1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzogTW92ZSB0aGUgc2VsZWN0LWFsbCBsb2dpYyBpbnRvIHRoZSBhY3RpdmF0aW9uIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcGFkLiBXZSB3YW50Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6IChnc3Rfc2VsZWN0b3JfcGFkX2J1ZmZlcmFsbG9jKSwKKwkgIChnc3Rfc2VsZWN0b3JfcGFkX2NoYWluKSwgKGdzdF9pbnB1dF9zZWxlY3Rvcl9nZXRjYXBzKSwKKwkgIChnc3RfaW5wdXRfc2VsZWN0b3JfYWN0aXZhdGVfc2lua3BhZCk6CisJICBNb3ZlIHRoZSBzZWxlY3QtYWxsIGxvZ2ljIGludG8gdGhlIGFjdGl2YXRpb24gb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZAorCSAgcGFkLiBXZSB3YW50IHRvIHJlbWVtYmVyIHRoZSBsYXN0IHBhZCB3aXRoIGFjdGl2aXR5IGluIHNlbGVjdC1hbGwgbW9kZS4KKwkgIEZpeCB0aGUgZ2V0Y2FwcyBmdW5jdGlvbiwgd2UgY2FuIHByb2R1Y2UgdGhlIHVuaW9uIG9mIHRoZSB1cHN0cmVhbSBjYXBzCisJICBpbiBzZWxlY3QtYWxsIG1vZGUsIG5vdCB0aGUgaW50ZXJzZWN0aW9uIGxpa2UgcHJveHlfZ2V0Y2FwcygpIGRvZXMuCisKKzIwMDgtMDYtMTkgMTM6MTg6MjQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgb3V0cHV0LXNlbGVjdG9yOiBVc2UgQk9JTEVSUExBVEUgbWFjcm8gYW5kIHVwZGF0ZSB0ZXN0IHRvIHRoZSBsYXRlc3QgYXBpIGNoYW5nZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgorCSAgKiB0ZXN0cy9pY2xlcy9vdXRwdXQtc2VsZWN0b3ItdGVzdC5jOgorCSAgVXNlIEJPSUxFUlBMQVRFIG1hY3JvIGFuZCB1cGRhdGUgdGVzdCB0byB0aGUgbGF0ZXN0IGFwaSBjaGFuZ2VzLgorCisyMDA4LTA2LTEyIDE0OjQ5OjE4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIERvIG5vdCB1c2Ugc2hvcnRfZGVzY3JpcHRpb24gaW4gc2VjdGlvbiBkb2NzIGZvciBlbGVtZW50cy4gV2UgZXh0cmFjdCB0aGVtIGZyb20gZWxlbWVudCBkZXRhaWxzIGFuZCB0aGVyZSB3aWxsIGJlIHdhci4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGV4dC9kYzEzOTQvZ3N0ZGMxMzk0LmM6CisJICAqIGV4dC9pdm9yYmlzL3ZvcmJpc2RlYy5jOgorCSAgKiBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmM6CisJICAqIGV4dC9tZXRhZGF0YS9nc3RtZXRhZGF0YWRlbXV4LmM6CisJICAqIGV4dC9teXRodHYvZ3N0bXl0aHR2c3JjLmM6CisJICAqIGV4dC90aGVvcmEvdGhlb3JhZGVjLmM6CisJICAqIGdzdC1saWJzL2dzdC9hcHAvZ3N0YXBwc2luay5jOgorCSAgKiBnc3QvYmF5ZXIvZ3N0YmF5ZXIycmdiLmM6CisJICAqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgorCSAgKiBnc3QvcmF3cGFyc2UvZ3N0YXVkaW9wYXJzZS5jOgorCSAgKiBnc3QvcmF3cGFyc2UvZ3N0dmlkZW9wYXJzZS5jOgorCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKKwkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwY2xpZW50LmM6CisJICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgorCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4LmM6CisJICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKKwkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4LmM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6CisJICAqIGdzdC92aWRlb3NpZ25hbC9nc3R2aWRlb2FuYWx5c2UuYzoKKwkgICogZ3N0L3ZpZGVvc2lnbmFsL2dzdHZpZGVvZGV0ZWN0LmM6CisJICAqIGdzdC92aWRlb3NpZ25hbC9nc3R2aWRlb21hcmsuYzoKKwkgICogc3lzL29zczQvb3NzNC1taXhlci5jOgorCSAgKiBzeXMvb3NzNC9vc3M0LXNpbmsuYzoKKwkgICogc3lzL29zczQvb3NzNC1zb3VyY2UuYzoKKwkgIERvIG5vdCB1c2Ugc2hvcnRfZGVzY3JpcHRpb24gaW4gc2VjdGlvbiBkb2NzIGZvciBlbGVtZW50cy4gV2UgZXh0cmFjdAorCSAgdGhlbSBmcm9tIGVsZW1lbnQgZGV0YWlscyBhbmQgdGhlcmUgd2lsbCBiZSB3YXJuaW5ncyBpZiB0aGV5IGRpZmZlci4KKwkgIEFsc28gZml4aW5nIHVwIHRoZSBDaGFuZ2VMb2cgb3JkZXIuCisKKzIwMDgtMDMtMjAgMTg6MTA6MjkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOiBEbyBnX29iamVjdF9ub3RpZnkoKSBvbmx5IHdoZW4gbm90IGhvbGRpbmcgdGhlIGxvY2sgdG8gZ2V0IHRoZSBwcm9wZXJ0eSBiZWNhdXNlIG90aGUuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKKwkgIChnc3RfaW5wdXRfc2VsZWN0b3Jfc2V0X2FjdGl2ZV9wYWQpLCAoZ3N0X2lucHV0X3NlbGVjdG9yX3N3aXRjaCk6CisJICBEbyBnX29iamVjdF9ub3RpZnkoKSBvbmx5IHdoZW4gbm90IGhvbGRpbmcgdGhlIGxvY2sgdG8gZ2V0IHRoZSBwcm9wZXJ0eQorCSAgYmVjYXVzZSBvdGhlcndpc2Ugd2UgcnVuIGludG8gYSBkZWFkbG9jayB3aXRoIHRoZSBkZWVwLW5vdGlmeSBoYW5kbGVycworCSAgdGhhdCBhcmUgcG9zc2libHkgaW5zdGFsbGVkLgorCisyMDA4LTAzLTIwIDE3OjQ4OjQ5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzogUmVsZWFzZSB0aGUgc2VsZWN0b3IgbG9jayB3aGVuIHBhZCBhbGxvYyBoYXBwZW5zIG9uIGEgbm9uIHNlbGVjdGVkIHBhZC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzogKGdzdF9zZWxlY3Rvcl9wYWRfY2xhc3NfaW5pdCksCisJICAoZ3N0X3NlbGVjdG9yX3BhZF9ldmVudCksIChnc3Rfc2VsZWN0b3JfcGFkX2J1ZmZlcmFsbG9jKSwKKwkgIChnc3Rfc2VsZWN0b3JfcGFkX2NoYWluKSwgKGdzdF9pbnB1dF9zZWxlY3Rvcl9zZXRfYWN0aXZlX3BhZCk6CisJICBSZWxlYXNlIHRoZSBzZWxlY3RvciBsb2NrIHdoZW4gcGFkIGFsbG9jIGhhcHBlbnMgb24gYSBub24gc2VsZWN0ZWQgcGFkLgorCisyMDA4LTAzLTIwIDE3OjA3OjA3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzogQWRkIHBhZCBwcm9wZXJ0eSB0byBjb25maWd1cmUgYmVoYXZpb3VyIG9mIHRoZSB1bnNlbGVjdGVkIHBhZCwgaXQgY2FuIHJldHVybiBPSyBvciBOLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6IChnc3Rfc2VsZWN0b3JfcGFkX2NsYXNzX2luaXQpLAorCSAgKGdzdF9zZWxlY3Rvcl9wYWRfaW5pdCksIChnc3Rfc2VsZWN0b3JfcGFkX3NldF9wcm9wZXJ0eSksCisJICAoZ3N0X3NlbGVjdG9yX3BhZF9nZXRfcHJvcGVydHkpLCAoZ3N0X3NlbGVjdG9yX3BhZF9ldmVudCksCisJICAoZ3N0X3NlbGVjdG9yX3BhZF9idWZmZXJhbGxvYyksIChnc3Rfc2VsZWN0b3JfcGFkX2NoYWluKSwKKwkgIChnc3RfaW5wdXRfc2VsZWN0b3Jfc2V0X2FjdGl2ZV9wYWQpOgorCSAgQWRkIHBhZCBwcm9wZXJ0eSB0byBjb25maWd1cmUgYmVoYXZpb3VyIG9mIHRoZSB1bnNlbGVjdGVkIHBhZCwgaXQgY2FuCisJICByZXR1cm4gT0sgb3IgTk9UX0xJTktFRCwgYmFzZWQgb24gdGhlIHVzZSBjYXNlLgorCisyMDA4LTAzLTIwIDE2OjQ4OjQ2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuKjogRmlndXJlIG91dCB0aGUgbG9ja2luZyBhIGJpdCBtb3JlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSAgKGdzdF9zZWxlY3Rvcl9wYWRfZ2V0X3J1bm5pbmdfdGltZSksIChnc3Rfc2VsZWN0b3JfcGFkX3Jlc2V0KSwKKwkgIChnc3Rfc2VsZWN0b3JfcGFkX2V2ZW50KSwgKGdzdF9zZWxlY3Rvcl9wYWRfYnVmZmVyYWxsb2MpLAorCSAgKGdzdF9pbnB1dF9zZWxlY3Rvcl93YWl0KSwgKGdzdF9zZWxlY3Rvcl9wYWRfY2hhaW4pLAorCSAgKGdzdF9pbnB1dF9zZWxlY3Rvcl9jbGFzc19pbml0KSwgKGdzdF9pbnB1dF9zZWxlY3Rvcl9pbml0KSwKKwkgIChnc3RfaW5wdXRfc2VsZWN0b3JfZGlzcG9zZSksIChnc3Rfc2VnbWVudF9zZXRfc3RhcnQpLAorCSAgKGdzdF9pbnB1dF9zZWxlY3Rvcl9zZXRfYWN0aXZlX3BhZCksCisJICAoZ3N0X2lucHV0X3NlbGVjdG9yX3NldF9wcm9wZXJ0eSksCisJICAoZ3N0X2lucHV0X3NlbGVjdG9yX2dldF9wcm9wZXJ0eSksCisJICAoZ3N0X2lucHV0X3NlbGVjdG9yX2dldF9saW5rZWRfcGFkKSwKKwkgIChnc3RfaW5wdXRfc2VsZWN0b3JfaXNfYWN0aXZlX3NpbmtwYWQpLAorCSAgKGdzdF9pbnB1dF9zZWxlY3Rvcl9hY3RpdmF0ZV9zaW5rcGFkKSwKKwkgIChnc3RfaW5wdXRfc2VsZWN0b3JfcmVxdWVzdF9uZXdfcGFkKSwKKwkgIChnc3RfaW5wdXRfc2VsZWN0b3JfcmVsZWFzZV9wYWQpLAorCSAgKGdzdF9pbnB1dF9zZWxlY3Rvcl9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X2lucHV0X3NlbGVjdG9yX2Jsb2NrKSwKKwkgIChnc3RfaW5wdXRfc2VsZWN0b3Jfc3dpdGNoKToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmg6CisJICBGaWd1cmUgb3V0IHRoZSBsb2NraW5nIGEgYml0IG1vcmUuCisJICBNYXJrIGJ1ZmZlcnMgd2l0aCBkaXNjb250IGFmdGVyIHN3aXRjaGluZy4KKwkgIEZpeCBpbml0aWFsIHNlZ21lbnQgZm9yd2FyZGluZywgbWFrZSBzdXJlIHRvIG9ubHkgZm9yd2FyZCBvbmUgc2VnbWVudAorCSAgcmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBzZXF1ZW5jZSBvZiBidWZmZXJzL3NlZ21lbnRzIGlzLiBTZWUgIzUyMjIwMy4KKwkgIEltcHJvdmUgZmx1c2hpbmcgd2hlbiBibG9ja2VkLgorCSAgUmV0dXJuIE5PVF9MSU5LRUQgd2hlbiBhIHN0cmVhbSBpcyBub3Qgc2VsZWN0ZWQuCisJICBOb3QgQVBJIGNoYW5nZSBmb3IgdGhlIHN3aXRjaCBzaWduYWwgaW4gdGhlIGRvY3MuCisJICBGaXggc3RhcnQvdGltZS9hY2N1bSB2YWx1ZXMgb2YgdGhlIG5ldyBzZWdtZW50LgorCSAgQ29ycmVjdGx5IHVubG9jayBhbmQgZmx1c2ggYSBibG9ja2luZyBzZWxlY3RvciB3aGVuIGdvaW5nIHRvIFJFQURZLgorCisyMDA4LTAzLTE0IDE3OjIyOjIxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzogQWRkIGxvdHMgb2YgZGVidWdnaW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOiAoZ3N0X3NlbGVjdG9yX3BhZF9ldmVudCksCisJICAoZ3N0X3NlbGVjdG9yX3BhZF9idWZmZXJhbGxvYyksIChnc3Rfc2VsZWN0b3JfcGFkX2NoYWluKSwKKwkgIChnc3RfaW5wdXRfc2VsZWN0b3JfY2xhc3NfaW5pdCksCisJICAoZ3N0X2lucHV0X3NlbGVjdG9yX3NldF9hY3RpdmVfcGFkKSwKKwkgIChnc3RfaW5wdXRfc2VsZWN0b3Jfc2V0X3Byb3BlcnR5KSwKKwkgIChnc3RfaW5wdXRfc2VsZWN0b3JfcHVzaF9wZW5kaW5nX3N0b3ApOgorCSAgQWRkIGxvdHMgb2YgZGVidWdnaW5nLgorCSAgRml4IHRpbWUgbWVtYmVyIGluIHRoZSBuZXdzZWdtZW50IGV2ZW50LgorCisyMDA4LTAzLTEzIDE2OjQ2OjA0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuKjogVmFyaW91cyBjbGVhbnVwcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzogKGdzdF9zZWxlY3Rvcl9wYWRfY2xhc3NfaW5pdCksCisJICAoZ3N0X3NlbGVjdG9yX3BhZF9maW5hbGl6ZSksIChnc3Rfc2VsZWN0b3JfcGFkX2dldF9wcm9wZXJ0eSksCisJICAoZ3N0X3NlbGVjdG9yX3BhZF9ldmVudCksIChnc3RfaW5wdXRfc2VsZWN0b3JfY2xhc3NfaW5pdCksCisJICAoZ3N0X2lucHV0X3NlbGVjdG9yX2luaXQpLCAoZ3N0X2lucHV0X3NlbGVjdG9yX3NldF9hY3RpdmVfcGFkKSwKKwkgIChnc3RfaW5wdXRfc2VsZWN0b3Jfc2V0X3Byb3BlcnR5KSwKKwkgIChnc3RfaW5wdXRfc2VsZWN0b3JfZ2V0X3Byb3BlcnR5KSwKKwkgIChnc3RfaW5wdXRfc2VsZWN0b3JfcmVxdWVzdF9uZXdfcGFkKSwKKwkgIChnc3RfaW5wdXRfc2VsZWN0b3JfcmVsZWFzZV9wYWQpLAorCSAgKGdzdF9pbnB1dF9zZWxlY3Rvcl9wdXNoX3BlbmRpbmdfc3RvcCksCisJICAoZ3N0X2lucHV0X3NlbGVjdG9yX3N3aXRjaCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5oOgorCSAgVmFyaW91cyBjbGVhbnVwcy4KKwkgIEFkZGVkIHRhZ3MgdG8gdGhlIHBhZHMuCisJICBTZWxlY3QgYWN0aXZlIHBhZCBiYXNlZCBvbiB0aGUgcGFkIG9iamVjdCBpbnN0ZWFkIG9mIGl0cyBuYW1lLgorCSAgRml4IHJlZmNvdW50IGluIHNldF9hY3RpdmVfcGFkLgorCSAgQWRkIHByb3BlcnR5IHRvIGdldCB0aGUgbnVtYmVyIG9mIHBhZHMuCisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKKwkgIChnc3Rfb3V0cHV0X3NlbGVjdG9yX2NsYXNzX2luaXQpLAorCSAgKGdzdF9vdXRwdXRfc2VsZWN0b3Jfc2V0X3Byb3BlcnR5KSwKKwkgIChnc3Rfb3V0cHV0X3NlbGVjdG9yX2dldF9wcm9wZXJ0eSk6CisJICBWYXJpb3VzIGNsZWFudXBzLgorCSAgU2VsZWN0IHRoZSBhY3RpdmUgcGFkIGJhc2VkIG9uIHRoZSBwYWQgb2JqZWN0IGluc3RlYWQgb2YgaXRzIG5hbWUuCisJICBGaXggbG9ja2luZyB3aGVuIHNldHRpbmcgdGhlIGFjdGl2ZSBwYWQuCisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0c2VsZWN0b3ItbWFyc2hhbC5saXN0OgorCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zZWxlY3Rvci5jOiAoY2xlYW51cF9wYWQpLAorCSAgKHNlbGVjdG9yX3NldF9hY3RpdmVfcGFkKSwgKHJ1bl9pbnB1dF9zZWxlY3Rvcl9idWZmZXJfY291bnQpOgorCSAgRml4ZXMgZm9yIHBhZCBpbnN0ZWFkIG9mIHBhZG5hbWUgZm9yIHBhZCBzZWxlY3Rpb24uCisKKzIwMDgtMDItMjYgMTI6MDE6MzcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOiBGaXggY2hhbmdpbmcgdG8gc2FtZSBwYWQgdHdpY2UgYmVmb3JlIGEgY2hhaW4gY2FsbC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6CisJICBGaXggY2hhbmdpbmcgdG8gc2FtZSBwYWQgdHdpY2UgYmVmb3JlIGEgY2hhaW4gY2FsbC4KKworMjAwOC0wMi0yNSAwODo1Mzo1MSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuKjogQWRkZWQgInNlbGVjdC1hbGwiIHByb3BlcnR5IHRvIG1ha2UgaXQgd29yayBsaWtlIGFnZ3JlZ2F0b3IgaW4gMC44LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuaDoKKwkgIEFkZGVkICJzZWxlY3QtYWxsIiBwcm9wZXJ0eSB0byBtYWtlIGl0IHdvcmsgbGlrZSBhZ2dyZWdhdG9yIGluIDAuOC4KKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgorCSAgRml4IHJlc2VuZC1sYXRlc3QgYmVoYXZvaXVyLgorCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvLmN2c2lnbm9yZToKKwkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvc2VsZWN0b3IuYzoKKwkgIEFkZCB1bml0IHRlc3RzIGZvciBzZWxlY3Rvci4KKworMjAwOC0wMi0wNyAxMzo0ODoyMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuYzogQWRkIGEgZml4bWUgY29tbWVudC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuYzoKKwkgIEFkZCBhIGZpeG1lIGNvbW1lbnQuCisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKKwkgIEZpeCBzYW1lIGxlYWsgYXMgaW4gaW5wdXQtc2VsZWN0b3IuCisJICAqIHRlc3RzL2ljbGVzL291dHB1dC1zZWxlY3Rvci10ZXN0LmM6CisJICBJbXByb3ZlIHRoZSB0ZXN0LgorCisyMDA4LTAyLTAxIDE3OjA4OjE4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzogRG9uJ3QgbGVhayBldmVudCBvbiBwYWRzIHRoYXQgYXJlIG5vdCBsaW5rZWQuIEZpeGVzICM1MTI4MjYuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6IChnc3Rfc2VsZWN0b3JfcGFkX2V2ZW50KToKKwkgIERvbid0IGxlYWsgZXZlbnQgb24gcGFkcyB0aGF0IGFyZSBub3QgbGlua2VkLiBGaXhlcyAjNTEyODI2LgorCisyMDA4LTAxLTI5IDA3OjM4OjMxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIFJlcGxhY2UgdGhlIHN3aXRjaCBwbHVnaW4gd2l0aCB0aGUgc2VsZWN0b3IgcGx1Z2luLiBBZGQgb3V0cHV0LSBzZWxlY3RvciBhcyB0aGUgb3Bwb3NpdGUgb2YgaW5wdXQtc2VsZWN0b28gKHdhcyBzd2l0Yy4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgorCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMtZG9jcy5zZ21sOgorCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMtc2VjdGlvbnMudHh0OgorCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMuYXJnczoKKwkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLmhpZXJhcmNoeToKKwkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLmludGVyZmFjZXM6CisJICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy5zaWduYWxzOgorCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWV0YWRhdGEueG1sOgorCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2VsZWN0b3IueG1sOgorCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291bmR0b3VjaC54bWw6CisJICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zd2l0Y2gueG1sOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzLy5jdnNpZ25vcmU6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUuYW06CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuaDoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmg6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0c2VsZWN0b3ItbWFyc2hhbC5saXN0OgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHNlbGVjdG9yLmM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvc2VsZWN0b3IudmNwcm9qOgorCSAgKiBnc3Qvc3dpdGNoLy5jdnNpZ25vcmU6CisJICAqIGdzdC9zd2l0Y2gvTWFrZWZpbGUuYW06CisJICAqIGdzdC9zd2l0Y2gvZ3N0c3dpdGNoLW1hcnNoYWwubGlzdDoKKwkgICogZ3N0L3N3aXRjaC9nc3Rzd2l0Y2guYzoKKwkgICogZ3N0L3N3aXRjaC9nc3Rzd2l0Y2guaDoKKwkgICogZ3N0L3N3aXRjaC9zd2l0Y2gudmNwcm9qOgorCSAgKiB0ZXN0cy9pY2xlcy8uY3ZzaWdub3JlOgorCSAgKiB0ZXN0cy9pY2xlcy9NYWtlZmlsZS5hbToKKwkgICogdGVzdHMvaWNsZXMvb3V0cHV0LXNlbGVjdG9yLXRlc3QuYzoKKwkgIFJlcGxhY2UgdGhlIHN3aXRjaCBwbHVnaW4gd2l0aCB0aGUgc2VsZWN0b3IgcGx1Z2luLiBBZGQgb3V0cHV0LQorCSAgc2VsZWN0b3IgYXMgdGhlIG9wcG9zaXRlIG9mIGlucHV0LXNlbGVjdG9vICh3YXMgc3dpdGNoKS4gQWRkIGEgdGVzdAorCSAgZm9yIG91dHB1dC1zZWxlY3Rvci4gQWRkIGRvY3MgZm9yIHRoZSBlbGVtZW50cy4gVGhlIHZjcHJvaiBuZWVkcworCSAgdXBkYXRlLiBGaXhlcyAjNTAwMTQyLgorCisyMDEwLTEyLTMwIDAwOjQ2OjAyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgorCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLWRvY3Muc2dtbDoKKwkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy1zZWN0aW9ucy50eHQ6CisJKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuYXJnczoKKwkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5oaWVyYXJjaHk6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKKwkgIGRvY3M6IGFkZCB2YWx2ZSBlbGVtZW50IHRvIGRvY3VtZW50YXRpb24KKworMjAxMC0xMi0zMCAwMDo0MTowOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuaDoKKwkgIHZhbHZlOiBzb21lIG1pbm9yIGNsZWFuLXVwcworCisyMDEwLTEyLTMwIDAwOjMwOjE4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgorCSAgdmFsdmU6IGZpeCB0eXBvIGluIHByb3BlcnR5IGRlc2NyaXB0aW9uCisJICBBbmQgcmVwaHJhc2Ugd2hpbGUgYXQgaXQsIHRvIG1ha2UgaXQgbW9yZSBjb25jaXNlLgorCisyMDEwLTEyLTMwIDAwOjI2OjQzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uZ2l0aWdub3JlOgorCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdmFsdmUuYzoKKwkgIHRlc3RzOiBlbmFibGUgdmFsdmUgdW5pdCB0ZXN0CisKKzIwMTAtMTItMzAgMDA6MjI6MzggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL01ha2VmaWxlLmFtOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RlbGVtZW50cy5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgorCSAgZWxlbWVudHM6IGFkZCBuZXcgdmFsdmUgZWxlbWVudCB0byBidWlsZAorCSAgTW92ZWQgZnJvbSBnc3QtcGx1Z2lucy1iYWQKKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzA4MDgKKworMjAxMC0xMC0xOSAyMzo0MDozNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3ZhbHZlLmM6CisJICB0ZXN0czogZml4IHZhbHZlIHVuaXQgdGVzdAorCSAgZ3N0X2J1ZmZlcl9wYWRfYWxsb2MoKSBuZWVkcyBzaW1wbGUgY2FwcyBvciBOVUxMIGNhcHMsCisJICBBTlkgY2FwcyBhcmUgbm90IGFsbG93ZWQuCisKKzIwMTAtMDktMjggMTM6NTI6MjkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgorCSAgdmFsdmU6IG5vIG5lZWQgdG8gcmVmIHRoZSBvYmplY3QgaW4gX2NoYWluCisJICBEb24ndCByZWYgdGhlIHBhZCBpbiBjaGFpbiwgbGlrZSBlbHNld2hlcmUKKworMjAxMC0wOS0zMCAxNzo0ODozNSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92YWx2ZS5jOgorCSAgdGVzdHM6IEZpeCBjYXBzIGxlYWsgaW4gdGhlIHZhbHZlIHRlc3QKKworMjAxMC0wOS0zMCAxNzoyNDoyOSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92YWx2ZS5jOgorCSAgdmFsdmU6IEFkZCB1bml0IHRlc3RzCisJICBBZGQgYSB1bml0IHRlc3QgZm9yIHRoZSB2YWx2ZSBlbGVtZW50LgorCisyMDEwLTA5LTMwIDE2OjI2OjE5IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuaDoKKwkgIHZhbHZlOiBNYWtlIHRoZSBkcm9wIHZhcmlhYmxlIGludG8gYW4gYXRvbWljLgorCSAgVXNpbmcgYW4gYXRvbWljIGFsbG93cyB1cyB0byBhdm9pZCBsb2NraW5nIHRoZSB3aG9sZSBvYmplY3QgYWxsIHRpbWUgdGltZS4KKwkgIEFzIHN1Z2dlc3RlZCBieSBTdGVmYW4gS29zdC4KKworMjAxMC0wOS0zMCAxNjoyMjowNCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6CisJICB2YWx2ZTogQ29ycmVjdGx5IHNldCB0aGUgRElTQ09OVCBmbGFnIGFmdGVyIGRyb3BwaW5nIGJ1ZmZlcnMKKworMjAxMC0wOS0zMCAxNjoxNjo0NyAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6CisJICB2YWx2ZTogUmVtb3ZlIHN1cGVyZmxvdXMgY2hlY2tpbmcgY2FzdHMKKworMjAxMC0wOS0zMCAxNjoxMzoyMyAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6CisJICB2YWx2ZTogRml4IHN0eWxlLCBpbXByb3ZlIGNvbW1lbnRzCisJICBNaW5vciBpbXByb3ZlbWVudHMgdG8gdGhlIGNvbW1lbnRzIGFuZCBicmVhayBhIGZldyBvdmVybHkgbG9uZyBsaW5lcworCisyMDEwLTA5LTI4IDE0OjI2OjExICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuYzoKKwkgIHZhbHZlOiBtb3ZlIGRlZmF1bHQ6IHBhcnN0IGluIHRoZSBzd2l0Y2ggc3RhdGVtZW50IHRvIHRoZSBlbmQKKwkgIE5vdyBzdXJlIGlmIGl0IG1hdHRlcnMsIGJ1dCB0aGUgcHJldmlvdXMgZm9ybSBsb29rcyB3ZWlyZWQuCisKKzIwMTAtMDktMjggMTQ6MjM6MDEgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgorCSAgdmFsdmU6IG1vdmUgZGVidWctY2F0ZWdvcnkgcmVnaXN0cmF0aW9uIHRvIHR5cGUgaW5pdAorCisyMDEwLTA5LTI4IDE0OjE1OjEzICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuYzoKKwkgIHZhbHZlOiB1c2UgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyBvbiBwcm9wZXJ0aWVzCisKKzIwMTAtMDktMjggMTQ6MDc6MzkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgorCSAgdmFsdmU6IEdTVF9CT0lMRVJQTEFURSBhbHJlYWR5IHNldHMgcGFyZW50X2NsYXNzCisKKzIwMTAtMDMtMTggMTc6MzA6MjYgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgorCSAgdmFsdmU6IGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzID0+IGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZQorCisyMDA5LTAyLTEwIDE4OjUyOjU0ICswMDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuaDoKKwkgIGRvY3M6IGRvY3VtZW50IHZhbHZlIGVsZW1lbnQKKworMjAwOS0wMi0xMCAxNzo1NzoxNiArMDAwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6CisJICBmc3ZhbHZlOiByZW5hbWUgdG8gdmFsdmUKKworMjAwOS0wMi0xMCAxNzo1NTo0NyArMDAwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmg6CisJICBmc3ZhbHZlOiByZS1pbmRlbnQgZ3N0IHN0eWxlCisKKzIwMDgtMTItMTMgMDA6MzE6NDUgLTA1MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgorCSAgZnN2YWx2ZTogSWdub3JlIGVycm9ycyBpZiBkcm9wcGluZyBpcyBzZXQgdG8gdHJ1ZQorCisyMDA4LTEyLTEwIDE3OjAwOjMzIC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuYzoKKwkgIGZzdmFsdmU6IEFkZCBnZXRjYXBzIHByb3h5aW5nIHRvIHRoZSB2YWx2ZQorCisyMDA4LTA4LTIwIDE0OjExOjAyIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuaDoKKwkgIGZzdmFsdmU6IFJlYmFzZSB2YWx2ZSBvbnRvIGdzdGVsZW1lbnQgaW5zdGVhZCBvZiBiYXNldHJhbnNmb3JtCisKKzIwMDgtMDgtMTkgMTg6NDk6NTEgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgorCSAgZnN2YWx2ZTogUmV2ZXJ0ICJGaXggcmVmY291bnRpbmcgaXNzdWVzIGluIHByZXBhcmVfb3V0cHV0X2J1ZmZlciIKKwkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgNjVkZDQ2MGYwYTNhOWM0ODgyZTYzOGM4NjIwOGY3NGVmNjJjMzQ2MC4KKworMjAwOC0wOC0wNSAxMTozMDo1NyArMDAwMCAgc2pvZXJkQGx1b24ubmV0IDxzam9lcmRAbHVvbi5uZXQ+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuYzoKKwkgIGZzdmFsdmU6IEZpeCByZWZjb3VudGluZyBpc3N1ZXMgaW4gcHJlcGFyZV9vdXRwdXRfYnVmZmVyCisJICAyMDA4MDgwNTExMzA1Ny1iZTBmMi05ZGMyNzA3ODFmMGEwZjIxYzYxNmVkMTFkYmQxZjE5OGZkMWIzMjZlLmd6CisKKzIwMDgtMDQtMDkgMTY6MzI6MjEgKzAwMDAgIE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6CisJICBmc3ZhbHZlOiBSZW1vdmUgdW51c2VkIGRpc3Bvc2UgbWV0aG9kIGluIHZhbHZlCisJICAyMDA4MDQwOTE2MzIyMS0zZTJkYy05MmNjYjJkYjg3NGU0NmUwZDkyYzE1NTIwNTc3YzFiZTBlMmJjNjE3Lmd6CisKKzIwMDctMTItMTkgMjA6MzI6MzAgKzAwMDAgIE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6CisJICBmc3ZhbHZlOiBEb250IGhvbGQgdGhlIG9iamVjdCBsb2NrIHdoaWxlIGNhbGxpbmcgYmFzZSBhbGxvYyBmdW5jdGlvbgorCSAgMjAwNzEyMTkyMDMyMzAtM2UyZGMtNjUxOTE3NWQ4ZDgxNDk2NTE1YjJkOTA2MGFjMzE2NjUwNTYwZjY5MS5negorCisyMDA3LTEyLTE5IDIwOjMyOjE4ICswMDAwICBPbGl2aWVyIENyZXRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5oOgorCSAgZnN2YWx2ZTogU2V0IHRoZSBESVNDT05UIGZsYWcgYWZ0ZXIgZHJvcHBpbmcgYnVmZmVycworCSAgMjAwNzEyMTkyMDMyMTgtM2UyZGMtYmM1ZjAzZDg4ZmY1ODM3MDQwYjkyMTRkZTAxNmNjMTQyNzc2ZGZjMi5negorCisyMDA3LTEyLTE5IDAwOjU3OjM5ICswMDAwICBPbGl2aWVyIENyZXRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5oOgorCSAgZnN2YWx2ZTogVXNlIGRvIHRoZSBhbGxvY19idWZmZXIgZnVuY3Rpb24gaW4gdGhlIHZhbHZlCisJICAyMDA3MTIxOTAwNTczOS0zZTJkYy0yYTBmZGZhMmYzOGYwM2FiNDc5MWZlNWM0YWI4NWU4NzkwMTEzNjgzLmd6CisKKzIwMDctMTEtMjEgMjA6MDg6NTggKzAwMDAgIE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6CisJICBmc3ZhbHZlOiBPbmx5IHNldCBwYXNzdGhyb3VnaCB0byBUUlVFIG9uIG5ld2VyIHZlcnNpb25zIG9mIGdzdAorCSAgMjAwNzExMjEyMDA4NTgtM2UyZGMtYjE2Y2RlYWJiYzNjMDU2MmM2ZmM3YjExYjliOTc5MmM5MTBmNTY5ZS5negorCisyMDA3LTExLTIxIDE4OjE3OjI5ICswMDAwICBPbGl2aWVyIENyZXRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgorCSAgZnN2YWx2ZTogQ29tcGFyZSBtaW5vciwgbm90IG1ham9yCisJICAyMDA3MTEyMTE4MTcyOS0zZTJkYy1hNTk5N2MzYjdmNWM4Njk2NjM3MDk2OTcxNGZhY2Y4ZWUyNDI2NTlkLmd6CisKKzIwMDctMTAtMjYgMjI6Mzc6NDkgKzAwMDAgIE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6CisJICBmc3ZhbHZlOiBNYWtlIHRoZSB2YWx2ZSBlbGVtZW50IHdvcmsgd2l0aCBnc3QgPCAwLjEwLjEzCisJICAyMDA3MTAyNjIyMzc0OS0zZTJkYy0xOGY2ODVhNGU0NWZiZGNlNjc3YWM3Nzc1ODY4NzZmYzcxOWQ3MjIyLmd6CisKKzIwMDctMTAtMjQgMjI6NDI6NDYgKzAwMDAgIE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6CisJICBmc3ZhbHZlOiBSZW5hbWUgdmFsdmUgdG8gZnN2YWx2ZQorCSAgMjAwNzEwMjQyMjQyNDYtM2UyZGMtYzU0MjE2YWYyZWYwZWYzZjFhMjIwNmQ3MjNlODdiZTJhMjNhYjhlZC5negorCisyMDA3LTEwLTI0IDIyOjQxOjQ3ICswMDAwICBPbGl2aWVyIENyZXRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5oOgorCSAgZnN2YWx2ZTogQWRkIHZhbHZlIGVsZW1lbnQKKwkgIDIwMDcxMDI0MjI0MTQ3LTNlMmRjLWYyOGFiMGMwNzNlMjgzODk0YjY1YzIyYzRmNDQzOTdjODk3ZGVjMDEuZ3oKKworMjAxMC0xMi0zMCAxODozMToxMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKKwkgIGZha2VzaW5rOiBtYWtlIHZhcmlhYmxlIHN0YXRpYworCisyMDEwLTEyLTI5IDExOjQ4OjE4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIGJhc2VzcmM6IGZpeCBkZWFkbG9jaworCSAgT25seSBnbyBpbnRvIExJVkVfV0FJVCB3aGVuIHRoZSBhcmUgbm90IGxpdmVfcnVubmluZyBhbmQgb25seSBzdG9wIHdhaXRpbmcgd2hlbgorCSAgbGl2ZV9ydW5uaW5nIGlzIFRSVUUuIElmIHdlIGRvbid0IGxvb3AsIHdlIGNvdWxkIGRlYWRsb2NrIHdoZW4gY2FsbGVkIGZyb20KKwkgIG91dHNpZGUgb2YgYmFzZXNyYywgc3VjaCBhcyBiYXNlYXVkaW9zcmMuCisJICBGaXhlcyAjNjM1Nzg1CisKKzIwMTAtMTItMjggMTY6NDA6MjggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc2lua3MuYzoKKwkgIGNoZWNrOiBhZGQgbW9yZSBzaW5rIHVuaXQgdGVzdHMKKworMjAxMC0xMi0yOCAxNjoyMzozMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgYmFzZXNpbms6IGFsc28gcHJlcm9sbCBhc3luYz1mYWxzZSBzaW5rcworCSAgQWxzbyBwcmVyb2xsIGFzeW5jPWZhbHNlIHNpbmtzIGFmdGVyIGEgZmx1c2guCisKKzIwMTAtMTItMjIgMTY6NTU6MzMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZGVzaWduL2RyYWZ0LXByb2dyZXNzLnR4dDoKKwkgIGRvY3M6IGZpeCB0eXBvCisKKzIwMTAtMTItMjYgMjE6MjA6MzEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBnc3QvZ3N0YnVzLmM6CisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSogZ3N0L2dzdGNsb2NrLmM6CisJKiBnc3QvZ3N0bWluaW9iamVjdC5jOgorCSogZ3N0L2dzdG9iamVjdC5jOgorCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6CisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKKwkqIGdzdC9nc3R0YWdsaXN0LmM6CisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkgIFJldmVydCAibWljcm8tb3B0aW06IGlmICh4KSBpcyBjaGVhcGVyIHRoYW4gaWYgKHggPiAwKSBmb3IgdW5zaWduZWQgaW50ZWdlcnMiCisJICBUaGlzIHJldmVydHMgY29tbWl0IDZhYThjYTM3ZWViOWRlYmZhNjkxOTc0MWEwMjMyNTBiZjI3ODI0OGYuCisJICBTZWUgaHR0cDovL2FydGljbGUuZ21hbmUub3JnL2dtYW5lLmNvbXAudmlkZW8uZ3N0cmVhbWVyLmRldmVsLzMyMjgyCisKKzIwMTAtMTItMjQgMTQ6MDI6MDggLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL01ha2VmaWxlLmFtOgorCSAgZWxlbWVudHM6IHJlZW5hYmxlIGZkc3JjL2Zkc2luayBvbiBNU1ZDCisKKzIwMTAtMTItMjIgMTY6MzY6MDkgLTA4MDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBzb25nYmlyZG5lc3QuY29tPgorCisJKiBnc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oOgorCSAgRml4IEdTdGF0QnVmIGRlZmluaXRpb24gZm9yIHdpbjMyIHdoZW4gYnVpbGRpbmcgYWdhaW5zdCBvbGRlciBnbGliLiBOb3cgbWF0Y2hlcyB1cHN0cmVhbSBnbGliIGRlZmluaXRpb24uCisKKzIwMTAtMTItMjIgMjI6MzY6MDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0bWluaW9iamVjdC5jOgorCSAgbWluaW9iamVjdDogYWRkIGdvYmplY3QtaW50cm9zcGVjdGlvbiBhbm5vdGF0aW9uCisKKzIwMTAtMTItMjIgMTY6NDI6MDQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZGVzaWduL2RyYWZ0LXByb2dyZXNzLnR4dDoKKwkgIGRvY3M6IGFkZCBkcmFmdCBpZGVhIGZvciBwcm9ncmVzcyByZXBvcnRpbmcKKworMjAxMC0xMi0yMSAxMDozMzo1OSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgYmFzZXNpbms6IGZpeCB0eXBvCisKKzIwMTAtMTItMjAgMTc6NDY6MzYgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb21tb246CisJICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKKwkgIEZyb20gMTY5NDYyYSB0byA0NjQ0NWFkCisKKzIwMTAtMTItMTkgMTI6NDk6NTggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGx1Z2luLmM6CisJKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSAgdGFnbGlzdDogRG9uJ3QgbGVhayBjb3BpZXMgb2YgZW1wdHkgc3RyaW5ncworCisyMDEwLTEyLTE3IDE5OjE5OjQwICswMTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgorCSogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOgorCSAgYmFzZTogZG9jdW1lbnRhdGlvbiBmaXh1cHMgYW5kIGFubm90YXRpb24KKworMjAxMC0xMi0xNyAxOToxNDo0MSArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXJsaXN0LmM6CisJKiBnc3QvZ3N0Y2xvY2suYzoKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJKiBnc3QvZ3N0b2JqZWN0LmM6CisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cGx1Z2luLmM6CisJKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSogZ3N0L2dzdHV0aWxzLmM6CisJICBnc3Q6IGRvY3VtZW50YXRpb24gZml4dXBzIGFuZCBhbm5vdGF0aW9uCisJICBSZXBvcnRlZCBieSBlbmFibGluZyB0aGUgLS13YXJuLWFsbCBvcHRpb24gb2YgZy1pci1zY2FubmVyCisKKzIwMTAtMTItMTcgMTU6NDg6MzQgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZGF0ZXRpbWUuYzoKKwkgIGdzdGRhdGV0aW1lOiBGaXggZG9jdW1lbnRhdGlvbgorCSAgc2Vjb25kID0+IHNlY29uZHMKKwkgIG1pY3Jvc2Vjb25kIGFyZ3VtZW50IHdhcyBkcm9wcGVkCisKKzIwMTAtMTItMDQgMTU6MzI6MDYgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgYmFzZXNyYzogVXNlIGFuIGF0b21pYyBpbnRlZ2VyIGluc3RlYWQgb2YgYSBsb2NrIGZvciBjaGVja2luZyB0YWdzIHByZXNlbmNlCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM2NDU1CisKKzIwMTAtMTItMTYgMTA6NTU6MjAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIGJhc2V0cmFuc2Zvcm06IEhhbmRsZSBkb3duc3RyZWFtIGdpdmluZyBhIGJ1ZmZlciB3aXRoIG5ldyBjYXBzIGJ1dCBpbnZhbGlkIHNpemUKKwkgIFRoaXMgY2FuIGhhcHBlbiBmb3IgZXhhbXBsZSB3aGVuIGRvd25zdHJlYW0gcHJvcG9zZWQgbmV3IGNhcHMsIGxhdGVyIHByb3Bvc2VkCisJICB0aGUgcHJldmlvdXMgY2FwcyBhZ2FpbiB3aGljaCBpbiB0dXJuIGVuYWJsZXMgcGFzc3Rocm91Z2ggbW9kZSBpbiB1cHN0cmVhbQorCSAgZWxlbWVudHMgYW5kIHRoZSB3cm9uZy1zaXplZCBidWZmZXIgYXBwZWFycyBpbiBhbiBlbGVtZW50IHdoZXJlIHRoZSBjYXBzCisJICBjaGFuZ2UgbmV2ZXIgaGFwcGVuZWQuIFNpbXBseSBhbGxvY2F0ZSBhIG5ldyBidWZmZXIgaW4gdGhpcyBjYXNlLgorCSAgU2VlIGJ1ZyAjNjM1NDYxLgorCisyMDEwLTEyLTE1IDIzOjE5OjU0ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RpbmZvLmM6CisJICBpbmZvOiB1c2UgdGhlIHB1YmxpY2x5IHZpc2libGUgYWRkcmVzcyB0byBmaXggdGhlIHRlc3RzCisJICBUaGUgLUJzeW1ib2xpYyBjaGFuZ2UgY2F1c2VzIHVzIHRvIGdldCBhIGRpZmZlcmVudCBhZGRyZXNzIHdoZW4gaW50ZXJuYWx5CisJICBsb29raW5nIHVwIHRoZSBmdW5jdGlvbiB0aGFuIHdoYXQgYXBwbGljYXRpb24gd291bGQgZ2V0IHdoZW4gdGhlIHVzZSB0aGUgc3ltYm9sCisJICB0aGF0IHRoZXkgc2VlLiBUaGlzIG1hZGUgcmVtb3ZpbmcgdGhlIGRlZmF1bHQgbG9naGFuZGxlciB0byBmYWlsLCBhcyBpdCBpcyBzZXQKKwkgIGludGVybmFsbHkgYW5kIHJlbW92ZWQgZXh0ZXJuYWx5LgorCisyMDEwLTEyLTE1IDE0OjU1OjEyICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSAyMDc0MmFlIHRvIDE2OTQ2MmEKKworMjAxMC0xMi0xNSAxMjoxMDowMiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBjb25maWd1cmUuYWM6CisJICBjb25maWd1cmU6IHVzZSB0aGUgLUJzeW1ib2xpYy1mdW5jdGlvbnMgbGlua2VyIGZsYWcgaWYgc3VwcG9ydGVkCisJICBUaGlzIGZlYXR1cmUgdHVybnMgaW50cmEgbGlicmFyeSBjYWxscyBpbnRvIGRpcmVjdCBmdW5jdGlvbiBjYWxscyBhbmQgdGh1cyBtYWtlcworCSAgdGhlbSBhIGxpdHRsZSBmYXN0ZXIuIFRoZSBkb3duc2lkZSBpcyB0aGF0IHRoaXMgY2F1c2VzIHByb2JsZW1zIGZvciBlLmcuCisJICBMRF9QUkVMT0FEIGJhc2VkIHRvb2xzLiBUaHVzIGFkZCBhIGNvbmZpZ3VyZSBvcHRpb24gdG8gdHVybiBpdCBvZmYuCisKKzIwMTAtMTItMTQgMTk6MDA6MTQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJhc2VzaW5rOiBpbXByb3ZlIGxhc3Rfc3RvcCBjYWxjdWxhdGlvbgorCSAgT25seSB1cGRhdGUgdGhlIGxhc3Rfc3RvcCB2YWx1ZSB3aGVuIHdlIGhhZCBhIHZhbGlkIHN0b3AgcG9zaXRpb24gZm9yIHRoZQorCSAgY2xpcHBpbmcgb3IgZWxzZSB0aGUgY2xpcHBpbmcgY29kZSBhc3N1bWVzIHRoZSBzdG9wIHBvc2l0aW9uIGV4dGVuZHMgdG8gdGhlIGVuZAorCSAgb2YgdGhlIHNlZ21lbnQsIHdoaWNoIG1ha2VzIHRoZSBwb3NpdGlvbiByZXBvcnRpbmcgcmV0dXJuIHdlaXJkIHZhbHVlcy4KKworMjAxMC0xMi0xNCAxNTo1MjoyMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgYmFzZXNpbms6IGZpeCBvYmplY3QgdHlwZSBoYW5kbGluZyBpbiBxdWV1ZWQgcHJlcm9sbAorCSAgRmFjdG9yIG91dCB0aGUgbWV0aG9kIHRvIGdldCB0aGUgb2JqZWN0IHR5cGUuCisJICBXaGVuIHByZXJvbGwtcXVldWUtbGVuID4gMCwgdXNlIHRoZSByaWdodCBvYmplY3QgdHlwZSBpbnN0ZWFkIG9mIGlnbm9yaW5nCisJICBidWZmZXItbGlzdHMuCisKKzIwMTAtMTItMTMgMTY6MjI6NDYgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIDAxMWJjYzggdG8gMjA3NDJhZQorCisyMDEwLTEyLTExIDEwOjEwOjA0ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvZGF0YXByb3RvY29sL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvbmV0L01ha2VmaWxlLmFtOgorCSAgbGliczogRml4IEdJUiBidWlsZCBmb3Igc3JjZGlyICE9IGJ1aWxkZGlyCisKKzIwMTAtMTItMDggMTc6NTE6MTAgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgorCisJICBNZXJnZSBjb21taXQgJzBlYWEyNWNiZjVjMGU0YmY4NjU0NWZiNjdjMTgxYTBlY2QyZjE5YzcnIGludG8gMC4xMQorCisyMDEwLTEyLTA4IDEyOjE3OjM1ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGRvY3M6IGZpeCB3cm9uZyB1c2Ugb2YgU2luY2U6IGtleXdvcmQKKworMjAxMC0xMi0wOCAxMTo1MjozMSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0cmVnaXN0cnljaHVua3MuYzoKKwkgIHJlZ2lzdHJ5OiBtYWludGFpbiB0aGUgdHlwZWZpbmQgZXh0ZW5zaW9uIGxpc3Qgb3JkZXIKKworMjAxMC0xMi0wOCAxMTo1MTo1OSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0dHlwZWZpbmRmYWN0b3J5LmM6CisJICBkb2NzOiBhZGQgKCkgdG8geHJlZiB0aGUgZnVuY3Rpb24uCisKKzIwMTAtMTItMDcgMTk6MzU6NTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIHV0aWxzOiByZW1vdmUgc29tZSBkZWFkIGNvZGUsIEdTVF9ERUJVR19DT0xPUiBpcyBuZXZlciBkZWZpbmVkCisKKzIwMTAtMTItMDcgMTk6MzU6MjQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkqIGdzdC9nc3R1dGlscy5oOgorCSAgdXRpbHM6IGNvbnN0LWlmeSBhcmd1bWVudHMgdG8gZ3N0X29iamVjdF9kZWZhdWx0X2Vycm9yKCkKKworMjAxMC0xMi0wNyAxODo0NjowMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RlcnJvci5jOgorCSAgZG9jczogZ3N0X2Vycm9yX2dldF9tZXNzYWdlKCkgcmV0dXJucyBzdHJpbmcgaW4gVVRGLTgsIG5vdCBjdXJyZW50IGxvY2FsZQorCSAgV2UgdGVsbCBnZXR0ZXh0IHRvIHJldHVybiBldmVyeXRoaW5nIGluIFVURi04IGVuY29kaW5nLgorCisyMDEwLTEyLTA1IDIwOjE3OjA4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiByZWdpc3RlciBnc3RfcGFkX2dldF9maXhlZF9jYXBzX2Z1bmMoKSB3aXRoIHRoZSBkZWJ1ZyBsb2cgc3lzdGVtCisKKzIwMTAtMTItMDcgMTg6MzU6NTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJpdHJlYWRlci5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLWRvY3MuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLWRvY3MuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6CisJICBkb2NzOiBsaWJnc3RiYXNlOiBtb3JlIGdvYmplY3QgaW50cm9zcGVjdGlvbiBhbm5vdGF0aW9ucworCSAgTWFueSBvZiB0aGVzZSBhcmUgc3VwZXJmbHVvdXMgYW5kIHdlcmUgYWRkZWQgZm9yIGNsYXJpdHkuCisKKzIwMTAtMTItMDcgMTg6MzU6MDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0LmM6CisJKiBnc3QvZ3N0YmluLmM6CisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBnc3QvZ3N0YnVmZmVyLmg6CisJKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgorCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuaDoKKwkqIGdzdC9nc3RidXMuYzoKKwkqIGdzdC9nc3RjYXBzLmM6CisJKiBnc3QvZ3N0Y2hpbGRwcm94eS5jOgorCSogZ3N0L2dzdGNsb2NrLmM6CisJKiBnc3QvZ3N0ZGF0ZXRpbWUuYzoKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6CisJKiBnc3QvZ3N0ZXJyb3IuYzoKKwkqIGdzdC9nc3RldmVudC5jOgorCSogZ3N0L2dzdGV2ZW50Lmg6CisJKiBnc3QvZ3N0ZmlsdGVyLmM6CisJKiBnc3QvZ3N0ZmlsdGVyLmg6CisJKiBnc3QvZ3N0Zm9ybWF0LmM6CisJKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKKwkqIGdzdC9nc3RpbmRleC5jOgorCSogZ3N0L2dzdGluZGV4ZmFjdG9yeS5jOgorCSogZ3N0L2dzdGluZm8uYzoKKwkqIGdzdC9nc3RtZXNzYWdlLmM6CisJKiBnc3QvZ3N0bWVzc2FnZS5oOgorCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKKwkqIGdzdC9nc3RvYmplY3QuYzoKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOgorCSogZ3N0L2dzdHBhcnNlLmM6CisJKiBnc3QvZ3N0cGlwZWxpbmUuYzoKKwkqIGdzdC9nc3RwbHVnaW4uYzoKKwkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6CisJKiBnc3QvZ3N0cG9sbC5jOgorCSogZ3N0L2dzdHByZXNldC5jOgorCSogZ3N0L2dzdHF1ZXJ5LmM6CisJKiBnc3QvZ3N0cXVlcnkuaDoKKwkqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSogZ3N0L2dzdHJlZ2lzdHJ5Lmg6CisJKiBnc3QvZ3N0c2VnbWVudC5jOgorCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6CisJKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSogZ3N0L2dzdHRhZ3NldHRlci5jOgorCSogZ3N0L2dzdHRhc2suYzoKKwkqIGdzdC9nc3R0YXNrcG9vbC5jOgorCSogZ3N0L2dzdHRyYWNlLmM6CisJKiBnc3QvZ3N0dHlwZWZpbmQuYzoKKwkqIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuYzoKKwkqIGdzdC9nc3R1cmkuYzoKKwkqIGdzdC9nc3R1cmkuaDoKKwkqIGdzdC9nc3R1dGlscy5jOgorCSogZ3N0L2dzdHZhbHVlLmM6CisJKiBnc3QvZ3N0dmFsdWUuaDoKKwkgIGRvY3M6IGdzdDogbW9yZSBnb2JqZWN0IGludHJvc3BlY3Rpb24gYW5ub3RhdGlvbnMKKwkgIE1hbnkgb2YgdGhlc2UgYXJlIHN1cGVyZmx1b3VzLCBhZGRlZCBmb3IgY2xhcml0eS4KKworMjAxMC0xMi0wNyAxODo0MDoxMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgIGRvY3M6IHVwZGF0ZSBkb2NzCisKKzIwMTAtMTItMDcgMTg6MzM6NTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3Rjb250cm9sbGVyLmRlZjoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RkYXRhcHJvdG9jb2wuZGVmOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBkZWZzOiB1cGRhdGUgZGVmcworCisyMDEwLTEyLTA3IDE4OjMyOjUzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgIGNoZWNrOiBkaXNhYmxlIEFCSSBjaGVja3MKKworMjAxMC0xMi0wNyAxODozMjozNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKKwkgIHBvcnRpbmc6IHVwZGF0ZSBwb3J0aW5nIGRvY3VtZW50CisKKzIwMTAtMTItMDcgMTg6MTQ6MzggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3Rjb21wYXQuaDoKKwkqIGdzdC9nc3RnaG9zdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5oOgorCSogZ3N0L2dzdHV0aWxzLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiByZW1vdmUgZ2V0X2NhcHNfcmVmZmVkIHZhcmlhbnRzCisJICBNYWtlIHRoZSBfZ2V0X2NhcHMgZnVuY3Rpb25zIGJlaGF2ZSBsaWtlIHRoZSBfZ2V0X2NhcHNfcmVmZmVkIHZhcmlhbnRzIGFuZAorCSAgcmVtb3ZlIHRoZSBfcmVmZmVkIHZhcmlhbnRzLiBUaGlzIG1lYW5zIHRoYXQgX2dldF9jYXBzIGRvZXNuJ3QgcmV0dXJuIGEgd3JpdGFibGUKKwkgIGNhcHMgYW55bW9yZSBhbmQgYW4gZXhwbGljaXQgX21ha2Vfd3JpdGFibGUoKSBpcyBuZWVkZWQgYmVmb3JlIG1vZGlmeWluZyB0aGUKKwkgIGNhcHMuCisKKzIwMTAtMTItMDcgMTg6MTI6NTMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6CisJICBwb3J0aW5nOiB1cGRhdGUgcG9ydGluZyBkb2MKKworMjAxMC0xMi0wNyAxNjo1Mjo0NyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5oOgorCSAgcGFkOiBDbGVhbiB1cCAuaCBmaWxlCisKKzIwMTAtMTItMDcgMTU6NTM6NTYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKKworMjAxMC0xMi0wNyAxNTozMzowNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L01ha2VmaWxlLmFtOgorCSogZ3N0L2dzdC5oOgorCSogZ3N0L2dzdGJpbi5jOgorCSogZ3N0L2dzdGNvbXBhdC5oOgorCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3RlbGVtZW50Lmg6CisJKiBnc3QvZ3N0ZWxlbWVudGRldGFpbHMuaDoKKwkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgorCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5Lmg6CisJKiBnc3QvZ3N0ZWxlbWVudG1ldGFkYXRhLmg6CisJKiBnc3QvZ3N0cGlwZWxpbmUuYzoKKwkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5jOgorCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF94ODZfNjQuaDoKKwkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6CisJKiB0b29scy9nc3QteG1saW5zcGVjdC5jOgorCSAgZWxlbWVudDogcmV3b3JrIEdzdEVsZW1lbnREZXRhaWxzCisJICBDbGVhbiB1cCB0aGUgR3N0RWxlbWVudCBzdHJ1Y3R1cmUKKwkgIFJlcGxhY2UgR3N0RWxlbWVudERldGFpbHMgd2l0aCBtZXRhZGF0YQorCisyMDEwLTEyLTA3IDE1OjMxOjI3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGx1Z2luLmg6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGx1Z2luLmM6CisJICBwbHVnaW46IHJlbW92ZSBkZXByZWNhdGVkIG1ldGhvZHMKKwkgIFJlbW92ZSBtb3JlIGRlcHJlY2F0ZWQgbWV0aG9kcyBhbmQgZml4IHVuaXQgdGVzdC4KKworMjAxMC0xMi0wNyAxNToyMTowNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svbGlicy9nZHAuYzoKKwkgIGNoZWNrOiByZW1vdmUgZGVwcmVjYXRlZCB0ZXN0cworCisyMDEwLTEyLTA3IDE1OjIwOjEyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0b2JqZWN0LmM6CisJICBjaGVjazogZml4IG9iamVjdCB1bml0IHRlc3QKKworMjAxMC0xMi0wNyAxNToxOTozNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdG9iamVjdC5jOgorCSogZ3N0L2dzdG9iamVjdC5oOgorCSAgb2JqZWN0OiBmaXggZG9jcworCisyMDEwLTEyLTA3IDEzOjE5OjEwICswMTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvbmV0L01ha2VmaWxlLmFtOgorCSAgbGliczogQWRkIC1JJCh0b3Bfc3JjZGlyKS9saWJzIHRvIGctaXItc2Nhbm5lciBjb21tYW5kcworCSAgV2l0aG91dCB0aGlzLCBpdCB3aWxsIGZhaWwgZmluZGluZyBhbGwgaGVhZGVycy4KKworMjAxMC0xMi0wNyAxMjo1Nzo0MCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0cGx1Z2luLmM6CisJICBwbHVnaW46IHJlY29tbWVuZCAiLS1nc3QtZGlzYWJsZS1yZWdpc3RyeS1mb3JrIiBhcyB3ZWxsCisJICBEaXNhYmxpbmcgZm9ya2luZyBoZWxwcyB3aXRoIGRlYnVnZ2luZyB0aGUgY2F1c2Ugb2YgdGhlIGNyYXNoIGluIGdkYi4KKworMjAxMC0xMi0wNyAxMjo1Njo0NCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBkb2NzL3JhbmRvbS9lbnNvbmljL3BsdWdpbmRvY3MudHh0OgorCSAgZG9jczogc29tZSBub3RlcyBhYm91dCBvdXIgcGx1Z2luIGRvY3Mgd29ya2Zsb3cKKworMjAxMC0xMi0wNyAxMTo1ODozNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6CisJKiBnc3QvZ3N0b2JqZWN0LmM6CisJKiBnc3QvZ3N0b2JqZWN0Lmg6CisJKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzoKKwkgIG9iamVjdDogUmVtb3ZlZCBkZXByZWNhdGVkIGZpZWxkcyBhbmQgbWV0aG9kcworCSAgTWFrZSBHc3RPYmplY3QgZXh0ZW5kIGZyb20gR0luaXRpYWxseVVub3duZWQsIHJlbW92ZSB0aGUgRkxPQVRJTkcgZmxhZyBhbmQgdXNlCisJICBHT2JqZWN0IG1ldGhvZHMgZm9yIG1hbmFnaW5nIHRoZSBmbG9hdGluZyByZWYuCisJICBSZW1vdmUgY2xhc3MgbG9jaywgaXQgd2FzIGEgd29ya2Fyb3VuZCBmb3IgYSBnbGliIDwgMi44IGJ1Zy4KKwkgIFJlbW92ZSB0aGUgcGFyZW50LXNldCBhbmQgcGFyZW50LXVuc2V0IHNpZ25hbHMsIGF0dGVtcHQgdG8gaW1wbGVtZW50IHdpdGggbm90aWZ5CisJICBidXQgZGlzYWJsZWQgYmVjYXVzZSBkZWFkbG9ja3MgaW4gZGVlcC1ub3RpZnkuCisKKzIwMTAtMTItMDYgMjA6MDM6NDYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6CisJICBwb3J0aW5nOiBtZW50aW9uIHJlbW92YWwgb2YgcHJvdG9jb2wgcHJvcGVydHkKKworMjAxMC0xMi0wNiAxOTo0MDowMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgorCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmg6CisJKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6CisJKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmg6CisJICBsaWJzOiByZW1vdmUgZGVwcmVjYXRlZCBjb2RlCisKKzIwMTAtMTItMDYgMTk6MjQ6MzAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6CisJICBkb2NzOiB1cGRhdGUgcG9ydGluZyBkb2MKKworMjAxMC0xMi0wNiAxOToxODozMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlcy5pbjoKKwkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzOgorCSogZ3N0L01ha2VmaWxlLmFtOgorCSogZ3N0L2dzdC5oOgorCSogZ3N0L2dzdGJpbi5jOgorCSogZ3N0L2dzdGNhcHMuYzoKKwkqIGdzdC9nc3RjYXBzLmg6CisJKiBnc3QvZ3N0Y29uZmlnLmguaW46CisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSogZ3N0L2dzdGVsZW1lbnQuaDoKKwkqIGdzdC9nc3RnaG9zdHBhZC5jOgorCSogZ3N0L2dzdG9iamVjdC5jOgorCSogZ3N0L2dzdG9iamVjdC5oOgorCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5oOgorCSogZ3N0L2dzdHBpcGVsaW5lLmM6CisJKiBnc3QvZ3N0cGlwZWxpbmUuaDoKKwkqIGdzdC9nc3RwbHVnaW4uYzoKKwkqIGdzdC9nc3RwbHVnaW4uaDoKKwkqIGdzdC9nc3RyZWdpc3RyeS5oOgorCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6CisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkqIGdzdC9nc3R1dGlscy5oOgorCSogZ3N0L2dzdHhtbC5jOgorCSogZ3N0L2dzdHhtbC5oOgorCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKKwkqIHRvb2xzL2dzdC1sYXVuY2guYzoKKwkqIHRvb2xzL2dzdC14bWxpbnNwZWN0LmM6CisJICByZW1vdmUgZGVwcmVjYXRlZCBzeW1ib2xzIGFuZCBtZXRob2RzCisKKzIwMTAtMTItMDYgMTM6NTE6NTAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6CisJICBwb3J0aW5nOiBBZGQgcG9ydGluZyBkb2MKKworMjAxMC0xMi0wNiAxMzo0ODozMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9yYW5kb20vcGxhbi0wLjExLnR4dDoKKwkgIHBsYW46IGZpeCB0eXBvCisKKzIwMTAtMTEtMTEgMTA6Mzg6NTcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvcmFuZG9tL3BsYW4tMC4xMS50eHQ6CisJICBwbGFuOiBhZGQgc29tZXRoaW5nIGFib3V0IEdWYXJpYW50IHJlZ2lzdHJ5CisKKzIwMTAtMTEtMDggMTg6Mzk6MzkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvcmFuZG9tL3VzZS1jYXNlcy0wLjExLnR4dDoKKwkgIGFkZCBzb21lIHVzZS1jYXNlcworCisyMDEwLTExLTA4IDE0OjA4OjM2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL3JhbmRvbS9wbGFuLTAuMTEudHh0OgorCSAgbW9yZSB1cGRhdGVzCisKKzIwMTAtMTEtMDggMTI6MTQ6MTIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvcmFuZG9tL3BsYW4tMC4xMS50eHQ6CisJICBtb3JlIHVwZGF0ZXMKKworMjAxMC0xMS0wOCAxMToxODowNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9yYW5kb20vcGxhbi0wLjExLnR4dDoKKwkgIG1vcmUgdXBkYXRlcworCisyMDEwLTExLTA0IDE5OjMwOjU4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL3JhbmRvbS9wbGFuLTAuMTEudHh0OgorCSAgd29yayBvbiB0b2RvIGxpc3QgZm9yIDAuMTEgd29yaworCisyMDEwLTEyLTA2IDEzOjIxOjQ1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBhbmRyb2lkL2Jhc2UubWs6CisJKiBhbmRyb2lkL2NvbnRyb2xsZXIubWs6CisJKiBhbmRyb2lkL2RhdGFwcm90b2NvbC5tazoKKwkqIGFuZHJvaWQvZWxlbWVudHMubWs6CisJKiBhbmRyb2lkL2dzdC1pbnNwZWN0Lm1rOgorCSogYW5kcm9pZC9nc3QtbGF1bmNoLm1rOgorCSogYW5kcm9pZC9nc3QtcGx1Z2luLXNjYW5uZXIubWs6CisJKiBhbmRyb2lkL2dzdC5tazoKKwkqIGFuZHJvaWQvaW5kZXhlcnMubWs6CisJKiBhbmRyb2lkL25ldC5tazoKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGdzdC9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9uZXQvTWFrZWZpbGUuYW06CisJKiB0b29scy9nc3QtZmVlZGJhY2stbS5tOgorCSogdG9vbHMvZ3N0cmVhbWVyLWNvbXBsZXRpb246CisJICBtb3JlIDAuMTAgLT4gMC4xMQorCisyMDEwLTEyLTA2IDEyOjAzOjI5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJICBjb25maWd1cmU6IG9wZW4gMC4xMSBicmFuY2gKKworMjAxMC0xMi0wNiAxMToxODowMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBvbGwuYzoKKwkgIHBvbGw6IHJldHVybiB3YWtldXAgZXZlbnQgaW4gR1BvbGxGRAorCisyMDEwLTEyLTA2IDExOjA3OjM4ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiBhZGQgc29tZSBkZWJ1ZyB0byBmYXN0IHB1c2ggcGF0aAorCSAgLi4uIHNvIHdlIGRvbid0IGxvb3NlIHRyYWNrIGF0IHRpbWVzIGl0IGlzIG5lZWRlZCB0aGUgbW9zdC4KKworMjAxMC0xMi0wNSAxNTo1ODo0OCArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgYmFzZXNpbms6IERvbid0IGZvcmdldCB0byB1bnJlZiB0aGUgY2FjaGVkIENsb2NrSWQKKworMjAxMC0xMi0wNSAxNDo0NjoyOCArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKKwkgIGdzdGNoZWNrOiBEb24ndCBjaGVjayBwYWQgcmVmY291bnQgdG9vIGVhcmx5CisJICBCZWNhdXNlIG9mIHRoZSBuZXcgcGFkIGNhY2hpbmcgc3lzdGVtLCB0aGUgcGVlciBwYWQgbWlnaHQgc3RpbGwKKwkgIGhhdmUgYSByZWZlcmVuY2Ugb24gYSBwYWQuIFdlIHRoZXJlZm9yZSBkZWxheSB0aGUgcmVmY291bnQgY2hlY2tpbmcKKwkgIHRpbCAnYWZ0ZXInIHdlIHVubGluayB0aGUgcGFkIGZyb20gYW55IHBvdGVudGlhbCBwZWVyLgorCisyMDEwLTEyLTA1IDE0OjExOjQ1ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0YmluLmM6CisJICBnc3RiaW46IE1ha2UgZWxlbWVudCBuYW1lcyBjbGVhcmVyIGluIGRlYnVnIHN0YXRlbWVudHMKKwkgIFJlcGxhY2VzIGNvbmZ1c2luZyBtZXNzYWdlcyBsaWtlOgorCSAgIk5hbWUgbmFtZSBpcyBub3QgdW5pcXVlIGluIGJpbiBiaW4sIG5vdCBhZGRpbmciCisJICBieQorCSAgIk5hbWUgJ25hbWUnIGlzIG5vdCB1bmlxdWUgaW4gYmluICdiaW4nLCBub3QgYWRkaW5nIgorCisyMDEwLTEyLTA0IDIxOjA2OjM0IC0wODAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6CisJICByZWdpc3RyeTogRml4IHBlcm1pc3Npb25zIGlmIHVtYXNrIGlzIGJyb2tlbgorCSAgRml4ZXM6ICM1NjQwNTYuCisKKzIwMTAtMTItMDQgMTQ6MjM6NTkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2Rlc2lnbi9NYWtlZmlsZS5hbToKKwkgIGJ1aWxkOiByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZXMgYWZ0ZXIgYmFja3NsYXNoIGluIE1ha2VmaWxlLmFtCisKKzIwMTAtMTItMDQgMTM6MTQ6MzkgKzAwMDAgIEtvb3AgTWFzdCA8a3dtQEZyZWVCU0Qub3JnPgorCisJKiBjb25maWd1cmUuYWM6CisJICBjb25maWd1cmU6IGZpeCB0ZXN0IHNvIGl0IHdvcmtzIHdpdGggRnJlZUJTRCdzIC9iaW4vc2gKKwkgIFVzZSAnPScgaW5zdGVhZCBvZiAnPT0nLiBGaXhlczoKKwkgIGNvbmZpZ3VyZTogd29ya2luZyBjKysgY29tcGlsZXIgZm91bmQ6IHllcworCSAgdGVzdDogeHllczogdW5leHBlY3RlZCBvcGVyYXRvcgorCSAgaHR0cDovL2J1Z3ppbGxhLWF0dGFjaG1lbnRzLmdub21lLm9yZy9hdHRhY2htZW50LmNnaT9pZD0xNzU2OTIKKworMjAxMC0xMi0wMyAxMToyOTozMCAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkqIGdzdC9nc3RvYmplY3QuYzoKKwkgIFVzZSBnX3NucHJpbnRmKCkgaW5zdGVhZCBvZiBzbnByaW50ZigpCisKKzIwMTAtMTItMDMgMTY6NDQ6MjMgKzAxMDAgIEJlbmphbWluIEdhaWduYXJkIDxiZW5qYW1pbi5nYWlnbmFyZEBzdGVyaWNzc29uLmNvbT4KKworCSogQW5kcm9pZC5tazoKKwkqIGFuZHJvaWQvTk9USUNFOgorCSogYW5kcm9pZC9iYXNlLm1rOgorCSogYW5kcm9pZC9jb250cm9sbGVyLm1rOgorCSogYW5kcm9pZC9kYXRhcHJvdG9jb2wubWs6CisJKiBhbmRyb2lkL2VsZW1lbnRzLm1rOgorCSogYW5kcm9pZC9nc3QtaW5zcGVjdC5tazoKKwkqIGFuZHJvaWQvZ3N0LWxhdW5jaC5tazoKKwkqIGFuZHJvaWQvZ3N0LXBsdWdpbi1zY2FubmVyLm1rOgorCSogYW5kcm9pZC9nc3QubWs6CisJKiBhbmRyb2lkL2dzdC9nc3Rjb25maWcuaDoKKwkqIGFuZHJvaWQvZ3N0L2dzdGVudW10eXBlcy5jOgorCSogYW5kcm9pZC9nc3QvZ3N0ZW51bXR5cGVzLmg6CisJKiBhbmRyb2lkL2dzdC9nc3RtYXJzaGFsLmM6CisJKiBhbmRyb2lkL2dzdC9nc3RtYXJzaGFsLmg6CisJKiBhbmRyb2lkL2dzdC9nc3R2ZXJzaW9uLmg6CisJKiBhbmRyb2lkL2dzdC9wYXJzZS9ncmFtbWFyLm91dHB1dDoKKwkqIGFuZHJvaWQvZ3N0L3BhcnNlL2dyYW1tYXIudGFiLmM6CisJKiBhbmRyb2lkL2dzdC9wYXJzZS9ncmFtbWFyLnRhYi5oOgorCSogYW5kcm9pZC9nc3QvcGFyc2UvbGV4Ll9nc3RfcGFyc2VfeXkuYzoKKwkqIGFuZHJvaWQvaW5kZXhlcnMubWs6CisJKiBhbmRyb2lkL25ldC5tazoKKwkqIGFuZHJvaWQvdG9vbHMubWs6CisJICBBZGQgYnVpbGQgc3lzdGVtIGZvciBBbmRyb2lkCisKKzIwMTAtMTItMDMgMTY6MDI6MDkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RjbG9jay5jOgorCSAgY2xvY2s6IGluaXQgdmFyaWFibGVzIGluIF9yZWluaXQoKQorCSAgUHJvcGVybHkgaW5pdGlhbGl6ZSB2YXJpYWJsZXMgaW4gX3JlaW5pdCgpIHRvbworCisyMDEwLTEwLTIxIDE4OjA4OjUxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Y2xvY2suYzoKKwkqIGdzdC9nc3RjbG9jay5oOgorCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6CisJICBjbG9jazogbWFrZSBzeW5jIGNsb2NrIHdhaXQgbG9ja2ZyZWUKKwkgIE1ha2UgdGhlIGNvbW1vbiBjYXNlIGxvY2tmcmVlLgorCisyMDEwLTEyLTAzIDEyOjA0OjIzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6CisJICBiaW5hcnlyZWdpc3RyeTogdXNlIGZ1bmN0aW9uIGludHJvZHVjZWQgaW4gR0xpYiAyLjIyIHVuY29uZGl0aW9uYWxseQorCisyMDEwLTEyLTAzIDEyOjQyOjEwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cG9sbC5jOgorCSAgcG9sbDogc21hbGwgY2xlYW51cHMKKworMjAxMC0xMS0wMyAxODozODoxMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBvbGwuYzoKKwkgIHBvbGw6IG1ha2Ugc3VyZSB3ZSByZW1vdmUgdGhlIHJlYWRmZCBtZXNzYWdlcworCisyMDEwLTExLTAzIDE4OjE2OjA4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdHBvbGwuYzoKKwkqIGdzdC9nc3Rwb2xsLmg6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIHBvbGw6IGFkZCBtZXRob2QgdG8gZ2V0IGEgR1BvbGxGRAorCisyMDEwLTExLTAzIDE3OjU2OjI0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cG9sbC5jOgorCSAgcG9sbDogUmVmYWN0b3IgYW5kIG1ha2UgbW9yZSBsb2NrZnJlZQorCSAgUmVmYWN0b3IgdGhlIHdha2V1cCBvZiB0aGUgcG9sbCB0aHJlYWQuCisJICBBbHdheXMgbWFrZSBhIGNvbnRyb2wgc29ja2V0IHRvIG1ha2UgdGhpbmdzIGVhc2llci4KKwkgIE1ha2UgbW9yZSBtZXRob2RzIGxvY2tmcmVlLgorCisyMDEwLTEwLTIxIDAyOjAyOjI5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cG9sbC5jOgorCSAgcG9sbDogbW92ZSBsb2NrIHRvIHdoZXJlIGl0IG1ha2VzIG1vcmUgc2Vuc2UKKworMjAxMC0xMC0yMSAwMToxNTo0NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBvbGwuYzoKKwkgIHBvbGw6IG1ha2UgdGltZXIgcG9sbHMgbG9ja2ZyZWUKKwkgIE1ha2Ugc3VyZSB3ZSBkb24ndCB0YWtlIGEgbXV0ZXggaW4gdGhlIG5vcm1hbCBjb2RlIHBhdGggb2YgdGhlIHRpbWVyCisJICBwb2xsLgorCisyMDEwLTEyLTAyIDE3OjUxOjU4ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6CisJICBtdWx0aXF1ZXVlOiByZXR1cm4gdXBvbiBpbnB1dCB3aGVuIGFscmVhZHkgZW9zCisJICAuLi4gcmF0aGVyIHRoYW4gaGFuZ2luZyBpbmNvbWluZyB0aHJlYWQgKGFzIGNvbnNpZGVyZWQgZnVsbCBpbiBlb3MpLgorCisyMDEwLTEyLTAyIDE3OjQ5OjA0ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGNhcHMuYzoKKwkgIGNhcHM6IGZpeCBkb2MgdHlwbworCisyMDEwLTEwLTE2IDE2OjE2OjE3ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKKwkgIGdzdC1pbnNwZWN0OiByZW1vdmUgc29tZSBjb21tZW50ZWQgY29kZQorCisyMDEwLTEyLTAzIDEzOjUyOjAzICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RvYmplY3QuYzoKKwkgIGdzdG9iamVjdDogYWRkIHN0ZGlvLmggZm9yIHNucHJpbnQKKworMjAxMC0xMi0wMyAxMToyNzoxNyArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZ3N0L2dzdHBpcGVsaW5lLmM6CisJICBwaXBlbGluZTogVXNlIGFuIG9iamVjdCBhcyBmaXJzdCBhcmd1bWVudCB0byBHU1RfV0FSTklOR19PQkpFQ1QKKworMjAwOS0wNC0xMSAxNTowNDo0MSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSogZ3N0L2dzdGJ1cy5jOgorCSogZ3N0L2dzdGNhcHMuYzoKKwkqIGdzdC9nc3RjbG9jay5jOgorCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKKwkqIGdzdC9nc3RvYmplY3QuYzoKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6CisJKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSogZ3N0L2dzdHV0aWxzLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6CisJICBtaWNyby1vcHRpbTogaWYgKHgpIGlzIGNoZWFwZXIgdGhhbiBpZiAoeCA+IDApIGZvciB1bnNpZ25lZCBpbnRlZ2VycworCisyMDA5LTA0LTEwIDA5OjAxOjIyICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0cXVlcnkuYzoKKwkgIGdzdHF1ZXJ5OiBVc2Ugc3RydWN0dXJlIHByb3BlcnR5IGRpcmVjdGx5LCBhdm9pZCBmdW5jdGlvbiB2YXJpYWJsZS4KKwkgIEFsbCBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGNhbiBhY2Nlc3MgdGhlIHN0cnVjdHVyZSBmaWVsZCBvZiBhIHF1ZXJ5IGRpcmVjdGx5LgorCSAgVGhpcyBhdm9pZHMgaGF2aW5nIHRvIGNhbGwgZ3N0X3F1ZXJ5X2dldF9zdHJ1Y3R1cmUoKSB0byBnZXQgaXQsIGFsb25nIHdpdGggYmVpbmcKKwkgIGFibGUgdG8gcmVtb3ZlIHNvbWUgZnVuY3Rpb24gdmFyaWFibGVzIHRoYXQgd2VyZSB1c2VkIHRvIHN0b3JlIHRoZSByZXN1bHQgb2YgdGhhdAorCSAgZnVuY3Rpb24uCisKKzIwMDktMDQtMTAgMDg6NTE6MDIgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGdzdC9nc3RpbmZvLmM6CisJICBnc3RpbmZvOiByZW1vdmUgdXNlbGVzcyB0ZXJuYXJ5IG9wZXJhdG9yIHVzYWdlLgorCisyMDEwLTA5LTE0IDEzOjA4OjU3ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0ZXZlbnQuYzoKKwkgIGdzdGV2ZW50OiBVc2Ugc3RydWN0dXJlIHByb3BlcnR5IGRpcmVjdGx5LCBhdm9pZCBmdW5jdGlvbiB2YXJpYWJsZS4KKwkgIEFsbCBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGNhbiBhY2Nlc3MgdGhlIHN0cnVjdHVyZSBmaWVsZCBvZiBhbiBldmVudCBkaXJlY3RseS4KKwkgIFRoaXMgYXZvaWRzIGhhdmluZyB0byBjYWxsIGdzdF9xdWVyeV9nZXRfc3RydWN0dXJlKCkgdG8gZ2V0IGl0LCBhbG9uZyB3aXRoIGJlaW5nCisJICBhYmxlIHRvIHJlbW92ZSBzb21lIGZ1bmN0aW9uIHZhcmlhYmxlcyB0aGF0IHdlcmUgdXNlZCB0byBzdG9yZSB0aGUgcmVzdWx0IG9mIHRoYXQKKwkgIGZ1bmN0aW9uLgorCisyMDEwLTEyLTAzIDExOjE5OjI3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IGFkZCBwdXNoIGNhY2hlIHRvIGJ1ZmZlcmxpc3RzCisJICBBZGQgdGhlIHB1c2ggY2FoY2UgZm9yIHRoZSBidWZmZXJsaXN0IHB1c2ggY29kZSBwYXRoIGFzIHdlbGwuCisKKzIwMTAtMTItMDMgMTE6MTE6MjQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogZG9uJ3QgY2FjaGUgdGhlIHBlZXIgY2hhaW5mdW5jCisJICBUaGVyZSBpcyBubyBuZWVkIHRvIGNhY2hlIHRoZSBwZWVyIGNoYWluZnVuY3Rpb24gYXMgd2UgY2FuIGp1c3QgYXMgZWZmaWNpZW50bHkKKwkgIGdldCB0byBpdCBmcm9tIHRoZSBwZWVyIG9iamVjdC4gQWxzbyBub3QgY2FjaGluZyB0aGUgY2hhaW4gZnVuY3Rpb24gd29ya3MgYmV0dGVyCisJICBiZWNhdXNlIHRoZW4gd2UgYXV0b21hdGljYWxseSBnZXQgdGhlIG5ldyBjaGFpbmZ1bmN0aW9ucyB3aGVuIHRoZXkgY2hhbmdlLgorCisyMDEwLTEyLTAzIDEwOjUyOjM5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0X3ByaXZhdGUuaDoKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3R1dGlscy5jOgorCSAgcGFkOiBjbGVhciBwYWQgY2FjaGUgd2hlbiBpbnN0YWxsaW5nIHByb2JlcworCSAgTW92ZSB0aGUgbWV0aG9kIHRvIGNsZWFyIHRoZSBwYWQgY2FjaGUgaW50byBfcHJpdmF0ZS5oCisJICBDbGVhciB0aGUgcGFkIGNhY2hlIHdoZW4gaW5zdGFsbGluZyBwYWQgcHJvYmVzLgorCisyMDEwLTEwLTIwIDE3OjExOjExICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IGV4cGxpY2l0bHkgaW5saW5lIHNvbWUgZnVuY3Rpb25zCisKKzIwMTAtMTAtMTMgMDI6NDg6NTYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogcmVtb3ZlIHVudXNlZCB2YXJpYWJsZQorCisyMDEwLTEwLTEzIDAyOjQyOjIzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IGludmFsaWRhdGUgY2FjaGVzIG9uIGZsdXNoIGFuZCBwYWQgYmxvY2sKKworMjAxMC0xMC0xMyAwMjoyMDo0MyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiBkb24ndCB1bnJlZiBOVUxMIGNhcHMKKworMjAxMC0xMC0xMyAwMjoxNzoyOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiBhZGQgaW52YWxpZGF0ZSBmdW5jdGlvbgorCSAgTW9yZSBzbWFsbCBvcHRpbWlzYXRpb25zLCByZW1vdmUgdGhlIHVubmVlZGVkIHZhbGlkIGJvb2xlYW4uCisJICBBZGQgZnVuY3Rpb24gdG8gaW52YWxpZGUgdGhlIGNhY2hlLgorCSAgSW52YWxpZGF0ZSB0aGUgY2FjaGUgb24gdW5saW5rLgorCisyMDEwLTEwLTEzIDAxOjM3OjUyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IHNtYWxsIGNsZWFudXAKKworMjAxMC0xMC0xMyAwMToyNToyNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiBpbXByb3ZlIHBhZCBwdXNoIGNhY2hpbmcKKwkgIEJ1aWxkIHRoZSBjYWNoZSB3aGlsZSB3ZSBwdXNoIGRhdGEuIFdoZW4gd2UgZG9uJ3QgaGF2ZSBhIGNhY2hlLCB3ZSBydW4gdGhlCisJICBzbG93cGF0aCBhbmQgY29sbGVjdCBjYWNoZWFibGUgcHJvcGVydGllcy4gV2hlbiBhbGwgY29uZGl0aW9ucyBhcmUgbWV0LCBrZWVwIHRoZQorCSAgY2FjaGVkIGRhdGEgYXJvdW5kIHNvIHRoYXQgd2UgY2FuIG1vcmUgZWZmaWNpZW50bHkgcHVzaCBkYXRhIGFyb3VuZC4KKworMjAxMC0xMC0xMiAxMjoyOTo0OSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiBwcm90b3R5cGUgb2YgcGFkIHB1c2ggY2FjaGUKKwkgIFByb3RvdHlwZSBvZiBob3cgd2UgY2FuIGNhY2hlIHRoZSBwZWVyIGFuZCBjYXBzIGZvciBhIHBhZCBsaW5rLgorCisyMDEwLTEyLTAzIDEyOjIzOjI3ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHRlc3RzL2V4YW1wbGVzL21hbnVhbC9leHRyYWN0LnBsOgorCSAgZG9jczogZml4IHByZXZpb3VzIGV4dHJhY3QucGwgY29tbWl0CisJICBNYWtlIGl0IGFsc28gd29yayBpbiB0aGUgc3JjZGlyPWJ1aWxkZGlyIGNhc2UgYWdhaW4uCisKKzIwMTAtMTAtMjAgMTE6NTg6MDYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R0YXNrLmM6CisJICB0YXNrOiBhdm9pZCB0YXNrIGxvY2sgZm9yIGVhY2ggaXRlcmF0aW9uCisJICBNYWtlIHRoZSB0YXNrIHN0YXRlIGFuIGF0b21pYyB2YXJpYWJsZSBzbyB0aGF0IHdlIGNhbiBhdm9pZCB0YWtpbmcgYW5kIHJlbGVhc2luZworCSAgdGhlIHRhc2sgbG9jayBmb3IgZWFjaCBpdGVyYXRpb24uCisKKzIwMTAtMTItMDMgMTA6MTg6MTkgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogdGVzdHMvZXhhbXBsZXMvbWFudWFsL2V4dHJhY3QucGw6CisJICBkb2NzOiBmaXggZXhhbXBsZSBtYXRjaGluZyBpbiBleHRyYWN0LnBsCisJICBXaGVuIGJ1aWxkaW5nIHdpdGggJHNyY2RpciAhPSAkYnVpbGRkaXIgb3V0cHV0IHdvdWxkIGNvbnRhaW4gdGhlIGJ1aWxkZGlyIHBhdGguCisJICBTdHJpcCB0aGUgcGF0aCB3aGVuIHNjYW5uaW5nIHRoZSB4bWwgZm9yIHRoZSBleGFtcGxlIG1hcmtlcnMuCisKKzIwMTAtMTEtMTkgMTU6MDY6MDUgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RxdWVyeS5jOgorCSAgZG9jczogcXVlcnkgZG9jIGltcHJvdmVtZW50cworCSAgTW9yZSB4cmVmcy4gTWVudGlvbmVkIHRoYXQgc29tZSBxdWVyaWVzIG5lZWQgYSBydW5uaW5nIHBpcGVsaW5lLgorCisyMDEwLTExLTE5IDExOjQzOjQwICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5oOgorCSAgZWxlbWVudGZhY3Rvcnk6IGNsYXJpZnkgbGlzdCBpdGVtIHR5cGVzIGluIGNvbW1lbnRzCisKKzIwMTAtMTEtMTkgMTA6Mjk6MzQgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdHBhZHRlbXBsYXRlLmM6CisJKiBnc3QvZ3N0cGFkdGVtcGxhdGUuaDoKKwkgIHBhZHRlbXBsYXRlOiBhZGQgdHdvIEZJWE1FMC4xMTogY29tbWVudHMKKworMjAxMC0xMS0xOSAxMDoyMzo1NCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzoKKwkgIHBhZHRlbXBsYXRlOiBhbGxvdyBkaXNhYmxpbmJnIHRoZSB0ZW1wbGF0ZSBuYW1lIGNvbmZvcm1hbmNlIGNoZWNrcworCisyMDEwLTExLTE4IDE2OjMxOjMwICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOgorCSAgcGFkdGVtcGxhdGU6IHRoZSBzdXBwbGllZCBjYXBzIG1heSBub3QgYmUgTlVMTAorCSAgVGhlcmUgaXMgYSBlYXJsaWVyIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIGNoZWNrLiBBbHNvCisJICBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgZG9lcyBub3QgaGF2ZSBzdWNoIGEgY2hlY2suCisKKzIwMTAtMTEtMDMgMTY6Mzc6MTAgKzAxMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8YW1vcmFsZXNAZmx1bW90aW9uLmNvbT4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOgorCSAgZmFrZXNpbms6IFByaW50IHNpbmstbWVzc2FnZSBldmVudHMgbGlrZSBhIG1lc3NhZ2UgYW5kIHRoZSBHc3RNZXNzYWdlIHN0cnVjdHVyZQorCisyMDEwLTExLTAxIDE1OjMyOjQzICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGRvY3MvZGVzaWduL01ha2VmaWxlLmFtOgorCSogZG9jcy9kZXNpZ24vZHJhZnQtYnVmZmVyMi50eHQ6CisJKiBkb2NzL2Rlc2lnbi9kcmFmdC1rbGFzcy50eHQ6CisJKiBkb2NzL2Rlc2lnbi9kcmFmdC1tZXRhZGF0YS50eHQ6CisJKiBkb2NzL2Rlc2lnbi9kcmFmdC10YWdyZWFkaW5nLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtTVQtcmVmY291bnRpbmcudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtYWN0aXZhdGlvbi50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LWJsb2NrLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtYnVmZmVyaW5nLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtYnVmZmVybGlzdC50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LWNsb2Nrcy50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LWNvbnZlbnRpb25zLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtZHluYW1pYy50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtc2luay50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtc291cmNlLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtZWxlbWVudC10cmFuc2Zvcm0udHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1ldmVudHMudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1mcmFtZXN0ZXAudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1nc3RiaW4udHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1nc3RidXMudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1nc3RlbGVtZW50LnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtZ3N0Z2hvc3RwYWQudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1nc3RvYmplY3QudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1nc3RwaXBlbGluZS50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LWxhdGVuY3kudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1saXZlLXNvdXJjZS50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LW1lc3NhZ2VzLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtbWlzc2luZy1wbHVnaW5zLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtbmVnb3RpYXRpb24udHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1vdmVydmlldy50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LXByZXJvbGwudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1wdXNoLXB1bGwudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1xb3MudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1xdWVyeS50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LXJlbGF0aW9ucy50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LXNjaGVkdWxpbmcudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1zZWVraW5nLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtc2VnbWVudHMudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1zcGFyc2VzdHJlYW1zLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtc3RhbmRhcmRzLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtc3RhdGVzLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtc3RyZWFtLXN0YXR1cy50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LXN0cmVhbXMudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1zeW5jaHJvbmlzYXRpb24udHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC10cmlja21vZGVzLnR4dDoKKwkgIGRlc2lnbi1kb2NzOiBhZGQgaHRtbCBvdXRwdXQgdXNpbmcgYXNjaWlkb2MKKwkgIFVuaWZ5IHRoZSBhZC1ob2MgbWFya3VwIHRvIGJlIGFzY2lpZG9jIHN0eWxlIGluIG1hbnkgcGxhY2VzLiBBZGQgYSAiaHRtbCIgdGFyZ2V0CisJICB0byBNYWtlZmlsZSB0byBnZW5lcmF0ZSB0aGUgb3V0cHV0LgorCisyMDEwLTEwLTE5IDE0OjI3OjIwICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RvYmplY3QuYzoKKwkgIGdzdG9iamVjdDogbW9yZSBkZWZhdWx0IG5hbWUgZ2VuZXJhdGlvbiBtb3JlIGVmZmljaWVudAorCSAgU2F2ZSB+MjAwMCBtYWxsb2MvbWVtY3B5L2ZyZWUgcGFpcnMgYXQgc3RhcnR1cCBieSBydW5uaW5nIHRvX2xvd2VyIGluLXBsYWNlLgorCSAgQWxzbyBza2lwIHRoZSBudW1iZXJzIGFzIHdlIGNhbi4KKworMjAxMC0xMC0xOCAxNDo0NToxNiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgorCSAgcGx1Z2luZmVhdHVyZTogdXNlIHRoZSBwYXJlbnRfY2xhc3MgZnJvbSBHX0RFRklORV9UWVBFIG1hY3JvIGFuZCBkcm9wIGV4dHJhIGNvcHkKKworMjAxMC0xMC0yMCAxNDoyNzoxNiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKKwkgIGVsZW1lbnRmYWN0b3J5OiB1c2UgZ19pbnRlcm5fc3RyaW5nIGZvciBpbnRlcmZhY2UgbmFtZXMKKworMjAxMC0xMC0xOCAxMzoyOTo1MyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKKwkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5jOgorCSAgcmVnaXN0cnk6IGFsc28gaW50ZXJuIHRoZSBzdGF0aWMgY2FwcworCisyMDEwLTEyLTAzIDAwOjAwOjA5ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgorCSAgZWxlbWVudGZhY3Rvcnk6IG1ldGEtZGF0YSBjYW4gYmUgTlVMTAorCisyMDEwLTEyLTAyIDE2OjI4OjQzIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGRhdGV0aW1lLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZGF0ZXRpbWUuYzoKKwkgIGdzdGRhdGV0aW1lOiBGaXggaGFuZGxpbmcgb2YgdGltZXpvbmVzCisJICBGaXggcmV0dXJuaW5nIG9mIHRpbWV6b25lcyBvbiBzeXN0ZW1zIHdpdGggZ2RhdGV0aW1lCisJICB0byB1c2UgZmxvYXRzIG9uIHRoZSBtYXRoIGV4cHJlc3Npb24gdG8gYXZvaWQKKwkgIHRydW5jYXRpbmcgdGhlIGZyYWN0aW9uYWwgcGFydC4KKwkgIEFsc28gYWRkcyBhIHRlc3QgZm9yIGNvdmVyaW5nIHRoaXMgY2FzZS4KKworMjAxMC0xMi0wMiAxOTo0NDo0MSArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmg6CisJICBnc3RkYXRhcXVldWU6IERvbid0IGJyZWFrIEFCSQorCSAgVGhlIG9yZGVyIG9mIHRoZSBmaWVsZCB3YXMgd3JvbmcsIGFuZCB0aGUgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGRpZG4ndAorCSAgZW5kIHVwIGJlaW5nIHRoZSBzYW1lLgorCisyMDEwLTExLTI1IDE4OjQ4OjA5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc2luay5jOgorCSogdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jOgorCSAgYmFzZXNpbms6IHJld29yayBwb3NpdGlvbiByZXBvcnRpbmcgY29kZQorCSAgVW5pZnkgdGhlIGRpZmZlcmVudCBwb3NpdGlvbiByZXBvcnRpbmcgY29kZSBwYXRocyB0byBtYWtlIGl0IG1vcmUKKwkgIHVuZGVyc3RhbmRhYmxlLgorCSAgVXNlIHN0YXJ0X3RpbWUgdG8gZ2V0IG1vcmUgYWNjdXJhdGUgcG9zaXRpb24gcmVwb3J0aW5nIGluIHBhdXNlZC4KKwkgIEZpeCB1bml0IHRlc3RzIGZvciBtb3JlIGFjY3VyYXRlIHJlcG9ydGluZy4KKworMjAxMC0xMS0yNSAxNjowNjowNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgYmFzZXNpbms6IHBlcmZvcm0gd2FpdF9wcmVyb2xsIGluIGEgd2hpbGUgbG9vcAorCSAgV2UgbmVlZCB0byBjb250aW51ZSBjYWxsaW5nIHdhaXRfcHJlcm9sbCgpIGFzIGxvbmcgYXMgdGhlIG5lZWRfcHJlcm9sbCB2YXJpYWJsZQorCSAgaXMgdHJ1ZS4KKworMjAxMC0xMS0xNyAxNjo0NjozMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHV0aWxzLmM6CisJICB1dGlsczogcmV0dXJuIGltbWVkaWF0ZWx5IGZvciAtMSBjb252ZXJzaW9uCisJICBXaGVuIHdlIGFyZSBhc2tlZCB0byBjb252ZXJ0IC0xLCB3ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5IHdpdGggYSAtMSByZXR1cm4KKwkgIHZhbHVlLgorCisyMDEwLTExLTE3IDE2OjQyOjAwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIHV0aWxzOiBhIGNvbnZlcnQgcXVlcnkgY2FuIGhhdmUgYSAtMSBpbnB1dCB2YWx1ZQorCSAgSXQgaXMgYWxsb3dlZCB0byBwYXNzIC0xIHRvIHRoZSBzcmNfdmFsIGZvciBhIGNvbnZlcnQuCisKKzIwMTAtMTEtMTYgMTI6MjA6MzcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc2lua3MuYzoKKwkgIGJhc2VzaW5rOiBhbHNvIHByZXJvbGwgYWZ0ZXIgYSBmbHVzaCB3aXRoIGFzeW5jPWZhbHNlCisJICBNYWtlIHN1cmUgdG8gcHJlcm9sbCBhZnRlciBhIGZsdXNoIGV2ZW4gd2hlbiB3ZSBhcmUgYXN5bmM9ZmFsc2UuCisJICBBZGQgdW5pdCB0ZXN0LgorCSAgRml4ZXMgIzYzNDk2NQorCisyMDEwLTExLTE1IDE4OjIwOjI3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKKwkgIGFkYXB0ZXI6IGltcHJvdmUgZG9jcyBhIGxpdHRsZS4KKworMjAxMC0xMS0xNSAxODoxNzozNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jOgorCSAgY2hlY2s6IGxvY2sgc3JjIHN0YXRlIHRvIGF2b2lkIGVycm9yIGNhc2VzCisJICBMb2NrIHRoZSBzdGF0ZSBvZiB0aGUgc3JjIGVsZW1lbnQgb3IgZWxzZSB0aGUgcGlwZWxpbmUgbWlnaHQgZ28gaW50byB0aGUgZXJyb3IKKwkgIHN0YXRlIHdoZW4gd2Ugc2V0IGl0IHRvIFBBVVNFRCBsYXRlci4KKworMjAxMC0xMS0xNSAxMjo0OTowNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBpcGVsaW5lLmM6CisJICBwaXBlbGluZTogYXZvaWQgdXNpbmcgaW52YWxpZCBjbG9jayB0aW1lcworCSAgQmUgZXh0cmEgY2FyZWZ1bCB0byBub3QgdXNlIGludmFsaWQgY2xvY2sgdGltZXMgYnV0IGdpdmUgYSB3YXJuaW5nIGluc3RlYWQuIFRoaXMKKwkgIHNob3VsZCBtYWtlIHRoaW5ncyB3b3JrIGJldHRlciB3aXRoIGZhdWx0eSBjbG9jayBpbXBsZW1lbnRhdGlvbnMuCisKKzIwMTAtMTEtMTEgMTA6NDE6MTggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RjYXBzLmM6CisJICBjYXBzOiBpbXByb3ZlIHNvbWUgY29tbWVudHMgYWJvdXQgdGhlIHppZ3phZyBpbnRlcnNlY3Rpb24KKworMjAxMC0xMi0wMiAxMzowNDozMCArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgIGRvY3M6IEFkZCB1bnVzZWQgc3ltYm9scyB0byBwcm9wZXIgc2VjdGlvbnMKKworMjAxMC0xMi0wMiAxMzowMzo1NyArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICBkb2NzOiBBZGQgR3N0RGF0ZVRpbWUgc2VjdGlvbiBhbmQgdXBkYXRlIGl0IGZvciBsYXRlc3Qgc3ltYm9scworCisyMDEwLTEwLTE5IDE4OjA5OjUzICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSAgcXVldWUyOiBPbmx5IGNhbGwgdXBkYXRlX2J1ZmZlcmluZyBpZiBuZWVkZWQuCisJICB1cGRhdGVfYnVmZmVyaW5nIGlzIHNvIGJpZyBpdCB3aWxsIG5ldmVyIGJlIGlubGluZWQgKGFuZCBzaG91bGRuJ3QpLAorCSAgd2UgdGhlcmVmb3JlIG1vdmUgdGhlIGNoZWNrIG91dHNpZGUgb2YgaXQuCisKKzIwMTAtMTAtMTkgMTc6NDU6MTYgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IEF2b2lkIHJlLWNoZWNraW5nIG1hbnkgdGltZXMgd2hldGhlciBhbiBpdGVtIGlzIGEgYnVmZmVyCisJICBBdm9pZHMgY2FsbGluZyA2IHRpbWVzIGdzdF9idWZmZXJfZ2V0X3R5cGUoKSBmb3IgZXZlcnkgaXRlbSBjb21pbmcKKwkgIHRocm91Z2ggcXVldWUyCisKKzIwMTAtMTAtMTkgMTc6NDM6NTYgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IFJlZHVjZSBhbW91bnQgb2YgdGltZSBsb2NrcyBhcmUgdGFrZW4KKworMjAxMC0xMC0xOSAxNzo0MjozOSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkgIHF1ZXVlMjogRml4dXAgZG9jdW1lbnRhdGlvbiBvZiBzb21lIHByb3BlcnRpZXMKKworMjAxMC0xMC0xOSAxNzo0MDoxMyArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmg6CisJICBxdWV1ZTI6IEF2b2lkIHVzZWxlc3Mgc2VnbWVudF90b19ydW5uaW5nX3RpbWUoKSBjYWxjdWxhdGlvbnMuCisJICAqIENhY2hlIHNyYyBhbmQgc2luayB0aW1lCisJICAqIFVzZSBhIGJvb2xlYW4gdG8ga25vd24gd2hldGhlciBzcmMvc2luayB0aW1lIG5lZWRzIHRvIGJlIHJlY2FsY3VsYXRlZAorCSAgQXZvaWRzIDUwJSBvZiBjYWxscyB0byBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUoKQorCisyMDEwLTEwLTIwIDE3OjQxOjI4ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBiYXNlc2luazogUmUtdXNpbmcgR3N0Q2xvY2tJRCBpbnN0ZWFkIG9mIGNvbnN0YW50bHkgcmVjcmVhdGluZyBvbmUKKwkgIE1ha2VzIF9zaW5rX3dhaXRfY2xvY2sgYXQgbGVhc3QgMiB0aW1lcyBmYXN0ZXIuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjMyNzc4CisKKzIwMTAtMTAtMjAgMTc6NDA6NDMgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0Y2xvY2suYzoKKwkqIGdzdC9nc3RjbG9jay5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBnc3RjbG9jazogTmV3IEFQSSB0byByZS11c2UgYSBzaW5nbGUgc2hvdCBHc3RDbG9ja0lECisJICBBUEk6IGdzdF9jbG9ja19zaW5nbGVfc2hvdF9pZF9yZWluaXQKKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzI3NzgKKworMjAxMC0xMC0yMCAxMzo1MjowMiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgYmFzZXNpbms6IFBhc3MgYWxvbmcgbWluaW9iamVjdCB0eXBlIHRocm91Z2ggdmFyaW91cyBmdW5jdGlvbnMKKwkgIEF2b2lkcyBkb2luZyB1c2VsZXNzIEdTVF9JU18qCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjMyNzc4CisKKzIwMTAtMTAtMjAgMTM6MDg6MDggKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJhc2VzaW5rOiBTd2l0Y2ggZW5hYmxlX2xhc3RfYnVmZmVyIHRvIGFuIGF0b21pYyBpbnQKKwkgIEF2b2lkcyBoYXZpbmcgdG8gdGFrZSBhIGxvY2sgdG8gcmVhZC93cml0ZSBpdC4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzI3NzgKKworMjAxMC0xMC0xOSAxNTo1MzoyNiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSAgcXVldWU6IFJlbW92ZSB1c2VsZXNzIGNoZWNrcyBmcm9tIGU0MDZmNworCSAgc3JjcmVzdWx0IHdhcyBiZWluZyByZWNoZWNrZWQgaW4gcGxhY2VzIGl0IGNvdWxkbid0IGhhdmUgY2hhbmdlZC4KKwkgIHF1ZXVlIGxldmVsIHdhcyBiZWluZyByZWNoZWNrZWQgaW4gcGxhY2VzIGl0IGNvdWxkbid0IGhhdmUgY2hhbmdlZC4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzI3ODAKKworMjAxMC0xMC0xMyAxMzo1MDoyMiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmg6CisJICBnc3RkYXRhcXVldWU6IE9ubHkgZW1pdCBnX2NvbmRfc2lnbmFsIHdoZW4gbmVlZGVkCisJICBLZWVwIHRyYWNrIG9mIHdoaWNoIGNvbmQgd2UncmUgd2FpdGluZyBmb3IgYW5kIG9ubHkgZW1pdCB3aGVuIG5lZWRlZC4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzI3NzkKKworMjAxMC0xMC0yMCAxNzoxMjoyOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHNlZ21lbnQuYzoKKwkgIHNlZ21lbnQ6IG1vdmUgZ19yZXR1cm5faWZfZmFpbCB0byB3aGVyZSBpdCBpcyBuZWVkZWQKKworMjAxMC0xMS0wMyAxMToxNDowMyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R2ZXJzaW9uLmguaW46CisJICB2ZXJzaW9uOiBUYWtlIG5hbm8gdmVyc2lvbiBpbnRvIGFjY291bnQgaW4gR1NUX0NIRUNLX1ZFUlNJT04oKQorCSAgSWYgdGhlIG5hbm8gaXMgPiAwIHRoZSBjdXJyZW50IHZlcnNpb24gc2hvdWxkIGJlIGhhbmRsZWQgdGhlIHNhbWUgYXMKKwkgIG1pY3JvICsgMS4KKworMjAxMC0xMS0wMSAxNjozNDo0NiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogU2V0IHRoZSBldmVudCBzb3VyY2Ugb2JqZWN0IGlmIG5vbmUgaXMgc2V0IHlldCBpbiBnc3RfcGFkX3B1c2hfZXZlbnQoKQorCSAgT3RoZXJ3aXNlIHRoZSBzb3VyY2Ugd2lsbCBzdGF5IGF0IE5VTEwsIHRoZSBldmVudCBpcyBwYXNzZWQgdG8gdGhlCisJICBwZWVycGFkIHZpYSBnc3RfcGFkX3NlbmRfZXZlbnQoKSBhbmQgdGhlbiB0aGUgcGVlcnBhZCBpcyBzZXQgYXMKKwkgIHNvdXJjZSBvZiB0aGUgZXZlbnQgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYXRpbmcgcGFkLgorCisyMDEwLTEwLTMxIDE4OjQ4OjE5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkgIHF1ZXVlMjogUmVtb3ZlIGRlYWQgYXNzaWdubWVudCBhbmQgdW51c2VkIHZhcmlhYmxlCisKKzIwMTAtMTAtMzEgMTg6NDY6NDMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSAgcXVldWUyOiBSZW1vdmUgZGVhZCBhc3NpZ25tZW50IGFuZCBtb3ZlIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGludG8gaW5uZXIgYmxvY2sKKworMjAxMC0xMC0zMSAxODoyMzowMCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5oOgorCSAgcXVldWUyOiBSZW1vdmUgcmVkdW5kYW50IHZhcmlhYmxlCisJICBPdGhlciB0aGFuIHNhdmluZyBhbiBpbW1lbnNlIGFtb3VudCBvZiA0IGJ5dGVzIG9mIG1lbW9yeSB0aGlzCisJICBwcmV2ZW50cyBjbGFuZyBmcm9tIGNvbXBsYWluaW5nIGFuZCBrZWVwcyB0aGUgcmluZyBidWZmZXIgc3RhdGUKKwkgIGluIGEgc2luZ2xlIHZhcmlhYmxlIGluc3RlYWQgb2YgdHdvLgorCisyMDEwLTEwLTIwIDEwOjE4OjE4ICswMjAwICBEYXZpZCBIb3l0IDxkaG95dEBsbG5sLmdvdj4KKworCSogZ3N0L2dzdHRhc2suYzoKKwkgIGdzdHRhc2s6IFNldCB0aHJlYWQgbmFtZXMgb24gV2luZG93cyB3aXRoIE1TVkMgaWYgYSBkZWJ1Z2dlciBpcyBhdHRhY2hlZAorCSAgRml4ZXMgYnVnICM2MzIxNjguCisKKzIwMTAtMTAtMTkgMTU6NTI6MzAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0bWFjcm9zLmg6CisJICBtYWNyb3M6IERlZmluZSByZXN0cmljdCBrZXl3b3JkIGlmIG5vdCBhdmFpbGFibGUKKwkgIFRoaXMgY2hhbmdlIGFsd2F5cyBkZWZpbmVzIHRoZSByZXN0cmljdCBrZXl3b3JkIGlmIGEKKwkgIG5vbi1DOTkgQyBjb21waWxlciBpcyB1c2VkLiBJbiB0aGUgY2FzZSBvZiBHQ0MgPj0gNAorCSAgaXQgd2lsbCBiZSBkZWZpbmVkIHRvIF9fcmVzdHJpY3RfXywgaW4gYWxsIG90aGVyCisJICBjYXNlcyB0byBub3RoaW5nLiBUaGlzIGFsbG93cyB0byB1c2UgdGhlIHJlc3RyaWN0CisJICBrZXl3b3JkIHVuY29uZGl0aW9uYWxseS4KKworMjAxMC0xMi0wMSAyMzo1NzozNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkgIEJ1bXAgR0xpYiByZXF1aXJlbWVudCB0byA+PSAyLjIyCisJICBTZWUgaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvd2lraS9SZWxlYXNlUGxhbm5pbmcvR0xpYlJlcXVpcmVtZW50CisKKzIwMTAtMTItMDEgMjM6NTY6NDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgorCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgorCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKKwkgIEJhY2sgdG8gZGV2ZWxvcG1lbnQKKworPT09IHJlbGVhc2UgMC4xMC4zMSA9PT0KKworMjAxMC0xMS0zMCAxNzo0MDo0NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIENoYW5nZUxvZzoKKwkqIE5FV1M6CisJKiBSRUxFQVNFOgorCSogY29uZmlndXJlLmFjOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKKwkqIGdzdHJlYW1lci5kb2FwOgorCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgorCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKKwkgIFJlbGVhc2UgMC4xMC4zMQorCisyMDEwLTExLTI3IDE5OjEzOjM1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHV0aWxzLmg6CisJICB1dGlsczogYXZvaWQgJ3VudXNlZCBhcmd1bWVudCcgd2FybmluZ3MgY2F1c2VkIGJ5IEdTVF9CT0lMRVJQTEFURV9GVUxMCisJICBUaGUgdW51c2VkIGRhdGEgcGFyYW1ldGVyIGluIHRoZSBjbGFzc19pbml0IHRyYW1wb2xpbmUgZnVuY3Rpb24KKwkgIHNlZW1zIHRvIGNhdXNlIHdhcm5pbmdzIHdpdGggc29tZSBjKysgY29tcGlsZXJzLgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzNTg2OQorCisyMDEwLTExLTA5IDIzOjI3OjE3IC0wMzAwICByZXluYWxkbyA8cmV5bmFsZG9Ab3BlbmRvdC5jbD4KKworCSogZG9jcy9wd2cvYnVpbGRpbmctYm9pbGVyLnhtbDoKKwkgIGRvY3M6IHNvbWUgc21hbGwgZml4ZXMgdG8gdGhlIHBsdWdpbiB3cml0ZXIncyBndWlkZQorCSAgRml4IHdyb25nbHkgcGxhY2VkIGV4YW1wbGUgYW5kIHdlaXJkbHkgcGhyYXNlZCAnbm90ZScgbGFja2luZyBwcm9wZXIKKwkgIGZvcm1hdHRpbmcuIEZpeCBtaXNzaW5nIGhpbnQgZm9yIGF1dG9nZW4uc2ggbG9jYXRpb24gYW5kIHJlcGhyYXNlCisJICAnYnVpbHQgYW5kIGluc3RhbGxlZCcgc2VudGVuY2UuIEZpeCB3cm9uZ2x5IHBocmFzZWQgYW5kIHJlZHVuZGFudAorCSAgcGFyYWdyYXBoIGluIFBXRworCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzNDkyMQorCisyMDEwLTExLTI3IDExOjAyOjQ4IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9tYW51YWwvYmFzaWNzLWVsZW1lbnRzLnhtbDoKKwkgIG1hbnVhbDogSW1wcm92ZSBzdGF0ZXMgZG9jdW1lbnRhdGlvbgorCSAgQmUgbW9yZSBleHBsaWNpdCBhYm91dCBiZWluZyBvbiBOVUxMIGJlZm9yZSB1bnJlZnMKKworMjAxMC0xMS0yMCAxNDo1NDoyMyAtMDgwMCAgRXZhbiBOZW1lcnNvbiA8ZXZhbkBjb2V1cy1ncm91cC5jb20+CisKKwkqIGdzdC9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9uZXQvTWFrZWZpbGUuYW06CisJICBpbnRyb3NwZWN0aW9uOiBJbmNsdWRlIGV4cG9ydGVkIHBhY2thZ2VzIGluZm9ybWF0aW9uIGluIEdJUnMKKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzUzODkKKworMjAxMC0xMS0xOCAwMDoyOTo0MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6CisJICAwLjEwLjMwLjUgcHJlLXJlbGVhc2UKKworMjAxMC0xMS0xOCAwMDoyOToxOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgorCSAgZWxlbWVudGZhY3Rvcnk6IGZpeCBjYXBzIGxlYWsgaW4gZWxlbWVudCBmYWN0b3J5IGxpc3QgdXRpbGl0eSBmdW5jdGlvbnMKKworMjAxMC0xMS0xNyAyMzo1NTo0NSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBvL2JnLnBvOgorCSogcG8vY2EucG86CisJKiBwby9kYS5wbzoKKwkqIHBvL2VzLnBvOgorCSogcG8vZmkucG86CisJKiBwby9odS5wbzoKKwkqIHBvL3NrLnBvOgorCSAgcG86IHVwZGF0ZSB0cmFuc2xhdGlvbnMKKworMjAxMC0xMS0xNyAwOTozOTozNCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGdzdC9nc3RkYXRldGltZS5jOgorCSogZ3N0L2dzdGRhdGV0aW1lLmg6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZGF0ZXRpbWUuYzoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgZGF0ZXRpbWU6IEFkZCBfZnJvbV91bml4X2Vwb2NoIHZhcmlhbnRzCisJICBBZGRzIDIgdmFyaWFudHMgZm9yIHRoZSBnc3RfZGF0ZV90aW1lX2Zyb21fdW5peF9lcG9jaCBmdW5jdGlvbiwKKwkgIG9uZSBmb3IgVVRDIGFuZCBhbm90aGVyIGZvciBsb2NhbCB0aW1lLgorCSAgQVBJOiBnc3RfZGF0ZV90aW1lX25ld19mcm9tX3VuaXhfZXBvY2hfdXRjCisJICBBUEk6IGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF9sb2NhbF90aW1lCisJICBGaXhlcyAjNjUzMDMxCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM1MDMxCisKKzIwMTAtMTEtMDMgMTQ6MjE6MDIgKzAwMDAgIFZsYWRpbWlyIEVyZW1lZXYgPHdsMjc3NkBnbWFpbC5jb20+CisKKwkqIGdzdC9tYXRoLWNvbXBhdC5oOgorCSAgbWF0aC1jb21wYXQ6IGRvbid0IHJlLWRlZmluZSBfVVNFX01BVEhfREVGSU5FUyBpZiBhbHJlYWR5IGRlZmluZWQKKwkgIFRoaXMgYXZvaWRzIGNvbXBpbGVyIHdhcm5pbmdzLgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzMzg4NgorCisyMDEwLTExLTAxIDE2OjA2OjQzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogY29uZmlndXJlLmFjOgorCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgorCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKKwkgIDAuMTAuMzAuNCBwcmUtcmVsZWFzZQorCisyMDEwLTExLTAxIDE1OjM2OjU0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogcG8vZGUucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3BsLnBvOgorCSogcG8vcHRfQlIucG86CisJKiBwby9ydS5wbzoKKwkgIHBvOiB1cGRhdGUgdHJhbnNsYXRpb25zCisKKzIwMTAtMTAtMzEgMjA6MTc6MDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSAgcXVldWUyOiBkb24ndCBsZWFrIHBhZCByZWYgaW4gcHVsbCBtb2RlIHdoZW4gZmx1c2hpbmcKKwkgIEZpeCBwYWQgbGVhayB3aGVuIHF1ZXVlMiBpcyBmbHVzaGluZyBvciBiZWluZyBzaHV0IGRvd24uCisKKzIwMTAtMTAtMzEgMTk6NDc6MjUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuaDoKKwkgIHF1ZXVlMjogZG9uJ3Qgc2VuZCBzZWVrcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgZmlsZSB1cHN0cmVhbSBpbiBwdWxsIG1vZGUKKwkgIElmIGRvd25zdHJlYW0gaXMgb3BlcmF0aW5nIGluIHB1bGwgbW9kZSwgc2hvcnQtY2lyY3VpdCBhbnkgcHVsbHMgYmV5b25kCisJICB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCByZXR1cm4gRkxPV19VTkVYUEVDVEVEIGltbWVkaWF0ZWx5IGluc3RlYWQgb2YKKwkgIHNlbmRpbmcgYSBzZWVrIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBmaWxlIHVwc3RyZWFtLCBzaW5jZSB0aGlzIG1pZ2h0CisJICBjb25mdXNlIHVwc3RyZWFtIGVsZW1lbnRzIChhbmQvb3IgaHR0cCBzZXJ2ZXJzLCBmb3IgZXhhbXBsZSkuIEZpeGVzCisJICBwbGF5YmFjayBvZiBhcHBsZSB0cmFpbGVycyBpbiB0b3RlbSBhbmQgeW91dHViZS9odG1sNSBjbGlwcyBpbgorCSAgV2Via2l0R1RLKy4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzI5NzcKKworMjAxMC0xMC0yOCAyMzoyODoxNSArMTAwMCAgSm9uYXRoYW4gTWF0dGhldyA8am9uYXRoYW5AZDE0bi5vcmc+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYmFzZXRyYW5zZm9ybTogdXNlIGlucHV0IHBvc2l0aW9uIGZvciBxdWVyaWVzIGlmIHdlIGhhdmUgbm8gb3V0cHV0IHBvc2l0aW9uCisKKzIwMTAtMTAtMjggMTM6Mjk6MzEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYmFzZXRyYW5zZm9ybTogZml4IHJldmVyc2UgbmVnb3RpYXRpb24KKwkgIFdoZW4gdGhlIGRvd25zdHJlYW0gZWxlbWVudCBzdWdnZXN0cyBhIG5ldyBmb3JtYXQsIHBhc3MgdGhlIHN1Z2dlc3Rpb24KKwkgIHVwc3RyZWFtIGlmIHdlIGNhbid0IGNvbnZlcnQgdG8gaXQuCisJICBGaXhlcyAjNjMzMTQ3CisKKzIwMTAtMTAtMjcgMTg6MTI6MzYgKzAyMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6CisJICBtdWx0aXF1ZXVlOiBGaXggdHJhY2tpbmcgb2YgdW5saW5rZWQgc3RyZWFtcy4KKwkgIDMzMDgyZWI5ZTQyYzUyZTRkZjg0ODE5NTk0NmYxYjdiYmNlNzY4YzUgaW50cm9kdWNlZCBhIGJ1ZworCSAgcHJldmVudGluZyBzcGFyc2UgdW5saW5rZWQgc3RyZWFtcyBmcm9tIGFkdmFuY2luZyBwcm9wZXJseSwKKwkgIGxlYWRpbmcgdG8gdGhlIHF1ZXVlIGJsb2NraW5nLgorCSAgRml4ZXM6ICM2MzMxNzYKKworMjAxMC0xMC0yNyAxODoxMTozNSArMDIwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tdWx0aXF1ZXVlLmM6CisJICB0ZXN0czogQWRkIGEgbXVsdGlxdWV1ZSBzcGFyc2Ugc3RyZWFtcyB0ZXN0CisKKzIwMTAtMTAtMjcgMTM6MTY6MTEgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIDdiYmQ3MDggdG8gMDExYmNjOAorCisyMDEwLTEwLTIyIDE3OjM1OjIzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogY29uZmlndXJlLmFjOgorCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgorCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKKwkgIDAuMTAuMzAuMyBwcmUtcmVsZWFzZQorCisyMDEwLTEwLTE4IDE3OjQyOjI3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaDoKKwkgIGJ5dGVyZWFkZXI6IGNvbnN0LWlmeSBieXRlIHJlYWRlciBhcmd1bWVudCBpbiBwZWVrL3NjYW4gQVBJCisJICBCZWNhdXNlIHdlIGNhbi4KKworMjAxMC0xMC0yMiAxMTo1Mjo0NyArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5Lmg6CisJICBlbGVtZW50ZmFjdG9yeTogRml4IDY0Yml0IGNvbnN0YW50CisJICBCYXNpY2FsbHkgd2UncmUgbm90IG1lYW50IHRvIHB1dCBhbnl0aGluZyBtb3JlIGNvbXBsZXggdGhhbiBzaW1wbGUgbnVtYmVycywKKwkgIGR1ZSB0byB0aGUgZGVmaW5pdGlvbiBvZiBHX0dVSU5UNjRfQ09OU1RBTlQ6CisJICBHX0dVSU5UNjRfQ09OU1RBTlQodmFsKQkodmFsIyNVTCkKKwkgIFdoaWNoIHByZXZpb3VzbHkgcmVzdWx0ZWQgaW4gLi4uLiAxIDw8IDQ5VUwKKworMjAxMC0xMC0xOCAxMDo0Njo1OSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJhc2VzaW5rOiByZWNvbXB1dGUgY29ycmVjdCBydW5uaW5nIHRpbWUgZm9yIGJ1ZmZlciBlbmRpbmcgZmx1c2hpbmcgc3RlcAorCSAgUHJldmVudHMgZGVsYXlpbmcvaGFuZ2luZyB3aGVuIHJlc3VtaW5nIFBMQVlJTkcuCisJICBGaXhlcyAjNjMyNDMzLgorCisyMDEwLTEwLTE2IDE5OjE5OjQ3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgorCSogbGlicy9nc3QvYmFzZS9nc3RiaXRyZWFkZXItZG9jcy5oOgorCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLWRvY3MuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci1kb2NzLmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5oOgorCSogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmg6CisJKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmg6CisJICBkb2NzOiBmaXggbWlzYy4gZ3RrLWRvYyB3YXJuaW5ncyBpbiBsaWJzCisJICAoZm9yIGd0ay1kb2MgMS4xNSkKKworMjAxMC0xMC0xNiAxODoyNjoyMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmM6CisJICBSZXZlcnQgImxpYnMvZ3N0L2RhdGFxdWV1ZTogRG9jdW1lbnQgZ3N0X2RhdGFfcXVldWVfbmV3X2Z1bGwiCisJICBUaGlzIHJldmVydHMgY29tbWl0IDgwNzI3YzExNzcwMzUwN2Y3OTBhODZiMDk2MmFiM2Q5MTVlNWE0OTEuCisJICBUaGlzIGRvZXNuJ3QgbWFrZSBzZW5zZS4gZ3N0X2RhdGFfcXVldWVfbmV3X2Z1bGwoKSBpcyBhbHJlYWR5CisJICBkb2N1bWVudGVkIGFib3ZlLiBBbmQgd2UgbmVlZCB0aGUgZG9jIGJsdXJiIGZvciBfbmV3KCkgaGVyZS4KKworMjAxMC0xMC0xNiAxNzowMDoxNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvcmFuZG9tL3JlbGVhc2U6CisJICBkb2NzOiBmbGVzaCBvdXQgcmVsZWFzZSBpbnN0cnVjdGlvbnMgYSBiaXQgbW9yZQorCisyMDEwLTEwLTE2IDE2OjUzOjQ5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhcnNlLmM6CisJKiBnc3QvZ3N0dmFsdWUuYzoKKwkqIGdzdC9nc3R2YWx1ZS5oOgorCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6CisJICBkb2NzOiBhZGQgc29tZSBndGstZG9jIFNpbmNlOiBtYXJrZXJzCisJICBBZGQgc29tZSBndGstZG9jIFNpbmNlOiBtYXJrZXJzLCBmaXggb25lIFNpbmNlOiBtYXJrZXIsCisJICBmaXggdHlwby4KKworMjAxMC0xMC0xNiAwMDoyNTo1MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKKwkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6CisJICAwLjEwLjMwLjIgcHJlLXJlbGVhc2UKKworMjAxMC0xMC0xNiAwMDoxNDoxMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBvL0xJTkdVQVM6CisJKiBwby9lcy5wbzoKKwkqIHBvL2ZyLnBvOgorCSogcG8vbHQucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3JvLnBvOgorCSogcG8vcnUucG86CisJKiBwby9zbC5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdmkucG86CisJKiBwby96aF9DTi5wbzoKKwkgIHBvOiB1cGRhdGUgdHJhbnNsYXRpb25zCisKKzIwMTAtMTAtMTUgMTk6NDU6MTQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiB0b29scy9nc3QtaW5zcGVjdC5jOgorCSAgZ3N0LWluc3BlY3Q6IHVzZWZ1bCBmYWN0b3J5IG5hbWVzIGZvciB1cmktaGFuZGxlcnMgb3V0cHV0CisJICBGaXhlcyAjNjMyMjM2LgorCisyMDEwLTEwLTE0IDEyOjMxOjMyIC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIDVhNjY4YmYgdG8gN2JiZDcwOAorCisyMDEwLTEwLTEyIDE1OjEzOjQ4IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGRhdGV0aW1lLmM6CisJKiBnc3QvZ3N0ZGF0ZXRpbWUuaDoKKwkqIGdzdC9nc3R2YWx1ZS5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGRhdGV0aW1lLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKKwkgIGRhdGV0aW1lOiBVc2Ugc2Vjb25kcyBhcyBkb3VibGUKKwkgIFVzZSBzZWNvbmRzIGFzIGRvdWJsZSB0byBtYWtlIEFQSSBzaW1pbGFyIHRvIGdsaWIncworCSAgZ2RhdGV0aW1lLiBBbHNvIG1vdmUgdGltZXpvbmUgcGFyYW1ldGVyIHRvIHRoZQorCSAgZmlyc3QgcG9zaXRpb24sIGp1c3QgbGlrZSBnbGliJ3MuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI4NDA4CisKKzIwMTAtMTAtMTEgMTY6MTU6MjkgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZGF0ZXRpbWUuYzoKKwkgIGdzdGRhdGV0aW1lOiBNb3ZlIGRvYyBvdXRzaWRlIHRoZSBpZmRlZnMKKwkgIE1vdmUgdGhlIGRhdGV0aW1lIGRvY3VtZW50YXRpb24gb2YgdGhlIGZ1bmN0aW9ucyBvdXRzaWRlIHRoZQorCSAgaWZkZWZzCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI4NDA4CisKKzIwMTAtMDktMjcgMTk6MzU6MDggLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oOgorCSogZ3N0L2dzdGRhdGV0aW1lLmM6CisJKiBnc3QvZ3N0ZGF0ZXRpbWUuaDoKKwkgIGRhdGV0aW1lOiBVc2UgR0RhdGVUaW1lIGlmIGF2YWlsYWJsZQorCSAgVXNlIEdEYXRlVGltZSBpbnRlcm5hbGx5IG9uIEdzdERhdGVUaW1lIGlmIGdsaWIgYWxyZWFkeQorCSAgcHJvdmlkZXMgaXQuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI4NDA4CisKKzIwMTAtMDktMjggMTc6NDY6MjkgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oOgorCSAgZ2xpYi1wcml2YXRlOiBBZGQgaW5jbHVkZSBwcm90ZWN0aW9uIG1hY3JvCisKKzIwMTAtMTAtMTMgMTI6NTE6MDAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJICBidWZmZXI6IGFkZCBndWFyZCB0byBidWZmZXJfc2V0X2NhcHMoKSB0aGF0IGNoZWNrcyBpZiBjYXBzIGFyZSBzaW1wbGUKKworMjAxMC0xMC0xMyAxNTo1NjoyNiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKKwkgIHN5c3RlbWNsb2NrOiBhZGQgYSBtaXNzaW5nIEdfUEFSQU1fU1RBVElDX1NUUklOR1MKKworMjAwOS0xMC0wMSAxMToxNDowNiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuYzoKKwkgIGxpYnMvZ3N0L2RhdGFxdWV1ZTogRG9jdW1lbnQgZ3N0X2RhdGFfcXVldWVfbmV3X2Z1bGwKKworMjAwOS0wOS0yOCAxMzozNTozNSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuYzoKKwkgIGJhc2UvZ3N0ZGF0YXF1ZXVlOiBpbmxpbmUgc29tZSBmdW5jdGlvbnMsIGdldCBsZXZlbHMgd2l0aCBtZW1jcHkuCisKKzIwMTAtMTAtMTMgMTE6NTQ6MDQgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IFJlbW92ZSB1bnVzZWQgYXJndW1lbnQgZnJvbSBmaW5kX3JhbmdlKCkKKworMjAxMC0xMC0xMyAxMTo1MjoyNSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzoKKwkgIGZkc2luazogY2xlYW51cCBnZXRfcHJvcGVydHkvc2V0X3Byb3BlcnR5CisKKzIwMTAtMTAtMTIgMTg6NDg6MTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuaDoKKwkgIHF1ZXVlOiBhdm9pZCBnX2NvbmRfc2lnbmFsIHdoZW4gd2UgY2FuCisJICBLZWVwIHRyYWNrIG9mIHdoYXQgY29uZCB3ZSBhcmUgd2FpdGluZyBvbiBhbmQgb25seSBzaWduYWwgd2hlbiBzb21lIG90aGVyIHRocmVhZAorCSAgaXMgd2FpdGluZy4KKworMjAxMC0xMC0xMSAxOToyNzo1NCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6CisJICBtaW5pb2JqZWN0OiBhdm9pZCBkdXBsaWNhdGUgdHlwZSBjaGVjayB3aGVuIGZyZWVpbmcgbWluaW9iamVjdAorCSAgZ3N0X21pbmlfb2JqZWN0X3VucmVmKCkgaGFzIGd1YXJkcyB0aGF0IGNoZWNrIHRoZSB0eXBlIGFscmVhZHksIHNvCisJICB3ZSBkb24ndCByZWFsbHkgbmVlZCB0byByZS1jaGVjayBpdCBoZXJlIGFnYWluIHdoaWxlIGdldHRpbmcgdGhlCisJICBjbGFzcyAodGhlcmUncyBub3QgcmVhbGx5IG11Y2ggcG9pbnQgdG8gdGhhdCBhbnl3YXksIHNpbmNlIHdlIGRvbid0CisJICBjaGVjayB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBnZXRfY2xhc3MsIHNvIHdlJ2QgY3Jhc2ggYW55d2F5IGlmCisJICB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGEgbWluaSBvYmplY3QsIHRoZSBvbmx5IHF1ZXN0aW9uIHdvdWxkCisJICBiZSBpZiB0aGVyZSdkIGJlIGEgd2FybmluZyBiZWZvcmUgdGhlIGNyYXNoIG9yIG5vdCkuCisKKzIwMTAtMTAtMTEgMTg6NTU6MTQgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6CisJICBtaW5pb2JqZWN0OiBEaXJlY3RseSBpbmNyZWF0ZSBtaW5pX29iamVjdCBpbiBtaW5pX29iamVjdF9mcmVlKCkKKwkgIFNwZWVkcyB1cCBtaW5pX29iamVjdF91bnJlZiBieSAyNSUgYnkgYXZvaWRpbmcgdGhlIHR5cGVjaGVjayB3aGljaAorCSAgaXMgYXZvaWRhYmxlIGhlcmUgc2luY2UgaXQgaXMgb25seSBjYWxsZWQgb24gZXhpc3RpbmcgbWluaW9iamVjdHMuCisKKzIwMTAtMTAtMTEgMTg6MzA6NTQgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6CisJICBtaW5pb2JqZWN0OiBSZW1vdmUgY29uZnVzaW5nIERFQlVHX1JFRkNPVU5UIGRlZmluZQorCSAgdGhlIGRlYnVnZ2luZyBzdGF0ZW1lbnRzIHdpbGwgYmUgc2lsZW5jZWQgYXV0b21hdGljYWxseSBpZiBkZWJ1Z2dpbmcKKwkgIGlzIGRpc2FibGVkLCBhbmQgdGhlIHR5cGUgY2hlY2sgaXMgYWN0dWFsbHkgcmVxdWlyZWQuCisKKzIwMTAtMTAtMTEgMTg6MTA6MDcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IHJlbGVhc2UgcXVldWUyIGxvY2sgYmVmb3JlIG5vdGlmeQorCSAgTWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3QgaG9sZCB0aGUgbG9jayB3aGVuIHdlIG5vdGlmeSB0aGUgdGVtcC1sb2NhdGlvbgorCSAgcHJvcGVydHksCisJICBGaXhlcyAjNjMxODUzCisKKzIwMTAtMTAtMTEgMTY6NDU6MTYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkgIHF1ZXVlOiBhZGQgZGVidWcgc3RhdGVtZW50CisKKzIwMTAtMTAtMTEgMTA6Mjc6NTIgKzAyMDAgIE9nbnlhbiBUb25jaGV2IDxvZ255YW5AYXhpcy5jb20+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuaDoKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlLmM6CisJICBxdWV1ZTogYXBwbHkgc2luayBzZWdtZW50IG9uIHRoZSBzb3VyY2UgaWYgcXVldWUgaXMgZW1wdHkKKwkgIEFwcGx5IHRoZSBzaW5rIHNlZ21lbnQgb24gdGhlIHNvdXJjZSBpbW1lZGlhdGx5IHdoZW4gaXQgaXMgcmVjZWl2ZWQKKwkgIGFuZCB0aGVyZSBpcyBub3RoaW5nIGluIHRoZSBxdWV1ZS4KKwkgIFNvbHZlcyAjNDgyMTQ3CisKKzIwMTAtMTAtMTEgMTU6NTE6MjEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RiaW4uYzoKKwkgIGJpbjogZml4IGRvY3VtZW50YXRpb24gZm9yIGl0ZXJhdGVfc291cmNlcworCisyMDEwLTEwLTExIDE2OjQxOjI2ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgorCSAgZG9jczogdXNlIHRoZSBndGstZG9jIHNob3J0Y3V0cyB0byBnZXQgY29sb3VyZWQgYW5kIHhyZWZlZCBleGFtcGxlCisKKzIwMTAtMTAtMTEgMTQ6MjA6MTUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YmluLmM6CisJICBiaW46IEluaXRpYWxpemUgdmFyaWFibGUKKworMjAxMC0xMC0xMSAxMDo1Njo1NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJpbi5jOgorCSAgYmluOiBJbXByb3ZlIHRyYWNraW5nIG9mIHNvdXJjZSBlbGVtZW50cworCSAgVHJhY2sgZWxlbWVudHMgdGFnZ2VkIHdpdGggdGhlIElTX1NPVVJDRSBmbGFnIGluIGEgc2ltaWxhciB3YXkgd2UgdHJhY2sgdGhlIHNpbmsKKwkgIGVsZW1lbnRzLiBUaGlzIGFsbG93cyB1cyB0byBlZmZpY2llbnRseSBkaXNwYXRjaCBkb3duc3RyZWFtIGV2ZW50cyB0byB0aGUgcmlnaHQKKwkgIGVsZW1lbnRzLgorCisyMDEwLTEwLTExIDEwOjU1OjA0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIGJhc2VzcmM6IHRhZyBhcyBhIFNPVVJDRSBlbGVtZW50CisJICBUYWcgYWxsIGVsZW1lbnRzIGRlcml2aW5nIGZyb20gdGhlIGJhc2VzcmMgd2l0aCB0aGUgSVNfU09VUkNFIGZsYWcuCisKKzIwMTAtMTAtMTEgMTA6NTM6NDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RlbGVtZW50Lmg6CisJICBlbGVtZW50OiBhZGQgSVNfU09VUkNFIGZsYWcKKwkgIEFkZCB0aGUgR1NUX0VMRU1FTlRfSVNfU09VUkNFIGZsYWcgc28gdGhhdCB3ZSBjYW4gdGFnIHNvdXJjZSBlbGVtZW50cyBsaWtlIHdlCisJICBjYW4gd2l0aCBzaW5rIGVsZW1lbnRzLgorCisyMDEwLTEwLTA5IDE0OjE4OjQ0ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPG9nZy5rLm9nZy5rQGdvb2dsZW1haWwuY29tPgorCisJKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKKwkgIHJlZ2lzdHJ5OiBnX21hcHBlZF9maWxlX3VucmVmIGV4aXN0cyBhbHJlYWR5IHNpbmNlIEdMaWIgMi4yMS4zCisKKzIwMTAtMTAtMTAgMTg6MTQ6NDAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIGJhc2V0cmFuc2Zvcm06IFJlcG9ydCB0aGUgb3V0cHV0IHBvc2l0aW9uIG9uIFBPU0lUSU9OIHF1ZXJpZXMgb24gdGhlIHNyY3BhZAorCSAgVGhlcmUgY2FuIGJlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGlucHV0IGFuZCBvdXRwdXQgbGFzdF9zdG9wLgorCSAgRml4ZXMgYnVnICM2Mjk0MTAuCisKKzIwMTAtMTAtMDggMTI6NDM6MjAgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJKiBjb21tb246CisJICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKKwkgIEZyb20gYzRhOGFkYyB0byA1YTY2OGJmCisKKzIwMTAtMTAtMDggMTI6NTQ6NTIgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgorCSAgbXVsdGlxdWV1ZTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBhbmQgc2ltcGxpZnkgY29kZQorCSAgb2xkaWQgd2FzIG9ubHkgdXNlZCB3aGVuIHdlIHdlcmUgZG9pbmcgbXVsdGlwbGUgcG9wcyBwZXIgbG9vcC4KKworMjAxMC0xMC0wOCAxMjo1MDoxMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSA1ZTNjOWJmIHRvIGM0YThhZGMKKworMjAxMC0xMC0wOCAxMjo0ODo0MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci1kb2NzLmg6CisJICBieXRld3JpdGVyOiBBZGQgbWlzc2luZyBmaWxlCisKKzIwMTAtMTAtMDggMTI6MTg6MjMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5oOgorCSAgYnl0ZXdyaXRlcjogQWRkIHVuY2hlY2tlZCB2YXJpYW50cyBvZiB0aGUgd3JpdGluZyBmdW5jdGlvbnMKKwkgIFRoZXNlIGRvbid0IGNoZWNrIGlmIHRoZXJlJ3MgZW5vdWdoIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGFuZCBhcmUKKwkgIGF2YWlsYWJsZSBhcyBpbmxpbmUgZnVuY3Rpb25zIG9ubHkuCisJICBBUEk6IGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50OF91bmNoZWNrZWQKKwkgIEFQSTogZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9iZV91bmNoZWNrZWQKKwkgIEFQSTogZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9sZV91bmNoZWNrZWQKKwkgIEFQSTogZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9iZV91bmNoZWNrZWQKKwkgIEFQSTogZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9sZV91bmNoZWNrZWQKKwkgIEFQSTogZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9iZV91bmNoZWNrZWQKKwkgIEFQSTogZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9sZV91bmNoZWNrZWQKKwkgIEFQSTogZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9iZV91bmNoZWNrZWQKKwkgIEFQSTogZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9sZV91bmNoZWNrZWQKKwkgIEFQSTogZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50OF91bmNoZWNrZWQKKwkgIEFQSTogZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfYmVfdW5jaGVja2VkCisJICBBUEk6IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2xlX3VuY2hlY2tlZAorCSAgQVBJOiBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9iZV91bmNoZWNrZWQKKwkgIEFQSTogZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfbGVfdW5jaGVja2VkCisJICBBUEk6IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2JlX3VuY2hlY2tlZAorCSAgQVBJOiBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZV91bmNoZWNrZWQKKwkgIEFQSTogZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfYmVfdW5jaGVja2VkCisJICBBUEk6IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2xlX3VuY2hlY2tlZAorCSAgQVBJOiBnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfYmVfdW5jaGVja2VkCisJICBBUEk6IGdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9sZV91bmNoZWNrZWQKKwkgIEFQSTogZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDY0X2JlX3VuY2hlY2tlZAorCSAgQVBJOiBnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfbGVfdW5jaGVja2VkCisJICBBUEk6IGdzdF9ieXRlX3dyaXRlcl9wdXRfZGF0YV91bmNoZWNrZWQKKwkgIEFQSTogZ3N0X2J5dGVfd3JpdGVyX2ZpbGxfdW5jaGVja2VkCisKKzIwMTAtMTAtMDggMDk6MzQ6NDcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuYzoKKwkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzoKKwkgIGNvbnRyb2xsZXIsIGRhdGFwcm90b2NvbDogbWFrZSBwdWJsaWMgZW51bSBfZ2V0X3R5cGUoKSBmdW5jdGlvbnMgdGhyZWFkLXNhZmUKKwkgIE5vdCB0aGF0IGl0IGlzIGxpa2VseSB0byBtYXR0ZXIgaW4gcHJhY3RpY2UsIGJ1dCBzaW5jZSB0aGVzZSBhcmUgcHVibGljCisJICBBUEkgdGhleSBzaG91bGQgcHJvYmFibHkgYmUgdGhyZWFkLXNhZmUuCisKKzIwMTAtMTAtMDggMDA6Mzg6MzkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuYzoKKwkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzoKKwkgIGRhdGFwcm90b2NvbCwgbGZvY29udHJvbHNvdXJjZTogZml4IGVudW0gdmFsdWUgbmFtZSBpbiBlbnVtcyB0aGF0IGFyZSBwdWJsaWMgQVBJCisJICBTbyBydW4tdGltZSBiaW5kaW5ncyBjYW4gaW50cm9zcGVjdCB0aGUgbmFtZXMgY29ycmVjdGx5ICh3ZSBhYnVzZSB0aGlzCisJICBmaWVsZCBhcyBkZXNjcmlwdGlvbiBmaWVsZCBvbmx5IGluIGVsZW1lbnRzLCBub3QgZm9yIHB1YmxpYyBBUEkKKwkgICh3aGVyZSB0aGUgZGVzY3JpcHRpb24gYmVsb25ncyBpbnRvIHRoZSBndGstZG9jIGNodW5rKS4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Mjk5NDYKKworMjAxMC0xMC0wOCAwOTo0NzoxMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5oOgorCSAgYnl0ZXdyaXRlcjogRml4IHBvc3NpYmxlIGluZmluaXRlIGxvb3AgY2F1c2VkIGJ5IGFuIG92ZXJmbG93CisKKzIwMTAtMTAtMDcgMTg6NDY6MjYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6CisJICBlbGVtZW50czogbWlub3IgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgd2hlbiBkb2luZyBnX29iamVjdF9ub3RpZnkoKSBmb3IgdGhlICJsYXN0LW1lc3NhZ2UiIHByb3BlcnR5CisJICBNYWtlIHN1cmUgcHJvcGVydHkgbmFtZXMgcGFzc2VkIHRvIGdfb2JqZWN0X25vdGlmeSgpIGFyZSBpbiB0aGUgY2Fub25pY2FsIGZvcm0KKwkgIChpZS4gImxhc3QtbWVzc2FnZSIgbm90ICJsYXN0X21lc3NhZ2UiKSwgc28gdGhhdCBnX3BhcmFtX3NwZWNfcG9vbF9sb29rdXAoKQorCSAgZG9lc24ndCBoYXZlIHRvIGRvIHN0cmR1cC9jYW5vbmljYWxpemUvZnJlZSBmb3IgZXZlcnkgc2luZ2xlIG5vdGlmeSBjYWxsLgorCSAgVGhpcyBvbmx5IGFwcGxpZXMgd2hlbiBidWlsZGluZyBhZ2FpbnN0IG9sZGVyIEdMaWIgdmVyc2lvbnMgKDwgMi4yNikuCisKKzIwMTAtMTAtMDcgMTg6Mjc6MDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmg6CisJICBmYWtlc2luazogdXNlIGdfb2JqZWN0X25vdGlmeV9ieV9wc3BlYygpIGFuZCByZW1vdmUgd29yay1hcm91bmQgZm9yIG9sZCBHTGliIHZlcnNpb25zIGlmIHBvc3NpYmxlCisJICBVc2UgbW9yZSBlZmZpY2llbnQgZ19vYmplY3Rfbm90aWZ5X2J5X3BzcGVjKCkgaWYgd2UncmUgY29tcGlsaW5nIGFnYWluc3QKKwkgIEdMaWIgPj0gMi4yNiwgYW5kIGFsc28gcmVtb3ZlIHdvcmstYXJvdW5kIGZvciBnX29iamVjdF9ub3RpZnkoKSB0aHJlYWQtCisJICBzYWZldHkgaXNzdWVzIHdpdGggb2xkZXIgR0xpYiB2ZXJzaW9ucyBpZiBpdCdzIG5vdCBuZWVkZWQgYW55IG1vcmUuCisKKzIwMTAtMTAtMDcgMTg6MjE6MTMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgorCSAgdGVlOiB1c2UgZ19vYmplY3Rfbm90aWZ5X2J5X3BzcGVjKCkgaWYgcG9zc2libGUKKwkgIFVzZSBtb3JlIGVmZmljaWVudCBnX29iamVjdF9ub3RpZnlfYnlfcHNwZWMoKSBpZiB3ZSdyZSBjb21waWxpbmcgYWdhaW5zdAorCSAgR0xpYiA+PSAyLjI2LgorCisyMDEwLTEwLTA3IDE4OjE5OjMxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6CisJICBmYWtlc3JjOiB1c2UgZ19vYmplY3Rfbm90aWZ5X2J5X3BzcGVjKCkgaWYgcG9zc2libGUKKwkgIFVzZSBtb3JlIGVmZmljaWVudCBnX29iamVjdF9ub3RpZnlfYnlfcHNwZWMoKSBpZiB3ZSdyZSBjb21waWxpbmcgYWdhaW5zdAorCSAgR0xpYiA+PSAyLjI2LgorCisyMDEwLTEwLTA3IDE3OjUzOjE4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5oOgorCSAgaWRlbnRpdHk6IHVzZSBnX29iamVjdF9ub3RpZnlfYnlfcHNwZWMoKSBhbmQgcmVtb3ZlIHdvcmstYXJvdW5kIGZvciBvbGQgR0xpYiB2ZXJzaW9ucyBpZiBwb3NzaWJsZQorCSAgVXNlIG1vcmUgZWZmaWNpZW50IGdfb2JqZWN0X25vdGlmeV9ieV9wc3BlYygpIGlmIHdlJ3JlIGNvbXBpbGluZyBhZ2FpbnN0CisJICBHTGliID49IDIuMjYsIGFuZCBhbHNvIHJlbW92ZSB3b3JrLWFyb3VuZCBmb3IgZ19vYmplY3Rfbm90aWZ5KCkgdGhyZWFkLQorCSAgc2FmZXR5IGlzc3VlcyB3aXRoIG9sZGVyIEdMaWIgdmVyc2lvbnMgaWYgaXQncyBub3QgbmVlZGVkIGFueSBtb3JlLgorCisyMDEwLTEwLTA3IDE3OjIzOjEwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGdob3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWRzOiB1c2UgbmV3IGdfb2JqZWN0X25vdGlmeV9ieV9wc3BlYygpIGZvciBjYXBzIG5vdGlmaWVzIGlmIGF2YWlsYWJsZQorCSAgSWYgd2UncmUgYnVpbGRpbmcgYWdhaW5zdCBHTGliID49IDIuMjYuMCwgd2UgY2FuIHVzZSB0aGUgbW9yZSBlZmZpY2llbnQKKwkgIGdfb2JqZWN0X25vdGlmeV9ieV9jYXBzKCksIHdoaWNoIGF2b2lkcyB0aGUgcGFyYW0gc3BlYyBsb29rdXAuCisKKzIwMTAtMTAtMDcgMTY6Mjc6MjAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Y2xvY2suYzoKKwkgIGNsb2NrOiByZW1vdmUgdW5uZWNlc3NhcnkgZ19vYmplY3Rfbm90aWZ5KCkgY2FsbAorCSAgR09iamVjdCB3aWxsIGRvIHRoYXQgZm9yIHVzIHdoZW4gZ19vYmplY3Rfc2V0KigpIGlzIGNhbGxlZC4KKworMjAxMC0xMC0wNyAxOToxODowMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9kZXNpZ24vcGFydC1xb3MudHh0OgorCSAgZG9jczogdXBkYXRlIHFvcyBkZXNpZ24gZG9jCisJICBGaXggc29tZSB0eXBvcy4KKwkgIGNoYW5nZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgcXVhbGl0eSBmaWVsZCBmb3IgdmlkZW8gZGVjb2RlcnMgdG8gc29tZXRoaW5nIHRoYXQKKwkgIG1ha2VzIG1vcmUgc2Vuc2UuCisKKzIwMTAtMTAtMDUgMTc6MDI6NTggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBNYWtlZmlsZS5hbToKKwkgIEFkZCBnb2JqZWN0LWludHJvc3BlY3Rpb24gdGVtcCBkaXJlY3RvcmllcyB0byBDUlVGVF9ESVJTCisKKzIwMTAtMTAtMDUgMTU6MDU6NDMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuYzoKKwkgIGxmb2NvbnRyb2xzb3VyY2U6IHVzZSBtYXRoLWNvbXBhdC5oIGZvciBNX1BJCisKKzIwMTAtMTAtMDUgMTQ6NDU6MDIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdGluZm8uaDoKKwkgIGdzdGluZm86IHJlbW92ZSByYW5kb20gTVNWQyBjb21wYXRpYmlsaXR5IGRlZmluZSBmb3IgTV9QSSB0aGF0IGRvZXNuJ3QgYmVsb25nIGhlcmUKKwkgIENvZGUgdGhhdCBuZWVkcyB0aGlzIHNob3VsZCBpbmNsdWRlIGdzdC9tYXRoLWNvbXBhdC5oIG9yIHVzZSBHX1BJLgorCisyMDEwLTEwLTA1IDE0OjE2OjE5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvTWFrZWZpbGUuYW06CisJKiBnc3QvTWFrZWZpbGUuYW06CisJKiBnc3QvbWF0aC1jb21wYXQuaDoKKwkgIGdzdDogYWRkIG1hdGgtY29tcGF0LmggaGVhZGVyCisJICBBZGQgbWluaW1hbCBtYXRoLWNvbXBhdGguaCBoZWFkZXIgd2hlcmUgd2UgY2FuIGRlZmluZSBmYWxsYmFjaworCSAgdmVyc2lvbnMgZm9yIG1pc2NlbGxhbmVvdXMgbWF0aCBmdW5jdGlvbnMgdGhhdCBhcmVuJ3QgYWx3YXlzCisJICBhdmFpbGFibGUsIHNvIHdlIGRvbid0IGhhdmUgdG8gZHVwbGljYXRlIHRoaXMgaW4gcGx1Z2lucy4KKwkgIFRoZSBoZWFkZXIgaXMgbm90IGluY2x1ZGVkIGJ5IGRlZmF1bHQsIHNvIG5lZWRzIHRvIGJlCisJICBpbmNsdWRlZCBleHBsaWNpdGx5IGZvciBub3cuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjMwODAyCisKKzIwMTAtMTAtMDUgMTE6NDc6NTkgKzAyMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+CisKKwkqIHRvb2xzL2dzdC1wbG90LXRpbWVsaW5lLnB5OgorCSAgdG9vbHM6IGZpeCBwYXJzaW5nIG9mIHRpbWVzdGFtcCBpbiBnc3QtcGxvdC10aW1lbGluZQorCisyMDEwLTA5LTI1IDE0OjI0OjQ2ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJhc2VzaW5rOiBkb24ndCB0YWtlIHByZXJvbGwtbG9jayBpbiBnZXRfcHJvcGVydHkKKwkgIFVzZSBhdG9taWMgb3BzIHRvIHJlYWQgYW5kIHdyaXRlIG1vcmUgcHJvcGVydGllcy4gVGFraW5nIHRoZSBwcmVyb2xsIGxvY2sgaW4gZ2V0X3Byb3BlcnR5CisJICBjYW4gbG9jayB1cCBhcHBsaWNhdGlvbnMgcmVhZGluZyB0aGUgcHJvcGVydHkgZHVyaW5nIHByZXJvbGwuCisKKzIwMTAtMTAtMDIgMTg6MTE6MzIgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSAgYmFzZXNpbms6IGFkZCBhIGZpeG1lIGZvciAwLjExCisKKzIwMTAtMTAtMDQgMTU6NDk6MTggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJhc2VzaW5rOiBmb3JtYXQgbmVnYXRpdmUgdmFsdWVzIGJldHRlcgorCSAgRm9ybWF0IG5lZ2F0aXZlIHZhbHVlcyBwcm9wZXJseSBpbiB0aGUgZGVidWcgbG9nLgorCisyMDEwLTEwLTAzIDIzOjQxOjI2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svbGlicy9iaXRyZWFkZXIuYzoKKwkgIGJpdHJlYWRlcjogRml4IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgY29tcGlsZXIgd2FybmluZ3MKKwkgIGdjYyBkb2Vzbid0IG5vdGljZSB0aGF0IHRoZSBjaGVjayBhc3NlcnRpb24gbWFjcm9zIHdpbGwgYWJvcnQKKwkgIGZ1cnRoZXIgZXhlY3V0aW9uIG9mIHRoZSB0ZXN0cy4KKworMjAxMC0xMC0wMyAyMzozMjowNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLmg6CisJICBieXRld3JpdGVyOiBBZGQgaW5saW5lIHZhcmlhbnRzIG9mIGFsbCBpbXBvcnRhbnQgZnVuY3Rpb25zCisKKzIwMTAtMTAtMDMgMTU6Mjc6MzcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLWRvY3MuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJpdHJlYWRlci5oOgorCSogdGVzdHMvY2hlY2svbGlicy9iaXRyZWFkZXIuYzoKKwkgIGJpdHJlYWRlcjogQWRkIGlubGluZWQgYW5kIHVuY2hlY2tlZCB2ZXJzaW9ucyBvZiB0aGUgaW1wb3J0YW50IGZ1bmN0aW9ucworCSAgQVBJOiBnc3RfYml0X3JlYWRlcl9za2lwX3VuY2hlY2tlZAorCSAgQVBJOiBnc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGVfdW5jaGVja2VkCisJICBBUEk6IGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQxNl91bmNoZWNrZWQKKwkgIEFQSTogZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDMyX3VuY2hlY2tlZAorCSAgQVBJOiBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50NjRfdW5jaGVja2VkCisJICBBUEk6IGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4X3VuY2hlY2tlZAorCSAgQVBJOiBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDE2X3VuY2hlY2tlZAorCSAgQVBJOiBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDMyX3VuY2hlY2tlZAorCSAgQVBJOiBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDY0X3VuY2hlY2tlZAorCSAgQVBJOiBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDhfdW5jaGVja2VkCisJICBUaGlzIGFsb25lIG1ha2VzIGZsYWNwYXJzZSBhYm91dCAzIHRpbWVzIGZhc3Rlci4KKworMjAxMC0xMC0wMyAxNDo1OTo0NyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmg6CisJICBieXRld3JpdGVyOiBBZGQgZ3VhcmRzIHRvIHRoZSBpbmxpbmVkIGdldF9wb3MvZ2V0X3JlbWFpbmluZy9nZXRfc2l6ZS9ldGMgZnVuY3Rpb25zCisKKzIwMTAtMTAtMDMgMTQ6MjQ6MDAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJpdHJlYWRlci5jOgorCSAgYml0cmVhZGVyOiBPcHRpbWl6ZSBwZWVrX2JpdHMvZ2V0X2JpdHMgYSBiaXQKKwkgIFVzZSBsb2NhbCB2YXJpYWJsZXMgaW5zdGVhZCBvZiBkZXJlZmVyZW5jaW5nIHRoZSBiaXRyZWFkZXIKKwkgIHBvaW50ZXIgYWxsIHRoZSB0aW1lIGFuZCBkb24ndCBjb3B5IHRoZSByZWFkZXIgZm9yIHBlZWtfYml0cy4KKworMjAxMC0wOS0yNyAxOToyOToyNCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R2YWx1ZS5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6CisJICBnc3RkYXRldGltZTogRml4IHN0cmluZyBzZXJpYWxpemF0aW9uCisJICBDb3JyZWN0bHkgc2VyaWFsaXplIHR6b2Zmc2V0IGFzIGEgZ3N0dmFsdWUKKworMjAxMC0wOS0yNCAxMjoyMjozMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgYmFzZXNpbms6IGltcHJvdmUgYWRqdXN0X3RpbWUoKQorCSAgQWRkIHNvbWUgbW9yZSBjb21tZW50cy4KKwkgIE1ha2Ugc3VyZSB3ZSBkb24ndCBlbmQgdXAgd2l0aCBuZWdhdGl2ZSB0aW1lc3RhbXBzLgorCisyMDEwLTA1LTI2IDIwOjI5OjIyICswMjAwICBIYXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkB0YW5kYmVyZy5jb20+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJhc2VzaW5rOiByZW5kZXJkZWxheSBuZWVkcyB0byBiZSBzdWJ0cmFjdGVkIGluIGFkanVzdF90aW1lKCkKKwkgIGxhdGVuY3kgaXMgYWxyZWFkeSBzaW5rLWxhdGVuY3kgKyByZW5kZXItZGVsYXksIGFuZCBoZXJlIHdlIG9ubHkKKwkgIHdhbnQgdG8gZGVhbCB3aXRoIHRoZSBzaW5rLWxhdGVuY3kuCisJICBGaXhlcyAjNjMwNDM2CisKKzIwMTAtMDktMjQgMDA6MTM6NTEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmM6CisJKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmg6CisJKiB3aW4zMi9jb21tb24vZ3N0bWFyc2hhbC5jOgorCSAgd2luMzI6IGRlZmluZSBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FIGluIHdpbjMyIGNvbmZpZy5oIGFzIHdlbGwKKworMjAxMC0wOS0yMyAyMDo1Nzo0OSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBvL2FmLnBvOgorCSogcG8vYXoucG86CisJKiBwby9iZS5wbzoKKwkqIHBvL2JnLnBvOgorCSogcG8vY2EucG86CisJKiBwby9jcy5wbzoKKwkqIHBvL2RhLnBvOgorCSogcG8vZGUucG86CisJKiBwby9lbl9HQi5wbzoKKwkqIHBvL2VzLnBvOgorCSogcG8vZXUucG86CisJKiBwby9maS5wbzoKKwkqIHBvL2ZyLnBvOgorCSogcG8vaHUucG86CisJKiBwby9pZC5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vamEucG86CisJKiBwby9uYi5wbzoKKwkqIHBvL25sLnBvOgorCSogcG8vcGwucG86CisJKiBwby9wdF9CUi5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vcncucG86CisJKiBwby9zay5wbzoKKwkqIHBvL3NsLnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkgIHBvOiB1cGRhdGUgZm9yIG5ldyBzdHJpbmdzCisKKzIwMTAtMDktMjMgMjA6NDg6MjUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0b29scy9nc3QtaW5zcGVjdC5jOgorCSAgZ3N0LWluc3BlY3Q6IHByaW50IEdTVF9QQVJBTV9NVVRBQkxFXyogcHJvcGVydHkgZmxhZ3MKKworMjAxMC0wNS0wNCAwOTozNjo0MyArMDIwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAdGFuZGJlcmcuY29tPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIGJhc2V0cmFuc2Zvcm06IE1ha2UgYSBXQVJOSU5HIGludG8gYSBERUJVRyBzdGF0ZW1lbnQKKwkgIEZpeGVzIGJ1ZyAjNjMwNDM3LgorCisyMDEwLTAxLTEyIDE3OjEwOjU5ICswMTAwICBUcm9uZCBBbmRlcnNlbiA8dHJvbmQuYW5kZXJzZW5AdGFuZGJlcmcuY29tPgorCisJKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKKwkgIGNsb2NrOiBmaXggcmFjeSBzaHV0ZG93biBjbG9jayBpZCBsZWFrCisJICBDbG9jayBJRHMgd2VyZSBsZWFrZWQgaWYgdGhlIGNsb2NrIGdvdCBkaXNwb3NlZCBiZWZvcmUgdGhlIHdvcmtlciB0aHJlYWQKKwkgIGdvdCBhIGNoYW5jZSB0byByZWFwIHVuc2NoZWR1bGVkIGVudHJpZXMuCisJICBGaXhlcyBidWcgIzYzMDQzOS4KKworMjAxMC0wOS0yMyAxODoxODo1NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBiYXNldHJhbnNmb3JtOiBhdm9pZCB1c2VsZXNzIG1lbWNweQorCSAgQmVjYXVzZSBvZiB0aGUgYXdrd2FyZCByZWZjb3VudGluZyBpbiBwcmVwYXJlX291dHB1dF9idWZmZXIsIHdlIG1pZ2h0IGVuZCB1cAorCSAgd2l0aCB3cml0YWJsZSBidWZmZXJzIHRoYXQgcG9pbnQgdG8gdGhlIHNhbWUgZGF0YS4gQ2hlY2sgZm9yIHRob3NlIGNhc2VzIHNvIHRoYXQKKwkgIHdlIGF2b2lkIGEgdXNlbGVzcyBtZW1jcHkgYW5kIGtlZXAgdmFsZ3JpbmQgcXVpZXQuCisJICBGaXhlcyAjNjI4MTc2CisKKzIwMTAtMDktMjMgMTQ6Mzc6NDUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgIHRlc3RzOiBmaXggJ21ha2UgY2hlY2snIGJ1aWxkIGZvciBzZXR1cHMgd2hlcmUgbm8gYysrIGNvbXBpbGVyIGlzIGF2YWlsYWJsZQorCSAgT25seSB0cnkgdG8gYnVpbGQgKHBzZXVkby0pQysrIHVuaXQgdGVzdCBpZiBhIHdvcmtpbmcgQysrIGNvbXBpbGVyIGhhcyBiZWVuCisJICBmb3VuZCwgb3RoZXJ3aXNlIHRoZSBidWlsZCB3aWxsIGZhaWwuIChXZSBkbyB0aGlzIHRvIG1ha2Ugc3VyZSBvdXIgaGVhZGVycworCSAgYXJlICdDKysgY2xlYW4nKS4KKworMjAxMC0wOS0yMyAxMDowODowNSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSogZ3N0L2dzdHRhZ2xpc3QuaDoKKwkgIHRhZzogQWRkcyBHU1RfVEFHX0dFT19MT0NBVElPTl9IT1JJWk9OVEFMX0VSUk9SCisJICBBZGRzIGEgbmV3IHRhZyB0byBpbmRpY2F0ZSB0aGUgZXJyb3IgaW4gaG9yaXpvbnRhbCBwb3NpdGlvbmluZworCSAgaW4gbWV0ZXJzLiBUaGlzIGlzIG9uZSBvZiB0aGUgYXZhaWxhYmxlICdncHMgZXJyb3InIGZpZWxkcyBpbgorCSAgZXhpZiwgZm9yIGV4YW1wbGUuCisJICBBUEk6IEdTVF9UQUdfR0VPX0xPQ0FUSU9OX0hPUklaT05UQUxfRVJST1IKKworMjAxMC0wOS0yMyAxNTozNDo1NCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBSZXZlcnQgInBhZDogdXNlIGEgbmVzdGVkIGxvY2sgdG8gYXZvaWQgcmVmZmluZyB0aGUgcGVlciIKKwkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgOWI0MjRiMTU3MDM2NmIxMDc0NmE3NjJlOGM5YzRjMWIzNWIyMWU5MS4KKworMjAxMC0wOS0yMyAxNToxMjozMiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSAgcXVldWUyOiByZW1vdmUgdmFyIG9ubHkgdXNlZCBmb3IgZGVidWcgc3RhdGVtZW50CisKKzIwMTAtMDktMDcgMTY6NTY6MzggKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiB1c2UgYSBuZXN0ZWQgbG9jayB0byBhdm9pZCByZWZmaW5nIHRoZSBwZWVyCisJICBGaXhlcyAjNTAzNTkyCisKKzIwMTAtMDctMTUgMTU6NDc6MzYgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogY29uZmlndXJlLmFjOgorCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9jaGVjay9nc3QvLmdpdGlnbm9yZToKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RjcHAuY2M6CisJICB0ZXN0czogcmVidWlsZCBvbmUgdGVzdCB1c2luZyBjcHAKKwkgIFRoaXMgYWltcyB0byBjYXRjaCBjcHAgaXNzdWVzIGluIGNvcmUuIEFkZCBjKysgYm9pbGVycGxhdGUgdG8gY29uZmlndXJlLgorCisyMDEwLTA5LTIxIDE4OjMzOjI2ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBjb21tb246CisJICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKKwkgIEZyb20gYWEwZDFkMCB0byA1ZTNjOWJmCisKKzIwMTAtMDktMTkgMTY6MTA6MTYgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIHRlc3RzL2NoZWNrL2xpYnMvYWRhcHRlci5jOgorCSAgdGVzdHM6IEhhbmRsZSBuZXcgYXNzZXJ0aW9uIGluIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMgorCisyMDEwLTA5LTE4IDE5OjI5OjA5IC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6CisJICBhZGFwdGVyOiBBZGQgY2hlY2sgZm9yIHBhdHRlcm4gYml0cyBub3QgaW4gbWFzaworCisyMDEwLTA5LTE3IDE5OjUzOjMzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgorCSAgZ3N0LWxhdW5jaDogVXNlIGdfZmlsZV90ZXN0KCkgaW5zdGVhZCBvZiBhY2Nlc3MoKSB3aGljaCBkb2VzIG5vdCBleGlzdCBvbiBNU1ZDNgorCSAgRml4ZXMgYnVnICM2Mjk0OTQuCisKKzIwMTAtMDktMTcgMTc6MzQ6NDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXJsaXN0LmM6CisJKiBnc3QvZ3N0YnVmZmVybGlzdC5oOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgYnVmZmVybGlzdDogYWRkIGZ1bmN0aW9uIHRvIGFkZCBhIGxpc3Qgb2YgYnVmZmVycworCSAgQWRkIGEgZnVuY3Rpb24gdG8gYWRkIGEgbGlzdCBvZiBidWZmZXJzIHRvIHRoZSBidWZmZXJsaXN0LgorCisyMDEwLTA5LTE3IDE1OjUxOjA4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuaDoKKwkqIHRlc3RzL2NoZWNrL2xpYnMvYWRhcHRlci5jOgorCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgorCSAgYWRhcHRlcjogYWRkIGZ1bmN0aW9uIHRvIGdldCBhIGxpc3Qgb2YgYnVmZmVycworCSAgQWRkIGEgZnVuY3Rpb24gdG8gcmV0cmlldmUgYSBsaXN0IG9mIGJ1ZmZlcnMgY29udGFpbmluZyB0aGUgZmlyc3QgTiBieXRlcyBmcm9tCisJICB0aGUgYWRhcHRlci4gVGhpcyBjYW4gYmUgZG9uZSB3aXRob3V0IGEgbWVtY3B5IGFuZCBzaG91bGQgbWFrZSBpdCBwb3NzaWJsZSB0bworCSAgdHJhbnNmZXIgdGhlIGxpc3QgdG8gYSBHc3RCdWZmZXJMaXN0IGxhdGVyLgorCisyMDEwLTA5LTE3IDE1OjA3OjUwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKKwkgIGFkYXB0ZXI6IHJldXNlIG1vcmUgZGF0YSBpbiBfcGVlaygpCisJICBPcHRpbWl6ZSBfcGVlaygpIHNvbWUgbW9yZSBieSByZXVzaW5nIGFscmVhZHkgYXNzZW1ibGVkIGRhdGEgd2hlbiB3ZSBjYW4uCisKKzIwMTAtMDktMTcgMTM6NTc6MzkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgorCSAgYWRhcHRlcjogb3B0aW1pemUgX3Rha2UoKSBhIGxpdHRsZSBtb3JlCisJICBXaGVuIHdlIGhhdmUgYWxyZWFkeSBhc3NlbWJsZWQgc29tZSBkYXRhIGJlZm9yZSwgcmV1c2UgdGhpcyBkYXRhIGFuZCBvbmx5IGNvcHkKKwkgIHRoZSBwYXJ0IHRoYXQgaXMgbmV3LgorCisyMDEwLTA5LTE3IDEyOjQ4OjU1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKKwkgIGFkYXB0ZXI6IHJlZmFjdG9yIGFkYXB0ZXIgdGFrZQorCSAgTW92ZSBzb21lIGNvbW1vbiBjb2RlIGludG8gb25lIHBsYWNlCisKKzIwMTAtMDktMTcgMTI6NDA6MTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgorCSogdGVzdHMvY2hlY2svbGlicy9hZGFwdGVyLmM6CisJICBhZGFwdGVyOiBhZGQgc3VwcG9ydCBmb3IgMCBzaXplZCBidWZmZXJzCisJICBBZGQgc3VwcG9ydCBmb3IgMCBzaXplZCBidWZmZXJzLiBUaGlzIGlzIGludGVyZXN0aW5nIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlCisJICB0aW1lc3RhbXAgZnVuY3Rpb25zLgorCSAgRml4ZXMgIzYyOTU1MworCisyMDEwLTA5LTE3IDEwOjAxOjAxICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBkb2NzL3B3Zy9hZHZhbmNlZC1zY2hlZHVsaW5nLnhtbDoKKwkgIHB3ZzogTWFrZSBhIHNlbnRlbmNlIGNsZWFyZXIuCisKKzIwMTAtMDktMTYgMTk6Mjc6NTcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKKwkgIGVsZW1lbnRmYWN0b3J5OiBtYWtlIHN1cmUgZ3N0cmVhbWVyIGhhcyBiZWVuIGluaXRpYWxpemVkIHdoZW4gY3JlYXRpbmcgZWxlbWVudHMKKwkgIEFkZCBnc3RfaXNfaW5pdGlhbGl6ZWQoKSBndWFyZCB0byBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoKSwgc28KKwkgIHBlb3BsZSB3aG8gZm9yZ290IHRvIGNhbGwgZ3N0X2luaXQoKSBnZXQgYSB1c2VmdWwgd2FybmluZyBmb3Igd2hhdAorCSAgc2VlbXMgdG8gYmUgYSBjb21tb24gZW5vdWdoIG1pc3Rha2UuCisKKzIwMTAtMDktMTYgMDA6Mzc6NTkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cXVlcnkuYzoKKwkgIHF1ZXJ5OiBtaW5vciBnc3RfcXVlcnlfYWRkX2J1ZmZlcmluZ19yYW5nZSgpIGNvZGUgcmVmbG93CisJICBTcHJpbmtsZSBzb21lIEdfVU5MSUtFTFkoKSwgcmV0dXJuIFRSVUUvRkFMU0UgY29uc3RhbnRzLCBhdm9pZCBhbgorCSAgdW5uZWNlc3NhcnkgZ192YWx1ZV91bnNldCgpLCBtb3ZlIGdfdmFsdWVfaW5pdCgpK3NldF9pbnQ2NF9yYW5nZSgpCisJICBjbG9zZXIgdG8gd2hlcmUgdGhleSdyZSBuZWVkZWQuCisKKzIwMTAtMDktMTYgMDA6MzA6MTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cXVlcnkuYzoKKwkgIHF1ZXJ5OiBnc3RfcXVlcnlfYWRkX2J1ZmZlcmluZ19yYW5nZSgpIG9wdGltaXNhdGlvbnMKKwkgIERvbid0IGNyZWF0ZSBhIG5ldyBHVmFsdWVBcnJheSBjb3B5IGZvciBldmVyeSBzaW5nbGUgX2FkZF9idWZmZXJpbmdfcmFuZ2UoKQorCSAgY2FsbCwgYnV0IGFwcGVuZCB0byB0aGUgZXhpc3RpbmcgdmFsdWUgYXJyYXkgb3duZWQgYnkgdGhlIHN0cnVjdHVyZSBpbnN0ZWFkLgorCisyMDEwLTA5LTE2IDAwOjAzOjM4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSAgc3RydWN0dXJlOiBtaWNyby1vcHRpbWlzYXRpb24gZm9yIHNvbWUgc2V0dGVyIGZ1bmN0aW9ucworCSAgU3BsaXQgb3V0IGZ1bmN0aW9ucyB0aGF0IGRvIHRoZSBhY3R1YWwgd29yaywgc28gd2UgYXZvaWQgZG9pbmcKKwkgIHRoZSBzYW1lIGdfcmV0dXJuX2lmX2ZhaWwoKSBjaGVja3MgbXVsdGlwbGUgdGltZXMgZm9yIGVhY2ggY2FsbC4KKworMjAxMC0wOS0xNSAyMzo0Mjo0MyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJKiBnc3QvZ3N0c3RydWN0dXJlLmg6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIHN0cnVjdHVyZTogYWRkIGdzdF9zdHJ1Y3R1cmVfe2lkX310YWtlX3ZhbHVlKCkKKwkgIEFkZCBfc2V0X3ZhbHVlKCkgdmFyaWFudHMgdGhhdCB0YWtlIG93bmVyc2hpcCBvZiB0aGUgdmFsdWUgcGFzc2VkCisJICBpbnN0ZWFkIG9mIG1ha2luZyBhIGNvcHkgb2YgdGhlIHZhbHVlLiBUaGlzIGlzIHVzZWZ1bCBmb3Igc2V0dGluZworCSAgdmFsdWVzIHRvIHRoaW5ncyB0aGF0IGFyZW4ndCByZWZjb3VudGVkIChlLmcuIEdWYWx1ZUFycmF5cyBvcgorCSAgc3RyaW5ncyBvciBzdHJpbmcgYXJyYXlzLCBldGMuKS4KKwkgIEFQSTogZ3N0X3N0cnVjdHVyZV90YWtlX3ZhbHVlKCkKKwkgIEFQSTogZ3N0X3N0cnVjdHVyZV9pZF90YWtlX3ZhbHVlKCkKKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Mjk4MzEKKworMjAxMC0wOS0xNiAxOToxOToyMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJpbi5jOgorCSAgYmluOiBmaXggZG9jIHN0cmluZywgd2UgcG9zdCBlbGVtZW50IG1lc3NhZ2VzCisKKzIwMTAtMDktMTYgMTk6MDY6MzUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RiaW4uYzoKKwkgIGJpbjogYWRkIG1lc3NhZ2UtZm9yd2FyZCBvcHRpb24KKwkgIEFkZCBhbiBvcHRpb24gdG8gZm9yd2FyZCBhbGwgdGhlIGludGVybmFsIG1lc3NhZ2VzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGJlCisJICBmaWx0ZXJlZCBzdWNoIGFzIEVPUywgU0VHTUVOVCBhbmQgQVNZTkMgbWVzc2FnZXMuCisJICBUaGlzIGFsbG93cyB0aGUgYXBwbGljYXRpb24gdG8sIGZvciBleGFtcGxlLCBkZXRlY3QgdGhhdCBhIHBhcnRpYWwgcGlwZWxpbmUgaXMKKwkgIHByZXJvbGxlZCBvciByZWFjaGVkIGVvcy4KKwkgIFRoZSBvcmlnaW5hbCBtZXNzYWdlcyBhcmUgd3JhcHBlZCBpbnNpZGUgYW4gZWxlbWVudCBtZXNzYWdlIGJlY2F1c2UgdGhlIHBhcmVudAorCSAgYmlucyBhcmUgbm90IHN1cHBvc2VkIHRvIHNlZSB0aG9zZSBpbnRlcm5hbCBtZXNzYWdlcyBlc2NhcGUuCisKKzIwMTAtMDktMTIgMTY6NTA6MTEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGx1Z2luLmM6CisJICBwbHVnaW46IHVzZSBzdHJzdHIoKSBpbnN0ZWFkIG9mIGdfc3Ryc3RyX2xlbigpCisJICBTYXZlcyB1cyBhIHN0cmxlbigpIGNhbGwuCisKKzIwMTAtMDktMTUgMTM6Mjk6NTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IG9ubHkgcG9zdCBidWZmZXJpbmcgbWVzc2FnZSB3aGVuIHBlcmNlbnQgY2hhbmdlZAorCisyMDEwLTA5LTE1IDEzOjE1OjE5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSAgcXVldWUyOiBhbHdheXMgdXBkYXRlIGJ1ZmZlcmluZyBzdGF0dXMKKwkgIFVwZGF0ZSB0aGUgYnVmZmVyaW5nIHN0YXR1cyBldmVuIHdoZW4gd2UgYXJlIG5vdCB1c2luZyBhIHF1ZXVlIHNvIHRoYXQgRU9TIGNhbgorCSAgcHJvcGVybHkgZmluaXNoIHRoZSBidWZmZXJpbmcuCisKKzIwMTAtMDktMTMgMjA6Mzk6NTAgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBnc3RwYWQ6IEZpeCBmbHVzaC1zdG9wIGV2ZW50IGhhbmRsaW5nCisJICBBIGZsdXNoLXN0b3AgZXZlbnQgd291bGQgbWFrZSBhIHBhZCB1bmZsdXNoaW5nLCBjYXVzaW5nIGl0CisJICB0byBzdGFydCBhY3RpbmcgYXMgYW4gYWN0aXZhdGVkIHBhZC4gVGhpcywgZm9yIGV4YW1wbGUsCisJICBjb3VsZCBsZWFkIHRvIHRoZSBjaGFpbiBmdW5jdGlvbiBiZWluZyBjYWxsZWQgd2hlbiBzdHVmZgorCSAgaXNuJ3QgaW5pdGlhbGl6ZWQuCisJICBUaGlzIGNvdWxkIGhhcHBlbmQgd2hlbiBzZXR0aW5nIHF0ZGVtdXggdG8gTlVMTCB3aGlsZSBhIHNlZWsKKwkgIHdhcyBiZWluZyBoYW5kbGVkIGluIHRoZSB1cHN0cmVhbSBmaWxlc3JjIChpbiBwdXNoIG1vZGUpLgorCSAgVGhpcyBwYXRjaCBtYWtlcyBpdCBjaGVjayBpZiBpdCBpcyBhY3RpdmF0ZWQgYmVmb3JlIHNldHRpbmcKKwkgIGl0IHRvIHVuZmx1c2hpbmcuCisKKzIwMTAtMDktMTMgMTE6MTc6MzQgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3RjYXBzLmM6CisJKiBnc3QvZ3N0ZGF0ZXRpbWUuYzoKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3R0YWdsaXN0Lmg6CisJICBkb2NzOiBmaXggd2FybmluZ3MgcG9pbnRlZCBvdXQgYnkgZ3RrLWRvYworCisyMDEwLTA5LTEzIDA5OjUwOjUzICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3R0YXNrcG9vbC5jOgorCSAgdGFza3Bvb2w6IG1ha2UgZGVidWcgb25seSBjb2RlIGNvbmRpdGlvbmFsCisKKzIwMTAtMDktMTAgMTU6MDc6MDMgLTA0MDAgIENvbGluIFdhbHRlcnMgPHdhbHRlcnNAdmVyYnVtLm9yZz4KKworCSogZ3N0L2dzdGVycm9yLmg6CisJICBpbnRyb3NwZWN0aW9uOiBCdWlsZCB3aXRoIGxhdGVzdCBnLWkKKwkgIEhpZGUgYSBjb21wYXRpYmlsaXR5IHR5cGVkZWYuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI5MjQxCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTUwNjE2CisKKzIwMTAtMDktMDkgMjI6MjQ6MzggKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdHBsdWdpbmxvYWRlci5jOgorCSAgcGx1Z2lubG9hZGVyOiBkb24ndCBsZWFrIGVudHJpZXMgZm9yIGJsYWNrbGlzdGVkIGZpbGVzCisKKzIwMTAtMDktMDkgMjE6NTk6MjkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogdGVzdHMvY2hlY2svZ2VuZXJpYy9zdGF0ZXMuYzoKKwkgIGNoZWNrczogYW5kIGNoZWNrIHRoZSByaWdodCBlbnYtdmFyIChmaXh1cCBsYXN0IGNvbW1pdCkKKworMjAxMC0wOS0wOSAyMTo1NjoyOCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc3RhdGVzLmM6CisJICB0ZXN0czogYWxsb3cgcnVubmluZyBzdGF0ZSB0ZXN0cyBmb3IgYWxsIGVsZW1lbnRzCisJICBOb3cgb25lIGNhbiB1c2UgR1NUX05PX1NUQVRFX0lHTk9SRV9FTEVNRU5UUz0xIG1ha2UgZ2VuZXJpYy9zdGF0ZXMuY2hlY2sKKwkgIHRvIHRyeSBlbGVtZW50cyB0aGF0IHdvdWxkIG5vcm1hbHkgYmUgc2tpcHBlZC4KKworMjAxMC0wOS0wNiAxNToxNjoxNiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZ3N0L2dzdG9iamVjdC5jOgorCSAgZ3N0b2JqZWN0OiBhdm9pZCBzdHJpbmcgY3JlYXRpb24gd2hlbiBub3QgbmVlZGVkCisKKzIwMTAtMDktMDkgMTY6MTE6NDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6CisJICBpZGVudGl0eTogaWRlbnRpdHkgaXMgR0FQIGZsYWcgYXdhcmUsIG5vIG5lZWQgdG8gbGV0IGl0IGJlIHVuc2V0IGJ5IGJhc2V0cmFuc2Zvcm0KKworMjAxMC0wOS0wOSAxNTo1NzoxNSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiB0b29scy9nc3QtbGF1bmNoLmM6CisJICBnc3QtbGF1bmNoOiBhZGQgYSBzeW5jIGJ1cyBoYW5kbGVyIGFuZCBtb3ZlIHN0YXRlLWNoYW5nZSBsb2dnaW5nIHRoZXJlCisJICBUaGUgc3luYyBoYW5kbGVyIGlzIGNhbGxlZCBmb3IgYWxsIG1lc2FnZXMsIHRoZSBldmVudCBsb29wIHdlIHByZXZpb3VzbHkgdXNlZAorCSAgd2FzIG5vdC4gSW4gdGhlIHN5bmMgaGFuZGxlciB0cmlnZ2VyIHBpcGVsaW5lIGRvdCBkdW1wcyBhbmQgY2FsbCBhY2Nlc3MgZm9yIGEKKwkgIGZpbGUgaW4gdG1wLWRpciB0byBhZGQgbWFya2VycyBpbnRlcmNlcHRhYmxlIGJ5IHN0cmFjZSBhbmQgY28uCisKKzIwMTAtMDktMDggMTg6NDE6MTggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSAgY2Fwczogc2ltcGxpZnkgY29kZSBhIGJpdAorCSAgTm8gbmVlZCB0byBjYWxsIGdfc2xpc3RfbGVuZ3RoKCkgaGVyZS4KKworMjAxMC0wOS0wOCAwOTozNzo0MiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IGFkZCBhIHVuY2hlY2tlZCB2YXJpYW50IGZvciBwdWxsCisJICBBZGQgaW50ZXJuYWwgX2dldF9yYW5nZV91bmNoZWNrZWQgdGhhdHMgaXMgY2FsbGVkIGZyb20gX2dldF9yYW5nZSBhbmQKKwkgIF9wdWxsX3JhbmdlLgorCisyMDEwLTA5LTA3IDIzOjQ4OjU2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogc2NyaXB0cy9nc3QtdW5pbnN0YWxsZWQ6CisJICBnc3QtdW5pbnN0YWxsZWQ6IGFkZCB1Z2x5L2JhZC9mZm1wZWcgcGtnLWNvbmZpZyBkaXJzIHRvIFBLR19DT05GSUdfUEFUSAorCSAgU28gd2UgY2FuIGZpZ3VyZSBvdXQgcGx1Z2luIGRpcmVjdG9yaWVzIG9mIG90aGVyIG1vZHVsZXMgcHJvcGVybHkgaW4KKwkgIHRoZSB1bmluc3RhbGxlZCBzZXR1cCBjYXNlLCBmb3IgdW5pdCB0ZXN0cyB0aGF0IG5lZWQgZWxlbWVudHMgZnJvbQorCSAgb3RoZXIgbW9kdWxlcy4KKworMjAxMC0wOS0wNyAxMjowMToxOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzOgorCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmhpZXJhcmNoeToKKwkgIGRvY3M6IHVwZGF0ZSBwbHVnaW4gZG9jcyBmb3IgcmVjZW50IGNoYW5nZXMKKwkgIEFuZCBzb3J0ZWQgaGllcmFyY2h5CisKKzIwMTAtMDktMDcgMTE6NDE6MzcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb21tb246CisJICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKKwkgIEZyb20gYzJlMTBiZiB0byBhYTBkMWQwCisKKzIwMTAtMDktMDcgMTE6MDk6MTYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0b29scy9nc3QtaW5zcGVjdC5jOgorCSAgZ3N0LWluc3BlY3Q6IGRvbid0IHVzZSBnc3Rfc3RydWN0dXJlX2ZvcmVhY2goKSBvbiBOVUxMIHBvaW50ZXJzCisKKzIwMTAtMDktMDYgMjA6MTk6MjcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmUucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kYS5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9lcy5wbzoKKwkqIHBvL2V1LnBvOgorCSogcG8vZmkucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2h1LnBvOgorCSogcG8vaWQucG86CisJKiBwby9pdC5wbzoKKwkqIHBvL2phLnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3BsLnBvOgorCSogcG8vcHRfQlIucG86CisJKiBwby9ydS5wbzoKKwkqIHBvL3J3LnBvOgorCSogcG8vc2sucG86CisJKiBwby9zbC5wbzoKKwkqIHBvL3NxLnBvOgorCSogcG8vc3IucG86CisJKiBwby9zdi5wbzoKKwkqIHBvL3RyLnBvOgorCSogcG8vdWsucG86CisJKiBwby92aS5wbzoKKwkqIHBvL3poX0NOLnBvOgorCSogcG8vemhfVFcucG86CisJICBwbzogdXBkYXRlIHRyYW5zbGF0aW9ucyBmb3IgbmV3IHN0cmluZ3MKKworMjAxMC0wOS0wNiAyMDoxNjoxNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RlcnJvci5jOgorCSAgZ3N0ZXJyb3I6IGFkZCBkZWZhdWx0IGVycm9yIG1lc3NhZ2UgZm9yIEdTVF9MSUJSQVJZX0VSUk9SX0VOQ09ERQorCSAgTm8gaWRlYSB0aG91Z2ggd2h5IHdlIGV2ZW4gaGF2ZSBHU1RfTElCUkFSWV9FUlJPUl9FTkNPREUgb3Igd2hlbiBvbmUKKwkgIHdvdWxkIHdhbnQgdG8gdXNlIHRoYXQgaW5zdGVhZCBvZiBHU1RfU1RSRUFNX0VSUk9SX0VOQ09ERS4KKworMjAxMC0wOS0wNiAyMDowNjo1NiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RlcnJvci5jOgorCSAgZ3N0ZXJyb3I6IGF2b2lkIHBvaW50bGVzcyBzdHJpbmcgY29weWluZworCSAgVGhlcmUncyBubyBuZWVkIHRvIGNyZWF0ZSB0aGVzZSB0YWJsZXMgd2l0aCBkdXBsaWNhdGVzIG9mIHRoZQorCSAgdW50cmFuc2xhdGVkIGVycm9yIG1lc3NhZ2Ugc3RyaW5nIGNvbnN0YW50cywgd2UgY2FuIGp1c3QgdXNlCisJICBvbGQtZmFzaGlvbmVkIHN3aXRjaC9jYXNlIGFuZCBjYWxsIGdldHRleHQgZGlyZWN0bHkuIFRoaXMgYWxzbworCSAgbWFrZXMgdGhpbmdzIHNsaWdodGx5IG1vcmUgdGhyZWFkIHNhZmUgYW5kIG1vcmUgcm9idXN0IHRvIGJhZAorCSAgaW5wdXQgKGludmFsaWQgZXJyb3IgY29kZXMpLgorCisyMDEwLTA5LTA2IDE4OjMzOjUxICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKKwkgIGNoZWNrOiBBdm9pZCBlcnJvcjogYXJyYXkgc3Vic2NyaXB0IGlzIGFib3ZlIGFycmF5IGJvdW5kcworCSAgQ291bGQgaGF2ZSBjb21lIHVwIHdpdGggc29tZXRoaW5nIGJldHRlciBmb3IgbXkgMjAwMHRoIGNvbW1pdAorCSAgdG8gR1N0cmVhbWVyLi4uCisKKzIwMTAtMDktMDYgMTc6MDE6MTkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdG9iamVjdC5jOgorCSAgZG9jczogZ2l2ZSBhIHByYWN0aWNhbCBleGFtcGxlIGZvciB0aGUgZ3N0X29iamVjdF9oYXNfYW5jaGVzdG9yCisKKzIwMTAtMDktMDYgMTQ6MzM6NDQgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6CisJICBlbGVtZW50ZmFjdG9yeTogdXNlIHRoZSBwYXJlbnRfY2xhc3MgZGVmaW5lZCBieSBHX0RFRklORV9UWVBFCisKKzIwMTAtMDktMDYgMTQ6MzI6MDAgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgIHRlc3RzOiB0dW5lIHNraXBwaW5nIGNoZWNrcyBpZiB3ZSBoYXZlIGRpc2FibGVkIHN1YnN5c3RlbXMKKwkgIFNraXAgQUJJIHRlc3RzIGlmIHNvbWUgc3Vic3lzdGVtcyBhcmUgb2ZmLiBSZW1vdmUgRElTQUJMRV9HU1RfREVCVUcgZnJvbQorCSAgc2tpcHBpbmcgZXhwb3J0IGNoZWNrcyBhcyB0aGlzIGlzIHNhZmUgbm93LgorCisyMDEwLTA5LTA2IDE0OjA5OjUyICswMzAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5jOgorCSAgcmVnaXN0cnljaHVua3M6IFVzZSB0aGUgY29ycmVjdCB2YXJpYWJsZSBmb3IgZGVidWcgbWVzc2FnZQorCSAgRGVidWcgcHJpbnQgd2FzIHVzaW5nIGEgdmFyaWFibGUgdGhhdCB3YXMgbm90IGluaXRpYWxpemVkLgorCisyMDEwLTA4LTEwIDE0OjA1OjIyICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSogZ3N0L2dzdGVsZW1lbnQuaDoKKwkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgorCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5Lmg6CisJKiBnc3QvZ3N0cmVnaXN0cnljaHVua3MuYzoKKwkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGVsZW1lbnQtZGV0YWlsczogYWxsb3cgZm9yIGFyYml0cmFyeSBlbGVtZW50IGRldGFpbHMKKwkgIEFkZCBhIEdzdFN0cnVjdHVyZSB0byBHc3RFbGVtZW50Q2xhc3MgYW5kIEdzdEVsZW1lbnRGYWN0b3J5LiBBZGQgc2V0dGVycy9nZXR0ZXIuCisJICBIYW5kbGUgaXQgaW4gdGhlIHJlZ2lzdHJ5IGNvZGUuIFByaW50IGl0ZW1zIGluIGdzdC1pbnNwZWN0LgorCSAgRml4ZXMgIzM5Njc3NC4KKwkgIEFQSTogZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X21ldGFfZGF0YSgpLCBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhX2RhdGFfZGV0YWlsKCkKKworMjAxMC0wOS0wNSAxODo1Nzo1NiAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSBkM2Q5YWNmIHRvIGMyZTEwYmYKKworMjAxMC0wOS0wNSAxMjoxMzowMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSBjYTFjODY3IHRvIGQzZDlhY2YKKworMjAxMC0wOS0wNSAxMDoyMjoyMCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICB3aW4zMjogQWRkIG5ldyBzeW1ib2xzIGZyb20gR3N0RWxlbWVudEZhY3RvcnlMaXN0CisJICBBbmQgaGVyZSdzIGEgcmVtaW5kZXIgc2luY2UgSSBmb3Jnb3QgdG8gcHV0IHRoZW0gaW4gbXkgcHJldmlvdXMKKwkgIGNvbW1pdC4KKwkgIEFQSTogZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2ZpbHRlcgorCSAgQVBJOiBnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZ2V0X2VsZW1lbnRzCisJICBBUEk6IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9pc190eXBlCisJICBBUEk6IGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2RlYnVnCisJICBBUEk6IGdzdF9wbHVnaW5fZmVhdHVyZV9yYW5rX2NvbXBhcmVfZnVuYworCSAgQVBJOiBHc3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlCisJICBBUEk6IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9BTlkKKwkgIEFQSTogR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0FVRElPVklERU9fU0lOS1MKKwkgIEFQSTogR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0FVRElPX0VOQ09ERVIKKwkgIEFQSTogR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09EQUJMRQorCSAgQVBJOiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVDT0RFUgorCSAgQVBJOiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVNVVhFUgorCSAgQVBJOiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVQQVlMT0FERVIKKwkgIEFQSTogR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0VOQ09ERVIKKwkgIEFQSTogR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0ZPUk1BVFRFUgorCSAgQVBJOiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUFYX0VMRU1FTlRTCisJICBBUEk6IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9BVURJTworCSAgQVBJOiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfSU1BR0UKKwkgIEFQSTogR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX01FVEFEQVRBCisJICBBUEk6IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9TVUJUSVRMRQorCSAgQVBJOiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfVklERU8KKwkgIEFQSTogR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX0FOWQorCSAgQVBJOiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTVVYRVIKKwkgIEFQSTogR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1BBUlNFUgorCSAgQVBJOiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfUEFZTE9BREVSCisJICBBUEk6IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9TSU5LCisJICBBUEk6IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9TUkMKKwkgIEFQSTogR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1ZJREVPX0VOQ09ERVIKKworMjAxMC0wOC0zMSAxMTozNzo0MiArMDIwMCAgUGhpbGlwcGUgTm9ybWFuZCA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkgIHF1ZXVlMjogYnVmZmVyaW5nX3JhbmdlcyBxdWVyeSBzdXBwb3J0CisJICBGaXhlcyBidWcgNjIzMTIxCisKKzIwMTAtMDktMDMgMTk6NTg6NDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cXVlcnkuYzoKKwkgIGdzdHF1ZXJ5OiBPbmx5IGZpbGwgdGhlIHN0YXJ0L3N0b3AgdmFsdWVzIG9mIHRoZSBidWZmZXJpbmcgcmFuZ2VzIGlmIGEgbm9uLU5VTEwgcG9pbnRlciB3YXMgcHJvdmlkZWQKKworMjAxMC0wOC0zMSAxMTozNToxMiArMDIwMCAgUGhpbGlwcGUgTm9ybWFuZCA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3RxdWFyay5jOgorCSogZ3N0L2dzdHF1YXJrLmg6CisJKiBnc3QvZ3N0cXVlcnkuYzoKKwkqIGdzdC9nc3RxdWVyeS5oOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHF1ZXJ5LmM6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGdzdHF1ZXJ5OiBuZXcgYnVmZmVyaW5nX3JhbmdlcyBBUEkKKwkgIEFkZGVkIGEgbmV3IHF1ZXJ5IHR5cGUgdG8gcmV0cmlldmUgaW5mb3JtYXRpb25zIGFib3V0IHRoZSBhcmVhcyBvZiB0aGUKKwkgIG1lZGlhIGN1cnJlbnRseSBidWZmZXJlZC4gU2VlIGJ1ZyA2MjMxMjEuCisJICBBUEk6IGdzdF9xdWVyeV9hZGRfYnVmZmVyaW5nX3JhbmdlCisJICBBUEk6IGdzdF9xdWVyeV9nZXRfbl9idWZmZXJpbmdfcmFuZ2VzCisJICBBUEk6IGdzdF9xdWVyeV9wYXJzZV9udGhfYnVmZmVyaW5nX3JhbmdlCisKKzIwMTAtMDgtMTYgMTk6MDE6MTUgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6CisJKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKKwkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6CisJKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oOgorCSAgR3N0RWxlbWVudEZhY3Rvcnk6IEFkZCBsaXN0aW5nIGZlYXR1cmVzCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI2MTgxCisKKzIwMTAtMDktMDIgMTI6NDQ6MDggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9ydW5uaW5nLnhtbDoKKwkgIGRvY3M6IG1lbnRpb24gR1NUX0RFQlVHX09QVElPTlMsIE9SQ19DT0RFLCBHX0RFQlVHIGFuZCBHX1NMSUNFIGVudmlyb25tZW50IHZhcmlhYmxlcworCSAgTWVudGlvbiBhIGZldyBtb3JlIHVzZWZ1bCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gdGhlICdSdW5uaW5nIEdTdHJlYW1lcgorCSAgYXBwbGljYXRpb25zJyBzZWN0aW9uIG9mIHRoZSBBUEkgcmVmZXJlbmNlLgorCisyMDEwLTA5LTAyIDE0OjE1OjI5ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgorCSAgZmFrZXNyYzogZml4IHVzZSBvZiBlbXB0eSBzdWJidWZmZXJzCisJICBSZW1vdmUgYSBzaG9ydCBjdXQgdGhhdCB3YXMgaWdub3Jpbmcgc3JjLT5kYXRhIGFsbG9jYXRpb24gbW9kZS4gQWxsCisJICB0aGUgY2FsbGVkIGNvZGUtcGF0aCBiZWxvdyBoYW5kbGUgc2l6ZT09MC4KKworMjAxMC0wOS0wMiAwMDowMToyNSArMDEwMCAgSmVmZnJleSBTLiBTbWl0aCA8d2h5ZG91YnRAeWFob28uY29tPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdGJ1ZmZlci5oOgorCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuaDoKKwkqIGdzdC9nc3RldmVudC5oOgorCSogZ3N0L2dzdG1lc3NhZ2UuaDoKKwkqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6CisJKiBnc3QvZ3N0cXVlcnkuaDoKKwkqIGdzdC9nc3R1dGlscy5oOgorCSogbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLmg6CisJICBGaXggY2FzdHMgaW4gYSBidW5jaCBvZiBpbmxpbmUgZnVuY3Rpb25zIHRvIG1haW50YWluIGNvcnJlY3QgY29uc3QtbmVzcworCSAgTWFrZSBjb2RlIGluY2x1ZGluZyBHU3RyZWFtZXIgaGVhZGVycyBjb21waWxlIHdpdGggLVdjYXN0LXF1YWwgYnkKKwkgIG1haW50YWluaW5nIGNvbnN0LW5lc3Mgd2hlbiBjYXN0aW5nLiBBbHNvIGZpeCBmdW5jdGlvbiBzaWduYXR1cmUgb2YKKwkgIGdzdF9ieXRlX3dyaXRlcl9zZXRfcG9zKCk6IHRoZSBieXRlIHdyaXRlciBzaG91bGQgbm90IGJlIG1hcmtlZCBhcworCSAgY29uc3QuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI3OTEwCisKKzIwMTAtMDgtMzEgMTg6NDA6NDQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb21tb246CisJKiBjb25maWd1cmUuYWM6CisJKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvZGF0YXByb3RvY29sL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvbmV0L01ha2VmaWxlLmFtOgorCSAgYnVpbGQ6IHVzZSBuZXcgQUdfR1NUX1BLR19DT05GSUdfUEFUSCBtNCBtYWNybyBmcm9tIGNvbW1vbgorCSAgU2V0cyB1cCBhIEdTVF9QS0dfQ09ORklHX1BBVEggdmFyaWFibGUgZm9yIHVzZSBpbiBNYWtlZmlsZS5hbQorCSAgKGF2b2lkcyB0cmFpbGluZyAnOicgaW4gUEtHX0NPTkZJR19QQVRIIHVzZWQpLiBBIHVzZWZ1bCBzaWRlCisJICBlZmZlY3Qgb2YgdGhpcyBpcyBhbHNvIHRoYXQgdGhlIFBLR19DT05GSUdfUEFUSCBlbnZpcm9ubWVudAorCSAgaXMgbm93IGxvZ2dlZCBpbiB0aGUgY29uZmlndXJlIG91dHB1dC4KKworMjAxMC0wOS0wMSAxMTozNDowMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtY2xvY2tzLnhtbDoKKwkgIG1hbnVhbDogaW1wcm92ZSBjbG9jayBkb2NzIGEgbGl0dGxlCisKKzIwMTAtMDktMDEgMTE6MDY6NTcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKKwkgIGdzdHZhbHVlOiBGaXggbWVtb3J5IGxlYWtzIGluIHRoZSBpbnQ2NHJhbmdlIHRlc3RzCisKKzIwMTAtMDgtMjQgMTI6Mjc6MzAgKzAyMDAgIFBoaWxpcHBlIE5vcm1hbmQgPHBub3JtYW5kQGlnYWxpYS5jb20+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJKiBnc3QvZ3N0dmFsdWUuYzoKKwkqIGdzdC9nc3R2YWx1ZS5oOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGdzdHZhbHVlOiBBZGQgbmV3IEdzdEludDY0UmFuZ2UgdHlwZQorCSAgbmV3IEdzdEludDY0UmFuZ2UgdG8gc3RvcmUgZ2ludDY0IHJhbmdlcy4KKwkgIEFQSTogR1NUX1RZUEVfSU5UNjRfUkFOR0UKKwkgIEFQSTogZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZQorCSAgQVBJOiBnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21pbgorCSAgQVBJOiBnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21heAorCSAgRml4ZXMgYnVnICM2Mjc4MjYuCisKKzIwMTAtMDgtMzAgMjE6MjY6MTggLTAzMDAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0aW5mby5oOgorCSAgZG9jczogVHJpdmlhbCBjbGVhbnVwIGZvciBHU1RfREVCVUdfQ0FURUdPUllfR0VUCisKKzIwMTAtMDgtMzAgMTY6MDI6NTUgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGdzdC9nc3RpbmZvLmM6CisJICBpbmZvOiBSZS1pbnN0YXRlIHRoZSBkZWZhdWx0IGZvciBjb2xvciB1c2FnZQorCSAgVGhpcyB3YXMgYWNjaWRlbnRseSByZW1vdmVkIGluIDdhNzIyMDkxYjZkMWI1ZDdmOTQwNGZkZWY0YzY5NWEyOWE2NWE5ODkKKworMjAxMC0wOC0zMCAxMjo0NzozMSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKKwkgIGNoZWNrOiBVc2UgZ19zdHJjbXAwIGluc3RlYWQgb2Ygc3RyY21wCisJICBBdm9pZHMgc2VnZmF1bHRzIHdoZW4gdXNpbmcgTlVMTCBhcmd1bWVudHMuCisKKzIwMTAtMDgtMjcgMTU6MzU6NDkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5oOgorCSAgcXVldWU6IGFkZCBzaWxlbnQgcHJvcGVydHkgdG8gc3VwcHJlc3Mgc2lnbmFsIGVtaXNzaW9uCisJICBBbGxvdyB0byB0dXJuIG9mZiBzaWduYWwgZW1pc3Npb24gYW5kIHRoZXJlZm9yZSBleHRyYSBsb2NraW5nIGlmIHRoaXMgaXMgbm90IG5lZWRlZC4KKwkgIEZpeGVzICM2MjEyOTkKKworMjAxMC0wOC0yOCAxMDoxNjowNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIHV0aWxzOiBBZGQgZ3N0X3V0aWxfZnJhY3Rpb25fY29tcGFyZSgpIHRvIHRoZSBkb2NzIGFuZCBleHBvcnRlZCBzeW1ib2xzCisKKzIwMTAtMDgtMjggMTc6NTE6MTQgKzEwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgorCSAgdGVzdHM6IFJlbW92ZSBjaGVja3MgZm9yIGRlcHJlY2F0ZWQgZmxvdyBjaGVjayBtYWNyb3MKKwkgIEdTVF9GTE9XX0lTX0ZBVEFMKCkgYW5kIEdTVF9GTE9XX0lTX1NVQ0NFU1MoKSBhcmUgZGVwcmVjYXRlZCwKKwkgIHNvIGFyZW4ndCBhdmFpbGFibGUgZm9yIHRoZSB0ZXN0c3VpdGUgYW55IG1vcmUuCisKKzIwMTAtMDgtMjggMDk6MzU6MDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIHV0aWxzOiBGaXggaW52ZXJ0ZWQgYXNzZXJ0aW9uIGxvZ2ljIGluIGdzdF91dGlsX2ZyYWN0aW9uX2NvbXBhcmUoKQorCisyMDEwLTA4LTI4IDA5OjMwOjE4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHV0aWxzLmM6CisJKiBnc3QvZ3N0dXRpbHMuaDoKKwkqIGdzdC9nc3R2YWx1ZS5jOgorCSAgdXRpbHM6IEFkZCBnc3RfdXRpbF9mcmFjdGlvbl9jb21wYXJlKCkgdG8gY29tcGFyZSBmcmFjdGlvbnMKKwkgIEFuZCB1c2UgaXQgZm9yIHRoZSBmcmFjdGlvbiBjb21wYXJpc29ucyBpbiBnc3R2YWx1ZS5jIGluc3RlYWQKKwkgIG9mIHVzaW5nIGNvbXBhcmlzb25zIGJ5IGZpcnN0IGNvbnZlcnRpbmcgdGhlIGZyYWN0aW9ucyB0byBkb3VibGUuCisJICBTaG91bGQgZml4IGJ1ZyAjNjI4MTc0LgorCSAgQVBJOiBnc3RfdXRpbF9mcmFjdGlvbl9jb21wYXJlKCkKKworMjAxMC0wOC0yOCAxNzowNDo0MyArMTAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiB0ZXN0cy9jaGVjay9nc3QvY2Fwc2xpc3QuaDoKKwkgIHRlc3RzOiBBZGQgYSBjb3VwbGUgb2YgZXh0cmEgY2FwcyBzdHJpbmdzIHRvIHRlc3QKKworMjAxMC0wOC0yNyAxNjo1MjoxMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgorCSAgbXVsdGlxdWV1ZTogRG9uJ3QgZG8gYW4gaW5maW5pdGUgbG9vcCBpbiB0aGUgbG9vcCBmdW5jdGlvbgorCSAgSW5zdGVhZCByZXR1cm4gYWZ0ZXIgZXZlcnkgaXRlcmF0aW9uLCB3aGljaCBtYWtlcyBzdXJlIHRoYXQgdGhlCisJICBzdHJlYW0gbG9jayBpcyByZWxlYXNlZCBmb3IgYSBzaG9ydCB0aW1lIGFmdGVyIGV2ZXJ5IGl0ZXJhdGlvbiwKKwkgIHRhc2sgc3RhdGUgY2hhbmdlcyBhcmUgY2hlY2tlZCwgZXRjIGFuZCB0aGlzIGFsbG93cyB0aGUgdGFzaworCSAgdG8gYmUgc3RvcHBlZCBwcm9wZXJseS4KKworMjAxMC0wOC0yNyAxNjo0OToxNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgorCSAgbXVsdGlxdWV1ZTogRmx1c2ggdGhlIGRhdGEgcXVldWUgaWYgZG93bnN0cmVhbSByZXR1cm4gV1JPTkdfU1RBVEUgdG9vCisKKzIwMTAtMDgtMjYgMjM6Mzk6MDYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBlbGVtZW50czogU3RvcCB1c2luZyBHU1RfRkxPV19JU19GQVRBTCgpCisKKzIwMTAtMDgtMjYgMjM6Mzc6MDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIGJhc2U6IFN0b3AgdXNpbmcgR1NUX0ZMT1dfSVNfRkFUQUwoKQorCSAgQW5kIGRvY3VtZW50IHRoZSBzcGVjaWFsIGhhbmRsaW5nIG9mIFdST05HX1NUQVRFLgorCisyMDEwLTA4LTI2IDIzOjA3OjUxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5oOgorCSAgcGFkOiBEZXByZWNhdGUgR1NUX0ZMT1dfSVNfRkFUQUwoKSBhbmQgR1NUX0ZMT1dfSVNfU1VDQ0VTUygpCisJICBUaGUgcHJvYmxlbSB3aXRoIGJvdGggbWFjcm9zIGlzLCB0aGF0IHRoZXkgc3VnZ2VzdCBzb21ldGhpbmcgdGhhdCBpc24ndCB0cnVlLgorCSAgSWYgR1NUX0ZMT1dfSVNfRkFUQUwgaXMgdHJ1ZSwgdGhlcmUgY291bGQgc3RpbGwgYmUgYSBwcm9ibGVtIGZvciBtYW55IGVsZW1lbnRzCisJICBhbmQgdGhleSBzaG91bGQgc3RvcCB3aGF0IHRoZXkncmUgY3VycmVudGx5IGRvaW5nIGFuZCByZXR1cm4gdGhhdCB2YWx1ZQorCSAgdXBzdHJlYW0gKGUuZy4gbm90LWxpbmtlZCBpbiBhIHBhcnNlcikuIElmIEdTVF9GTE9XX0lTX1NVQ0NFU1MgaXMgZmFsc2UsIGl0CisJICBjb3VsZCBzdGlsbCBiZSB0aGF0IHRoaXMgaXMgIm9rIiBmb3IgdGhlIGVsZW1lbnQgKGUuZy4gbm90LWxpbmtlZCBmb3IgYSBkZW11eGVyCisJICBvbiBhIGZldyBvZiBpdHMgcGFkcyBidXQgbm90IGFsbCkuCisJICBJdCdzIGJldHRlciB0byBub3QgaGF2ZSB0aGVzZSAiY29udmVuaWVuY2UiIG1hY3JvcyBidXQgaW5zdGVhZCBsZXQgcGVvcGxlCisJICAqdGhpbmsqIGFib3V0IHRoZSBoYW5kbGluZyBvZiBkaWZmZXJlbnQgZmxvdyByZXR1cm5zLCB0aGF0IG1ha2VzIHNlbnNlIGZvcgorCSAgdGhlaXIgZWxlbWVudC4gQW5kIHdlIHNob3VsZCBkb2N1bWVudCB0aGUgZXhwZWN0ZWQgaGFuZGxpbmcgb2YgZmxvdyByZXR1cm5zIGZvcgorCSAgZGlmZmVyZW50IGNsYXNzZXMgb2YgZWxlbWVudHMgaW4gdGhlIHBsdWdpbiB3cml0ZXIncyBndWlkZS4KKwkgIEZpeGVzIGJ1ZyAjNjI4MDE0LgorCisyMDEwLTA4LTI3IDExOjExOjAwICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKKwkgIGZha2VzaW5rOiBrZWVwIHByb3BlcnRpZXMgaW4gb3JkZXIKKworMjAxMC0wOC0yNyAxMDoyMjoyNyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6CisJICBxdWV1ZTogQVJHXyAtPiBQUk9QXyBmb3IgcHJvcGVydHkgY29uc3RhbnRzCisKKzIwMTAtMDgtMjYgMTc6MDQ6MjAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IGZpeCBvbi1kaXNrIGJ1ZmZlcmluZyBhZ2FpbgorCisyMDEwLTA4LTI2IDE1OjEyOjQ5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIGJhc2V0cmFuc2Zvcm06IHJlY292ZXIgZnJvbSBpbnZhbGlkIGRvd25zdHJlYW0gc3VnZ2VzdGlvbnMKKwkgIFdoZW4gd2UgYXJlIGhhbmRsaW5nIGEgYnVmZmVyIGFuZCBuZWVkIHRvIGFsbG9jYXRlIGFuIG91dHB1dCBidWZmZXIsIGhhbmRsZSB0aGUKKwkgIGNhc2Ugd2hlbiBkb3duc3RyZWFtIHN1Z2dlc3RzIHVzIGEgZm9ybWF0IHRoYXQgd2UgY2FuJ3QgY29udmVydCB0aGUgaW5wdXQgYnVmZmVyCisJICB0by4gSW4gdGhhdCBjYXNlLCBjaGVjayBpZiB0aGVyZSBpcyBhbm90aGVyIGZvcm1hdCBhdmFpbGFibGUgZG93bnN0cmVhbSBpbnN0ZWFkCisJICBvZiBmYWlsaW5nLgorCSAgRml4ZXMgIzYyMTMzMiBhbmQgc2VlIGFsc28gIzYxNDI5NgorCisyMDEwLTA4LTI2IDEzOjQ2OjM0ICswMjAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyby5kZWNpbmFAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGx1Z2luLmM6CisJICBnc3RwbHVnaW46IGxvYWQgdGhlIGdzdC1weXRob24gcGx1Z2luIGxvYWRlciB3aXRoIEdfTU9EVUxFX0JJTkRfTEFaWS4KKworMjAxMC0wOC0xNiAxNDoxMjozNSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSogZ3N0L2dzdHRhZ2xpc3QuaDoKKwkgIHRhZzogQWRkcyBHU1RfVEFHX0FQUExJQ0FUSU9OX0RBVEEKKwkgIEFkZHMgR1NUX1RBR19BUFBMSUNBVElPTl9EQVRBIGZvciByZXByZXNlbnRpbmcgYXJiaXRyYXJ5IHByaXZhdGUKKwkgIGRhdGEgdGhhdCBhcHBsaWNhdGlvbnMgbWlnaHQgd2FudCB0byBzdG9yZSBpbnRvIHRhZ3MuIEV4aWYvaWQzLAorCSAgZm9yIGV4YW1wbGUsIGhhdmUgdGFncyBmb3IgdGhpcy4KKwkgIEFQSTogR1NUX1RBR19BUFBMSUNBVElPTl9EQVRBCisJICBGaXhlcyAjNjI2NjUxCisKKzIwMTAtMDgtMjQgMTI6NDY6MzggLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJKiB0b29scy9nc3QtbGF1bmNoLjEuaW46CisJICBnc3QtbGF1bmNoOiBGaXggT0lMX0NQVV9GTEFHUyBkb2NzIGZvciBPcmMKKworMjAxMC0wOC0yNCAxNjoyNDoxOSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiB0b29scy9nc3QtbGF1bmNoLjEuaW46CisJICBtYW46IHJlbW92ZSBPSUxfQ1BVX0ZMQUdTIGZyb20gbWFuIHBhZ2UKKwkgIFdlJ3JlIHVzaW5nIE9SQyBpbnN0ZWFkIG9mIGxpYk9pbCBub3cuCisKKzIwMTAtMDgtMjMgMTg6MjA6MjMgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJKiBnc3QvZ3N0aW5mby5jOgorCSAgVmFsZ3JpbmQgZGVmaW5lIGlzIEhBVkVfVkFMR1JJTkRfVkFMR1JJTkRfSAorCisyMDEwLTA3LTI3IDE4OjI0OjQ0IC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSogZ3N0L2dzdGluZm8uYzoKKwkgIEFsbG93IGdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGQoKSBiZWZvcmUgZ3N0X2luaXQoKQorCSAgQ2FsbGluZyBnc3RfZGVidWdfc2V0X2RlZmF1bHRfdGhyZXNob2xkKCkgYmVmb3JlIGluaXRpYWxpemF0aW9uCisJICBzZWVtcyBsaWtlIHRoZSAib2J2aW91cyIgb3JkZXIuCisKKzIwMTAtMDgtMjMgMTM6MDY6MTkgKzAyMDAgIEpvbmFzIEhvbG1iZXJnIDxqb25hcy5ob2xtYmVyZ0BheGlzLmNvbT4KKworCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcXVldWUuYzoKKwkgIHF1ZXVlOiBmaXggc2VnZmF1bHQgaW4gdGVzdAorCisyMDEwLTA4LTIzIDEwOjU4OjE2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmM6CisJICByZWdpc3RyeWNodW5rczogaW50ZXJuIGFsbCBHc3RQbHVnaW5EZXNjIG1lbWJlcnMgd2hlbiB1bnBhY2tpbmcKKworMjAxMC0wOC0yMyAxMDo1NjozMCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RvYmplY3QuYzoKKwkgIGdzdG9iamVjdDogZml4IGxlYWsgd2hlbiBuYW1pbmcgcGFyZW50ZWQgb2JqZWN0CisKKzIwMTAtMDgtMjAgMDM6MDc6NTggKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdC5jOgorCSogZ3N0L2dzdC5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBnc3Q6IEFkZCBhIGdzdF9pc19pbml0aWFsaXplZCgpIEFQSQorCSAgRm9yIG9uZSwgdGhpcyB3aWxsIGFsbG93IGxpYnJhcmllcyB0aGF0IGV4cGVjdCBhcHBsaWNhdGlvbnMgdG8KKwkgIGluaXRpYWxpemUgR1N0cmVhbWVyIGJlZm9yZSB1c2luZyB0aGVpciBBUEkgdG8gaGF2ZSBhIGNoZWNrIGZvciB0aGlzCisJICBjb25kaXRpb24uCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI3NDM4CisKKzIwMTAtMDgtMjAgMTg6MDQ6NTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RiaW4uYzoKKwkgIGJpbjogcmVsYXggdGhlIHNvdXJjZSBlbGVtZW50IGNoZWNrCisJICBXaGVuIHRoZXJlIGlzIGEgc2luayBpbnNpZGUgYSBiaW4sIHRoZSBTSU5LIGZsYWcgaXMgc2V0IG9uIHRoZSBiaW4uIFdoZW4gd2UgYXJlCisJICB0cnlpbmcgdG8gaXRlcmF0ZSB0aGUgc291cmNlIGVsZW1lbnRzLCBhbHNvIGluY2x1ZGUgdGhlIGJpbnMgd2l0aCB0aGUgU0lOSyBmbGFnCisJICBiZWNhdXNlIHRoZXkgY291bGQgYWxzbyBjb250YWluIHNvdXJjZSBlbGVtZW50cywgaW4gd2hpY2ggY2FzZSB0aGV5IGFyZSBhbHNvIGEKKwkgIHNvdXJjZS4KKwkgIFRoaXMgc29sdmVzIHRoZSBjYXNlIHdoZXJlIHNlbmRpbmcgYW4gRU9TIHRvIGEgcGlwZWxpbmUgZGlkbid0IGdldCBkaXNwYXRjaGVkIHRvCisJICBhbGwgc291cmNlIGVsZW1lbnRzLgorCSAgU2VlICM2MjU1OTcKKworMjAxMC0wOC0xOSAxNzowNzowMCArMDIwMCAgSm9uYXMgSG9sbWJlcmcgPGpvbmFzLmhvbG1iZXJnQGF4aXMuY29tPgorCisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdWV1ZS5jOgorCSAgcXVldWU6IGFkZGVkIHVuaXQgdGVzdCBmb3IgbmV3c2VnbWVudCBldmVudHMKKworMjAxMC0wMy0wNSAxNzoxODoyMyArMDEwMCAgSm9uYXMgSG9sbWJlcmcgPGpvbmFzLmhvbG1iZXJnQGF4aXMuY29tPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmg6CisJICBxdWV1ZTogUHVzaCBuZXdzZWdtZW50IHdoZW4gbGlua2luZyBpbiBQTEFZSU5HCisJICBGaXhlcyAjNjExOTE4CisKKzIwMTAtMDgtMTIgMjA6MjM6NDUgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIGVsZW1lbnQ6IGxpbmtfbWFueSBzaG91bGQgYWN0aXZhdGUgcGFkcyBpZiBuZWVkZWQKKwkgIGdzdF9lbGVtZW50X2xpbmtfbWFueSBkb2VzIHNvbWUgbWFnaWMgYW5kIGNyZWF0ZXMgZ2hvc3RwYWRzCisJICBpZiBuZWVkZWQsIGJ1dCBpdCBkaWRuJ3Qgc2V0IHRoZSBuZXdseSBjcmVhdGVkIGdob3N0cGFkIHRvCisJICBhY3RpdmUgaWYgbmVlZGVkLiBUaGlzIHBhdGNoIGZpeGVzIGl0LgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyNjc4NAorCisyMDEwLTA4LTE5IDExOjExOjI4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdGRhdGV0aW1lLmM6CisJICBkYXRldGltZTogRml4IG1lbW9yeSBsZWFrIGluIHRoZSB1bml0IHRlc3QgYnkgdW5yZWZmaW5nIEdzdERhdGVUaW1lIGluc3RhbmNlIGFmdGVyIHVzYWdlCisKKzIwMTAtMDgtMTkgMTA6MDM6MDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlLmM6CisJICB0ZXN0czogZml4IGNvbW1lbnRzIGluIHRlc3QKKworMjAxMC0wOC0xOSAwOTo1ODo1NSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkgIHF1ZXVlMjogVXNlIEdfR1VJTlQ2NF9GT1JNQVQgd2hlcmUgbmVlZGVkCisJICBGaXhlcyBidWlsZCBvbiBtYWNvc3gKKworMjAxMC0wOC0xOCAxNTozMTowOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICBjaGVjazogZW5hYmxlIHF1ZXVlIHRlc3QgYWdhaW4KKworMjAxMC0wOC0xOCAxNToxMjo0NSArMDIwMCAgSm9uYXMgSG9sbWJlcmcgPGpvbmFzLmhvbG1iZXJnQGF4aXMuY29tPgorCisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdWV1ZS5jOgorCSAgcXVldWU6IGZpeGVkIHJhY3kgdW5pdCB0ZXN0cworCSAgRml4ZXMgIzYwMDAwNAorCisyMDEwLTA4LTE2IDE4OjAxOjI3ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgorCSAgcGx1Z2luczogYWRkIGV4YW1wbGUgbGF1bmNoIGxpbmVzIGFuZCBtb3JlIGV4cGxhbmF0aW9uIHRvIHRoZSBkb2NzLgorCSAgVGhlIHBsdWdpbnMgd2hlcmUgYWxtb3N0IHVuZG9jdW1lbnRlZCA6LyAuLi4KKworMjAxMC0wOC0xMyAxNjoxOTozNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkgIHF1ZXVlMjogZml4IGNvbXBpbGF0aW9uCisKKzIwMTAtMDctMDcgMDg6MjA6MjEgKzAyMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkgIHF1ZXVlMjogRml4IGEgc3BlY2lhbCBjYXNlIGR1cmluZyByYW5nZSBtYW5hZ2VtZW50CisJICBXaGVuIGEgcmFuZ2UgY29udGFpbmVkIG5vIGRhdGEsIGlmIGl0IHdhcyBuZXcgb3IgbmV3bHkgZW1wdHksIGl0IHdvdWxkCisJICBiZSBtaXNoYW5kbGVkIGlmIGl0IHdlcmUgdGhlIGN1cnJlbnQgcmFuZ2UuCisKKzIwMTAtMDctMDUgMTM6NDM6MDUgKzAyMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkgIHF1ZXVlMjogZml4IGxvY2tpbmcgYXJvdW5kIGluaXRfcmFuZ2VzCisJICBUaGlzIGZpeGVzIGEgc2VnZmF1bHQgd2hlcmUgdGhlIHJlYWR5IHRvIHBhdXNlZCBzdGF0ZSBjaGFuZ2UgY2F1c2VzCisJICBmcmVlaW5nIGFuZCBhbGxvY2F0aW9uIG9mIG5ldyByYW5nZXMgd2hpbGUgYW5vdGhlciB0aHJlYWQgaXMgdHJ5aW5nIHRvCisJICB1c2UgdGhlbS4KKworMjAxMC0wNy0wMiAxNzo0MDowOCArMDIwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSAgcXVldWUyOiBNb3JlIHJpbmcgYnVmZmVyIGZpeGVzCisJICAtIFNldCByZWFkaW5nX3BvcyBjb3JyZWN0bHkgaW4gX2NyZWF0ZV9yZWFkICgpCisJICAtIFNlZWsgdG8gZGF0YSBpZiBpdCBpcyBmdXJ0aGVyIHRoYW4gUVVFVUVfTUFYX0JZVEVTIChxdWV1ZSkgLQorCSAgY3VyX2xldmVsLmJ5dGVzIGF3YXkuIFRoaXMgc2hvdWxkIGF2b2lkIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSByaW5nCisJICBidWZmZXIgaXMgZnVsbCBidXQgdGhlIGRhdGEgb2Zmc2V0IGZyb20gd2hpY2ggd2Ugc2hhbGwgcmVhZCBpcyBub3QgaW4KKwkgIHRoZSByaW5nIGJ1ZmZlci4KKwkgIC0gT25seSB1cGRhdGUgdGhlIG1heF9yZWFkaW5nX3BvcyB0byBhIGxvd2VyIHZhbHVlIHRvIHByb3RlY3QgZGF0YSB3aGVuCisJICBuZWNlc3NhcnkKKwkgIC0gQWx3YXlzIHNpZ25hbCBhbiBBREQgaW4gX2xvY2tlZF9lbnF1ZXVlICgpIHNvIHRoYXQgYW4gRU9TIHVubG9ja3MgdGhlCisJICByZWFkZXIKKwkgIC0gTW9yZSB1c2VmdWwgZGVidWcgb3V0cHV0CisKKzIwMTAtMDYtMjggMTc6NTA6MDYgKzAyMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkgIHF1ZXVlMjogcmluZyBidWZmZXIgZml4ZXMKKwkgIE9uZSBtdXN0IG5vdCBhZmZlY3QgdGhlIHZhbHVlcyBvZiB0aGUgY3VycmVudCByYW5nZSBiYXNlZCBvbiBhIHJlYWQKKwkgIHJlcXVlc3QgYmVmb3JlIHRoZSBjb3JyZWN0IHJhbmdlIGlzIGFjdGl2YXRlZC4KKworMjAxMC0wNi0yNSAxMjo1ODoyNyArMDIwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSAgcXVldWUyOiBGaXggYnVncworCSAgdXBkYXRlX2J1ZmZlcmluZyAoKSBuZWVkcyB0byBiZSBjYWxsZWQgZXZlcnkgdGltZSB3ZSB3cml0ZSB0byB0aGUgcmluZworCSAgYnVmZmVyIHNvIHRoYXQgYXBwbGljYXRpb25zIGRvbid0IGdldCBzdHVjayB3YWl0aW5nIGZvciBhIDEwMCUgYnVmZmVyZWQKKwkgIG1lc3NhZ2Ugd2hpbGUgcXVldWUyIGlzIHdhaXRpbmcgZm9yIHNwYWNlCisJICBfY3JlYXRlX3dyaXRlICgpIG11c3Qgb25seSBiZSBjYWxsZWQgZm9yIHRlbXAgZmlsZS9yaW5nIGJ1ZmZlciBjYXNlcworCisyMDEwLTA2LTE4IDE3OjQzOjQwICswMjAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5oOgorCSAgcXVldWUyOiBleHRlbmQgcmluZyBidWZmZXIgdG8gc3VwcG9ydCByYW0gbW9kZQorCisyMDEwLTA2LTE4IDE0OjM2OjMzICswMjAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IG1lcmdlIHdyaXRlIGJ1ZmZlciBmdW5jdGlvbnMgYW5kIGZpeCBidWdzCisJICBDYWNoZWQgZGF0YSBjb3VsZCBoYXZlIGJlZW4gb3ZlcndyaXR0ZW4gc28gaXQgaXMgbm93IHByb3RlY3RlZCB1bnRpbAorCSAgaXQgaXMgcmVhZC4gU2ltaWxhcmx5IGRhdGEgd2FzIG92ZXJyZWFkIGFzIF9oYXZlX2RhdGEgKCkgd2FzIGFsd2F5cworCSAgbG9va2luZyBmb3IgdGhlIG9yaWdpbmFsbHkgcmVxdWVzdGVkIGRhdGEgZXZlbiBpZiBwYXJ0IG9mIGl0IGhhZCBiZWVuCisJICByZWFkIGFscmVhZHkuCisKKzIwMTAtMDYtMTcgMTA6MTg6NDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IHNtYWxsIGNsZWFudXAKKworMjAxMC0wNi0xNiAxODoyNTozNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkgIHF1ZXVlMjogY2xlYW51cCB3cml0ZV90b19yaW5nX2J1ZmZlcgorCSAgVXNlIGN1cl9sZXZlbC5ieXRlcyB0byBzZWUgaG93IG11Y2ggc3BhY2UgaXMgZnJlZSBpbiB0aGUgcmluZ2J1ZmZlci4KKwkgIFNpbXBseWZ5IHRoZSB3cml0ZSBmdW5jdGlvbiwgYXZvaWQgdGFraW5nIHN1YmJ1ZmZlcnMsIG1vdmUgd2FpdGluZyBmb3IgZnJlZQorCSAgc3BhY2UgaW4gb25lIHNwb3QsIHVzZSBzaW1wbHkgY291bnRlciB0byB3cml0ZSBkYXRhIG9mIGEgYnVmZmVyLgorCisyMDEwLTA2LTE2IDE3OjAzOjQ5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSAgcXVldWUyOiBjbGVhbnVwcworCSAgQWRkIGEgbWFjcm8gdG8gZ2V0IHRoZSBtYXggc2l6ZSBvZiB0aGUgcXVldWUgaW4gYnl0ZXMsIHdoaWNoIGRlcGVuZHMgb24gdGhlCisJICBtYXhfbGV2ZWwuYnl0ZXMgYW5kIHRoZSByaW5nX2J1ZmZlcl9tYXhfc2l6ZS4KKwkgIFNvbWUgY2xlYW51cHMuCisKKzIwMTAtMDYtMTYgMTY6MjM6MDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5oOgorCSAgcXVldWUyOiByZW1vdmUgdW51c2VkIHZhcmlhYmxlCisKKzIwMTAtMDYtMTYgMTY6MTM6MjggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IGNsZWFudXBzCisJICBNYWtlIHN1cmUgdGhlIGN1cl9sZXZlbC5ieXRlcyBpcyB1cGRhdGVkIGFmdGVyIHdlIGNoYW5nZSB0aGUgd3JpdGluZ19wb3Mgb3IgdGhlCisJICBtYXhfcmVhZGluZ19wb3MuCisJICBSZWZhY3RvciBnZXRfZnJlZV9zcGFjZSgpCisJICBBZGQgc29tZSBjb21tZW50cworCisyMDEwLTA2LTE2IDEyOjAwOjQ1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSAgcXVldWUyOiByZW1vdmUgdW5uZWVkZWQgc2lnbmFsCisKKzIwMTAtMDYtMTYgMTI6MDA6MzAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IHNldCBidWZmZXJpbmcgbW9kZSBjb3JyZWN0bHkKKworMjAxMC0wNi0xNiAxMToyMDowMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkgIHF1ZXVlMjogZml4IGNhbGN1bGF0aW9uIG9mIGF2YWlsYWJsZSByaW5nYnVmZmVyIGRhdGEKKworMjAxMC0wNi0xNiAxMToxMTozMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkgIHF1ZXVlMjogcmVhZGluZ19wb3MgaXMgdXBkYXRlZCBpbiBjcmVhdGVfcmVhZCBvbmx5CisKKzIwMTAtMDYtMTYgMTE6MTE6MTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IHJlZmFjdG9yIGFuZCBhZGQgZGVidWcKKworMjAxMC0wNi0xNiAxMToxMDoyMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkgIHF1ZXVlMjogZml4IGZsdXNoaW5nCisKKzIwMTAtMDYtMTYgMTE6MDk6MjUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IGFkZCBkZWJ1ZworCisyMDEwLTA2LTE1IDE3OjI2OjE1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSAgcXVldWUyOiBkb24ndCB0cnkgdG8gd3JpdGUgMCBieXRlcworCisyMDEwLTA2LTE1IDE2OjEyOjAyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSAgcXVldWUyOyBjbGVhbnVwcyBhbmQgZml4ZXMKKwkgIE1ha2UgYSBtYWNybyBmb3Igc29tZSBmcmVxdWVudCBjaGVja3MKKwkgIEVtaXQgdGhlIHJlbW92ZWQgc2lnbmFsIGluIGFsbCBjYXNlcyB3aGVuIHdlIHJlbW92ZSBzb21ldGhpbmcKKworMjAxMC0wNi0xNSAxMjozNzozMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkgIHF1ZXVlMjogcmVmYWN0b3JpbmdzCisJICBDaGVjayBhbmQgaGFuZGxlIHNlZWsgZXJyb3JzCisJICBSZWZhY3RvciB0aGUgd2FpdF9mcmVlX3NwYWNlIGZ1bmN0aW9uLgorCisyMDEwLTA2LTE2IDEyOjI0OjI1ICswMjAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IFVzZSByaW5nLWJ1ZmZlci1tYXgtc2l6ZSBwcm9wIHRvIGNvbnRyb2wgcmluZyBidWZmZXIKKworMjAxMC0wNi0wNiAwOTozMDo0OCArMDIwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSAgcXVldWUyOiBDbGVhbiB1cCBhbmQgaW1wcm92ZSBjb2RlCisKKzIwMTAtMDUtMjYgMDQ6MTE6NDggKzAyMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkgIHF1ZXVlMjogRml4IGNvbmRpdGlvbnMgd2hlcmUgYmVoYXZpb3VyIHNob3VsZCBkaWZmZXIgYmV0d2VlbiByaW5nIGJ1ZmZlciBhbmQgdGVtcCBmaWxlCisKKzIwMTAtMDUtMTkgMTY6MDQ6MTUgKzAyMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkgIHF1ZXVlMjogYWRkIHVzZWZ1bCBkZWJ1ZyBtZXNzYWdlcyBhbmQgZml4IGFuIGFzc3VtcHRpb24gaW4gX2hhdmVfZGF0YSAoKQorCisyMDEwLTA1LTE4IDE3OjQyOjA3ICswMjAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IGZpeCBidWZmZXJpbmcgcGVyY2VudGFnZSBpbiByaW5nIGJ1ZmZlciBtb2RlCisKKzIwMTAtMDUtMTggMTc6MjE6NDAgKzAyMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkgIHF1ZXVlMjogdmFyaW91cyByaW5nIGJ1ZmZlciBmaXhlcworCSAgLSBtYWtlIF9nZXRfcmFuZ2UgKCkgZW1pdCB0aGUgZGVsIHNpZ25hbCBvbmNlIGEgYnVmZmVyIGhhcyBiZWVuIHJlYWQKKwkgIC0gdXNlIGRvIHt9IHdoaWxlICgpOyBmb3Igd2FpdCBjb2RlIGFzIHF1ZXVlIGlzIGxvY2tlZCBhbmQgbm8gZGF0YSBjb3VsZAorCSAgaGF2ZSBiZWVuIHJlYWQgaW4gdGhlIG1lYW4gdGltZSBzbyBpdCBtYWtlcyBubyBzZW5zZSB0byBjaGVjayBiZWZvcmUKKwkgIHdhaXRpbmcKKwkgIC0gbWFrZSBfaXNfZmlsbGVkICgpIG1vcmUgcm9idXN0CisKKzIwMTAtMDUtMDcgMDk6MzA6NDQgKzAyMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmg6CisJICBxdWV1ZTI6IHJpbmcgYnVmZmVyIHdvcmsgaW4gcHJvZ3Jlc3MKKworMjAxMC0wNS0wNSAxMDoyMTo1NSArMDIwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuaDoKKwkgIHF1ZXVlMjogQWRkIHVzZS1yaW5nLWJ1ZmZlciBhbmQgcmluZy1idWZmZXItbWF4LXNpemUgcHJvcGVydGllcworCisyMDEwLTA2LTE1IDA4OjU5OjExICswMjAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IGFkZCBTVC1Fcmljc3NvbiBjb3B5cmlnaHQKKworMjAxMC0wOC0xMyAxNzoyMzozMSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBjb21tb246CisJICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKKwkgIEZyb20gM2U4ZGIxZCB0byBlYzYwMjE3CisKKzIwMTAtMDgtMTIgMjI6MDg6NDQgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdGluZm8uYzoKKwkgIGluZm86IHhyZWZzIGdsaWIgc3ltYm9sIGluIGRvY3MKKworMjAxMC0wOC0xMiAxNjowNTozNSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKKwkgIGdzdGNvbGxlY3RwYWRzOiBGaXggZG9jcyBhYm91dCBHc3RDb2xsZWN0RGF0YSBsaXN0CisJICBBZGQgdG8gdGhlIGRvY3MgdGhlIGZhY3QgdGhhdCBpcyBvbmx5IHNhZmUgdG8gaXRlcmF0ZQorCSAgR3N0Q29sbGVjdFBhZCdzIGRhdGEgbGlzdCBpbnNpZGUgdGhlIGNvbGxlY3RlZCBjYWxsYmFjay4KKwkgIEZpeGVzICM2MTAzNjYKKworMjAxMC0wOC0xMCAxMDo1NjozOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSBiZDIwNTRiIHRvIDNlOGRiMWQKKworMjAxMC0wOC0wNCAxMToyNDoxMiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSogZ3N0L2dzdHRhZ2xpc3QuaDoKKwkgIHRhZzogQWRkcyBHU1RfVEFHX0FQUExJQ0FUSU9OX05BTUUgdGFnCisJICBBZGRzIGEgbmV3IHRhZyBmb3IgcmVwcmVzZW50aW5nIGFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlCisJICBhIG1lZGlhCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI2MDI3CisKKzIwMTAtMDgtMDggMTc6NTc6NTIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgorCSAgYnVmZmVybGlzdDogSW5pdGlhbGl6ZSB0aGUgR1R5cGUgY2FjaGUgZm9yIHRoZSBidWZmZXJsaXN0IGFnYWluCisJICBUaGlzIHdhcyBhY2NpZGVudGlhbGx5IHJlbW92ZWQgd2l0aCBsYXN0IGNvbW1pdC4KKworMjAxMC0wOC0wNiAxOTozODoyMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXJsaXN0LmM6CisJICBidWZmZXJsaXN0OiBEb24ndCBjaGFpbiB1cCBmaW5hbGl6ZSB0byB0aGUgcGFyZW50IGNsYXNzCisJICBHc3RNaW5pT2JqZWN0OjpmaW5hbGl6ZSBkb2VzIG5vdGhpbmcgYW5kIHRoaXMgcHJldmVudHMgYQorCSAgcnVudGltZS10eXBlLWNoZWNrIGNhc3QgYW5kIGZ1bmN0aW9uIGNhbGwgcGVyIGJ1ZmZlciBsaXN0LgorCisyMDEwLTA3LTIwIDA5OjIzOjExIC0wNTAwICBTaGl4aW4gWmVuZyA8emVuZy5zaGl4aW5AZ21haWwuY29tPgorCisJKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgorCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKKwkqIGdzdC9nc3R2YWx1ZS5jOgorCSAgZ3N0OiBtYWtlIF9nZXRfdHlwZSgpIGluIGdzdC8qIHRocmVhZCBzYWZlCisJICBUaGlzIGlzIG5vdCByZWFsbHkgbmVjZXNzYXJ5IGhlcmUgYmVjYXVzZSBldmVyeXRoaW5nIGlzCisJICBpbml0aWFsaXplZCBmcm9tIGdzdF9pbml0KCkgYWxyZWFkeSBidXQgdXNpbmcgR19ERUZJTkVfVFlQRSgpCisJICByZW1vdmVzIHNvbWUgY29weSZwYXN0ZSBib2lsZXJwbGF0ZSBjb2RlLgorCisyMDEwLTA4LTA2IDE5OjM0OjQyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6CisJKiBwbHVnaW5zL2luZGV4ZXJzL2dzdGZpbGVpbmRleC5jOgorCSogcGx1Z2lucy9pbmRleGVycy9nc3RtZW1pbmRleC5jOgorCSAgcGx1Z2luczogQWRkIGRlY2xhcmF0aW9ucyBmb3IgX2dldF90eXBlKCkgZnVuY3Rpb25zIHRvIGZpeCBjb21waWxlciB3YXJuaW5ncworCisyMDEwLTA3LTIwIDA5OjIzOjU0IC0wNTAwICBTaGl4aW4gWmVuZyA8emVuZy5zaGl4aW5AZ21haWwuY29tPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKKwkqIHBsdWdpbnMvaW5kZXhlcnMvZ3N0ZmlsZWluZGV4LmM6CisJKiBwbHVnaW5zL2luZGV4ZXJzL2dzdG1lbWluZGV4LmM6CisJICBwbHVnaW5zOiBNYWtlICpfZ2V0X3R5cGUoKSBpbiBwbHVnaW5zLyogdGhyZWFkIHNhZmUKKwkgIEl0J3Mgbm90IHJlYWxseSBuZWVkZWQgaGVyZSBidXQgdXNpbmcgR19ERUZJTkVfVFlQRSgpIHJlZHVjZXMKKwkgIHNvbWUgY29weSZwYXN0ZSBib2lsZXJwbGF0ZSBjb2RlLgorCisyMDEwLTA4LTA2IDE4OjQzOjU2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJICBiYXNlc3JjOiBNYWtlIHN1cmUgdGhlIGJ1ZmZlciBtZXRhZGF0YSBpcyB3cml0YWJsZSBiZWZvcmUgY2hhbmdpbmcgaXQKKworMjAxMC0wOC0wNSAxMzo1NjoxMSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBjb21tb246CisJICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKKwkgIEZyb20gMjAwNGQwMyB0byBiZDIwNTRiCisKKzIwMTAtMDgtMDUgMTA6MDQ6NDcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIHV0aWxzOiBzcGVlZCB1cCBwYWQgbGlua2luZyB1dGlsaXR5IGZ1bmN0aW9ucyBieSBub3QgdHJ5aW5nIHBhZHMgdGhhdCB3aWxsIG5ldmVyIHdvcmsKKwkgIEluIGdzdF9lbGVtZW50X2dldF9jb21wYXRpYmxlX3BhZCgpLCB3aGVuIHRyeWluZyB0byBmaW5kIGEgY29tcGF0aWJsZSBwYWQgb24gYW4KKwkgIGVsZW1lbnQgZm9yIGEgZ2l2ZW4gcGFkLCB0aGVyZSdzIG5vIHBvaW50IGluIGNoZWNraW5nIHRoZSBlbGVtZW50J3Mgc2luayBwYWRzCisJICBpZiB0aGUgcGFkIHRvIGxpbmsgaXMgYSBzaW5rIHBhZCBhcyB3ZWxsLCBvciB0aGUgZWxlbWVudCdzIHNvdXJjZSBwYWRzIGlmIHRoZQorCSAgZ2l2ZW4gcGFkIGlzIGEgc291cmNlIHBhZCBhbHJlYWR5LCBzaW5jZSB0aG9zZSB3b3VsZCBuZXZlciBiZSBhYmxlIHRvIGxpbmsKKwkgIGFueXdheS4gU2hvdWxkIHNwZWVkIHVwIGxpbmtpbmcgdXNpbmcgdGhlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyBhIGxpdHRsZSBiaXQsCisJICBvciBhdCBsZWFzdCByZWR1Y2UgZGVidWcgbG9nIG91dHB1dC4KKworMjAxMC0wOC0wNSAxMDozMjo1MyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0aW5mby5jOgorCSAgaW5mbzogdGFrZSB0aGUgdGltZXN0YW1wIGEgdGljayBsYXRlcgorCSAgVGhlIGxvZ2dpbmcgaXMgbm90IGFuIGF0b21pYyBvcGVyYXRpb24gYW5kIGJlY2F1c2Ugb2YgdGhlIG11bHRpLXRocmVhZGluZyB3ZSBlbmQKKwkgIHVwIHdpdGggb3V0LW9mLW9yZGVyIGxvZyBsaW5lcy4gVG9vbHMgdGhhdCBwcmVzZW50IHRoZSBsb2ctZmlsZSBzaG91bGQgcHJvYmFibHkKKwkgIHJlc29ydCB0aGUgbGluZXMuIFRoaXMgY2hhbmdlIGp1c3QgdGFrZXMgdGhlIHRpbWVzdGFtcCBhIGJpdCBjbG9zZXIgdG8gdGhlCisJICBhY3R1YWwgbG9nZ2luZy4KKworMjAxMC0wOC0wNSAwOTozNjoxNiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgZGVidWc6IGxvZ2dpbmcgaW1wcm92ZW1lbnRzCisJICBVc2UgdGhlIGV2ZW50IHNlcmlhbGlzYXRpb24uIExvZyBmb3JtYXRzIG5hbWUgaW5zdGVhZCBvZiBudW1iZXIuCisKKzIwMTAtMDctMTUgMTU6NDY6MjQgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKKwkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6CisJICBjaGVjazogZG9uJ3QgdXNlIGMrKyBrZXl3b3JkcyBhcyB2YXJpYWJsZSBuYW1lcworCisyMDEwLTA3LTE1IDExOjM3OjMwICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgYmFzZXNyYzogbG9nIHNlZWsgZXZlbnQgZGV0YWlscworCisyMDEwLTA3LTEyIDEwOjUwOjUzICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWRwYXJhbXMueG1sOgorCSAgbWFudWFsOiB1cGRhdGUgZ3N0LWNvbnRyb2xsZXIgY2hhcHRlcgorCSAgVGhlIGRvY3Mgd2VyZSBzdGlsbCBkZXNjcmliaW5nIGRlcHJlY2F0ZWQgYXBpLiBVcGRhdGUgaXQgdG8gdGVsbCBhYm91dAorCSAgY29udHJvbC1jb3VyY2VzLgorCisyMDEwLTA3LTA5IDE1OjU4OjUwICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHRlc3RzL2JlbmNobWFya3MvY29udHJvbGxlci5jOgorCSogdGVzdHMvZXhhbXBsZXMvaGVsbG93b3JsZC9oZWxsb3dvcmxkLmM6CisJKiB0ZXN0cy9leGFtcGxlcy9sYXVuY2gvbXAzcGFyc2VsYXVuY2guYzoKKwkqIHRlc3RzL2V4YW1wbGVzL3F1ZXVlL3F1ZXVlLmM6CisJKiB0ZXN0cy9leGFtcGxlcy9zdGVwcGluZy9mcmFtZXN0ZXAxLmM6CisJKiB0ZXN0cy9leGFtcGxlcy9zdHJlYW1zL3N0cmVhbS1zdGF0dXMuYzoKKwkqIHRlc3RzL2V4YW1wbGVzL3R5cGVmaW5kL3R5cGVmaW5kLmM6CisJICB0ZXN0czogY2xlYW4gdXAgZXZlbnRsb29wIGluIGV4YW1wbGVzCisJICBEb24ndCBsZWFrIHRoZSBidXMuIERvbid0IHBhcnNlIG1lc3NhZ2VzIHdpdGggdGhlIG1ldGhvZCBmb3IgZXJyb3JzICh0cmlnZ2VycworCSAgZ29iamVjdCB3YXJuaW5nKS4KKworMjAxMC0wNy0wOCAxNDowODoyNyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiB0ZXN0cy9iZW5jaG1hcmtzL2NhcHNuZWdvLmM6CisJICBiZW5jaG1hcms6IGhhbmRsZSBlcnJvcnMgZnJvbSB0aGUgcGlwZWxpbmUKKwkgIENhdGNoIGVycm9ycyBhbmQgd2FybmluZ3Mgb24gdGhlIGJ1cy4gVGhpcyBmaXhlcyBoYW5naW5nIHBpcGVsaW5lcyBpbiB0aGUgY2FzZQorCSAgb2YgYnVncyBlbHNld2hlcmUuIEFsc28gcHJpbnQgc3RhdGUtY2hhbmdlIG1lc3NhZ2VzIHRvIGdpdmUgbW9yZSBkZXRhaWwgb24gdGhlIHByb2dyZXNzLgorCisyMDEwLTA3LTA2IDE4OjIwOjQwICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHRlc3RzL2JlbmNobWFya3MvY2Fwc25lZ28uYzoKKwkgIGJlbmNobWFyazogY2xlYW51cCBsYXN0IGNoYW5nZSBpbiBjYXBzbmVnbyBiZW5jaG1hcmsKKwkgIEEgcGFkIG5hbWUgaXMgbm90IGEgZmFjdG9yeSBuYW1lLgorCisyMDEwLTA3LTA2IDE0OjI5OjM5ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RwYXJzZS5jOgorCSAgZG9jczogbW9yZSBkb2NzIGZvciBnc3RfcGFyc2VfbGF1bmNoIGFuZCBjbworCSAgVGVsbCBhYm91dCBsaW1pdGVkIHJldXNhYmlsaXR5IG9mIHNvbWUgcGFyc2VkIHBpcGVsaW5lcy4KKworMjAxMC0wNy0wNSAxNjozMjowMCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiB0b29scy9nc3QtaW5zcGVjdC5jOgorCSAgaW5zcGVjdDogcGFkIGluZm8gb3V0cHV0IGltcHJvdmVtZW50cworCSAgRG9uJ3QgcHJpbnQgZW1wdHkgcXVlcnkgdHlwZXMuIEFsc28gcHJpbnQgY2Fwcy12bWV0aG9kcy4KKworMjAxMC0wNy0wNiAxNjo0NzoyMiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IGxvZyBlbGVtZW50OnBhZCBuYW1lcyB3aXRoIGNhcHMKKworMjAxMC0wNi0zMCAxMTo0NjoxMSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIHV0aWxzOiBiZXR0ZXIgZXJyb3IgbG9nZ2luZyBpbiBsaW5rX3BhZHNfZmlsdGVyZWQKKworMjAxMC0wNi0yNCAxMDowMDowNCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiB0ZXN0cy9jaGVjay9saWJzL3RyYW5zZm9ybTEuYzoKKwkgIHRlc3RzOiBhZGQgY29tbWVudHMgdGVsbGluZyB0aGUgbWVhbmluZyBvZiB0aGUgYWJicmV2aWF0aW9ucworCisyMDEwLTA3LTA1IDEyOjE5OjI5ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgYmFzZXNyYzogYXZvaWQgc29tZSBjYXBzIG1hbmlwdWxhdGlvbgorCSAgQWZ0ZXIgdGhlIGludGVyc2VjdCB3ZSBoYXZlIHdyaXRhYmxlIGNhcHMuIENvcHkgdGhlIHRlbXBsYXRlIGNhcHMgc28gdGhhdCBhbHNvCisJICB0aGVyZSB3ZSBoYXZlIHdyaXRhYmxlIGNhcHMuCisKKzIwMTAtMDgtMDUgMDE6MDk6MDIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzoKKwkgIHRlc3RzOiBhZGQgYmFzaWMgdW5pdCB0ZXN0IGZvciBnc3RfcGFkX3Byb3h5X2dldGNhcHMoKQorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyNDIwMworCisyMDEwLTA4LTA1IDAxOjA2OjU3ICswMTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R1dGlscy5jOgorCSAgZ3N0dXRpbHM6IE1ha2UgZ3N0X3BhZF9wcm94eV9nZXRjYXBzKCkgcmV0dXJuIGVtcHR5IGNhcHMgaWYgaXQncyB3aGF0IHRoZSBvdGhlciBzaWRlIGhhcworCSAgZ3N0X3BhZF9wcm94eV9nZXRjYXBzKCkgd291bGQgcmV0dXJuIHRoZSBwYWQgdGVtcGxhdGUgY2FwcyBpZiB0aGUgb3RoZXIgc2lkZQorCSAgcmV0dXJuZWQgZW1wdHkgY2FwcyBvciBpZiB0aGUgaW50ZXJzZWN0aW9uIG9mIGFsbCB0aGUgY2FwcyBvbiB0aGUgb3RoZXIgc2lkZQorCSAgd2FzIGVtcHR5LgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyNDIwMworCisyMDEwLTA4LTA0IDE5OjE5OjU1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogY29uZmlndXJlLmFjOgorCSAgY29uZmlndXJlOiBDaGVjayBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgSVNPIEM4OSBvciBDOTkgYW5kIHdoaWNoIHBhcmFtZXRlcnMgYXJlIHJlcXVpcmVkCisJICBUaGlzIGZpcnN0IGNoZWNrcyB3aGF0IGlzIHJlcXVpcmVkIGZvciBJU08gQzk5IHN1cHBvcnQgYW5kIHNldHMgdGhlIHJlbGV2YW50CisJICBjb21waWxlciBwYXJhbWV0ZXJzIGFuZCBpZiBubyBDOTkgY29tcGlsZXIgaXMgZm91bmQsIGl0IGNoZWNrcyBmb3IgYQorCSAgQzg5IGNvbXBpbGVyLiBUaGlzIGVuYWJsZXMgdXMgdG8gY2hlY2sgZm9yIGFuZCB1c2UgQzg5L0M5OSBmdW5jdGlvbnMKKwkgIHRoYXQgZ2NjIGhpZGVzIGZyb20gdXMgd2l0aG91dCB0aGUgY29ycmVjdCBjb21waWxlciBwYXJhbWV0ZXJzLgorCisyMDEwLTA4LTA0IDEzOjQ3OjIzIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmM6CisJICBieXRlcmVhZGVyOiBGaXggZG9jcworCSAgRml4IHR5cG8gaW4gZG9jcyBmb3IgdGhlIHVuc2lnbmVkIHBlZWsgZnVuY3Rpb25zCisKKzIwMTAtMDctMDUgMTA6MDA6MDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3QuYzoKKwkgIGdzdDogcmVtb3ZlIFxuIGZyb20gZGVidWcgc3RhdGVtZW50cworCisyMDEwLTA4LTAzIDExOjM3OjEzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgIGRvY3M6IGZpeCBidWlsZCB3aXRoIGd0ay1kb2MgZnJvbSBnaXQKKwkgIEZvciBzb21lIHJlYXNvbiB0aGUgc3RhdGljIGlubGluZSBmdW5jdGlvbiBHU1RfQ0FUX0xFVkVMX0xPR192YWxpc3QgaXMKKwkgIG5vdyBwaWNrZWQgdXAsIHdoaWNoIHRoZW4gYnJlYWtzIHRoZSBidWlsZCBiZWNhdXNlIGl0J3Mgbm90IGRvY3VtZW50ZWQsCisJICBzbyBhZGQgaXQgdG8gdGhlIHNlY3Rpb25zIGZpbGUuCisJICBCYXNlZCBvbiBwYXRjaCBieSBWw61jdG9yIE1hbnVlbCBKw6FxdWV6IExlYWwgPHZqYXF1ZXpAaWdhbGlhLmNvbT4uCisJICBGaXhlcyAjNjI1ODYyLgorCisyMDEwLTA3LTE1IDIzOjA1OjA5ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6CisJICB0eXBlZmluZDogYWRkIGNvbW1lbnQgYW5kIG1vcmUgbG9nZ2luZworCisyMDEwLTA3LTI5IDE3OjI3OjA2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkgIHF1ZXVlMjogZG93bmxvYWQgbW9kZTsgcHJldmVudCByYW5nZSBjb3JydXB0aW9uIGR1ZSB0byByYWNlCisJICBDdXJyZW50IHJhbmdlIHdhcyBiZWluZyB1cGRhdGVkIGluIHRoZSB0aHJlYWQgcGVyZm9ybWluZyBzZWVrLCBidXQgYXMKKwkgIG5vIGxvY2tzIHdlcmUga2VwdCBmb3IgYSBzaG9ydCBzZWN0aW9uLCBkYXRhIGZsb3cgY291bGQgcmVzdW1lIGJlZm9yZQorCSAgY3VycmVudCByYW5nZSB1cGRhdGVkLCBzbyBkYXRhIGZvciB0aGUgbmV3IHJhbmdlIHdvdWxkIGJlIGFjY2VwdGVkIGFzCisJICBmcm9tIHRoZSBwcmV2aW91cyByYW5nZS4KKwkgIFJhdGhlciwgcmFuZ2Ugc2hvdWxkIGJlIHVwZGF0ZWQgaW4gc2VyaWFsaXplZCBtYW5uZXIgYmFzZWQgb24KKwkgIG5ld3NlZ21lbnQgZXZlbnQuCisKKzIwMTAtMDUtMjIgMTY6MzM6MTEgLTA1MDAgIFJvYiBDbGFyayA8cm9iQHRpLmNvbT4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBiYXNldHJhbnNmb3JtIGZpeCBmb3IgdXBzdHJlYW0gY2Fwcy1yZW5lZ290aWF0aW9uCisJICBJZiBpbml0aWFsbHkgcGFzcy10aHJvdWdoIGNhcHMgYXJlIG5lZ290aWF0ZWQgYmV0d2VlbiBhIHRyYW5zZm9ybSBlbGVtZW50J3MKKwkgIHNpbmsgYW5kIHNyYyBwYWRzLCBidXQgdGhlbiB0aGUgZG93bnN0cmVhbSBlbGVtZW50IHJldHVybnMgZGlmZmVyZW50IGNhcHMKKwkgIG9uIGEgYnVmZmVyIGZyb20gcGFkX2FsbG9jKCksIGJhc2V0cmFuc2Zvcm0gZ2V0cyBzdHVjayB3aXRoIHByb3h5X2FsbG9jPVRSVUUKKwkgIGV2ZW4gdGhvdWdoIHRoZSB1cHN0cmVhbSBwZWVyIGRvZXNuJ3QgYWNjZXB0IHRoZSBjYXBzLCBjYXVzaW5nCisJICBnc3RfcGFkX3BlZXJfYWNjZXB0X2NhcHMoKSB0byBiZSBjYWxsZWQgb24gZWFjaCBidWZmZXIgaW4gX2J1ZmZlcl9hbGxvYygpOgorCSAgaWYgKCFnc3RfY2Fwc19pc19lcXVhbCAobmV3Y2FwcywgY2FwcykpIHsKKwkgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiY2FwcyBhcmUgbmV3Iik7CisJICAvKiB3ZSBoYXZlIG5ldyBjYXBzLCBzZWUgaWYgd2UgY2FuIHByb3h5IGRvd25zdHJlYW0gKi8KKwkgID4+ICAgIGlmIChnc3RfcGFkX3BlZXJfYWNjZXB0X2NhcHMgKHBhZCwgbmV3Y2FwcykpIHsKKwkgIC8qIHBlZXIgYWNjZXB0cyB0aGUgY2FwcywgcmV0dXJuIGEgYnVmZmVyIGluIHRoaXMgZm9ybWF0ICovCisJICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgInBlZXIgYWNjZXB0ZWQgbmV3IGNhcHMiKTsKKwkgIHdoaWNoIGlzIHRha2luZyB+NDBtcy9mcmFtZS4KKwkgIFRoaXMgcGF0Y2ggZG9lcyB0d28gdGhpbmdzLiAgKDEpIGlmIHRoZSBidWZmZXIgcmV0dXJuZWQgZnJvbSBwYWRfYWxsb2MoKSBoYXMKKwkgIG5ldyBjYXBzLCB0cmlnZ2VyIHRoZSBkZWNpc2lvbiB3aGV0aGVyIHRvIHByb3h5IHRoZSBidWZmZXItYWxsb2MgdG8gYmUKKwkgIHJldmlzaXRlZCwgYW5kICgyKSBkaXNhYmxlIHByb3h5IGlmIHBlZXIgZG9lcyBub3QgYWNjZXB0IG5ldyBjYXBzLiAgKFRoZSBmaXJzdAorCSAgcGFydCBtYXkgbm90IGJlIHN0cmljdGx5IG5lZWRlZCwgYnV0IHNlZW1lZCBsaWtlIGEgZ29vZCBpZGVhLikKKwkgIE5vdGUgdGhhdCB0aGlzIGlzc3VlIHdvdWxkIG5vdCBhcmlzZSBleGNlcHQgaW4gY2FzZSBvZiBkb3duc3RyZWFtIGVsZW1lbnRzCisJICB3aG8gaGF2ZSBvbiB0aGVpciB0ZW1wbGF0ZS1jYXBzLCBzb21lIHRoYXQgd291bGQgYmUgc3VpdGFibGUgZm9yIHBhc3MtdGhyb3VnaCwKKwkgIGJ1dCBhdCBydW50aW1lIHBpY2sgbW9yZSByZXN0cmljdGl2ZSBjYXBzIChmb3IgZXgsIGFmdGVyIHF1ZXJ5aW5nIGEgZHJpdmVyIGZvcgorCSAgd2hhdCBmb3JtYXRzIGl0IGFjdHVhbGx5IHN1cHBvcnRzKS4KKworMjAxMC0wNy0yNyAxNDozMDo1MSArMDIwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RpbmZvLmM6CisJICBpbmZvOiBmaXggY29tcGlsYXRpb24gb24gd2luZG93cworCSAgRml4IG1pc21hdGNoZWQgYnJhY2tldHMgKCM2MjUyOTUpLgorCisyMDEwLTA3LTI3IDA3OjIxOjE5IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGRhdGV0aW1lLmM6CisJICBnc3RkYXRldGltZTogRml4IGxvY2FsdGltZSB1c2FnZQorCSAgbG9jYWx0aW1lIG9ubHkgdGFrZXMgb25lIHBhcmFtZXRlciBhbmQgcmV0dXJucyBhIHN0YXRpY2FsbHkKKwkgIGFsbG9jYXRlZCB0bSBzdHJ1Y3QuIFVzZSBpdCBjb3JyZWN0bHkuCisJICBGaXhlcyAjNjI1MzY4CisKKzIwMTAtMDMtMjkgMTg6MDU6NDAgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkqIHRlc3RzL2NoZWNrL2xpYnMvdHJhbnNmb3JtMS5jOgorCSAgYmFzZXRyYW5zZm9ybTogVHJ5IHN1Z2dlc3RpbmcgY2FwcyBvbiBiYWQgY2FwcyBwYWRfYWxsb2MKKwkgIFdoZW4gYmFzZXRyYW5zZm9ybSByZWNlaXZlZCBhbiB1bnN1cHBvcnRlZCBjYXBzIG9uIHBhZF9hbGxvYworCSAgaXQganVzdCByZXR1cm5lZCBub3QtbmVnb3RpYXRlZC4gVGhpcyBwYXRjaCBtYWtlcyBpdCBxdWVyeQorCSAgdGhlIGFsbG93ZWQgY2FwcyBiZXR3ZWVuIGhpcyBzaW5rcGFkIGFuZCB1cHN0cmVhbSdzIHNyY3BhZAorCSAgdG8gZmluZCBhIGNhcHMgdG8gc3VnZ2VzdC4KKwkgIFRoaXMgaGFwcGVucyB3aGVuIGRpbmFtaWNhbGx5IHN3aXRjaGluZyBwaXBlbGluZSBlbGVtZW50cworCSAgYW5kIHVwc3RyZWFtIHBhZF9hbGxvY3Mgd2l0aCB0aGUgcHJldmlvdXMgY2FwcyB0aGF0IHdhcworCSAgYmVpbmcgdXNlZC4KKwkgIEZpeGVzICM2MTQyOTYKKworMjAxMC0wNy0yNiAxODo1Mzo1NyArMDIwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RpbmZvLmM6CisJICBpbmZvOiBmbHVzaCBhZ2FpbiBhZnRlciBldmVyeSBsaW5lIG9mIGRlYnVnIG91dHB1dAorCSAgZ19wcmludGVycigpIHVzZWQgdG8gZG8gdGhpcyBmb3IgdXMuIEFsc28gdXNlIGxpYmMncyBmcHJpbnRmKCkgZnVuY3Rpb25zLAorCSAgdG8gbWFrZSBzdXJlIHRoZSBzdGRlcnIgcG9pbnRlciB3ZSB1c2UgaXMgYWN0dWFsbHkgY29tcGF0aWJsZSB3aXRoIHRoZQorCSAgbGliYyBsaW5rZWQgYWdhaW5zdCBieSBHU3RyZWFtZXIgKHdoaWNoIGFwcGFyZW50bHkgbWF5IG5vdCBhbHdheXMgYmUgdGhlCisJICBzYW1lIGFzIHdoYXQgR0xpYiBpcyBsaW5rZWQgYWdhaW5zdCBvbiB3aW5kb3dzKSwgYW5kIHdlIGRvbid0IG5lZWQgdGhlCisJICBmdW5jdGlvbmFsaXR5IGVuc3VyZWQgYnkgZ19mcHJpbnRmKCkuCisJICBGaXhlcyAjNjI1Mjk1LgorCisyMDEwLTA3LTI2IDE4OjUzOjM1ICswMjAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogcG8vYWYucG86CisJKiBwby9hei5wbzoKKwkqIHBvL2JlLnBvOgorCSogcG8vYmcucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGEucG86CisJKiBwby9kZS5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZXMucG86CisJKiBwby9ldS5wbzoKKwkqIHBvL2ZpLnBvOgorCSogcG8vZnIucG86CisJKiBwby9odS5wbzoKKwkqIHBvL2lkLnBvOgorCSogcG8vaXQucG86CisJKiBwby9qYS5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9wbC5wbzoKKwkqIHBvL3B0X0JSLnBvOgorCSogcG8vcnUucG86CisJKiBwby9ydy5wbzoKKwkqIHBvL3NrLnBvOgorCSogcG8vc2wucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJKiBwby96aF9DTi5wbzoKKwkqIHBvL3poX1RXLnBvOgorCSAgcG86IHVwZGF0ZSBmb3IgbmV3IHN0cmluZ3MKKworMjAxMC0wNi0yMyAxMTozMTozMyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOgorCSAgZ3N0dmFsdWU6IEFkZHMgdGVzdHMgZm9yIGRhdGV0aW1lCisJICBBZGRzIHRlc3RzIGZvciBkYXRldGltZSBmaWVsZHMgaW4gZ3N0dmFsdWUgdGVzdHMKKwkgIEZpeGVzICM1OTQ1MDQKKworMjAxMC0wNi0yMyAxMTozMDowMiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJKiBnc3QvZ3N0c3RydWN0dXJlLmg6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGdzdHN0cnVjdHVyZTogQWRkcyBkYXRldGltZSBnZXR0ZXIgZnVuY3Rpb24KKwkgIEFkZHMgZ3N0X3N0cnVjdHVyZV9nZXRfZGF0ZV90aW1lIGZ1bmN0aW9uCisJICBBUEk6IGdzdF9zdHJ1Y3R1cmVfZ2V0X2RhdGVfdGltZQorCSAgRml4ZXMgIzU5NDUwNAorCisyMDEwLTA2LTIxIDIzOjQyOjQ0IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3R0YWdsaXN0LmM6CisJKiBnc3QvZ3N0dGFnbGlzdC5oOgorCSAgdGFnOiBBZGRzIEdTVF9UQUdfREFURV9USU1FIHRhZworCSAgQWRkcyBhIG5ldyB0YWcgdGhhdCByZXByZXNlbnRzIGEgZGF0ZSBhbmQgdGltZSBhIG1lZGlhIHdhcworCSAgY3JlYXRlZAorCSAgQVBJOiBHU1RfVEFHX0RBVEVfVElNRQorCSAgRml4ZXMgIzU5NDUwNAorCisyMDEwLTA3LTIxIDIyOjA4OjIxIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3R0YWdsaXN0LmM6CisJKiBnc3QvZ3N0dGFnbGlzdC5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICB0YWdsaXN0OiBBZGQgZGF0ZXRpbWUgZ2V0IGZ1bmN0aW9ucworCSAgQWRkcyBfZGF0ZV90aW1lX2dldCBhbmQgX2RhdGVfdGltZV9nZXRfaW5kZXggZnVuY3Rpb25zIHRvCisJICB0YWdsaXN0LgorCSAgQVBJOiBnc3RfdGFnX2xpc3RfZ2V0X2RhdGVfdGltZQorCSAgQVBJOiBnc3RfdGFnX2xpc3RfZ2V0X2RhdGVfdGltZV9pbmRleAorCSAgRml4ZXMgIzU5NDUwNAorCisyMDEwLTA3LTIxIDIyOjA0OjIzIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3RfcHJpdmF0ZS5oOgorCSogZ3N0L2dzdGRhdGV0aW1lLmM6CisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJKiBnc3QvZ3N0dmFsdWUuYzoKKwkqIGdzdC9nc3R2YWx1ZS5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBnc3R2YWx1ZTogQWRkcyBkYXRldGltZSBmdW5jdGlvbnMKKwkgIEFkZHMgYSBkYXRldGltZSBmdW5jdGlvbnMgdG8gZ3N0dmFsdWUKKwkgIEZpeGVzICM1OTQ1MDQKKworMjAxMC0wNy0xNiAxNDowOToxMiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvTWFrZWZpbGUuYW06CisJKiBnc3QvZ3N0Lmg6CisJKiBnc3QvZ3N0ZGF0ZXRpbWUuYzoKKwkqIGdzdC9nc3RkYXRldGltZS5oOgorCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9jaGVjay9nc3QvLmdpdGlnbm9yZToKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RkYXRldGltZS5jOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBnc3RkYXRldGltZTogQWRkcyBHc3REYXRlVGltZQorCSAgQWRkcyBHc3REYXRlVGltZSB0byByZXByZXNlbnQgZGF0ZXMgKyB0aW1lICsgdGltZXpvbmUKKwkgIGluZm9ybWF0aW9uLgorCSAgVGVzdHMgaW5jbHVkZWQuCisJICBBUEk6IEdzdERhdGVUaW1lCisJICBBUEk6IGdzdF9kYXRlX3RpbWVfZ2V0X2RheQorCSAgQVBJOiBnc3RfZGF0ZV90aW1lX2dldF9tb250aAorCSAgQVBJOiBnc3RfZGF0ZV90aW1lX2dldF95ZWFyCisJICBBUEk6IGdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIKKwkgIEFQSTogZ3N0X2RhdGVfdGltZV9nZXRfbWljcm9zZWNvbmQKKwkgIEFQSTogZ3N0X2RhdGVfdGltZV9nZXRfbWludXRlCisJICBBUEk6IGdzdF9kYXRlX3RpbWVfZ2V0X3NlY29uZAorCSAgQVBJOiBnc3RfZGF0ZV90aW1lX2dldF90aW1lX3pvbmVfb2Zmc2V0CisJICBBUEk6IGdzdF9kYXRlX3RpbWVfbmV3CisJICBBUEk6IGdzdF9kYXRlX3RpbWVfbmV3X2xvY2FsX3RpbWUKKwkgIEFQSTogZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV91bml4X2Vwb2NoCisJICBBUEk6IGdzdF9kYXRlX3RpbWVfbmV3X25vd19sb2NhbF90aW1lCisJICBBUEk6IGdzdF9kYXRlX3RpbWVfbmV3X25vd191dGMKKwkgIEFQSTogZ3N0X2RhdGVfdGltZV9yZWYKKwkgIEFQSTogZ3N0X2RhdGVfdGltZV91bnJlZgorCSAgRml4ZXMgIzU5NDUwNAorCisyMDEwLTA3LTI2IDE0OjU5OjUxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdC5jOgorCSAgZ3N0OiBGaXggdXNhZ2Ugb2YgZ2xpYl9jaGVja192ZXJzaW9uKCkKKwkgIEl0IHJldHVybnMgTlVMTCBpZiB0aGUgaW5zdGFsbGVkIEdMaWIgdmVyc2lvbiBpcyBhcyBsZWFzdCBhcworCSAgbmV3IGFzIHRoZSByZXF1aXJlZCB2ZXJzaW9uIGFuZCBzb21lIGV4cGxhbmF0b3J5IHN0cmluZyBvdGhlcndpc2UuCisKKzIwMTAtMDctMjMgMjA6NDY6MTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0b29scy9nc3QtaW5zcGVjdC5jOgorCSAgdG9vbHM6IG1ha2UgZ3N0LWluc3BlY3QgcHJpbnQgdGhlIHJlbGVhc2UgZGF0ZSB0aW1lIHN0YW1wCisKKzIwMTAtMDYtMjEgMTc6MzQ6NDkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb21tb246CisJKiBjb25maWd1cmUuYWM6CisJICBjb25maWd1cmU6IHVzZSBuZXcgQUdfR1NUX1NFVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUVfV0lUSF9OQU5PIG1hY3JvCisKKzIwMTAtMDYtMjAgMDE6NTU6MDAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuaDoKKwkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5jOgorCSAgYmluYXJ5cmVnaXN0cnk6IHNhdmUgYW5kIGxvYWQgcmVsZWFzZSBkYXRlIHRpbWUgaW4gR3N0UGx1Z2luRGVzYworCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyMzA0MAorCisyMDEwLTA2LTIwIDAwOjMzOjM2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBsdWdpbi5jOgorCSogZ3N0L2dzdHBsdWdpbi5oOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBsdWdpbi5jOgorCSAgcGx1Z2luOiBhZGQgcmVsZWFzZSBkYXRldGltZSBmaWVsZCB0byBHc3RQbHVnaW5EZXNjIGFuZCBzZXQgaXQgaWYgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRSBpcyBkZWZpbmVkCisJICBUaGlzIGlzIGEgc3RyaW5nIGRlc2NyaWJpbmcgYSBkYXRlIGFuZC9vciBkYXRlL3RpbWUgaW4gYSBzaW1wbGUgc3Vic2V0IG9mCisJICB0aGUgSVNPLTg2MDEgZm9ybWF0LCBuYW1lbHkgZWl0aGVyICJZWVlZLU1NLUREIiBvciAiWVlZWS1NTS1ERFRISDpNTVoiICh3aXRoCisJICAnVCcgdGhlIGRhdGUvdGltZSBzZXBhcmF0b3IgYW5kIHRoZSAnWicgaW5kaWNhdGluZyBVVEMpLgorCSAgVGhlIG1haW4gcHVycG9zZSBvZiB0aGlzIGZpZWxkIGlzIHRvIGtlZXAgdHJhY2sgb2YgcGx1Z2luIGFuZCBlbGVtZW50IHZlcnNpb25zCisJICBvbiBhbiBhYnNvbHV0ZSB0aW1lbGluZSwgc28gaXQncyBwb3NzaWJsZSB0byBkZXRlcm1pbmUgd2hpY2ggb25lIGlzIG5ld2VyIHdoZW4KKwkgIGNvbXBhcmluZyB0d28gZGF0ZSB0aW1lIG51bWJlcnMuIFRoaXMgd2lsbCBhbGxvdyB1cyB0byBleHByZXNzICdyZXBsYWNlcyctdHlwZQorCSAgcmVsYXRpb25zaGlwcyBiZXR3ZWVlbiBwbHVnaW5zIGFuZCBlbGVtZW50IGZhY3RvcmllcyBpbiBmdXR1cmUsIGV2ZW4gYWNyb3NzCisJICBkaWZmZXJlbnQgbW9kdWxlcyBhbmQgcGx1Z2luIG1lcmdlcyBvciBzcGxpdHMgKHNvdXJjZSBtb2R1bGUgdmVyc2lvbiBudW1iZXJzCisJICBhcmVuJ3QgcGFydGljdWxhcmx5IHVzZWZ1bCBoZXJlLCBzaW5jZSB0aGV5IGNhbiBvbmx5IG1lYW5pbmdmdWxseSBiZSBjb21wYXJlZAorCSAgd2l0aGluIHRoZSBzYW1lIG1vZHVsZSkuIEl0IGFsc28gYWxsb3dzIGFwcGxpY2F0aW9ucyBhbmQgbGlicmFyaWVzIHRvIHJlbGlhYmx5CisJICBjaGVjayB0aGF0IGEgcGx1Z2luIGlzIHJlY2VudCBlbm91Z2ggd2l0aG91dCBtYWtpbmcgYXNzdW1wdGlvbnMgYWJvdXQgbW9kdWxlcworCSAgb3IgbW9kdWxlIHZlcnNpb25zLgorCSAgV2UgdXNlIGEgc3RyaW5nIGhlcmUgdG8ga2VlcCB0aGluZ3Mgc2ltcGxlIGFuZCBjbGVhciwgZXNwLiBvbiB0aGUgYnVpbGQgc3lzdGVtCisJICBzaWRlIG9mIHRoaW5ncy4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MjMwNDAKKworMjAxMC0wNy0yMCAwOToyNToyMCAtMDUwMCAgU2hpeGluIFplbmcgPHplbmcuc2hpeGluQGdtYWlsLmNvbT4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdG9iamVjdC5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHByZXNldC5jOgorCSogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6CisJICB0ZXN0czogbWFrZSAqX2dldF90eXBlKCkgaW4gdGVzdHMgdGhyZWFkIHNhZmUKKwkgIEV2ZW4gaWYgaXQgc2hvdWxkbid0IGJlIG5lZWRlZCBoZXJlLiBTZWUgIzYyMzQ5MS4KKworMjAxMC0wNi0wNCAxMToyNDo1OSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RpbmZvLmM6CisJICBpbmZvOiB3cml0ZSBkZWJ1Z2dpbmcgb3V0cHV0IHRvIGZpbGUgaWYgR1NUX0RFQlVHX0ZJTEUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0CisJICBUaGlzIGNoYW5nZXMgYmVoYXZpb3VyIHNsaWdodGx5IGluIHRoYXQgd2Ugbm8gbG9uZ2VyIG91dHB1dCB0aGluZ3MKKwkgIHZpYSBnX3ByaW50ZXJyKCksIHNvIGFueSBub24tc3RhbmRhcmQgZ2xpYiBwcmludGVyciBoYW5kbGVycyBhcmUgbm8KKwkgIGxvbmdlciBjYWxsZWQgd2hlbiBHU1RfREVCVUcgaXMgZW5hYmxlZC4gSG93ZXZlciwgdGhpcyBzZWVtcyBub3QKKwkgIHJlYWxseSBkZXNpcmFibGUgaW4gbW9zdCBjYXNlcyBhbnl3YXksIGFuZCB0aGUgR0xpYiBkb2NzIGFsc28gc2F5CisJICB0aGF0IGxpYnJhcmllcyBzaG91bGQgbm90IHVzZSBnX3ByaW50ZXJyKCkgZm9yIGxvZ2dpbmcuCisJICBPdGhlciBzdGRlcnIgb3V0cHV0IChlLmcuIHdhcm5pbmdzLCBvciBhcHBsaWNhdGlvbiBtZXNzYWdlcykgd2lsbAorCSAgb2YgY291cnNlIG5vdCBiZSBjYXB0dXJlZCBpbiB0aGUgbG9nIGZpbGUgdGhpcyB3YXkuCisJICBHU1RfREVCVUdfRklMRT0tIHdpbGwgcmVkaXJlY3QgZGVidWcgb3V0cHV0IHRvIHN0ZG91dC4KKworMjAxMC0wNy0yMCAyMDo0OToxMiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgZ3N0cGFkOiBBc3N1bWUgcGFkcyBhcmUgY29tcGF0aWJsZSBpZiB3ZSBkb24ndCBoYXZlIHRlbXBsYXRlcworCSAgVGhpcyBpcyB0aGUgc2FtZSBiZWhhdmlvdXIgYXMgaWYgd2UgaGFkIGEgcGFkIHRlbXBsYXRlIGNhcHMgb2YKKwkgIEdTVF9DQVBTX0FOWSBvbiBhbnkgb2YgdGhlIHBhZHMgKGkuZS4gdGhlIGFjdHVhbCBjaGVjayB3aWxsIGJlIGRvbmUKKwkgIGR1cmluZyBjYXBzIG5lZ290aWF0aW9uKS4KKworMjAxMC0wNy0xNyAyMToyODo0MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYmFzZXRyYW5zZm9ybTogQWxsb3cgdGhlIHN1YmNsYXNzIHRvIGFkZCBuZXcgZmllbGRzIHRvIGNhcHMgd2hlbiBnZXR0aW5nIG5ldyBjYXBzIGZyb20gZG93bnN0cmVhbQorCSAgVGhpcyB3YXMgYWxyZWFkeSBkb25lIGluIGFsbCBvdGhlciBjYXNlcyB3aGVyZSBuZXcgY2FwcyBhcmUgaGFuZGxlZAorCSAgZXhjZXB0IHVwc3RyZWFtIG5lZ290aWF0aW9uLgorCisyMDEwLTA3LTEyIDE0OjM5OjAwICswMjAwICBNaWNoYWVsIEJ1bmsgPGJ1bmtAaWF0LnVuaS1sZWlwemlnLmRlPgorCisJKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1hdXRvcGx1Z2dpbmcueG1sOgorCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtY2xvY2tzLnhtbDoKKwkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWRhdGFhY2Nlc3MueG1sOgorCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtZHBhcmFtcy54bWw6CisJKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1pbnRlcmZhY2VzLnhtbDoKKwkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLW1ldGFkYXRhLnhtbDoKKwkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLXRocmVhZHMueG1sOgorCSogZG9jcy9tYW51YWwvYmFzaWNzLWVsZW1lbnRzLnhtbDoKKwkqIGRvY3MvbWFudWFsL2Jhc2ljcy1wYWRzLnhtbDoKKwkqIGRvY3MvbWFudWFsL2ludHJvLWJhc2ljcy54bWw6CisJKiBkb2NzL21hbnVhbC9tYW51YWwueG1sOgorCSAgZG9jczogZml4IHNvbWUgdHlwb3MgYW5kIGFkZCBzb21lIG1pc3NpbmcgbGlua3MgaW4gdGhlIGFwcCBkZXYgbWFudWFsCisJICBGaXhlcyAjNjI0MTY0LgorCisyMDEwLTA3LTEyIDE0OjIyOjUwICswMjAwICBNaWNoYWVsIEJ1bmsgPGJ1bmtAaWF0LnVuaS1sZWlwemlnLmRlPgorCisJKiB0b29scy9nc3QtaW5zcGVjdC4xLmluOgorCSAgZG9jczogZml4IHR5cG8gb24gZ3N0LWluc3BlY3QgbWFuIHBhZ2UKKwkgIFNlZSAjNjI0MTY0LgorCisyMDEwLTA3LTAzIDE1OjA4OjEyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKKwkgIGdzdGNoZWNrOiBmaXggc29tZSBzaWxseSBsaXN0IGl0ZXJhdGlvbiBjb2RlCisJICBnX2xpc3RfbGVuZ3RoKCkgaXMgbm90IHRoZSBiZXN0IHdheSB0byBjaGVjayBpZiBhIGxpc3QgaXMgZW1wdHkgb3Igbm90LgorCisyMDEwLTA3LTE2IDE3OjUzOjM4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dsaWItY29tcGF0LXByaXZhdGUuaDoKKwkqIGdzdC9nc3RwbHVnaW4uYzoKKwkqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6CisJICByZWdpc3RyeTogdXNlIEdTdGF0QnVmIHVuY29uZGl0aW9uYWxseSBhbmQgYWRkIHR5cGVkZWYgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CisJICBObyBuZWVkIHRvIGNsdXR0ZXIgdGhlIGNvZGUgd2l0aCAjaWYgI2Vsc2UgI2VuZGlmLgorCSAgU2VlICM2MjM4NzUuCisKKzIwMTAtMDctMTYgMTc6MzM6MzggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJKiBnc3QvZ3N0c3RydWN0dXJlLmg6CisJICBzdHJ1Y3R1cmU6IFVzZSBhIGNvbnN0IEdzdFN0cnVjdHVyZSAqIGFzIHBhcmFtZXRlciBmb3Igc29tZSBtb3JlIGdzdF9zdHJ1Y3R1cmVfZ2V0IHZhcmlhbnRzCisKKzIwMTAtMDctMTQgMTk6NDc6NDMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiB0b29scy9nc3QtbGF1bmNoLmM6CisJICBSZXZlcnQgIi1sYXVuY2g6IGRpc2FibGUgQ0xPQ0tfTE9TVCBtZXNzYWdlIGhhbmRsaW5nIgorCSAgVGhpcyByZXZlcnRzIGNvbW1pdCAxZjhlYmE2MTFhNjNmNDU3NjZjMzhjNjQwMjg4ZTQyYjI3YjEwYmQ0LgorCSAgVGhpcyBzaG91bGQgYmUgZml4ZWQgbm93IChhbmQgaWYgbm90IHNob3VsZCBiZSBmaXhlZCkgYW5kIHRoZQorCSAgY2xvY2stbG9zdCBoYW5kbGluZyBpcyBub3cgbmVlZGVkIGZvciBwbGF5YmluMiBnYXBsZXNzIHBsYXliYWNrLgorCSAgU2VlIGJ1ZyAjNTc5MTI3LgorCisyMDEwLTA3LTA4IDIxOjA0OjU0ICswMjAwICBEYXZpZCBIb3l0IDxkaG95dEBsbG5sLmdvdj4KKworCSogZ3N0L2dzdHBsdWdpbi5jOgorCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6CisJKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKKwkgIHJlZ2lzdHJ5YmluYXJ5OiBGaXggY29tcGF0aWJpbGl0eSB3aXRoIEdMaWIgMi4yNSB3aGVuIHVzaW5nIE1TVkMKKwkgIE5ld2VyIEdMaWIgdXNlcyBhIG5ldyB0eXBlIGZvciBnX3N0YXQoKSBhbmQgZnJpZW5kcyB0byBpbXByb3ZlCisJICBXaW5kb3dzIGNvbXBhdGliaWxpdHkuIE9uIFBPU0lYIHRoaXMgaXMgYSB0eXBlZGVmIHRvIHN0cnVjdCBzdGF0LgorCSAgRml4ZXMgYnVnICM2MjM4NzUuCisKKzIwMTAtMDctMDggMDc6NDg6MDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGlwZWxpbmUuYzoKKwkgIHBpcGVsaW5lOiBJZiB0aGUgY3VycmVudGx5IHVzZWQgY2xvY2sgZ2V0cyBsb3N0IHVwZGF0ZSBpdCB0aGUgbmV4dCB0aW1lIHdoZW4gZ29pbmcgZnJvbSBQQVVTRUQgdG8gcGxheWluZworCSAgRml4ZXMgYnVnICM2MjM4MDYuCisKKzIwMTAtMDctMDUgMTk6MzM6MDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIGJhc2VzcmM6IFJldHVybiB2YWx1ZXMgaW4gc3RyZWFtIHRpbWUgZm9yIHRoZSBQT1NJVElPTiBxdWVyeQorCSAgRml4ZXMgYnVnICM2MjM2MjIuCisKKzIwMTAtMDctMDUgMTg6NTQ6NDUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBiYXNlc2luazogSW1wbGVtZW50IEdzdEVsZW1lbnQ6OmdldF9xdWVyeV90eXBlcygpCisKKzIwMTAtMDctMDYgMTA6MTM6MDQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBiYXNlc2luazogT25seSBhbnN3ZXIgdGhlIFNFR01FTlQgcXVlcnkgaW4gcHVsbCBtb2RlCisJICBPdGhlcndpc2UgdGhlIGVsZW1lbnQgaGFuZGxpbmcgdGhlIHNlZWtzIHNob3VsZCBhbnN3ZXIgdGhpcyBxdWVyeS4KKwkgIEZpeGVzIGJ1ZyAjNjIzNjIyLgorCisyMDEwLTA3LTA1IDEwOjM2OjA1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBiYXNldHJhbnNmb3JtOiBJbXBsZW1lbnQgUE9TSVRJT04gcXVlcnkKKwkgIEZpeGVzIGJ1ZyAjNjIzNTQxLgorCisyMDEwLTA2LTI1IDE2OjMxOjA2ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBHc3RQYWQ6IERvIG5vdCBjYWxsIGdzdF9wYWRfYWNjZXB0X2NhcHMoKSB3aGVuIGNhcHMgY2hhbmdlCisJICBJbnN0ZWFkIGp1c3QgY2hlY2sgdGhhdCB0aGUgY2FwcyBpbnRlcnNlY3Qgd2l0aCB0aGUgcGFkIHRlbXBsYXRlLgorCSAgVGhlIGVsZW1lbnRzIHNob3VsZCBwcm9wZXJseSBhY2NlcHQvcmVmdXNlIHRoZSBjYXBzIGluIHNldGNhcHMoKS4KKwkgIFNoYXZlcyBvZmYgY2FsbGluZyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBhY2NlcHRjYXBzIHdoaWNoIGRvZXMKKwkgIGFuIGV4cGVuc2l2ZSBnc3RfcGFkX2dldF9jYXBzKCkgKHNvIGlmIHlvdSBoYXZlIDUwIG9mIHRob3NlIGVsZW1lbnRzIGluCisJICBhIHJvdywgeW91J2QgYmUgZG9pbmcgZmFjdG9yaWFsKDUwKSBnc3RfcGFkX2dldF9jYXBzLi4uKS4KKwkgIERvZXMgbm90IGJyZWFrIGFueSBtb2R1bGUgdW5pdCB0ZXN0IGFuZCBtb3N0IGFwcHMgd29yayBmaW5lLgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyMjc0MAorCisyMDEwLTA3LTA4IDE2OjI0OjIxICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIHV0aWxzOiBBZGQgbW9yZSBkZXRhaWxzIGFib3V0IGdzdF9lbGVtZW50X2dldF9jb21wYXRpYmxlX3BhZAorCisyMDEwLTA3LTE2IDExOjE2OjE1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogY29uZmlndXJlLmFjOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6CisJICBCYWNrIHRvIGRldmVsb3BtZW50LgorCis9PT0gcmVsZWFzZSAwLjEwLjMwID09PQorCisyMDEwLTA3LTE0IDIzOjU5OjQzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogQ2hhbmdlTG9nOgorCSogTkVXUzoKKwkqIFJFTEVBU0U6CisJKiBjb25maWd1cmUuYWM6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgorCSogZ3N0cmVhbWVyLmRvYXA6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgorCSAgUmVsZWFzZSAwLjEwLjMwCisKKzIwMTAtMDctMTQgMTc6NTg6MTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwby9kZS5wbzoKKwkqIHBvL2lkLnBvOgorCSogcG8vemhfQ04ucG86CisJICBwbzogdXBkYXRlIHRyYW5zbGF0aW9ucworCisyMDEwLTA3LTE1IDEyOjAxOjI0ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RwYWQuaDoKKwkgIHBhZDogcmVtb3ZlIGNvbW1hIGF0IHRoZSBlbmQgb2YgdGhlIGxhc3QgZW51bSB2YWx1ZQorCSAgRml4ZXMgdGhlIGJ1aWxkIGZvciBjKysuCisKKzIwMTAtMDctMTEgMTk6MDA6NTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFnLmM6CisJICBjaGVja3M6IGFkZCB1bml0IHRlc3QgZm9yIHJlY2VudCB0YWdsaXN0IG1lcmdlX3N0cmluZ3Nfd2l0aF9jb21tYSBmaXgKKwkgIFNlZSAjNjI0MTEzLgorCisyMDEwLTA3LTExIDE4OjU5OjUzICswMTAwICBFZHVhcmRvIERvYmF5IDxlZHVkb2JheUBnbWFpbC5jb20+CisKKwkqIGdzdC9nc3R0YWdsaXN0LmM6CisJICB0YWdsaXN0OiBmaXggbWVyZ2Vfc3RyaW5nc193aXRoX2NvbW1hKCkgZm9yIG1vcmUgdGhhbiB0d28gc3RyaW5ncworCSAgRml4ZXMgIzYyNDExMy4KKworMjAxMC0wNy0wOCAxMzo0Njo1NiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL2xpYnMvLmdpdGlnbm9yZToKKwkgIC5naXRpZ25vcmU6IGlnbm9yZSBuZXcgYmFzZXNpbmsgdW5pdCB0ZXN0IGJpbmFyeQorCisyMDEwLTA3LTA4IDEzOjQzOjIyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogdG9vbHMvZ3N0LWxhdW5jaC4xLmluOgorCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgorCSAgdG9vbHM6IHJlbW92ZSAtcCBzaG9ydGhhbmQgZm9yIC0tbm8tc2lndXNyLWhhbmRsZXIKKwkgIEl0J3Mgbm90IHJlYWxseSBuZWVkZWQsIGFuZCBkb2Vzbid0IG1hcCBhbnkgbG9uZ2VyIGFmdGVyIHRoZSBsb25nIG9wdGlvbgorCSAgaGFzIGJlZW4gcmVuYW1lZC4KKworMjAxMC0wNy0wNiAxNTo0Nzo0MCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6CisJKiB0ZXN0cy9jaGVjay9nc3QvLmdpdGlnbm9yZToKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6CisJICAwLjEwLjI5LjQgcHJlLXJlbGVhc2UKKwkgIEFsc28gYnVtcCBsaWJ0b29sIHZlcnNpb25zIG5vdyAod2hpY2ggSSBtZWFudCB0byBkbyBmb3IgdGhlIGZpcnN0CisJICBwcmUtcmVsZWFzZSBidXQgZm9yZ290KS4KKworMjAxMC0wNy0wNiAyMzo0NDoyNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBvL0xJTkdVQVM6CisJKiBwby9lcy5wbzoKKwkqIHBvL2ZpLnBvOgorCSogcG8vZnIucG86CisJKiBwby9pZC5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vbmwucG86CisJKiBwby9wbC5wbzoKKwkqIHBvL3B0X0JSLnBvOgorCSogcG8vc2wucG86CisJKiBwby9zdi5wbzoKKwkqIHBvL3poX0NOLnBvOgorCSAgcG86IHVwZGF0ZSB0cmFuc2xhdGlvbnMKKworMjAxMC0wNy0wNiAxNjoyMTowNSArMDIwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZEBnbWFpbC5jb20+CisKKwkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJKiB0ZXN0cy9jaGVjay9saWJzL2Jhc2VzaW5rLmM6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6CisJICBiYXNlc2luazogYWRkIGFjY2Vzc29ycyBmb3IgdGhlIGVuYWJsZS1sYXN0LWJ1ZmZlciBwcm9wZXJ0eS4KKwkgIEFQSTogZ3N0X2Jhc2Vfc2lua19zZXRfbGFzdF9idWZmZXJfZW5hYmxlZAorCSAgQVBJOiBnc3RfYmFzZV9zaW5rX2lzX2xhc3RfYnVmZmVyX2VuYWJsZWQKKworMjAxMC0wNy0wNiAxMjoxODo0NSArMDIwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZEBnbWFpbC5jb20+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSogdGVzdHMvY2hlY2svbGlicy9iYXNlc2luay5jOgorCSAgYmFzZXNpbms6IGFkZCBuZXcgZW5hYmxlLWxhc3QtYnVmZmVyIHByb3BlcnR5LgorCSAgQWRkIGEgbmV3IGVuYWJsZS1sYXN0LWJ1ZmZlciBwcm9wZXJ0eS4gV2hlbiBmYWxzZSwgaXQgZGlzYWJsZXMgc3RvcmluZyB0aGUgbGFzdAorCSAgcmVjZWl2ZWQgYnVmZmVyIGluIGJhc2VzaW5rOjpsYXN0LWJ1ZmZlci4gVGhpcyBjYW4gYmUgdXNlZnVsIGluIGNhc2VzIHdoZXJlCisJICBidWZmZXJzIG5lZWQgdG8gYmUgcmVsZWFzZWQgYXNhcC4KKwkgIEFQSTogR3N0QmFzZVNpbms6OmVuYWJsZS1sYXN0LWJ1ZmZlcgorCisyMDEwLTA3LTA2IDEwOjQ4OjI3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRhZ3NldHRlci5jOgorCSAgY2hlY2tzOiByZXdyaXRlIGdzdHRhZ3NldHRlciB0ZXN0IHRvIHVzZSBmZXdlciBnX3VzbGVlcCgpCisJICBTb21ldGhpbmcgYWJvdXQgdGhhdCBzZWVtcyB0byBpbnRlcmFjdCBiYWRseSB3aXRoIHNvbWUgc2NoZWR1bGVycywKKwkgIHNvIGRvIHRoaW5ncyBkaWZmZXJlbnRseS4KKwkgIEZpeGVzICM2MjM0NjkuCisKKzIwMTAtMDctMDYgMTA6MTk6MDkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgZG9jczogYWRkIG5ldyBhZGQgZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmNfZnVsbCgpIHRvIGRvY3MKKwkgIEFQSTogYWRkIGdzdF9jbG9ja19pZF93YWl0X2FzeW5jX2Z1bGwKKwkgIFNlZSAjNjIzNTg5LgorCisyMDEwLTA3LTA2IDEwOjI4OjE0ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0dmFsdWUuYzoKKwkgIGdzdHZhbHVlOiBJbXByb3ZlIGdzdF92YWx1ZV97c2V0fGdldH1fY2FwcyBkb2NzCisKKzIwMTAtMDctMDYgMTA6MzU6MDkgKzAyMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRlY2luYUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgd2luMzI6IGV4cG9ydCBnc3RfY2xvY2tfaWRfd2FpdF9hc3luY19mdWxsCisKKzIwMTAtMDctMDYgMTA6MzE6MjUgKzAyMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRlY2luYUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfaHBwYS5oOgorCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9pMzg2Lmg6CisJKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3BwYzMyLmg6CisJKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3BwYzY0Lmg6CisJKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3NwYXJjLmg6CisJKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3g4Nl82NC5oOgorCSAgdGVzdHM6IHJlbW92ZSBBQkkgY2hlY2tzIGZvciBHc3RDbG9ja0VudHJ5LgorCisyMDEwLTA3LTA1IDE4OjQ1OjU1ICswMjAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyby5kZWNpbmFAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Y2xvY2suaDoKKwkgIGNsb2NrOiBkb2N1bWVudCB0aGF0IEdzdENsb2NrRW50cnkgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW5hIG9wYXF1ZSBzdHJ1Y3R1cmUuCisKKzIwMTAtMDctMDUgMTM6MTA6MDkgKzAyMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRlY2luYUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RjbG9jay5jOgorCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2xvY2suYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzeXN0ZW1jbG9jay5jOgorCSAgY2xvY2s6IHVzZSB0aGUgbmV3IGdzdF9jbG9ja19pZF93YWl0X2FzeW5jX2Z1bGwuCisJICBVc2UgdGhlIG5ldyBnc3RfY2xvY2tfaWRfd2FpdF9hc3luY19mdWxsIGluIGdzdF9jbG9ja19zZXRfbWFzdGVyLgorCSAgQWxzbyBhZGQgc29tZSB0ZXN0cy4KKworMjAxMC0wNy0wNSAxMzowMTo1MyArMDIwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZGVjaW5hQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGNsb2NrLmM6CisJICBjbG9jazogZml4IHJlZmNvdW50aW5nIGJ1ZyBpbiBnc3RfY2xvY2tfc2V0X21hc3Rlci4KKwkgIE1ha2Ugc3VyZSBjbG9jay0+Y2xvY2tpZCBpcyB1bnJlZmZlZCBiZWZvcmUgY2xvY2stPm1hc3Rlci4KKwkgIGdzdF9jbG9ja19pZF91bnNjaGVkdWxlIChjbG9jay0+Y2xvY2tpZCkgdHJpZXMgdG8gYWNjZXNzIGNsb2NrLT5tYXN0ZXIuIElmCisJICBjbG9jay0+bWFzdGVyIGlzIHVucmVmZmVkIGJlZm9yZSBhbmQgaXQncyBkZWFsbG9jYXRlZCwgX3Vuc2NoZWR1bGUgY291bGQgYWNjZXNzCisJICBmcmVlJ2QgbWVtb3J5LgorCisyMDEwLTA3LTA1IDEyOjU2OjQwICswMjAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyby5kZWNpbmFAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Y2xvY2suYzoKKwkqIGdzdC9nc3RjbG9jay5oOgorCSAgY2xvY2s6IGFkZCBnc3RfY2xvY2tfaWRfd2FpdF9hc3luY19mdWxsLgorCSAgQWRkIGdzdF9jbG9ja19pZF93YWl0X2FzeW5jX2Z1bGwuIEl0J3MgdGhlIHNhbWUgYXMgZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMgYnV0CisJICBhbGxvd3MgcGFzc2luZyBhIEdEZXN0cm95Tm90aWZ5IHRvIGRlc3Ryb3kgdXNlcl9kYXRhLgorCisyMDEwLTA3LTA1IDE3OjUwOjMzICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RwYWQuaDoKKwkqIGdzdC9nc3R1dGlscy5jOgorCSAgZG9jczogaW1wcm92ZSB0aGUgYXBpIGRvY3MgZm9yIG5ldyBHc3RQYWRMaW5rQ2hlY2tzIGFuZCBpdHMgdXNlCisKKzIwMTAtMDctMDUgMTI6MjE6NTEgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogdGVzdHMvUkVBRE1FOgorCSAgUkVBRE1FOiB1cGRhdGUgYWZ0ZXIgcmVtb3ZhbCBvZiAib2xkIiBkaXIuCisJICBSZW1vdmUgIm9sZCIgYW5kIGFkZCBhIGxpbmUgYWJvdXQgImV4YW1wbGVzIi4KKworMjAxMC0wNy0wNCAxNzozNDozMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL29sZC9leGFtcGxlcy9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL29sZC9leGFtcGxlcy9UT0RPOgorCSogdGVzdHMvb2xkL2V4YW1wbGVzL2FwcHJlYWRlci8uZ2l0aWdub3JlOgorCSogdGVzdHMvb2xkL2V4YW1wbGVzL2FwcHJlYWRlci9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL29sZC9leGFtcGxlcy9hcHByZWFkZXIvYXBwcmVhZGVyLmM6CisJKiB0ZXN0cy9vbGQvZXhhbXBsZXMvY3V0dGVyLy5naXRpZ25vcmU6CisJKiB0ZXN0cy9vbGQvZXhhbXBsZXMvY3V0dGVyL01ha2VmaWxlLmFtOgorCSogdGVzdHMvb2xkL2V4YW1wbGVzL2N1dHRlci9jdXR0ZXIuYzoKKwkqIHRlc3RzL29sZC9leGFtcGxlcy9jdXR0ZXIvY3V0dGVyLmg6CisJKiB0ZXN0cy9vbGQvZXhhbXBsZXMvZXZlbnRzL01ha2VmaWxlLmFtOgorCSogdGVzdHMvb2xkL2V4YW1wbGVzL2V2ZW50cy9zZWVrLmM6CisJKiB0ZXN0cy9vbGQvZXhhbXBsZXMvaGVsbG93b3JsZDIvLmdpdGlnbm9yZToKKwkqIHRlc3RzL29sZC9leGFtcGxlcy9oZWxsb3dvcmxkMi9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL29sZC9leGFtcGxlcy9oZWxsb3dvcmxkMi9oZWxsb3dvcmxkMi5jOgorCSogdGVzdHMvb2xkL2V4YW1wbGVzL21hbnVhbC8uZ2l0aWdub3JlOgorCSogdGVzdHMvb2xkL2V4YW1wbGVzL21hbnVhbC9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL29sZC9leGFtcGxlcy9tYW51YWwvZXh0cmFjdC5wbDoKKwkqIHRlc3RzL29sZC9leGFtcGxlcy9taXhlci8uZ2l0aWdub3JlOgorCSogdGVzdHMvb2xkL2V4YW1wbGVzL21peGVyL01ha2VmaWxlLmFtOgorCSogdGVzdHMvb2xkL2V4YW1wbGVzL21peGVyL21peGVyLmM6CisJKiB0ZXN0cy9vbGQvZXhhbXBsZXMvbWl4ZXIvbWl4ZXIuaDoKKwkqIHRlc3RzL29sZC9leGFtcGxlcy9waW5ncG9uZy8uZ2l0aWdub3JlOgorCSogdGVzdHMvb2xkL2V4YW1wbGVzL3Bpbmdwb25nL01ha2VmaWxlLmFtOgorCSogdGVzdHMvb2xkL2V4YW1wbGVzL3Bpbmdwb25nL3Bpbmdwb25nLmM6CisJKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcGx1Z2lucy8uZ2l0aWdub3JlOgorCSogdGVzdHMvb2xkL2V4YW1wbGVzL3BsdWdpbnMvTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcGx1Z2lucy9leGFtcGxlLmM6CisJKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcGx1Z2lucy9leGFtcGxlLmg6CisJKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcHdnLy5naXRpZ25vcmU6CisJKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcHdnL01ha2VmaWxlLmFtOgorCSogdGVzdHMvb2xkL2V4YW1wbGVzL3B3Zy9leHRyYWN0LnBsOgorCSogdGVzdHMvb2xkL2V4YW1wbGVzL3F1ZXVlMi8uZ2l0aWdub3JlOgorCSogdGVzdHMvb2xkL2V4YW1wbGVzL3F1ZXVlMi9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL29sZC9leGFtcGxlcy9xdWV1ZTIvcXVldWUyLmM6CisJKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcXVldWUzLy5naXRpZ25vcmU6CisJKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcXVldWUzL01ha2VmaWxlLmFtOgorCSogdGVzdHMvb2xkL2V4YW1wbGVzL3F1ZXVlMy9xdWV1ZTMuYzoKKwkqIHRlc3RzL29sZC9leGFtcGxlcy9xdWV1ZTQvLmdpdGlnbm9yZToKKwkqIHRlc3RzL29sZC9leGFtcGxlcy9xdWV1ZTQvTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcXVldWU0L3F1ZXVlNC5jOgorCSogdGVzdHMvb2xkL2V4YW1wbGVzL3JldGFnLy5naXRpZ25vcmU6CisJKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcmV0YWcvTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcmV0YWcvcmV0YWcuYzoKKwkqIHRlc3RzL29sZC9leGFtcGxlcy9yZXRhZy90cmFuc2NvZGUuYzoKKwkqIHRlc3RzL29sZC9leGFtcGxlcy90aHJlYWQvLmdpdGlnbm9yZToKKwkqIHRlc3RzL29sZC9leGFtcGxlcy90aHJlYWQvTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9vbGQvZXhhbXBsZXMvdGhyZWFkL3RocmVhZC5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS8uZ2l0aWdub3JlOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvUnVsZXM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NhcHMvLmdpdGlnbm9yZToKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2Fwcy9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2Fwcy9hcHBfZml4YXRlLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NhcHMvYXVkaW9zY2FsZS5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jYXBzL2NhcHMuYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2Fwcy9jYXBzLmg6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NhcHMvY2Fwc19zdHJpbmdzOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jYXBzL2NvbXBhdGliaWxpdHkuYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2Fwcy9kZXNlcmlhbGl6ZS5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jYXBzL2VudW1jYXBzLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NhcHMvZXJhdG9zdGhlbmVzLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NhcHMvZmlsdGVyY2Fwcy5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jYXBzL2ZpeGVkLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NhcHMvZnJhY3Rpb24tY29udmVydC5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jYXBzL2ZyYWN0aW9uLW11bHRpcGx5LWFuZC16ZXJvLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NhcHMvaW50ZXJzZWN0Mi5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jYXBzL2ludGVyc2VjdGlvbi5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jYXBzL25vcm1hbGlzYXRpb24uYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2Fwcy9yYW5kb20uYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2Fwcy9yZW5lZ290aWF0ZS5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jYXBzL3NldHMuYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2Fwcy9zaW1wbGlmeS5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jYXBzL3N0cmluZy1jb252ZXJzaW9ucy5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jYXBzL3N0cnVjdHVyZS5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jYXBzL3N1YnRyYWN0LmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NhcHMvdW5pb24uYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvZGVidWcvLmdpdGlnbm9yZToKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvZGVidWcvTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2RlYnVnL2NhdGVnb3J5LmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2RlYnVnL2NvbW1hbmRsaW5lLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2RlYnVnL2dsb2JhbC5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9kZWJ1Zy9vdXRwdXQuYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvZGVidWcvcHJpbnRmX2V4dGVuc2lvbi5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9kbG9wZW4vLmdpdGlnbm9yZToKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvZGxvcGVuL01ha2VmaWxlLmFtOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9kbG9wZW4vZGxvcGVuX2dzdC5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9kbG9wZW4vbG9hZGdzdC5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9lbGVtZW50cy8uZ2l0aWdub3JlOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9lbGVtZW50cy9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvZWxlbWVudHMvZ3N0LWluc3BlY3QtY2hlY2suaW46CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2VsZW1lbnRzL3N0cnVjdF9pMzg2Lmg6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2VsZW1lbnRzL3N0cnVjdF9zaXplLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2luZGV4ZXJzLy5naXRpZ25vcmU6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2luZGV4ZXJzL01ha2VmaWxlLmFtOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9pbmRleGVycy9jYWNoZTEuYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvaW5kZXhlcnMvaW5kZXhkdW1wLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3BhcnNlLy5naXRpZ25vcmU6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3BhcnNlL01ha2VmaWxlLmFtOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9wYXJzZS9wYXJzZTEuYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvcGFyc2UvcGFyc2UyLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3BsdWdpbi8uZ2l0aWdub3JlOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9wbHVnaW4vTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3BsdWdpbi9SRUFETUU6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3BsdWdpbi9keW5hbWljLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3BsdWdpbi9saW5rZWQuYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvcGx1Z2luL2xvYWRpbmcuYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvcGx1Z2luL3JlZ2lzdHJ5LmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3BsdWdpbi9zdGF0aWMuYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvcGx1Z2luL3N0YXRpYzIuYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvcGx1Z2luL3Rlc3RwbHVnaW4uYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvcGx1Z2luL3Rlc3RwbHVnaW4yLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3BsdWdpbi90ZXN0cGx1Z2luMl9zLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3BsdWdpbi90ZXN0cGx1Z2luX3MuYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvcmVmY291bnRpbmcvLmdpdGlnbm9yZToKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvcmVmY291bnRpbmcvTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3JlZmNvdW50aW5nL2Jpbi5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9yZWZjb3VudGluZy9lbGVtZW50LmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3JlZmNvdW50aW5nL2VsZW1lbnRfcGFkLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3JlZmNvdW50aW5nL21haW5sb29wLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3JlZmNvdW50aW5nL21lbS5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9yZWZjb3VudGluZy9tZW0uaDoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvcmVmY291bnRpbmcvb2JqZWN0LmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3JlZmNvdW50aW5nL3BhZC5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9yZWZjb3VudGluZy9zY2hlZC5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9yZWZjb3VudGluZy90aHJlYWQuYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvc3RhdGVzLy5naXRpZ25vcmU6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3N0YXRlcy9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvc3RhdGVzL2Jpbi5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9zdGF0ZXMvbG9ja2VkLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3N0YXRlcy9wYXJlbnQuYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvdGhyZWFkcy8uZ2l0aWdub3JlOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS90aHJlYWRzLzE1OTU2Ni5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS90aHJlYWRzLzE1OTg1Mi5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS90aHJlYWRzL01ha2VmaWxlLmFtOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS90aHJlYWRzL3F1ZXVlLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3RocmVhZHMvc2lnbmFscy5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS90aHJlYWRzL3N0YXRpY3JlYy5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS90aHJlYWRzL3RocmVhZC5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS90aHJlYWRzL3RocmVhZGIuYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvdGhyZWFkcy90aHJlYWRjLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3RocmVhZHMvdGhyZWFkZC5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS90aHJlYWRzL3RocmVhZGUuYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvdGhyZWFkcy90aHJlYWRmLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3RocmVhZHMvdGhyZWFkZy5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS90aHJlYWRzL3RocmVhZGguYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvdGhyZWFkcy90aHJlYWRpLmM6CisJICBSZW1vdmUgb2xkIDAuOCB0ZXN0cyBhbmQgZXhhbXBsZXMgZnJvbSBnaXQgdHJlZQorCSAgRG9lc24ndCByZWFsbHkgbG9vayBsaWtlIGFueXRoaW5nJ3Mgd29ydGgga2VlcGluZy4KKworMjAxMC0wNy0wMyAxNjozOTo0MCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RvYmplY3QuYzoKKwkgIGNoZWNrOiBza2lwIHNpbGx5IHRlc3QgdGhhdCBzZWdmYXVsdHMgd2hlbiBpbiBhIENLX0ZPUks9bm8gZW52aXJvbm1lbnQKKwkgIFNlZSAjNjIzNDY5LgorCisyMDEwLTA3LTAzIDE1OjEzOjE0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmFrZXNyYy5jOgorCSAgY2hlY2tzOiBtYWtlIGZha2VzcmMgY2hlY2sgd29yayBpbiBhIENLX0ZPUks9bm8gZW52aXJvbm1lbnQKKwkgIFJlc2V0IGhhdmVfZW9zIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCB0ZXN0LgorCSAgU2VlICM2MjM0NjkuCisKKzIwMTAtMDctMDMgMTQ6MDk6MzYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0LmM6CisJICBjaGVja3M6IHJ1biB0ZXN0cyBjYWxsaW5nIGdzdF9kZWluaXQoKSBsYXN0IHNvIHRoaW5ncyB3b3JrIHdpdGggQ0tfRk9SSz1ubworCSAgQmVjYXVzZSBnc3RfaW5pdCgpIHdpbGwgZmFpbCBvbmNlIGdzdF9kZWluaXQoKSBoYXMgYmVlbiBjYWxsZWQuCisJICBTZWUgIzYyMzQ2OS4KKworMjAxMC0wNy0wMyAxNDowNDozMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RlbGVtZW50LmM6CisJICBjaGVja3M6IGRvbid0IGFzc3VtZSBlbGVtZW50IGZhY3RvcnkgaXMgbm90IGxvYWRlZCB5ZXQKKwkgIEl0IG1heSBhbHJlYWR5IGJlIGxvYWRlZCBpZiBjaGVjayBpcyBiZWluZyBydW4gd2l0aCBDS19GT1JLPW5vLgorCSAgU2VlICM2MjM0NjkuCisKKzIwMTAtMDctMDEgMTk6NTg6MDkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1hdXRvcGx1Z2dpbmcueG1sOgorCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtZHBhcmFtcy54bWw6CisJKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1pbnRlcmZhY2VzLnhtbDoKKwkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLXBvc2l0aW9uLnhtbDoKKwkqIGRvY3MvbWFudWFsL2FwcGVuZGl4LWNoZWNrbGlzdC54bWw6CisJKiBkb2NzL21hbnVhbC9iYXNpY3MtaGVsbG93b3JsZC54bWw6CisJICBkb2NzOiBmaXggYSBjb3VwbGUgb2YgdHlwb3MgaW4gdGhlIG1hbnVhbAorCSAgU3BvdHRlZCBieSBBbGV4YW5kZXIgU2FwcnlraW4uCisJICBGaXhlcyAjNjIyMzc5LgorCisyMDEwLTA3LTAxIDE3OjU2OjMzICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYzoKKwkgIGdzdGNhcHM6IE1ha2Ugc3VyZSBfbm9ybWFsaXplKCkgaXMgYXBwbGllZCBvbiBhbGwgc3RydWN0dXJlcy4KKwkgIFdlIG5lZWQgdG8gdXNlIGdzdF9jYXBzX2dldF9zaXplKCkgaW4gdGhlIGxvb3AgY291bnRlciBzaW5jZSBzb21lCisJICBzdHJ1Y3R1cmVzIGNvdWxkIGJlIGFkZGVkIHdoaWxlIGl0ZXJhdGluZy4KKwkgIEZpeGVzICM2MjMzMDEKKworMjAxMC0wNi0zMCAxMzoxNjozNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvbWFudWFsL2hpZ2hsZXZlbC14bWwueG1sOgorCSAgZG9jczogdXBkYXRlICdYTUwgaW4gR1N0cmVhbWVyJyBzZWN0aW9uIGluIGFwcGxpY2F0aW9uIGRldmVsb3BlcidzIG1hbnVhbAorCisyMDEwLTA2LTI5IDE4OjQ4OjA1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogY29uZmlndXJlLmFjOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6CisJICAwLjEwLjI5LjMgcHJlLXJlbGVhc2UKKworMjAxMC0wNi0yNSAxOTowMzoyNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6CisJICBtdWx0aXF1ZXVlOiBpbXBsZW1lbnQgYWNjZXB0Y2FwcyBmdW5jdGlvbgorCSAgT3VyIGFjY2VwdGNhcHMgZnVuY3Rpb24gY2FuIHNpbXBseSBmb3J3YXJkIHRoZSBxdWVyeS4KKworMjAxMC0wNi0yOCAxNToyODo1OSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGF1dG9nZW4uc2g6CisJKiBjb25maWd1cmUuYWM6CisJICBCdW1wIGF1dG9tYWtlIHJlcXVpcmVtZW50IHRvIDEuMTAKKwkgIEZvciBtYWludGFpbmFiaWxpdHkgcmVhc29ucyBhbmQgJChidWlsZGRpcikuCisJICBGaXhlcyAjNjIyOTQ0LgorCisyMDEwLTA2LTI4IDEzOjU2OjAwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogdG9vbHMvZ3N0LWxhdW5jaC4xLmluOgorCSAgdG9vbHM6IG1lbnRpb24gLS1lb3Mtb24tc2h1dGRvd24gb24gZ3N0LWxhdW5jaCBtYW4gcGFnZQorCisyMDEwLTA2LTI4IDEwOjIwOjM5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHV0aWxzLmg6CisJICB1dGlsczogRG9uJ3QgdXNlIEdfR05VQ19DT05TVCBmb3IgdGhlIHVpbnQ2NCBzY2FsaW5nIGZ1bmN0aW9ucworCSAgVGhleSBhcmUgYWN0dWFsbHkgKm5vdCogY29uc3QgZnVuY3Rpb25zIGJlY2F1c2Ugb24gYXJjaGl0ZWN0dXJlcworCSAgd2l0aG91dCBpbnQxMjggaW5zdHJ1Y3Rpb25zIHRoZSBwYXJhbWV0ZXJzIHdlcmUgY2hhbmdlZC4KKwkgIGdjYyByZS11c2VkIHRoZSBwYXJhbWV0ZXJzIG9uIHRoZSBzdGFjayBmb3IgbXVsdGlwbGUgY2FsbHMgdGhvdWdoCisJICBhbmQgdGhlIGNoYW5nZWQgcGFyYW1ldGVycyB3ZXJlIHVzZWQgZm9yIHRoZSBzZWNvbmQgY2FsbCB0aGVuLgorCSAgRml4ZXMgYnVnICM2MjMwMDMuCisKKzIwMTAtMDYtMjYgMTc6NDg6MzEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmM6CisJKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmg6CisJKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgorCSAgMC4xMC4yOS4yIHByZS1yZWxlYXNlCisKKzIwMTAtMDYtMjYgMTc6NDc6NTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmUucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kYS5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9lcy5wbzoKKwkqIHBvL2V1LnBvOgorCSogcG8vZmkucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2h1LnBvOgorCSogcG8vaWQucG86CisJKiBwby9pdC5wbzoKKwkqIHBvL2phLnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3BsLnBvOgorCSogcG8vcHRfQlIucG86CisJKiBwby9ydS5wbzoKKwkqIHBvL3J3LnBvOgorCSogcG8vc2sucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJKiBwby96aF9DTi5wbzoKKwkqIHBvL3poX1RXLnBvOgorCSAgcG86IHVwZGF0ZSB0cmFuc2xhdGlvbnMKKworMjAxMC0wNi0yNiAxMDoxNjozNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIE1ha2VmaWxlLmFtOgorCSogY29uZmlndXJlLmFjOgorCSogdGVzdHMvZXhhbXBsZXMveG1sLy5naXRpZ25vcmU6CisJKiB0ZXN0cy9leGFtcGxlcy94bWwvTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9leGFtcGxlcy94bWwvY3JlYXRleG1sLmM6CisJKiB0ZXN0cy9leGFtcGxlcy94bWwvcnVueG1sLmM6CisJICBleGFtcGxlczogcmVtb3ZlIHhtbCBleGFtcGxlIGJ1aWxkIHN5c3RlbSBiaXRzIGFuZCBwdXJnZSBmcm9tIHRyZWUKKwkgIEZpeGVzIG1ha2UgZGlzdGNoZWNrLgorCisyMDEwLTA2LTI2IDA5OjU5OjMxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHhtbC5jOgorCSAgeG1sOiBrZWVwIGR1bW15IGdzdF94bWxfZ2V0X3R5cGUoKSBmdW5jdGlvbiBmb3IgZy1pIGV2ZW4gaWYgcmVzdCBvZiBHc3RYTUwgaXMgcmVtb3ZlZAorCSAgQWRkIGEgbWluaW1hbCBnc3RfeG1sX2dldF90eXBlKCkgZnVuY3Rpb24sIHNvIHRoYXQgZ29iamVjdC1pbnRyb3NwZWN0aW9uIGRvZXNuJ3QKKwkgIGJyZWFrIHRoZSBjb21waWxhdGlvbiBpZiB3ZSdyZSBjb21waWxpbmcgd2l0aCBHU1RfUkVNT1ZFX0RFUFJFQ0FURUQgZGVmaW5lZCBvcgorCSAgLS1kaXNhYmxlLWxvYWRzYXZlIGhhdmluZyBiZWVuIHBhc3NlZCB0byBjb25maWd1cmUuIFVudGlsIHNvbWVvbmUgZmlndXJlcyBvdXQKKwkgIGEgYmV0dGVyIHdheSBhdCBsZWFzdC4KKworMjAxMC0wNi0yNiAwMTowMTo0OSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RiaW4uYzoKKwkqIGdzdC9nc3RjYXBzLmM6CisJKiBnc3QvZ3N0Y29uZmlnLmguaW46CisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSogZ3N0L2dzdGdob3N0cGFkLmM6CisJKiBnc3QvZ3N0b2JqZWN0LmM6CisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0eG1sLmM6CisJKiBwbHVnaW5zL2luZGV4ZXJzL2dzdGZpbGVpbmRleC5jOgorCSAgRG9uJ3QgaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPiBmcm9tIHB1YmxpYyBoZWFkZXJzIGlmIEdTVF9ESVNBQkxFX0RFUFJFQ0FURUQgaXMgZGVmaW5lZAorCSAgU2luY2UgZXZlcnl0aGluZyBHc3RYTUwgcmVsYXRlZCBoYXMgYmVlbiBkZXByZWNhdGVkLCB3ZSBjYW4gbm93IHNraXAgdGhlCisJICBsaWJ4bWwgaW5jbHVkZXMgZnJvbSB0aGUgcHVibGljIGhlYWRlcnMgd2hlbiBHU1RfRElTQUJMRV9ERVBSRUNBVEVEIGlzCisJICBkZWZpbmVkLgorCSAgU2VlICM0NjM0MzUuCisKKzIwMTAtMDYtMjYgMDA6MTg6MTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9leGFtcGxlcy90eXBlZmluZC90eXBlZmluZC5jOgorCSAgZXhhbXBsZXM6IGFkZCBtaXNzaW5nIHN0ZGxpYi5oIGluY2x1ZGUgaW4gdHlwZWZpbmQgZXhhbXBsZQorCisyMDEwLTA2LTI1IDIxOjIzOjIyICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6CisJICBkb3QtZHVtcDogdGVybWluYXRlIHRydW5jYXRlZCBzdHJpbmdzIGFuZCBlc2NhcGUgc3BlY2lhbCBjaGFycworCSAgRml4ZXMgc3ludGF4IGVycm9ycyBpbiBnZW5lcmF0ZWQgZG90IGZpbGVzIGZvciBjYXBzIHdpdGggc3RyaW5ncy4KKworMjAxMC0wNi0yNSAxODo1MjowMiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5oOgorCSAgcGFkOiBtb3JlIGRvY3VtZW50YXRpb24gcmVnYXJkaW5nIHRoZSBuZXcgZmxhZ3MKKworMjAxMC0wNi0yNSAxODoxODo1NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5oOgorCSAgcGFkOiBtYWtlIHRoZSBOT1RISU5HIGxpbmsgY2hlY2sgZmxhZyBiZSAwCisJICBNYWtlIHRoZSBwYWQgbGluayBjaGVjayBvZiBOT1RISU5HIGJlIDAuIFRoaXMgd2F5IHdlIGhhdmUgYSBmbGFnIGZvciBlYWNoCisJICBmZWF0dXJlIGFuZCAwIHdoZW4gbm8gZmxhZ3MgYXJlIHNldC4KKworMjAxMC0wNi0yNSAxODoyNDo0NyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9ocHBhLmg6CisJKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X2kzODYuaDoKKwkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfcHBjMzIuaDoKKwkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfcHBjNjQuaDoKKwkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3Rfc3BhcmMuaDoKKwkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfeDg2XzY0Lmg6CisJICB0ZXN0czogUmVtb3ZlIEdzdFhNTCB0ZXN0cworCisyMDEwLTA2LTI1IDE4OjEzOjU3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJpbi5jOgorCSogZ3N0L2dzdGNhcHMuYzoKKwkqIGdzdC9nc3RjYXBzLmg6CisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSogZ3N0L2dzdGdob3N0cGFkLmM6CisJKiBnc3QvZ3N0b2JqZWN0LmM6CisJKiBnc3QvZ3N0b2JqZWN0Lmg6CisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkLmg6CisJKiBnc3QvZ3N0eG1sLmM6CisJKiBnc3QvZ3N0eG1sLmg6CisJKiB0ZXN0cy9leGFtcGxlcy9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL2V4YW1wbGVzL21hbnVhbC9NYWtlZmlsZS5hbToKKwkqIHRvb2xzL01ha2VmaWxlLmFtOgorCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgorCSAgZ3N0eG1sOiBEZXByZWNhdGUgR3N0WG1sIGFuZCByZWxhdGVkIGZ1bmN0aW9ucworCSAgUGlwZWxpbmUgc2VyaWFsaXNhdGlvbiB0byBhbmQgZnJvbSBYTUwgaXMgaG9ycmlibHkgYnJva2VuIGZvciBhbGwKKwkgIGJ1dCB0aGUgbW9zdCBzaW1wbGUgdXNlIGNhc2VzLCBhbmQgd2lsbCBsaWtlbHkgbmV2ZXIgYmUgZml4ZWQuCisJICBNYWtlIHN1cmUgZXZlcnlvbmUgcGxheWluZyBhcm91bmQgd2l0aCB0aGVzZSB0b29scyBpcyBhd2FyZSBvZgorCSAgdGhpcywgdG8gYXZvaWQgZnJ1c3RyYXRpb24uIFNlZSBjb3VudGxlc3MgYnVnIHJlcG9ydHMgaW4gYnVnemlsbGEuCisJICBGaXhlcyBidWcgIzYyMjY4NS4KKworMjAxMC0wNi0yNSAxODoxMTozMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgorCSAgY29udHJvbGxlcjogRml4IGJ1aWxkIHdpdGggR1NUX1JFTU9WRV9ERVBSRUNBVEVECisKKzIwMTAtMDYtMjQgMTI6MTk6MjAgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIHRlc3RzL2JlbmNobWFya3MvY2Fwc25lZ28uYzoKKwkgIGJlbmNobWFya3M6IFVzZSBnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbAorCSAgV2UncmUgdGVzdGluZyBjYXBzIG5lZ290aWF0aW9uLCBub3QgcGFkIGxpbmtpbmcuIEJyaW5ncyB0aGUgc3RhcnR1cAorCSAgdGltZSBkb3duIDEwMCBmb2xkLgorCisyMDEwLTA2LTI0IDE3OjUzOjM2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgorCSogdG9vbHMvZ3N0LXhtbGxhdW5jaC4xLmluOgorCSAgdG9vbHM6IGRlcHJlY2F0ZSBnc3QteG1sbGF1bmNoIGFuZCBwcmludCBmYXQgd2FybmluZyBpZiBzb21lb25lIHRyaWVzIHRvIHVzZSBpdAorCSAgUGlwZWxpbmUgc2VyaWFsaXNhdGlvbiB0byBhbmQgZnJvbSBYTUwgaXMgaG9ycmlibHkgYnJva2VuIGZvciBhbGwKKwkgIGJ1dCB0aGUgbW9zdCBzaW1wbGUgdXNlIGNhc2VzLCBhbmQgd2lsbCBsaWtlbHkgbmV2ZXIgYmUgZml4ZWQuCisJICBNYWtlIHN1cmUgZXZlcnlvbmUgcGxheWluZyBhcm91bmQgd2l0aCB0aGVzZSB0b29scyBpcyBhd2FyZSBvZgorCSAgdGhpcywgdG8gYXZvaWQgZnJ1c3RyYXRpb24uIFNlZSBjb3VudGxlc3MgYnVnIHJlcG9ydHMgaW4gYnVnemlsbGEuCisKKzIwMTAtMDYtMjQgMTc6MjI6MTMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0b29scy9nc3QtbGF1bmNoLjEuaW46CisJKiB0b29scy9nc3QtbGF1bmNoLmM6CisJICBnc3QtbGF1bmNoOiByZW5hbWUgbmV3IC0tbm8tcGxheSBjb21tYW5kIGxpbmUgb3B0aW9uIHRvIC0tbm8tc2lndXNyLWhhbmRsZXIKKwkgIC0tbm8tcGxheSBzZWVtcyBhIGJpdCBjb25mdXNpbmcuCisJICBGaXhlcyAjNjIxODY3LgorCisyMDEwLTA2LTI0IDE1OjA3OjExICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSA3M2ZmOTNhIHRvIGE1MTk1NzEKKworMjAxMC0wNi0yMyAxMTowMjoxNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RfcHJpdmF0ZS5oOgorCSogZ3N0L2dzdHBsdWdpbi5jOgorCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6CisJKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuaDoKKwkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5jOgorCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmg6CisJICBiaW5hcnlyZWdpc3RyeTogaWdub3JlIHRoZSBwbHVnaW4gY2FjaGUgaWYgdGhlIGZpbHRlciBlbnZpcm9ubWVudCBoYXMgY2hhbmdlZAorCSAgTWFrZSBzdXJlIHRoYXQgd2UgcHJvcGVybHkgdXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgdGhlIGNhY2hlIGZpbGUgd2hlbmV2ZXIKKwkgIHRoZSBmaWx0ZXIgZW52aXJvbm1lbnQgY2hhbmdlcyBvciB0aGVyZSdzIG5vIG1vcmUgZmlsdGVyIHNldC4KKworMjAxMC0wNS0yNyAxMjozNjoxMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RfcHJpdmF0ZS5oOgorCSogZ3N0L2dzdHBsdWdpbi5jOgorCSAgcGx1Z2lubG9hZGluZzogYWRkIHN1cHBvcnQgZm9yIHdoaXRlbGlzdGluZyBiYXNlZCBvbiBwbHVnaW4gb3Igc291cmNlIG1vZHVsZSBuYW1lIGFuZCBwYXRoCisJICBUaGlzIGZlYXR1cmUgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciB1c2UgaW4gcGx1Z2luIG1vZHVsZXMnIHVuaXQgdGVzdHMuCisJICBDb25zaWRlciB0aGUgZm9sbG93aW5nIHNpdHVhdGlvbjogZ3N0LXBsdWdpbnMtZ29vZCBpcyBidWlsdCBhZ2FpbnN0IGFuCisJICBpbnN0YWxsZWQgR1N0cmVhbWVyIGNvcmUuIEFuIG9sZGVyIHZlcnNpb24gb2YgZ3N0LXBsdWdpbnMtZ29vZCBpcyBhbHNvCisJICBpbnN0YWxsZWQgaW4gdGhhdCBwcmVmaXgsIGFsb25nIHdpdGggcmFuZG9tIG90aGVyIHBsdWdpbiBtb2R1bGVzLiBOb3csCisJICB3aGVuIGRvaW5nICdtYWtlIGNoZWNrJyBpbiB0aGUganVzdC1idWlsdCBnc3QtcGx1Z2lucy1nb29kIHRyZWUsIHdlCisJICB3YW50IHRvIG9ubHkgbG9hZCBwbHVnaW5zIGZyb20gR1N0cmVhbWVyIGNvcmUsIGdzdC1wbHVnaW5zLWJhc2UsIGFuZAorCSAgZ3N0LXBsdWdpbnMtZ29vZCwgYnV0IG5vdCByYW5kb20gb3RoZXIgbW9kdWxlcyAod2UgZG9uJ3Qgd2FudCBhbnkgdW5pdAorCSAgdGVzdHMgdG8gZmFpbCBqdXN0IGJlY2F1c2Ugc29tZSBtb2R1bGUgaW4gZ3N0LXBsdWdpbnMtYmFkIGhhcyBhIGJyb2tlbgorCSAgcGx1Z2luX2luaXQsIGZvciBleGFtcGxlKS4gQWxzbywgd2Ugd2FudCB0byBvbmx5IGxvYWQgZ3N0LXBsdWdpbnMtZ29vZAorCSAgbW9kdWxlcyBmcm9tIHRoZSBsb2NhbGx5LWJ1aWx0IHNvdXJjZSB0cmVlLCBidXQgbm90IGFueSBvZiB0aGUgb2xkZXIKKwkgIGdzdC1wbHVnaW5zLWdvb2QgbW9kdWxlcyBpbnN0YWxsZWQuIFRoaXMgaXMgdXN1YWxseSBhc3N1cmVkIGJ5IGxvYWRpbmcKKwkgIHRoZSBvbmVzIGluIHRoZSBzb3VyY2UgdHJlZSBmaXJzdCAoYnkgYWRkaW5nIHRoYXQgcGF0aCBmaXJzdCB0byB0aGUKKwkgIHJpZ2h0IGVudmlyb25tZW50IHZhcmlhYmxlcyksIGJ1dCBpdCBnZXRzIHRyaWNreSB3aGVuIHBsdWdpbnMgYXJlCisJICBtb3ZlZCwgcmVtb3ZlZCwgbWVyZ2VkLCBvciByZW5hbWVkLCBvciB0aGUgcGx1Z2luIGZpbGVuYW1lIGNoYW5nZXMuCisJICBOb3RlIHRoYXQgJ21ha2UgY2hlY2snIHNob3VsZCByZWFsbHkgd29yayByaWdodCB3aXRob3V0IGRvaW5nCisJICAnbWFrZSBpbnN0YWxsJyBvciB1bmluc3RhbGxpbmcgdGhlIG9sZCBnc3QtcGx1Z2lucy1nb29kIHBhY2thZ2UgKG9yCisJICBhbnkgb3RoZXIgZ3N0LXBsdWdpbnMtZm9vIHBhY2thZ2UpIGZpcnN0LgorCSAgRW50ZXIgR1NUX1BMVUdJTl9MT0FESU5HX1dISVRFTElTVC4gVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBtYXkKKwkgIGNvbnRhaW4gc291cmNlLXBhY2thZ2VAcGF0aC1wcmVmaXggcGFpcnMgc2VwYXJhdGVkIGJ5IHRoZSBwbGF0Zm9ybQorCSAgc2VhcmNoIHBhdGggc2VwYXJhdG9yIChHX1NFQVJDSFBBVEhfU0VQQVJBVE9SX1MpLiBUaGUgc291cmNlIHBhY2thZ2UKKwkgIGFuZCBwYXRoIHByZWZpeCBhcmUgc2VwYXJhdGVkIGJ5IHRoZSAnQCcgY2hhcmFjdGVyLiBUaGUgcGF0aCBwcmVmaXggaXMKKwkgIGVudGlyZWx5IG9wdGlvbmFsLCBhcyBpcyB0aGUgJ0AnIHNlcGFyYXRvciBpZiBubyBwYXRoIGlzIGdpdmVuLgorCSAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBmaWx0ZXIgYmFzZWQgb24gcGx1Z2luIG5hbWVzIGluc3RlYWQgb2YgdGhlIG5hbWUKKwkgIG9mIHRoZSBzb3VyY2UtcGFja2FnZSBieSBzcGVjaWZ5aW5nIG9uZSBvciBtb3JlIHBsdWdpbiBuYW1lcyBzZXBhcmF0ZWQKKwkgIGJ5IGNvbW1hcyBiZWZvcmUgdGhlIG9wdGlvbmFsIHBhdGggcHJlZml4LgorCSAgSW4gc2hvcnQsIHRoZSBmb2xsb3dpbmcgbWF0Y2ggcGF0dGVybnMgYXJlIHBvc3NpYmxlOgorCSAgcGx1Z2luMSxwbHVnaW4yQHBhdGhwcmVmaXggb3IKKwkgIHBsdWdpbjEscGx1Z2luMkAqIG9yIGp1c3QKKwkgIHBsdWdpbjEscGx1Z2luMiBvcgorCSAgc291cmNlLXBhY2thZ2VAcGF0aHByZWZpeCBvcgorCSAgc291cmNlLXBhY2thZ2VAKiBvciBqdXN0CisJICBzb3VyY2UtcGFja2FnZQorCSAgU28gZm9yIG91ciBnc3QtcGx1Z2lucy1nb29kIHVuaXQgdGVzdCBleGFtcGxlIGFib3ZlLCB3ZSAgd291bGQgc2V0IHRoZQorCSAgZW52aXJvbm1lbnQgdmFyaWFibGUgb24gKm5peCB0byBzb21ldGhpbmcgbGlrZSB0aGlzICh3aWxsIGxpa2VseSBiZSBhCisJICByZWxhdGl2ZSBwYXRoIGluIHByYWN0aWNlKToKKwkgIGdzdHJlYW1lcjpnc3QtcGx1Z2lucy1iYXNlOmdzdC1wbHVnaW5zLWdvb2RAL3BhdGgvdG8vc3JjL2dzdC1wbHVnaW5zLWdvb2QKKwkgIEZpeGVzICM2MTk4MTUgYW5kICM2MTk3MTcuCisKKzIwMTAtMDYtMjMgMTc6MjQ6MDcgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGdzdC9nc3RnaG9zdHBhZC5jOgorCSAgZ3N0Z2hvc3RwYWQ6IFdlIGRvbid0IG5lZWQgYW55IGNoZWNrcyB3aGVuIGxpbmtpbmcgdGFyZ2V0IHBhZAorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyMjUwNAorCisyMDEwLTA2LTIzIDE3OjAwOjE3ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdHV0aWxzLmM6CisJKiBnc3QvZ3N0dXRpbHMuaDoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgZ3N0dXRpbHM6IE5ldyBnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbCBtZXRob2QKKwkgIExpbmtzIHRoZSBlbGVtZW50cyB3aXRoIHRoZSBzcGVjaWZpZWQgcGFkIGxpbmtpbmcgY2hlY2tzLgorCSAgQVBJOmdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIyNTA0CisKKzIwMTAtMDYtMjMgMTY6NDU6MTkgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0LmM6CisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkLmg6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIEdzdFBhZDogQWRkIG5ldyBwYWQgbGlua2luZyBtZXRob2Qgd2l0aCBjb25maWd1cmFibGUgY2hlY2tzLgorCSAgVG8gYmUgdXNlZCBmb3IgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgbmVlZCBhbGwgY2hlY2tzIHRvIGJlIHZhbGlkYXRlZC4KKwkgIEFQSTogZ3N0X3BhZF9saW5rX2Z1bGwKKwkgIEFQSTogR3N0UGFkTGlua0NoZWNrCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIyNTA0CisKKzIwMTAtMDYtMTUgMTg6MjY6MDEgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdHRhZ2xpc3QuYzoKKwkqIGdzdC9nc3R0YWdsaXN0Lmg6CisJICB0YWc6IEFkZHMgR1NUX1RBR19JTUFHRV9PUklFTlRBVElPTiB0YWcKKwkgIEFkZHMgYSBuZXcgdGFnIHRvIGluZm9ybSBhYm91dCB0aGUgaW1hZ2Ugb3JpZW50YXRpb24gYW5kIGhvdworCSAgdG8gcm90YXRlIGFuZCBmbGlwIGl0IGJlZm9yZSBkaXNwbGF5LgorCSAgTm90ZSB0aGF0IHRoaXMgdGFnIGlzIGEgc3RyaW5nIHdpdGggYSBwcmVkZWZpbmVkIHNldCBvZgorCSAgcG9zc2libGUgdmFsdWVzLgorCSAgQVBJOiBHU1RfVEFHX0lNQUdFX09SSUVOVEFUSU9OCisJICBGaXhlcyAjNjE5NTA4CisKKzIwMTAtMDYtMjIgMTg6NTM6MTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0b2JqZWN0LmM6CisJKiBnc3QvZ3N0b2JqZWN0Lmg6CisJICBnc3RvYmplY3Q6IGRlcHJlY2F0ZSBnc3Rfb2JqZWN0X3tzZXR8Z2V0fV9uYW1lX3ByZWZpeCgpCisJICBUaGUgbmFtZSBwcmVmaXggc3R1ZmYgaGFzIG5ldmVyIGJlZW4gdXNlZCBmb3IgYW55dGhpbmcgYW5kIGl0IGRvZXNuJ3QKKwkgIGxvb2sgbGlrZSB3ZSdsbCBldmVyIHdhbnQgdG8gdXNlIGl0IGZvciBhbnl0aGluZy4KKwkgIEZpeGVzICM2MjEwMDYuCisKKzIwMTAtMDYtMjIgMTA6MjA6NTMgLTAzMDAgIEpvaGFuIERhaGxpbiA8am9oYW5AZ25vbWUub3JnPgorCisJKiBnc3QvZ3N0cGFkLmg6CisJICBBZGQgZ29iamVjdC1pbnRyb3NwZWN0aW9uIGFubm90YXRpb25zIGZvciBHc3RQYWRJbnRMaW5rRnVuY3Rpb24KKwkgIEZpeGVzIGJ1aWxkIHdpdGggbGF0ZXN0IGdvYmplY3QtaW50cm9zcGVjdGlvbiBmcm9tIGdpdC4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MjIwMjUKKworMjAxMC0wNi0yMSAxMTo0MTo0NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkgIHF1ZXVlMjogZml4IG1lcmdpbmcgb2YgcmFuZ2VzCisJICBXaGVuIHdlIG1lcmdlIHR3byByYW5nZXMsIGRvbid0IHVwZGF0YSB0aGUgY3VycmVudCByYW5nZSB3cml0aW5nX3BvcyB3aXRoCisJICB3aGVyZWV2ZXIgd2Ugd2VyZSB3cml0aW5nIGVhcmxpZXIgaW4gdGhlIG1lcmdlZCByYW5nZS4gIFNwb3R0ZWQgYnkgYmlsYm9lZC4KKworMjAxMC0wNi0xOSAxMToxOTozNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSAgcmVnaXN0cnk6IGFsc28gc2tpcCAuZGVwcyBkaXJzIHdoZW4gc2Nhbm5pbmcgZm9yIHBsdWdpbnMKKwkgIE5vIG5lZWQgdG8gZGVzY2VuZCBpbnRvIC5kZXBzIGRpcnMgaW4gdW5pbnN0YWxsZWQgc2V0dXBzLCB3ZSBrbm93CisJICB0aGVzZSBkb24ndCBjb250YWluIGFueSBwbHVnaW5zLgorCisyMDEwLTA2LTE3IDExOjM5OjA0IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3R0YWdsaXN0LmM6CisJKiBnc3QvZ3N0dGFnbGlzdC5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICB0YWdsaXN0OiBhZGQgZ3N0X3RhZ19saXN0X3BlZWtfc3RyaW5nX2luZGV4IHRvIGF2b2lkIGEgY29weQorCSAgQWRkcyBhIHZhcmlhdGlvbiBvZiB0aGUgX2dldF9zdHJpbmdfaW5kZXggZnVuY3Rpb24gdGhhdCBkb2Vzbid0IGNvcHkKKwkgIHRoZSBzdHJpbmcuCisJICBBUEk6IGdzdF90YWdfbGlzdF9wZWVrX3N0cmluZ19pbmRleAorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyMTg5NgorCisyMDEwLTA2LTE4IDEyOjAwOjUzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkgIHR5cGVmaW5kOiBtYWtlIHN1cmUgYnVmZmVycycgbWV0YWRhdGEgaXMgd3JpdGFibGUgYmVmb3JlIHNldHRpbmcgY2FwcyBvbiB0aGVtCisJICBGaXhlcyB3YXJuaW5ncyB3aGVuIHVzaW5nIHBsYXliaW4yIHdpdGggZHZiOi8vIHN0cmVhbXMsIHdoZXJlIHR5cGVmaW5kCisJICBjb21lcyBhZnRlciBtcGVndHNwYXJzZS4KKworMjAxMC0wNi0xNyAxNTo1Mjo1NyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbW1vbjoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6CisJICBkb2NzOiB1cGRhdGUgaW50cm9zcGVjdGVkIHBsdWdpbiBkb2NzIGZvciBnc3Rkb2Mtc2Nhbm9iaiBjaGFuZ2VzCisJICBVcGRhdGUgY29tbW9uIGZvciBsYXRlc3QgZ3N0ZG9jLXNjYW5vYmogYW5kIGluc3BlY3QgeG1sIGZpbGVzIGZvcgorCSAgZXNjYXBpbmcgYW5kIHBhZCB0ZW1wbGF0ZSBvcmRlciBjaGFuZ2VzLgorCisyMDEwLTA2LTE3IDEzOjE5OjI0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgYmFzZXNpbms6IEluaXRpYWxpemUgaml0dGVyIHRvIHByZXZlbnQgcHJpbnRpbmcgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBpZiB3YWl0aW5nIGZvciB0aGUgY2xvY2sgZmFpbGVkCisKKzIwMTAtMDYtMTcgMTA6MzQ6NTEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmUucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kYS5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9lcy5wbzoKKwkqIHBvL2V1LnBvOgorCSogcG8vZmkucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2h1LnBvOgorCSogcG8vaWQucG86CisJKiBwby9pdC5wbzoKKwkqIHBvL2phLnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3BsLnBvOgorCSogcG8vcHRfQlIucG86CisJKiBwby9ydS5wbzoKKwkqIHBvL3J3LnBvOgorCSogcG8vc2sucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJKiBwby96aF9DTi5wbzoKKwkqIHBvL3poX1RXLnBvOgorCSAgcG86IHVwZGF0ZSBmb3IgbmV3IHN0cmluZ3MKKworMjAxMC0wNi0xNyAwOTozMzo0MyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvbWFudWFsL2ludHJvLWJhc2ljcy54bWw6CisJICBtYW51YWw6IGZpeCBhbm90aGVyIHR5cG8gYW5kIHNvbWUgaW5hY2N1cmFjaWVzCisJICBGaXggYSB3cm9uZyBzdGF0ZW1lbnQgYW5kIGZsZXNoIG91dCBzZWN0aW9uIG9uIG1lc3NhZ2VzIGFuZCBxdWVyaWVzCisJICBhIGJpdC4KKworMjAxMC0wNi0xNyAwOTowNTo1OCArMDIwMCAgQWxleGFuZGVyIFNhcHJ5a2luIDx4ZWxmaXVtQGdtYWlsLmNvbT4KKworCSogZG9jcy9tYW51YWwvaW50cm8tYmFzaWNzLnhtbDoKKwkgIG1hbnVhbDogRml4IGFub3RoZXIgdHlwbworCisyMDEwLTA2LTE3IDA5OjA1OjI4ICswMjAwICBBbGV4YW5kZXIgU2FwcnlraW4gPHhlbGZpdW1AZ21haWwuY29tPgorCisJKiBkb2NzL21hbnVhbC9pbnRyby1iYXNpY3MueG1sOgorCSAgbWFudWFsOiBGaXggdHlwbworCisyMDEwLTA2LTE2IDEzOjExOjA2IC0wMzAwICBKb2hhbiBEYWhsaW4gPGpvaGFuQGdub21lLm9yZz4KKworCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6CisJICBlbGVtZW50ZmFjdG9yeTogQWRkIGFuIGFsbG93LW5vbmUgYW5ub3RhdGlvbgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyMTc3MworCisyMDEwLTA2LTE2IDEzOjEwOjI2IC0wMzAwICBKb2hhbiBEYWhsaW4gPGpvaGFuQGdub21lLm9yZz4KKworCSogZ3N0L2dzdG1pbmlvYmplY3QuaDoKKwkgIG1pbmlvYmplY3Q6IEFkZCBpbnRyb3NwZWN0aW9uIGFubm90YXRpb25zCisJICBUaGVzZSBhcmUgcmVxdWlyZWQgdG8ga25vdyBob3cgdG8gdW5yZWYvcmVmIGFuZAorCSAgY29udmVydCB0by9mcm9tIGEgR1ZhbHVlLgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyMTc3MworCisyMDEwLTA2LTE2IDEzOjEwOjEzIC0wMzAwICBKb2hhbiBEYWhsaW4gPGpvaGFuQGdub21lLm9yZz4KKworCSogZ3N0L2dzdGV2ZW50LmM6CisJICBldmVudDogQWRkIG91dCBhbm5vdGF0aW9ucworCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyMTc3MworCisyMDEwLTA2LTE2IDEzOjEwOjA2IC0wMzAwICBKb2hhbiBEYWhsaW4gPGpvaGFuQGdub21lLm9yZz4KKworCSogZ3N0L2dzdHF1ZXJ5LmM6CisJICBxdWVyeTogQWRkIG91dCBhbm5vdGF0aW9ucworCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyMTc3MworCisyMDEwLTA2LTE2IDEzOjA5OjU3IC0wMzAwICBKb2hhbiBEYWhsaW4gPGpvaGFuQGdub21lLm9yZz4KKworCSogZ3N0L2dzdG1lc3NhZ2UuYzoKKwkgIG1lc3NhZ2U6IEFkZCBvdXQgYW5ub3RhdGlvbnMKKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MjE3NzMKKworMjAxMC0wNi0xNiAxMzowMDozMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzoKKwkgIGZkc2luazogbWFrZSBzeW5jIHByb3BlcnR5IHdvcmsgY29ycmVjdGx5CisJICBEb24ndCBvdmVycmlkZSB0aGUgZGVmYXVsdCBnZXRfdGltZXMgdm1ldGhvZCBzbyB0aGF0IHdlIGNhbiB1c2UgdGhlIHN5bmMKKwkgIHByb3BlcnR5LgorCSAgU2V0IHRoZSBkZWZhdWx0IHN5bmMgcHJvcGVydHkgdG8gRkFMU0UuIEl0IHVzZWQgdG8gYmUgc2V0IHRvIFRSVUUgYnV0IGJlY2F1c2UKKwkgIHRoZSBnZXRfdGltZXMgd2FzIE5VTEwsIGl0IGFsd2F5cyBiZWhhdmVkIGxpa2UgRkFMU0UuCisJICBGaXhlcyAjNjIxNTMwCisKKzIwMTAtMDYtMTUgMTg6NDg6NTMgKzAyMDAgIEJlbmphbWluIEdhaWduYXJkIDxiZW5qYW1pbi5nYWlnbmFyZEBnbWFpbC5jb20+CisKKwkqIGdzdC9nc3RlbGVtZW50Lmg6CisJICBlbGVtZW50OiBJbXByb3ZlIGdzdF9lbGVtZW50X2dldF9uYW1lKCkgZG9jcworCSAgRml4ZXMgYnVnICM2MjE2NjAuCisKKzIwMTAtMDYtMTUgMTY6NDk6MDQgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSA5MzM5Y2NjIHRvIDM1NjE3YzIKKworMjAxMC0wNi0xNSAxNjo1MzozNSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBjb21tb246CisJICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKKwkgIEZyb20gNWFkYjFjYSB0byA5MzM5Y2NjCisKKzIwMTAtMDYtMTUgMTY6MzQ6MzcgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIDU3Yzg5YjcgdG8gNWFkYjFjYQorCisyMDEwLTA2LTE1IDE1OjMxOjEyICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSBjODA0OTg4IHRvIDU3Yzg5YjcKKworMjAxMC0wNi0xNSAxMTo0ODoyNiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkLmg6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIFJldmVydCAiR3N0UGFkOiBBZGQgR1NUX1BBRF9ORUdPVElBQkxFIEdzdFBhZEZsYWciCisJICBUaGlzIHJldmVydHMgY29tbWl0IGRjMzhlNzVkODhiZDg5MjE4OTU4MjFmN2FmZWQwMWNhYjMwZTQ2YzkuCisJICBib29tCisKKzIwMTAtMDYtMTUgMTE6NDg6MTcgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgorCSAgUmV2ZXJ0ICJnc3RwYWQ6IFJldHVybiBwYWQgdGVtcGxhdGUgaW4gZ2V0X2NhcHMgaWYgcGFkIGlzIG5vdCBuZWdvdGlhYmxlIgorCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA3NDYwMzIxYTYwMDQzODk2NmQ3MTUyYWIyYjQzMThiZTQ4ZWFkY2UwLgorCSAgY3JhY2sKKworMjAxMC0wNi0xNSAxMTo0ODowNyArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgUmV2ZXJ0ICJwYWQ6IGZpeCBjb21tZW50IgorCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA4ZTkyY2I0YTdkNTZjZGZhNDY3NDMxNWM2NGI1OGMxYjFiOWQ4MjA4LgorCSAgd2hhdGV2ZXIuLi4KKworMjAxMC0wNi0xNSAxMTo0Nzo1NyArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkgIFJldmVydCAiZWxlbWVudDogb25seSBjbGVhciBuZWdvdGlhYmxlIHdoZW4gZ29pbmcgdG8gTlVMTCIKKwkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgOGY1ZWMxZjczN2MzYjM3NTM4YjIzMDdhZWYxNjBkOWQyMWYxYzQyMi4KKwkgIGJsZWVlZWgKKworMjAxMC0wNi0xNSAxMDo0NjowOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RpbmZvLmg6CisJICBpbmZvOiBhZGQgZHVtbXkgVFJBQ0UgbG9nIGxldmVsIG1hY3JvcyBmb3Igd2hlbiBkZWJ1Z2dpbmcgaXMgZGlzYWJsZWQKKwkgIEZvcmdvdCB0aG9zZSB3aGVuIGFkZGluZyB0aGUgb3JpZ2luYWwgQVBJLCBqdXN0IGxpa2UgdGhlIEFQSSBtYXJrZXJzCisJICBpbiB0aGUgY29tbWl0IG1lc3NhZ2U6CisJICBBUEk6IEdTVF9UUkFDRQorCSAgQVBJOiBHU1RfVFJBQ0VfT0JKRUNUCisJICBBUEk6IEdTVF9DQVRfVFJBQ0UKKwkgIEFQSTogR1NUX0NBVF9UUkFDRV9PQkpFQ1QKKwkgIEFQSTogR1NUX0xFVkVMX1RSQUNFCisJICBGaXhlcyBjb21waWxhdGlvbiB3aXRoIC0tZGlzYWJsZS1nc3QtZGVidWcKKworMjAxMC0wNi0xNSAwMToxNTo1NCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRvb2xzL2dzdC1sYXVuY2guYzoKKwkgIGdzdC1sYXVuY2g6IHByaW50IG1vcmUgZXJyb3JzIHRvIHN0ZGVyciBhbmQgc3VwcHJlc3MgbW9yZSBvdXRwdXQgaW4gcXVpZXQgbW9kZQorCSAgSWYgLS1xdWlldCBpcyBnaXZlbiwgZG9uJ3QgcHJpbnQgYW55dGhpbmcgYnV0IGVycm9ycy4gQWxzbywgbWFrZQorCSAgc3VyZSBlcnJvcnMgYXJlIGFsd2F5cyBwcmludGVkIHRvIHN0ZGVyciBhbmQgbm90IHRvIHN0ZG91dC4KKwkgIEZpeGVzICM2MjE1OTUuCisKKzIwMTAtMDYtMTQgMTg6MDc6MjMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJICBlbGVtZW50OiBvbmx5IGNsZWFyIG5lZ290aWFibGUgd2hlbiBnb2luZyB0byBOVUxMCisJICBEb24ndCBjbGVhciB0aGUgbmVnb3RpYWJsZSBmbGFnIHdoZW4gZ29pbmcgdG8gUkVBRFkgYmVjYXVzZSB0aGVuIGl0IHdpbGwgbmV2ZXIKKwkgIGJlIHNldCB0byBUUlVFIGFnYWluLgorCisyMDEwLTA2LTE0IDE3OjMzOjE2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IGZpeCBjb21tZW50CisKKzIwMTAtMDUtMTcgMTU6MDY6MzcgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgorCSAgZ3N0cGFkOiBSZXR1cm4gcGFkIHRlbXBsYXRlIGluIGdldF9jYXBzIGlmIHBhZCBpcyBub3QgbmVnb3RpYWJsZQorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYxODY0NAorCisyMDEwLTA1LTE3IDE1OjA0OjQ4ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RwYWQuaDoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgR3N0UGFkOiBBZGQgR1NUX1BBRF9ORUdPVElBQkxFIEdzdFBhZEZsYWcKKwkgIEEgcGFkIGlzICduZWdvdGlhYmxlJyB3aGVuIGl0cyBjb250YWluZXIgZWxlbWVudCBpcyBpbiBhIHN0YXRlIGdyZWF0ZXIKKwkgIHRoYW4gR1NUX1NUQVRFX1JFQURZCisJICBBUEk6Z3N0X3BhZF9pc19uZWdvdGlhYmxlCisJICBBUEk6Z3N0X3BhZF9zZXRfbmVnb3RpYWJsZQorCSAgQVBJOkdTVF9QQURfTkVHT1RJQUJMRQorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYxODY0NAorCisyMDEwLTA2LTE0IDE2OjUxOjM5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6CisJICBmYWtlc2luazogdXNlIG1ldGhvZCB0byBzZXQgc3luYyBwcm9wZXJ0eQorCSAgVXNlIHRoZSBiYXNlc2luayBtZXRob2QgdG8gY29uZmlndXJlIHRoZSBzeW5jIHByb3BlcnR5IGluc3RlYWQgb2YgcG9raW5nIHRoZQorCSAgcGFyZW50IHN0cnVjdHVyZS4KKworMjAxMC0wNi0xNCAxNjo1MDo0MSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgorCSAgZmlsZXNpbms6IHVzZSB0aGUgZGVmYXVsdCBnZXRfdGltZXMgZnVuY3Rpb24KKwkgIFVzZSB0aGUgZGVmYXVsdCBnZXRfdGltZXMgZnVuY3Rpb24gb2YgYmFzZXNpbmsgc28gdGhhdCB3ZSBob25vdXIgdGhlIHN5bmMKKwkgIHByb3BlcnR5IGluc3RlYWQgb2YgbmV2ZXIgc3luY2hyb25pemluZyB0byB0aGUgY2xvY2suCisJICBGaXhlcyAjNjIxNTMwCisKKzIwMTAtMDYtMTQgMTY6MjA6MTggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYmFzZXRyYW5zZm9ybTogcmVldmFsdWF0ZSBwcm94eV9hbGxvYyB3aGVuIHJlY29uZmlndXJlZAorCSAgV2hlbiB3ZSByZWNvbmZpZ3VyZSB0aGUgdHJhbnNmb3JtIGVsZW1lbnQsIG1ha2Ugc3VyZSB3ZSByZWV2YWx1YXRlIHRoZSBwcm94eWluZworCSAgb2YgYnVmZmVyX2FsbG9jIHRoZSBuZXh0IHRpbWUgYXJvdW5kLgorCSAgRml4ZXMgIzYyMTMzMgorCisyMDEwLTA2LTE0IDE1OjM5OjU3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZ3N0L2NhcHNsaXN0Lmg6CisJICBjYXBzOiBEb24ndCB1c2UgaW52YWxpZCBmcmFjdGlvbiByYW5nZSBpbiB0aGUgdW5pdCB0ZXN0CisKKzIwMTAtMDYtMTQgMTU6MzA6MDggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dmFsdWUuYzoKKwkgIGdzdHZhbHVlOiBBZGQgc29tZSBtb3JlIGFzc2VydGlvbnMgYW5kIGNoZWNrcyBmb3IgdmFsaWQgaW5wdXQgcGFyYW1ldGVycworCisyMDEwLTA1LTI3IDE1OjEzOjE4ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6CisJICBhZGFwdGVyOiBvcHRpbWl6ZSBwcm9ncmVzc2l2ZSBtYXNrZWRfc2NhbgorCSAgUmV0YWluIHRoZSBsYXN0IHNjYW5uZWQgYnVmZmVyIGVudHJ5IGFuZCBvZmZzZXQsIHNvIHdlIGNhbiByZXN1bWUgYnVmZmVyCisJICBzY2FubmluZyB0aGVyZSBpbiBjYXNlIG9mIGEgdHlwaWNhbCBwcm9ncmVzc2l2ZSBzY2FuLgorCSAgQWxzbyBwb3RlbnRpYWxseSBvcHRpbWl6ZSBfY29weSBzdWJzZXF1ZW50bHkgb2NjdXJyaW5nIGluIHRoYXQgYXJlYS4KKworMjAxMC0wNS0yNyAxMjoxNToyMiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgorCSAgYWRhcHRlcjogYWRkIGV4dGVuZGVkIG1hc2tlZF9zY2FuX3VpbnQzMl9wZWVrIHRoYXQgYWxzbyBwcm92aWRlcyBtYXRjaGluZyB2YWx1ZQorCSAgQWxzbyBhZGQgdG8gLmRlZiBhbmQgZG9jcy4KKwkgIEZpeGVzICM2MTk4MjguCisJICBBUEk6IGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMl9wZWVrCisKKzIwMTAtMDYtMTQgMTM6Mzg6NDEgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgd2luMzI6IGZpeCAuZGVmIGZpbGUKKworMjAxMC0wNi0xNCAxMjoyNTozMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RjYXBzLmM6CisJICBkb2NzOiBhZGQgU2luY2U6IHRhZyBmb3IgbmV3IGdzdF9jYXBzX3N0ZWFsX3N0cnVjdHVyZQorCisyMDEwLTA2LTExIDE1OjM2OjEwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGluZm8uaDoKKwkgIGRvY3M6IGZpeCBleGFtcGxlIHRvIHVzZSBhIGNhdGVnb3J5IG5hbWUgdGhhdCBhY3R1YWxseSBleGlzdHMKKworMjAxMC0wNi0xNCAxMTozOTo0MCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3RjYXBzLmM6CisJKiBnc3QvZ3N0Y2Fwcy5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBnc3RjYXBzOiBOZXcgZ3N0X2NhcHNfc3RlYWxfc3RydWN0dXJlKCkgbWV0aG9kCisJICBUaGlzIGFsbG93cyByZW1vdmluZyBzdHJ1Y3R1cmVzIGZyb20gY2FwcyB3aXRob3V0IHRoZW0gYmVpbmcgZnJlZWQuIEhlbHBmdWwgd2hlbgorCSAgcGx1Z2lucyBuZWVkIHRvIG1vdmUgYXJvdW5kIHN0cnVjdHVyZXMgd2l0aG91dCBoYXZpbmcgdG8gZG8gYW4gZXhwZW5zaXZlIHN0cnVjdHVyZQorCSAgY29weS4KKwkgIEFQSTpnc3RfY2Fwc19zdGVhbF9zdHJ1Y3R1cmUKKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MjE1MjcKKworMjAxMC0wNi0xNCAxMzoxMDowNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkgIGNvbmZpZ3VyZTogRG9uJ3QgYWRkIEdfVEhSRUFEU19NQU5EQVRPUlkgdG8gR1NUX0FMTF9DRkxBR1MKKwkgIEl0J3MgYWxyZWFkeSBpbmNsdWRlZCBpbiBHTElCX0VYVFJBX0NGTEFHUworCisyMDEwLTA2LTE0IDEzOjA3OjMzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogY29uZmlndXJlLmFjOgorCSAgY29uZmlndXJlOiB1c2UgR0xJQl9FWFRSQV9DRkxBR1MKKworMjAxMC0wNi0xNCAxMzowMjowOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSA3YTBmZGY1IHRvIGM4MDQ5ODgKKworMjAxMC0wNi0xNCAxMzowMTo1NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6CisJICBjYXBzZmlsdGVyOiBmaXggcHJpbnRmIGZvcm1hdAorCisyMDEwLTA2LTE0IDEyOjM5OjQ3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKKwkgIGNhcHNmaWx0ZXI6IGltcGxlbWVudCBjdXN0b20gYWNjZXB0X2NhcHMgbWV0aG9kCisJICBJbXBsZW1lbnQgYSBjdXN0b20gYWNjZXB0Y2FwcyBmdW5jdGlvbi4gV2UgY2FuIHNpbXBseSBjaGVjayBpZiB0aGVyZSBpcyBhbgorCSAgaW50ZXJzZWN0aW9uIHdpdGggdGhlIG5ldyBjYXBzLiBUaGlzIG1ha2VzIHRoZSBhY2NlcHQgY2FwcyBmdW5jdGlvbiBtdWNoIGZhc3Rlci4KKwkgIFNlZSAjNjIxMTkwCisKKzIwMTAtMDYtMTQgMTI6MzY6NTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6CisJICBiYXNldHJhbnNmb3JtOiBhZGQgYWNjZXB0X2NhcHMgdm1ldGhvZAorCSAgQWxsb3cgc3ViY2xhc3NlcyB0byBvdmVycmlkZSB0aGUgYWNjZXB0Y2FwcyBmdW5jdGlvbiBiZWNhdXNlIGluIHNvbWUgY2FzZXMgYQorCSAgY3VzdG9tIGltcGxlbWVudGF0aW9uIGNhbiBiZSBtdWNoIG11Y2ggZmFzdGVyIHRoYW4gdGhlIGRlZmF1bHQgb25lLgorCSAgU2VlICM2MjExOTAKKworMjAxMC0wNi0xNCAxMTozMDoyMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSA2ZGEzYmFiIHRvIDdhMGZkZjUKKworMjAxMC0wNi0xMSAxODo0OTowMiAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKKwkgIGNhcHNmaWx0ZXI6IFJlbW92ZSB0cmFuc2Zvcm1fc2l6ZQorCSAgR3N0QmFzZVRyYW5zZm9ybSBub3cgYXNzdW1lcyB0aGF0IHRoZSBzaXplIGlzIHRoZSBzYW1lIGlmIHRoZXJlIGlzIG5vdAorCSAgdHJhbnNmb3JtX3NpemUuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIxMzM0CisKKzIwMTAtMDYtMTEgMTg6NDY6MzAgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBiYXNldHJhbnNmb3JtOiBBc3N1bWUgc2l6ZSBpcyB0aGUgc2FtZSBpZiBubyB0cmFuc2Zvcm1fc2l6ZS9nZXRfdW5pdF9zaXplCisJICBTdWJjbGFzc2VzIHRoYXQgZG9uJ3QgaW1wbGVtZW4gdHJhbnNmb3JtX3NpemUgc2hvdWxkIGJlIGFzc3VtZWQgdG8gcHJvZHVjZSBvdXRwdXQKKwkgIGJ1ZmZlcnMgb2YgdGhlIHNhbWUgc2l6ZS4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MjEzMzQKKworMjAxMC0wNi0xNCAwODoxODowMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R2YWx1ZS5jOgorCSAgZ3N0dmFsdWU6IERvbid0IGluaXRpYWxpemUgYXJyYXlzIGZyb20gdmFyaWFibGVzCisKKzIwMTAtMDYtMTQgMDg6MTE6MzUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSAgZWxlbWVudDogU3RvcmUgcmVzdWx0IG9mIHN0cnRvbCBpbiBhbiB1bnVzZWQgdmFyaWFibGUgdG8gcmVhbGx5IGZpeCBhIGNvbXBpbGVyIHdhcm5pbmcuLi4KKworMjAxMC0wNi0xMyAyMDo1MjozNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJICBlbGVtZW50OiBDYXN0IHJldHVybiB2YWx1ZSB0byB2b2lkIHRvIHByZXZlbnQgY29tcGlsZXIgd2FybmluZworCisyMDEwLTA2LTEzIDE4OjEyOjQ3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy9ydHBvb2wtdGVzdC5jOgorCSAgcnRwb29sLXRlc3Q6IFByZXZlbnQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlCisKKzIwMTAtMDYtMTMgMTg6MDU6NDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBiYXNlc2luazogTWFrZSBzdXJlIHdlIGhhdmUgYSB2YWxpZCBvYmplY3QgdG8gcmVuZGVyIGluIF9yZW5kZXJfb2JqZWN0KCkKKworMjAxMC0wNi0xMyAxODowMDoyMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R2YWx1ZS5jOgorCSAgZ3N0dmFsdWU6IEFkZCBzb21lIGFzc2VydGlvbiBndWFyZHMgYWdhaW5zdCBpbnZhbGlkIHBhcmFtZXRlcnMgdG8gcHVibGljIEFQSQorCisyMDEwLTA2LTEzIDE3OjA4OjQ4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgUmVtb3ZlIHNvbWUgZGVhZCBhc3NpZ25tZW50cworCisyMDEwLTA2LTEzIDE3OjA2OjQ0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvYmVuY2htYXJrcy9nc3RidWZmZXJzdHJlc3MuYzoKKwkgIGJ1ZmZlcnN0cmVzczogQ2hlY2sgaWYgdGhlIG51bWJlciBvZiB0aHJlYWRzIGFuZCBidWZmZXJzIG1ha2VzIHNlbnNlCisKKzIwMTAtMDYtMTMgMTc6MDM6NTMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9leGFtcGxlcy9tZXRhZGF0YS9yZWFkLW1ldGFkYXRhLmM6CisJICByZWFkLW1ldGFkYXRhOiBTdG9wIGlmIHNldHRpbmcgdGhlIHBpcGVsaW5lIHN0YXRlIGJhY2sgdG8gTlVMTCBmYWlscworCisyMDEwLTA2LTEzIDE2OjU5OjQwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvYmVuY2htYXJrcy9jb21wbGV4aXR5LmM6CisJICBjb21wbGV4aXR5OiBSZW1vdmUgZGVhZCBhc3NpZ25tZW50cyBhbmQgdW51c2VkIHZhcmlhYmxlcworCisyMDEwLTA2LTEzIDE2OjMxOjIxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkgIHF1ZXVlMjogRG9uJ3QgaWdub3JlIGZhaWx1cmUgdG8gb3BlbiB0aGUgdGVtcG9yYXJ5IGZpbGUgbG9jYXRpb24KKwkgIEFuZCBpbW1lZGlhdGVseSBsZWF2ZSB0aGUgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIG9uIGZhaWx1cmVzLgorCisyMDEwLTA2LTEzIDE2OjI3OjM5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiBGaXggaXRlcmF0b3IgYWdncmVnYXRpb24gb2YgYWxsIHBhZHMgaW4gdGhlIGludGVybmFsIGxpbmtzIGZhbGxiYWNrCisJICBnX2xpc3RfcHJlcGVuZCgpIHJldHVybnMgdGhlIG5ldyBoZWFkIG9mIHRoZSBsaXN0IGFuZCBub3QKKwkgIHVzaW5nIHRoaXMgd2lsbCBjcmVhdGUgYSBtZW1vcnkgbGVhayBhbmQgYSBzaW5nbGUtZWxlbWVudCBsaXN0LgorCisyMDEwLTA2LTEzIDE1OjI1OjI0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGl0ZXJhdG9yLmM6CisJICBpdGVyYXRvcjogQWRkIG5ldyBGSVhNRSBmb3IgMC4xMSBhbmQgdXBkYXRlIGdzdF9pdGVyYXRvcl9maW5kX2N1c3RvbSBkb2NzCisJICBUaGUgY29tcGFyZSBmdW5jdGlvbiBzaG91bGQgb25seSB1bnJlZiB0aGUgZWxlbWVudCBpZiBpdCdzCisJICBub3QgdGhlIG1hdGNoaW5nIGVsZW1lbnQuCisJICBBbHNvIHRoZSBGSVhNRSBpbiBfZm9sZCgpIGlzIG5vdCByZWxldmFudCBiZWNhdXNlIHRoZSByZWYvdW5yZWYKKwkgIGhhcHBlbnMgaW4gdGhlIGZvbGQgZnVuY3Rpb24uCisKKzIwMTAtMDYtMTMgMTE6MjQ6MTAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0aXRlcmF0b3IuYzoKKwkgIGl0ZXJhdG9yOiBJZiB0aGUgaXRlcmF0b3IgcmVzeW5jIGluIGZpbmRfY3VzdG9tKCkganVzdCByZXRyeQorCisyMDEwLTA2LTEyIDA4OjI1OjI0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIDczM2ZjYTkgdG8gNmRhM2JhYgorCisyMDEwLTA2LTEyIDA4OjA0OjQ3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6CisJICB2YWx1ZTogQWRkIHRlc3QgZm9yIGRlc2VyaWFsaXppbmcgZm91cmNjcworCisyMDEwLTA2LTExIDIyOjU2OjEzICswMDAwICBNYXJ0aW4gQmlzc29uIDxtYXJ0aW4uYmlzc29uQGdtYWlsLmNvbT4KKworCSogZ3N0L2dzdHZhbHVlLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKKwkgIHZhbHVlOiBGaXhlZCBzZXJpYWxpemF0aW9uIGZvciBzaG9ydCBmb3VyY2NzLgorCSAgIlkxNiAiIGFuZCAiWTggICIgd2VyZSBub3QgZGlzcGxheWVkIHByb3Blcmx5IGJlY2F1c2UgdGhlIHNwYWNlCisJICBjaGFyYWN0ZXIgaXMgbm90IGFsbnVtLiAgQSB1bml0IHRlc3QgaXMgYWxzbyBpbmNsdWRlZC4KKwkgIEZpeGVzIGJ1ZyAjNjIxMjgyLgorCisyMDEwLTA2LTExIDE2OjEyOjMzIC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKKwkgIGdzdC1pbnNwZWN0OiBwcmludCByYW5rcyB3aXRoIG9mZnNldHMgZnJvbSBuYW1lcworCisyMDEwLTA2LTA5IDEyOjM5OjU0IC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIGZhZDE0NWIgdG8gNzMzZmNhOQorCisyMDEwLTA2LTA5IDEyOjMwOjQ5IC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIDQ3NjgzYzEgdG8gZmFkMTQ1YgorCisyMDEwLTA2LTA5IDEyOjE3OjAzICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6CisJICBkZWJ1Z3V0aWxzOiBmaXggY29tbWVudCB0eXBvIGV2ZW4gbW9yZQorCisyMDEwLTA2LTA5IDEyOjA2OjUyICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSAgZG9jczogdXBkYXRlIGRvY3MgKGZvcm1hdCBhbmQgc2VhcmNoIHBhdGgpLgorCSAgUmVtb3ZlIG9ic29sZXRlIHhtbCByZWdpc3RyeSBjYWNoZSBleHRlbnNpb24uIFRlbGwgdGhhdCBjb250ZW50IGFuZCBsb2NhdGlvbiBpcworCSAgaW50ZXJuYWwgZGV0YWlsLiBEb2N1ZW1udCB0aGUgcGx1Z2luIHNlYXJjaCBvcmRlci4KKworMjAxMC0wNi0wOSAxMjowNjoxNiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0cGx1Z2lubG9hZGVyLmM6CisJICBjb21tZW50czogYWRkIGEgZmV3IGNvbW1lbnRzIHRvIHRoZSBzcGFyc2VseSBkb2N1bWVudGVkIHBsdWdpbiBsb2FkZXIKKworMjAxMC0wNi0wOCAxMTo0MToxMSArMDIwMCAgWmFoZWVyIEFiYmFzIE1lcmFsaSA8emFoZWVyYWJiYXNAbWVyYWxpLm9yZz4KKworCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKKwkgIGRlYnVndXRpbHM6IGZpeCBjb21tZW50IHR5cG8KKworMjAxMC0wNi0wOCAxMjoxMjo0MiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSAgY2FwczogdXNlIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmVfdW5jaGVja2VkKCkgbWFjcm8gb25jZSBtb3JlCisKKzIwMTAtMDYtMDggMTI6MTA6MzYgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdGNhcHMuYzoKKwkgIGNhcHM6IHVzZSBhIHNhZmVyIG5hbWUgZm9yIHRlbXBvcmFyeSB2YXIuIHRvIG5vdCBzaGFkb3cgb25lIGZyb20gb3V0ZXIgc2NvcGUKKworMjAxMC0wNi0wNyAxMjoyMDo0MSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0dmFsdWUuYzoKKwkgIHZhbHVlOiB1c2UgZ2xpYiB0eXBlcyBpbiBtb3JlIHBsYWNlcworCSAgRG8gYSBidW5jaCBvZiBjaGFyIC0+IGdjaGFyLCBpbnQgLT4gZ2ludCwgZG91YmxlIC0+IGdkb3VibGUgY2hhbmdlcy4KKworMjAxMC0wNi0wNyAxMjowNzozMCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0dmFsdWUuYzoKKwkgIHZhbHVlOiBqdXN0IGNvbXB1dGUgc3RybGVuKCkgb25jZQorCisyMDEwLTA2LTA3IDEwOjE2OjA0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSAgcXVldWUyOiBkb24ndCB3YWl0IGZvciBkYXRhIHdoZW4gRU9TCisJICBXaGVuIGluIGRvd25sb2FkIG1vZGUgYW5kIHdlIG5lZWQgdG8gcHJvdmlkZSBkYXRhIGZvciBhbiBvZmZzZXQgdGhhdCB3ZSBkb24ndAorCSAgaGF2ZSwgYWxzbyBwZXJmb3JtIGEgc2VlayB0byB0aGUgcmVxdWVzdGVkIGxvY2F0aW9uIHdoZW4gd2UgYXJlIEVPUy4gVGhlIHJlYXNvbgorCSAgd2h5IHdlIHNob3VsZG4ndCB3YWl0IGZvciBtb3JlIGRhdGEgaXMgYmVjYXVzZSBhZnRlciBFT1MsIHRoZXJlIHNpbXBseSB3aWxsIGJlCisJICBubyBtb3JlIGRhdGEgYW5kIHdlIGVuZCB1cCB3YWl0aW5nIGZvcmV2ZXIuCisJICBGaXhlcyAjNjIwNTAwCisKKzIwMTAtMDYtMDcgMDg6MTg6NDAgKzAyMDAgIE1hcnRpbiBCaXNzb24gPG1hcnRpbi5iaXNzb25AZ21haWwuY29tPgorCisJKiBnc3QvZ3N0dmFsdWUuYzoKKwkgIHZhbHVlOiBBZGQgc3VwcG9ydCBmb3IgcGFyc2luZyBzaG9ydCBmb3VyY2NzIGZyb20gc3RyaW5ncworCSAgRm9yIGV4YW1wbGUgIlkxNiAiIGFuZCAiWTggICIuCisKKzIwMTAtMDYtMDYgMjM6MTk6NTggKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKKwkgIGNoZWNrOiB1c2UgZ2xvYmJpbmcgZm9yIHNlbGVjdGl2ZSB0ZXN0IGludm9jYXRpb24gdmlhIEdTVF9DSEVDS1MKKwkgIFVzZSBnbGliIGdsb2JiaW5nIGluc3RlYWQgb2Ygc2ltcGxlIHN0cmluZyBtYXRjaGluZyB0byBhbGxvdyBlLmcuCisJICBHU1RfQ0hFQ0tTPSJ0ZXN0X2ludGVyKiIgbWFrZSBnc3QvZ3N0Y2Fwcy5jaGVjaworCisyMDEwLTA2LTA2IDIxOjIwOjIxICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHRlc3RzL2JlbmNobWFya3MvY2Fwc25lZ28uYzoKKwkgIGNhcHNuZWdvOiBhbHNvIG1lYXNzdXJlIHBpcGVsaW5lIGJ1aWxkaW5nIHRpbWUKKworMjAxMC0wNi0wNSAyMzoxODowOSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIGJhc2V0cmFuc2Zvcm06IGF2b2lkIGEgY2Fwcy1jb3B5CisJICBXZSBjYW4gc2ltcGx5IHRydW5jYXRlIHRoZSBjYXBzLCBhcyAnb3RoZXJjYXBzJyBpcyB0aGUgcmVzdWx0IG9mIGludGVyc2VjdAorCSAgb3BlcmF0aW9ucyBhbmQgdGh1cyBvdXJzIGFuZCB3cml0YWJsZS4KKworMjAxMC0wNi0wMyAwMTo0OTo1MSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSogZ3N0L2dzdGluZm8uYzoKKwkqIGdzdC9nc3RpbmZvLmg6CisJKiBnc3QvZ3N0bWluaW9iamVjdC5jOgorCSogZ3N0L2dzdG9iamVjdC5jOgorCSAgaW5mbzogYWRkIG5ldyBUUkFDRSBsb2cgbGV2ZWwgYW5kIG1vdmUgcmVmY291bnRpbmcgdGhlcmUgZnJvbSBMT0cgbGV2ZWwKKwkgIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gZWFzaWx5IGdldCBhICo6NSBkZWJ1ZyBsb2cgd2l0aG91dCBhbGwKKwkgIHRoZSByZWZjb3VudGluZyBub2lzZSwgYW5kIGRyYXN0aWNhbGx5IHJlZHVjZXMgdGhlIG51bWJlciBvZiBsaW5lcworCSAgb3V0cHV0IGZvciBhIG5vcm1hbCBsb2cgKDQ2bSB0byAyOG0gZm9yIGEgMjBtaW4gdmlkZW8pLiBUaGUgZnVsbCBsb2cKKwkgIGluY2x1ZGluZyByZWZjb3VudGluZyBpbmZvcm1hdGlvbiBjYW4gc3RpbGwgYmUgZ290dGVuIHVzaW5nICo6Ny4KKwkgIEZpeGVzICM2MjA0NjAuCisKKzIwMTAtMDYtMDQgMTc6MTA6MDUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIHV0aWxzOiBVc2UgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyBmb3Igc3RhbmRhcmQgcHJvcGVydGllcworCisyMDEwLTA2LTAzIDE3OjIxOjAwICswMjAwICBQaGlsaXBwZSBOb3JtYW5kIDxwaGlsQGJhc2UtYXJ0Lm5ldD4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgYmFzZXNpbms6IE1ha2UgZ3N0X2Jhc2Vfc2lua19xdWVyeSByZXR1cm4gVFJVRSBpZiB0aGUgc2VnbWVudCBxdWVyeSBzdWNjZWVkZWQuCisJICBGaXhlcyBidWcgIzYyMDQ5MC4KKworMjAxMC0wNi0wMSAyMzo0ODo1OSAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSAxN2Y4OWU1IHRvIDQ3NjgzYzEKKworMjAxMC0wNi0wMSAyMjo1NDoyMCAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSBmZDdjYTA0IHRvIDE3Zjg5ZTUKKworMjAxMC0wNS0yNCAxNzoyNTo1MiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWRzOiBJbXByb3ZlIHJlYWRhYmlsaXR5IGZvciBnc3RfcGFkX2ZpeGF0ZV9jYXBzKCkKKwkgIEp1c3QgdHJ1bmNhdGUgYW5kIHRoZW4gZml4YXRlLiBXZSBjaGVjayBmb3IgZW1wdHkgY2FwcyBpbiB0aGUgYmVnaW4gYW5kIGEKKwkgIGZpeGF0ZS1mdW5jIHRoYXQgZW1wdGllcyBhIGNhcHMgd291bGQgYmUgYnJva2VuLiBJdCBhbHNvIGhlbHBzIGxhenkgY2FwcyBpbXBsLgorCSAgaW4gYnVnIDYxODg1MyBieSBhdm9pZGluZyB0aGUgZ3N0X2NhcHNfZ2V0X3NpemUoKS4KKworMjAxMC0wNi0wMSAxMTo0NjoxNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6CisJICBjaGVjazogbG9nIHBsdWdpbnMgYXZhaWxhYmxlIHRvIHVuaXQgdGVzdHMgYW5kIHRoZWlyIHBhdGhzCisKKzIwMTAtMDYtMDEgMTE6NDU6MTEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBNYWtlZmlsZS5hbToKKwkgIHdpbjMyOiBjb21taXQgTWFrZWZpbGUgY2hhbmdlcyBmb3Igd2luMzItdXBkYXRlIGFzIHdlbGwKKworMjAxMC0wNS0zMSAxNToxNDo1MyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHdpbjMyL2NvbW1vbi9nc3RtYXJzaGFsLmM6CisJKiB3aW4zMi9jb21tb24vZ3N0bWFyc2hhbC5oOgorCSAgd2luMzI6IGFkZCBwcmUtZ2VuZXJhdGVkIHZlcnNpb25zIG9mIGdzdG1hcnNoYWwuW2NoXSBhcyB3ZWxsCisJICBhbmQgcHV0IHRoZW0gbmV4dCB0byB0aGUgcHJlLWdlbmVyYXRlZCBlbnVtdHlwZXMgZmlsZXMgZm9yIHRob3NlCisJICBub3QgdXNpbmcgYXV0b3Rvb2xzIGZvciBidWlsZGxpbmcgR1N0cmVhbWVyLgorCisyMDEwLTA1LTI3IDE1OjEwOjM0ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svbGlicy9hZGFwdGVyLmM6CisJICB0ZXN0czogYWxzbyBjaGVjayBmb3IgYWRhcHRlciBidWZmZXIgbWVyZ2luZyBpbiB1bml0IHRlc3QKKworMjAxMC0wNS0yNyAxMjo1MDoyMiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgorCSAgYWRhcHRlcjogZml4IF90cnlfdG9fbWVyZ2VfdXAKKwkgIFRoYXQgaXMsIHByb3ZpZGUgY29ycmVjdCByZXR1cm4gdmFsdWUgKGFzIGRvY3VtZW50ZWQpLCBhbmQgYWN0dWFsbHkKKwkgIGxvb3AgdG8gY29uc2lkZXIgbW9yZSB0aGFuIHRoZSBmaXJzdCAyIGJ1ZmZlcnMuCisKKzIwMTAtMDUtMjcgMTI6NDg6MTggKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6CisJICBjb2xsZWN0cGFkczogZml4IGRvY3VtZW50YXRpb24gZ2xpdGNoCisKKzIwMTAtMDUtMjYgMTE6NTQ6MzUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb21tb246CisJICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKKwkgIEZyb20gMzU3YjBkYiB0byBmZDdjYTA0CisKKzIwMTAtMDUtMjUgMTk6MTc6NDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RiaW4uYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RiaW4uYzoKKwkgIGdzdGJpbjogdW5sb2NrIF9nZXRfc3RhdGUoKSBvbiBlcnJvcgorCSAgV2hlbiBhbiBlcnJvciBtZXNzYWdlIGlzIHJlY2VpdmVkIG9uIHRoZSBidXMsIG1hcmsgdGhlIGJpbiBhcyBiZWluZyBpbiB0aGUgZXJyb3IKKwkgIHN0YXRlIGFuZCB1bmxvY2sgYWxsIGN1cnJlbnQgX2dldF9zdGF0ZSgpIGNhbGxzIHdpdGggYW4gZXJyb3IuCisJICBGaXhlcyAjNTA1NzcwCisKKzIwMTAtMDUtMjQgMTk6MDc6MzUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFnc2V0dGVyLmM6CisJICBjaGVja3M6IGFkZCBtdWx0aS10aHJlYWQgdGVzdCBmb3IgdGFnc2V0dGVyCisJICBTZWUgIzYxOTUzMy4KKworMjAxMC0wNS0yNCAxOTowNjo0NSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R0YWdzZXR0ZXIuYzoKKwkgIHRhZ3NldHRlcjogbWFrZSBzdXJlIG9ubHkgb25lIHRocmVhZCBjcmVhdGVzIHRoZSBUYWdEYXRhCisKKzIwMTAtMDUtMjQgMTg6MTY6MTkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dGFnc2V0dGVyLmM6CisJICB0YWdzZXR0ZXI6IHByb3RlY3QgdGFnc2V0dGVyIG9wZXJhdGlvbnMgd2l0aCBhIGxvY2sKKwkgIFNvIHdlIGRvbid0IGNyYXNoIHdoZW4gYSBtdXhlciB0cmllcyB0byBhZGQgdGFncyBmcm9tIHR3bworCSAgdGhyZWFkcyBhdCB0aGUgc2FtZSB0aW1lLCBlZy4gYmVjYXVzZSBpdCByZWNlaXZlZCB0YWcgZXZlbnRzCisJICBvbiB0d28gaW5wdXQgcGFkcyBzaW11bHRhbmVvdXNseS4KKwkgIFNlZSAjNjE5NTMzLgorCisyMDEwLTA1LTIyIDIzOjI2OjE2ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RjYXBzLmM6CisJICBjYXBzOiB1c2Ugb3VyIG1hY3JvcyBtb3JlIG9mdGVuIGluIHRoZSBjb2RlCisKKzIwMTAtMDUtMjIgMjM6MDc6MTAgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdGNhcHMuYzoKKwkgIGNhcHM6IGFkZCBhcHBlbmRfc3RydWN0dXJlX3VuY2hlY2tlZAorCSAgVGhpcyBpcyB1c2VmdWwgd2hlbiB3ZSBrbm93IHRoYXQgY2FwcyBpcyAhTlVMTCwgd3JpdGFibGUgYW5kIHN0cnVjdHVyZSBpcworCSAgIU5VTEwgdG9vLgorCisyMDEwLTA1LTIyIDIyOjQ2OjQwICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RjYXBzLmM6CisJICB0ZXN0czogcmVuYW1lIHRlc3RzdWl0ZQorCSAgUHJldmlvdXMgbmFtZSB3YXMgb25seSBhcHBsaWNhYmxlIHRvIGEgZmV3IG9mIHRoZSB0ZXN0cy4KKworMjAxMC0wNS0yMiAyMjo0NTozMyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBkb2NzOiB4cmVmIGZ1bmN0aW9uIG5hbWUKKworMjAxMC0wNS0yMiAyMjo0NDowMiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSAgY2FwczogdXNlIG91ciBtYWNvcyBtb3JlCisKKzIwMTAtMDUtMjIgMjI6MzM6MDkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZG9jcy9yYW5kb20vZW5zb25pYy9sYXp5Y2Fwcy50eHQ6CisJICBkZXNpZ246IG1vcmUgcGxhbm5pbmcgb24gbGF6eSBjYXBzLgorCisyMDEwLTA1LTIyIDEwOjAxOjQ0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuaDoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgc3RydWN0dXJlOiBBUEk6IEFkZCBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9zdHJpbmcoKQorCisyMDEwLTA1LTE5IDE2OjIxOjQ5ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGRvY3MvcmFuZG9tL2Vuc29uaWMvbGF6eWNhcHMudHh0OgorCSAgZGVzaWduOiBjb2xsZWN0IGlkZWFzIGZvciBoYXZpbmcgbGF6eSBjYXBzCisJICBEZXNpZ24gZG9jIGZvciBoYXZpbmcgb24gdGhlIGZseSBldmFsdWF0ZWQgY2FwcyAoc2VlIGJ1ZyAjNjE4ODUzKS4KKworMjAxMC0wNS0xOSAxNTo1NzowOCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0YnVzLmM6CisJICBkb2NzOiBhZGQgbGlua3MgZm9yIEdTb3VyY2UgcHJpb3JpdGllcworCSAgTm93IGl0IGlzIHhyZWZmZWQgd2l0aCB0aGUgZ2xpYiBkb2NzLCB3aGVyZSB0aGUgcHJpb3JpdHkgc2NhbGUgaXMgZXhwbGFpbmVkLgorCisyMDEwLTA1LTE5IDE0OjA4OjI2ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHRlc3RzL2JlbmNobWFya3MvY2Fwc25lZ28uYzoKKwkgIGJlbmNobWFyazogYWRkIGNvbW1hbmRsaW5lIHBhcmFtZXRlcnMgZm9yIGNhcHNuZWdvCisJICBBbGxvdyB0byBzcGVjaWZ5IHRoZSBncmFwaCBzaXplIGFuZCBvZmZlciB0d28gZmxhdm91cnMgKGF1ZGlvL3ZpZGVvKS4KKworMjAxMC0wNS0xOSAwOTo1Njo1MSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiB0ZXN0cy9iZW5jaG1hcmtzLy5naXRpZ25vcmU6CisJKiB0ZXN0cy9iZW5jaG1hcmtzL01ha2VmaWxlLmFtOgorCSogdGVzdHMvYmVuY2htYXJrcy9jYXBzbmVnby5jOgorCSAgYmVuY2htYXJrczogYWRkIGEgYmVuY2htYXJrIGZvciBjYXBzbmVnb3RpYXRpb24KKwkgIFRoZSB0ZXN0IGJ1aWxkcyBhIHRyZWUgbGlrZSBncmFwaCBoYXZpbmcgY29udmVyc2lvbiBhbmQgYmFzZXRyYW5zZm9ybSBlbGVtZW50cy4KKworMjAxMC0wNS0xOCAxNzo1MTowMSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiB0ZXN0cy9iZW5jaG1hcmtzL2NhcHMuYzoKKwkqIHRlc3RzL2JlbmNobWFya3MvY29tcGxleGl0eS5jOgorCSogdGVzdHMvYmVuY2htYXJrcy9nc3RidWZmZXJzdHJlc3MuYzoKKwkqIHRlc3RzL2JlbmNobWFya3MvbWFzcy1lbGVtZW50cy5jOgorCSAgYmVuY2htYXJrczogdXNlIGdzdF91dGlsX2dldF90aW1lc3RhbXAoKSBpbnN0ZWFkIG9mIG93biBpbXBsZW1lbnRhdGlvbgorCisyMDEwLTA1LTE4IDE4OjM4OjE0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBiYXNlc2luazogYWRkIGppdHRlciB0byBkZWJ1ZyBvdXRwdXQKKworMjAxMC0wNS0xOCAxODozNTo1OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKKwkgIG1pbmlvYmplY3Q6IGNsZWFudXAgdHlwZSByZWdpc3RyYXRpb24gYSBsaXR0bGUKKwkgIFdlIGNhbiBtYWtlIHNvbWUgc3RydWN0cyBjb25zdCBzdGF0aWMgd2l0aCBsaXR0bGUgZWZmb3J0LgorCisyMDEwLTA1LTE3IDEzOjA5OjE1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiBkb24ndCBwcmludCBXQVJOSU5HIGRlYnVnIHN0YXRlbWVudHMgZm9yIG5vcm1hbCB0aGluZ3MgbGlrZSBFT1MsIHBhcnQgSUkKKworMjAxMC0wNS0xNCAxODoyMjo0MSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSA0ZDY3YmQ2IHRvIDM1N2IwZGIKKworMjAxMC0wNS0xNCAxMTo1MjowMyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSAgY2FwczogY29tbWVudCBhbmQgd2hpdGVzcGFjZSBjbGVhbnVwCisJICBNYWtlIGNvbW1lbnQgbW9yZSBzcGVjaWZpYywgcmVwb3NpdGlvbiBpdCBhbmQgYWRkIG1vcmUgb2YgdGhlIGtpbmQuCisJICBNb3ZlIG9uZSBpZmRlZidlZCBmdW5jdGlvbiBhcm91bmQuCisKKzIwMTAtMDUtMTMgMDg6MjE6MzcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIHV0aWxzOiBTaW1wbGlmeSBmcmFjdGlvbnMgYmVmb3JlIGRvaW5nIGNhbGN1bGF0aW9ucyB0aGF0IGNvdWxkIGNhdXNlIG92ZXJmbG93cworCSAgLi4uIHRvIHByZXZlbnQgc29tZSB1bm5lY2Vzc2FyeSBvdmVyZmxvd3MgZnJvbSBoYXBwZW5lbmluZy4KKworMjAxMC0wNS0xMyAwODowMDowOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R1dGlscy5jOgorCSAgdXRpbHM6IEdDRCBpcyAwIGlmIGJvdGggcGFyYW1ldGVycyBhcmUgMCwgZG9uJ3QgZGl2aWRlIGJ5IHplcm8KKwkgIEFuZCB0dXJuIG92ZXJmbG93IGNoZWNrcyBmcm9tIGFzc2VydGlvbnMgaW50byBzaW1wbGUgY2hlY2tzIHRvCisJICByZXR1cm4gRkFMU0UuCisKKzIwMTAtMDUtMTMgMDc6NTE6MTQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIHV0aWxzOiBTaW1wbGlmeSByZXN1bHQgb2YgZ3N0X2ZyYWN0aW9uX211bHRpcGx5KCkKKworMjAxMC0wNS0xMCAxMzoyNTowNCAtMDQwMCAgVHJpc3RhbiBNYXR0aGV3cyA8dHJpc3RhbkBzYXQucWMuY2E+CisKKwkqIGRvY3MvZmFxL3VzaW5nLnhtbDoKKwkgIGZhcTogdXBkYXRlZCBsaW5lIGFib3V0IGphY2sgb3V0cHV0CisKKzIwMTAtMDUtMDMgMTE6MzI6MjAgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIHRlc3RzL2NoZWNrL2xpYnMvYnl0ZXJlYWRlci5jOgorCSAgdGVzdHM6IFJlYWQgcmV0dXJuIHZhbHVlIHRvIG1ha2UgY2xhbmcvaWNjIGhhcHB5CisKKzIwMTAtMDUtMDYgMTY6NDE6MDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIFJldmVydCAicGFkOiBkb24ndCBjaGVjayB0d2ljZSBmb3IgY2hhbmdlZCBjYXBzIHBlciBwdXNoIgorCSAgV2UgbmVlZCB0byBjaGVjayB0aGUgcGFkIGNhcHMgb24gdGhlIHNyY3BhZCBhcyB3ZWxsIGFzIG9uIHRoZSBzaW5rcGFkLiBSZXZlcnQKKwkgIHRoaXMgY29tbWl0IGFzIGl0IHJlbW92ZXMgdGhlIGNoZWNrIG9uIHRoZSBzcmNwYWQgYW5kIGNhbiBsZWF2ZSB0aGUgc3JjcGFkCisJICB1bm5lZ290aWF0ZWQgKG9yIG5lZ290aWF0ZWQgd2l0aCB3cm9uZyBjYXBzKQorCSAgVGhpcyByZXZlcnRzIGNvbW1pdCAwN2RjMWU1YjQ5NTgwYTg5YmZlZjI3ZmYyNzQ3NmQ1MWZiM2NlMmMyLgorCisyMDEwLTA1LTA2IDE3OjAyOjQ5ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogZG9uJ3QgY2hlY2sgdHdpY2UgZm9yIGNoYW5nZWQgY2FwcyBwZXIgcHVzaAorCSAgZ3N0X3BhZF9jaGFpbl9kYXRhX3VuY2hlY2tlZCgpIGRvZXMgdGhlIHNhbWUgY2hlY2sgYWxyZWFkeS4KKworMjAxMC0wNS0wNiAxNjo1MToxNiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIGJhc2VzcmM6IHJlZmxvdyB0byB0cnVuY2F0ZSBjYXBzIGp1c3Qgb25jZQorCSAgV2UgZ2V0IHdyaXRhYmxlIGNhcHMgZnJvbSB0aGUgaW50ZXJzZWN0aW9uICh1bmxlc3MgaXQgZmFpbGVkKS4gQXMgd2UgdHJ1bmNhdGUKKwkgIHRob3NlIGFueXdheSwgd2UgZG9uJ3QgbmVlZCB0byBtYW51YWx5IGNvcHkgdGhlIGZpcnN0IHN0cnVjdHVyZS4KKworMjAxMC0wNS0wNCAxMzoyOTowMiArMDQwMCAg0KDRg9GB0LvQsNC9INCY0LbQsdGD0LvQsNGC0L7QsiA8bHJuMTk4NkBnbWFpbC5jb20+CisKKwkqIHRvb2xzL2dzdC1ydW4uYzoKKwkgIHRvb2xzOiBmaXggZ3N0LXJ1biB3cmFwcGVyIHRvIHdvcmsgb24gV2luZG93cworCSAgRml4ZXMgIzYxNzYyNQorCisyMDEwLTA1LTAzIDAwOjI2OjA0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuaDoKKwkgIGRvY3M6IGRvY3VtZW50IHRoYXQgZ3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmcqKCkgd3JpdGVzIHRoZSB0ZXJtaW5hdG9yIHRvbworCisyMDEwLTA1LTA1IDEyOjAxOjUwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkLmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkgIGRvY3M6IGNsYXJpZnkgdGhlIHB1bGxfcmFuZ2UgZnVuY3Rpb25zCisJICBDbGFyaWZ5IHRoZSBnc3RfcGFkX3B1bGxfcmFuZ2UoKSwgR3N0QmFzZVNyYzo6Y3JlYXRlKCksIGdzdF9wYWRfZ2V0X3JhbmdlKCkKKwkgIGFuZCBHc3RQYWRHZXRSYW5nZSBmdW5jdGlvbnMgYSBsaXR0bGUuCisJICBGaXhlcyAjNjE3NzMzCisKKzIwMTAtMDUtMDQgMTE6NDU6MDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgYmFzZXNyYzogaW1wcm92ZSBkZWJ1Z2dpbmcKKworMjAxMC0wNC0zMCAxMToyNzoxMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHV0aWxzLmM6CisJICB1dGlsczogdXNlIHJlZmZlZCBfZ2V0X2NhcHMoKSB2ZXJzaW9uCisJICBXZSBkb24ndCBuZWVkIHRvIGhhdmUgYSB3cml0YWJsZSBjb3B5IHNvIHdlIGNhbiB1c2UgdGhlIF9yZWZmZWQKKwkgIHZlcnNpb24gaW5zdGVhZC4KKworMjAxMC0wNC0yOSAyMTo1NzoxNSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSogZ3N0L2dzdHRhZ2xpc3QuaDoKKwkgIHRhZ3M6IEFkZHMgZ2VvIGxvY2F0aW9uIGRpcmVjdGlvbiB0YWdzCisJICBBZGRzIDMgbmV3IGdlbyBsb2NhdGlvbiB0YWdzIGludm9sdmluZyBkaXJlY3Rpb24gYW5kCisJICBtb3ZlbWVudCBvZiBjYXB0dXJlLiBUaG9zZSBhcmU6CisJICBBUEk6IEdTVF9UQUdfR0VPX0xPQ0FUSU9OX0NBUFRVUkVfRElSRUNUSU9OCisJICBBUEk6IEdTVF9UQUdfR0VPX0xPQ0FUSU9OX01PVkVNRU5UX0RJUkVDVElPTgorCSAgQVBJOiBHU1RfVEFHX0dFT19MT0NBVElPTl9NT1ZFTUVOVF9TUEVFRAorCSAgRml4ZXMgIzYxNzIyMworCisyMDEwLTA0LTE2IDA2OjU3OjA1IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3R0YWdsaXN0LmM6CisJKiBnc3QvZ3N0dGFnbGlzdC5oOgorCSAgdGFnczogQWRkcyBHU1RfVEFHX0RFVklDRV9NQU5VRkFDVFVSRVIgYW5kIEdTVF9UQUdfREVWSUNFX01PREVMCisJICBBZGRzIHRob3NlIG5ldyB0YWdzIHRvIGRlc2NyaWJlIHRoZSBkZXZpY2UgbWFudWZhY3R1cmVyIGFuZAorCSAgbW9kZWwgdXNlZCB0byBjcmVhdGUgbWVkaWFzLgorCSAgQVBJOiBHU1RfVEFHX0RFVklDRV9NQU5VRkFDVFVSRVIKKwkgIEFQSTogR1NUX1RBR19ERVZJQ0VfTU9ERUwKKwkgIEZpeGVzICM2MTU5NDEKKworMjAxMC0wNS0wMiAxOTo0Mzo1NSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvcHdnL2FkdmFuY2VkLXRhZ2dpbmcueG1sOgorCSAgcHdnOiByZW1vdmUgY29uZnVzaW5nIG1ldGFkYXRhIGV4YW1wbGUgd2l0aCAwLjggY29kZQorCSAgRml4ZXMgIzUzNDMxNC4KKworMjAxMC0wNS0wMiAxOTozMDozMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLW1ldGFkYXRhLnhtbDoKKwkgIG1hbnVhbDogYWRkIG1pbmltYWwgdGFnIHJlYWRpbmcgZXhhbXBsZQorCSAgU2hvdWxkIHByb2JhYmx5IHB1dCB0aGF0IGludG8gdGVzdHMvZXhhbXBsZXMgYW5kIGZpZ3VyZSBvdXQgaG93IHRvCisJICBnZXQgaXQgaW5jbHVkZWQgYXV0b21hdGljYWxseSwgYnV0IGNhbid0IGJlIGJvdGhlcmVkIHJpZ2h0IG5vdy4KKworMjAxMC0wNC0zMCAxMzoxMDoxNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGdzdC9nc3QuYzoKKwkgIEJ1bXAgR0xpYiByZXF1aXJlbWVudCB0byAyLjIwCisJICBTZWUgaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvd2lraS9SZWxlYXNlUGxhbm5pbmcvR0xpYlJlcXVpcmVtZW50CisKKzIwMTAtMDQtMjkgMjM6Mjk6MzAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJICBidWZmZXI6IG9ubHkgd2FybiBpZiBtZXRhZGF0YSBpcyBub3Qgd3JpdGFibGUgd2hlbiBpdCBzaG91bGQgYmUsIGRvbid0IHJldHVybiBhcyB3ZWxsCisJICBNYWtlIHN1cmUgd2UgZXhlY3V0ZSB0aGUgc2FtZSBjb2RlIHBhdGggaW4gZ2l0IHZlcnNpb25zIGFuZCBpbiByZWxlYXNlcywKKwkgIHNvIGp1c3Qgd2FybiB3aGVuIG1ldGFkYXRhIGlzbid0IHdyaXRhYmxlIHdoZW4gd2Ugd2FudCBpdCB0byBiZSBpbnN0ZWFkCisJICBvZiBiYWlsaW5nIG91dC4KKworMjAxMC0wNC0yOSAyMzoyNjo1NCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJICBlbGVtZW50OiBtYWtlICdhZGRpbmcgZmx1c2hpbmcgcGFkJyB3YXJuaW5nIG1vcmUgdXNlZnVsCisJICBUaGlzIGlzIGEgcHJldHR5IGNvbW1vbiBpc3N1ZSB3aXRoIGdob3N0IHBhZHMsIGxldCdzIG1ha2UKKwkgIHRoZSB3YXJuaW5nIG1vcmUgaGVscGZ1bCBhbmQgdGVsbCBwZW9wbGUgd2hhdCB0aGV5IG5lZWQKKwkgIHRvIGRvIHRvIGZpeCBpdC4KKworMjAxMC0wNC0yOCAxNzoxNTo0MSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiB0b29scy9nc3QtbGF1bmNoLjEuaW46CisJKiB0b29scy9nc3QtbGF1bmNoLmM6CisJICBnc3QtbGF1bmNoOiBhZGQgLXAgb3B0aW9uIHRvIGRpc2FibGUgcGxheSBoYW5kbGVyLgorCSAgU2FtZSBsb2dpYyBhcyBmb3IgdGhlIGZhdWx0IGhhbmRsZXIuIFRoaXMgaXMgdXNlZnVsIGZvciBzb21lIGRlYnVnL3RyYWNpbmcgdG9vbHMKKwkgIHRoYXQgbmVlZCB0byBncmFiIFNJR1VTUjEgYW5kIFNJR1VTUjIgdGhlbSBzZWxmLgorCisyMDEwLTA0LTE1IDEwOjM2OjUyICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJhc2VzaW5rOiBpbXBsZW1lbnQgcGVyY2VudGFnZSBwb3NpdGlvbiBhbmQgZHVyYXRpb24gcXVlcmllcworCSAgSWYgdXBzdHJlYW0gZG9lcyBub3QgaGFuZGxlIHRoZW0sIHRoZW4gaW1wbGVtZW50IHRob3NlIG91cnNlbGYuCisKKzIwMTAtMDQtMTQgMTc6NDc6MzYgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgYmFzZXNpbms6IHVzZSBnc3RfcGFkX3BlZXJfcXVlcnkgaW5zdGVhZCBvZiByZWludmVudGluZy4KKworMjAxMC0wNC0xNCAxNzo0Njo1NSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIHF1ZXJpZXM6IGFkZCBtb3JlIGxvZ2dpbmcKKwkgIExvZyBodW1hbiByZWFkYWJsZSBmb3JtYXRzIGFuZCBsb2cgcXVlcnkgcmVzdWx0LgorCisyMDEwLTA0LTE5IDIwOjM1OjM2ICswMjAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIGNhcHM6IERvIG5vdCBhbGxvdyBmaXhhdGluZyBlbXB0eSBjYXBzCisJICBQYXNzaW5nIGVtcHR5IGNhcHMgdG8gZ3N0X3BhZF9maXhhdGVfY2FwcygpIGlzIGludmFsaWQsIGFzIGVtcHR5IGNhcHMKKwkgIGNhbm5vdCBiZSBmaXhhdGVkLgorCisyMDEwLTA0LTI2IDIxOjUyOjA3ICswMjAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+CisKKwkqIGdzdC9nc3RjYXBzLmg6CisJICBjYXBzOiBVc2UgR19HTlVDX1dBUk5fVU5VU0VEX1JFU1VMVCBmb3IgbWFrZV93cml0YWJsZSgpCisJICBQZW9wbGUgb2Z0ZW4gY2FsbAorCSAgZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAoY2Fwcyk7CisJICBpbnN0ZWFkIG9mCisJICBjYXBzID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAoY2Fwcyk7CisJICBhbmQgY2F1c2UgYSBidWcuIFdhcm5pbmcgYWJvdXQgYW4gdW51c2VkIHJldHVybiB2YWx1ZSBoZWxwcyBoZXJlLgorCSAgU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTY1NDEjYzIgZm9yIGFuIGV4YW1wbGUuCisKKzIwMTAtMDQtMjMgMDY6MjQ6NTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZXJyb3IuYzoKKwkgIGdzdDogVXNlIEdFcnJvciBib3hlZCB0eXBlIGZyb20gR09iamVjdCAyLjI1LjIgaW5zdGVhZCBvZiBvdXIgb3duIGlmIHBvc3NpYmxlCisKKzIwMTAtMDQtMjkgMTQ6NTA6MzYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgorCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgorCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKKwkgIEJhY2sgdG8gZGV2ZWxvcG1lbnQuCisKKzIwMTAtMDQtMTUgMTc6MTE6NDYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RldmVudC5oOgorCSAgZG9jczogYWRkIHNvbWUgbW9yZSBkb2NzIGZvciB0aGUgZXZlbnRzCisKKz09PSByZWxlYXNlIDAuMTAuMjkgPT09CisKKzIwMTAtMDQtMjcgMjM6NDI6MTIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBDaGFuZ2VMb2c6CisJKiBORVdTOgorCSogUkVMRUFTRToKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6CisJKiBnc3RyZWFtZXIuZG9hcDoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6CisJICBSZWxlYXNlIDAuMTAuMjkKKworMjAxMC0wNC0yNyAyMzo0MDo0MSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBvL2FmLnBvOgorCSogcG8vYXoucG86CisJKiBwby9iZS5wbzoKKwkqIHBvL2JnLnBvOgorCSogcG8vY2EucG86CisJKiBwby9jcy5wbzoKKwkqIHBvL2RhLnBvOgorCSogcG8vZGUucG86CisJKiBwby9lbl9HQi5wbzoKKwkqIHBvL2VzLnBvOgorCSogcG8vZXUucG86CisJKiBwby9maS5wbzoKKwkqIHBvL2ZyLnBvOgorCSogcG8vaHUucG86CisJKiBwby9pZC5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vamEucG86CisJKiBwby9uYi5wbzoKKwkqIHBvL25sLnBvOgorCSogcG8vcGwucG86CisJKiBwby9wdF9CUi5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vcncucG86CisJKiBwby9zay5wbzoKKwkqIHBvL3NxLnBvOgorCSogcG8vc3IucG86CisJKiBwby9zdi5wbzoKKwkqIHBvL3RyLnBvOgorCSogcG8vdWsucG86CisJKiBwby92aS5wbzoKKwkqIHBvL3poX0NOLnBvOgorCSogcG8vemhfVFcucG86CisJICBVcGRhdGUgLnBvIGZpbGVzCisKKzIwMTAtMDQtMjcgMDk6NDI6MDUgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6CisJICB0ZXN0czogYWRkIG1vcmUgdGVzdHMgZm9yIGNvbnRyb2xsZXIKKwkgIFRoZSB0ZXN0cyB2ZXJpZnkgdGhhdCBidWcgIzYxNjg0NiBpcyBpbmRlZWQgZml4ZWQuCisKKzIwMTAtMDQtMjYgMTU6NDM6MTcgKzAyMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KKworCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6CisJICBjb250cm9sbGVyOiBGaXggZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfZmluZF9jb250cm9sX3BvaW50X2l0ZXIKKwkgIFRoZSBsb2dpYyBpbiB0aGF0IGZ1bmN0aW9uIGlzIGJyb2tlbi4gVmFyaW91cyBOVUxMLWNoZWNraW5nIGJhbmRhaWRzIGZvcgorCSAgZ3VhcmFudGVlZCBub24tTlVMTCB2YXJpYWJsZXMgZGlkbid0IGV2ZW4gaGVscCB0aGVyZS4KKwkgIFRoaXMgcGF0Y2ggdXBkYXRlcyB0aGUgZnVuY3Rpb24gdG8gY2hlY2sgaWYgYSBwcmV2aW91cyBpdGVtIGV4aXN0cworCSAgYmVmb3JlIGZldGNoaW5nIGl0IGluc3RlYWQgb2YgYWZ0ZXIuIFRoaXMgbWFrZXMgYWxsIG90aGVyIHRlc3RzCisJICB1bm5lY2Vzc2FyeS4KKwkgIEluIHBhcnRpY3VsYXIsIGl0IG1ha2VzIHRoZSBjaGVjayBmb3IgYW4gZW1wdHkgbGlzdCB1bm5lY2Vzc2FyeSwgYmVjYXVzZQorCSAgZm9yIGVtcHR5IGxpc3RzIHRoZSBvbmx5IGl0ZXIgaXMgdGhlIGJlZ2luIGl0ZXIgKGFuZCB0aGUgZW5kIGl0ZXIpIGFuZAorCSAgc28gdGhlIG5ldyBjaGVjayBjYXRjaGVzIHRoYXQgY2FzZS4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTY4NDYKKworMjAxMC0wNC0yNSAyMToxNTo1MSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKKwkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6CisJICAwLjEwLjI4LjMgcHJlLXJlbGVhc2UKKworMjAxMC0wNC0yMCAxNzoxNzozOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdHJlYW1lci5kb2FwOgorCSAgZG9hcDogdXBkYXRlIHJlcG9zaXRvcnkgaW5mbyBmcm9tIGN2cy0+Z2l0IGFuZCBtYWludGFpbmVycworCisyMDEwLTA0LTIzIDE0OjM5OjIwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIGZjODU4NjcgdG8gNGQ2N2JkNgorCisyMDEwLTA0LTE2IDIwOjA5OjQwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9wd2cvYnVpbGRpbmctYm9pbGVyLnhtbDoKKwkqIGRvY3MvcHdnL3B3Zy54bWw6CisJICBkb2NzOiBDb25zaXN0ZW50bHkgdXNlIE15RmlsdGVyIGluc3RlYWQgb2Ygc29tZXRpbWVzIEV4YW1wbGVGaWx0ZXIgaW4gdGhlIGV4YW1wbGUKKwkgIEZpeGVzIGJ1ZyAjNjE1NTc5LgorCisyMDEwLTA0LTE2IDE0OjIyOjE4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5oOgorCSAgcGFkOiBhZGQgZW51bXMgZm9yIGN1c3RvbSBmbG93IHJldHVybiBzdWNjZXNzIGFuZCBlcnJvciBjb2RlcworCSAgVGhpcyB3YXkgcGVvcGxlIGNhbiBqdXN0ICNkZWZpbmUgdGhlaXIgb3duIGN1c3RvbSBmbG93IHJldHVybnMgdG8KKwkgIG9uZSBvZiB0aGVzZSB3aXRob3V0IGhhdmluZyB0aGUgY29tcGlsZXIgKGVzcC4gZ2NjLTQuNSkgY29tcGxhaW4KKwkgIGFib3V0IGNvbXBhcmluZyBpbnRlZ2VycyB0byBhbiBlbnVtIG9yIHRoZSBlbnVtIG5vdCBiZWluZyBsaXN0ZWQKKwkgIEZpeGVzICM2MTU4ODAuCisJICBBUEk6IEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTXzEKKwkgIEFQSTogR1NUX0ZMT1dfQ1VTVE9NX1NVQ0NFU1NfMgorCSAgQVBJOiBHU1RfRkxPV19DVVNUT01fRVJST1JfMQorCSAgQVBJOiBHU1RfRkxPV19DVVNUT01fRVJST1JfMgorCisyMDEwLTA0LTE1IDIyOjA1OjM4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmM6CisJICBsZm9jb250cm9sc291cmNlOiBVc2UgY29ycmVjdCBzZXR0ZXIgZm9yIGRvdWJsZSBHVmFsdWVzCisKKzIwMTAtMDQtMTUgMTE6MDg6MDMgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dGFnbGlzdC5oOgorCSAgdGFnczogZG9jIGZpeGVzCisJICBBZGRzIG1pc3NpbmcgJzonIHRvIHRhZ3MgZG9jcworCisyMDEwLTA0LTE1IDExOjM4OjE5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJpbi5jOgorCSAgYmluOiBmaXggYm9ndXMgdmFyaWFibGUgdHlwZQorCSAgVGhlIHJlc3VsdCBvZiBnc3RfaXRlcmF0b3JfZmluZF9jdXN0b20oKSBpcyBub3QgYSBHc3RJdGVyYXRvciAqLgorCisyMDEwLTA0LTE0IDEyOjIwOjEzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogY29uZmlndXJlLmFjOgorCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgorCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jOgorCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKKwkgIDAuMTAuMjguMiBwcmUtcmVsZWFzZQorCisyMDEwLTA0LTE0IDEyOjEyOjU2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogcG8vYWYucG86CisJKiBwby9hei5wbzoKKwkqIHBvL2JlLnBvOgorCSogcG8vYmcucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGEucG86CisJKiBwby9kZS5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZXMucG86CisJKiBwby9ldS5wbzoKKwkqIHBvL2ZpLnBvOgorCSogcG8vZnIucG86CisJKiBwby9odS5wbzoKKwkqIHBvL2lkLnBvOgorCSogcG8vaXQucG86CisJKiBwby9qYS5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9wbC5wbzoKKwkqIHBvL3B0X0JSLnBvOgorCSogcG8vcnUucG86CisJKiBwby9ydy5wbzoKKwkqIHBvL3NrLnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkgIHBvOiB1cGRhdGUgdHJhbnNsYXRpb25zCisKKzIwMTAtMDQtMTQgMTI6NDM6NDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJICBzdHJ1Y3R1cmU6IGxvZyB3aGF0IHN0cnVjdHVyZSBzdHJpbmcgd2UgZmFpbGVkIHRvIHBhcnNlCisKKzIwMTAtMDQtMTQgMTc6NTY6MTcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RiaW4uYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RiaW4uYzoKKwkgIGJpbjogZml4IHJlZmNvdW50IHdoZW4gcmVtb3ZpbmcgZWxlbWVudHMgZHVyaW5nIHN0YXRlIGNoYW5nZQorCSAgV2hlbiBhbiBlbGVtZW50IGlzIHJlbW92ZWQgZnJvbSBhIGJpbiBiZWNhdXNlIGl0IGNhdXNlZCBhIHN0YXRlIGNoYW5nZSBlcnJvciwKKwkgIGRvbid0IHVucmVmIHRoZSBjaGlsZCB0d2ljZS4KKwkgIEFkZCBzb21lIG1vcmUgZGVidWcgaW5mby4KKwkgIEFkZCBhIHVuaXQgdGVzdCBmb3IgdGhpcyBlcnJvci4KKwkgIEZpeGVzICM2MTU3NTYKKworMjAxMC0wNC0xNCAxMTo1MDozOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2JlbmNobWFya3MvTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL01ha2VmaWxlLmFtOgorCSAgdGVzdHM6IG1vcmUgTERGTEFHUyAtPiBMREFERCBmaXhlcworCisyMDEwLTA0LTE0IDExOjQwOjIxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L01ha2VmaWxlLmFtOgorCSAgYnVpbGQ6ICQoTElCTSkgYmVsb25ncyBpbnRvIExJQkFERCBub3QgTERGTEFHUworCisyMDEwLTA0LTA4IDA5OjE0OjI0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvaGVscGVycy9NYWtlZmlsZS5hbToKKwkqIHRvb2xzL01ha2VmaWxlLmFtOgorCSAgYnVpbGQ6IHdoZW4gYnVpbGRpbmcgZXhlY3V0YWJsZXMsIHB1dCBsaWJzIHRvIGxpbmsgdG8gaW50byBMREFERCBpbnN0ZWFkIG9mIExERkxBR1MKKwkgIFVzZSBmb29fTERBREQgaW5zdGVhZCBvZiBmb29fTERGTEFHUyB0byBzcGVjaWZ5IHRoZSBsaWJyYXJpZXMgdG8gbGluayB0by4KKwkgIFRoaXMgc2hvdWxkIG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGUgbGlua2VyIGluIHRoZSByaWdodAorCSAgb3JkZXIuIFNlZSAjNjE1Njk3LgorCisyMDEwLTA0LTE0IDExOjE5OjE0ICswMjAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkgIGNvbmZpZ3VyZTogUmVtb3ZlIC1XY2FzdC1hbGlnbgorCSAgQXBwYXJlbnRseSBnY2Mgd2FybnMgdGhhdCBHc3RNaW5pT2JqZWN0IGlzIG5vdCBjYXN0YWJsZSB0bworCSAgR3N0RXZlbnQvTWVzc2FnZS9CdWZmZXIgZHVlIHRvIHRoZW0gY29udGFpbmluZyA2NGJpdCB2YXJpYWJsZXMsIGV2ZW4KKwkgIHRob3VnaCBBUk0gaGFja2VycyBjbGFpbSB0aGF0IHRob3NlIG9ubHkgbmVlZCA0Ynl0ZSBhbGlnbm1lbnQuIEFuZCBhcworCSAgbG9uZyBhcyBnY2MgYmVoYXZlcyB0aGF0IHdheSwgdGhpcyB3YXJuaW5nIGlzIG5vdCB2ZXJ5IHVzZWZ1bC4KKwkgIFNvIHdlJ2xsIHJlbW92ZSB0aGUgd2FybmluZyB1bnRpbCB0aGlzIHByb2JsZW0gaXMgZml4ZWQuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE1Njk4CisKKzIwMTAtMDQtMTMgMTA6NDg6NDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJICBjb25maWd1cmU6IHJlbW92ZSBzdXBlcmZsdW91cyByZXR1cm4gc3RhdGVtZW50cyBhdCBlbmQgb2YgQUNfVFJZX3tMSU5LLENPTVBJTEV9IGJsb2NrcworCSAgU3BvdHRlZCBieSBKRiBNZXJ0ZW5zLiBTZWUgIzYxNDc2Ny4KKworMjAxMC0wNC0wNSAxMzo0NjoyMyAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkgIGNvbmZpZ3VyZTogQ2hhbmdlIGNoZWNrIGZvciB1aW50MTI4X3QKKwkgIENoZWNrIGZvciBhYmlsaXR5IHRvIGRpdmlkZSB1aW50MTI4X3QgdmFsdWVzLCBzaW5jZSB0aGF0IHdoYXQKKwkgIHdlIGFjdHVhbGx5IHVzZSBpdCBmb3IgKGluIGdzdHV0aWxzLmMpLiAgVGhlIGV4aXN0ZW5jZSBvZiBhCisJICB1aW50MTI4X3QgdHlwZSBkb2Vzbid0IG1lYW4gdGhlIGNvbXBpbGVyIGNhbiBhY3R1YWxseSBnZW5lcmF0ZQorCSAgY29kZSBmb3IgaXQuICBBbHNvIG1ha2Ugc3VyZSB0aGF0IHdlIGNhbiBhY3R1YWxseSBsaW5rIHRoZQorCSAgcmVzdWx0IHN1Y2Nlc3NmdWxseS4KKwkgIEZpeGVzIGJ1ZyAjNjE0NzY3LgorCisyMDEwLTA0LTEyIDE1OjEzOjU3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9yYW5kb20vbW92aW5nLXBsdWdpbnM6CisJICBkb2NzOiBtaW5vciBtb3ZpbmctcGx1Z2lucyBhZGRpdGlvbgorCisyMDEwLTA0LTA5IDE1OjQ4OjAwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiB0b29scy9nc3QtbGF1bmNoLmM6CisJICBsYXVuY2g6IG1ha2UgLXEgYmUgbW9yZSBxdWlldAorCSAgQ29udmVydCBzb21lIGdfcHJpbnQgaW50byBQUklOVCBzbyB0aGF0IHRoZXkgYXJlIG5vdCBwcmludGVkIHdoZW4gdGhlIC1xIG9wdGlvbgorCSAgaXMgc2VsZWN0ZWQuCisKKzIwMTAtMDQtMDkgMTU6MTk6MTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IGFkZCBzb21lIG1vcmUgZGVidWcgaW5mbworCisyMDEwLTA0LTA5IDEzOjEyOjM4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmg6CisJICBmZHNyYzogYWxsb3cgc3BlY2lmeWluZyB0aGUgc2l6ZSBpbiBieXRlcyBvbiB0aGUgdXJpCisJICBQYXJzZSBhIHNpemU9dmFsdWUgZnJvbSB0aGUgcXVlcnkgc3RyaW5nIHRvIHNwZWNpZnkgYSBzaXplLiBUaGlzIGlzIGludGVyZXN0aW5nCisJICB3aGVuIHJlYWRpbmcgZnJvbSBhIGZpbGUgZGVzY3JpcHRvciB0aGF0IGFjdHVhbGx5IGhhcyBhIHNpemUgKGFuZCBpcyBub3QKKwkgIHN0YXQtYWJsZSwgc3VjaCBhcyB0aGUgc29ja2V0IG9mIGFuIGh0dHAgY29ubmVjdGlvbikKKworMjAxMC0wNC0wOSAxMjozNTo0NyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkgIHF1ZXVlMjogd2hlbiBFT1Mgd2Uga25vdyB0aGUgZHVyYXRpb24KKwkgIFdoZW4gd2UgYXJlIEVPUywgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbiB1cHN0cmVhbSBxdWVyeSBmb3IgdGhlIGR1cmF0aW9uIGluIGJ5dGVzCisJICBiZWNhdXNlIHdlIGFscmVhZHkga25vdyBpdCBpcyB0aGUgb2Zmc2V0IG9mIHRoZSBsYXN0IHdyaXR0ZW4gYnl0ZS4KKworMjAxMC0wNC0wOSAxMzowODoxMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5jOgorCSAgcmVnaXN0cnljaHVua3M6IEluaXRpYWxpemUgdHlwZWZpbmQvZWxlbWVudCBmYWN0b3J5IHJlZ2lzdHJ5IGNodW5rcyB3aXRoIHplcm9lcworCSAgVGhpcyBtYWtlcyB2YWxncmluZCBzdG9wIGNvbXBsYWluaW5nIGFib3V0IHJlYWRpbmcgdW5pdGlhbGl6YXRlZCBtZW1vcnksCisJICB3aGljaCBpcyBub3QgaW5pdGlhbGl6ZWQgYmVjYXVzZSBpdCdzIGp1c3QgY29tcGlsZXItYWRkZWQgc3RydWN0IHBhZGRpbmcuLi4KKworMjAxMC0wNC0wOSAxMToxOTo1MyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSBkNjZhOGMzIHRvIGZjODU4NjcKKworMjAxMC0wNC0wOCAxMDoxMDoxOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0Ly5naXRpZ25vcmU6CisJICAuZ2l0aWdub3JlOiBhZGQgbmV3IC5zdmcgZmlsZSBpbiBkb2NzCisKKzIwMTAtMDQtMDggMTA6NDc6MDMgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKKwkgIGRvY3M6IHVzZSBpbmZvcm1hbGZpZ3VyZSB0YWcgdG8gbm90IHN5bnRheCBoaWdobGlnaHQgdGhlIGNvbnRlbnQKKworMjAxMC0wMy0yNSAxMDozNToxMyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBkb2NzL2dzdC9NYWtlZmlsZS5hbToKKwkqIGRvY3MvZ3N0L2dzdC11bml2ZXJzZS5kb3Q6CisJKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgorCSAgZG9jczogYWRkIGNvbmNlcHQgbWFwCisJICBBZGQgYSBncmFwaHZpeiBkb3QgZmlsZS4gQWRkIHJ1bGVzIHRvIHJlbmRlciBpdCB0byBzdmcgYW5kIGluY2x1ZGUgaW4gZG9jcy4KKwkgIE5vZGVzIGFyZSBjbGlja2FibGUuIEl0IGlzIGFuIGF0dGVtcHQgdG8gc2hvdyBob3cgdGhpbmdzIGZpdCB0b2dldGhlci4KKworMjAxMC0wNC0wNyAxOTozMDo0OSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RtZXNzYWdlLmM6CisJICBkb2NzOiBhZGQgYSBmZXcgY29kZSBzbmlwcGV0cyB0aGF0IHNob3cgaG93IHRvIHVzZSBnc3RfbWVzc2FnZV9wYXJzZV8qKCkuCisKKzIwMTAtMDQtMDcgMTk6MDU6MDQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBhdXRvZ2VuLnNoOgorCSogY29uZmlndXJlLmFjOgorCSAgYnVpbGQ6IGJ1bXAgYXV0b2NvbmYgcmVxdWlyZW1lbnQgdG8gMi42MCBmb3IgZ29iamVjdC1pbnRyb3NwZWN0aW9uLm00CisJICBSZXF1aXJlIGF1dG9jb25mIDIuNjAgKHdoaWNoIHdhcyByZWxlYXNlZCBpbiBKdW5lIDIwMDYpLgorCSAgRml4ZXMgIzYwMDcxOC4KKworMjAxMC0wNC0wNyAxMjoyOTo1MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9wYXJzZS9ncmFtbWFyLnk6CisJICBwYXJzZTogZml4IG1vcmUgY29tcGlsZXIgd2FybmluZ3MKKwkgIEZpeCAnZ3JhbW1hci50YWIuYzo4MTU6Njogd2FybmluZzogIllZRU5BQkxFX05MUyIgaXMgbm90IGRlZmluZWQnCisJICBjb21waWxlciB3YXJuaW5nIGFuZCB0aGUgc2FtZSBmb3IgWVlMVFlQRV9JU19UUklWSUFMLiBUaGUgdHdvCisJICB0cmFuc2xhdGVkIHN0cmluZ3MgYXJlbid0IHBhcnRpY3VsYXJseSBoZWxwZnVsLCBzbyBqdXN0IGRlZmluZQorCSAgWVlFTkFCTEVfTkxTIHRvIDAuCisKKzIwMTAtMDQtMDcgMTI6MjQ6MTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvcGFyc2UvZ3JhbW1hci55OgorCSAgcGFyc2U6IGZpeCBjb21waWxlciB3YXJuaW5nCisJICBGaXggJ2dyYW1tYXIueTo2Njg6IHBhc3NpbmcgYXJndW1lbnQgMSBvZiDigJhnX2ZyZWXigJkgZGlzY2FyZHMgcXVhbGlmaWVycworCSAgZnJvbSBwb2ludGVyIHRhcmdldCB0eXBlJyBjb21waWxlciB3YXJuaW5nLgorCisyMDEwLTA0LTA3IDE2OjA1OjM4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0bWVzc2FnZS5oOgorCSAgbWVzc2FnZTogYWRkIFNpbmNlOiBtYXJrZXJzCisKKzIwMTAtMDQtMDcgMDk6MzE6MzkgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzeXN0ZW1jbG9jay5jOgorCSAgdGVzdHM6IGdzdHN5c3RlbWNsb2NrOiBkb24ndCBsZWFrIHRoZSBzeXN0ZW0gY2xvY2sKKworMjAxMC0wNC0wNSAwMDowMTo1NiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKKwkgIGJ1aWxkOiBmaXggb3V0IG9mIHNvdXJjZWRpciBidWlsZCBmb3IgY2hlY2sKKwkgIE1vdmUgdGhlIGludGVybmFsIGhlYWRlciB0byBub2Rpc3QgKGFzIHdlIGNvcHkgaXQgYXJvdW5kIGFueXdheSkuCisJICBVc2UgYnVpbGRkaXIgaW4gcGF0dGVybiBzdWJzdGl0dXRpb24gZm9yIGl0LgorCSAgRml4ZXMgIzYxNDgzLgorCisyMDEwLTA0LTA2IDE3OjQ2OjM2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZXZlbnQuYzoKKwkgIGRvY3M6IGZpeCBzb21lIHR5cG9zCisKKzIwMTAtMDItMjMgMDk6MTY6NTUgKzAxMDAgIEpvbmFzIEhvbG1iZXJnIDxqb25hcy5ob2xtYmVyZ0BheGlzLmNvbT4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJICBiYXNlc3JjOiBmaXggZ3N0X2Jhc2Vfc3JjX25ld19zZWFtbGVzc19zZWdtZW50KCkKKwkgIEtlZXAgdHJhY2sgb2YgcGVuZGluZyBuZXdzZWdtZW50IGluIGdzdF9iYXNlX3NyY19uZXdfc2VhbWxlc3Nfc2VnbWVudCgpCisJICB0byBhdm9pZCBwdXNoaW5nIG5ld3NlZ21lbnQgdXBkYXRlIGJlZm9yZSBuZXdzZWdtZW50LgorCisyMDEwLTA0LTA0IDE1OjIxOjE2ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0BlbnNvbmljLWRlc2t0b3AubG9jYWxkb21haW4+CisKKwkqIGdzdC9nc3RldmVudC5jOgorCSAgZG9jczogaW1wcm92ZSBldmVudCBkb2NzCisJICBSZXBocmFzZSBmaXJzdCBwYXJhZ3JhcGggb2Ygc2VjdGlvbiBkb2NzLiBBZGQgZGV0YWlsIHRvIGVvcyBldmVudCBkb2NzLgorCisyMDEwLTAzLTI5IDA4OjQzOjA1ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiB0b29scy9nc3QtaW5kZW50OgorCSAgZ3N0LWluZGVudDogQWRkIC0tbGVhdmUtcHJlcHJvY2Vzc29yLXNwYWNlIGZvciBpbmRlbnQgMi4yLjExCisJICBJdCB3YXMgcHJldmlvdXNseSBicm9rZW4sIHdoaWNoIGlzIHdoeSB3ZSBuZXZlciBuZWVkZWQgaXQuIFRoaXMga2VlcHMgYmFja3dhcmQKKwkgIGNvbXBhdGliaWxpdHkgd2l0aCBpbmRlbnQgPD0gMi4yLjExCisKKzIwMTAtMDMtMzEgMTA6NDM6MDQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvZGF0YXByb3RvY29sL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvbmV0L01ha2VmaWxlLmFtOgorCSAgbGliczogcG9pbnQgZ29iamVjdC1pbnRyb3NwZWN0aW9uIHNjYW5uZXIgdG8gLmxhIGZpbGVzCisJICBQb2ludCBnLWlyLXNjYW5uZXIgdG8gdGhlIC5sYSBmaWxlIG9mIG91ciBsaWJyYXJ5LCB3aGljaCBob3BlZnVsbHkKKwkgIG1ha2VzIGl0IGZpbmQgdGhlIHJpZ2h0IGRlcGVuZGVuY2llcyBpbiBhbGwgY2FzZXMgKGllLiBvdXIgbG9jYWxseQorCSAgYnVpbHQgbGliZ3N0cmVhbWVyIGFuZCBub3QgdGhlIHN5c3RlbS1pbnN0YWxsZWQgb25lKS4gVGhpcyBpcyBhbHNvCisJICBob3cgaXQncyBkb25lIGluIEd0aysgYW5kIGhvdyBpdCdzIGRvY3VtZW50ZWQgaW4gdGhlIHdpa2ksIHNlZQorCSAgaHR0cDovL2xpdmUuZ25vbWUub3JnL0dPYmplY3RJbnRyb3NwZWN0aW9uL0F1dG90b29sc0ludGVncmF0aW9uCisJICBCYXNlZCBvbiBwYXRjaGVzIGJ5IFZpbmNlbnQgVW50eiBhbmQgQWxhbiBLbm93bGVzLgorCSAgRml4ZXMgIzYwMzcxMC4KKworMjAxMC0wNC0wMiAwMToxNjoxNiArMDEwMCAgUGhpbGlwIFdpdGhuYWxsIDxwaGlsaXBAdGVjbm9jb2RlLmNvLnVrPgorCisJKiBnc3QvZ3N0dXRpbHMuaDoKKwkgIHV0aWxzOiBVc2UgR19HTlVDX0NPTlNUIGluc3RlYWQgb2YgR19HTlVDX1BVUkUgZm9yIGNvbnZlcnNpb24gZnVuY3Rpb25zCisJICBGaXhlcyBidWcgIzYxNDYyOS4KKworMjAxMC0wNC0wMSAxMzoxOTowNiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogdGVzdHMvY2hlY2svbGlicy9iYXNlc3JjLmM6CisJICB0ZXN0czogRG9uJ3QgZm9yZ2V0IHRvIHVucmVmIHRoZSBuZXdzZWdtZW50IGV2ZW50CisKKzIwMTAtMDQtMDEgMTI6MzQ6NTMgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGNvbW1vbjoKKwkgIGNvbW1vbjogVXBkYXRlIHRvIGxhdGVzdCByZXZpc2lvbiBmb3IgbmV3IHN1cHByZXNzaW9ucworCisyMDEwLTAzLTMxIDIyOjA3OjU3ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHRlc3RzL2NoZWNrL2xpYnMvYmFzZXNyYy5jOgorCSAgdGVzdHM6IGFkZCB0ZXN0IGZvciB1cGRhdGluZyBwbGF5YmFjayByYXRlCisJICBUZXN0cyBpZiBhIHNlZWsgd2l0aCBib3RoIHBvc2l0aW9ucyBiZWluZyBHU1RfU0VFS19UWVBFX05PTkUgaXMgaGFuZGxlZC4KKworMjAxMC0wMy0zMSAxNjo1NTo1NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9kZXNpZ24vZHJhZnQtYnVmZmVyMi50eHQ6CisJICBkb2NzOiBhZGQgY29weSBhbmQgY29udiBmdW5jdGlvbiB0byBidWZmZXIyIGRyYWZ0CisKKzIwMTAtMDMtMzEgMTA6NTQ6NTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZGVzaWduL2RyYWZ0LWJ1ZmZlcjIudHh0OgorCSAgZG9jczogdXBkYXRlIGJ1ZmZlcjIgZHJhZnQKKworMjAxMC0wMy0zMSAxMToyNjoyOCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBkb2NzL21hbnVhbC9jb21tdW5pY2F0aW9uLnBuZzoKKwkqIGRvY3MvbWFudWFsL2RpYWdyYW1zLWdlbmVyYWwuc3ZnOgorCSogZG9jcy9tYW51YWwvaW50cm8tYmFzaWNzLnhtbDoKKwkgIGRvY3M6IGltcHJvdmUgY29tbXVuaWNhdGlvbiBwaWN0dXJlIGFuZCBzZWN0aW9uCisJICBJbmRpY2F0ZSB0aGF0IG9ubHkgbWVzc2FnZXMgZ28gdmlhIGJ1cy4gQWxzbyBhZGQgcXVlcmllcyBiZXR3ZWVuIGVsZW1lbnRzLgorCisyMDEwLTAzLTMxIDEwOjI0OjExICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHV0aWxzLmg6CisJICBldmVudDogVXNlIGNvcnJlY3QgdHlwZSBmb3IgdGhlIG1lc3NhZ2UgcGFyYW1ldGVyIGluIGdzdF9ldmVudF97bmV3LHBhcnNlfV9zaW5rX21lc3NhZ2UKKwkgIFRoZSBzdHJ1Y3Qgd29ya2Fyb3VuZCB3YXMgb25seSBuZWNlc3NhcnkgaW4gZ3N0ZXZlbnQuaCwgZ3N0dXRpbHMuaCBrbm93cyBhYm91dCBHc3RNZXNzYWdlCisKKzIwMTAtMDMtMzEgMDk6NTY6NTAgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZG9jcy9tYW51YWwvY29tbXVuaWNhdGlvbi5wbmc6CisJKiBkb2NzL21hbnVhbC9kaWFncmFtcy1nZW5lcmFsLnN2ZzoKKwkqIGRvY3MvbWFudWFsL2ludHJvLWJhc2ljcy54bWw6CisJICBkb2NzOiBhZGQgY29tbXVuaWNhdGlvbiBvdmVydmlldyB0byBkb2NzCisJICBBZGQgYSBzZWN0aW9uIHRvIHRoZSBiYXNpY3MgdGhhdCBzaG93IGJ1ZmZlcnMsIGV2ZW50cywgbWVzc2FnZXMgYW5kIHF1ZXJpZXMKKwkgIHRvZ2V0aGVyIGFuZCBkZXNjcmliZSB0aGUgYmFzaWNzLgorCisyMDEwLTAzLTMwIDE1OjU2OjM5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogcGtnY29uZmlnL2dzdHJlYW1lci1iYXNlLXVuaW5zdGFsbGVkLnBjLmluOgorCSogcGtnY29uZmlnL2dzdHJlYW1lci1iYXNlLnBjLmluOgorCSogcGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay11bmluc3RhbGxlZC5wYy5pbjoKKwkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2sucGMuaW46CisJKiBwa2djb25maWcvZ3N0cmVhbWVyLWNvbnRyb2xsZXItdW5pbnN0YWxsZWQucGMuaW46CisJKiBwa2djb25maWcvZ3N0cmVhbWVyLWNvbnRyb2xsZXIucGMuaW46CisJKiBwa2djb25maWcvZ3N0cmVhbWVyLWRhdGFwcm90b2NvbC11bmluc3RhbGxlZC5wYy5pbjoKKwkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItZGF0YXByb3RvY29sLnBjLmluOgorCSogcGtnY29uZmlnL2dzdHJlYW1lci1uZXQtdW5pbnN0YWxsZWQucGMuaW46CisJKiBwa2djb25maWcvZ3N0cmVhbWVyLW5ldC5wYy5pbjoKKwkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItdW5pbnN0YWxsZWQucGMuaW46CisJKiBwa2djb25maWcvZ3N0cmVhbWVyLnBjLmluOgorCSAgcGtnY29uZmlnOiBhZGQgZ2lyZGlyIGFuZCB0eXBlbGliZGlyIHZhcmlhYmxlcyB0byAucGMgZmlsZXMKKwkgIFNvIHRoYXQgdGhlIC1iYXNlIGxpYnMgY2FuIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGluY2x1ZGUgcGF0aHMgZm9yIHRoZQorCSAgZ29iamVjdC1pbnRyb3NwZWN0aW9uIHRvb2xzIGV2ZW4gaWYgY29yZSBnb3QgaW5zdGFsbGVkIGludG8gYSBwcmVmaXgKKwkgIHRoYXQncyBub3QgdGhlIHNhbWUgcHJlZml4IGFzIGdvYmplY3QtaW50cm9zcGVjdGlvbiBpcyBpbnN0YWxsZWQgaW4KKwkgIG9yIGl0J3MgYmVpbmcgYnVpbGQgaW4gYW4gdW5pbnN0YWxsZWQgZ3N0cmVhbWVyIHNldHVwLgorCisyMDEwLTAzLTMwIDE1OjIyOjU0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogcG8vYWYucG86CisJKiBwby9hei5wbzoKKwkqIHBvL2JlLnBvOgorCSogcG8vYmcucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGEucG86CisJKiBwby9kZS5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZXMucG86CisJKiBwby9ldS5wbzoKKwkqIHBvL2ZpLnBvOgorCSogcG8vZnIucG86CisJKiBwby9odS5wbzoKKwkqIHBvL2lkLnBvOgorCSogcG8vaXQucG86CisJKiBwby9qYS5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9wbC5wbzoKKwkqIHBvL3B0X0JSLnBvOgorCSogcG8vcnUucG86CisJKiBwby9ydy5wbzoKKwkqIHBvL3NrLnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkgIHBvOiB1cGRhdGUgZm9yIG5ldyBzdHJpbmcKKworMjAxMC0wMy0zMCAxNToyMDowNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIE1ha2VmaWxlLmFtOgorCSogYXV0b2dlbi5zaDoKKwkqIGNoZWNrLWNoZWNrcy5tNDoKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIG00Ly5naXRpZ25vcmU6CisJKiBtNC9NYWtlZmlsZS5hbToKKwkqIG00L2NoZWNrLWNoZWNrcy5tNDoKKwkgIGJ1aWxkOiBtYWtlIGF1dG90b29scyBwdXQgaXRzIG00IGZpbGVzIGludG8gbTQvIGluc3RlYWQgb2YgY29tbW9uL200LworCSAgVGhpcyBpcyBob3cgd2UgZG8gaXQgaW4gdGhlIG90aGVyIG1vZHVsZXMsIGFuZCBnZXRzIHJpZCBvZiB0aGUgYW5ub3lpbmcKKwkgIGRpcnR5IHN0YXR1cyBmb3IgY29tbW9uIHdoZW4gZG9pbmcgZ2l0IHN0YXR1cyAoYXQgbGVhc3Qgb25jZSB5b3UgY2xlYW4KKwkgIG91dCB0aGUgb2xkIGZpbGVzIGZyb20gdGhlcmUpLgorCisyMDEwLTAzLTMwIDEyOjMzOjAxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogY29tbW9uOgorCSogdGVzdHMvZXhhbXBsZXMvTWFrZWZpbGUuYW06CisJICBidWlsZDogYnVpbGQgZXhhbXBsZXMgc3ViZGlyZWN0b3JpZXMgaW4gcGFyYWxsZWwgaWYgcmVxdWVzdGVkCisKKzIwMTAtMDMtMjggMjA6NTU6MDkgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIGJhc2V0cmFuc2Zvcm06IFJlZmFjdG9yIGNhcHMgc3VnZ2VzdGlvbiBvbiBwYWRfYWxsb2MKKwkgIFJlZmFjdG9yIHRoZSBoYW5kbGluZyBvZiBzaW5rIHN1Z2dlc3Rpb24gY2FwcyB2YXJpYWJsZQorCSAgc28gdGhhdCBpdCBhbHdheXMgaGFzIGEgcmVmIHRvIHRoZSBjYXBzIGl0IHBvaW50cyB0by4KKwkgIE1ha2VzIHRoZSBjb2RlIGNsZWFyZXIuCisKKzIwMTAtMDMtMjkgMTY6MzQ6MDMgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdGluZm8uaDoKKwkgIGdzdGluZm86IGFkZCBhIGNvbW1lbnQgZXhwbGFpbmluZyB0aGUgcmVhc29uIGZvciB1c2luZyBmdWNudGlvbiBwcm90b3MgaGVyZS4KKworMjAxMC0wMy0yOSAxNjoxMzo1NCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0aW5mby5oOgorCSAgZ3N0aW5mbzogYWx3YXlzIGRlZmluZSBkdW1teSBkZWJ1ZyBjYXRlZ29yeSBhcyBhIGZ1bmN0aW9uIHByb3RvdHlwZQorCSAgSXQgZG9lcyBub3Qgc2VlbSB0byBtYWtlIHNlbnNlIHRvIGRlZmluZSB0aGlzIGFzIGEgZnVuY3Rpb24gb25seSBpZiB3ZSBoYXZlCisJICB2YXJhcmdzIG1hY3Jvcy4KKworMjAxMC0wMy0yOCAxNToxMDoyMCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0aW5mby5oOgorCSAgYnVpbGQ6IGZpeCByZWRlY2xhcmF0aW9uIGVyb3JzIHdoZW4gYnVpbGRpbmcgd2l0aCAtLWdzdC1kaXNhYmxlLWdzdC1kZWJ1ZworCSAgR2l2ZSBkdW1teSBzeW1ib2xzIGEgdW5pcWUgbmFtZS4KKworMjAxMC0wMy0yOCAxNDo0OTowMyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0aW5mby5oOgorCSAgYnVpbGQ6IG1vdmUgc29tZSBwcm90b3R5cGVzIG91dCBvZiAjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworCSAgTW92ZSB0aGUgcHJvdG90eXBlcyB1cCB0b2dldGhlci4gV2Ugb25seSBkZWZpbmUgdGhlIG1hY3JvcyBkaWZmZXJlbnRseS4KKwkgIEZpeGVzIGJ1ZyAjNjE0MTY3IG1vc3RseS4KKworMjAxMC0wMy0yOSAxNjowNTo0NCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0aW5mby5jOgorCSogZ3N0L2dzdGluZm8uaDoKKwkgIGluZm86IHJlYWRkIHRoZSB1c2Ugb2YgR3N0RGVidWdGdW5jUHRyIHR5cGVkZWYgYW5kIHRlbGwgd2h5CisJICBUaGlzIHJldmVydHMgdGhlIHJlbGF0ZWQgY2hhbmdlcyBmcm9tIDNmNDk1NGU0MmQwNDQwYTdhNTk4YTkwODMyNWM0NWVhOWRiMDc2ZTQKKwkgIGFuZCBmZmIwYTRlMTkwNWE4NzMxOTFmOGM4MDIzNDYyNjFlOGM0NDM1MDY1LgorCisyMDEwLTAzLTI5IDEwOjIyOjQzICswMTAwICBBbGFuIEtub3dsZXMgPGFsYW5AYWtia2hvbWUuY29tPgorCisJKiBsaWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suaDoKKwkgIG5ldDogZml4IHR5cG8gaW4gbmV0IGNsaWVudCBjbG9jayBzdHJ1Y3R1cmUKKwkgIEl0J3Mgc29ja2FkZHJfaW4sIG5vdCBzb2NrYWRkcl9pZC4KKworMjAxMC0wMy0yNiAxNzoxMjowNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIE1ha2VmaWxlLmFtOgorCSAgYnVpbGQ6IGFkZCBjcnVmdCBhbGVydCBmb3IgY29tbW9uL3NoYXZlKgorCisyMDEwLTAzLTI4IDIxOjAyOjQxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGluZm8uYzoKKwkgIGluZm86IEZpeCBidWlsZCBhdCBsZWFzdCB1bnRpbCB0aGUgY29ycmVjdCBmaXggaXMgZm91bmQKKwkgIFNlZSBidWcgIzYxNDE2Ny4KKworMjAxMC0wMy0yOCAxOToxMzoyMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkgIHN0cnVjdHVyZTogTWFrZSBzdHJ1Y3R1cmUgYWJicmV2aWF0aW9ucyBhcnJheSBvbmUtdGltZSBpbml0aWFsaXphdGlvbiB0aHJlYWRzYWZlCisKKzIwMTAtMDMtMjggMTg6MDU6MzYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0aXRlcmF0b3IuYzoKKwkgIGl0ZXJhdG9yOiBBZGQgRklYTUUgMC4xMSBmb3IgdXNpbmcgR1NsaWNlIGZvciBhbGxvY2F0aW9uCisKKzIwMTAtMDMtMjggMTg6MDU6MzYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YmluLmM6CisJKiBnc3QvZ3N0YnVzLmM6CisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6CisJKiBnc3QvZ3N0Zm9ybWF0LmM6CisJKiBnc3QvZ3N0aW5kZXguYzoKKwkqIGdzdC9nc3RpbmZvLmM6CisJKiBnc3QvZ3N0b2JqZWN0LmM6CisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cGx1Z2luLmM6CisJKiBnc3QvZ3N0cGx1Z2lubG9hZGVyLmM6CisJKiBnc3QvZ3N0cXVlcnkuYzoKKwkqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgorCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmM6CisJKiBnc3QvZ3N0cmVnaXN0cnljaHVua3MuaDoKKwkqIGdzdC9nc3R0YWdsaXN0LmM6CisJKiBnc3QvZ3N0dGFnc2V0dGVyLmM6CisJKiBnc3QvZ3N0dHJhY2UuYzoKKwkgIGdzdDogVXNlIEdTbGljZSBpbnN0ZWFkIG9mIG5vcm1hbCBnX21hbGxvYyBpbiBtb3JlIHBsYWNlcworCisyMDEwLTAzLTI4IDEzOjE0OjA2ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RkZWJ1Z3V0aWxzLmg6CisJKiBnc3QvZ3N0aW5mby5oOgorCSAgYnVpbGQ6IG1vcmUgc29tZSBwcm90b3R5cGVzIG91dCBpZiAjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworCSAgVGhlIGJ1aWxkIHdhcyBmYWlsaW5nIGJlY2FzdWUgb2YgYSBuZXcgd2FybmluZy4gVGhlcmUgYXJlIHN0aWxsIGZhaWx1cmVzCisJICAodHJhY2tlZCB2aWEgYnVnICM2MTQxNjcpLgorCisyMDEwLTAzLTI1IDIwOjA0OjM3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogcG8vYWYucG86CisJKiBwby9hei5wbzoKKwkqIHBvL2JlLnBvOgorCSogcG8vYmcucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGEucG86CisJKiBwby9kZS5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZXMucG86CisJKiBwby9ldS5wbzoKKwkqIHBvL2ZpLnBvOgorCSogcG8vZnIucG86CisJKiBwby9odS5wbzoKKwkqIHBvL2lkLnBvOgorCSogcG8vaXQucG86CisJKiBwby9qYS5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9wbC5wbzoKKwkqIHBvL3B0X0JSLnBvOgorCSogcG8vcnUucG86CisJKiBwby9ydy5wbzoKKwkqIHBvL3NrLnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkgIHBvOiB1cGRhdGUgdHJhbnNsYXRpb25zIGZvciBuZXdseS1hZGRlZCBzdHJpbmdzCisKKzIwMTAtMDMtMjUgMTk6NTY6MDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL21hbnVhbHMubWFrOgorCSAgZG9jczogZml4IGludGVybWl0dGVudCBtYWtlIGRpc3RjaGVjayBmYWlsdXJlcworCSAgVXNlIC5OT1RQQVJBTExFTCB3aGVuIGJ1aWxkaW5nIGRvY3MuIFRoaXMgYXZvaWRzIGludGVybWl0dGVudAorCSAgbWFrZSBkaXN0Y2hlY2sgZmFpbHVyZXMgbGlrZSAnY3A6IGNhbm5vdCBjcmVhdGUgcmVndWxhciBmaWxlCisJICBgYnVpbGQvaW1hZ2UuZW50aXRpZXMnOiBGaWxlIGV4aXN0cycgd2hlbiB1c2luZyAtak4uCisJICBGaXhlcyAjNTkwNzE4LgorCisyMDEwLTAzLTI1IDE4OjU3OjQwICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5Lmg6CisJICBlbGVtZW50ZmFjdG9yeTogQWRkIEZJWE1FIDAuMTEgdG8gcmVtb3ZlIEdzdEVsZW1lbnREZXRhaWxzIGZyb20gdGhlIHB1YmxpYyBBUEkKKwkgIEl0J3Mgbm90IG5lY2Vzc2FyeSBhbnltb3JlIHRvIGV4cG9zZSB0aGlzIGFzIHB1YmxpYyBBUEkgYW5kIHRoaXMgYWxsb3dzCisJICBlYXNpZXIgZXh0ZW5zaW9uIG9mIHRoZSBlbGVtZW50IGRldGFpbHMgYnkgbmV3IGZpZWxkcy4KKworMjAxMC0wMy0yNSAxODo0MzowNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkgIHF1ZXVlMjogaGFuZGxlIHdyaXRlIGVycm9ycworCSAgSGFuZGxlIHdyaXRlIGVycm9ycyB0byB0aGUgdGVtcG9yYXJ5IGRvd25sb2FkIGZpbGUgYW5kIHBvc3QgZXJyb3JzIHdoZW4KKwkgIHNvbWV0aGluZyB3ZW50IHdyb25nLgorCisyMDEwLTAzLTI1IDE4OjEzOjAyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSAgcXVldWUyOiBhZGQgZWxlbWVudCBxdWVyeSBmdW5jdGlvbgorCSAgQWRkIGFuIGVsZW1lbnQgcXVlcnkgZnVuY3Rpb24gdGhhdCBpcyBhIGxpdHRsZSBtb3JlIGVmZmljaWVudCB0aGFuIHRoZSBnZW5lcmljCisJICBkZWZhdWx0IHF1ZXJ5IGhhbmRsZXIuCisKKzIwMTAtMDMtMjUgMTg6MTI6MDYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RiaW4uYzoKKwkgIGJpbjogaW1wcm92ZSBkb2NzIGEgbGl0dGxlCisJICBNZW50aW9uIHRoYXQgYSBEVVJBVElPTiBtZXNzYWdlIGRvZXMgbm90IG1lYW4gdGhhdCBvbmUgY2FuIHNhZmVseSBxdWVyeSB0aGUKKwkgIGR1cmF0aW9uIG9uIGEgYmluLCB0aGF0IG9ubHkgd29ya3Mgd2hlbiB0aGUgYmluIGlzIHByZXJvbGxlZC4KKworMjAxMC0wMy0yNSAxODowNToyOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkgIHF1ZXVlMjogcmVtb3ZlIGZpeGVkIEZJWE1FCisKKzIwMTAtMDMtMjUgMTc6MzY6NDUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5oOgorCSAgcXVldWUyOiBhZGQgdGhlIGJ1ZmZlcmluZyBwZXJjZW50IGluIEJVRkZFUklORyBxdWVyeQorCisyMDEwLTAzLTI1IDE3OjIxOjAyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSAgcXVldWUyOiBpbXByb3ZlIGJ1ZmZlciBsZXZlbCBtZWFzdXJlbWVudCBpbiBkb3dubG9hZCBtb2RlCisJICBLZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IGJ1ZmZlciBsZXZlbCBpbiB0aGUgY3VycmVudCByYW5nZSBpbiBkb3dubG9hZCBtb2RlIHNvCisJICB0aGF0IHdlIHBvc3QgdGhlIGNvcnJlY3QgYnVmZmVyaW5nIG1lc3NhZ2VzLgorCisyMDEwLTAzLTI1IDE1OjU0OjE5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbToKKwkgIGxpYnM6IGRvbid0IHVzZSBmYW5jeSBzaGVsbCBmZWF0dXJlcyB3aGVuIGludm9raW5nIGdvYmplY3QtaW50cm9zcGVjdGlvbiBzY2FubmVyCisJICBJdCdzIFBPU0lYLCBidXQgdGNzaCBkb2Vzbid0IHNlZW0gdG8gc3VwcG9ydCBpdC4KKworMjAxMC0wMy0yNSAxMzo0NjozNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9uZXQvTWFrZWZpbGUuYW06CisJICBsaWJzOiBmaXggUEtHX0NPTkZJR19QQVRIIHVzZWQgd2hlbiBjYWxsaW5nIGdvYmplY3QtaW50cm9zcGVjdGlvbiBzY2FubmVyCisJICBPdXIgb3duIHBrZ2NvbmZpZyBkaXJlY3Rvcnkgc2hvdWxkIGNvbWUgZmlyc3QsIHNvIHRoYXQgcGtnLWNvbmZpZyB1c2VzCisJICB0aGUgaW4tdHJlZSBsaWJnc3RyZWFtZXIgYW5kIG5vdCBzb21lIGV4dGVybmFsIG9uZSB3aGVuIC0tcGtnPWdzdHJlYW1lci0wLjEwCisJICBpcyBwYXNzZWQgdG8gZy1pci1zY2FubmVyLgorCSAgU2VlICM2MDM3MTAuCisKKzIwMTAtMDMtMjUgMTA6Mjc6MDAgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgorCSAgR3N0QWRhcHRlcjogYWRkIGEgdW5jaGVja2VkIHZhcmlhbnQgb2YgZmx1c2ggZm9yIGludGVybmFsIHVzYWdlCisJICBUcmltcyBvZmYgMTAtMjAlIGNwdSB0aW1lIHdoZW4gdXNpbmcgZ3N0X2FkYXB0ZXJfdGFrZVtfYnVmZmVyXQorCisyMDEwLTAzLTE5IDE1OjEwOjA3IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3R0YWdsaXN0LmM6CisJKiBnc3QvZ3N0dGFnbGlzdC5oOgorCSAgdGFnczogQWRkIG5ldyBfVVNFUl9SQVRJTkcgdGFnCisJICBBZGRzIGEgbmV3IHRhZyBmb3IgdXNlciBmYXZvcml0ZSBtZWRpYSByYXRpbmcuCisJICBVc2VyIHJhdGluZyBpbmZvcm1zIGhvdyBtdWNoIChmcm9tIDAgdG8gMTAwKSBhIHVzZXIKKwkgICdsaWtlcycgYSBtZWRpYS4KKwkgIEhhdmluZyBhbiBwZXJjZW50IHVpbnQgcmFuZ2UgZm9yIHRoaXMgaXMgZWFzeSB0byBtYXAgaW50byBvdGhlciBzY2FsZXMsCisJICBsaWtlIHNvbWUgcGxheWVycyB0aGF0IGFsbG93IHVzZXJzIHRvIGF0dHJpYnV0ZSAnc3RhcnMnIHRvIGl0cworCSAgbWVkaWEuCisJICBBUEk6IEdTVF9UQUdfVVNFUl9SQVRJTkcKKwkgIEZpeGVzICM1MjA2OTcKKworMjAxMC0wMy0yNCAxOTowMjoxMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkgIHF1ZXVlMjogYWRkIG1vcmUgaW5mbyBpbiB0aGUgYnVmZmVyaW5nIHF1ZXJ5CisJICBBZGQgdGhlIGVzdGltYXRlZCBkb3dubG9hZCB0aW1lIGFuZCBlc3RpbWF0ZWQgdGltZSBsZWZ0IHRvIHRoZSBidWZmZXJpbmcgcXVlcnkKKwkgIHJlc3VsdHMgYWxvbmcgd2l0aCB0aGUgZXN0aW1hdGVkIGRvd25sb2FkIGFuZCBwbGF5YmFjayBzcGVlZC4KKworMjAxMC0wMy0yNCAxODoxODoxMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmg6CisJICBxdWV1ZTI6IGltcGxlbWVudCBmbHVzaGluZyBpbiBkb3dubG9hZCBidWZmZXJpbmcKKwkgIE1haW50YWluIGEgc2VwYXJhdGUgdmFyaWFibGUgdG8gY29udHJvbCBzcmMgYW5kIHNpbmsgZmxvd3JldHVybiB2YWx1ZXMgc28gdGhhdAorCSAgd2UgY2FuIHVubG9jayB0aGUgc3JjIHBhcnQgd2l0aG91dCBzaHV0dGluZyBkb3duIHRoZSBzaW5rIHBhcnQuCisJICBBZGQgZmx1c2hpbmcgZm9yIHVwc3RyZWFtIHB1bGwgYmFzZWQgZWxlbWVudHMgdGhhdCB1bmJsb2NrcyBvdXIgZ2V0cmFuZ2UKKwkgIGZ1bmN0aW9uLiBUaGlzIGltcGxlbWVudHMgc2Vla2luZyB3aGVuIGJsb2NraW5nIGZvciBtb3JlIGRhdGEuCisJICBBZGQgc29tZSBhcmJpdHJhcnkgdGhyZXNob2xkIGJlZm9yZSBhdHRlbXB0aW5nIGEgc2Vlay4gQWRkIGEgRklYTUUgZm9yIHRoaXMKKwkgIGJlY2F1c2Ugd2UgbmVlZCB0byBmaW5kIGEgc2Vuc2libGUgdGhyZXNob2xkIGJhc2VkIG9uIHRoZSBpbnB1dCByYXRlLgorCisyMDEwLTAzLTI0IDE4OjUwOjAyICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBjb21tb246CisJICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKKwkgIEZyb20gNTVjZDUxNCB0byBjMWQwN2RkCisKKzIwMTAtMDMtMjQgMTc6MzI6NTQgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmFjOgorCSAgUmVtb3ZlIHVudXNlZCBjb2RlCisJICBPUFRfQ0ZMQUdTIHdhcyBuZXZlciBBQ19TVUJTVCgpJ2VkIHNvIGl0IHdhc24ndCB1c2VkLiBBbmQgdGhlIGxhc3QgdGltZQorCSAgaXQgd2FzIHRvdWNoZWQgd2FzIGluIDIwMDUuCisKKzIwMTAtMDMtMjQgMTU6NDc6MjIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvcGFyc2UvTWFrZWZpbGUuYW06CisJICBidWlsZDogZml4IG1ha2UgZGlzdGNoZWNrCisJICBUaGUgY2hhbmdlIGZyb20gR1NUX0FMTF9DRkxBR1MgdG8gR1NUX09QVElPTl9DRkxBR1MgZHJvcHBlZCB0aGUgaW5jbHVkZXMsCisJICBwdXR0aW5nIHRoZW0gYmFjayBmaXhlcyBtYWtlIGRpc3RjaGVjay4KKworMjAxMC0wMy0yNCAxNToxNToyMyArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgorCisJKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvcGFyc2UtbGF1bmNoLmM6CisJICBGaXggdGVzdHMgYWZ0ZXIgc2V0X2VsZW1lbnRfZGV0YWlscygpIGRlcHJlY2F0aW9uCisKKzIwMTAtMDMtMjQgMTM6MzM6NTggKzAxMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KKworCSogc2NyaXB0cy9naXQtdXBkYXRlLnNoOgorCSAgZ2l0LXVwZGF0ZTogRml4IGFuZCByZXN0cnVjdHVyZSBsb2dpYworCisyMDEwLTAzLTE5IDIyOjM2OjA3ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+CisKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSAgRGVwcmVjYXRlZCBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlscygpCisJICBVc2UgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2ltcGxlKCkgaW5zdGVhZC4gSWYgeW91IHdhbnQgdG8KKwkgIGNvbnZlcnQgYXV0b21hdGljYWxseSwgaGVyZSdzIGEgc2NyaXB0OgorCSAgZm9yIGZpbGUgaW4gYGdpdCBncmVwIC1sIEdzdEVsZW1lbnREZXRhaWxzYDsgZG8KKwkgIHNlZCAtaSAtbiAtciAnCisJICAxaAorCSAgMSFICisJICAkIHsKKwkgIGcKKwkgIHMvKChcL1wqW15cbl0qXCpcLyk/XG4pKlteXG5dKkdzdEVsZW1lbnREZXRhaWxzIC4qID1ccypHU1RfRUxFTUVOVF9ERVRBSUxTXHMqXCgoXCJbXlwiXSpcIixccypcIlteXCJdKlwiLFxzKlwiW15cIl0qXCIsXHMqKFwiW15cIl0qXCJccyopKilcKTtcbiooLiopZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHMgXCgoW14sXSopLFxzKlteKV0qXCkvXG5cblw1Z3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2ltcGxlIChcNiwgXDMpLworCSAgcy8oKFwvXCpbXlxuXSpcKlwvKT9cbikqW15cbl0qR3N0RWxlbWVudERldGFpbHMgLiogPVxzKlx7XHMqKFwiW15cIl0qXCIsXHMqXCJbXlwiXSpcIixccypcIlteXCJdKlwiLFxzKihcIlteXCJdKlwiXHMqKSopXH07XG4qKC4qKWdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzIFwoKFteLF0qKSxccypbXildKlwpL1xuXG5cNWdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZSAoXDYsIFwzKS8KKwkgIHAKKwkgIH0nICRmaWxlCisJICB+L2dzdC9nc3RyZWFtZXIvdG9vbHMvZ3N0LWluZGVudCAkZmlsZQorCSAgZG9uZQorCisyMDEwLTAzLTI0IDEwOjU3OjA4ICswMTAwICBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSAgcXVldWUyOiBGaXggdW5pbml0aWFsaXplZCB2YXJpYWJsZSBjb21waWxlciB3YXJuaW5nCisKKzIwMTAtMDMtMjMgMTk6MjU6MDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgIHRlc3RzOiByZW1vdmUgdW51c2VkIENIRUNLX0NGTEFHUyBhbmQgQ0hFQ0tfTElCUyBmcm9tIE1ha2VmaWxlLmFtCisKKzIwMTAtMDMtMjMgMTk6MjM6MjIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6CisJICBzdHJ1Y3R1cmU6IGFkZCBtYXBwaW5nIGZvciAodWludCkgdG8gYWxsb3cgZGVzZXJpYWxpc2F0aW9uIG9mIHVuc2lnbmVkIGludGVnZXJzCisJICBVbnNpZ25lZCBpbnRzIGFyZSB1c2VkIGluIHRhZ2xpc3RzLCB3b3VsZCBiZSBuaWNlIHRvIGJlIGFibGUgdG8KKwkgIGRlc2VyaWFsaXNlIHRoZW0sIGVzcC4gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSB0YWdpbmplY3QgQVBJLgorCisyMDEwLTAzLTIzIDE5OjI1OjI5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuaDoKKwkgIHF1ZXVlMjogaW1wbGVtZW50IHNlZWtpbmcgaW4gZG93bmxvYWQgbW9kZQorCSAgV2hlbiBpbiBkb3dubG9hZCBtb2RlIGFuZCB0aGUgcmVxdWVzdGVkIG9mZnNldCBpcyB0b28gZmFyIGF3YXksIGF0dGVtcHQgdG8gZG8gYQorCSAgc2VlayByZXF1ZXN0IHRvIGZldGNoIHRoZSBkYXRhLgorCSAgS2VlcCB0cmFjayBvZiBhbGwgZG93bmxvYWRlZCBwYXJ0cyBhbmQgbWVyZ2UgcmFuZ2VzIHdoZW4gbmVlZGVkLgorCSAgRml4ZXMgIzYwMDg3NworCisyMDEwLTAzLTIyIDExOjA2OjIxIC0wMzAwICBBbmRyw6kgRGllYiBNYXJ0aW5zIDxhbmRyZS5kaWViQGdtYWlsLmNvbT4KKworCSogc2NyaXB0cy9naXQtdXBkYXRlLnNoOgorCSAgZ2l0LXVwZGF0ZS5zaDogdXNlIGF1dG9nZW4uc2ggaW5zdGVhZCBvZiBhdXRvcmVnZW4uc2ggb24gZnJlc2ggcmVwb3NpdG9yaWVzLgorCSAgRml4ZXMgIzYxMzU5My4KKworMjAxMC0wMy0yMiAxNzoxMDowNiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ2V0dGV4dC5oOgorCSAgZ2V0dGV4dDogYnVpbGQgZml4ZXM6ICNpZiAtPiAjaWZkZWYKKworMjAxMC0wMy0xOCAxMDoyMjowOSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0YmluLmM6CisJKiBnc3QvcGFyc2UvZ3JhbW1hci55OgorCSAgcGFyc2UtbGF1bmNoOiBtYWtlIGRlbGF5ZWQgc2V0IHJlY3Vyc2l2ZQorCSAgUmlnaHQgbm93IGRlbGV5ZWQgc2V0IHdvdWxkIG9ubHkgdHJ5IGZvciBmaXJzdCBzZXQgb2YgY2hpbGRyZW4uIFdlIG5lZWQgdG8ga2VlcAorCSAgdHJ5aW5nIHRvIHN1cHBvcnQgYXJiaXRyYXJ5IGRlZXAgaGllcmFyY2hpZXMgKGxpa2UgaW4gcGxheWJpbjIgd2l0aCBhdXRvKnNpbmtzKS4KKwkgIEFsc28gR3N0QmluIHdvdWxkIG5lZWQgdG8gYWN0dWFseSBlbWl0IHRoZSBjaGlsZC1hZGRlZC9yZW1vdmVkIHNpZ25hbCBhcyBpdAorCSAgaW1wbGVtZW50cyB0aGUgaWZhY2UuIEZpeGVzICM2MTMyMTUuCisKKzIwMTAtMDMtMjIgMDg6NDA6MzQgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBwa2djb25maWcvZ3N0cmVhbWVyLWNoZWNrLnBjLmluOgorCSAgcGtnY29uZmlnOiBVc2UgQExJQk1AIGluc3RlYWQgb2YgLWxtCisKKzIwMTAtMDMtMTkgMDE6MDI6MzAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwa2djb25maWcvZ3N0cmVhbWVyLWJhc2UtdW5pbnN0YWxsZWQucGMuaW46CisJKiBwa2djb25maWcvZ3N0cmVhbWVyLWNoZWNrLXVuaW5zdGFsbGVkLnBjLmluOgorCSogcGtnY29uZmlnL2dzdHJlYW1lci1jb250cm9sbGVyLXVuaW5zdGFsbGVkLnBjLmluOgorCSogcGtnY29uZmlnL2dzdHJlYW1lci1kYXRhcHJvdG9jb2wtdW5pbnN0YWxsZWQucGMuaW46CisJKiBwa2djb25maWcvZ3N0cmVhbWVyLW5ldC11bmluc3RhbGxlZC5wYy5pbjoKKwkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItdW5pbnN0YWxsZWQucGMuaW46CisJICBwa2djb25maWc6IGFkZCBiYWNrIHN1cHBvcnQgZm9yIGJ1aWxkZGlyICE9IHNyY2RpciBjYXNlIGluIHVuaW5zdGFsbGVkIHNldHVwCisJICBBdHRlbXB0IHRvIGFkZCBiYWNrIHN1cHBvcnQgZm9yIGJ1aWxkZGlyICE9IHNyY2Rpci4gVXNlIGFic29sdXRlIHBhdGhzCisJICBpbnN0ZWFkIG9mIHJlbGF0aXZlIHBhdGhzIGJhc2VkIG9uIHBjZmlsZWRpciB0aGlzIHRpbWUgdG8gbWFrZSB0aGluZ3MKKwkgIGNsZWFyZXIgLSB0aGVyZSdzIG5vdCByZWFsbHkgYW55IG5lZWQgZm9yIHVuaW5zdGFsbGVkIHRyZWVzIHRvIGJlCisJICByZWxvY2F0YWJsZSB3aXRob3V0IHJlLXJ1bm5pbmcgY29uZmlndXJlLgorCisyMDEwLTAzLTE4IDExOjE4OjM5ICswMDAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYmFzZXRyYW5zZm9ybTogSW1wbGVtZW50IFFvUyBtZXNzYWdlIHBvc3RpbmcKKwkgIEFuZCBzb21lIG1vcmUgZm9yIGJ1ZyAjMzIyOTQ3CisKKzIwMTAtMDMtMTggMTM6NDE6MzUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgYmFzZXNyYzogY2F0Y2gsIHBhcnNlIGFuZCBzdG9yZSBRb1MgZXZlbnQgdmFsdWVzCisJICBDYXRjaCwgcGFyc2UgYW5kIHN0b3JlIHRoZSBRb1MgdmFsdWVzIGZyb20gUW9TIGV2ZW50cyBmb3IgbGF0ZXIgdXNlLgorCisyMDEwLTAzLTE3IDE1OjI5OjQ4ICswMDAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJhc2VzaW5rOiBJbXBsZW1lbnQgUW9TIG1lc3NhZ2UgcG9zdGluZyBpbiBiYXNlc2luaworCSAgUG9zdCBRb1MgbWVzc2FnZXMgd2hlbiBmcmFtZXMgYXJlIGRyb3BwZWQuCisJICBUaGlzIGdvZXMgYSBsaXR0bGUgZnVydGhlciB0b3dhcmRzIHJlc29sdmluZyBidWcgIzMyMjk0NworCisyMDEwLTAzLTE3IDE5OjI2OjMwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0bWVzc2FnZS5jOgorCSAgbWVzc2FnZTogaW1wcm92ZSBkb2NzIGEgbGl0dGxlCisKKzIwMTAtMDMtMTcgMTk6MTY6NDIgKzAxMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3RtZXNzYWdlLmM6CisJKiBnc3QvZ3N0bWVzc2FnZS5oOgorCSogZ3N0L2dzdHF1YXJrLmM6CisJKiBnc3QvZ3N0cXVhcmsuaDoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZXNzYWdlLmM6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIG1lc3NhZ2U6IGFkZCBRb1MgbWVzc2FnZSB0byBpbmZvcm0gYXBwcyBvZiBsb3N0IGRhdGEKKwkgIFRoaXMgaGFzIGJlZW4gaW1wbGVtZW50ZWQgYXMgcGVyIHBhcnQtcW9zLnR4dCBhbmQgcGFydGlhbGx5IGFkZHJlc3NlcworCSAgYnVnICMzMjI5NDcKKworMjAxMC0wMy0xNyAxNjo0NDowNSArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgorCisJKiB0ZXN0cy9iZW5jaG1hcmtzL2NvbnRyb2xsZXIuYzoKKwkgIHRlc3Q6IFJlbW92ZSBuZWVkbGVzcyBjYXN0CisJICBHc3RWYWx1ZUFycmF5Lm5hbWUgaXMgY29uc3Qgbm93CisKKzIwMTAtMDMtMTcgMTQ6MzM6MzUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwa2djb25maWcvZ3N0cmVhbWVyLWJhc2UtdW5pbnN0YWxsZWQucGMuaW46CisJKiBwa2djb25maWcvZ3N0cmVhbWVyLWNoZWNrLXVuaW5zdGFsbGVkLnBjLmluOgorCSogcGtnY29uZmlnL2dzdHJlYW1lci1jb250cm9sbGVyLXVuaW5zdGFsbGVkLnBjLmluOgorCSogcGtnY29uZmlnL2dzdHJlYW1lci1kYXRhcHJvdG9jb2wtdW5pbnN0YWxsZWQucGMuaW46CisJKiBwa2djb25maWcvZ3N0cmVhbWVyLW5ldC11bmluc3RhbGxlZC5wYy5pbjoKKwkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItdW5pbnN0YWxsZWQucGMuaW46CisJICBSZXZlcnQgIkFkZCBzcmNkaXIgdG8gaW5jbHVkZXMgZm9yIG91dC1vZi1zb3VyY2UgYnVpbGRzIgorCSAgSSBkb24ndCBrbm93IGhvdyB0aGlzIGV2ZXIgd29ya2VkLCBhcyBpdCBzZWVtcyB0byBwdXQgLUkuLy4uCisJICBhbmQgLUkuLy4uL2xpYnMgdmVyYmF0aW0gaW50byB0aGUgaW5jbHVkZXMsIGF0IGxlYXN0IHdpdGgKKwkgIGN1cnJlbnQgYXV0b3Rvb2xzIHZlcnNpb25zLgorCSAgVGhpcyByZXZlcnRzIGNvbW1pdCAyNzlhODBmZjI3YmE0YzkwZjUyOTgxZTg5ZTcxMGViMTE4MWJjMjAxLgorCisyMDEwLTAzLTE3IDE1OjQ2OjQ2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2Rlc2lnbi9wYXJ0LXFvcy50eHQ6CisJICBkb2NzOiBhdm9pZCBjb25mdXNpb24gYmV0d2VlbiBldmVudHMgYW5kIG1lc3NhZ2VzCisKKzIwMTAtMDMtMTcgMTI6MTg6MTggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xzb3VyY2UuaDoKKwkgIGNvbnRyb2xsZXI6IE1hcmsgcHJvcGVydHlfbmFtZSBpbiBHc3RWYWx1ZUFycmF5IGFzIGNvbnN0CisJICBUaGlzIHdvbid0IGFuZCBzaG91bGQgbm90IGJlIGNoYW5nZWQgZnJvbSBhbnkgQVBJCisKKzIwMTAtMDMtMTcgMTI6NDU6NDkgKzAyMDAgIE1hcnQgUmF1ZHNlcHAgPGxlaW9AZ2VudG9vLm9yZz4KKworCSogZ3N0L2dzdGVsZW1lbnQuaDoKKwkgIGRvY3M6IGZpeCB0eXBvCisKKzIwMTAtMDMtMTYgMDk6NTY6MTYgKzAyMDAgIE1hcnQgUmF1ZHNlcHAgPGxlaW9AZ2VudG9vLm9yZz4KKworCSogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuYzoKKwkgIGRvY3M6IGFkZCBtaXNzaW5nICJTaW5jZTogMC4xMC4yNiIgbWFya2VyIGZvciBnc3RfZGF0YV9xdWV1ZV9uZXdfZnVsbCgpCisKKzIwMTAtMDMtMTYgMDk6NDI6MjEgKzAyMDAgIE1hcnQgUmF1ZHNlcHAgPGxlaW9AZ2VudG9vLm9yZz4KKworCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSAgZG9jczogZml4IHNpbmNlIHRhZyBmb3IgZ3N0X3N0cnVjdHVyZV9pZF9oYXNfZmllbGRfdHlwZWQoKQorCSAgZ3N0X3N0cnVjdHVyZV9pZF9oYXNfZmllbGRfdHlwZWQgd2FzIGFkZGVkIGluIDAuMTAuMjYsIG5vdCAwLjEwLjE2LgorCSAgQXBwYXJlbnQgdHlwbyBpbiBjb21taXQgZjllM2I3MmYgd2hlbiB0aGUgQVBJIHdhcyBhZGRlZC4KKworMjAxMC0wMy0xNyAxMDo1MzoxOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5jOgorCSAgZG9jczogZml4IFNpbmNlIG1hcmtlcnMgZm9yIGdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQqKCkKKwkgIEFzIHRoZSBoZWFkZXJzIHdlcmUgYnJva2VuIGluIDAuMTAuMjYgdGhlIGZ1bmN0aW9ucyB3ZXJlbid0IHJlYWxseQorCSAgdXNhYmxlIGJhY2sgdGhlbiwgc28gd2Ugc2hvdWxkIGFkdmVydGlzZSB0aGVtIGFzIGJlaW5nIHRoZXJlIG9ubHkKKwkgIHNpbmNlIDAuMTAuMjcuCisJICBTcG90dGVkIGJ5IE1hcnQgUmF1ZHNlcHAuCisKKzIwMTAtMDMtMTYgMTc6NTY6MTMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSogZ3N0L2dzdGNoaWxkcHJveHkuYzoKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkqIGdzdC9nc3R0YWdsaXN0LmM6CisJICBnc3Q6IHVzZSAjaWYgR0xJQl9DSEVDS19WRVJTSU9OIGluc3RlYWQgb2YgI2lmbmRlZiBHTElCTUFDUk8KKwkgIGZvciBiZXR0ZXIgZ3JlcHBhYmlsaXR5IGF0IHRoZSB0aW1lIHdlIGJ1bXAgR0xpYiB2ZXJzaW9uIHJlcXVpcmVtZW50cy4KKworMjAxMC0wMy0xNCAxMTo0NzoyMyArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkgIHR5cGVmaW5kOiBkZWFjdGl2YXRlIHBhZCBpZiB3ZSBjYW4ndCBnZXQgbGVuZ3RoIG9yIGl0J3MgYSBsZW5ndGggb2YgemVyby4KKwkgIEZpeGVzIGlzc3VlcyB3aGVuIHJlLXVzaW5nIHR5cGVmaW5kIGFmdGVyIGEgZmlsZSBvZiBsZW5ndGggemVyby4KKworMjAxMC0wMy0xNiAxMDozMjoxMiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYmFzZXRyYW5zZm9ybTogQWNjZXB0IG5vbi1maXhlZCBjYXBzIHN1Z2dlc3Rpb25zCisJICBXaGVuIGRvaW5nIHBhZF9hbGxvY3MsIHVzZSBub24tZml4ZWQgY2FwcyBzdWdnZXN0aW9ucyBhbmQKKwkgIHRyeSB0byBmaXhhdGUgdGhlbSBiZWZvcmUgdXNpbmcuIFRoaXMgbWFrZXMgcG9zc2libGUgdG8KKwkgIGhhdmUgc3VnZ2VzdGVkIGJ1ZmZlciBzaXplIHdpdGggMCBpbiBiYXNldHJhbnNmb3JtIGp1c3QKKwkgIHRvIHNpZ25hbCB1cHN0cmVhbSBhIHJlbmVnb3RpYXRpb24gaXMgbmVlZGVkCisJICBGaXhlcyAjNTc2MjM0CisJICBGaXhlcyAjNjA5MDQ2CisKKzIwMTAtMDMtMTYgMTA6NDA6NDAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZGVzaWduL3BhcnQtcW9zLnR4dDoKKwkgIGRvY3M6IG1lcmdlIFFvUyBtZXNzYWdlIGZpZWxkcworCSAgVGhlcmUgd2FzIGFscmVhZHkgYSBzZWN0aW9uIGFib3V0IFFvUyBtZXNzYWdlcyB0aGF0IGlzIG5vdyBtZXJnZWQgd2l0aCB0aGUgbmV3CisJICBpbmZvcm1hdGlvbi4KKworMjAxMC0wMy0xNiAxMDo0NDowMSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBkb2NzL3B3Zy9idWlsZGluZy1ib2lsZXIueG1sOgorCSAgcHdnOiBtZW50aW9uIGhvdyB0byBidWlsZCBhZnRlciB1c2luZyB0aGUgcHJvamVjdCBzdGFtcAorCisyMDEwLTAzLTE2IDA5OjU2OjQxICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3R0YXNrLmM6CisJICB0YXNrOiBzbnByaW50ZiBuZWVkcyB0byBpbmNsdWRlICJzdGRpby5oIgorCisyMDEwLTAzLTE1IDE4OjQ4OjE0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2Rlc2lnbi9wYXJ0LXFvcy50eHQ6CisJICBkb2NzOiB1cGRhdGUgUU9TIGRvY3MgdG8gaW5jbHVkZSBRT1MgbWVzc2FnZXMKKwkgIEFkZCBzb21lIGRvY3MgYWJvdXQgdGhlIHZhbHVlcyBuZWVkZWQgZm9yIGEgUW9TIG1lc3NhZ2UgYW5kIHNvbWUgdXNlCisJICBjYXNlcy4KKwkgIFNlZSAjMzIyOTQ3CisKKzIwMTAtMDMtMTUgMTc6MDc6NTkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGdzdC9nc3R0YXNrLmM6CisJICB0YXNrOiB1c2UgYmlvbmljL2xpYmMgZnJpZW5kbHkgYXJndW1lbnRzIHRvIHByY3RsCisJICBwcmN0bCBpcyBzdXBwb3NlZCB0byB0YWtlIDUgYXJndW1lbnRzLiBJdCB1c2VkIHRvIHdvcmsgd2l0aCAyIGFyZ3VtZW50cyBvbiBzb21lCisJICB2ZXJzaW9ucyBvZiBsaWJjIGJlY2F1c2UgaXQgaXMgZGVmaW5lZCBhcyBhIHZhcmFncyBmdW5jdGlvbiB0aGVyZS4KKwkgIFNlZSAjNjExOTExCisKKzIwMTAtMDMtMTUgMTU6MDc6MzUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R0YXNrLmM6CisJICB0YXNrOiB1cGRhdGUgZG9jcy4KKworMjAxMC0wMy0xNSAxNDo0NDo1MSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R0YWdsaXN0Lmg6CisJICB0YWdsaXN0OiBXb3JrIGFyb3VuZCBndGstZG9jIHByb2JsZW0KKworMjAxMC0wMy0xNSAxNDo0NDoxNiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5oOgorCSAgYnl0ZXdyaXRlcjogVXNlIGNvcnJlY3QgZ3RrLWRvYyB3b3JrYXJvdW5kCisKKzIwMTAtMDMtMTUgMTQ6MDU6MzUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIHV0aWxzOiBIYW5kbGUgaXRlcmF0b3IgcmVzeW5jcyBpbiBnc3RfcGFkX3Byb3h5X3NldGNhcHMoKQorCSAgRml4ZXMgYnVnICM2MTI4ODEuCisKKzIwMTAtMDMtMTUgMTQ6NDg6MTkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGdzdC9nc3R0YXNrLmM6CisJICB0YXNrOiBjb25maWd1cmUgdGhlIG9iamVjdCBuYW1lIGFzIHRocmVhZCBuYW1lCisJICBXaGVuIHdlIGhhdmUgcHJjdGwgYXZhaWxhYmxlLCB1c2UgaXQgdG8gc2V0IHRoZSBjb25maWd1cmVkIG9iamVjdCBuYW1lIGFzIHRoZQorCSAgdGhyZWFkIG5hbWUgZm9yIGJldHRlciBkZWJ1Z2dpbmcuCisJICBCYXNlZCBvbiBwYXRjaCBieSBSb2JlcnQgU3dhaW4uCisKKzIwMTAtMDMtMTUgMTM6NDg6MzAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogc2V0IGEgZ29vZCBuYW1lIG9uIHRoZSB0YXNrIG9mIHRoZSBwYWQKKwkgIFVzZSB0aGUgZWxlbWVudDpwYWQgbmFtZXMgdG8gY29uZmlndXJlIGEgZ29vZCBuYW1lIGZvciB0aGUgcGFkIHRhc2suCisKKzIwMTAtMDMtMTUgMTI6MTM6NTUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R0YXNrLmg6CisJICB0YXNrOiByZXRhYgorCisyMDEwLTAzLTE1IDEwOjI2OjE4ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RwbHVnaW5sb2FkZXIuYzoKKwkgIGxvZ2dpbmc6IHJlbW92ZSBleHRyYSBuZXdsaW5lCisKKzIwMTAtMDMtMDQgMjM6MzY6NTAgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdGJ1cy5jOgorCSAgYnVzOiB0dXJuIGdfcmV0dXJuX2lmX2ZhaWwgaW50byBnX2Fzc2VydC4KKwkgIFRoaXMgZWl0aGVyIG11c3QgbmV2ZXIgaGFwcGVuICh3aGljaCBtYWtlcyBzZW5zZSBpbiB0aGlzIGNhc2UpIGFuZCB0aHVzIHNob3VsZAorCSAgdXNlIGFzc2VydCgpIG9yIHdlIHNob3VsZCB1c2UgYSB0cmFkaXRpb25hbCBpZiAocG9sbF9kYXRhLT5tZXNzYWdlKSByZXR1cm47CisJICB0byBhdm9pZCBkaWZmZXJuZXQgYmVoYXZpb3VyIG9mIGludGVuYWwgYXBpIHdoZW4gY29tcGlsaW5nIHdpdGgKKwkgIEdfRElTQUJMRV9DSEVDS1MuCisKKzIwMTAtMDMtMDMgMjM6Mzc6MDEgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdGNhcHMuYzoKKwkgIGNhcHM6IG1vdmUgdGhlIGNoZWNrIHRvIHRoZSBwdWJsaWMgYXBpLgorCSAgVGhpcyBhdm9pZHMgY3JlYXRpbmcgZW1wdHkgY2FwcyBhbmQgZGVzdHJveWluZyB0aGVtIGluIHRoZSBjYXNlIG9mIGFuIGVycm9yLiBXZQorCSAgYWxzbyBhdm9pZCBkb3VibGUgY2hlY2tpbmcgaW4gb3RoZXIgY29kZSBwYXRoIHdoZXJlIHdlIGNhbGwgdGhlIGludGVybmFsIGFwaS4KKworMjAxMC0wMy0wMyAyMzozNDo1OCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSAgY2FwczogdGhpcyBpcyBpbnRlcm5hbCBBUEkgd2hlcmUgd2UgbmVlZCB0byBlbnN1cmUgIU5VTEwgaGlnaGVyIHVwCisKKzIwMTAtMDMtMDMgMjE6NTA6MjEgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdC5jOgorCSAgZ3N0OiB0aGlzIGlzIGFuIGludGVybmFsIGZ1bmN0aW9uIHdoZXJlIHdlIGFscmVhZHkgZW5zdXJlICFOVUxMIHdoZW4gY2FsbGluZworCisyMDEwLTAyLTI2IDA5OjI5OjIzICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6CisJICBkZWJ1Z3V0aWxzOiBmaXggY2FzZSBvZiBwYWQgZmxhZworCSAgRHVlIHRvIGEgdHlwbyB0aGUgY29kZSB3YXMgYWx3YXlzIHNob3dpbmcgdGhlIGZsYWcgYXMgJ3MnIChsb3dlciBjYXNlKS4KKwkgIEZpeGVzICM2MTEwNzUKKworMjAxMC0wMi0yMyAyMzo1MDozNiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0aW5mby5jOgorCSAgZGVidWc6IGFkZCBwcmV0dHkgcHJpbnRlciBmb3IgZXZlbnRzCisJICBBZGRlciBpcyB1c2luZyBHU1RfUFRSX0ZPUk1BVCBmb3IgZXZlbnRzIGFscmVhZHksIHNvIHdlIG1pZ2h0IGFjdHVhbHkKKwkgIGltcGxlbWVudCB0aGlzIGFuZCBwcmludCBvdXQgc29tZSB1c2VmdWwgaW5mby4KKworMjAxMC0wMy0xMyAxMTowMzo1OSArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgorCisJKiBnc3QvZ3N0cGx1Z2luLmg6CisJICBBZGQgc29tZSAwLjExIEZJWE1FcyBmb3IgR3N0UGx1Z2luSW5pdEZ1bmMKKwkgIFNlZSA4ZmU2MzAwMGRlMzFiYjJiY2YzNDZkNTkyMzBkZWEwNjExNzk5N2NkIGZvciB3aHkgaGF2aW5nIGEgVFJVRS9GQUxTRQorCSAgcmV0dXJuIHZhbHVlIGlzIGEgYmFkIGlkZWEuCisJICBJJ3ZlIHNjYW5uZWQgYSBmZXcgcGx1Z2lucyBhbmQgdGhleSBnZW5lcmFsbHkgZ2V0IGl0IHdyb25nIGFuZCBhcmVuJ3QKKwkgIHVubG9hZGFibGUgd2hlbiB0aGV5IHJldHVybiBGQUxTRS4KKworMjAxMC0wMy0xMiAxOTowNzoyMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBvL2FmLnBvOgorCSogcG8vYXoucG86CisJKiBwby9iZS5wbzoKKwkqIHBvL2JnLnBvOgorCSogcG8vY2EucG86CisJKiBwby9jcy5wbzoKKwkqIHBvL2RhLnBvOgorCSogcG8vZGUucG86CisJKiBwby9lbl9HQi5wbzoKKwkqIHBvL2VzLnBvOgorCSogcG8vZXUucG86CisJKiBwby9maS5wbzoKKwkqIHBvL2ZyLnBvOgorCSogcG8vaHUucG86CisJKiBwby9pZC5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vamEucG86CisJKiBwby9uYi5wbzoKKwkqIHBvL25sLnBvOgorCSogcG8vcGwucG86CisJKiBwby9wdF9CUi5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vcncucG86CisJKiBwby9zay5wbzoKKwkqIHBvL3NxLnBvOgorCSogcG8vc3IucG86CisJKiBwby9zdi5wbzoKKwkqIHBvL3RyLnBvOgorCSogcG8vdWsucG86CisJKiBwby92aS5wbzoKKwkqIHBvL3poX0NOLnBvOgorCSogcG8vemhfVFcucG86CisJICBwbzogdXBkYXRlIGZvciBuZXcgc3RyaW5ncworCisyMDEwLTAzLTEyIDE5OjA1OjE2ICswMDAwICBMZW8gU2luZ2VyIDxsc2luZ2VyQGNhbHRlY2guZWR1PgorCisJKiBnc3QvZ3N0aW5mby5jOgorCSAgZ3N0aW5mbzogZml4IGNvbXBpbGF0aW9uIGVycm9yIGlmIEhBVkVfUkVHSVNURVJfUFJJTlRGX1NQRUNJRklFUiBpcyB1bmRlZmluZWQKKwkgIFVzZSAjaWYgSEFWRV9GT08gaW5zdGVhZCBvZiAjaWZkZWYgSEFWRV9GT08uCisJICBGaXhlcyAjNjEyNzMzLgorCisyMDEwLTAzLTEyIDE2OjQyOjQ3ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+CisKKwkqIGdzdC9nc3RwbHVnaW4uYzoKKwkgIHBsdWdpbnM6IERvIG5vdCBldmVyIHVubG9hZCBhIHBsdWdpbiBhZnRlciBjYWxsaW5nIGludG8gaXQKKwkgIFRoaXMgaXMgd2hhdCBjYW4gaGFwcGVuIGluIGEgcGx1Z2luX2luaXQgZnVuY3Rpb246CisJICAtIEFuIGVsZW1lbnQgYmFzZWQgb24gR3N0QmFzZVNpbmsgaXMgcmVnaXN0ZXJlZAorCSAgLSBPdGhlciBlbGVtZW50cyBmYWlsIHRvIHJlZ2lzdGVyCisJICAtIFRoZSBwbHVnaW5faW5pdCBmdW5jdGlvbiByZXR1cm5zIEZBTFNFCisJICBOb3cgaWYgdGhpcyB0aGUgcGx1Z2luIGlzIHRoZSBmaXJzdCBwbHVnaW4gdG8gbGluayBhZ2FpbnN0CisJICBsaWJnc3RiYXNlLnNvLCBpdCB3aWxsIGhhdmUgY2F1c2VkIGxpYmdzdGJhc2Uuc28gdG8gYmUgbG9hZGVkIGFuZCBzdGF0aWMKKwkgIHN0cmluZ3MgZnJvbSB0aGF0IGxpYnJhcnkgd2lsbCBoYXZlIGJlZW4gYWRkZWQgdG8gZ29iamVjdCB3aGlsZQorCSAgcmVnaXN0ZXJpbmcgR3N0QmFzZVNpbmsuCisJICBTbyB1bmxvYWRpbmcgdGhlIHBsdWdpbiB3aWxsIGNhdXNlIHRob3NlIHN0cmluZ3MgdG8gZ28gc3RhbGUgYW5kIHRoZQorCSAgbmV4dCBwbHVnaW4gdXNpbmcgR3N0QmFzZVNpbmsgd2lsbCBjcmFzaC4gU28gd2UgbXVzdCBub3QgdW5sb2FkIG1vZHVsZXMKKwkgIGFmdGVyIGNhbGxpbmcgaW50byB0aGVtIGV2ZXIuCisJICBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTU3MjgwMAorCisyMDEwLTAzLTEyIDE1OjM2OjM4ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6CisJICBpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZTogRG9uJ3QgcGFzcyBOVUxMIHRvIHRoZSBHU2VxdWVuY2UgQVBJCisKKzIwMTAtMDMtMTIgMTM6MzM6MDAgKzAwMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KKworCSogc2NyaXB0cy9naXQtdXBkYXRlLnNoOgorCSAgZ2l0LXVwZGF0ZTogRml4IGVycm9yIHJldHVybiB2YWx1ZSBhbmQgbWFrZSB0aGUgc2NyaXB0IGV4aXQgb24gZXJyb3JzCisJICBOZXdlciB2ZXJzaW9ucyBvZiBCQVNIICg0Lng/KSBzZWVtIHRvIGRpc2xpa2UgdXNpbmcgLTEgZm9yIGEgcmV0dXJuLiBFdmVuCisJICB0aG91Z2ggaXQncyBkb2N1bWVudGVkIGFzIGJlaW5nIHNpZ25lZCwgQkFTSCBjb21wbGFpbnMgYWJvdXQgaXQsIHNvIHVzZQorCSAgMjU1IGluc3RlYWQuCisKKzIwMTAtMDMtMTIgMTM6NTQ6MjkgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSBlMjcyZjcxIHRvIDU1Y2Q1MTQKKworMjAxMC0wMi0xNyAxMzowMjo0MyArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZ3N0L2dzdGNhcHMuYzoKKwkqIGdzdC9nc3RjaGlsZHByb3h5LmM6CisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSAgZ3N0OiBVc2UgR19WQUxVRV9DT0xMRUNUX0lOSVQgaWYgYXZhaWxhYmxlCisJICBUaGlzIGJyaW5ncyB0b3RhbCBjYWxsIHNwZWVkdXBzIGJldHdlZW4gNSUgYW5kIDI1JS4KKwkgIGdzdF9jYXBzX3NldF9zaW1wbGVfdmFsaXN0OiArNSUKKwkgIGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbGlzdDogKyAxMCUKKwkgIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbGlzdDogKzI1JQorCSAgZ3N0X3RhZ19saXN0X2FkZF92YWxpc3Q6ICs1JQorCSAgTWVhc3VyZWQgdXNpbmcgdmFsZ3JpbmQgd2hlbiBydW4gb3ZlciB0aGUgZGlzY292ZXJ5IG9mIDIwMCBtZWRpYSBmaWxlcy4KKwkgIEZpeGVzICM2MTAyNTYKKworMjAxMC0wMy0xMSAyMDoyOToyOSArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgorCisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mZHNyYy5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBvbGwuYzoKKwkqIHRlc3RzL2NoZWNrL2xpYnMvZ3N0bmV0dGltZXByb3ZpZGVyLmM6CisJICB3aW4zMjogRml4IGJ1aWxkIGZhaWx1cmVzIG9mIHRlc3RzCisKKzIwMTAtMDMtMDkgMjA6Mzg6NDcgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdHRhZ2xpc3QuYzoKKwkqIGdzdC9nc3R0YWdsaXN0Lmg6CisJICB0YWdzOiBBZGRzIG5ldyBnZW8gbG9jYXRpb24gdGFncworCSAgQWRkcyBuZXcgdGFncyBHU1RfVEFHX0dFT19MT0NBVElPTl9DT1VOVFJZLAorCSAgR1NUX1RBR19HRU9fTE9DQVRJT05fQ0lUWSBhbmQgR1NUX1RBR19HRU9fTE9DQVRJT05fU1VCTE9DQVRJT04uCisJICBBUEk6IEdTVF9UQUdfR0VPX0xPQ0FUSU9OX0NPVU5UUlkKKwkgIEFQSTogR1NUX1RBR19HRU9fTE9DQVRJT05fQ0lUWQorCSAgQVBJOiBHU1RfVEFHX0dFT19MT0NBVElPTl9TVUJMT0NBVElPTgorCSAgRml4ZXMgIzYxMjQxMAorCisyMDEwLTAzLTExIDE4OjM2OjMyICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+CisKKwkqIGdzdC9nc3QuYzoKKwkgIHdpbjMyOiBBZGQgcHJvdG90eXBlIGZvciBEbGxNYWluKCkKKworMjAxMC0wMy0xMSAxMTo0NjowOSArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogcG8vYWYucG86CisJKiBwby9hei5wbzoKKwkqIHBvL2JlLnBvOgorCSogcG8vYmcucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGEucG86CisJKiBwby9kZS5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZXMucG86CisJKiBwby9ldS5wbzoKKwkqIHBvL2ZpLnBvOgorCSogcG8vZnIucG86CisJKiBwby9odS5wbzoKKwkqIHBvL2lkLnBvOgorCSogcG8vaXQucG86CisJKiBwby9qYS5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9wbC5wbzoKKwkqIHBvL3B0X0JSLnBvOgorCSogcG8vcnUucG86CisJKiBwby9ydy5wbzoKKwkqIHBvL3NrLnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkgIFVwZGF0ZSAucG8gZmlsZXMKKworMjAwOS0xMi0yOCAxNzoyNToyMCArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZ3N0L2dzdGNoaWxkcHJveHkuYzoKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJKiBnc3QvZ3N0bWluaW9iamVjdC5jOgorCSogZ3N0L2dzdG9iamVjdC5jOgorCSogZ3N0L2dzdHV0aWxzLmM6CisJKiBnc3QvcGFyc2UvZ3JhbW1hci55OgorCSAgZ3N0cmVhbWVyOiByZW1vdmUgdW5uZWVkZWQgY2FzdHMKKwkgIEdfUEFSQU1fU1BFQ19WQUxVRV9UWVBFIGRvZXMgYW4gZXhwZW5zaXZlIHR5cGUgY2hlY2ssIHdoZXJlYXMgdGhlCisJICB2YWx1ZV90eXBlIGZpZWxkIGlzIGEgcHVibGljIGZpZWxkLCBzbyB3ZSBjYW4ganVzdCB1c2UgaXQgZGlyZWN0bHkuCisKKzIwMTAtMDMtMTEgMTE6Mzk6NDAgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmFjOgorCSAgUmVtb3ZlIC1XaW5saW5lIGZsYWcgYWdhaW4KKwkgIEl0IHRyaWdnZXJzIGZvciBhIGxvdCBvZiBHU3RyZWFtZXIgQVBJIChldmVuIHRob3VnaCB0aG9zZSB0cmlnZ2VycyBhcmUKKwkgIHdyb25nIG1vc3Qgb2YgdGhlIHRpbWUpLgorCSAgSSBtaXNzZWQgaXQgYmVjYXVzZSBpdCBvbmx5IHRyaWdnZXJzIHdpdGggLU8yLCBhbmQgSSB3YXMgdXNpbmcgLU8wLgorCisyMDEwLTAzLTExIDExOjIwOjM1ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSBkZjhhN2M4IHRvIGUyNzJmNzEKKworMjAxMC0wMy0xMSAxMToxMDo0NCArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuYWM6CisJICBBZGQgYSBidW5jaCBtb3JlIHdhcm5pbmcgZmxhZ3MgdG8gY29uZmlndXJlCisJICBOb25lIG9mIHRoZXNlIGZsYWdzIGNhdXNlIHdhcm5pbmdzIGFueW1vcmUsIHNvIG5vIGZpeGVzIG5lY2Vzc2FyeS4KKwkgIFRoZSBmbGFncyBhcmU6CisJICAtV2Zvcm1hdC1ub25saXRlcmFsCisJICAtV2Zvcm1hdC1zZWN1cml0eQorCSAgLVdvbGQtc3R5bGUtZGVmaW5pdGlvbgorCSAgLVdjYXN0LWFsaWduCisJICAtV2lubGluZQorCSAgLVdpbml0LXNlbGYKKwkgIC1XbWlzc2luZy1pbmNsdWRlLWRpcnMKKwkgIC1XYWRkcmVzcworCSAgLVdhZ2dyZWdhdGUtcmV0dXJuCisJICAtV25vLW11bHRpY2hhcgorCSAgLVduZXN0ZWQtZXh0ZXJucworCisyMDEwLTAzLTAyIDIyOjU4OjA2ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgorCSogZ3N0L01ha2VmaWxlLmFtOgorCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3RlbGVtZW50ZGV0YWlscy5oOgorCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6CisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFyc2UuYzoKKwkqIGdzdC9nc3RwaXBlbGluZS5jOgorCSogZ3N0L2dzdHBsdWdpbi5jOgorCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6CisJKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKKwkqIGdzdC9nc3R1dGlscy5jOgorCSogZ3N0L3BhcnNlL3R5cGVzLmg6CisJKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgorCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6CisJKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKKwkqIHBsdWdpbnMvaW5kZXhlcnMvTWFrZWZpbGUuYW06CisJKiBwbHVnaW5zL2luZGV4ZXJzL2dzdGZpbGVpbmRleC5jOgorCSogcGx1Z2lucy9pbmRleGVycy9nc3RpbmRleGVycy5jOgorCSogcGx1Z2lucy9pbmRleGVycy9nc3RpbmRleGVycy5oOgorCSogcGx1Z2lucy9pbmRleGVycy9nc3RtZW1pbmRleC5jOgorCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdGVlLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWluaW9iamVjdC5jOgorCSogdGVzdHMvY2hlY2svbGlicy90eXBlZmluZGhlbHBlci5jOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBGaXhlcyBmb3IgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV21pc3NpbmctcHJvdG90eXBlcworCSAgQWxzbyBhZGRzIHRob3NlIGZsYWdzIHRvIHRoZSBjb25maWd1cmUgd2FybmluZyBmbGFncworCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYxMTY5MgorCisyMDEwLTAzLTExIDA5OjM5OjIzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSAgYnVmZmVyOiBmaXggcHJpbnRmIGZvcm1hdAorCSAgVXNlICV1IHRvIHByaW50IHVuc2lnbmVkIGludGVnZXJzLgorCisyMDEwLTAzLTExIDEwOjI5OjIzICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHRlc3RzL2NoZWNrL2xpYnMvdHlwZWZpbmRoZWxwZXIuYzoKKwkgIHRlc3RzOiBjYXN0IHRoZSBhcmcuIHRvIGZpeCB0aGUgYnVpbGQgd2l0aCBuZXcgY29tcGlsZXIgb3B0cy4KKwkgIFRoaXMgaXMgdWdseS4gSSBhbSBub3Qgc3VyZSBpZiB3ZSByZWFsbHkgd2FudCB0byBoYXZlIHN1Y2ggY2FzdHMgYWxsIG92ZXIgdGhlCisJICBwbGFjZS4KKworMjAxMC0wMy0xMSAxMDoxNDowNSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0LWkxOG4tYXBwLmg6CisJKiBnc3QvZ3N0LWkxOG4tbGliLmg6CisJICBpMThuOiBkZWZpbmUgZHVtbXkgbmdldHRleHQgaWYgaTE4biBpcyBkaXNhYmxlZC4KKwkgIFdlIGNhbm5vdCBibGluZGx5IHVzZSBnZXR0ZXh0IGZ1bmN0aW9uIGFuZCBub3QgZGVmaW5lIHRoZW0gd2hlbiBub3QgdXNpbmcgZ2V0dGV4dC4KKworMjAxMC0wMy0xMSAxMDowMDo0NSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0LWkxOG4tYXBwLmg6CisJKiBnc3QvZ3N0LWkxOG4tbGliLmg6CisJICBpMThuOiBmaXggdGhlIGJ1aWxkIHdpdGggaTE4biBkaXNhYmxlZC4KKwkgIERvbid0IGluY2x1ZGUgZ2V0dGV4dC5oIGlmICFFTkFCTEVfTkxTLgorCisyMDEwLTAzLTA0IDEwOjQ0OjUyICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkgIGJ1ZmZlcjogYWxsb3cgY29uZmlndXJhYmxlIG1lbW9yeSBhbGlnbm1lbnQuIEZpeGVzICM1OTY4MzIKKwkgIFRoZSBhbGlnbm1lbnQgZ3VhcmFudGVlZCBieSBtYWxsb2MgaXMgbm90IGFsd2F5cyBzdWZmaWNpZW50LiBFLmcuIHZlY3RvcgorCSAgaW5zdHJ1Y3Rpb25zIG9yIGhhcmR3YXJlIHN1YnN5c3RlbXMgd2FudCBzcGVjaWZpY2FsbHkgYWxpZ25lZCBidWZmZXJzLiBUaGUKKwkgIGF0dGFjaGVkIHBhdGNoIHdpbGwgdXNlIHBvc2l4X21lbWFsaWduIGlmIGF2YWlsYWJsZSB0byBhbGxvY2F0ZSBidWZmZXJzLgorCSAgVGhlIGRlc2lyZWQgYWxpZ25tZW50IGNhbiBiZSBzZXQgd2hlbiBydW5uaW5nIGNvbmZpZ3VyZSB1c2luZyB0aGUgbmV3CisJICAtLXdpdGgtYnVmZmVyLWFsaWdubWVudCBvcHRpb24uCisKKzIwMTAtMDMtMTAgMjE6NTE6NTAgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIDk3MjBhN2QgdG8gZGY4YTdjOAorCisyMDEwLTAzLTEwIDIwOjUyOjA2ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+CisKKwkgIE1lcmdlIGJyYW5jaCAnd29yaycKKworMjAxMC0wMy0wMyAxMTo0NTozOCArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuYWM6CisJKiBnc3QvZ3N0LmM6CisJKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgorCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKKwkqIGdzdC9nc3Rmb3JtYXQuYzoKKwkqIGdzdC9nc3Rmb3JtYXQuaDoKKwkqIGdzdC9nc3RpbmZvLmM6CisJKiBnc3QvZ3N0bWluaW9iamVjdC5jOgorCSogZ3N0L2dzdG9iamVjdC5jOgorCSogZ3N0L2dzdG9iamVjdC5oOgorCSogZ3N0L2dzdHBsdWdpbi5jOgorCSogZ3N0L2dzdHBsdWdpbi5oOgorCSogZ3N0L2dzdHBsdWdpbmxvYWRlci5jOgorCSogZ3N0L2dzdHF1ZXJ5LmM6CisJKiBnc3QvZ3N0cXVlcnkuaDoKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkqIGdzdC9nc3R0cmFjZS5jOgorCSogZ3N0L2dzdHRyYWNlLmg6CisJKiBnc3QvZ3N0dmFsdWUuYzoKKwkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6CisJKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgorCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuaDoKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aGVscGVyLmM6CisJKiBsaWJzL2dzdC9oZWxwZXJzL2dzdC1wbHVnaW4tc2Nhbm5lci5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgorCSogdGVzdHMvYmVuY2htYXJrcy9jb250cm9sbGVyLmM6CisJKiB0ZXN0cy9iZW5jaG1hcmtzL21hc3MtZWxlbWVudHMuYzoKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3RlZS5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwcmVzZXQuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0YWcuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOgorCSogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6CisJKiB0ZXN0cy9jaGVjay9saWJzL3R5cGVmaW5kaGVscGVyLmM6CisJKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvY2xlYW51cC5jOgorCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOgorCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYzoKKwkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6CisJICBGaXhlcyBmb3IgLVd3cml0ZS1zdHJpbmdzCisJICBUaGlzIGNoYW5nZXMgc29tZSBBUElzIGluIGNvbXBhdGlibGUgd2F5czoKKwkgIC0gU29tZSBmdW5jdGlvbnMgbm93IHRha2UgImNvbnN0IGNoYXIgKiIgYXJndW1lbnRzLCBub3QgImNoYXIgKiIKKwkgIC0gU29tZSBzdHJ1Y3RzIG5vdyBoYXZlICJjb250cyBjaGFyICoiIG1lbWJlcnMsIG5vdCAiY2hhciAqIgorCSAgVGhlIGNoYW5nZXMgbWF5IGNhdXNlIHdhcm5pbmdzIHdoZW4gY29tcGlsaW5nIHdpdGggdGhlIHJpZ2h0IHdhcm5pbmcKKwkgIGZsYWdzLiBZb3UndmUgYmVlbiB3YXJuZWQuCisJICBBbHNvIGFkZHMgLVd3cml0ZS1zdHJpbmdzIGFzIGEgd2FybmluZyBmbGFnIGluIGNvbmZpZ3VyZS5hYy4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTE2OTIKKworMjAxMC0wMy0wMyAxMDozMToyNiArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuYWM6CisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiB0ZXN0cy9jaGVjay9saWJzL3RyYW5zZm9ybTEuYzoKKwkgIEZpeGVzIC1XdW5kZWYgd2FybmluZ3MKKwkgIC4uLiBhbmQgYWRkcyB0aGF0IGZsYWcgdG8gY29uZmlndXJlLmFjCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjExNjkyCisKKzIwMTAtMDMtMDMgMTA6MzE6MDUgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KKworCSogdGVzdHMvYmVuY2htYXJrcy9nc3Rwb2xsc3RyZXNzLmM6CisJICBiZW5jaG1hcmtzOiBSZW1vdmUgdW5uZWVkZWQgZ190aHJlYWRfZXhpdCgpCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjExNjkyCisKKzIwMTAtMDMtMDMgMTA6MjY6MTQgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KKworCSogZ3N0L2dzdC5jOgorCSogZ3N0L2dzdHBsdWdpbmxvYWRlci5jOgorCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6CisJKiB0b29scy9nc3QtaW5zcGVjdC5jOgorCSAgRml4ZXMgZm9yIC1Xb2xkLXN0eWxlLWRlZmluaXRpb24KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTE2OTIKKworMjAxMC0wMy0wMiAyMzo1MToxOCArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuYWM6CisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdGJ1cy5jOgorCSogZ3N0L2dzdGNsb2NrLmM6CisJKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKKwkqIGdzdC9nc3RpbmRleC5jOgorCSogZ3N0L2dzdGluZGV4ZmFjdG9yeS5jOgorCSogZ3N0L2dzdGluZm8uYzoKKwkqIGdzdC9nc3RpbmZvLmg6CisJKiBnc3QvZ3N0b2JqZWN0LmM6CisJKiBnc3QvZ3N0cGlwZWxpbmUuYzoKKwkqIGdzdC9nc3RwbHVnaW4uYzoKKwkqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5Lmg6CisJKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKKwkqIGdzdC9nc3R0YXNrLmM6CisJKiBnc3QvZ3N0dGFza3Bvb2wuYzoKKwkqIGdzdC9nc3R1dGlscy5oOgorCSogZ3N0L2dzdHhtbC5jOgorCSogZ3N0L3BhcnNlL2dyYW1tYXIueToKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbHNvdXJjZS5jOgorCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5jOgorCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmM6CisJKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZHAtcHJpdmF0ZS5oOgorCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmFrZXNpbmsuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYXJhbXNwZWNzLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFnc2V0dGVyLmM6CisJKiB0ZXN0cy9jaGVjay9saWJzL3Rlc3RfdHJhbnNmb3JtLmM6CisJKiB0ZXN0cy9leGFtcGxlcy9zdHJlYW1zL3Rlc3RydHBvb2wuYzoKKwkgIE1ha2UgY29kZSBzYWZlIGZvciAtV3JlZHVuZGFudC1kZWNscworCSAgQWRkcyB0aGF0IHdhcm5pbmcgdG8gY29uZmlndXJlLmFjCisJICBJbmNsdWRlcyBhIHRpbnkgY2hhbmdlIG9mIHRoZSBHU1RfQk9JTEVSUExBVEVfRlVMTCgpIG1hY3JvOgorCSAgVGhlIGdldF90eXBlKCkgZnVuY3Rpb24gaXMgbm8gbG9uZ2VyIGRlY2xhcmVkIGJlZm9yZSBiZWluZyBkZWZpbmVkLgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYxMTY5MgorCisyMDEwLTAzLTEwIDIwOjQzOjM1ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSAwYjZlMDcyIHRvIDk3MjBhN2QKKworMjAxMC0wMy0wMyAxMDowMDo0MSArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgorCisJKiBnc3QvcGFyc2UvTWFrZWZpbGUuYW06CisJICBNYWtlIHN1cmUgZ2VuZXJhdGVkIGNvZGUgZG9lc24ndCBydW4gd2l0aCAtV2Vycm9yCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjExNjkyCisKKzIwMTAtMDMtMTAgMTc6MDM6MjkgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmFjOgorCSAgVXBkYXRlIHRvIGNvbW1vbi8gY2hhbmdlcyB0byBFUlJPUl9DRkxBR1MKKworMjAxMC0wMy0xMCAxOToxNzo0MiArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgorCisJKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKKwkgIFJldmVydCAicmVnaXN0cnk6IHJlbW92ZSB1bnVzZWQgZnVuY3Rpb24iCisJICBUdXJucyBvdXQgIHRoZSBmdW5jdGlvbiBpcyBub3QgdW51c2VkLCBidXQgd2FzIGluIGFuICNpZmRlZiBXSU4zMgorCSAgc2VjdGlvbi4KKwkgIFdob29wcy4KKwkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgNTdkNWRiNDI0YzY4YWI1YTYxZjMzY2UzNmNlMDE3OWViMzAyNTFhYy4KKworMjAxMC0wMy0xMCAxNjowOTozMyArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgorCisJKiBjb21tb246CisJICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKKwkgIEZyb20gN2NjNWViNCB0byAwYjZlMDcyCisKKzIwMTAtMDMtMDIgMjE6MDc6MzMgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KKworCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6CisJICByZWdpc3RyeTogcmVtb3ZlIHVudXNlZCBmdW5jdGlvbgorCSAgQWN0dWFsbHksIHRoZXJlIHdhcyB0d28gZnVuY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZSwgYnV0IG9ubHkgb25lIHdhcworCSAgdXNlZC4KKwkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTE2OTIKKworMjAxMC0wMy0wMiAxNjoyMDoxNSArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgorCisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICByZW1vdmUgdW51c2VkIGdzdF9lbGVtZW50X2RlZmF1bHRfZXJyb3IoKQorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYxMTY5MgorCisyMDEwLTAzLTEwIDA3OjE1OjE1ICswMDAwICBKZXJlbXkgSHVkZGxlc3RvbiA8amVyZW15aHVAZnJlZWRlc2t0b3Aub3JnPgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIHV0aWxzOiBVc2UgbXVscSBpbnN0ZWFkIG9mIG11bCBhcyBzb21lIGFzc2VtYmxlcnMgY2FuJ3QgZ3Vlc3MgdGhlIHNpemUgb2YgdGhlIG9wZXJhbmRzCisJICBGaXhlcyBidWcgIzYxMjM3MC4KKworMjAxMC0wMy0xMCAwMTowOToxMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSA3YWE2NWI1IHRvIDdjYzVlYjQKKworMjAxMC0wMy0wOSAyMToyMDoyNyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSA0NGVjY2U3IHRvIDdhYTY1YjUKKworMjAxMC0wMi0yNiAxNjowMzo0NyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIE1ha2VmaWxlLmFtOgorCSogZ3N0L01ha2VmaWxlLmFtOgorCSogZ3N0L3BhcnNlL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbToKKwkqIHBrZ2NvbmZpZy9NYWtlZmlsZS5hbToKKwkqIHRvb2xzL01ha2VmaWxlLmFtOgorCSAgYnVpbGQ6IE1ha2Ugc29tZSBtb3JlIHJ1bGVzIHNpbGVudCBpZiByZXF1ZXN0ZWQKKworMjAxMC0wMi0yNiAxNTozMjoxNCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkgIGNvbmZpZ3VyZTogVXNlIGF1dG9tYWtlIDEuMTEgc2lsZW50IHJ1bGVzIGluc3RlYWQgb2Ygc2hhdmUgaWYgYXZhaWxhYmxlCisJICBUaGlzIG1ha2VzIHN1cmUgdGhhdCB3ZSB1c2Ugc29tZXRoaW5nIHRoYXQgaXMgc3RpbGwgbWFpbnRhaW5lZCBhbmQKKwkgIGFsc28gYnJpbmdzIGJhY2sgbGlidG9vbCAxLjUgc3VwcG9ydC4KKworMjAxMC0wMi0yMiAxNjoyNTo0NSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5jOgorCSAgbGZvY29udHJvbHNvdXJjZTogT3B0aW1pemUgZ2V0X3ZhbHVlX2FycmF5KCkKKwkgIERvbid0IGNvbnZlcnQgZnJvbSBHVmFsdWUgdG8gdGhlIGFjdHVhbCB0eXBlIGZvciBldmVyeSBzaW5nbGUKKwkgIHZhbHVlLgorCisyMDEwLTAyLTIyIDE1OjE4OjQxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6CisJICBpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZTogT3B0aW1pemUgZ2V0X3ZhbHVlX2FycmF5KCkKKwkgIFRoaXMgbWFrZXMgaXQgPjEweCBmYXN0ZXIgaWYgbW9yZSB0aGFuIGEgc2luZ2xlIHZhbHVlIGlzIHJlcXVlc3RlZAorCSAgYnkgbm90IHNlYXJjaGluZyBpbiB0aGUgR1NlcXVlbmNlIGZvciBldmVyeSB2YWx1ZSBhbmQgY29udmVydGluZworCSAgdGhlIHZhbHVlIGZyb20gR1ZhbHVlIHRvIHRoZSByZWFsIHZhbHVlIHR5cGUuCisKKzIwMTAtMDItMjEgMTc6MzY6NTUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9iZW5jaG1hcmtzL2NvbnRyb2xsZXIuYzoKKwkgIGNvbnRyb2xsZXI6IEFkZCBiZW5jaG1hcmsgZm9yIGdldHRpbmcgYSB2YWx1ZSBhcnJheSBvZiB0aGUgY29udHJvbCBwb2ludHMKKworMjAxMC0wMy0wOCAyMzoyODowNCArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgorCisJKiBnc3QvZ3N0cGx1Z2luLmM6CisJICBGaXggdHlwb3MgaW4gZG9jdW1lbnRhdGlvbgorCisyMDEwLTAzLTA4IDIzOjA0OjI2ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+CisKKwkqIGdzdC9nc3R2YWx1ZS5jOgorCSAgY2FwczogRmFpbCB3aGVuIGZyYWN0aW9ucyBhcmUgZm9sbG93ZWQgYnkgcmFuZG9tIHRleHQKKwkgIFByZXZpb3VzIGNvZGUgdHJlYXRlZCAiMS8xeW91cm1vbSIgdGhlIHNhbWUgYXMgIjEvMSIgYW5kICIxd2ltc21vbSIgdGhlCisJICBzYW1lIGFzICIxIi4gTm93IHRoZSBjb2RlIGlzIHN0cmljdGVyIGFuZCB3aWxsIGZhaWwgdG8gY29udmVydCBhCisJICBmcmFjdGlvbiB3aGVuIGZvbGxvd2VkIGJ5IGdhcmJhZ2UgdGV4dC4KKworMjAxMC0wMy0wOSAxNzozMjozOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgorCSAgQmFjayB0byBkZXZlbG9wbWVudAorCis9PT0gcmVsZWFzZSAwLjEwLjI4ID09PQorCisyMDEwLTAzLTA4IDIzOjA5OjAxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogQ2hhbmdlTG9nOgorCSogTkVXUzoKKwkqIFJFTEVBU0U6CisJKiBjb25maWd1cmUuYWM6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgorCSogZ3N0cmVhbWVyLmRvYXA6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgorCSAgUmVsZWFzZSAwLjEwLjI4CisKKzIwMTAtMDMtMDggMjM6MDY6NDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmUucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kYS5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9lcy5wbzoKKwkqIHBvL2V1LnBvOgorCSogcG8vZmkucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2h1LnBvOgorCSogcG8vaWQucG86CisJKiBwby9pdC5wbzoKKwkqIHBvL2phLnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3BsLnBvOgorCSogcG8vcHRfQlIucG86CisJKiBwby9ydS5wbzoKKwkqIHBvL3J3LnBvOgorCSogcG8vc2sucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJKiBwby96aF9DTi5wbzoKKwkqIHBvL3poX1RXLnBvOgorCSAgVXBkYXRlIC5wbyBmaWxlcworCisyMDEwLTAzLTA4IDIyOjA1OjI5ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+CisKKwkqIGdzdC9nc3R2YWx1ZS5jOgorCSAgY2FwczogQWxsb3cgMS9tYXggYXMgdGhlIG1pbmltYWwgZnJhY3Rpb24gdmFsdWUgPiAwCisJICBUaGlzIGlzIHVzZWZ1bCBmb3IgZm9ybWF0cyB0aGF0IHJlcXVpcmUgYSB2YWxpZCBmcmFtZXJhdGUgKGxpa2UKKwkgIHRoZW9yYWVuYykuCisKKzIwMTAtMDMtMDQgMTU6MjE6MzcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJICBlbGVtZW50OiBmaXggdHlwbyBpbiBjb21tZW50cworCis9PT0gcmVsZWFzZSAwLjEwLjI3ID09PQorCisyMDEwLTAzLTA1IDIzOjQzOjI2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogQ2hhbmdlTG9nOgorCSogTkVXUzoKKwkqIFJFTEVBU0U6CisJKiBjb25maWd1cmUuYWM6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgorCSogZ3N0cmVhbWVyLmRvYXA6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgorCSAgUmVsZWFzZSAwLjEwLjI3CisKKzIwMTAtMDMtMDUgMjM6NDE6MDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmUucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kYS5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9lcy5wbzoKKwkqIHBvL2V1LnBvOgorCSogcG8vZmkucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2h1LnBvOgorCSogcG8vaWQucG86CisJKiBwby9pdC5wbzoKKwkqIHBvL2phLnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3BsLnBvOgorCSogcG8vcHRfQlIucG86CisJKiBwby9ydS5wbzoKKwkqIHBvL3J3LnBvOgorCSogcG8vc2sucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJKiBwby96aF9DTi5wbzoKKwkqIHBvL3poX1RXLnBvOgorCSAgVXBkYXRlIC5wbyBmaWxlcworCisyMDEwLTAzLTA0IDE4OjM5OjAyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBvbGwuYzoKKwkgIGdzdHBvbGw6IGRvbid0IHBhc3Mgbm9uLW9iamVjdHMgYXMgZmlyc3QgYXJndW1lbnQgdG8gR1NUX0RFQlVHX09CSkVDVCgpCisJICBUaGlzIG1heSBjYXVzZSBjcmFzaGVzIHdoZW4gbG9nZ2luZyBpcyBlbmFibGVkLCBlc3BlY2lhbGx5IG9uIHdpbmRvd3MuCisJICBJdCdzIG5vdCBzYWZlIHRvIHBhc3MgcmFuZG9tIHBvaW50ZXJzIHRvIGdfdHlwZV9jaGVja19pbnN0YW5jZV9pc19hKCkuCisJICBGaXhlcyAjNjExNzE5LgorCisyMDEwLTAzLTAzIDE5OjU0OjUwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogY29uZmlndXJlLmFjOgorCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgorCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKKwkgIDAuMTAuMjYuNCBwcmUtcmVsZWFzZQorCisyMDEwLTAzLTAzIDE5OjQ5OjM0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogcG8vYWYucG86CisJKiBwby9hei5wbzoKKwkqIHBvL2JlLnBvOgorCSogcG8vYmcucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGEucG86CisJKiBwby9kZS5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZXMucG86CisJKiBwby9ldS5wbzoKKwkqIHBvL2ZpLnBvOgorCSogcG8vZnIucG86CisJKiBwby9odS5wbzoKKwkqIHBvL2lkLnBvOgorCSogcG8vaXQucG86CisJKiBwby9qYS5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9wbC5wbzoKKwkqIHBvL3B0X0JSLnBvOgorCSogcG8vcnUucG86CisJKiBwby9ydy5wbzoKKwkqIHBvL3NrLnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkgIHBvOiB1cGRhdGUgdHJhbnNsYXRpb25zCisKKzIwMTAtMDMtMDMgMTI6MDY6MzAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuYzoKKwkgIGRvY3M6IGZpeCB1cCBieXRld3JpdGVyIGRvYyBjaHVua3MgZm9yIGZsb2F0IGZ1bmN0aW9ucyBhcyB3ZWxsCisKKzIwMTAtMDMtMDMgMTE6Mjg6MjcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSogbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLmg6CisJICBieXRld3JpdGVyOiBmaXggaGVhZGVycyBmb3IgZmxvYXQvZG91YmxlIHdyaXRpbmcgZnVuY3Rpb25zCisJICBUaGUgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZ3N0X2J5dGVfd3JpdGVyX3B1dF97ZmxvYXQzMnxmbG9hdDY0fV8qKCkgYW5kIG5vdAorCSAgZ3N0X2J5dGVfd3JpdGVyX3B1dF97ZmxvYXR8ZG91YmxlfV8qKCkuCisJICBTcG90dGVkIGJ5OiBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+CisKKzIwMTAtMDMtMDEgMTI6MDI6NDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSAgdGFnczogdHJ5IHRvIG1ha2UgY29tbWVudCBmb3IgdHJhbnNsYXRvcnMgbW9yZSBoZWxwZnVsCisKKzIwMTAtMDItMjYgMTU6NDY6NTAgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBiYXNlc2luazogZml4IGVtZXJnZW5jeSByZW5kZXJpbmcgdGltZXN0YW1wIHRyYWNraW5nCisJICBTcGVjaWZpY2FsbHksIGlmIGFsbCAoaW5jbHVkaW5nIGluaXRpYWwpIGJ1ZmZlcnMgdHVybiB1cCBsYXRlLAorCSAgZW1lcmdlbmN5IHJlbmRlcmluZyBzaG91bGQgYWxzbyBraWNrIGluIGFwcHJvcHJpYXRlbHkuCisJICBGaXhlcyAjNjExMDg3LgorCisyMDEwLTAyLTI0IDAwOjMwOjAyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogY29uZmlndXJlLmFjOgorCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgorCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKKwkgIDAuMTAuMjYuMyBwcmUtcmVsZWFzZQorCisyMDEwLTAyLTI0IDAwOjI5OjI1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogcG8vYmcucG86CisJKiBwby9lcy5wbzoKKwkqIHBvL25sLnBvOgorCSAgcG86IHVwZGF0ZSB0cmFuc2xhdGlvbnMKKworMjAxMC0wMi0xOSAxMzoyNjowMSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzoKKwkqIHRlc3RzL2NoZWNrL2xpYnMvY29udHJvbGxlci5jOgorCSAgaW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2U6IERvbid0IHBhc3MgTlVMTCBwb2ludGVycyB0byBHU2VxdWVuY2UgQVBJCisJICBUaGlzIGNhdXNlcyBhc3NlcnRpb24gZmFpbHVyZXMuIEZpeGVzIGJ1ZyAjNjEwNDQ0LgorCisyMDEwLTAyLTE5IDEzOjIwOjM2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5jOgorCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5oOgorCSAgaW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2U6IEFkZCBjb25zdCBxdWFsaWZpZXJzIHRvIHZhbHVlcyBpbiB0aGUgX3NldCBmdW5jdGlvbnMKKwkgIFRoZSB2YWx1ZXMgYXJlIG5vdCBtb2RpZmllZCBhbmQgYXJlIGNvcGllZCwgYSBjb25zdCBiZWZvcmUgdGhlIHBhcmFtZXRlcgorCSAgc2hvdWxkIG1ha2UgdGhpcyBldmVuIG1vcmUgb2J2aW91cy4KKworMjAxMC0wMi0xOCAwOToxNzowNiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aGVscGVyLmM6CisJICBjb250cm9sbGVyOiBBZGQgc29tZSBGSVhNRSAwLjExIGNvbW1lbnRzCisKKzIwMTAtMDItMTcgMTA6MDQ6NTQgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6CisJICBjb3JlbGVtZW50czogQ29tYmluZSByZWR1bmRhbnQgY29kZQorCisyMDEwLTAyLTE3IDAxOjI3OjIyICswMTAwICBBbmRvbmkgTW9yYWxlcyBBbGFzdHJ1ZXkgPHlsYXR1eWFAZ21haWwuY29tPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOgorCSAgRml4IGNvbXBpbGF0aW9uIG9mIGZkc2luayBhbmQgZmRzcmMgd2l0aCBNU1ZDCisKKzIwMTAtMDItMTggMTQ6NTg6NTIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJKiBwby92aS5wbzoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6CisJICAwLjEwLjI2LjIgcHJlLXJlbGVhc2UKKworMjAxMC0wMi0xOCAxMzoxMjozOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvcGx1Z2lucy8uZ2l0aWdub3JlOgorCSAgLmdpdGlnbm9yZTogaWdub3JlIHNvbWUgbW9yZSB0ZW1wb3JhcnkgZG9jcyBjcnVmdAorCisyMDEwLTAyLTE4IDEzOjA5OjE3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogTWFrZWZpbGUuYW06CisJICBidWlsZDogZml4IGluZGVudGluZyBpbiB3aW4zMi11cGRhdGUgdGFyZ2V0CisJICBObyBpZGVhIHdoeSB3ZSBuZWVkIHRvIHJ1biBnc3QtaW5kZW50IHR3aWNlIG9uIHRoYXQgZmlsZSwgYnV0IGl0CisJICBvbmx5IHNlZW1zIHRvIHNldHRsZSBvbiBhIGZpbmFsIGZvcm1hdCB3aXRoIG1pbmltYWwgZGlmZiB0byB0aGUKKwkgIG9uZSBpbiBnaXQgYWZ0ZXIgdHdvIHJ1bnMuCisKKzIwMTAtMDItMTggMTM6MDg6MzIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgorCSAgZ3N0Y2hlY2s6IG1vcmUgZGVidWcgbG9nZ2luZyBmb3IgZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXJfbGlzdCgpCisKKzIwMTAtMDItMTggMTE6NTI6MjggLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg6CisJICBjb2xsZWN0cGFkczogSW1wcm92ZSBkb2NzIGFib3V0ICdkYXRhJyBhdHRyaWJ1dGUKKwkgIEFkZHMgYSByZW1pbmRlciB0byAnZGF0YScgYXR0cmlidXRlIGRvYworCSAgRml4ZXMgIzYxMDM2NgorCisyMDEwLTAyLTE4IDE3OjE1OjM1ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9pbmRleGVycy9nc3RtZW1pbmRleC5jOgorCSAgbWVtaW5kZXg6IGF2b2lkIGJ1c3kgbG9vcCB3aGVuIGRvaW5nIEVYQUNUIGxvb2t1cAorCSAgRml4ZXMgIzYxMDM2Ny4KKworMjAwOS0xMi0yMiAxMTowOToxMCArMDgwMCAgSm9oYW4gQmlsaWVuIDxqb2JpQGxpdGwuY29tPgorCisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSAgaW50cm9zcGVjdGlvbjogYWRkIGFubm90YXRpb24gZm9yIGdzdF9lbGVtZW50X2dldF9zdGF0ZQorCSAgc3RhdGUgYW5kIHBlbmRpbmcgYXJlICJvdXQiIGFyZ3VtZW50cy4KKwkgIEZpeGVzICM2MDUxODkuCisKKzIwMTAtMDItMTcgMTI6MTY6MzcgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmg6CisJICBmaWxlc3JjOiBEb24ndCB1c2UgZXhwZW5zaXZlIGNhc3QgY2hlY2tzIGluIF9jcmVhdGUKKwkgIF9jcmVhdGUoKSBpcyBhIHBhZCBmdW5jdGlvbiBzZXQgYnkgb3Vyc2VsdmVzLCB0aGVyZWZvcmUgd2UncmUgc3VyZSBiYXNlc3JjCisJICBpcyBhIEdzdEZpbGVTcmMuCisJICBTcGVlZHMgdXAgX2NyZWF0ZSgpIGJ5IDE3JSBhbmQgdGhlIHRvdGFsIGNhbGwgYnkgOCUgKGluc3RydWN0aW9uIGNhbGxzIG1lYXN1cmVtZW50cworCSAgZG9uZSB3aXRoIHZhbGdyaW5kKS4KKwkgIEZpeGVzICM2MTAyNDYKKworMjAxMC0wMi0xNyAxMjoxNDowOSArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJICBiYXNlc3JjOiBEb24ndCB1c2UgZXhwZW5zaXZlIGNhc3QgY2hlY2tzIGluIGdldF9yYW5nZS4KKwkgIF9nZXRfcmFuZ2UoKSBpcyBhIHBhZCBmdW5jdGlvbiBzZXQgYnkgb3Vyc2VsdmVzLCB0aGVyZWZvcmUgd2UncmUgY2VydGFpbiB0aGF0CisJICB0aGUgcGFyZW50IGlzIGEgR3N0QmFzZVNyYy4KKwkgIFNwZWVkcyB1cCBfZ2V0X3JhbmdlIGJ5IDM4JSwgYW5kIHRoZSB0b3RhbCBjYWxsIGJ5IDMwJS4gKHZhbGdyaW5kIGluc3RydWN0aW9uCisJICBjYWxscyBtZWFzdXJlbWVudHMpLgorCSAgRml4ZXMgIzYxMDI0NgorCisyMDEwLTAyLTE3IDExOjMxOjA3ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKKwkgIGZkc3JjOiBjbGVhbnVwIHBhcmFtZXRlciBpbml0aWFsaXNhdGlvbiBhbmQgYWRkIGNvbWVtbnQrbG9nZ2luZworCSAgSW5pdGlhbGl6ZSBuZXdfZmQgd2l0aCBERUZBVUxUX0ZEIGFuZCBmZCB3aXRoIC0xLiBTZXR0aW5nIHRoZSBwcm9wZXJ0eSB3aWxsIHNldAorCSAgbmV3X2ZkIGFuZCBpbiBfdXBkYXRlX2ZkKCkgd2UgY2VoY2sgZmQgYWdhaW5zdCAtMS4gQWxzbyBhZGQgYSBjb21lbnQgYWJvdXQgdGhlCisJICB3YXJuaW5nIHdlIGdldCBpbiB0aGUgbG9nIGZyb20gZ3N0X3BvbGxfcmVtb3ZlX2ZkKCkuIFdlIGNvdWxkIGdldCByaWQgb2YgdGhlCisJICB3YXJuaW5nIGlmIHdlIHdhbnQgYnkgdHJhY2tpbmcgaWYgZmQgaGFzIGJlZW4gYWRkZWQgdG8gZmRzZXQuCisKKzIwMTAtMDItMTcgMDk6NTU6NTIgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZG9jcy9kZXNpZ24vZHJhZnQtbWV0YWRhdGEudHh0OgorCSAgZGVzaWduOiB3cml0ZSBhYm91dCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0YWctaGFuZGxpbmcKKwkgIERvY3VtZW50IHRoZSB0YWdoYW5kbGluZyBpbiBnc3RyZWFtZXIuIExpc3QgZ2FwcyBhbmQgcHJvcG9zZSBuZXcgbWVjaGFuaXNtcyB0bworCSAgZGVhbCB3aXRoIHRoZW0uCisKKzIwMTAtMDItMTYgMTA6Mjc6MTggKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdHRhZ2xpc3QuYzoKKwkgIHRhZ2xpc3Q6IHJlbW92ZSBibGFuayBsaW5lcyBpbiB2YXJpYWJsZSBkZWNsYXJhdGlvbnMKKworMjAxMC0wMi0xNiAxMTozMDozNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6CisJKiB0b29scy9nc3QtbGF1bmNoLmM6CisJKiB0b29scy9nc3QtdHlwZWZpbmQuYzoKKwkqIHRvb2xzL2dzdC14bWxpbnNwZWN0LmM6CisJKiB0b29scy90b29scy5oOgorCSAgdG9vbHM6IGNhbGwgZ19zZXRfcHJnbmFtZSgpIGJlZm9yZSBkb2luZyB0aGUgb3B0aW9uIHBhcnNpbmcKKwkgIGdfc2V0cHJnbmFtZSBpcyBpbXBsaWNpdGx5IGNhbGxlZCBieSBnX29wdGlvbl9jb250ZXh0X25ldygpIHdpdGggYSBjaGVjaworCSAgdG8gc2VlIGlmIGl0J3MgYmVlbiBzZXQgYWxyZWFkeSwgc28gc2V0IGl0IGJlZm9yZSBnX29wdGlvbl9jb250ZXh0X25ldygpCisJICBNb3ZlIHZlcnNpb24gcHJpbnRpbmcgYmFjayB1bnRpbCBhZnRlciB0aGUgb3B0aW9ucyBoYXZlIGJlZW4gcGFyc2VkLAorCSAgb3RoZXJ3aXNlIGl0IHdvbid0IHdvcmssIHNpbmNlIGl0IGV2YWx1YXRlcyBhIGZsYWcgc2V0IGJ5IHRoZQorCSAgb3B0aW9uIHBhcnNlci4KKworMjAxMC0wMi0xNiAxMToyNDozMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6CisJKiB0b29scy9nc3QtbGF1bmNoLmM6CisJICBSZXZlcnQgInRvb2xzOiBNb3ZlIGdzdF90b29sc19wcmludF92ZXJzaW9uIGNhbGwgdG8gYXZvaWQgd2FybmluZyBmcm9tIG5ldyBHTGliLiIKKwkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgOTNkZDk1ZjAyZWYzZmE1MzBmNTRjZTgxZThmZmJhOTZmM2I2NzljYi4KKwkgIFRoaXMgY29tbWl0IG1hZGUgLS12ZXJzaW9uIG5vdCB3b3JrIGFueSBsb25nZXIuIFRoZSBnX3NldHByZ25hbWUoKQorCSAgd2FybmluZyBpcyBmaXhlZCBpbiByZWNlbnQgR0xpYiB2ZXJzaW9ucy4KKworMjAxMC0wMi0xNiAwODoyNjo1OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGdzdC9NYWtlZmlsZS5hbToKKwkgIGJ1aWxkOiBtYWtlIHN1cmUgZ3N0LXBsdWdpbi1zY2FubmVyIGdldHMgaW5zdGFsbGVkIHdoZXJlIHdlIGV4cGVjdCBpdAorCSAgQWRkIGNoZWNrIHRvIG1ha2Ugc3VyZSBnc3QtcGx1Z2luLXNjYW5uZXIgcmVhbGx5IGdldHMgaW5zdGFsbGVkIHdoZXJlCisJICB3ZSB3aWxsIGxvb2sgZm9yIGl0IGxhdGVyLCBpZS4gcGF0aHMgYW5kIHByZWZpeGVzIGFyZSBzZXQgYXQgY29uZmlndXJlCisJICB0aW1lIGFuZCBub3Qgc3BlY2lmaWVkIHZpYSBtYWtlLgorCSAgRml4ZXMgIzYwOTk0MS4KKworMjAxMC0wMi0xNSAyMzowMjo1OSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSAgZG9jczogcHJlZmVyIHNob3J0IGRlc2MgZnJvbSBHc3RFbGVtZW50RGV0YWlscworCisyMDEwLTAyLTE1IDAxOjI0OjI1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKKwkgIGRvY3M6IGZpeCBndGstZG9jIGNodW5rIGZvciBnc3RfY2hlY2tfZWxlbWVudF9wdXNoX2J1ZmZlcl9saXN0KCkKKworMjAxMC0wMi0xNSAwMDozMToxNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBvL2FmLnBvOgorCSogcG8vYXoucG86CisJKiBwby9iZS5wbzoKKwkqIHBvL2JnLnBvOgorCSogcG8vY2EucG86CisJKiBwby9jcy5wbzoKKwkqIHBvL2RhLnBvOgorCSogcG8vZGUucG86CisJKiBwby9lbl9HQi5wbzoKKwkqIHBvL2VzLnBvOgorCSogcG8vZXUucG86CisJKiBwby9maS5wbzoKKwkqIHBvL2ZyLnBvOgorCSogcG8vaHUucG86CisJKiBwby9pZC5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vamEucG86CisJKiBwby9uYi5wbzoKKwkqIHBvL25sLnBvOgorCSogcG8vcGwucG86CisJKiBwby9wdF9CUi5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vcncucG86CisJKiBwby9zay5wbzoKKwkqIHBvL3NxLnBvOgorCSogcG8vc3IucG86CisJKiBwby9zdi5wbzoKKwkqIHBvL3RyLnBvOgorCSogcG8vdWsucG86CisJKiBwby92aS5wbzoKKwkqIHBvL3poX0NOLnBvOgorCSogcG8vemhfVFcucG86CisJICBwbzogdXBkYXRlIHBvIGZpbGVzIGZvciBuZXcgY29tbWVudHMKKworMjAxMC0wMi0xNSAwMDoyOTozNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R0YWdsaXN0LmM6CisJICB0YWdzOiB3cmFwIGxvbmcgc3RyaW5nIGNvbnN0YW50cworCSAgQW5kIGZpeCBpbmRlbnRpbmcgaXNzdWUKKworMjAxMC0wMi0xNSAwMDoyMTo0MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R0YWdsaXN0LmM6CisJICB0YWdzOiBhZGQgc29tZSBjb21tZW50cyBmb3IgdHJhbnNsYXRvcnMgc28gdGFnIG1uZW1vbmljcyBnZXQgdHJhbnNsYXRlZCBjb3JyZWN0bHkKKwkgIFdlIHdhbnQgJ3ByZXZpZXcgaW1hZ2UnIHRyYW5zbGF0ZWQgYXMgYSBub3VuLCBub3QgYXMgJ3ByZXZpZXcgW3RoZV0gaW1hZ2UnLgorCisyMDEwLTAyLTA0IDE3OjQzOjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiBkb24ndCBwcmludCBXQVJOIGRlYnVnIHN0YXRlbWVudHMgZm9yIG5vcm1hbCB0aGluZ3MgbGlrZSBFT1MKKworMjAxMC0wMi0xNCAyMzoxNTo0NSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSA5NmRjNzkzIHRvIDQ0ZWNjZTcKKworMjAxMC0wMi0xMyAxNToxODowNSArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkgIHR5cGVmaW5kOiBSZXNldCB0aGUgd29ya2luZyBtb2RlIHdoZW4gZ29pbmcgdG8gUkVBRFkvTlVMTAorCSAgVGhpcyBhbGxvd3MgcHJvcGVybHkgcmUtdXNpbmcgdHlwZWZpbmQgKGVsc2UgaXQgd291bGQgdGhpbmsgaXQncworCSAgYWxyZWFkeSBkb25lIHRoZSB0eXBlZmluZGluZyB3aGVuIGJlaW5nIHJlLXVzZWQgd2l0aCBhbm90aGVyCisJICBzdHJlYW0pLgorCisyMDEwLTAxLTIyIDExOjM4OjU5IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svbGlicy9ieXRld3JpdGVyLmM6CisJICBieXRld3JpdGVyOiBBZGRzIGEgdGVzdCBmb3IgX2ZpbGwKKworMjAxMC0wMS0yMiAwOToxOTozMSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgorCSAgYnl0ZXdyaXRlcjogYWRkIF9maWxsIGZ1bmN0aW9uCisJICBBZGRzIGEgbmV3IGZ1bmN0aW9uIHRvIEdzdEJ5dGVXcml0ZXIgdGhhdCB3cml0ZXMKKwkgIGEgY29uc3RhbnQgdmFsdWUgdG8gYSBtZW1vcnkgYXJlYSAoYWthIG1lbXNldCkuCisJICBVc2VmdWwgZm9yIGFkZGluZyBwYWRkaW5nIHRvIGJ1ZmZlcnMuCisJICBBbHNvIHVwZGF0ZXMgLmRlZiBmaWxlIGFuZCBkb2NzLgorCSAgQVBJOiBnc3RfYnl0ZV93cml0ZXJfZmlsbCgpCisKKzIwMTAtMDEtMjggMTE6NTc6MzMgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSAgdHlwZWZpbmQ6IEF2b2lkIG1lc3NpbmcgcGFkcyBhY3RpdmF0aW9uCisJICBUeXBlZmluZCBtaWdodCBtZXNzIHVwIHBhZHMgbW9kZXMgKHB1bGwvcHVzaCkgaWYgYQorCSAgZG93bnN0cmVhbSBlbGVtZW50IGlzIHBsdWdnZWQgYW5kIGl0cyBwYWRzIGFjdGl2YXRlZAorCSAgaW4gJ3N0ZXAgMicgb2YgdHlwZWZpbmQgcGFkcyBhY3RpdmF0aW9uLgorCSAgVGhpcyBoYXBwZW5zIGJlY2F1c2UgdGhlIGZvbGxvd2luZyBzdGVwcyBkb24ndCBjaGVjaworCSAgaWYgd2UgYWxyZWFkeSBlbWl0dGVkIHR5cGVmb3VuZCBkdWUgdG8gdXBzdHJlYW0gc2V0dGluZworCSAgY2FwcyBvbiBidWZmZXJzIGJlaW5nIHB1bGxlZCBpbiB0aGUgdHlwZWZpbmQgaGVscGVycy4KKwkgIEF2b2lkIHRoYXQgYnkgY2hlY2tpbmcgaWYgdHlwZWZvdW5kIGlzIGFscmVhZHkgZW1taXRlZC4KKwkgIEZpeGVzICM2MDgwMzYKKworMjAxMC0wMi0xMiAxNDo0OTo1MiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJICBiYXNlc3JjOiBNYWtlIGxvY2tpbmcgb2YgdGhlIHNlZ21lbnQgYSBiaXQgbW9yZSBzdHJpY3QgYW5kIHVwZGF0ZSBkb2N1bWVudGF0aW9uCisJICBVcGRhdGluZyB0aGUgc2VnbWVudCB2YWx1ZXMgbXVzdCBvbmx5IGJlIGRvbmUgd2hpbGUgaG9sZGluZyB0aGUKKwkgIFNUUkVBTV9MT0NLIGFuZCBPQkpFQ1RfTE9DSy4gVGhpcyBtZWFucywgcmVhZGluZyBjYW4gYmUgZG9uZSBhcworCSAgbG9uZyBhcyBvbmUgb2YgdGhlbSBpcyBoZWxkLCBub3QgYm90aCwgd2hpY2ggcmVtb3ZlcyBzb21lIGxvY2stdW5sb2NrCisJICBibG9ja3MgZnJvbSBwZXJmb3JtYW5jZSBjcml0aWNhbCBjb2RlIHBhdGhzLgorCSAgQWxzbyBkb2N1bWVudCwgdGhhdCBnc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdCgpICptdXN0KiBiZSBjYWxsZWQgaW4KKwkgIHN0YXRlcyA8PSBSRUFEWSBhbmQgYWRkIGFuIGFzc2VydGlvbiBmb3IgdGhpcy4gQ2hhbmdpbmcgdGhlIGZvcm1hdAorCSAgbGF0ZXIgd2lsbCBjb21wbGV0ZWx5IG1lc3MgdXAgdGhlIHNlZ21lbnQgaW5mb3JtYXRpb24uCisKKzIwMTAtMDItMDggMDk6MTI6MDEgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL3B3Zy9hZHZhbmNlZC1jbG9jay54bWw6CisJKiBkb2NzL3B3Zy9hZHZhbmNlZC1kcGFyYW1zLnhtbDoKKwkqIGRvY3MvcHdnL2FkdmFuY2VkLWludGVyZmFjZXMueG1sOgorCSogZG9jcy9wd2cvYWR2YW5jZWQtbmVnb3RpYXRpb24ueG1sOgorCSogZG9jcy9wd2cvYWR2YW5jZWQtcmVxdWVzdC54bWw6CisJKiBkb2NzL3B3Zy9hZHZhbmNlZC1zY2hlZHVsaW5nLnhtbDoKKwkqIGRvY3MvcHdnL2FkdmFuY2VkLXRhZ2dpbmcueG1sOgorCSogZG9jcy9wd2cvYWR2YW5jZWQtdHlwZXMueG1sOgorCSogZG9jcy9wd2cvYXBwZW5kaXgtcG9ydGluZy54bWw6CisJKiBkb2NzL3B3Zy9idWlsZGluZy1ib2lsZXIueG1sOgorCSogZG9jcy9wd2cvYnVpbGRpbmctY2hhaW5mbi54bWw6CisJKiBkb2NzL3B3Zy9idWlsZGluZy1wYWRzLnhtbDoKKwkqIGRvY3MvcHdnL2J1aWxkaW5nLXByb3BzLnhtbDoKKwkqIGRvY3MvcHdnL2J1aWxkaW5nLXRlc3RhcHAueG1sOgorCSogZG9jcy9wd2cvaW50cm8tYmFzaWNzLnhtbDoKKwkgIHB3Zzogc2V2ZXJhbCB0eXBvIGZpeGVzCisJICBGaXhlcyAjNjA5Mjg2LgorCisyMDEwLTAyLTA5IDE3OjUyOjEzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJICBiYXNlc3JjOiBQcm90ZWN0IHNlZ21lbnQgdmFsdWVzIGZyb20gY29uY3VycmVudCBhY2Nlc3MgZnJvbSBkaWZmZXJlbnQgdGhyZWFkcworCSAgVGhpcyBjb3VsZCBoYXBwZW4gZWFzaWx5IGluIHRoZSBxdWVyeSBmdW5jdGlvbnMgb3Igd2hlbiB0aGUgc2l6ZSBpcyBzZXQKKwkgIG9uIGFwcHNyYyBmcm9tIHNvbWUgbm9uLXN0cmVhbWluZyB0aHJlYWQuCisKKzIwMTAtMDItMDQgMjE6MTE6MjUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSAgdHlwZWZpbmRlbGVtZW50OiBQcm90ZWN0IGludGVybmFsIGZpZWxkcyBmcm9tIGNvbmN1cnJlbnQgY2hhbmdlcyBmcm9tIGRpZmZlcmVudCB0aHJlYWRzCisJICBGaXhlcyBidWcgIzYwODg3Ny4KKworMjAxMC0wMi0xMSAyMDoxNDo1OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRvb2xzL2dzdC1sYXVuY2guYzoKKwkgIGdzdC1sYXVuY2g6IGRvbid0IGxlYWsgdGltZW91dCBHU291cmNlCisKKzIwMTAtMDItMTEgMDA6MTg6MzkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL3JhbmRvbS9yZWxlYXNlOgorCSAgZG9jczogZmxlc2ggb3V0IHJlbGVhc2UgZG9jIHNvbWUgbW9yZQorCisyMDEwLTAyLTExIDAxOjEwOjM4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogTUFJTlRBSU5FUlM6CisJICBVcGRhdGUgTUFJTlRBSU5FUlMsIGFkZCBteXNlbGYKKworMjAxMC0wMi0xMSAxOTo0OTowMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkgIGNvbmZpZ3VyZTogYmFjayB0byBkZXZlbG9wbWVudAorCSAgU2x1c2h5IGZyZWV6ZSByZW1haW5zIGluIGVmZmVjdC4KKworPT09IHJlbGVhc2UgMC4xMC4yNiA9PT0KKworMjAxMC0wMi0xMCAxOToxNzoyOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIENoYW5nZUxvZzoKKwkqIE5FV1M6CisJKiBSRUxFQVNFOgorCSogY29uZmlndXJlLmFjOgorCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmFyZ3M6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgorCSogZ3N0cmVhbWVyLmRvYXA6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgorCSAgUmVsZWFzZSAwLjEwLjI2CisKKzIwMTAtMDItMTAgMTU6MzI6MDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmUucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kYS5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9lcy5wbzoKKwkqIHBvL2V1LnBvOgorCSogcG8vZmkucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2h1LnBvOgorCSogcG8vaWQucG86CisJKiBwby9pdC5wbzoKKwkqIHBvL2phLnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3BsLnBvOgorCSogcG8vcHRfQlIucG86CisJKiBwby9ydS5wbzoKKwkqIHBvL3J3LnBvOgorCSogcG8vc2sucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJKiBwby96aF9DTi5wbzoKKwkqIHBvL3poX1RXLnBvOgorCSAgVXBkYXRlIC5wbyBmaWxlcworCisyMDEwLTAyLTA5IDE1OjUyOjIzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogY29uZmlndXJlLmFjOgorCSAgY29uZmlndXJlOiBkZWZpbmUgR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCBpbiB3aW4zMiBjb25maWcuaAorCSAgRXZlbiBpZiBpdCdzIG5vdCB1c2VkLCBpdCBzdGlsbCBuZWVkcyB0byBiZSBkZWZpbmVkIGZvciB0aGluZ3MgdG8KKwkgIGNvbXBpbGUuCisKKzIwMTAtMDItMDkgMTA6MTk6MDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0X3ByaXZhdGUuaDoKKwkgIGdzdF9wcml2YXRlOiBNU1ZDIGRvZXNuJ3Qgc2VlbSB0byBsaWtlICN3YXJuaW5nCisJICBWaXN1YWwgU3R1ZGlvIGNvbXBsYWlucyBhYm91dCAiaW52YWxpZCBwcmVwcm9jZXNzb3IgY29tbWFuZCAnd2FybmluZyciCisJICBldmVuIGlmIHRoZSBpZmRlZiBkb2Vzbid0IHRyaWdnZXIsIHNvIGp1c3QgcmVtb3ZlIHRoaXMgYWdhaW4uCisKKzIwMTAtMDItMTAgMTQ6NDA6MTcgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpcXVldWUuYzoKKwkgIHRlc3RzOiBGaXggbXVsdGlxdWV1ZSB0ZXN0IGZvciBsYXRlc3QgY29tbWl0cy4KKwkgIFRoZSBwcm9ibGVtIGxpZXMgaW4gdGhlIGZhY3QgdGhhdCBtdWx0aXF1ZXVlIHdpbGwgbm93IG9wZXJhdGUgc29tZXdoYXQKKwkgIHNpbWlsYXJseSB0byB0aGUgZmxvdyBhZ2dyZWdhdGlvbiBsb2dpYyBvZiBkZW11eGVycyBhbmQgdGhlcmVmb3JlCisJICB3aWxsIHN0b3BwIHdoZW5ldmVyIGFsbCBkb3duc3RyZWFtIHBhZHMgcmV0dXJuIE5PVF9MSU5LRUQgYW5kL29yCisJICBVTkVYUEVDVEVEIGFuZCB0aGVyZSdzIG5vIG1vcmUgYnVmZmVycyB0byBwdXNoLgorCSAgVGhlIGxhdGVzdCBjb21taXRzIHNob3VsZCBub3QgYWZmZWN0IGFueSByZWd1bGFyIHVzZS1jYXNlLCBidXQgdGhlIGJ1ZworCSAgcmVwb3J0IHdpbGwgYmUga2VwdCBvcGVuIHNvIHRoZSBwcmV2aW91cyBiZWhhdmlvdXIgY2FuIGJlIHJlLWVzdGFibGlzaGVkCisJICBpZiBuZWVkZWQuCisJICBGaXhlcyAjNjA5NDg2CisKKzIwMTAtMDItMDkgMTU6NTE6MTggKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgorCSAgbXVsdGlxdWV1ZTogRG9uJ3Qgc3RvcCB0aHJlYWRzIG9uIFVORVhQRUNURUQgYW5kIGZvcndhcmQgZmxvdyByZXR1cm5zLgorCSAgV2hlbiBhIGRvd25zdHJlYW0gZWxlbWVudCByZXR1cm5zIEdTVF9GTE9XX1VORVhQRUNURUQgd2Ugd2FudCB0bzoKKwkgICogbGV0IHRoZSBkYXRhcXVldWUgdGFzayBydW5uaW5nCisJICAqIGZvcndhcmQgdGhlIGZsb3cgcmV0dXJuIHVwc3RyZWFtLgorCSAgVGhpcyBhbGxvd3MgdXBzdHJlYW0gZWxlbWVudHMgdG8gcHVzaCBFT1MsIGFuZCBoYXZlIHRoYXQgRU9TIGV2ZW50IGNvbWUKKwkgIGRvd25zdHJlYW0uCisJICBGaXhlcyAjNjA5Mjc0CisKKzIwMTAtMDItMDkgMTM6MzU6MDggKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgorCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlxdWV1ZS5jOgorCSAgUmV2ZXJ0ICJtdWx0aXF1ZXVlOiBoYW5kbGUgVU5FWFBFQ1RFRCBmbG93cmV0dXJuIGJldHRlciIKKwkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgZmJkZjRkY2VkYWQ4NjkyZjFlM2Q4ODM4NTUxMTg4OTg3ZTQ2MmU3NC4KKwkgIFBhcnRseSBmaXhlcyAjNjA5Mjc0CisKKzIwMTAtMDEtMjggMDc6Mjc6NDkgKzAxMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KKworCSogc2NyaXB0cy9naXQtdXBkYXRlLnNoOgorCSAgZ2l0LXVwZGF0ZS5zaDogRml4IGlzc3VlcworCisyMDEwLTAyLTA3IDA5OjU5OjI1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKKwkgIFJldmVydCAiZG9jczogZml4IEFTQ0lJIGFydCBzbyB0aGF0IGl0ZXJhdG9ycyBhcmUgYWxpZ25lZCBwcm9wZXJ0eSB0byB0aGUgZGlhZ3JhbSIKKwkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgYWU2MGQwNmU5ZTQwMWQxZWQ0ZGU1ZWYyNWI1YzI4M2RiMDY5NmEzMSAoZml4ZXM6ICM2MDkxNjYpCisKKzIwMTAtMDItMDQgMTg6MzA6NTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgorCSAgMC4xMC4yNS4zIHByZS1yZWxlYXNlCisKKzIwMTAtMDItMDQgMTc6NDU6NDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwby9iZy5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZmkucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2h1LnBvOgorCSogcG8vaWQucG86CisJKiBwby9wbC5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vemhfQ04ucG86CisJICBwbzogdHJhbnNsYXRpb24gdXBkYXRlcworCisyMDEwLTAyLTAxIDEyOjUwOjQwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKKwkgIGRvY3M6IGZpeCBBU0NJSSBhcnQgc28gdGhhdCBpdGVyYXRvcnMgYXJlIGFsaWduZWQgcHJvcGVydHkgdG8gdGhlIGRpYWdyYW0KKworMjAxMC0wMi0wMSAxNzo0MDowOCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuaDoKKwkgIGdzdGJ5dGV3cml0ZXI6IEZpeCBkaWZmZXJlbnQgZnVuY3Rpb24gbmFtZXMgaW4gLmggYW5kIC5jCisJICBnc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9idWZmZXIgd2Fzbid0IGRlY2xhcmVkCisJICBpbiAuaCwgaW5zdGVhZCB0aGVyZSB3YXMgX3Jlc2V0X2FuZF9nZXRfZGF0YV9hc19idWZmZXIuCisJICBSZXBsYWNlIGl0IHdpdGggdGhlIHJlYWwgZnVuY3Rpb24gbmFtZSwgdGhhdCBpcyBzbWFsbGVyCisJICBhbmQgbWF0Y2hlcyBnc3RfYnl0ZV93cml0ZXJfZnJlZV9hbmRfZ2V0X2J1ZmZlcgorCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYwODcyNgorCisyMDEwLTAxLTMxIDE3OjMwOjU0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKKwkqIGdzdC9nc3RidWZmZXJsaXN0Lmg6CisJICBkb2NzOiBhZGQgc29tZSBtb3JlIFNpbmNlOiBtYXJrZXJzIHRvIGJ1ZmZlciBsaXN0IGRvY3MKKworMjAxMC0wMS0zMCAxODo1Nzo0NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgorCSAgZmlsZXNyYzogZml4IHR5cG8gaW4gd2FybmluZyBtZXNzYWdlCisJICBTcG90dGVkIGJ5IGJzcmVlcmVuakBnbWFpbC5jb20uCisJICBGaXhlcyAjNjA4NDQyLgorCisyMDEwLTAxLTMwIDE1OjE3OjQ4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIDE1ZDQ3YTYgdG8gOTZkYzc5MworCisyMDEwLTAxLTMwIDEzOjQ1OjU4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdC5jOgorCSAgaW5pdDogZG9uJ3Qgc3BldyB3YXJuaW5nIGFib3V0IGxhdGUgZ190aHJlYWRfaW5pdCgpcyBpZiBHTGliID49IDIuMjMuMgorCSAgTGF0ZSBnX3RocmVhZF9pbml0KCkgaXMgZmluZSB3aXRoIG5ld2VyIEdMaWIgdmVyc2lvbnMgYW5kIGRvbmUgYXV0b21hdGljYWxseQorCSAgZnJvbSBnX3R5cGVfaW5pdCgpIHRoZXJlLCBzbyBkb24ndCB3YXJuIGlmIHRoZSBhcHBsaWNhdGlvbiBoYXNuJ3QgY2FsbGVkCisJICBnX3RocmVhZF9pbml0KCkgeWV0IHdoZW4gZ3N0X2luaXQoKSBpcyBjYWxsZWQgd2l0aCBuZXcgR0xpYiB2ZXJzaW9ucy4KKwkgIEZpeGVzICM2MDgzOTguCisKKzIwMTAtMDEtMjkgMDk6NDE6MzAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwa2djb25maWcvZ3N0cmVhbWVyLXVuaW5zdGFsbGVkLnBjLmluOgorCSogcGtnY29uZmlnL2dzdHJlYW1lci5wYy5pbjoKKwkgIHBrZ2NvbmZpZzogZG9uJ3QgcHV0IC1ER19USFJFQURTX01BTkRBVE9SWSBpbnRvIG91ciBwa2ctY29uZmlnIENGTEFHUworCSAgSWYgd2UgZm9yY2UgLURHX1RIUkVBRFNfTUFOREFUT1JZIG9udG8gYXBwcywgdGhlbiBnX3RocmVhZF9zdXBwb3J0ZWQoKQorCSAgd2lsbCBhbHdheXMgZXZhbHVhdGUgdG8gVFJVRSwgc28gdGhlIHR5cGljYWwgdGhyZWFkIGluaXRpYWxpc2F0aW9uCisJICBib2lsZXJwbGF0ZSBjb2RlIGlmICghZ190aHJlYWRfc3VwcG9ydGVkKCkpIGdfdGhyZWFkX2luaXQoTlVMTCk7IHdpbGwKKwkgIG5vIGxvbmdlciB3b3JrLCBhbmQgdGhlIHRocmVhZGluZyBzeXN0ZW0gbm90IGJlIGluaXRpYWxpc2VkIGFuZCB1cworCSAgcHJpbnRpbmcgYSB3YXJuaW5nIGluIGdzdF9pbml0LiBUaGlzIG1heSBiZSBmaW5lIGluIG1vc3QgY2FzZXMsIHNpbmNlCisJICBsYXRlIGluaXRpYWxpc2F0aW9uIGlzIGFsbG93ZWQgYW5kIGF1dG9tYXRpY2FsbHkgZG9uZSBpbiBnX3R5cGVfaW5pdCgpCisJICBzaW5jZSBHTGliIDIuMjMuMiwgYnV0IGxldCdzIGJlIGNhdXRpb3VzIGFuZCBvbmx5IHVzZSB0aGlzIGRlZmluZSB3aGVuCisJICBjb21waWxpbmcgR1N0cmVhbWVyIGl0c2VsZi4KKwkgIFNlZSAjNjA4Mzk4LgorCisyMDEwLTAxLTI4IDE1OjU1OjI3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGlwZWxpbmUuYzoKKwkgIHBpcGVsaW5lOiBUYWtlIHN0YXJ0X3RpbWUgYWZ0ZXIgY2hhaW5pbmcgdXAgdG9vCisJICBSZWZhY3RvciB0aGUgY29kZSB0byB0YWtlIHRoZSBjdXJyZW50IHN0YXJ0X3RpbWUgd2hlbiBnb2luZyB0byBQQVVTRUQuCisJICBNYWtlIHN1cmUgd2UgYWxzbyBjYWxsIHRoZSBzdGFydF90aW1lIHVwZGF0ZSBjb2RlIGFmdGVyIHdlIGNoYWluZWQgdXAgdG8gdGhlCisJICBwYXJlbnQgYmluLgorCSAgRml4ZXMgIzYwNzg0MgorCisyMDEwLTAxLTI2IDE4OjU5OjUwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogY29uZmlndXJlLmFjOgorCSAgMC4xMC4yNS4yIHByZS1yZWxlYXNlCisKKzIwMTAtMDEtMjcgMDA6MjM6MDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzoKKwkgIGNoZWNrczogZml4IHNwdXJpb3VzIGdob3N0IHBhZCBjaGVjayBmYWlsdXJlCisKKzIwMTAtMDEtMjYgMTk6MzU6NTIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmM6CisJKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgorCSAgd2luMzI6IHVwZGF0ZSB3aW5kb3dzIGhlYWRlcnMgdG8gbGF0ZXN0IHZlcnNpb24KKworMjAxMC0wMS0yNiAxOTozMjo0OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvcmFuZG9tL3JlbGVhc2U6CisJICBkb2NzOiBtaW5vciB1cGRhdGUgdG8gcmVsZWFzZSBub3RlcworCisyMDEwLTAxLTI2IDE4OjQ1OjM4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogcG8vYWYucG86CisJKiBwby9hei5wbzoKKwkqIHBvL2JlLnBvOgorCSogcG8vYmcucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGEucG86CisJKiBwby9kZS5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZXMucG86CisJKiBwby9ldS5wbzoKKwkqIHBvL2ZpLnBvOgorCSogcG8vZnIucG86CisJKiBwby9odS5wbzoKKwkqIHBvL2lkLnBvOgorCSogcG8vaXQucG86CisJKiBwby9qYS5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9wbC5wbzoKKwkqIHBvL3B0X0JSLnBvOgorCSogcG8vcnUucG86CisJKiBwby9ydy5wbzoKKwkqIHBvL3NrLnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkgIHBvOiB1cGRhdGUgdHJhbnNsYXRpb24gZmlsZXMKKworMjAxMC0wMS0yNiAxODozOTo0NSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2V4YW1wbGVzL3N0cmVhbXMvcnRwb29sLXRlc3QuYzoKKwkgIHRlc3RzOiBmaXggd2FybmluZyBpbiBydHBvb2wtdGVzdAorCSAgVGhlIHN0cmVhbSBzdGF0dXMgbWVzc2FnZSBvYmplY3QgbWF5IGJlIG9mIGEgbm9uLUdPYmplY3QgdHlwZSwgZS5nLgorCSAgR19UWVBFX1BPSU5URVIgKHNlZSBHc3RBdWRpb1NyYyksIHNvIHByaW50IHRoYXQgcHJvcGVybHkgaW5zdGVhZAorCSAgb2YgYXNzdW1pbmcgdGhlIHZhbHVlIGhvbGRzIGFuIG9iamVjdC4KKworMjAxMC0wMS0yNiAxMjo0MzowOSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6CisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tdWx0aXF1ZXVlLmM6CisJICBtdWx0aXF1ZXVlOiBoYW5kbGUgVU5FWFBFQ1RFRCBmbG93cmV0dXJuIGJldHRlcgorCSAgV2hlbiB3ZSByZWNlaXZlIGFuIFVORVhQRUNURUQgZmxvd3JldHVybiBmcm9tIGRvd25zdHJlYW0sIHdlIG11c3Qgbm90IHNodXRkb3duCisJICB0aGUgcHVzaGluZyB0aHJlYWQgYmVjYXVzZSB1cHN0cmVhbSB3aWxsIGF0IHNvbWUgcG9pbnQgcHVzaCBhbiBFT1MgdGhhdCB3ZSBzdGlsbAorCSAgbmVlZCB0byBwdXNoIGZ1cnRoZXIgZG93bnN0cmVhbS4KKwkgIFRvIGFjaGlldmUgdGhpcywgY29udmVydCB0aGUgVU5FWFBFQ1RFRCByZXR1cm4gdmFsdWUgdG8gT0suIEFkZCBhIGZpeG1lIHNvIHRoYXQKKwkgIHdlIGltcGxlbWVudCB0aGUgcmlnaHQgbG9naWMgdG8gcHJvcGFnYXRlIHRoZSBmbG93cmV0dXJuIHVwc3RyZWFtIGF0IHNvbWUgcG9pbnQuCisJICBBbHNvIGNsZWFuIHVwIHRoZSB1bml0IHRlc3QgYSBsaXR0bGUuCisJICBGaXhlcyAjNjA4MTM2CisKKzIwMTAtMDEtMjYgMDg6NTI6MTYgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL21hbnVhbC9iYXNpY3MtYnVzLnhtbDoKKwkgIGRvY3M6IEZpeCBiYXNpY3MtYnVzIGRvY3MKKwkgIEZpeCB3cm9uZyBpbmZvcm1hdGlvbiBhYm91dCBidXMgd2F0Y2ggZnVuY3Rpb25zIGluIHRoZQorCSAgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgbWFudWFsLgorCSAgRml4ZXMgIzYwODEyNworCisyMDEwLTAxLTI0IDIzOjEyOjIyICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgYmluOiBhbHNvIHJlbW92ZSBwcml2YXRlIGZ1bmN0aW9uIGZyb20gZGVmIGZpbGUKKworMjAxMC0wMS0yNCAyMzowNDoyNyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0YmluLmM6CisJICBiaW46IG1ha2UgYSBpbnRlcmZhY2Ugdm1ldGhvZCBpbXBsZW1lbnRhdGlvbiBzdGF0aWMKKwkgIFRoaXMgc2hvdWxkIG5vdCBjYXVzZSBhbnkgdHJvdWJsZXMgLSB0aGUgbWV0aG9kcyB3YXNuJ3QgaW4gYW55IGhlYWRlci4KKworMjAxMC0wMS0yNCAyMjoyMjowNyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0Y2hpbGRwcm94eS5jOgorCSAgY2hpbGRwcm94eTogcmVtb3ZlIDsgYWZ0ZXIgfQorCisyMDEwLTAxLTIyIDE4OjAwOjUzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSAgcXVldWUyOiBhZGQgc29tZSBkb2NzIHRvIG1hcmsgbmV3IHByb3BlcnR5CisKKzIwMTAtMDEtMjIgMTc6NTU6MzkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5oOgorCSAgcXVldWUyOiBhZGQgb3B0aW9uIHRvIHJlbW92ZSB0aGUgdGVtcC1maWxlCisJICBBZGQgYW4gb3B0aW9uIHRvIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIHRoZSB0ZW1wIGZpbGUgKFRSVUUgYnkgZGVmYXVsdCkuIFRoaXMKKwkgIHNob3VsZCBtYWtlIGl0IHBvc3NpYmxlIGZvciB0aGUgYXBwbGljYXRpb24gdG8ga2VlcCB0aGUgdGVtcCBmaWxlIGJ5IG90aGVyIG1lYW5zCisJICB0aGFuIGhhcmRsaW5raW5nIG9yIGhvbGRpbmcgYW4gZmQgb3Blbi4KKwkgIEZpeGVzICM2MDc3MzkKKworMjAxMC0wMS0yMiAwMjowMjowMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6CisJICB0eXBlZmluZDogZG9uJ3QgbGVhayB1cmkgc3RyaW5nCisKKzIwMTAtMDEtMjEgMTY6MTk6NDQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RpbmRleC5oOgorCSAgZ3N0aW5kZXg6IHJldGFiIC5oIGZpbGUKKworMjAxMC0wMS0yMCAxNDoxMzoxMSArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgorCisJKiB0b29scy9nc3QtaW5zcGVjdC5jOgorCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgorCSogdG9vbHMvZ3N0LXR5cGVmaW5kLmM6CisJKiB0b29scy9nc3QteG1saW5zcGVjdC5jOgorCSAgdG9vbHM6IFJ1biBnX3RocmVhZF9pbml0KCkgdW5jb25kaXRpb25hbGx5CisJICBTaW5jZSB3ZSBkZWZpbmUgR19USFJFQURTX01BTkRBVE9SWSwgZ190aHJlYWRfc3VwcG9ydGVkKCkgZXZhbHVhdGVzIHRvCisJICBUUlVFIHVuY29uZGl0aW9uYWxseSwgc28gY2FsbGluZyBnX3RocmVhZF9pbml0KCkgbmV2ZXIgaGFwcGVuZWQuCisKKzIwMTAtMDEtMjAgMTA6NTg6MjkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGx1Z2lubG9hZGVyLmM6CisJICBwbHVnaW5sb2FkZXI6IGZpeCBjb21waWxlciB3YXJuaW5nIG9uIHdpbjMyCisJICBNb3ZlIHZhcmlhYmxlIHRoYXQncyBvbmx5IHVzZWQgb24gdW5peCBpbnRvIHRoZSB1bml4IGJsb2NrIHNvIHRoYXQKKwkgIHRoZSBjb21waWxlciBkb2Vzbid0IGNvbXBsYWluIGFib3V0IHRoZSB1bnVzZWQgdmFyaWFibGUgb24gd2luMzIKKwkgIChzZWUgIzU5NzY2MikuCisKKzIwMTAtMDEtMjAgMDk6NDU6MDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGx1Z2lubG9hZGVyLmM6CisJICBwbHVnaW5sb2FkZXI6IHRyeSBzY2FubmVyIHNldCB2aWEgZW52IHZhciBiZWZvcmUgdXNpbmcgdGhlIGluc3RhbGxlZCBvbmUKKwkgIElmIHRoZSBHU1RfUExVR0lOX1NDQU5ORVIgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LCB3ZSBzaG91bGQgdHJ5CisJICB0aGUgc2Nhbm5lciBzcGVjaWZpZWQgdGhlcmUgZmlyc3QsIHRvIG1ha2Ugc3VyZSB0aGUgcmlnaHQgc2Nhbm5lciBiaW5hcnkKKwkgIGlzIHVzZWQgZm9yIHVuaW5zdGFsbGVkIHNldHVwcyBhbmQgYnVpbGRzIGZyb20gc291cmNlIHdoZW4gdGhlcmUncworCSAgYWxyZWFkeSBhbiBpbnN0YWxsZWQgdmVyc2lvbi4KKworMjAxMC0wMS0yMCAwNjo1ODoyOCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGdzdC9nc3QuYzoKKwkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItdW5pbnN0YWxsZWQucGMuaW46CisJKiBwa2djb25maWcvZ3N0cmVhbWVyLnBjLmluOgorCSAgYnVpbGQ6IERlZmluZSBHX1RIUkVBRFNfTUFOREFUT1JZIGV2ZXJ5d2hlcmUKKwkgIFdlIHJlcXVpcmUgdGhyZWFkcyB0byBiZSBzdXBwb3J0ZWQgaW4gYW55IGNhc2UgYW5kIGRlZmluaW5nIHRoaXMKKwkgIHdpbGwgc2ltcGxpZnkgdGhlIG11dGV4LCBjb25kaXRpb24gdmFyaWFibGUsIGV0Yy4gbWFjcm9zIGZyb20gZ3RocmVhZAorCSAgdG8gbm90IGFsd2F5cyBjaGVjayBpZiB0aHJlYWRzIGFyZSByZWFsbHkgc3VwcG9ydGVkLgorCSAgRml4ZXMgYnVnICM2MDc0ODEuCisKKzIwMTAtMDEtMDggMjA6NTY6MTggKzAxMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8eWxhdHV5YUBnbWFpbC5jb20+CisKKwkqIGdzdC9nc3RwbHVnaW5sb2FkZXIuYzoKKwkqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSAgcGx1Z2lubG9hZGVyOiBkaXNhYmxlIGV4dGVybmFsIHBsdWdpbiBsb2FkZXIgb24gV2luZG93cyB1bnRpbCBpdCBpcyBwb3J0ZWQgcHJvcGVybHkKKwkgIFNlZSAjNTk3NjYyLgorCisyMDEwLTAxLTIwIDAxOjA5OjU1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdF9wcml2YXRlLmg6CisJKiBnc3QvZ3N0cGx1Z2luLmM6CisJKiBnc3QvZ3N0cGx1Z2lubG9hZGVyLmM6CisJKiBnc3QvcGFyc2UvZ3JhbW1hci55OgorCSogZ3N0L3BhcnNlL3BhcnNlLmw6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJKiBsaWJzL2dzdC9oZWxwZXJzL2dzdC1wbHVnaW4tc2Nhbm5lci5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkgIGdzdF9wcml2YXRlLmg6IG1ha2Ugc3VyZSBnc3RfcHJpdmF0ZS5oIGlzIGluY2x1ZGVkIGJlZm9yZSBnbGliLmgKKwkgIEZvciB0aGUgcmVhc29uIG91dGxpbmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZ3N0X3ByaXZhdGUuaCAoaW5saW5lCisJICBmdW5jdGlvbnMgaW4gZ2xpYiBtYXkgbmVlZCB0aGUgZ19sb2dfZG9tYWluIHZhcmlhYmxlKS4gQWxzbyBpbmNsdWRlCisJICBnc3RfcHJpdmF0ZS5oIGJlZm9yZSB1c2luZyBhbnkgR19PU18qIGRlZmluZXMsIGVzcC4gaW4gcGx1Z2luIGxvYWRlci4KKworMjAxMC0wMS0yMCAwMTozMzozOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy1zZWN0aW9ucy50eHQ6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBkb2NzOiBtaW5vciBndGstZG9jIG1hcmt1cCBmaXhlcworCisyMDEwLTAxLTIwIDAwOjUzOjAxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIDE0Y2VjODkgdG8gMTVkNDdhNgorCisyMDEwLTAxLTE5IDE2OjM5OjM4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2Rlc2lnbi9wYXJ0LXFvcy50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LXNlZWtpbmcudHh0OgorCSAgZG9jczogc21hbGwgZG9jcyB1cGRhdGVzCisKKzIwMTAtMDEtMTkgMTQ6MDc6MjMgKzAxMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIGdzdHBhZDogZGlyZWN0bHkgc2V0IHRoZSBjYXBzIHdoZW4gcHVzaGluZyBidWZmZXIgd2l0aCBkaWZmZXJlbnQgY2Fwcy4KKwkgIFRoaXMgY2hlY2sgaXMgbm90IG5lY2VzYXJyeSBhcyB3ZSBhcmUgbm90IG5lZ290aWF0aW5nIGFueW1vcmUuIEFuZCBpdCBjYW4KKwkgIGJlIHdyb25nIGlmIHVwc3RyZWFtIGNhbid0IHByb2R1Y2UgdGhpcyBjYXBzIGFueW1vcmUsIGJ1dCBkb3duc3RyZWFtIGNhbgorCSAgcHJvY2VzcyB0aGVtIGZpbmUuCisKKzIwMTAtMDEtMTggMTM6NTc6MjkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0bWluaW9iamVjdC5jOgorCSAgbWluaW9iamVjdDogVGhlIEdWYWx1ZSBjb2xsZWN0aW9uIGZ1bmN0aW9uIGNhbiBub3QgYXNzdW1lIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGlzIGluaXRpYWxpemVkCisJICAuLi5hbmQgaXQgd2lsbCB1c3VhbGx5IGJlIGVpdGhlciBmaWxsZWQgYnkgemVyb2VzIG9yIHJhbmRvbSB2YWx1ZXMuCisJICBGaXhlcyBidWcgIzYwNzI4My4KKworMjAxMC0wMS0xNiAyMTo1MjowNiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYmFzZXRyYW5zZm9ybTogT25seSB1c2Ugc3VnZ2VzdGVkIGNhcHMgaW4gYnVmZmVyIGFsbG9jYXRpb24gaWYgYSBzaXplIHdhcyBzdWdnZXN0ZWQgdG9vCisKKzIwMTAtMDEtMTYgMTk6NDE6MjkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJICBzdHJ1Y3R1cmU6IHJlbW92ZSBzdXBlcmZsdW91cyBndWFyZCBhZ2FpbnN0IE5VTEwKKwkgIEFsbCBjYWxsZXJzIG9mIHRoaXMgc3RhdGljIGZ1bmN0aW9uIGFscmVhZHkgY2hlY2sgZm9yIE5VTEwtbmVzcworCSAgdGhlbXNlbHZlcywgc28gbm8gbmVlZCB0byBkbyBpdCBhZ2FpbiAoYW5kIGlmIHdlIGRvIGl0LCB3ZSBzaG91bGQKKwkgIHByb2JhYmx5IGRvIHNvIGJlZm9yZSBkZXJlZmVyZW5jaW5nIHRoZSBwb2ludGVyIGZvciB0aGUgZmlyc3QgdGltZSkuCisKKzIwMDktMTItMTcgMTk6NDU6MzEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0X3ByaXZhdGUuaDoKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkgIHN0cnVjdHVyZTogbWljcm8tb3B0aW1pc2Ugc29tZSBnZXR0ZXJzCisJICBBdm9pZCBjaGVja2luZyB0aGUgR1R5cGUgb2YgdGhlIHZhbHVlIHR3aWNlIChvbmNlIG9uIG91ciBzaWRlIGFuZAorCSAgb25jZSBpbiBnX3ZhbHVlX2dldF8qKCkpIGJ5IGJ5LXBhc3NpbmcgZ192YWx1ZV9nZXQoKSBhbmQgYWNjZXNzaW5nCisJICB0aGUgR1ZhbHVlIHN0cnVjdHVyZSBkaXJlY3RseS4KKworMjAxMC0wMS0xNSAxODozNjowNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdG1lc3NhZ2UuaDoKKwkgIG1lc3NhZ2U6IHVwZGF0ZSBkb2NzIGEgbGl0dGxlCisKKzIwMTAtMDEtMTUgMDA6NDY6MjMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL3JhbmRvbS9yZWxlYXNlOgorCSAgZG9jczogbWlub3IgcmVsZWFzZSBkb2NzIHVwZGF0ZQorCisyMDEwLTAxLTE0IDIwOjE5OjA1ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBiYXNldHJhbnNmb3JtOiBIYW5kbGUgYnVmZmVycyB3aXRoIE5VTEwgY2FwcyBjb3JyZWN0bHkKKwkgIFRoaXMgbWVhbnMgdGhhdCB0aGUgY2FwcyBkaWRuJ3QgY2hhbmdlIHNvIGRvbid0IHRyeSB0byBoYW5kbGUKKwkgIHRoZSBOVUxMIGNhcHMgYXMgdGhlIG5ldyBjYXBzLgorCisyMDEwLTAxLTE0IDEwOjQ0OjE2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5oOgorCSogZ3N0L2dzdHVyaS5oOgorCSAgZG9jczogTW92ZSBmaWVsZCBzcGVjaWZpYyBTaW5jZSBtYXJrZXJzIGF0IHRoZSBzYW1lIGxpbmUKKwkgIEZpeGVzIGdvYmplY3QtaW50cm9zcGVjdGlvbiB3YXJuaW5ncyBhYm91dCBTaW5jZSBiZWluZyBkZWZpbmVkIG11bHRpcGxlIHRpbWVzLgorCisyMDEwLTAxLTEzIDEwOjE3OjAzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9mYXEvZmFxLnhtbDoKKwkgIGZhcTogcmVtb3ZlIHJldmlzaW9uIGhpc3RvcnkgdGhhdCBubyBvbmUgdXBkYXRlcyBvciBjYXJlcyBhYm91dCBhbnl3YXkKKworMjAxMC0wMS0xMyAwOTozMjo1OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZmFxL2RldmVsb3BpbmcueG1sOgorCSogZG9jcy9mYXEvZ2l0LnhtbDoKKwkgIGZhcTogZml4IGxpbmsgdG8gZ3N0LXVuaW5zdGFsbGVkIG9uIGNnaXQKKwkgIEZpeCBsaW5rIHRvIGdzdC11bmluc3RhbGxlZCBub3cgdGhhdCBpdCdzIGJlZW4gbW92ZWQsIGFuZCBmaXggYSB0eXBvCisJICB3aGlsZSB3ZSdyZSBhdCBpdC4gQWxzbyBhZGQgYSBuZXcgc2VjdGlvbiB0byAnQnVpbGRpbmcgR1N0cmVhbWVyIGZyb20KKwkgIGdpdCcgdGhhdCBwb2ludHMgdG8gdGhlICdIb3cgZG8gSSBkZXZlbG9wIGFnYWluc3QgYW4gdW5pbnN0YWxsZWQgY29weQorCSAgb2YgR1N0cmVhbWVyJyBzZWN0aW9uLgorCisyMDEwLTAxLTEzIDEwOjMyOjQ2ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIFJFQURNRToKKwkgIGRvY3M6IHdlJ3JlIGluIGdpdCBzaW5jZSBhIHdoaWxlCisKKzIwMTAtMDEtMTMgMTA6MzE6MjYgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogTWFrZWZpbGUuYW06CisJKiBSRUFETUU6CisJKiBkb2NzL2ZhcS9NYWtlZmlsZS5hbToKKwkqIGRvY3MvZmFxL2RldmVsb3BpbmcueG1sOgorCSogZG9jcy9mYXEvZmFxLnhtbDoKKwkqIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDoKKwkqIHNjcmlwdHMvZ3N0LXVuaW5zdGFsbGVkOgorCSAgc2NyaXB0czogbW92ZSBnc3QtdW5pbnN0YWxsZWQgZnJvbSBkb2NzL2ZhcSB0byBzY3JpcHRzCisJICBEb24ndCBpbmNsdWRlIHRoZSBsb25nIGdzdC11bmluc3RhbGxlZCBzY3JpcHQgaW4gdmVyYmF0aW0gaW4gdGhlIGZhcSBhbnltb3JlCisJICAodGhlcmUgaXMgYSBsaW5rIHRvIGNnaXQpLiBEaXN0IHRoZSBzY3JpcHQgdW5kZXIgaXRzIG5ldyBsb2NhdGlvbi4KKworMjAxMC0wMS0xMiAyMTozNDowMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5jOgorCSAgcmVnaXN0cnk6IGF2b2lkIHNvbWUgbW9yZSB1bm5lY2Vzc2FyeSBtYWxsb2MvZnJlZXMKKworMjAxMC0wMS0xMiAyMDoyMTozMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5jOgorCSAgcmVnaXN0cnk6IGF2b2lkIHNvbWUgdW5uZWNlc3Nhcnkgc3RyZHVwL2ZyZWUgd2hlbiByZWFkaW5nIHRoZSBiaW5hcnkgcmVnaXN0cnkKKwkgIFN0cmluZ3MgaW4gdGhlIGJpbmFyeSByZWdpc3RyeSBhcmUgTlVMLXRlcm1pbmF0ZWQsIHNvIHdlIGNhbiBqdXN0IHVzZSB0aGVtCisJICBkaXJlY3RseSBpZiB3ZSBvbmx5IG5lZWQgdGhlbSB0ZW1wb3JhcmlseSwgYW5kIGF2b2lkIHVubmVjZXNzYXJ5IG1hbGxvY3MKKwkgIGFuZCBmcmVlcy4KKworMjAxMC0wMS0xMiAxNzozODozMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkgIHR5cGVmaW5kZWxlbWVudDogdXNlIG5ldyB0eXBlZmluZCBmdW5jdGlvbgorCSAgUmVmYWN0b3IgYSBsaXR0bGUuCisJICBVc2UgdGhlIG5ldyB0eXBlZmluZCBoZWxwZXIgZnVuY3Rpb24gdGhhdCB1c2VzIHRoZSBleHRlbnNpb24gdG8gc3BlZWQgdXAKKwkgIHR5cGVmaW5kaW5nLgorCisyMDEwLTAxLTEyIDE3OjM0OjM5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOgorCSogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgorCSAgdHlwZWZpbmQ6IGFkZCBhIG5ldyBtZXRob2QgdGhhdCBhbHNvIHVzZXMgdGhlIGZpbGUgZXh0ZW5zaW9uCisJICBBZGQgYSBtZXRob2QgdG8gcGVyZm9ybSBnZXRfcmFuZ2UgdHlwZWZpbmRpbmcgdGhhdCBhbHNvIHVzZXMgdGhlCisJICB1cmkvbG9jYXRpb24gZXh0ZW5zaW9uIGFzIGFuIGV4dHJhIGhpbnQuIEl0IHdpbGwgZmlyc3QgdHJ5IHRvIGNhbGwgdGhlCisJICB0eXBlZmluZCBmdW5jdGlvbnMgb2YgdGhlIGZhY3RvcmllcyB0aGF0IGhhbmRsZSB0aGUgZ2l2ZW4gZXh0ZW5zaW9uLiBUaGUgcmVzdWx0CisJICBpcyB0aGF0IGluIHRoZSBjb21tb24gY2FzZSwgd2Ugb25seSBjYWxsIG9uZSB0eXBlZmluZCBmdW5jdGlvbiwgd2hpY2ggc3BlZWRzIHVwCisJICB0aGUgdHlwZWZpbmRpbmcgYSBsb3QuCisKKzIwMTAtMDEtMTEgMTQ6NTg6MTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZGVzaWduL3BhcnQtcW9zLnR4dDoKKwkgIGRvY3M6IHVwZGF0ZSBRb1MgZG9jdW1lZW50CisJICBBZGQgc29tZSBpZGVhcyBhYm91dCBhIG5ldyBRb1MgbWVzc2FnZS4KKwkgIFNlZSBhbHNvICMzMjI5NDcKKworMjAxMC0wMS0xMSAxMTozODozMiArMDEwMCAgSMOldmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQHRhbmRiZXJnLmNvbT4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKKwkgIHRlZTogbWFrZSByZWxlYXNlX3BhZCB0aHJlYWRzYWZlCisJICBQcm90ZWN0IHRoZSAtPnJlbW92ZWQgZmllbGQgd2l0aCB0aGUgb2JqZWN0IGxvY2sgYXMgd2VsbC4gVGFrZSB0aGUgRFlOIGxvY2sKKwkgIGVhcmxpZXIgc28gdGhhdCB3ZSBjYW4gbWFyayB0aGUgcGFkIHJlbW92ZWQgYW5kIGF2b2lkIGEgcmFjZSBpbiBwYWRfYWxsb2MuCisJICBGaXhlcyAjNjA2NDM1CisKKzIwMDktMTItMTEgMTc6NDY6NDIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidXMuYzoKKwkqIGdzdC9nc3RidXMuaDoKKwkgIGJ1czogd2hpdGVzcGFjZSBmaXhlcworCisyMDEwLTAxLTEwIDIxOjQ5OjI1ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3R1dGlscy5jOgorCSAgdXRpbHM6IGRlZmVyIGdldHRpbmcgdGhlIGNsYXNzZXMgdW50aWwgd2UgYWN0dWFseSBuZWVkIHRoZW0KKwkgIFRoaXMgZnVuY3Rpb24gaGFzIGEgbG90IG9mIGVhcmx5IHJldHVybnMuIEdpdmUgdGhlbSBzb2VtIG1vcmUgYmVuZWZpdC4KKworMjAxMC0wMS0xMCAyMTo0MDoyNCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIHV0aWxzOiBhdm9pZCBleHRyYSBob3AgaW4gZ3N0X2VsZW1lbnRfbGluaworCSAgTm8gbmVlZCB0byBjYWxsIGdzdF9lbGVtZW50X2xpbmtfcGFkc19maWx0ZXJlZCB3aXRoIGZpbHRlcj1OVUxMLCB3aGljaCB3b3VsZAorCSAgY2FsbCBnc3RfZWxlbWVudF9saW5rX3BhZHMoKSBpbiB0aGF0IHdheS4gQ2FsbCBpdCBkaXJlY3RseSB0byBzYXZlIGEgY2FsbCBhbmQKKwkgIGV4cGVuc2l2ZSBnb2JqZWN0IHR5cGUgY2hlY2tzLgorCisyMDEwLTAxLTEwIDE3OjM5OjU1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKKwkgIGNoZWNrOiByZW1vdmUgc29tZSBjcnVmdCBmcm9tIGhlYWRlciBmaWxlCisJICBSZW1vdmUgc29tZSBjcnVmdCBmcm9tIHRoZSBnc3RjaGVjayBoZWFkZXIgZmlsZSB0aGF0J3Mgbm90IG5lZWRlZAorCSAgYW55IGxvbmdlciBub3cgdGhhdCB3ZSBzaGlwIHdpdGggb3VyIG93biBjb3B5IG9mIGxpYmNoZWNrLgorCisyMDEwLTAxLTA3IDE3OjQxOjI2ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGRvY3MvcHdnL2FkdmFuY2VkLW1pZGkueG1sOgorCSogZG9jcy9wd2cvcHdnLnhtbDoKKwkgIHB3ZzogcmVtb3ZlIGVtcHR5IG1pZGkgc2VjdGlvbgorCisyMDEwLTAxLTA3IDEzOjQ4OjI0ICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPGNocmlzdGlhbi5zY2hhbGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBvZiBzc2g6Ly9naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC9nc3RyZWFtZXIvZ3N0cmVhbWVyCisKKzIwMTAtMDEtMDcgMTM6NDc6NTAgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8Y2hyaXN0aWFuLnNjaGFsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0cmVhbWVyLnNwZWMuaW46CisJICBVcGRhdGUgc3BlYyBmaWxlCisKKzIwMTAtMDEtMDYgMjA6MDg6NDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmUucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kYS5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9lcy5wbzoKKwkqIHBvL2V1LnBvOgorCSogcG8vZmkucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2h1LnBvOgorCSogcG8vaWQucG86CisJKiBwby9pdC5wbzoKKwkqIHBvL2phLnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3BsLnBvOgorCSogcG8vcHRfQlIucG86CisJKiBwby9ydS5wbzoKKwkqIHBvL3J3LnBvOgorCSogcG8vc2sucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJKiBwby96aF9DTi5wbzoKKwkqIHBvL3poX1RXLnBvOgorCSAgcG86IHVwZGF0ZSBmb3IgbmV3IHRyYW5zbGF0ZWQgc3RyaW5ncworCisyMDEwLTAxLTA2IDIwOjA2OjQ3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHRhZ2xpc3QuaDoKKwkgIGRvY3M6IG1pbm9yIGRvY3VtZW50YXRpb24gZml4ZXMgZm9yIHJlY2VudGx5LWFkZGVkIHRhZ3MKKwkgIE1lbnRpb24gdGhlIHR5cGUgb2YgdGhlIHRhZyBpbiB0aGUgZ3RrLWRvYyBibHVyYiwgc28gcGVvcGxlIGtub3cKKwkgIHdoaWNoIGFjY2Vzc29yIEFQSSB0byB1c2UsIGFuZCBmaXggdXAgdGhlIGRvYyBibHVyYnMgdG8gbWF0Y2ggdGhlCisJICBhY3R1YWwgdGFnIGRlZmluZS4KKworMjAxMC0wMS0wNiAyMDowNDoxNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R0YWdsaXN0LmM6CisJICB0YWdzOiBmaXggdXAgdHJhbnNsYXRlZCBzdHJpbmdzIGZvciBzb21lIG5ldyB0YWdzCisJICBGaXggdXAgdHJhbnNsYXRlZCBzdHJpbmdzIGZvciBzb21lIHJlY2VudGx5LWFkZGVkIHRhZ3MgdG8gbWF0Y2ggdGhlCisJICBleGlzdGluZyBzdHJpbmdzOiB3ZSB3YW50IHNob3J0IG1uZW1vbmljLWxpa2Ugc3RyaW5ncyBoZXJlIHRoYXQgc3RhcnQKKwkgIHdpdGggYSBsb3dlciBjYXNlIGxldHRlci4KKworMjAxMC0wMS0wNiAxOToxOTo0MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0cmVnaXN0cnkuaDoKKwkqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgorCSAgcmVnaXN0cnk6IGRlcHJlY2F0ZSB1c2VsZXNzIGdzdF9yZWdpc3RyeV94bWxfe3JlYWR8d3JpdGV9X2NhY2hlKCkKKwkgIFRoZSBvbmx5IHJlYXNvbiB0aGVzZSB0d28gZnVuY3Rpb25zIGFyZSBzdGlsbCBhcm91bmQgaXMgdGhhdCBhdCBzb21lCisJICBwb2ludCBpbiB0aGUgcGFzdCB0aGV5IHdlcmUgaW4gYSBwdWJsaWMgaGVhZGVyLCBzbyB3ZSBjYW4ndCByZWFsbHkKKwkgIHJlbW92ZSB0aGVtIG5vdyBldmVuIHRob3VnaCB0aGV5IHNob3VsZCBoYXZlIGJlZW4gcHJpdmF0ZSBhbGwgYWxvbmcKKwkgIChhbmQgYXJlbid0IHJlYWxseSBwYXJ0aWN1bGFybHkgdXNlZnVsKS4gU2luY2UgdGhlc2UgYXJlIGp1c3QgZW1wdHkKKwkgIHN0dWJzIG5vdyB0aGF0IGRvIG5vdGhpbmcgYnV0IHJldHVybiBGQUxTRSBhbmQgd2lsbCBiZSByZW1vdmVkIGluCisJICAwLjExIGFueXdheSwgd2UgbWF5IGp1c3QgYXMgd2VsbCBkZXByZWNhdGUgdGhlbSBmb3JtYWxseS4KKworMjAxMC0wMS0wNiAxOToxODo1MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R0YXNrcG9vbC5jOgorCSogZ3N0L2dzdHRhc2twb29sLmg6CisJICBkb2NzOiBhZGQgU2luY2UgbWFya2VycyB0byB0YXNrIHBvb2wgZG9jcyBhbmQgZG9jdW1lbnQgdGFzayBmdW5jdGlvbgorCisyMDEwLTAxLTA2IDE4OjUwOjQzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogY29uZmlndXJlLmFjOgorCSAgY29uZmlndXJlOiBtb3ZlIFNIQVZFX0lOSVQgYmVoaW5kIGFsbCBjaGVja3MKKwkgIE1vdmUgU0hBVkVfSU5JVCBiZWhpbmQgYWxsIG90aGVyIGNoZWNrcywgaW4gcGFydGljdWxhciBBR19HU1RfQ0hFQ0tfQ0hFQ0tTLgorCSAgVGhpcyBzaG91bGQgZml4IHByb2JsZW1zIHdpdGggaGVhZGVyIGNoZWNraW5nIGFuZCBjaGVja2luZyBmb3IgbG9jYWx0aW1lX3IsCisJICB3aGljaCBjYXVzZXMgY29tcGlsYXRpb24gZXJyb3JzIHdpdGggY2xlYW4gY2hlY2tvdXRzIHdoZXJlIGNvbW1vbi9zaGF2ZSBoYXMKKwkgIG5vdCBiZWVuIGNyZWF0ZWQgeWV0IHdoZW4gdGhvc2UgY2hlY2tzIGFyZSBydW4uIEl0IHNlZW1zIGxpa2UgU0hBVkVfSU5JVAorCSAgY2hhbmdlcyB0aGUgZW52aXJvbm1lbnQgc28gdGhhdCBjaGVja3MgZGVwZW5kaW5nIG9uIGEgY29tcGlsZXIgbmVlZCBzaGF2ZQorCSAgdG8gZXhpc3QgYXQgdGhhdCBwb2ludCwgd2hpY2ggd2lsbCBmYWlsIGlmIEFDX09VVFBVVCBoYXNuJ3QgY3JlYXRlZCBpdCB5ZXQuCisJICBGaXhlcyAjNjA1OTMwLgorCisyMDEwLTAxLTA1IDAxOjM1OjQxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2suYzoKKwkgIGNoZWNrOiBwYXRjaCBpbnRlcm5hbCBjaGVjayBjb3B5IHNvbWUgbW9yZSBzbyB0aGF0IGZhaWx1cmVzIGFjdHVhbGx5IGZhaWwKKwkgIEluY2x1ZGUgdW5pc3RkLmggc28gdGhhdCBfUE9TSVhfVkVSU0lPTiBpcyBhY3R1YWxseSBkZWZpbmVkIHdoZW4KKwkgIGl0IHNob3VsZCBiZSBkZWZpbmVkLiBXaXRob3V0IHRoYXQsIHN0dWZmIGxpa2UgZmFpbF9pZigxKSBkb2Vzbid0CisJICBhY3R1YWxseSBmYWlsLCBwcmVzdW1hYmx5IGJlY2F1c2Ugb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUgZG8gaW5jbHVkZQorCSAgdW5pc3RkLmggYW5kIHRoZW4gaGF2ZSBfUE9TSVhfVkVSU0lPTiBkZWZpbmVkLgorCSAgRml4ZXMgIzYwNDU2NSBldmVuIG1vcmUuCisKKzIwMTAtMDEtMDUgMDA6MDk6MTAgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdGV2ZW50Lmg6CisJICBkb2NzOiBhZGQgbWlzc2luZyByZXR1cm5zOiB0YWcKKworMjAwOS0xMi0zMCAyMjo1Njo1NyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgorCSAgbXVsdGlxdWV1ZTogc2V0IGl0ZXJhdGVfaW50ZXJhbF9saW5rcyBmdW5jdGlvbiBvbiBzb3VyY2UgcGFkCisKKzIwMDktMTItMjcgMTk6MzM6MjUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkgIGJ1ZmZlcjogcmVtb3ZlIHVubmVlZGVkIGNhc3RzCisKKzIwMDktMTItMDIgMTk6NDc6NDYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkqIGdzdC9nc3RidWZmZXIuaDoKKwkgIGJ1ZmZlcjogcmVtb3ZlIHN1YmJ1ZmZlciBzdWJjbGFzcworCSAgTW92ZSB0aGUgcGFyZW50IGJ1ZmZlciBwb2ludGVyIGludG8gdGhlIEdzdEJ1ZmZlciBzdHJ1Y3Qgc28gdGhhdCB3ZSBjYW4KKwkgIHJlbW92ZSB0aGUgc3ViYnVmZmVyIGNsYXNzIGFuZCB0eXBlLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgYWxsb3dzIHVzIHRvCisJICBtb3JlIG5hdHVyYWxseSBpbXBsZW1lbnQgbWV0aG9kcyB0byBnZXQgdGhlIHJlYWwgdHlwZSBhbmQgcGFyZW50CisJICBvZiBhIHN1YmJ1ZmZlciAoU2VlICM1NDU1MDEpLgorCSAgSXQgc2hvdWxkIGFsc28gYmUgc2xpZ2h0bHkgZmFzdGVyIGJlY2F1c2UgdGhlcmUgaXMgbm8gZXh0cmEgb2JqZWN0IGhpZXJhcmNoeSB0bworCSAgaW5pdGlhbGl6ZSBhbmQgZnJlZS4KKworMjAwOS0xMi0yNCAxOToyNTo1MiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgorCSAgY29sbGVjdHBhZHM6IGRvbid0IGtlZXAgYnVmZmVycyByZWZmZWQgbG9uZ2VyIHRoYW4gbmVlZGVkCisJICBNYWtlIHN1cmUgd2UgdGFrZSBvd25lcnNoaXAgb2YgdGhlIGJ1ZmZlciBlYXJseSB3aXRob3V0IGluY3JlYXNpbmcgaXRzIHJlZmNvdW50CisJICB3aGVuIHdlIGdvIGluIHRoZSBjb2xsZWN0IGZ1bmN0aW9uLiBUaGlzIHJlZHVjZXMgdGhlIGFtb3VudCBvZiBjb3BpZXMgbmVlZGVkIGluCisJICBvcmRlciB0byBtYWtlIHRoZSBidWZmZXIgd3JpdGFibGUgaW4gbW9zdCBjYXNlcy4KKworMjAwOS0xMi0yNCAxNzoyMjo0NiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKKwkgIG1pbmlvYmplY3Q6IGF2b2lkIHVubmVlZGVkIGNhc3RzCisKKzIwMDktMTItMjQgMTY6NTM6MTUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKKwkgIGNvbGxlY3RwYWRzOiBhdm9pZCBkb2luZyBzdWJidWZmZXJzIHdoZW4gd2UgY2FuCisJICBJbiBzb21lIGNhc2VzIHdlIGNhbiBhdm9pZCBhbGxvY2F0aW5nIGEgc3ViYnVmZmVyIGFuZCBpbnN0ZWFkIHNpbXBseSByZWYKKwkgIHRoZSBidWZmZXIuIENhbGxlcnMgc2hvdWxkIHBlcmZvcm0gX21ha2VfbWV0YWRhdGFfd3JpdGFibGUoKSBpbiBhbGwKKwkgIGNhc2VzIG5vdy4KKworMjAwOS0xMi0yNCAxNToyNToxNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKKwkgIGNvbGxlY3RwYWRzOiBhZGQgYWJpbGl0eSB0byBpbnN0YWxsIGNsaXBwaW5nIGZ1bmN0aW9ucworCSAgQWRkIGEgbWV0aG9kIHRvIGluc3RhbGwgYSBjbGlwcGluZyBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIGEgYnVmZmVyIGlzCisJICByZWNlaXZlZC4gVXNlcnMgb2YgY29sbGVjdHBhZHMgY2FuIHRoZW4gcGVyZm9ybSBjbGlwcGluZyBvbiB0aGUgaW5jb21taW5nCisJICBidWZmZXJzLgorCSAgQWxzbyByZXRhYiB0aGUgaGVhZGVyIGZpbGUgYSBsaXR0bGUuCisJICBTZWUgIzU5MDI2NQorCisyMDA5LTEyLTI0IDE1OjEzOjQ5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2Rlc2lnbi9kcmFmdC1idWZmZXIyLnR4dDoKKwkgIGRvY3M6IGFkZCBzb21lIG1vcmUgYnVmZmVyMiBpZGVhcworCisyMDA5LTEyLTI0IDE0OjQwOjU0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YmluLmM6CisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSogZ3N0L2dzdG9iamVjdC5jOgorCSogZ3N0L2dzdHBhZC5jOgorCSAgYXZvaWQgc29tZSBtb3JlIHR5cGUgY2hlY2tzCisKKzIwMDktMTItMjQgMTQ6MjI6NTIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwaXBlbGluZS5jOgorCSAgcGlwZWxpbmU6IGF2b2lkIHNvbWUgdHlwZSBjaGVja3MKKwkgIEF2b2lkIHR5cGUgY2hlY2tzIHdoZW4gd2UgY2FuCisJICBEb24ndCBuZWVkIHRvIHBlZWsgdGhlIHBhcmVudF9jbGFzcywgdGhlIGJvaWxlcnBsYXRlIGRvZXMgdGhhdCBmb3IgdXMuCisKKzIwMDktMTItMjMgMjE6Mzk6MjAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHRvb2xzL2dzdC1sYXVuY2guYzoKKwkgIGxhdW5jaDogYWxzbyBwcmludCBsZWFrZWQgb2JqZWN0cworCSAgTWFrZSB0aGUgLVQgb3B0aW9uIGFsc28gcHJpbnQgdGhlIGxlYWtlZCBvYmplY3RzCisKKzIwMDktMTItMjMgMjE6Mzc6NTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R0cmFjZS5jOgorCSAgdHJhY2U6IGluY2x1ZGUgdHlwZSBuYW1lIGluIGxlYWtlZCBvYmplY3RzCisJICBXaGVuIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBHT2JqZWN0LCBwcmludCB0aGUgdHlwZSBuYW1lIGFsb25nIHdpdGgKKwkgIHRoZSBwb2ludGVyIGZvciBlYXNpZXIgZGVidWdnaW5nLgorCisyMDA5LTEyLTIzIDIxOjIwOjE0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6CisJICBwYWQ6IEZpeCBwcm9ibGVtIHdpdGggZGVzdHJveSBjYWxsYmFjayBub3QgYmVpbmcgY2FsbGVkCisJICBXaGVuIHdlIHVuYmxvY2sgYSBwYWQgd2l0aCB0aGUgc2FtZSB1c2VyX2RhdGEsIHRoZSBkZXN0cm95IGNhbGxiYWNrIGlzIG5vdAorCSAgY2FsbGVkLiBUaGlzIGxlYWRzIHRvIHJlZmNvdW50aW5nIGxlYWtzIHRoYXQgY2Fubm90IGJlIGF2b2lkZWQuIEluc3RlYWQgYWx3YXlzCisJICBjYWxsIHRoZSBkZXN0cm95IG5vdGlmeSB3aGVuZXZlciB3ZSBpbnN0YWxsIGEgbmV3IHBhZCBibG9jay4KKwkgIEluIHBhcnRpY3VsYXIsIHRoaXMgZml4ZXMgYSBuYXN0eSBwYWQgbGVhayBpbiBkZWNvZGViaW4yLgorCSAgQWxzbyB1cGRhdGUgdGhlIHVuaXQgdGVzdCB0byBoYXZlIG1vcmUgYWNjdXJhdGUgY29tbWVudHMgYW5kIHRlc3QgdGhlIHJlcXVpcmVkCisJICBiZWhhdmlvdXIuCisKKzIwMDktMTItMjIgMjI6NTI6MDIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6CisJICB0ZWU6IHNtYWxsIGNsZWFudXBzLCB1c2Ugc29tZSBHX0xJS0VMWQorCisyMDA5LTEyLTIyIDE1OjI5OjI2IC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6CisJICB0ZWU6IERvbid0IGNyYXNoIGlmIHRoZXJlIGlzIG5vIHNvdXJjZSBwYWQKKworMjAwOS0xMi0yMSAxOToxMTo0NSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSA0N2NiMjNhIHRvIDE0Y2VjODkKKworMjAwOS0xMi0yMSAxMTo1ODoxMiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSogZ3N0L2dzdHRhZ2xpc3QuaDoKKwkgIGdzdHRhZ2xpc3Q6IEFkZHMgbmV3IHRhZ3MKKwkgIEFkZHMgdGhlIGZvbGxvd2luZyBuZXcgdGFnczoKKwkgIEdTVF9UQUdfU0hPV19OQU1FCisJICBHU1RfVEFHX1NIT1dfU09SVE5BTUUKKwkgIEdTVF9UQUdfU0hPV19FUElTT0RFX05VTUJFUgorCSAgR1NUX1RBR19TSE9XX1NFQVNPTl9OVU1CRVIKKwkgIEdTVF9UQUdfTFlSSUNTCisJICBHU1RfVEFHX0NPTVBPU0VSX1NPUlROQU1FCisJICBHU1RfVEFHX0dST1VQSU5HCisJICBGaXhlcyAjNTk5NzU5CisKKzIwMDktMTItMTkgMTQ6Mjc6MDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJICBjb25maWd1cmU6IGFsd2F5cyBjYWxsIG91ciBjaGVjayBjaGVja3MgZm9yIHRoZSBTVUJVTklUIGNvbmRpdGlvbmFsCisJICBUaGUgU1VCVU5JVCBjb25kaXRpb25hbCBuZWVkcyB0byBiZSBzZXQgZXZlbiBpZiBjaGVjayBpcyBkaXNhYmxlZC4gQWxzbworCSAgcmVtb3ZlIGEgRklYTUUgdGhhdCBpcyBub3QgbmVlZGVkIGFueSBsb25nZXIgLyBhZnRlciBhbGwuCisKKzIwMDktMTItMTggMjE6Mjg6MzUgKzAwMDAgINCg0YPRgdC70LDQvSDQmNC20LHRg9C70LDRgtC+0LIgPGxybjE5ODZAZ21haWwuY29tPgorCisJKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVjay5jOgorCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfZXJyb3IuYzoKKwkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2xpc3QuYzoKKwkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2xvZy5jOgorCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfbXNnLmM6CisJKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19wYWNrLmM6CisJKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19wcmludC5jOgorCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcnVuLmM6CisJKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19zdHIuYzoKKwkgIGNoZWNrOiBwYXRjaCBpbnRlcm5hbCBjaGVjayBjb3B5IHNvIGl0IHdvcmtzIHdpdGggb3VyIGJ1aWxkIHN5c3RlbQorCSAgRml4ZXMgIzYwNDU2NS4KKworMjAwOS0xMi0xOCAyMToyNjowMSArMDAwMCAg0KDRg9GB0LvQsNC9INCY0LbQsdGD0LvQsNGC0L7QsiA8bHJuMTk4NkBnbWFpbC5jb20+CisKKwkqIGNoZWNrLWNoZWNrcy5tNDoKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9NYWtlZmlsZS5hbToKKwkgIGNoZWNrOiB1cGRhdGUgYXV0b3Rvb2xzIGFuZCBkb2NzIHN0dWZmIGZvciBuZXcgY2hlY2sgdmVyc2lvbgorCisyMDA5LTEyLTE3IDIwOjA5OjQ4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogY2hlY2stY2hlY2tzLm00OgorCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2suYzoKKwkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrLmguaW46CisJKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19lcnJvci5jOgorCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfaW1wbC5oOgorCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfbGlzdC5jOgorCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfbG9nLmM6CisJKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19sb2cuaDoKKwkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX21zZy5jOgorCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcGFjay5jOgorCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcHJpbnQuYzoKKwkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3J1bi5jOgorCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfc3RyLmM6CisJKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19zdHIuaDoKKwkgIGNoZWNrOiB1cGRhdGUgaW50ZXJuYWwgbGliY2hlY2sgdG8gMC45LjgKKworMjAwOS0xMi0xNSAxODo1NTozOCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgorCSAgZmlsZXNyYzogcHJpbnRmIGZvcm1hdCBmaXhlcworCisyMDA5LTEyLTE0IDE2OjIyOjE2ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RidXMuYzoKKwkqIGdzdC9nc3R0YXNrLmM6CisJICBkb2NzOiBsaW5rIGJ1cyBhbmQgdGFza3MKKwkgIEFkZCBhIGxpbmsgZnJvbSBidXMgc2VjdGlvbiBkb2NzIHRvIHRoZSB0YXNrIGRvY3MuIEFkZCBhIHBhcmFncmFwaCB0byB0YXNrIGRvY3MKKwkgIHRvIHRlbGwgYWJvdXQgbWVzc2FnZXMgYW5kIHRoZSBidXMuCisKKzIwMDktMTItMTQgMTU6MTE6NDIgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3RlbGVtZW50Lmg6CisJICBkb2NzOiBhZGQgbW9yZSBkb2NzIGFyb3VuZCBHc3RTdGF0ZSBhbmQgR3N0U3RhdGVDaGFuZ2UKKwkgIFRha2UgcmV2aWV3ZWQgZG9jcyBmcm9tIGRvY3MvZGVzaWduL3BhcnQtc3RhdGUgdG8gaGF2ZSB0aGF0IG1vcmUgcHJvbWluZW50CisJICBpbnNpZGUgdGhlIGFwaSBkb2NzLiBBZGQgYSBmZXcgc2VudGVuY2VzIHRvIGxpbmsgdGhpbmdzIGJldHRlciB0b2dldGhlci4KKworMjAwOS0xMi0xNCAxNToxMToxNCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBkb2NzL2Rlc2lnbi9wYXJ0LXN0YXRlcy50eHQ6CisJICBkb2NzOiByZXZpZXcgYW5kIGZpeCBzcGVsbGluZworCisyMDA5LTEyLTE0IDExOjA1OjQxICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgorCSAgZ3N0ZWxlbWVudGZhY3Rvcnk6IHNldCBvYmplY3QgbmFtZSBlYXJsaWVyIGlmIGFwcGxpY2FibGUKKwkgIFNldHRpbmcgYW4gb2JqZWN0IG5hbWUgaXMgbmljZSBmb3IgcHJvcGVyIGRlYnVnIGxvZ2dpbmcuIElkZWFsbHkgdGhpcyB3b3VsZAorCSAgc3RpbGwgaGFwcGVucyBlYXJsaWVyICguZS5nIHdoZW4gcGFkcyBhcmUgYWRkZWQgdG8gYW4gZWxlbWVudCwgaXRzIG5vdCB5ZXQgc2V0KS4KKworMjAwOS0xMi0xNCAxMTowNzoyNSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0b2JqZWN0LmM6CisJICBnc3RvYmplY3Q6IGFkZCBmaXhtZS0wLjExIGNvbW1lbnQKKworMjAwOS0xMi0wOCAxMTozMDozOSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0b2JqZWN0LmM6CisJICBjb21tZW50OiBzbWFsbCBjb21tZW50IGNvcnJlY3Rpb24KKworMjAwOS0xMi0xMSAxNjoyNjowMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJpbi5jOgorCSAgYmluOiBuZXZlciBza2lwIGEgc3RhdGUgY2hhbmdlIHRvIFBMQVlJTkcKKwkgIE5ldmVyIHNraXAgdGhlIHN0YXRlIGNoYW5nZSB0byBwbGF5aW5nLCBldmVuIGlmIHRoZSBlbGVtZW50IGlzIGFscmVhZHkgaW4gdGhlCisJICByaWdodCBzdGF0ZS4gV2UgbmVlZCB0aGlzIGJlY2F1c2Ugd2UgYWxzbyBkaXN0cmlidXRlIHRoZSBiYXNlX3RpbWUgd2hpbGUgZG9pbmcKKwkgIHRoZSBzdGF0ZSBjaGFuZ2UgYW5kIHNraXBwaW5nIHRoaXMgc3RlcCB3b3VsZCBsZWF2ZSBzb21lIGVsZW1lbnRzIHdpdGhvdXQgYSBuZXcKKwkgIGJhc2VfdGltZS4KKwkgIEZpeGVzICM2MDAzMTMKKworMjAwOS0xMi0xMSAxNjoxOToxOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgYmFzZXNpbms6IGFkZCBzb21lIG1vcmUgZGVidWdnaW5nCisKKzIwMDktMTItMDggMTc6MjE6NDcgKzAxMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQHRhbmRiZXJnLmNvbT4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKKwkgIHRlZTogcmVsZWFzZSBwYWRzIGluIGRpc3Bvc2UKKwkgIE1ha2Ugc3VyZSB0byByZWxlYXNlIGFsbCByZXF1ZXN0LXBhZHMgaW4gdGhlIGRpc3Bvc2UtbWV0aG9kLCBpbiBjYXNlIG9mIGEKKwkgIHNodXRkb3duLXJhY2UsIHdoZXJlIGEgcGFkLWFsbG9jIGlzIGFib3V0IHRvIGhhcHBlbi4KKwkgIEZpeGVzICM2MDQwOTEKKworMjAwOS0xMi0wOSAxMzoyNzoyMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkgIGVsZW1lbnQ6IHVzZSBOVUxMIGluc3RlYWQgb2YgMCBmb3IgcG9pbnRlcnMKKworMjAwOS0xMi0wOSAwNzoyNTozMSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRvb2xzL2dzdC10eXBlZmluZC5jOgorCSogdG9vbHMvZ3N0LXhtbGluc3BlY3QuYzoKKwkgIHRvb2xzOiBNb3ZlIGdzdF90b29sc19wcmludF92ZXJzaW9uKCkgZm9yIHRoZSByZW1haW5pbmcgdG9vbHMKKworMjAwOS0xMi0wMyAxMjozMToxOSArMDEwMCAgT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzIDxvbGUuYW5kcmUucmF2bmFzQHRhbmRiZXJnLmNvbT4KKworCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKKwkqIHRvb2xzL2dzdC1sYXVuY2guYzoKKwkgIHRvb2xzOiBNb3ZlIGdzdF90b29sc19wcmludF92ZXJzaW9uIGNhbGwgdG8gYXZvaWQgd2FybmluZyBmcm9tIG5ldyBHTGliLgorCSAgZ19zZXRwcmduYW1lIGlzIGltcGxpY2l0bHkgY2FsbGVkIGJ5IGdfb3B0aW9uX2NvbnRleHRfbmV3KCkgd2l0aCBhIGNoZWNrCisJICB0byBzZWUgaWYgaXQncyBiZWVuIHNldCBhbHJlYWR5LgorCSAgRml4ZXMgYnVnICM2MDQwOTMuCisKKzIwMDktMTItMDggMTY6NDA6NTcgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIHV0aWxzOiBGaXggcHJveHlfc2V0Y2FwcyB0byBvbmx5IGl0ZXJhdGUgcGFkcyBvZiBvdGhlciBkaXJlY3Rpb24KKworMjAwOS0xMi0wOCAxNjoyMTo0MSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHV0aWxzLmM6CisJICB1dGlsczogZml4IHByb3h5X2dldGNhcHMKKwkgIE1ha2UgaXQgcmV0dXJuIHRoZSBwYWR0ZW1wbGF0ZSBjYXBzIG9uIGVycm9ycyBhbmQgbm8gcGFyZW50LgorCSAgT25seSBpbnRlcnNlY3QgcGFkcyBvZiB0aGUgb3Bvc2l0ZSBkaXJlY3Rpb24gb2YgdGhlIHNvdXJjZSBwYWQuCisKKzIwMDktMTItMDggMTY6MTQ6MjggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIHV0aWxzOiBSZW5hbWUgcHJveHkgaXRlcmF0b3IgZm9sZCBmdW5jdGlvbnMgdG8gaGF2ZSBhIG1vcmUgbWVhbmluZ2Z1bCBuYW1lCisKKzIwMDktMTItMDggMTY6MDk6MDIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIHV0aWxzOiBJZiBvbmUgaW50ZXJzZWN0aW9uIGdhdmUgZW1wdHkgY2FwcyBkb24ndCBjb250aW51ZSBpdGVyYXRpbmcgb3ZlciB0aGUgb3RoZXIgcGFkcworCisyMDA5LTEyLTA4IDE1OjI0OjQzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgYmFzZXNpbms6IEFsbG93IHVwZGF0ZSBORVdTRUdNRU5UIGV2ZW50cyBhZnRlciBFT1MKKwkgIFRoaXMgYWxsb3dzIGRlbXV4ZXJzIHRvIHVwZGF0ZSB0aGUgc2VnbWVudCBzdG9wIG9mIGFuIGFscmVhZHkKKwkgIGZpbmlzaGVkIHN0cmVhbS4gVGhpcyBtaWdodCBiZSBuZWVkZWQgaWYgc29tZSBzdHJlYW0gZ29lcyB0bworCSAgRU9TIGJlZm9yZSB0aGUgZHVyYXRpb24gb2YgdGhlIGxvbmdlc3Qgc3RyZWFtIGlzIGtub3duIHRvIHByb3Blcmx5CisJICBzZXQgdGhlIHNlZ21lbnQgc3RvcCBvZiBhbGwgc3RyZWFtcyB0byB0aGUgc2FtZSB2YWx1ZSBpbiB0aGUgZW5kLgorCisyMDA5LTEyLTA3IDIwOjUyOjIyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVybGlzdC5oOgorCSogZ3N0L2dzdGV2ZW50Lmg6CisJKiBnc3QvZ3N0bWVzc2FnZS5oOgorCSogZ3N0L2dzdHF1ZXJ5Lmg6CisJICBVc2UgcGxhaW4gY2FzdGluZyBpbnN0ZWFkIG9mIHR5cGVjaGVja2luZworCisyMDA5LTEyLTA3IDA5OjQ1OjAwICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0dmFsdWUuYzoKKwkgIGdzdHZhbHVlOiBVc2UgZmFzdCBnc3RfdmFsdWVfbGlzdF97c2l6ZXxnZXRfdmFsdWV9IG1hY3JvIGFjY2Vzc29ycworCSAgZ3N0X3ZhbHVlX2xpc3Rfc2l6ZSBhbmQgZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlIHdpbGwgZG8gYSBzZXJpZXMgb2YKKwkgIGV4dHJhIGNoZWNrcyBkdWUgdG8gYmVpbmcgcHVibGljIG1ldGhvZHMuCisJICBXaGVuIHdlIHVzZSB0aGVtIGZyb20gd2l0aGluIGdzdHZhbHVlLmMgd2UgY2FuIGRpcmVjdGx5IHVzZSB0aGVtIHdpdGhvdXQKKwkgIHRoZSBleHRyYSBjaGVja3MuCisKKzIwMDktMTItMDcgMDk6NDQ6MDYgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGdzdC9nc3R1cmkuYzoKKwkgIGdzdHVyaTogRG9uJ3QgdXNlIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSwgdXNlIHRoZSBzaWduYWwgSUQgZGlyZWN0bHkKKworMjAwOS0xMS0xOCAwOTowMTozNSArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmg6CisJICB0ZWU6IGF2b2lkIGV4cGVuc2l2ZSB0eXBlY2hlY2tzLCBhbmQgYXZvaWQgZ2V0dGluZyByZWYgdG8gcGFyZW50LgorCSAgU3BlZWRzIHVwIHRlZSBwcm9jZXNzaW5nIDIgdG8gNSB0aW1lcy4KKworMjAwOS0xMS0xMiAwOTowNzowMyArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZ3N0L2dzdG9iamVjdC5jOgorCSAgZ3N0b2JqZWN0OiBBdm9pZCBkb3VibGUgc3RyZHVwIHdoZW4gc2V0dGluZyBOVUxMIG5hbWVzLgorCSAgSW5zdGVhZCBvZiBjaGFpbmluZyB1cCB0byBnc3Rfb2JqZWN0X3NldF9uYW1lICh3aGljaCBkb2VzIHR5cGVjaGVja2luZworCSAgYW5kIHN0cmR1cCdzIHRoZSBuYW1lIGFnYWluKSwganVzdCB1c2UgdGhlIGFscmVhZHkgYWxsb2NhdGVkIG5ldworCSAgbmFtZS4KKworMjAwOS0xMi0wNCAxMjoxNjozMiAtMDgwMCAgUGV0ZXIgdmFuIEhhcmRlbmJlcmcgPHB2aEBzb25nYmlyZG5lc3QuY29tPgorCisJKiBkb2NzL3B3Zy9idWlsZGluZy1wcm9wcy54bWw6CisJICBwd2c6IG1ha2UgdGhlIGVudW0gZXhhbXBsZSAoYmFzZWQgb24gdmlkZW90ZXN0c3JjKSBhY3R1YWxseSBtYXRjaCB2aWRlb3Rlc3RzcmMKKworMjAwOS0xMi0wNCAxNjoyODoyNyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RiaW4uYzoKKwkgIGJpbjogSWdub3JlIHN0YXRlIGNoYW5nZSBmYWlsdXJlcyBmcm9tIGNoaWxkcmVuIHRoYXQgd2VyZSByZW1vdmVkIGZyb20gdGhlIGJpbiBhbHJlYWR5CisJICBGaXhlcyBidWcgIzU4NDQ0MS4KKworMjAwOS0xMi0wNCAxNTowMDo0NCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgorCSAgcmVnaXN0cnk6IFVzZSBHTWFwcGVkRmlsZSBmb3IgcmVhZGluZyB0aGUgcmVnaXN0cnkKKwkgIEZpeGVzIGJ1ZyAjNjAzNzg3LgorCisyMDA5LTEyLTAzIDE5OjQ4OjExICswMTAwICBKYXZpZXIgSmFyZMOzbiA8amphcmRvbkBnbm9tZS5vcmc+CisKKwkqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgorCSAgcmVnaXN0cnk6IFN1YnN0aXR1dGUgZGVwcmVjYXRlZCBHTGliIHN5bWJvbDogZ19tYXBwZWRfZmlsZV9mcmVlCisJICBVc2UgZ19tYXBwZWRfZmlsZV91bnJlZiBpZiBHbGliID49IDIuMjIgaXMgYXZhaWxhYmxlCisJICBGaXhlcyBidWcgIzU2MDQ0Mi4KKworMjAwOS0xMS0yNyAyMDoxNjoxNSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIGJhc2VzcmM6IFNodXQgZG93biB0aGUgcGFkIHRhc2sgd2hlbiB0aGUgaW5pdGlhbCBzZWVrIGZhaWxzLgorCSAgU2V0IHRoZSBwYWQgZmx1c2hpbmcgYW5kIHN0b3AgdGhlIHBhZCB0YXNrIHdoZW4gdGhlIGluaXRpYWwgc2VlayBmYWlscworCSAgZHVyaW5nIGFjdGl2YXRpb24uIEF2b2lkcyByYWN5IGNhbGxzIGludG8gdGhlIF9jcmVhdGUoKSBmdW5jdGlvbiB3aGVuCisJICBCYXNlU3JjOjpzdG9wKCkgaGFzIGFscmVhZHkgcnVuLgorCSAgRml4ZXM6ICM2MDMwNTkKKwkgIEFsc28sIGZpeCBzb21lIG1pc3NwZWxsZWQgY29tbWVudHMuCisKKzIwMDktMTItMDMgMjA6NTU6MzcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmUucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kYS5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9lcy5wbzoKKwkqIHBvL2V1LnBvOgorCSogcG8vZmkucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2h1LnBvOgorCSogcG8vaWQucG86CisJKiBwby9pdC5wbzoKKwkqIHBvL2phLnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3BsLnBvOgorCSogcG8vcHRfQlIucG86CisJKiBwby9ydS5wbzoKKwkqIHBvL3J3LnBvOgorCSogcG8vc2sucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJKiBwby96aF9DTi5wbzoKKwkqIHBvL3poX1RXLnBvOgorCSAgcG86IHVwZGF0ZSAucG8gZmlsZXMgYWZ0ZXIgc3RyaW5nIGNoYW5nZXMKKwkgIChUaGUgcXVldWUyIHN0cmluZ3MgY291bGQgdXNlIHNvbWUgdGlkeWluZyB1cCkKKworMjAwOS0xMi0wMyAyMDo1MzoyNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgorCSAgZmlsZXNpbmssIGZpbGVzcmM6IHByaW50ZiBmb3JtYXQgZml4ZXMKKwkgIGdzdGZpbGVzaW5rLmM6Mzk5OiBlcnJvcjogZm9ybWF0IOKAmCVk4oCZIGV4cGVjdHMgdHlwZSDigJhpbnTigJksIGJ1dCBhcmd1bWVudCA4IGhhcyB0eXBlIOKAmHNpemVfdOKAmQorCSAgZ3N0ZmlsZXNpbmsuYzozOTk6IGVycm9yOiBmb3JtYXQg4oCYJWTigJkgZXhwZWN0cyB0eXBlIOKAmGludOKAmSwgYnV0IGFyZ3VtZW50IDkgaGFzIHR5cGUg4oCYZ3NpemXigJkKKwkgIGdzdGZpbGVzcmMuYzo1ODg6IGVycm9yOiBmb3JtYXQg4oCYJTA4bGx44oCZIGV4cGVjdHMgdHlwZSDigJhsb25nIGxvbmcgdW5zaWduZWQgaW504oCZLCBidXQgYXJndW1lbnQgOCBoYXMgdHlwZSDigJhvZmZfdOKAmQorCisyMDA5LTEyLTAzIDE2OjQ0OjI4ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6CisJICB0ZWU6IGFkZCBzcGVjaWFsIGNhc2UgZm9yIG9ubHkgb25lIHBhZCBjb25lY3RlZAorCSAgSXQgaXMgbm90IGVhc3kgdG8gc2V0dXAgYSB0ZWUgb24gdGhlIGZseSwgdGh1cyBhcHBzIG5lZWQgdG8gYWRkIHRoZW0gYWx3YXlzIGlmCisJICB0aGV5IG1pZ2h0IG5lZWQgdGhlbS4gVGhpcyBjaGFuZ2VzIHRoZSBjb2RlIHNvLCB0aGF0IGlmIG9ubHkgb25lIHNyYy1wYWQgaXMKKwkgIGFjdGl2ZSwgd2UgcHVzaCBidWZmZXJzIGRpcmVjdGx5LiBJbiB0aGUgbm9ybWFsIGNvZGUgcGF0aCBhbGwgYnVmZmVycyBhcmUgcHVzaGVkCisJICB3aXRoIGFuIGV4dHJhIHJlZiwgdGhhdCBmb3JjZXMgZm9sbG93dXAgaW5wbGFjZSBlbGVtZW50cyB0byBjb3B5IHRoZSBkYXRhLgorCisyMDA5LTEyLTAzIDE2OjExOjU5ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6CisJICB0ZWU6IG9ubHkgbWVzc2FnZSBvbmNlIHBlciByZWNlaXZlZCBidWZmZXIKKwkgIEF2b2lkcyBjaGVja2luZyBmb3IgZWFjaCBzb3VyY2UgcGFkLiBUaGUgbWVzc2FnZXMgd291bGQgYmUgYWxtb3N0IGlkZW50aWNhbAorCSAgYW55d2F5LgorCisyMDA5LTEyLTAzIDE1OjI3OjIxICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGRvY3MvcmFuZG9tL2Vuc29uaWMvZHJhZnQtcmVnaXN0cnktY2hhbmdlLWhvb2tzLnR4dDoKKwkgIGRyYWZ0czogcGxhbm5pbmcKKworMjAwOS0xMi0wMyAxNjowNTowMyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuaDoKKwkgIHRlZTogcmVtb3ZlIHVudXNlZCBvZmZzZXQgbWVtYmVyCisKKzIwMDktMTItMDMgMTY6MDI6MzUgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKKwkgIHRlZTogb25seSBub3RpZnkgYWxsb2MtcGFkIHByb3BlcnR5IGlmIGNoYW5nZWQuCisKKzIwMDktMTItMDIgMTM6Mjk6MjggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RldmVudC5oOgorCSAgZXZlbnQ6IGZpeCBkb2NzIGZvciBfY29weSgpCisKKzIwMDktMTItMDEgMjI6Mzc6NTEgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJKiB0b29scy9nc3QtbGF1bmNoLmM6CisJICB0b29sczogRml4IGNoZWNrIGZvciBXaW5kb3dzCisKKzIwMDktMTItMDEgMTg6MDk6MDQgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJKiBnc3QvZ3N0dHJhY2UuYzoKKwkgIE1ha2UgZ2NjIGlubGluZSBhc3NlbWJseSBjb25kaXRpb25hbCBvbiBnY2MKKworMjAwOS0xMi0wMSAxOToyOToyNSArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSAgcXVldWU6IFJlZ2lzdGVyIGRlYnVnIGZ1bmNwdHIgb25seSBvbmNlLgorCSAgTWFrZXMgY3JlYXRpbmcgcXVldWUgZWxlbWVudHMgMy00IHRpbWVzIGZhc3RlciBhbmQgYXZvaWRzIGNvbnRlbnRpb24gb24gdGhlCisJICBnbG9iYWwgZnVuY3B0ciBsb2NrLgorCisyMDA5LTEyLTAxIDE5OjI3OjQ3ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIGJhc2VzcmMvYmFzZXNpbms6IFJlZ2lzdGVyIGRlYnVnIGZ1bmNwdHIgb25seSBvbmNlLgorCSAgTWFrZXMgYmFzZXNyYy9iYXNlc2luayBpbml0aWFsaXphdGlvbiAzLTQgdGltZXMgZmFzdGVyIGFuZCBhdm9pZHMKKwkgIGNvbnRlbnRpb24gb24gdGhlIGdsb2JhbCBmdW5jcHRyIGxvY2sKKworMjAwOS0xMi0wMSAxNzo1NDo1NiArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZ3N0L2dzdGdob3N0cGFkLmM6CisJICBnc3RnaG9zdHBhZDogUmVnaXN0ZXIgZGVidWcgZnVuY3B0ciBvbmx5IG9uY2UuCisJICBUaGlzIG1ha2VzIGdob3N0cGFkL3Byb3h5cGFkIGNyZWF0aW9uIDUgdGltZXMgZmFzdGVyIGFuZCBhdm9pZHMgY29udGVudGlvbgorCSAgb3ZlciB0aGUgZ2xvYmFsIGZ1bmNwdHIgbG9jay4KKwkgIEkgYWxzbyBtb3ZlZCB0aGUgdHdvIGNsYXNzIGluaXQgZG93biBpbiB0aGUgY29kZSB0byBhdm9pZCBoYXZpbmcgdG8gZm9yd2FyZAorCSAgZGVjbGFyZSBhbGwgdGhlIHZhcmlvdXMgZnVuY3Rpb25zLgorCisyMDA5LTEyLTAxIDE3OjU0OjE0ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBnc3RwYWQ6IE9ubHkgcmVnaXN0ZXIgZGVidWcgZnVuY3B0ciBvbmNlLgorCSAgVGhpcyBtYWtlcyBwYWQgaW5pdGlhbGl6YXRpb24gMiB0aW1lcyBmYXN0ZXIgYW5kIHdpdGhvdXQgYW55IGNvbnRlbnRpb24KKwkgIG92ZXIgdGhlIGRlYnVnIGZ1bmNwdHIgZ2xvYmFsIGxvY2suCisKKzIwMDktMTItMDEgMTc6NTM6MDMgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0aW5mby5oOgorCSAgZ3N0aW5mbzogQVBJOiBBZGQgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgbWV0aG9kLgorCSAgVGhpcyBpcyBhIHZhcmlhbnQgb2YgR1NUX0RFQlVHX0ZVTkNQVFIgd2hpY2ggZG9lcyBub3QgcmV0dXJuIGFueXRoaW5nLgorCisyMDA5LTEyLTAxIDE1OjA1OjM0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIDg3YmY0MjggdG8gNDdjYjIzYQorCisyMDA5LTEyLTAxIDE0OjA4OjI5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogY29uZmlndXJlLmFjOgorCSAgY29uZmlndXJlOiBVc2UgbmV3IEFHX0dTVF9QTEFURk9STSBtYWNybworCisyMDA5LTEyLTAxIDE0OjEwOjU5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIGRhNGM3NWMgdG8gODdiZjQyOAorCisyMDA5LTExLTI4IDIyOjI5OjI5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBiYXNlc2luazogY2xpcCBzdGVwcGluZyBib3VuZGFyaWVzCisJICBSb3VuZGluZyBlcnJvcnMgd2l0aCB0aGUgZmxvYXRpbmcgcG9pbnQgcmF0ZSBjb3VsZCBtYWtlIGl0IHNvIHRoYXQgd2UKKwkgIGRvbid0IGVuZCB1cCBleGFjdGx5IGF0IHRoZSByZXF1aXJlZCBzdGVwcGluZyBkdXJhdGlvbi4KKwkgIFVzZSB0aGUgc2VnbWVudCBjbGlwcGluZyBib3VuZGFyaWVzLCB3aGljaCBhcmUgbm90IHN1YmplY3QgdG8gcmF0ZQorCSAgYWRqdXN0ZW1lbnRzLCBpbnN0ZWFkIHRvIGRldGVjdCB3aGVuIHdlIHJlYWNoZWQgdGhlIHN0ZXBwaW5nIGR1cmF0aW9uLgorCSAgQWRkIHNvbWUgZGVidWcgaW5mbyByZWxhdGVkIHRvIGdvaW5nIHRvIHRoZSBQQVVTRUQgc3RhdGUuCisKKzIwMDktMTEtMjggMTc6MDI6MTcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvbWFudWFsL2Jhc2ljcy1idXMueG1sOgorCSAgZG9jczogZml4IGFub3RoZXIgdHlwbworCisyMDA5LTExLTI4IDE1OjQwOjMwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL21hbnVhbC9pbnRyby1iYXNpY3MueG1sOgorCSAgZG9jczogZml4IHR5cG8KKworMjAwOS0xMS0yNyAxODo1NDozMyArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIDUzYTI0ODUgdG8gZGE0Yzc1YworCisyMDA5LTExLTI3IDEzOjQyOjM2IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGV2ZW50LmM6CisJICBnc3RldmVudDogZml4IGRvY3MKKwkgIEZpeCBmbHVzaCBzdG9wcyBkb2NzLCB0aG9zZSBhcmUgc2VyaWFsaXplZCwgbm90IG91dCBvZiBib3VuZHMuCisJICBQcm9iYWJseSBhIGNvcHkgYW5kIHBhc3RlIG1pc3Rha2UuCisKKzIwMDktMTEtMjcgMTY6Mzk6MzcgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJICBkb2NzOiBmaXggYnJva2VuIHhyZWZzCisKKzIwMDktMTEtMjcgMTY6Mzk6MzcgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuYzoKKwkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzoKKwkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgorCSAgZG9jczogZml4IGJyb2tlbiB4cmVmcworCisyMDA5LTExLTI3IDE2OjM5OjAxICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1kb2NzLnNnbWw6CisJICBkb2NzOiBhZGQgbWlzc2luZyBzZWN0aW9uIHRvIGxpYnMtZG9jcworCisyMDA5LTExLTI3IDE0OjE4OjAyICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3R4bWwuYzoKKwkgIGRvY3M6IG1ha2UgbGlua3Mgd29yayAobmVlZHMgcmVjZW50IGd0ay1kb2MpCisKKzIwMDktMTEtMjcgMTQ6MTc6MzUgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdHBsdWdpbi5oOgorCSAgZG9jczogYWRkIG1pc3NpbmcgcGFyYW1ldGVyIGRvY3MKKworMjAwOS0xMS0yNyAxNDoxNjo1NCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdG9iamVjdC5oOgorCSAgZG9jczogZW5hYmxlIGRvY3MgZm9yIEdzdE9iamVjdENsYXNzIHRvIGZpeCBsaW5rcworCisyMDA5LTExLTI3IDE0OjE1OjA4ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RvYmplY3QuaDoKKwkgIGdzdG9iamVjdDogYWRkIEZJWE1FLTAuMTEgY29tbWVudHMKKworMjAwOS0xMS0yNSAxODoyNTowMSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0eG1sLmM6CisJICBkb2NzOiBiZXR0ZXIgd2F5IHRvIGxpbmsgY2xhc3MgbWV0aG9kcworCisyMDA5LTExLTI1IDE4OjI0OjE2ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RxdWVyeS5jOgorCSAgZG9jczogdXNlICcqJyBpbnN0ZWFkIG9mIHh4eCB0byBhdm9pZCBjcmVhdGluZyBhIGJyb2VrbiB4cmVmCisKKzIwMDktMTEtMjUgMTc6Mzc6MzMgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdGluZm8uaDoKKwkqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSogZ3N0L2dzdHV0aWxzLmM6CisJKiBnc3QvZ3N0dmFsdWUuYzoKKwkgIGRvY3M6IGZpeCBtb3JlIGJvZ3VzIHhyZWZzCisKKzIwMDktMTEtMjUgMTc6Mjc6MzAgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3RwbHVnaW4uaDoKKwkgIGRvY3M6IGFkZCBkb2NzIGZvciBHc3RQbHVnaW5GbGFncworCSAgVGhpcyBhbHNvIG1ha2VzIGxpbmtzIHRvIHRoZW0gd29yay4KKworMjAwOS0xMS0yNSAxNTozOTo0NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWludGVyZmFjZXMueG1sOgorCSAgZG9jczogaW1wcm92ZSBHc3RNaXhlciBhbmQgR3N0VHVuZXIgZG9jcworCSAgTWVudGlvbiB0aGF0IGVsZW1lbnRzIGltcGxlbWVudGluZyBHc3RNaXhlciBhbmQgR3N0VHVuZXIgbmVlZCB0byBiZQorCSAgaW4gdGhlIHJpZ2h0IHN0YXRlIGJlZm9yZSB0aGV5IGNhbiBiZSB1c2VkLiBBbHNvIG1lbnRpb24gR0xpYgorCSAgZnVuY3Rpb25zIGZvciBjb252ZXJ0aW5nIGZpbGVuYW1lcyB0byBhbmQgZnJvbSBVUklzLgorCSAgRml4ZXMgIzYwMjg3Ny4KKworMjAwOS0xMS0yNSAxNjo0NDowNSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0YnVmZmVyLmg6CisJKiBnc3QvZ3N0YnVzLmM6CisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSogZ3N0L2dzdGRlYnVndXRpbHMuaDoKKwkqIGdzdC9nc3RmaWx0ZXIuYzoKKwkqIGdzdC9nc3RnaG9zdHBhZC5jOgorCSogZ3N0L2dzdGluZm8uYzoKKwkqIGdzdC9nc3RtZXNzYWdlLmg6CisJKiBnc3QvZ3N0bWluaW9iamVjdC5jOgorCSogZ3N0L2dzdG9iamVjdC5oOgorCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZHRlbXBsYXRlLmM6CisJKiBnc3QvZ3N0cGFkdGVtcGxhdGUuaDoKKwkqIGdzdC9nc3RwaXBlbGluZS5jOgorCSogZ3N0L2dzdHBsdWdpbi5oOgorCSogZ3N0L2dzdHF1ZXJ5Lmg6CisJKiBnc3QvZ3N0cmVnaXN0cnkuYzoKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkqIGdzdC9nc3R0YWdsaXN0LmM6CisJKiBnc3QvZ3N0dHlwZWZpbmRmYWN0b3J5LmM6CisJKiBnc3QvZ3N0dXJpLmg6CisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkqIGdzdC9nc3R2YWx1ZS5jOgorCSogZ3N0L2dzdHZhbHVlLmg6CisJICBkb2NzOiBmaXggeHJlZnMgaW4gZG9jcworCSAgRml4IHR5cG9zIGluIHhyZWZzLCBsaW5rcyB0byBub24gZXhpc3RpbmcgZnVuY3Rpb25zIGFuZCByZXdvcmsgcGx1cmFsIGZvcm1zLgorCisyMDA5LTExLTI1IDE0OjQxOjI2ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RtYWNyb3MuaDoKKwkgIGRvY3M6IHJlbW92ZSBndGtkb2MgaGVhZGVyIGFzIHRoZXNlIHRoaW5ncyBkb24ndCBjb21lIHVwIG9uIG91ciBkb2NzIGV2ZW4KKworMjAwOS0xMS0yNSAxNDoyMzo1MyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0cmVnaXN0cnkuYzoKKwkgIGRvY3M6IGFkZCBtaXNzaW5nIHBhcmFtZXRlciBkb2Mgc3RyaW5nCisKKzIwMDktMTEtMjUgMTQ6MjE6NTAgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdGV2ZW50Lmg6CisJICBkb2NzOiBkb2N1bWVudCBuZXcgZXZlbnQgaW4gZW51bQorCisyMDA5LTExLTI1IDE0OjE4OjE0ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3R1dGlscy5jOgorCSAgZG9jczogZml4IGd0ay1kb2Mgc3ludGF4IGZvciBkb2MtYmxvYiBzdGFydAorCisyMDA5LTExLTIzIDExOjM0OjA3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cXVlcnkuYzoKKwkgIHF1ZXJ5OiB3aGl0ZXNwYWNlIGZpeGVzCisKKzIwMDktMTEtMjMgMTE6MzM6NDggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZGVzaWduL2RyYWZ0LWJ1ZmZlcjIudHh0OgorCSAgZG9jczogZml4IGdyYW1tYXIKKworMjAwOS0xMS0yMSAxNjozNzozNCArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKKwkgIGJhc2VzcmM6IEFkZCBnc3RfYmFzZV9zcmNfbmV3X3NlYW1sZXNzX3NlZ21lbnQoKQorCSAgTWVyZ2UgbmV3IGZ1bmN0aW9uIGZyb20gcmVzaW5kdmQgaW50byB0aGUgcHJpbWFyeSBHc3RCYXNlU3JjIGZvcgorCSAgc3RhcnRpbmcgYSBuZXcgc2VhbWxlc3Mgc2VnbWVudC4KKwkgIEFQSTogZ3N0X2Jhc2Vfc3JjX25ld19zZWFtbGVzc19zZWdtZW50KCkKKworMjAwOS0xMS0yMCAxNjowMDo0NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5jOgorCSAgYnl0ZXdyaXRlcjogZml4IGNvbXBpbGVyIHdhcm5pbmcKKwkgIFNvbWUgZ2NjIHZlcnNpb25zIHdhcm4gYWJvdXQgYnl0ZXdyaXRlciB3cml0aW5nIHRvIG1lbW9yeSBhY2Nlc3NlZAorCSAgdmlhIGEgY29uc3QgZ3VpbnQ4IHBvaW50ZXIsIGRlc3BpdGUgb3VyIGV4cGxpY2l0IGNhc3QgdG8gZ3VpbnQ4ICouCisJICBXb3JrIGFyb3VuZCB0aGF0IGJ5IHVzaW5nIGFuIGludGVybWVkaWFyeSB2YXJpYWJsZS4KKwkgIEZpeGVzICM1OTg1MjYuCisKKzIwMDktMTEtMjAgMDk6MzM6NDggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJICBjaGVjazogT25seSBjaGVjayBmb3IgZ21wL2dzbCBpZiBidWlsZGluZyBvZiB0ZXN0cyBpcyBub3QgZGlzYWJsZWQKKworMjAwOS0xMS0xOSAxOTowMDowNSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBiYXNlc2luazogQ2xhbXAgdGhlIGJhc2UgdGltZSBjb3JyZWN0bHkgaW4gcG9zaXRpb24gcmVwb3J0aW5nCisJICBXaGVuIGNsYW1waW5nIHRoZSBiYXNlIHRpbWUsIGNvcnJlY3RseSB1c2UgJ25vdycsIGluc3RlYWQgb2YKKwkgICctbm93JyAtIHRoZSBpbnRlbnQgaXMgdG8gcHJldmVudCAnbm93LWJhc2UnIGV2ZXIgYmVpbmcKKwkgIG5lZ2F0aXZlLCB3aGljaCB3b3VsZCBjYXVzZSBhIHBvc2l0aW9uIHJlcG9ydCBvdXRzaWRlIHRoZSBzZWdtZW50LgorCSAgRml4ZXM6ICM2MDI0MTkKKworMjAwOS0xMS0wOSAxMDo1Mjo0MiAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkqIGdzdC9nc3RwbHVnaW4uaDoKKwkgIGdzdHBsdWdpbjogQWRkIEMrKyBlc2NhcGUgZm9yIGdzdF9wbHVnaW5fZGVzYyBkZWZpbmUKKwkgIEluIG9yZGVyIHRvIHByb3Blcmx5IGV4cG9ydCB0aGUgZ3N0X3BsdWdpbl9kZXNjIHN5bWJvbAorCSAgZnJvbSBETExzIGluIE1TVkMsIGl0IG5lZWRzIHRvIGJlIGV4dGVybiAiQyIuCisKKzIwMDktMTEtMTkgMTI6NTk6MjggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvcGFyc2UvZ3JhbW1hci55OgorCSAgcGFyc2UvZ3JhbW1hci55OiByZW1vdmUgdW51c2VkIEVSUk9SIGRlZmluZQorCisyMDA5LTExLTE5IDEwOjI5OjM4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIDE4NjEyNTIgdG8gNTNhMjQ4NQorCisyMDA5LTExLTE2IDE1OjQ3OjU3ICswMjAwICBQcmlpdCBMYWVzIDxwbGFlc0BwbGFlcy5vcmc+CisKKwkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgorCSAgY2hlY2s6IGZpeCBzeW1ib2wgZXhwb3J0aW5nIHdoZW4gYnVpbGRpbmcgdW5kZXIgZXRfRUUgbG9jYWxlCisJICBbQS1aXSByZWdleHAgZmFpbHMgdW5kZXIgZXRfRUUgbG9jYWxlIGJlY2F1c2UgWiBpbiBFc3RvbmlhbiBhbHBoYWJldCBpcworCSAgbG9jYXRlZCBhZnRlciBTIGFuZCB0aGVyZWZvcmUgY2hhcmFjdGVycyBzdGFydGluZyB3aXRoICdUVVYuLi4nIGFyZSBub3QKKwkgIGluIHRoZSByYW5nZSBhbnltb3JlLgorCSAgRml4ZXMgYnVnICM2MDIwOTMuCisKKzIwMDktMTEtMTggMDc6NTk6MzYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBiYXNlc2luazogSGFuZGxlIHRoZSBuZXcgc2luay1tZXNzYWdlIGV2ZW50CisKKzIwMDktMTEtMTggMDc6NTI6MjQgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdGV2ZW50LmM6CisJKiBnc3QvZ3N0ZXZlbnQuaDoKKwkqIGdzdC9nc3RxdWFyay5jOgorCSogZ3N0L2dzdHF1YXJrLmg6CisJKiBnc3QvZ3N0dXRpbHMuaDoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgZXZlbnQ6IEFQSTogQWRkIHNpbmstbWVzc2FnZSBldmVudAorCSAgZ3N0X2V2ZW50X25ld19zaW5rX21lc3NhZ2UoKQorCSAgZ3N0X2V2ZW50X3BhcnNlX3NpbmtfbWVzc2FnZSgpCisJICBUaGlzIGV2ZW50IGlzIHVzZWQgZm9yIHNlbmRpbmcgYSBHc3RNZXNzYWdlIGRvd25zdHJlYW0gYW5kIHN5bmNocm9uaXplZAorCSAgd2l0aCB0aGUgc3RyZWFtLCB0byBiZSBwb3N0ZWQgYnkgdGhlIHNpbmsgb25jZSBpdCByZWFjaGVzIHRoZSBzaW5rLgorCSAgRml4ZXMgYnVnICM2MDIyNzUuCisKKzIwMDktMTEtMTYgMDA6MTI6MjIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJKiBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6CisJKiBkb2NzL2dzdC9NYWtlZmlsZS5hbToKKwkqIGRvY3MvbGlicy9NYWtlZmlsZS5hbToKKwkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKKwkqIGdzdC9nc3RwbHVnaW5sb2FkZXIuYzoKKwkqIGxpYnMvZ3N0L2hlbHBlcnMvLmdpdGlnbm9yZToKKwkqIGxpYnMvZ3N0L2hlbHBlcnMvTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9oZWxwZXJzL2dzdC1wbHVnaW4tc2Nhbm5lci5jOgorCSogbGlicy9nc3QvaGVscGVycy9wbHVnaW4tc2Nhbm5lci5jOgorCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuYW06CisJICBwbHVnaW4tc2Nhbm5lcjogcmVuYW1lIHBsdWdpbi1zY2FubmVyIGhlbHBlciBiaW5hcnkgdG8gZ3N0LXBsdWdpbi1zY2FubmVyCisJICBhbmQgaW5zdGFsbCBpbnRvIGEgZGlmZmVyZW50IGRpcmVjdG9yeSAkKGxpYmV4ZWNkaXIvZ3N0cmVhbWVyLTAuMTApIHNvIHRoYXQKKwkgIGV2ZXJ5dGhpbmcgaXMgdmVyc2lvbmVkIHByb3Blcmx5LgorCSAgTk9URTogcnVuICdtYWtlIGNsZWFuJyBhZnRlciB1cGRhdGluZzsgaWYgeW91IGFyZSBydW5uaW5nIGFuIHVuaW5zdGFsbGVkIHNldHVwLAorCSAgeW91IHdpbGwgbmVlZCB0byB1cGRhdGUgeW91ciBnc3QtdW5pbnN0YWxsZWQgc2NyaXB0ICh1bmxlc3MgaXQncyBzeW1saW5rZWQKKwkgIHRvIGdzdHJlYW1lciBjb3JlIG1hc3RlcikgYW5kIGV4aXQvZW50ZXIgeW91ciB1bmluc3RhbGxlZCBlbnZpcm9ubWVudCB0byBnZXQKKwkgIHRoZSB1cGRhdGVkIGVudmlyb25tZW50LiBJZiB5b3UgYXJlIHJ1bm5pbmcgYW4gaW5zdGFsbGVkIHNldHVwLCB5b3Ugc2hvdWxkCisJICBydW4gJ21ha2UgdW5pbnN0YWxsJyBiZWZvcmUgbWVyZ2luZyB0aGlzIGNoYW5nZSBvciByZW1vdmUgdGhlIG9sZAorCSAgcGx1Z2luLXNjYW5uZXIgYmluYXJ5IG1hbnVhbGx5LgorCSAgRml4ZXMgIzYwMTY5OC4KKworMjAwOS0xMS0xOCAwOToxMDozNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkgIFJldmVydCAic3RydWN0dXJlOiBkb24ndCBjaGVjayB0eXBlIHR3aWNlIgorCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBmODY0MTg3YmY1ZmRmYWY3MWYyZTAzODk0OWU0MDNhNDJlNmRhZjBlLgorCSAgUmV2ZXJ0aW5nIHRoaXMgYXMgaXQgY2hhbmdlcyBiZWhhdmlvdXIgYW5kIHRoZSBkb2N1bWVudGF0aW9uIGlzCisJICBhbWJpZ3VvdXMgYWJvdXQgd2hldGhlciB0aGUgY2FsbGVyIG11c3QgY2hlY2sgdGhlIHR5cGUgZmlyc3Qgb3IKKwkgIG5vdCAoY2FsbCBtdXN0IGNoZWNrIHR5cGUgdnMuIHJldHVybnMgTlVMTCBpZiBub3QgYSBzdHJpbmcpLiBJZgorCSAgR0xpYiBoYXMgYmVlbiBjb21waWxlZCB3aXRoIEdfRElTQUJMRV9DSEVDS1MgdGhlbiBnX3ZhbHVlX2dldF9zdHJpbmcoKQorCSAgbWF5IHJldHVybiBjb21wbGV0ZSBnYXJiYWdlIGV2ZW4gaWYgdGhlIHZhbHVlIGRvZXMgbm90IGNvbnRhaW4KKwkgIGEgc3RyaW5nLiBCZXR0ZXIgcGxheSBpdCBzYWZlLCBlc3AuIHNpbmNlIHRoZSBleHRyYSBjaGVjayBpcyBqdXN0CisJICBhbiBpbnRlZ2VyIGNvbXBhcmlzb24uIEZvciBmdW5kYW1lbnRhbCB0eXBlcyB3ZSBjb3VsZCByZXR1cm4gdmFsdWVzCisJICBmcm9tIHRoZSBHVmFsdWUgc3RydWN0dXJlIGRpcmVjdGx5IGlmIHdlIHJlYWxseSB3YW50ZWQgdG8gYnlwYXNzCisJICB0aGUgZXh0cmEgY2hlY2suCisKKzIwMDktMTEtMTcgMTc6MDY6MDggKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSAgc3RydWN0dXJlOiBkb24ndCBjaGVjayB0eXBlIHR3aWNlCisKKzIwMDktMTEtMTcgMTg6MzU6NTUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZXZlbnQuYzoKKwkgIGV2ZW50OiBBZGQgc3RlcCBldmVudCBxdWFyaworCisyMDA5LTExLTE3IDEwOjAyOjM2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOgorCSAgZ3N0LXVuaW5zdGFsbGVkOiBhZGQgcGF0aHMgZm9yIGdzdC1xYS1zeXN0ZW0KKworMjAwOS0xMS0xNyAwOTowNjo0OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbW1vbjoKKwkqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgorCSogZG9jcy9saWJzL01ha2VmaWxlLmFtOgorCSAgZG9jczogc2V0IEdTVF9QTFVHSU5fU0NBTk5FUiB3aGVuIGNhbGxpbmcgZ3RrZG9jLXNjYW5nb2JqCisJICBPdGhlcndpc2UgdGhlIGRvY3MgYnVpbGQgd29uJ3Qgd29yayBwcm9wZXJseQorCisyMDA5LTExLTE2IDEzOjU4OjEwICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkgIHN0cnVjdHVyZTogcmVtb3ZlIHNvbWUgYmxhbmsgbGluZXMgKHByZXZpb3VzIGdzdC1pbmRlbnQgZmFpbHVyZSkKKworMjAwOS0xMS0xNiAxMzo1Mzo0NCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJICBzdHJ1Y3R1cmU6IHVzZSBsb2NhbCB2YXJpYWJsZSBlYXJsaWVyCisKKzIwMDktMTEtMTYgMTM6NDk6MzIgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSAgc3RydWN0dXJlOiBkb24ndCBjaGVjayBlbnVtIHR5cGVzIHR3aWNlLgorCSAgR19WQUxVRV9IT0xEU19FTlVNKHZhbHVlKSBpcyBkZWZpbmVkIGFzIEdfVFlQRV9DSEVDS19WQUxVRV9UWVBFICh2YWx1ZSwKKwkgIEdfVFlQRV9FTlVNKS4gSnVzdCBjaGVjayBmb3IgdGhlIHJpZ2h0IGVudW0tdHlwZSByaWdodCBhd2F5LgorCisyMDA5LTExLTE0IDIyOjM1OjA3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzeXN0ZW1jbG9jay5jOgorCSAgY2hlY2s6IEFkZCBhIGRlYnVnIHN0YXR1cyB0byB0aGUgc3lzdGVtY2xvY2sgdGVzdAorCSAgTmV4dCB0aW1lIGl0IGZhaWxzIG9uIGEgYnVpbGRib3Qgd2UgY2FuIHNlZSB3aGljaCBjbG9jayBpZAorCSAgcmV0dXJuIGl0IGlzIGdldHRpbmcuCisKKzIwMDktMTEtMTYgMTg6MjU6NDUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6CisJICBUT0RPOiByZW1vdmUgc3RlcHBpbmcgZnJvbSBUT0RPCisJICBSZW1vdmUgdGhlIGZyYW1lIHN0ZXBwaW5nIEFQSSBmcm9tIHRoZSBUT0RPIGxpc3QuCisKKzIwMDktMTEtMTYgMTQ6MDI6MDcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJhc2VzaW5rOiBmaXggcG9zaXRpb24gcmVwb3J0aW5nCisJICBPbmx5IHVwZGF0ZSB0aGUgY3VycmVudCBzdHJlYW0gdGltZSBhZnRlciB3ZSBjaGVja2VkIGlmIHdlIGdvdCBhIG5ldyBzdGVwCisJICBldmVudC4gVGhpcyBpbXByb3ZlcyB0aGUgcG9zaXRpb24gcmVwb3J0aW5nIGJ5IHRoZSBzaW5rLgorCSAgU2VlICM1OTU5NTgKKworMjAwOS0xMS0xNiAwOTo0OTo0NiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkqIGdzdC9nc3R1dGlscy5oOgorCSogZ3N0L2dzdHZhbHVlLmM6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIHV0aWxzOiBBUEk6IEFkZCBtdWx0aXBsaWNhdGlvbiBhbmQgYWRkaXRpb24gZnVuY3Rpb25zIGZvciBmcmFjdGlvbnMKKwkgIGdzdF91dGlsX2ZyYWN0aW9uX2FkZCgpCisJICBnc3RfdXRpbF9mcmFjdGlvbl9tdWx0aXBseSgpCisJICBUaGVzZSB3b3JrIG9uIHBsYWluIGludGVnZXJzIGluc3RlYWQgb2YgR1ZhbHVlcyB0bworCSAga2VlcCB0aGUgb3ZlcmhlYWQgYXMgbG93IGFzIHBvc3NpYmxlLgorCisyMDA5LTExLTE2IDA5OjI5OjEwICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3R1dGlscy5jOgorCSogZ3N0L2dzdHV0aWxzLmg6CisJKiBnc3QvZ3N0dmFsdWUuYzoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgZ3N0dXRpbHM6IEFQSTogQWRkIGZyYWN0aW9uIGhlbHBlciBmdW5jdGlvbnMKKwkgIGdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yKCkKKwkgIGdzdF91dGlsX2RvdWJsZV90b19mcmFjdGlvbigpCisJICBnc3RfdXRpbF9mcmFjdGlvbl90b19kb3VibGUoKQorCSAgVXNpbmcgdGhlc2UgaW5zdGVhZCBvZiBnb2luZyBvdmVyIEdWYWx1ZSBoYXMgbXVjaCBsb3dlciBvdmVyaGVhZC4KKwkgIEFsc28gYWRkIGZsb2F0PC0+ZnJhY3Rpb24gdHJhbnNmb3JtIGZ1bmN0aW9ucyBmb3IgR1ZhbHVlLgorCisyMDA5LTExLTEzIDE1OjQ1OjUyICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkgIGRlYnVnOiBhZGQgbW9yZSBkZWJ1ZyBsb2dnaW5nIHRvIGhlbHAgdHJhY2tpbmcgcGFyc2luZyBlcnJvcnMKKworMjAwOS0xMS0xMyAxMTo0MjowMiArMDEwMCAgT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzIDxvbGUuYW5kcmUucmF2bmFzQHRhbmRiZXJnLmNvbT4KKworCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtaW5pb2JqZWN0LmM6CisJICBtaW5pb2JqZWN0OiBhdm9pZCByYWNlIHdoZW4gcmVjeWNsaW5nIGJ1ZmZlcnMKKwkgIEF2b2lkIGEgcmFjZSB3aGVyZSBhIG1pbmlvYmplY3QgaXMgcmVjeWNsZWQgYW5kIHF1aWNrbHkgZnJlZWQsIHdoaWNoIGNhdXNlcyB0aGUKKwkgIGdfdHlwZV9mcmVlX2luc3RhbmNlKCkgdG8gYmUgY2FsbGVkIG9uIHRoZSBzYW1lIG9iamVjdCB0d2ljZS4KKwkgIFJlZiB0aGUgb2JqZWN0IGJlZm9yZSBjYWxsaW5nIHRoZSBmaW5hbGl6ZSBtZXRob2QgYW5kIGNoZWNrIGlmIHdlIHN0aWxsIG5lZWQgdG8KKwkgIGZyZWUgaXQgYWZ0ZXJ3YXJkLgorCSAgQWxzbyBhZGQgYSB1bml0IHRlc3QgZm9yIHRoaXMgY2FzZS4KKwkgIEZpeGVzICM2MDE1ODcKKworMjAwOS0xMS0xMiAxNzowMjo0MCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIHdoaXRlc3BhY2U6IHJlbW92ZSBibGFua3MgaW4gZG9jLWNvbW1lbnQKKworMjAwOS0xMS0wNiAxNTo0Mjo1NyArMDMwMCAg0KDRg9GB0LvQsNC9INCY0LbQsdGD0LvQsNGC0L7QsiA8bHJuMTk4NkBnbWFpbC5jb20+CisKKwkqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSAgcmVnaXN0cnk6IEltcG9ydCBfcHJpdl9nc3RfZGxsX2hhbmRsZSBpbnRvIGdzdHJlZ2lzdHJ5LmMKKwkgIEZpeGVzIGJ1ZyAjNjAxNjY4LgorCisyMDA5LTExLTEyIDE0OjEwOjA2ICswMzAwICDQoNGD0YHQu9Cw0L0g0JjQttCx0YPQu9Cw0YLQvtCyIDxscm4xOTg2QGdtYWlsLmNvbT4KKworCSogdGVzdHMvZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlLmFtOgorCSAgdGVzdHM6IERvIG5vdCBsaXN0IGxpYmdzdGNoZWNrIGFzIGEgcmVxdWlyZW1lbnQgZm9yIHRlc3RzL2V4YW1wbGVzL21hbnVhbAorCSAgRml4ZXMgYnVnICM2MDE2NjkuCisKKzIwMDktMTEtMTEgMTc6MTI6MTkgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgYmFzZXNpbms6IEZpeCB0cmVhdGluZyBiYXNlX3RpbWUgYXMgdW5zaWduZWQgaW4gcG9zaXRpb24gY2FsY3VsYXRpb24KKwkgIEVsZW1lbnQgYmFzZV90aW1lIGlzIGEgc2lnbmVkIHF1YW50aXR5LCB3aGljaCBsZWFkcyB0byBiYXNlc2luayByZXR1cm5pbmcKKwkgIGEgcG9zaXRpb24gb2YgMCB3aGVuIGRlYWxpbmcgd2l0aCBhIG5lZ2F0aXZlIGJhc2UgdGltZSAtIHdoaWNoIGFyZSBxdWl0ZQorCSAgbGVnYWwgd2hlbiBjbG9ja3MgKHN1Y2ggYXMgdGhlIGF1ZGlvIGNsb2NrKSBhcmUgY2xvc2UgdG8gMC4KKwkgIFRoaXMgZG9lc24ndCBtYW5pZmVzdCBpbiBub3JtYWwgcGlwZWxpbmVzLCBvZiBjb3Vyc2UgLSBidXQgY2FuIGhhcHBlbgorCSAgKGF0IGxlYXN0KSB3aGVuIG1hbnVhbGx5IHNldHRpbmcgdGhlIGJhc2UgdGltZSBvbiBhIHBpcGVsaW5lLgorCisyMDA5LTExLTEwIDE4OjAzOjQzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSogZ3N0L2dzdHJlZ2lzdHJ5Lmg6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIHJlZ2lzdHJ5OiBBUEk6IEFkZCBnc3Rfe2RlZmF1bHQsfV9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2Nvb2tpZSgpCisJICBUaGlzIHJldHVybnMgdGhlIGludGVybmFsIGZlYXR1cmUgbGlzdCBjb29raWUsIHdoaWNoIGNoYW5nZXMgZXZlcnkKKwkgIHRpbWUgYSBmZWF0dXJlIGlzIGFkZGVkIG9yIHJlbW92ZWQuIFRoaXMgY2FuIGJlIHVzZWQgYnkgZWxlbWVudHMKKwkgIHRvIGNoZWNrIGlmIHRoZXkgc2hvdWxkIHVwZGF0ZSB0aGVpciBjYWNoZWQgZmVhdHVyZSBsaXN0cy4KKworMjAwOS0xMS0xMCAxMTo1NTozNCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IGZpeCBwcmludGYgZm9ybWF0CisJICBDYXN0IHRoZSB2YXJpYWJsZSB0byBnaW50IHRvIGNvbmZvcm0gdG8gdGhlIHByaW50ZiBmb3JtYXQgdXNlZC4KKwkgIEl0IGlzIGNhc3RlZCByYXRoZXIgdGhhbiBjaGFuZ2luZyB0aGUgZm9ybWF0IGJlY2F1c2UgdGhlCisJICBtZXNzYWdlIGlzIGNyZWF0ZWQgd2l0aCBhIGNhc3QgdG8gZ2ludCB0b28uCisKKzIwMDktMTEtMTAgMTA6MTA6NTYgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSAgcXVldWUyOiBhdm9pZCBjcmFzaGluZyBkdWUgdG8gbmVnYXRpdmUgcGVyY2VudAorCSAgcXVldWUyIHdvdWxkIGNyYXNoIHdoZW4gdXNpbmcgc21hbGwgYnVmZmVyIHNpemVzIGJlY2F1c2UKKwkgIGl0IHdvdWxkIG92ZXJmbG93IHdoZW4gY2FsY3VsYXRpbmcgdGhlIHBlcmNlbnRhZ2UsIHJlc3VsdGluZworCSAgaW4gdGhlIGJ1ZmZlcmluZyBHc3RNZXNzYWdlIG5vdCBiZWluZyBjcmVhdGVkIGFuZCB0cnlpbmcgdG8gYmUKKwkgIHVzZWQuIFRoaXMgcGF0Y2ggdXNlcyBhIGdpbnQ2NCBpbnN0ZWFkIG9mIGEgZ2ludCB0byBkbyB0aGUKKwkgIHBlcmNlbnRhZ2UgbWF0aCwgbWFraW5nIGl0IGhhcmRlciB0byBvdmVyZmxvdy4KKworMjAwOS0xMS0xMCAwOTo1MjozMCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IEZpeCBzbWFsbCBkb2MgdHlwbworCisyMDA5LTExLTEwIDAwOjU3OjAwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmM6CisJICByZWdpc3RyeWNodW5rczogZml4IGNvbXBpbGF0aW9uIHdpdGggZGVidWdnaW5nIGRpc2FibGVkCisJICBBZGQgdWdseSBpZmRlZiB0byBmaXggdW51c2VkIHZhcmlhYmxlIHdhcm5pbmcgd2hlbiBjb21waWxpbmcgd2l0aAorCSAgZGVidWcgbG9nZ2luZyBkaXNhYmxlZC4KKworMjAwOS0xMS0wOSAxNjoyMDo1MiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBkb2NzL3JhbmRvbS9lbnNvbmljL2RyYWZ0LWJ1ZmZlcnBvb2xzLnR4dDoKKwkqIGRvY3MvcmFuZG9tL2Vuc29uaWMvZHJhZnQtcmVnaXN0cnktY2hhbmdlLWhvb2tzLnR4dDoKKwkgIHBsYW5uaW5nOiBhZGQgdGhvdWdodHMgYWJvdXQgZm9yZWlnbiByZWdpc3RyeSBjYWNoZSB1cGRhdGVzCisKKzIwMDktMTEtMDkgMTQ6NTU6NTQgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKKwkgIGluc3BlY3Q6IGFsbG93IHRvIGdldCBwbHVnaW4taW5zdGFsbC1pbmZvIGZvciBhbGwgaW5zdGFsbGVkIHBsdWdpbnMKKwkgIElmIG5vIHBsdWdpbiBpcyBnaXZlbiwgcHJpbnQgdGhlIGluZm8gZm9yIGFsbCBwbHVnaW5zLiBUaGlzIGNhbiBiZSB1c2VkIGFzIGEKKwkgIHN0YXJ0aW5nIHBvaW50IHRvIGdlbmVyYXRlIGEgcHJvZmlsZSBhYm91dCB3aGF0IHRoZSBnc3RyZWFtZXIgaW5zdGFsbGF0aW9uIGNhbgorCSAgcG90ZW50aWFseSBoYW5kbGUgKGUuZy4gZm9yIE1UUCBvciBETE5BKS4KKworMjAwOS0xMS0wOSAxMjo0MjozNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9tYW51YWwvaGlnaGxldmVsLWNvbXBvbmVudHMueG1sOgorCSAgZG9jczogZG9uJ3QgZm9yZ2V0IHRvIHVucmVmIHRoZSBwYWQKKworMjAwOS0xMS0wNyAyMDoyMjo0OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRvb2xzL2dzdC1sYXVuY2guYzoKKwkgIGdzdC1sYXVuY2g6IHdha2UgdXAgbGVzcyBvZnRlbiB0byBjaGVjayBpZiB3ZSd2ZSBiZWVuIGludGVycnVwdGVkCisJICBDaGVjayBpZiB3ZSd2ZSBiZWVuIGludGVycnVwdGVkIG9ubHkgZm91ciB0aW1lcyBwZXIgc2Vjb25kIGluc3RlYWQKKwkgIG9mIHR3ZW50eSB0aW1lcyBwZXIgc2Vjb25kLCB0byB3YWtlIHVwIHRoZSBjcHUgbGVzcyBvZnRlbiBhbmQKKwkgIHNhdmUgcG93ZXIgKHNlZSBidWcgIzYwMDkyMikuCisKKzIwMDktMTEtMDUgMjE6MTg6MjYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Y29uZmlnLmguaW46CisJICBnc3Rjb25maWcuaDogYWRkIGRlZmluZSB0byBmb3JjZSBwcmludGYgZm9ybWF0IGNoZWNraW5nIGZvciBkZWJ1ZyBtZXNzYWdlcworCSAgRm9yY2UgcHJpbnRmIGZvcm1hdCBjaGVja2luZyBmb3IgZGVidWcgbWVzc2FnZXMgaWYgR1NUX0RJU0FCTEVfUFJJTlRGX0VYVEVOU0lPTgorCSAgaXMgZGVmaW5lZC4gVGhpcyBpcyB1c2VmdWwgdG8gcXVpY2tseSBjaGVjayBjb2RlIGZvciBwcmludGYgZm9ybWF0IG1pc21hdGNoZXMKKwkgIGluIGRlYnVnZ2luZyBtZXNzYWdlcyB0aGF0IHdvdWxkIHVzdWFsbHkgbm90IGJlIGNhdWdodCAod2l0aCBnbGliYytnY2MgYW5kCisJICBwcmludGYgZXh0ZW5zaW9ucyBiZWluZyB1c2VkKS4KKwkgIFRvIHVzZTogbWFrZSBjbGVhbjsgbWFrZSBDRkxBR1M9Jy1nIC1PMiAtREdTVF9ESVNBQkxFX1BSSU5URl9FWFRFTlNJT04nCisKKzIwMDktMTEtMDUgMjE6MDk6MjggKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSogdGVzdHMvZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlLmFtOgorCSAgdGVzdHM6IE1ha2Ugc3VyZSB3ZSB1c2UgdGhlIGxvY2FsIGxpYmdzdGJhc2UgYW5kIG5vdCBhIHN0cmF5IG91dHNpZGUgb25lLgorCSAgVGhlb3JldGljYWxseSB3ZSBzaG91bGQgYWxzbyBkbyB0aGlzIGZvciBhbGwgbG9jYWwgbGlicmFyaWVzIHRvIG1ha2Ugc3VyZQorCSAgd2UgZG9uJ3QgdGVzdCB3aXRoIGEgJ3N0cmF5JyBvdXRzaWRlIGxpYnJhcnkuCisKKzIwMDktMTEtMDUgMTg6MzY6MzggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dmFsdWUuaDoKKwkgIGRvY3M6IGZpeCB0eXBvCisKKzIwMDktMTEtMDUgMTU6NTk6MzEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSAgdGFnbGlzdDogYXZvaWQgbG9va2luZyB1cCBHc3RUYWdJbmZvIHR3aWNlIGluIGEgcm93CisJICBQYXNzIHRoZSBpbmZvIHN0cnVjdHVyZSB0byBvdXIgaW50ZXJuYWwgZnVuY3Rpb24gaWYgYWxyZWFkeSBhdmFpbGFibGUuCisJICBBbHNvIGNsZWFuIHVwIHdhcm5pbmdzIGZvciB1bmtub3duIHRhZ3MuCisKKzIwMDktMTEtMDUgMTg6NTU6MzAgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5jOgorCSAgZ3N0cmVnaXN0cnljaHVua3M6IFdlJ3JlIGNlcnRhaW4gcGx1Z2luX25hbWUgaXMgYW4gaW50ZXJuIHN0cmluZy4KKwkgIFRoZSBvbmx5IHBsYWNlIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9tIGNyZWF0ZXMgdGhlIHBsdWdpbl9uYW1lIGFyZ3VtZW50CisJICB3aXRoIGdfaW50ZXJuX3N0cmluZygpLgorCSAgU2hhdmVzIG9mZiAxJSBmcm9tIHJlZ2lzdHJ5IGxvYWRpbmcuCisKKzIwMDktMTEtMDQgMTk6MzM6NTggKzAwMDAgIEJhc3RpZW4gTm9jZXJhIDxoYWRlc3NAaGFkZXNzLm5ldD4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKKwkgIGltcGxlbWVudCBidWZmZXJpbmctbGVmdCBhcmd1bWVudCB0byBidWZmZXIgbWVzc2FnZXMKKwkgIFVzaW5nIHRoZSBjdXJyZW50IGZpbGwgbGV2ZWwgb2YgdGhlIHF1ZXVlLCBhbmQgdGhlIGF2ZXJhZ2UgaW5wdXQKKwkgIHJhdGUsIHdlIGNhbiBkZXRlcm1pbmUgaG93IGxvbmcgaXQgd2lsbCB0YWtlIHRvIGZpbmlzaCBkb3dubG9hZGluZworCSAgdGhlIHdob2xlIHN0cmVhbSB0byB0aGUgdGVtcG9yYXJ5IGZpbGUuCisJICBGaXhlcyAjNjAwNzI2CisKKzIwMDktMTEtMDUgMTU6MTM6MDQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RxdWVyeS5oOgorCSAgcXVlcnk6IHdoaXRlc3BhY2UgZml4ZXMKKworMjAwOS0xMS0wNSAxNDowMjoyOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGdob3N0cGFkLmM6CisJICBnaG9zdHBhZDogZml4IGxvY2tpbmcKKworMjAwOS0xMS0wNSAxNDoyOTo1MCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKKwkgIGdob3N0cGFkOiBkb24ndCByZWxlYXNlIG11dGV4IHR3aWNlCisKKzIwMDktMTEtMDUgMTQ6Mjk6MTIgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdGdob3N0cGFkLmM6CisJICBnaG9zdHBhZDogc2tpcCB0eXBlIGNoZWNrIGluIGludGVybmFsIGFwaQorCisyMDA5LTExLTA1IDEyOjM2OjEwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmg6CisJICBwYWQ6IGluZGVudGF0aW9uIGZpeAorCisyMDA5LTExLTA1IDEyOjU0OjMyICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RwYWQuaDoKKwkqIGdzdC9nc3R1dGlscy5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgcGFkOiByZW5hbWUgbmV3IGFwaSBmcm9tIF9yZWZlZCB0byBfcmVmZmVkLgorCSAgRHVlIHRvIHBvcHVsYXIgZGVtYW5kIHJlbmFtZSB0aGUgbmV3IGFwaSBhcyB3ZSBzdGlsbCBjYW4uCisJICBBUEk6IGdzdF9wYWRfZ2V0X2NhcHNfcmVmZmVkKCksIGdzdF9wYWRfcGVlcl9nZXRfY2Fwc19yZWZmZWQoKQorCisyMDA5LTExLTA0IDIyOjQyOjUyICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJICBlbGVtZW50OiBhY2Nlc3MgcGFkdGVtcGxhdGUgbGlzdCBkaXJlY3RseSB0byBhdm9pZCBjYWxsIGFuZCB0eXBlIGNoZWNrLgorCisyMDA5LTExLTA0IDE4OjU4OjI2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGV2ZW50LmM6CisJICBldmVudDogQWRkIGEgRklYTUUgMC4xMSBmb3IgaGF2aW5nIGZsdXNoIGV2ZW50cyB0aGF0IGRvbid0IHJlc2V0IHJ1bm5pbmcgdGltZQorCisyMDA5LTExLTA0IDE3OjUyOjIxICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5jOgorCSAgcmVnaXN0cnljaHVua3M6IEZpeCBhIHByaW50ZiBjb21waWxlIHdhcm5pbmcgb24gNjQtYml0IHBsYXRmb3JtcworCisyMDA5LTExLTA0IDE3OjE1OjU5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGdob3N0cGFkLmM6CisJICBnaG9zdHBhZDogTWFrZSBzdXJlIHRoYXQgbm9ib2R5IHNldHMgdGhlIHByb3h5cGFkIG9yIGdob3N0cGFkIGl0c2VsZiBhcyB0YXJnZXQKKwkgIERvaW5nIHRoaXMgd2lsbCBsZWFkIHRvIHZlcnkgaW50ZXJlc3RpbmcgY3Jhc2hlcywgbGlrZSBzdGFjayBvdmVyZmxvd3MuCisKKzIwMDktMTEtMDQgMTE6MzU6NDYgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogZ3N0L2dzdHBsdWdpbmxvYWRlci5jOgorCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmM6CisJICBwbHVnaW4gbG9hZGVyOiBEb24ndCBmYWlsIGFmdGVyIGEgc2hvcnQgcmVhZC93cml0ZQorCSAgVGhlIGxvZ2ljIHRvIGhhbmRsZSBzaG9ydCByZWFkcy93cml0ZXMgd2FzIGluY29ycmVjdCwgY2F1c2luZyB0aGUKKwkgIHBhY2tldCBoYW5kbGVyIHRvIGF0dGVtcHQgdG8gaGFuZGxlIGluY29tcGxldGUgcGFja2V0cy4KKwkgIEdyb3cgdGhlIHBhY2tldCB0cmFuc21pdCBidWZmZXIgaW4gcHJvcG9ydGlvbiB0byBvYnNlcnZlZCB1c2FnZSwKKwkgIGNhdXNpbmcgZmV3ZXIgcmVhbGxvY3MuCisJICBBZGQgc29tZSBtb3JlIGRlYnVnIGluIHRoZSByZWdpc3RyeSBjaHVua3MgY29kZS4KKworMjAwOS0xMS0wNCAwMTo1MTozOCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBnc3QvZ3N0cGx1Z2lubG9hZGVyLmM6CisJICBwbHVnaW4gbG9hZGVyOiBEb24ndCBjcmFzaCBvbiBib2d1cyBwbHVnaW4gZGV0YWlscworCSAgV2hlbiBpbnZhbGlkIHJlZ2lzdHJ5IGNodW5rcyBhcmUgcmVjZWl2ZWQgZnJvbSB0aGUgY2hpbGQsIGFuZCBwYXJzaW5nCisJICBmYWlscywgZG9uJ3QgYWNjZXNzIGFuIGludmFsaWQgcGx1Z2luIHBvaW50ZXIuIEluc3RlYWQgYXR0ZW1wdCB0bworCSAgZmlndXJlIG91dCB3aGljaCBwbHVnaW4gY2F1c2VkIHRoZSBwcm9ibGVtIGFuZCBibGFja2xpc3QgaXQuCisKKzIwMDktMTEtMDQgMDE6NTQ6MzYgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogdG9vbHMvZ3N0LWluZGVudDoKKwkgIGdzdC1pbmRlbnQ6IFVzZSB0aGUgc2FtZSBsb2dpYyB0byBmaW5kIGdudWluZGVudCBhcyB0aGUgZ2l0IGhvb2sKKworMjAwOS0xMS0wMyAxNzozMDoxNCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5oOgorCSAgYnVpbGQ6IGluY2x1ZGUgc3RkaW8uaCBmb3IgRklMRQorCisyMDA5LTExLTAzIDAxOjE4OjQyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogdG9vbHMvZ3N0LWxhdW5jaC4xLmluOgorCSAgZG9jczogYWRkIGFub3RoZXIgZXhhbXBsZSB0byB0aGUgZ3N0LWxhdW5jaCBtYW4gcGFnZQorCSAgQWRkIGFuIGV4YW1wbGUgdGhhdCBzaG93cyBob3cgdG8gcmVmZXIgdG8gc3BlY2lmaWMgcGFkcyBieSBuYW1lCisJICB3aGVuIGNvbnN0cnVjdGluZyBhIHBpcGVsaW5lIHN0cmluZy4gRml4ZXMgIzYwMDM4Mi4KKworMjAwOS0xMS0wMiAwODo0ODo1MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R0eXBlZmluZC5jOgorCSAgZ3N0dHlwZWZpbmQ6IGF2b2lkIG9uZSBtb3JlIHJ1bi10aW1lIHR5cGUgY2hlY2sKKworMjAwOS0xMS0wMiAwOToyMjozNyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJKiBnc3QvZ3N0c3RydWN0dXJlLmg6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIHN0cnVjdHVyZTogQVBJOiBBZGQgZ3N0X3N0cnVjdHVyZV9pZF9oYXNfZmllbGR7LF90eXBlZH0KKworMjAwOS0xMS0wMiAwODoyODoyMCArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZ3N0L2dzdHR5cGVmaW5kLmM6CisJICBnc3R0eXBlZmluZDogVXNlIF9DQVNUIHZhcmlhbnRzIHdoZW4gdGhlIHR5cGUgaGFzIGFscmVkeSBiZWVuIGNoZWNrZWQuCisJICBUaGlzIGF2b2lkcyBjaGVja2luZyB0aGUgdHlwZSBuX3R5cGVmaW5kZXJzICogNCB0aW1lcyB3aGVuIGxvYWRpbmcgdGhlCisJICByZWdpc3RyeS4KKworMjAwOS0xMS0wMSAxMToyNDo0MCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RnaG9zdHBhZC5jOgorCSAgZ2hvc3RwYWQ6IEltcGxlbWVudCBpdGVyYXRlIGludGVybmFsIGxpbmtzCisJICBUaGUgaW50ZXJuYWxseSBsaW5rZWQgcGFkIG9mIHRoZSBnaG9zdCBwYWQgaXMgaXRzCisJICBwcm94eSBwYWQsIHdoaWNoIGlzIHRoZSBwYWQgdGhhdCBpcyBsaW5rZWQgdG8gdGhlIGdob3N0CisJICBwYWRzIHRhcmdldC4KKworMjAwOS0xMC0zMSAxNjo1NjoxNyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9wYXJzZS9ncmFtbWFyLnk6CisJICBwYXJzZXI6IE1ha2Ugc3VyZSB0aGF0IHNpZ25hbCB1c2VyIGRhdGEgaXMgZnJlZWQgYnkgc2V0dGluZyBhIEdDbG9zdXJlTm90aWZ5CisJICAuLi5pbnN0ZWFkIG9mIHVzaW5nIGEgc2Vjb25kIG1lY2hhbmlzbSBhbmQgc3RvcmluZyB0aGUgdXNlciBkYXRhCisJICBpbnNpZGUgdGhlIEdPYmplY3RzIHFkYXRhLgorCisyMDA5LTEwLTMxIDE2OjQ5OjAzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L3BhcnNlL2dyYW1tYXIueToKKwkgIHBhcnNlcjogVXNlIEdTbGljZSBmb3IgYWxsb2NhdGluZyB0aGUgc3RydWN0cworCisyMDA5LTEwLTMxIDE2OjQzOjI2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L3BhcnNlL2dyYW1tYXIueToKKwkgIHBhcnNlcjogQWx3YXlzIGdldCBEZWxheWVkTGluayBpbmZvcm1hdGlvbiBmcm9tIHRoZSBvYmplY3RzIHFkYXRhCisJICBUaGlzIG1ha2VzIHN1cmUgdGhhdCBpdCBpcyBhbHdheXMgdmFsaWQuCisKKzIwMDktMTAtMzEgMDk6NDg6MTkgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIHBvL1BPVEZJTEVTLmluOgorCSAgcG86IHF1ZXVlMiBoYXMgbW92ZWQgdG8gY29yZQorCisyMDA5LTEwLTI5IDExOjQxOjMzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgorCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLWRvY3Muc2dtbDoKKwkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy1zZWN0aW9ucy50eHQ6CisJKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuYXJnczoKKwkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5oaWVyYXJjaHk6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgorCSAgcXVldWUyOiBBZGQgdG8gdGhlIGRvY3MKKworMjAwOS0xMC0yOSAxMTozODoyMSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IFVzZSAiUXVldWUgMiIgYXMgbG9uZyBuYW1lCisKKzIwMDktMTAtMjkgMTE6MzU6MDggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSAgcXVldWUyOiBVc2UgR1NUX0JPSUxFUlBMQVRFX0ZVTEwoKSBhbmQgYWRkIHBhZCB0ZW1wbGF0ZXMvc2V0IGRldGFpbHMgaW4gYmFzZV9pbml0CisKKzIwMDktMTAtMjkgMTE6MzA6NTcgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSAgcXVldWUyOiBVc2UgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2ltcGxlKCkKKworMjAwOS0xMC0yOSAxMTozMDoxMSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUuYW06CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuaDoKKwkgIHF1ZXVlMjogSW50ZWdyYXRlIGludG8gY29yZXBsdWdpbnMKKworMjAwOS0xMC0yOSAxMToyMTozNiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5oOgorCSAgcXVldWUyOiBNb3ZlIHN0cnVjdCBkZWNsYXJhdGlvbnMgdG8gYSBzZXBhcmF0ZSBoZWFkZXIKKworMjAwOS0xMC0yOSAxMToxODoyMCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IE1vdmUgcXVldWUyIHRvIGdzdHJlYW1lciBjb3JlcGx1Z2lucworCSAgRml4ZXMgYnVnICM1OTk5OTYuCisKKzIwMDktMTAtMjggMDA6NTk6MzUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6CisJICBSZW1vdmUgR1NUX0RFQlVHX0ZVTkNQVFIgd2hlcmUgdGhleSdyZSBwb2ludGxlc3MKKwkgIFRoZXJlJ3Mgbm90IG11Y2ggcG9pbnQgaW4gdXNpbmcgR1NUX0RFQlVHX0ZVTkNQVFIgd2l0aCBHT2JqZWN0CisJICB2aXJ0dWFsIGZ1bmN0aW9ucyBzdWNoIGFzIGdldF9wcm9wZXJ0eSwgc2V0X3Byb3BlcnksIGZpbmFsaXplIGFuZAorCSAgZGlzcG9zZSwgc2luY2UgdGhleSdsbCBuZXZlciBiZSB1c2VkIGJ5IGFueW9uZSBhbnl3YXkuIFNhdmVzIGEKKwkgIGZldyBieXRlcyBhbmQgcG9zc2libHkgYSBzaXh0ZWVudGggb2YgYSBwb2xhciBiZWFyLgorCisyMDA5LTEwLTI3IDE1OjIzOjAwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IGFkZCBjdXN0b20gYWNjZXB0Y2FwcyBmdW5jdGlvbgorCisyMDA5LTA4LTA2IDEyOjE4OjM2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOgorCSAgcXVldWUyOiBwb3N0IGVycm9yIG1lc3NhZ2Ugd2hlbiBwYXVzaW5nIHRhc2sgaWYgc28gYXBwcm9wcmlhdGUKKwkgIElmIGEgZG93bnN0cmVhbSBlbGVtZW50IHJldHVybnMgYW4gZXJyb3Igd2hpbGUgdXBzdHJlYW0gaGFzIGFscmVhZHkKKwkgIHB1dCBhbGwgZGF0YSBpbnRvIHF1ZXVlMiAoaW5jbHVkaW5nIEVPUyksIHVwc3RyZWFtIHdpbGwgbm8gbG9uZ2VyCisJICBjaGFpbiBpbnRvIHF1ZXVlMiwgc28gaXQgaXMgdXAgdG8gcXVldWUyIHRvIHBlcmZvcm0gc29tZQorCSAgRU9TIGhhbmRsaW5nIC8gbWVzc2FnZSBwb3N0aW5nIGluIHN1Y2ggY2FzZXMuICBTZWUgIzU4OTk5MS4KKworMjAwOS0wNy0xNCAxNzowMzozNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOgorCSAgcXVldWUyOiBmaXggbGVhayBhbmQgaW1wcm92ZSBidWZmZXJpbmcKKwkgIEtlZXAgdHJhY2sgb2YgdGhlIG1heCByZXF1ZXN0ZWQgcG9zaXRpb24gYW5kIGNvbXBhcmUgdGhpcyB0byB0aGUgd3JpdGUgcG9zaXRpb24KKwkgIGluIHRoZSB0ZW1wIGZpbGUgdG8gZ2V0IHRoZSBjdXJyZW50IGFtb3VudCBvZiBidWZmZXJlZCBkYXRhLgorCSAgRml4IG1lbWxlYWsgb2YgYWxsIGluY29tbWluZyBidWZmZXJzLgorCSAgRml4ZXMgIzU4ODU1MQorCisyMDA5LTA3LTEwIDIxOjAxOjM5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IGZsdXNoIGRpZmZlcmVudGx5LCBhdm9pZGluZyBkZWFkbG9ja3MKKwkgIERvbid0IGZsdXNoIHRoZSBmaWxlIGJ5IGNsb3NpbmcgYW5kIG9wZW5pbmcgaXQgYnV0IGluc3RlYWQgdXNlIGdfZnJlb3Blbi4gVGhpcworCSAgYXZvaWRzIGEgZGVhZGxvY2sgaW4gc2h1dGRvd24gYmVjYXVzZSB3ZSBlbWl0IHRoZSB0ZW1wLWxvY2F0aW9uIHByb3BlcnR5IGNoYW5nZQorCSAgd2l0aCB0aGUgd3JvbmcgbG9jayBoZWxkLgorCisyMDA5LTA3LTEwIDE5OjQ5OjQ2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6CisJICBxdWV1ZTI6IGFkZCB0ZW1wLXRlbXBsYXRlIHByb3BlcnR5CisJICBBZGQgYSBuZXcgdGVtcC10ZW1wbGF0ZSBwcm9wZXJ0eSBzbyB0aGF0IHF1ZXVlMiBjYW4gc2VjdXJlbHkgYWxsb2NhdGUgYQorCSAgdGVtcG9yYXJ5IGZpbGVuYW1lLiBEZXByZWNhdGUgdGhlIHRlbXAtbG9jYXRpb24gcHJvcGVydHkgZm9yIHNldHRpbmcgdGhlCisJICBsb2NhdGlvbiBidXQgc3RpbGwgdXNlIGl0IHRvIG5vdGlmeSB0aGUgYWxsb2NhdGVkIHRlbXAgZmlsZS4KKworMjAwOS0wMy0yMCAxNDoxNzoxOSArMDEwMCAgTFJOIDxscm4xOTg2IGF0IGdtYWlsIGRvdCBjb20+CisKKwkqIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzoKKwkgIHdpbjMyOiBmaXggc2Vla2luZyBpbiBsYXJnZSBmaWxlcworCSAgRml4IFNlZWtpbmcgaW4gbGFyZ2UgZmlsZXMgYnkgdXNpbmcgdGhlIDY0LWJpdCBzZWVrIGZ1bmN0aW9ucy4KKwkgIEZpeGVzICM1NzYwMTkKKworMjAwOC0wOC0wNyAxNTo1ODo1OCArMDAwMCAgRnJlZGVyaWMgQ3JvemF0IDxmY3JvemF0QG1hbmRyaXZhLm9yZz4KKworCSAgTWFrZSBzdXJlIGdldHRleHQgcmV0dXJucyB0cmFuc2xhdGlvbnMgaW4gVVRGLTggZW5jb2RpbmcgcmF0aGVyIHRoYW4gaW4gdGhlIGN1cnJlbnQgbG9jYWxlIGVuY29kaW5nICgjNTQ2ODIyKS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IEZyZWRlcmljIENyb3phdCA8ZmNyb3phdEBtYW5kcml2YS5vcmc+CisJICAqIGV4dC9hbHNhL2dzdGFsc2FwbHVnaW4uYzogKHBsdWdpbl9pbml0KToKKwkgICogZXh0L2NkcGFyYW5vaWEvZ3N0Y2RwYXJhbm9pYXNyYy5jOiAocGx1Z2luX2luaXQpOgorCSAgKiBleHQvZ25vbWV2ZnMvZ3N0Z25vbWV2ZnMuYzogKHBsdWdpbl9pbml0KToKKwkgICogZXh0L29nZy9nc3RvZ2dkZW11eC5jOiAoZ3N0X29nZ19kZW11eF9wbHVnaW5faW5pdCk6CisJICAqIGdzdC1saWJzL2dzdC9hdWRpby9nc3RiYXNlYXVkaW9zcmMuYzogKF9kb19pbml0KToKKwkgICogZ3N0LWxpYnMvZ3N0L3BidXRpbHMvcGJ1dGlscy5jOiAoZ3N0X3BiX3V0aWxzX2luaXQpOgorCSAgKiBnc3QtbGlicy9nc3QvdGFnL3RhZ3MuYzogKGdzdF90YWdfcmVnaXN0ZXJfdGFnc19pbnRlcm5hbCk6CisJICAqIGdzdC9wbGF5YmFjay9nc3RkZWNvZGViaW4uYzogKHBsdWdpbl9pbml0KToKKwkgICogZ3N0L3BsYXliYWNrL2dzdGRlY29kZWJpbjIuYzogKGdzdF9kZWNvZGVfYmluX3BsdWdpbl9pbml0KToKKwkgICogZ3N0L3BsYXliYWNrL2dzdHBsYXliYWNrLmM6IChwbHVnaW5faW5pdCk6CisJICAqIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogKHBsdWdpbl9pbml0KToKKwkgICogZ3N0L3BsYXliYWNrL2dzdHVyaWRlY29kZWJpbi5jOiAoZ3N0X3VyaV9kZWNvZGVfYmluX3BsdWdpbl9pbml0KToKKwkgICogc3lzL3Y0bC9nc3R2NGwuYzogKHBsdWdpbl9pbml0KToKKwkgIE1ha2Ugc3VyZSBnZXR0ZXh0IHJldHVybnMgdHJhbnNsYXRpb25zIGluIFVURi04IGVuY29kaW5nIHJhdGhlcgorCSAgdGhhbiBpbiB0aGUgY3VycmVudCBsb2NhbGUgZW5jb2RpbmcgKCM1NDY4MjIpLgorCisyMDA4LTA3LTEwIDIxOjA2OjA2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIENsZWFudXAgUGx1Z2luIGRvY3MuIExpbmsgdG8gc2lnbmFscyBhbmQgcHJvcGVydGllcy4gRml4IHN1Yi1zZWN0aW9uIHRpdGxlcy4gRHJvcCBtZW50aW5pbmcgdGhhdCBhbGwgb3VyIGV4YW1wbGUgcGlwZS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYXNlLXBsdWdpbnMtZG9jcy5zZ21sOgorCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFzZS1wbHVnaW5zLW92ZXJyaWRlcy50eHQ6CisJICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYXNlLXBsdWdpbnMtc2VjdGlvbnMudHh0OgorCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFzZS1wbHVnaW5zLmFyZ3M6CisJICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYXNlLXBsdWdpbnMuaGllcmFyY2h5OgorCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFzZS1wbHVnaW5zLmludGVyZmFjZXM6CisJICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYXNlLXBsdWdpbnMucHJlcmVxdWlzaXRlczoKKwkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhc2UtcGx1Z2lucy5zaWduYWxzOgorCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWRkZXIueG1sOgorCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxzYS54bWw6CisJICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2NvbnZlcnQueG1sOgorCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9yYXRlLnhtbDoKKwkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvcmVzYW1wbGUueG1sOgorCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW90ZXN0c3JjLnhtbDoKKwkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNkcGFyYW5vaWEueG1sOgorCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVjb2RlYmluLnhtbDoKKwkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZmbXBlZ2NvbG9yc3BhY2UueG1sOgorCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2RwLnhtbDoKKwkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdub21ldmZzLnhtbDoKKwkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxpYnZpc3VhbC54bWw6CisJICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vZ2cueG1sOgorCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcGFuZ28ueG1sOgorCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcGxheWJhY2sueG1sOgorCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcXVldWUyLnhtbDoKKwkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXN1YnBhcnNlLnhtbDoKKwkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRjcC54bWw6CisJICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10aGVvcmEueG1sOgorCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdHlwZWZpbmRmdW5jdGlvbnMueG1sOgorCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdXJpZGVjb2RlYmluLnhtbDoKKwkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4LnhtbDoKKwkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvcmF0ZS54bWw6CisJICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb3NjYWxlLnhtbDoKKwkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvdGVzdHNyYy54bWw6CisJICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12b2x1bWUueG1sOgorCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdm9yYmlzLnhtbDoKKwkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNpbmsueG1sOgorCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teHZpbWFnZXNpbmsueG1sOgorCSAgKiBleHQvYWxzYS9nc3RhbHNhbWl4ZXIuYzoKKwkgICogZXh0L2Fsc2EvZ3N0YWxzYXNpbmsuYzoKKwkgICogZXh0L2Fsc2EvZ3N0YWxzYXNyYy5jOgorCSAgKiBleHQvZ2lvL2dzdGdpb3NpbmsuYzoKKwkgICogZXh0L2dpby9nc3RnaW9zcmMuYzoKKwkgICogZXh0L2dpby9nc3RnaW9zdHJlYW1zaW5rLmM6CisJICAqIGV4dC9naW8vZ3N0Z2lvc3RyZWFtc3JjLmM6CisJICAqIGV4dC9nbm9tZXZmcy9nc3Rnbm9tZXZmc3NpbmsuYzoKKwkgICogZXh0L2dub21ldmZzL2dzdGdub21ldmZzc3JjLmM6CisJICAqIGV4dC9vZ2cvZ3N0b2dnZGVtdXguYzoKKwkgICogZXh0L29nZy9nc3RvZ2dtdXguYzoKKwkgICogZXh0L3BhbmdvL2dzdGNsb2Nrb3ZlcmxheS5jOgorCSAgKiBleHQvcGFuZ28vZ3N0dGV4dG92ZXJsYXkuYzoKKwkgICogZXh0L3BhbmdvL2dzdHRleHRyZW5kZXIuYzoKKwkgICogZXh0L3BhbmdvL2dzdHRpbWVvdmVybGF5LmM6CisJICAqIGV4dC90aGVvcmEvdGhlb3JhZGVjLmM6CisJICAqIGV4dC90aGVvcmEvdGhlb3JhZW5jLmM6CisJICAqIGV4dC90aGVvcmEvdGhlb3JhcGFyc2UuYzoKKwkgICogZXh0L3ZvcmJpcy92b3JiaXNkZWMuYzoKKwkgICogZXh0L3ZvcmJpcy92b3JiaXNlbmMuYzoKKwkgICogZXh0L3ZvcmJpcy92b3JiaXNwYXJzZS5jOgorCSAgKiBleHQvdm9yYmlzL3ZvcmJpc3RhZy5jOgorCSAgKiBnc3QvYWRkZXIvZ3N0YWRkZXIuYzoKKwkgICogZ3N0L2F1ZGlvY29udmVydC9nc3RhdWRpb2NvbnZlcnQuYzoKKwkgICogZ3N0L2F1ZGlvcmVzYW1wbGUvZ3N0YXVkaW9yZXNhbXBsZS5jOgorCSAgKiBnc3QvYXVkaW90ZXN0c3JjL2dzdGF1ZGlvdGVzdHNyYy5jOgorCSAgKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9nc3RmZm1wZWdjb2xvcnNwYWNlLmM6CisJICAqIGdzdC9nZHAvZ3N0Z2RwZGVwYXkuYzoKKwkgICogZ3N0L2dkcC9nc3RnZHBwYXkuYzoKKwkgICogZ3N0L3BsYXliYWNrL2dzdGRlY29kZWJpbjIuYzoKKwkgICogZ3N0L3BsYXliYWNrL2dzdHBsYXliaW4uYzoKKwkgICogZ3N0L3BsYXliYWNrL2dzdHBsYXliaW4yLmM6CisJICAqIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzoKKwkgICogZ3N0L3BsYXliYWNrL2dzdHVyaWRlY29kZWJpbi5jOgorCSAgKiBnc3QvdGNwL2dzdG11bHRpZmRzaW5rLmM6CisJICAqIGdzdC90Y3AvZ3N0dGNwc2VydmVyc2luay5jOgorCSAgKiBnc3QvdmlkZW9yYXRlL2dzdHZpZGVvcmF0ZS5jOgorCSAgKiBnc3QvdmlkZW9zY2FsZS9nc3R2aWRlb3NjYWxlLmM6CisJICAqIGdzdC92aWRlb3Rlc3RzcmMvZ3N0dmlkZW90ZXN0c3JjLmM6CisJICAqIGdzdC92b2x1bWUvZ3N0dm9sdW1lLmM6CisJICAqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOgorCSAgKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5jOgorCSAgQ2xlYW51cCBQbHVnaW4gZG9jcy4gTGluayB0byBzaWduYWxzIGFuZCBwcm9wZXJ0aWVzLiBGaXggc3ViLXNlY3Rpb24KKwkgIHRpdGxlcy4gRHJvcCBtZW50aW5pbmcgdGhhdCBhbGwgb3VyIGV4YW1wbGUgcGlwZWxpbmVzIGFyZSAic2ltcGxlIgorCSAgcGlwZWxpbmVzLgorCisyMDA4LTA2LTI0IDE2OjIyOjQ1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogRG8gbm90IGRvdWJsZSBub3RpZnkuIFJlbW92ZSB0aGUgdW5zdWVkIHJldHVybiB2YWx1ZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6CisJICBEbyBub3QgZG91YmxlIG5vdGlmeS4gUmVtb3ZlIHRoZSB1bnN1ZWQgcmV0dXJuIHZhbHVlLgorCisyMDA4LTA0LTExIDAxOjI1OjAxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL2Rlc2lnbi9kcmFmdC1rZXlmcmFtZS1mb3JjZS50eHQ6IEZpeCB0eXBvLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL2RyYWZ0LWtleWZyYW1lLWZvcmNlLnR4dDoKKwkgIEZpeCB0eXBvLgorCSAgKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6ICh1cGRhdGVfYnVmZmVyaW5nKSwKKwkgIChnc3RfcXVldWVfaGFuZGxlX3NyY19xdWVyeSk6CisJICBTZXQgYnVmZmVyaW5nIG1vZGUgaW4gdGhlIG1lc3NhZ2VzLgorCSAgU2V0IGJ1ZmZlcmluZyBwZXJjZW50IGluIHRoZSBxdWVyeS4KKwkgICogdGVzdHMvZXhhbXBsZXMvc2Vlay9zZWVrLmM6ICh1cGRhdGVfZmlsbCksIChtc2dfc3RhdGVfY2hhbmdlZCksCisJICAoZG9fc3RyZWFtX2J1ZmZlcmluZyksIChkb19kb3dubG9hZF9idWZmZXJpbmcpLCAobXNnX2J1ZmZlcmluZyk6CisJICBEbyBzb21lIG1vcmUgZmFuY3kgdGhpbmdzIGJhc2VkIG9uIHRoZSBidWZmZXJpbmcgbWV0aG9kIGluIHVzZS4KKworMjAwOC0wNC0wOSAyMTo0MDoxNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOiBJbmNsdWRlIGV4dHJhIGJ1ZmZlcmluZyBzdGF0cyBpbiB0aGUgYnVmZmVyaW5nIG1lc3NhZ2UuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOiAodXBkYXRlX2J1ZmZlcmluZyksCisJICAoZ3N0X3F1ZXVlX2Nsb3NlX3RlbXBfbG9jYXRpb25fZmlsZSksIChnc3RfcXVldWVfaGFuZGxlX3NyY19xdWVyeSksCisJICAoZ3N0X3F1ZXVlX3NyY19jaGVja2dldHJhbmdlX2Z1bmN0aW9uKToKKwkgIEluY2x1ZGUgZXh0cmEgYnVmZmVyaW5nIHN0YXRzIGluIHRoZSBidWZmZXJpbmcgbWVzc2FnZS4KKwkgIEltcGxlbWVudCBCVUZGRVJJTkcgcXVlcnkuCisJICAqIGdzdC9wbGF5YmFjay9nc3R1cmlkZWNvZGViaW4uYzogKGRvX2FzeW5jX3N0YXJ0KSwKKwkgIChkb19hc3luY19kb25lKSwgKHR5cGVfZm91bmQpLCAoc2V0dXBfc3RyZWFtaW5nKSwgKHNldHVwX3NvdXJjZSksCisJICAoZ3N0X3VyaV9kZWNvZGVfYmluX2NoYW5nZV9zdGF0ZSk6CisJICBPbmx5IGFkZCBkZWNvZGViaW4yIHdoZW4gdGhlIHR5cGUgaXMgZm91bmQgaW4gc3RyZWFtaW5nIG1vZGUuCisJICBNYWtlIHVyaWRlY29kZWJpbiBhc3luYyB0byBQQVVTRUQgZXZlbiB3aGVuIHdlIGRvbid0IGhhdmUgZGVjb2RlYmluMgorCSAgYWRkZWQgeWV0LgorCisyMDA4LTA0LTAyIDExOjA4OjA1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6IFVwZGF0ZSB0aGUgZXN0aW1hdGVkIGlucHV0IGRhdGEgd2hlbiB3ZSBwdXNoIG91dCBhIGJ1ZmZlci4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6ICh1cGRhdGVfb3V0X3JhdGVzKSwKKwkgIChnc3RfcXVldWVfb3Blbl90ZW1wX2xvY2F0aW9uX2ZpbGUpLAorCSAgKGdzdF9xdWV1ZV9jbG9zZV90ZW1wX2xvY2F0aW9uX2ZpbGUpLCAoZ3N0X3F1ZXVlX2hhbmRsZV9zcmNfZXZlbnQpLAorCSAgKGdzdF9xdWV1ZV9oYW5kbGVfc3JjX3F1ZXJ5KSwgKGdzdF9xdWV1ZV9zZXRfcHJvcGVydHkpOgorCSAgVXBkYXRlIHRoZSBlc3RpbWF0ZWQgaW5wdXQgZGF0YSB3aGVuIHdlIHB1c2ggb3V0IGEgYnVmZmVyLgorCSAgQWRkIHNvbWUgZGVidWcgaW5mbyBhYm91dCB0aGUgdGVtcCBmaWxlLgorCSAgT25seSBmb3J3YXJkIHNyYyBldmVudHMgd2hlbiB3ZSBhcmUgbm90IHVzaW5nIGEgdGVtcCBmaWxlLgorCSAgRG9uJ3QgYmxvY2sgdGhlIGR1cmF0aW9uIHF1ZXJ5LCB3ZSBuZWVkIHRvIGZpbmQgc29tZXRoaW5nIGJldHRlci4KKwkgIERvbid0IGxlYWsgdGhlIHRlbXAgZmlsZW5hbWUuCisKKzIwMDgtMDMtMjQgMTQ6MDg6MjIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogVGhlIHF1ZXVlIGlzIG5ldmVyIGZpbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBidWZmZXJzIGluIHRoZSBxdWV1ZSBhdCBhbGwuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOiAoZ3N0X3F1ZXVlX2lzX2ZpbGxlZCk6CisJICBUaGUgcXVldWUgaXMgbmV2ZXIgZmlsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIGJ1ZmZlcnMgaW4gdGhlIHF1ZXVlIGF0IGFsbC4KKwkgIEZpeGVzICM1MjM5OTMuCisKKzIwMDgtMDMtMjIgMTU6MDA6NTMgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgVXNlIEdfUEFSQU1fU1RBVElDX1NUUklOR1MgZXZlcnl3aGVyZSBmb3IgR1BhcmFtU3BlY3MgdGhhdCB1c2Ugc3RhdGljIHN0cmluZ3MgKGkuZS4gYWxsKS4gVGhpcyBnaXZlcyB1cyBsZXNzIG1lbW9yeSB1Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgKiBleHQvYWxzYS9nc3RhbHNhbWl4ZXJlbGVtZW50LmM6CisJICAoZ3N0X2Fsc2FfbWl4ZXJfZWxlbWVudF9jbGFzc19pbml0KToKKwkgICogZXh0L2Fsc2EvZ3N0YWxzYXNpbmsuYzogKGdzdF9hbHNhc2lua19jbGFzc19pbml0KToKKwkgICogZXh0L2Fsc2EvZ3N0YWxzYXNyYy5jOiAoZ3N0X2Fsc2FzcmNfY2xhc3NfaW5pdCk6CisJICAqIGV4dC9jZHBhcmFub2lhL2dzdGNkcGFyYW5vaWFzcmMuYzoKKwkgIChnc3RfY2RfcGFyYW5vaWFfc3JjX2NsYXNzX2luaXQpOgorCSAgKiBleHQvZ2lvL2dzdGdpb3NpbmsuYzogKGdzdF9naW9fc2lua19jbGFzc19pbml0KToKKwkgICogZXh0L2dpby9nc3RnaW9zcmMuYzogKGdzdF9naW9fc3JjX2NsYXNzX2luaXQpOgorCSAgKiBleHQvZ2lvL2dzdGdpb3N0cmVhbXNpbmsuYzogKGdzdF9naW9fc3RyZWFtX3NpbmtfY2xhc3NfaW5pdCk6CisJICAqIGV4dC9naW8vZ3N0Z2lvc3RyZWFtc3JjLmM6IChnc3RfZ2lvX3N0cmVhbV9zcmNfY2xhc3NfaW5pdCk6CisJICAqIGV4dC9nbm9tZXZmcy9nc3Rnbm9tZXZmc3NpbmsuYzogKGdzdF9nbm9tZV92ZnNfc2lua19jbGFzc19pbml0KToKKwkgICogZXh0L2dub21ldmZzL2dzdGdub21ldmZzc3JjLmM6IChnc3RfZ25vbWVfdmZzX3NyY19jbGFzc19pbml0KToKKwkgICogZXh0L29nZy9nc3RvZ2dtdXguYzogKGdzdF9vZ2dfbXV4X2NsYXNzX2luaXQpOgorCSAgKiBleHQvcGFuZ28vZ3N0dGV4dG92ZXJsYXkuYzogKGdzdF90ZXh0X292ZXJsYXlfY2xhc3NfaW5pdCk6CisJICAqIGV4dC9wYW5nby9nc3R0ZXh0cmVuZGVyLmM6IChnc3RfdGV4dF9yZW5kZXJfY2xhc3NfaW5pdCk6CisJICAqIGV4dC90aGVvcmEvdGhlb3JhZGVjLmM6IChnc3RfdGhlb3JhX2RlY19jbGFzc19pbml0KToKKwkgICogZXh0L3RoZW9yYS90aGVvcmFlbmMuYzogKGdzdF90aGVvcmFfZW5jX2NsYXNzX2luaXQpOgorCSAgKiBleHQvdGhlb3JhL3RoZW9yYXBhcnNlLmM6IChnc3RfdGhlb3JhX3BhcnNlX2NsYXNzX2luaXQpOgorCSAgKiBleHQvdm9yYmlzL3ZvcmJpc2VuYy5jOiAoZ3N0X3ZvcmJpc19lbmNfY2xhc3NfaW5pdCk6CisJICAqIGdzdC1saWJzL2dzdC9hdWRpby9nc3RhdWRpb2ZpbHRlcnRlbXBsYXRlLmM6CisJICAoZ3N0X2F1ZGlvX2ZpbHRlcl90ZW1wbGF0ZV9jbGFzc19pbml0KToKKwkgICogZ3N0LWxpYnMvZ3N0L2F1ZGlvL2dzdGJhc2VhdWRpb3NpbmsuYzoKKwkgIChnc3RfYmFzZV9hdWRpb19zaW5rX2NsYXNzX2luaXQpOgorCSAgKiBnc3QtbGlicy9nc3QvYXVkaW8vZ3N0YmFzZWF1ZGlvc3JjLmM6CisJICAoZ3N0X2Jhc2VfYXVkaW9fc3JjX2NsYXNzX2luaXQpOgorCSAgKiBnc3QtbGlicy9nc3QvY2RkYS9nc3RjZGRhYmFzZXNyYy5jOgorCSAgKGdzdF9jZGRhX2Jhc2Vfc3JjX2NsYXNzX2luaXQpOgorCSAgKiBnc3QtbGlicy9nc3QvaW50ZXJmYWNlcy9taXhlcnRyYWNrLmM6CisJICAoZ3N0X21peGVyX3RyYWNrX2NsYXNzX2luaXQpOgorCSAgKiBnc3QtbGlicy9nc3QvcnRwL2dzdGJhc2VydHBkZXBheWxvYWQuYzoKKwkgIChnc3RfYmFzZV9ydHBfZGVwYXlsb2FkX2NsYXNzX2luaXQpOgorCSAgKiBnc3QtbGlicy9nc3QvcnRwL2dzdGJhc2VydHBwYXlsb2FkLmM6CisJICAoZ3N0X2Jhc2VydHBwYXlsb2FkX2NsYXNzX2luaXQpOgorCSAgKiBnc3QvYXVkaW9jb252ZXJ0L2dzdGF1ZGlvY29udmVydC5jOgorCSAgKGdzdF9hdWRpb19jb252ZXJ0X2NsYXNzX2luaXQpOgorCSAgKiBnc3QvYXVkaW9yYXRlL2dzdGF1ZGlvcmF0ZS5jOiAoZ3N0X2F1ZGlvX3JhdGVfY2xhc3NfaW5pdCk6CisJICAqIGdzdC9hdWRpb3Jlc2FtcGxlL2dzdGF1ZGlvcmVzYW1wbGUuYzoKKwkgIChnc3RfYXVkaW9yZXNhbXBsZV9jbGFzc19pbml0KToKKwkgICogZ3N0L2F1ZGlvdGVzdHNyYy9nc3RhdWRpb3Rlc3RzcmMuYzoKKwkgIChnc3RfYXVkaW9fdGVzdF9zcmNfY2xhc3NfaW5pdCk6CisJICAqIGdzdC9nZHAvZ3N0Z2RwcGF5LmM6IChnc3RfZ2RwX3BheV9jbGFzc19pbml0KToKKwkgICogZ3N0L3BsYXliYWNrL2dzdGRlY29kZWJpbjIuYzogKGdzdF9kZWNvZGVfYmluX2NsYXNzX2luaXQpOgorCSAgKiBnc3QvcGxheWJhY2svZ3N0cGxheWJhc2ViaW4uYzogKGdzdF9wbGF5X2Jhc2VfYmluX2NsYXNzX2luaXQpLAorCSAgKHByZXJvbGxfdW5saW5rZWQpOgorCSAgKiBnc3QvcGxheWJhY2svZ3N0cGxheWJpbi5jOiAoZ3N0X3BsYXlfYmluX2NsYXNzX2luaXQpOgorCSAgKiBnc3QvcGxheWJhY2svZ3N0cGxheWJpbjIuYzogKGdzdF9wbGF5X2Jpbl9jbGFzc19pbml0KToKKwkgICogZ3N0L3BsYXliYWNrL2dzdHBsYXlzaW5rLmM6IChnc3RfcGxheV9zaW5rX2NsYXNzX2luaXQpOgorCSAgKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6IChnc3RfcXVldWVfY2xhc3NfaW5pdCk6CisJICAqIGdzdC9wbGF5YmFjay9nc3RzdHJlYW1pbmZvLmM6IChnc3Rfc3RyZWFtX2luZm9fY2xhc3NfaW5pdCk6CisJICAqIGdzdC9wbGF5YmFjay9nc3RzdHJlYW1zZWxlY3Rvci5jOiAoZ3N0X3NlbGVjdG9yX3BhZF9jbGFzc19pbml0KSwKKwkgIChnc3Rfc3RyZWFtX3NlbGVjdG9yX2NsYXNzX2luaXQpOgorCSAgKiBnc3QvcGxheWJhY2svZ3N0dXJpZGVjb2RlYmluLmM6IChnc3RfdXJpX2RlY29kZV9iaW5fY2xhc3NfaW5pdCk6CisJICAqIGdzdC9zdWJwYXJzZS9nc3RzdWJwYXJzZS5jOiAoZ3N0X3N1Yl9wYXJzZV9jbGFzc19pbml0KToKKwkgICogZ3N0L3RjcC9nc3RtdWx0aWZkc2luay5jOiAoZ3N0X211bHRpX2ZkX3NpbmtfY2xhc3NfaW5pdCk6CisJICAqIGdzdC90Y3AvZ3N0dGNwY2xpZW50c2luay5jOiAoZ3N0X3RjcF9jbGllbnRfc2lua19jbGFzc19pbml0KToKKwkgICogZ3N0L3RjcC9nc3R0Y3BjbGllbnRzcmMuYzogKGdzdF90Y3BfY2xpZW50X3NyY19jbGFzc19pbml0KToKKwkgICogZ3N0L3RjcC9nc3R0Y3BzZXJ2ZXJzaW5rLmM6IChnc3RfdGNwX3NlcnZlcl9zaW5rX2NsYXNzX2luaXQpOgorCSAgKiBnc3QvdGNwL2dzdHRjcHNlcnZlcnNyYy5jOiAoZ3N0X3RjcF9zZXJ2ZXJfc3JjX2NsYXNzX2luaXQpOgorCSAgKiBnc3QvdmlkZW9yYXRlL2dzdHZpZGVvcmF0ZS5jOiAoZ3N0X3ZpZGVvX3JhdGVfY2xhc3NfaW5pdCk6CisJICAqIGdzdC92aWRlb3NjYWxlL2dzdHZpZGVvc2NhbGUuYzogKGdzdF92aWRlb19zY2FsZV9jbGFzc19pbml0KToKKwkgICogZ3N0L3ZpZGVvdGVzdHNyYy9nc3R2aWRlb3Rlc3RzcmMuYzoKKwkgIChnc3RfdmlkZW9fdGVzdF9zcmNfY2xhc3NfaW5pdCk6CisJICAqIGdzdC92b2x1bWUvZ3N0dm9sdW1lLmM6IChnc3Rfdm9sdW1lX2NsYXNzX2luaXQpOgorCSAgKiBzeXMvdjRsL2dzdHY0bGVsZW1lbnQuYzogKGdzdF92NGxlbGVtZW50X2NsYXNzX2luaXQpOgorCSAgKiBzeXMvdjRsL2dzdHY0bG1qcGVnc2luay5jOiAoZ3N0X3Y0bG1qcGVnc2lua19jbGFzc19pbml0KToKKwkgICogc3lzL3Y0bC9nc3R2NGxtanBlZ3NyYy5jOiAoZ3N0X3Y0bG1qcGVnc3JjX2NsYXNzX2luaXQpOgorCSAgKiBzeXMvdjRsL2dzdHY0bHNyYy5jOiAoZ3N0X3Y0bHNyY19jbGFzc19pbml0KToKKwkgICogc3lzL3hpbWFnZS94aW1hZ2VzaW5rLmM6IChnc3RfeGltYWdlc2lua19jbGFzc19pbml0KToKKwkgICogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuYzogKGdzdF94dmltYWdlc2lua19jbGFzc19pbml0KToKKwkgIFVzZSBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIGV2ZXJ5d2hlcmUgZm9yIEdQYXJhbVNwZWNzIHRoYXQgdXNlCisJICBzdGF0aWMgc3RyaW5ncyAoaS5lLiBhbGwpLiBUaGlzIGdpdmVzIHVzIGxlc3MgbWVtb3J5IHVzYWdlLAorCSAgZmV3ZXIgYWxsb2NhdGlvbnMgYW5kIHRodXMgbGVzcyBtZW1vcnkgZGVmcmFnbWVudGF0aW9uLiBEZXBlbmQKKwkgIG9uIGNvcmUgQ1ZTIGZvciB0aGlzLiBGaXhlcyBidWcgIzUyMzgwNi4KKworMjAwNy0xMi0xNCAxODo0NjoxMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOiBVc2Ugc2VwYXJhdGUgdGltZXJzIGZvciBpbnB1dCBhbmQgb3V0cHV0IHJhdGVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogKGdzdF9xdWV1ZV9pbml0KSwgKGdzdF9xdWV1ZV9maW5hbGl6ZSksCisJICAocmVzZXRfcmF0ZV90aW1lciksICh1cGRhdGVfaW5fcmF0ZXMpLCAodXBkYXRlX291dF9yYXRlcyksCisJICAoZ3N0X3F1ZXVlX2xvY2tlZF9lbnF1ZXVlKSwgKGdzdF9xdWV1ZV9sb2NrZWRfZGVxdWV1ZSksCisJICAoZ3N0X3F1ZXVlX2NoYWluKSwgKGdzdF9xdWV1ZV9sb29wKToKKwkgIFVzZSBzZXBhcmF0ZSB0aW1lcnMgZm9yIGlucHV0IGFuZCBvdXRwdXQgcmF0ZXMuCisJICBQYXVzZSBtZWFzdXJpbmcgdGhlIG91dHB1dCByYXRlIHdoZW4gd2UgYmxvY2sgZm9yIG1vcmUgZGF0YS4KKwkgIFNlZSAjNTAzMjYyLgorCisyMDA3LTEyLTE0IDA5OjI0OjU1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6IFBhdXNlIHRoZSB0aW1lciB0byBtZWFzdXJlIHRoZSBpbnB1dCByYXRlIHdoZW4gd2UgYmxvY2sgYmVjYXVzZSB0aGUgcXVldWUgaXMgZmlsbGVkLiBTZWUgIzUuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6IChnc3RfcXVldWVfY2hhaW4pOgorCSAgUGF1c2UgdGhlIHRpbWVyIHRvIG1lYXN1cmUgdGhlIGlucHV0IHJhdGUgd2hlbiB3ZSBibG9jayBiZWNhdXNlIHRoZQorCSAgcXVldWUgaXMgZmlsbGVkLiBTZWUgIzUwMzI2Mi4KKworMjAwNy0xMS0zMCAxNzo0NzoxNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L3BsYXliYWNrLzogUmVmYWN0b3Igc29tZSBjb21tb24gY29kZSB0byBmaWx0ZXIgZmFjdG9yaWVzIGFuZCBjaGVjayBjYXBzIGNvbXBhdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvcGxheWJhY2svTWFrZWZpbGUuYW06CisJICAqIGdzdC9wbGF5YmFjay9nc3RmYWN0b3J5bGlzdHMuYzogKGNvbXBhcmVfcmFua3MpLCAocHJpbnRfZmVhdHVyZSksCisJICAoZ2V0X2ZlYXR1cmVfYXJyYXkpLCAoZGVjb2RlcnNfZmlsdGVyKSwgKHNpbmtzX2ZpbHRlciksCisJICAoZ3N0X2ZhY3RvcnlfbGlzdF9nZXRfZGVjb2RlcnMpLCAoZ3N0X2ZhY3RvcnlfbGlzdF9nZXRfc2lua3MpLAorCSAgKGdzdF9mYWN0b3J5X2xpc3RfZmlsdGVyKToKKwkgICogZ3N0L3BsYXliYWNrL2dzdGZhY3RvcnlsaXN0cy5oOgorCSAgUmVmYWN0b3Igc29tZSBjb21tb24gY29kZSB0byBmaWx0ZXIgZmFjdG9yaWVzIGFuZCBjaGVjayBjYXBzIGNvbXBhdC4KKwkgICogZ3N0L3BsYXliYWNrL2dzdGRlY29kZWJpbi5jOgorCSAgKiBnc3QvcGxheWJhY2svZ3N0ZGVjb2RlYmluMi5jOiAoZ3N0X2RlY29kZV9iaW5fY2xhc3NfaW5pdCksCisJICAoZ3N0X2RlY29kZV9iaW5faW5pdCksIChnc3RfZGVjb2RlX2Jpbl9kaXNwb3NlKSwKKwkgIChnc3RfZGVjb2RlX2Jpbl9hdXRvcGx1Z19jb250aW51ZSksCisJICAoZ3N0X2RlY29kZV9iaW5fYXV0b3BsdWdfZmFjdG9yaWVzKSwKKwkgIChnc3RfZGVjb2RlX2Jpbl9hdXRvcGx1Z19zZWxlY3QpLCAoYW5hbHl6ZV9uZXdfcGFkKSwKKwkgIChmaW5kX2NvbXBhdGlibGVzKToKKwkgICogZ3N0L3BsYXliYWNrL2dzdHBsYXliaW4uYzoKKwkgICogZ3N0L3BsYXliYWNrL2dzdHBsYXliaW4yLmM6IChnc3RfcGxheV9iaW5fY2xhc3NfaW5pdCksCisJICAoZ3N0X3BsYXlfYmluX2luaXQpLCAoZ3N0X3BsYXlfYmluX2ZpbmFsaXplKSwKKwkgIChhdXRvcGx1Z19mYWN0b3JpZXNfY2IpLCAoYWN0aXZhdGVfZ3JvdXApOgorCSAgKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6CisJICAqIGdzdC9wbGF5YmFjay9nc3R1cmlkZWNvZGViaW4uYzogKHByb3h5X3Vua25vd25fdHlwZV9zaWduYWwpLAorCSAgKHByb3h5X2F1dG9wbHVnX2NvbnRpbnVlX3NpZ25hbCksCisJICAocHJveHlfYXV0b3BsdWdfZmFjdG9yaWVzX3NpZ25hbCksIChwcm94eV9hdXRvcGx1Z19zZWxlY3Rfc2lnbmFsKSwKKwkgIChwcm94eV9kcmFpbmVkX3NpZ25hbCk6CisJICBBZGQgc29tZSBtb3JlIGRlYnVnIGluZm8gYW5kIHVzZSBmYWN0b3IgZmlsdGVyaW5nIGNvZGUuCisKKzIwMDctMTEtMTYgMTU6NDQ6NDggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9wbGF5YmFjay86IEFkZCBwbGF5YmluMi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvcGxheWJhY2svTWFrZWZpbGUuYW06CisJICAqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFjay5jOiAocGx1Z2luX2luaXQpOgorCSAgKiBnc3QvcGxheWJhY2svdGVzdDcuYzogKHVwZGF0ZV9zY2FsZSksICh3YXJuaW5nX2NiKSwgKGVycm9yX2NiKSwKKwkgIChlb3NfY2IpLCAoYWJvdXRfdG9fZmluaXNoX2NiKSwgKG1haW4pOgorCSAgQWRkIHBsYXliaW4yLgorCSAgQWRkZWQgZ2FwbGVzcyBwbGF5YmFjayBleGFtcGxlLgorCSAgKiBnc3QvcGxheWJhY2svZ3N0cGxheWJhc2ViaW4uYzoKKwkgICogZ3N0L3BsYXliYWNrL2dzdHBsYXliYXNlYmluLmg6CisJICAqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmluLmM6IChnc3RfcGxheV9iaW5fcGx1Z2luX2luaXQpOgorCSAgKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6CisJICAqIGdzdC9wbGF5YmFjay90ZXN0LmM6CisJICAqIGdzdC9wbGF5YmFjay9nc3R1cmlkZWNvZGViaW4uYzogKGdzdF91cmlfZGVjb2RlX2Jpbl9jbGFzc19pbml0KSwKKwkgIChwYWRfcmVtb3ZlZF9jYik6CisJICAqIGdzdC9wbGF5YmFjay9nc3RzdHJlYW1pbmZvLmg6CisJICBDaGFuZ2UgZW1haWwuCisJICAqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmluMi5jOiAoZ3N0X3BsYXlfYmluX2dldF90eXBlKSwKKwkgIChnc3RfcGxheV9iaW5fY2xhc3NfaW5pdCksIChpbml0X2dyb3VwKSwgKGdzdF9wbGF5X2Jpbl9pbml0KSwKKwkgIChnc3RfcGxheV9iaW5fZGlzcG9zZSksIChnc3RfcGxheV9iaW5fc2V0X3VyaSksCisJICAoZ3N0X3BsYXlfYmluX3NldF9zdWJ1cmkpLCAoZ3N0X3BsYXlfYmluX3NldF9wcm9wZXJ0eSksCisJICAoZ3N0X3BsYXlfYmluX2dldF9wcm9wZXJ0eSksIChnc3RfcGxheV9iaW5faGFuZGxlX21lc3NhZ2UpLAorCSAgKHBhZF9hZGRlZF9jYiksIChwYWRfcmVtb3ZlZF9jYiksIChub19tb3JlX3BhZHNfY2IpLCAocGVyZm9ybV9lb3MpLAorCSAgKGRyYWluZWRfY2IpLCAodW5saW5rX2dyb3VwKSwgKGFjdGl2YXRlX2dyb3VwKSwKKwkgIChzZXR1cF9uZXh0X3NvdXJjZSksIChnc3RfcGxheV9iaW5fY2hhbmdlX3N0YXRlKSwKKwkgIChnc3RfcGxheV9iaW4yX3BsdWdpbl9pbml0KToKKwkgIEFkZGVkIHJhdyBmaXJzdCB2ZXJzaW9uIG9mIHBsYXliaW4yLiBEb2VzIGNoYWluZWQgb2dncyBhbmQgZ2FwbGVzcworCSAgcGxheWJhY2sgZmluZS4gTm8gc3VwcG9ydCBmb3IgcmF3IHNpbmtzIHlldC4gTm8gdmlzdWFsaXNhdGlvbnMgb3IKKwkgIHN1YnRpdGxlcyB5ZXQuCisJICAqIGdzdC9wbGF5YmFjay9nc3RwbGF5c2luay5jOiAoZ3N0X3BsYXlfc2lua19nZXRfdHlwZSksCisJICAoZ3N0X3BsYXlfc2lua19jbGFzc19pbml0KSwgKGdzdF9wbGF5X3NpbmtfaW5pdCksCisJICAoZ3N0X3BsYXlfc2lua19kaXNwb3NlKSwgKGdzdF9wbGF5X3NpbmtfdmlzX3VuYmxvY2tlZCksCisJICAoZ3N0X3BsYXlfc2lua192aXNfYmxvY2tlZCksIChnc3RfcGxheV9zaW5rX3NldF92aWRlb19zaW5rKSwKKwkgIChnc3RfcGxheV9zaW5rX3NldF9hdWRpb19zaW5rKSwgKGdzdF9wbGF5X3Npbmtfc2V0X3Zpc19wbHVnaW4pLAorCSAgKGdzdF9wbGF5X3Npbmtfc2V0X3Byb3BlcnR5KSwgKGdzdF9wbGF5X3NpbmtfZ2V0X3Byb3BlcnR5KSwKKwkgIChwb3N0X21pc3NpbmdfZWxlbWVudF9tZXNzYWdlKSwgKGZyZWVfY2hhaW4pLCAoYWRkX2NoYWluKSwKKwkgIChhY3RpdmF0ZV9jaGFpbiksIChnZW5fdmlkZW9fY2hhaW4pLCAoZ2VuX3RleHRfZWxlbWVudCksCisJICAoZ2VuX2F1ZGlvX2NoYWluKSwgKGdlbl92aXNfZWxlbWVudCksIChnc3RfcGxheV9zaW5rX2dldF9tb2RlKSwKKwkgIChnc3RfcGxheV9zaW5rX3NldF9tb2RlKSwgKGdzdF9wbGF5X3NpbmtfcmVxdWVzdF9wYWQpLAorCSAgKGdzdF9wbGF5X3NpbmtfcmVsZWFzZV9wYWQpLCAoZ3N0X3BsYXlfc2lua19zZW5kX2V2ZW50X3RvX3NpbmspLAorCSAgKGdzdF9wbGF5X3Npbmtfc2VuZF9ldmVudCksIChnc3RfcGxheV9zaW5rX2NoYW5nZV9zdGF0ZSk6CisJICAqIGdzdC9wbGF5YmFjay9nc3RwbGF5c2luay5oOgorCSAgQWRkZWQgRWxlbWVudCB0aGF0IGFic3RyYWN0cyB0aGUgc2lua3MgYW5kIHRoZWlyIHBpcGVsaW5lcyBmb3IgcGxheWJpbjIuCisKKzIwMDctMTAtMTUgMTE6Mzg6MzkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogRml4IHF1ZXVlIG5lZ290aWF0aW9uLiBTZWUgIzQ4Njc1OC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6IChnc3RfcXVldWVfaW5pdCksIChnc3RfcXVldWVfcHVzaF9vbmUpOgorCSAgRml4IHF1ZXVlIG5lZ290aWF0aW9uLiBTZWUgIzQ4Njc1OC4KKworMjAwNy0wOS0yMSAxNDozNzoyNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOiBGaXggY29tcGlsYXRpb24gd3J0IHByaW50ZiBhcmd1bWVudHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOiAoZ3N0X3F1ZXVlX3B1c2hfb25lKToKKwkgIEZpeCBjb21waWxhdGlvbiB3cnQgcHJpbnRmIGFyZ3VtZW50cy4KKworMjAwNy0wOS0xNyAxNzoyNDo1NSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIEZpeCBhIGJ1bmNoIG9mIGNvbXBpbGUgd2FybmluZ3Mgc2hvd24gd2l0aCBGb3J0ZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBleHQvcGFuZ28vZ3N0dGV4dG92ZXJsYXkuYzogKGdzdF90ZXh0X292ZXJsYXlfaW5pdCksCisJICAoZ3N0X3RleHRfb3ZlcmxheV9zZXRfcHJvcGVydHkpOgorCSAgKiBleHQvdm9yYmlzL3ZvcmJpc2RlYy5jOiAodm9yYmlzX2hhbmRsZV9kYXRhX3BhY2tldCk6CisJICAqIGdzdC1saWJzL2dzdC9hdWRpby9nc3RiYXNlYXVkaW9zaW5rLmM6CisJICAoZ3N0X2Jhc2VfYXVkaW9fc2lua19yZW5kZXIpOgorCSAgKiBnc3QtbGlicy9nc3QvcnRwL2dzdHJ0Y3BidWZmZXIuYzogKGdzdF9ydGNwX250cF90b191bml4KSwKKwkgIChnc3RfcnRjcF91bml4X3RvX250cCk6CisJICAqIGdzdC1saWJzL2dzdC9ydHNwL2dzdHJ0c3BtZXNzYWdlLmM6IChnc3RfcnRzcF9tZXNzYWdlX2dldF90eXBlKToKKwkgICogZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOgorCSAgKiB0ZXN0cy9leGFtcGxlcy9zZWVrL3NlZWsuYzogKHNldF9zY2FsZSk6CisJICBGaXggYSBidW5jaCBvZiBjb21waWxlIHdhcm5pbmdzIHNob3duIHdpdGggRm9ydGUuCisJICAqIGdzdC9hdWRpb3JhdGUvZ3N0YXVkaW9yYXRlLmM6CisJICBBbHdheXMgcHVsbCBpbiBjb25maWcuaCBiZWZvcmUgaW5jbHVkaW5nIGFueSBzeXN0ZW0gaGVhZGVycy4KKworMjAwNy0wOS0xNyAxNjoyMjoxNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOiBBbHNvIGZpeCAjNDc2NTE0IGZvciBxdWV1ZTIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOiAodXBkYXRlX2J1ZmZlcmluZyksCisJICAoZ3N0X3F1ZXVlX2xvY2tlZF9mbHVzaCksIChnc3RfcXVldWVfbG9ja2VkX2VucXVldWUpLAorCSAgKGdzdF9xdWV1ZV9oYW5kbGVfc2lua19ldmVudCksIChnc3RfcXVldWVfY2hhaW4pLAorCSAgKGdzdF9xdWV1ZV9wdXNoX29uZSksIChnc3RfcXVldWVfc2lua19hY3RpdmF0ZV9wdXNoKSwKKwkgIChnc3RfcXVldWVfc3JjX2FjdGl2YXRlX3B1c2gpLCAoZ3N0X3F1ZXVlX3NyY19hY3RpdmF0ZV9wdWxsKToKKwkgIEFsc28gZml4ICM0NzY1MTQgZm9yIHF1ZXVlMi4KKworMjAwNy0wOC0xMCAxMDowODowNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0LzogUHJpbnRmIGZvcm1hdCBmaXhlcyAoIzQ2NTAyOCkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOgorCSAgKiBnc3QvdmlkZW9yYXRlL2dzdHZpZGVvcmF0ZS5jOgorCSAgUHJpbnRmIGZvcm1hdCBmaXhlcyAoIzQ2NTAyOCkuCisKKzIwMDctMDYtMjggMTE6MDY6NTYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogVXNlIG90aGVyIG1ldHJpY3MgYXMgd2VsbCB3aGVuIGVzdGltYXRpbmcgdGhlIGJ1ZmZlciBsZXZlbC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6IChhcHBseV9zZWdtZW50KSwgKHVwZGF0ZV9idWZmZXJpbmcpOgorCSAgVXNlIG90aGVyIG1ldHJpY3MgYXMgd2VsbCB3aGVuIGVzdGltYXRpbmcgdGhlIGJ1ZmZlciBsZXZlbC4KKworMjAwNy0wNi0yOCAxMDoyMToxOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L3BsYXliYWNrL2dzdHBsYXliYXNlYmluLmM6IFNtYWxsIGRlYnVnIGltcHJvdmVtZW50LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5jOiAobWFrZV9kZWNvZGVyKSwgKHNldHVwX3NvdXJjZSk6CisJICBTbWFsbCBkZWJ1ZyBpbXByb3ZlbWVudC4KKwkgICogZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOiAoYXBwbHlfc2VnbWVudCksICh1cGRhdGVfYnVmZmVyaW5nKSwKKwkgIChwbHVnaW5faW5pdCk6CisJICBUd2VhayB0aGUgcmF0ZSBlc3RpbWF0aW9uIHBlcmlvZC4KKwkgIFdoZW4gY2FsY3VsYXRpbmcgdGhlIGJ1ZmZlciBmaWxsZWRuZXNzIGluIHJhdGUgZXN0aW1hdGlvbiBtb2RlLCBkb24ndAorCSAgbWl4IGl0IHdpdGggb3RoZXIgbWV0cmljcy4KKworMjAwNy0wNi0xNiAwMzo0MjoxNCArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkgIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogRml4IGNvbXBpbGUgZXJyb3IgZnJvbSBpZ25vcmVkIHJldHVybiB2YWx1ZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6CisJICBGaXggY29tcGlsZSBlcnJvciBmcm9tIGlnbm9yZWQgcmV0dXJuIHZhbHVlLgorCisyMDA3LTA2LTEzIDE4OjIwOjU3ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6IEZpeCBidWlsZCBvbiBNYWNPU1guCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOiAoZ3N0X3F1ZXVlX2NyZWF0ZV9yZWFkKToKKwkgIEZpeCBidWlsZCBvbiBNYWNPU1guCisKKzIwMDctMDYtMTIgMDg6Mzg6MDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogRml4IGEgZGl2aXNpb24gYnkgemVybyB3aGVuIHRoZSBtYXggcGVyY2VudCBpcyA8PSAwLiBGaXhlcyAjNDQ2NTcyLiBhbHNvIHVwZGF0ZSB0aGUgYnVmZmVyaS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaGVzIGJ5OiBUaGlhZ28gU291c2EgU2FudG9zIDx0aGlhZ29zc2FudG9zIGF0IGdtYWlsIGRvdCBjb20+CisJICAqIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogKHVwZGF0ZV9idWZmZXJpbmcpLAorCSAgKGdzdF9xdWV1ZV9sb2NrZWRfZW5xdWV1ZSk6CisJICBGaXggYSBkaXZpc2lvbiBieSB6ZXJvIHdoZW4gdGhlIG1heCBwZXJjZW50IGlzIDw9IDAuIEZpeGVzICM0NDY1NzIuCisJICBhbHNvIHVwZGF0ZSB0aGUgYnVmZmVyaW5nIHN0YXR1cyB3aGVuIHJlY2VpdmluZyBldmVudHMuIEZpeGVzICM0NDY1NTEuCisKKzIwMDctMDYtMTEgMTE6MzI6MjYgKzAwMDAgIFRoaWFnbyBTb3VzYSBTYW50b3MgPHRoaWFnb3NzYW50b3NAZ21haWwuY29tPgorCisJICBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6IFdhaXQgZm9yIHByZXJvbGwgYmVmb3JlIGF0dGVtcHRpbmcgdG8gZm9yd2FyZCBhIGR1cmF0aW9uIHF1ZXJ5IHVwc3RyZWFtLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBCYXNlZCBvbiBwYXRjaCBieTogVGhpYWdvIFNvdXNhIFNhbnRvcyA8dGhpYWdvc3NhbnRvcyBhdCBnbWFpbCBkb3QgY29tPgorCSAgKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6IChnc3RfcXVldWVfcGVlcl9xdWVyeSksCisJICAoZ3N0X3F1ZXVlX2hhbmRsZV9zcmNfcXVlcnkpOgorCSAgV2FpdCBmb3IgcHJlcm9sbCBiZWZvcmUgYXR0ZW1wdGluZyB0byBmb3J3YXJkIGEgZHVyYXRpb24gcXVlcnkgdXBzdHJlYW0uCisJICBGaXhlcyAjNDQ1NTA1LgorCisyMDA3LTA2LTA3IDA5OjExOjI3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6IEZpeCBjb21waWxhdGlvbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6IChnc3RfcXVldWVfZ2V0X3JhbmdlKToKKwkgIEZpeCBjb21waWxhdGlvbi4KKworMjAwNy0wNi0wNiAxMzozNjoyNiArMDAwMCAgVGhpYWdvIFNvdXNhIFNhbnRvcyA8dGhpYWdvc3NhbnRvc0BnbWFpbC5jb20+CisKKwkgIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogQWRkIHB1bGwgYmFzZWQgc2NoZWR1bGluZyBhbmQgZml4IHNvbWUgZGVhZGxvY2tzLiBGaXhlcyAjNDQ0NTIzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogVGhpYWdvIFNvdXNhIFNhbnRvcyA8dGhpYWdvc3NhbnRvcyBhdCBnbWFpbCBkb3QgY29tPgorCSAgKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6IChnc3RfcXVldWVfaW5pdCksCisJICAoZ3N0X3F1ZXVlX2hhbmRsZV9zaW5rX2V2ZW50KSwgKGdzdF9xdWV1ZV9jaGFpbiksCisJICAoZ3N0X3F1ZXVlX2dldF9yYW5nZSksIChnc3RfcXVldWVfc3JjX2NoZWNrZ2V0cmFuZ2VfZnVuY3Rpb24pLAorCSAgKGdzdF9xdWV1ZV9zaW5rX2FjdGl2YXRlX3B1c2gpLCAoZ3N0X3F1ZXVlX3NyY19hY3RpdmF0ZV9wdXNoKSwKKwkgIChnc3RfcXVldWVfc3JjX2FjdGl2YXRlX3B1bGwpOgorCSAgQWRkIHB1bGwgYmFzZWQgc2NoZWR1bGluZyBhbmQgZml4IHNvbWUgZGVhZGxvY2tzLiBGaXhlcyAjNDQ0NTIzLgorCSAgRG9lcyBub3QgeWV0IGNvbXBsZXRlbHkgd29yayBiZWNhdXNlIGR1cmF0aW9uIHF1ZXJpZXMgdXBzdHJlYW0gd29uJ3QKKwkgIGJsb2NrIHlldC4KKworMjAwNy0wNi0wNiAwOTowODo1MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgU29tZSBtb3JlIGZzZWVrbyBjaGVja3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6IChnc3RfcXVldWVfY3JlYXRlX3JlYWQpOgorCSAgU29tZSBtb3JlIGZzZWVrbyBjaGVja3MuCisKKzIwMDctMDYtMDUgMTc6MDI6MTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogSW5jbHVkZSBzdGRpbyB0byBkZWZpbmUgZnNlZWtvLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogKGdzdF9xdWV1ZV9oYXZlX2RhdGEpLAorCSAgKGdzdF9xdWV1ZV9jcmVhdGVfcmVhZCksIChnc3RfcXVldWVfcmVhZF9pdGVtX2Zyb21fZmlsZSksCisJICAoZ3N0X3F1ZXVlX29wZW5fdGVtcF9sb2NhdGlvbl9maWxlKSwgKGdzdF9xdWV1ZV9sb2NrZWRfZW5xdWV1ZSk6CisJICBJbmNsdWRlIHN0ZGlvIHRvIGRlZmluZSBmc2Vla28uCisKKzIwMDctMDYtMDUgMTY6MTQ6MjMgKzAwMDAgIFRoaWFnbyBTb3VzYSBTYW50b3MgPHRoaWFnb3NzYW50b3NAZ21haWwuY29tPgorCisJICBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6IEFkZCBzdXBwb3J0IGZvciBmaWxlYmFzZWQgYnVmZmVyaW5nLiBGaXhlcyAjNDQxMjY0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBCYXNlZCBvbiBwYXRjaCBieTogVGhpYWdvIFNvdXNhIFNhbnRvcyA8dGhpYWdvc3NhbnRvcyBhdCBnbWFpbCBkb3QgY29tPgorCSAgKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6IChnc3RfcXVldWVfY2xhc3NfaW5pdCksCisJICAoZ3N0X3F1ZXVlX2luaXQpLCAoZ3N0X3F1ZXVlX2ZpbmFsaXplKSwKKwkgIChnc3RfcXVldWVfd3JpdGVfYnVmZmVyX3RvX2ZpbGUpLCAoZ3N0X3F1ZXVlX2hhdmVfZGF0YSksCisJICAoZ3N0X3F1ZXVlX2NyZWF0ZV9yZWFkKSwgKGdzdF9xdWV1ZV9yZWFkX2l0ZW1fZnJvbV9maWxlKSwKKwkgIChnc3RfcXVldWVfb3Blbl90ZW1wX2xvY2F0aW9uX2ZpbGUpLAorCSAgKGdzdF9xdWV1ZV9jbG9zZV90ZW1wX2xvY2F0aW9uX2ZpbGUpLCAoZ3N0X3F1ZXVlX2xvY2tlZF9mbHVzaCksCisJICAoZ3N0X3F1ZXVlX2xvY2tlZF9lbnF1ZXVlKSwgKGdzdF9xdWV1ZV9sb2NrZWRfZGVxdWV1ZSksCisJICAoZ3N0X3F1ZXVlX2lzX2VtcHR5KSwgKGdzdF9xdWV1ZV9pc19maWxsZWQpLAorCSAgKGdzdF9xdWV1ZV9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X3F1ZXVlX3NldF90ZW1wX2xvY2F0aW9uKSwKKwkgIChnc3RfcXVldWVfc2V0X3Byb3BlcnR5KToKKwkgIEFkZCBzdXBwb3J0IGZvciBmaWxlYmFzZWQgYnVmZmVyaW5nLiBGaXhlcyAjNDQxMjY0LgorCisyMDA3LTA1LTE3IDE1OjIyOjQ0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6IFR3ZWFrIHRoZSBidWZmZXJpbmcgdGhyZXNob2xkcyBhIGxpdHRsZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6ICh1cGRhdGVfcmF0ZXMpOgorCSAgVHdlYWsgdGhlIGJ1ZmZlcmluZyB0aHJlc2hvbGRzIGEgbGl0dGxlLgorCSAgVXBkYXRlIHRoZSBidWZmZXIgc2l6ZSB3aXRoIHRoZSBwcmV2aW91c2x5IGNhbGN1bGF0ZSByYXRlIGluc3RlYWQgb2YKKwkgIG9ubHkgd2hlbiB3ZSBjYWxjdWxhdGUgYSBuZXcgcmF0ZSBzbyB0aGF0IHdlIGdldCBzbW9vdGhlciBidWZmZXJpbmcKKwkgIHVwZGF0ZXMuCisJICAqIGdzdC9wbGF5YmFjay9NYWtlZmlsZS5hbToKKwkgICogZ3N0L3BsYXliYWNrL2dzdHVyaWRlY29kZWJpbi5jOiAoZ3N0X3VyaV9kZWNvZGVfYmluX2Jhc2VfaW5pdCksCisJICAoZ3N0X3VyaV9kZWNvZGVfYmluX2NsYXNzX2luaXQpLCAoZ3N0X3VyaV9kZWNvZGVfYmluX2luaXQpLAorCSAgKGdzdF91cmlfZGVjb2RlX2Jpbl9maW5hbGl6ZSksIChnc3RfdXJpX2RlY29kZV9iaW5fc2V0X3Byb3BlcnR5KSwKKwkgIChnc3RfdXJpX2RlY29kZV9iaW5fZ2V0X3Byb3BlcnR5KSwgKHVua25vd25fdHlwZSksCisJICAoYWRkX2VsZW1lbnRfc3RyZWFtKSwgKG5vX21vcmVfcGFkc19mdWxsKSwgKG5vX21vcmVfcGFkcyksCisJICAoc291cmNlX25vX21vcmVfcGFkcyksIChuZXdfZGVjb2RlZF9wYWQpLCAoYXJyYXlfaGFzX3ZhbHVlKSwKKwkgIChnZW5fc291cmNlX2VsZW1lbnQpLCAoaGFzX2FsbF9yYXdfY2FwcyksIChhbmFseXNlX3NvdXJjZSksCisJICAocmVtb3ZlX2RlY29kZXJzKSwgKG1ha2VfZGVjb2RlciksIChyZW1vdmVfc291cmNlKSwKKwkgIChzb3VyY2VfbmV3X3BhZCksIChzZXR1cF9zb3VyY2UpLCAoZGVjb2Rlcl9xdWVyeV9pbml0KSwKKwkgIChkZWNvZGVyX3F1ZXJ5X2R1cmF0aW9uX2ZvbGQpLCAoZGVjb2Rlcl9xdWVyeV9kdXJhdGlvbl9kb25lKSwKKwkgIChkZWNvZGVyX3F1ZXJ5X3Bvc2l0aW9uX2ZvbGQpLCAoZGVjb2Rlcl9xdWVyeV9wb3NpdGlvbl9kb25lKSwKKwkgIChkZWNvZGVyX3F1ZXJ5X2xhdGVuY3lfZm9sZCksIChkZWNvZGVyX3F1ZXJ5X2xhdGVuY3lfZG9uZSksCisJICAoZGVjb2Rlcl9xdWVyeV9zZWVraW5nX2ZvbGQpLCAoZGVjb2Rlcl9xdWVyeV9zZWVraW5nX2RvbmUpLAorCSAgKGRlY29kZXJfcXVlcnlfZ2VuZXJpY19mb2xkKSwgKGdzdF91cmlfZGVjb2RlX2Jpbl9xdWVyeSksCisJICAoZ3N0X3VyaV9kZWNvZGVfYmluX2NoYW5nZV9zdGF0ZSksIChwbHVnaW5faW5pdCk6CisJICBOZXcgZWxlbWVudCB0aGF0IGludGVyZ3JhdGVzIGEgc291cmNlLCBvcHRpb25hbCBidWZmZXJpbmcgZWxlbWVudCBhbmQKKwkgIGRlY29kZWJpbi4KKworMjAwNy0wNS0xNyAxMzozNjoxMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOiBmaXggYnVpbGQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOiAoZ3N0X3F1ZXVlX2dldF90eXBlKSwKKwkgIChnc3RfcXVldWVfY2xhc3NfaW5pdCksIChnc3RfcXVldWVfZmluYWxpemUpLCAodXBkYXRlX3RpbWVfbGV2ZWwpLAorCSAgKGFwcGx5X3NlZ21lbnQpLCAoYXBwbHlfYnVmZmVyKSwgKHVwZGF0ZV9idWZmZXJpbmcpLAorCSAgKHJlc2V0X3JhdGVfdGltZXIpLCAodXBkYXRlX3JhdGVzKSwgKGdzdF9xdWV1ZV9sb2NrZWRfZmx1c2gpLAorCSAgKGdzdF9xdWV1ZV9sb2NrZWRfZW5xdWV1ZSksIChnc3RfcXVldWVfbG9ja2VkX2RlcXVldWUpLAorCSAgKGdzdF9xdWV1ZV9oYW5kbGVfc2lua19ldmVudCksIChnc3RfcXVldWVfaXNfZmlsbGVkKSwKKwkgIChnc3RfcXVldWVfY2hhaW4pLCAoZ3N0X3F1ZXVlX3B1c2hfb25lKSwgKGdzdF9xdWV1ZV9sb29wKSwKKwkgIChwbHVnaW5faW5pdCk6CisJICBmaXggYnVpbGQuCisKKzIwMDctMDUtMTcgMTE6NTc6NDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9wbGF5YmFjay86IE9uIG91ciB3YXkgdG8gcGxheWJpbjIgdGhpcyBpcyB0aGUgbmV3IG5ldHdvcmsgcXVldWUgdGhhdCBkb2VzIGJ1ZmZlcmluZyBhbGwgYnkgaXRzZWxmIHVzaW5nIGhpZ2ggYW5kIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9wbGF5YmFjay9NYWtlZmlsZS5hbToKKwkgICogZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOiAoZ3N0X3F1ZXVlX2dldF90eXBlKSwKKwkgIChnc3RfcXVldWVfY2xhc3NfaW5pdCksIChnc3RfcXVldWVfaW5pdCksIChnc3RfcXVldWVfZmluYWxpemUpLAorCSAgKGdzdF9xdWV1ZV9nZXRjYXBzKSwgKGdzdF9xdWV1ZV9idWZmZXJhbGxvYyksCisJICAoZ3N0X3F1ZXVlX2FjY2VwdGNhcHMpLCAodXBkYXRlX3RpbWVfbGV2ZWwpLCAoYXBwbHlfc2VnbWVudCksCisJICAoYXBwbHlfYnVmZmVyKSwgKHVwZGF0ZV9idWZmZXJpbmcpLCAocmVzZXRfcmF0ZV90aW1lciksCisJICAodXBkYXRlX3JhdGVzKSwgKGdzdF9xdWV1ZV9sb2NrZWRfZmx1c2gpLAorCSAgKGdzdF9xdWV1ZV9sb2NrZWRfZW5xdWV1ZSksIChnc3RfcXVldWVfbG9ja2VkX2RlcXVldWUpLAorCSAgKGdzdF9xdWV1ZV9oYW5kbGVfc2lua19ldmVudCksIChnc3RfcXVldWVfaXNfZW1wdHkpLAorCSAgKGdzdF9xdWV1ZV9pc19maWxsZWQpLCAoZ3N0X3F1ZXVlX2NoYWluKSwgKGdzdF9xdWV1ZV9wdXNoX29uZSksCisJICAoZ3N0X3F1ZXVlX2xvb3ApLCAoZ3N0X3F1ZXVlX2hhbmRsZV9zcmNfZXZlbnQpLAorCSAgKGdzdF9xdWV1ZV9oYW5kbGVfc3JjX3F1ZXJ5KSwgKGdzdF9xdWV1ZV9zaW5rX2FjdGl2YXRlX3B1c2gpLAorCSAgKGdzdF9xdWV1ZV9zcmNfYWN0aXZhdGVfcHVzaCksIChnc3RfcXVldWVfY2hhbmdlX3N0YXRlKSwKKwkgIChnc3RfcXVldWVfc2V0X3Byb3BlcnR5KSwgKGdzdF9xdWV1ZV9nZXRfcHJvcGVydHkpLCAocGx1Z2luX2luaXQpOgorCSAgT24gb3VyIHdheSB0byBwbGF5YmluMiB0aGlzIGlzIHRoZSBuZXcgbmV0d29yayBxdWV1ZSB0aGF0IGRvZXMgYnVmZmVyaW5nCisJICBhbGwgYnkgaXRzZWxmIHVzaW5nIGhpZ2ggYW5kIGxvdyB3YXRlcm1hcmtzLiBJdCBjYW4gYWxzbyBtZWFzdXJlIHVwIGFuZAorCSAgZG93bnN0cmVhbSBiYW5kd2lkdGggdG8gb3B0aW1hbGx5IHNpemUgdGhlIHF1ZXVlLgorCisyMDA5LTEwLTI4IDIyOjAzOjQ0IC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSogZ3N0L3BhcnNlL2dyYW1tYXIueToKKwkgIHBhcnNlOiBGaXggbWVtbGVhayBvZiB1bnVzZWQgZGVsYXllZCBsaW5rcworCSAgQXR0YWNoIHRoZSBEZWxheWVkTGluayBzdHJ1Y3R1cmUgdG8gdGhlIGVsZW1lbnQsIHNvIHRoYXQgd2hlbgorCSAgdGhlIGVsZW1lbnQgaXMgZGlzcG9zZWQsIHRoZSBEZWxheWVkTGluayBpcyBmcmVlZC4KKworMjAwOS0wOS0wOSAxNTozNzoxMSAtMDUwMCAgUm9iIENsYXJrIDxyb2JAdGkuY29tPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBwYWQ6IG1ha2UgX2ZpeGF0ZV9jYXBzKCkgYWxzbyB0cnVuY2F0ZSB3aGVuIG5lZWRlZAorCSAgVGhlIGRlZmF1bHQgZ3N0X3BhZF9maXhhdGVfY2FwcygpIHByZXZpb3VzbHkgd291bGQgb25seSBmaXhhdGUgZWFjaCBpbmRpdmlkdWFsCisJICBzdHJ1Y3QuIEluIGNhc2UgdGhlcmUgYXJlIG11bHRpcGxlIHN0cnVjdHMsIHRoZSByZXN1bHRpbmcgY2FwcyB3b3VsZCBzdGlsbCBub3QKKwkgIGJlIGZpeGVkLiBJbiB0aGUgc3Bpcml0IG9mIGhvdyBpbmRpdmlkdWFsIHN0cnVjdHMgYXJlIGZpeGF0ZWQsIHRoaXMgcGF0Y2gKKwkgIGNoYW5nZXMgZ3N0X3BhZF9maXhhdGVfY2FwcygpIHRvIHJlbW92ZSBhbGwgYnV0IHRoZSBmaXJzdCBzdHJ1Y3QuCisJICBGaXhlcyAjNTk1ODg2CisKKzIwMDktMDktMjEgMTE6NDQ6MTMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RpbmZvLmg6CisJICBpbmZvOiBmaXggZG9jcworCisyMDA5LTEwLTI4IDA5OjI2OjMyICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0YnVzLmM6CisJKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKKwkqIGdzdC9nc3RpbmRleC5jOgorCSogZ3N0L2dzdGluZGV4ZmFjdG9yeS5jOgorCSogZ3N0L2dzdG9iamVjdC5jOgorCSogZ3N0L2dzdHBsdWdpbi5jOgorCSogZ3N0L2dzdHBsdWdpbmxvYWRlci5jOgorCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6CisJKiBnc3QvZ3N0cmVnaXN0cnljaHVua3MuYzoKKwkqIGdzdC9nc3R0YXNrLmM6CisJKiBnc3QvZ3N0dGFza3Bvb2wuYzoKKwkqIGdzdC9nc3R0eXBlZmluZC5jOgorCSogZ3N0L2dzdHhtbC5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5jOgorCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmM6CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuYzoKKwkgIG9wdGltaXNhdGlvbiA6IFVzZSBnX29iamVjdF9uZXd2IHdoZXJlIHBvc3NpYmxlLgorCSAgVGhpcyBhdm9pZHM6CisJICAqIHRyaXBsZS1jaGVja2luZyBmb3IgdGhlIEdUeXBlIHdoZW4gdHlwZS1jaGVja2luZyBpcyBlbmFibGVkIChzZWUgIzU5NzI2MCkKKwkgICogQXZvaWRzIGdvaW5nIHRocm91Z2ggYW4gZXhwZW5zaXZlIG5vLWFyZ3VtZW50IGNoZWNraW5nIHdoaWNoIGxhbmRlZCBpbgorCSAgZ2xpYi0yLjIyCisJICAqIEF2b2lkcyBnb2luZyB0aHJvdWdoIDIgZXh0cmFjIGZ1bmN0aW9ucyAoZ19vYmplY3RfbmV3IC0+IGdfb2JqZWN0X25ld192YWxpc3QpCisKKzIwMDktMTAtMjggMTA6MTU6MTIgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKKwkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1kb2NzLnNnbWw6CisJICBkb2NzOiBpbmNsdWRlIGFubm90YXRpb24gZ2xvc3NhcnkgdG8gaGF2ZSB3b3JraW5nIGxpbmtzLgorCisyMDA5LTEwLTI4IDEwOjE0OjM2ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3QuYzoKKwkgIGFubm90YXRpb25zOiBhZGQgYW5ub3RhdGlvbnMgdG8gZ3N0X2luaXRfY2hlY2sgdG9vCisKKzIwMDktMTAtMjggMDk6NTg6NTIgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdC5jOgorCSAgZG9jczogdGVsbCBtb3JlIGFib3V0IHdoYXQgaGFwcGVucyBpbiBnc3RfaW5pdC4KKwkgIEFkZCBsaW5rcyB0byBnc3RfdXBkYXRlX3JlZ2lzdHJ5IGFuZCB0aGUgZW52LXZhcnMuCisKKzIwMDktMTAtMjggMDk6MjE6MDEgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdC5jOgorCSAgZG9jczogcmVtb3ZlIHJlZmVyZW5jZSB0byBPR0kgYW5kIHJlcGhyYXNlIHNlY3Rpb25zIGRvY3MKKwkgIFRoZSBPR0kgbGlua3MgYXJlIGRlYWQsIHNvIHJlbW92ZSB0aGVtLiBBbHNvIHJlbW92ZSB0aGUgcGFyYWdyYXBoIHRoYXQgcG9pbnRlZAorCSAgdG8gT0dJIGFuZCBEUy4gT25seSBtZW50aW9uaW5nIERTIHRoZXJlIG1hZGUgaXQgYSBidXQgcG9pbnRsZXNzLiBBZGQgYSBnZW5lcmljCisJICBwYXJhZ3JhcGggaW5zdGVhZCB0aGF0IHRlbGxzIGEgYml0IGFib3V0IHRoZSB1c2VjYXNlcyBnc3RyZWFtZXIgY292ZXJzLgorCisyMDA5LTEwLTI4IDAwOjI5OjMwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJpbi5jOgorCSogZ3N0L2dzdGJ1cy5jOgorCSogZ3N0L2dzdGNsb2NrLmM6CisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6CisJKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKKwkqIGdzdC9nc3RpbmRleC5jOgorCSogZ3N0L2dzdGluZGV4ZmFjdG9yeS5jOgorCSogZ3N0L2dzdG9iamVjdC5jOgorCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBpcGVsaW5lLmM6CisJKiBnc3QvZ3N0cGx1Z2luLmM6CisJKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgorCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6CisJKiBnc3QvZ3N0dGFzay5jOgorCSogZ3N0L2dzdHRhc2twb29sLmM6CisJKiBnc3QvZ3N0eG1sLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSogcGx1Z2lucy9pbmRleGVycy9nc3RtZW1pbmRleC5jOgorCSAgUmVtb3ZlIEdTVF9ERUJVR19GVU5DUFRSIHdoZXJlIHRoZXkncmUgcG9pbnRsZXNzCisJICBUaGVyZSdzIG5vdCBtdWNoIHBvaW50IGluIHVzaW5nIEdTVF9ERUJVR19GVU5DUFRSIHdpdGggR09iamVjdAorCSAgdmlydHVhbCBmdW5jdGlvbnMgc3VjaCBhcyBnZXRfcHJvcGVydHksIHNldF9wcm9wZXJ5LCBmaW5hbGl6ZSBhbmQKKwkgIGRpc3Bvc2UsIHNpbmNlIHRoZXknbGwgbmV2ZXIgYmUgdXNlZCBieSBhbnlvbmUgYW55d2F5LiBTYXZlcyBhCisJICBmZXcgYnl0ZXMgYW5kIHBvc3NpYmx5IGEgdGVudGggb2YgYSBwb2xhciBiZWFyLgorCisyMDA5LTEwLTI4IDAwOjA3OjQ4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6CisJICBjYXBzZmlsdGVyOiBzcHJpbmtsZSBzb21lIEdTVF9ERUJVR19GVU5DUFRSCisKKzIwMDktMTAtMjcgMTU6NDc6MzkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZGVzaWduL3BhcnQtdHJpY2ttb2Rlcy50eHQ6CisJICBkZXNpZ246IGFkZCBzb21lIGlkZWFzIGZvciBTS0lQIG1vZGUgdHJpY2ttb2RlcworCisyMDA5LTEwLTIzIDEwOjIwOjAyIC0wNDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkgIG11bHRpcXVldWU6IGJ1ZmZlcmluZyBpcyBpbXBsZW1lbnRlZCBub3cKKworMjAwOS0xMC0yMiAyMToyNDoyNCAtMDQwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuaDoKKwkgIG11bHRpcXVldWU6IG1ha2Ugc3VyZSBwZXJjZW50IGluY3JlYXNlcworCSAgS2VlcCB0cmFjayBvZiB0aGUgbGFzdCBwb3N0ZWQgcGVyY2VudCBtZXNzYWdlIGFuZCBtYWtlIHN1cmUgdGhlIG5leHQgcGVyY2VudAorCSAgbWVzc2FnZXMgYXJlIHN0cmljdGx5IGluY3JlYXNpbmcuCisKKzIwMDktMTAtMjIgMTY6Mzg6MTIgLTA0MDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgorCSAgbXVsdGlxdWV1ZTogcmVmYWN0b3IgYnVmZmVyaW5nIGNvZGUKKwkgIE1vdmUgdGhlIGJ1ZmZlcmluZyB1cGRhdGUgY29kZSB0byBhIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIHRoYXQgd2UgY2FuIGNhbGwgaXQKKwkgIHdoZW4gdGhlIGJ1ZmZlcmluZyBzdGF0ZSBjaGFuZ2VzIGR1ZSB0byBFT1MuCisJICBBdm9pZCBkaXZpZGluZyBieSAwLgorCisyMDA5LTEwLTIyIDE0OjA5OjAxIC0wNDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5oOgorCSAgbXVsdGlxdWV1ZTogYWRkIGJ1ZmZlcmluZyBzdXBwb3J0CisJICBBZGQgc3VwcG9ydCBmb3IgYnVmZmVyaW5nIG1vZGUgd2hlcmUgd2UgcG9zdCBCVUZGRVJJTkcgbWVzc2FnZXMgYmFzZWQgb24gdGhlCisJICBsZXZlbCBvZiB0aGUgcXVldWVzLiBJdCBjdXJyZW50bHkgb3BlcmF0ZXMgb24gdGhlIGZpcnN0IHF1ZXVlIHRoYXQgZ29lcyBvdmVyIG9yCisJICB1bmRlciB0aGUgaGlnaC9sb3cgdGhyZXNob2xkcy4KKworMjAwOS0xMC0yMiAxNDowNzozMSAtMDQwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6CisJICBtdWx0aXF1ZXVlOiBkb24ndCBjaGVjayB2aXNpYmxlIGl0ZW1zIGluIGJ1ZmZlcmluZworCSAgSW4gYnVmZmVyaW5nIG1vZGUgd2Ugd2FudCB0byBpZ25vcmUgdGhlIG1heCB2aXNpYmxlIGl0ZW1zIHRvIGRlY2lkZSB3aGVuIHRoZQorCSAgcXVldWUgaXMgZmlsbGVkLiBJbnN0ZWFkLCB3ZSBvbmx5IGxvb2sgYXQgdGhlIG51bWJlciBvZiBieXRlcyBhbmQvb3IgdGltZSBpbiB0aGUKKwkgIHF1ZXVlLgorCisyMDA5LTEwLTIxIDExOjMwOjQwIC0wNDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5oOgorCSAgbXVsdGlxdWV1ZTogaG9vayB1cCBsb3cvaGlnaCBwZXJjZW50CisJICBIb29rIHVwIHRoZSBsb3cvaGlnaCBwZXJjZW50IHByb3BlcnRpZXMgZm9yIHRoZSBidWZmZXJpbmcgbW9kZS4KKworMjAwOS0xMC0yMSAxMToyNDo0NyAtMDQwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuaDoKKwkgIG11bHRpcXVldWU6IGhvb2sgdXAgcHJvcGVydHkgZm9yIGJ1ZmZlcmluZworCisyMDA5LTEwLTIyIDE1OjIxOjM5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkgIG11bHRpcXVldWU6IHNtYWxsIGNsZWFudXBzCisJICBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2lvbgorCSAgRml4IHNvbWUgdHlwbworCisyMDA5LTEwLTIyIDA5OjQxOjUyIC0wNDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkgIG11bHRpcXVldWU6IGFkZCBGSVhNRSBmb3Igd3JvbmcgY29kZQorCSAgTmVlZHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uCisKKzIwMDktMTAtMjEgMTQ6MjA6MjkgLTA0MDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgorCSAgbXVsdGlxdWV1ZTogZml4IGRlYnVnIG91dHB1dAorCisyMDA5LTEwLTIxIDE0OjE1OjA1IC0wNDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkgIG11bHRpcXVldWU6IGF2b2lkIHNoYWRvd2luZyBmdW5jdGlvbiBhcmd1bWVudAorCSAgRG9uJ3Qgc2hhZG93IHRoZSBzcSBhcmd1bWVudCBpbiB0aGUgdW5kZXJydW5fY2IgZnVuY3Rpb24gYnV0IHVzZQorCSAgYSBkaWZmZXJlbnQgdmFyaWFibGUgbmFtZSB0byBpdGVyYXRlIHRoZSBvdGhlciBxdWV1ZXMuCisJICBVc2UgdGhlIHNhbWUgdmFyaWFibGUgbmFtZSBpbiB0aGUgb3ZlcnJ1bl9jYiBmdW5jdGlvbi4KKworMjAwOS0xMC0yMSAxNDoxMjoxMiAtMDQwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6CisJICBtdWx0aXF1ZXVlOiBtYWtlIHF1ZXVlIGFyZyBleHBsaWNpdAorCSAgTWFrZSB0aGUgcXVldWUgYXJndW1lbnQgdG8gSVNfRklMTEVEIGV4cGxpY2l0CisKKzIwMDktMTAtMjEgMTE6MTc6MDggLTA0MDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgorCSAgbXVsdGlxdWV1ZTogZml4IHByb3BlcnRpZXMKKwkgIEZpeCBwcm9wZXJ0aWVzLCBtYWtlIHRoZSBleHRyYS1zaXplIHByb3BlcnRpZXMgYXMgbm90IGltcGxlbWVudGVkLgorCisyMDA5LTEwLTI1IDIxOjM1OjA5ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6CisJICBkZWJ1Z3V0aWxzOiBhbGxvdyB0byBoaWRlL3Nob3cgcGFkIHN0YXR1cyB3aXRoIGdyYXBoZGV0YWlscyBmbGFnCisKKzIwMDktMTAtMjQgMTM6MTQ6MjUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6CisJICB0eXBlZmluZGhlbHBlcjogUmVtb3ZlIG9ic29sZXRlIEZJWE1FCisJICBJdCdzIG5vdCBuZWNlc3NhcnkgKGFuZCBub3QgYSBnb29kIGlkZWEpIHRvIGNhY2hlIHRoZSB0eXBlZmluZCBmYWN0b3J5CisJICBsaXN0IGFueW1vcmUuCisKKzIwMDktMTAtMjQgMTE6NTg6MjUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cmVnaXN0cnkuYzoKKwkqIGdzdC9nc3RyZWdpc3RyeS5oOgorCSAgcmVnaXN0cnk6IHByaXZhdGUgaXMgYSBDKysga2V5d29yZCwgZG9uJ3QgdXNlIGl0CisJICAuLi5vdGhlcndpc2UgQysrIGNvbXBpbGVycyB3aWxsIGNvbXBsYWluIHdoZW4gaW5jbHVkaW5nIGdzdHJlZ2lzdHJ5LmgKKworMjAwOS0xMC0yNCAxMDoyMTozMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgorCSAgZG9jczogYWRkIFNpbmNlIHRhZyB0byBkb2NzIGZvciBuZXcgQVBJCisJICBBbmQgdGVsbCBndGstZG9jIHRoYXQgR3N0UmVnaXN0cnlQcml2YXRlIGlzIHByaXZhdGUuCisKKzIwMDktMTAtMjEgMDk6NDg6NDEgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSogZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5jOgorCSogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOgorCSAgdHlwZWZpbmQ6IEtlZXAgdHlwZWZpbmQgZmFjdG9yaWVzIHNvcnRlZCBpbiB0aGUgcmVnaXN0cnkuIEZpeGVzICM1OTkxNDcKKwkgIFRoaXMgYXZvaWRzIGhhdmluZyB0byBkbyB0aGUgc29ydGluZyBldmVyeXRpbWUgd2UgdXNlIHR5cGVmaW5kCisJICBUaGUgYmVoYXZpb3VyIG9mIGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfbGlzdCBoYXMgc3VidGxlbHkgY2hhbmdlZAorCSAgaW4gdGhlIHNlbnNlIHRoYXQgdGhlIG9yZGVyIHdhcyBwcmV2aW91c2x5IHVuZGVmaW5lZCwgd2hlcmVhcyBub3cKKwkgIGl0IHJldHVybnMgdGhlbSBzb3J0ZWQgYnkgcmFuayBhbmQgdGhlbiBieSBuYW1lLgorCisyMDA5LTEwLTIxIDA5OjQ1OjQ3ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0cmVnaXN0cnkuYzoKKwkgIHJlZ2lzdHJ5OiBDYWNoZSBlbGVtZW50IGFuZCB0eXBlZmluZCBmYWN0b3JpZXMuIEZpeGVzIDU5ODg5NgorCSAgVGhpcyBhdm9pZHMgdW5uZWVkZWQgbGlzdC9maWx0ZXJpbmcgaWYgdGhlIHJlZ2lzdHJ5IGhhc24ndCBjaGFuZ2VkCisKKzIwMDktMTAtMjEgMDk6NDA6NDkgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgorCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuaDoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgZ3N0cGx1Z2luZmVhdHVyZTogQVBJIDogbmV3IGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2NvcHkoKSBtZXRob2QKKwkgIFRoaXMgYWxsb3dzIGNvcHlpbmcgQU5EIGluY3JlbWVudGluZyB0aGUgcmVmY291bnQgYXQgdGhlIHNhbWUgdGltZSwKKwkgIGF2b2lkaW5nIGEgZG91YmxlIGl0ZXJhdGlvIG9mIHRoZSBHTGlzdAorCisyMDA5LTEwLTI0IDEwOjA1OjU5ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0cmVnaXN0cnkuYzoKKwkqIGdzdC9nc3RyZWdpc3RyeS5oOgorCSAgZ3N0cmVnaXN0cnk6IEFkZCBhIGNvb2tpZSBmb3IgZGV0ZWN0aW5nIGZlYXR1cmUgbGlzdCBjaGFuZ2VzCisJICBXZSBhbHNvIGNyZWF0ZSBhIHByaXZhdGUgc3RydWN0dXJlLCBzaW5jZSB3ZSB3aWxsIG5lZWQgdG8gYWRkIG1vcmUKKwkgIGRhdGEgdGhlcmUgaW4gZm9sbG93aW5nIHBhdGNoZXMuCisKKzIwMDktMTAtMjMgMTM6MTk6MDQgLTA0MDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RtZXNzYWdlLmg6CisJICBtZXNzYWdlOiBkb24ndCB1c2UgdHlwZWNoZWNraW5nIGNhc3QgbWFjcm9zCisJICBTaW1wbHkgdXNlIGNhc3RpbmcgbWFjcm9zIGZvciBhY2Nlc3NpbmcgdGhlIG1lc3NhZ2UgZmllbGRzIGxpa2Ugd2UgZG8gZm9yCisJICBidWZmZXJzIGFuZCBldmVudHMuIEF2b2lkcyBzb21lIGNvc3RseSB0eXBlY2hlY2tpbmcgdGhhdCBkb2VzIG5vdCByZWFsbHkgYnV5IHVzCisJICBtdWNoLgorCisyMDA5LTEwLTIzIDEzOjEzOjUyIC0wNDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0bWVzc2FnZS5jOgorCSAgUmV2ZXJ0ICJnc3RtZXNzYWdlOiBBdm9pZCBleHBlbnNpdmUgc3JjL3R5cGUvdGltZXN0YW1wIGZldGNoLiIKKwkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgNjFjZjkzYTMzNGI3OWEyZDg0OTNlNTMxY2M0NGJhNDVhNDIwOTgwNS4KKworMjAwOS0xMC0yMyAxNzo1MToyNyArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZ3N0L2dzdG1lc3NhZ2UuYzoKKwkgIGdzdG1lc3NhZ2U6IEF2b2lkIGV4cGVuc2l2ZSBzcmMvdHlwZS90aW1lc3RhbXAgZmV0Y2guCisJICBJZiB3ZSd2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgbWVzc2FnZSwgdXNlIHRoZSBlbnRyaWVzCisJICBkaXJlY3RseS4KKworMjAwOS0xMC0yMyAxNzo0Nzo0MyArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZ3N0L2dzdGNhcHMuYzoKKwkgIGdzdGNhcHM6IFVzZSBpbmxpbmVkIHZlcnNpb24gb2YgX2lzX2FueSgpL19pc19lbXB0eSgpCisJICBDQVBTX0lTX0FOWSBhbmQgQ0FQU19JU19FTVBUWSBhcmUgdGhlIGVxdWl2YWxlbnQgb2YgdGhlaXIgZ3N0X2NhcHNfKgorCSAgY291bnRlcnBhcnQgZXhjZXB0IHRoYXQgdGhleSBhdm9pZCB0aGUgdHlwZWNoZWNraW5nIGFuZCBhcmUgaW5saW5lZC4KKwkgIENBUFNfSVNfRU1QVFlfU0lNUExFIG9ubHkgY2hlY2tzIGZvciBlbXB0eSBjYXBzICh3aXRob3V0IGNoZWNraW5nIGlmCisJICB0aGUgY2FwcyBpcyBBTlkpLgorCisyMDA5LTEwLTIyIDE2OjQyOjEzIC0wNDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgorCSAgVE9ETzogYWRkIGl0ZW0gdG8gVE9ETyBsaXN0CisJICBXZSBjdXJyZW50bHkgZG8gYSBsaXR0bGUgdG9vIG11Y2ggd29yayB3aGVuIHdlIHB1c2ggdGhlIGZpcnN0IGJ1ZmZlciBhcm91bmQKKwkgIHJlc3VsdGluZyBpbiBleGNlc3NpdmUgY2FwcyBjaGVja2luZy4gV2UgY2FuIHByb2JhYmx5IG1ha2UgdGhpcyBhIGxpdHRsZSBsZXNzCisJICBleHBlbnNpdmUuCisKKzIwMDktMTAtMjIgMTI6NTI6NDYgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogZ3N0L2dzdHBpcGVsaW5lLmM6CisJICBnc3RwaXBlbGluZTogU2ltcGxpZnkgYmFzZSB0aW1lIGNoZWNraW5nIHNsaWdodGx5CisJICBTaW1wbGlmeSBjaGVja2luZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBiYXNlIHRpbWUgLSBkb24ndCByZS1jaGVjaworCSAgdGhlIHZhbHVlIG9mIGEgbG9jYWwgdmFyaWFibGUgdGhhdCB3YXMgc2V0IDMgbGluZXMgZWFybGllci4KKworMjAwOS0xMC0yMiAxMzoxNToxNSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZ3N0L2dzdHVyaS5jOgorCSAgZ3N0dXJpOiBPcHRpbWlzYXRpb246IEF2b2lkIHR5cGUtY2hlY2tpbmcgaW4gc29ydGluZyBtZXRob2QuCisJICBXZSBhbHJlYWR5IGtub3cgdGhlIGxpc3Qgb25seSBjb250YWlucyBwbHVnaW4gZmVhdHVyZXMKKworMjAwOS0xMC0yMiAxMzoxMzo1NiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZ3N0L2dzdHVyaS5jOgorCSAgZ3N0dXJpOiBPcHRpbWlzYXRpb24gOiBDYXN0IHdoZW4gd2UncmUgc3VyZSBvZiB0aGUgdHlwZS4KKwkgIEFsc28gZGlyZWN0bHkgYWNjZXNzIEdzdEVsZW1lbnRGYWN0b3J5LT51cmlfdHlwZSBpbnN0ZWFkIG9mIGdvaW5nCisJICB0aHJvdWdoIGEgZnVuY3Rpb24gdGhhdCB3aWxsIChvbmNlIGFnYWluKSBjaGVjayB3aGV0aGVyIGl0J3MgYQorCSAgR3N0RWxlbWVudEZhY3RvcnkKKworMjAwOS0xMC0yMiAxMjozMzozNyArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmFrZXNpbmsuYzoKKwkgIHRlc3RzL2Zha2VzaW5rOiBBZGQgc29tZSBkZWJ1Z2dpbmcKKworMjAwOS0xMC0yMiAxMjozMzowMSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmFrZXNpbmsuYzoKKwkgIHRlc3RzL2ZhZWtzaW5rOiBMb3dlciB0aGUgbnVtYmVyIG9mIHRocmVhZHMgdG8gYXZvaWQgdGltZW91dHMKKwkgIFdlIGp1c3QgZW5kIHVwIHdpdGggd2F5IHRvbyBtdWNoIGNvbnRlbnRpb24gaW4gZ2xpYiBvdGhlcndpc2UuCisKKzIwMDktMTAtMTkgMDk6MDY6MTYgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSAgZ3N0cmVnaXN0cnk6IFVzZSBoYXNoIHRhYmxlIHdoZW4gZmluZGluZyBhIGZlYXR1cmUuIEZpeGVzICM1OTg4OTUKKworMjAwOS0xMC0yMSAxNjoyNjowMSAtMDQwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKKwkgIHRlZTogaW1wbGVtZW50IGN1c3RvbSBhY2NlcHRjYXBzIGZ1bmN0aW9uCisJICBJbXBsZW1lbnQgYSBjdXN0b20gYWNjZXB0Y2FwcyBmdW5jdGlvbiBvbiB0aGUgc2lua3BhZC4gV2UgY2FuIGFjY2VwdCBhbnkgY2FwcyBhcworCSAgbG9uZyBhcyBpdCBpcyBhY2NlcHRlZCBieSBhbGwgZG93bnN0cmVhbSBwZWVyIGVsZW1lbnRzLgorCisyMDA5LTEwLTIxIDEzOjM4OjU3IC0wNDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5oOgorCSAgbXVsdGlxdWV1ZTogYXZvaWQgbG9jayBmb3IgdGFraW5nIHRoZSBjb3VudGVyCisJICBUaGUgY291bnRlciBmb3IgaW5jb21taW5nIGRhdGEgaXMgYWxyZWFkeSBwcm90ZWN0ZWQgd2l0aCB0aGUgU1RSRUFNX0xPQ0sgc28gd2UKKwkgIGRvbid0IG5lZWQgdG8gYWRkIGFub3RoZXIgbG9jayBhcm91bmQgaXQuCisKKzIwMDktMTAtMjAgMjM6Mjg6NTQgLTA0MDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSogZ3N0L2dzdHJlZ2lzdHJ5Lmg6CisJICByZWdpc3RyeTogaGFzaCB0aGUgcGx1Z2luIGJhc2VuYW1lCisJICBNYWludGFpbiBhIGhhc2h0YWJsZSBvZiB0aGUgcGx1Z2luIGJhc2VuYW1lLiBXZSBjYW4gdGhlbiB1c2UgdGhpcworCSAgaGFzaHRhYmxlIHRvIHNwZWVkdXAgdGhlIHNlYXJjaCBmb3IgYW4gZXhpc3RpbmcgcGx1Z2luIGFuZCBhdm9pZAorCSAgYSB3aG9sZSBsb3Qgb2Ygc3RyY21wIGNhbGxzLgorCisyMDA5LTEwLTIwIDIzOjI3OjQxIC0wNDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cmVnaXN0cnljaHVua3MuYzoKKwkgIHJlZ2lzdHJ5OiBzcGVlZCB1cCBfc3RybGVuCisJICBNYWtlIHRoZSBfc3RybGVuIGZ1bmN0aW9uIGEgbGl0dGxlIHRpZ2h0ZXIKKworMjAwOS0xMC0yMCAyMTo0Mzo1OCAtMDQwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6CisJICByZWdpc3RyeTogbmFtZSBpcyBuZXZlciBOVUxMCisJICBXaGVuIGxvb2tpbmcgdXAgYSBmZWF0dXJlIGJ5IG5hbWUsIHdlIG5ldmVyIGNhbGwgdGhpcyBpbnRlcm5hbAorCSAgZnVuY3Rpb24gd2l0aCBOVUxMIHNvIHdlIGRvbid0IGhhdmUgdG8gY2hlY2sgZm9yIGl0LgorCisyMDA5LTEwLTIwIDIxOjM5OjExIC0wNDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cmVnaXN0cnkuYzoKKwkgIHJlZ2lzdHJ5OiByZWZhY3RvciBwbHVnaW4gbG9va3VwCisJICBXZSBrZWVwIGxvb2t1cCBwbHVnaW5zIGJ5IHRoZWlyIGJhc2VuYW1lLiBBdm9pZCBjcmVhdGluZyBhIGJhc2VuYW1lCisJICBmcm9tIGEgZmlsZW5hbWUgaWYgd2UgY2FuLgorCisyMDA5LTEwLTIwIDIxOjAxOjU1IC0wNDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cmVnaXN0cnkuYzoKKwkgIHJlZ2lzdHJ5OiBkbyBxdWljayBjaGVjayBmb3IgLiBmaWxlcworCSAgRG8gYSBxdWljayBjaGVjayBmb3IgLiBmaWxlcyBiZWZvcmUgY2FsbGluZyB0aGUgc3RyY21wIGZ1bmN0aW9ucworCisyMDA5LTEwLTIwIDEyOjIxOjA5IC0wNzAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAc29uZ2JpcmRuZXN0LmNvbT4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdHhtbC5jOgorCSAgUmVtb3ZlIGV4ZWN1dGFibGUgYml0cyBvbiB4bWwgdW5pdCB0ZXN0LgorCisyMDA5LTEwLTE5IDE2OjQ3OjEwICswMjAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQGdub21lLm9yZz4KKworCSogZ3N0L2dzdGNhcHMuYzoKKwkgIGRvY3M6IEZpeCBkb2NzIGZvciBnc3RfY2Fwc19zZXRfc2ltcGxlKCkKKworMjAwOS0xMC0xOSAxMzowMjozMCArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSAgZG9jczogTW9kaWZ5IGRvY3Mgc3RyaW5nIHNsaWdodGx5LgorCSAgQXBwYXJlbnRseSBzdGFydGluZyB0aGUgbGFzdCBsaW5lIG9mIGEgZG9jcyBzdHJpbmcgd2l0aCAncmV0dXJucycgYm90aAorCSAgY29uZnVzZXMgYW5kIGVucmFnZXMgZ3RrLWRvYy4gVXNlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHdvcmRpbmcgaW5zdGVhZC4KKworMjAwOS0xMC0xOSAxMjoyOTozNSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBnc3QvZ3N0cGx1Z2lubG9hZGVyLmM6CisJICBwbHVnaW5sb2FkZXI6IFdoZW4gYSBwbHVnaW4gaXMgYmxhY2tsaXN0ZWQsIG91dHB1dCBhIEdTVF9FUlJPUiBsaW5lLgorCisyMDA5LTEwLTE5IDEzOjMwOjEwICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiB0b29scy9nc3QtaW5zcGVjdC5jOgorCSAgdG9vbHMvZ3N0LWluc3BlY3Q6IENoZWNrIHdlJ3JlIG5vdCBoYW5kbGluZyBOVUxMIHBvaW50ZXJzLgorCisyMDA5LTEwLTE5IDEzOjI5OjQwICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiB0b29scy9nc3QtaW5zcGVjdC5jOgorCSAgdG9vbHMvZ3N0LWluc3BlY3Q6IFJlbW92ZSBkZWFkIGFzc2lnbm1lbnQKKworMjAwOS0xMC0xNCAxMDo1NDozMiArMDIwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+CisKKwkqIGdzdC9nc3R0cmFjZS5oOgorCSAgdHJhY2U6IERvIG5vdCBwb2lzb24gZ3N0X3RyYWNlX2FkZF9lbnRyeSgpCisJICBTaW5jZSBnc3RfdHJhY2VfYWRkX2VudHJ5KCkgaXMgYSBtYWNybywgZ2NjIHdpbGwgYmFyZiB3aGVuIGl0IGlzCisJICBkZWZpbmVkIGluIGNhc2UgaXQgaGFzIGJlZW4gcG9pc29uZWQgZHVlIHRvIHRyYWNlIHN1cHBvcnQgYmVpbmcKKwkgIGRpc2FibGVkLgorCisyMDA5LTEwLTE4IDIzOjE4OjU4ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzoKKwkgIGNvbnRyb2xsZXI6IGp1c3QgY2FzdCBpbiBpbnRlcm5hbCBBUEkgd2hlcmUgd2UgaGF2ZSBjaGVja2VkIHBhcmFtZXRlcnMgYWxyZWFkeQorCisyMDA5LTEwLTE4IDIzOjE1OjA3ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgorCSAgY29udHJvbGxlcjogdXNlIGdfc2xpY2UgZm9yIGNvbnRyb2xsZWQgcHJvcGVydHkgc3RydWN0dXJlcworCSAgVXNlIGdfc2xpZGUgaW5zdGVhZCBvZiBub21hbCBnX25ldywgQWxzbyBkb24ndCBpbml0IHN0cnVjdCB3aXRoIDAgYXMgd2UgbmVlZCB0bworCSAgaW5pdCBpdCBhbnl3YXkgd2l0aCB0aGUgcmVhbCB2YWx1ZXMuCisJICBBbHNvIGpvaW4gdGhlIDMgZmxhZ3MgY2hlY2tzIGludG8gb25lLgorCisyMDA5LTEwLTE4IDE3OjE3OjE3ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6CisJICBsaWJzL2Jhc2UvdHlwZWZpbmRoZWxwZXI6IFJlbW92ZSB1c2VsZXNzIHR5cGVjaGVja2luZyBpbiB0aWdodCBsb29wCisJICBUaGUgbGlzdCBhZ2FpbnN0IHdoaWNoIHdlIHJ1biB0aGUgY29tcGFyZWZ1bmMgd2lsbCBvbmx5IGNvbnRhaW4KKwkgIEdzdFBsdWdpbkZlYXR1cmUsIHRoZXJlZm9yZSByZW1vdmUgdGhlIDYgZXhwZW5zaXZlIHR5cGUgY2hlY2tzIHdlIGRvCisJICBmb3IgZXZlcnkgc2luZ2xlIGNvbXBhcmlzaW9uLgorCisyMDA5LTEwLTE2IDEyOjM5OjU0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSAgY2FwczogZml4IHR5cG8gaW4gZG9jcworCisyMDA5LTEwLTE2IDA5OjQzOjA4ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIHdpbjMyOiBBZGQgbmV3IEFQSSBzeW1ib2wKKworMjAwOS0xMC0xNiAxMDoxMzo1MyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBjb21tb246CisJICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKKwkgIEZyb20gODVkMTUzMCB0byAwNzAyZmUxCisKKzIwMDktMTAtMDcgMTU6MzI6MTggKzAyMDAgIEJlbmphbWluIE90dGUgPG90dGVAZ25vbWUub3JnPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdGNhcHMuYzoKKwkqIGdzdC9nc3RjYXBzLmg6CisJICBJbXByb3ZlIGNhcHMgc2V0dGVycyBBUEkKKwkgIFRoaXMgcGF0Y2ggYWRkcyBnc3RfY2Fwc19zZXRfdmFsdWUoKSBhbmQgYWxsb3dzIGdzdF9jYXBzX3NldF9zaW1wbGUoKSB0bworCSAgd29yayBvbiBub24tc2ltcGxlIGNhcHMuIFNlZSB0aGUgQVBJIGRvY3VtZW50YXRpb24gZm9yIHRoZSBmdW5jdGlvbnMKKwkgIGFib3V0IHdoYXQgdGhleSBkby4KKwkgIFRoZSBpbnRlbnRpb24gb2YgdGhlc2UgY2hhbmdlcyBpcyB0byBlYXNlIHdvcmtpbmcgd2l0aCBjYXBzIGluIGNhcHMKKwkgIHRyYW5zZm9ybSBmdW5jdGlvbnMuIEFuIGV4YW1wbGUgZm9yIHRoaXMgd291bGQgYmUgZmZtcGVnY29sb3JzcGFjZSwKKwkgIHdoZXJlIHRoZSBjYXBzIHRyYW5zZm9ybSBmdW5jdGlvbiBjb3VsZCBiZSBjaGFuZ2VkIHRvIGxvb2sgcm91Z2hseSBsaWtlCisJICB0aGlzIChwc2V1ZG9jb2RlIGFoZWFkKToKKwkgIHJlc3VsdCA9IGdzdF9jYXBzX2NvcHkgKHRlbXBsYXRlX2NhcHMpOworCSAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCksCisJICAid2lkaCIpOworCSAgZ3N0X2NhcHNfc2V0X3ZhbHVlIChyZXN1bHQsIHZhbHVlKTsKKwkgIC8qIHNhbWUgZm9yIGhlaWdodCwgZnJhbWVyYXRlIGFuZCBwYXIgKi8KKwkgIHJldHVybiBjYXBzOworCSAgd2hpY2ggaXMgbXVjaCBjbGVhbmVyIGFuZCBlYXNpZXIgdG8gdW5kZXJzdGFuZCB0aGFuIHRoZSBjdXJyZW50IGNvZGUuCisJICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk3NjkwCisKKzIwMDktMTAtMDIgMTA6MTU6NTUgKzAyMDAgIEJlbmphbWluIE90dGUgPG90dGVAZ25vbWUub3JnPgorCisJKiB0ZXN0cy9leGFtcGxlcy94bWwvTWFrZWZpbGUuYW06CisJICBBZGQgWE1MX0xJQlMgd2hlbiBidWlsZGluZyB0ZXN0cyB0aGF0IHVzZSB4bWwtc3BlY2lmaWMgZnVuY3Rpb25zCisKKzIwMDktMTAtMTUgMTY6MzU6NTkgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogcG8vTWFrZXZhcnM6CisJICBwbzogRG9uJ3QgY3JlYXRlIGJhY2t1cCAucG8gZmlsZXMKKwkgIEFzIHdlbGwgYXMgcHJldmVudGluZyBjcmVhdGlvbiBvZiB1c2VsZXNzIGJhY2t1cCBmaWxlcywgaXQgd29ya3MKKwkgIGFyb3VuZCBhIGJ1ZyBpbiBnZXR0ZXh0IDAuMTcgb24gT1MvWAorCisyMDA5LTEwLTE1IDE2OjMwOjM2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIGJhc2VzcmM6IGZpeCByYWNlIGluIFBMQVlJTkctPlBBVVNFRC0+UExBWUlORworCSAgV2hlbiB3ZSBxdWlja2x5IHN3aXRjaCBmcm9tIFBMQVlJTkcgdG8gUEFVU0VEIGFuZCBiYWNrIHRvIFBMQVlJTkcgaXQncyBwb3NzaWJsZQorCSAgaW4gc29tZSBjYXNlcyB0aGF0IHRoZSB0YXNrIHJlZnVzZXMgdG8gc3RhcnQsIFRoaXMgaXMgYmVjYXVzZSB3aGVuIHdlIGdvIHRvCisJICBQQVVTRUQsIHdlIHVuc2NoZWR1bGUgdGhlIGNsb2NrIHRpbWVvdXQsIHdoaWNoIGNvdWxkIHJldHVybiBVTlNDSEVEVUxFRCB3aGVuCisJICB3ZSdyZSBiYWNrIHRvIFBMQVlJTkcsIGNhdXNpbmcgdGhlIHRhc2sgdG8gUEFVU0UgYWdhaW4gd2l0aCBhIHdyb25nLXN0YXRlLgorCSAgVGhpcyBwYXRjaCBjaGVja3MgaWYgd2UgYXJlIHJ1bm5pbmcgd2hlbiB3ZSByZXR1cm4gd2l0aCBhbiBVTlNDSEVEVUxFRCByZXR1cm4KKwkgIHZhbHVlIGFuZCBpZiB3ZSBhcmUsIHRyeSB0byBjcmVhdGUgYSBuZXcgYnVmZmVyLgorCSAgRml4ZXMgIzU5NzU1MAorCisyMDA5LTEwLTE1IDEyOjE2OjA1ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RwcmVzZXQuYzoKKwkgIGRvY3M6IGNsYXJpZnkgcHJlc2V0IGFwaSBkb2NzCisKKzIwMDktMTAtMTQgMTc6NTc6NDAgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6CisJICBkb2NzOiBmaXggY29udHJvbGxlciBzZWN0aW9ucyBkb2NzCisKKzIwMDktMTAtMTQgMTA6NDA6NTAgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSA2MzgwZDRiIHRvIDg1ZDE1MzAKKworMjAwOS0xMC0xNCAxMDoxNjozMSArMDIwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+CisKKwkqIGdzdC9nc3RpdGVyYXRvci5jOgorCSAgaXRlcmF0b3I6IEZpeCBhIGRvY3VtZW50YXRpb24gdHlwbworCisyMDA5LTEwLTE0IDA4OjU3OjUyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogTWFrZWZpbGUuYW06CisJICBidWlsZDogLi4uYW5kIGFkZCBtaXNzaW5nIGVuZGlmCisKKzIwMDktMTAtMTQgMDg6NTc6MDQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBNYWtlZmlsZS5hbToKKwkgIGJ1aWxkOiBBbHNvIGRvbid0IHJ1biBtYWtlIGNoZWNrLWV4cG9ydHMgaWYgZGVidWdnaW5nIGlzIGRpc2FibGVkCisKKzIwMDktMTAtMTQgMDg6NTA6MzEgKzAyMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgorCisJKiBNYWtlZmlsZS5hbToKKwkgIGJ1aWxkOiBPbmx5IHJ1biBtYWtlIGNoZWNrLWV4cG9ydHMgaWYgbm8gcHVibGljIEFQSSB3YXMgZGlzYWJsZWQKKwkgIEZpeGVzIGJ1ZyAjNTk4Mjk3LgorCisyMDA5LTEwLTE0IDA4OjMwOjA3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdG9iamVjdC5jOgorCSAgZ3N0b2JqZWN0OiBSZXBsYWNlIHJlY3Vyc2l2ZSBnc3Rfb2JqZWN0X2hhc19hbmNlc3RvcigpIHdpdGggYW4gaXRlcmF0aXZlIHZlcnNpb24KKwkgIFRoaXMgaXMgc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQgYmVjYXVzZSB0aGUgY29tcGlsZXIgY2FuJ3QgZG8gdGFpbAorCSAgcmVjdXJzaW9uIGhlcmUgYW5kIGhhcyB0byBrZWVwIGFsbCBzdGFjayBmcmFtZXMuCisJICBOb3QgdGhhdCBlZmZpY2llbmN5IGlzIHRoYXQgaW1wb3J0YW50IGhlcmUgYnV0IEkgYWxyZWFkeSBoYWQKKwkgIHRoZSBpdGVyYXRpdmUgdmVyc2lvbiBzb21ld2hlcmUgZWxzZSBhbmQgYm90aCBhcmUgZWFzeSB0byByZWFkLgorCisyMDA5LTEwLTE0IDA4OjI5OjMyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdG9iamVjdC5jOgorCSAgZ3N0b2JqZWN0OiBBZGQgc2ltcGxlIHVuaXQgdGVzdCBmb3IgZ3N0X29iamVjdF9oYXNfYW5jZXN0b3IoKQorCisyMDA5LTEwLTEzIDE5OjEyOjUwICswMzAwICBUb21taSBNecO2aMOkbmVuIDxleHQtdG9tbWkuMS5teW9oYW5lbkBub2tpYS5jb20+CisKKwkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgorCSAgbmV0Y2xpZW50Y2xvY2s6IGZpeCB0aW1lc3RhbXAgY29tcGFyaXNzaW9uLCBGaXhlcyAjNTk3NDA3CisKKzIwMDktMTAtMTIgMjE6NTE6NTUgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdG9iamVjdC5jOgorCSAgY2hlY2s6IERpc2FibGUgdGhlIHRlc3RfZmFpbF9hYnN0cmFjdF9uZXcoKSB0ZXN0IGVudGlyZWx5IG9uIE9TL1gKKwkgIEZpeGVzIGEgY29tcGlsZXIgd2FybmluZyBmcm9tIHRoZSBmdW5jdGlvbiBiZWluZyBjb21waWxlZCBidXQgbm90CisJICB1c2VkLgorCisyMDA5LTEwLTEyIDE0OjU3OjM1ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIGdzdC9nc3RfcHJpdmF0ZS5oOgorCSAgZGVidWc6IE1hcmsgdGhlIEdTVF9QT0xMIHN5bWJvbCBhcyBleHRlcm4gdG8gYXZvaWQgbXVsdGlwbHktZGVmaW5lZCBlcnJvcgorCisyMDA5LTEwLTEyIDE0OjQ3OjMwICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIGNvbW1vbjoKKwkgIFVwZGF0ZSBjb21tb24gdG8gNjM4MGQ0YjM3MGYwNzhmMGNjYTcyNDA0MjhlYTlmNjYzOTU3MWZmNQorCisyMDA5LTEwLTEyIDE0OjI0OjA0ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIGdzdC9nc3RfcHJpdmF0ZS5oOgorCSogZ3N0L2dzdGluZm8uYzoKKwkgIGdzdHBvbGw6IE1ha2UgdGhlIG5ldyBHU1RfUE9MTCBkZWJ1ZyBjb21wbGV0ZWx5IHByaXZhdGUKKwkgIE1ha2UgdGhlIEdTVF9QT0xMIGRlYnVnIGNhdGVnb3J5IHN5bWJvbCBwcml2YXRlIHRvIGxpYmdzdHJlYW1lciwgYXMKKwkgIHRoZXJlIHNob3VsZCBiZSBubyBleHRlcm5hbCB1c2VycyBvZiBpdC4KKworMjAwOS0xMC0xMiAxNDoyMjozNCArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0b2JqZWN0LmM6CisJICBjaGVja3M6IERpc2FibGUgYSBmYWlybHkgc2lsbHkgZ3N0b2JqZWN0IHRlc3Qgb24gT1MvWAorCSAgVGhpcyB0ZXN0IHVzZWQgdG8gU0lHQlVTIG9uIE9TL1ggYnV0IG5vdyBTSUdTRUdWJ3MgaW5zdGVhZCBvbgorCSAgU25vdyBMZW9wYXJkLiBJdCdzIG5vdCB3b3J0aCB0aGUgZWZmb3J0IHRvIGZpZ3VyZSBvdXQgd2hpY2ggcGxhdGZvcm0KKwkgIHNob3VsZCBwcm9kdWNlIHdoaWNoIGVycm9yIGZvciB3aGF0IGlzIGZ1bmRhbWVudGFsbHkgYSBwcmV0dHkgc2lsbHkKKwkgIHRlc3QsIHNvIGp1c3QgZGlzYWJsZSBpdCBvbiBPUy9YCisKKzIwMDktMTAtMTIgMTM6NTA6NTEgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3BhY2suYzoKKwkgIGxpYnMvZ3N0L2NoZWNrOiBNYWtlIHdyaXRpbmcgdGhyZWFkc2FmZS4gQmFja3BvcnRlZCBmcm9tIGxpYmNoZWNrIHRydW5rCisKKzIwMDktMTAtMTIgMTM6NDk6MzUgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrLmM6CisJKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19lcnJvci5jOgorCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfbGlzdC5jOgorCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfbG9nLmM6CisJKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19tc2cuYzoKKwkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3BhY2suYzoKKwkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3ByaW50LmM6CisJKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19ydW4uYzoKKwkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3N0ci5jOgorCSAgbGlicy9nc3QvY2hlY2s6IFJ1biBnc3QtaW5kZW50IG9uIGxpYmNoZWNrLgorCisyMDA5LTEwLTEyIDEyOjAyOjM0ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0cGx1Z2lubG9hZGVyLmM6CisJICBnc3RwbHVnaW5sb2FkZXI6IERvbid0IHdhaXQgZm9yZXZlciBvbiBnc3RfcG9sbF93YWl0LgorCSAgVGhpcyBhbGxvd3MgdGhlIG1hY29zeCB2ZXJzaW9ucyB0byBwcm9wZXJseSBlcnJvciBvdXQgd2hlbiBmZHMgYXJlIGNsb3NlZC4KKwkgIFRoaXMgaXMgb25seSBhIHRlbXBvcmFyeSBmaXggdW50aWwgdGhlIHBsdWdpbmxvYWRlciBpcyBzd2l0Y2hlZCB0byBub3QKKwkgIHVzZSBHc3RQb2xsIGJ1dCBHSU9DaGFubmVscy4KKworMjAwOS0xMC0xMiAxMjowMTo1OSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZ3N0L2dzdHBvbGwuYzoKKwkgIGdzdHBvbGw6IE9ubHkgdGFrZSBpbnRvIGFjY291bnQgYWN0aXZlIGZkcworCSAgVGhpcyBpcyBuZWVkZWQgc28gdGhhdCBzZWxlY3QgcHJvcGVybHkgZXJyb3JzIG91dCBvbiBtYWNvc3ggKHNpZ2gpCisKKzIwMDktMTAtMTIgMTA6MDc6MDMgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGdzdC9nc3Rwb2xsLmM6CisJICBnc3Rwb2xsOiBBZGQgc29tZSBkZWJ1Z2dpbmcgc3RhdGVtZW50cworCisyMDA5LTEwLTEyIDEwOjAxOjAxICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0cG9sbC5jOgorCSAgZ3N0cG9sbDogVXNlIHRoZSBlcnJvciBmZHNldCB3aGVuIHVzaW5nIHNlbGVjdC9wc2VsZWN0LgorCSAgVGhpcyBpcyBuZWVkZWQgdG8gcHJvcGVybHkgZGV0ZWN0IGZkcyB0aGF0IGFyZSBjbG9zZWQgb3IgdGhhdCBnb3QKKwkgIGFuIGVycm9yCisKKzIwMDktMTAtMTIgMDk6NTA6NDYgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGdzdC9nc3Rwb2xsLmM6CisJICBnc3Rwb2xsOiBEb24ndCB1c2UgcG9sbCBvbiBzeXN0ZW1zIHdpdGggYnJva2VuIHBvbGwKKworMjAwOS0xMC0xMiAwOTo1MDowMCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZ3N0L2dzdF9wcml2YXRlLmg6CisJKiBnc3QvZ3N0aW5mby5jOgorCSogZ3N0L2dzdHBvbGwuYzoKKwkgIGdzdDogQWRkIGRlYnVnZ2luZyBjYXRlZ29yeSBHU1RfUE9MTCBmb3IgZ3N0cG9sbAorCisyMDA5LTEwLTEyIDA5OjQ3OjU5ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBjb25maWd1cmUuYWM6CisJICBjb25maWd1cmUuYWM6IERldGVjdCBicm9rZW4gcG9sbCgpCisKKzIwMDktMTAtMDkgMTc6NDQ6MjggKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgYmFzZXNpbms6IGxldHMga2VlcCAtMSBmb3Igc2VnbWVuc3QgYXMgdGhleSBhcmUgZ3VpbnQ2NCBhbmQgbm90IEdzdENsb2NrVGltZQorCisyMDA5LTEwLTA5IDE3OjExOjI3ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJhc2VzaW5rOiB1c2UgR1NUX0NMT0NLX1RJTUVfTk9ORSBhbmQgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgbW9yZQorCisyMDA5LTEwLTA4IDIzOjEwOjQwICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIGdzdC9nc3RwbHVnaW5sb2FkZXIuYzoKKwkgIHBsdWdpbmxvYWRlcjogRml4IHZhbGdyaW5kIHdhcm5pbmdzIGJ5IHplcm9pbmcgcGFkZGluZyBieXRlcy4KKworMjAwOS0xMC0wOCAxNzoxOTozOCArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiB0ZXN0cy9jaGVjay9saWJzL2J5dGVyZWFkZXIuYzoKKwkgIGNoZWNrOiBIb3BlZnVsbHkgZml4IGFuICdtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkJyB3YXJuaW5nIG9uIE9TL1gKKworMjAwOS0xMC0wOCAxNjoyMTo0NSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBnc3QvZ3N0cmVnaXN0cnljaHVua3MuYzoKKwkgIHJlZ2lzdHJ5Y2h1bmtzOiBGaXggYSBkZWJ1ZyBmb3JtYXQgc3RyaW5nIGhhcmRlciB0byBzYXRpc2Z5IE9TL1gncyBnY2MuCisKKzIwMDktMTAtMDggMTY6MDU6MDggKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmM6CisJICByZWdpc3RyeWNodW5rczogRml4IGZvcm1hdCBzdHJpbmcgZm9yIGRlYnVnIGVycm9yIG1lc3NhZ2UuCisKKzIwMDktMTAtMDggMTU6MjE6NDggKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogZ3N0L2dzdHBsdWdpbmxvYWRlci5jOgorCSAgcGx1Z2lubG9hZGVyOiBNb3ZlIHN0ZGluIGFuZCBzdGRvdXQgb3V0IG9mIGhhcm0ncyB3YXkKKwkgIEluIHRoZSBwbHVnaW4gbG9hZGVyIHN1YnByb2Nlc3MsIG1vdmUgc3RkaW4gYW5kIHN0ZG91dCB0byBuZXcgZmQncworCSAgc28gdGhhdCBwbHVnaW5zIHByaW50aW5nIHRoaW5ncyBkdXJpbmcgcGx1Z2luIGluaXQgb3IgKCpnYXNwKikKKwkgIHBvc3NpYmx5IHJlYWRpbmcgZnJvbSBzdGRpbiBkb24ndCBpbnRlcmZlcmUgd2l0aCB0aGUgZGF0YSBzZW50IHRvCisJICBhbmQgZnJvbSB0aGUgcGFyZW50LgorCisyMDA5LTEwLTA4IDExOjE3OjE0ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKKwkgIHBsdWdpbiBkb2NzOiBBZGQgR1NUX1BMVUdJTl9TQ0FOTkVSIGVudiB2YXIgdG8gdGhlIGluc3BlY3QgZW52aXJvbm1lbnQKKworMjAwOS0xMC0wOCAxMDo1OToxNSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBjb21tb246CisJICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKKwkgIEZyb20gMzdmODk4YiB0byBhM2UzY2U0CisKKzIwMDktMTAtMDggMTA6Mzk6MjggKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogdGVzdHMvY2hlY2svbGlicy8uZ2l0aWdub3JlOgorCSAgZ2l0aWdub3JlczogSWdub3JlIHRoZSBieXRld3JpdGVyIGNoZWNrIGJpbmFyeQorCisyMDA5LTEwLTA4IDEwOjM2OjU2ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSAgcmVnaXN0cnk6IEZpeCBlcnJvciBoYW5kbGluZyBpbiB0aGUgcmVnaXN0cnkgbG9hZGVyCisJICBXaGVuIHRoZSBwbHVnaW4tc2Nhbm5lciBsb2FkIGZhaWxzIChiZWNhdXNlIHRoZSBoZWxwZXIgY2FuJ3QgYmUKKwkgIHNwYXduZWQpLCBtYWtlIHN1cmUgdG8gbG9hZCB0aGUgcGx1Z2luIHRoYXQgZmFpbGVkIGluLXByb2Nlc3MsIHNvCisJICB0aGF0IGFsbCBwbHVnaW5zIGRvIGdldCBsb2FkZWQuCisKKzIwMDktMTAtMDggMTA6MjY6MjcgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogdGVzdHMvZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlLmFtOgorCSAgY2hlY2s6IEZpeCB0ZXN0IHJ1biBpbiB0ZXN0cy9leGFtcGxlcy9tYW51YWwKKwkgIEFkZCB0aGUgR1NUX1BMVUdJTl9TQ0FOTkVSIGVudiB2YXIgdG8gdGhlIGNoZWNrIGVudmlyb25tZW50IGhlcmUgdG9vCisJICBzbyB0aGF0IGl0IGRvZXNuJ3QgZmFpbCB3aGVuIG5vIGluc3RhbGxlZCBzY2FubmVyIGlzIGF2YWlsYWJsZS4KKworMjAwOS0xMC0wOCAwOTozNDo0NyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RpbmZvLmM6CisJICBnc3RpbmZvOiBhZGQgYmFjayBmaXggdGhhdCBzaG91bGRuJ3QgaGF2ZSBiZWVuIHJldmVydGVkCisKKzIwMDktMTAtMDggMTA6NDc6NDQgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSAgcXVldWU6IG1vcmUgcXVldWUgb3B0aW1pemF0aW9ucworCSAgU3BsaXQgZ3N0X3F1ZXVlX2xvY2tlZF9lbnF1ZXVlKCkgaW50byB2YXJpYW50IGZvciBidWZmZXIgYW5kIGV2ZW50IHRvIGdldCByaWQgb2YKKwkgIHRoZSBpZigpIGFuZCBtYWtlIHRoZSBjb2RlIG1vcmUgcmVhZGFibGUgKGNvbnN0YW50IGJvb2xlYW4gcGFyYW1ldGVycyBhcmUgbmV2ZXIKKwkgIG5pY2UpLiBSZW1vdmVzIHRoZSBpZiAoaXRlbSkgY2hlY2tzIGFzIHdlIGRlcmVmZXJlbmNlIHRoZSBwb2ludGVyIGJlZm9yZSBhbnl3YXkuCisJICBBbHNvIGFwcGx5IHRoZSBzYW1lIGlkZWEgb2YgcmV1c2luZyB0aGUgcHJldmlvdXMga25vd2xlZGdlIGluCisJICBnc3RfcXVldWVfbG9ja2VkX2RlcXVldWUgdG8gcmVtb3ZlIG1vcmUgdHlwZSBjaGVja3MuCisKKzIwMDktMTAtMDggMTA6NTE6NDkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6CisJICBtdWx0aXF1ZXVlOiBzcGxpdCBnc3RfbXVsdGlfcXVldWVfaXRlbV9uZXcKKwkgIFNwbGl0IGdzdF9tdWx0aV9xdWV1ZV9pdGVtX25ldyBpbnRvIGJ1ZmZlciBhbmQgZXZlbnQgdmFyaWFudCB0byBtYWtlIHNhdmUgYW4gaWYKKwkgIGFuZCBtYWtlIGNvZGUgbW9yZSByZWFkYWJsZS4KKworMjAwOS0xMC0wOCAwODo1NTo1OSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6CisJICBwbHVnaW5zL2dzdGZpbGVzcmM6IE1ha2UgYSBmYXN0LXBhdGggZm9yIGxlbmd0aCA9PSAwIGJ1ZmZlciBjcmVhdGlvbi4KKwkgIElmIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoIGlzIDAsIHdlIGRvbid0IG5lZWQgdG8gcmVhZCBhbnl0aGluZyBmcm9tIHRoZSBmaWxlLgorCisyMDA5LTEwLTA4IDA4OjU1OjIzICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBsaWJzL2dzdC9jaGVjay9nc3Rjb25zaXN0ZW5jeWNoZWNrZXIuYzoKKwkgIGdzdC9jaGVjay9jb25zaXN0ZW5jeWNoZWNrZXI6IENoZWNrIHR5cGUgb2YgbWluaW9iamVjdCBpbiBwcm9iZQorCisyMDA5LTEwLTA4IDA4OjUzOjU0ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBnc3QvYmFzZS9iYXNlc2luazogUmVtb3ZlIGRlYWQgYXNzaWdubWVudC4KKwkgIFRoZSBjb2RlIHdhcyBwcmV2aW91c2x5OgorCSAgKiBjaGVja2luZyBpZiByZXQgd2FzICE9IE9LCisJICAqIC4uIGJ1dCBpZiBpdCB3YXMgRkxPV19TVEVQLCBzd2l0aCBpdCB0byBPSworCSAgKiAuLiBhbmQgdGhlbiBub3QgdXNpbmcgcmV0CisJICBJbnN0ZWFkIHdlIGp1c3QgbWFrZSBpdCBtb3JlIGNvbXBhY3QgYnkgY2hlY2tpbmcgaWYgaXQncyBPSyBvciBTVEVQLgorCisyMDA5LTEwLTA4IDA4OjUzOjI2ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0b2JqZWN0LmM6CisJICBnc3RvYmplY3Q6IFJlbW92ZSBkZWFkIGFzc2lnbm1lbnQuCisJICBvYmplY3QgaXMgbm8gbG9uZ2VyIHVzZWQgYWZ0ZXIgdGhhdCBsaW5lCisKKzIwMDktMTAtMDggMDg6NTI6MTggKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGdzdC9nc3RpbmRleC5jOgorCSAgZ3N0aW5kZXg6IE1ha2Ugc3VyZSB3cml0ZXIgaXMgbm9uLU5VTEwuCisJICBGaXhlcyB0aGUgTlVMTCBkZXJlZmVyZW5jZSBhIGZldyBsaW5lcyBsb3dlciAod2hlcmUgaXQgZ2V0cyB0aGUgb2JqZWN0IHR5cGUpLgorCisyMDA5LTA5LTI5IDA4OjEzOjQwICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiB0ZXN0cy9iZW5jaG1hcmtzL2dzdGJ1ZmZlcnN0cmVzcy5jOgorCSAgYmVuY2htYXJrczogQ2xlYW4gdXAgZ3N0YnVmZmVyc3RyZXNzLgorCisyMDA5LTEwLTA4IDAyOjQyOjE2ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIHRlc3RzL2JlbmNobWFya3MvY29tcGxleGl0eS5jOgorCSogdGVzdHMvYmVuY2htYXJrcy9tYXNzLWVsZW1lbnRzLmM6CisJICBiZW5jaG1hcmtzOiBGaXggdGhlIGNvbXBsZXhpdHkgYW5kIG1hc3MtZWxlbWVudHMgYmVuY2htYXJrcworCisyMDA5LTEwLTA4IDAyOjIwOjUxICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RjaGlsZHByb3h5LmM6CisJICBjaGVja3M6IEZpeCBzdHJpbmcgbGVha3MgaW4gdGhlIG5ldyBjaGlsZHByb3h5IHRlc3QKKworMjAwOS0xMC0wOCAwMjowMzowOCArMDEwMCAgSmFuIFNjaG1pZHQgPGphbi5zY2htaWR0QHN1bi5jb20+CisKKwkqIGdzdC9nc3RwbHVnaW4uYzoKKwkgIHBsdWdpbjogSWdub3JlIGFuIGVtcHR5IGRlcGVuZGVuY3kgbGlzdC4KKwkgIElmIGEgcGx1Z2luIHJlZ2lzdGVycyBhbiBlbXB0eSBkZXBlbmRlbmN5IHNldCwganVzdCBpZ25vcmUgaXQgcmF0aGVyCisJICB0aGFuIHNlcmlhbGlzaW5nIGFuZCBjaGVja2luZyBhbiBlbXB0eSBzZXQuCisKKzIwMDktMTAtMDggMDI6MDE6NTQgKzAxMDAgIEphbiBTY2htaWR0IDxqYW4uc2NobWlkdEBzdW4uY29tPgorCisJKiBnc3QvZ3N0cmVnaXN0cnljaHVua3MuYzoKKwkgIHJlZ2lzdHJ5Y2h1bmtzOiBGaXggb2ZmLWJ5LW9uZSBlcnJvci4gSW1wcm92ZSBkZWJ1Zy4KKwkgIEZpeCBhbiBvZmYtYnktb25lIGVycm9yIGluIHRoZSBzaXplIGd1YXJkIGZvciB1bnBhY2tfZWxlbWVudCwgYW5kCisJICBpbXByb3ZlIHZhcmlvdXMgZGVidWcgc3RhdGVtZW50cyBpbiB0aGUgZmFpbHVyZSBwYXRocy4KKwkgIEFsc28sIHN3YXAgc29tZSBnX25ldzAgdG8gZ19tYWxsb2MwIGZvciB0aGUgZnVuIG9mIGl0LgorCisyMDA5LTEwLTA3IDE2OjAyOjU4IC0wNzAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAc29uZ2JpcmRuZXN0LmNvbT4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgorCSAgZmlsZXNpbms6IFVzZSBfd2ZvcGVuIG9uIHdpbjMyIHRvIG9wZW4gZmlsZXMgd2l0aCBub24tYXNjaWkgZmlsZW5hbWVzIGNvcnJlY3RseS4KKworMjAwOS0xMC0wNyAyMzozMToyMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuYzoKKwkgIGRvY3M6IGZpeCBTaW5jZTogdGFncyBpbiBkb2NzIGZvciBuZXdseS1hZGRlZCBBUEkKKworMjAwOS0xMC0wOCAwMDowODo0NyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0aW5mby5jOgorCSAgaW5mbzogcmV2ZXJ0IHR3byBvZiB0aGUgY2hhbmdlcworCSAgSXQgb25seSBuZWVkZWQgZm9yIHRoZSBub24gY29uc3RhbnQgc3RyaW5nLgorCisyMDA5LTEwLTA3IDIzOjM2OjQ1ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RpbmZvLmM6CisJICBpbmZvOiB1c2UgYSAiJXMiIGZvcm1hdCBzdHJpbmcgd2hlbiBwcmludGluZyB0aGUgbWVtb3J5IGR1bXAgbGluZQorCSAgV2Uga25vdyB0aGF0IHRoZSBjb250ZW50IGlzIHNhdmUsIGJ1dCB0aGUgY29tcGlsZXIgZG9lcyBub3QuCisKKzIwMDktMTAtMDcgMjM6MjM6MDggKzAzMDAgIFJvYiBDbGFyayA8cm9iQHRpLmNvbT4KKworCSogZ3N0L3BhcnNlL2dyYW1tYXIueToKKwkgIHBhcnNlOiBkb24ndCBmb3JtYXQgdGhlIHN0cmluZyB0d2ljZQorCSAgV2Ugd2VyZSBmb3JtYXR0aW5nIHRoZSBzdHJpbmcgb25jZSBhbmQgdGhlbiBwYXNzaW5nIHRoZSBzdHJpbmcgYXMgYSBmb3JtYXQKKwkgIHN0cmluZyB0byB0aGUgbG9nIGZ1bmN0aW9ucy4KKworMjAwOS0xMC0wNyAxMTo0Mzo1NCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdGdob3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkLmg6CisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIHBhZDogYWRkIHZhcmlhbnRzIG9mIGdzdF9wYWRfZ2V0X2NhcHMoKSB0aGF0IGRvbid0IGNvcHkgY2Fwcy4gRml4ZXMgIzU5MDk0MQorCSAgSW4gbW9zdCBwbGFjZXMgaW4gY29yZSBhbmQgYmFzZWNsYXNzZXMgd2UganVzdCBuZWVkIHRoZSBjYXBzIHRvIGRvIGNhcHMtCisJICBpbnRlcnNlY3Rpb25zLiBJbiB0aGF0IGNhc2UgcmVmJ2VkIGNhcHMgYXJlIGVub3VnaCAobm8gbmVlZCB0byBjb3B5KS4KKwkgIFRoaXMgcGF0Y2ggYWxzbyBzd2l0Y2hlcyB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBmdW5jdGlvbnMuCisJICBBUEk6IGdzdF9wYWRfZ2V0X2NhcHNfcmVmZWQoKSwgZ3N0X3BhZF9wZWVyX2dldF9jYXBzX3JlZmVkKCkKKworMjAwOS0wOS0yNiAyMzo0MzozNyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzoKKwkgIHRlc3RzOiBhZGQgZ2hvc3RwYWQgdGVzdCBmb3Igc2V0dGluZyB0YXJnZXQgYWdhaW4gYWZ0ZXIgcGFkIGlzIGxpbmtlZAorCisyMDA5LTA5LTI2IDIzOjQyOjIyICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgorCSAgdGVzdHM6IHJlbW92ZSBlbXB0eSBsaW5lcyBmcm9tIHdyb25nIGluZGVudCBydW4KKworMjAwOS0xMC0wNyAyMDozODo0OSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiB0ZXN0cy9jaGVjay9saWJzL2J5dGV3cml0ZXIuYzoKKwkgIGNoZWNrOiBGaXggY29tcGlsYXRpb24gb2YgdGhlIGJ5dGV3cml0ZXIgdGVzdAorCisyMDA5LTEwLTA3IDE4OjA3OjI2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgorCSAgd2luMzI6IGFkZCBuZXcgYnl0ZSB3cml0ZXIgYW5kIHJlYWRlciBBUEkgdG8gLmRlZiBmaWxlCisJICBBUEk6IGdzdF9ieXRlX3dyaXRlcl8qKCkKKworMjAwOS0wOC0yMCAxNDoyNDoxOSAtMDcwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHNvbmdiaXJkbmVzdC5jb20+CisKKwkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgorCSAgZWxlbWVudGZhY3Rvcnk6IGZpeCBzcGVsbGluZyBpbiBjb21tZW50CisKKzIwMDktMTAtMDcgMTg6NDA6NDYgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkgIG11bHRpcXVldWU6IGZsdXNoIHF1ZXVlIHVwb24gZmF0YWwgZmxvd3JldHVybiBhbmQgcmVsZWFzZSB1cHN0cmVhbSB0aHJlYWQKKworMjAwOS0wOS0yMiAxNTo0NDozMSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmM6CisJICBkYXRhcXVldWU6IGZpeCBBUEkgZG9jdW1lbnRhdGlvbiB0eXBvCisKKzIwMDktMTAtMDcgMTg6Mzc6MjggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtZG9jcy5zZ21sOgorCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkgIGJ5dGV3cml0ZXI6IEFkZCB0byB0aGUgZG9jcworCisyMDA5LTEwLTA1IDExOjI0OjM1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9jaGVjay9saWJzL2J5dGV3cml0ZXIuYzoKKwkgIGJ5dGV3cml0ZXI6IEFkZCB1bml0IHRlc3QKKworMjAwOS0xMC0wMyAxMzozMDo1NCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5oOgorCSAgYnl0ZXdyaXRlcjogQWRkIGEgZ2VuZXJpYyBieXRlIHdyaXRlcgorCSAgRml4ZXMgYnVnICM1OTA2NjkuCisKKzIwMDktMTAtMDMgMTU6NTc6MDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJpdHJlYWRlci5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiaXRyZWFkZXIuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmg6CisJICBiaXRyZWFkZXIvYnl0ZXJlYWRlcjogQVBJOiBBZGQgZ3N0XyhiaXR8Ynl0ZSlfcmVhZGVyX2dldF9zaXplKCkKKwkgIC4uLiBhbmQgR1NUXyhCWVRFfEJJVClfUkVBREVSKCkgY2FzdHMuCisKKzIwMDktMTAtMDMgMTI6MzQ6NTQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJpdHJlYWRlci5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmM6CisJICBieXRlcmVhZGVyLGJpdHJlYWRlcjogUmVtb3ZlIEZJWE1FIDAuMTEgdG8gcmVtb3ZlIG5vbi1pbmxpbmVkIGZ1bmN0aW9ucworCSAgVGhlIG5vcm1hbCBmdW5jdGlvbnMgYXJlIGFsd2F5cyB1c2VmdWwgdG8gaGF2ZSBmb3IgYmluZGluZ3MsIGVzcGVjaWFsbHkKKwkgIHJ1bnRpbWUtY3JlYXRlZCBiaW5kaW5ncyBsaWtlIFNlZWQgb3IgbmV3IEdPYmplY3QtSW50cm9zcGVjdGlvbiBiYXNlZAorCSAgUHl0aG9uIGJpbmRpbmdzLgorCisyMDA5LTEwLTA3IDE2OjM2OjMxICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RpdGVyYXRvci5jOgorCSAgY2hlY2s6IEF0dGVtcHQgdG8gZml4IHR5cGUtcHVubmluZyB3YXJuaW5nIGluIHRoZSBnc3RpdGVyYXRvciB0ZXN0CisKKzIwMDktMTAtMDcgMTY6MDA6MTIgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogdGVzdHMvY2hlY2svbGlicy9nZHAuYzoKKwkgIGNoZWNrOiBNYWtlIHN1cmUgdG8gaW5pdCB0aGUgZGF0YXByb3RvY29sIGxpYi4KKwkgIENhbGwgdGhlIGdzdF9kcF9pbml0KCkgZnVuY3Rpb24gdG8gZW5zdXJlIHRoYXQgdGhlIGRlYnVnCisJICBjYXRlZ29yeSBpcyBpbml0aWFsaXNlZCwgdG8gYXZvaWQgZ19jcml0aWNhbHMgd2hlbiBydW5uaW5nIHdpdGgKKwkgIEdTVF9ERUJVRz01CisKKzIwMDktMTAtMDcgMTU6NDc6NDUgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogdGVzdHMvY2hlY2svbGlicy9nZHAuYzoKKwkgIGNoZWNrOiBVc2UgR1NUX0RFQlVHIGluc3RlYWQgb2YgZ19tZXNzYWdlIGluIHRoZSBnZHAgdGVzdAorCisyMDA5LTEwLTA3IDE1OjE0OjQ2ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSAgY2hlY2s6IEFkZCBHU1RfUExVR0lOX1NDQU5ORVIgZW52IHZhciB0byB0aGUgY2hlY2sgZW52aXJvbm1lbnQKKworMjAwOS0xMC0wNyAxNDozNDoxNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSAgcmVnaXN0cnk6IGltcHJvdmUgcGx1Z2luIGxvYWRlciBmYWlsdXJlIG1lc3NhZ2UgZm9yIHVuaW5zdGFsbGVkIHNldHVwcworCSAgRXZlcnlvbmUgcnVubmluZyBhbiB1bmluc3RhbGxlZCBnaXQgc2V0dXAgaXMgZ29pbmcgdG8gd29uZGVyIGFib3V0CisJICB0aGlzIGZhaWx1cmUgbmV4dCB0aW1lIHRoZXkgdXBkYXRlLCBzbyBsZXQncyBtZW50aW9uIHRoZSBzb2x1dGlvbgorCSAgaW4gdGhlIGVycm9yIG1lc3NhZ2UuCisKKzIwMDktMTAtMDcgMTM6NTk6NDcgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogY29uZmlndXJlLmFjOgorCSAgY29uZmlndXJlOiBCZWVmIHVwIHRoZSB0ZXN0IGZvciBfX3VpbnQxMjhfdCBvbiBHQ0MKKwkgIEdDQyAzLjQuMyBvbiB0aGUgU1BBUkMgYnVpbGRib3QgY3Jhc2hlcyB3aGVuIGFjdHVhbGx5CisJICB1c2luZyBfX3VpbnQxMjhfdC4gQmVlZiB1cCB0aGUgY29uZmlndXJlIHRlc3QgdG8gZGV0ZWN0IHRoYXQgdGhlCisJICB0eXBlIGlzIGFjdHVhbGx5IHVzYWJsZS4KKworMjAwOS0xMC0wNyAwOTo1Njo0MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKKwkgIHdpbjMyOiBhZGQgbmV3IEFQSSB0byAuZGVmIGZpbGUKKwkgIEFuZCBhZGQgQVBJOiBtYXJrZXIgaW4gY29tbWl0IG1lc3NhZ2UgdGhhdCB3YXMgb21pdHRlZCBpbiB0aGUgb3JpZ2luYWwKKwkgIGNvbW1pdDoKKwkgIEFQSTogZ3N0X2RhdGFfcXVldWVfbmV3X2Z1bGwoKQorCisyMDA5LTEwLTA3IDA5OjU1OjE1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvYmVuY2htYXJrcy8uZ2l0aWdub3JlOgorCSAgYmVuY2htYXJrczogYWRkIGJ1ZmZlcnN0cmVzcyBiaW5hcnkgdG8gLmdpdGlnbm9yZQorCisyMDA5LTEwLTA3IDA5OjQyOjU1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogY29uZmlndXJlLmFjOgorCSAgY29uZmlndXJlOiBidW1wIEdMaWIgcmVxdWlyZW1lbnQgdG8gMi4xOAorCSAgQnVtcCBHTGliIHJlcXVpcmVtZW50IGFzIHBlciB0aGUgcmVsZWFzZSBwbGFubmluZyBkb2NzLgorCisyMDA5LTEwLTA3IDEwOjM3OjM5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0bWVzc2FnZS5oOgorCSAgbWVzc2FnZTogd2hpdGVzcGFjZSBmaXhlcworCisyMDA5LTEwLTA3IDExOjEyOjU3ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3R1dGlscy5jOgorCSAgcGFkOiBmbGlwIHRoZSBHX1VOTElLRUxZCisJICBJdHMgbGlrZWx5IHRoYXQgd2UgaGF2ZSBjYXBzIGFuZCB1bmxpa2VseSAoZXJyb3IpIG90aGVyd2lzZS4KKworMjAwOS0xMC0wNyAxMTowNDo1NiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSAgZG9jczogYWRkIG5ldyBxdWV1ZSBhcGkgdG8gdGhlIGRvY3MgdG8gZml4IHRoZSBidWlsZAorCisyMDA5LTA5LTI4IDE1OjI1OjIyICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkgIHBsdWdpbnMvbXVsdGlxdWV1ZTogQXZvaWQgaW5zdGFuY2UgY2hlY2sKKwkgIFdlIGtub3cgZWFybGllciBvbiBpbiB0aGUgY29kZSB3aGV0aGVyIHdlJ3JlIGhhbmRsaW5nIGFuIGV2ZW50IG9yIGEgYnVmZmVyLAorCSAganVzdCBwYXNzIHRoYXQgaW5mb3JtYXRpb24gdGhyb3VnaC4KKwkgIFRoaXMgY29tbWl0IGFuZCB0aGUgcHJldmlvdXMgY29tbWl0IHJlZHVjZSBpbnN0cnVjdGlvbiBmZXRjaDoKKwkgICogd2hlbiBwdXNoaW5nIGJ1ZmZlciAoX2NoYWluKSBieSAxMCUKKwkgICogd2hlbiBwb3BwaW5nIGJ1ZmZlciAoX2xvb3ApIGJ5IDMlCisKKzIwMDktMDktMjggMTU6MjQ6MDIgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgorCSAgcGx1Z2lucy9tdWx0aXF1ZXVlOiBDYWNoZSBpbnB1dC9vdXRwdXQgdGltZSwgYXZvaWQgZXhwZW5zaXZlIGNhbGxzLgorCSAgKiBDYWNoZSB0aGUgaW5wdXQvb3V0cHV0IHRpbWUKKwkgICogT25seSByZWNhbGN1bGF0ZSBpdCB3aGVuIG5lZWRlZC4KKwkgIEF2b2lkcyA1MCUgY2FsbHMgdG8gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lCisKKzIwMDktMTAtMDcgMTA6MDA6MDUgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZG9jcy9tYW51YWwvYmFzaWNzLWluaXQueG1sOgorCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzoKKwkqIGdzdC9nc3R2YWx1ZS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5oOgorCSogdGVzdHMvYmVuY2htYXJrcy9nc3RidWZmZXJzdHJlc3MuYzoKKwkqIHRlc3RzL2JlbmNobWFya3MvZ3N0Y2xvY2tzdHJlc3MuYzoKKwkqIHRlc3RzL2JlbmNobWFya3MvZ3N0cG9sbHN0cmVzcy5jOgorCSogdGVzdHMvZXhhbXBsZXMvbGF1bmNoL21wM3BhcnNlbGF1bmNoLmM6CisJKiB0b29scy9nc3QtbGF1bmNoLmM6CisJICBidWlsZDogc3ByaW50Ziwgc3NjYW5mIG5lZWQgc3RkaW8uaAorCisyMDA5LTEwLTA1IDExOjQ2OjM0ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RjaGlsZHByb3h5LmM6CisJKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL2NoZWNrL2dzdC8uZ2l0aWdub3JlOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNoaWxkcHJveHkuYzoKKwkgIGNoaWxkcHJveHk6IGluaXRpYWxpemUgZ3ZhbHVlIGluIF92YWxpc3QgZnVuY3Rpb24uIEZpeGVzICM1OTU2MDIKKwkgIFJlZmxvdyB0aGUgY29kZSB0byBtb3ZlIGVycm9yIGhhbmRsaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9ucy4gSW5pdGlhbGl6ZQorCSAgZ3ZhbHVlIGxpa2Ugd2UgZG8gaW4gdGhlIHNldHRlci4gQWRkIGEgdW5pdC10ZXN0IG1vZHVsZSB3aXRoIHR3byBzaW1wbGUgdGVzdHMKKwkgIHRoZSBjYXRjaGUgdGhpcyBidWcuCisKKzIwMDktMTAtMDEgMTc6Mzk6NDUgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdHV0aWxzLmM6CisJICBwYWQ6IGRvbid0IGludGVyc2VjdCB3aXRoIGFueSBpbiBwcm94eV9wYWRfZ2V0X2NhcHMKKwkgIFdlIGluaXRpYWxpemUgdGhlIGNhcHMgd2l0aCBhbnkgYW5kIGlmIGEgcGFkIGhhcyBOVUxMIGNhcHMsIGp1c3Qgc2tpcCBpdCBpbnN0ZWFkCisJICBvZiBpbnRlcnNlY3Rpbmcgd2l0aCBhbnkuIEFsc28gYWRkIGJyYW5jaCBwcmVkaWN0aW9uIGhlcmUuCisKKzIwMDktMDktMzAgMTY6NDE6MDcgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdHV0aWxzLmM6CisJICBkb2NzOiByZW5hbWUgYWdncmVnYXRvciB0byBhZGRlciBpbiB0aGUgZG9jcy4KKworMjAwOS0wOS0zMCAwOTo0NzoyMyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiB0b29scy9nc3QtbGF1bmNoLjEuaW46CisJICBtYW46IGZpeCBjb3B5IGFuZCBwYXN0IG1pc3Rha2UgZm9yIC1xIG9wdGlvbgorCisyMDA5LTEwLTA3IDA5OjU0OjQxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOgorCSAgZ3N0LXVuaW5zdGFsbGVkOiBFeHRlbmQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGFsbG93IHVzaW5nIGFuIHVuaW5zdGFsbGVkIGdzdHJlYW1lci1zaGFycAorCisyMDA5LTA5LTI4IDE1OjE5OjQ0ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkgIHBsdWdpbnMvbXVsdGlxdWV1ZTogVXNlIG5ldyBHc3REYXRhUXVldWUgY29uc3RydWN0b3IKKworMjAwOS0wOS0yOCAxNToxODozNyArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmg6CisJICBnc3RkYXRhcXVldWU6IG5ldyBjb25zdHJ1Y3RvciB3aGljaCB0YWtlcyBjYWxsYmFja3MuCisJICBUaGlzIGFsbG93cyB1cyB0byBhdm9pZCBnb2luZyB0aHJvdWdoIGdsaWIncyBzaWduYWxsaW5nIHN5c3RlbQorCisyMDA5LTA5LTI4IDEzOjE5OjEwICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkgIHBsdWdpbnMvbXVsdGlxdWV1ZTogVXNlIGNhY2hlZCB2YWx1ZSBpbnN0ZWFkIG9mIGV4cGVuc2l2ZSBvYmplY3QgZ2V0LgorCSAgVGhlIHRhc2sgd2lsbCBhbHdheXMgZXhpc3QgYXMgbG9uZyBhcyBpdHMgb3duZXIgKGkuZS4gdGhlIHBhZCkgYW5kIHRoYXQKKwkgIG93bmVyJ3Mgb3duZXIgKGkuZS4gbXVsdGlxdWV1ZSkgZXhpc3QuCisJICBSZWR1Y2VzIHRoZSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb24gZmV0Y2hlcyBieSAzNiUuCisKKzIwMDktMDktMjggMTU6NDE6NTIgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkgIHBsdWdpbnMvcXVldWU6IFVzZSBwcmV2aW91cyBrbm93bGVkZ2Ugb2YgZGF0YSB0eXBlIHRvIGF2b2lkIHR5cGVjaGVjay4KKwkgIFdlIGtub3cgd2hldGhlciB3ZSBoYXZlIGEgYnVmZmVyIG9yIGFuIGV2ZW50LCB1c2UgdGhhdCBpbnN0ZWFkIG9mIGdvaW5nCisJICB0cm91Z2ggdGhlIGV4cGVuc2l2ZSBHTGliIHR5cGVjaGVjay4KKwkgIFRoZSBvdmVyYWxsIGluc3RydWN0aW9uIGZldGNoIHJlZHVjdGlvbiBpbnRyb2R1Y2VkIGJ5IHRoaXMgY29tbWl0IGFuZCB0aGUKKwkgIDIgcHJldmlvdXMgY29tbWl0czoKKwkgICogcmVjZWl2aW5nIGEgYnVmZmVyIChfY2hhaW4pIGJ5IDIwJQorCSAgKiBwb3BwaW5nIGEgYnVmZmVyIChfbG9vcCkgYnkgMTQlCisJICBOdW1iZXJzIGFjcXVpcmVkIHRocm91Z2ggY2FsbGdyaW5kIHBhc3NpbmcgMTAwMDAwIGJ1ZmZlcnMgdGhyb3VnaCBxdWV1ZS4KKworMjAwOS0wOS0yOCAxNToyMDowNiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5oOgorCSAgcGx1Z2lucy9xdWV1ZTogQXZvaWQgdXNlbGVzcyBzZWdtZW50X3RvX3J1bm5pbmdfdGltZSgpIGNhbGN1bGF0aW9ucy4KKwkgICogQ2FjaGUgc3JjIGFuZCBzaW5rIHRpbWUKKwkgICogVXNlIGEgYm9vbGVhbiB0byBrbm93IHdoZXRoZXIgc3JjL3NpbmsgdGltZSBuZWVkIHRvIGJlIHJlY2FsY3VsYXRlZAorCSAgQXZvaWRzIDUwJSBjYWxscyB0byBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUoKQorCisyMDA5LTA5LTI4IDEzOjIxOjA3ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6CisJICBwbHVnaW5zL3F1ZXVlOiBKdXN0IGNhc3QgdG8gdGhlIG9iamVjdCBwYXJlbnQgaW5zdGVhZCBvZiB0eXBlY2hlY2tpbmcuCisKKzIwMDktMDktMjMgMTY6MTk6MzIgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIHRlc3RzL2JlbmNobWFya3MvTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9iZW5jaG1hcmtzL2dzdGJ1ZmZlcnN0cmVzcy5jOgorCSAgYmVuY2htYXJrOiBOZXcgYmVuY2htYXJrIGZvciB0ZXN0aW5nIGNvbnRlbnRpb24gd2hlbiBjcmVhdGluZyBidWZmZXJzCisKKzIwMDktMDktMjMgMTY6MTc6MDkgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIHRvb2xzL2dzdC1sYXVuY2guYzoKKwkgIGdzdC1sYXVuY2g6IERvbid0IGFjdGl2YXRlIHRyYWNpbmcgaWYgbm90IHJlcXVlc3RlZC4KKworMjAwOS0xMC0wNyAwODozNzowNSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogdGVzdHMvY2hlY2svbGlicy9ieXRlcmVhZGVyLmM6CisJICB0ZXN0czogaW5pdCBtb3JlIHZhcmlhYmxlcyB0byBhdm9pZCBjb21waWxlciB3YXJuaW5nIG9uIG9zeAorCSAgSW5pdCB2YXJpYWJsZSB0byBhdm9pZCBjb21waWxlciB3YXJuaW5nIGFuZCBtYWtlIHRoZSBidWlsZCBib3QgaGFwcHkKKwkgICh0aGUgY29tcGlsZXIgbW9zdCBsaWtlbHkgY29tcGxhaW5zIGFib3V0IHRoaXMgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cKKwkgIGhlcmUgdGhhdCBmYWlsX3VubGVzcyB3aWxsIGFib3J0L2V4aXQgaW4gdGhlIHBhdGggd2hlcmUgaXQgZmFpbHMpLgorCisyMDA5LTA5LTI2IDExOjQzOjA2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6CisJICBtdWx0aXF1ZXVlOiBJbXByb3ZlIGl0ZXJhdGUgaW50ZXJuYWwgbGlua3MgZnVuY3Rpb24KKwkgIFBhZHMgaGF2ZSB0aGVpciBHc3RTaW5nbGVRdWV1ZSBzdG9yZWQgYXMgZWxlbWVudCBwcml2YXRlIGRhdGEKKwkgIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBpdGVyYXRlIG92ZXIgdGhlIGxpc3Qgb2Ygc2luZ2xlIHF1ZXVlcworCSAgZXZlcnkgdGltZS4gQWxzbyBldmVyeSBwYWQgb25seSBoYXMgYSBzaW5nbGUgaW50ZXJuYWwgbGluayBzbworCSAgdXNlIGEgc2luZ2xlIGl0ZXJhdG9yIGluc3RlYWQgb2YgYSBjb21wbGV4IGN1c3RvbSBpdGVyYXRvci4KKwkgIFNldCB0aGUgZWxlbWVudCBwcml2YXRlIGRhdGEgb2YgdGhlIHBhZCB0byBOVUxMIHdoZW4gZnJlZWluZyB0aGUKKwkgIHNpbmdsZSBxdWV1ZS4KKworMjAwOS0wOS0xNyAxNjozMDo0MyAtMDQwMCAgSm9oYW4gQmlsaWVuIDxqb2JpQGxpdGwuY29tPgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIGludHJvc3BlY3Rpb246IEFkZCBhbm5vdGF0aW9ucyBmb3IgZ3N0X2VsZW1lbnRfcXVlcnlfe2R1cmF0aW9uLHBvc2l0aW9ufQorCSAgRml4ZXMgYnVnICM1OTU1MTEuCisKKzIwMDktMTAtMDUgMDA6MTE6MjAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5oOgorCSAgYnl0ZXJlYWRlcjogYWRkIGlubGluZSB2ZXJzaW9uIG9mIGdzdF9ieXRlX3JlYWRlcl9za2lwCisKKzIwMDktMTAtMDcgMDA6NDc6NTkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmUucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kYS5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9lcy5wbzoKKwkqIHBvL2V1LnBvOgorCSogcG8vZmkucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2h1LnBvOgorCSogcG8vaWQucG86CisJKiBwby9pdC5wbzoKKwkqIHBvL2phLnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3BsLnBvOgorCSogcG8vcHRfQlIucG86CisJKiBwby9ydS5wbzoKKwkqIHBvL3J3LnBvOgorCSogcG8vc2sucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJKiBwby96aF9DTi5wbzoKKwkqIHBvL3poX1RXLnBvOgorCSAgcG86IHVwZGF0ZSB0cmFuc2xhdGlvbiBmaWxlcyBmb3IgbmV3IGFuZCBjaGFuZ2VkIHN0cmluZ3MKKworMjAwOS0wOS0yOCAyMjo0Mzo1MSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGdob3N0cGFkLmM6CisJICBnaG9zdHBhZDogdGFrZSBsb2NrcyBhcm91bmQgc21hbGxlciBzZWN0aW9uCisJICBXZSBkb24ndCBuZWVkIHRoZSBob2xkIHRoZSBwcm94eSBtdXRleCBsb2NrZWQgZm9yIGdldHRpbmcgdGhlIGludGVybmFsIHBhZCBhbmQKKwkgIGZvciBsaW5raW5nIHRoZSBuZXcgdGFyZ2V0IHBhZCB3aGVuIHdlIHJldGFyZ2V0LiBTbyB0YWtlIHRoZSBsb2NrIGEgbGl0dGxlIGxhdGVyCisJICBhbmQgcmVsZWFzZSBpdCBlYXJsaWVyLgorCSAgRml4ZXMgIzU5NjM2NgorCisyMDA5LTEwLTA0IDE5OjUxOjQwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svbGlicy9ieXRlcmVhZGVyLmM6CisJICB0ZXN0czogaW5pdCB2YXJpYWJsZSB0byBhdm9pZCBjb21waWxlciB3YXJuaW5nIG9uIG9zeAorCSAgSW5pdCB2YXJpYWJsZSB0byBhdm9pZCBjb21waWxlciB3YXJuaW5nIGFuZCBtYWtlIHRoZSBidWlsZCBib3QgaGFwcHkKKwkgICh0aGUgY29tcGlsZXIgbW9zdCBsaWtlbHkgY29tcGxhaW5zIGFib3V0IHRoaXMgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cKKwkgIGhlcmUgdGhhdCBmYWlsX3VubGVzcyB3aWxsIGFib3J0L2V4aXQgaW4gdGhlIHBhdGggd2hlcmUgaXQgZmFpbHMpLgorCisyMDA5LTEwLTAzIDIxOjA4OjU0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJpbi5jOgorCSogZ3N0L2dzdGluZGV4LmM6CisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzoKKwkqIGdzdC9nc3R4bWwuYzoKKwkqIGdzdC9wYXJzZS9ncmFtbWFyLnk6CisJICBnc3Q6IHJlbW92ZSBtb3JlIHVubmVjZXNzYXJ5IGNhc3Qgd2hlbiB1c2luZyBnX3NpZ25hbF8qKCkKKworMjAwOS0xMC0wMyAyMDo0OTo1NCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSAgZGF0YXF1ZXVlLCBlbGVtZW50czogYXZvaWQgdW5uZWNlc3NhcnkgcnVudGltZSB0eXBlIGNoZWNrcworCisyMDA5LTEwLTA1IDE2OjQxOjUwICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIGRvY3MvcmFuZG9tL3JlbGVhc2U6CisJICBkb2NzOiBVcGRhdGUgdGhlIHJlbGVhc2Ugc2NyaXB0CisJICBSZW1vdmUgb2xkIGNydWZ0IGZyb20gdGhlIHJlbGVhc2Ugc2NyaXB0LCBhbmQgY2hhbmdlIHNvbWUgQ1ZTCisJICByZWZlcmVuY2VzIHRvIGVxdWl2YWxlbnQgZ2l0IGNvbW1hbmRzCisKKzIwMDktMTAtMDQgMTQ6MzA6MzQgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogZ3N0L2dzdHBsdWdpbmxvYWRlci5jOgorCSAgcGx1Z2lubG9hZGVyOiBBZGQgYSBtYWdpYyBudW1iZXIgYW5kIG1heGltdW0gc2l6ZSBsaW1pdC4KKwkgIEd1YXJkIGFnYWluc3QgYSBob3N0aWxlIGNoaWxkIHByb2Nlc3MgdGhhdCBzZW5kcyBib2d1cyBkYXRhCisJICBkdWUgdG8gbWVtb3J5IGNvcnJ1cHRpb24gYnkgYWRkaW5nIGEgbWFnaWMgbnVtYmVyIHRvIGVhY2ggcGFja2V0LAorCSAgYW5kIGxpbWl0IHRoZSBtYXhpbXVtIHNpemUgb2YgYW55IG1lc3NhZ2UgdG8gMzJNQgorCisyMDA5LTAyLTA5IDEzOjMzOjA3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIGdzdC9nc3RwbHVnaW5sb2FkZXIuYzoKKwkgIHJlZ2lzdHJ5OiBBbHNvIGNoZWNrIHRoZSBiaW5hcnkgcmVnaXN0cnkgY2h1bmsgdmVyc2lvbiBvZiB0aGUgY2hpbGQuCisJICBXaGVuIHRyeWluZyB0byBmaW5kIGEgZnVuY3Rpb24gcGx1Z2luLXNjYW5uZXIsIGluY2x1ZGUgYSBjaGVjayBvbiB0aGUKKwkgIHZlcnNpb24gb2YgdGhlIGJpbmFyeSByZWdpc3RyeSBjaHVua3MgaXQgc2VuZHMsIHRvIG1ha2Ugc3VyZSBpdCdzCisJICB3aGF0IHdlIHVuZGVyc3RhbmQuCisKKzIwMDktMDItMDYgMDk6NDk6MzQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogY29uZmlndXJlLmFjOgorCSogZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOgorCSogZ3N0L2dzdHBsdWdpbmxvYWRlci5jOgorCSogbGlicy9nc3QvaGVscGVycy9NYWtlZmlsZS5hbToKKwkgIHJlZ2lzdHJ5OiBTdXBwb3J0IGluc3RhbGxlZC91bmluc3RhbGxlZCBwbHVnaW4tc2Nhbm5lciBoZWxwZXIKKwkgIEFkZCBhIHNpbXBsZSB2ZXJzaW9uIGNoZWNrIHdoZW4gc3RhcnRpbmcgdGhlIHBsdWdpbi1zY2FubmVyIHNvIHdlIGNhbgorCSAgdmVyaWZ5IHdlJ3JlIHRhbGtpbmcgdG8gb25lIHRoYXQgdGFsa3MgdGhlIHNhbWUgbGFuZ3VhZ2UuCisJICBGaXJzdCB0cnkgYSBwbHVnaW4tc2Nhbm5lciBpbiB0aGUgaW5zdGFsbGVkIHBhdGgsIHRoZW4gdHJ5IG9uZSB2aWEgdGhlCisJICBHU1RfUExVR0lOX1NDQU5ORVIgZW52IHZhciBpZiB0aGF0IGRvZXNuJ3Qgd29yay4KKwkgIFVwZGF0ZSB0aGUgdW5pbnN0YWxsZWQgc2NyaXB0LgorCSAgSW5zdGFsbCB0aGUgcGx1Z2luLXNjYW5uZXIgdG8gdGhlIGxpYmV4ZWMgZGlyCisKKzIwMDktMDEtMzAgMTQ6MTg6MTMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogY29uZmlndXJlLmFjOgorCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6CisJICBSZW1vdmUgY2hlY2tpbmcgZm9yIGFuZCBtZW50aW9ucyBvZiBmb3JrIHdoZXJlIHBvc3NpYmxlLgorCSAgV2Ugbm8gbG9uZ2VyIHVzZSBmb3JrKCkgZGlyZWN0bHksIGluc3RlYWQgdXNpbmcgZ2xpYidzIHNwYXduCisJICBmdW5jdGlvbmFsaXR5LCBzbyBkb24ndCBjaGVjayBmb3IgaXQsIGFuZCBkb24ndCB1c2UgaXQgaW4gdGhlCisJICBkb2N1bWVudGF0aW9uIG5vdGVzLgorCisyMDA5LTAxLTMwIDEzOjA2OjEzICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RyZWdpc3RyeS5jOgorCSAgUmUtZW5hYmxlIGFuZCBmaXggZGlzYWJsZWQgYml0IG9mIHRoZSByZWdpc3RyeSB0ZXN0CisKKzIwMDktMDEtMzAgMTM6MDQ6NTIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6CisJICBPbmx5IGxvYWQgdGhlIHJlZ2lzdHJ5IGNhY2hlIG9uY2UgcGVyIHByb2Nlc3MuCisJICBXaGVuIHVwZGF0aW5nIHRoZSByZWdpc3RyeSwgd2UgZG9uJ3QgbmVlZCB0byByZS1yZWFkIHRoZSByZWdpc3RyeSBjYWNoZQorCSAgYW5kIHdhc3RlIHRpbWUgcmVwbGFjaW5nIGFsbCBvdXIgZXhpc3RpbmcsIGhvcGVmdWxseSBpZGVudGljYWwsIHBsdWdpbnMKKwkgIGFuZCBmZWF0dXJlcyB0aGF0IHdlJ3JlIGFib3V0IHRvIHJlLXNjYW4gYW55d2F5LgorCisyMDA5LTAxLTI5IDEzOjIyOjE0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIGdzdC9nc3RwbHVnaW4uYzoKKwkqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSAgQWRkIHNvbWUgbW9yZSBkZWJ1ZyB0aGUgcmVnaXN0cnkuCisJICBBZGQgdGhlIGZ1bGwgc2V0IG9mIGRlYnVnIGFib3V0IHdoeSBpdCdzIGRlY2lkZWQgdGhhdCBhIGdpdmVuIHBsdWdpbiBpcworCSAgc3RhbGUgb3Igbm90LCBhbmQgaW5jbHVkZSB0aGUgcGx1Z2luIG5hbWUgd2hlbiBmaW5hbGl6aW5nIGl0LgorCisyMDA5LTAxLTIzIDIxOjE1OjQzICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIGdzdC9nc3RwbHVnaW4uaDoKKwkqIGdzdC9nc3RwbHVnaW5sb2FkZXIuYzoKKwkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5jOgorCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKKwkgIEFkZCByZXN0YXJ0aW5nIG9mIHRoZSBwbHVnaW4gbG9hZGVyIGFuZCBibGFja2xpc3Rpbmcgb2YgYnJva2VuIGZpbGVzCisKKzIwMDktMDEtMjMgMTU6NDc6MDggKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogZ3N0L2dzdHBsdWdpbmxvYWRlci5jOgorCSogZ3N0L2dzdHBsdWdpbmxvYWRlci5oOgorCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6CisJICBQbHVnaW4gbG9hZGVyIHBoYXNlIDIKKwkgIHBoYXNlIDIgLSBtYWtlIHRoZSBwbHVnaW4gbG9hZGVyIHJlY2VpdmUgdGhlIGxpc3Qgb2YgcGx1Z2lucyB0byBsb2FkIGFuZAorCSAgc2VuZCBiYWNrIHRoZSByZXN1bHRzIGFzeW5jaHJvbm91c2x5LCBzbyB3ZSBkb24ndCBjb250ZXh0IHN3aXRjaCBiYWNrCisJICBhbmQgZm9ydGggc28gbXVjaC4KKworMjAwOS0wMy0xNCAyMzowNzo0MCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBjb25maWd1cmUuYWM6CisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L01ha2VmaWxlLmFtOgorCSogZ3N0L2dzdF9wcml2YXRlLmg6CisJKiBnc3QvZ3N0cGx1Z2lubG9hZGVyLmM6CisJKiBnc3QvZ3N0cGx1Z2lubG9hZGVyLmg6CisJKiBnc3QvZ3N0cmVnaXN0cnkuYzoKKwkqIGdzdC9nc3RyZWdpc3RyeS5oOgorCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6CisJKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuaDoKKwkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5jOgorCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmg6CisJKiBsaWJzL2dzdC9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2hlbHBlcnMvLmdpdGlnbm9yZToKKwkqIGxpYnMvZ3N0L2hlbHBlcnMvTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9oZWxwZXJzL3BsdWdpbi1zY2FubmVyLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cmVnaXN0cnkuYzoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgcmVnaXN0cnk6IEFkZCByZWdpc3RyeSBoZWxwZXIgcGhhc2UgMQorCSAgUGhhc2UgMSBvZiBhZGRpbmcgdGhlIHJlZ2lzdHJ5IHNjYW4gaGVscGVyCisKKzIwMDktMDktMTQgMjM6MzE6MTAgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogZ3N0L2dzdC5jOgorCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6CisJICByZWdpc3RyeTogUmVhcnJhbmdlIHNvbWUgdGhpbmdzLgorCSAgUHJlcGFyZSB0byBsYW5kIHRoZSBleHRlcm5hbCBwbHVnaW4gaGVscGVyIHByb2Nlc3MKKworMjAwOS0xMC0wNiAxOTo0MTozOCArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBjb25maWd1cmUuYWM6CisJICBCYWNrIHRvIGRldmVsb3BtZW50IC0+IDAuMTAuMjUuMQorCis9PT0gcmVsZWFzZSAwLjEwLjI1ID09PQorCisyMDA5LTEwLTA1IDEyOjU3OjAzICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIENoYW5nZUxvZzoKKwkqIE5FV1M6CisJKiBSRUxFQVNFOgorCSogY29uZmlndXJlLmFjOgorCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmFyZ3M6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgorCSogZ3N0cmVhbWVyLmRvYXA6CisJICBSZWxlYXNlIDAuMTAuMjUKKworMjAwOS0xMC0wNSAxMjo0MTo0MiArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmUucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kYS5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9lcy5wbzoKKwkqIHBvL2V1LnBvOgorCSogcG8vZmkucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2h1LnBvOgorCSogcG8vaWQucG86CisJKiBwby9pdC5wbzoKKwkqIHBvL2phLnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3BsLnBvOgorCSogcG8vcHRfQlIucG86CisJKiBwby9ydS5wbzoKKwkqIHBvL3J3LnBvOgorCSogcG8vc2sucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJKiBwby96aF9DTi5wbzoKKwkqIHBvL3poX1RXLnBvOgorCSAgVXBkYXRlIC5wbyBmaWxlcworCisyMDA5LTEwLTAxIDE2OjI0OjUyICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIENoYW5nZUxvZzoKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIHBvL2FmLnBvOgorCSogcG8vYXoucG86CisJKiBwby9iZS5wbzoKKwkqIHBvL2JnLnBvOgorCSogcG8vY2EucG86CisJKiBwby9jcy5wbzoKKwkqIHBvL2RhLnBvOgorCSogcG8vZGUucG86CisJKiBwby9lbl9HQi5wbzoKKwkqIHBvL2VzLnBvOgorCSogcG8vZXUucG86CisJKiBwby9maS5wbzoKKwkqIHBvL2ZyLnBvOgorCSogcG8vaHUucG86CisJKiBwby9pZC5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vamEucG86CisJKiBwby9uYi5wbzoKKwkqIHBvL25sLnBvOgorCSogcG8vcGwucG86CisJKiBwby9wdF9CUi5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vcncucG86CisJKiBwby9zay5wbzoKKwkqIHBvL3NxLnBvOgorCSogcG8vc3IucG86CisJKiBwby9zdi5wbzoKKwkqIHBvL3RyLnBvOgorCSogcG8vdWsucG86CisJKiBwby92aS5wbzoKKwkqIHBvL3poX0NOLnBvOgorCSogcG8vemhfVFcucG86CisJICAwLjEwLjI0LjQgcHJlLXJlbGVhc2UKKworMjAwOS0wOS0zMCAxNTo1MjozMyArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKKwkgIGxpYmdzdGNoZWNrOiBEb24ndCB1c2UgY2hhcmFjdGVyIGNsYXNzZXMgaW4gc2VkIGV4cHJlc3Npb25zCisJICBBcHBhcmVudGx5IHRoZSBzZWQgdGhhdCBzaGlwcyBvbiBTb2xhcmlzIDEwIGRvZXNuJ3Qgc3VwcG9ydCBjaGFyYWN0ZXIKKwkgIGNsYXNzZXMgbGlrZSBbOmFsbnVtOl0sIHNvIGRvbid0IHVzZSB0aGVtLiBXZSBkb24ndCBuZWVkIHRoZW0gZm9yIHRoZQorCSAgc3ltYm9sIG5hbWVzIHRoYXQgYXJlIGJlaW5nIGV4dHJhY3RlZCBhbnl3YXkuCisJICBBbHNvLCB1c2UgJChTRUQpIGluc3RlYWQgb2YgJ3NlZCcKKwkgIEZpeGVzOiAjNTk2ODc3CisKKzIwMDktMDktMTcgMDE6MjA6MDMgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogY29uZmlndXJlLmFjOgorCSogcG8vYWYucG86CisJKiBwby9hei5wbzoKKwkqIHBvL2JlLnBvOgorCSogcG8vYmcucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGEucG86CisJKiBwby9kZS5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZXMucG86CisJKiBwby9ldS5wbzoKKwkqIHBvL2ZpLnBvOgorCSogcG8vZnIucG86CisJKiBwby9odS5wbzoKKwkqIHBvL2lkLnBvOgorCSogcG8vaXQucG86CisJKiBwby9qYS5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9wbC5wbzoKKwkqIHBvL3B0X0JSLnBvOgorCSogcG8vcnUucG86CisJKiBwby9ydy5wbzoKKwkqIHBvL3NrLnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkgIDAuMTAuMjQuMyBwcmUtcmVsZWFzZQorCisyMDA5LTA5LTE1IDA5OjQxOjI4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6CisJICB1dGlsczogRml4IEdNUCBzY2FsaW5nIHVuaXQgdGVzdAorCSAgR01QIG9ubHkgdXNlcyAidW5zaWduZWQgbG9uZyBpbnQiLCB3aGljaCBpcyAzMiBiaXQKKwkgIG9uIDMyIGJpdCBhcmNoaXRlY3R1cmVzIGFuZCBjYW4ndCBob2xkIGEgZ3VpbnQ2NC4KKwkgIFRoaXMgcmVzdWx0ZWQgaW4gZmFsc2UgdW5pdCB0ZXN0IGZhaWx1cmVzIG9uIDMyIGJpdCBhcmNoaXRlY3R1cmVzLgorCSAgRml4ZXMgYnVnICM1OTUxMzMuCisKKzIwMDktMDktMTQgMTI6NDc6MjYgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJKiBjb25maWd1cmUuYWM6CisJKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKKwkgIEZpeCBvdXQtb2YtdHJlZSBidWlsZAorCisyMDA5LTA5LTE0IDE0OjA3OjU1ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RtZXNzYWdlLmg6CisJICBkb2NzOiBHU1RfTUVTU0FHRV9TVFJFQU1fU1RBVFVTIGlzIGltcGxlbWVudGVkIG5vd2FkYXlzLgorCSAgRG9jcyB3ZXJlIHN0aWxsIG1lbnRpb24gaXQgYXMgIm5vdCB5ZXQgaW1wbGVtZW50ZWQiLgorCisyMDA5LTA5LTEyIDEzOjUyOjAwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvZGF0YXByb3RvY29sL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvbmV0L01ha2VmaWxlLmFtOgorCSAgaW50cm9zcGVjdGlvbjogQnVpbGQgcGtnY29uZmlnIGJlZm9yZSBhbGwgbGlicmFyaWVzIGFuZCBzZXQgUEtHX0NPTkZJR19QQVRICisJICBUaGlzIHdheSBnLWlyLXNjYW5uZXIgY2FuIGZpbmQgdGhlIGdzdHJlYW1lci0wLjEwIHBrZy1jb25maWcgZmlsZS4KKworMjAwOS0wOS0xMiAxMzo1MToyOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9NYWtlZmlsZS5hbToKKwkqIGdzdC9nc3R0YWdsaXN0Lmg6CisJICBpbnRyb3NwZWN0aW9uOiBEb24ndCB0eXBlZGVmIEdzdFRhZ0xpc3QgdG8gR3N0U3RydWN0dXJlIGZvciBnb2JqZWN0LWludHJvc3BlY3Rpb24KKworMjAwOS0wOS0xMSAyMzoyMTozMCArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBDaGFuZ2VMb2c6CisJKiBjb25maWd1cmUuYWM6CisJKiBwby9MSU5HVUFTOgorCSogcG8vYWYucG86CisJKiBwby9hei5wbzoKKwkqIHBvL2JlLnBvOgorCSogcG8vYmcucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGEucG86CisJKiBwby9kZS5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZXMucG86CisJKiBwby9ldS5wbzoKKwkqIHBvL2ZpLnBvOgorCSogcG8vZnIucG86CisJKiBwby9odS5wbzoKKwkqIHBvL2lkLnBvOgorCSogcG8vaXQucG86CisJKiBwby9qYS5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9wbC5wbzoKKwkqIHBvL3B0X0JSLnBvOgorCSogcG8vcnUucG86CisJKiBwby9ydy5wbzoKKwkqIHBvL3NrLnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkgIDAuMTAuMjQuMiBwcmUtcmVsZWFzZQorCisyMDA5LTA5LTExIDIyOjQyOjUxICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIGdzdC9nc3RtZXNzYWdlLmM6CisJICBEb24ndCB1c2UgQysrIHN0eWxlIGNvbW1lbnRzCisKKzIwMDktMDktMTEgMjI6MjI6MzQgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogZ3N0L2dzdG1lc3NhZ2UuYzoKKwkgIG1lc3NhZ2U6IERpc2FibGUgcmVzdHJpY3Rpb24gdGhhdCBzdHJ1Y3R1cmUgY2hhbmdlcyBhcmUgc2luayBwYWRzCisJICBUaGUgc3RydWN0dXJlX2NoYW5nZSBtZXNzYWdlIHdhcyBvcmlnaW5hbGx5IGVtaXR0ZWQgb24gc291cmNlIHBhZHMgYW5kCisJICB0aGVuIHJlY2VudGx5IGNoYW5nZWQgdG8gYmUgc2luayBwYWRzLiBUaGlzIGNhdXNlcyBhIGZhaWx1cmUgaW4gdGhlCisJICBnc3QtcHl0aG9uIHRlc3RzdWl0ZS4gRGlzYWJsZSB0aGUgcmVzdHJpY3Rpb24gc28gdGhhdCB0aGUgcHVibGlzaGVkCisJICBiZWhhdmlvdXIgaXMgc3RpbGwgYWxsb3dlZC4KKworMjAwOS0wOS0xMSAxODoyNDoxOCArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGx1Z2luLmM6CisJICBjaGVjazogRml4IHZlcnNpb24gY2hlY2sgdGVzdHMKKwkgIEFjY29tb2RhdGUgdGhlIHNsaWdodGx5IGNoYW5nZWQgc2VtYW50aWNzIGluIHRoZSBwbHVnaW4gdmVyc2lvbiBjaGVjaworCSAgd2hlcmUgYSBDVlMgdmVyc2lvbiBqdXN0IGJlZm9yZSBhIHJlbGVhc2UgaXMgYWNjZXB0YWJsZS4KKworMjAwOS0wOS0xMSAyMToyMDo1NyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKKwkgIGJpbmFyeXJlZ2lzdHJ5OiBkb24ndCBjcmFzaCBpbiBjbGVhbmluZyB1cCBvbiBlcnJvci4KKwkgIERvbid0IGRlcmVmZXJlbmNlIE5VTEwgcG9pbnRlcnMuCisKKzIwMDktMDctMjAgMTI6NTQ6MDAgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJKiBnc3QvZ3N0aW5mby5oOgorCSAgZGVidWc6IHVzZSBkdW1teSBjb2RlIHRvIGF2b2lkIHNwdXJpb3VzIHNlbWljb2xvbnMKKwkgIEZpeGVzIGJ1ZyAjNTg5MTczLgorCisyMDA5LTA5LTEwIDExOjUzOjA5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKKwkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5oOgorCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuaDoKKwkgIHdoaXRlc3BhY2UgZml4ZXMKKworMjAwOS0wOS0xMCAxMTo0MTo1NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzoKKwkgIHBsdWdpbmZlYXR1cmU6IGltcHJvdmUgdmVyc2lvbiBjaGVjaworCSAgQWxzbyBwYXJzZSB0aGUgbmFubyBvZiB0aGUgdmVyc2lvbiBhbmQgYXNzdW1lIHRoYXQgWC5ZLlotMS4xID49IFguWS5aCisJICBXaXRoIHRoaXMgY2hhbmdlIHdlIGNhbiBhbHNvIGNoZWNrIGRldmVsb3BtZW50IHZlcnNpb25zIGFnYWluc3QgdGhlIHZlcnNpb24gb2YKKwkgIHRoZSB1cGNvbW1pbmcgcmVsZWFzZS4KKworMjAwOS0wOS0xMCAxMDowNTozOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R0YWdsaXN0Lmg6CisJICB0YWdsaXN0OiBBZGQgRklYTUUgZm9yIDAuMTEgdG8gbm90IHR5cGVkZWYgR3N0VGFnTGlzdCB0byBiZSBhIEdzdFN0cnVjdHVyZQorCSAgU2VlIGJ1ZyAjNTE4OTM0LgorCisyMDA5LTA5LTA5IDE2OjI5OjEwIC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSogZ3N0L2dzdGVsZW1lbnQuaDoKKwkgIEZpeCB0eXBvIGluIGlubGluZSBkb2N1bWVudGF0aW9uCisKKzIwMDktMDktMDkgMTc6NTc6NTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb21tb246CisJICBVcGRhdGUgY29tbW9uCisKKzIwMDktMDktMDkgMTg6Mzg6MjkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIHV0aWxzOiBBZGQgYSBjb21tZW50IHRvIHRoZSBzY2FsaW5nIGZ1bmN0aW9ucyB0byBleHBsYWluIHdoeSB0aGUgcm91bmRpbmcgaXMgY29ycmVjdAorCisyMDA5LTA5LTA5IDE2OjQ1OjE3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKKwkgIGdob3N0cGFkOiBkb24ndCB1bnJlZiBOVUxMIGNhcHMKKwkgIENhcHMgY2FuIGJlIE5VTEwgc28gZG9uJ3QgY2FsbCB1bnJlZiBvbiBpdCB1bmNvbmRpdGlvbmFsbHksIGluc3RlYWQgdXNlIGFuCisJICBleGlzdGluZyBleGl0IHBhZCBmb3IgdGhlIGZ1bmN0aW9uLgorCisyMDA5LTA5LTA5IDE0OjUzOjE2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogY29uZmlndXJlLmFjOgorCSogZ3N0L2dzdHV0aWxzLmM6CisJICB1dGlsczogVXNlIGdjYydzIF9fdWludDEyOF90IGZvciA2NGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHNjYWxpbmcKKwkgIFRoaXMgaXMgYXZhaWxhYmxlIGluIG5ld2VyIGdjYyByZWxlYXNlcyBhbmQgaXQgc2hvdWxkIG9ubHkgZXhpc3QKKwkgIG9uIHBsYXRmb3JtcyB0aGF0IHByb3ZpZGUgc29tZSBuYXRpdmUgMTI4Yml0IGludGVnZXIgYXJpdGhtZXRpYworCSAgaW5zdHJ1Y3Rpb25zLgorCSAgVGhlIHg4Ni02NCBhc3NlbWJseSBmb3IgdGhpcyBpcyBzdGlsbCBrZXB0IGZvciBub24tZ2NjIGNvbXBpbGVycworCSAgdGhhdCBkb24ndCBwcm92aWRlIF9fdWludDEyOF90IG1hZ2ljLgorCisyMDA5LTA5LTA5IDA5OjM4OjU0ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGRvY3MvcmFuZG9tL2Vuc29uaWMvZHJhZnQtYnVmZmVycG9vbHMudHh0OgorCSAgZGVzaWduOiBhZGQgaWRlYXMgZm9yIGJ1ZmZlciBtYW5hZ2VtZW50CisJICBSaWdodCBub3cgd2UncmUgb3BlcmF0aW5nIHN1Ym9wdGltYWwgd2hlbiB0YWxraW5nIHRvIGtlcm5lbCBpbnRlcmZhY2VzLiBXcml0ZQorCSAgZG9lc24gc29tZSBpZGVhcy4KKworMjAwOS0wOS0wNyAxODoyNzowOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RwdXNoc3JjLmg6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKKwkgIGZpeCB3aGl0ZXNwYWNlCisKKzIwMDktMDktMDMgMTk6MDY6MjggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5oOgorCSAgYWRhcHRlcjogZml4IHdoaXRlc3BhY2UKKworMjAwOS0wOS0wNyAxNjoxNDo1NyArMDIwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUBnbm9tZS5vcmc+CisKKwkqIGdzdC9nc3R2YWx1ZS5jOgorCSAgZG9jczogRml4IHR5cG8gaW4gZ3N0X3ZhbHVlX3VuaW9uKCkKKworMjAwOS0wOS0wNiAxOTo0Mzo0NyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJpdHJlYWRlci5oOgorCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmM6CisJICBiaXRyZWFkZXIsIGJ5dGVyZWFkZXI6IGFkZCBzb21lIEZJWE1FIDAuMTEgY29tbWVudHMgYW5kIGZpeCBpbmRlbnRpbmcKKworMjAwOS0wOS0wNCAxNzoxNTozNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXItZG9jcy5oOgorCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaDoKKwkgIGJ5dGVyZWFkZXI6IGFkZCB1bmNoZWNrZWQgYW5kIGlubGluZSB2ZXJzaW9ucyBvZiB0aGUgZmxvYXQgZ2V0dGVycy9wZWVrZXJzCisJICBBUEk6IGdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQqX3VuY2hlY2tlZCgpCisKKzIwMDktMDktMDQgMTY6NTI6MDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5oOgorCSAgYnl0ZXJlYWRlcjogYWRkIGlubGluZSB2ZXJzaW9ucyBvZiB0aGUgbW9zdCBjb21tb24gZ2V0dGVycyBhbmQgc2V0dGVycworCisyMDA5LTA5LTAyIDExOjIwOjA0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXItZG9jcy5oOgorCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaDoKKwkqIHRlc3RzL2NoZWNrL2xpYnMvYnl0ZXJlYWRlci5jOgorCSAgYnl0ZXJlYWRlcjogYWRkIGlubGluZWQgX3VuY2hlY2tlZCgpIHZhcmlhbnRzIGZvciBzb21lIGZ1bmN0aW9ucworCSAgQVBJOiBnc3RfYnl0ZV9yZWFkZXJfc2tpcF91bmNoZWNrZWQoKQorCSAgQVBJOiBnc3RfYnl0ZV9yZWFkZXJfcGVla18qX3VuY2hlY2tlZCgpCisJICBBUEk6IGdzdF9ieXRlX3JlYWRlcl9nZXRfKl91bmNoZWNrZWQoKQorCSAgQVBJOiBnc3RfYnl0ZV9yZWFkZXJfe3BlZWssZ2V0LGR1cH1fZGF0YV91bmNoZWNrZWQoKQorCisyMDA5LTA5LTA1IDEyOjMwOjA3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbToKKwkgIGludHJvc3BlY3Rpb246IFN0cmlwIEdzdCBwcmVmaXggZnJvbSBhbGwgdHlwZXMvZnVuY3Rpb25zCisKKzIwMDktMDktMDUgMTI6MjI6MzcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvTWFrZWZpbGUuYW06CisJICBpbnRyb3NwZWN0aW9uOiBGaXggZm9yIG91dC1vZi10cmVlIGJ1aWxkcworCisyMDA5LTA5LTA1IDEyOjA0OjU5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbToKKwkgIGludHJvc3BlY3Rpb246IEZpeCBvdXQtb2YtdHJlZSBidWlsZAorCisyMDA5LTA5LTA1IDExOjUxOjU1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbToKKwkgIGludHJvc3BlY3Rpb246IEZpeCBidWlsZCBpZiBnaXItcmVwb3NpdG9yeSBpcyBub3QgaW5zdGFsbGVkCisKKzIwMDktMDktMDUgMDk6MzY6MjEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9uZXQvTWFrZWZpbGUuYW06CisJICBuZXQ6IEFkZCBnb2JqZWN0LWludHJvc3BlY3Rpb24gc3VwcG9ydAorCisyMDA5LTA5LTA1IDA5OjM0OjMwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvZGF0YXByb3RvY29sL01ha2VmaWxlLmFtOgorCSAgZGF0YXByb3RvY29sOiBBZGQgZ29iamVjdC1pbnRyb3NwZWN0aW9uIHN1cHBvcnQKKwkgIEJlY2F1c2Ugb2YgYSBidWcgaW4gZ29iamVjdC1pbnRyb3NwZWN0aW9uIHRoaXMgaXMgZGlzYWJsZWQgZm9yIG5vdy4KKworMjAwOS0wOS0wNSAwOToyODo0OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06CisJICBjb250cm9sbGVyOiBBZGQgZ29iamVjdC1pbnRyb3NwZWN0aW9uIHN1cHBvcnQKKworMjAwOS0wOS0wNSAwOToyNzowNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgorCSAgY2hlY2s6IEFkZCBnb2JqZWN0LWludHJvc3BlY3Rpb24gc3VwcG9ydAorCisyMDA5LTA5LTA1IDA5OjIzOjE5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogLmdpdGlnbm9yZToKKwkqIGdzdC8uZ2l0aWdub3JlOgorCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKKwkgIGdzdGJhc2U6IEFkZCBnb2JqZWN0LWludHJvc3BlY3Rpb24gc3VwcG9ydAorCisyMDA5LTA5LTA0IDIwOjU2OjQzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogY29uZmlndXJlLmFjOgorCSogZ3N0Ly5naXRpZ25vcmU6CisJKiBnc3QvTWFrZWZpbGUuYW06CisJKiBnc3QvZ3N0LmM6CisJICBnc3Q6IEFkZCBnb2JqZWN0LWludHJvc3BlY3Rpb24gc3VwcG9ydAorCSAgUGFydGlhbGx5IGZpeGVzIGJ1ZyAjNTUwNjE2LgorCisyMDA5LTA5LTA1IDEwOjE5OjIzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIDk0Zjk1ZTMgdG8gMTlmYTRmMworCisyMDA5LTA5LTA0IDE5OjM3OjE1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmM6CisJICBkb2NzOiBmaXggZG9jcyBmb3IgZ3N0X2J5dGVfcmVhZGVyX3tnZXR8cGVla31fZmxvYXQqKCkKKworMjAwOS0wOS0wNCAxMTozNTo1OSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGV2ZW50Lmg6CisJICBldmVudDogd2hpdGVzcGFjZSBmaXhlcworCisyMDA5LTA5LTA0IDA5OjUxOjI2ICswMjAwICBBdXJlbGllbiBHcmltYXVkIDxnc3RlbHp6QHlhaG9vLmZyPgorCisJKiBnc3QvZ3N0YmluLmM6CisJICBiaW46IE9ubHkgdW5yZWYgRU9TIG1lc3NhZ2UgYWZ0ZXIgaXQgaXMgbm90IHVzZWQgYW55bW9yZQorCSAgRml4ZXMgYnVnICM1OTQxMDcuCisKKzIwMDktMDktMDIgMTg6NTQ6MDYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RiaW4uYzoKKwkqIGdzdC9nc3RtZXNzYWdlLmM6CisJKiBnc3QvZ3N0cGFkLmM6CisJICBzdGF0ZXM6IHBvc3Qgc3RydWN0dXJlIGNoYW5nZSBvbiBzaW5rcGFkcworCSAgUG9zdCB0aGUgc3RydWN0dXJlIGNoYW5nZSBtZXNzYWdlcyBvbiB0aGUgc2lua3BhZHMgb2YgdGhlIGVsZW1lbnRzLiBUaGlzIGFsbG93cworCSAgdXMgdG8gY2F0Y2ggdW5saW5rZWQgcGFkcyBlYXJsaWVyIHdpdGhvdXQgZW5kaW5nIHVwIHdpdGggaW5jb25zaXN0ZW50IGVsZW1lbnQKKwkgIGRlZ3JlZXMuCisKKzIwMDktMDktMDIgMTg6MTM6MjIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RiaW4uYzoKKwkgIGJpbjogYXZvaWQgZmFsc2UgJ2xvb3AgZGV0ZWN0ZWQnIHdhcm5pbmdzCisJICBXaGVuIHdlIGRldGVjdCBhIHBhZCB1bmxpbmsgaW4gcHJvZ3Jlc3MsIHdlIHdpbGwgbm90IGJlIHVwZGF0aW5nIHRoZSBkZWdyZWUgb2YKKwkgIHRoZSBwYXJlbnQgZWxlbWVudC4gVGhpcyBjYW4gY2F1c2UgZmFsc2UgbG9vcCBkZXRlY3RlZCB3YXJuaW5ncyBiZWNhdXNlIHRoZQorCSAgZGVncmVlIGNvdW50ZXIgaXMgaW52YWxpZC4gSGFuZGxlIHRoaXMgY2FzZSBieSBtYXJraW5nIHRoZSBpdGVyYXRvciBhcyAnZGlydHknCisJICB3aGVuIHdlIGRldGVjdCBhIHBhZCB1bmxpbmsgYW5kIGF2b2lkIGVtaXRpbmcgdGhlIHdhcm5pbmcgaW4gdGhpcyBjYXNlLiBXZSBoYXZlCisJICB0byBjb250aW51ZSBvdXIgc3RhdGUgY2hhbmdlIGFzIGdvb2QgYXMgd2UgY2FuLCB3ZSB3aWxsIGV2ZW50dWFsbHkgcmVzeW5jIHdoZW4KKwkgIHRoZSBwYWQgdW5saW5rIGNvbXBsZXRlZC4KKworMjAwOS0wOS0wMSAxNjo0OTo1NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkgIGJhc2VzcmM6IHdoaXRlc3BhY2UgZml4ZXMKKworMjAwOS0wOS0wMSAxNjo0OToyMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5oOgorCSAgYnVmZmVyOiB3aGl0ZXNwYWNlIGZpeGVzCisKKzIwMDktMDktMDEgMTI6MDc6MzEgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogdGVzdHMvZXhhbXBsZXMvTWFrZWZpbGUuYW06CisJICBkaXN0OiBEb24ndCBsaXN0IHRoZSBzdHJlYW1zIHN1YmRpciB0d2ljZSBpbiBleGFtcGxlcyBNYWtlZmlsZQorCSAgTGlzdGluZyB0aGUgJ3N0cmVhbXMnIHN1YmRpciB0d2ljZSBpbiBESVNUX1NVQkRJUlMgYnJlYWtzIGRpc3RjaGVjay4KKworMjAwOS0wOS0wMSAxMjowNTo1MSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBnc3QvZ3N0YmluLmM6CisJICBnc3RiaW46IERvbid0IHByb3BhZ2F0ZSBhIE5VTEwgY2FjaGVkIGluZGV4IHRvIGFkZGVkIGVsZW1lbnRzCisJICBXaGVuIGFuIGVsZW1lbnQgaXMgYWRkZWQgdG8gdGhlIGJpbiwgb25seSBzZXQgdGhlIGluZGV4IGlmIHdlIGhhdmUgYQorCSAgY2FjaGVkIGluZGV4LCByYXRoZXIgdGhhbiBzZXR0aW5nIGEgTlVMTCBpbmRleCBvbiBlbGVtZW50cyB0aGF0IG1pZ2h0CisJICBoYXZlIGEgZGVmYXVsdCBpbmRleCBvYmplY3Qgb2YgdGhlaXIgb3duLgorCisyMDA5LTA3LTE5IDIxOjIzOjE4ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIGRvY3MvcmFuZG9tL3JlbGVhc2U6CisJICBkb2NzOiBBZGQgYSBub3RlIGFib3V0IHJlZ2VuZXJhdGluZyB0aGUgY2hhbmdlbG9nIGluIHRoZSByZWxlYXNlIHNjcmlwdAorCisyMDA5LTA5LTAxIDEwOjAzOjM1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkgIGVsZW1lbnQ6IGRvbid0IHRha2Ugb2JqZWN0IGxvY2sgZm9yIGdfY3JpdGljYWwoKSBhbmQgZmxlc2ggb3V0IHdhcm5pbmcgbWVzc2FnZSBzb21lIG1vcmUKKworMjAwOS0wOS0wMSAxMDoyMTozMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RpdGVyYXRvci5jOgorCSAgaXRlcmF0b3I6IEFkZCB1bml0IHRlc3QgZm9yIHRoZSBzaW5nbGUgaXRlcmF0b3IKKworMjAwOS0wOS0wMSAxMDoyMDo1OSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RpdGVyYXRvci5jOgorCSAgaXRlcmF0b3I6IE9ubHkgdmlzaXQgdGhlIGVsZW1lbnQgYSBzaW5nbGUgdGltZSBpbiB0aGUgc2luZ2xlIGl0ZXJhdG9yCisKKzIwMDktMDktMDEgMDc6Mjc6MjUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0aXRlcmF0b3IuYzoKKwkgIGl0ZXJhdG9yOiBGaXggc2luZ2xlIGl0ZXJhdG9yIGZvciBOVUxMIG9iamVjdHMgYW5kIG5vbi1HVHlwZUluc3RhbmNlIG9iamVjdHMKKwkgIEZpeGVzIGJ1ZyAjNTkzNzE5LgorCisyMDA5LTA5LTAxIDAwOjAwOjU3ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJICBkZWJ1ZzogbW9yZSBkZXRhaWwgaW4gd3Jvbmctc3RhdGUtb24tZGlzcG9zZSBlcnJvci4KKwkgIEFsc28gdGVsbCBpbiB3aGljaCBzdGF0ZSB0aGUgZWxlbWVudCBhY3R1YWx5IGlzIGFuZCBpZiBpdCBpcyBldmVudHVhbHkKKwkgIHN0YXRlLWxvY2tlZC4KKworMjAwOS0wOC0zMSAyMDozODowNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGl0ZXJhdG9yLmM6CisJICBpdGVyYXRvcjogZml4IGRvY3MgZm9yIF9uZXdfc2luZ2xlKCkuCisKKzIwMDktMDgtMzEgMTY6NTY6MjIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKKwkqIGdzdC9nc3RpdGVyYXRvci5jOgorCSogZ3N0L2dzdGl0ZXJhdG9yLmg6CisJICBkb2NzOiBpdCdzIGl0cworCSAgVGhlIHBhbmRhIHNheXMgbm8hCisKKzIwMDktMDgtMjkgMjA6NDQ6MzYgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKKwkgIHJlZ2lzdHJ5OiBmaWxsIGluIGVsZW1lbnRmYWN0b3J5IHdoZW4gcmVnaXN0ZXJpbmcgZWxlbWVudAorCSAgZWxlbWVudGZhY3RvcnkgZmllbGQgaXMgZmlsbGVkIGluIGJ5IGdzdF9lbGVtZW50X2Jhc2VfY2xhc3NfaW5pdCwKKwkgIGJ1dCBpdCBuZWVkcyBzb21lIGluZm8gc2V0IG9uIHRoZSBlbGVtZW50J3MgdHlwZSwgc28gaGF2ZSBpdAorCSAgYXZhaWxhYmxlIHByaW9yIHRvIGNsYXNzIHN0cnVjdHVyZSBjcmVhdGlvbiBzcGlubmluZyB1cC4KKwkgIFRoaXMgYWZmZWN0cyBlbGVtZW50cyB0aGF0IGhhdmUgYSB3ZWxsLWtub3duL3B1YmxpYyB0eXBlIChlLmcuIHBpcGVsaW5lKQorCSAgYW5kIGNhbiBiZSBjcmVhdGVkIGJ5IG90aGVyIG1lYW5zIHRoYW4gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlCisJICAod2hpY2ggd2lsbCBhbHNvIGZpbGwgaW4gdGhlIGVsZW1lbnQncyBmYWN0b3J5KS4KKworMjAwOS0wOC0zMSAxMTo0NToxNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHV0aWxzLmM6CisJICB1dGlsczogdXNlIDEyOGJpdHMgZGl2aXNpb24gb24geDg2XzY0CisKKzIwMDktMDgtMjkgMDQ6NDQ6NTEgKzA0MDAgINCg0YPRgdC70LDQvSDQmNC20LHRg9C70LDRgtC+0LIgPGxybjE5ODZAZ21haWwuY29tPgorCisJKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKKwkgIHN5c3RlbWNsb2NrOiBmaXggY29tcGlsYXRpb24gb2Ygd2luMzIgY29kZQorCSAgRml4ZXMgIzU5MzQ2MC4KKworMjAwOS0wOC0yOCAxODozNzo0NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJpbi5jOgorCSAgYmluOiBjYWNoZSBpbmRleAorCSAgQ2FjaGUgdGhlIGxhc3QgaW5kZXggdGhhdCB3YXMgc2V0IHdpdGggX3NldF9pbmRleCgpIGFuZCByZXR1cm4gdGhpcyBpbiB0aGUKKwkgIF9nZXRfaW5kZXgoKSBjYWxsLgorCSAgU2V0IHRoZSBjYWNoZWQgaW5kZXggb24gbmV3bHkgYWRkZWQgZWxlbWVudHMuCisJICBGaXhlcyAjNTY2ODgxCisKKzIwMDktMDgtMjggMTg6MzU6NTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJICBlbGVtZW50OiBiZXR0ZXIgdHlwZSBjaGVja3MKKwkgIEFkZCBHU1RfQ0xPQ0sgdHlwZWNoZWNrIGZvciBfc2V0X2Nsb2NrKCkuCisJICBBbGxvdyBzZXR0aW5nIE5VTEwgaW5kZXhlcyBvbiBlbGVtZW50IChjbGVhciB0aGUgY3VycmVudCBpbmRleCkKKwkgIFNvbWUgd2hpdGVzcGFjZSBmaXhlcy4KKworMjAwOS0wOC0yOCAxODoxNDoyMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGVsZW1lbnQuaDoKKwkgIGVsZW1lbnQ7IHdoaXRlc3BhY2UgZml4ZXMKKworMjAwOS0wOC0yOCAxODowNjo0NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBkZWZzOiBhZGQgZ3N0X2l0ZXJhdG9yX25ld19zaW5nbGUgdG8gZGVmcworCisyMDA5LTA4LTI4IDE4OjAzOjQ0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKKwkgIGFkYXB0ZXI6IHdoaXRlc3BhY2UgZml4ZXMKKworMjAwOS0wOC0yOCAxNzo1OToxNSArMDIwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBDaGVjayBzdWdnZXN0ZWQgY2FwcyBmb3IgcHJveHkgYWxsb2MKKwkgIEJlY2F1c2Ugd2UgYXJlIHRyeWluZyB0byByZXNvbHZlIGEgc3VnZ2VzdGlvbiBoZXJlIHdlIGRvbid0IG5lZWQKKwkgIHRvIGNoZWNrIG9uIGNhcHMgZm9yIHByb3h5X2FsbG9jIGJ1dCB3ZSBuZWVkIHRvIGNoZWNrIG9uIHRoZQorCSAgc3VnZ2VzdGVkIGNhcHMgaW5zdGVhZC4KKworMjAwOS0wOC0yOCAxNzo0OToxMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5oOgorCSAgcXVldWU6IHdoaXRlc3BhY2UgZml4ZXMKKworMjAwOS0wOC0yOCAxNzowMjozMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6CisJICBzeXN0ZW1jbG9jazogdXNlIHByZWZvcm1hbmNlIGNvdW50ZXJzIG9uIHdpbmRvd3MKKwkgIEJhc2VkIG9uIGNsb2NrIGltcGxlbWVudGF0aW9uIGJ5IEjDpXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkB0YW5kYmVyZy5jb20+CisJICBUcnkgdG8gZ2V0IHRoZSB0aW1lIG9uIHdpbmRvd3MgdXNpbmcgdGhlIHBlcmZvcm1hbmNlIGNvdW50ZXJzLiBUaGVzZSBoYXZlIGEgbXVjaAorCSAgaGlnaGVyIHJlc29sdXRpb24gYW5kIGFjY3VyYWN5IHRoYW4gdGhlIHJlZ3VsYXIgZ2V0Y3VycmVudHRpbWUoKS4gQmUgY2FyZWZ1bCB0bworCSAgZmFsbCBiYWNrIHRvIHJlZ3VsYXIgZ2V0Y3VycmVudHRpbWUoKSBvciBwb3NpeCBjbG9ja3Mgd2hlbiBwZXJmb3JtYW5jZSBjb3VudGVycworCSAgYXJlIG5vdCBhdmFpbGFibGUuCisKKzIwMDktMDgtMjggMTY6MDc6MTYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RzeXN0ZW1jbG9jay5oOgorCSAgc3lzdGVtY2xvY2s6IGZpeCBpbmRlbnRhdGlvbgorCisyMDA5LTA4LTI4IDE1OjMyOjI2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIHV0aWxzOiB1c2Ugc2hpZnQgaW5zdGVhZCBvZiBkaXZpc2lvbgorCSAgV2UgY2FuIHVzZSBhIHNoaWZ0IGZvciBzY2FsaW5nIHRoZSBkZW5vbWluYXRvciBpbnN0ZWFkIG9mIGEgZGl2aWRlIHNpbmNlIHRoZQorCSAgZGVub20gaXMgYWx3YXlzIHBvc2l0aXZlLiBUaGlzIGF2b2lkcyBoYXZpbmcgdGhlIGNvbXBpbGVyIGdlbmVyYXRlIGNvZGUgZm9yIHRoZQorCSAgZGlmZmVyZW50IHJvdW5kaW5nIHJ1bGVzIHdoZW4gc2NhbGluZyBuZWdhdGl2ZSB2YWx1ZXMuCisKKzIwMDktMDgtMjggMTM6NDU6MzggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R1dGlscy5jOgorCSAgdXRpbHM6IG1ha2UgaW5saW5pbmcgZXhwbGljaXQKKworMjAwOS0wOC0yOCAxMjo0Mzo0MyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHV0aWxzLmM6CisJICB1dGlsczogb3B0aW1pemUgZm9yIHg4Nl82NCB3aXRoIHNvbWUgaW5saW5lIGFzbQorCSAgNjRiaXQgeDg2IGhhcyBuYXRpdmUgNjR4NjQtPjEyOCBiaXQgbXVsdGlwbHkgdGhhdCB3ZSBjYW4gdXNlIHdpdGggc29tZSBpbmxpbmUKKwkgIGFzc2VtYmxlciB0byBzcGVlZCB1cCBsYXJnZSBtdWx0aXBsaWNhdGlvbnMuCisJICBVc2UgYnNyIHRvIGZpbmQgdGhlIG51bWJlciBvZiBsZWFkaW5nIHplcm9zIG1vcmUgZWZmaWNpZW50bHkuCisKKzIwMDktMDgtMjggMTI6MzM6MzcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R1dGlscy5jOgorCSAgdXRpbHM6IGZhY3RvciBvdXQgdGhlIGxlYWRpbmcgemVybyBjb3VudCBjb2RlCisKKzIwMDktMDgtMjggMTI6MzA6NDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R1dGlscy5jOgorCSAgdXRpbHM6IHBhc3MgY29ycmVjdGlvbiBmYWN0b3IgYXJvdW5kCisJICBQYXNzIHRoZSBjb3JyZWN0aW9uIGZhY3RvciBhcm91bmQgdG8gZ2V0IHJpZCBvZiB0aGUgZW51bSwgc29tZSBjb2RlCisJICBhbmQgc29tZSBicmFuY2hlcy4KKworMjAwOS0wOC0yOCAxMjoyMToyOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHV0aWxzLmM6CisJICB1dGlsczogd2hpdGVzcGFjZSBmaXhlcworCisyMDA5LTA4LTI4IDEyOjE5OjM0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIHV0aWxzOiBtb3ZlIGNvbW1vbiBjb3JyZWN0aW9uIGNvZGUgaW4gYSBtYWNybworCisyMDA5LTA4LTI0IDE4OjAxOjA3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJICBiYXNlc2luazogd2hpdGVzcGFjZSBmaXhlcworCisyMDA5LTA4LTI2IDE2OjUxOjMyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGl0ZXJhdG9yLmM6CisJICBpdGVyYXRvcjogQWxsb3cgdG8gdXNlIE5VTEwgYXMgb2JqZWN0IGZvciB0aGUgc2luZ2xlIGl0ZXJhdG9yCisKKzIwMDktMDgtMjYgMTY6Mzk6MTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdGl0ZXJhdG9yLmM6CisJKiBnc3QvZ3N0aXRlcmF0b3IuaDoKKwkgIGl0ZXJhdG9yOiBBUEk6IEFkZCBnc3RfaXRlcmF0b3JfbmV3X3NpbmdsZSgpCisJICBUaGlzIGFsbG93cyAiaXRlcmF0aW9uIiBvdmVyIGEgc2luZ2xlIG9iamVjdCBvZiBzb21lIHR5cGUsCisJICB3aGljaCBoYXBwZW5zIG9mdGVuIGZvciB0aGUgR3N0UGFkSXRlckludExpbmtzRnVuY3Rpb24gZm9yIGV4YW1wbGUuCisKKzIwMDktMDgtMjQgMTc6NTc6MTYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgYmFzZXNyYzogcmV0dXJuIHJlc3VsdCBvZiBfc2V0X2NhcHMoKQorCisyMDA5LTA4LTI0IDE3OjU2OjMyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBiYXNlc2luazogd2hpdGVzcGFjZSBmaXhlcworCisyMDA5LTA4LTIyIDE0OjIyOjMxIC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSogZ3N0L2dzdG9iamVjdC5oOgorCSogZ3N0L2dzdHRyYWNlLmg6CisJKiBnc3QvZ3N0eG1sLmg6CisJICBJdCdzIF9fR05VQ19fLCBub3QgX0dOVUNfCisJICBUaGlzIGFwcGVhcnMgdG8gYmUgYW4gOCB5ZWFyIG9sZCBidWcuCisKKzIwMDktMDgtMjEgMDk6NTk6NTggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL3B3Zy9idWlsZGluZy1ib2lsZXIueG1sOgorCSAgZG9jczogYWRkIGxpbmsgdG8gY2dpdCB0YXJiYWxsIGRvd25sb2FkIG9mIGdzdC10ZW1wbGF0ZSBpbiBQV0cKKwkgIFNvIHBlb3BsZSB3aG8gY2FuJ3QgdXNlIGdpdCBmb3Igc29tZSByZWFzb24gc3RpbGwgY2FuIGdldCBob2xkCisJICBvZiB0aGUgY29kZS4gU2VlICM1OTEwNjkuCisKKzIwMDktMDgtMjAgMTE6NTQ6NDAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgorCSAgcGx1Z2luZmVhdHVyZTogYWRkIGd1YXJkIHRvIGdzdF9wbHVnaW5fZmVhdHVyZV90eXBlX25hbWVfZmlsdGVyCisJICBTbyB3ZSBkb24ndCBqdXN0IGNyYXNoIGlmIHRoZXJlJ3MgYSByZWZjb3VudGluZyBidWcgc29tZXdoZXJlIGVsc2UuCisKKzIwMDktMDgtMTkgMTY6MjQ6MzkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL21hbnVhbC9hcHBlbmRpeC1pbnRlZ3JhdGlvbi54bWw6CisJICBkb2NzOiBEb24ndCB0YWxrIGFib3V0IHRoZSBkZXByZWNhdGVkIGxpYmdub21lIGFuZCBHTk9NRS1WRlMKKwkgIEluc3RlYWQgdGFsayBhYm91dCBHSU8gYW5kIGNoYW5nZSB0aGUgb3B0aW9uIHBhcnNpbmcgZXhhbXBsZSB0bworCSAgbm90IGluaXRpYWxpemUgbGliZ25vbWUgYnV0IG9ubHkgR1RLLgorCSAgRml4ZXMgYnVnICM1OTIyMzMuCisKKzIwMDktMDgtMTkgMTU6MjU6NDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9leGFtcGxlcy9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL2V4YW1wbGVzL3N0cmVhbXMvTWFrZWZpbGUuYW06CisJICBleGFtcGxlczogTGluayBydHBvb2wtdGVzdCB0byBsaWJwdGhyZWFkIGZvciB1c2luZyB0aGUgUE9TSVggdGhyZWFkcworCSAgQWxzbyB0aGUgb3RoZXIgc3RyZWFtcyBleGFtcGxlIGNhbiBydW4gd2l0aG91dCBwdGhyZWFkcyB0aGVyZWZvcmUKKwkgIGVuYWJsZSBpdCBldmVuIGlmIHB0aHJlYWRzIGFyZSBub3QgYXZhaWxhYmxlLgorCSAgRml4ZXMgYnVnICM1OTIzMTQuCisKKzIwMDktMDgtMTggMTQ6NDU6MjMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiB0b29scy9nc3QtaW5zcGVjdC5jOgorCSogdG9vbHMvZ3N0LXhtbGluc3BlY3QuYzoKKwkgIHRvb2xzOiBVc2UgaXRlcmF0ZV9pbnRlcm5hbF9saW5rcyBpbnN0ZWFkIG9mIGRlcHJlY2F0ZWQgZ2V0X2ludGVybmFsX2xpbmtzCisKKzIwMDktMDgtMTggMTQ6NDU6MDIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5oOgorCSAgbXVsdGlxdWV1ZTogVXNlIGl0ZXJhdGVfaW50ZXJuYWxfbGlua3MgaW5zdGVhZCBvZiBkZXByZWNhdGVkIGdldF9pbnRlcm5hbF9saW5rcworCisyMDA5LTA4LTE4IDE0OjA1OjQwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5oOgorCSAgZ3N0cGFkOiBBZGQgc29tZSBESVNBQkxFX0RFUFJFQ0FURUQgbWFya2VycyBpbiB0aGUgaGVhZGVyIHRvbworCSAgVGhlIGludGVybmFsIGxpbmtzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgc2luY2Ugc29tZSB0aW1lIGFuZAorCSAgdGhlcmUgYWxyZWFkeSB3ZXJlIEdTVF9SRU1PVkVfREVQUkVDQVRFRCBtYXJrZXJzIGluIHRoZSBzb3VyY2UgZmlsZSwKKwkgIG5vdyBhZGQgdGhlbSB0byB0aGUgaGVhZGVyIHRvby4KKwkgIEZpeGVzIGJ1ZyAjNTkyMjA5LgorCisyMDA5LTA4LTE4IDExOjM4OjM4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9kZXNpZ24vcGFydC1zdGF0ZXMudHh0OgorCSAgZG9jczogVXBkYXRlIHRoZSBkZXNpZ24gZG9jcyBmb3IgYmluIHN0YXRlIGNoYW5nZXMgYWNjb3JkaW5nIHRvIGxhc3QgY29tbWl0CisKKzIwMDktMDgtMTggMTE6MzY6MzYgKzAyMDAgIEFudG9pbmUgVHJlbWJsYXkgPGhleGEwMEBnbWFpbC5jb20+CisKKwkqIGdzdC9nc3RiaW4uYzoKKwkgIGdzdGJpbjogRG9uJ3QgdHJ5IHRvIGNoYW5nZSBjaGlsZHJlbidzIHN0YXRlIGlmIHRoZXkncmUgYWxyZWFkeSBpbiB0aGUgc3RhdGUgd2Ugd2FudAorCSAgRml4ZXMgYnVnICMzNjg1MzYuCisKKzIwMDktMDgtMTggMTE6MzM6MTcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKKwkgIGdob3N0cGFkOiBBbHdheXMgZ2V0IHRoZSBwcm94eXBhZCdzIGdob3N0cGFkIHZpYSB0aGUgZ2hvc3RwYWQgaW4gdGhlIHNyYyBjYXBzIGNoYW5nZSBub3RpZnkgaGFuZGxlcgorCSAgQmVmb3JlIHRoZSBzaWduYWwgaGFuZGxlciB3b3VsZCBnZXQgdGhlIGdob3N0cGFkIHBhc3NlZCBhcyBzZWNvbmQKKwkgIGFyZ3VtZW50IGJ1dCBpdCBjb3VsZCd2ZSBhbHJlYWR5IGJlZW4gdW5yZWZmZWQgYW5kIGRlc3Ryb3llZC4KKwkgIFRoaXMgd291bGQgdGhlbiBsZWFkIHRvIGNyYXNoZXMgYW5kIGFsbCB0aGF0LgorCSAgTm93IHdlIGdldCB0aGUgZ2hvc3RwYWQgZnJvbSB0aGUgcHJveHkgcGFkLCB3aGljaCB3ZSBnZXQgZnJvbSB0aGUKKwkgIHRhcmdldCBwYWQgYXMgaXQncyBwZWVyLgorCSAgRml4ZXMgYnVnICM1OTEzMTguCisKKzIwMDktMDgtMTggMDg6NDU6MDggKzAyMDAgIExhdXJlbnQgR2xheWFsIDxzcGdsZWdsZUB5YWhvby5mcj4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5oOgorCSAgZmlsZXNpbms6IEFkZCBwcm9wZXJ0eSB0byBhbGxvdyB0byBhcHBlbmQgdG8gYW4gYWxyZWFkeSBleGlzdGluZyBmaWxlCisJICBGaXhlcyBidWcgIzU5MTQ0MS4KKworMjAwOS0wOC0xNCAxMTo1MzoxNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkgIGNvbmZpZ3VyZTogUmVtb3ZlIGR1cGxpY2F0ZWQgY2hlY2sgZm9yIGNsb2NrX2dldHRpbWUKKworMjAwOS0wOC0xNCAxMToxMjo1MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6CisJICBnc3R1dGlsczogQWRkIHNwZWNpYWwgcmFuZG9tIHVuaXQgdGVzdCBmb3IgNjQgc2NhbGluZyBmdW5jdGlvbnMKKwkgIFRoaXMgdGVzdHMgMTAwMDAwIHJhbmRvbSBtdWx0aXBsaWNhdGlvbnMvZGl2aXNpb25zIG9mIGFsbCBzY2FsaW5nCisJICBmdW5jdGlvbiB2YXJpYW50cyBhbmQgY29tcGFyZXMgdGhlIHJlc3VsdCB3aXRoIHRoZSByZXN1bHQgdGhhdCBpcworCSAgZ2VuZXJhdGVkIGJ5IEdNUCBvbiB0aGUgc2FtZSBpbnB1dC4KKwkgIEZvciB0aGlzIGNoZWNrIGZvciBHU0wgYW5kIEdNUCBkdXJpbmcgY29uZmlndXJlIGJ1dCBvbmx5IHVzZQorCSAgaXQgZm9yIHRoaXMgc2luZ2xlIHVuaXQgdGVzdC4KKwkgIFRlc3RpbmcgZnVuY3Rpb25zIHdlcmUgcHJvdmlkZWQgYnkgS2lwcCBDYW5ub24gPGtjYW5ub25AbGlnby5jYWx0ZWNoLmVkdT4KKworMjAwOS0wOC0xMyAxNjozMTowMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGdzdHV0aWxzOiBBZGQgbmV3IHNjYWxpbmcgZnVuY3Rpb25zIHRvIHRoZSBkb2NzCisKKzIwMDktMDgtMTMgMTY6MjA6NDYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzoKKwkgIGdzdHV0aWxzOiBBZGQgKHZlcnkpIG1pbmltYWwgdW5pdCB0ZXN0IGZvciB0aGUgbmV3IHJvdW5kaW5nIHNjYWxpbmcgZnVuY3Rpb25zCisKKzIwMDktMDgtMTMgMTY6MTA6MzEgKzAyMDAgIEtpcHAgQ2Fubm9uIDxrY2Fubm9uQGxpZ28uY2FsdGVjaC5lZHU+CisKKwkqIGdzdC9nc3R1dGlscy5jOgorCSogZ3N0L2dzdHV0aWxzLmg6CisJICBnc3R1dGlsczogQVBJOiBBZGQgcm91bmRpbmcgdG8gbmVhcmVzdCBhbmQgbmV4dCBpbnRlZ2VyIHZlcnNpb25zIG9mIHRoZSA2NCBiaXQgaW50ZWdlciBzY2FsaW5nIGZ1bmN0aW9ucworCSAgVGhlIG5ldyBmdW5jdGlvbnMgYXJlCisJICBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kKCkKKwkgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbCgpCisJICBnc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQoKQorCSAgZ3N0X3V0aWxfdWludDY0X3NjYWxlX2NlaWwoKQorCSAgRml4ZXMgYnVnICM1OTA5MTkuCisKKzIwMDktMDgtMTIgMTE6MTA6MDUgKzAyMDAgIEtpcHAgQ2Fubm9uIDxrY2Fubm9uQGxpZ28uY2FsdGVjaC5lZHU+CisKKwkqIGdzdC9nc3R1dGlscy5jOgorCSAgZ3N0dXRpbHM6IFJldmVydCBwYXJ0cyBvZiBsYXN0IGNoYW5nZSB0byBvcHRpbWl6ZSB0aGUgc2NhbGluZyBmdW5jdGlvbnMgYWdhaW4KKwkgIFBhcnRpYWxseSBmaXhlcyBidWcgIzU5MDkxOS4KKworMjAwOS0wOC0xMSAwOToxNjozOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R1dGlscy5jOgorCSAgZ3N0dXRpbHM6IEZpeCB2aW9sYXRpb25zIG9mIHN0cmljdC1hbGlhc2luZyBydWxlcyBpbiBnc3RfdXRpbF91aW50NjRfc2NhbGUoKQorCisyMDA5LTA4LTExIDA5OjEwOjQ3ICswMjAwICBLaXBwIENhbm5vbiA8a2Nhbm5vbkBsaWdvLmNhbHRlY2guZWR1PgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIGdzdHV0aWxzOiBSZWZhY3RvciBnc3RfdXRpbF91aW50NjRfc2NhbGUoKQorCSAgVGhpcyB3aWxsIGxhdGVyIG1ha2UgaXQgcG9zc2libGUgdG8gcHJvdmlkZSByb3VuZGluZyB2ZXJzaW9ucworCSAgb2YgaXQgd2l0aG91dCBtdWNoIGNvZGUgZHVwbGljYXRpb24uCisJICBQYXJ0aWFsbHkgZml4ZXMgYnVnICM1OTA5MTkuCisKKzIwMDktMDgtMTEgMTU6MjA6MTggKzAyMDAgIEpvbmFzIEhvbG1iZXJnIDxqb25hcy5ob2xtYmVyZyBhdCBheGlzLmNvbT4KKworCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKKwkgIGJ1ZmZlcmxpc3Q6IHVwZGF0ZSBkb2Mgc3RyaW5nCisKKzIwMDktMDgtMTEgMTM6MjE6MzUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0c2VnbWVudC5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHNlZ21lbnQuYzoKKwkgIGdzdHNlZ21lbnQ6IEFjdHVhbGx5IHN0YXJ0PT1zdG9wPT1zZWdtZW50X3N0YXJ0IGlzIGluc2lkZSB0aGUgc2VnbWVudAorCSAgU3RpbGwgdGhlIG9sZCBjb2RlIHdhcyB3cm9uZyBhcyBpdCBjbGFpbWVkIHRoYXQgc3RhcnQ9PXN0b3A8c2VnbWVudF9zdGFydAorCSAgd291bGQgYmUgaW5zaWRlIHRoZSBzZWdtZW50IGFuZCByZXR1cm5lZCBpbnNhbmUgY2xpcHBpbmcgZGlmZmVyZW5jZXMuCisKKzIwMDktMDgtMTEgMTM6MDM6MDMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c2VnbWVudC5jOgorCSAgZ3N0c2VnbWVudDogRml4IHVuaXQgdGVzdCBhbmQgYWRkIGFuIGFkZGl0aW9uYWwgdGVzdAorCSAgVGhlIHByZXZpb3VzIHRlc3QgYXNzdW1lZCB0aGF0IHN0YXJ0PXN0b3A9c2VnbWVudF9zdGFydCB3aWxsCisJICBiZSBpbnNpZGUgdGhlIHNlZ21lbnQgYnV0IHRoaXMgaXMgd3JvbmcuCisKKzIwMDktMDgtMTEgMTI6NTk6MTMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0c2VnbWVudC5jOgorCSAgZ3N0c2VnbWVudDogQ2xpcHBpbmcgc2hvdWxkIGRldGVjdCBzdGFydD1zdG9wPHNlZ21lbnRfc3RhcnQgYXMgb3V0c2lkZSB0aGUgc2VnbWVudAorCSAgQmVmb3JlIGl0IHJldHVybmVkIHRoYXQgW3N0YXJ0LHN0b3BdIGlzIGluc2lkZSB0aGUgc2VnbWVudCBhbmQgdGhhdCB0aGUKKwkgIGRpZmZlcmVuY2UgYmV0d2VlbiBzZWdtZW50X3N0YXJ0IGFuZCBzdGFydCBuZWVkcyB0byBiZSBjbGlwcGVkLiBJZiB0aGUKKwkgIGNsaXBwaW5nIGlzIGRvbmUgb24gYSBidWZmZXIgKGxpa2UgaW4gYmFzZWF1ZGlvc2luaykgdGhpcyB3aWxsIHJlc3VsdAorCSAgaW4gdGhlIGRhdGEgcG9pbnRlciBiZWluZyBhdCBhIGludmFsaWQgbWVtb3J5IHBvc2l0aW9uLgorCSAgRml4ZXMgYnVnICM1ODk4NDkuCisKKzIwMDktMDgtMTEgMDU6NDc6MjEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVzLmM6CisJICBnc3RidXM6IFVucmVmIHBpcGVsaW5lIGFmdGVyIHVzYWdlIGluIHRlc3RfY3VzdG9tX21haW5fY29udGV4dCB1bml0IHRlc3QKKwkgIFRoaXMgbWFrZXMgdGhlIGNvcmUgdW5pdCB0ZXN0cyB2YWxncmluZCBjbGVhbiBhZ2Fpbi4KKworMjAwOS0wOC0xMSAwMjo1NDo1NSArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZG9jcy9yYW5kb20vbW92aW5nLXBsdWdpbnM6CisJICBkb2NzOiBhZGQgRWR3YXJkJ3MgZ2l0IHBsdWdpbiBtb3ZpbmcgaG93dG8gdG8gbW92aW5nLXBsdWdpbnMgZG9jdW1lbnQKKworMjAwOS0wOC0xMCAxNDozMDozNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RvYmplY3QuYzoKKwkgIGNoZWNrczogZG9uJ3QgZm9yZ2V0IHRvIGluY2x1ZGUgY29uZmlnLmggaW4gdGhlIEdzdE9iamVjdCB1bml0IHRlc3QKKworMjAwOS0wOC0xMCAxMzowNTo1NyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RvYmplY3QuYzoKKwkgIGNoZWNrczogdHJ5IHRvIGZpeCBHc3RPYmplY3QgdW5pdCB0ZXN0IG9uIE9TWAorCSAgU2VlbXMgbGlrZSB3ZSBnZXQgU0lHQlVTIGluc3RlYWQgb2YgU0lHU0VHViBoZXJlIHdoZW4gR0xpYiBjcmFzaGVzCisJICB3aGVyZSBpdCBzaG91bGRuJ3QgY3Jhc2ggKGFuZCB3ZSBldmVuIGhhdmUgYSB1bml0IHRlc3QgZm9yIHRoYXQhKS4KKworMjAwOS0wOC0xMCAxMjowMTo0OCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9wYXJzZS1sYXVuY2guYzoKKwkgIGNoZWNrczogc2V0IHBpcGVsaW5lcyB0byBOVUxMIHN0YXRlIGluIHBhcnNlLWxhdW5jaCB1bml0IHRlc3QKKwkgIEZpeGVzIHRpbWVvdXRzIGluIGdzdF90YXNrX2NsZWFudXBfYWxsKCkuCisKKzIwMDktMDgtMTAgMTE6NDI6MjUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVzLmM6CisJICBjaGVja3M6IHNldCBwaXBlbGluZSBiYWNrIHRvIE5VTEwgc3RhdGUgaW4gR3N0QnVzIHVuaXQgdGVzdAorCSAgRml4ZXMgdGltZW91dCBpbiBnc3RfdGFza19jbGVhbnVwX2FsbCgpLgorCisyMDA5LTA4LTEwIDExOjQzOjUyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKKwkgIGNoZWNrOiBhZGQgc29tZSBsb2dnaW5nIGJlZm9yZSBjYWxsaW5nIGdzdF90YXNrX2NsZWFudXBfYWxsKCkKKworMjAwOS0wOC0wOCAyMjoyNzowNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6CisJICBjaGVjazogQ2FsbCBnc3RfdGFza19jbGVhbnVwX2FsbCgpIGluIEdTVF9FTkRfVEVTVAorCSAgVGhpcyBmaXhlcyBtYW55IHVuaXQgdGVzdHMgdW5kZXIgdmFsZ3JpbmQgdGhhdCBzaG93cworCSAgbGVha2luZyBHc3RUYXNrcyB0aGF0IGFyZSBub3QgcmVhbGx5IGxlYWtlZCBidXQganVzdAorCSAgbm90IHVucmVmZmVkIGJ5IHRoZSB0YXNrIHRocmVhZCBiZWZvcmUgdGhlIHVuaXQgdGVzdAorCSAgc3RvcHBlZC4KKwkgIEZpeGVzIGJ1ZyAjNTkxMDQ1LgorCisyMDA5LTA4LTA4IDE0OjQ3OjU3ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBiYXNlc2luazogUmVtb3ZlIGRlYWQgYXNzaWdubWVudHMKKworMjAwOS0wOC0wOCAxNDo0Nzo0MCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3R0YXNrLmM6CisJICBnc3Q6IFJlbW92ZSBkZWFkIGFzc2lnbm1lbnRzCisKKzIwMDktMDgtMDcgMDI6MzY6MjkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvLmdpdGlnbm9yZToKKwkgIGdpdGlnbm9yZTogaWdub3JlIG5ldyBxdWV1ZS1lcnJvciB0ZXN0CisKKzIwMDktMDgtMDYgMjA6NDA6MDcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKKwkgIGNoZWNrOiBhZGQgaW50ZXJuYWwtY2hlY2suaCB0byBCVUlMVF9TT1VSQ0VTIGluIGF0dGVtcHQgdG8gZml4IHRoZSBidWlsZAorCSAgRm9yIHNvbWUgcGVvcGxlIHRoZSBidWlsZCBvZiBsaWJnc3RjaGVjayB3YXMgYnJva2VuIGJlY2F1c2UgdGhlIG1ha2UKKwkgIHRhcmdldCB0aGF0IGNyZWF0ZXMgdGhlIGludGVybmFsLWNoZWNrLmggZmlsZSB3YXNuJ3QgZXhlY3V0ZWQgZm9yCisJICBzb21lIHJlYXNvbi4gVGhpcyBzaG91bGQgaG9wZWZ1bGx5IGZpeCB0aGlzLgorCisyMDA5LTA4LTA2IDE4OjM4OjE2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogYXV0b2dlbi5zaDoKKwkgIGF1dG9nZW4uc2g6IG9sZGVyIGFjbG9jYWxzIGRvbid0IGxpa2UgLUkuIHNvIHVzZSAtSSAuIGluc3RlYWQKKworMjAwOS0wOC0wNiAxODo0NzozMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSAgZ3N0YnVmZmVyOiBhZGQgYWRkaXRpb25hbCBjaGVja2luZyBmb3Igd3JpdGFiaWxpdHkKKwkgIENoZWNrIGZvciBtZXRhZGF0YSB3cml0YWJpbGl0eSB3aGVuIHNldHRpbmcgY2FwcyBvbiBidWZmZXIgb3Igd2hlbiBjb3B5aW5nCisJICBtZXRhZGF0YSBmbGFncy4gT25seSBlbmFibGUgdGhlc2UgZXh0cmEgYXNzZXJ0aW9ucyBpbiBnaXQgdmVyc2lvbnMuCisJICBUaGlzIHNob3VsZCBoZWxwIHVzIGZpbmQgYmFkIGVsZW1lbnRzLgorCisyMDA5LTA4LTA0IDEwOjIyOjI1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogY29uZmlndXJlLmFjOgorCSAgY2hlY2s6IGRpc2FibGUgdW5pdCB0ZXN0IHN1cHBvcnQgb24gd2luMzIgZm9yIG5vdworCSAgVW50aWwgd2UgbWFrZSB0aGUgaW50ZXJuYWwgbGliY2hlY2sgd29yayBvbiB3aW5kb3dzLgorCisyMDA5LTA3LTE5IDE3OjA0OjU4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogLmdpdGlnbm9yZToKKwkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgorCSAgY2hlY2s6IGZpeCBzeW1ib2wgZXhwb3J0aW5nCisKKzIwMDktMDctMTcgMDA6NDY6MzIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBNYWtlZmlsZS5hbToKKwkqIGNoZWNrLWNoZWNrcy5tNDoKKwkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3BhY2suYzoKKwkgIGNoZWNrOiBmaXggaXNzdWVzIHdpdGggJ21ha2UgZGlzdGNoZWNrJworCSAgU2VlbXMgdG8gd29yayBub3csIGF0IGxlYXN0IG9uICpuaXguIE9uZSBvZiB0aGUgY29uZmlndXJlIGNoZWNrcworCSAgY2F1c2VkIHRoZXNlIHdlaXJkIGlzc3VlcyAtIGJ1dCB3aGljaCBvbmU/CisKKzIwMDktMDgtMDYgMTc6Mjc6MTIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBNYWtlZmlsZS5hbToKKwkqIGF1dG9nZW4uc2g6CisJKiBjaGVjay1jaGVja3MubTQ6CisJKiBjb25maWd1cmUuYWM6CisJKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSogbGlicy9nc3QvY2hlY2svLmdpdGlnbm9yZToKKwkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKKwkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL01ha2VmaWxlLmFtOgorCSogcGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay11bmluc3RhbGxlZC5wYy5pbjoKKwkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2sucGMuaW46CisJICBjaGVjazogdXNlIHByaXZhdGUgY29weSBvZiBjaGVjayBmb3IgbGliZ3N0Y2hlY2sKKwkgIFNlZSAjNTc3Mjc1LiBTZWVtcyB0byB3b3JrIGZpbmUsIGJ1dCBkb2Vzbid0IGRpc3RjaGVjayB5ZXQuCisKKzIwMDktMDctMTYgMTg6Mzk6MTYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrLmM6CisJKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVjay5oLmluOgorCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfZXJyb3IuYzoKKwkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2Vycm9yLmg6CisJKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19pbXBsLmg6CisJKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19saXN0LmM6CisJKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19saXN0Lmg6CisJKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19sb2cuYzoKKwkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2xvZy5oOgorCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfbXNnLmM6CisJKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19tc2cuaDoKKwkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3BhY2suYzoKKwkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3BhY2suaDoKKwkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3ByaW50LmM6CisJKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19wcmludC5oOgorCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcnVuLmM6CisJKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19zdHIuYzoKKwkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3N0ci5oOgorCSAgY2hlY2s6IGFkZCBpbnRlcm5hbCBjb3B5IG9mIGNoZWNrLTAuOS42CisJICBOb3QgaG9va2VkIHVwIHlldC4gU2VlICM1NzcyNzUuCisKKzIwMDktMDgtMDYgMTQ6MTE6NDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSAgZG9jczogZml4IFNpbmNlOiB0YWcgZm9yIG5ldyBnc3RfY2Fwc19jYW5faW50ZXJzZWN0KCkgZnVuY3Rpb24KKworMjAwOS0wNy0yMiAxMToyNDo1OSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIHV0aWxzOiB1c2UgbmV3IF9jYXBzX2Nhbl9pbnRlcnNlY3QoKQorCisyMDA5LTA3LTIyIDExOjI0OjA4ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogdXNlIG5ldyBfY2Fwc19jYW5faW50ZXJzZWN0KCkKKworMjAwOS0wNy0yMiAwOTo1NDo1NSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIGJhc2V0cmFuc2Zvcm06IHVzZSBuZXcgX2NhcHNfY2FuX2ludGVyc2VjdCgpCisKKzIwMDktMDctMjIgMDk6Mzg6MTAgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3RjYXBzLmM6CisJKiBnc3QvZ3N0Y2Fwcy5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBjYXBzOiBhZGQgZ3N0X2NhcHNfY2FuX2ludGVyc2VjdCgpCisJICBPZnRlbiB3ZSBkb24ndCBuZWVkIHRoZSByZXN1bHQgb2YgdGhlIGludGVyc2VjdGlvbi4gQWRkIGEgdmFyaWFudCB0aGF0IG9ubHkKKwkgIHRyaWVzIHRvIGludGVyc2VjdC4gSXQgY2FuIGJyZWFrIG91dCBlYXJsaWVyIGFuZCBkb2VzIGxlc3MgR1ZhbHVlIGNvcHlpbmcuCisJICBBUEk6IGdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QoKQorCisyMDA5LTA3LTIyIDA5OjI0OjU1ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYmFzZXRyYW5zZm9ybTogb25seSBjaGVjayBjYXBzX2lzX2ZpeGVkKCkgaWYgdGhleSBjaGFuZ2VkCisJICBUaGUgcHJldmlvdXMgY29kZSBjb3VsZCBjYWxsIGdzdF9jYXBzX2lzX2ZpeGVkKCkgZm9yIHRoZSBzYW1lIGNhcHMgbWFueSB0aW1lcy4KKworMjAwOS0wNy0yMSAxMzozMToxMyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSAgY2Fwczogc3BsaXQgY2FsbGJhY2sgZm9yIHN0cnVjdHVyZSBpbnRlcnNlY3QgaW50byB0d28gZnVuY3Rpb25zCisJICBXZSBjYWxsIHRoaXMgc2VwYXJhdGVseS4gdGhlcmUgaXMgbm8gbXVjaCBiZW5lZml0IGluIHJldXNpbmcgdGhlIGNhbGxiYWNrLgorCSAgU3BsaXR0aW5nIGlzIGxldCB1cyByZW1vdmUgYSBicmFuY2ggYWxzby4KKworMjAwOS0wNy0yMSAxMzoyNzowOSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSAgbG9nZ2luZzogbG9nIGlmIHdlIGNvcHkgY2FwcyB0byBiZSBhYmxlIHRvIHRyYWNrIGl0CisKKzIwMDktMDctMjEgMTE6MzI6MDEgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdGNhcHMuYzoKKwkgIGNhcHM6IGFkZCBjb21tZW50cyBhYm91dCBnX3B0cl9hcnJheSBzaXplIGJlaGF2aW91cgorCSAgSnVzdCBleHBsYWluIHRoZSBiZWhhdmlvdXIgdG8gYXZvaWQgdGhhdCBzb21lb25lIGVsc2UgaXMgd2FzdGluZyB0aW1lIHRyeWluZyB0bworCSAgaW1wcm92ZSB0aGlzIHRvby4KKworMjAwOS0wNy0yMSAxMToxNDoyMCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiB0ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL2F1ZGlvLWV4YW1wbGUuYzoKKwkgIGV4YW1wbGU6IHVucmVmIHRoZSBjbG9jayBpZAorCisyMDA5LTA3LTIxIDEwOjU2OjUzICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogdXNlIGNvcnJlY3QgdmFyaWFibGUgaW4gdGVzdAorCisyMDA5LTA3LTI4IDE2OjEzOjM3ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgorCSAgcmVnaXN0cnk6IGFkZCBmaWxlbmFtZSB0byBkZWJ1ZyBtZXNzYWdlLCBsaWtlIGVsc2V3aGVyZQorCisyMDA5LTA3LTIxIDEwOjM4OjE1ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RiaW4uYzoKKwkgIGJpbjogZml4IGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgdW51c2VkIHZhciB3aGVuIGRpc2FibGluZyBkZWJ1ZyBsb2dnaW5nCisKKzIwMDktMDgtMDYgMTM6Mjk6MjkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6CisJICBxdWV1ZTogcG9zdCBlcnJvciBtZXNzYWdlIHdoZW4gcGF1c2luZyB0YXNrCisJICBJZiBkb3duc3RyZWFtIHJldHVybnMgZXJyb3IgYW5kIHVwc3RyZWFtIGhhcyBhbHJlYWR5IGRlbGl2ZXJlZAorCSAgZXZlcnl0aGluZyAoaW5jbHVkaW5nIEVPUykgYW5kIHdpbGwgbm8gbG9uZ2VyIGJlIGFyb3VuZCB0byBmaW5kCisJICBvdXQgdGhhdCB3ZSBwYXVzZWQgKGFuZCB3aHkpLCBwb3N0IGVycm9yIG1lc3NhZ2UuICBGaXhlcyAjNTg5OTkxLgorCisyMDA5LTA3LTI4IDEyOjAzOjM2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvcXVldWUtZXJyb3IuYzoKKwkgIHF1ZXVlOiBhZGQgdW5pdCB0ZXN0CisJICBNYWtlIGEgZG93bnN0cmVhbSBlbGVtZW50IHJldHVybiBhbiBlcnJvciBhZnRlciB1cHN0cmVhbSBoYXMgYWxyZWFkeQorCSAgcHV0IGFsbCBkYXRhIGludG8gcXVldWUgKGluY2x1ZGluZyBFT1MpLiAgQXMgc3VjaCwgdXBzdHJlYW0KKwkgIHdpbGwgbm90IGJlIGFyb3VuZCB0byBwaWNrIHVwIHRoZSBlcnJvciwgc28gaXQgaXMgdXAgdG8gcXVldWUgdG8KKwkgIGFjdCBhcHByb3ByaWF0ZWx5LiAgU2VlICM1ODk5OTEuCisJICBOb3RlIHRoZXJlIG1heSBiZSBkb3duc3RyZWFtIGZhdGFsIGVycm9ycyAoZS5nLiBuZWdvdGlhdGlvbikgdGhhdCBkbworCSAgbm90IHdhcnJhbnQgYW4gZXJyb3IgbWVzc2FnZSBhbHJlYWR5IGhhdmluZyBiZWVuIHBvc3RlZC4KKworMjAwOS0wOC0wNSAxODowMjozMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBiYXNldHJhbnNmb3JtOiBjbGFyaWZ5IF9jYXBzX2lzX2VxdWFsKCkKKworMjAwOS0wOC0wNSAxNzo1ODoyMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBiYXNldHJhbnNmb3JtOiByZWZhY3RvciBtZXRhZGF0YSBtb2RpZmljYXRpb25zCisJICBDaGVjayB3aGVuIHdlIG5lZWQgdG8gdG91Y2ggdGhlIG1ldGFkYXRhIG9mIHRoZSBvdXRwdXQgYnVmZmVyIGFmdGVyIHNlbGVjdGluZworCSAgdGhlIG91dHB1dCBidWZmZXIgc28gdGhhdCB3ZSBoYXZlIGV2ZXJ5dGhpbmcgaW4gb25lIHBsYWNlLgorCSAgQWxzbyB0YWtlIGZsYWdzIGFuZCB0aW1lc3RhbXAgbW9kaWZpY2F0aW9ucyBpbnRvIGFjY291bnQuCisKKzIwMDktMDgtMDUgMTc6NTU6MTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgorCSAgY2Fwc2ZpbHRlcjogb25seSBzZXQgY2FwcyB3aGVuIGRpZmZlcmVudAorCSAgV2hlbiB3ZSBoYXZlIGFuIGlucHV0IGJ1ZmZlciB3aXRoIGNhcHMgYW5kIHdoZW4gdGhvc2UgY2FwcyBhcmUgZGlmZmVyZW50IGZyb20KKwkgIHRoZSBjYXBzIHdlIHdhbnQsIG9ubHkgdGhlbiBtYWtlIGEgd3JpdGFibGUgY29weSBvZiB0aGUgaW5wdXQgYnVmZmVyIGFzIHRoZQorCSAgb3V0cHV0IGJ1ZmZlciBhbmQgc2V0IHRoZSBjYXBzIG9uIHRoYXQgb3V0cHV0IGJ1ZmZlci4gVGhpcyBhdm9pZHMgc29tZSBjYXNlcworCSAgd2hlcmUgd2UgdG9vayBhIHN1YmJ1ZmZlciBmb3Igc2V0dGluZyBjYXBzIHRoYXQgd2VyZSB0aGUgc2FtZS4KKworMjAwOS0wOC0wNSAxNToyODo1OSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBiYXNldHJhbnNmb3JtOiBlbmFibGUgb3B0aW1pc2F0aW9uCisJICBXaGVuIHdlIGhhdmUgdGhlIHNhbWUgaW5wdXQgYXMgb3V0cHV0IGNhcHMsIHJldXNlIHRoZSBpbnB1dCBjYXBzIG9iamVjdC4gQWZ0ZXIKKwkgIHRoZSBjYXBzIHJlZmNvdW50aW5nIGhhcyBiZWVuIHNvcnRlZCBvdXQgbm93LCB3ZSBjYW4gZmluYWxseSBlbmFibGUgdGhpcworCSAgb3B0aW1pc2F0aW9uLgorCisyMDA5LTA4LTA1IDEzOjQ4OjQwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6CisJICB0ZXN0czogZG9uJ3Qgc2V0IGNhcHMgb24gdW53cml0YWJsZSBidWZmZXJzCisJICBUYWtlIHRoZSByZWYgYWZ0ZXIgc2V0dGluZyB0aGUgY2FwcyBvbiBhIGJ1ZmZlciBiZWNhdXNlIGVsc2UgdGhlIGJ1ZmZlciBpcworCSAgdGVjaGluaWNhbGx5IG5vdCB3cml0YWJsZS4KKworMjAwOS0wOC0wNSAxMzo0NzozMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSAgcXVldWU6IGdldCBjYXBzIGFmdGVyIG1ha2luZyB3cml0YWJsZQorCSAgR2V0IHRoZSBjYXBzIG9mIHRoZSBidWZmZXIgYWZ0ZXIgd2UgbWFkZSB0aGUgYnVmZmVyIHdyaXRhYmxlLiBUaGlzIGRpZCBub3QKKwkgIGNhdXNlIGFueSBwcm9ibGVtcyBidXQgaXQncyBuaWNlciB0aGlzIHdheS4KKworMjAwOS0wOC0wNSAxMzo0Njo0MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6CisJICBjYXBzZmlsdGVyOiBmaXggcmVmY291bnRpbmcgcHJvYmxlbQorCSAgTWFrZSBzdXJlIHRoZSBtZXRhZGF0YSBpcyB3cml0YWJsZSBiZWZvcmUgc2V0dGluZyB0aGUgY2FwcyBvbiBhIGJ1ZmZlci4KKworMjAwOS0wOC0wNSAxMzo0NDo1MSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBiYXNldHJhbnNmb3JtOiBmaXggcmVmY291bnRpbmcgcHJvYmxlbQorCSAgQWRkIHNvbWUgbW9yZSBkZWJ1ZyBpbmZvLgorCSAgTWFrZSBzdXJlIHRoYXQgdGhlIG91dHB1dCBidWZmZXIgaGFzIHdyaXRhYmxlIG1ldGFkYXRhIGJlZm9yZSB3ZSBhdHRlbXB0IHRvIHNldAorCSAgY2FwcyBvbiBpdC4KKwkgIGZpeGVzICM1ODM5OTkKKworMjAwOS0wOC0wNSAxMzo0NDoxMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGNhcHMuYzoKKwkgIGNhcHM6IGFkZCBzb21lIG1vcmUgZGVidWdnaW5nIGluIF9yZXBsYWNlCisKKzIwMDktMDgtMDUgMTM6NDM6MTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHBhZDogQWRkIHNvbWUgbW9yZSBkZWJ1Z2dpbmcKKworMjAwOS0wOC0wNSAxMzo0MTozMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGdob3N0cGFkLmM6CisJICBnaG9zdHBhZDogc21hbGwgaW1wcm92ZW1lbnRzCisJICBVbnJlZiB0aGUgdGFyZ2V0IHBhZCBhZnRlciB3ZSB1c2VkIGl0IGZvciBkZWJ1Z2dpbmcuCisJICBBZGQgc29tZSBtb3JlIGRlYnVnLgorCSAgT25seSByZXBsYWNlIGNhcHMgd2hlbiB0aGV5IGNoYW5nZWQuCisKKzIwMDktMDctMjkgMTM6NDY6MzUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJhc2VzaW5rOiBjbGVhbnVwcyBpbiBwb3NpdGlvbiBxdWVyaWVzCisJICBVc2UgZXhpc3RpbmcgYm9vbGVhbiBmbGFnIHRvIHBhc3MgcG9zaXRpb24gcXVlcmllcyB1cHN0cmVhbS4gQWxzbyBhZGQgdXBzdHJlYW0KKwkgIHF1ZXJpZXMgZm9yIHRoZSBsYXN0IHBvc2l0aW9uIHF1ZXJpZXMuCisKKzIwMDktMDgtMDUgMTM6MjU6MzMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJICBjb25maWd1cmUuYWM6IGZpeCBsaWJ4bWwyIGNoZWNrLCB3aGljaCBpcyBvbmx5IG5lZWRlZCBmb3IgeG1sIGxvYWQvc2F2ZSBub3cKKwkgIFNpbmNlIHRoZSByZWdpc3RyeSBkb2Vzbid0IHVzZSBsaWJ4bWwyIGFueSBsb25nZXIsIGl0J3Mgbm8gbG9uZ2VyIG5lY2Vzc2FyeQorCSAgdG8gZGlzYWJsZSBib3RoIHhtbCBsb2FkL3NhdmUgKmFuZCogdGhlIHJlZ2lzdHJ5IHRvIGdldCByaWQgb2YgdGhlIGxpYnhtbDIKKwkgIGRlcGVuZGVuY3ksIGRpc2FibGluZyBqdXN0IHhtbCBsb2FkaW5nL3NhdmluZyBpcyBlbm91Z2guIEZpeGVzICM1OTA4NDEuCisKKzIwMDktMDgtMDIgMTQ6MzM6NTkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6CisJICBnc3QtdW5pbnN0YWxsZWQ6IHJlbmFtZSB1bmluc3RhbGxlZCByZWdpc3RyeSBmaWxlIHRvIHJlZ2lzdHJ5LmRhdAorCSAgV2UncmUgbm90IHVzaW5nIHRoZSB4bWwgcmVnaXN0cnkgYW55IGxvbmdlciBhZnRlciBhbGwuCisKKzIwMDktMDgtMDIgMTQ6Mjg6MzggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6CisJICBnc3QtdW5pbnN0YWxsZWQ6IHJlZmluZSBzZWFyY2ggcGF0aHMgZm9yIHVuaW5zdGFsbGVkIHBsdWdpbiBtb2R1bGVzCisJICBVc2UgbW9yZSByZWZpbmVkIHNlYXJjaCBwYXRocyBmb3Igb3VyIHBsdWdpbiBtb2R1bGVzLiBOb3Qgb25seSBkb2VzCisJICB0aGlzIG1ha2UgdGhpbmdzIG11Y2ggZmFzdGVyIGluIGFuIHVuaW5zdGFsbGVkIHNldHVwLCBpdCBhbHNvIG1ha2VzCisJICBzdXJlIHdlJ3JlIG5vdCBhY2NpZGVudGFsbHkgdXNpbmcgb3V0LW9mLWRhdGUgcGx1Z2lucyBidWlsdCBhZ2VzCisJICBhZ28gYXMgcGFydCBvZiBhIChmYWlsZWQpICdtYWtlIGRpc3RjaGVjaycgd2hlbiB3ZSBmb3JnZXQgdG8gY2xlYW4KKwkgIHVwIHRoZSBkaXN0Y2hlY2sgYnVpbGQgZGlyZWN0b3J5LgorCisyMDA5LTA3LTI5IDIzOjQyOjM5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9kZXNpZ24vTWFrZWZpbGUuYW06CisJICBkb2NzOiBkaXN0IEdTdHJlYW1lci0xLjAgYnVmZmVyIGRlc2lnbiBkcmFmdAorCisyMDA5LTA4LTA2IDA2OjUwOjQxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgIHRhZ2xpc3Q6IEFkZCBuZXcgQUxCVU1fQVJUSVNUIHRhZyB0byB0aGUgZG9jcworCisyMDA5LTA4LTA0IDE0OjEzOjM0ICswMjAwICBKb2huIE1pbGxpa2luIDxqbWlsbGlraW5AZ21haWwuY29tPgorCisJKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSogZ3N0L2dzdHRhZ2xpc3QuaDoKKwkgIHRhZ2xpc3Q6IEFkZCBzdXBwb3J0IGZvciBBTEJVTV9BUlRJU1QgdGFnCisJICBUaGUgImFsYnVtIGFydGlzdCIgdGFnIGlzIHVzZWQgd2hlbiB0aGUgYXJ0aXN0IG9mIGFuIGVudGlyZQorCSAgYWxidW0gZGlmZmVycyBmcm9tIHRoZSBhcnRpc3Qgb2YgYW4gaW5kaXZpZHVhbCB0cmFjazsgZm9yIGV4YW1wbGUsCisJICB3aGVuIGEgImd1ZXN0IGFydGlzdCIgYXBwZWFycyBvbiBhbiBhbGJ1bSwgb3Igb24gY29tcGlsYXRpb25zLgorCSAgRml4ZXMgYnVnICM1OTA0MzAuCisKKzIwMDktMDctMjkgMTM6MzM6MTEgKzAyMDAgIFN0aWFuIFNlbG5lcyA8c3RpYW4uc2VsbmVzQGdtYWlsLmNvbT4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgYmFzZXNpbms6IFF1ZXJ5IHVwc3RyZWFtIGZvciB0aGUgcG9zaXRpb24gaWYgY29udmVyc2lvbiBpbiBQQVVTRUQgZmFpbGVkCisJICBGaXhlcyBidWcgIzU5MDA0NS4KKworMjAwOS0wNy0yOCAyMDo0MjoyMCArMDIwMCAgS2lwcCBDYW5ub24gPGtjYW5ub25AbGlnby5jYWx0ZWNoLmVkdT4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBiYXNldHJhbnNmb3JtOiBJbXByb3ZlIGRlYnVnIG91dHB1dCBpbiBnc3RfYmFzZV90cmFuc2Zvcm1fYWNjZXB0Y2FwcygpCisJICBGaXhlcyBidWcgIzU4OTUyNC4KKworMjAwOS0wNy0yMiAwOTowMTo1NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYmFzZXRyYW5zZm9ybTogRG9uJ3QgdW5zZXQgR0FQIGZsYWcgaWYgd29ya2luZyBpbiBwYXNzdGhyb3VnaCBtb2RlCisJICBGaXhlcyBidWcgIzU4OTMxNC4KKworMjAwOS0wOC0wNiAwMTo0Mzo1NyArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBjb25maWd1cmUuYWM6CisJICBiYWNrIHRvIGRldmVsb3BtZW50IC0+IDAuMTAuMjQuMQorCis9PT0gcmVsZWFzZSAwLjEwLjI0ID09PQorCisyMDA5LTA4LTA1IDAwOjUxOjE2ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIENoYW5nZUxvZzoKKwkqIE5FV1M6CisJKiBSRUxFQVNFOgorCSogY29uZmlndXJlLmFjOgorCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmhpZXJhcmNoeToKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6CisJKiBnc3RyZWFtZXIuZG9hcDoKKwkgIFJlbGVhc2UgMC4xMC4yNAorCisyMDA5LTA4LTA0IDIzOjA1OjI3ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIHBvL2FmLnBvOgorCSogcG8vYXoucG86CisJKiBwby9iZS5wbzoKKwkqIHBvL2JnLnBvOgorCSogcG8vY2EucG86CisJKiBwby9jcy5wbzoKKwkqIHBvL2RhLnBvOgorCSogcG8vZGUucG86CisJKiBwby9lbl9HQi5wbzoKKwkqIHBvL2VzLnBvOgorCSogcG8vZmkucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2h1LnBvOgorCSogcG8vaWQucG86CisJKiBwby9pdC5wbzoKKwkqIHBvL2phLnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3BsLnBvOgorCSogcG8vcHRfQlIucG86CisJKiBwby9ydS5wbzoKKwkqIHBvL3J3LnBvOgorCSogcG8vc2sucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJKiBwby96aF9DTi5wbzoKKwkqIHBvL3poX1RXLnBvOgorCSAgVXBkYXRlIC5wbyBmaWxlcworCisyMDA5LTA4LTAzIDE1OjMxOjIyICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmM6CisJICBieXRlcmVhZGVyOiBhdm9pZCB3cmFwLWFyb3VuZCBpbiBidWZmZXIgc2l6ZSBjaGVja3MuICBGaXhlcyAjNTkwNjIyLgorCisyMDA5LTA3LTMwIDE0OjQxOjMwICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIENoYW5nZUxvZzoKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIHBvL2FmLnBvOgorCSogcG8vYXoucG86CisJKiBwby9iZS5wbzoKKwkqIHBvL2JnLnBvOgorCSogcG8vY2EucG86CisJKiBwby9jcy5wbzoKKwkqIHBvL2RhLnBvOgorCSogcG8vZGUucG86CisJKiBwby9lbl9HQi5wbzoKKwkqIHBvL2VzLnBvOgorCSogcG8vZmkucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2h1LnBvOgorCSogcG8vaWQucG86CisJKiBwby9pdC5wbzoKKwkqIHBvL2phLnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3BsLnBvOgorCSogcG8vcHRfQlIucG86CisJKiBwby9ydS5wbzoKKwkqIHBvL3J3LnBvOgorCSogcG8vc2sucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJKiBwby96aF9DTi5wbzoKKwkqIHBvL3poX1RXLnBvOgorCSAgMC4xMC4yNC41IHByZS1yZWxlYXNlCisKKzIwMDktMDctMjggMjE6MTU6NTIgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKKwkgIGNvbGxlY3RwYWRzOiBHZXQgdGhlIGZsdXNoaW5nIHN0YXRlIHdpdGggdGhlIG9iamVjdCBsb2NrIHRha2VuLgorCSAgRml4ZXMgIzU5MDA1NgorCisyMDA5LTA3LTI4IDIxOjE0OjExICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6CisJICBjb2xsZWN0cGFkczogTWFrZSBzdXJlIHRoZSBDb2xsZWN0RGF0YSBsaXN0IGlzIHVwLXRvLWRhdGUgd2hlbiByZWFkaW5nL3NldHRpbmcgaXQKKwkgIFdpdGhvdXQgdGhpcywgd2Ugcmlza2VkOgorCSAgKiBDaGVja2luZyB0aGUgZmx1c2hpbmcgc3RhdGUgb24gYW4gdW5leGlzdGluZyBsaXN0CisJICAqIE5vdCBzZXR0aW5nIHRoZSBmbHVzaGluZyBzdGF0ZSBvbiBwYWRzIHRoYXQgaGFkIGp1c3QgYmVlbiBhZGRlZAorCSAgUGFydGlhbGx5IGZpeGVzICM1OTAwNTYKKworMjAwOS0wNy0yOCAyMToxMjoyNSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgorCSAgY29sbGVjdHBhZHM6IFNwbGl0IG91dCBfY2hlY2tfcGFkcyBpbnRvIGEgdmVyc2lvbiB3aXRob3V0IGxvY2sgdGFraW5nLgorCSAgVGhpcyBpcyBzbyB3ZSBjYW4gdXNlIF9jaGVja19wYWRzIGluIHBsYWNlcyB3aGVyZSB3ZSd2ZSBhbHJlYWR5IHRha2VuCisJICB0aGUgbG9jayBpbiBxdWVzdGlvbi4KKwkgIFBhcnRpYWxseSBmaXhlcyAjNTkwMDU2CisKKzIwMDktMDctMjggMTU6MjM6MTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSogbGlicy9nc3QvY2hlY2svZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmM6CisJKiBsaWJzL2dzdC9jaGVjay9nc3Rjb25zaXN0ZW5jeWNoZWNrZXIuaDoKKwkgIGNoZWNrOiBtYWtlIG5ldyBHc3RTdHJlYW1Db25zaXN0ZW5jeSBzdHJ1Y3R1cmUgcHJpdmF0ZQorCSAgVGhlcmUncyBubyBuZWVkIHRvIGhhdmUgR3N0U3RyZWFtQ29uc2lzdGVuY3kgaW4gYSBwdWJsaWMgaGVhZGVyIGZvcgorCSAgdGhlIHRpbWUgYmVpbmcsIHNvIG1ha2UgaXQgcHJpdmF0ZS4gV2hpbGUgd2UncmUgYXQgaXQsIGFkZCBhIGd0ay1kb2MKKwkgIGJsdXJiIGZvciBpdCB0aG91Z2guIFJlLWZpeGVzICM1ODg3NDQuCisKKzIwMDktMDctMjQgMTM6NTA6MTkgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogQ2hhbmdlTG9nOgorCSogY29uZmlndXJlLmFjOgorCSogcG8vYWYucG86CisJKiBwby9hei5wbzoKKwkqIHBvL2JlLnBvOgorCSogcG8vYmcucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGEucG86CisJKiBwby9kZS5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZXMucG86CisJKiBwby9maS5wbzoKKwkqIHBvL2ZyLnBvOgorCSogcG8vaHUucG86CisJKiBwby9pZC5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vamEucG86CisJKiBwby9uYi5wbzoKKwkqIHBvL25sLnBvOgorCSogcG8vcGwucG86CisJKiBwby9wdF9CUi5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vcncucG86CisJKiBwby9zay5wbzoKKwkqIHBvL3NxLnBvOgorCSogcG8vc3IucG86CisJKiBwby9zdi5wbzoKKwkqIHBvL3RyLnBvOgorCSogcG8vdWsucG86CisJKiBwby92aS5wbzoKKwkqIHBvL3poX0NOLnBvOgorCSogcG8vemhfVFcucG86CisJICAwLjEwLjIzLjQgcHJlLXJlbGVhc2UKKworMjAwOS0wNy0yNCAwOTo1MDoxOSArMDEwMCAgUm9iaW4gU3RvY2tlciA8cm9iaW5Abmlib3Iub3JnPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIGJhc2VzcmM6IGRvbid0IGhhbmRsZSBTRUVLSU5HIHF1ZXJpZXMgZm9yIGZvcm1hdHMgdGhhdCBkb24ndCBtYXRjaCB0aGUgb25lIHRoZSBzb3VyY2Ugb3BlcmF0ZXMgaW4KKwkgIFJldHVybiBGQUxTRSBpbiBiYXNlc3JjJ3MgZGVmYXVsdCBxdWVyeSBoYW5kbGVyIHdoZW4gd2UgZ2V0IGEgU0VFS0lORyBxdWVyeSBmb3IKKwkgIGEgZm9ybWF0IHRoYXQncyBub3QgdGhlIG9uZSB0aGUgc291cmNlIG9wZXJhdGVzIGluLiBQcmV2aW91c2x5IChpZS4gYmVmb3JlLCBpbgorCSAgdGhlIGdpdCB2ZXJzaW9uKSB3ZSB3b3VsZCByZXR1cm4gVFJVRSBpbiB0aGF0IGNhc2UgYW5kIHNlZWthYmxlPUZBTFNFLCB3aGljaAorCSAgaXMgbW9yZSBjb3JyZWN0LCBidXQgY2F1c2VzIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHByb2JsZW1zLiAoQmVmb3JlIHRoYXQKKwkgIHdlIHdvdWxkIGNoYW5nZSB0aGUgZm9ybWF0IG9mIHRoZSBxdWVyeSB3aGVuIGFuc3dlcmluZywgd2hpY2ggd2FzIGNvbXBsZXRlbHkKKwkgIGJyb2tlbiBzaW5jZSBjYWxsZXJzIGRvbid0IGV4cGVjdCB0aGF0IG9yIGNoZWNrIGZvciBpdCkuIFNpbmNlIHRoZSBTRUVLSU5HCisJICBxdWVyeSBpcyBhIGZhaXJseSByZWNlbnQgYWRkaXRpb24sIG5vdCBhbGwgZGVtdXhlcnMsIHBhcnNlcnMgYW5kIGRlY29kZXJzCisJICBpbXBsZW1lbnQgaXQgeWV0LCBpbiB3aGljaCBjYXNlIGFueSBTRUVLSU5HIHF1ZXJ5IGJ5IGFuIGFwcGxpY2F0aW9uIHdpbGwKKwkgIGp1c3QgYmUgcGFzc2VkIHVwc3RyZWFtIHdoZXJlIGl0IHdpbGwgdGhlbiBiZSBoYW5kbGVkIGJ5IGJhc2VzcmMuIE5vdywgaWYKKwkgIGUuZy4gdG90ZW0gZG9lcyBhIFNFRUtJTkcgcXVlcnkgZm9yIFRJTUUgZm9ybWF0IGFuZCB3ZSBoYXZlIGEgZGVtdXhlciB0aGF0CisJICBkb2Vzbid0IGltcGxlbWVudCB0aGUgcXVlcnksIGJhc2VzcmMgd291bGQgYW5zd2VyIGl0IHdpdGggc2Vla2FibGU9RkFMU0UgaW4KKwkgIG1vc3QgY2FzZXMsIGFuZCB0b3RlbSBjYW4gb25seSB0YWtlIHRoYXQgYXMgYXV0aG9yaXRhdGl2ZSBhbnN3ZXIsIG5vdCBrbm93aW5nCisJICB0aGF0IHRoZSBkZW11eGVyIGRvZXNuJ3QgaW1wbGVtZW50IHRoZSBTRUVLSU5HIHF1ZXJ5LiBUbyBhdm9pZCB0aGlzLCB3ZSBtYWtlCisJICBiYXNlc3JjIHJldHVybiBGQUxTRSB0byBTRUVLSU5HIHF1ZXJpZXMgaW4gdW5oYW5kbGVkIGZvcm1hdHMuIFRoYXQgd2F5CisJICBhcHBsaWNhdGlvbnMgbGlrZSB0b3RlbSBjYW4gZmFsbCBiYWNrIG9uIGFzc3VtaW5nIHNlZWthYmlsaXR5IGRlcGVuZGluZyBvbgorCSAgd2hldGhlciBhIGR1cmF0aW9uIGlzIGF2YWlsYWJsZSwgb3Igc29tZXN1Y2guIERvd25zdHJlYW0gZWxlbWVudHMgZG9pbmcKKwkgIHN1Y2ggcXVlcmllcyBhcmUgbGlrZWx5IHRvIGVxdWF0ZSBhbiB1bmhhbmRsZWQgcXVlcnkgd2l0aCBhIG5vbi1zZWVrYWJsZQorCSAgcmVzcG9uc2UgYXMgd2VsbCwgc28gdGhpcyBzaG91bGQgYmUgYW4gYWNjZXB0YWJsZSBmaXggZm9yIHRoZSB0aW1lIGJlaW5nLgorCSAgU2VlICM1ODQ4MzgsICM1ODg5NDQsICM1ODk0MjMgYW5kICM1ODk0MjQuCisKKzIwMDktMDctMjQgMDA6NDE6NTUgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIGZlZGFhZWUgdG8gOTRmOTVlMworCisyMDA5LTA3LTIwIDE2OjExOjAyICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgorCSAgZ3N0cmVnaXN0cnliaW5hcnk6IGFkZCArMSBhZnRlciBlcnJvciBjaGVja2luZworCSAgVGhlIGN1cnJlbnQgY29kZSBtYWRlIHRoZSBlcnJvciBjaGVja2luZyBwb2ludGxlc3MgYnkgY2hhbmdpbmcgLTEgdG8gMCBpbiBlcnJvcgorCSAgY2FzZXMuIEFsc28gZG9uJ3QgbGVhayBhIHBhZCB0ZW1wbGF0ZSBvbiBlcnJvci4KKworMjAwOS0wNy0yMCAxNTo1MToyMCArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBjb25maWd1cmUuYWM6CisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmUucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kYS5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9lcy5wbzoKKwkqIHBvL2ZpLnBvOgorCSogcG8vZnIucG86CisJKiBwby9odS5wbzoKKwkqIHBvL2lkLnBvOgorCSogcG8vaXQucG86CisJKiBwby9qYS5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9wbC5wbzoKKwkqIHBvL3B0X0JSLnBvOgorCSogcG8vcnUucG86CisJKiBwby9ydy5wbzoKKwkqIHBvL3NrLnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKKwkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuaDoKKwkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6CisJICAwLjEwLjIzLjMgcHJlLXJlbGVhc2UKKworMjAwOS0wNy0yMCAxODowMzoyMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRhc2suYzoKKwkgIHRlc3RzOiBtYWtlIHN1cmUgdGhlIHRhc2tzIGFyZSBqb2luZWQKKwkgIENhbGwgX2NsZWFuX2FsbCgpIG9uIHRoZSB0YXNrIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGpvaW5lZCBhbmQgc3RvcHBlZC4KKwkgIFNlZSAjNTg5MTI3CisKKzIwMDktMDctMjAgMTU6NDQ6MzYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R0YXNrLmM6CisJICB0YXNrOiBmaXggdGFza3Bvb2wgbGVhaworCSAgR3N0VGFrcyBkb2VzIG5vdCBhbHdheXMgdW5yZWYgdGhlIHRhc2twb29sIGl0IHdhcyBjcmVhdGVkIGZyb20gYmVjYXVzZSBpdAorCSAgZGVwZW5kcyBvbiB3aGVuIHRoZSBwb29sIHByb3ZpZGVkIGFuIElEIGZvciBqb2luaW5nIHRoZSB0YXNrLgorCSAgUmV3b3JrIHNvbWUgY29kZSBzbyB0aGF0IHdlIGFsd2F5cyB1bnJlZiB0aGUgcG9vbCBhbmQgb3B0aW9uYWxseSBqb2luIHdoZW4gdGhlCisJICBwb29sIHByb3ZpZGVkIGFuIGlkLgorCSAgRml4ZXMgIzU4OTEyNworCisyMDA5LTA3LTIwIDEzOjI2OjUxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIGJhc2VzcmM6IG1ha2UgdGFnIHF1ZXVpbmcgdGhyZWFkc2FmZQorCSAgU2VlICM1ODg3NDUKKworMjAwOS0wNy0xMyAwOToyMjowNiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvY2hlY2svZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmM6CisJKiBsaWJzL2dzdC9jaGVjay9nc3Rjb25zaXN0ZW5jeWNoZWNrZXIuaDoKKwkgIGdzdGNoZWNrOiBBZGQgYSBzdHJlYW0gY29uc2lzdGVuY3kgY2hlY2tpbmcgaGVscGVyIHJvdXRpbmUuIEZpeGVzICM1ODg3NDQKKworMjAwOS0wNy0yMCAxMTowNDowNSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKKwkgIGJpbmFyeXJlZ2lzdHJ5OiBkb24ndCB1bnJlZiBOVUxMIGlmIHdlIGhhdmUgYW4gZWFybHkgcmVhZCBlcnJvcgorCisyMDA5LTA3LTEyIDEwOjA0OjAxICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIGJhc2VzcmM6IFNlcmlhbGl6ZSB0YWdzIGludG8gdGhlIGRhdGFmbG93LiBGaXhlcyAjNTg4NzQ1CisKKzIwMDktMDctMTYgMTQ6MTc6MDMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5jOgorCSAgZG9jczogZml4IEFQSSBkb2NzIGZvciBnc3Rfe2FkYXB0ZXJ8Ynl0ZV9yZWFkZXJ9X21hc2tlZF9zY2FuX3VpbnQzMgorCSAgQ2xhcmlmeSBieXRlIHJlYWRlciBkb2NzIGEgYml0OiBvZmZzZXQgaXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQKKwkgIHBvc2l0aW9uIG9mIHRoZSByZWFkZXIsIG5vdCB0byB0aGUgc3RhcnQgb2YgdGhlIGRhdGEuIEFsc28sIHRoZQorCSAgZXhhbXBsZXMgaW4gYm90aCB0aGUgYWRhcHRlciBkb2NzIGFuZCB0aGUgYnl0ZSByZWFkZXIgZG9jcyBoYXZlCisJICB0aGUgbWFzayBhbmQgcGF0dGVybiBhcmd1bWVudHMgc3dhcHBlZCAoc2VlICM1ODc1NjEpLiBTcG90dGVkCisJICBieSBDYXJsLUFudG9uIEluZ21hcnNzb24uCisKKzIwMDktMDctMTYgMTM6NTk6MDcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFnLmM6CisJICB0YWdzOiBvbmx5IGVtaXQgYSBnX3dhcm5pbmcoKSBmb3IgZW1wdHkgdGFnIHN0cmluZ3MgZm9yIGdpdCB2ZXJzaW9ucworCSAgRm9yIG5vdywgZG9uJ3Qgc2hvdyBhIGdfd2FybmluZygpIGZvciBlbXB0eSB0YWcgc3RyaW5ncyBhbmQgTlVMTAorCSAgdGFncyB3aXRoIG5vbi1naXQgdmVyc2lvbnM7IHdlIHNob3VsZCB3YWl0IGZvciB0aGUgZml4ZXMgaW4gb3VyCisJICBwbHVnaW4gbW9kdWxlcyB0byBtYWtlIGl0IGludG8gYSByZWxlYXNlIGJlZm9yZSB3ZSBlbmFibGUgdGhpcworCSAgdW5jb25kaXRpb25hbGx5LgorCisyMDA5LTA3LTE0IDE4OjU5OjEzICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIENoYW5nZUxvZzoKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIHBvL2FmLnBvOgorCSogcG8vYXoucG86CisJKiBwby9iZS5wbzoKKwkqIHBvL2JnLnBvOgorCSogcG8vY2EucG86CisJKiBwby9jcy5wbzoKKwkqIHBvL2RhLnBvOgorCSogcG8vZGUucG86CisJKiBwby9lbl9HQi5wbzoKKwkqIHBvL2VzLnBvOgorCSogcG8vZmkucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2h1LnBvOgorCSogcG8vaWQucG86CisJKiBwby9pdC5wbzoKKwkqIHBvL2phLnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3BsLnBvOgorCSogcG8vcHRfQlIucG86CisJKiBwby9ydS5wbzoKKwkqIHBvL3J3LnBvOgorCSogcG8vc2sucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJKiBwby96aF9DTi5wbzoKKwkqIHBvL3poX1RXLnBvOgorCSAgMC4xMC4yMy4yIHByZS1yZWxlYXNlCisKKzIwMDktMDctMTQgMTI6MTU6MDUgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdHZhbHVlLmM6CisJICB2YWx1ZTogYWRkIGV4cGxhbmF0aW9uIGZvciBzaG9ydGN1dAorCisyMDA5LTA3LTEwIDIwOjA0OjQ4ICswMTAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYmFzZXRyYW5zZm9ybTogdGFrZSBzaXplIG9uY2UKKworMjAwOS0wNy0xMCAxOToxNzowNCArMDEwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0dmFsdWUuYzoKKwkgIHZhbHVlOiBmaXggY2FuX2ludGVyc2VjdCB0byBiZWhhdmUgbGlrZSBpbnRlcnNlY3QKKwkgIEFkZCBhIHF1aWNrIHJldHVybiBpZiB0d28gdHlwZXMgYXJlIHRoZSBzYW1lLiBDaGFuZ2UgdGhlIGNoZWNrIGZvciB0aGUKKwkgIGludGVyc2VjdGlvbiBmdW5jdGlvbiB0byBiZSB0aGUgc2FtZSBhcyB0aGUgb25lIHVzZWQgaW4gaW50ZXJzZWN0KCkuIFRoZQorCSAgbGF0ZXIgdHJpZXMgYm90aCBkaXJlY3Rpb25zLgorCisyMDA5LTA3LTE0IDAwOjA0OjIyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGluZm8uYzoKKwkgIGdzdGluZm86IG1haW50YWluIEFCSSBjb21wYXRpYmlsaXR5IGV2ZW4gaWYgZGVidWdnaW5nIGlzIGRpc2FibGVkCisKKzIwMDktMDctMDIgMTI6NDA6MDUgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSogZ3N0L2dzdHZhbHVlLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKKwkgIHN0cnVjdHVyZTogQ2hhbmdlIE5VTEwgYW5kIGVtcHR5IHN0cmluZyBoYW5kbGluZworCSAgRG9uJ3QgZm9yYmlkIHRoZSBlbXB0eSBzdHJpbmcgIiIgaW4gZ2VuZXJpYyBzdHJ1Y3R1cmVzLCBvbmx5IGluIHRhZ2xpc3RzLgorCSAgUHJvcGVybHkgYWxsb3cgdGhlIE5VTEwgc3RyaW5nIGJ5IGFkZGluZyBzcGVjaWFsIGNhc2VzIGZvciBzZXJpYWxpc2luZworCSAgYW5kIGRlc2VyaWFsaXNpbmcgaXQuIHByb3AxPShzdHJpbmcpTlVMTCBpcyB0aGUgTlVMTCBzdHJpbmcsCisJICBwcm9wMT0oc3RyaW5nKSJOVUxMIiBpcyB0aGUgYWN0dWFsIHN0cmluZyB3aXRoIHRoZSB2YWx1ZSAiTlVMTCIKKworMjAwOS0wNy0xMyAxMjoyMzowMiAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb21tb246CisJICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKKwkgIEZyb20gNTg0NWI2MyB0byBmZWRhYWVlCisKKzIwMDktMDctMTMgMTI6MDA6NDcgKzAyMDAgIEFuZG9uaSBNb3JhbGVzIDx5bGF0dXlhIGF0IGdtYWlsLmNvbT4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgorCSAgZmlsZXNpbms6IEZpeCBzZWdmYXVsdCB3aXRoIE1TVkMKKwkgIERvbid0IHVzZSBkZXByZWNhdGVkIGZpbGVubyBvbiBNU1ZDIGJ1dCByZXBsYWNlIHdpdGggX2ZpbGVubworCSAgRml4ZXMgIzU4NzA1MgorCisyMDA5LTA3LTEzIDA5OjMyOjU3ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBkb2NzL2Rlc2lnbi9NYWtlZmlsZS5hbToKKwkgIGRvY3MvZGVzaWduOiBVcGRhdGUgTWFrZWZpbGUuYW0gZm9yIGNoYW5nZWQgZnJhbWVzdGVwIGRvY3VtZW50IG5hbWUuCisKKzIwMDktMDctMTAgMTk6Mjc6MjEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0b29scy9nc3QtaW5zcGVjdC5jOgorCSAgdG9vbHM6IHRoZSBwbHVnaW4gZmVhdHVyZXMgbGlzdGVkIGJ5IGdzdC1pbnNwZWN0IGFyZSB0eXBlZmluZGVycywgbm90IHR5cGVzCisKKzIwMDktMDctMTAgMTg6NDY6MzkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZGVzaWduL2RyYWZ0LWJ1ZmZlcjIudHh0OgorCSAgZG9jczogYWRkIGRyYWZ0IGZvciBhcmJpdHJhcnkgYnVmZmVyIG1ldGFkYXRhIGlkZWEKKworMjAwOS0wNy0xMCAxODozNToyMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9kZXNpZ24vZHJhZnQtZnJhbWVzdGVwLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtZnJhbWVzdGVwLnR4dDoKKwkgIGRvY3M6IG1vcmUgZnJhbWVzdGVwIGRvY3Mgb3V0IG9mIGRyYWZ0CisKKzIwMDktMDctMTAgMTg6MzM6NTggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZGVzaWduL2RyYWZ0LWZyYW1lc3RlcC50eHQ6CisJICBkb2NzOiB1cGRhdGUgZnJhbWVzdGVwIGRvY3VtZW50CisJICBSZW1vdmUgZXhwZXJpbWVudGFsIHN0YXR1cyBmcm9tIHRoZSBmcmFtZXN0ZXAgZHJhZnQuCisKKzIwMDktMDctMDggMTU6MTU6MDQgKzAyMDAgIFBoaWxpcCBKw6RnZW5zdGVkdCA8cGhpbGlwakBvcGVyYS5jb20+CisKKwkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6CisJKiB0b29scy9nc3QtbGF1bmNoLmM6CisJICB0b29sczogRml4IGNvbXBpbGF0aW9uIGlmIG9wdGlvbiBwYXJzaW5nIGlzIGRpc2FibGVkCisJICBGaXhlcyBidWcgIzU4Nzk3Ni4KKworMjAwOS0wNy0wOCAxNToxMDoyNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSAgcmVnaXN0cnk6IFVzZSBnX2J1aWxkX2ZpbGVuYW1lKCkgaW5zdGVhZCBvZiBnX3N0cmpvaW4oKSB3aXRoIC8KKwkgIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSBnZW5lcmF0ZWQgZmlsZW5hbWVzIHVzZSB0aGUgcGxhdGZvcm0KKwkgIHNwZWNpZmljIGRpcmVjdG9yeSBzZXBhcmF0b3IgaW5zdGVhZCBvZiAvLgorCSAgRml4ZXMgYnVnICM1ODc5NzMuCisKKzIwMDktMDctMDcgMjA6MTM6NDggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0aW5mby5oOgorCSAgZG9jczogYWRkICdTaW5jZScgdGFnIGZvciBuZXcgR1NUX0RFQlVHX0NBVEVHT1JZX0dFVCBtYWNybworCisyMDA5LTA3LTA3IDAwOjIzOjQxICswMTAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKKwkgIGNvbGxlY3RwYWRzOiBtYWtlIGl0IHRoZSBiZXN0IG9mIHdpbXMgYW5kIGVkd2FyZHMgcGF0Y2guCisJICBDaGVjayB0aGUgcmlnaHQgZmx1c2hpbmcgZmxhZywgYnV0IHN0aWxsIGFkZCBpdCB0byB0aGUgcGFkLWxpc3QuCisKKzIwMDktMDYtMzAgMTE6MjY6MzQgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3RpbmZvLmM6CisJKiBnc3QvZ3N0aW5mby5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBpbmZvOiBhbGxvdyBnZXR0aW5nIG90aGVyIGxvZyBjYXRlZ29yaWVzLiBGaXhlcyAjNTg3NDE3CisJICBBZGQgYSBuZXcgbWFjcm8gR1NUX0RFQlVHX0NBVEVHT1JZX0dFVCB0byBnZXQgYSBsb2cgY2F0ZWdvcnkgYnkgbmFtZS4gVGhpcworCSAgYWxsb3dzIHBsdWdpbnMgdG8gdXNlIGUuZy4gY29yZSBjYXRlZ29yaWVzIGxpa2UgUEVSRk9STUFOQ0Ugb3IgQ0xPQ0suCisJICBBUEk6IEdTVF9ERUJVR19DQVRFR09SWV9HRVQKKworMjAwOS0wNy0wNiAxOTo1MTo1NyArMDEwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIGJhc2V0cmFuc2Zvcm06IG1ha2UgY29tbWVudCBhIEZJWE1FIGNvbW1lbnQKKworMjAwOS0wNy0wNiAxOTo1MDo1MiArMDEwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0bWluaW9iamVjdC5jOgorCSAgbG9nZ2luZzogbG9nIG9iamVjdCB0eXBlIGluIG1lc3NhZ2UKKworMjAwOS0wNy0wNiAxOTo0ODo1OCArMDEwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBsb2dnaW5nOiB1c2UgcGVyZiBjYXRlZ29yeSBmb3IgZHJvcHBlZCBidWZmZXJzCisKKzIwMDktMDYtMjkgMTE6MjY6NTcgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKKwkgIGNvbGxlY3RwYWRzOiBEb24ndCBmb3J3YXJkIEZMVVNIX1NUT1AgaWYgc29tZSBpbnB1dCBzdHJlYW1zIGFyZSBzdGlsbCBmbHVzaGluZy4KKwkgIFRoaXMgZ3VhcmFudGVlcyB0aGF0IG9ubHkgb25lIEZMVVNIX1NUT1AgZXZlbnQgKHRoZSBsYXN0IG9uZSkgd2lsbCBiZSBzZW50CisJICBkb3duc3RyZWFtIHdoZW4gYSBmbHVzaGluZyBzZWVrIGlzIGJlaW5nIGRvbmUgdGhyb3VnaCBjb2xsZWN0cGFkcy4KKworMjAwOS0wNi0yNCAxMToxMTozNSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgorCSAgY29sbGVjdHBhZHM6IFVwZGF0ZSB0aGUgY29va2llIHdoZW4gc2V0dGluZyBvdXJzZWx2ZXMgYXMgZmx1c2hpbmcuCisJICBUaGlzIGZvcmNlcyB0aGUgcGFkIHN0YXR1cyB0byBiZSByZS1ldmFsdWF0ZWQgb24gdGhlIG5leHQgX2NoZWNrX3BhZHMoKS4KKworMjAwOS0wNi0wOSAxNDo1NDoyNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXJsaXN0LmM6CisJKiBnc3QvZ3N0YnVzLmg6CisJKiBnc3QvZ3N0Y2hpbGRwcm94eS5oOgorCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5Lmg6CisJKiBnc3QvZ3N0Z2hvc3RwYWQuaDoKKwkqIGdzdC9nc3RtZXNzYWdlLmg6CisJKiBnc3QvZ3N0cXVlcnkuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmg6CisJICBkb2NzOiBmaXggZ3RrLWRvYyAvKjwgcHJpdmF0ZSA+Ki8gbWFya2VyCisKKzIwMDktMDYtMDkgMTQ6NDg6NTYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSAgdHlwZWZpbmRlbGVtZW50OiBsb2cgcHJvYmFiaWxpdHkgaW4gZGVidWcgbWVzc2FnZQorCisyMDA5LTA2LTMwIDE4OjIyOjI1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0bWVzc2FnZS5jOgorCSAgbWVzc2FnZTogZml4IHBhcnNpbmcgb2YgdGhlIHN0ZXAgZG9uZSBtZXNzYWdlCisJICBQYXJzZSB0aGUgZHVyYXRpb24gZmllbGQgdG9vLgorCisyMDA5LTA2LTI5IDExOjI0OjI1ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKKwkgIGJpbmFyeXJlZ2lzdHJ5OiBVc2UgbG9jYWwgdmFsdWVzIGluIHdoaWxlL2ZvciBsb29wcywgdXNlIGJyYW5jaCBwcmVkaWN0aW9uIG1hY3JvcworCisyMDA5LTA2LTI5IDExOjIzOjMxICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6CisJKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkgIFNwcmVhZCBicmFuY2ggcHJlZGljdGlvbiBtYWNyb3MuCisJICBUaGVzZSBhcmUgYmFzZWQgb24gcHJvZmlsaW5nIHNldmVyYWwgcGxheWJhY2sgc2NlbmFyaW9zIHVzaW5nIHBsYXliaW4yLgorCisyMDA5LTA2LTI5IDExOjIwOjEyICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKKwkqIGdzdC9nc3R2YWx1ZS5jOgorCSAgVXNlIGxvY2FsIHZhcmlhYmxlcyBpbiBmb3Ivd2hpbGUgbG9vcHMuCisJICBUaGlzIG1ha2VzIHRoZSBnZW5lcmF0ZWQgY29kZSBmYXN0ZXIgc2luY2U6CisJICAqIEl0IHdvbid0IGhhdmUgdG8gcmVhZCBhbiB1bmRpcmVjdCB2YWx1ZSAod2hpY2ggd2lsbCBtb3N0IGxpa2VseSBiZQorCSAgb3V0c2lkZSBvZiB0aGUgTDEvTDIgY2FjaGUpCisJICAqIFdlIGtub3cgdGhhdCB2YWx1ZSBuZXZlciBjaGFuZ2VzICh0aGUgY29tcGlsZXIgaGFzIG5vIGNsdWUgdGhhdCBpdCBkb2Vzbid0KS4KKworMjAwOS0wNi0wOSAxOTowODoyNiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5jOgorCSAgbGlicy9jb250cm9sbGVyOiBTZXQgZGVmYXVsdCBnc3QgZGVidWdnaW5nIGNhdGVnb3J5LgorCisyMDA5LTA2LTI5IDExOjU3OjEzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9iZW5jaG1hcmtzL21hc3MtZWxlbWVudHMuc2NtOgorCSAgdGVzdHM6IGZpeCBleGFtcGxlCisKKzIwMDktMDYtMjkgMTE6NTY6MTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJ1ZmZlcmxpc3Q6IHVzZSBmYXN0ZXIgZ3N0X2J1ZmZlcl9saXN0X2dldCgpCisJICBVc2UgdGhlIGZhc3RlciBnc3RfYnVmZmVyX2xpc3RfZ2V0KCkgdG8gZ2V0IHRoZSBmaXJzdCBidWZmZXIgb2YgYSBsaXN0LgorCisyMDA5LTA2LTI5IDExOjU1OjE0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgorCSAgYnVmZmVybGlzdDogZml4IGV4YW1wbGUKKwkgIFRoZSBfZG8gZnVuY3Rpb24gbm93IHRha2VzIHVzZXJfZGF0YSBpbiBhbGwgY2FzZXMuCisKKzIwMDktMDYtMjkgMTE6NDY6MDAgKzAyMDAgIE9nbnlhbiBUb25jaGV2IDxvZ255YW5AYXhpcy5jb20+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJhc2VzaW5rOiB0YWtlIHRpbWVzdGFtcCBsYXRlcgorCSAgTWFrZSBzdXJlIHdlIGRvbid0IGFjY2lkZW50YWxseSBjYXN0IGEgYnVmZmVybGlzdCBvZiBhIGJ1ZmZlciBhbmQgdHJ5IHRvIHRha2UKKwkgIHRoZSB0aW1lc3RhbXAgb2YgaXQuCisJICBSZWZpeGVzICM1ODU5NjAKKworMjAwOS0wNi0yOSAxMTowNzowMCArMDIwMCAgSm9uYXMgSG9sbWJlcmcgPGpvbmFzLmhvbG1iZXJnIGF0IGF4aXMuY29tPgorCisJKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgorCSAgZG9jczogZml4IHNvbWUgdHlwb3MKKworMjAwOS0wNi0yOSAxMToyNDowNCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0X3ByaXZhdGUuaDoKKwkqIGdzdC9nc3RpbmZvLmM6CisJKiBnc3QvZ3N0bWluaW9iamVjdC5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGxvZ2dpbmc6IGFkZCBhIHBlcmZvcm1hY2UgbG9nIGNhdGVnb3J5CisJICBUaGlzIGNhdGVnb3J5IGNhbiBiZSB1c2VkIHRvIGxvZyBzbG93IGNvZGUgcGF0aCBhbmQgaGVscCBhdWRpdGluZyB0aGUKKwkgIHBlcmZvcm1hbmNlLiBBZGQgRklYTUUtMC4xMSB0byBzb21lIHF1ZXN0aW9uYWJsZSBjYXRlZ29yaWVzLgorCisyMDA5LTA2LTI3IDE2OjM0OjM2ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkgIHN0cnVjdHVyZTogZml4IGludC0+Z2ludCB0byBiZSBpbiBzeW5jIHdpdGggdGhlICouaCAgYW5kIHVzYWdlCisKKzIwMDktMDYtMjYgMTM6MzM6NTAgKzAxMDAgIEphbiBTY2htaWR0IDxqYW4uc2NobWlkdEBzdW4uY29tPgorCisJKiBhdXRvZ2VuLnNoOgorCSAgYXV0b2dlbi5zaDogVXNlIHByaW50ZiBpbnN0ZWFkIG9mICdlY2hvIC1uJy4gQ2hlY2sgZm9yIGF1dG9tYWtlLTEuMVswMV0KKwkgIENoZWNrIGZvciBtb3JlIGF1dG9tYWtlIGNvbW1hbmQgdmFyaWFudHMuIFVzZSBwcmludGYgaW5zdGVhZCBvZiAnZWNobyAtbicKKwkgIGZvciBwb3J0YWJpbGl0eQorCisyMDA5LTA2LTI2IDEzOjQxOjExICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSBmODEwMDMwIHRvIDU4NDViNjMKKworMjAwOS0wNi0yNiAxMjo1MDo1MyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSAgcmVxdWVzdC1wYWQ6IHRlbGwgYWJvdXQgcmVmIGNvdW50cyBpbiByZWxlYXNlX3JlcXVlc3RfcGFkIGRvY3MuCisJICBJdCBpcyBub3QgdG9vIG9idmlvdXMgdGhhdCBnZXR0aW5nIGFuZCByZWxlYXNpbmcgcmVxdWVzdCBwYWRzIGlzIG5vdCBlbnRpZXJseQorCSAgc3ltZXRyaWNhbCByZWdhcmRpbmcgdG8gdGhlIHBhZCByZWZjb3VudC4gQWRkIGEgbm90ZSBhYm91dCB0aGF0IHRvIHRoZSBkb2NzLgorCSAgVGhpcyBtaWdodCBkZXNlcnZlIGEgRklYTUUtMC4xMSB0b28uCisKKzIwMDktMDYtMjUgMTE6MjU6NDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBiYXNlc2luazogZG9uJ3QgZG8gdGhpbmdzIHdpdGggc2lkZSBlZmZlY3RzIHdpdGhpbiBhIGdfYXNzZXJ0KCkKKwkgIE1ha2UgdGhlIGJ1ZmZlcmxpc3Qgc3R1ZmYgd29yayBwcm9wZXJseSB3aGVuIHRoaW5ncyBhcmUgY29tcGlsZWQKKwkgIHdpdGggLURHX0RJU0FCTEVfQVNTRVJULgorCisyMDA5LTA2LTI0IDE4OjMxOjA4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSAgY2FwczogYXZvaWQgZG9pbmcgbG9naWMgaW4gZ19hc3NlcnQKKwkgIE1ha2Ugc3VyZSB3ZSBzdGlsbCBkbyB0aGUgcmlnaHQgdGhpbmcgd2hlbiBnbGliIGlzIGNvbXBpbGVkIHdpdGhvdXQKKwkgIGFzc2VydGlvbnMuCisKKzIwMDktMDYtMjIgMDU6MDA6NTQgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6CisJICBtdWx0aXF1ZXVlOiBGaXJlIHRoZSBvdmVycnVuIHNpZ25hbCBvbiBFT1MKKwkgIEZpeGVzIHN0YXJ0dXAgb2Ygc29tZSBzaG9ydCBNUEVHIGZpbGVzIHdpdGggZGVjb2RlYmluMi9wbGF5YmluMgorCSAgd2hlcmUgYWxsIHRoZSBkYXRhIGZpdHMgaW4gdGhlIG11bHRpcXVldWUgYW5kIEVPUyBhcnJpdmVzIGJlZm9yZQorCSAgdGhlIGdyb3VwIGlzIGV4cG9zZWQuCisKKzIwMDktMDYtMjQgMTU6MTM6MzcgKzAxMDAgIEphbiBTY2htaWR0IDxqYW4uc2NobWlkdEBzdW4uY29tPgorCisJKiBjb21tb246CisJICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKKwkgIEZyb20gZjNiYjUxYiB0byBmODEwMDMwCisKKzIwMDktMDMtMjggMTM6NTk6MDggKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkgIEdzdFN0cnVjdHVyZTogVXNlIGRpcmVjdCB2YWx1ZXMgZm9yIHJlcGV0aXRpdmUgY29uZGl0aW9uYWxzIChmb3Ivd2hpbGUpLgorCisyMDA5LTA2LTI0IDEwOjQ1OjUyICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBnc3QvZ3N0ZXZlbnQuYzoKKwkqIGdzdC9nc3RtZXNzYWdlLmM6CisJKiBnc3QvZ3N0bWluaW9iamVjdC5jOgorCSogZ3N0L2dzdHF1ZXJ5LmM6CisJICBtaW5pb2JqZWN0czogRG9uJ3QgY2hhaW4gdXAgdG8gZW1wdHkgZmluYWxpemUgbWV0aG9kLgorCSAgSWYgZXZlciB3ZSBkbyBhbnl0aGluZyBpbiBtaW5pX29iamVjdF9maW5hbGl6ZSwgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGUgNAorCSAgY29yZSBtaW5pb2JqZWN0IGZpbmFsaXplIG1ldGhvZHMgY2hhaW4gYmFjayB1cCBhZ2Fpbi4KKworMjAwOS0wMy0yNyAyMDoxNzoxNSArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZ3N0L2dzdGNhcHMuYzoKKwkgIGdzdGNhcHM6IFVzZSBkaXJlY3QgdmFsdWVzIGZvciByZXBldGl0aXZlIGNvbmRpdGlvbmFscyAoZm9yL3doaWxlKS4KKworMjAwOS0wNi0yNCAwOToyODowMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIE1ha2VmaWxlLmFtOgorCSogZ3N0L2dzdC5jOgorCSAgbWFrZSBjaGVjazogYWRkIGNoZWNrIGZvciBlbnVtIHR5cGUgY2xhc3MgdW5yZWZzIGluIGdzdF9kZWluaXQoKSB0b28KKwkgIEp1c3QgYmVjYXVzZSB3ZSBjYW4gcmVhbGx5LgorCisyMDA5LTA2LTIzIDEzOjQ0OjUwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dHJhY2UuYzoKKwkqIGdzdC9nc3R0cmFjZS5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICB0cmFjZTogdXNlIHByb3BlciBsb2NraW5nIGluIEdzdFRyYWNlCisJICBQcm90ZWN0IHRoZSBhbGxvY2F0ZWQgbGlzdCBvZiBvYmplY3RzIHdpdGggYSBsb2NrIHNvIHRoYXQgdHJhY2UgYWN0dWFsbHkgd29ya3MKKwkgIHJlbGlhYmx5LgorCSAgU2hvcnRjdXQgdGhlIGFsbG9jIHRyYWNlIHNvb25lciB3aGVuIGRpc2FibGVkLgorCisyMDA5LTA2LTIzIDEzOjM0OjM1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0b2JqZWN0LmM6CisJICBvYmplY3Q6IGFsc28gYWRkIHBvaW50ZXJzIHRvIGRlYnVnCisJICBBZGQgdGhlIG9iamVjdCBwb2ludGVycyBpbiB0aGUgZGVidWcgaW5mbyBmb3IgX3JlcGxhY2UuCisKKzIwMDktMDYtMjMgMTI6NTY6NTkgKzAyMDAgIENoYWQgSGFubmEgPGNoYW5uYUBsaWdvLmNhbHRlY2guZWR1PgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKKwkgIGNhcHNmaWx0ZXI6IEFkZCBHQVAgZmxhZyBzdXBwb3J0CisJICBjYXBzZmlsdGVyIGRvZXNuJ3QgYWN0dWFsbHkgdG91Y2ggdGhlIGRhdGEgc28gd2UgZG9uJ3Qgd2FudCB0aGUgR0FQIGZsYWcgdG8KKwkgIGJlIHVuc2V0IGJ5IGJhc2V0cmFuc2Zvcm0uCisJICBGaXhlcyBidWcgIzU4NjU2Ni4KKworMjAwOS0wNi0yMyAxMDowNTowMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgorCSAgZGVmczogYWRkIG5ldyBieXRlIHJlYWRlciBtZXRob2RzCisKKzIwMDktMDUtMjIgMTQ6NDc6MzMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaDoKKwkqIHRlc3RzL2NoZWNrL2xpYnMvYnl0ZXJlYWRlci5jOgorCSAgYnl0ZXJlYWRlcjogYWRkIGEgYnVuY2ggb2YgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHN0cmluZ3MgYW5kIGEgZGF0YSBkdXAgZnVuY3Rpb24KKwkgIEFQSTogZ3N0X2J5dGVfcmVhZGVyX2R1cF9kYXRhCisJICBBUEk6IGdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nCisJICBBUEk6IGdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjgKKwkgIEFQSTogZ3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmdfdXRmMTYKKwkgIEFQSTogZ3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmdfdXRmMzIKKwkgIEFQSTogZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nCisJICBBUEk6IGdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGY4CisJICBBUEk6IGdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGYxNgorCSAgQVBJOiBnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmMzIKKwkgIEFQSTogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3RyaW5nCisJICBBUEk6IGdzdF9ieXRlX3JlYWRlcl9wZWVrX3N0cmluZ191dGY4CisJICBBUEk6IGdzdF9ieXRlX3JlYWRlcl9nZXRfc3RyaW5nCisJICBBUEk6IGdzdF9ieXRlX3JlYWRlcl9nZXRfc3RyaW5nX3V0ZjgKKwkgIEFuZCBzb21lIGJhc2ljIHVuaXQgdGVzdHMuIEZpeGVzICM1ODY1NjguCisKKzIwMDktMDYtMjIgMTg6MTc6MjggKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdHRhZ2xpc3QuYzoKKwkgIHRhZ2xpc3Q6IGZpeCB0eXBvIGluIHRhZyBkZXNjcmlwdGlvbgorCisyMDA5LTA2LTIxIDAwOjI2OjMzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKKwkgIHRlc3RzOiBmaXggY3Jhc2ggYW5kIGxlYWsgaW4gYnVmZmVybGlzdHMgdW5pdCB0ZXN0CisJICBEb24ndCBhY2Nlc3MgYWxyZWFkeS1mcmVlZCBpdGVyYXRvciwgbWFrZXMgY2hlY2stdmFsZ3JpbmQgd29yayBhbmQgZml4ZXMKKwkgIGNyYXNoIG9uIFBQQzsgdW5yZWYgYnVmZmVyIHdlJ3JlIGdvaW5nIHRvIHN0ZWFsIHRvIG1ha2UgdmFsZ3JpbmQgaGFwcHkuCisKKzIwMDktMDYtMjEgMDA6MDk6NTMgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogZ3N0L2dzdC5jOgorCSAgaW5pdDogRml4IGluZGVudCwgYW5kIHJlZiB0aGUgZ3N0X2J1ZmZlcl9saXN0X2l0ZW1fZ2V0X3R5cGUoKSBjbGFzcworCSAgRml4IHRoZSBjaGVjayB0ZXN0cyBieSByZWZmaW5nIHRoZSBHc3RCdWZmZXJMaXN0IGNsYXNzLiBSdW4gZ3N0LWluZGVudAorCSAgdG8gbWFrZSBnaXQgaGFwcHkgYWJvdXQgc29tZSBleGlzdGluZyBzdHVmZgorCisyMDA5LTA2LTE5IDIxOjAzOjQ2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKKwkgIGdzdC1pbnNwZWN0OiBmaXggYnJva2VuIGZsYWdzIHRvIGZsYWcgc3RyaW5nIHNlcmlhbGlzYXRpb24KKwkgIGUuZy4gY2RwYXJub2lhc3JjIHdvdWxkIHNob3cgZnJhZ21lbnR8ZnVsbCBmb3IgYSBmbGFncyB2YWx1ZSBvZiAyLgorCisyMDA5LTA2LTE5IDE5OjM1OjA0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgorCSAgdGVlOiBhZGQgYnVmZmVyLWxpc3Qgc3VwcG9ydAorCisyMDA5LTA2LTE5IDE5OjI0OjU2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YnVmZmVybGlzdC5oOgorCSAgYnVmZmVybGlzdDogcmVtb3ZlIG9sZCBlbnVtIGZyb20gZG9jcworCisyMDA5LTA2LTE5IDE0OjQ1OjQyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGluZm8uaDoKKwkgIGdzdGluZm86IGRlZmluZSBfX2dzdF9kZWJ1Z19taW4gdG8gTE9HX0xFVkVMX05PTkUgaWYgZGVidWdnaW5nIGlzIGRpc2FibGVkCisJICBKdXN0IGluIGNhc2Ugc29tZW9uZSB3aG8gY2xlYXJseSBjYW4ndCBiZSBkZXRlcnJlZCBieSBhbnkgbnVtYmVyIG9mIGxlYWRpbmcKKwkgIHVuZGVyc2NvcmVzIHVzZXMgdGhpcyB2ZXJ5IHByaXZhdGUgYnV0IHN0aWxsIHNvbWV3aGF0IGRvY3VtZW50ZWQgc3ltYm9sCisJICBkaXJlY3RseSBpbiB0aGVpciBjb2RlICgqY291Z2gqIHF0ZGVtdXggKmNvdWdoKikuCisKKzIwMDktMDYtMTkgMTU6Mjk6MTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgorCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuaDoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXJsaXN0LmM6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGJ1ZmZlcmxpc3Q6IFZhcmlvdXMgY2xlYW51cHMKKwkgIEFkZCBuZXcgbWV0aG9kIHRvIGl0ZXJhdGUgYSBidWZmZXJsaXN0IHdpdGhvdXQgaGF2aW5nIHRvIGFsbG9jYXRlIGFuIGl0ZXJhdG9yLgorCSAgQWRkIGNvbnZlbmllbmNlIG1ldGhvZCBmb3IgZ2V0dGluZyBhbiBpdGVtIGZyb20gdGhlIGxpc3QgYmFzZWQgb24gdGhlIGdyb3VwIGFuZAorCSAgaW5kZXguCisJICBSZW1vdmUgcmVkdW5kYW50IF9kb19kYXRhIGNhbGxiYWNrIGFuZCBtZXRob2QuCisJICBVcGRhdGUgdW5pdC10ZXN0cyBhbmQgYWRkIHNvbWUgbW9yZSBmb3IgdGhlIG5ldyBtZXRob2RzLgorCisyMDA5LTA2LTE5IDE0OjEwOjMwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdG1lc3NhZ2UuYzoKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkgIGRvY3M6IG1ha2UgZ3RrLWRvYyBoYXBweQorCisyMDA5LTA2LTE5IDEzOjUxOjU5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogcG8vYWYucG86CisJKiBwby9hei5wbzoKKwkqIHBvL2JlLnBvOgorCSogcG8vYmcucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGEucG86CisJKiBwby9kZS5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZXMucG86CisJKiBwby9maS5wbzoKKwkqIHBvL2ZyLnBvOgorCSogcG8vaHUucG86CisJKiBwby9pZC5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vamEucG86CisJKiBwby9uYi5wbzoKKwkqIHBvL25sLnBvOgorCSogcG8vcGwucG86CisJKiBwby9wdF9CUi5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vcncucG86CisJKiBwby9zay5wbzoKKwkqIHBvL3NxLnBvOgorCSogcG8vc3IucG86CisJKiBwby9zdi5wbzoKKwkqIHBvL3RyLnBvOgorCSogcG8vdWsucG86CisJKiBwby92aS5wbzoKKwkqIHBvL3poX0NOLnBvOgorCSogcG8vemhfVFcucG86CisJICBwbzogdXBkYXRlIC5wbyBmaWxlcyBhZnRlciBzdHJpbmcgY2hhbmdlcworCisyMDA5LTA2LTE5IDEzOjQ4OjQ4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzoKKwkgIGZkc2luazogY2xlYW4gdXAgc29tZSBtb3JlIGVycm9yIGFuZCBkZWJ1ZyBtZXNzYWdlcworCisyMDA5LTA2LTE5IDEzOjQyOjQ1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHRhc2twb29sLmM6CisJICB0YXNrcG9vbDogZml4IHVudXNlZCB2YXJpYWJsZSB3YXJuaW5nIGluIGNhc2UgZGVidWdnaW5nIGlzIGRpc2FibGVkCisKKzIwMDktMDYtMTkgMTM6NDA6MTMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0aW5mby5jOgorCSAgZ3N0aW5mbzogZml4IGV4cG9ydCBvZiBHU1RfQ0FUX0JVRkZFUl9MSVNUIHdoZW4gLS1nc3QtZGlzYWJsZS1kZWJ1ZyBpcyB1c2VkCisJICBNb3ZlIGFsbCB0aGUgY2F0ZWdvcmllcyB0byBleHBvcnQgdG8gb25lIHNpbmdsZSBwbGFjZSwgc28gd2UgZG9uJ3QKKwkgIGFjY2lkZW50YWxseSB1cGRhdGUgb3IgYWRkIHZhcnMgaW4gb25lIHBsYWNlIGJ1dCBub3QgdGhlIG90aGVyLgorCisyMDA5LTA2LTE4IDE2OjUwOjQyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6CisJICBjb2xsZWN0cGFkczogdXNlIHRoZSByaWdodCBmbHVzaGluZyBmbGFnLgorCSAgV2UgbmVlZCB0byB1c2UgdGhlIHBhZCBwcml2YXRlIGZsYWcgYmVjYXVzZSB0aGUgb3RoZXIgcGFkIGZsYWcgaXMgcHJvdGVjdGVkIHdpdGgKKwkgIHRoZSBwYWQgbG9jayBpbnN0ZWFkLgorCisyMDA5LTA2LTE4IDE2OjQxOjQ2ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6CisJICBjb2xsZWN0cGFkczogUHJvcGVybHkgaGFuZGxlIGZsdXNoaW5nIHBhZHMuCisJICBJZiBhIHBhZCBpcyBmbHVzaGluZywgaXQgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGFzIGVpdGhlciBlb3Mgb3IKKwkgIGNvbnRhaW5pbmcgZGF0YS4KKworMjAwOS0wNi0xOCAxMToyNzoyMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6CisJICBmZHNpbms6IGZpeCBlcnJvciBtZXNzYWdlCisJICBVc2VycyBzaG91bGQgbmV2ZXIgc2VlIHRoZSB0ZXJtICdmaWxlIGRlc2NyaXB0b3InLCBtdWNoIGxlc3MgYSBmaWxlCisJICBkZXNjcmlwdG9yIG51bWJlciwgaW4gYW4gZXJyb3IgbWVzc2FnZS4gUHV0IHRoYXQgaW50byB0aGUgZGVidWcKKwkgIHN0cmluZyBpbnN0ZWFkIGFuZCB1c2UgdGhlIGRlZmF1bHQgZXJyb3IgbWVzc2FnZS4KKworMjAwOS0wNi0xOCAxMTo0OTozMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuaDoKKwkgIGZkc2luazogYWRkIHRoZSBuZXcgZmllbGQgaW4gdGhlIGhlYWRlcgorCisyMDA5LTA2LTE4IDEwOjU1OjM5ICswMjAwICBCZW5qYW1pbiBHYWlnbmFyZCA8YmVuamFtaW4gYXQgZ2FpZ25hcmQubmV0PgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOgorCSAgZmRzaW5rOiBtYWtlIGZkc2luayBzZWVrYWJsZQorCSAgSW1wbGVtZW50IHRoZSBzYW1lIGxvZ2ljIGFzIGZpbGVzaW5rIHRvIGltcGxlbWVudCBzZWVraW5nLgorCSAgRml4ZXMgIzU3ODkwOAorCisyMDA5LTA2LTE3IDE2OjQ1OjE3ICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+CisKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJICBnc3RlbGVtZW50OiBtb3ZlZCB0aGUgY2xvY2sgdW5yZWYgdG8gdGhlIHJpZ2h0IHBsYWNlCisKKzIwMDktMDYtMTcgMTY6MTc6MjcgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KKworCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkgIGdzdGVsZW1lbnQ6IHVucmVmIHRoZSBjbG9jayB3aGVuIHRoZSBlbGVtZW50IGNoYW5nZXMgdG8gbnVsbCBzdGF0ZQorCisyMDA5LTA2LTE3IDAwOjI5OjQwICswNDAwICDQoNGD0YHQu9Cw0L0g0JjQttCx0YPQu9Cw0YLQvtCyIDxscm4xOTg2QGdtYWlsLmNvbT4KKworCSogZ3N0L2dzdC5jOgorCSAgUmVwbGFjZWQgZGVwcmVjYXRlZCB3aW4zMi1jb21wYXRpYmlsaXR5IGZ1bmN0aW9uIHdpdGggdW5kZXByZWNhdGVkIG9uZS4KKwkgIEZpeGVzICM1NjA0NDIuCisKKzIwMDktMDYtMTYgMTg6MzI6MTIgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KKworCSogZ3N0L2dzdGJpbi5jOgorCSAgZ3N0YmluOiBzd2FwIHRoZSBsaW5lcyBvZiBteSBwcmV2aW91cyBjb21taXQKKwkgIEZpeGVzIGEgYnVnIGludHJvZHVjZWQgaW4gbXkgcHJldmlvdXMgY29tbWl0IHRoYXQgcmVsZWFzZWQgdGhlCisJICBjbG9jayBwcm92aWRlciBhbmQgYWZ0ZXIgdXNlZCBpdCB0byBjcmVhdGUgdGhlIGNsb2NrIGxvc3QgbWVzc2FnZS4KKworMjAwOS0wNi0xNiAxNzo1MToxMiArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgorCisJKiBnc3QvZ3N0YmluLmM6CisJICBnc3RiaW46IHJlbW92ZSBjbG9jayByZWZlcmVuY2VzIHdoZW4gY2xvY2sgbG9zdCBoYXBwZW5zCisJICBSZW1vdmUgcmVmZXJlbmNlIHRvIGNsb2NrIGFuZCBjbG9jayBwcm92aWRlciBzdG9yZWQgaW4gdGhlIGJpbgorCSAgd2hlbiB0aGUgY2xvY2twcm92aWRlciBlbGVtZW50IGlzIHJlbW92ZWQgZnJvbSB0aGUgYmluLgorCisyMDA5LTA2LTE2IDEzOjM0OjM4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJICBiYXNlc2luazogYWRkIFNpbmNlIHRhZyBmb3IgbmV3IG1ldGhvZAorCisyMDA5LTA2LTE2IDEzOjMyOjM3ICswMjAwICBCcmFua28gU3ViYXNpYyA8YnJhbmtvLnN1YmFzaWMgYXQgYXhpcy5jb20+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKKwkgIGJhc2VzaW5rOiBhZGQgc3VwcG9ydCBmb3IgYnVmZmVyIGxpc3QKKwkgIEZpeGVzICM1ODU5NjAKKworMjAwOS0wNi0xNiAxMTozNDo1NCArMDIwMCAgQnJhbmtvIFN1YmFzaWMgPGJyYW5rby5zdWJhc2ljIGF0IGF4aXMuY29tPgorCisJKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKKwkgIGdob3N0cGFkOiBBZGQgc3VwcG9ydCBmb3IgR3N0QnVmZmVyTGlzdHMKKwkgIEZpeGVzICM1ODU4MzQKKworMjAwOS0wNi0xNiAxMToyMTo0MiArMDIwMCAgQ2hyaXN0b3BoZXIgSGFsc2UgUm9nZXJzIDxjaGFsc2Vyb2dlcnMgYXQgZ21haWwuY29tPgorCisJKiBnc3QvZ3N0aXRlcmF0b3IuYzoKKwkgIGl0ZXJhdG9yOiBFeHBsaWNpdGx5IG1lbnRpb24gcmVmY291bnRpbmcgaW4gZG9jcworCSAgRml4ZXMgIzU4NTkzOAorCisyMDA5LTA2LTE2IDA4OjQzOjUzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3R1dGlscy5jOgorCSAgZ3N0eG1sOiBmaXggKGRlKXNlcmlhbGlzYXRpb24gb2YgcHJvcGVydGllcyBvZiB0eXBlIEdzdFN0cnVjdHVyZQorCSAgc291cGh0dHBzcmMgaGFzIGEgcHJvcGVydHkgb2YgdHlwZSBHc3RTdHJ1Y3R1cmUsIHdoaWNoIGNhdXNlcyBhbgorCSAgYXNzZXJ0aW9uIHdoZW4gc2VyaWFsaXNpbmcgaXQgdG8geG1sLiBGaXhlcyAjNTg1MTM3LgorCisyMDA5LTA2LTE1IDIwOjExOjA1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSAgcXVldWU6IGZpeCBjb21waWxlciB3YXJuaW5nCisJICBUaGUgY29tcGlsZXIgc3VnZ2VzdHMgdG8gYWRkIHNvbWUgKCkgdG8gaW5kaWNhdGUgaWYgdGhlICYmIG9yIHRoZSB8fCB0YWtlcworCSAgcHJpb3JpdHksIHNvIHJlZmxvdyBjb2RlIGEgYml0IHNvIHdlIGRvbid0IGhhdmUgdG8gYWRkIHlldCBhbm90aGVyIGxheWVyCisJICBvZiAoKS4gSG9wZWZ1bGx5IHRoaXMgd2FzIHRoZSBpbnRlbmRlZCBtZWFuaW5nIG9mIHRoZSBjb2RlLgorCisyMDA5LTA2LTExIDE1OjAwOjUyICswMjAwICBBcm5vdXQgVmFuZGVjYXBwZWxsZSA8YXJub3V0QG1pbmQuYmU+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkgIGRvbid0IGxvY2sgd2hlbiBtaW4tdGhyZXNob2xkIGFuZCBtYXgtc2l6ZSBjb25mbGljdC4KKwkgIFdoZW4gbWluLXRocmVzaG9sZCBpcyBzZXQgb24gYSBxdWV1ZSwgaXQgaXMgcG9zc2libGUgdGhhdCBvbmUgb2YKKwkgIHRoZSBtaW5pbWEgcmVtYWlucyB1bnNhdGlzZmllZCB3aGlsZSBvbmUgb2YgdGhlIG1heGltYSBpcyBhbHJlYWR5CisJICByZWFjaGVkLiBUaGVyZWZvcmUsIGFsd2F5cyBjb25zaWRlciB0aGUgcXVldWUgbm9uLWVtcHR5IGlmIGl0IGlzIGZ1bGwuCisJICBGaXhlcyAjNTg1NDMzLgorCisyMDA5LTA2LTE1IDE4OjQ0OjQ1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YmluLmM6CisJICBiaW46IG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIG5leHQgc3RhdGUgY29ycmVjdGx5CisJICBXaGVuIHRoZSBjb250aW51ZSBmdW5jdGlvbiBpcyBzY2hlZHVsZWQsIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIG5leHQgc3RhdGUgaW5zdGVhZAorCSAgb2YgdGhlIHBlbmRpbmcgc3RhdGUuCisJICBBZGQgc29tZSBtb3JlIGRlYnVnIGluZm8uCisJICBmaXhlcyAjNTg1NTY5CisKKzIwMDktMDYtMTUgMTg6NDQ6MTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKKwkgIGNvbGxlY3RwYWRzOiBmaXggLmggaW5kZW50YXRpb24KKworMjAwOS0wNi0xNSAxODo0Mzo1MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJICBiYXNlc3JjOiBhZGQgc29tZSBtb3JlIGRlYnVnCisKKzIwMDktMDYtMTUgMTg6NDI6NTkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJKiBnc3QvZ3N0cGFkLmM6CisJICBkZWJ1ZzogYWRkIHNvbWUgbW9yZSBkZWJ1ZyB0byBlbGVtZW50IGFuZCBwYWRzCisKKzIwMDktMDYtMTQgMTY6NTY6MzIgKzA0MDAgINCg0YPRgdC70LDQvSDQmNC20LHRg9C70LDRgtC+0LIgPGxybjE5ODZAZ21haWwuY29tPgorCisJKiBnc3QvZ3N0c2VnbWVudC5jOgorCSAgc2VnbWVudDogZml4IGluY2x1ZGUgb3JkZXIgdG8gZ2V0IGNvbmZpZy5oIGJlZm9yZSBfbWluZ3cuaAorCSAgY29uZmlnLmggbXVzdCBhbHdheXMgYmUgaW5jbHVkZWQgYmVmb3JlIGFueSBvdGhlciBpbmNsdWRlcywgZWl0aGVyCisJICBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHZpYSBnc3RfcHJpdmF0ZS5oLiBGaXhlcyAjNTg1NzMzLgorCisyMDA5LTA2LTE0IDE2OjE3OjUwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3R0YWdsaXN0LmM6CisJKiBnc3QvZ3N0dGFnbGlzdC5oOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRhZy5jOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICB0YWdsaXN0OiBhZGQgZnVuY3Rpb25zIHRvIGNyZWF0ZSBhIG5ldyB0YWdsaXN0IHdpdGggdGFncyBpbiBvbmUgZ28KKwkgIEFkZCBmdW5jdGlvbnMgdG8gY3JlYXRlIGEgbmV3IHRhZyBsaXN0IGFuZCBzZXQgdGFncyBpbiBvbmUgZ28sIHdoaWNoCisJICBpcyBuaWNlIGZvciB1c2UgaW4gY29tYmluYXRpb24gd2l0aCBmdW5jdGlvbnMgdGhhdCB0YWtlIG93bmVyc2hpcCBvZgorCSAgdGhlIHRhZ2xpc3QsIHN1Y2ggYXMgZ3N0X2V2ZW50X25ld190YWcoKSBvciBnc3RfZWxlbWVudF9mb3VuZF90YWdzKCkuCisJICBBUEk6IGFkZCBnc3RfdGFnX2xpc3RfbmV3X2Z1bGwoKQorCSAgQVBJOiBhZGQgZ3N0X3RhZ19saXN0X25ld19mdWxsX3ZhbGlzdCgpCisKKzIwMDktMDYtMTMgMTQ6NTU6NDMgKzAyMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyAoYXQpIGFwZXN0YWFydCAoZG90KSBvcmc+CisKKwkqIHNjcmlwdHMvZ2l0LXZlcnNpb24uc2g6CisJICBnaXQtdmVyc2lvbi5zaDogbWFrZSBleGVjdXRhYmxlCisKKzIwMDktMDYtMTMgMTQ6NTM6MjQgKzAyMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyAoYXQpIGFwZXN0YWFydCAoZG90KSBvcmc+CisKKwkqIHNjcmlwdHMvY3ZzLXVwZGF0ZS5zaDoKKwkqIHNjcmlwdHMvZ2l0LXVwZGF0ZS5zaDoKKwkqIHNjcmlwdHMvZ2l0LXZlcnNpb24uc2g6CisJICBVcGRhdGUgc2NyaXB0cy9jdnMtdXBkYXRlLnNoIHRvIGdpdC11cGRhdGUuc2g7IGFkZCBnaXQtdmVyc2lvbi5zaAorCSAgYWRkIHNjcmlwdCB0byBnZXQgZ2l0IHZlcnNpb25zCisJICBmaXJzdCB1cGRhdGUgYWxsLCB0aGVuIGJ1aWxkCisJICBhZGQgZ25vbmxpbiB0b28KKwkgIHNwZWNpZnkgd2hlcmUgdG8gcHVsbCBmcm9tCisJICBhbHNvIHVwZGF0ZSBzdWJtb2R1bGUKKwkgIHJlbmFtZSBhbmQgY2hhbmdlIGN2cy11cGRhdGUgc2NyaXB0IHRvIGdpdC11cGRhdGUKKworMjAwOS0wNi0xMiAxODozNjoxNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5oOgorCSogdGVzdHMvY2hlY2svbGlicy9ieXRlcmVhZGVyLmM6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6CisJICBieXRlcmVhZGVyOiBhZGQgZ3N0X2J5dGVfcmVhZGVyX21hc2tlZF9zY2FuX3VpbnQzMigpCisJICBBZGQgYSBwYXR0ZXJuIHNjYW4gZnVuY3Rpb24gc2ltaWxhciB0byB0aGUgb25lIHJlY2VudGx5IGFkZGVkIHRvCisJICBHc3RBZGFwdGVyLCBhbmQgYSB1bml0IHRlc3QgKGJhc2VkIG9uIHRoZSBhZGFwdGVyIG9uZSkuCisJICBGaXhlcyAjNTg1NTkyLgorCSAgQVBJOiBhZGQgZ3N0X2J5dGVfcmVhZGVyX21hc2tlZF9zY2FuX3VpbnQzMigpCisKKzIwMDktMDQtMTcgMTc6NTk6MzggKzAzMDAgIFJlbsOpIFN0YWRsZXIgPHJlbmUuc3RhZGxlckBub2tpYS5jb20+CisKKwkqIGdzdC9nc3RfcHJpdmF0ZS5oOgorCSogZ3N0L2dzdGluZm8uYzoKKwkgIEZpeCByZW1haW5pbmcgLS1kaXNhYmxlLWdzdC1kZWJ1ZyBBQkkgYnJlYWthZ2UuCisJICBGaXhlcyAjNTc5MTc3LgorCisyMDA5LTA2LTEyIDE3OjUxOjIyICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgorCSAgZmlsZXNyYy9zaW5rOiB0dXJuIHRoZSBidXMgbWVzc2FnZXMgaW50byBnX3dhcm5pbmcKKwkgIEl0cyBhIHByb2dyYW1taW5nIGVycm9yLgorCisyMDA5LTA2LTEyIDE1OjQ4OjM1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0bWVzc2FnZS5jOgorCSAgbWVzc2FnZTogZml4IGRvY3MKKworMjAwOS0wNi0xMiAxMzoxODoyMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9kZXNpZ24vZHJhZnQtZnJhbWVzdGVwLnR4dDoKKwkqIGdzdC9nc3RtZXNzYWdlLmM6CisJKiBnc3QvZ3N0bWVzc2FnZS5oOgorCSogZ3N0L2dzdHF1YXJrLmM6CisJKiBnc3QvZ3N0cXVhcmsuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkqIHRlc3RzL2V4YW1wbGVzL3N0ZXBwaW5nL2ZyYW1lc3RlcDEuYzoKKwkgIHN0ZXBwaW5nOiBtb3JlIHN0ZXBwaW5nIGltcHJvdmVtZW50cworCSAgVXBkYXRlIGRlc2lnbiBkb2Mgd2l0aCBzdGVwLXN0YXJ0IGRvY3MuCisJICBBZGQgZW9zIGZpZWxkIHRvIHN0ZXAgZG9uZSBtZXNzYWdlCisJICB3aGVuIHN0ZXBwaW5nIGluIHJldmVyc2UsIHVwZGF0ZSB0aGUgc2VnbWVudCB0aW1lIGZpZWxkLgorCSAgRmx1c2ggb3V0IHRoZSBjdXJyZW50IHN0ZXAgd2hlbiB3ZSBhcmUgZmx1c2hpbmcuCisKKzIwMDktMDYtMTAgMTU6NTE6NDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJhc2VzaW5rOiBwb3N0IHN0ZXAtc3RhcnQKKwkgIHdoZW4gd2UgY2xpcCwgYWxzbyBzdG9wIHRoZSBzdGVwcGluZy4KKwkgIERvbid0IGRvIFFvUyB3aGVuIHN0ZXBwaW5nCisJICBQb3N0IHN0ZXAtc3RhcnQgd2hlbiBxdWV1ZWluZyBhbmQgYWN0aXZhdGluZyB0aGUgc3RlcC4KKworMjAwOS0wNi0xMCAxNTo0ODozNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3RtZXNzYWdlLmM6CisJKiBnc3QvZ3N0bWVzc2FnZS5oOgorCSogZ3N0L2dzdHF1YXJrLmM6CisJKiBnc3QvZ3N0cXVhcmsuaDoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgbWVzc2FnZTogYWRkIHN0ZXAtc3RhcnQgbWVzc2FnZQorCisyMDA5LTA2LTExIDE0OjE4OjAzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHZhbHVlLmM6CisJICBnc3R2YWx1ZTogbW9yZSBlZmZpY2llbnQgdmFsdWUgdGFibGUgbG9va3VwIGZvciBmdW5kYW1lbnRhbCB0eXBlcworCSAgU21hbGwgbWljcm8tb3B0aW1pc2F0aW9uOiBsb29rIHVwIHZhbHVlIHRhYmxlIGZvciBmdW5kYW1lbnRhbCB0eXBlcworCSAgdmlhIGFuIGFycmF5IGRlZGljYXRlZCB0byBmdW5kYW1lbnRhbCB0eXBlcyBpbnN0ZWFkIG9mIGdvaW5nIHRocm91Z2gKKwkgIGEgaGFzaCB0YWJsZSBsb29rdXAuIFNpbmNlIHRoZXJlIGNhbiBiZSBvbmx5IDI1NSBmdW5kYW1lbnRhbCB0eXBlcywKKwkgIHRoZSB0YWJsZSBzaXplL2VmZmljaWVuY3kgdHJhZGUtb2ZmIHNob3VsZCBiZSBhY2NlcHRhYmxlLCBlc3AuIHNpbmNlCisJICB0aGUgbW9zdCBjb21tb25seS11c2VkIHR5cGVzIGFyZSBhbGwgZnVuZGFtZW50YWwgdHlwZXMuIFRoZSBzaXplIG9mCisJICB0aGUgdGFibGUgY291bGQgcHJvYmFibHkgYmUgbWluaW1pc2VkIGZ1cnRoZXIgaWYgbmVlZGVkIGJ5IGFsbG9jYXRpbmcKKwkgIHRoZSB0YWJsZSBkeW5hbWljYWxseSBhbmQgb25seSBleHBhbmRpbmcgaXQgb24gZGVtYW5kLgorCisyMDA5LTA2LTExIDEzOjE2OjE1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHZhbHVlLmM6CisJICBnc3R2YWx1ZTogZG9uJ3QgcHV0IEdUeXBlcyBpbnRvIGludCB2YXJpYWJsZXMKKwkgIEdUeXBlcyBhcmUgbm90IGludHMgYW5kIGFzIHN1Y2ggYXJlIG5vdCBndWFyYW50ZWVkIHRvIGZpdCBpbnRvIGFuIGludAorCSAgKHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBmdW5kYW1lbnRhbCB0eXBlcyksIHNvIHdlIHJlYWxseSBzaG91bGRuJ3QgcHV0CisJICB0aGVtIGludG8gaW50IHZhcmlhYmxlcy4gRXZlbiBpZiBhIHJhdGhlciB1bmxpa2VseSBvYnNjdXJlIGNvcm5lciBjYXNlLAorCSAgdGhpcyBoYXMgYWN0dWFsbHkgYmVlbiBhIHByb2JsZW0gYXQgc29tZSBwb2ludCBpbiB0aGUgcGFzdCwgc2VlIGNvbW1pdAorCSAgOTlmMTY2NTVmNGNmYmM4ZTA2YjU5NzI0MTdiYTExMjc5MDgzYTY0ZS4KKworMjAwOS0wNi0xMSAxNzowMzowNCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKKwkgIGZpbGVzcmMvc2luazogaW1wcm92ZSB3YXJuaW5nIG1lc3NhZ2UgYSBiaXQgKHdyb25nIHN0YXRlKQorCSAgVW5pZnkgYW5kIHR1cm4gdGhvc2UgaW50byBlbGVtZW50IHdhcm5pbmdzLgorCisyMDA5LTA2LTExIDE0OjAwOjA5ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgorCSAgZWxlbWVudGZhY3Rvcnk6IEZpeCBhIGNvbXBpbGVyIHdhcm5pbmcKKwkgIFVzZSAoZ3BvaW50ZXIpIGluc3RlYWQgb2YgKGdwb2ludGVyICopIHRvIGZpeCBhIHN0cmljdC1hbGlhc2luZyBidWlsZCB3YXJuaW5nLgorCisyMDA5LTA2LTExIDEzOjE2OjI5ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIGNvbW1vbjoKKwkqIGRvY3MvZmFxL01ha2VmaWxlLmFtOgorCSogZG9jcy9nc3QvTWFrZWZpbGUuYW06CisJKiBkb2NzL2xpYnMvTWFrZWZpbGUuYW06CisJKiBkb2NzL21hbnVhbC9NYWtlZmlsZS5hbToKKwkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKKwkqIGRvY3MvcHdnL01ha2VmaWxlLmFtOgorCSAgZG9jczogQnVtcCBjb21tb24sIGZpeCB0aGUgdXBsb2FkIGxvZ2ljIGluY2x1c2lvbgorCSAgVXBkYXRlIHRoZSBjb21tb24gc3VibW9kdWxlLCBhbmQgZml4IHRoZSBkb2NzIHVwbG9hZCBydWxlcyB0byBpbmNsdWRlCisJICB0aGUgcmlnaHQgbWFrZWZpbGUgc25pcHBldCBmcm9tIGNvbW1vbi4KKworMjAwOS0wNi0wOSAxMToxMzowNCArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkgIG11bHRpcXVldWU6IFVzZSB0aGUgc2xpY2UgYWxsb2NhdG9yIGZvciBNdWx0aVF1ZXVlSXRlbXMKKworMjAwOS0wNi0xMCAyMDoyOTo0MSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RfcHJpdmF0ZS5oOgorCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5Lmg6CisJICBNYWtlIHN1cmUgY29uZmlnLmggaXMgb25seSBpbmNsdWRlZCBvbmNlCisJICBGaXhlcyBidWlsZCBwcm9ibGVtIG9uIHdpbjMyICgjNTg1MDc1KS4KKworMjAwOS0wNi0xMCAxODowNTo0NyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0cGx1Z2luLmM6CisJICBwbHVnaW46IGFkZCBzaW5jZTogdGFncyBmb3IgdGhlIGFwaSBkb2NzLgorCSAgVGhlIHByZXZpb3VzIHJlbGF0ZWQgY29tbWl0IGFkZGVkIG5ldyBBUEkuCisJICBBUEk6IGFkZCBnc3RfcGx1Z2luX2dldF9jYWNoZV9kYXRhLCBnc3RfcGx1Z2luX3NldF9jYWNoZV9kYXRhCisKKzIwMDktMDYtMTAgMTI6MDI6MjMgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdHBsdWdpbi5jOgorCSAgcGx1Z2luOiBmaXggbGVha3MgaW50cm9kdWNlZCBieSBmaXggZm9yICM1ODQzODkKKworMjAwOS0wNi0wOCAyMzo0MzoxNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJKiBnc3QvZ3N0c3RydWN0dXJlLmg6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIHN0cnVjdHVyZTogYWRkIGdzdF9zdHJ1Y3R1cmVfKl9nZXQqKCkgdmFyYXJnIGZ1bmN0aW9ucworCSAgQWRkIGEgYnVuY2ggb2YgdmFyYXJnIGdldHRlciBjb252ZW5pZW5jZSBmdW5jdGlvbnMgdG8gY29tcGxlbWVudAorCSAgdGhlIHZhcmFyZyBzZXR0ZXIgZnVuY3Rpb25zLCBhbmQgYSBiYXNpYyB1bml0IHRlc3QuIEZpeGVzICM1MzQyMDguCisJICBBUEk6IGdzdF9zdHJ1Y3R1cmVfZ2V0KCkKKwkgIEFQSTogZ3N0X3N0cnVjdHVyZV9pZF9nZXQoKQorCSAgQVBJOiBnc3Rfc3RydWN0dXJlX2dldF92YWxpc3QoKQorCSAgQVBJOiBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWxpc3QoKQorCisyMDA5LTA2LTA5IDAwOjE2OjA1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6CisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSAgZG9jczogYSBmZXcgc21hbGwgQVBJIGRvYyBmaXhlcyBhbmQgYWRkaXRpb25zCisKKzIwMDktMDYtMDggMTk6MzM6NTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0aW5mby5jOgorCSAgbG9nZ2luZzogd2hlbiBsb2dnaW5nIHRhZ2xpc3RzLCBzaG9ydGVuIGxvbmcgYnVmZmVyIGR1bXBzCisJICBEb24ndCBkdW1wIGh1bmRyZWRzIG9mIGtCIG9mIGhleGRhdGEgaW50byBkZWJ1ZyBsb2dzIHdoZW4gY29udmVydGluZworCSAgdGFnbGlzdHMgY29udGFpbmluZyBodWdlIGltYWdlcyBpbnRvIGEgc3RyaW5nLiBJbnN0ZWFkLCBzaG9ydGVuIHRoZQorCSAgYnVmZmVyIGRhdGEgc28gdGhhdCB0aGUgc3RyaW5nIGlzIHN0aWxsIHJlYWRhYmxlIGFuZCBkZWJ1ZyBsb2dzCisJICBzdGF5IG1hbmFnYWJsZS4gQ2FuIGJlIHR1cm5lZCBvZmYgd2l0aCBHU1RfREVCVUdfT1BUSU9OUz1mdWxsLXRhZ3MuCisJICBTZWUgIzU4NDk4OC4KKworMjAwOS0wNi0wOSAxMzowNzozNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6CisJICBtdWx0aXF1ZXVlOiBjaGVjayBieXRlIHJhbmdlIGV2ZW4gd2hlbiB3ZSBoYXZlIHRpbWVzdGFtcHMKKwkgIEFzIGZvdW5kIGJ5IHRoYXl0YW4gb24gSVJDLgorCSAgQWxzbyBjaGVjayB0aGUgYnl0ZSBsaW1pdCwgZXZlbiBpZiB3ZSBoYXZlIHRpbWVzdGFtcHMgYmVjYXVzZSB0aGVyZSBtaWdodCBqdXN0CisJICBub3QgYmUgYSB0aW1lIGxpbWl0LgorCisyMDA5LTA2LTA5IDEyOjA2OjM1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBiYXNlc2luazogdXBkYXRlIHNlZ21lbnQgc3RhcnQvc3RvcCBmb3IgY2xpcHBpbmcKKwkgIFdoZW4gd2Ugc3RhcnQgc3RlcHBpbmcsIHN0b3JlIHRoZSBzdGFydC9zdG9wIHZhbHVlcyBvZiB0aGUgc2VnbWVudCBiZWZvcmUgd2UKKwkgIGluc3RhbGwgbmV3IHN0YXJ0L3N0b3AgdmFsdWVzIGZvciBjbGlwcGluZyBpbiBub24tZmx1c2hpbmcgc3RlcHMuCisJICBmb3Igbm9uLWZsdXNoaW5nIHN0ZXBzLCB1cGRhdGUgdGhlIGVsZW1lbnQgc3RhcnQgdGltZS4gRm9yIGZsdXNoaW5nIHN0ZXBzLCBpdAorCSAgZG9lcyBub3QgY2hhbmdlIGJlY2F1c2UgcnVubmluZ190aW1lIGRvZXMgbm90IGFkdmFuY2UKKwkgIE1ha2Ugc3VyZSB3ZSBhbHdheXMgcGVyZm9ybSB0aGUgc3RvcF9zdGVwcGluZyBvcGVyYXRpb25zIGV2ZW4gd2hlbiB3ZSBkcm9wCisJICBmcmFtZXMuCisKKzIwMDktMDYtMDkgMTA6MjU6MzQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJhc2VzaW5rOiBkbyBwcm9wZXIgY2xpcHBpbmcgaW4gc3RlcHBpbmcKKwkgIFVwZGF0ZSB0aGUgc3RvcCBwb3NpdGlvbiBvZiB0aGUgc2VnbWVudCBzbyB0aGF0IHdlIGNsaXAgY29ycmVjdGx5LgorCSAgQWZ0ZXIgY2xpcHBpbmcgaW4gbm9uLWZsdXNoaW5nIG1vZGUsIHJlcmVuZGVyIHRoZSByZW1haW5kZXIgb2YgdGhlIGJ1ZmZlci4KKworMjAwOS0wNi0wOSAxMDoyMzoyMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHNlZ21lbnQuYzoKKwkgIHNlZ21lbnQ6IG1ha2UgY29udmVyc2lvbiBtb3JlIHByZWNpc2UKKwkgIE1ha2Ugc3VyZSB0aGUgY29udmVyc2lvbiBmcm9tIGFuZCB0aGUgY29udmVyc2lvbiB0byBnaXZlIHRoZSBzYW1lIHJlc3VsdHMuCisKKzIwMDktMDYtMDggMTU6Mzk6NTkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIHV0aWxzOiBnc3RfdXRpbF91aW50NjRfc2NhbGUqKCkgbWljcm8tb3B0aW1pc2F0aW9ucworCSAgU3ByaW5rbGUgR19MSUtFTFkvR19VTkxJS0VMWTsgYWRkIGlubGluZWQgX3NjYWxlX2ludF91bmNoZWNrZWQoKQorCSAgc28gd2UgZG9uJ3QgZG8gc29tZSBjaGVja3MgdHdpY2Ugd2hlbiBjYWxsaW5nIGl0IGZyb20gX3NjYWxlKCkuCisKKzIwMDktMDYtMDcgMjI6NDk6MDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dXJpLmM6CisJKiBnc3QvZ3N0dmFsdWUuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzeXN0ZW1jbG9jay5jOgorCSogdGVzdHMvY2hlY2svbGlicy90cmFuc2Zvcm0xLmM6CisJICBSZW1vdmUgZG91YmxlIHNlbWljb2xvbnMgYXQgZW5kIG9mIGxpbmUKKworMjAwOS0wNi0wOCAxNzozOTo0NyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9kZXNpZ24vZHJhZnQtZnJhbWVzdGVwLnR4dDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIHN0ZXBwaW5nOiBkbyBmbHVzaGluZyBzdGVwcyBjb3JyZWN0bHkKKwkgIE5vdGUgaW4gdGhlIGRvY3MgdGhhdCBhIGZsdXNoaW5nIHN0ZXAgaW4gUExBWUlORyBicmluZ3MgdGhlIHBpcGVsaW5lIHRvIHRoZSBsb3N0CisJICBzdGF0ZSBhbmQgc2tpcHMgdGhlIGRhdGEgYmVmb3JlIHByZXJvbGxpbmcgYWdhaW4uCisJICBJbXBsZW1lbnQgdGhlIGZsdXNoaW5nIHN0ZXAgY29ycmVjdGx5IGJ5IGludmFsaWRhdGluZyB0aGUgY3VycmVudCBzdGVwCisJICBvcGVyYXRpb24sIHdoaWNoIHdvdWxkIGFjdGl2YXRlIHRoZSBuZXcgc3RlcCBvcGVyYXRpb24uCisKKzIwMDktMDYtMDggMTY6MTY6MjcgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgYmFzZXNpbms6IENoYW5nZSBhd2t3YXJkIHdvcmRpbmcgaW4gYSB0cmFuc2xhdGVhYmxlIG1lc3NhZ2UuCisKKzIwMDktMDYtMDggMTY6Mjc6MzYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJhc2VzaW5rOiBhZGQgbm9uLWZsdXNoaW5nIHN0ZXBzCisJICBBZGQgc3VwcG9ydCBmb3Igbm9uLWZsdXNoaW5nIHN0ZXBzIGFuZCB3aXRoIGRpZmZlcmVudCByYXRlcy4KKwkgIENsZWFyIHN0ZXAgaW5mbyB3aGVuIGZsdXNoaW5nCisKKzIwMDktMDYtMDcgMjM6NDY6NTQgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3RfcHJpdmF0ZS5oOgorCSogZ3N0L2dzdHBsdWdpbi5jOgorCSogZ3N0L2dzdHBsdWdpbi5oOgorCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6CisJKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuaDoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgcmVnaXN0cnk6IGFsbG93IHBsdWdpbnMgdG8gY2FjaGUgZXh0cmEgZGF0YSBpbiByZWdpc3RyeS4gRml4ZXMgIzU3MDIzMworCSAgQWRkIGEgR3N0U3RydWN0dXJlIHRvIEdzdFBsdWdpbi4gUGx1Z2lucyBjYW4gcmV0aWV2ZSBpdCBpbiBwbHVnaW5faW5pdCBhbmQKKwkgIGFjY2VzcyB0aGUgY2FjaGVkIGluZm8gb3IgYnVpbGQgdGhlIGNhY2hlIGFuZCBzdG9yZSBpdCB0aGVyZS4KKworMjAwOS0wNi0wNyAyMjowOToxNCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6CisJKiBnc3QvZ3N0cGx1Z2luLmM6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIHJlZ2lzdHJ5OiBkb24ndCByZWNyZWF0ZSBmZWF0dXJlcyBvbiBmaXJzdCB1c2UuIEZpeGVzICM1ODQzODkKKwkgIFRoZSBmaXJzdCB0aW1lIG9uZSBjYWxscyBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoKSwgZ3N0IHJlY3JlYXRlcyB0aGUgcGx1Z2luCisJICBmZWF0dXJlIGFuZCB0aGUgZWxlbWVudCBmYWN0b3J5LiBBcyBhIHNpZGUgZWZmZWN0IHdlIHJlZiB0aGUgY2xhc3MgdG8gZmlsbAorCSAgaW4gZGV0YWlsIHdlIGFscmVhZHkgaGF2ZSBmaWxsZWQgZnJvbSB0aGUgcmVnaXN0cnkgY2FjaGUuIFRoaXMgcGF0Y2ggY2hhbmdlcworCSAgdGhlIGJlaGF2aW91ciB0byBqdXN0IHVwZGF0ZSB0aGUgZXhpc3RpbmcgZW50cmllcy4gVGhlIGZhY3RvcnkgaXMgbm93IGF0dGFjaGVkCisJICB0byB0aGUgdHlwZSBhbmQgc2V0IGluIGdzdF9lbGVtZW50X2Jhc2VfY2xhc3NfaW5pdCgpLgorCisyMDA5LTA2LTA3IDIyOjIwOjU0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJKiB0ZXN0cy9leGFtcGxlcy9NYWtlZmlsZS5hbToKKwkgIHRlc3RzOiBjb25kaXRpb25hbGx5IGNvbXBpbGUgdGhlIHN0cmVhbXMgZXhhbXBsZQorCSAgRGV0ZWN0IHB0aHJlYWRzLmggaW4gY29uZmlndXJlLmFjCisJICBPbmx5IGNvbXBpbGUgdGhlIHN0cmVhbXMgZXhhbXBsZSB3aGVuIHB0aHJlYWRzLmggaXMgcHJlc2VudC4KKwkgIEZpeGVzICM1ODUwMzkKKworMjAwOS0wNi0wNyAxNzozMjozNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHZhbHVlLmM6CisJICBnc3R2YWx1ZTogcmVtb3ZlIHR5cGUgY2hlY2tzIGFuZCByZWR1bmRhbnQgY29kZQorCisyMDA5LTA2LTA3IDE1OjQzOjU3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dmFsdWUuYzoKKwkgIHZhbHVlOiBmaXggZnJhY3Rpb24gcmFuZ2UgbGNvcHkgZnVuY3Rpb24KKwkgIFRoaXMgZnVuY3Rpb24gc2VlbXMgdG8gYmUgYnJva2VuIGZvciAzLjUgeWVhcnMuIEx1Y2tpbHkgbm9ib2R5IGV2ZXIgdHJpZWQgdG8KKwkgIG1ha2UgYSBmcmFjdGlvbiByYW5nZSBvYmplY3QgcHJvcGVydHkuLi4KKworMjAwOS0wNi0wNyAxNTozNToxMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHZhbHVlLmM6CisJICBnc3R2YWx1ZTogcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzCisJICBBZGQgYSBHVHlwZS0+R3N0VmFsdWVUYWJsZSBoYXNodGFibGUgbWFwcGluZy4KKwkgIEF2b2lkIF9nZXRfdHlwZSgpIG11bHRpcGxlIHRpbWVzIHdoZW4gd2UgY2FuLgorCSAgVXNlIEdTbGljZSBmb3IgZnJhY3Rpb24gcmFuZ2UgZHluYW1pYyBtZW1vcnkKKwkgIEFkZCBHX0xJS0VMWSB3aGVuIHdlIGNhbgorCSAgSW1wcm92ZSBsb29rdXAgb2YgdGhlIHZhbHVlIHRhYmxlIHVzaW5nIHRoZSBoYXNodGFibGUKKworMjAwOS0wNi0wNyAxNDozMDoyOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSAgc3RydWN0dXJlOiBubyBuZWVkIHRvIGNsZWFyIG9uIGluaXQKKwkgIFdlIGRvbid0IG5lZWQgdG8gY2xlYXIgdGhlIGZpZWxkIG9uIGluaXQgYmVjYXVzZSB3ZSB3aWxsIGRvIHRoYXQgYWdhaW4gYmVmb3JlIHdlCisJICBhcmUgZ29pbmcgdG8gdXNlIHRoZSBmaWVsZCBsYXRlci4KKworMjAwOS0wNi0wNSAyMDo1NzowNSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJKiBnc3QvZ3N0dmFsdWUuYzoKKwkgIGdzdHN0cnVjdHVyZTogRml4IHNvbWUgbWVtb3J5IGxlYWtzLiBTcHJpbmtsZSBHX0xJS0VMWS9VTkxJS0VMWQorCSAgRml4IHNvbWUgbWVtb3J5IGxlYWtzIHNob3duIGJ5IHRoZSBuZXcgc2VyaWFsaXNhdGlvbi9kZXNlcmlhbGlzYXRpb24gdW5pdAorCSAgdGVzdC4gU3BsaXQgdGhlIGdzdF9zdHJpbmdfd3JhcCBmdW5jdGlvbiBpbiBnc3R2YWx1ZS5jIGludG8gY29tcG9uZW50cyBhbmQKKwkgIHVzZSB0aGVtIHRvIG1ha2UgZ3N0X3N0cmluZ190YWtlX2FuZF93cmFwLCB3aGljaCB0YWtlcyBvd25lcnNoaXAgb2YgdGhlCisJICBzdHJpbmcsIGF2b2lkaW5nIGEgc3RyZHVwLgorCSAgQWRkIHNvbWUgR19MSUtFTFkvVU5MSUtFTFksIGFuZCBjbGVhbiB1cCBzb21lIGxlYWtzIGluIGVycm9yIHBhdGhzLgorCisyMDA5LTA2LTA1IDExOjM3OjI0ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJICBiYXNlc3JjOiByZXBseSB0byBRVUVSWV9TRUVLSU5HIHdpdGggb3JpZ2luYWwgZm9ybWF0LiAgRml4ZXMgIzU4NDgzOC4KKworMjAwOS0wNi0wNCAxOTo0NDozOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKKwkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuaDoKKwkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6CisJICBjb25maWd1cmU6IHJlbW92ZSBBQ19DX0lOTElORSBhbmQgdXBkYXRlIHdpbjMyIGZpbGVzIHRvIGdpdAorCSAgUmVtb3ZlIEFDX0NfSU5MSU5FIGNoZWNrLCBzbyB3ZSBkb24ndCBlbmQgdXAgd2l0aCBhbiAjdW5kZWYgaW5saW5lIGluCisJICBjb25maWcuaCwgd2hpY2ggY2F1c2VzIHByb2JsZW1zIHdpdGggc29tZSB2ZXJzaW9ucyBvZiBNU0NWIGFwcGFyZW50bHkuCisJICBHTGliIGRlZmluZXMgaW5saW5lIGZvciB1cyBpbiBhIHN1aXRhYmxlIHdheSBhbHJlYWR5IGFueXdheS4KKwkgIEZpeGVzICM1ODQ4MzUuCisJICBXaGlsZSB3ZSdyZSBhdCBpdCwgYWxzbyB1cGRhdGUgdGhlIG90aGVyIHdpbjMyIGZpbGVzIHRvIGdpdCAoYnVtcAorCSAgdmVyc2lvbiwgYWRkIG5ldyBkZWZpbmVzIGFuZCBlbnVtcykuCisKKzIwMDktMDYtMDQgMTg6MjY6MDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RnaG9zdHBhZC5jOgorCSAgZ2hvc3RwYWQ6IGF2b2lkIGV4Y2Vzc2l2ZSBub3RpZnkgZm9yIGNhcHMKKwkgIEF2b2lkIGFuIG9iamVjdCBwcm9wZXJ0eSBub3RpZnkgaWYgdGhlIGNhcHMgb24gdGhlIG90aGVyIHBhZCB3ZXJlIGFscmVhZHkKKwkgIHNldCAoYW5kIHRodXMgbm90aWZpZWQpLgorCisyMDA5LTA2LTA0IDE3OjI3OjAzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBiYXNlc2luazogZml4IGNsaXBwZWQgc3RhcnQvc3RvcCBhZnRlciBzdGVwCisJICBVc2UgdGhlIHNlZ21lbnQgaGVscGVycyB0byBnZXQgYSBtb3JlIGFjY3VyYXRlIGNsaXBwZWQgc3RhcnQvc3RvcCBwb3NpdGlvbiBhZnRlcgorCSAgYSBzdGVwcGluZyBvcGVyYXRpb24gZW5kZWQuCisKKzIwMDktMDYtMDQgMTI6MzQ6NDcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJhc2VzaW5rOiB1c2UgbW9yZSBjb3JyZWN0IHNlZ21lbnQgbWV0aG9kcworCSAgVXNlIHRoZSBtb3JlIGNvcnJlY3QgbmV3IHNlZ21lbnQgbWV0aG9kcyBmb3IgdXBkYXRpbmcgdGhlIHNlZ21lbnQgYmVmb3JlIGFuZAorCSAgYWZ0ZXIgYSBzdGVwLgorCisyMDA5LTA2LTA0IDEyOjQ4OjUxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdHNlZ21lbnQuYzoKKwkqIGdzdC9nc3RzZWdtZW50Lmg6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c2VnbWVudC5jOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBzZWdtZW50OiBhZGQgZ3N0X3NlZ21lbnRfc2V0X3J1bm5pbmdfdGltZQorCSAgQWRkZWQgbmV3IG1ldGhvZCBmb3IgY2xvc2luZyB0aGUgc2VnbWVudCB0byBhIHNwZWNpZmljIHJ1bm5pbmcgdGltZS4KKwkgIEFQSTogR3N0U2VnbWVudDo6Z3N0X3NlZ21lbnRfc2V0X3J1bm5pbmdfdGltZSgpCisKKzIwMDktMDYtMDQgMDA6Mzc6MjggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmUucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kYS5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9lcy5wbzoKKwkqIHBvL2ZpLnBvOgorCSogcG8vZnIucG86CisJKiBwby9odS5wbzoKKwkqIHBvL2lkLnBvOgorCSogcG8vaXQucG86CisJKiBwby9qYS5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9wbC5wbzoKKwkqIHBvL3B0X0JSLnBvOgorCSogcG8vcnUucG86CisJKiBwby9ydy5wbzoKKwkqIHBvL3NrLnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkgIHBvOiB1cGRhdGUgLnBvIGZpbGVzIGZvciBzdHJpbmcgY2hhbmdlcworCSAgVGhpcyBtYWtlcyBzdXJlIHRoYXQgcGVvcGxlIHdobyBnZXQgdGhlbXNlbHZlcyBhIGZyZXNoIGNoZWNrb3V0CisJICBkb24ndCBpbW1lZGlhdGVseSBoYXZlIGNoYW5nZWQgKnBvIGZpbGVzIGFmdGVyIHJ1bm5pbmcgbWFrZSwgd2hpY2gKKwkgIHdvdWxkIGNhdXNlIGEgYml0IG9mIGhhc3NsZSBuZXh0IHRpbWUgdGhlIGZpbGVzIGFyZSB1cGRhdGVkLiBCZXR0ZXIKKwkgIHRvIGtlZXAgdGhlbSB1cC10by1kYXRlIHdoZW4gc3RyaW5ncyBjaGFuZ2UuCisKKzIwMDktMDYtMDQgMDA6NTQ6MjQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZXJyb3IuYzoKKwkgIGVycm9yczogcmV3b3JkIHN0YXRlIGNoYW5nZSBmYWlsZWQgZXJyb3IgbWVzc2FnZSBhbmQgcmVtb3ZlIGJ1Z3ppbGxhIGxpbmsKKwkgIFJld29yZCB0aGlzIG1lc3NhZ2UgYSBiaXQgdG8gbWFrZSBpdCBjbGVhcmVyIHdoYXQgaXQgbWVhbnMsIG5hbWVseSB0aGF0CisJICB0aGUgc3RhdGUgY2hhbmdlIG1heSBoYXZlIGZhaWxlZCBmb3IgZ29vZCByZWFzb25zLCBidXQgdGhhdCB0aGUgZWxlbWVudAorCSAganVzdCBmYWlsZWQgdG8gcG9zdCBhIHByb3BlciBlcnJvciBvbiB0aGUgYnVzLiBUaGlzIGlzIG5vdCBhbiBpbnRlcm5hbAorCSAgR1N0cmVhbWVyIGJ1ZywgYW5kIHdlIHJlYWxseSBkb24ndCBuZWVkIHBlb3BsZSB0byBmbG9vZCBidWd6aWxsYSB3aXRoCisJICBidWcgcmVwb3J0cyBpZiBvbmUgc3VjaCBwbHVnaW4gYnVnIGV2ZXIgbWFrZXMgaXQgaW50byB0aGUgd2lsZC4KKworMjAwOS0wNi0wNCAwMDoyOTozMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRvb2xzL2dzdC1sYXVuY2guYzoKKwkgIGdzdC1sYXVuY2g6IHJlZmVyIHRvIGVsZW1lbnQsIHBhZCwgb3Igb2JqZWN0IGluIHNvbWUgbWVzc2FnZSBzdHJpbmdzCisJICBSZXZpc2l0IHRoZXNlIHN0cmluZ3Mgbm93IHRoYXQgdGhlIGNoYW5nZSByZWdhcmRpbmcgdGhlIG1lc3NhZ2Ugc291cmNlCisJICBvYmplY3QgaW4gZ3N0X2VsZW1lbnRfZm91bmRfdGFnc19mb3JfcGFkKCkgZ290IHJldmVydGVkLiBUcnkgdG8gcmVmZXIKKwkgIGV4cGxpY2l0bHkgdG8gd2hhdCBraW5kIG9mIGVsZW1lbnQgaXQgaXMgKGVsZW1lbnQsIHBhZCwgZXRjLikgaW4gc29tZQorCSAgY2FzZXMsIHdoaWNoIGlzIG5pY2VyIHRoYW4gaGF2aW5nIHRvIGRlZHVjZSB0aGlzIGluZm8gKGFuZCB3ZSBjYW4KKwkgIHJlLXVzZSB0aGUgYWxyZWFkeSBleGlzdGluZyB0cmFuc2xhdGVkIHN0cmluZ3MgZm9yIHRoZSBtb3N0IGNvbW1vbgorCSAgY2FzZSkuIEl0IGFsc28gbWFrZXMgZm9yIGJldHRlciBleGFtcGxlIGNvZGUsIHNpbmNlIGl0J3MgY2xlYXIgbm93CisJICB0aGF0IHRoZSBtZXNzYWdlIHNvdXJjZSBvYmplY3QgZG9lc24ndCBoYXZlIHRvIGJlIGFuIGVsZW1lbnQuCisKKzIwMDktMDYtMDMgMjE6MTA6MzkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdG1lc3NhZ2UuaDoKKwkgIEFQSTogYWRkIEdTVF9NRVNTQUdFX1NSQ19OQU1FIG1hY3JvCisJICBBZGQgR1NUX01FU1NBR0VfU1JDX05BTUUgbWFjcm8gdGhhdCBhbHdheXMgcmV0dXJucyBhIG5vbi1OVUxMIHN0cmluZy4KKwkgIFVzZWZ1bCBmb3IgZGVidWdnaW5nIGFuZCBsb2dnaW5nIHB1cnBvc2VzLgorCisyMDA5LTA2LTAzIDE5OjA2OjMwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdHNlZ21lbnQuYzoKKwkqIGdzdC9nc3RzZWdtZW50Lmg6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c2VnbWVudC5jOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBzZWdtZW50OiBhZGQgbWV0aG9kIGZvciBjb252ZXJ0aW5nIHRvIHBvc2l0aW9uCisJICBBZGQgZ3N0X3NlZ21lbnRfdG9fcG9zaXRpb24oKSB0aGF0IGNvbnZlcnRzIGEgcnVubmluZ190aW1lIHRvIGEgcG9zaXRpb24gaW4gdGhlCisJICBzZWdtZW50LiBBIGZhdWx0eSB2YXJpYW50IG9mIHRoaXMgZnVuY3Rpb24gaXMgY3VycmVudGx5IHVzZWQgaW4gaW5wdXRzZWxlY3RvcgorCSAgYnV0IHdlJ2xsIG5lZWQgaXQgZm9yIGZyYW1lIHN0ZXBwaW5nIHRvby4KKwkgIEFQSTogR3N0U2VnbWVudDo6Z3N0X3NlZ21lbnRfdG9fcG9zaXRpb24oKQorCisyMDA5LTA2LTAzIDE1OjM5OjEzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBiYXNlc2luazsgaGFuZGxlIEVPUyBjb3JyZWN0bHkuCisJICBIYW5kbGUgRU9TIGFuZCBidWZmZXJzIHdpdGhvdXQgYSB0aW1lc3RhbXAgZ3JhY2VmdWxseS4KKwkgIFJlbW92ZSBhIHdhcm5pbmcgdGhhdCBpcyBub3Qgc28gbXVjaCBhIHdhcm5pbmcgbm93IGFueW1vcmUuCisKKzIwMDktMDYtMDMgMDk6NDU6MjUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBhdXRvZ2VuLnNoOgorCSogY29tbW9uOgorCSogY29uZmlndXJlLmFjOgorCSAgUmV2ZXJ0ICJnbyBiYWNrIHRvIGFsbG93aW5nIGdldHRleHQgMC4xMS41LCBidXQgZG9uJ3QgbWl4IHdpdGggbGlidG9vbCAyLjIiCisJICBUaGlzIHJldmVydHMgY29tbWl0IDMxYzA5ZDczOGNlN2Y0N2JmZjlkMjkyOTk2ZTk0ODljMjc1ZTU1YTEuCisJICBSZXZlcnRpbmcgdGhpcywgc2luY2UgaXQgYnJlYWtzIGF1dG9nZW4uc2ggZm9yIG1lIG9uIGRlYmlhbiBzaWQuCisJICBGYWlsdXJlIGlzOiAibGlidG9vbCAyLjIgcmVxdWlyZXMgYXV0b3BvaW50IDAuMTcgb3IgaGlnaGVyIiBldmVuIHRob3VnaAorCSAgMC4xNyB3YXMgZm91bmQuCisKKzIwMDktMDYtMDMgMDk6NDE6MjEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBhdXRvZ2VuLnNoOgorCSAgUmV2ZXJ0ICJvbmx5IHVwZGF0ZSBzdWJtb2R1bGUgd2hlbiBpdCBpcyBub3Qgb24gYSBzcGVjaWZpYyBicmFuY2giCisJICBUaGlzIHJldmVydHMgY29tbWl0IDkzYjgzMzMzYWFkNTE5YzU1NTUxNTY1NzZmMGJhYTNiZTdiMjYzZjMuCisJICBSZXZlcnRpbmcgc2luY2UgdGhpcyBmYWlscyBvbiBhIGZyZXNoIGNoZWNrb3V0LiBBbHNvLCB3ZSBzaG91bGRuJ3QKKwkgIGRlcGVuZCBvbiBwb3NzaWJseSB0cmFuc2xhdGVkIHN0cmluZ3MuCisKKzIwMDktMDYtMDMgMDE6NTY6MTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL21hbnVhbC9oaWdobGV2ZWwtY29tcG9uZW50cy54bWw6CisJICBkb2NzOiBmaXggdXAgcmVmZXJlbmNlIHRvIGdzdC1sYXVuY2gtMC44CisJICBBbHNvIG1lbnRpb24gZGVjb2RlYmluMiwgdXJpZGVjb2RlYmluLCBhbmQgcGxheWJpbjIKKworMjAwOS0wNi0wMyAxMDozOTo1MyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgYmFzZXNpbms6IGZvcmdldCBwcmV2aW91cyB0aW1lcyB3aGVuIHN0ZXBwaW5nCisJICBXaGVuIHdlIHN0YXJ0IGEgZmx1c2hpbmcgc3RlcCBvcGVyYXRpb24sIGZvcmdldCBhYm91dCB0aGUgcHJldmlvdXMgc3RyZWFtIHRpbWUKKwkgIHNvIHRoYXQgdGhlIHBvc2l0aW9uIHJlcG9ydGluZyB3b3JrcyBjb3JyZWN0bHkuCisKKzIwMDktMDYtMDMgMDE6MjU6MjYgKzAyMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBhdXRvZ2VuLnNoOgorCSogY29tbW9uOgorCSogY29uZmlndXJlLmFjOgorCSAgZ28gYmFjayB0byBhbGxvd2luZyBnZXR0ZXh0IDAuMTEuNSwgYnV0IGRvbid0IG1peCB3aXRoIGxpYnRvb2wgMi4yCisKKzIwMDktMDYtMDMgMDE6MDE6NTcgKzAyMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyAoYXQpIGFwZXN0YWFydCAoZG90KSBvcmc+CisKKwkqIGF1dG9nZW4uc2g6CisJICBvbmx5IHVwZGF0ZSBzdWJtb2R1bGUgd2hlbiBpdCBpcyBub3Qgb24gYSBzcGVjaWZpYyBicmFuY2gKKworMjAwOS0wNi0wMiAxMzo0NTo1MiAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkqIHRvb2xzL2dzdC1sYXVuY2guYzoKKwkgIHRvb2xzOiBTZXQgcGlwZWxpbmUgdG8gUEFVU0VEIGJlZm9yZSB3YWl0aW5nIGZvciBtYWluIGxvb3AgaWRsZQorCSAgV2hlbiBpdCBpcyBzaHV0dGluZyBkb3duIGEgcGlwZWxpbmUgYWZ0ZXIgY3RybC1jLCBzZXQgcGlwZWxpbmUgdG8KKwkgIHBhdXNlZCBiZWZvcmUgd2FpdGluZyBmb3IgdGhlIG1haW4gbG9vcCB0byBjb21wbGV0ZSBhbGwgcGVuZGluZworCSAgdHJhbnNhY3Rpb25zLiAgRml4ZXMgIzU4NDY1Ny4KKwkgIElmIHNvbWUgcGFydCBvZiB0aGUgcGlwZWxpbmUgaXMgZ2VuZXJhdGluZyBzaWduYWxzIG9yIGlkbGUgZnVuY3Rpb25zCisJICBhdCBhIGZhc3QgcmF0ZSwgd2FpdGluZyBmb3IgYSBtYWluIGxvb3AgaXRlcmF0aW9uIG1heSBuZXZlciByZXR1cm4uCisKKzIwMDktMDYtMDIgMTg6MzY6MTAgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdF9wcml2YXRlLmg6CisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJKiBnc3QvZ3N0dmFsdWUuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkgIHN0cnVjdHVyZTogZml4IHNlcmlhbGlzYXRpb24gb2YgbmVzdGVkIHN0cnVjdHVyZXMuCisJICBVc2Ugc3RyaW5nX3dhcnAvdW53cmFwIHRvIGVzY2FwZSBkZWxpbWl0ZXJzLCBvdGhlcndpc2UgZGVzZXJpYWxpc2F0aW9uIGZhaWxzLgorCSAgQWxzbyBtb3ZlIEdTVF9BU0NJSV9JU19TVFJJTkcgdG8gcHJpdmF0ZSBoZWFkZXIgdG8gYXZvaWQga2VlcGluZyBpdCBpbiBzeW5jLgorCSAgQWxzbyB1c2UgJ1wwJyB3aGVuIHRlcm1pbmF0aW5nIGEgc3RyaW5nIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkuCisKKzIwMDktMDYtMDIgMTU6Mzc6MjIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJhc2VzaW5rOiBmaXggcmVncmVzc2lvbiBpbiB1bml0IHRlc3RzCisJICBTdG9yZSB0aGUgdGltZXN0YW1wIG9mIHRoZSBidWZmZXIgYWZ0ZXIgcHJlcm9sbGluZy4gV2hpbGUgd2UgYXJlIHByZXJvbGxlZCB3ZQorCSAgd2FudCB0byByZXBvcnQgdGhlIHBvc2l0aW9uIG9mIHRoZSBzZWdtZW50IHN0YXJ0IHZhbHVlLgorCisyMDA5LTA2LTAxIDIwOjI2OjUzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGluZm8uYzoKKwkgIGluZm86IHdpZGVuIGxvZyBsZXZlbCBzdHJpbmdzIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSBuZXcgTUVNRFVNUAorCisyMDA5LTA2LTAxIDE5OjM3OjE0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBiYXNlc2luazogcG9zdCBhIHdhcm5pbmcgb24gZXhjZXNzaXZlIGZyYW1lZHJvcHMKKwkgIFdoZW4gd2UgZ28gaW50byBlbWVyZ2VuY3kgcmVuZGVyaW5nLCBwb3N0IGEgd2FybmluZyBpbmZvcm1pbmcgdGhlIHVzZXIgYWJvdXQKKwkgIHRoaXMgZmFjdC4KKworMjAwOS0wNS0zMSAxOToxMDowMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgYmFzZXNpbms6IG1vcmUgc3RlcHBpbmcgaW4gcmV2ZXJzZQorCSAgRml4IHN0ZXBwaW5nIGFuZCBwb3NpdGlvbiByZXBvcnRpbmcgaW4gcmV2ZXJzZSBwbGF5YmFjay4KKworMjAwOS0wNS0yOSAxNjowNjo1MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgYmFzZXNpbms6IHVzZSBzdGFydF90aW1lIGFzIHRoZSBzdGVwIHN0YXJ0CisJICBVc2UgdGhlIHN0YXJ0X3RpbWUgb2YgdGhlIGVsZW1lbnQgYXMgdGhlIHBvaW50IGZyb20gd2hlcmUgdGhlIHN0ZXAgb3BlcmF0aW9uCisJICBzdGFydHMuIFRoaXMgZml4ZXMgc3RlcHBpbmcgaW4gYWxsIHBhdXNlZCBzdGF0ZXMuCisKKzIwMDktMDUtMTkgMTk6NDU6MDYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJhc2VzaW5rOiBjYXRjaCBzdGVwIGNhc2VzIGluIF93YWl0X3ByZXJvbGwoKQorCSAgV2hlbiBhIHN1YmNsYXNzIGlzIGJsb2NraW5nIGluIF93YWl0X3ByZXJvbGwoKSBpbiB0aGUgX3JlbmRlciBtZXRob2QsIG1ha2Ugc3VyZQorCSAgd2UgY2FuIHVubG9jayB0aGUgc3ViY2xhc3MgYW5kIGRldGVjdCB0aGlzIHJldHVybiB2YWx1ZSBmcm9tIHRoZSByZW5kZXIgbWV0aG9kLgorCisyMDA5LTA1LTE5IDEwOjUwOjU3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBiYXNlc2luazogbW9yZSBzdGVwcGluZyBpbiByZXZlcnNlIGZpeGVzCisKKzIwMDktMDUtMTggMTg6NDE6NDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJhc2VzaW5rOiBzbWFsbCBjbGVhbnVwcworCisyMDA5LTA1LTE4IDE1OjQ4OjIwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2Rlc2lnbi9kcmFmdC1mcmFtZXN0ZXAudHh0OgorCSogZ3N0L2dzdG1lc3NhZ2UuYzoKKwkqIGdzdC9nc3RtZXNzYWdlLmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJKiB0ZXN0cy9leGFtcGxlcy9zdGVwcGluZy9mcmFtZXN0ZXAxLmM6CisJICBmcmFtZXN0ZXA6IGltcGxlbWVudCBiYWNrd2FyZHMgZnJhbWVzdGVwCisJICBVcGRhdGUgZnJhbWVzdGVwIGRvY3VtZW50LCB3ZSB3YW50IHRvIHBhc3MgdGhlIGZsdXNoIGZsYWcgaW4gdGhlIHN0ZXAtZG9uZQorCSAgbWVzc2FnZS4KKwkgIEFkZCBmbHVzaCBmbGFnIHRvIHRoZSBnc3RtZXNzYWdlLgorCSAgVXBkYXRlIGV4YW1wbGVzIHRvIHVzZSB0aGUgbmV3IHN0ZXAtZG9uZSBtZXNzYWdlIGFwaS4KKwkgIEltcGxlbWVudCBmcmFtZXN0ZXAgd2l0aCBwbGF5YmFjayByYXRlcyA8IDAuMCB0b28uCisKKzIwMDktMDUtMTUgMTU6MjU6MDYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJhc2VzaW5rOiBhZGQgZnJhbWVzdGVwcGluZyBpbiB0aW1lCisKKzIwMDktMDUtMTUgMTU6MjQ6MzAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2V4YW1wbGVzL3N0ZXBwaW5nL2ZyYW1lc3RlcDEuYzoKKwkgIGV4YW1wbGVzOiBzdGVwIGluIHRpbWUgYXMgd2VsbAorCisyMDA5LTA1LTE1IDEyOjAyOjAyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9leGFtcGxlcy9zdGVwcGluZy9mcmFtZXN0ZXAxLmM6CisJICBleGFtcGxlOiBwcmludCBzdGVwX2RvbmUgbWVzc2FnZSBhbmQgc3luYworCSAgRHVtcCB0aGUgc3RlcF9kb25lIG1lc3NhZ2UgY29udGVudHMuCisJICBTeW5jIGFnYWluc3QgdGhlIGNsb2NrIHdoZW4gZ29pbmcgdG8gUExBWUlORy4KKworMjAwOS0wNS0xNSAxMjowNTo0NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgYmFzZXNpbms6IGtlZXAgdHJhY2sgb2Ygc3RlcHBlZCB0aW1lCisJICBQYXNzIHJ1bm5pbmdfdGltZSBhcm91bmQgc28gdGhhdCB0aGUgc3RlcHBpbmcgY29kZSBjYW4gY2FsY3VsYXRlIHRoZSBlbGFwc2VkCisJICB0aW1lIGNvcnJlY3RseS4KKworMjAwOS0wNS0xNCAxOToyOTowOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgYmFzZXNpbms6IG1vdmUgc3R1ZmYgYXJvdW5kLCBtb3JlIHN0ZXBwaW5nCisJICBNYWtlIHN0YXJ0IGFuZCBzdG9wX3N0ZXBwaW5nIG1ldGhvZHMgYW5kIG1vdmUgdGhlaXIgaW52b2NhdGlvbiBpbiB0aGUgcmlnaHQKKwkgIHBsYWNlcy4KKwkgIFBlcmZvcm0gdGhlIGF0dWFsIHN0ZXBwaW5nIG9wZXJhdGlvbiB3aGVyZSB3ZSBoYXZlIGZ1bGwgY29udGV4dCBhYm91dCB0aGUKKwkgIHRpbWVzdGFtcHMuCisKKzIwMDktMDUtMTEgMTg6NTY6MDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIHRlc3RzL2V4YW1wbGVzL01ha2VmaWxlLmFtOgorCSogdGVzdHMvZXhhbXBsZXMvc3RlcHBpbmcvLmdpdGlnbm9yZToKKwkqIHRlc3RzL2V4YW1wbGVzL3N0ZXBwaW5nL01ha2VmaWxlLmFtOgorCSogdGVzdHMvZXhhbXBsZXMvc3RlcHBpbmcvZnJhbWVzdGVwMS5jOgorCSAgQWRkIGZyYW1lIHN0ZXBwaW5nIGluIFBBVVNFRCBleGFtcGxlCisKKzIwMDktMDUtMTEgMTg6NTY6NTYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJhc2VzaW5rOiBmaXJzdCBzdGFiIGF0IGZyYW1lIHN0ZXBwaW5nIGluIFBBVVNFRAorCSAgVW5sb2NrIHRoZSBwcmVyb2xsZWQgZnJhbWUgYW5kIHJlY2hlY2sgaWYgd2UgbmVlZCB0byBzdGVwLgorCSAgS2VlcCBhIHNpbXBsZSBjb3VudGVyIGZvciB0aGUgZnJhbWVzIHdlJ3JlIGFib3V0IHRvIHNraXAgd2hpbGUgc3RlcHBpbmcgYW5kCisJICBwcmVyb2xsL3Bvc3Qgc3RlcF9kb25lIHdoZW4gc3RlcHBpbmcgZmluaXNoZWQuCisKKzIwMDktMDYtMDEgMTI6MTk6NTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZGVzaWduL2RyYWZ0LWZyYW1lc3RlcC50eHQ6CisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdGV2ZW50LmM6CisJKiBnc3QvZ3N0ZXZlbnQuaDoKKwkqIGdzdC9nc3RtZXNzYWdlLmM6CisJKiBnc3QvZ3N0bWVzc2FnZS5oOgorCSogZ3N0L2dzdHF1YXJrLmM6CisJKiBnc3QvZ3N0cXVhcmsuaDoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgYWRkIG5ldyBBUEkgZm9yIGZyYW1lc3RlcHBpbmcKKwkgIEFkZCBuZXcgU1RFUCBldmVudCBhbmQgbWV0aG9kcyBmb3IgY3JlYXRpbmcvcGFyc2luZyB0aGUgZXZlbnQKKwkgIFVwZGF0ZSBkZXNpZ24gZG9jcy4KKwkgIEFkZCBuZXcgU1RFUF9ET05FIG1lc3NhZ2UgYW5kIG1ldGhvZCB0byBjcmVhdGUvcGFyc2UuCisJICBBUEk6IEdzdEV2ZW50Ojpnc3RfZXZlbnRfbmV3X3N0ZXAoKQorCSAgQVBJOiBHc3RFdmVudDo6Z3N0X2V2ZW50X3BhcnNlX3N0ZXAoKQorCSAgQVBJOiBHc3RNZXNzYWdlOjpnc3RfbWVzc2FnZV9uZXdfc3RlcF9kb25lKCkKKwkgIEFQSTogR3N0TWVzc2FnZTo6Z3N0X21lc3NhZ2VfcGFyc2Vfc3RlcF9kb25lKCkKKworMjAwOS0wNi0wMSAxMDowNTozMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkgIHN0cnVjdHVyZXM6IGRvbid0IGxlYWsgaW52YWxpZCBvciBlbXB0eSBzdHJpbmdzIHdoZW4gd2Ugd2FybgorCSAgRml4ZXMgbWlub3IgbWVtb3J5IGxlYWsgaW4gdW5pdCB0ZXN0cyBjYXVzZWQgYnkgdGhlIHJlY2VudCBjaGFuZ2VzLgorCSAgU2luY2Ugd2UncmUgZXhwZWN0ZWQgdG8gdGFrZSBvd25lcnNoaXAgb2YgdGhlIEdWYWx1ZSBpbiB0aGUgc3RydWN0dXJlCisJICBmaWVsZCBzdHJ1Y3QgaGVyZSwgd2UgbmVlZCB0byB1bnNldCBpdCBpZiB3ZSBkb24ndCB1c2UgaXQuCisKKzIwMDktMDYtMDEgMTE6MDg6MzEgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6CisJICBjb250cm9sbGVyOiBhZGQgdGVzdCBmb3IgY3ViaWMgaW50LiBhbmQgdG9vIGZldyBjb250cm9sIHBvaW50cworCSAgQWRkZWQgYW5vdGhlciB0ZXN0cyB0byBjaGVjayBzb21lIHdvcnJpZXMgaW4gQnVnICM1ODI1NjQuCisKKzIwMDktMDUtMjggMTI6MzE6MDggKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6CisJICBmYWtlc3JjOiBhZGQgYSBGSVhNRSBjb21tZW50IGZvciBibG9ja3NpemUgdnMuIHNpemUtbWF4IHByb3BlcnR5IGlzc3VlCisKKzIwMDktMDUtMzEgMjE6Mjc6NDAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5Lmg6CisJICBpZGVudGl0eTogaGFjayBhcm91bmQgZ19vYmplY3Rfbm90aWZ5KCkgYnVnIGJ5IHByb3RlY3RpbmcgaXQgd2l0aCBhIGxvY2sKKwkgIE91dC1vZi1iYW5kIGV2ZW50cyBtaWdodCBsZWFkIHRvIHVzIGNhbGxpbmcgZ19vYmplY3Rfbm90aWZ5KCkgZnJvbSBhCisJICBub24tc3RyZWFtaW5nIHRocmVhZCwgd2hpY2ggY2FuIGNhdXNlIGNyYXNoZXMgaWYgZ19vYmplY3Rfbm90aWZ5KCkgaXMKKwkgIGJlaW5nIGNhbGxlZCBmcm9tIHRoZSBzdHJlYW1pbmcgdGhyZWFkIGF0IHRoZSBzYW1lIHRpbWUuIFNlZSAjNTU0NDYwLgorCisyMDA5LTA1LTMxIDIyOjM3OjU5ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHRlc3RzL2JlbmNobWFya3MvY29udHJvbGxlci5jOgorCSAgY29udHJvbGxlcjogdXNlIHJlYWwgd29ybGQgbnVtYmVyIGluIGJlbmNobWFyaworCisyMDA5LTA1LTMxIDIyOjM3OjAzICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSAgcmVnaXN0cnk6IGZpeCBjb21tZW50IGZvcm1hdHRpbmcKKworMjAwOS0wNS0zMCAyMDozNjoyNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuaDoKKwkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmFrZXNpbmsuYzoKKwkgIGZha2VzaW5rOiBoYWNrIGFyb3VuZCBjcmFzaGVyIGJ1ZyBpbiBnX29iamVjdF9ub3RpZnkoKSBmb3Igb3V0LW9mLWJhbmQgZXZlbnRzCisJICBHT2JqZWN0IG1heSBjcmFzaCBpZiB0d28gdGhyZWFkcyBkbyBjb25jdXJyZW50IGdfb2JqZWN0X25vdGlmeSgpIG9uIHRoZSBzYW1lCisJICBvYmplY3QuIFRoaXMgbWF5IGhhcHBlbiBpZiBmYWtlc2luayByZWNlaXZlcyBhbiBvdXQtb2YtYmFuZCBldmVudCBzdWNoIGFzCisJICBGTFVTSF9TVEFSVCB3aGlsZSBwcm9jZXNzaW5nIGEgYnVmZmVyIG9yIHNlcmlhbGlzZWQgZXZlbnQgaW4gdGhlIHN0cmVhbWluZworCSAgdGhyZWFkLiBTaW5jZSB0aGlzIG1heSBoYXBwZW4gd2l0aCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBkdXJpbmcgYSBjb21tb24KKwkgIG9wZXJhdGlvbiBsaWtlIGEgc2VlaywgYW5kIHRoZXJlIHNlZW1zIHRvIGJlIGxpdHRsZSBjaGFuY2Ugb2YgYSB0aW1lbHkgZml4CisJICBpbiBHT2JqZWN0IChzZWUgIzE2NjAyMCksIHdlIHNob3VsZCBoYWNrIGFyb3VuZCB0aGlzIGlzc3VlIGJ5IHByb3RlY3RpbmcgYWxsCisJICBvZiBmYWtlc2luaydzIGRpcmVjdCBnX29iamVjdF9ub3RpZnkoKSBjYWxscyB3aXRoIGEgbG9jay4KKwkgIEFsc28gYWRkIHVuaXQgdGVzdCBmb3IgdGhlIGFib3ZlLgorCSAgRml4ZXMgIzU1NDQ2MC4KKworMjAwOS0wNS0zMSAxNjoxNzo0NSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R0YWdsaXN0LmM6CisJICB0YWdsaXN0czogbWFrZSBfZ2V0X3tzdHJpbmd8cG9pbnRlcn0gcmV0dXJuIEZBTFNFIGZvciBOVUxMIHZhbHVlcworCSAgTWFrZSBnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZygpIHJldHVybiBGQUxTRSBmb3IgTlVMTCBzdHJpbmdzIGFuZAorCSAgZW1wdHkgc3RyaW5ncywgYW5kIGdzdF90YWdfbGlzdF9nZXRfcG9pbnRlcigpIHJldHVybiBGQUxTRSBmb3IKKwkgIE5VTEwgcG9pbnRlcnMsIGxpa2Ugd2UgZG8gd2l0aCBkYXRlcyBhbmQgYnVmZmVycy4KKwkgIEZpeGVzICM1NjAzNDUuCisKKzIwMDktMDUtMzAgMjA6NTA6NDAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFnLmM6CisJICB0YWdsaXN0czogd2FybiBpZiBzb21lb25lIHRyaWVzIHRvIGFkZCBlbXB0eSBvciBOVUxMIHN0cmluZyB0YWdzIHRvIGEgdGFnbGlzdAorCSAgQWxzbyB3YXJuIGlmIGFuIGVsZW1lbnQgb3IgYXBwbGljYXRpb24gdHJpZXMgdG8gYWRkIGEgZmllbGQgd2l0aCBhbgorCSAgZW1wdHkgc3RyaW5nIHRvIGEgc3RydWN0dXJlIChOVUxMIHN0cmluZ3MgYXJlIHN0aWxsIG5lZWRlZCBhbmQKKwkgIGFsbG93ZWQgdGhvdWdoKSBhbmQgZG8gYWxsIHRob3NlIGNoZWNrcyBpbiB0aGUgcmlnaHQgZnVuY3Rpb24uCisJICBGaXhlcyAjNTU5NjQzLgorCisyMDA5LTA1LTI5IDE4OjIyOjQyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3RldmVudC5jOgorCSogZ3N0L2dzdG1lc3NhZ2UuYzoKKwkqIGdzdC9nc3RxdWVyeS5jOgorCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSogZ3N0L2dzdHN0cnVjdHVyZS5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBzdHJ1Y3R1cmU6IGFkZCBnc3Rfc3RydWN0dXJlX2lkX25ldygpIGNvbnZlbmllbmNlIGZ1bmN0aW9uCisJICBBZGQgY29udmVuaWVuY2Ugd3JhcHBlciBmb3IgZ3N0X3N0cnVjdHVyZV9pZF9lbXB0eV9uZXcoKSBwbHVzCisJICBnc3Rfc3RydWN0dXJlX2lkX3NldCgpIGFuZCB1c2UgaXQgaW4gYSBmZXcgcGxhY2VzLgorCSAgQVBJOiBnc3Rfc3RydWN0dXJlX2lkX25ldygpCisKKzIwMDktMDUtMjkgMTg6MDA6MDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZXZlbnQuYzoKKwkqIGdzdC9nc3RtZXNzYWdlLmM6CisJKiBnc3QvZ3N0cXVhcmsuYzoKKwkqIGdzdC9nc3RxdWFyay5oOgorCSogZ3N0L2dzdHF1ZXJ5LmM6CisJKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSAgbWljcm8tb3B0aW1pc2F0aW9uOiB1c2UgR1NUX1FVQVJLIGluIG1vcmUgcGxhY2VzCisJICBVc2UgZ3N0X3N0cnVjdHVyZV9pZF9lbXB0eV9uZXcoKSBpbiBjb21iaW5hdGlvbiB3aXRoIEdTVF9RVUFSSworCSAgcmF0aGVyIHRoYW4gZ3N0X3N0cnVjdHVyZV9pZF9uZXcoKSB3aGVuIGNyZWF0aW5nIG1lc3NhZ2UsIGV2ZW50LAorCSAgcXVlcnkgYW5kIHRhZ2xpc3Qgc3RydWN0dXJlcy4gTW9zdGx5IGp1c3QgYmVjYXVzZSB3ZSBjYW4uCisKKzIwMDktMDUtMjkgMTY6MDQ6MjggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJICBlbGVtZW50OiByZXNldCBzdGFydF90aW1lIGluIGxvc3Qgc3RhdGUKKworMjAwOS0wNS0yOSAxMzowMzoxNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3RwaXBlbGluZS5jOgorCSAgZG9jczogdXBkYXRlIGVsZW1lbnQgYW4gcGlwZWxpbmUgZG9jcworCisyMDA5LTA1LTI5IDEyOjQ4OjI4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgorCSAgZG9jczogcmVtb3ZlIGEgVE9ETyBpdGVtIHRoYXQgaXMgZml4ZWQgbm93CisKKzIwMDktMDUtMjkgMTI6MjE6MzYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RwaXBlbGluZS5jOgorCSogZ3N0L2dzdHBpcGVsaW5lLmg6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzoKKwkgIHBpcGVsaW5lOiBkZXByZWNhdGUgb2xkIG1ldGhvZHMsIGZpeCB0ZXN0CisJICBEZXByZWNhdGUgdGhlIG9sZCBfc2V0X3N0cmVhbV90aW1lIGFuZCBfZ2V0X2xhc3Rfc3RyZWFtX3RpbWUgbWV0aG9kcyBiZWNhdXNlCisJICB0aGV5IGFyZSBub3cgZXF1aXZhbGVudCB0byB0aGUgYmV0dGVyIG5hbWVkIF9zZXQvX2dldF9zdGFydF90aW1lLgorCisyMDA5LTA1LTI4IDE2OjMwOjUyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGlwZWxpbmUuYzoKKwkqIGdzdC9nc3RwaXBlbGluZS5oOgorCSAgcGlwZWxpbmU6IHVzZSBTVEFSVF9USU1FIHRvIGtlZXAgdHJhY2sgb2YgdGltZQorCSAgVXNlIHRoZSBlbGVtZW50IFNUQVJUX1RJTUUgdG8ga2VlcCB0cmFjayBvZiB0aGUgcnVubmluZyB0aW1lIHdoZW4gdGhlIHBpcGVsaW5lCisJICBwYXVzZWQgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCB0byByZXN0b3JlIHRoZSBiYXNlX3RpbWUuCisJICBUYWtlIHRoZSBzdGFydF90aW1lIGJlZm9yZSBzZXR0aW5nIHRoZSBjaGlsZHJlbiB0byBQQVVTRUQgc28gdGhhdCB3ZSBjYW4KKwkgIGRpc3RyaWJ1dGUgdGhlIHN0YXJ0X3RpbWUgdG8gdGhlIGNoaWxkcmVuLgorCisyMDA5LTA1LTI4IDE1OjQwOjAxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YmluLmM6CisJICBiaW46IHNldCB0aGUgYmFzZV90aW1lIGFuZCBzdGFydF90aW1lIGJldHRlcgorCSAgU2ltcGx5IHNldCB0aGUgc3RhcnRfdGltZSBhbmQgYmFzZV90aW1lIG9uIHRoZSBlbGVtZW50IGluc3RlYWQgb2YgY2FsbGluZyB0aGUKKwkgIHNldHRlcnMuCisKKzIwMDktMDUtMjcgMTE6MzU6NTggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RiaW4uYzoKKwkgIGJpbjogbWFrZSB0aGUgYmluIHNldCB0aGUgc3RhcnRfdGltZSBvbiBlbGVtZW50cworCSAgU2V0IHRoZSBzdGFydF90aW1lIG9mIHRoZSBiaW4gb24gdGhlIGVsZW1lbnRzIHdoZW4gdGhleSBhcmUgYWRkZWQgdG8gdGhlCisJICBwaXBlbGluZSBhbmQgd2hlbiBhIHN0YXRlIGNoYW5nZSBoYXBwZW5zLgorCisyMDA5LTA1LTI2IDExOjUzOjA1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3RlbGVtZW50Lmg6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGVsZW1lbnQ6IGFkZCBzdGFydF90aW1lIGZpZWxkIGFuIG1ldGhvZHMKKwkgIEFkZCBhIHN0YXJ0X3RpbWUgZmllbGQgYW5kIHNvbWUgbWV0aG9kcy4gVGhlIHN0YXJ0X3RpbWUgd2lsbCBjb250YWluIHRoZQorCSAgcnVubmluZ190aW1lIG9mIHdoZW4gdGhlIGVsZW1lbnQgbGFzdCB3ZW50IHRvIHBhdXNlZC4gVGhpcyB0aW1lIGNhbiBiZSB1c2VyIHRvCisJICByZXBvcnQgdGhlIHBvc2l0aW9uIGluIFBBVVNFRCBidXQgYWxzbyB0byBkbyBtb3JlIGNvcnJlY3QgY2xpcHBpbmcgYW5kCisJICBzdGVwcGluZyBsYXRlci4KKworMjAwOS0wNS0yOCAyMjowMjoyMSArMDIwMCAgQXJub3V0IFZhbmRlY2FwcGVsbGUgPGFybm91dEBtaW5kLmJlPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKKwkqIHRlc3RzL2NoZWNrL2xpYnMvYWRhcHRlci5jOgorCSAgYWRhcHRlcjogZml4IF9tYXNrZWRfc2Nhbl91aW50MzIoKSBhdCBib3VuZGFyaWVzCisJICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgY291bGQgcmV0dXJuIHZhbHVlcyBzbWFsbGVyIHRoYW4gb2Zmc2V0CisJICBpZiB0aGUgZmlyc3QgYnl0ZShzKSBvZiB0aGUgbWFzayBhcmUgMCBhbmQgdGhlIHBhdHRlcm4gbWF0Y2hlcyB0aGUKKwkgIGJlZ2lubmluZyBvZiB0aGUgYWRhcHRlci4KKwkgIEFkZGVkIGV4YW1wbGVzIHRvIGRvY3VtZW50YXRpb24gb2YgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyKCkuCisJICBBbHNvIGFkZGVkIHNvbWUgbW9yZSBtYXNrZWQgYm91bmRhcnkgdGVzdHMuCisJICBGaXhlcyAjNTg0MTE4CisKKzIwMDktMDUtMjggMTY6MzY6MzIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkLmg6CisJICBwYWQ6IGFkZCBwYWQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKwkgIEFkZCBwYWQgcHJpdmF0ZSBzdHJ1Y3R1cmUgYW5kIG1vdmUgdGhlIG5ldyBjaGFpbmxpc3RmdW5jIGludG8gdGhlIHByaXZhdGUKKwkgIHN0cnVjdC4gVGhpcyBhdm9pZHMgQUJJIGJyZWFrYWdlIGFuZCBhbGxvd3MgdXMgdG8gZXhwYW5kIGluIHRoZSBmdXR1cmUuCisKKzIwMDktMDUtMjcgMTY6MzQ6MTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6CisJICBBZGQgbWlzc2luZyBzeW1ib2wgdG8gdGhlIHdpbjMyIGV4cG9ydHMKKwkgIFRoaXMgd2FzIGFjY2lkZW50aWFsbHkgcmVtb3ZlZCBieSBteSBsYXN0IGNvbW1pdC4KKworMjAwOS0wNS0yNyAxNjoxNzozMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSAgYnVmZmVyOiBhdm9pZCBtZW1vcnkgbGVha3MKKwkgIEF2b2lkIGxlYWtpbmcgdGhlIGNhcHMgb2YgdGhlIGRlc3QgYnVmZmVyIGFuZCBhdm9pZCBkb2luZyBuZWVkbGVzcyBjYXBzCisJICByZWZzLgorCSAgV2hlbiB0aGUgc291cmNlIGFuZCB0YXJnZXQgYnVmZmVycyBhcmUgdGhlIHNhbWUsIHJldHVybiBpbW1lZGlhdGx5LgorCisyMDA5LTA1LTI3IDE0OjMyOjUxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3RtZXNzYWdlLmM6CisJKiBnc3QvZ3N0bWVzc2FnZS5oOgorCSogZ3N0L2dzdHV0aWxzLmM6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIEFQSTogQWRkIGdzdF9tZXNzYWdlX3tuZXcscGFyc2V9X3RhZ19mdWxsKCkgdG8gZ2V0L3NldCB0aGUgc291cmNlIHBhZAorCSAgRml4ZXMgYnVnICM1ODI1ODguCisKKzIwMDktMDUtMjcgMTQ6MDY6MTMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIFJldmVydCAiZWxlbWVudDogU2V0IHRoZSBvcmlnaW5hdGluZyBwYWQgYXMgbWVzc2FnZSBzb3VyY2UgaW4gZ3N0X2VsZW1lbnRfZm91bmRfdGFnc19mb3JfcGFkICgpIgorCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBiZWJmZGU3NTAyN2U5NzViN2U3Yzc0YzYzNThjNWJlODNlYTRhYzlmLgorCSAgVGhpcyBjaGFuZ2Ugc2hvdWxkbid0IGJlIGRvbmUgaW4gYSBzdGFibGUgcmVsZWFzZSBzZXJpZXMgYXMKKwkgIGFwcGxpY2F0aW9ucyBhcmUgYWN0dWFsbHkgZXhwZWN0aW5nIHRoZSBzZW5kZXIgdG8gYmUgYW4KKwkgIEdzdEVsZW1lbnQuIE9uZSBleGFtcGxlIGlzIHRvdGVtLgorCisyMDA5LTA1LTI2IDExOjM1OjQ5ICswMTAwICBKYW4gU2NobWlkdCA8amFuLnNjaG1pZHRAc3VuLmNvbT4KKworCSogY29tbW9uOgorCSAgVXBkYXRlIGNvbW1vbgorCisyMDA5LTA1LTI2IDEwOjQxOjI4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogTWFrZWZpbGUuYW06CisJICBGaXggJ21ha2UgZGlzdGNoZWNrJworCSAgVGhlIGNoZWNrLWVudW0tZ2V0dHlwZXMgcnVsZSBkaWRuJ3Qgd29yayBmb3IgJ21ha2UgZGlzdGNoZWNrJyBzaW5jZQorCSAgaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBzb3VyY2UgZmlsZXMgZnJvbSB0aGUKKwkgIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgd2hpY2ggaXNuJ3QgdHJ1ZSBkdXJpbmcgZGlzdGNoZWNraW5nLgorCisyMDA5LTA1LTI2IDEwOjM4OjU2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9tYW51YWxzLm1hazoKKwkgIG1hbnVhbHMubWFrOiBhdHRlbXB0IHRvIG1ha2UgJ21ha2UgZGlzdGNoZWNrJyB3b3JrIHdpdGggLWpOCisJICBBdHRlbXB0IHRvIGZpeCB0aGUgJ2Nhbm5vdCBjcmVhdGUgcmVndWxhciBmaWxlIGJ1aWxkL2ltYWdlLmVudGl0aXRlczoKKwkgIGZpbGUgZXhpc3RzJyBlcnJvciBJIGdvdC4KKworMjAwOS0wNS0yNSAyMzo1ODozNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKKwkgIGRvY3M6IGZpeCBjZHBhcmFub2lhIGV4YW1wbGUgcGlwZWxpbmUgaW4gZ3N0LWxhdW5jaCBtYW4gcGFnZQorCisyMDA5LTA1LTI1IDE4OjQ0OjE0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSAgZWxlbWVudDogZml4IHR5cG8gaW4gY29tbWVudHMKKworMjAwOS0wNS0yNSAxNzo0MzozMiArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiB0ZXN0cy9leGFtcGxlcy9zdHJlYW1zL01ha2VmaWxlLmFtOgorCSAgZGlzdDogRml4IHRoZSBuYW1lIG9mIHRoZSBoZWFkZXIgdG8gZGlzdDogdGVzdHJ0cG9vbC5oLCBub3QgcnRwb29sLXRlc3QuaAorCisyMDA5LTA1LTI1IDE3OjAzOjA1ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIGNvbW1vbjoKKwkgIFVwZGF0ZSBjb21tb24KKworMjAwOS0wNS0yNSAxNjo1NDoyNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGNsb2NrLmM6CisJICBjbG9jazogcmVtb3ZlIGFzc2VydGlvbgorCSAgUmVtb3ZlIGFuIGFzc2VydGlvbiwgdGhpcyBpcyBub3QgcmVhbGx5IGFuIGVycm9yIGluIGFsbCBjYXNlcy4KKwkgIEZpeGVzICM1ODIwMTAKKworMjAwOS0wNS0yNSAxNjoyMTo1NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6CisJICBjbG9jazogZW5hYmxlIG1vbm90b25pYyBjbG9jayB3aGVuIHdlIGNhbgorCSAgRW5hYmxlIHRoZSBtb25vdG9uaWMgY2xvY2sgYnkgZGVmYXVsdCB3aGVuIHdlIGNhbi4KKwkgIEZpeGVzICM1ODM1NTQKKworMjAwOS0wNS0yNSAxNDo1MjoxMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9kZXNpZ24vZHJhZnQta2xhc3MudHh0OgorCSAgZG9jczogYWRkIEltYWdlIHRvIGRyYWZ0IGtsYXNzIGRvY3VtZW50YXRpb24KKworMjAwOS0wNS0yNSAxMzowMzo0MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgcGFkOiBrZWVwIHRhc2sgcmVmIGJlZm9yZSByZWxlYXNpbmcgdGhlIGxvY2sKKwkgIEtlZXAgYSByZWYgdG8gdGhlIHRhc2sgb24gdGhlIHBhZCBzbyB0aGF0IGEgY29uY3VycmVudCBzdG9wIGNhbiBzdG9wIGFuZCBqb2luCisJICB0aGUgdGFzay4KKworMjAwOS0wNS0yNSAxMTo1Njo0NyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHRhc2suYzoKKwkgIGdzdHRhc2s6IGF2b2lkIGpvaW4gdG8gcmV0dXJuIGVhcmx5CisJICBVbnNldCB0aGUgcnVubmluZyBmbGFnIGFmdGVyIHdlIHJlbGVhc2VkIHRoZSBsb2NrIGZvciBwb3N0aW5nIHRoZSBzdHJlYW0tc3RhdHVzCisJICBtZXNzYWdlLiBJZiB3ZSBzZXQgdGhlIHJ1bm5pbmcgZmxhZyB0byBGQUxTRSB0b28gZWFybHksIHRoZSBqb2luIG1ldGhvZCB3aWxsCisJICBqdXN0IGNvbnRpbnVlIHdpdGhvdXQgd2FpdGluZyBmb3IgdGhlIG1lc3NhZ2UgdG8gYmUgcG9zdGVkLCBsZWFkaW5nIHRvIHBvdGVudGlhbAorCSAgY3Jhc2hlcy4KKworMjAwOS0wNS0yNCAyMzoxNDoyNiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0cHJlc2V0LmM6CisJICBwcmVzZXQ6IGZpeCB1cGRhdGUgcnVsZQorCSAgT25seSB1cGRhdGUgdGhlIHByZXNldCBmcm9tIHN5c3RlbSwgaWYgd2UgaGFkIGEgcHJlc2V0IGJlZm9yZSBhbmQgc3lzdGVtCisJICB2ZXJzaW9uIGlzIG5ld2VyLgorCisyMDA5LTA1LTIyIDIzOjQ3OjMwICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHRlc3RzL2JlbmNobWFya3MvLmdpdGlnbm9yZToKKwkqIHRlc3RzL2JlbmNobWFya3MvTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9iZW5jaG1hcmtzL2NvbnRyb2xsZXIuYzoKKwkgIGNvbnRyb2xsZXI6IGFkZCBhIGJlbmNobWFyayB0byB2ZXJpZnkgdGhlIHN3aXRjaCB0byBnc2VxdWVuY2UKKworMjAwOS0wNS0yMiAyMzo1MDo1OCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiB0ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL2F1ZGlvLWV4YW1wbGUuYzoKKwkgIGNvbnRyb2xsZXI6IGFkZCBtb3JlIGVycm9yIGhhbmRsaW5nIHRvIGV4YW1wbGUKKworMjAwOS0wNS0yMiAyMzoxNDo0MSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKKwkgIHJlZ2lzdHJ5OiBkb24ndCBmcmVlIG5vZGUtZGF0ZSBhbmQgZGVyZWYgYWdhaW4uIEZpeGVzICM1ODA1NzkKKwkgIFdoZW4gd3JpdGluZyBhIGNhY2hlIGNodW5rIGZhaWxzLCB3ZSB3ZXJlIGZyZWVpbmcgdGhlIG5vZGUgYW5kIGp1bXAgdG8gYSBmaW5hbAorCSAgY2xlYW51cCB3aGljaCBkZXJlZmVyZW5jZWQgYSBudWxsIHBvaW50ZXIuIExldmUgZnJlZWluZyB0aGUgbm9kZSB0byB0aGUgY2xlYW51cAorCSAgY29kZSBpbiBmYWlsX2ZyZWVfbGlzdC4gKHNvcnJ5IGZvciBjb21taXR0aW5nIHdyb25nIGZpeCBiZWZvcmUpLgorCisyMDA5LTA1LTIyIDIzOjEwOjAwICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgorCSAgcmVnaXN0cnk6IGRvbid0IGZyZWUgbm9kZS1kYXRlIGFuZCBkZXJlZiBhZ2Fpbi4gRml4ZXMgIzU4MDU3OQorCSAgV2hlbiB3cml0aW5nIGEgY2FjaGUgY2h1bmsgZmFpbHMsIHdlIHdlcmUgZnJlZWluZyB0aGUgbm9kZSBhbmQganVtcCB0byBhIGZpbmFsCisJICBjbGVhbnVwIHdoaWNoIGRlcmVmZXJlbmNlZCBhIG51bGwgcG9pbnRlci4gTGV2ZSBmcmVlaW5nIHRoZSBub2RlIHRvIHRoZSBjbGVhbnVwCisJICBjb2RlIGluIGZhaWxfZnJlZV9saXN0LgorCisyMDA5LTA1LTIyIDE0OjE3OjU2ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jOgorCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5jOgorCSAgY29udHJvbGxlcjogYWRkIEdfTElLRUxZIGFuZCBqb2luIHR3byBpZiBmb3Igc2FtZSBjb25kaXRpb24KKwkgIEEgR19MSUtFTFkgZm9yIHRoZSBzZXF1ZW5jZSE9TlVMTCBjaGVja3MuIEpvaW4gdHdvIGlmcyB0byBhbiBpZi1lbHNlLiBBZGQKKwkgIGluZGVudCBndWlkZXMgdG8ga2VlcCBpbmRlbnQgZm9ybSBicmVha2luZyB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24KKworMjAwOS0wNS0yMiAxMjo1NzoxMCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOgorCSAgZ3N0dHlwZWZpbmRoZWxwZXI6IEZpeCBpbmRlbnRhdGlvbgorCisyMDA5LTA1LTIyIDEyOjI0OjIyICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RjbG9jay5jOgorCSogZ3N0L2dzdG1lc3NhZ2UuYzoKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RxdWVyeS5jOgorCSogZ3N0L2dzdHRhc2suYzoKKwkgIGRvY3M6IGZpeCBndGstZG9jIHdhcm5pbmdzCisJICBNb3ZlIE1UIHNhZmV0eSB0byBtYWluIGRlc2NyaXB0aW9uIChpdCBkb2VzIG5vdCBiZWxvbmcgdG8gUmV0dXJuOiBvciBTaW5jZToKKwkgIHN0YXRlbWVudCkuIEFkZCBhIGZldyBtaXNzaW5nIHJldHVybiBkb2NzLiBEb3duZ3JhZGUgYSBub3JtYWwgY29tbWVudCBmcm9tYSBkb2MKKwkgIGNvbW1lbnQuIEZpeCBhIGRvYyBoZWFkZXIgdG8gb25seSBjb250YWluIHN5bWJvbCBuYW1lLgorCisyMDA5LTA1LTIyIDEwOjE5OjM2ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIGNvbW1vbjoKKwkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQorCSAgRnJvbSBkM2E4ZmFiIHRvIDg4OGUwYTIKKworMjAwOS0wNS0yMiAwOTo1MTo0NCArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiB0ZXN0cy9leGFtcGxlcy9zdHJlYW1zL01ha2VmaWxlLmFtOgorCSAgZGlzdDogQWRkIHJ0cG9vbC10ZXN0LmggdG8gdGhlIHNvdXJjZXMgbGlzdCBzbyBpdCBnZXRzIGRpc3RlZC4KKwkgIEZpeGVzIHRoZSBkaXN0Y2hlY2sKKworMjAwOS0wNS0yMiAwOTo0NDoyNSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiB0ZXN0cy9iZW5jaG1hcmtzLy5naXRpZ25vcmU6CisJICBnaXRpZ25vcmVzOiBJZ25vcmUgdGhlIGNsb2Nrc3RyZXNzIGJlbmNobWFyayBiaW5hcnkKKworMjAwOS0wNS0yMiAwOTo0MTozNiArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzoKKwkgIGNvbnRyb2xsZXI6IFNpbGVuY2UgYSB3YXJuaW5nIGZyb20gdGhlIEdTZXF1ZW5jZSBiZWluZyBOVUxMLgorCSAgRml4IGEgd2FybmluZyB0aGF0IG9jY3VycyB3aGVuIHRoZSBzZWxmLT5wcml2LT52YWx1ZXMgaXMgTlVMTCBhbmQKKwkgIHRoZSBjb2RlIHRyaWVzIHRvIHJldHJpZXZlIGFuIGl0ZXJhdG9yIGZyb20gaXQuIFRoZSB3YXJuaW5nIHdhcyBzaG93aW5nCisJICB1cCBpbiB0aGUgY2hlY2tzIGZvciB0aGUgdm9sdW1lIGVsZW1lbnQuCisKKzIwMDktMDUtMjIgMDk6MzM6MDIgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3RtZXNzYWdlLmM6CisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0dGFzay5jOgorCSogZ3N0L2dzdHV0aWxzLmg6CisJICBkb2NzOiBGaXggdXAgc29tZSBkb2N1bWVudGF0aW9uIHdhcm5pbmdzLgorCSAgU2luY2U6IHRhZ3Mgc2hvdWxkIGFsd2F5cyBiZSB0aGUgbGFzdCB0aGluZyBpbiBhIGRvYyBibG9jaywgYXBwYXJlbnRseS4KKwkgIEFkZCBzb21lIFJldHVybnM6IGRlc2NyaXB0aW9ucyB0byBzb21lIHJlY2VudCBmdW5jdGlvbnMuCisKKzIwMDktMDUtMjEgMTc6MzI6MDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RjbG9jay5jOgorCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3RlbGVtZW50Lmg6CisJKiBnc3QvZ3N0ZXZlbnQuYzoKKwkqIGdzdC9nc3RwaXBlbGluZS5jOgorCSAgZG9jczogdXBkYXRlIGRvY3MgZm9yIHN0cmVhbV90aW1lLT5ydW5uaW5nX3RpbWUKKwkgIENoYW5nZSBzb21lIGluc3RhbmNlcyB3aGVyZSB3ZSB3cm9uZ2x5IHJlZmVyIHRvIHN0cmVhbSB0aW1lIHdoZXJlIGl0IHNob3VsZCBoYXZlCisJICBiZWVuIHJ1bm5pbmcgdGltZS4KKworMjAwOS0wNS0yMSAxMDo1Nzo0NyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRvb2xzL2dzdC1sYXVuY2guYzoKKwkgIGdzdC1sYXVuY2g6IGRvbid0IHVzZSBHX0dVSU5UMzJfRk9STUFUIGluIHRyYW5zbGF0YWJsZSBzdHJpbmcKKwkgIHhnZXR0ZXh0IGRvZXNuJ3QgaGFuZGxlIHRoaXMgdmVyeSB3ZWxsLiBGaXhlcyAjNTgzNDE5LgorCisyMDA5LTA1LTIwIDE3OjA3OjM3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogYXV0b2dlbi5zaDoKKwkgIGF1dG9nZW4uc2g6IGNhbiByZW1vdmUgdGhlIC1Xbm8tcG9ydGFiaWxpdHkgZnJvbSBoZXJlIG5vdworCSAgc2luY2Ugd2UgYWRkZWQgaXQgdG8gY29uZmlndXJlLmFjLgorCisyMDA5LTA1LTIwIDIyOjE4OjE2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKKwkgIGFkYXB0ZXI6IGltcHJvdmUgdGhlIGZsdXNoIGZ1bmN0aW9uCisJICBSZW1vdmUgYSBjb21wYXJlIGFuZCBicmFuY2ggZnJvbSBmbHVzaC4KKworMjAwOS0wNS0yMCAxNzoyNDoxOSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmM6CisJICBjb250cm9sbGVyOiBmaXggYXNzZXJ0aW9uIHdoZW4gZnJlZWluZyB0aGUgY29udHJvbCBzb3VyY2UKKworMjAwOS0wNS0yMCAxMjo0ODo0MSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6CisJICBhZGFwdGVyOiBwb3RlbnRpYWxseSBzYXZlIGEgbWVtY3B5IGluIF90YWtlCisJICBEaXJlY3RseSB1c2UgdGhlIGFzc2VtYmxlZF9kYXRhIGluIF90YWtlKCkgZnVuY3Rpb25zIHdoZW4gd2UgY2FuIGluc3RlYWQgb2YKKwkgIGNvcHlpbmcgaXQgb3V0LgorCisyMDA5LTA1LTIwIDExOjM2OjExICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKKwkgIGFkYXB0ZXI6IG1pY3JvIG9wdGltaXNhdGlvbnMKKworMjAwOS0wNS0yMCAxMToxMjo0MyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6CisJICBhZGFwdGVyOiBhdm9pZCBjb21wYXJpc2lvbnMgaW4gZmFzdCBwYXRoCisJICBTbWFsbCB0d2Vha3MgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgdXNlbGVzcyBjb21wYXJlcyBpbiBsb29wcy4KKworMjAwOS0wNS0yMCAxMDoyODowOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svbGlicy9hZGFwdGVyLmM6CisJICB0ZXN0czogb25lIG1vcmUgYWRhcHRlciB0ZXN0CisKKzIwMDktMDUtMjAgMTA6Mjc6NDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgorCSAgYWRhcHRlcjogYXZvaWQgYnJhbmNoIGluIGNvcHkgY29kZQorCisyMDA5LTA1LTIwIDEwOjU2OjExICswMzAwICBIYW5uZXMgQmlzdHJ5IDxiaXN0cnlAaW5mb3JtYXRpay51bmktaGFtYnVyZy5kZT4KKworCSogZ3N0L2dzdGJpbi5jOgorCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIGxvYWRzYXZlOiBmaXggcmVxdWVzdHBhZCBoYW5kbGluZyBhbmQgc2VyaWFsaXNhdGlvbiBvcmRlci4KKwkgIFN1cHBvcnQgcmVxdWVzdCBwYWRzIHdoZW4gbG9hZGluZy4gUmV2ZXJzZSBwYWQgc2VyaWFsaXNhdGlvbiBvcmRlciB0bworCSAgcHJlc2VydmUgaXQgd2hlbiByZWNyZWF0aW5nIHRoZSBwaXBlbGluZS4KKworMjAwOS0wNS0yMCAwMDo0NToyNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgorCSAgZGVmczogYWRkIG5ldyBzeW1ib2wKKworMjAwOS0wNS0yMCAwMDo0NDoxMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkgIGRvY3M6IGFkZCBuZXcgc3ltYm9sIHRvIGRvY3MKKworMjAwOS0wNS0yMCAwMDozNzo1MyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuaDoKKwkqIHRlc3RzL2NoZWNrL2xpYnMvYWRhcHRlci5jOgorCSAgYWRhcHRlcjogYWRkIF9tYXNrZWRfc2Nhbl91aW50MzIKKwkgIEFkZCBhIHJlYXNvbmFibHkgb3B0aW1pemVkIG5ldyBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIoKSBmdW5jdGlvbgorCSAgdG8gc2NhbiB0aGUgYWRhcHRlciBmb3IgYSBwYXR0ZXJuIGFmdGVyIGFwcGx5aW5nIGEgbWFzay4KKwkgIEFkZCBzb21lIHVuaXQgdGVzdHMuCisJICBBUEk6IEdzdEFkYXB0ZXI6OmdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMigpCisJICBGaXhlcyAjNTgzMTg3CisKKzIwMDktMDUtMTkgMjI6MTM6MDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgorCSAgYWRhcHRlcjogbW9yZSBvcHRpbWlzYXRpb25zCisJICBSZW1vdmUgZHVwbGljYXRlIGNvcHkgY29kZSAoX3BlZWtfaW50byBhbmQgX2NvcHkpIGFuZCBtYWtlIGEgdW5pZmllZAorCSAgb3B0aW1pemVkIGNvcHkgZnVuY3Rpb24uCisKKzIwMDktMDUtMTkgMTc6MTI6NDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJICBjb25maWd1cmU6IHBhc3MgLVduby1wb3J0YWJpbGl0eSB0byBhdXRvbWFrZSB0byBzdXBwcmVzcyB3YXJuaW5ncworCSAgR05VIG1ha2UgaXMgcmVxdWlyZWQsIG5vIHBvaW50IHByZXRlbmRpbmcgb3RoZXJ3aXNlLgorCisyMDA5LTA1LTE4IDAxOjAwOjM2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGZvcm1hdC5oOgorCSAgZG9jczogbWVudGlvbiB0aGF0IEdTVF9GT1JNQVRfe1BFUkNFTlR8QlVGRkVSU30gYXJlIG5vdCBpbXBsZW1lbnRlZAorCisyMDA5LTA1LTE3IDEwOjQ2OjM5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGNsb2NrLmM6CisJKiBnc3QvZ3N0Y2xvY2suaDoKKwkgIGdzdGNsb2NrOiBGaXggQUJJIGJyZWFrYWdlIG9uIDMyIGJpdCBhcmNoaXRlY3R1cmVzCisJICBUaGUgcGFkZGluZyBvZiBHc3RDbG9jayBpcyBhIEdzdENsb2NrVGltZSBhbmQgbm90IGEKKwkgIGdwb2ludGVyLCBzbyBhZGRpbmcgYSBwb2ludGVyIHJlcXVpcmVzIHRoZSBwYWRkaW5nCisJICBzaXplIHRvIGJlIGNoYW5nZWQgZGVwZW5kaW5nIG9uIHRoZSBwb2ludGVyIHNpemUuCisJICBVc2UgYW4gdW5pb24gaW5zdGVhZC4KKwkgIEZpeGVzIGJ1ZyAjNTgyODc4LgorCisyMDA5LTA1LTE1IDE1OjI0OjQwIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0BlbWJlZGRlZC51ZmNnLmVkdS5icj4KKworCSogZ3N0L2dzdHZhbHVlLmg6CisJICBbZ3N0dmFsdWVdIGFkZHMgc2FmZXR5IHBhcmVudGhlc2lzIHRvIG1hY3JvcyBtaXNzaW5nIHRoZW0uCisKKzIwMDktMDUtMTUgMTQ6NDI6NDggLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQGVtYmVkZGVkLnVmY2cuZWR1LmJyPgorCisJKiBnc3QvZ3N0dXRpbHMuaDoKKwkgIFtnc3R1dGlsc10gQWRkcyBtb3JlIHNhZmV0eSB0byBHU1RfV1JJVEVfKiBhbmQgR1NUX1JFQURfIG1hY3Jvcy4KKwkgIEFkZHMgc2FmZXR5ICggKSB0byBwYXJhbWV0ZXJzIGluIF9HU1RfUFVUIGFuZCBfR1NUX0dFVCBtYWNyb3MuCisJICBGaXhlcyAjNTgyNzA4LgorCisyMDA5LTAzLTE5IDExOjM3OjEyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdGNsb2NrLmM6CisJKiBnc3QvZ3N0Y2xvY2suaDoKKwkgIGNsb2NrOiB1c2Ugc2VxbG9ja3MgdG8gcGFyYWxsZWxsaXplIHJlYWRlcnMKKworMjAwOS0wNC0xNiAxNTo1MzoyOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvYmVuY2htYXJrcy9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL2JlbmNobWFya3MvZ3N0Y2xvY2tzdHJlc3MuYzoKKwkgIHN0cmVzczogYWRkIGEgY2xvY2sgc3RyZXNzdGVzdAorCSAgQWRkIGEgc3RyZXNzdGVzdCBmb3IgZ3N0X2Nsb2NrX2dldF90aW1lKCkuCisKKzIwMDktMDUtMTUgMTE6MDA6NTMgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGRvY3MvZGVzaWduL01ha2VmaWxlLmFtOgorCSogZ3N0L01ha2VmaWxlLmFtOgorCSAgTWFrZWZpbGUuYW06IHVwZGF0ZSBmb3IgYWRkZWQvbW92ZWQvcmVtb3ZlZCBmaWxlcyB0aGF0IHdlcmVuJ3QgZGlzdC1lZC4KKworMjAwOS0wNS0xMiAxMToyOToyMSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBkb2NzL3JhbmRvbS9yZWxlYXNlOgorCSAgZG9jczogUmVsZWFzZSBzY3JpcHQgbW9kaWZpY2F0aW9ucworCisyMDA5LTA1LTE0IDIyOjExOjU3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmM6CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlcHJpdmF0ZS5oOgorCSAgY29udHJvbGxlcjogVXNlIG9yZGVyZWQgR1NlcXVlbmNlIGluc3RlYWQgb2YgR0xpc3QKKwkgIFRoaXMgbWFrZXMgbG9va3VwcyBhbmQgaW5zZXJ0aW9ucyBPKGxvZyBuKSBpbnN0ZWFkIG9mCisJICBhbHdheXMgTyhuKSBmb3IgaW5zZXJ0aW9ucyBhbmQgTyhuKSBpbiB3b3JzdCBjYXNlIGZvcgorCSAgbG9va3Vwcy4KKwkgIEZpeGVzIGJ1ZyAjNTgyNTY0LgorCisyMDA5LTA1LTE0IDEyOjMwOjIzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2Rlc2lnbi9kcmFmdC1naG9zdHBhZHMudHh0OgorCSogZG9jcy9kZXNpZ24vZHJhZnQtbGF0ZW5jeS50eHQ6CisJKiBkb2NzL2Rlc2lnbi9kcmFmdC1taXNzaW5nLXBsdWdpbnMudHh0OgorCSogZG9jcy9kZXNpZ24vZHJhZnQtc3RyZWFtLXN0YXR1cy50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LWxhdGVuY3kudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1taXNzaW5nLXBsdWdpbnMudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1zdHJlYW0tc3RhdHVzLnR4dDoKKwkgIGRvY3M6IHJlbmFtZSBhbmQgZGVsZXRlIHNvbWUgZGVzaWduIGRvY3MKKworMjAwOS0wNS0xNCAxMjozMDowNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRvb2xzL2dzdC1sYXVuY2guYzoKKwkgIGdzdC1sYXVuY2g6IFByaW50IHRoZSBwYXRoIHN0cmluZyBmb3IgbWVzc2FnZSBzb3VyY2VzCisJICBUaGlzIHJlZHVjZXMgY29uZnVzaW9uIGlmIHRoZSBtZXNzYWdlIHNvdXJjZSBpcyBhIHBhZAorCSAgYW5kIG9ubHkgInNyYyIgaXMgcHJpbnRlZCBhcyBzb3VyY2UuCisKKzIwMDktMDUtMTQgMTI6MjU6MjAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIGVsZW1lbnQ6IFNldCB0aGUgb3JpZ2luYXRpbmcgcGFkIGFzIG1lc3NhZ2Ugc291cmNlIGluIGdzdF9lbGVtZW50X2ZvdW5kX3RhZ3NfZm9yX3BhZCAoKQorCSAgRml4ZXMgYnVnICM1ODI1ODguCisKKzIwMDktMDUtMTQgMTE6MzY6MjggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSogZ3N0L2dzdGVsZW1lbnQuaDoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgZWxlbWVudDogYWRkIGdzdF9lbGVtZW50X2xvc3Rfc3RhdGVfZnVsbCgpCisJICBBZGQgYSBnc3RfZWxlbWVudF9sb3N0X3N0YXRlX2Z1bGwoKSB3aXRoIGFuIGV4dHJhIGFyZ3VtZW50IHRvIGNvbnRyb2wKKwkgIGRpc3RyaWJ1dGlvbiBvZiBhIG5ldyBiYXNlX3RpbWUuIFdlIHdpbGwgbmVlZCB0aGlzIGZvciBmbHVzaGluZyBzdGVwCisJICBvcGVyYXRpb25zLgorCSAgQVBJOiBHc3RFbGVtZW50Ojpnc3RfZWxlbWVudF9sb3N0X3N0YXRlX2Z1bGwoKQorCisyMDA5LTA1LTEzIDIzOjUyOjAyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKKwkgIGFkYXB0ZXI6IGRvbid0IHVzZSByZWFsbG9jLCBpdCBkb2VzIGEgbWVtY3B5CisJICBEb24ndCB1c2UgcmVhbGxvYyB0byBncm93IHRoZSBzY3JhdGNoIGFyZWEgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRoZSBtZW1jcHkgdGhlCisJICBvbGQgdXNlbGVzcyBkYXRhIGludG8gdGhlIG5ldyBhcmVhIGJlZm9yZSB3ZSB3cml0ZSBvdXIgbmV3IHN0dWZmIGluIGl0LgorCisyMDA5LTA1LTEzIDIzOjM4OjA4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2Rlc2lnbi9wYXJ0LXRyaWNrbW9kZXMudHh0OgorCSAgZG9jczogdXBkYXRlIHRyaWNrbW9kZSBkb2N1bWVudAorCisyMDA5LTA1LTEzIDIyOjUxOjE4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKKwkgIGFkYXB0ZXI6IHVzZSBnX3JlYWxsb2MgZm9yIHJlc2l6aW5nIHRoZSBidWZmZXIKKwkgIFVzZSBnX3JlYWxsb2MgZm9yIHJlc2l6aW5nIHRoZSBpbnRlcm5hbCBidWZmZXIgaW5zdGVhZCBvZiBhCisJICBsZXNzIGZhbmN5IF9mcmVlL19tYWxsb2MgcGFpci4KKworMjAwOS0wNS0xMyAyMTozNToyMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmg6CisJICBhZGFwdGVyOiBtb3ZlIG5ldyBtZW1iZXIgdG8gcHJpdmF0ZSBzdHJ1Y3QKKwkgIE1vdmUgdGhlIG5ldyBtZW1iZXJzIHRvIGEgcHJpdmF0ZSBzdHJ1Y3QgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGVub3VnaCBwYWRkaW5nCisJICBhbnltb3JlIG9uIDMyLWJpdHMgcGxhdGZvcm1zLgorCisyMDA5LTA1LTEzIDE4OjUwOjIzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKKwkgIGFkYXB0ZXI6IHVwZGF0ZSBzb21lIGRvY3MKKworMjAwOS0wNS0xMyAxNzowOTozMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svbGlicy9hZGFwdGVyLmM6CisJICB0ZXN0czogYWRkIGFub3RoZXIgdGVzdCBmb3IgYWRhcHRlciB0aW1lc3RhbXBzCisKKzIwMDktMDUtMTMgMTY6NDg6MzggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2NoZWNrL2xpYnMvYWRhcHRlci5jOgorCSAgdGVzdHM6IGFkZCBuZXcgdGltZXN0YW1wIHVuaXQgdGVzdAorCisyMDA5LTA1LTEzIDE2OjI2OjAwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6CisJICBkZWZzOiBhZGQgbmV3IHN5bWJvbAorCisyMDA5LTA1LTEzIDE2OjA5OjIwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuaDoKKwkgIGFkYXB0ZXI6IGFkZCBtZXRob2QgdG8ga2VlcCB0cmFjayBvZiB0aW1lc3RhbXBzCisJICBLZWVwIHRyYWNrIG9mIHRoZSB0aW1lc3RhbXAgYW5kIG9mZnNldCBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgaGVhZCBvZiB0aGUKKwkgIGFkYXB0ZXIuCisJICBBUEk6IEdzdEFkYXB0ZXI6OmdzdF9hZGFwdGVyX3ByZXZfdGltZXN0YW1wKCkKKworMjAwOS0wNS0xMyAxNjoyMDoyNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuaDoKKwkgIGFkYXB0ZXI6IHNtYWxsIGNsZWFudXBzCisKKzIwMDktMDUtMTMgMTE6MDM6MjcgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKKwkgIGRlYnVndXRpbHM6IHNob3cgbW9yZSBwYWQtZGV0YWlscworCSAgU2hvdyBwYWQgYWN0aXZhdGlvbiBtb2RlIGFuZCBwYWQtZmxhZ3MgaW5zaWRlIHRoZSBwYWQuIFdyaXRlIGRvd24gc29tZSBpZGVhcworCSAgYWJvdXQgaG93IHdlIGNvdWxkIGltcHJvdmUgdGhlIGNhcHMgbGF5b3V0LgorCisyMDA5LTA1LTEzIDAwOjI5OjU3ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6CisJICBkZWJ1Z3V0aWxzOiBsYXlvdXQgaW1wcm92ZW1lbnQKKwkgIGRvdCBkb2VzIG5vdCB0YWtlIHRoZSBoZWFkL3RhaWwgbGFiZWxzIGludG8gYWNjb3VudC4gRm9yIHVuZml4ZWQgY2FwcyB0aGV5IGdldAorCSAgcXVpdGUgbGFyZ2UuIERvdWJsZSB0aGUgcGFkZGluZyB0byBtYWtlIGl0IHNvcnQgb2YgcmVhZGFibGUgaW4gbW9yZSBjYXNlcy4gQWxzbworCSAgbWFrZSBub3JtYWwgZm9udCBiaWdnZXIgYW5kIGNhcHMtbGFiZWwgZm9udCBzbWFsbGVyIHRvIGluY3JlYXNlIG91ciBsdWNrLgorCisyMDA5LTA1LTEyIDIxOjAwOjE1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogTWFrZWZpbGUuYW06CisJICBjaGVja3M6IGNoZWNrIGZvciBlbnVtIHR5cGVzIG5vdCBjbGFzc19yZWYnZWQgaW4gZ3N0X2luaXQoKSBpbiAnbWFrZSBjaGVjaycKKworMjAwOS0wNS0xMiAyMDo1ODozMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3QuYzoKKwkgIEluaXRpYWxpc2Ugc29tZSBtb3JlIHR5cGVzIGluIGdzdF9pbml0KCksIGVzcC4gdGhlIG5ldyBlbnVtIHR5cGVzCisJICBQb3NzaWJseSBmaXhlcyBHT2JqZWN0IGNsYXNzIGNyZWF0aW9uL3VucmVmIHJhY2UgY29uZGl0aW9ucyB3aGVuCisJICBjcmVhdGluZyB0aGUgbGFzdC1tZXNzYWdlIHN0cmluZyBpbiBmYWtlc2luayBmb3IgZXZlbnRzIHdpdGgKKwkgIHN0cnVjdHVyZXMgdGhhdCBoYXZlIGZpZWxkcyB3aXRoIHRoZXNlIGVudW0gdHlwZXMuCisKKzIwMDktMDUtMTIgMjA6NTY6MDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKKwkgIHN5c3RlbWNsb2NrOiByZW1vdmUgZHVwbGljYXRlIF9nZXRfdHlwZSgpIGZ1bmN0aW9uIGZvciBHc3RDbG9ja1R5cGUKKwkgIFJlbW92ZSB0aGUgc3RhdGljIGdzdF9jbG9ja190eXBlX2dldF90eXBlKCkgZnVuY3Rpb24gaW4gdGhlCisJICBzeXN0ZW1jbG9jayBjb2RlIGluIGZhdm91ciBvZiB0aGUgcHVibGljIG9uZSBpbiBnc3RlbnVtdHlwZXMuYy4KKworMjAwOS0wNC0yMiAxMDo1MzozNyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKKwkgIGdob3N0cGFkOiByZW1vdmUgZGVwcmVjYXRlZCBBUEkKKwkgIF9pbnRlcm5hbF9saW5rX2Z1bmN0aW9uKCkgaXMgZGVwcmVjYXRlZCBhbmQgX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZnVuY3Rpb24oKQorCSAgaXMgYWxyZWFkeSBwcm92aWRlZC4KKworMjAwOS0wNC0yMSAxMTozMzo0MyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvcGFyc2UvZ3JhbW1hci55OgorCSAgcGFyc2UtbGF1bmNoOiBhbGxvdyBzcGVjaWZ5aW5nIEdzdEVsZW1lbnQgcHJvcGVydGllcyB2aWEgZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uCisJICBJZiBkZXNlcmlhbGl6aW5nIGEgcHJvcGVydHkgZmFpbHMsIGNoZWNrIGlmIHRoZSB2YWx1ZSB0eXBlIGlzIGEgc3RyaW5nIGFuZCBpZiBzbworCSAgYXR0ZW1wdCB0byBjcmVhdGUgYSBiaW4gZnJvbSB0aGUgc3RyaW5nIHZhbHVlLiBUaGlzIGFsbG93cyB0byBlLmcuIHNwZWNpZnkKKwkgIGF1ZGlvLXNpbmsvdmlkZW8tc2luayBmb3IgcGxheWJpbiBvbiBnc3QtbGF1bmNoIGNvbW1hbmRsaW5lLgorCisyMDA5LTA1LTEyIDE3OjI5OjE1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlcmxpc3QudHh0OgorCSAgZG9jczogYWRkIHNvbWUgZG9jcyBhYm91dCBidWZmZXIgbGlzdHMKKworMjAwOS0wNS0xMiAxNjoxODo0OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKKwkqIGdzdC9nc3RidWZmZXJsaXN0Lmg6CisJICBidWZmZXJsaXN0OiBtYWtlIG9iamVjdHMgb3BhcXVlCisKKzIwMDktMDUtMTIgMTU6MzM6MjUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXJsaXN0LmM6CisJICBidWZmZXJsaXN0OiBmaXggYSBjb21tZW50CisKKzIwMDktMDUtMTIgMTM6MTA6NTUgKzAyMDAgIEpvbmFzIEhvbG1iZXJnIDxqb25hcy5ob2xtYmVyZyBhdCBheGlzLmNvbT4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RwYWQuaDoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgYnVmZmVybGlzdDogaG9vayB1cCB0aGUgcGFkIGZ1bmN0aW9ucworCSAgUmV1c2UgYnVmZmVyIGNvZGUgZm9yIGJ1ZmZlcmxpc3RzLiBOb3Qgc3VyZSBpZiB0aGlzIG1lYXN1cmFibHkgaW1wYWN0cyBwZXJmb3JtYW5jZQorCSAgZm9yIHRoZSBzaW1wbGUgYnVmZmVyIGNhc2UsIGlmIGl0IGRvZXMgYWZ0ZXIgZG9pbmcgc29tZSBiZW5jaG1hcmtzLCB3ZSBjYW4KKwkgIGRlY291cGxlIGl0IGxhdGVyLgorCSAgRml4ZXMgIzU3MjI4NQorCisyMDA5LTA1LTEyIDEyOjA4OjU2ICswMjAwICBKb25hcyBIb2xtYmVyZyA8am9uYXMuaG9sbWJlcmcgYXQgYXhpcy5jb20+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6CisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L01ha2VmaWxlLmFtOgorCSogZ3N0L2dzdC5jOgorCSogZ3N0L2dzdC5oOgorCSogZ3N0L2dzdF9wcml2YXRlLmg6CisJKiBnc3QvZ3N0aW5mby5jOgorCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9jaGVjay9nc3QvLmdpdGlnbm9yZToKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXJsaXN0LmM6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGJ1ZmZlcmxpc3Q6IGFkZCBkb2NzL2J1aWxkL2RlYnVnL3VuaXR0ZXN0CisJICBTZWUgIzU3MjI4NQorCisyMDA5LTA1LTEyIDExOjUxOjM3ICswMjAwICBKb25hcyBIb2xtYmVyZyA8am9uYXMuaG9sbWJlcmcgYXQgYXhpcy5jb20+CisKKwkqIGdzdC9nc3RidWZmZXJsaXN0LmM6CisJKiBnc3QvZ3N0YnVmZmVybGlzdC5oOgorCSAgYnVmZmVybGlzdDogYWRkIGJ1ZmZlcmxpc3QgY29kZQorCSAgQnVmZmVyIGxpc3RzIGFyZSBhIG1lYW5zIHRvIG1hbmFnZSBkaXNqb2ludCBidWZmZXJzIGFzIG9uZSBidWZmZXIuIEl0J3MgYWxzbworCSAgcG9zc2libGUgdG8gcHV0IG1hbnkgb2YgdGhvc2UgYnVmZmVycyBpbnRvIGEgbGlzdC4KKwkgIFRoZSBpZGVhIGlzIHRoYXQgd2hlbiBzdXBwb3J0IGlzIGFkZGVkIHRvIHZhcmlvdXMgZWxlbWVudHMsIHdlIHdpbGwgYmUgYWJsZSB0bworCSAgbW9yZSBlZmZpY2llbnRseSBzbGljZSBhbmQgZGljZSBidWZmZXJzLCByZWR1Y2UgdGhlIGFtb3VudCBvZiBtZW1jcHkgYW5kIGFsc28KKwkgIHJlZHVjZSBkYXRhIHBhc3Npbmcgb3ZlcmhlYWQuCisJICBUaGUgaW1wbGVtZW50YXRpb24gaXMga2VwdCBzaW1wbGUgb24gcHVycG9zZSwgcmV1c2luZyBhbGwgb2YgdGhlIG1lbW9yeQorCSAgbWFuYWdlbWVudCBmZWF0dXJlcyB3ZSBoYXZlIGZvciBtaW5pb2JqZWN0cyBhbmQgYnVmZmVycy4KKwkgIEFjY2VzcyB0byB0aGUgYnVmZmVybGlzdCBvYmplY3QgaXMgZG9uZSB3aXRoIGFuIGl0ZXJhdG9yLCB3aGljaCBhbGxvd3MgZm9yCisJICBlZmZpY2llbnQgaXRlcmF0aW9uIGFuZCBtb2RpZmljYXRpb24gb2YgdGhlIGxpc3QuCisJICBTZWUgIzU3MjI4NQorCisyMDA5LTA1LTExIDA3OjQ5OjM0ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJICBnc3RidWZmZXI6IGNvcHkgbmV3IGJ1ZmZlciBmbGFncyB3aGVuIGNvcHlpbmcgbWV0YWRhdGEuCisKKzIwMDktMDQtMjcgMTA6MTM6MDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgorCSogdGVzdHMvY2hlY2svbGlicy9hZGFwdGVyLmM6CisJICBhZGFwdGVyOiBvcHRpbWl6ZSB0YWtpbmcgdGhlIGhlYWRidWZmZXIKKwkgIFdoZW4gYSBhcmUgcmVxdWVzdGVkIHRvIHRha2UgYSBidWZmZXIgZnJvbSB0aGUgYWRhcHRlciB0aGF0IGlzIGV4YWN0bHkgdGhlCisJICBoZWFkYnVmZmVyLCBkb24ndCBtYWtlIGEgc3ViYnVmZmVyIG9mIGl0IGJ1dCByZXR1cm4gdGhhdCBoZWFkIGJ1ZmZlci4KKwkgIEFkZCBhIHVuaXQtdGVzdCBmb3IgdGhpcyBuZXcgb3B0aW1pc2F0aW9uLgorCisyMDA5LTA1LTA1IDE3OjQxOjI0ICswMjAwICBBcm5vdXQgVmFuZGVjYXBwZWxsZSA8YXJub3V0QG1pbmQuYmU+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6CisJICB0eXBlZmluZDogZG9uJ3QgbGVhayB0aGUgZm9yY2UtY2FwcyBwcm9wZXJ0eQorCSAgRml4ZXMgIzU4MTMyMQorCisyMDA5LTA0LTI4IDE5OjIwOjMxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSAgZWxlbWVudDogZml4IHBvc3Rpbmcgb2YgYXN5bmMtc3RhcnQgbWVzc2FnZXMKKwkgIFdoZW4gYW4gZWxlbWVudCBsb3N0IGl0cyBzdGF0ZSBidXQgd2FzIGJ1c3kgZG9pbmcgYSBzdGF0ZSBjaGFuZ2UsIHN0aWxsIHBvc3QgdGhlCisJICBhc3luYy1zdGFydCBtZXNzYWdlIHdpdGggdGhlIGJhc2VfdGltZSByZXNldCBmbGFnIG9yIGVsc2Ugd2UgbWlnaHQgZW5kIHVwIHdpdGgKKwkgIGFuIG9sZCBiYXNlX3RpbWUuCisJICB0aGlzIGNhbiBoYXBwZW4gd2hlbiBhIHNpbmsgaXMgZ29pbiBhc3luYyB0byBwYXVzZWQgYW5kIHRoZW4gYSBmbHVzaGluZyBzZWVrIGlzCisJICBwZXJmb3JtZWQuIFRoaXMgd291bGQgY2F1c2UgdGhlIGJhc2VfdGltZSB0byByZW1haW4gdW5tb2RpZmllZCBiZWNhdXNlIHRoZQorCSAgYXN5bmMtc3RhcnQgbWVzc2FnZSB3YXMgbm90IHNlbnQuCisKKzIwMDktMDUtMTAgMTc6Mjg6MzYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIEFkZCBuZXcgZnVuY3Rpb25zIHRvIHRoZSB3aW4zMiBleHBvcnRzCisKKzIwMDktMDUtMTAgMTE6MTc6MjcgKzAyMDAgIE1hcmMtQW5kcmUgTHVyZWF1IDxtYXJjYW5kcmUubHVyZWF1QGdtYWlsLmNvbT4KKworCSogYXV0b2dlbi5zaDoKKwkgIFJ1biBsaWJ0b29saXplIGJlZm9yZSBhY2xvY2FsCisJICBUaGlzIHVuYnJlYWtzIHRoZSBidWlsZCBpbiBzb21lIGNhc2VzLiBGaXhlcyBidWcgIzU4MjAyMQorCisyMDA5LTA1LTA3IDE2OjM3OjM3ICswMjAwICBKb3PDqSBBbGJ1cnF1ZXJxdWUgPGphYWxidXJxdUBzdm4uZ25vbWUub3JnPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdHBsdWdpbi5jOgorCSogZ3N0L2dzdHBsdWdpbi5oOgorCSAgQVBJOiBBZGQgZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWNfZnVsbCgpCisJICBUaGlzIGlzIG1haW5seSB1c2VmdWwgZm9yIGJpbmRpbmdzIHRoYXQgbmVlZCB0byBwcm92aWRlCisJICBzb21lIGFkZGl0aW9uYWwgdXNlciBkYXRhIHRvIHRoZSByZWdpc3RyYXRpb24gZnVuY3Rpb24uCisJICBGaXhlcyBidWcgIzU0NTc4Ny4KKworMjAwOS0wNS0wNyAxNjowMTo1NyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgorCSAgZmlsZXNyYzogSW1wcm92ZSBkZWJ1Z2dpbmcgYSBiaXQgb24gaW52YWxpZCBVUklzCisKKzIwMDktMDUtMDcgMTA6MzY6NTAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgZG9jczogQWRkIG5ldyBmdW5jdGlvbnMgdG8gdGhlIGRvY3MKKworMjAwOS0wNS0wNyAwOTozMTowMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R0YWdsaXN0LmM6CisJKiBnc3QvZ3N0dGFnbGlzdC5oOgorCSogZ3N0L2dzdHRhZ3NldHRlci5jOgorCSogZ3N0L2dzdHRhZ3NldHRlci5oOgorCSAgdGFnczogQVBJOiBBZGQgZnVuY3Rpb25zIHRvIGFkZCBzaW5nbGUgdGFncyB0byBHc3RUYWdMaXN0IG9yIEdzdFRhZ1NldHRlcgorCSAgVGhlIG5ldyBmdW5jdGlvbnMgYXJlIGdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsdWUoKQorCSAgYW5kIGdzdF90YWdfbGlzdF9hZGRfdmFsdWUoKSkuIFRoaXMgZml4ZXMgYnVnICM1ODExOTguCisKKzIwMDktMDUtMDcgMDk6Mjg6MTUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dXJpLmM6CisJICBHc3RVUklIYW5kbGVyOiBVc2UgZ2V0X3R5cGVfZnVsbCgpIHZtZXRob2QgaWYgc3BlY2lmaWVkIGluc3RlYWQgb2YgZ2V0X3R5cGUoKQorCSAgVGhpcyBmaXhlcyBidWcgIzU4MTI4MSBhbmQgbWFrZXMgaXQgZWFzaWVyIGZvciBiaW5kaW5ncyB0bworCSAgaW1wbGVtZW50IEdzdFVSSUhhbmRsZXJzLiBnZXRfcHJvdG9jb2xzX2Z1bGwoKSB3YXMgYWxyZWFkeSB1c2VkCisJICBsaWtlIHRoaXMuCisKKzIwMDktMDUtMTIgMDE6NDg6MzYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmUucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kYS5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9lcy5wbzoKKwkqIHBvL2ZpLnBvOgorCSogcG8vZnIucG86CisJKiBwby9odS5wbzoKKwkqIHBvL2lkLnBvOgorCSogcG8vaXQucG86CisJKiBwby9qYS5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9wbC5wbzoKKwkqIHBvL3B0X0JSLnBvOgorCSogcG8vcnUucG86CisJKiBwby9ydy5wbzoKKwkqIHBvL3NrLnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkgIHBvOiB1cGRhdGUgLnBvIGZpbGVzIGZvciBuZXcgc3RyaW5ncyBmcm9tIGNvbnRhaW5lci1mb3JtYXQgdGFnCisKKzIwMDktMDUtMTIgMDE6MzA6MTMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL3JhbmRvbS9yZWxlYXNlOgorCSAgZG9jczogc21hbGwgdXBkYXRlIHRvIHJlbGVhc2UgZG9jcworCisyMDA5LTA1LTEyIDAxOjEzOjAyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogY29tbW9uOgorCSogY29uZmlndXJlLmFjOgorCSAgY29uZmlndXJlOiByZW5hbWUgQ1ZTIC0+IGdpdCBpbiBhIGNvdXBsZSBvZiBwbGFjZXMKKworMjAwOS0wNS0xMiAwMDo0Nzo0NiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkgIGNvbmZpZ3VyZTogYnVtcCB0aGUgR0xpYiByZXF1aXJlbWVudCB0byBHTGliID49IDIuMTYKKwkgIGFzIHBlciB0aGUgTmV3IFJlZ2ltZSAoc2VlIHdpa2kpLgorCisyMDA5LTA1LTEyIDAwOjA5OjU4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogY29uZmlndXJlLmFjOgorCSogZ3N0L01ha2VmaWxlLmFtOgorCSogZ3N0L2dzdC5jOgorCSogZ3N0L2dzdF9wcml2YXRlLmg6CisJKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzoKKwkgIHhtbHJlZ2lzdHJ5OiByZW1vdmUgdGhlIG9sZCB4bWwgcmVnaXN0cnkKKwkgIE5vIHBvaW50IGluIGtlZXBpbmcgaXQgYXJvdW5kIHJlYWxseS4gRml4ZXMgIzU3NzkyNi4KKworMjAwOS0wNS0wNyAxNjowODo0MyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSogZ3N0L2dzdHRhZ2xpc3QuaDoKKwkgIHRhZ3M6IGFkZCBhIHRhZyBmb3IgdGhlIGNvbnRhaW5lciBmb3JtYXQKKwkgIEFQSTogYWRkIEdTVF9UQUdfQ09OVEFJTkVSX0ZPUk1BVAorCisyMDA5LTA1LTA4IDE2OjI4OjAzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJpbi5jOgorCSAgYmluOiBmaXggZGVidWcgbWVzc2FnZQorCSAgTWFrZSB0aGUgZGVidWcgbWVzc2FnZSBzaG93IHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgKHRoZSBtZXNzYWdlCisJICByZXBsYWNlZCBoZXJlIGlzIG5vdCBuZWNlc3NhcmlseSBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoZSBvbmUgdGhhdAorCSAgcmVwbGFjZXMgaXQpLgorCisyMDA5LTA1LTEyIDAwOjM0OjQ0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dGFzay5jOgorCSAgR3N0VGFzazogZml4IGNvbXBpbGF0aW9uCisKKzIwMDktMDQtMjQgMTk6MzI6MzMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2V4YW1wbGVzL3N0cmVhbXMvcnRwb29sLXRlc3QuYzoKKwkgIHRlc3RzOiBzZXQgdGhlIGxhdGVuY3ktdGltZSB0byBzb21ldGhpbmcgbG93CisKKzIwMDktMDQtMjQgMTM6NTU6MTMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2V4YW1wbGVzL3N0cmVhbXMvcnRwb29sLXRlc3QuYzoKKwkqIHRlc3RzL2V4YW1wbGVzL3N0cmVhbXMvdGVzdHJ0cG9vbC5jOgorCSAgdGVzdHM6IGltcHJvdmUgdGhlIGV4YW1wbGUKKworMjAwOS0wNC0yNCAxMjozNTowOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3R0YXNrLmM6CisJKiBnc3QvZ3N0dGFza3Bvb2wuYzoKKwkqIGdzdC9nc3R0YXNrcG9vbC5oOgorCSogdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy8uZ2l0aWdub3JlOgorCSogdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy90ZXN0cnRwb29sLmM6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIFRhc2tQb29sOiByZW1vdmUgX3NldF9mdW5jKCkKKwkgIFJlbW92ZSB0aGUgc3RhdGljIGZ1bmN0aW9uIHNldCBvbiB0aGUgVGFza1Bvb2wgYmVmb3JlIF9wcmVwYXJlKCkgaXMgY2FsbGVkIGFuZAorCSAgYWxsb3cgZm9yIGFzc2lnbmluZyBhIGZ1bmN0aW9uIHRvIGEgVGFzayB3aGVuIHdlIF9wdXNoKCkuCisJICBVcGRhdGUgdGhlIGV4YW1wbGVzCisKKzIwMDktMDQtMjMgMTk6NDI6NDcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHRlc3RzL2V4YW1wbGVzL3N0cmVhbXMvTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9leGFtcGxlcy9zdHJlYW1zL3J0cG9vbC10ZXN0LmM6CisJKiB0ZXN0cy9leGFtcGxlcy9zdHJlYW1zL3Rlc3RydHBvb2wuYzoKKwkqIHRlc3RzL2V4YW1wbGVzL3N0cmVhbXMvdGVzdHJ0cG9vbC5oOgorCSAgdGVzdHM6IGFkZCBleGFtcGxlIG9mIGN1c3RvbSB0YXNrcG9vbHMKKwkgIEFkZCBhbiBleGFtcGxlIHRvIGRlbW9uc3RyYXRlIHRoZSB1c2Ugb2YgYSBjdXN0b20gdGFza3Bvb2wgYW5kIGhvdyB0byBjb25maWd1cmUKKwkgIGl0IG9uIHRoZSB0YXNrLiBDdXJyZW50bHkgdGhlIHRhc2twb29sIGRvZXMgbm90IGRvIG11Y2ggeWV0IGJ1dCBpdCdsbCBjcmVhdGUKKwkgIHNvbWUgY3VzdG9tIHRocmVhZHMgbGF0ZXIgb24uCisKKzIwMDktMDQtMjMgMTk6NDE6MzYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R0YXNrcG9vbC5oOgorCSAgdGFza3Bvb2w6IGZpeCBhIGNvbW1lbnQKKworMjAwOS0wNC0yMyAxOTo0MTowMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy9zdHJlYW0tc3RhdHVzLmM6CisJICB0ZXN0czogY2xlYW51cCBzb21lIGNvZGUKKworMjAwOS0wNC0yMyAxNzo0ODowOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOgorCSAgUGFkOiBwb3N0IFNUUkVBTV9TVEFUVVNfVFlQRV9DUkVBVEUKKwkgIFBvc3QgYSBzdHJlYW0tc3RhdHVzIG1lc3NhZ2UgaW5kaWNhdGluZyB0aGF0IGEgbmV3IHRhc2sgd2FzIGNyZWF0ZWQgc28gdGhhdCB0aGUKKwkgIGFwcGxpY2F0aW9uIGhhcyBhIGNoYW5jZSB0byBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHRhc2suCisJICBGaXggdW5pdCB0ZXN0IHRvIHRha2UgaW50byBhY2NvdW50IHRoZSBuZXcgcmVmIG9mIHRoZSBtZXNzYWdlLgorCisyMDA5LTA0LTIzIDE3OjI0OjU4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGRlZnM6IGFkZCBuZXcgdGFzayBtZXRob2RzCisKKzIwMDktMDQtMjMgMTc6MTk6MTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0dGFzay5jOgorCSogZ3N0L2dzdHRhc2suaDoKKwkgIEdzdFRhc2s6IGFkZCBtZXRob2RzIGZvciBjb25maWd1cmluZyB0aGUgcG9vbAorCSAgQWRkIGdldHRlciBhbmQgc2V0dGVyIGZvciBjb25maWd1cmluZyB0aGUgR3N0VGFza1Bvb2wgdG8gdXNlIGZvciBhIEdzdFRhc2suCisKKzIwMDktMDQtMjMgMTc6MDU6MjEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R0YXNrLmM6CisJICBUYXNrOiByZW1lbWJlciBwb29sCisJICBSZW1lbWJlciB0aGUgcG9vbCB3ZSBjdXJyZW50bHkgaGF2ZSBvdXIgdGFzayBydW5uaW5nIHNvIHRoYXQgd2UgY2FuIHVzZSBpdCB0bworCSAgam9pbiB0aGUgdGFzayBsYXRlciBvbi4KKwkgIEZpeCBhIGxlYWsgb2YgdGhlIHRhc2twb29sLgorCisyMDA5LTA0LTIzIDE2OjUzOjM0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGRlZnM6IHVwZGF0ZSAuZGVmcyBmaWxlIHdpdGggdGFza3Bvb2wgbWV0aG9kcworCisyMDA5LTA0LTIzIDE2OjUzOjE0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dGFzay5jOgorCSAgdGFzazogZml4IGRlYWRsb2NrIGR1ZSB0byB0eXBvCisKKzIwMDktMDUtMTIgMDA6MjU6MTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R0YXNrLmM6CisJKiBnc3QvZ3N0dGFzay5oOgorCSAgR3N0VGFzazogdXNlIEdzdFRhc2tQb29sIGZvciBtYW5hZ2luZyB0aHJlYWRzCisJICBVc2UgdGhlIG5ldyBHc3RUYXNrUG9vbCB0byBoYW5kbGUgc3RyZWFtaW5nIHRocmVhZHMuCisKKzIwMDktMDQtMjMgMTY6MDA6NTYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0dGFza3Bvb2wuYzoKKwkqIGdzdC9nc3R0YXNrcG9vbC5oOgorCSAgdGFza3Bvb2w6IGZpeCBkb2NzLCBtYWtlIHB1c2gvam9pbiBnZW5lcmljCisJICBGaXggc29tZSBtb3JlIGRvY3MuCisJICBNYWtlIF9wdXNoKCkgcmV0dXJuIGEgZ2VuZXJpYyBpZCAodGhpcyBjYW4gYmUgc29tZXRoaW5nIGVsc2UgdGhhbiBhIEdUaHJlYWQgaW4KKwkgIHNvbWUgY2FzZXMpIGFuZCBtYWtlIF9qb2luKCkgdXNlIHRoYXQgZ2VuZXJpYyBpZC4KKworMjAwOS0wNC0yMyAxNTo0NDoxMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvTWFrZWZpbGUuYW06CisJKiBnc3QvZ3N0Lmg6CisJKiBnc3QvZ3N0dGFza3Bvb2wuYzoKKwkqIGdzdC9nc3R0YXNrcG9vbC5oOgorCSAgdGFza3Bvb2w6IGFkZCBuZXcgb2JqZWN0IHRvIG1hbmFnZSB0aHJlYWRzCisJICBBZGQgYSBuZXcgb2JqZWN0IEdzdFRhc2tQb29sIHRvIG1hbmFnZSB0aGUgc3RyZWFtaW5nIHRocmVhZHMuCisJICBUaGlzIHdpbGwgYWxsb3cgdXMgdG8gY3JlYXRlIGFuZCB1c2UgY3VzdG9tIGNvbmZpZ3VyZWQgdGhyZWFkcy4KKworMjAwOS0wNC0yMiAxMjowNDozNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy9zdHJlYW0tc3RhdHVzLmM6CisJICBleGFtcGxlczogc2V0IGJ1cyBoYW5kbGVyIGJlZm9yZSBzdGF0ZSBjaGFuZ2UKKwkgIFdlIG5lZWQgdG8gc2V0IHRoZSBidXMgaGFuZGxlciBiZWZvcmUgc3RhcnRpbmcgdGhlIHBpcGVsaW5lIG9yIHdlIG1pZ2h0IGp1c3QKKwkgIG1pc3MgdGhlIG1lc3NhZ2Ugd2UgYXJlIGxvb2tpbmcgZm9yLgorCisyMDA5LTA0LTIyIDEwOjE2OjI2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJKiB0ZXN0cy9leGFtcGxlcy9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL2V4YW1wbGVzL3N0cmVhbXMvLmdpdGlnbm9yZToKKwkqIHRlc3RzL2V4YW1wbGVzL3N0cmVhbXMvTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9leGFtcGxlcy9zdHJlYW1zL3N0cmVhbS1zdGF0dXMuYzoKKwkgIHRlc3RzOiBhZGQgZXhhbXBsZSBhcHAgZm9yIHN0cmVhbS1zdGF0dXMKKwkgIEFkZCBhbiBleGFtcGxlIGFwcGxpY2F0aW9uIHRoYXQgYWRqdXN0cyB0aGUgdGhyZWFkIHByaW9yaXR5IG9mIGEgdGFzayB1c2luZyB0aGUKKwkgIHN0cmVhbS1zdGF0dXMgbWVzc2FnZXMuCisKKzIwMDktMDQtMjEgMTk6MTU6NDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0dGFzay5jOgorCSogZ3N0L2dzdHRhc2suaDoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgVGFzazogYWRkIG1ldGhvZCB0byBzZXQgdGhlIHByaW9yaXR5CisJICBBZGQgYSBtZXRob2QgdG8gY29uZmlndXJlIGEgcHJpb3JpdHkgZm9yIHRoZSB0aHJlYWRzIHVzZWQgYnkgR3N0VGFzay4KKworMjAwOS0wNC0yMSAxNjozMDozNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1lc3NhZ2UuYzoKKwkgIHRlc3RzOiBhZGQgYSB1bml0LXRlc3QgZm9yIHRoZSBzdHJlYW0tc3RhdHVzCisJICBBZGQgYSB1bml0IHRlc3QgZm9yIHRoZSBTVFJFQU1fU1RBVFVTIG1lc3NhZ2VzLgorCisyMDA5LTA1LTEyIDAwOjA1OjEyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0dGFzay5jOgorCSogZ3N0L2dzdHRhc2suaDoKKwkgIEdzdFRhc2s6IGltcHJvdmUgZG9jdW1lbnRhdGlvbgorCSAgSW1wcm92ZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGNhbGxiYWNrcy4KKworMjAwOS0wNC0yMSAxNToyNToxMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOgorCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL2NsZWFudXAuYzoKKwkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmM6CisJICB0ZXN0czogZml4IHVuaXQtdGVzdHMgZm9yIG5ldyBzdHJlYW0tc3RhdHVzCisJICBGaXggdGhlIHVuaXQtdGVzdHMgc28gdGhhdCB0aGV5IGRvbid0IGZhaWwgb24gdGhlIG5ldyBzdHJlYW0tc3RhdHVzIG1lc3NhZ2VzCisJICB0aGF0IGFyZSBlbWl0ZWQgbm93LgorCisyMDA5LTA0LTIxIDE0OjQ2OjI5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBHc3RQYWQ6IGluc3RhbGwgdGhyZWFkIGNhbGxiYWNrcyBvZiB0aGUgdGFzaworCSAgSW5zdGFsbCB0aHJlYWQgc3RhdHVzIGNhbGxiYWNrcyBvbiB0aGUgdGFzayBvYmplY3Qgb2YgYSBwYWQgYW5kIHBvc3QKKwkgIFNUUkVBTV9TVEFUVVMgbWVzc2FnZXMuCisKKzIwMDktMDQtMjIgMTA6MTQ6NDYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RtZXNzYWdlLmM6CisJICBtZXNzYWdlOiBjbGFyaWZ5IHNvbWUgZG9jcworCisyMDA5LTA0LTIxIDE0OjQyOjA1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dGFzay5jOgorCSAgVGFzazogY2FsbCBsZWF2ZV90aHJlYWQgYmVmb3JlIHNpZ25hbGluZworCSAgQ2FsbCB0aGUgbGVhdmVfdGhyZWFkIGNhbGxiYWNrIGJlZm9yZSB3ZSBzaWduYWwgdGhlIHRocmVhZCBwZXJmb3JtaW5nIHRoZSBfam9pbgorCSAgc28gdGhhdCB3ZSBjYW4gYmUgc3VyZSB0aGF0IHRoZSBsaXN0ZW5lciBzdGlsbCBoYXMgdmFsaWQgaW5mbyBpbiB0aGUgY2FsbGJhY2suCisKKzIwMDktMDQtMjEgMTM6NDI6MDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0bWVzc2FnZS5jOgorCSogZ3N0L2dzdG1lc3NhZ2UuaDoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgR3N0TWVzc2FnZTogQWRkIFNUUkVBTV9TVEFUVVMgbWVzc2FnZSBtZXRob2RzCisJICBBZGQgbWV0aG9kcyB0byBoYW5kbGUgdGhlIHN0cmVhbV9zdGF0dXMgbWVzc2FnZSB0eXBlcy4KKworMjAwOS0wNC0yMSAxMzowNToxNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHF1YXJrLmM6CisJKiBnc3QvZ3N0cXVhcmsuaDoKKwkgIHF1YXJrOiBhZGQgIm9iamVjdCIgcXVhcmsKKwkgIEFkZCB0aGUgb2JqZWN0IHF1YXJrIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgU1RSRUFNX1NUQVRVUyBtZXNzYWdlcy4KKworMjAwOS0wNS0xMSAyMzo0NDo0MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHRhc2suaDoKKwkgIFRhc2s6IHJlbW92ZSBjcmVhdGUvam9pbiBtZXRob2RzCisJICBQcmVwYXJlIGZvciB1c2luZyB0aGUgR3N0VGFza1Bvb2wgb2JqZWN0LiBXZSBkb24ndCBuZWVkIHRoZSBjcmVhdGUgYW5kIGpvaW4KKwkgIGNhbGxiYWNrcyBhbnltb3JlLCB0aGV5IHdpbGwgYmUgaGFuZGxlZCBieSB0aGUgcG9vbC4KKworMjAwOS0wNC0yMCAxNzowNzo1MCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHRhc2suYzoKKwkgIEdzdFRhc2s6IGFkZCBwcml2YXRlIGRhdGEsIGZpeCBwYXJlbnRfY2xhc3MKKwkgIFVzZSB0aGUgcGFyZW50IGNsYXNzIHRoYXQgdGhlIGdsaWIgbWFjcm8gZ2F2ZSB1cworCSAgQWN0dWFsbHkgYWRkIHRoZSBwcml2YXRlIGRhdGEgdG8gdGhlIHRhc2suCisKKzIwMDktMDQtMjAgMTc6MTk6MjEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R0YXNrLmM6CisJICBHc3RUYXNrOiBob29rIHVwIGVudGVyL2xlYXZlL25vdGlmeSBjYWxsYmFja3MKKwkgIEhvb3AgdXAgdGhlIG5vdGlmeS9lbnRlci9sZWF2ZSBjYWxsYmFja3MuCisKKzIwMDktMDUtMTEgMjM6MjM6MjAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgZGVmczogYWRkIG5ldyBzeW1ib2wgdG8gZGVmcyBmaWxlCisKKzIwMDktMDUtMTEgMjM6MTk6NTMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0dGFzay5jOgorCSogZ3N0L2dzdHRhc2suaDoKKwkgIEdzdFRhc2s6IGFsbG93IHNldHRpbmcgY2FsbGJhY2tzCisJICBBbGxvdyBzZXR0aW5nIHRocmVhZCBjYWxsYmFja3MgdGhhdCB3aWxsIGFsbG93IHVzIHRvIGNvbnRyb2wgdGhlIHRocmVhZHMgdXNlZCBieQorCSAgdGhlIHRhc2suCisKKzIwMDktMDQtMjMgMTk6NDA6MTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgYmFzZXNyYzogZG9uJ3QgaWdub3JlIHBhZF9zdGFydCByZXR1cm4gdmFsdWUKKworMjAwOS0wNC0yMSAxMzozNDoxOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9kZXNpZ24vZHJhZnQtc3RyZWFtLXN0YXR1cy50eHQ6CisJICBkZXNpZ246IG1vcmUgU1RSRUFNX1NUQVRVUyB1cGRhdGVzCisJICBQYXNzIHRoZSB0aHJlYWQgb2JqZWN0IGluIGEgR1ZhbHVlLCB3aGljaCB3b3VsZCBhbGxvdyB0aGUgYXBwbGljYXRpb24gdG8gZmlndXJlCisJICBvdXQgdGhlIHR5cGUgb2YgdGhlIG9iamVjdCBpbnN0ZWFkIG9mIHVzIGhhdmluZyB0byBleHBsaWNpdGx5IGNvZGUgaXQgaW4gYQorCSAgbWVzc2FnZSBmaWVsZC4KKworMjAwOS0wNC0yMSAwOTo0NTowOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9kZXNpZ24vZHJhZnQtc3RyZWFtLXN0YXR1cy50eHQ6CisJICBkZXNpZ246IHVwZGF0ZSBzdHJlYW0tc3RhdHVzIGRvY3VtZW50IHNvbWUgbW9yZQorCisyMDA5LTA0LTIwIDE1OjU1OjA5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2Rlc2lnbi9kcmFmdC1zdHJlYW0tc3RhdHVzLnR4dDoKKwkgIGRlc2lnbjogYWRkIGZpcnN0IHZlcnNpb24gb2Ygc3RyZWFtLXN0YXR1cworCSAgQWRkIHRoZSBmaXJzdCB2ZXJzaW9uIG9mIHRoZSBTVFJFQU1fU1RBVFVTIG1lc3NhZ2UgZGVzaWduIGRvY3MuCisJICBUaGlzIG1lc3NhZ2Ugd2lsbCBiZSB1c2VkIHRvIGdpdmUgYXBwbGljYXRpb25zIG1vcmUgY29udHJvbCBvdmVyIHRoZQorCSAgc3RyZWFtaW5nIHRocmVhZHMuCisKKzIwMDktMDQtMjEgMTc6NTM6MDcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3R0YXNrLmM6CisJICBHc3RUYXNrOiBhZGQgc29tZSBtb3JlIGRvY3MKKworMjAwOS0wNC0yMSAxNzoxNDozNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgR3N0UGFkOiB1c2UgbmV3IHRhc2sgZnVuY3Rpb24KKwkgIFVzZSB0aGUgbmV3IHRhc2tfc2V0X3N0YXRlIGZ1bmN0aW9uIGFuZCBhY3R1YWxseSByZXR1cm4gaXRzIHJlc3VsdCB0bworCSAgdGhlIGNhbGxlci4KKworMjAwOS0wNS0xMSAyMjo1OTozNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3R0YXNrLmM6CisJKiBnc3QvZ3N0dGFzay5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBHc3RUYXNrOiB1bmlmeSB0YXNrIHN0YXRlIGZ1bmN0aW9ucworCSAgQWRkIG5ldyBnc3RfdGFza19zZXRfc3RhdGUoKSB0byBjaGFuZ2UgdGhlIHN0YXRlIG9mIHRoZSB0YXNrIGluc3RlYWQgb2YKKwkgIGR1cGxpY2F0aW5nIHRoZSBjb2RlIGluIGVhY2ggZnVuY3Rpb24uCisJICBBUEk6IEdzdFRhc2s6OmdzdF90YXNrX3NldF9zdGF0ZSgpCisKKzIwMDktMDQtMjEgMTM6Mzc6MjIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RtZXNzYWdlLmg6CisJICBNZXNzYWdlOiBzbWFsbCBpbmRlbnRhdGlvbiBjaGFuZ2UuCisKKzIwMDktMDUtMDIgMTQ6NDM6MTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgorCSogZ3N0L2dzdG9iamVjdC5jOgorCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzoKKwkqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6CisJICBBdm9pZCB1bm5lZWRlZCB0eXBlIGNoZWNrcworCisyMDA5LTA1LTAyIDE0OjM5OjQ4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cmVnaXN0cnkuYzoKKwkgIHJlZ2lzdHJ5OiBhdm9pZCBjYWxsaW5nIF9nZXRfbmFtZSgpIHRvbyBtdWNoCisJICBBdm9pZCBjYWxsaW5nIGdzdF9wbHVnaW5fZ2V0X25hbWUoKSB0b28gbWFueSB0aW1lcyBidXQgaW5zdGVhZCBjYWNoZQorCSAgdGhlIHZhbHVlLgorCisyMDA5LTA1LTAyIDE0OjM2OjUwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzoKKwkqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6CisJICBVc2UgbmV3IF9yZWZfc2luayB3aGVuIHdlIGNhbgorCisyMDA5LTA1LTAyIDE0OjMzOjAxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdG9iamVjdC5jOgorCSogZ3N0L2dzdG9iamVjdC5oOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBnc3RvYmplY3Q6IGFkZCBnc3Rfb2JqZWN0X3JlZl9zaW5rCisJICBBZGQgdGhlIGdzdF9vYmplY3RfcmVmX3NpbmsoKSBtZXRob2QgdG8gbWF0Y2ggdGhlIGdsaWIgb25lLgorCSAgQVBJOiBHc3RPYmplY3Q6OmdzdF9vYmplY3RfcmVmX3NpbmsoKQorCisyMDA5LTA1LTAyIDEzOjA2OjEwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0b2JqZWN0LmM6CisJICBnc3RvYmplY3Q6IGF2b2lkIHR5cGUgY2hlY2tzCisKKzIwMDktMDUtMDIgMTM6MDI6MTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkgIGdzdGJ1ZmZlcjogYXZvaWQgdHlwZWNoZWNrcyBpbiBmaW5hbGl6ZQorCSAgQXZvaWQgdXNlbGVzcyB0eXBlY2hlY2tpbmcgaW4gdGhlIGZpbmFsaXplIG9mIGJ1ZmZlcnMgYW5kIHN1YmJ1ZmZlcnMuCisKKzIwMDktMDUtMDIgMTI6NTk6NTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKKwkgIGZha2VzaW5rOiBhdm9pZCB0eXBlY2hlY2sKKworMjAwOS0wNC0yMCAxNDowMTowMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgorCSAgLWxhdW5jaDogY29ubmVjdCB0byBkZWVwLW5vdGlmeSB3aXRoIHJpZ2h0IG5hbWUKKwkgIENvbm5lY3QgdG8gdGhlIHJpZ2h0IHNpZ25hbCBuYW1lIHdpdGggLSBpbnN0ZWFkIG9mIF8uCisKKzIwMDktMDQtMjQgMjI6MDY6MTkgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogY29uZmlndXJlLmFjOgorCSogZ3N0L2dzdGluZm8uYzoKKwkgIGluZm86IFN1cHBvcnQgbmV3IHByaW50ZiBleHRlbnNpb25zIGluIGdsaWJjIDIuMTAKKwkgIFRoZSBwcmludGYgZXh0ZW5zaW9uIG1lY2hhbmlzbSBjaGFuZ2VkIGluIGdsaWJjIDIuMTAsIGFuZCB0aGUgb2xkZXIKKwkgIHJlZ2lzdGVyX3ByaW50Zl9mdW5jdGlvbiBpcyBkZXByZWNhdGVkLiBEZXRlY3QgYW5kIHVzZSB0aGUgbmV3CisJICBtZWNoYW5pc20gd2hlcmUgYXZhaWxhYmxlLgorCisyMDA5LTA0LTIwIDEyOjI1OjU3ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIGRvY3MvcmFuZG9tL3JlbGVhc2U6CisJICBkb2NzOiBGaXggYSB0eXBvIGluIHRoZSByZWxlYXNlIHNjcmlwdAorCisyMDA5LTA1LTExIDIxOjExOjQ5ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkgIEJhY2sgdG8gZGV2ZWxvcG1lbnQgLT4gMC4xMC4yMy4xCisKKz09PSByZWxlYXNlIDAuMTAuMjMgPT09CisKKzIwMDktMDUtMTAgMjI6NDE6MDQgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogQ2hhbmdlTG9nOgorCSogTkVXUzoKKwkqIFJFTEVBU0U6CisJKiBjb25maWd1cmUuYWM6CisJKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuYXJnczoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6CisJKiBnc3RyZWFtZXIuZG9hcDoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6CisJICBSZWxlYXNlIDAuMTAuMjMKKworMjAwOS0wNS0xMCAyMjozODo0NSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmUucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kYS5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9lcy5wbzoKKwkqIHBvL2ZpLnBvOgorCSogcG8vZnIucG86CisJKiBwby9odS5wbzoKKwkqIHBvL2lkLnBvOgorCSogcG8vaXQucG86CisJKiBwby9qYS5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9wbC5wbzoKKwkqIHBvL3B0X0JSLnBvOgorCSogcG8vcnUucG86CisJKiBwby9ydy5wbzoKKwkqIHBvL3NrLnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkgIFVwZGF0ZSAucG8gZmlsZXMKKworMjAwOS0wNS0wNiAxNjoxMDoxMSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBjb25maWd1cmUuYWM6CisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmUucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kYS5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9lcy5wbzoKKwkqIHBvL2ZpLnBvOgorCSogcG8vZnIucG86CisJKiBwby9odS5wbzoKKwkqIHBvL2lkLnBvOgorCSogcG8vaXQucG86CisJKiBwby9qYS5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9wbC5wbzoKKwkqIHBvL3B0X0JSLnBvOgorCSogcG8vcnUucG86CisJKiBwby9ydy5wbzoKKwkqIHBvL3NrLnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6CisJICAwLjEwLjIyLjQgcHJlLXJlbGVhc2UKKworMjAwOS0wNC0yNCAxOTozNjoyMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJpbi5jOgorCSAgR3N0QmluOiBzZXQgUEVORElOR19TVEFURSBjb3JyZWN0bHkKKwkgIFNldCB0aGUgcGVuZGluZyBzdGF0ZSBjb3JyZWN0bHkgd2hlbiB3ZSBhcmUgZ29pbmcgdG8gcGVyZm9ybSBhbiBhc3luYworCSAgc3RhdGVfY29udGludWUgb24gdGhlIGJpbi4KKwkgIEZpeGVzICM1ODAxMjEKKworMjAwOS0wNC0yMSAyMDo1MDo1NSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBjb25maWd1cmUuYWM6CisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmUucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kYS5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9lcy5wbzoKKwkqIHBvL2ZpLnBvOgorCSogcG8vZnIucG86CisJKiBwby9odS5wbzoKKwkqIHBvL2lkLnBvOgorCSogcG8vaXQucG86CisJKiBwby9qYS5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9wbC5wbzoKKwkqIHBvL3B0X0JSLnBvOgorCSogcG8vcnUucG86CisJKiBwby9ydy5wbzoKKwkqIHBvL3NrLnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6CisJICAwLjEwLjIyLjMgcHJlLXJlbGVhc2UKKworMjAwOS0wNC0yMSAyMjoxMjowNCArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBjb21tb246CisJICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKKwkgIEZyb20gYjM5NDFlYSB0byA2YWIxMWQxCisKKzIwMDktMDQtMTcgMTU6NDY6NTIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWM6CisJICB3aW4zMjogZGVmaW5lIF9fTVNWQ1JUX1ZFUlNJT05fXyB3aGVuIGNvbXBpbGluZyB3aXRoIE1pbmdXLCBmb3IgX19zdGF0NjQKKwkgIE5lZWQgdG8gZGVmaW5lIHRoaXMgd2hlbiB1c2luZyBNaW5nVywgc28gdGhhdCB0aGUgaW5jbHVkZXMgcHJvdmlkZQorCSAgX19zdGF0NjQgYW5kIGZyaWVuZHMuIFdlIG5lZWQgYXQgbGVhc3QgV2luZG93cyBYUCBTUDIgZm9yIHRoaXMuCisJICBGaXhlcyAjNTY4NjMyLgorCisyMDA5LTA0LTE2IDIyOjI2OjAwICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RpbmZvLmM6CisJKiBnc3QvZ3N0aW5mby5oOgorCSAgZ3N0ZGVidWc6IGNvbXBldGUgc3R1YnMuIEZpeGVzICM1NzkxNzcuCisJICBBdm9pZCBkZWZpbmVzIHdoZW4gaW5jbHVkaW5nIGdzdGluZm8uaCBvdXJzZWxmIGFuZCBjb21wbGV0ZSBzdHVicy4gU3luYyBzdHViCisJICByZXR1cm5zIHdpdGggdGhlIGRlZmluZXMuCisKKzIwMDktMDQtMTcgMTE6NDQ6MTEgKzAxMDAgIFlhYWtvdiBTZWxrb3dpdHogPHlzZWxrb3dpdHpAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBjb25maWd1cmUuYWM6CisJICBjb25maWd1cmUuYWM6IGZvcmsoKSBkdXJpbmcgcmVnaXN0cnkgc2Nhbm5pbmcgaXMgdW5zYWZlIG9uIEN5Z3dpbgorCSAgRml4ZXMgIzU1NTk3OC4KKworMjAwOS0wNC0xNyAxMTozOTo1OSArMDEwMCAgWWFha292IFNlbGtvd2l0eiA8eXNlbGtvd2l0ekB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGdzdC9nc3QuYzoKKwkgIGdzdF9pbml0OiByZWxvY2F0YWJpbGl0eSBpcyB1bm5lY2Vzc2FyeSBvbiBDeWd3aW4KKwkgIFNlZSAjNTU1OTc4LgorCisyMDA5LTA0LTE3IDEwOjExOjIxICswMTAwICBCcmlhbiBDYW1lcm9uIDxicmlhbi5jYW1lcm9uQHN1bi5jb20+CisKKwkqIGdzdC9nc3RpbmZvLmg6CisJICBnc3RpbmZvOiBkb24ndCBhc3N1bWUgR19IQVZFX0lTT19WQVJBUkdTIGltcGxpZXMgSVNPIEM5OQorCSAgTWFrZXMgaGVhZGVycyBDKysgY2xlYW4sIGVzcC4gd2l0aCB0aGUgU3VuIGNvbXBpbGVycy4KKwkgIEZpeGVzICM1Njc2OTIuCisKKzIwMDktMDQtMTcgMDk6MTc6NDAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGx1Z2luLmM6CisJICBHc3RQbHVnaW46IGZpeCBjb21waWxhdGlvbiBpZiBib3RoIEhBVkVfV0lOMzIgYW5kIEhBVkVfU0lHQUNUSU9OIGFyZSBkZWZpbmVkCisJICBNb3ZlIF9nc3RfcGx1Z2luX2ZhdWx0X2hhbmRsZXJfaXNfc2V0dXAgaW50byB0aGUgaWZkZWYgYmxvY2sgd2hlcmUgaXQncworCSAgdXNlZC4gRml4ZXMgIzU3ODIwMS4KKworMjAwOS0wNC0xNiAxMjowMTo1MCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgorCSAgLWxhdW5jaDogZGlzYWJsZSBDTE9DS19MT1NUIG1lc3NhZ2UgaGFuZGxpbmcKKwkgIERpc2FibGUgdGhlIGhhbmRsaW5nIG9mIHRoZSBDTE9DS19MT1NUIG1lc3NhZ2VzIHVudGlsIHdlIGZpeGVkIGFuZCByZWxlYXNlZCB0aGUKKwkgIGVsZW1lbnRzIChydHNwc3JjKSB0aGF0IGJyZWFrIHdoZW4gd2UgcXVpY2tseSBQQVVTRS9QTEFZIHRoZSBwaXBlbGluZS4KKwkgIEZpeGVzICM1NzkxMjcKKworMjAwOS0wNC0xNSAyMjoyNDo0NSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBjb25maWd1cmUuYWM6CisJICByZWxlYXNlOiBCdW1wIHZlcnNpb24gdG8gMC4xMC4yMi4yIGZvciBwcmUtcmVsZWFzZQorCisyMDA5LTA0LTE2IDAwOjA4OjIwICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKKwkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6CisJICB3aW4zMjogVXBkYXRlIHdpbjMyIGJ1aWxkIGZpbGVzCisKKzIwMDktMDQtMTUgMjM6Mjc6MzEgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogcG8vYWYucG86CisJKiBwby9hei5wbzoKKwkqIHBvL2JlLnBvOgorCSogcG8vYmcucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGEucG86CisJKiBwby9kZS5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZXMucG86CisJKiBwby9maS5wbzoKKwkqIHBvL2ZyLnBvOgorCSogcG8vaHUucG86CisJKiBwby9pZC5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vamEucG86CisJKiBwby9uYi5wbzoKKwkqIHBvL25sLnBvOgorCSogcG8vcGwucG86CisJKiBwby9wdF9CUi5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vcncucG86CisJKiBwby9zay5wbzoKKwkqIHBvL3NxLnBvOgorCSogcG8vc3IucG86CisJKiBwby9zdi5wbzoKKwkqIHBvL3RyLnBvOgorCSogcG8vdWsucG86CisJKiBwby92aS5wbzoKKwkqIHBvL3poX0NOLnBvOgorCSogcG8vemhfVFcucG86CisJICBwbzogVXBkYXRlIHRyYW5zbGF0aW9ucyBmcm9tIFRQCisKKzIwMDktMDQtMTUgMjI6MTc6MTAgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogQ2hhbmdlTG9nOgorCSAgQ2hhbmdlTG9nOiByZWdlbmVyYXRlIGNoYW5nZWxvZyB3aXRoIHRoZSBnZW4tY2hhbmdlbG9nIHNjcmlwdAorCisyMDA5LTA0LTE1IDIzOjI2OjEzICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIGdzdC9nc3R1dGlscy5jOgorCSAgZG9jczogcmVtb3ZlIGVycmFudCBndGstZG9jIGNvbW1lbnQgbWFya2VyIHRyaWdnZXJpbmcgYSB3YXJuaW5nCisKKzIwMDktMDQtMTYgMDA6MDI6MDcgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3RwYXJhbXNwZWNzLmM6CisJKiBnc3QvZ3N0cGFyYW1zcGVjcy5oOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6CisJICBwYXJhbXNwZWNzOiByZXZlcnQgZ3N0X3BhcmFtX3NwZWNfaXNfbXV0YWJsZSgpIGZvciByZWxlYXNlCisJICBSZXZlcnQgdGhlIGdzdF9wYXJhbV9zcGVjX2lzX211dGFibGUgQVBJIGZvciB0aGlzIHJlbGVhc2Ugc28gd2UgY2FuCisJICBkaXNjdXNzIGl0IGEgYml0IGZ1cnRoZXIgZmlyc3QuCisKKzIwMDktMDQtMTUgMjM6MzM6MjAgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBsb2dnaW5nOiBmaXggdW51c2VkIHZhcmlhYmxlIHdhcm5pbmcgd2hlbiBkaXNhYmxpbmcgZGVidWcgbG9ncy4KKwkgIFRoZSB2YXIgd2FzIE5VTEwgYW55d2F5LCBiYWNhdXNlIG9mIHRoZSBpZmRlZnMgdGhlcmUsIHRoZSBtZXNzYWdlIG1ha2VzIG5vCisJICBzZW5zZSBpbmNsdWRpbmcgaXQuCisKKzIwMDktMDQtMTUgMjM6MTI6MTEgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogY29uZmlndXJlLmFjOgorCSogZ3N0L2dzdGluZm8uYzoKKwkqIGdzdC9nc3RpbmZvLmg6CisJICBnc3RkZWJ1Zzogc2hvdyBlbmFibGVkL2Rpc2FibGVkIGluIGNvbmZpZ3VyZSBhbmQgZml4IGJ1aWxkIGZvciBkaXNhYmxlZAorCSAgV2hlbiBpdHMgZGlzYWJsZWQsIHdlIHBvaXNvbiBzb21lIHN5bWJvbHMgdG8gZm9yY2UgYSBidWlsZCBlcnJvciBpZiB0aGV5IGFyZQorCSAgdXNlZC4gRHVubm8gaG93IHVzZWZ1bCB0aGlzIGFjdWFsbHkgaXMsIGJ1dCB3ZSBuZWVkIHRvIGRpc2FibGUgdGhlIHBvaXNvbmluZworCSAgd2hlbiB3ZSBpbmNsdWRlIHRoaXMgb3Vyc2VsZi4gQWxzbyBkb24ndCBkZWZpbmUgc29tZSBvZiB0aGUgZHVtbWllcywgYXMgdGhleQorCSAgYXJlIGdldHRpbmcgcmVwbGFjZWQgd2l0aCBkZWZpbmVzIGFuZCB0aGF0IGNyZWF0ZXMgY29kZSB0aGF0IGRvZXMgbm90IGNvbXBpbGUuCisKKzIwMDktMDQtMTUgMTk6NTg6MzQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvTWFrZWZpbGUuYW06CisJICBVc2UgZ19vbmNlX2luaXRfKigpIGluc3RlYWQgb2YgR09uY2UgZm9yIHRoZSBlbnVtIHR5cGVzCisKKzIwMDktMDQtMTUgMTM6MDU6MTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzoKKwkgIHN0YXRpY3BhZHRlbXBsYXRlOiBVcGRhdGUgZG9jcyBvZiBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXRfY2FwcyAoKQorCSAgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHMgKCkgYWN0dWFsbHkgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUKKwkgIGNhcHMgYW5kIGl0J3MgY2xlYW5lciB0byB1bnJlZiB0aGVtIGFmdGVyIHVzYWdlLiBUaGUgY29yZSB3aWxsLCBob3dldmVyLAorCSAgYWx3YXlzIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIGNhcHMgc28gdGhpcyBkaWRuJ3QgcmVzdWx0IGluIGEgbWVtb3J5CisJICBsZWFrLgorCisyMDA5LTA0LTE0IDIyOjMyOjIxICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RjbG9jay5oOgorCSogZ3N0L2dzdHBhcmFtc3BlY3MuYzoKKwkgIGRvY3M6IHVzZSByZWFsIDxub3RlPiB0YWdzIGFzIHRoZXkgbG9vayBuaWNlIGluIG5ldyBndGstZG9jCisKKzIwMDktMDQtMTQgMTI6MjA6MzcgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJKiBnc3QvZ3N0cGFyYW1zcGVjcy5jOgorCSAgRml4IGxvY2tpbmcgaW4gZ3N0X3BhcmFtX3NwZWNfaXNfbXV0YWJsZQorCisyMDA5LTA0LTE0IDIyOjA3OjM4ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgorCSogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6CisJICBjb250cm9sbGVyOiBmYWN0b3Igb3V0IGR1cGxpY2F0ZWQgY29kZSBhbmQgYWRkIGEgZGVzY3JpcHRpb24gZm9yIGl0LgorCSAgQWxzbyBmaXggdHlwbyBpbiB0aGUgdGVzdHMgd2hpbGUgcmV2aWV3aW5nIHRoZW0uCisKKzIwMDktMDQtMTQgMTk6MTI6NTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RzeXN0ZW1jbG9jay5oOgorCSAgZG9jczogYWRkIHNpbXBsZSBkb2MgYmx1cmIKKworMjAwOS0wNC0xNCAxOToxMTo0NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhcmFtc3BlY3MuYzoKKwkgIHBhcmFtc3BlY3M6IGFkZCBub3RlIGFib3V0IHJhY3luZXNzCisJICBBZGQgYSBub3RlIGFib3V0IHBvdGVudGlhbCByYWN5bmVzcyBpbiBfaXNfbXV0YWJsZSgpLgorCisyMDA5LTA0LTE0IDEwOjMyOjA3ICswMjAwICBMUk4gPGxybjE5ODYgYXQgZ21haWwuY29tPgorCisJKiBnc3QvZ3N0aW5mby5jOgorCSAgaW5mbzogdXNlIG11dGV4IHRvIGRvIGNvbnNvbGUgY29sb3JzIG9uIHdpbmRvd3MKKwkgIFVzZSBhIHN0YXRpYyBtdXRleCB0byBrZWVwIHRoZSBjb25zb2xlIGNvbG9ycyBhbmQgY29udGV4dCB0b2dldGhlciB3aGVuCisJICBkZWJ1Z2dpbmcgd2l0aCBjb2xvcnMgb24gV2luZG93cy4KKwkgIEZpeGVzICM1MTcyMzEuCisKKzIwMDktMDQtMTMgMTQ6Mjc6NDkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFyYW1zcGVjcy5jOgorCSogZ3N0L2dzdHBhcmFtc3BlY3MuaDoKKwkgIGRvY3M6IGFkZCBTaW5jZTogdGFncyB0byBndGstZG9jIGNodW5rcyBmb3IgbmV3IHBhcmFtIHNwZWMgQVBJCisJICBBbmQsIGZvciBvdXIgcmVsZWFzZSBtYW5hZ2VyLCB0aGUgaW4tY29tbWl0LW1lc3NhZ2Uga2V5d29yZHMKKwkgIGZvciB0aGUgcHJldmlvdXMgY29tbWl0OgorCSAgQVBJOiBHU1RfUEFSQU1fTVVUQUJMRV9SRUFEWQorCSAgQVBJOiBHU1RfUEFSQU1fTVVUQUJMRV9QQVVTRUQKKwkgIEFQSTogR1NUX1BBUkFNX01VVEFCTEVfUExBWUlORworCSAgQVBJOiBnc3RfcGFyYW1fc3BlY19pc19tdXRhYmxlCisKKzIwMDktMDItMjAgMTE6MDk6MTkgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdHBhcmFtc3BlY3MuYzoKKwkqIGdzdC9nc3RwYXJhbXNwZWNzLmg6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKKwkgIEFkZCBwYXJhbSBzcGVjIGZsYWdzIGZvciB3aGVuIGEgcHJvcGVydHkgY2FuIGJlIGNoYW5nZWQKKwkgIEFkZHMgR1NUX1BBUkFNX01VVEFCTEUqIGZsYWdzIHRvIGluZGljYXRlIGluIHdoaWNoIHN0YXRlcyBhCisJICBwcm9wZXJ0eSBjYW4gYmUgY2hhbmdlZCBhbmQgdGFrZSBlZmZlY3QuICBGaXhlcyAjNTcxNTU5CisKKzIwMDktMDQtMTAgMTQ6MTU6MzYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIHRvb2xzL2dzdC1sYXVuY2guYzoKKwkgIC1sYXVuY2g6IGhhbmRsZSBjbG9jay1sb3N0IG1lc3NhZ2VzCisJICBXaGVuIHdlIHJlY2VpdmUgYSBjbG9jay1sb3N0IG1lc3NhZ2UsIHdlIG5lZWQgdG8gc2VsZWN0IGEgbmV3IGNsb2NrIGluIHRoZQorCSAgcGlwZWxpbmUgYnkgc2V0dGluZyB0aGUgcGlwZWxpbmUgdG8gUEFVU0VEIGFuZCBiYWNrIHRvIFBMQVlJTkcuCisKKzIwMDktMDQtMDkgMTg6Mjc6MjEgKzAyMDAgIE9saXZpZXIgQ3JldGUgPHRlc3RlciBhdCB0ZXN0ZXIuY2E+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6CisJICB0ZWU6IGFkZCBwcm9wZXJ0eSB0byBjb250cm9sIHRoZSBhbGxvYyBwYWQKKwkgIEFkZCBhIHByb3BlcnR5IHRvIGNvbnRyb2wgdGhlIHBhZCB1c2VkIGZvciBwcm94eWluZyB0aGUgYnVmZmVyX2FsbG9jIGZ1bmN0aW9uIG9uCisJICB0aGUgc2lua3BhZC4KKwkgIEZpeGVzICM1Nzc4OTEuCisKKzIwMDktMDQtMDkgMTE6NTE6NDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RiaW4uYzoKKwkgIGJpbjogYWx3YXlzIG1hcmsgcGVuZGluZ19hc3luY19kb25lCisJICBXaGVuIHdlIGdldCBhbiBBU1lOQ19ET05FIG1lc3NhZ2Ugd2hlbiBhIHN0YXRlIGNoYW5nZSB3YXMgYnVzeSwgc2V0IHRoZQorCSAgcGVuZGluZ19hc3luY19kb25lIGZsYWcgc28gdGhhdCBhZnRlciB0aGUgc3RhdGUgY2hhbmdlIGNvbXBsZXRlcywgdGhlIGJpbiBjYW4KKwkgIGNoZWNrIGlmIGFsbCBhc3luYyBlbGVtZW50cyBhcmUgZmluaXNoZWQuIERvbid0IG9ubHkgZG8gdGhpcyBmb3IgdGhlIGJpbiBpdHNlbGYKKwkgIGJ1dCBmb3IgYWxsIGVsZW1lbnRzLgorCSAgVGhpcyBmaXhlcyBzb21lIGJpbnMgaW4gYmlucyB0aGF0IHNpbXVsYXRlIGFzeW5jIHN0YXRlIGNoYW5nZXMgYnkgcG9zdGluZyBBU1lOQworCSAgbWVzc2FnZXMgKHN1Y2ggYXMgc2RwcGFyc2UgaW4gdXJpZGVjb2RlYmluL3BsYXliaW4yKS4KKworMjAwOS0wNC0wOSAxMTo0Mjo0OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGluZm8uYzoKKwkgIGluZm86IGZpeCBjb21waWxhdGlvbiwgJTA4eCBuZWVkcyBhbiB1bnNpZ25lZCBpbnQKKwkgICUwOHggbmVlZHMgYW4gdW5zaWduZWQgaW50LCBzbyBnaXZlIGl0IHRoYXQuCisKKzIwMDktMDQtMDYgMDE6Mjc6MjYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdGluZm8uYzoKKwkqIGdzdC9nc3RpbmZvLmg6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0aW5mby5jOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBBUEk6IGFkZCBGSVhNRSBhbmQgRFVNUE1FTSBsb2cgbGV2ZWxzIGFuZCBjb252ZW5pZW5jZSBtYWNyb3MKKwkgIFR3byBuZXcgbG9nIGxldmVscyB0byBkdW1wIEZJWE1FcyBpbnRvIHRoZSBsb2cgYW5kIHRvIGxvZyBkYXRhCisJICBpbiBmb3JtIG9mIGEgaGV4IGR1bXAgKCM1NzgxMTQpLgorCSAgQVBJOiBHU1RfQ0FUX0ZJWE1FX09CSkVDVAorCSAgQVBJOiBHU1RfQ0FUX01FTURVTVBfT0JKRUNUCisJICBBUEk6IEdTVF9DQVRfRklYTUUKKwkgIEFQSTogR1NUX0NBVF9NRU1EVU1QCisJICBBUEk6IEdTVF9GSVhNRV9PQkpFQ1QKKwkgIEFQSTogR1NUX01FTURVTVBfT0JKRUNUCisJICBBUEk6IEdTVF9GSVhNRQorCSAgQVBJOiBHU1RfTUVNRFVNUAorCisyMDA5LTA0LTA4IDE4OjEzOjQyICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RiaW4uYzoKKwkqIGdzdC9nc3RjbG9jay5jOgorCSAgZG9jczogeHJlZiBtb3JlCisKKzIwMDktMDQtMDggMTc6NDk6MTggKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdHV0aWxzLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKKwkgIHRlc3RzOiByZW1vdmUgdGhlIGhhY2tzIHRvIHdvcmthcm91bmQgdGhlIHBhZC1sZWFrCisKKzIwMDktMDQtMDggMTU6MjQ6NTggKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdHBhZHRlbXBsYXRlLmM6CisJICBwYWR0ZW1wbGF0ZTogZW5hYmxlIGNvZGUgdG8gZml4IHRoZSBsZWFrLCBub3cgdGhhdCB0aGUgZGVwcyBoYXZlIGJlZW4gcmVsZWFzZWQKKwkgIEdvb2QgYW5kIGZmbXBlZyBhcmUgYWN0dWFsbHkgbXVsdGlwbGUgcmVsZWFzZXMgYmV5b25kLCBzbyB0aGF0IHRoaXMgaXMgbm93IHNhZmUKKwkgIHRvIGRvLgorCisyMDA5LTA0LTA0IDIxOjE4OjIzICswMzAwICBGZWxpcGUgQ29udHJlcmFzIDxmZWxpcGUuY29udHJlcmFzQGdtYWlsLmNvbT4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIGQwZWE4OWUgdG8gYjM5NDFlYQorCisyMDA5LTA0LTA0IDE0OjUzOjIxICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBjb21tb246CisJICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKKwkgIEZyb20gZjhiM2Q5MSB0byBkMGVhODllCisKKzIwMDktMDQtMDQgMTQ6NDI6MDQgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6CisJICBnc3QtaW5zcGVjdDogcmVtb3ZlIGRlYWQgYXNzaWdubWVudAorCSAgZmlyc3RfZmxhZyB3aWxsIGJlIGVpdGhlcjoKKwkgICogcmV3cml0dGVuIHdpdGhvdXQgYmVpbmcgcmVhZCBpZiB3ZSBsb29wIGFnYWluIChsaW5lIDI4NCkKKwkgICogbm90IHJlYWQgYWdhaW4gaWYgd2UgZG9uJ3QgbG9vcAorCisyMDA5LTA0LTA0IDE0OjM5OjUxICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBiYXNlc2luazogUmVtb3ZlIGRlYWQgYXNzaWdubWVudHMuCisJICBzc3RhcnQvc3N0b3AvcnN0YXJ0L3JzdG9wIGFyZSBhbGwgZWl0aGVyOgorCSAgKiBhc3NpZ25lZCB2YWx1ZXMgbGF0ZXIgb24gYmVmb3JlIGJlaW5nIHVzZWQgaW4gJ2RvX3RpbWVzOicgKEVPUyBhbmQgYnVmZmVycykKKwkgICogbm90IHVzZWQgKG5vbi1FT1MgZXZlbnRzKQorCisyMDA5LTA0LTA0IDE0OjM4OjUyICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIGJhc2VzcmM6IHJlbW92ZSBkZWFkIGFzc2lnbm1lbnQuCisJICBUaGUgdmFyaWFibGUgd2lsbCBub3QgYmUgcmVhZCBiZWZvcmUgaXQncyBhc3NpZ25lZCBhIHZhbHVlIGxpbmUgOTQyLzk0NQorCisyMDA5LTA0LTA0IDE0OjM3OjEzICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSAgZ3N0dGFnbGlzdDogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KKwkgIFdlIGRvbid0IG5lZWQgdG8gYWxsb2NhdGUgYSB2YXJpYWJsZSBpZiBpdCdzIHRoZSByZXR1cm4gb2YgYSBmdW5jdGlvbiBjYWxsCisJICBhbmQgd2Ugb25seSBjaGVjayBpdCBvbmNlLgorCisyMDA5LTA0LTA0IDE0OjM1OjM0ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJICBnc3RzdHJ1Y3R1cmU6IE9ubHkgdXNlIG1ldGhvZHMgdXNlZCBpbiBnXyogY2hlY2tzIGlmIGdsaWIgY2hlY2tzIGFyZSBkaXNhYmxlZAorCisyMDA5LTA0LTA0IDEwOjU5OjM5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmM6CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKKwkgIGdzdDogVXNlIGdfb25jZV9pbml0KiBvciBHX0RFRklORV9UWVBFCisKKzIwMDktMDQtMDQgMTA6MjA6MzYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0YmluLmM6CisJKiBnc3QvZ3N0YnVmZmVyLmM6CisJKiBnc3QvZ3N0Y2hpbGRwcm94eS5jOgorCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgorCSogZ3N0L2dzdGV2ZW50LmM6CisJKiBnc3QvZ3N0aW5kZXguYzoKKwkqIGdzdC9nc3RpbmRleGZhY3RvcnkuYzoKKwkqIGdzdC9nc3RpbnRlcmZhY2UuYzoKKwkqIGdzdC9nc3RtZXNzYWdlLmM6CisJKiBnc3QvZ3N0b2JqZWN0LmM6CisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzoKKwkqIGdzdC9nc3RwaXBlbGluZS5jOgorCSogZ3N0L2dzdHByZXNldC5jOgorCSogZ3N0L2dzdHF1ZXJ5LmM6CisJKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKKwkqIGdzdC9nc3R0YWdzZXR0ZXIuYzoKKwkqIGdzdC9nc3R0YXNrLmM6CisJKiBnc3QvZ3N0dHlwZWZpbmRmYWN0b3J5LmM6CisJKiBnc3QvZ3N0dXJpLmM6CisJKiBnc3QvZ3N0eG1sLmM6CisJICBnc3Q6IFVzZSBHX0RFRklORV9UWVBFIGFuZCBmcmllbmRzIG9yIGF0IGxlYXN0IGdfb25jZV9pbml0XyogaW4gdGhlIF9nZXRfdHlwZSgpIGZ1bmN0aW9ucworCisyMDA5LTA0LTA0IDEwOjE4OjQyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1cy5jOgorCSogZ3N0L2dzdGNsb2NrLmM6CisJICBnc3Q6IFVzZSBHX0RFRklORV9UWVBFIGFuZCBkb24ndCBjYWxsIGdfdGhyZWFkX2luaXQoKSBmcm9tIGNsYXNzX2luaXQKKwkgIGNsYXNzX2luaXQgaXMgdG9vIGxhdGUgZm9yIGNhbGxpbmcgZ190aHJlYWRfaW5pdCgpIGFzIGdfdGhyZWFkX2luaXQoKQorCSAgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSBhbnkgR09iamVjdCBmdW5jdGlvbi4KKworMjAwOS0wNC0wMyAxMzo0NjoxOCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RzZWdtZW50LmM6CisJICBVc2UgZ19zbGljZV9jb3B5IGluc3RlYWQgb2YgZ19zbGljZV9kdXAuCisJICBBIChidWdneSkgZ2xpYiBnX3NsaWNlX2R1cCBtYWNybyBtYXkgY2F1c2UgY29tcGlsZXIgd2FybmluZ3Mgb24gZS5nLiB4ODZfNjQuCisKKzIwMDktMDQtMDMgMTI6MjE6NTUgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgorCSAgY29udHJvbGxlcjogcmVtb3ZlIGRlYWQgYXNzaWdubWVudC4KKwkgIFRoZSB2YWx1ZSBvZiBwcm9wIGlzIGJlaW5nIG92ZXJ3cml0dGVuIGp1c3QgYWZ0ZXIgd2l0aG91dCBiZWluZyByZWFkLgorCisyMDA5LTA0LTAzIDEyOjIwOjM2ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJICBnc3RzdHJ1Y3R1cmU6IFJlbW92ZSBkZWFkIGFzc2lnbm1lbnQuCisJICAndHlwZScgaXMgbmV2ZXIgdXNlZCB1bnRpbCBsaW5lIDE4NDcgd2hlcmUgaXQncyBvdmVyd3JpdHRlbi4KKworMjAwOS0wNC0wMyAxMjoxOTo0MCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6CisJICBhZGFwdGVyOiByZW1vdmUgZGVhZCBhc3NpZ25tZW50LgorCSAgVGhlIHZhbHVlIHNldCB0byB0b19jb3B5IGF0IHRoYXQgbGluZSBpcyBuZXZlciB1c2VkLCBhbmQgaXMgb3ZlcndyaXR0ZW4KKwkgIGZ1cnRoZXIgZG93biBiZWZvcmUgYmVpbmcgcmVhZC4KKworMjAwOS0wNC0wMyAxMjoxNzozMyArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZ3N0L2dzdGJpbi5jOgorCSAgZ3N0YmluOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLgorCSAgVGhlIHJldHVybiB2YWx1ZSBvZiBnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUgaXNuJ3QgdXNlZCBhZnRlciB0aGF0IGNhbGwuCisKKzIwMDktMDQtMDMgMTI6MTU6MzggKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGdzdC9nc3RwaXBlbGluZS5jOgorCSAgcGlwZWxpbmU6IHJlbW92ZSByZWR1bmRhbnQgYXNzaWdubWVudC4KKwkgIElmIHRoYXQgYmxvY2sgaXMgZW50ZXJlZCwgdGhlbiBzdGFydF90aW1lIGJlY29tZXMgR1NUX0NMT0NLX1RJTUVfTk9ORS4KKwkgIFNpbmNlIHN0YXJ0X3RpbWUgaXMgaW52YWxpZCwgdGhlIGNvZGUgd2lsbCBlbnRlciB0aGUgYmxvY2sgYXQgbGluZSA0MzQgYW5kCisJICBuZXdfYmFzZV90aW1lIHdpbGwgYmUgc2V0IHRoZXJlLgorCisyMDA5LTA0LTAzIDEyOjEzOjM4ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKKwkgIGdzdHJlZ2lzdHJ5YmluYXJ5OiByZW1vdmUgdmFyaWFibGUgb25seSB1c2VkIGZvciBhIGNoZWNrLgorCSAgdGhhdCB2YXJpYWJsZSBpc24ndCB1c2VkIGFueXdoZXJlIGVsc2Ugd2l0aGluIHRoYXQgYmxvY2suCisKKzIwMDktMDQtMDMgMTI6MTM6MDAgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIGJhc2VzaW5rIDogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KKwkgIHN5bmMgaXMgbmV2ZXIgdXNlZCBhbnl3aGVyZSBpbiB0aGF0IGNvZGUuCisKKzIwMDktMDQtMDMgMTI6MTI6MDggKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgYmFzZXRyYW5zZm9ybTogbW92ZSB1bnVzZWQgdmFyaWFibGUgaW4gdGhlICNpZiAwIGJsb2NrLgorCSAgVGhhdCB2YXJpYWJsZSBpcyBvbmx5IHVzZWQgYnkgdGhlIGNvZGUgd2hpY2ggaGFzIGJlZW4gaWYgMCdkCisKKzIwMDktMDQtMDMgMTE6NTY6NDggKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGdzdC9nc3R1cmkuYzoKKwkqIGdzdC9nc3R2YWx1ZS5jOgorCSAgUmVtb3ZlIHVudXNlZCBpbmNyZW1lbnRzIGFzIGRldGVjdCBieSBMTFZNJ3MgQ0xhbmcgc3RhdGljIGFuYWx5emVyLgorCisyMDA5LTA0LTAzIDExOjUyOjQ5ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0YnVzLmM6CisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6CisJKiBnc3QvZ3N0aW5kZXhmYWN0b3J5LmM6CisJKiBnc3QvZ3N0aW50ZXJmYWNlLmM6CisJKiBnc3QvZ3N0b2JqZWN0LmM6CisJKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKKwkqIGdzdC9nc3R0YXNrLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKKwkgIFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzIGRldGVjdGVkIGJ5IExMVk0ncyBDbGFuZyBzdGF0aWMgYW5hbHl6ZXIuCisKKzIwMDktMDQtMDMgMTE6MTk6NDIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Y2Fwcy5jOgorCSAgZG9jczogaW1wcm92ZSBBUEkgcmVmZXJlbmNlIGZvciBnc3RfY2Fwc19nZXRfc3RydWN0dXJlKCkKKworMjAwOS0wNC0wMiAxMzozMjo1OCArMDIwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIChhdCkgYXBlc3RhYXJ0IChkb3QpIG9yZz4KKworCSogZ3N0L2dzdGJpbi5oOgorCSAgZG9jczogZXhwbGFpbiByZWYgb3duZXJzaGlwIGZvciBoYW5kbGVfbWVzc2FnZSBpbXBsZW1lbnRhdGlvbnMKKworMjAwOS0wNC0wMiAxMDo0MzoxNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6CisJICBnc3RjaGVjazogQ2FsbCBnc3RfY2hlY2tfaW5pdCgpIGJlZm9yZSBjcmVhdGluZyB0aGUgc3VpdGUKKwkgIFRoaXMgYWxsb3dzIHVzaW5nIHRoZSBHU3RyZWFtZXIgb3IgR09iamVjdCBBUEkgaW4gdGhlIHN1aXRlCisJICBjcmVhdGlvbiBmdW5jdGlvbi4KKworMjAwOS0wMy0zMSAxODoxNDowOCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAZW1iZWRkZWQudWZjZy5lZHUuYnI+CisKKwkqIHRvb2xzL2dzdC1sYXVuY2guYzoKKwkgIGdzdC1sYXVuY2g6IEZpeGVzIGVycm9yIHdoZW4gRElTQUJMRV9GQVVMVF9IQU5ETEVSIGlzIGRlZmluZWQKKwkgIFdoZW4gZGVmaW5lZCwgdGhpcyBtYWNybyBwcmV2ZW50ZWQgdGhlIGRlY2xhcmF0aW9uIG9mICd3YWl0aW5nX2VvcycsIGNhdXNpbmcgYW4gZXJyb3IuCisKKzIwMDktMDMtMjYgMTc6MjU6MDggKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgorCSAgY2Fwc2ZpbHRlci4gQWx3YXlzIGNhbGxzIF9zdWdnZXN0LCBldmVuIHdpdGggTlVMTCBjYXBzLiBGaXhlcyAjNTc0ODA1CisKKzIwMDktMDMtMzAgMTU6NDU6MDIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdWV1ZS5jOgorCSAgdGVzdHM6IERvbid0IGRlZmluZSBnbG9iYWwgYnVmZmVycyB2YXJpYWJsZSwgaXQncyBhbHJlYWR5IGRlZmluZWQgYnkgbGliZ3N0Y2hlY2sKKworMjAwOS0wMy0zMCAxMDozMzo1MSArMDIwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+CisKKwkqIGRvY3MvZ3N0L2J1aWxkaW5nLnhtbDoKKwkgIGRvY3M6IFNvbWUgZ3JhbW1hciBhbmQgdHlwbyBjb3JyZWN0aW9ucy4KKworMjAwOS0wMy0yOSAxMzo0MToyMiArMDIwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFuYS5hbWFudGVzPgorCisJKiBkb2NzL2dzdC9idWlsZGluZy54bWw6CisJICBGaXggdHlwby4KKworMjAwOS0wMy0yNyAxNzozMDoyMyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKKwkgIGJpbmFyeXJlZ2lzdHJ5OiBpbml0IHZhcmlhYmxlLCB0aGF0IGlzIHJlZmVyZW5jZWQgaW4gZXJyb3IgY2FzZSBiZWxvdyB0aGUgZmFpbDogbGFiZWwKKworMjAwOS0wMy0yNyAxNjoxNTo1NSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6CisJICBjbG9jazogd2FrZXVwIHRoZSBhc3luYyB0aHJlYWQgYSBiaXQgbW9yZQorCSAgQWxzbyB3YWtlIHVwIHRoZSBhc3luYyB0aHJlYWQgd2hlbiBpdCBpcyBkb2luZyBhbiBhc3luYyB3YWl0IGZvciBhbiBlbnRyeS4KKworMjAwOS0wMy0yNyAxNjoxNToxMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkgIGVsZW1lbnQ6IEZpeCBhIGxpdHRsZSBkZWJ1ZyBtZXNzYWdlCisKKzIwMDktMDMtMjYgMTM6MDc6NTYgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6CisJICBiaW5hcnlyZWdpc3RyeTogY2hlY2sgZm9yIG5vdCByZWFkaW5nIGJleW9uZCB0aGUgZGF0YSBhcmVhLiBGaXhlcyAjNTc2ODQyCisJICBDaGVjayBhbGwgcmVhZHMgYWdhaW5zdCB0aGUgZW5kIG9mIHRoZSBkYXRhIHJlZ2lvbi4gUm9sbCBiYWNrIHJlZ2lzdHJhdGlvbiBvZgorCSAgcGFydGlhbCByZWFkcy4KKworMjAwOS0wMy0yNSAxMTowMzoyMiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBkb2NzL2dzdC9NYWtlZmlsZS5hbToKKwkqIGRvY3MvZ3N0L2J1aWxkaW5nLnhtbDoKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6CisJICBkb2NzOiBhZGQgYSBwYWdlIGFib3V0IGJ1aWxkaW5nIGdzdHJlYW1lciBhbmQgYXBwcworCisyMDA5LTAzLTI2IDEzOjA4OjAxIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0BlbWJlZGRlZC51ZmNnLmVkdS5icj4KKworCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgorCSAgQWRkcyBmbGFnIGZvciBlb3Mgb24gc2h1dGRvd24gaW4gZ3N0LWxhdW5jaC4gRml4ZXMgIzU3NTgxNC4KKworMjAwOS0wMy0yNiAyMjowNTozMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGNsb2NrLmM6CisJKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKKwkgIGNsb2NrOiBtYWtlIFVOU0NIRURVTEVEIGNoZWNrcyB0aHJlYWRzYWZlCisJICBNb3ZlIHRoZSBjaGVja3MgZm9yIHVzaW5nIGFuIHVuc2NoZWR1bGVkIGVudHJ5IGZyb20gdGhlIHVuc2FmZSBHc3RDbG9jayB0byB0aGUKKwkgIFN5c3RlbUNsb2NrIG9iamVjdCBzbyB0aGF0IHdlIGNhbiBwZXJmb3JtIHRoZSBjb3JyZWN0IGxvY2tpbmcuCisJICBmaXggYSBsZWFrIGFuZCBwb3RlbnRpYWwgZGVhZGxvY2sgdGhlbiB0aGUgYXN5bmMgdGhyZWFkIGZhaWxzIHRvIHN0YXJ0LgorCSAgU3ByaW5rbGUgc29tZSBHX0xJS0VMWSBhcm91bmQgYmVjYXVzZSB3ZSBjYW4uCisKKzIwMDktMDMtMjYgMjE6NDA6MjAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgorCSAgY2xvY2s6IHJlbW92ZSBwZW5kaW5nIGFzeW5jIHdha2V1cCBzb29uZXIKKwkgIFJlbW92ZSBhIHBlbmRpbmcgYXN5bmMgd2FrZXVwIGJlZm9yZSB3ZSBjaGVjayBpZiB0aGUgbmV4dCBlbnRyeSBpcyBVTlNDSEVEVUxFRAorCSAgYmVjYXVzZSB3ZSBtaWdodCBsZWF2ZSB0aGUgY29udHJvbCBzb2NrZXQgYnVzeS4KKworMjAwOS0wMy0yNiAxOTozMzo0MSArMDEwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+CisKKwkqIGdzdC9nc3Rwb2xsLmM6CisJICBnc3Rwb2xsOiBDb3JyZWN0ZWQgYSBkb2N1bWVudGF0aW9uIHR5cG8uCisKKzIwMDktMDMtMjYgMTk6MTM6NTUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgorCSAgY2xvY2s6IGFkZCBzb21lIG1vcmUgY29tbWVudHMuCisKKzIwMDktMDMtMjYgMTg6NDY6MzUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgorCSAgY2xvY2s6IHJld29yayB0aGUgd2FrZXVwIG9mIGVudHJpZXMuCisJICBLZWVwIGEgY291bnRlciBmb3IgdGhlIGFtb3VudCBvZiBvdXRzdGFuZGluZyB3YWtldXBzIHRoYXQgd2UgcHJvZHVjZSBhbmQgb25seQorCSAgcGVyZm9ybSBhIHdyaXRlL3JlYWQgdG8gdGhlIGNvbnRyb2wgc29ja2V0IHdoZW4gMSBvciAwIHJlc3BlY3RpdmVseS4KKwkgIGRvbid0IHBvbGwgd2hlbiB3YWl0aW5nIGZvciB0aGUgZW50cmllcyB0byBiZSB1bmJsb2NrZWQgYW5kIGNsZWFyIHRoZWlyIHdha2V1cAorCSAgY291bnRzLCBqdXN0IGFjdCBvbiB0aGUgc2lnbmFsIHdoZW4gdGhlIHdha2V1cCBjb3VudCBpcyAwLgorCSAgdW5zY2hlZHVsZWQgZW50cmllcyB3aWxsIGNsZWFyIHRoZWlyIHdha2V1cCBjb3VudCB0aGVtc2VsdmVzLgorCSAgS2VlcCB0cmFjayBvZiB3aGVuIHdlIHdha2V1cCB0aGUgYXN5bmMgdGhyZWFkIGJlY2F1c2UgdGhlIGxpc3Qgb2YgZW50cmllcyBoYXMKKwkgIGNoYW5nZWQuCisJICBkb24ndCB0cnkgdG8gc2VlIGlmIHRoZSBsaXN0IGNoYW5nZWQgYmVjYXVzZSB3ZSBjYW4ndCByZWFsbHkga25vdyB3aGVuIG9uZSBlbnRyeQorCSAgaXMgYWRkZWQgbXVsdGlwbGUgdGltZXMuCisJICBPbmx5IHdha2UgdXAgdGhlIGFzeW5jIHRocmVhZCB3aGVuIHdlIGFkZCBhbiBhc3luYyBlbnRyeSB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdAorCSAgYW5kIHRoZSBvbGQgZW50cnkgd2FzIEJVU1kuCisKKzIwMDktMDMtMjUgMTc6MzE6MTYgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogZ3N0L2dzdHBvbGwuYzoKKwkgIGdzdHBvbGw6IEZpeCB1cCBkb2N1bWVudGF0aW9uIHN0cmluZ3MuCisJICBOb3RlIHRoZSBjaGFuZ2VkIGJlaGF2aW91ciBvZiBnc3RfcG9sbF93YWl0IGZvciB0aW1lciBHc3RQb2xsJ3MsIGFuZAorCSAgZml4IGEgY291cGxlIG9mIHNwZWxsaW5nIGVycm9ycy4KKworMjAwOS0wMy0yNiAxNTo1NTowMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3lzdGVtY2xvY2suYzoKKwkgIGNsb2NrOiBmaXggMiB3YWtldXAgcmFjZXMuCisJICB3aGVuIGFuIGVudHJ5IGJlaW5nIHdhaXRlZCBvbiBpbiB0aGUgYXN5bmMgdGhyZWFkIGlzIHVuc2NoZWR1bGVkLCBjbGVhciB0aGUKKwkgIHdha2V1cCBxdWV1ZSBzbyB3ZSBjYW4gY29udGludWUgd2FpdGluZyBvbiBvdGhlciBlbnRyaWVzLgorCSAgV2hlbiBhbiBlbnRyeSBiZWluZyB3YWl0ZWQgb24gaW4gdGhlIGFzeW5jIHRocmVhZCBpcyB1bmxvY2tlZCBiZWNhdXNlIGFuIGVhcmxpZXIKKwkgIGVudHJ5IHdhcyBhZGRlZCB0byB0aGUgbGlzdCwgc2V0IHRoZSBlbnRyeSB0byBPSyBhZ2Fpbi4gVGhpcyBtYWtlcyBzdXJlIHRoYXQKKwkgIG9ubHkgdGhlIGVudHJpZXMgYmVpbmcgd2FpdGVkIG9uIGhhdmUgdGhlIEJVU1kgZmxhZyBzZXQgYW5kIHdha2UgdXAgdGhlIHRpbWVyCisJICBwb2xsIHdoZW4gdGhleSBhcmUgdW5zY2hlZHVsZWQuCisKKzIwMDktMDMtMjYgMTQ6NDQ6MDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cmVnaXN0cnkuYzoKKwkgIHJlZ2lzdHJ5OiBpZ25vcmUgLmdpdCBkaXJlY3Rvcnkgd2hlbiByZWN1cnNpdmVseSBzY2FubmluZyBwbHVnaW4gcGF0aHMgZm9yIHBsdWdpbnMKKwkgIFNhdmVzIHNvbWUgY3ljbGVzL3BhbmRhcyBmb3IgdGhvc2Ugb2YgdXMgd2hvIHJ1biB1bmluc3RhbGxlZCBzZXR1cHMuCisKKzIwMDktMDMtMjYgMTQ6MTY6NTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKKwkqIGdzdC9nc3RyZWdpc3RyeXhtbC5jOgorCSAgcmVnaXN0cnk6IGRvIGZzeW5jKCkgYmVmb3JlIGNsb3NlKCkgYW5kIHJlbmFtZSgpCisJICBUaGlzIGhlbHBzIHByZXZlbnQgZmlsZXN5c3RlbS9kYXRhIGluY29uc2lzdGVuY2llcyBpbiBjZXJ0YWluCisJICBjaXJjdW1zdGFuY2VzIG9uIGNlcnRhaW4gZmlsZXN5c3RlbXMgKGxpa2UgZXh0NCwgeGZzLCB1YmlmcykuCisJICBBbHNvIHNlZSBidWcgIzU2Mjk3Ni4KKworMjAwOS0wMy0yNiAwMTowOTowMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSogZ3N0L2dzdHRhZ2xpc3QuaDoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0YWcuYzoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgQVBJOiBhZGQgZ3N0X3RhZ19saXN0X2dldF9idWZmZXJ7X2luZGV4fQorCSAgQ29udmVuaWVuY2UgQVBJLCBtb3N0bHkgZm9yIGltYWdlIHRhZ3MsIHNvIHBlb3BsZSBkb24ndCBoYXZlIHRvCisJICBmaWd1cmUgb3V0IHRoZSB3aG9sZSBHVmFsdWUvR3N0VmFsdWUgdGhpbmcganVzdCBmb3IgdGhpcy4KKworMjAwOS0wMy0yNSAyMzowMzozOCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3lzdGVtY2xvY2suYzoKKwkgIHN5c3RlbWNsb2NrOiBDbGVhbiB1cCB0aGUgdGVzdHMgYSBiaXQuCisJICBBZGQgc29tZSBjbGVhbnVwcyB0byB0aGUgc3lzdGVtIGNsb2NrIHRlc3RzLCB0byBmcmVlIGFsbCB0aGUgbWVtb3J5IGFuZAorCSAgdW5zY2hlZHVsZS91bnJlZiBhbGwgY2xvY2sgSURzIHdlIGFsbG9jYXRlLgorCSAgVXNlIGEgbXV0ZXggaW4gb25lIHRlc3QgdG8gYXZvaWQgcG90ZW50aWFsIHRocmVhZGluZyBwcm9ibGVtcyBvbiBtdWx0aWNvcmUKKwkgIG1hY2hpbmVzLgorCisyMDA5LTAzLTI1IDIxOjM3OjM4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzeXN0ZW1jbG9jay5jOgorCSAgc3lzdGVtY2xvY2s6IEFkZCBhIHRlc3QgZm9yIHN5bmMvYXN5bmMgY2xvY2tpZCBpbnRlcmFjdGlvbnMKKwkgIFRoaXMgdGVzdCByYW5kb21seSBoYW5ncyBpZiB0aGVyZSBhcmUgcHJvYmxlbXMgd2l0aCB0aGUgcmVsaWFiaWxpdHkgb2YKKwkgIHVuc2NoZWR1bGluZyBzeW5jIGFuZCBhc3luYyBjbG9ja0lEJ3Mgb24gdGhlIHN5c3RlbSBjbG9jay4KKworMjAwOS0wMy0yNiAxMToxNzowMSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RzZWdtZW50LmM6CisJICBzZWdtZW50OiBVc2UgZ19zbGljZV9kdXAoKSBub3cKKworMjAwOS0wMy0yNiAxMTowODoyNyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nbGliLWNvbXBhdC5oOgorCSogZ3N0L2dzdHV0aWxzLmg6CisJICBSZW1vdmUgc29tZSBjb21wYXRpYmlsaXR5IHN0dWZmIGZvciBHTGliIDwgMi4xNAorCisyMDA5LTAzLTI1IDAwOjUwOjA3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3R0YWdsaXN0LmM6CisJKiBnc3QvZ3N0dGFnbGlzdC5oOgorCSAgQVBJOiBhZGQgR1NUX1RBR19TVUJUSVRMRV9DT0RFQworCSAgWWVzLCAnY29kZWMnIGlzbid0IGV4YWN0bHkgdGhlIGJlc3Qgd29yZCwgYnV0IGxldCdzIGJlIGNvbnNpc3RlbnQgd2l0aCBBVURJT19DT0RFQworCSAgYW5kIFZJREVPX0NPREVDICh3aGljaCBtYXkgYmUgJ3JhdycgZm9ybWF0cyBhcyB3ZWxsIGFmdGVyIGFsbCkuIFByZXJlcXVpc2l0ZSBmb3IKKwkgIGJ1ZyAgIzU3NjU1Mi4KKworMjAwOS0wMy0yNCAyMTozOToyMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKKwkgIGRvY3M6IGdzdC1sYXVuY2ggbWFuIHBhZ2UgZml4CisJICBUaGUgY29tbWFuZCBsaW5lIG9wdGlvbiBpcyAtLWdzdC1kZWJ1Zy1kaXNhYmxlLCBub3QgLS1nc3QtZGlzYWJsZS1kZWJ1Zy4KKwkgIEZpeGVzICM1NzY1NTYuIFNwb3R0ZWQgYnkgQm9nZGFuIEhhcmpvYy4KKworMjAwOS0wMy0yNCAxOTozMzo1NiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHV0aWxzLmM6CisJICBnc3R1dGlsczogaW1wcm92ZSBwcm9wZXJ0eSBzZXQgYW5kIGNvbnZlcnQgY29kZQorCSAgVXNlIHN0cmluZyBkZXNlcmlhbGlzYXRpb24gaW5zdGVhZCBvZiBjdXN0b20gcGFyc2luZyBjb2RlIHRvIGFsbG93IGZvciBhbGwKKwkgIHN1cHBvcnRlZCB3YXlzIG9mIHNwZWNpZnlpbmcgcHJvcGVydHkgdmFsdWVzLgorCSAgZml4ZXMgIzU3NjU4Mi4KKworMjAwOS0wMy0yMyAxNToxODoyMSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgorCSogZ3N0L2dzdGluZm8uYzoKKwkgIGJ1aWxkOiBkZWZpbmUgc3R1YnMgd2hlbiBkaXNhYmxpbmcgZ3N0LWRlYnVnIHN1YnN5c3RlbS4gRml4ZXMgIzU3NTkyMgorCSAgUnVubmluZyBjb25maWd1cmUgd2l0aCBlLmcuIC0tZGlzYWJsZS1kc3QtZGVidWcgd2FzIGNvbXBpbGluZyBvdXQgdGhlIGRlYnVnCisJICBzeXN0ZW0gKEFCSSBicmVhaykuIE5vdyBzdHVicyBhcmUgYWRkZWQgYW5kIG9ubHkgaWYgb25lIGRvZXMgZS5nLgorCSAgbWFrZSBDRkxBR1M9Ii1ER1NUX1JFTU9WRV9ESVNBQkxFRCIgdGhlIHN5bWJvbHMgYXJlIG9tbWl0dGVkLgorCisyMDA5LTAzLTIzIDEyOjM0OjM0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgYmFzZXNpbms6IGZpeCBvbmNlLXBlci1zZWNvbmQgJ2VtZXJnZW5jeSByZW5kZXJpbmcnIGZvciBjYXNlIHdoZXJlIGFsbCBidWZmZXJzIGJ1dCB0aGUgdmVyeSBmaXJzdCBhcmUgbGF0ZQorCSAgRHVlIHRvIGEgdHlwbyBiYXNlc2luayBkaWRuJ3QgZG8gYW55IGVtZXJnZW5jeSByZW5kZXJpbmcgb2YgbGF0ZSBidWZmZXJzCisJICBpZiB0aGUgb25seSBidWZmZXIgZXZlciByZW5kZXJlZCB3YXMgdGhlIGZpcnN0IG9uZSB3aXRoIHRpbWVzdGFtcCAwLiBUaGlzCisJICBtZWFucyB0aGF0IGluIGNhc2VzIHdoZXJlIHRoZSBkZWNvZGVyIGlzIHZlcnkgdmVyeSBzbG93LCB3ZSdkIG5ldmVyIHNlZQorCSAgYW55IGJ1ZmZlcnMgYnV0IHRoZSB2ZXJ5IGZpcnN0IG9uZSByZW5kZXJlZC4gRml4ZXMgIzU3NjM4MS4KKworMjAwOS0wMy0yMSAwMjozNDowNCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBkb2NzL3JhbmRvbS9yZWxlYXNlOgorCSAgZG9jczogdHdlYWsgdGhlIHJlbGVhc2UgcHJvY2VkdXJlIHNjcmlwdAorCisyMDA5LTAzLTIwIDE0OjEyOjU1ICswMTAwICBMUk4gPGxybjE5ODYgYXQgZ21haWwgZG90IGNvbT4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKKwkgIHdpbjMyOiBmaXggc2Vla2luZyBpbiBmaWxlcyA+NEdCCisJICBVc2UgNjQtYml0IGZ1bmN0aW9ucyBvbiB3aW5kb3dzIHRvIGltcGxlbWVudCBzZWVraW5nIGluIGZpbGVzIGJpZ2dlcgorCSAgdGhhbiA0R0IuCisJICBGaXhlcyAjNTc1OTg4CisKKzIwMDktMDMtMjAgMTE6MjY6MzAgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6CisJICBjb250cm9sbGVyOiBGaXggZ2VuZXJhdGlvbiBvZiBjb250cm9sLWNoYW5nZSBhcnJheXMuCisJICBXaGVuIGdlbmVyYXRpbmcgYXJyYXlzIG9mIGNvbnRyb2wgY2hhbmdlcyB0aW1lc3RhbXAgdmFyaWFibGUgd2FzIHVzZWQgaW5zdGVhZAorCSAgdGhlIGxvY2FsIHRzIHZhcmlhYmxlIHRoYXQgd2UgaW5jcmVtZW50IHdoZW4gc3RlcHBpbmcgdGhyb3VnaCB0aGUgYXJyYXkuCisJICBQb2ludGVkIG91dCBieSBNYXJ0aW4gUG9rb3JueS4KKworMjAwOS0wMy0yMCAwMDo0Mjo1MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RpbmZvLmM6CisJICBkZWJ1Z2dpbmc6IG1ha2UgR1NUX1BUUl9GT1JNQVQgd29yayBmb3IgcXVlcmllcyBhcyB3ZWxsCisKKzIwMDktMDMtMjAgMDA6Mzk6NDEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdHF1ZXJ5Lmg6CisJICBBUEk6IGFkZCBHU1RfUVVFUllfQ0FTVAorCSAgYmVjYXVzZSB3ZSBjYW4sIGFuZCBmb3IgY29uc2lzdGVuY3kuCisKKzIwMDktMDMtMTkgMjE6Mjc6NDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgorCSAgZ3N0Y2hlY2s6IGZpeCBmb3IgY2hlY2sgdmVyc2lvbnMgPiAwLjkuNgorCSAgQSBuZXcgYXJndW1lbnQgYWxsb3dlZF9leGl0X3ZhbHVlIHdhcyBhZGRlZCBpbiBTVk4gcmVjZW50bHkgKCM1NzQyMTMpLgorCisyMDA5LTAzLTE5IDE3OjE5OjQ5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBnc3RwYWQ6IGZpeCBnc3RfcGFkX2Nhbl9saW5rCisJICBXZSB3ZXJlIGNvbnZlcnRpbmcgdGhlIEdzdFBhZExpbmtSZXR1cm4gdG8gYSBnYm9vbGVhbiwgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudAorCSAgdG8gZG8uCisKKzIwMDktMDMtMTkgMTA6NDQ6MTMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6CisJICBnc3QtdW5pbnN0YWxsZWQ6IGFkZCBnc3QtcnRzcC1zZXJ2ZXIgYml0cyBhbmQgYnJlYWsgdXAgb3Zlcmx5IGxvbmcgbGluZXMKKwkgIEFkZCBzb21lIG9mIHRoZSBiaXRzIG5lZWRlZCBmb3IgYW4gdW5pbnN0YWxsZWQgZ3N0LXJ0c3Atc2VydmVyIChzbyBnZGIgd29ya3MKKwkgIG9uIHRoZSBleGFtcGxlcyBldGMuKS4gUHl0aG9uIGJpdHMgYXJlIHN0aWxsIG1pc3NpbmcsIGFuZCB3ZSBtaWdodCBuZWVkIGFuCisJICAtdW5pbnN0YWxsZWQucGMgZmlsZSBhcyB3ZWxsIGluIHRoZSBmdXR1cmUuIEJyZWFrIHVwIHZlcnkgbG9uZyBsaW5lcyB0byBtYWtlCisJICB0aGVtIGVhc2llciB0byByZWFkIGFuZCBtYWludGFpbi4gQWxzbyByZW1vdmUgZ3N0LXBsdWdpbnMgcGF0aHMgZnJvbSB0aGUKKwkgIG9sZCBkYXlzLgorCisyMDA5LTAzLTE5IDExOjQ2OjExICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL3JhbmRvbS93dGF5L3J3bG9ja3M6CisJICBkb2NzOiBpbnRlcmVzdGluZyBpZGVhIGZvciBmYXN0IHJ3IGxvY2tzCisJICAtLQorCisyMDA5LTAzLTE5IDExOjExOjQzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGRlZnM6IGFkZCBuZXcgc3ltYm9sIHRvIHdpbmRvd3MgLmRlZiBmaWxlCisJICBBZGQgdGhlIG5ldyB3aW5kb3dzIGNtZC5leGUgY29sb3JpbmcgbWV0aG9kIHRvIHRoZSAuZGVmIGZpbGUuCisKKzIwMDktMDMtMTggMTY6Mzg6NTEgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkgIGRvY3M6IG1vcmUgaW5mbyBhYm91dCB3aGVuIHN0YXRlIGNoYW5nZXMgY2FuIGJlIGFzeW5jIGFuZCB3aGVuIG5vdC4KKworMjAwOS0wMy0xOCAxOTowNzowMCArMDEwMCAgRGFtaWVuIExlc3BpYXUgPGRhbWllbi5sZXNwaWF1IGF0IGdtYWlsLmNvbT4KKworCSogZ3N0L2dzdGluZm8uaDoKKwkgIGluZm86IG1vcmUgaW5kZW50YXRpb24gZml4ZXMKKwkgIEZpeGVzICM1MTcyMzEuCisKKzIwMDktMDMtMTggMTk6MDY6MjMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RpbmZvLmg6CisJICBpbmZvOiBpbmRlbnRhdGlvbiBmaXgKKworMjAwOS0wMy0xOCAxODo1NzoxNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGluZm8uYzoKKwkgIGluZm86IHNpbXBseSBzb21lIG1vcmUKKworMjAwOS0wMy0xOCAxODo0NTo0MSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3RpbmZvLmM6CisJICBpbmZvOiByZWZhY3RvciBkZWJ1ZyBjb2xvcnMgZm9yIHdpbjMyIGFuZCBvdGhlcgorCSAgUmVmYWN0b3IgdGhlIGRlYnVnIGxpbmUgY29kZSB0byB1c2UgYXMgbXVjaCBjb2RlIGFzIHBvc3NpYmxlIGZvciB0aGUgd2luMzIgYW5kCisJICBvdGhlciBjb2xvciBjb2RpbmdzLgorCSAgVXBkYXRlIGRvY3Mgd2l0aCBuZXcgc3ltYm9sLgorCisyMDA5LTAzLTE4IDE3OjMwOjEyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0LmM6CisJKiBnc3QvZ3N0aW5mby5jOgorCSogZ3N0L2dzdGluZm8uaDoKKwkgIHdpbmRvd3M6IGluaXRpYWwgY29tbWl0IGZvciB0ZXJtaW5hbCBjb2xvcnMKKworMjAwOS0wMy0xOCAxNzowMToxNiArMDEwMCAgWmVlc2hhbiBBbGkgKEtoYXR0YWspIDx6ZWVzaGFuYWsgYXQgZ25vbWUgZG90IG9yZz4KKworCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5oOgorCSogZ3N0L2dzdHV0aWxzLmM6CisJKiBnc3QvZ3N0dXRpbHMuaDoKKwkgIGdzdHBhZDogZml4IGdzdF9wYWRfY2FuX2xpbmsoKQorCSAgTW92ZSB0aGUgZ3N0X3BhZF9jYW5fbGluaygpIGltcGxlbWVudGF0aW9uIGZyb20gZ3N0dXRpbHMgdG8gZ3N0cGFkIGFuZCB1c2UKKwkgIGdzdF9wYWRfbGlua19wcmVwYXJlKCkgdG8gbWFrZSBpdCB3b3JrIGNvcnJlY3RseSBhbmQgYWxzbyBjaGVjayB0aGUgY2Fwcy4KKwkgIE1ha2UgdGhlIGJyb2tlbiBpbXBsZW1lbnRhdGlvbiBpbiBnc3R1dGlscyBzdGF0aWMuCisJICBTbWFsbCBjbGVhbnVwcyBpbiB0aGUgX2dldF9maXhlZF9jYXBzKCkgZnVuY3Rpb24uCisJICBGaXhlcyAjNTc1NjgyLgorCisyMDA5LTAzLTE3IDIwOjQxOjQ0ICswMDAwICBEYXZpZCBBZGFtIDx6YW5jaGV5QHVjYy5ndS51d2EuZWR1LmF1PgorCisJKiBnc3QvZ3N0LmM6CisJICBjb25maWcuaCBuZWVkcyB0byBiZSBpbmNsdWRlZCBmaXJzdCwgZWl0aGVyIGRpcmVjdGx5IG9yIHZpYSBnc3RfcHJpdmF0ZS5oCisJICBGaXhlcyBidWlsZCB3aXRoIC1XZXJyb3IgY2F1c2VkIGJ5ICdfRklMRV9PRkZTRVRfQklUUyByZWRlZmluZWQnIHdhcm5pbmcgb24KKwkgIE9wZW5Tb2xhcmlzIHdoZXJlIF9GSUxFX09GRlNFVF9CSVRTIG1heSBiZSBkZWZpbmVkIGJvdGggaW4gb3VyIGNvbmZpZy5oCisJICBhbmQgdmlhIHN0ZGlvLmggKCM1NzU2OTUpLgorCisyMDA5LTAzLTE3IDE5OjAyOjI2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9mYXEvZGV2ZWxvcGluZy54bWw6CisJICBmYXE6IHJlbW92ZSBvdXRkYXRlZCBiaXRzIGZyb20gaW5kZW50aW5nIHNlY3Rpb24KKworMjAwOS0wMy0xNyAxMjowNTozMyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0YmluLmM6CisJICBiaW46IGZvcndhcmQgc2VnbWVudC1zdGFydCBsaWtlIHNlZ21lbnQtZG9uZSBpZiBwYXJlbnQgaXMgYWxzbyBhIGJpbiwgZml4ZXMgIzU3NTU5OC4KKwkgIEJpbiBjb2xsZWN0cyBzZWdtZW50LXN0YXJ0IG1lc3NhZ2VzIGFuZCBzZWdlbnQtZG9uZSBtZXNzYWdlcy4gaXQgcG9zdHMgYQorCSAgc2VnbWVudC1kb25lIG1lc3NhZ2UgdG8gaXRzIHBhcmVudCwgb25jZSBpdCBoYXMgcmVjZWl2ZWQgYSBzZWdtZW50LWRvbmUgZm9yCisJICBlYWNoIHNlZ21lbnQtc3RhcnQuIEltaG8gaXQgc2hvdWxkIGFsc28gc2VuZCBhIHNlZ21lbnQtc3RhcnQgaWYgaXQgcmVjZWl2ZXMgdGhlCisJICBmaXJzdCBzZWdtZW50IHN0YXJ0IGFuZCBpZiBwYXJlbnQgaXMgIT1OVUxMLiBUaGlzIGlzIG5lZWRlZCBmb3IgYmlucyBpbiBiaW5zLAorCSAgc28gdGhhdCBhbHNvIGhpZ2hlciBvcmRlciBiaW5zIGNhbiBncm91cCBzZWdtZW50LXN0YXJ0cyBhbmQgc2VnbWVudC1kb25lcy4KKwkgIFJpZ2h0IG5vdyBoaWdoZXIgb3JkZXIgYmlucyB3aWxsIHBvc3QgYSBzZWdtZW50LWRvbmUgZm9yIGVhY2ggc2VnbWVudC1kb25lCisJICByZWNlaXZlZC4KKworMjAwOS0wMy0xNiAyMDoxMjo0NSArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogZG9jcy9mYXEvZ2l0LnhtbDoKKwkgIGZhcTogZml4IHR5cG8gaW4gZ2l0IGNvbW1hbmQKKworMjAwOS0wMy0xNSAyMzo0MDozNiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKKwkgIHN5c3RlbWNsb2NrOiB0aGVzZSB3YXJuaW5ncyBhcmUgc2VyaW91cywgZ2l2ZSBtb3JlIGRldGFpbCBpbiB0aGUgbWVzc2FnZQorCisyMDA5LTAzLTE1IDIzOjM3OjI5ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKKwkgIGNvbGxlY3RwYWRzOiBhZGQgZGVidWcgbG9nZ2luZyB0byBtYWtlIGl0IGVhc2llciB0byB0cmFjZSBpdAorCisyMDA5LTAzLTEzIDEwOjU2OjU0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dXRpbHMuaDoKKwkgIEZpeCBpbmRlbnRhdGlvbiBvZiAuaCBmaWxlcworCSAgLS0KKworMjAwOS0wMy0xMiAxMjoyMDoyNSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSAgdGFnbGlzdHM6IGFwcGx5IGZpeCBmb3IgcmVwbGFjZSBhbGwgYWxzbyB0byBnc3RfdGFnX2xpc3RfYWRkX3ZhbGlzdF92YWx1ZXMuIEZpeGVzICM1NzQyNDEKKworMjAwOS0wMy0xMiAxMDo0ODoyMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdGJ1ZmZlci5oOgorCSogZ3N0L2dzdGV2ZW50Lmg6CisJKiBnc3QvZ3N0bWVzc2FnZS5oOgorCSogZ3N0L2dzdHBhZC5oOgorCSogZ3N0L2dzdHF1ZXJ5Lmg6CisJICBkb2NzOiBJbXByb3ZlIHNvbWUgZG9jcworCSAgUmVuYW1lIHNvbWUgZnVuY3Rpb24gdmFyaWFibGVzIGFuZCBhZGQgc29tZSBSZXR1cm46IHRvIG1ha2UgdGhlIGRvY3MgbW9yZSBoYXBweS4KKworMjAwOS0wMy0xMiAwMDo0MToyNCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0aXRlcmF0b3IuYzoKKwkgIGRvY3M6IGZpeCBsaW5raW5nIHRvIGNvbnN0YW50IGFuZCBmdW5jdGlvbnMKKworMjAwOS0wMy0xMSAxNToyMDozNiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgorCSAgZHVtcDJkb3Q6IGVsbGlwc2l6ZSBjYXBzIGZpZWxkcywgYmV0dGVyIHBsYWNlbWVudCBvZiB1bm5lZ290aWF0ZWQgY2FwcworCSAgTG9uZyBjYXBzIGZpZWxkcyBsaWtlIGVudW1zIGFyZSBlbGxpcHNpc2VkLiBJZiBjYXBzIGFyZSBub3QgbmVnb3RpYXRlZCwgdXNlCisJICBoZWFkLSBhbmQgdGFpbGxhYmVsIHRvIHBsYWNlIHRoZW0gY2xvc2VyIHRvIHRoZSBwYWRzLiBVc2Ugc21hcnRlciB3YXkgdG8gaW5kZW50LgorCisyMDA5LTAzLTExIDEwOjI3OjE2ICswMjAwICBMYXN6bG8gUGFuZHkgPGxhc3psb2syQGdtYWlsLmNvbT4KKworCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKKwkgIGR1bXAyZG90OiBtYWtlIGNhcHMgaW4gRE9UIGRlYnVnIGdyYXBocyBtb3JlIHJlYWRhYmxlLiBGaXhlcyA1NzQ0ODQKKwkgIFVzZSBhIG1vbm9zcGFjZSBmb250IGZvciBlZGdlIGxhYmVscyBhbmQgaW5kZW50LgorCisyMDA5LTAzLTExIDE0OjExOjMwICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBhZHRlbXBsYXRlLmM6CisJICBwYWR0ZW1wbGF0ZTogQWxsb3cgJXUgYXMgY29udmVyc2lvbiBtb2RpZmllciBhZGRpdGlvbmFsIHRvICVkIGFuZCAlcworCisyMDA5LTAzLTExIDExOjIzOjA1ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIGdzdGJhc2VzcmM6IHVuc2lnbmVkIGxvbmcgaXMgIiVsdSIsIG5vdCAiJXVsIi4gRml4ZXMgYnVpbGQgb24gbWFjb3N4CisKKzIwMDktMDMtMTAgMjE6MDg6MzQgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdGdob3N0cGFkLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgorCSAgbG9nZ2luZzogc29tZSBhZGRpdGlvbmFsIGxvZ2dpbmcgZm9yIHRyYWNpbmcgY2FwcyBuZWdvdGlhdGlvbi4KKwkgIERlbW90ZSBvbmUgbG9nIHRoYXQgY2FuIGNvbWUgcXVpdGUgb2Z0ZW4uIFJlbW92ZSBvbmUgZml4bWUgdGhhdCBpcyBkb25lLiBBcHBseQorCSAgZ3N0LWluZGVudCBjaGFuZ2VzLgorCisyMDA5LTAzLTEwIDIxOjAzOjQ0ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RvYmplY3QuYzoKKwkgIGNvbW1lbnQ6IGFkZCBhIGZpeG1lLTAuMTEKKworMjAwOS0wMy0xMCAyMTowMToyMSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBkb2NzL2Rlc2lnbi9wYXJ0LWJsb2NrLnR4dDoKKwkgIGZvcm1hdHRpbmc6IHRhYnMgdG8gc3BhY2VzCisKKzIwMDktMDMtMDkgMjM6MTE6MjQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIDcwMzIxNjMgdG8gZjhiM2Q5MQorCisyMDA5LTAzLTA5IDIwOjA3OjEyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0cmVhbWVyLnNwZWMuaW46CisJICBnc3RyZWFtZXIuc3BlYzogZml4IHN0cmF5IEBHTElCMl9SRVFAIHRoYXQgZGlkbid0IGdldCBleHBhbmRlZCBwcm9wZXJseQorCisyMDA5LTAzLTA5IDE2OjA5OjM4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL21hbnVhbC9iYXNpY3MtYnVzLnhtbDoKKwkgIGRvY3M6IHJld29yZCBzdHVmZiBhYm91dCBjdXN0b20gbWFpbmxvb3BzCisJICBGaXhlcyAjNTc0MjI5LgorCisyMDA5LTAzLTA5IDE2OjAxOjIwICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6CisJICBkdW1wMmRvdDogZG9uJ3QgdXNlIEdTVF9USU1FX0ZPUk1BVCB3aGVuIGJ1aWxkaW5nIGZpbGVuYW1lcy4gZml4ZXMgIzU3NDYyMworCisyMDA5LTAzLTA5IDExOjM5OjM0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkLmg6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6CisJICBwYWQ6IGNhbGwgbmV3IGNhbGxiYWNrcyBzZXQgaW4gdGhlIGJsb2NrIGNhbGxiYWNrCisJICBLZWVwIHRyYWNrIG9mIHdoZW4gYSBuZXcgY2FsbGJhY2sgaXMgaW5zdGFsbGVkIGluIHRoZSBjYWxsYmFjayBhbmQgY2FsbCB0aGUgbmV3CisJICBjYWxsYmFjayBpbiB0aGF0IGNhc2UuCisJICBBZGQgdW5pdCB0ZXN0IGZvciBjaGVja2luZyBwYWQgYmxvY2tpbmcuCisJICBGaXhlcyAjNTczODIzLgorCisyMDA5LTAzLTA4IDE3OjIyOjQzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgorCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jOgorCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5oOgorCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKKwkgIHdpbjMyOiB1cGRhdGUgZW51bXR5cGVzIGFuZCBjb25maWcuaAorCisyMDA5LTAzLTA4IDE3OjE1OjMzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHRhZ2xpc3QuYzoKKwkgIGRvY3M6IGltcHJvdmUgZG9jcyBmb3IgZ3N0X3RhZ19saXN0X2dldF9kYXRlKigpCisJICBNZW50aW9uIHRoYXQgdGhlIGRhdGUgdmFsdWUgbmVlZHMgdG8gYmUgZnJlZWQgYW5kIGhvdyB0byBmcmVlIGl0LgorCisyMDA5LTAzLTA4IDEyOjAyOjE1ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIGZmYTczOGQgdG8gNzAzMjE2MworCisyMDA5LTAzLTA4IDExOjE3OjUwICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIDNmMTNlNGUgdG8gZmZhNzM4ZAorCisyMDA5LTAzLTA4IDAwOjI3OjI2ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6CisJICBkdW1wMmRvdDogaW1wcm92ZSBjYXBzIGxvZ2dpbmcKKwkgIEZhY3RvciBvdXQgY29kZSB0byBkZXNjcmliZSBjYXBzLiBJbXByb3ZlIGZvcm1hdGluZyAobm8gXG4gaW4gY2FwcyBmaWVsZHMpLgorCSAgQ2hlY2sgcGVlciBjYXBzIHRvbyBhbmQgc2hvdyBib3RoIGlmIHRoZXkgZGlmZmVyLgorCisyMDA5LTAzLTA3IDExOjQzOjMxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIDNjNzQ1NmIgdG8gM2YxM2U0ZQorCisyMDA5LTAzLTA3IDEwOjQzOjMyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIDU3YzgzZjIgdG8gM2M3NDU2YgorCisyMDA5LTAzLTA2IDIyOjEwOjEwICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKKwkgIGNvbGxlY3RwYWRzOiByZXZlcnQgYWNjaWRlbnRpYWwgY29tbWl0IGZyb20gdGhlIHF1ZXVlIChtZSBzaG91bGQgc3RhcnQgdXNpbmcgYnJhbmNoZXMpCisKKzIwMDktMDMtMDYgMjE6NTk6MjAgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdGNhcHMuYzoKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkgIGFwaWRvY3M6IG1hcmt1cCBleGFtcGxlIGFzIGhpZ2hsaWdodGFibGUgZXhhbXBsZSBhbmQgY29weSBzYW1lIGZvciBzdHJ1Y3R1cmUKKwkgIHN0cnVjdHVyZXMgY2FuIGJlIHByaW50ZWQgbGlrZSB3ZSBjYW4gZG8gZm9yIGNhcHMuIE1hcmsgdGhlIGV4YW1wbGUgc28gdGhhdAorCSAgZ3RrLWRvYyBjYW4gcHJldHR5IHByaW50IGFuZCB4cmVmIGl0LgorCisyMDA5LTAzLTA0IDIxOjIxOjU2ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKKwkgIGNvbGxlY3RwYWRzOiByZWxpYWJseSBnbyB0byBlb3MuIEZpeGVzICM1NzQxNjAKKwkgIFVwZGF0ZSBjb2xsZWN0cGFkcyBzdGF0dXMgd2hlbiByZW1vdmluZyBwYWRzLgorCisyMDA5LTAzLTA2IDEyOjA4OjQyICswMTAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyby5kZWNpbmFAY29sbGFib3JhLmNvLnVrPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6CisJICBpZGVudGl0eTogaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgb2YgZ3N0X3BhZF9ldmVudF9kZWZhdWx0IHdoZW4gc2VuZGluZyBvdXQgdGhlIG5ld3NlZ21lbnQgZXZlbnQgaW4gc2luZ2xlLXNlZ21lbnQgbW9kZS4KKwkgIFRoaXMgbWFrZXMgaWRlbnRpdHkgc2luZ2xlLXNlZ21lbnQ9dHJ1ZSAhIG9nZ211eCB3b3JrIGFnYWluIGFmdGVyIGEgY2hhbmdlIGluCisJICBvZ2dtdXggKGNvbW1pdCBiMGUzZDQ0OSBpbiAtYmFzZSkuCisKKzIwMDktMDMtMDUgMTc6NDI6MjIgKzAxMDAgIEFuZHkgV2luZ28gPHdpbmdvQG9ibG9uZy5uZXQ+CisKKwkgIGJhc2VzaW5rOiBwcm9wYWdhdGUgVVBTVFJFQU0gZXZlbnRzIGluIHB1bGwgbW9kZSB0b28KKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jIChnc3RfYmFzZV9zaW5rX3NlbmRfZXZlbnQpOiBQcm9wYWdhdGUKKwkgIHVwc3RyZWFtIGV2ZW50cyBpbiBwdWxsIG1vZGUgdG9vLgorCisyMDA5LTAzLTA1IDExOjI5OjQ4ICswMTAwICBBbnRvaW5lIFRyZW1ibGF5IDxoZXhhMDBAZ21haWwuY29tPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBHc3RQYWQ6IHJlbGF4IGZhaWx1cmUgdG8gZGVhY3RpdmF0ZSB1bmxpbmtlZCBwYWRzCisJICBXaGVuIGRlL2FjdGl2YXRpbmcgYSBwYWQgaW4gcHVsbCBtb2RlIHRoZSBwYWQgbmVlZHMgdG8gZGUvYWN0aXZhdGUgdGhlCisJICBwZWVyIHBhZCBpdCBpcyBjb25uZWN0ZWQgdG8sIGZhaWx1cmUgdG8gYmUgYWJsZSB0byBkbyB0aGlzIGluIGFjdGl2YXRpb24gbW9kZQorCSAgaXMgYW4gZXJyb3IuCisJICBIb3dldmVyIGlmIHRoZXJlIGlzIG5vIHBlZXJwYWQsIHdlIGNhbiBzdGlsbCBkZWFjdGl2YXRlIHRoZSBwYWQgY29ycmVjdGx5IGFuZAorCSAgYXNzdW1lIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGRlYWN0aXZhdGUgdGhlIHVubGlua2VkIHBlZXIgcGFkIGV2ZW50dWFsbHkuCisJICBGaXhlcyAjNTc0MTYzLgorCisyMDA5LTAzLTA1IDExOjAyOjU5ICswMTAwICBMUk4gPGxybjE5ODYgYXQgZ21haWwgZG90IGNvbT4KKworCSogZ3N0L2dzdHBvbGwuYzoKKwkgIEdzdFBvbGw6IHNldCB0aGUgcmV0dXJuIHZhbHVlIG9uIHdpbmRvd3MKKwkgIE1ha2Ugc3VyZSB0aGF0IHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9ucyBfcmVhZC9fd3JpdGVfY29udHJvbCgpCisJICByZXR1cm4gdGhlIGFjdHVhbCByZXN1bHQgaW5zdGVhZCBvZiBhbHdheXMgRkFMU0Ugb24gd2luZG93cy4KKwkgIEZpeGVzICM1NzQyMTEuCisKKzIwMDktMDMtMDQgMTA6NDY6MTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL3B3Zy9hZHZhbmNlZC1uZWdvdGlhdGlvbi54bWw6CisJKiBkb2NzL3B3Zy9idWlsZGluZy1ib2lsZXIueG1sOgorCSAgcHdnOiB1cGRhdGUgZm9yIENWUy10by1naXQgbWlncmF0aW9uCisJICBGaXhlcyAjNTczOTQ2LgorCisyMDA5LTAzLTA0IDA5OjIwOjQzICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKKwkgIEdzdEFkYXB0ZXI6IERpc2NhcmQgZW1wdHkgYnVmZmVycyBpbiBfcHVzaCgpLiBGaXhlcyAjNTc0MDI0CisKKzIwMDktMDMtMDMgMjA6MDE6NDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiAuZ2l0aWdub3JlOgorCSAgVXBkYXRlIC5naXRpZ25vcmUKKworMjAwOS0wMy0wMyAxOTo1ODo1MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDoKKwkgIGdzdC11bmluc3RhbGxlZDogYWRkIGJpdHMgZm9yIHVuaW5zdGFsbGVkIGNoZWNrb3V0cyBvZiBnc3Qtb3Blbm1heCBhbmQgdG90ZW0KKworMjAwOS0wMy0wMiAxNjoxNzo0NSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0LmM6CisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkqIGdzdC9nc3R1dGlscy5oOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIEFQSTogQWRkIGdzdF91dGlsX2FycmF5X2JpbmFyeV9zZWFyY2goKSBmb3IgYmluYXJ5IHNlYXJjaHMgb24gYSBzb3J0ZWQgYXJyYXkKKwkgIFRoaXMgd2lsbCBiZSBtb3N0bHkgdXNlZnVsIGluIGFsbCBlbGVtZW50cyB0aGF0IGhhdmUgc29tZSBraW5kIG9mIGludGVybmFsCisJICBzZWVrL2luZGV4IHRhYmxlLiBDdXJyZW50bHkgYWxtb3N0IGFsbCBvZiB0aGVtIChvciBldmVuIGFsbCBvZiB0aGVtKQorCSAgYXJlIHVzaW5nIGEgbGluZWFyIHNlYXJjaCBhbHRob3VnaCB0aGUgdXNlZCBhcnJheSBpcyBhbHJlYWR5IHNvcnRlZCwKKwkgIHdhc3Rpbmcgc29tZSBDUFUgdGltZSB3aXRob3V0IGdvb2QgcmVhc29uLgorCSAgRml4ZXMgYnVnICM1NzM2MjMuCisKKzIwMDktMDItMjggMTE6MTU6MjkgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJKiBjb25maWd1cmUuYWM6CisJKiBnc3QvZ3N0dXRpbHMuaDoKKwkgIEJ1bXAgZ2xpYiByZXF1aXJlbWVudCB0byAyLjE0CisJICBBbHNvIHJlbW92ZSBjb2RlIGNvbmRpdGlvbmFsIG9uIDwgMi4xNC4KKworMjAwOS0wMi0yOCAxMzozNDowOCAtMDUwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgorCisJKiB3aW4zMi9NQU5JRkVTVDoKKwkgIFJlbW92ZSB3aW4zMi9jb21tb24vY29uZmlnLmguaW4gZnJvbSBNQU5JRkVTVCwgaXQgbm8gbG9uZ2VyIGV4aXN0cworCisyMDA5LTAyLTI3IDEzOjM1OjM1ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKKwkgIGNhcHNmaWx0ZXI6IFByb3Blcmx5IHJlc2V0IHRoZSBjYXBzZmlsdGVyIHdoZW4gc2V0dGluZyBjYXBzIEFOWS4KKworMjAwOS0wMi0yNyAxMjozNDoyOSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9kZXNpZ24vZHJhZnQtZnJhbWVzdGVwLnR4dDoKKwkgIGRlc2lnbjogdXBkYXRlIHRoZSBmcmFtZXN0ZXAgZHJhZnQKKwkgIFVwZGF0ZSB0aGUgZG9jcyBhIGxpdHRsZS4KKwkgIEFkZCBwcm9wZXJ0eSB0byBhbGxvdyBpbmNyZW1lbnRhbCBzdGVwcGluZyBzbyB0aGF0IHdlIGNhbiByZWR1Y2UgZXhjZXNzaXZlCisJICBxdWV1ZWluZy4KKworMjAwOS0wMi0yNiAxNTo0MDoyNiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBiYXNlc2luazogbW92ZSBsZWZ0IG92ZXIgaGFuZGxpbmcgb2YgdGhlIGVycm9yIGNhc2UgdG8gdGhlIGFjdGl2YXRlX2ZhaWxlZCBsYWJlbC4KKwkgIElmIHdhcyBsZWZ0IGFzIGRlYWQgY29kZS4KKworMjAwOS0wMi0yNSAxOTo1OTo1NyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBjb21tb246CisJKiBjb25maWd1cmUuYWM6CisJICBidWlsZDogVXBkYXRlIHNoYXZlIGluaXQgc3RhdGVtZW50IGZvciBjaGFuZ2VzIGluIGNvbW1vbi4gQnVtcCBjb21tb24uCisKKzIwMDktMDItMjUgMTA6NTE6NTcgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6CisJICBiaW5hcnkgcmVnaXN0cnk6IERvbid0IGF0dGVtcHQgdG8gcGFyc2UgZW1wdHkgY2FwcworCisyMDA5LTAyLTI1IDE0OjE5OjA4ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6CisJICByZWdpc3RyeTogU2V0IHR5cGVmaW5kIGZhY3RvcnkgY2FwcyB0byBOVUxMIGluc3RlYWQgb2YgZW1wdHkgY2FwcyBpZiB0aGV5IG9yaWdpbmFsbHkgd2VyZSBOVUxMCisKKzIwMDktMDItMjUgMTE6MzE6MzggKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIDljZjhjOWIgdG8gYTZjZTVjNgorCisyMDA5LTAyLTI0IDE1OjEwOjE1ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6CisJICByZWdpc3RyeWJpbmFyeTogQ2hlY2sgaWYgdHlwZWZpbmQgZmFjdG9yeSBjYXBzIGFyZSBOVUxMIGJlZm9yZSBjb3B5aW5nIHRoZW0KKworMjAwOS0wMi0yNCAxMTo0MDoxNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgIFJlbW92ZSB1bmRlY2xhcmVkIHN5bWJvbHMgZnJvbSBkb2NzCisJICBSZW1vdmUgc29tZSB1bmRlY2xhcmVkIHN5bWJvbHMgZnJvbSB0aGUgZG9jcy4KKworMjAwOS0wMi0yMyAxMzowMToxMSAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkqIE1ha2VmaWxlLmFtOgorCSogY29uZmlndXJlLmFjOgorCSogd2luMzIvY29tbW9uL2NvbmZpZy5oLmluOgorCSAgQ2hhbmdlIGhvdyB3aW4zMi9jb21tb24vY29uZmlnLmggaXMgdXBkYXRlZAorCSAgR2VuZXJhdGUgd2luMzIvY29tbW9uL2NvbmZpZy5oLW5ldyBkaXJlY3RseSBmcm9tIGNvbmZpZy5oLmluLAorCSAgdXNpbmcgc2hlbGwgdmFyaWFibGVzIGluIGNvbmZpZ3VyZSBhbmQgc29tZSBoYXJkLWNvZGVkIGluZm9ybWF0aW9uLgorCSAgQ2hhbmdlIHRvcC1sZXZlbCBtYWtlZmlsZSBzbyB0aGF0ICdtYWtlIHdpbjMyLXVwZGF0ZScgY29waWVzIHRoZQorCSAgZ2VuZXJhdGVkIGZpbGUgdG8gd2luMzIvY29tbW9uL2NvbmZpZy5oLCB3aGljaCB3ZSBrZWVwIGluIHNvdXJjZQorCSAgY29udHJvbC4gIEl0J3Mga2VwdCBpbiBzb3VyY2UgY29udHJvbCBzbyB0aGF0IHRoZSBnaXQgdHJlZSBpcworCSAgYnVpbGRhYmxlIGZyb20gVlMuCisKKzIwMDktMDItMjMgMTA6NTI6MTQgLTA4MDAgIERhdmlkIEZseW5uIDxkYXZpZGZAcmQuYmJjLmNvLnVrPgorCisJKiBwa2djb25maWcvZ3N0cmVhbWVyLWJhc2UtdW5pbnN0YWxsZWQucGMuaW46CisJKiBwa2djb25maWcvZ3N0cmVhbWVyLWNoZWNrLXVuaW5zdGFsbGVkLnBjLmluOgorCSogcGtnY29uZmlnL2dzdHJlYW1lci1jb250cm9sbGVyLXVuaW5zdGFsbGVkLnBjLmluOgorCSogcGtnY29uZmlnL2dzdHJlYW1lci1kYXRhcHJvdG9jb2wtdW5pbnN0YWxsZWQucGMuaW46CisJKiBwa2djb25maWcvZ3N0cmVhbWVyLW5ldC11bmluc3RhbGxlZC5wYy5pbjoKKwkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItdW5pbnN0YWxsZWQucGMuaW46CisJICBBZGQgc3JjZGlyIHRvIGluY2x1ZGVzIGZvciBvdXQtb2Ytc291cmNlIGJ1aWxkcworCSAgV2hlbiB5b3UgdXNlIGdzdHJlYW1lciB1bmluc3RhbGxlZCBhbmQgYnVpbGQgb3V0c2lkZQorCSAgdGhlIHNvdXJjZSB0cmVlLCB0aGUgaW5jbHVkZXMgbmVlZCB0byBiZSBzcGVjaWZpZWQgZm9yCisJICBib3RoIHRoZSBzb3VyY2UgdHJlZSBhbmQgdGhlIGJ1aWxkIHRyZWUuCisJICBTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworMjAwOS0wMi0yMyAxNzozNjoyMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJICBFcnJvciBvdXQgbW9yZSBzcGVjaWZpY2FsbHkgb24gZW1wdHkgY2FwcworCSAgV2hlbiB3ZSBnZXQgZW1wdHkgY2FwcyBmcm9tIHRoZSBnZXRjYXBzIGZ1bmN0aW9uIGluIHRoZSBkZWZhdWx0IG5lZ290aWF0ZQorCSAgZnVuY3Rpb24sIHBvc3QgYSBtb3JlIGRlc2NyaXB0aXZlIGVycm9yLgorCisyMDA5LTAyLTIzIDE1OjI0OjAwICswMTAwICBBbmR5IFdpbmdvIDx3aW5nb0BvYmxvbmcubmV0PgorCisJICBmaXggdXJpIGhhbmRsZXIgaXRlcmF0aW9uIGluIGdzdC1pbnNwZWN0CisJICAqIHRvb2xzL2dzdC1pbnNwZWN0LmMgKHByaW50X2FsbF91cmlfaGFuZGxlcnMpOiBXaG9vcHMsIGZpeCBpdGVyYXRpb24uCisJICBJJ20gc3R1cGlkLgorCisyMDA5LTAyLTIzIDEyOjMzOjEzICswMTAwICBMUk4gPGxybjE5ODYgYXQgZ21haWwgZG90IGNvbT4KKworCSogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwYWNrZXQuYzoKKwkqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzoKKwkgIEZpeCBzaWduZWQgd2hlbiBjb21waWxpbmcgd2l0aCBNU3lzL01pbkdXCisJICBmaXggc2lnbmVkIGlzc3VlcyB3aGVuIGNvbXBpbGluZyB3aXRoIE1TeXMvTWluR1cuCisJICBGaXhlcyAjNTcyNTkxLgorCisyMDA5LTAyLTIzIDEwOjUzOjE3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBEb24ndCBmb3J3YXJkIExBVEVOQ1kgZXZlbnQgd2hlbiBub3QgcmVhZHkKKwkgIFdoZW4gd2UgYXJlIG5vdCByZWFkeSB0byBoYW5kbGUgYSBsYXRlbmN5IHF1ZXJ5ICh3ZSBhcmUgbm90IHlldCBwcmVyb2xsZWQpIHdlCisJICBhbHNvIGRvbid0IHRyeSB0byBmb3J3YXJkIHRoZSBsYXRlbmN5IGV2ZW50IGJlY2F1c2UgdGhhdCBtaWdodCBjYXVzZSB1bmV4cGVjdGVkCisJICBlcnJvcnMgd2hlbiB1cHN0cmVhbSBpcyBub3QgeWV0IGxpbmtlZC4KKworMjAwOS0wMi0yMiAyMjowOTozOSArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogdGVzdHMvY2hlY2svY29yZToKKwkgIFJlbW92ZSBjb3JlIGZpbGUgZnJvbSBwcmV2aW91cyBjb21taXQKKworMjAwOS0wMi0yMiAyMDowMTowNSArMDEwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZEBnbWFpbC5jb20+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkLmg6CisJKiB0ZXN0cy9jaGVjay9jb3JlOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgorCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBHc3RQYWQ6IEFkZCBnc3RfcGFkX3NldF9ibG9ja2VkX2FzeW5jX2Z1bGwKKwkgIFRoaXMgYWxsb3dzIGNvbm5lY3RpbmcgYSBHRGVzdHJveU5vdGlmeSBmb3Igd2hlbiB0aGUgY2FsbGJhY2sgaXMgcmVtb3ZlZC9yZXBsYWNlZC4KKwkgIFBhcnRpYWxseSBmaXhlcyAjNTE0NzE3CisKKzIwMDktMDItMjIgMTk6MDU6MjAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0dXRpbHMuaDoKKwkgIEluY2x1ZGUgZmxvYXRpbmcgcG9pbnQgd3JpdGUvcmVhZCBmdW5jdGlvbnMgaW4gdGhlIGRvY3MgYnkgd29ya2luZyBhcm91bmQgYSBndGstZG9jIGJ1ZworCisyMDA5LTAyLTIyIDE4OjUzOjEwICswMTAwICBBbGkgU2FiaWwgPGFsaS5zYWJpbEBnbWFpbC5jb20+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkgIFVzZSB0aGUgY29ycmVjdCB1bnJlZiBmdW5jdGlvbgorCisyMDA5LTAyLTIyIDE4OjUxOjA4ICswMTAwICBBbGkgU2FiaWwgPGFsaS5zYWJpbEBnbWFpbC5jb20+CisKKwkqIGdzdC9nc3RidWZmZXIuaDoKKwkqIGdzdC9nc3RldmVudC5oOgorCSogZ3N0L2dzdG1lc3NhZ2UuaDoKKwkqIGdzdC9nc3RxdWVyeS5oOgorCSAgQ29udmVydCB1bnJlZi9jb3B5IGZ1bmN0aW9ucyBvZiBHc3RNaW5pT2JqZWN0IHN1YmNsYXNzZXMgdG8gc3RhdGljIGlubGluZSBmdW5jdGlvbnMKKwkgIHVucmVmIGFuZCBjb3B5IGZ1bmN0aW9ucyBhcmUgc29tZXRpbWVzIHVzZWQgYXMgZnVuY3Rpb24KKwkgIHBvaW50ZXJzIGZvciBleGFtcGxlIGluIHRoZSBjYXNlIG9mIGdfaGFzaF90YWJsZV9uZXdfZnVsbAorCSAgYXMgYSBHRGVzdHJveU5vdGlmeSBmdW5jdGlvbi4KKwkgIEN1cnJlbnRseSBHc3RCdWZmZXIsIEdzdEV2ZW50LCBHc3RNZXNzYWdlIGFuZCBHc3RRdWVyeQorCSAgZGVmaW5lIHRoZWlyIHJlc3BlY3RpdmUgdW5yZWYgYW5kIGNvcHkgZnVuY3Rpb25zIGFzCisJICBtYWNyb3MsIG1ha2luZyB1c2Ugb2YgZ3N0X21pbmlfb2JqZWN0X3VucmVmL2NvcHkuCisJICBUaGlzIGFwcHJvYWNoIHdvcmtzIHZlcnkgd2VsbCBmb3IgbW9zdCBjYXNlcywgZXhjZXB0CisJICBmb3Igc29tZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBiaW5kaW5ncyAoY3VycmVudGx5IFZhbGEpLAorCSAgd2hlcmUgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNlbWFudGljcyBhcmUgZGVmaW5lZAorCSAgZGVjbGFyYXRpdmVseS4KKwkgIFRoZSBwb3NzaWJsZSBzb2x1dGlvbnMgd291bGQgYmUgdG8gZWl0aGVyIGNvbnZlcnQgYWxsCisJICB0aGUgbWFjcm9zIGludG8gc3RhdGljIGlubGluZSBmdW5jdGlvbiwgb3IgY2hhbmdlIHRoZQorCSAgc2lnbmF0dXJlIG9mIGdzdF9taW5pX29iamVjdF91bnJlZiB0byB0YWtlIGEgdm9pZCoKKwkgIGluc3RlYWQgb2YgYSBHc3RNaW5pT2JqZWN0Ki4KKwkgIEZpeGVzIGJ1ZyAjNTcyNDgwLgorCisyMDA5LTAyLTIyIDE1OjIyOjE2ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgorCSogZG9jcy9saWJzL01ha2VmaWxlLmFtOgorCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgorCSAgVXNlIHNoYXZlIChodHRwOi8vZ2l0Lmxlc3BpYXUubmFtZS9jZ2l0L3NoYXZlLykgdG8gc2ltcGxpZnkgYnVpbGQgb3V0cHV0CisKKzIwMDktMDItMjIgMTU6NDQ6MzUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIDVkN2M5Y2MgdG8gOWNmOGM5YgorCisyMDA5LTAyLTIxIDExOjEzOjMwIC0wODAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSogY29tbW9uOgorCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCisJICBGcm9tIDgwYzYyN2QgdG8gNWQ3YzljYworCisyMDA5LTAyLTE5IDE4OjA1OjA3ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0YnVmZmVyLmg6CisJICBHc3RCdWZmZXJGbGFnczogQWRkICJTaW5jZTogMC4xMC4yMyIgZm9yIHRoZSBuZXdseSBhZGRlZCBmbGFncworCisyMDA5LTAyLTE5IDE2OjA0OjQzICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJKiBnc3QvZ3N0YnVmZmVyLmg6CisJICBHc3RCdWZmZXJGbGFnczogQWRkIDMgbmV3IG1lZGlhLXNwZWNpZmljIGJ1ZmZlciBmbGFncy4KKwkgIFBhcnRpYWxseSBmaXhlcyAjMTYzNTc3CisKKzIwMDktMDItMTkgMTI6NTc6MTcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiB0b29scy9nc3QtbGF1bmNoLmM6CisJICB0b29sczogcHJpbnQgbm9ybWFsIG91dHB1dCB0byBzdGRvdXQsIGFuZCBvbmx5IGVycm9ycyBhbmQgd2FybmluZ3MgdG8gc3RkZXJyIGluIGdzdC1sYXVuY2gKKwkgIExldCdzIG5vdCBwcmludCBldmVyeXRoaW5nIHRvIHN0ZGVyci4gU3VwcHJlc3Mgc29tZSBtb3JlICdub3JtYWwnIG1lc3NhZ2VzIHdoZW4gLS1xdWlldCB3YXMgcGFzc2VkLgorCisyMDA5LTAyLTE5IDEyOjQ1OjUzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgorCSAgdG9vbHM6IHVzZSBnX3ByaW50KigpIGluc3RlYWQgb2YgKnByaW50ZigpIGluIGdzdC1sYXVuY2gKKwkgIFdlIHNob3VsZCB1c2UgR0xpYidzIGdfcHJpbnQqKCkgZnVuY3Rpb25zIGZvciBwcmludGluZyBzdHVmZiBpbiBnc3QtbGF1bmNoLCBub3QgcHJpbnRmIGFuZCBmcmllbmRzLCBzaW5jZSB3ZSdyZSBwcmludGluZworCSAgdHJhbnNsYXRlZCBzdHJpbmdzLCB3aGljaCB3ZSBnZXQgaW4gVVRGLTggZW5jb2RpbmcsIGFuZCBHTGliJ3MgcHJpbnQgZnVuY3Rpb25zIGV4cGVjdCBVVEYtOCBlbmNvZGVkIHN0cmluZ3Mgd2hlcmVhcyBwcmludGYKKwkgIGV0IGFsLiBleHBlY3Qgc3RyaW5ncyBpbiB0aGUgbG9jYWxlIGVuY29kaW5nLCB3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSBVVEYtOC4KKwkgIEFsc28gYWRkIGEgUFJJTlQgY29udmVuaWVuY2UgbWFjcm8gc28gd2UgZG9uJ3QgaGF2ZSB0byBsaXR0ZXIgdGhlIGNvZGUgd2l0aCBpZiAoIXF1aWV0KSBzdGF0ZW1lbnRzLgorCisyMDA5LTAyLTE5IDExOjE4OjA3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9wd2cvYWR2YW5jZWQtdHlwZXMueG1sOgorCSogZG9jcy9wd2cvaW50cm8tYmFzaWNzLnhtbDoKKwkqIGRvY3MvcmFuZG9tL21pbWV0eXBlczoKKwkgIGRvY3M6IGZpeCBjb25zdGFudHMgZm9yIEdfTElUVExFX0VORElBTiBhbmQgR19CSUdfRU5ESUFOCisJICBXZSBnb3QgdGhlIGNvbnN0YW50cyBmb3IgR19MSVRUTEVfRU5ESUFOIGFuZCBHX0JJR19FTkRJQU4gdGhlIHdyb25nIHdheSBhcm91bmQgaW4gc29tZSBkb2NzIChmaXhlczogIzU3MjM5MikuIEFsc28gbWVudGlvbgorCSAgR19CWVRFX09SREVSIGluIHRoZSBhdWRpbyB0eXBlcyBzZWN0aW9uLgorCisyMDA5LTAyLTE5IDEwOjI1OjM0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIEFkZCBuZXcgc3ltYm9scyB0byBkZWYgZmlsZXMKKwkgIEFkZCB0aGUgbmV3IHJlcXVlc3RfbWVzc2FnZSBzeW1ib2xzIHRvIHRoZSB3aW5kb3dzIGRlZiBmaWxlLgorCisyMDA5LTAyLTE4IDE1OjMxOjU1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBkb2NzL2Rlc2lnbi9wYXJ0LW1lc3NhZ2VzLnR4dDoKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0bWVzc2FnZS5jOgorCSogZ3N0L2dzdG1lc3NhZ2UuaDoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZXNzYWdlLmM6CisJKiB0b29scy9nc3QtbGF1bmNoLmM6CisJICBBZGQgbWVzc2FnZSB0byByZXF1ZXN0IGEgc3RhdGUgY2hhbmdlCisJICBBZGQgYSBHU1RfTUVTU0FHRV9SRVFVRVNUX1NUQVRFIHRoYXQgY2FuIGJlIHBvc3RlZCBieSBlbGVtZW50IHdoZW4gdGhleSB3b3VsZAorCSAgbGlrZSB0byBoYXZlIHRoZSBhcHBsaWNhdGlvbiBjaGFuZ2UgdGhlIHN0YXRlIG9mIHRoZSBwaXBlbGluZS4gdGhlIHByaW1hcnkgdXNlCisJICBjYXNlIGlzIHRvIHBhdXNlIHRoZSBwaXBlbGluZSB3aGVuIGFuIGF1ZGlvIG1peGVyIGlzIG1peGluZyBhIGhpZ2hlciBwcmlvcml0eQorCSAgc3RyZWFtIGJ1dCBpdCBjYW4gYWxzbyBiZSB1c2VkIGZvciBvdGhlciBwdXJwb3Nlcy4KKwkgIEFkZCBzb21lIGRvY3MgYW5kIGEgdW5pdCB0ZXN0LgorCSAgSW1wbGVtZW50IHRoZSBSRVFVRVNUX1NUQVRFIG1lc3NhZ2UgaW4gZ3N0LWxhdW5jaC4KKwkgIEFQSTogZ3N0X21lc3NhZ2VfbmV3X3JlcXVlc3Rfc3RhdGUoKQorCSAgQVBJOiBnc3RfbWVzc2FnZV9wYXJzZV9yZXF1ZXN0X3N0YXRlKCkKKwkgIEFQSTogR1NUX01FU1NBR0VfUkVRVUVTVF9TVEFURQorCisyMDA5LTAyLTE2IDEyOjU4OjM0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgorCSAgQ2xlYXIgdGFyZ2V0IHdoZW4gdGhlIHRhcmdldCBwYWQgZGlzYXBwZWFycworCSAgV2hlbiB0aGUgdGFyZ2V0IHBhZCBkaXNhcHBlYXJzIChiZWNhdXNlIGl0IHdhcyBleHBsaWNpdGx5IHVubGlua2VkIG9yIHRoZQorCSAgZWxlbWVudCB3YXMgcmVtb3ZlZC91bnJlZmZlZCkgbWFrZSBzdXJlIHdlIHJlY2VpdmUgYSBub3RpZnkgd2l0aCB0aGUgdW5saW5rCisJICBmdW5jdGlvbiBvbiB0aGUgcHJveHkgcGFkIGFuZCBjbGVhciB0aGUgdGFyZ2V0LiBXZSB1c2UgYSBzaW1wbGUgZmxhZyB0byBub3QgZG8KKwkgIHRoaXMgYW5kIGNhdXNlIGRlYWRsb2NrcyB3aGVuIHRoZSB0YXJnZXQgd2FzIGNoYW5nZWQgZXhwbGljaXRseSB1c2luZyB0aGUKKwkgIGdob3N0cGFkIGZ1bmN0aW9ucy4KKwkgIFVwZGF0ZSB0aGUgdW5pdCB0ZXN0IGJlY2F1c2Ugd2Ugbm93IHVucmVmIHRoZSB0YXJnZXQgc29vbmVyIChhbmQgY29ycmVjdGx5KS4KKworMjAwOS0wMi0xNSAxNjozNzoxNyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKKwkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6CisJICBkb2NzOiBmb3JtYXQgYW5kIGluZGVudCBleGFtcGxlcy4KKworMjAwOS0wMi0wOSAyMjo0OTowNSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiB0b29scy9nc3QtbGF1bmNoLjEuaW46CisJKiB0b29scy9nc3QtbGF1bmNoLmM6CisJICBnc3QtbGF1bmNoOiBhZGQgLXEvLS1xdWlldCBvcHRpb24gdG8gc3VwcmVzcyBhbnkgbm9uIGVycm9yIG91dHB1dC4KKwkgIEhhdmluZyBubyBvdXRwdXQgaXMgbmljZSBmb3Igc2NyaXB0aW5nLiBBbHNvIHVwZGF0ZSB0aGUgbWFucGFnZS4KKworMjAwOS0wMi0xNCAxMzozNTo0OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZmFxL2N2cy54bWw6CisJKiBkb2NzL2ZhcS9kZXZlbG9waW5nLnhtbDoKKwkqIGRvY3MvZmFxL2ZhcS54bWw6CisJKiBkb2NzL2ZhcS9nZXR0aW5nLnhtbDoKKwkqIGRvY3MvZmFxL2dpdC54bWw6CisJKiBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6CisJKiBkb2NzL2ZhcS9zdGFydC54bWw6CisJKiBkb2NzL2ZhcS90cm91Ymxlc2hvb3RpbmcueG1sOgorCSogZG9jcy9mYXEvdXNpbmcueG1sOgorCSAgRkFROiB1cGRhdGUgZm9yIGdpdCBhbmQgbWlzY2VsbGFuZW91cyBzbWFsbCBmaXhlcyBhbmQgYWRkaXRpb25zCisJICBSZXBsYWNlIGFsbCBtZW50aW9ucyBvZiBDVlMgd2l0aCBnaXQuIEFkZCBsaW5rIHRvIGdzdC11bmluc3RhbGxlZCBzY3JpcHQgaW4gY2dpdCBhbmQgdG8gU3VibWl0dGluZ1BhdGNoZXMgcGFnZSBpbiB3aWtpLiBGaXggc29tZSB0eXBvcy4gVXBkYXRlIGluZGVudGluZyBydWxlcyB0byB3aGF0IHdlIGFjdHVhbGx5IHVzZSAoIzU3MTY0NikuCisKKzIwMDktMDItMTMgMTY6MTc6MDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmUucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kYS5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9lcy5wbzoKKwkqIHBvL2ZpLnBvOgorCSogcG8vZnIucG86CisJKiBwby9odS5wbzoKKwkqIHBvL2lkLnBvOgorCSogcG8vaXQucG86CisJKiBwby9qYS5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9wbC5wbzoKKwkqIHBvL3B0X0JSLnBvOgorCSogcG8vcnUucG86CisJKiBwby9ydy5wbzoKKwkqIHBvL3NrLnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkgIHBvOiB1cGRhdGUgKi5wbyBmaWxlcyBmb3IgbmV3bHktYWRkZWQgdHJhbnNsYXRhYmxlIHN0cmluZ3MKKwkgIFRoZSBvbmx5IHBlb3BsZSB3aG8gc2hvdWxkIGdldCBjb25mbGljdHMgbm93IGFyZSBwZW9wbGUgd2hvIGhhdmUgY2xvbmVkIGFuZCBidWlsdCBnc3RyZWFtZXIgYmV0d2VlbiB0aGUgdGltZSB0aG9zZSBzdHJpbmdzCisJICB3ZXJlIGFkZGVkIGFuZCB0aGlzIGNvbW1pdC4KKworMjAwOS0wMi0xMiAxMDozODowNSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSogZ3N0L2dzdHRhZ2xpc3QuaDoKKwkgIHRhZ2xpc3Q6IEFQSTogQWRkIEhPTUVQQUdFIHRhZworCSAgVGhpcyB0YWcgd2lsbCBsaXN0IGEgaG9tZXBhZ2UgZm9yIHRoZSBtZWRpYSwKKwkgIGkuZS4gdGhlIGFydGlzdCdzIG9yIG1vdmllJ3MgaG9tZXBhZ2UuCisJICBUaGlzIGlzIGRpZmZlcmVudCB0byBHU1RfVEFHX0xPQ0FUSU9OIGFzIHRoZSBsYXR0ZXIKKwkgIGxpc3RzIHRoZSBvcmlnaW5hbCBsb2NhdGlvbiBvZiB0aGUgbWVkaWEuCisJICBGaXhlcyBidWcgIzU3MTIyNy4KKworMjAwOS0wMi0wOSAxMjowMDo0MyArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogY29tbW9uOgorCSAgQnVtcCByZXZpc2lvbiB0byB1c2UgZm9yIGNvbW1vbiBzdWJtb2R1bGUuCisKKzIwMDktMDItMDggMTA6Mjg6MTYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3QvZ3N0LmM6CisJKiBnc3QvZ3N0dmVyc2lvbi5oLmluOgorCSAgUmVwbGFjZSBzb21lIG1lbnRpb25zIG9mIENWUyBieSBHSVQKKworMjAwOS0wMi0wNiAxMDo1MToyOCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKKwkgIGJpbmFyeSByZWdpc3RyeTogUmV3cml0ZSBzYW5pdHkgY2hlY2sgdG8gYWN0dWFseSBjYXRjaCBzb21ldGhpbmcuCisJICBUaGUgcHJldmlvdXMgY29tbWl0IHdhcyBib2d1cywgYXMgd2FzIHRoZSBjaGVjayBiZWZvcmUuIFdlIGp1c3QgcG9pbnQgbSB0byB0aGUgZmlsZSBkYXRhLAorCSAgc28gbmVpdGhlciBpdCBub3IgaXRzIG1lbWJlcnMgd2lsbCBiZSBOVUxMLiBCZXR0ZXIgY2hlY2sgaWYgd2UgaGF2ZSBlbm91Z2ggZGF0YS4KKworMjAwOS0wMi0wNSAyMzoxMTowNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHBvL01ha2V2YXJzOgorCSogcG8vYWYucG86CisJKiBwby9hei5wbzoKKwkqIHBvL2JlLnBvOgorCSogcG8vYmcucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGEucG86CisJKiBwby9kZS5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZXMucG86CisJKiBwby9maS5wbzoKKwkqIHBvL2ZyLnBvOgorCSogcG8vaHUucG86CisJKiBwby9pZC5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vamEucG86CisJKiBwby9uYi5wbzoKKwkqIHBvL25sLnBvOgorCSogcG8vcGwucG86CisJKiBwby9wdF9CUi5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vcncucG86CisJKiBwby9zay5wbzoKKwkqIHBvL3NxLnBvOgorCSogcG8vc3IucG86CisJKiBwby9zdi5wbzoKKwkqIHBvL3RyLnBvOgorCSogcG8vdWsucG86CisJKiBwby92aS5wbzoKKwkqIHBvL3poX0NOLnBvOgorCSogcG8vemhfVFcucG86CisJICBwbzogYXZvaWQgY29uZmxpY3RzIG9mIGxvY2FsICoucG8gZmlsZXMgd2l0aCBmaWxlcyBpbiBnaXQKKwkgIE1ha2UgaXQgc28gdGhhdCBmaWxlbmFtZXMgYW5kIGxpbmUgbnVtYmVycyBhcmUgb25seSBzdG9yZWQgaW4gdGhlICoucG90IGZpbGUgKHdoaWNoIGlzIG5vdCBpbiBnaXQpLCBidXQgbm90IGluIHRoZQorCSAgaW5kaXZpZHVhbCAqLnBvIGZpbGVzLiBUaGlzIGluZm9ybWF0aW9uIGlzIGhhcmRseSB1c2VmdWwgZm9yIHRyYW5zbGF0b3JzIGluIG91ciBjYXNlLCBhbmQgaXQgc2hvdWxkIGF2b2lkIHRoZSBjb25zdGFudAorCSAgY29uZmxpY3RzIG9mIGxvY2FsICoucG8gZmlsZXMgd2l0aCB0aGUgb25lcyBpbiBnaXQgd2hpY2ggYXJlIGNhdXNlZCBieSB0aGUgc291cmNlIGZpbGVzIGNoYW5naW5nIGFuZCB0aGUgbGluZSBudW1iZXJzCisJICBiZWluZyB1cGRhdGVkLgorCSAgVGhpcyBjb21taXQgaXMgbGlrZWx5IHRvIGNhdXNlIG9uZSBsYXN0IG1lcmdlIGNvbmZsaWN0IGZvciB5b3UsIHdoaWNoIHlvdSBjYW4gd29yayBhcm91bmQgd2l0aCAiZ2l0IGNoZWNrb3V0IHBvLyoucG8iCisJICBiZWZvcmUgbWVyZ2luZyBvciBwdWxsaW5nLiBBZnRlciB0aGF0IHRoZXJlIHNob3VsZCAoaG9wZWZ1bGx5KSBub3QgYmUgYW55IG1vcmUgbG9jYWwgbW9kaWZpY2F0aW9ucyBvZiB0aGVzZSBmaWxlcy4KKworMjAwOS0wMi0wNSAxNToyMjo0NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgd2luMzI6IGFkZCBuZXcgR3N0UG9sbCBBUEkgdG8gbGliZ3N0cmVhbWVyLmRlZgorCisyMDA5LTAyLTA1IDE3OjIzOjQ0ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RjbG9jay5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKKwkgIGNsZWFudXA6IHJlbW92ZSB1bnVzZWQgdmFyaWFibGVzIGluIF9jbGFzc19pbml0KCkgYW5kIHJlaW5kZW50LgorCisyMDA5LTAyLTA1IDE3OjA1OjU2ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RidXMuYzoKKwkgIGJ1czogcmVtb3ZlIHVudXNlZCBzZXQvZ2V0IHByb3BlcnR5IGZ1bmN0aW9ucworCisyMDA5LTAyLTA1IDE1OjU2OjE5ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgorCSAgYmluYXJ5IHJlZ2lzdHJ5OiBjb21wYXJpbmcgYXJyYXlzIGFnYWluc3QgTlVMTCBpcyB1c2VsZXNzCisKKzIwMDktMDItMDUgMTM6NTk6NDggKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSAgcXVldWU6IHJlbW92ZSB1bnVzZWQgY29kZQorCSAgU2tpcCBsb29waW5nIHRocnUgYSBkdW1teSBpbXBsZW1lbnRhdGlvbi4KKworMjAwOS0wMi0wNSAxMzo1NzowNSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzoKKwkgIHRlc3RzOiBHc3RDbG9ja1RpbWUgaXMgYWx3YXlzID49IDAKKworMjAwOS0wMi0wNSAxMzo0MjozMCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGhlbHBlci5jOgorCSAgY29udHJvbGxlcjogcmVtb3ZlIHVudXNlZCB2YXJpYWJsZQorCisyMDA5LTAyLTA0IDE3OjIwOjIxICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RnaG9zdHBhZC5jOgorCSAgY2xlYW51cDogRWl0aGVyIGNoZWNrIGFsd2F5cyBmb3IgaW50ZXJuYWwgYmVpbmcgTlVMTCBvciBkb24ndC4KKwkgIElNSE8gdGhlIGdob3N0cGFkIGlzIGJvcmtlZCBpZiBpbnRlcm5hbCBpcyBOVUxMLiBTbyB0aGUgY2hlY2sgY2FuIGdvIGFuZCBpdCBpcworCSAgdXNlZCBsYXRlciB1bmNoZWNrZWQgYW55d2F5LgorCisyMDA5LTAyLTA0IDE2OjI2OjIzICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3R0YWdsaXN0LmM6CisJICBjcmFzaDogRG9uJ3QgY3Jhc2ggb24gbm9uIGV4aXN0ZW50IHRhZ3MuCisKKzIwMDktMDItMDQgMTY6MTc6MzQgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6CisJICBsZWFrOiBEb24ndCBsZWFrIHR5cGUgbmFtZSBpbiBmYWlsdXJlIGNhc2VzLgorCisyMDA5LTAyLTA0IDE2OjA3OjMwICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6CisJICBjaGVjazogRG9uJ3QgYXNzdW1lIGdzdF9wYWRfZ2V0X3BlZXIgcmV0dXJucyBub24gTlVMTCB2YWx1ZS4KKworMjAwOS0wMi0wNCAxNTo0MToyNCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIGxlYWs6IGRvbid0IHJldHVybiB3aXRob3V0IGNhbGxpbmcgdmFfZW5kCisKKzIwMDktMDItMDMgMTg6MDQ6NDYgKzAxMDAgIEpvbmFzIEhvbG1iZXJnIDxqb25hcy5ob2xtYmVyZ0BheGlzLmNvbT4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3RjbG9jay5jOgorCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6CisJKiBnc3QvZ3N0c3lzdGVtY2xvY2suaDoKKwkgIEltcGxlbWVudCB0aGUgc3lzdGVtY2xvY2sgd2l0aCBnc3Rwb2xsCisJICBBZGQgYSBwcm9wZXJ0eSB0byBzZWxlY3QgdGhlIGNsb2NrIHR5cGUsIGN1cnJlbnRseSBSRUFMVElNRSBhbmQgTU9OT1RPTklDIHdoZW4KKwkgIHBvc2l4IHRpbWVycyBhcmUgYXZhaWxhYmxlLgorCSAgSW1wbGVtZW50IHRoZSBzeXN0ZW1jbG9jayB3aXRoIEdzdFBvbGwgaW5zdGVhZCBvZiBHQ29uZC4gVGhpcyBhbGxvd3MgdXMgdG8KKwkgIHNjaGVkdWxlIHRpbWVvdXRzIHdpdGggbmFub3NlY29uZCBwcmVjaXNzaW9uIG9uIG5ld2VyIGtlcm5lbHMgYW5kIHdpdGggcHBvbGwKKwkgIHN1cHBvcnQuIEl0J3MgYWxzbyByZXNpbGllbnQgdG8gY2hhbmdlcyB0byB0aGUgc3lzdGVtY2xvY2sgYmVjYXVzZSBvZiBOVFAgb3IKKwkgIHNpbWlsYXIuCisKKzIwMDktMDItMDMgMTc6NDk6MDIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0cG9sbC5jOgorCSogZ3N0L2dzdHBvbGwuaDoKKwkgIEdzdFBvbGw6IGFkZCBtZXRob2RzIHRvIHVzZSBnc3Rwb2xsIGZvciB0aW1lb3V0cworCSAgQWRkIGEgc3BlY2lhbCB0aW1lciBtb2RlIGluIEdzdFBvbGwgdGhhdCBtYWtlcyBpdCBvbmx5IHVzZSB0aGUgY29udHJvbCBzb2NrZXQKKwkgIHdpdGggYSB0aW1lb3V0IHRvIHNjaGVkdWxlIHRpbWVvdXRzLiBBbHNvIGFkZCBhIHBhaXIgb2YgbWV0aG9kcyB0byB3YWtldXAgdGhlCisJICB0aW1lb3V0IHRocmVhZC4KKwkgIEFQSTogR3N0UG9sbDo6Z3N0X3BvbGxfbmV3X3RpbWVyKCkKKwkgIEFQSTogR3N0UG9sbDo6Z3N0X3BvbGxfd3JpdGVfY29udHJvbCgpCisJICBBUEk6IEdzdFBvbGw6OmdzdF9wb2xsX3JlYWRfY29udHJvbCgpCisKKzIwMDktMDItMDMgMTU6Mjc6MzQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIEdzdEJhc2VTaW5rOiB1c2UgbmV3IHZhcmlhYmxlIHRvIHNjaGVkdWxlIHByZXJvbGwKKwkgIFVzZSBhIHNlcGFyYXRlIHZhcmlhYmxlIHRvIGtlZXAgdHJhY2sgaWYgd2UgbmVlZCB0byBjYWxsIHRoZSBwcmVyb2xsIG1ldGhvZAorCSAgaW5zdGVhZCBvZiBhYnVzaW5nIHRoZSBjb21taXRlZCB2YXJpYWJsZS4KKworMjAwOS0wMi0wMyAxMjo1Mjo0OSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmFrZXNpbmsuYzoKKwkgIEdzdEJhc2VTaW5rOiBhdm9pZCBjYWxsaW5nIHByZXJvbGwgbXVsdGlwbGUgdGltZXMKKwkgIEZpeCBhIHJlZ3Jlc3Npb24gaW50cm9kdWNlZCBieSBmaXggZm9yICM1Njc3MjUgaW4gY29tbWl0CisJICAxYzdhYjRlZDRmMTliNjNiYTA0NmE2ZjJmZTdkMDlhNmMxNzM1N2M1LiBXZSBzaG91bGQgb25seSBjYWxsIHRoZSBwcmVyb2xsCisJICBmdW5jdGlvbiBvbmNlIG5hbWVseSB3aGVuIHdlIGRpZCBub3QgeWV0IGNvbW1pdCB0aGUgc3RhdGUgY2hhbmdlLgorCSAgQWRkIGEgdW5pdCB0ZXN0IHRvIGNoZWNrIHRoYXQgd2UgY2FsbCB0aGUgcHJlcm9sbCBmdW5jdGlvbiB3aGVuIGludGVycnVwdGluZyB0aGUKKwkgIGNsb2NrX3dhaXQgKHNlZSAjNTY3NzI1KS4KKwkgIEFkZCBhIHVuaXQgdGVzdCB0byBjaGVjayB0aGF0IHdlIG9ubHkgY2FsbCB0aGUgcHJlcm9sbCBmdW5jdGlvbiBvbmNlLgorCisyMDA5LTAxLTI5IDEzOjMwOjQ1ICswMTAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIEZvcmNlIHJlY29uZmlndXJlIG9mIGJhc2V0cmFuc2Zvcm0gdG8gcmVjaGVjayBhbGxvYyByZXF1ZXN0CisJICBXaGlsZSByZWNvbmZpZ3VyaW5nIGEgYmFzZXRyYW5zZm9ybSBlbGVtZW50IHdlIG5lZWQgYWxzbyB0byByZWNoZWNrCisJICB0aGUgYWxsb2MgcmVxdWVzdC4gQmVjYXVzZSBpdCdzIHBvc3NpYmxlIHRoYXQgZHVlIHRvIGNhcHMgY2hhbmdlcworCSAgdGhlIHByb3h5X2FsbG9jIHN0YXRlIGlzIG5vdCBjb3JyZWN0IGFueW1vcmUuCisJICAoUmUtY29tbWl0IGFmdGVyIGRpc2N1c2lvbiB3aXRoIFdpbSBvbiBJUkMpCisKKzIwMDktMDItMDIgMTQ6MTk6NTcgKzAxMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgorCisJKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKKwkgIGdzdHJlZ2lzdHJ5YmluYXJ5OiBNYWtlIGl0IGNvbXBpbGUgd2l0aCBHU1RfRElTQUJMRV9HU1RfREVCVUcuCisKKzIwMDktMDEtMzEgMjE6MzQ6MjggKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogZG9jcy8uZ2l0aWdub3JlOgorCSogZG9jcy9saWJzL3RtcGwvLmdpdGlnbm9yZToKKwkqIGRvY3MvcGx1Z2lucy90bXBsLy5naXRpZ25vcmU6CisJICByZXBvOiBSZWFycmFuZ2UgZ2l0aWdub3JlcyBpbiBkb2NzIHN1YmRpcgorCSAgdG1wbCBkaXJlY3RvcmllcyBhcmUgcmVtb3ZlZCBieSBtYWtlIGNsZWFuLCB3aGljaCBkZWxldGVzIHRoZQorCSAgLmdpdGlnbm9yZS4gVXNlIGEgLmdpdGlnbm9yZSBoaWdoZXIgdXAgdG8gaWdub3JlIHRoZSB0bXBsIGRpcnMgaW5zdGVhZC4KKworMjAwOS0wMS0zMSAyMTozMjozNiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc3RyZXNzLmM6CisJICBjaGVjazogRml4IGNvbW1lbnQgYWJvdXQgdGhlIHRpbWVvdXQgZm9yIGdlbmVyaWMgc3RyZXNzIHRlc3QuCisJICBTZXR0aW5nIHRoZSB0aW1lb3V0IHRvIDAgbWFrZXMgaXQgaW5maW5pdGUsIHNvIGZpeCB0aGUgY29tbWVudAorCSAgYWJvdmUgYWNjb3JkaW5nbHkuCisKKzIwMDktMDEtMzEgMjE6MzE6NDggKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdGVlLmM6CisJICBjaGVjazogSW5jcmVhc2UgdGltZW91dCBmb3IgdGhlIHRlZSB0ZXN0CisJICBUaGUgdGVlIHN0cmVzcyB0ZXN0IGtlZXBzIHRpbWluZyBvdXQgZm9yIG1lIG9uIG9uZSBvZiB0aGUgc2xvd2VyCisJICBtYWNoaW5lcywgc28gaW5jcmVhc2UgdGhlIHRpbWVvdXQgdG8gMyBtaW5zLgorCisyMDA5LTAxLTMwIDE0OjU2OjA4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaC5pbjoKKwkgIFVwZGF0ZSB0aGUgd2luMzIgY29uZmlnLmguaW4gdGVtcGxhdGUgZnJvbSB0aGUgbWFpbiBjb25maWcuaC5pbgorCisyMDA5LTAxLTMwIDIyOjE4OjE3ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1kb2NzLnNnbWw6CisJKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMtZG9jcy5zZ21sOgorCSAgQWRkIHJlbGVhc2VpbmZvIHdpdGggb25saW5lIHVybC4KKworMjAwOS0wMS0zMCAxODoxNzowMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RpbnRlcmZhY2UuaDoKKwkqIGdzdC9nc3R1cmkuaDoKKwkgIFJlbW92ZSBicm9rZW4gY2xhc3MgdG8gaW50ZXJmYWNlIGNhc3QgbWFjcm9zIGZyb20gR3N0VXJpSGFuZGxlciBhbmQgR3N0SW1wbGVtZW50c0ludGVyZmFjZSBoZWFkZXJzCisJICBSZW1vdmUgY2xhc3MtdG8taW50ZXJmYWNlLXN0cnVjdCBjYXN0IG1hY3JvcyB3aGljaCBkb24ndCB3b3JrLAorCSAgZG9uJ3QgbWFrZSBzZW5zZSwgYW5kIGluIHNvbWUgY2FzZXMgd291bGRuJ3QgZXZlbiBjb21waWxlIGlmCisJICB1c2VkLiBSZW1vdmFsIHNob3VsZCBiZSBvayBzZWVpbmcgdGhhdCBjb2RlIHdoaWNoIHVzZXMgYW55IG9mCisJICB0aGVzZSBpcyBicm9rZW4gYW5kIGJvdW5kIHRvIGNyYXNoLiBGaXhlcyAjNTY1NjA3LgorCSAgQVBJOiByZW1vdmUgR1NUX0lNUExFTUVOVFNfSU5URVJGQUNFX0NMQVNTCisJICBBUEk6IHJlbW92ZSBHU1RfSVNfSU1QTEVNRU5UU19JTlRFUkZBQ0VfQ0xBU1MKKwkgIEFQSTogcmVtb3ZlIEdTVF9VUklfSEFORExFUl9DTEFTUworCisyMDA5LTAxLTMwIDE2OjI4OjE0ICswMDAwICBKYW4gU2NobWlkdCA8amFuLnNjaG1pZHRAc3VuLmNvbT4KKworCSogZG9jcy9nc3QvdG1wbC8uZ2l0aWdub3JlOgorCSAgUmVtb3ZlIGdpdGlnbm9yZSBpbiBkb2NzL2dzdC90bXBsLgorCSAgVGhpcyBnaXRpZ25vcmUgZmlsZSBzZWVtcyB0byBnZXQgZGVsZXRlZCBieSB0aGUgYnVpbGQsIGFuZCBkb2Vzbid0CisJICBzZWVtIHRvIGJlIGRvaW5nIGFueXRoaW5nIHVzZWZ1bCBhbnl3YXkuCisKKzIwMDktMDEtMzAgMTY6MjE6NTUgKzAwMDAgIEphbiBTY2htaWR0IDxqYW4uc2NobWlkdEBzdW4uY29tPgorCisJKiBjb21tb246CisJICBCdW1wIGNvbW1vbgorCisyMDA5LTAxLTMwIDE0OjU5OjA3ICswMDAwICBKYW4gU2NobWlkdCAtIFN1biBNaWNyb3N5c3RlbXMgLSBEdWJsaW4gSXJlbGFuZCA8anMyMTI0MTlAZmxhaWwuKG5vbmUpPgorCisJKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKKwkgIEZpeCBjb21waWxhdGlvbiB3YXJuaW5nIHdpdGggRm9ydGUuCisKKzIwMDktMDEtMzAgMTA6NDM6NTUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgUmV2ZXJ0ICJDaGVjayBzdWdnZXN0ZWQgY2FwcyBmb3IgcHJveHkgYWxsb2MiCisJICBUaGlzIHJldmVydHMgY29tbWl0IDUwYWZkNDU5NTc5MTkxNzcyZjQyZDFhNDRmMzk1OWU1MzBjNWMyNjkuCisJICBJdCBicmVha3MgdGhlIGludGVyYWN0aXZlIHRlc3Qtc2NhbGUgdW5pdCB0ZXN0LgorCisyMDA5LTAxLTMwIDEwOjQyOjUwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIFJldmVydCAiRm9yY2UgcmVjb25maWd1cmUgb2YgYmFzZXRyYW5zZm9ybSB0byByZWNoZWNrIGFsbG9jIHJlcXVlc3QiCisJICBUaGlzIHJldmVydHMgY29tbWl0IDNhNDYwMmQ3NzE5ZGUzYzNlZjdhZWNlNjhiNWY5NDg5ZDA3ODAxNjIuCisJICBJdCBicmVha3MgdGhlIGludGVyYWN0aXZlIHRlc3Qtc2NhbGUgdW5pdCB0ZXN0LgorCisyMDA5LTAxLTMwIDEwOjI5OjU2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6CisJICBBbGxvY2F0ZSBldmVyeXRoaW5nIHRoYXQgaXMgd3JpdHRlbiB0byB0aGUgcmVnaXN0cnkgd2l0aCBnX21hbGxvYzAoKQorCSAgQWxsb2NhdGUgZXZlcnkgc3RydWN0dXJlIHRoYXQgaXMgZGlyZWN0bHkgd3JpdHRlbiB0byB0aGUgYmluYXJ5CisJICByZWdpc3RyeSB3aXRoIGdfbWFsbG9jMCgpLiBPdGhlcndpc2Ugc29tZSBwYXJ0cyBvZiBpdCB3aWxsIGJlCisJICB1bmluaXRpYWxpemVkIChzdHJ1Y3QgcGFkZGluZyBiZWNhdXNlIG9mIGFsaWdubWVudCwgZXRjKSBhbmQKKwkgIHZhbGdyaW5kIHdpbGwgY29tcGxhaW4gYWJvdXQgaXQuCisKKzIwMDktMDEtMzAgMDg6MzA6MjggKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkqIGF1dG9nZW4uc2g6CisJKiBjb21tb246CisJICBVc2UgYSBzeW1ib2xpYyBsaW5rIGZvciB0aGUgcHJlLWNvbW1pdCBjbGllbnQtc2lkZSBob29rCisKKzIwMDktMDEtMjkgMTU6NDk6MjQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6CisJICBNYWtlIHN1cmUgdG8gdGFrZSBhIGNvcHkgb2YgdGhlIHN0cmluZ3Mgd2UncmUgZ29pbmcgdG8gZnJlZSBsYXRlci4KKworMjAwOS0wMS0yNiAxNzoxNToxNSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgQWRkIGxvZ2dpbmcgaW4gZmFpbHVyZSBjYXNlLiBBZGQgbW9yZSBkZXRhaWxzIHRvIGEgdG9kbyBjb21tZW50LgorCisyMDA5LTAxLTI2IDE3OjE0OjA3ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIHRlc3RzL2JlbmNobWFya3MvTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9iZW5jaG1hcmtzL2luaXQuYzoKKwkgIEFkZCBhIHRyaXZpYWwgc291cmNlIGZvciB0cmFja2luZyBnc3RfaW5pdCB0aW1lIGFjY3Jvc3MgdmVyc2lvbnMuCisKKzIwMDktMDEtMjYgMTc6MTM6MDkgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6CisJICBBZGQgdG9kbyBjb21tZW50cy4KKworMjAwOS0wMS0yOSAxMzozOToyOSArMDEwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBDaGVjayBzdWdnZXN0ZWQgY2FwcyBmb3IgcHJveHkgYWxsb2MKKwkgIEJlY2F1c2Ugd2UgYXJlIHRyeWluZyB0byByZXNvbHZlIGEgc3VnZ2VzdGlvbiBoZXJlIHdlIGRvbid0IG5lZWQKKwkgIHRvIGNoZWNrIG9uIGNhcHMgZm9yIHByb3h5X2FsbG9jIGJ1dCB3ZSBuZWVkIHRvIGNoZWNrIG9uIHRoZSBzdWdnZXN0ZWQKKwkgIGNhcHMgaW5zdGVhZC4KKworMjAwOS0wMS0yOSAxMzozMDo0NSArMDEwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBGb3JjZSByZWNvbmZpZ3VyZSBvZiBiYXNldHJhbnNmb3JtIHRvIHJlY2hlY2sgYWxsb2MgcmVxdWVzdAorCSAgV2hpbGUgcmVjb25maWd1cmluZyBhIGJhc2V0cmFuc2Zvcm0gZWxlbWVudCB3ZSBuZWVkIGFsc28gdG8gcmVjaGVjaworCSAgdGhlIGFsbG9jIHJlcXVlc3QuIEJlY2F1c2UgaXQncyBwb3NzaWJsZSB0aGF0IGR1ZSB0byBjYXBzIGNoYW5nZXMKKwkgIHRoZSBwcm94eV9hbGxvYyBzdGF0ZSBpcyBub3QgY29ycmVjdCBhbnltb3JlLgorCisyMDA5LTAxLTI3IDIzOjE0OjQ5ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC9nc3RjbG9jay5jOgorCSAgSW1wcm92ZSB0aGUgZG9jcyBmb3IgZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMoKS4KKwkgIEl0cyBtZW50aW9uZWQgaW4gdGhlIHNlY3Rpb24gZG9jcywgYnV0IGxldHMgcmVwZWF0IGF0IHRoZSBmdW5jdGlvbiBkb2NzIHRoYXQgdGhlIGNhbGxiYWNrIGNhbiBiZSBpbnZva2VkIGZyb20gYW55IHRocmVhZC4KKworMjAwOS0wMS0yNyAxNzo1MzowMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+CisKKwkqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgorCSogZG9jcy9saWJzL01ha2VmaWxlLmFtOgorCSAgZG9jczogZG9uJ3QgdXNlIEVSUk9SX0NGTEFHUyB3aGVuIGJ1aWxkaW5nICRkb2Ntb2R1bGUtc2Nhbi5jCisJICBXZSBkb24ndCB3YW50IHRvIHVzZSAtV2FsbCAtV2Vycm9yIGFuZCBmcmllbmRzIHdoZW4gYnVpbGRpbmcgdGhlIGd0ay1kb2MtZ2VuZXJhdGVkCisJICAkZG9jbW9kdWxlLXNjYW4uYywgc2luY2Ugd2UgY2FuJ3QgZWFzaWx5IGZpeCBzdHVmZiBpZiBhIGNlcnRhaW4gZ3RrLWRvYy9jb21waWxlcgorCSAgY29tYmluYXRpb24gYnJlYWtzIHRoZSBidWlsZC4gRml4ZXMgYnVpbGQgb24gdWJ1bnR1IGludHJlcGlkLgorCisyMDA5LTAxLTI3IDE3OjUyOjE0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSogLmdpdGlnbm9yZToKKwkgIE1ha2UgZ2l0IGlnbm9yZSBiYWNrdXAgZmlsZXMuCisKKzIwMDktMDEtMjYgMjE6Mjk6MDIgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RoZWxwZXIuYzoKKwkgIERvbid0IGNoZWNrIHRpbWVzdGFtcCBoZXJlLCBpdHMgZG9uZSBpbiB0aGUgY2FsbGVkIGZ1bmN0aW9uIGFueXdheS4KKworMjAwOS0wMS0yNiAxMjo1MjoxMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHBvbGwuYzoKKwkgIEF2b2lkIHVubmVlZGVkIHJlYWRzIGZyb20gdGhlIGNvbnRyb2wgc29ja2V0CisJICBBZGQgYSBuZXcgdmFyaWFibGUgdGhhdCBrZWVwcyB0cmFjayBvZiB0aGUgc3RhdHVzIG9mIHRoZSBjb250cm9sIHNvY2tldC4gVGhpcworCSAgYWxsb3dzIHVzIHRvIGF2b2lkIGRvaW5nIGEgcmVhZCgpIG9uIHRoZSBjb250cm9sIHNvY2tldCB3aGVuIHdlIGRpZCBub3Qgd3JpdGUKKwkgIGFueXRoaW5nIHRvIGl0LgorCSAgRml4ZXMgIzU2ODQzOC4KKworMjAwOS0wMS0yNSAyMjoxNzozMSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIEFkZCBtb3JlIGRlYnVnIGxvZ2dpbmcgZm9yIGZhaWx1cmUgY2FzZXMuCisKKzIwMDktMDEtMjUgMjI6MTE6MzIgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0L2dzdHBsdWdpbi5oOgorCSAgRG9jdW1lbnQgdGhhdCBHU1RfUExVR0lOX0RFRklORSBtYWNyb3MgdXNlIFBBQ0tBR0UgZGVmaW5lLiBGaXhlcyAjNTU5NzIyLgorCSAgUEFDS0FHRSBpcyBkZWZpbmVkIGJ5IGF1dG9mb28uIElmIHBlb3BsZSB1c2Ugc29tZXRoaW5nIGRpZmZlcmVudCwgdGhleSBtaWdodCB3YW50IHRvIGRlZmluZSBpdCB0aGVtc2VsZi4KKworMjAwOS0wMS0yNSAxNzo1ODo1MiArMDEwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBGaXggdHlwbworCisyMDA5LTAxLTI0IDIxOjUwOjA4ICswMTAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgorCisJKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgorCSAgT25seSBmcmVlIGxpc3Qgb2YgYnVmZmVycyBvbmNlCisKKzIwMDktMDEtMjQgMTQ6Mzc6MTQgKzAxMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+CisKKwkqIGRvY3MvUkVBRE1FOgorCSAgRml4IHR5cG8KKworMjAwOS0wMS0yMyAyMzowODowMyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiBwby8uZ2l0aWdub3JlOgorCSAgSWdub3JlIGFub3RoZXIgZmlsZQorCisyMDA5LTAxLTIzIDIxOjQ0OjExICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKKwkgIGFkZCBnc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfZXh0ZW5zaW9uIHRvIHRoZSB3aW4zMiBkZWZzIGZpbGUKKworMjAwOS0wMS0yMyAxNjowOTozNSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICBVcGRhdGUgd2luMzIgY29uZmlnLmggZm9yIDAuMTAuMjIuMSBkZXYgY3ljbGUuLi4KKworMjAwOS0wMS0yMyAxNjowODowOSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorCisJKiAuZ2l0aWdub3JlOgorCSogZG9jcy9nc3QvLmdpdGlnbm9yZToKKwkqIGRvY3MvbGlicy8uZ2l0aWdub3JlOgorCSogZG9jcy9saWJzL3RtcGwvLmdpdGlnbm9yZToKKwkqIGxpYnMvZ3N0L2Jhc2UvLmdpdGlnbm9yZToKKwkqIGxpYnMvZ3N0L2NoZWNrLy5naXRpZ25vcmU6CisJKiBsaWJzL2dzdC9jb250cm9sbGVyLy5naXRpZ25vcmU6CisJKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvLmdpdGlnbm9yZToKKwkqIGxpYnMvZ3N0L25ldC8uZ2l0aWdub3JlOgorCSogcGx1Z2lucy9pbmRleGVycy8uZ2l0aWdub3JlOgorCSogdGVzdHMvY2hlY2svbGlicy8uZ2l0aWdub3JlOgorCSAgVXBkYXRlIGEgYnVuY2ggb2YgZ2l0aWdub3JlcyB0byBjbGVhbiB1cCBteSBnaXQgc3RhdHVzIG91dHB1dAorCisyMDA5LTAxLTIzIDA5OjU0OjUzICswMTAwICBCcmlhbiBDYW1lcm9uIDxicmlhbi5jYW1lcm9uQHN1bi5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGdzdC9NYWtlZmlsZS5hbToKKwkgIEZpeCBsaW5raW5nIGZhaWx1cmVzIG9uIFNvbGFyaXMuIEZpeGVzIGJ1ZyAjNTY4NDgxLgorCSAgTGluayBsaWJnc3RyZWFtZXIgd2l0aCAkKExJQk0pIGFzIGl0IHVzZXMgbWF0aCBmdW5jdGlvbnMuCisJICBBZGQgYSBjb25maWd1cmUgY2hlY2sgZm9yIHNvY2tldCBhbmQgbnNsIGxpYnJhcnkgYW5kIGFkZAorCSAgdGhlbSB0byBMSUJTIGlmIHRoZXkncmUgZm91bmQuIFRoaXMgaXMgbmVlZGVkIG9uIFNvbGFyaXMKKwkgIGZvciBzb2NrZXQoKSBhbmQgZ2V0aG9zdGJ5bmFtZSgpLgorCisyMDA5LTAxLTIyIDE4OjAyOjE5ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGNvbW1vbjoKKwkgIFVwZGF0ZSBjb21tb24gc25hcHNob3QuCisKKzIwMDktMDEtMjIgMTM6NTg6NTcgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6CisJICBJbXByb3ZlIGRlYnVnIG91dHB1dCBieSBsb2dnaW5nIHRoZSBvZmZzZXRzLiBGaXhlcyBidWcgIzU2ODY3OC4KKwkgIEluIGNyZWF0ZSgpIGFsc28gbG9nIHRoZSBvZmZzZXRzIGFuZCBub3Qgb25seSB0aGUKKwkgIGJ1ZmZlciBzaXplLgorCisyMDA5LTAxLTIyIDEzOjUxOjAyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkqIGNvbW1vbjoKKwkgIEZpeCBwcmUtY29tbWl0IGhvb2sKKworMjAwOS0wMS0yMiAxMjo1Mjo1MCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIG9mIHNzaDovL2dpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L2dzdHJlYW1lci9nc3RyZWFtZXIKKworMjAwOS0wMS0yMiAxMTo1NDo0MSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkgIEFkZCBEb2MgZm9yIG5ldyB0eXBlZmluZCBtZXRob2QuCisKKzIwMDktMDEtMjIgMTA6NDU6NTkgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KKworCSogY29uZmlndXJlLmFjOgorCSAgQmFjayB0byBkZXZlbG9wbWVudCAtPiAwLjEwLjIyLjEKKworMjAwOS0wMS0yMiAxMDoxNjowMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIG9mIHNzaDovL2dpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L2dzdHJlYW1lci9nc3RyZWFtZXIKKworMjAwOS0wMS0yMiAwNTozNTowMiArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogYXV0b2dlbi5zaDoKKwkqIGNvbW1vbjoKKwkgIEluc3RhbGwgYW5kIHVzZSBwcmUtY29tbWl0IGluZGVudGF0aW9uIGhvb2sgZnJvbSBjb21tb24KKworMjAwOS0wMS0yMSAxMjo1MDoyOSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkgIElmIG5vIHR5cGUgd2FzIGZvdW5kIHVzaW5nIHRoZSB0eXBlZmluZCBmdW5jdGlvbnMsIHRyeSBkb2luZyBhbiB1cHN0cmVhbSBVUkkgcXVlcnkgdG8gZ3Vlc3MgdGhlIHR5cGUgZnJvbSB0aGUgZXh0ZW5zaW9uLiBTZWUgIzU2NjY2MS4KKworMjAwOS0wMS0yMSAxMjo0ODoxOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOgorCSogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5oOgorCSAgQWRkIG5ldyB0eXBlZmluZyBoZWxwZXIgZnVuY3Rpb24gdG8gZ3Vlc3MgdGhlIGNhcHMgYmFzZWQgb24gdGhlIGZpbGUgZXh0ZW5zaW9uLiBTZWUgIzU2NjY2MS4gQVBJOiBnc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfZXh0ZW5zaW9uKCkKKworMjAwOS0wMS0yMSAxMjo0NTo0NSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2dzdHR5cGVmaW5kLmM6CisJKiBnc3QvZ3N0dHlwZWZpbmRmYWN0b3J5LmM6CisJICBBbGxvdyBhZGRpbmcgYSB0eXBlZmluZGVyIHdpdGhvdXQgYSB0eXBlZmluZCBmdW5jdGlvbiBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIHRvIG1hcCB0aGUgY2FwcyB0byB0aGUgZXh0ZW5zaW9uLiBTZWUgIzU2NjY2MS4KKworMjAwOS0wMS0yMSAxMjo0Mzo1NSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgVXBkYXRlIHRoZSBsYXN0X2J1ZmZlciBleGFjdGx5IHdpdGggdGhlIGJ1ZmZlciB0aGF0IGNhdXNlZCB0aGUgcHJlcm9sbCBhbmQgYWxzbyBjYWxsIHRoZSBwcmVyb2xsIG1ldGhvZCB3aXRoIHRoYXQgcHJlcm9sbCBidWZmZXIuIEZpeGVzICM1Njc3MjUuCisKKzIwMDktMDEtMjEgMTI6MjE6NDkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC9nc3RnaG9zdHBhZC5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6CisJICBkbyBub3QgY2FsbCB0aGUgdW5saW5rIGZ1bmN0aW9uIG9uIHRoZSB0YXJnZXQgcGFkIHdoZW4gdGhlIGdob3N0cGFkIGlzIHVubGlua2VkLiBBZGQgc29tZSB1bml0IHRlc3RzIGZvciB0aGlzIGJlaGF2aW91ci4gRml4ZXMgIzU2NjkzNi4KKworMjAwOS0wMS0yMSAwNDoyOToyNSArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSogYXV0b2dlbi5zaDoKKwkgIGF1dG9nZW4uc2ggOiBVc2UgZ2l0IHN1Ym1vZHVsZQorCis9PT0gcmVsZWFzZSAwLjEwLjIyID09PQorCisyMDA5LTAxLTE5IDIyOjU4OjU5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSogQ2hhbmdlTG9nOgorCSogTkVXUzoKKwkqIFJFTEVBU0U6CisJKiBjb25maWd1cmUuYWM6CisJKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuc2lnbmFsczoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6CisJKiBnc3RyZWFtZXIuZG9hcDoKKwkqIHBvL0xJTkdVQVM6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICBSZWxlYXNlIDAuMTAuMjIKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUmVsZWFzZSAwLjEwLjIyCisKKzIwMDktMDEtMTkgMjE6MjA6NDAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmUucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kYS5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9lcy5wbzoKKwkqIHBvL2ZpLnBvOgorCSogcG8vZnIucG86CisJKiBwby9odS5wbzoKKwkqIHBvL2lkLnBvOgorCSogcG8vaXQucG86CisJKiBwby9qYS5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9wbC5wbzoKKwkqIHBvL3B0X0JSLnBvOgorCSogcG8vcnUucG86CisJKiBwby9ydy5wbzoKKwkqIHBvL3NrLnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkgIFVwZGF0ZSAucG8gZmlsZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgVXBkYXRlIC5wbyBmaWxlcworCisyMDA5LTAxLTE3IDIxOjA0OjQxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0YnVzLmM6IEZpeCBvcmRlciBvZiBtZW1iZXJzIGluIEdzdEJ1c1NvdXJjZSBzdHJ1Y3R1cmUgLSB0aGUgZmlyc3QgbWVtYmVyIG11c3QgYmUgdGhlIHBhcmVudCBzdHJ1Y3R1cmUgaWUuIEdTb3UuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YnVzLmM6IChnc3RfYnVzX3NldF9tYWluX2NvbnRleHQpLCAoZ3N0X2J1c19jcmVhdGVfd2F0Y2gpOgorCSAgRml4IG9yZGVyIG9mIG1lbWJlcnMgaW4gR3N0QnVzU291cmNlIHN0cnVjdHVyZSAtIHRoZSBmaXJzdCBtZW1iZXIKKwkgIG11c3QgYmUgdGhlIHBhcmVudCBzdHJ1Y3R1cmUgaWUuIEdTb3VyY2UuIFNob3VsZCBtYWtlIGJ1cyBzb3VyY2VzCisJICBhdHRhY2hlZCB0byBub24tZGVmYXVsdCBtYWluIGNvbnRleHRzIHdvcmsgaW4gYWxsIGNhc2VzIG5vdyAoaWUuCisJICBwcmltYXJpbHkgaW4gY2FzZXMgd2hlcmUgdGhlIGNhbGxiYWNrIGhhcyBhIG5vbi1OVUxMIHVzZXIgZGF0YQorCSAgYXJndW1lbnQpLiBGaXhlcyAjNTYyMTcwLgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVzLmM6ICh0ZXN0X2N1c3RvbV9tYWluX2NvbnRleHQpOgorCSAgQWRkIHVuaXQgdGVzdCBmb3IgdGhlIGFib3ZlLCBiYXNlZCBvbiBjb2RlIGJ5CisJICBKdXN0aW4gS2FybmVnZXMgPGp1c3RpbiBhdCBhZmZpbml4IGNvbT4uCisKKzIwMDktMDEtMTUgMTA6MDQ6MzcgKzAwMDAgIEpvbmFzIEhvbG1iZXJnIDxqb25hcy5ob2xtYmVyZ0BheGlzLmNvbT4KKworCSAgZ3N0L2dzdHBhZC5oOiBBIHNtYWxsIGRvY3VtZW50YXRpb24gZml4LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogSm9uYXMgSG9sbWJlcmcgPGpvbmFzIGRvdCBob2xtYmVyZyBhdCBheGlzIGRvdCBjb20+CisJICAqIGdzdC9nc3RwYWQuaDoKKwkgIEEgc21hbGwgZG9jdW1lbnRhdGlvbiBmaXguCisKKzIwMDktMDEtMTEgMDk6NDY6NTIgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgZ3N0L2dzdHV0aWxzLmg6IEluaXRpYWxpemUgZ19vbmNlX2luaXQqIGRhdGEgd2l0aCAwLiBGaXhlcyBidWcgIzU2NzIyNS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dXRpbHMuaDoKKwkgIEluaXRpYWxpemUgZ19vbmNlX2luaXQqIGRhdGEgd2l0aCAwLiBGaXhlcyBidWcgIzU2NzIyNS4KKworMjAwOS0wMS0wOSAyMzozNzoxOSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGNvbmZpZ3VyZS5hYzogcHJlLXJlbGVhc2UgMC4xMC4yMS4zCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgcHJlLXJlbGVhc2UgMC4xMC4yMS4zCisKKzIwMDktMDEtMDkgMTU6NDM6MTcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuKjogRml4IGRvY3VtZW50YXRpb24gZm9yIHRoZSB3YWl0X2Nsb2NrIG1ldGhvZCwgcmVuYW1lIGJhc2VzaW5rIC0+IHNpbmsgZm9yIGNvbnNpc3RlbmN5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfY29tbWl0X3N0YXRlKSwKKwkgIChnc3RfYmFzZV9zaW5rX3dhaXRfY2xvY2spOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJICBGaXggZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHdhaXRfY2xvY2sgbWV0aG9kLCByZW5hbWUgYmFzZXNpbmsgLT4gc2luaworCSAgZm9yIGNvbnNpc3RlbmN5LgorCisyMDA5LTAxLTA4IDEzOjQxOjE5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3QuYzogQ3JlYXRlIGEgcmVnaXN0cnkgaWYgdGhlcmUgaXMgbm9uZSBhbHNvIHdoZW4gdGhlIG9wdGlvbiBmb3IgZ3N0LWRpc2FibGUtcmVnaXN0cnktdXBkYXRlIGhhcyBiZWVuIHNlbGVjdGVkLi4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3QuYzoKKwkgIENyZWF0ZSBhIHJlZ2lzdHJ5IGlmIHRoZXJlIGlzIG5vbmUgYWxzbyB3aGVuIHRoZSBvcHRpb24gZm9yCisJICBnc3QtZGlzYWJsZS1yZWdpc3RyeS11cGRhdGUgaGFzIGJlZW4gc2VsZWN0ZWQuIEZpeGVzICM1NjcwMDIKKworMjAwOS0wMS0wNiAxODoxMDoyMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdC5jOiBSZWYgbmV3IGVudW0gdHlwZSBpbiBnc3RfaW5pdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0LmM6IChpbml0X3Bvc3QpOgorCSAgUmVmIG5ldyBlbnVtIHR5cGUgaW4gZ3N0X2luaXQuCisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgQWRkIHJlY2VudGx5LWFkZGVkIEFQSS4KKworMjAwOS0wMS0wNiAxNzo1ODo1OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgQWRkIEFQSSBmb3IgbWFraW5nIGEgR1N0cmVhbWVyIHBsdWdpbiAnZGVwZW5kZW50JyBvbiBleHRlcm5hbCBmaWxlcywgZGlyZWN0b3JpZXMgb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBzbyB0aGF0IEdTLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDo6CisJICAqIGdzdC9nc3RfcHJpdmF0ZS5oOiAoR3N0UGx1Z2luRGVwKSwgKF9Hc3RQbHVnaW5Qcml2YXRlKToKKwkgICogZ3N0L2dzdHBsdWdpbi5jOiAoZ3N0X3BsdWdpbl9pbml0KSwgKGdzdF9wbHVnaW5fZmluYWxpemUpLAorCSAgKGdzdF9wbHVnaW5fY2xhc3NfaW5pdCksIChnc3RfcGx1Z2luX2xpc3RfZnJlZSksCisJICAoZ3N0X3BsdWdpbl9leHRfZGVwX2dldF9lbnZfdmFyc19oYXNoKSwKKwkgIChfcHJpdl9wbHVnaW5fZGVwc19lbnZfdmFyc19jaGFuZ2VkKSwKKwkgIChnc3RfcGx1Z2luX2V4dF9kZXBfZXh0cmFjdF9lbnZfdmFyc19wYXRocyksCisJICAoZ3N0X3BsdWdpbl9leHRfZGVwX2dldF9oYXNoX2Zyb21fc3RhdF9lbnRyeSksCisJICAoZ3N0X3BsdWdpbl9leHRfZGVwX2RpcmVudHJ5X21hdGNoZXMpLAorCSAgKGdzdF9wbHVnaW5fZXh0X2RlcF9zY2FuX2Rpcl9hbmRfbWF0Y2hfbmFtZXMpLAorCSAgKGdzdF9wbHVnaW5fZXh0X2RlcF9zY2FuX3BhdGhfd2l0aF9maWxlbmFtZXMpLAorCSAgKGdzdF9wbHVnaW5fZXh0X2RlcF9nZXRfc3RhdF9oYXNoKSwKKwkgIChfcHJpdl9wbHVnaW5fZGVwc19maWxlc19jaGFuZ2VkKSwgKGdzdF9wbHVnaW5fZXh0X2RlcF9mcmVlKSwKKwkgIChnc3RfcGx1Z2luX2V4dF9kZXBfc3Rydl9lcXVhbCksIChnc3RfcGx1Z2luX2V4dF9kZXBfZXF1YWxzKSwKKwkgIChnc3RfcGx1Z2luX2FkZF9kZXBlbmRlbmN5KSwgKGdzdF9wbHVnaW5fYWRkX2RlcGVuZGVuY3lfc2ltcGxlKToKKwkgICogZ3N0L2dzdHBsdWdpbi5oOiAoR3N0UGx1Z2luUHJpdmF0ZSksIChHc3RQbHVnaW5GbGFncyksCisJICAoR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfTk9ORSksCisJICAoR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfUkVDVVJTRSksCisJICAoR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfUEFUSFNfQVJFX0RFRkFVTFRfT05MWSksCisJICAoR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfRklMRV9OQU1FX0lTX1NVRkZJWCksCisJICAoR3N0UGx1Z2luRGVwZW5kZW5jeUZsYWdzKSwgKEdzdFBsdWdpbkZpbHRlcik6CisJICAqIGdzdC9nc3RyZWdpc3RyeS5jOiAoZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9sZXZlbCk6CisJICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9zYXZlX2ZlYXR1cmUpLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfc2F2ZV9wbHVnaW5fZGVwKSwKKwkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X3NhdmVfcGx1Z2luKSwKKwkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2xvYWRfZmVhdHVyZSksCisJICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9sb2FkX3BsdWdpbl9kZXBfc3RydiksCisJICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9sb2FkX3BsdWdpbl9kZXApLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfbG9hZF9wbHVnaW4pOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuaDogKEdTVF9NQUdJQ19CSU5BUllfVkVSU0lPTl9TVFIpLAorCSAgKEdzdEJpbmFyeVBsdWdpbkVsZW1lbnQpLCAoX0dzdEJpbmFyeURlcCksIChHc3RCaW5hcnlEZXApOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogKGdzdF9yZWdpc3RyeV94bWxfc2F2ZV9wbHVnaW4pOgorCSAgQWRkIEFQSSBmb3IgbWFraW5nIGEgR1N0cmVhbWVyIHBsdWdpbiAnZGVwZW5kZW50JyBvbiBleHRlcm5hbCBmaWxlcywKKwkgIGRpcmVjdG9yaWVzIG9yIGVudmlyb25tZW50IHZhcmlhYmxlcywgc28gdGhhdCBHU3RyZWFtZXIga25vd3Mgd2hlbgorCSAgaXQgbmVlZHMgdG8gcmUtbG9hZCBHU3RyZWFtZXIgcGx1Z2lucyB0aGF0IHdyYXAgb3RoZXIgcGx1Z2luIHN5c3RlbXMuCisJICBGaXhlcyBidWcgIzM1MDQ3Ny4KKwkgIEFQSTogYWRkIGdzdF9wbHVnaW5fYWRkX2RlcGVuZGVuY3koKQorCSAgQVBJOiBhZGQgZ3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jeV9zaW1wbGUoKQorCisyMDA5LTAxLTA2IDEzOjAwOjExICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6IEFkZCBsaWJnc3RhcHAtMC4xMCBmcm9tIC1iYXNlIHRvIHNlYXJjaCBwYXRoIGFuZCByZW1vdmUgdGhlIG9sZCBsaWIgZnJvbSAtYmFkIGZyb20gdGhlIHNlYXIuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6CisJICBBZGQgbGliZ3N0YXBwLTAuMTAgZnJvbSAtYmFzZSB0byBzZWFyY2ggcGF0aCBhbmQgcmVtb3ZlIHRoZSBvbGQKKwkgIGxpYiBmcm9tIC1iYWQgZnJvbSB0aGUgc2VhcmNoIHBhdGguCisKKzIwMDktMDEtMDUgMTU6NDI6NTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogUmVsZWFzZSB0aGUgb2JqZWN0IGxvY2sgYmVmb3JlIGNhbGxpbmcgdGhlIHF1ZXJ5IGNvbnZlcnQgcGFkIGZ1bmN0aW9ucyB0byBhdm9pZCBkZWFkbG9ja3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb25fbGFzdCksCisJICAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb25fcGF1c2VkKSwgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uKToKKwkgIFJlbGVhc2UgdGhlIG9iamVjdCBsb2NrIGJlZm9yZSBjYWxsaW5nIHRoZSBxdWVyeSBjb252ZXJ0IHBhZCBmdW5jdGlvbnMKKwkgIHRvIGF2b2lkIGRlYWRsb2Nrcy4KKworMjAwOS0wMS0wNSAxNTo0MTowMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJ1cy5jOiBUaGUgbG9jayBvcmRlciBzaG91bGQgYmUgbWFpbmNvbnRleHQgPiBPQkpFQ1RfTE9DSyBzbyB3ZSBuZWVkIHRvIHJlbGVhc2UgdGhlIG9iamVjdCBsb2NrIHdoZW4gd2FraW5nIHVwLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJ1cy5jOiAoZ3N0X2J1c193YWtldXBfbWFpbl9jb250ZXh0KToKKwkgIFRoZSBsb2NrIG9yZGVyIHNob3VsZCBiZSBtYWluY29udGV4dCA+IE9CSkVDVF9MT0NLIHNvIHdlIG5lZWQgdG8gcmVsZWFzZQorCSAgdGhlIG9iamVjdCBsb2NrIHdoZW4gd2FraW5nIHVwIHRoZSBtYWlubG9vcCB0byBhdm9pZCBkZWFkbG9ja3MuCisKKzIwMDktMDEtMDUgMTA6MTQ6MjggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RiaW4uYzogVXNlIGFuIGl0ZXJhdG9yIHRvIHNldCB0aGUgY2xvY2sgYW5kIHRoZSBpbmRleCBzbyB0aGF0IHdlIGNhbiByZWxlYXNlIHRoZSBvYmplY3QgbG9jayBhcHByb3ByaWF0ZWx5LiBGaS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fc2V0X2luZGV4X2Z1bmMpLCAoZ3N0X2Jpbl9zZXRfY2xvY2tfZnVuYyksCisJICAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGVfZnVuYyk6CisJICBVc2UgYW4gaXRlcmF0b3IgdG8gc2V0IHRoZSBjbG9jayBhbmQgdGhlIGluZGV4IHNvIHRoYXQgd2UgY2FuIHJlbGVhc2UKKwkgIHRoZSBvYmplY3QgbG9jayBhcHByb3ByaWF0ZWx5LiBGaXhlcyAjNTY2MzkzLgorCisyMDA5LTAxLTAzIDE4OjM5OjM4ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IFVzZSB0aGUgbmFtZSBvZiB0aGUgcGFkcyBpbnN0ZWFkIG9mIGEgcG9pbnRlciwgaGVscHMgaW4gZGVidWdnaW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0X3BhZHNfYXZhaWxhYmxlKToKKwkgIFVzZSB0aGUgbmFtZSBvZiB0aGUgcGFkcyBpbnN0ZWFkIG9mIGEgcG9pbnRlciwgaGVscHMgaW4gZGVidWdnaW5nLgorCisyMDA5LTAxLTAzIDE4OjE2OjU0ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBnc3QvZ3N0aW5kZXguYzogQWRkIGEgZGVidWdnaW5nIGNhdGVnb3J5IGZvciBHc3RJbmRleCwgZmlyc3QgbGl0dGxlIHN0ZXAgaW4gbWFraW5nIGluZGV4aW5nIHRvcC1ub3RjaC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0aW5kZXguYzogKGdzdF9pbmRleF9nZXRfdHlwZSk6CisJICBBZGQgYSBkZWJ1Z2dpbmcgY2F0ZWdvcnkgZm9yIEdzdEluZGV4LCBmaXJzdCBsaXR0bGUgc3RlcCBpbiBtYWtpbmcKKwkgIGluZGV4aW5nIHRvcC1ub3RjaC4KKworMjAwOS0wMS0wMyAxODoxMDowOCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgZ3N0LzogQXNzaWduIGRlYnVnIHN0YXRlbWVudHMgdG8gcmVsZXZhbnQgY2F0ZWdvcmllcyBpbnN0ZWFkIG9mIHRoZSAnZGVmYXVsdCcgY2F0ZWdvcnkgc28gdGhleSBkb24ndCBnZXQgbG9zdCBpbiBkZWJ1Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X21lc3NhZ2VfZnVsbCksCisJICAoZ3N0X2VsZW1lbnRfcGFkc19hY3RpdmF0ZSk6CisJICAqIGdzdC9nc3RvYmplY3QuYzogKGdzdF9vYmplY3RfZGlzcGF0Y2hfcHJvcGVydGllc19jaGFuZ2VkKToKKwkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfcGFkX3Byb3h5X2dldGNhcHMpLCAoZ3N0X3BhZF9wcm94eV9zZXRjYXBzKSwKKwkgIChnc3RfcGFkX2FkZF9kYXRhX3Byb2JlX2Z1bGwpLCAoZ3N0X3BhZF9hZGRfZXZlbnRfcHJvYmVfZnVsbCksCisJICAoZ3N0X3BhZF9hZGRfYnVmZmVyX3Byb2JlX2Z1bGwpLCAoZ3N0X3BhZF9yZW1vdmVfZGF0YV9wcm9iZSksCisJICAoZ3N0X3BhZF9yZW1vdmVfZXZlbnRfcHJvYmUpLCAoZ3N0X3BhZF9yZW1vdmVfYnVmZmVyX3Byb2JlKToKKwkgIEFzc2lnbiBkZWJ1ZyBzdGF0ZW1lbnRzIHRvIHJlbGV2YW50IGNhdGVnb3JpZXMgaW5zdGVhZCBvZiB0aGUgJ2RlZmF1bHQnCisJICBjYXRlZ29yeSBzbyB0aGV5IGRvbid0IGdldCBsb3N0IGluIGRlYnVnZ2luZy4KKworMjAwOS0wMS0wMSAyMToyNzowNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0ZGVidWd1dGlscy5jOiBBZGQgc29tZSBpZGVhcywgaG93IHRvIG1ha2UgdGhlIGdyYXBoIHNtYWxsZXIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGRlYnVndXRpbHMuYzoKKwkgIEFkZCBzb21lIGlkZWFzLCBob3cgdG8gbWFrZSB0aGUgZ3JhcGggc21hbGxlci4KKwkgICogZ3N0L2dzdHV0aWxzLmM6CisJICBBZGQgYSBjb21tZW50IGZyb20gYSBkZWJ1ZyBzZXNzaW9uLgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIExvZyBtb3JlIGNvbnRleHQuCisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzoKKwkgIEluZGV0LgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKKwkgIEZpeCB0eXBvIGluIGRvY3MuCisKKzIwMDgtMTItMjcgMTc6NDE6MTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RidXMuYzogTWFrZSBHc3RCdXNTb3VyY2Ugd29yayB3aXRoIG5vbi1kZWZhdWx0IG1haW4gY29udGV4dHMgKCM1NjIxNzApLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RidXMuYzogKGdzdF9idXNfZGlzcG9zZSksIChnc3RfYnVzX2dldF9wcm9wZXJ0eSksCisJICAoZ3N0X2J1c193YWtldXBfbWFpbl9jb250ZXh0KSwgKGdzdF9idXNfc2V0X21haW5fY29udGV4dCksCisJICAoZ3N0X2J1c19wb3N0KSwgKGdzdF9idXNfc291cmNlX3ByZXBhcmUpLCAoZ3N0X2J1c19zb3VyY2VfZmluYWxpemUpLAorCSAgKGdzdF9idXNfY3JlYXRlX3dhdGNoKToKKwkgIE1ha2UgR3N0QnVzU291cmNlIHdvcmsgd2l0aCBub24tZGVmYXVsdCBtYWluIGNvbnRleHRzICgjNTYyMTcwKS4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1cy5jOiAobWVzc2FnZV9mdW5jX2VvcyksIChtZXNzYWdlX2Z1bmNfYXBwKSwKKwkgICh0ZXN0X3dhdGNoKSwgKHRlc3Rfd2F0Y2hfd2l0aF9jdXN0b21fY29udGV4dCksIChnc3RfYnVzX3N1aXRlKToKKwkgIEFkZCB0ZXN0IGNhc2UgZm9yIEdzdEJ1c1NvdXJjZSB3aXRoIGEgbm9uLWRlZmF1bHQgbWFpbiBjb250ZXh0LgorCSAgKiB0ZXN0cy9jaGVjay9saWJzLy5jdnNpZ25vcmU6CisJICBJZ25vcmUgbW9yZS4KKworMjAwOC0xMi0yNyAxNjoyMzoxMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IFdyYXAgbXVsdGktbGluZSBtYWNyb3MgaW4gR19TVE1UX3tTVEFSVHxFTkR9LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiAodW5wYWNrX2VsZW1lbnQpLCAodW5wYWNrX2NvbnN0X3N0cmluZyksCisJICAodW5wYWNrX3N0cmluZyk6OgorCSAgV3JhcCBtdWx0aS1saW5lIG1hY3JvcyBpbiBHX1NUTVRfe1NUQVJUfEVORH0uCisKKzIwMDgtMTItMjAgMTc6MzM6NDQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgQVBJOiBBZGQgVVJJIHF1ZXJ5IHR5cGUuIFRoaXMgaXMgdXNlZnVsIHRvIHF1ZXJ5IHRoZSBVUkkgb2YgYSBzaW5rL3NvdXJjZSBlbGVtZW50IGFuZCBjYW4gYmUgdXNlZCBieSBkZW11eGVycyB0aGF0IG5lLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdHF1YXJrLmM6CisJICAqIGdzdC9nc3RxdWFyay5oOgorCSAgKiBnc3QvZ3N0cXVlcnkuYzogKGdzdF9xdWVyeV9uZXdfdXJpKSwgKGdzdF9xdWVyeV9zZXRfdXJpKSwKKwkgIChnc3RfcXVlcnlfcGFyc2VfdXJpKToKKwkgICogZ3N0L2dzdHF1ZXJ5Lmg6CisJICBBUEk6IEFkZCBVUkkgcXVlcnkgdHlwZS4gVGhpcyBpcyB1c2VmdWwgdG8gcXVlcnkgdGhlIFVSSQorCSAgb2YgYSBzaW5rL3NvdXJjZSBlbGVtZW50IGFuZCBjYW4gYmUgdXNlZCBieSBkZW11eGVycyB0aGF0CisJICBuZWVkIHRvIGdldCBkYXRhIGZyb20gb3RoZXIgZmlsZXMuCisJICBUaGlzIHF1ZXJ5IHNob3VsZCBnbyB1cHN0cmVhbSBieSBkZWZhdWx0LgorCSAgRml4ZXMgYnVnICM1NjI5NDkuCisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6IChnc3RfZmRfc2lua19xdWVyeSk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzogKGdzdF9mZF9zcmNfY2xhc3NfaW5pdCksCisJICAoZ3N0X2ZkX3NyY19xdWVyeSk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzogKGdzdF9maWxlX3NpbmtfcXVlcnkpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogKGdzdF9maWxlX3NyY19jbGFzc19pbml0KSwKKwkgIChnc3RfZmlsZV9zcmNfcXVlcnkpOgorCSAgSW1wbGVtZW50IFVSSSBxdWVyeS4KKworMjAwOC0xMi0xOSAxNToxMTowNiArMDAwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZEBnbWFpbC5jb20+CisKKwkgIERvbid0IGZvcndhcmQgZ3N0X3BhZF9zZXRfY2FwcygpIG9uIGEgc291cmNlIGdob3N0cGFkIHRvIGl0cyB0YXJnZXQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGdob3N0cGFkLmM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgorCSAgRG9uJ3QgZm9yd2FyZCBnc3RfcGFkX3NldF9jYXBzKCkgb24gYSBzb3VyY2UgZ2hvc3RwYWQgdG8gaXRzIHRhcmdldC4KKwkgIFRoYXQgd291bGQgY2F1c2UgdGhlIGdob3N0cGFkIHRvIGVtaXQgbm90aWZ5OjpjYXBzIHR3byB0aW1lcyAoZmlzdAorCSAgZnJvbSBnc3RfcGFkX3NldF9jYXBzKCkgYW5kIGFmdGVyIGZyb20gb25fc3JjX3RhcmdldF9ub3RpZnkoKSkuCisKKzIwMDgtMTItMTkgMTE6MjQ6MzYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOiBBZGQgc29tZSBtb3JlIHVuaXQtdGVzdHMgZm9yIHRoZSBnaG9zdHBhZCBub3RpZnkgc2lnbmFsLCBvbmUgb2Ygd2hpY2ggY3VycmVudGx5IGZhaWxzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOiAoZ2hvc3Rfbm90aWZ5X2NhcHMpLAorCSAgKEdTVF9TVEFSVF9URVNUKToKKwkgIEFkZCBzb21lIG1vcmUgdW5pdC10ZXN0cyBmb3IgdGhlIGdob3N0cGFkIG5vdGlmeSBzaWduYWwsIG9uZSBvZiB3aGljaAorCSAgY3VycmVudGx5IGZhaWxzLgorCisyMDA4LTEyLTE5IDA5OjQ0OjQ5ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOiBBZGQgZ3N0X3RhZ19zZXR0ZXJfcmVzZXRfdGFncyB0byB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgQWRkIGdzdF90YWdfc2V0dGVyX3Jlc2V0X3RhZ3MgdG8gdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scy4KKworMjAwOC0xMi0xNyAxNjoxNjo0NSArMDAwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZEBnbWFpbC5jb20+CisKKwkgIEluIGEgc291cmNlIGdob3N0cGFkLCB3aGVuIGNhcHMgYXJlIGNoYW5nZWQgaW4gdGhlIHRhcmdldCBwYWQsIHRoZSBjaGFuZ2UgbmVlZHMgdG8gYmUgcmVmbGVjdGVkIGluIHRoZSBnaG9zdHBhZC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6CisJICBJbiBhIHNvdXJjZSBnaG9zdHBhZCwgd2hlbiBjYXBzIGFyZSBjaGFuZ2VkIGluIHRoZSB0YXJnZXQgcGFkLCB0aGUKKwkgIGNoYW5nZSBuZWVkcyB0byBiZSByZWZsZWN0ZWQgaW4gdGhlIGdob3N0cGFkLgorCSAgRml4ZXMgIzU2NDg2My4KKworMjAwOC0xMi0xNyAwOTozNzo0NyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBnc3QvZ3N0dXRpbHMuYzogQWRkIEZJWE1FIGZvciAwLjExIHRvIHNldCB0aGUgcGFkIGFzIG1lc3NhZ2Ugc291cmNlIGFuZCBub3QgdGhlIGVsZW1lbnQuIE90aGVyd2lzZSBpdCdzIGltcG9zc2libGUgdG8uLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9lbGVtZW50X2ZvdW5kX3RhZ3NfZm9yX3BhZCk6CisJICBBZGQgRklYTUUgZm9yIDAuMTEgdG8gc2V0IHRoZSBwYWQgYXMgbWVzc2FnZSBzb3VyY2UgYW5kIG5vdAorCSAgdGhlIGVsZW1lbnQuIE90aGVyd2lzZSBpdCdzIGltcG9zc2libGUgdG8gZGV0ZWN0IGZvciB3aGljaAorCSAgcGFkIHRoZSB0YWdzIHdlcmUgZm91bmQgd2l0aG91dCBhZGRpbmcgYW4gZXZlbnQgcHJvYmUKKwkgIG9yIHNvbWV0aGluZyBzaW1pbGFyIHRvIHRoZSBwYWQuCisKKzIwMDgtMTItMTYgMjE6MzM6NTcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZmFxL2dlbmVyYWwueG1sOiBVcGRhdGUgdGhlIGZhcS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2ZhcS9nZW5lcmFsLnhtbDoKKwkgIFVwZGF0ZSB0aGUgZmFxLgorCisyMDA4LTEyLTE2IDE1OjUxOjUyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIFJlbmFtZSBhcGkgYWRkZWQgaW4gcHJldmlvdXMgY29tbWl0IGFuZCBhZGQgc2luY2UgdGFnIHRvIGRvY3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdHRhZ3NldHRlci5jOgorCSAgKiBnc3QvZ3N0dGFnc2V0dGVyLmg6CisJICBSZW5hbWUgYXBpIGFkZGVkIGluIHByZXZpb3VzIGNvbW1pdCBhbmQgYWRkIHNpbmNlIHRhZyB0byBkb2NzLgorCSAgQVBJOiBnc3RfdGFnX3NldHRlcl9yZXNldF90YWdzKCkKKworMjAwOC0xMi0xNiAxNDowNTo0MCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBBZGQgZnVuY3Rpb24gdG8gcmVzZXQgdGFnc2V0dGVyIGZvciBlbGVtZW50IHJldXNlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3R0YWdzZXR0ZXIuYzoKKwkgICogZ3N0L2dzdHRhZ3NldHRlci5oOgorCSAgQWRkIGZ1bmN0aW9uIHRvIHJlc2V0IHRhZ3NldHRlciBmb3IgZWxlbWVudCByZXVzZS4KKwkgIEFQSTogZ3N0X3RhZ19zZXR0ZXJfZmx1c2goKQorCisyMDA4LTEyLTE2IDA5OjM3OjUzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3R0YWdsaXN0LmM6IEF2b2lkIGNvcHkgb2YgZW1wdHkgdGFnbGlzdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSAgQXZvaWQgY29weSBvZiBlbXB0eSB0YWdsaXN0LgorCisyMDA4LTEyLTE2IDA5OjIzOjIxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIE1vcmUgY29tcGxldGUgdW5pdCB0ZXN0cy4gRml4IGhhbmRsaW5nIG9mIGVtcHR5IHRhZ2xpc3RzICh0aGV5IHdlcmUgbm90IG1lcmdlZCBiZWZvcmUpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R0YWdsaXN0LmM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R0YWcuYzoKKwkgIE1vcmUgY29tcGxldGUgdW5pdCB0ZXN0cy4gRml4IGhhbmRsaW5nIG9mIGVtcHR5IHRhZ2xpc3RzICh0aGV5IHdlcmUKKwkgIG5vdCBtZXJnZWQgYmVmb3JlKS4KKworMjAwOC0xMi0xNiAwNzowNzozNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvOiBVcGRhdGUgR3N0VGFnU2V0dGVyIGFuZCBHc3RUYWdNZXJnZU1vZGUgZG9jdW1lbnRhdGlvbi4gTWVudGlvbiB0aGF0IHRhZ3MgY2FuIGNvbWUgZnJvbSBldmVudHMgYW5kIGZyb20gYXBwbGljYXQuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dGFnbGlzdC5oOgorCSAgKiBnc3QvZ3N0dGFnc2V0dGVyLmM6CisJICBVcGRhdGUgR3N0VGFnU2V0dGVyIGFuZCBHc3RUYWdNZXJnZU1vZGUgZG9jdW1lbnRhdGlvbi4gTWVudGlvbgorCSAgdGhhdCB0YWdzIGNhbiBjb21lIGZyb20gZXZlbnRzIGFuZCBmcm9tIGFwcGxpY2F0aW9uLiBGaXggZXhhbXBsZS4KKworMjAwOC0xMi0xNSAxNToyNzowNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDogUmVtb3ZlIHRoZSBzZXFudW0gZW50cnkgdGhhdCB3ZSBpbXBsZW1lbnRlZCBpbiAwLjEwIGFscmVhZHkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKKwkgIFJlbW92ZSB0aGUgc2VxbnVtIGVudHJ5IHRoYXQgd2UgaW1wbGVtZW50ZWQgaW4gMC4xMCBhbHJlYWR5LgorCSAgQWRkIGVudHJ5IGFib3V0IHJlbW92aW5nIHRoZSBmb3JtYXQgcmV0dXJuIHZhbHVlIGZvciBxdWVyaWVzLgorCisyMDA4LTEyLTE1IDEyOjQ3OjU5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IEV4cG9zZSB0aGUgcmVuZGVyLWRlbGF5IGFzIGEgcHJvcGVydHkgc28gdGhpbmdzIGxpa2UgYXBwc2luayBjYW4gdXNlIGl0IHRvIHR3ZWFrIHRoZSBzeW4uLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NsYXNzX2luaXQpLAorCSAgKGdzdF9iYXNlX3NpbmtfaW5pdCksIChnc3RfYmFzZV9zaW5rX3NldF9wcm9wZXJ0eSksCisJICAoZ3N0X2Jhc2Vfc2lua19nZXRfcHJvcGVydHkpOgorCSAgRXhwb3NlIHRoZSByZW5kZXItZGVsYXkgYXMgYSBwcm9wZXJ0eSBzbyB0aGluZ3MgbGlrZSBhcHBzaW5rIGNhbiB1c2UgaXQKKwkgIHRvIHR3ZWFrIHRoZSBzeW5jaHJvbmlzYXRpb24uCisKKzIwMDgtMTItMTAgMTU6MTk6NDUgKzAwMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgorCisJICBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOiBBbGxvdyBjaGVjayB0ZXN0cyB0byB1c2UKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOiBBbGxvdyBjaGVjayB0ZXN0cyB0byB1c2UKKwkgIE1BSU5fU1RBUlRfVEhSRUFEUygpL01BSU5fU1RPUF9USFJFQURTKCkgbXVsdGlwbGUgdGltZXMuIEFsc28gYWxsb3dzCisJICBDS19GT1JLPW5vIHRvIGJlIHVzZWQgd2l0aCBtdWx0aXBsZSBjaGVjayB0ZXN0IHRoYXQgdXNlIHRocmVhZHMuCisKKzIwMDgtMTItMDkgMTY6MjM6NTggKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgZ3N0L2dzdHV0aWxzLmM6IEZpeCBhIGNhcHMgbWVtb3J5IGxlYWsgaW50cm9kdWNlZCBieSB0aGUgbGFzdCBjaGFuZ2UuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWQpOgorCSAgRml4IGEgY2FwcyBtZW1vcnkgbGVhayBpbnRyb2R1Y2VkIGJ5IHRoZSBsYXN0IGNoYW5nZS4KKworMjAwOC0xMi0wOSAxNTo0NTozNiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBnc3QvZ3N0dXRpbHMuYzogQ2hlY2sgaWYgdGhlIGNhcHMgb2YgdGhlIHBhZHMgYXJlIGNvbXBhdGlibGUgYmVmb3JlIHJldHVybmluZyBhIHBhZCBhbmQgY2xhaW1pbmcgaXQgaXMgY29tcGF0aWJsZS4gVGguLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9lbGVtZW50X2dldF9jb21wYXRpYmxlX3BhZCk6CisJICBDaGVjayBpZiB0aGUgY2FwcyBvZiB0aGUgcGFkcyBhcmUgY29tcGF0aWJsZSBiZWZvcmUgcmV0dXJuaW5nCisJICBhIHBhZCBhbmQgY2xhaW1pbmcgaXQgaXMgY29tcGF0aWJsZS4gVGhpcywgYW1vbmcgb3RoZXIgdGhpbmdzLAorCSAgZml4ZXMgYSBidWcgd2l0aCBnc3QtbGF1bmNoIHdoZXJlIGFuIGluY29tcGF0aWJsZSBwYWQgaXMgY2hvc2VuCisJICBhbmQgbGlua2luZyBmYWlscy4gRml4ZXMgYnVnICM1NDQwMDMuCisKKzIwMDgtMTItMDkgMTQ6NDY6MjQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzogUmV2ZXJ0IGFjY2lkZW50aWFsbHkgY29tbWl0ZWQgcGF0Y2ggZm9yIGJ1ZyAjNDA0NjMxIHdoaWNoIHRyaWVzIHRvIHByaW50IGEgYmFja3RyYWNlIGlmIGEgLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzogKGdzdF9jaGVja19pbml0KToKKwkgIFJldmVydCBhY2NpZGVudGlhbGx5IGNvbW1pdGVkIHBhdGNoIGZvciBidWcgIzQwNDYzMSB3aGljaAorCSAgdHJpZXMgdG8gcHJpbnQgYSBiYWNrdHJhY2UgaWYgYSB0ZXN0Y2FzZSBpcyB0ZXJtaW5hdGVkIGJ5CisJICBhIHNpZ25hbC4gVGhpcyBjb2RlIHdhcyBuZXZlciBhY3RpdmF0ZWQgYXMgdGhlIGNvcnJlc3BvbmRpbmcKKwkgIGNvbmZpZ3VyZS5hYyBjaGFuZ2Ugd2Fzbid0IGNvbW1pdHRlZC4KKworMjAwOC0xMi0wOSAxMDo1ODowMSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICB0ZXN0cy9jaGVjay9saWJzL2NvbnRyb2xsZXIuYzogVGhpcyB0ZXN0IHNob3VsZCByZXR1cm4gVFJVRSBub3cgYXMgc3luY2luZyBhbiB1bmNvbnRyb2xsZWQgb2JqZWN0IHdpbGwgc3VjY2VlZCBub3cgKHQuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9saWJzL2NvbnRyb2xsZXIuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgIFRoaXMgdGVzdCBzaG91bGQgcmV0dXJuIFRSVUUgbm93IGFzIHN5bmNpbmcgYW4gdW5jb250cm9sbGVkCisJICBvYmplY3Qgd2lsbCBzdWNjZWVkIG5vdyAodGhlcmUncyBub3RoaW5nIHRvIHN5bmMpLgorCisyMDA4LTEyLTA5IDA5OjU2OjI1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOiBBZ2dyZWdhdGUgcmV0dXJuIHZhbHVlIGZvciBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcygpLiBNb3JlIGluZm8gaW4gbG9nZ2luZy4gQS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgorCSAgQWdncmVnYXRlIHJldHVybiB2YWx1ZSBmb3IgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMoKS4gTW9yZSBpbmZvIGluCisJICBsb2dnaW5nLiBBbHdheXMgc2V0IHZhbHVlcyBvbiBmaXJzdCBzeW5jLWNhbGwuCisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbHNvdXJjZS5jOgorCSAgTWljcm9vcHRpbWl6YXRpb25zLgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGhlbHBlci5jOgorCSAgRml4IHJldHVybiBjb2RlIGFuZCBjb21tZW50LgorCisyMDA4LTEyLTA5IDA5OjAwOjU3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIHRvb2xzL2dzdC1sYXVuY2guMS5pbjogRml4IGRlc2NyaXB0aW9uIG9mIGhvdyB0byBzcGVjaWZ5IGEgdHlwZSBpbiBjYXBzLiBGaXhlcyAjNTUzODczLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKKwkgIEZpeCBkZXNjcmlwdGlvbiBvZiBob3cgdG8gc3BlY2lmeSBhIHR5cGUgaW4gY2Fwcy4gRml4ZXMgIzU1Mzg3My4KKwkgIEFsc28gcmFuZ2VzIGFuZCBsaXN0IGNvbnRhaW4gdmFsdWVzIGFuZCBub3QgcHJvcGVydHktYXNzaWdubWVudHMuCisKKzIwMDgtMTItMDggMjI6Mjg6MDUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6IENoZWNrIGZvciBjaGFuZ2VkIHBhZHMtbGlzdCBiZWZvcmUgY2hlY2tpbmcgdGhlIGxhc3QgcmV0dXJuZWQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOiAoZ3N0X3RlZV9oYW5kbGVfYnVmZmVyKToKKwkgIENoZWNrIGZvciBjaGFuZ2VkIHBhZHMtbGlzdCBiZWZvcmUgY2hlY2tpbmcgdGhlIGxhc3QgcmV0dXJuZWQKKwkgIEdzdEZsb3dSZXR1cm4gYmVjYXVzZSB0aGUgcGFkIGNvdWxkIGhhdmUgYmVlbiByZW1vdmVkIGFuZCB3ZQorCSAgbmVlZCB0byBpZ25vcmUgdGhlIHZhbHVlIGluIHRoYXQgY2FzZS4KKworMjAwOC0xMi0wOCAxODozNTo0NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLio6IEFkZCB2bWV0aG9kIHRoYXQgaXMgY2FsbGVkIGJlZm9yZSB3ZSBzdGFydCB0aGUgdHJhbnNmb3JtIGFuZCB3aGljaCBjYW4gYmUgdXNlZCB0byBjLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3ByZXBhcmVfb3V0cHV0X2J1ZmZlciksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldHJhbmdlKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9jaGFpbik6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgorCSAgQWRkIHZtZXRob2QgdGhhdCBpcyBjYWxsZWQgYmVmb3JlIHdlIHN0YXJ0IHRoZSB0cmFuc2Zvcm0gYW5kIHdoaWNoIGNhbgorCSAgYmUgdXNlZCB0byBjb25maWd1cmUgdGhlIHRyYW5zZm9ybSwgc3VjaCBhcyBkeW5hbWljIHByb3BlcnRpZXMuCisKKzIwMDgtMTItMDUgMjA6MzI6MDMgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJICBnc3QvZ3N0LmM6IFNlYXJjaCBmb3IgcGx1Z2lucyBvbiB3aW4zMiBiYXNlZCBvbiB0aGUgbG9jYXRpb24gb2YgdGhlIGdzdHJlYW1lciBETEwuICBGaXhlcyAjNTQ4Nzg2CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdC5jOgorCSAgU2VhcmNoIGZvciBwbHVnaW5zIG9uIHdpbjMyIGJhc2VkIG9uIHRoZSBsb2NhdGlvbiBvZiB0aGUKKwkgIGdzdHJlYW1lciBETEwuICBGaXhlcyAjNTQ4Nzg2CisKKzIwMDgtMTItMDQgMjA6MTA6NDIgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgY29uZmlndXJlLmFjOiBBcHBhcmVudGx5IEFDX0NPTkZJR19NQUNST19ESVIgYnJlYWtzIHdoZW4gdXNpbmcgbW9yZSB0aGFuIG9uZSBtYWNybyBkaXJlY3RvcnksIHJldmVydGluZyBsYXN0IGNoYW5nZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICBBcHBhcmVudGx5IEFDX0NPTkZJR19NQUNST19ESVIgYnJlYWtzIHdoZW4gdXNpbmcgbW9yZQorCSAgdGhhbiBvbmUgbWFjcm8gZGlyZWN0b3J5LCByZXZlcnRpbmcgbGFzdCBjaGFuZ2UuCisKKzIwMDgtMTItMDQgMTk6NDU6MDUgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgY29uZmlndXJlLmFjOiBTZXQgQUNfQ09ORklHX01BQ1JPX0RJUiB0byBjb21tb24vbTQgdG8gcG9pbnQgYXV0b2NvbmYgdG8gb3VyIE00IG1hY3Jvcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICBTZXQgQUNfQ09ORklHX01BQ1JPX0RJUiB0byBjb21tb24vbTQgdG8gcG9pbnQgYXV0b2NvbmYgdG8KKwkgIG91ciBNNCBtYWNyb3MuCisKKzIwMDgtMTEtMjkgMTM6Mjk6MTQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgUmVxdWlyZSBnZXR0ZXh0IDAuMTcgYmVjYXVzZSBvbGRlciB2ZXJzaW9ucyBkb24ndCBtaXggd2l0aCBsaWJ0b29sIDIuMi4gQXQgYnVpbGQgdGltZSBhbiBvbGRlciBnZXR0ZXh0IHZlcnNpb24gd2lsbCBzLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBDeWd3aW4gUG9ydHMgbWFpbnRhaW5lcgorCSAgPHlzZWxrb3dpdHogYXQgdXNlcnMgZG90IHNvdXJjZWZvcmdlIGRvdCBuZXQ+CisJICAqIGF1dG9nZW4uc2g6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgIFJlcXVpcmUgZ2V0dGV4dCAwLjE3IGJlY2F1c2Ugb2xkZXIgdmVyc2lvbnMgZG9uJ3QgbWl4IHdpdGggbGlidG9vbAorCSAgMi4yLiBBdCBidWlsZCB0aW1lIGFuIG9sZGVyIGdldHRleHQgdmVyc2lvbiB3aWxsIHN0aWxsIHdvcmsuCisJICBGaXhlcyBidWcgIzU1NjA5MS4KKworMjAwOC0xMS0yNyAxMToxMjozMCArMDAwMCAg7J2066y47ZiVIDxpd2luZ3NAZ21haWwuY29tPgorCisJICBnc3QvZ3N0cG9sbC5jOiBBZGRzIHN1cHBvcnQgZm9yIEZEX0NPTk5FQ1QgZXZlbnQgKHdpbjMyKS4gU2VlICM1NjIyNTguCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiDsnbTrrLjtmJUgPGl3aW5ncyBhdCBnbWFpbCBkb3QgY29tPgorCSAgKiBnc3QvZ3N0cG9sbC5jOiAoZ3N0X3BvbGxfZmRfY3RsX3dyaXRlKSwgKGdzdF9wb2xsX2ZkX2hhc19lcnJvcik6CisJICBBZGRzIHN1cHBvcnQgZm9yIEZEX0NPTk5FQ1QgZXZlbnQgKHdpbjMyKS4gU2VlICM1NjIyNTguCisKKzIwMDgtMTEtMjQgMjA6MDI6NTUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBUdXJuIGNvbW1lbnQgaW50byBndGstZG9jIGNvbW1lbnQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgVHVybiBjb21tZW50IGludG8gZ3RrLWRvYyBjb21tZW50LgorCisyMDA4LTExLTI0IDE1OjI3OjU1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogUmV2ZXJ0IHF1aWNrIGFjY2VwY2FwcyBhdHRlbXB0LCBpdCdzIG5vdCBmdWxseSBlcXVpdmFsZW50IHRvIHRoZSBvbGQgYmVoYXZpb3VyIGFuZCAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fYWNjZXB0Y2Fwcyk6CisJICBSZXZlcnQgcXVpY2sgYWNjZXBjYXBzIGF0dGVtcHQsIGl0J3Mgbm90IGZ1bGx5IGVxdWl2YWxlbnQgdG8gdGhlIG9sZAorCSAgYmVoYXZpb3VyIGFuZCB0aHVzIGNhdXNlcyByZWdyZXNzaW9ucy4KKworMjAwOC0xMS0yNCAxMTo1Njo0NCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IEZpeCBtZW1vcnkgbGVhay4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogKGdzdF9maWxlX3NyY191cmlfc2V0X3VyaSk6CisJICBGaXggbWVtb3J5IGxlYWsuCisKKzIwMDgtMTEtMjQgMDk6NTk6MDcgKzAwMDAgIFNpbW9uIEhvbG0gVGjDuGdlcnNlbiA8b2RpZUBjcy5hYXUuZGs+CisKKwkgIGdzdC9nc3RyZWdpc3RyeS5jOiBSZWR1Y2UgdGhlIG51bWJlciBvZiBzdGF0KCkgY2FsbHMgZm9yIGV2ZXJ5IGZpbGUgZnJvbSB0aHJlZSB0aW1lcyB0byBvbmUgdGltZS4gRml4ZXMgYnVnICM1NjAzNjAuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBTaW1vbiBIb2xtIFRow7hnZXJzZW4gPG9kaWUgYXQgY3MgZG90IGFhdSBkb3QgZGs+CisJICAqIGdzdC9nc3RyZWdpc3RyeS5jOiAoZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9sZXZlbCk6CisJICBSZWR1Y2UgdGhlIG51bWJlciBvZiBzdGF0KCkgY2FsbHMgZm9yIGV2ZXJ5IGZpbGUgZnJvbSB0aHJlZSB0aW1lcworCSAgdG8gb25lIHRpbWUuIEZpeGVzIGJ1ZyAjNTYwMzYwLgorCisyMDA4LTExLTIyIDE1OjA5OjIwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogUmVuYW1lIGEgdmFyaWFibGUgdG8gbWFrZSB0aGUgY29kZSBjbGVhcmVyLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9hY2NlcHRjYXBzKToKKwkgIFJlbmFtZSBhIHZhcmlhYmxlIHRvIG1ha2UgdGhlIGNvZGUgY2xlYXJlci4KKworMjAwOC0xMS0yMSAyMDo1NzoxNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IERvbid0IHdhcm5pbmcgb24gb2Zmc2V0PT0tMS4gVGFrZW4gZnJvbSBfY2hlY2tfaW1wZXJmZWN0X29mZnNldCgpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKKwkgIERvbid0IHdhcm5pbmcgb24gb2Zmc2V0PT0tMS4gVGFrZW4gZnJvbSBfY2hlY2tfaW1wZXJmZWN0X29mZnNldCgpLgorCisyMDA4LTExLTIxIDE4OjI2OjE0ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiBDaGVjayBmb3IgbG9jYWxob3N0IGluIFVSSSB3YXMgYmFja3dhcmRzLCBmaXggaXQuIEZpeGVzIHVuaXQgdGVzdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKKwkgIENoZWNrIGZvciBsb2NhbGhvc3QgaW4gVVJJIHdhcyBiYWNrd2FyZHMsIGZpeCBpdC4gRml4ZXMgdW5pdCB0ZXN0LgorCisyMDA4LTExLTIxIDE3OjE0OjQ4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogQWRkIGJlZ2lubmluZ3Mgb2YgYSBtb3JlIG9wdGltaXplZCBhY2NlcHRjYXBzIGZ1bmN0aW9uIHRoYW4gdGhlIGRlZmF1bHQgY29yZSBvbmUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1faW5pdCksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldGNhcHMpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2ZpbmRfdHJhbnNmb3JtKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fYWNjZXB0Y2FwcyksIChnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0cmFuZ2UpOgorCSAgQWRkIGJlZ2lubmluZ3Mgb2YgYSBtb3JlIG9wdGltaXplZCBhY2NlcHRjYXBzIGZ1bmN0aW9uIHRoYW4gdGhlIGRlZmF1bHQKKwkgIGNvcmUgb25lLgorCisyMDA4LTExLTIxIDE2OjQ4OjQ4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0cGFkLmM6IEF2b2lkIGdldHRpbmcgdGhlIGFjY2VwdGNhcHMgZnVuY3Rpb24gdG9vIGVhcmx5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfYWNjZXB0X2NhcHMpOgorCSAgQXZvaWQgZ2V0dGluZyB0aGUgYWNjZXB0Y2FwcyBmdW5jdGlvbiB0b28gZWFybHkuCisKKzIwMDgtMTEtMjEgMDg6MDk6MDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHRvb2xzL2dzdC1sYXVuY2guYzogTWFrZSBnc3QtbGF1bmNoIGhhbmRsZSBMQVRFTkNZIG1lc3NhZ2VzIGFuZCBtYWtlIGl0IHJlY2FsY3VsYXRlIHRoZSBsYXRlbmN5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKGV2ZW50X2xvb3ApOgorCSAgTWFrZSBnc3QtbGF1bmNoIGhhbmRsZSBMQVRFTkNZIG1lc3NhZ2VzIGFuZCBtYWtlIGl0IHJlY2FsY3VsYXRlIHRoZQorCSAgbGF0ZW5jeS4KKworMjAwOC0xMS0yMCAyMTowNToxNCArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogVXNlIGdfZmlsZW5hbWVfZnJvbV91cmkoKSBmb3IgVVJJIHBhcnNpbmcgaW4gZmlsZXNyYyByYXRoZXIgdGhhbiByb2xsaW5nIG91dCBvd24gc2xpZ2guLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKKwkgIFVzZSBnX2ZpbGVuYW1lX2Zyb21fdXJpKCkgZm9yIFVSSSBwYXJzaW5nIGluIGZpbGVzcmMgcmF0aGVyIHRoYW4gcm9sbGluZworCSAgb3V0IG93biBzbGlnaHRseSBpbmNvcnJlY3QgdmVyc2lvbi4gRml4ZXMgdXNlIG9mIHNvbWUgcGF0aHMgb24KKwkgIHdpbjMyLgorCisyMDA4LTExLTIwIDIwOjQ0OjU2ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+CisKKwkgIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiBJbiB3aW4zMiBjb2RlcGF0aCwgaWYgd2UgZmFpbCB0byB3cml0ZSB0aGUgcmVnaXN0cnksIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IGZvciBpdCBhbmQgdHJ5IGFnYS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgorCSAgSW4gd2luMzIgY29kZXBhdGgsIGlmIHdlIGZhaWwgdG8gd3JpdGUgdGhlIHJlZ2lzdHJ5LCBjcmVhdGUgdGhlCisJICBkaXJlY3RvcnkgZm9yIGl0IGFuZCB0cnkgYWdhaW4sIG1hdGNoaW5nIHRoZSBiZWhhdmlvdXIgaW4gbm9uLXdpbjMyCisJICBjb2RlcGF0aHMuCisKKzIwMDgtMTEtMjAgMTQ6MjM6MDUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogQ2hhbmdpbmcgdGhlIHJlbmRlciBkZWxheSBjaGFuZ2VzIHRoZSBsYXRlbmN5IGFuZCBzbyB3ZSBtdXN0IHBvc3QgYSBsYXRlbmN5IG1lc3NhZ2UuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19zZXRfcmVuZGVyX2RlbGF5KToKKwkgIENoYW5naW5nIHRoZSByZW5kZXIgZGVsYXkgY2hhbmdlcyB0aGUgbGF0ZW5jeSBhbmQgc28gd2UgbXVzdCBwb3N0IGEKKwkgIGxhdGVuY3kgbWVzc2FnZS4KKworMjAwOC0xMS0yMCAxMDozNTo1MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHF1ZXJ5Lio6IEFkZCBHc3RRdWVyeVR5cGUgZm9yIGN1c3RvbSBxdWVyaWVzIGluc3RlYWQgb2YgaGF2aW5nIHRvIHVzZSB0aGUgbm90LXNvLXZlcnktY29udmVuaWVudCByZWdpc3RyYXRpb24gLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHF1ZXJ5LmM6CisJICAqIGdzdC9nc3RxdWVyeS5oOgorCSAgQWRkIEdzdFF1ZXJ5VHlwZSBmb3IgY3VzdG9tIHF1ZXJpZXMgaW5zdGVhZCBvZiBoYXZpbmcgdG8gdXNlIHRoZQorCSAgbm90LXNvLXZlcnktY29udmVuaWVudCByZWdpc3RyYXRpb24gaW5mcmFzdHJ1Y3R1cmUgdG8gcmVnaXN0ZXIgbmV3CisJICB0eXBlcy4KKworMjAwOC0xMS0xOSAxMjoyMDowMyArMDAwMCAgQW5kcmV3IEZlcmVuIDxhY2ZlcmVuQHlhaG9vLmNvbT4KKworCSAgZ3N0L2dzdG9iamVjdC5jOiBVbnJlZiB0aGUgR0VudW1DbGFzcyBhZnRlciB1c2FnZSBhZ2Fpbi4gRml4ZXMgYnVnICM1NjE1MDEuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBBbmRyZXcgRmVyZW4gPGFjZmVyZW4gYXQgeWFob28gZG90IGNvbT4KKwkgICogZ3N0L2dzdG9iamVjdC5jOiAoZ3N0X29iamVjdF9kZWZhdWx0X2RlZXBfbm90aWZ5KToKKwkgIFVucmVmIHRoZSBHRW51bUNsYXNzIGFmdGVyIHVzYWdlIGFnYWluLiBGaXhlcyBidWcgIzU2MTUwMS4KKworMjAwOC0xMS0xOSAxMjowNjo0MSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJpbi4qOiBBZGQgZG8tbGF0ZW5jeSBzaWduYWwgd2l0aCB0aGUgb2xkIGRlZmF1bHQgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24uIFRoaXMgYWxsb3dzIGZvciBjdXN0b20gbGF0ZW5jeSBjYWxjLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAoX2dzdF9ib29sZWFuX2FjY3VtdWxhdG9yKSwgKGdzdF9iaW5fY2xhc3NfaW5pdCksCisJICAoZ3N0X2Jpbl9yZWNhbGN1bGF0ZV9sYXRlbmN5KSwgKGdzdF9iaW5fZG9fbGF0ZW5jeV9mdW5jKSwKKwkgIChnc3RfYmluX2NoYW5nZV9zdGF0ZV9mdW5jKToKKwkgICogZ3N0L2dzdGJpbi5oOgorCSAgQWRkIGRvLWxhdGVuY3kgc2lnbmFsIHdpdGggdGhlIG9sZCBkZWZhdWx0IGZhbGxiYWNrIGltcGxlbWVudGF0aW9uLiBUaGlzCisJICBhbGxvd3MgZm9yIGN1c3RvbSBsYXRlbmN5IGNhbGN1bGF0aW9ucyBmb3Igd2hlbiB0aGUgZGVmYXVsdCBpcyBub3QKKwkgIHN1ZmZpY2llbnQuCisJICBBUEk6IEdzdEJpbjo6ZG8tbGF0ZW5jeSBzaWduYWwuCisKKzIwMDgtMTEtMTggMTM6MzY6MjkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOiBBZGQgbmV3IHN5bWJvbHMgdG8gLmRlZiBmaWxlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgQWRkIG5ldyBzeW1ib2xzIHRvIC5kZWYgZmlsZS4KKworMjAwOC0xMS0xOCAwOTo1ODozMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgQWRkIG1ldGhvZCB0byByZWNhbGN1bGF0ZSBhbmQgcmVkaXN0cmlidXRlIHRoZSBsYXRlbmN5IG9uIGEgYmluLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fcmVjYWxjdWxhdGVfbGF0ZW5jeSksCisJICAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGVfZnVuYyk6CisJICAqIGdzdC9nc3RiaW4uaDoKKwkgIEFkZCBtZXRob2QgdG8gcmVjYWxjdWxhdGUgYW5kIHJlZGlzdHJpYnV0ZSB0aGUgbGF0ZW5jeSBvbiBhIGJpbi4KKwkgIEFQSTogZ3N0X2Jpbl9yZWNhbGN1bGF0ZV9sYXRlbmN5KCkuCisKKzIwMDgtMTEtMTggMDk6NTI6NDEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RidWZmZXIuaDogRG9jdW1lbnQgdGhlIGZyZWVfZnVuYy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YnVmZmVyLmg6CisJICBEb2N1bWVudCB0aGUgZnJlZV9mdW5jLgorCisyMDA4LTExLTE3IDIxOjQzOjA2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvOiBVc2UgZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSBpbnN0ZWFkIG9mIGdzdF91dGlsX2d1aW50NjRfdG9fZ2RvdWJsZSBhcyBpdCBpcyBtYXBwZWQgdG8gYSBjYXN0IG9uIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuYzoKKwkgIFVzZSBnc3RfZ3VpbnQ2NF90b19nZG91YmxlIGluc3RlYWQgb2YgZ3N0X3V0aWxfZ3VpbnQ2NF90b19nZG91YmxlCisJICBhcyBpdCBpcyBtYXBwZWQgdG8gYSBjYXN0IG9uIG5vbi13aW4zMiBwbGF0Zm9ybXMuCisKKzIwMDgtMTEtMTcgMjE6NDE6MzUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgbGlicy9nc3QvY29udHJvbGxlci86IEtlZXAgbGFzdC12YWx1ZSBhbmQgb25seSBjYWxsIHNldF9wcm9wZXJ0eSBpZiB2YWx1ZSBoYXMgY2hhbmdlZC4gVGhpcyBzdXByZXNzZXMgYWxsIHRoZSBnX29iamVjLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlcnByaXZhdGUuaDoKKwkgIEtlZXAgbGFzdC12YWx1ZSBhbmQgb25seSBjYWxsIHNldF9wcm9wZXJ0eSBpZiB2YWx1ZSBoYXMgY2hhbmdlZC4gVGhpcworCSAgc3VwcmVzc2VzIGFsbCB0aGUgZ19vYmplY3Rfbm90aWZpZXMgd2Ugd291bGQgdHJpZ2dlciBvdGhlcndpc2UuIEl0CisJICBhbHNvIGFsbG93cyB0aGUgdXNlciB0byBjaGFnZSB0aGUgdmFsdWUgd2hpbGUgdGhlcmUgaXMgbm8gY29udHJvbGxlcgorCSAgY2hhbmdlLgorCisyMDA4LTExLTE3IDIxOjI1OjM5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3R2YWx1ZS5jOiBEb24ndCBjcmFzaCBpZiBlaXRoZXIgb2YgdGhlIHN0cmluZyBHVmFsdWVzIGlzIGVtcHR5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R2YWx1ZS5jOgorCSAgRG9uJ3QgY3Jhc2ggaWYgZWl0aGVyIG9mIHRoZSBzdHJpbmcgR1ZhbHVlcyBpcyBlbXB0eS4KKworMjAwOC0xMS0xNyAxNTo0ODoxNCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICB0b29scy9nc3QtaW5zcGVjdC5jIChwcmludF9hbGxfdXJpX2hhbmRsZXJzKTogTmV3IGZ1bmN0aW9uLCBwcmludHMgYSBzdW1tYXJ5IG9mIHdoYXQgVVJJIHNjaGVtZXMgYXJlIHN1cHBvcnRlZCBieSB3aGEuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwOC0xMS0xNyAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogdG9vbHMvZ3N0LWluc3BlY3QuYyAocHJpbnRfYWxsX3VyaV9oYW5kbGVycyk6IE5ldyBmdW5jdGlvbiwKKwkgIHByaW50cyBhIHN1bW1hcnkgb2Ygd2hhdCBVUkkgc2NoZW1lcyBhcmUgc3VwcG9ydGVkIGJ5IHdoYXQKKwkgIGVsZW1lbnRzLgorCSAgKG1haW4pOiBQbHVtYiBpbiBzdXBwb3J0IGZvciAtLXVyaS1oYW5kbGVycyBvciAtdSwgYW5kIGZpeCB0aGUKKwkgIGFyZ2MgY2hlY2sgZm9yIC1hIGFuZCAtdS4KKworMjAwOC0xMS0xNyAwNDo0OTowNiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBnc3QvZ3N0dXRpbHMuaDogQWRkIEdfR05VQ19QVVJFIHRvIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSogYW5kIHRoZSBkb3VibGU8LT51aW50NjQgY29udmVyc2lvbiBmdW5jdGlvbnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHV0aWxzLmg6CisJICBBZGQgR19HTlVDX1BVUkUgdG8gZ3N0X3V0aWxfdWludDY0X3NjYWxlKiBhbmQgdGhlIGRvdWJsZTwtPnVpbnQ2NAorCSAgY29udmVyc2lvbiBmdW5jdGlvbnMuCisKKzIwMDgtMTEtMTMgMTg6MDk6NDUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RidWZmZXIuYzogQXZvaWQgY29zdGx5IHR5cGVjaGVja2luZyBmb3IgdHJpdmlhbGx5IGNvcnJlY3QgcG9pbnRlcnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJ1ZmZlci5jOiAoZ3N0X2J1ZmZlcl9maW5hbGl6ZSk6CisJICBBdm9pZCBjb3N0bHkgdHlwZWNoZWNraW5nIGZvciB0cml2aWFsbHkgY29ycmVjdCBwb2ludGVycy4KKwkgICogZ3N0L2dzdHBvbGwuYzogKGdzdF9wb2xsX3dhaXQpOgorCSAgQWRkIHNvbWUgR19MSUtFTFkgaGVyZSBhbmQgdGhlcmUuCisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOiAoZ3N0X2FkYXB0ZXJfcHVzaCk6CisJICBBZGQgc29tZSBkZWJ1ZyBpbmZvLgorCisyMDA4LTExLTEzIDE4OjA1OjQwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL3JhbmRvbS93dGF5L3BvbGwtdGltZW91dDogU21hbGwgdHdlYWtzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcmFuZG9tL3d0YXkvcG9sbC10aW1lb3V0OgorCSAgU21hbGwgdHdlYWtzLgorCisyMDA4LTExLTEzIDE4OjAzOjIzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICB0ZXN0cy9vbGQvdGVzdHN1aXRlLzogUmVtb3ZlIHJlZmVyZW5jZXMgdG8gZGVwcmVjYXRlZCBBUEkgZ19tZW1fY2h1bmsqLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2Fwcy9pbnRlcnNlY3Rpb24uYzogKG1haW4pOgorCSAgKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3BsdWdpbi9sb2FkaW5nLmM6IChtYWluKToKKwkgIFJlbW92ZSByZWZlcmVuY2VzIHRvIGRlcHJlY2F0ZWQgQVBJIGdfbWVtX2NodW5rKi4KKwkgIEZpeGVzICM1NjA0NDIuCisKKzIwMDgtMTEtMTIgMTY6NTU6MDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHRvb2xzL2dzdC1pbnNwZWN0LmM6IEFkZCAtLXBsdWdpbiBvcHRpb24uIEZpeGVzICM1NjAzMDEuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKG1haW4pOgorCSAgQWRkIC0tcGx1Z2luIG9wdGlvbi4gRml4ZXMgIzU2MDMwMS4KKworMjAwOC0xMS0xMiAxMjo0NTo0NiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9yYW5kb20vd3RheS9wb2xsLXRpbWVvdXQ6IFF1aWNrIGJyYWluZHVtcCBmb3IgYSBwb3NzaWJsZSAobm90IHRvdGFsbHkgdmVyaWZpZWQpIGF0b21pYyBjYXNlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcmFuZG9tL3d0YXkvcG9sbC10aW1lb3V0OgorCSAgUXVpY2sgYnJhaW5kdW1wIGZvciBhIHBvc3NpYmxlIChub3QgdG90YWxseSB2ZXJpZmllZCkgYXRvbWljIGNhc2UuCisKKzIwMDgtMTEtMTIgMTA6Mzk6MjUgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5Lio6IERvbid0IHdyaXRlIGFuZCBjaGVjayBhIENSQyBmb3IgdGhlIGJpbmFyeSByZWdpc3RyeSBmaWxlLiBJdCdzIGd1YXJhbnRlZWQgdGhhdCB0aGUgcmVnaXN0cnkgLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IChnc3RfcmVnaXN0cnlfYmluYXJ5X3dyaXRlX2NodW5rKSwKKwkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2luaXRpYWxpemVfbWFnaWMpLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfd3JpdGVfY2FjaGUpLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfY2hlY2tfbWFnaWMpOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuaDoKKwkgIERvbid0IHdyaXRlIGFuZCBjaGVjayBhIENSQyBmb3IgdGhlIGJpbmFyeSByZWdpc3RyeSBmaWxlLiBJdCdzCisJICBndWFyYW50ZWVkIHRoYXQgdGhlIHJlZ2lzdHJ5IGlzIGNvbXBsZXRlbHkgd3JpdHRlbiAoaXQncyBmaXJzdCB3cml0dGVuCisJICB0byBhIHRlbXBvcmFyeSBmaWxlIGFuZCB0aGVuIG1vdmVkKSBhbmQgaWYgdGhlIHJlZ2lzdHJ5IHdhcyBjb3JydXB0ZWQKKwkgIGJ5IHNvbWUgaGFyZHdhcmUgZmFpbHVyZSB3ZSB3b3VsZCBoYXZlIGJpZ2dlciBwcm9ibGVtcy4KKwkgIEJ1bXAgYmluYXJ5IHJlZ2lzdHJ5IHZlcnNpb24gdG8gMC4xMC4yMS4xIGZvciB0aGlzIGFzIGl0J3MgYW4KKwkgIGluY29tcGF0aWJsZSBjaGFuZ2UgYW5kIHRvIGVuc3VyZSB0aGF0IHRoZSByZWdpc3RyeSBnZXRzIHJlYnVpbGQKKwkgIGFmdGVyIHRoZSB1cGRhdGUuCisJICBUaGlzIHNhdmVzIHNvbWUgbWlsbGlzZWNvbmRzIGZvciByZWFkaW5nL3dyaXRpbmcgdGhlIHJlZ2lzdHJ5LgorCSAgRml4ZXMgYnVnICM1NjAzOTkuCisKKzIwMDgtMTEtMTEgMTQ6NTA6MjQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvcmFuZG9tL3d0YXkvcG9sbC10aW1lb3V0OiBTb21lIHBzZXVkbyBjb2RlIGZvciBob3cgd2UgY291bGQgaW1wbGVtZW50IGNsb2NrIHRpbWVvdXRzIHdpdGggR3N0UG9sbC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL3JhbmRvbS93dGF5L3BvbGwtdGltZW91dDoKKwkgIFNvbWUgcHNldWRvIGNvZGUgZm9yIGhvdyB3ZSBjb3VsZCBpbXBsZW1lbnQgY2xvY2sgdGltZW91dHMgd2l0aCBHc3RQb2xsLgorCisyMDA4LTExLTEwIDEzOjU2OjUxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOiBVcGRhdGUgQXV0aG9yIHN0cmluZyB0byBtYXRjaCBvdGhlcnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgorCSAgVXBkYXRlIEF1dGhvciBzdHJpbmcgdG8gbWF0Y2ggb3RoZXJzLgorCisyMDA4LTExLTA2IDE1OjM3OjE2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0dmFsdWUuYzogUmVvcmdhbml6ZSBzb21lIG1vcmUsIGJlIG1vcmUgY29uc2VydmF0aXZlIHdpdGggdGhlIEdTVF9UWVBFX0FSUkFZIG5vdCBiZWluZyBmaXhlZCBhbmQgaW5saW5lIHRoZSB0cmkuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF90eXBlX2lzX2ZpeGVkKSwgKGdzdF92YWx1ZV9pc19maXhlZCk6CisJICBSZW9yZ2FuaXplIHNvbWUgbW9yZSwgYmUgbW9yZSBjb25zZXJ2YXRpdmUgd2l0aCB0aGUgR1NUX1RZUEVfQVJSQVkgbm90CisJICBiZWluZyBmaXhlZCBhbmQgaW5saW5lIHRoZSB0cml2aWFsIGNoZWNrLgorCisyMDA4LTExLTA2IDE1OjA5OjM0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0Y2Fwcy5jOiBDYWxsZ3JpbmQgbWljcm8gb3B0aW1pc2F0aW9ucy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0Y2Fwcy5jOiAoZ3N0X2NhcHNfY29weSksIChfZ3N0X2NhcHNfZnJlZSksCisJICAoZ3N0X2NhcHNfbWVyZ2Vfc3RydWN0dXJlKSwgKGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUpLAorCSAgKGdzdF9jYXBzX2NvcHlfbnRoKSwgKGdzdF9jYXBzX3NldF9zaW1wbGUpLAorCSAgKGdzdF9jYXBzX3NldF9zaW1wbGVfdmFsaXN0KSwgKGdzdF9jYXBzX2lzX2ZpeGVkKSwKKwkgIChnc3RfY2Fwc19pc19lcXVhbF9maXhlZCksIChnc3RfY2Fwc19pbnRlcnNlY3QpLAorCSAgKGdzdF9jYXBzX3N1YnRyYWN0KSwgKGdzdF9jYXBzX25vcm1hbGl6ZSksIChnc3RfY2Fwc19kb19zaW1wbGlmeSksCisJICAoZ3N0X2NhcHNfdG9fc3RyaW5nKToKKwkgIENhbGxncmluZCBtaWNybyBvcHRpbWlzYXRpb25zLgorCSAgQXZvaWQgYXJyYXkgYm91bmRzIGNoZWNrcyBhbmQgZm9yY2UgaW5saW5lIG9mIHRyaXZpYWwgZnVuY3Rpb24uCisJICAqIGdzdC9nc3RvYmplY3QuYzogKGdzdF9vYmplY3Rfc2V0X25hbWVfZGVmYXVsdCk6CisJICAtMSBpcyBlcXVpdmFsZW50IHRvIGxldHRpbmcgZ2xpYiB0byB0aGUgc3RybGVuIGJ1dCB0aGVuIHRoZXJlIGlzIG1vcmUKKwkgIHJvb20gZm9yIG9wdGltaXNhdGlvbnMgYW5kIGl0J3Mgbm90IG91ciBmYXVsdC4KKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOiAoZ3N0X3N0cnVjdHVyZV9pZF9lbXB0eV9uZXdfd2l0aF9zaXplKToKKwkgIG5vIG5lZWQgdG8gY2xlYXIgdGhlIGFycmF5LCB3ZSdyZSBjb29sLgorCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF90eXBlX2lzX2ZpeGVkKSwgKGdzdF92YWx1ZV9pc19maXhlZCk6CisJICBUaGUgbW9zdCBjb21tb24gX2lzX2ZpeGVkKCkgY2hlY2sgaXMgZG9uZSBvbiBmdW5kYW1lbnRhbCBnbGliIGJhc2UKKwkgIHR5cGVzIHNvIHdlIGNoZWNrIHRoaXMgZmlyc3QgaW5zdGVhZCBvZiBkb2luZyBhIGh1Z2UgYW1vdW50IG9mCisJICB1c2VsZXNzIEdTVF9UWVBFX0FSUkFZIGNhbGxzLgorCisyMDA4LTExLTA2IDEyOjAzOjE3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0ZXZlbnQuaDogQWRkIGEgU0tJUCBzZWVrIGZsYWcgZm9yIHVzZSB3aXRoIGFkdmFuY2VkIHRyaWNrbW9kZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGV2ZW50Lmg6CisJICBBZGQgYSBTS0lQIHNlZWsgZmxhZyBmb3IgdXNlIHdpdGggYWR2YW5jZWQgdHJpY2ttb2Rlcy4KKwkgIEFQSTogR3N0U2Vla0ZsYWdzOjpHU1RfU0VFS19GTEFHX1NLSVAKKworMjAwOC0xMS0wNSAxNjo1NzozNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHN0cnVjdHVyZS5jOiBObyBuZWVkIHRvIG1lbXNldCwgd2UgY2FuIGNsZWFyIHRoZSB2YWx1ZSBvdXJzZWx2ZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOiAoZ3N0X3N0cnVjdHVyZV9pZF9lbXB0eV9uZXdfd2l0aF9zaXplKToKKwkgIE5vIG5lZWQgdG8gbWVtc2V0LCB3ZSBjYW4gY2xlYXIgdGhlIHZhbHVlIG91cnNlbHZlcy4KKwkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdHlwZV9pc19maXhlZCksCisJICAoZ3N0X3ZhbHVlX2dldF9jb21wYXJlX2Z1bmMpOgorCSAgU29tZSBvcHRpbWlzYXRpb25zIGZyb20gYSBmZXcgY2FsbGdyaW5kIHNlc3Npb25zOgorCSAgV2hlbiBjaGVja2luZyBpZiBhIHR5cGUgaXMgZml4ZWQsIGNoZWNrIGZvciB0cml2aWFsIGZ1bmRhbWVudGFsIHR5cGVzCisJICBmaXJzdCBiZWZvcmUgY2hlY2tpbmcgdHlwZXMgZm9yIHdoaWNoIHdlIG5lZWQgdG8gZ2V0IHRoZSB0eXBlIGZvbGxvd2VkCisJICBieSB0aGUgaGVhdnkgZHV0eSB0eXBlIGNoZWNrcywgdGhpcyByZWR1Y2VzIHRoZSBhbW91bnQgb2YKKwkgIGdfdHlwZV9mdW5kYW1lbnRhbCgpIGNhbGxzIGEgbG90LgorCSAgV2hlbiBnZXR0aW5nIHRoZSBjb21wYXJlIGZ1bmN0aW9uLCBmaXJzdCBjaGVjayBmb3Igb3VyIHJlZ2lzdGVyZWQgdHlwZXMuCisJICBJZiB0aGF0IGZhaWxzLCBkbyB0aGUgaGVhdnkgZHV0eSBnX3R5cGVfaXNfYSgpIGNoZWNrcywgcmVkdWNlcyB0aGUKKwkgIGFtb3VudCBvZiBnX3R5cGVfaXNfYSgpIGNvbnNpZGVyYWJseS4KKworMjAwOC0xMS0wNSAxMToxNzoyNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDogTXVtYmxlIHNvbWV0aGluZyBhYm91dCByZW1vdmluZyBHc3RYTUwuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKKwkgIE11bWJsZSBzb21ldGhpbmcgYWJvdXQgcmVtb3ZpbmcgR3N0WE1MLgorCisyMDA4LTExLTA0IDE4OjEwOjA0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YmluLmM6IEdldCB0aGUgc2VxbnVtIGJlZm9yZSB3ZSBkaXNwb3NlIHRoZSBtZXNzYWdlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5faGFuZGxlX21lc3NhZ2VfZnVuYyk6CisJICBHZXQgdGhlIHNlcW51bSBiZWZvcmUgd2UgZGlzcG9zZSB0aGUgbWVzc2FnZS4KKworMjAwOC0xMS0wNCAxNjoxMDowNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDogUmVmZXIgdG8gdGhlIGZyYW1lc3RlcHBpbmcgZG9jdW1lbnQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKKwkgIFJlZmVyIHRvIHRoZSBmcmFtZXN0ZXBwaW5nIGRvY3VtZW50LgorCisyMDA4LTExLTA0IDE1OjU2OjU1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBDb3B5IHNlcW51bXMgZnJvbSBldmVudHMgdG8gbWVzc2FnZXMgc28gdGhhdCB0aGV5IGNhbiBhbGwgYmUgcmVsYXRlZCBiYWNrIHRvIGVhY2hvdGhlci4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChiaW5faGFuZGxlX2FzeW5jX3N0YXJ0KSwKKwkgIChnc3RfYmluX2hhbmRsZV9tZXNzYWdlX2Z1bmMpLCAoZ3N0X2Jpbl9xdWVyeSk6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfcmVuZGVyX29iamVjdCksCisJICAoZ3N0X2Jhc2Vfc2lua19ldmVudCksIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX3BlcmZvcm1fc2VlayksCisJICAoZ3N0X2Jhc2Vfc3JjX2xvb3ApLCAoZ3N0X2Jhc2Vfc3JjX2NoYW5nZV9zdGF0ZSk6CisJICBDb3B5IHNlcW51bXMgZnJvbSBldmVudHMgdG8gbWVzc2FnZXMgc28gdGhhdCB0aGV5IGNhbiBhbGwgYmUgcmVsYXRlZAorCSAgYmFjayB0byBlYWNob3RoZXIuCisKKzIwMDgtMTEtMDQgMTU6NTI6MDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHRvb2xzL2dzdC1sYXVuY2guYzogUHJpbnQgdGhlIG1lc3NhZ2Ugc2VxbnVtcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChldmVudF9sb29wKToKKwkgIFByaW50IHRoZSBtZXNzYWdlIHNlcW51bXMuCisKKzIwMDgtMTEtMDQgMTM6NTY6MzcgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdHV0aWxzLmMgKGdzdF91dGlsX3NlcW51bV9uZXh0KTogUmVmYWN0b3IgZm9yIGNsYXJpdHkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDgtMTEtMDQgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3R1dGlscy5jIChnc3RfdXRpbF9zZXFudW1fbmV4dCk6IFJlZmFjdG9yIGZvciBjbGFyaXR5LgorCSAgQWxzbyBhZGQgQVBJOiB0byBwcmV2aW91cyBjaGFuZ2Vsb2cgZW50cnkuCisKKzIwMDgtMTEtMDQgMTI6MjI6NTMgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgQWRkIHNlcXVlbmNlIG51bWJlcnMgdG8gZXZlbnRzIGFuZCBtZXNzYWdlcy4gU2VlICM1NTkyNTAuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDgtMTEtMDQgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICBBZGQgc2VxdWVuY2UgbnVtYmVycyB0byBldmVudHMgYW5kIG1lc3NhZ2VzLiBTZWUgIzU1OTI1MC4KKwkgICogZ3N0L2dzdHV0aWxzLmMgKGdzdF91dGlsX3NlcW51bV9uZXh0LCBnc3RfdXRpbF9zZXFudW1fY29tcGFyZSk6CisJICBOZXcgZnVuY3Rpb25zLgorCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKKwkgICogZ3N0L2dzdGV2ZW50LmMgKF9nc3RfZXZlbnRfY29weSwgZ3N0X2V2ZW50X25ldyk6IEluaXRpYWxpemUgbmV3CisJICBldmVudHMgd2l0aCBhIG5ldyBzZXF1ZW5jZSBudW1iZXIsIGFuZCBjb3B5IGl0IHdoZW4gY29weWluZy4KKwkgIChnc3RfZXZlbnRfZ2V0X3NlcW51bSwgZ3N0X2V2ZW50X3NldF9zZXFudW0pOiBBY2Nlc3NvcnMgZm9yIGFuCisJICBldmVudCdzIHNlcXVlbmNlIG51bWJlci4KKwkgICogZ3N0L2dzdG1lc3NhZ2UuaDoKKwkgICogZ3N0L2dzdG1lc3NhZ2UuYyAoX2dzdF9tZXNzYWdlX2NvcHksIGdzdF9tZXNzYWdlX25ld19jdXN0b20pOgorCSAgKGdzdF9ldmVudF9nZXRfc2VxbnVtLCBnc3RfZXZlbnRfc2V0X3NlcW51bSk6IEFzIHdpdGggZXZlbnRzLCBzbworCSAgd2l0aCBtZXNzYWdlcy4KKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogQWRkIG5ldyBmdW5jdGlvbnMgdG8gdGhlIGRvY3MuCisKKzIwMDgtMTEtMDQgMTE6NTU6MDggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvbWFudWFsLzogU29tZSBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBNYW51YWwgZml4ZXMgdGhhbmtzIHRvCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9tYW51YWwvYWR2YW5jZWQtcG9zaXRpb24ueG1sOgorCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtYmlucy54bWw6CisJICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1idXMueG1sOgorCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtcGFkcy54bWw6CisJICAqIGRvY3MvbWFudWFsL2ludHJvLWdzdHJlYW1lci54bWw6CisJICAqIGRvY3MvbWFudWFsL2ludHJvLXByZWZhY2UueG1sOgorCSAgU29tZSBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBNYW51YWwgZml4ZXMgdGhhbmtzIHRvCisJICBBbmRyZXcgRmVyZW4uIEZpeGVzICM1NTg0NTkuCisKKzIwMDgtMTEtMDMgMTI6Mjk6MTAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IERvbid0IGJvdGhlciB3aXRoIHRoZSBHVGltZXIgaWYgd2UgZG9uJ3Qgb3V0cHV0IHRoZSByZXN1bHRzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgorCSAgRG9uJ3QgYm90aGVyIHdpdGggdGhlIEdUaW1lciBpZiB3ZSBkb24ndCBvdXRwdXQgdGhlIHJlc3VsdHMuCisKKzIwMDgtMTEtMDMgMTA6NTk6NDkgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJICBsaWJzL2dzdC9uZXQvTWFrZWZpbGUuYW06IEFkZCBXSU4zMl9MSUJTIHRvIGxpYmdzdG5ldCBMSUJBREQuIEZpeGVzICM1NTczMDAuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+CisJICAqIGxpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbToKKwkgIEFkZCBXSU4zMl9MSUJTIHRvIGxpYmdzdG5ldCBMSUJBREQuIEZpeGVzICM1NTczMDAuCisKKzIwMDgtMTAtMzEgMTU6NTQ6NDQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IE9oIG15LCBzdHVkaXAsIHN0dXBpZCBtZS4gUmVtb3ZlIGRvdWJsZSBzdGF0KCkgY2FsbC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKKwkgIE9oIG15LCBzdHVkaXAsIHN0dXBpZCBtZS4gUmVtb3ZlIGRvdWJsZSBzdGF0KCkgY2FsbC4KKworMjAwOC0xMC0zMSAxNDoyNDo0OSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0cHJlc2V0LmM6IFVzZSBnX3VubGluayBpbnN0ZWFkIG9mIHVubGluay4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cHJlc2V0LmM6CisJICBVc2UgZ191bmxpbmsgaW5zdGVhZCBvZiB1bmxpbmsuCisJICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkgIFVzZSBnbGliIHR5cGUuCisJICAqIGdzdC9nc3R1dGlscy5jOgorCSAgQWRkIGEgRklYTUU6LgorCSAgKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSAgKiBnc3QvZ3N0dHlwZWZpbmQuYzoKKwkgICogZ3N0L2dzdHZhbHVlLmM6CisJICBGb3JtYXR0aW5nICYgd2hpdGVzcGFjZXMuCisKKzIwMDgtMTAtMzEgMDg6NTM6MjcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiBEb2MgdHlwby4gVXNlIHJldHVybiB2YWx1ZSBvZiBwYXJlbnRfY2xhc3MtPmV2ZW50LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKKwkgIERvYyB0eXBvLiBVc2UgcmV0dXJuIHZhbHVlIG9mIHBhcmVudF9jbGFzcy0+ZXZlbnQuCisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6CisJICBDaGFpbiB1cCBhdCB0aGUgZW5kIGZvciBjb25zaXN0ZW5jeS4KKworMjAwOC0xMC0zMCAxNToyOTo1MSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBkb2NzLzogQ2hhbmdlIHRvIHhpbmNsdWRlIGJhc2VkIGJ1aWxkIC0gaXRzIGZhc3RlciBhbmQgZWFzaWVyIHRvIG1haW50YWluLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvTWFrZWZpbGUuYW06CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGRvY3MvZ3N0L3J1bm5pbmcueG1sOgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtZG9jcy5zZ21sOgorCSAgQ2hhbmdlIHRvIHhpbmNsdWRlIGJhc2VkIGJ1aWxkIC0gaXRzIGZhc3RlciBhbmQgZWFzaWVyIHRvIG1haW50YWluLgorCisyMDA4LTEwLTMwIDE0OjE1OjE0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC86IFVzZSBnX3VubGluaygpIGFzIG5vbmUgb2YgdGhlc2UgYXJlIGRpcmVjdG9yaWVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzoKKwkgIFVzZSBnX3VubGluaygpIGFzIG5vbmUgb2YgdGhlc2UgYXJlIGRpcmVjdG9yaWVzLgorCisyMDA4LTEwLTI5IDE3OjA0OjUwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0cGlwZWxpbmUuYzogU29tZSBtb3JlIGNvbW1lbnRzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX3Byb3ZpZGVfY2xvY2tfZnVuYyk6CisJICBTb21lIG1vcmUgY29tbWVudHMuCisKKzIwMDgtMTAtMjcgMTU6MDI6NDggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBJZiB3ZSBoYXZlIGEgZml4YXRlIGZ1bmN0aW9uLCBjYWxsIGl0IGV2ZW4gaWYgd2UgYWxyZWFkeSBoYXZlIGZpeGVkIGNhcHMgYmVjYXVzZSB0aC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9maW5kX3RyYW5zZm9ybSksIChnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0cmFuZ2UpOgorCSAgSWYgd2UgaGF2ZSBhIGZpeGF0ZSBmdW5jdGlvbiwgY2FsbCBpdCBldmVuIGlmIHdlIGFscmVhZHkgaGF2ZSBmaXhlZCBjYXBzCisJICBiZWNhdXNlIHRoZSBzdWJjbGFzcyBtaWdodCBhZGQgc29tZSBjYXBzLiBNYWtlcyBhdWRpb2NvbnZlcnQgYWRkIGEKKwkgIGRlZmF1bHQgY2hhbm5lbCBsYXlvdXQuCisKKzIwMDgtMTAtMjQgMDk6NDE6MTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBDbGVhciB0aGUgb3V0cHV0IGJ1ZmZlciB2YXJpYWJsZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fcHJlcGFyZV9vdXRwdXRfYnVmZmVyKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0cmFuZ2UpOgorCSAgQ2xlYXIgdGhlIG91dHB1dCBidWZmZXIgdmFyaWFibGUuCisJICBDbGVhbnVwcyB0byB0aGUgZXJyb3IgcGF0aCBpbiB0aGUgZ2V0cmFuZ2UgZnVuY3Rpb24uCisJICBGaXhlcyAjNTU3NjQ5LgorCisyMDA4LTEwLTIzIDEyOjUyOjU4ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvOiBVc2UgZ3N0X2J1ZmZlcl90cnlfbmV3X2FuZF9hbGxvYygpIGFuZCBoYW5kbGUgZXJyb3JzIGluc3RlYWQgb2YgdXNpbmcgZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jKCkgdy4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzogKGdzdF9mZF9zcmNfY3JlYXRlKToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IChnc3RfZmlsZV9zcmNfY3JlYXRlX3JlYWQpOgorCSAgVXNlIGdzdF9idWZmZXJfdHJ5X25ld19hbmRfYWxsb2MoKSBhbmQgaGFuZGxlIGVycm9ycyBpbnN0ZWFkIG9mCisJICB1c2luZyBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MoKSB3aGljaCBhYm9ydHMgaWYgdGhlIGJ1ZmZlciBjb3VsZG4ndAorCSAgYmUgYWxsb2NhdGVkLgorCisyMDA4LTEwLTIzIDA5OjQ5OjA3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0c2VnbWVudC5jOiBTZXQgdGhlIGxhc3Rfc3RvcCB0byBhIG1vcmUgbWVhbmluZ2Z1bCBwb3NpdGlvbiB3aGVuIGNvbmZpZ3VyaW5nIHRoZSBzZWdtZW50LiBpZS4gdGhlIHN0YXJ0L3N0b3Agb2YuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0c2VnbWVudC5jOiAoZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnRfZnVsbCk6CisJICBTZXQgdGhlIGxhc3Rfc3RvcCB0byBhIG1vcmUgbWVhbmluZ2Z1bCBwb3NpdGlvbiB3aGVuIGNvbmZpZ3VyaW5nIHRoZQorCSAgc2VnbWVudC4gaWUuIHRoZSBzdGFydC9zdG9wIG9mIHRoZSBzZWdtZW50IG9yIGNsaXBwZWQgYWdhaW5zdCB0aGUKKwkgIHVwZGF0ZWQgc2VnbWVudCBib3VuZGFyaWVzLgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c2VnbWVudC5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgQWRkIHNvbWUgdW5pdCB0ZXN0cyBmb3IgdGhlIGxhc3Rfc3RvcC4KKworMjAwOC0xMC0yMyAwNzoxMTo1NCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuYzogVXNlIEdTVF8oUkVBRHxXUklURSlfKEZMT0FUfERPVUJMRSlfKExFfEJFKSBpbnN0ZWFkIG9mIG91ciBvd24gY29waWVzIG9mIHRoZW0uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmM6CisJICBVc2UgR1NUXyhSRUFEfFdSSVRFKV8oRkxPQVR8RE9VQkxFKV8oTEV8QkUpIGluc3RlYWQgb2Ygb3VyIG93bgorCSAgY29waWVzIG9mIHRoZW0uCisKKzIwMDgtMTAtMjMgMDc6MDk6MjEgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgQVBJOiBNb3ZlIGZsb2F0IGVuZGlhbm5lc3MgY29udmVyc2lvbiBtYWNyb3MgZnJvbSBsaWJnc3RmbG9hdGNhc3QgdG8gY29yZSBhcyBpdCdzIHVzZWZ1bCBpbiBnZW5lcmFsLCBldmVuIGluIGNvcmUuIEZpLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdHV0aWxzLmg6CisJICBBUEk6IE1vdmUgZmxvYXQgZW5kaWFubmVzcyBjb252ZXJzaW9uIG1hY3JvcyBmcm9tIGxpYmdzdGZsb2F0Y2FzdAorCSAgdG8gY29yZSBhcyBpdCdzIHVzZWZ1bCBpbiBnZW5lcmFsLCBldmVuIGluIGNvcmUuIEZpeGVzIGJ1ZyAjNTU1MTk2LgorCSAgVGhpcyBhZGRzIEdET1VCTEVfRlJPTV9CRSwgR0RPVUJMRV9GUk9NX0xFLCBHRE9VQkxFX1RPX0JFLAorCSAgR0RPVUJMRV9UT19MRSwgR0RPVUJMRV9TV0FQX0xFX0JFLCBHRkxPQVRfRlJPTV9CRSwgR0ZMT0FUX0ZST01fTEUsCisJICBHRkxPQVRfVE9fQkUsIEdGTE9BVF9UT19MRSwgR0ZMT0FUX1NXQVBfTEVfQkUuCisJICBBbHNvIGFkZCBHU1RfUkVBRF8gYW5kIEdTVF9XUklURV8gbWFjcm9zIGZvciBmbG9hdHMgYW5kIGRvdWJsZXM6CisJICBHU1RfUkVBRF9GTE9BVF9MRSwgR1NUX1JFQURfRkxPQVRfQkUsIEdTVF9SRUFEX0RPVUJMRV9MRSwKKwkgIEdTVF9SRUFEX0RPVUJMRV9CRSwgR1NUX1dSSVRFX0ZMT0FUX0xFLCBHU1RfV1JJVEVfRkxPQVRfQkUsCisJICBHU1RfV1JJVEVfRE9VQkxFX0xFLCBHU1RfV1JJVEVfRE9VQkxFX0JFLgorCisyMDA4LTEwLTIyIDE0OjQ3OjA0ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIEFQSTogQWRkIGdzdF9ieXRlX3JlYWRlcl9nZXRfZGF0YSBhbmQgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YSB0byBnZXQgYSBwb2ludGVyIHRvIHRoZSBkYXRhIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5jOiAoZ3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhKSwKKwkgIChnc3RfYnl0ZV9yZWFkZXJfcGVla19kYXRhKToKKwkgICogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmg6CisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKKwkgIEFQSTogQWRkIGdzdF9ieXRlX3JlYWRlcl9nZXRfZGF0YSBhbmQgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YQorCSAgdG8gZ2V0IGEgcG9pbnRlciB0byB0aGUgZGF0YSBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiBhbmQgaGF2ZQorCSAgYSBndWFyYW50ZWVkIHNpemUuCisKKzIwMDgtMTAtMjIgMTQ6MjU6MTYgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBjb25maWd1cmUuYWM6IEZpeCBhIGJ1ZyBpbiB0aGUgb3V0cHV0IG9mIHRoZSBjb25maWd1cmUgc2NyaXB0IHN1bW1hcnkgd2hlbiAtLWdzdC1kaXNhYmxlLXJlZ2lzdHJ5IGlzIHN1cHBsaWVkCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgRml4IGEgYnVnIGluIHRoZSBvdXRwdXQgb2YgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgc3VtbWFyeQorCSAgd2hlbiAtLWdzdC1kaXNhYmxlLXJlZ2lzdHJ5IGlzIHN1cHBsaWVkCisKKzIwMDgtMTAtMjIgMTM6NDc6MjAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBsaWJzL2dzdC9iYXNlLzogRml4IHRoZSBuYW1lcyBvZiAyIGZ1bmN0aW9ucyBpbiB0aGUgZG9jcyBzdHJpbmdzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLmM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5jOgorCSAgRml4IHRoZSBuYW1lcyBvZiAyIGZ1bmN0aW9ucyBpbiB0aGUgZG9jcyBzdHJpbmdzLgorCisyMDA4LTEwLTIxIDE2OjMwOjQxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogUHJvdGVjdCBzaW5rX2FsbG9jIGNhcHMgd2l0aCB0aGUgc2lua3BhZCBsb2NrIHRvIGF2b2lkIG5hc3R5IGNhcHMgcmVmY291bnQgcHJvYmxlbXMuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fcHJlcGFyZV9vdXRwdXRfYnVmZmVyKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fYnVmZmVyX2FsbG9jKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9zdWdnZXN0KToKKwkgIFByb3RlY3Qgc2lua19hbGxvYyBjYXBzIHdpdGggdGhlIHNpbmtwYWQgbG9jayB0byBhdm9pZCBuYXN0eSBjYXBzCisJICByZWZjb3VudCBwcm9ibGVtcyBhcyBzZWVuIGluIGJhbnNoZWUgYW5kIG1heWJlIGFsc28gaW4gZmFyc2lnaHQyLgorCSAgUmVtb3ZlIGF0b21pYyBpbnQgbm93IHRoYXQgd2UgbmVlZCB0byB0YWtlIHRoZSBsb2NrIGFueXdheXMuCisKKzIwMDgtMTAtMjAgMTU6MTg6MTQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogSW1wbGVtZW50IG1vcmUgc2Vla2luZyBpbiBwdWxsIG1vZGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19kZWZhdWx0X2RvX3NlZWspLAorCSAgKGdzdF9iYXNlX3NpbmtfZGVmYXVsdF9wcmVwYXJlX3NlZWtfc2VnbWVudCksCisJICAoZ3N0X2Jhc2Vfc2lua19wZXJmb3JtX3NlZWspLCAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb25fbGFzdCksCisJICAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb25fcGF1c2VkKSwgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uKSwKKwkgIChnc3RfYmFzZV9zaW5rX3F1ZXJ5KToKKwkgIEltcGxlbWVudCBtb3JlIHNlZWtpbmcgaW4gcHVsbCBtb2RlLgorCSAgVXNlIHBhZCBjb252ZXJ0IGZ1bmN0aW9ucyB0byBjb252ZXJ0IHBvc2l0aW9uIHRvIHRoZSByZXF1ZXN0ZWQgZm9ybWF0LgorCSAgRml4IHBvc2l0aW9uL2R1cmF0aW9uIHJlcG9ydGluZyBpbiBwdWxsIG1vZGUuCisJICBJbXBsZW1lbnQgcG9zaXRpb24gYW5kIGR1cmF0aW9uIHJlcG9ydGluZyBpbiBvdGhlciBmb3JtYXRzIHRoYW4gdGltZS4KKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSAgQWRkIG1lbWJlciB0byBrZWVwIHRyYWNrIG9mIHdoZW4gdGhlIHNlZ21lbnQgaXMgcGxheWluZy4KKworMjAwOC0xMC0yMCAxMzozMjowNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHBhZC5jOiBXaGVuIHdlIHVzZSBnc3RfcGFkX2FsbG9jX2J1ZmZlcigpIHdpdGhvdXQgd2FudGluZyB0byBzZXQgdGhlIGNhcHMgd2UgYWxzbyBkb24ndCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBjLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9jb25maWd1cmVfc3JjKToKKwkgIFdoZW4gd2UgdXNlIGdzdF9wYWRfYWxsb2NfYnVmZmVyKCkgd2l0aG91dCB3YW50aW5nIHRvIHNldCB0aGUgY2FwcyB3ZQorCSAgYWxzbyBkb24ndCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBjYXBzIGFyZSBjb21wYXRpYmxlIGJlY2F1c2UgdGhlIGNhbGxlcgorCSAgcHJlc3VtYWJseSBpcyBnb2luZyB0byBwZXJmb3JtIGl0cyBvd24gY3VzdG9tIGNoZWNrcy4gRml4ZXMgc29tZSBjYXNlcworCSAgd2hlcmUgYmFzZXRyYW5zZm9ybSBlbGVtZW50cyB3b3VsZCBlcnJvciBvdXQgd2hlbiBpdCB3YXMgbm90IG5lZWRlZC4KKworMjAwOC0xMC0yMCAxMzoyOTowNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IFVwZGF0ZSBjb21tZW50LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX3BlcmZvcm1fc2Vlayk6CisJICBVcGRhdGUgY29tbWVudC4KKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2hhbmRsZV9idWZmZXIpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9yZWNvbmZpZ3VyZSk6CisJICBBZGQgc29tZSBkZWJ1ZyBpbmZvLgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6CisJICBBZGQgbmV3IG1ldGhvZC4KKworMjAwOC0xMC0xOSAxOTo1NzoyNSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19kZWZhdWx0X2RvX3NlZWspOworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfZG9fc2Vlayk7CisJICBSZW1vdmUgZHVwbGljYXRlZCBhc3NpZ25tZW50IGFuZCBsb2cgYSBtZXNzYWdlIGluIGZhaWx1cmUgY2FzZS4KKworMjAwOC0xMC0xOSAxMDoxMzozOSArMDAwMCAgRGlnIEdlIDxkaWcuZ2UuY25AZ21haWwuY29tPgorCisJICB0ZXN0cy9leGFtcGxlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQuYzogRml4IGNvcHknbidwYXN0ZSBidWcgaW4gaGVsbG8gd29ybGQgZXhhbXBsZSAoIzU1NjkwMCkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBEaWcgR2UgPGRpZy5nZS5jbiBhdCBnbWFpbCBjb20+CisJICAqIHRlc3RzL2V4YW1wbGVzL2hlbGxvd29ybGQvaGVsbG93b3JsZC5jOiAobWFpbik6CisJICBGaXggY29weSduJ3Bhc3RlIGJ1ZyBpbiBoZWxsbyB3b3JsZCBleGFtcGxlICgjNTU2OTAwKS4KKworMjAwOC0xMC0xNyAxMzoyNzo1OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBRdWVyeSB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHdoZW4gYWN0aXZhdGluZyB0aGUgcGFkIGluIHB1bGwgbW9kZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX3BhZF9hY3RpdmF0ZV9wdWxsKSwKKwkgIChnc3RfYmFzZV9zaW5rX3F1ZXJ5KToKKwkgIFF1ZXJ5IHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgd2hlbiBhY3RpdmF0aW5nIHRoZSBwYWQgaW4gcHVsbCBtb2RlLgorCSAgSW1wbGVtZW50IGR1cmF0aW9uIHF1ZXJ5IGluIHB1bGwgbW9kZSBieSB1c2luZyB0aGUgaW5zdGFsbGVkIHBhZCBjb252ZXJ0CisJICBmdW5jdGlvbiB0byBjb252ZXJ0IGZyb20gYnl0ZXMgdG8gdGhlIHJlcXVlc3RlZCBmb3JtYXQuCisKKzIwMDgtMTAtMTYgMTQ6MDk6MTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIEFkZCBtZXRob2QgdG8gY29tbWl0IHRoZSBzdGF0ZSBpbiBzdWJjbGFzc2VzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZG9fcHJlcm9sbCksCisJICAoZ3N0X2Jhc2Vfc2lua19mbHVzaF9zdGFydCksIChnc3RfYmFzZV9zaW5rX2ZsdXNoX3N0b3ApLAorCSAgKGdzdF9iYXNlX3NpbmtfZXZlbnQpLCAoZ3N0X2Jhc2Vfc2lua19wZXJmb3JtX3NlZWspLAorCSAgKGdzdF9iYXNlX3NpbmtfbG9vcCksIChnc3RfYmFzZV9zaW5rX3BhZF9hY3RpdmF0ZV9wdWxsKSwKKwkgIChnc3RfYmFzZV9zaW5rX3NlbmRfZXZlbnQpLCAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJICBBZGQgbWV0aG9kIHRvIGNvbW1pdCB0aGUgc3RhdGUgaW4gc3ViY2xhc3Nlcy4KKwkgIFJlZmFjdG9yIHRoZSBmbHVzaF9zdGFydCBhbmQgZmx1c2hfc3RvcCBjb2RlIGJlY2F1c2Ugd2UgbmVlZCBpdCBmb3IKKwkgIGZsdXNoaW5nIHdoaWxlIHNlZWtpbmcgdG9vLgorCSAgSW1wbGVtZW50IHRoZSBiZWdpbm5pbmdzIG9mIHNlZWtpbmcgaW4gcHVsbCBtb2RlLgorCSAgVXNlIHRoZSBzZWdtZW50IGxhc3Rfc3RvcCBmaWVsZCBmb3IgdGhlIHB1bGxpbmcgb2Zmc2V0LgorCSAgRml4IHRoZSBwYXVzZSBtZXRob2QgaW4gcHVsbCBtb2RlLgorCSAgQ29uZmlndXJlIHRoZSBzZWdtZW50IHRvIEJZVEVTIGZvciBwdWxsIG1vZGUuCisJICBBUEk6IEdzdEJhc2VTaW5rOjpnc3RfYmFzZV9zaW5rX2RvX3ByZXJvbGwoKQorCisyMDA4LTEwLTE2IDEzOjU2OjUyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogVXBkYXRlIHNvbWUgZG9jcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19jbGFzc19pbml0KToKKwkgIFVwZGF0ZSBzb21lIGRvY3MuCisKKzIwMDgtMTAtMTQgMTc6MTA6NDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RxdWFyay5jOiBGaXggcHJpbnRmIGZvcm1hdCB3YXJuaW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RxdWFyay5jOiAoX3ByaXZfZ3N0X3F1YXJrc19pbml0aWFsaXplKToKKwkgIEZpeCBwcmludGYgZm9ybWF0IHdhcm5pbmcuCisKKzIwMDgtMTAtMTQgMTI6MzQ6NTYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzogRml4IGZsb3cgYWdncmVnYXRpb24gb2YgdGVlLiBFcnJvciBvdXQgaW1tZWRpYXRlbHkgZm9yIGFsbCBmbG93IHJldHVybnMgZXhjZXB0IE9LIGFuZCBOT1RfLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzogKGdzdF90ZWVfaGFuZGxlX2J1ZmZlcik6CisJICBGaXggZmxvdyBhZ2dyZWdhdGlvbiBvZiB0ZWUuIEVycm9yIG91dCBpbW1lZGlhdGVseSBmb3IgYWxsIGZsb3cgcmV0dXJucworCSAgZXhjZXB0IE9LIGFuZCBOT1RfTElOS0VELCByZXR1cm4gTk9UX0xJTktFRCBpZiBhbGwgcGFkcyBhcmUgbm90IGxpbmtlZAorCSAgYW5kIHJldHVybiBPSyBpZiBhdCBsZWFzdCBvbmUgcGFkIGlzIGxpbmtlZC4KKwkgIEJlZm9yZSB3ZSBlcnJvcmVkIG91dCBvbiAiZmF0YWwiIGZsb3cgcmV0dXJucyAoaS5lLiBub3QgZm9yIFdST05HX1NUQVRFKQorCSAgYW5kIG90aGVyd2lzZSByZXR1cm5lZCB0aGUgZmxvdyByZXR1cm4gb2YgdGhlIGxhc3QgcGFkLCB3aGljaCBpcyB3cm9uZy4KKwkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvdGVlLmM6IChfZmFrZV9jaGFpbiksIChfZmFrZV9jaGFpbl9lcnJvciksCisJICAoR1NUX1NUQVJUX1RFU1QpLCAodGVlX3N1aXRlKToKKwkgIEFkZCB1bml0IHRlc3RzIGZvciB0aGUgZmxvdyBhZ2dyZWdhdGlvbi4KKworMjAwOC0xMC0xMyAxNzoxOToyNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDogUmVtb3ZlIGl0ZW0gZnJvbSB0aGUgdG9kbyBsaXN0IGJlY2F1c2UgaXQgd2FzIGZpeGVkIHdpdGggdGhlIGxhdGVuY3kgc3RhdGUgY2hhbmdlIHJld3JpdGVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6CisJICBSZW1vdmUgaXRlbSBmcm9tIHRoZSB0b2RvIGxpc3QgYmVjYXVzZSBpdCB3YXMgZml4ZWQgd2l0aCB0aGUgbGF0ZW5jeQorCSAgc3RhdGUgY2hhbmdlIHJld3JpdGVzLgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXNlZWtpbmcudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXNlZ21lbnRzLnR4dDoKKwkgIFVwZGF0ZSBzb21lIGRvY3MuCisJICAqIGdzdC9nc3RldmVudC5jOiAoZ3N0X2V2ZW50X25ld19uZXdfc2VnbWVudF9mdWxsKSwKKwkgIChnc3RfZXZlbnRfcGFyc2VfbmV3X3NlZ21lbnRfZnVsbCksIChnc3RfZXZlbnRfbmV3X2J1ZmZlcl9zaXplKSwKKwkgIChnc3RfZXZlbnRfcGFyc2VfYnVmZmVyX3NpemUpLCAoZ3N0X2V2ZW50X25ld19xb3MpLAorCSAgKGdzdF9ldmVudF9wYXJzZV9xb3MpLCAoZ3N0X2V2ZW50X25ld19zZWVrKSwKKwkgIChnc3RfZXZlbnRfcGFyc2Vfc2VlayksIChnc3RfZXZlbnRfbmV3X2xhdGVuY3kpLAorCSAgKGdzdF9ldmVudF9wYXJzZV9sYXRlbmN5KToKKwkgIFVzZSBxdWFya3MgdG8gY29uc3RydWN0IGFuZCBwYXJzZSBldmVudHMuCisJICAqIGdzdC9nc3RxdWFyay5jOiAoX3ByaXZfZ3N0X3F1YXJrc19pbml0aWFsaXplKToKKwkgICogZ3N0L2dzdHF1YXJrLmg6CisJICBBZGQgc29tZSBtb3JlIHF1YXJrcyB0byB0aGUgdGFibGUuCisJICBFbWl0IGEgd2FybmluZyB3aGVuIHRoZSBxdWFyayB0YWJsZXMgYXJlIG5vdCBpbiBzeW5jLgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVzLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBBZGQgYW4gYXNzZXJ0LgorCisyMDA4LTEwLTEzIDE2OjQ3OjUxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIHBsdWdpbnMvOiBEb24ndCBpbnN0YWxsIHN0YXRpYyBsaWJzIGZvciBwbHVnaW5zLiBGaXhlcyAjNTUwODUxIGZvciBjb3JlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUuYW06CisJICAqIHBsdWdpbnMvaW5kZXhlcnMvTWFrZWZpbGUuYW06CisJICBEb24ndCBpbnN0YWxsIHN0YXRpYyBsaWJzIGZvciBwbHVnaW5zLiBGaXhlcyAjNTUwODUxIGZvciBjb3JlLgorCisyMDA4LTEwLTEzIDEwOjUwOjE3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YnVzLmM6IEZpeCBkZWFkbG9jaywgZ19zb3VyY2VfZ2V0X2lkKCkgY2Fubm90IGJlIGNhbGxlZCBpbiBmaW5hbGl6ZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YnVzLmM6IChnc3RfYnVzX3NvdXJjZV9maW5hbGl6ZSksCisJICAoZ3N0X2J1c19hZGRfd2F0Y2hfZnVsbF91bmxvY2tlZCksIChnc3RfYnVzX2FkZF93YXRjaF9mdWxsKSwKKwkgIChnc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24pLAorCSAgKGdzdF9idXNfZGlzYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24pLAorCSAgKGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaF9mdWxsKSwgKGdzdF9idXNfcmVtb3ZlX3NpZ25hbF93YXRjaCk6CisJICBGaXggZGVhZGxvY2ssIGdfc291cmNlX2dldF9pZCgpIGNhbm5vdCBiZSBjYWxsZWQgaW4gZmluYWxpemUuCisJICBLZWVwIHRyYWNrIG9mIHRoZSB3YXRjaCBzb3VyY2UgYnkga2VlcGluZyBhIHBvaW50ZXIgdG8gdGhlIHNvdXJjZSBvYmplY3QKKwkgIGluc3RlYWQuCisJICBVc2UgdGhlIGJ1cyBsb2NrIHRvIHByb3RlY3QgYWNjZXNzIHRvIHRoZSBwb2ludGVyIHRvIHRoZSBjdXJyZW50CisJICB3YXRjaCBzb3VyY2UuCisKKzIwMDgtMTAtMTMgMDk6MjI6MjIgKzAwMDAgIE9saXZpZXIgQ3JldGUgPHRlc3RlckB0ZXN0ZXIuY2E+CisKKwkgIGdzdC9nc3RidXMuYzogT25seSBhbGxvdyBvbmUgYnVzIHdhdGNoIHRvIGJlIHNldCBhdCBhIHRpbWUuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGRpc3BhdGNoZXIgcG9wcyB0aGUgbWVzc2FnZS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBCYXNlIG9uIFBhdGNoIGJ5OiBPbGl2aWVyIENyZXRlIDx0ZXN0ZXIgYXQgdGVzdGVyIGRvdCBjYT4KKwkgICogZ3N0L2dzdGJ1cy5jOiAoZ3N0X2J1c19zb3VyY2VfZmluYWxpemUpLAorCSAgKGdzdF9idXNfYWRkX3dhdGNoX2Z1bGwpLCAoZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoX2Z1bGwpOgorCSAgT25seSBhbGxvdyBvbmUgYnVzIHdhdGNoIHRvIGJlIHNldCBhdCBhIHRpbWUuIFRoaXMgaXMgbmVjZXNzYXJ5CisJICBiZWNhdXNlIHRoZSBkaXNwYXRjaGVyIHBvcHMgdGhlIG1lc3NhZ2UgZnJvbSB0aGUgYnVzIGFuZCB0aGUgc2Vjb25kCisJICB3YXRjaGVyIHdpbGwgdGhlbiBnZXQgTlVMTCBvciB0aGUgbmV4dCBtZXNzYWdlIChhbmQgdGhlIGZpcnN0IHdvbid0CisJICBnZXQgdGhpcyBuZXh0IG1lc3NhZ2UgdGhlbiwgZXRjKS4gSWYgbW9yZSB0aGFuIG9uZSAid2F0Y2hlciIgaXMKKwkgIHJlcXVpcmVkIHNpZ25hbCB3YXRjaGVzIHNob3VsZCBiZSB1c2VkLiBGaXhlcyBidWcgIzUyNjA0NC4KKworMjAwOC0xMC0xMiAyMjoxNjowMCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIHRvb2xzL2dzdC1sYXVuY2guYzogQ2hhbmdlIHRoZSBwcmludGluZyBvZiB0aGUgJ2J1ZmZlcmluZy4uLicgb3V0cHV0IHRvIGF2b2lkIHB1dHRpbmcgYSBcciBpbiBhIHRyYW5zbGF0ZWFibGUgc3RyaW5nIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1sYXVuY2guYzoKKwkgIENoYW5nZSB0aGUgcHJpbnRpbmcgb2YgdGhlICdidWZmZXJpbmcuLi4nIG91dHB1dCB0byBhdm9pZCBwdXR0aW5nCisJICBhIFxyIGluIGEgdHJhbnNsYXRlYWJsZSBzdHJpbmcgKGZsYWdnZWQgYnkgdGhlIFRQKS4KKworMjAwOC0xMC0xMCAxNTozODowNiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBnc3QvZ3N0eG1sLmM6IENsYXJpZnkgdGhhdCB0aGUgc2F2ZV90aHlzZWxmKCkgYW5kIHJlc3RvcmVfdGh5c2VsZigpIHZpcnR1YWwgZnVuY3Rpb25zIG9mIEdzdE9iamVjdCBuZWVkIHRvIGJlIG92ZXJyaWQuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0eG1sLmM6CisJICBDbGFyaWZ5IHRoYXQgdGhlIHNhdmVfdGh5c2VsZigpIGFuZCByZXN0b3JlX3RoeXNlbGYoKSB2aXJ0dWFsCisJICBmdW5jdGlvbnMgb2YgR3N0T2JqZWN0IG5lZWQgdG8gYmUgb3ZlcnJpZGVuLCBub3QKKwkgIGdzdF9vYmplY3RfKHNhdmV8cmVzdG9yZSlfdGh5c2VsZigpIHdoaWNoIGlzIGltcG9zc2libGUuCisJICBGaXhlcyBidWcgIzU1NTcwMC4KKworMjAwOC0xMC0xMCAxNToyNzozNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHBhZC5jOiBSZXZlcnQgYSBwYXRjaCBmcm9tIDIxIG1vbnRocyBhZ28gdGhhdCBicm9rZSBjYXBzIG5lZ290aWF0aW9uIGluIHB1bGwgbW9kZS4gQmFzaWNhbGx5LCBoYXZpbmcgYSBidWZmZXIgLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9nZXRfcmFuZ2UpLCAoZ3N0X3BhZF9wdWxsX3JhbmdlKToKKwkgIFJldmVydCBhIHBhdGNoIGZyb20gMjEgbW9udGhzIGFnbyB0aGF0IGJyb2tlIGNhcHMgbmVnb3RpYXRpb24gaW4gcHVsbAorCSAgbW9kZS4gQmFzaWNhbGx5LCBoYXZpbmcgYSBidWZmZXIgcGFzcyBvdmVyIGEgcGFkIHdpbGwgdHJpZ2dlciB0aGUKKwkgIHNldGNhcHMgZnVuY3Rpb24gd2hlbiBjYXBzIGNoYW5nZSwganVzdCBsaWtlIGluIHB1c2ggbW9kZS4KKworMjAwOC0xMC0xMCAxNToxMjoxMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1uZWdvdGlhdGlvbi50eHQ6IFVwZGF0ZSB0aGUgZG9jcyBzb21lIG1vcmUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1uZWdvdGlhdGlvbi50eHQ6CisJICBVcGRhdGUgdGhlIGRvY3Mgc29tZSBtb3JlLgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6IChoZWxwZXJfZmluZF9wZWVrKToKKwkgIElmIHdlIHB1bGwgYSBidWZmZXIgd2l0aCBub24tdHJpdmlhbCBjYXBzLCBzdWdnZXN0IHRob3NlIGNhcHMgd2l0aCB0aGUKKwkgIG1heCBwcm9iYWJpbGl0eS4KKworMjAwOC0xMC0xMCAxNDozMTowMyArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDogQWRkIGFub3RoZXIgbGltaXRhdGlvbiBvZiBwYWQtYmxvY2tpbmcgd2l0aCBzZWdtZW50IHNlZWtzIG5vdCBwdXNoaW5nCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKKwkgIEFkZCBhbm90aGVyIGxpbWl0YXRpb24gb2YgcGFkLWJsb2NraW5nIHdpdGggc2VnbWVudCBzZWVrcyBub3QgcHVzaGluZworCSAgRU9TIGV2ZW50cy4KKworMjAwOC0xMC0xMCAxMzoyNDoxMyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIHdpbjMyL2NvbW1vbi86IEFkZCBuZXcgc3ltYm9scyB0byB0aGUgd2luMzIgZGVmcyBmaWxlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKKwkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBBZGQgbmV3IHN5bWJvbHMgdG8gdGhlIHdpbjMyIGRlZnMgZmlsZXMKKworMjAwOC0xMC0xMCAxMDozODoxMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJpbi5jOiBUaGUgbWVzc2FnZSBzcmMgY2FuIGJlIE5VTEwsIGRvbid0IHRyeSB0byBwcmludCB0aGUgb2JqZWN0IG5hbWVzIGluIHRoYXQgY2FzZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX3JlbW92ZV9mdW5jKSwgKHVwZGF0ZV9kZWdyZWUpLAorCSAgKGdzdF9iaW5faGFuZGxlX21lc3NhZ2VfZnVuYyk6CisJICBUaGUgbWVzc2FnZSBzcmMgY2FuIGJlIE5VTEwsIGRvbid0IHRyeSB0byBwcmludCB0aGUgb2JqZWN0IG5hbWVzIGluIHRoYXQKKwkgIGNhc2UuCisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfcGFkX2FjdGl2YXRlKToKKwkgIEFkZCBzb21lIG1vcmUgZGVidWcgaW5mby4KKwkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYzogKHJ1bl9waXBlbGluZSksCisJICAoR1NUX1NUQVJUX1RFU1QpOgorCSAgQWRkIHNvbWUgZGVidWcuCisJICBGaXggdGhlIHRlc3QsIHB1bGwgYmFzZWQgc2lua3MgZ28gQVNZTkMgdG8gUEFVU0VELCBqdXN0IGxpa2Ugb3RoZXIKKwkgIHNjaGVkdWxpbmcgbW9kZXMuCisKKzIwMDgtMTAtMTAgMTA6MDE6MzYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZGVzaWduL3BhcnQtbmVnb3RpYXRpb24udHh0OiBTbWFsbCBkb2MgdXBkYXRlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtbmVnb3RpYXRpb24udHh0OgorCSAgU21hbGwgZG9jIHVwZGF0ZS4KKwkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19jbGFzc19pbml0KSwKKwkgIChnc3RfYmFzZV9zaW5rX3BhZF9nZXRjYXBzKSwgKGdzdF9iYXNlX3NpbmtfcGFkX3NldGNhcHMpLAorCSAgKGdzdF9iYXNlX3NpbmtfaW5pdCksIChnc3RfYmFzZV9zaW5rX3NldF9ibG9ja3NpemUpLAorCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X2Jsb2Nrc2l6ZSksIChnc3RfYmFzZV9zaW5rX3NldF9wcm9wZXJ0eSksCisJICAoZ3N0X2Jhc2Vfc2lua19nZXRfcHJvcGVydHkpLCAoZ3N0X2Jhc2Vfc2lua19uZWVkc19wcmVyb2xsKSwKKwkgIChnc3RfYmFzZV9zaW5rX2xvb3ApLCAoZ3N0X2Jhc2Vfc2lua19wYWRfYWN0aXZhdGUpLAorCSAgKGdzdF9iYXNlX3NpbmtfbmVnb3RpYXRlX3B1bGwpLCAoZ3N0X2Jhc2Vfc2lua19wYWRfYWN0aXZhdGVfcHVsbCksCisJICAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJICBBZGQgYmxvY2tzaXplIHByb3BlcnR5IGFuZCBtZXRob2RzIHRvIGNvbnRyb2wgdGhlIGFtb3VudCBvZiBkYXRhCisJICB0byBwdWxsLgorCSAgTmVnb3RpYXRlIGZpcnN0IGJlZm9yZSBhY3RpdmF0aW5nIHVwc3RyZWFtIGluIHB1bGwgbW9kZSBzbyB0aGF0IHRoZXkgY2FuCisJICBuZWdvdGlhdGUgdGhlbXNlbHZlcy4KKwkgIFdoZW4gd2Ugb3BlcmF0ZSBpbiBwdWxsIG1vZGUsIHdlIG9ubHkgYWNjZXB0IHRoZSBjYXBzIHRoYXQgd2UKKwkgIG5lZ290aWF0ZWQuCisJICBNYWtlIHRoZSBzaW5rIGdvIEFTWU5DIHRvIFBBVVNFRCwgbGlrZSBhbGwgb3RoZXIgc2lua3MuCisJICBBUEk6IEdzdEJhc2VTaW5rOjpnc3RfYmFzZV9zaW5rX3NldF9ibG9ja3NpemUoKQorCSAgQVBJOiBHc3RCYXNlU2luazo6Z3N0X2Jhc2Vfc2lua19nZXRfYmxvY2tzaXplKCkKKwkgIEFQSTogR3N0QmFzZVNpbms6OmJsb2Nrc2l6ZQorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY193YWl0X3BsYXlpbmcpLAorCSAgKGdzdF9iYXNlX3NyY19zZXRfbGl2ZSksIChnc3RfYmFzZV9zcmNfaXNfbGl2ZSksCisJICAoZ3N0X2Jhc2Vfc3JjX3NldF9mb3JtYXQpLCAoZ3N0X2Jhc2Vfc3JjX3F1ZXJ5X2xhdGVuY3kpLAorCSAgKGdzdF9iYXNlX3NyY19zZXRfYmxvY2tzaXplKSwgKGdzdF9iYXNlX3NyY19nZXRfYmxvY2tzaXplKSwKKwkgIChnc3RfYmFzZV9zcmNfc2V0X2RvX3RpbWVzdGFtcCksIChnc3RfYmFzZV9zcmNfZ2V0X2RvX3RpbWVzdGFtcCksCisJICAoZ3N0X2Jhc2Vfc3JjX3NldF9wcm9wZXJ0eSksIChnc3RfYmFzZV9zcmNfZ2V0X3Byb3BlcnR5KToKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJICBBZGQgdHlwZWNoZWNraW5nIGluIHB1YmxpYyBBUEkgZnVuY3Rpb25zLgorCSAgQWRkIG1ldGhvZHMgdG8gY29udHJvbCB0aGUgYmxvY2tzaXplIGluIHN1YmNsYXNzZXMuCisJICBBUEk6IEdzdEJhc2VTcmM6OmdzdF9iYXNlX3NyY19zZXRfYmxvY2tzaXplKCkKKwkgIEFQSTogR3N0QmFzZVNyYzo6Z3N0X2Jhc2Vfc3JjX2dldF9ibG9ja3NpemUoKQorCisyMDA4LTEwLTEwIDA5OjExOjEwICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzogV2Ugbm93IHNlZSAzIGV2ZW50cyBnbyB0aHJvdWdoIG91ciBwYWQsIHNpbmNlIGJhc2VzaW5rIG5vdyBzZW5kcyB1cHN0cmVhbSBsYXRlbmN5IGV2ZW50cy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzogKHByb2JlX2RvX25vdGhpbmcpLCAoZGF0YV9wcm9iZSksCisJICAoYnVmZmVyX3Byb2JlKSwgKGV2ZW50X3Byb2JlKSwgKEdTVF9TVEFSVF9URVNUKToKKwkgIFdlIG5vdyBzZWUgMyBldmVudHMgZ28gdGhyb3VnaCBvdXIgcGFkLCBzaW5jZSBiYXNlc2luayBub3cgc2VuZHMKKwkgIHVwc3RyZWFtIGxhdGVuY3kgZXZlbnRzLgorCisyMDA4LTEwLTA4IDE1OjIxOjEyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0cGlwZWxpbmUuYzogUmVsZWFzZSB0aGUgb2JqZWN0IGxvY2sgYmVmb3JlIHRyeWluZyB0byBmbHVzaCB0aGUgYnVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX2NoYW5nZV9zdGF0ZSk6CisJICBSZWxlYXNlIHRoZSBvYmplY3QgbG9jayBiZWZvcmUgdHJ5aW5nIHRvIGZsdXNoIHRoZSBidXMuCisKKzIwMDgtMTAtMDggMTQ6MjE6MTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogRm9yd2FyZCBMQVRFTkNZIGV2ZW50cyB1cHN0cmVhbXMgc28gdGhhdCBlbGVtZW50cyBrbm93IGFib3V0IHRoZSB0b3RhbCBwaXBlbGluZSBsYXRlbmN5Li4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3Npbmtfc2VuZF9ldmVudCk6CisJICBGb3J3YXJkIExBVEVOQ1kgZXZlbnRzIHVwc3RyZWFtcyBzbyB0aGF0IGVsZW1lbnRzIGtub3cgYWJvdXQgdGhlIHRvdGFsCisJICBwaXBlbGluZSBsYXRlbmN5LiBGaXhlcyAjNTU1MzA3LgorCisyMDA4LTEwLTA4IDExOjIwOjE3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiBBbGxvdyB0aHJvdWdoIHF1ZXJpZXMgd2hlbiB3ZSBkb24ndCBrbm93IGhvdyBhcyBvdGhlcndpc2UgaXQncyBub3QgcG9zc2libGUgdG8gcXVlcnkgdGhlLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSAgQWxsb3cgdGhyb3VnaCBxdWVyaWVzIHdoZW4gd2UgZG9uJ3Qga25vdyBob3cKKwkgIHRvIGFkanVzdCB0aGVtIChub3QgVElNRSBvciBCWVRFUyksIGFzIG90aGVyd2lzZSBpdCdzCisJICBub3QgcG9zc2libGUgdG8gcXVlcnkgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gb3JkZXIKKwkgIHRvIHNlZWsgaW4gb3RoZXIgZm9ybWF0cyBhdCBhbGwuCisKKzIwMDgtMTAtMDggMTE6MTI6MTUgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSogQ2hhbmdlTG9nOgorCSAgY2hhbmdlbG9nCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGNoYW5nZWxvZworCisyMDA4LTEwLTA4IDExOjExOjI1ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IFBsYWNhdGUgZG9jIHBlbmRhbnRzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA4LTEwLTA4ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBQbGFjYXRlIGRvYyBwZW5kYW50cy4KKworMjAwOC0xMC0wOCAxMDozOToyNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGdob3N0cGFkLio6IFVuYnJlYWsgLWdvb2QgYnVpbGQsIHByaXZhdGUgaXMgYSByZXNlcnZlZCBjKysga2V5d29yZC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKKwkgICogZ3N0L2dzdGdob3N0cGFkLmg6CisJICBVbmJyZWFrIC1nb29kIGJ1aWxkLCBwcml2YXRlIGlzIGEgcmVzZXJ2ZWQgYysrIGtleXdvcmQuCisKKzIwMDgtMTAtMDggMTA6MTk6MTEgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdGdob3N0cGFkLio6IEZpeCB1bmludGVuZGVkIEFQSSByZW1vdmFsOiByZS1hZGQgR1NUX0dIT1NUX1BBRF9DQVNUIHRvIHRoZSBoZWFkZXIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDgtMTAtMDggIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3RnaG9zdHBhZC5oIChHU1RfR0hPU1RfUEFEX0NBU1QpOgorCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYyAoR1NUX0dIT1NUX1BBRF9DQVNUKTogRml4IHVuaW50ZW5kZWQgQVBJCisJICByZW1vdmFsOiByZS1hZGQgR1NUX0dIT1NUX1BBRF9DQVNUIHRvIHRoZSBoZWFkZXIuCisKKzIwMDgtMTAtMDggMTA6MTI6NDUgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdGdob3N0cGFkLmggKEdzdFByb3h5UGFkLCBHc3RQcm94eVBhZENsYXNzLCBHc3RHaG9zdFBhZCkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwOC0xMC0wOCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdGdob3N0cGFkLmggKEdzdFByb3h5UGFkLCBHc3RQcm94eVBhZENsYXNzLCBHc3RHaG9zdFBhZCkKKwkgIChHc3RHaG9zdFBhZENsYXNzKTogUHVibGljYWxseSBleHBvc2UgdGhlc2Ugc3RydWN0dXJlcyBzbyBhcyB0bworCSAgYWxsb3cgZWFzeSBzdWJjbGFzc2luZyBmcm9tIEMuIEhpZGUgdGhlIG1lbWJlciBkYXRhIGJlaGluZCBhCisJICBwcml2YXRlIG9wYXF1ZSBkYXRhIHBvaW50ZXIuCisJICAqIGdzdC9nc3RnaG9zdHBhZC5jOiBBZGFwdCB0byBzdG9yZSBpbnN0YW5jZSBkYXRhIGluIHRoZSB0eXBlCisJICBpbnN0YW5jZSdzIHByaXZhdGUgZGF0YSByZWdpb24sIG5vdCBpbiB0aGUgcHVibGljIHN0cnVjdC4KKworMjAwOC0xMC0wOCAxMDowNzoxNSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogSWYgd2UgY2FuJ3QgZ2V0IGEgY2FjaGUgZmlsZSBkb24ndCB0cnkgdG8gc2F2ZSBzb21ldGhpbmcgdG8gaXQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IChnc3RfcmVnaXN0cnlfYmluYXJ5X3dyaXRlX2NhY2hlKToKKwkgIElmIHdlIGNhbid0IGdldCBhIGNhY2hlIGZpbGUgZG9uJ3QgdHJ5IHRvIHNhdmUgc29tZXRoaW5nIHRvIGl0LgorCSAgRGVyZWZlcmVuY2luZyBOVUxMIHBvaW50ZXJzIHVzdWFsbHkgaXNuJ3QgYSBnb29kIGlkZWEuCisKKzIwMDgtMTAtMDggMDg6NTQ6NTUgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdGdob3N0cGFkLmMgKGdzdF9naG9zdF9wYWRfY29uc3RydWN0KTogSWYgd2UgZ290IGEgdGVtcGxhdGUgdmlhIGdfb2JqZWN0X2dldCgpLCBiZSBzdXJlIHRvIHVucmVmIGl0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA4LTEwLTA4ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYyAoZ3N0X2dob3N0X3BhZF9jb25zdHJ1Y3QpOiBJZiB3ZSBnb3QgYQorCSAgdGVtcGxhdGUgdmlhIGdfb2JqZWN0X2dldCgpLCBiZSBzdXJlIHRvIHVucmVmIGl0LgorCSAgKiBnc3QvZ3N0YnVmZmVyLmggKEdTVF9CVUZGRVJfRlJFRV9GVU5DKTogRml4IGluY29ycmVjdCBkb2MuCisKKzIwMDgtMTAtMDcgMTU6MTI6MjEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICB0ZXN0cy9jaGVjay86IEFkZCBTcGFyYyBBQkkgY2hlY2tzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RhYmkuYzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9zcGFyYy5oOgorCSAgKiB0ZXN0cy9jaGVjay9saWJzL2xpYnNhYmkuYzoKKwkgICogdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3Rfc3BhcmMuaDoKKwkgIEFkZCBTcGFyYyBBQkkgY2hlY2tzCisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgQ2FzdCBzaWduZWQgaW50ZWdlciB0byB1bnNpZ25lZCB0byBhdm9pZCBhIGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMDgtMTAtMDcgMTI6MjY6NDAgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmM6IFVzZSBuZXcgR1NUX1JFQURfVUlOVDI0XyhMRXxCRSkgbWFjcm9zLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5jOiAoZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfbGUpLAorCSAgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2JlKSwgKGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfbGUpLAorCSAgKGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfYmUpLCAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2xlKSwKKwkgIChnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfYmUpLCAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfbGUpLAorCSAgKGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2JlKToKKwkgIFVzZSBuZXcgR1NUX1JFQURfVUlOVDI0XyhMRXxCRSkgbWFjcm9zLgorCisyMDA4LTEwLTA3IDEyOjAwOjQ5ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIEFsd2F5cyB1c2UgdGhlIHVuYWxpZ25lZCB2YXJpYW50cyBvZiBHU1RfUkVBRF9VSU5UKiBhbmQgR1NUX1dSSVRFX1VJTlQqIGFzIGl0J3MgdG9vIGVhc3kgdG8gYnJlYWsgdGhlIElTTyBDIHN0cmljdCBhbC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3R1dGlscy5oOgorCSAgQWx3YXlzIHVzZSB0aGUgdW5hbGlnbmVkIHZhcmlhbnRzIG9mIEdTVF9SRUFEX1VJTlQqIGFuZCBHU1RfV1JJVEVfVUlOVCoKKwkgIGFzIGl0J3MgdG9vIGVhc3kgdG8gYnJlYWsgdGhlIElTTyBDIHN0cmljdCBhbGlhc2luZyBydWxlcyB3aXRoIHNpbXBsZQorCSAgY2FzdHMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdHlwZSBhbmQgdGhpcyB3b3VsZCBpbnRyb2R1Y2UgaGFyZCB0byBkZWJ1ZworCSAgYnVncy4gRml4ZXMgYnVnICM1NDU3MTQuCisJICBBUEk6IEFkZCBHU1RfUkVBRF9VSU5UMjRfKExFfEJFKSBhbmQgR1NUX1dSSVRFX1VJTlQyNF8oTEV8QkUpLgorCisyMDA4LTEwLTA3IDA2OjU2OjExICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvOiBBZGQgJ1NpbmNlJyBiaXRzIHRvIGd0ay1kb2MgY2h1bmtzIGZvciBuZXcgQVBJLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RidWZmZXIuaDogKEdTVF9CVUZGRVJfRlJFRV9GVU5DKToKKwkgICogZ3N0L2dzdGdob3N0cGFkLmM6IChnc3RfZ2hvc3RfcGFkX2NvbnN0cnVjdCk6CisJICBBZGQgJ1NpbmNlJyBiaXRzIHRvIGd0ay1kb2MgY2h1bmtzIGZvciBuZXcgQVBJLgorCisyMDA4LTEwLTA2IDIxOjUyOjU3ICswMDAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgorCisJICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBGaXggZG9jdW1lbnRhdGlvbgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICBGaXggZG9jdW1lbnRhdGlvbgorCisyMDA4LTEwLTA2IDE4OjAzOjU4ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkqIENoYW5nZUxvZzoKKwkgIGNoYW5nZWxvZywgZG9oCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGNoYW5nZWxvZywgZG9oCisKKzIwMDgtMTAtMDYgMTg6MDE6NDIgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdGJ1ZmZlci5oIChHU1RfQlVGRkVSX0ZSRUVfRlVOQyk6IE5ldyBBUEksIGEgZnJlZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIHRoZSBtYWxsb2NfZGF0YSB0byBmcmVlIGl0LiBCLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDgtMTAtMDYgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3RidWZmZXIuaCAoR1NUX0JVRkZFUl9GUkVFX0ZVTkMpOiBOZXcgQVBJLCBhIGZyZWUgZnVuY3Rpb24KKwkgIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gdGhlIG1hbGxvY19kYXRhIHRvIGZyZWUgaXQuIEJhc2ljYWxseSBhIHdheQorCSAgdG8gYXZvaWQgc3ViY2xhc3Npbmcgd2hlbiBhbGwgeW91IG5lZWQgaXMgYSBkaWZmZXJlbnQgZnJlZQorCSAgZnVuY3Rpb24sIGkuZS4gZnJlZSgpIGluc3RlYWQgb2YgZ19mcmVlKCkuCisJICAqIGdzdC9nc3RidWZmZXIuYyAoZ3N0X2J1ZmZlcl9maW5hbGl6ZSk6IEZyZWUgbWFsbG9jX2RhdGEgdmlhCisJICBjYWxsaW5nIHRoZSBmcmVlIGZ1bmN0aW9uLgorCSAgKGdzdF9idWZmZXJfaW5pdCk6IEluaXRpYWxpemUgdGhlIGZyZWUgZnVuY3Rpb24gdG8gZ19mcmVlLgorCisyMDA4LTEwLTA2IDE3OjU3OjI1ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGdzdC9nc3RnaG9zdHBhZC4qOiBOZXcgZnVuY3Rpb24sIGZpbmlzaGVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBnaG9zdCBwYWQuIFVzZWZ1bCBmb3IgbGFuZ3VhZ2UgYmluZGluZ3MgYW5kIHN1YmNsYXNzZS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA4LTEwLTA2ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuaDoKKwkgICogZ3N0L2dzdGdob3N0cGFkLmMgKGdzdF9naG9zdF9wYWRfY29uc3RydWN0KTogTmV3IGZ1bmN0aW9uLAorCSAgZmluaXNoZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGdob3N0IHBhZC4gVXNlZnVsIGZvciBsYW5ndWFnZQorCSAgYmluZGluZ3MgYW5kIHN1YmNsYXNzZXJzIG9mIEdzdEdob3N0UGFkLiBGaXhlcyAjNTM5MTA4LgorCSAgKGdzdF9naG9zdF9wYWRfbmV3X2Z1bGwpOiBVc2UgdGhlIG5ldyBjb25zdHJ1Y3Rvci4KKworMjAwOC0xMC0wNiAxNjoxNTowMiArMDAwMCAgT2xpdmllciBDcmV0ZSA8dGVzdGVyQHRlc3Rlci5jYT4KKworCSAgZ3N0L2dzdGJpbi5jOiBLZWVwIHRyYWNrIG9mIHBhZHMgdGhhdCBhcmUgYmVpbmcgbGlua2VkL3VubGlua2VkIGFuZCByZXN5bmMgdGhlIHN0YXRlIGNoYW5nZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIEJhc2Ugb24gUGF0Y2ggYnk6IE9saXZpZXIgQ3JldGUgPHRlc3RlciBhdCB0ZXN0ZXIgZG90IGNhPgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2luaXQpLCAoZ3N0X2Jpbl9hZGRfZnVuYyksCisJICAoZ3N0X2Jpbl9yZW1vdmVfZnVuYyksICh1cGRhdGVfZGVncmVlKSwKKwkgIChnc3RfYmluX3NvcnRfaXRlcmF0b3JfbmV3KSwgKGdzdF9iaW5faGFuZGxlX21lc3NhZ2VfZnVuYyk6CisJICBLZWVwIHRyYWNrIG9mIHBhZHMgdGhhdCBhcmUgYmVpbmcgbGlua2VkL3VubGlua2VkIGFuZCByZXN5bmMgdGhlIHN0YXRlCisJICBjaGFuZ2VzLgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2dldF9kaXJlY3Rpb24pLAorCSAgKGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uKSwgKGdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uKSwKKwkgIChnc3RfcGFkX3NldF9jaGVja2dldHJhbmdlX2Z1bmN0aW9uKSwgKGdzdF9wYWRfdW5saW5rKSwKKwkgIChnc3RfcGFkX2xpbmtfcHJlcGFyZSksIChnc3RfcGFkX2xpbmspLAorCSAgKGdzdF9wYWRfZXZlbnRfZGVmYXVsdF9kaXNwYXRjaCksIChnc3RfcGFkX2NoYWluKSwgKGdzdF9wYWRfcHVzaCksCisJICAoZ3N0X3BhZF9jaGVja19wdWxsX3JhbmdlKSwgKGdzdF9wYWRfZ2V0X3JhbmdlKSwKKwkgIChnc3RfcGFkX3B1bGxfcmFuZ2UpOgorCSAgU29tZSBjb2RlIGNsZWFudXBzLCB1c2UgbWFjcm9zIHRvIGNoZWNrIHBhZCBkaXJlY3Rpb24uCisJICBEb24ndCBuZWVkIHRvIHRha2UgdGhlIGxvY2sgb24gdGhlIHBhZCBkaXJlY3Rpb24uCisJICBQb3N0IHN0cnVjdHVyZSBjaGFuZ2Ugd2hlbiBwYWRzIGFyZSBsaW5rZWQvdW5saW5rZWQuCisJICBDaGFuZ2Ugc29tZSBjaGVja3MgaW50byBfcmV0dXJuX2lmX2ZhaWwoKS4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOgorCSAgKHRlc3RfbGlua19zdHJ1Y3R1cmVfY2hhbmdlX3N0YXRlX2NoYW5nZWRfc3luY19jYiksCisJICAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X2Jpbl9zdWl0ZSk6CisJICBBZGQgdGVzdGNhc2UgZm9yIHBhZCBsaW5rL3VubGlua2UgcmVzeW5jIGR1cmluZyBhIHN0YXRlIGNoYW5nZS4KKwkgIEZpeGVzICM1MTAzNTQuCisKKzIwMDgtMTAtMDYgMTU6MzE6NDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIEltcGxlbWVudCBTVFJVQ1RVUkVfQ0hBTkdFRCBtZXNzYWdlcy4gVGhlc2UgbWVzc2FnZXMgd2lsbCBiZSB1c2VkIHRvIHNpZ25hbCB0aGUgcGFyZW50IGJpbiBvZiBsaW5rL3VubGluayBvcGVyYXRpb25zIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3RtZXNzYWdlLmM6IChnc3RfbWVzc2FnZV9uZXdfc3RydWN0dXJlX2NoYW5nZSksCisJICAoZ3N0X21lc3NhZ2VfcGFyc2Vfc3RydWN0dXJlX2NoYW5nZSk6CisJICAqIGdzdC9nc3RtZXNzYWdlLmg6CisJICBJbXBsZW1lbnQgU1RSVUNUVVJFX0NIQU5HRUQgbWVzc2FnZXMuIFRoZXNlIG1lc3NhZ2VzIHdpbGwgYmUgdXNlZCB0bworCSAgc2lnbmFsIHRoZSBwYXJlbnQgYmluIG9mIGxpbmsvdW5saW5rIG9wZXJhdGlvbnMgdGhhdCBjb3VsZCByZXF1aXJlIGEKKwkgIHJlc3luYyB3aGVuIGRvaW5nIGEgc3RhdGUgY2hhbmdlLiBTZWUgIyM1MTAzNTQuCisJICBBUEk6IGdzdF9tZXNzYWdlX25ld19zdHJ1Y3R1cmVfY2hhbmdlKCkKKwkgIEFQSTogZ3N0X21lc3NhZ2VfcGFyc2Vfc3RydWN0dXJlX2NoYW5nZSgpCisKKzIwMDgtMTAtMDYgMTU6MjE6MTQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RxdWFyay4qOiBBZGQgc29tZSBtb3JlIHF1YXJrcyBmb3IgbmV3IG1lc3NhZ2UuIFNlZSAjNTEwMzU0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RxdWFyay5jOgorCSAgKiBnc3QvZ3N0cXVhcmsuaDoKKwkgIEFkZCBzb21lIG1vcmUgcXVhcmtzIGZvciBuZXcgbWVzc2FnZS4gU2VlICM1MTAzNTQuCisKKzIwMDgtMTAtMDYgMTI6NTc6MzkgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSAgQ2hhbmdlTG9nIHN1cmdlcnk6IGFkZCBBUEkgdGFnCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIENoYW5nZUxvZyBzdXJnZXJ5OiBhZGQgQVBJIHRhZworCisyMDA4LTEwLTA2IDEyOjQxOjUzICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIEFkZCBiaXQgcmVhZGVyIGFuZCBieXRlIHJlYWRlciBjbGFzc2VzLCBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbiBhbmQgYW4gZXh0ZW5zaXZlIHVuaXQgdGVzdCBzdWl0ZS4gRml4ZXMgYnVnICM1NTM1NTQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbDoKKwkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkgICogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiaXRyZWFkZXIuYzogKGdzdF9iaXRfcmVhZGVyX25ldyksCisJICAoZ3N0X2JpdF9yZWFkZXJfbmV3X2Zyb21fYnVmZmVyKSwgKGdzdF9iaXRfcmVhZGVyX2ZyZWUpLAorCSAgKGdzdF9iaXRfcmVhZGVyX2luaXQpLCAoZ3N0X2JpdF9yZWFkZXJfaW5pdF9mcm9tX2J1ZmZlciksCisJICAoZ3N0X2JpdF9yZWFkZXJfc2V0X3BvcyksIChnc3RfYml0X3JlYWRlcl9nZXRfcG9zKSwKKwkgIChnc3RfYml0X3JlYWRlcl9nZXRfcmVtYWluaW5nKSwgKGdzdF9iaXRfcmVhZGVyX3NraXApLAorCSAgKGdzdF9iaXRfcmVhZGVyX3NraXBfdG9fYnl0ZSk6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLmg6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5jOiAoR0RPVUJMRV9TV0FQX0xFX0JFKSwKKwkgIChHRkxPQVRfU1dBUF9MRV9CRSksIChnc3RfYnl0ZV9yZWFkZXJfbmV3KSwKKwkgIChnc3RfYnl0ZV9yZWFkZXJfbmV3X2Zyb21fYnVmZmVyKSwgKGdzdF9ieXRlX3JlYWRlcl9mcmVlKSwKKwkgIChnc3RfYnl0ZV9yZWFkZXJfaW5pdCksIChnc3RfYnl0ZV9yZWFkZXJfaW5pdF9mcm9tX2J1ZmZlciksCisJICAoZ3N0X2J5dGVfcmVhZGVyX3NldF9wb3MpLCAoZ3N0X2J5dGVfcmVhZGVyX2dldF9wb3MpLAorCSAgKGdzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nKSwgKGdzdF9ieXRlX3JlYWRlcl9za2lwKSwKKwkgIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4KSwgKGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50OCksCisJICAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDgpLCAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50OCksCisJICAoZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfbGUpLCAoZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfYmUpLAorCSAgKGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfbGUpLCAoZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9iZSksCisJICAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2xlKSwgKGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9iZSksCisJICAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfbGUpLCAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfYmUpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaDoKKwkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICAqIHRlc3RzL2NoZWNrL2xpYnMvYml0cmVhZGVyLmM6IChHU1RfU1RBUlRfVEVTVCksCisJICAoZ3N0X2JpdF9yZWFkZXJfc3VpdGUpOgorCSAgKiB0ZXN0cy9jaGVjay9saWJzL2J5dGVyZWFkZXIuYzogKEdTVF9TVEFSVF9URVNUKSwKKwkgIChnc3RfYnl0ZV9yZWFkZXJfc3VpdGUpOgorCSAgQWRkIGJpdCByZWFkZXIgYW5kIGJ5dGUgcmVhZGVyIGNsYXNzZXMsIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uCisJICBhbmQgYW4gZXh0ZW5zaXZlIHVuaXQgdGVzdCBzdWl0ZS4gRml4ZXMgYnVnICM1NTM1NTQuCisKKzIwMDgtMTAtMDYgMDg6NTg6MjUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogSW1wcm92ZSBwb3NpdGlvbiByZXBvcnRpbmcgd2hpbGUgZmx1c2hpbmcgYW5kIG90aGVyIGludGVybWVkaWF0ZSBzdGF0ZSBjaGFuZ2VzLiBGaXhlcyAjNS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uKSwKKwkgIChnc3RfYmFzZV9zaW5rX3F1ZXJ5KToKKwkgIEltcHJvdmUgcG9zaXRpb24gcmVwb3J0aW5nIHdoaWxlIGZsdXNoaW5nIGFuZCBvdGhlciBpbnRlcm1lZGlhdGUgc3RhdGUKKwkgIGNoYW5nZXMuIEZpeGVzICM1NTM4NzQuCisKKzIwMDgtMTAtMDYgMDg6NDU6NDIgKzAwMDAgIEFudG9pbmUgVHJlbWJsYXkgPGhleGEwMEBnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RwYWQuYzogRml4IHNtYWxsIHJlZm91bnQgbGVhayBpbiBjYXBzIGNvbXBhdGliaWxpdHkgY2hlY2suCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBBbnRvaW5lIFRyZW1ibGF5IDxoZXhhMDAgYXQgZ21haWwgZG90IGNvbT4KKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9saW5rX2NoZWNrX2NvbXBhdGlibGVfdW5sb2NrZWQpOgorCSAgT3JpZ2luYWwgcGF0Y2ggYnkgOiBTaW1vbiBEZXNjYXJpZXMKKwkgIEZpeCBzbWFsbCByZWZvdW50IGxlYWsgaW4gY2FwcyBjb21wYXRpYmlsaXR5IGNoZWNrLgorCSAgRml4ZXMgIzU1MTY3Ni4KKworMjAwOC0xMC0wNiAwNzozMDo1NyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBkb2NzL3B3Zy9hZHZhbmNlZC1yZXF1ZXN0LnhtbDogRml4IDAuOCBhcGkgdXNhZ2UgaW4gZXhhbXBsZS4gRml4ZXMgIzU1NDU2MQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcHdnL2FkdmFuY2VkLXJlcXVlc3QueG1sOgorCSAgRml4IDAuOCBhcGkgdXNhZ2UgaW4gZXhhbXBsZS4gRml4ZXMgIzU1NDU2MQorCSAgKiBkb2NzL3B3Zy9hcHBlbmRpeC1wb3J0aW5nLnhtbDoKKwkgIENoYW5nZSAwLjkgdG8gMC4xMCBoZXJlLgorCisyMDA4LTEwLTA2IDA3OjEzOjAyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvbWFudWFsL2Jhc2ljcy1kYXRhLnhtbDogQ2hhbmdlICJldmVudC1ldmVudCBpbnRlcmFjdGlvbiIgdG8gImVsZW1lbnQtZWxlbWVudCBpbnRlcmFjdGlvbiIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9tYW51YWwvYmFzaWNzLWRhdGEueG1sOgorCSAgQ2hhbmdlICJldmVudC1ldmVudCBpbnRlcmFjdGlvbiIgdG8gImVsZW1lbnQtZWxlbWVudCBpbnRlcmFjdGlvbiIuCisJICBGaXhlcyAjNTUyNDQ4LiBBbHNvIGZpeCBzYW1wbGUgY29kZSBmb3Igc2Vla2luZyBhbmQgZG8gbW9yZSAwLjgtPjAuMTAKKwkgIHVwZGF0ZXMuCisKKzIwMDgtMTAtMDUgMTA6MDE6NTAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBjb25maWd1cmUuYWM6IEJhY2sgdG8gZGV2ZWxvcG1lbnQgLT4gMC4xMC4yMS4xCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgQmFjayB0byBkZXZlbG9wbWVudCAtPiAwLjEwLjIxLjEKKworPT09IHJlbGVhc2UgMC4xMC4yMSA9PT0KKworMjAwOC0xMC0wMiAyMzo1OTo1MyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkqIENoYW5nZUxvZzoKKwkqIE5FV1M6CisJKiBSRUxFQVNFOgorCSogY29uZmlndXJlLmFjOgorCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmFyZ3M6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgorCSogZ3N0cmVhbWVyLmRvYXA6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICBSZWxlYXNlIDAuMTAuMjEKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUmVsZWFzZSAwLjEwLjIxCisKKzIwMDgtMTAtMDIgMjI6NDI6MTggKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmUucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kYS5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9lcy5wbzoKKwkqIHBvL2ZpLnBvOgorCSogcG8vZnIucG86CisJKiBwby9odS5wbzoKKwkqIHBvL2lkLnBvOgorCSogcG8vaXQucG86CisJKiBwby9uYi5wbzoKKwkqIHBvL25sLnBvOgorCSogcG8vcGwucG86CisJKiBwby9wdF9CUi5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vcncucG86CisJKiBwby9zay5wbzoKKwkqIHBvL3NxLnBvOgorCSogcG8vc3IucG86CisJKiBwby9zdi5wbzoKKwkqIHBvL3RyLnBvOgorCSogcG8vdWsucG86CisJKiBwby92aS5wbzoKKwkqIHBvL3poX0NOLnBvOgorCSogcG8vemhfVFcucG86CisJICBVcGRhdGUgLnBvIGZpbGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFVwZGF0ZSAucG8gZmlsZXMKKworMjAwOC0wOS0yOCAyMjo0OTo1NiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGNvbmZpZ3VyZS5hYzogMC4xMC4yMC40IHByZS1yZWxlYXNlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgMC4xMC4yMC40IHByZS1yZWxlYXNlCisKKzIwMDgtMDktMjggMjE6MTk6MTUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBGaXggYXNzZXJ0aW9uIGluIGJhc2V0cmFuc2Zvcm0gd2hlbiB0aGUgc3ViY2xhc3MgY2hvb3NlcyBub3QgdG8gYWxsb2NhdGUgYSBidWZmZXIgaW4gcHJlcGFyZV9idWZmZXIoKSwgYW5kIG1ha2UgY2Fwc2YuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6CisJICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uY3ZzaWdub3JlOgorCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9jYXBzZmlsdGVyLmM6CisJICBGaXggYXNzZXJ0aW9uIGluIGJhc2V0cmFuc2Zvcm0gd2hlbiB0aGUgc3ViY2xhc3MgY2hvb3NlcyBub3QgdG8KKwkgIGFsbG9jYXRlIGEgYnVmZmVyIGluIHByZXBhcmVfYnVmZmVyKCksIGFuZCBtYWtlIGNhcHNmaWx0ZXIgZXJyb3Igb3V0CisJICBjbGVhbmx5IGlmIHJlcXVlc3RlZCB0byBhcHBseSBjYXBzIHRoYXQgZG9uJ3QgY29tcGxldGVseSBzcGVjaWZ5IHRoZQorCSAgYnVmZmVyLiBGaXhlcyAjNTUxNTA5CisKKzIwMDgtMDktMjQgMTU6MDM6NDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBUYWtlIG5ldyBjYXBzIHJlZiBiZWNhdXNlIG91ciBvbGQgb25lIG1pZ2h0IGhhdmUgYmVlbiBnb25lIHdoZW4gdGhlIHN1YmNsYXNzIHBlcmZvci4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9wcmVwYXJlX291dHB1dF9idWZmZXIpOgorCSAgVGFrZSBuZXcgY2FwcyByZWYgYmVjYXVzZSBvdXIgb2xkIG9uZSBtaWdodCBoYXZlIGJlZW4gZ29uZSB3aGVuIHRoZQorCSAgc3ViY2xhc3MgcGVyZm9ybXMgYSBnc3RfcGFkX3NldF9jYXBzKCkgb24gdGhlIHNyY3BhZC4gU2VlICM1NDg3NjQuCisKKzIwMDgtMDktMTYgMTU6MzU6MDQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJKiBDaGFuZ2VMb2c6CisJICBBbHNvIGNvbW1pdCBDaGFuZ2VMb2cKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgQWxzbyBjb21taXQgQ2hhbmdlTG9nCisKKzIwMDgtMDktMTYgMTU6MjQ6MDQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBHYWguIENvbW1pdCBwcmUtcmVsZWFzZSBpbmZvIHRoYXQgc2hvdWxkIGhhdmUgZ29uZSBpbiBsYXN0IHdlZWsgYWxyZWFkeS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgR2FoLiBDb21taXQgcHJlLXJlbGVhc2UgaW5mbyB0aGF0IHNob3VsZCBoYXZlIGdvbmUgaW4gbGFzdCB3ZWVrIGFscmVhZHkuCisJICAyMDA4LTA5LTEwICBKYW4gU2NobWlkdCAgPGphbi5zY2htaWR0QHN1bi5jb20+CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgIDAuMTAuMjAuMiBwcmUtcmVsZWFzZQorCSAgKiBwby9MSU5HVUFTOgorCSAgKiBwby9pZC5wbzoKKwkgICogcG8vcHRfQlIucG86CisJICBOZXcgdHJhbnNsYXRpb25zLgorCisyMDA4LTA5LTE1IDE1OjE4OjA3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGNvbmZpZ3VyZS5hYzogRG8gbm90IHByb2JlIGF2YWlsYWJpbGl0eSBvZiBjaGVjayB1bml0IHRlc3QgbGlicmFyeSB3aGVuIGNyb3NzIGNvbXBpbGluZywgYXMgdGVzdCB3b3VsZCBub3Qgd29yayBhbnl3YS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgIERvIG5vdCBwcm9iZSBhdmFpbGFiaWxpdHkgb2YgY2hlY2sgdW5pdCB0ZXN0IGxpYnJhcnkgd2hlbiBjcm9zcworCSAgY29tcGlsaW5nLCBhcyB0ZXN0IHdvdWxkIG5vdCB3b3JrIGFueXdheS4gQWxzbyBjbGVhbnVwIHZlcmJvc2Ugb3V0cHV0CisJICBvZiB0aGUgY2hlY2sgdGVzdC4gRml4ZXMgIzU1MTk1Mi4KKworMjAwOC0wOS0xNCAyMjowMTozMCArMDAwMCAgQW50b2luZSBUcmVtYmxheSA8aGV4YTAwQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGVsZW1lbnQuYzogQXZvaWQgbGVha2luZyB0aGUgcGFyZW50IHJlZiB3aGVuIHdlIGZhaWwgY2hhbmdpbmcgdGhlIHN0YXRlIG9mIHRoZSBlbGVtZW50IHVzaW5nIGdzdF9lbGVtZW50X3N5bmNfLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIEJhc2VkIG9uIHBhdGNoIGJ5OiBBbnRvaW5lIFRyZW1ibGF5IDxoZXhhMDAgYXQgZ21haWwgZG90IGNvbT4KKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQpOgorCSAgQXZvaWQgbGVha2luZyB0aGUgcGFyZW50IHJlZiB3aGVuIHdlIGZhaWwgY2hhbmdpbmcgdGhlIHN0YXRlIG9mIHRoZQorCSAgZWxlbWVudCB1c2luZyBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KCkuIEZpeGVzICM1NTE5NzguCisKKzIwMDgtMDktMTEgMTY6NTY6NDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGRvY3MvbWFudWFsL2ludHJvLW1vdGl2YXRpb24ueG1sOiBSZW1vdmUgc29tZSBiaXRzIHRoYXQgbm8gbG9uZ2VyIGFwcGx5LCB1cGRhdGUgb3RoZXJzICgjNTUxNjQyKS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL21hbnVhbC9pbnRyby1tb3RpdmF0aW9uLnhtbDo6CisJICBSZW1vdmUgc29tZSBiaXRzIHRoYXQgbm8gbG9uZ2VyIGFwcGx5LCB1cGRhdGUgb3RoZXJzICgjNTUxNjQyKS4KKworMjAwOC0wOS0wOSAxODo0NzoyNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgd2luMzIvY29tbW9uL2NvbmZpZy5oLmluOiBBZGQgR1NUX0RBVEFESVIsIGhhcmQtY29kZSBjcHUgdG8geDg2LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHdpbjMyL2NvbW1vbi9jb25maWcuaC5pbjoKKwkgIEFkZCBHU1RfREFUQURJUiwgaGFyZC1jb2RlIGNwdSB0byB4ODYuCisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgU3BhY2VzIHRvIHRhYnMuCisKKzIwMDgtMDktMDMgMDU6NTI6NDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3R0YWdsaXN0Lmg6IEZpeCBTaW5jZTogbWFya2VycyBmb3IgbmV3IGdlbyB0YWdzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R0YWdsaXN0Lmg6CisJICBGaXggU2luY2U6IG1hcmtlcnMgZm9yIG5ldyBnZW8gdGFncy4KKworMjAwOC0wOS0wMiAyMDowMDoyOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0dGFnbGlzdC5oOiBGaXggYWN0dWFsIHRhZyBuYW1lIGRlZmluZSBhZnRlciByZW5hbWluZyBmcm9tIGFsdGl0dWRlIHRvIGVsZXZhdGlvbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dGFnbGlzdC5oOgorCSAgRml4IGFjdHVhbCB0YWcgbmFtZSBkZWZpbmUgYWZ0ZXIgcmVuYW1pbmcgZnJvbSBhbHRpdHVkZSB0byBlbGV2YXRpb24uCisKKzIwMDgtMDktMDEgMTQ6MDU6NDUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RwYWQuYzogQWRkIGZhbGxiYWNrIHdoZW4gY2FsbGluZyB0aGUgZGVwcmVjYXRlZCBmdW5jdGlvbiBvbiBhbiBlbGVtZW50IHRoYXQgaW1wbGVtZW50cyB0aGUgbmV3IGludGVybmFsX2xpbmsgaC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKGFkZF91bnJlZl9wYWRfdG9fbGlzdCksCisJICAoZ3N0X3BhZF9nZXRfaW50ZXJuYWxfbGlua3NfZGVmYXVsdCk6CisJICBBZGQgZmFsbGJhY2sgd2hlbiBjYWxsaW5nIHRoZSBkZXByZWNhdGVkIGZ1bmN0aW9uIG9uIGFuIGVsZW1lbnQgdGhhdAorCSAgaW1wbGVtZW50cyB0aGUgbmV3IGludGVybmFsX2xpbmsgaGFuZGxlci4KKworMjAwOC0wOS0wMSAxMzozNTozMiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBBZGQgbmV3IHRhZ3MgZm9yIGdlbyBsb2NhdGlvbiBhbmQgY2xhcmlmeSBwdXJwb3NlIG9mIGV4aXN0aW5nIGxvY2F0aW9uIHRhZy4gRml4ZXMgIzQ4MTE2OQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3R0YWdsaXN0LmM6CisJICAqIGdzdC9nc3R0YWdsaXN0Lmg6CisJICBBZGQgbmV3IHRhZ3MgZm9yIGdlbyBsb2NhdGlvbiBhbmQgY2xhcmlmeSBwdXJwb3NlIG9mIGV4aXN0aW5nIGxvY2F0aW9uCisJICB0YWcuIEZpeGVzICM0ODExNjkKKworMjAwOC0wOS0wMSAxMToyNzo0NSArMDAwMCAgT2xpdmllciBDcmV0ZSA8dGVzdGVyQHRlc3Rlci5jYT4KKworCSAgZ3N0L2dzdHBhZC5jOiBVc2UgdGhyZWFkLXNhZmUgaW50ZXJuYWwgbGlua3MgaXRlcmF0b3IuIEZpeGVzICM1NDk1MDQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBPbGl2aWVyIENyZXRlIDx0ZXN0ZXIgYXQgdGVzdGVyIGRvdCBjYT4KKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2RlZmF1bHQpLAorCSAgKGdzdF9wYWRfZXZlbnRfZGVmYXVsdF9kaXNwYXRjaCksIChnc3RfcGFkX2Rpc3BhdGNoZXIpOgorCSAgVXNlIHRocmVhZC1zYWZlIGludGVybmFsIGxpbmtzIGl0ZXJhdG9yLiBGaXhlcyAjNTQ5NTA0LgorCisyMDA4LTA5LTAxIDEwOjQyOjA0ICswMDAwICBPbGl2aWVyIENyZXRlIDx0ZXN0ZXJAdGVzdGVyLmNhPgorCisJICBBZGQgdGhyZWFkc2FmZSByZXBsYWNlbWVudCBmdW5jdGlvbnMgZm9yIGdldHRpbmcgaW50ZXJuYWwgbGlua3Mgb2YgYW4gZWxlbWVudC4gRGVwcmVjYXRlIHRoZSBvbGQgaW50ZXJuYWwgbGlua3MgZnVuY3QuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgQmFzZWQgb24gcGF0Y2ggYnk6IE9saXZpZXIgQ3JldGUgPHRlc3RlciBhdCB0ZXN0ZXIgZG90IGNhPgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9pbml0KSwKKwkgIChnc3RfcGFkX3NldF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2Z1bmN0aW9uKSwKKwkgIChpbnRfbGlua19pdGVyX2RhdGFfZnJlZSksIChpdGVyYXRlX3BhZCksCisJICAoZ3N0X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2RlZmF1bHQpLAorCSAgKGdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rcyksIChnc3RfcGFkX2dldF9pbnRlcm5hbF9saW5rcyk6CisJICAqIGdzdC9nc3RwYWQuaDoKKwkgIEFkZCB0aHJlYWRzYWZlIHJlcGxhY2VtZW50IGZ1bmN0aW9ucyBmb3IgZ2V0dGluZyBpbnRlcm5hbCBsaW5rcyBvZiBhbgorCSAgZWxlbWVudC4gRGVwcmVjYXRlIHRoZSBvbGQgaW50ZXJuYWwgbGlua3MgZnVuY3Rpb25zLgorCSAgQVBJOkdzdFBhZDo6Z3N0X3BhZF9zZXRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19mdW5jdGlvbigpCisJICBBUEk6R3N0UGFkOjpHc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uCisJICBBUEk6R3N0UGFkOjpnc3RfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3MoKQorCSAgQVBJOkdzdFBhZDo6Z3N0X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2RlZmF1bHQoKQorCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzogKGdzdF9wcm94eV9wYWRfZG9faXRlcmF0ZV9pbnRlcm5hbF9saW5rcyksCisJICAoZ3N0X3Byb3h5X3BhZF9pbml0KToKKwkgIEltcGxlbWVudCB0aHJlYWRzYWZlIGludGVybmFsIGxpbmtzLgorCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy90ZWUuYzogKEdTVF9TVEFSVF9URVNUKSwgKHRlZV9zdWl0ZSk6CisJICBVbml0IHRlc3QgZm9yIGludGVybmFsIGxpbmtzIG9uIHRlZS4gU2VlICM1NDk1MDQuCisKKzIwMDgtMDgtMzAgMTI6NTc6NDcgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkgIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOiBsaWJzL3RyYW5zZm9ybTEgdGVzdCByZXF1aXJlcyBsaWJzL3Rlc3RfdHJhbnNmb3JtLmMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgIGxpYnMvdHJhbnNmb3JtMSB0ZXN0IHJlcXVpcmVzIGxpYnMvdGVzdF90cmFuc2Zvcm0uYworCisyMDA4LTA4LTMwIDEyOjA3OjQxICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBnc3QvZ3N0cGFkLmM6IERpZSBldmlsIGRlYWRsb2NrLCBkaWUgIQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfZ2V0X2ludGVybmFsX2xpbmtzX2RlZmF1bHQpOgorCSAgRGllIGV2aWwgZGVhZGxvY2ssIGRpZSAhCisKKzIwMDgtMDgtMzAgMTE6NTU6NTkgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkgIEZpeCBhbGwgbGVha3MgZHVlIHRvIHRoZSBidWcgaW4gZ3N0X3BhZF90ZW1wbGF0ZV9uZXcoKSBieSB3aGljaCBpdCBkb2VzIG5vdCBzdGVhbCB0aGUgcmVmY291bnQgb2YgdGhlIGdpdmVuIGNhcHMgYXMgcy4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkKToKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzogKG5hbWVfaXNfdmFsaWQpLCAoR1NUX1NUQVJUX1RFU1QpOgorCSAgRml4IGFsbCBsZWFrcyBkdWUgdG8gdGhlIGJ1ZyBpbiBnc3RfcGFkX3RlbXBsYXRlX25ldygpIGJ5IHdoaWNoIGl0IGRvZXMKKwkgIG5vdCBzdGVhbCB0aGUgcmVmY291bnQgb2YgdGhlIGdpdmVuIGNhcHMgYXMgc3RhdGVkLgorCSAgUkVWRVJUIFRISVMgQ09NTUlUIE9OQ0UgRklYRUQgIQorCSAgUkVWRVJUIFRISVMgQ09NTUlUIE9OQ0UgRklYRUQgIQorCSAgUkVWRVJUIFRISVMgQ09NTUlUIE9OQ0UgRklYRUQgIQorCSAgUkVWRVJUIFRISVMgQ09NTUlUIE9OQ0UgRklYRUQgIQorCSAgUkVWRVJUIFRISVMgQ09NTUlUIE9OQ0UgRklYRUQgIQorCSAgUkVWRVJUIFRISVMgQ09NTUlUIE9OQ0UgRklYRUQgIQorCisyMDA4LTA4LTI5IDE3OjU4OjI1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0aXRlcmF0b3IuKjogQWZ0ZXIgMyB5ZWFycyBpdCdzIGFib3V0IHRpbWUgdG8gcmV2aXNlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBpdGVyYXRvciBvYmplY3RzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RpdGVyYXRvci5jOgorCSAgKiBnc3QvZ3N0aXRlcmF0b3IuaDoKKwkgIEFmdGVyIDMgeWVhcnMgaXQncyBhYm91dCB0aW1lIHRvIHJldmlzZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUKKwkgIGl0ZXJhdG9yIG9iamVjdHMuCisKKzIwMDgtMDgtMjkgMTY6MTA6NTYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RwYWQuYzogTWFrZSB0aGUgaW50ZXJuYWwgbGlua3MgZnVuY3Rpb24gbGVzcyB0aHJlYWQtdW5zYWZlIGFuZCBhZGQgc29tZSBjb21tZW50cywgZHVubm8gd2h5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfZ2V0X2ludGVybmFsX2xpbmtzX2RlZmF1bHQpOgorCSAgTWFrZSB0aGUgaW50ZXJuYWwgbGlua3MgZnVuY3Rpb24gbGVzcyB0aHJlYWQtdW5zYWZlIGFuZCBhZGQgc29tZQorCSAgY29tbWVudHMsIGR1bm5vIHdoeS4KKworMjAwOC0wOC0yOSAxNDoxMjowMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdF9wcml2YXRlLmg6IEluY2x1ZGUgZ3N0aW5mby5oIGV2ZW4gaWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHIGlzIGRlZmluZWQuIEZpeGVzIGJ1aWxkIHdpdGggLS1kaXNhYmxlLWdzdC1kZWJ1Zy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0X3ByaXZhdGUuaDoKKwkgIEluY2x1ZGUgZ3N0aW5mby5oIGV2ZW4gaWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHIGlzIGRlZmluZWQuIEZpeGVzCisJICBidWlsZCB3aXRoIC0tZGlzYWJsZS1nc3QtZGVidWcuCisKKzIwMDgtMDgtMjkgMDA6MzQ6NTggKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJICBnc3QvZ3N0cGFkdGVtcGxhdGUuYzogUmV2ZXJ0IGxhc3QgY2hhbmdlLCBzaW5jZSBpdCBicmVha3MgYSBmZXcgcGx1Z2lucywgZmZtcGVnLCBhbGF3LCBhbmQgbXVsYXcuICBDb2RlIGlzIGNvcnJlY3QsIGIuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzogUmV2ZXJ0IGxhc3QgY2hhbmdlLCBzaW5jZSBpdCBicmVha3MKKwkgIGEgZmV3IHBsdWdpbnMsIGZmbXBlZywgYWxhdywgYW5kIG11bGF3LiAgQ29kZSBpcyBjb3JyZWN0LAorCSAgYnV0IHNob3VsZG4ndCBiZSBlbmFibGVkIHVudGlsIHdlJ3ZlIHJlbGVhc2VkIGZpeGVkIHZlcnNpb25zCisJICBvZiAtZ29vZCBhbmQgLWZmbXBlZy4KKworMjAwOC0wOC0yOCAyMDoxMjo1NCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0b2JqZWN0LmM6IFB1dCB0aGUgZ3N0X29iamVjdF9nZXRfbmFtZSgpIGJhY2sgaW4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdG9iamVjdC5jOgorCSAgUHV0IHRoZSBnc3Rfb2JqZWN0X2dldF9uYW1lKCkgYmFjayBpbi4KKworMjAwOC0wOC0yOCAxMjozMjoxOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0cGFkdGVtcGxhdGUuYzogVGhlIG9sZCBiZWhhdmlvdXIgd2FzIHRoYXQgZ3N0X3BhZF90ZW1wbGF0ZV9uZXcoKSB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIGNhcHMuIEFzIHdlIG5vdyBjYWxsIGcuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzoKKwkgIFRoZSBvbGQgYmVoYXZpb3VyIHdhcyB0aGF0IGdzdF9wYWRfdGVtcGxhdGVfbmV3KCkgdGFrZXMgb3duZXJzaGlwIG9mCisJICB0aGUgY2Fwcy4gQXMgd2Ugbm93IGNhbGwgZ19vYmplY3RfbmV3KCkgd2hpY2ggY2FsbHMgZ19vYmplY3Rfc2V0KCkgYW5kCisJICB3aGljaCBjb3BpZXMgdGhlIGNhcHMsIHdlIGhhdmUgdG8gdW5yZWYgdGhlbSB0byBub3QgbGVhayB0aGVtLiBGaXhlcworCSAgbWFrZSB2YWxncmlkIGZvciBtZS4KKworMjAwOC0wOC0yOCAxMDo0NTowNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0dXJpLmM6IERvbid0IHNlZ2ZhdWx0IG9uIGlucHV0IGxpa2UgInRlbDorMS0xMjMtNTU1LTEyMzQiLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R1cmkuYzoKKwkgIERvbid0IHNlZ2ZhdWx0IG9uIGlucHV0IGxpa2UgInRlbDorMS0xMjMtNTU1LTEyMzQiLgorCisyMDA4LTA4LTI3IDA3OjE4OjM3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3RvYmplY3QuYzogRHVlIHRvIHBvcHVsYXIgcmVxdWVzdCBhbHNvIGluY2x1ZGUgT2JqZWN0VHlwZSBpbiBnc3Rfb2JqZWN0X2dldF9wYXRoX3N0cmluZygpLiBNYWtlcyBnc3QtbGF1bmNoIC12IC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RvYmplY3QuYzoKKwkgIER1ZSB0byBwb3B1bGFyIHJlcXVlc3QgYWxzbyBpbmNsdWRlIE9iamVjdFR5cGUgaW4KKwkgIGdzdF9vYmplY3RfZ2V0X3BhdGhfc3RyaW5nKCkuIE1ha2VzIGdzdC1sYXVuY2ggLXYgYml0IG1vcmUgdXNlZnVsLgorCisyMDA4LTA4LTI3IDAzOjA0OjIzICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSAgZ3N0L2dzdHV0aWxzLmM6IFJlbW92ZSBjaGVjayBpbiBnc3RfcGFkX3F1ZXJ5X2NvbnZlcnQoKSB0aGF0IHNyY192YWwgbXVzdCBiZSBwb3NpdGl2ZSwgYmVjYXVzZSB0aGF0J3Mgbm90IGEgcmVxdWlyZW1lbnQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHV0aWxzLmM6IFJlbW92ZSBjaGVjayBpbiBnc3RfcGFkX3F1ZXJ5X2NvbnZlcnQoKSB0aGF0CisJICBzcmNfdmFsIG11c3QgYmUgcG9zaXRpdmUsIGJlY2F1c2UgdGhhdCdzIG5vdCBhIHJlcXVpcmVtZW50LgorCSAgVGhpcyBjYXVzZXMgcHJvYmxlbXMgd2l0aCBjb252ZXJ0aW5nIG5lZ2F0aXZlIGdyYW51bGVwb3MKKwkgIHZhbHVlcyBmb3IgRGlyYWMuCisJICAqIGdzdC9nc3RxdWVyeS5jOiBTYW1lLCBnc3RfcXVlcnlfbmV3X2NvbnZlcnQoKS4KKworMjAwOC0wOC0yNyAwMjo1OTo1OSArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkgIGdzdC9nc3R1dGlscy5jOiBSZW1vdmUgY2hlY2sgaW4gZ3N0X3BhZF9xdWVyeV9jb252ZXJ0KCkgdGhhdCBzcmNfdmFsIG11c3QgYmUgcG9zaXRpdmUsIGJlY2F1c2UgdGhhdCdzIG5vdCBhIHJlcXVpcmVtZW50LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R1dGlscy5jOiBSZW1vdmUgY2hlY2sgaW4gZ3N0X3BhZF9xdWVyeV9jb252ZXJ0KCkgdGhhdAorCSAgc3JjX3ZhbCBtdXN0IGJlIHBvc2l0aXZlLCBiZWNhdXNlIHRoYXQncyBub3QgYSByZXF1aXJlbWVudC4KKwkgIFRoaXMgY2F1c2VzIHByb2JsZW1zIHdpdGggY29udmVydGluZyBuZWdhdGl2ZSBncmFudWxlcG9zCisJICB2YWx1ZXMgZm9yIERpcmFjLgorCisyMDA4LTA4LTI1IDExOjA2OjM0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0Y2xvY2suYzogQWRkIHNvbWUgbW9yZSBkZWJ1Z2dpbmcgdG8gdGhlIGNsb2NrIHNsYXZpbmcgY29kZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0Y2xvY2suYzogKGdzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb24pOgorCSAgQWRkIHNvbWUgbW9yZSBkZWJ1Z2dpbmcgdG8gdGhlIGNsb2NrIHNsYXZpbmcgY29kZS4KKwkgICogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgorCSAgQWRkIG5ldyBiYXNldHJhbnNmb3JtIG1ldGhvZC4KKworMjAwOC0wOC0yNSAxMTowMDoxMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJpbi5jOiBUYWtlIHRoZSAocmVjdXJzaXZlKSBzdGF0ZSBsb2NrIGJldHdlZW4gZ2V0dGluZyB0aGUgbG9ja2VkIHN0YXRlIG9mIGFuIGVsZW1lbnQgYW5kIGNoYW5naW5nIHRoZSBlbGVtZW50Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9lbGVtZW50X3NldF9zdGF0ZSk6CisJICBUYWtlIHRoZSAocmVjdXJzaXZlKSBzdGF0ZSBsb2NrIGJldHdlZW4gZ2V0dGluZyB0aGUgbG9ja2VkIHN0YXRlIG9mIGFuCisJICBlbGVtZW50IGFuZCBjaGFuZ2luZyB0aGUgZWxlbWVudCBzdGF0ZS4gVGhpcyBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uIHRvCisJICBsb2NrIGFuIGVsZW1lbnQncyBzdGF0ZSBhbmQgdGhlbiBjaGFuZ2UgaXRzIHN0YXRlIHdpdGhvdXQgcmFjZXMuCisKKzIwMDgtMDgtMjUgMTA6NTI6NDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RiaW4uYzogV2hlbiBhbiBlbGVtZW50IGlzIGluIHRoZSBsb2NrZWQgc3RhdGUgd2Ugc3RpbGwgd2FudCB0byB1cGRhdGUgdGhlIGJhc2VfdGltZSBvZiB0aGUgZWxlbWVudC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2VsZW1lbnRfc2V0X3N0YXRlKToKKwkgIFdoZW4gYW4gZWxlbWVudCBpcyBpbiB0aGUgbG9ja2VkIHN0YXRlIHdlIHN0aWxsIHdhbnQgdG8gdXBkYXRlIHRoZQorCSAgYmFzZV90aW1lIG9mIHRoZSBlbGVtZW50LgorCisyMDA4LTA4LTIxIDExOjE3OjA1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogVXNlIHRoZSByZXN1bHQgZnJvbSBnc3RfcGFkX3NldF9jYXBzKCkgaW5zdGVhZCBvZiBhc3N1bWluZyB0aGUgZWxlbWVudCBhbHdheXMgYWNjZXB0ZWQgdGguLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19kZWZhdWx0X25lZ290aWF0ZSk6CisJICBVc2UgdGhlIHJlc3VsdCBmcm9tIGdzdF9wYWRfc2V0X2NhcHMoKSBpbnN0ZWFkIG9mIGFzc3VtaW5nIHRoZSBlbGVtZW50CisJICBhbHdheXMgYWNjZXB0ZWQgdGhlIGNhcHMgY29tcHV0ZWQgYnkgdGhlIGRlZmF1bHQgbmVnb3RpYXRlIGZ1bmN0aW9uLgorCisyMDA4LTA4LTIwIDEwOjUyOjA5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBJbXBsZW1lbnQgbWV0aG9kIGZvciByZWNvbmZpZ3VyaW5nIGJhc2V0cmFuc2Zvcm0uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2hhbmRsZV9idWZmZXIpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldHJhbmdlKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fY2hhaW4pLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3N1Z2dlc3QpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9yZWNvbmZpZ3VyZSk6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgorCSAgSW1wbGVtZW50IG1ldGhvZCBmb3IgcmVjb25maWd1cmluZyBiYXNldHJhbnNmb3JtLgorCSAgQVBJOiBHc3RCYXNlVHJhbnNmb3JtOjpnc3RfYmFzZV90cmFuc2Zvcm1fcmVjb25maWd1cmUoKQorCisyMDA4LTA4LTIwIDA3OjIyOjExICswMDAwICBNdXJyYXkgQ3VtbWluZyA8bXVycmF5Y0BtdXJyYXljLmNvbT4KKworCSAgZ3N0L2dzdHV0aWxzLmM6IE1lbnRpb24gdGhhdCB0aGlzIGlzIGp1c3QgbGlrZSBnc3RfYnVmZmVyX21lcmdlKCkgYnV0IHdpdGggZXh0cmEgdW5yZWZmaW5nIGZvciBDIGNvZGVycy4gQWR2aXNlIGxhbmd1Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHBhdGNoIGJ5OiBNdXJyYXkgQ3VtbWluZyA8bXVycmF5Y0BtdXJyYXljLmNvbT4KKwkgICogZ3N0L2dzdHV0aWxzLmM6CisJICBNZW50aW9uIHRoYXQgdGhpcyBpcyBqdXN0IGxpa2UgZ3N0X2J1ZmZlcl9tZXJnZSgpIGJ1dCB3aXRoIGV4dHJhCisJICB1bnJlZmZpbmcgZm9yIEMgY29kZXJzLiBBZHZpc2UgbGFuZ3VhZ2UgYmluZGluZ3Mgbm90IHRvIHdyYXAgaXQuCisJICBGaXhlcyBCdWcgIzUzMzg1Ni4KKwkgIEFsc28gZml4IGZpbGUgY29tbWVudC4KKworMjAwOC0wOC0yMCAwNzowMzo0MCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBwbHVnaW5zL2VsZW1lbnRzLzogQ2FsbCBzdXBlcjo6ZXZlbnQoKSB3aGVuIG5vdCBoYW5kbGluZyBpdC4gRml4ZXMgIzU0NDg1NS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmV2aWV3ZWQgYnk6IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6CisJICBDYWxsIHN1cGVyOjpldmVudCgpIHdoZW4gbm90IGhhbmRsaW5nIGl0LiBGaXhlcyAjNTQ0ODU1LgorCisyMDA4LTA4LTE5IDE3OjIzOjE4ICswMDAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyb0BubnZhLm9yZz4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IFVzZSA2NCBiaXQgdmFyaWFudHMgb2Ygc3RhdCBmdW5jdGlvbnMgb24gd2luMzIsIHRvIGVuYWJsZSBzdXBwb3J0IG9mIGxhcmdlIGZpbGVzIHRoZXJlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm9Abm52YS5vcmc+CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgorCSAgVXNlIDY0IGJpdCB2YXJpYW50cyBvZiBzdGF0IGZ1bmN0aW9ucyBvbiB3aW4zMiwgdG8gZW5hYmxlIHN1cHBvcnQKKwkgIG9mIGxhcmdlIGZpbGVzIHRoZXJlLgorCSAgRml4ZXMgIzU0NzI3Ny4KKworMjAwOC0wOC0xOSAxNjo0NzowNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBJbXByb3ZlIHBvc2l0aW9uIHJlcG9ydGluZyBpbiB0aGUgZmx1c2hpbmcgc3RhdGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19yZW5kZXJfb2JqZWN0KSwKKwkgIChnc3RfYmFzZV9zaW5rX2V2ZW50KSwgKGdzdF9iYXNlX3NpbmtfY2hhaW5fdW5sb2NrZWQpLAorCSAgKGdzdF9iYXNlX3NpbmtfbmVnb3RpYXRlX3B1bGwpLCAoZ3N0X2Jhc2Vfc2lua19wYWRfYWN0aXZhdGVfcHVsbCksCisJICAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24pLCAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgorCSAgSW1wcm92ZSBwb3NpdGlvbiByZXBvcnRpbmcgaW4gdGhlIGZsdXNoaW5nIHN0YXRlLgorCSAgQWxzbyByZXBvcnQgdGhlIHBvc2l0aW9uIHdoZW4gd2UgYXJlIG5vdCB5ZXQgcHJlcm9sbGVkIGJ1dCB3ZQorCSAgaGF2ZSBhIG5ld3NlZ21lbnQgZXZlbnQuIEZpeGVzICM1NDM0NDQuCisJICBJbXByb3ZlIHRoZSBwdWxsLWJhc2VkIG5lZ290aWF0aW9uIGNvZGUuCisJICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzaW5rLmM6IChHU1RfU1RBUlRfVEVTVCksCisJICAoZmFrZXNpbmtfc3VpdGUpOgorCSAgQWRkIHRlc3RjYXNlIGZvciBwb3NpdGlvbiByZXBvcnRpbmcgd2hpbGUgZmx1c2hpbmcgaW4gUEFVU0VEIGFuZAorCSAgUExBWUlORy4KKwkgICogdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgVXBkYXRlIHVuaXQtdGVzdCwgd2UgY2FuIG5vdyBxdWVyeSB0aGUgcG9zaXRpb24gYXMgc29vbiBhcyB3ZSByZWNlaXZlIGEKKwkgIE5FV1NFR01FTlQgZXZlbnQuCisKKzIwMDgtMDgtMTkgMDg6NTI6MDUgKzAwMDAgIEphc29uIFpoYW8gPGUzNDIzY0Btb3Rvcm9sYS5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogV2hlbiB0aGUgc3ViY2xhc3MgZXZlbnQgaGFuZGxlciByZWxlYXNlcyB0aGUgUFJFUk9MTF9MT0NLLCB3ZSBjb3VsZCBiZSBpbiB0aGUgZmx1c2hpbmcgcy4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBCYXNlZCBvbiBwYXRjaCBieTogSmFzb24gWmhhbyA8ZTM0MjNjIGF0IG1vdG9yb2xhIGRvdCBjb20+CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfcmVuZGVyX29iamVjdCk6CisJICBXaGVuIHRoZSBzdWJjbGFzcyBldmVudCBoYW5kbGVyIHJlbGVhc2VzIHRoZSBQUkVST0xMX0xPQ0ssIHdlIGNvdWxkIGJlCisJICBpbiB0aGUgZmx1c2hpbmcgc3RhdGUgYW5kIHdlIGhhdmUgdG8gaWdub3JlIHRoZSBldmVudC4gRml4ZXMgIzU0ODM5NC4KKworMjAwOC0wOC0xOCAxMToyODowMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgdG9vbHMvZ3N0LWxhdW5jaC4xLmluOiBEb2N1bWVudCBHU1RfUkVHSVNUUllfVVBEQVRFIGVudmlyb25tZW50IHZhcmlhYmxlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKKwkgIERvY3VtZW50IEdTVF9SRUdJU1RSWV9VUERBVEUgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKKzIwMDgtMDgtMTggMDk6NTk6MTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBJZiB0aGUgZWxlbWVudCBpcyBjb25maWd1cmVkIGluIHBhc3N0aHJvdWdoIG1vZGUgYnV0IHRoZSBwcmVwYXJlX291dHB1dF9idWZmZXIgZ2F2ZS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9wcmVwYXJlX291dHB1dF9idWZmZXIpOgorCSAgSWYgdGhlIGVsZW1lbnQgaXMgY29uZmlndXJlZCBpbiBwYXNzdGhyb3VnaCBtb2RlIGJ1dCB0aGUKKwkgIHByZXBhcmVfb3V0cHV0X2J1ZmZlciBnYXZlIHVzIGEgbmV3IG91dHB1dCBidWZmZXIsIGRpc2NhcmQgdGhhdCBidWZmZXIKKwkgIGFuZCByZXVzZSB0aGUgaW5wdXQgYnVmZmVyLgorCisyMDA4LTA4LTE1IDE3OjAxOjA3ICswMDAwICBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMgPG9sZS5hbmRyZS5yYXZuYXNAdGFuZGJlcmcuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS4qOiBQcm90ZWN0IHBhZF9hbGxvYyB3aXRoIGEgbmV3IGxvY2sgc28gdGhhdCB3ZSBjYW4gYmUgc3VyZSB0aGF0IG5vdGhpbmcgaXMgcGVyZm9ybWluZyBhIHBhZF8uLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IE9sZSBBbmRyw6kgVmFkbGEgUmF2bsOlcyAgPG9sZS5hbmRyZS5yYXZuYXMgYXQgdGFuZGJlcmcgY29tPgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOiAoZ3N0X3RlZV9maW5hbGl6ZSksIChnc3RfdGVlX2luaXQpLAorCSAgKGdzdF90ZWVfcmVxdWVzdF9uZXdfcGFkKSwgKGdzdF90ZWVfcmVsZWFzZV9wYWQpLAorCSAgKGdzdF90ZWVfZmluZF9idWZmZXJfYWxsb2MpLCAoZ3N0X3RlZV9idWZmZXJfYWxsb2MpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5oOgorCSAgUHJvdGVjdCBwYWRfYWxsb2Mgd2l0aCBhIG5ldyBsb2NrIHNvIHRoYXQgd2UgY2FuIGJlIHN1cmUgdGhhdCBub3RoaW5nIGlzCisJICBwZXJmb3JtaW5nIGEgcGFkX2FsbG9jIHdoZW4gcmVtb3ZpbmcgdGhlIHBhZC4gRml4ZXMgIzU0NzgzNS4KKwkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvdGVlLmM6IChidWZmZXJfYWxsb2NfaGFybmVzc19zZXR1cCksCisJICAoYnVmZmVyX2FsbG9jX2hhcm5lc3NfdGVhcmRvd24pLCAoYXBwX3RocmVhZF9mdW5jKSwKKwkgIChmaW5hbF9zaW5rcGFkX2J1ZmZlcmFsbG9jKSwgKEdTVF9TVEFSVF9URVNUKSwgKHRlZV9zdWl0ZSk6CisJICBBZGRlZCB0ZXN0Y2FzZSBmb3Igc2h1dGRvd24gcmFjZS4KKworMjAwOC0wOC0xNCAyMDowNTozMyArMDAwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHBhZC5oOiBBZGQgZG9jCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBhZC5oOgorCSAgQWRkIGRvYworCisyMDA4LTA4LTE0IDE2OjM3OjI5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogR28gb3ZlciB0aGUgYnVmZmVyX2FsbG9jIGZ1bmN0aW9uIGFnYWluIGFuZCBtYWtlIHN1cmUgd2UgYWx3YXlzIGVuZCB1cCBhbGxvY2F0aW5nIGEuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fcHJlcGFyZV9vdXRwdXRfYnVmZmVyKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fYnVmZmVyX2FsbG9jKToKKwkgIEdvIG92ZXIgdGhlIGJ1ZmZlcl9hbGxvYyBmdW5jdGlvbiBhZ2FpbiBhbmQgbWFrZSBzdXJlIHdlIGFsd2F5cyBlbmQgdXAKKwkgIGFsbG9jYXRpbmcgYSBidWZmZXIuCisJICBBZGQgc29tZSBtb3JlIGRvY3MuCisJICBBdm9pZCBkb2luZyBwYWQgYWxsb2Mgd2hlbiB3ZSBoYXZlIGEgcGVuZGluZyBzdWdnZXN0aW9uIGJlY2F1c2Ugd2UKKwkgIGNhbm5vdCB5ZXQgZGVhbCB3aXRoIGNoYW5naW5nIGNhcHMgaW4gdGhhdCBjYXNlLiBGaXhlcyAjNTQ3NzI4CisKKzIwMDgtMDgtMTQgMTQ6MjY6MjAgKzAwMDAgIEx1YyBQaW9uY2hvbiA8bHVjLnBpb25jaG9uQG5va2lhLmNvbT4KKworCSAgZG9jcy9tYW51YWwvOiBBZGQgb25lIG1vcmUgaW1hZ2Ugc2hvd2luZyBkaWZmZXJlbnQgdGltZXMgdG9nZXRoZXIgd2l0aCBhIGRlc2NyaWJpbmcgcGFyYWdyYXBoLiBGaXhlcyAjNTQ3NzI5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBwYXRjaCBieTogTHVjIFBpb25jaG9uIDxsdWMucGlvbmNob25Abm9raWEuY29tPgorCSAgKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1jbG9ja3MueG1sOgorCSAgKiBkb2NzL21hbnVhbC9jbG9ja3MucG5nOgorCSAgKiBkb2NzL21hbnVhbC9kaWFncmFtcy1jbG9ja3Muc3ZnOgorCSAgQWRkIG9uZSBtb3JlIGltYWdlIHNob3dpbmcgZGlmZmVyZW50IHRpbWVzIHRvZ2V0aGVyIHdpdGggYSBkZXNjcmliaW5nCisJICBwYXJhZ3JhcGguIEZpeGVzICM1NDc3MjkuCisKKzIwMDgtMDgtMTQgMTQ6MDQ6NTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjogQWRkIG5ldyBtZXRob2QuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgorCSAgQWRkIG5ldyBtZXRob2QuCisKKzIwMDgtMDgtMTQgMTM6NTc6NTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBEb24ndCBvdmVyd3JpdGUgdGhlIG91dHNpemUgd2hlbiBjYWxjdWxhdGluZyB0aGUgZXhwZWN0ZWQgc2l6ZSBvZiBhIG5ldyBidWZmZXIgYmVjYS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV90cmFuc2Zvcm1fY2FwcyksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3ByZXBhcmVfb3V0cHV0X2J1ZmZlciksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2J1ZmZlcl9hbGxvYyksIChnc3RfYmFzZV90cmFuc2Zvcm1fc3VnZ2VzdCk6CisJICBEb24ndCBvdmVyd3JpdGUgdGhlIG91dHNpemUgd2hlbiBjYWxjdWxhdGluZyB0aGUgZXhwZWN0ZWQgc2l6ZSBvZiBhIG5ldworCSAgYnVmZmVyIGJlY2F1c2Ugd2Ugc3RpbGwgbmVlZCBpdCBpbiBjYXNlIHdlIGNhbm5vdCBwcm9jZXNzIHRoZSBuZXcKKwkgIGJ1ZmZlci4KKwkgIFdoZW4gY29udmVydGluZyB0aGUgc2l6ZSBvZiB0aGUgbmV3IGJ1ZmZlciB0byBhbiB1cHN0cmVhbSBzaXplLCBhY3R1YWxseQorCSAgdXNlIHRoZSBleHBlY3RlZCBzaXplIG9mIHRoZSBidWZmZXIsIG5vdCBzb21lIG90aGVyIHJhbmRvbSB2YWx1ZS4KKwkgIFVzZSBhbiBhdG9taWMgaW50IHRvIHNpZ25hbCB0aGF0IGEgbmV3IHVwc3RyZWFtIGNhcHMgc3VnZ2VzdGlvbiBpcworCSAgYXZhaWxhYmxlLgorCSAgV2hlbiB3ZSBjYW4gY29udmVydCB0aGUgY3VycmVudCBidWZmZXIgdG8gYSBuZXcgZm9ybWF0LCBjaGVjayBpZiB0aGUKKwkgIGJ1ZmZlciBzaXplIGlzIG9mIHRoZSBleHBlY3RlZCBzaXplIGFuZCBhbGxvY2F0ZSBhIG5ldyBidWZmZXIgb2YgdGhlCisJICBleHBlY3RlZCBzaXplIHdoZW4gdGhpcyBpcyBub3QgdGhlIGNhc2UuCisJICAqIHRlc3RzL2NoZWNrL2xpYnMvdHJhbnNmb3JtMS5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgcmVtb3ZlIGlmZGVmZmVkIGNvZGUgZnJvbSB0aGUgdW5pdCB0ZXN0LgorCisyMDA4LTA4LTEyIDE4OjQ4OjQyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIHBrZ2NvbmZpZy86IFJlbW92ZSAtbGdzdGNvbnRyb2wtMC4xMCB3aGljaCBuZXZlciB3b3JrZWQgYW55d2F5IGFzIHRoZSBsaWIgaXMgY2FsbGVkIGdzdGNvbnRyb2xsZXItMC4xMC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwa2djb25maWcvZ3N0cmVhbWVyLXVuaW5zdGFsbGVkLnBjLmluOgorCSAgKiBwa2djb25maWcvZ3N0cmVhbWVyLnBjLmluOgorCSAgUmVtb3ZlIC1sZ3N0Y29udHJvbC0wLjEwIHdoaWNoIG5ldmVyIHdvcmtlZCBhbnl3YXkgYXMgdGhlIGxpYiBpcworCSAgY2FsbGVkIGdzdGNvbnRyb2xsZXItMC4xMC4KKworMjAwOC0wOC0xMiAwNjoyNzozNSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvOiBSZW1vdmUgZG91YmxlIGludGVyZmFjZSBmcm9tIGRvYy1zdHJpbmcuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGNoaWxkcHJveHkuaDoKKwkgICogZ3N0L2dzdHByZXNldC5oOgorCSAgUmVtb3ZlIGRvdWJsZSBpbnRlcmZhY2UgZnJvbSBkb2Mtc3RyaW5nLgorCisyMDA4LTA4LTEyIDA2OjE2OjAyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvOiBGaXggaGVhZGluZ3MgaW4gZG9jcyBhbmQgZ3RrLWRvYyB3YXJuaW5ncy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBGaXggaGVhZGluZ3MgaW4gZG9jcyBhbmQgZ3RrLWRvYyB3YXJuaW5ncy4KKworMjAwOC0wOC0xMSAxOTowNDowNCArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgorCisJICBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogRG9uJ3QgdXNlIGdfbWtzdG1wKCkgb24gd2luMzIsIGl0J3MgdW5zYWZlIGlmIGdsaWIgaXMgdXNpbmcgYSBkaWZmZXJlbnQgbGliYy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKKwkgIERvbid0IHVzZSBnX21rc3RtcCgpIG9uIHdpbjMyLCBpdCdzIHVuc2FmZSBpZiBnbGliIGlzIHVzaW5nIGEgZGlmZmVyZW50CisJICBsaWJjLgorCSAgRml4ZXMgIzU0NDc3Ni4KKworMjAwOC0wOC0xMSAxNToxNDoyOCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IEZpeCBhICJtYXkgYmUgdXNlZCB1bml0aWFsaXplZCIgd2FybmluZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fYnVmZmVyX2FsbG9jKToKKwkgIEZpeCBhICJtYXkgYmUgdXNlZCB1bml0aWFsaXplZCIgd2FybmluZy4KKworMjAwOC0wOC0xMSAwODowNjoyMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBEb2N1bWVudCBwcmVzZXQtaWZhY2Ugdm1ldGhvZHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdHByZXNldC5oOgorCSAgRG9jdW1lbnQgcHJlc2V0LWlmYWNlIHZtZXRob2RzLgorCisyMDA4LTA4LTExIDA3OjA3OjQ1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvbWFudWFsL2FkdmFuY2VkLWludGVyZmFjZXMueG1sOiBUdXJuIHRob3VnaHRzIGFib3V0IEhBTCBpbnRvIGEgbm90ZS10YWcuIFJlbW92ZSBtZW50aW9uaW5nIHRoYXQgaXMgb25seSB1c2VkIHRvIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWludGVyZmFjZXMueG1sOgorCSAgVHVybiB0aG91Z2h0cyBhYm91dCBIQUwgaW50byBhIG5vdGUtdGFnLiBSZW1vdmUgbWVudGlvbmluZyB0aGF0IGlzCisJICBvbmx5IHVzZWQgdG8gZGlzY292ZXIgZGV2aWNlcy4KKworMjAwOC0wOC0wNyAxNTo0OTowMCArMDAwMCAgRnJlZGVyaWMgQ3JvemF0IDxmY3JvemF0QG1hbmRyaXZhLm9yZz4KKworCSAgZ3N0L2dzdC5jOiBNYWtlIHN1cmUgZ2V0dGV4dCByZXR1cm5zIHRyYW5zbGF0aW9ucyBpbiBVVEYtOCBlbmNvZGluZyByYXRoZXIgdGhhbiBpbiB0aGUgY3VycmVudCBsb2NhbGUgZW5jb2RpbmcgKCM1NDY4Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBGcmVkZXJpYyBDcm96YXQgPGZjcm96YXRAbWFuZHJpdmEub3JnPgorCSAgKiBnc3QvZ3N0LmM6IChpbml0X3ByZSk6CisJICBNYWtlIHN1cmUgZ2V0dGV4dCByZXR1cm5zIHRyYW5zbGF0aW9ucyBpbiBVVEYtOCBlbmNvZGluZyByYXRoZXIKKwkgIHRoYW4gaW4gdGhlIGN1cnJlbnQgbG9jYWxlIGVuY29kaW5nICgjNTQ2ODIyKS4KKworMjAwOC0wOC0wNyAxMjoyODoyOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGNhcHMuYzogRml4IHN1YnNldCB0ZXN0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RjYXBzLmM6IChnc3RfY2Fwc19zdHJ1Y3R1cmVfaXNfc3Vic2V0X2ZpZWxkKToKKwkgIEZpeCBzdWJzZXQgdGVzdC4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgIEltcHJvdmUgdW5pdCB0ZXN0IHN1YnNldCB0ZXN0cyBhbmQgYWRkIGEgdGVzdGNhc2UgZm9yIHRoZSBzdWJzZXQgZmFpbHVyZQorCSAgY2FzZXMuCisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3ZhbHVlX3N1aXRlKToKKwkgIEltcHJvdmUgc3VidHJhY3Rpb24gdW5pdCB0ZXN0LgorCisyMDA4LTA4LTA3IDA3OjAxOjE1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6IFVubG9jaywgaW5zdGVhZCBvZiBsb2NraW5nIGFnYWluLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6CisJICBVbmxvY2ssIGluc3RlYWQgb2YgbG9ja2luZyBhZ2Fpbi4KKworMjAwOC0wOC0wNSAxNjo1MDoyNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHBhZC5oOiBDbGFyaWZ5IHRoZSBkb2NzIGEgYml0IG1vcmUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBhZC5oOgorCSAgQ2xhcmlmeSB0aGUgZG9jcyBhIGJpdCBtb3JlLgorCisyMDA4LTA4LTA1IDE1OjQyOjAwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIHRlc3RzL2V4YW1wbGVzL21ldGFkYXRhL3JlYWQtbWV0YWRhdGEuYzogRG9uJ3QgbGVhayBvbGQgdGFnbGlzdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9leGFtcGxlcy9tZXRhZGF0YS9yZWFkLW1ldGFkYXRhLmM6CisJICBEb24ndCBsZWFrIG9sZCB0YWdsaXN0LgorCisyMDA4LTA4LTA1IDE1OjAzOjI3ICswMDAwICBPbGl2aWVyIENyZXRlIDx0ZXN0ZXJAdGVzdGVyLmNhPgorCisJICBnc3QvZ3N0c3RydWN0dXJlLmM6IEF2b2lkIG92ZXJmbG93cyBpbiBmaXhhdGlvbiBjb2RlIHdoZW4gZGVhbGluZyB3aXRoIE1BWElOVCB2YWx1ZXMsIHdoaWNoIHY0bDJzcmMgc2VlbXMgdG8gZG8uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBPbGl2aWVyIENyZXRlIDx0ZXN0ZXIgYXQgdGVzdGVyIGRvdCBjYT4KKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSAgKGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfZnJhY3Rpb24pOgorCSAgQXZvaWQgb3ZlcmZsb3dzIGluIGZpeGF0aW9uIGNvZGUgd2hlbiBkZWFsaW5nIHdpdGggTUFYSU5UIHZhbHVlcywgd2hpY2gKKwkgIHY0bDJzcmMgc2VlbXMgdG8gZG8uCisJICBGaXhlcyAjNTQ2MzI4LgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBNYWtlIGEgdW5pdCB0ZXN0IHRvIGNoZWNrIHRoZSBmaXguCisKKzIwMDgtMDgtMDUgMTE6MTI6MjkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOiBVc2UgbmV3IGNhcHMgc3VnZ2VzdGlvbiBmZWF0dXJlIG9mIGJhc2V0cmFuc2Zvcm0gdG8gcmVxdWVzdCBhIGNhcHMgbmVnb3RpYXRpb24gdXBzdC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOiAoY29weV9mdW5jKSwKKwkgIChnc3RfY2Fwc2ZpbHRlcl9zZXRfcHJvcGVydHkpOgorCSAgVXNlIG5ldyBjYXBzIHN1Z2dlc3Rpb24gZmVhdHVyZSBvZiBiYXNldHJhbnNmb3JtIHRvIHJlcXVlc3QgYSBjYXBzCisJICBuZWdvdGlhdGlvbiB1cHN0cmVhbS4KKworMjAwOC0wOC0wNSAxMToxMTowMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDogQWRkIG5ldyBmdW5jdGlvbjoKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSAgQWRkIG5ldyBmdW5jdGlvbjoKKwkgIEFQSTogR3N0QmFzZVRyYW5zZm9ybTo6Z3N0X2Jhc2VfdHJhbnNmb3JtX3N1Z2dlc3QoKQorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV9maW5hbGl6ZSksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2luaXQpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3RyYW5zZm9ybV9jYXBzKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fdHJhbnNmb3JtX3NpemUpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9jb25maWd1cmVfY2FwcyksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2Nhbl90cmFuc2Zvcm0pLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9maW5kX3RyYW5zZm9ybSksIChnc3RfYmFzZV90cmFuc2Zvcm1fc2V0Y2FwcyksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3ByZXBhcmVfb3V0cHV0X2J1ZmZlciksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2J1ZmZlcl9hbGxvYyksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2hhbmRsZV9idWZmZXIpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldHJhbmdlKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fY2hhaW4pLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2FjdGl2YXRlKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Bhc3N0aHJvdWdoKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1faXNfcGFzc3Rocm91Z2gpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfaW5fcGxhY2UpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9pc19pbl9wbGFjZSksIChnc3RfYmFzZV90cmFuc2Zvcm1fdXBkYXRlX3FvcyksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9xb3NfZW5hYmxlZCksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Fvc19lbmFibGVkKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2dhcF9hd2FyZSksIChnc3RfYmFzZV90cmFuc2Zvcm1fc3VnZ2VzdCksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3JlY29uZmlndXJlKToKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6CisJICBSZXdyaXRlIG9mIGJhc2V0cmFuc2Zvcm0gdG8gcGVyZm9ybSBuZWdvdGlhdGlvbiBvdXRzaWRlIG9mIHRoZQorCSAgYnVmZmVyX2FsbG9jIGZ1bmN0aW9ucy4gIEZpeGVzICM1NDU4NTMuCisJICAqIHRlc3RzL2NoZWNrL2xpYnMvdHJhbnNmb3JtMS5jOiAoR1NUX1NUQVJUX1RFU1QpLAorCSAgKGJ1ZmZlcl9hbGxvY19jdDIpOgorCSAgVXBkYXRlIHVuaXQgdGVzdC4KKworMjAwOC0wOC0wNSAwNTo0NDowMiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICB0ZXN0cy9jaGVjay9nc3QvZ3N0cHJlc2V0LmM6IE9ubHkgcnVuIHByZXNldCB0ZXN0cyB3aGVuICRIT01FIGlzIHdyaXRhYmxlLiBQcmVsaW1pbmFyeSBmaXggZm9yICM1NDU0MzMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHByZXNldC5jOgorCSAgT25seSBydW4gcHJlc2V0IHRlc3RzIHdoZW4gJEhPTUUgaXMgd3JpdGFibGUuIFByZWxpbWluYXJ5IGZpeCBmb3IKKwkgICM1NDU0MzMuCisKKzIwMDgtMDgtMDQgMTU6NDk6MTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RiaW4uYzogRml4IHJhY2UgZm9yIGJpbnMgdGhhdCBzaW11bGF0ZSBBU1lOQyBzdGF0ZSBjaGFuZ2VzIGJ5IGluc2VydGluZworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fYWRkX2Z1bmMpLCAoZ3N0X2Jpbl9yZW1vdmVfZnVuYyksCisJICAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGVfZnVuYyksIChiaW5faGFuZGxlX2FzeW5jX2RvbmUpLAorCSAgKGdzdF9iaW5faGFuZGxlX21lc3NhZ2VfZnVuYyk6CisJICBGaXggcmFjZSBmb3IgYmlucyB0aGF0IHNpbXVsYXRlIEFTWU5DIHN0YXRlIGNoYW5nZXMgYnkgaW5zZXJ0aW5nCisJICBBU1lOQ19TVEFSVCBhbmQgQVNZTkNfRE9ORSBtZXNzYWdlcyBpbiB0aGVpciBidXMuIFdlIG5lZWQgdG8gY2hlY2sgZm9yCisJICBwZW5kaW5nIEFTWU5DIG1lc3NhZ2VzIGV2ZW4gd2hlbiB0aGUgYmluIGRvZXMgbm90IGhhdmUgQVNZTkMgY2hpbGRyZW4uCisJICBXZSBub3RlIGRldGVjdCB0aGlzIGJlaGF2aW91ciBiZWNhdXNlIHdlIHdpbGwgcmVjZWl2ZSBhbiBBU1lOQyBtZXNzYWdlCisJICB0aGF0IGlzIG9yaWdpbmF0aW5nIGZyb20gdGhlIGJpbiBpdHNlbGYuCisJICBGaXhlcyByYWNlcyB3aXRoIGRlY29kZWJpbjIgc3RhdGUgY2hhbmdlcy4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgQWRkIHNvbWUgbW9yZSBkZWJ1Zy4KKworMjAwOC0wOC0wNCAxMzowMTozNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdHRhZ2xpc3QuYzogRml4IHR5cG8uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHRhZ2xpc3QuYzogKF9nc3RfdGFnX2luaXRpYWxpemUpOgorCSAgRml4IHR5cG8uCisKKzIwMDgtMDgtMDQgMTI6NDY6MjMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdHRhZ2xpc3QuYzogQXJnaC4gYWN0dWFsbHkgc2F2ZSB0aGUgdGV4dCBiZWZvcmUgY29tbWl0dGluZy4gTm93IGFkZHMgZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEoKSB0byBnc3RfLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHRhZ2xpc3QuYzoKKwkgIEFyZ2guIGFjdHVhbGx5IHNhdmUgdGhlIHRleHQgYmVmb3JlIGNvbW1pdHRpbmcuIE5vdyBhZGRzCisJICBnc3RfdGFnX21lcmdlX3N0cmluZ3Nfd2l0aF9jb21tYSgpIHRvIGdzdF90YWdfcmVnaXN0ZXIoKS4KKworMjAwOC0wOC0wNCAxMjozMDoyNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0dGFnbGlzdC4qOiBEbyBhcyB0aW0gcG9pbnRlZCBvdXQgYW5kIGFjdHVhbGx5IHJlZ2lzdGVyIHRoZSBuZXcgdGFnLiBBbHNvIGltcHJvdmUgdGUgZG9jcyBhbmQgdXNlIGdzdF90YWdfbWVyZ2UuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSAgKiBnc3QvZ3N0dGFnbGlzdC5oOgorCSAgRG8gYXMgdGltIHBvaW50ZWQgb3V0IGFuZCBhY3R1YWxseSByZWdpc3RlciB0aGUgbmV3IHRhZy4gQWxzbyBpbXByb3ZlCisJICB0ZSBkb2NzIGFuZCB1c2UgZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEoKSBtZXRob2QgdG8gYWxsb3cKKwkgIHJldHJpdmluZyBhbGwga2V5d29yZHMgbWVyZ2VkIGluIG9uZSBsaXN0LgorCisyMDA4LTA4LTAxIDExOjU3OjQwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIFJldmVydCAnYWNjaWRlbnRpYWwnIGNoYW5nZSBvZiB0aGUgY29uZmlndXJlIG9wdGlvbiByZW1vdmFsLiBXZSBzdGlsbCBuZWVkIHRvIGdlbmVyYXRlIHRoZSB0eXBlcyBmaWxlIGluIGNvbmZpZ3VyZSAtLS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzOgorCSAgUmV2ZXJ0ICdhY2NpZGVudGlhbCcgY2hhbmdlIG9mIHRoZSBjb25maWd1cmUgb3B0aW9uIHJlbW92YWwuIFdlIHN0aWxsCisJICBuZWVkIHRvIGdlbmVyYXRlIHRoZSB0eXBlcyBmaWxlIGluIGNvbmZpZ3VyZSAtLWRpc2FibGUtbG9hZC1zYXZlLgorCisyMDA4LTA4LTAxIDExOjM0OjA2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIEFkZCBuZXcgdGFnbGlzdCBpdGVtIEdTVF9UQUdfS0VZV09SRFMsIG5lZWRlZCBmb3IgIzUyMDY5NCAuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdHRhZ2xpc3QuaDoKKwkgIEFkZCBuZXcgdGFnbGlzdCBpdGVtIEdTVF9UQUdfS0VZV09SRFMsIG5lZWRlZCBmb3IgIzUyMDY5NCAuCisKKzIwMDgtMDgtMDEgMTA6MDI6NDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOiBBZGQgIm5hbWUtdGVtcGxhdGUiLCAiZGlyZWN0aW9uIiwgInByZXNlbmNlIiBhbmQgImNhcHMiIHByb3BlcnRpZXMsIHNvIHRoYXQgZ3N0X3BhZF90ZW1wbGF0ZV9uZS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOgorCSAgKGdzdF9wYWRfdGVtcGxhdGVfY2xhc3NfaW5pdCksIChnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQpLAorCSAgKGdzdF9wYWRfdGVtcGxhdGVfbmV3KSwgKGdzdF9wYWRfdGVtcGxhdGVfcGFkX2NyZWF0ZWQpLAorCSAgKGdzdF9wYWRfdGVtcGxhdGVfc2V0X3Byb3BlcnR5KSwgKGdzdF9wYWRfdGVtcGxhdGVfZ2V0X3Byb3BlcnR5KToKKwkgIEFkZCAibmFtZS10ZW1wbGF0ZSIsICJkaXJlY3Rpb24iLCAicHJlc2VuY2UiIGFuZCAiY2FwcyIgcHJvcGVydGllcywKKwkgIHNvIHRoYXQgZ3N0X3BhZF90ZW1wbGF0ZV9uZXcoKSBpcyBqdXN0IGEgdGhpbiB3cmFwcGVyIGFyb3VuZAorCSAgZ19vYmplY3RfbmV3KCksIHdoaWNoIGlzIGJldHRlciBmb3IgYmluZGluZ3MuIChGaXhlczogIzUzOTc3MikKKworMjAwOC0wNy0zMSAxNzoxNjo1MCArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgorCisJICBnc3QvZ3N0dXJpLmM6IEJlIG1vcmUgbGliZXJhbCBpbiB3aGF0IFVSSXMgd2UgYWNjZXB0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R1cmkuYzoKKwkgIEJlIG1vcmUgbGliZXJhbCBpbiB3aGF0IFVSSXMgd2UgYWNjZXB0LgorCSAgRG8gbm90IHVuZXNjYXBlIGJpdHMgb2YgdGhlIFVSSSBmb3Igbm8gYXBwYXJlbnQgcmVhc29uIGJlZm9yZSBwYXNzaW5nIHRvCisJICB0aGUgZWxlbWVudC4gRml4ZXMgIzU0NTM1Mi4KKworMjAwOC0wNy0zMSAxNToyNDoyMSArMDAwMCAgUm9iZXJ0IFNjaHdlYmVsIDxyLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlPgorCisJICBnc3QvZ3N0LmM6IEluY2x1ZGUgZ3N0Y29uZmlnLmggYXMgbWFjcm9zIGZyb20gaXQgYXJlIHVzZWQuIEZpeGVzIGJ1ZyAjNTQ1NjA3LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogUm9iZXJ0IFNjaHdlYmVsIDxyLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlPgorCSAgKiBnc3QvZ3N0LmM6CisJICBJbmNsdWRlIGdzdGNvbmZpZy5oIGFzIG1hY3JvcyBmcm9tIGl0IGFyZSB1c2VkLiBGaXhlcyBidWcgIzU0NTYwNy4KKworMjAwOC0wNy0zMSAxNToyMDozMiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBSZW1vdmUgR1NUX0RJU0FCTEVfKEVOVU1UWVBFU3xJTkRFWHxVUkkpIGV2ZXJ5d2hlcmUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlcy5pbjoKKwkgICogZ3N0L01ha2VmaWxlLmFtOgorCSAgKiBnc3QvZ3N0LmM6CisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fY2xhc3NfaW5pdCksIChnc3RfYmluX3NldF9pbmRleF9mdW5jKToKKwkgICogZ3N0L2dzdGNvbmZpZy5oLmluOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfZ2V0X2luZGV4KToKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IChnc3RfcmVnaXN0cnlfYmluYXJ5X3NhdmVfZmVhdHVyZSksCisJICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9sb2FkX2ZlYXR1cmUpLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfcmVhZF9jYWNoZSk6CisJICAqIGdzdC9nc3RyZWdpc3RyeXhtbC5jOiAobG9hZF9mZWF0dXJlKSwKKwkgIChnc3RfcmVnaXN0cnlfeG1sX3JlYWRfY2FjaGUpLCAoZ3N0X3JlZ2lzdHJ5X3htbF9zYXZlX2ZlYXR1cmUpOgorCSAgKiBwbHVnaW5zL01ha2VmaWxlLmFtOgorCSAgKiB0b29scy9nc3QtaW5kZW50OgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAocHJpbnRfaW5kZXhfaW5mbyksIChwcmludF9lbGVtZW50X2xpc3QpLAorCSAgKHByaW50X3BsdWdpbl9mZWF0dXJlcyksIChwcmludF9lbGVtZW50X2ZlYXR1cmVzKToKKwkgICogdG9vbHMvZ3N0LXhtbGluc3BlY3QuYzogKHByaW50X2V2ZW50X21hc2tzKSwKKwkgIChwcmludF9lbGVtZW50X2luZm8pOgorCSAgKiB3aW4zMi9jb21tb24vZ3N0Y29uZmlnLmg6CisJICBSZW1vdmUgR1NUX0RJU0FCTEVfKEVOVU1UWVBFU3xJTkRFWHxVUkkpIGV2ZXJ5d2hlcmUuCisJICBEaXNhYmxpbmcgdGhlIGluZGV4ZXJzIGFuZCBVUkkgaGFuZGxlciBjb2RlIHdpbGwgb25seSByZWR1Y2UgdGhlCisJICByZXF1aXJlZCBhbW91bnQgb2YgbWVtb3J5IGJ5IGEgdmVyeSBzbWFsbCBhbW91bnQgYnV0IG9uIHRoZSBvdGhlciBoYW5kCisJICByZXF1aXJlcyBtdWNoIG1vcmUgbWFpbnRhaW5jZSB3b3JrLiBBcGFydCBmcm9tIHRoYXQgbWFueSBwbGFjZXMgb2YKKwkgIGNvZGUgYXJlIGJyb2tlbiB3aGVuIGRpc2FibGluZyB0aGVtLgorCSAgRGlzYWJsaW5nIHRoZSBlbnVtIHR5cGVzIGRvZXNuJ3QgcmVkdWNlIHRoZSByZXF1aXJlZCBhbW91bnQgb2YgbWVtb3J5CisJICBieSBtb3JlIHRoYW4gYSBmZXcgYnl0ZXMgYW5kIG1ha2VzIGl0IGhhcmQgdG8gZml4IGJ1Z3MgbGlrZSAjNTM5NzcyLAorCSAgaS5lLiB1c2UgdGhlIGVudW1zIGFzIEdPYmplY3QgcHJvcGVydGllcy4KKworMjAwOC0wNy0zMSAxMzowNjo1NiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDogQWRkIHNvbWUgdGhvdWdodHMgYW5kIHByb2JsZW1zIHdpdGggdXBzdHJlYW0gcmVuZWdvdGlhdGlvbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgorCSAgQWRkIHNvbWUgdGhvdWdodHMgYW5kIHByb2JsZW1zIHdpdGggdXBzdHJlYW0gcmVuZWdvdGlhdGlvbi4KKworMjAwOC0wNy0zMSAxMjo1MDo1MiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHBhZC5jOiBSZW1vdmUgc2lsbHkgcmVkdW5kYW50IGRlYnVnLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfYWNjZXB0Y2Fwc19kZWZhdWx0KSwKKwkgIChnc3RfcGFkX2NvbmZpZ3VyZV9zcmMpLCAoZ3N0X3BhZF9hbGxvY19idWZmZXJfZnVsbCk6CisJICBSZW1vdmUgc2lsbHkgcmVkdW5kYW50IGRlYnVnLgorCSAgQWRkIHNvbWUgbW9yZSBkZWJ1ZyBpbmZvLgorCSAgQ2xhcmlmeSB0aGUgZG9jcyByZWdhcmRpbmcgbmV3IGNhcHMgcmVjZWl2ZWQgZnJvbSBwYWRfYWxsb2MuCisKKzIwMDgtMDctMzEgMDk6NTU6MTQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOiBNYWtlIHNldHRpbmcgdGhlIGNhcHMgbW9yZSB0aHJlYWRzYWZlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOiAoZ3N0X2NhcHNmaWx0ZXJfc2V0X3Byb3BlcnR5KSwKKwkgIChnc3RfY2Fwc2ZpbHRlcl9nZXRfcHJvcGVydHkpLCAoZ3N0X2NhcHNmaWx0ZXJfdHJhbnNmb3JtX2NhcHMpOgorCSAgTWFrZSBzZXR0aW5nIHRoZSBjYXBzIG1vcmUgdGhyZWFkc2FmZS4KKworMjAwOC0wNy0zMSAwODozOToxNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1lbGVtZW50LXRyYW5zZm9ybS50eHQ6IFVwZGF0ZSBkb2NzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtZWxlbWVudC10cmFuc2Zvcm0udHh0OgorCSAgVXBkYXRlIGRvY3MuCisKKzIwMDgtMDctMzEgMDg6Mzc6MDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogQWRkIGFuZCB1c2UgYSBjdXN0b20gYWNjZXB0Y2FwcyBmdW5jdGlvbiBpbnN0ZWFkIG9mIGZhbGxpbmcgYmFjayB0byB0aGUgcG90ZW50aWFsbHkgbGVzcy4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9pbml0KSwKKwkgIChnc3RfcXVldWVfYWNjZXB0Y2Fwcyk6CisJICBBZGQgYW5kIHVzZSBhIGN1c3RvbSBhY2NlcHRjYXBzIGZ1bmN0aW9uIGluc3RlYWQgb2YgZmFsbGluZyBiYWNrIHRvIHRoZQorCSAgcG90ZW50aWFsbHkgbGVzcyBvcHRpbWl6ZWQgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KKworMjAwOC0wNy0yOSAxNTozMjoxMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdHBhZC5jOiBPbmx5IHNhbml0eS1jaGVjayB0aGUgYnVmZmVyIHNpemUgaWYgcmVxdWVzdGVkX2NhcHMgPT0gYnVmZmVyX2NhcHMgKGllLiBkb24ndCB0YWtlIHBhZCBjYXBzIGludG8gYWNjb3VuLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9hbGxvY19idWZmZXJfZnVsbCk6CisJICBPbmx5IHNhbml0eS1jaGVjayB0aGUgYnVmZmVyIHNpemUgaWYgcmVxdWVzdGVkX2NhcHMgPT0gYnVmZmVyX2NhcHMKKwkgIChpZS4gZG9uJ3QgdGFrZSBwYWQgY2FwcyBpbnRvIGFjY291bnQsIHRoZXkncmUgbm90IHJlbGV2YW50IGhlcmUpCisKKzIwMDgtMDctMjkgMTQ6MzI6NTEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuKjogUmV2ZXJ0aW5nIGFzIG5vdCBldmVyeXRoaW5nIGlzIGNsZWFyIHlldC4gTmVlZHMgc29tZSBnZW5lcmFsIGRlc2lnbiB3b3JrLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmg6CisJICBSZXZlcnRpbmcgYXMgbm90IGV2ZXJ5dGhpbmcgaXMgY2xlYXIgeWV0LiBOZWVkcyBzb21lIGdlbmVyYWwgZGVzaWduCisJICB3b3JrLgorCisyMDA4LTA3LTI5IDEzOjM2OjM5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIENoYW5nZUxvZzogQ2hhbmdlTG9nIHN1cmdlcnkgZm9yIHRlZSBjb21taXQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogQ2hhbmdlTG9nOgorCSAgQ2hhbmdlTG9nIHN1cmdlcnkgZm9yIHRlZSBjb21taXQuCisKKzIwMDgtMDctMjkgMTM6MzA6MDIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogQ2xlYW51cCBzZWN0aW9uLWZpbGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgIENsZWFudXAgc2VjdGlvbi1maWxlLgorCisyMDA4LTA3LTI5IDExOjU3OjExICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLio6IFJlbGF5IHRhZyBldmVudHMgaW4gdGVlLiBGaXhlcyBwYXJ0cyBvZiAjNDc0MDE2LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmg6CisJICBSZWxheSB0YWcgZXZlbnRzIGluIHRlZS4gRml4ZXMgcGFydHMgb2YgIzQ3NDAxNi4KKworMjAwOC0wNy0yOSAwMDo0NToyOSArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgorCisJICBCdWlsZCB0aGUgbmV0IGxpYnJhcnkgaWYgd2UgaGF2ZSB3aW5zb2NrMi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICAqIGxpYnMvZ3N0L01ha2VmaWxlLmFtOgorCSAgQnVpbGQgdGhlIG5ldCBsaWJyYXJ5IGlmIHdlIGhhdmUgd2luc29jazIuCisKKzIwMDgtMDctMjYgMTI6MDA6MzYgKzAwMDAgIEx1YyBQaW9uY2hvbiA8bHVjLnBpb25jaG9uQG5va2lhLmNvbT4KKworCSAgZG9jcy9tYW51YWwvOiBSZXBsYWNlIG9uZSBkaWFncmFtIHdpdGggdHdvIHNlcGFyYXRlIG9uZXMgYW5kIHVwZGF0ZXMgb3RoZXJzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBwYXRjaCBieTogTHVjIFBpb25jaG9uIDxsdWMucGlvbmNob25Abm9raWEuY29tPgorCSAgKiBkb2NzL21hbnVhbC9hZHZhbmNlZC10aHJlYWRzLnhtbDoKKwkgICogZG9jcy9tYW51YWwvZGlhZ3JhbXMtcGlwZWxpbmVzLnN2ZzoKKwkgICogZG9jcy9tYW51YWwvaGVsbG8td29ybGQucG5nOgorCSAgKiBkb2NzL21hbnVhbC9saW5rZWQtZWxlbWVudHMucG5nOgorCSAgKiBkb2NzL21hbnVhbC9taW1lLXdvcmxkLnBuZzoKKwkgICogZG9jcy9tYW51YWwvcXVldWUucG5nOgorCSAgKiBkb2NzL21hbnVhbC90aHJlYWQtYnVmZmVyaW5nLnBuZzoKKwkgICogZG9jcy9tYW51YWwvdGhyZWFkLXN5bmNocm9uaXppbmcucG5nOgorCSAgUmVwbGFjZSBvbmUgZGlhZ3JhbSB3aXRoIHR3byBzZXBhcmF0ZSBvbmVzIGFuZCB1cGRhdGVzIG90aGVycy4KKwkgIEZpeGVzICM1NDI0MDEuCisKKzIwMDgtMDctMjUgMTA6MjQ6NDMgKzAwMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RlbGVtZW50Lmg6IEZpeCBsaW5rIGluIGRvY3VtZW50YXRpb24uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGVsZW1lbnQuaDoKKwkgIEZpeCBsaW5rIGluIGRvY3VtZW50YXRpb24uCisKKzIwMDgtMDctMjQgMTc6Mzg6NDMgKzAwMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RtZXNzYWdlLmM6IEZpeCBjb25mdXNpbmcgZG9jdW1lbnRhdGlvbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOgorCSAgRml4IGNvbmZ1c2luZyBkb2N1bWVudGF0aW9uLgorCisyMDA4LTA3LTI0IDE1OjEzOjI0ICswMDAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDogcmV2ZXJ0IHRoZSBjaGFuZ2VzIHRvIHRoZSBoZWFkZXIgZmlsZSBmb3IgdGhlIEFCSS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkgIHJldmVydCB0aGUgY2hhbmdlcyB0byB0aGUgaGVhZGVyIGZpbGUgZm9yIHRoZSBBQkkuCisKKzIwMDgtMDctMjQgMTQ6NDc6NTggKzAwMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy4qOiBEb24ndCBjYWNoZSB0aGUgc2Vla2FibGUgc3RhdHVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkgIERvbid0IGNhY2hlIHRoZSBzZWVrYWJsZSBzdGF0dXMuCisJICBGaXhlcyBidWcgIzU0NDE3NAorCisyMDA4LTA3LTI0IDEyOjM2OjIwICswMDAwICBSZW5lIFN0YWRsZXIgPG1haWxAcmVuZXN0YWRsZXIuZGU+CisKKwkgIGRvY3MvbWFudWFsL2FkdmFuY2VkLWF1dG9wbHVnZ2luZy54bWw6IEFkZCBmYWtlc2luayB0byBleGFtcGxlIGNvZGUgdG8gY2xvc2UgdGhlIHBpcGVsaW5lIGdyYXBoLiAgVGhpcyBwcmV2ZW50cyB0aGUgcC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWF1dG9wbHVnZ2luZy54bWw6IEFkZCBmYWtlc2luayB0byBleGFtcGxlCisJICBjb2RlIHRvIGNsb3NlIHRoZSBwaXBlbGluZSBncmFwaC4gIFRoaXMgcHJldmVudHMgdGhlIHByb2dyYW0gZnJvbQorCSAgcHJpbnRpbmcgaW50ZXJuYWwgZGF0YSBmbG93IGVycm9ycy4KKworMjAwOC0wNy0yMyAxNTo0NDowNCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBkb2NzL21hbnVhbC9iYXNpY3MtYnVzLnhtbDogQ29ycmVjdCB0eXBvLiBGaXhlcyBidWcgIzU0NDMyMC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtYnVzLnhtbDoKKwkgIENvcnJlY3QgdHlwby4gRml4ZXMgYnVnICM1NDQzMjAuCisKKzIwMDgtMDctMjIgMTg6MTI6NTQgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KKworCSAgY29uZmlndXJlLmFjOiBSZW1vdmUgQUNfSVNDX1BPU0lYIG1hY3JvOyBpdCdzIGJyb2tlbiBvbiBzb21lIHBsYXRmb3JtcyBhbmQgbm90IG5lZWRlZC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICBSZW1vdmUgQUNfSVNDX1BPU0lYIG1hY3JvOyBpdCdzIGJyb2tlbiBvbiBzb21lIHBsYXRmb3JtcyBhbmQgbm90IG5lZWRlZC4KKwkgIEFkZCBjaGVjayAodGFrZW4gZnJvbSAtYmFzZSkgZm9yIHdpbnNvY2ssIGFkZHMgV0lOMzJfTElCUworCSAgKiBnc3QvTWFrZWZpbGUuYW06CisJICBBZGQgV0lOMzJfTElCUyB0byBMSUJBREQgZm9yIGxpYmdzdHJlYW1lci4gTmVlZGVkIG5vdyB0aGF0IGdzdHBvbGwgdXNlcworCSAgd2luc29jay4KKwkgIERlZmluZSBHU1RfRVhQT1JUUyB3aGVuIGJ1aWxkaW5nIGxpYmdzdHJlYW1lciAob25seSB1c2VkIG9uIHdpbjMyKQorCSAgKiBnc3QvZ3N0X3ByaXZhdGUuaDoKKwkgICogZ3N0L2dzdGluZm8uaDoKKwkgIFVzZSBHU1RfRVhQT1JUIGluc3RlYWQgb2YgbG9jYWxseS1kZWZpbmVkIChhbmQgaW5jb3JyZWN0IElNUE9SVF9TWU1CT0wpCisJICBmb3Igc3ltYm9scyB0aGF0IHdlIG5lZWQgdG8gZXhwb3J0IGluIGJvdGggdGhlc2UgZmlsZXMuCisJICAqIGdzdC9nc3Rwb2xsLmM6CisJICBJbmNsdWRlIGdzdF9wcml2YXRlLmggaGlnaGVyIHVwIHRvIGF2b2lkIHNvbWUgY29tcGlsZSBwcm9ibGVtcyBvbiB3aW4zMi4KKworMjAwOC0wNy0yMiAwOToyNDozNyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBnc3QvZ3N0dmFsdWUuYzogRml4IHR5cG9zLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R2YWx1ZS5jOgorCSAgRml4IHR5cG9zLgorCisyMDA4LTA3LTIyIDAwOjI5OjU1ICswMDAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgorCisJICBnc3QvZ3N0Y2Fwcy5jOiBQcmV2aW91cyBjb21taXQgd2FzIHdyb25nIE5VTEwgY2FwcyBkb2VzIG5vdCBleGlzdCBhbmQgaW5kaWNhdGUgYW4gZXJyb3IsIHNvIGFsc28gYWRkIGEgRklYTUUgdG8gZ3N0X2MuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0Y2Fwcy5jOgorCSAgUHJldmlvdXMgY29tbWl0IHdhcyB3cm9uZyBOVUxMIGNhcHMgZG9lcyBub3QgZXhpc3QKKwkgIGFuZCBpbmRpY2F0ZSBhbiBlcnJvciwgc28gYWxzbyBhZGQgYSBGSVhNRSB0bworCSAgZ3N0X2NhcHNfaXNfZXF1YWwgd2hlcmUgTlVMTCBjYXBzIGFyZSBhY2NlcHRlZC4KKworMjAwOC0wNy0yMSAyMzowMjo0MCArMDAwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGNhcHMuYzogQWxsb3cgcGFzc2luZyBvZiBOVUxMIHRvIGdzdF9jYXBzX3VuaW9uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGNhcHMuYzoKKwkgIEFsbG93IHBhc3Npbmcgb2YgTlVMTCB0byBnc3RfY2Fwc191bmlvbgorCisyMDA4LTA3LTIxIDIxOjMyOjA2ICswMDAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgorCisJICBnc3QvZ3N0Z2hvc3RwYWQuYzogQWRkIGluIGRvYyB0aGF0IGdzdF9naG9zdF9wYWRfc2V0X3RhcmdldCBjYW4gYWNjZXB0CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGdob3N0cGFkLmM6CisJICBBZGQgaW4gZG9jIHRoYXQgZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0IGNhbiBhY2NlcHQKKwkgIE5VTEwgdG8gY2xlYXIgdGFyZ2V0CisKKzIwMDgtMDctMTUgMjI6NTM6MDAgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KKworCSAgZ3N0LzogR3N0UmVnaXN0cnlQb29sIGRvZXNuJ3QgZXhpc3Q7IGRvbid0IHJlZmVyIHRvIGl0IGluIGRvY3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBsdWdpbi5jOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzoKKwkgIEdzdFJlZ2lzdHJ5UG9vbCBkb2Vzbid0IGV4aXN0OyBkb24ndCByZWZlciB0byBpdCBpbiBkb2NzLgorCSAgRG9uJ3QgcmVmZXIgdG8gZnVuY3Rpb25zIHRoYXQgZG9uJ3QgZXhpc3QgaW4gZG9jcywgaXQncworCSAgdW5oZWxwZnVsLgorCisyMDA4LTA3LTEyIDE3OjUxOjE2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIGdzdC9nc3QuYzogRml4IHNjYW5uaW5nIG9mIHBhdGhzIGdpdmVuIHZpYSAtLWdzdC1wbHVnaW4tcGF0aC4gRml4ZXMgYnVnICM1NDIxNzUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdC5jOgorCSAgRml4IHNjYW5uaW5nIG9mIHBhdGhzIGdpdmVuIHZpYSAtLWdzdC1wbHVnaW4tcGF0aC4gRml4ZXMgYnVnICM1NDIxNzUuCisKKzIwMDgtMDctMTIgMTc6NDM6MTUgKzAwMDAgIHRtYXR0aCA8bGUuYnVzaW5lc3NtYW5AZ21haWwuY29tPgorCisJICBkb2NzL3B3Zy9idWlsZGluZy10ZXN0YXBwLnhtbDogRG9uJ3QgdXNlIGFuIHVuZGVjbGFyZWQgdmFyaWFibGUgaW4gdGhlIGV4YW1wbGUgcHJvZ3JhbS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IHRtYXR0aCA8bGUgZG90IGJ1c2luZXNzbWFuIGF0IGdtYWlsIGRvdCBjb20+CisJICAqIGRvY3MvcHdnL2J1aWxkaW5nLXRlc3RhcHAueG1sOgorCSAgRG9uJ3QgdXNlIGFuIHVuZGVjbGFyZWQgdmFyaWFibGUgaW4gdGhlIGV4YW1wbGUgcHJvZ3JhbS4KKwkgIEZpeGVzIGJ1ZyAjNTQyNTczLgorCisyMDA4LTA3LTEyIDA5OjU5OjMyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6IFNxdWVlemUgZ2hvc3QtcGFkIGxpbmtzIGFuZCByZW1vdmUgPD4gZnJvbSBjbGFzc25hbWUgbGFiZWxzIHRvIHNhdmUgbW9yZSBob3Jpem9udGFsIHNwYWNlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6CisJICBTcXVlZXplIGdob3N0LXBhZCBsaW5rcyBhbmQgcmVtb3ZlIDw+IGZyb20gY2xhc3NuYW1lIGxhYmVscyB0byBzYXZlCisJICBtb3JlIGhvcml6b250YWwgc3BhY2UuCisKKzIwMDgtMDctMTEgMTk6MzA6NDggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdGRlYnVndXRpbHMuYzogR2l2ZSByZXF1ZXN0IGFuZCBzb21ldGltZXMgcGFkcyBhIGRpZmZlcmVudCBzaHBlIHN0eWxlLiBDb25kZW5zZSB0aGUgZ3JhcGhzIGEgbGl0dGxlIG1vcmUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGRlYnVndXRpbHMuYzoKKwkgIEdpdmUgcmVxdWVzdCBhbmQgc29tZXRpbWVzIHBhZHMgYSBkaWZmZXJlbnQgc2hwZSBzdHlsZS4gQ29uZGVuc2UgdGhlCisJICBncmFwaHMgYSBsaXR0bGUgbW9yZS4KKworMjAwOC0wNy0xMCAwMDozMDowMiArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgorCisJICBjb25maWd1cmUuYWM6IERvbid0IHJlcXVpcmUgZmxleCBhbmQgYmlzb24gaWYgdGhlIHBhcnNlciBpcyBkaXNhYmxlZC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICBEb24ndCByZXF1aXJlIGZsZXggYW5kIGJpc29uIGlmIHRoZSBwYXJzZXIgaXMgZGlzYWJsZWQuCisKKzIwMDgtMDctMDggMTE6MjA6MjIgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5jOiBEb24ndCB1c2UgZGVjbGFyYXRpb25zIGFmdGVyIHN0YXRlbWVudHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5jOgorCSAgKF9saXN0X2ZpbmRfc29ydGVkX2N1c3RvbSk6CisJICBEb24ndCB1c2UgZGVjbGFyYXRpb25zIGFmdGVyIHN0YXRlbWVudHMuCisKKzIwMDgtMDctMDggMDk6MDQ6MjUgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgZ3N0L2dzdGNoaWxkcHJveHkuYzogQWRkIEZJWE1FcyBmb3IgMC4xMSB0byB1c2UgR1NUX1RZUEVfT0JKRUNUIGluIHRoZSBzaWduYXR1cmUgb2YgdGhlIHRoZSBjaGlsZC1hZGRlZCAvIC1yZW1vdmVkIHNpLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGNoaWxkcHJveHkuYzogKGdzdF9jaGlsZF9wcm94eV9iYXNlX2luaXQpOgorCSAgQWRkIEZJWE1FcyBmb3IgMC4xMSB0byB1c2UgR1NUX1RZUEVfT0JKRUNUIGluIHRoZSBzaWduYXR1cmUKKwkgIG9mIHRoZSB0aGUgY2hpbGQtYWRkZWQgLyAtcmVtb3ZlZCBzaWduYWxzIGFzIEdzdENoaWxkUHJveHkKKwkgIG9ubHkgc3VwcG9ydHMgR3N0T2JqZWN0cy4KKworMjAwOC0wNy0wNyAxMTowMToyNiArMDAwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGRlYnVndXRpbHMuYzogRml4IG1lbWxlYWsKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgorCSAgRml4IG1lbWxlYWsKKworMjAwOC0wNy0wNiAxMjo0OTo0MyArMDAwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm9Abm52YS5vcmc+CisKKwkgIGdzdC9nc3Rwb2xsLmM6IEZpeCAiaWdub3JlZCByZXR1cm4gdmFsdWUiIGNvbXBpbGVyIHdhcm5pbmcgd2l0aCBuZXdlciBnbGliYy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvIGF0IG5udmEgZG90IG9yZz4KKwkgICogZ3N0L2dzdHBvbGwuYzoKKwkgIEZpeCAiaWdub3JlZCByZXR1cm4gdmFsdWUiIGNvbXBpbGVyIHdhcm5pbmcgd2l0aCBuZXdlciBnbGliYy4KKworMjAwOC0wNy0wNSAxNjoyODoyOCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBnc3QvZ3N0Y2hpbGRwcm94eS5jOiBGaXggY29weSZwYXN0ZSBlcnJvciBpbiBnc3RfY2hpbGRfcHJveHlfcmVtb3ZlZCgpIGRvY3VtZW50YXRpb24uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGNoaWxkcHJveHkuYzoKKwkgIEZpeCBjb3B5JnBhc3RlIGVycm9yIGluIGdzdF9jaGlsZF9wcm94eV9yZW1vdmVkKCkgZG9jdW1lbnRhdGlvbi4KKworMjAwOC0wNy0wMiAxNDo0Mzo0MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdHBsdWdpbi5jOiBQcmludCBlcnJvciBkZWJ1ZyBtZXNzYWdlIGlmIHBsdWdpbiBkZXNjcmlwdGlvbiBmaWVsZHMgdGhhdCBzaG91bGQgYmUgc2V0IGFyZSBOVUxMLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwbHVnaW4uYzogKENIRUNLX1BMVUdJTl9ERVNDX0ZJRUxEKSwgKGdzdF9wbHVnaW5fbG9hZF9maWxlKToKKwkgIFByaW50IGVycm9yIGRlYnVnIG1lc3NhZ2UgaWYgcGx1Z2luIGRlc2NyaXB0aW9uIGZpZWxkcyB0aGF0IHNob3VsZAorCSAgYmUgc2V0IGFyZSBOVUxMLgorCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogKGdzdF9yZWdpc3RyeV9iaW5hcnlfc2F2ZV9jb25zdF9zdHJpbmcpOgorCSAgRG9uJ3QgY3Jhc2ggaWYgdGhlIHN0cmluZyB0byBzZXJpYWxpc2UgaXMgTlVMTCAoaXQgcmVhbGx5IHNob3VsZAorCSAgbm90IGJlLCBidXQgYXBwYXJlbnRseSB0aGlzIHVzZWQgdG8gd29yayB3aXRoIHRoZSB4bWwgcmVnaXN0cnkgLi4uKS4KKworMjAwOC0wNy0wMiAxMjoyMzoxMiArMDAwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KKworCSAgdG9vbHMvZ3N0LXBsb3QtdGltZWxpbmUucHk6IEZpeCBwYXJzaW5nIG9mIGxvZyBtZXNzYWdlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1wbG90LXRpbWVsaW5lLnB5OgorCSAgRml4IHBhcnNpbmcgb2YgbG9nIG1lc3NhZ2VzCisKKzIwMDgtMDctMDEgMDk6Mjc6NDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjogU29ydCBhbHBoYWJldGljYWxseSBzbyBtYWtlIGNoZWNrLWV4cG9ydHMgZG9lc24ndCBiYXJmLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjo6CisJICBTb3J0IGFscGhhYmV0aWNhbGx5IHNvIG1ha2UgY2hlY2stZXhwb3J0cyBkb2Vzbid0IGJhcmYuCisKKzIwMDgtMDctMDEgMDU6NTM6MzIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdGV2ZW50LmM6IFVzZSBnc3RfZm9ybWF0X2dldF9uYW1lKCkgdG8gaW1wcm92ZSBkZWJ1ZyBvdXRwdXQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGV2ZW50LmM6CisJICBVc2UgZ3N0X2Zvcm1hdF9nZXRfbmFtZSgpIHRvIGltcHJvdmUgZGVidWcgb3V0cHV0LgorCSAgKiBnc3QvZ3N0cHJlc2V0LmM6CisJICBSZW1vdmUgI2lmZGVmJ2VkIGNvZGUuIEFkZCBUT0RPIGNvbW1lbnQuCisJICAqIGdzdC9nc3RzZWdtZW50LmM6CisJICBBZGQgZGVidWcgb3V0cHV0IHRvIGVhc2Ugc3BvdHRpbmcgZm9ybWF0ICE9IHNlZ21lbnQuZm9ybWF0IGFzc2VydGlvbnMuCisKKzIwMDgtMDYtMzAgMDk6NDI6NDMgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgdGVzdHMvY2hlY2svbGlicy9nZHAuYzogQWxzbyBlbmFibGUgdGhlIEdEUCB1bml0IHRlc3QgYWdhaW4gb24gUFBDIG5vdyB0aGF0IHRoZSBidWcgaXMgZml4ZWQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svbGlicy9nZHAuYzogKGdzdF9kcF9zdWl0ZSk6CisJICBBbHNvIGVuYWJsZSB0aGUgR0RQIHVuaXQgdGVzdCBhZ2FpbiBvbiBQUEMgbm93IHRoYXQgdGhlIGJ1ZworCSAgaXMgZml4ZWQuCisKKzIwMDgtMDYtMzAgMDk6Mzg6NDUgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOiBEb24ndCB3cml0ZSB0byB0aGUgc2FtZSByZWdpb24gb2YgbWVtb3J5IGFzIGEgdWludDY0IGFuZCB1aW50MTYgYXMgdGhpcyBicmVha3MgLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOgorCSAgRG9uJ3Qgd3JpdGUgdG8gdGhlIHNhbWUgcmVnaW9uIG9mIG1lbW9yeSBhcyBhIHVpbnQ2NCBhbmQgdWludDE2CisJICBhcyB0aGlzIGJyZWFrcyBzdHJpY3QgYWxpYXNpbmcgcnVsZXMgYW5kIGFwcGFyYW50bHkgYnJlYWtzIG9uIFBQQworCSAgYW5kIHMzOTAuIFRoYW5rcyB0byBTam9lcmQgU2ltb25zIGZvciBhbmFseXNpbmcuIEZpeGVzIGJ1ZyAjMzQ4MTE0LgorCisyMDA4LTA2LTI5IDE2OjExOjI0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzogT3B0aW1pemUgbGlzdCBoYW5kbGluZy4gVXNlIG93biBmaW5kIGZ1bmN0aW9uLiBFeHBsb2l0IHRoYXQgZmFjdC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzoKKwkgIE9wdGltaXplIGxpc3QgaGFuZGxpbmcuIFVzZSBvd24gZmluZCBmdW5jdGlvbi4gRXhwbG9pdCB0aGF0IGZhY3QgdGhhdAorCSAgdGhlIGxpc3QgaXMgc29ydGVkLiBBbHNvIHBhc3MgYmFjayB0aGUgbm9kZSBiZWZvcmUsIHNvIHRoYXQgd2UgY2FuCisJICBpbnNlcnQgcXVpY2tseS4gSGF2ZSBhIGZhc3QgcGF0aCBmb3IgYXBwZW5kLgorCisyMDA4LTA2LTI5IDE1OjAwOjI2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvZGVzaWduLzogRml4IHR3byB0eXBvcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9kcmFmdC1mcmFtZXN0ZXAudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LW5lZ290aWF0aW9uLnR4dDoKKwkgIEZpeCB0d28gdHlwb3MuCisKKzIwMDgtMDYtMjcgMDk6MDI6NTEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgY29uZmlndXJlLmFjOgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgIFNob3cgY29uZmlndXJhdGlvbiBzdW1hcnkgYWZ0ZXIgY29uZmlndXJlIHJ1bi4gQmFzZWQgb24gcGF0Y2ggYnkKKwkgIEx1YyBQaW9uY2hvbiA8bHVjLnBpb25jaG9uQG5va2lhLmNvbT4uIEZpeGVzOiAjNTQwMTM0CisKKzIwMDgtMDYtMjcgMDc6MDM6MDUgKzAwMDAgIEx1YyBQaW9uY2hvbiA8bHVjLnBpb25jaG9uQG5va2lhLmNvbT4KKworCSAgZG9jcy9tYW51YWwvOiBBZGQgc2NhbGUgZmFjdG9yIGZvciBwZGYgb3V0cHV0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBwYXRjaCBieTogTHVjIFBpb25jaG9uICA8bHVjLnBpb25jaG9uQG5va2lhLmNvbT4KKwkgICogZG9jcy9tYW51YWwvYWR2YW5jZWQtYXV0b3BsdWdnaW5nLnhtbDoKKwkgICogZG9jcy9tYW51YWwvYWR2YW5jZWQtdGhyZWFkcy54bWw6CisJICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1iaW5zLnhtbDoKKwkgICogZG9jcy9tYW51YWwvYmFzaWNzLWVsZW1lbnRzLnhtbDoKKwkgICogZG9jcy9tYW51YWwvYmFzaWNzLWhlbGxvd29ybGQueG1sOgorCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtcGFkcy54bWw6CisJICBBZGQgc2NhbGUgZmFjdG9yIGZvciBwZGYgb3V0cHV0LgorCSAgKiBkb2NzL21hbnVhbC9pbnRyby1iYXNpY3MueG1sOgorCSAgU3dpdGNoZWQgc2VjdGlvbnMgInBhZHMiIGFuZCAiYmlucyIgYW5kIGFkZGVkIGEgcGlwZWxpbmUgZGlhZ3JhbS4KKwkgICogZG9jcy9tYW51YWwvaW50cm8tZ3N0cmVhbWVyLnhtbDoKKwkgIEFkZGVkIG1vcmUgaW5mbyBvbiBnc3RyZWFtZXIuCisJICAqIGRvY3MvbWFudWFsL2ludHJvLW1vdGl2YXRpb24ueG1sOgorCSAgQ29tbWVudGVkIG91dCB0aGUgd2hvbGUgc2VjdGlvbiAiY3VycmVudCBwcm9ibGVtIiwgd2hpY2ggc291bmRzCisJICBoaXN0b3JpY2FsIGFuZCBzb21laG93IG9zb2xldGU7IGl0IGNvdWxkIGJlIHR1cm5lZCBpbiBhIHBvc2l0aXZlCisJICB3YXkgYW5kIHJldXNlZCB0byBpbXByb3ZlIHRoZSBkZXNpZ24gcHJpbmNpcGxlcy4KKwkgICogZG9jcy9tYW51YWwvaW50cm8tcHJlZmFjZS54bWw6CisJICAtIFVwZGF0ZSBVUkxzIHRvIGxpYnJhcnkuZ25vbWUub3JnLgorCSAgLSBEbyBub3QgbWVudGlvbiBHVEsrIGluIHByZWxpbWluYXJ5IHJlYWRpbmcgKGlycmVsZXZhbnQpLgorCSAgLSBNZW50aW9uIFBsdWdpbiBXcml0ZXIncyBNYW51YWwgYW5kIGZ1cnRoZXIgcmVhZGluZyBvbmx5IGluIHRoZQorCSAgcHJldmlvdXMgc2VjdGlvbi4KKwkgIC0gQWRkZWQgYSBsaXN0IG9mIG1vc3QgcmVsZXZhbnQgR09iamVjdC9nbGliIHRvcGljcy4KKwkgICogZG9jcy9tYW51YWwvTWFrZWZpbGUuYW06CisJICAqIGRvY3MvbWFudWFsL2Jpbi1lbGVtZW50LWdob3N0LmZpZzoKKwkgICogZG9jcy9tYW51YWwvYmluLWVsZW1lbnQtZ2hvc3QucG5nOgorCSAgKiBkb2NzL21hbnVhbC9iaW4tZWxlbWVudC1ub2dob3N0LmZpZzoKKwkgICogZG9jcy9tYW51YWwvYmluLWVsZW1lbnQtbm9naG9zdC5wbmc6CisJICAqIGRvY3MvbWFudWFsL2Jpbi1lbGVtZW50LmZpZzoKKwkgICogZG9jcy9tYW51YWwvYmluLWVsZW1lbnQucG5nOgorCSAgKiBkb2NzL21hbnVhbC9maWx0ZXItZWxlbWVudC1tdWx0aS5maWc6CisJICAqIGRvY3MvbWFudWFsL2ZpbHRlci1lbGVtZW50LW11bHRpLnBuZzoKKwkgICogZG9jcy9tYW51YWwvZmlsdGVyLWVsZW1lbnQuZmlnOgorCSAgKiBkb2NzL21hbnVhbC9maWx0ZXItZWxlbWVudC5wbmc6CisJICAqIGRvY3MvbWFudWFsL2dzdHJlYW1lci1vdmVydmlldy5wbmc6CisJICAqIGRvY3MvbWFudWFsL2hlbGxvLXdvcmxkLmZpZzoKKwkgICogZG9jcy9tYW51YWwvaGVsbG8td29ybGQucG5nOgorCSAgKiBkb2NzL21hbnVhbC9saW5rZWQtZWxlbWVudHMuZmlnOgorCSAgKiBkb2NzL21hbnVhbC9saW5rZWQtZWxlbWVudHMucG5nOgorCSAgKiBkb2NzL21hbnVhbC9taW1lLXdvcmxkLmZpZzoKKwkgICogZG9jcy9tYW51YWwvbWltZS13b3JsZC5wbmc6CisJICAqIGRvY3MvbWFudWFsL3F1ZXVlLmZpZzoKKwkgICogZG9jcy9tYW51YWwvcXVldWUucG5nOgorCSAgKiBkb2NzL21hbnVhbC9zaW1wbGUtcGxheWVyLnBuZzoKKwkgICogZG9jcy9tYW51YWwvc2luay1lbGVtZW50LmZpZzoKKwkgICogZG9jcy9tYW51YWwvc2luay1lbGVtZW50LnBuZzoKKwkgICogZG9jcy9tYW51YWwvc3JjLWVsZW1lbnQuZmlnOgorCSAgKiBkb2NzL21hbnVhbC9zcmMtZWxlbWVudC5wbmc6CisJICAqIGRvY3MvbWFudWFsL2RpYWdyYW1zLWdlbmVyYWwuc3ZnOgorCSAgKiBkb2NzL21hbnVhbC9kaWFncmFtcy1waXBlbGluZXMuc3ZnOgorCSAgUmVtb3ZlZCAuZmlnLCBhZGRlZCAucG5nIGNvdW50ZXJwYXJ0LgorCSAgRml4ZXM6ICM1MzkxMzcKKworMjAwOC0wNi0yNiAyMDoyNzowMCArMDAwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLio6IHJldmVydCBleHRyYS1zaXplLWJ1ZmZlcnMgc3R1ZmYsIGNhdXNlZCBzb21lIHJhY2UgY29uZGl0aW9ucyBhbmQgZXh0cmEtc2l6ZS1idWZmZXJzLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5oOgorCSAgcmV2ZXJ0IGV4dHJhLXNpemUtYnVmZmVycyBzdHVmZiwgY2F1c2VkIHNvbWUgcmFjZSBjb25kaXRpb25zCisJICBhbmQgZXh0cmEtc2l6ZS1idWZmZXJzIGlzIG5vdCB1c2VkIGFueW1vcmUuIERvY3MgbmVlZHMgc29tZSB1cGRhdGVzCisKKzIwMDgtMDYtMjYgMTI6NTI6NDEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHdpbjMyL2NvbW1vbi86IFVwZGF0ZSB3aW4zMiBmaWxlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICAqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKKwkgICogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5oOgorCSAgKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgorCSAgVXBkYXRlIHdpbjMyIGZpbGVzLgorCisyMDA4LTA2LTI2IDEyOjI0OjA4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0ZGVidWd1dGlscy5oOiBBZGQgbWlzc2luZyBTaW5jZScgbWFya2VycyB0byBndGstZG9jIGJsdXJicy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZGVidWd1dGlscy5oOiAoR3N0RGVidWdHcmFwaERldGFpbHMpLAorCSAgKEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEUpOgorCSAgQWRkIG1pc3NpbmcgU2luY2UnIG1hcmtlcnMgdG8gZ3RrLWRvYyBibHVyYnMuCisKKzIwMDgtMDYtMjYgMTE6NTk6NDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHRlc3RzL2NoZWNrL2xpYnMvdHJhbnNmb3JtMS5jOiBBZGQgc29tZSBtb3JlIHRlc3RzIHdpdGggc3dpdGNoaW5nIGNhcHMgaW4gYnVmZmVyX2FsbG9jLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL2xpYnMvdHJhbnNmb3JtMS5jOiAoYnVmZmVyX2FsbG9jX3B0MSksCisJICAoc2V0X2NhcHNfcHQxKSwgKEdTVF9TVEFSVF9URVNUKSwgKHNldF9jYXBzX3B0MiksICh0cmFuc2Zvcm1faXBfMSksCisJICAoc2V0X2NhcHNfMSksIChzZXRfY2Fwc19jdDEpLCAodHJhbnNmb3JtX2N0MSksCisJICAodHJhbnNmb3JtX2NhcHNfY3QxKSwgKHRyYW5zZm9ybV9zaXplX2N0MSksIChidWZmZXJfYWxsb2NfY3QxKSwKKwkgIChzZXRfY2Fwc19jdDIpLCAodHJhbnNmb3JtX2N0MiksICh0cmFuc2Zvcm1fY2Fwc19jdDIpLAorCSAgKHRyYW5zZm9ybV9zaXplX2N0MiksIChidWZmZXJfYWxsb2NfY3QyKToKKwkgIEFkZCBzb21lIG1vcmUgdGVzdHMgd2l0aCBzd2l0Y2hpbmcgY2FwcyBpbiBidWZmZXJfYWxsb2MuCisKKzIwMDgtMDYtMjUgMTc6Mjc6MzAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHRlc3RzL2NoZWNrL2xpYnMvOiBNb3JlIHRlc3RzLCBwcmVwYXJlIGZvciB0ZXN0cyB3aXRoIHN3aXRjaGluZyBjYXBzIGluIGJ1ZmZlcl9hbGxvYy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9saWJzL3Rlc3RfdHJhbnNmb3JtLmM6IChnc3RfdGVzdF90cmFuc19iYXNlX2luaXQpLAorCSAgKGdzdF90ZXN0X3RyYW5zX2NsYXNzX2luaXQpLCAocmVzdWx0X3NpbmtfY2hhaW4pLAorCSAgKHJlc3VsdF9idWZmZXJfYWxsb2MpLCAoZ3N0X3Rlc3RfdHJhbnNfbmV3KSwgKGdzdF90ZXN0X3RyYW5zX2ZyZWUpLAorCSAgKGdzdF90ZXN0X3RyYW5zX3B1c2gpLCAoZ3N0X3Rlc3RfdHJhbnNfcG9wKToKKwkgICogdGVzdHMvY2hlY2svbGlicy90cmFuc2Zvcm0xLmM6IChidWZmZXJfYWxsb2NfcHQxKSwKKwkgIChzZXRfY2Fwc19wdDEpLCAoR1NUX1NUQVJUX1RFU1QpLCAoc2V0X2NhcHNfcHQyKSwgKHRyYW5zZm9ybV9pcF8xKSwKKwkgIChzZXRfY2Fwc18xKSwgKHNldF9jYXBzX2N0MSksICh0cmFuc2Zvcm1fY3QxKSwKKwkgICh0cmFuc2Zvcm1fY2Fwc19jdDEpLCAodHJhbnNmb3JtX3NpemVfY3QxKSwgKGJ1ZmZlcl9hbGxvY19jdDEpLAorCSAgKHNldF9jYXBzX2N0MiksICh0cmFuc2Zvcm1fY3QyKSwgKHRyYW5zZm9ybV9jYXBzX2N0MiksCisJICAodHJhbnNmb3JtX3NpemVfY3QyKSwgKGJ1ZmZlcl9hbGxvY19jdDIpLAorCSAgKGdzdF9iYXNldHJhbnNmb3JtX3N1aXRlKToKKwkgIE1vcmUgdGVzdHMsIHByZXBhcmUgZm9yIHRlc3RzIHdpdGggc3dpdGNoaW5nIGNhcHMgaW4gYnVmZmVyX2FsbG9jLgorCisyMDA4LTA2LTI1IDE1OjM5OjAyICswMDAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuKjogRml4IGRlYWQtbG9jayBpbiB1bmRlcnJ1bl9jYgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuaDoKKwkgIEZpeCBkZWFkLWxvY2sgaW4gdW5kZXJydW5fY2IKKworMjAwOC0wNi0yNSAxNDo0OTowOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1zdGF0ZXMudHh0OiBGaXggZGV2aWNlIG9wZW4vY2xvc2UgZG9jcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXN0YXRlcy50eHQ6CisJICBGaXggZGV2aWNlIG9wZW4vY2xvc2UgZG9jcy4KKworMjAwOC0wNi0yNSAxNDo0NzoxMSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBDaGFuZ2VMb2c6IE1lbnRpb24gYnVnbnVtYmVyIGZvciBsYXN0IGNvbW1pdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBDaGFuZ2VMb2c6CisJICBNZW50aW9uIGJ1Z251bWJlciBmb3IgbGFzdCBjb21taXQuCisKKzIwMDgtMDYtMjUgMTQ6NDQ6NTIgKzAwMDAgIEx1YyBQaW9uY2hvbiA8bHVjLnBpb25jaG9uQG5va2lhLmNvbT4KKworCSAgZG9jcy9tYW51YWwvbWFudWFsLnhtbDogLSBSZW9yZ2FuaXNlZCB0aGUgcHJldmlvdXMgImludHJvZHVjdGlvbiIgYnVuZGxlIGludG8gRm9yZXdvcmQsCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHBhdGNoIGJ5OiBMdWMgUGlvbmNob24gIDxsdWMucGlvbmNob25Abm9raWEuY29tPgorCSAgKiBkb2NzL21hbnVhbC9tYW51YWwueG1sOgorCSAgLSBSZW9yZ2FuaXNlZCB0aGUgcHJldmlvdXMgImludHJvZHVjdGlvbiIgYnVuZGxlIGludG8gRm9yZXdvcmQsCisJICBJbnRyb2R1Y3Rpb24sIGFuZCBBYm91dCBHU3RyZWFtZXIuIFRoZSB0d28gZmlyc3QgYXJlIDxwcmVmYWNlPgorCSAgZG9jYm9vayBlbGVtZW50cy4gVGhlIGxhdGVyIGlzIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBib29rLgorCSAgLSBhZGRlZCBpbnRyby1nc3RyZWFtZXIueG1sIChjb250ZW50IHBhcnRpYWxseSBmcm9tCisJICBpbnRyby1wcmVmYWNlLnhtbCkKKwkgIC0gbW92ZWQgYXBwZW5kaXgtd2luMzIueG1sIGludG8gYXBwZW5kaXgtaW50ZWdyYXRpb24ueG1sCisJICAqIGRvY3MvbWFudWFsL2ludHJvLXByZWZhY2UueG1sOiBnc3RyZWFtZXIgc2VjdGlvbiBtb3ZlZC4uLgorCSAgKiBkb2NzL21hbnVhbC9pbnRyby1nc3RyZWFtZXIueG1sOiAuLi5oZXJlLiBuZXcgZmlsZS4KKwkgICogZG9jcy9tYW51YWwvYXBwZW5kaXgtd2luMzIueG1sOiByZW1vdmVkIGZpbGUuIENvbnRlbnQgbW92ZWQuLi4KKwkgICogZG9jcy9tYW51YWwvYXBwZW5kaXgtaW50ZWdyYXRpb24ueG1sOiAuLi5oZXJlLgorCSAgKiBkb2NzL21hbnVhbC9oaWdobGV2ZWwtY29tcG9uZW50cy54bWw6IHNlY3Rpb24gYWJvdXQgR3N0RWRpdG9yIG1vdmVkLi4uCisJICAqIGRvY3MvbWFudWFsL2FwcGVuZGl4LWNoZWNrbGlzdC54bWw6IC4uLmhlcmUuCisKKzIwMDgtMDYtMjUgMTQ6MzI6NTMgKzAwMDAgIEx1YyBQaW9uY2hvbiA8bHVjLnBpb25jaG9uQG5va2lhLmNvbT4KKworCSAgZG9jcy9tYW51YWwvOiAtIEV4cGxpY2l0ZWx5IGluY2x1ZGUgZ2xpYi5oLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBwYXRjaCBieTogTHVjIFBpb25jaG9uICA8bHVjLnBpb25jaG9uQG5va2lhLmNvbT4KKwkgICogZG9jcy9tYW51YWwvYmFzaWNzLWhlbGxvd29ybGQueG1sOgorCSAgKiBkb2NzL21hbnVhbC9oZWxsby13b3JsZC5maWc6CisJICAtIEV4cGxpY2l0ZWx5IGluY2x1ZGUgZ2xpYi5oLgorCSAgLSBEbyBub3QgdXNlIGdsb2JhbCB2YXJpYWJsZXMuCisJICAtIFVzZSBnX3ByaW50ZXJyKCkgaW5zdGVhZCBvZiBnX3ByaW50KCkuCisJICAtIE1pbm9yIGZvcm1hdGluZy9yZW5hbWluZyB0byBpbmNyZWFzZSByZWFkaWJpbGl0eS4KKwkgIC0gUmVuYW1lZCBuZXdfcGFkKCkgdG8gb25fcGFkX2FkZGVkKCkKKwkgIC0gSW1wcm92ZWQgZXhwbGVuYXRvcnkgY29tbWVudHMuCisJICAtIHJlbmFtZWQgb2dnIHBhcnNlciB0byBvZ2cgZGVtdXhlcgorCSAgLSBVc2UgImF1dG9hdWRpb3NpbmsiIGluc3RlYWQgb2YgImFsc2FzaW5rIi4KKwkgIEZpeGVzOiAjNTM4NjE5CisKKzIwMDgtMDYtMjUgMTQ6Mjc6MzcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgQ2hhbmdlTG9nOiBSZW1vdmUgY3ZzIGNvbmZsaWN0IG1hcmtlci4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBDaGFuZ2VMb2c6CisJICBSZW1vdmUgY3ZzIGNvbmZsaWN0IG1hcmtlci4KKworMjAwOC0wNi0yNSAxNDoyNTo0OSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBkb2NzL1JFQURNRTogRG9jdW1lbnQgdGhhdCBmb3IgcGxnaW4tZG9jcyB3ZSBleHRyYXh0IGhlIHNob3J0LWRlc2MgZnJvbSB0aGUgZWxlbWVudCBkZXRhaWxzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvUkVBRE1FOgorCSAgRG9jdW1lbnQgdGhhdCBmb3IgcGxnaW4tZG9jcyB3ZSBleHRyYXh0IGhlIHNob3J0LWRlc2MgZnJvbSB0aGUgZWxlbWVudAorCSAgZGV0YWlscy4KKwkgICogZG9jcy9kZXNpZ24vcGFydC1zdGF0ZXMudHh0OgorCSAgVGVsbCB0aGF0IGRldmljZXMgc2hvdWxkIGJlIGNsb3NlZCBpbiBQQVVTRUQgLT4gUkVBRFkuCisJICAqIGRvY3MvbWFudWFsL1JFQURNRToKKwkgIERvY3VtZW50IGhvdyB0ZXN0cyBpbiB0aGUgbWFudWFsIGFyZSBoYW5kbGVkLgorCSAgKiBkb2NzL21hbnVhbHMubWFrOgorCSAgVHlwbyBpbiBjb21tZW50LgorCisyMDA4LTA2LTI1IDExOjUwOjA2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YmluLmM6IE9ubHkgY2FyZSBhYm91dCBsYXRlbmN5IG1pbiBhbmQgbWF4IHdoZW4gdGhlIHNpbmsgaXMgYWN0dWFsbHkgYSBsaXZlIHNpbmsuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAoYmluX3F1ZXJ5X2xhdGVuY3lfZm9sZCk6CisJICBPbmx5IGNhcmUgYWJvdXQgbGF0ZW5jeSBtaW4gYW5kIG1heCB3aGVuIHRoZSBzaW5rIGlzIGFjdHVhbGx5IGEgbGl2ZQorCSAgc2luay4KKworMjAwOC0wNi0yNSAxMDo1Mzo1MiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1ibG9jay50eHQ6IEZpeCB0eXBvLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtYmxvY2sudHh0OgorCSAgRml4IHR5cG8uCisJICAqIGRvY3MvZGVzaWduL3BhcnQtZWxlbWVudC10cmFuc2Zvcm0udHh0OgorCSAgQWRkIG5vdGVzIGFib3V0IHdoeSB0cmFuc2Zvcm0gbmVlZHMgdG8ga25vdyBpbnB1dC9vdXRwdXQgc2l6ZXMuCisJICBBZGQgc29tZSBpc3N1ZXMgdGhhdCBuZWVkIHRvIGJlIHNvbHZlZC4KKwkgIEFkZCBzb21lIG1vcmUgdXNlIGNhc2VzLgorCSAgKiB0ZXN0cy9jaGVjay9saWJzL3Rlc3RfdHJhbnNmb3JtLmM6IChnc3RfdGVzdF90cmFuc19iYXNlX2luaXQpLAorCSAgKGdzdF90ZXN0X3RyYW5zX2NsYXNzX2luaXQpLCAocmVzdWx0X3NpbmtfY2hhaW4pLAorCSAgKHJlc3VsdF9idWZmZXJfYWxsb2MpLCAoZ3N0X3Rlc3RfdHJhbnNfbmV3KSwgKGdzdF90ZXN0X3RyYW5zX2ZyZWUpLAorCSAgKGdzdF90ZXN0X3RyYW5zX3B1c2gpLCAoZ3N0X3Rlc3RfdHJhbnNfcG9wKToKKwkgICogdGVzdHMvY2hlY2svbGlicy90cmFuc2Zvcm0xLmM6IChidWZmZXJfYWxsb2NfcHQxKSwKKwkgIChzZXRfY2Fwc19wdDEpLCAoR1NUX1NUQVJUX1RFU1QpLCAoc2V0X2NhcHNfcHQyKSwgKHRyYW5zZm9ybV9pcF8xKSwKKwkgIChzZXRfY2Fwc18xKSwgKHNldF9jYXBzX2N0MSksICh0cmFuc2Zvcm1fY3QxKSwKKwkgICh0cmFuc2Zvcm1fY2Fwc19jdDEpLCAodHJhbnNmb3JtX3NpemVfY3QxKSwgKGJ1ZmZlcl9hbGxvY19jdDEpLAorCSAgKGdzdF9iYXNldHJhbnNmb3JtX3N1aXRlKToKKwkgIEFkZCBzdXBvcnQgZm9yIGRpZmZlcmVudCBwYWQgdGVtcGxhdGVzIGFuZCBidWZmZXItYWxsb2MuCisJICBBZGQgbW9yZSBjaGVja3MgZm9yIGNhcHMgYW5kIGJ1ZmZlci1hbGxvYy4KKwkgIEFkZCBjaGVja3MgZm9yIHByb3h5IGJ1ZmZlciBhbGxvYy4KKwkgIEFkZCB1bml0IHRlc3QgZm9yIGNvcHkgdHJhbnNmb3JtLgorCisyMDA4LTA2LTI0IDE5OjU2OjUxICswMDAwICBMdWMgUGlvbmNob24gPGx1Yy5waW9uY2hvbkBub2tpYS5jb20+CisKKwkgIGRvY3MvbWFudWFsLzogVHlwbyBhbmQgZm9ybWF0dGluZyBmaXhlcyAoIzUzODU5NCkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBMdWMgUGlvbmNob24gIDxsdWMucGlvbmNob25Abm9raWEuY29tPgorCSAgKiBkb2NzL21hbnVhbC9hcHBlbmRpeC1pbnRlZ3JhdGlvbi54bWw6CisJICAqIGRvY3MvbWFudWFsL2FwcGVuZGl4LWxpY2Vuc2luZy54bWw6CisJICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1lbGVtZW50cy54bWw6CisJICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1oZWxsb3dvcmxkLnhtbDoKKwkgICogZG9jcy9tYW51YWwvYmFzaWNzLXBhZHMueG1sOgorCSAgKiBkb2NzL21hbnVhbC9oaWdobGV2ZWwtY29tcG9uZW50cy54bWw6CisJICAqIGRvY3MvbWFudWFsL2hpZ2hsZXZlbC14bWwueG1sOgorCSAgKiBkb2NzL21hbnVhbC9pbnRyby1iYXNpY3MueG1sOgorCSAgKiBkb2NzL21hbnVhbC9pbnRyby1wcmVmYWNlLnhtbDoKKwkgIFR5cG8gYW5kIGZvcm1hdHRpbmcgZml4ZXMgKCM1Mzg1OTQpLgorCisyMDA4LTA2LTI0IDA3OjQ5OjM2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOiBGaXggc29tZSBtZW1vcnkgbGVha3MgYW5kIHVzZXMgb2Ygb2JqZWN0IGluc3RhbmNlcyB0aGF0IHdlIGRvbid0IGFjdHVhbGx5IG93bi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgIEZpeCBzb21lIG1lbW9yeSBsZWFrcyBhbmQgdXNlcyBvZiBvYmplY3QgaW5zdGFuY2VzIHRoYXQgd2UgZG9uJ3QKKwkgIGFjdHVhbGx5IG93bi4KKworMjAwOC0wNi0yMiAxOToxOTozNSArMDAwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IEFkZCBmdW5jdGlvbmFsaXR5IHRvIGV4dHJhLXNpemUtYnVmZmVycyBwcm9wZXJ0eS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkgIEFkZCBmdW5jdGlvbmFsaXR5IHRvIGV4dHJhLXNpemUtYnVmZmVycyBwcm9wZXJ0eS4KKworMjAwOC0wNi0yMiAxNDozNToxMyArMDAwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IERvbid0IHVwZGF0ZSB0aGUgY3VyX3RpbWUgb24gR1NUX0NMT0NLX1RJTUVfTk9ORSAoIzUzNzgwNCkgYW5kIGRvbid0IGFjdGl2YXRlIHRoZSBwLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6CisJICBEb24ndCB1cGRhdGUgdGhlIGN1cl90aW1lIG9uIEdTVF9DTE9DS19USU1FX05PTkUgKCM1Mzc4MDQpIGFuZCBkb24ndAorCSAgYWN0aXZhdGUgdGhlIHBhZHMgaWYgdGhleSBhcmUgYWRkZWQgaW4gU1RBVEVfTlVMTC4KKworMjAwOC0wNi0yMSAyMToyMDoxMyArMDAwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KKworCSAgZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDogQWRkIG5ldyBBUEkgdG8gZG9jCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkgIEFkZCBuZXcgQVBJIHRvIGRvYworCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgorCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgorCSAgQVBJOiBnc3RfY2hlY2tfdGVhcmRvd25fcGFkX2J5X25hbWUKKworMjAwOC0wNi0yMSAxOTo0ODo1MyArMDAwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suKjogQWxzbyBzZXR1cCByZXF1ZXN0IHBhZHMgYW5kIGFsbG93IHNldHVwIHBhZHMgYnkgbmFtZSAoIzUzNzgxMikKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgorCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgorCSAgQWxzbyBzZXR1cCByZXF1ZXN0IHBhZHMgYW5kIGFsbG93IHNldHVwIHBhZHMgYnkgbmFtZSAoIzUzNzgxMikKKwkgIEFQSTogZ3N0X2NoZWNrX3NldHVwX3NyY19wYWRfYnlfbmFtZQorCSAgQVBJOiBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWRfYnlfbmFtZQorCisyMDA4LTA2LTIwIDIxOjA4OjQ3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgdGVzdHMvY2hlY2svOiBVc2UgSEFWRV9WQUxHUklORF9IIHNvbWUgbW9yZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6CisJICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9wYXJzZS1sYXVuY2guYzoKKwkgIFVzZSBIQVZFX1ZBTEdSSU5EX0ggc29tZSBtb3JlLgorCisyMDA4LTA2LTIwIDE2OjI5OjIzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgc2NyaXB0cy9jdnMtdXBkYXRlLnNoOiBQYXNzIGFyZ3VtZW50cyB0byBtYWtlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHNjcmlwdHMvY3ZzLXVwZGF0ZS5zaDoKKwkgIFBhc3MgYXJndW1lbnRzIHRvIG1ha2UuCisJICBSdW4gYXV0b3JlZ2VuLnNoIGlmIE1ha2VmaWxlIGlzIG5vdCB0aGVyZS4KKworMjAwOC0wNi0yMCAxNTo1NDo0MyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIERvbid0IGFzc3VtZSB0aGF0IDx2YWxncmluZC92YWxncmluZC5oPiBleGlzdHMganVzdCBiZWNhdXNlIHRoZSBiaW5hcnkgaXMgdGhlcmUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgKiBnc3QvZ3N0aW5mby5jOgorCSAgRG9uJ3QgYXNzdW1lIHRoYXQgPHZhbGdyaW5kL3ZhbGdyaW5kLmg+IGV4aXN0cyBqdXN0IGJlY2F1c2UKKwkgIHRoZSBiaW5hcnkgaXMgdGhlcmUuCisKKzIwMDgtMDYtMjAgMTI6MDY6NTQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHRlc3RzL2NoZWNrLzogQWRkIHNvbWUgdGVzdCBiYXNldHJhbnNmb3JtIGVsZW1lbnQgYW5kIHRoZSBiZWdpbm5pbmdzIG9mIHZhcmlvdXMgdW5pdCB0ZXN0cyBmb3IgaXQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICAqIHRlc3RzL2NoZWNrL2xpYnMvdGVzdF90cmFuc2Zvcm0uYzogKGdzdF90ZXN0X3RyYW5zX2Jhc2VfaW5pdCksCisJICAoZ3N0X3Rlc3RfdHJhbnNfY2xhc3NfaW5pdCksIChnc3RfdGVzdF90cmFuc19pbml0KSwKKwkgIChnc3RfdGVzdF90cmFuc19zZXRfZGF0YSksIChyZXN1bHRfc2lua19jaGFpbiksCisJICAoZ3N0X3Rlc3RfdHJhbnNfbmV3KSwgKGdzdF90ZXN0X3RyYW5zX2ZyZWUpLCAoZ3N0X3Rlc3RfdHJhbnNfcHVzaCksCisJICAoZ3N0X3Rlc3RfdHJhbnNfcG9wKToKKwkgICogdGVzdHMvY2hlY2svbGlicy90cmFuc2Zvcm0xLmM6IChHU1RfU1RBUlRfVEVTVCksCisJICAodHJhbnNmb3JtX2lwXzEpLCAoc2V0X2NhcHNfMSksIChnc3RfYmFzZXRyYW5zZm9ybV9zdWl0ZSk6CisJICBBZGQgc29tZSB0ZXN0IGJhc2V0cmFuc2Zvcm0gZWxlbWVudCBhbmQgdGhlIGJlZ2lubmluZ3Mgb2YgdmFyaW91cworCSAgdW5pdCB0ZXN0cyBmb3IgaXQuCisKKzIwMDgtMDYtMjAgMTE6MjQ6MDMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzogSW5jcmVhc2UgY29kZSByZWFkYWJpbGl0eS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6IChoZWxwZXJfZmluZF9wZWVrKToKKwkgIEluY3JlYXNlIGNvZGUgcmVhZGFiaWxpdHkuCisJICBEb24ndCB0cnkgdG8gY29tcGFyZSBidWZmZXIgb2Zmc2V0cyB3aGVuIHRoZXIgYXJlIGludmFsaWQuCisKKzIwMDgtMDYtMjAgMTE6MDc6MDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGRvY3MvZGVzaWduL01ha2VmaWxlLmFtOiBEaXN0IHNvbWUgbW9yZSBkZXNpZ24gZG9jcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9NYWtlZmlsZS5hbToKKwkgIERpc3Qgc29tZSBtb3JlIGRlc2lnbiBkb2NzLgorCSAgKiBkb2NzL3JhbmRvbS9tb3ZpbmctcGx1Z2luczoKKwkgIFNtYWxsIGFkZGl0aW9uOiBnb29kIHBsdWdpbnMgbXVzdG4ndCBoYXZlIGZ1bmN0aW9uYWwgY29kZQorCSAgd2l0aGluIGFzc2VydGlvbiBtYWNyb3MuCisKKzIwMDgtMDYtMjAgMTA6MzI6MzQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZGVzaWduL2RyYWZ0LWZyYW1lc3RlcC50eHQ6IFNvbWUgaWRlYXMgYWJvdXQgYSBmcmFtZXN0ZXAgQVBJCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vZHJhZnQtZnJhbWVzdGVwLnR4dDoKKwkgIFNvbWUgaWRlYXMgYWJvdXQgYSBmcmFtZXN0ZXAgQVBJCisJICAqIGRvY3MvZGVzaWduL3BhcnQtZWxlbWVudC10cmFuc2Zvcm0udHh0OgorCSAgU3RhcnQgZGVzaWduIGFuZCB1c2UgY2FzZXMgZm9yIGJhc2V0cmFuc2Zvcm0gaW4gb3JkZXIgdG8gZ2V0IGl0CisJICBmaXhlZCBzb29uLgorCisyMDA4LTA2LTIwIDEwOjIwOjA4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0YnVzLmM6IE1ha2UgaXQga25vd24gdGhhdCBnc3RfYnVzX3BvbGwoKSBpcyBwdXJlIGV2aWwgKGZpeGVzICM1Mzg4MTApLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RidXMuYzoKKwkgIE1ha2UgaXQga25vd24gdGhhdCBnc3RfYnVzX3BvbGwoKSBpcyBwdXJlIGV2aWwgKGZpeGVzICM1Mzg4MTApLgorCisyMDA4LTA2LTIwIDEwOjE0OjU0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvOiBSZW1vdmUgc2hvcnRfZGVzY3JpcHRpb24uIEFkZCBiYXNpYyBkb2NzIGZvciBnc3R0eXBlZmluZGVsZW1lbnQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSAgUmVtb3ZlIHNob3J0X2Rlc2NyaXB0aW9uLiBBZGQgYmFzaWMgZG9jcyBmb3IgZ3N0dHlwZWZpbmRlbGVtZW50LgorCSAgU2ltcGxpZnkgbWFya3VwIGZvciBmYWtlc3JjL2Zkc3JjLgorCisyMDA4LTA2LTIwIDEwOjA3OjI4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6IEFkZGVkIFNpbmNlIGRvYy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6IChnc3RfZmRfc3JjX2NsYXNzX2luaXQpOgorCSAgQWRkZWQgU2luY2UgZG9jLgorCisyMDA4LTA2LTIwIDEwOjAyOjE0ICswMDAwICBqb2VsIGxhcnNzb24gPHRpbGxqb2VsQGdtYWlsLmNvbT4KKworCSAgQWRkIHRpbWVvdXQgcHJvcGVydHkgbGlrZSB1ZHBzcmMuIEZpeGVzICM1Mzg2MjguCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBqb2VsIGxhcnNzb24gPHRpbGxqb2VsIGF0IGdtYWlsIGRvdCBjb20+CisJICAqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6IChnc3RfZmRfc3JjX2NsYXNzX2luaXQpLAorCSAgKGdzdF9mZF9zcmNfaW5pdCksIChnc3RfZmRfc3JjX3VwZGF0ZV9mZCksCisJICAoZ3N0X2ZkX3NyY19zZXRfcHJvcGVydHkpLCAoZ3N0X2ZkX3NyY19nZXRfcHJvcGVydHkpLAorCSAgKGdzdF9mZF9zcmNfY3JlYXRlKToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5oOgorCSAgQWRkIHRpbWVvdXQgcHJvcGVydHkgbGlrZSB1ZHBzcmMuIEZpeGVzICM1Mzg2MjguCisJICBBZGQgc29tZSBtb3JlIGRvY3MgYW5kIGV4YW1wbGUgcGlwZWxpbmVzLgorCisyMDA4LTA2LTIwIDA4OjU0OjQ1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBBZGQgbWV0aG9kIHRvIGFsbG93IHNpbmtzIHRvIHNwZWNpZnkgYWRkaXRpb25hbCBkZWxheSBiZXR3ZWVuIHRoZSBzeW5jIHRpbWVzIGFuZCB0aGUgYWN0dWFsIHJlbmRlcmluZyBvZiB0aGUgZGF0YS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2luaXQpLAorCSAgKGdzdF9iYXNlX3NpbmtfcXVlcnlfbGF0ZW5jeSksIChnc3RfYmFzZV9zaW5rX3NldF9yZW5kZXJfZGVsYXkpLAorCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3JlbmRlcl9kZWxheSksIChnc3RfYmFzZV9zaW5rX3dhaXRfZW9zKSwKKwkgIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKKwkgIEFkZCBtZXRob2QgdG8gYWxsb3cgc2lua3MgdG8gc3BlY2lmeSBhZGRpdGlvbmFsIGRlbGF5IGJldHdlZW4gdGhlIHN5bmMKKwkgIHRpbWVzIGFuZCB0aGUgYWN0dWFsIHJlbmRlcmluZyBvZiB0aGUgZGF0YS4KKwkgIEFQSTogZ3N0X2Jhc2Vfc2lua19zZXRfcmVuZGVyX2RlbGF5KCkKKwkgIEFQSTogZ3N0X2Jhc2Vfc2lua19nZXRfcmVuZGVyX2RlbGF5KCkKKworMjAwOC0wNi0yMCAwODo0NTowMSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIG51bWJlciBiYWNrIHRvIGRldiAtPiAwLjEwLjIwLjEKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICBCdW1wIHZlcnNpb24gbnVtYmVyIGJhY2sgdG8gZGV2IC0+IDAuMTAuMjAuMQorCisyMDA4LTA2LTIwIDA4OjM5OjU0ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIEFQSTogQWRkIEdTVF9UQUdfQVRUQUNITUVOVCBmb3IgZ2VuZXJpYyBmaWxlIGF0dGFjaG1lbnRzIHRvIHN0cmVhbXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdHRhZ2xpc3QuYzogKF9nc3RfdGFnX2luaXRpYWxpemUpOgorCSAgKiBnc3QvZ3N0dGFnbGlzdC5oOgorCSAgQVBJOiBBZGQgR1NUX1RBR19BVFRBQ0hNRU5UIGZvciBnZW5lcmljIGZpbGUgYXR0YWNobWVudHMgdG8gc3RyZWFtcy4KKwkgIEZpeGVzIGJ1ZyAjNTM4NTY4LgorCisyMDA4LTA2LTIwIDA4OjM2OjQ2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOiBSZXZlcnQgb25lIGNoYW5nZSwgdGhhdCBtYWtlIHJldCB2YWx1ZSBwb3NzaWJsZSB1bmluaXRpYWxpemVkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgorCSAgUmV2ZXJ0IG9uZSBjaGFuZ2UsIHRoYXQgbWFrZSByZXQgdmFsdWUgcG9zc2libGUgdW5pbml0aWFsaXplZC4KKworMjAwOC0wNi0yMCAwODozMjozNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzogVXNlIGZyZWV6ZS90aGF3IG5vdGlmeSB0byBzeW5jIG5vdGlmeSBlbWlzc2lvbiBhIGJpdCAoaXRzIGFsc28gbW9yZSBlZmZpY2llbnQpLiAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKKwkgIFVzZSBmcmVlemUvdGhhdyBub3RpZnkgdG8gc3luYyBub3RpZnkgZW1pc3Npb24gYSBiaXQgKGl0cyBhbHNvIG1vcmUKKwkgIGVmZmljaWVudCkuIE1vdmUgZGVidWcgb3V0cHV0IHRvIExPRyAoaXMgY2FsbGVkIGEgbG90IGluIGEgbG9vcCkuCisJICBBbHdheXMgdW5zZXQgZ192YWx1ZXMgaWYgdGhlIGhhdmUgYmVlbiBpbml0aWFsaXplZC4KKworMjAwOC0wNi0yMCAwODoyODo0NiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBJZiB3ZSBoYXZlIG5vdCBzZWVuIGEgYnVmZmVyIGJlZm9yZSBFT1MsIHVzZSB0aGUgc2VnbWVudCB2YWx1ZXMgdG8gcmVwb3J0IHRoZSBjdXJyZW50IHBvLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19nZXRfc3luY190aW1lcyksCisJICAoZ3N0X2Jhc2Vfc2lua193YWl0X2VvcyksIChnc3RfYmFzZV9zaW5rX2V2ZW50KToKKwkgIElmIHdlIGhhdmUgbm90IHNlZW4gYSBidWZmZXIgYmVmb3JlIEVPUywgdXNlIHRoZSBzZWdtZW50IHZhbHVlcyB0bworCSAgcmVwb3J0IHRoZSBjdXJyZW50IHBvc2l0aW9uIGluc3RlYWQgb2YgaW52YWxpZCBwb3NpdGlvbnMuCisKKzIwMDgtMDYtMjAgMDg6MjE6NDggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgSWdub3JlIG1vcmUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9wbHVnaW5zL3RtcGwvLmN2c2lnbm9yZToKKwkgICogdGVzdHMvY2hlY2svZ3N0Ly5jdnNpZ25vcmU6CisJICBJZ25vcmUgbW9yZS4KKworMjAwOC0wNi0yMCAwODoxNzowOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBSZXdyaXRlIGhhbmRsaW5nIG9mIGRlZmF1bHQgdmFsdWVzLiBGaXggb3ZlcmZsb3cgd2l0aCB1bnNpZ25lZCB0eXBlcyBpbiBsaW5lYXIgaW50ZXJwb2xhdGlvbi4gUmVtb3ZlIG5vdyBvYnNvbGV0ZSBfZmkuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5jOgorCSAgKiB0ZXN0cy9jaGVjay9saWJzL2NvbnRyb2xsZXIuYzoKKwkgIFJld3JpdGUgaGFuZGxpbmcgb2YgZGVmYXVsdCB2YWx1ZXMuIEZpeCBvdmVyZmxvdyB3aXRoIHVuc2lnbmVkIHR5cGVzCisJICBpbiBsaW5lYXIgaW50ZXJwb2xhdGlvbi4gUmVtb3ZlIG5vdyBvYnNvbGV0ZSBfZmlyc3RfdmFsdWUoKSBmdW5jdGlvbi4KKwkgIEFkZCBtb3JlIHRlc3RzLiBGaXhlcyAjNTM4MjAxLgorCisyMDA4LTA2LTIwIDA4OjE0OjIzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogQWRkIGRlYnVnIGluZm8uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NsYXNzX2luaXQpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2luaXQpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV90cmFuc2Zvcm1fY2FwcyksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3ByZXBhcmVfb3V0cHV0X2J1ZmZlcik6CisJICBBZGQgZGVidWcgaW5mby4KKwkgIFdoZW4gYSBidWZmZXIgaXMgd3JpdGFibGUsIGl0cyBtZXRhZGF0YSBpcyBhbHNvIHdyaXRhYmxlIHNvIHdlIGRvbid0CisJICBuZWVkIHRvIHN1YmJ1ZmZlciAod2hpY2ggdGhlbiBtYWtlcyB0aGUgYnVmZmVyIG5vdC13cml0YWJsZSBhbnltb3JlKS4KKworPT09IHJlbGVhc2UgMC4xMC4yMCA9PT0KKworMjAwOC0wNi0xOCAxMDo1ODozNSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkqIENoYW5nZUxvZzoKKwkqIE5FV1M6CisJKiBSRUxFQVNFOgorCSogY29uZmlndXJlLmFjOgorCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmFyZ3M6CisJKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuaGllcmFyY2h5OgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKKwkqIGdzdHJlYW1lci5kb2FwOgorCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgorCSAgUmVsZWFzZSAwLjEwLjIwCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFJlbGVhc2UgMC4xMC4yMAorCisyMDA4LTA2LTE4IDEwOjU2OjE4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSogcG8vYWYucG86CisJKiBwby9hei5wbzoKKwkqIHBvL2JlLnBvOgorCSogcG8vYmcucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGEucG86CisJKiBwby9kZS5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZXMucG86CisJKiBwby9maS5wbzoKKwkqIHBvL2ZyLnBvOgorCSogcG8vaHUucG86CisJKiBwby9pdC5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9wbC5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vcncucG86CisJKiBwby9zay5wbzoKKwkqIHBvL3NxLnBvOgorCSogcG8vc3IucG86CisJKiBwby9zdi5wbzoKKwkqIHBvL3RyLnBvOgorCSogcG8vdWsucG86CisJKiBwby92aS5wbzoKKwkqIHBvL3poX0NOLnBvOgorCSogcG8vemhfVFcucG86CisJICBVcGRhdGUgLnBvIGZpbGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFVwZGF0ZSAucG8gZmlsZXMKKworMjAwOC0wNi0xMSAyMToxNDoxNyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGNvbmZpZ3VyZS5hYzogMC4xMC4xOS4zIHByZS1yZWxlYXNlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgMC4xMC4xOS4zIHByZS1yZWxlYXNlCisKKzIwMDgtMDYtMTEgMjA6MDc6MzEgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJICBSZW5hbWUgREFUQURJUiB0byBHU1RfREFUQURJUiB0byBhdm9pZCBidWlsZCBwcm9ibGVtcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgICogZ3N0L2dzdHByZXNldC5jOgorCSAgUmVuYW1lIERBVEFESVIgdG8gR1NUX0RBVEFESVIgdG8gYXZvaWQgYnVpbGQgcHJvYmxlbXMKKwkgIG9uIHdpbjMyLiBQYXRjaCBCeTogRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisJICBGaXhlczogIzUzNjg1NworCisyMDA4LTA2LTA1IDEwOjEzOjQ1ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIGNvbmZpZ3VyZS5hYzogRXhwbGljaXRlbHkgbGluayB3aXRoIC1sZGwgaWYgZGxhZGRyKCkgaXMgZm91bmQgdGhlcmUuIEJlZm9yZSBpdCB3YXMgaW1wbGljaXRlbHkgbGlua2VkIGJ5IHRoZSBnbW9kdWxlIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgIEV4cGxpY2l0ZWx5IGxpbmsgd2l0aCAtbGRsIGlmIGRsYWRkcigpIGlzIGZvdW5kIHRoZXJlLiBCZWZvcmUgaXQgd2FzCisJICBpbXBsaWNpdGVseSBsaW5rZWQgYnkgdGhlIGdtb2R1bGUgcGtnY29uZmlnIGZpbGUgYnV0IGluIGdsaWIgMi4xNy4wCisJICAtbGRsIGhhcyBtb3ZlZCBmcm9tIExpYnMgdG8gTGlicy5wcml2YXRlLiBGaXhlcyBidWcgIzUzNjc0NC4KKworMjAwOC0wNi0wNSAwOTo0MjozMSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkqIENoYW5nZUxvZzoKKwkgIFB1dCBwcmUtcmVsZWFzZSBjaGFuZWdsb2cgZW50cnkgd2hlcmUgaXQgYWN0dWFsbHkgaGFwcGVuZWQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUHV0IHByZS1yZWxlYXNlIGNoYW5lZ2xvZyBlbnRyeSB3aGVyZSBpdCBhY3R1YWxseSBoYXBwZW5lZAorCisyMDA4LTA2LTA1IDA5OjQxOjI1ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgY29uZmlndXJlLmFjOiAwLjEwLjE5LjIgcHJlLXJlbGVhc2UKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICAwLjEwLjE5LjIgcHJlLXJlbGVhc2UKKworMjAwOC0wNi0wNSAwODo1NTo0MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdGVycm9yLmM6IEZpeCB0eXBvIChzcG90dGVkIGJ5IEZhYnJpY2lvIEdvZG95LCAjNTM2NzIzKS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZXJyb3IuYzogKF9nc3Rfc3RyZWFtX2Vycm9yc19pbml0KToKKwkgIEZpeCB0eXBvIChzcG90dGVkIGJ5IEZhYnJpY2lvIEdvZG95LCAjNTM2NzIzKS4KKworMjAwOC0wNi0wNCAxMTo0NzoxNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBBZGQgc29tZSBkZWJ1Zy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX3NldF9hc3luY19lbmFibGVkKSwKKwkgIChnc3RfYmFzZV9zaW5rX3NldF90c19vZmZzZXQpLCAoZ3N0X2Jhc2Vfc2lua19wZXJmb3JtX3Fvcyk6CisJICBBZGQgc29tZSBkZWJ1Zy4KKwkgIE1ha2Ugc3VyZSB3ZSBkb24ndCBnZW5lcmF0ZSBpbnZhbGlkIFFvUyBtZXNzYWdlcy4KKworMjAwOC0wNi0wNCAxMTozMToxNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGV2ZW50LmM6IEFkZCBzb21lIGFzc2VydCBhbmQgZG9jcyBmb3IgaW52YWxpZCBpbnB1dCB0byB0aGUgcW9zIGZ1bmN0aW9uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RldmVudC5jOiAoZ3N0X2V2ZW50X25ld19xb3MpOgorCSAgQWRkIHNvbWUgYXNzZXJ0IGFuZCBkb2NzIGZvciBpbnZhbGlkIGlucHV0IHRvIHRoZSBxb3MgZnVuY3Rpb24uCisKKzIwMDgtMDUtMzAgMTU6NDg6NTIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogVGhlIHJlcG9ydGVkIHBvc2l0aW9uIG11c3QgYWx3YXlzIGJlIHNtYWxsZXIgdGhhbiB0aGUgbGFzdCBzZWVuIHRpbWVzdGFtcHMgKG9yIHRpbWVzdGFtcC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZ2V0X3N5bmNfdGltZXMpLAorCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uKToKKwkgIFRoZSByZXBvcnRlZCBwb3NpdGlvbiBtdXN0IGFsd2F5cyBiZSBzbWFsbGVyIHRoYW4gdGhlIGxhc3Qgc2VlbgorCSAgdGltZXN0YW1wcyAob3IgdGltZXN0YW1wICsgZHVyYXRpb24gZm9yIHJldmVyc2UpLgorCisyMDA4LTA1LTMwIDA3OjM2OjE3ICswMDAwICBSb2IgQnJhZGZvcmQgPHJvYkByb2JzdGVyLm9yZy51az4KKworCSAgZ3N0L2dzdHJlZ2lzdHJ5LmM6IERvbid0IHJlY3Vyc2UgaW50byAuZGVidWcgZGlyZWN0b3JpZXMgYXMgc29tZSBkaXN0cm9zIGluc3RhbGwgdGhlIGRlYnVnZ2luZyBzeW1ib2xzIG5leHQgdG8gdGhlIHBsLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBSb2IgQnJhZGZvcmQgPHJvYiBhdCByb2JzdGVyIGRvdCBvcmcgZG90IHVrPgorCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzogKGdzdF9yZWdpc3RyeV9zY2FuX3BhdGhfbGV2ZWwpOgorCSAgRG9uJ3QgcmVjdXJzZSBpbnRvIC5kZWJ1ZyBkaXJlY3RvcmllcyBhcyBzb21lIGRpc3Ryb3MgaW5zdGFsbAorCSAgdGhlIGRlYnVnZ2luZyBzeW1ib2xzIG5leHQgdG8gdGhlIHBsdWdpbnMgaW4gLmRlYnVnIGRpcmVjdG9yaWVzCisJICBhbmQgZGxvcGVuKCkgY3Jhc2hlcyBvbiB0aGVtIHNvbWV0aW1lcy4gRml4ZXMgYnVnICM1MDgwNzAuCisJICBBZGQgRklYTUUgZm9yIDAuMTEgdG8gbm90IHJlY3Vyc2UgaW50byBkaXJlY3RvcmllcyBhdCBhbGwgYmVjYXVzZQorCSAgaXQncyB2ZXJ5IGluY29uc2lzdGVudCB0byB0aGUgYmVoYXZpb3VyIG9mIG90aGVyIFBBVEggZW52aXJvbm1lbnQKKwkgIHZhcmlhYmxlcy4KKworMjAwOC0wNS0yOSAxNjozNDoyMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBGaXggcG9zaXRpb24gcXVlcnkgcmFuZ2UgY2hlY2tzIGluIHJldmVyc2UgcGxheWJhY2suCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19nZXRfc3luY190aW1lcyksCisJICAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb25fbGFzdCksIChnc3RfYmFzZV9zaW5rX2dldF9wb3NpdGlvbik6CisJICBGaXggcG9zaXRpb24gcXVlcnkgcmFuZ2UgY2hlY2tzIGluIHJldmVyc2UgcGxheWJhY2suCisKKzIwMDgtMDUtMjkgMDc6MTk6NDcgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgZ3N0L2dzdGVsZW1lbnQuKjogRGVwcmVjYXRlZCBnc3RfZWxlbWVudF9nZXRfcGFkKCkgYXMgaXQgY2FuJ3QgYmUgdXNlZCBzYW5lbHkuIEl0J3Mgbm90IGNsZWFyIG9mIHRoZSByZWZlcmVuY2UgdG8gdGhlLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzoKKwkgICogZ3N0L2dzdGVsZW1lbnQuaDoKKwkgIERlcHJlY2F0ZWQgZ3N0X2VsZW1lbnRfZ2V0X3BhZCgpIGFzIGl0IGNhbid0IGJlIHVzZWQgc2FuZWx5LiBJdCdzIG5vdAorCSAgY2xlYXIgb2YgdGhlIHJlZmVyZW5jZSB0byB0aGUgcmVzdWx0aW5nIHBhZCBtdXN0IGJlIHJlbGVhc2VkIGxhdGVyCisJICBvciBub3QsIHJlc3VsdGluZyBpbiBwb3NzaWJsZSBsZWFrcy4gRml4ZXMgYnVnICM1MzM4NjUuCisKKzIwMDgtMDUtMjggMTY6NDY6MDcgKzAwMDAgIEpvc8OpIEFsYnVycXVlcnF1ZSA8amFhbGJ1cnF1QHN2bi5nbm9tZS5vcmc+CisKKwkgIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOiBTbWFsbCBkb2MgZml4LiBGaXhlcyAjNTM1Mjg1LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogSm9zw6kgQWxidXJxdWVycXVlIDxqYWFsYnVycXUgYXQgc3ZuIGRvdCBnbm9tZSBkb3Qgb3JnPgorCSAgKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKKwkgIFNtYWxsIGRvYyBmaXguIEZpeGVzICM1MzUyODUuCisKKzIwMDgtMDUtMjggMTM6NDg6MTcgKzAwMDAgIEJqYXJuZSBSb3NlbmdyZW4gPGJqYXJuZUBheGlzLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IE1ha2Ugc2VuZGluZyBhbiBFT1MgZXZlbnQgdG8gdGhlIGJhc2VzcmMgbm9uLWJsb2NraW5nIGV2ZW4gaWYgdGhlIGltcGxlbWVudGF0aW9uIGRvZXMgYmxvLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIEJhc2VkIG9uIHBhdGNoIGJ5OiBCamFybmUgUm9zZW5ncmVuIDxiamFybmUgYXQgYXhpcyBkb3QgY29tPgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19zZW5kX2V2ZW50KSwKKwkgIChnc3RfYmFzZV9zcmNfZ2V0X3JhbmdlKSwgKGdzdF9iYXNlX3NyY19wYWRfZ2V0X3JhbmdlKSwKKwkgIChnc3RfYmFzZV9zcmNfbG9vcCksIChnc3RfYmFzZV9zcmNfc2V0X2ZsdXNoaW5nKSwKKwkgIChnc3RfYmFzZV9zcmNfY2hhbmdlX3N0YXRlKToKKwkgIE1ha2Ugc2VuZGluZyBhbiBFT1MgZXZlbnQgdG8gdGhlIGJhc2VzcmMgbm9uLWJsb2NraW5nIGV2ZW4gaWYgdGhlCisJICBpbXBsZW1lbnRhdGlvbiBkb2VzIGJsb2NraW5nIHdhaXRzIGluIHRoZSBjcmVhdGUgZnVuY3Rpb24uIFRoaXMgaXMgZG9uZQorCSAgYnkgdW5sb2NraW5nIHRoZSBjcmVhdGUgZnVuY3Rpb24gd2hlbiBFT1MgaXMgc2VudC4KKwkgIEZpeGVzICM1MzUyMTguCisKKzIwMDgtMDUtMjggMTA6NDQ6MTUgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgdG9vbHMvZ3N0LWluc3BlY3QuYzogSWYgcG9zc2libGUgcHJpbnQgdGhlIGVsZW1lbnQgdHlwZSBvZiBHVmFsdWVBcnJheSBwcm9wZXJ0aWVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1pbnNwZWN0LmM6IChwcmludF9lbGVtZW50X3Byb3BlcnRpZXNfaW5mbyk6CisJICBJZiBwb3NzaWJsZSBwcmludCB0aGUgZWxlbWVudCB0eXBlIG9mIEdWYWx1ZUFycmF5IHByb3BlcnRpZXMuCisKKzIwMDgtMDUtMjggMDc6NDc6MjIgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgZ3N0L2dzdGl0ZXJhdG9yLmM6IFJlbW92ZSBhbiB1bnVzZWQgZmllbGQgZnJvbSB0aGUgcHJpdmF0ZSBHc3RMaXN0SXRlcmF0b3Igc3RydWN0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RpdGVyYXRvci5jOgorCSAgUmVtb3ZlIGFuIHVudXNlZCBmaWVsZCBmcm9tIHRoZSBwcml2YXRlIEdzdExpc3RJdGVyYXRvciBzdHJ1Y3QuCisKKzIwMDgtMDUtMjcgMjA6MTk6MTcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6IEFkZCBwYXJhbWV0ZXIgZ3VhcmRzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgorCSAgQWRkIHBhcmFtZXRlciBndWFyZHMuCisKKzIwMDgtMDUtMjcgMTk6NDc6NDkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgdGVzdHMvY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmM6IFJldmVydCB0ZXN0IGNoYW5nZSBhbmQgYWRkIGNvbW1lbnQgd2h5IGl0IHNob3VsZCBub3Qgd29yay4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzoKKwkgIFJldmVydCB0ZXN0IGNoYW5nZSBhbmQgYWRkIGNvbW1lbnQgd2h5IGl0IHNob3VsZCBub3Qgd29yay4KKworMjAwOC0wNS0yNyAxODozMTozOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICB0ZXN0cy9jaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzogRXh0ZW5kaW5nIHRoZSB0ZXN0IGEgbGl0dGxlIHRvIHZlcmlmeSB0aGF0IHdlIGFsc28gZ2V0IHRoZSBOVUxMIHN0YXRlLSBjaGFuZ2UgbWVzc2FnZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzoKKwkgIEV4dGVuZGluZyB0aGUgdGVzdCBhIGxpdHRsZSB0byB2ZXJpZnkgdGhhdCB3ZSBhbHNvIGdldCB0aGUgTlVMTCBzdGF0ZS0KKwkgIGNoYW5nZSBtZXNzYWdlLgorCisyMDA4LTA1LTI3IDE2OjM3OjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0cHJlc2V0LmM6IEFkZCBTaW5jZTogbWFya2VycyB0byBkb2NzIGJsdXJicy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cHJlc2V0LmM6IChnc3RfcHJlc2V0X2RlZmF1bHRfZ2V0X21ldGEpLAorCSAgKGdzdF9wcmVzZXRfZ2V0X3ByZXNldF9uYW1lcyksIChnc3RfcHJlc2V0X2dldF9wcm9wZXJ0eV9uYW1lcyksCisJICAoZ3N0X3ByZXNldF9sb2FkX3ByZXNldCksIChnc3RfcHJlc2V0X3NhdmVfcHJlc2V0KSwKKwkgIChnc3RfcHJlc2V0X3JlbmFtZV9wcmVzZXQpLCAoZ3N0X3ByZXNldF9kZWxldGVfcHJlc2V0KSwKKwkgIChnc3RfcHJlc2V0X3NldF9tZXRhKToKKwkgIEFkZCBTaW5jZTogbWFya2VycyB0byBkb2NzIGJsdXJicy4KKwkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBBZGQgcmVjZW50bHktYWRkZWQgQVBJLgorCisyMDA4LTA1LTI3IDE1OjExOjM1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkgIGNvbmZpZ3VyZS5hYzogQWRkIERBVEFESVIgZm9yIHN0b3JpbmcgcHJlc2V0cy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgIEFkZCBEQVRBRElSIGZvciBzdG9yaW5nIHByZXNldHMuCisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlcy5pbjoKKwkgIEFkZCBHc3RQcmVzZXQgdG8gZG9jcy4KKwkgICogZ3N0L01ha2VmaWxlLmFtOgorCSAgKiBnc3QvZ3N0Lmg6CisJICAqIGdzdC9nc3RwcmVzZXQuYzogKHByZXNldF9nZXRfcGF0aHMpLCAocHJlc2V0X3NraXBfcHJvcGVydHkpLAorCSAgKHByZXNldF9vcGVuX2FuZF9wYXJzZV9oZWFkZXIpLCAocHJlc2V0X3BhcnNlX3ZlcnNpb24pLAorCSAgKHByZXNldF9tZXJnZSksIChwcmVzZXRfZ2V0X2tleWZpbGUpLAorCSAgKGdzdF9wcmVzZXRfZGVmYXVsdF9nZXRfcHJlc2V0X25hbWVzKSwKKwkgIChnc3RfcHJlc2V0X2RlZmF1bHRfZ2V0X3Byb3BlcnR5X25hbWVzKSwKKwkgIChnc3RfcHJlc2V0X2RlZmF1bHRfbG9hZF9wcmVzZXQpLAorCSAgKGdzdF9wcmVzZXRfZGVmYXVsdF9zYXZlX3ByZXNldHNfZmlsZSksCisJICAoZ3N0X3ByZXNldF9kZWZhdWx0X3NhdmVfcHJlc2V0KSwKKwkgIChnc3RfcHJlc2V0X2RlZmF1bHRfcmVuYW1lX3ByZXNldCksCisJICAoZ3N0X3ByZXNldF9kZWZhdWx0X2RlbGV0ZV9wcmVzZXQpLCAoZ3N0X3ByZXNldF9kZWZhdWx0X3NldF9tZXRhKSwKKwkgIChnc3RfcHJlc2V0X2RlZmF1bHRfZ2V0X21ldGEpLCAoZ3N0X3ByZXNldF9kZWZhdWx0X3JhbmRvbWl6ZSksCisJICAoZ3N0X3ByZXNldF9kZWZhdWx0X3Jlc2V0KSwgKGdzdF9wcmVzZXRfZ2V0X3ByZXNldF9uYW1lcyksCisJICAoZ3N0X3ByZXNldF9nZXRfcHJvcGVydHlfbmFtZXMpLCAoZ3N0X3ByZXNldF9sb2FkX3ByZXNldCksCisJICAoZ3N0X3ByZXNldF9zYXZlX3ByZXNldCksIChnc3RfcHJlc2V0X3JlbmFtZV9wcmVzZXQpLAorCSAgKGdzdF9wcmVzZXRfZGVsZXRlX3ByZXNldCksIChnc3RfcHJlc2V0X3NldF9tZXRhKSwKKwkgIChnc3RfcHJlc2V0X2dldF9tZXRhKSwgKGdzdF9wcmVzZXRfY2xhc3NfaW5pdCksCisJICAoZ3N0X3ByZXNldF9iYXNlX2luaXQpLCAoZ3N0X3ByZXNldF9nZXRfdHlwZSk6CisJICAqIGdzdC9nc3RwcmVzZXQuaDoKKwkgIEFkZCBHc3RQcmVzZXQgdG8gY29yZS4gRml4ZXMgIzM5Njc3OQorCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHByZXNldC5jOiAoZ3N0X3ByZXNldF90ZXN0X2dldF9wcm9wZXJ0eSksCisJICAoZ3N0X3ByZXNldF90ZXN0X3NldF9wcm9wZXJ0eSksIChnc3RfcHJlc2V0X3Rlc3RfY2xhc3NfaW5pdCksCisJICAoZ3N0X3ByZXNldF90ZXN0X2Jhc2VfaW5pdCksIChnc3RfcHJlc2V0X3Rlc3RfZ2V0X3R5cGUpLAorCSAgKGdzdF9wcmVzZXRfdGVzdF9wbHVnaW5faW5pdCksIChHU1RfU1RBUlRfVEVTVCksCisJICAocmVtb3ZlX3ByZXNldF9maWxlKSwgKHRlc3Rfc2V0dXApLCAodGVzdF90ZWFyZG93biksCisJICAoZ3N0X3ByZXNldF9zdWl0ZSk6CisJICBBZGQgR3N0UHJlc2V0IHVuaXQgdGVzdHMuCisKKzIwMDgtMDUtMjcgMTA6NTk6MzggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RwYWQuYzogVGhlIGRlZmF1bHQgZXZlbnQgZnVuY3Rpb24gb24gYSBzaW5rcGFkIHNob3VsZCByZXR1cm4gVFJVRSB3aGVuIHRoZXJlIGFyZSBubyBpbnRlcm5hbCBsaW5rcyBidXQgc2hvdWxkIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfZXZlbnRfZGVmYXVsdF9kaXNwYXRjaCk6CisJICBUaGUgZGVmYXVsdCBldmVudCBmdW5jdGlvbiBvbiBhIHNpbmtwYWQgc2hvdWxkIHJldHVybiBUUlVFIHdoZW4KKwkgIHRoZXJlIGFyZSBubyBpbnRlcm5hbCBsaW5rcyBidXQgc2hvdWxkIGNvbGxlY3QgdGhlIHJldHVybiB2YWx1ZXMgZnJvbQorCSAgdGhlIGludGVybmFsIGxpbmtzIG90aGVyd2lzZS4KKworMjAwOC0wNS0yNyAxMDo1NzoxMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogVXNlIGZhc3RlciBhbmQgc2FmZXIgX3BhZF9wdXNoX2V2ZW50KCkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfc3JjX2V2ZW50KSwKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfaGFuZGxlX2V2ZW50KToKKwkgIFVzZSBmYXN0ZXIgYW5kIHNhZmVyIF9wYWRfcHVzaF9ldmVudCgpLgorCisyMDA4LTA1LTI3IDEwOjUwOjQ5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBBUEk6IGFkZCBnc3RfYmluX2ZpbmRfdW5saW5rZWRfcGFkKCkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGVsZW1lbnRfZmluZF91bmxpbmtlZF9wYWQpLAorCSAgKGdzdF9iaW5fZmluZF91bmxpbmtlZF9wYWQpLCAoZ3N0X2Jpbl9maW5kX3VuY29ubmVjdGVkX3BhZCksCisJICAqIGdzdC9nc3R1dGlscy5oOgorCSAgQVBJOiBhZGQgZ3N0X2Jpbl9maW5kX3VubGlua2VkX3BhZCgpCisJICBBUEk6IGRlcHJlY2F0ZSBnc3RfYmluX2ZpbmRfdW5jb25uZWN0ZWRfcGFkKCkgKCM0MDE0NTYpCisKKzIwMDgtMDUtMjYgMTA6MDc6MDkgKzAwMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgorCisJICBnc3QvOiBGaXhlZCBhIGJ1bmNoIG9mIHR5cG9zLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RjbG9jay5jOgorCSAgKiBnc3QvZ3N0Y2xvY2suaDoKKwkgICogZ3N0L2dzdHRhc2suYzoKKwkgICogZ3N0L2dzdHRhc2suaDoKKwkgIEZpeGVkIGEgYnVuY2ggb2YgdHlwb3MuCisKKzIwMDgtMDUtMjUgMTY6MzQ6MzIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC86ICd1bmNvbm5lY3RlZCBwYWQnIC0+ICd1bmxpbmtlZCBwYWQnIGZvciBjb25zaXN0ZW5jeSAoIzQwMTQ1NikuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBhZC5oOgorCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9lbGVtZW50X3VubGluayksIChlbGVtZW50X2ZpbmRfdW5saW5rZWRfcGFkKSwKKwkgIChnc3RfYmluX2ZpbmRfdW5jb25uZWN0ZWRfcGFkKSwgKGdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbiksCisJICAoZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uX2Z1bGwpOgorCSAgKiBnc3QvZ3N0dXRpbHMuaDoKKwkgICd1bmNvbm5lY3RlZCBwYWQnIC0+ICd1bmxpbmtlZCBwYWQnIGZvciBjb25zaXN0ZW5jeSAoIzQwMTQ1NikuCisKKzIwMDgtMDUtMjUgMTY6MTM6MzggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGRvY3MvcHdnL2FkdmFuY2VkLXRhZ2dpbmcueG1sOiBTbWFsbCBkb2NzIHVwZGF0ZSwgY2FuJ3QgYmUgYm90aGVyZWQgdG8gcmV3cml0ZSB0aGUgbm9uc2Vuc2ljYWwgZXhhbXBsZXMgcmlnaHQgbm93LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcHdnL2FkdmFuY2VkLXRhZ2dpbmcueG1sOgorCSAgU21hbGwgZG9jcyB1cGRhdGUsIGNhbid0IGJlIGJvdGhlcmVkIHRvIHJld3JpdGUgdGhlIG5vbnNlbnNpY2FsCisJICBleGFtcGxlcyByaWdodCBub3cuCisKKzIwMDgtMDUtMjUgMTQ6NDQ6NDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RldmVudC5oOiBDbGFyaWZ5IGRvY3MgZm9yIEdTVF9TRUVLX1RZUEVfQ1VSICgjNTM0NTA1KS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKKwkgIENsYXJpZnkgZG9jcyBmb3IgR1NUX1NFRUtfVFlQRV9DVVIgKCM1MzQ1MDUpLgorCisyMDA4LTA1LTI1IDE0OjEzOjIyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvcGFyc2UvZ3JhbW1hci55OiBSZW1vdmUgdW5uZWVkZWQgY2FzdHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L3BhcnNlL2dyYW1tYXIueToKKwkgIFJlbW92ZSB1bm5lZWRlZCBjYXN0cy4KKworMjAwOC0wNS0yNSAxMzo1NjozOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgR2V0IGFsbCBtaXNzaW5nIGVsZW1lbnRzIGZyb20gYSBwYXJzZSBsYXVuY2ggc3RyaW5nIGlmIHBvc3NpYmxlIChpZS4gaWYgdGhlIEZBVEFMX0VSUk9SUyBmbGFnIGhhcyBiZWVuIHNwZWNpZmllZCkuIEZpLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L3BhcnNlL2dyYW1tYXIueToKKwkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOgorCSAgR2V0IGFsbCBtaXNzaW5nIGVsZW1lbnRzIGZyb20gYSBwYXJzZSBsYXVuY2ggc3RyaW5nIGlmIHBvc3NpYmxlCisJICAoaWUuIGlmIHRoZSBGQVRBTF9FUlJPUlMgZmxhZyBoYXMgYmVlbiBzcGVjaWZpZWQpLiBGaXhlcyAjNTI4MTc4LgorCisyMDA4LTA1LTI0IDE2OjM4OjE1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICB0ZXN0cy9jaGVjay86IEFkZCBzb21lIHVuaXQgdGVzdHMgZm9yIHRoZSBuZXcgZ3N0X3BhcnNlX2xhdW5jaCpfZnVsbCgpIEFQSS4gKEV4cG9zZXMgYSBwcmV2aW91c2x5LWV4aXN0aW5nIG1lbW9yeSBsZWEuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOgorCSAgQWRkIHNvbWUgdW5pdCB0ZXN0cyBmb3IgdGhlIG5ldyBnc3RfcGFyc2VfbGF1bmNoKl9mdWxsKCkgQVBJLgorCSAgKEV4cG9zZXMgYSBwcmV2aW91c2x5LWV4aXN0aW5nIG1lbW9yeSBsZWFrIGluIHRoZSBlcnJvciBjb2RlCisJICBwYXRoLCBzbyBhZGRpbmcgdG8gVkFMR1JJTkRfVE9fRklYIGZvciBub3cpLgorCisyMDA4LTA1LTI0IDE1OjMzOjUzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBBUEk6IGdzdF9wYXJzZV9sYXVuY2hfZnVsbCgpCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdC5jOiAoaW5pdF9wb3N0KToKKwkgICogZ3N0L2dzdF9wcml2YXRlLmg6IChfR3N0UGFyc2VDb250ZXh0KToKKwkgICogZ3N0L2dzdHBhcnNlLmM6IChnc3RfcGFyc2VfZXJyb3JfcXVhcmspLCAoZ3N0X3BhcnNlX2NvbnRleHRfbmV3KSwKKwkgIChnc3RfcGFyc2VfY29udGV4dF9mcmVlKSwgKGdzdF9wYXJzZV9jb250ZXh0X2dldF9taXNzaW5nX2VsZW1lbnRzKSwKKwkgIChnc3RfcGFyc2VfbGF1bmNodiksIChnc3RfcGFyc2VfbGF1bmNodl9mdWxsKSwgKGdzdF9wYXJzZV9sYXVuY2gpLAorCSAgKGdzdF9wYXJzZV9sYXVuY2hfZnVsbCk6CisJICAqIGdzdC9nc3RwYXJzZS5oOiAoR1NUX1BBUlNFX0ZMQUdfTk9ORSksIChHU1RfUEFSU0VfRkxBR19GQVRBTF9FUlJPUlMpLAorCSAgKEdzdFBhcnNlRmxhZ3MpLCAoR3N0UGFyc2VDb250ZXh0KToKKwkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb24pLAorCSAgKGdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbl9mdWxsKToKKwkgICogZ3N0L2dzdHV0aWxzLmg6CisJICAqIGdzdC9wYXJzZS9ncmFtbWFyLnk6CisJICAqIGdzdC9wYXJzZS90eXBlcy5oOgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIEFkZCBuZXcgZ3N0X3BhcnNlXypfZnVsbCBBUEkgKCM1MjgxNzgpOgorCSAgQVBJOiBnc3RfcGFyc2VfbGF1bmNoX2Z1bGwoKQorCSAgQVBJOiBnc3RfcGFyc2VfbGF1bmNodl9mdWxsKCkKKwkgIEFQSTogZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uX2Z1bGwoKQorCSAgQVBJOiBnc3RfcGFyc2VfY29udGV4dF9uZXcoKQorCSAgQVBJOiBnc3RfcGFyc2VfY29udGV4dF9mcmVlKCkKKwkgIEFQSTogZ3N0X3BhcnNlX2NvbnRleHRfZ2V0X21pc3NpbmdfZWxlbWVudHMoKQorCisyMDA4LTA1LTIzIDA2OjUwOjEwICswMDAwICBTdXJlc2ggS3VtYXIgUCA8c3VyZXNoa3VtYXIucHBAZ21haWwuY29tPgorCisJICBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6IEFsc28gc3VwcG9ydCBmZm1wZWcgaW4gZ3N0LXVuaW5zdGFsbGVkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBwYXRjaCBieTogU3VyZXNoIEt1bWFyIFAgPHN1cmVzaGt1bWFyLnBwQGdtYWlsLmNvbT4KKwkgICogZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOgorCSAgQWxzbyBzdXBwb3J0IGZmbXBlZyBpbiBnc3QtdW5pbnN0YWxsZWQuCisKKzIwMDgtMDUtMjIgMjA6Mjk6MjAgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgY29uZmlndXJlLmFjOiBBZnRlciBkaXNjdXNzaW9uIG9uIElSQyB1c2UgdGhlIGJpbmFyeSByZWdpc3RyeSBhcyBkZWZhdWx0IGJ1dCBhbGxvdyB0byBkaXNhYmxlIGl0IHdpdGggLS1kaXNhYmxlLWJpbmFyLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgQWZ0ZXIgZGlzY3Vzc2lvbiBvbiBJUkMgdXNlIHRoZSBiaW5hcnkgcmVnaXN0cnkgYXMgZGVmYXVsdAorCSAgYnV0IGFsbG93IHRvIGRpc2FibGUgaXQgd2l0aCAtLWRpc2FibGUtYmluYXJ5LXJlZ2lzdHJ5LgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIEFkZCB0aGUgdHdvIG5ldyBzeW1ib2xzIGZvciB0aGUgYmluYXJ5IHJlZ2lzdHJ5LgorCisyMDA4LTA1LTIyIDE1OjM4OjU0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvOiBNb3JlIGd1YXJkcyBhZ2FpbnN0IGJhZCBpbnB1dDsgdHlwbyBmaXg7IHNvbWUgbWlub3IgY2xlYW4tdXBzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYXJzZS5jOiAoX2dzdF9wYXJzZV9lc2NhcGUpLCAoZ3N0X3BhcnNlX2xhdW5jaHYpOgorCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbik6CisJICAqIGdzdC9wYXJzZS9ncmFtbWFyLnk6IChncmFwaCk6CisJICBNb3JlIGd1YXJkcyBhZ2FpbnN0IGJhZCBpbnB1dDsgdHlwbyBmaXg7IHNvbWUgbWlub3IgY2xlYW4tdXBzLgorCisyMDA4LTA1LTIyIDA4OjMzOjI3ICswMDAwICBTam9lcmQgU2ltb25zIDxzam9lcmRAbHVvbi5uZXQ+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogSWYgbm90aGluZyBlbHNlIGNhbiBiZSB1c2VkLCB1c2UgdGhlIGxhc3QgYnVmZmVyJ3Mgc3RhcnQgdGltZSBhcyB0aGUgc2VnbWVudCdzIGxhc3Qgc3RvcC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogU2pvZXJkIFNpbW9ucyA8c2pvZXJkIGF0IGx1b24gZG90IG5ldD4KKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19nZXRfc3luY190aW1lcyk6CisJICBJZiBub3RoaW5nIGVsc2UgY2FuIGJlIHVzZWQsIHVzZSB0aGUgbGFzdCBidWZmZXIncyBzdGFydCB0aW1lIGFzCisJICB0aGUgc2VnbWVudCdzIGxhc3Qgc3RvcC4gRml4ZXMgYnVnICM1MzQyNTguCisKKzIwMDgtMDUtMjEgMTg6MzM6MDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RwYWQuYzogTW92ZSBzaXplIHNhbml0eSBjaGVjayB0byB0aGUgcmlnaHQgcGxhY2U6IGRvd25zdHJlYW0gbWF5IHJldHVybiBhIGJ1ZmZlciB3aXRoIGEgc21hbGxlciBzaXplIGlmIHRoZSBidS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfYWxsb2NfYnVmZmVyX2Z1bGwpOgorCSAgTW92ZSBzaXplIHNhbml0eSBjaGVjayB0byB0aGUgcmlnaHQgcGxhY2U6IGRvd25zdHJlYW0gbWF5IHJldHVybgorCSAgYSBidWZmZXIgd2l0aCBhIHNtYWxsZXIgc2l6ZSBpZiB0aGUgYnVmZmVyIGNhcHMgYXJlIGRpZmZlcmVudCB0aGFuCisJICB0aGUgcmVxdWVzdGVkIG9uZXMsIGFzIG1heSBoYXBwZW4gd2hlbiBkb2luZyByZXZlcnNlIG5lZ290aWF0aW9uLgorCisyMDA4LTA1LTIxIDE2OjA2OjUzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzLzogU21hbGwgY2xlYW51cHMuIEFkZCBub3RlIGFkYm91dCBnX2ZvcGVuKCkgb24gd2luZG93cyBhbmQgd2h5IHdlIGRvbid0IHVzZSBpdCB5ZXQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOiAoZ3N0X2ZpbGVfc2lua19zZXRfbG9jYXRpb24pLAorCSAgKGdzdF9maWxlX3NpbmtfcmVuZGVyKToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IChnc3RfZmlsZV9zcmNfc2V0X2xvY2F0aW9uKSwKKwkgIChnc3RfZmlsZV9zcmNfc3RhcnQpOgorCSAgU21hbGwgY2xlYW51cHMuIEFkZCBub3RlIGFkYm91dCBnX2ZvcGVuKCkgb24gd2luZG93cyBhbmQgd2h5IHdlIGRvbid0CisJICB1c2UgaXQgeWV0LgorCisyMDA4LTA1LTIxIDE1OjU3OjUyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBEb24ndCB1c2UgZ3N0X2VsZW1lbnRfZ2V0X3BhZCgpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfbG9hZF9hbmRfbGluayk6CisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X2VsZW1lbnRfbGlua19wYWRzKSwKKwkgIChnc3RfZWxlbWVudF91bmxpbmtfcGFkcyk6CisJICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6IChnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCksCisJICAoZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQpLCAoZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkKSwKKwkgIChnc3RfY2hlY2tfdGVhcmRvd25fc2lua19wYWQpLAorCSAgKGdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVyX2xpc3QpOgorCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc2luay5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc2luay5jOgorCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc3JjLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpcXVldWUuYzogKHNldHVwX211bHRpcXVldWUpLAorCSAgKG1xX3NpbmtwYWRfdG9fc3JjcGFkKToKKwkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvdGVlLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICAqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc2lua3MuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RwaXBlbGluZS5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cXVlcnkuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICAqIHRlc3RzL2NoZWNrL2xpYnMvYmFzZXNyYy5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvcGFyc2UtbGF1bmNoLmM6IChydW5fZGVsYXllZF90ZXN0KSwKKwkgIChnc3RfcGFyc2VfdGVzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZSk6CisJICBEb24ndCB1c2UgZ3N0X2VsZW1lbnRfZ2V0X3BhZCgpLgorCisyMDA4LTA1LTIxIDE1OjU0OjI4ICswMDAwICBGZWxpcGUgQ29udHJlcmFzIDxmZWxpcGUuY29udHJlcmFzQG5va2lhLmNvbT4KKworCSAgZG9jcy9NYWtlZmlsZS5hbTogRml4IGluc3RhbGxpbmcgcGx1Z2luIGRvY3VtZW50YXRpb24gd2hlbiBndGstZG9jIGlzIGRpc2FibGVkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvTWFrZWZpbGUuYW06CisJICBGaXggaW5zdGFsbGluZyBwbHVnaW4gZG9jdW1lbnRhdGlvbiB3aGVuIGd0ay1kb2MgaXMgZGlzYWJsZWQuCisKKzIwMDgtMDUtMjEgMTU6NTE6MjUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvbWFudWFsLzogQXZvaWQgdXNpbmcgYSBiYWQgZnVuY3Rpb24gaW4gdGhlIGV4YW1wbGUgY29kZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1hdXRvcGx1Z2dpbmcueG1sOgorCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtaGVsbG93b3JsZC54bWw6CisJICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1wYWRzLnhtbDoKKwkgICogZG9jcy9tYW51YWwvaGlnaGxldmVsLWNvbXBvbmVudHMueG1sOgorCSAgQXZvaWQgdXNpbmcgYSBiYWQgZnVuY3Rpb24gaW4gdGhlIGV4YW1wbGUgY29kZS4KKworMjAwOC0wNS0yMSAxNTo0OToyMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGNsb2NrLmM6IEZpeCBkZWJ1ZyBvZiB0aGUgbmV3IGNsb2NrIHJhdGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGNsb2NrLmM6IChnc3RfY2xvY2tfc2V0X2NhbGlicmF0aW9uKToKKwkgIEZpeCBkZWJ1ZyBvZiB0aGUgbmV3IGNsb2NrIHJhdGUuCisKKzIwMDgtMDUtMjEgMTE6MTA6MzIgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOiBBZGQgZ3N0X2Jhc2Vfc2lua193YWl0X2Nsb2NrKCkgdG8gdGhlIGV4cG9ydGVkIHN5bWJvbHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgorCSAgQWRkIGdzdF9iYXNlX3Npbmtfd2FpdF9jbG9jaygpIHRvIHRoZSBleHBvcnRlZCBzeW1ib2xzLgorCisyMDA4LTA1LTIwIDA4OjI4OjI0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IFVucmVmIGV2ZW50cyB0aGF0IHRoZSBHc3RCYXNlVHJhbnNmb3JtOjpldmVudCB2ZnVuYyBkaWRuJ3Qgd2FudCB0byBoYXZlIGZvcndhcmRlZCBiLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltLm11bGxlciBhdCBjb2xsYWJvcmEgY28gdWs+CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zaW5rX2V2ZW50KToKKwkgIFVucmVmIGV2ZW50cyB0aGF0IHRoZSBHc3RCYXNlVHJhbnNmb3JtOjpldmVudCB2ZnVuYyBkaWRuJ3Qgd2FudCB0bworCSAgaGF2ZSBmb3J3YXJkZWQgYnkgdGhlIGJhc2UgY2xhc3MuIENsb3NlcyBhIGxlYWsgaW4gaWRlbnRpdHkuCisJICBGaXhlcyBidWcgIzQ0Njc2My4KKworMjAwOC0wNS0xOSAxNjozNjo1MSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgRXhwb3NlIGEgbWV0aG9kIHRoYXQgd2FzIHByZXZpb3VzbHkgdXNlZCBpbnRlcm5hbGx5IHRvIHN5bmNocm9uaXplIGFnYWluc3QgdGhlIGNsb2NrIGJlY2F1c2UgaXQgY2FuIGJlIHVzZWZ1bCBmb3Igc3ViLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua193YWl0X2Nsb2NrKToKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSAgRXhwb3NlIGEgbWV0aG9kIHRoYXQgd2FzIHByZXZpb3VzbHkgdXNlZCBpbnRlcm5hbGx5IHRvIHN5bmNocm9uaXplCisJICBhZ2FpbnN0IHRoZSBjbG9jayBiZWNhdXNlIGl0IGNhbiBiZSB1c2VmdWwgZm9yIHN1YmNsYXNzZXMgdG9vLgorCSAgR3N0QmFzZVNpbms6OmdzdF9iYXNlX3Npbmtfd2FpdF9jbG9jaygpCisKKzIwMDgtMDUtMTkgMTE6NTk6MzQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RwYWQuYzogQWRkIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IHNtYWxsZXIgYnVmZmVycyB0aGFuIHJlcXVlc3RlZCAoYW5kIGZhbGxiYWNrIHRvIG5vcm1hbCBidWZmZS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfYnVmZmVyX2FsbG9jX3VuY2hlY2tlZCk6CisJICBBZGQgc2FuaXR5IGNoZWNrIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBnZXQgc21hbGxlciBidWZmZXJzCisJICB0aGFuIHJlcXVlc3RlZCAoYW5kIGZhbGxiYWNrIHRvIG5vcm1hbCBidWZmZXIgYWxsb2MgaWYgd2UgZG8pLgorCisyMDA4LTA1LTE5IDExOjExOjQ5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFJlZmFjdG9yIGFkanVzdGluZyB0aGUgcnVubmluZ190aW1lIHdpdGggbGF0ZW5jeSBhbmQgb2Zmc2V0IGludG8gYSBzZXBhcmF0ZSBtZXRob2QuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19hZGp1c3RfdGltZSksCisJICAoZ3N0X2Jhc2Vfc2lua193YWl0X2Nsb2NrKSwgKGdzdF9iYXNlX3Npbmtfd2FpdF9lb3MpLAorCSAgKGdzdF9iYXNlX3NpbmtfZG9fc3luYyksIChnc3RfYmFzZV9zaW5rX2NoYWluX3VubG9ja2VkKToKKwkgIFJlZmFjdG9yIGFkanVzdGluZyB0aGUgcnVubmluZ190aW1lIHdpdGggbGF0ZW5jeSBhbmQgb2Zmc2V0IGludG8gYQorCSAgc2VwYXJhdGUgbWV0aG9kLgorCSAgV2hlbiBkb2luZyBjbGlwcGluZywgd2Ugc3RpbGwgd2FudCB0byB1c2UgdGhlIHN1YmNsYXNzIGdldF90aW1lcyBtZXRob2QsCisJICBqdXN0IGluIGNhc2UgdGhlIERVUkFUSU9OIG9yIFRJTUVTVEFNUCBhcmUgbm90IHNldC4KKworMjAwOC0wNS0xOSAxMDo0Njo0NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgQVBJOiBhZGQgZ3N0X3R5cGVfZmluZF9zdWdnZXN0X3NpbXBsZSgpLCAjNTMzNzQwLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3R0eXBlZmluZC5jOiAoZ3N0X3R5cGVfZmluZF9zdWdnZXN0X3NpbXBsZSk6CisJICAqIGdzdC9nc3R0eXBlZmluZC5oOgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIEFQSTogYWRkIGdzdF90eXBlX2ZpbmRfc3VnZ2VzdF9zaW1wbGUoKSwgIzUzMzc0MC4KKworMjAwOC0wNS0xOSAxMDoyOTo1NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IFVzZSByaWdodCBlcnJvciBjb2RlIHdoZW4gdHlwZWZpbmRpbmcgZmFpbHMsIHNvIHdlIGNhbiB1c2UgdGhlIGRlZmF1bHQgKHRyYW5zbGF0ZWQpIGVycm9yLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfc3RhcnQpOgorCSAgVXNlIHJpZ2h0IGVycm9yIGNvZGUgd2hlbiB0eXBlZmluZGluZyBmYWlscywgc28gd2UgY2FuIHVzZQorCSAgdGhlIGRlZmF1bHQgKHRyYW5zbGF0ZWQpIGVycm9yIG1lc3NhZ2VzLgorCisyMDA4LTA1LTE5IDEwOjAzOjA5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogV2hlbiB0aGUgc3ViY2xhc3MgZGlkIG5vdCBzZXQgY2FwcyBvbiBvdXRnb2luZyBidWZmZXJzLCBjb25maWd1cmUgdGhlIGNhcHMgd2UgbmVnb3RpYXRlZCAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19nZXRfcmFuZ2UpLAorCSAgKGdzdF9iYXNlX3NyY19zdGFydCk6CisJICBXaGVuIHRoZSBzdWJjbGFzcyBkaWQgbm90IHNldCBjYXBzIG9uIG91dGdvaW5nIGJ1ZmZlcnMsIGNvbmZpZ3VyZSB0aGUKKwkgIGNhcHMgd2UgbmVnb3RpYXRlZCBvbiB0aGUgc291cmNlIHBhZC4KKwkgIFdoZW4gdGhlIHR5cGVmaW5kIGhlbHBlciBkb2VzIG5vdCBmaW5kIGNhcHMsIGVycm9yIG91dCBwcm9wZXJseSBpbnN0ZWFkCisJICBvZiBkb2luZyB0aGluZ3Mgd2l0aCBOVUxMIGNhcHMuCisKKzIwMDgtMDUtMTggMTg6NTM6NTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3R0eXBlZmluZC5oOiBUYWJzIHRvIHNwYWNlcywgb2ggeWVzIQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R0eXBlZmluZC5oOgorCSAgVGFicyB0byBzcGFjZXMsIG9oIHllcyEKKworMjAwOC0wNS0xOCAxMjoxMzo0MiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSogQ2hhbmdlTG9nOgorCSAgQ2hhbmdlTG9nIHN1cmdlcnkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgQ2hhbmdlTG9nIHN1cmdlcnkKKworMjAwOC0wNS0xOCAxMTo1MjozOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYzogQWRkIERhdmlkJ3MgYW5kIEJlbmphbWluJ3MgdGVzdHMgZm9yIGFycmF5IHN1YnRyYWN0aW9uIHRvIHRoZSB1bml0IHRlc3Qgc3VpdGUsIHdoaWNoIHN1Z2dlLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYzogKHRlc3RfaW50ZXJzZWN0MiksIChnc3RfY2Fwc19zdWl0ZSk6CisJICBBZGQgRGF2aWQncyBhbmQgQmVuamFtaW4ncyB0ZXN0cyBmb3IgYXJyYXkgc3VidHJhY3Rpb24gdG8gdGhlCisJICB1bml0IHRlc3Qgc3VpdGUsIHdoaWNoIHN1Z2dlc3RzIHRoYXQgIzE0NzkzMSBpcyBmaXhlZCB0aGVzZSBkYXlzLgorCisyMDA4LTA1LTE4IDExOjM1OjQzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0ZXZlbnQuYzogRG9jdW1lbnQgdGhhdCBnc3RfZXZlbnRfbmV3X3RhZygpIGFuZCBnc3RfZXZlbnRfbmV3X25hdmlnYXRpb24oKSB0YWtlIG93bmVyc2hpcCBvZiB0aGUgdGFnbGlzdC9zdHJ1Y3QuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZXZlbnQuYzoKKwkgIERvY3VtZW50IHRoYXQgZ3N0X2V2ZW50X25ld190YWcoKSBhbmQgZ3N0X2V2ZW50X25ld19uYXZpZ2F0aW9uKCkKKwkgIHRha2Ugb3duZXJzaGlwIG9mIHRoZSB0YWdsaXN0L3N0cnVjdHVyZSBwYXNzZWQgdG8gdGhlbS4gKCM1MzM2MzUpLgorCisyMDA4LTA1LTE3IDE3OjIwOjUxICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZG9jcy9NYWtlZmlsZS5hbTogRG9uJ3QgZGVzY2VuZCBpbnRvIHRoZSBwbHVnaW5zIGRpciBpZiBwbHVnaW4gZG9jcyBidWlsZGluZyBpcyBkaXNhYmxlZC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL01ha2VmaWxlLmFtOgorCSAgRG9uJ3QgZGVzY2VuZCBpbnRvIHRoZSBwbHVnaW5zIGRpciBpZiBwbHVnaW4gZG9jcyBidWlsZGluZworCSAgaXMgZGlzYWJsZWQuCisJICAqIGRvY3MvUkVBRE1FOgorCSAgQWRkIGEgbm90ZSBhYm91dCB0aGUgbmV3IHR5cGU6R1R5cGVOYW1lIHN5bnRheCBmb3IgdGhlIHBsdWdpbgorCSAgZG9jdW1lbnRhdGlvbiAudHlwZXMgZmlsZS4KKworMjAwOC0wNS0xNyAxMzo1NDo1MiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBnc3QvZ3N0bWVzc2FnZS4qOiBNYXJrIHRoZSBkZWJ1ZyBzdHJpbmcgcGFyYW1ldGVycyBhcyBjb25zdC4gRml4ZXMgYnVnICM1MzM0OTAuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKGdzdF9tZXNzYWdlX25ld19lcnJvciksCisJICAoZ3N0X21lc3NhZ2VfbmV3X3dhcm5pbmcpLCAoZ3N0X21lc3NhZ2VfbmV3X2luZm8pOgorCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgorCSAgTWFyayB0aGUgZGVidWcgc3RyaW5nIHBhcmFtZXRlcnMgYXMgY29uc3QuIEZpeGVzIGJ1ZyAjNTMzNDkwLgorCisyMDA4LTA1LTE2IDIxOjA5OjQ1ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzogU29ydCBidWZmZXIgY2FjaGUgbGlzdCBieSBlbmQgb2Zmc2V0cy4gVGhpcyBtYWtlcyBzdXJlIHRoYXQgd2UgZG9uJ3Qgc3RvcCB0byBzZWFyYy4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzogKGhlbHBlcl9maW5kX3BlZWspOgorCSAgU29ydCBidWZmZXIgY2FjaGUgbGlzdCBieSBlbmQgb2Zmc2V0cy4gVGhpcyBtYWtlcyBzdXJlIHRoYXQgd2UgZG9uJ3QKKwkgIHN0b3AgdG8gc2VhcmNoIGZvciBhIGNhY2hlZCBidWZmZXIgdGhhdCBjb250YWlucyB0aGUgcmVxdWVzdGVkIGRhdGEKKwkgIHRvbyBlYXJseS4KKwkgIEFsc28gcmVhZCBhIG1pbmltdW0gb2YgNGsgYnl0ZXMgaW5zdGVhZCBvZiA1MTIgYnl0ZXMgYXMgdGhpcyBpcyBhIGJpdAorCSAgbW9yZSBlZmZpY2llbnQuIEZpeGVzIGJ1ZyAjNDU5ODYyLgorCisyMDA4LTA1LTE0IDE4OjE3OjM0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3RpbmZvLmM6IEV4cGxhaW4gd2h5IHdlIGNvcHkgdGhlIGxpc3QuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGluZm8uYzoKKwkgIEV4cGxhaW4gd2h5IHdlIGNvcHkgdGhlIGxpc3QuCisJICAqIGdzdC9nc3RwaXBlbGluZS5jOgorCSAgSW1wcm92ZSBkb2NzLgorCSAgKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIEFkZCBvbmUgZGVidWctbG9nIHN0YXRlbWVudCB0byBoZWxwIHRyYWNpbmcgcHJvYmVsbXMgd2l0aCBsaW5raW5nIHBhZHMuCisKKzIwMDgtMDUtMTQgMTg6MDk6MDEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgdGVzdHMvY2hlY2svZ3N0L2dzdGluZm8uYzogQWRkIGEgdGVzdCBmb3IgcmVtb3ZpbmcgdGhlIGRlZmF1bHQgbG9nIGhhbmRsZXIuIFNlZW1zIHRvIGZhaWwgdW5kZXIgd2luZG93cy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0aW5mby5jOgorCSAgQWRkIGEgdGVzdCBmb3IgcmVtb3ZpbmcgdGhlIGRlZmF1bHQgbG9nIGhhbmRsZXIuIFNlZW1zIHRvIGZhaWwgdW5kZXIKKwkgIHdpbmRvd3MuCisKKzIwMDgtMDUtMTQgMTM6NTI6NTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RwYWQuYzogUmVsZWFzZSBwYWQgbG9jayBiZWZvcmUgY2FsbGluZyBvdXQgdG8gYXZvaWQgYSBwb3NzaWJsZSBkZWFkbG9jay4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3BlZXJfYWNjZXB0X2NhcHMpOgorCSAgUmVsZWFzZSBwYWQgbG9jayBiZWZvcmUgY2FsbGluZyBvdXQgdG8gYXZvaWQgYSBwb3NzaWJsZSBkZWFkbG9jay4KKworMjAwOC0wNS0xNCAxMDoyMjoxNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L3BhcnNlL2dyYW1tYXIueTogUmVtb3ZlIHVubmVlZGVkIHZhbHVlIHVuc2V0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9wYXJzZS9ncmFtbWFyLnk6CisJICBSZW1vdmUgdW5uZWVkZWQgdmFsdWUgdW5zZXQuCisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3ZhbHVlX3N1aXRlKToKKwkgIEFkZCB1bml0IHRlc3QgZm9yIGRlL3NlcmlhbGl6YXRpb24gb2YgY2Fwcy4KKworMjAwOC0wNS0xMyAxMjo1NDowMCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBwbHVnaW5zL2VsZW1lbnRzLzogVXNlIGN1c3RvbSBtYXJzaGFsZXJzIHRoYXQgdGFrZSBHc3RNaW5pT2JqZWN0IGFzIGZpcnN0IHBhcmFtZXRlci4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6CisJICAobWFyc2hhbF9WT0lEX19NSU5JT0JKRUNUX09CSkVDVCksIChnc3RfZmFrZV9zaW5rX2NsYXNzX2luaXQpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzogKG1hcnNoYWxfVk9JRF9fTUlOSU9CSkVDVF9PQkpFQ1QpLAorCSAgKGdzdF9mYWtlX3NyY19jbGFzc19pbml0KToKKwkgIFVzZSBjdXN0b20gbWFyc2hhbGVycyB0aGF0IHRha2UgR3N0TWluaU9iamVjdCBhcyBmaXJzdCBwYXJhbWV0ZXIuCisJICBVc2luZyBPQkpFQ1QgYXMgcGFyYW1ldGVyIHdoaWxlIGEgR3N0TWluaU9iamVjdCBpcyBnaXZlbiB3aWxsIGxlYWQKKwkgIHRvIGFzc2VydGlvbnMgaWYgYnVpbHQgd2l0aCBHX0VOQUJMRV9ERUJVRy4gRml4ZXMgYnVnICM1MjU1MzIuCisKKzIwMDgtMDUtMTMgMTI6Mzg6MzEgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogQ2xlYW4gdXAgb24gRkxVU0hfU1RPUCBhbmQgbm90IEZMVVNIX1NUQVJULiBGb3J3YXJkIGJvdGggZXZlbnRzIGltbWVkaWF0ZWx5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6CisJICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2hhbmRsZV9ldmVudCksCisJICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X3NlbmRfY2FjaGVkX2V2ZW50cyksCisJICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NoYW5nZV9zdGF0ZSk6CisJICBDbGVhbiB1cCBvbiBGTFVTSF9TVE9QIGFuZCBub3QgRkxVU0hfU1RBUlQuIEZvcndhcmQgYm90aCBldmVudHMKKwkgIGltbWVkaWF0ZWx5LgorCisyMDA4LTA1LTEzIDExOjQ1OjI0ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6IEZvcndhcmQgRkxVU0hfU1RBUlQgZXZlbnRzIGltbWVkaWF0ZWx5IGFuZCBjbGVhbiB1cCBpbnN0ZWFkIG9mIGNhY2hpbmcgdGhlbS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSAgKGdzdF90eXBlX2ZpbmRfaGFuZGxlX3NyY19xdWVyeSksIChzdG9wX3R5cGVmaW5kaW5nKSwKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfaGFuZGxlX2V2ZW50KSwKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfc2VuZF9jYWNoZWRfZXZlbnRzKSwKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfY2hhbmdlX3N0YXRlKToKKwkgIEZvcndhcmQgRkxVU0hfU1RBUlQgZXZlbnRzIGltbWVkaWF0ZWx5IGFuZCBjbGVhbiB1cCBpbnN0ZWFkIG9mCisJICBjYWNoaW5nIHRoZW0uCisKKzIwMDgtMDUtMTMgMDc6MTE6MDUgKzAwMDAgIFNqb2VyZCBTaW1vbnMgPHNqb2VyZEBsdW9uLm5ldD4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IENoZWNrIHRoZSBjYXBzIG9mIHRoZSBidWZmZXIgcmV0dXJuZWQgYnkgZ3N0X3BhZF9hbGxvY19idWZmZXIoKSBhbmQgZmFsbCBiYWNrIHRvIGRlLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBTam9lcmQgU2ltb25zIDxzam9lcmQgYXQgbHVvbiBkb3QgbmV0PgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fYnVmZmVyX2FsbG9jKToKKwkgIENoZWNrIHRoZSBjYXBzIG9mIHRoZSBidWZmZXIgcmV0dXJuZWQgYnkgZ3N0X3BhZF9hbGxvY19idWZmZXIoKSBhbmQKKwkgIGZhbGwgYmFjayB0byBkZWZhdWx0IG5lZ290aWF0aW9uIGluIHRoZSBjaGFpbiBmdW5jdGlvbiBpZiB0aGUgY2FwcworCSAgYXJlIGRpZmZlcmVudCBmcm9tIHdoYXQgd2FzIHJlcXVlc3RlZC4gRml4ZXMgYnVnICM1MjY3NjguCisKKzIwMDgtMDUtMDkgMjA6NDg6MjQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIE5vLCBsZXQncyBub3QgdXNlIGdfc2xpY2Vfe2R1cHxjb3B5fSBoZXJlLCBzaW5jZSB0aGV5IG9ubHkgZXhpc3Qgc2luY2UgR0xpYiAyLjE0IGFuZCB3ZSBzdGlsbCBkZXBlbmQgb25seSBvbiA+PSAyLjEyLi4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RzZWdtZW50LmM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RzZWdtZW50LmM6CisJICBObywgbGV0J3Mgbm90IHVzZSBnX3NsaWNlX3tkdXB8Y29weX0gaGVyZSwgc2luY2UgdGhleSBvbmx5IGV4aXN0CisJICBzaW5jZSBHTGliIDIuMTQgYW5kIHdlIHN0aWxsIGRlcGVuZCBvbmx5IG9uID49IDIuMTIuIEFsc28gYWRkCisJICB1bml0IHRlc3QgZm9yIGdzdF9zZWdtZW50X2NvcHkoKS4KKworMjAwOC0wNS0wOSAxODoyNTo0NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdHV0aWxzLmg6IFRyeSB0byBmaXggJ2RlcmVmZXJlbmNpbmcgdHlwZS1wdW5uZWQgcG9pbnRlciB3aWxsIGJyZWFrIHN0cmljdCBhbGlhc2luZyBydWxlcycgd2FybmluZ3Mgd2l0aCBDKysgY29tLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHV0aWxzLmg6IChHU1RfQk9JTEVSUExBVEVfRlVMTCk6CisJICBUcnkgdG8gZml4ICdkZXJlZmVyZW5jaW5nIHR5cGUtcHVubmVkIHBvaW50ZXIgd2lsbCBicmVhayBzdHJpY3QKKwkgIGFsaWFzaW5nIHJ1bGVzJyB3YXJuaW5ncyB3aXRoIEMrKyBjb21waWxlcnMgYW5kIEdMaWIgPj0gMi4xNC4wOiBHTGliCisJICBjaGFuZ2VkIHRoZSBkZWZhdWx0IEdUeXBlIHR5cGVkZWYgZnJvbSBndWxvbmcgdG8gZ3NpemUgYXQgc29tZSBwb2ludCwKKwkgIGJ1dCBrZXB0IEdUeXBlIHR5cGVkZWYnZWQgdG8gZ3Vsb25nIGZvciBDKysgZm9yIEFCSSByZWFzb25zOyB0aGUKKwkgIGdfb25jZV8qIGZ1bmN0aW9ucyBhbGwgdGFrZSBhIGdzaXplICogdGhvdWdoLCBzbyB3b3JrIGFyb3VuZCB0aGUgdHlwZQorCSAgbWlzbWF0Y2ggZm9yIEMrKyBieSBkb2luZyBldmVyeXRoaW5nIGluIGdzaXplIGFuZCBjYXN0aW5nIHRvIEdUeXBlCisJICBsYXRlci4KKworMjAwOC0wNS0wOSAxNDowMjo1MyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHNpZ25hbHMgdG8gcHVzaCBvdXIgY29yZSBwbHVnaW4gZG9jcyBjb3ZlcmFnZSBiYWNrIHVwIHRvIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgorCSAgQWRkIGRvY3VtZW50YXRpb24gZm9yIHRoZSBzaWduYWxzIHRvIHB1c2ggb3VyIGNvcmUgcGx1Z2luIGRvY3MKKwkgIGNvdmVyYWdlIGJhY2sgdXAgdG8gMTAwJS4KKworMjAwOC0wNS0wOCAxNDoyMzoxNiArMDAwMCAgT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzIDxvbGUuYW5kcmUucmF2bmFzQHRhbmRiZXJnLmNvbT4KKworCSAgZ3N0L2dzdGluZm8uaCAoR1NUX0ZVTkNUSU9OKTogUmV2ZXJ0ZWQgR1NUX0ZVTkNUSU9OIHRvIHRoZSBvbGQgdmVyc2lvbiBhcyB3ZSBkb24ndCB3YW50IHRoZSBmdWxsIHNpZ25hdHVyZSBpbiBDKysgY29kLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGluZm8uaCAoR1NUX0ZVTkNUSU9OKToKKwkgIFJldmVydGVkIEdTVF9GVU5DVElPTiB0byB0aGUgb2xkIHZlcnNpb24gYXMgd2UgZG9uJ3Qgd2FudCB0aGUKKwkgIGZ1bGwgc2lnbmF0dXJlIGluIEMrKyBjb2RlLiBBbHNvIGFkZGVkIHN1cHBvcnQgZm9yIE1TVkMuCisKKzIwMDgtMDUtMDggMTE6Mzc6MDMgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgZ3N0L2dzdHV0aWxzLmg6IEludGVybiB0aGUgdHlwZSBuYW1lIHN0cmluZywgc2ltaWxhciB0byB3aGF0IEdfREVGSU5FX1RZUEUgZG9lcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dXRpbHMuaDoKKwkgIEludGVybiB0aGUgdHlwZSBuYW1lIHN0cmluZywgc2ltaWxhciB0byB3aGF0IEdfREVGSU5FX1RZUEUgZG9lcy4KKworMjAwOC0wNS0wOCAxMToyNzo1NiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBnc3QvZ3N0dXRpbHMuaDogTWFrZSBHU1RfQk9JTEVSUExBVEUgdGhyZWFkLXNhZmUgaWYgYnVpbGRpbmcgd2l0aCBHTGliIDIuMTQgb3IgbmV3ZXIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHV0aWxzLmg6CisJICBNYWtlIEdTVF9CT0lMRVJQTEFURSB0aHJlYWQtc2FmZSBpZiBidWlsZGluZyB3aXRoIEdMaWIgMi4xNCBvciBuZXdlci4KKworMjAwOC0wNS0wOCAwNTo1NTozNCArMDAwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkQGx1b24ubmV0PgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogRG9uJ3QgcGFzc3Rocm91Z2ggYnVmZmVyIGFsbG9jYXRpb24gdG9vIGVhc2lseSBpZiB0aGUgY2FwcyBjaGFuZ2UuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIEJhc2VkIG9uIGEgcGF0Y2ggYnk6IFNqb2VyZCBTaW1vbnMgPHNqb2VyZCBhdCBsdW9uIGRvdCBuZXQ+CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9idWZmZXJfYWxsb2MpOgorCSAgRG9uJ3QgcGFzc3Rocm91Z2ggYnVmZmVyIGFsbG9jYXRpb24gdG9vIGVhc2lseSBpZiB0aGUgY2FwcyBjaGFuZ2UuCisJICBUaGlzIGJyZWFrcyB3aGVuIHdvcmtpbmcgaW4gcGFzc3Rocm91Z2ggbW9kZSBhbmQgdXBzdHJlYW0gY2hhbmdlcworCSAgaXQncyBjYXBzLiBGaXhlcyBidWcgIzUyNjc2OC4KKworMjAwOC0wNS0wNyAxOToyNDo0NCArMDAwMCAgT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzIDxvbGUuYW5kcmUucmF2bmFzQHRhbmRiZXJnLmNvbT4KKworCSAgZ3N0L2dzdGluZm8uYyAoZ3N0X2RlYnVnX2xvZ192YWxpc3QpOiBJbXByb3ZlZCB0aGUgX19GSUxFX18gcGFydCBvZiBkZWJ1ZyBvdXRwdXQgZm9yIE1TVkMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGluZm8uYyAoZ3N0X2RlYnVnX2xvZ192YWxpc3QpOgorCSAgSW1wcm92ZWQgdGhlIF9fRklMRV9fIHBhcnQgb2YgZGVidWcgb3V0cHV0IGZvciBNU1ZDLgorCisyMDA4LTA1LTA3IDE5OjE1OjE0ICswMDAwICBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMgPG9sZS5hbmRyZS5yYXZuYXNAdGFuZGJlcmcuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYyAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfcXVlcnkpOiBEZWNsYXJhdGlvbiBhZnRlciBzdGF0ZW1lbnQgZml4IGZvciBjb21waWxlcnMgbGlrZSBNU1ZDLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jIChnc3RfYmFzZV9zcmNfZGVmYXVsdF9xdWVyeSk6CisJICBEZWNsYXJhdGlvbiBhZnRlciBzdGF0ZW1lbnQgZml4IGZvciBjb21waWxlcnMgbGlrZSBNU1ZDLgorCisyMDA4LTA1LTA3IDE5OjA5OjA4ICswMDAwICBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMgPG9sZS5hbmRyZS5yYXZuYXNAdGFuZGJlcmcuY29tPgorCisJICB3aW4zMi9jb21tb24vY29uZmlnLmguaW46IERvbid0IGRlZmluZSBHU1RfRlVOQ1RJT04sIGlmIEdMaWIgc3VwcG9ydHMgTVNWQyB3ZSdkIG11Y2ggcmF0aGVyIHVzZSB0aGUgcmVhbCB0aGluZyB0aGFuIGguLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB3aW4zMi9jb21tb24vY29uZmlnLmguaW46CisJICBEb24ndCBkZWZpbmUgR1NUX0ZVTkNUSU9OLCBpZiBHTGliIHN1cHBvcnRzIE1TVkMgd2UnZCBtdWNoIHJhdGhlcgorCSAgdXNlIHRoZSByZWFsIHRoaW5nIHRoYW4gaGF2aW5nICI/Pz8iIHVuY29uZGl0aW9uYWxseS4KKworMjAwOC0wNS0wNyAxODo1MToyMiArMDAwMCAgT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzIDxvbGUuYW5kcmUucmF2bmFzQHRhbmRiZXJnLmNvbT4KKworCSAgZ3N0L2dzdGluZm8uaCAoR1NUX0ZVTkNUSU9OKTogTWFkZSBHU1RfRlVOQ1RJT04gYW4gYWxpYXMgZm9yIEdfU1RSRlVOQyB0byBhdm9pZCBkdXBsaWNhdGlvbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0aW5mby5oIChHU1RfRlVOQ1RJT04pOgorCSAgTWFkZSBHU1RfRlVOQ1RJT04gYW4gYWxpYXMgZm9yIEdfU1RSRlVOQyB0byBhdm9pZCBkdXBsaWNhdGlvbi4KKworMjAwOC0wNS0wNyAwOTo0NzoyNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6IFNtYWxsIGNvZGUgY2xlYW51cC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzogKGdzdF9hZGFwdGVyX2F2YWlsYWJsZV9mYXN0KToKKwkgIFNtYWxsIGNvZGUgY2xlYW51cC4KKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19xdWVyeV9sYXRlbmN5KSwKKwkgIChnc3RfYmFzZV9zaW5rX3NldF9mbHVzaGluZyk6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX3BlcmZvcm1fc2Vlayk6CisJICBGaXggc29tZSBjb21tZW50cy4KKworMjAwOC0wNS0wNyAwOTozNDo1OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLio6IEFkZGVkIGZvcm1hdCBwcm9wZXJ0eSB0byBjb250cm9sIHRoZSBmb3JtYXQgb2YgdGhlIG5ld3NlZ21lbnQgZXZlbnRzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiAoZ3N0X2Zha2Vfc3JjX2NsYXNzX2luaXQpLAorCSAgKGdzdF9mYWtlX3NyY19pbml0KSwgKGdzdF9mYWtlX3NyY19zZXRfcHJvcGVydHkpLAorCSAgKGdzdF9mYWtlX3NyY19nZXRfcHJvcGVydHkpLCAoZ3N0X2Zha2Vfc3JjX3N0YXJ0KToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmg6CisJICBBZGRlZCBmb3JtYXQgcHJvcGVydHkgdG8gY29udHJvbCB0aGUgZm9ybWF0IG9mIHRoZSBuZXdzZWdtZW50IGV2ZW50cy4KKwkgIEFQSTogR3N0RmFrZVNyYzpmb3JtYXQKKworMjAwOC0wNS0wNiAwODo0NTowNyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjogQWRkIGdzdF9wYWRfaGFzX25hbWUoKSB0byB0aGUgZXhwb3J0ZWQgc3ltYm9scy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIEFkZCBnc3RfcGFkX2hhc19uYW1lKCkgdG8gdGhlIGV4cG9ydGVkIHN5bWJvbHMuCisKKzIwMDgtMDUtMDYgMDg6NDM6NTcgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgRG9uJ3QgYWxsb3cgbmVnYXRpdmUgc2l6ZXMgd2hlbiBhbGxvY2F0aW5nIG5ldyBidWZmZXJzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfYWxsb2NfYnVmZmVyX2Z1bGwpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fcHJlcGFyZV9vdXRwdXRfYnVmZmVyKToKKwkgIERvbid0IGFsbG93IG5lZ2F0aXZlIHNpemVzIHdoZW4gYWxsb2NhdGluZyBuZXcgYnVmZmVycy4KKwkgIEZpeGVzIGJ1ZyAjNDYxMjUzLgorCisyMDA4LTA1LTA1IDE2OjQ3OjI5ICswMDAwICBTam9lcmQgU2ltb25zIDxzam9lcmRAbHVvbi5uZXQ+CisKKwkgIGdzdC9nc3RidXMuYzogRG9uJ3QgcHJpbnQgYSB3YXJuaW5nIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eSB3aGVuIHdlIHRyeSB0byBwb3AgaGVyZS4gVGhhdCBjb3VsZCBoYXBwZW4gaWYgYW5vdGhlciB0aHJlYS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogU2pvZXJkIFNpbW9ucyA8c2pvZXJkIGF0IGx1b24gbmV0PgorCSAgKiBnc3QvZ3N0YnVzLmM6IChnc3RfYnVzX3NvdXJjZV9kaXNwYXRjaCk6CisJICBEb24ndCBwcmludCBhIHdhcm5pbmcgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5IHdoZW4gd2UgdHJ5IHRvIHBvcAorCSAgaGVyZS4gVGhhdCBjb3VsZCBoYXBwZW4gaWYgYW5vdGhlciB0aHJlYWQgb3IgY2FsbGJhY2sgc2V0IHRoZQorCSAgYnVzIHRvIGZsdXNoaW5nIGJldHdlZW4gdGhlIHNvdXJjZSdzIGNoZWNrL3ByZXBhcmUgYW5kIHRoZQorCSAgZGlzcGF0Y2ggYmVpbmcgY2FsbGVkICgjNTMxNTM4KS4KKworMjAwOC0wNS0wNSAxNjoyNToyMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IFNtYWxsIGRvY3MgZml4LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgorCSAgU21hbGwgZG9jcyBmaXguCisKKzIwMDgtMDUtMDUgMTU6NTA6MzYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6IEFkZCB1bml0IHRlc3QgZm9yIGRlc2VyaWFsaXppbmcgdWludDY0cyBhbmQgY2hlY2sgc29tZSByZWFsbHkgbGFyZ2UgbnVtYmVycyBpbiB0aGUgaW50NjQgLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RfdmFsdWVfc3VpdGUpOgorCSAgQWRkIHVuaXQgdGVzdCBmb3IgZGVzZXJpYWxpemluZyB1aW50NjRzIGFuZCBjaGVjayBzb21lIHJlYWxseSBsYXJnZQorCSAgbnVtYmVycyBpbiB0aGUgaW50NjQgdGVzdC4KKworMjAwOC0wNS0wNCAxOTowNzoyMSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICB0b29scy9nc3QtaW5zcGVjdC5jOiBVc2UgIiVzIiBhcyBmb3JtYXQgc3RyaW5nIGluc3RlYWQgb2YgcHJpbnRpbmcgc3RyaW5ncyBkaXJlY3RseS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAobl9wcmludCksIChwcmludF9oaWVyYXJjaHkpLAorCSAgKHByaW50X2ludGVyZmFjZXMpLCAocHJpbnRfZWxlbWVudF9wcm9wZXJ0aWVzX2luZm8pLAorCSAgKHByaW50X3NpZ25hbF9pbmZvKToKKwkgIFVzZSAiJXMiIGFzIGZvcm1hdCBzdHJpbmcgaW5zdGVhZCBvZiBwcmludGluZyBzdHJpbmdzIGRpcmVjdGx5LgorCisyMDA4LTA1LTA0IDE0OjI1OjA3ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIGdzdC9nc3RjbG9jay5jOiBNYWtlIHNvbWUgY2hlY2tzIGFjdHVhbGx5IHVzZWZ1bC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0Y2xvY2suYzogKGdzdF9jbG9ja19zZXRfY2FsaWJyYXRpb24pOgorCSAgTWFrZSBzb21lIGNoZWNrcyBhY3R1YWxseSB1c2VmdWwuCisJICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9sb2FkX3BsdWdpbik6CisJICBSZW1vdmUgc29tZSB1bnVzZWQgY29kZS4gVW5zaWduZWQgaW50ZWdlcnMgdGVuZCB0byBiZSA+PSAwLgorCisyMDA4LTA1LTAzIDE5OjIzOjQzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0bWluaW9iamVjdC5jOiBGaXggJ1NpbmNlOicgdmVyc2lvbiBpbiBnc3RfdmFsdWVfZHVwX21pbmlfb2JqZWN0KCkgZG9jcyBibHVyYjogdGhpcyBmdW5jdGlvbiB3YXMgbm90IGluIHRoZSB1bnMuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5jOiAoZ3N0X3ZhbHVlX2dldF9taW5pX29iamVjdCk6CisJICBGaXggJ1NpbmNlOicgdmVyc2lvbiBpbiBnc3RfdmFsdWVfZHVwX21pbmlfb2JqZWN0KCkgZG9jcyBibHVyYjogdGhpcworCSAgZnVuY3Rpb24gd2FzIG5vdCBpbiB0aGUgdW5zY2hlZHVsZWQgMC4xMC4xOSByZWxlYXNlLgorCisyMDA4LTA1LTAzIDE5OjEzOjQ3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0cmVnaXN0cnkuYzogT25seSBwcmludCBvbmUgbG9nIG1lc3NhZ2UgcGVyIG5vbi1wbHVnaW4gZmlsZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzogKGdzdF9yZWdpc3RyeV9zY2FuX3BhdGhfbGV2ZWwpOgorCSAgT25seSBwcmludCBvbmUgbG9nIG1lc3NhZ2UgcGVyIG5vbi1wbHVnaW4gZmlsZS4KKworMjAwOC0wNS0wMyAxOTowODo1MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdGluZm8uYzogRml4IGFsaWdubWVudCBvZiBkZWJ1ZyBsb2cgY29sdW1ucyBvbiA2NC1iaXQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGluZm8uYzogKGdzdF9kZWJ1Z19sb2dfZGVmYXVsdCk6CisJICBGaXggYWxpZ25tZW50IG9mIGRlYnVnIGxvZyBjb2x1bW5zIG9uIDY0LWJpdC4KKworMjAwOC0wNS0wMyAxNjo1MjoxNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZG9jcy9saWJzLzogSWdub3JlIHByaXZhdGUgY29udHJvbGxlciBoZWFkZXJzIGZvciBkb2NzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvbGlicy9NYWtlZmlsZS5hbToKKwkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkgIElnbm9yZSBwcml2YXRlIGNvbnRyb2xsZXIgaGVhZGVycyBmb3IgZG9jcy4KKworMjAwOC0wNS0wMyAxNToyNToyNSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBsaWJzL2dzdC9jb250cm9sbGVyLzogTW92ZSBzb21lIHByaXZhdGUgZGVjbGFyYXRpb25zIGludG8gcHJpdmF0ZSBoZWFkZXJzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlcnByaXZhdGUuaDoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RoZWxwZXIuYzoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzoKKwkgIChnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXRfaW50ZXJwb2xhdGlvbl9tb2RlKToKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZXByaXZhdGUuaDoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9saWIuYzoKKwkgIE1vdmUgc29tZSBwcml2YXRlIGRlY2xhcmF0aW9ucyBpbnRvIHByaXZhdGUgaGVhZGVycy4KKworMjAwOC0wNS0wMiAxMDoxMjozMyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBnc3QvZ3N0ZGVidWd1dGlscy5jOiBSZW1vdmUgc29tZSBjb2RlIHRoYXQgaXMgdW51c2VkIGFmdGVyIFN0ZWZhbidzIHJlZmFjdG9yaW5nIGFuZCB1c2VzIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG5vdywuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZGVidWd1dGlscy5jOiAoZGVidWdfZHVtcF9lbGVtZW50X3BhZCk6CisJICBSZW1vdmUgc29tZSBjb2RlIHRoYXQgaXMgdW51c2VkIGFmdGVyIFN0ZWZhbidzIHJlZmFjdG9yaW5nIGFuZCB1c2VzCisJICB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBub3csIHJlc3VsdGluZyBpbiBhIGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMDgtMDUtMDEgMTM6MDM6NTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RyZWdpc3RyeS5jOiBSdW4gZ19zdHJfaGFzX3N1ZmZpeCgpIG9ubHkgb24gdGhlIGZpbGUgbmFtZSwgbm90IHRoZSBlbnRpcmUgZmlsZSBwYXRoLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RyZWdpc3RyeS5jOiAoZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9sZXZlbCk6CisJICBSdW4gZ19zdHJfaGFzX3N1ZmZpeCgpIG9ubHkgb24gdGhlIGZpbGUgbmFtZSwgbm90IHRoZQorCSAgZW50aXJlIGZpbGUgcGF0aC4KKworMjAwOC0wNC0zMCAxNDoyMDo0OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiBTaW5jZSB3ZSdyZSBub3QgY2FsbGVkIG9ubHkgZnJvbSB0aGUgY2hhaW4gZnVuY3Rpb24gYW55IGxvbmdlciwgd2UgY2FuJ3QgYXNzdW1lIHRoYXQgdGhlLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2xlYWtfZG93bnN0cmVhbSk6CisJICBTaW5jZSB3ZSdyZSBub3QgY2FsbGVkIG9ubHkgZnJvbSB0aGUgY2hhaW4gZnVuY3Rpb24gYW55IGxvbmdlciwKKwkgIHdlIGNhbid0IGFzc3VtZSB0aGF0IHRoZXJlJ3MgYWx3YXlzIGRhdGEgaW4gdGhlIHF1ZXVlLCBzbyBtb3ZlCisJICB0aGUgaXNfZnVsbCBjaGVjayB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wIChvdGhlcndpc2Ugd2UnZAorCSAgaGl0IHRoZSBhc3NlcnQgd2hlbiBjaGFuZ2luZyB0aGUgbGltaXQgcHJvcGVydGllcyB3aGlsZSB0aGUKKwkgIHF1ZXVlIGlzIGVtcHR5IG9yIG5vdCBydW5uaW5nIHlldCkuCisJICBBbHNvLCBvbmx5IHNldCBhIGRpc2NvbnQgaWYgaXRlbXMgd2VyZSBhY3R1YWxseSByZW1vdmVkIGZyb20KKwkgIHRoZSBxdWV1ZS4KKwkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvcXVldWUuYzogKHRlc3RfbGVha3lfZG93bnN0cmVhbSk6CisJICBUZXN0IGNhc2UgZm9yIHRoZSBhYm92ZS4KKworMjAwOC0wNC0zMCAwOTozNTo0MyArMDAwMCAgSm9uYXMgSG9sbWJlcmcgPGpvbmFzLmhvbG1iZXJnQGF4aXMuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IFdoZW4gY2hhbmdpbmcgdGhyIG1heCBjYXBhY2l0eSBvZiBhIGxlYWt5IHF1ZXVlLCBpbW1lZGlhdGx5IGRyb3AgYnVmZmVycyBpbnN0ZWFkIG9mIHdhaXQuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IEpvbmFzIEhvbG1iZXJnIDxqb25hcyBkb3QgaG9sbWJlcmcgYXQgYXhpcyBkb3QgY29tPgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfbGVha19kb3duc3RyZWFtKSwKKwkgIChnc3RfcXVldWVfY2hhaW4pLCAocXVldWVfY2FwYWNpdHlfY2hhbmdlKSwKKwkgIChnc3RfcXVldWVfc2V0X3Byb3BlcnR5KToKKwkgIFdoZW4gY2hhbmdpbmcgdGhyIG1heCBjYXBhY2l0eSBvZiBhIGxlYWt5IHF1ZXVlLCBpbW1lZGlhdGx5IGRyb3AgYnVmZmVycworCSAgaW5zdGVhZCBvZiB3YWl0aW5nIGZvciBhIHB1c2ggb24gdGhlIHNpbmtwYWQuIEZpeGVzICM1MzA2MzcuCisKKzIwMDgtMDQtMzAgMDc6NTY6MzkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdGRlYnVndXRpbHMuYzogUmVmYWN0b3IgY29kZSBhbmQgZml4IGhhbmRsaW5nIG9mIGdob3N0cGFkcyBhbmQgdGhlaXIgcHJveHlwYWRzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6CisJICBSZWZhY3RvciBjb2RlIGFuZCBmaXggaGFuZGxpbmcgb2YgZ2hvc3RwYWRzIGFuZCB0aGVpciBwcm94eXBhZHMuCisKKzIwMDgtMDQtMjkgMTE6MjM6NTEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIEFkZCBtZXRob2QgdG8gY29udmVuaWVudGx5IGNoZWNrIHRoZSBuYW1lIG9mIGEgY3VzdG9tIGV2ZW50IHdpdGggZ3N0X2V2ZW50X2hhc19uYW1lKCkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdGV2ZW50LmM6IChnc3RfZXZlbnRfaGFzX25hbWUpOgorCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBBZGQgbWV0aG9kIHRvIGNvbnZlbmllbnRseSBjaGVjayB0aGUgbmFtZSBvZiBhIGN1c3RvbSBldmVudCB3aXRoCisJICBnc3RfZXZlbnRfaGFzX25hbWUoKS4KKwkgIFJlZm9ybWF0IHRoZSBldmVudCBkb2NzIHNvIHRoYXQgcmVsYXRlZCBtZXRob2RzIGFyZSBwdXQgdG9nZXRoZXIgaW5zdGVhZAorCSAgb2YgdGhlIGRlZmF1bHQgYWxwaGFiZXRpY2FsIHNvcnQuCisJICBVcGRhdGUgdW5pdCB0ZXN0IHdpdGggbmV3IG1ldGhvZC4KKwkgIEFQSTogR3N0RXZlbnQ6OmdzdF9ldmVudF9oYXNfbmFtZSgpCisKKzIwMDgtMDQtMjggMTg6NDQ6NDggKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KKworCSAgbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06IERvbid0IGFkZCBhbiBleHBsaWNpdCBsaW5rIHRvIGxpYmdzdHJlYW1lci0wLjEwLmxhOyBpdCdzIGFscmVhZHkgaW5jbHVkZWQgaW4gR1NUX09CSl9MSUJTLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgorCSAgRG9uJ3QgYWRkIGFuIGV4cGxpY2l0IGxpbmsgdG8gbGliZ3N0cmVhbWVyLTAuMTAubGE7IGl0J3MgYWxyZWFkeQorCSAgaW5jbHVkZWQgaW4gR1NUX09CSl9MSUJTLgorCisyMDA4LTA0LTI4IDA5OjIxOjMzICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIGdzdC9nc3QuYzogUmVnaXN0ZXIgR3N0Q2xvY2sgdHlwZSBmcm9tIGEgdHlwZS1zYWZlIGNvbnRleHQuIEZpeGVzIGJ1ZyAjNTMwMzE3LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3QuYzoKKwkgIFJlZ2lzdGVyIEdzdENsb2NrIHR5cGUgZnJvbSBhIHR5cGUtc2FmZSBjb250ZXh0LiBGaXhlcyBidWcgIzUzMDMxNy4KKworMjAwOC0wNC0yNiAwMDoxMzowMyArMDAwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+CisKKwkgIHRvb2xzL2dzdC1ydW4uYzogSW5jbHVkZSA8dW5pc3RkLmg+IGNvbmRpdGlvbmFsbHkgb24gSEFWRV9VTklTVERfSCBhcyBlbHNld2hlcmUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5IEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgorCSAgKiB0b29scy9nc3QtcnVuLmM6CisJICBJbmNsdWRlIDx1bmlzdGQuaD4gY29uZGl0aW9uYWxseSBvbiBIQVZFX1VOSVNURF9IIGFzIGVsc2V3aGVyZS4KKworMjAwOC0wNC0yNSAxNzo1NDoyOCArMDAwMCAgQW50b2luZSBUcmVtYmxheSA8aGV4YTAwQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJpbi5jOiBVc2UgdGhlIEdMaWIgc3R1ZmYgdG8gY3JlYXRlIGEgcHJpdmF0ZSBzdHJ1Y3R1cmUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9jbGFzc19pbml0KSwgKGdzdF9iaW5faW5pdCksCisJICAoZ3N0X2Jpbl9kaXNwb3NlKToKKwkgIFVzZSB0aGUgR0xpYiBzdHVmZiB0byBjcmVhdGUgYSBwcml2YXRlIHN0cnVjdHVyZS4KKwkgIEFkZCBzb21lIGxvY2tpbmcgYXJvdW5kIHNvbWUgZGlzcG9zZSBtZXRob2RzIHRvIG1ha2UgdGhlbSBhIGxpdHRsZQorCSAgc2FmZXIsIHNlZSAjNTI5NzIzLiBQYXRjaCBieTogQW50b2luZSBUcmVtYmxheSA8aGV4YTAwIGF0IGdtYWlsIGRvdCBjb20+CisKKzIwMDgtMDQtMjUgMTM6MjI6MzIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgbGlicy9nc3QvYmFzZS86IEZpeCBkb2MgdHlwb3MgYW5kIHVuaWZ5IGNhcHMgYSBiaXQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKKwkgIEZpeCBkb2MgdHlwb3MgYW5kIHVuaWZ5IGNhcHMgYSBiaXQuCisKKzIwMDgtMDQtMjUgMTM6MDk6NDAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgdG9vbHMvZ3N0LWxhdW5jaC4xLmluOiBGb3Jnb3QgdG8gYWxzbyBhZGQgdGhlIGVudnZhciBkb2NzIGhlcmUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdG9vbHMvZ3N0LWxhdW5jaC4xLmluOgorCSAgRm9yZ290IHRvIGFsc28gYWRkIHRoZSBlbnZ2YXIgZG9jcyBoZXJlLgorCisyMDA4LTA0LTI1IDEwOjAxOjQ2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBSZWYgc29tZSBtb3JlIGNsYXNzZXMgaW4gZ3N0X2luaXQoKSB0byB3b3JrIGFyb3VuZCB0aHJlYWQtc2FmZXR5IGlzc3VlcyBpbiBwcmUtMi4xNiBHTGlicywgYW5kIGFkZCBiYXNpYyB1bml0IHRlc3QuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdC5jOiAoaW5pdF9wb3N0KSwgKGdzdF9kZWluaXQpOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzogKEdTVF9TVEFSVF9URVNUKSwgKHBpcGVsaW5lX3RocmVhZCksCisJICAodGVzdF9jb25jdXJyZW50X2NyZWF0ZSksIChnc3RfcGlwZWxpbmVfc3VpdGUpOgorCSAgUmVmIHNvbWUgbW9yZSBjbGFzc2VzIGluIGdzdF9pbml0KCkgdG8gd29yayBhcm91bmQgdGhyZWFkLXNhZmV0eQorCSAgaXNzdWVzIGluIHByZS0yLjE2IEdMaWJzLCBhbmQgYWRkIGJhc2ljIHVuaXQgdGVzdC4KKworMjAwOC0wNC0yNSAwNzoyMjoxNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBSZWFycmFuZ2UgdGhlIGxhdGVuY3kgcXVlcnkgY29kZS4gV2UgYWx3YXlzIHdhbnQgdG8gZG8gdGhlIHVwc3RyZWFtIHF1ZXJ5LCBldmVuIGlmIHdlIGFyLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19xdWVyeV9sYXRlbmN5KSwKKwkgIChnc3RfYmFzZV9zaW5rX3NlbmRfZXZlbnQpOgorCSAgUmVhcnJhbmdlIHRoZSBsYXRlbmN5IHF1ZXJ5IGNvZGUuIFdlIGFsd2F5cyB3YW50IHRvIGRvIHRoZSB1cHN0cmVhbQorCSAgcXVlcnksIGV2ZW4gaWYgd2UgYXJlIG5vdCBsaXZlIHNvIHRoYXQgdGhlIHVwc3RyZWFtIGVsZW1lbnRzIGNhbiBnZXQgdGhlCisJICBsYXRlbmN5IHJlc3VsdHMgdG9vLiBJZiB3ZSBmYWlsIGRvaW5nIHRoZSBxdWVyeSBhbmQgd2UgYXJlIGxpdmUsIHdlCisJICByZXR1cm4gVFJVRSBhZnRlcndhcmRzLgorCisyMDA4LTA0LTI0IDE1OjE0OjU0ICswMDAwICBKYXNvbiBaaGFvIDxlMzQyM2NAbW90b3JvbGEuY29tPgorCisJICBFbmFibGUvZGlzYWJsZSBzY2FuX2FuZF91cGRhdGVfcmVnaXN0cnkoKSBiYXNlZCBvbiBjb21tYW5kbGluZSBzd2l0Y2ggb3IgZW52aXJvbm1lbnQgdmFyaWFibGUuIEZpeGVzICM1MjA0NjguCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHBhdGNoIGJ5OiBKYXNvbiBaaGFvIDxlMzQyM2NAbW90b3JvbGEuY29tPgorCSAgKiBkb2NzL2dzdC9ydW5uaW5nLnhtbDoKKwkgICogZ3N0L2dzdC5jOgorCSAgRW5hYmxlL2Rpc2FibGUgc2Nhbl9hbmRfdXBkYXRlX3JlZ2lzdHJ5KCkgYmFzZWQgb24gY29tbWFuZGxpbmUgc3dpdGNoCisJICBvciBlbnZpcm9ubWVudCB2YXJpYWJsZS4gRml4ZXMgIzUyMDQ2OC4KKwkgICogQ2hhbmdlTG9nOgorCSAgRml4IHR5cG8gaW4gbXkgcHJldmlvdXMgY29tbWl0LgorCisyMDA4LTA0LTI0IDA4OjI3OjU5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiBBZGQgYSB3YXJuaW5nIG9mIHdlIGhpdCB1bmhhbmRsZWQgZmFjdG9yaWVzIHdoZW4gc2F2aW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgorCSAgQWRkIGEgd2FybmluZyBvZiB3ZSBoaXQgdW5oYW5kbGVkIGZhY3RvcmllcyB3aGVuIHNhdmluZy4KKwkgIE1vcmUgZGVidWcgbG9nZ2luZyBkZXRhaWwsIGJ1dCBtb3ZlIHRvIExPRyBjYXRlZ29yeS4KKworMjAwOC0wNC0yNCAwNjo0Njo1NCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0cmVnaXN0cnkuYzogVGVsbCB0aGUgKnRydXRoKiB3aGVuIGltcHJvdmluZyB0aGUgZG9jdW1lbnRhdGlvbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzoKKwkgIFRlbGwgdGhlICp0cnV0aCogd2hlbiBpbXByb3ZpbmcgdGhlIGRvY3VtZW50YXRpb24uCisKKzIwMDgtMDQtMjMgMTQ6NTQ6MjAgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6IFVucmVmIHRoZSBmYWN0b3J5IGFmdGVyIGl0IHdhcyB1c2VkIHRoZSBsYXN0IHRpbWUsIG5vdCBiZWZvcmUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6IChnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UpOgorCSAgVW5yZWYgdGhlIGZhY3RvcnkgYWZ0ZXIgaXQgd2FzIHVzZWQgdGhlIGxhc3QgdGltZSwgbm90IGJlZm9yZS4KKwkgICogZ3N0L2dzdGluZGV4ZmFjdG9yeS5jOiAoZ3N0X2luZGV4X2ZhY3RvcnlfbWFrZSk6CisJICBJbXByb3ZlIGRlYnVnZ2luZyBhIGJpdCBhbmQgZG9uJ3QgbGVhayBhIHJlZiB0byB0aGUgaW5kZXggZmFjdG9yeSB3aXRoCisJICBlYWNoIGNhbGwuCisKKzIwMDgtMDQtMjMgMTM6NTU6MDEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdHJlZ2lzdHJ5LmM6IEltcHJvdmUgdGhlIGRvY3VtZW50YXRpb24uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6CisJICBJbXByb3ZlIHRoZSBkb2N1bWVudGF0aW9uLgorCisyMDA4LTA0LTIzIDEwOjE0OjM4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3RzZWdtZW50LmM6IFRoZSBnbGliIG1hY3JvIHNlZW1zIHRvIGJlIGJvcmtlZC4gVXNlIGdfc2xpY2VfY29weSBkaXJlY3RseSBhbmQgY2FzdCBpbiB0aGUgaG9wZSB0aGF0IHRoaXMgZml4ZXMgdC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RzZWdtZW50LmM6CisJICBUaGUgZ2xpYiBtYWNybyBzZWVtcyB0byBiZSBib3JrZWQuIFVzZSBnX3NsaWNlX2NvcHkgZGlyZWN0bHkgYW5kIGNhc3QKKwkgIGluIHRoZSBob3BlIHRoYXQgdGhpcyBmaXhlcyB0aGUgd2FybmluZyBvbiA2NGJpdC4KKworMjAwOC0wNC0yMyAwNzowODo1MyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0c2VnbWVudC5jOiBEb2N1bWVudCB0aGUgbmV3IGZ1bmN0aW9uLiBVc2UgZ19zbGljZV9kdXAoKSAobm8gbmVlZCBmb3IgZ3N0X3NlZ21lbnRfaW5pdCgpKS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0c2VnbWVudC5jOgorCSAgRG9jdW1lbnQgdGhlIG5ldyBmdW5jdGlvbi4gVXNlIGdfc2xpY2VfZHVwKCkgKG5vIG5lZWQgZm9yCisJICBnc3Rfc2VnbWVudF9pbml0KCkpLgorCisyMDA4LTA0LTIzIDA2OjU3OjMwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IE1vdmUgR1BhcmFtU2VwYyBtYWNyb3MgdG8gc3RhbmRhcnQgc2VjdGlvbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgTW92ZSBHUGFyYW1TZXBjIG1hY3JvcyB0byBzdGFuZGFydCBzZWN0aW9uLgorCSAgKiBnc3QvZ3N0YmluLmM6CisJICBEbid0IGRvY3VtZW50IF9nZXRfdHlwZSAtIGl0cyBpbiBwcml2YXRlIHNlY3Rpb24gaW4gZG9jcyBhbnl3YXkgYW5kCisJICB0aGlzIGRvYy1ibG9iIHdhcyBpbmNvbXBsZXRlLgorCSAgKiBnc3QvZ3N0Y2xvY2suaDoKKwkgIEZpeCB3cm9uZyBzeW1ib2wgbmFtZXMgaW4gZG9jcy4KKwkgICogZ3N0L2dzdG1hY3Jvcy5oOgorCSAgQWRkIG9uY2UgZG9jIHNlbnRlbmNlLgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvLmN2c2lnbm9yZToKKwkgIElnbm9yZSBtb3JlLgorCisyMDA4LTA0LTIxIDEwOjI1OjAyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvZ3N0L01ha2VmaWxlLmFtOiBBbmQgcmVtb3ZlIHRob3NlIGxpYnMgaGVyZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9NYWtlZmlsZS5hbToKKwkgIEFuZCByZW1vdmUgdGhvc2UgbGlicyBoZXJlLgorCisyMDA4LTA0LTIxIDA5OjI5OjM3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBkb2NzL2xpYnMvTWFrZWZpbGUuYW06IEZpeCBkb2NzIGJ1aWxkIGFnYWluIGJ5IGFkZGluZyBsaWJnc3RuZXQtMC4xMC5zbyB0byBTQ0FOT0JKX0RFUFMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9saWJzL01ha2VmaWxlLmFtOgorCSAgRml4IGRvY3MgYnVpbGQgYWdhaW4gYnkgYWRkaW5nIGxpYmdzdG5ldC0wLjEwLnNvIHRvIFNDQU5PQkpfREVQUy4KKworMjAwOC0wNC0yMSAwODozNDowOSArMDAwMCAgT2xpdmllciBDcmV0ZSA8dGVzdGVyQHRlc3Rlci5jYT4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiBBZGQgdGhlIG1pbi10aHJlc2hvbGQgdG8gdGhlIG1pbiBsYXRlbmN5IGlmIHBvc3NpYmxlLiBGaXhlcyAjNTI5MTQ4LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogT2xpdmllciBDcmV0ZSA8dGVzdGVyIGF0IHRlc3RlciBkb3QgY2E+CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9oYW5kbGVfc3JjX3F1ZXJ5KToKKwkgIEFkZCB0aGUgbWluLXRocmVzaG9sZCB0byB0aGUgbWluIGxhdGVuY3kgaWYgcG9zc2libGUuIEZpeGVzICM1MjkxNDguCisKKzIwMDgtMDQtMjEgMDc6NDU6NDggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzLmluOiBTdHVwaWQgZWRpdG9yLCBJIHJlbW92ZWQgdGhhdCBsaW5lIGFzIGl0IHNob3VsZCBnbyBpbiB5ZXQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzLmluOgorCSAgU3R1cGlkIGVkaXRvciwgSSByZW1vdmVkIHRoYXQgbGluZSBhcyBpdCBzaG91bGQgZ28gaW4geWV0LgorCisyMDA4LTA0LTIxIDA3OjQyOjE0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvOiBSZW1vdmUgbGlicmFyeSB0eXBlcyBmcm8gY29yZSBkb2NzIGFuZCBoYXZlIHRoZW0gaW4gbGlicyBkb2NzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlcy5pbjoKKwkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLnR5cGVzOgorCSAgUmVtb3ZlIGxpYnJhcnkgdHlwZXMgZnJvIGNvcmUgZG9jcyBhbmQgaGF2ZSB0aGVtIGluIGxpYnMgZG9jcy4KKwkgIFJlZm9ybWF0IGFuZCBjbGVhbnVwLiBBZGQgY29tbWVudCBmb3IgbWluaW9iamVjdCB0eXBlcy4KKworMjAwOC0wNC0yMCAxNjozMjowMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdHVyaS5jOiBGaXggbGVhazogZ19zdHJkb3duIG9wZXJhdGVzIG9uIHRoZSBzdHJpbmcgaW4gcGxhY2UsIHdoaWxlIGdfYXNjaWlfc3RyZG93bigpIHJldHVybnMgYSBuZXdseS1hbGxvY2F0ZWQgLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHVyaS5jOiAoZ3N0X3VyaV9nZXRfcHJvdG9jb2wpOgorCSAgRml4IGxlYWs6IGdfc3RyZG93biBvcGVyYXRlcyBvbiB0aGUgc3RyaW5nIGluIHBsYWNlLCB3aGlsZQorCSAgZ19hc2NpaV9zdHJkb3duKCkgcmV0dXJucyBhIG5ld2x5LWFsbG9jYXRlZCBzdHJpbmcuCisKKzIwMDgtMDQtMjAgMDk6NTU6MjUgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgdG9vbHMvZ3N0LWluc3BlY3QuYzogUHJpbnQgdGhlIFVSSSBwcm90b2NvbHMgYW5kIHRoZSBVUkkgdHlwZSBzdXBwb3J0ZWQgYnkgdGhlIGVsZW1lbnQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKHByaW50X3VyaV9oYW5kbGVyX2luZm8pLAorCSAgKHByaW50X2VsZW1lbnRfaW5mbyk6CisJICBQcmludCB0aGUgVVJJIHByb3RvY29scyBhbmQgdGhlIFVSSSB0eXBlIHN1cHBvcnRlZCBieSB0aGUgZWxlbWVudC4KKworMjAwOC0wNC0xOSAxNjowNTo1OCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBnc3QvZ3N0dGFnbGlzdC5jOiBVc2UgZ192YWx1ZV90YWtlX3N0cmluZygpIGluc3RlYWQgb2YgdGhlIGRlcHJlY2F0ZWQgZ192YWx1ZV9zZXRfc3RyaW5nX3Rha2Vfb3duZXJzaGlwKCkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHRhZ2xpc3QuYzogKGdzdF90YWdfbWVyZ2Vfc3RyaW5nc193aXRoX2NvbW1hKToKKwkgIFVzZSBnX3ZhbHVlX3Rha2Vfc3RyaW5nKCkgaW5zdGVhZCBvZiB0aGUgZGVwcmVjYXRlZAorCSAgZ192YWx1ZV9zZXRfc3RyaW5nX3Rha2Vfb3duZXJzaGlwKCkuCisKKzIwMDgtMDQtMTkgMTU6NDI6MTkgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IFJldHVybiB0aGUgb2xkIENSQyBpbnN0ZWFkIG9mIDAgaWYgd2UgZ2l2ZSBhIE5VTEwgYnVmZmVyIG9yIGEgYnVmZmVyIHdpdGggYSBsZW5ndGggb2YgMC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogKF9nc3RfY3JjMzIpOgorCSAgUmV0dXJuIHRoZSBvbGQgQ1JDIGluc3RlYWQgb2YgMCBpZiB3ZSBnaXZlIGEgTlVMTCBidWZmZXIKKwkgIG9yIGEgYnVmZmVyIHdpdGggYSBsZW5ndGggb2YgMC4KKworMjAwOC0wNC0xOSAxNTozNjoyMCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBnc3QvZ3N0dXJpLmM6IEEgdmFsaWQgVVJJIHNjaGVtZSBjYW4gYWxzbyBpbmNsdWRlICcrJywgJy0nIGFuZCAnLicgYWRkaXRpb25hbCB0byBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhcyBwZXIgUkZDIDMuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dXJpLmM6IChnc3RfdXJpX3Byb3RvY29sX2NoZWNrX2ludGVybmFsKSwKKwkgIChnc3RfdXJpX2dldF9wcm90b2NvbCksIChnc3RfdXJpX2hhc19wcm90b2NvbCksCisJICAoZ3N0X3VyaV9jb25zdHJ1Y3QpLCAoZ3N0X3VyaV9oYW5kbGVyX3NldF91cmkpOgorCSAgQSB2YWxpZCBVUkkgc2NoZW1lIGNhbiBhbHNvIGluY2x1ZGUgJysnLCAnLScgYW5kICcuJyBhZGRpdGlvbmFsCisJICB0byBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhcyBwZXIgUkZDIDM5ODYgU2VjdGlvbiAzLjEuCisJICBIYW5kbGUgVVJJIHNjaGVtZXMgY2FzZSBpbnNlbnNpdGl2ZSBpbiBhbGwgcGxhY2VzIGFuZCBjb252ZXJ0CisJICB0byBsb3dlci1jYXNlIHdoZW4gY29uc3RydWN0aW5nIGFuIFVSSSBvciBzZXR0aW5nIGFuIFVSSSB3aXRoCisJICB0aGUgR3N0VVJJSGFuZGxlciBpbnRlcmZhY2UuIEZpeGVzIGJ1ZyAjNTI4ODY4LgorCSAgQWxsIGVsZW1lbnRzIGNhbiBzdGlsbCBhc3N1bWUgKGFzIGJlZm9yZSkgdGhhdCB0aGV5IHdpbGwKKwkgIGdldCBwYXNzZWQgVVJJcyB3aXRoIGEgbG93ZXItY2FzZSBVUkkgc2NoZW1lIGJ5IHRoZSBHc3RVUklIYW5kbGVyCisJICBpbnRlcmZhY2UuCisKKzIwMDgtMDQtMTcgMTA6MDk6MzkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC86IERvbid0IHVzZSBnX2F0b21pY19zZXRfaW50IHdoZXJlIGl0J3Mgbm90IG5lZWRlZC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0Y2Fwcy5jOiAoZ3N0X3N0YXRpY19jYXBzX2dldCk6CisJICAqIGdzdC9nc3RjbG9jay5jOiAoZ3N0X2Nsb2NrX2VudHJ5X25ldyk6CisJICBEb24ndCB1c2UgZ19hdG9taWNfc2V0X2ludCB3aGVyZSBpdCdzIG5vdCBuZWVkZWQuCisKKzIwMDgtMDQtMTcgMDg6NDU6MTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC86IEZpeCAyIGNhcHMgbGVha3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfZGVzZXJpYWxpemVfY2Fwcyk6CisJICAqIGdzdC9wYXJzZS9ncmFtbWFyLnk6CisJICBGaXggMiBjYXBzIGxlYWtzLgorCisyMDA4LTA0LTE3IDA4OjM0OjE0ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIGdzdC9nc3R1dGlscy5jOiBVc2UgZ19hdG9taWNfaW50X3NldCgpIGhlcmUgdG9vIGluc3RlYWQgb2YgYXNzaWdubWVudCArIGdfYXRvbWljX2ludF9nZXQoKS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9hdG9taWNfaW50X3NldCk6CisJICBVc2UgZ19hdG9taWNfaW50X3NldCgpIGhlcmUgdG9vIGluc3RlYWQgb2YgYXNzaWdubWVudCArCisJICBnX2F0b21pY19pbnRfZ2V0KCkuCisKKzIwMDgtMDQtMTcgMDc6MTQ6NDYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgZ3N0L2dzdHV0aWxzLio6IEFQSTogRGVwcmVjYXRlIGdzdF9hdG9taWNfaW50X3NldCgpLCBnX2F0b21pY19pbnRfc2V0KCkgc2hvdWxkIGJlIHVzZWQgbm93IHRoYXQgd2UgZGVwZW5kIG9uIG5ldyBlbm91Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHV0aWxzLmM6CisJICAqIGdzdC9nc3R1dGlscy5oOgorCSAgQVBJOiBEZXByZWNhdGUgZ3N0X2F0b21pY19pbnRfc2V0KCksIGdfYXRvbWljX2ludF9zZXQoKSBzaG91bGQgYmUgdXNlZAorCSAgbm93IHRoYXQgd2UgZGVwZW5kIG9uIG5ldyBlbm91Z2ggR0xpYi4KKwkgICogZ3N0L2dzdGNhcHMuYzogKGdzdF9zdGF0aWNfY2Fwc19nZXQpOgorCSAgKiBnc3QvZ3N0Y2xvY2suYzogKGdzdF9jbG9ja19lbnRyeV9uZXcpOgorCSAgKiBnc3QvZ3N0aW5mby5jOiAoX2dzdF9kZWJ1Z19pbml0KSwgKGdzdF9kZWJ1Z19zZXRfY29sb3JlZCksCisJICAoZ3N0X2RlYnVnX3NldF9kZWZhdWx0X3RocmVzaG9sZCksIChfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldyksCisJICAoZ3N0X2RlYnVnX2NhdGVnb3J5X3NldF90aHJlc2hvbGQpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2luaXQpLAorCSAgKGdzdF9iYXNlX3Npbmtfc2V0X3Fvc19lbmFibGVkKToKKwkgICogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jOgorCSAgKGdzdF9uZXRfdGltZV9wcm92aWRlcl9zZXRfcHJvcGVydHkpOgorCSAgVXNlIGdfYXRvbWljX2ludF9zZXQoKSBpbnN0ZWFkIG9mIGdzdF9hdG9taWNfaW50X3NldCgpLgorCisyMDA4LTA0LTE2IDE4OjQ4OjAzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3RxdWVyeS5jOiBBbHNvIHVzZSBHX0dJTlQ2NF9DT05TVEFOVCBmb3IgdGhlIHF1ZXJpZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHF1ZXJ5LmM6CisJICBBbHNvIHVzZSBHX0dJTlQ2NF9DT05TVEFOVCBmb3IgdGhlIHF1ZXJpZXMuCisKKzIwMDgtMDQtMTYgMTg6Mzg6MTYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdG1lc3NhZ2UuYzogVXNlIEdfR0lOVDY0X0NPTlNUQU5UIGluIHZhcmFyZ3MgZnVuY3Rpb24uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdG1lc3NhZ2UuYzoKKwkgIFVzZSBHX0dJTlQ2NF9DT05TVEFOVCBpbiB2YXJhcmdzIGZ1bmN0aW9uLgorCisyMDA4LTA0LTE2IDE1OjUxOjE3ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiBJbml0aWFsaXplIHRoZSByZWdpc3RyeSBtYWdpYyB3aXRoIHplcm9lcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogKGdzdF9yZWdpc3RyeV9iaW5hcnlfaW5pdGlhbGl6ZV9tYWdpYyk6CisJICBJbml0aWFsaXplIHRoZSByZWdpc3RyeSBtYWdpYyB3aXRoIHplcm9lcy4KKworMjAwOC0wNC0xNiAxNDoxODo1OCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuKjogQWRkIGNyYzMyIGNoZWNrc3VtIHRvIHRoZSBiaW5hcnkgcmVnaXN0cnkgZmlsZSBhbmQgY2hlY2sgdGhpcyBiZWZvcmUgYWNjZXB0aW5nIGEgcmVnaXN0cnkgZmlsZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogKF9nc3RfY3JjMzIpLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfd3JpdGUpLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfaW5pdGlhbGl6ZV9tYWdpYyksCisJICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV93cml0ZV9jYWNoZSksCisJICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9jaGVja19tYWdpYyksCisJICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9yZWFkX2NhY2hlKToKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5Lmg6CisJICBBZGQgY3JjMzIgY2hlY2tzdW0gdG8gdGhlIGJpbmFyeSByZWdpc3RyeSBmaWxlIGFuZCBjaGVjayB0aGlzIGJlZm9yZQorCSAgYWNjZXB0aW5nIGEgcmVnaXN0cnkgZmlsZS4KKwkgIEFsc28gZnJlZSB0aGUgZGF0YSBsaXN0IHdoZW4gd3JpdGluZyB0byB0aGUgcmVnaXN0cnkgZmlsZSBmYWlscy4KKworMjAwOC0wNC0xNiAxMzoxNjo0NCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogSWYgYW4gZWxlbWVudCBzdXBwb3J0cyB0aGUgVXJpIGludGVyZmFjZSwgcmV0dXJucyBhIHZhbGlkIHBvaW50ZXIgdG8gdGhlIHN1cHBvcnRlZCBVUkkgcHJvdG8uLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogKGdzdF9yZWdpc3RyeV9iaW5hcnlfc2F2ZV9mZWF0dXJlKSwKKwkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2xvYWRfZmVhdHVyZSksCisJICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9sb2FkX3BsdWdpbik6CisJICBJZiBhbiBlbGVtZW50IHN1cHBvcnRzIHRoZSBVcmkgaW50ZXJmYWNlLCByZXR1cm5zIGEgdmFsaWQgcG9pbnRlcgorCSAgdG8gdGhlIHN1cHBvcnRlZCBVUkkgcHJvdG9jb2xzIGJ1dCB0aGlzIHBvaW50ZXIgY29udGFpbnMgbm90aGluZworCSAgZG9uJ3QgdHJ5IHRvIHNhdmUgdGhhdCBhcyBpdCB3aWxsIGNvcnJ1cHQgdGhlIHJlZ2lzdHJ5LgorCSAgRG9uJ3QgdW5yZWYgdGhlIHBsdWdpbiBpZiB3ZSBhZGRlZCBpdCB0byB0aGUgcmVnaXN0cnkgYWxyZWFkeSBidXQKKwkgIGZhaWwgdG8gbG9hZCBhIGZlYXR1cmUgYXMgZ3N0X3JlZ2lzdHJ5X2FkZF9wbHVnaW4oKSB0YWtlcyBvd25lcnNoaXAKKwkgIG9mIHRoZSBwbHVnaW4uCisJICBJbXByb3ZlIGRlYnVnZ2luZyBhIGJpdC4KKworMjAwOC0wNC0xNiAwODozMDo1NyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0dGFnbGlzdC5oOiBDbGFyaWZ5IHNvbWUgdGFnIGl0ZW0gZG9jcyBhZnRlciBkaXNjdXNzaW9uIG9uIGlyYy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dGFnbGlzdC5oOgorCSAgQ2xhcmlmeSBzb21lIHRhZyBpdGVtIGRvY3MgYWZ0ZXIgZGlzY3Vzc2lvbiBvbiBpcmMuCisKKzIwMDgtMDQtMTUgMDY6MjM6MTQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDogUmVtb3ZlIGNvbW1lbnRlZCBvdXQgcGx1Z2lucyAodGhleSBoYXZlIHRoZWlyIG93biBkb2NzKS4gVXBkYXRlIGNvbW1lbnRzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6CisJICBSZW1vdmUgY29tbWVudGVkIG91dCBwbHVnaW5zICh0aGV5IGhhdmUgdGhlaXIgb3duIGRvY3MpLiBVcGRhdGUKKwkgIGNvbW1lbnRzLgorCisyMDA4LTA0LTE1IDA2OjE2OjMzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIEFkZCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIGFuZCBHU1RfUEFSQU1fVVNFUl9TSElGVC4gTW92ZSBwYXJhbXNwZWMgZG9jcyB0byBvd24gc2VjdGlvbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBnc3QvZ3N0cGFyYW1zcGVjcy5jOgorCSAgKiBnc3QvZ3N0cGFyYW1zcGVjcy5oOgorCSAgQWRkIEdTVF9QQVJBTV9DT05UUk9MTEFCTEUgYW5kIEdTVF9QQVJBTV9VU0VSX1NISUZULiBNb3ZlIHBhcmFtc3BlYworCSAgZG9jcyB0byBvd24gc2VjdGlvbi4KKwkgICogZ3N0L2dzdHZhbHVlLmM6CisJICBUaGlzIG5vdyBvbmx5IGRvY3VtZW50cyBHVmFsdWUuCisJICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5oOgorCSAgUmVtb3ZlIEdTVF9QQVJBTV9DT05UUk9MTEFCTEUuCisKKzIwMDgtMDQtMTUgMDU6NTQ6MTMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZG9jcy9SRUFETUU6IENvcnJlY3QgZmlsZSBwYXRoLiBUZWxsIGFib3V0IGhvdyB0byB1c2UgLW92ZXJyaWRlcy50eHQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9SRUFETUU6CisJICBDb3JyZWN0IGZpbGUgcGF0aC4gVGVsbCBhYm91dCBob3cgdG8gdXNlIC1vdmVycmlkZXMudHh0LgorCSAgKiBkb2NzL2Rlc2lnbi9kcmFmdC10YWdyZWFkaW5nLnR4dDoKKwkgIFNtYWxsIGRlc2lnbiB1cGRhdGUuCisKKzIwMDgtMDQtMTQgMTI6MTI6MjIgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IEZpeCBhIHR5cG8gaW4gYSBkZWJ1ZyBtZXNzYWdlIGFuZCByZXZlcnQgY2hhbmdlIGZyb20geWVzdGVyZGF5IGFzIGdzdF9yZWdpc3RyeV9hZGRfcGx1Z2luKCkgLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IChnc3RfcmVnaXN0cnlfYmluYXJ5X2xvYWRfZmVhdHVyZSksCisJICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9sb2FkX3BsdWdpbik6CisJICBGaXggYSB0eXBvIGluIGEgZGVidWcgbWVzc2FnZSBhbmQgcmV2ZXJ0IGNoYW5nZSBmcm9tIHllc3RlcmRheSBhcworCSAgZ3N0X3JlZ2lzdHJ5X2FkZF9wbHVnaW4oKSB3aWxsIG9ubHkgZmFpbCBpZiBzb21ldGhpbmcgaXMgcmVhbGx5IHdyb25nCisJICBhbHJlYWR5IGFuZCB3ZSBjYW4ndCBzdXJ2aXZlIGl0IGFueXdheS4KKworMjAwOC0wNC0xNCAwODo0ODo1MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdC5jOiBQcmUtcmVnaXN0ZXIgR3N0R0Vycm9yIEdUeXBlIGZyb20gYSB0aHJlYWQtc2FmZSBjb250ZXh0IChmaXhlcyAjNTI3OTY3KTsgdW5yZWYgZW51bSB0eXBlIGNsYXNzZXMgaW4gZGVpbml0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3QuYzogKGluaXRfcG9zdCksIChnc3RfZGVpbml0KToKKwkgIFByZS1yZWdpc3RlciBHc3RHRXJyb3IgR1R5cGUgZnJvbSBhIHRocmVhZC1zYWZlIGNvbnRleHQKKwkgIChmaXhlcyAjNTI3OTY3KTsgdW5yZWYgZW51bSB0eXBlIGNsYXNzZXMgaW4gZGVpbml0LgorCisyMDA4LTA0LTEzIDE5OjU4OjQzICswMDAwICBSZW5lIFN0YWRsZXIgPG1haWxAcmVuZXN0YWRsZXIuZGU+CisKKwkgIGdzdC9nc3R0YWdzZXR0ZXIuYzogTWVyZ2luZyBhbiBlbXB0eSBsaXN0IHdpdGggYW5vdGhlciBsaXN0IGluIEtFRVBfQUxMIG1vZGUgc2hvdWxkIHlpZWxkIGFuIGVtcHR5IGxpc3QgYXMgcmVzdWx0IGFuZC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogUmVuZSBTdGFkbGVyIDxtYWlsIGF0IHJlbmVzdGFkbGVyIGRlPgorCSAgKiBnc3QvZ3N0dGFnc2V0dGVyLmM6IChnc3RfdGFnX3NldHRlcl9tZXJnZV90YWdzKToKKwkgIE1lcmdpbmcgYW4gZW1wdHkgbGlzdCB3aXRoIGFub3RoZXIgbGlzdCBpbiBLRUVQX0FMTCBtb2RlIHNob3VsZAorCSAgeWllbGQgYW4gZW1wdHkgbGlzdCBhcyByZXN1bHQgYW5kIG5vdCB0aGUgc2Vjb25kIGxpc3QgKCM1MTI1NzgpLgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFnc2V0dGVyLmM6CisJICBBZGQgdW5pdCB0ZXN0IGZvciB0YWcgbWVyZ2UgbW9kZXMgYW5kIHRoZSBhZm9yZW1lbnRpb25lZCBidWcuCisKKzIwMDgtMDQtMTMgMTg6NTA6MDUgKzAwMDAgIFJlbmUgU3RhZGxlciA8bWFpbEByZW5lc3RhZGxlci5kZT4KKworCSAgZ3N0L2dzdHRhZ2xpc3QuaDogRml4IGRlc2NyaXB0aW9uIHRvIG1hdGNoIHRoZSBvcmRlciBpbiB0aGUgdGFibGUgKCM1MTI1NzcpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogUmVuZSBTdGFkbGVyIDxtYWlsIGF0IHJlbmVzdGFkbGVyIGRlPgorCSAgKiBnc3QvZ3N0dGFnbGlzdC5oOgorCSAgRml4IGRlc2NyaXB0aW9uIHRvIG1hdGNoIHRoZSBvcmRlciBpbiB0aGUgdGFibGUgKCM1MTI1NzcpLgorCisyMDA4LTA0LTEzIDE3OjUxOjAyICswMDAwICBLd2FuZyBZdWwgU2VvIDxrd2FuZ3l1bC5zZW8uZ21haWwuY29tPgorCisJICBEZWZpbmUgc29ja2xlbl90IGFzIGludCBpZiBpdCdzIG5vdCBkZWZpbmVkIHlldC4gRml4ZXMgY29tcGlsYXRpb24gd2l0aCBNU1ZDNiBhbmQgb3RoZXIgdmVyc2lvbnMgd2hlcmUgc29ja2xlbl90IGlzIG4uLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IEt3YW5nIFl1bCBTZW8gIDxrd2FuZ3l1bC5zZW8gZ21haWwgY29tPgorCSAgKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXBhY2tldC5oOgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSAgRGVmaW5lIHNvY2tsZW5fdCBhcyBpbnQgaWYgaXQncyBub3QgZGVmaW5lZCB5ZXQuIEZpeGVzIGNvbXBpbGF0aW9uCisJICB3aXRoIE1TVkM2IGFuZCBvdGhlciB2ZXJzaW9ucyB3aGVyZSBzb2NrbGVuX3QgaXMgbm90IGRlZmluZWQgaW4KKwkgIHRoZSB3aW5kb3dzIGhlYWRlcnMgKCM1MTgwMjIpLgorCisyMDA4LTA0LTEzIDEzOjU0OjU1ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiBJZiBnc3RfcmVnaXN0cnlfYWRkX3BsdWdpbigpIGZhaWxzIG91ciByZWZlcmVuY2UgdG8gdGhlIHBsdWdpbiBpcyBpbnZhbGlkIHNvIGRvbid0IHRyeSB0byB1cy4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9sb2FkX3BsdWdpbik6CisJICBJZiBnc3RfcmVnaXN0cnlfYWRkX3BsdWdpbigpIGZhaWxzIG91ciByZWZlcmVuY2UgdG8gdGhlIHBsdWdpbiBpcworCSAgaW52YWxpZCBzbyBkb24ndCB0cnkgdG8gdXNlIGl0IGFueW1vcmUgYW5kIGluc3RlYWQgZXJyb3Igb3V0LgorCisyMDA4LTA0LTEyIDIwOjUyOjU4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICB0b29scy9nc3QteG1saW5zcGVjdC5jOiBEZS1jcnVmdCBhIGJpdC4gSWYgbm8gYXJndW1lbnQgaXMgc3BlY2lmaWVkLCBwcmludCBhbGwgZWxlbWVudHMgaW4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0b29scy9nc3QteG1saW5zcGVjdC5jOiAocHJpbnRfZWxlbWVudF9pbmZvKSwgKG1haW4pOgorCSAgRGUtY3J1ZnQgYSBiaXQuIElmIG5vIGFyZ3VtZW50IGlzIHNwZWNpZmllZCwgcHJpbnQgYWxsIGVsZW1lbnRzIGluCisJICBYTUwgc3ludGF4IHJhdGhlciB0aGFuIGEgZnJlZXN0eWxlIGxpc3Qgb2YgZWxlbWVudHMgbGlrZSBnc3QtaW5zcGVjdC4KKwkgIEFsc28sIGRvbid0IHByaW50IFhNTCBoZWFkZXIgY2h1bmsgdW5sZXNzIHdlIGFjdHVhbGx5IGhhdmUgc29tZXRoaW5nCisJICB0byBwcmludCAoaWUuIGRvbid0IHByaW50IGl0IGJlZm9yZSBhbiBlcnJvciBtZXNzYWdlKTsgcHJpbnQgZXJyb3IKKwkgIG1lc3NhZ2UgdG8gc3RkZXJyIG5vdCBzdGRvdXQuIFJlbW92ZSBzdXBwb3J0IGZvciBwcmludGluZyBwbHVnaW4KKwkgIGluZm8gKGl0IHdvdWxkIGp1c3Qgb3V0cHV0IHNvbWV0aGluZyBmcmVlc3R5bGUgYWxvbmcgdGhlIGxpbmVzIG9mCisJICBnc3QtaW5zcGVjdCBzbyBmYXIpLCB3aGljaCBmaXhlcyAjNTE0NTA3LiBBbHNvIGFkZCBsaWNlbnNlIGhlYWRlci4KKworMjAwOC0wNC0xMSAwOToyNzo0NCArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+CisKKwkgIE1hYyBPUyBYIGxvdmUuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwOC0wNC0xMSAgSnVsaWVuIE1vdXR0ZSAgPGp1bGllbkBmbHVlbmRvLmNvbT4KKwkgIE1hYyBPUyBYIGxvdmUuLi4KKwkgICogY29uZmlndXJlLmFjOiBNZXJnZSBwbGF0Zm9ybSBzcGVjaWZpYyBkZWZpbmVzLCBpbnRyb2R1Y2UgYSBuZXcKKwkgIGRlZmluZSBvbiBPUyBYIHRvIHJlbWVtYmVyIHRoYXQgZm9ya2luZyB3aGVuIHVwZGF0aW5nIHJlZ2lzdHJ5IGlzCisJICB1bnNhZmUuCisJICAqIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDogVXBkYXRlZCB0byBpbmNsdWRlIGdzdC1saWJzIGluIHRoZSBiYWQKKwkgIG1vZHVsZS4KKwkgICogZ3N0L2dzdC5jOiBEb24ndCBmb3JrIHdoZW4gdXBkYXRpbmcgcmVnaXN0cnkgaWYgR1NUX0hBVkVfVU5TQUZFX0ZPUksKKwkgIGlzIGRlZmluZWQuCisJICAqIGdzdC9nc3RyZWdpc3RyeS5jOiAoZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9sZXZlbCk6IEZpeGVkIGEgYm9ndXMKKwkgIGNvbmRpdGlvbiB0aGF0IGxlYWRzIHRvIGFic29sdXRlbHkgbm8gcGx1Z2lucyBiZWluZyByZWdpc3RlcmVkIG9uCisJICBPUyBYLgorCisyMDA4LTA0LTEwIDIwOjQ2OjUxICswMDAwICBKb3PDqSBBbGJ1cnF1ZXJxdWUgPGphYWxidXJxdUBzdm4uZ25vbWUub3JnPgorCisJICBBZGQgZ3N0X3BhZF9hZGRfKl9wcm9iZV9mdWxsKCkgZnVuY3Rpb25zIHdpdGggYSBub3RpZnkgY2FsbGJhY2sgdGhhdCBsZXRzIHRoZSBjYWxsZXIgZnJlZSB0aGUgZGF0YSBpdCBwYXNzZXMgdG8gdGhlIHAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgQmFzZWQgb24gcGF0Y2ggYnk6IEpvc8OpIEFsYnVycXVlcnF1ZSA8amFhbGJ1cnF1IGF0IHN2biBkb3QgZ25vbWUgZG90IG9yZz4KKwkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfcGFkX2FkZF9kYXRhX3Byb2JlKSwKKwkgIChnc3RfcGFkX2FkZF9kYXRhX3Byb2JlX2Z1bGwpLCAoZ3N0X3BhZF9hZGRfZXZlbnRfcHJvYmUpLAorCSAgKGdzdF9wYWRfYWRkX2V2ZW50X3Byb2JlX2Z1bGwpLCAoZ3N0X3BhZF9hZGRfYnVmZmVyX3Byb2JlKSwKKwkgIChnc3RfcGFkX2FkZF9idWZmZXJfcHJvYmVfZnVsbCk6CisJICAqIGdzdC9nc3R1dGlscy5oOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIEFkZCBnc3RfcGFkX2FkZF8qX3Byb2JlX2Z1bGwoKSBmdW5jdGlvbnMgd2l0aCBhIG5vdGlmeSBjYWxsYmFjayB0aGF0CisJICBsZXRzIHRoZSBjYWxsZXIgZnJlZSB0aGUgZGF0YSBpdCBwYXNzZXMgdG8gdGhlIHByb2JlIGZ1bmN0aW9ucy4gVGhpcworCSAgaXMgdXNlZnVsIGZvciBiaW5kaW5ncyBzdWNoIGFzIGdzdC1weXRob24gb3IgZ3N0cmVhbWVybW0gKCM1MjY4MTQpLgorCSAgQVBJOiBnc3RfcGFkX2FkZF9kYXRhX3Byb2JlX2Z1bGwKKwkgIEFQSTogZ3N0X3BhZF9hZGRfYnVmZmVyX3Byb2JlX2Z1bGwKKwkgIEFQSTogZ3N0X3BhZF9hZGRfZXZlbnRfcHJvYmVfZnVsbAorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzoKKwkgIEFkZCBtaW5pbWFsIHVuaXQgdGVzdCB0byBtYWtlIHN1cmUgZnJlZWluZyB0aGUgZGF0YSBhY3R1YWxseSB3b3JrcworCSAgYXMgZXhwZWN0ZWQuCisJICAqIHRlc3RzL2JlbmNobWFya3MvLmN2c2lnbm9yZToKKwkgIFJhbmRvbSBjdnNpZ25vcmUgYWRkZW5kdW0uCisKKzIwMDgtMDQtMTAgMTk6MTM6NDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RkZWJ1Z3V0aWxzLmg6IE1lbnRpb24gR3N0RGVidWdHcmFwaERldGFpbHMgZW51bSB0eXBlIGluIGRvYyBibHVyYiBzbyB3ZSBnZXQgYSBsaW5rIHRvIGl0IGluIHRoZSBkb2NzIChzaW5jZSB0aC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RkZWJ1Z3V0aWxzLmg6IChHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFX1dJVEhfVFMpLAorCSAgKEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEUpOgorCSAgTWVudGlvbiBHc3REZWJ1Z0dyYXBoRGV0YWlscyBlbnVtIHR5cGUgaW4gZG9jIGJsdXJiIHNvIHdlIGdldCBhIGxpbmsKKwkgIHRvIGl0IGluIHRoZSBkb2NzIChzaW5jZSB0aGVzZSBhcmUgbWFjcm9zIHRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzCisJICB3b24ndCBiZSBzaG93biBpbiB0aGUgZG9jcyBvdGhlcndpc2UpLgorCisyMDA4LTA0LTEwIDE0OjEwOjUxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3RwYWQuYzogRG8gbm90IGFib3J0IG9uIG91dCBvZiBtZW1vcnkgZm9yIHBhZF9hbGxvY19idWZmZXIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBhZC5jOgorCSAgRG8gbm90IGFib3J0IG9uIG91dCBvZiBtZW1vcnkgZm9yIHBhZF9hbGxvY19idWZmZXIuCisKKzIwMDgtMDQtMTAgMTM6NTk6MjQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzogUmVtb3ZlIGJsYW5rIGxpbmUgYmV0d2VlbiBzeW1ib2wgbmFtZSBhZCBwYXJhbWV0ZXJzIHRvIGZpeCBndGtkb2Mgd2FybmluZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgorCSAgUmVtb3ZlIGJsYW5rIGxpbmUgYmV0d2VlbiBzeW1ib2wgbmFtZSBhZCBwYXJhbWV0ZXJzIHRvIGZpeCBndGtkb2MKKwkgIHdhcm5pbmcuCisKKzIwMDgtMDQtMDkgMjI6Mzc6MjIgKzAwMDAgIEpvc8OpIEFsYnVycXVlcnF1ZSA8amFhbGJ1cnF1QHN2bi5nbm9tZS5vcmc+CisKKwkgIEV4cG9zZSBnc3Rfc2VnbWVudF9jb3B5KCkgdG8gbWFrZSB0aGluZ3MgZWFzaWVyIGZvciB0aGUgYysrIGJpbmRpbmdzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogIEpvc8OpIEFsYnVycXVlcnF1ZSA8amFhbGJ1cnF1IGF0IHN2biBkb3QgZ25vbWUgZG90IG9yZz4KKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdHNlZ21lbnQuYzoKKwkgICogZ3N0L2dzdHNlZ21lbnQuaDoKKwkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBFeHBvc2UgZ3N0X3NlZ21lbnRfY29weSgpIHRvIG1ha2UgdGhpbmdzIGVhc2llciBmb3IgdGhlIGMrKyBiaW5kaW5ncy4KKwkgIEZpeGVzICM1MTg5MzIuCisJICBBUEk6IGdzdF9zZWdtZW50X2NvcHkoKQorCisyMDA4LTA0LTA5IDIxOjI3OjQwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0LmM6IEZpeCBjb25zdCBwb3NpdGlvbjsgcmVmIEdUeXBlIGNsYXNzZXMgZm9yIGVudW0gdHlwZXMgdG8gd29yayBhcm91bmQgdGhyZWFkLXNhZmV0eSBpc3N1ZXMgaW4gR0xpYiB2ZXJzaW9ucyAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0LmM6IChnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwKSwgKGluaXRfcG9zdCk6CisJICBGaXggY29uc3QgcG9zaXRpb247IHJlZiBHVHlwZSBjbGFzc2VzIGZvciBlbnVtIHR5cGVzIHRvIHdvcmsKKwkgIGFyb3VuZCB0aHJlYWQtc2FmZXR5IGlzc3VlcyBpbiBHTGliIHZlcnNpb25zIDwgMi4xNi4KKworMjAwOC0wNC0wOSAxODoyNjoxNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1idWZmZXJpbmcudHh0OiBGaXggc29tZSB0eXBvcyBhbmQgc2V0IHRoZSBlc3RpbWF0ZWQgdG90YWwgZm9yIHB1c2ggbW9kZSB0byAtMS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlcmluZy50eHQ6CisJICBGaXggc29tZSB0eXBvcyBhbmQgc2V0IHRoZSBlc3RpbWF0ZWQgdG90YWwgZm9yIHB1c2ggbW9kZSB0byAtMS4KKwkgICogZ3N0L2dzdHF1ZXJ5LmM6IChnc3RfcXVlcnlfbmV3X2J1ZmZlcmluZyk6CisJICBTZXQgYnVmZmVyaW5nLWxlZnQgdG8gMCBhcyB3ZSdyZSBub3QgYnVmZmVyaW5nIGJ5IGRlZmF1bHQuCisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfcXVlcnkpOgorCSAgSW1wbGVtZW50IEJVRkZFUklORyBxdWVyeS4KKworMjAwOC0wNC0wOSAxNzozNDo1NCArMDAwMCAgTWlsb3N6IERlcmV6eW5za2kgPGludGVybmFsZXJyb3JAZ21haWwuY29tPgorCisJICBnc3QvZ3N0ZXJyb3IuKjogQWRkIHR3byBuZXcgZXJyb3IgY29kZXMgZm9yIGVuY3J5cHRlZCBjb250ZW50LiBGaXhlcyAjNTI0NjU5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBCYXNlZCBvbiBwYXRjaCBieTogTWlsb3N6IERlcmV6eW5za2kgPGludGVybmFsZXJyb3IgZ21haWwgY29tPgorCSAgKiBnc3QvZ3N0ZXJyb3IuYzogKF9nc3Rfc3RyZWFtX2Vycm9yc19pbml0KToKKwkgICogZ3N0L2dzdGVycm9yLmg6CisJICBBZGQgdHdvIG5ldyBlcnJvciBjb2RlcyBmb3IgZW5jcnlwdGVkIGNvbnRlbnQuIEZpeGVzICM1MjQ2NTkuCisJICBBUEk6IEdTVF9TVFJFQU1fRVJST1JfREVDUllQVAorCSAgQVBJOiBHU1RfU1RSRUFNX0VSUk9SX0RFQ1JZUFRfTk9LRVkKKworMjAwOC0wNC0wOSAxMzoxNTozMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdHF1ZXJ5Lmg6IEZpeCB0eXBvLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RxdWVyeS5oOgorCSAgRml4IHR5cG8uCisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgQWRkIG5ldyBmdW5jdGlvbnMuCisKKzIwMDgtMDQtMDkgMDg6MTk6MzYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiBGaXggaW1wZXJmZWN0IHRpbWVzdGFtcC9vZmZzZXQgY2hlY2tzIHdoZW4gd2UgZ2V0IGFub3RoZXIgTkVXU0VHTUVOVCBldmVudCBhZnRlciBwcm9jLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiAoZ3N0X2lkZW50aXR5X2V2ZW50KSwKKwkgIChnc3RfaWRlbnRpdHlfc3RhcnQpOgorCSAgRml4IGltcGVyZmVjdCB0aW1lc3RhbXAvb2Zmc2V0IGNoZWNrcyB3aGVuIHdlIGdldCBhbm90aGVyIE5FV1NFR01FTlQKKwkgIGV2ZW50IGFmdGVyIHByb2Nlc3Npbmcgc29tZSBkYXRhLiBGaXhlcyBidWcgIzUyNjA0Mi4KKworMjAwOC0wNC0wOCAyMDoyODoyMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgUmVuYW1lIF9hdmFpbCAtPiBfcmFuZ2UKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBnc3QvZ3N0cXVlcnkuYzogKGdzdF9xdWVyeV9wYXJzZV9sYXRlbmN5KSwKKwkgIChnc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19wZXJjZW50KSwKKwkgIChnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3BlcmNlbnQpLAorCSAgKGdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3JhbmdlKSwgKGdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcmFuZ2UpOgorCSAgKiBnc3QvZ3N0cXVlcnkuaDoKKwkgIFJlbmFtZSBfYXZhaWwgLT4gX3JhbmdlCisJICBBUEk6IGdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3JhbmdlCisJICBBUEk6IGdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcmFuZ2UKKworMjAwOC0wNC0wOCAyMDoxNzo0OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgQWRkIGJ1c3kgZmllbGQgYW5kIHF1YXJrIGZvciB0aGUgYnVmZmVyaW5nIHF1ZXJ5IHNvIHRoYXQgdGhlIGFwcCBjYW4gb25seSB1c2UgdGhlIHF1ZXJ5IHRvIHNlZSBpZiBidWZmZXJpbmcgaXMgaW4gcHJvLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1idWZmZXJpbmcudHh0OgorCSAgKiBnc3QvZ3N0cXVhcmsuYzoKKwkgICogZ3N0L2dzdHF1YXJrLmg6CisJICAqIGdzdC9nc3RxdWVyeS5jOiAoZ3N0X3F1ZXJ5X3BhcnNlX2xhdGVuY3kpLAorCSAgKGdzdF9xdWVyeV9uZXdfYnVmZmVyaW5nKSwgKGdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3BlcmNlbnQpLAorCSAgKGdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcGVyY2VudCk6CisJICAqIGdzdC9nc3RxdWVyeS5oOgorCSAgQWRkIGJ1c3kgZmllbGQgYW5kIHF1YXJrIGZvciB0aGUgYnVmZmVyaW5nIHF1ZXJ5IHNvIHRoYXQgdGhlIGFwcCBjYW4KKwkgIG9ubHkgdXNlIHRoZSBxdWVyeSB0byBzZWUgaWYgYnVmZmVyaW5nIGlzIGluIHByb2dyZXNzLgorCisyMDA4LTA0LTA4IDE5OjU5OjA2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBSZW9yZGVyIHRoZSBtZXNzYWdlIGRvY3MgYW5kIGhlYWRlcnMgZm9yIGNsYXJpdHkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKGdzdF9tZXNzYWdlX3NldF9idWZmZXJpbmdfc3RhdHMpLAorCSAgKGdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZ19zdGF0cyk6CisJICAqIGdzdC9nc3RtZXNzYWdlLmg6CisJICAqIGdzdC9nc3RxdWVyeS5jOiAoZ3N0X3F1ZXJ5X25ld19sYXRlbmN5KSwgKGdzdF9xdWVyeV9zZXRfbGF0ZW5jeSksCisJICAoZ3N0X3F1ZXJ5X3BhcnNlX2xhdGVuY3kpLCAoZ3N0X3F1ZXJ5X25ld19idWZmZXJpbmcpLAorCSAgKGdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3BlcmNlbnQpLAorCSAgKGdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcGVyY2VudCksCisJICAoZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfc3RhdHMpLCAoZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19zdGF0cyksCisJICAoZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfYXZhaWwpLCAoZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19hdmFpbCk6CisJICAqIGdzdC9nc3RxdWVyeS5oOgorCSAgUmVvcmRlciB0aGUgbWVzc2FnZSBkb2NzIGFuZCBoZWFkZXJzIGZvciBjbGFyaXR5LgorCSAgQWRkIGFkaXRpb25hbCBidWZmZXJpbmcgc3RhdHMgQVBJIGZvciBtZXNzYWdlcy4KKwkgIEFkZCBidWZmZXJpbmcgcXVlcnkuCisJICBDb252ZXJ0IHNvbWUgbGVmdG92ZXIgcXVlcmllcyB0byB1c2UgR3N0UXVhcmsuCisJICBBUEk6IGdzdF9tZXNzYWdlX3NldF9idWZmZXJpbmdfc3RhdHMKKwkgIEFQSTogZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nX3N0YXRzCisJICBBUEk6IEdTVF9RVUVSWV9CVUZGRVJJTkcKKwkgIEFQSTogR3N0QnVmZmVyaW5nTW9kZQorCSAgQVBJOiBnc3RfcXVlcnlfbmV3X2J1ZmZlcmluZworCSAgQVBJOiBnc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19wZXJjZW50CisJICBBUEk6IGdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcGVyY2VudAorCSAgQVBJOiBnc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19zdGF0cworCSAgQVBJOiBnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3N0YXRzCisJICBBUEk6IGdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX2F2YWlsCisJICBBUEk6IGdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfYXZhaWwKKworMjAwOC0wNC0wOCAxOTo1MjoyMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdG1lc3NhZ2UuYzogVXNlIEdzdFF1YXJrIGZvciBtZXNzYWdlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOiAoZ3N0X21lc3NhZ2VfbmV3X2Vycm9yKSwKKwkgIChnc3RfbWVzc2FnZV9uZXdfd2FybmluZyksIChnc3RfbWVzc2FnZV9uZXdfaW5mbyksCisJICAoZ3N0X21lc3NhZ2VfbmV3X2J1ZmZlcmluZyksIChnc3RfbWVzc2FnZV9uZXdfc3RhdGVfY2hhbmdlZCksCisJICAoZ3N0X21lc3NhZ2VfbmV3X2Nsb2NrX3Byb3ZpZGUpLCAoZ3N0X21lc3NhZ2VfbmV3X2Nsb2NrX2xvc3QpLAorCSAgKGdzdF9tZXNzYWdlX25ld19uZXdfY2xvY2spLCAoZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfc3RhcnQpLAorCSAgKGdzdF9tZXNzYWdlX25ld19zZWdtZW50X2RvbmUpLCAoZ3N0X21lc3NhZ2VfbmV3X2R1cmF0aW9uKSwKKwkgIChnc3RfbWVzc2FnZV9uZXdfYXN5bmNfc3RhcnQpLCAoZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nKSwKKwkgIChnc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkKSwKKwkgIChnc3RfbWVzc2FnZV9wYXJzZV9jbG9ja19wcm92aWRlKSwgKGdzdF9tZXNzYWdlX3BhcnNlX2Nsb2NrX2xvc3QpLAorCSAgKGdzdF9tZXNzYWdlX3BhcnNlX25ld19jbG9jayksIChnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciksCisJICAoZ3N0X21lc3NhZ2VfcGFyc2Vfd2FybmluZyksIChnc3RfbWVzc2FnZV9wYXJzZV9pbmZvKSwKKwkgIChnc3RfbWVzc2FnZV9wYXJzZV9zZWdtZW50X3N0YXJ0KSwKKwkgIChnc3RfbWVzc2FnZV9wYXJzZV9zZWdtZW50X2RvbmUpLCAoZ3N0X21lc3NhZ2VfcGFyc2VfZHVyYXRpb24pLAorCSAgKGdzdF9tZXNzYWdlX3BhcnNlX2FzeW5jX3N0YXJ0KToKKwkgIFVzZSBHc3RRdWFyayBmb3IgbWVzc2FnZXMuCisKKzIwMDgtMDQtMDggMTk6Mzk6MjggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RxdWFyay4qOiBBZGQgc29tZSBtb3JlIHF1YXJrcyBuZWVkZWQgZm9yIG1lc3NhZ2VzIGFuZCBxdWVyaWVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RxdWFyay5jOiAoX3ByaXZfZ3N0X3F1YXJrc19pbml0aWFsaXplKToKKwkgICogZ3N0L2dzdHF1YXJrLmg6CisJICBBZGQgc29tZSBtb3JlIHF1YXJrcyBuZWVkZWQgZm9yIG1lc3NhZ2VzIGFuZCBxdWVyaWVzLgorCisyMDA4LTA0LTA4IDE5OjE0OjQ5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlcmluZy50eHQ6IFJlbW92ZSB0aGUgIm5vbmUiIGJ1ZmZlcmluZyBtb2RlLCBTVFJFQU0gaXMgYSBnb29kIGRlZmF1bHQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1idWZmZXJpbmcudHh0OgorCSAgUmVtb3ZlIHRoZSAibm9uZSIgYnVmZmVyaW5nIG1vZGUsIFNUUkVBTSBpcyBhIGdvb2QgZGVmYXVsdC4KKwkgIE1vdmUgZXN0aW1hdGVkLXRpbWUgdG8gdGhlIGF2YWlsIHF1ZXJ5LCB0aGF0J3Mgd2hlbiBpdCB3aWxsIGJlIG5lZWRlZC4KKwkgIE90aGVyIHNtYWxsIHR5cG8gZml4ZXMgYW5kIHVwZGF0ZXMuCisKKzIwMDgtMDQtMDcgMTM6Mjc6MzIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RpbmRleC5jOiBEb24ndCBwdXQgZGVzY3JpcHRpb25zIGludG8gdGhlIG5pY2sgZmllbGQgb2YgYSBHRW51bVZhbHVlOiBpdCdzIG5vdCBtZWFudCBmb3IgdGhhdCBhbmQgc29tZSBsYW5ndWFnZS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RpbmRleC5jOiAoZ3N0X2luZGV4X3Jlc29sdmVyX2dldF90eXBlKToKKwkgIERvbid0IHB1dCBkZXNjcmlwdGlvbnMgaW50byB0aGUgbmljayBmaWVsZCBvZiBhIEdFbnVtVmFsdWU6IGl0J3Mgbm90CisJICBtZWFudCBmb3IgdGhhdCBhbmQgc29tZSBsYW5ndWFnZSBiaW5kaW5ncyByZWx5IG9uIHRoZSBuaWNrIGZpZWxkIHRvCisJICBjb25zdHJ1Y3QgY29uc3RhbnRzIGFuZCB0aGUgbGlrZS4gRml4ZXMgIzUyNjcwNS4KKworMjAwOC0wNC0wNyAxMDo0ODo1MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgTWVyZ2Ugb3RoZXIgY2hhbmdlcyBmcm9tIDAuMTAuMTkgcmVsZWFzZSBicmFuY2guCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogTkVXUzoKKwkgICogUkVMRUFTRToKKwkgICogZ3N0cmVhbWVyLmRvYXA6CisJICBNZXJnZSBvdGhlciBjaGFuZ2VzIGZyb20gMC4xMC4xOSByZWxlYXNlIGJyYW5jaC4KKworMjAwOC0wNC0wNiAwODo1NDo0NyArMDAwMCAgRGFtaWVuIExlc3BpYXUgPGRhbWllbi5sZXNwaWF1QGdtYWlsLmNvbT4KKworCSAgY29uZmlndXJlLmFjOiBBY3R1YWxseSBidWlsZCBkbGxzIHdoZW4gY3Jvc3MtY29tcGlsaW5nIHdpdGggbWluZ3czMi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IERhbWllbiBMZXNwaWF1IDxkYW1pZW4gZG90IGxlc3BpYXUgYXQgZ21haWwgZG90IGNvbT4KKwkgICogY29uZmlndXJlLmFjOgorCSAgQWN0dWFsbHkgYnVpbGQgZGxscyB3aGVuIGNyb3NzLWNvbXBpbGluZyB3aXRoIG1pbmd3MzIuCisJICBGaXhlcyBidWcgIzUyNjI0Ny4KKworMjAwOC0wNC0wNSAxMDo1ODoxMSArMDAwMCAgRGFtaWVuIExlc3BpYXUgPGRhbWllbi5sZXNwaWF1QGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHBvbGwuYzogRml4IGNvbXBpbGF0aW9uIG9mIEdzdFBvbGwgd2l0aCBtaW5ndzMyLiBGaXhlcyBidWcgIzUyNjIzNi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IERhbWllbiBMZXNwaWF1IDxkYW1pZW4gZG90IGxlc3BpYXUgYXQgZ21haWwgZG90IGNvbT4KKwkgICogZ3N0L2dzdHBvbGwuYzoKKwkgIEZpeCBjb21waWxhdGlvbiBvZiBHc3RQb2xsIHdpdGggbWluZ3czMi4gRml4ZXMgYnVnICM1MjYyMzYuCisKKzIwMDgtMDQtMDQgMTM6NDM6MjYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZGVzaWduL2RyYWZ0LWxhdGVuY3kudHh0OiBGaXggdHlwby4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9kcmFmdC1sYXRlbmN5LnR4dDoKKwkgIEZpeCB0eXBvLgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlcmluZy50eHQ6CisJICBVcGRhdGUgZGVzaWduIGRvY3Mgd2l0aCBtb3JlIGJ1ZmZlcmluZyBpZGVhcy4KKworMjAwOC0wNC0wMyAyMToxNTowOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMC4xMC4xOS4xIGFmdGVyIHRoZSB1bnNjaGVkdWxlZCAwLjEwLjE5IHJlbGVhc2UuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgQnVtcCB2ZXJzaW9uIHRvIDAuMTAuMTkuMSBhZnRlciB0aGUgdW5zY2hlZHVsZWQgMC4xMC4xOSByZWxlYXNlLgorCisyMDA4LTA0LTAzIDE2OjQ1OjAyICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+CisKKwkqIGdzdHJlYW1lci5zcGVjLmluOgorCSAgdXBkYXRlIHNwZWMgdG8gd29yayB3aXRoIGRvY3MKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgdXBkYXRlIHNwZWMgdG8gd29yayB3aXRoIGRvY3MKKworMjAwOC0wNC0wMyAxNDo0OTowNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBjb25maWd1cmUuYWM6IFJldmVydCBwYXJ0IHRoYXQgYmVsb25ncyB0byB0aGUgcHJlc2V0IHBhdGNoLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgIFJldmVydCBwYXJ0IHRoYXQgYmVsb25ncyB0byB0aGUgcHJlc2V0IHBhdGNoLgorCisyMDA4LTA0LTAzIDE0OjI2OjU1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGNvbmZpZ3VyZS5hYzogQWRkIHFvdXRlcyB0byB0aGUgZGVmaW5lLiBGaXhlcyAjIDUyNTk2MS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICBBZGQgcW91dGVzIHRvIHRoZSBkZWZpbmUuIEZpeGVzICMgNTI1OTYxLgorCisyMDA4LTA0LTAzIDA3OjUyOjMxICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIHBsdWdpbnMvaW5kZXhlcnMvOiBVc2UgR1NsaWNlIHdoZW4gcG9zc2libGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9pbmRleGVycy9nc3RmaWxlaW5kZXguYzogKF9maWxlX2luZGV4X2lkX2ZyZWUpLAorCSAgKGdzdF9maWxlX2luZGV4X2xvYWQpLCAoZ3N0X2ZpbGVfaW5kZXhfYWRkX2lkKSwKKwkgIChnc3RfZmlsZV9pbmRleF9nZXRfYXNzb2NfZW50cnkpOgorCSAgKiBwbHVnaW5zL2luZGV4ZXJzL2dzdG1lbWluZGV4LmM6IChnc3RfbWVtX2luZGV4X2ZyZWVfZm9ybWF0KSwKKwkgIChnc3RfbWVtX2luZGV4X2ZyZWVfaWQpLCAoZ3N0X21lbV9pbmRleF9hZGRfaWQpLAorCSAgKGdzdF9tZW1faW5kZXhfaW5kZXhfZm9ybWF0KToKKwkgIFVzZSBHU2xpY2Ugd2hlbiBwb3NzaWJsZS4KKworMjAwOC0wNC0wMiAxNzo0NTowOCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmM6IFVzZSBHU2xpY2UgZm9yIGFsbG9jYXRpbmcgdGhlIGNvbnRyb2wgcG9pbnRzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzoKKwkgIChnc3RfY29udHJvbF9wb2ludF9mcmVlKSwKKwkgIChnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXRfaW50ZXJuYWwpOgorCSAgVXNlIEdTbGljZSBmb3IgYWxsb2NhdGluZyB0aGUgY29udHJvbCBwb2ludHMuCisKKzIwMDgtMDQtMDIgMTc6MjE6NDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50Lio6IENsZWFudXAgcHJvcGVydGllcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9jbGFzc19pbml0KSwKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfc2V0X3Byb3BlcnR5KSwKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfZ2V0X3Byb3BlcnR5KSwKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfYWN0aXZhdGUpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5oOgorCSAgQ2xlYW51cCBwcm9wZXJ0aWVzLgorCSAgRml4IHBhZCBsZWFrIHdoZW4gcGVlciBxdWVyeSBmYWlscy4KKwkgIFdlIGNhbiBzdGlsbCB0eXBlZmluZCB3aGVuIHRoZSBwZWVyIHJldHVybnMgLTEuCisJICBBZGQgcHJvcGVydHkgdG8gZm9yY2UgY2FwcyBhbmQgYnlwYXNzIHR5cGVmaW5kaW5nLiBUaGlzIHdpbGwgYmUgdXNlZCBpbgorCSAgdXJpZGVjb2RlYmluLgorCSAgQVBJOjpmb3JjZS1jYXBzCisKKzIwMDgtMDQtMDEgMTM6NTU6MjAgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgY29uZmlndXJlLmFjOiBSZXF1aXJlIEdMaWIgMi4xMi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICBSZXF1aXJlIEdMaWIgMi4xMi4KKwkgICogZ3N0L2dsaWItY29tcGF0LXByaXZhdGUuaDoKKwkgICogZ3N0L2dzdGNhcHMuYzogKGdzdF9jYXBzX25ld19lbXB0eSksIChfZ3N0X2NhcHNfZnJlZSk6CisJICAqIGdzdC9nc3RjbG9jay5jOiAoZ3N0X2Nsb2NrX2VudHJ5X25ldyksIChfZ3N0X2Nsb2NrX2lkX2ZyZWUpOgorCSAgVW5jb25kaXRpb25hbGx5IHVzZSBHU2xpY2UgZm9yIGFsbG9jYXRpb24uCisJICAqIGdzdC9nc3Rwb2xsLmM6IChnc3RfcG9sbF9uZXcpLCAoZ3N0X3BvbGxfZnJlZSk6CisJICAqIGdzdC9nc3RzZWdtZW50LmM6IChnc3Rfc2VnbWVudF9uZXcpLCAoZ3N0X3NlZ21lbnRfZnJlZSk6CisJICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzogKGdzdF9zdHJ1Y3R1cmVfaWRfZW1wdHlfbmV3X3dpdGhfc2l6ZSksCisJICAoZ3N0X3N0cnVjdHVyZV9mcmVlKToKKwkgIFVzZSBHU2xpY2UgZm9yIGFsbG9jYXRpb24uCisKKzIwMDgtMDQtMDEgMTM6NDg6NTkgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgZ3N0L3BhcnNlLzogUmVxdWlyZSBhIG5ldyBlbm91Z2ggZmxleCBhbmQgYmlzb24gYW5kIHJlbW92ZSB0aGUgcGFyc2VyIGhhY2tzIHRvIHVzZSBhIHByZS1yZWdlbmVyYXRlZCB2ZXJzaW9uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9wYXJzZS9NYWtlZmlsZS5hbToKKwkgICogZ3N0L3BhcnNlL2dyYW1tYXIudGFiLnByZS5jOgorCSAgKiBnc3QvcGFyc2UvZ3JhbW1hci50YWIucHJlLmg6CisJICAqIGdzdC9wYXJzZS9sZXguX2dzdF9wYXJzZV95eS5wcmUuYzoKKwkgIFJlcXVpcmUgYSBuZXcgZW5vdWdoIGZsZXggYW5kIGJpc29uIGFuZCByZW1vdmUgdGhlIHBhcnNlciBoYWNrcyB0byB1c2UKKwkgIGEgcHJlLXJlZ2VuZXJhdGVkIHZlcnNpb24uCisKKzIwMDgtMDQtMDEgMTA6MjU6MzUgKzAwMDAgIEphc29uIFpoYW8gPEUzNDIzQ0Btb3Rvcm9sYS5jb20+CisKKwkgIGNvbmZpZ3VyZS5hYzogQWRkIGEgY29uZmlndXJlIHN3aXRjaCB0byBkaXNhYmxlIG9wdGlvbiBwYXJzaW5nIGluIGdzdF9pbml0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA4LTA0LTAxICBKdWxpZW4gTW91dHRlICA8anVsaWVuQGZsdWVuZG8uY29tPgorCSAgcGF0Y2ggYnk6IEphc29uIFpoYW8gPEUzNDIzQ0Btb3Rvcm9sYS5jb20+CisJICAqIGNvbmZpZ3VyZS5hYzogQWRkIGEgY29uZmlndXJlIHN3aXRjaCB0byBkaXNhYmxlIG9wdGlvbiBwYXJzaW5nCisJICBpbiBnc3RfaW5pdC4KKwkgIEZpeGVzICM1MjI4ODIuCisKKzIwMDgtMDMtMzEgMTM6NDc6MjIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgTWFjT1MgaGFzIHBsdWdpbnMgdW5kZXIgLnNvIG9yIHVuZGVyIC5keWxpYi4gQWRkIGRldGVjdGlvbiBmb3IgTWFjT1MgYW5kIGhhbmRsZSB0aGlzIGNhc2UuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzoKKwkgIE1hY09TIGhhcyBwbHVnaW5zIHVuZGVyIC5zbyBvciB1bmRlciAuZHlsaWIuIEFkZCBkZXRlY3Rpb24gZm9yIE1hY09TCisJICBhbmQgaGFuZGxlIHRoaXMgY2FzZS4KKwkgICogZ3N0L2dzdC5jOgorCSAgQWRkIGEgY29tbWVudCBoZXJlIGRlc2NyaWJpbmcsIHdoeSB3ZSBzdGF0IGVhY2ggcGx1Z2luIGFuZCBub3QgdHJ5IHRvCisJICBiZSBzbWFydC4KKworMjAwOC0wMy0zMSAxMDoyMTo1NyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogQWxzbyB1bnNldCB0aGUgR0FQIGZsYWcgb24gYnVmZmVycyBpZiB3ZSdyZSB3b3JraW5nIGlucGxhY2UgYnV0IHRoZSBlbGVtZW50IGlzIG5vdCAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fcHJlcGFyZV9vdXRwdXRfYnVmZmVyKToKKwkgIEFsc28gdW5zZXQgdGhlIEdBUCBmbGFnIG9uIGJ1ZmZlcnMgaWYgd2UncmUgd29ya2luZyBpbnBsYWNlIGJ1dAorCSAgdGhlIGVsZW1lbnQgaXMgbm90IEdBUC1hd2FyZS4KKwkgIE1hcmsgYSBjb21tZW50IGFzIEZJWE1FIDAuMTEuCisKKzIwMDgtMDMtMzEgMDg6MzI6MjYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdC5jOiBGaXggdHlwZSBpbiBsb2cgbWVzc2FnZSBhbmQgYWRkIG9uZSB0byBlYXNlIHNlZWluZyBob3cgbG9uZyByZWdpc3RyeSBjYWNoZSB2ZXJpZmljYXRpb24gdGFrZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdC5jOgorCSAgRml4IHR5cGUgaW4gbG9nIG1lc3NhZ2UgYW5kIGFkZCBvbmUgdG8gZWFzZSBzZWVpbmcgaG93IGxvbmcgcmVnaXN0cnkKKwkgIGNhY2hlIHZlcmlmaWNhdGlvbiB0YWtlcy4KKwkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6CisJICBPbmx5IHRlc3QgcGx1Z2luIGZpbGVuYW1lcyBhZ2FpbnN0IEdfTU9EVUxFX1NVRkZJWC4KKworMjAwOC0wMy0zMSAwNzo0OToyNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0ZGVidWd1dGlscy5jOiBJbXByb3ZlIGhhbmRsaW5nIGdob3N0L3Byb3h5IHBhZHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGRlYnVndXRpbHMuYzoKKwkgIEltcHJvdmUgaGFuZGxpbmcgZ2hvc3QvcHJveHkgcGFkcy4KKworMjAwOC0wMy0yNyAxOToxMzo0NSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBFeHBvc2UgbWFjcm8gdG8gZG9jcyBhbmQgZml4IGxpbmsgdG8gaXQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdHBhZC5jOgorCSAgKiBnc3QvZ3N0cGFkLmg6CisJICBFeHBvc2UgbWFjcm8gdG8gZG9jcyBhbmQgZml4IGxpbmsgdG8gaXQuCisKKzIwMDgtMDMtMjcgMTU6MjM6NTUgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KKworCSAgbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOiBXaGVuIGNhbGN1bGF0aW5nIEdEUCBib2R5IENSQywgdXNlIHRoZSBjb3JyZWN0IHBvaW50ZXIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOgorCSAgKGdzdF9kcF9wYWNrZXRfZnJvbV9ldmVudF8xXzApOgorCSAgV2hlbiBjYWxjdWxhdGluZyBHRFAgYm9keSBDUkMsIHVzZSB0aGUgY29ycmVjdCBwb2ludGVyLgorCSAgRml4ZXMgcGFydCBvZiAjNTIyNDAxLgorCisyMDA4LTAzLTI0IDE2OjU2OjM2ICswMDAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYW5hdXdAc2t5bmV0LmJlPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IElkZW50aXR5IGlzIG5vdCBhbHdheXMgYSBwYXNzdGhyb3VnaCBlbGVtZW50LCBpdCBjYW4gbW9kaWZ5IHRoZSBidWZmZXIgdGltZXN0YW1wcyB3aGUuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IE1hcmsgTmF1d2VsYWVydHMgPG1hbmF1dyBhdCBza3luZXQgYmU+CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogKGdzdF9pZGVudGl0eV9jbGFzc19pbml0KSwKKwkgIChnc3RfaWRlbnRpdHlfaW5pdCksIChnc3RfaWRlbnRpdHlfcHJlcGFyZV9vdXRwdXRfYnVmZmVyKToKKwkgIElkZW50aXR5IGlzIG5vdCBhbHdheXMgYSBwYXNzdGhyb3VnaCBlbGVtZW50LCBpdCBjYW4gbW9kaWZ5IHRoZSBidWZmZXIKKwkgIHRpbWVzdGFtcHMgd2hlbiBpdCBoYXMgYSBkYXRhcmF0ZSBhbmQgb3BlcmF0ZXMgaW4gc2luZ2xlLXNlZ21lbnQgbW9kZS4KKwkgIFdlIHRoZXJlZm9yZSBtYWtlIGl0IGFuIGluX3BsYWNlIGZpbHRlciB3aXRoIGEgY3VzdG9tIGJ1ZmZlciBwcmVwYXJlCisJICBmdW5jdGlvbiB0aGF0IGNvbmRpdGlvbmFsbHkgbWFrZXMgdGhlIGlucHV0IGJ1ZmZlciBtZXRhZGF0YSB3cml0YWJsZQorCSAgd2hlbiBuZWVkZWQuICBGaXhlcyAjNTIzOTg1LgorCisyMDA4LTAzLTI0IDE2OjQ0OjI1ICswMDAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYW5hdXdAc2t5bmV0LmJlPgorCisJICBTbWFsbCBkb2N1bWVudGF0aW9uIGZpeGVzLiBGaXhlcyAjNTIzOTc4LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogTWFyayBOYXV3ZWxhZXJ0cyA8bWFuYXV3IGF0IHNreW5ldCBiZT4KKwkgICogZ3N0L2dzdGNsb2NrLmg6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgICogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKKwkgIFNtYWxsIGRvY3VtZW50YXRpb24gZml4ZXMuIEZpeGVzICM1MjM5NzguCisKKzIwMDgtMDMtMjQgMTY6MzE6MzAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvOiBBbHNvIHJldHJ5IG91ciBwb2xsX3dhaXQgd2hlbiB3ZSBnZXQgRUFHQUlOLiBGaXhlcyAjNTI0MDQxLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6IChnc3RfZmRfc2lua19yZW5kZXIpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6IChnc3RfZmRfc3JjX2NyZWF0ZSk6CisJICBBbHNvIHJldHJ5IG91ciBwb2xsX3dhaXQgd2hlbiB3ZSBnZXQgRUFHQUlOLiBGaXhlcyAjNTI0MDQxLgorCisyMDA4LTAzLTI0IDEwOjM4OjMxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogV2hlbiB0cnlpbmcgdG8gbWFrZSByb29tIGluIHRoZSBxdWV1ZSwgYnVtcCB0aGUgbWF4IGFsbG93ZWQgYnVmZmVycyBiaWdnZXIgdGhhbiB0aGUuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogKHNpbmdsZV9xdWV1ZV9vdmVycnVuX2NiKSwKKwkgIChzaW5nbGVfcXVldWVfdW5kZXJydW5fY2IpOgorCSAgV2hlbiB0cnlpbmcgdG8gbWFrZSByb29tIGluIHRoZSBxdWV1ZSwgYnVtcCB0aGUgbWF4IGFsbG93ZWQgYnVmZmVycworCSAgYmlnZ2VyIHRoYW4gdGhlIGN1cnJlbnQgYW1vdW50IG9mIGJ1ZmZlcnMgaW4gdGhlIHF1ZXVlLiB0aGlzIGZpeGVzIHNvbWUKKwkgIG5hc3R5IGRlYWRsb2NrcyBpbiBtdWx0aXF1ZXVlIHdoZW4gZHluYW1pY2FsbHkgY2hhbmdpbmcgdGhlIGxpbWl0cyBvZgorCSAgdGhlIHF1ZXVlLgorCisyMDA4LTAzLTI0IDEwOjMzOjQxICswMDAwICBKb3PDqSBBbGJ1cnF1ZXJxdWUgPGphYWxidXJxdUBzdm4uZ25vbWUub3JnPgorCisJICBnc3QvZ3N0Y2Fwcy4qOiBDb25zdGlmeSB0aGUgZmllbGQgZ2NoYXIgKiBwYXJhbXMgaW4gc2V0X3NpbXBsZSBhbmQgZnJpZW5kcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6ICBKb3PDqSBBbGJ1cnF1ZXJxdWUgPGphYWxidXJxdSBhdCBzdm4gZG90IGdub21lIGRvdCBvcmc+CisJICAqIGdzdC9nc3RjYXBzLmM6IChnc3RfY2Fwc19zZXRfc2ltcGxlKSwKKwkgIChnc3RfY2Fwc19zZXRfc2ltcGxlX3ZhbGlzdCksIChnc3RfY2Fwc19pbnRlcnNlY3QpOgorCSAgKiBnc3QvZ3N0Y2Fwcy5oOgorCSAgQ29uc3RpZnkgdGhlIGZpZWxkIGdjaGFyICogcGFyYW1zIGluIHNldF9zaW1wbGUgYW5kIGZyaWVuZHMuCisJICBGaXhlcyAjNTIyMzI2LgorCisyMDA4LTAzLTI0IDEwOjI5OjA1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0dmFsdWUuYzogVHJhbnNmb3JtIGEgR3N0T2JqZWN0IHRvIGEgbW9yZSBtZWFuaW5nZnVsbCBzdHJpbmcgdGhhdCBpbmNsdWRlcyB0aGUgb2JqZWN0IHR5cGUgaW4gYWRkaXRpb24gdG8gaXRzIG4uLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF92YWx1ZV90cmFuc2Zvcm1fb2JqZWN0X3N0cmluZyk6CisJICBUcmFuc2Zvcm0gYSBHc3RPYmplY3QgdG8gYSBtb3JlIG1lYW5pbmdmdWxsIHN0cmluZyB0aGF0IGluY2x1ZGVzIHRoZQorCSAgb2JqZWN0IHR5cGUgaW4gYWRkaXRpb24gdG8gaXRzIG5hbWUuCisKKzIwMDgtMDMtMjMgMTU6MTc6MjQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgQ2hhbmdlTG9nOiBDaGFuZ2VMb2cgc3VyZ2VyeSB0byBhZGQgYnVnbnVtYmVyIHRvIGNvbW1pdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBDaGFuZ2VMb2c6CisJICBDaGFuZ2VMb2cgc3VyZ2VyeSB0byBhZGQgYnVnbnVtYmVyIHRvIGNvbW1pdC4KKworMjAwOC0wMy0yMyAxNDoyNDo0OCArMDAwMCAgUmVuZSBTdGFkbGVyIDxtYWlsQHJlbmVzdGFkbGVyLmRlPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogRml4IGNvbmZ1c2luZyBkb2N1bWVudGF0aW9uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfZ2FwX2F3YXJlKTogRml4IGNvbmZ1c2luZyBkb2N1bWVudGF0aW9uLgorCisyMDA4LTAzLTIzIDExOjQwOjU0ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiBSZW5hbWUgY29uc3RhbnQgZXZlcnl3aGVyZSBhbmQgZG9uJ3QgZm9yZ2V0IG9uZSBvY2N1cmVuY2UuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IChnc3RfcmVnaXN0cnlfYmluYXJ5X3dyaXRlKToKKwkgIFJlbmFtZSBjb25zdGFudCBldmVyeXdoZXJlIGFuZCBkb24ndCBmb3JnZXQgb25lIG9jY3VyZW5jZS4KKworMjAwOC0wMy0yMyAxMToyOTo1NCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogQWxpZ24gbWVtb3J5IHRvIHRoZSBwb2ludGVyIHNpemUgZXZlbiBpZiB0aGUgYXJjaGl0ZWN0dXJlIGFsbG93cyB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzcy4gVW4uLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogKGdzdF9yZWdpc3RyeV9iaW5hcnlfd3JpdGUpOgorCSAgQWxpZ24gbWVtb3J5IHRvIHRoZSBwb2ludGVyIHNpemUgZXZlbiBpZiB0aGUgYXJjaGl0ZWN0dXJlIGFsbG93cworCSAgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3MuIFVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzIHVzdWFsbHkgY29tZXMgd2l0aAorCSAgcGVyZm9ybWFuY2UgcGVuYWxpdHkuCisKKzIwMDgtMDMtMjMgMTE6MjM6MzAgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IEFsaWduIG1lbW9yeSB0byB0aGUgcG9pbnRlciBzaXplIGluc3RlYWQgb2YgYWx3YXlzIDMyIGJpdC4gRml4ZXMgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3NlcyBvLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IChnc3RfcmVnaXN0cnlfYmluYXJ5X3dyaXRlKSwKKwkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2NoZWNrX21hZ2ljKSwKKwkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2xvYWRfcGFkX3RlbXBsYXRlKSwKKwkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2xvYWRfZmVhdHVyZSksCisJICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9sb2FkX3BsdWdpbik6CisJICBBbGlnbiBtZW1vcnkgdG8gdGhlIHBvaW50ZXIgc2l6ZSBpbnN0ZWFkIG9mIGFsd2F5cyAzMiBiaXQuIEZpeGVzCisJICB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzc2VzIG9uIGlhNjQgYW5kIGZyaWVuZHMuCisJICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5oOgorCSAgQnVtcCBiaW5hcnkgcmVnaXN0cnkgZm9ybWF0IHZlcnNpb24gZm9yIHRoaXMgYXMgaXQgY2hhbmdlcyB0aGUKKwkgIGZvcm1hdCBvbiB0aG9zZSBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3QgaGF2ZSB1bmFsaWduZWQgYWNjZXNzCisJICBhbmQgNjQgYml0IHBvaW50ZXJzLgorCisyMDA4LTAzLTIyIDE0OjU2OjE3ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIERlZmluZSBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIGlmIGl0J3MgdW5kZWZpbmVkIChHTGliIDwgMi4xMy4wKSBhbmQgdXNlIGl0IGV2ZXJ5d2hlcmUgZm9yIEdQYXJhbVNwZWNzIHRoYXQgdXNlIHN0YXRpYy4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcHdnL2FkdmFuY2VkLWRwYXJhbXMueG1sOgorCSAgKiBkb2NzL3B3Zy9idWlsZGluZy1wcm9wcy54bWw6CisJICAqIGRvY3MvcHdnL290aGVyLXNvdXJjZS54bWw6CisJICAqIGdzdC9nbGliLWNvbXBhdC5oOgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2NsYXNzX2luaXQpOgorCSAgKiBnc3QvZ3N0Y2xvY2suYzogKGdzdF9jbG9ja19jbGFzc19pbml0KToKKwkgICogZ3N0L2dzdGluZGV4LmM6IChnc3RfaW5kZXhfY2xhc3NfaW5pdCk6CisJICAqIGdzdC9nc3RvYmplY3QuYzogKGdzdF9vYmplY3RfY2xhc3NfaW5pdCk6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfY2xhc3NfaW5pdCk6CisJICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX2NsYXNzX2luaXQpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NsYXNzX2luaXQpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19jbGFzc19pbml0KToKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NsYXNzX2luaXQpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5jOiAoZ3N0X2RhdGFfcXVldWVfY2xhc3NfaW5pdCk6CisJICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6IChfZ3N0X2NoZWNrX2ZhdWx0X2hhbmRsZXJfcmVzdG9yZSksCisJICAoX2dzdF9jaGVja19mYXVsdF9oYW5kbGVyX3NpZ2hhbmRsZXIpLAorCSAgKF9nc3RfY2hlY2tfZmF1bHRfaGFuZGxlcl9zZXR1cCksIChnc3RfY2hlY2tfaW5pdCk6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgorCSAgKF9nc3RfY29udHJvbGxlcl9jbGFzc19pbml0KToKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmM6CisJICAoZ3N0X2xmb19jb250cm9sX3NvdXJjZV9jbGFzc19pbml0KToKKwkgICogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6CisJICAoZ3N0X25ldF9jbGllbnRfY2xvY2tfY2xhc3NfaW5pdCk6CisJICAqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzoKKwkgIChnc3RfbmV0X3RpbWVfcHJvdmlkZXJfY2xhc3NfaW5pdCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOiAoZ3N0X2NhcHNmaWx0ZXJfY2xhc3NfaW5pdCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzogKGdzdF9mYWtlX3NpbmtfY2xhc3NfaW5pdCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiAoZ3N0X2Zha2Vfc3JjX2NsYXNzX2luaXQpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOiAoZ3N0X2ZkX3NpbmtfY2xhc3NfaW5pdCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzogKGdzdF9mZF9zcmNfY2xhc3NfaW5pdCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzogKGdzdF9maWxlX3NpbmtfY2xhc3NfaW5pdCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiAoZ3N0X2ZpbGVfc3JjX2NsYXNzX2luaXQpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IChnc3RfaWRlbnRpdHlfY2xhc3NfaW5pdCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiAoZ3N0X211bHRpX3F1ZXVlX2NsYXNzX2luaXQpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfY2xhc3NfaW5pdCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6IChnc3RfdGVlX2NsYXNzX2luaXQpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9jbGFzc19pbml0KToKKwkgICogcGx1Z2lucy9pbmRleGVycy9nc3RmaWxlaW5kZXguYzogKGdzdF9maWxlX2luZGV4X2NsYXNzX2luaXQpOgorCSAgRGVmaW5lIEdfUEFSQU1fU1RBVElDX1NUUklOR1MgaWYgaXQncyB1bmRlZmluZWQgKEdMaWIgPCAyLjEzLjApIGFuZAorCSAgdXNlIGl0IGV2ZXJ5d2hlcmUgZm9yIEdQYXJhbVNwZWNzIHRoYXQgdXNlIHN0YXRpYyBzdHJpbmdzIChpLmUuIGFsbCkuCisJICBUaGlzIGdpdmVzIHVzIGxlc3MgbWVtb3J5IHVzYWdlLCBmZXdlciBhbGxvY2F0aW9ucyBhbmQgdGh1cyBsZXNzCisJICBtZW1vcnkgZGVmcmFnbWVudGF0aW9uLiBGaXhlcyBidWcgIzUyMzgwNi4KKworMjAwOC0wMy0yMiAxNDo1MToxNyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBBUEk6IEFkZCBHU1RfSVNfUEFSQU1fU1BFQ19NSU5JX09CSkVDVCwgR1NUX1BBUkFNX1NQRUNfTUlOSV9PQkpFQ1QKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5jOiAoZ3N0X3ZhbHVlX2R1cF9taW5pX29iamVjdCksCisJICAoZ3N0X3BhcmFtX3NwZWNfbWluaV9vYmplY3QpOgorCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5oOgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgIEFQSTogQWRkIEdTVF9JU19QQVJBTV9TUEVDX01JTklfT0JKRUNULCBHU1RfUEFSQU1fU1BFQ19NSU5JX09CSkVDVAorCSAgR1NUX1RZUEVfUEFSQU1fTUlOSV9PQkpFQ1QgYW5kIGdzdF92YWx1ZV9kdXBfbWluaV9vYmplY3QuIEFsc28gbW92ZQorCSAgR3N0UGFyYW1TcGVjTWluaU9iamVjdCBpbnRvIGEgcHVibGljIGhlYWRlciBmb3IgdGhpcy4KKwkgIFRoaXMgbWFrZSBHc3RNaW5pT2JqZWN0IGEgYml0IG1vcmUgY29uc2lzdGVudCB3aXRoIEdPYmplY3QgYW5kIG1ha2VzCisJICBpdCBwb3NzaWJsZSB0byBleHRlbmQgdGhlIHBhcmFtIHNwZWNzLgorCSAgZ3N0X3ZhbHVlX2R1cF9taW5pX29iamVjdCBpcyBtYWlubHkgdXNlZnVsIGZvciBzZXRfcHJvcGVydHkgbWV0aG9kcy4KKwkgIEZpeGVzIGJ1ZyAjNTIzNzk4LgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAocHJpbnRfZWxlbWVudF9wcm9wZXJ0aWVzX2luZm8pOgorCSAgUHJpbnQgc29tZXRoaW5nIHVzZWZ1bCBmb3IgR3N0TWluaU9iamVjdCBwcm9wZXJ0aWVzIGFuZCBub3QganVzdAorCSAgInVua25vd24gdHlwZSIuCisKKzIwMDgtMDMtMjEgMTY6MTE6NTEgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgQ2FsbCB0aGUgdmVyc2lvbiBHU1RfTUFHSUNfQklOQVJZX1ZFUlNJT05fU1RSIHRvIGJlIG1vcmUgY29uc2lzdGVudCBhbmQgYWRkIGl0IHRvIHRoZSAocHJpdmF0ZSBwYXJ0KSBvZiB0aGUgZG9jcyB0byBmLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IChnc3RfcmVnaXN0cnlfYmluYXJ5X2luaXRpYWxpemVfbWFnaWMpLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfY2hlY2tfbWFnaWMpOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuaDoKKwkgIENhbGwgdGhlIHZlcnNpb24gR1NUX01BR0lDX0JJTkFSWV9WRVJTSU9OX1NUUiB0byBiZSBtb3JlIGNvbnNpc3RlbnQKKwkgIGFuZCBhZGQgaXQgdG8gdGhlIChwcml2YXRlIHBhcnQpIG9mIHRoZSBkb2NzIHRvIGZpeCB0aGUgYnVpbGQuCisKKzIwMDgtMDMtMjEgMTU6NTI6MTQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5Lio6IERvbid0IHVzZSBHU1RfTUFKT1JNSU5PUiBmb3IgdGhlIGJpbmFyeSByZWdpc3RyeSB2ZXJzaW9uLiBJbnN0ZWFkIGhhcmRjb2RlIGEgdmFsdWUgdGhhdCBtdXN0Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IChnc3RfcmVnaXN0cnlfYmluYXJ5X2luaXRpYWxpemVfbWFnaWMpLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfY2hlY2tfbWFnaWMpLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfcmVhZF9jYWNoZSk6CisJICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5oOgorCSAgRG9uJ3QgdXNlIEdTVF9NQUpPUk1JTk9SIGZvciB0aGUgYmluYXJ5IHJlZ2lzdHJ5IHZlcnNpb24uIEluc3RlYWQKKwkgIGhhcmRjb2RlIGEgdmFsdWUgdGhhdCBtdXN0IGJlIGNoYW5nZWQgd2hlbmV2ZXIgdGhlIGZvcm1hdCBjaGFuZ2VzCisJICBpbiBhbiBpbmNvbXBhdGlibGUgd2F5LgorCSAgQWxzbyBkb24ndCBHU1RfRVJST1Igd2hlbiB0aGVyZSBpcyBhIHZlcnNpb24gbWlzbWF0Y2gsIGp1c3QKKwkgIHJlZ2VuZXJhdGUgdGhlIHJlZ2lzdHJ5IHNpbGVudGx5LgorCisyMDA4LTAzLTIxIDAwOjM1OjEwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgY29uZmlndXJlLmFjOiBCYWNrIHRvIGRldmVsb3BtZW50IC0gMC4xMC4xOC4xCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgQmFjayB0byBkZXZlbG9wbWVudCAtIDAuMTAuMTguMQorCis9PT0gcmVsZWFzZSAwLjEwLjE4ID09PQorCisyMDA4LTAzLTIxIDAwOjIwOjU5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSogQ2hhbmdlTG9nOgorCSogTkVXUzoKKwkqIFJFTEVBU0U6CisJKiBjb25maWd1cmUuYWM6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgorCSogZ3N0cmVhbWVyLmRvYXA6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICBSZWxlYXNlIDAuMTAuMTgKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUmVsZWFzZSAwLjEwLjE4CisKKzIwMDgtMDMtMjAgMjM6MjY6MDUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmUucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kYS5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9lcy5wbzoKKwkqIHBvL2ZpLnBvOgorCSogcG8vZnIucG86CisJKiBwby9odS5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3BsLnBvOgorCSogcG8vcnUucG86CisJKiBwby9ydy5wbzoKKwkqIHBvL3NrLnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkgIFVwZGF0ZSAucG8gZmlsZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgVXBkYXRlIC5wbyBmaWxlcworCisyMDA4LTAzLTE4IDEyOjE3OjU4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgMC4xMC4xNy40IHByZS1yZWxlYXNlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICAwLjEwLjE3LjQgcHJlLXJlbGVhc2UKKworMjAwOC0wMy0xOCAxMDo1NDo1MiArMDAwMCAgT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzIDxvbGUuYW5kcmUucmF2bmFzQHRhbmRiZXJnLmNvbT4KKworCSAgQWRkIG5ldyBmdW5jdGlvbiBnc3RfcG9sbF9mZF9pZ25vcmVkKCkgZm9yIGltcHJvdmVkIFdpbmRvd3MgY29tcGF0aWJpbGl0eS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IE9sZSBBbmRyw6kgVmFkbGEgUmF2bsOlcworCSAgPG9sZSBkb3QgYW5kcmUgZG90IHJhdm5hcyBhdCB0YW5kYmVyZyBkb3QgY29tPgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBnc3QvZ3N0cG9sbC5jOiAoZ3N0X3BvbGxfd2luc29ja19lcnJvcl90b19lcnJubyksCisJICAoZ3N0X3BvbGxfdXBkYXRlX3dpbnNvY2tfZXZlbnRfbWFzayksCisJICAoZ3N0X3BvbGxfcHJlcGFyZV93aW5zb2NrX2FjdGl2ZV9zZXRzKSwKKwkgIChnc3RfcG9sbF9jb2xsZWN0X3dpbnNvY2tfZXZlbnRzKSwgKGdzdF9wb2xsX25ldyksIChnc3RfcG9sbF9mcmVlKSwKKwkgIChnc3RfcG9sbF9hZGRfZmRfdW5sb2NrZWQpLCAoZ3N0X3BvbGxfZmRfY3RsX3dyaXRlKSwKKwkgIChnc3RfcG9sbF9mZF9jdGxfcmVhZF91bmxvY2tlZCksIChnc3RfcG9sbF9mZF9pZ25vcmVkKSwKKwkgIChnc3RfcG9sbF9mZF9oYXNfZXJyb3IpLCAoZ3N0X3BvbGxfZmRfY2FuX3JlYWRfdW5sb2NrZWQpLAorCSAgKGdzdF9wb2xsX2NoZWNrX2N0cmxfY29tbWFuZHMpLCAoZ3N0X3BvbGxfd2FpdCk6CisJICAqIGdzdC9nc3Rwb2xsLmg6CisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgQWRkIG5ldyBmdW5jdGlvbiBnc3RfcG9sbF9mZF9pZ25vcmVkKCkgZm9yIGltcHJvdmVkIFdpbmRvd3MKKwkgIGNvbXBhdGliaWxpdHkuCisJICBWYXJpb3VzIG1pbm9yIGZpeGVzIGFuZCBjbGVhbnVwcy4gU2VlICM1MjA4MDguCisKKzIwMDgtMDMtMTcgMTA6MjE6NTkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RpbmRleC4qOiBEb24ndCBmcmVlIGtleSBzdHJpbmdzIHdoaWNoIHdlIGRvbid0IG93bi4gRml4ZXMgY3Jhc2ggaW4gZ3N0X2luZGV4X2VudHJ5X2ZyZWUoKSAoIzUyMjc0MSkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGluZGV4LmM6IChnc3RfaW5kZXhfZW50cnlfZnJlZSk6CisJICAqIGdzdC9nc3RpbmRleC5oOgorCSAgRG9uJ3QgZnJlZSBrZXkgc3RyaW5ncyB3aGljaCB3ZSBkb24ndCBvd24uIEZpeGVzIGNyYXNoIGluCisJICBnc3RfaW5kZXhfZW50cnlfZnJlZSgpICgjNTIyNzQxKS4KKwkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICAqIHRlc3RzL2NoZWNrL2dzdC8uY3ZzaWdub3JlOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0aW5kZXguYzogKHRlc3RfaW5kZXhfZW50cmllcyksCisJICAoZ3N0X2luZGV4X3N1aXRlKSwgKGdzdF9pbmRleCk6CisJICBBZGQgdW5pdCB0ZXN0IGZvciB0aGUgYWJvdmUuCisKKzIwMDgtMDMtMTEgMTQ6MDk6NDYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6IFJlbW92ZSBzeW1ib2xzIHRoYXQgd2VyZSByZW1vdmVkIHJlY2VudGx5LiBGaXhlcyBidWcgIzUyMTc0MC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIFJlbW92ZSBzeW1ib2xzIHRoYXQgd2VyZSByZW1vdmVkIHJlY2VudGx5LiBGaXhlcyBidWcgIzUyMTc0MC4KKworMjAwOC0wMy0xMSAwMDoyNDoxOCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIDAuMTAuMTcuMyBwcmUtcmVsZWFzZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oOgorCSAgMC4xMC4xNy4zIHByZS1yZWxlYXNlCisKKzIwMDgtMDMtMTEgMDA6MjM6MDIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBjb25maWd1cmUuYWM6IFJlbGVhc2UgMC4xMC4xNy4zCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgUmVsZWFzZSAwLjEwLjE3LjMKKworMjAwOC0wMy0wNyAxNTozOTo0NSArMDAwMCAgT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzIDxvbGUuYW5kcmUucmF2bmFzQHRhbmRiZXJnLmNvbT4KKworCSAgUmVtb3ZlIEdzdFBvbGxNb2RlIGZyb20gdGhlIEFQSSwgaXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byBsZXQgdGhlIGFwcGxpY2F0aW9uIGNvbnRyb2wgdGhpcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IE9sZSBBbmRyw6kgVmFkbGEgUmF2bsOlcworCSAgPG9sZSBkb3QgYW5kcmUgZG90IHJhdm5hcyBhdCB0YW5kYmVyZyBkb3QgY29tPgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBnc3QvZ3N0cG9sbC5jOiAoZmluZF9pbmRleCksIChnc3RfcG9sbF9mcmVlX3dpbnNvY2tfZXZlbnQpLAorCSAgKGdzdF9wb2xsX3VwZGF0ZV93aW5zb2NrX2V2ZW50X21hc2spLCAoZ3N0X3BvbGxfbmV3KSwKKwkgIChnc3RfcG9sbF9mcmVlKSwgKGdzdF9wb2xsX2ZkX2luaXQpLCAoZ3N0X3BvbGxfYWRkX2ZkX3VubG9ja2VkKSwKKwkgIChnc3RfcG9sbF9yZW1vdmVfZmQpLCAoZ3N0X3BvbGxfZmRfY3RsX3dyaXRlKSwKKwkgIChnc3RfcG9sbF9mZF9jdGxfcmVhZF91bmxvY2tlZCksIChnc3RfcG9sbF9mZF9oYXNfY2xvc2VkKSwKKwkgIChnc3RfcG9sbF9mZF9oYXNfZXJyb3IpLCAoZ3N0X3BvbGxfZmRfY2FuX3JlYWRfdW5sb2NrZWQpLAorCSAgKGdzdF9wb2xsX2ZkX2Nhbl93cml0ZSksIChnc3RfcG9sbF93YWl0KSwKKwkgIChnc3RfcG9sbF9zZXRfY29udHJvbGxhYmxlKSwgKGdzdF9wb2xsX3Jlc3RhcnQpLAorCSAgKGdzdF9wb2xsX3NldF9mbHVzaGluZyk6CisJICAqIGdzdC9nc3Rwb2xsLmg6CisJICAqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOiAoZ3N0X25ldF9jbGllbnRfY2xvY2tfbmV3KToKKwkgICogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jOiAoZ3N0X25ldF90aW1lX3Byb3ZpZGVyX3N0YXJ0KSwKKwkgIChnc3RfbmV0X3RpbWVfcHJvdmlkZXJfbmV3KToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzogKGdzdF9mZF9zaW5rX3N0YXJ0KToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOiAoZ3N0X2ZkX3NyY19zdGFydCk6CisJICAqIHRlc3RzL2JlbmNobWFya3MvZ3N0cG9sbHN0cmVzcy5jOiAobWFpbik6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3Rwb2xsLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RfcG9sbF9zdWl0ZSk6CisJICBSZW1vdmUgR3N0UG9sbE1vZGUgZnJvbSB0aGUgQVBJLCBpdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIGxldCB0aGUKKwkgIGFwcGxpY2F0aW9uIGNvbnRyb2wgdGhpcy4KKwkgIEFkZCBzdXBwb3J0IGZvciBXaW4zMi4KKwkgIEZpeCB0aGUgdGVzdHN1aXRlLiBGaXhlcyAjNTIwNjcxLgorCisyMDA4LTAzLTA3IDEzOjE5OjEyICswMDAwICBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMgPG9sZS5hbmRyZS5yYXZuYXNAdGFuZGJlcmcuY29tPgorCisJICBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogSW5jbHVkZSBpby5oIGZvciB3cml0ZSgpIGFuZCBjbG9zZSgpIHdoZW4gYnVpbGRpbmcgd2l0aCBNU1ZDLiBGaXhlcyBidWcgIzUyMDg3Ny4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IE9sZSBBbmRyw6kgVmFkbGEgUmF2bsOlcworCSAgPG9sZSBkb3QgYW5kcmUgZG90IHJhdm5hcyBhdCB0YW5kYmVyZyBkb3QgY29tPgorCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKKwkgIEluY2x1ZGUgaW8uaCBmb3Igd3JpdGUoKSBhbmQgY2xvc2UoKSB3aGVuIGJ1aWxkaW5nIHdpdGggTVNWQy4gRml4ZXMKKwkgIGJ1ZyAjNTIwODc3LgorCisyMDA4LTAzLTA3IDExOjEyOjU5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIE1vdmUgcmVnaXN0cnkgYmFja2VuZCBBUEkgdG8gcHJpdmF0ZSBoZWFkZXJzIHdoZXJlIHdlIGNhbi4gQWRkIGZpeG1lLTAuMTEgY29tbWVudHMgZm9yIHRoZSBvdGhlcnMuIEFkZCBzdHVicyBmb3IgdGhlIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgICogZ3N0L2dzdF9wcml2YXRlLmg6CisJICAqIGdzdC9nc3Rjb25maWcuaC5pbjoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5Lmg6CisJICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgorCSAgKiB3aW4zMi9jb21tb24vZ3N0Y29uZmlnLmg6CisJICBNb3ZlIHJlZ2lzdHJ5IGJhY2tlbmQgQVBJIHRvIHByaXZhdGUgaGVhZGVycyB3aGVyZSB3ZSBjYW4uIEFkZAorCSAgZml4bWUtMC4xMSBjb21tZW50cyBmb3IgdGhlIG90aGVycy4gQWRkIHN0dWJzIGZvciB0aGUgeG1sIGJhY2tlbmQgd2hlbgorCSAgdXNpbmcgdGhlIGJpbmFyeSB0byBlbnN1cmUgdGhleSBmdW5jdGlvbnMgZXhpc3RzICh0aGV5IHNob3VsZCBub3QgYmUKKwkgIHVzZWQgdGhvdWdoKS4gRml4ZXMgIzUyMDc1Ni4KKworMjAwOC0wMy0wNCAwMDoxNDo1MiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIDAuMTAuMTcuMiBwcmVsZWFzZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oOgorCSAgMC4xMC4xNy4yIHByZWxlYXNlCisKKzIwMDgtMDMtMDMgMTg6NDI6MDQgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkgIFN3aXRjaCB0byB1c2luZyBwb3J0YWJsIGdzaXplL2dzc2l6ZSBpbnN0ZWFkIG9mIHNpemVfdC9zc2l6ZV90CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IChnc3RfcmVnaXN0cnlfYmluYXJ5X3dyaXRlKSwKKwkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X3JlYWRfY2FjaGUpOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogKGdzdF9yZWdpc3RyeV9zYXZlKToKKwkgICogZ3N0L2dzdHVyaS5jOiAodW5lc2NhcGVfc3RyaW5nKSwgKGdzdF91cmlfaGFzX3Byb3RvY29sKToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOiAoZ3N0X2ZpbGVfc2lua19vcGVuX2ZpbGUpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogKGdzdF9maWxlX3NyY19tYXBfcmVnaW9uKSwKKwkgIChnc3RfZmlsZV9zcmNfbWFwX3NtYWxsX3JlZ2lvbiksIChnc3RfZmlsZV9zcmNfY3JlYXRlX21tYXApOgorCSAgU3dpdGNoIHRvIHVzaW5nIHBvcnRhYmwgZ3NpemUvZ3NzaXplIGluc3RlYWQgb2Ygc2l6ZV90L3NzaXplX3QKKwkgIEZpeGVzICM1MjAxNTIKKworMjAwOC0wMy0wMyAxODoxNDozMyArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgZ3N0L2dzdG1pbmlvYmplY3QuYzogSW1wb3J0IGdzdF9wcml2YXRlLmggYmVmb3JlIGFueSBvdGhlciBoZWFkZXIgdGhhdCBtaWdodCBpbmNsdWRlIG90aGVyIGdsaWIgaGVhZGVycy4gVGhpcyBmaXhlcyB0Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdG1pbmlvYmplY3QuYzoKKwkgIEltcG9ydCBnc3RfcHJpdmF0ZS5oIGJlZm9yZSBhbnkgb3RoZXIgaGVhZGVyIHRoYXQgbWlnaHQgaW5jbHVkZSBvdGhlcgorCSAgZ2xpYiBoZWFkZXJzLiBUaGlzIGZpeGVzIHRoZSBidWlsZCBvbiB3aW5kb3dzIHVzaW5nIG5hdGl2ZSBjb21waWxlcnMuCisKKzIwMDgtMDMtMDMgMTQ6NDg6NTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHdpbjMyL2NvbW1vbi9nc3Rjb25maWcuaDogQWRkIGhlcmUgdG9vLCBqdXN0IGZvciBjb21wbGV0ZW5lc3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogd2luMzIvY29tbW9uL2dzdGNvbmZpZy5oOgorCSAgQWRkIGhlcmUgdG9vLCBqdXN0IGZvciBjb21wbGV0ZW5lc3MuCisKKzIwMDgtMDMtMDMgMTQ6NDM6MjYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIEZpeCBicm9rZW4gdXNlIG9mIGNvbmZpZy5oLWRlZmluZWQgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBpbiBhIHB1YmxpYyBoZWFkZXIgZmlsZS4gQWRkIGEgY29ycmVzcG9uZGluZyBkZWZpbmUgdG8gZ3N0Yy4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgICogZ3N0L2dzdGNvbmZpZy5oLmluOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnkuaDoKKwkgIEZpeCBicm9rZW4gdXNlIG9mIGNvbmZpZy5oLWRlZmluZWQgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBpbiBhIHB1YmxpYworCSAgaGVhZGVyIGZpbGUuIEFkZCBhIGNvcnJlc3BvbmRpbmcgZGVmaW5lIHRvIGdzdGNvbmZpZy5oLCBzaW5jZSB3ZSBjYW4ndAorCSAgcmVhbGx5IHJlbW92ZSB0aG9zZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgZnJvbSB0aGUgaGVhZGVyIGZpbGUgbm93CisJICAob3IgY2FuIHdlPyBhbmQgd2h5IGFyZSB0aGV5IHRoZXJlIGluIHRoZSBmaXJzdCBwbGFjZT8pLgorCisyMDA4LTAzLTAzIDEwOjA3OjIxICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYyAoR1NUX1NUQVJUX1RFU1QpOiBBZGQgYSBjaGVjayBmb3IgdGhlIG5ldyB3YXJuaW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA4LTAzLTAzICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmMgKEdTVF9TVEFSVF9URVNUKTogQWRkIGEgY2hlY2sgZm9yCisJICB0aGUgbmV3IHdhcm5pbmcuCisJICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYyAoZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyk6IFdhcm4gaWYKKwkgIHN0cnVjdHVyZV9mcm9tX3N0cmluZyBkaWRuJ3QgY29uc3VtZSB0aGUgd2hvbGUgc3RyaW5nLCBidXQgdGhlCisJICBjYWxsZXIgZGlkIG5vdCBwcm92aWRlIGFuIGVuZCBwb2ludGVyLgorCisyMDA4LTAzLTAxIDExOjIxOjMwICswMDAwICBGYWJyaXppbyBHZW5uYXJpIDxmYWJyaXppby5nZUB0aXNjYWxpLml0PgorCisJICBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogU3RyaW5ncyBhbGxvY2F0ZWQgYnkgbGlieG1sMiBzaG91bGQgYmUgZnJlZWQgd2l0aCB4bWxGcmVlKCksIG5vdCB3aXRoIGdfZnJlZSgpLiBGaXhlcyBpc3N1ZXMgb24uLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IEZhYnJpemlvIEdlbm5hcmkgPGZhYnJpemlvLmdlIGF0IHRpc2NhbGkgaXQ+CisJICAqIGdzdC9nc3RyZWdpc3RyeXhtbC5jOiAocmVhZF9zdHJpbmcpLCAobG9hZF9mZWF0dXJlKToKKwkgIFN0cmluZ3MgYWxsb2NhdGVkIGJ5IGxpYnhtbDIgc2hvdWxkIGJlIGZyZWVkIHdpdGggeG1sRnJlZSgpLCBub3QKKwkgIHdpdGggZ19mcmVlKCkuIEZpeGVzIGlzc3VlcyBvbiB3aW5kb3dzIGluIGNlcnRhaW4gY29udGV4dHMgKCM1MTk2OTgpLgorCisyMDA4LTAyLTI5IDE4OjM4OjU0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0aW50ZXJmYWNlLmM6IERvbid0IGNyYXNoIGlmIHRoZSBlbGVtZW50IHN1cHBvcnRzIHRoZSBpbnRlcmZhY2UgcXVlcmllZCwgYnV0IGRvZXMgbm90IGltcGxlbWVudCBHc3RJbXBsZW1lbnRzSW4uLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0aW50ZXJmYWNlLmM6IChnc3RfZWxlbWVudF9pbXBsZW1lbnRzX2ludGVyZmFjZSk6CisJICBEb24ndCBjcmFzaCBpZiB0aGUgZWxlbWVudCBzdXBwb3J0cyB0aGUgaW50ZXJmYWNlIHF1ZXJpZWQsIGJ1dCBkb2VzCisJICBub3QgaW1wbGVtZW50IEdzdEltcGxlbWVudHNJbnRlcmZhY2UuIEZpeGVzICM1MTk1ODQuCisJICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvLmN2c2lnbm9yZToKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGludGVyZmFjZS5jOgorCSAgQWRkIHVuaXQgdGVzdCBmb3IgdGhlIGFib3ZlLgorCisyMDA4LTAyLTI5IDE1OjM5OjQ0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFNtYWxsIGRvYyB1cGRhdGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19jbGFzc19pbml0KToKKwkgIFNtYWxsIGRvYyB1cGRhdGUuCisKKzIwMDgtMDItMjkgMTU6MjI6MzQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RzZWdtZW50LmM6IEltcHJvdmUgc29tZSBjb21tZW50LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RzZWdtZW50LmM6IChnc3Rfc2VnbWVudF9zZXRfc2VlayksCisJICAoZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUpOgorCSAgSW1wcm92ZSBzb21lIGNvbW1lbnQuCisJICBVcGRhdGUgdmFyaWFibGVzIHdoZXJlIGl0IG1ha2VzIG1vcmUgc2Vuc2UuCisKKzIwMDgtMDItMjkgMTQ6MjM6MTcgKzAwMDAgIFJlbmUgU3RhZGxlciA8bWFpbEByZW5lc3RhZGxlci5kZT4KKworCSAgZ3N0L2dzdHVyaS5jOiBVc2UgdGhlIGdldF9wcm90b2NvbHNfZnVsbCB2ZnVuYyBpZiBnZXRfcHJvdG9jb2xzIGlzIE5VTEwuICBGaXhlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R1cmkuYzogKGdzdF91cmlfaGFuZGxlcl9nZXRfcHJvdG9jb2xzKToKKwkgIFVzZSB0aGUgZ2V0X3Byb3RvY29sc19mdWxsIHZmdW5jIGlmIGdldF9wcm90b2NvbHMgaXMgTlVMTC4gIEZpeGVzCisJICBVUklIYW5kbGVycyBpbXBsZW1lbnRlZCB1c2luZyBsYW5ndWFnZSBiaW5kaW5ncy4KKworMjAwOC0wMi0yOSAxMzo1OToyNCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBBbmQgY29ycmVjdCBldmVuIG1vcmUgdmFsaWQgc3BhcnNlIHdhcm5pbmdzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5oOgorCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc2luay5jOgorCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc3JjLmM6IChzZXR1cF9mYWtlc3JjKToKKwkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvZmRzcmMuYzogKHNldHVwX2Zkc3JjKToKKwkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNpbmsuYzogKHNldHVwX2ZpbGVzaW5rKToKKwkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNyYy5jOiAoc2V0dXBfZmlsZXNyYyk6CisJICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2lkZW50aXR5LmM6IChzZXR1cF9pZGVudGl0eSk6CisJICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3RlZS5jOgorCSAgKiB0ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmM6CisJICAqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc3RhdGVzLmM6IChzZXR1cCksICh0ZWFyZG93bik6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3QuYzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGFiaS5jOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RidXMuYzogKHB1bGxfbWVzc2FnZXMpOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZWxlbWVudC5jOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RpdGVyYXRvci5jOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWVzc2FnZS5jOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWluaW9iamVjdC5jOiAobXlfZm9vX2luaXQpOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0b2JqZWN0LmM6ICh0aHJlYWRfbmFtZV9vYmplY3QpLAorCSAgKGdzdF9vYmplY3Rfc3VpdGUpOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RwbHVnaW4uYzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHBvbGwuYzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHF1ZXJ5LmM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RzZWdtZW50LmM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHN5c3RlbWNsb2NrLmM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R0YXNrLmM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9ocHBhLmg6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfaTM4Ni5oOgorCSAgKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3BwYzMyLmg6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfcHBjNjQuaDoKKwkgICogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF94ODZfNjQuaDoKKwkgICogdGVzdHMvY2hlY2svbGlicy9hZGFwdGVyLmM6IChjcmVhdGVfYW5kX2ZpbGxfYWRhcHRlcik6CisJICAqIHRlc3RzL2NoZWNrL2xpYnMvYmFzZXNyYy5jOgorCSAgKiB0ZXN0cy9jaGVjay9saWJzL2NvbnRyb2xsZXIuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgICogdGVzdHMvY2hlY2svbGlicy9nZHAuYzoKKwkgICogdGVzdHMvY2hlY2svbGlicy9nc3RuZXRjbGllbnRjbG9jay5jOgorCSAgKiB0ZXN0cy9jaGVjay9saWJzL2dzdG5ldHRpbWVwcm92aWRlci5jOgorCSAgKiB0ZXN0cy9jaGVjay9saWJzL2xpYnNhYmkuYzoKKwkgICogdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfaHBwYS5oOgorCSAgKiB0ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9pMzg2Lmg6CisJICAqIHRlc3RzL2NoZWNrL2xpYnMvc3RydWN0X3BwYzMyLmg6CisJICAqIHRlc3RzL2NoZWNrL2xpYnMvc3RydWN0X3BwYzY0Lmg6CisJICAqIHRlc3RzL2NoZWNrL2xpYnMvc3RydWN0X3g4Nl82NC5oOgorCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvY2xlYW51cC5jOgorCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jOgorCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc3RyZXNzLmM6CisJICBBbmQgY29ycmVjdCBldmVuIG1vcmUgdmFsaWQgc3BhcnNlIHdhcm5pbmdzLgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIEFkZCBnc3RfcG9sbF9mZF9pbml0IHRvIHRoZSBsaXN0IG9mIHN5bWJvbHMuCisKKzIwMDgtMDItMjkgMTI6NDE6MzMgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgQ29ycmVjdCBhbGwgcmVsZXZhbnQgd2FybmluZ3MgZm91bmQgYnkgdGhlIHNwYXJzZSBzZW1hbnRpYyBjb2RlIGFuYWx5emVyLiBUaGlzIGluY2x1ZGUgbWFya2luZyBzZXZlcmFsIHN5bWJvbHMgc3RhdGljLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGNvbmZpZy5oLmluOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChnc3RfY29sbGVjdF9wYWRzX3JlYWRfYnVmZmVyKToKKwkgICogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzogKGdzdF9jaGVja19sb2dfbWVzc2FnZV9mdW5jKSwKKwkgIChnc3RfY2hlY2tfbG9nX2NyaXRpY2FsX2Z1bmMpLCAoZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycyksCisJICAoZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXJfbGlzdCk6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOiAoZ3N0X2NvbnRyb2xsZXJfZ2V0KSwKKwkgIChnc3RfY29udHJvbGxlcl9nZXRfdHlwZSk6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aGVscGVyLmM6IChnc3Rfb2JqZWN0X2NvbnRyb2xfcHJvcGVydGllcyksCisJICAoZ3N0X29iamVjdF9nZXRfY29udHJvbGxlciksIChnc3Rfb2JqZWN0X2dldF9jb250cm9sX3NvdXJjZSk6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzoKKwkgIChnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcpOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuYzoKKwkgIChnc3RfbGZvX2NvbnRyb2xfc291cmNlX25ldyk6CisJICAqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzoKKwkgIChnc3RfZHBfZXZlbnRfZnJvbV9wYWNrZXRfMF8yKToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkgICogcGx1Z2lucy9pbmRleGVycy9nc3RmaWxlaW5kZXguYzogKF9maWxlX2luZGV4X2lkX3NhdmVfeG1sKSwKKwkgIChnc3RfZmlsZV9pbmRleF9hZGRfYXNzb2NpYXRpb24pOgorCSAgKiBwbHVnaW5zL2luZGV4ZXJzL2dzdG1lbWluZGV4LmM6CisJICAqIHRlc3RzL2JlbmNobWFya3MvZ3N0cG9sbHN0cmVzcy5jOiAobWVzc19zb21lX21vcmUpOgorCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdWV1ZS5jOiAoc2V0dXBfcXVldWUpOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzoKKwkgICogdGVzdHMvY2hlY2svbGlicy9jb2xsZWN0cGFkcy5jOiAoc2V0dXApLCAodGVhcmRvd24pLAorCSAgKGdzdF9jb2xsZWN0X3BhZHNfc3VpdGUpOgorCSAgKiB0ZXN0cy9leGFtcGxlcy9hZGFwdGVyL2FkYXB0ZXJfdGVzdC5jOgorCSAgKiB0ZXN0cy9leGFtcGxlcy9tZXRhZGF0YS9yZWFkLW1ldGFkYXRhLmM6IChtYWtlX3BpcGVsaW5lKToKKwkgICogdGVzdHMvZXhhbXBsZXMveG1sL2NyZWF0ZXhtbC5jOgorCSAgKiB0ZXN0cy9leGFtcGxlcy94bWwvcnVueG1sLmM6CisJICAqIHRvb2xzL2dzdC1pbnNwZWN0LmM6CisJICAqIHRvb2xzL2dzdC1ydW4uYzoKKwkgIENvcnJlY3QgYWxsIHJlbGV2YW50IHdhcm5pbmdzIGZvdW5kIGJ5IHRoZSBzcGFyc2Ugc2VtYW50aWMgY29kZQorCSAgYW5hbHl6ZXIuIFRoaXMgaW5jbHVkZSBtYXJraW5nIHNldmVyYWwgc3ltYm9scyBzdGF0aWMsIHVzaW5nCisJICBOVUxMIGluc3RlYWQgb2YgMCBmb3IgcG9pbnRlcnMsIG5vdCB1c2luZyB2YXJpYWJsZSBzaXplZCBhcnJheXMKKwkgIG9uIHRoZSBzdGFjaywgbW92aW5nIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyB0byB0aGUgYmVnaW5uaW5nIG9mCisJICBhIGJsb2NrIGFuZCB1c2luZyAiZm9vICh2b2lkKSIgaW5zdGVhZCBvZiAiZm9vICgpIiBmb3IgZGVjbGFyYXRpb25zLgorCisyMDA4LTAyLTI5IDEyOjA1OjU1ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvOiBEb24ndCByZXNldCBHc3RQb2xsRkRzLCB0aGlzIGlzIG5vdCBuZWNlc3NhcnkgYXQgYWxsLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6IChnc3RfZmRfc2lua191cGRhdGVfZmQpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6IChnc3RfZmRfc3JjX3VwZGF0ZV9mZCk6CisJICBEb24ndCByZXNldCBHc3RQb2xsRkRzLCB0aGlzIGlzIG5vdCBuZWNlc3NhcnkgYXQgYWxsLgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cG9sbC5jOiAodGVzdF9wb2xsX3dhaXQpLCAoR1NUX1NUQVJUX1RFU1QpLAorCSAgKGRlbGF5ZWRfcmVzdGFydCksIChkZWxheWVkX2NvbnRyb2wpOgorCSAgVXNlIEdTVF9QT0xMX0ZEX0lOSVQuCisKKzIwMDgtMDItMjkgMTE6NTc6NDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3Rwb2xsLio6IEFkZGVkIFNpbmNlIHRhZ3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBvbGwuYzogKGdzdF9wb2xsX2ZkX2luaXQpOgorCSAgKiBnc3QvZ3N0cG9sbC5oOgorCSAgQWRkZWQgU2luY2UgdGFncy4KKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzogKGdzdF9mZF9zaW5rX3VwZGF0ZV9mZCk6CisJICBVc2Ugc29tZSBtb3JlIGluaXQgbWFjcm9zLgorCisyMDA4LTAyLTI5IDExOjIwOjAxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzLzogVXNlIGluaXQgbWFjcm9zIGFuZCBmdW5jdGlvbnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzogKGdzdF9mZF9zaW5rX3N0YXJ0KToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOiAoZ3N0X2ZkX3NyY191cGRhdGVfZmQpOgorCSAgVXNlIGluaXQgbWFjcm9zIGFuZCBmdW5jdGlvbnMuCisKKzIwMDgtMDItMjkgMTE6MDA6NDMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIEFkZCBJTklUIG1hY3JvIGFuZCBfaW5pdCBtZXRob2QgZm9yIGluaXRpYWxpemluZyB0aGUgR3N0UG9sbEZELgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3Rwb2xsLmM6IChnc3RfcG9sbF9mZF9pbml0KToKKwkgICogZ3N0L2dzdHBvbGwuaDoKKwkgIEFkZCBJTklUIG1hY3JvIGFuZCBfaW5pdCBtZXRob2QgZm9yIGluaXRpYWxpemluZyB0aGUgR3N0UG9sbEZELgorCisyMDA4LTAyLTI4IDE5OjU4OjI2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIEluaXRpYWxpemUgc29tZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcyBzcG90dGVkIGJ5IHZhbGdyaW5kLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6IChnc3RfZmRfc2lua19zdGFydCksCisJICAoZ3N0X2ZkX3NpbmtfdXBkYXRlX2ZkKToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOiAoZ3N0X2ZkX3NyY191cGRhdGVfZmQpOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cG9sbC5jOiAodGVzdF9wb2xsX3dhaXQpLCAoR1NUX1NUQVJUX1RFU1QpLAorCSAgKGRlbGF5ZWRfcmVzdGFydCksIChkZWxheWVkX2NvbnRyb2wpOgorCSAgSW5pdGlhbGl6ZSBzb21lIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFzIHNwb3R0ZWQgYnkgdmFsZ3JpbmQuCisKKzIwMDgtMDItMjggMTU6MjU6NTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHRlc3RzL2JlbmNobWFya3MvOiBBZGQgcG9sbCBzdHJlc3MgdGVzdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9iZW5jaG1hcmtzL01ha2VmaWxlLmFtOgorCSAgKiB0ZXN0cy9iZW5jaG1hcmtzL2dzdHBvbGxzdHJlc3MuYzogKG1lc3Nfc29tZV9tb3JlKSwgKHJ1bl90ZXN0KSwKKwkgIChtYWluKToKKwkgIEFkZCBwb2xsIHN0cmVzcyB0ZXN0LgorCisyMDA4LTAyLTI4IDEwOjE4OjAyICswMDAwICBQZXRlciBLamVsbGVyc3RlZHQgPHBrakBheGlzLmNvbT4KKworCSAgcGx1Z2lucy9lbGVtZW50cy86IFBvcnQgdG8gR3N0UG9sbC4gU2VlICM1MDU0MTcuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBQZXRlciBLamVsbGVyc3RlZHQgPHBraiBhdCBheGlzIGRvdCBjb20+CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6IChnc3RfZmRfc2lua19yZW5kZXIpLAorCSAgKGdzdF9mZF9zaW5rX3N0YXJ0KSwgKGdzdF9mZF9zaW5rX3N0b3ApLCAoZ3N0X2ZkX3NpbmtfdW5sb2NrKSwKKwkgIChnc3RfZmRfc2lua191bmxvY2tfc3RvcCksIChnc3RfZmRfc2lua191cGRhdGVfZmQpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5oOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6IChnc3RfZmRfc3JjX3VwZGF0ZV9mZCksCisJICAoZ3N0X2ZkX3NyY19zdGFydCksIChnc3RfZmRfc3JjX3N0b3ApLCAoZ3N0X2ZkX3NyY191bmxvY2spLAorCSAgKGdzdF9mZF9zcmNfdW5sb2NrX3N0b3ApLCAoZ3N0X2ZkX3NyY19jcmVhdGUpLAorCSAgKGdzdF9mZF9zcmNfdXJpX3NldF91cmkpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmg6CisJICBQb3J0IHRvIEdzdFBvbGwuIFNlZSAjNTA1NDE3LgorCisyMDA4LTAyLTI3IDIxOjE4OjMzICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6IEFkZCBuZXcgZ3N0X3BvbGxfIHN5bWJvbHMgdG8gd2luMzIgZGVmcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIEFkZCBuZXcgZ3N0X3BvbGxfIHN5bWJvbHMgdG8gd2luMzIgZGVmcy4KKworMjAwOC0wMi0yNyAxOTowMToxMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgVXNlIGEgcHJpdmF0ZSBzdHVjdCB0byBub3QgYnJlYWsgQUJJLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJICAqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgorCSAgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX2NsYXNzX2luaXQpLCAoZ3N0X25ldF9jbGllbnRfY2xvY2tfaW5pdCksCisJICAoZ3N0X25ldF9jbGllbnRfY2xvY2tfZmluYWxpemUpLCAoZ3N0X25ldF9jbGllbnRfY2xvY2tfZG9fc2VsZWN0KSwKKwkgIChnc3RfbmV0X2NsaWVudF9jbG9ja190aHJlYWQpLCAoZ3N0X25ldF9jbGllbnRfY2xvY2tfc3RhcnQpLAorCSAgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX3N0b3ApLCAoZ3N0X25ldF9jbGllbnRfY2xvY2tfbmV3KToKKwkgICogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmg6CisJICAqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzoKKwkgIChnc3RfbmV0X3RpbWVfcHJvdmlkZXJfY2xhc3NfaW5pdCksIChnc3RfbmV0X3RpbWVfcHJvdmlkZXJfaW5pdCksCisJICAoZ3N0X25ldF90aW1lX3Byb3ZpZGVyX2ZpbmFsaXplKSwgKGdzdF9uZXRfdGltZV9wcm92aWRlcl90aHJlYWQpLAorCSAgKGdzdF9uZXRfdGltZV9wcm92aWRlcl9zdGFydCksIChnc3RfbmV0X3RpbWVfcHJvdmlkZXJfc3RvcCksCisJICAoZ3N0X25ldF90aW1lX3Byb3ZpZGVyX25ldyk6CisJICAqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuaDoKKwkgIFVzZSBhIHByaXZhdGUgc3R1Y3QgdG8gbm90IGJyZWFrIEFCSS4KKworMjAwOC0wMi0yNyAxODoyNzo1OSArMDAwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+CisKKwkgIGxpYnMvZ3N0L25ldC86IE1hc3NpdmUgY29kZSByZW1vdmFsIGFuZCBjbGVhbnVwcyBiZWNhdXNlIG9mIEdzdFBvbGwuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBQZXRlciBLamVsbGVyc3RlZHQgPHBraiBhdCBheGlzIGRvdCBjb20+CisJICAqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOiAoZ3N0X25ldF9jbGllbnRfY2xvY2tfaW5pdCksCisJICAoZ3N0X25ldF9jbGllbnRfY2xvY2tfZmluYWxpemUpLCAoZ3N0X25ldF9jbGllbnRfY2xvY2tfZG9fc2VsZWN0KSwKKwkgIChnc3RfbmV0X2NsaWVudF9jbG9ja190aHJlYWQpLCAoZ3N0X25ldF9jbGllbnRfY2xvY2tfc3RhcnQpLAorCSAgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX3N0b3ApLCAoZ3N0X25ldF9jbGllbnRfY2xvY2tfbmV3KToKKwkgICogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmg6CisJICAqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzogKGdzdF9uZXRfdGltZV9wcm92aWRlcl9pbml0KSwKKwkgIChnc3RfbmV0X3RpbWVfcHJvdmlkZXJfZmluYWxpemUpLCAoZ3N0X25ldF90aW1lX3Byb3ZpZGVyX3RocmVhZCksCisJICAoZ3N0X25ldF90aW1lX3Byb3ZpZGVyX3N0YXJ0KSwgKGdzdF9uZXRfdGltZV9wcm92aWRlcl9zdG9wKSwKKwkgIChnc3RfbmV0X3RpbWVfcHJvdmlkZXJfbmV3KToKKwkgICogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5oOgorCSAgTWFzc2l2ZSBjb2RlIHJlbW92YWwgYW5kIGNsZWFudXBzIGJlY2F1c2Ugb2YgR3N0UG9sbC4KKwkgIEZpeGVzICM1MDU0MTcuCisKKzIwMDgtMDItMjcgMTg6MDA6MDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGNvbmZpZ3VyZS5hYzogQWRkIGNoZWNrcyBmb3IgcG9sbCwgcHBvbGwgYW5kIHBzZWxlY3QuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgQWRkIGNoZWNrcyBmb3IgcG9sbCwgcHBvbGwgYW5kIHBzZWxlY3QuCisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICBBZGQgZG9jcyBmb3IgR3N0UG9sbC4KKwkgICogZ3N0L01ha2VmaWxlLmFtOgorCSAgKiBnc3QvZ3N0Lmg6CisJICAqIGdzdC9nc3Rwb2xsLmM6IChmaW5kX2luZGV4KSwgKHNlbGVjdGFibGVfZmRzKSwKKwkgIChwb2xsYWJsZV90aW1lb3V0KSwgKGNob29zZV9tb2RlKSwgKHBvbGxmZF90b19mZF9zZXQpLAorCSAgKGZkX3NldF90b19wb2xsZmQpLCAoZ3N0X3BvbGxfbmV3KSwgKGdzdF9wb2xsX2ZyZWUpLAorCSAgKGdzdF9wb2xsX3NldF9tb2RlKSwgKGdzdF9wb2xsX2dldF9tb2RlKSwKKwkgIChnc3RfcG9sbF9hZGRfZmRfdW5sb2NrZWQpLCAoZ3N0X3BvbGxfYWRkX2ZkKSwKKwkgIChnc3RfcG9sbF9yZW1vdmVfZmQpLCAoZ3N0X3BvbGxfZmRfY3RsX3dyaXRlKSwKKwkgIChnc3RfcG9sbF9mZF9jdGxfcmVhZF91bmxvY2tlZCksIChnc3RfcG9sbF9mZF9jdGxfcmVhZCksCisJICAoZ3N0X3BvbGxfZmRfaGFzX2Nsb3NlZCksIChnc3RfcG9sbF9mZF9oYXNfZXJyb3IpLAorCSAgKGdzdF9wb2xsX2ZkX2Nhbl9yZWFkX3VubG9ja2VkKSwgKGdzdF9wb2xsX2ZkX2Nhbl9yZWFkKSwKKwkgIChnc3RfcG9sbF9mZF9jYW5fd3JpdGUpLCAoZ3N0X3BvbGxfd2FpdCksCisJICAoZ3N0X3BvbGxfc2V0X2NvbnRyb2xsYWJsZSksIChnc3RfcG9sbF9yZXN0YXJ0KSwKKwkgIChnc3RfcG9sbF9zZXRfZmx1c2hpbmcpOgorCSAgKiBnc3QvZ3N0cG9sbC5oOgorCSAgQWRkIGdlbmVyaWMgcG9sbCBhYnN0cmFjdGlvbi4gV2UgaWRlYWxseSBkb24ndCB3YW50IHRvIGhhdmUgdGhpcyBpbiBjb3JlCisJICBoZXJlIGJ1dCBpbiBnbGliIGludGVhZC4uLgorCSAgVGhpcyBjb2RlIHdpbGwgYmUgdXNlZCBpbiB2YXJpb3VzIG5ldHdvcmsgZWxlbWVudHMgYW5kIHVsdGltYXRlbHkgZm9yCisJICB0aGUgbmFub3NlY29uZCBwcmVjaXNpb24gbW9ub3RvbmljIGNsb2NrICh0aGF0J3Mgd2h5IGl0J3MgaGVyZSBpbiBjb3JlKS4KKwkgIEl0J2xsIGFsbG93IHVzIHRvIGltcGxlbWVudCBjYW5jZWxhYmxlIHNvY2tldCBvcGVyYXRpb25zIGZvciB3aW5kb3dzIHRvby4KKwkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3Rwb2xsLmM6ICh0ZXN0X3BvbGxfd2FpdCksIChHU1RfU1RBUlRfVEVTVCksCisJICAoZGVsYXllZF9zdG9wKSwgKGRlbGF5ZWRfcmVzdGFydCksIChkZWxheWVkX2ZsdXNoKSwKKwkgIChkZWxheWVkX2NvbnRyb2wpLCAoZ3N0X3BvbGxfc3VpdGUpOgorCSAgQWRkIEdzdFBvbGwgdW5pdCB0ZXN0LgorCisyMDA4LTAyLTI1IDE1OjM3OjM2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0ZmlsdGVyLmM6IEltcHJvdmUgZG9jdW1lbnRhdGlvbiBvZiBnc3RfZmlsdGVyX3J1bigpLiBGaXhlcyAjNTE4NjI3LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RmaWx0ZXIuYzoKKwkgIEltcHJvdmUgZG9jdW1lbnRhdGlvbiBvZiBnc3RfZmlsdGVyX3J1bigpLiBGaXhlcyAjNTE4NjI3LgorCisyMDA4LTAyLTIzIDE2OjAzOjM3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBkb2NzL1JFQURNRTogQWRkIGEgZmV3IGxpbmVzIGFib3V0IHRoZSBuZXcgJ2NoZWNrLWluc3BlY3RlZC12ZXJzaW9ucycgdGFyZ2V0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvUkVBRE1FOgorCSAgQWRkIGEgZmV3IGxpbmVzIGFib3V0IHRoZSBuZXcgJ2NoZWNrLWluc3BlY3RlZC12ZXJzaW9ucycgdGFyZ2V0LgorCisyMDA4LTAyLTIxIDEwOjMwOjUwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOiBBZGQgcW9zIHRvIHRoZSBldmVudCB0ZXN0LiBSZW5hbWUgdGNhc2UvdHN1aXRlOyBpcyBub3Qgb25seSBhYm91dCBjdXN0b20gZXZlbnRzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOgorCSAgQWRkIHFvcyB0byB0aGUgZXZlbnQgdGVzdC4gUmVuYW1lIHRjYXNlL3RzdWl0ZTsgaXMgbm90IG9ubHkgYWJvdXQKKwkgIGN1c3RvbSBldmVudHMuCisKKzIwMDgtMDItMjEgMTA6MjI6MzYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiBFbnN1cmUgdGhhdCBidWZmZXIgbWV0YWRhdGEgaXMgd3JpdGVhYmxlLCBiZWZvcmUgbW9kaWZ5aW5nLiBTcG90dGVkIGJ5CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSAgRW5zdXJlIHRoYXQgYnVmZmVyIG1ldGFkYXRhIGlzIHdyaXRlYWJsZSwgYmVmb3JlIG1vZGlmeWluZy4gU3BvdHRlZCBieQorCSAgTWlrZS4KKworMjAwOC0wMi0yMCAxNTo0NDozMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLio6IFdoZW4gZHJvcHBpbmcgYnVmZmVycyBpbiBsZWFreSBtb2RlcywgbWFyayBuZXh0IGJ1ZmZlcnMgd2Ugc2VudCBhcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5oOgorCSAgV2hlbiBkcm9wcGluZyBidWZmZXJzIGluIGxlYWt5IG1vZGVzLCBtYXJrIG5leHQgYnVmZmVycyB3ZSBzZW50IGFzCisJICBESVNDT05ULgorCisyMDA4LTAyLTIwIDEyOjMxOjUwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogQWxzbywgaWYgbW1hcCgpIGZhaWxzIHRoYXQgd291bGQgYmUgYSBSRUFEIGVycm9yLCBub3QgT1BFTl9SRUFELgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiAoZ3N0X2ZpbGVfc3JjX21hcF9yZWdpb24pOgorCSAgQWxzbywgaWYgbW1hcCgpIGZhaWxzIHRoYXQgd291bGQgYmUgYSBSRUFEIGVycm9yLCBub3QgT1BFTl9SRUFELgorCisyMDA4LTAyLTIwIDEyOjI2OjE5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBwbHVnaW5zL2VsZW1lbnRzLzogUmVtb3ZlIEdzdEJ1ZmZlclN0b3JlLCBubyBpZGVhIHdoeSB3ZSB3ZXJlIHN0aWxsIGJ1aWxkaW5nIGl0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUuYW06CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0YnVmZmVyc3RvcmUuYzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RidWZmZXJzdG9yZS5oOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5oOgorCSAgUmVtb3ZlIEdzdEJ1ZmZlclN0b3JlLCBubyBpZGVhIHdoeSB3ZSB3ZXJlIHN0aWxsIGJ1aWxkaW5nIGl0LgorCSAgSXQncyBub3QgdXNlZCBhbnl3aGVyZSBhbmQgc3VwZXJzZWRlZCBieSBHc3RBZGFwdGVyLgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogKGdzdF9maWxlX3NyY19tYXBfcmVnaW9uKSwKKwkgIChnc3RfZmlsZV9zcmNfY3JlYXRlX21tYXApOgorCSAgKiBwbHVnaW5zL2luZGV4ZXJzL2dzdGZpbGVpbmRleC5jOiAoZ3N0X2ZpbGVfaW5kZXhfYWRkX2Fzc29jaWF0aW9uKToKKwkgIFByaW50ZiBmb3JtYXQgZml4ZXMgZm9yIDY0LWJpdCBpbnRlZ2Vycy4KKworMjAwOC0wMi0xOSAxMzowMDoxNCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBjb25maWd1cmUuYWM6IERvbid0IHNldCBHU1RfQ0FDSEVfRElSIGFuZCBhbGxvdyB0byBzZXQgaXQgYnkgYSBjb25maWd1cmUgcGFyYW1ldGVyLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgIERvbid0IHNldCBHU1RfQ0FDSEVfRElSIGFuZCBhbGxvdyB0byBzZXQgaXQgYnkgYSBjb25maWd1cmUgcGFyYW1ldGVyLgorCSAgV2UncmUgbm90IGluIDAuOCB0aW1lcyBhbnltb3JlLgorCisyMDA4LTAyLTE5IDEyOjU2OjI4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suKjogTWFrZSB0aGUgZGVjbGFyYXRpb24gaW4gdGhlIGhlYWRlciBmb3IgZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXJfbGlzdCBtYXRjaCB0aGUgaW1wbGVtLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzogKGdzdF9jaGVja19kcm9wX2J1ZmZlcnMpLAorCSAgKGdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVyX2xpc3QpOgorCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgorCSAgTWFrZSB0aGUgZGVjbGFyYXRpb24gaW4gdGhlIGhlYWRlciBmb3IKKwkgIGdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVyX2xpc3QgbWF0Y2ggdGhlIGltcGxlbWVudGF0aW9uLgorCSAgRml4IHVwIHNwZWxsaW5nLCBncmFtbWFyIGFuZCB3b3JkaW5nIG9mIHRoZSBkb2N1bWVudGF0aW9uIGluIGEgZmV3CisJICBwbGFjZXMsIGFuZCBhZGQgdGhlIFNpbmNlIGtleXdvcmQgdG8gbmV3IEFQSSBmdW5jdGlvbnMuCisJICBVc2UgZ19saXN0X2RlbGV0ZV9saW5rIGluc3RlYWQgb2YgZ19saXN0X3JlbW92ZSBpbgorCSAgZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycywgc2luY2UgaXQncyBpbW1lYXN1cmFibHkgbW9yZSBlZmZpY2llbnQuCisJICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzcmMuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgIFVzZSBuZXcgZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycyBmdW5jdGlvbiB3aGVyZSBhcHByb3ByaWF0ZS4KKwkgICogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIEFkZCBuZXcgc3ltYm9scyBnc3RfY29sbGVjdF9wYWRzX3Rha2VfYnVmZmVyLAorCSAgZ3N0X2NvbGxlY3RfcGFkc19yZWFkX2J1ZmZlciwgZ3N0X2luZGV4X3NldF9yZXNvbHZlcl9mdWxsIHRvIHRoZQorCSAgZXhwb3J0cworCSAgQ2hhbmdlbG9nIHN1cmdlcnkgdG8gYWRkIEFQSSBrZXl3b3JkIHRvIG5ldyBnc3RfY2hlY2sgQVBJLgorCisyMDA4LTAyLTE5IDA4OjA1OjE1ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIGdzdC9wYXJzZS9sZXguX2dzdF9wYXJzZV95eS5wcmUuYzogVXBkYXRlIHByZS1nZW5lcmF0ZWQgZmxleCBmaWxlcyB3aXRoIGZsZXggMi4zLjM0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9wYXJzZS9sZXguX2dzdF9wYXJzZV95eS5wcmUuYzogKHl5X2dldF9uZXh0X2J1ZmZlciksCisJICAoX2dzdF9wYXJzZV95eWVuc3VyZV9idWZmZXJfc3RhY2spLCAoX2dzdF9wYXJzZV95eWxleF9pbml0X2V4dHJhKToKKwkgIFVwZGF0ZSBwcmUtZ2VuZXJhdGVkIGZsZXggZmlsZXMgd2l0aCBmbGV4IDIuMy4zNC4KKworMjAwOC0wMi0xOSAwNTo0OTozMiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBnc3QvZ3N0bWluaW9iamVjdC5jOiBBZGQgRklYTUUgZm9yIDAuMTEgdG8gbWFrZSBHc3RNaW5pT2JqZWN0Q2xhc3M6OmNvcHkoKSBhIGJpdCBtb3JlIGZyaWVuZGx5IHRvIHN1YmNsYXNzZXMgYW5kIG5vdCAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5jOgorCSAgQWRkIEZJWE1FIGZvciAwLjExIHRvIG1ha2UgR3N0TWluaU9iamVjdENsYXNzOjpjb3B5KCkgYSBiaXQgbW9yZQorCSAgZnJpZW5kbHkgdG8gc3ViY2xhc3NlcyBhbmQgbm90IHJlcXVpcmUgdGhlbSB0byBrbm93IGFsbCBpbnRlcm5hbHMKKwkgIG9mIHRoZWlyIHBhcmVudCBjbGFzcy4KKworMjAwOC0wMi0xNSAxMzoxNToxNyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBBZGQgc3ViLWJ1ZmZlciBmdW5jdGlvbnMgdG8gY29sbGVjdHBhZHMuIEZpeGVzICM1MTYxODcuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg6CisJICBBZGQgc3ViLWJ1ZmZlciBmdW5jdGlvbnMgdG8gY29sbGVjdHBhZHMuIEZpeGVzICM1MTYxODcuCisJICBBUEk6IGdzdF9jb2xsZWN0X3BhZHNfdGFrZV9idWZmZXIoKSwgZ3N0X2NvbGxlY3RfcGFkc19yZWFkX2J1ZmZlcigpCisKKzIwMDgtMDItMTUgMTI6MzM6MDAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdGJ1ZmZlci5jOiBDb3B5IHNlbGVjdGVkIGJ1ZmZlci1mbGFncyB3aGVuIGNyZWF0aW5nIHN1YmJ1ZmZlcnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJ1ZmZlci5jOgorCSAgQ29weSBzZWxlY3RlZCBidWZmZXItZmxhZ3Mgd2hlbiBjcmVhdGluZyBzdWJidWZmZXJzLgorCSAgRml4ZXMgIzUxNjM5NS4KKworMjAwOC0wMi0xMiAxMjowNDo0MyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBQcm9wZXJseSBjaGFpbiB1cCBmaW5hbGl6ZSBmdW5jdGlvbnMgdG8gdGhlIHBhcmVudCBjbGFzcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YnVmZmVyLmM6IChnc3RfYnVmZmVyX2NsYXNzX2luaXQpLCAoZ3N0X2J1ZmZlcl9maW5hbGl6ZSk6CisJICAqIGdzdC9nc3RldmVudC5jOiAoZ3N0X2V2ZW50X2NsYXNzX2luaXQpLCAoZ3N0X2V2ZW50X2ZpbmFsaXplKToKKwkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKGdzdF9tZXNzYWdlX2NsYXNzX2luaXQpLAorCSAgKGdzdF9tZXNzYWdlX2ZpbmFsaXplKToKKwkgICogZ3N0L2dzdHF1ZXJ5LmM6IChnc3RfcXVlcnlfY2xhc3NfaW5pdCksIChnc3RfcXVlcnlfZmluYWxpemUpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogKGdzdF9tbWFwX2J1ZmZlcl9jbGFzc19pbml0KSwKKwkgIChnc3RfbW1hcF9idWZmZXJfZmluYWxpemUpOgorCSAgUHJvcGVybHkgY2hhaW4gdXAgZmluYWxpemUgZnVuY3Rpb25zIHRvIHRoZSBwYXJlbnQgY2xhc3MuCisKKzIwMDgtMDItMTEgMTc6NTM6NTcgKzAwMDAgIFNpYXZhc2ggU2FmaSA8c2lhdmFzaC5zYWZpQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGluZGV4Lio6IEFkZCBuZXcgZnVuY3Rpb24gd2l0aCBvcHRpb24gdG8gZGlzcG9zZSBvZiB1c2VyX2RhdGEgaW4gcmVzb2x2ZXIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBTaWF2YXNoIFNhZmkgPHNpYXZhc2ggZG90IHNhZmkgYXQgZ21haWwgZG90IGNvbT4KKwkgICogZ3N0L2dzdGluZGV4LmM6IChnc3RfaW5kZXhfZmluYWxpemUpLCAoZ3N0X2luZGV4X3NldF9yZXNvbHZlciksCisJICAoZ3N0X2luZGV4X3NldF9yZXNvbHZlcl9mdWxsKToKKwkgICogZ3N0L2dzdGluZGV4Lmg6CisJICBBZGQgbmV3IGZ1bmN0aW9uIHdpdGggb3B0aW9uIHRvIGRpc3Bvc2Ugb2YgdXNlcl9kYXRhIGluIHJlc29sdmVyLgorCSAgQWN0dWFsbHkgY2FsbCB0aGUgZGlzcG9zZSBmdW5jdGlvbiB3aGVuIGZpbmFsaXppbmcgdGhlIG9iamVjdCBhbmQgbm90CisJICBqdXN0IHdoZW4gY2hhbmdpbmcgdGhlIHJlc29sdmVyL2ZpbHRlci4KKwkgIEFQSTogR3N0SW5kZXg6OmdzdF9pbmRleF9zZXRfcmVzb2x2ZXJfZnVsbCgpCisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICBBZGQgbmV3IGZ1bmN0aW9uIHRvIGRvY3MuIEZpeGVzICM1MTU0NjkuCisKKzIwMDgtMDItMTEgMDg6NTM6MDQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgZ3N0L2dzdGluZGV4LmM6IENoYWluIHVwIGZpbmFsaXplIHRvIHRoZSBwYXJlbnQgY2xhc3MuIEZpeGVzIGxlYWtpbmcgdGhlIEdzdE9iamVjdCBuYW1lIGFuZCBvdGhlciB0aGluZ3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGluZGV4LmM6IChnc3RfaW5kZXhfZmluYWxpemUpOgorCSAgQ2hhaW4gdXAgZmluYWxpemUgdG8gdGhlIHBhcmVudCBjbGFzcy4gRml4ZXMgbGVha2luZyB0aGUgR3N0T2JqZWN0CisJICBuYW1lIGFuZCBvdGhlciB0aGluZ3MuCisKKzIwMDgtMDItMTAgMTk6NDg6MDQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJKiBDaGFuZ2VMb2c6CisJKiBjb21tb246CisJICBDaGFuZ2VMb2cgc3VyZ2VyeTogRml4IEpvc2VwJ3Mgc3VybmFtZSBpbiBwcmV2aW91cyBjb21taXRzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIENoYW5nZUxvZyBzdXJnZXJ5OiBGaXggSm9zZXAncyBzdXJuYW1lIGluIHByZXZpb3VzIGNvbW1pdHMKKworMjAwOC0wMi0wOCAwMDo1NDoyOCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGNvbmZpZ3VyZS5hYzogTWFrZSBESVNBQkxFX0RFUFJFQ0FURUQgZGVmaW5lZCAqb25seSogZHVyaW5nIENWUywgbm90IGR1cmluZyBwcmUtcmVsZWFzZXMgb3IgcmVsZWFzZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgTWFrZSBESVNBQkxFX0RFUFJFQ0FURUQgZGVmaW5lZCAqb25seSogZHVyaW5nIENWUywgbm90IGR1cmluZworCSAgcHJlLXJlbGVhc2VzIG9yIHJlbGVhc2VzLgorCSAgKiBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6CisJICBBZGQgZ3N0LXBsdWdpbnMtZ2wKKwkgICogZG9jcy9yYW5kb20vcmVsZWFzZToKKwkgIENoYW5nZSBvbmUgb2YgdGhlIHN0ZXBzIC0gd2Ugb25seSB1cGxvYWQgY29yZSAmIGJhc2UgdG8gR25vbWUgRlRQCisKKzIwMDgtMDItMDYgMTI6MjE6MDUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdGNvbmZpZy5oLmluOiBBZGQgJ2lkJyBmb3IgZXhhbXBsZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0Y29uZmlnLmguaW46CisJICBBZGQgJ2lkJyBmb3IgZXhhbXBsZS4KKwkgICogZ3N0L2dzdHBhZC5jOgorCSAgKiBnc3QvZ3N0dXRpbHMuYzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzoKKwkgIExpbmsgdG8gc2lnbmFscy4gRG9jIGFuZCBjb21tZW50IGZpeGVzLgorCisyMDA4LTAyLTA1IDIxOjIyOjQ3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvOiBTb21lIG1pbm9yIGRvY3MgZml4ZXM6IGZpeCB0eXBvLCBtZW50aW9uIHRoYXQgR1NUX0ZMT1dfUkVTRU5EIGlzIHVudXNlZCBhbmQgdW5pbXBsZW1lbnRlZDsgZmluYWxseSwgaXQgaXMgcGx1Z2kuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkLmg6IChHU1RfUEFEX0xJTktfU1VDQ0VTU0ZVTCk6CisJICAqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmg6IChHc3RQbHVnaW5GZWF0dXJlQ2xhc3MpOgorCSAgU29tZSBtaW5vciBkb2NzIGZpeGVzOiBmaXggdHlwbywgbWVudGlvbiB0aGF0IEdTVF9GTE9XX1JFU0VORCBpcworCSAgdW51c2VkIGFuZCB1bmltcGxlbWVudGVkOyBmaW5hbGx5LCBpdCBpcyBwbHVnaW4gZmVhdHVyZXMsIG5vdAorCSAgcGx1Z2lucywgdGhhdCBoYXZlIHJhbmtzLgorCisyMDA4LTAyLTA1IDE5OjQyOjMxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmg6IENsYXJpZnkgR3N0UmFuayByYW5nZSBkb2NzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmg6CisJICBDbGFyaWZ5IEdzdFJhbmsgcmFuZ2UgZG9jcy4KKworMjAwOC0wMi0wNSAxODozNzowOCArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkgIGdzdC9nc3QuYzogQWRkIGEgc2VwYXJhdGUgZ3N0X2RlaW5pdGlhbGl6ZWQgdGhhdCBwcmV2ZW50cyBnc3RfaW5pdCgpIGZyb20gYmVpbmcgY2FsbGVkIGFmdGVyIGdzdF9kZWluaXQoKS4gIEZpeGVzICM1MC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3QuYzogQWRkIGEgc2VwYXJhdGUgZ3N0X2RlaW5pdGlhbGl6ZWQgdGhhdCBwcmV2ZW50cworCSAgZ3N0X2luaXQoKSBmcm9tIGJlaW5nIGNhbGxlZCBhZnRlciBnc3RfZGVpbml0KCkuICBGaXhlcyAjNTA5NTU5CisKKzIwMDgtMDItMDUgMTQ6MTU6MTUgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgUmV2ZXJ0IHByZXZpb3VzIGNoYW5nZXMgdG8gdGhlIGJlaGF2aW91ciBvZiBHc3RQYWRUZW1wbGF0ZXMsIGV0YyBhbmQgdGhlIHBvc3NpYmxpdHkgdG8gY2FsbCB0aGVtIGluIGNsYXNzX2luaXQgYXMgaXQgLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9nZXRfdHlwZSksIChnc3RfYmluX2Jhc2VfaW5pdCksCisJICAoZ3N0X2Jpbl9jbGFzc19pbml0KToKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2Jhc2VfY2xhc3NfaW5pdCksCisJICAoZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSk6CisJICAqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOiAoZ3N0X3BhZF90ZW1wbGF0ZV9pbml0KToKKwkgICogZ3N0L2dzdHBpcGVsaW5lLmM6IChnc3RfcGlwZWxpbmVfZ2V0X3R5cGUpLAorCSAgKGdzdF9waXBlbGluZV9iYXNlX2luaXQpLCAoZ3N0X3BpcGVsaW5lX2NsYXNzX2luaXQpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2dldF90eXBlKSwKKwkgIChnc3RfYmFzZV9zcmNfYmFzZV9pbml0KSwgKGdzdF9iYXNlX3NyY19jbGFzc19pbml0KToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6IChnc3RfY2Fwc2ZpbHRlcl9iYXNlX2luaXQpLAorCSAgKGdzdF9jYXBzZmlsdGVyX2NsYXNzX2luaXQpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6IChnc3RfZmFrZV9zaW5rX2Jhc2VfaW5pdCksCisJICAoZ3N0X2Zha2Vfc2lua19jbGFzc19pbml0KToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6IChnc3RfZmFrZV9zcmNfYmFzZV9pbml0KSwKKwkgIChnc3RfZmFrZV9zcmNfY2xhc3NfaW5pdCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6IChnc3RfZmRfc2lua19iYXNlX2luaXQpLAorCSAgKGdzdF9mZF9zaW5rX2NsYXNzX2luaXQpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6IChnc3RfZmRfc3JjX2Jhc2VfaW5pdCksCisJICAoZ3N0X2ZkX3NyY19jbGFzc19pbml0KToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOiAoZ3N0X2ZpbGVfc2lua19iYXNlX2luaXQpLAorCSAgKGdzdF9maWxlX3NpbmtfY2xhc3NfaW5pdCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiAoZ3N0X2ZpbGVfc3JjX2Jhc2VfaW5pdCksCisJICAoZ3N0X2ZpbGVfc3JjX2NsYXNzX2luaXQpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IChnc3RfaWRlbnRpdHlfYmFzZV9pbml0KSwKKwkgIChnc3RfaWRlbnRpdHlfY2xhc3NfaW5pdCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiAoZ3N0X211bHRpX3F1ZXVlX2Jhc2VfaW5pdCksCisJICAoZ3N0X211bHRpX3F1ZXVlX2NsYXNzX2luaXQpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfYmFzZV9pbml0KSwKKwkgIChnc3RfcXVldWVfY2xhc3NfaW5pdCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6IChnc3RfdGVlX2Jhc2VfaW5pdCksCisJICAoZ3N0X3RlZV9jbGFzc19pbml0KToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfYmFzZV9pbml0KSwKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfY2xhc3NfaW5pdCk6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9zdWl0ZSk6CisJICBSZXZlcnQgcHJldmlvdXMgY2hhbmdlcyB0byB0aGUgYmVoYXZpb3VyIG9mIEdzdFBhZFRlbXBsYXRlcywgZXRjCisJICBhbmQgdGhlIHBvc3NpYmxpdHkgdG8gY2FsbCB0aGVtIGluIGNsYXNzX2luaXQgYXMgaXQgYnJlYWtzIHRvbworCSAgbWFueSBlbGVtZW50cy4gUmVvcGVucyBidWcgIzQ5MTUwMS4KKwkgIFNob3VsZCBiZSBhcHBsaWVkIGFnYWluIGZvciAwLjExLCB0aHVzIGFkZGVkIGEgZmV3IEZJWE1FIDAuMTEgYXQKKwkgIHNldmVyYWwgcGxhY2VzLgorCisyMDA4LTAyLTA1IDA5OjI0OjE4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIHRvb2xzL2dzdC1sYXVuY2guYzogRHVtcCBvbmUgZ3JhcGggcGVyIHBpcGVsaW5lIHN0YXRlLWNoYW5nZSBhbmQgc3RhdGUgY2hhbmdlIG5hbWUgKGlmIEdTVF9ERUJVR19EVU1QX0RPVF9ESVIgaXMgc2V0KS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6CisJICBEdW1wIG9uZSBncmFwaCBwZXIgcGlwZWxpbmUgc3RhdGUtY2hhbmdlIGFuZCBzdGF0ZSBjaGFuZ2UgbmFtZQorCSAgKGlmIEdTVF9ERUJVR19EVU1QX0RPVF9ESVIgaXMgc2V0KS4KKworMjAwOC0wMi0wNCAxNDoxNDo0MiArMDAwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KKworCSAgQmUgc3VyZSB0aGF0IHdlIGhhdmUgYSBuZXcgY29weSBvZiB0aGUgY2FwcyBhbmQgbm90IHJlZmZlZCBjYXBzIGZyb20gYSB0ZW1wbGF0ZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgorCSAgQmUgc3VyZSB0aGF0IHdlIGhhdmUgYSBuZXcgY29weSBvZiB0aGUgY2FwcyBhbmQgbm90CisJICByZWZmZWQgY2FwcyBmcm9tIGEgdGVtcGxhdGUKKworMjAwOC0wMi0wMyAxMjowNDozNyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBEb24ndCB1c2UgYmFzZV9pbml0IHdoZXJlIG5vdCBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4gRm9yIGV4YW1wbGUgaXQncyBub3QgbmVjZXNzYXJ5IGFueW1vcmUgZm9yIGFkZGluZyBwYWQgdGVtcGxhdGVzIG8uLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2dldF90eXBlKSwgKGdzdF9iaW5fY2xhc3NfaW5pdCk6CisJICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX2dldF90eXBlKSwKKwkgIChnc3RfcGlwZWxpbmVfY2xhc3NfaW5pdCk6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZ2V0X3R5cGUpLAorCSAgKGdzdF9iYXNlX3NpbmtfY2xhc3NfaW5pdCk6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2dldF90eXBlKSwKKwkgIChnc3RfYmFzZV9zcmNfY2xhc3NfaW5pdCk6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldF90eXBlKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fY2xhc3NfaW5pdCk6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0X3BhZHNfYmFzZV9pbml0KSwKKwkgIChnc3RfY29sbGVjdF9wYWRzX2NsYXNzX2luaXQpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5jOiAoZ3N0X2RhdGFfcXVldWVfZ2V0X3R5cGUpOgorCSAgKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmM6CisJICAoZ3N0X25ldF90aW1lX3Byb3ZpZGVyX2Jhc2VfaW5pdCksCisJICAoZ3N0X25ldF90aW1lX3Byb3ZpZGVyX2NsYXNzX2luaXQpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzogKGdzdF9jYXBzZmlsdGVyX2Jhc2VfaW5pdCksCisJICAoZ3N0X2NhcHNmaWx0ZXJfY2xhc3NfaW5pdCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzogKGdzdF9mYWtlX3NpbmtfYmFzZV9pbml0KSwKKwkgIChnc3RfZmFrZV9zaW5rX2NsYXNzX2luaXQpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzogKGdzdF9mYWtlX3NyY19iYXNlX2luaXQpLAorCSAgKGdzdF9mYWtlX3NyY19jbGFzc19pbml0KToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzogKGdzdF9mZF9zaW5rX2Jhc2VfaW5pdCksCisJICAoZ3N0X2ZkX3NpbmtfY2xhc3NfaW5pdCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzogKGdzdF9mZF9zcmNfYmFzZV9pbml0KSwKKwkgIChnc3RfZmRfc3JjX2NsYXNzX2luaXQpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IChnc3RfZmlsZV9zaW5rX2Jhc2VfaW5pdCksCisJICAoZ3N0X2ZpbGVfc2lua19jbGFzc19pbml0KToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IChnc3RfZmlsZV9zcmNfYmFzZV9pbml0KSwKKwkgIChnc3RfZmlsZV9zcmNfY2xhc3NfaW5pdCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogKGdzdF9pZGVudGl0eV9iYXNlX2luaXQpLAorCSAgKGdzdF9pZGVudGl0eV9jbGFzc19pbml0KToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IChnc3RfbXVsdGlfcXVldWVfYmFzZV9pbml0KSwKKwkgIChnc3RfbXVsdGlfcXVldWVfY2xhc3NfaW5pdCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9iYXNlX2luaXQpLAorCSAgKGdzdF9xdWV1ZV9jbGFzc19pbml0KToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzogKGdzdF90ZWVfYmFzZV9pbml0KSwKKwkgIChnc3RfdGVlX2NsYXNzX2luaXQpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9iYXNlX2luaXQpLAorCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9jbGFzc19pbml0KToKKwkgIERvbid0IHVzZSBiYXNlX2luaXQgd2hlcmUgbm90IGFic29sdXRlbHkgbmVjZXNzYXJ5LiBGb3IgZXhhbXBsZSBpdCdzCisJICBub3QgbmVjZXNzYXJ5IGFueW1vcmUgZm9yIGFkZGluZyBwYWQgdGVtcGxhdGVzIG9yIHNldHRpbmcgZWxlbWVudAorCSAgZGV0YWlscy4KKwkgIExlYXZlIGVtcHR5IGJhc2VfaW5pdCBmdW5jdGlvbnMgaW4gc2V2ZXJhbCBwbGFjZXMgYXMgR1NUX0JPSUxFUlBMQVRFCisJICBzdGlsbCBkZWZpbmVzIGFuZCB1c2VzIHRoZW0uCisKKzIwMDgtMDItMDMgMTA6NDg6MDEgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgZ3N0LzogTWFrZSBpdCBwb3NzaWJsZSAoYW5kIHJlY29tbWVuZGVkKSB0byBzZXQgZWxlbWVudCBkZXRhaWxzIGFuZCBhZGQgcGFkIHRlbXBsYXRlcyBpbiB0aGUgY2xhc3NfaW5pdCBmdW5jdGlvbnMgYnkgLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2Jhc2VfY2xhc3NfaW5pdCksCisJICAoZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSk6CisJICAqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOgorCSAgTWFrZSBpdCBwb3NzaWJsZSAoYW5kIHJlY29tbWVuZGVkKSB0byBzZXQgZWxlbWVudCBkZXRhaWxzIGFuZCBhZGQKKwkgIHBhZCB0ZW1wbGF0ZXMgaW4gdGhlIGNsYXNzX2luaXQgZnVuY3Rpb25zIGJ5IGNvcHlpbmcgdGhlIGRldGFpbHMvcGFkCisJICB0ZW1wbGF0ZXMgaW4gR3N0RWxlbWVudCdzIGJhc2VfaW5pdC4KKwkgIEFsc28gbWFrZSBpdCBwb3NzaWJsZSB0byByZXBsYWNlIGV4aXN0aW5nIHBhZCB0ZW1wbGF0ZXMgYnkgYWRkaW5nCisJICBhIG5ldyBvbmUgd2l0aCB0aGUgc2FtZSBuYW1lLiBUaGlzIHdhcyBkb25lIGluIGEgaGFja2lzaCBmYXNoaW9uCisJICBpbiBzYW1lIGVsZW1lbnRzIGJlZm9yZSBhbHJlYWR5LgorCSAgRG9uJ3QgcmVmZXJlbmNlIHBhZCB0ZW1wbGF0ZXMgdGhhdCBhcmUgYWRkZWQgYSBzZWNvbmQgdGltZS4gQQorCSAgbmV3IHBhZCB0ZW1wbGF0ZSBoYXMgYSByZWZjb3VudCBvZiBvbmUgYW5kIGlzIG5vdCBmbG9hdGluZyBhbnltb3JlCisJICBhbmQgdG8gYmUgb3duZWQgYnkgdGhlIGVsZW1lbnQncyBjbGFzcy4gTWFrZSB0aGlzIG1vcmUgZXhwbGljaXQgYnkKKwkgIG1lbnRpb25pbmcgaXQgaW4gdGhlIGRvY3Mgb2YgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSgpLgorCSAgVGhlc2UgY2hhbmdlcyBhcmUgYmFja3dhcmRzIGNvbXBhdGlibGUuIEZpeGVzIGJ1ZyAjNDkxNTAxLgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZWxlbWVudC5jOgorCSAgQWRkIHVuaXQgdGVzdCBmb3Igc2V0dGluZyBlbGVtZW50IGRldGFpbHMsIGFkZGluZyBwYWQgdGVtcGxhdGVzIGFuZAorCSAgcmVwbGFjaW5nIHRoZW0gaW4gYSBzdWJjbGFzcy4KKworMjAwOC0wMi0wMiAwNjo0ODozNyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICB0b29scy9nc3QtaW5zcGVjdC5jOiBGaXggYSBmZXcgbWVtb3J5IGxlYWtzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1pbnNwZWN0LmM6IChwcmludF9pbnRlcmZhY2VzKSwKKwkgIChwcmludF9lbGVtZW50X3Byb3BlcnRpZXNfaW5mbyksIChwcmludF9wYWRfaW5mbyksCisJICAocHJpbnRfc2lnbmFsX2luZm8pLCAocHJpbnRfZWxlbWVudF9pbmZvKToKKwkgIEZpeCBhIGZldyBtZW1vcnkgbGVha3MuCisKKzIwMDgtMDItMDEgMTc6MTY6MjYgKzAwMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+CisKKwkgIEFkZCBtb3JlIGZ1bmN0aW9ucyBmb3IgdW5pdCB0ZXN0aW5nOiBnc3RfY2hlY2tfZHJvcF9idWZmZXJzLCBnc3RfY2hlY2tfY2Fwc19lcXVhbCwgZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXJfbGlzdC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6CisJICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6CisJICBBZGQgbW9yZSBmdW5jdGlvbnMgZm9yIHVuaXQgdGVzdGluZzogZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycywKKwkgIGdzdF9jaGVja19jYXBzX2VxdWFsLCBnc3RfY2hlY2tfZWxlbWVudF9wdXNoX2J1ZmZlcl9saXN0LAorCSAgZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXIKKworMjAwOC0wMi0wMSAxNjozNzoyMiArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+CisKKwkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IEFkZCBHU1RfQ0hFQ0tfVkVSU0lPTiB0byB0aGUgZG9jcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA4LTAyLTAxICBKdWxpZW4gTW91dHRlICA8anVsaWVuQGZsdWVuZG8uY29tPgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBBZGQgR1NUX0NIRUNLX1ZFUlNJT04gdG8gdGhlCisJICBkb2NzCisJICAqIGdzdC9nc3RpbmRleC5jOiAoZ3N0X2luZGV4X2NsYXNzX2luaXQpLAorCSAgKGdzdF9pbmRleF9mcmVlX3dyaXRlciksCisJICAoZ3N0X2luZGV4X2ZpbmFsaXplKSwgKGdzdF9pbmRleF9lbnRyeV9mcmVlKSwKKwkgIChnc3RfaW5kZXhfYWRkX2Fzc29jaWF0aW9uKTogRml4IG1lbW9yeSBsZWFrcy4KKwkgICogZ3N0L2dzdHZlcnNpb24uaC5pbjogQWRkIEdTVF9DSEVDS19WRVJTSU9OIG1hY3JvLgorCSAgKiBwbHVnaW5zL2luZGV4ZXJzL2dzdG1lbWluZGV4LmM6IChnc3RfbWVtX2luZGV4X2NsYXNzX2luaXQpLAorCSAgKGdzdF9tZW1faW5kZXhfZnJlZV9mb3JtYXQpLCAoZ3N0X21lbV9pbmRleF9mcmVlX2lkKSwKKwkgIChnc3RfbWVtX2luZGV4X2ZpbmFsaXplKTogRml4IG1lbW9yeSBsZWFrcy4KKwkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oOiBVcGRhdGVkIHRvIENWUyBIRUFELgorCisyMDA4LTAyLTAxIDEyOjI1OjE3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvUkVBRE1FOiBTb21lIG1vcmUgZGV0YWlscyBhYm91dCBob3cgdGhlIHBsdWdpbiBkb2NzIHdvcmtzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvUkVBRE1FOgorCSAgU29tZSBtb3JlIGRldGFpbHMgYWJvdXQgaG93IHRoZSBwbHVnaW4gZG9jcyB3b3Jrcy4KKwkgICogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKKwkgIFdoaXRlc3BhY2UgY2xlYW51cC4KKworMjAwOC0wMi0wMSAxMjoxMDoxNyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvcGFyc2UvOiBBZGQgZGVsYXllZCBzZXQtcHJvcGVydHkuIFRoaXMgYWxsb3dzIHRvIHNldCBwcm9wZXJ0aWVzIG9uIGR5bmFtaWNhbHkgY3JlYXRlZCBvYmplY3RzIChwYWRzIGluIHZpZGVvbXhlcikuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L3BhcnNlL2dyYW1tYXIudGFiLnByZS5jOgorCSAgKiBnc3QvcGFyc2UvZ3JhbW1hci50YWIucHJlLmg6CisJICAqIGdzdC9wYXJzZS9ncmFtbWFyLnk6CisJICAqIGdzdC9wYXJzZS9sZXguX2dzdF9wYXJzZV95eS5wcmUuYzoKKwkgIEFkZCBkZWxheWVkIHNldC1wcm9wZXJ0eS4gVGhpcyBhbGxvd3MgdG8gc2V0IHByb3BlcnRpZXMgb24gZHluYW1pY2FseQorCSAgY3JlYXRlZCBvYmplY3RzIChwYWRzIGluIHZpZGVvbXhlcikuCisKKzIwMDgtMDItMDEgMTE6Mjc6MzIgKzAwMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+CisKKwkgIGdzdC9nc3R1dGlscy5jOiBDaGVjayBpZiBjYXBzIGFyZSBub3QgTlVMTCAoZml4IGJ1ZyAjNTEwMTk0KQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R1dGlscy5jOgorCSAgQ2hlY2sgaWYgY2FwcyBhcmUgbm90IE5VTEwgKGZpeCBidWcgIzUxMDE5NCkKKworMjAwOC0wMi0wMSAxMDoyNzoxMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBBZGQgZml4bWUgcmVnYXJkaW5nIEVPUyBpbiBwdWxsIG1vZGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19sb29wKSwKKwkgIChnc3RfYmFzZV9zaW5rX2dldF9wb3NpdGlvbl9wYXVzZWQpOgorCSAgQWRkIGZpeG1lIHJlZ2FyZGluZyBFT1MgaW4gcHVsbCBtb2RlLgorCSAgRml4IHBvc2l0aW9uIHJlcG9ydGluZyBpbiBQQVVTRUQgZm9yIG5lZ2F0aXZlIHJhdGVzLgorCisyMDA4LTAyLTAxIDEwOjIzOjU2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0bWluaW9iamVjdC5jOiBXaGVuIHJlcGxhY2luZyBhIG1pbmlvYmplY3QsIGRvIGEgcXVpY2sgZXF1YWxpdHkgY2hlY2sgZmlyc3Qgc28gdGhhdCB3ZSBjYW4gYXZvaWQgYSByZWYvdW5yZWYgcGFpci4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5jOiAoZ3N0X21pbmlfb2JqZWN0X3JlcGxhY2UpOgorCSAgV2hlbiByZXBsYWNpbmcgYSBtaW5pb2JqZWN0LCBkbyBhIHF1aWNrIGVxdWFsaXR5IGNoZWNrIGZpcnN0IHNvIHRoYXQgd2UKKwkgIGNhbiBhdm9pZCBhIHJlZi91bnJlZiBwYWlyLgorCisyMDA4LTAyLTAxIDEwOjE3OjQwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL2Rlc2lnbi9wYXJ0LXN5bmNocm9uaXNhdGlvbi50eHQ6IFVwZGF0ZSBzb21lIGRvY3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1zeW5jaHJvbmlzYXRpb24udHh0OgorCSAgVXBkYXRlIHNvbWUgZG9jcy4KKwkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgorCSAgKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMtZG9jcy5zZ21sOgorCSAgKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMtc2VjdGlvbnMudHh0OgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkgIEFkZCBtdWx0aXF1ZXVlIHRvIHRoZSBkb2NzLgorCisyMDA4LTAxLTMwIDE0OjM4OjQzICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgY29uZmlndXJlLmFjOiBCYWNrIHRvIENWUworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgIEJhY2sgdG8gQ1ZTCisKKz09PSByZWxlYXNlIDAuMTAuMTcgPT09CisKKzIwMDgtMDEtMzAgMTQ6MDU6NDUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJKiBDaGFuZ2VMb2c6CisJKiBORVdTOgorCSogUkVMRUFTRToKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6CisJKiBnc3RyZWFtZXIuZG9hcDoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkgIFJlbGVhc2UgMC4xMC4xNworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBSZWxlYXNlIDAuMTAuMTcKKworMjAwOC0wMS0zMCAxMzoxMzo0OSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkqIENoYW5nZUxvZzoKKwkgIGFkZCBDaGFuZ2VMb2cgZW50cnkgZm9yIHByZXZpb3VzIGNvbW1pdAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGQgQ2hhbmdlTG9nIGVudHJ5IGZvciBwcmV2aW91cyBjb21taXQKKworMjAwOC0wMS0zMCAxMzoxMjoyNCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGdzdC9nc3R1dGlscy5jOiBDaGVjayBpZiBjYXBzIGFyZSBub3QgTlVMTCAoZml4IGJ1ZyAjNTEwMTk0KQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R1dGlscy5jOgorCSAgQ2hlY2sgaWYgY2FwcyBhcmUgbm90IE5VTEwgKGZpeCBidWcgIzUxMDE5NCkKKworMjAwOC0wMS0zMCAxMjo1NTo0MiArMDAwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHV0aWxzLmM6IENoZWNrIGlmIGNhcHMgYXJlIG5vdCBOVUxMIChmaXggYnVnICM1MTAxOTQpCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHV0aWxzLmM6CisJICBDaGVjayBpZiBjYXBzIGFyZSBub3QgTlVMTCAoZml4IGJ1ZyAjNTEwMTk0KQorCisyMDA4LTAxLTMwIDEyOjQ0OjEzICswMDAwICBDeWd3aW4gUG9ydHMgbWFpbnRhaW5lciA8eXNlbGtvd2l0ekB1c2Vycy5zb3VyY2Vmb3JnZT4KKworCSAgZ3N0L2dzdHV0aWxzLmM6IEZpeCBjb21waWxhdGlvbiBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSBwb3NpeCB0aW1lcnMgYnV0IG5vIG1vbm90b25pYyBjbG9jay4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIEZpeCBjb21waWxhdGlvbiBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSBwb3NpeCB0aW1lcnMgYnV0IG5vCisJICBtb25vdG9uaWMgY2xvY2suCisJICBGaXhlczogIzUxMjcxNQorCSAgUGF0Y2ggQnk6IEN5Z3dpbiBQb3J0cyBtYWludGFpbmVyIDx5c2Vsa293aXR6IGF0IHVzZXJzIGRvdCBzb3VyY2Vmb3JnZQorCSAgZG90IG5ldD4KKworMjAwOC0wMS0zMCAxMjozOTo1MSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIHRvb2xzL2dzdC1pbnNwZWN0LmM6IFJldmVydCBwcmV2aW91cyBjb21taXQgaW4gcHJlcGFyYXRpb24gZm9yIGFuIGltcHJvbXB0dSAwLjEwLjE3IHJlbGVhc2UKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOgorCSAgUmV2ZXJ0IHByZXZpb3VzIGNvbW1pdCBpbiBwcmVwYXJhdGlvbiBmb3IgYW4gaW1wcm9tcHR1IDAuMTAuMTcgcmVsZWFzZQorCisyMDA4LTAxLTI5IDA5OjQzOjExICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIHRvb2xzL2dzdC1pbnNwZWN0LmM6IEZpeCBhIGZldyBtZW1vcnkgbGVha3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKHByaW50X2ludGVyZmFjZXMpLAorCSAgKHByaW50X2VsZW1lbnRfcHJvcGVydGllc19pbmZvKSwgKHByaW50X3BhZF9pbmZvKSwKKwkgIChwcmludF9zaWduYWxfaW5mbyksIChwcmludF9lbGVtZW50X2luZm8pOgorCSAgRml4IGEgZmV3IG1lbW9yeSBsZWFrcy4KKworMjAwOC0wMS0yOCAyMzozMDo0NSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGNvbmZpZ3VyZS5hYzogQmFjayB0byBDVlMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICBCYWNrIHRvIENWUworCis9PT0gcmVsZWFzZSAwLjEwLjE2ID09PQorCisyMDA4LTAxLTI4IDIzOjI3OjEzICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSogQ2hhbmdlTG9nOgorCSogTkVXUzoKKwkqIFJFTEVBU0U6CisJKiBjb25maWd1cmUuYWM6CisJKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuYXJnczoKKwkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5oaWVyYXJjaHk6CisJKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuaW50ZXJmYWNlczoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6CisJKiBnc3RyZWFtZXIuZG9hcDoKKwkqIHBvL0xJTkdVQVM6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICBSZWxlYXNlIDAuMTAuMTYKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUmVsZWFzZSAwLjEwLjE2CisKKzIwMDgtMDEtMjggMjE6MjA6MTYgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmUucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kYS5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9lcy5wbzoKKwkqIHBvL2ZpLnBvOgorCSogcG8vZnIucG86CisJKiBwby9odS5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3BsLnBvOgorCSogcG8vcnUucG86CisJKiBwby9ydy5wbzoKKwkqIHBvL3NrLnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkgIFVwZGF0ZSAucG8gZmlsZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgVXBkYXRlIC5wbyBmaWxlcworCisyMDA4LTAxLTI0IDIzOjI4OjU0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBjb25maWd1cmUuYWM6IFVzZSBBQ19UUllfQ09NUElMRSBpbnN0ZWFkIG9mIEFDX1RSWV9SVU4gdG8gY2hlY2sgZm9yIF9QT1NJWF9USU1FUiwgX1BPU0lYX01PTk9UT05JQ19DTE9DSywgZXRjLiBNYWtlcyAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICBVc2UgQUNfVFJZX0NPTVBJTEUgaW5zdGVhZCBvZiBBQ19UUllfUlVOIHRvIGNoZWNrIGZvcgorCSAgX1BPU0lYX1RJTUVSLCBfUE9TSVhfTU9OT1RPTklDX0NMT0NLLCBldGMuIE1ha2VzIGNvbmZpZ3VyZQorCSAgbm90IGZhaWwgd2hlbiB0cnlpbmcgdG8gY3Jvc3Njb21waWxlIG9uIE9wZW5FbWJlZGRlZCAoIzUxMTc1MCkuCisKKzIwMDgtMDEtMjAgMTc6MDg6NTQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgZG9jcy9tYW51YWxzLm1hazogVXNlICQoTUFLRSkgaW5zdGVhZCBvZiBtYWtlIHRvIGZpeCB0aGUgYnVpbGQgaWYgR05VIG1ha2UgaXMgY2FsbGVkIGRpZmZlcmVudC4gRml4ZXMgYnVnICM1MTA3NDcuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9tYW51YWxzLm1hazoKKwkgIFVzZSAkKE1BS0UpIGluc3RlYWQgb2YgbWFrZSB0byBmaXggdGhlIGJ1aWxkIGlmIEdOVSBtYWtlIGlzCisJICBjYWxsZWQgZGlmZmVyZW50LiBGaXhlcyBidWcgIzUxMDc0Ny4KKworMjAwOC0wMS0yMCAxNTowNDozMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdHBsdWdpbi5jOiBGaXggb2xkLXN0eWxlIHN0YXRpYyBwbHVnaW5zIHZpYSBHU1RfUExVR0lOX0RFRklORV9TVEFUSUMgYWdhaW4sIHdoaWNoIEkgYnJva2UgdHdvIGNvbW1pdHMgYWdvIHdoZW4gLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBsdWdpbi5jOiAoX2dzdF9wbHVnaW5faW5pdGlhbGl6ZSk6CisJICBGaXggb2xkLXN0eWxlIHN0YXRpYyBwbHVnaW5zIHZpYSBHU1RfUExVR0lOX0RFRklORV9TVEFUSUMKKwkgIGFnYWluLCB3aGljaCBJIGJyb2tlIHR3byBjb21taXRzIGFnbyB3aGVuIGNoYW5naW5nIHRoZSBBUEkKKwkgIG9mIGdzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljKCk6IHRoZSBnX2xpc3RfZm9yZWFjaCgpIGluCisJICBfZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWMgc3RpbGwgYXNzdW1lZCB0aGUgb2xkIGZ1bmN0aW9uCisJICBzaWduYXR1cmUgYW5kIHdvdWxkIHRoZXJlZm9yZSBmYWlsIChyZS1maXhlcyAjNTEwMTg3KS4KKwkgICogZ3N0L2dzdHBsdWdpbi5jOiAoX251bV9zdGF0aWNfcGx1Z2lucyksIChfc3RhdGljX3BsdWdpbnMpLAorCSAgKF9nc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpYyksIChnc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpYyk6CisJICBSZXZlcnQgdGhlICh0ZWNobmljYWxseSBjb3JyZWN0KSBjaGFuZ2UgdG8gY2FsbCBnX3RocmVhZF9pbml0KCkgZnJvbQorCSAgdGhlIHByZS1tYWluKCkgY29uc3RydWN0b3IuIFRoaXMgd2lsbCBicmVhayBwcm9ncmFtcyB3aGljaCBjYWxsCisJICBnX3RocmVhZF9pbml0KCkgd2l0aG91dCBhbiBpZiAoIWdfdGhyZWFkX3N1cHBvcnRlZCgpKSBndWFyZCBpbiB0aGVpcgorCSAgbWFpbiBmdW5jdGlvbi4gV2UgY291bGQganVzdCBibGFtZSBpdCBvbiBHTGliIG9yIHRoZSBhcHBsaWNhdGlvbiwgYnV0CisJICBpdCdzIHByb2JhYmx5IGJlc3QgdG8ganVzdCBhdm9pZCB0aGlzIGFsdG9nZXRoZXIgYW5kIHNpbXBseSBub3QgdXNlCisJICBhbnkgR0xpYiBmdW5jdGlvbnMgaGVyZSBhbmQgdXNlIHBsYWluIG9sZCBtYWxsb2MoKSB3aXRoIGEgc2ltcGxlCisJICBhcnJheSB0byBzdG9yZSB0aGUgcGx1Z2lucyB0byByZWdpc3RlciBsYXRlciB3aGVuIGdzdF9pbml0KCkgaXMKKwkgIGZpbmFsbHkgY2FsbGVkIChyZS1maXhlcyAjNTEwMTg3KS4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHBsdWdpbi5jOiAoR1NUX0dOVUNfQ09OU1RSVUNUT1JfREVGSU5FRCksCisJICAoR1NUX0dOVUNfQ09OU1RSVUNUT1JfREVGSU5FRCksIChwbHVnaW5faW5pdF9jb3VudGVyKSwKKwkgIChwbHVnaW4xX2luaXQpLCAocGx1Z2luMl9pbml0KSwgKHBsdWdpbjNfaW5pdCksIChHU1RfU1RBUlRfVEVTVCksCisJICAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3BsdWdpbl9zdWl0ZSk6CisJICBEdW1iIHVuaXQgdGVzdCB0byBtYWtlIHN1cmUgdGhlIG9sZCBHU1RfUExVR0lOX0RFRklORV9TVEFUSUMgc3RpbGwKKwkgIHdvcmtzLgorCisyMDA4LTAxLTE3IDIyOjIyOjU4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0cGx1Z2luLmg6IFJlbW92ZSBkZXByZWNhdGlvbiBndWFyZHMgYXJvdW5kIEdTVF9QTFVHSU5fREVGSU5FX1NUQVRJQy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGx1Z2luLmg6IChHU1RfUExVR0lOX0RFRklORV9TVEFUSUMpOgorCSAgUmVtb3ZlIGRlcHJlY2F0aW9uIGd1YXJkcyBhcm91bmQgR1NUX1BMVUdJTl9ERUZJTkVfU1RBVElDLgorCSAgVGhpcyBtYWtlcyBndGstZG9jIGNvbXBsYWluLCBidXQgcmVzdWx0cyBpbiBzbGlnaHRseSBiZXR0ZXIKKwkgIGNvbXBpbGVyIGVycm9ycy4gVGhlIG9sZCBfZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWMoKSBpcworCSAgc3RpbGwgZ3VhcmRlZCwgc28gdGhlcmUnbGwgYmUgYSBjb21waWxlciB3YXJuaW5nIGFib3V0IHRoYXQKKwkgIGluc3RlYWQuIEZpeGVzICM1MTAxODcgdG9vLgorCisyMDA4LTAxLTE3IDIyOjE3OjE1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvOiBDaGFuZ2UgQVBJIG9mIGdzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljKCkgdG8gbm90IHRha2UgYSBHc3RQbHVnaW5EZXNjLCBidXQgcmF0aGVyIGp1c3QgdGFrZSBhbGwgdGhlIGFyZ3VtZW50cyAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0LmM6IChpbml0X3Bvc3QpOgorCSAgKiBnc3QvZ3N0cGx1Z2luLmM6IChfZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWMpLAorCSAgKGdzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljKSwgKF9nc3RfcGx1Z2luX2luaXRpYWxpemUpOgorCSAgKiBnc3QvZ3N0cGx1Z2luLmg6IChHc3RQbHVnaW5GaWx0ZXIpOgorCSAgQ2hhbmdlIEFQSSBvZiBnc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpYygpIHRvIG5vdCB0YWtlCisJICBhIEdzdFBsdWdpbkRlc2MsIGJ1dCByYXRoZXIganVzdCB0YWtlIGFsbCB0aGUgYXJndW1lbnRzCisJICBpbiBhIEdzdFBsdWdpbkRlc2MgZGlyZWN0bHkuIFRoaXMgaXMgbW9yZSBpbnR1aXRpdmUgYW5kCisJICBhdm9pZHMgY2VydGFpbiBtaXN0YWtlcyB3aGVuIHBvcnRpbmcgY29kZSBmcm9tCisJICBHU1RfUExVR0lOX0RFRklORV9TVEFUSUMgdG8gZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWMoKS4KKwkgIEZpeGVzICM1MTAxODcuCisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RwbHVnaW4uYzoKKwkgIEZpeCB1cCBmb3IgY2hhbmdlZCBBUEkuCisKKzIwMDgtMDEtMTcgMTg6NTA6MzEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBkb2NzL2ZhcS9sZWdhbC54bWw6IFVwZGF0ZSBGQVEsIFRvdGVtIGFjdHVhbGx5IGhhcyBhbiBleGNlcHRpb24gdGhlc2UgZGF5cy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2ZhcS9sZWdhbC54bWw6CisJICBVcGRhdGUgRkFRLCBUb3RlbSBhY3R1YWxseSBoYXMgYW4gZXhjZXB0aW9uIHRoZXNlIGRheXMuCisKKzIwMDgtMDEtMTQgMjI6MjA6NDQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjogQWRkIG5ldyBBUEkgZGVjbGFyYXRpb25zCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBBZGQgbmV3IEFQSSBkZWNsYXJhdGlvbnMKKworMjAwOC0wMS0xNCAxMzoxODozNyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0bWluaW9iamVjdC5jOiBTcGVsbGluZyBmaXhlcyBmb3IgdGhlIEFQSSBkb2NzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RtaW5pb2JqZWN0LmM6CisJICBTcGVsbGluZyBmaXhlcyBmb3IgdGhlIEFQSSBkb2NzLgorCisyMDA4LTAxLTE0IDExOjQ3OjMyICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSogQ2hhbmdlTG9nOgorCSAgQWRkIEFQSSBrZXl3b3JkIGZvciBnc3RfdXRpbF9nZXRfdGltZXN0YW1wLCBhbmQgcmVtb3ZlIHRoZSB0YWcgZm9yIEdTVF9HRVRfVElNRVNUTUFQIHdoaWNoIGRpZG4ndCBzdXJ2aXZlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBBZGQgQVBJIGtleXdvcmQgZm9yIGdzdF91dGlsX2dldF90aW1lc3RhbXAsIGFuZCByZW1vdmUgdGhlIHRhZyBmb3IgR1NUX0dFVF9USU1FU1RNQVAgd2hpY2ggZGlkbid0IHN1cnZpdmUuCisKKzIwMDgtMDEtMTQgMTE6NDA6NTUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IEZpeCBsb25nIHByb3BlcnR5IGRlc2NyaXB0aW9uIGZvciBRb1MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICBGaXggbG9uZyBwcm9wZXJ0eSBkZXNjcmlwdGlvbiBmb3IgUW9TLgorCisyMDA4LTAxLTEyIDIwOjIyOjMwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZ3N0L2dzdC5jOiBfZ3N0X3RyYWNlX29uIGlzIGFscmVhZHkgcHJvdmlkZWQgYnkgZ3N0dHJhY2UuaCwgbm8gbmVlZCB0byBkZWNsYXJlIGl0IG91cnNlbHZlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0LmM6CisJICBfZ3N0X3RyYWNlX29uIGlzIGFscmVhZHkgcHJvdmlkZWQgYnkgZ3N0dHJhY2UuaCwgbm8gbmVlZCB0byBkZWNsYXJlCisJICBpdCBvdXJzZWx2ZXMuCisJICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJICBBZGQgJ2J1ZmZlcnMnLCAnY2hlY2tfY29uZCcgYW5kICdjaGVja19tdXRleCcgZnJvbSBsaWJnc3RjaGVjaworCSAgYW5kIHJlbW92ZSBzdHJhbmdlIHRjYXNlX2FkZF90ZXN0IHdoaWNoIGlzIG91dHB1dHRpbmcgYSB3YXJuaW5nLgorCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgorCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgorCSAgUHJvcGVybHkgZGVjbGFyZSAnYnVmZmVycycsICdjaGVja19jb25kJywgJ2NoZWNrX211dGV4JyBleHRlcm4KKwkgIGFuZCBkZWZpbmUgdGhlbSBpbiBnc3RjaGVjay5jIGluc3RlYWQgb2YgaGF2aW5nIGV2ZXJ5IC5jIGZpbGUgd2hjaWgKKwkgIGluY2x1ZGVzIGdzdGNoZWNrLmggYmUgZGVmaW5pbmcgaXRzIG93biBjb3B5IGFuZCByZWx5aW5nIG9uIHN5bWJvbAorCSAgaW50ZXJwb3NpbmcgdG8gbWFycnkgdGhlbSBhbGwsIHdoaWNoIGRvZXNuJ3Qgd29yayBvbiBTb2xhcmlzLgorCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pZGVudGl0eS5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgRG9uJ3QgZGVmaW5lICdidWZmZXJzJyBsb2NhbGx5LCBpdCBjb21lcyBmcm9tIGxpYmdzdGNoZWNrLgorCSAgKiB0ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmM6IChzZW5kX2J1ZmZlcik6CisJICBGaXggdHlwZSBvZiB2YXJpYWJsZSAoR3N0Rmxvd1JldHVybiwgbm90IEdzdFN0YXRlQ2hhbmdlUmV0dXJuKQorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RzeXN0ZW1jbG9jay5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBBZGQgYSBidW5jaCBvZiBjYXN0cyB0byBtYWtlIHZhcmlvdXMgY29uc3RhbnRzIGZpdCB0aGUgdHlwZXMKKwkgIHRoZXkncmUgYmVpbmcgYXNzaWduZWQgdG8uCisKKzIwMDgtMDEtMTAgMjE6MDY6NTggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdGNoaWxkcHJveHkuYzogSW1wcm92ZSBkb2NzIGFuZCBhZGQgc29tZSBpZGVhcyBmb3IgbWFraW5nIHRoaXMgbW9yZSBnZW5lcmFsLXB1cnBvc2UuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGNoaWxkcHJveHkuYzoKKwkgIEltcHJvdmUgZG9jcyBhbmQgYWRkIHNvbWUgaWRlYXMgZm9yIG1ha2luZyB0aGlzIG1vcmUgZ2VuZXJhbC1wdXJwb3NlLgorCisyMDA4LTAxLTEwIDE1OjU1OjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0X3ByaXZhdGUuaDogQWRkIEdTVF9DQVRfVFlQRVMsIGZvciBjb25zaXN0ZW5jeSwgYW5kIHNvIHRoYXQgdGhlIG90aGVyIGRlYnVnIGNhdGVnb3JpZXMgZG9uJ3QgbWFrZSBmdW4gb2YgaXQuIFMuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0X3ByaXZhdGUuaDogKEdTVF9DQVRfVFlQRVMpOgorCSAgQWRkIEdTVF9DQVRfVFlQRVMsIGZvciBjb25zaXN0ZW5jeSwgYW5kIHNvIHRoYXQgdGhlIG90aGVyCisJICBkZWJ1ZyBjYXRlZ29yaWVzIGRvbid0IG1ha2UgZnVuIG9mIGl0LiBTcG90dGVkIGJ5IFNhdXIgb24gSVJDLgorCisyMDA4LTAxLTEwIDEzOjAzOjM1ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIGdzdC9wYXJzZS9NYWtlZmlsZS5hbTogTW92ZSB0eXBlcy5oIGZyb20gRVhUUkFfRElTVCB0byBub2luc3RfSEVBREVSUy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvcGFyc2UvTWFrZWZpbGUuYW06CisJICBNb3ZlIHR5cGVzLmggZnJvbSBFWFRSQV9ESVNUIHRvIG5vaW5zdF9IRUFERVJTLgorCisyMDA4LTAxLTEwIDEyOjE0OjA0ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIGF1dG9nZW4uc2g6IEFkZCAtV25vLXBvcnRhYmlsaXR5IHRvIHRoZSBhdXRvbWFrZSBwYXJhbWV0ZXJzIHRvIHN0b3Agd2FybmluZ3MgYWJvdXQgR05VIG1ha2UgZXh0ZW5zaW9ucyBiZWluZyB1c2VkLiBXZS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGF1dG9nZW4uc2g6CisJICBBZGQgLVduby1wb3J0YWJpbGl0eSB0byB0aGUgYXV0b21ha2UgcGFyYW1ldGVycyB0byBzdG9wIHdhcm5pbmdzCisJICBhYm91dCBHTlUgbWFrZSBleHRlbnNpb25zIGJlaW5nIHVzZWQuIFdlIHJlcXVpcmUgR05VIG1ha2UgaW4gYWxtb3N0CisJICBldmVyeSBNYWtlZmlsZSBhbnl3YXkuCisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgIFVzZSBBTV9QUk9HX0NDX0NfTyBhcyBhIGNvbXBpbGVyIHRoYXQgYWNjZXB0cyBib3RoIC1jIGFuZCAtbworCSAgYXQgdGhlIHNhbWUgdGltZSBpcyByZXF1aXJlZCBmb3IgcGVyIHRhcmdldCBmbGFncy4KKworMjAwOC0wMS0wOSAxODoyMzozOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgQVBJOiBhZGQgZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWMoKSBhbmQgZGVwcmVjYXRlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdC5jOiAoaW5pdF9wb3N0KToKKwkgICogZ3N0L2dzdHBsdWdpbi5jOiAoX2dzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljKSwKKwkgIChnc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpYyksIChfZ3N0X3BsdWdpbl9pbml0aWFsaXplKSwKKwkgIChnc3RfcGx1Z2luX3JlZ2lzdGVyX2Z1bmMpOgorCSAgKiBnc3QvZ3N0cGx1Z2luLmg6IChHU1RfUExVR0lOX0RFRklORV9TVEFUSUMpOgorCSAgQVBJOiBhZGQgZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWMoKSBhbmQgZGVwcmVjYXRlCisJICBHU1RfUExVR0lOX0RFRklORV9TVEFUSUMsIHNpbmNlIGl0J3Mgbm90IHBvcnRhYmxlCisJICAoIzQ5ODkyNCkuCisJICBBbHNvLCBpbiBfZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWMoKSwgbWFrZSBzdXJlIHRvIGNhbGwKKwkgIGdfdGhyZWFkX2luaXQoKSBiZWZvcmUgY2FsbGluZyBHTGliIGZ1bmN0aW9ucyBzdWNoIGFzCisJICBnX2xpc3RfYXBwZW5kKCkgaWYgd2UncmUgbm90IGluaXRpYWxpc2VkIHlldCwgc2luY2UgdGhhdAorCSAgbWF5IGxlYWQgdG8gcmFuZG9tIGNyYXNoZXMgd2l0aCBvbGRlciBHU2xpY2UvR0xpYiB2ZXJzaW9ucy4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHBsdWdpbi5jOgorCSAgQWRhcHQgdW5pdCB0ZXN0IHRvIGFib3ZlIGNoYW5nZXMuCisKKzIwMDgtMDEtMDkgMTY6MzY6MzQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC86IFlldCBhbm90aGVyIGdyYXR1aXRvdXMgR1N0cmluZyBtaWNyby1vcHRpbWlzYXRpb246IGFkZCBhIChwcml2YXRlKSBmdW5jdGlvbiB0aGF0IHNlcmlhbGlzZXMgYSBzdHJ1Y3R1cmUgYXBwZW5kaS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RfcHJpdmF0ZS5oOiAoU1RSVUNUVVJFX0VTVElNQVRFRF9TVFJJTkdfTEVOKToKKwkgICogZ3N0L2dzdGNhcHMuYzogKGdzdF9jYXBzX3RvX3N0cmluZyk6CisJICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzogKEdTVF9BU0NJSV9JU19TVFJJTkcpLAorCSAgKHByaXZfZ3N0X3N0cnVjdHVyZV9hcHBlbmRfdG9fZ3N0cmluZyksIChnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyk6CisJICBZZXQgYW5vdGhlciBncmF0dWl0b3VzIEdTdHJpbmcgbWljcm8tb3B0aW1pc2F0aW9uOiBhZGQgYSAocHJpdmF0ZSkKKwkgIGZ1bmN0aW9uIHRoYXQgc2VyaWFsaXNlcyBhIHN0cnVjdHVyZSBhcHBlbmRpbmcgdG8gYW4gZXhpc3RpbmcKKwkgIEdTdHJpbmcsIHNvIHRoYXQgd2hlbiB3ZSBzZXJpYWxpc2UgY2FwcyB3ZSBkb24ndCBuZWVkIHRvIGFsbG9jK2ZyZWUKKwkgIGEgdGhyb3dhd2F5IEdTdHJpbmcgZm9yIGVhY2ggc3RydWN0dXJlIChlYWNoIG9mIHdoaWNoIGFsc28gZW50YWlsaW5nCisJICBtdWx0aXBsZSByZWFsbG9jcyBvbiB0aGUgd2F5KTsgYWxzbyB1c2UgZ19zdHJpbmdfc2l6ZWRfbmV3KCkgaW4KKwkgIHZhcmlvdXMgcGxhY2VzIHdpdGggYW4gYXBwcm94aW1hdGUgc3RyaW5nIGxlbmd0aCB0byBhdm9pZCByZWFsbG9jcworCSAgd2l0aGluIEdTdHJpbmcuIFNlZSAjNTAwMTQzLgorCisyMDA4LTAxLTA5IDE1OjA1OjIxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0c3RydWN0dXJlLmM6IEFsd2F5cyBjaGVjayBVVEYtOCBjb25mb3JtYW5jZSBvZiBzdHJ1Y3R1cmUgc3RyaW5ncyBhbmQgbm90IG9ubHkgaWYgdGhlIGRlYnVnZ2luZyBzeXN0ZW0gaXMgZW5hYmwuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6IChnc3Rfc3RydWN0dXJlX2lkX3NldF92YWx1ZSk6CisJICBBbHdheXMgY2hlY2sgVVRGLTggY29uZm9ybWFuY2Ugb2Ygc3RydWN0dXJlIHN0cmluZ3MgYW5kIG5vdCBvbmx5CisJICBpZiB0aGUgZGVidWdnaW5nIHN5c3RlbSBpcyBlbmFibGVkOyByZWFzb25pbmc6IHRoZSBiZWhhdmlvdXIgb2YKKwkgIHRoZSBhY3R1YWwgY29kZSBzaG91bGRuJ3QgcmVhbGx5IGNoYW5nZSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUKKwkgIGRlYnVnZ2luZyBzeXN0ZW0gaXMgZW5hYmxlZCBvciBub3QgKCM1MDgyOTEpLgorCisyMDA4LTAxLTA5IDEzOjQ4OjAzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIE1ha2VmaWxlLmFtOiBSZW1vdmUgb2xkIGNvdmVyYWdlIHRhcmdldCBpbiBmYXZvdXIgb2YgIm1ha2UgbGNvdiIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogTWFrZWZpbGUuYW06CisJICBSZW1vdmUgb2xkIGNvdmVyYWdlIHRhcmdldCBpbiBmYXZvdXIgb2YgIm1ha2UgbGNvdiIuCisKKzIwMDgtMDEtMDkgMTI6MjU6MTcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBUaGUgc3RhcnQgc2VnbWVudCBmb3IgcmV2ZXJzZSBwbGF5YmFjayBnb2VzIGZyb20gc3RhcnQgdG8gbGFzdF9zdG9wLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX3BlcmZvcm1fc2VlayksCisJICAoZ3N0X2Jhc2Vfc3JjX2xvb3ApOgorCSAgVGhlIHN0YXJ0IHNlZ21lbnQgZm9yIHJldmVyc2UgcGxheWJhY2sgZ29lcyBmcm9tIHN0YXJ0IHRvIGxhc3Rfc3RvcC4KKworMjAwOC0wMS0wOSAxMjoyMjoyMiArMDAwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+CisKKwkgIGdzdC9nc3RjbG9jay5oOiBDYXN0IHRoZSByZXN1bHRzIGZyb20gdGhlIHRpbWV2YWwvc3BlY190b190aW1lIG1hY3JvcyB0byB3aGF0IHRoZSBkb2NzIHNheSBpdCBjYXN0cyB0bywgYSBHc3RDbG9ja1RpbS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2ogYXhpcyBjb20+CisJICAqIGdzdC9nc3RjbG9jay5oOgorCSAgQ2FzdCB0aGUgcmVzdWx0cyBmcm9tIHRoZSB0aW1ldmFsL3NwZWNfdG9fdGltZSBtYWNyb3MgdG8gd2hhdCB0aGUKKwkgIGRvY3Mgc2F5IGl0IGNhc3RzIHRvLCBhIEdzdENsb2NrVGltZS4gZml4ZXMgIzUwODE3NS4KKworMjAwOC0wMS0wOSAxMjoxOTozMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJ1ZmZlci5jOiBVcGRhdGUgc29tZSBjb21tZW50cy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YnVmZmVyLmM6CisJICBVcGRhdGUgc29tZSBjb21tZW50cy4KKwkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKHByaW50X2VsZW1lbnRfcHJvcGVydGllc19pbmZvKToKKwkgIEltcHJvdmUgcHJpbnRpbmcgb2YgZmxhZ3MuCisKKzIwMDgtMDEtMDggMjE6MTM6NTggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBQcmludCBlbGVtZW50IG5hbWUgd2l0aCBnX3dhcm5pbmcoKSBpZiB0aGVyZSdzIGEgcHJvYmxlbSB3aXRoIHRoZSB1bml0IHNpemUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3RyYW5zZm9ybV9zaXplKToKKwkgIFByaW50IGVsZW1lbnQgbmFtZSB3aXRoIGdfd2FybmluZygpIGlmIHRoZXJlJ3MgYSBwcm9ibGVtCisJICB3aXRoIHRoZSB1bml0IHNpemUuCisKKzIwMDgtMDEtMDggMDI6MDc6MzggKzAwMDAgIERhbWllbiBMZXNwaWF1IDxkYW1pZW4ubGVzcGlhdUBnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0LzogRml4IGVtcHR5IHByb3RvdHlwZXMuICBGaXhlcyBidWcgIzUwNzk1Ny4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IERhbWllbiBMZXNwaWF1IDxkYW1pZW4ubGVzcGlhdUBnbWFpbC5jb20+CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5oOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xzb3VyY2UuaDoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5oOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuaDoKKwkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5oOgorCSAgRml4IGVtcHR5IHByb3RvdHlwZXMuICBGaXhlcyBidWcgIzUwNzk1Ny4KKworMjAwOC0wMS0wOCAwMjowMTozNCArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkgIGRvY3MvZmFxL2RlcGVuZGVuY2llcy54bWw6IEZpeCB0eXBvLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZmFxL2RlcGVuZGVuY2llcy54bWw6IEZpeCB0eXBvLgorCisyMDA4LTAxLTA3IDExOjIzOjAwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogRG9uJ3QgdXBkYXRlIHRoZSBsYXN0X3N0b3AgcG9zaXRpb24gaW4gZG9fc2VlaywgdGhhdCdzIHRoZSBwb3NpdGlvbiB3ZSBkaWQgYSBzZWVrIHRvLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfZG9fc2VlayksCisJICAoZ3N0X2Jhc2Vfc3JjX2xvb3ApOgorCSAgRG9uJ3QgdXBkYXRlIHRoZSBsYXN0X3N0b3AgcG9zaXRpb24gaW4gZG9fc2VlaywgdGhhdCdzIHRoZSBwb3NpdGlvbiB3ZQorCSAgZGlkIGEgc2VlayB0by4KKwkgIFJlYWQgYmFja3dhcmRzIHdoZW4gd2UgaGF2ZSBhIG5lZ2F0aXZlIHJhdGUuCisJICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzcmMuYzogKGV2ZW50X2Z1bmMpLCAod2FpdF9lb3MpLAorCSAgKHNldHVwX2ZpbGVzcmMpLCAoY2xlYW51cF9maWxlc3JjKSwgKEdTVF9TVEFSVF9URVNUKSwKKwkgIChmaWxlc3JjX3N1aXRlKToKKwkgIEFkZCBjaGVjayBmb3IgcmV2ZXJzZSByZWFkaW5nLgorCisyMDA4LTAxLTA3IDA5OjQ3OjQ5ICswMDAwICBBbGV4aXMgQmFsbGllciA8YWJhbGxpZXJAZ2VudG9vLm9yZz4KKworCSAgdGVzdHMvY2hlY2svOiBEZWNpZGUgd2hpY2ggaGVhZGVyIHRvIGluY2x1ZGUgYmFzZWQgb24gdGhlIHVzZXJsYW5kIEFCSSB0YXJnZXQgYW5kIG5vdCB0aGUga2VybmVsL2NwdS4gRml4IHVwIHN0cnVjdHVyLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBBbGV4aXMgQmFsbGllciA8YWJhbGxpZXIgYXQgZ2VudG9vIG9yZz4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGFiaS5jOgorCSAgKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3BwYzY0Lmg6CisJICAqIHRlc3RzL2NoZWNrL2xpYnMvbGlic2FiaS5jOgorCSAgKiB0ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9wcGM2NC5oOgorCSAgRGVjaWRlIHdoaWNoIGhlYWRlciB0byBpbmNsdWRlIGJhc2VkIG9uIHRoZSB1c2VybGFuZCBBQkkgdGFyZ2V0CisJICBhbmQgbm90IHRoZSBrZXJuZWwvY3B1LiBGaXggdXAgc3RydWN0dXJlIHNpemVzIG9mIHBwYzY0IGhlYWRlcgorCSAgZm9yIDY0LWJpdCB1c2VybGFuZCAoIzUwMzU5MCkuICBNaWdodCBuZWVkIHNvbWV0aGluZyBzaW1pbGFyIGZvcgorCSAgeDg2IHRvby4KKworMjAwOC0wMS0wNSAxMzo0NToyMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdGRlYnVndXRpbHMuYzogTG9nIHRoZSByZWFzb24gd2h5IGZvcGVuIGZhaWxzIGluIGFkZGl0aW9uIHRvIHRoZSBmYWN0IHRoYXQgaXQgZmFpbGVkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6IChfZ3N0X2RlYnVnX2Jpbl90b19kb3RfZmlsZSk6CisJICBMb2cgdGhlIHJlYXNvbiB3aHkgZm9wZW4gZmFpbHMgaW4gYWRkaXRpb24gdG8gdGhlIGZhY3QgdGhhdCBpdCBmYWlsZWQuCisKKzIwMDgtMDEtMDQgMTg6NDQ6MDMgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgZ3N0L3BhcnNlL3BhcnNlLmw6IFVzZSAiJW9wdGlvbiBuZXZlci1pbnRlcmFjdGl2ZSIgdG8gcHJldmVudCB1c2VsZXNzIGNhbGxzIHRvIGlzYXR0eSgpIG9uIGV2ZXJ5IGlucHV0IHdoZW4gcGFyc2luZy4gLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L3BhcnNlL3BhcnNlLmw6CisJICBVc2UgIiVvcHRpb24gbmV2ZXItaW50ZXJhY3RpdmUiIHRvIHByZXZlbnQgdXNlbGVzcyBjYWxscyB0byBpc2F0dHkoKQorCSAgb24gZXZlcnkgaW5wdXQgd2hlbiBwYXJzaW5nLiBBbHNvIHVzZSAiJW9wdGlvbiBub2lucHV0IiB0byBub3QgZGVmaW5lCisJICB0aGUgc3RhdGljIGlucHV0L3l5aW5wdXQgZnVuY3Rpb25zIHdoaWNoIHdlIGRvbid0IHVzZSBhbnl3YXkuIFRoaXMKKwkgIHJlbW92ZXMgYSBjb21waWxlciB3YXJuaW5nIHdpdGggZ2NjIDQuMyBhbmQgc2F2ZXMgc29tZSBieXRlcyBpbiB0aGUKKwkgIGxpYnJhcnkuCisJICAqIGdzdC9wYXJzZS9sZXguX2dzdF9wYXJzZV95eS5wcmUuYzoKKwkgIFJlZ2VuZXJhdGVkIGZvciB0aGUgYWJvdmUgY2hhbmdlLgorCisyMDA4LTAxLTA0IDE4OjM5OjE1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0cGFkLmM6IERvbid0IGNyYXNoIHdoZW4gdHJ5aW5nIHRvIGZpeGF0ZSBhbmQgZW1wdHkgbGlzdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChmaXhhdGVfdmFsdWUpOgorCSAgRG9uJ3QgY3Jhc2ggd2hlbiB0cnlpbmcgdG8gZml4YXRlIGFuZCBlbXB0eSBsaXN0LgorCSAgRml4ZXMgIzUwNjY0My4KKworMjAwOC0wMS0wMyAwOTo0Mzo0MSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6IENsYXJpZnkgdGhlIGNvbW1lbnRzIHRvIG1ha2UgdGhlIHVzYWdlIG9mIHRoaXMgc2NyaXB0IGFuZCB3aGF0IGl0IGRvZXMgZWFzaWVyIHRvIHVuZGVyc3RhbmQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOgorCSAgQ2xhcmlmeSB0aGUgY29tbWVudHMgdG8gbWFrZSB0aGUgdXNhZ2Ugb2YgdGhpcyBzY3JpcHQgYW5kIHdoYXQgaXQKKwkgIGRvZXMgZWFzaWVyIHRvIHVuZGVyc3RhbmQuCisKKzIwMDgtMDEtMDEgMTc6MTA6MzIgKzAwMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+CisKKwkgIHRvb2xzL2dzdC1wbG90LXRpbWVsaW5lLnB5OiBBZGQgbW9yZSBvcHRpb25zIHRvIGdzdC1wbG90LXRpbWVsaW5lCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdG9vbHMvZ3N0LXBsb3QtdGltZWxpbmUucHk6CisJICBBZGQgbW9yZSBvcHRpb25zIHRvIGdzdC1wbG90LXRpbWVsaW5lCisKKzIwMDctMTItMzEgMTk6MTE6MzkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZGVzaWduL3BhcnQtc3luY2hyb25pc2F0aW9uLnR4dDogU29tZSBtb3JlIGluZm8gb24gaG93IHRoZSBzdHJlYW1fdGltZSBpbiBHc3RCYXNlU2luayBpcyBkb25lLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtc3luY2hyb25pc2F0aW9uLnR4dDoKKwkgIFNvbWUgbW9yZSBpbmZvIG9uIGhvdyB0aGUgc3RyZWFtX3RpbWUgaW4gR3N0QmFzZVNpbmsgaXMgZG9uZS4KKworMjAwNy0xMi0zMCAxMzozNjozMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSogQ2hhbmdlTG9nOgorCSAgQ2hhbmdlTG9nIHN1cmdlcnk6IHJlbW92ZSBib2d1cyBjaGFuZ2Vsb2cgZW50cnkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgQ2hhbmdlTG9nIHN1cmdlcnk6IHJlbW92ZSBib2d1cyBjaGFuZ2Vsb2cgZW50cnkKKworMjAwNy0xMi0zMCAxMzozMToxNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jOiBQdXQgYmFjayB0aGUgdGNhc2Vfc2V0X3RpbWVvdXQoKSwgYXBwYXJlbnRseSBpdCdzIG5lZWRlZCBhZnRlciBhbGw7IGZpeCBpdCB1cCBpbiBhIHdheSB0Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jOiAoZ3N0X3NpbmtzX3N1aXRlKToKKwkgIFB1dCBiYWNrIHRoZSB0Y2FzZV9zZXRfdGltZW91dCgpLCBhcHBhcmVudGx5IGl0J3MgbmVlZGVkIGFmdGVyCisJICBhbGw7IGZpeCBpdCB1cCBpbiBhIHdheSB0aGF0IG1ha2VzIHRoaW5ncyB3b3JrIHdpdGggdmFsZ3JpbmQgdG9vLgorCisyMDA3LTEyLTMwIDEyOjIyOjQ5ICswMDAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgorCisJICBnc3QvZ3N0ZGVidWd1dGlscy5jOiBhZGQgd2FybmluZyB3aGVuIGZhaWxlZCB0byBvcGVuIGZpbGUgZm9yIHdyaXRpbmcKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgorCSAgYWRkIHdhcm5pbmcgd2hlbiBmYWlsZWQgdG8gb3BlbiBmaWxlIGZvciB3cml0aW5nCisKKzIwMDctMTItMjggMTQ6MzQ6MzQgKzAwMDAgIExhdXJlbnQgR2xheWFsIDxzcGdsZWdsZUB5YWhvby5mcj4KKworCSAgZ3N0L2dzdHZhbHVlLmM6IE9wdGltaXNhdGlvbjogYmFpbCBvdXQgb2YgdGhlIGxvb3AgYXMgZWFybHkgYXMgcG9zc2libGUgKCM1MDAxNDMpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBCYXNlZCBvbiBwYXRjaCBieTogTGF1cmVudCBHbGF5YWwgIDxzcGdsZWdsZSB5YWhvbyBmcj4KKwkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfaXNfZml4ZWQpOgorCSAgT3B0aW1pc2F0aW9uOiBiYWlsIG91dCBvZiB0aGUgbG9vcCBhcyBlYXJseSBhcyBwb3NzaWJsZSAoIzUwMDE0MykuCisKKzIwMDctMTItMjggMTQ6MTU6NTMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC86IEJ1bmNoIG9mIGdyYXR1aXRvdXMgbmFuby1vcHRpbWlzYXRpb25zLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RjYXBzLmM6IChnc3RfY2Fwc190b19zdHJpbmcpOgorCSAgKiBnc3QvZ3N0aW5mby5jOiAoZ3N0X2RlYnVnX2NvbnN0cnVjdF90ZXJtX2NvbG9yKToKKwkgICogZ3N0L2dzdHBhcnNlLmM6IChnc3RfcGFyc2VfbGF1bmNodik6CisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X3V0aWxfZHVtcF9tZW0pOgorCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF92YWx1ZV9zZXJpYWxpemVfYW55X2xpc3QpLAorCSAgKGdzdF92YWx1ZV90cmFuc2Zvcm1fYW55X2xpc3Rfc3RyaW5nKToKKwkgIEJ1bmNoIG9mIGdyYXR1aXRvdXMgbmFuby1vcHRpbWlzYXRpb25zLgorCisyMDA3LTEyLTI4IDEzOjU3OjA1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICB0ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmM6IEZpeCBsZWFrIGluIHVuaXQgdGVzdCAoYnVzIHN5bmMgaGFuZGxlciBtdXN0IHVucmVmIHRoZSBtZXNzYWdlIGlmIGl0IHJldHVybnMgR1NUX0JVU19EUk8uLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmM6IChhc3luY19kb25lX2Z1bmMpLAorCSAgKGFzeW5jX2RvbmVfZW9zX2Z1bmMpOgorCSAgRml4IGxlYWsgaW4gdW5pdCB0ZXN0IChidXMgc3luYyBoYW5kbGVyIG11c3QgdW5yZWYgdGhlIG1lc3NhZ2UKKwkgIGlmIGl0IHJldHVybnMgR1NUX0JVU19EUk9QKS4gRG9uJ3QgZmlkZGxlIHdpdGggdGhlIGRlZmF1bHQgdGVzdAorCSAgdGltZW91dCwgdGhpcyBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1cnJlbnQgcHJlY29uZmlndXJlZCB2YWx1ZQorCSAgdmlhIENLX0RFRkFVTFRfVElNRU9VVCwgYW5kIGFsc28gYnJlYWtzIHRoaW5ncyB3aXRoIHZhbGdyaW5kCisJICBiZWNhdXNlIGl0IG92ZXJyaWRlcyB0aGUgdmFsdWUgc3BlY2lmaWVkIGluIENLX0RFRkFVTFRfVElNRU9VVC4KKworMjAwNy0xMi0yNCAxOToyMTozMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSogQ2hhbmdlTG9nOgorCSAgQWRkIGJ1ZyB0aGF0IHdhcyBmaXhlZCB3aXRoIGxhc3QgY29tbWl0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBBZGQgYnVnIHRoYXQgd2FzIGZpeGVkIHdpdGggbGFzdCBjb21taXQuCisKKzIwMDctMTItMjQgMTk6MTE6MjkgKzAwMDAgIExhdXJlbnQgR2xheWFsIDxzcGdsZWdsZUB5YWhvby5mcj4KKworCSAgY29uZmlndXJlLmFjOiBDaGVjayBmb3Igc3RkaW9fZXh0LmggZm9yIHRoZSBmaWxlc2luayBjaGFuZ2VzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBCYXNlZCBvbiBQYXRjaCBieTogTGF1cmVudCBHbGF5YWwgPHNwZ2xlZ2xlIGF0IHlhaG9vIGRvdCBmcj4KKwkgICogY29uZmlndXJlLmFjOgorCSAgQ2hlY2sgZm9yIHN0ZGlvX2V4dC5oIGZvciB0aGUgZmlsZXNpbmsgY2hhbmdlcy4KKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOiAoYnVmZmVyX21vZGVfZ2V0X3R5cGUpLAorCSAgKGdzdF9maWxlX3NpbmtfY2xhc3NfaW5pdCksIChnc3RfZmlsZV9zaW5rX2luaXQpLAorCSAgKGdzdF9maWxlX3NpbmtfZGlzcG9zZSksIChnc3RfZmlsZV9zaW5rX3NldF9wcm9wZXJ0eSksCisJICAoZ3N0X2ZpbGVfc2lua19nZXRfcHJvcGVydHkpLCAoZ3N0X2ZpbGVfc2lua19vcGVuX2ZpbGUpLAorCSAgKGdzdF9maWxlX3NpbmtfY2xvc2VfZmlsZSk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuaDoKKwkgIEFkZCB0d28gcHJvcGVydGllcyB0byBjb250cm9sIHRoZSBidWZmZXJpbmcgbW9kZSBhbmQgc2l6ZS4KKwkgIEFQSTogR3N0RmlsZVNpbms6OmJ1ZmZlci1tb2RlCisJICBBUEk6IEdzdEZpbGVTaW5rOjpidWZmZXItc2l6ZQorCisyMDA3LTEyLTI0IDE0OjM1OjI0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0c3lzdGVtY2xvY2suYzogQWRkIHNvbWUgbW9yZSBkb2NzIHRvIGV4cGxhaW4gd2h5IGEgRklYTUUgd2FzIHdyb25nbHkgYWRkZWQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6IChnc3Rfc3lzdGVtX2Nsb2NrX2lkX3dhaXRfaml0dGVyX3VubG9ja2VkKToKKwkgIEFkZCBzb21lIG1vcmUgZG9jcyB0byBleHBsYWluIHdoeSBhIEZJWE1FIHdhcyB3cm9uZ2x5IGFkZGVkLgorCisyMDA3LTEyLTIyIDEyOjQ4OjI2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIGdzdC9nc3RvYmplY3QuYzogRml4IHR5cG8gaW4gdGhlIGdzdF9vYmplY3Rfe3JlZix1bnJlZn0gZG9jdW1lbnRhdGlvbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0b2JqZWN0LmM6CisJICBGaXggdHlwbyBpbiB0aGUgZ3N0X29iamVjdF97cmVmLHVucmVmfSBkb2N1bWVudGF0aW9uLgorCisyMDA3LTEyLTIxIDIxOjE3OjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICB0ZXN0cy9jaGVjay86IERvbid0IHVzZSBHU1RfUExVR0lOX0RFRklORV9TVEFUSUMsIGl0IGlzIG5vdCBwb3J0YWJsZSBhbmQgaXMgZ29pbmcgdG8gYmUgZGVwcmVjYXRlZCAoc2VlICM0OTg5MjQpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL2xpYnMvY29udHJvbGxlci5jOgorCSAgKiB0ZXN0cy9jaGVjay9saWJzL3R5cGVmaW5kaGVscGVyLmM6CisJICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9wYXJzZS1sYXVuY2guYzoKKwkgIERvbid0IHVzZSBHU1RfUExVR0lOX0RFRklORV9TVEFUSUMsIGl0IGlzIG5vdCBwb3J0YWJsZSBhbmQgaXMKKwkgIGdvaW5nIHRvIGJlIGRlcHJlY2F0ZWQgKHNlZSAjNDk4OTI0KS4KKworMjAwNy0xMi0yMSAyMDo1ODoyMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdHR5cGVmaW5kLmM6IE1ha2UgZ3N0X3R5cGVfZmluZF9yZWdpc3RlciB3b3JrIGZvciBzdGF0aWMgdHlwZWZpbmQgZnVuY3Rpb25zLCBpZS4gYWxsb3cgcGFzc2luZyBwbHVnaW4gPT0gTlVMTCAoLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHR5cGVmaW5kLmM6IChnc3RfdHlwZV9maW5kX3JlZ2lzdGVyKToKKwkgIE1ha2UgZ3N0X3R5cGVfZmluZF9yZWdpc3RlciB3b3JrIGZvciBzdGF0aWMgdHlwZWZpbmQgZnVuY3Rpb25zLAorCSAgaWUuIGFsbG93IHBhc3NpbmcgcGx1Z2luID09IE5VTEwgKHByZXJlcXVpc2l0ZSBmb3IgIzQ5ODkyNCkuCisJICAqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOiAoZ3N0X2VsZW1lbnRfcmVnaXN0ZXIpOgorCSAgU21hbGwgZG9jcyBhZGRpdGlvbi4KKworMjAwNy0xMi0yMSAxMzo1NDowNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHBhZC5jOiBSZWFsbHkgdW5saW5rIHRoZSBwZWVyIHBhZCBpbnN0ZWFkIG9mIHNldHRpbmcgdGhlIHBlZXIgcG9pbnRlciB0byBOVUxMIHdoZW4gd2UgZGlzcG9zZSB0aGUgcGFkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfZGlzcG9zZSk6CisJICBSZWFsbHkgdW5saW5rIHRoZSBwZWVyIHBhZCBpbnN0ZWFkIG9mIHNldHRpbmcgdGhlIHBlZXIgcG9pbnRlciB0byBOVUxMCisJICB3aGVuIHdlIGRpc3Bvc2UgdGhlIHBhZC4KKwkgIFRoaXMgY29ycmVjdGx5IGNhbGxzIHRoZSB1bmxpbmsgZnVuY3Rpb25zIGFuZCBtYWtlcyBzdXJlIHRoYXQgdGhlIHBlZXIKKwkgIGRvZXMgbm90IGhhdmUgYSBoYW5kbGUgdG8gaW52YWxpZCBtZW1vcnkuIFNlZSAjNTA0NjcxLgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RfcGFkX3N1aXRlKToKKwkgIEFkZCB0ZXN0c3VpdGUgZm9yIGFib3ZlIGNhc2UuCisKKzIwMDctMTItMjAgMDk6MjA6MjcgKzAwMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgorCisJICBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOiBGaXggZGV0ZWN0aW9uIG9mIHRoZSBjaGVjayB2ZXJzaW9uIHdlJ3JlIGNvbXBpbGluZyBhZ2FpbnN0ICh3b3VsZCBvdGhlcndpc2UgYnJlYWsgaWYgY2hlY2suLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqIGF4aXMgY29tPgorCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgorCSAgRml4IGRldGVjdGlvbiBvZiB0aGUgY2hlY2sgdmVyc2lvbiB3ZSdyZSBjb21waWxpbmcgYWdhaW5zdCAod291bGQKKwkgIG90aGVyd2lzZSBicmVhayBpZiBjaGVjayBnb2VzIHYwLjEwLjApOyBjb3JyZWN0bHkgcmVwb3J0IHRoZQorCSAgbmFtZSBvZiB0aGUgZmFpbGVkIHRlc3QgYWdhaW4gaW4gY2FzZSBvZiBmYWlsdXJlLCBpbnN0ZWFkIG9mCisJICBqdXN0ICd0ZicgKGZpeGVzICM1MDQ0OTkpLgorCisyMDA3LTEyLTE5IDE3OjQ5OjM4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogQWxsb3cgc2VuZGluZyBFT1MgdG8gdGhlIHNvdXJjZSB0byBtYWtlIGl0IHNlbmQgb3V0IGFuIEVPUyBldmVudCBmcm9tIHRoZSBzdHJlYW1pbmcgdGhyZWFkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX3NlbmRfZXZlbnQpLAorCSAgKGdzdF9iYXNlX3NyY19nZXRfcmFuZ2UpLCAoZ3N0X2Jhc2Vfc3JjX3BhZF9nZXRfcmFuZ2UpLAorCSAgKGdzdF9iYXNlX3NyY19sb29wKSwgKGdzdF9iYXNlX3NyY19zZXRfZmx1c2hpbmcpLAorCSAgKGdzdF9iYXNlX3NyY19jaGFuZ2Vfc3RhdGUpOgorCSAgQWxsb3cgc2VuZGluZyBFT1MgdG8gdGhlIHNvdXJjZSB0byBtYWtlIGl0IHNlbmQgb3V0IGFuIEVPUyBldmVudCBmcm9tCisJICB0aGUgc3RyZWFtaW5nIHRocmVhZC4KKwkgIFVwZGF0ZSBkb2NzIGFuZCBkZXByZWNhdGUgdGhlIG9sZCBOVUxML1JFQURZIHNodXRkb3duIG1ldGhvZC4KKwkgICogdGVzdHMvY2hlY2svbGlicy9iYXNlc3JjLmM6IChHU1RfU1RBUlRfVEVTVCksCisJICAoZ3N0X2Jhc2VzcmNfc3VpdGUpOgorCSAgQWRkIHVuaXQgdGVzdCBmb3IgY29udHJvbGxlZCBzaHV0ZG93bi4KKworMjAwNy0xMi0xOSAxMjo0ODoxOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1zeW5jaHJvbmlzYXRpb24udHh0OiBTbWFsbCB1cGRhdGVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtc3luY2hyb25pc2F0aW9uLnR4dDoKKwkgIFNtYWxsIHVwZGF0ZXMuCisJICAqIGdzdC9nc3RzZWdtZW50LmM6IChnc3Rfc2VnbWVudF9zZXRfc2VlayksCisJICAoZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnRfZnVsbCksIChnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSksCisJICAoZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lKToKKwkgIFRoZSBzZWVrIGZvcm1hdCBjYW4gYmUgZGlmZmVyZW50IGZyb20gdGhlIHNlZ21lbnQgZm9ybWF0IHdoZW4gdGhlIHN0YXJ0CisJICBhbmQgc3RvcCB2YWx1ZXMgYXJlIG5vdCB0byBiZSB1cGRhdGVkLCB3aGVuIHdlIG9ubHkgZG8gYSByYXRlIGNoYW5nZSBmb3IKKwkgIGV4YW1wbGUuCisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RzZWdtZW50LmM6IChHU1RfU1RBUlRfVEVTVCksCisJICAoZ3N0X3NlZ21lbnRfc3VpdGUpOgorCSAgQWRkIGEgdGVzdGNhc2UgZm9yIHRoZSByYXRlLW9ubHkgc2Vla3MsIGNoZWNraW5nIHRoYXQgdGhlIGZvcm1hdCBpcworCSAgY29ycmVjdGx5IGlnbm9yZWQgd2hlbiBzdGFydCBhbmQgc3RvcCBhcmUgbm90IHVwZGF0ZWQuCisKKzIwMDctMTItMTggMTM6Mzg6MzEgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSAgQ2hhbmdlTG9nIHN1cmdlcnksIGdzdGVudW10eXBlcy5jIGNoYW5nZXMgd2VyZSBub3QgY29tbWl0dGVkIGJlY2F1c2UgdGhlcmUgd2VyZSBub25lCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogQ2hhbmdlTG9nIHN1cmdlcnksIGdzdGVudW10eXBlcy5jIGNoYW5nZXMgd2VyZSBub3QgY29tbWl0dGVkIGJlY2F1c2UgdGhlcmUgd2VyZSBub25lCisKKzIwMDctMTItMTggMTM6MTg6MzUgKzAwMDAgIE1hdHRoaWFzIEJvbHRlIDxwaG90b25AbWFpbC51cGIuZGU+CisKKwkgIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzogU29tZSBpbmRlbnRpb24gZml4ZXMgYnkgZ3N0LWluZGVudC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmM6IChyZWdpc3Rlcl9nc3RfYnVmZmVyX2ZsYWcpLAorCSAgKHJlZ2lzdGVyX2dzdF9idWZmZXJfY29weV9mbGFncyksIChyZWdpc3Rlcl9nc3RfY2xvY2tfZmxhZ3MpLAorCSAgKHJlZ2lzdGVyX2dzdF9kZWJ1Z19ncmFwaF9kZXRhaWxzKSwKKwkgIChyZWdpc3Rlcl9nc3Rfc3RhdGVfY2hhbmdlX3JldHVybiksIChyZWdpc3Rlcl9nc3Rfc3RhdGVfY2hhbmdlKSwKKwkgIChyZWdpc3Rlcl9nc3RfZWxlbWVudF9mbGFncyksIChyZWdpc3Rlcl9nc3RfY29yZV9lcnJvciksCisJICAocmVnaXN0ZXJfZ3N0X2xpYnJhcnlfZXJyb3IpLCAocmVnaXN0ZXJfZ3N0X3Jlc291cmNlX2Vycm9yKSwKKwkgIChyZWdpc3Rlcl9nc3Rfc3RyZWFtX2Vycm9yKSwgKHJlZ2lzdGVyX2dzdF9ldmVudF90eXBlX2ZsYWdzKSwKKwkgIChyZWdpc3Rlcl9nc3RfZXZlbnRfdHlwZSksIChyZWdpc3Rlcl9nc3RfaW5kZXhfZW50cnlfdHlwZSksCisJICAocmVnaXN0ZXJfZ3N0X2Fzc29jX2ZsYWdzKSwgKHJlZ2lzdGVyX2dzdF9tZXNzYWdlX3R5cGUpLAorCSAgKHJlZ2lzdGVyX2dzdF9taW5pX29iamVjdF9mbGFncyksIChyZWdpc3Rlcl9nc3RfcGFkX2xpbmtfcmV0dXJuKSwKKwkgIChyZWdpc3Rlcl9nc3RfZmxvd19yZXR1cm4pLCAocmVnaXN0ZXJfZ3N0X3BhZF90ZW1wbGF0ZV9mbGFncyksCisJICAocmVnaXN0ZXJfZ3N0X3BpcGVsaW5lX2ZsYWdzKSwgKHJlZ2lzdGVyX2dzdF9wbHVnaW5fZXJyb3IpLAorCSAgKHJlZ2lzdGVyX2dzdF90YWdfbWVyZ2VfbW9kZSksIChyZWdpc3Rlcl9nc3RfYWxsb2NfdHJhY2VfZmxhZ3MpLAorCSAgKHJlZ2lzdGVyX2dzdF90eXBlX2ZpbmRfcHJvYmFiaWxpdHkpLCAocmVnaXN0ZXJfZ3N0X3BhcnNlX2Vycm9yKToKKwkgIFNvbWUgaW5kZW50aW9uIGZpeGVzIGJ5IGdzdC1pbmRlbnQuCisJICBQYXRjaCBieTogTWF0dGhpYXMgQm9sdGUgPHBob3RvbiBhdCBtYWlsIGRvdCB1cGIgZG90IGRlPgorCSAgKiB3aW4zMi92czgvZ3JhbW1hci52Y3Byb2o6CisJICAqIHdpbjMyL3ZzOC9saWJnc3Rjb250cm9sbGVyLnZjcHJvajoKKwkgICogd2luMzIvdnM4L2xpYmdzdHJlYW1lci52Y3Byb2o6CisJICBGaXggY29tcGlsYXRpb24gd2l0aCBWUzggYW5kIGluY2x1ZGUgc29tZSBtaXNzaW5nIGZpbGVzLgorCisyMDA3LTEyLTE4IDEyOjAzOjE4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0dGFnbGlzdC5jOiBTbWFsbCBkb2NzIGFkZGl0aW9uOiBtZW50aW9uIHRoYXQgdGhlIHN0cmluZ3MgcmV0dXJuZWQgYnkgZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcqKCkgYXJlIGluIFVURi04IGUuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSAgU21hbGwgZG9jcyBhZGRpdGlvbjogbWVudGlvbiB0aGF0IHRoZSBzdHJpbmdzIHJldHVybmVkIGJ5CisJICBnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZyooKSBhcmUgaW4gVVRGLTggZW5jb2RpbmcuCisKKzIwMDctMTItMTcgMTk6NTk6NDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIE1ha2VmaWxlLmFtOiBUaGUgY2hlY2stZXhwb3J0cyBzdHVmZiBtb3ZlZCB0byBjb21tb24vd2luMzIubWFrLCBzbyBpbmNsdWRlIHRoYXQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogTWFrZWZpbGUuYW06CisJICBUaGUgY2hlY2stZXhwb3J0cyBzdHVmZiBtb3ZlZCB0byBjb21tb24vd2luMzIubWFrLCBzbyBpbmNsdWRlIHRoYXQuCisKKzIwMDctMTItMTcgMTY6Mzg6NDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBNYWtlIF93YWl0X3BsYXlpbmcoKSBub3QgY2hlY2sgYW55IHZhcmlhYmxlcyBzbyB0aGF0IHdlIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gZnJvbSBzdWJjbC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX3dhaXRfcGxheWluZyksCisJICAoZ3N0X2Jhc2Vfc3JjX3BlcmZvcm1fc2VlayksIChnc3RfYmFzZV9zcmNfZ2V0X3JhbmdlKSwKKwkgIChnc3RfYmFzZV9zcmNfc2V0X3BsYXlpbmcpLCAoZ3N0X2Jhc2Vfc3JjX2NoYW5nZV9zdGF0ZSk6CisJICBNYWtlIF93YWl0X3BsYXlpbmcoKSBub3QgY2hlY2sgYW55IHZhcmlhYmxlcyBzbyB0aGF0IHdlIGNhbiBjYWxsIHRoaXMKKwkgIGZ1bmN0aW9uIGZyb20gc3ViY2xhc3Nlcy4gTW92ZSB0aGUgY2hlY2tzIGVsc2V3aGVyZSBzaW1pbGFyIHRvCisJICBfd2FpdF9wcmVyb2xsKCkgaW4gYmFzZXNpbmsuCisJICBBZGQgc29tZSBkZWJ1Z2dpbmcuCisJICBPbmx5IHNpZ25hbCB0aGUgTElWRSBjb25kIHdoZW4gd2UgYXJlIGdvaW5nIGJhY2sgdG8gUExBWUlORy4KKworMjAwNy0xMi0xNiAxODoyOToyNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IFVzZSBnX3JlbW92ZSgpIGFuZCBnX3JlbmFtZSgpLiBDaGVjayByZXN1bHQgb2YgZ19yZW5hbWUoKSwgYW5kIGRvbid0IGxlYWsgdGhlIG9wZW4gZmlsZSBkZXNjLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IChnc3RfcmVnaXN0cnlfYmluYXJ5X3dyaXRlX2NhY2hlKToKKwkgIFVzZSBnX3JlbW92ZSgpIGFuZCBnX3JlbmFtZSgpLiBDaGVjayByZXN1bHQgb2YgZ19yZW5hbWUoKSwgYW5kCisJICBkb24ndCBsZWFrIHRoZSBvcGVuIGZpbGUgZGVzY3JpcHRvciBpZiB3ZSBlcnJvciBvdXQgd2hlbiB3cml0aW5nLgorCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogKGxvYWRfcGx1Z2luKSwgKGdzdF9yZWdpc3RyeV94bWxfd3JpdGVfY2FjaGUpOgorCSAgTXVzdCBjaGVjayB0aGUgcmV0dXJuIHZhbHVlIG9mIGNsb3NlKCkgYWZ0ZXIgd3JpdGluZyBvdXQgdGhlIG5ldworCSAgcmVnaXN0cnkgZmlsZS4gIFNvbWV0aW1lcyB3cml0ZSBwcm9ibGVtcyBzdWNoIGFzIG91dC1vZi1kaXNrc3BhY2UKKwkgIGFyZSBvbmx5IHJlcG9ydGVkIHdoZW4gdGhlIGZpbGUgaXMgY2xvc2VkIGFuZCBub3QgYWxyZWFkeSBkdXJpbmcKKwkgIHRoZSB3cml0ZS4gIFRoaXMgbWF5IGhhdmUgY2F1c2VkIHBhcnRpYWwvYnJva2VuIHJlZ2lzdHJ5IGZpbGVzIGluCisJICBzb21lIHJhcmUgY2lyY3Vtc3RhbmNlcy4gU2hvdWxkIGZpeCAjNTAzNjc1LgorCisyMDA3LTEyLTE2IDE3OjM3OjExICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBkb2NzLzogSWdub3JlIGZpbGVzIGdlbmVyYXRlZCBieSBuZXcgY29tbW9uLyogbW9kaWZpY2F0aW9ucworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0Ly5jdnNpZ25vcmU6CisJICAqIGRvY3MvbGlicy8uY3ZzaWdub3JlOgorCSAgKiBkb2NzL3BsdWdpbnMvLmN2c2lnbm9yZToKKwkgIElnbm9yZSBmaWxlcyBnZW5lcmF0ZWQgYnkgbmV3IGNvbW1vbi8qIG1vZGlmaWNhdGlvbnMKKworMjAwNy0xMi0xNSAxNToxOTozMiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6IFllcywgeW91IGNhbiBhbHNvIGhhdmUgYSA8VEFCPiBpZiB5b3Ugd2FudC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6CisJICBZZXMsIHlvdSBjYW4gYWxzbyBoYXZlIGEgPFRBQj4gaWYgeW91IHdhbnQuCisKKzIwMDctMTItMTUgMTQ6NTg6NTkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOiBBZGQgbmV3IGJhc2V0cmFuc2Zvcm0gQVBJIHRvIHdpbiBleHBvcnQgZmlsZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6CisJICBBZGQgbmV3IGJhc2V0cmFuc2Zvcm0gQVBJIHRvIHdpbiBleHBvcnQgZmlsZS4KKworMjAwNy0xMi0xNSAxNDo0MjoyNSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6IEFkanVzdCB0aGUgdGVzdCB0byB0aGUgcmVmY291bnQgY2hhbmdlIHR3byBkYXlzIGFnby4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6CisJICBBZGp1c3QgdGhlIHRlc3QgdG8gdGhlIHJlZmNvdW50IGNoYW5nZSB0d28gZGF5cyBhZ28uCisKKzIwMDctMTItMTQgMjE6MzY6NTAgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJICBkb2NzL2ZhcS9nZXR0aW5nLnhtbDogRml4IHR5cG8uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9mYXEvZ2V0dGluZy54bWw6IEZpeCB0eXBvLgorCisyMDA3LTEyLTE0IDE2OjUyOjM4ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIEFQSTogQWRkIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfZ2FwX2F3YXJlKCkgdG8gY29udHJvbCB3aGV0aGVyIHRoZSBlbGVtZW50IGNvcnJlY3RseSBoYW5kbGVzIEdTVF9CVUZGRVJfRkxBR19HQVAgb3Igcy4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2luaXQpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9wcmVwYXJlX291dHB1dF9idWZmZXIpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfZ2FwX2F3YXJlKToKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6CisJICBBUEk6IEFkZCBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2dhcF9hd2FyZSgpIHRvIGNvbnRyb2wgd2hldGhlcgorCSAgdGhlIGVsZW1lbnQgY29ycmVjdGx5IGhhbmRsZXMgR1NUX0JVRkZFUl9GTEFHX0dBUCBvciBzaG91bGRuJ3QKKwkgIGdldCBidWZmZXJzIHdpdGggdGhpcyBmbGFnIGF0IGFsbC4gRml4ZXMgIzUwMzIzMS4KKworMjAwNy0xMi0xMyAxNjo0OTo1NCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBsaWJzL2dzdC9iYXNlLzogUmVwbGFjZSBnc3RfcGFkX2dldF9wYXJlbnQgYnkgR1NUX09CSkVDVF9QQVJFTlQgaW5zaWRlIHN0cmVhbWluZyB0aHJlYWQuIENvcnJlY3QgbG9nIG1lc3NhZ2UgaW4gZ3N0YmEuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIFJlcGxhY2UgZ3N0X3BhZF9nZXRfcGFyZW50IGJ5IEdTVF9PQkpFQ1RfUEFSRU5UIGluc2lkZSBzdHJlYW1pbmcKKwkgIHRocmVhZC4gQ29ycmVjdCBsb2cgbWVzc2FnZSBpbiBnc3RiYXNlc3JjLmMuCisKKzIwMDctMTItMTMgMTM6NTk6MDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3R1dGlscy5jOiBGaXggcG9zc2libGUgY29tcGlsZXIgd2FybmluZyAoIzUwMzQxNykuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHV0aWxzLmM6IChlbGVtZW50X2ZpbmRfdW5jb25uZWN0ZWRfcGFkKToKKwkgIEZpeCBwb3NzaWJsZSBjb21waWxlciB3YXJuaW5nICgjNTAzNDE3KS4KKworMjAwNy0xMi0xMyAxMTo0MTowNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdG9iamVjdC5jOiBEb24ndCB1c2UgR1NUX0NBVF9FVkVOVCBoZXJlIGZvciBsb2dnaW5nLCBpdCBtYWtlcyBubyBzZW5zZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0b2JqZWN0LmM6IChnc3Rfb2JqZWN0X2Rpc3BhdGNoX3Byb3BlcnRpZXNfY2hhbmdlZCk6CisJICBEb24ndCB1c2UgR1NUX0NBVF9FVkVOVCBoZXJlIGZvciBsb2dnaW5nLCBpdCBtYWtlcyBubyBzZW5zZS4KKworMjAwNy0xMi0xMyAxMDozMTozMyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICB0b29scy9nc3QtaW5zcGVjdC5jOiBBZGQgc3VwcG9ydCBmb3IgR3N0RnJhY3Rpb24gcHJvcGVydGllcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAocHJpbnRfZWxlbWVudF9wcm9wZXJ0aWVzX2luZm8pOgorCSAgQWRkIHN1cHBvcnQgZm9yIEdzdEZyYWN0aW9uIHByb3BlcnRpZXMuCisKKzIwMDctMTItMTIgMjM6MjA6MDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIE1ha2VmaWxlLmFtOiBBZGQgY2hlY2stZXhwb3J0cyB0YXJnZXQgYW5kIHJ1biBpdCBhcyBwYXJ0IG9mICdtYWtlIGNoZWNrJyAoc2VlICM0OTkxNDAgYW5kICM0OTM5ODMpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIE1ha2VmaWxlLmFtOgorCSAgQWRkIGNoZWNrLWV4cG9ydHMgdGFyZ2V0IGFuZCBydW4gaXQgYXMgcGFydCBvZiAnbWFrZSBjaGVjaycKKwkgIChzZWUgIzQ5OTE0MCBhbmQgIzQ5Mzk4MykuCisJICAqIGdzdC9nc3RfcHJpdmF0ZS5oOgorCSAgKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKKwkgICogZ3N0L2dzdGdob3N0cGFkLmM6IChnc3RfcHJveHlfcGFkX2NsYXNzX2luaXQpOgorCSAgKiBnc3QvZ3N0aW5mby5jOiAoX3ByaXZfZ3N0X2luX3ZhbGdyaW5kKSwgKF9nc3RfZGVidWdfaW5pdCksCisJICAoX3ByaXZfZ3N0X2luX3ZhbGdyaW5kKToKKwkgICogZ3N0L2dzdGluZm8uaDogKEdzdExvZ0Z1bmN0aW9uKToKKwkgICogZ3N0L2dzdHR5cGVmaW5kLmM6ICh0eXBlX2ZpbmRfZGVidWcpLCAoR1NUX0NBVF9ERUZBVUxUKSwKKwkgIChnc3RfdHlwZV9maW5kX3JlZ2lzdGVyKToKKwkgICogZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5jOiAodHlwZV9maW5kX2RlYnVnKSwgKEdTVF9DQVRfREVGQVVMVCksCisJICAoZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF90eXBlKToKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6IChHU1RfQ0FUX0RFRkFVTFQpLAorCSAgKEdTVF9DQVRfREVGQVVMVCksIChwYXJlbnRfY2xhc3MpLCAocHJpdl9nc3RfY29udHJvbGxlcl9rZXkpLAorCSAgKGdzdF9jb250cm9sbGVyX25ld192YWxpc3QpLCAoZ3N0X2NvbnRyb2xsZXJfbmV3X2xpc3QpLAorCSAgKF9nc3RfY29udHJvbGxlcl9kaXNwb3NlKSwgKF9nc3RfY29udHJvbGxlcl9jbGFzc19pbml0KToKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sc291cmNlLmM6IChHU1RfQ0FUX0RFRkFVTFQpOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGhlbHBlci5jOiAoR1NUX0NBVF9ERUZBVUxUKSwKKwkgIChHU1RfQ0FUX0RFRkFVTFQpLCAoZ3N0X29iamVjdF91bmNvbnRyb2xfcHJvcGVydGllcyksCisJICAoZ3N0X29iamVjdF9nZXRfY29udHJvbGxlciksIChnc3Rfb2JqZWN0X3NldF9jb250cm9sbGVyKSwKKwkgIChnc3Rfb2JqZWN0X3N1Z2dlc3RfbmV4dF9zeW5jKSwgKGdzdF9vYmplY3Rfc3luY192YWx1ZXMpLAorCSAgKGdzdF9vYmplY3Rfc2V0X2NvbnRyb2xfc291cmNlKSwgKGdzdF9vYmplY3RfZ2V0X2NvbnRyb2xfc291cmNlKSwKKwkgIChnc3Rfb2JqZWN0X2dldF92YWx1ZV9hcnJheXMpLCAoZ3N0X29iamVjdF9nZXRfdmFsdWVfYXJyYXkpLAorCSAgKGdzdF9vYmplY3RfZ2V0X2NvbnRyb2xfcmF0ZSksIChnc3Rfb2JqZWN0X3NldF9jb250cm9sX3JhdGUpOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzogKEdTVF9DQVRfREVGQVVMVCk6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvbGliLmM6IChHU1RfQ0FUX0RFRkFVTFQpOgorCSAgTWFrZSBzb21lIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBzdGF0aWMgc3RhdGljOyByZW5hbWUgc29tZQorCSAgcHJpdmF0ZSBzeW1ib2xzIHNvIHRoYXQgdGhleSBkb24ndCBnZXQgZXhwb3J0ZWQ7IGFkZCBzb21lIEZJWE1FCisJICBjb21tZW50cyBzbyB3ZSBjYW4gbW92ZSBhY2NpZGVudGFsbHkgZXhwb3J0ZWQgZnVuY3Rpb25zIGludG8KKwkgIG91ciBwcml2YXRlIHNlY3Rpb24gaW4gMC4xMS4KKwkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBBZGQgZ3N0X3V0aWxzX2dldF90aW1lc3RhbXAoKS4KKworMjAwNy0xMi0xMiAxNDowNDoxNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0dmFsdWUuKjogQWRkIG1vcmUgbWlzc2luZyAiU2luY2U6IiB0YWdzIHRvIGRvY3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHZhbHVlLmM6CisJICAqIGdzdC9nc3R2YWx1ZS5oOgorCSAgQWRkIG1vcmUgbWlzc2luZyAiU2luY2U6IiB0YWdzIHRvIGRvY3MuCisKKzIwMDctMTItMTIgMDY6NTg6NTYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdHV0aWxzLmM6IEFkZCBtaXNpbmcgIlNpbmNlOiIgdG8gZG9jcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIEFkZCBtaXNpbmcgIlNpbmNlOiIgdG8gZG9jcy4KKworMjAwNy0xMi0xMSAyMjowMzo1OCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0cGx1Z2luLmM6IEluY2x1ZGUgImdsaWItY29tcGF0LXByaXZhdGUuaCIgdG8gZml4IHRoZSBidWlsZCBvbiBzeXN0ZW0gd2l0aCBnbGliIDwgMi4xMC4gRml4ZXMgIzUwMzEzMS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGx1Z2luLmM6CisJICBJbmNsdWRlICJnbGliLWNvbXBhdC1wcml2YXRlLmgiIHRvIGZpeCB0aGUgYnVpbGQgb24gc3lzdGVtIHdpdGgKKwkgIGdsaWIgPCAyLjEwLiBGaXhlcyAjNTAzMTMxLgorCisyMDA3LTEyLTExIDIwOjMyOjI5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3R1dGlscy4qOiBBY3R1YWxseSBpdHMgbm90IFBVUkUgYXMgaXQgZ2V0cyB0aGUgdGltZSBmcm9tIGVsc2V3aGVyZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dXRpbHMuYzoKKwkgICogZ3N0L2dzdHV0aWxzLmg6CisJICBBY3R1YWxseSBpdHMgbm90IFBVUkUgYXMgaXQgZ2V0cyB0aGUgdGltZSBmcm9tIGVsc2V3aGVyZS4KKworMjAwNy0xMi0xMSAyMDoyMzo1OCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBDaGFuZ2UgR1NUX0dFVF9USU1FU1RBTVAgaW50byBnc3RfdXRpbF9nZXRfdGltZXN0YW1wIGFuZCByZXBsYWNlIGFsbCB1c2VzIGFzIHdlIGRvbid0IGhhdmUgSEFWRV9QT1NJWF9USU1FUlMgaW4gcHVibGkuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBnc3QvZ3N0Y2xvY2suaDoKKwkgICogZ3N0L2dzdGRlYnVndXRpbHMuYzoKKwkgICogZ3N0L2dzdGluZm8uYzoKKwkgICogZ3N0L2dzdHV0aWxzLmM6CisJICAqIGdzdC9nc3R1dGlscy5oOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICAqIHRvb2xzL2dzdC1sYXVuY2guYzoKKwkgIENoYW5nZSBHU1RfR0VUX1RJTUVTVEFNUCBpbnRvIGdzdF91dGlsX2dldF90aW1lc3RhbXAgYW5kIHJlcGxhY2UgYWxsCisJICB1c2VzIGFzIHdlIGRvbid0IGhhdmUgSEFWRV9QT1NJWF9USU1FUlMgaW4gcHVibGljIGhlYWRlcnMuCisJICBUaGFua3MgVGltIGZvciBzcG90dGluZy4KKworMjAwNy0xMi0xMSAxNToyOToyNiArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgorCisJKiBnc3RyZWFtZXIuc3BlYy5pbjoKKwkgIHVwZGF0ZSBzcGVjIGZpbGUgYnkgbWlycm9yaW5nIGxhdGVzdCBGZWRvcmEgb25lCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHVwZGF0ZSBzcGVjIGZpbGUgYnkgbWlycm9yaW5nIGxhdGVzdCBGZWRvcmEgb25lCisKKzIwMDctMTItMDkgMDQ6Mjg6MDMgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgY29uZmlndXJlLmFjOiBEb24ndCBkZWZpbmUgR1NUX0RJU0FCTEVfREVQUkVDQVRFRCBmb3IgcmVsZWFzZXMuIEZpeGVzICM0OTgxODEuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgRG9uJ3QgZGVmaW5lIEdTVF9ESVNBQkxFX0RFUFJFQ0FURUQgZm9yIHJlbGVhc2VzLiBGaXhlcyAjNDk4MTgxLgorCisyMDA3LTEyLTA4IDEyOjU0OjUzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0c3RydWN0dXJlLmM6IERvbid0IGNyYXNoIGluIF9mcm9tX3N0cmluZygpIGlmIHRoZSBzdHJ1Y3R1cmUgbmFtZSBpcyBub3QgdmFsaWQgKGZpeGVzICM1MDE1NjApLiAgQWxsb3cgc3RydWN0dXIuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6IChnc3Rfc3RydWN0dXJlX3ZhbGlkYXRlX25hbWUpLAorCSAgKGdzdF9zdHJ1Y3R1cmVfbmV3X3ZhbGlzdCksIChnc3Rfc3RydWN0dXJlX3BhcnNlX3ZhbHVlKSwKKwkgIChnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nKToKKwkgIERvbid0IGNyYXNoIGluIF9mcm9tX3N0cmluZygpIGlmIHRoZSBzdHJ1Y3R1cmUgbmFtZSBpcyBub3QgdmFsaWQKKwkgIChmaXhlcyAjNTAxNTYwKS4gIEFsbG93IHN0cnVjdHVyZSBuYW1lcyB0byBzdGFydCB3aXRoIGEgbnVtYmVyCisJICBhZ2FpbiAodGhpcyBhcHBhcmVudGx5IGJyb2tlIHRoZSB1YnVudHUgY29kZWMgaW5zdGFsbGVyKS4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoR1NUX1NUQVJUX1RFU1QpLAorCSAgKEdTVF9TVEFSVF9URVNUKToKKwkgIEFkZCB1bml0IHRlc3QgZm9yIHRoZSBjcmFzaDsgdXBkYXRlIHVuaXQgdGVzdHMgZm9yIG5ldyBiZWhhdmlvdXIuCisKKzIwMDctMTItMDMgMTE6MDQ6MDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3R1dGlscy5jOiBDbGFyaWZ5IGdzdF9lbGVtZW50X2dldF9jb21wYXRpYmxlX3BhZCgpIGRvY3VtZW50YXRpb24uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHV0aWxzLmM6CisJICBDbGFyaWZ5IGdzdF9lbGVtZW50X2dldF9jb21wYXRpYmxlX3BhZCgpIGRvY3VtZW50YXRpb24uCisJICBGaXhlcyAjNTAwOTE5LgorCisyMDA3LTEyLTAyIDIwOjMzOjQ5ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOiBEb24ndCBmb3JnZXQgdG8gZGlzdCB7Z3N0LGxpYnN9L3N0cnVjdF9ocHBhLmguCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICBEb24ndCBmb3JnZXQgdG8gZGlzdCB7Z3N0LGxpYnN9L3N0cnVjdF9ocHBhLmguCisKKzIwMDctMTEtMjggMTM6MDI6MzAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBVc2UgbmV3IEFQSSB0byBnZXQgZWxhcHNlZCB0aW1lLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIFVzZSBuZXcgQVBJIHRvIGdldCBlbGFwc2VkIHRpbWUuCisKKzIwMDctMTEtMjggMTI6NTI6NDIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0LzogRml4IHdyb25nIG9yZGVyIG9mIGFyZ3MgaW4gR1NUX0NMT0NLX0RJRkYoKSB1c2FnZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgorCSAgKiBnc3QvZ3N0aW5mby5jOgorCSAgRml4IHdyb25nIG9yZGVyIG9mIGFyZ3MgaW4gR1NUX0NMT0NLX0RJRkYoKSB1c2FnZS4KKwkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOgorCSAgVXNlIG5ldyBBUEkgdG8gZ2V0IGVsYXBzZWQgdGltZS4KKworMjAwNy0xMS0yOCAxMjozNToxNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBSZW5hbWUgbmV3IEFQSSArIENoYW5nZUxvZyBzdXJnZXJ5IHRvIHJlbW92ZSBvbGQgbmFtZSBmcm9tIGxhc3QgZW50cnkuLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3RjbG9jay5oOgorCSAgKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgorCSAgKiBnc3QvZ3N0aW5mby5jOgorCSAgUmVuYW1lIG5ldyBBUEkgKyBDaGFuZ2VMb2cgc3VyZ2VyeSB0byByZW1vdmUgb2xkIG5hbWUgZnJvbSBsYXN0IGVudHJ5Li4KKwkgIEFQSTogR1NUX0dFVF9USU1FU1RBTVAKKworMjAwNy0xMS0yOCAxMjoxMTo1OSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBOb3cgaGlkZSB0aGUgZGlmZmVyZW50IGNsb2NrIHN0dWZmIGJlaGluZCBhIG1hY3JvLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3RjbG9jay5oOgorCSAgKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgorCSAgKiBnc3QvZ3N0aW5mby5jOgorCSAgTm93IGhpZGUgdGhlIGRpZmZlcmVudCBjbG9jayBzdHVmZiBiZWhpbmQgYSBtYWNyby4KKwkgIEFQSTogR1NUX0dFVF9DVVJSRU5UX1RJTUUKKworMjAwNy0xMS0yOCAxMTozOTozNSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBBcHBseSB0aGUgcG9zaXgtdGltZXIgY2hlY2sgZnJvbSAjMzYxMTU1LiBDb25kaXRpb25hbGx5IHVzZSB0aGUgcG9zaXggdGltZXIgZm9yIGxvZ2dpbmcuIFRoaXMgZ2l2ZXMgYmV0dGVyIHRpbWVzdGFtcCAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICAqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6CisJICAqIGdzdC9nc3RpbmZvLmM6CisJICBBcHBseSB0aGUgcG9zaXgtdGltZXIgY2hlY2sgZnJvbSAjMzYxMTU1LiBDb25kaXRpb25hbGx5IHVzZSB0aGUgcG9zaXgKKwkgIHRpbWVyIGZvciBsb2dnaW5nLiBUaGlzIGdpdmVzIGJldHRlciB0aW1lc3RhbXAgcHJlY2lzc2lvbiwgbGVzcworCSAgb3ZlcmhlYWQgYW5kIG5vIG50cCBqaXR0ZXIuCisKKzIwMDctMTEtMjggMTE6MTE6NTggKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgZ3N0L2dzdG1pbmlvYmplY3QuYzogU29tZSBjbGVhbnVwIGFuZCBjaGVja2luZyBhZ2FpbnN0IGludmFsaWQgZnVuY3Rpb24gcGFyYW1ldGVycy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5jOiAoZ3N0X21pbmlfb2JqZWN0X2dldF90eXBlKSwKKwkgIChnc3RfbWluaV9vYmplY3RfY2xhc3NfaW5pdCksIChnc3RfbWluaV9vYmplY3RfY29weV9kZWZhdWx0KSwKKwkgIChnc3RfbWluaV9vYmplY3RfZmluYWxpemUpLCAoZ3N0X21pbmlfb2JqZWN0X2NvcHkpLAorCSAgKGdzdF9taW5pX29iamVjdF9pc193cml0YWJsZSksIChnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZSksCisJICAoZ3N0X21pbmlfb2JqZWN0X3JlcGxhY2UpLCAocGFyYW1fbWluaV9vYmplY3RfdmFsaWRhdGUpLAorCSAgKGdzdF9wYXJhbV9zcGVjX21pbmlfb2JqZWN0X2dldF90eXBlKToKKwkgIFNvbWUgY2xlYW51cCBhbmQgY2hlY2tpbmcgYWdhaW5zdCBpbnZhbGlkIGZ1bmN0aW9uIHBhcmFtZXRlcnMuCisKKzIwMDctMTEtMjggMTA6NTg6MzkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIFN0YXJ0IG1lcmdpbmcgaW4gdGhlIGVhc3kgYml0cyBvZiAjMzYxMTU1LCB0aGUgbW9ub3RvbmljIGNsb2NrIHBhdGNoLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3RjbG9jay5oOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3lzdGVtY2xvY2suYzogKEdTVF9TVEFSVF9URVNUKSwKKwkgIChnc3Rfc3lzdGVtY2xvY2tfc3VpdGUpOgorCSAgU3RhcnQgbWVyZ2luZyBpbiB0aGUgZWFzeSBiaXRzIG9mICMzNjExNTUsIHRoZSBtb25vdG9uaWMgY2xvY2sgcGF0Y2guCisJICBUaGlzIG9uZSBhZGRzIGEgZmV3IGhhbmR5IG1hY3JvcyB3aXRoIGRvY3MgYW5kIGEgdGVzdHN1aXRlLgorCisyMDA3LTExLTI3IDE4OjQ1OjM4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IEJlIGEgYml0IHNtYXJ0ZXIgd2hlbiBzZWVraW5nLCBsaWtlLCBkb24ndCB0cnkgdG8gZG8gYSBzZWVrIHdoZW4gaXQncyBub3QgbmVlZGVkLiBUaGkuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IChnc3RfZmlsZV9zaW5rX2V2ZW50KToKKwkgIEJlIGEgYml0IHNtYXJ0ZXIgd2hlbiBzZWVraW5nLCBsaWtlLCBkb24ndCB0cnkgdG8gZG8gYSBzZWVrIHdoZW4gaXQncworCSAgbm90IG5lZWRlZC4gVGhpcyBhdm9pZHMgZXJyb3JzIHdoZW4gdGhlIGZpbGUgaXMgbm90IHNlZWthYmxlLgorCSAgRml4ZXMgIzQ5OTc3MS4KKworMjAwNy0xMS0yNiAxMzoxNjowMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBEdWUgdG8gcG9wdWxhciByZXF1ZXN0IHJlbW92ZSBwcmVzZXQgaW50ZXJmYWNlIGFnYWluLiA6LSguCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzLmluOgorCSAgKiBnc3QvTWFrZWZpbGUuYW06CisJICAqIGdzdC9nc3QuaDoKKwkgICogZ3N0L2dzdHByZXNldC5jOgorCSAgKiBnc3QvZ3N0cHJlc2V0Lmg6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkgIER1ZSB0byBwb3B1bGFyIHJlcXVlc3QgcmVtb3ZlIHByZXNldCBpbnRlcmZhY2UgYWdhaW4uIDotKC4KKworMjAwNy0xMS0yMiAyMTozMjowOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICB0b29scy9nc3QtaW5zcGVjdC5jOiBQcmludCAnZGVmYXVsdCB2YWx1ZScgZm9yIGVudW1zIGFuZCBmbGFncyB0b28uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzoKKwkgIFByaW50ICdkZWZhdWx0IHZhbHVlJyBmb3IgZW51bXMgYW5kIGZsYWdzIHRvby4KKworMjAwNy0xMS0yMiAxNTo1OTowMSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBkb2NzL3JhbmRvbS9lbnNvbmljL3Byb2ZpbGluZy50eHQ6IE1vcmUgaWRlYXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9yYW5kb20vZW5zb25pYy9wcm9maWxpbmcudHh0OgorCSAgTW9yZSBpZGVhcy4KKwkgICogZ3N0L2dzdGJpbi5jOgorCSAgRml4IHR5cG8gYW5kIGdpdmUgYmV0dGVyIGxvZyBvdXRwdXQuCisJICAqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6CisJICAqIGdzdC9nc3RkZWJ1Z3V0aWxzLmg6CisJICBNb3JlIGlkZWFzLCBtYWtlIGdyYXBocyBhIGJpdCBzbWFsbGVyIGFuZCBmaXggcGFyYW0gbmFtZSBpbiBtYWNyby4KKworMjAwNy0xMS0yMiAxMzo1NjoyNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0cHJlc2V0LmM6IFRyeSBoYXJkZXIgdG8gdXNlIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBmZ2V0cygpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwcmVzZXQuYzoKKwkgIFRyeSBoYXJkZXIgdG8gdXNlIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBmZ2V0cygpLgorCisyMDA3LTExLTIxIDE2OjA4OjI1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3RwcmVzZXQuYzogRm9yIHRoZXNlcyB0d28gZmdldHMgd2UgaGFuZGxlIHRoZSBlcnJvciBiZWxvdy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cHJlc2V0LmM6CisJICBGb3IgdGhlc2VzIHR3byBmZ2V0cyB3ZSBoYW5kbGUgdGhlIGVycm9yIGJlbG93LgorCisyMDA3LTExLTIxIDEzOjQ3OjUyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IE9ubHkgc2VuZCB1cHN0cmVhbSBldmVudHMgdXBzdHJlYW0uIEZpeGVzICM0OTg3NDYuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19zZW5kX2V2ZW50KToKKwkgIE9ubHkgc2VuZCB1cHN0cmVhbSBldmVudHMgdXBzdHJlYW0uIEZpeGVzICM0OTg3NDYuCisKKzIwMDctMTEtMjEgMTM6Mjc6NTAgKzAwMDAgIExhdXJlbnQgR2xheWFsIDxzcGdsZWdsZUB5YWhvby5mcj4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS4qOiBBZGQgcHJvcGVydHkgdG8gZGlzYWJsZSBoYW5kb2ZmIHNpZ25hbCBlbWlzc2lvbi4gRml4ZXMgIzQ5ODY5NC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IExhdXJlbnQgR2xheWFsIDxzcGdsZWdsZSBhdCB5YWhvbyBkb3QgZnI+CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogKGdzdF9pZGVudGl0eV9jbGFzc19pbml0KSwKKwkgIChnc3RfaWRlbnRpdHlfaW5pdCksIChnc3RfaWRlbnRpdHlfdHJhbnNmb3JtX2lwKSwKKwkgIChnc3RfaWRlbnRpdHlfc2V0X3Byb3BlcnR5KSwgKGdzdF9pZGVudGl0eV9nZXRfcHJvcGVydHkpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5Lmg6CisJICBBZGQgcHJvcGVydHkgdG8gZGlzYWJsZSBoYW5kb2ZmIHNpZ25hbCBlbWlzc2lvbi4gRml4ZXMgIzQ5ODY5NC4KKwkgIEFQSTogR3N0SWRlbnRpdHk6OnNpZ25hbC1oYW5kb2ZmcworCisyMDA3LTExLTIxIDA5OjQ2OjUwICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KKworCSAgZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOiBZZXQgYW5vdGhlciBtaXNzaW5nIGxpYnJhcnkgZm9yIHRoZSB1bmluc3RhbGxlZCBzY3JpcHQgKGZmdCkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNy0xMS0yMSAgSnVsaWVuIE1vdXR0ZSAgPGp1bGllbkBmbHVlbmRvLmNvbT4KKwkgICogZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOiBZZXQgYW5vdGhlciBtaXNzaW5nIGxpYnJhcnkgZm9yIHRoZQorCSAgdW5pbnN0YWxsZWQgc2NyaXB0IChmZnQpCisKKzIwMDctMTEtMjEgMDA6MjQ6MDQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBkb2NzL2ZhcS9kZXZlbG9waW5nLnhtbDogQWRkIGEgcXVlc3Rpb24gYWJvdXQgaG93IHRvIHN1Ym1pdCBuZXcgdHJhbnNsYXRpb25zLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZmFxL2RldmVsb3BpbmcueG1sOgorCSAgQWRkIGEgcXVlc3Rpb24gYWJvdXQgaG93IHRvIHN1Ym1pdCBuZXcgdHJhbnNsYXRpb25zLgorCSAgKiBkb2NzL3JhbmRvbS9yZWxlYXNlOgorCSAgVXBkYXRlIHRoZSBjb250YWN0IGVtYWlsIGFkZHJlc3MgZm9yIHRoZSBUcmFuc2xhdGlvbiBQcm9qZWN0CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKKwkgIFRoZSBwYXJlbnRfY2xhc3MgZm9yIGZkc3JjIGlzIHB1c2hzcmMsIG5vdCBHc3RFbGVtZW50LgorCisyMDA3LTExLTIwIDE2OjM0OjM4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3RwcmVzZXQuYzogUGx1ZyBhIGxlYWsgYW5kIGZpeCBzYXZpbmcuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHByZXNldC5jOgorCSAgUGx1ZyBhIGxlYWsgYW5kIGZpeCBzYXZpbmcuCisKKzIwMDctMTEtMjAgMTY6MTA6MjEgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogQWRkIG5ldyBnc3RfcHJlc2V0X19nZXRfcHJvcGVydHlfbmFtZXMoKSBmdW5jdGlvbiB0byB0aGUgZG9jcyB0byBmaXggdGhlIGJ1aWxkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICBBZGQgbmV3IGdzdF9wcmVzZXRfX2dldF9wcm9wZXJ0eV9uYW1lcygpIGZ1bmN0aW9uIHRvIHRoZSBkb2NzCisJICB0byBmaXggdGhlIGJ1aWxkLgorCisyMDA3LTExLTIwIDE1OjQ2OjM5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3RwcmVzZXQuKjogQ2hhbmdlIF9nZXRfcHJlc2V0X25hbWVzIEFQSSB0byByZXR1cm4gYSBzdHJ2IHdpdGggY29waWVzLiBBZGQgX2dldF9wcm9wZXJ0eV9uYW1lcyB0byBhbGxvdyBpbXBsZW1lbi4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwcmVzZXQuYzoKKwkgICogZ3N0L2dzdHByZXNldC5oOgorCSAgQ2hhbmdlIF9nZXRfcHJlc2V0X25hbWVzIEFQSSB0byByZXR1cm4gYSBzdHJ2IHdpdGggY29waWVzLiBBZGQKKwkgIF9nZXRfcHJvcGVydHlfbmFtZXMgdG8gYWxsb3cgaW1wbGVtZW50YXRpb25zIHRvIGZpbHRlciBhbmQgcHJvdmlkZQorCSAgZ29vZCBkZWZhdWx0IGltcGxlbWVudGF0aW9uLgorCisyMDA3LTExLTIwIDExOjQ2OjM1ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KKworCSAgZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOiBBZGQgYW5vdGhlciBsaWJyYXJ5IHRvIHRoZSB1bmluc3RhbGxlZCBzY3JpcHQgKHNkcCkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDctMTEtMjAgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KKwkgICogZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOiBBZGQgYW5vdGhlciBsaWJyYXJ5IHRvIHRoZSB1bmluc3RhbGxlZAorCSAgc2NyaXB0IChzZHApLgorCisyMDA3LTExLTE5IDE1OjIzOjQ0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3RwcmVzZXQuYzogTW9yZSBjbGVhbnVwcywgZG9jcywgYW5kIFRPRE9zIGZyb20gY29tbWVudHMgdGhhdCBub3cgc2xvd2x5IGNvbWUgaW4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHByZXNldC5jOgorCSAgTW9yZSBjbGVhbnVwcywgZG9jcywgYW5kIFRPRE9zIGZyb20gY29tbWVudHMgdGhhdCBub3cgc2xvd2x5IGNvbWUgaW4uCisKKzIwMDctMTEtMTkgMTQ6Mzg6NDkgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgorCisJICBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6IEFkZCBuZXcgYmFzZSBsaWJyYXJpZXMgaW4gdGhlIExEIHNlYXJjaCBwYXRoLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA3LTExLTE5ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+CisJICAqIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDogQWRkIG5ldyBiYXNlIGxpYnJhcmllcyBpbiB0aGUgTEQKKwkgIHNlYXJjaCBwYXRoLgorCisyMDA3LTExLTE5IDExOjU0OjEzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3RwcmVzZXQuYzogRml4IGJvZ3VzIHdhcm5pbmcgYW5kIG1ha2UgdGhlIHByb3BlcnR5IHR5cGUgc3BlY2lmaWMgY29kZSBtb3JlIHNpbWlsYXIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHByZXNldC5jOgorCSAgRml4IGJvZ3VzIHdhcm5pbmcgYW5kIG1ha2UgdGhlIHByb3BlcnR5IHR5cGUgc3BlY2lmaWMgY29kZSBtb3JlCisJICBzaW1pbGFyLgorCisyMDA3LTExLTE5IDA5OjMzOjA1ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KKworCSAgZ3N0L2dzdHByZXNldC5jOiBNYWtlIGl0IGJ1aWxkIG9uIE9TIFguCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDctMTEtMTkgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KKwkgICogZ3N0L2dzdHByZXNldC5jOiAoZ3N0X3ByZXNldF9kZWZhdWx0X2NyZWF0ZV9wcmVzZXQpOiBNYWtlCisJICBpdCBidWlsZCBvbiBPUyBYLgorCisyMDA3LTExLTE5IDA4OjUwOjA0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YmluLmM6IENoYW5nZSBlbWFpbCwgY2xlYW51cHMgYWRkIHNvbWUgbW9yZSBkZWJ1ZyBhbmQgY29tbWVudHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9jbGFzc19pbml0KSwgKGdzdF9iaW5faW5pdCksCisJICAoZ3N0X2Jpbl9hZGRfZnVuYyksIChnc3RfYmluX3JlbW92ZV9mdW5jKSwKKwkgIChnc3RfYmluX2NoYW5nZV9zdGF0ZV9mdW5jKSwgKGdzdF9iaW5fY29udGludWVfZnVuYyk6CisJICBDaGFuZ2UgZW1haWwsIGNsZWFudXBzIGFkZCBzb21lIG1vcmUgZGVidWcgYW5kIGNvbW1lbnRzLgorCSAgQWxzbyBzZXQgYnVzIGFuZCBjbG9jayBvbiBuZXcgZWxlbWVudHMgd2hlbiB0aGUgcGlwZWxpbmUgd2FzIGluIGVycm9yLgorCisyMDA3LTExLTE4IDE5OjMwOjEwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC86IEZpeCBidWlsZCB3aXRoIC0tZGlzYWJsZS1nc3QtZGVidWcuIEZpeGVzICM0OTc4NTkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOgorCSAgKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgorCSAgRml4IGJ1aWxkIHdpdGggLS1kaXNhYmxlLWdzdC1kZWJ1Zy4gRml4ZXMgIzQ5Nzg1OS4KKwkgIFNwb3R0ZWQgYnkgU2FtZWVyIE5haWsuCisKKzIwMDctMTEtMTcgMTc6NTA6MjEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdGV2ZW50LmM6IExpdHRsZSBkb2N1bWVudGF0aW9uIGltcHJvdm1lbnQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGV2ZW50LmM6CisJICBMaXR0bGUgZG9jdW1lbnRhdGlvbiBpbXByb3ZtZW50LgorCSAgKiBnc3QvZ3N0cHJlc2V0LmM6CisJICBNb3JlIFRPRE8gY2xlYW51cHMuIFJlbW92ZSBjKysgY29tbWVudHMuCisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgorCSAgQWRkIFRPRE8gYW5kIHVzZSBxdWFyayBmcm9tIHN0YXRpYyBzdHJpbmcuCisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZXNzYWdlLmM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkgIFVzZSBxdWFyayBmcm9tIHN0YXRpYyBzdHJpbmcuCisKKzIwMDctMTEtMTcgMTc6MjQ6NTMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdHByZXNldC5jOiBBZGQgc29tZSBjb21tZW50cyBhbmQgVE9ET3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHByZXNldC5jOgorCSAgQWRkIHNvbWUgY29tbWVudHMgYW5kIFRPRE9zLgorCSAgKiBnc3QvZ3N0cHJlc2V0Lmg6CisJICBBZGQgcGFkZGluZyBmb3IgZnV0dXJlIGNoYW5nZXMuCisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkgIEltcGxlbWVudCB0aGUgaWZhY2UuCisKKzIwMDctMTEtMTcgMTY6NDM6MTIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgQWRkIHRoZSBwcmVzZXQgaW50ZXJmYWNlIChGaXhlcyAjMzk2Nzc5KS4gRG8gc29tZSBkb2MgY2xlYW51cHMgYWxvbmcuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzLmluOgorCSAgKiBnc3QvTWFrZWZpbGUuYW06CisJICAqIGdzdC9nc3QuaDoKKwkgICogZ3N0L2dzdHByZXNldC5jOgorCSAgKiBnc3QvZ3N0cHJlc2V0Lmg6CisJICBBZGQgdGhlIHByZXNldCBpbnRlcmZhY2UgKEZpeGVzICMzOTY3NzkpLiBEbyBzb21lIGRvYyBjbGVhbnVwcyBhbG9uZy4KKworMjAwNy0xMS0xNiAwMDoyMzoxOCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGNvbmZpZ3VyZS5hYzogQmFjayB0byBDVlMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICBCYWNrIHRvIENWUworCis9PT0gcmVsZWFzZSAwLjEwLjE1ID09PQorCisyMDA3LTExLTE2IDAwOjA3OjU0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgY29uZmlndXJlLmFjOiByZWxlYXNpbmcgMC4xMC4xNSwgIk9jdG9iZXIiCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgID09PSByZWxlYXNlIDAuMTAuMTUgPT09CisJICAyMDA3LTExLTE1ICBKYW4gU2NobWlkdCA8amFuLnNjaG1pZHRAc3VuLmNvbT4KKwkgICogY29uZmlndXJlLmFjOgorCSAgcmVsZWFzaW5nIDAuMTAuMTUsICJPY3RvYmVyIgorCisyMDA3LTExLTE1IDIzOjMxOjExICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSogcG8vYWYucG86CisJKiBwby9hei5wbzoKKwkqIHBvL2JlLnBvOgorCSogcG8vYmcucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGEucG86CisJKiBwby9kZS5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZXMucG86CisJKiBwby9maS5wbzoKKwkqIHBvL2ZyLnBvOgorCSogcG8vaHUucG86CisJKiBwby9pdC5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9wbC5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vcncucG86CisJKiBwby9zay5wbzoKKwkqIHBvL3NxLnBvOgorCSogcG8vc3IucG86CisJKiBwby9zdi5wbzoKKwkqIHBvL3RyLnBvOgorCSogcG8vdWsucG86CisJKiBwby92aS5wbzoKKwkqIHBvL3poX0NOLnBvOgorCSogcG8vemhfVFcucG86CisJICBVcGRhdGUgLnBvIGZpbGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFVwZGF0ZSAucG8gZmlsZXMKKworMjAwNy0xMS0xNCAxMjoyNDowOSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIHdpbjMyL3ZzNi9saWJnc3RyZWFtZXIuZHNwOiBDb252ZXJ0IGxpbmUgZW5kaW5ncyBiYWNrIHRvIERPUy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB3aW4zMi92czYvbGliZ3N0cmVhbWVyLmRzcDoKKwkgIENvbnZlcnQgbGluZSBlbmRpbmdzIGJhY2sgdG8gRE9TLgorCisyMDA3LTExLTEzIDExOjMwOjA5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvOiBVcGRhdGUgZmFzdCB0YWdyZWFkaW5nIGRyYWZ0IGFuZCBwZXJmb3JtYW5jZSBwcm9maWxpbmcgaWRlYXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vZHJhZnQtdGFncmVhZGluZy50eHQ6CisJICAqIGRvY3MvcmFuZG9tL2Vuc29uaWMvcHJvZmlsaW5nLnR4dDoKKwkgIFVwZGF0ZSBmYXN0IHRhZ3JlYWRpbmcgZHJhZnQgYW5kIHBlcmZvcm1hbmNlIHByb2ZpbGluZyBpZGVhcy4KKworMjAwNy0xMS0wOSAxNDowNTowMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBEb24ndCBob2xkIHRoZSBvYmplY3QgbG9jayB3aGVuIHVucmVmZmluZyBhIGJ1ZmZlciBiZWNhdXNlIGl0IGNvdWxkIGNhdXNlIGEgZGVhZGxvY2sgd2hlLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19zZXRfbGFzdF9idWZmZXIpOgorCSAgRG9uJ3QgaG9sZCB0aGUgb2JqZWN0IGxvY2sgd2hlbiB1bnJlZmZpbmcgYSBidWZmZXIgYmVjYXVzZSBpdCBjb3VsZAorCSAgY2F1c2UgYSBkZWFkbG9jayB3aGVuIHRoZSBmaW5hbGl6ZSBmdW5jdGlvbiB3YW50cyB0byBncmFiIHRoZSBvYmplY3QKKwkgIGxvY2sgdG9vLiBGaXhlcyAjNDk1MTMzLgorCisyMDA3LTExLTA5IDExOjU2OjQxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0c2VnbWVudC5jOiBBbHNvIGFjY3VtdWxhdGUgdGltZSBjb3JyZWN0bHkgd2hlbiBkb2luZyByZXZlcnNlIHBsYXliYWNrLiBGaXhlcyAjNDg4MjAxLAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RzZWdtZW50LmM6IChnc3Rfc2VnbWVudF9zZXRfbmV3c2VnbWVudF9mdWxsKSwKKwkgIChnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSksIChnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUpOgorCSAgQWxzbyBhY2N1bXVsYXRlIHRpbWUgY29ycmVjdGx5IHdoZW4gZG9pbmcgcmV2ZXJzZSBwbGF5YmFjay4gRml4ZXMKKwkgICM0ODgyMDEsCisJICBXaGVuIGNvbnZlcnRpbmcgdG8gcnVubmluZyBhbmQgc3RyZWFtIHRpbWUsIHVzZSBkZWZhdWx0IHZhbHVlcyBmb3IKKwkgIHN0YXJ0L3N0b3AvdGltZS9hY2N1bSB3aGVuIGNvbXBhcmluZyBkaWZmZXJlbnQgZm9ybWF0cy4gRml4ZXMgIzQ5NDI0NS4KKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19nZXRfc3luY190aW1lcyk6CisJICBEbyBydW5uaW5nL3N0cmVhbSB0aW1lIGluIFRJTUUgZm9ybWF0LgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c2VnbWVudC5jOiAoR1NUX1NUQVJUX1RFU1QpLAorCSAgKGdzdF9zZWdtZW50X3N1aXRlKToKKwkgIDIgbmV3IHVuaXQgdGVzdHMgZm9yIHNlZ21lbnQgYWNjdW11bGF0aW9uLgorCisyMDA3LTExLTA3IDE1OjUzOjUyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvOiBNb3ZlIGdldGVudigpIGJhY2sgaW50byBnc3RfaW5pdCwgc28gZXZlcnlvbmUgY2FuIGxpdmUgaGFwcGlseSBldmVyIGFmdGVyLiBNYWtlIHN1cmUgdGhlIHN5bWJvbCBpc24ndCBleHBvcnRlZCAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0LmM6IChpbml0X3ByZSk6CisJICAqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6IChwcml2X2dzdF9kdW1wX2RvdF9kaXIpLCAoZGVidWdfZHVtcF9lbGVtZW50KSwKKwkgIChfZ3N0X2RlYnVnX2Jpbl90b19kb3RfZmlsZSk6CisJICBNb3ZlIGdldGVudigpIGJhY2sgaW50byBnc3RfaW5pdCwgc28gZXZlcnlvbmUgY2FuIGxpdmUgaGFwcGlseQorCSAgZXZlciBhZnRlci4gTWFrZSBzdXJlIHRoZSBzeW1ib2wgaXNuJ3QgZXhwb3J0ZWQgdGhvdWdoLgorCisyMDA3LTExLTA2IDIzOjE3OjA5ICswMDAwICBTZWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KKworCSAgd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy4qOiBVcGRhdGUgZW51bSB0eXBlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IFNlYmFzdGllbiBNb3V0dGUgIDxzZWJhc3RpZW4gbW91dHRlIG5ldD4KKwkgICogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jOgorCSAgKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmg6CisJICBVcGRhdGUgZW51bSB0eXBlcy4KKwkgICogd2luMzIvdnM2L2xpYmdzdHJlYW1lci5kc3A6CisJICBVcGRhdGUgdnM2IHByb2plY3QgZmlsZXMgKCM0OTQzNDMpLgorCisyMDA3LTExLTA2IDE3OjE4OjE0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogVW5pZnkgZmx1c2hpbmcgY29kZSwgcmVtb3ZlIHNvbWUgb2xkIHVubG9jayBjb2RlIHRoYXQgaXMgbm8gbG9uZ2VyIHVzZWQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfZGVmYXVsdF9xdWVyeSksCisJICAoZ3N0X2Jhc2Vfc3JjX3BlcmZvcm1fc2VlayksIChnc3RfYmFzZV9zcmNfZGVmYXVsdF9ldmVudCksCisJICAoZ3N0X2Jhc2Vfc3JjX3NldF9mbHVzaGluZyksIChnc3RfYmFzZV9zcmNfYWN0aXZhdGVfcHVzaCksCisJICAoZ3N0X2Jhc2Vfc3JjX2FjdGl2YXRlX3B1bGwpOgorCSAgVW5pZnkgZmx1c2hpbmcgY29kZSwgcmVtb3ZlIHNvbWUgb2xkIHVubG9jayBjb2RlIHRoYXQgaXMgbm8gbG9uZ2VyIHVzZWQuCisJICBUYWtlIHRoZSBzdHJlYW1pbmcgbG9jayB3aGVuIHNlZWtpbmcgdG8gYXZvaWQgcmFjZXMuIEZpeGVzICM0OTI3MjkuCisJICBBZGRlZCBzb21lIG1vcmUgY29tbWVudHMuCisKKzIwMDctMTEtMDYgMTU6MTA6MzYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3QuYzogTWFrZSAgX2dzdF9kaXNhYmxlX3NlZ3RyYXAgc3RhdGljLCBpdCdzIG9ubHkgdXNlZCBpbiBnc3RwbHVnaW4uYyBhbmQgd2UgY2FuIHVzZSBnc3Rfc2VndHJhcF9pc19lbmFibGVkKCkgdC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3QuYzogKF9nc3RfZGlzYWJsZV9zZWd0cmFwKToKKwkgIE1ha2UgIF9nc3RfZGlzYWJsZV9zZWd0cmFwIHN0YXRpYywgaXQncyBvbmx5IHVzZWQgaW4gZ3N0cGx1Z2luLmMgYW5kCisJICB3ZSBjYW4gdXNlIGdzdF9zZWd0cmFwX2lzX2VuYWJsZWQoKSB0aGVyZSBub3cgdGhhdCB3ZSBoYXZlIHRoYXQgQVBJLgorCSAgTW92ZSBfZ3N0X2RlYnVnX2R1bXBfZG90X2RpciBpbnRvIGdzdGRlYnVndXRpbHMuYywgdGhlcmUncyBubyByZWFzb24KKwkgIHRvIGRvIHRoZSBnZXRlbnYgaGVyZSAoYW5kIGV4cG9ydCB0aGUgdmFyaWFibGUpLgorCSAgKiBnc3QvZ3N0ZGVidWd1dGlscy5jOiAoZGVidWdfZHVtcF9lbGVtZW50KSwKKwkgIChfZ3N0X2RlYnVnX2Jpbl90b19kb3RfZmlsZSksIChfZ3N0X2RlYnVnX2Jpbl90b19kb3RfZmlsZV93aXRoX3RzKToKKwkgIERvbid0IHVzZSBWTEFzIHdoaWNoIGlzIGEgQzk5aXNtIGFuZCB0aHJvd3Mgb2ZmIE1TVkMgKCM0OTM5ODMpLgorCSAgKiBnc3QvZ3N0aW5mby5jOiAoX3ByaXZfZ3N0X2luZm9fc3RhcnRfdGltZSksIChfZ3N0X2RlYnVnX2luaXQpLAorCSAgKGdzdF9kZWJ1Z19sb2dfZGVmYXVsdCk6CisJICBSZW5hbWUgX2dzdF9pbmZvX3N0YXJ0X3RpbWUgdG8gcHJpdl9nc3RfaW5mb19zdGFydF90aW1lIHNvIGl0CisJICBkb2Vzbid0IGdldCBleHBvcnRlZCAod2FzIG5ldmVyIGluIGFueSBoZWFkZXIpLgorCSAgKiBnc3QvZ3N0cGx1Z2luLmM6IChfZ3N0X3BsdWdpbl9mYXVsdF9oYW5kbGVyX3NldHVwKSwKKwkgIChnc3RfcGx1Z2luX2xvYWRpbmdfbXV0ZXgpOgorCSAgTWFrZSBzdGF0aWMgbXV0ZXggZ3N0X3BsdWdpbl9sb2FkaW5nX211dGV4IHJlYWxseSBzdGF0aWMgKHdhcyBuZXZlcgorCSAgaW4gYW55IGhlYWRlciksIGFuZCB1c2UgZ3N0X3NlZ3RyYXBfaXNfZW5hYmxlZCgpIGluc3RlYWQgb2YKKwkgIF9nc3RfZGlzYWJsZV9zZWd0cmFwLgorCSAgKiBnc3QvZ3N0dHJhY2UuYzogKF9nc3RfdHJhY2VfZGVmYXVsdCk6CisJICBNYWtlIGxvY2FsIF9nc3RfdHJhY2VfZGVmYXVsdCBzdGF0aWMgKHdhcyBuZXZlciBpbiBhbnkgaGVhZGVyKS4KKworMjAwNy0xMS0wNiAxNDo0MzoxNCArMDAwMCAgT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzIDxvbGUuYW5kcmUucmF2bmFzQHRhbmRiZXJnLmNvbT4KKworCSAgd2luMzIvY29tbW9uLzogQWRkIG1vcmUgbWlzc2luZyBzeW1ib2xzLCByZW1vdmUgc29tZSBkdXBsaWNhdGVzLCBhbmQgc29ydCBhcyB0aGUgJ3NvcnQnIGNvbW1hbmQgc29ydHMgaXQgKHBhcnRpYWxseSBmLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMgIDxvbGUuYW5kcmUucmF2bmFzQHRhbmRiZXJnLmNvbT4KKwkgICogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0Y29udHJvbGxlci5kZWY6CisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RkYXRhcHJvdG9jb2wuZGVmOgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0bmV0LmRlZjoKKwkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBBZGQgbW9yZSBtaXNzaW5nIHN5bWJvbHMsIHJlbW92ZSBzb21lIGR1cGxpY2F0ZXMsIGFuZCBzb3J0CisJICBhcyB0aGUgJ3NvcnQnIGNvbW1hbmQgc29ydHMgaXQgKHBhcnRpYWxseSBmaXhlcyAjNDkzOTgzKS4KKworMjAwNy0xMS0wNiAxMjoyODoxNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGVsZW1lbnQuYzogT25seSBjaGFuZ2UgdGhlIHN0YXRlIGNvb2tpZSBpZiBhIGRpZmZlcmVudCBzdGF0ZSB3YXMgc2V0IG9uIHRoZSBlbGVtZW50LiBTZWUgIzQ5MjcyOS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlX2Z1bmMpOgorCSAgT25seSBjaGFuZ2UgdGhlIHN0YXRlIGNvb2tpZSBpZiBhIGRpZmZlcmVudCBzdGF0ZSB3YXMgc2V0IG9uIHRoZQorCSAgZWxlbWVudC4gU2VlICM0OTI3MjkuCisKKzIwMDctMTEtMDYgMTE6NDE6MzIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3R2YWx1ZS5jOiBSZW1vdmUgdW51c2VkIGFuZCB1bmluaXRpYWxpc2VkIHR5cGUgdmFyaWFibGVzIHRoYXQgd2VyZSBzdGlsbCBleHBvcnRlZCBmb3Igc29tZSByZWFzb24gKHRoZXkgd2VyZSBuZS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R2YWx1ZS5jOgorCSAgUmVtb3ZlIHVudXNlZCBhbmQgdW5pbml0aWFsaXNlZCB0eXBlIHZhcmlhYmxlcyB0aGF0IHdlcmUgc3RpbGwKKwkgIGV4cG9ydGVkIGZvciBzb21lIHJlYXNvbiAodGhleSB3ZXJlIG5ldmVyIGluIGFueSBoZWFkZXIgZmlsZXMKKwkgIHRob3VnaCkuCisKKzIwMDctMTEtMDYgMTA6MzM6MjIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogRG9uJ3QgdHJ5IHRvIHJlcG9ydCBhIDAgcG9zaXRpb24gd2hlbiB3ZSBkb24ndCBrbm93LCByZXR1cm4gLTEgYW5kIEZBTFNFIGluc3RlYWQuIFRoaXMgbS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZ2V0X3N5bmNfdGltZXMpLAorCSAgKGdzdF9iYXNlX3NpbmtfZG9fc3luYyksIChnc3RfYmFzZV9zaW5rX3ByZXJvbGxfb2JqZWN0KSwKKwkgIChnc3RfYmFzZV9zaW5rX2V2ZW50KSwgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uX2xhc3QpLAorCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uX3BhdXNlZCksIChnc3RfYmFzZV9zaW5rX2dldF9wb3NpdGlvbiksCisJICAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgorCSAgRG9uJ3QgdHJ5IHRvIHJlcG9ydCBhIDAgcG9zaXRpb24gd2hlbiB3ZSBkb24ndCBrbm93LCByZXR1cm4gLTEgYW5kIEZBTFNFCisJICBpbnN0ZWFkLiBUaGlzIG1vc3RseSBoYXBwZW5zIHdoZW4gd2UgYXJlIHByZXJvbGxpbmcuCisJICBNYWtlIHN1cmUgd2UgY2FuIHJlcG9ydCB0aGUgcmlnaHQgcG9zaXRpb24gYmVmb3JlIHdlIHBvc3QgdGhlIEFTWU5DX0RPTkUKKwkgIG1lc3NhZ2Ugc28gdGhhdCBhIG1lc3NhZ2UgaGFuZGxlciBjYW4gcXVlcnkgcG9zaXRpb24gd2l0aG91dCByYWNlcy4KKwkgICogdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jOiAoc2VuZF9lb3MpLCAoR1NUX1NUQVJUX1RFU1QpLAorCSAgKGFzeW5jX2RvbmVfaGFuZG9mZiksIChhc3luY19kb25lX2Z1bmMpLCAoc2VuZF9idWZmZXIpLAorCSAgKGFzeW5jX2RvbmVfZW9zX2Z1bmMpLCAoZ3N0X3NpbmtzX3N1aXRlKToKKwkgIEFkZCB0d28gdGVzdHMgZm9yIHRoZSBhYm92ZS4KKworMjAwNy0xMS0wNiAxMDoyMTowMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgTUFJTlRBSU5FUlM6IFVwZGF0ZSB3aXRoIG5ldyBlbWFpbCBhZGRyZXNzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIE1BSU5UQUlORVJTOgorCSAgVXBkYXRlIHdpdGggbmV3IGVtYWlsIGFkZHJlc3MuCisJICAqIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6CisJICBBZGQgc29tZSBtb3JlIGluZm8gYWJvdXQgZnV0dXJlIHBhZC1ibG9jayBhbmQgbmVnb3RpYXRpb24gY2hhbmdlcy4KKwkgICogZG9jcy9kZXNpZ24vcGFydC1idWZmZXJpbmcudHh0OgorCSAgQWRkIHNvbWUgaWRlYXMgYWJvdXQgYnVmZmVyaW5nIHJlcG9ydGluZy4KKworMjAwNy0xMS0wNiAxMDowMTowNyArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgorCisJKiBNYWtlZmlsZS5hbToKKwkqIGNvbW1vbjoKKwkqIGdzdHJlYW1lci5zcGVjLmluOgorCSAgdXBkYXRlIFNQRUMgZmlsZSB3aXRoIGxhdGVzdCBjaGFuZ2VzLCBhbHNvIGFkZCBNQUlOVEFJTkVSUyBmaWxlIHRvIEVYVFJBX0RJU1QsIHRoZSBvbW1pc3Npb24gb2YgdGhpcyBjYXVzZSBhIHdlaXJkIFJQLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHVwZGF0ZSBTUEVDIGZpbGUgd2l0aCBsYXRlc3QgY2hhbmdlcywgYWxzbyBhZGQgTUFJTlRBSU5FUlMgZmlsZSB0byBFWFRSQV9ESVNULCB0aGUgb21taXNzaW9uIG9mIHRoaXMgY2F1c2UgYSB3ZWlyZCBSUE0gYnVpbGQgZXJyb3Igb24gRkM4CisKKzIwMDctMTEtMDYgMDA6NTk6NTQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICB0ZXN0cy9jaGVjay9nc3QvZ3N0b2JqZWN0LmM6IERpc2FibGUgc2lsbHkgcmFjeSB0ZXN0IHRoYXQgYWx3YXlzIGZhaWxzIG9uIHRoaXMgY29tYmluYXRpb24gb2YgQ1BVIGFuZCBrZXJuZWwuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdG9iamVjdC5jOgorCSAgRGlzYWJsZSBzaWxseSByYWN5IHRlc3QgdGhhdCBhbHdheXMgZmFpbHMgb24gdGhpcyBjb21iaW5hdGlvbiBvZiBDUFUKKwkgIGFuZCBrZXJuZWwuCisKKzIwMDctMTEtMDQgMTA6MTY6MzggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkqIENoYW5nZUxvZzoKKwkgIENoYW5nZUxvZyBzdXJnZXJ5OiBtZW50aW9uIGJ1ZyBudW1iZXIKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgQ2hhbmdlTG9nIHN1cmdlcnk6IG1lbnRpb24gYnVnIG51bWJlcgorCisyMDA3LTExLTA0IDEwOjEzOjMzICswMDAwICBNdXJyYXkgQ3VtbWluZyA8bXVycmF5Y0BtdXJyYXljLmNvbT4KKworCSAgZ3N0L2dzdG9iamVjdC5jOiBDb3JyZWN0ZWQgdGhlIHJlZ2lzdHJhdGlvbiBvZiB0aGUgcGFyZW50LXNldCBhbmQgcGFyZW50LXVuc2V0IHNpZ25hbHM6IFRoZSBwYXJhbWV0ZXIgaXMgYSBHc3RPYmplY3QsLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBNdXJyYXkgQ3VtbWluZyAgPG11cnJheWNAbXVycmF5Yy5jb20+CisJICAqIGdzdC9nc3RvYmplY3QuYzoKKwkgIENvcnJlY3RlZCB0aGUgcmVnaXN0cmF0aW9uIG9mIHRoZSBwYXJlbnQtc2V0IGFuZCBwYXJlbnQtdW5zZXQKKwkgIHNpZ25hbHM6IFRoZSBwYXJhbWV0ZXIgaXMgYSBHc3RPYmplY3QsIG5vdCBhIEdPYmplY3QuCisKKzIwMDctMTEtMDIgMTg6MzU6MzcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC86IE1vdmUgZGVjbGFyYXRpb24gb2YgcHJpdmF0ZSBfZ3N0X2Zvb19pbml0aWFsaXplKCkgZnVuY3Rpb25zIGludG8gb3VyIHByaXZhdGUgaGVhZGVyIGZpbGUgd2hlcmUgdGhleSBzaG91bGQgaGF2ZS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RfcHJpdmF0ZS5oOgorCSAgKiBnc3QvZ3N0YnVmZmVyLmg6CisJICAqIGdzdC9nc3RldmVudC5oOgorCSAgKiBnc3QvZ3N0Zm9ybWF0Lmg6CisJICAqIGdzdC9nc3RtZXNzYWdlLmg6CisJICAqIGdzdC9nc3RwbHVnaW4uaDoKKwkgICogZ3N0L2dzdHF1ZXJ5Lmg6CisJICAqIGdzdC9nc3R0YWdsaXN0Lmg6CisJICAqIGdzdC9nc3R2YWx1ZS5oOgorCSAgTW92ZSBkZWNsYXJhdGlvbiBvZiBwcml2YXRlIF9nc3RfZm9vX2luaXRpYWxpemUoKSBmdW5jdGlvbnMgaW50bworCSAgb3VyIHByaXZhdGUgaGVhZGVyIGZpbGUgd2hlcmUgdGhleSBzaG91bGQgaGF2ZSBiZWVuIGFsbCBhbG9uZy4KKworMjAwNy0xMS0wMiAxNzo0MzoyNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3RrLWRvYyBmaXhlczsgdHJhaWxpbmctY29tbWEtaW4tZW51bSBmaXguCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdGRlYnVndXRpbHMuaDoKKwkgICogZ3N0L2dzdHhtbC5oOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6CisJICBndGstZG9jIGZpeGVzOyB0cmFpbGluZy1jb21tYS1pbi1lbnVtIGZpeC4KKworMjAwNy0xMS0wMiAxNjoyNzo1NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdC5jOiBDbGVhbiB1cCBvbiBkZWluaXQgKG5vdCB0aGUgZXh0ZXJuYWwgb25lcyB0aG91Z2gsIGRvZXNuJ3Qgc2VlbSB0byBiZSBuZWVkZWQgZm9yIHNvbWUgcmVhc29uKS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0LmM6IChnc3RfZGVpbml0KToKKwkgIENsZWFuIHVwIG9uIGRlaW5pdCAobm90IHRoZSBleHRlcm5hbCBvbmVzIHRob3VnaCwgZG9lc24ndCBzZWVtIHRvIGJlCisJICBuZWVkZWQgZm9yIHNvbWUgcmVhc29uKS4KKworMjAwNy0xMS0wMSAyMzo1MTo1NSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdGluZm8uaDogUmVtb3ZlIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSBmb3IgTVNWQyB0aGF0IHdhcyBjb3BpZWQgb3ZlciBpbnRvIGNvcmUgZnJvbSBhIHBsdWdpbiwgb2J2aW91c2x5IHdpdGhvdXQgLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGluZm8uaDogKEdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4pOgorCSAgUmVtb3ZlIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSBmb3IgTVNWQyB0aGF0IHdhcyBjb3BpZWQgb3ZlciBpbnRvIGNvcmUKKwkgIGZyb20gYSBwbHVnaW4sIG9idmlvdXNseSB3aXRob3V0IGV2ZXIgaGF2aW5nIGJlZW4gdGVzdGVkIChub3RlIHRoZQorCSAgc2luZ2xlIHVuZGVyc2NvcmUgaW4gX2RlY2xzcGVjIGluIHRoZSBpbml0aWFsIGNvbW1pdCksIGFuZCB0aGF0IGRvZXNuJ3QKKwkgIHJlYWxseSBtYWtlIHNlbnNlLiAgU2VlICM0OTIwNzcuCisKKzIwMDctMTEtMDEgMjE6NTA6MDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdfdHlwZV9jbGFzc19yZWYoKSBvdGhlciB0eXBlcyBhcyB3ZWxsLCBzZWUgIzM0OTQxMCBhbmQgIzY0NzY0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3QuYzogKGluaXRfcG9zdCk6CisJICAqIGdzdC9nc3RldmVudC5jOiAoX2dzdF9ldmVudF9pbml0aWFsaXplKToKKwkgICogZ3N0L2dzdHF1ZXJ5LmM6IChfZ3N0X3F1ZXJ5X2luaXRpYWxpemUpOgorCSAgKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmMgKGdzdF9kcF9pbml0KToKKwkgIGdfdHlwZV9jbGFzc19yZWYoKSBvdGhlciB0eXBlcyBhcyB3ZWxsLCBzZWUgIzM0OTQxMCBhbmQgIzY0NzY0LgorCSAgKiBnc3QvZ3N0YnVmZmVyLmM6IChfZ3N0X2J1ZmZlcl9pbml0aWFsaXplKToKKwkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKF9nc3RfbWVzc2FnZV9pbml0aWFsaXplKToKKwkgIFNpbXBsaWZ5IGV4aXN0aW5nIGdfdHlwZV9jbGFzc19yZWYoKS4KKworMjAwNy0xMS0wMSAyMDoxMDo0OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdGZvcm1hdC5jOiBnX3R5cGVfY2xhc3NfcmVmKCkgb3VyIEdzdEZvcm1hdCB0eXBlIHRvIG1ha2Ugc3VyZSB3ZSBhdm9pZCB0aGUgdGhyZWFkLXVuc2FmZSBiaXRzIG9mIHRoZSBHT2JqZWN0L0dULi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGZvcm1hdC5jOiAoX2dzdF9mb3JtYXRfaW5pdGlhbGl6ZSk6CisJICBnX3R5cGVfY2xhc3NfcmVmKCkgb3VyIEdzdEZvcm1hdCB0eXBlIHRvIG1ha2Ugc3VyZSB3ZSBhdm9pZCB0aGUKKwkgIHRocmVhZC11bnNhZmUgYml0cyBvZiB0aGUgR09iamVjdC9HVHlwZSBzeXN0ZW0sIGllLiBidWcgIzM0OTQxMCBhbmQKKwkgIGJ1ZyAjNjQ3NjQuIFNob3VsZCBmaXggaW50ZXJtaXR0ZW50IHRlZSB1bml0IHRlc3QgZmFpbHVyZXMgKCM0NzQ4MjMpLgorCisyMDA3LTExLTAxIDE5OjE5OjEwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICB0ZXN0cy9jaGVjay9lbGVtZW50cy90ZWUuYzogU2ltcGxpZnksIHNpbXBsaWZ5LCBzaW1wbGlmeSAtIG9yIG5vdC4gIFJld3JpdGUgdW5pdCB0ZXN0IG5vdCB0byB1c2UgZ3N0X3BhcnNlX2xhdW5jaCgpOyAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy90ZWUuYzogKHRlc3RfbnVtX2J1ZmZlcnMpOgorCSAgU2ltcGxpZnksIHNpbXBsaWZ5LCBzaW1wbGlmeSAtIG9yIG5vdC4gIFJld3JpdGUgdW5pdCB0ZXN0CisJICBub3QgdG8gdXNlIGdzdF9wYXJzZV9sYXVuY2goKTsgYWxsb3cgTiBzdWItc3RyZWFtcy4gSW5jcmVhc2luZworCSAgdGhlIG51bWJlciBvZiBzdWItc3RyZWFtcyBzZWVtcyB0byByZXByb2R1Y2UgIzQ3NDgyMyBtb3JlIGVhc2lseS4KKworMjAwNy0xMC0zMSAyMjowMTowMyArMDAwMCAgT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzIDxvbGUuYW5kcmUucmF2bmFzQHRhbmRiZXJnLmNvbT4KKworCSAgRml4IGEgY291cGxlIG9mIG1pc3NpbmcgaW5jbHVkZXMgZm9yIE1TVkMyMDA1IGFuZCBhIEM5OSBpc3N1ZS4gQWxzbywgc3RhcnRpbmcgd2l0aCAyLjE0LjAsIEdMaWIgd29uJ3QgcHJvdmlkZSBhIHBpcGUoLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMgIDxvbGUuYW5kcmUucmF2bmFzQHRhbmRiZXJnLmNvbT4KKwkgICogZ3N0L2dzdHRyYWNlLmM6CisJICAqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOiAoZ3N0X25ldF9jbGllbnRfY2xvY2tfbmV3KToKKwkgICogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwYWNrZXQuYzogKGdzdF9uZXRfdGltZV9wYWNrZXRfc2VuZCk6CisJICAqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzogKGdzdF9uZXRfdGltZV9wcm92aWRlcl9uZXcpOgorCSAgRml4IGEgY291cGxlIG9mIG1pc3NpbmcgaW5jbHVkZXMgZm9yIE1TVkMyMDA1IGFuZCBhIEM5OSBpc3N1ZS4gQWxzbywKKwkgIHN0YXJ0aW5nIHdpdGggMi4xNC4wLCBHTGliIHdvbid0IHByb3ZpZGUgYSBwaXBlKCkgbWFjcm8gYW55IGxvbmdlciwKKwkgIHNvIHVzZSBfcGlwZSgpIGRpcmVjdGx5ICgjNDkyMDc3KS4KKwkgICogd2luMzIvY29tbW9uL2RpcmVudC5jOiAoX3RyZWFkZGlyKToKKwkgIEFkZCBhIGNvdXBsZSBvZiBjYXN0cyB0byBtYWtlIGl0IGJ1aWxkIHdpdGhvdXQgd2FybmluZ3Mgd2l0aCBNU1ZDLgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIEFkZCBzb21lIG1vcmUgc3ltYm9scyB0aGF0IG5lZWQgdG8gYmUgZXhwb3J0ZWQuCisKKzIwMDctMTAtMzEgMTg6MDg6MjEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHRlc3RzL2V4YW1wbGVzL21ldGFkYXRhL3JlYWQtbWV0YWRhdGEuYzogVXNlIF9LRUVQIGFzIG1lcmdlIG1vZGUgcmF0aGVyIHRoYW4gX0tFRVBfQUxMLCBzbyB0YWdzIGFycml2aW5nIGluIGEgc2Vjb25kIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2V4YW1wbGVzL21ldGFkYXRhL3JlYWQtbWV0YWRhdGEuYzogKG1lc3NhZ2VfbG9vcCk6CisJICBVc2UgX0tFRVAgYXMgbWVyZ2UgbW9kZSByYXRoZXIgdGhhbiBfS0VFUF9BTEwsIHNvIHRhZ3MKKwkgIGFycml2aW5nIGluIGEgc2Vjb25kIG9yIHRoaXJkIHRhZyBtZXNzYWdlIGFyZSBhZGRlZCB0bworCSAgdGhlIHRhZyBsaXN0IGFzIHdlbGwuCisKKzIwMDctMTAtMzEgMTM6MDE6MzQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IEl0cyAiU2luY2U6IiBhbmQgbm90ICJAU2luY2U6Ii4gQW5kIHJlbW92ZSBhbiBzdXBlcmZsb3VzIGNhc3QuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJICBJdHMgIlNpbmNlOiIgYW5kIG5vdCAiQFNpbmNlOiIuIEFuZCByZW1vdmUgYW4gc3VwZXJmbG91cyBjYXN0LgorCisyMDA3LTEwLTMwIDE4OjMwOjEzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBBZGQgYSBuZXcgbGFzdC1idWZmZXIgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgbGFzdCBidWZmZXIgdXNlZCBpbiBiYXNlc2luayBmb3IgcHJlcm9sbCBvciByZW5kZXJpbmcuIHVzZWZ1bCBmb3IgbWEuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NsYXNzX2luaXQpLAorCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X2xhc3RfYnVmZmVyKSwgKGdzdF9iYXNlX3Npbmtfc2V0X2xhc3RfYnVmZmVyKSwKKwkgIChnc3RfYmFzZV9zaW5rX2dldF9wcm9wZXJ0eSksIChnc3RfYmFzZV9zaW5rX3JlbmRlcl9vYmplY3QpLAorCSAgKGdzdF9iYXNlX3NpbmtfcHJlcm9sbF9vYmplY3QpLAorCSAgKGdzdF9iYXNlX3NpbmtfcXVldWVfb2JqZWN0X3VubG9ja2VkKSwgKGdzdF9iYXNlX3NpbmtfZXZlbnQpLAorCSAgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSAgQWRkIGEgbmV3IGxhc3QtYnVmZmVyIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGxhc3QgYnVmZmVyIHVzZWQgaW4KKwkgIGJhc2VzaW5rIGZvciBwcmVyb2xsIG9yIHJlbmRlcmluZy4gdXNlZnVsIGZvciBtYWtpbmcgc25hcHNob3RzLgorCSAgQVBJOiBnc3RfYmFzZV9zaW5rX2dldF9sYXN0X2J1ZmZlcigpCisJICBBUEk6IEdzdEJhc2VTaW5rOjpsYXN0LWJ1ZmZlcgorCisyMDA3LTEwLTI5IDEzOjQ2OjI1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIEltcHJvdmUgYmluIGdyYXBoIGR1bXBpbmcsIGJ5IHVzaW5nIHRoZSBlbnZ2YXIgdG8gc3BlY2lmeSBhIHBhdGguCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvcnVubmluZy54bWw6CisJICAqIGdzdC9nc3QuYzoKKwkgICogZ3N0L2dzdGRlYnVndXRpbHMuYzoKKwkgICogZ3N0L2dzdGRlYnVndXRpbHMuaDoKKwkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOgorCSAgSW1wcm92ZSBiaW4gZ3JhcGggZHVtcGluZywgYnkgdXNpbmcgdGhlIGVudnZhciB0byBzcGVjaWZ5IGEgcGF0aC4KKwkgIFJlbmFtZSB0aGUgZW52dmFyIHRvIEdTVF9ERUJVR19EVU1QX0RPVF9ESVIuCisKKzIwMDctMTAtMjkgMTM6MTA6MDEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6IFBvc3Qgc3BlY2lhbCBlcnJvciBtZXNzYWdlIGlmIHdlIGNhbid0IGRldGVybWluZSB0aGUgdHlwZSBvZiBhIHN0cmVhbSBiZWNhdXNlIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6CisJICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2hhbmRsZV9ldmVudCksCisJICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2FjdGl2YXRlKToKKwkgIFBvc3Qgc3BlY2lhbCBlcnJvciBtZXNzYWdlIGlmIHdlIGNhbid0IGRldGVybWluZSB0aGUgdHlwZSBvZiBhIHN0cmVhbQorCSAgYmVjYXVzZSBpdCdzIGVtcHR5LgorCisyMDA3LTEwLTI5IDEwOjA1OjU1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIERvY3VtZW50IG5ldyBlbnYtdmFyLiBBZGQgb25lIGxvZy1saW5lIGFmdGVyIGR1bXBuZyBhIGdyYXBoLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L3J1bm5pbmcueG1sOgorCSAgKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgorCSAgRG9jdW1lbnQgbmV3IGVudi12YXIuIEFkZCBvbmUgbG9nLWxpbmUgYWZ0ZXIgZHVtcG5nIGEgZ3JhcGguCisKKzIwMDctMTAtMjYgMTg6Mzk6MDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGNvbmZpZ3VyZS5hYzogVWdseSBoYWNrIHRvIHB1dCB0aGUgKHJlY2VudGx5IHJlbW92ZWQgYW5kIG5vbi1wb3J0YWJsZSwgYXBwYXJlbnRseSkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICBVZ2x5IGhhY2sgdG8gcHV0IHRoZSAocmVjZW50bHkgcmVtb3ZlZCBhbmQgbm9uLXBvcnRhYmxlLCBhcHBhcmVudGx5KQorCSAgLVdsLC0tZXhwb3J0LWR5bmFtaWMgYmFjayBpbnRvIGxpYmdzdGNoZWNrJ3MgTERGTEFHUyB3aGVuIHdlJ3JlIHVzaW5nCisJICBHTlUgbGQsIGJlY2F1c2Ugd2l0aG91dCB0aGF0ICdtYWtlIGNoZWNrJyBmYWlscyBtaXNlcmFibHkgb24gbXkgZGViaWFuCisJICBzdGFibGUgYm94LiAgU29tZW9uZSB3aXRoIG1vcmUga25vd2xlZGdlIG9mIGxpbmtlciBpbnRyaWNhY2llcyBhbmQKKwkgIHBvcnRhYmlsaXR5IGlzc3VlcyB0aGFuIG1lIGZpeCB0aGlzIHByb3Blcmx5IHBsZWFzZS4KKworMjAwNy0xMC0yNSAxNzoyMDo0NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBSZXNldCBsYXN0IHNlZW4gcG9zaXRpb24gYWZ0ZXIgZmx1c2hpbmcgc28gdGhhdCB3ZSBkb24ndCByZXBvcnQgdGhlIG9sZCBwb3NpdGlvbiBhbnltb3JlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZXZlbnQpOgorCSAgUmVzZXQgbGFzdCBzZWVuIHBvc2l0aW9uIGFmdGVyIGZsdXNoaW5nIHNvIHRoYXQgd2UgZG9uJ3QgcmVwb3J0IHRoZSBvbGQKKwkgIHBvc2l0aW9uIGFueW1vcmUuCisKKzIwMDctMTAtMjUgMTY6MTk6MDUgKzAwMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvQG5udmEub3JnPgorCisJICBnc3QvOiBQYXRjaCBmcm9tIEFsZXNzYW5kcm8gRGVjaW5hIGFkZGluZyBnZXRfdHlwZV9mdWxsIGFuZCBnZXRfcHJvdG9jb2xzX2Z1bGwgcHJpdmF0ZSB2ZnVuY3MgdG8gdGhlIFVSSUhhbmRsZXIgaW50ZXIuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzogKGdzdF9lbGVtZW50X3JlZ2lzdGVyKToKKwkgICogZ3N0L2dzdHVyaS5oOgorCSAgUGF0Y2ggZnJvbSBBbGVzc2FuZHJvIERlY2luYSBhZGRpbmcgZ2V0X3R5cGVfZnVsbCBhbmQKKwkgIGdldF9wcm90b2NvbHNfZnVsbCBwcml2YXRlIHZmdW5jcyB0byB0aGUgVVJJSGFuZGxlciBpbnRlcmZhY2UKKwkgIHRvIGFsbG93IGJpbmRpbmdzIHRvIHN1cHBvcnQgY3JlYXRpbmcgVVJJIGhhbmRsZXJzLgorCSAgUGFydGlhbGx5IGZpeGVzOiAjMzM5Mjc5CisJICBBUEk6IEdzdFVSSUhhbmRsZXJJbnRlcmZhY2U6OmdldF90eXBlX2Z1bGwKKwkgIEFQSTogR3N0VVJJSGFuZGxlckludGVyZmFjZTo6Z2V0X3Byb3RvY29sc19mdWxsCisKKzIwMDctMTAtMjUgMTU6MTQ6MDIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogTWFrZSBpdCBzbyB0aGF0IHBhZHMgYXJlIGNvbnNpZGVyZWQgbGlua2VkIHVudGlsIGEgYnVmZmVyIGlzIHB1c2hlZCBhbmQgZGlzY292ZXJlZCAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogKGdzdF9tdWx0aV9xdWV1ZV9zZXRfcHJvcGVydHkpLAorCSAgKGdzdF9tdWx0aV9xdWV1ZV9yZXF1ZXN0X25ld19wYWQpLCAoZ3N0X3NpbmdsZV9xdWV1ZV9mbHVzaCksCisJICAoZ3N0X211bHRpX3F1ZXVlX2xvb3ApLCAoZ3N0X211bHRpX3F1ZXVlX3NpbmtfYWN0aXZhdGVfcHVzaCk6CisJICBNYWtlIGl0IHNvIHRoYXQgcGFkcyBhcmUgY29uc2lkZXJlZCBsaW5rZWQgdW50aWwgYSBidWZmZXIgaXMgcHVzaGVkCisJICBhbmQgZGlzY292ZXJlZCBvdGhlcndpc2UuIFRoaXMgYXZvaWRzIHByb2JsZW1zIHdpdGggZGVjb2RlYmluMiBoYW5naW5nCisJICBhZnRlciBhIHNlZWsgaW4gdGhlIGZpbGVzcmMgISBkZWNvZGViaW4yIG5hbWU9ZCAhIGZha2VzaW5rIGQuICEgZmFrZXNpbmsKKwkgIGNhc2UuCisJICBNYWtlIHN1cmUgd2UgbG9jayB0aGUgbXVsdGlxdWV1ZSB3aGVuIHVwZGF0aW5nIHRoZSBtYXgtc2l6ZSBwcm9wZXJ0aWVzLgorCSAgRml4IGEgY3Jhc2ggb24gU29sYXJpcyBpbiBhIGRlYnVnIHN0YXRlbWVudCBpbiBnZXRfcmVxdWVzdF9wYWQgdGhhdAorCSAgcGFzc2VzIGEgTlVMTCBzdHJpbmcgdG8gR1NUX0RFQlVHLgorCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tdWx0aXF1ZXVlLmM6IChtcV9kdW1teXBhZF9jaGFpbiksCisJICAocnVuX291dHB1dF9vcmRlcl90ZXN0KToKKwkgIEZpeCB0aGUgdGVzdCB0byBhbGxvdyB0aGUgZmlyc3QgYnVmZmVyIG9uIG5vdC1saW5rZWQgcGFkcyB0byBjb21lIG91dAorCSAgb2Ygc2VxdWVuY2Ugd2hpbGUgbXVsdGlxdWV1ZSBkaXNjb3ZlcnMgdGhhdCB0aGV5IGFyZSBub3QtbGlua2VkLgorCisyMDA3LTEwLTI1IDE0OjUwOjQ4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgVXNlIGEgY3VzdG9tIGV4cG9ydCBzeW1ib2wgcmVnZXggZm9yIGxpYmdzdGNoZWNrLCBhcyBpdCBuZWVkcyB0byBleHBvcnQgc3ltYm9scyB0aGF0IGRvbid0IG1hdGNoIHRoZSBzdGFuZGFyZCBHU3RyZWFtLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKKwkgIFVzZSBhIGN1c3RvbSBleHBvcnQgc3ltYm9sIHJlZ2V4IGZvciBsaWJnc3RjaGVjaywgYXMgaXQgbmVlZHMKKwkgIHRvIGV4cG9ydCBzeW1ib2xzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIHN0YW5kYXJkIEdTdHJlYW1lciBnc3RfKgorCSAgcGF0dGVybiwgYW5kICAtLWV4cG9ydC1keW5hbWljIGlzIG5vdCBwb3J0YWJsZSAob25seSB3b3JrcyBvbgorCSAgR05VIGxkKQorCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOiAoZ3N0X2NoZWNrX3NldHVwX3NyY19wYWQpLAorCSAgKGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCk6CisJICBNYWtlIHN1cmUgdG8gcGFzcyBhIG1lc3NhZ2UgcGFyYW1ldGVyIHRvIHRoZSBmYWlsXyogbWFjcm9zLgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0aW5mby5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgRml4IHNvbWUgY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMDctMTAtMjUgMTQ6NDE6MDEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzogRGlzYWJsZSB0ZXN0IHRoYXQgY2hlY2tzIHRoYXQgd2hpdGUgc3BhY2VzIGFyZSBub3QgYWxsb3dlZCBpbiBzdHJ1Y3R1cmUgbmFtZXMgb3IgZmllbC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzogKHRlc3RfdG9fc3RyaW5nKToKKwkgIERpc2FibGUgdGVzdCB0aGF0IGNoZWNrcyB0aGF0IHdoaXRlIHNwYWNlcyBhcmUgbm90IGFsbG93ZWQKKwkgIGluIHN0cnVjdHVyZSBuYW1lcyBvciBmaWVsZCBuYW1lcywgc2luY2Ugd2UgbmVlZCB0bworCSAgc3VwcG9ydCB0aGF0IGZvciBub3cgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHJlYXNvbnMuCisKKzIwMDctMTAtMjQgMTM6MTM6NTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIEFQSTogYWRkIEdTVF9UQUdfQVJUSVNUX1NPUlROQU1FCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdHRhZ2xpc3QuYzoKKwkgICogZ3N0L2dzdHRhZ2xpc3QuaDoKKwkgIEFQSTogYWRkIEdTVF9UQUdfQVJUSVNUX1NPUlROQU1FCisJICBBUEk6IGFkZCBHU1RfVEFHX0FMQlVNX1NPUlROQU1FCisJICBBUEk6IGFkZCBHU1RfVEFHX1RJVExFX1NPUlROQU1FCisJICBBZGQgdGFnIHZhcmlhbnRzIGZvciBzb3J0aW5nICgjNDE0NTM5KS4KKworMjAwNy0xMC0yNCAxMzowMDo1OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdHN0cnVjdHVyZS5jOiBBbHNvIGFsbG93IHdoaXRlIHNwYWNlIGZvciBuYW1lcyBzbyB3ZSBkb24ndCBicmVhayBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJICBBbHNvIGFsbG93IHdoaXRlIHNwYWNlIGZvciBuYW1lcyBzbyB3ZSBkb24ndCBicmVhaworCSAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisKKzIwMDctMTAtMjIgMTU6Mzc6NDMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZGVzaWduLzogU21hbGwgdXBkYXRlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXNlZ21lbnRzLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1zdHJlYW1zLnR4dDoKKwkgIFNtYWxsIHVwZGF0ZXMuCisKKzIwMDctMTAtMjIgMTE6MzI6MTQgKzAwMDAgIEVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4KKworCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogRml4ZWQgZG9jdW1lbnRhdGlvbiBmcm9tIG15IHByZXZpb3VzIGNvbW1pdCAoYWRkZWQgbmV3IEFQSSBhZGQgZ3N0X3ZhbHVlX3NldF9zdHJ1Y3R1Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgIEZpeGVkIGRvY3VtZW50YXRpb24gZnJvbSBteSBwcmV2aW91cyBjb21taXQgKGFkZGVkIG5ldyBBUEkgYWRkCisJICBnc3RfdmFsdWVfc2V0X3N0cnVjdHVyZSgpLCBhZGQgZ3N0X3ZhbHVlX2dldF9zdHJ1Y3R1cmUoKSBhbmQKKwkgIEdTVF9WQUxVRV9IT0xEU19TVFJVQ1RVUkUpLgorCisyMDA3LTEwLTIyIDExOjEwOjI4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6IFJlZmxvdyBjb2RlIHRvIGZpeCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHdhcm5pbmcuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGRlYnVndXRpbHMuYzoKKwkgIFJlZmxvdyBjb2RlIHRvIGZpeCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHdhcm5pbmcuCisKKzIwMDctMTAtMjIgMDg6NTM6MjYgKzAwMDAgIEVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4KKworCSAgQWRkZWQgR3N0U3RydWN0dXJlIHRvIGdzdF92YWx1ZV90YWJsZSBhbmQgaXRzIHJlbGF0ZWQgZnVuY3Rpb25zLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RjYXBzLmM6IChnc3RfY2Fwc190b19zdHJpbmcpLAorCSAgKGdzdF9jYXBzX2Zyb21fc3RyaW5nX2lucGxhY2UpOgorCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6IChnc3Rfc3RydWN0dXJlX2dldF9hYmJycyksCisJICAoZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcpLCAoZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyk6CisJICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X3ZhbHVlX3NldF9zdHJ1Y3R1cmUpLAorCSAgKGdzdF92YWx1ZV9nZXRfc3RydWN0dXJlKSwgKGdzdF92YWx1ZV9zZXJpYWxpemVfc3RydWN0dXJlKSwKKwkgIChnc3RfdmFsdWVfZGVzZXJpYWxpemVfc3RydWN0dXJlKSwgKF9nc3RfdmFsdWVfaW5pdGlhbGl6ZSk6CisJICAqIGdzdC9nc3R2YWx1ZS5oOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6IChHU1RfU1RBUlRfVEVTVCksCisJICAoZ3N0X3N0cnVjdHVyZV9zdWl0ZSk6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgQWRkZWQgR3N0U3RydWN0dXJlIHRvIGdzdF92YWx1ZV90YWJsZSBhbmQgaXRzIHJlbGF0ZWQgZnVuY3Rpb25zLgorCSAgQ2hhbmdlZCBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyB0byBwcmludCAnOycgaW4gdGhlIGVuZC4KKwkgIENoYW5nZWQgZ3N0X2NhcHNfdG9fc3RyaW5nIHRvIG5vdCBwcmludCAnOycgYmV0ZXdlZW4gaXRzCisJICBmaWVsZHMgKHN0cnVjdHVyZXMpIGFueW1vcmUgYW5kIHJlbW92ZSB0aGUgbGFzdGVzICc7JyBmcm9tIGxhdGVzdAorCSAgc3RydWN0dXJlLiBOb3cgaXQgaXMgcG9zc2libGUgdG8gaGF2ZSBuZXN0ZWQgc3RydWN0dXJlcy4KKwkgIEluIGFkZGl0aW9uLCBiYWNrd2FyZCBjb21wYXRpYmlsdHkgaXMgYXNzdXJlZCBieSBhY2NlcHRpbmcgJ1wwJyBhcworCSAgZW5kIGRlbGltaXRlci4gRml4ZXM6ICM0ODc5NjkuCisJICBBUEk6IGFkZCBnc3RfdmFsdWVfc2V0X3N0cnVjdHVyZSgpCisJICBBUEk6IGFkZCBnc3RfdmFsdWVfZ2V0X3N0cnVjdHVyZSgpCisKKzIwMDctMTAtMTkgMDk6NDg6MzggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RidXMuYzogV2hlbiBubyBHU291cmNlIGNhbGxiYWNrIGhhcyBiZWVuIHNldCB1cCwgdGVsbCBkZXZlbG9wZXIgdG8gdXNlIGEgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSBleGlzdHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJ1cy5jOgorCSAgV2hlbiBubyBHU291cmNlIGNhbGxiYWNrIGhhcyBiZWVuIHNldCB1cCwgdGVsbCBkZXZlbG9wZXIKKwkgIHRvIHVzZSBhIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgZXhpc3RzLgorCisyMDA3LTEwLTE3IDEyOjU4OjIzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIEFsbG93IGR1bXBpbmcgcGlwZWxpbmVzIGFzIGRvdCBncmFwaHMuIEZpeGVzICM0NTY1NzMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L01ha2VmaWxlLmFtOgorCSAgKiBnc3QvZ3N0LmM6CisJICAqIGdzdC9nc3QuaDoKKwkgICogZ3N0L2dzdGRlYnVndXRpbHMuYzoKKwkgICogZ3N0L2dzdGRlYnVndXRpbHMuaDoKKwkgICogZ3N0L2dzdGluZm8uYzoKKwkgICogZ3N0L2dzdGluZm8uaDoKKwkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOgorCSAgQWxsb3cgZHVtcGluZyBwaXBlbGluZXMgYXMgZG90IGdyYXBocy4gRml4ZXMgIzQ1NjU3My4KKworMjAwNy0xMC0xNiAyMTo0ODoyMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdHN0cnVjdHVyZS5jOiBBbGxvdyAnKycgYXMgd2VsbCwgaXQgY2FuIGJlIHBhcnQgb2YgbWVkaWEgb3IgbWltZSB0eXBlcyBzdWNoIGFzIGltYWdlL3N2Zyt4bWwuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSAgQWxsb3cgJysnIGFzIHdlbGwsIGl0IGNhbiBiZSBwYXJ0IG9mIG1lZGlhIG9yIG1pbWUgdHlwZXMKKwkgIHN1Y2ggYXMgaW1hZ2Uvc3ZnK3htbC4KKworMjAwNy0xMC0xNiAyMDozMDoxMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgQVBJOiBhZGQgZ3N0X2J1c19wb3BfZmlsdGVyZWQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBnc3QvZ3N0YnVzLmM6CisJICAqIGdzdC9nc3RidXMuaDoKKwkgIEFQSTogYWRkIGdzdF9idXNfcG9wX2ZpbHRlcmVkCisJICBBUEk6IGFkZCBnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZAorCSAgVHdvIG5ldyBmdW5jdGlvbnMgZm9yIHdhaXRpbmcgZm9yIHNwZWNpZmljIG1lc3NhZ2UgdHlwZXMgb24gdGhlCisJICBidXMgZm9yIGEgc3BlY2lmaWVkIGFtb3VudCBvZiB0aW1lIHdpdGhvdXQgaXRlcmF0aW5nIGFueSBtYWluCisJICBsb29wcyBvciBtYWluIGNvbnRleHRzLgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVzLmM6CisJICBTb21lIHRlc3RzIGZvciB0aGUgbmV3IGZ1bmN0aW9ucy4KKworMjAwNy0xMC0xNiAxNzoyMTozOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDogTWFrZSBndGstZG9jIGlnbm9yZSBzdHVmZiBpdCBzaG91bGQgaWdub3JlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJICBNYWtlIGd0ay1kb2MgaWdub3JlIHN0dWZmIGl0IHNob3VsZCBpZ25vcmUuCisKKzIwMDctMTAtMTYgMTY6MTI6MzYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLio6IEFsbG93IHJ1bnRpbWUgc2VsZWN0aW9uIG9mIHVuaXQgdGVzdHMgdG8gcnVuIHZpYSB0aGUgR1NUX0NIRUNLUyBlbnZpcm9ubWVudCB2YXJpYWJsZSAodGVzdC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6CisJICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6CisJICBBbGxvdyBydW50aW1lIHNlbGVjdGlvbiBvZiB1bml0IHRlc3RzIHRvIHJ1biB2aWEgdGhlIEdTVF9DSEVDS1MKKwkgIGVudmlyb25tZW50IHZhcmlhYmxlICh0ZXN0IGNhc2UgZnVuY3Rpb24gbmFtZXMsIGNvbW1hLXNlcGFyYXRlZCkuCisKKzIwMDctMTAtMTYgMTM6NTg6NDMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgUmV2ZXJ0IHNlcmlhbGlzYXRpb24gY2hhbmdlIGFuZCBjb25zdHJhaW4gc3RydWN0dXJlLW5hbWVzIGFmdGVyIGNvbnNlbnN1cyBvbiBpcmMuIFVwZGF0ZSBhcGkgZG9jdW1lbnRhdGlvbiB0byByZWZsZWN0Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6CisJICBSZXZlcnQgc2VyaWFsaXNhdGlvbiBjaGFuZ2UgYW5kIGNvbnN0cmFpbiBzdHJ1Y3R1cmUtbmFtZXMgYWZ0ZXIKKwkgIGNvbnNlbnN1cyBvbiBpcmMuIFVwZGF0ZSBhcGkgZG9jdW1lbnRhdGlvbiB0byByZWZsZWN0IHRoZSBjaGFuZ2UuCisKKzIwMDctMTAtMTYgMDY6MzI6MDcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdHN0cnVjdHVyZS5jOiBJbXByb3ZlIHNlcmlhbGl6YXRpb24gYW5kIGZpeCB0ZXN0cy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJICBJbXByb3ZlIHNlcmlhbGl6YXRpb24gYW5kIGZpeCB0ZXN0cy4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSAgQWRkIGFub3RoZXIgdGVzdCB0aGF0IGNvdmVycyB3aHkgSSBhY3R1YWxseSBkaWQgdGhlIHByZXZpb3VzIHN0cnVjdHVyZQorCSAgY2hhbmdlLgorCisyMDA3LTEwLTE1IDE0OjMzOjE2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICB0b29scy9nc3QtaW5zcGVjdC5jOiBEb24ndCBjcmFzaCB3aGVuIGluc3BlY3RpbmcgYW4gZWxlbWVudC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAocHJpbnRfZWxlbWVudF9pbmZvKToKKwkgIERvbid0IGNyYXNoIHdoZW4gaW5zcGVjdGluZyBhbiBlbGVtZW50LgorCisyMDA3LTEwLTE1IDExOjU4OjE2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6IEFkZCB1bml0IHRlc3QgZm9yIGVzY2FwaW5nIG9mIHN0cnVjdHVyZSBuYW1lIHdoZW4gc2VyaWFsaXNpbmcgYW5kIGRlc2VyaWFsaXNpbmcgdG8vZnIuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6CisJICBBZGQgdW5pdCB0ZXN0IGZvciBlc2NhcGluZyBvZiBzdHJ1Y3R1cmUgbmFtZSB3aGVuIHNlcmlhbGlzaW5nCisJICBhbmQgZGVzZXJpYWxpc2luZyB0by9mcm9tIHN0cmluZ3MuCisKKzIwMDctMTAtMTUgMTE6MzY6MzcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvOiBGaXggcXVldWUgbmVnb3RpYXRpb24uIElmIGFjY2VwdGNhcHMgdW5jb25kaXRpb25hbGx5IHJldHVybnMgVFJVRSwgdXBzdHJlYW0gaXMgdHJpY2tlZCBpbnRvIHRoaW5raS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiAoZ3N0X3NpbmdsZV9xdWV1ZV9wdXNoX29uZSksCisJICAoZ3N0X3NpbmdsZV9xdWV1ZV9uZXcpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfaW5pdCksCisJICAoZ3N0X3F1ZXVlX3B1c2hfb25lKToKKwkgIEZpeCBxdWV1ZSBuZWdvdGlhdGlvbi4gSWYgYWNjZXB0Y2FwcyB1bmNvbmRpdGlvbmFsbHkgcmV0dXJucyBUUlVFLAorCSAgdXBzdHJlYW0gaXMgdHJpY2tlZCBpbnRvIHRoaW5raW5nIGl0IGNhbiBzdWdnZXN0IGEgZm9ybWF0IGRvd25zdHJlYW0KKwkgIHdoaWxlIGRvd25zdHJlYW0gZG9lcyBub3Qgc3VwcG9ydCB0aGF0IGZvcm1hdC4gVGhlIHJlYWwgcHJvYmxlbSBpcyB0aGF0CisJICBjb3JlIGNhbGxzIGFjY2VwdGNhcHMgd2hlbiBwdXNoaW5nIGEgYnVmZmVyIHdpdGggbmV3IGNhcHMsIGZvciB3aGljaCB3ZQorCSAgZG8gYSBsaXR0bGUgd29ya2Fyb3VuZCBieSBzZXR0aW5nIHRoZSBjYXBzIG9uIHRoZSBzcmNwYWQgb3Vyc2VsdmVzCisJICBiZWZvcmUgcHVzaGluZyB0aGUgYnVmZmVyICh1bnRpbCB0aGlzIGlzIGZpZ3VyZWQgb3V0KS4gRml4ZXMgIzQ4Njc1OC4KKworMjAwNy0xMC0xNSAxMToxOTozNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvOiBBZGQgc29tZSBtb3JlIGNvbW1lbnRzIGFuZCBkZWJ1ZyBvdXRwdXQuIFF1b3RlIHN0cnVjdHVyZSBuYW1lIHRvIGZpeCBkZXNlcmlhbGlzYXRpb24gb2Ygc29tZSBzdHJpbmdzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkgICogZ3N0L2dzdHZhbHVlLmM6CisJICBBZGQgc29tZSBtb3JlIGNvbW1lbnRzIGFuZCBkZWJ1ZyBvdXRwdXQuIFF1b3RlIHN0cnVjdHVyZSBuYW1lIHRvIGZpeAorCSAgZGVzZXJpYWxpc2F0aW9uIG9mIHNvbWUgc3RyaW5ncy4KKworMjAwNy0xMC0xNSAwNzozNzozNyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0YnVmZmVyLmg6IERlZmluZSBHU1RfQlVGRkVSX0ZMQUdfR0FQIG1vcmUgc3RyaWN0bHkgdG8gZW5hYmxlIG9wdGltaXphdGlvbnMgYmFzZWQgb24gaXQuIEZpeCBkb2NzIGZvciBHU1RfQlVGRkUuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YnVmZmVyLmg6CisJICBEZWZpbmUgR1NUX0JVRkZFUl9GTEFHX0dBUCBtb3JlIHN0cmljdGx5IHRvIGVuYWJsZSBvcHRpbWl6YXRpb25zIGJhc2VkCisJICBvbiBpdC4gRml4IGRvY3MgZm9yIEdTVF9CVUZGRVJfTUFMTE9DREFUQSBhbmQgR3N0QnVmZmVyLm1hbGxvY19kYXRhLgorCisyMDA3LTEwLTE1IDA3OjExOjA0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIHRvb2xzL2dzdC1pbnNwZWN0LmM6IFNhdmUgYXBwcm94LiA0MDAgMSBieXRlIGFsbG9jcyB3aGVuIHByaW50aW5nLiBVc2UgQVBJIHRvIGFjY2VzIGVsZW1lbnQgZGV0YWlscy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOgorCSAgU2F2ZSBhcHByb3guIDQwMCAxIGJ5dGUgYWxsb2NzIHdoZW4gcHJpbnRpbmcuIFVzZSBBUEkgdG8gYWNjZXMgZWxlbWVudAorCSAgZGV0YWlscy4KKwkgICogdG9vbHMvZ3N0LXJ1bi5jOgorCSAgQXZvaWQgYSBzdHJkdXAuCisJICAqIHRvb2xzL2dzdC14bWxpbnNwZWN0LmM6CisJICBVc2UgQVBJIHRvIGFjY2VzIGVsZW1lbnQgZGV0YWlscy4KKworMjAwNy0xMC0xNSAwNjo1MjowMSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0aW5mby5jOiBGaXggc29tZSBzcGVsbGluZyBlcnJvcnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGluZm8uYzoKKwkgIEZpeCBzb21lIHNwZWxsaW5nIGVycm9ycy4KKworMjAwNy0xMC0xNCAxNTo1NDowMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJpbi5jOiBDb3JyZWN0bHkgc2V0IHRoZSBuZXh0IHN0YXRlIGlmIGFsbCBvZiBvdXIgYXN5bmMgY2hpbGRyZW4gY29tbWl0ZWQgdGhlaXIgc3RhdGUuIFRoaXMgbWFrZXMgc3VyZSB3ZSBjYW4gLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAoYmluX2hhbmRsZV9hc3luY19kb25lKToKKwkgIENvcnJlY3RseSBzZXQgdGhlIG5leHQgc3RhdGUgaWYgYWxsIG9mIG91ciBhc3luYyBjaGlsZHJlbiBjb21taXRlZCB0aGVpcgorCSAgc3RhdGUuIFRoaXMgbWFrZXMgc3VyZSB3ZSBjYW4gYWN0dWFsbHkgY2FuY2VsIHRoZSBzdGF0ZSBjaGFuZ2UgaW4KKwkgIHByb2dyZXNzLiBGaXhlcyBhIHJlZ3Jlc3Npb24gaW4gUmh5dGhtYm94IHdoZW4gc2Vla2luZy4KKworMjAwNy0xMC0xMyAxNzo0MzoyNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdGJpbi5jOiBEb24ndCBzaGFkb3cgbG9jYWwgdmFyaWFibGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOgorCSAgRG9uJ3Qgc2hhZG93IGxvY2FsIHZhcmlhYmxlLgorCSAgKiBnc3QvZ3N0aW5mby5jOgorCSAgRG9uJ3Qgc2hhZG93IGdsb2JhbCBmdW5jdGlvbiBuYW1lLgorCisyMDA3LTEwLTEzIDE3OjIwOjA5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvOiBVc2UgYWxyZWFkeS1pbnRlcm5lZCBzdHJpbmcgZm9yIHRoZSBwcml2YXRlIEdzdFBsdWdpbkZlYXR1cmUgcGx1Z2luX25hbWUgZmllbGQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6CisJICAqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6CisJICAqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmg6CisJICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzoKKwkgICogZ3N0L2dzdHR5cGVmaW5kLmM6CisJICBVc2UgYWxyZWFkeS1pbnRlcm5lZCBzdHJpbmcgZm9yIHRoZSBwcml2YXRlIEdzdFBsdWdpbkZlYXR1cmUKKwkgIHBsdWdpbl9uYW1lIGZpZWxkLgorCisyMDA3LTEwLTEwIDIyOjQzOjExICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OiBBZGQgbmV3IEFQSSB0byBkb2NzOyBmaXhlcyB0aGUgYnVpbGQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkgIEFkZCBuZXcgQVBJIHRvIGRvY3M7IGZpeGVzIHRoZSBidWlsZC4KKworMjAwNy0xMC0xMCAxNToxODo0NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay4qOiBBZGQgZnVuY3Rpb24gdG8gd2FpdCBmb3IgRU9TLCBzdWJjbGFzc2VzIGNhbiB1c2UgdGhpcyB0byBjb3JyZWN0bHkgd2FpdCBmb3IgZGV2aWNlcyB0byBkLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGluc3BpcmVkIGJ5OiBCZW5vaXQgRm91ZXQgPGJlbm9pdCBkb3QgZm91ZXQgYXQgcHVycGxlbGFicyBkb3QgY29tPgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX3dhaXRfZW9zKSwKKwkgIChnc3RfYmFzZV9zaW5rX2V2ZW50KToKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSAgQWRkIGZ1bmN0aW9uIHRvIHdhaXQgZm9yIEVPUywgc3ViY2xhc3NlcyBjYW4gdXNlIHRoaXMgdG8gY29ycmVjdGx5IHdhaXQKKwkgIGZvciBkZXZpY2VzIHRvIGRyYWluIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBFT1MgbG9naWMuIEZpeGVzICM0ODUzNDMuCisJICBBUEk6IGdzdF9iYXNlX3Npbmtfd2FpdF9lb3MoKQorCisyMDA3LTEwLTEwIDEwOjUzOjM5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0cGx1Z2luLmg6IENhc3QgZGVzY3JpcHRpb24gc3RyaW5nIGNvbnN0YW50cyBpbiBHU1RfUExVR0lOX0RFRklORSBtYWNyb3MgdG8gYSAoZ2NoYXIqKSB0byBtYWtlIEMrKyBjb2RlIHVzaW5nIHQuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGx1Z2luLmg6CisJICBDYXN0IGRlc2NyaXB0aW9uIHN0cmluZyBjb25zdGFudHMgaW4gR1NUX1BMVUdJTl9ERUZJTkUgbWFjcm9zCisJICB0byBhIChnY2hhciopIHRvIG1ha2UgQysrIGNvZGUgdXNpbmcgdGhlc2UgbWFjcm9zIGNvbXBpbGUKKwkgIHdpdGhvdXQgd2FybmluZyB3aXRoIGcrKy00LjIgKHNlZSAjNDYyNzM3KS4gIEV2ZW4gaWYgc2xpZ2h0bHkKKwkgIHVnbHksIHRoaXMgc2VlbXMgcHJlZmVyYWJsZSB0byBwdXR0aW5nIHRoZSBkZXNjcmlwdGlvbiBzdHJpbmdzCisJICBpbnRvIHRoZSBHTGliIHF1YXJrIHRhYmxlIG9yIG1ha2luZyB0aGUgc3RydWN0dXJlIG1lbWJlciBhCisJICBjb25zdCBnY2hhciAqIGFuZCBkb2luZyBjYXN0cyBpbiBjb3JlIGNvZGUgdGhhdCBhbGxvY3MgYW5kCisJICBmcmVlcyB0aGVzZSBzdHJpbmdzLCBvciByZXF1aXJpbmcgYSBjYXN0IGluIHRoZSBDKysgY29kZS4KKworMjAwNy0xMC0wOSAyMDo0NToxMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdGluZm8uaDogVXNlIF9fRlVOQ1RJT05fXyBpbnN0ZWFkIG9mIF9fUFJFVFRZX0ZVTkNUSU9OX18sIGl0J3Mgc2lsbHkgdG8gcHJpbnQgdGhlIGVudGlyZSBjbGFzcy9mdW5jdGlvbiBzaWduYXR1Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGluZm8uaDoKKwkgIFVzZSBfX0ZVTkNUSU9OX18gaW5zdGVhZCBvZiBfX1BSRVRUWV9GVU5DVElPTl9fLCBpdCdzIHNpbGx5CisJICB0byBwcmludCB0aGUgZW50aXJlIGNsYXNzL2Z1bmN0aW9uIHNpZ25hdHVyZSBpbnRvIHRoZSBsb2cKKwkgIGZpbGUgZm9yIEMrKyBjb2RlLiAgVGhpcyBvbmx5IGFmZmVjdHMgQysrIGNvZGUsIGZvciBDIGNvZGUKKwkgIGV2ZXJ5dGhpbmcgcmVtYWlucyB0aGUgc2FtZS4KKworMjAwNy0xMC0wOSAxNjoyMDo1OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJpbi5jOiBXb3JrIGFyb3VuZCBhIHByb2JsZW0gd2l0aCBwaXBlbGluZXMgY29udGFpbmluZyAoc2VtaSlsb29wcyB1bnRpbCBhIHByb3BlciwgbW9yZSBjb21wbGljYXRlZCBzb2x1dGlvbiBpLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAocmVtb3ZlX2Zyb21fcXVldWUpOgorCSAgV29yayBhcm91bmQgYSBwcm9ibGVtIHdpdGggcGlwZWxpbmVzIGNvbnRhaW5pbmcgKHNlbWkpbG9vcHMgdW50aWwgYQorCSAgcHJvcGVyLCBtb3JlIGNvbXBsaWNhdGVkIHNvbHV0aW9uIGlzIHJlYWR5LiBTZWUgIzQ3NTQ1NS4KKworMjAwNy0xMC0wOSAxNDoxODozOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0LzogUHV0IG1vcmUgc3RyaW5ncyBpbnRvIHRoZSBHTGliIHF1YXJrIHRhYmxlLiBObyBuZWVkIHRvIGtlZXAgYSBodW5kcmVkLXNvbWV0aGluZyBjb3BpZXMgb2YgaWRlbnRpY2FsIHZlcnNpb24gc3RyLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBsdWdpbi5jOgorCSAgKiBnc3QvZ3N0cGx1Z2luLmg6CisJICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzoKKwkgIFB1dCBtb3JlIHN0cmluZ3MgaW50byB0aGUgR0xpYiBxdWFyayB0YWJsZS4gTm8gbmVlZCB0byBrZWVwCisJICBhIGh1bmRyZWQtc29tZXRoaW5nIGNvcGllcyBvZiBpZGVudGljYWwgdmVyc2lvbiBzdHJpbmdzLAorCSAgbGljZW5zZSBzdHJpbmdzLCBwYWNrYWdlIG5hbWUgc3RyaW5ncyBhbmQgcGFja2FnZSBvcmlnaW4KKwkgIHN0cmluZ3MgYXJvdW5kLgorCisyMDA3LTEwLTA5IDEwOjQxOjQxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBkb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbDogRG9uJ3QgaW1wbHkgdGhhdCBpdCdzIG9rYXkgdG8gdW5jb25kaXRpb25hbGx5IGNoYW5nZSBidWZmZXIgZGF0YSBvciBidWZmZXIgbWV0YWQuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbDoKKwkgIERvbid0IGltcGx5IHRoYXQgaXQncyBva2F5IHRvIHVuY29uZGl0aW9uYWxseSBjaGFuZ2UKKwkgIGJ1ZmZlciBkYXRhIG9yIGJ1ZmZlciBtZXRhZGF0YSBpbiBhIHBhZCBwcm9iZSBjYWxsYmFjaywKKwkgIGFuZCBhIGJ1bmNoIG9mIG90aGVyIGNvbW1lbnRzLiBGaXhlcyAjNDMwMDMxLgorCisyMDA3LTEwLTA4IDIwOjQ1OjA3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICB3aW4zMi9jb21tb24vOiBVcGRhdGUgZ2VuZXJhdGVkIGZpbGVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKKwkgICogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5oOgorCSAgKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgorCSAgVXBkYXRlIGdlbmVyYXRlZCBmaWxlcy4KKworMjAwNy0xMC0wOCAxNzo1OTozNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZG9jcy9tYW51YWwvYWR2YW5jZWQtYXV0b3BsdWdnaW5nLnhtbDogUHJlZml4IHNlY3Rpb24gd2l0aCBicm9rZW4gY29kZSB3aXRoIGEgd2FybmluZyAoc2VlICMzNDI0MzIpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWF1dG9wbHVnZ2luZy54bWw6CisJICBQcmVmaXggc2VjdGlvbiB3aXRoIGJyb2tlbiBjb2RlIHdpdGggYSB3YXJuaW5nIChzZWUgIzM0MjQzMikuCisKKzIwMDctMTAtMDggMTc6MjY6MDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGRvY3MvbWFudWFsLzogQ2FsbCBnX3RocmVhZF9pbml0KCkgYmVmb3JlIGdfb3B0aW9uX2NvbnRleHRfbmV3KCkgdG8gYXZvaWQgd2FybmluZ3MuIFNwb3R0ZWQgYnkgUml0ZXNoIEtoYWRnYXJheS4gRml4ZS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvbWFudWFsL2FwcGVuZGl4LWludGVncmF0aW9uLnhtbDoKKwkgICogZG9jcy9tYW51YWwvYmFzaWNzLWluaXQueG1sOgorCSAgQ2FsbCBnX3RocmVhZF9pbml0KCkgYmVmb3JlIGdfb3B0aW9uX2NvbnRleHRfbmV3KCkgdG8KKwkgIGF2b2lkIHdhcm5pbmdzLiBTcG90dGVkIGJ5IFJpdGVzaCBLaGFkZ2FyYXkuIEZpeGVzICM0ODQyMjUuCisKKzIwMDctMTAtMDggMTc6MDU6MDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogV2hlbiB3ZSByZWNlaXZlZCBFT1MgYW5kIGFyZSB3YWl0aW5nIGZvciB3aGVuIHRvIHBvc3QgdGhlIEVPUyBtZXNzYWdlLCBvdXIgc3RhdGUgaXMgcHJlci4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfcHJlcm9sbF9xdWV1ZV9mbHVzaCksCisJICAoZ3N0X2Jhc2Vfc2lua19xdWV1ZV9vYmplY3RfdW5sb2NrZWQpLAorCSAgKGdzdF9iYXNlX3NpbmtfcXVldWVfb2JqZWN0KSwgKGdzdF9iYXNlX3NpbmtfZXZlbnQpLAorCSAgKGdzdF9iYXNlX3NpbmtfbmVlZHNfcHJlcm9sbCksIChnc3RfYmFzZV9zaW5rX2NoYWluX3VubG9ja2VkKToKKwkgIFdoZW4gd2UgcmVjZWl2ZWQgRU9TIGFuZCBhcmUgd2FpdGluZyBmb3Igd2hlbiB0byBwb3N0IHRoZSBFT1MgbWVzc2FnZSwKKwkgIG91ciBzdGF0ZSBpcyBwcmVyb2xsZWQgYW5kIHdlIHNob3VsZCBub3QgcmV0dXJuIEFTWU5DLgorCSAgUmVvcmdhbml6ZSBzb21lIGNvZGUgcGF0aHMgdG8gaW1wbGVtZW50IHRoaXMgYmVoYXZpb3IuCisJICAqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc2lua3MuYzogKHNlbmRfZW9zKSwgKEdTVF9TVEFSVF9URVNUKSwKKwkgIChnc3Rfc2lua3Nfc3VpdGUpOgorCSAgQWRkIHVuaXQgdGVzdCB0byB2ZXJpZnkgYWJvdmUgRU9TIGZpeC4KKworMjAwNy0xMC0wOCAxMDoyODoxOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogTW92ZSBkZXRlY3RpbmcgdGhlIGlucHV0IGNhcHMgb2YgdGhlIHNpbmtwYWQgdG8gdGhlIHNldGNhcHMgZnVuY3Rpb24uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfaGF2ZV90eXBlKSwgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9pbml0KSwKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfc2V0Y2FwcyksIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfY2hhaW4pOgorCSAgTW92ZSBkZXRlY3RpbmcgdGhlIGlucHV0IGNhcHMgb2YgdGhlIHNpbmtwYWQgdG8gdGhlIHNldGNhcHMgZnVuY3Rpb24uCisJICBUaGlzIGFsbG93cyB1cyB0byB1cGRhdGUgdGhlIG91dHB1dCBjYXBzIHdoZW4gd2UgcmVjZWl2ZSBuZXcgaW5wdXQgY2FwcworCSAgaW5zdGVhZCBvZiBhbHdheXMgdXNpbmcgdGhlIGZpcnN0IGRldGVjdGVkIGNhcHMuCisKKzIwMDctMTAtMDggMTA6MjE6MTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogRG9uJ3QgdHJ5IHRvIHByZXJvbGwgbm9uLWFzeW5jIGVsZW1lbnRzIGFmdGVyIGEgZmx1c2guCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19ldmVudCksCisJICAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24pOgorCSAgRG9uJ3QgdHJ5IHRvIHByZXJvbGwgbm9uLWFzeW5jIGVsZW1lbnRzIGFmdGVyIGEgZmx1c2guCisJICBTdWJ0cmFjdCBsYXRlbmN5IGZvcm0gY2xvY2sgdGltZXMgd2hlbiByZXBvcnRpbmcgcG9zaXRpb24uCisKKzIwMDctMTAtMDUgMTQ6NDQ6MTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC86IFNtYWxsIGNvbW1lbnQgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfcGF1c2VfdGFzayk6CisJICAqIGdzdC9nc3R1dGlscy5jOgorCSAgU21hbGwgY29tbWVudCBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGUuCisKKzIwMDctMTAtMDUgMTQ6NDA6MDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBSZXdvcmsgdGhlIGxvY2tpbmcgb2YgYmFzZXNyYyBpbiBhIHNpbWlsYXIgZmFzaGlvbiB0byBiYXNlc2luay4gV2UgYmFzaWNhbGx5IGhhdmUgb25lIGxvYy4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX3dhaXRfcGxheWluZyksCisJICAoZ3N0X2Jhc2Vfc3JjX3NldF9saXZlKSwgKGdzdF9iYXNlX3NyY19pc19saXZlKSwKKwkgIChnc3RfYmFzZV9zcmNfcXVlcnlfbGF0ZW5jeSksIChnc3RfYmFzZV9zcmNfcGVyZm9ybV9zZWVrKSwKKwkgIChnc3RfYmFzZV9zcmNfZGVmYXVsdF9ldmVudCksIChnc3RfYmFzZV9zcmNfd2FpdCksCisJICAoZ3N0X2Jhc2Vfc3JjX2RvX3N5bmMpLCAoZ3N0X2Jhc2Vfc3JjX2dldF9yYW5nZSksCisJICAoZ3N0X2Jhc2Vfc3JjX3BhZF9nZXRfcmFuZ2UpLCAoZ3N0X2Jhc2Vfc3JjX2xvb3ApLAorCSAgKGdzdF9iYXNlX3NyY191bmxvY2spLCAoZ3N0X2Jhc2Vfc3JjX3VubG9ja19zdG9wKSwKKwkgIChnc3RfYmFzZV9zcmNfc2V0X2ZsdXNoaW5nKSwgKGdzdF9iYXNlX3NyY19zZXRfcGxheWluZyksCisJICAoZ3N0X2Jhc2Vfc3JjX2FjdGl2YXRlX3B1c2gpLCAoZ3N0X2Jhc2Vfc3JjX2FjdGl2YXRlX3B1bGwpLAorCSAgKGdzdF9iYXNlX3NyY19jaGFuZ2Vfc3RhdGUpOgorCSAgUmV3b3JrIHRoZSBsb2NraW5nIG9mIGJhc2VzcmMgaW4gYSBzaW1pbGFyIGZhc2hpb24gdG8gYmFzZXNpbmsuIFdlCisJICBiYXNpY2FsbHkgaGF2ZSBvbmUgbG9jayAoTElWRV9MT0NLKSBwcm90ZWN0aW5nIHRoZSBkYXRhZmxvdy4gVGhpcyBhbGxvd3MKKwkgIHVzIHRvIGhhbmRsZSBsaXZlIHNvdXJjZXMgYW5kIHNlbWkgbGl2ZSBvbmVzIG11Y2ggYmV0dGVyLgorCSAgU2ltcGxpZnkgZmx1c2hpbmcuCisJICBGaXggdW5sb2NraW5nIHdoZW4gc2Vla2luZywgc2h1dHRpbmcgZG93biBhbmQgcGF1c2luZyBpbiBsaXZlIHNvdXJjZXMuCisKKzIwMDctMTAtMDUgMTE6NTI6MzkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmM6IEZpeCBjb21waWxhdGlvbiBhZ2Fpbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jOiAocnVuX3BpcGVsaW5lKToKKwkgIEZpeCBjb21waWxhdGlvbiBhZ2Fpbi4KKworMjAwNy0xMC0wMyAxNToyNzoyNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0ZWxlbWVudC5jOiBVc2UgbWVhbmluZ2Z1bCBjYXRlZ29yaWVzIGZvciB0aGUgbG9ncyB0byBjbGVhbiB0aGUgZGVmYXVsdCBvbmUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzoKKwkgIFVzZSBtZWFuaW5nZnVsIGNhdGVnb3JpZXMgZm9yIHRoZSBsb2dzIHRvIGNsZWFuIHRoZSBkZWZhdWx0IG9uZS4KKworMjAwNy0xMC0wMyAxNTowNTozMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICB0ZXN0cy9jaGVjay9waXBlbGluZXMvY2xlYW51cC5jOiBQcmludCBtZXNzYWdlIG5hbWUgYW5kIG5vdCBqdXN0IG51bWJlci4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvY2xlYW51cC5jOgorCSAgUHJpbnQgbWVzc2FnZSBuYW1lIGFuZCBub3QganVzdCBudW1iZXIuCisKKzIwMDctMTAtMDMgMTU6MDI6NDMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZG9jcy9kZXNpZ24vZHJhZnQtdGFncmVhZGluZy50eHQ6IEFkZCBzb21lIG1vcmUgdGhvdWdodHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vZHJhZnQtdGFncmVhZGluZy50eHQ6CisJICBBZGQgc29tZSBtb3JlIHRob3VnaHRzLgorCisyMDA3LTEwLTAzIDE0OjUxOjAzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmM6IFByaW50IG1lc3NhZ2UgbmFtZSBhbmQgbm90IGp1c3QgbnVtYmVyLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmM6CisJICBQcmludCBtZXNzYWdlIG5hbWUgYW5kIG5vdCBqdXN0IG51bWJlci4KKworMjAwNy0xMC0wMyAxMjowNToxNyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6IFNwZWVkdXAgdHlwZWZpbmRpbmcuIFRoaXMgaXMgd29yayBpbiBwcm9ncmVzcyAoc2VlICM0NTk4NjIpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzoKKwkgIFNwZWVkdXAgdHlwZWZpbmRpbmcuIFRoaXMgaXMgd29yayBpbiBwcm9ncmVzcyAoc2VlICM0NTk4NjIpLgorCisyMDA3LTEwLTAzIDExOjM2OjE0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3RwbHVnaW4uYzogRml4IGRvY3MgdGhhdCBtZW50aW9uICdwbHVnaW5fZGVzYycgaW5zdGVhZCBvZiAnZ3N0X3BsdWdpbl9kZXNjJy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGx1Z2luLmM6CisJICBGaXggZG9jcyB0aGF0IG1lbnRpb24gJ3BsdWdpbl9kZXNjJyBpbnN0ZWFkIG9mICdnc3RfcGx1Z2luX2Rlc2MnLgorCSAgU3BvdHRlZCBieSBKb3NlcCBUb3JyYSBWYWxsZXMgPGpvc2VwQGZsdWVuZG8uY29tPi4KKworMjAwNy0xMC0wMyAxMToxNjo0OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdGNsb2NrLmg6IEZpeCB1cCBicm9rZW4gR1NUX0NMT0NLX0ZMQUdTIG1hY3JvIGFuZCBHc3RDbG9jayBkb2NzLiBUaGUgZmxhZ3MgZmllbGQgaGFzIG1vdmVkIHRvIEdzdE9iamVjdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0Y2xvY2suaDoKKwkgIEZpeCB1cCBicm9rZW4gR1NUX0NMT0NLX0ZMQUdTIG1hY3JvIGFuZCBHc3RDbG9jayBkb2NzLiBUaGUgZmxhZ3MKKwkgIGZpZWxkIGhhcyBtb3ZlZCB0byBHc3RPYmplY3QuCisKKzIwMDctMTAtMDIgMTU6MjA6NTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBDYWxsIHVubG9jayBmb3IgbGl2ZSBzb3VyY2VzIHNvIHRoYXQgdGhleSBjYW4ndCBnZXQgc3R1Y2sgaW4gX2NyZWF0ZSBhbmQgcHJvZHVjZSBhIGJ1ZmZlci4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2RvX3N5bmMpLAorCSAgKGdzdF9iYXNlX3NyY19nZXRfcmFuZ2UpLCAoZ3N0X2Jhc2Vfc3JjX2NoYW5nZV9zdGF0ZSk6CisJICBDYWxsIHVubG9jayBmb3IgbGl2ZSBzb3VyY2VzIHNvIHRoYXQgdGhleSBjYW4ndCBnZXQgc3R1Y2sgaW4gX2NyZWF0ZSBhbmQKKwkgIHByb2R1Y2UgYSBidWZmZXIgYmVmb3JlIHRoZXkgYXJlIHNldCBiYWNrIHRvIFBMQVlJTkcuCisKKzIwMDctMTAtMDIgMDk6MjE6NDggKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogQ29tbWVudCB0aGUgc2VnbWVudC1yZWxhdGVkIGNvZGUuLi4gaW4gdGhlIFBST1BFUiBmdW5jdGlvbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfbG9ja2VkX2VucXVldWUpLAorCSAgKGdzdF9xdWV1ZV9sb2NrZWRfZGVxdWV1ZSk6CisJICBDb21tZW50IHRoZSBzZWdtZW50LXJlbGF0ZWQgY29kZS4uLiBpbiB0aGUgUFJPUEVSIGZ1bmN0aW9uLgorCSAgU2VlICM0ODIxNDcgYW5kIG15IGNvbW1pdCBmcm9tIHllc3RlcmRheS4KKworMjAwNy0xMC0wMSAxNzo1OToyMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IEFsc28gaW5pdGlhbGl6ZSB0aGUgY291bnRlciB0aGF0IGNhbGN1bGF0ZXMgdGhlIGZpcnN0IHRpbWVzdGFtcCBvbiBhIGJ1ZmZlciBjb3JyZWN0bHkgZm9yLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfY2hhbmdlX3N0YXRlKToKKwkgIEFsc28gaW5pdGlhbGl6ZSB0aGUgY291bnRlciB0aGF0IGNhbGN1bGF0ZXMgdGhlIGZpcnN0IHRpbWVzdGFtcCBvbiBhCisJICBidWZmZXIgY29ycmVjdGx5IGZvciBub24tbGl2ZSBzb3VyY2VzLgorCisyMDA3LTEwLTAxIDEyOjMxOjI4ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IERpc2FibGUgY29kZSB0aGF0J3MgYnJlYWtpbmcgdGhlIGN1cnJlbnQtdGltZS1sZXZlbCByZXBvcnRpbmcuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2xvY2tlZF9kZXF1ZXVlKToKKwkgIERpc2FibGUgY29kZSB0aGF0J3MgYnJlYWtpbmcgdGhlIGN1cnJlbnQtdGltZS1sZXZlbCByZXBvcnRpbmcuCisJICBTZWUgIzQ4MjE0NworCisyMDA3LTA5LTMwIDE4OjE2OjM0ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IEFkZCBNX1BJIGFuZCBJTVBPUlRfU1lNQk9MIHRvIHRoZSBwcml2YXRlIHBhcnQgb2YgdGhlIEdzdEluZm8gc2VjdGlvbiBhcyB0aGV5IHNob3VsZC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICBBZGQgTV9QSSBhbmQgSU1QT1JUX1NZTUJPTCB0byB0aGUgcHJpdmF0ZSBwYXJ0IG9mIHRoZSBHc3RJbmZvIHNlY3Rpb24KKwkgIGFzIHRoZXkgc2hvdWxkbid0IHNob3cgdXAuIEZpeGVzIHRoZSBkb2NzIGJ1aWxkLgorCisyMDA3LTA5LTI5IDExOjQ2OjMxICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+CisKKwkgIGdzdC9nc3RpbmZvLmg6IEFkZCBhbiBleHBsaWNpdCB2YXJpYWJsZSBpbXBvcnRhdGlvbiBuZWVkZWQgb24gVlM2IChvbmx5IGZvciBNU0NfVkVSKQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RpbmZvLmg6CisJICBBZGQgYW4gZXhwbGljaXQgdmFyaWFibGUgaW1wb3J0YXRpb24gbmVlZGVkIG9uIFZTNiAob25seSBmb3IgTVNDX1ZFUikKKwkgIERlZmluZSBNX1BJIHdoaWNoIGlzIHVzZWQgaW4gZmlsZXMgd2hpY2ggYXJlIGluY2x1ZGluZyBnc3RpbmZvLmguCisJICBWUzYgaW5jbHVkZXMgZG9lc24ndCBkZWZpbmUgaXQuCisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKKwkgICogd2luMzIvY29tbW9uL2xpYmdzdGNvbnRyb2xsZXIuZGVmOgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIEFkZCBuZXcgZXhwb3J0ZWQgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMuCisJICAqIHdpbjMyL3ZzNi9saWJnc3Rjb250cm9sbGVyLmRzcDoKKwkgICogd2luMzIvdnM2L2xpYmdzdHJlYW1lci5kc3A6CisJICBVcGRhdGUgdGhlIGxpc3Qgb2YgZmlsZXMgdG8gYnVpbGQuCisKKzIwMDctMDktMjggMTA6MjI6NDAgKzAwMDAgIEZlbGlwZSBDb250cmVyYXMgPGZlbGlwZS5jb250cmVyYXNAZ21haWwuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IEltcHJvdmUgZGVidWdnaW5nLiBGaXhlcyAjNDgwODU4LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogRmVsaXBlIENvbnRyZXJhcyA8ZmVsaXBlIGRvdCBjb250cmVyYXMgYXQgZ21haWwgZG90IGNvbT4KKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiAodXBkYXRlX3RpbWVfbGV2ZWwpLCAoYXBwbHlfYnVmZmVyKSwKKwkgIChnc3RfcXVldWVfbG9ja2VkX2RlcXVldWUpLCAoZ3N0X3F1ZXVlX2hhbmRsZV9zaW5rX2V2ZW50KSwKKwkgIChnc3RfcXVldWVfY2hhaW4pLCAoZ3N0X3F1ZXVlX2xvb3ApLCAoZ3N0X3F1ZXVlX3NyY19hY3RpdmF0ZV9wdXNoKToKKwkgIEltcHJvdmUgZGVidWdnaW5nLiBGaXhlcyAjNDgwODU4LgorCisyMDA3LTA5LTI4IDEwOjE1OjIzICswMDAwICBGZWxpcGUgQ29udHJlcmFzIDxmZWxpcGUuY29udHJlcmFzQGdtYWlsLmNvbT4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiBGaXJzdCBwYXRjaCBvZiBjb2RlIGNsZWFudXBzLCB1c2UgdGhlIG1hY3JvcyBhbmQgcmlnaHQgYXJndW1lbnRzIGluIHRoZSBtYWNyb3MgdG8gc2lnbmFsLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBGZWxpcGUgQ29udHJlcmFzIDxmZWxpcGUgZG90IGNvbnRyZXJhcyBhdCBnbWFpbCBkb3QgY29tPgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfaGFuZGxlX3NpbmtfZXZlbnQpOgorCSAgRmlyc3QgcGF0Y2ggb2YgY29kZSBjbGVhbnVwcywgdXNlIHRoZSBtYWNyb3MgYW5kIHJpZ2h0IGFyZ3VtZW50cyBpbiB0aGUKKwkgIG1hY3JvcyB0byBzaWduYWwgYW5kIGxvY2sgdGhlIHF1ZXVlLiBTZWUgIzQ4MDg1OC4KKworMjAwNy0wOS0yNiAxODowNjo0MiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJ1cy5jOiBJbXByb3ZlIGRlYnVnZ2luZyB3aGVuIGRlYWxpbmcgd2l0aCBfcG9sbCgpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RidXMuYzogKHBvbGxfZnVuYyk6CisJICBJbXByb3ZlIGRlYnVnZ2luZyB3aGVuIGRlYWxpbmcgd2l0aCBfcG9sbCgpLgorCisyMDA3LTA5LTI2IDE4OjA0OjQyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogRml4IG1lbW9yeSBsZWFrIEkgaW50cm9kdWNlZCBhIGZldyBkYXlzIGFnby4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzoKKwkgIEZpeCBtZW1vcnkgbGVhayBJIGludHJvZHVjZWQgYSBmZXcgZGF5cyBhZ28uCisKKzIwMDctMDktMjYgMTc6MDA6MjIgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KKworCSAgZ3N0L2dzdGJ1ZmZlci5jOiBNYWtlIGl0IG9uY2UgYWdhaW4gcG9zc2libGUgdG8gZnJlZSBHc3RCdWZmZXJzIGluIHRoZSBkZWZhdWx0IGJ1aWxkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RidWZmZXIuYzogKGdzdF9idWZmZXJfZmluYWxpemUpOgorCSAgTWFrZSBpdCBvbmNlIGFnYWluIHBvc3NpYmxlIHRvIGZyZWUgR3N0QnVmZmVycyBpbiB0aGUgZGVmYXVsdAorCSAgYnVpbGQuCisJICBUaGUgcG9pc29uaW5nIHNjcmliYmxlcyBvbiBwYXJ0cyBvZiB0aGUgbWluaW9iamVjdCB3ZSBuZWVkIGluCisJICBvcmRlciB0byBmcmVlIGl0LgorCSAgRml4ZXMgIzQ4MDM0MQorCisyMDA3LTA5LTI1IDE4OjM1OjM5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBBUEk6IGFkZCBHU1RfVEFHX0NPTVBPU0VSLCBmaXhlcyAjNDU5ODA5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3R0YWdsaXN0LmM6CisJICAqIGdzdC9nc3R0YWdsaXN0Lmg6CisJICBBUEk6IGFkZCBHU1RfVEFHX0NPTVBPU0VSLCBmaXhlcyAjNDU5ODA5LgorCisyMDA3LTA5LTI0IDE3OjQxOjI1ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIGdzdC9nc3RwbHVnaW4uKjogQWRkIHRoZSAzLWNsYXVzZSBCU0QgbGljZW5zZSBhbmQgdGhlIE1JVC9YMTEgbGljZW5zZSB0byB0aGUgbGljZW5zZSBsaXN0LiBGaXhlcyAjNDc5Nzg0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwbHVnaW4uYzoKKwkgICogZ3N0L2dzdHBsdWdpbi5oOgorCSAgQWRkIHRoZSAzLWNsYXVzZSBCU0QgbGljZW5zZSBhbmQgdGhlIE1JVC9YMTEgbGljZW5zZSB0byB0aGUgbGljZW5zZQorCSAgbGlzdC4gRml4ZXMgIzQ3OTc4NC4KKworMjAwNy0wOS0yNCAxNzoyMjoyMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZG9jcy9mYXEvZ2V0dGluZy54bWw6IEFkZCBRK0EgYWJvdXQgZGlmZmVyZW50IEdTdHJlYW1lciB2ZXJzaW9ucyAoIzM2NDA1NikuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9mYXEvZ2V0dGluZy54bWw6CisJICBBZGQgUStBIGFib3V0IGRpZmZlcmVudCBHU3RyZWFtZXIgdmVyc2lvbnMgKCMzNjQwNTYpLgorCisyMDA3LTA5LTI0IDEyOjQ2OjE3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFJldHVybiBjb3JyZWN0IGdib29sZWFuIGZyb20gcXVlcnkgZnVuY3Rpb24uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19xdWVyeV9sYXRlbmN5KSwKKwkgIChnc3RfYmFzZV9zaW5rX2V2ZW50KSwgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKKwkgIFJldHVybiBjb3JyZWN0IGdib29sZWFuIGZyb20gcXVlcnkgZnVuY3Rpb24uCisKKzIwMDctMDktMjQgMTI6Mjk6MjMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogU2ltcGxpZnkgbGF0ZW5jeSBxdWVyeS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX3F1ZXJ5X2xhdGVuY3kpLAorCSAgKGdzdF9iYXNlX3NpbmtfZXZlbnQpLCAoZ3N0X2Jhc2Vfc2lua19xdWVyeSksCisJICAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgorCSAgU2ltcGxpZnkgbGF0ZW5jeSBxdWVyeS4KKwkgIFdoZW4gbm90IHN5bmNocm9uaXppbmcsIHdlIGNhbiByZXBvcnQgbGF0ZW5jeSB3aXRob3V0IHF1ZXJ5aW5nIHRoZSBwZWVyCisJICBlbGVtZW50LgorCisyMDA3LTA5LTI0IDExOjQ2OjM1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvOiBGaXggc21hbGwgdHlwb3MgaW4gdGhlIGRvY3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdG9iamVjdC5oOgorCSAgKiBnc3QvZ3N0dmFsdWUuYzoKKwkgIEZpeCBzbWFsbCB0eXBvcyBpbiB0aGUgZG9jcy4KKworMjAwNy0wOS0yNCAxMToyMjoyNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vOiBEb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHR5cG8gZml4ZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vZHJhZnQtbGF0ZW5jeS50eHQ6CisJICAqIGRvY3MvZGVzaWduL2RyYWZ0LXB1c2gtcHVsbC50eHQ6CisJICAqIGRvY3MvZGVzaWduL2RyYWZ0LXRhZ3JlYWRpbmcudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LU1ULXJlZmNvdW50aW5nLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1hY3RpdmF0aW9uLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1ibG9jay50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtZWxlbWVudC1zb3VyY2UudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtZ3N0YmluLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RlbGVtZW50LnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RvYmplY3QudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdHBpcGVsaW5lLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1tZXNzYWdlcy50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtcHJlcm9sbC50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtcHVzaC1wdWxsLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1xb3MudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXF1ZXJ5LnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1zY2hlZHVsaW5nLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1zZWVraW5nLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1zZWdtZW50cy50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtc3RhdGVzLnR4dDoKKwkgIERvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHlwbyBmaXhlcy4KKworMjAwNy0wOS0yMyAxMDoxNjo0OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOiBBZGQgc29tZSBkZWJ1ZyB0ZXh0IHRvIGVycm9yIG1lc3NhZ2UgdG8gaW5kaWNhdGUgdGhhdCB3ZSBlcnJvcmVkIG91dCBvbiByZXF1ZXN0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKKwkgIEFkZCBzb21lIGRlYnVnIHRleHQgdG8gZXJyb3IgbWVzc2FnZSB0byBpbmRpY2F0ZSB0aGF0CisJICB3ZSBlcnJvcmVkIG91dCBvbiByZXF1ZXN0LgorCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6CisJICBXaGVuIHRoZSBzdGF0ZSBjaGFuZ2UgdG8gUExBWUlORyBmYWlscywgY2hlY2sgZm9yIGFuCisJICBlcnJvciBtZXNzYWdlIG9uIHRoZSBidXMgYW5kIHByaW50IGl0LgorCisyMDA3LTA5LTIyIDE3OjIyOjEwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogcG8vY3MucG86CisJKiBwby9odS5wbzoKKwkqIHBvL3VrLnBvOgorCSAgdXBkYXRlZCB0cmFuc2xhdGlvbnMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgdXBkYXRlZCB0cmFuc2xhdGlvbnMKKworMjAwNy0wOS0yMiAxNzoxODo1MiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIHBvLzogQWRkZWQgU3BhbmlzaCB0cmFuc2xhdGlvbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgdHJhbnNsYXRlZCBieTogSm9yZ2UgR29uesOhbGV6IEdvbnrDoWxleiA8YWxvcmllbEBnbWFpbC5jb20+CisJICAqIHBvL0xJTkdVQVM6CisJICAqIHBvL2VzLnBvOgorCSAgQWRkZWQgU3BhbmlzaCB0cmFuc2xhdGlvbi4KKworMjAwNy0wOS0yMSAxNDozNzozOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiBGaXggcHJpbnRmIGFyZ3VtZW50cy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfcHVzaF9vbmUpOgorCSAgRml4IHByaW50ZiBhcmd1bWVudHMuCisKKzIwMDctMDktMjAgMTA6MzY6MjMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgdGVzdHMvY2hlY2svZ2VuZXJpYy9zdGF0ZXMuYzogSW1wcm92ZWQgc3RhdGUgY2hhbmdlIHVuaXQgdGVzdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9nZW5lcmljL3N0YXRlcy5jOgorCSAgSW1wcm92ZWQgc3RhdGUgY2hhbmdlIHVuaXQgdGVzdC4KKworMjAwNy0wOS0yMCAwNzo0MjozNSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0YmluLmg6IE1vdmUgcHJpdiB0byB0aGUgcmlnaHQgcGxhY2UuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5oOgorCSAgTW92ZSBwcml2IHRvIHRoZSByaWdodCBwbGFjZS4KKwkgICogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6CisJICBBZGQgRklYTUU6IGFuZCBpbXByb3ZlIGxvZy4KKwkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICAqIHRlc3RzL2V4YW1wbGVzL21hbnVhbC9NYWtlZmlsZS5hbToKKwkgIFdvcmsgd2l0aCBhbGwgdHlwZXMgb2YgcmVnaXN0cmllcy4KKworMjAwNy0wOS0xOSAyMDozOTo1MiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IERvbid0IHVucmVmIHRoZSBldmVudCBhZnRlciBwdXNoaW5nIGl0LiBGaXhlcyAjNDc4NDAxLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX3NlbmRfZXZlbnQpOgorCSAgRG9uJ3QgdW5yZWYgdGhlIGV2ZW50IGFmdGVyIHB1c2hpbmcgaXQuIEZpeGVzICM0Nzg0MDEuCisKKzIwMDctMDktMTkgMTg6MDc6MTggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgSWdub3JlIHJlZ2lzdHJpZXMgaW4gYW55IGZvcm1hdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiAuY3ZzaWdub3JlOgorCSAgKiB0ZXN0cy9leGFtcGxlcy9tYW51YWwvLmN2c2lnbm9yZToKKwkgIElnbm9yZSByZWdpc3RyaWVzIGluIGFueSBmb3JtYXQuCisKKzIwMDctMDktMTkgMTM6Mjg6NDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nbGliLWNvbXBhdC1wcml2YXRlLmg6IEFkZCBjb21wYXRpYmlsaXR5IG1hY3JvIGZvciBnX2ludGVybl9zdHJpbmcoKSBmb3IKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oOgorCSAgQWRkIGNvbXBhdGliaWxpdHkgbWFjcm8gZm9yIGdfaW50ZXJuX3N0cmluZygpIGZvcgorCSAgR0xpYi0yLjggKGFueSByZWFzb24gd2UgY2FuJ3QganVzdCBidW1wIHRoZQorCSAgcmVxdWlyZW1lbnQgdG8gYXQgbGVhc3QgMi4xMD8pCisJICAqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5oOgorCSAgKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6CisJICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgorCSAgTWFrZSBHc3RTdGF0aWNQYWRUZW1wbGF0ZSdzIHRlbXBsX25hbWUgZmllbGQgYSBjb25zdCBnY2hhciAqIGFuZCBmaXgKKwkgIHVwIHRoZSBpbnRlcm5hbCBjb2RlIGFjY29yZGluZ2x5LiAgVGhpcyBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtLCBzaW5jZQorCSAgdGhlcmUgaXMgbm8gcmVhc29uIGV4dGVybmFsIGNvZGUgY291bGQgZXZlciBhc3N1bWUgdGhlIHN0cmluZyBpbiBzdWNoCisJICBhIHN0cnVjdHVyZSBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgdW5sZXNzIGl0IGRpZCB0aGF0IGl0c2VsZjsgIHRoZQorCSAgdXNlIG9mIGdfc3RyZHVwKCkgaXMgcHJpdmF0ZSB0byBlbGVtZW50IGZhY3Rvcmllcy4gIFRoZSBuZXcgY29kZSBhbHNvCisJICBzYXZlcyBzb21lIG1lbW9yeSBieSBwdXR0aW5nIHBhZCB0ZW1wbGF0ZSBuYW1lIHN0cmluZ3MgaW50byB0aGUgR0xpYgorCSAgcXVhcmsgdGFibGUgaW5zdGVhZCBvZiBhbGxvY2F0aW5nIHRoZW0gZHluYW1pY2FsbHkuCisJICBEZWNsYXJpbmcgdGhpcyBmaWVsZCBjb25zdGFudCBmaXhlcyB3YXJuaW5ncyB3aXRoIGcrKy00LjIgd2hlbiB1c2luZworCSAgdGhlIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFIG1hY3JvIGluIGMrKyBjb2RlICgjNDc4MDkyKS4KKworMjAwNy0wOS0xOSAxMjozMToxNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzogUmVsZWFzZSBzdGF0aWMgY2Fwcy4gRml4ZXMgIzQ3NTcyMy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKKwkgIFJlbGVhc2Ugc3RhdGljIGNhcHMuIEZpeGVzICM0NzU3MjMuCisKKzIwMDctMDktMTggMjI6MTM6NTcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RpbmZvLio6IE1ha2Ugc29tZSBpbnRlcm5hbCBBUEkgdGFrZSBjb25zdCBnY2hhciAqIGluc3RlYWQgb2YganVzdCBnY2hhciAqIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzIHdpdGggZysrLS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RpbmZvLmM6CisJICAqIGdzdC9nc3RpbmZvLmg6CisJICBNYWtlIHNvbWUgaW50ZXJuYWwgQVBJIHRha2UgY29uc3QgZ2NoYXIgKiBpbnN0ZWFkIG9mIGp1c3QKKwkgIGdjaGFyICogdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZ3Mgd2l0aCBnKystNC4yLjIgd2hlbgorCSAgcGFzc2luZyBzdHJpbmcgY29uc3RhbnRzIChwYXJ0aWFsbHkgZml4ZXMgIzQ3ODA5MikuCisKKzIwMDctMDktMTcgMjA6NTU6MjMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RiaW4uYzogQSBsYXRlbmN5IHF1ZXJ5IGZhaWxzIHdoZW4gb25lIG9mIHRoZSBzaW5rcyBmYWlsLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RiaW4uYzogKGJpbl9xdWVyeV9sYXRlbmN5X2ZvbGQpLCAoZ3N0X2Jpbl9xdWVyeSk6CisJICBBIGxhdGVuY3kgcXVlcnkgZmFpbHMgd2hlbiBvbmUgb2YgdGhlIHNpbmtzIGZhaWwuCisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9zZXRfYmFzZV90aW1lKToKKwkgIEltcHJvdmUgZGVidWdnaW5nLgorCisyMDA3LTA5LTE3IDE3OjE3OjI5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgRml4IG1pbm9yIGNvbXBpbGF0aW9uIHdhcm5pbmdzIHNob3duIHdpdGggRm9ydGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9jb250aW51ZV9mdW5jKToKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfZG9fc3luYyk6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZF9mdWxsKToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IChnc3RfbXVsdGlfcXVldWVfbG9vcCk6CisJICBGaXggbWlub3IgY29tcGlsYXRpb24gd2FybmluZ3Mgc2hvd24gd2l0aCBGb3J0ZS4KKworMjAwNy0wOS0xNyAwNjowMTo1MyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiBNZWFzdXJlIHF1ZXVlIGxldmVsIGJhc2VkIG9uIHRoZSBkaWZmIGJldHdlZW4gaGVhZCBhbmQgdGFpbCB0aW1lc3RhbXBzIGV2ZW4gd2hlbiBwdXNoaW5nLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiAoYXBwbHlfYnVmZmVyKSwKKwkgIChnc3RfcXVldWVfbG9ja2VkX2VucXVldWUpLCAoZ3N0X3F1ZXVlX2xvY2tlZF9kZXF1ZXVlKToKKwkgIE1lYXN1cmUgcXVldWUgbGV2ZWwgYmFzZWQgb24gdGhlIGRpZmYgYmV0d2VlbiBoZWFkIGFuZCB0YWlsIHRpbWVzdGFtcHMKKwkgIGV2ZW4gd2hlbiBwdXNoaW5nIHRoZSBmaXJzdCBidWZmZXIuCisKKzIwMDctMDktMTQgMjM6MDY6MzEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogU2lua3MgdGhhdCBkb24ndCBwcmVyb2xsIGNhbiBhbHdheXMgYmUgcXVlcmllZCBmb3IgdGhlIGxhdGVuY3kuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19wcmVyb2xsX3F1ZXVlX2ZsdXNoKSwKKwkgIChnc3RfYmFzZV9zaW5rX2V2ZW50KSwgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKKwkgIFNpbmtzIHRoYXQgZG9uJ3QgcHJlcm9sbCBjYW4gYWx3YXlzIGJlIHF1ZXJpZWQgZm9yIHRoZSBsYXRlbmN5LgorCSAgRG9uJ3QgcG9zdCBBU1lOQyBzdGFydCB3aGVuIHdlIGFyZSBub3QgYXN5bmMuCisKKzIwMDctMDktMTQgMjA6MjQ6MjIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuKjogV2hlbiBkb3duc3RyZWFtIHJldHVybnMgVU5FWFBFQ1RFRCBmcm9tIHB1c2hpbmcgYSBidWZmZXIsIGRvbid0IHRyeSB0byBwdXNoIG1vcmUgYnVmZmVycy4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9sb2NrZWRfZW5xdWV1ZSksCisJICAoZ3N0X3F1ZXVlX2hhbmRsZV9zaW5rX2V2ZW50KSwgKGdzdF9xdWV1ZV9jaGFpbiksCisJICAoZ3N0X3F1ZXVlX3B1c2hfb25lKSwgKGdzdF9xdWV1ZV9oYW5kbGVfc3JjX3F1ZXJ5KSwKKwkgIChnc3RfcXVldWVfc2lua19hY3RpdmF0ZV9wdXNoKSwgKGdzdF9xdWV1ZV9zcmNfYWN0aXZhdGVfcHVzaCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuaDoKKwkgIFdoZW4gZG93bnN0cmVhbSByZXR1cm5zIFVORVhQRUNURUQgZnJvbSBwdXNoaW5nIGEgYnVmZmVyLCBkb24ndCB0cnkgdG8KKwkgIHB1c2ggbW9yZSBidWZmZXJzIGJ1dCBhbGxvdyBwdXNoaW5nIG9mIEVPUyBhbmQgTkVXU0VHTUVOVC4KKwkgIEFkZCBzb21lIG1vcmUgZGVidWcgaW5mbyBoZXJlIGFuZCB0aGVyZS4gRml4ZXMgIzQ3NjUxNC4KKworMjAwNy0wOS0xNCAxNTo1MjoyNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBMYXRlbmN5IHF1ZXJ5IGlzIGFsbG93ZWQgYWZ0ZXIgd2UgYXJlIHByZXJvbGxlZC4gSW50cm9kdWNlIGEgbmV3IGZsYWcgZm9yIHRoaXMgYW5kIHN0b3AgLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19pbml0KSwKKwkgIChnc3RfYmFzZV9zaW5rX3ByZXJvbGxfcXVldWVfZmx1c2gpLCAoZ3N0X2Jhc2Vfc2lua19jb21taXRfc3RhdGUpLAorCSAgKGdzdF9iYXNlX3Npbmtfd2FpdF9wcmVyb2xsKSwgKGdzdF9iYXNlX3NpbmtfbmVlZHNfcHJlcm9sbCksCisJICAoZ3N0X2Jhc2Vfc2lua19zZXRfZmx1c2hpbmcpLCAoZ3N0X2Jhc2Vfc2lua19xdWVyeSksCisJICAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgorCSAgTGF0ZW5jeSBxdWVyeSBpcyBhbGxvd2VkIGFmdGVyIHdlIGFyZSBwcmVyb2xsZWQuIEludHJvZHVjZSBhIG5ldyBmbGFnCisJICBmb3IgdGhpcyBhbmQgc3RvcCBhYnVzaW5nIG90aGVyIHZhcmlhYmxlcy4KKworMjAwNy0wOS0xMyAyMzo1Mzo0OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IFB1c2ggT09CIGV2ZW50cyBkb3duc3RyZWFtIHdoZW4gd2UgZ2V0IHRoZW0gaW4gc2VuZF9ldmVudC4gVGhpcyBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uIHRvLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfc2VuZF9ldmVudCk6CisJICBQdXNoIE9PQiBldmVudHMgZG93bnN0cmVhbSB3aGVuIHdlIGdldCB0aGVtIGluIHNlbmRfZXZlbnQuIFRoaXMgYWxsb3dzCisJICB0aGUgYXBwbGljYXRpb24gdG8gaW5zZXJ0IGV2ZW50cyBpbiB0aGUgcGlwZWxpbmUuCisJICBBZGQgc29tZSBtb3JlIGNvbW1lbnRzLgorCisyMDA3LTA5LTEzIDIxOjI3OjMzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvOiBNb3ZlIGxhdGVuY3kgcXVlcnkgZnJvbSBHc3RQaXBlbGluZSB0byBHc3RCaW4gc28gdGhhdCB3ZSBjYW4gYWxzbyB1c2UgaXQgd2hlbiBhc3luYy1oYW5kbGluZyBpcyBlbmFibGVkIG9uIGJpbnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9jbGFzc19pbml0KSwgKGNsZWFyX3F1ZXVlKSwKKwkgIChkb19iaW5fbGF0ZW5jeSksIChnc3RfYmluX2NoYW5nZV9zdGF0ZV9mdW5jKToKKwkgICogZ3N0L2dzdHBpcGVsaW5lLmM6IChnc3RfcGlwZWxpbmVfY2hhbmdlX3N0YXRlKToKKwkgIE1vdmUgbGF0ZW5jeSBxdWVyeSBmcm9tIEdzdFBpcGVsaW5lIHRvIEdzdEJpbiBzbyB0aGF0IHdlIGNhbiBhbHNvCisJICB1c2UgaXQgd2hlbiBhc3luYy1oYW5kbGluZyBpcyBlbmFibGVkIG9uIGJpbnMuCisKKzIwMDctMDktMTMgMjE6MTk6MDggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBVcGRhdGUgZG9jcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19xdWVyeV9sYXRlbmN5KSwKKwkgIChnc3RfYmFzZV9zcmNfZG9fc3luYyksIChnc3RfYmFzZV9zcmNfY2hhbmdlX3N0YXRlKToKKwkgIFVwZGF0ZSBkb2NzLgorCSAgQ2xlYW4gdXAgdGhlIHRpbWVzdGFtcGluZyBhbmQgc3luY2luZyBjb2RlIGZvciBwc2V1ZG8gbGl2ZSBzb3VyY2VzLgorCisyMDA3LTA5LTEzIDE5OjI3OjUzICswMDAwICBTdGV2ZSBGaW5rIDxzcGhpbmtAZ21haWwuY29tPgorCisJICBkb2NzL21hbnVhbC9hcHBlbmRpeC1jaGVja2xpc3QueG1sOiBNZW50aW9uIGxlc3MgLVIgc3dpdGNoIGluIHRoZSBzZWN0aW9uIGFib3V0IGRlYnVnIG91dHB1dCAoIzQ3NDA1NSkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBTdGV2ZSBGaW5rICA8c3BoaW5rIGdtYWlsIGNvbT4KKwkgICogZG9jcy9tYW51YWwvYXBwZW5kaXgtY2hlY2tsaXN0LnhtbDoKKwkgIE1lbnRpb24gbGVzcyAtUiBzd2l0Y2ggaW4gdGhlIHNlY3Rpb24gYWJvdXQgZGVidWcgb3V0cHV0ICgjNDc0MDU1KS4KKworMjAwNy0wOS0xMyAxNzoxNTozOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiBRdWV1ZSBjYW4gbGF0ZW5jeSB0byB0aGUgcGlwZWxpbmUgdXAgdG8gdGhlIGNvbmZpZ3VyZWQgbWF4IHNpemUgaW4gdGltZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfaGFuZGxlX3NyY19xdWVyeSk6CisJICBRdWV1ZSBjYW4gbGF0ZW5jeSB0byB0aGUgcGlwZWxpbmUgdXAgdG8gdGhlIGNvbmZpZ3VyZWQgbWF4IHNpemUgaW4gdGltZS4KKwkgIFJlcG9ydCB0aGlzIGZhY3QgaW4gdGhlIGxhdGVuY3kgcXVlcnkuCisKKzIwMDctMDktMTMgMDk6MDg6MjMgKzAwMDAgIFNlYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgorCisJICBsaWJzL2dzdC9jb250cm9sbGVyLzogVXNlIGdzdF9ndWludDY0X3RvX2dkb3VibGUoKSB3aGVuIGNvbnZlcnRpbmcgZnJvbSBhIHVpbnQ2NCBvcgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogU2ViYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuIGF0IG1vdXR0ZSBkb3QgbmV0PgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmM6CisJICBVc2UgZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSgpIHdoZW4gY29udmVydGluZyBmcm9tIGEgdWludDY0IG9yCisJICBHc3RDbG9ja1RpbWUgdG8gZG91YmxlIHRvIGZpeCB0aGUgYnVpbGQgb24gd2luMzIuIEZpeGVzICM0NzQzNzEuCisKKzIwMDctMDktMTMgMDg6NDI6NTUgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgZ3N0L2dzdGJ1ZmZlci5jOiBJbXBsZW1lbnQgcG9pc29uaW5nIGZvciBHc3RCdWZmZXIgaWYgLS1lbmFibGUtcG9pc29uaW5nIGlzIHNwZWNpZmllZC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YnVmZmVyLmM6IChnc3RfYnVmZmVyX2ZpbmFsaXplKToKKwkgIEltcGxlbWVudCBwb2lzb25pbmcgZm9yIEdzdEJ1ZmZlciBpZiAtLWVuYWJsZS1wb2lzb25pbmcgaXMgc3BlY2lmaWVkLgorCSAgV2hlbiBmaW5hbGl6aW5nIGEgYnVmZmVyIHRoZSBjb21wbGV0ZSBzdHJ1Y3QgaXMgZmlsbGVkIHdpdGggMHhmZiwKKwkgIHRodXMgbWFraW5nIGEgdXNlIG9mIHRoZSBidWZmZXIgYWZ0ZXIgdGhlIGZpbmFsIHVucmVmIGltcG9zc2libGUuCisKKzIwMDctMDktMTMgMDg6MzY6MzcgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6IFVzZSBmYWlsX3VubGVzc19lcXVhbHNfaW50KGEsIGIpIGluc3RlYWQgb2YgZmFpbF91bmxlc3NfZXF1YWxzIChhID09IGIpIHRvIGdldCBiZXR0ZXIgLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBVc2UgZmFpbF91bmxlc3NfZXF1YWxzX2ludChhLCBiKSBpbnN0ZWFkIG9mCisJICBmYWlsX3VubGVzc19lcXVhbHMgKGEgPT0gYikgdG8gZ2V0IGJldHRlciBvdXRwdXQgb24gZmFpbHVyZXMuCisKKzIwMDctMDktMTIgMTY6MzU6NDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHRlc3RzL2NoZWNrL2dzdC9nc3R1cmkuYzogQWxzbyBjaGVjayBmb3IgdGhlIG90aGVyIGZpbGUgVVJJIHZhcmlhbnQgb24gd2luMzIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHVyaS5jOgorCSAgQWxzbyBjaGVjayBmb3IgdGhlIG90aGVyIGZpbGUgVVJJIHZhcmlhbnQgb24gd2luMzIuCisKKzIwMDctMDktMTIgMTI6MzY6NTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3R1cmkuYzogSWYgdGhlcmUncyBubyBob3N0bmFtZSwgd2Ugd2FudCB0byByZXR1cm4gJ2M6L2Zvby9iYXIudHh0JyBhbmQgbm90ICcvYzovZm9vL2Jhci50eHQnIG9uIFdpbmRvd3MuIEZpeGVzIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R1cmkuYzogKGdzdF91cmlfZ2V0X2xvY2F0aW9uKToKKwkgIElmIHRoZXJlJ3Mgbm8gaG9zdG5hbWUsIHdlIHdhbnQgdG8gcmV0dXJuICdjOi9mb28vYmFyLnR4dCcKKwkgIGFuZCBub3QgJy9jOi9mb28vYmFyLnR4dCcgb24gV2luZG93cy4gRml4ZXMgIzQ2OTQwMi4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHVyaS5jOgorCSAgVW5pdCB0ZXN0IGZvciB0aGUgYWJvdmUgYW5kIGEgZmV3IG1vcmUgdGhpbmdzLgorCisyMDA3LTA5LTExIDIzOjI3OjQyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL2Rlc2lnbi9wYXJ0LWxpdmUtc291cmNlLnR4dDogQWRkIGRvY3Mgb24gaG93IGxpdmUgc291cmNlcyBzaG91bGQgdGltZXN0YW1wLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtbGl2ZS1zb3VyY2UudHh0OgorCSAgQWRkIGRvY3Mgb24gaG93IGxpdmUgc291cmNlcyBzaG91bGQgdGltZXN0YW1wLgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19kb19zeW5jKToKKwkgIEFkZCBzb21lIG1vcmUgZGVidWcgaW5mby4KKwkgIEZvciBzdWJjbGFzc2VzIHRoYXQgYXJlIGxpdmUgYW5kIGxpa2UgdG8gc3luYywgYWRkIGFkaXRpb25hbCBzdGFydHVwCisJICBsYXRlbmN5IHRvIHN5bmMgdGltZSBhbmQgdGltZXN0YW1wcyBzbyB0aGF0IHdlIHRpbXN0YW1wIGFjY29yZGluZyB0byB0aGUKKwkgIGRlc2lnbiBkb2MuCisKKzIwMDctMDktMTEgMTg6NTk6MDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RidWZmZXIuYzogQWxzbyBkbyBhIGdfdHlwZV9jbGFzc19yZWYoKSBmb3IgdGhlIHN1YmJ1ZmZlciB0eXBlIGluIHRoZSBpbml0IGZ1bmN0aW9uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RidWZmZXIuYzoKKwkgIEFsc28gZG8gYSBnX3R5cGVfY2xhc3NfcmVmKCkgZm9yIHRoZSBzdWJidWZmZXIgdHlwZSBpbgorCSAgdGhlIGluaXQgZnVuY3Rpb24uCisKKzIwMDctMDktMTEgMTU6NTU6NTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIEFkZCBmdW5jdGlvbiB0byBwZXJmb3JtIGEgcXVlcnkgb24gdGhlIHBlZXIgb2YgYSBwYWQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9wZWVyX3F1ZXJ5KToKKwkgICogZ3N0L2dzdHBhZC5oOgorCSAgQWRkIGZ1bmN0aW9uIHRvIHBlcmZvcm0gYSBxdWVyeSBvbiB0aGUgcGVlciBvZiBhIHBhZC4KKwkgIEFQSTogZ3N0X3BhZF9wZWVyX3F1ZXJ5KCkKKworMjAwNy0wOS0xMSAxMzo0Mzo1MyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICB0ZXN0cy9jaGVjay9nc3QvZ3N0c3lzdGVtY2xvY2suYzogQ2xlYW51cCB0aGUgdGVzdCBhIGxpdHRsZSAodXNlIGdzdC1sb2dnaW5nIGFuZCBub3QgZ19tZXNzYWdlKS4gSW1wcm92ZSB0ZXN0IHRvIGNoZWMuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3lzdGVtY2xvY2suYzoKKwkgIENsZWFudXAgdGhlIHRlc3QgYSBsaXR0bGUgKHVzZSBnc3QtbG9nZ2luZyBhbmQgbm90IGdfbWVzc2FnZSkuIEltcHJvdmUKKwkgIHRlc3QgdG8gY2hlY2sgaWYgYSB3YWl0IHJlYWNoZWQgdGhlIHRhcmdldC4KKworMjAwNy0wOS0xMSAxMDozMzoxNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDogQWRkIG5ldyBBUEkgdG8gZG9jcyBhbmQgZml4IHRoZSBidWlsZC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSAgQWRkIG5ldyBBUEkgdG8gZG9jcyBhbmQgZml4IHRoZSBidWlsZC4KKworMjAwNy0wOS0xMCAxNjo1MDoxMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLio6IEFkZCBwcm9wZXJ0eSB0byBtYWtlIHRoZSBiYXNlc3JjIHRpbWVzdGFtcCBidWZmZXJzIGJhc2VkIG9uIHRoZSBjdXJyZW50IHJ1bm5pbmcgdGltZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19jbGFzc19pbml0KSwKKwkgIChnc3RfYmFzZV9zcmNfaW5pdCksIChnc3RfYmFzZV9zcmNfc2V0X2RvX3RpbWVzdGFtcCksCisJICAoZ3N0X2Jhc2Vfc3JjX2dldF9kb190aW1lc3RhbXApLCAoZ3N0X2Jhc2Vfc3JjX3NldF9wcm9wZXJ0eSksCisJICAoZ3N0X2Jhc2Vfc3JjX2dldF9wcm9wZXJ0eSksIChnc3RfYmFzZV9zcmNfZG9fc3luYyk6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgorCSAgQWRkIHByb3BlcnR5IHRvIG1ha2UgdGhlIGJhc2VzcmMgdGltZXN0YW1wIGJ1ZmZlcnMgYmFzZWQgb24gdGhlIGN1cnJlbnQKKwkgIHJ1bm5pbmcgdGltZS4KKwkgIEFQSTogR3N0QmFzZVNyYzo6ZG8tdGltZXN0YW1wCisJICBBUEk6IGdzdF9iYXNlX3NyY19zZXRfZG9fdGltZXN0YW1wKCkKKwkgIEFQSTogZ3N0X2Jhc2Vfc3JjX2dldF9kb190aW1lc3RhbXAoKQorCisyMDA3LTA5LTA4IDIwOjI1OjU3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBkb2NzL3JhbmRvbS9yZWxlYXNlOiBSZWFsbHkgbWFrZSBzdXJlIHRyYW5zbGF0aW9ucyBhcmUgdXAtdG8tZGF0ZSBiZWZvcmUgYSByZWxlYXNlICgjNDY1MDEwKS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL3JhbmRvbS9yZWxlYXNlOgorCSAgUmVhbGx5IG1ha2Ugc3VyZSB0cmFuc2xhdGlvbnMgYXJlIHVwLXRvLWRhdGUgYmVmb3JlCisJICBhIHJlbGVhc2UgKCM0NjUwMTApLgorCisyMDA3LTA5LTA3IDE0OjQ2OjUyICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+CisKKwkqIGdzdHJlYW1lci5zcGVjLmluOgorCSAgYWRkIGxhdGVzdCBoZWFkZXIgZmlsZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkIGxhdGVzdCBoZWFkZXIgZmlsZXMKKworMjAwNy0wOS0wNyAwNDo1MDoyMyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogQWx3YXlzIGRlc3Ryb3kgdGhlIHRpbWVyLCBhbHNvIGluIGVycm9yIGNhc2VzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9yZWFkX2NhY2hlKToKKwkgIEFsd2F5cyBkZXN0cm95IHRoZSB0aW1lciwgYWxzbyBpbiBlcnJvciBjYXNlcy4KKworMjAwNy0wOS0wNSAyMjoyOTo1OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9tYW51YWwvaGlnaGxldmVsLXhtbC54bWw6IEZpeCBYTUwgZXhhbXBsZSBjb2RlLiBGaXhlcyAjNDcyNzE0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvbWFudWFsL2hpZ2hsZXZlbC14bWwueG1sOgorCSAgRml4IFhNTCBleGFtcGxlIGNvZGUuIEZpeGVzICM0NzI3MTQuCisKKzIwMDctMDktMDUgMjI6MTI6NDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogUHJvdGVjdCBlb3MgYW5kIGhhdmVfcHJlcm9sbCB3aXRoIHRoZSBPQkpFQ1QgbG9jayBzbyB3ZSBkb24ndCBuZWVkIHRvIHRha2UgdGhlIFBSRVJPTEwgbC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfcHJlcm9sbF9xdWV1ZV9mbHVzaCksCisJICAoZ3N0X2Jhc2Vfc2lua193YWl0X3ByZXJvbGwpLCAoZ3N0X2Jhc2Vfc2lua19uZWVkc19wcmVyb2xsKSwKKwkgIChnc3RfYmFzZV9zaW5rX3F1ZXJ5KToKKwkgIFByb3RlY3QgZW9zIGFuZCBoYXZlX3ByZXJvbGwgd2l0aCB0aGUgT0JKRUNUIGxvY2sgc28gd2UgZG9uJ3QgbmVlZCB0bworCSAgdGFrZSB0aGUgUFJFUk9MTCBsb2NrIHdoZW4gcXVlcnlpbmcgdGhlIGxhdGVuY3kuIEZpeGVzICM0NzM4NDYuCisKKzIwMDctMDktMDUgMTM6MjQ6MzEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdGVsZW1lbnQuYzogR2l2ZSBzb21lIGxvZy1tZXNzYWdlcyBhIGNhdGVnb3J5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6CisJICBHaXZlIHNvbWUgbG9nLW1lc3NhZ2VzIGEgY2F0ZWdvcnkuCisKKzIwMDctMDktMDUgMDE6MDA6NTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RzdHJ1Y3R1cmUuYzogRml4IGZyYWN0aW9uIGxpc3QgZml4YXRpb24gY29kZS4gVGFrZSB0aGUgZnJhY3Rpb24gd2l0aCB0aGUgc21hbGxlc3QgZGlmZmVyZW5jZSB3aXRoIHRoZSB0YXJnZXQgaS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkgIChnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ZyYWN0aW9uKToKKwkgIEZpeCBmcmFjdGlvbiBsaXN0IGZpeGF0aW9uIGNvZGUuIFRha2UgdGhlIGZyYWN0aW9uIHdpdGggdGhlIHNtYWxsZXN0CisJICBkaWZmZXJlbmNlIHdpdGggdGhlIHRhcmdldCBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBvbmUgaW4gdGhlIGxpc3QuCisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzogKEdTVF9TVEFSVF9URVNUKSwKKwkgIChnc3Rfc3RydWN0dXJlX3N1aXRlKToKKwkgIEFkZGVkIHRlc3QgdG8gdmVyaWZ5IGNvcnJlY3QgZnJhY3Rpb24gbGlzdCBmaXhhdGlvbiBiZWhhdmlvdXIuCisKKzIwMDctMDktMDIgMjA6MzA6MTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOiBFeHBvcnQgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoIHRvby4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIEV4cG9ydCBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2ggdG9vLgorCisyMDA3LTA4LTMwIDE3OjUwOjU0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OiBBZGQgbmV3IG1ldGhvZHMgdG8gZG9jcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSAgQWRkIG5ldyBtZXRob2RzIHRvIGRvY3MuCisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfY2xhc3NfaW5pdCksCisJICAoZ3N0X2Jhc2Vfc2lua19pbml0KSwgKGdzdF9iYXNlX3Npbmtfc2V0X3RzX29mZnNldCksCisJICAoZ3N0X2Jhc2Vfc2lua19nZXRfdHNfb2Zmc2V0KSwgKGdzdF9iYXNlX3Npbmtfc2V0X3Byb3BlcnR5KSwKKwkgIChnc3RfYmFzZV9zaW5rX2dldF9wcm9wZXJ0eSksIChnc3RfYmFzZV9zaW5rX3dhaXRfY2xvY2spOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJICBBZGQgdHMtb2Zmc2V0IHByb3BlcnR5IHRvIGZpbmUtdHVuZSB0aGUgc3luY2hyb25pc2F0aW9uLgorCSAgQVBJOiBHc3RCYXNlU2luazo6dHMtb2Zmc2V0IHByb3BlcnR5CisJICBBUEk6IGdzdF9iYXNlX3Npbmtfc2V0X3RzX29mZnNldCgpCisJICBBUEk6IGdzdF9iYXNlX3NpbmtfZ2V0X3RzX29mZnNldCgpCisKKzIwMDctMDgtMjkgMjA6NTc6NTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuKjogQWRkIGFzeW5jIHByb3BlcnR5IHRvIGluc3RydWN0IHRoZSBzaW5rIG5ldmVyIHRvIGluZm9ybSB0aGUgcGFyZW50IGFib3V0CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19jbGFzc19pbml0KSwKKwkgIChnc3RfYmFzZV9zaW5rX2luaXQpLCAoZ3N0X2Jhc2Vfc2lua19zZXRfc3luYyksCisJICAoZ3N0X2Jhc2Vfc2lua19nZXRfc3luYyksIChnc3RfYmFzZV9zaW5rX3NldF9tYXhfbGF0ZW5lc3MpLAorCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X21heF9sYXRlbmVzcyksIChnc3RfYmFzZV9zaW5rX3NldF9xb3NfZW5hYmxlZCksCisJICAoZ3N0X2Jhc2Vfc2lua19pc19xb3NfZW5hYmxlZCksIChnc3RfYmFzZV9zaW5rX3NldF9hc3luY19lbmFibGVkKSwKKwkgIChnc3RfYmFzZV9zaW5rX2lzX2FzeW5jX2VuYWJsZWQpLCAoZ3N0X2Jhc2Vfc2lua19zZXRfcHJvcGVydHkpLAorCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3Byb3BlcnR5KSwgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSAgQWRkIGFzeW5jIHByb3BlcnR5IHRvIGluc3RydWN0IHRoZSBzaW5rIG5ldmVyIHRvIGluZm9ybSB0aGUgcGFyZW50IGFib3V0CisJICBBU1lOQyBzdGF0ZSBjaGFuZ2VzLCB1cGRhdGUgZG9jcy4KKwkgIENoZWNrIGFyZ3VtZW50IHdpdGggZ19yZXR1cm5fKiBmb3IgdGhlIHB1YmxpYyBmdW5jdGlvbnMuCisJICBBUEk6IEdzdEJhc2VTaW5rOjphc3luYyBwcm9wZXJ0eQorCSAgQVBJOiBnc3RfYmFzZV9zaW5rX3NldF9hc3luY19lbmFibGVkKCkKKwkgIEFQSTogZ3N0X2Jhc2Vfc2lua19pc19hc3luY19lbmFibGVkKCkKKworMjAwNy0wOC0yOCAxNTowMjoxOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBJbXByb3ZlIGRlYnVnZ2luZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2xvb3ApOgorCSAgSW1wcm92ZSBkZWJ1Z2dpbmcuCisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX3F1ZXJ5X2xhdGVuY3kpLAorCSAgKGdzdF9iYXNlX3NyY19kZWZhdWx0X3F1ZXJ5KSwgKGdzdF9iYXNlX3NyY193YWl0KSwKKwkgIChnc3RfYmFzZV9zcmNfZG9fc3luYyksIChnc3RfYmFzZV9zcmNfY2hhbmdlX3N0YXRlKToKKwkgIFJlYXJyYW5nZSBzb21lIGNvZGUgc28gdGhhdCB3ZSBjYW4gYWRkIHN1cHBvcnQgZm9yIG1lYXN1cmluZyB0aGUKKwkgIHN0YXJ0dXAgbGF0ZW5jeS4KKworMjAwNy0wOC0yNyAyMDowMDozOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBkb2NzL3JhbmRvbS9lbnNvbmljL2R5bmxpbmsudHh0OiBNb3JlIHRob3VnaHMgb24gdGhpcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL3JhbmRvbS9lbnNvbmljL2R5bmxpbmsudHh0OgorCSAgTW9yZSB0aG91Z2hzIG9uIHRoaXMuCisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgorCSAgQWRkIGJ1Z3ppbGxhIHRpY2tldCBudW1iZXIgdG8gRklYTUUgY29tbWVudC4KKworMjAwNy0wOC0yNiAxODozMDo1NSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIE1BSU5UQUlORVJTOgorCSAgcmVtb3ZlIHRlbXAgZmlsZXMgYWdhaW4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVtb3ZlIHRlbXAgZmlsZXMgYWdhaW4KKworMjAwNy0wOC0yNiAxNjo0MjozNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIE1BSU5UQUlORVJTOgorCSAgdGVzdCBjb21taXQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgdGVzdCBjb21taXQKKworMjAwNy0wOC0yNiAxNTo1ODoxOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIEFVVEhPUlM6CisJKiBNQUlOVEFJTkVSUzoKKwkgIHRlc3QgY29tbWl0CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHRlc3QgY29tbWl0CisKKzIwMDctMDgtMjQgMjE6NTM6MzkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZGVzaWduLzogVXBkYXRlIHNvbWUgZG9jcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWJsb2NrLnR4dDoKKwkgIFVwZGF0ZSBzb21lIGRvY3MuCisKKzIwMDctMDgtMjQgMTY6Mzk6MDYgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBnc3QvTWFrZWZpbGUuYW06IFJldmVydCBwYXRjaCB3aGljaCB1c2VzICQoZ3N0X2hlYWRlcnMpIGluc3RlYWQgb2YgJF4gYmVjYXVzZSBpdCBicmVha3MgbWFrZSBkaXN0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9NYWtlZmlsZS5hbToKKwkgIFJldmVydCBwYXRjaCB3aGljaCB1c2VzICQoZ3N0X2hlYWRlcnMpIGluc3RlYWQgb2YgJF4gYmVjYXVzZSBpdAorCSAgYnJlYWtzIG1ha2UgZGlzdC4KKworMjAwNy0wOC0yNCAxNDo1NTo0NiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIHRlc3RzL2NoZWNrL2dzdC9nc3RiaW4uYzogRml4IGxlYWtzIGluIHRoZSBuZXcgdW5pdCB0ZXN0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RiaW4uYzogKEdTVF9TVEFSVF9URVNUKToKKwkgIEZpeCBsZWFrcyBpbiB0aGUgbmV3IHVuaXQgdGVzdC4KKworMjAwNy0wOC0yMyAyMDo0MTozMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdC5jOiBEb24ndCB1c2UgR1NUX0lORk8gYmVmb3JlIHRoZSBkZWJ1ZyBzeXN0ZW0gaXMgYWN0dWFsbHkgaW5pdGlhbGlzZWQgKHNob3VsZG4ndCBkbyBhbnkgaGFybSwgYnV0IHdvbid0IHByaW50Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdC5jOgorCSAgRG9uJ3QgdXNlIEdTVF9JTkZPIGJlZm9yZSB0aGUgZGVidWcgc3lzdGVtIGlzIGFjdHVhbGx5IGluaXRpYWxpc2VkCisJICAoc2hvdWxkbid0IGRvIGFueSBoYXJtLCBidXQgd29uJ3QgcHJpbnQgYW55dGhpbmcgZWl0aGVyLCBzbyB3ZSBjYW4KKwkgIGp1c3QgYXMgd2VsbCByZW1vdmUgaXQpLgorCSAgKiBnc3QvZ3N0aW5mby5oOgorCSAgR1NUX0NBVF9MRVZFTF9MT0dfdmFsaXN0KCksIHdoaWNoIGlzIG91ciBpbmxpbmUgaGVscGVyIGZ1bmN0aW9uIGZvcgorCSAgY29tcGlsZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB2YXJpYWRpYyBtYWNyb3MgKHN1Y2ggYXMgTVNWQyksIHNob3VsZAorCSAgY2hlY2sgZm9yIGRlYnVnX2xldmVsIDw9IF9fZ3N0X2RlYnVnX21pbiBhcyB3ZWxsLCBzaW5jZSB0aGF0J3MgdGhlCisJICBmdW5jdGlvbiBjYWxsZWQgZnJvbSBhbGwgdGhlIGxldmVsLXNwZWNpZmljIEdTVF9DQVRfKl9MT0dfT0JKRUNUKCkKKwkgIGlubGluZSBoZWxwZXIgZnVuY3Rpb25zLiBTaG91bGQgaW1wcm92ZSBwZXJmb3JtYW5jZSBhIGJpdCwgYnV0IGFsc28KKwkgIG1ha2VzIHN1cmUgdXNlcyBvZiBHU1RfSU5GTyBldC5hbCBhcmUgaWdub3JlZCBpZiB0aGUgZGVidWdnaW5nCisJICBzeXN0ZW0gaXNuJ3QgaW5pdGlhbGlzZWQgeWV0IChpbnN0ZWFkIG9mIHByaW50aW5nIGFuIGFzc2VydGlvbgorCSAgZmFpbHVyZSkuCisKKzIwMDctMDgtMjMgMDc6MTA6MzMgKzAwMDAgIERhdmlkIE5lxI1hcyA8eWV0aUBwaHlzaWNzLm11bmkuY3o+CisKKwkgIGdzdC9NYWtlZmlsZS5hbTogUmVwbGFjZSBzb21lIG5vbiBwb3J0YWJsZSBtYWtlZmlsZSBjb25zdHJ1Y3RzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBwYXRjaCBieTogRGF2aWQgTmXEjWFzIDx5ZXRpQHBoeXNpY3MubXVuaS5jej4KKwkgICogZ3N0L01ha2VmaWxlLmFtOgorCSAgUmVwbGFjZSBzb21lIG5vbiBwb3J0YWJsZSBtYWtlZmlsZSBjb25zdHJ1Y3RzLgorCisyMDA3LTA4LTIxIDE0OjEwOjA5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGNvbW1vbi9ndGstZG9jLXBsdWdpbnMubWFrOiBHcnJycnIuIERvbid0IHJlbW92ZSB0aGUgdHlwZXMgZmlsZSBvbiBtYWtlIGNsZWFuLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbW1vbi9ndGstZG9jLXBsdWdpbnMubWFrOgorCSAgR3JycnJyLiBEb24ndCByZW1vdmUgdGhlIHR5cGVzIGZpbGUgb24gbWFrZSBjbGVhbi4KKworMjAwNy0wOC0yMCAxNzo1MTozNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgdG9vbHMvZ3N0LWxhdW5jaC4xLmluOiBBZGQgY29sb3JzcGFjZSB0byBleGFtcGxlIHBpcGVsaW5lLiBGaXhlcyAjNDU4Mjc0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKKwkgIEFkZCBjb2xvcnNwYWNlIHRvIGV4YW1wbGUgcGlwZWxpbmUuIEZpeGVzICM0NTgyNzQuCisKKzIwMDctMDgtMjAgMTI6MzE6NTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGRvY3MvcmFuZG9tL3JlbGVhc2U6IFRoZSByZWxlYXNlIG1hbmFnZXIgc2hvdWxkIHJ1biAnbWFrZSBkb3dubG9hZC1wbycgYmVmb3JlIG1ha2luZyBhIHJlbGVhc2UgdG8gbWFrZSBzdXJlIHRyYW5zbGF0aS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcmFuZG9tL3JlbGVhc2U6CisJICBUaGUgcmVsZWFzZSBtYW5hZ2VyIHNob3VsZCBydW4gJ21ha2UgZG93bmxvYWQtcG8nIGJlZm9yZSBtYWtpbmcgYQorCSAgcmVsZWFzZSB0byBtYWtlIHN1cmUgdHJhbnNsYXRpb25zIGFyZSB1cC10by1kYXRlLgorCSAgKiBwby9MSU5HVUFTOgorCSAgKiBwby9iZS5wbzoKKwkgICogcG8vcGwucG86CisJICAqIHBvL3J3LnBvOgorCSAgQWRkIHNvbWUgbmV3IHRyYW5zbGF0aW9ucy4KKworMjAwNy0wOC0xNyAxMzo0ODoyNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgdG9vbHMvZ3N0LWxhdW5jaC5jOiBEb27CtHQgdHJ5IHRvIGRvIGFueSBzdGF0ZSBtYW5hZ2VtZW50IHdoZW4gYSBsaXZlIHBpcGVsaW5lIHBvc3RzIGJ1ZmZlcmluZyBtZXNzYWdlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChldmVudF9sb29wKSwgKG1haW4pOgorCSAgRG9uwrR0IHRyeSB0byBkbyBhbnkgc3RhdGUgbWFuYWdlbWVudCB3aGVuIGEgbGl2ZSBwaXBlbGluZSBwb3N0cworCSAgYnVmZmVyaW5nIG1lc3NhZ2VzLgorCSAgQWxzbyBtYWtlIHRoZSBidWZmZXJpbmcgc3RyaW5nIHRyYW5zbGF0YWJsZS4KKworMjAwNy0wOC0xNiAxMTowNDo0MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJpbi5jOiBJbXByb3ZlIGRlYnVnZ2luZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChpc19lb3MpLCAoZ3N0X2Jpbl9hZGRfZnVuYyksCisJICAoYmluX2hhbmRsZV9hc3luY19zdGFydCksIChnc3RfYmluX2hhbmRsZV9tZXNzYWdlX2Z1bmMpOgorCSAgSW1wcm92ZSBkZWJ1Z2dpbmcuCisJICBXaGVuIGFkZGluZyBlbGVtZW50cywgaW5zZXJ0IG1lc3NhZ2VzIGludG8gdGhlIGJ1cyBvZiB0aGUgbmV3bHkgYWRkZWQKKwkgIGVsZW1lbnQgYW5kIG1ha2Ugc3VyZSB0aGUgZWxlbWVudCBpcyB0aGUgc291cmNlIG9mIHRoZSBtZXNzYWdlLiBUaGlzCisJICBhbGxvd3MgdGhlIHBhcmVudCBiaW4gdG8gaW50ZXJjZXB0IHRoZSBtZXNzYWdlIGFuZCBkbyB0aGUKKwkgIHJpZ2h0IHRoaW5nLiBJdCBhbHNvIGF2b2lkcyB1cyBwb3N0aW5nIEFTWU5DX1NUQVJUIGFuZCBDTE9DS19QUk9WSURFCisJICBtZXNzYWdlcyB0byB0aGUgYXBwICh3aGljaCBpcyBub3QgYWxsb3dlZCkuCisJICBVcGRhdGUgc29tZSBkb2NzLgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgIEZpeCB0ZXN0c3VpdGUgc28gdGhhdCBpcyBkb2VzIG5vdCB3b3JrIGFyb3VuZCBtZXNzYWdlcyB0aGF0IHNob3VsZCBub3QKKwkgIGhhdmUgYmVlbiBwb3N0ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLgorCisyMDA3LTA4LTE2IDEwOjI3OjE2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YmluLmM6IEZpeCBhbm5veWluZyBidWcgaW4gdGhlIHNvcnRlZCBpdGVyYXRvciB3aGVyZSBhIHNpbmsgdGhhdCBpcyBub3QgcmVhbGx5IGEgc2luayAod2hlbiBpdCBoYXMgZG93bnN0cmVhbSAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChhZGRfdG9fcXVldWUpLCAocmVtb3ZlX2Zyb21fcXVldWUpLCAoY2xlYXJfcXVldWUpLAorCSAgKHVwZGF0ZV9kZWdyZWUpLCAoZ3N0X2Jpbl9zb3J0X2l0ZXJhdG9yX25leHQpOgorCSAgRml4IGFubm95aW5nIGJ1ZyBpbiB0aGUgc29ydGVkIGl0ZXJhdG9yIHdoZXJlIGEgc2luayB0aGF0IGlzIG5vdCByZWFsbHkKKwkgIGEgc2luayAod2hlbiBpdCBoYXMgZG93bnN0cmVhbSBsaW5rcykgc2NyZXdlZCB1cCB0aGUgaXRlcmF0b3IuCisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RiaW4uYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9iaW5fc3VpdGUpOgorCSAgVW5pdCB0ZXN0IHRvIHZlcmlmeSB0aGUgZml4LgorCisyMDA3LTA4LTE2IDEwOjA3OjQ4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0bWVzc2FnZS5oOiBBZGQgc29tZSBtb3JlIGRvY3MgZm9yIHRoZSBtZXNzYWdlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgorCSAgQWRkIHNvbWUgbW9yZSBkb2NzIGZvciB0aGUgbWVzc2FnZXMuCisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfY29tbWl0X3N0YXRlKSwKKwkgIChnc3RfYmFzZV9zaW5rX3F1ZXJ5KToKKwkgIEFkZCBzb21lIG1vcmUgZGVidWdnaW5nLgorCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChldmVudF9sb29wKToKKwkgIFdoZW4gaW50ZXJydXB0aW5nLCBkb24ndCB0cnkgdG8gc2V0IHBpcGVsaW5lIHRvIFBBVVNFRCB0d2ljZS4KKworMjAwNy0wOC0xNCAxNDoxMDozNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJpbi5jOiBNb3ZlIEFTWU5DX1NUQVJUIG1lc3NhZ2UgcG9zdGluZyB0byB3aGVyZSBpdCBiZWxvbmdzLCBzaW1pbGFyIHRvIGFzeW5jX2RvbmUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9hZGRfZnVuYyksIChnc3RfYmluX2VsZW1lbnRfc2V0X3N0YXRlKSwKKwkgIChiaW5faGFuZGxlX2FzeW5jX3N0YXJ0KSwgKGdzdF9iaW5faGFuZGxlX21lc3NhZ2VfZnVuYyk6CisJICBNb3ZlIEFTWU5DX1NUQVJUIG1lc3NhZ2UgcG9zdGluZyB0byB3aGVyZSBpdCBiZWxvbmdzLCBzaW1pbGFyIHRvCisJICBhc3luY19kb25lLgorCSAgRG9uJ3QgcG9zdCBBU1lOQ19TVEFSVCB3aGVuIHdlIGFyZSBpbiBlcnJvci4KKwkgIFBvc3QgQVNZTkNfU1RBUlQgd2hlbiB3ZSBhZGRlZCBhbiBhc3luYyBlbGVtZW50IHRvIGEgYmluLgorCisyMDA3LTA4LTE0IDEzOjQzOjQ0ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KKworCSAgZ3N0L2dzdGluZGV4LmM6IEZpeCBpbmRleCBlbnRyeSBnZW5lcmF0aW9uIGZyb20gdmFyZ3MuIEZpeGVzICM0NjY1OTUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDctMDgtMTQgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KKwkgICogZ3N0L2dzdGluZGV4LmM6IChnc3RfaW5kZXhfYWRkX2Fzc29jaWF0aW9uKTogRml4IGluZGV4IGVudHJ5CisJICBnZW5lcmF0aW9uIGZyb20gdmFyZ3MuIEZpeGVzICM0NjY1OTUuCisKKzIwMDctMDgtMTQgMTM6Mzc6MTYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RiaW4uYzogQWx3YXlzIGNoYW5nZSB0aGUgc3RhdGUgb2YgYSBOT19QUkVST0xMIGVsZW1lbnQgZXZlbiBpZiBpdCBoYXMgQVNZTkMgZWxlbWVudHMgaW5zaWRlIChpbiBjYXNlIG9mIGEgYmluKS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2VsZW1lbnRfc2V0X3N0YXRlKToKKwkgIEFsd2F5cyBjaGFuZ2UgdGhlIHN0YXRlIG9mIGEgTk9fUFJFUk9MTCBlbGVtZW50IGV2ZW4gaWYgaXQgaGFzIEFTWU5DCisJICBlbGVtZW50cyBpbnNpZGUgKGluIGNhc2Ugb2YgYSBiaW4pLgorCSAgKiB0ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3Rfc2lua3Nfc3VpdGUpOgorCSAgVW5pdCB0ZXN0IGZvciB0aGlzIGNhc2UuCisKKzIwMDctMDgtMTMgMTM6MzM6MDcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgQWRkIG1vcmUgbWlzc2luZyBkb2NzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGJ1ZmZlcnN0cmF3LmM6CisJICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xzb3VyY2UuaDoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmg6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5oOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5oOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmg6CisJICBBZGQgbW9yZSBtaXNzaW5nIGRvY3MuCisKKzIwMDctMDgtMTIgMTY6NDQ6MDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RzdHJ1Y3R1cmUuYzogQWRkIFNpbmNlIHRhZyB0byBkb2NzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkgIEFkZCBTaW5jZSB0YWcgdG8gZG9jcy4KKworMjAwNy0wOC0xMiAxNjo0MDo1OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgQWRkIGZ1bmN0aW9uIHRvIGdldCB1aW50IGZyb20gYSBzdHJ1Y3R1cmUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludCk6CisJICAqIGdzdC9nc3RzdHJ1Y3R1cmUuaDoKKwkgIEFkZCBmdW5jdGlvbiB0byBnZXQgdWludCBmcm9tIGEgc3RydWN0dXJlLgorCSAgQVBJOiBnc3Rfc3RydWN0dXJlX2dldF91aW50KCkKKworMjAwNy0wOC0xMiAxNjozODo0MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGNhcHMuYzogRml4IHByb3BlciBjaGVjayBmb3Igc2ltcGxlIGNhcHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGNhcHMuYzogKGdzdF9jYXBzX3NldF9zaW1wbGVfdmFsaXN0KSwKKwkgIChnc3RfY2Fwc19pbnRlcnNlY3QpOgorCSAgRml4IHByb3BlciBjaGVjayBmb3Igc2ltcGxlIGNhcHMuCisKKzIwMDctMDgtMTAgMTc6MzU6MzAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZG9jcy86IFJlbW92ZSBjcnVmdCBhbmQgZG8gc29tZSBjbGVhbnVwcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9NYWtlZmlsZS5hbToKKwkgICogZG9jcy9saWJzL01ha2VmaWxlLmFtOgorCSAgUmVtb3ZlIGNydWZ0IGFuZCBkbyBzb21lIGNsZWFudXBzLgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtZG9jcy5zZ21sOgorCSAgUHJlcGFyZSBmb3IgY29tbWluZyBndGtkb2MgZmVhdHVyZXMgKHJlYmFzZSBhZ2FpbnN0IG9ubGluZSBkb2NzKS4KKworMjAwNy0wOC0xMCAxNDo1Mjo0MSArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgorCisJICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBBZGQgZ3N0X3JlZ2lzdHJ5X2FkZF9wYXRoIHRvIGRvY3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgIEFkZCBnc3RfcmVnaXN0cnlfYWRkX3BhdGggdG8gZG9jcy4KKwkgIEFsc28gZml4IGZvcm1hdHRpbmcgb2YgYW4gb2xkZXIgY2hhbmdlbG9nIGVudHJ5CisKKzIwMDctMDgtMTAgMTQ6NDA6MjYgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KKworCSAgZ3N0L2dzdHJlZ2lzdHJ5Lmg6IEFkZCBnc3RfcmVnaXN0cnlfYWRkX3BhdGgsIHdoaWNoIHdhcyBtaXNzaW5nIGZyb20gdGhpcyBoZWFkZXIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5Lmg6CisJICBBZGQgZ3N0X3JlZ2lzdHJ5X2FkZF9wYXRoLCB3aGljaCB3YXMgbWlzc2luZyBmcm9tIHRoaXMgaGVhZGVyLgorCisyMDA3LTA4LTEwIDEwOjMwOjIyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuYzogUHJpbnRmIGZvcm1hdCBmaXguCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmM6CisJICBQcmludGYgZm9ybWF0IGZpeC4KKworMjAwNy0wOC0wOSAyMTo1MDoxOSArMDAwMCAgUGhpbGlwcGUgS2FsYWYgPHBoaWxpcHBlLmthbGFmQGNvbGxhYm9yYS5jby51az4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBEb24ndCBzZW5kIGFuIGFzeW5jX3N0YXJ0IG1lc3NhZ2UgZHVyaW5nIGRvd253YXJkcyBzdGF0ZSBjaGFuZ2UgaWYgdGFyZ2V0IHN0YXRlIGlzIGxlc3MgLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgRG9uJ3Qgc2VuZCBhbiBhc3luY19zdGFydCBtZXNzYWdlIGR1cmluZyBkb3dud2FyZHMgc3RhdGUgY2hhbmdlIGlmIHRhcmdldAorCSAgc3RhdGUgaXMgbGVzcyB0aGFuIFJFQURZCisKKzIwMDctMDgtMDkgMTA6NTA6MjIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBwby86IEFkZGVkIEh1bmdhcmlhbiB0cmFuc2xhdGlvbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgdHJhbnNsYXRlZCBieTogR2Fib3IgS2VsZW1lbiA8a2VsZW1lbmdAZ25vbWUuaHU+CisJICAqIHBvL0xJTkdVQVM6CisJICAqIHBvL2h1LnBvOgorCSAgQWRkZWQgSHVuZ2FyaWFuIHRyYW5zbGF0aW9uLgorCisyMDA3LTA4LTA5IDEwOjQ4OjUzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgcG8vOiBVcGRhdGVkIHRyYW5zbGF0aW9ucy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwby9maS5wbzoKKwkgICogcG8vaXQucG86CisJICAqIHBvL25sLnBvOgorCSAgKiBwby9zdi5wbzoKKwkgICogcG8vdWsucG86CisJICBVcGRhdGVkIHRyYW5zbGF0aW9ucy4KKworMjAwNy0wOC0wNyAxNjowNjo0NyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06IERpc3QgZ3N0bGZvY29udHJvbHNvdXJjZXByaXZhdGUuaAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06CisJICBEaXN0IGdzdGxmb2NvbnRyb2xzb3VyY2Vwcml2YXRlLmgKKworMjAwNy0wOC0wNyAxNToxNTo0MCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy50eXBlczogRG9uJ3QgcmVnaXN0ZXIgdGhlIGVudW0gdHlwZSBnc3RfbGZvX3dhdmVmb3JtX2dldF90eXBlKCkgaW4gdGhlIC50eXBlcyBmaWxlIC0gb25seSBHTy4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy50eXBlczoKKwkgIERvbid0IHJlZ2lzdGVyIHRoZSBlbnVtIHR5cGUgZ3N0X2xmb193YXZlZm9ybV9nZXRfdHlwZSgpIGluIHRoZQorCSAgLnR5cGVzIGZpbGUgLSBvbmx5IEdPYmplY3QgZGVyaXZlZCB0eXBlcyBiZWxvbmcuCisKKzIwMDctMDgtMDcgMTQ6MDQ6MjIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RidWZmZXIuaDogUmVtb3ZlIGNvbW1hIGZyb20gbGFzdCBlbGVtZW50IGluIGVudW0gdG8gYXZvaWQgY29tcGlsZSBlcnJvcnMgd2hlbiB1c2luZyAtcGVuZGFudGljLiBGaXhlcyAjNDY0MzY2LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogPGFyZW5ldmllciBhdCBmZG4gZG90IGZyPgorCSAgKiBnc3QvZ3N0YnVmZmVyLmg6CisJICBSZW1vdmUgY29tbWEgZnJvbSBsYXN0IGVsZW1lbnQgaW4gZW51bSB0byBhdm9pZCBjb21waWxlIGVycm9ycyB3aGVuCisJICB1c2luZyAtcGVuZGFudGljLiBGaXhlcyAjNDY0MzY2LgorCisyMDA3LTA4LTA3IDA5OjU2OjA4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OiBBZGQgc29tZSBtb3JlIFRPRE8gaXRlbXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgorCSAgQWRkIHNvbWUgbW9yZSBUT0RPIGl0ZW1zCisJICAqIGdzdC9nc3RiaW4uYzogKGZpbmRfbWVzc2FnZSksIChnc3RfYmluX2NoYW5nZV9zdGF0ZV9mdW5jKToKKwkgIEltcHJvdmUgZGVidWdnaW5nLgorCSAgKiBnc3QvZ3N0Y2Fwcy5jOiAoZ3N0X2NhcHNfaW50ZXJzZWN0KToKKwkgIE9wdGltaXplIHRyaXZpYWwgaW50ZXJzZWN0aW9uIGNhc2UgYmV0d2VlbiBpZGVudGljYWwgY2FwcyBwb2ludGVycy4KKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2NvbnRpbnVlX3N0YXRlKSwKKwkgIChnc3RfZWxlbWVudF9zZXRfc3RhdGVfZnVuYyk6CisJICAqIGdzdC9nc3RwYWQuYzoKKwkgIEZpeCBzcGVsbGluZyBhbmQgZ3JhbW1hciBtaXN0YWtlcy4KKworMjAwNy0wOC0wNSAxNDo0ODowNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBwby9QT1RGSUxFUy4qOiBVcGRhdGUgUE9URklMRVMuIEZpeGVzICM0NjE1OTkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcG8vUE9URklMRVMuaW46CisJICAqIHBvL1BPVEZJTEVTLnNraXA6CisJICBVcGRhdGUgUE9URklMRVMuIEZpeGVzICM0NjE1OTkuCisKKzIwMDctMDgtMDMgMTk6MjU6NDUgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgZ3N0L2dzdC5jOiBGaXggY29uZnVzaW5nIHR5cG8gaW4gZGVidWcgb3V0cHV0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3QuYzoKKwkgIEZpeCBjb25mdXNpbmcgdHlwbyBpbiBkZWJ1ZyBvdXRwdXQuCisKKzIwMDctMDgtMDMgMTU6NDc6MTcgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgbGlicy9nc3QvY29udHJvbGxlci86IEFQSTogQWRkIEdzdExGT0NvbnRyb2xTb3VyY2UsIGEgY29udHJvbCBzb3VyY2UgdGhhdCBnaXZlcyB2YWx1ZXMgZm9yIHNwZWNpZmljIHRpbWVzdGFtcHMgYmFzZWQgLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJldmlld2VkIGJ5OiBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5jOiAoX2NhbGN1bGF0ZV9wb3MpLAorCSAgKGdzdF9sZm9fd2F2ZWZvcm1fZ2V0X3R5cGUpLCAoZ3N0X2xmb19jb250cm9sX3NvdXJjZV9yZXNldCksCisJICAoZ3N0X2xmb19jb250cm9sX3NvdXJjZV9uZXcpLAorCSAgKGdzdF9sZm9fY29udHJvbF9zb3VyY2Vfc2V0X3dhdmVmb3JtKSwKKwkgIChnc3RfbGZvX2NvbnRyb2xfc291cmNlX2JpbmQpLCAoZ3N0X2xmb19jb250cm9sX3NvdXJjZV9pbml0KSwKKwkgIChnc3RfbGZvX2NvbnRyb2xfc291cmNlX2ZpbmFsaXplKSwKKwkgIChnc3RfbGZvX2NvbnRyb2xfc291cmNlX2Rpc3Bvc2UpLAorCSAgKGdzdF9sZm9fY29udHJvbF9zb3VyY2Vfc2V0X3Byb3BlcnR5KSwKKwkgIChnc3RfbGZvX2NvbnRyb2xfc291cmNlX2dldF9wcm9wZXJ0eSksCisJICAoZ3N0X2xmb19jb250cm9sX3NvdXJjZV9jbGFzc19pbml0KToKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmg6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZXByaXZhdGUuaDoKKwkgIEFQSTogQWRkIEdzdExGT0NvbnRyb2xTb3VyY2UsIGEgY29udHJvbCBzb3VyY2UgdGhhdCBnaXZlcyB2YWx1ZXMKKwkgIGZvciBzcGVjaWZpYyB0aW1lc3RhbXBzIGJhc2VkIG9uIHNldmVyYWwgcGVyaW9kaWMgd2F2ZWZvcm1zLgorCSAgRml4ZXMgIzQ1OTcxNy4KKwkgICogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6IChHU1RfU1RBUlRfVEVTVCksCisJICAoZ3N0X2NvbnRyb2xsZXJfc3VpdGUpOgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtZG9jcy5zZ21sOgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMudHlwZXM6CisJICBBZGQgZG9jdW1lbnRhdGlvbiBhbmQgdW5pdCB0ZXN0cyBmb3IgR3N0TEZPQ29udHJvbFNvdXJjZS4KKworMjAwNy0wOC0wMyAxNDo0MDoyMiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGNvbmZpZ3VyZS5hYzogQmFjayB0byBDVlMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICBCYWNrIHRvIENWUworCis9PT0gcmVsZWFzZSAwLjEwLjE0ID09PQorCisyMDA3LTA4LTAzIDE0OjM5OjE1ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSogQ2hhbmdlTG9nOgorCSogTkVXUzoKKwkqIFJFTEVBU0U6CisJKiBjb25maWd1cmUuYWM6CisJKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuYXJnczoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6CisJKiBkb2NzL3JhbmRvbS9yZWxlYXNlOgorCSogZ3N0cmVhbWVyLmRvYXA6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICBSZWxlYXNlIDAuMTAuMTQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUmVsZWFzZSAwLjEwLjE0CisKKzIwMDctMDgtMDMgMTM6MjA6NTAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmcucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGEucG86CisJKiBwby9kZS5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZmkucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkgIFVwZGF0ZSAucG8gZmlsZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgVXBkYXRlIC5wbyBmaWxlcworCisyMDA3LTA4LTAyIDExOjUxOjE3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0ZWxlbWVudC4qOiBNYWtlIHN0cmluZ3MgcGFzc2VkIHRvIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZSgpIGNvbnN0YW50LCBhcyB0aGV5IHNob3VsZCBiZSAoIzQ2Mjc1MikuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZSk6CisJICAqIGdzdC9nc3RlbGVtZW50Lmg6CisJICBNYWtlIHN0cmluZ3MgcGFzc2VkIHRvIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZSgpCisJICBjb25zdGFudCwgYXMgdGhleSBzaG91bGQgYmUgKCM0NjI3NTIpLgorCisyMDA3LTA4LTAyIDExOjE1OjQ2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YmluLmM6IERvbid0IGZvcmdldCBhYm91dCB0aGUgZmFjdCB0aGF0IHNvbWUgZWxlbWVudCB3ZW50IEFTWU5DIGV2ZW4gYWZ0ZXIgYSByZXN5bmMuIFRoaXMgbWFrZXMgdXMgcG9zdCB0aGUgQVMuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2NoYW5nZV9zdGF0ZV9mdW5jKSwKKwkgIChiaW5faGFuZGxlX2FzeW5jX2RvbmUpLCAoZ3N0X2Jpbl9oYW5kbGVfbWVzc2FnZV9mdW5jKToKKwkgIERvbid0IGZvcmdldCBhYm91dCB0aGUgZmFjdCB0aGF0IHNvbWUgZWxlbWVudCB3ZW50IEFTWU5DIGV2ZW4gYWZ0ZXIgYQorCSAgcmVzeW5jLiBUaGlzIG1ha2VzIHVzIHBvc3QgdGhlIEFTWU5DX0RPTkUgbWVzc2FnZSBjb3JyZWN0bHkuCisJICBGaXhlcyAjNDYyNTU4LgorCisyMDA3LTA3LTMxIDExOjUxOjM4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZ3N0L2dzdHJlZ2lzdHJ5LmM6IFdoZW4gcmVwbGFjaW5nIGFuIGV4aXN0aW5nIGZlYXR1cmUgaW4gdGhlIHJlZ2lzdHJ5LCBtYWtlIHN1cmUgdG8gY29udGludWUgaG9sZGluZyBhIHJlZmVyZW5jZSB1bnRpLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6IChnc3RfcmVnaXN0cnlfYWRkX2ZlYXR1cmUpOgorCSAgV2hlbiByZXBsYWNpbmcgYW4gZXhpc3RpbmcgZmVhdHVyZSBpbiB0aGUgcmVnaXN0cnksIG1ha2Ugc3VyZSB0bworCSAgY29udGludWUgaG9sZGluZyBhIHJlZmVyZW5jZSB1bnRpbCB3ZSd2ZSByZXBsYWNlZCB0aGUgbmFtZSBzdHJpbmcKKwkgIHdpdGhpbiBvdXIgZmVhdHVyZSBoYXNoIHRhYmxlLiBNYWtlIHN1cmUgdG8gdXNlIGdfaGFzaF90YWJsZV9yZXBsYWNlCisJICBpbnN0ZWFkIG9mIGdfaGFzaF90YWJsZV9pbnNlcnQgdG8gZW5zdXJlIHRoZSBuZXcgbmFtZSBzdHJpbmcgaXMgdXNlZAorCSAgYXMgYSBrZXkgaW5zdGVhZCBvZiB0aGUgb2xkIG9uZSB0aGF0IHdlJ3JlIGFib3V0IHRvIGZyZWUuCisJICBGaXhlczogIzQ2MjA4NQorCisyMDA3LTA3LTMxIDEwOjEwOjI3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzogUmV2ZXJ0IHBhdGNoIGZyb20gIzQ1OTQ2NiB1bnRpbCBhZnRlciB0aGUgcmVsZWFzZSBhbmQgd2UgY2FuIHdvcmsgb3V0IGV4YWN0bHkgd2hhdCB0aGUgcHJvYmxlLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzogKGdzdF9wbHVnaW5fZmVhdHVyZV9maW5hbGl6ZSksCisJICAoZ3N0X3BsdWdpbl9mZWF0dXJlX3NldF9uYW1lKToKKwkgIFJldmVydCBwYXRjaCBmcm9tICM0NTk0NjYgdW50aWwgYWZ0ZXIgdGhlIHJlbGVhc2UgYW5kIHdlIGNhbiB3b3JrCisJICBvdXQgZXhhY3RseSB3aGF0IHRoZSBwcm9ibGVtIGlzIChpZiBhbnkpLgorCisyMDA3LTA3LTI2IDE1OjQ4OjQwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBBUEk6IGFkZCBHU1RfVEFHX0xJQ0VOU0VfVVJJIGFuZCBHU1RfVEFHX0NPUFlSSUdIVF9VUkkgKCM0NTE5MzkpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3R0YWdsaXN0LmM6CisJICAqIGdzdC9nc3R0YWdsaXN0Lmg6CisJICBBUEk6IGFkZCBHU1RfVEFHX0xJQ0VOU0VfVVJJIGFuZCBHU1RfVEFHX0NPUFlSSUdIVF9VUkkgKCM0NTE5MzkpLgorCisyMDA3LTA3LTI2IDE0OjA1OjIzICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZG9jcy9saWJzL01ha2VmaWxlLmFtOiBJbmNsdWRlIG91ciBidWlsZC1wcmVmaXggbGlicyBhbmQgaW5jbHVkZXMgYmVmb3JlIHRoZSBnZW5lcmljIG9uZXMgdG8gYXZvaWQgbGlua2luZyBhZ2FpbnN0IHRoLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9saWJzL01ha2VmaWxlLmFtOgorCSAgSW5jbHVkZSBvdXIgYnVpbGQtcHJlZml4IGxpYnMgYW5kIGluY2x1ZGVzIGJlZm9yZSB0aGUgZ2VuZXJpYyBvbmVzIHRvCisJICBhdm9pZCBsaW5raW5nIGFnYWluc3QgdGhlIGluc3RhbGxlZCBsaWJzIHdoZW4gd2Ugd2FudCB0aGUgYnVpbGQtdHJlZQorCSAgb25lcy4KKworMjAwNy0wNy0yNiAwODo0Njo0NiArMDAwMCAgU3RldmUgRmluayA8c3BoaW5rQGdtYWlsLmNvbT4KKworCSAgZG9jcy9wd2cvYnVpbGRpbmctdGVzdGFwcC54bWw6IE1lbnRpb24gdGhhdCBHU1RfUExVR0lOX1BBVEggb3IgLS1nc3QtcGx1Z2luLXBhdGggbWlnaHQgYmUgbmVlZGVkIGlmIHBlb3BsZSB0cnkgdG8gYnVpLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBTdGV2ZSBGaW5rICA8c3BoaW5rIGdtYWlsIGNvbT4KKwkgICogZG9jcy9wd2cvYnVpbGRpbmctdGVzdGFwcC54bWw6CisJICBNZW50aW9uIHRoYXQgR1NUX1BMVUdJTl9QQVRIIG9yIC0tZ3N0LXBsdWdpbi1wYXRoIG1pZ2h0IGJlIG5lZWRlZAorCSAgaWYgcGVvcGxlIHRyeSB0byBidWlsZCBvciBpbnN0YWxsIHRoZSBleGFtcGxlIGZyb20gdGhlIHBsdWdpbgorCSAgdGVtcGxhdGUgYWdhaW5zdCBhIEdTdHJlYW1lciBmcm9tIHBhY2thZ2UgdXNpbmcgdGhlIGNvbmZpZ3VyZQorCSAgZGVmYXVsdHMuCisKKzIwMDctMDctMjUgMjI6Mjk6NTcgKzAwMDAgIFN0ZXZlIEZpbmsgPHNwaGlua0BnbWFpbC5jb20+CisKKwkgIHRvb2xzL2dzdC1pbnNwZWN0LjEuaW46IERvY3VtZW50IC0tcHJpbnQtYWxsIGFuZCAtLXByaW50LXBsdWdpbi1hdXRvLWluc3RhbGwtaW5mbyBjb21tYW5kIGxpbmUgb3B0aW9ucyBpbiBtYW4gcGFnZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IFN0ZXZlIEZpbmsgIDxzcGhpbmsgZ21haWwgY29tPgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC4xLmluOgorCSAgRG9jdW1lbnQgLS1wcmludC1hbGwgYW5kIC0tcHJpbnQtcGx1Z2luLWF1dG8taW5zdGFsbC1pbmZvIGNvbW1hbmQKKwkgIGxpbmUgb3B0aW9ucyBpbiBtYW4gcGFnZS4KKworMjAwNy0wNy0yNSAxODo0Njo0OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogQWRkIGRvY3MgZm9yIG5ldyBhcGkgZnVuY3Rpb24uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgIEFkZCBkb2NzIGZvciBuZXcgYXBpIGZ1bmN0aW9uLgorCisyMDA3LTA3LTI1IDE4OjM3OjEyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuKjogQVBJOiBnc3RfZWxlbWVudF9mYWN0b3J5X2hhc19pbnRlcmZhY2UoKQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOiAoZ3N0X2VsZW1lbnRfZmFjdG9yeV9oYXNfaW50ZXJmYWNlKToKKwkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5Lmg6CisJICBBUEk6IGdzdF9lbGVtZW50X2ZhY3RvcnlfaGFzX2ludGVyZmFjZSgpCisJICBBZGRlZCBtZXRob2QgdG8gY2hlY2sgaWYgYW4gZWxlbWVudCBmYWN0b3J5IGltcGxlbWVudHMgYSBuYW1lZAorCSAgaW50ZXJmYWNlLgorCisyMDA3LTA3LTI1IDEzOjAwOjIzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIEFub3RoZXIgY29uZGl0aW9uYWwgZG9jIGNoZWNrLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzLmluOgorCSAgQW5vdGhlciBjb25kaXRpb25hbCBkb2MgY2hlY2suCisJICAqIGdzdC9nc3RtZXNzYWdlLmM6CisJICAqIGdzdC9nc3RwYXJhbXNwZWNzLmg6CisJICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9yZWFkX2NhY2hlKToKKwkgICogZ3N0L2dzdHZhbHVlLmM6CisJICAqIGdzdC9nc3R4bWwuaDoKKwkgIEFQSS1kb2MgZml4ZXMuCisKKzIwMDctMDctMjQgMTM6NDQ6MDQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IFByaW50IGVycm9yIGp1c3Qgb25jZSBhbmQgd2l0aCBhZGRpdGlvbmFsIGluZm8uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IChnc3RfcmVnaXN0cnlfYmluYXJ5X2NoZWNrX21hZ2ljKSwKKwkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2xvYWRfZmVhdHVyZSksCisJICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9sb2FkX3BsdWdpbiksCisJICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9yZWFkX2NhY2hlKToKKwkgIFByaW50IGVycm9yIGp1c3Qgb25jZSBhbmQgd2l0aCBhZGRpdGlvbmFsIGluZm8uCisKKzIwMDctMDctMjQgMTM6Mzg6MjEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOiBDbGVhbnVwIHRoZSB0eXBlZmluZGhlbHBlciBjb2RlIGFuZCBhZGQgcHJpdmF0ZSBkb2MgY29tbWVudHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOiAoaGVscGVyX2ZpbmRfcGVlayksCisJICAoaGVscGVyX2ZpbmRfc3VnZ2VzdCksIChoZWxwZXJfZmluZF9nZXRfbGVuZ3RoKSwKKwkgIChnc3RfdHlwZV9maW5kX2hlbHBlcl9nZXRfcmFuZ2UpLCAoYnVmX2hlbHBlcl9maW5kX3N1Z2dlc3QpLAorCSAgKGdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9idWZmZXIpOgorCSAgQ2xlYW51cCB0aGUgdHlwZWZpbmRoZWxwZXIgY29kZSBhbmQgYWRkIHByaXZhdGUgZG9jIGNvbW1lbnRzLgorCisyMDA3LTA3LTI0IDEyOjMyOjMxICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzogRml4IGNhcHNmaWx0ZXIgZm9yIGNhc2VzIHdoZXJlIHRoZSBjYXBzIHNldCBvbiBjYXBzZmlsdGVyIHdpbGwgcHJvdmlkZSBhZGRpdGlvbmFsIGkuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzogKGdzdF9jYXBzZmlsdGVyX2NsYXNzX2luaXQpLAorCSAgKGdzdF9jYXBzZmlsdGVyX3RyYW5zZm9ybV9zaXplKSwgKGdzdF9jYXBzZmlsdGVyX3ByZXBhcmVfYnVmKToKKwkgIEZpeCBjYXBzZmlsdGVyIGZvciBjYXNlcyB3aGVyZSB0aGUgY2FwcyBzZXQgb24gY2Fwc2ZpbHRlciB3aWxsIHByb3ZpZGUKKwkgIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisJICBGaXhlcyAjNDQ5MTk3CisKKzIwMDctMDctMjQgMTE6MzE6MDkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5jOiBGaXggZG9jcyB0aGF0IHJlY29tbWVuZWQgd3JvbmcgZnVuY3Rpb24gdG8gdXNlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuYzoKKwkgIEZpeCBkb2NzIHRoYXQgcmVjb21tZW5lZCB3cm9uZyBmdW5jdGlvbiB0byB1c2UuCisKKzIwMDctMDctMjMgMTM6MDM6NDMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgdG9vbHMvZ3N0LWluc3BlY3QuYzogQWxzbyBnaXZlIG1lZGlhLXR5cGUgZm9yIHR5cGVmaW5kZXJzIGluIGVsZW1lbnQgb3V0cHV0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1pbnNwZWN0LmM6IChwcmludF9wbHVnaW5fZmVhdHVyZXMpOgorCSAgQWxzbyBnaXZlIG1lZGlhLXR5cGUgZm9yIHR5cGVmaW5kZXJzIGluIGVsZW1lbnQgb3V0cHV0LgorCisyMDA3LTA3LTIzIDExOjQyOjEyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3RyZWdpc3RyeS4qOiBTcGVlZCB1cCBnc3RfcmVnaXN0cnlfbG9va3VwX2ZlYXR1cmVfbG9ja2VkKCkgYnkgdXNpbmcgYSBoYXNobWFwLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RyZWdpc3RyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2luaXQpLCAoZ3N0X3JlZ2lzdHJ5X2ZpbmFsaXplKSwKKwkgIChnc3RfcmVnaXN0cnlfcmVtb3ZlX2ZlYXR1cmVzX2Zvcl9wbHVnaW5fdW5sb2NrZWQpLAorCSAgKGdzdF9yZWdpc3RyeV9hZGRfZmVhdHVyZSksIChnc3RfcmVnaXN0cnlfcmVtb3ZlX2ZlYXR1cmUpLAorCSAgKGdzdF9yZWdpc3RyeV9sb29rdXBfZmVhdHVyZV9sb2NrZWQpOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnkuaDoKKwkgIFNwZWVkIHVwIGdzdF9yZWdpc3RyeV9sb29rdXBfZmVhdHVyZV9sb2NrZWQoKSBieSB1c2luZyBhIGhhc2htYXAuCisJICBGaXhlcyAjNDU5NTAxLgorCisyMDA3LTA3LTIzIDEwOjM5OjEwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6IEF2b2lkIGRvdWJsZSBtZW1vcnkgdXNhZ2UgZm9yIHBsdWdpbmZlYXR1cmUgbmFtZXMuIEZpeGVzICM0NTk0NjYuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzogKGdzdF9wbHVnaW5fZmVhdHVyZV9maW5hbGl6ZSksCisJICAoZ3N0X3BsdWdpbl9mZWF0dXJlX3NldF9uYW1lKToKKwkgIEF2b2lkIGRvdWJsZSBtZW1vcnkgdXNhZ2UgZm9yIHBsdWdpbmZlYXR1cmUgbmFtZXMuIEZpeGVzICM0NTk0NjYuCisKKzIwMDctMDctMjIgMTg6MjY6MzIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RwYWQuaDogU21hbGwgYWRkaXRpb24gdG8gR1NUX0ZMT1dfSVNfRkFUQUwoKSBkb2NzOiBtZW50aW9uIHRoYXQgZWxlbWVudHMgZHJpdmluZyB0aGUgcGlwZWxpbmUgbWF5IG5lZWQgdG8gZXhwbC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuaDoKKwkgIFNtYWxsIGFkZGl0aW9uIHRvIEdTVF9GTE9XX0lTX0ZBVEFMKCkgZG9jczogbWVudGlvbiB0aGF0IGVsZW1lbnRzCisJICBkcml2aW5nIHRoZSBwaXBlbGluZSBtYXkgbmVlZCB0byBleHBsaWNpdGx5IGNoZWNrIGZvciBOT1RfTElOS0VEIGFzCisJICB3ZWxsLCBzaW5jZSBJU19GQVRBTCBkb2Vzbid0IGNvdmVyIHRoYXQuCisKKzIwMDctMDctMjIgMTg6MTY6MTkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGRvY3MvcHdnL2FkdmFuY2VkLXR5cGVzLnhtbDogRml4IHR5cG8gYW5kIGR1cGxpY2F0ZSBlbnRyeSBpbiB2aWRlbyBmb3JtYXRzIGxpc3QuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9wd2cvYWR2YW5jZWQtdHlwZXMueG1sOgorCSAgRml4IHR5cG8gYW5kIGR1cGxpY2F0ZSBlbnRyeSBpbiB2aWRlbyBmb3JtYXRzIGxpc3QuCisKKzIwMDctMDctMjIgMTI6MTg6NDYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6IEFsc28gcm91bmQgdG8gdGhlIG5lYXJlc3QgaW50IHdoZW4gdXNpbmcgY3ViaWMgaW50ZXJwb2xhdGlvbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzoKKwkgIEFsc28gcm91bmQgdG8gdGhlIG5lYXJlc3QgaW50IHdoZW4gdXNpbmcgY3ViaWMgaW50ZXJwb2xhdGlvbi4KKworMjAwNy0wNy0yMSAyMToyMDozNyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jOiBXaGVuIGxpbmVhcmx5IGludGVycG9sYXRpbmcgaW50ZWdlciB0eXBlcywgcm91bmQgdG8gdGhlIG5lYXJlc3QgaW50IGJ5IGFkZGluZy4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jOgorCSAgV2hlbiBsaW5lYXJseSBpbnRlcnBvbGF0aW5nIGludGVnZXIgdHlwZXMsIHJvdW5kIHRvIHRoZSBuZWFyZXN0IGludAorCSAgYnkgYWRkaW5nIDAuNS4gRG9uJ3QgZG8gaXQgZm9yIGZsb2F0L2RvdWJsZSB0eXBlcy4KKwkgIEZpeGVzIHRoZSBmYWlsaW5nIGNvbnRyb2xsZXIgdGVzdCBvbiBteSBtYWNoaW5lLCB3aGljaCBpcyBzb21laG93CisJICByb3VuZGluZyBkaWZmZXJlbnRseSB0aGFuIG9uIHRoZSBidWlsZGJvdHMuCisKKzIwMDctMDctMjAgMDc6MzY6NDQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgdG9vbHMvZ3N0LXBsb3QtdGltZWxpbmUucHk6IEJldHRlciBsb2cgcGFyc2luZyAoY2F0ZWdvcmllcyBjYW4gaGF2ZSAtKS4gQWRqdXN0IHRleHQgdnMuIGxpbmVzLCBzbyB0aGF0IHRoZXkgc3BhbiB0aGUgLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdG9vbHMvZ3N0LXBsb3QtdGltZWxpbmUucHk6CisJICBCZXR0ZXIgbG9nIHBhcnNpbmcgKGNhdGVnb3JpZXMgY2FuIGhhdmUgLSkuIEFkanVzdCB0ZXh0IHZzLiBsaW5lcywgc28KKwkgIHRoYXQgdGhleSBzcGFuIHRoZSBzYW1lIHktcmFuZ2UuCisKKzIwMDctMDctMjAgMDc6MjY6MzkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZG9jcy9yYW5kb20vZW5zb25pYy86IFNhdmUgbXkgdGhvdWdodHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9yYW5kb20vZW5zb25pYy9hdWRpb2Jhc2VjbGFzc2VzLnR4dDoKKwkgICogZG9jcy9yYW5kb20vZW5zb25pYy9keW5saW5rLnR4dDoKKwkgICogZG9jcy9yYW5kb20vZW5zb25pYy9wcm9maWxpbmcudHh0OgorCSAgU2F2ZSBteSB0aG91Z2h0cy4KKwkgICogZG9jcy9yYW5kb20vbW92aW5nLXBsdWdpbnM6CisJICBBZGQgbm90ZSB0byB1c2UgZ19hc3NlcnQgdHlwZSBtYWNyb3MuCisKKzIwMDctMDctMjAgMDc6MDk6MTEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgQWRkIGxpYm0gY2hlY2sgYXMgd2UgdXNlIGluIGZvciBwbHVnaW5zLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgICogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06CisJICBBZGQgbGlibSBjaGVjayBhcyB3ZSB1c2UgaW4gZm9yIHBsdWdpbnMuCisKKzIwMDctMDctMTggMTQ6MzE6MjEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBnc3QvZ3N0YmluLmM6IENoZWNrIHRoYXQgdGhlIHN0YXRlX2Nvb2tpZSBoYXNuJ3QgY2hhbmdlZCBzaW5jZSB0aGUgY29udGludWVfZnVuYyB3YXMgc2NoZWR1bGVkLiBBdm9pZHMgcHJvYmxlbXMgd2hlcmUuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2NvbnRpbnVlX2Z1bmMpOgorCSAgQ2hlY2sgdGhhdCB0aGUgc3RhdGVfY29va2llIGhhc24ndCBjaGFuZ2VkIHNpbmNlIHRoZSBjb250aW51ZV9mdW5jCisJICB3YXMgc2NoZWR1bGVkLiBBdm9pZHMgcHJvYmxlbXMgd2hlcmUgdGhlIHN0YXRlIGNoYW5nZXMgYmFjayB0bworCSAgc29tZXRoaW5nIGl0IHNob3VsZG4ndCBiZSBiZWNhdXNlIGl0IHdhcyBjaGFuZ2VkIGluIHRoZSBtZWFudGltZS4KKworMjAwNy0wNy0xNyAwOTo0NDo1MSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogRml4IG1lbW9yeSBsZWFrLiBCZSBsZXNzIHZlcmJvc2UgaW4gdGhlIGxvZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogKGdzdF9yZWdpc3RyeV9iaW5hcnlfc2F2ZV9jb25zdF9zdHJpbmcpLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfc2F2ZV9zdHJpbmcpLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfc2F2ZV9wYWRfdGVtcGxhdGUpLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfc2F2ZV9mZWF0dXJlKSwKKwkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X3NhdmVfcGx1Z2luKSwKKwkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2xvYWRfZmVhdHVyZSksCisJICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9sb2FkX3BsdWdpbiksCisJICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9yZWFkX2NhY2hlKToKKwkgIEZpeCBtZW1vcnkgbGVhay4gQmUgbGVzcyB2ZXJib3NlIGluIHRoZSBsb2cuCisKKzIwMDctMDctMTYgMTY6NDQ6MzEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICB0ZXN0cy9jaGVjay9lbGVtZW50cy8uY3ZzaWdub3JlOiBBZGQgZmlsZSB0byBjdnNpZ25vcmUgYXMgY29tbWFuZGVkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5jdnNpZ25vcmU6CisJICBBZGQgZmlsZSB0byBjdnNpZ25vcmUgYXMgY29tbWFuZGVkLgorCisyMDA3LTA3LTE2IDE2OjA0OjQ5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlxdWV1ZS5jOiBVc2UgYSBHU3RhdGljTXV0ZXggdG8gcHJvdGVjdCBhbGwgY2FzZXMgd2hlcmUgbGliY2hlY2sgZmFpbF9pZi9mYWlsX3VubGVzcyBtYWNyb3MgLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlxdWV1ZS5jOiAobXFfZHVtbXlwYWRfY2hhaW4pLAorCSAgKG1xX2R1bW15cGFkX2V2ZW50KSwgKHJ1bl9vdXRwdXRfb3JkZXJfdGVzdCk6CisJICBVc2UgYSBHU3RhdGljTXV0ZXggdG8gcHJvdGVjdCBhbGwgY2FzZXMgd2hlcmUgbGliY2hlY2sKKwkgIGZhaWxfaWYvZmFpbF91bmxlc3MgbWFjcm9zIG1pZ2h0IGJlIGNhbGxlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMKKwkgIHNpbXVsdGFuZW91c2x5IHRvIGF2b2lkIGVycm9ycyBsaWtlOgorCSAgImNoZWNrX3BhY2suYzoxMDc6IDotMTA4MTcyNTQwMDpCYWQgbWVzc2FnZSB0eXBlIGFyZyIKKworMjAwNy0wNy0xNiAxNToxOTowNiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zdHJlc3MuYzogTWFrZSBzdXJlIHdlIHNldCB0aGUgcGlwZWxpbmUgYmFjayB0byB0aGUgTlVMTCBzdGF0ZSBiZWZvcmUgZHJvcHBpbmcgb3VyIGZpbmFsIHJlZmVyZS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zdHJlc3MuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgIE1ha2Ugc3VyZSB3ZSBzZXQgdGhlIHBpcGVsaW5lIGJhY2sgdG8gdGhlIE5VTEwgc3RhdGUgYmVmb3JlCisJICBkcm9wcGluZyBvdXIgZmluYWwgcmVmZXJlbmNlLgorCisyMDA3LTA3LTE2IDE0OjU1OjI2ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgdGVzdHMvY2hlY2svZWxlbWVudHMvdGVlLmM6IE1ha2UgdGhlIHRlZSBzdHJlc3MtdGVzdCBhIGxpdHRsZSBsZXNzIHN0cmVzc2Z1bCBzbyBpdCBkb2Vzbid0IGp1c3QgdGltZSBvdXQgb24gc2xvdy1tYWNoLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvdGVlLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBNYWtlIHRoZSB0ZWUgc3RyZXNzLXRlc3QgYSBsaXR0bGUgbGVzcyBzdHJlc3NmdWwgc28gaXQgZG9lc24ndCBqdXN0CisJICB0aW1lIG91dCBvbiBzbG93LW1hY2hpbmVzLCBhbmQgcmVtb3ZlIGEgc21hbGwgcmFjZSB3aGVuIGl0J3Mgc3RhcnRpbmcKKwkgIHVwIGJ5IGFkZGluZyBhIGdldF9zdGF0ZSgpIGNhbGwuCisKKzIwMDctMDctMTYgMTI6MzY6MTggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdC5jOiBBdm9pZCByZWFkaW5nIHJlZ2lzdHJ5IHR3aWNlIG9uIHN0YXJ0dXAuIEZpeGVzICM0NTczMjIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdC5jOgorCSAgQXZvaWQgcmVhZGluZyByZWdpc3RyeSB0d2ljZSBvbiBzdGFydHVwLiBGaXhlcyAjNDU3MzIyLgorCisyMDA3LTA3LTEzIDE0OjExOjIyICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgcGtnY29uZmlnLzogU3Vic3RpdHV0ZSB0aGUgQ0ZMQUdTIGZvciBsaWJjaGVjayBpbnRvIG91ciAucGMgZmlsZSB0b28gc28gdGhhdCBkZXBlbmRlbnQgbW9kdWxlcyB3aWxsIHBpY2sgaXQgdXAgcHJvcGVyLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay11bmluc3RhbGxlZC5wYy5pbjoKKwkgICogcGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay5wYy5pbjoKKwkgIFN1YnN0aXR1dGUgdGhlIENGTEFHUyBmb3IgbGliY2hlY2sgaW50byBvdXIgLnBjIGZpbGUgdG9vIHNvIHRoYXQKKwkgIGRlcGVuZGVudCBtb2R1bGVzIHdpbGwgcGljayBpdCB1cCBwcm9wZXJseSBpZiBsaWJjaGVjayBpcyBpbnN0YWxsZWQKKwkgIGludG8gc29tZSBvdGhlciBwcmVmaXguCisKKzIwMDctMDctMTMgMTM6NDk6MTQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBjb25maWd1cmUuYWM6IFJldmVydCB0aGUgcGtnLWNvbmZpZyBjaGVjayBmb3IgbGliY2hlY2ssIHNpbmNlIGl0IHB1bGxzIGluIHRoZSB3cm9uZyBub24tUElDIGxpYmNoZWNrLmEgb24gVWJ1bnR1IGFuZCAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICBSZXZlcnQgdGhlIHBrZy1jb25maWcgY2hlY2sgZm9yIGxpYmNoZWNrLCBzaW5jZSBpdCBwdWxscyBpbiB0aGUKKwkgIHdyb25nIG5vbi1QSUMgbGliY2hlY2suYSBvbiBVYnVudHUgYW5kIHByb2JhYmx5IEZlZG9yYSB0b28uIFdlIG5lZWQKKwkgIGEgcHJvcGVyIHNvbHV0aW9uLCBlaXRoZXIgZnJvbSB0aGUgY2hlY2sgcHJvamVjdCwgb3Igc29tZXRoaW5nIGVsc2UuCisKKzIwMDctMDctMTIgMTE6MTA6MjIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgY29uZmlndXJlLmFjOiBVc2UgcGtnLWNvbmZpZyB0byBsb2NhdGUgY2hlY2suCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgVXNlIHBrZy1jb25maWcgdG8gbG9jYXRlIGNoZWNrLgorCisyMDA3LTA3LTEwIDIwOjEwOjE2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3R0YWdsaXN0LmM6IEZpeCBkb2Mgc3ludGF4LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R0YWdsaXN0LmM6CisJICBGaXggZG9jIHN5bnRheC4KKwkgICogZ3N0L2dzdHV0aWxzLmM6CisJICAqIGdzdC9nc3R1dGlscy5oOgorCSAgQWRkIGRlcHJlY2F0aW9uIGd1YXJkcy4KKwkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oOgorCSAgRG9uJ3QgZG9jdW1lbnQgb2JqZWN0ICh0aGlzIGlzIGltcGxpY2l0bHkgcHJpdmF0ZSkuCisKKzIwMDctMDctMDggMTQ6MTE6NTMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RzdHJ1Y3R1cmUuYzogV2hlbiBkZXNlcmlhbGlzaW5nIGZvbz1iYXIgd2l0aG91dCBhIHR5cGUgY2FzdCwgY2hlY2sgaWYgaXQncyBhIGJvb2xlYW4gYmVmb3JlIGZhbGxpbmcgYmFjayB0byBhIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzogKGdzdF9zdHJ1Y3R1cmVfcGFyc2VfdmFsdWUpOgorCSAgV2hlbiBkZXNlcmlhbGlzaW5nIGZvbz1iYXIgd2l0aG91dCBhIHR5cGUgY2FzdCwgY2hlY2sgaWYgaXQncyBhCisJICBib29sZWFuIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gYSBzdHJpbmcgdHlwZSwgb3RoZXJ3aXNlIHRoaW5ncyBsaWtlCisJICBhdWRpb3Rlc3RzcmMgISBhdWRpby94LXJhdy1pbnQsc2lnbmVkPXRydWUgISBmYWtlc2luayB3b24ndCB3b3JrLAorCSAgYmVjYXVzZSB0aGUgZmlsdGVyY2FwcyBlbmQgdXAgaGF2aW5nIGEgc2lnbmVkPShzdHJpbmcpdHJ1ZSBmaWVsZCwKKwkgIHdoaWNoIGNhdXNlcyBwcm9ibGVtcyBsYXRlciB3aGVuIGludGVyc2VjdGlvbiBjYXBzLgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBBZGQgYSB1bml0IHRlc3QgZm9yIHRoaXMuCisKKzIwMDctMDctMDYgMjE6NTA6MDIgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgbGlicy9nc3QvY29udHJvbGxlci86IEFQSTogUmVmYWN0b3IgR3N0Q29udHJvbGxlciBpbnRvIHRoZSBjb3JlIGNvbnRyb2xsZXIgd2hpY2ggY2FuIHRha2UgYSBHc3RDb250cm9sU291cmNlIGZvciBwcm92Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFJldmlld2VkIGJ5OiBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgorCSAgKGdzdF9jb250cm9sbGVkX3Byb3BlcnR5X2FkZF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlKSwKKwkgIChnc3RfY29udHJvbGxlZF9wcm9wZXJ0eV9uZXcpLCAoZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfZnJlZSksCisJICAoZ3N0X2NvbnRyb2xsZXJfZmluZF9jb250cm9sbGVkX3Byb3BlcnR5KSwKKwkgIChnc3RfY29udHJvbGxlcl9uZXdfdmFsaXN0KSwgKGdzdF9jb250cm9sbGVyX25ld19saXN0KSwKKwkgIChnc3RfY29udHJvbGxlcl9uZXcpLCAoZ3N0X2NvbnRyb2xsZXJfcmVtb3ZlX3Byb3BlcnRpZXNfdmFsaXN0KSwKKwkgIChnc3RfY29udHJvbGxlcl9yZW1vdmVfcHJvcGVydGllc19saXN0KSwKKwkgIChnc3RfY29udHJvbGxlcl9yZW1vdmVfcHJvcGVydGllcyksCisJICAoZ3N0X2NvbnRyb2xsZXJfc2V0X3Byb3BlcnR5X2Rpc2FibGVkKSwKKwkgIChnc3RfY29udHJvbGxlcl9zZXRfZGlzYWJsZWQpLCAoZ3N0X2NvbnRyb2xsZXJfc2V0X2NvbnRyb2xfc291cmNlKSwKKwkgIChnc3RfY29udHJvbGxlcl9nZXRfY29udHJvbF9zb3VyY2UpLCAoZ3N0X2NvbnRyb2xsZXJfZ2V0KSwKKwkgIChnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyksIChnc3RfY29udHJvbGxlcl9nZXRfdmFsdWVfYXJyYXkpLAorCSAgKF9nc3RfY29udHJvbGxlcl9kaXNwb3NlKSwgKGdzdF9jb250cm9sbGVyX2dldF90eXBlKSwKKwkgIChnc3RfY29udHJvbGxlZF9wcm9wZXJ0eV9zZXRfaW50ZXJwb2xhdGlvbl9tb2RlKSwKKwkgIChnc3RfY29udHJvbGxlcl9zZXQpLCAoZ3N0X2NvbnRyb2xsZXJfc2V0X2Zyb21fbGlzdCksCisJICAoZ3N0X2NvbnRyb2xsZXJfdW5zZXQpLCAoZ3N0X2NvbnRyb2xsZXJfdW5zZXRfYWxsKSwKKwkgIChnc3RfY29udHJvbGxlcl9nZXRfYWxsKSwgKGdzdF9jb250cm9sbGVyX3NldF9pbnRlcnBvbGF0aW9uX21vZGUpOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuaDoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVycHJpdmF0ZS5oOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xzb3VyY2UuYzoKKwkgIChnc3RfY29udHJvbF9zb3VyY2VfY2xhc3NfaW5pdCksIChnc3RfY29udHJvbF9zb3VyY2VfaW5pdCksCisJICAoZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZSksCisJICAoZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZV9hcnJheSksIChnc3RfY29udHJvbF9zb3VyY2VfYmluZCk6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbHNvdXJjZS5oOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGhlbHBlci5jOiAoZ3N0X29iamVjdF9zZXRfY29udHJvbF9zb3VyY2UpLAorCSAgKGdzdF9vYmplY3RfZ2V0X2NvbnRyb2xfc291cmNlKToKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6CisJICAoZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfZmluZF9jb250cm9sX3BvaW50X25vZGUpLAorCSAgKGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2dldF9maXJzdF92YWx1ZSksCisJICAoX2ludGVycG9sYXRlX25vbmVfZ2V0KSwgKGludGVycG9sYXRlX25vbmVfZ2V0KSwKKwkgIChpbnRlcnBvbGF0ZV9ub25lX2dldF9ib29sZWFuX3ZhbHVlX2FycmF5KSwKKwkgIChpbnRlcnBvbGF0ZV9ub25lX2dldF9lbnVtX3ZhbHVlX2FycmF5KSwKKwkgIChpbnRlcnBvbGF0ZV9ub25lX2dldF9zdHJpbmdfdmFsdWVfYXJyYXkpLAorCSAgKF9pbnRlcnBvbGF0ZV90cmlnZ2VyX2dldCksIChpbnRlcnBvbGF0ZV90cmlnZ2VyX2dldCksCisJICAoaW50ZXJwb2xhdGVfdHJpZ2dlcl9nZXRfYm9vbGVhbl92YWx1ZV9hcnJheSksCisJICAoaW50ZXJwb2xhdGVfdHJpZ2dlcl9nZXRfZW51bV92YWx1ZV9hcnJheSksCisJICAoaW50ZXJwb2xhdGVfdHJpZ2dlcl9nZXRfc3RyaW5nX3ZhbHVlX2FycmF5KToKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5jOgorCSAgKGdzdF9jb250cm9sX3BvaW50X2ZyZWUpLCAoZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfcmVzZXQpLAorCSAgKGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX25ldyksCisJICAoZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0X2ludGVycG9sYXRpb25fbW9kZSksCisJICAoZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfYmluZCksCisJICAoZ3N0X2NvbnRyb2xfcG9pbnRfY29tcGFyZSksIChnc3RfY29udHJvbF9wb2ludF9maW5kKSwKKwkgIChnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXRfaW50ZXJuYWwpLAorCSAgKGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldCksCisJICAoZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0X2Zyb21fbGlzdCksCisJICAoZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfdW5zZXQpLAorCSAgKGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3Vuc2V0X2FsbCksCisJICAoZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfZ2V0X2FsbCksCisJICAoZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfZ2V0X2NvdW50KSwKKwkgIChnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9pbml0KSwKKwkgIChnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9maW5hbGl6ZSksCisJICAoZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfZGlzcG9zZSksCisJICAoZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfY2xhc3NfaW5pdCk6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuaDoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZXByaXZhdGUuaDoKKwkgIEFQSTogUmVmYWN0b3IgR3N0Q29udHJvbGxlciBpbnRvIHRoZSBjb3JlIGNvbnRyb2xsZXIgd2hpY2ggY2FuIHRha2UKKwkgIGEgR3N0Q29udHJvbFNvdXJjZSBmb3IgcHJvdmlkaW5nIGFjdHVhbCB2YWx1ZXMgZm9yIHRpbWVzdGFtcHMuCisJICBJbXBsZW1lbnQgYSBpbnRlcnBvbGF0aW9uIGNvbnRyb2wgc291cmNlIGFuZCB1c2UgdGhpcyBmb3IgYmFja3dhcmQKKwkgIGNvbXBhdGliaWxpdHksIGRlcHJlY2F0ZSBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3cgaGFuZGxlZAorCSAgYnkgR3N0Q29udHJvbFNvdXJjZSBvciBHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS4KKwkgIE1ha2UgaXQgcG9zc2libGUgdG8gZGlzYWJsZSB0aGUgY29udHJvbGxlciBjb21wbGV0ZWx5IG9yIG9ubHkgZm9yCisJICBzcGVjaWZpYyBwcm9wZXJ0aWVzLiBGaXhlcyAjNDUwNzExLgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtZG9jcy5zZ21sOgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMudHlwZXM6CisJICBBZGQgbmV3IGZ1bmN0aW9ucyBhbmQgY2xhc3NlcyB0byB0aGUgZG9jcy4KKwkgICogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6IChHU1RfU1RBUlRfVEVTVCksCisJICAoZ3N0X2NvbnRyb2xsZXJfc3VpdGUpOgorCSAgKiB0ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL2F1ZGlvLWV4YW1wbGUuYzogKG1haW4pOgorCSAgUG9ydCB1bml0IHRlc3QgYW5kIGV4YW1wbGUgdG8gdGhlIG5ldyBBUEkgYW5kIGFkZCBzb21lIG5ldworCSAgdW5pdCB0ZXN0cy4KKworMjAwNy0wNy0wNSAwOTowNjowMiArMDAwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFuYXV3QHNreW5ldC5iZT4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IEltcGxlbWVudCBub24tZGVmYXVsdCBHc3RQYWRJbnRMaW5rRnVuY3Rpb24gZm9yIG11bHRpcXVldWUgcGFkcyBzbyB0aGF0IHRoZSBwaXBlbGluLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBNYXJrIE5hdXdlbGFlcnRzIDxtYW5hdXcgYXQgc2t5bmV0IGJlPgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkgIChnc3RfbXVsdGlfcXVldWVfZ2V0X2ludGVybmFsX2xpbmtzKSwgKGFwcGx5X2J1ZmZlciksCisJICAoc2luZ2xlX3F1ZXVlX292ZXJydW5fY2IpLCAoZ3N0X3NpbmdsZV9xdWV1ZV9uZXcpOgorCSAgSW1wbGVtZW50IG5vbi1kZWZhdWx0IEdzdFBhZEludExpbmtGdW5jdGlvbiBmb3IgbXVsdGlxdWV1ZSBwYWRzIHNvIHRoYXQKKwkgIHRoZSBwaXBlbGluZSBsYXlvdXQgY2FuIGJlIHRyYWNrZWQgY29ycmVjdGx5LiBGaXhlcyAjNDUzNzMyLgorCisyMDA3LTA3LTA1IDA4OjQyOjQyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvOiBTaW1wbGl0eSAtLWV4dHJhLWRpciBhcyBndGtkb2Mgc2NhbnMgcmVjdXJzaXZlbHkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvTWFrZWZpbGUuYW06CisJICAqIGRvY3MvbGlicy9NYWtlZmlsZS5hbToKKwkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgorCSAgU2ltcGxpdHkgLS1leHRyYS1kaXIgYXMgZ3RrZG9jIHNjYW5zIHJlY3Vyc2l2ZWx5LgorCisyMDA3LTA3LTAzIDE3OjAxOjUxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICB0b29scy9nc3QtbGF1bmNoLmM6IFdoZW4gd2UgZ290IGFuIGVycm9yLCB0aGVyZSBpcyBubyBwb2ludCBpbiB3YWl0aW5nIGZvciBwcmVyb2xsIHdoZW4gc2h1dHRpbmcgZG93bi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChtYWluKToKKwkgIFdoZW4gd2UgZ290IGFuIGVycm9yLCB0aGVyZSBpcyBubyBwb2ludCBpbiB3YWl0aW5nIGZvciBwcmVyb2xsIHdoZW4KKwkgIHNodXR0aW5nIGRvd24uCisKKzIwMDctMDctMDMgMTY6MjY6MjkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6IEJlIGEgbG90IHNtYXJ0ZXIgd2hlbiBkZWNpZGluZyB3aGF0IHNyY3BhZCB0byB1c2UgZm9yIHByb3h5aW5nIHRoZSBidWZmZXJfYWxsb2MuIEFsc28gaGFuZC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6IChnc3RfdGVlX2Jhc2VfaW5pdCksCisJICAoZ3N0X3RlZV9yZXF1ZXN0X25ld19wYWQpLCAoZ3N0X3RlZV9yZWxlYXNlX3BhZCksCisJICAoZ3N0X3RlZV9maW5kX2J1ZmZlcl9hbGxvYyksIChnc3RfdGVlX2J1ZmZlcl9hbGxvYyksCisJICAoZ3N0X3RlZV9kb19wdXNoKSwgKGNsZWFyX3BhZHMpLCAoZ3N0X3RlZV9oYW5kbGVfYnVmZmVyKSwKKwkgIChnc3RfdGVlX2NoYWluKToKKwkgIEJlIGEgbG90IHNtYXJ0ZXIgd2hlbiBkZWNpZGluZyB3aGF0IHNyY3BhZCB0byB1c2UgZm9yIHByb3h5aW5nCisJICB0aGUgYnVmZmVyX2FsbG9jLiBBbHNvIGhhbmRsZSBwYWQgYWRkZWQvcmVtb3ZlZCB3aGVuIGRvaW5nIHNvLgorCSAgRml4ZXMgIzM1Nzk1OS4KKwkgIEtlZXAgdHJhY2sgb2Ygd2hhdCBwYWRzIHdlIGFscmVhZHkgcHVzaGVkIG9uIGluIGNhc2Ugd2UgaGF2ZSBwYWRzCisJICBhZGRlZC9yZW1vdmVkIHdoaWxlIHB1c2hpbmcuIEZpeGVzICMzNzQ2MzkKKwkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3RlZS5jOiAoaGFuZG9mZiksIChHU1RfU1RBUlRfVEVTVCksCisJICAodGVlX3N1aXRlKToKKwkgIEFkZGVkIHVuaXQgdGVzdCBmb3IgcGFkIHJlc3luYy4KKworMjAwNy0wNy0wMSAyMTozMToxOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIHBvLzogVXBkYXRlZCB0cmFuc2xhdGlvbnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcG8vbmwucG86CisJICAqIHBvL3N2LnBvOgorCSAgVXBkYXRlZCB0cmFuc2xhdGlvbnMuCisKKzIwMDctMDctMDEgMjE6MzA6MDkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBwby86IEFkZGVkIG5ldyBGaW5uaXNoIHRyYW5zbGF0aW9uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB0cmFuc2xhdGlvbiBieTogVG9tbWkgVmFpbmlrYWluZW4gPFRvbW1pLlZhaW5pa2FpbmVuQGlraS5maT4KKwkgICogcG8vTElOR1VBUzoKKwkgICogcG8vZmkucG86CisJICBBZGRlZCBuZXcgRmlubmlzaCB0cmFuc2xhdGlvbi4KKworMjAwNy0wNi0yOCAxMToyNToxNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IFdoZW4gZmlndXJpbmcgb3V0IHdoZW4gYSBxdWV1ZSBpcyBmaWxsZWQsIHVzZSBvdXIgaW50ZXJuYWwgdGltZSBlc3RpbWF0ZSBiYXNlZCBvbiBzLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IChhcHBseV9idWZmZXIpLAorCSAgKHNpbmdsZV9xdWV1ZV9vdmVycnVuX2NiKToKKwkgIFdoZW4gZmlndXJpbmcgb3V0IHdoZW4gYSBxdWV1ZSBpcyBmaWxsZWQsIHVzZSBvdXIgaW50ZXJuYWwgdGltZSBlc3RpbWF0ZQorCSAgYmFzZWQgb24gc2VnbWVudHMsIGp1c3QgbGlrZSBjaGVja19mdWxsIGRvZXMuCisKKzIwMDctMDYtMjcgMTE6NDc6NDYgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJKiBDaGFuZ2VMb2c6CisJICBNZW50aW9uIGJ1ZyA0MzA2ODIgY2xvc2VkIGJ5IHByZXZpb3VzIGNvbW1pdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgTWVudGlvbiBidWcgNDMwNjgyIGNsb3NlZCBieSBwcmV2aW91cyBjb21taXQuCisKKzIwMDctMDYtMjcgMTE6NDM6MDQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdG1pbmlvYmplY3QuYzogUmVtb3ZlIDMgZG8tbm90aGluZyBtZXRob2RzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RtaW5pb2JqZWN0LmM6IChnc3RfbWluaV9vYmplY3RfZ2V0X3R5cGUpOgorCSAgUmVtb3ZlIDMgZG8tbm90aGluZyBtZXRob2RzLgorCisyMDA3LTA2LTI3IDExOjI0OjA4ICswMDAwICBUaW0gQW5ndXMgPHRpbUBuZ3VzLm5ldD4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6IFRha2UgYSByZWZlcmVuY2UgaW5zdGVhZCBvZiBhIGNvcHkgd2hlbiBzZXR0aW5nICJjYXBzIi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IFRpbSBBbmd1cyA8dGltIGF0IG5ndXMgZG90IG5ldD4KKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6IChnc3RfY2Fwc2ZpbHRlcl9jbGFzc19pbml0KSwKKwkgIChnc3RfY2Fwc2ZpbHRlcl9zZXRfcHJvcGVydHkpOgorCSAgVGFrZSBhIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGEgY29weSB3aGVuIHNldHRpbmcgImNhcHMiLgorCSAgRml4IGRvY3VtZW50YXRpb24gdG8gY2xhcmlmeSB0aGlzIGJlaGF2aW91ci4gRml4ZXMgIzQ0OTQxNC4KKworMjAwNy0wNi0yNyAxMDoxMjoxNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvOiBSZW1vdmUgZW1wdHkgaW5zdGFuY2VfaW5pdCgpIGZ1bmN0aW9ucyB0byBzYXZlIHJlbG9jcyBhbmQgbGVzc2VuIHRoZSBub2lzZS4gUmVtb3ZlIHNvbWUgb2YgdGhlIGZ1bmN0aW9uIHByb3RvdHkuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0aW5kZXhmYWN0b3J5LmM6IChnc3RfaW5kZXhfZmFjdG9yeV9nZXRfdHlwZSk6CisJICAqIGdzdC9nc3RwbHVnaW4uYzogKGdzdF9wbHVnaW5faW5pdCk6CisJICAqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6IChnc3RfcGx1Z2luX2ZlYXR1cmVfaW5pdCk6CisJICAqIGdzdC9nc3RxdWVyeS5jOiAoZ3N0X3F1ZXJ5X2dldF90eXBlKToKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6IChnc3RfcmVnaXN0cnlfaW5pdCk6CisJICAqIGdzdC9nc3R1cmkuYzogKGdzdF91cmlfaGFuZGxlcl9iYXNlX2luaXQpOgorCSAgUmVtb3ZlIGVtcHR5IGluc3RhbmNlX2luaXQoKSBmdW5jdGlvbnMgdG8gc2F2ZSByZWxvY3MgYW5kIGxlc3NlbiB0aGUKKwkgIG5vaXNlLiBSZW1vdmUgc29tZSBvZiB0aGUgZnVuY3Rpb24gcHJvdG90eXBlcyB0aGF0IGFyZSBkb3VibGVkIGJ5CisJICBHX0RFRklORV9UWVBFLgorCisyMDA3LTA2LTI3IDA5OjM0OjAxICswMDAwICDDiXRpZW5uZSBOb3JlYXUtSMOpYmVydCA8ZXRpZW5uZUBkZWVwdW5kZXIub3JnPgorCisJICBnc3QvZ3N0Z2hvc3RwYWQuYzogQWRkIHBlZXIgYW5kIGRpcmVjdGlvbiBpbiB0aGUgWE1MIHNlcmlhbGlzYXRpb24gb2YgZ2hvc3RwYWRzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogw4l0aWVubmUgTm9yZWF1LUjDqWJlcnQgPGV0aWVubmUgYXQgZGVlcHVuZGVyIGRvdCBvcmc+CisJICAqIGdzdC9nc3RnaG9zdHBhZC5jOiAoZ3N0X3Byb3h5X3BhZF9zYXZlX3RoeXNlbGYpOgorCSAgQWRkIHBlZXIgYW5kIGRpcmVjdGlvbiBpbiB0aGUgWE1MIHNlcmlhbGlzYXRpb24gb2YgZ2hvc3RwYWRzLgorCSAgRml4ZXMgIzQ0OTIyNi4KKworMjAwNy0wNi0yNiAxNjoyNDoyMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBjb25maWd1cmUuYWM6IFByZXNlcnZlIHVzZWZ1bCBpbmZvcm1hdGlvbiwgdGhhbmtzIFRpbS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICBQcmVzZXJ2ZSB1c2VmdWwgaW5mb3JtYXRpb24sIHRoYW5rcyBUaW0uCisKKzIwMDctMDYtMjYgMTQ6NDU6MTUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuKjogVGFrZSB0aGUgbXVsdGlxdWV1ZSBsb2NrIHdoZW4gdXBkYXRpbmcgdGhlIGZpbGwgbGV2ZWwgc28gd2UgZG9uJ3QgZ2V0IGNvbmZ1c2VkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiAoZ3N0X211bHRpX3F1ZXVlX2luaXQpLAorCSAgKGdzdF9zaW5nbGVfcXVldWVfZmx1c2gpLCAoYXBwbHlfc2VnbWVudCksIChhcHBseV9idWZmZXIpLAorCSAgKGdzdF9zaW5nbGVfcXVldWVfcHVzaF9vbmUpLCAoZ3N0X211bHRpX3F1ZXVlX2xvb3ApLAorCSAgKGdzdF9tdWx0aV9xdWV1ZV9zaW5rX2FjdGl2YXRlX3B1c2gpLCAoZ3N0X211bHRpX3F1ZXVlX3NpbmtfZXZlbnQpLAorCSAgKGdzdF9tdWx0aV9xdWV1ZV9zcmNfYWN0aXZhdGVfcHVzaCksICh3YWtlX3VwX25leHRfbm9uX2xpbmtlZCksCisJICAoY29tcHV0ZV9oaWdoX2lkKSwgKGdzdF9zaW5nbGVfcXVldWVfbmV3KToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmg6CisJICBUYWtlIHRoZSBtdWx0aXF1ZXVlIGxvY2sgd2hlbiB1cGRhdGluZyB0aGUgZmlsbCBsZXZlbCBzbyB3ZSBkb24ndCBnZXQKKwkgIGNvbmZ1c2VkLgorCSAgQWZ0ZXIgYXBwbHlpbmcgYSBidWZmZXIgb3IgZXZlbnQgb24gdGhlIHNyYyBwYWQgc2VnbWVudCwgbWFrZSBzdXJlIHRvCisJICBjYWxsIGdzdF9kYXRhX3F1ZXVlX2xpbWl0c19jaGFuZ2VkKCkgdG8gZ2V0IHRoZSBkYXRhIHF1ZXVlIHRvIHVuYmxvY2sKKwkgIGFuZCBjaGVjayB0aGUgZmlsbGVkIHN0YXRlIGFnYWluLgorCSAgUmV3b3JrIHRoZSBub3QtbGlua2VkIHBhZCBoYW5kbGluZyBzbyB0aGUgbG9naWMgaXMgdGhhdCBub3QtbGlua2VkCisJICBwYWRzIGNhbiBwdXNoIGFzIGZhc3QgYXMgdGhleSBsaWtlLCBidXQgb25seSBzbyB0aGV5IG5ldmVyIGdldAorCSAgYWhlYWQgb2YgYW55IGxpbmtlZCBwYWRzLgorCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tdWx0aXF1ZXVlLmM6IChtcV9zaW5rcGFkX3RvX3NyY3BhZCksCisJICAobXFfZHVtbXlwYWRfZ2V0Y2FwcyksIChtcV9kdW1teXBhZF9jaGFpbiksIChtcV9kdW1teXBhZF9ldmVudCksCisJICAocnVuX291dHB1dF9vcmRlcl90ZXN0KSwgKEdTVF9TVEFSVF9URVNUKSwgKG11bHRpcXVldWVfc3VpdGUpOgorCSAgQWRkIGEgdGVzdCB0byBjaGVjayB0aGF0IG5vdC1saW5rZWQgcGFkcyBhbHdheXMgc3RheSBiZWhpbmQKKwkgIGxpbmtlZCBwYWRzLgorCisyMDA3LTA2LTI2IDExOjU3OjIzICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZG9jcy9yYW5kb20vcmVsZWFzZTogU29tZSB1cGRhdGVzIHRvIHRoZSByZWxlYXNlIHByb2NlZHVyZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL3JhbmRvbS9yZWxlYXNlOgorCSAgU29tZSB1cGRhdGVzIHRvIHRoZSByZWxlYXNlIHByb2NlZHVyZS4KKworMjAwNy0wNi0yNiAwODoyNjozNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzogTWljcm9vcHRpbWl6YXRpb24gdGhhdCBzYXZlcyBzdHVubmluZyA4MCBieXRlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzogKF9fZ3N0X2VsZW1lbnRfZGV0YWlsc19jbGVhcik6CisJICBNaWNyb29wdGltaXphdGlvbiB0aGF0IHNhdmVzIHN0dW5uaW5nIDgwIGJ5dGVzLgorCisyMDA3LTA2LTI1IDEyOjM1OjQ2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvcGx1Z2lucy86IFVwZGF0ZSBkb2NzIHdpdGggY2FwcyBpbmZvLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzOgorCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKKwkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6CisJICBVcGRhdGUgZG9jcyB3aXRoIGNhcHMgaW5mby4KKworMjAwNy0wNi0yMyAyMjo1NjoyOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIHBvL2l0LnBvOiBVcGRhdGVkIEl0YWxpYW4gdHJhbnNsYXRpb24uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcG8vaXQucG86CisJICBVcGRhdGVkIEl0YWxpYW4gdHJhbnNsYXRpb24uCisKKzIwMDctMDYtMjMgMTE6MTk6MTYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICBmaXggd2luMzIgYXJjaAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaXggd2luMzIgYXJjaAorCisyMDA3LTA2LTIzIDExOjE4OjQ2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2dzdGVsZW1lbnQuaDoKKwkgIDgwIGxpbmUgZml4CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDgwIGxpbmUgZml4CisKKzIwMDctMDYtMjMgMTE6MTU6MTEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBwby86IFVwZGF0ZSBWaWV0bmFtZXNlIHRyYW5zbGF0aW9ucy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBDaGFuZ2VMb2c6CisJICAqIHBvL3ZpLnBvOgorCSAgVXBkYXRlIFZpZXRuYW1lc2UgdHJhbnNsYXRpb25zLgorCisyMDA3LTA2LTIxIDIyOjM3OjI3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFJlbW92ZSB1bnVzZWQgc2lnbmFsIGVudW0uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgUmVtb3ZlIHVudXNlZCBzaWduYWwgZW51bS4KKworMjAwNy0wNi0yMSAxODowMDo1OCArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgorCisJKiBNQUlOVEFJTkVSUzoKKwkgIHVwZGF0ZSBNQUlOVEFJTkVSUyBmaWxlIHRvIHJlZmxlY3QgY3VycmVudCByZWFsaXRpZXMgYmV0dGVyCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHVwZGF0ZSBNQUlOVEFJTkVSUyBmaWxlIHRvIHJlZmxlY3QgY3VycmVudCByZWFsaXRpZXMgYmV0dGVyCisKKzIwMDctMDYtMjEgMTY6Mzk6MDEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBCZWVmIHVwIGFuZCBpbmNsdWRlIHRoZSBkb2NzIGZvciBnc3RfdHlwZV9yZWdpc3Rlcl9zdGF0aWNfZnVsbCBhbmQgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2ltcGxlIGFuZCBhZGQgdGhlIEEuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF90eXBlX3JlZ2lzdGVyX3N0YXRpY19mdWxsKToKKwkgIEJlZWYgdXAgYW5kIGluY2x1ZGUgdGhlIGRvY3MgZm9yIGdzdF90eXBlX3JlZ2lzdGVyX3N0YXRpY19mdWxsIGFuZAorCSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2ltcGxlIGFuZCBhZGQgdGhlIEFQSSBrZXl3b3JkCisJICBpbiB0aGUgQ2hhbmdlTG9nLgorCisyMDA3LTA2LTIxIDE0OjM1OjAzICswMDAwICBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogRml4IHNldHRpbmcgbWF4LSogcHJvcGVydGllcyBhZnRlciBhZGRpbmcgcXVldWVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiAoZ3N0X211bHRpX3F1ZXVlX3NldF9wcm9wZXJ0eSksCisJICAodXBkYXRlX3RpbWVfbGV2ZWwpLCAoZ3N0X3NpbmdsZV9xdWV1ZV9wdXNoX29uZSksCisJICAoZ3N0X211bHRpX3F1ZXVlX2NoYWluKSwgKGdzdF9tdWx0aV9xdWV1ZV9zaW5rX2V2ZW50KSwKKwkgIChzaW5nbGVfcXVldWVfb3ZlcnJ1bl9jYiksIChzaW5nbGVfcXVldWVfdW5kZXJydW5fY2IpLAorCSAgKHNpbmdsZV9xdWV1ZV9jaGVja19mdWxsKToKKwkgIEZpeCBzZXR0aW5nIG1heC0qIHByb3BlcnRpZXMgYWZ0ZXIgYWRkaW5nIHF1ZXVlcy4KKwkgIFVzZSBJU19GSUxMRUQgZm9yIGNoZWNraW5nIHZpc2libGUgaXRlbXMuCisJICBTaWduYWwgb3ZlcnJ1biBpZiBtdWx0aXBsZSBxdWV1ZXMgb3ZlcnJ1bi4KKwkgIEFkZCBleHRyYSBkZWJ1ZyBvdXRwdXQuCisJICBQYXRjaCBieTogV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KKworMjAwNy0wNi0yMSAxNDoyOTowNSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBTYXZpbmcgcmVsb2NhdGlvbnMgZm9yIEdUeXBlSW5mbyBhbmQgR3N0RWxlbWVudERldGFpbHMuIEZpeGVzICM0Mzc0NTcuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZSk6CisJICAqIGdzdC9nc3RlbGVtZW50Lmg6CisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X3R5cGVfcmVnaXN0ZXJfc3RhdGljX2Z1bGwpOgorCSAgKiBnc3QvZ3N0dXRpbHMuaDoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6IChnc3RfY2Fwc2ZpbHRlcl9iYXNlX2luaXQpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6IChnc3RfZmFrZV9zaW5rX2Jhc2VfaW5pdCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiAoZ3N0X2Zha2Vfc3JjX2Jhc2VfaW5pdCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6IChnc3RfZmRfc2lua19iYXNlX2luaXQpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6IChnc3RfZmRfc3JjX2Jhc2VfaW5pdCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzogKGdzdF9maWxlX3NpbmtfYmFzZV9pbml0KToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IChnc3RfZmlsZV9zcmNfYmFzZV9pbml0KToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiAoZ3N0X2lkZW50aXR5X2Jhc2VfaW5pdCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiAoZ3N0X211bHRpX3F1ZXVlX2Jhc2VfaW5pdCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9iYXNlX2luaXQpLAorCSAgKGFwcGx5X2J1ZmZlciksIChnc3RfcXVldWVfY2hhaW4pOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOiAoZ3N0X3RlZV9iYXNlX2luaXQpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9iYXNlX2luaXQpLAorCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9jbGFzc19pbml0KToKKwkgIFNhdmluZyByZWxvY2F0aW9ucyBmb3IgR1R5cGVJbmZvIGFuZCBHc3RFbGVtZW50RGV0YWlscy4gRml4ZXMgIzQzNzQ1Ny4KKworMjAwNy0wNi0yMSAwOTo0NjowMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZG9jcy9wd2cvYWR2YW5jZWQtdHlwZXMueG1sOiBGaXggdHlwbyBpbiBpYW5hLm9yZyBVUkkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9wd2cvYWR2YW5jZWQtdHlwZXMueG1sOgorCSAgRml4IHR5cG8gaW4gaWFuYS5vcmcgVVJJLgorCisyMDA3LTA2LTE5IDIxOjU4OjMwICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNy0wNi0xOSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYworCSAgKHRlc3Rfc3RhdGVfY2hhbmdlX3JldHVybnMpOiBFbmFibGUgcHVsbC1tb2RlIHRlc3RzIG5vdyB0aGF0CisJICBiYXNlc2luayBoYXMgYmVlbiBmaXhlZC4KKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jIChnc3RfYmFzZV9zaW5rX25lZWRzX3ByZXJvbGwpOgorCSAgQ2hhbmdlZCBmcm9tIGdzdF9iYXNlX3NpbmtfaXNfcHJlcm9sbGVkLCByZXZlcnNpbmcgdGhlIHNlbnNlIG9mCisJICB0aGUgcmV0dXJuIHZhbHVlLiBSZXR1cm5zIEZBTFNFIGFsc28gaWYgdGhlIHNpbmsgaXMgaW4gcHVsbCBtb2RlLAorCSAgaW4gd2hpY2ggY2FzZSBpdCBuZWVkcyBubyBwcmVyb2xsLgorCSAgKGdzdF9iYXNlX3NpbmtfcXVlcnksIGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKTogVXBkYXRlIGZvcgorCSAgbmVlZHNfcHJlcm9sbCBjaGFuZ2UuCisJICAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOiBBZGQgYSBjYXNlIGZvciBSRUFEWV9UT19QQVVTRUQgYWZ0ZXIKKwkgIGNoYWluaW5nIHVwLCBpbiB3aGljaCB3ZSByZXR1cm4gU1VDQ0VTUyBkaXJlY3RseSBpZiB3ZSBhY3RpdmF0ZWQKKwkgIGluIHB1bGwgbW9kZSBpbnN0ZWFkIG9mIEFTWU5DLiBJbnZvbHZlcyBjb3VudGVyaW5nIGFuIGFzeW5jX3N0YXJ0CisJICBtZXNzYWdlIHNlbnQgYmVmb3JlIGNoYWluaW5nIHVwOyBub3Qgc3VyZSBpZiB0aGlzIGlzIGNvcnJlY3QsIGluCisJICBhbiBpZGVhbCB3b3JsZCB3ZSBvbmx5IHNlbmQgYXN5bmMtc3RhcnQgd2hlbiBhY3RpdmF0aW5nIGluIHB1c2gKKwkgIG1vZGUuCisKKzIwMDctMDYtMTkgMjE6Mjg6NTQgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSogQ2hhbmdlTG9nOgorCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYzoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkgIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNy0wNi0xOSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYworCSAgKHRlc3Rfc3RhdGVfY2hhbmdlX3JldHVybnMpOiBOZXcgdGVzdCwgcGFydGlhbGx5IGRpc2FibGVkIHVudGlsCisJICBiYXNlc2luayBpcyBmaXhlZC4KKworMjAwNy0wNi0xOSAxNjowNToxMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IEZpeCBldmVudCBsZWFrLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiAoYXBwbHlfYnVmZmVyKSwKKwkgIChnc3RfbXVsdGlfcXVldWVfc2lua19ldmVudCk6CisJICBGaXggZXZlbnQgbGVhay4KKworMjAwNy0wNi0xOSAxMDo0MTozMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJpbi5jOiBNb3ZlIHRoZSBjb21tb24gY29kZSBmb3IgcG9zdGluZyBzdGF0ZS1jaGFuZ2UgbWVzc2FnZXMgaW50byBvbmUgZnVuY3Rpb24uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9hZGRfZnVuYyksIChnc3RfYmluX3JlbW92ZV9mdW5jKSwKKwkgIChnc3RfYmluX2NoYW5nZV9zdGF0ZV9mdW5jKSwgKGJpbl9wdXNoX3N0YXRlX2NvbnRpbnVlKSwKKwkgIChiaW5faGFuZGxlX2FzeW5jX3N0YXJ0KSwgKGJpbl9oYW5kbGVfYXN5bmNfZG9uZSksCisJICAoZ3N0X2Jpbl9oYW5kbGVfbWVzc2FnZV9mdW5jKToKKwkgIE1vdmUgdGhlIGNvbW1vbiBjb2RlIGZvciBwb3N0aW5nIHN0YXRlLWNoYW5nZSBtZXNzYWdlcyBpbnRvCisJICBvbmUgZnVuY3Rpb24uCisJICBCcm9hZGNhc3QgdGhlIHN0YXRlIHNpZ25hbCBhZnRlciB3ZSBwb3N0ZWQgdGhlIG1lc3NhZ2VzLgorCSAgTWFyayB0aGUgYmluIGFzIGJ1c3kgd2hlbiBpdCdzIGRvaW5nIGEgc3RhdGUtY2hhbmdlLgorCSAgTWFrZSBzdXJlIGFzeW5jLXN0YXJ0L2RvbmUgbWVzc2FnZXMgZG9uJ3QgaW50ZXJmZXJlIHdpdGggdGhlIGJpbidzCisJICBzdGF0ZSB3aGVuIGl0J3MgYnVzeS4KKwkgIEFmdGVyIHRoZSBzdGF0ZSBjaGFuZ2UsIGxldCB0aGUgYmluIGNoZWNrIHdoaWNoIGVsZW1lbnRzIGNvbXBsZXRlZCB0aGUKKwkgIHN0YXRlIGNoYW5nZSB3aGlsZSBpdCB3YXMgYnVzeSBzbyB0aGF0IGl0IGNhbiB1cGRhdGUgaXRzIHN0YXRlLgorCisyMDA3LTA2LTE5IDEwOjM4OjM5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZG9jcy9yYW5kb20vcmVsZWFzZTogQWRkIGEgbm90ZSBhYm91dCB1cGRhdGluZyB0aGUgZG9hcCBmaWxlIHRvIHRoZSByZWxlYXNlIGNoZWNrbGlzdAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcmFuZG9tL3JlbGVhc2U6CisJICBBZGQgYSBub3RlIGFib3V0IHVwZGF0aW5nIHRoZSBkb2FwIGZpbGUgdG8gdGhlIHJlbGVhc2UgY2hlY2tsaXN0CisKKzIwMDctMDYtMTggMTY6NDQ6MDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiBNYWtlIHN1cmUgd2UgZG9uJ3QgcmVmZXJlbmNlIHRoZSBidWZmZXIvZXZlbnQgYWZ0ZXIgd2UgaGF2ZSBnaXZlbiBhd2F5IG93bmVyc2hpcCBpbi4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiAoYXBwbHlfYnVmZmVyKSwKKwkgIChnc3Rfc2luZ2xlX3F1ZXVlX3B1c2hfb25lKSwgKGdzdF9tdWx0aV9xdWV1ZV9jaGFpbiksCisJICAoZ3N0X211bHRpX3F1ZXVlX3NpbmtfZXZlbnQpOgorCSAgTWFrZSBzdXJlIHdlIGRvbid0IHJlZmVyZW5jZSB0aGUgYnVmZmVyL2V2ZW50IGFmdGVyIHdlIGhhdmUgZ2l2ZW4gYXdheQorCSAgb3duZXJzaGlwIGluIHRoZSBxdWV1ZS4KKworMjAwNy0wNi0xOCAxNToxNTozMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IFVwZGF0ZSBxdWV1ZSBzdGF0ZSBfYWZ0ZXJfIGFkZGluZyB0aGUgaXRlbSBpbiB0aGUgcXVldWUgYmVjYXVzZSBlbHNlIHdlIGNvdWxkIGVuZCB1Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IChnc3Rfc2luZ2xlX3F1ZXVlX2ZsdXNoKSwKKwkgIChnc3RfbXVsdGlfcXVldWVfY2hhaW4pLCAoZ3N0X211bHRpX3F1ZXVlX3NpbmtfZXZlbnQpOgorCSAgVXBkYXRlIHF1ZXVlIHN0YXRlIF9hZnRlcl8gYWRkaW5nIHRoZSBpdGVtIGluIHRoZSBxdWV1ZSBiZWNhdXNlIGVsc2Ugd2UKKwkgIGNvdWxkIGVuZCB1cCBiZWluZyBmdWxsIHdpdGhvdXQgdGhlIGVsZW1lbnQgYWRkZWQgeWV0LgorCisyMDA3LTA2LTE4IDE1OjEyOjI4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YmluLio6IEltbWVkaWF0bHkgY29tbWl0IHRoZSB0b3BsZXZlbCBiaW4gc3RhdGUgd2hlbiByZWNlaXZpbmcgYW4gYXN5bmMtZG9uZSBtZXNzYWdlLiBUaGlzIGVuYWJsZXMgdXMgdG8gYXZvaWQuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2luaXQpLCAoZ3N0X2Jpbl9hZGRfZnVuYyksCisJICAoZ3N0X2Jpbl9yZW1vdmVfZnVuYyksIChnc3RfYmluX2dldF9zdGF0ZV9mdW5jKSwKKwkgIChnc3RfYmluX2VsZW1lbnRfc2V0X3N0YXRlKSwgKGdzdF9iaW5fY29udGludWVfZnVuYyksCisJICAoYmluX3B1c2hfc3RhdGVfY29udGludWUpLCAoYmluX2hhbmRsZV9hc3luY19zdGFydCksCisJICAoYmluX2hhbmRsZV9hc3luY19kb25lKSwgKGdzdF9iaW5faGFuZGxlX21lc3NhZ2VfZnVuYyk6CisJICAqIGdzdC9nc3RiaW4uaDoKKwkgIEltbWVkaWF0bHkgY29tbWl0IHRoZSB0b3BsZXZlbCBiaW4gc3RhdGUgd2hlbiByZWNlaXZpbmcgYW4gYXN5bmMtZG9uZQorCSAgbWVzc2FnZS4gVGhpcyBlbmFibGVzIHVzIHRvIGF2b2lkIHNwYXduaW5nIGEgdGhyZWFkIHRvIGNvbW1pdCB0aGUgc3RhdGUKKwkgIGluIHNvbWUgY29tbW9uIGNhc2VzIGFuZCBpdCBhbHNvIGF2b2lkcyBzb21lIHJhY2VzLgorCSAgQXZvaWQgc3Bhd25pbmcgYSBzdGF0ZSB0aHJlYWQgd2hlbiBhZGRpbmcvcmVtb3ZpbmcgYXN5bmMgZWxlbWVudHMgdG8gYQorCSAgdG9wbGV2ZWwgYmluLiBJbnN0ZWFkIHdlIGltbWVkaWF0bHkgdXBkYXRlIHRoZSBiaW4gc3RhdGUuCisJICBHZXQgcmlkIG9mIGl0ZXJhdGluZyBhbGwgdGhlIGNoaWxkcmVuIHdoZW4gZ2V0dGluZyB0aGUgc3RhdGUgaW4gdGhlIGJpbgorCSAgYmVjYXVzZSBpdCBpcyBub3cgYWx3YXlzIHVwLXRvLWRhdGUuCisJICBGaXggYnVnIHdoZXJlIGxvY2tlZCBlbGVtZW50cyB3b3VsZCBhbHdheXMgcmV0dXJuIF9TVUNDRVNTIGV2ZW4gaXQgdGhleQorCSAgcmV0dXJuZWQgTk9fUFJFUk9MTCBiZWZvcmUgYmVpbmcgbG9ja2VkLgorCSAgRml4IHRoZSBvcmRlciBvZiB0aGUgc3RhdGVfY2hhbmdlLCBhc3luYy1zdGFydC9kb25lIG1lc3NhZ2VzIHRoYXQgd2FzCisJICBzb21ldGltZXMgaW5jb3JyZWN0LgorCSAgTWFyayB0aGUgc3RhdGVfZGlydHkgZmllbGQgYXMgZGVwcmVjYXRlZCwgd2UgZG9uJ3QgbmVlZCBpdCBhbnltb3JlIGFzIHdlCisJICBhcmUgYWx3YXlzIHVwLXRvLWRhdGUuCisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9nZXRfc3RhdGVfZnVuYyksCisJICAoZ3N0X2VsZW1lbnRfY29udGludWVfc3RhdGUpOgorCSAgU21hbGwgZGVidWcgaW5wcm92ZW1lbnRzLgorCSAgUmV0dXJuIHRoZSBwcmV2aW91cyBlbGVtZW50IHN0YXRlIHJldHVybiB3aGVuIG5vdGhpbmcgaXMgcGVuZGluZyBpbnN0ZWFkCisJICBvZiBibGluZGx5IHJldHVybmluZyBTVUNDRVNTLgorCSAgKiB0ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmM6IChHU1RfU1RBUlRfVEVTVCksIChwYWRfYmxvY2tlZF9jYiksCisJICAoZ3N0X3NpbmtzX3N1aXRlKToKKwkgIEFkZCBhIHdob2xlIGJ1bmNoIG9mIG5ldyB0ZXN0Y2FzZXMuCisKKzIwMDctMDYtMTcgMTc6MjY6NDggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBwby86IFVwZGF0ZSB0cmFuc2xhdGlvbnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcG8vdWsucG86CisJICAqIHBvL3ZpLnBvOgorCSAgVXBkYXRlIHRyYW5zbGF0aW9ucy4KKworMjAwNy0wNi0xNSAxNDozNzoyOCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGdzdC9nc3RwYWQuYzogRml4IHR5cG8gaW4gdGhlIGRvY3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBhZC5jOgorCSAgRml4IHR5cG8gaW4gdGhlIGRvY3MuCisKKzIwMDctMDYtMTUgMTE6NDk6MjQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6IEFkZCBkb2NzIGZvciBuZXcgbWV0aG9kcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSAgQWRkIGRvY3MgZm9yIG5ldyBtZXRob2RzLgorCisyMDA3LTA2LTE1IDExOjM1OjIyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogRG9uJ3QgdXNlIEdTbGljZSBiZWNhdXNlIHdlIGRvbid0IGRlcGVuZCBvbiA+PSAyLjEwIHlldC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogKGdzdF9tdWx0aV9xdWV1ZV9pdGVtX2Rlc3Ryb3kpLAorCSAgKGdzdF9tdWx0aV9xdWV1ZV9pdGVtX25ldyk6CisJICBEb24ndCB1c2UgR1NsaWNlIGJlY2F1c2Ugd2UgZG9uJ3QgZGVwZW5kIG9uID49IDIuMTAgeWV0LgorCisyMDA3LTA2LTE1IDExOjA5OjM4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogUmVtb3ZlIGRlYnVnIHByaW50Zi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogKGdzdF9zaW5nbGVfcXVldWVfZmx1c2gpLAorCSAgKHVwZGF0ZV90aW1lX2xldmVsKSwgKGFwcGx5X3NlZ21lbnQpLCAoYXBwbHlfYnVmZmVyKSwKKwkgIChnc3Rfc2luZ2xlX3F1ZXVlX3B1c2hfb25lKSwgKGdzdF9tdWx0aV9xdWV1ZV9pdGVtX25ldyksCisJICAoZ3N0X211bHRpX3F1ZXVlX2xvb3ApLCAoZ3N0X211bHRpX3F1ZXVlX3NpbmtfYWN0aXZhdGVfcHVzaCksCisJICAoZ3N0X211bHRpX3F1ZXVlX3NpbmtfZXZlbnQpLCAoc2luZ2xlX3F1ZXVlX292ZXJydW5fY2IpLAorCSAgKHNpbmdsZV9xdWV1ZV91bmRlcnJ1bl9jYiksIChzaW5nbGVfcXVldWVfY2hlY2tfZnVsbCk6CisJICBSZW1vdmUgZGVidWcgcHJpbnRmLgorCisyMDA3LTA2LTE1IDExOjAwOjMyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS4qOiBWYXJpb3VzIGNsZWFudXBzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmM6IChnc3RfZGF0YV9xdWV1ZV9jbGVhbnVwKSwKKwkgIChnc3RfZGF0YV9xdWV1ZV9maW5hbGl6ZSksIChnc3RfZGF0YV9xdWV1ZV9sb2NrZWRfaXNfZW1wdHkpLAorCSAgKGdzdF9kYXRhX3F1ZXVlX3NldF9mbHVzaGluZyksIChnc3RfZGF0YV9xdWV1ZV9wdXNoKSwKKwkgIChnc3RfZGF0YV9xdWV1ZV9wb3ApLCAoZ3N0X2RhdGFfcXVldWVfZHJvcF9oZWFkKSwKKwkgIChnc3RfZGF0YV9xdWV1ZV9saW1pdHNfY2hhbmdlZCksIChnc3RfZGF0YV9xdWV1ZV9nZXRfbGV2ZWwpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5oOgorCSAgVmFyaW91cyBjbGVhbnVwcy4KKwkgIEFkZGVkIG1ldGhvZHMgdG8gZ2V0IHRoZSBjdXJyZW50IGxldmVscyBhbmQgdG8gaW5mb3JtIHRoZSBxdWV1ZSB0aGF0IHRoZQorCSAgJ2Z1bGwnIGxpbWl0cyBjaGFuZ2VkLgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogKGdzdF9tdWx0aV9xdWV1ZV9pbml0KSwKKwkgIChnc3RfbXVsdGlfcXVldWVfZmluYWxpemUpLCAoZ3N0X211bHRpX3F1ZXVlX3NldF9wcm9wZXJ0eSksCisJICAoZ3N0X3NpbmdsZV9xdWV1ZV9mbHVzaCksICh1cGRhdGVfdGltZV9sZXZlbCksIChhcHBseV9zZWdtZW50KSwKKwkgIChhcHBseV9idWZmZXIpLCAoZ3N0X3NpbmdsZV9xdWV1ZV9wdXNoX29uZSksCisJICAoZ3N0X211bHRpX3F1ZXVlX2l0ZW1fc3RlYWxfb2JqZWN0KSwKKwkgIChnc3RfbXVsdGlfcXVldWVfaXRlbV9kZXN0cm95KSwgKGdzdF9tdWx0aV9xdWV1ZV9pdGVtX25ldyksCisJICAoZ3N0X211bHRpX3F1ZXVlX2xvb3ApLCAoZ3N0X211bHRpX3F1ZXVlX2NoYWluKSwKKwkgIChnc3RfbXVsdGlfcXVldWVfc2lua19hY3RpdmF0ZV9wdXNoKSwgKGdzdF9tdWx0aV9xdWV1ZV9zaW5rX2V2ZW50KSwKKwkgIChnc3RfbXVsdGlfcXVldWVfZ2V0Y2FwcyksIChnc3RfbXVsdGlfcXVldWVfc3JjX2FjdGl2YXRlX3B1c2gpLAorCSAgKGdzdF9tdWx0aV9xdWV1ZV9zcmNfcXVlcnkpLCAoc2luZ2xlX3F1ZXVlX292ZXJydW5fY2IpLAorCSAgKHNpbmdsZV9xdWV1ZV91bmRlcnJ1bl9jYiksIChzaW5nbGVfcXVldWVfY2hlY2tfZnVsbCksCisJICAoZ3N0X3NpbmdsZV9xdWV1ZV9uZXcpOgorCSAgS2VlcCB0cmFjayBvZiB0aW1lIGluIHRoZSBxdWV1ZSBieSBtZWFzdXJpbmcgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbgorCSAgcnVubmluZ190aW1lIG9uIGlucHV0IGFuZCBvdXRwdXQuIFRoaXMgZ2l2ZXMgbW9yZSBhY2N1cmF0ZSByZXN1bHRzIGFuZAorCSAgY2FuIGNvbXBlbnNhdGUgZm9yIHNlZ21lbnRzIGNvcnJlY3RseS4KKwkgIE1ha2UgYSBxdWV1ZSBieSBkZWZhdWx0IG9ubHkgNSBidWZmZXJzIGRlZXAuIFdlIHdpbGwgbm93IGluY3JlYXNlIHRoZQorCSAgYnVmZmVyIHNpemUgZGVwZW5kaW5nIG9uIHRoZSBmaWxsZWRuZXNzIG9mIHRoZSBvdGhlciBxdWV1ZXMuCisJICBGYWN0b3Igb3V0IGNvbW1vbmcgZmx1c2ggY29kZS4KKwkgIE1ha2Ugc3VyZSB3ZSBkb24ndCBhZGQgYWRkaXRpb25hbCByZWZjb3VudHMgdG8gYnVmZmVycyB3aGVuIHdlIGNhbiBhdm9pZAorCSAgaXQuCisJICBQcm9wYWdhdGUgR3N0Rmxvd1JldHVybiBkaWZmZXJlbnRseS4KKwkgIFVzZSBHU2xpY2UgZm9yIGludGVybWVkaWF0ZSBHc3RNdWx0aVF1ZXVlSXRlbXMuCisJICBLZWVwIHRyYWNrIG9mIEVPUy4KKwkgIFJlc2l6ZSBxdWV1ZXMgb24gb3ZlciBhbmQgdW5kZXJydW5zIGJhc2VkIG9uIGZpbGxlZCBsZXZlbCBvZiBvdGhlcgorCSAgcXVldWVzLgorCSAgV2hlbiBjaGVja2luZyBpZiB0aGUgcXVldWUgaXMgZmlsbGVkLCBwcmVmZXIgdG8gbWVhc3VyZSBpbiB0aW1lIGlmIHdlCisJICBjYW4gYW5kIGZhbGwgYmFjayB0byBieXRlcyB3aGVuIG5vIHRpbWUgaXMga25vd24uCisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkgIEZpeCByZXR1cm4gdmFsdWUuCisKKzIwMDctMDYtMTUgMTA6NDg6MTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBXb3JrIGFyb3VuZCB0aGUgYnJva2VubmVzcyBvZiB0aGUgZXZlbnQgdm1ldGhvZCBpbiBiYXNldHJhbnNmb3JtLiBQcmVmZXIgdG8gcmV0dXJuIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zaW5rX2V2ZW50KToKKwkgIFdvcmsgYXJvdW5kIHRoZSBicm9rZW5uZXNzIG9mIHRoZSBldmVudCB2bWV0aG9kIGluIGJhc2V0cmFuc2Zvcm0uIFByZWZlcgorCSAgdG8gcmV0dXJuIFRSVUUgd2hlbiB0aGUgc3ViY2xhc3MgcmV0dXJuZWQgRkFMU0UgKG1lYW5pbmcgZG9uJ3QgZm9yd2FyZAorCSAgdGhlIGV2ZW50KS4KKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6CisJICBDbGFyaWZ5IHRoZSBkb2NzLgorCisyMDA3LTA2LTE1IDEwOjQzOjUxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBJbXByb3ZlIGRlYnVnZ2luZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3B1c2hfZXZlbnQpLCAoZ3N0X3BhZF9zZW5kX2V2ZW50KToKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfcXVlcnlfbGF0ZW5jeSksCisJICAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfcXVlcnkpLCAoZ3N0X2Jhc2Vfc3JjX2dldF9yYW5nZSksCisJICAoZ3N0X2Jhc2Vfc3JjX3N0YXJ0KToKKwkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOiAoc2V0dXBfcGlwZWxpbmUpOgorCSAgSW1wcm92ZSBkZWJ1Z2dpbmcuCisKKzIwMDctMDYtMTUgMDc6Mjc6MDAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZG9jcy9wd2cvYWR2YW5jZWQtdHlwZXMueG1sOiBBZGRlZCBtb3JlIGZvcm1hdHMgdG8gY2FwcyB0YWJsZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL3B3Zy9hZHZhbmNlZC10eXBlcy54bWw6CisJICBBZGRlZCBtb3JlIGZvcm1hdHMgdG8gY2FwcyB0YWJsZS4KKworMjAwNy0wNi0xNSAwNzowMjowNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICB0b29scy9nc3QtbGF1bmNoLmM6IFJlbW92ZSBjcnVmeSBjb2RlLiBHT3B0aW9uIGRvZXMgbm90IG5lZWQgdGhpcyB3b3JrYXJvdW5kLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKG1haW4pOgorCSAgUmVtb3ZlIGNydWZ5IGNvZGUuIEdPcHRpb24gZG9lcyBub3QgbmVlZCB0aGlzIHdvcmthcm91bmQuCisKKzIwMDctMDYtMTQgMjA6Mjk6MDkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6IEZpeCB3cm9uZyBnZXR0ZXIgZm9yIGVudW1zIGluIGNvbnRyb2xsZXIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6CisJICAoZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfc2V0X2ludGVycG9sYXRpb25fbW9kZSk6CisJICBGaXggd3JvbmcgZ2V0dGVyIGZvciBlbnVtcyBpbiBjb250cm9sbGVyLgorCisyMDA3LTA2LTE0IDE3OjM2OjE5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOiBJbnRlcmNlcHQgY3JpdGljYWxzIGFuZCB3YXJuaW5ncyBpbiB0aGUgR3N0LVBob25vbiBsb2cgZG9tYWluLCBzbworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6IChnc3RfY2hlY2tfaW5pdCk6CisJICBJbnRlcmNlcHQgY3JpdGljYWxzIGFuZCB3YXJuaW5ncyBpbiB0aGUgR3N0LVBob25vbiBsb2cgZG9tYWluLCBzbworCSAgQVNTRVJUX0NSSVRJQ0FMKCkgZXRjLiBjYW4gYmUgdXNlZCBpbiBnc3QtcGhvbm9uJ3MgdW5pdCB0ZXN0cyBhcworCSAgd2VsbC4KKworMjAwNy0wNi0xNCAxNjowNzowOSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgZ3N0L2dzdHBhcmFtc3BlY3MuYzogU2luY2UgdGhpcyBmaWxlIGRvZXNuJ3QgaW5jbHVkZSAiZ3N0LmgiIGl0IHdpbGwgbm90IGdvIHRocm91Z2ggdGhlIG1hY3JvcyB0aGF0IGRpc2FibGUgR1NUX0xPRyBpLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBhcmFtc3BlY3MuYzogKF9nc3RfcGFyYW1fZnJhY3Rpb25fdmFsaWRhdGUpOgorCSAgU2luY2UgdGhpcyBmaWxlIGRvZXNuJ3QgaW5jbHVkZSAiZ3N0LmgiIGl0IHdpbGwgbm90IGdvIHRocm91Z2ggdGhlCisJICBtYWNyb3MgdGhhdCBkaXNhYmxlIEdTVF9MT0cgaWYgZGVidWdnaW5nIHdhcyBkaXNhYmxlZC4KKworMjAwNy0wNi0xNCAxNTo1NjowMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgVWdseSAnZml4JyBmb3IgdGhlIGNvbnRyb2xsZXIgdW5pdCB0ZXN0IG9uIHRoZSBwNSBib3Q6IGluIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCgpIGNoZWNrIHdoZXRoZXIgdGhlIHZhbHVlcyBhcmUgJ2FsLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06CisJICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6CisJICAqIHBrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2stdW5pbnN0YWxsZWQucGMuaW46CisJICAqIHBrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2sucGMuaW46CisJICBVZ2x5ICdmaXgnIGZvciB0aGUgY29udHJvbGxlciB1bml0IHRlc3Qgb24gdGhlIHA1IGJvdDogaW4KKwkgIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCgpIGNoZWNrIHdoZXRoZXIgdGhlIHZhbHVlcyBhcmUgJ2FsbW9zdAorCSAgZXF1YWwnIGJ5IGFsbG93aW5nIGEgc21hbGwgYWJzb2x1dGUgZXJyb3IsIHdoaWNoIHNob3VsZCBiZSBnb29kCisJICBlbm91Z2ggZm9yIG91ciB1c2UgY2FzZXMgKG5vcm1hbCBudW1iZXJzIGFuZCB2YWx1ZXMgY2xvc2UgdG8gMCkuCisJICBQcm9wZXIgZml4YWdlIGxlZnQgdG8gZmxvYXRpbmcgcG9pbnQgYXJpdGhtZXRpYyBhZmljaW9uYWRvcy4KKworMjAwNy0wNi0xNCAxMjowMzo0NCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IEFkZCB0d28gYnJlYWtzIHRoYXRzIHdoZXJlIG1pc3NpbmcuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19yZXNldF9xb3MpLAorCSAgKGdzdF9iYXNlX3NpbmtfcmVuZGVyX29iamVjdCksIChnc3RfYmFzZV9zaW5rX2dldF9wb3NpdGlvbik6CisJICBBZGQgdHdvIGJyZWFrcyB0aGF0cyB3aGVyZSBtaXNzaW5nLgorCisyMDA3LTA2LTE0IDExOjU2OjQ0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBBUEk6IGFkZCBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQoKSBhbmQgYXNzZXJ0X2VxdWFsc19mbG9hdCgpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6CisJICBBUEk6IGFkZCBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQoKSBhbmQgYXNzZXJ0X2VxdWFsc19mbG9hdCgpLgorCSAgQWRkIGRvY3VtZW50YXRpb24gZm9yIHNvbWUgb2YgdGhlIG1hY3Jvcy4KKwkgICogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBVc2UgbmV3bHktYWRkZWQgYXNzZXJ0cy4KKworMjAwNy0wNi0xNCAxMDozMzoyOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0cGFkLmM6IFNob3cgdGhlIGNhcHMgY2hhbmdlIGluIHRoZSBsb2cgdG8gaGVscCBzcG90dGluZyB0aGUgY2FzZSBvZiBub3QgZXhhY3RseSBtYXRjaGluZyBjYXBzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfYWxsb2NfYnVmZmVyX2Z1bGwpLCAoZ3N0X3BhZF9wdXNoKToKKwkgIFNob3cgdGhlIGNhcHMgY2hhbmdlIGluIHRoZSBsb2cgdG8gaGVscCBzcG90dGluZyB0aGUgY2FzZSBvZiBub3QKKwkgIGV4YWN0bHkgbWF0Y2hpbmcgY2Fwcy4KKworMjAwNy0wNi0xNCAwODo1Mjo1MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZG9jcy9wd2cvYnVpbGRpbmctYm9pbGVyLnhtbDogRml4IHR5cG9zLCBzcG90dGVkIGJ5IFRoaWpzIFZlcm1laXIgKCM0NDcxOTApLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcHdnL2J1aWxkaW5nLWJvaWxlci54bWw6CisJICBGaXggdHlwb3MsIHNwb3R0ZWQgYnkgVGhpanMgVmVybWVpciAoIzQ0NzE5MCkuCisKKzIwMDctMDYtMTMgMTY6MTU6MjMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBkb2NzL3BsdWdpbnMvdG1wbC8uY3ZzaWdub3JlOiBJZ25vcmUgZmlsZSB0byBrZWVwIHRoZSBidWlsZGJvdHMgaGFwcHkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL3BsdWdpbnMvdG1wbC8uY3ZzaWdub3JlOgorCSAgSWdub3JlIGZpbGUgdG8ga2VlcCB0aGUgYnVpbGRib3RzIGhhcHB5CisKKzIwMDctMDYtMTMgMTU6Mzk6NTMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBkb2NzL3BsdWdpbnMvOiBQdWxsIGZkc2luayBpbnRvIHRoZSBkb2NzIHRvby4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06CisJICAqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy1kb2NzLnNnbWw6CisJICAqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy1zZWN0aW9ucy50eHQ6CisJICBQdWxsIGZkc2luayBpbnRvIHRoZSBkb2NzIHRvby4KKworMjAwNy0wNi0xMSAwNzoxNDo1MyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzogQWN0dWFsbHkgdXNlIHRoZSBuZXcgZnVuY3Rpb25zIHdpdGggbWluL21heCBjaGVja3MgZm9yIHRoZSB0cmlnZ2VyIGFuZCBub25lIGkuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzoKKwkgIEFjdHVhbGx5IHVzZSB0aGUgbmV3IGZ1bmN0aW9ucyB3aXRoIG1pbi9tYXggY2hlY2tzIGZvciB0aGUgdHJpZ2dlciBhbmQKKwkgIG5vbmUgaW50ZXJwb2xhdGlvbiBtb2RlcyBmb3IgZ2V0KCkgYW5kIGdldF92YWx1ZV9hcnJheSgpIGluc3RlYWQgb2YKKwkgIGp1c3QgdGhlIGxhdHRlci4KKworMjAwNy0wNi0xMCAxMjozODoxMSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzogVW5zZXQgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gR1ZhbHVlcyB3aGVuIGZyZWVpbmcgdGhlIGNvcnJlc3BvbmRpbmcKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKKwkgIChnc3RfY29udHJvbGxlZF9wcm9wZXJ0eV9mcmVlKToKKwkgIFVuc2V0IHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIEdWYWx1ZXMgd2hlbiBmcmVlaW5nIHRoZSBjb3JyZXNwb25kaW5nCisJICBHc3RDb250cm9sbGVyUHJvcGVydHkgc3RydWN0LgorCisyMDA3LTA2LTA5IDE2OjU4OjMwICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvOiBQcm90ZWN0IGFnYWluc3QgdmFsdWVzIGxhcmdlciBvciBzbWFsbGVyIHRoYW4gdGhlIG1pbmltdW0gb3IgbWF4aW11bSBhbGxvd2VkIHZhbHVlIGZvciB0aGUgcHJvcC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgorCSAgKGdzdF9jb250cm9sbGVkX3Byb3BlcnR5X25ldyk6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlcnByaXZhdGUuaDoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6CisJICAoZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfZmluZF9jb250cm9sX3BvaW50X25vZGUpLAorCSAgKGludGVycG9sYXRlX25vbmVfZ2V0KSwgKGludGVycG9sYXRlX25vbmVfZ2V0X2VudW1fdmFsdWVfYXJyYXkpLAorCSAgKGludGVycG9sYXRlX25vbmVfZ2V0X3N0cmluZ192YWx1ZV9hcnJheSksCisJICAoaW50ZXJwb2xhdGVfdHJpZ2dlcl9nZXQpLAorCSAgKGludGVycG9sYXRlX3RyaWdnZXJfZ2V0X2VudW1fdmFsdWVfYXJyYXkpLAorCSAgKGludGVycG9sYXRlX3RyaWdnZXJfZ2V0X3N0cmluZ192YWx1ZV9hcnJheSk6CisJICBQcm90ZWN0IGFnYWluc3QgdmFsdWVzIGxhcmdlciBvciBzbWFsbGVyIHRoYW4gdGhlIG1pbmltdW0gb3IgbWF4aW11bQorCSAgYWxsb3dlZCB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5IHdoZW4gdXNpbmcgdmFsdWVzIHRoYXQgY2FuIGJlIGNvbXBhcmVkLgorCSAgT3B0aW1pemUgdHJpZ2dlciBpbnRlcnBvbGF0b3IgYSBiaXQgYnkgdGFraW5nIHRoZSBsYXN0IHJlcXVlc3RlZCB2YWx1ZQorCSAgaW50byBhY2NvdW50IGluc3RlYWQgb2YgYWx3YXlzIGxvb3BpbmcgdGhyb3VnaCB0aGUgY29tcGxldGUgbGlzdC4KKwkgIEZpeCBjb2Rpbmcgc3R5bGUgYSBiaXQsIGV2ZXJ5d2hlcmUgZWxzZSB3ZSB1c2UgInJldHVybiBmb28iIGluc3RlYWQKKwkgIG9mICJyZXR1cm4gKGZvbykiLgorCSAgKiB0ZXN0cy9jaGVjay9saWJzL2NvbnRyb2xsZXIuYzogKEdTVF9TVEFSVF9URVNUKSwKKwkgIChnc3RfY29udHJvbGxlcl9zdWl0ZSk6CisJICBBZGQgdW5pdCB0ZXN0IGZvciB0aGUgcHJvdGVjdGlvbiBhZ2FpbnN0IHRvbyBsYXJnZSBvciB0b28gc21hbGwKKwkgIHZhbHVlcy4KKworMjAwNy0wNi0wOCAyMTowODoyNCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBkb2NzL3JhbmRvbS9zbG9tby9jb250cm9sbGVyLnR4dDogQWRkIHNvbWUgdGhvdWdodHMgYWJvdXQgdGhlIGZ1dHVyZSBvZiB0aGUgY29udHJvbGxlci4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL3JhbmRvbS9zbG9tby9jb250cm9sbGVyLnR4dDoKKwkgIEFkZCBzb21lIHRob3VnaHRzIGFib3V0IHRoZSBmdXR1cmUgb2YgdGhlIGNvbnRyb2xsZXIuCisKKzIwMDctMDYtMDggMTE6MDA6NTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogRG9uJ3Qgb3ZlcmZsb3cgaW4gcmV0aW1lc3RhbXBpbmcgY29kZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IChnc3RfaWRlbnRpdHlfdHJhbnNmb3JtX2lwKToKKwkgIERvbid0IG92ZXJmbG93IGluIHJldGltZXN0YW1waW5nIGNvZGUuCisKKzIwMDctMDYtMDcgMjA6NTE6MzUgKzAwMDAgIFPDqWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KKworCSAgbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6IFVzZSBnc3RfdXRpbF9ndWludDY0X3RvX2dkb3VibGUgZm9yIGNvbnZlcnNpb25zLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jOiAoREVGSU5FX0NVQklDX0dFVCk6CisJICBVc2UgZ3N0X3V0aWxfZ3VpbnQ2NF90b19nZG91YmxlIGZvciBjb252ZXJzaW9ucy4KKwkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBBZGQgbmV3IGV4cG9ydGVkIGZ1bmN0aW9ucy4KKworMjAwNy0wNi0wNyAxNzoyMjo0NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdHV0aWxzLmM6IFNtYWxsIGRvY3MgYWRkaXRpb24uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHV0aWxzLmM6CisJICBTbWFsbCBkb2NzIGFkZGl0aW9uLgorCisyMDA3LTA2LTA3IDE0OjQ5OjAwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIFJFQURNRTogUmVtb3ZlIHRoYXQgdGVzdCBsaW5lIGFnYWluLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIFJFQURNRToKKwkgIFJlbW92ZSB0aGF0IHRlc3QgbGluZSBhZ2Fpbi4KKworMjAwNy0wNi0wNyAxNDozNjowMiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBSRUFETUU6IFRlc3QgY29tbWl0IG1haWwgc2VuZGluZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBSRUFETUU6CisJICBUZXN0IGNvbW1pdCBtYWlsIHNlbmRpbmcuCisKKzIwMDctMDYtMDcgMTQ6MTc6NDYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgY29uZmlndXJlLmFjOiBGaXggdHlwbyBhbmQgdGVzdCBjb21taXQgbWFpbCBzZW5kaW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgIEZpeCB0eXBvIGFuZCB0ZXN0IGNvbW1pdCBtYWlsIHNlbmRpbmcuCisKKzIwMDctMDYtMDcgMTQ6MTI6MDcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci9hdWRpby1leGFtcGxlLmM6IEltcHJvdmUgY29tbWVudCBhbmQgdGVzdCBjb21taXQgbWFpbCBzZW5kaW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvYXVkaW8tZXhhbXBsZS5jOgorCSAgSW1wcm92ZSBjb21tZW50IGFuZCB0ZXN0IGNvbW1pdCBtYWlsIHNlbmRpbmcuCisKKzIwMDctMDYtMDcgMTA6MTE6NDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RiaW4uYzogQWRkIGhlbHBlciBmdW5jdGlvbiB0byBmaW5kIG1lc3NhZ2VzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RiaW4uYzogKGZpbmRfbWVzc2FnZSksIChiaW5fcmVwbGFjZV9tZXNzYWdlKSwgKGlzX2VvcyksCisJICAoZ3N0X2Jpbl9yZW1vdmVfZnVuYyksIChnc3RfYmluX2VsZW1lbnRfc2V0X3N0YXRlKSwKKwkgIChiaW5faGFuZGxlX2FzeW5jX3N0YXJ0KSwgKGJpbl9oYW5kbGVfYXN5bmNfZG9uZSksCisJICAoZ3N0X2Jpbl9oYW5kbGVfbWVzc2FnZV9mdW5jKToKKwkgIEFkZCBoZWxwZXIgZnVuY3Rpb24gdG8gZmluZCBtZXNzYWdlcy4KKwkgIEdlbmVyYXRlIHRoZSBhc3luYy1kb25lIG1lc3NhZ2VzIHRvZ2V0aGVyIHdpdGggdGhlIHN0YXRlIGNoYW5nZQorCSAgbWVzc2FnZXMuCisJICBTbWFsbCBjbGVhbnVwcyBpbiBoYW5kbGluZyB0b3BsZXZlbCBiaW5zLgorCisyMDA3LTA2LTA2IDE4OjExOjEwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBGaXggbXVsdGlxdWV1ZSBsZWFraW5nIGJ1ZmZlcnMgYW5kIGV2ZW50cyB3aGVuIGRvd25zdHJlYW0gb3IgdGhlIHF1ZXVlIGFyZSBmbHVzaGluZy4gTWFrZSByZWZjb3VudGluZyBhc3N1bXB0aW9ucyBleHAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5jOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5oOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogKGdzdF9zaW5nbGVfcXVldWVfcHVzaF9vbmUpLAorCSAgKGdzdF9tdWx0aV9xdWV1ZV9pdGVtX25ldyksIChnc3RfbXVsdGlfcXVldWVfY2hhaW4pLAorCSAgKGdzdF9tdWx0aV9xdWV1ZV9zaW5rX2V2ZW50KToKKwkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlxdWV1ZS5jOiAobXVsdGlxdWV1ZV9zdWl0ZSk6CisJICBGaXggbXVsdGlxdWV1ZSBsZWFraW5nIGJ1ZmZlcnMgYW5kIGV2ZW50cyB3aGVuIGRvd25zdHJlYW0gb3IgdGhlCisJICBxdWV1ZSBhcmUgZmx1c2hpbmcuIE1ha2UgcmVmY291bnRpbmcgYXNzdW1wdGlvbnMgZXhwbGljaXQgYW5kCisJICBkb2N1bWVudCB0aGVtIChzaG91bGRuJ3QgYnJlYWsgZXhpc3RpbmcgY29kZSB0aGF0IHVzZXMgaXQgb3RoZXIgdGhhbgorCSAgbWF5YmUgbGVhayBtaW5pb2JqZWN0cywgYnV0IHRoYXQgYWxyZWFkeSBoYXBwZW5zIGFueXdheSkuIEFkZCB1bml0CisJICB0ZXN0IGZvciB0aGUgbW9zdCBjb21tb24gZmx1c2hpbmcgY2FzZS4gRml4ZXMgIzQyMzcwMC4KKworMjAwNy0wNi0wNiAxNDoyMDowMSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzogQ2xhcmlmeSBkb2NzOiBUaGUgZ2V0X2FsbCwgZ2V0X3ZhbHVlX2FycmF5KHMpIGZ1bmN0aW9ucyBkb24ndCBtb2RpZnkgdGhlIEdPYmplY3QuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKKwkgIENsYXJpZnkgZG9jczogVGhlIGdldF9hbGwsIGdldF92YWx1ZV9hcnJheShzKSBmdW5jdGlvbnMKKwkgIGRvbid0IG1vZGlmeSB0aGUgR09iamVjdCBwcm9wZXJ0aWVzLgorCisyMDA3LTA2LTA2IDE0OjAxOjU2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvOiBGYWN0b3Igb3V0IHRoZSAnc2V0JyBsb2dpYyBpbnRvIGdzdF9jb250cm9sbGVyX3NldF91bmxvY2tlZCBmb3IgdGhlIGdzdF9jb250cm9sbGVyX3NldCBhbmQgZ3N0Xy4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgorCSAgKGdzdF9jb250cm9sbGVkX3Byb3BlcnR5X3NldF9pbnRlcnBvbGF0aW9uX21vZGUpLAorCSAgKGdzdF9jb250cm9sbGVkX3Byb3BlcnR5X3ByZXBlbmRfZGVmYXVsdCksCisJICAoZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfbmV3KSwgKGdzdF9jb250cm9sbGVyX3NldF91bmxvY2tlZCksCisJICAoZ3N0X2NvbnRyb2xsZXJfc2V0KSwgKGdzdF9jb250cm9sbGVyX3NldF9mcm9tX2xpc3QpLAorCSAgKGdzdF9jb250cm9sbGVyX3Vuc2V0KSwgKGdzdF9jb250cm9sbGVyX3Vuc2V0X2FsbCk6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlcnByaXZhdGUuaDoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6CisJICBGYWN0b3Igb3V0IHRoZSAnc2V0JyBsb2dpYyBpbnRvIGdzdF9jb250cm9sbGVyX3NldF91bmxvY2tlZCBmb3IgdGhlCisJICBnc3RfY29udHJvbGxlcl9zZXQgYW5kIGdzdF9jb250cm9sbGVyX3NldF9mcm9tX2xpc3QgZnVuY3Rpb25zLgorCSAgVG8gbWFrZSBsaWZlIG9mIHRoZSBpbnRlcnBvbGF0b3JzIGVhc2llciBhbHdheXMgYWRkIGEgY29udHJvbCBwb2ludAorCSAgYXQgdGltZXN0YW1wIHplcm8gd2l0aCB0aGUgZGVmYXVsdCB2YWx1ZS4KKwkgIEluIHRoZSBsaW5lYXIgaW50ZXJwb2xhdG9yIG1ha2UgdGhpbmdzIG1vcmUgb2J2aW91cyBieSBiZXR0ZXIgdmFyaWFibGUKKwkgIG5hbWluZyAoc2xvcGUpLgorCSAgSW1wbGVtZW50IGN1YmljIGludGVycG9sYXRpb24gbW9kZSAoYnkgdXNpbmcgYSBuYXR1cmFsIGN1YmljIHNwbGluZSkKKwkgIGFuZCBtYXAgdGhlIHF1YWRyYXRpYyBpbnRlcnBvbGF0aW9uIG1vZGUgdG8gdGhpcyB0b28gKGFzIHF1YWRyYXRpYworCSAgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UsIHNlZSBkaXNjdXNzaW9uIG9uIHRoZSBsaXN0KS4KKwkgICogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6IChHU1RfU1RBUlRfVEVTVCksCisJICAoZ3N0X2NvbnRyb2xsZXJfc3VpdGUpOgorCSAgQWRkIHVuaXQgdGVzdCBmb3IgdGhlIGN1YmljIGludGVycG9sYXRpb24gbW9kZSBhbmQgY2hlY2sgZXZlcnl3aGVyZQorCSAgaWYgdGhlIGludGVycG9sYXRpb24gbW9kZSBjb3VsZCBiZSBzZXQgYXMgZXhwZWN0ZWQuCisKKzIwMDctMDYtMDYgMTE6Mzg6MjUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RwYXJhbXNwZWNzLmM6IERvbid0IHVzZSBHTGliLTIuMTAgZnVuY3Rpb25zLCB3ZSBzdGlsbCBkZXBlbmQgb24KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFyYW1zcGVjcy5jOiAoZ3N0X3BhcmFtX3NwZWNfZnJhY3Rpb25fZ2V0X3R5cGUpOgorCSAgRG9uJ3QgdXNlIEdMaWItMi4xMCBmdW5jdGlvbnMsIHdlIHN0aWxsIGRlcGVuZCBvbgorCSAgR0xpYi1ob3ctb2xkLWlzLWl0LWFnYWluLTIuOC4KKworMjAwNy0wNi0wNiAxMToxODoxMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgQVBJOiBhZGQgR3N0UGFyYW1TcGVjRnJhY3Rpb24sIHNvIGVsZW1lbnRzIGNhbiBoYXZlIGZyYWN0aW9uIHByb3BlcnRpZXMgd2l0aG91dCBsb3RzIG9mIHBhaW5mdWwgc3RyaW5nIHBhcnNpbmcgKCM0NDQ2Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L01ha2VmaWxlLmFtOgorCSAgKiBnc3QvZ3N0LmM6CisJICAqIGdzdC9nc3QuaDoKKwkgICogZ3N0L2dzdHBhcmFtc3BlY3MuYzogKF9nc3RfcGFyYW1fZnJhY3Rpb25faW5pdCksCisJICAoX2dzdF9wYXJhbV9mcmFjdGlvbl9zZXRfZGVmYXVsdCksIChfZ3N0X3BhcmFtX2ZyYWN0aW9uX3ZhbGlkYXRlKSwKKwkgIChfZ3N0X3BhcmFtX2ZyYWN0aW9uX3ZhbHVlc19jbXApLAorCSAgKGdzdF9wYXJhbV9zcGVjX2ZyYWN0aW9uX2dldF90eXBlKSwgKGdzdF9wYXJhbV9zcGVjX2ZyYWN0aW9uKToKKwkgICogZ3N0L2dzdHBhcmFtc3BlY3MuaDoKKwkgICogZ3N0L2dzdHZhbHVlLmM6CisJICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvLmN2c2lnbm9yZToKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHBhcmFtc3BlY3MuYzogKGdzdF9kdW1teV9vYmpfYmFzZV9pbml0KSwKKwkgIChnc3RfZHVtbXlfb2JqX2NsYXNzX2luaXQpLCAoZ3N0X2R1bW15X29ial9pbml0KSwKKwkgIChnc3RfZHVtbXlfb2JqX3NldF9wcm9wZXJ0eSksIChnc3RfZHVtbXlfb2JqX2dldF9wcm9wZXJ0eSksCisJICAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3BhcmFtX3NwZWNfc3VpdGUpOgorCSAgQVBJOiBhZGQgR3N0UGFyYW1TcGVjRnJhY3Rpb24sIHNvIGVsZW1lbnRzIGNhbiBoYXZlIGZyYWN0aW9uCisJICBwcm9wZXJ0aWVzIHdpdGhvdXQgbG90cyBvZiBwYWluZnVsIHN0cmluZyBwYXJzaW5nICgjNDQ0NjQ4KS4KKworMjAwNy0wNi0wNSAxNjoyNTowNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdG9iamVjdC5jOiBGaXggc2lnbmFsIHNpZ25hdHVyZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0b2JqZWN0LmM6IChnc3Rfb2JqZWN0X2NsYXNzX2luaXQpOgorCSAgRml4IHNpZ25hbCBzaWduYXR1cmUuCisJICAqIGdzdC9nc3RzZWdtZW50LmM6CisJICBBZGQgc21hbGwgY2xhcmlmaWNhdGlvbiBpbiB0aGUgYXBpIGRvY3MuCisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiAoZ3N0X2ZpbGVfc3JjX3NldF9sb2NhdGlvbik6CisJICBTdGF0ZXMgYXJlIHByb3RlY3RlZCB3aXRoIG9iamVjdCBsb2NrLgorCisyMDA3LTA2LTA1IDE0OjExOjU5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgQVVUSE9SUzogSSBzaG91bGQgcHJvYmFibHkgYmUgbGlzdGVkIGFzIGFuIGF1dGhvciBieSBub3cuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogQVVUSE9SUzoKKwkgIEkgc2hvdWxkIHByb2JhYmx5IGJlIGxpc3RlZCBhcyBhbiBhdXRob3IgYnkgbm93LgorCSAgKiBkb2NzL3JhbmRvbS9yZWxlYXNlOgorCSAgVXBkYXRlIHRoZSByZWxlYXNlIGRvYworCisyMDA3LTA2LTA1IDEzOjQ5OjEwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0dmFsdWUuYzogTWFrZSBkb2NzIGZvciBnc3RfdmFsdWVfY29tcGFyZSgpIG1lbnRpb24gcmV0dXJuIGVudW1zIHRoYXQgYWN0dWFsbHkgZXhpc3QuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHZhbHVlLmM6CisJICBNYWtlIGRvY3MgZm9yIGdzdF92YWx1ZV9jb21wYXJlKCkgbWVudGlvbiByZXR1cm4gZW51bXMgdGhhdAorCSAgYWN0dWFsbHkgZXhpc3QuCisKKzIwMDctMDYtMDUgMTM6MjE6NDEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBjb25maWd1cmUuYWM6IEJhY2sgdG8gQ1ZTCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgQmFjayB0byBDVlMKKworPT09IHJlbGVhc2UgMC4xMC4xMyA9PT0KKworMjAwNy0wNi0wNSAxMjo0NzoyMyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkqIENoYW5nZUxvZzoKKwkqIE5FV1M6CisJKiBSRUxFQVNFOgorCSogY29uZmlndXJlLmFjOgorCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmFyZ3M6CisJKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuc2lnbmFsczoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6CisJKiBnc3RyZWFtZXIuZG9hcDoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkqIHdpbjMyL3ZzNi9ncmFtbWFyLmRzcDoKKwkqIHdpbjMyL3ZzNi9nc3RfaW5zcGVjdC5kc3A6CisJKiB3aW4zMi92czYvZ3N0X2xhdW5jaC5kc3A6CisJKiB3aW4zMi92czYvZ3N0cmVhbWVyLmRzdzoKKwkqIHdpbjMyL3ZzNi9saWJnc3RiYXNlLmRzcDoKKwkqIHdpbjMyL3ZzNi9saWJnc3Rjb250cm9sbGVyLmRzcDoKKwkqIHdpbjMyL3ZzNi9saWJnc3Rjb3JlZWxlbWVudHMuZHNwOgorCSogd2luMzIvdnM2L2xpYmdzdGRhdGFwcm90b2NvbC5kc3A6CisJKiB3aW4zMi92czYvbGliZ3N0bmV0LmRzcDoKKwkqIHdpbjMyL3ZzNi9saWJnc3RyZWFtZXIuZHNwOgorCSAgUmVsZWFzZSAwLjEwLjEzICJXaXRoIG9yIHdpdGhvdXQgeW91IgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBSZWxlYXNlIDAuMTAuMTMgIldpdGggb3Igd2l0aG91dCB5b3UiCisKKzIwMDctMDYtMDUgMTI6MDY6NDQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmcucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGEucG86CisJKiBwby9kZS5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZnIucG86CisJKiBwby9pdC5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9ydS5wbzoKKwkqIHBvL3NxLnBvOgorCSogcG8vc3IucG86CisJKiBwby9zdi5wbzoKKwkqIHBvL3RyLnBvOgorCSogcG8vdWsucG86CisJKiBwby92aS5wbzoKKwkqIHBvL3poX0NOLnBvOgorCSogcG8vemhfVFcucG86CisJICBVcGRhdGUgLnBvIGZpbGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFVwZGF0ZSAucG8gZmlsZXMKKworMjAwNy0wNS0yOSAxNTo1MDo0OSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIFJFQURNRToKKwkgIHRyaWdnZXIgYSBtYWlsCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHRyaWdnZXIgYSBtYWlsCisKKzIwMDctMDUtMjkgMTQ6NDk6NTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBSRUFETUU6CisJICB0cmlnZ2VyIGEgbWFpbAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB0cmlnZ2VyIGEgbWFpbAorCisyMDA3LTA1LTI5IDE0OjQ4OjU1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogUkVBRE1FOgorCSAgdHJpZ2dlciBhIG1haWwKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgdHJpZ2dlciBhIG1haWwKKworMjAwNy0wNS0yOSAxNDozNzoyOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIFJFQURNRToKKwkgIHNlbmQgYSBtYWlsCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHNlbmQgYSBtYWlsCisKKzIwMDctMDUtMjkgMTE6NTI6MjggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBSRUFETUU6CisJICB0ZXN0IGNvbW1pdAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB0ZXN0IGNvbW1pdAorCisyMDA3LTA1LTI5IDExOjQwOjM2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogUkVBRE1FOgorCSAgdGVzdCBjb21taXQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgdGVzdCBjb21taXQKKworMjAwNy0wNS0yOSAxMTowMDoxNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIFJFQURNRToKKwkgIHRlc3QgY29tbWl0CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHRlc3QgY29tbWl0CisKKzIwMDctMDUtMjkgMTA6NDM6MjMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBSRUFETUU6CisJICB0ZXN0IGNvbW1pdAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB0ZXN0IGNvbW1pdAorCisyMDA3LTA1LTI5IDEwOjM1OjQwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogUkVBRE1FOgorCSAgdGVzdCBjb21taXQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgdGVzdCBjb21taXQKKworMjAwNy0wNS0yOSAxMDozNDoxNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIFJFQURNRToKKwkgIHRlc3QgY29tbWl0CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHRlc3QgY29tbWl0CisKKzIwMDctMDUtMjkgMTA6MjA6MTIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBSRUFETUU6CisJICB0ZXN0IGNvbW1pdAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB0ZXN0IGNvbW1pdAorCisyMDA3LTA1LTI1IDE1OjM2OjUyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YmluLmM6IE1ha2Ugc3VyZSB0aGF0IHRoZSBjaGlsZCBiaW4gc3RvcHMgYWZ0ZXIgY29tcGxldGluZyB0aGUgYXN5bmMgc3RhdGUgY2hhbmdlIHNvIHRoYXQgdGhlIHBhcmVudCBjYW4gY29udGkuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChiaW5faGFuZGxlX2FzeW5jX2RvbmUpOgorCSAgTWFrZSBzdXJlIHRoYXQgdGhlIGNoaWxkIGJpbiBzdG9wcyBhZnRlciBjb21wbGV0aW5nIHRoZSBhc3luYyBzdGF0ZQorCSAgY2hhbmdlIHNvIHRoYXQgdGhlIHBhcmVudCBjYW4gY29udGludWUgdGhlIHN0YXRlIGNoYW5nZSB0byBQTEFZSU5HLgorCSAgRml4ZXMgIzQ0MTE1OS4KKworMjAwNy0wNS0yNSAwOToyNjoyMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiBVc2UgYWRkaXRpb25hbCByZWZjb3VudGluZyB0byBhdm9pZCBjcmFzaGVzIHdoZW4gZHluYW1pY2FsbHkgYWRkaW5nIGFuZCByZW1vdmluZyBwYWRzLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RfcGFkc19maW5hbGl6ZSksCisJICAodW5yZWZfZGF0YSksIChnc3RfY29sbGVjdF9wYWRzX3JlbW92ZV9wYWQpLAorCSAgKGdzdF9jb2xsZWN0X3BhZHNfY2hlY2tfcGFkcyk6CisJICBVc2UgYWRkaXRpb25hbCByZWZjb3VudGluZyB0byBhdm9pZCBjcmFzaGVzIHdoZW4gZHluYW1pY2FsbHkgYWRkaW5nIGFuZAorCSAgcmVtb3ZpbmcgcGFkcy4gRml4ZXMgIzQyMDIwNi4KKworMjAwNy0wNS0yNCAxNTowMDo1NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgdG9vbHMvZ3N0LWxhdW5jaC5jOiBXaGVuIGJ1ZmZlcmluZyBnb2VzIGZyb20gYSB0d28gZGlnaXQgdG8gYSBzaW5nbGUgZGlnaXQgbnVtYmVyLCBtYWtlIHN1cmUgdG8gcmVtb3ZlIHRoZSBvbGQgc2Vjb25kLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAoZXZlbnRfbG9vcCk6CisJICBXaGVuIGJ1ZmZlcmluZyBnb2VzIGZyb20gYSB0d28gZGlnaXQgdG8gYSBzaW5nbGUgZGlnaXQgbnVtYmVyLCBtYWtlIHN1cmUKKwkgIHRvIHJlbW92ZSB0aGUgb2xkIHNlY29uZCBkaWdpdCBieSB3cml0aW5nIGEgYmxhbmsgb3ZlciBpdC4KKworMjAwNy0wNS0yNCAxMjoxOTowMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuYzogRWxpbWluYXRlIHRhYnMgYW5kIHRyYWlsaW5nIGNvbW1hIGluIGVudW0gbGlzdDsgZml4IHNvbWUgdHlwb3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuYzoKKwkgIEVsaW1pbmF0ZSB0YWJzIGFuZCB0cmFpbGluZyBjb21tYSBpbiBlbnVtIGxpc3Q7IGZpeCBzb21lIHR5cG9zLgorCisyMDA3LTA1LTI0IDExOjUwOjQ3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6IEFsbG93IHJlZmNvdW50IG9mIDMgYW5kIDQgYmVjYXVzZSBzb21lIHN0YXRlIHRocmVhZCBtaWdodCBzdGlsbCBiZSBidXN5IHdpdGggaXQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgQWxsb3cgcmVmY291bnQgb2YgMyBhbmQgNCBiZWNhdXNlIHNvbWUgc3RhdGUgdGhyZWFkIG1pZ2h0IHN0aWxsIGJlIGJ1c3kKKwkgIHdpdGggaXQuCisKKzIwMDctMDUtMjQgMDk6NDE6NTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvOiBUaGVzZSBhcmUgbm90IGluc3RhbGxlZCBoZWFkZXJzLCBubyBuZWVkIGZvciBwYWRkaW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUuYW06CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5oOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmg6CisJICBUaGVzZSBhcmUgbm90IGluc3RhbGxlZCBoZWFkZXJzLCBubyBuZWVkIGZvciBwYWRkaW5nLgorCisyMDA3LTA1LTI0IDA4OjM1OjA0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YmluLmM6IEVuYWJsZSBsYXRlbmN5IGZvciBuZXh0IHJlbGVhc2UuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9jbGFzc19pbml0KSwgKGdzdF9iaW5fZ2V0X3N0YXRlX2Z1bmMpLAorCSAgKGdzdF9iaW5fY29udGludWVfZnVuYyk6CisJICBFbmFibGUgbGF0ZW5jeSBmb3IgbmV4dCByZWxlYXNlLgorCSAgUmVzdG9yZSBTVEFURV9MT0NLIGFyb3VuZCByZWNhbGNfc3RhdGUgdGhhdCB3YXMgbGVmdCBvdXQgZHVyaW5nIHRoZQorCSAgcmV3cml0ZSBhbmQgY291bGQgcmVzdWx0IGluIHJhY3kgYmVoYXZpb3VyIHdoZW4gX2dldF9zdGF0ZSBhbmQKKwkgIHJlY2FsY19zdGF0ZSBhcmUgcnVuIGNvbmN1cnJlbnRseS4gU2VlICM0NDA0NjMuCisKKzIwMDctMDUtMjMgMTM6NTY6MjUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHRlc3RzL2NoZWNrL2dzdC9nc3RzeXN0ZW1jbG9jay5jOiBJbXByb3ZlIHRlc3RfYXN5bmNfb3JkZXIgdG8gYWxzbyB3b3JrIHdoZW4gYm90aCB0aW1lcnMgYXJlIGFscmVhZHkgZXhwaXJlZCB3aGVuIHdlIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RzeXN0ZW1jbG9jay5jOiAoc3RvcmVfY2FsbGJhY2spLAorCSAgKEdTVF9TVEFSVF9URVNUKToKKwkgIEltcHJvdmUgdGVzdF9hc3luY19vcmRlciB0byBhbHNvIHdvcmsgd2hlbiBib3RoIHRpbWVycyBhcmUgYWxyZWFkeQorCSAgZXhwaXJlZCB3aGVuIHdlIGdldCBzY2hlZHVsZWQgdG8gY2hlY2sgaXQuCisKKzIwMDctMDUtMjIgMTc6MTA6MDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RiaW4uKjogJ3ByaXZhdGUnIGlzIGEgYysrIGtleXdvcmQsIGxldCdzIG5vdCB1c2UgdGhhdCBpbiBoZWFkZXIgZmlsZXMsIG90aGVyd2lzZSBjKysgY29tcGlsZXJzIHdpbGwgdGhyb3cgYSB0YS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5faW5pdCksIChnc3RfYmluX2Rpc3Bvc2UpLAorCSAgKGdzdF9iaW5fc2V0X3Byb3BlcnR5KSwgKGdzdF9iaW5fZ2V0X3Byb3BlcnR5KSwKKwkgIChnc3RfYmluX3JlbW92ZV9mdW5jKSwgKGdzdF9iaW5faGFuZGxlX21lc3NhZ2VfZnVuYyk6CisJICAqIGdzdC9nc3RiaW4uaDoKKwkgICdwcml2YXRlJyBpcyBhIGMrKyBrZXl3b3JkLCBsZXQncyBub3QgdXNlIHRoYXQgaW4gaGVhZGVyIGZpbGVzLAorCSAgb3RoZXJ3aXNlIGMrKyBjb21waWxlcnMgd2lsbCB0aHJvdyBhIHRhbnRydW0uCisKKzIwMDctMDUtMjIgMTE6NTU6MzMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHBsdWdpbnMvOiBVc2UgI2lmZGVmIGZvciBIQVZFX1hZWiBmb3IgY29uc2lzdGVuY3kuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RlbGVtZW50cy5jOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IChnc3RfZmlsZV9zaW5rX2RvX3NlZWspLAorCSAgKGdzdF9maWxlX3NpbmtfZ2V0X2N1cnJlbnRfb2Zmc2V0KToKKwkgICogcGx1Z2lucy9pbmRleGVycy9nc3RpbmRleGVycy5jOiAocGx1Z2luX2luaXQpOgorCSAgVXNlICNpZmRlZiBmb3IgSEFWRV9YWVogZm9yIGNvbnNpc3RlbmN5LgorCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvLmN2c2lnbm9yZToKKwkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNpbmsuYzogKHNldHVwX2ZpbGVzaW5rKSwKKwkgIChjbGVhbnVwX2ZpbGVzaW5rKSwgKEdTVF9TVEFSVF9URVNUKSwgKGZpbGVzaW5rX3N1aXRlKToKKwkgIEFkZCBzb21lIHVuaXQgdGVzdHMgZm9yIGZpbGVzaW5rLgorCisyMDA3LTA1LTIyIDExOjQzOjA3ICswMDAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYW5hdXdAc2t5bmV0LmJlPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLio6IEZpeCBwb3NpdGlvbiByZXBvcnRpbmc7IHJlbmFtZSBkYXRhX3dyaXR0ZW4gbWVtYmVyIHRvIGN1cnJlbnRfcG9zIHRvIHJlZmxlY3QgaXRzIHJlYWwuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IE1hcmsgTmF1d2VsYWVydHMgPG1hbmF1dyBhdCBza3luZXQgYmU+CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzogKGdzdF9maWxlX3Npbmtfb3Blbl9maWxlKSwKKwkgIChnc3RfZmlsZV9zaW5rX3F1ZXJ5KSwgKGdzdF9maWxlX3NpbmtfZG9fc2VlayksCisJICAoZ3N0X2ZpbGVfc2lua19nZXRfY3VycmVudF9vZmZzZXQpLCAoZ3N0X2ZpbGVfc2lua19yZW5kZXIpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmg6CisJICBGaXggcG9zaXRpb24gcmVwb3J0aW5nOyByZW5hbWUgZGF0YV93cml0dGVuIG1lbWJlciB0byBjdXJyZW50X3BvcyB0bworCSAgcmVmbGVjdCBpdHMgcmVhbCBtZWFuaW5nIChmaXhlcyAjNDEyNjQ4KS4KKworMjAwNy0wNS0yMiAxMTowOTo0NSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgQWRkIGEgcHJvcGVydHkgZm9yIGJpbnMgdGhhdCBoYW5kbGUgdGhlIHN0YXRlIGNoYW5nZSBvZiB0aGVpciBjaGlsZHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9jbGFzc19pbml0KSwgKGdzdF9iaW5faW5pdCksCisJICAoZ3N0X2Jpbl9kaXNwb3NlKSwgKGdzdF9iaW5fc2V0X3Byb3BlcnR5KSwgKGdzdF9iaW5fZ2V0X3Byb3BlcnR5KSwKKwkgIChnc3RfYmluX3JlbW92ZV9mdW5jKSwgKGdzdF9iaW5faGFuZGxlX21lc3NhZ2VfZnVuYyk6CisJICAqIGdzdC9nc3RiaW4uaDoKKwkgIEFkZCBhIHByb3BlcnR5IGZvciBiaW5zIHRoYXQgaGFuZGxlIHRoZSBzdGF0ZSBjaGFuZ2Ugb2YgdGhlaXIgY2hpbGRzLgorCSAgRml4ZXMgIzQzNTg4MAorCisyMDA3LTA1LTIyIDEwOjIxOjMxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZG9jcy9tYW51YWwvYXBwZW5kaXgtcXVvdGVzLnhtbDoKKwkqIGRvY3MvbWFudWFsL21hbnVhbC54bWw6CisJICBhZGQgcXVvdGUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkIHF1b3RlCisKKzIwMDctMDUtMjIgMDk6NTY6MjUgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6IFVzZSBhbiBhcnJheSBvZiB0aGUgY29ycmVjdCB0eXBlIHdoZW4gdXNpbmcgX2dldF92YWx1ZV9hcnJheSB3aXRoIGxpbmVhciBpbnRlLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6CisJICBVc2UgYW4gYXJyYXkgb2YgdGhlIGNvcnJlY3QgdHlwZSB3aGVuIHVzaW5nIF9nZXRfdmFsdWVfYXJyYXkgd2l0aAorCSAgbGluZWFyIGludGVycG9sYXRpb24uCisKKzIwMDctMDUtMjIgMDY6Mzc6MzcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogQ2hhbmdlTG9nOgorCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RwYWQuaDoKKwkqIGdzdC9nc3RwaXBlbGluZS5jOgorCSAgZ3N0L2dzdGVsZW1lbnQuYyAoZ3N0X2VsZW1lbnRfcmVxdWlyZXNfY2xvY2ssIGdzdF9lbGVtZW50X3Byb3ZpZGVzX2Nsb2NrLCBnc3RfZWxlbWVudF9yZXF1ZXN0X3BhZCwgZ3N0X2VsZW1lbnRfY2xhc3NfLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGVsZW1lbnQuYyAoZ3N0X2VsZW1lbnRfcmVxdWlyZXNfY2xvY2ssCisJICBnc3RfZWxlbWVudF9wcm92aWRlc19jbG9jaywgZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQsCisJICBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlscywgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2ltcGxlLAorCSAgZ3N0X2VsZW1lbnRfZGVmYXVsdF9zZW5kX2V2ZW50LCBnc3RfZWxlbWVudF9hYm9ydF9zdGF0ZSwKKwkgIGdzdF9lbGVtZW50X2NvbnRpbnVlX3N0YXRlLCBnc3RfZWxlbWVudF9zZXRfc3RhdGUsCisJICBnc3RfZWxlbWVudF9zZXRfc3RhdGVfZnVuYywgaXRlcmF0b3JfYWN0aXZhdGVfZm9sZF93aXRoX3Jlc3luYyk6CisJICAqIGdzdC9nc3RwYWQuYyAoZ3N0X3BhZF9hY3RpdmF0ZV9wdWxsLCBnc3RfcGFkX3NldF9nZXRjYXBzX2Z1bmN0aW9uLAorCSAgZ3N0X3BhZF9maXhhdGVfY2FwcywgZ3N0X3BhZF9jb25maWd1cmVfc2luaywgZ3N0X3BhZF9jb25maWd1cmVfc3JjLAorCSAgZ3N0X3BhZF9xdWVyeSwgZ3N0X3BhZF9zYXZlX3RoeXNlbGYsIGhhbmRsZV9wYWRfYmxvY2ssIGdzdF9wYWRfcHVzaCwKKwkgIGdzdF9wYWRfZ2V0X3JhbmdlLCBnc3RfcGFkX3B1bGxfcmFuZ2UpOgorCSAgKiBnc3QvZ3N0cGFkLmggKEdTVF9QQURfTElOS19TVUNDRVNTRlVMLCBHU1RfRkxPV19DVVNUT01fU1VDQ0VTUywKKwkgIEdTVF9GTE9XX05PVF9TVVBQT1JURUQsIEdTVF9GTE9XX0lTX0ZBVEFMLCBHc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uLAorCSAgR3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb24sIEdzdFBhZENoYWluRnVuY3Rpb24sCisJICBHc3RQYWRHZXRDYXBzRnVuY3Rpb24sIEdzdFBhZEFjY2VwdENhcHNGdW5jdGlvbiwKKwkgIEdzdFBhZEZpeGF0ZUNhcHNGdW5jdGlvbiwgR3N0UGFkVGVtcGxhdGUpOgorCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYyAoZ3N0X3BpcGVsaW5lX2NoYW5nZV9zdGF0ZSwKKwkgIGdzdF9waXBlbGluZV9zZXRfbmV3X3N0cmVhbV90aW1lLCBnc3RfcGlwZWxpbmVfdXNlX2Nsb2NrLAorCSAgZ3N0X3BpcGVsaW5lX3NldF9jbG9jaywgZ3N0X3BpcGVsaW5lX2F1dG9fY2xvY2ssCisJICBnc3RfcGlwZWxpbmVfZ2V0X2RlbGF5KToKKwkgIFdoaXRlc3BhY2UgYW5kIGRvY3MgZml4ZXMuCisKKzIwMDctMDUtMjEgMjE6NDg6MDcgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6IEFkZCBzdXBwb3J0IGZvciByZXRyaWV2aW5nIHZhbHVlIGFycmF5cyB3aGVuIHVzaW5nIHRoZSB0cmlnZ2VyIGludGVycG9sYXRpb24gLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6CisJICAoaW50ZXJwb2xhdGVfdHJpZ2dlcl9nZXRfZW51bV92YWx1ZV9hcnJheSksCisJICAoaW50ZXJwb2xhdGVfdHJpZ2dlcl9nZXRfc3RyaW5nX3ZhbHVlX2FycmF5KToKKwkgIEFkZCBzdXBwb3J0IGZvciByZXRyaWV2aW5nIHZhbHVlIGFycmF5cyB3aGVuIHVzaW5nIHRoZSB0cmlnZ2VyCisJICBpbnRlcnBvbGF0aW9uIG1vZGUuCisKKzIwMDctMDUtMjEgMjE6MzQ6NDkgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLio6IENsYXJpZnkgdGhlIGRvY3Mgb2YgZ3N0X2NvbnRyb2xsZXJfZ2V0X3ZhbHVlX2FycmF5KCk6IFRoZSBhcnJheSB3aGVyZSB0aGUgdmFsdWVzLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6CisJICAoZ3N0X2NvbnRyb2xsZXJfZ2V0X3ZhbHVlX2FycmF5KToKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmg6CisJICBDbGFyaWZ5IHRoZSBkb2NzIG9mIGdzdF9jb250cm9sbGVyX2dldF92YWx1ZV9hcnJheSgpOiBUaGUgYXJyYXkgd2hlcmUKKwkgIHRoZSB2YWx1ZXMgc2hvdWxkIGJlIHdyaXR0ZW4gdG8gbXVzdCBiZSBhbGxvY2F0ZWQgYXMgdGhlcmUgc2VlbXMgdG8gYmUKKwkgIG5vIHdheSB0byBnZXQgdGhlIHNpemUgb2YgYSByYW5kb20gR1R5cGUuIFRoaXMgZG9lc24ndCBjaGFuZ2UgYW55CisJICBiZWhhdmlvdXIuIEFsc28gZml4IHNvbWUgdHlwb3MgYWxsIG92ZXIgdGhlIHBsYWNlIGFuZCByZW1vdmUgYW4gdW51c2VkLAorCSAgY29tbWVudGVkIGZ1bmN0aW9uIHRoYXQgaXMgbm90IG5lY2Vzc2FyeSBhcyBnX29iamVjdF9zZXQoKSBjb3VsZCBiZQorCSAgdXNlZCBpbnN0ZWFkLgorCSAgKiB0ZXN0cy9jaGVjay9saWJzL2NvbnRyb2xsZXIuYzogKEdTVF9TVEFSVF9URVNUKSwKKwkgIChnc3RfY29udHJvbGxlcl9zdWl0ZSk6CisJICBBZGQgdW5pdCB0ZXN0IGZvciBnc3RfY29udHJvbGxlcl9nZXRfdmFsdWVfYXJyYXkoKS4KKworMjAwNy0wNS0yMSAxNDo1MDo1MSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXIuYzogRGlzYWJsZSBwYXJ0IG9mIHRoZSBnc3RfYnVmZmVyX3RyeV9uZXdfYW5kX2FsbG9jIHRlc3QsIGJlY2F1c2UgaXQgY2FuIGhhcHBpbHkgc3VjY2VlZCBvbi4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXIuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgIERpc2FibGUgcGFydCBvZiB0aGUgZ3N0X2J1ZmZlcl90cnlfbmV3X2FuZF9hbGxvYyB0ZXN0LCBiZWNhdXNlCisJICBpdCBjYW4gaGFwcGlseSBzdWNjZWVkIG9uIDY0LWJpdCBzeXN0ZW1zIHdoZXJlIHRoZXJlJ3MgbW9yZSBhZGRyZXNzCisJICBzcGFjZSBhdmFpbGFibGUuCisKKzIwMDctMDUtMjEgMTI6MDU6NTYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOiBBZGQgdW5pdCB0ZXN0IGZvciB0aGUgaW1wcm92ZWQgY2FwcyBjaGVja2luZyBmcm9tIGJ1ZyAjNDIxNTQzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9wYWRfc3VpdGUpOgorCSAgQWRkIHVuaXQgdGVzdCBmb3IgdGhlIGltcHJvdmVkIGNhcHMgY2hlY2tpbmcgZnJvbSBidWcgIzQyMTU0My4KKworMjAwNy0wNS0yMSAxMjowNToxNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1zeW5jaHJvbmlzYXRpb24udHh0OiBTbWFsbCBhZGRpdGlvbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXN5bmNocm9uaXNhdGlvbi50eHQ6CisJICBTbWFsbCBhZGRpdGlvbi4KKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9xdWVyeSk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogKGFwcGx5X3NlZ21lbnQpOgorCSAgSW1wcm92ZSBkZWJ1Z2dpbmcuCisJICAqIGdzdC9nc3RtZXNzYWdlLmg6CisJICBJbXByb3ZlIGRvY3MuCisKKzIwMDctMDUtMjEgMTI6MDA6NDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RwYWQuYzogQWRkZWQgc2ltcGxlIHZlcnNpb24gb2YgaW1wcm92ZWQgY2FwcyBjaGVja2luZy4gSXQgd2FzIHByZXZpb3VzbHkgYXNzdW1lZCB0aGF0IGEgc2V0Y2FwcyBmdW5jdGlvbiB3b3VsZC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfZ2V0X2NhcHNfdW5sb2NrZWQpLAorCSAgKGdzdF9wYWRfYWNjZXB0Y2Fwc19kZWZhdWx0KSwgKGdzdF9wYWRfY29uZmlndXJlX3NpbmspLAorCSAgKGdzdF9wYWRfY29uZmlndXJlX3NyYyk6CisJICBBZGRlZCBzaW1wbGUgdmVyc2lvbiBvZiBpbXByb3ZlZCBjYXBzIGNoZWNraW5nLiBJdCB3YXMgcHJldmlvdXNseQorCSAgYXNzdW1lZCB0aGF0IGEgc2V0Y2FwcyBmdW5jdGlvbiB3b3VsZCBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIGNhcHMgYnV0CisJICBwZW9wbGUgcHJlZmVyIHVzIHRvIGNoZWNrIGNhcHMgYWdhaW5zdCB0aGUgdGVtcGxhdGUgYXV0b21hdGljYWxseS4KKwkgIEZpeGVzICM0MjE1NDMuCisKKzIwMDctMDUtMjEgMTE6Mjk6MjggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOiBGaXggbWFjcm8gZm9yIGxvY2tpbmcvdW5sb2NraW5nIHRoZSB0cmFuc2Zvcm0gbG9jay4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKKwkgIEZpeCBtYWNybyBmb3IgbG9ja2luZy91bmxvY2tpbmcgdGhlIHRyYW5zZm9ybSBsb2NrLgorCisyMDA3LTA1LTE5IDEzOjUzOjIzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBkb2NzL3BsdWdpbnMvdG1wbC8uY3ZzaWdub3JlOiBJZ25vcmUgbW9yZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL3BsdWdpbnMvdG1wbC8uY3ZzaWdub3JlOgorCSAgSWdub3JlIG1vcmUuCisKKzIwMDctMDUtMTggMTY6NTM6MTggKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogSGVsbG8sIEkgYW0gTXIgVGF5bWFucycgcGVyc29uYWwgZGVidWdnZXIuIFRvZGF5IEkgd2lsbCBpbnRyb2R1Y2UgYSBmaXggZm9yIHRoZSBzdWJ0bGUgYS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9sb29wKToKKwkgIEhlbGxvLCBJIGFtIE1yIFRheW1hbnMnIHBlcnNvbmFsIGRlYnVnZ2VyLiBUb2RheSBJIHdpbGwgaW50cm9kdWNlIGEgZml4CisJICBmb3IgdGhlIHN1YnRsZSBhcnQgb2Ygd2FybmluZyBhIHBvdGVudGlhbGx5IGJsb2NraW5nIHRocmVhZCB0aGF0IGl0CisJICBzaG91bGQgY2hlY2sgdGhlIHNvdXJjZSBwYWQgcmV0dXJuIHZhbHVlLCBhbmQgcmVsYXkgdGhlIGluZm9ybWF0aW9uCisJICB1cHN0cmVhbS4KKworMjAwNy0wNS0xOCAxMToyMDozMyArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiBSZWxlYXNlIHRoZSBxdWV1ZSBsb2NrICEKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfaGFuZGxlX3NpbmtfZXZlbnQpOgorCSAgUmVsZWFzZSB0aGUgcXVldWUgbG9jayAhCisKKzIwMDctMDUtMTcgMTc6NTU6NDggKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDogQWRkIHRoZSB0d28gbmV3IGNvbnRyb2xsZXIgZnVuY3Rpb25zIHRvIHRoZSBhcHByb3BpYXRlIHBsYWNlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSAgQWRkIHRoZSB0d28gbmV3IGNvbnRyb2xsZXIgZnVuY3Rpb25zIHRvIHRoZSBhcHByb3BpYXRlIHBsYWNlcy4KKworMjAwNy0wNS0xNyAxNzozNzo1OCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBsaWJzL2dzdC9jb250cm9sbGVyLzogQVBJOiBnc3RfY29udHJvbGxlcl9zdWdnZXN0X25leHRfc3luYygpLCBnc3Rfb2JqZWN0X3N1Z2dlc3RfbmV4dF9zeW5jKCkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmV2aWV3ZWQgYnk6IFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6CisJICAoZ3N0X2NvbnRyb2xsZXJfc3VnZ2VzdF9uZXh0X3N5bmMpLCAoZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMpLAorCSAgKF9nc3RfY29udHJvbGxlcl9nZXRfcHJvcGVydHkpLCAoX2dzdF9jb250cm9sbGVyX3NldF9wcm9wZXJ0eSksCisJICAoX2dzdF9jb250cm9sbGVyX2luaXQpLCAoX2dzdF9jb250cm9sbGVyX2NsYXNzX2luaXQpOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuaDoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RoZWxwZXIuYzogKGdzdF9vYmplY3Rfc3VnZ2VzdF9uZXh0X3N5bmMpLAorCSAgKGdzdF9vYmplY3RfZ2V0X2NvbnRyb2xfcmF0ZSksIChnc3Rfb2JqZWN0X3NldF9jb250cm9sX3JhdGUpOgorCSAgQVBJOiBnc3RfY29udHJvbGxlcl9zdWdnZXN0X25leHRfc3luYygpLCBnc3Rfb2JqZWN0X3N1Z2dlc3RfbmV4dF9zeW5jKCkKKwkgIEFkZCBBUEkgdGhhdCBwcm92aWRlcyBzeW5jIHN1Z2dlc3Rpb24gdGltZXN0YW1wcyBmb3IgZWxlbWVudHMgdGhhdAorCSAgY2FsbCBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzKCkgZnJvbSB3aGljaCB0aG9zZSBlbGVtZW50cyBjYW4gc3ViZGl2aWRlCisJICB0aGVpciBwcm9jZXNzaW5nIGxvb3AgdG8gZ2V0IHRoZSBiZXN0IHJlc3VsdHMgZm9yIHRoZSBjb250cm9sbGVkCisJICBwcm9wZXJ0aWVzLiBGb3Igbm93IGl0IGp1c3Qgc3VnZ2VzdHMgbGFzdF9zeW5jICsgY29udHJvbF9yYXRlIGFzCisJICBuZXcgdGltZXN0YW1wIGJ1dCB0aGlzIHdpbGwgYmUgaW1wcm92ZWQgaW4gdGhlIGZ1dHVyZS4KKwkgIFdoaWxlIGRvaW5nIHRoYXQgY2hhbmdlIHRoZSBjb250cm9sLXJhdGUgcHJvcGVydHkgdG8gYSBHc3RDbG9ja1RpbWUKKwkgIGZyb20gZ3VpbnQgYW5kIGNoYW5nZSBpdCdzIG1lYW5pbmcgZnJvbSBzYW1wbGVzIHRvIG5hbm9zZWNvbmRzIGFzCisJICB0aGUgR3N0Q29udHJvbGxlciBkb2Vzbid0IGtub3cgYW55dGhpbmcgYWJvdXQgc2FtcGxpbmcgcmF0ZS4gU3RyaWN0bHkKKwkgIHNwZWFraW5nIHRoaXMgYnJlYWtzIEFCSSBidXQgYXMgdGhlIGNvbnRyb2wtcmF0ZSBwcm9wZXJ0eSBkaWRuJ3QgZG8KKwkgIGFueXRoaW5nIGluIHRoZSBwYXN0IGFuZCBhcyBzdWNoIGNvdWxkbid0IGJlIHVzZWQgdGhpcyBzaG91bGQgYmUgbm8KKwkgIHByb2JsZW0uCisKKzIwMDctMDUtMTcgMTc6MTY6MDkgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgbGlicy9nc3QvY29udHJvbGxlci86IFNhdmUgbGFzdCBzeW5jZWQgdmFsdWUgZnJvbSB0aGUgbGlzdCB0byBjb250aW51ZSBzZWFyY2hpbmcgZnJvbSB0aGVyZSBpbiBmdXR1cmUgc3luY3MuIFRoaXMgc3BlLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJldmlld2VkIGJ5OiBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOiAoZ3N0X2NvbnRyb2xsZXJfdW5zZXQpLAorCSAgKGdzdF9jb250cm9sbGVyX3Vuc2V0X2FsbCk6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlcnByaXZhdGUuaDoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6CisJICAoZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfZmluZF9jb250cm9sX3BvaW50X25vZGUpOgorCSAgU2F2ZSBsYXN0IHN5bmNlZCB2YWx1ZSBmcm9tIHRoZSBsaXN0IHRvIGNvbnRpbnVlIHNlYXJjaGluZyBmcm9tIHRoZXJlCisJICBpbiBmdXR1cmUgc3luY3MuIFRoaXMgc3BlZWRzIGV2ZXJ5dGhpbmcgdXAgYSBiaXQuCisKKzIwMDctMDUtMTcgMTc6MDU6MzYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgbGlicy9nc3QvY29udHJvbGxlci86IEFkZCBhIG5ldyBwcml2YXRlIEdzdENvbnRyb2xQb2ludCBzdHJ1Y3Qgd2hpY2ggImluaGVyaXRzIiBmcm9tCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJldmlld2VkIGJ5OiBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOiAoZ3N0X2NvbnRyb2xfcG9pbnRfY29tcGFyZSksCisJICAoZ3N0X2NvbnRyb2xfcG9pbnRfZmluZCksIChnc3RfY29udHJvbGxlZF9wcm9wZXJ0eV9uZXcpLAorCSAgKGdzdF9jb250cm9sX3BvaW50X2ZyZWUpLCAoZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfZnJlZSksCisJICAoZ3N0X2NvbnRyb2xsZXJfc2V0KSwgKGdzdF9jb250cm9sbGVyX3NldF9mcm9tX2xpc3QpLAorCSAgKGdzdF9jb250cm9sbGVyX3Vuc2V0KSwgKGdzdF9jb250cm9sbGVyX3Vuc2V0X2FsbCksCisJICAoZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMpOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuaDoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVycHJpdmF0ZS5oOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzoKKwkgIChnc3RfY29udHJvbGxlZF9wcm9wZXJ0eV9maW5kX2NvbnRyb2xfcG9pbnRfbm9kZSksCisJICAoaW50ZXJwb2xhdGVfbm9uZV9nZXQpLCAoaW50ZXJwb2xhdGVfdHJpZ2dlcl9nZXQpOgorCSAgQWRkIGEgbmV3IHByaXZhdGUgR3N0Q29udHJvbFBvaW50IHN0cnVjdCB3aGljaCAiaW5oZXJpdHMiIGZyb20KKwkgIEdzdFRpbWVkVmFsdWUgdG8gYWxsb3cgZGlmZmVyZW50IGludGVycG9sYXRvcnMgdG8gc3RvcmUgaW50ZXJuYWwKKwkgIHZhbHVlcyBuZXh0IHRvIGVhY2ggY29udHJvbCBwb2ludC4gRnJvbSB0aGUgb3V0c2lkZSBldmVyeXRoaW5nIGlzCisJICBzdGlsbCBhIEdzdENvbnRyb2xQb2ludCBzbyB3ZSBkb24ndCBsb29zZSBiaW5hcnkgY29tcGF0aWJpbGl0eS4KKwkgIEFsc28gZml4dXAgYWxsIHRoZSBHVmFsdWUgaGFuZGxpbmcgdG8gbm90IGxlYWsgR1ZhbHVlcyBvciBsaXN0IG5vZGVzLgorCSAgKiB0ZXN0cy9jaGVjay9saWJzL2NvbnRyb2xsZXIuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgIEZyZWUgdGhlIGxpc3Qgbm9kZXMgYW5kIEdWYWx1ZXMgaW4gdGhlIGNvbnRyb2xsZXJfbWlzYyB0ZXN0LgorCisyMDA3LTA1LTE3IDExOjA1OjIyICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBnc3QvZ3N0c2VnbWVudC5jOiBTbWFsbCBkb2MgZml4LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RzZWdtZW50LmM6CisJICBTbWFsbCBkb2MgZml4LgorCisyMDA3LTA1LTE2IDE5OjM1OjQ2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0cGx1Z2luLmM6IElmIHdlIGZhaWwgdG8gbG9hZCBhIHBsdWdpbiBiZWNhdXNlIG9mIHVucmVzb2x2ZWQgc3ltYm9scyBvciBtaXNzaW5nIGxpYnJhcmllcyBhbmQgc3BldyBhIHdhcm5pbmcgdG8uLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGx1Z2luLmM6IChnc3RfcGx1Z2luX2xvYWRfZmlsZSk6CisJICBJZiB3ZSBmYWlsIHRvIGxvYWQgYSBwbHVnaW4gYmVjYXVzZSBvZiB1bnJlc29sdmVkIHN5bWJvbHMgb3IgbWlzc2luZworCSAgbGlicmFyaWVzIGFuZCBzcGV3IGEgd2FybmluZyB0byBzdGRlcnIsIHdlIG1heSBqdXN0IGFzIHdlbGwgbWVudGlvbgorCSAgd2hpY2ggcGx1Z2luIGl0IHdhcyB0aGF0IGZhaWxlZCB0byBsb2FkLgorCisyMDA3LTA1LTEzIDIwOjI4OjE0ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSAgZG9jcy9NYWtlZmlsZS5hbTogdGhlIGd0ay1kb2MgbWFrZWZpbGUgc25pcHBldCBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgY2FzZSB3aGVuIEVOQUJMRV9HVEtfRE9DIGlzIGZhbHNlLCBhbmQgaW5zdGFsbHMgLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9NYWtlZmlsZS5hbTogdGhlIGd0ay1kb2MgbWFrZWZpbGUgc25pcHBldCBjb3JyZWN0bHkKKwkgIGhhbmRsZXMgdGhlIGNhc2Ugd2hlbiBFTkFCTEVfR1RLX0RPQyBpcyBmYWxzZSwgYW5kIGluc3RhbGxzCisJICB0aGUgcHJlYnVpbHQgZG9jdW1lbnRhdGlvbi4gIFNvIGd0ay1kb2Mgc3ViZGlycyBhcmUKKwkgIHVuY29uZGl0aW9uYWxseSBlbmFibGVkLiAgRml4ZXM6ICMzNDkwOTkuCisKKzIwMDctMDUtMTMgMjA6MTE6MjcgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJICBnc3QvZ3N0dXRpbHMuaDogUmV3b3JkIHNvbWUgZG9jdW1lbnRhdGlvbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dXRpbHMuaDogUmV3b3JkIHNvbWUgZG9jdW1lbnRhdGlvbi4KKworMjAwNy0wNS0xMyAwMDoyMDozNSArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkgIGdzdC9nc3RwbHVnaW4uYzogZ3N0X3BsdWdpbl9yZWdpc3Rlcl9mdW5jKCkgZG9lc24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyB3aXRoIHRoZSBwYXNzZWQgIm1vZHVsZSIgcGFyYW1ldGVyLCBzbyByZW1vdi4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwbHVnaW4uYzogZ3N0X3BsdWdpbl9yZWdpc3Rlcl9mdW5jKCkgZG9lc24ndCBhY3R1YWxseQorCSAgZG8gYW55dGhpbmcgd2l0aCB0aGUgcGFzc2VkICJtb2R1bGUiIHBhcmFtZXRlciwgc28gcmVtb3ZlIGl0LgorCSAgQWxsb3dzIHJlbW92YWwgb2YgYWRkaXRpb25hbCB2ZXN0aWdhbCBjb2RlLgorCisyMDA3LTA1LTEzIDAwOjA5OjAwICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSAgZ3N0L2dzdHBsdWdpbi5jOiBVc2luZyBzaWdhY3Rpb24gc2hvdWxkIGRlcGVuZCBvbiBIQVZFX1NJR0FDVElPTiwgbm90IEhBVkVfV0lOMzIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBsdWdpbi5jOgorCSAgVXNpbmcgc2lnYWN0aW9uIHNob3VsZCBkZXBlbmQgb24gSEFWRV9TSUdBQ1RJT04sIG5vdCBIQVZFX1dJTjMyLgorCSAgU3dpdGNoIHRvIHVzaW5nIGdfc3RhdCgpIGJlY2F1c2UgaXQncyBtb3JlIHBvcnRhYmxlLgorCisyMDA3LTA1LTEyIDIzOjUzOjA4ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSAgZ3N0L2dzdC5jOiBBZGQgR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkcsIGluIG9yZGVyIHRvIGRpc2FibGUgb3B0aW9uIHBhcnNpbmcgZm9yIGVtYmVkZGVkIHN5c3RlbXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdC5jOgorCSAgQWRkIEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HLCBpbiBvcmRlciB0byBkaXNhYmxlIG9wdGlvbgorCSAgcGFyc2luZyBmb3IgZW1iZWRkZWQgc3lzdGVtcy4KKwkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6CisJICBBbGxvdyBnc3RfZWxlbWVudF9yZWdpc3RlcigpIHRvIGJlIGNhbGxlZCB3aXRoIHBsdWdpbj09TlVMTC4KKwkgIERpZCBub2JvZHkgbm90aWNlIHRoYXQgc3RhdGljIGVsZW1lbnRzIHdlcmUgYnJva2VuPworCisyMDA3LTA1LTEyIDE1OjM4OjAyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICB0b29scy9nc3QtbGF1bmNoLmM6IEdpdmUgbW9yZSBpbnRlcmVzdGluZyBpbmZvIHdoZW4gYnVmZmVyaW5nIHN0YXJ0cyBhbmQgc3RvcHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAoZXZlbnRfbG9vcCk6CisJICBHaXZlIG1vcmUgaW50ZXJlc3RpbmcgaW5mbyB3aGVuIGJ1ZmZlcmluZyBzdGFydHMgYW5kIHN0b3BzLgorCSAgRml4IGNhc2Ugd2hlcmUgYnVmZmVyaW5nIHN0YXJ0cyBidXQgd2UgZmFpbCB0byB1cGRhdGUgdGhlIGJ1ZmZlcmluZyBmbGFnCisJICBiZWNhdXNlIHRoZSB0YXJnZXQgc3RhdGUgaXMgbm90IFBMQVlJTkcuCisKKzIwMDctMDUtMTIgMTU6MzU6NDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuKjogUmVmYWN0b3IgYW4gY2xlYW51cCBxdWV1ZSBhIGJpdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfaW5pdCksCisJICAoZ3N0X3F1ZXVlX2ZpbmFsaXplKSwgKHVwZGF0ZV90aW1lX2xldmVsKSwgKGFwcGx5X3NlZ21lbnQpLAorCSAgKGFwcGx5X2J1ZmZlciksIChnc3RfcXVldWVfbG9ja2VkX2ZsdXNoKSwKKwkgIChnc3RfcXVldWVfbG9ja2VkX2VucXVldWUpLCAoZ3N0X3F1ZXVlX2xvY2tlZF9kZXF1ZXVlKSwKKwkgIChnc3RfcXVldWVfaGFuZGxlX3NpbmtfZXZlbnQpLCAoZ3N0X3F1ZXVlX2NoYWluKSwKKwkgIChnc3RfcXVldWVfcHVzaF9vbmUpLCAoZ3N0X3F1ZXVlX2xvb3ApOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmg6CisJICBSZWZhY3RvciBhbiBjbGVhbnVwIHF1ZXVlIGEgYml0LgorCSAgRG8gYmV0dGVyIHRpbWUgbGV2ZWwgY2FsY3VsYXRpb25zIHRoYXQgYWxzbyB3b3JrIHdoZW4gdGhlIHNyY3BhZCBpcyBub3QKKwkgIHlldCBydW5uaW5nLgorCSAgUmVtb3ZlIHNvbWUgdW5uZWVkZWQgZGVidWcgbGluZXMuCisJICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlLmM6IChHU1RfU1RBUlRfVEVTVCksIChxdWV1ZV9zdWl0ZSk6CisJICBBZGRlZCB0ZXN0Y2FzZSBmb3IgdGltZSBsZXZlbCBtZWFzdXJlbWVudC4KKwkgIFRyeSB0byBtYWtlIHNvbWUgc3R1ZmYgbW9yZSByYWNlZnJlZS4KKworMjAwNy0wNS0xMSAxNDo0NjoxMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdHVyaS5jOiBEb24ndCBsZWFrIHBsdWdpbiBmZWF0dXJlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R1cmkuYzogKGdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkpOgorCSAgRG9uJ3QgbGVhayBwbHVnaW4gZmVhdHVyZS4KKwkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICAqIHRlc3RzL2NoZWNrL2dzdC8uY3ZzaWdub3JlOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXJpLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RfdXJpX3N1aXRlKToKKwkgIEFkZCBicmFpbi1kZWFkIHVuaXQgdGVzdC4KKworMjAwNy0wNS0xMSAxNDoyODo1NSArMDAwMCAgSmVyb2VuIFdvdXRlcnMgPHdvdXRlcnNqQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHVyaS5jOiBUcmVhdCBwcm90b2NvbCBzdHJpbmdzIGluIGEgY2FzZS1pbnNlbnNpdGl2ZSB3YXkgKCM0Mzc1NjMpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogSmVyb2VuIFdvdXRlcnMgPHdvdXRlcnNqIGF0IGdtYWlsIGNvbT4KKwkgICogZ3N0L2dzdHVyaS5jOiAoZ3N0X3VyaV9nZXRfcHJvdG9jb2wpLCAoc2VhcmNoX2J5X2VudHJ5KToKKwkgIFRyZWF0IHByb3RvY29sIHN0cmluZ3MgaW4gYSBjYXNlLWluc2Vuc2l0aXZlIHdheSAoIzQzNzU2MykuCisKKzIwMDctMDUtMTEgMTA6NTY6NDggKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KKworCSAgZ3N0LzogRG9uJ3QgcHJpbnQgYSBnX3dhcm5pbmcgZm9yIGFueSBmYWlsdXJlIHRvIGxvYWQgYSBzaGFyZWQgb2JqZWN0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwbHVnaW4uYzogKGdzdF9wbHVnaW5fbG9hZF9maWxlKToKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6IChnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2xldmVsKToKKwkgIERvbid0IHByaW50IGEgZ193YXJuaW5nIGZvciBhbnkgZmFpbHVyZSB0byBsb2FkIGEgc2hhcmVkIG9iamVjdC4KKwkgIEluc3RlYWQsIHB1c2ggdGhpcyBkb3duIGludG8gZ3N0cGx1Z2luLmMsIGFuZCB3YXJuIF9vbmx5XyBpZiB3ZQorCSAgZmFpbGVkIHRvIG9wZW4gdGhlIG1vZHVsZSAoaS5lLiBmYWlsdXJlIHRvIGxpbmspLgorCSAgQXZvaWRzIHdhcm5pbmdzIG9uIG5vcm1hbCwgd29ya2luZywgbm9uLXBsdWdpbiAuc28gZmlsZXMuCisKKzIwMDctMDUtMTEgMDg6Mjk6MTAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdHBsdWdpbi5jIChnc3RfcGx1Z2luX2xvYWRfZmlsZSk6IGdzdC9nc3RyZWdpc3RyeS5jIChHU1RfQ0FUX0RFRkFVTFQsIGdzdF9yZWdpc3RyeV9sb29rdXBfZmVhdHVyZV9sb2NrZWQsIGdzdF9yLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBsdWdpbi5jIChnc3RfcGx1Z2luX2xvYWRfZmlsZSk6CisJICAqIGdzdC9nc3RyZWdpc3RyeS5jIChHU1RfQ0FUX0RFRkFVTFQsCisJICBnc3RfcmVnaXN0cnlfbG9va3VwX2ZlYXR1cmVfbG9ja2VkLCBnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2xldmVsKToKKwkgIFByaW50IGEgZ193YXJuaW5nIGlmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGVuIGxvYWRpbmcgYSBwbHVnaW5zIGR1cmluZworCSAgcmVnaXN0cnkgc2Nhbi4gVGhlIHNodWxkIGhlbHAgYmVnaW5uZXJzIHN0YXJ0aW5nIHdpdGggZ3N0LXBsdWdpbgorCSAgdGVtcGxhdGUuCisKKzIwMDctMDUtMTAgMTU6MjE6MjAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuKjogQmUgc21hcnRlciB3aGVuIGNhbGN1bGF0aW5nIHRoZSBjdXJyZW50IGFtb3VudCBvZiBkYXRhIGluIHRoZSBxdWV1ZSBieSBtZWFzdXJpbmcgdGhlIGRpZi4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9jbGFzc19pbml0KSwKKwkgICh1cGRhdGVfdGltZV9sZXZlbCksIChnc3RfcXVldWVfbG9ja2VkX2ZsdXNoKSwKKwkgIChnc3RfcXVldWVfaGFuZGxlX3NpbmtfZXZlbnQpLCAoZ3N0X3F1ZXVlX2NoYWluKSwKKwkgIChnc3RfcXVldWVfcHVzaF9vbmUpLCAoZ3N0X3F1ZXVlX2xvb3ApOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmg6CisJICBCZSBzbWFydGVyIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGN1cnJlbnQgYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIGJ5CisJICBtZWFzdXJpbmcgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzdGFydCBhbmQgZW5kIHRpbWVzdGFtcHMgKGluIHJ1bm5pbmcKKwkgIHRpbWUpIGluc2lkZSB0aGUgcXVldWUuIEZpeGVzICM0MzI4NzYuCisJICBBUEk6IEdzdFF1ZXVlOjpwdXNoaW5nIHRvIG5vdGlmeSBlbGVtZW50cyB0aGF0IHdlIGFyZSBwdXNoaW5nIGRhdGEgYWdhaW4KKwkgIHNpbmNlIHRoZSBydW5uaW5nIHNpZ25hbCBpcyByYXRoZXIgYnJva2VuIGZvciB0aGlzIHB1cnBvc2UuCisKKzIwMDctMDUtMTAgMTI6NDA6MTIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogQ2hhbmdlTG9nOgorCSogY29tbW9uOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jIChfZG9faW5pdCwgZ3N0X3F1ZXVlX3NpZ25hbHMsIGdzdF9xdWV1ZV9iYXNlX2luaXQsIGdzdF9xdWV1ZV9pbml0KTogdXNlIEdTVF9CT0lMRVJQTEFURQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYyAoX2RvX2luaXQsIGdzdF9xdWV1ZV9zaWduYWxzLAorCSAgZ3N0X3F1ZXVlX2Jhc2VfaW5pdCwgZ3N0X3F1ZXVlX2luaXQpOgorCSAgdXNlIEdTVF9CT0lMRVJQTEFURQorCisyMDA3LTA1LTA5IDIxOjA2OjA2ICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+CisKKwkgIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOiBBZGQgbmV3IGV4cG9ydGVkIGZ1bmN0aW9ucy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIEFkZCBuZXcgZXhwb3J0ZWQgZnVuY3Rpb25zLgorCSAgKiB3aW4zMi92czYvZ3JhbW1hci5kc3A6CisJICBVc2UgZ3JhbW1hciBwcmUtZ2VuZXJhdGVkIGZpbGVzLgorCisyMDA3LTA1LTA5IDE2OjMyOjA3ICswMDAwICBQZXRlciBLamVsbGVyc3RlZHQgPHBrakBheGlzLmNvbT4KKworCSAgZ3N0LzogTWFpbnRhaW4gQVBJIGFuZCBBQkkgd2hlbiAtLWRpc2FibGUtcGFyc2UgaXMgdXNlZC4gTm93IHRoYXQgd2UgaGF2ZSBhbiBhcHByb3ByaWF0ZSBlcnJvciBjb2RlLCB3ZSBjYW4ganVzdCByZXR1Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIEJhc2VkIG9uIHBhdGNoIGJ5OiBQZXRlciBLamVsbGVyc3RlZHQgIDxwa2ogYXQgYXhpcyBjb20+CisJICAqIGdzdC9NYWtlZmlsZS5hbToKKwkgICogZ3N0L2dzdHBhcnNlLmM6IChnc3RfcGFyc2VfbGF1bmNodiksIChnc3RfcGFyc2VfbGF1bmNoKToKKwkgICogZ3N0L2dzdHBhcnNlLmg6CisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uKToKKwkgICogZ3N0L2dzdHV0aWxzLmg6CisJICBNYWludGFpbiBBUEkgYW5kIEFCSSB3aGVuIC0tZGlzYWJsZS1wYXJzZSBpcyB1c2VkLiBOb3cgdGhhdAorCSAgd2UgaGF2ZSBhbiBhcHByb3ByaWF0ZSBlcnJvciBjb2RlLCB3ZSBjYW4ganVzdCByZXR1cm4gTlVMTCBhbmQgdGhlCisJICBhcHByb3ByaWF0ZSBlcnJvciB3aGVuIGdzdF9wYXJzZV9sYXVuY2goKSBpcyB1c2VkIGRlc3BpdGUgaXQgaGF2aW5nCisJICBiZWVuIGRpc2FibGVkICgjMzQyNTY0KS4KKwkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy8uY3ZzaWdub3JlOgorCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvcGFyc2UtZGlzYWJsZWQuYzoKKwkgIE1ha2Ugc3VyZSB0aGVzZSBmdW5jdGlvbnMgZXhpc3QgYW5kIHJldHVybiBOVUxMIHBsdXMgYSBHRXJyb3Igd2hlbgorCSAgLS1kaXNhYmxlLXBhcnNlIGlzIHVzZWQuCisKKzIwMDctMDUtMDkgMTA6MDE6MzUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHRlc3RzL2JlbmNobWFya3MvOiBTZXQgYSBnb29kIGV4YW1wbGUgYW5kIGRvbid0IGxlYWsgbWVzc2FnZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvYmVuY2htYXJrcy9jb21wbGV4aXR5LmM6IChtYWluKToKKwkgICogdGVzdHMvYmVuY2htYXJrcy9tYXNzLWVsZW1lbnRzLmM6IChtYWluKToKKwkgIFNldCBhIGdvb2QgZXhhbXBsZSBhbmQgZG9uJ3QgbGVhayBtZXNzYWdlcy4KKworMjAwNy0wNS0wNiAxODoyNzoyNSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBkb2NzLzogQ29ycmVjdCBmaXh4cmVmcyBvcHRpb25zLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgorCSAgKiBkb2NzL2xpYnMvTWFrZWZpbGUuYW06CisJICBDb3JyZWN0IGZpeHhyZWZzIG9wdGlvbnMuCisJICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKKwkgICogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLWRvY3Muc2dtbDoKKwkgICogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZS5hbToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmMgKGdzdF9jYXBzZmlsdGVyX2RldGFpbHMpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuaCAoX19HU1RfQ0FQU0ZJTFRFUl9IX18sCisJICBHU1RfVFlQRV9DQVBTRklMVEVSLCBHU1RfQ0FQU0ZJTFRFUiwgR1NUX0NBUFNGSUxURVJfQ0xBU1MsCisJICBHU1RfSVNfQ0FQU0ZJTFRFUiwgR1NUX0lTX0NBUFNGSUxURVJfQ0xBU1MsIEdzdENhcHNGaWx0ZXIsCisJICBHc3RDYXBzRmlsdGVyQ2xhc3MsIF9Hc3RDYXBzRmlsdGVyLCB0cmFucywgZmlsdGVyX2NhcHMsCisJICBfR3N0Q2Fwc0ZpbHRlckNsYXNzLCB0cmFuc19jbGFzcyk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYyAobmFtZSwgcmFuaywgdHlwZSwgX2VsZW1lbnRzKToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jCisJICAoZ3N0X2lkZW50aXR5X2NoZWNrX2ltcGVyZmVjdF90aW1lc3RhbXAsCisJICBnc3RfaWRlbnRpdHlfY2hlY2tfaW1wZXJmZWN0X29mZnNldCk6CisJICBEb2N1bWVudCBjYXBzZmlsdGVyIGFuZCBhZGQgZG9jLWJsdXJiIHRvIGlkZW50aXR5LgorCisyMDA3LTA1LTA0IDEyOjM3OjAxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBsaWJzL2dzdC9jb250cm9sbGVyLzogRG9uJ3QgY3Jhc2ggaWYgc29tZW9uZSB0cmllcyB0byBzZXQgYW4gaW50ZXJwb2xhdGlvbiBtb2RlIHRoYXQgaXMgaW52YWxpZCBvciB0aGF0IGlzbid0IHN1cHBvcnQuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKKwkgIChnc3RfY29udHJvbGxlZF9wcm9wZXJ0eV9zZXRfaW50ZXJwb2xhdGlvbl9tb2RlKToKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6CisJICBEb24ndCBjcmFzaCBpZiBzb21lb25lIHRyaWVzIHRvIHNldCBhbiBpbnRlcnBvbGF0aW9uIG1vZGUgdGhhdAorCSAgaXMgaW52YWxpZCBvciB0aGF0IGlzbid0IHN1cHBvcnRlZCB5ZXQuIEZpeGVzICM0MjIyOTUuCisJICAqIHRlc3RzL2NoZWNrL2xpYnMvY29udHJvbGxlci5jOiAoR1NUX1NUQVJUX1RFU1QpLAorCSAgKGdzdF9jb250cm9sbGVyX3N1aXRlKToKKwkgIEFkZCBhIHRlc3QgY2FzZSBmb3IgdGhlIGFib3ZlLgorCisyMDA3LTA1LTAzIDE2OjQ0OjM0ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogUHJvcGVybHkgc2V0IHRoZSBsYXN0X3N0b3AgcG9zaXRpb24gb24gR3N0U2VnbWVudC4gVGhpcyB3aWxsIG9ubHkgaGFwcGVuIGlmIHRoZXJlIGkuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV9jaGFpbik6CisJICBQcm9wZXJseSBzZXQgdGhlIGxhc3Rfc3RvcCBwb3NpdGlvbiBvbiBHc3RTZWdtZW50LiBUaGlzIHdpbGwgb25seSBoYXBwZW4KKwkgIGlmIHRoZXJlIGlzIGEgYnVmZmVyIHRvIHB1c2ggb3V0LgorCisyMDA3LTA1LTAzIDE0OjU4OjA1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogYWx3YXlzX2luX3BsYWNlIGRvZXMgbm90IG1lYW4gdGhhdCB0aGUgc2luayBhbmQgc291cmNlIGNhcHMgYXJlIHRoZSBzYW1lISBNYWtlIHN1cmUuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fYnVmZmVyX2FsbG9jKToKKwkgIGFsd2F5c19pbl9wbGFjZSBkb2VzIG5vdCBtZWFuIHRoYXQgdGhlIHNpbmsgYW5kIHNvdXJjZSBjYXBzIGFyZSB0aGUKKwkgIHNhbWUhIE1ha2Ugc3VyZSB3ZSBkb24ndCBibGluZGx5IHByb3h5IHRoZSBidWZmZXJfYWxsb2MgaW4gdGhpcyBjYXNlLgorCisyMDA3LTA1LTAzIDE0OjU0OjM0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBBUEk6IGdzdF9iYXNlX3NyY19xdWVyeV9sYXRlbmN5KCkuIEFkZGVkIG1ldGhvZCBzbyB0aGF0IHN1YmNsYXNzZXMgY2FuIGVhc2lseSBnZXQgdGhlIGxhdGVuY3kgdmFsdWVzIG9mIHRoZSBiYXNlIHNvdXIuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19xdWVyeV9sYXRlbmN5KSwKKwkgIChnc3RfYmFzZV9zcmNfZGVmYXVsdF9xdWVyeSksIChnc3RfYmFzZV9zcmNfZ2V0X3JhbmdlKToKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJICBBUEk6IGdzdF9iYXNlX3NyY19xdWVyeV9sYXRlbmN5KCkuIEFkZGVkIG1ldGhvZCBzbyB0aGF0IHN1YmNsYXNzZXMgY2FuCisJICBlYXNpbHkgZ2V0IHRoZSBsYXRlbmN5IHZhbHVlcyBvZiB0aGUgYmFzZSBzb3VyY2UgY2xhc3MuCisKKzIwMDctMDUtMDMgMDk6MjQ6NTggKzAwMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+CisKKwkgIHRvb2xzL2dzdC1pbnNwZWN0LmMgKHByaW50X2ltcGxlbWVudGF0aW9uX2luZm8pOiBSZW1vdmUgMC44IGNydWZ0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1pbnNwZWN0LmMgKHByaW50X2ltcGxlbWVudGF0aW9uX2luZm8pOgorCSAgUmVtb3ZlIDAuOCBjcnVmdC4KKworMjAwNy0wNS0wMiAxNzowOTozMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgdG9vbHMvOiBEb24ndCBjcmVhdGUgYSBjdXN0b21pc2VkIG1hbiBwYWdlIGJhc2VkIG9uIHRoZSBob3N0IGFyY2hpdGVjdHVyZSwgZGVzY3JpYmUgdGhlIGRlZmF1bHQgcmVnaXN0cnkgcGF0aCBnZW5lcmljLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdG9vbHMvTWFrZWZpbGUuYW06CisJICAqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKKwkgIERvbid0IGNyZWF0ZSBhIGN1c3RvbWlzZWQgbWFuIHBhZ2UgYmFzZWQgb24gdGhlIGhvc3QgYXJjaGl0ZWN0dXJlLAorCSAgZGVzY3JpYmUgdGhlIGRlZmF1bHQgcmVnaXN0cnkgcGF0aCBnZW5lcmljYWxseS4gVGhhdCB3YXkgdGhlIG1hbgorCSAgcGFnZSBpcyB0aGUgc2FtZSBmb3IgYWxsIGFyY2hpdGVjdHVyZXMgYW5kIHBhY2thZ2VycyBoYXZlIG9uZQorCSAgbXVsdGlsaWIgaXNzdWUgbGVzcyB0byBkZWFsIHdpdGguIEZpeGVzICM0MzQ5MjYuCisKKzIwMDctMDUtMDIgMTU6MTQ6MzIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RwYWQuYzogRml4IGRvY3VtZW50YXRpb24gYXMgc3BvdHRlZCBieSByZyBvbiBJUkMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBhZC5jOgorCSAgRml4IGRvY3VtZW50YXRpb24gYXMgc3BvdHRlZCBieSByZyBvbiBJUkMuCisKKzIwMDctMDQtMjkgMTc6MzY6MTggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdHV0aWxzLmM6IEltcHJvdmUgZG9jcyBmb3IgZ3N0X2VsZW1lbnRfe2xpbmssdW5saW5rfS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIEltcHJvdmUgZG9jcyBmb3IgZ3N0X2VsZW1lbnRfe2xpbmssdW5saW5rfS4KKworMjAwNy0wNC0yOSAxNDowNDoyNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGNvbW1vbjoKKwkqIGRvY3MvUkVBRE1FOgorCSAgdXBkYXRlIFJFQURNRQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB1cGRhdGUgUkVBRE1FCisKKzIwMDctMDQtMjggMTE6Mjk6NTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIFR5cG8gZml4ZXM7IG1pbm9yIGRvY3MgYWRkaXRpb24uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1ldmVudHMudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LW92ZXJ2aWV3LnR4dDoKKwkgICogZ3N0L2dzdGV2ZW50LmM6CisJICAqIGdzdC9nc3R1cmkuYzoKKwkgICogZ3N0L2dzdHVyaS5oOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICBUeXBvIGZpeGVzOyBtaW5vciBkb2NzIGFkZGl0aW9uLgorCisyMDA3LTA0LTI3IDA4OjMwOjU5ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIEFQSTogQWRkIGdzdF91cmlfcHJvdG9jb2xfaXNfc3VwcG9ydGVkKCksIHdoaWNoIGNoZWNrcyBpZiBhbiBzaW5rIG9yIHNyYyB0aGF0IHN1cHBvcnRzIGEgZ2l2ZW4gVVJJIHByb3RvY29sIGV4aXN0cy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBnc3QvZ3N0dXJpLmM6IChnZXRfZWxlbWVudF9mYWN0b3JpZXNfZnJvbV91cmlfcHJvdG9jb2wpLAorCSAgKGdzdF91cmlfcHJvdG9jb2xfaXNfc3VwcG9ydGVkKSwgKGdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkpOgorCSAgKiBnc3QvZ3N0dXJpLmg6CisJICBBUEk6IEFkZCBnc3RfdXJpX3Byb3RvY29sX2lzX3N1cHBvcnRlZCgpLCB3aGljaCBjaGVja3MgaWYgYW4gc2luaworCSAgb3Igc3JjIHRoYXQgc3VwcG9ydHMgYSBnaXZlbiBVUkkgcHJvdG9jb2wgZXhpc3RzLgorCisyMDA3LTA0LTI3IDA3OjM0OjEwICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvOiBTZXQgdGhlIGxvY2F0aW9uIHRvIE5VTEwgaWYgImZpbGU6Ly8iIGlzIHNldCBhcyBVUkkuIE90aGVyd2lzZSBzb21lIHJhbmRvbSBwcmV2aW91cyBVUkkgd291bGQgc3RpbC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzogKGdzdF9maWxlX3NpbmtfdXJpX3NldF91cmkpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogKGdzdF9maWxlX3NyY191cmlfc2V0X3VyaSk6CisJICBTZXQgdGhlIGxvY2F0aW9uIHRvIE5VTEwgaWYgImZpbGU6Ly8iIGlzIHNldCBhcyBVUkkuIE90aGVyd2lzZQorCSAgc29tZSByYW5kb20gcHJldmlvdXMgVVJJIHdvdWxkIHN0aWxsIGJlIHNldCBpZiAiZmlsZTovLyIgaXMKKwkgIHNldCBvbiBhbiBhbHJlYWR5IHVzZWQgZmlsZXNpbmsvZmlsZXNyYy4KKworMjAwNy0wNC0yNyAwNzoyNzozNiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBwbHVnaW5zL2VsZW1lbnRzLzogU3BlY2lhbCBjYXNlIHRoZSAiZmlsZTovLyIgVVJJIGFzIGFzIHRoaXMgaXMgdXNlZCBieSBzb21lIGFwcGxpY2F0aW9ucyB0byB0ZXN0IHdpdGggZ3N0X2VsZW1lbnRfbWEuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IChnc3RfZmlsZV9zaW5rX3VyaV9zZXRfdXJpKToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IChnc3RfZmlsZV9zcmNfdXJpX3NldF91cmkpOgorCSAgU3BlY2lhbCBjYXNlIHRoZSAiZmlsZTovLyIgVVJJIGFzIGFzIHRoaXMgaXMgdXNlZCBieSBzb21lCisJICBhcHBsaWNhdGlvbnMgdG8gdGVzdCB3aXRoIGdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkgaWYgdGhlcmUncworCSAgYW4gZWxlbWVudCB0aGF0IHN1cHBvcnRzIHRoZSBVUkkgcHJvdG9jb2wuCisJICBBbHNvIG1vdmUgdGhlIGdfcGF0aF9pc19hYnNvbHV0ZSgpIGNoZWNrIGZvciB0aGUgbG9jYXRpb24gcGFydAorCSAgb2YgdGhlIFVSSSB0byBhbHNvIGNoZWNrIHRoaXMgZm9yICJmaWxlOi8vbG9jYWxob3N0L2JsYSIgVVJJcy4KKworMjAwNy0wNC0yNiAxMDowMDo0OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgQVBJOiBhZGQgZ3N0X2J1ZmZlcl90cnlfbmV3X2FuZF9hbGxvYygpIHBsdXMgdW5pdCB0ZXN0ICgjNDMxOTQwKS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBnc3QvZ3N0YnVmZmVyLmM6IChnc3RfYnVmZmVyX3RyeV9uZXdfYW5kX2FsbG9jKToKKwkgICogZ3N0L2dzdGJ1ZmZlci5oOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6IChHU1RfU1RBUlRfVEVTVCksCisJICAoZ3N0X2J1ZmZlcl9zdWl0ZSk6CisJICBBUEk6IGFkZCBnc3RfYnVmZmVyX3RyeV9uZXdfYW5kX2FsbG9jKCkgcGx1cyB1bml0IHRlc3QgKCM0MzE5NDApLgorCisyMDA3LTA0LTI2IDA3OjMyOjA4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS4qOiBJbXBsZW1lbnQgbm8tbW1hcCBhbHRlcm5hdGl2ZSBmb3IgcmVnaXN0cnkgcmVhZGluZy4gRG8gY29kZSBjbGVhbnVwcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogKGdzdF9yZWdpc3RyeV9iaW5hcnlfd3JpdGVfY2FjaGUpLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfbG9hZF9wYWRfdGVtcGxhdGUpLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfbG9hZF9wbHVnaW4pLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfcmVhZF9jYWNoZSk6CisJICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5oOgorCSAgSW1wbGVtZW50IG5vLW1tYXAgYWx0ZXJuYXRpdmUgZm9yIHJlZ2lzdHJ5IHJlYWRpbmcuIERvIGNvZGUgY2xlYW51cHMuCisJICBBZGQgbW9yZSBjb21tZW50cyBhYm91dCBhdm9pZGluZyBzdHJkdXBzIGZvciBhbGwgdGV4dCBkYXRhLiBDb21tZW50cworCSAgd2VsY29tZS4KKworMjAwNy0wNC0yNSAxMjozMDoyNyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBDaGFuZ2VMb2c6CisJKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuaDoKKwkgIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5oIChHc3RCaW5hcnlQbHVnaW5FbGVtZW50LAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5oIChHc3RCaW5hcnlQbHVnaW5FbGVtZW50LAorCSAgR3N0QmluYXJ5UGx1Z2luRmVhdHVyZSwgX0dzdEJpbmFyeUVsZW1lbnRGYWN0b3J5LCBwbHVnaW5fZmVhdHVyZSwKKwkgIEdzdEJpbmFyeUVsZW1lbnRGYWN0b3J5LCBfR3N0QmluYXJ5VHlwZUZpbmRGYWN0b3J5LCBwbHVnaW5fZmVhdHVyZSk6CisJICBDb21tZW50IHN0cnVjdHMgYW5kIHJlZm9ybWF0IHRvIGZpeCB0aGUgYnVpbGQgKHRoYXQgc3R1ZmYgc2hvdWxkIGdvCisJICBpbnRvIGEgcHJpdi4gaGVhZGVyKS4KKworMjAwNy0wNC0yNSAxMTo0NDoyOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuKjogUmVmYWN0b3Igc28gdGhhdCB3ZSBjYW4gaW1wbGVtZW50IG11bHRpcGxlIGZlYXR1cmVzLiBBZGQgc3VwcG9ydCBmb3IKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogKGdzdF9yZWdpc3RyeV9iaW5hcnlfc2F2ZV9mZWF0dXJlKSwKKwkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2xvYWRfZmVhdHVyZSk6CisJICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5oOgorCSAgUmVmYWN0b3Igc28gdGhhdCB3ZSBjYW4gaW1wbGVtZW50IG11bHRpcGxlIGZlYXR1cmVzLiBBZGQgc3VwcG9ydCBmb3IKKwkgIFR5cGVGaW5kRmFjdG9yeSBmZWF0dXJlcy4KKworMjAwNy0wNC0yNCAwNjoxNDozNSArMDAwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxQZXRlci5LamVsbGVyc3RlZHRAYXhpcy5jb20+CisKKwkgIGNvbmZpZ3VyZS5hYzogRml4IEFNX0NPTkRJVElPTkFMKEdTVF9ESVNBQkxFX0dTVF9ERUJVRywuLi4pIGFuZCB1cGRhdGUgY29tbWVudC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IFBldGVyIEtqZWxsZXJzdGVkdCA8UGV0ZXIuS2plbGxlcnN0ZWR0QGF4aXMuY29tPgorCSAgKiBjb25maWd1cmUuYWM6CisJICBGaXggQU1fQ09ORElUSU9OQUwoR1NUX0RJU0FCTEVfR1NUX0RFQlVHLC4uLikgYW5kIHVwZGF0ZSBjb21tZW50LgorCisyMDA3LTA0LTIzIDA3OjMwOjM4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3RiaW4uYzogRml4IGJ1aWxkIHdpdGggLS1nc3QtZGlzYWJsZS1nc3QtZGVidWcKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2VsZW1lbnRfc2V0X3N0YXRlKSwKKwkgIChpdGVyYXRvcl9hY3RpdmF0ZV9mb2xkX3dpdGhfcmVzeW5jKSwgKGdzdF9iaW5fY29udGludWVfZnVuYyksCisJICAoYmluX2hhbmRsZV9hc3luY19kb25lKSwgKGdzdF9iaW5faGFuZGxlX21lc3NhZ2VfZnVuYyk6CisJICBGaXggYnVpbGQgd2l0aCAtLWdzdC1kaXNhYmxlLWdzdC1kZWJ1ZworCisyMDA3LTA0LTIxIDEzOjI3OjE2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogTWFrZSBzdXJlIHN0cmVhbWluZyBoYXMgZmluaXNoZWQgYmVmb3JlIGNhbGxpbmcgdGhlIDo6c3RvcCgpIHZmdW5jLCBzaW5jZSB0aGF0IHZmdW4uLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV9hY3RpdmF0ZSk6CisJICBNYWtlIHN1cmUgc3RyZWFtaW5nIGhhcyBmaW5pc2hlZCBiZWZvcmUgY2FsbGluZyB0aGUgOjpzdG9wKCkgdmZ1bmMsCisJICBzaW5jZSB0aGF0IHZmdW5jIG1pZ2h0IGNsZWFyIHN0YXRlIHdoaWNoIGlzIGJlaW5nIHVzZWQgaW4gdGhlCisJICBzdHJlYW1pbmcgdGhyZWFkLiBUaGlzIGZpeGVzIGEgcmFjZSB0aGF0IGNhdXNlZCBjcmFzaGVzIGluCisJICBhdWRpb3Jlc2FtcGxlIHdoZW4gc2h1dHRpbmcgZG93biBhIHBpcGVsaW5lICgjNDIwMTA2KS4KKworMjAwNy0wNC0yMCAwODo1Mzo0MSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBUaGF0IHdhcyBvbmUgYnl0ZSBtaXNzaW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICBUaGF0IHdhcyBvbmUgYnl0ZSBtaXNzaW5nLgorCisyMDA3LTA0LTIwIDA4OjM5OjM1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIDJuZCBhdHRlbXB0IHRvIGhhdmUgYSB4bWwtbGVzcyBidWlsZCBhcyBhIGpvaW5lZCBlZmZvcnQgb2YgIzQxMzEyMyBhbmQgIzQyMTQ4MC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9NYWtlZmlsZS5hbToKKwkgICogZ3N0L2dzdGNvbmZpZy5oLmluOgorCSAgKiBnc3QvZ3N0b2JqZWN0LmM6IChnc3Rfb2JqZWN0X2NsYXNzX2luaXQpLAorCSAgKGdzdF9zaWduYWxfb2JqZWN0X2NsYXNzX2luaXQpOgorCSAgKiBnc3QvZ3N0b2JqZWN0Lmg6CisJICAybmQgYXR0ZW1wdCB0byBoYXZlIGEgeG1sLWxlc3MgYnVpbGQgYXMgYSBqb2luZWQgZWZmb3J0IG9mICM0MTMxMjMKKwkgIGFuZCAjNDIxNDgwLgorCisyMDA3LTA0LTIwIDA4OjIxOjE5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvZGVzaWduL2RyYWZ0LXRhZ3JlYWRpbmcudHh0OiBBZGRlZCBvcGVuIGlzc3Vlcy90aG91Z2h0cyB0byBkcmFmdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9kcmFmdC10YWdyZWFkaW5nLnR4dDoKKwkgIEFkZGVkIG9wZW4gaXNzdWVzL3Rob3VnaHRzIHRvIGRyYWZ0LgorCisyMDA3LTA0LTE5IDE0OjMyOjQ5ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIGdzdC9wYXJzZS86IFVwZGF0ZSB0aGUgcHJlYnVpbGQgcGFyc2VyIHNvdXJjZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L3BhcnNlL2dyYW1tYXIudGFiLnByZS5jOgorCSAgKiBnc3QvcGFyc2UvZ3JhbW1hci50YWIucHJlLmg6CisJICAqIGdzdC9wYXJzZS9sZXguX2dzdF9wYXJzZV95eS5wcmUuYzoKKwkgIFVwZGF0ZSB0aGUgcHJlYnVpbGQgcGFyc2VyIHNvdXJjZXMuCisKKzIwMDctMDQtMTkgMTQ6MjM6MjUgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgZ3N0L3BhcnNlL01ha2VmaWxlLmFtOiBBbmQgbm93IGZpeCB0aGUgYnVpbGRpbmcgb2YgdGhlIGZsZXggc291cmNlcy4gTm93IGV2ZXJ5dGhpbmcgc2hvdWxkIHdvcmsgYXMgZXhwZWN0ZWQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L3BhcnNlL01ha2VmaWxlLmFtOgorCSAgQW5kIG5vdyBmaXggdGhlIGJ1aWxkaW5nIG9mIHRoZSBmbGV4IHNvdXJjZXMuIE5vdyBldmVyeXRoaW5nIHNob3VsZAorCSAgd29yayBhcyBleHBlY3RlZC4KKworMjAwNy0wNC0xOSAxNDowNjo1MiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBnc3QvcGFyc2UvTWFrZWZpbGUuYW06IE5vdyBob3BlZnVsbHkgZml4IHRoZSBidWlsZCBmYWlsdXJlcyBieSBzZXR0aW5nIHByb3BlciBydWxlIGRlcGVuZGVuY2llcyBhbmQgbW92aW5nIGluc3RlYWQgb2YuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvcGFyc2UvTWFrZWZpbGUuYW06CisJICBOb3cgaG9wZWZ1bGx5IGZpeCB0aGUgYnVpbGQgZmFpbHVyZXMgYnkgc2V0dGluZyBwcm9wZXIgcnVsZQorCSAgZGVwZW5kZW5jaWVzIGFuZCBtb3ZpbmcgaW5zdGVhZCBvZiBjb3B5aW5nLgorCisyMDA3LTA0LTE5IDEwOjQzOjE0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIHRlc3RzL2JlbmNobWFya3MvOiBUb3RhbCBsaWNlbnNpZmljYXRpb24uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvYmVuY2htYXJrcy9jb21wbGV4aXR5LmdudXBsb3Q6CisJICAqIHRlc3RzL2JlbmNobWFya3MvY29tcGxleGl0eS5zY206CisJICAqIHRlc3RzL2JlbmNobWFya3MvbWFzcy1lbGVtZW50cy5nbnVwbG90OgorCSAgKiB0ZXN0cy9iZW5jaG1hcmtzL21hc3MtZWxlbWVudHMuc2NtOgorCSAgVG90YWwgbGljZW5zaWZpY2F0aW9uLgorCisyMDA3LTA0LTE5IDEwOjIyOjI5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9wYXJzZS9NYWtlZmlsZS5hbTogRml4IHRoZSBidWlsZCBieSBjb3JyZWN0aW5nIHRoZSBydWxlIHRoYXQgZ2F2ZSB3cm9uZyBmaWxlcyB0byBmbGV4LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9wYXJzZS9NYWtlZmlsZS5hbToKKwkgIEZpeCB0aGUgYnVpbGQgYnkgY29ycmVjdGluZyB0aGUgcnVsZSB0aGF0IGdhdmUgd3JvbmcgZmlsZXMgdG8gZmxleC4KKworMjAwNy0wNC0xOSAwODo0MDozMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICB0ZXN0cy9iZW5jaG1hcmtzLzogQ2hhbmdlIGxpY2VuY2UgdG8gTEdQTCBhcyBncmFudGVkIGJ5IEJlbmphbWluIGFuZCBBbmR5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2JlbmNobWFya3MvY29tcGxleGl0eS5jOgorCSAgKiB0ZXN0cy9iZW5jaG1hcmtzL21hc3MtZWxlbWVudHMuYzoKKwkgIENoYW5nZSBsaWNlbmNlIHRvIExHUEwgYXMgZ3JhbnRlZCBieSBCZW5qYW1pbiBhbmQgQW5keS4KKworMjAwNy0wNC0xOSAwNjoxODoyNCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBnc3QvcGFyc2UvTWFrZWZpbGUuYW06IEFkZCBjb3JyZWN0IGdyYW1tYXIudGFiLmggZGVwZW5kZW5jeSBpZiBjb21waWxpbmcgd2l0aG91dCBuZXcgZW5vdWdoIGZsZXguIEZpeGVzICM0MzExNTAuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L3BhcnNlL01ha2VmaWxlLmFtOgorCSAgQWRkIGNvcnJlY3QgZ3JhbW1hci50YWIuaCBkZXBlbmRlbmN5IGlmIGNvbXBpbGluZyB3aXRob3V0IG5ldyBlbm91Z2gKKwkgIGZsZXguIEZpeGVzICM0MzExNTAuCisKKzIwMDctMDQtMTggMTM6MzQ6NDggKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgZ3N0L3BhcnNlL01ha2VmaWxlLmFtOiBGaXggdHlwbyBhbmQgdXNlIG91dGRhdGVkIHNvdXJjZXMgaWYgdGhlIGZsZXgvYmlzb24gc291cmNlcyBhcmUgbmV3ZXIgdGhhbiB0aGUgcHJlZ2VuZXJhdGVkIG9uLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L3BhcnNlL01ha2VmaWxlLmFtOgorCSAgRml4IHR5cG8gYW5kIHVzZSBvdXRkYXRlZCBzb3VyY2VzIGlmIHRoZSBmbGV4L2Jpc29uIHNvdXJjZXMgYXJlIG5ld2VyCisJICB0aGFuIHRoZSBwcmVnZW5lcmF0ZWQgb25lcyBidXQgZmxleCBpcyB0b28gb2xkLiBQcmludCBhIHdhcm5pbmcgaW4KKwkgIHRoYXQgY2FzZS4gVGhpcyBzaG91bGQgZml4IHRoZSBidWlsZCBvbiB0aGUgYnVpbGQgYm90LgorCisyMDA3LTA0LTE4IDEyOjM0OjUxICswMDAwICBNYXJjLUFuZHJlIEx1cmVhdSA8bWFyY2FuZHJlLmx1cmVhdUBnbWFpbC5jb20+CisKKwkgIGdzdC9wYXJzZS86IE1ha2UgdGhlIHBhcnNlciByZWVudHJhbnQgYW5kIHJlY3Vyc2l2ZWx5IGNhbGxhYmxlLiBUaGlzIHJlcXVpcmVzIGZsZXggPj0gMi41LjMxLCBmb3Igb2xkZXIgdmVyc2lvbnMgcHJlZy4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogTWFyYy1BbmRyZSBMdXJlYXUgPG1hcmNhbmRyZSBkb3QgbHVyZWF1IGF0IGdtYWlsIGRvdCBjb20+CisJICAqIGdzdC9wYXJzZS9NYWtlZmlsZS5hbToKKwkgICogZ3N0L3BhcnNlL2dyYW1tYXIueToKKwkgICogZ3N0L3BhcnNlL3BhcnNlLmw6CisJICBNYWtlIHRoZSBwYXJzZXIgcmVlbnRyYW50IGFuZCByZWN1cnNpdmVseSBjYWxsYWJsZS4gVGhpcyByZXF1aXJlcyBmbGV4CisJICA+PSAyLjUuMzEsIGZvciBvbGRlciB2ZXJzaW9ucyBwcmVnZW5lcmF0ZWQgc291cmNlcyBhcmUgdXNlZCBhcyB3ZQorCSAgY2FuJ3QgYnVtcCB0aGUgYnVpbGQgZGVwZW5kZW5jeS4gRmluYWxseSBmaXhlcyAjMzQ5MTgwLgorCSAgKiBnc3QvZ3N0cGFyc2UuYzogKGdzdF9wYXJzZV9sYXVuY2gpOgorCSAgRHJvcCB0aGUgSEFWRV9NVF9TQVZFX0ZMRVggI2lmZGVmcyBhcyB3ZSBhbHdheXMgdXNlIGEgbmV3IGVub3VnaCBmbGV4CisJICBub3cgYW55d2F5LgorCSAgKiBkb2NzL2dzdC9NYWtlZmlsZS5hbToKKwkgICogZG9jcy9nc3QvTWFrZWZpbGUuYW06CisJICAqIGdzdC9wYXJzZS9ncmFtbWFyLnRhYi5wcmUuYzogKF9fZ3N0X3BhcnNlX3N0cmR1cCksCisJICAoX19nc3RfcGFyc2Vfc3RyZnJlZSksIChfX2dzdF9wYXJzZV9saW5rX25ldyksCisJICAoX19nc3RfcGFyc2VfbGlua19mcmVlKSwgKF9fZ3N0X3BhcnNlX2NoYWluX25ldyksCisJICAoX19nc3RfcGFyc2VfY2hhaW5fZnJlZSksIChTRVRfRVJST1IpLCAoWVlQUklOVEYpLAorCSAgKGdzdF9wYXJzZV9lbGVtZW50X3NldCksIChnc3RfcGFyc2VfZnJlZV9saW5rKSwKKwkgIChnc3RfcGFyc2VfZm91bmRfcGFkKSwgKGdzdF9wYXJzZV9wZXJmb3JtX2RlbGF5ZWRfbGluayksCisJICAoZ3N0X3BhcnNlX3BlcmZvcm1fbGluayksICh5eXRuYW1lcnIpLCAoeXlzeW50YXhfZXJyb3IpLCAoeXllcnJvciksCisJICAoX2dzdF9wYXJzZV9sYXVuY2gpOgorCSAgKiBnc3QvcGFyc2UvZ3JhbW1hci50YWIucHJlLmg6CisJICAqIGdzdC9wYXJzZS9sZXguX2dzdF9wYXJzZV95eS5wcmUuYzogKFBSSU5UKSwgKHl5X2dldF9uZXh0X2J1ZmZlciksCisJICAoeXlfZ2V0X3ByZXZpb3VzX3N0YXRlKSwgKHl5X3RyeV9OVUxfdHJhbnMpLCAoaW5wdXQpLAorCSAgKF9nc3RfcGFyc2VfeXlyZXN0YXJ0KSwgKF9nc3RfcGFyc2VfeXlfc3dpdGNoX3RvX2J1ZmZlciksCisJICAoX2dzdF9wYXJzZV95eV9sb2FkX2J1ZmZlcl9zdGF0ZSksIChfZ3N0X3BhcnNlX3l5X2NyZWF0ZV9idWZmZXIpLAorCSAgKF9nc3RfcGFyc2VfeXlfZGVsZXRlX2J1ZmZlciksIChfZ3N0X3BhcnNlX3l5X2luaXRfYnVmZmVyKSwKKwkgIChfZ3N0X3BhcnNlX3l5X2ZsdXNoX2J1ZmZlciksIChfZ3N0X3BhcnNlX3l5cHVzaF9idWZmZXJfc3RhdGUpLAorCSAgKF9nc3RfcGFyc2VfeXlwb3BfYnVmZmVyX3N0YXRlKSwKKwkgIChfZ3N0X3BhcnNlX3l5ZW5zdXJlX2J1ZmZlcl9zdGFjayksIChfZ3N0X3BhcnNlX3l5X3NjYW5fYnVmZmVyKSwKKwkgIChfZ3N0X3BhcnNlX3l5X3NjYW5fc3RyaW5nKSwgKF9nc3RfcGFyc2VfeXlfc2Nhbl9ieXRlcyksCisJICAoeXlfZmF0YWxfZXJyb3IpLCAoX2dzdF9wYXJzZV95eWdldF9leHRyYSksCisJICAoX2dzdF9wYXJzZV95eWdldF9saW5lbm8pLCAoX2dzdF9wYXJzZV95eWdldF9jb2x1bW4pLAorCSAgKF9nc3RfcGFyc2VfeXlnZXRfaW4pLCAoX2dzdF9wYXJzZV95eWdldF9vdXQpLAorCSAgKF9nc3RfcGFyc2VfeXlnZXRfbGVuZyksIChfZ3N0X3BhcnNlX3l5Z2V0X3RleHQpLAorCSAgKF9nc3RfcGFyc2VfeXlzZXRfZXh0cmEpLCAoX2dzdF9wYXJzZV95eXNldF9saW5lbm8pLAorCSAgKF9nc3RfcGFyc2VfeXlzZXRfY29sdW1uKSwgKF9nc3RfcGFyc2VfeXlzZXRfaW4pLAorCSAgKF9nc3RfcGFyc2VfeXlzZXRfb3V0KSwgKF9nc3RfcGFyc2VfeXlnZXRfZGVidWcpLAorCSAgKF9nc3RfcGFyc2VfeXlzZXRfZGVidWcpLCAoX2dzdF9wYXJzZV95eWdldF9sdmFsKSwKKwkgIChfZ3N0X3BhcnNlX3l5c2V0X2x2YWwpLCAoX2dzdF9wYXJzZV95eWxleF9pbml0KSwKKwkgICh5eV9pbml0X2dsb2JhbHMpLCAoX2dzdF9wYXJzZV95eWxleF9kZXN0cm95KSwgKHl5X2ZsZXhfc3RybmNweSksCisJICAoeXlfZmxleF9zdHJsZW4pLCAoX2dzdF9wYXJzZV95eWFsbG9jKSwgKF9nc3RfcGFyc2VfeXlyZWFsbG9jKSwKKwkgIChfZ3N0X3BhcnNlX3l5ZnJlZSk6CisJICBJZiB0aGUgaW5zdGFsbGVkIGZsZXggdmVyc2lvbiBpcyB0b28gb2xkIHVzZSBwcmUtZ2VuZXJhdGVkIHBhcnNlcgorCSAgc291cmNlcy4gVGhlc2UgcHJlLWdlbmVyYXRlZCBwYXJzZXIgc291cmNlcyBhcmUgYWx3YXlzIHVwZGF0ZWQgd2hlbgorCSAgdGhlIGFjdHVhbCBmbGV4L2Jpc29uIHNvdXJjZXMgY2hhbmdlIGJ1dCByZXF1aXJlIGV2ZXJ5Ym9keSB3aG8gd2FudHMKKwkgIHRvIGNoYW5nZSBzb21ldGhpbmcgaW4gdGhlIHBhcnNlciB0byBoYXZlIGZsZXggPj0gMi41LjMxIGluc3RhbGxlZC4KKworMjAwNy0wNC0xOCAxMDo1ODozMSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBNYWtlIC0tZGlzYWJsZS1ubHMgdG8gd29yaworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNDoKKwkgICogZ3N0L2dzdC1pMThuLWxpYi5oOgorCSAgTWFrZSAtLWRpc2FibGUtbmxzIHRvIHdvcmsKKworMjAwNy0wNC0xNyAxNjoxMjo0NiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGNvbmZpZy5oLmluOiBSZXZlcnQgcHJldmlvdXMgY2hhbmdlIHRoYXQgYnJva2UgdGhlIGJ1aWxkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3Rjb25maWcuaC5pbjoKKwkgIFJldmVydCBwcmV2aW91cyBjaGFuZ2UgdGhhdCBicm9rZSB0aGUgYnVpbGQuCisKKzIwMDctMDQtMTcgMTQ6MzY6MzUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6CisJICBNQU5QQVRIIGZpeAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBNQU5QQVRIIGZpeAorCisyMDA3LTA0LTE3IDEwOjQ2OjQ2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIERyb3AgbGlieG1sMiBkZXBlbmRlbmN5IHdoZW4gYnVpbGRpbmcgd2l0aAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgICogZ3N0L01ha2VmaWxlLmFtOgorCSAgKiBnc3QvZ3N0Y29uZmlnLmguaW46CisJICBEcm9wIGxpYnhtbDIgZGVwZW5kZW5jeSB3aGVuIGJ1aWxkaW5nIHdpdGgKKwkgIC0tZW5hYmxlLWJpbmFyeS1yZWdpc3RyeSAtLWRpc2FibGUtbG9hZHNhdmUKKworMjAwNy0wNC0xNiAyMTo0MTo0NSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGdzdHJlYW1lci5kb2FwOgorCSAgZml4IHRoZSByZWxlYXNlIGRhdGUgaW4gdGhlIGRvYXAgZmlsZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaXggdGhlIHJlbGVhc2UgZGF0ZSBpbiB0aGUgZG9hcCBmaWxlCisKKzIwMDctMDQtMTYgMTk6NDU6MzEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS4qOiBSZW1vdmUgdW5uZWNlc3NhcnkgPHN5cy9tbWFuLmg+IGluY2x1ZGUgd2hpY2ggYnJva2UgdGhlIHdpbjMyIGJ1aWxkIHdpdGggTWluZ1c7IG1vdmUgaW5jbHVkZS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV93cml0ZV9jYWNoZSksCisJICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9yZWFkX2NhY2hlKToKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5Lmg6CisJICBSZW1vdmUgdW5uZWNlc3NhcnkgPHN5cy9tbWFuLmg+IGluY2x1ZGUgd2hpY2ggYnJva2UgdGhlIHdpbjMyIGJ1aWxkCisJICB3aXRoIE1pbmdXOyBtb3ZlIGluY2x1ZGVzIGZyb20gaGVhZGVyIGZpbGUgdG8gLmMgZmlsZSwgZXZlbiBpZiB0aGUKKwkgIGhlYWRlciBmaWxlIGlzbid0IGluc3RhbGxlZDsgdXNlIGdfc3RyZXJyb3IoKSB3aGVyZSBVVEYtOCBzdHJpbmdzCisJICBhcmUgZXhwZWN0ZWQsIHN1Y2ggYXMgaW4gR1NUX0RFQlVHIG1lc3NhZ2VzLgorCisyMDA3LTA0LTEzIDE1OjE1OjUwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDogUmVtb3ZlIGJvZ3VzIGFkZGl0aW9uIGZvciBBUEkgSSBkaWRuJ3QgZW5kIHVwIGtlZXBpbmcuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkgIFJlbW92ZSBib2d1cyBhZGRpdGlvbiBmb3IgQVBJIEkgZGlkbid0IGVuZCB1cCBrZWVwaW5nLgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkgIE1lbnRpb24gU2luY2U6IDAuMTAuMTMgaW4gdGhlIGRvY3VtZW50YXRpb24uCisJICBBZGQgdGhlIEFQSSBrZXl3b3JkIHRvIHRoZSBwcmV2aW91cyBDaGFuZ2VMb2cgZW50cnkuCisKKzIwMDctMDQtMTMgMTQ6MTg6NDQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBBbGxvdyBiYXNlc3JjIGRlcml2ZWQgY2xhc3NlcyB0byBleGVjdXRlIHNlZWtzIGluIG90aGVyIGZvcm1hdHMgYnkgcHJvdmlkaW5nIGEgcHJlcGFyZV9zZWVrX3NlZ21lbnQgdm1ldGhvZC4gU3ViLWNsYXMuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19jbGFzc19pbml0KSwKKwkgIChnc3RfYmFzZV9zcmNfZGVmYXVsdF9wcmVwYXJlX3NlZWtfc2VnbWVudCksCisJICAoZ3N0X2Jhc2Vfc3JjX3ByZXBhcmVfc2Vla19zZWdtZW50KSwgKGdzdF9iYXNlX3NyY19wZXJmb3JtX3NlZWspOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkgIEFsbG93IGJhc2VzcmMgZGVyaXZlZCBjbGFzc2VzIHRvIGV4ZWN1dGUgc2Vla3MgaW4gb3RoZXIgZm9ybWF0cworCSAgYnkgcHJvdmlkaW5nIGEgcHJlcGFyZV9zZWVrX3NlZ21lbnQgdm1ldGhvZC4gU3ViLWNsYXNzZXMgY2FuIGNob29zZQorCSAgdG8gcHJlcGFyZSB0aGUgR3N0U2VnbWVudCBpbiBhbnkgZm9ybWF0IHRoYXQgdGhlaXIgcGVyZm9ybV9zZWVrIG1ldGhvZAorCSAgd2lsbCBiZSBhYmxlIHRvIHVuZGVyc3RhbmQuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIHRoZQorCSAgb2xkIGJlaGF2aW91ciBvZiBhdHRlbXB0aW5nIHRvIGNvbnZlcnQgdGhlIHNlZWsgb2Zmc2V0cyB0byB0aGUKKwkgIGNvbmZpZ3VyZWQgbmF0aXZlIGZvcm1hdC4KKworMjAwNy0wNC0xMyAxMTo1MzowMCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGdzdC9nc3RlbGVtZW50LmM6IERvbid0IG91dHB1dCB0aGUgc2FtZSBkZWJ1ZyBzdGF0ZW1lbnQgdHdpY2UuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2dldF9zdGF0ZV9mdW5jKToKKwkgIERvbid0IG91dHB1dCB0aGUgc2FtZSBkZWJ1ZyBzdGF0ZW1lbnQgdHdpY2UuCisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOiAoZ3N0X2FkYXB0ZXJfdHJ5X3RvX21lcmdlX3VwKSwKKwkgIChnc3RfYWRhcHRlcl9wZWVrKSwgKGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyKToKKwkgIE9wdGltaXNlIHRoZSBjYXNlIHdoZXJlIHdlIGhhdmUgYnVmZmVycyBhdCB0aGUgaGVhZCBvZiB0aGUgcXVldWUgdGhhdAorCSAgY2FuIGJlIGpvaW5lZCBxdWlja2x5IChiZWNhdXNlIHRoZXkncmUgY29udGlndW91cyBzdWItYnVmZmVycykgYnkKKwkgIG1lcmdpbmcgdGhlbSB0b2dldGhlciByYXRoZXIgdGhhbiBjb3B5aW5nIGRhdGEgb3V0IGludG8gbmV3IG1lbW9yeS4KKwkgICogZ3N0L3BhcnNlL2dyYW1tYXIueToKKwkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOgorCSAgRml4IGEgbGVhayBpbiBhbiBlcnJvciBwYXRoIGZvciBwYXJzZV9sYXVuY2gsIGFuZCBhZGQgYSBjaGVjaworCSAgZm9yIGl0IHRvIHRoZSB0ZXN0c3VpdGUuCisKKzIwMDctMDQtMTMgMTE6MjA6NDggKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogRG9uJ3QgZGVhZGxvY2sgd2hlbiByZWxlYXNpbmcgYSBwYWQgLSBnc3RfcGFkX3NldF9hY3RpdmUgbWF5IHRyeSBhbmQgdGFrZSB0aGUgbXVsdGkuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogKGdzdF9tdWx0aV9xdWV1ZV9yZWxlYXNlX3BhZCk6CisJICBEb24ndCBkZWFkbG9jayB3aGVuIHJlbGVhc2luZyBhIHBhZCAtIGdzdF9wYWRfc2V0X2FjdGl2ZSBtYXkgdHJ5CisJICBhbmQgdGFrZSB0aGUgbXVsdGlxdWV1ZSBsb2NrIHRvby4KKworMjAwNy0wNC0xMiAxMjo1OTo0OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdGVycm9yLio6IEFQSTogYWRkIEdTVF9DT1JFX0VSUk9SX0RJU0FCTEVEICgjMzkyODA0KS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZXJyb3IuYzogKF9nc3RfY29yZV9lcnJvcnNfaW5pdCk6CisJICAqIGdzdC9nc3RlcnJvci5oOgorCSAgQVBJOiBhZGQgR1NUX0NPUkVfRVJST1JfRElTQUJMRUQgKCMzOTI4MDQpLgorCisyMDA3LTA0LTEyIDEwOjMyOjM4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOiBkb24ndCBnZXQgZW1wdHkgcGF0aHMgb24gdGhlIFBBVEggdmFyaWFibGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOgorCSAgZG9uJ3QgZ2V0IGVtcHR5IHBhdGhzIG9uIHRoZSBQQVRIIHZhcmlhYmxlcworCSAgKiBnc3QvZ3N0cGFkLmMgKGdzdF9wYWRfaXNfYWN0aXZlLCBnc3RfcGFkX3NldF9ibG9ja2VkX2FzeW5jKToKKwkgIERvbid0IGZvcm1hdCBmb3IgdGhlIHVuY29tbW9uIHRlcm1pbmFsIHdpZHRoIG9mIDg0IGNoYXJhY3RlcnMuCisKKzIwMDctMDQtMDkgMTE6NTk6MjggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICBiYWNrIHRvIGhlYWQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYmFjayB0byBoZWFkCisKKzIwMDctMDQtMDkgMDg6MTc6MTMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBkb24ndCBmb3JtYXQgZm9yIHRoZSB1bmNvbW1vbiBlZGl0b3Igd2lkdGggb2YgODQgY2hhcmFjdGVycworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBkb24ndCBmb3JtYXQgZm9yIHRoZSB1bmNvbW1vbiBlZGl0b3Igd2lkdGggb2YgODQgY2hhcmFjdGVycworCisyMDA3LTA0LTA2IDExOjQ4OjE3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0cGlwZWxpbmUuYzogT25seSB0cnkgdG8gc2VsZWN0IGEgZGlmZmVyZW50IHBpcGVsaW5lIGNsb2NrIHdoZW4gd2Ugd2VudCBiYWNrIHRvCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBpcGVsaW5lLmM6IChyZXNldF9zdHJlYW1fdGltZSksCisJICAoZ3N0X3BpcGVsaW5lX2NoYW5nZV9zdGF0ZSksIChnc3RfcGlwZWxpbmVfc2V0X25ld19zdHJlYW1fdGltZSk6CisJICBPbmx5IHRyeSB0byBzZWxlY3QgYSBkaWZmZXJlbnQgcGlwZWxpbmUgY2xvY2sgd2hlbiB3ZSB3ZW50IGJhY2sgdG8KKwkgIFBBVVNFRCBhbmQgbm90IHdoZW4gd2UgbWVyZWx5IGdvdCBmbHVzaGVkLgorCisyMDA3LTA0LTA1IDE2OjE3OjI0ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+CisKKwkgIHRvb2xzL2dzdC1sYXVuY2guMS5pbjogZnJhY3Rpb25zIGFyZSBiZXR0ZXIgc3VwcG9ydGVkIGluIGdzdHJlYW1lciB0aGFuIHJhY3Rpb25zLCBzbyBzdWdnZXN0IHVzaW5nIHRob3NlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKKwkgIGZyYWN0aW9ucyBhcmUgYmV0dGVyIHN1cHBvcnRlZCBpbiBnc3RyZWFtZXIgdGhhbiByYWN0aW9ucywgc28KKwkgIHN1Z2dlc3QgdXNpbmcgdGhvc2UuCisKKzIwMDctMDQtMDUgMTM6NDk6NDIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBwby9ubC5wbzoKKwkgIHVwZGF0ZSBkdXRjaAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB1cGRhdGUgZHV0Y2gKKworMjAwNy0wNC0wNSAxMzo0Njo1NCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIHBvLzogQWRkZWQgRGFuaXNoIHRyYW5zbGF0aW9uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBTdWJtaXR0ZWQgYnk6IE1vZ2VucyBKYWVnZXIgPG1vZ2Vuc0BqYWVnZXIudGY+CisJICAqIHBvL0xJTkdVQVM6CisJICAqIHBvL2RhLnBvOgorCSAgQWRkZWQgRGFuaXNoIHRyYW5zbGF0aW9uLgorCisyMDA3LTA0LTA1IDExOjE2OjA5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IEZpeCBsZWFrIGNhdXNlZCB3aGVuIHJlZnVzaW5nIG5ld3NlZ21lbnQgYWZ0ZXIgRU9TLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIChnc3RfYmFzZV9zaW5rX3F1ZXVlX29iamVjdF91bmxvY2tlZCksIChnc3RfYmFzZV9zaW5rX2V2ZW50KToKKwkgIEZpeCBsZWFrIGNhdXNlZCB3aGVuIHJlZnVzaW5nIG5ld3NlZ21lbnQgYWZ0ZXIgRU9TLgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6IChnc3RfZmFrZV9zaW5rX2NsYXNzX2luaXQpLAorCSAgKGdzdF9mYWtlX3NpbmtfaW5pdCksIChnc3RfZmFrZV9zaW5rX3NldF9wcm9wZXJ0eSksCisJICAoZ3N0X2Zha2Vfc2lua19nZXRfcHJvcGVydHkpLCAoZ3N0X2Zha2Vfc2lua19wcmVyb2xsKSwKKwkgIChnc3RfZmFrZV9zaW5rX3JlbmRlciksIChnc3RfZmFrZV9zaW5rX2NoYW5nZV9zdGF0ZSk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuaDoKKwkgIEFkZCBudW0tYnVmZmVycyBwcm9wZXJ0eSB0byBtYWtlIHRoZSBlbGVtZW50IGdlbmVyYXRlIEVPUyBhZnRlciBhCisJICBjb25maWd1cmFibGUgYW1vdW50IG9mIGJ1ZmZlcnMuCisJICBBUEk6IGZha2VzaW5rOjpudW0tYnVmZmVycyBwcm9wZXJ0eS4KKwkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvZmFrZXNpbmsuYzogKEdTVF9TVEFSVF9URVNUKSwKKwkgIChmYWtlc2lua19zdWl0ZSk6CisJICBGaXggR3N0QnVzIGxlYWsgaW4gdGVzdC4KKwkgIFRlc3QgZm9yIGZha2VzaW5rIG51bS1idWZmZXJzLgorCisyMDA3LTA0LTA1IDEwOjEwOjA4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IERvbid0IGFjY2VwdCBhbnl0aGluZyBhZnRlciBhbiBFT1MsIHJldHVybiBVTkVYUEVDVEVEIGluc3RlYWQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgKGdzdF9iYXNlX3NpbmtfcXVldWVfb2JqZWN0X3VubG9ja2VkKSwgKGdzdF9iYXNlX3NpbmtfZXZlbnQpLAorCSAgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKKwkgIERvbid0IGFjY2VwdCBhbnl0aGluZyBhZnRlciBhbiBFT1MsIHJldHVybiBVTkVYUEVDVEVEIGluc3RlYWQuCisJICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzaW5rLmM6IChHU1RfU1RBUlRfVEVTVCksCisJICAoZmFrZXNpbmtfc3VpdGUpOgorCSAgVW5pdCB0ZXN0IGZvciBuZXcgRU9TIGJlaGF2aW91ci4KKworMjAwNy0wNC0wNSAxMDowODoyMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGVsZW1lbnQuYzogTWFrZSBwYWR0ZW1wbGF0ZXMgYWxzbyB3b3JrIHdoZW4gdGhleSBkb24ndCBjb250YWluICVzIG9yICVkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQpOgorCSAgTWFrZSBwYWR0ZW1wbGF0ZXMgYWxzbyB3b3JrIHdoZW4gdGhleSBkb24ndCBjb250YWluICVzIG9yICVkLgorCisyMDA3LTA0LTA1IDEwOjA2OjIwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBJbXByb3ZlIF9hZGp1c3RfdW5sb2NrZWQoKSBzbyB0aGF0IGl0IG92ZXJmbG93cyBsZXNzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3RjbG9jay5jOiAoZ3N0X2Nsb2NrX2FkanVzdF91bmxvY2tlZCksCisJICAoZ3N0X2Nsb2NrX3VuYWRqdXN0X3VubG9ja2VkKSwgKGdzdF9jbG9ja19zZXRfY2FsaWJyYXRpb24pOgorCSAgKiBnc3QvZ3N0Y2xvY2suaDoKKwkgIEltcHJvdmUgX2FkanVzdF91bmxvY2tlZCgpIHNvIHRoYXQgaXQgb3ZlcmZsb3dzIGxlc3MuCisJICBBZGQgZ3N0X2Nsb2NrX3VuYWRqdXN0X3VubG9ja2VkIHRvIGNvbnZlcnQgZnJvbSBleHRlcm5hbCB0aW1lIHRvCisJICBpbnRlcm5hbCB0aW1lIGJhc2VkIG9uIGNhbGlicmF0aW9uLgorCSAgQWRkIHNvbWUgbW9yZSBkZWJ1Zy4KKwkgIEFQSTogR3N0Q2xvY2s6OmdzdF9jbG9ja191bmFkanVzdF91bmxvY2tlZCgpCisKKzIwMDctMDQtMDMgMTE6MDI6NDEgKzAwMDAgIFRvbW1pIE15w7Zow6RuZW4gPGV4dC10b21taS5teW9oYW5lbkBub2tpYS5jb20+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiBEZWFjdGl2YXRlIHBhZHMgYW5kIGZyZWUgR3N0U2luZ2xlUXVldWUgd2l0aCBnc3Rfc2luZ2xlX3F1ZXVlX2ZyZWUoKSB3aGVuIHJlbGVhc2luZy4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogVG9tbWkgTXnDtmjDpG5lbiA8ZXh0LXRvbW1pIGRvdCBteW9oYW5lbiBhdCBub2tpYSBkb3QgY29tPgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogKGdzdF9tdWx0aV9xdWV1ZV9yZWxlYXNlX3BhZCk6CisJICBEZWFjdGl2YXRlIHBhZHMgYW5kIGZyZWUgR3N0U2luZ2xlUXVldWUgd2l0aCBnc3Rfc2luZ2xlX3F1ZXVlX2ZyZWUoKQorCSAgd2hlbiByZWxlYXNpbmcgc2luayBwYWQuIEZpeGVzICM0MjU0MDAuCisKKzIwMDctMDQtMDIgMTQ6NDg6MTIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZG9jcy9yYW5kb20vZW5zb25pYy9keW5saW5rLnR4dDogTW9yZSB3b3JrIG9uIHByb3Bvc2FsIGZvciBuZXcgY29yZSBhcGkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9yYW5kb20vZW5zb25pYy9keW5saW5rLnR4dDoKKwkgIE1vcmUgd29yayBvbiBwcm9wb3NhbCBmb3IgbmV3IGNvcmUgYXBpLgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKKwkgIEFQSTogR1NUX0JBU0VfVFJBTlNGT1JNX0xPQ0svVU5MT0NLIGFkZGVkCisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgorCSAgKG9uX29iamVjdF9jb250cm9sbGVkX3Byb3BlcnR5X2NoYW5nZWQpLAorCSAgKGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzKSwKKwkgIChnc3RfY29udHJvbGxlcl9zZXRfaW50ZXJwb2xhdGlvbl9tb2RlKToKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmg6CisJICBMZXNzIHZlcmJvc2UgbG9nZ2luZyBhZGQgZG9jcyBmb3IgdW5pbXBsZW1lbnRlZCBwYXJ0cyBhbmQgY29ycmVjdGx5CisJICByZXR1cm4gd2hlbiB1c2luZyB1bmF2YWlsYWJsZSBwYXJ0cy4KKworMjAwNy0wMy0yOSAxNjowNDo0NSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGdzdC9nc3RjbG9jay5jOiBNb3ZlIGFsbCB0aGUgZGVidWcgdG8gdGhlIENMT0NLIGNhdGVnb3J5LCBhbmQgYXNzb2NpYXRlIGl0IHdpdGggdGhlIGNsb2NrIG9iamVjdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0Y2xvY2suYzogKGdzdF9jbG9ja19zZXRfbWFzdGVyKSwgKGRvX2xpbmVhcl9yZWdyZXNzaW9uKToKKwkgIE1vdmUgYWxsIHRoZSBkZWJ1ZyB0byB0aGUgQ0xPQ0sgY2F0ZWdvcnksIGFuZCBhc3NvY2lhdGUgaXQgd2l0aAorCSAgdGhlIGNsb2NrIG9iamVjdC4KKworMjAwNy0wMy0yOSAxNTo1MzowMyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOiBNYWtlIHRha2VfYnVmZmVyIGEgYml0IHF1aWNrZXIgYnkgcmVtb3ZpbmcgcmVkdW5kYW50IGNoZWNrcyBjYXVzZWQgYnkgY2FsbGluZyBnc3RfYWRhcHRlci4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOiAoZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIpOgorCSAgTWFrZSB0YWtlX2J1ZmZlciBhIGJpdCBxdWlja2VyIGJ5IHJlbW92aW5nIHJlZHVuZGFudCBjaGVja3MKKwkgIGNhdXNlZCBieSBjYWxsaW5nIGdzdF9hZGFwdGVyX3Rha2UuCisKKzIwMDctMDMtMjggMTg6Mzg6MTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiBEb24ndCBsZWFrIEdDb25kLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiAoZ3N0X3NpbmdsZV9xdWV1ZV9mcmVlKToKKwkgIERvbid0IGxlYWsgR0NvbmQuCisJICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uY3ZzaWdub3JlOgorCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tdWx0aXF1ZXVlLmM6IChzZXR1cF9tdWx0aXF1ZXVlKSwKKwkgIChHU1RfU1RBUlRfVEVTVCksIChtdWx0aXF1ZXVlX3N1aXRlKToKKwkgIEFkZCBzb21lIGRlYWQgc2ltcGxlIHVuaXQgdGVzdHMgZm9yIHRoZSAnbXVsdGlxdWV1ZScgZWxlbWVudAorCSAgKHNvbWUgYml0cyBkb24ndCB3b3JrIHlldCBhbmQgYXJlIGRpc2FibGVkIGZvciBub3cpLgorCisyMDA3LTAzLTI4IDE4OjI1OjE2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0ZWxlbWVudC5jOiBNYWtlIGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCgpIGNyZWF0ZSByZXF1ZXN0IHBhZHMgb25seSBmb3IgcmVxdWVzdCBwYWQgdGVtcGxhdGVzIGFuZCBub3QgZm9yLCAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkKSwKKwkgIChnc3RfZWxlbWVudF9jbGFzc19nZXRfcmVxdWVzdF9wYWRfdGVtcGxhdGUpOgorCSAgTWFrZSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQoKSBjcmVhdGUgcmVxdWVzdCBwYWRzIG9ubHkgZm9yCisJICByZXF1ZXN0IHBhZCB0ZW1wbGF0ZXMgYW5kIG5vdCBmb3IsIHNheSwgc29tZXRpbWVzIHBhZCB0ZW1wbGF0ZXMuCisKKzIwMDctMDMtMjggMTM6NDQ6NDEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZG9jcy9kZXNpZ24vZHJhZnQta2xhc3MudHh0OiBBZGQgZXhhbXBsZSB0aGF0IG5lZWRzIG1vcmUgdGhpbmtpbmcuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vZHJhZnQta2xhc3MudHh0OgorCSAgQWRkIGV4YW1wbGUgdGhhdCBuZWVkcyBtb3JlIHRoaW5raW5nLgorCSAgKiBkb2NzL2Rlc2lnbi9kcmFmdC1taXNzaW5nLXBsdWdpbnMudHh0OgorCSAgTW9yZSB0aG91Z2h0cyBhYm91dCB3dHJhcHBlciBwbHVnaW5zLgorCSAgKiBkb2NzL3JhbmRvbS9lbnNvbmljL2VtYmVkZGVkLnR4dDoKKwkgICogZG9jcy9yYW5kb20vZW5zb25pYy9wcm9maWxpbmcudHh0OgorCSAgTW9yZSBkZXNpZ24gd29yay4KKworMjAwNy0wMy0yNSAxNTozMzozNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IE9ubHkgcHVzaCB0aGUgc2VnbWVudCBldmVudHMgaW4gdGhlIFBMQVlJTkcgc3RhdGUgZm9yIGxpdmUgc291cmNlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19nZXRfcmFuZ2UpLAorCSAgKGdzdF9iYXNlX3NyY19sb29wKToKKwkgIE9ubHkgcHVzaCB0aGUgc2VnbWVudCBldmVudHMgaW4gdGhlIFBMQVlJTkcgc3RhdGUgZm9yIGxpdmUgc291cmNlcy4KKworMjAwNy0wMy0yMyAxNzo1MjoxOSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGdzdC9nc3RwaXBlbGluZS5jOiBNb2RpZnkgdGhlIGNsb2NrIGRpc3RyaWJ1dGlvbiBwYXRoIGluIFBBVVNFRC0+UExBWUlORyBzbyB0aGF0IHdlIG5ldmVyIGF0dGVtcHQgdG8gY2hvb3NlIGEgbmV3IGNsby4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX2NoYW5nZV9zdGF0ZSk6CisJICBNb2RpZnkgdGhlIGNsb2NrIGRpc3RyaWJ1dGlvbiBwYXRoIGluIFBBVVNFRC0+UExBWUlORyBzbyB0aGF0IHdlCisJICBuZXZlciBhdHRlbXB0IHRvIGNob29zZSBhIG5ldyBjbG9jayB1bmxlc3Mgd2UncmUgYWN0dWFsbHkgbGVhdmluZworCSAgdGhlIFBBVVNFRCBzdGF0ZSBmb3IgdGhlIGZpcnN0IHRpbWUuIFRoaXMgcHJldmVudHMgY2hvb3NpbmcgYQorCSAgZGlmZmVyZW50IGNsb2NrIHdoZW4gdGhlIHN0YXRlX2NoYW5nZSBnZXRzIGNhbGxlZCBmb3IgYSAybmQgdGltZSBkdWUKKwkgIHRvIHNvbWUgZWxlbWVudCBkb2luZyBhbiBhc3luYyBzdGF0ZSBjaGFuZ2UuCisKKzIwMDctMDMtMjIgMTg6Mjg6MDAgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSAgZ3N0L2dzdHBhZC5jOiBSZXZlcnQgbGFzdCBjb21taXQuIFRoaXMgbmVlZHMgc29tZSBtb3JlIHRob3VnaHRzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfc2V0X2NhcHMpLCAoZ3N0X3BhZF9jb25maWd1cmVfc2luayksCisJICAoZ3N0X3BhZF9jb25maWd1cmVfc3JjKSwgKGdzdF9wYWRfYWxsb2NfYnVmZmVyX2Z1bGwpLAorCSAgKGdzdF9wYWRfY2hhaW5fdW5jaGVja2VkKSwgKGdzdF9wYWRfcHVzaCk6CisJICBSZXZlcnQgbGFzdCBjb21taXQuIFRoaXMgbmVlZHMgc29tZSBtb3JlIHRob3VnaHRzLgorCisyMDA3LTAzLTIyIDE3OjEyOjIzICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIGdzdC9nc3RwYWQuYzogQ2hlY2sgaW4gc2V0X2NhcHMgaWYgdGhlIGNhcHMgYXJlIGNvbXBhdGlibGUgd2l0aCB0aGUgcGFkIGFuZCByZW1vdmUgdHdvIGZ1bmN0aW9ucyB0aGF0IGFyZSByZWR1bmRhbnQgbi4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfc2V0X2NhcHMpLCAoZ3N0X3BhZF9hbGxvY19idWZmZXJfZnVsbCksCisJICAoZ3N0X3BhZF9jaGFpbl91bmNoZWNrZWQpLCAoZ3N0X3BhZF9wdXNoKToKKwkgIENoZWNrIGluIHNldF9jYXBzIGlmIHRoZSBjYXBzIGFyZSBjb21wYXRpYmxlIHdpdGggdGhlIHBhZCBhbmQgcmVtb3ZlCisJICB0d28gZnVuY3Rpb25zIHRoYXQgYXJlIHJlZHVuZGFudCBub3cuIEZpeGVzICM0MjE1NDMuCisKKzIwMDctMDMtMjIgMTI6MzE6NTQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHRlc3RzL2NoZWNrL2dzdC9nc3RzeXN0ZW1jbG9jay5jOiBVbnJlZiBzb21lIG1vcmUgdG8gbWFrZSB2YWxncmluZCBoYXBweS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3lzdGVtY2xvY2suYzogKEdTVF9TVEFSVF9URVNUKSwKKwkgIChtaXhlZF90aHJlYWQpLCAobWl4ZWRfYXN5bmNfY2IpLCAoZ3N0X3N5c3RlbWNsb2NrX3N1aXRlKToKKwkgIFVucmVmIHNvbWUgbW9yZSB0byBtYWtlIHZhbGdyaW5kIGhhcHB5LgorCisyMDA3LTAzLTIyIDExOjU4OjA4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0c3lzdGVtY2xvY2suYzogRml4IGFub3lpbmcgcmVncmVzc2lvbiB0aGF0IHN1cnZpdmVkIGEgZmV3IHJlbGVhc2VzLiBXaGVuIGFkZGluZyBhbiBhc3luYyBlbnRyeSB3aGlsZSBibG9ja2luZyAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzogKGdzdF9zeXN0ZW1fY2xvY2tfaWRfd2FpdF9qaXR0ZXJfdW5sb2NrZWQpLAorCSAgKGdzdF9zeXN0ZW1fY2xvY2tfaWRfd2FpdF9qaXR0ZXIpLAorCSAgKGdzdF9zeXN0ZW1fY2xvY2tfaWRfd2FpdF9hc3luYyksIChnc3Rfc3lzdGVtX2Nsb2NrX2lkX3Vuc2NoZWR1bGUpOgorCSAgRml4IGFub3lpbmcgcmVncmVzc2lvbiB0aGF0IHN1cnZpdmVkIGEgZmV3IHJlbGVhc2VzLiBXaGVuIGFkZGluZyBhbgorCSAgYXN5bmMgZW50cnkgd2hpbGUgYmxvY2tpbmcgb24gYSBzeW5jIGVudHJ5LCB0aGUgc3luYyBlbnRyeSB3aWxsIHVuYmxvY2sKKwkgIGJ1dCBzdGlsbCBiZSBidXN5LCBzbyBpdCBzaG91bGQgY29udGludWUgdG8gd2FpdCBpbnN0ZWFkIG9mIHJldHVybmluZworCSAgX0JVU1kgdG8gdGhlIGFwcC4KKwkgIEFkZCBzb21lIGNvbW1lbnRzIGhlcmUgYW5kIHRoZXJlLgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3lzdGVtY2xvY2suYzogKG1peGVkX3RocmVhZCksCisJICAobWl4ZWRfYXN5bmNfY2IpLCAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3N5c3RlbWNsb2NrX3N1aXRlKToKKwkgIEFkZCB0ZXN0Y2FzZSBmb3IgdGhpcy4KKworMjAwNy0wMy0yMiAxMToxOTozMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IEhhbmRsZSBlcnJvcnMgZnJvbSB0aGUgY2xvY2sgc3luYyBiZXR0ZXIsIG9ubHkgVU5TQ0hFRFVMRUQgaW5kaWNhdGVzIGEKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19nZXRfcmFuZ2UpOgorCSAgSGFuZGxlIGVycm9ycyBmcm9tIHRoZSBjbG9jayBzeW5jIGJldHRlciwgb25seSBVTlNDSEVEVUxFRCBpbmRpY2F0ZXMgYQorCSAgV1JPTkdfU1RBVEUgYW5kIGNhbiBzaWxlbnRseSBwYXVzZSB0aGUgdGFzay4gQWxsIG90aGVyIGNhc2VzIHNob3VsZAorCSAgZXJyb3Igb3V0LgorCisyMDA3LTAzLTIyIDA4OjIzOjQxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0cGFkLmM6IEZpeCBwb3NzaWJsZSBkZWFkbG9jayBpZiBwYWQgZXZlbnRmdW5jIGlzIG5vdCBzcGVjaWZpZWQuICBGaXhlcyAjNDIxMTc3LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogPHN5cmphbGEgYXQgc2NpIGRvdCBmaT4KKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9hbGxvY19idWZmZXJfZnVsbCksIChnc3RfcGFkX3NlbmRfZXZlbnQpOgorCSAgRml4IHBvc3NpYmxlIGRlYWRsb2NrIGlmIHBhZCBldmVudGZ1bmMgaXMgbm90IHNwZWNpZmllZC4gIEZpeGVzICM0MjExNzcuCisJICBJbXByb3ZlIGRlYnVnZ2luZy4KKworMjAwNy0wMy0yMSAxODoxMzo0MCArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgorCisJICBkb2NzL3B3Zy9hZHZhbmNlZC10eXBlcy54bWw6IEZpeCBzb21lIGVycm9ycyBpbiB0aGUgdHlwZWZpbmRpbmcgZG9jcyBwb2ludGVkIG91dCBvbiBpcmMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9wd2cvYWR2YW5jZWQtdHlwZXMueG1sOgorCSAgRml4IHNvbWUgZXJyb3JzIGluIHRoZSB0eXBlZmluZGluZyBkb2NzIHBvaW50ZWQgb3V0IG9uIGlyYy4KKworMjAwNy0wMy0yMSAxNzo1MDo0NiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBDbGFyaWZ5IEZJWE1FIGNvbW1lbnQgaW4gdGhlIGZhY2Ugb2YgaGF2aW5nIGFkZGVkIHVubG9ja19zdG9wKCkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIENsYXJpZnkgRklYTUUgY29tbWVudCBpbiB0aGUgZmFjZSBvZiBoYXZpbmcgYWRkZWQgdW5sb2NrX3N0b3AoKQorCisyMDA3LTAzLTIxIDExOjUyOjA0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YmluLmM6IFByZXBhcmUgZm9yIHJlbGVhc2Ugd2hlcmUgd2Ugd2FybiBhZ2FpbnN0IHBvc3NpYmxlIGFwcCBicmVha2FnZSBpbiB0aGUgY2FzZSBvZiBsaXZlIHBpcGVsaW5lcyBhbG9uZyB3aXQuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2dldF90eXBlKSwgKGdzdF9iaW5fZWxlbWVudF9zZXRfc3RhdGUpOgorCSAgUHJlcGFyZSBmb3IgcmVsZWFzZSB3aGVyZSB3ZSB3YXJuIGFnYWluc3QgcG9zc2libGUgYXBwIGJyZWFrYWdlIGluIHRoZQorCSAgY2FzZSBvZiBsaXZlIHBpcGVsaW5lcyBhbG9uZyB3aXRoIGFuIGVudiB2YXIgdG8gZW5hYmxlL2Rpc2FibGUgbGl2ZQorCSAgcHJlcm9sbCBtb2RlIChHU1RfQ09NUEFUPVtuby1dbGl2ZS1wcmVyb2xsKS4KKworMjAwNy0wMy0yMCAxNDoyNToxNSArMDAwMCAgWmFoZWVyIEFiYmFzIE1lcmFsaSA8emFoZWVyYWJiYXNAbWVyYWxpLm9yZz4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jIChnc3RfaWRlbnRpdHlfY2hlY2tfaW1wZXJmZWN0X29mZnNldCk6IFNvIHdlIHNob3VsZCB1c2UgY29ycmVjdCBjb25zdGFudHMgZm9yIGNoZWNraW5nLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jIChnc3RfaWRlbnRpdHlfY2hlY2tfaW1wZXJmZWN0X29mZnNldCk6CisJICBTbyB3ZSBzaG91bGQgdXNlIGNvcnJlY3QgY29uc3RhbnRzIGZvciBjaGVja2luZyBmb3IgTm9uZSBvZmZzZXQuCisKKzIwMDctMDMtMjAgMTQ6MTc6NDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZGVzaWduL3BhcnQtYmxvY2sudHh0OiBNZW50aW9uIHRoZSBmYWN0IHRoYXQgdGhlIG5ld2x5IHN3aXRjaGVkIGVsZW1lbnQgc2hvdWxkIGJlIHNldCB0byBhdCBsZWFzdCBQQVVTRUQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1ibG9jay50eHQ6CisJICBNZW50aW9uIHRoZSBmYWN0IHRoYXQgdGhlIG5ld2x5IHN3aXRjaGVkIGVsZW1lbnQgc2hvdWxkIGJlIHNldCB0byBhdAorCSAgbGVhc3QgUEFVU0VELgorCisyMDA3LTAzLTIwIDEwOjIzOjI1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0LmM6IEZpeCBjb21waWxhdGlvbiB3aXRoIHJlZ2lzdHJ5IGRpc2FibGVkIGFzIHNwb3R0ZWQgYnkgU2F1ci4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0LmM6CisJICBGaXggY29tcGlsYXRpb24gd2l0aCByZWdpc3RyeSBkaXNhYmxlZCBhcyBzcG90dGVkIGJ5IFNhdXIuCisKKzIwMDctMDMtMjAgMDk6NDY6MTEgKzAwMDAgIE9saXZpZXIgQ3JldGUgPHRlc3RlckB0ZXN0ZXIuY2E+CisKKwkgIGdzdC9nc3RlbGVtZW50LmM6IExvb2sgYXQgdGhlIHBlbmRpbmcgc3RhdGUgdG9vIHdoZW4gc3luY2luZyB0aGUgZWxlbWVudCBzdGF0ZSB0byB0aGUgcGFyZW50LiBGaXhlcyAjNDIwMTMzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogT2xpdmllciBDcmV0ZSA8dGVzdGVyIGF0IHRlc3RlciBkb3QgY2E+CisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KToKKwkgIExvb2sgYXQgdGhlIHBlbmRpbmcgc3RhdGUgdG9vIHdoZW4gc3luY2luZyB0aGUgZWxlbWVudCBzdGF0ZSB0byB0aGUKKwkgIHBhcmVudC4gRml4ZXMgIzQyMDEzMy4KKworMjAwNy0wMy0xOSAxNTowMTo0MCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvOiBBZGQgOjp1bmxvY2tfc3RvcCB0byBiYXNlc3JjIGFuZCBiYXNlc2luay4gVGhpcyBhbGxvd3MgYW4gb3Bwb3J0dW5pdHkgZm9yIHN1Yi1jbGFzc2VzIHRvIGNvcnJlY3RseSBjbC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3Npbmtfc2V0X2ZsdXNoaW5nKSwKKwkgIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfcGVyZm9ybV9zZWVrKSwKKwkgIChnc3RfYmFzZV9zcmNfZGVmYXVsdF9ldmVudCksIChnc3RfYmFzZV9zcmNfdW5sb2NrX3N0b3ApLAorCSAgKGdzdF9iYXNlX3NyY19kZWFjdGl2YXRlKToKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJICBBZGQgOjp1bmxvY2tfc3RvcCB0byBiYXNlc3JjIGFuZCBiYXNlc2luay4gVGhpcyBhbGxvd3MgYW4gb3Bwb3J0dW5pdHkKKwkgIGZvciBzdWItY2xhc3NlcyB0byBjb3JyZWN0bHkgY2xlYXIgYW55IHN0YXRlIHRoZXkgc2V0IHRyeWluZyB0bworCSAgdW5sb2NrLCBzdWNoIGFzIGNsZWFyaW5nIG91dCB1bmxvY2sgY29tbWFuZHMgZnJvbSBhIGNvbW1hbmQgZmQuCisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6IChnc3RfZmRfc2lua19jbGFzc19pbml0KSwKKwkgIChnc3RfZmRfc2lua19yZW5kZXIpLCAoZ3N0X2ZkX3NpbmtfdW5sb2NrKSwKKwkgIChnc3RfZmRfc2lua191bmxvY2tfc3RvcCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzogKGdzdF9mZF9zcmNfY2xhc3NfaW5pdCksCisJICAoZ3N0X2ZkX3NyY19pbml0KSwgKGdzdF9mZF9zcmNfdW5sb2NrKSwgKGdzdF9mZF9zcmNfdW5sb2NrX3N0b3ApLAorCSAgKGdzdF9mZF9zcmNfY3JlYXRlKSwgKGdzdF9mZF9zcmNfZ2V0X3NpemUpLCAoZ3N0X2ZkX3NyY19kb19zZWVrKToKKwkgIEltcGxlbWVudCB1bmxvY2tfc3RvcCBpbiBmZHNyYyBhbmQgZmRzaW5rLgorCSAgSW1wbGVtZW50IHNlZWtpbmcgaW4gZmRzcmMgd2hlbiBhIHNlZWthYmxlIGZkIGlzIHBhc3NlZCwgYXMgaW4KKwkgIGdzdC1sYXVuY2gtMC4xMCBmZHNyYyAhIC4uLiAhIHh2aW1hZ2VzaW5rIDwgL3BhdGgvdG8vZmlsZQorCisyMDA3LTAzLTE5IDEyOjA3OjMyICswMDAwICBFdmFuIE5lbWVyc29uIDxldmFuQGNvZXVzLmRhc2guZ3JvdXAuY29tPgorCisJICBnc3QvZ3N0ZWxlbWVudC5jOiBGaXggcGFkLWFkZGVkIGFuZCBwYWQtcmVtb3ZlZCBzaWduYWwgc2lnbmF0dXJlcyBzbyB0aGF0IHRoZSBwYWQgdHlwZSBpcyBzdGF0ZWQgYXMgR1NUX1RZUEVfUEFEIGluc3QuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IEV2YW4gTmVtZXJzb24gPGV2YW4gYXQgY29ldXMgZGFzaCBncm91cCBkb3QgY29tPgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfY2xhc3NfaW5pdCk6CisJICBGaXggcGFkLWFkZGVkIGFuZCBwYWQtcmVtb3ZlZCBzaWduYWwgc2lnbmF0dXJlcyBzbyB0aGF0IHRoZSBwYWQgdHlwZSBpcworCSAgc3RhdGVkIGFzIEdTVF9UWVBFX1BBRCBpbnN0ZWFkIG9mIEdfVFlQRV9PQkpFQ1QuIEZpeGVzICM0MTk4NTEuCisKKzIwMDctMDMtMTkgMTA6NDc6NTYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IEFkZCBuZXcgZWxlbWVudCBmaWVsZCBhbmQgbWV0aG9kLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICBBZGQgbmV3IGVsZW1lbnQgZmllbGQgYW5kIG1ldGhvZC4KKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9jbGFzc19pbml0KSwgKGdzdF9iaW5faW5pdCksCisJICAoYmluX3JlbW92ZV9tZXNzYWdlcyksIChnc3RfYmluX2FkZF9mdW5jKSwgKGdzdF9iaW5fcmVtb3ZlX2Z1bmMpLAorCSAgKGdzdF9iaW5fcmVjYWxjX3N0YXRlKSwgKGdzdF9iaW5fZ2V0X3N0YXRlX2Z1bmMpLAorCSAgKGdzdF9iaW5fZWxlbWVudF9zZXRfc3RhdGUpLCAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGVfZnVuYyksCisJICAoZ3N0X2Jpbl9jb250aW51ZV9mdW5jKSwgKGJpbl9idXNfaGFuZGxlciksCisJICAoYmluX3B1c2hfc3RhdGVfY29udGludWUpLCAoYmluX2hhbmRsZV9hc3luY19zdGFydCksCisJICAoYmluX2hhbmRsZV9hc3luY19kb25lKSwgKGdzdF9iaW5faGFuZGxlX21lc3NhZ2VfZnVuYyk6CisJICBNYWtlIGFzeW5jIHN0YXRlIGNoYW5nZXMgYSBiaXQgc21hcnRlciBieSB1c2luZyBuZXcgQVNZTkNfU1RBUlQgYW5kCisJICBBU1lOQ19ET05FIG1lc3NhZ2VzLiBUaGlzIHJlZHVjZXMgdGhlIG51bWJlciBvZiB0aW1lcyB3ZSBydW4gdGhlIHN0YXRlCisJICByZWNhbGN1bGF0aW9uIHRocmVhZC4KKwkgIERvbid0IGNoYW5nZSBzdGF0ZSBvZiBlbGVtZW50IHdpdGggYSBwZW5kaW5nIEFTWU5DX1NUQVJUIG1lc3NhZ2UuCisJICBEZXByZWNhdGUgU1RBVEVfRElSVFkgbWVzc2FnZXMuCisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9pbml0KSwgKGdzdF9lbGVtZW50X3NlbmRfZXZlbnQpLAorCSAgKGdzdF9lbGVtZW50X2dldF9zdGF0ZV9mdW5jKSwgKGdzdF9lbGVtZW50X2NvbnRpbnVlX3N0YXRlKSwKKwkgIChnc3RfZWxlbWVudF9sb3N0X3N0YXRlKSwgKGdzdF9lbGVtZW50X3NldF9zdGF0ZV9mdW5jKSwKKwkgIChnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUpOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSAgS2VlcCB0aGUgc3RhdGUgdGhhdCB3YXMgbGFzdCBzZXQgYnkgdGhlIGFwcCBpbiBhIG5ldyBlbGVtZW50IGZpZWxkLgorCSAgRG9uJ3QgYWxsb3cgc3RhdGUgY2hhbmdlcyB3aGVuIGhhbmRsaW5nIGFuIGVsZW1lbnQgZXZlbnQuCisJICBQb3N0IEFTWU5DX1NUQVJUIGFuZCBBU1lOQ19ET05FIG1lc3NhZ2VzLgorCSAgQ2hhbmdlIGxvc3Rfc3RhdGUgc28gdGhhdCB3ZSBnbyB0byBQQVVTRUQgYW5kIHdhaXQgZm9yIHRoZSBwYXJlbnQgdG8gc2V0CisJICB1cyB0byBQTEFZSU5HIGFnYWluIChzbyBsYXRlbmN5IGNhbGN1bGF0aW9uIGNhbiBiZSBwZXJmb3JtZWQpCisJICBFeHBvcnQgZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlKCkgbWV0aG9kIHNvIHRoYXQgc3ViY2xhc3NlcyBjYW4gdXNlIGl0LgorCSAgQVBJOiBnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUoKQorCSAgQVBJOiBHU1RfU1RBVEVfVEFSR0VUCisJICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX2NsYXNzX2luaXQpLAorCSAgKHJlc2V0X3N0cmVhbV90aW1lKSwgKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpLAorCSAgKGdzdF9waXBlbGluZV9oYW5kbGVfbWVzc2FnZSksIChnc3RfcGlwZWxpbmVfc2V0X25ld19zdHJlYW1fdGltZSk6CisJICBVc2luZyB0aGUgbmV3IEFTWU5DX1NUQVJUIG1lc3NhZ2Ugd2UgY2FuIHJlc2V0IHRoZSBiYXNlX3RpbWUgd2hlbgorCSAgbmVlZGVkLiBUaGlzIGNhbiB0aGVuIGJlIHVzZWQgdG8gaW1wbGVtZW50IGJhc2VfdGltZSByZWRpc3RyaWJ1dGlvbiBpbgorCSAgZmx1c2hpbmcgc2Vla3Mgc28gdGhhdCB3ZSBjYW4gcmVtb3ZlIHRoZSBleHBsaWNpdCBzZWVrIGhhbmRsaW5nLgorCSAgUGVyZm9ybSBsYXRlbmN5IHF1ZXJ5IGFuZCBjb25maWd1cmF0aW9uIHdoZW4gZ29pbmcgdG8gUExBWUlORy4KKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19jb21taXRfc3RhdGUpLAorCSAgKGdzdF9iYXNlX3NpbmtfcXVlcnkpLCAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgorCSAgUG9zdCBuZXcgQVNZTkNfU1RBUlQvQVNZTkNfRE9ORSBtZXNzYWdlcy4KKwkgICogdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgRml4IHRlc3QgYmVjYXVzZSB0aGUgYmluIHdpbGwgbm90IHNldCB0aGUgYXN5bmMgZWxlbWVudCB0byBQTEFZSU5HIHJpZ2h0CisJICBhd2F5LgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6IChwb3BfYXN5bmNfZG9uZSksIChHU1RfU1RBUlRfVEVTVCk6CisJICBNYWtlIHRoZSBtZXNzYWdlIGNoZWNrIGEgbGl0dGxlIHN0cm9uZ2VyLgorCSAgSGFuZGxlIEFTWU5DIG1lc3NhZ2VzLgorCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvY2xlYW51cC5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgRXhwZWN0IEFTWU5DX0RPTkUgbWVzc2FnZXMuCisKKzIwMDctMDMtMTkgMDk6NTU6MDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIEFkZCBBU1lOQ19TVEFSVCBhbmQgQVNZTkNfRE9ORSBtZXNzYWdlcyB0byBwcmVwYXJlIGZvciBsYXRlbmN5IHN1cHBvcnQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKGdzdF9tZXNzYWdlX25ld19hc3luY19zdGFydCksCisJICAoZ3N0X21lc3NhZ2VfbmV3X2FzeW5jX2RvbmUpLCAoZ3N0X21lc3NhZ2VfcGFyc2VfaW5mbyksCisJICAoZ3N0X21lc3NhZ2VfcGFyc2VfYXN5bmNfc3RhcnQpOgorCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgorCSAgQWRkIEFTWU5DX1NUQVJUIGFuZCBBU1lOQ19ET05FIG1lc3NhZ2VzIHRvIHByZXBhcmUgZm9yIGxhdGVuY3kKKwkgIHN1cHBvcnQuCisKKzIwMDctMDMtMTUgMjI6MzM6MTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBkb2NzL2Rlc2lnbi9wYXJ0LXN5bmNocm9uaXNhdGlvbi50eHQ6CisJICB0eXBvcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB0eXBvcworCisyMDA3LTAzLTE1IDEyOjM3OjUwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICB0b29scy9nc3QtaW5zcGVjdC5jOiBOb3cgdGhhdCB3ZSBkb24ndCBjaGVjayBmb3IgdGhlICdDb2RlYycga2V5d29yZCBhbnkgbG9uZ2VyIGluIHRoZSBrbGFzcywgd2Ugc2hvdWxkbid0IHNwZXcgYSB3YXIuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOgorCSAgKHByaW50X3BsdWdpbl9hdXRvbWF0aWNfaW5zdGFsbF9pbmZvX2NvZGVjcyk6CisJICBOb3cgdGhhdCB3ZSBkb24ndCBjaGVjayBmb3IgdGhlICdDb2RlYycga2V5d29yZCBhbnkgbG9uZ2VyIGluIHRoZQorCSAga2xhc3MsIHdlIHNob3VsZG4ndCBzcGV3IGEgd2FybmluZyBpZiB0aGUga2xhc3MgaXNuJ3QgYSBkZWNvZGVyIG9yCisJICBlbmNvZGVyIChzaW5jZSBpdCBtaWdodCBiZSBhIFNvdXJjZS9OZXR3b3JrLCBmb3IgZXhhbXBsZSkuCisKKzIwMDctMDMtMTQgMTc6MjQ6MTggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHRvb2xzL2dzdC1pbnNwZWN0LmM6IERvbid0IHJlcXVpcmUgZGVjb2Rlci9kZW11eGVyL2RlcGF5bG9hZGVyIGVsZW1lbnRzIG9yIGVuY29kZXIvbXV4ZXIvcGF5bGFkZXIgZWxlbWVudHMgdG8gaGF2ZSAnQy4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1pbnNwZWN0LmM6CisJICAocHJpbnRfcGx1Z2luX2F1dG9tYXRpY19pbnN0YWxsX2luZm9fY29kZWNzKToKKwkgIERvbid0IHJlcXVpcmUgZGVjb2Rlci9kZW11eGVyL2RlcGF5bG9hZGVyIGVsZW1lbnRzIG9yCisJICBlbmNvZGVyL211eGVyL3BheWxhZGVyIGVsZW1lbnRzIHRvIGhhdmUgJ0NvZGVjJyBhcyBwYXJ0IG9mIHRoZWlyCisJICBmYWN0b3J5IGNsYXNzIHN0cmluZyB3aGVuIGludHJvc3BlY3RpbmcgYSBwbHVnaW4ncyBjYXBhYmlsaXRpZXMuCisJICBkcmFmdC1rbGFzcy50eHQgbWVudGlvbnMgdGhhdCBpdCBtaWdodCBiZSByZW1vdmVkIGluIGZ1dHVyZSwgYW5kCisJICBmbHVtcDNkZWMgZG9lc24ndCBoYXZlIGl0IGFzIHBhcnQgb2YgaXRzIGNsYXNzIHN0cmluZywgc28gY2hhbmNlcworCSAgYXJlIG90aGVycyBtaWdodCBhbHNvIG5vdCBoYXZlIGl0LgorCisyMDA3LTAzLTE0IDE1OjQyOjAxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZG9jcy9yYW5kb20vaTE4bjoKKwkgIHVwZGF0ZSBpMThuIGRvYworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB1cGRhdGUgaTE4biBkb2MKKworMjAwNy0wMy0xNCAxNToxNzowOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkgIHJlZm9ybWF0CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJlZm9ybWF0CisKKzIwMDctMDMtMTQgMTU6MTU6NDUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBwby86IFVwZGF0ZSB0cmFuc2xhdGlvbnMgZnJvbSB0cmFuc2xhdGlvbiBwcm9qZWN0CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcG8vYWYucG86CisJICAqIHBvL2F6LnBvOgorCSAgKiBwby9iZy5wbzoKKwkgICogcG8vY2EucG86CisJICAqIHBvL2NzLnBvOgorCSAgKiBwby9kZS5wbzoKKwkgICogcG8vZW5fR0IucG86CisJICAqIHBvL2ZyLnBvOgorCSAgKiBwby9pdC5wbzoKKwkgICogcG8vbmIucG86CisJICAqIHBvL25sLnBvOgorCSAgKiBwby9ydS5wbzoKKwkgICogcG8vc3EucG86CisJICAqIHBvL3NyLnBvOgorCSAgKiBwby9zdi5wbzoKKwkgICogcG8vdHIucG86CisJICAqIHBvL3VrLnBvOgorCSAgKiBwby92aS5wbzoKKwkgICogcG8vemhfQ04ucG86CisJICAqIHBvL3poX1RXLnBvOgorCSAgVXBkYXRlIHRyYW5zbGF0aW9ucyBmcm9tIHRyYW5zbGF0aW9uIHByb2plY3QKKworMjAwNy0wMy0xNCAxMzo0MDoyOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0Y2hpbGRwcm94eS5jOiBJbnZlcnQgcHJlY29uZGl0aW9uIGNoZWNrIHRvIGJlIGFsaWtlIHRoZSBvbmVzIGluIHRoZSBtaW1pY2VkIGdvYmplY3QgYXBpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RjaGlsZHByb3h5LmM6IChnc3RfY2hpbGRfcHJveHlfZ2V0X3Byb3BlcnR5KSwKKwkgIChnc3RfY2hpbGRfcHJveHlfc2V0X3Byb3BlcnR5KToKKwkgIEludmVydCBwcmVjb25kaXRpb24gY2hlY2sgdG8gYmUgYWxpa2UgdGhlIG9uZXMgaW4gdGhlIG1pbWljZWQgZ29iamVjdAorCSAgYXBpLgorCisyMDA3LTAzLTE0IDExOjIxOjQ4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgZml4IG1pc2xlYWRpbmcgbG9nIHN0YXRlbWVudAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaXggbWlzbGVhZGluZyBsb2cgc3RhdGVtZW50CisKKzIwMDctMDMtMTMgMTQ6NTM6MjEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZG9jcy86IERvIHNvbWUgQXJjaGl0ZWN0IHdvcmsuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vZHJhZnQtdGFncmVhZGluZy50eHQ6CisJICAqIGRvY3MvcmFuZG9tL2Vuc29uaWMvYXVkaW9iYXNlY2xhc3Nlcy50eHQ6CisJICBEbyBzb21lIEFyY2hpdGVjdCB3b3JrLgorCSAgKiBnc3QvZ3N0b2JqZWN0LmM6IChnc3Rfb2JqZWN0X3NldF9uYW1lKToKKwkgIEFkZCBhIFdBUk5JTkcuCisJICAqIGdzdC9nc3RwYWQuYzoKKwkgIEFkZCBkb2NzIHRoYXQgcG9pbnQgZnJvbSBnc3RfcGFkX2dldF9yYW5nZSB0byBnc3RfcGFkX3B1bGxfcmFuZ2UKKworMjAwNy0wMy0xMiAxNToyNzowNSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGdzdC9nc3RzeXN0ZW1jbG9jay5jOiBEZWZlciBzdGFydGluZyB0aGUgYXN5bmMgc3lzdGVtIGNsb2NrIHRocmVhZCB1bnRpbCB0aGUgZmlyc3QgYXN5bmMgd2FpdCBpcyBzY2hlZHVsZWQuIEZpeGVzICM0MS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOiAoZ3N0X3N5c3RlbV9jbG9ja19pbml0KSwKKwkgIChnc3Rfc3lzdGVtX2Nsb2NrX3N0YXJ0X2FzeW5jKSwgKGdzdF9zeXN0ZW1fY2xvY2tfaWRfd2FpdF9hc3luYyk6CisJICBEZWZlciBzdGFydGluZyB0aGUgYXN5bmMgc3lzdGVtIGNsb2NrIHRocmVhZCB1bnRpbCB0aGUgZmlyc3QgYXN5bmMKKwkgIHdhaXQgaXMgc2NoZWR1bGVkLiBGaXhlcyAjNDE0OTg2LgorCisyMDA3LTAzLTEyIDE0OjIzOjE2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogRml4IHNtYWxsIGxlYWsgKGZyZWUgR3N0U2luZ2xlUXVldWUgc3RydWN0dXJlIHRvbywgbm90IG9ubHkgY29udGVudHMpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiAoZ3N0X211bHRpX3F1ZXVlX2ZpbmFsaXplKSwKKwkgIChnc3Rfc2luZ2xlX3F1ZXVlX2ZyZWUpOgorCSAgRml4IHNtYWxsIGxlYWsgKGZyZWUgR3N0U2luZ2xlUXVldWUgc3RydWN0dXJlIHRvbywgbm90IG9ubHkgY29udGVudHMpLgorCisyMDA3LTAzLTEwIDE1OjQ0OjQ0ICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+CisKKwkgIGdzdC9nc3RiaW4uYzogVXNlIEdTVF9TVFJfTlVMTCB0byBwcmV2ZW50IE5VTEwgcG9pbnRlciB0byBiZSBwYXNzZWQgdG8gR1NUX0NBVF9ERUJVRy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6KGdzdF9iaW5fYWRkKToKKwkgIFVzZSBHU1RfU1RSX05VTEwgdG8gcHJldmVudCBOVUxMIHBvaW50ZXIgdG8gYmUgcGFzc2VkIHRvIEdTVF9DQVRfREVCVUcuCisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKKwkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBBZGQgbmV3IGV4cG9ydGVkIGZ1bmN0aW9ucy4KKworMjAwNy0wMy0wOSAxNjozOToyOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLXNlY3Rpb25zLnR4dDogRml4IEdzdFRlZSBkb2NzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy1zZWN0aW9ucy50eHQ6CisJICBGaXggR3N0VGVlIGRvY3MuCisKKzIwMDctMDMtMDkgMTY6MzA6MzggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIEFkZCBtZXRhZGF0YSBjb3B5IGZ1bmN0aW9ucy4gRml4ZXMgIzM5MzA5OS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBnc3QvZ3N0YnVmZmVyLmM6IChnc3RfYnVmZmVyX2NvcHlfbWV0YWRhdGEpLCAoX2dzdF9idWZmZXJfY29weSk6CisJICAqIGdzdC9nc3RidWZmZXIuaDoKKwkgIEFkZCBtZXRhZGF0YSBjb3B5IGZ1bmN0aW9ucy4gRml4ZXMgIzM5MzA5OS4KKwkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfYnVmZmVyX3N0YW1wKToKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3ByZXBhcmVfb3V0cHV0X2J1ZmZlcik6CisJICBVc2UgbmV3IG1ldGFkYXRhIGNvcHkgZnVuY3Rpb25zLgorCisyMDA3LTAzLTA5IDE0OjIwOjI1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS4qOiBTZXBhcmF0ZSBvdXQgY2hlY2staW1wZXJmZWN0LXRpbWVzdGFtcCBhbmQgY2hlY2staW1wZXJmZWN0LW9mZnNldC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IChnc3RfaWRlbnRpdHlfY2xhc3NfaW5pdCksCisJICAoZ3N0X2lkZW50aXR5X2luaXQpLCAoZ3N0X2lkZW50aXR5X2NoZWNrX3BlcmZlY3QpLAorCSAgKGdzdF9pZGVudGl0eV9jaGVja19pbXBlcmZlY3RfdGltZXN0YW1wKSwKKwkgIChnc3RfaWRlbnRpdHlfY2hlY2tfaW1wZXJmZWN0X29mZnNldCksIChnc3RfaWRlbnRpdHlfdHJhbnNmb3JtX2lwKSwKKwkgIChnc3RfaWRlbnRpdHlfc2V0X3Byb3BlcnR5KSwgKGdzdF9pZGVudGl0eV9nZXRfcHJvcGVydHkpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5Lmg6CisJICBTZXBhcmF0ZSBvdXQgY2hlY2staW1wZXJmZWN0LXRpbWVzdGFtcCBhbmQgY2hlY2staW1wZXJmZWN0LW9mZnNldC4KKwkgIFB1dCBiYWNrIGNoZWNrLXBlcmZlY3QgYXMgaXQgd2FzIHRvIGtlZXAgY29tcGF0aWJpbGl0eS4KKworMjAwNy0wMy0wOSAxMjozNDo0NiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGdzdC9nc3RlbGVtZW50LmM6IFRoZXJlJ3Mgbm8gbmVlZCB0byB3YXJuIGlmIFZPSURfUEVORElORyBpcyBub3QgTk9ORSBoZXJlLCBhcyBsb25nIGFzIHRoZSBzdGF0ZSBpcyBOVUxMIGl0J3Mgb2ssIGFuZC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9kaXNwb3NlKToKKwkgIFRoZXJlJ3Mgbm8gbmVlZCB0byB3YXJuIGlmIFZPSURfUEVORElORyBpcyBub3QgTk9ORSBoZXJlLCBhcworCSAgbG9uZyBhcyB0aGUgc3RhdGUgaXMgTlVMTCBpdCdzIG9rLCBhbmQgdGhhdCdzIGNoZWNrZWQgaW1tZWRpYXRlbHkKKwkgIGFib3ZlLgorCisyMDA3LTAzLTA4IDE3OjU4OjU3ICswMDAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IEZpeCBjaGVjayBmb3IgcGVyZmVjdCBzdHJlYW0gdG8gaWdub3JlIGJ1ZmZlcnMgd2l0aCAtMSBvZmZzZXRzL29mZnNldCBlbmRzIHdoZW4gY2hlY2suLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNy0wMy0wOCAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IChnc3RfaWRlbnRpdHlfY2hlY2tfcGVyZmVjdCk6CisJICBGaXggY2hlY2sgZm9yIHBlcmZlY3Qgc3RyZWFtIHRvIGlnbm9yZSBidWZmZXJzIHdpdGggLTEKKwkgIG9mZnNldHMvb2Zmc2V0IGVuZHMgd2hlbiBjaGVja2luZyBkYXRhIGNvbnRpZ3VpdHkuCisKKzIwMDctMDMtMDggMTY6MjY6NDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHRvb2xzL2dzdC1sYXVuY2guYzogUHJpbnQgSU5GTyBtZXNzYWdlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChldmVudF9sb29wKToKKwkgIFByaW50IElORk8gbWVzc2FnZXMuCisKKzIwMDctMDMtMDggMTE6NDA6MTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS4qOiBBZGQgc3VwcG9ydCBmb3IgZHJvcHBpbmcgYnVmZmVycyB3aXRoIGN1c3RvbSBHc3RGbG93UmV0dXJuLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zaW5rX2V2ZW50ZnVuYyksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2hhbmRsZV9idWZmZXIpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NoYWluKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fYWN0aXZhdGUpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKKwkgIEFkZCBzdXBwb3J0IGZvciBkcm9wcGluZyBidWZmZXJzIHdpdGggY3VzdG9tIEdzdEZsb3dSZXR1cm4uCisJICBTZXQgRElTQ09OVCBmbGFncyBvbiBvdXRnb2luZyBidWZmZXJzIGJhc2VkIG9uIFFvUywgaW5jb21taW5nIERJU0NPTlQKKwkgIGJ1ZmZlcnMgb3IgZHJvcHBlZCBidWZmZXJzLgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSAgZG9jcyBmb3IgbmV3IGN1c3RvbSByZXR1cm4gY29kZS4KKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiAoZ3N0X2lkZW50aXR5X3RyYW5zZm9ybV9pcCk6CisJICBVc2UgZHJvcCBzdXBwb3J0IGluIGJhc2UgY2xhc3MgdG8gaW1wbGVtZW50IGRyb3AtcHJvYmFiaWxpdHkuCisKKzIwMDctMDMtMDcgMTc6MjY6NDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC86IFJlbW92ZSBuZXdsaW5lcyBhdCBlbmQgb2YgZGVidWcgbG9nIHN0cmluZ3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdC5jOiAobG9hZF9wbHVnaW5fZnVuYyk6CisJICAqIGdzdC9nc3RwbHVnaW4uYzogKGdzdF9wbHVnaW5fbG9hZF9ieV9uYW1lKSwgKGdzdF9wbHVnaW5fbG9hZCk6CisJICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9yZWFkX2NhY2hlKToKKwkgICogZ3N0L2dzdHRyYWNlLmM6IChnc3RfdHJhY2VfbmV3KSwgKGdzdF9hbGxvY190cmFjZV9zZXRfZmxhZ3NfYWxsKToKKwkgIFJlbW92ZSBuZXdsaW5lcyBhdCBlbmQgb2YgZGVidWcgbG9nIHN0cmluZ3MuCisKKzIwMDctMDMtMDcgMTc6MTQ6NTMgKzAwMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogT25seSBwb3N0IGJ1cyBtZXNzYWdlIGF0IG1heCwgb25jZSBwZXIgYnVmZmVyIHJlY2VpdmVkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA3LTAzLTA3ICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogKGdzdF9pZGVudGl0eV9jaGVja19wZXJmZWN0KToKKwkgIE9ubHkgcG9zdCBidXMgbWVzc2FnZSBhdCBtYXgsIG9uY2UgcGVyIGJ1ZmZlciByZWNlaXZlZC4KKworMjAwNy0wMy0wNyAxNzoxMzoxNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vOiBBZGQgZG9jIGFib3V0IHN5bmNocm9uaXNhdGlvbgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL01ha2VmaWxlLmFtOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXN5bmNocm9uaXNhdGlvbi50eHQ6CisJICBBZGQgZG9jIGFib3V0IHN5bmNocm9uaXNhdGlvbgorCSAgKiBkb2NzL2Rlc2lnbi9kcmFmdC1sYXRlbmN5LnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1jbG9ja3MudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtZ3N0YnVzLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RwaXBlbGluZS50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtbGl2ZS1zb3VyY2UudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LW1lc3NhZ2VzLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1vdmVydmlldy50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtc3RyZWFtcy50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtdHJpY2ttb2Rlcy50eHQ6CisJICBEb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisKKzIwMDctMDMtMDcgMTc6MDk6NTcgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBnc3RyZWFtZXIuZG9hcDogVXBkYXRlIHRoZSBkb2FwIGZpbGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0cmVhbWVyLmRvYXA6CisJICBVcGRhdGUgdGhlIGRvYXAgZmlsZS4KKworMjAwNy0wMy0wNyAxNzowMjo1MSArMDAwMCAgWmFoZWVyIEFiYmFzIE1lcmFsaSA8emFoZWVyYWJiYXNAbWVyYWxpLm9yZz4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiBSZW5hbWUgbm9uLXBlcmZlY3QgdG8gaW1wZXJmZWN0IGZvciBNaWtlIGFuZCBmb3IgdGhlIHNhbmN0aXR5IG9mIHRoZSBsYW5ndWFnZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNy0wMy0wNyAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IChnc3RfaWRlbnRpdHlfY2hlY2tfcGVyZmVjdCk6CisJICBSZW5hbWUgbm9uLXBlcmZlY3QgdG8gaW1wZXJmZWN0IGZvciBNaWtlIGFuZCBmb3IgdGhlIHNhbmN0aXR5IG9mCisJICB0aGUgbGFuZ3VhZ2UuCisJICBBbHNvIG1ha2Ugc3VyZSBidXMgbWVzc2FnZSBnZXRzIGVtaXR0ZWQgZm9yIGRhdGEtaW5jb250aWd1aXRpZXMuCisKKzIwMDctMDMtMDcgMTY6NTg6NDIgKzAwMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuKjogRW1pdCBidXMgbWVzc2FnZSBpZiBjaGVjay1wZXJmZWN0IGlzIHRydWUgYW5kIHdlIGVuY291bnRlciBhIG5vbi1wZXJmZWN0IHN0cmVhbSBiZXR3ZS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA3LTAzLTA3ICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogKGdzdF9pZGVudGl0eV9jaGVja19wZXJmZWN0KSwKKwkgIChnc3RfaWRlbnRpdHlfc3RhcnQpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5Lmg6CisJICBFbWl0IGJ1cyBtZXNzYWdlIGlmIGNoZWNrLXBlcmZlY3QgaXMgdHJ1ZSBhbmQgd2UgZW5jb3VudGVyIGEKKwkgIG5vbi1wZXJmZWN0IHN0cmVhbSBiZXR3ZWVuIDIgY29uc2VjdXRpdmUgYnVmZmVycy4KKwkgIEZpeGVzICM0MTUzOTQuCisKKzIwMDctMDMtMDcgMTY6NTU6MDIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBjb25maWd1cmUuYWM6IEJhY2sgdG8gQ1ZTCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgQmFjayB0byBDVlMKKworPT09IHJlbGVhc2UgMC4xMC4xMiA9PT0KKworMjAwNy0wMy0wNyAxNjo0NDowNCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkqIENoYW5nZUxvZzoKKwkqIE5FV1M6CisJKiBSRUxFQVNFOgorCSogY29uZmlndXJlLmFjOgorCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmFyZ3M6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgorCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgorCSAgUmVsZWFzZSAwLjEwLjEyCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFJlbGVhc2UgMC4xMC4xMgorCisyMDA3LTAzLTA3IDE2OjMxOjMwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSogcG8vYWYucG86CisJKiBwby9hei5wbzoKKwkqIHBvL2JnLnBvOgorCSogcG8vY2EucG86CisJKiBwby9jcy5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkgIFVwZGF0ZSAucG8gZmlsZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgVXBkYXRlIC5wbyBmaWxlcworCisyMDA3LTAzLTA3IDEyOjUxOjIwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSogY29tbW9uOgorCSogcG8vYWYucG86CisJKiBwby9hei5wbzoKKwkqIHBvL2JnLnBvOgorCSogcG8vY2EucG86CisJKiBwby9jcy5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkgIFVwZGF0ZSAucG8gZmlsZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgVXBkYXRlIC5wbyBmaWxlcworCisyMDA3LTAzLTAxIDE4OjQ2OjM2ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgY29uZmlndXJlLmFjOiBWZXJzaW9uIDAuMTAuMTEuMiAoMC4xMC4xMiBwcmUtcmVsZWFzZSkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICBWZXJzaW9uIDAuMTAuMTEuMiAoMC4xMC4xMiBwcmUtcmVsZWFzZSkKKwkgIEJ1bXAgbGlidG9vbCB2ZXJzaW9uaW5nLgorCisyMDA3LTAzLTAxIDE0OjQ5OjQxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBMb2cgZmxvdy1uYW1lcyBhbmQgbm90IG51bWJlcnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfbG9vcCk6CisJICBMb2cgZmxvdy1uYW1lcyBhbmQgbm90IG51bWJlcnMuCisKKzIwMDctMDItMjggMTk6MjU6NDggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBjb25maWd1cmUuYWM6IENvbnZlcnQgdG8gbmV3IEFHX0dTVCBzdHlsZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICBDb252ZXJ0IHRvIG5ldyBBR19HU1Qgc3R5bGUuCisKKzIwMDctMDItMjggMTg6NTE6NDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogRG9uJ3QgdW5yZWYgcXVlcnkgdHdpY2UuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19xdWVyeV9sYXRlbmN5KToKKwkgIERvbid0IHVucmVmIHF1ZXJ5IHR3aWNlLgorCisyMDA3LTAyLTI4IDE2OjU3OjQ5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0dmFsdWUuYzogSW1wbGVtZW50IEdzdE9iamVjdCAtPiBzdHJpbmcgdHJhbnNmb3JtIHNvIHdlIHByaW50IG9iamVjdCBuYW1lcyB3aGVuIHNlcmlhbGl6aW5nIEdWYWx1ZXMgY29udGFpbmluZyAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF92YWx1ZV90cmFuc2Zvcm1fb2JqZWN0X3N0cmluZyksCisJICAoX2dzdF92YWx1ZV9pbml0aWFsaXplKToKKwkgIEltcGxlbWVudCBHc3RPYmplY3QgLT4gc3RyaW5nIHRyYW5zZm9ybSBzbyB3ZSBwcmludCBvYmplY3QgbmFtZXMKKwkgIHdoZW4gc2VyaWFsaXppbmcgR1ZhbHVlcyBjb250YWluaW5nIEdzdE9iamVjdHMuCisKKzIwMDctMDItMjggMTY6NTU6NTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IEFkZCBuZXcgc3R1ZmYgdG8gZG9jcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgQWRkIG5ldyBzdHVmZiB0byBkb2NzLgorCisyMDA3LTAyLTI4IDE2OjQ2OjA3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IEltcHJvdmUgbGF0ZW5jeSBxdWVyeSBjb2RlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfcXVlcnlfbGF0ZW5jeSksCisJICAoZ3N0X2Jhc2Vfc2lua19xdWV1ZV9vYmplY3RfdW5sb2NrZWQpLCAoZ3N0X2Jhc2Vfc2lua19zZW5kX2V2ZW50KSwKKwkgIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6CisJICBJbXByb3ZlIGxhdGVuY3kgcXVlcnkgY29kZS4KKwkgIERvbid0IGxlYWsgbGF0ZW5jeSBldmVudHMuCisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RiaW4uYzogKEdTVF9TVEFSVF9URVNUKToKKwkgIEltcHJvdmUgZGVidWdnaW5nLgorCisyMDA3LTAyLTI4IDE2OjQzOjQzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0ZWxlbWVudC4qOiBJbXByb3ZlIGRvY3MgYSBsaXR0bGUuIEFkZGVkIFNpbmNlOiBmb3IgbmV3IG1hY3JvLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9tZXNzYWdlX2Z1bGwpLAorCSAgKGdzdF9lbGVtZW50X2dldF9zdGF0ZV9mdW5jKToKKwkgICogZ3N0L2dzdGVsZW1lbnQuaDoKKwkgIEltcHJvdmUgZG9jcyBhIGxpdHRsZS4gQWRkZWQgU2luY2U6IGZvciBuZXcgbWFjcm8uCisJICAqIGdzdC9nc3RvYmplY3QuYzogKGdzdF9vYmplY3Rfc2luayk6CisJICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX2NoYW5nZV9zdGF0ZSksCisJICAoZ3N0X3BpcGVsaW5lX3NldF9uZXdfc3RyZWFtX3RpbWUpOgorCSAgKiBnc3QvZ3N0cGlwZWxpbmUuaDoKKwkgIEltcHJvdmUgZGVidWdnaW5nIGFuZCBkb2NzLgorCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9lbGVtZW50X3N0YXRlX2NoYW5nZV9yZXR1cm5fZ2V0X25hbWUpOgorCSAgSW1wcm92ZSBkZWJ1Z2dpbmcuCisKKzIwMDctMDItMjggMTY6NDA6MDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RlbGVtZW50LmM6IEhhbmRsZSBJTkZPIG1lc3NhZ2VzIGZyb20gdGhlIEdTVF9FTEVNRU5UX0lORk8gbWFjcm8gYXMgd2VsbC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfbWVzc2FnZV9mdWxsKSwKKwkgIChnc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlKSwgKGdzdF9lbGVtZW50X2dldF9zdGF0ZV9mdW5jKSwKKwkgIChnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUpOgorCSAgSGFuZGxlIElORk8gbWVzc2FnZXMgZnJvbSB0aGUgR1NUX0VMRU1FTlRfSU5GTyBtYWNybyBhcyB3ZWxsLgorCSAgRG9jdW1lbnRhdGlvbiB1cGRhdGVzLgorCSAgU21hbGwgY29kZSBjbGVhbnVwcy4KKwkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKGdzdF9tZXNzYWdlX25ld19pbmZvKSwKKwkgIChnc3RfbWVzc2FnZV9wYXJzZV9pbmZvKToKKwkgICogZ3N0L2dzdG1lc3NhZ2UuaDoKKwkgIEFQSTogZ3N0X21lc3NhZ2VfbmV3X2luZm8oKQorCSAgQVBJOiBnc3RfbWVzc2FnZV9wYXJzZV9pbmZvKCkKKwkgIEFkZCBJTkZPIG1lc3NhZ2UgY3JlYXRlIGFuZCBwYXJzZSBjb2RlLgorCisyMDA3LTAyLTI4IDE2OjM1OjQ4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YmluLmM6IEFsc28gcmVwb3J0IHRoZSBsaXZlIHBhcmFtZXRlciBvZiBhIGxhdGVuY3kgcXVlcnkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAoYmluX3F1ZXJ5X21pbl9tYXhfaW5pdCksIChiaW5fcXVlcnlfbGF0ZW5jeV9mb2xkKSwKKwkgIChiaW5fcXVlcnlfbGF0ZW5jeV9kb25lKToKKwkgIEFsc28gcmVwb3J0IHRoZSBsaXZlIHBhcmFtZXRlciBvZiBhIGxhdGVuY3kgcXVlcnkuCisKKzIwMDctMDItMjggMTI6NTc6NDIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiB0ZXN0cy9jaGVjay9nZW5lcmljL3N0YXRlcy5jOgorCSAgcGx1ZyB0ZXN0IGxlYWsKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcGx1ZyB0ZXN0IGxlYWsKKworMjAwNy0wMi0yOCAxMjo0Mzo1NyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSAgYWN0dWFsbHkgdXNlIHRoZSBlbnYgdmFyIGZvciB0ZXN0cworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhY3R1YWxseSB1c2UgdGhlIGVudiB2YXIgZm9yIHRlc3RzCisKKzIwMDctMDItMjggMTI6NDA6NDUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICB0ZXN0cy9jaGVjay9nZW5lcmljL3N0YXRlcy5jOiBDb3B5IHRoZSBjdXJyZW50IGdlbmVyaWMvc3RhdGVzIGV4YW1wbGUgZnJvbSAtYmFzZSBhbmQgYWRhcHQgc28gd2UgY2FuIHVzZSB0aGUgZXhhY3Qgc2EuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9nZW5lcmljL3N0YXRlcy5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoc3RhdGVzX3N1aXRlKToKKwkgIENvcHkgdGhlIGN1cnJlbnQgZ2VuZXJpYy9zdGF0ZXMgZXhhbXBsZSBmcm9tIC1iYXNlIGFuZCBhZGFwdCBzbworCSAgd2UgY2FuIHVzZSB0aGUgZXhhY3Qgc2FtZSBjb2RlIGV2ZXJ5d2hlcmUuCisJICBDaGVjayBhIFNUQVRFU19JR05PUkVfRUxFTUVOVFMgZW52IHZhciB3aGljaCBjYW4gYmUgdXNlZAorCSAgdG8gaWdub3JlIGNlcnRhaW4gZWxlbWVudCBmYWN0b3JpZXMgZm9yIHRoaXMgdGVzdCwgd2hpY2ggaXMKKwkgIHdoYXQgaXMgYmVpbmcgZG9uZSBpbiAtYmFzZQorCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgIE1lbnRpb24gdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworMjAwNy0wMi0yNyAxNzoyMjowNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgQVBJOiBnc3RfYnVzX3RpbWVkX3BvcCgpCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdGJ1cy5jOiAoZ3N0X2J1c19pbml0KSwgKGdzdF9idXNfZGlzcG9zZSksIChnc3RfYnVzX3Bvc3QpLAorCSAgKGdzdF9idXNfdGltZWRfcG9wKSwgKGdzdF9idXNfcG9wKToKKwkgICogZ3N0L2dzdGJ1cy5oOgorCSAgQVBJOiBnc3RfYnVzX3RpbWVkX3BvcCgpCisJICBJbXBsZW1lbnQgZ3N0X2J1c190aW1lZF9wb3AoKSB0byBkbyBhIGJsb2NraW5nIHRpbWVkIHdhaXQgZm9yIGEKKwkgIG1lc3NhZ2UgdG8gYXJyaXZlIG9uIHRoZSBidXMuCisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RidXMuYzogKEdTVF9TVEFSVF9URVNUKSwgKHBvcF90aHJlYWQpLAorCSAgKGdzdF9idXNfc3VpdGUpOgorCSAgVHdvIHVuaXQgdGVzdHMgZm9yIG5ldyBfdGltZWRfcG9wKCkgZnVuY3Rpb24uCisKKzIwMDctMDItMjMgMTc6NDI6MDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RwaXBlbGluZS5jOiBEb24ndCByZWYgYSBOVUxMIGNsb2NrIGluIF9wcm92aWRlX2Nsb2NrX2Z1bmMoKS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpLAorCSAgKGdzdF9waXBlbGluZV9wcm92aWRlX2Nsb2NrX2Z1bmMpLCAoZ3N0X3BpcGVsaW5lX3NldF9kZWxheSk6CisJICBEb24ndCByZWYgYSBOVUxMIGNsb2NrIGluIF9wcm92aWRlX2Nsb2NrX2Z1bmMoKS4KKwkgIERvbid0IGFsbG93IGFuIElOVkFMSUQgZGVsYXkuCisJICBEb24ndCB0cnkgdG8gY2FsY3VsYXRlIGJhc2VfdGltZSB3aXRoIGFuIGludmFsaWQgc3RhcnRfdGltZS4KKwkgIEFsc28gZGlzdHJpYnV0ZSBhbmQgbm90aWZ5IGEgTlVMTCBjbG9jayB3aGVuIGl0IHdhcyBzZWxlY3RlZC4KKwkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAoZXZlbnRfbG9vcCk6CisJICBEb24ndCBjcmFzaCB3aGVuIGEgTlVMTCBjbG9jayB3YXMgc2VsZWN0ZWQgaW4gdGhlIHBpcGVsaW5lLgorCisyMDA3LTAyLTIzIDEzOjQyOjE5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBkb2NzLzogU29tZSBzbWFsbCB1cGRhdGVzOiB1cGRhdGUgcGx1Z2luIHN5c3RlbSBpZGVudGlmaWVyIHByZWZpeCBtZW50aW9uIG91ciBuZXcgaW5zdGFsbAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL01ha2VmaWxlLmFtOgorCSAgKiBkb2NzL2Rlc2lnbi9kcmFmdC1taXNzaW5nLXBsdWdpbnMudHh0OgorCSAgKiBkb2NzL3JhbmRvbS9kcmFmdC1taXNzaW5nLXBsdWdpbnMudHh0OgorCSAgU29tZSBzbWFsbCB1cGRhdGVzOiB1cGRhdGUgcGx1Z2luIHN5c3RlbSBpZGVudGlmaWVyIHByZWZpeAorCSAgKCdnc3RyZWFtZXIubmV0JyB0byAnZ3N0cmVhbWVyJyksIG1lbnRpb24gb3VyIG5ldyBpbnN0YWxsCisJICBBUEkgaW4gbGliZ3N0YmFzZXV0aWxzIHJhdGhlciB0aGFuIGxpYmdpbW1lLWNvZGVjLCBhZGQKKwkgIHJlZmVyZW5jZSB0byB0aGUgb25saW5lIGRvY3MuCisKKzIwMDctMDItMjEgMTU6MzU6MTkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICB3aW4zMi9jb21tb24vY29uZmlnLmg6IFByZXR0eSBzdXJlIEJpbGwgbmV2ZXIgbWFkZSBhIHBvd2VycGMgdmVyc2lvbi4gIFBvd2VycGMgaGFja2VycywgdXNlIG1vYXAgY2wgY2kgdG8gb25seSBjaGVjayAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICBQcmV0dHkgc3VyZSBCaWxsIG5ldmVyIG1hZGUgYSBwb3dlcnBjIHZlcnNpb24uICBQb3dlcnBjIGhhY2tlcnMsCisJICB1c2UgbW9hcCBjbCBjaSB0byBvbmx5IGNoZWNrIGluIHdoYXQgaXMgbWVudGlvbmVkIGluIHRoZSBDaGFuZ2VMb2cuCisKKzIwMDctMDItMjEgMTU6MzQ6MTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBGaXggdXAgZG9jdW1lbnRhdGlvbiB0byBsaW5rIHRvIHRoZSBjb3JyZWN0IEdzdEdFcnJvciBzZWN0aW9uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3RlbGVtZW50Lmg6CisJICBGaXggdXAgZG9jdW1lbnRhdGlvbiB0byBsaW5rIHRvIHRoZSBjb3JyZWN0IEdzdEdFcnJvciBzZWN0aW9uLgorCSAgQWRkIEdTVF9FTEVNRU5UX0lORk8gbWFjcm8gc2luY2Ugc29tZW9uZSBlbHNlIGFkZGVkIGEgSW5mbyBtZXNzYWdlLgorCisyMDA3LTAyLTIxIDE1OjMwOjUzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgdG9vbHMvZ3N0LWxhdW5jaC5jOiBNYWtlIHN1cmUgdGhhdCB3ZSBhY3R1YWxseSBzaG93IHRoZSBpbXBvcnRhbnQgbWVzc2FnZSBwYXJ0IG9mIGEgd2FybmluZyBtZXNzYWdlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKGV2ZW50X2xvb3ApOgorCSAgTWFrZSBzdXJlIHRoYXQgd2UgYWN0dWFsbHkgc2hvdyB0aGUgaW1wb3J0YW50IG1lc3NhZ2UgcGFydCBvZiBhCisJICB3YXJuaW5nIG1lc3NhZ2UuCisJICBObyBuZWVkIHRvIGNoZWNrIGlmIHRoZSBnZXJyb3IgaXMgbm90IE5VTEwgdG8gZnJlZTsgZmlyc3Qgb2YgYWxsCisJICBnX2ZyZWUgYWNjZXB0cyBOVUxMOyBhbmQgc2Vjb25kIHRoZSBkZWZhdWx0IGVycm9yIGhhbmRsZXIgd291bGQKKwkgIHNlZ2ZhdWx0IGlmIGdlcnJvciB3YXMgTlVMTC4KKworMjAwNy0wMi0yMSAxMjoxMDoxNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogUmVtb3ZlZCBkb2NzIGFzIHdlbGwuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgIFJlbW92ZWQgZG9jcyBhcyB3ZWxsLgorCisyMDA3LTAyLTIxIDEyOjAxOjQxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0bWVzc2FnZS4qOiBSZW1vdmUgbmV3IG1lc3NhZ2VzIGZvciByZWxlYXNlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RtZXNzYWdlLmM6IChnc3RfbWVzc2FnZV9wYXJzZV9kdXJhdGlvbik6CisJICAqIGdzdC9nc3RtZXNzYWdlLmg6CisJICBSZW1vdmUgbmV3IG1lc3NhZ2VzIGZvciByZWxlYXNlLgorCisyMDA3LTAyLTIwIDE4OjAyOjUwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBNYWtlIHRoZSBnaG9zdHBhZCBhIHBhcmVudCBvZiB0aGUgaW50ZXJuYWwgcGFkIGFnYWluIGZvciBiZXR0ZXIgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gRG9uJ3Qgd3JpdGUgY29kZSB0aGF0IHJlbGllcyAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdGdob3N0cGFkLnR4dDoKKwkgICogZ3N0L2dzdGdob3N0cGFkLmM6IChnc3RfZ2hvc3RfcGFkX2Rpc3Bvc2UpLAorCSAgKGdzdF9naG9zdF9wYWRfbmV3X2Z1bGwpOgorCSAgTWFrZSB0aGUgZ2hvc3RwYWQgYSBwYXJlbnQgb2YgdGhlIGludGVybmFsIHBhZCBhZ2FpbiBmb3IgYmV0dGVyIGJhY2t3YXJkCisJICBjb21wYXRpYmlsaXR5LiBEb24ndCB3cml0ZSBjb2RlIHRoYXQgcmVsaWVzIG9uIHRoaXMgaG93ZXZlci4KKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9hY3RpdmF0ZV9wdWxsKSwgKGdzdF9wYWRfYWN0aXZhdGVfcHVzaCksCisJICAoZ3N0X3BhZF9saW5rX2NoZWNrX2hpZXJhcmNoeSk6CisJICBSZXF1aXJlIHRoYXQgcGFyZW50cyBzaG91bGQgYmUgR3N0RWxlbWVudHMgaW4gdGhlIGhpZXJhcmNoeSBjaGVjay4KKworMjAwNy0wMi0yMCAxMDo0NToxMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJpbi5jOiBJbXByb3ZlIGRlYnVnIGluZm8uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAoYmluX3JlcGxhY2VfbWVzc2FnZSksIChnc3RfYmluX2FkZF9mdW5jKSwKKwkgIChnc3RfYmluX2NoYW5nZV9zdGF0ZV9mdW5jKSwgKGJpbl9xdWVyeV9taW5fbWF4X2luaXQpLAorCSAgKGJpbl9xdWVyeV9sYXRlbmN5X2ZvbGQpLCAoYmluX3F1ZXJ5X2xhdGVuY3lfZG9uZSksCisJICAoZ3N0X2Jpbl9xdWVyeSk6CisJICBJbXByb3ZlIGRlYnVnIGluZm8uCisJICBJbXBsZW1lbnQgbGF0ZW5jeSBxdWVyeS4KKworMjAwNy0wMi0yMCAxMDoxNjoyNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgRG8gbm90IHNldCB0aGUgaW50ZXJuYWwgcGFkIGFzIGEgcGFyZW50IGFueW1vcmUgc28gd2UgY2FuIGF2b2lkIGhpZXJhcmNoeSBsaW5raW5nIGVycm9ycyB3aGVuIHRoZSBnaG9zdHBhZCBoYXMgbm8gcGFyLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RnaG9zdHBhZC50eHQ6CisJICAqIGdzdC9nc3RnaG9zdHBhZC5jOiAoZ3N0X2dob3N0X3BhZF9jbGFzc19pbml0KSwKKwkgIChnc3RfZ2hvc3RfcGFkX2ludGVybmFsX2RvX2FjdGl2YXRlX3B1c2gpLAorCSAgKGdzdF9naG9zdF9wYWRfaW50ZXJuYWxfZG9fYWN0aXZhdGVfcHVsbCksCisJICAoZ3N0X2dob3N0X3BhZF9kb19hY3RpdmF0ZV9wdXNoKSwgKGdzdF9naG9zdF9wYWRfZG9fYWN0aXZhdGVfcHVsbCksCisJICAoZ3N0X2dob3N0X3BhZF9kb19saW5rKSwgKGdzdF9naG9zdF9wYWRfZGlzcG9zZSksCisJICAoZ3N0X2dob3N0X3BhZF9uZXdfZnVsbCksIChnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQpOgorCSAgRG8gbm90IHNldCB0aGUgaW50ZXJuYWwgcGFkIGFzIGEgcGFyZW50IGFueW1vcmUgc28gd2UgY2FuIGF2b2lkCisJICBoaWVyYXJjaHkgbGlua2luZyBlcnJvcnMgd2hlbiB0aGUgZ2hvc3RwYWQgaGFzIG5vIHBhcmVudCB5ZXQuIFRoaXMgYWxzbworCSAgZml4ZXMgZmFpbGVkIGFjdGl2YXRpb24gYmVjYXVzZSBvZiB1bmxpbmtlZCBpbnRlcm5hbCBwYWRzLCB3aGljaCBpbgorCSAgdHVybiBmaXhlcyB0aGUgaW1wb3NzaWJsZSBjYXNlIHdoZXJlIHlvdSBoYXZlIHRvIGFjdGl2YXRlIGEgcGFkIGJlZm9yZQorCSAgeW91IGNhbiBhZGQgaXQgdG8gYSBydW5uaW5nIGVsZW1lbnQuCisJICBBbHNvIGZpeCB0aGUgZG9jcy4KKwkgICogZ3N0L2dzdHBhZC5jOiAocHJlX2FjdGl2YXRlKSwgKHBvc3RfYWN0aXZhdGUpLAorCSAgKGdzdF9wYWRfc2V0X2FjdGl2ZSksIChnc3RfcGFkX2FjdGl2YXRlX3B1bGwpLAorCSAgKGdzdF9wYWRfYWN0aXZhdGVfcHVzaCksIChnc3RfcGFkX2NoZWNrX3B1bGxfcmFuZ2UpOgorCSAgQWRkIHNvbWUgbW9yZSBkZWJ1ZyBpbmZvLgorCSAgTWFyayBhY3RpdmF0aW9uIG1vZGUgaW4gcHJlX2FjdGl2YXRlIHNvIHRoYXQgd2UgZG9uJ3QgdHJ5IHRvIGFjdGl2YXRlIGluCisJICBlbmRsZXNzIGxvb3BzLiBGaXhlcyAjMzg1MDg0LgorCisyMDA3LTAyLTE5IDE4OjA4OjU5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogSW1wbGVtZW50IGEgY2hlY2tnZXRyYW5nZSBmdW5jdGlvbiBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gdGhlIGRlZmF1bHQgY29yZSBiZWhhdmlvdXIuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV9pbml0KSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fY2hlY2tfZ2V0X3JhbmdlKToKKwkgIEltcGxlbWVudCBhIGNoZWNrZ2V0cmFuZ2UgZnVuY3Rpb24gaW5zdGVhZCBvZiByZWx5aW5nIG9uIHRoZSBkZWZhdWx0CisJICBjb3JlIGJlaGF2aW91ciB0aGF0IGFzc3VtZXMgd2UgY2FuIG9wZXJhdGUgaW4gcHVsbCBtb2RlIGlmIHdlIGhhdmUgYQorCSAgZ2V0cmFuZ2UgZnVuY3Rpb24uIEZpcnN0IHN0ZXAgYXQgZml4aW5nICMzODUwODQuCisKKzIwMDctMDItMTUgMTI6MDU6MDkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgTW9yZSBkb2NzIGNvdmVyYWdlIGFuZCBzb21lIENoYW5nZUxvZyBzdXJnZXJ5IChhZGQgbWlzc2luZyBuYW1lcykKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0Y2hpbGRwcm94eS5oOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKKwkgIE1vcmUgZG9jcyBjb3ZlcmFnZSBhbmQgc29tZSBDaGFuZ2VMb2cgc3VyZ2VyeSAoYWRkIG1pc3NpbmcgbmFtZXMpCisKKzIwMDctMDItMTUgMTE6MzI6MDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZGVzaWduLzogU29tZSBkb2MgdXBkYXRlcy4gU3RhcnQgcmVuYW1pbmcgZnJvbSBzdHJlYW1fdGltZSB0byBydW5uaW5nX3RpbWUgd2hlcmUgaXQgd2FzIHVzZWQgd3JvbmdseS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWFjdGl2YXRpb24udHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWJsb2NrLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1idWZmZXJpbmcudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWNsb2Nrcy50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtZWxlbWVudC1zb3VyY2UudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtZ3N0YmluLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RidXMudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdHBpcGVsaW5lLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1saXZlLXNvdXJjZS50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtbWVzc2FnZXMudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LW92ZXJ2aWV3LnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1xb3MudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXF1ZXJ5LnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1zdGF0ZXMudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXRyaWNrbW9kZXMudHh0OgorCSAgU29tZSBkb2MgdXBkYXRlcy4gU3RhcnQgcmVuYW1pbmcgZnJvbSBzdHJlYW1fdGltZSB0byBydW5uaW5nX3RpbWUgd2hlcmUKKwkgIGl0IHdhcyB1c2VkIHdyb25nbHkuCisKKzIwMDctMDItMTUgMDk6MDc6MjUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBBbnN3ZXIgTEFURU5DWSBxdWVyeS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19kZWZhdWx0X3F1ZXJ5KToKKwkgIEFuc3dlciBMQVRFTkNZIHF1ZXJ5LgorCisyMDA3LTAyLTE1IDA4OjQwOjM4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzogSW1wcm92ZSBkZWJ1Z2dpbmcuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmM6IChldmVudF9wcm9iZSksICh0ZXN0X2V2ZW50KSwKKwkgIChHU1RfU1RBUlRfVEVTVCk6CisJICBJbXByb3ZlIGRlYnVnZ2luZy4KKworMjAwNy0wMi0xNSAwODozNzoxOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHBhZC5jOiBJbXByb3ZlIGRlYnVnZ2luZyBvZiBkZWZhdWx0IHBhZCBkaXNwYXRjaGVyIGFuZCBxdWVyeSBmdW5jdGlvbnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9nZXRfaW50ZXJuYWxfbGlua3NfZGVmYXVsdCksCisJICAoZ3N0X3BhZF9kaXNwYXRjaGVyKToKKwkgIEltcHJvdmUgZGVidWdnaW5nIG9mIGRlZmF1bHQgcGFkIGRpc3BhdGNoZXIgYW5kIHF1ZXJ5IGZ1bmN0aW9ucy4KKworMjAwNy0wMi0xNSAwODozMToyNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogUmVtb3ZlIG9sZCB1bnVzZWQgbWV0aG9kLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICBSZW1vdmUgb2xkIHVudXNlZCBtZXRob2QuCisKKzIwMDctMDItMTMgMTU6NTE6MDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHRlc3RzL2NoZWNrL2dzdC9nc3RzZWdtZW50LmM6IEZpeCBjaGVjaworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RzZWdtZW50LmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBGaXggY2hlY2sKKworMjAwNy0wMi0xMyAxNTozNDoxNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1zZWVraW5nLnR4dDogU29tZSBzbWFsbCB1cGRhdGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1zZWVraW5nLnR4dDoKKwkgIFNvbWUgc21hbGwgdXBkYXRlLgorCSAgKiBnc3QvZ3N0c2VnbWVudC5jOiAoZ3N0X3NlZ21lbnRfc2V0X3NlZWspOgorCSAgUmV2ZXJ0IG9sZCBib2d1cyBjaGFuZ2UgdGhhdCBzaG91bGQgbWFrZSBzZWVraW5nIHdvcmsgYWdhaW4uCisKKzIwMDctMDItMTMgMTQ6NTI6NDcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZG9jcy9yYW5kb20vZW5zb25pYy86IFBvc3NpYmxlIGR5bmFtaWMgcmVjb25uZWN0aW9uIGFwaSwgcGx1cyBzb21lIHR5cGUgZml4ZXMgdGhlIG90aGVyIHR3byBkb2NzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcmFuZG9tL2Vuc29uaWMvZHlubGluay50eHQ6CisJICAqIGRvY3MvcmFuZG9tL2Vuc29uaWMvaW50ZXJmYWNlcy50eHQ6CisJICAqIGRvY3MvcmFuZG9tL2Vuc29uaWMvcmVjZWlwaWVzLnR4dDoKKwkgIFBvc3NpYmxlIGR5bmFtaWMgcmVjb25uZWN0aW9uIGFwaSwgcGx1cyBzb21lIHR5cGUgZml4ZXMgdGhlIG90aGVyIHR3bworCSAgZG9jcy4KKworMjAwNy0wMi0xMyAxMzo0MDowNSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBwbHVnaW5zL2VsZW1lbnRzLzogQWxzbyBjaGVjayBmb3IgYW4gYWJzb2x1dGUgcGF0aCBmb2xsb3dpbmcgZmlsZTovLyBpbiB0aGUgZmlsZXNyYyBlbGVtZW50LiBSZW1vdmUgcmVkdW5kYW50IGNoZWNrIGEuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IChnc3RfZmlsZV9zaW5rX3VyaV9zZXRfdXJpKToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IChnc3RfZmlsZV9zcmNfdXJpX3NldF91cmkpOgorCSAgQWxzbyBjaGVjayBmb3IgYW4gYWJzb2x1dGUgcGF0aCBmb2xsb3dpbmcgZmlsZTovLyBpbiB0aGUgZmlsZXNyYworCSAgZWxlbWVudC4gUmVtb3ZlIHJlZHVuZGFudCBjaGVjayBhbmQgY2FsbCBnX3BhdGhfaXNfYWJzb2x1dGUoKSBvbiB0aGUKKwkgIHVuZXNjYXBlZCBsb2NhdGlvbi4KKworMjAwNy0wMi0xMyAwOToxMDo1MyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBkb2NzL2Rlc2lnbi9kcmFmdC1rbGFzcy50eHQ6IEFkZCBleGlzdGluZyBjYXRlZ29yeSBhbmFseXNpcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9kcmFmdC1rbGFzcy50eHQ6CisJICBBZGQgZXhpc3RpbmcgY2F0ZWdvcnkgYW5hbHlzaXMuCisJICAqIGdzdC9nc3RjYXBzLmM6CisJICBGaXggZG9jIGV4YW1wbGUsIGZyYW1lcmF0ZSBpcyBhIGZyYWN0aW9uLgorCisyMDA3LTAyLTEyIDE5OjU1OjI0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIEFkZCBjcm9zc3JlZmVyZW5jZXMgdG8gZ2xpYi9nb2JqZWN0IGRvY3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgKiBkb2NzL2dzdC9NYWtlZmlsZS5hbToKKwkgICogZG9jcy9saWJzL01ha2VmaWxlLmFtOgorCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06CisJICBBZGQgY3Jvc3NyZWZlcmVuY2VzIHRvIGdsaWIvZ29iamVjdCBkb2NzLgorCisyMDA3LTAyLTEyIDExOjMyOjIyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL2Rlc2lnbi9kcmFmdC1sYXRlbmN5LnR4dDogU21hbGwgdXBkYXRlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL2RyYWZ0LWxhdGVuY3kudHh0OgorCSAgU21hbGwgdXBkYXRlLgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NsYXNzX2luaXQpLAorCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X2xhdGVuY3kpLCAoZ3N0X2Jhc2Vfc2lua19xdWVyeV9sYXRlbmN5KSwKKwkgIChnc3RfYmFzZV9zaW5rX3dhaXRfY2xvY2spLCAoZ3N0X2Jhc2Vfc2lua19zZW5kX3FvcyksCisJICAoZ3N0X2Jhc2Vfc2lua19wZXJmb3JtX3FvcyksIChnc3RfYmFzZV9zaW5rX3F1ZXVlX29iamVjdF91bmxvY2tlZCksCisJICAoZ3N0X2Jhc2Vfc2lua19jaGFpbl91bmxvY2tlZCksIChnc3RfYmFzZV9zaW5rX3NlbmRfZXZlbnQpLAorCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uKSwgKGdzdF9iYXNlX3NpbmtfcXVlcnkpLAorCSAgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSAgQVBJOiBnc3RfYmFzZV9zaW5rX3F1ZXJ5X2xhdGVuY3koKSB0byBsZXQgc3ViY2xhc3NlcyBxdWVyeSB0aGUgdXBzdHJlYW0KKwkgIGxhdGVuY3kuCisJICBBUEk6IGdzdF9iYXNlX3NpbmtfZ2V0X2xhdGVuY3koKSB0byBsZXQgc3ViY2xhc3NlcyBxdWVyeSB0aGUgY29uZmlndXJlZAorCSAgbGF0ZW5jeSBpbiB0aGUgc2luay4KKwkgIEltcGxlbWVudCBxdWVyeSBhbmQgc2V0IGxhdGVuY3kuCisJICBVcGRhdGUgc29tZSBkb2NzLgorCSAgQXMgc3BvdHRlZCBieSBXaWxsIE5ld3RvbiA8d2lsbCBkb3QgbmV3dG9uIGF0IGdtYWlsIGRvdCBjb20+OiBNYWtlIHN1cmUgd2UKKwkgIGRvbid0IGNvbnRpbnVlIHByZXJvbGwgd2hlbiB3ZSBhcmUgZmx1c2hpbmcuIEZpeGVzICM0MDUyODQuCisJICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zdHJlc3MuYzogKGNoYW5nZV9zdGF0ZV90aW1lb3V0KSwKKwkgIChxdWl0X3RpbWVvdXQpLCAoR1NUX1NUQVJUX1RFU1QpLCAoc3RyZXNzX3N1aXRlKToKKwkgIFRlc3QgZm9yICM0MDUyODQuCisKKzIwMDctMDItMTIgMTA6NTA6MjAgKzAwMDAgIFJlbsOpIFN0YWRsZXIgPG1haWxAcmVuZXN0YWRsZXIuZGU+CisKKwkgIEFQSTogYWRkIEdTVF9UQUdfUkVGRVJFTkNFX0xFVkVMICgjNDAzNTk3KS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IFJlbsOpIFN0YWRsZXIgPG1haWwgYXQgcmVuZXN0YWRsZXIgZGU+CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3R0YWdsaXN0LmM6IChfZ3N0X3RhZ19pbml0aWFsaXplKToKKwkgICogZ3N0L2dzdHRhZ2xpc3QuaDoKKwkgIEFQSTogYWRkIEdTVF9UQUdfUkVGRVJFTkNFX0xFVkVMICgjNDAzNTk3KS4KKworMjAwNy0wMi0xMSAxOTo1OToxMiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBkb2NzL2xpYnMvTWFrZWZpbGUuYW06IEZpeCBwYXRoIHRvIGNvcmUgZG9jcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2xpYnMvTWFrZWZpbGUuYW06CisJICBGaXggcGF0aCB0byBjb3JlIGRvY3MuCisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fZ2V0X2J5X2ludGVyZmFjZSksCisJICAoZ3N0X2Jpbl9pdGVyYXRlX2FsbF9ieV9pbnRlcmZhY2UpOgorCSAgUmVmaXggZG9jcyBieSBhbHNvIHJlbmFtaW5nICdpbnRlcmZhY2UnIHRvICdpZmFjZScgaW4gaW1wbGVtZW50YXRpb24uCisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3RjYXBzLmM6CisJICAqIGdzdC9nc3RjaGlsZHByb3h5LmM6IChnc3RfY2hpbGRfcHJveHlfYmFzZV9pbml0KToKKwkgICogZ3N0L2dzdGNoaWxkcHJveHkuaDoKKwkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6CisJICAqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5oOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKKwkgIChnc3RfY29udHJvbGxlZF9wcm9wZXJ0eV9uZXcpOgorCSAgRG9jdW1lbnQgbW9yZS4KKworMjAwNy0wMi0xMCAxODozMToxMiArMDAwMCAgU8OpYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgorCisJICBnc3QvZ3N0YmluLmg6IFJlcGxhY2UgaW50ZXJmYWNlIHBhcmFtZXRlciBuYW1lIGJ5IGlmYWNlIGFzIGludGVyZmFjZSBpcyBhIHJlc2VydmVkIGtleXdvcmQgaW4gVmlzdWFsIFN0dWRpbyBmb3IgQysrIHAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmg6KGdzdF9iaW5fZ2V0X2J5X2ludGVyZmFjZSksCisJICAoZ3N0X2Jpbl9pdGVyYXRlX2FsbF9ieV9pbnRlcmZhY2UpOgorCSAgUmVwbGFjZSBpbnRlcmZhY2UgcGFyYW1ldGVyIG5hbWUgYnkgaWZhY2UgYXMgaW50ZXJmYWNlIGlzCisJICBhIHJlc2VydmVkIGtleXdvcmQgaW4gVmlzdWFsIFN0dWRpbyBmb3IgQysrIHByb2plY3RzIHNvIGl0IHJlbW92ZXMKKwkgIGEgYnVpbGQgZXJyb3IgZm9yIGFwcGxpY2F0aW9uIGRldmVsb3BwZXJzIHVzaW5nIFZTLgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzooZ3N0X2ZpbGVfc3JjX3VyaV9zZXRfdXJpKToKKwkgIEZpeCBhIGJ1ZyBvbiBXaW5kb3dzIGluIHVyaSBmb3JtYXQgY2hlY2suIE5vdyB0aGUgcHJlZml4IGNoZWNrZWQKKwkgIGlzIGZpbGU6Ly8gYW5kIG5leHQgd2UgY2hlY2sgaWYgdGhlIHBhdGggYWZ0ZXIgZmlsZTovLyBpcyBhYnNvbHV0ZS4KKwkgICogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0ZGF0YXByb3RvY29sLmRlZjoKKwkgICogd2luMzIvY29tbW9uL2xpYmdzdGdzdHJlYW1lci5kZWY6CisJICBBZGQgbmV3IGV4cG9ydGVkIGZ1bmN0aW9ucy4KKworMjAwNy0wMi0wOSAxNToyNTo0NSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJKiBDaGFuZ2VMb2c6CisJKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jOgorCSAgdGVzdHMvY2hlY2svcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA3LTAyLTA5ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jCisJICAoc2ltcGxlX2xhdW5jaF9saW5lc19zdWl0ZSwgdGVzdF90ZWUpOiBEaXNhYmxlIHRlZSB0ZXN0IHVudGlsIEkKKwkgIGhhdmUgdGltZSB0byBmaXggaXQgOi0oCisKKzIwMDctMDItMDkgMTM6NTk6MzIgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgdGVzdHMvY2hlY2svOiBBZGQgQUJJIGNoZWNrcyBmb3IgUFBDMzIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDctMDItMDkgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtIChub2luc3RfSEVBREVSUyk6CisJICAqIHRlc3RzL2NoZWNrL2xpYnMvbGlic2FiaS5jOgorCSAgKiB0ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9wcGMzMi5oOiBBZGQgQUJJIGNoZWNrcyBmb3IgUFBDMzIuCisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RhYmkuYzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9wcGMzMi5oOiBBZGQgQUJJIGNoZWNrcyBmb3IgUFBDMzIuCisKKzIwMDctMDItMDkgMTM6NDU6MjcgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgdGVzdHMvY2hlY2svcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYyAodGVzdF90ZWUpOiBBZGQgdGVzdHMgZm9yIHB1c2ggYW5kIHB1bGwgdGVlIGJlaGF2aW9yLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA3LTAyLTA5ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jICh0ZXN0X3RlZSk6IEFkZAorCSAgdGVzdHMgZm9yIHB1c2ggYW5kIHB1bGwgdGVlIGJlaGF2aW9yLgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5oOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOiBEZXNjcmliZSBoYXMtc2luay1sb29wIGJldHRlciwgYW5kCisJICBtYXJrIGFzIGRlcHJlY2F0ZWQgYXMgd2VsbCBhcyB1bmltcGxlbWVudGVkLiBJdCB3YXMgYSBjcmFjayBpZGVhLgorCSAgQWRkIHN1cHBvcnQgZm9yIHRlZSBvcGVyYXRpbmcgaW4gcHVsbCBtb2RlLCBvZmYgYnkgZGVmYXVsdC4KKworMjAwNy0wMi0wOSAxMzo0MToyNCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0cmVnaXN0cnl4bWwuYyAobG9hZF9mZWF0dXJlLCBsb2FkX3BsdWdpbik6IERyb3Agc29tZSBub3JtYWwtY2FzZSBsb2dzIGRvd24gdG8gTE9HLCByYWlzZSBlcnJvcnMgdG8gV0FSTklORy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNy0wMi0wOSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmMgKGxvYWRfZmVhdHVyZSwgbG9hZF9wbHVnaW4pOiBEcm9wIHNvbWUKKwkgIG5vcm1hbC1jYXNlIGxvZ3MgZG93biB0byBMT0csIHJhaXNlIGVycm9ycyB0byBXQVJOSU5HLgorCSAgKGdzdF9yZWdpc3RyeV94bWxfcmVhZF9jYWNoZSk6IERvbid0IGxvZyBiZWZvcmUgY2FsbGluZyBhIGZ1bmN0aW9uCisJICB0aGF0IGxvZ3MuCisJICAqIGdzdC9nc3RyZWdpc3RyeS5jIChnc3RfcmVnaXN0cnlfZmluYWxpemUpOiBMZXNzIGRlYnVnIG9uIHByb2dyYW0KKwkgIGV4aXQgKHJlZ2lzdHJ5IGZpbmFsaXplKS4KKwkgIChnc3RfcmVnaXN0cnlfYWRkX3BsdWdpbiwgZ3N0X3JlZ2lzdHJ5X2FkZF9mZWF0dXJlKTogTm8gbmVlZCBmb3IgYQorCSAgREVCVUcgbG9nIHdoZW4gd2UgZW1pdCBzaWduYWxzIHRoYXQgcGVvcGxlIGRvbid0IGV2ZW4gaGF2ZSB0aGUKKwkgIGNoYW5jZSB0byBjb25uZWN0IHRvLgorCSAgKGdzdF9yZWdpc3RyeV9zY2FuX3BhdGhfbGV2ZWwpOiBMZXNzIGxvZ2dpbmcgaW4gdGhlIG5vcm1hbCBjYXNlLgorCisyMDA3LTAyLTA1IDEzOjE1OjQ0ICswMDAwICBNaWNoYWwgQmVuZXMgPG1pY2hhbC5iZW5lc0BpdG9uaXMudHY+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiBDb3JyZWN0bHkgZ2VuZXJhdGUgRU9TIGZvciBub24tc2Vla2FibGUgZmlsZXMuIFdlIGRvbid0IGhhdmUgYSB0b3RhbCBsZW5ndGggZm9yIHRoZW0gYS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogTWljaGFsIEJlbmVzIDxtaWNoYWwgZG90IGJlbmVzIGF0IGl0b25pcyBkb3QgdHY+CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiAoZ3N0X2ZpbGVfc3JjX2NyZWF0ZV9yZWFkKToKKwkgIENvcnJlY3RseSBnZW5lcmF0ZSBFT1MgZm9yIG5vbi1zZWVrYWJsZSBmaWxlcy4gV2UgZG9uJ3QgaGF2ZSBhIHRvdGFsCisJICBsZW5ndGggZm9yIHRoZW0gYW5kIHdvdWxkIGdldCBhbiB1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIGlmIHdlIG9ubHkKKwkgIHNwZWNpYWwtY2FzZWQgZm9yIHJlZ3VsYXIgZmlsZXMuIChGaXhlczogIzQwNDU2OSkKKworMjAwNy0wMi0wNSAwODoxNToyNiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICB0ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc3JjLmM6IEFkZCB1bml0IHRlc3QgZm9yIHRoZSBHc3RVUklIYW5kbGVyIGludGVyZmFjZSBpbiBmaWxlc3JjLiBUaGlzIGFsc28gdGVzdHMgdGhlIG5ld2x5IGEuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc3JjLmM6IChHU1RfU1RBUlRfVEVTVCksCisJICAoZmlsZXNyY19zdWl0ZSk6CisJICBBZGQgdW5pdCB0ZXN0IGZvciB0aGUgR3N0VVJJSGFuZGxlciBpbnRlcmZhY2UgaW4gZmlsZXNyYy4gVGhpcyBhbHNvCisJICB0ZXN0cyB0aGUgbmV3bHkgYWRkZWQgZmlsZTovL2xvY2FsaG9zdC9mb28vYmFyIHN1cHBvcnQuCisKKzIwMDctMDItMDQgMTY6MTQ6MTkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5oOiBUaGUga2xhc3Mgc3RyaW5nIGlzIG5vdCBhIGhpZXJhcmNoeS4gQWRkIHJlZmVyZW5jZSB0byB0aGUgZGVzaWduIGRvYyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbi4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5oOgorCSAgVGhlIGtsYXNzIHN0cmluZyBpcyBub3QgYSBoaWVyYXJjaHkuIEFkZCByZWZlcmVuY2UgdG8gdGhlIGRlc2lnbiBkb2MKKwkgIGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCBjb21tb24gdHlwZXMuCisKKzIwMDctMDItMDIgMTg6MDg6MzIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RxdWVyeS5jOiBSZW1vdmUgb2xkIHN0cnVjdHVyZSBmaWVsZC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cXVlcnkuYzogKGdzdF9xdWVyeV9uZXdfbGF0ZW5jeSk6CisJICBSZW1vdmUgb2xkIHN0cnVjdHVyZSBmaWVsZC4KKworMjAwNy0wMi0wMiAxMjoyNzoxNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICB0b29scy9nc3QtbGF1bmNoLjEuaW46IEdpdmUgZXhhbXBsZSBmb3IgbmV0d29yayBzdHJlYW1pbmcgKCMzNTE5OTgpCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdG9vbHMvZ3N0LWxhdW5jaC4xLmluOgorCSAgR2l2ZSBleGFtcGxlIGZvciBuZXR3b3JrIHN0cmVhbWluZyAoIzM1MTk5OCkKKworMjAwNy0wMi0wMiAxMTo0ODo0OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogQWRkIGRvY3MgZm9yIG5ldyBtZXRob2RzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICBBZGQgZG9jcyBmb3IgbmV3IG1ldGhvZHMuCisJICAqIGdzdC9nc3RldmVudC5jOiAoZ3N0X2V2ZW50X25ld19sYXRlbmN5KSwKKwkgIChnc3RfZXZlbnRfcGFyc2VfbGF0ZW5jeSk6CisJICAqIGdzdC9nc3RldmVudC5oOgorCSAgQWRkIG5ldyBMQVRFTkNZIGV2ZW50IHRvIGNvbmZpZ3VyZSBsYXRlbmN5IGluIGEgcGlwZWxpbmUuCisJICBBUEk6IGdzdF9ldmVudF9uZXdfbGF0ZW5jeQorCSAgQVBJOiBnc3RfZXZlbnRfcGFyc2VfbGF0ZW5jeQorCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOiAoZ3N0X21lc3NhZ2VfbmV3X2J1ZmZlcmluZyksCisJICAoZ3N0X21lc3NhZ2VfbmV3X2xvc3RfcHJlcm9sbCksIChnc3RfbWVzc2FnZV9uZXdfcHJlcm9sbGVkKSwKKwkgIChnc3RfbWVzc2FnZV9uZXdfbGF0ZW5jeSksIChnc3RfbWVzc2FnZV9wYXJzZV9idWZmZXJpbmcpLAorCSAgKGdzdF9tZXNzYWdlX3BhcnNlX2xvc3RfcHJlcm9sbCk6CisJICAqIGdzdC9nc3RtZXNzYWdlLmg6CisJICBBZGRlZCBtZXNzYWdlcyB1c2VkIGluIGRyYWZ0LWxhdGVuY3kuCisJICBBUEk6IGdzdF9tZXNzYWdlX25ld19sb3N0X3ByZXJvbGwKKwkgIEFQSTogZ3N0X21lc3NhZ2VfcGFyc2VfbG9zdF9wcmVyb2xsCisJICBBUEk6IGdzdF9tZXNzYWdlX25ld19wcmVyb2xsZWQKKwkgIEFQSTogZ3N0X21lc3NhZ2VfbmV3X2xhdGVuY3kKKwkgICogZ3N0L2dzdHF1ZXJ5LmM6IChnc3RfcXVlcnlfbmV3X2xhdGVuY3kpLCAoZ3N0X3F1ZXJ5X3NldF9sYXRlbmN5KSwKKwkgIChnc3RfcXVlcnlfcGFyc2VfbGF0ZW5jeSk6CisJICAqIGdzdC9nc3RxdWVyeS5oOgorCSAgSW1wbGVtZW50ZWQgbmV3IGxhdGVuY3kgcXVlcnkgYXMgaW4gZGVzaWduIGRvYy4KKwkgIEFQSTogZ3N0X3F1ZXJ5X25ld19sYXRlbmN5CisJICBBUEk6IGdzdF9xdWVyeV9zZXRfbGF0ZW5jeQorCSAgQVBJOiBnc3RfcXVlcnlfcGFyc2VfbGF0ZW5jeQorCisyMDA3LTAyLTAyIDExOjMzOjE5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL2Rlc2lnbi9kcmFmdC1sYXRlbmN5LnR4dDogU2xpZ2h0IHJlZGVzaWduIHRvIGFsbG93IGZvciBkeW5hbWljIGxhdGVuY3kgYWRqdXN0bWVudHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vZHJhZnQtbGF0ZW5jeS50eHQ6CisJICBTbGlnaHQgcmVkZXNpZ24gdG8gYWxsb3cgZm9yIGR5bmFtaWMgbGF0ZW5jeSBhZGp1c3RtZW50cy4KKwkgICogZG9jcy9kZXNpZ24vcGFydC1uZWdvdGlhdGlvbi50eHQ6CisJICBGaXggc29tZSB0eXBvcy4KKworMjAwNy0wMi0wMiAxMDo0MToyOSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBwbHVnaW5zL2VsZW1lbnRzLzogQWxsb3cgZmlsZTovL2xvY2FsaG9zdC9mb28vYmFyIFVSTHMgYW5kIGNvcnJlY3RseSBmYWlsIGZvciBldmVyeSBvdGhlciBob3N0bmFtZSB0aGF0IG9uZSBzZXRzLiBUaGkuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmV2aWV3ZWQgYnk6IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzogKGdzdF9maWxlX3NpbmtfdXJpX3NldF91cmkpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogKGdzdF9maWxlX3NyY191cmlfc2V0X3VyaSk6CisJICBBbGxvdyBmaWxlOi8vbG9jYWxob3N0L2Zvby9iYXIgVVJMcyBhbmQgY29ycmVjdGx5IGZhaWwgZm9yIGV2ZXJ5IG90aGVyCisJICBob3N0bmFtZSB0aGF0IG9uZSBzZXRzLiBUaGlzIHdhcyBnbm9tZXZmc3NyYyBpcyBsaW5rZWQgZm9yIHRob3NlIGlmCisJICBpbnN0YWxsZWQgYXMgaXQgY2FuIGhhbmRsZSBpdCAoIzQwMzE3MikKKworMjAwNy0wMi0wMSAxOTowMDo0OCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLio6IERvbid0IHB1dCB0aGUgcHJldmlvdXNseSBhZGRlZCBkZXN0cm95IG5vdGlmeSBpbiB0aGUgR3N0Q29sbGVjdERhdGEgc3RydWN0IGFzIGFsbCBpdCcuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmV2aWV3ZWQgYnk6IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChnc3RfY29sbGVjdF9wYWRzX2ZpbmFsaXplKSwKKwkgICh1bnJlZl9kYXRhKSwgKGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZF9mdWxsKToKKwkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oOgorCSAgRG9uJ3QgcHV0IHRoZSBwcmV2aW91c2x5IGFkZGVkIGRlc3Ryb3kgbm90aWZ5IGluIHRoZSBHc3RDb2xsZWN0RGF0YQorCSAgc3RydWN0IGFzIGFsbCBpdCdzIHBhZGRpbmcgaXMgYWxyZWFkeSB1c2VkIGFuZCB3ZSBkb24ndCB3YW50IHRvIGJyZWFrCisJICBBQkkuIEluc3RlYWQgcHV0IGluIHRoZSBwYWQncyBHT2JqZWN0IGRhdGEgZm9yIG5vdy4gVGhpcyBzaG91bGQgYmUKKwkgIGNsZWFuZWQgdXAgZm9yIDAuMTEgKCM0MDIzOTMpLgorCisyMDA3LTAyLTAxIDE3OjUyOjExICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIEFQSTogQWRkIGZ1bmN0aW9uIHRvIHNwZWNpZnkgYSBkZXN0cm95IG5vdGlmaWNhdGlvbiBmb3IgY3VzdG9tCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJldmlld2VkIGJ5OiBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChnc3RfY29sbGVjdF9wYWRzX2ZpbmFsaXplKSwKKwkgICh1bnJlZl9kYXRhKSwgKGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZCksCisJICAoZ3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkX2Z1bGwpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg6CisJICBBUEk6IEFkZCBmdW5jdGlvbiB0byBzcGVjaWZ5IGEgZGVzdHJveSBub3RpZmljYXRpb24gZm9yIGN1c3RvbQorCSAgR3N0Q29sbGVjdERhdGEgd2hlbiBhZGRpbmcgbmV3IHBhZHMgaW4gR3N0Q29sbGVjdFBhZHMgKCM0MDIzOTMpLgorCisyMDA3LTAyLTAxIDE3OjEwOjI1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBwby9zdi5wbzogVXBkYXRlIFN3ZWRpc2ggdHJhbnNsYXRpb24gKCMzNzgyNTUpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBvL3N2LnBvOgorCSAgVXBkYXRlIFN3ZWRpc2ggdHJhbnNsYXRpb24gKCMzNzgyNTUpLgorCisyMDA3LTAxLTMxIDExOjQyOjUzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvZGVzaWduL2RyYWZ0LWtsYXNzLnR4dDogRml4IHRoZSBwcmV2aW91cyBjaGFuZ2UsIHRoaXMgaXMgYSBsaXN0IG9mIGNhdGVnb3JpZXMgYW5kIG5vdCBhIGhpZXJhcmNoeS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9kcmFmdC1rbGFzcy50eHQ6CisJICBGaXggdGhlIHByZXZpb3VzIGNoYW5nZSwgdGhpcyBpcyBhIGxpc3Qgb2YgY2F0ZWdvcmllcyBhbmQgbm90IGEgaGllcmFyY2h5LgorCisyMDA3LTAxLTMxIDExOjAyOjI5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvZGVzaWduL2RyYWZ0LWtsYXNzLnR4dDogQWRkIGluZm8gYWJvdXQgaG93IHRvIGdldCBhIGxpc3Qgb2YgdXNlZCBjbGFzc2VzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL2RyYWZ0LWtsYXNzLnR4dDoKKwkgIEFkZCBpbmZvIGFib3V0IGhvdyB0byBnZXQgYSBsaXN0IG9mIHVzZWQgY2xhc3Nlcy4KKworMjAwNy0wMS0zMCAxOToxMjo1NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogRG9uJ3QgbGVhayBmb3VuZCBjYXBzIGluIGNoYWluIGZ1bmN0aW9uIChubyBpZGVhIHdoeSB0aGF0IG5ldmVyIHNob3dlZCB1cCBhcyBhLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfY2hhaW5fZG9fdHlwZWZpbmRpbmcpLAorCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9jaGFuZ2Vfc3RhdGUpOgorCSAgRG9uJ3QgbGVhayBmb3VuZCBjYXBzIGluIGNoYWluIGZ1bmN0aW9uIChubyBpZGVhIHdoeSB0aGF0IG5ldmVyCisJICBzaG93ZWQgdXAgYXMgYSBsZWFrIGFueXdoZXJlKS4KKworMjAwNy0wMS0zMCAxNTowNDozMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0cGx1Z2luLmg6IEZpeCBhbmQgZXhwYW5kIEdzdFBsdWdpbkRlc2MgQVBJIGRvY3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBsdWdpbi5oOgorCSAgRml4IGFuZCBleHBhbmQgR3N0UGx1Z2luRGVzYyBBUEkgZG9jcy4KKworMjAwNy0wMS0yOSAxNTo1NDowOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBjb25maWd1cmUuYWM6IGNvbW1lbnQgYWJvdXQgcmVmaW5pbmcgdGhlIHhtbCBkZXBzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgY29tbWVudCBhYm91dCByZWZpbmluZyB0aGUgeG1sIGRlcHMKKwkgICogZG9jcy9tYW51YWxzLm1hazoKKwkgIGNvbW1lbnRzIGFib3V0IG1vdmluZyBhd2F5IGZyb20gamFkZSBmb3IgZG9jcworCSAgKiBnc3QvZ3N0LmM6CisJICByZWNvbW1pdCB0aGUgaWZkZWZzIHRvIHVzZSB0aGUgYmluYXJ5IHJlZ2lzdHJ5CisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fY2hhbmdlX3N0YXRlX2Z1bmMpOgorCSAgdGhpcyBicmVhayBpcyBvYnNvbGV0ZQorCSAgKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKKwkgIGJldHRlciBHU1RfRUxFTUVOVF9ERVRBSUxTIGRvY3MsIGFkZCBjb21tZW50IGFib3V0IHRyYW5zbGF0aW9uCisJICAqIGdzdC9nc3RpbmZvLmg6CisJICByZW1vdmUgZW9sIHNsYXNoCisJICAqIGdzdC9nc3RvYmplY3QuYzogKGdzdF9zaWduYWxfb2JqZWN0X2dldF90eXBlKToKKwkgIGFkZCBHX1VOTElLRUxZIGFzIHVzdWFsCisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfZXZlbnRfZGVmYXVsdCk6CisJICBhZGQgZmFsbCB0cmh1IGNvbW1lbnQKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IChnc3RfcmVnaXN0cnlfYmluYXJ5X3dyaXRlKSwKKwkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2luaXRpYWxpemVfbWFnaWMpLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfc2F2ZV9zdHJpbmcpLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfc2F2ZV9wYWRfdGVtcGxhdGUpLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfc2F2ZV9mZWF0dXJlKSwKKwkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X3NhdmVfcGx1Z2luKSwKKwkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X3dyaXRlX2NhY2hlKSwKKwkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2NoZWNrX21hZ2ljKSwKKwkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2xvYWRfcGFkX3RlbXBsYXRlKSwKKwkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2xvYWRfZmVhdHVyZSksCisJICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9sb2FkX3BsdWdpbiksCisJICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9yZWFkX2NhY2hlKToKKwkgIGNvbW1lbnQgdHlwbyBhbmQgZm9ybWF0dGluZworCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKSwKKwkgIChnc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VfcmV0dXJuX2dldF9uYW1lKToKKwkgIHJlbW92ZSBvYnNvbGV0ZSBicmVha3MKKwkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfZGF0ZV9nZXRfdHlwZSksIChfZ3N0X3ZhbHVlX2luaXRpYWxpemUpOgorCSAgYWRkIEZJWE1FIDAuMTEgYW5kIHJlbW92ZSBjcHAgY29tbWVudAorCisyMDA3LTAxLTI5IDE1OjAyOjExICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogRml4IHByaW50IHN0YXRlbWVudCBpbiBhbiBldmVuIG1vcmUgcG9ydGFibGUgd2F5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9yZWFkX2NhY2hlKToKKwkgIEZpeCBwcmludCBzdGF0ZW1lbnQgaW4gYW4gZXZlbiBtb3JlIHBvcnRhYmxlIHdheS4KKworMjAwNy0wMS0yOSAxMzo0MDozOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgQVBJOiBhZGQgR1NUX1JPVU5EX0RPV05fKiBtYWNyb3MgKCM0MDE3ODEpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3R1dGlscy5oOgorCSAgQVBJOiBhZGQgR1NUX1JPVU5EX0RPV05fKiBtYWNyb3MgKCM0MDE3ODEpLgorCisyMDA3LTAxLTI3IDE4OjQ0OjExICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBEb2N1bWVudCByZWdpc3RyeSBzaWduYWxzIGFuZCBtYWtlIGd0ay1kb2MgcGljayB0aGVtIHVwICgjNDAxMzgxKS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXMuaW46CisJICAqIGdzdC9nc3RyZWdpc3RyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2NsYXNzX2luaXQpOgorCSAgRG9jdW1lbnQgcmVnaXN0cnkgc2lnbmFscyBhbmQgbWFrZSBndGstZG9jIHBpY2sgdGhlbSB1cCAoIzQwMTM4MSkuCisKKzIwMDctMDEtMjYgMTg6MjQ6NTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGRvY3MvcHdnL2J1aWxkaW5nLXRlc3RhcHAueG1sOiBBZGQgc29tZSBhdWRpb2NvbnZlcnRzIGFuZCBhdWRpb3Jlc2FtcGxlIHRvIHRoZSBwaXBlbGluZSwgYW5kIHNvbWUgbW9yZSBjb21tZW50cyBhbmQgZS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcHdnL2J1aWxkaW5nLXRlc3RhcHAueG1sOgorCSAgQWRkIHNvbWUgYXVkaW9jb252ZXJ0cyBhbmQgYXVkaW9yZXNhbXBsZSB0byB0aGUgcGlwZWxpbmUsIGFuZCBzb21lCisJICBtb3JlIGNvbW1lbnRzIGFuZCBlcnJvciBoYW5kbGluZy4KKworMjAwNy0wMS0yNiAxMzowNzozNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZG9jcy86IEZpeCB0eXBvICgjNDAwOTg3KS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL21hbnVhbC9tYW51YWwueG1sOgorCSAgKiBkb2NzL3B3Zy9wd2cueG1sOgorCSAgRml4IHR5cG8gKCM0MDA5ODcpLgorCisyMDA3LTAxLTI2IDA5OjM3OjAzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0Y2Fwcy5jOiBJbml0IGNhcHMgZmxhZ3MgdG9vLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RjYXBzLmM6IChnc3Rfc3RhdGljX2NhcHNfZ2V0KToKKwkgIEluaXQgY2FwcyBmbGFncyB0b28uCisKKzIwMDctMDEtMjUgMTc6NTQ6MDcgKzAwMDAgIEppbmRyaWNoIE1ha292aWNrYSA8amluZHJpY2gubWFrb3ZpY2tAaXRvbmlzLnR2PgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogSWYgbm90IHVzaW5nIG1tYXAnZWQgZmlsZXMgdHJ5IHRvIHNlZWsgdG8gdGhlIGVuZCBpbnN0ZWFkIG9mIHRoZSBzdGFydCB0byBkZXRlcm1pbmUgd2guLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IEppbmRyaWNoIE1ha292aWNrYSA8amluZHJpY2gubWFrb3ZpY2sgYXQgaXRvbmlzIGRvdCB0dj4KKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IChnc3RfZmlsZV9zcmNfc3RhcnQpOgorCSAgSWYgbm90IHVzaW5nIG1tYXAnZWQgZmlsZXMgdHJ5IHRvIHNlZWsgdG8gdGhlIGVuZCBpbnN0ZWFkIG9mIHRoZQorCSAgc3RhcnQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgd2UgY2FuIHNlZWsgYXQgYWxsLiBUaGlzIGZpeGVzIHRoZSBjYXNlCisJICBvZiAyR0IrIGZpbGVzIG92ZXIgTkZTLCB3aGVyZSBzZWVrcyBpbiB0aGUgZmlyc3QgMkdCIGNhbiBzdWNjZWVkIGJ1dAorCSAgc2Vla3MgZm9yIGV2ZXJ5dGhpbmcgYWZ0ZXJ3YXJkcyBmYWlsLiBGaXhlcyAjNDAwNjU2CisKKzIwMDctMDEtMjUgMTc6NDE6MzkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RjYXBzLmM6IEFkZCBzb21lIHJlZmNvdW50IGRlYnVnZ2luZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0Y2Fwcy5jOiAoX2dzdF9jYXBzX2ZyZWUpLCAoZ3N0X3N0YXRpY19jYXBzX2dldCk6CisJICBBZGQgc29tZSByZWZjb3VudCBkZWJ1Z2dpbmcuCisJICBNYWtlIGdzdF9zdGF0aWNfY2Fwc19nZXQgdGhyZWFkc2FmZSwgd2hpY2ggaXMgbmVlZGVkIHdoZW4gYXV0b3BsdWdnaW5nCisJICBpbiBtdWx0aXBsZSBzdHJlYW1pbmcgdGhyZWFkcy4KKworMjAwNy0wMS0yNSAxMDo1MDowMyArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkgIEFQSTogZ3N0X2FkYXB0ZXJfY29weSgpIHRoYXQgY2FuIHJlZHVjZSB0aGUgYW1vdW50IG9mIG1lbWNweSB3aGVuIGdldHRpbmcgZGF0YSBmcm9tIHRoZSBhZGFwdGVyLiBGaXhlcyAjMzg4MjAxLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogRGF2aWQgU2NobGVlZiA8ZHMgYXQgc2NobGVlZiBkb3Qgb3JnPgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzogKGdzdF9hZGFwdGVyX2NvcHkpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuaDoKKwkgIEFQSTogZ3N0X2FkYXB0ZXJfY29weSgpIHRoYXQgY2FuIHJlZHVjZSB0aGUgYW1vdW50IG9mIG1lbWNweSB3aGVuCisJICBnZXR0aW5nIGRhdGEgZnJvbSB0aGUgYWRhcHRlci4gRml4ZXMgIzM4ODIwMS4KKworMjAwNy0wMS0yNSAxMDoxNDowOSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IEluIHByaW50IHN0YXRlbWVudHMsICIleCIgaXMgZm9yIGd1aW50LiBGaXhlcyBidWlsZCBvbiBtYWNvc3guCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IChnc3RfcmVnaXN0cnlfYmluYXJ5X3JlYWRfY2FjaGUpOgorCSAgSW4gcHJpbnQgc3RhdGVtZW50cywgIiV4IiBpcyBmb3IgZ3VpbnQuIEZpeGVzIGJ1aWxkIG9uIG1hY29zeC4KKworMjAwNy0wMS0yNCAxMTozMjowMCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IFNtYWxsIGZpeC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkgIChnc3RfbXVsdGlfcXVldWVfbG9vcCk6CisJICBTbWFsbCBmaXguCisJICAoc2luZ2xlX3F1ZXVlX292ZXJydW5fY2IpLCAoc2luZ2xlX3F1ZXVlX3VuZGVycnVuX2NiKSwKKwkgIChzaW5nbGVfcXVldWVfY2hlY2tfZnVsbCksIChnc3Rfc2luZ2xlX3F1ZXVlX25ldyk6CisJICBJbXBsZW1lbnQgc2luZ2xlIHF1ZXVlIGdyb3d0aCBzeXN0ZW0uCisJICBUaGlzIHVzZXMgdGhlIGV4dHJhLXNpemUgcHJvcGVydGllcywgYW5kIHdpbGwgZ3JvdyBzaW5nbGUgcXVldWVzIGJ5CisJICB0aGF0IG11Y2ggaWYgb25lIGdvZXMgZnVsbCB3aGVyZWFzIHRoZXJlIGFyZSBvdGhlcnMgZW1wdHkuIFRoaXMgaXMKKwkgIGNhbGxlZCBleHRyYS1tb2RlIGluIHRoZSBjb2RlLgorCSAgV2hlbiBhIHNpbmdsZSBxdWV1ZSdzIGxldmVscyBnbyBiYWNrIGJlbG93IHRoZSBpbml0aWFsIG1heC1zaXplCisJICBsaW1pdHMsIGl0IGlzIG5vIGxvbmdlciBpbiBleHRyYS1tb2RlLiBUaGlzIGlzIHRvIGVuc3VyZSB3ZSBkb24ndAorCSAgY29uc3VtZSB0b28gbXVjaCBtZW1vcnkuCisJICBGaXhlcyAjMzk5ODc1CisKKzIwMDctMDEtMjMgMTM6NTA6NDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3QuYzogTWFrZSB3YXJuaW5nIGFib3V0IGxhdGUgZ190aHJlYWRfaW5pdCgpIGNhbGxzIGEgYml0IG1vcmUgZXhwbGljaXQsIHNvIHRoYXQgaXQncyBtb3JlIG9idmlvdXMgdG8gYXBwbGljYXRpby4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3QuYzogKGdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXApOgorCSAgTWFrZSB3YXJuaW5nIGFib3V0IGxhdGUgZ190aHJlYWRfaW5pdCgpIGNhbGxzIGEgYml0IG1vcmUgZXhwbGljaXQsCisJICBzbyB0aGF0IGl0J3MgbW9yZSBvYnZpb3VzIHRvIGFwcGxpY2F0aW9uIGRldmVsb3BlcnMgd2hhdCB0aGV5IG5lZWQKKwkgIHRvIGRvIGlmIGEgdXNlciBmaWxlcyBhIGJ1ZyBhZ2FpbnN0IHRoZWlyIGFwcGxpY2F0aW9uLgorCisyMDA3LTAxLTIyIDE2OjAwOjM5ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogUmVtb3ZlIHByZXZpb3VzIGhhY2sgb2YgdW5zZXR0aW5nIHRoZSBmbHVzaGluZyBmbGFnIGZvciB0aGUgc291cmNlIHBhZCBpbnN0ZWFkIG9mIGEuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKKwkgIChnc3RfbXVsdGlfcXVldWVfc3JjX2FjdGl2YXRlX3B1c2gpLCAoZ3N0X3NpbmdsZV9xdWV1ZV9uZXcpOgorCSAgUmVtb3ZlIHByZXZpb3VzIGhhY2sgb2YgdW5zZXR0aW5nIHRoZSBmbHVzaGluZyBmbGFnIGZvciB0aGUgc291cmNlIHBhZAorCSAgaW5zdGVhZCBvZiBhY3RpdmF0aW5nIGl0LiBJbnN0ZWFkLCBmaXggdGhlIHNvdXJjZSBwYWQgYWN0aXZhdGUgZnVuY3Rpb24KKwkgIHNvIHRoYXQgaXQgbm8gbG9uZ2VyIGRlcGVuZHMgb24gaGF2aW5nIGEgcGFyZW50IHNldCBvciBub3QuCisKKzIwMDctMDEtMjIgMTQ6MzA6MjcgKzAwMDAgIENhcmxvcyBTYW5tYXJ0aW4gRG9taW5ndWV6IDxjc2FubWFydGluQGlnYWxpYS5jb20+CisKKwkgIGRvY3MvbWFudWFsL2Jhc2ljcy1idXMueG1sOiBGaXggZXhhbXBsZSBjb2RlLCBnc3RfZWxlbWVudF91bnJlZigpIGRvZXNuJ3QgZXhpc3QgYW55IGxvbmdlci4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IENhcmxvcyBTYW5tYXJ0aW4gRG9taW5ndWV6IDxjc2FubWFydGluQGlnYWxpYS5jb20+CisJICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1idXMueG1sOgorCSAgRml4IGV4YW1wbGUgY29kZSwgZ3N0X2VsZW1lbnRfdW5yZWYoKSBkb2Vzbid0IGV4aXN0IGFueSBsb25nZXIuCisKKzIwMDctMDEtMjEgMjA6MjQ6MTEgKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hbmF1d0Bza3luZXQuYmU+CisKKwkgIGdzdC9nc3RwYWQuYzogRml4IHR3byBkb2NzIHR5cG9lcyAoIzM5OTA5NCkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBNYXJrIE5hdXdlbGFlcnRzIDxtYW5hdXcgYXQgc2t5bmV0IGJlPgorCSAgKiBnc3QvZ3N0cGFkLmM6CisJICBGaXggdHdvIGRvY3MgdHlwb2VzICgjMzk5MDk0KS4KKworMjAwNy0wMS0xOSAwOToxNToyMSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOiBBZGQgZ3N0LXBsdWdpbnMtYmFzZS9nc3QvdXRpbHMvIHRvIExEX0xJQlJBUllfUEFUSCBzbyB0aGF0IHBsdWdpbnMgZGVwZW5kaW5nIG9uIGxpYmdzdGJhc2V1Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOgorCSAgQWRkIGdzdC1wbHVnaW5zLWJhc2UvZ3N0L3V0aWxzLyB0byBMRF9MSUJSQVJZX1BBVEggc28gdGhhdCBwbHVnaW5zCisJICBkZXBlbmRpbmcgb24gbGliZ3N0YmFzZXV0aWxzIGNhbiB3b3JrIGluIHVuaW5zdGFsbGVkIGVudmlyb25tZW50LgorCisyMDA3LTAxLTE4IDEyOjAwOjIzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC86IEFkZCBtb3JlIGRvY3MgcmVnYXJkaW5nIHRhZyBtZXJnZS1tb2RlcyBhbmQgd2hlbiB0byBzZW5kIHRhZ3MuIEZpeCAnc2luY2UnIHN0YXRlbWVudCBmb3IgbmV3IHRhZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dGFnbGlzdC5oOgorCSAgKiBnc3QvZ3N0dGFnc2V0dGVyLmM6CisJICBBZGQgbW9yZSBkb2NzIHJlZ2FyZGluZyB0YWcgbWVyZ2UtbW9kZXMgYW5kIHdoZW4gdG8gc2VuZCB0YWdzLiBGaXggJ3NpbmNlJworCSAgc3RhdGVtZW50IGZvciBuZXcgdGFnLgorCisyMDA3LTAxLTE3IDE0OjMzOjM5ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogV2hlbiBkeW5hbWljYWxseSBjcmVhdGluZyBzaW5nbGUgcXVldWVzLCBhY3RpdmF0ZSBzaW5rcGFkIGJlZm9yZSBhZGRpbmcgaXQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IChnc3Rfc2luZ2xlX3F1ZXVlX25ldyk6CisJICBXaGVuIGR5bmFtaWNhbGx5IGNyZWF0aW5nIHNpbmdsZSBxdWV1ZXMsIGFjdGl2YXRlIHNpbmtwYWQgYmVmb3JlIGFkZGluZworCSAgaXQuCisJICBXZSBzaG91bGQgYmUgZG9pbmcgdGhlIHNhbWUgdGhpbmcgZm9yIHRoZSBzb3VyY2UgcGFkLCBidXQgd2UgY2FuJ3QKKwkgIHNpbmNlIGl0IHdvdWxkIGNhbGwgYSBtZXRob2Qgd2hpY2ggbmVlZHMgdGhlIHBhcmVudCB0byBiZSBzZXQgaW4gb3JkZXIKKwkgIHRvIHdvcmsgcHJvcGVydGx5LiBJbnN0ZWFkIG9mIGFjdGl2YXRpbmcgdGhlIHNvdXJjZSBwYWQsIHdlIGp1c3QgdW5zZXQKKwkgIHRoZSBmbHVzaGluZyBmbGFnLCB3aGljaCBpcyB0aGUgbWluaW1hbCByZXF1aXJlbWVudCBmb3IgYWRkaW5nIGEgcGFkCisJICB0byBhbiBlbGVtZW50IGluIGEgc3RhdGUgZ3JlYXRlciB0aGFuIFJFQURZLgorCisyMDA3LTAxLTE3IDE0OjI2OjQ2ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6IEFkZCBEWUxEX0xJQlJBUllfUEFUSCBkZWNsYXJhdGlvbnMgc28gd2UgY2FuIGFsc28gdXNlIHRoaXMgc2NyaXB0IG9uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOgorCSAgQWRkIERZTERfTElCUkFSWV9QQVRIIGRlY2xhcmF0aW9ucyBzbyB3ZSBjYW4gYWxzbyB1c2UgdGhpcyBzY3JpcHQgb24KKwkgIE1hYyBPUyBYLgorCisyMDA3LTAxLTE3IDEyOjMxOjAxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICB0ZXN0cy9jaGVjay86IEFkZCBBQkkgc3RydWN0cyBmb3IgSFBQQSAoc2VlICMzOTM3OTYpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RhYmkuYzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9ocHBhLmg6CisJICAqIHRlc3RzL2NoZWNrL2xpYnMvbGlic2FiaS5jOgorCSAgKiB0ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9ocHBhLmg6CisJICBBZGQgQUJJIHN0cnVjdHMgZm9yIEhQUEEgKHNlZSAjMzkzNzk2KS4KKworMjAwNy0wMS0xNiAwOTo1Nzo1MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzogQWN0dWFsbHkgd3JpdGUgQUJJIHN0cnVjdHMgdG8gdGhlIGZpbGUgc3BlY2lmaWVkIGluIHRoZSBHU1RfQUJJIGVudmlyb25tZW50IHZhcmlhYmxlLCBhcyB0Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzogKGdzdF9jaGVja19hYmlfbGlzdCk6CisJICBBY3R1YWxseSB3cml0ZSBBQkkgc3RydWN0cyB0byB0aGUgZmlsZSBzcGVjaWZpZWQgaW4gdGhlIEdTVF9BQkkKKwkgIGVudmlyb25tZW50IHZhcmlhYmxlLCBhcyB0aGUgbWVzc2FnZSB3ZSBwcmludCBjbGFpbXMgd2Ugd291bGQuCisKKzIwMDctMDEtMTUgMTQ6NTE6MDkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgdGVzdHMvY2hlY2svZ3N0L2dzdHRhc2suYzogRml4IGhlYWRlciBjb21tZW50LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R0YXNrLmM6CisJICBGaXggaGVhZGVyIGNvbW1lbnQuCisKKzIwMDctMDEtMTUgMTQ6Mzk6NTEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdHRhZ2xpc3QuYzogQ2hhbmdlIHRhZyB0eXBlIGZyb20gU1RSSU5HIHRvIERPVUJMRS4gQXBwbHkgQ2hhbmdlTG9nIHN1cmdlcnkgZm9yIG15IHByZXZpb3VzIHR3byBlbnRyaWVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R0YWdsaXN0LmM6IChfZ3N0X3RhZ19pbml0aWFsaXplKToKKwkgIENoYW5nZSB0YWcgdHlwZSBmcm9tIFNUUklORyB0byBET1VCTEUuIEFwcGx5IENoYW5nZUxvZyBzdXJnZXJ5IGZvciBteQorCSAgcHJldmlvdXMgdHdvIGVudHJpZXMuCisKKzIwMDctMDEtMTUgMTM6NTc6MTIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgYWRkIHRhZyBzdXBwb3J0IGZvciBiZWF0LXBlci1taW51dGUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBnc3QvZ3N0dGFnbGlzdC5jOiAoX2dzdF90YWdfaW5pdGlhbGl6ZSk6CisJICAqIGdzdC9nc3R0YWdsaXN0Lmg6CisJICBhZGQgdGFnIHN1cHBvcnQgZm9yIGJlYXQtcGVyLW1pbnV0ZQorCisyMDA3LTAxLTE1IDEyOjE4OjQ2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS4qOiB1c2UgZ2xpYiB0eXBlcywgY2xlYW51cCBjb21tZW50cywgaW1wZW1lbnQgaW50ZXJmYWNlcyBhbmQgdXJpLXR5cGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IChnc3RfcmVnaXN0cnlfYmluYXJ5X3dyaXRlKSwKKwkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2luaXRpYWxpemVfbWFnaWMpLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfc2F2ZV9zdHJpbmcpLCAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9tYWtlX2RhdGEpLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfc2F2ZV9wYWRfdGVtcGxhdGUpLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfc2F2ZV9mZWF0dXJlKSwKKwkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X3NhdmVfcGx1Z2luKSwKKwkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X3dyaXRlX2NhY2hlKSwKKwkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2NoZWNrX21hZ2ljKSwKKwkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2xvYWRfcGFkX3RlbXBsYXRlKSwKKwkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2xvYWRfZmVhdHVyZSksCisJICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9sb2FkX3BsdWdpbiksCisJICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9yZWFkX2NhY2hlKToKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5Lmg6CisJICB1c2UgZ2xpYiB0eXBlcywgY2xlYW51cCBjb21tZW50cywgaW1wZW1lbnQgaW50ZXJmYWNlcyBhbmQgdXJpLXR5cGVzCisKKzIwMDctMDEtMTMgMTA6MzM6NDEgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdHBhZC5jIChnc3RfcGFkX2dldF9yYW5nZSwgZ3N0X3BhZF9wdWxsX3JhbmdlKTogQWxsb3cgZ2V0cmFuZ2UoKSB0byByZXR1cm4gYnVmZmVycyB3aXRoIG90aGVyIGNhcHMsIHdoaWxlIHdlIGZpLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDctMDEtMTMgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3RwYWQuYyAoZ3N0X3BhZF9nZXRfcmFuZ2UsIGdzdF9wYWRfcHVsbF9yYW5nZSk6IEFsbG93CisJICBnZXRyYW5nZSgpIHRvIHJldHVybiBidWZmZXJzIHdpdGggb3RoZXIgY2Fwcywgd2hpbGUgd2UgZml4CisJICBkZW11eGVycyBhbmQgdHlwZWZpbmQsIG9yIG90aGVyd2lzZSBjaGFuZ2UgcGFydC1uZWdvdGlhdGlvbi50eHQuCisKKzIwMDctMDEtMTIgMjE6MTM6MzIgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmMgKGdzdF9iYXNlX3RyYW5zZm9ybV9hY3RpdmF0ZSk6IEZhY3RvciBzdGFydC9zdG9wIGludG8gdGhpcyBwcml2YXRlIGZ1bmN0aW9uIGluc3RlYWQgLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDctMDEtMTIgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jIChnc3RfYmFzZV90cmFuc2Zvcm1fYWN0aXZhdGUpOgorCSAgRmFjdG9yIHN0YXJ0L3N0b3AgaW50byB0aGlzIHByaXZhdGUgZnVuY3Rpb24gaW5zdGVhZCBvZiBwYXJ0aWFsbHkKKwkgIGluIGFjdGl2YXRlIGZ1bmN0aW9ucyBhbmQgcGFydGlhbGx5IGluIHRoZSBjaGFuZ2Vfc3RhdGUgZnVuY3Rpb24uCisJICBGaXhlcyBzZXR1cCBiZWZvcmUgdGhlIGVsZW1lbnQgaGFzIGNoYW5nZWQgZnJvbSBSRUFEWS0+UEFVU0VELCBhcworCSAgaXMgdGhlIGNhc2UgaW4gcHVsbC1tb2RlIHBpcGVsaW5lcy4KKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc2lua19hY3RpdmF0ZV9wdXNoKQorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zcmNfYWN0aXZhdGVfcHVsbCk6IFJlZmFjdG9yIHRvIHVzZQorCSAgZ3N0X2Jhc2VfdHJhbnNmb3JtX2FjdGl2YXRlKCkuCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NoYW5nZV9zdGF0ZSk6IFJlbW92ZWQsIG5vdCBuZWVkZWQgYW55IG1vcmUuCisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYyAoZ3N0X2Jhc2Vfc2lua19uZWdvdGlhdGVfcHVsbCk6CisJICBUcnVuY2F0ZSBiZWZvcmUgZml4YXRpbmcuCisKKzIwMDctMDEtMTIgMTg6MDY6MjkgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jIChnc3RfYmFzZV9zaW5rX25lZ290aWF0ZV9wdWxsKTogRG9uJ3Qgc2V0X2NhcHMoKSBpZiB0aGUgcmVzdWx0IG9mIGZpeGF0aW5nIGlzIEFOWSwgYXMgaXQnLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDctMDEtMTIgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYyAoZ3N0X2Jhc2Vfc2lua19uZWdvdGlhdGVfcHVsbCk6CisJICBEb24ndCBzZXRfY2FwcygpIGlmIHRoZSByZXN1bHQgb2YgZml4YXRpbmcgaXMgQU5ZLCBhcyBpdCdzIG5vdAorCSAgc3VwcG9ydGVkLCBhbmQgbm90IG5lY2Vzc2FyeSBpbiB0aGUgY2FzZSBvZiBhIGxpbmsgd2l0aCBubworCSAgdGVtcGxhdGUgY2FwcyBvbiBlaXRoZXIgc2lkZS4gRml4ZXMgdGVzdHMvY2hlY2svbGlicy9iYXNlc3JjIGluCisJICBzb21lIHB1bGwtbW9kZSB0ZXN0cy4KKworMjAwNy0wMS0xMiAxNTo1NjowMCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYyAoX0dzdEJhc2VUcmFuc2Zvcm1Qcml2YXRlKTogKGdzdF9iYXNlX3RyYW5zZm9ybV9pbml0LCBnc3RfYmFzZV90cmFuc2Zvcm1fc2lua19hY3RpdmEuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNy0wMS0xMiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmMgKF9Hc3RCYXNlVHJhbnNmb3JtUHJpdmF0ZSk6CisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2luaXQsIGdzdF9iYXNlX3RyYW5zZm9ybV9zaW5rX2FjdGl2YXRlX3B1c2gpCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NyY19hY3RpdmF0ZV9wdWxsKToKKwkgIFRyYWNrIHRoZSBhY3RpdmF0aW9uIG1vZGUuCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldGNhcHMpOiBJbiBwdWxsIG1vZGUsIHdoZW4gYWN0aXZhdGluZyB0aGUKKwkgIHNyYyBwYWQsIGFmdGVyIGFjdGl2YXRpbmcgdGhlIHNpbmsgcGFkLCBhY3RpdmF0ZSB0aGUgc2luayBwYWQncworCSAgcGVlciwgYXMgZGlzY3Vzc2VkIGluIHBhcnQtbmVnb3RpYXRpb24udHh0LgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmMgKGdzdF9iYXNlX3NyY19maXhhdGUpOiBBZGQgZml4YXRlCisJICB2bWV0aG9kLCBhcyBpbiBiYXNlc2luay4KKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOiBSZWZvcm1hdCBkb2NzLCBhZGQgZml4YXRlIHZtZXRob2QuCisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYyAoZ3N0X2Jhc2Vfc2lua19wYWRfc2V0Y2Fwcyk6IEluIHB1bGwKKwkgIG1vZGUsIGZpcnN0IHByb3h5IHRoZSBzZXRjYXBzIHRvIHRoZSBwZWVyIHBhZC4KKwkgIChnc3RfYmFzZV9zaW5rX3BhZF9maXhhdGUpOiBBZGQgYSBmaXhhdGUgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUKKwkgIG5ldyBmaXhhdGUgdm1ldGhvZC4KKwkgIChnc3RfYmFzZV9zaW5rX2RlZmF1bHRfYWN0aXZhdGVfcHVsbCk6IFJlbmFtZSBmcm9tCisJICBnc3RfYmFzZV9zaW5rX2FjdGl2YXRlX3B1bGwuCisJICAoZ3N0X2Jhc2Vfc2lua19uZWdvdGlhdGVfcHVsbCk6IE5ldyBmdW5jdGlvbiwgcGVyZm9ybXMgbmVnb3RpYXRpb24KKwkgIGluIHB1bGwgbW9kZSBiZWZvcmUgY2FsbGluZyA6OmFjdGl2YXRlX3B1bGwoKS4KKwkgIChnc3RfYmFzZV9zaW5rX3BhZF9hY3RpdmF0ZV9wdWxsKTogQWN0dWFsbHkgY2FsbCB0aGUgYWN0aXZhdGVfcHVsbAorCSAgdm1ldGhvZCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLiBJIGhhdmUgbm8gaWRlYSBob3cKKwkgIHRoaXMgd29ya2VkIGJlZm9yZS4gTmVnb3RpYXRlIGJlZm9yZSBjYWxsaW5nIGFjdGl2YXRlX3B1bGwuCisKKzIwMDctMDEtMTIgMTU6NDg6MDAgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdHBhZC5jIChnc3RfcGFkX2FjdGl2YXRlX3B1bGwpOiBSZWZ1c2UgdG8gYWN0aXZhdGUgdW5saW5rZWQgc2luayBwYWRzIGluIHB1bGwgbW9kZS4gSW4gYWRkaXRpb24gdG8gYmVpbmcgY29ycmVjLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDctMDEtMTIgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3RwYWQuYyAoZ3N0X3BhZF9hY3RpdmF0ZV9wdWxsKTogUmVmdXNlIHRvIGFjdGl2YXRlIHVubGlua2VkCisJICBzaW5rIHBhZHMgaW4gcHVsbCBtb2RlLiBJbiBhZGRpdGlvbiB0byBiZWluZyBjb3JyZWN0LCBmaXhlcworCSAgZmlsZXNyYyAhIGRlY29kZWJpbiAhIGlkZW50aXR5ICEgZmFrZXNpbmsuCisJICAoZ3N0X3BhZF9nZXRfcmFuZ2UsIGdzdF9wYWRfcHVsbF9yYW5nZSk6IERvbid0IGNhbGwKKwkgIGdzdF9wYWRfc2V0X2NhcHMoKSBpZiB0aGUgY2FwcyBjaGFuZ2VzOyBpbnN0ZWFkIGVycm9yIG91dCB3aXRoCisJICBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRCwgYXMgZGlzY3Vzc2VkIGluIHBhcnQtbmVnb3RpYXRpb24udHh0LgorCisyMDA3LTAxLTEyIDE1OjM5OjU3ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGRvY3MvZGVzaWduL3BhcnQtbmVnb3RpYXRpb24udHh0OiBVcGRhdGUgd2l0aCBtb3JlIHBvbGljeS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNy0wMS0xMiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZG9jcy9kZXNpZ24vcGFydC1uZWdvdGlhdGlvbi50eHQ6IFVwZGF0ZSB3aXRoIG1vcmUgcG9saWN5LgorCisyMDA3LTAxLTEyIDEyOjQ4OjI1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBsaWJzL2dzdC9jaGVjay86IEFkZCBHX0JFR0lOX0RFQ0xTIGFuZCBHX0VORF9ERUNMUy4gTW92ZSBHU1RfQ0hFQ0tfTUFJTiB3aGVyZSBpdCBiZWxvbmdzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGJ1ZmZlcnN0cmF3Lmg6CisJICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6CisJICBBZGQgR19CRUdJTl9ERUNMUyBhbmQgR19FTkRfREVDTFMuIE1vdmUgR1NUX0NIRUNLX01BSU4gd2hlcmUgaXQKKwkgIGJlbG9uZ3MuCisKKzIwMDctMDEtMTIgMTA6NTM6NTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHRlc3RzL2NoZWNrLzogQWRkIG1pbmltYWwgdW5pdCB0ZXN0IGZvciBiZWZvcmVtZW50aW9uZWQgR3N0VGFnU2V0dGVyIGJ1Zy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgICogdGVzdHMvY2hlY2svZ3N0Ly5jdnNpZ25vcmU6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R0YWdzZXR0ZXIuYzogKGdzdF9kdW1teV9lbmNfYWRkX2ludGVyZmFjZXMpLAorCSAgKGdzdF9kdW1teV9lbmNfYmFzZV9pbml0KSwgKGdzdF9kdW1teV9lbmNfY2xhc3NfaW5pdCksCisJICAoZ3N0X2R1bW15X2VuY19pbml0KSwgKHRhZ19saXN0X2ZvcmVhY2gpLCAodGFnX3NldHRlcl9saXN0X2xlbmd0aCksCisJICAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3RhZ19zZXR0ZXJfc3VpdGUpOgorCSAgQWRkIG1pbmltYWwgdW5pdCB0ZXN0IGZvciBiZWZvcmVtZW50aW9uZWQgR3N0VGFnU2V0dGVyIGJ1Zy4KKworMjAwNy0wMS0xMiAxMDo0ODo0OSArMDAwMCAgUmVuw6kgU3RhZGxlciA8bWFpbEByZW5lc3RhZGxlci5kZT4KKworCSAgZ3N0L2dzdHRhZ3NldHRlci5jOiBnc3RfdGFnX2xpc3RfbWVyZ2UoKSByZXR1cm5zIGEgbmV3IGxpc3QsIHNvIGl0J3Mgbm90IHRoZSBiZXN0IGlkZWEgdG8gaW5nb3JlIGl0cyByZXR1cm4gdmFsdWUuIEVmLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBSZW7DqSBTdGFkbGVyIDxtYWlsIGF0IHJlbmVzdGFkbGVyIGRvdCBkZT4KKwkgICogZ3N0L2dzdHRhZ3NldHRlci5jOiAoZ3N0X3RhZ19zZXR0ZXJfbWVyZ2VfdGFncyk6CisJICBnc3RfdGFnX2xpc3RfbWVyZ2UoKSByZXR1cm5zIGEgbmV3IGxpc3QsIHNvIGl0J3Mgbm90IHRoZSBiZXN0IGlkZWEKKwkgIHRvIGluZ29yZSBpdHMgcmV0dXJuIHZhbHVlLiBFZmZlY3RpdmVseSBtZWFudCB0aGF0IHRhZ3MgY291bGQgb25seQorCSAgYmUgbWVyZ2VkIG9uIGEgR3N0VGFnU2V0dGVyIG9uY2UgdXNpbmcgX21lcmdlX3RhZ3MoKS4gRml4ZXMgIzM5NTU1NC4KKwkgIEFsc28gYWRkIGZ1bmN0aW9uIGd1YXJkIHRvIHJlcXVpcmUgYSBub24tTlVMTCB0YWdsaXN0IGFzIGlucHV0IChoYXMKKwkgIGFsd2F5cyBiZWVuIHNvIGR1ZSB0byBnc3RfdGFnX2xpc3RfY29weSgpLCBqdXN0IG1ha2luZyBpdCBleHBsaWNpdCkuCisKKzIwMDctMDEtMTEgMTU6MDM6MDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGRvY3MvcmFuZG9tL2RyYWZ0LW1pc3NpbmctcGx1Z2lucy50eHQ6IFNvbWUgYWRkaXRpb25zOiBtZW50aW9uIG5ldyBBUEkgdGhhdCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGF0IHRoZSB2YXJpb3VzIHN0YS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcmFuZG9tL2RyYWZ0LW1pc3NpbmctcGx1Z2lucy50eHQ6CisJICBTb21lIGFkZGl0aW9uczogbWVudGlvbiBuZXcgQVBJIHRoYXQgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBhdCB0aGUKKwkgIHZhcmlvdXMgc3RhZ2VzOyBzaG9ydCBibG9iIGFib3V0IG5ldyBnc3QtaW5zcGVjdCBpbnRyb3NwZWN0aW9uCisJICBvcHRpb247IG1lbnRpb24gcG90ZW50aWFsIGZ1dHVyZSBwcm9ibGVtIHdpdGggcGx1Z2lucyB0aGF0IGhhdmUKKwkgIGEgZHluYW1pYyBsaXN0IG9mIGVsZW1lbnRzIChzdWNoIGFzIGxhZHNwYSwgcGl0ZmRsbCwgbGlidmlzdWFsKS4KKworMjAwNy0wMS0xMSAxNDoxNjoyMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgdG9vbHMvZ3N0LWluc3BlY3QuYzogQWRkIC0tcHJpbnQtcGx1Z2luLWF1dG8taW5zdGFsbC1pbmZvIG9wdGlvbiB0byBnc3QtaW5zcGVjdCwgc28gd2UgY2FuIGludHJvc3BlY3QgcGx1Z2luIGZpbGVzIGFuLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzoKKwkgIChwcmludF9wbHVnaW5fYXV0b21hdGljX2luc3RhbGxfaW5mb19jb2RlY3MpLAorCSAgKHByaW50X3BsdWdpbl9hdXRvbWF0aWNfaW5zdGFsbF9pbmZvX3Byb3RvY29scyksCisJICAocHJpbnRfcGx1Z2luX2F1dG9tYXRpY19pbnN0YWxsX2luZm8pLCAobWFpbik6CisJICBBZGQgLS1wcmludC1wbHVnaW4tYXV0by1pbnN0YWxsLWluZm8gb3B0aW9uIHRvIGdzdC1pbnNwZWN0LCBzbyB3ZSBjYW4KKwkgIGludHJvc3BlY3QgcGx1Z2luIGZpbGVzIGFuZCBnZXQgbWFjaGluZS1wYXJzYWJsZSBvdXRwdXQgdGhhdCBjb3JyZXNwb25kcworCSAgdG8gdGhlIGxhc3QgYml0IG9mIHRoZSBtaXNzaW5nLXBsdWdpbiBpbnN0YWxsZXIgc3RyaW5nIChzbWFsbCBnb3RjaGE6CisJICBkb2Vzbid0IHRha2UgaW50byBhY2NvdW50IHJhbmtzKS4KKworMjAwNy0wMS0xMSAxMzo0NTo1MSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBjb21taXQgYmluYXJ5IHJlZ2lzdHJ5IChkaXNhYmxlZCBieSBkZWZhdWx0LCBzZWUgIzM1OTY1MykKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9NYWtlZmlsZS5hbToKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6IChnc3RfcmVnaXN0cnlfbG9va3VwX2ZlYXR1cmVfbG9ja2VkKSwKKwkgIChnc3RfcmVnaXN0cnlfbG9va3VwX2xvY2tlZCk6CisJICAqIGdzdC9nc3RyZWdpc3RyeS5oOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogKGdzdF9yZWdpc3RyeV9iaW5hcnlfd3JpdGUpLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfaW5pdGlhbGl6ZV9tYWdpYyksCisJICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9zYXZlX3N0cmluZyksCisJICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9zYXZlX3BhZF90ZW1wbGF0ZSksCisJICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9zYXZlX2ZlYXR1cmUpLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfc2F2ZV9wbHVnaW4pLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfd3JpdGVfY2FjaGUpLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfY2hlY2tfbWFnaWMpLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfbG9hZF9wYWRfdGVtcGxhdGUpLAorCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfbG9hZF9mZWF0dXJlKSwKKwkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2xvYWRfcGx1Z2luKSwKKwkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X3JlYWRfY2FjaGUpOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuaDoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6IChsb2FkX2ZlYXR1cmUpLAorCSAgKGdzdF9yZWdpc3RyeV94bWxfcmVhZF9jYWNoZSk6CisJICBjb21taXQgYmluYXJ5IHJlZ2lzdHJ5IChkaXNhYmxlZCBieSBkZWZhdWx0LCBzZWUgIzM1OTY1MykKKworMjAwNy0wMS0xMSAxMDo0ODo1OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOiBGaXggJ21ha2UgY2hlY2snIHRvby4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6ICh0ZXN0X2dldF9hbGxvd2VkX2NhcHMpOgorCSAgRml4ICdtYWtlIGNoZWNrJyB0b28uCisKKzIwMDctMDEtMTAgMjE6MjQ6MDggKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1uZWdvdGlhdGlvbi50eHQ6IEZpeCBhIHR5cG8sIGFkZCBhIGNvdXBsZSBub3Rlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNy0wMS0xMCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZG9jcy9kZXNpZ24vcGFydC1uZWdvdGlhdGlvbi50eHQ6IEZpeCBhIHR5cG8sIGFkZCBhIGNvdXBsZQorCSAgbm90ZXMuCisKKzIwMDctMDEtMTAgMjE6MTU6MDggKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1uZWdvdGlhdGlvbi50eHQ6IFVwZGF0ZSB3aXRoLCB1bSwgb25lIHdheSB0aGF0IHB1bGwtbW9kZSBuZWdvdGlhdGlvbiBtaWdodCB3b3JrPworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA3LTAxLTEwICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LW5lZ290aWF0aW9uLnR4dDogVXBkYXRlIHdpdGgsIHVtLCBvbmUgd2F5IHRoYXQKKwkgIHB1bGwtbW9kZSBuZWdvdGlhdGlvbiBtaWdodCB3b3JrPworCSAgKiBnc3QvZ3N0cGFkLmg6CisJICAqIGdzdC9nc3RwYWQuYyAoZ3N0X3BhZF9nZXRfYWxsb3dlZF9jYXBzKTogUmVtb3ZlIHRoZSByZXN0cmljdGlvbgorCSAgdGhhdCB0aGUgcGFkIG11c3QgYmUgYSBzcmMgcGFkOyBtYWtlcyBzZW5zZSB0byBjYWxsIGl0IHRoZSBvdGhlcgorCSAgd2F5IGluIHB1bGwgbW9kZSwgYW5kIHRoZSBsb2dpYyBpcyBzeW1tZXRyaWMgYW55d2F5LgorCisyMDA3LTAxLTEwIDE5OjI1OjA5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IEluY2x1ZGUgPHN0ZGlvLmg+IGZvciBmc2Vla28oKS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6CisJICBJbmNsdWRlIDxzdGRpby5oPiBmb3IgZnNlZWtvKCkuCisKKzIwMDctMDEtMTAgMTA6MjE6NDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RldmVudC4qOiBSZXNlcnZlIExBVEVOQ1kgZXZlbnQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGV2ZW50LmM6CisJICAqIGdzdC9nc3RldmVudC5oOgorCSAgUmVzZXJ2ZSBMQVRFTkNZIGV2ZW50LgorCisyMDA3LTAxLTA5IDE4OjA5OjU0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL2Rlc2lnbi9kcmFmdC1sYXRlbmN5LnR4dDogVXBkYXRlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9kcmFmdC1sYXRlbmN5LnR4dDoKKwkgIFVwZGF0ZXMuCisKKzIwMDctMDEtMDkgMTU6Mzg6NTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZGVzaWduL2RyYWZ0LWxhdGVuY3kudHh0OiBVcGRhdGVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL2RyYWZ0LWxhdGVuY3kudHh0OgorCSAgVXBkYXRlcy4KKwkgICogZ3N0L2dzdGVsZW1lbnQuaDoKKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSAgKiBnc3QvZ3N0dHJhY2UuYzoKKwkgIFNtYWxsIHR5cG8gZml4ZXMuCisKKzIwMDctMDEtMDkgMTQ6Mzg6MTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHRlc3RzL2NoZWNrLy5jdnNpZ25vcmU6IElnbm9yZSB0ZXN0LXJlZ2lzdHJ5LnhtbCBhcyB3ZWxsLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrLy5jdnNpZ25vcmU6CisJICBJZ25vcmUgdGVzdC1yZWdpc3RyeS54bWwgYXMgd2VsbC4KKworMjAwNy0wMS0wOSAxMjozNDo0NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiB1bnJlZiBkYXRhIGF0IHRoZSBlbmQgd2hlbiB3ZSBhcmUgZG9uZSB3aXRoIHRoZSBwYWQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RfcGFkc19yZW1vdmVfcGFkKToKKwkgIHVucmVmIGRhdGEgYXQgdGhlIGVuZCB3aGVuIHdlIGFyZSBkb25lIHdpdGggdGhlIHBhZC4KKworMjAwNy0wMS0wOCAyMDozMDoxMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgQVBJOiBhZGQgZ3N0X3VwZGF0ZV9yZWdpc3RyeSgpICgjMzkxMjk2KS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBnc3QvZ3N0LmM6IChsb2FkX3BsdWdpbl9mdW5jKSwgKHNjYW5fYW5kX3VwZGF0ZV9yZWdpc3RyeSksCisJICAoaW5pdF9wb3N0KSwgKGdzdF9kZWluaXQpLCAoZ3N0X3VwZGF0ZV9yZWdpc3RyeSk6CisJICAqIGdzdC9nc3QuaDoKKwkgIEFQSTogYWRkIGdzdF91cGRhdGVfcmVnaXN0cnkoKSAoIzM5MTI5NikuCisJICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cmVnaXN0cnkuYzoKKwkgICogdGVzdHMvY2hlY2svZ3N0Ly5jdnNpZ25vcmU6CisJICBTaW1wbGUgdW5pdCB0ZXN0IGZvciB0aGUgYWJvdmUuCisKKzIwMDctMDEtMDggMTY6MjM6MDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RyZWdpc3RyeS5jOiBQbHVnaW4gZXh0ZW5zaW9uIG9uIEhQLVVYIGlzIC5zbCwgYWRkIHRoYXQgdG8gdGhlIGxpc3Qgb2YgYXBwcm92ZWQgcGx1Z2luIGV4dGVuc2lvbnMgKHNlZSAjMzkzNzk2KS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzogKGdzdF9yZWdpc3RyeV9zY2FuX3BhdGhfbGV2ZWwpOgorCSAgUGx1Z2luIGV4dGVuc2lvbiBvbiBIUC1VWCBpcyAuc2wsIGFkZCB0aGF0IHRvIHRoZSBsaXN0IG9mIGFwcHJvdmVkCisJICBwbHVnaW4gZXh0ZW5zaW9ucyAoc2VlICMzOTM3OTYpLgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICB1bG9uZyA9PiBndWxvbmcuIEZpeGVzIGNvbXBpbGF0aW9uIHdpdGggSFAtVVggY29tcGlsZXIuCisJICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9wYXJzZS1sYXVuY2guYzogKEdTVF9TVEFSVF9URVNUKToKKwkgIEZpeCBjb21waWxhdGlvbiBpZiB2YWxncmluZCBoZWFkZXJzIGFyZSBub3QgYXZhaWxhYmxlLgorCisyMDA3LTAxLTA3IDEwOjIxOjMzICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+CisKKwkgIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOiBBZGQgbmV3IGV4cG9ydGVkIGZ1bmN0aW9uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgQWRkIG5ldyBleHBvcnRlZCBmdW5jdGlvbi4KKwkgICogd2luMzIvdnM2L2xpYmdzdGJhc2UuZHNwOgorCSAgQWRkIGdzdGRhdGFxdWV1ZS5jIHRvIHRoZSBidWlsZC4KKwkgICogd2luMzIvdnM2L2xpYmdzdGNvcmVlbGVtZW50cy5kc3A6CisJICBBZGQgZ3N0bXVsdGlxdWV1ZS5jIHRvIHRoZSBidWlsZC4KKworMjAwNy0wMS0wNiAxNzoxODowMyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6IE5ldyBHc3RCYXNlU2lua0NsYXNzIHZtZXRob2QsIGFjdGl2YXRlX3B1bGwoKSwgcHJvdmlkaW5nIGZvciBhIHdheSB0byBzcGVjaWFsaXplIHRoZSBwcm8uLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNy0wMS0wNiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOiBOZXcgR3N0QmFzZVNpbmtDbGFzcyB2bWV0aG9kLAorCSAgYWN0aXZhdGVfcHVsbCgpLCBwcm92aWRpbmcgZm9yIGEgd2F5IHRvIHNwZWNpYWxpemUgdGhlIHByb2Nlc3Mgb2YKKwkgIHNwYXduaW5nIGEgdGhyZWFkIHRvIHB1bGwgb24gdGhlIHNpbmsgcGFkLiBUaGVyZSBpcyBhIGRlZmF1bHQKKwkgIGltcGxlbWVudGF0aW9uLgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmMgKGdzdF9iYXNlX3NpbmtfcGFkX2FjdGl2YXRlX3B1bGwpCisJICAoZ3N0X2Jhc2Vfc2lua19wYWRfYWN0aXZhdGVfcHVzaCwgZ3N0X2Jhc2Vfc2lua19wYWRfYWN0aXZhdGUpCisJICAoZ3N0X2Jhc2Vfc2lua19pbml0KTogUmVuYW1lZCBwYWQgYWN0aXZhdGlvbiBmdW5jdGlvbnMgKGluc2VydGluZworCSAgIl9wYWQiIGluIHRoZWlyIG5hbWVzKS4gUmVmYWN0b3IgdG8gdXNlIHRoZSBuZXcgYWN0aXZhdGVfcHVsbAorCSAgdm1ldGhvZCwgYXMgYXBwcm9wcmlhdGUuCisJICAoZ3N0X2Jhc2Vfc2lua19jbGFzc19pbml0LCBnc3RfYmFzZV9zaW5rX2FjdGl2YXRlX3B1bGwpOiBTZXQgdGhlCisJICBkZWZhdWx0IGFjdGl2YXRlX3B1bGwgZnVuY3Rpb24gdG8gc3RhcnQgYSB0YXNrIHB1bGxpbmcgZnJvbSB0aGUKKwkgIHNpbmsgcGFkLCBhcyBiZWZvcmUuCisKKzIwMDctMDEtMDYgMTc6MDk6MTAgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdHBhZC5jIChnc3RfcGFkX2dldF9yYW5nZSwgZ3N0X3BhZF9wdWxsX3JhbmdlKTogU2V0IGNhcHMgb24gdGhlIHBhZHMgaWYgbmVjZXNzYXJ5LCBhcyBpbiBwdXNoKCkvY2hhaW4oKS4gVXBkYXRlLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDctMDEtMDYgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3RwYWQuYyAoZ3N0X3BhZF9nZXRfcmFuZ2UsIGdzdF9wYWRfcHVsbF9yYW5nZSk6IFNldCBjYXBzCisJICBvbiB0aGUgcGFkcyBpZiBuZWNlc3NhcnksIGFzIGluIHB1c2goKS9jaGFpbigpLiBVcGRhdGUgZG9jcy4KKwkgIFNob3VsZG4ndCBhZmZlY3QgZXhpc3RpbmcgcHVsbCgpIHVzYWdlIGFzIGl0IGlzIGN1cnJlbnRseSBvbmx5CisJICBiZWluZyB1c2VkIG9uIGJ1ZmZlcnMgd2l0aG91dCBjYXBzLgorCisyMDA3LTAxLTA1IDE2OjM2OjM2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0LmM6IENhbGwgZ190aHJlYWRfaW5pdCgpIGZpcnN0IHRoaW5nIGluIGdzdF9pbml0KCkgLyBnc3RfY2hlY2tfaW5pdCgpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3QuYzogKGdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXApLCAoZ3N0X2luaXRfY2hlY2spLAorCSAgKGluaXRfcHJlKToKKwkgIENhbGwgZ190aHJlYWRfaW5pdCgpIGZpcnN0IHRoaW5nIGluIGdzdF9pbml0KCkgLyBnc3RfY2hlY2tfaW5pdCgpLgorCSAgV2hlbiBpbml0aWFsaXNhdGlvbiBpcyBkb25lIHZpYSBnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwKCkgYW5kCisJICBHT3B0aW9uIHBhcnNpbmcsIGlzc3VlIGEgd2FybmluZyBpZiB0aGUgR0xpYiB0aHJlYWQgc3lzdGVtIGhhcyBub3QKKwkgIGJlZW4gaW5pdGlhbGlzZWQgeWV0IGJ5IHRoZSB0aW1lIGdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXAoKSBpcworCSAgY2FsbGVkLCBhcyBpdCdzIHF1aXRlIGxpa2VseSBvdGhlciBHTGliIGZ1bmN0aW9ucyBzdWNoIGFzCisJICBnX29wdGlvbl9jb250ZXh0X25ldygpIGhhdmUgYmVlbiBjYWxsZWQgYWxyZWFkeSB0aGVuLCBhbmQKKwkgIGdfdGhyZWFkX2luaXQoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIEdMaWIgZnVuY3Rpb24uIFRoZQorCSAgYXBwbGljYXRpb24gaW4gcXVlc3Rpb24gbXVzdCBiZSBmaXhlZCBpbiB0aGF0IGNhc2UsIHNpbmNlIG1lbW9yeQorCSAgY29ycnVwdGlvbiBtaWdodCBoYXBwZW4gb3RoZXJ3aXNlLgorCSAgV2UgaXNzdWUgdGhlIHdhcm5pbmcgYmVjYXVzZSBldmVuIGlmIHRoZSBHTGliIGZvbGtzIGRlY2lkZSB0byB3b3JrCisJICBhcm91bmQgdGhlIHByb2JsZW0gb24gdGhlaXIgZW5kIGluIGZ1dHVyZSwgdGhpcyBpcyBzdGlsbCBhbiBpc3N1ZQorCSAgd2l0aCBhbGwgR0xpYiB2ZXJzaW9ucyA+PSAyLjEwLjAsIHNvIHdlIHNob3VsZCB3YXJuIHVudGlsIHdlIGRlcGVuZAorCSAgb24gYSBHTGliIHZlcnNpb24gd2Uga25vdyB0byBiZSBzYWZlLgorCSAgVXBkYXRlIGRvY3VtZW50YXRpb24gYXMgd2VsbC4KKwkgIENsb3NlcyBidWcgIzM5MTI3OC4KKworMjAwNy0wMS0wNSAxNTo1NToxNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgdG9vbHMvOiBDYWxsIGdfdGhyZWFkX2luaXQoKSByZWFsbHkgcmVhbGx5IGVhcmx5LCBiZWZvcmUgYW55IG90aGVyIEdMaWIgZnVuY3Rpb24gKHNlZSAjMzQyNTY0IGFuZCByZWNlbnQgZGlzY3Vzc2lvbiBvLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKG1haW4pOgorCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChtYWluKToKKwkgICogdG9vbHMvZ3N0LXR5cGVmaW5kLmM6IChtYWluKToKKwkgICogdG9vbHMvZ3N0LXhtbGluc3BlY3QuYzogKG1haW4pOgorCSAgQ2FsbCBnX3RocmVhZF9pbml0KCkgcmVhbGx5IHJlYWxseSBlYXJseSwgYmVmb3JlIGFueSBvdGhlciBHTGliCisJICBmdW5jdGlvbiAoc2VlICMzNDI1NjQgYW5kIHJlY2VudCBkaXNjdXNzaW9uIG9uIGd0ay1kZXZlbC1saXN0KS4KKworMjAwNy0wMS0wNSAxMzoyMzowMiArMDAwMCAgVmluY2VudCBUb3JyaSA8dnRvcnJpQHVuaXYtZXZyeS5mcj4KKworCSAgZ3N0LzogT24gd2luMzIsIGFsbCB0aGUgX19kZWNsc3BlYyBzdHVmZiBmb3Igc3ltYm9sIGV4cG9ydGluZyBpcyBhcHBhcmVudGx5IG9ubHkgbmVlZGVkIHdpdGggTVNWQywgYnV0IGRvZXNuJ3Qgd29yayB3Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBWaW5jZW50IFRvcnJpICA8dnRvcnJpIGF0IHVuaXYtZXZyeSBkb3QgZnI+CisJICAqIGdzdC9nc3RfcHJpdmF0ZS5oOgorCSAgKiBnc3QvZ3N0Y29uZmlnLmguaW46CisJICAqIGdzdC9nc3RpbmZvLmg6CisJICBPbiB3aW4zMiwgYWxsIHRoZSBfX2RlY2xzcGVjIHN0dWZmIGZvciBzeW1ib2wgZXhwb3J0aW5nIGlzCisJICBhcHBhcmVudGx5IG9ubHkgbmVlZGVkIHdpdGggTVNWQywgYnV0IGRvZXNuJ3Qgd29yayB3aXRoIE1pbmdXLgorCSAgRml4ZXMgY29tcGlsYXRpb24gd2l0aCBNaW5nVyBhbmQgIzM5MTkwOS4KKworMjAwNy0wMS0wNSAxMTo1Nzo0OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IENoYW5nZSBzb21lIEdTVF9FUlJPUl9PQkpFQ1QgdGhhdCBhcmVuJ3QgcmVhbGx5IGVycm9ycyB0bworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2FjdGl2YXRlX3B1c2gpOgorCSAgQ2hhbmdlIHNvbWUgR1NUX0VSUk9SX09CSkVDVCB0aGF0IGFyZW4ndCByZWFsbHkgZXJyb3JzIHRvCisJICBHU1RfV0FSTklOR19PQkpFQ1QgaW4gb3JkZXIgdG8gcmVkdWNlIHRlcm1pbmFsIHNwYW0uCisKKzIwMDctMDEtMDQgMTM6NTQ6MjUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06IGRpc2FibGUgdGVzdCBhZ2FpbiwgYXMgdGhlcmUgc2VlbSB0byBiZSBzdGlsbCByYWNlIHByb2JsZW1zCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICBkaXNhYmxlIHRlc3QgYWdhaW4sIGFzIHRoZXJlIHNlZW0gdG8gYmUgc3RpbGwgcmFjZSBwcm9ibGVtcworCisyMDA3LTAxLTA0IDEzOjM3OjA4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIHRlc3RzL2NoZWNrLzogZW5hYmxlIHF1ZXVlIHRlc3QgYWdhaW4sIGFkZCB0ZXN0cyBmb3IgdGhlIGxlYWt5IGJlaGF2aW91cgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdWV1ZS5jOiAocXVldWVfb3ZlcnJ1biksIChxdWV1ZV91bmRlcnJ1biksCisJICAoR1NUX1NUQVJUX1RFU1QpLCAocXVldWVfc3VpdGUpOgorCSAgZW5hYmxlIHF1ZXVlIHRlc3QgYWdhaW4sIGFkZCB0ZXN0cyBmb3IgdGhlIGxlYWt5IGJlaGF2aW91cgorCisyMDA3LTAxLTAyIDE3OjAxOjMzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBDb21waWxlIGFkYXB0ZXIgdGVzdC9leGFtcGxlIG9ubHkgaWYgdGhlIHJlcXVpcmVkIGhlYWRlcnMgYXJlIGF2YWlsYWJsZSAoZml4ZXMgIzM5MTkxNSkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgKiB0ZXN0cy9leGFtcGxlcy9NYWtlZmlsZS5hbToKKwkgIENvbXBpbGUgYWRhcHRlciB0ZXN0L2V4YW1wbGUgb25seSBpZiB0aGUgcmVxdWlyZWQgaGVhZGVycyBhcmUKKwkgIGF2YWlsYWJsZSAoZml4ZXMgIzM5MTkxNSkuCisKKzIwMDctMDEtMDIgMDk6MzE6NDUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBnc3QvZ3N0dmFsdWUuYzoKKwkgIHRlbGwgdXMgd2hhdCdzIG5vdCBpbXBsZW1lbnRlZAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB0ZWxsIHVzIHdoYXQncyBub3QgaW1wbGVtZW50ZWQKKworMjAwNy0wMS0wMiAwOTozMToxMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkgIGJ1bXAgdG8gQ1ZTCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGJ1bXAgdG8gQ1ZTCisKKzIwMDctMDEtMDIgMDY6MTQ6MDYgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJICBnc3QvZ3N0cGx1Z2luLmM6IFJlc3RvcmUgdGhlIHByZXZpb3VzIHNpZ25hbCBoYW5kbGVyIGZvciBTSUdTRUdWIGluc3RlYWQgb2Ygc2V0dGluZyB0byBkZWZhdWx0LCBzaW5jZSB3ZSBtYXkgaGF2ZSBzdG8uLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGx1Z2luLmM6CisJICBSZXN0b3JlIHRoZSBwcmV2aW91cyBzaWduYWwgaGFuZGxlciBmb3IgU0lHU0VHViBpbnN0ZWFkIG9mCisJICBzZXR0aW5nIHRvIGRlZmF1bHQsIHNpbmNlIHdlIG1heSBoYXZlIHN0b2xlbiBpdCBhd2F5IGZyb20KKwkgIHNvbWVvbmUuICAoaS5lLiwgTW9ubykKKworMjAwNi0xMi0yNiAxNTo1NToyNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZG9jcy9yYW5kb20vZHJhZnQtbWlzc2luZy1wbHVnaW5zLnR4dDogU29tZSBzbWFsbCBhZGRpdGlvbnMgYW5kIGNsYXJpZmljYXRpb25zLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcmFuZG9tL2RyYWZ0LW1pc3NpbmctcGx1Z2lucy50eHQ6CisJICBTb21lIHNtYWxsIGFkZGl0aW9ucyBhbmQgY2xhcmlmaWNhdGlvbnMuCisKKzIwMDYtMTItMjYgMTU6MDY6NTIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RyZWdpc3RyeXhtbC5jOiBNYWtlIHN1cmUgd2UgZG9uJ3QgcGFzcyBub24tVVRGLTggc3RyaW5ncyB0byBnX21hcmt1cF9lc2NhcGUoKSwgc2luY2UgdGhhdCBjYW4gbGVhZCB0byByYW5kb20gbS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RyZWdpc3RyeXhtbC5jOiAoZ3N0X3JlZ2lzdHJ5X3NhdmVfZXNjYXBlZCk6CisJICBNYWtlIHN1cmUgd2UgZG9uJ3QgcGFzcyBub24tVVRGLTggc3RyaW5ncyB0byBnX21hcmt1cF9lc2NhcGUoKSwKKwkgIHNpbmNlIHRoYXQgY2FuIGxlYWQgdG8gcmFuZG9tIG1lbW9yeSBjb3JydXB0aW9ucyBhbmQgY3Jhc2hlcworCSAgKG1heSBvciBtYXkgbm90IGJlIHJlbGF0ZWQgdG8gIzM4MzI0NCwgIzM4NjcxMSwgYW5kICMzODY3MTEpLgorCisyMDA2LTEyLTIxIDE1OjU0OjA2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIHRlc3RzL2NoZWNrLzogc3luYyAuY3ZzaWdub21lIGFuZCBDTEVBTkZJTEVTCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svLmN2c2lnbm9yZToKKwkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICBzeW5jIC5jdnNpZ25vbWUgYW5kIENMRUFORklMRVMKKworMjAwNi0xMi0yMSAxNTozMjowMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbTogZml4IGRpc3RjaGVjaworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSAgZml4IGRpc3RjaGVjaworCisyMDA2LTEyLTIxIDE1OjAwOjA4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvZGVzaWduL3BhcnQtc3RhdGVzLnR4dDogdHdvIHRpbnkgYWRkaXRpb25hbCBjb21tZW50cworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtc3RhdGVzLnR4dDoKKwkgIHR3byB0aW55IGFkZGl0aW9uYWwgY29tbWVudHMKKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSAgZG9jIGZpeGluZworCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvcXVldWUuYzogKHF1ZXVlX292ZXJydW4pLCAocXVldWVfdW5kZXJydW4pLAorCSAgKEdTVF9TVEFSVF9URVNUKToKKwkgIGRpc2FibGUgdGVzdCBmb3Igbm93LCB1bmxlc3MgaXQgZ2V0cyBmaXhlZAorCisyMDA2LTEyLTIxIDE0OjI0OjU0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlLmM6IGZpeCByYWNlIGluIHVuZGVycnVuIHRlc3QKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdWV1ZS5jOiAocXVldWVfb3ZlcnJ1biksIChxdWV1ZV91bmRlcnJ1biksCisJICAoR1NUX1NUQVJUX1RFU1QpOgorCSAgZml4IHJhY2UgaW4gdW5kZXJydW4gdGVzdAorCisyMDA2LTEyLTIxIDA5OjU4OjI1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5jdnNpZ25vcmU6IGlnbm9yZSBtb3JlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvLmN2c2lnbm9yZToKKwkgIGlnbm9yZSBtb3JlCisJICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlLmM6IChxdWV1ZV9vdmVycnVuKSwgKHF1ZXVlX3VuZGVycnVuKSwKKwkgIChHU1RfU1RBUlRfVEVTVCk6CisJICB0cnkgdG8gbmFycm93IHRlc3QgZmFpbHVyZQorCisyMDA2LTEyLTIxIDA5OjM3OjU2ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6IFVzZSBnX3JhbmRvbV9pbnRfcmFuZ2UoKSwgc2luY2UgaXQgcHJvZHVjZXMgYmV0dGVyIHJhbmRvbSBudW1iZXJzIGluIGEgcmFuZ2UgdGhhbiBhbG1vLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6CisJICBVc2UgZ19yYW5kb21faW50X3JhbmdlKCksIHNpbmNlIGl0IHByb2R1Y2VzIGJldHRlciByYW5kb20KKwkgIG51bWJlcnMgaW4gYSByYW5nZSB0aGFuIGFsbW9zdC1jb3JyZWN0IGZsb2F0aW5nIHBvaW50IGNvZGUuCisKKzIwMDYtMTItMjEgMDg6MTI6MjggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzogZG8gbm90IGF1dG9tYXRpY2FsbHkgKGRlKWFjdGl2YXRlIHBhZHMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOiAoZ3N0X2NoZWNrX3NldHVwX3NyY19wYWQpLAorCSAgKGdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkKSwgKGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCksCisJICAoZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkKToKKwkgIGRvIG5vdCBhdXRvbWF0aWNhbGx5IChkZSlhY3RpdmF0ZSBwYWRzCisJICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdWV1ZS5jOiAocXVldWVfb3ZlcnJ1biksIChxdWV1ZV91bmRlcnJ1biksCisJICAoc2V0dXBfcXVldWUpLCAoY2xlYW51cF9xdWV1ZSksIChHU1RfU1RBUlRfVEVTVCksIChxdWV1ZV9zdWl0ZSk6CisJICBhZGQgbmV3LCB5ZXQgc2ltcGxlIHRlc3RzIGZvciBxdWV1ZQorCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc3JjLmM6IChjbGVhbnVwX2Zha2VzcmMpOgorCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mZHNyYy5jOiAoY2xlYW51cF9mZHNyYyk6CisJICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzcmMuYzogKGNsZWFudXBfZmlsZXNyYyksCisJICAoR1NUX1NUQVJUX1RFU1QpOgorCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pZGVudGl0eS5jOiAoY2xlYW51cF9pZGVudGl0eSk6CisJICBjb25zaXN0ZW50IHBhZCAoZGUpYWN0aXZhdGlvbgorCisyMDA2LTEyLTIwIDE5OjA2OjAyICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogRml4IHR3byBkb2MgdHlwb3MgKCMzODc4NjYpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogU2ViYXN0aWFuIERyw7ZnZSAgPHNsb21vIHVidW50dSBjb20+CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKKwkgIEZpeCB0d28gZG9jIHR5cG9zICgjMzg3ODY2KS4KKworMjAwNi0xMi0xOSAxNTowNjo0MiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZG9jcy9tYW51YWwvYWR2YW5jZWQtZHBhcmFtcy54bWw6IEZpeCB0eXBvIChnX29iamVjdF9jb250cm9sX3Byb3BlcnRpZXMoKSBkb2Vzbid0IGV4aXN0KS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kcGFyYW1zLnhtbDoKKwkgIEZpeCB0eXBvIChnX29iamVjdF9jb250cm9sX3Byb3BlcnRpZXMoKSBkb2Vzbid0IGV4aXN0KS4KKworMjAwNi0xMi0xOSAxMjozODowMCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgZ3N0L2dzdHNlZ21lbnQuYzogRmluZSB0dW5lIHRoZSBjYXNlcyB3aGVyZSB0aGUgc2VnbWVudCBzdGFydC9zdG9wIHZhbHVlcyBhcmUgcmVhbGx5IHVwZGF0ZWQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHNlZ21lbnQuYzogKGdzdF9zZWdtZW50X3NldF9zZWVrKToKKwkgIEZpbmUgdHVuZSB0aGUgY2FzZXMgd2hlcmUgdGhlIHNlZ21lbnQgc3RhcnQvc3RvcCB2YWx1ZXMgYXJlIHJlYWxseQorCSAgdXBkYXRlZC4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHNlZ21lbnQuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgIEFkZCB0ZXN0cyBmb3IgdGhlIHJldHVybiB2YWx1ZXMgb2YgZ3N0X3NlZ21lbnRfc2V0X3NlZWsoKS4KKworMjAwNi0xMi0xOSAxMTowNDo0OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdC5jOiBEb2NzIHR5cG8gZml4LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3QuYzoKKwkgIERvY3MgdHlwbyBmaXguCisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9jbGFzc19pbml0KSwKKwkgIChnc3RfcXVldWVfaW5pdCk6CisJICBGaXggaW5jb3JyZWN0IGRvY3VtZW50YXRpb24gYW5kIGZsZXNoIGl0IG91dCBhIGJpdCBtb3JlLgorCSAgU2V0IGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgbWF4IHByb3BlcnRpZXMgb24gdGhlIEdQYXJhbVNwZWMgYXMgd2VsbCwKKwkgIHNvIGl0IHNob3dzIHVwIGNvcnJlY3RseSBpbiBnc3QtaW5zcGVjdC4KKworMjAwNi0xMi0xOCAxNjowMTozMiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IENvcnJlY3QgZG9jcyBvZiBxdWV1ZSwgYWRkIG1vcmUgZGV0YWlsIGFuZCBjcm9zc2xpbmsgaXQgbW9yZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChxdWV1ZV9sZWFreV9nZXRfdHlwZSk6CisJICBDb3JyZWN0IGRvY3Mgb2YgcXVldWUsIGFkZCBtb3JlIGRldGFpbCBhbmQgY3Jvc3NsaW5rIGl0IG1vcmUuCisKKzIwMDYtMTItMTYgMTk6MzM6MjYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogUHJpbnQgYWRkaXRpb25hbCBkZWJ1ZyBpbmZvIHdoZW4gdGhlIHN0cmVhbSBpc24ndCBwZXJmZWN0bHkgdGltZXN0YW1wZWQ7IGRvbid0IHRyeSB0by4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogKGdzdF9pZGVudGl0eV9jaGVja19wZXJmZWN0KToKKwkgIFByaW50IGFkZGl0aW9uYWwgZGVidWcgaW5mbyB3aGVuIHRoZSBzdHJlYW0gaXNuJ3QgcGVyZmVjdGx5CisJICB0aW1lc3RhbXBlZDsgZG9uJ3QgdHJ5IHRvIHVzZSBpbnZhbGlkIGR1cmF0aW9ucy4KKworMjAwNi0xMi0xNiAxNjoxNDowMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZG9jcy9kZXNpZ24vTWFrZWZpbGUuYW06IERpc3QgbmV3IGRlc2lnbiBkb2NzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL01ha2VmaWxlLmFtOgorCSAgRGlzdCBuZXcgZGVzaWduIGRvY3MuCisKKzIwMDYtMTItMTYgMTU6MTc6NTQgKzAwMDAgIFNqb2VyZCBTaW1vbnMgPHNqb2VyZEBsdW9uLm5ldD4KKworCSAgbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy4qOiBBZGQgcmVmY291bnRpbmcgdG8gdGhlIGNvbGxlY3RwYWRzIGRhdGEgc28gd2UgY2FuIHRyYWNrIHdoZW4gaXQncyBzYWZlIHRvIGZyZWUgdGhlIGRhLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBTam9lcmQgU2ltb25zIDxzam9lcmQgYXQgbHVvbiBkb3QgbmV0PgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChyZWZfZGF0YSksICh1bnJlZl9kYXRhKSwKKwkgIChnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQpLCAoZ3N0X2NvbGxlY3RfcGFkc19yZW1vdmVfcGFkKSwKKwkgIChnc3RfY29sbGVjdF9wYWRzX3N0b3ApLCAoZ3N0X2NvbGxlY3RfcGFkc19ldmVudCksCisJICAoZ3N0X2NvbGxlY3RfcGFkc19jaGFpbik6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKKwkgIEFkZCByZWZjb3VudGluZyB0byB0aGUgY29sbGVjdHBhZHMgZGF0YSBzbyB3ZSBjYW4gdHJhY2sgd2hlbiBpdCdzIHNhZmUKKwkgIHRvIGZyZWUgdGhlIGRhdGEuIEZpeGVzICMzODMzODIuCisKKzIwMDYtMTItMTUgMTc6MDk6NTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogQXV0b21hdGljYWxseSBhY3RpdmF0ZS9kZWFjdGl2YXRlIHBhZHMgd2hlbiB0aGV5IGFyZSBhZGRlZCB0byBhIHN0YXJ0ZWQvc3RvcGVkIGNvbGxlYy4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZCksCisJICAoZ3N0X2NvbGxlY3RfcGFkc19yZW1vdmVfcGFkKToKKwkgIEF1dG9tYXRpY2FsbHkgYWN0aXZhdGUvZGVhY3RpdmF0ZSBwYWRzIHdoZW4gdGhleSBhcmUgYWRkZWQgdG8gYQorCSAgc3RhcnRlZC9zdG9wZWQgY29sbGVjdHBhZHMuCisKKzIwMDYtMTItMTUgMTY6MDE6NTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC86IFNldCBwYWRzIHRvIEZMVVNISU5HIHdoZW4gdGhleSBhcmUgY3JlYXRlZC4gQ2hlY2ssIHdhcm4gYW5kIGZpeCB3aGVuIGEgZGVtdXhlciBhZGRzIGFuIGluYWN0aXZlIHBhZCB0byBpdHNlbGYgdy4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9hZGRfcGFkKToKKwkgICogZ3N0L2dzdGdob3N0cGFkLmM6IChnc3RfZ2hvc3RfcGFkX25ld19mdWxsKToKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9pbml0KToKKwkgIFNldCBwYWRzIHRvIEZMVVNISU5HIHdoZW4gdGhleSBhcmUgY3JlYXRlZC4gQ2hlY2ssIHdhcm4gYW5kIGZpeCB3aGVuIGEKKwkgIGRlbXV4ZXIgYWRkcyBhbiBpbmFjdGl2ZSBwYWQgdG8gaXRzZWxmIHdoZW4gcnVubmluZy4gRml4ZXMgIzMzOTMyNi4KKworMjAwNi0xMi0xNSAxNTo0OToyOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGVsZW1lbnQuYzogRXhwb3NlIGRlZmF1bHQgZWxlbWVudCBzZW5kX2V2ZW50IGFuZCBxdWVyeSBoYW5kbGluZyBhcyB2bWV0aG9kcyB0aGF0IHN1YmNsYXNzZXMgY2FuIGNoYWluIHVwIHRvLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9jbGFzc19pbml0KSwKKwkgIChnc3RfZWxlbWVudF9kZWZhdWx0X3NlbmRfZXZlbnQpLCAoZ3N0X2VsZW1lbnRfc2VuZF9ldmVudCksCisJICAoZ3N0X2VsZW1lbnRfZGVmYXVsdF9xdWVyeSksIChnc3RfZWxlbWVudF9xdWVyeSk6CisJICBFeHBvc2UgZGVmYXVsdCBlbGVtZW50IHNlbmRfZXZlbnQgYW5kIHF1ZXJ5IGhhbmRsaW5nIGFzIHZtZXRob2RzIHRoYXQKKwkgIHN1YmNsYXNzZXMgY2FuIGNoYWluIHVwIHRvLgorCisyMDA2LTEyLTE1IDE1OjM5OjI4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0ZWxlbWVudC5jOiBTbWFsbCBkb2N1bWVudGF0aW9uIGZpeGVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9zZXRfc3RhdGVfZnVuYyk6CisJICBTbWFsbCBkb2N1bWVudGF0aW9uIGZpeGVzLgorCisyMDA2LTEyLTE1IDE1OjI2OjQ2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL2Rlc2lnbi9kcmFmdC1sYXRlbmN5LnR4dDogQ2hlY2tlZCBpbiBkcmFmdCBmb3IgaGFuZGxpbmcgbGF0ZW5jeSBpbiBwaXBlbGluZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vZHJhZnQtbGF0ZW5jeS50eHQ6CisJICBDaGVja2VkIGluIGRyYWZ0IGZvciBoYW5kbGluZyBsYXRlbmN5IGluIHBpcGVsaW5lcy4KKworMjAwNi0xMi0xNSAwMDoxNjo1NyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGFkZGluZyAuZG9hcCBmaWxlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogTWFrZWZpbGUuYW06CisJICAqIGdzdHJlYW1lci5kb2FwOgorCSAgKiBnc3RyZWFtZXIuc3BlYy5pbjoKKwkgIGFkZGluZyAuZG9hcCBmaWxlCisKKzIwMDYtMTItMTQgMTQ6MDY6MzggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3QuYzogaW5pdF9wcmUoKSBhbmQgaW5pdF9wb3N0KCkgbWlnaHQgYmUgY2FsbGVkIHZpYSBvdXIgR09wdGlvbkdyb3VwIG9yIGZyb20gZ3N0X2luaXQoKSwgYW5kIHdlIHNob3VsZCBza2lwIGJvdC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3QuYzogKGluaXRfcHJlKSwgKGluaXRfcG9zdCk6CisJICBpbml0X3ByZSgpIGFuZCBpbml0X3Bvc3QoKSBtaWdodCBiZSBjYWxsZWQgdmlhIG91ciBHT3B0aW9uR3JvdXAgb3IKKwkgIGZyb20gZ3N0X2luaXQoKSwgYW5kIHdlIHNob3VsZCBza2lwIGJvdGggb2YgdGhlbSBpZiB3ZSd2ZSBhbHJlYWR5CisJICBiZWVuIGluaXRpYWxpc2VkLCBvdGhlcndpc2Ugd2Ugd2lsbCBpbml0IHNvbWUgdGhpbmdzIHR3aWNlIG9yIGFkZAorCSAgdHdvIGRlZmF1bHQgbG9nIGZ1bmN0aW9ucy4KKworMjAwNi0xMi0xMyAxMjo0NjoyOCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgZG9jcy9tYW51YWwvYmFzaWNzLWJ1cy54bWw6IE5vLCBnc3RfbWFpbl9sb29wIGRvZXMgbm90IGV4aXN0LiBJdHMgZ19tYWluX2xvb3AuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9tYW51YWwvYmFzaWNzLWJ1cy54bWw6CisJICBObywgZ3N0X21haW5fbG9vcCBkb2VzIG5vdCBleGlzdC4gSXRzIGdfbWFpbl9sb29wLgorCSAgRGlzY292ZXJlZCBieSBzb21lYm9keSB3aG8gYWJ1c2VkIHRoZSBjb3B5LXBhc3RlIHRlY2huaXF1ZSBvZiBjb2RpbmcgOikKKworMjAwNi0xMi0xMyAxMTowNToyMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdGdob3N0cGFkLmM6IExvZyBnaG9zdHBhZCBkZWJ1ZyBzdHVmZiB0byB0aGUgR1NUX1BBRFMgY2F0ZWdvcnkgYXMgd2VsbCByYXRoZXIgdGhhbiBqdXN0IHRvIHRoZSBkZWZhdWx0IGNhdGVnb3J5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RnaG9zdHBhZC5jOgorCSAgTG9nIGdob3N0cGFkIGRlYnVnIHN0dWZmIHRvIHRoZSBHU1RfUEFEUyBjYXRlZ29yeSBhcyB3ZWxsIHJhdGhlcgorCSAgdGhhbiBqdXN0IHRvIHRoZSBkZWZhdWx0IGNhdGVnb3J5LgorCisyMDA2LTEyLTEyIDEzOjUzOjA0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBBZGQgc29tZSBiYXNpYyBzeXN0ZW0gZGV0YWlscyBzdWNoIGFzIE9TIGFuZCBhcmNoaXRlY3R1cmUgdG8gdGhlIGRlYnVnIG91dHB1dCBpZiBwb3NzaWJsZSwgY291cnRlc3kgb2YgdW5hbWUoKS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICAqIGdzdC9nc3QuYzogKGluaXRfcHJlKToKKwkgIEFkZCBzb21lIGJhc2ljIHN5c3RlbSBkZXRhaWxzIHN1Y2ggYXMgT1MgYW5kIGFyY2hpdGVjdHVyZQorCSAgdG8gdGhlIGRlYnVnIG91dHB1dCBpZiBwb3NzaWJsZSwgY291cnRlc3kgb2YgdW5hbWUoKS4KKworMjAwNi0xMi0xMSAxMzo0MDozMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZG9jcy9nc3QvcnVubmluZy54bWw6IERvY3VtZW50IEdTVF9SRUdJU1RSWV9GT1JLIGFuZCBHU1RfREVCVUdfTk9fQ09MT1IgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L3J1bm5pbmcueG1sOgorCSAgRG9jdW1lbnQgR1NUX1JFR0lTVFJZX0ZPUksgYW5kIEdTVF9ERUJVR19OT19DT0xPUgorCSAgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorCisyMDA2LTEyLTA5IDIwOjIzOjEwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOiBJdCBpcyBhY2NlcHRhYmxlIHRvIGhhdmUgYSByZWZjb3VudCBvZiAyIG9yIDMgYXQgdGhpcyBwb2ludCBpbiB0aGUgdGVzdCwgYmVjYXVzZSB0aGUgcGlwZWxpLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgSXQgaXMgYWNjZXB0YWJsZSB0byBoYXZlIGEgcmVmY291bnQgb2YgMiBvciAzIGF0IHRoaXMgcG9pbnQgaW4gdGhlCisJICB0ZXN0LCBiZWNhdXNlIHRoZSBwaXBlbGluZSBtaWdodCBiZSBqdXN0IHBvc3RpbmcgaXRzIHN0YXRlX2NoYW5nZQorCSAgbWVzc2FnZS4gVGhlIG5leHQgbGluZSB0aGVuIHdhaXRzIGZvciB0aGF0IG1lc3NhZ2UgdG8gYXBwZWFyIHVzaW5nCisJICBidXNfcG9sbCwgc28gdGhhdCBzaG91bGQgYmUgZmluZSB0b28uCisKKzIwMDYtMTItMDkgMTg6NDg6NTcgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBnc3QvZ3N0LmM6IElnbm9yZSBFSU5UUiB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgY2hpbGQgcmVnaXN0cnkgcGlwZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0LmM6IChlbnN1cmVfY3VycmVudF9yZWdpc3RyeV9mb3JraW5nKToKKwkgIElnbm9yZSBFSU5UUiB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgY2hpbGQgcmVnaXN0cnkgcGlwZS4KKwkgIEV4cGxpY2l0bHkgaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBjbG9zZSwgc2luY2UgaXQgbWFrZXMgbm8KKwkgIGRpZmZlcmVuY2UuCisJICAqIGdzdC9nc3RtaW5pb2JqZWN0LmM6IChnc3RfbWluaV9vYmplY3RfcmVmKSwKKwkgIChnc3RfbWluaV9vYmplY3RfdW5yZWYpOgorCSAgV2hlbiBkZWJ1Z2dpbmcgcmVmY291bnRzLCBjaGVjayBHU1RfSVNfTUlOSV9PQkpFQ1QgYW5kIHdhcm4uCisJICAqIGdzdC9nc3RyZWdpc3RyeS5jOiAoX3ByaXZfZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9jYWNoZV9wbHVnaW5zKToKKwkgIFdoZW4gcmVtb3ZpbmcgY2FjaGVkIHBsdWdpbnMsIHJlbW92ZSB0aGVpciBmZWF0dXJlcyB0b28sIHNvIHRoZXkncmUKKwkgIG5vdCB2aXNpYmxlIGFmdGVyIHRoZXkndmUgZGlzYXBwZWFyZWQuCisJICAqIGdzdC9nc3R1dGlscy5jOiAocHJlcGFyZV9saW5rX21heWJlX2dob3N0aW5nKToKKwkgIEluIHRoZSB1bmxpa2VseSBjYXNlIHRoYXQgd2UgYXJlIGxpbmtpbmcgcGFkcyB3aXRoIG5vIHBhcmVudHMsIGRvbid0CisJICBjcmFzaCB0cnlpbmcgdG8gZ2V0IHRoZSBub24tZXhpc3RlbnQgcGFyZW50IGJpbi4KKwkgICogZ3N0L3BhcnNlL2dyYW1tYXIueToKKwkgIE91dHB1dCBkZWJ1ZyBpbiB0aGUgUElQRUxJTkUgY2F0ZWdvcnkKKworMjAwNi0xMi0wOCAxNjoxMjo0NCArMDAwMCAgUmVuw6kgU3RhZGxlciA8bWFpbEByZW5lc3RhZGxlci5kZT4KKworCSAgZ3N0L2dzdGNsb2NrLmM6IFJlamVjdCBpbnZhbGlkIGNsb2NrIHRpbWVzIGZvciBpbnRlcnZhbCBvZiBwZXJpb2RpYyBpZHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBSZW7DqSBTdGFkbGVyIDxtYWlsIGF0IHJlbmVzdGFkbGVyIGRvdCBkZT4KKwkgICogZ3N0L2dzdGNsb2NrLmM6IChnc3RfY2xvY2tfbmV3X3BlcmlvZGljX2lkKToKKwkgIFJlamVjdCBpbnZhbGlkIGNsb2NrIHRpbWVzIGZvciBpbnRlcnZhbCBvZiBwZXJpb2RpYyBpZHMuCisJICBGaXhlcyAjIzM4MzUwNi4KKworMjAwNi0xMi0wNyAxMjoxMToxNCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIEZpeCByZWZjb3VudGluZyBvZiBnc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZCB0byBtYXRjaCB0aGUgZG9jcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzogKGdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlKToKKwkgICogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzogKGdzdF9wbHVnaW5fZmVhdHVyZV9sb2FkKToKKwkgICogZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5jOiAoZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2NhbGxfZnVuY3Rpb24pOgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAocHJpbnRfZWxlbWVudF9pbmZvKToKKwkgIEZpeCByZWZjb3VudGluZyBvZiBnc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZCB0byBtYXRjaCB0aGUgZG9jcy4KKwkgIEZpeGVzOiAjMzgwMTI5CisKKzIwMDYtMTItMDcgMTA6NTk6MDUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogSW1wcm92ZSBkZWJ1Z2dpbmcgb2YgZXZlbnRzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZXZlbnQpLAorCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uKToKKwkgIEltcHJvdmUgZGVidWdnaW5nIG9mIGV2ZW50cy4KKworMjAwNi0xMi0wNyAxMDo1MTozNiArMDAwMCAgUmVuw6kgU3RhZGxlciA8bWFpbEByZW5lc3RhZGxlci5kZT4KKworCSAgZ3N0L2dzdGNsb2NrLmM6IE1ha2UgcGVyaW9kIGlkcyBhZGQgdGhlIGludGVydmFsIHRvIHRoZSBvcmlnaWFsIHJlcXVlc3RlZCB0aW1lIGluc3RlYWQgb2YgdGhlIHBvc3NpYmx5IHVwZGF0ZWQgdGltZSB3Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBSZW7DqSBTdGFkbGVyIDxtYWlsIGF0IHJlbmVzdGFkbGVyIGRvdCBkZT4KKwkgICogZ3N0L2dzdGNsb2NrLmM6IChnc3RfY2xvY2tfaWRfd2FpdCk6CisJICBNYWtlIHBlcmlvZCBpZHMgYWRkIHRoZSBpbnRlcnZhbCB0byB0aGUgb3JpZ2lhbCByZXF1ZXN0ZWQgdGltZSBpbnN0ZWFkCisJICBvZiB0aGUgcG9zc2libHkgdXBkYXRlZCB0aW1lIHdoaWNoIGNhbiBiZSB3cm9uZyB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZQorCSAgd2FpdGVycyBmb3IgdGhlIHNhbWUgaWQuIEZpeGVzICMzODI1OTIuCisJICAqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOiAoZ3N0X3N5c3RlbV9jbG9ja19hc3luY190aHJlYWQpLAorCSAgKGdzdF9zeXN0ZW1fY2xvY2tfaWRfd2FpdF9qaXR0ZXJfdW5sb2NrZWQpLAorCSAgKGdzdF9zeXN0ZW1fY2xvY2tfaWRfd2FpdF9qaXR0ZXIpOgorCSAgRml4IHJlc3RhcnQgaW4gdGhlIGFzeW5jIG5vdGlmeSB0aHJlYWQgd2hlbiBhbiBhc3luYyBlbnRyeSBpcyBhZGRlZCB0bworCSAgdGhlIGZyb250IG9mIHRoZSBsaXN0LiBGaXhlcyAjMzgxNDkyLgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3lzdGVtY2xvY2suYzogKHN0b3JlX2NhbGxiYWNrKSwKKwkgIChub3RpZnlfY2FsbGJhY2spLCAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3N5c3RlbWNsb2NrX3N1aXRlKToKKwkgIEFkZGVkIHRlc3QgZm9yIG11bHRpcGxlIGFzeW5jIHdhaXRzLgorCSAgQWRkZWQgdGVzdCBmb3IgYXN5bmMgd2FpdCBvcmRlci4KKworMjAwNi0xMi0wNyAxMDowMjoxOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJpbi5jOiBBZGQgc29tZSBtb3JlIGRvY3MgYWJvdXQgdGhlIFBPU0lUSU9OIHF1ZXJ5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fcXVlcnkpOgorCSAgQWRkIHNvbWUgbW9yZSBkb2NzIGFib3V0IHRoZSBQT1NJVElPTiBxdWVyeS4KKworMjAwNi0xMi0wNyAwMjozNzoxOCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIG5hbm8gLSBiYWNrIHRvIENWUy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICBCdW1wIHZlcnNpb24gbmFubyAtIGJhY2sgdG8gQ1ZTLgorCis9PT0gcmVsZWFzZSAwLjEwLjExID09PQorCisyMDA2LTEyLTA3IDAyOjMzOjU0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgY29uZmlndXJlLmFjOiByZWxlYXNpbmcgMC4xMC4xMSwgIkxvdmUgbmV2ZXIgcnVucyBvbiB0aW1lIgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICA9PT0gcmVsZWFzZSAwLjEwLjExID09PQorCSAgMjAwNi0xMi0wNiAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgIHJlbGVhc2luZyAwLjEwLjExLCAiTG92ZSBuZXZlciBydW5zIG9uIHRpbWUiCisKKzIwMDYtMTItMDEgMTA6MjM6MjYgKzAwMDAgIFNlcmdleSBTY29iaWNoIDxzZXJnZXkuc2NvYmljaEBnbWFpbC5jb20+CisKKwkgIHdpbjMyLzogRml4IGNvbXBpbGF0aW9uIG9uIHdpbjMyIHVuZGVyIFZTOAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKKwkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICAqIHdpbjMyL3ZzOC9saWJnc3RiYXNlLnZjcHJvajoKKwkgICogd2luMzIvdnM4L2xpYmdzdGNvcmVlbGVtZW50cy52Y3Byb2o6CisJICAqIHdpbjMyL3ZzOC9saWJnc3RyZWFtZXIudmNwcm9qOgorCSAgRml4IGNvbXBpbGF0aW9uIG9uIHdpbjMyIHVuZGVyIFZTOAorCSAgUGF0Y2ggYnk6IFNlcmdleSBTY29iaWNoIDxzZXJnZXkgZG90IHNjb2JpY2ggYXQgZ21haWwgZG90IGNvbT4KKwkgIFBhcnRpYWxseSBmaXhlcyAjMzgxMTc1CisKKzIwMDYtMTEtMzAgMjI6NTU6MDggKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmcucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGUucG86CisJKiBwby9lbl9HQi5wbzoKKwkqIHBvL2ZyLnBvOgorCSogcG8vaXQucG86CisJKiBwby9uYi5wbzoKKwkqIHBvL25sLnBvOgorCSogcG8vcnUucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJKiBwby96aF9DTi5wbzoKKwkqIHBvL3poX1RXLnBvOgorCSAgVXBkYXRlIC5wbyBmaWxlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBVcGRhdGUgLnBvIGZpbGVzCisKKzIwMDYtMTEtMjkgMTY6Mzk6MzIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBnc3QvZ3N0dmFsdWUuYzogSWYgc29tZW9uZSBpcyBmb29saXNoIGVub3VnaCB0byBjb21wYXJlIDIgZnJhY3Rpb25zIHdpdGggZGVub21pbmF0b3IgPSAwLCByZXR1cm4gVU5PUkRFUkVEIHJhdGhlciB0aGEuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF92YWx1ZV9jb21wYXJlX2ZyYWN0aW9uKToKKwkgIElmIHNvbWVvbmUgaXMgZm9vbGlzaCBlbm91Z2ggdG8gY29tcGFyZSAyIGZyYWN0aW9ucyB3aXRoIGRlbm9taW5hdG9yID0KKwkgIDAsIHJldHVybiBVTk9SREVSRUQgcmF0aGVyIHRoYW4gYWJvcnRpbmcuCisKKzIwMDYtMTEtMjggMTI6MDc6MDYgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvOiBOZXcgR3N0RGF0YVF1ZXVlIG9iamVjdCBmb3IgdGhyZWFkc2FmZSBxdWV1ZWluZy4gTW9zdCB1c2VmdWwgZm9yIGVsZW1lbnRzIHRoYXQgbmVlZCBzb21lIHF1ZXVlaW5nIGZ1bi4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmM6IChnc3RfZGF0YV9xdWV1ZV9nZXRfdHlwZSksCisJICAoZ3N0X2RhdGFfcXVldWVfYmFzZV9pbml0KSwgKGdzdF9kYXRhX3F1ZXVlX2NsYXNzX2luaXQpLAorCSAgKGdzdF9kYXRhX3F1ZXVlX2luaXQpLCAoZ3N0X2RhdGFfcXVldWVfbmV3KSwKKwkgIChnc3RfZGF0YV9xdWV1ZV9jbGVhbnVwKSwgKGdzdF9kYXRhX3F1ZXVlX2ZpbmFsaXplKSwKKwkgIChnc3RfZGF0YV9xdWV1ZV9sb2NrZWRfZmx1c2gpLCAoZ3N0X2RhdGFfcXVldWVfbG9ja2VkX2lzX2VtcHR5KSwKKwkgIChnc3RfZGF0YV9xdWV1ZV9sb2NrZWRfaXNfZnVsbCksIChnc3RfZGF0YV9xdWV1ZV9mbHVzaCksCisJICAoZ3N0X2RhdGFfcXVldWVfaXNfZW1wdHkpLCAoZ3N0X2RhdGFfcXVldWVfaXNfZnVsbCksCisJICAoZ3N0X2RhdGFfcXVldWVfc2V0X2ZsdXNoaW5nKSwgKGdzdF9kYXRhX3F1ZXVlX3B1c2gpLAorCSAgKGdzdF9kYXRhX3F1ZXVlX3BvcCksIChnc3RfZGF0YV9xdWV1ZV9kcm9wX2hlYWQpLAorCSAgKGdzdF9kYXRhX3F1ZXVlX3NldF9wcm9wZXJ0eSksIChnc3RfZGF0YV9xdWV1ZV9nZXRfcHJvcGVydHkpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5oOgorCSAgTmV3IEdzdERhdGFRdWV1ZSBvYmplY3QgZm9yIHRocmVhZHNhZmUgcXVldWVpbmcuIE1vc3QgdXNlZnVsIGZvcgorCSAgZWxlbWVudHMgdGhhdCBuZWVkIHNvbWUgcXVldWVpbmcgZnVuY3Rpb25uYWxpdHkuCisJICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1kb2NzLnNnbWw6CisJICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJICBJbnNlcnQgZG9jdW1lbnRhdGlvbiBmb3IgR3N0RGF0YVF1ZXVlCisJICAqIHBsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUuYW06CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IChnc3RfbXVsdGlfcXVldWVfYmFzZV9pbml0KSwKKwkgIChnc3RfbXVsdGlfcXVldWVfY2xhc3NfaW5pdCksIChnc3RfbXVsdGlfcXVldWVfaW5pdCksCisJICAoZ3N0X211bHRpX3F1ZXVlX2ZpbmFsaXplKSwgKGdzdF9tdWx0aV9xdWV1ZV9zZXRfcHJvcGVydHkpLAorCSAgKGdzdF9tdWx0aV9xdWV1ZV9nZXRfcHJvcGVydHkpLCAoZ3N0X211bHRpX3F1ZXVlX3JlcXVlc3RfbmV3X3BhZCksCisJICAoZ3N0X211bHRpX3F1ZXVlX3JlbGVhc2VfcGFkKSwgKGdzdF9zaW5nbGVfcXVldWVfcHVzaF9vbmUpLAorCSAgKGdzdF9tdWx0aV9xdWV1ZV9pdGVtX2Rlc3Ryb3kpLCAoZ3N0X211bHRpX3F1ZXVlX2l0ZW1fbmV3KSwKKwkgIChnc3RfbXVsdGlfcXVldWVfbG9vcCksIChnc3RfbXVsdGlfcXVldWVfY2hhaW4pLAorCSAgKGdzdF9tdWx0aV9xdWV1ZV9zaW5rX2FjdGl2YXRlX3B1c2gpLCAoZ3N0X211bHRpX3F1ZXVlX3NpbmtfZXZlbnQpLAorCSAgKGdzdF9tdWx0aV9xdWV1ZV9nZXRjYXBzKSwgKGdzdF9tdWx0aV9xdWV1ZV9idWZmZXJhbGxvYyksCisJICAoZ3N0X211bHRpX3F1ZXVlX3NyY19hY3RpdmF0ZV9wdXNoKSwgKGdzdF9tdWx0aV9xdWV1ZV9hY2NlcHRjYXBzKSwKKwkgIChnc3RfbXVsdGlfcXVldWVfc3JjX2V2ZW50KSwgKGdzdF9tdWx0aV9xdWV1ZV9zcmNfcXVlcnkpLAorCSAgKHdha2VfdXBfbmV4dF9ub25fbGlua2VkKSwgKGNvbXB1dGVfbmV4dF9ub25fbGlua2VkKSwKKwkgIChzaW5nbGVfcXVldWVfb3ZlcnJ1bl9jYiksIChzaW5nbGVfcXVldWVfdW5kZXJydW5fY2IpLAorCSAgKHNpbmdsZV9xdWV1ZV9jaGVja19mdWxsKSwgKGdzdF9zaW5nbGVfcXVldWVfbmV3KToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmg6CisJICBOZXcgbXVsdGlxdWV1ZSBlbGVtZW50LCB1c2luZyBHc3REYXRhUXVldWUuIFVzZWQgZm9yIHF1ZXVpbmcgbXVsdGlwbGUKKwkgIHN0cmVhbXMuCisJICBDbG9zZXMgIzM0NDYzOSBhbmQgIzM0Nzc4NQorCisyMDA2LTExLTIyIDEyOjI5OjQxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvcHdnL2FkdmFuY2VkLXR5cGVzLnhtbDogYWRkIG1vcmUgbWlzc2luZyB0eXBlIGRldGFpbHMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL3B3Zy9hZHZhbmNlZC10eXBlcy54bWw6CisJICBhZGQgbW9yZSBtaXNzaW5nIHR5cGUgZGV0YWlscworCSAgKiB0b29scy9nc3QtcnVuLmM6IChtYWluKToKKwkgIHJlbW92ZSB1bnVzZWQgdmFyaWFibGUKKworMjAwNi0xMS0yMSAwODozMDoyMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBkb2NzL2xpYnMvOiBhZGQgdHlwZXMgb2YgYmFzZSBjbGFzc2VzIHRvIGVuYWJsZSBnb2JqZWN0IHNwZWNpZmljIHN0dWZmIGluIHRoZSBkb2NzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9saWJzL01ha2VmaWxlLmFtOgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMudHlwZXM6CisJICBhZGQgdHlwZXMgb2YgYmFzZSBjbGFzc2VzIHRvIGVuYWJsZSBnb2JqZWN0IHNwZWNpZmljIHN0dWZmIGluIHRoZSBkb2NzCisJICAqIGRvY3MvcmFuZG9tL2Vuc29uaWMvZW1iZWRkZWQudHh0OgorCSAgbW9yZSBpZGVhcyBhYm91dCBpc29sYXRpbmcgcGxhdGZvcm0gc3BlY2lmaWMgdGhpbmdzCisKKzIwMDYtMTEtMjAgMTE6MTE6MjAgKzAwMDAgIFNlYmFzdGlhbiBEcm9lZ2UgPHNsb21vQHVidW50dS5jb20+CisKKwkgIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6IEZpeCBjb21waWxhdGlvbiBhbmQgcnVubmluZyBhZ2FpbnN0IDAuOS40LiBGaXhlcyAjMzc3MzMyLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogU2ViYXN0aWFuIERyb2VnZSA8c2xvbW8gYXQgdWJ1bnR1IGRvdCBjb20+CisJICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6CisJICBGaXggY29tcGlsYXRpb24gYW5kIHJ1bm5pbmcgYWdhaW5zdCAwLjkuNC4gRml4ZXMgIzM3NzMzMi4KKworMjAwNi0xMS0yMCAxMDoyNzo0OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHNlZ21lbnQuYzogRml4IGJvdW5kYXJ5IGNoZWNraW5nIGluIHRvX3J1bm5pbmdfdGltZSgpIGFuZCB0b19zdHJlYW1fdGltZSgpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RzZWdtZW50LmM6IChnc3Rfc2VnbWVudF9zZXRfc2VlayksCisJICAoZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnRfZnVsbCksIChnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSksCisJICAoZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lKToKKwkgIEZpeCBib3VuZGFyeSBjaGVja2luZyBpbiB0b19ydW5uaW5nX3RpbWUoKSBhbmQgdG9fc3RyZWFtX3RpbWUoKS4KKwkgIEZpeGVzICMzNzcxODMuCisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RzZWdtZW50LmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBzdHJlYW0gYW5kIHJ1bm5pbmcgdGltZSBjYW4gbm93IGJlIGNhbGN1bGF0ZWQgZm9yIHRoZSBjb21wbGV0ZQorCSAgY2xpcHBlZCBzZWdtZW50LgorCisyMDA2LTExLTE1IDE3OjM4OjEzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0cGFkLmM6IENhbid0IGFjY2VzcyBldmVudCBzdHJ1Y3R1cmUgYWZ0ZXIgZ2l2aW5nIGF3YXkgb3duZXJzaGlwIG9mIHRoZSBldmVudC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3B1c2hfZXZlbnQpOgorCSAgQ2FuJ3QgYWNjZXNzIGV2ZW50IHN0cnVjdHVyZSBhZnRlciBnaXZpbmcgYXdheSBvd25lcnNoaXAgb2YKKwkgIHRoZSBldmVudC4KKworMjAwNi0xMS0xNSAxMzowMDoxNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBkb2NzL3JhbmRvbS9lbnNvbmljLzogbW9yZSB0aGlua2luZworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcmFuZG9tL2Vuc29uaWMvZW1iZWRkZWQudHh0OgorCSAgKiBkb2NzL3JhbmRvbS9lbnNvbmljL3Byb2ZpbGluZy50eHQ6CisJICAqIGRvY3MvcmFuZG9tL2Vuc29uaWMvcmVjZWlwaWVzLnR4dDoKKwkgIG1vcmUgdGhpbmtpbmcKKworMjAwNi0xMS0xMyAxODowMzozNSArMDAwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFuYXV3QHNreW5ldC5iZT4KKworCSAgZ3N0L2dzdHBhZC5jOiBGaXggZG9jdW1lbnRhdGlvbiBmb3IgZ3N0X3BhZF9kaXNwYXRjaGVyLiBGaXhlcyAjMzc0NDc1LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogTWFyayBOYXV3ZWxhZXJ0cyA8bWFuYXV3IGF0IHNreW5ldCBkb3QgYmU+CisJICAqIGdzdC9nc3RwYWQuYzoKKwkgIEZpeCBkb2N1bWVudGF0aW9uIGZvciBnc3RfcGFkX2Rpc3BhdGNoZXIuIEZpeGVzICMzNzQ0NzUuCisKKzIwMDYtMTEtMTMgMTc6NTQ6NTggKzAwMDAgIEpvbmF0aGFuIE1hdHRoZXcgPGpvbmF0aGFuQGthb2xpbi53aDkubmV0PgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogU3RvcmUgbmV3IGxlbmd0aCBpbiBzZWdtZW50IGR1cmF0aW9uIHNvIHdlIGRvbid0IGtlZXAgb24gY2FsbGluZyB0aGUgcG90ZW50aWFsbHkgZXhwZW5zaXouLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IEpvbmF0aGFuIE1hdHRoZXcgPGpvbmF0aGFuIGF0IGthb2xpbiBkb3Qgd2g5IGRvdCBuZXQ+CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX3VwZGF0ZV9sZW5ndGgpOgorCSAgU3RvcmUgbmV3IGxlbmd0aCBpbiBzZWdtZW50IGR1cmF0aW9uIHNvIHdlIGRvbid0IGtlZXAgb24gY2FsbGluZyB0aGUKKwkgIHBvdGVudGlhbGx5IGV4cGVuc2l6ZSBnZXRfc2l6ZSgpIGNhbGwuIEZpeGVzICMzNzA4NjUuCisKKzIwMDYtMTEtMTAgMTg6NTY6NDQgKzAwMDAgIFNlcmdleSBTY29iaWNoIDxzZXJnZXJ5LnNjb2JpY2hAZ21haWwuY29tPgorCisJICB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjogQWRkIHR3byBtaXNzaW5nIHN5bWJvbHMgKCMzNjY0OTIpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogU2VyZ2V5IFNjb2JpY2ggIDxzZXJnZXJ5LnNjb2JpY2ggYXQgZ21haWwgY29tPgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIEFkZCB0d28gbWlzc2luZyBzeW1ib2xzICgjMzY2NDkyKS4KKworMjAwNi0xMS0xMCAxMDo1MDoxOSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOiBGaXggZm9ybWF0IHN0cmluZyB0byB1c2UgYWxsIGl0cyBhcmd1bWVudHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6IChnc3RfYWRhcHRlcl9mbHVzaCksCisJICAoZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIpOgorCSAgRml4IGZvcm1hdCBzdHJpbmcgdG8gdXNlIGFsbCBpdHMgYXJndW1lbnRzLgorCSAgUmVtb3ZlIHVzZWxlc3MgPj0gY2hlY2sgb24gYSBndWludAorCisyMDA2LTExLTA5IDE1OjI1OjM5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgdGVzdHMvZXhhbXBsZXMvYWRhcHRlci8uY3ZzaWdub3JlOiBJZ25vcmUgYnVpbGQgZmlsZSBhcyBjb21tYW5kZWQgYnkgdGhlIGJ1aWxkLWJvdAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2V4YW1wbGVzL2FkYXB0ZXIvLmN2c2lnbm9yZToKKwkgIElnbm9yZSBidWlsZCBmaWxlIGFzIGNvbW1hbmRlZCBieSB0aGUgYnVpbGQtYm90CisKKzIwMDYtMTEtMDkgMTQ6Mzg6NTkgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICB0ZXN0cy9leGFtcGxlcy9hZGFwdGVyLzogQWRkIG5ldyBmaWxlcyBmcm9tIHRoZSBwcmV2aW91cyBjb21taXQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9leGFtcGxlcy9hZGFwdGVyL01ha2VmaWxlLmFtOgorCSAgKiB0ZXN0cy9leGFtcGxlcy9hZGFwdGVyL2FkYXB0ZXJfdGVzdC5jOiAocnVuX3Rlc3RfdGFrZSksCisJICAocnVuX3Rlc3RfdGFrZV9idWZmZXIpLCAocnVuX3Rlc3RzKSwgKG1haW4pOgorCSAgQWRkIG5ldyBmaWxlcyBmcm9tIHRoZSBwcmV2aW91cyBjb21taXQKKworMjAwNi0xMS0wOSAxNDozNzozOCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIERvIHNvbWUgb3B0aW1pc2F0aW9uIHdvcmsgaW4gR3N0QWRhcHRlciB0byBhdm9pZCBjb3BpZXMgaW4gbW9yZSBjYXNlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBNYWtlZmlsZS5hbToKKwkgICogY29uZmlndXJlLmFjOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzogKGdzdF9hZGFwdGVyX2NsZWFyKSwKKwkgIChnc3RfYWRhcHRlcl9wdXNoKSwgKGdzdF9hZGFwdGVyX3BlZWtfaW50byksIChnc3RfYWRhcHRlcl9wZWVrKSwKKwkgIChnc3RfYWRhcHRlcl9mbHVzaCksIChnc3RfYWRhcHRlcl90YWtlKSwgKGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyKToKKwkgICogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmg6CisJICAqIHRlc3RzL2NoZWNrL2xpYnMvYWRhcHRlci5jOiAoY3JlYXRlX2FuZF9maWxsX2FkYXB0ZXIpLAorCSAgKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9hZGFwdGVyX3N1aXRlKToKKwkgICogdGVzdHMvZXhhbXBsZXMvTWFrZWZpbGUuYW06CisJICBEbyBzb21lIG9wdGltaXNhdGlvbiB3b3JrIGluIEdzdEFkYXB0ZXIgdG8gYXZvaWQgY29waWVzIGluIG1vcmUgY2FzZXMuCisJICBJdCBjb3VsZCBzdGlsbCBkbyBzbGlnaHRseSBiZXR0ZXIgYnkgbWVyZ2luZyBidWZmZXJzIHdoZW4KKwkgIGdzdF9idWZmZXJfaXNfc3Bhbl9mYXN0IGlzIHRydWUsIGJ1dCBpcyBhbHJlYWR5IGZhc3Rlci4KKwkgIEFsc28sIGF2b2lkIHRyYXZlcnNpbmcgYSBzaW5nbGUtbGlua2VkIGxpc3QgdG8gYXBwZW5kIGVhY2ggaW5jb21pbmcKKwkgIGJ1ZmZlciBpbnNpZGUgdGhlIGFkYXB0ZXIuCisJICBBZGQgc2ltcGxlIHRlc3QgYXBwIHRoYXQgdGltZXMgdGhlIGFkYXB0ZXIgYmVoYXZpb3VyIGluIGRpZmZlcmVudAorCSAgc2l0dWF0aW9ucywgYW5kIGV4dGVuZCB0aGUgdW5pdCB0ZXN0IHRvIGNoZWNrIHRoYXQgYnl0ZXMgZW50ZXIgYW5kCisJICBleGl0IHRoZSBhZGFwdGVyIGluIHRoZWlyIG9yaWdpbmFsIG9yZGVyLgorCisyMDA2LTExLTA4IDE5OjI3OjE1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBkb2NzL3JhbmRvbS9kcmFmdC1taXNzaW5nLXBsdWdpbnMudHh0OiBVcGRhdGU6IHVzZSBlbGVtZW50IG1lc3NhZ2UgaW5zdGVhZCBvZiBhZGRpbmcgYSBuZXcgbWVzc2FnZSB0eXBlIHRvIHRoZSBjb3JlOyAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL3JhbmRvbS9kcmFmdC1taXNzaW5nLXBsdWdpbnMudHh0OgorCSAgVXBkYXRlOiB1c2UgZWxlbWVudCBtZXNzYWdlIGluc3RlYWQgb2YgYWRkaW5nIGEgbmV3IG1lc3NhZ2UKKwkgIHR5cGUgdG8gdGhlIGNvcmU7IGRvbid0IHByb3ZpZGUgR1N0cmVhbWVyIEFQSSB0byBpbml0aWF0ZSB0aGUKKwkgIHBsdWdpbiBkb3dubG9hZCwganVzdCBwcm92aWRlIEFQSSB0byBjb21wb3NlIHRoZSBzdHJpbmdzIG5lZWRlZAorCSAgYW5kIGxldCBhbiBleHRlcm5hbCBsaWJnaW1tZXN0dWZmIGhhbmRsZSB0aGUgcmVzdC4KKworMjAwNi0xMS0wOCAxMTo0MToxMyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIHRvb2xzL2dzdC1pbnNwZWN0LmM6IFByaW50IGEgc3RyaW5nIGluc3RlYWQgb2YgJ3Vua25vd24gdHlwZScgZm9yIEdWYWx1ZUFycmF5IHByb3BlcnRpZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAocHJpbnRfZWxlbWVudF9wcm9wZXJ0aWVzX2luZm8pOgorCSAgUHJpbnQgYSBzdHJpbmcgaW5zdGVhZCBvZiAndW5rbm93biB0eXBlJyBmb3IgR1ZhbHVlQXJyYXkgcHJvcGVydGllcworCisyMDA2LTExLTA4IDEwOjM1OjI0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSogQ2hhbmdlTG9nOgorCSAgRml4IENocmlzdGlhbidzIGVtYWlsIGFkZHJlc3MgaW4gQ2hhbmdlbG9nCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIEZpeCBDaHJpc3RpYW4ncyBlbWFpbCBhZGRyZXNzIGluIENoYW5nZWxvZworCisyMDA2LTExLTA4IDAyOjA0OjUyICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+CisKKwkgIGRvY3MvcmFuZG9tL2RyYWZ0LW1pc3NpbmctcGx1Z2lucy50eHQ6IE1vcmUgc21hbGwgZml4ZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9yYW5kb20vZHJhZnQtbWlzc2luZy1wbHVnaW5zLnR4dDoKKwkgIE1vcmUgc21hbGwgZml4ZXMuCisKKzIwMDYtMTEtMDggMDI6MDM6NDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHRlc3RzL2V4YW1wbGVzL3R5cGVmaW5kL3R5cGVmaW5kLmM6IE1ha2UgdHlwZWZpbmQgZWxlbWVudCBleGFtcGxlIHdvcmsgYWdhaW4gKCMzNzE4OTQpOyBhZGQgYSBsaWNlbnNlIGhlYWRlci4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9leGFtcGxlcy90eXBlZmluZC90eXBlZmluZC5jOiAodHlwZV9mb3VuZCksIChtYWluKToKKwkgIE1ha2UgdHlwZWZpbmQgZWxlbWVudCBleGFtcGxlIHdvcmsgYWdhaW4gKCMzNzE4OTQpOyBhZGQgYQorCSAgbGljZW5zZSBoZWFkZXIuCisKKzIwMDYtMTEtMDggMDE6NDA6MjcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGRvY3MvcmFuZG9tL2RyYWZ0LW1pc3NpbmctcGx1Z2lucy50eHQ6IENvbW1pdCBpbml0aWFsIGRyYWZ0IGFib3V0IGhvdyB0byBkZWFsIHdpdGggbWlzc2luZyBwbHVnaW5zLCBuZWVkcyB3b3JrIChBUEkgdC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcmFuZG9tL2RyYWZ0LW1pc3NpbmctcGx1Z2lucy50eHQ6CisJICBDb21taXQgaW5pdGlhbCBkcmFmdCBhYm91dCBob3cgdG8gZGVhbCB3aXRoIG1pc3NpbmcgcGx1Z2lucywKKwkgIG5lZWRzIHdvcmsgKEFQSSB0b28pLgorCisyMDA2LTExLTA3IDA3OjM0OjQzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvcHdnL2FkdmFuY2VkLXR5cGVzLnhtbDogZG9jdW1lbnRzIHRoZSBuZXcgY2FwcyBlbGVtZW50cyAoc2VlICMzNjMxMTgpCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9wd2cvYWR2YW5jZWQtdHlwZXMueG1sOgorCSAgZG9jdW1lbnRzIHRoZSBuZXcgY2FwcyBlbGVtZW50cyAoc2VlICMzNjMxMTgpCisKKzIwMDYtMTEtMDYgMTc6NTM6MjQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIFVzZSBnX3N0cmVycm9yKCkgaW5zdGVhZCBvZiBzdHJlcnJvcigpIC0gd2Ugd2FudCBVVEYtOC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGx1Z2luLmM6IChnc3RfcGx1Z2luX2xvYWRfZmlsZSk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiAoZ3N0X21tYXBfYnVmZmVyX2ZpbmFsaXplKSwKKwkgIChnc3RfZmlsZV9zcmNfbWFwX3JlZ2lvbiksIChnc3RfZmlsZV9zcmNfc3RhcnQpOgorCSAgKiBwbHVnaW5zL2luZGV4ZXJzL2dzdGZpbGVpbmRleC5jOiAoZ3N0X2ZpbGVfaW5kZXhfbG9hZCksCisJICAoZ3N0X2ZpbGVfaW5kZXhfY29tbWl0KToKKwkgIFVzZSBnX3N0cmVycm9yKCkgaW5zdGVhZCBvZiBzdHJlcnJvcigpIC0gd2Ugd2FudCBVVEYtOC4KKworMjAwNi0xMS0wNiAxNzoyNTowMSArMDAwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzogQW5vdGhlciBwcmludGYgZml4ICgjMzcxNDkzKS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqIGF0IGF4aXMgY29tPgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6IChnc3RfZmRfc3JjX2NyZWF0ZSk6CisJICBBbm90aGVyIHByaW50ZiBmaXggKCMzNzE0OTMpLgorCisyMDA2LTExLTA2IDE1OjIyOjQwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIHRlc3RzL2NoZWNrL2dzdC9nc3R0YWcuYzogcmVsaWNlbmNlIChva2F5IHdpdGggYXV0aG9yPWNvbXBhbnkpCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHRhZy5jOgorCSAgcmVsaWNlbmNlIChva2F5IHdpdGggYXV0aG9yPWNvbXBhbnkpCisKKzIwMDYtMTEtMDYgMTU6MTg6NTcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdHBhZC5jOiBFbmhhbmNlIGRlYnVnIGFuZCBpbXByb3ZlIGRvY3MKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2V2ZW50X2RlZmF1bHRfZGlzcGF0Y2gpLAorCSAgKGdzdF9wYWRfcHVzaF9ldmVudCk6CisJICBFbmhhbmNlIGRlYnVnIGFuZCBpbXByb3ZlIGRvY3MKKwkgICogZ3N0L2dzdHVyaS5jOgorCSAgRml4IGRvY3MKKworMjAwNi0xMS0wNiAxNToxNzozNSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBkb2NzL3JhbmRvbS9lbnNvbmljLzogbW9yZSBpZGVhcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcmFuZG9tL2Vuc29uaWMvZGlzdHJpYnV0ZWQudHh0OgorCSAgKiBkb2NzL3JhbmRvbS9lbnNvbmljL3Byb2ZpbGluZy50eHQ6CisJICBtb3JlIGlkZWFzCisKKzIwMDYtMTEtMDYgMTU6MTQ6NDYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogYWRkIG5ldyBBUEkgYW5kIGZpeCB0aGUgYnVpbGQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgYWRkIG5ldyBBUEkgYW5kIGZpeCB0aGUgYnVpbGQKKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9yZWNhbGNfc3RhdGUpOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfbWVzc2FnZV9mdWxsKSwKKwkgIChnc3RfZWxlbWVudF9nZXRfc3RhdGVfZnVuYyksIChnc3RfZWxlbWVudF9zZXRfc3RhdGVfZnVuYyk6CisJICB1c2UgbmV3IEFQSSBhbmQgaW1wcm92ZSBsb2dnaW5nCisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRfbmFtZSk6CisJICAqIGdzdC9nc3R1dGlscy5oOgorCSAgQVBJOiBhZGQgZnVuY3Rpb24gdG8gZ2V0IFN0YXRlQ2hhbmdlcmV0dXJuIG5hbWVzIHRvIGltcHJvdmUgbG9ncworCisyMDA2LTExLTA2IDEyOjAxOjI3ICswMDAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgorCisJKiBkb2NzL3JhbmRvbS96YWhlZXJtL2R2Yi1pbnRlcmZhY2UudHh0OgorCSAgTm90ZXMgdGFrZW4gd2hpbGUgZGlzY3Vzc2luZyBkdmIgY2hhbm5lbCBzZWxlY3Rpb24gd2l0aCBXaW0KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgTm90ZXMgdGFrZW4gd2hpbGUgZGlzY3Vzc2luZyBkdmIgY2hhbm5lbCBzZWxlY3Rpb24gd2l0aCBXaW0KKworMjAwNi0xMS0wNCAxMjo1NDowOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIGRvY3MvcmFuZG9tL21vdmluZy1wbHVnaW5zOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6CisJICBkb24ndCBwdXQgc3RyZXJyb3IgaW4gdHJhbnNsYXRhYmxlIG1lc3NhZ2UKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZG9uJ3QgcHV0IHN0cmVycm9yIGluIHRyYW5zbGF0YWJsZSBtZXNzYWdlCisKKzIwMDYtMTEtMDMgMTU6MDQ6NDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzogR2V0IHRoZSB0eXBlIGFuZCBwcmludGYgY29udmVyc2lvbiBzcGVjaWZpZXJzIHJpZ2h0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzogKGdzdF9mZF9zcmNfY3JlYXRlKToKKwkgIEdldCB0aGUgdHlwZSBhbmQgcHJpbnRmIGNvbnZlcnNpb24gc3BlY2lmaWVycyByaWdodC4KKworMjAwNi0xMS0wMyAxMzo1NzoyOCArMDAwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFuYXV3QHNreW5ldC5iZT4KKworCSAgZ3N0L2dzdHBhZC5jOiBTb21lIHNtYWxsIGNsZWFudXBzLiBJbXByb3ZlIGRlYnVnZ2luZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IE1hcmsgTmF1d2VsYWVydHMgPG1hbmF1dyBhdCBza3luZXQgZG90IGJlPgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2luaXQpLCAocHJlX2FjdGl2YXRlKSwKKwkgIChnc3RfcGFkX3NldF9ibG9ja2VkX2FzeW5jKSwgKGdzdF9wYWRfYWNjZXB0Y2Fwc19kZWZhdWx0KSwKKwkgIChnc3RfcGFkX2FjY2VwdF9jYXBzKSwgKGhhbmRsZV9wYWRfYmxvY2spLCAoZ3N0X3BhZF9wdXNoX2V2ZW50KToKKwkgIFNvbWUgc21hbGwgY2xlYW51cHMuIEltcHJvdmUgZGVidWdnaW5nLgorCSAgKiBnc3QvZ3N0cGFkLmg6CisJICBTaWduYWwgYWxsIHdhaXRpbmcgdGhyZWFkcyB3aXRoIGEgYnJvYWRjYXN0IGluc3RlYWQgb2YganVzdCBvbmUuCisJICBGaXhlcyAjMzY5OTQyLgorCisyMDA2LTExLTAzIDA5OjQwOjAzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6IEFkZCBzb21lIGRlYnVnZ2luZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6IChnc3RfZmRfc3JjX3VwZGF0ZV9mZCksCisJICAoZ3N0X2ZkX3NyY19jcmVhdGUpOgorCSAgQWRkIHNvbWUgZGVidWdnaW5nLgorCSAgT25seSB1cGRhdGUgZmQgd2hlbiBpdCdzIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQuCisKKzIwMDYtMTEtMDIgMjA6NTI6MjEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiBQcmludGYgZml4ZXMgZm9yIFBQQy9PU1gsIHRha2UgdHdvICgjMzY5MzY2KS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogKGdzdF9maWxlX3NyY19jcmVhdGVfbW1hcCk6CisJICBQcmludGYgZml4ZXMgZm9yIFBQQy9PU1gsIHRha2UgdHdvICgjMzY5MzY2KS4KKworMjAwNi0xMS0wMiAxMzowMDozOCArMDAwMCAgSmFuIERhdmlkIE1vbCA8ai5qLmQubW9sQHR1ZGVsZnQubmw+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvOiBQcmludGYgZml4ZXMgZm9yIGdzaXplIHBhcmFtZXRlcnMgb24gUFBDL09TWCAoIzM2OTM2NikuIEFsc28sIGRvbid0IGNhc3QgdG8gbG9uZyBsb25nIGZvciBwb3J0YWJpbC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBCYXNlZCBvbiBwYXRjaCBieTogSmFuIERhdmlkIE1vbCAgPGouai5kLm1vbCBhdCB0dWRlbGZ0IG5sPgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IChnc3RfZmlsZV9zaW5rX2NsYXNzX2luaXQpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogKGdzdF9maWxlX3NyY19jbGFzc19pbml0KSwKKwkgIChnc3RfZmlsZV9zcmNfbWFwX3NtYWxsX3JlZ2lvbiksIChnc3RfZmlsZV9zcmNfY3JlYXRlX21tYXApOgorCSAgUHJpbnRmIGZpeGVzIGZvciBnc2l6ZSBwYXJhbWV0ZXJzIG9uIFBQQy9PU1ggKCMzNjkzNjYpLiBBbHNvLAorCSAgZG9uJ3QgY2FzdCB0byBsb25nIGxvbmcgZm9yIHBvcnRhYmlsaXR5IHJlYXNvbnMsIGJ1dCB1c2UKKwkgIEdMaWIncyB0eXBlcyBpbnN0ZWFkLgorCisyMDA2LTEwLTMwIDE4OjQzOjEyICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzogR2V0IHRoZSBhcmd1bWVudHMgdG8gbHNlZWsoKSB0aGUgcmlnaHQgd2F5IGFyb3VuZC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6IChnc3RfZmRfc3JjX3VwZGF0ZV9mZCk6CisJICBHZXQgdGhlIGFyZ3VtZW50cyB0byBsc2VlaygpIHRoZSByaWdodCB3YXkgYXJvdW5kLgorCSAgRml4ZXMgMzY3Njc3LgorCisyMDA2LTEwLTMwIDA3OjUxOjEzICswMDAwICBnb3JzaGtvdiA8Z29yc2hrb3ZAb2dobWEub24uY2E+CisKKwkgIGdzdC9nc3RpbmZvLmg6IF9kZWNsc3BlYyBzaG91bGQgYmUgX19kZWNsc3BlYyAodHdvIHVuZGVyc2NvcmVzLCBub3Qgb25lKS4gRml4ZXMgMzY2NTcyLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogZ29yc2hrb3YgPGdvcnNoa292IGF0IG9naG1hIGRvdCBvbiBkb3QgY2E+CisJICAqIGdzdC9nc3RpbmZvLmg6CisJICBfZGVjbHNwZWMgc2hvdWxkIGJlIF9fZGVjbHNwZWMgKHR3byB1bmRlcnNjb3Jlcywgbm90IG9uZSkuIEZpeGVzIDM2NjU3Mi4KKworMjAwNi0xMC0yOCAxNTo0MjoyOSArMDAwMCAgS2phcnRhbiBNYXJhYXMgPGttYXJhYXNAZ25vbWUub3JnPgorCisJICBUeXBvIGZpeGVzICgjMzY2MjEyKS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IEtqYXJ0YW4gTWFyYWFzICA8a21hcmFhcyBhdCBnbm9tZSBvcmc+CisJICAqIGRvY3MvZGVzaWduL3BhcnQtTVQtcmVmY291bnRpbmcudHh0OgorCSAgKiBkb2NzL3JhbmRvbS93dGF5L2NhcHNuZWdvMi1kb2NzOgorCSAgKiBnc3QvZ3N0Y2xvY2suYzoKKwkgICogZ3N0L2dzdHhtbC5jOgorCSAgVHlwbyBmaXhlcyAoIzM2NjIxMikuCisKKzIwMDYtMTAtMjggMTU6MTA6MjYgKzAwMDAgIFNlcmdleSBTY29iaWNoIDxzZXJnZXkuc2NvYmljaEBnbWFpbC5jb20+CisKKwkgIEFkZCBuZWVkZWQgZW50cmllcyBpbiAuZGVmIGZpbGVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogU2VyZ2V5IFNjb2JpY2ggPHNlcmdleSBkb3Qgc2NvYmljaCBhdCBnbWFpbCBkb3QgY29tPgorCSAgKiBnc3QvZ3N0LmM6CisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKKwkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICAqIHdpbjMyL3ZzOC9saWJnc3RiYXNlLnZjcHJvajoKKwkgICogd2luMzIvdnM4L2xpYmdzdGNvbnRyb2xsZXIudmNwcm9qOgorCSAgQWRkIG5lZWRlZCBlbnRyaWVzIGluIC5kZWYgZmlsZXMuCisJICBVc2UgSEFWRV9VTklTVERfSC4KKwkgIFJlYXJyYW5nZSBkZWYgZmlsZXMgaW4gdnM4IHNvbHV0aW9ucy4gRml4ZXMgIzM2NjI4Ni4KKworMjAwNi0xMC0yOCAxNTowMzoxOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgd2luMzIvY29tbW9uL2dzdGNvbmZpZy5oOiBBZGQgR1NUX1NFR01FTlRfRk9STUFUIGFuZCBHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTiB0byB0aGUgaGFuZC1tYWRlIHdpbjMyIGdzdGNvbmZpZy5oLiBGLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogd2luMzIvY29tbW9uL2dzdGNvbmZpZy5oOgorCSAgQWRkIEdTVF9TRUdNRU5UX0ZPUk1BVCBhbmQgR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT04gdG8gdGhlCisJICBoYW5kLW1hZGUgd2luMzIgZ3N0Y29uZmlnLmguIEZpeGVzICMzNjYzMjEuCisKKzIwMDYtMTAtMjcgMTY6MzE6MTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RnaG9zdHBhZC5jOiBNYWtlIGFjY2VwdGNhcHMgcmV0dXJuIFRSVUUgd2hlbiB3ZSBkb24ndCBoYXZlIGEgdGFyZ2V0LCBqdXN0IGxpa2Ugc2V0Y2FwcyBkb2VzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RnaG9zdHBhZC5jOiAoZ3N0X3Byb3h5X3BhZF9kb19hY2NlcHRjYXBzKSwKKwkgIChnc3RfZ2hvc3RfcGFkX25ld19mdWxsKToKKwkgIE1ha2UgYWNjZXB0Y2FwcyByZXR1cm4gVFJVRSB3aGVuIHdlIGRvbid0IGhhdmUgYSB0YXJnZXQsIGp1c3QgbGlrZQorCSAgc2V0Y2FwcyBkb2VzLgorCisyMDA2LTEwLTI3IDEwOjEwOjI2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogUmV2ZXJ0IHByZXZpb3VzIGNvbW1pdCwgMCBzaXplZCBidWZmZXJzIGFyZSBhbGxvd2VkLiBSZW9wZW5zICMzNjMwOTUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1fY2hhaW4pOgorCSAgUmV2ZXJ0IHByZXZpb3VzIGNvbW1pdCwgMCBzaXplZCBidWZmZXJzIGFyZSBhbGxvd2VkLiBSZW9wZW5zICMzNjMwOTUuCisKKzIwMDYtMTAtMjYgMDg6NDk6NTIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RzdHJ1Y3R1cmUuYzogSWYgc29tZW9uZSB0cmllcyB0byBzZXQgYSBub24tVVRGOCBzdHJpbmcgZmllbGQgb24gYSBzdHJ1Y3R1cmUsIGRvbid0IGp1c3QgcHJpbnQgYSB3YXJuaW5nLCBidXQgYS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzogKGdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlKToKKwkgIElmIHNvbWVvbmUgdHJpZXMgdG8gc2V0IGEgbm9uLVVURjggc3RyaW5nIGZpZWxkIG9uIGEgc3RydWN0dXJlLAorCSAgZG9uJ3QganVzdCBwcmludCBhIHdhcm5pbmcsIGJ1dCBhbHNvIGlnbm9yZSB0aGUgcmVxdWVzdCBhbmQgZG8KKwkgIG5vdCBjaGFuZ2UvYWRkIHRoYXQgZmllbGQgdG8gdGhlIHN0cnVjdHVyZS4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHRhZy5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3RhZ19zdWl0ZSk6CisJICBUZXN0IGZvciB0aGUgYWJvdmUuCisKKzIwMDYtMTAtMjYgMDA6MDA6MzQgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJICBnc3QvZ3N0aW5mby5jOiBnX2hhc2hfdGFibGVfaW5zZXJ0KCkgbmVlZHMgYSBjYXN0IHRvIGEgbm9uLWNvbnN0IHBvaW50ZXIgZHVoLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RpbmZvLmM6CisJICBnX2hhc2hfdGFibGVfaW5zZXJ0KCkgbmVlZHMgYSBjYXN0IHRvIGEgbm9uLWNvbnN0IHBvaW50ZXIgZHVoLgorCisyMDA2LTEwLTI1IDIzOjQ3OjQwICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSAgZ3N0L2dzdGluZm8uKjogQ2hhbmdlIG5hbWUgcGFyYW1ldGVyIG9mIF9nc3RfZGVidWdfcmVnaXN0ZXJfZnVuY3B0ciB0byBjb25zdCB0byByZWZsZWN0IHRoZSBjb25zdG5lc3Mgb2YgaXRzIHVzZSBpbiB0Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGluZm8uYzoKKwkgICogZ3N0L2dzdGluZm8uaDoKKwkgIENoYW5nZSBuYW1lIHBhcmFtZXRlciBvZiBfZ3N0X2RlYnVnX3JlZ2lzdGVyX2Z1bmNwdHIgdG8gY29uc3QKKwkgIHRvIHJlZmxlY3QgdGhlIGNvbnN0bmVzcyBvZiBpdHMgdXNlIGluIHRoZSBmdW5jdGlvbiBhcyB3ZWxsCisJICBhcyB0byBxdWlldCBhIGdjYyB3YXJuaW5nLgorCisyMDA2LTEwLTI1IDEzOjQxOjQ0ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogRG9uJ3QgcHVzaCB0aGUgYnVmZmVyIGlmIGl0J3MgZW1wdHkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1fY2hhaW4pOgorCSAgRG9uJ3QgcHVzaCB0aGUgYnVmZmVyIGlmIGl0J3MgZW1wdHkuCisJICBDbG9zZXMgIzM2MzA5NQorCisyMDA2LTEwLTI0IDA4OjIyOjE5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0ZXZlbnQuaDogQWRkIHNtYWxsIGNvbW1lbnQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGV2ZW50Lmg6CisJICBBZGQgc21hbGwgY29tbWVudC4KKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NpbmtfZXZlbnRmdW5jKToKKwkgIERlYnVnIHNlZ21lbnQgdmFsdWVzICphZnRlciogdXBkYXRpbmcgdGhlbSBhcyB0aGlzIGlzIG1vcmUKKwkgIGludGVyZXN0aW5nLgorCisyMDA2LTEwLTIzIDE1OjIxOjEyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQ6IFVwZGF0ZSBzb21lIGRvY3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1ldmVudHMudHh0OgorCSAgVXBkYXRlIHNvbWUgZG9jcy4KKwkgICogZG9jcy9kZXNpZ24vcGFydC1ibG9jay50eHQ6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfaXNfYmxvY2tpbmcpLCAoaGFuZGxlX3BhZF9ibG9jayksCisJICAoZ3N0X3BhZF9wdXNoX2V2ZW50KToKKwkgIFJldmVydCBCTE9DS0lORyBwYXRjaCwgaXQgdHJpZXMgdG8gYmUgc21hcnQgd2l0aG91dCByZWFsbHkgaGF2aW5nIGEKKwkgIGNsZWFyIGlkZWEgd2hhdCBvciBob3cuIFNvLCBub3cgd2UgZGlzY2FyZCBhbGwgRkxVU0hJTkcgZXZlbnRzIGFnYWluIG9uCisJICBhIGJsb2NraW5nIHBhZC4gU2hvdWxkIGZpeCBnbm9ubGluIGFnYWluLgorCisyMDA2LTEwLTIzIDE0OjUxOjMwICswMDAwICBTZXJnZXkgU2NvYmljaCA8c2VyZ2V5LnNjb2JpY2hAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogTWFrZSBzdXJlIHNpemUgaXMgYWx3YXlzIGluaXRpYWxpemVkLiBGaXhlcyAjMzY0Mzg4LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogU2VyZ2V5IFNjb2JpY2ggPHNlcmdleSBkb3Qgc2NvYmljaCBhdCBnbWFpbCBkb3QgY29tPgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY193YWl0X3BsYXlpbmcpLAorCSAgKGdzdF9iYXNlX3NyY19zdGFydCksIChnc3RfYmFzZV9zcmNfYWN0aXZhdGVfcHVzaCk6CisJICBNYWtlIHN1cmUgc2l6ZSBpcyBhbHdheXMgaW5pdGlhbGl6ZWQuIEZpeGVzICMzNjQzODguCisKKzIwMDYtMTAtMjAgMTE6MzY6NTYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZG9jcy9yYW5kb20vZW5zb25pYy9kaXN0cmlidXRlZC50eHQ6IGFkZCBzb21lIGlkZWFzIGFib3V0IGRvaW5nIGRpc3RyaWJ1dGVkIHByb2Nlc3NpbmcKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL3JhbmRvbS9lbnNvbmljL2Rpc3RyaWJ1dGVkLnR4dDoKKwkgIGFkZCBzb21lIGlkZWFzIGFib3V0IGRvaW5nIGRpc3RyaWJ1dGVkIHByb2Nlc3NpbmcKKwkgICogZG9jcy9yYW5kb20vZW5zb25pYy9wcm9maWxpbmcudHh0OgorCSAgZ2V0X3J1c2FnZSBsb29rIHByb21pc2luZworCisyMDA2LTEwLTE4IDE5OjQzOjQ2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvbWFudWFsL2Jhc2ljcy1oZWxsb3dvcmxkLnhtbDogQWRkIGEgY2FzdCBpbiBleGFtcGxlIHRvIGZpeCBjb21waWxlIHdhcm5pbmcKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtaGVsbG93b3JsZC54bWw6CisJICBBZGQgYSBjYXN0IGluIGV4YW1wbGUgdG8gZml4IGNvbXBpbGUgd2FybmluZworCisyMDA2LTEwLTE4IDE1OjI4OjE5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0c2VnbWVudC5jOiBSZWxheCBhcmcgY2hlY2tpbmcgYWdhaW4sIC0xIGlzIGFsbG93ZWQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHNlZ21lbnQuYzogKGdzdF9zZWdtZW50X3NldF9sYXN0X3N0b3ApLAorCSAgKGdzdF9zZWdtZW50X3NldF9zZWVrKSwgKGdzdF9zZWdtZW50X3NldF9uZXdzZWdtZW50X2Z1bGwpOgorCSAgUmVsYXggYXJnIGNoZWNraW5nIGFnYWluLCAtMSBpcyBhbGxvd2VkLgorCisyMDA2LTEwLTE4IDEzOjI3OjM5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0c2VnbWVudC5jOiBfc2V0X2xhc3Rfc3RvcCgpIG11c3QgYmUgd2l0aCBhIHZhbHVlICE9IC0xCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHNlZ21lbnQuYzogKGdzdF9zZWdtZW50X3NldF9sYXN0X3N0b3ApLAorCSAgKGdzdF9zZWdtZW50X3NldF9zZWVrKSwgKGdzdF9zZWdtZW50X3NldF9uZXdzZWdtZW50X2Z1bGwpOgorCSAgX3NldF9sYXN0X3N0b3AoKSBtdXN0IGJlIHdpdGggYSB2YWx1ZSAhPSAtMQorCSAgQSBfVFlQRV9TRVQgdG8gLTEgbWVhbnMgc2VlayB0byAwLgorCSAgQ2FsYyBsYXN0X3N0b3AgY29ycmVjdGx5IGZvciBuZWdhdGl2ZSByYXRlcy4KKwkgIE1ha2Ugc3VyZSB3ZSB3b3JrIHdpdGggcG9zaXRpdmUgZHVyYXRpb25zIHdoZW4gdXBkYXRpbmcgYSBzZWdtZW50LgorCisyMDA2LTEwLTE4IDEzOjIxOjU2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBTbWFsbCBkb2NzIGZpeGVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtbGl2ZS1zb3VyY2UudHh0OgorCSAgKiBnc3QvZ3N0Y2xvY2suaDoKKwkgIFNtYWxsIGRvY3MgZml4ZXMuCisKKzIwMDYtMTAtMTggMTA6MDg6NDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RidWZmZXIuaDogQWRkIGFuIGV4cGxpY2l0IGNhc3QgdG8gR3N0QnVmZmVyKiogdG8ga2VlcCBvbGQgY29kZSB0aGF0IGFkZGVkIGFuIGV4cGxpY2l0IGNhc3QgdG8gR3N0TWluaU9iamVjdCoqIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RidWZmZXIuaDoKKwkgIEFkZCBhbiBleHBsaWNpdCBjYXN0IHRvIEdzdEJ1ZmZlcioqIHRvIGtlZXAgb2xkIGNvZGUgdGhhdCBhZGRlZCBhbgorCSAgZXhwbGljaXQgY2FzdCB0byBHc3RNaW5pT2JqZWN0KiogZm9yIGdzdF9taW5pX29iamVjdF9yZXBsYWNlKCkKKwkgIGNvbXBpbGluZyB3aXRob3V0IHdhcm5pbmcuCisKKzIwMDYtMTAtMTggMDg6NTQ6MzAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdHZhbHVlLmM6IGNoZWNrIGZvciB2YWxpZGl0eSBvZiBkYXRlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X3ZhbHVlX3NldF9kYXRlKSwgKGdzdF9kYXRlX2NvcHkpOgorCSAgY2hlY2sgZm9yIHZhbGlkaXR5IG9mIGRhdGVzCisKKzIwMDYtMTAtMTcgMTI6MDk6MzUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IEZvcmdvdCB0aGlzIG9uZSwgbWFrZXMgZ3RrLWRvYyBzaHV0IHVwLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICBGb3Jnb3QgdGhpcyBvbmUsIG1ha2VzIGd0ay1kb2Mgc2h1dCB1cC4KKworMjAwNi0xMC0xNyAxMTo1NzozMiArMDAwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+CisKKwkgIGdzdC9nc3RvYmplY3QuaDogRG9uJ3QgZGVmaW5lIHhtbE5vZGVQdHIgdG8gZ3BvaW50ZXIgaWYgdGhlIGNvcmUgd2FzIGJ1aWx0IHdpdGgKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqIGF0IGF4aXMgY29tPgorCSAgKiBnc3QvZ3N0b2JqZWN0Lmg6CisJICBEb24ndCBkZWZpbmUgeG1sTm9kZVB0ciB0byBncG9pbnRlciBpZiB0aGUgY29yZSB3YXMgYnVpbHQgd2l0aAorCSAgLS1kaXNhYmxlLWxvYWRzYXZlIGFuZCAtLWRpc2FibGUtcmVnaXN0cnksIHRoaXMgd2lsbCBicmVhaworCSAgYXBwbGljYXRpb25zIHRoYXQgd2FudCB0byB1c2UgbGlieG1sMiBidXQgYXJlIGJ1aWxkbGluZyBhZ2FpbnN0IGEKKwkgIGNvcmUgdGhhdCBkb2Vzbid0IHVzZSBsaWJ4bWwyLiBVc2UgYW4gaW50ZXJtZWRpYXJ5IHR5cGUgR3N0WG1sTm9kZVB0cgorCSAgaW5zdGVhZCBzbyB3ZSBkb24ndCBoYXZlIHRvIG1lc3Mgd2l0aCB0aGUgbGlieG1sMiBuYW1lc3BhY2UKKwkgICgjMzYxNjc1KS4KKworMjAwNi0xMC0xNyAxMDozMDoyNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdGJ1ZmZlci5oOiBGaXggZ3N0X2J1ZmZlcl9yZXBsYWNlKCkgbWFjcm8gdG8gYXZvaWQgZ3N0X21pbmlfb2JqZWN0X3JlcGxhY2UoKS1yZWxhdGVkIHR5cGUtcHVubmVkIHBvaW50ZXIgd2FybmluZ3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJ1ZmZlci5oOgorCSAgRml4IGdzdF9idWZmZXJfcmVwbGFjZSgpIG1hY3JvIHRvIGF2b2lkIGdzdF9taW5pX29iamVjdF9yZXBsYWNlKCktcmVsYXRlZAorCSAgdHlwZS1wdW5uZWQgcG9pbnRlciB3YXJuaW5ncy4KKworMjAwNi0xMC0xNiAyMDowMjozOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdGVsZW1lbnQuaDogQWRkIGNhc3RzIHRvIHRoZSBjb3JyZWN0IHJldHVybiB0eXBlIHRvIHN0YXRlIDw9PiBzdGF0ZSB0cmFuc2l0aW9uIG1hY3Jvcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSAgQWRkIGNhc3RzIHRvIHRoZSBjb3JyZWN0IHJldHVybiB0eXBlIHRvIHN0YXRlIDw9PiBzdGF0ZSB0cmFuc2l0aW9uCisJICBtYWNyb3MuCisKKzIwMDYtMTAtMTYgMTM6NTM6NTUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1saXZlLXNvdXJjZS50eHQ6IGRlc2NyaWJlIGhvd3RvIGhhbmRsZSBsYXRlbmN5CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1saXZlLXNvdXJjZS50eHQ6CisJICBkZXNjcmliZSBob3d0byBoYW5kbGUgbGF0ZW5jeQorCSAgKiBkb2NzL3JhbmRvbS9lbnNvbmljL3Byb2ZpbGluZy50eHQ6CisJICBtb3JlIGlkZWFzCisJICAqIHRvb2xzL2dzdC1wbG90LXRpbWVsaW5lLnB5OgorCSAgZml4IGxvZyBwYXJzaW5nIGZvciBzb2xhcmlzLCByZW1vdmUgdW51c2VkIGZ1bmN0aW9uCisKKzIwMDYtMTAtMTYgMTE6NDY6MDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIFVwZGF0ZSBzb21lIGRvY3MgcmVnYXJkaW5nIHJldmVyc2UgcGxheWJhY2suCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC10cmlja21vZGVzLnR4dDoKKwkgICogZ3N0L2dzdGV2ZW50LmM6CisJICBVcGRhdGUgc29tZSBkb2NzIHJlZ2FyZGluZyByZXZlcnNlIHBsYXliYWNrLgorCisyMDA2LTEwLTE1IDEyOjQ3OjEzICswMDAwICBNYXJjdXMgR3JhbmFkbyA8bXJjLmdyYW5AZ21haWwuY29tPgorCisJICB3aW4zMi92czgvZ3JhbW1hci52Y3Byb2o6IEVycm9yIG91dCB3aXRoIGEgd2FybmluZyBpZiBnbGliLWdlbm1hcnNoYWwuZXhlIGlzIG5vdCBpbiBwYXRoLCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGJvZ3VzIGcuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IE1hcmN1cyBHcmFuYWRvICA8bXJjIGRvdCBncmFuIGF0IGdtYWlsIGNvbT4KKwkgICogd2luMzIvdnM4L2dyYW1tYXIudmNwcm9qOgorCSAgRXJyb3Igb3V0IHdpdGggYSB3YXJuaW5nIGlmIGdsaWItZ2VubWFyc2hhbC5leGUgaXMgbm90IGluIHBhdGgsCisJICBpbnN0ZWFkIG9mIGNyZWF0aW5nIGJvZ3VzIGdzdG1hcnNoYWwuW2NoXSBmaWxlcy4gRml4ZXMgIzM2MTcyMC4KKworMjAwNi0xMC0xMyAxNjowOTo1MyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHNlZ21lbnQuYzogV2hlbiBzZWVraW5nIHRvIHN0b3AgLTEsIHNldCBsYXN0X3N0b3AgKGN1cnJlbnQgcG9zaXRpb24pIHRvIHRoZSBkdXJhdGlvbiBvZiB0aGUgc2VnbWVudC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0c2VnbWVudC5jOiAoZ3N0X3NlZ21lbnRfc2V0X3NlZWspOgorCSAgV2hlbiBzZWVraW5nIHRvIHN0b3AgLTEsIHNldCBsYXN0X3N0b3AgKGN1cnJlbnQgcG9zaXRpb24pIHRvIHRoZQorCSAgZHVyYXRpb24gb2YgdGhlIHNlZ21lbnQuCisKKzIwMDYtMTAtMTMgMTM6Mjc6NDYgKzAwMDAgIFl2ZXMgTGVmZWJ2cmUgPGl2YW5vaGVAYWJhY29tLmNvbT4KKworCSAgZ3N0L2dzdGVsZW1lbnQuaDogQ2xhcmlmeSBfTk9fUFJFUk9MTCBhIGJpdCBtb3JlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RlbGVtZW50Lmg6CisJICBDbGFyaWZ5IF9OT19QUkVST0xMIGEgYml0IG1vcmUuCisJICAqIGdzdC9nc3RldmVudC5jOgorCSAgRml4IGRvY3MuCisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfbGlua19jaGVja19oaWVyYXJjaHkpLAorCSAgKGdzdF9wYWRfZ2V0X2NhcHNfdW5sb2NrZWQpLCAoZ3N0X3BhZF9zYXZlX3RoeXNlbGYpLAorCSAgKGhhbmRsZV9wYWRfYmxvY2spLCAoZ3N0X3BhZF9wdXNoX2V2ZW50KSwgKGdzdF9wYWRfc2VuZF9ldmVudCk6CisJICBQYXRjaCBieTogWXZlcyBMZWZlYnZyZSA8aXZhbm9oZSBhdCBhYmFjb20gZG90IGNvbT4gRml4IHBvc3NpYmxlIGRlYWRsb2NrCisJICBkdWUgdG8gd3JvbmcgbG9ja2luZyBvcmRlci4gRml4ZXMgIzM2MTc2OS4KKwkgIFJlbW92ZSBzb21lIHJlZHVuZGFudC9taXNwbGFjZWQgY2hlY2tzIGluIHBhZF9ibG9jay4KKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24pOgorCSAgRm9yIG5lZ2F0aXZlIHJhdGVzLCBjb3VudCBiYWNrd2FyZHMgZnJvbSB0aGUgZHVyYXRpb24uCisKKzIwMDYtMTAtMTMgMDk6Mzc6NTkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RlcnJvci5jOiBGaXggZXJyb3IgbWVzc2FnZSBmb3IgR1NUX0xJQlJBUllfRVJST1JfU0VUVElOR1MgKGZlZWwgZnJlZSB0byBjb21lIHVwIHdpdGggc29tZXRoaW5nIGJldHRlcikuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGVycm9yLmM6IChfZ3N0X2xpYnJhcnlfZXJyb3JzX2luaXQpOgorCSAgRml4IGVycm9yIG1lc3NhZ2UgZm9yIEdTVF9MSUJSQVJZX0VSUk9SX1NFVFRJTkdTIChmZWVsIGZyZWUgdG8gY29tZQorCSAgdXAgd2l0aCBzb21ldGhpbmcgYmV0dGVyKS4KKworMjAwNi0xMC0xMiAyMjozNTo1MiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgd2luMzIvOiBEb24ndCByZWZlcmVuY2UgZ2xpYi1jb21wYXQuYyB3aGljaCBpcyBjdXJyZW50bHkgbm90IHVzZWQgYW5kIG5vdCBkaXN0ZWQ7IGFkZCBnc3RxdWFyay5jIHdoaWNoIHdhcyByZWNlbnRseSBhLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogd2luMzIvdnM2L2xpYmdzdHJlYW1lci5kc3A6CisJICAqIHdpbjMyL3ZzNy9saWJnc3RyZWFtZXIudmNwcm9qOgorCSAgKiB3aW4zMi92czgvbGliZ3N0cmVhbWVyLnZjcHJvajoKKwkgIERvbid0IHJlZmVyZW5jZSBnbGliLWNvbXBhdC5jIHdoaWNoIGlzIGN1cnJlbnRseSBub3QgdXNlZCBhbmQgbm90CisJICBkaXN0ZWQ7IGFkZCBnc3RxdWFyay5jIHdoaWNoIHdhcyByZWNlbnRseSBhZGRlZC4gRml4ZXMgIzM2MTczMC4KKworMjAwNi0xMC0xMiAxNjowOToyNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgd2luMzIvY29tbW9uLzogQWRkIGdzdF9jYXBzX21lcmdlKCkgYW5kIGEgYnVuY2ggb2Ygb3RoZXIgcmVjZW50bHktYWRkZWQgZnVuY3Rpb25zLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKKwkgICogd2luMzIvY29tbW9uL2xpYmdzdGNvbnRyb2xsZXIuZGVmOgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIEFkZCBnc3RfY2Fwc19tZXJnZSgpIGFuZCBhIGJ1bmNoIG9mIG90aGVyIHJlY2VudGx5LWFkZGVkIGZ1bmN0aW9ucy4KKwkgIEZpeGVzICMzNjE3MzIuCisKKzIwMDYtMTAtMTEgMTY6MzA6MTQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvcGx1Z2lucy86IFVwZGF0ZSBlbGVtZW50IGFyZ3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmFyZ3M6CisJICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgorCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKKwkgIFVwZGF0ZSBlbGVtZW50IGFyZ3MuCisJICAqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgorCSAgU21hbGwgY29tbWVudCB1cGRhdGUuCisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6IChnc3RfdGVlX2NsYXNzX2luaXQpLCAoZ3N0X3RlZV9pbml0KSwKKwkgIChnc3RfdGVlX3JlcXVlc3RfbmV3X3BhZCksIChnc3RfdGVlX3JlbGVhc2VfcGFkKSwKKwkgIChnc3RfdGVlX2J1ZmZlcl9hbGxvYyksIChnc3RfdGVlX3NpbmtfYWN0aXZhdGVfcHVzaCksCisJICAoZ3N0X3RlZV9zaW5rX2FjdGl2YXRlX3B1bGwpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5oOgorCSAgU29tZSB0ZWUgbG92aW5nOgorCSAgQWRkIGRlZmF1bHQgcHJvcGVydHkgZGVmaW5lcy4KKwkgIEltcGxlbWVudCByZWxlYXNlIHBhZCBmdW5jdGlvbi4KKwkgIEdpdmUgcHJvcGVydGllcyBiZXR0ZXIgYmx1YnMgZXRjLgorCSAgQWN0aXZhdGUgcGFkcyBiZWZvcmUgYWRkaW5nIHRoZW0gdG8gYSBydW5uaW5nIHRlZS4KKwkgIERvIHNpbXBsZSBidWZmZXJfYWxsb2Mgb24gdGhlIGZpcnN0IHJlcXVlc3RlZCBwYWQuCisJICBQb3N0IGVycm9yIHdoZW4gYWN0aXZhdGlvbiBmYWlscy4KKworMjAwNi0xMC0xMSAxMjoxNjowNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdC5jOiBDaGVjayByZXR1cm4gdmFsdWUgb2Ygd3JpdGUoKSB0byBtYWtlIGNvbXBpbGVyIGhhcHB5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3QuYzogKGVuc3VyZV9jdXJyZW50X3JlZ2lzdHJ5X2ZvcmtpbmcpOgorCSAgQ2hlY2sgcmV0dXJuIHZhbHVlIG9mIHdyaXRlKCkgdG8gbWFrZSBjb21waWxlciBoYXBweS4KKworMjAwNi0xMC0xMSAxMDoxMDozNyArMDAwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkQGx1b24ubmV0PgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IFJlY2hlY2sgcXVldWUgZmlsbGVkbmVzcyBhZnRlciBzaWduYWxsaW5nIHRoZSBvdmVycnVuIHdoZW4gd2UncmUgYWJvdXQgdG8gbGVhayBkb3duc3RyZWEuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IFNqb2VyZCBTaW1vbnMgPHNqb2VyZCBhdCBsdW9uIGRvdCBuZXQ+CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9jaGFpbik6CisJICBSZWNoZWNrIHF1ZXVlIGZpbGxlZG5lc3MgYWZ0ZXIgc2lnbmFsbGluZyB0aGUgb3ZlcnJ1biB3aGVuIHdlJ3JlIGFib3V0CisJICB0byBsZWFrIGRvd25zdHJlYW0gYmVjYXVzZSB3ZSByZWxlYXNlZCB0aGUgbG9jayB3aGVuIGVtaXR0aW5nIHRoZSBzaWduYWwKKwkgIGFuZCB0aGUgcXVldWUgY291bGQgYmUgZW1wdHkgYWdhaW4uIEZpeGVzICMzNTIzNDUuCisKKzIwMDYtMTAtMTEgMDk6MTM6MjYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOiBGaXggcmVmY291bnRpbmcgaGVyZSB0b28sIGp1c3QgbGlrZSB3ZSBkaWQgZm9yIF9uZXdfdmFsaXN0KCkgYSBmZXcgZGF5cyBhZ28gKCMzNS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOiAoZ3N0X2NvbnRyb2xsZXJfbmV3X2xpc3QpOgorCSAgRml4IHJlZmNvdW50aW5nIGhlcmUgdG9vLCBqdXN0IGxpa2Ugd2UgZGlkIGZvciBfbmV3X3ZhbGlzdCgpIGEgZmV3CisJICBkYXlzIGFnbyAoIzM1NzE4MCkgKHRoYW5rcyB0byBSZW7DqSBTdGFkbGVyKS4gQWxzbyByZW1vdmUgYWxsIHRob3NlCisJICAnU2luY2U6IDAuOScgZnJvbSB0aGUgZ3RrLWRvYyBibG9icy4KKwkgICogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6IChjb250cm9sbGVyX3JlZmNvdW50X25ld19saXN0KSwKKwkgIChnc3RfY29udHJvbGxlcl9zdWl0ZSk6CisJICBVbml0IHRlc3QgZm9yIHRoZSBhYm92ZS4KKworMjAwNi0xMC0xMCAxNDo0Nzo0MCArMDAwMCAgU2ViYXN0aWVuIENvdGUgPHNlYmFzNjQyQHlhaG9vLmNhPgorCisJICBnc3QvZ3N0cGFkLmM6IFVwZGF0ZSBzb21lIGRvY3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBTZWJhc3RpZW4gQ290ZSA8c2ViYXM2NDIgYXQgeWFob28gZG90IGNhPgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2dldF9jYXBzX3VubG9ja2VkKSwKKwkgIChnc3RfcGFkX3NhdmVfdGh5c2VsZik6CisJICBVcGRhdGUgc29tZSBkb2NzLgorCSAgV3JpdGUgcGFkIGRpcmVjdGlvbiBpbiBYTUwgb3V0cHV0LiBGaXhlcyAjMzQ1NDk2LgorCisyMDA2LTEwLTEwIDE0OjEzOjA4ICswMDAwICBSZW7DqSBTdGFkbGVyIDxtYWlsQHJlbmVzdGFkbGVyLmRlPgorCisJICBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzogVGFrZSByZWYgdG8gY29udHJvbGxlZCBvYmplY3Qgc28gdGhhdCBpdCBjYW5ub3QgZGlzYXBwZWFyLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogUmVuw6kgU3RhZGxlciA8bWFpbCBhdCByZW5lc3RhZGxlciBkb3QgZGU+CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOiAoZ3N0X2NvbnRyb2xsZXJfbmV3X3ZhbGlzdCksCisJICAoZ3N0X2NvbnRyb2xsZXJfbmV3X2xpc3QpLCAoX2dzdF9jb250cm9sbGVyX2Rpc3Bvc2UpLAorCSAgKF9nc3RfY29udHJvbGxlcl9maW5hbGl6ZSksIChfZ3N0X2NvbnRyb2xsZXJfY2xhc3NfaW5pdCk6CisJICBUYWtlIHJlZiB0byBjb250cm9sbGVkIG9iamVjdCBzbyB0aGF0IGl0IGNhbm5vdCBkaXNhcHBlYXIuCisJICBGaXhlcyAjMzU3NDMyLgorCisyMDA2LTEwLTEwIDE0OjA5OjQzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOiBBY3RpdmF0ZS9kZWFjdGl2YXRlIHBhZHMgaW4gc2V0dXAvdGVhcmRvd24gcmVzcGVjdGl2ZWx5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6IChnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCksCisJICAoZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQpLCAoZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkKSwKKwkgIChnc3RfY2hlY2tfdGVhcmRvd25fc2lua19wYWQpOgorCSAgQWN0aXZhdGUvZGVhY3RpdmF0ZSBwYWRzIGluIHNldHVwL3RlYXJkb3duIHJlc3BlY3RpdmVseS4KKworMjAwNi0xMC0xMCAxMjoxMjo0NCArMDAwMCAgSm9zZXAgVG9ycmUgVmFsbGVzIDxqb3NlcEBmbHVlbmRvLmNvbT4KKworCSAgZ3N0L01ha2VmaWxlLmFtOiBDYXN0IHZhbHVlcyB3aGVuIG1ha2luZyBnc3RlbnVtdHlwZXMuaC4gIFRoaXMgcGFjaWZpZXMgRm9ydGUgc28gaXQgZG9lc24ndCB3YXJuIGFib3V0IHRoZSB+MCBhcyBHU1RfLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDYtMTAtMTAgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KKwkgIFBhdGNoIGJ5OiBKb3NlcCBUb3JyZSBWYWxsZXMgPGpvc2VwQGZsdWVuZG8uY29tPgorCSAgKiBnc3QvTWFrZWZpbGUuYW06CisJICBDYXN0IHZhbHVlcyB3aGVuIG1ha2luZyBnc3RlbnVtdHlwZXMuaC4gIFRoaXMgcGFjaWZpZXMgRm9ydGUKKwkgIHNvIGl0IGRvZXNuJ3Qgd2FybiBhYm91dCB0aGUgfjAgYXMgR1NUX01FU1NBR0VfQU5ZIG5vdCBmaXR0aW5nCisJICBpbiB0aGUgZW51bWVyYXRpb24uCisKKzIwMDYtMTAtMDkgMTc6MTU6MzkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RldmVudC5jOiBSZW5hbWUgc29tZSBtb3JlIEBjdXIgdG8gQHN0YXJ0IHRvIGZpeCBkb2NzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RldmVudC5jOiAoZ3N0X2V2ZW50X25ld19zZWVrKSwgKGdzdF9ldmVudF9wYXJzZV9zZWVrKToKKwkgIFJlbmFtZSBzb21lIG1vcmUgQGN1ciB0byBAc3RhcnQgdG8gZml4IGRvY3MuCisJICAqIGdzdC9nc3RzZWdtZW50LmM6IChnc3Rfc2VnbWVudF9zZXRfc2Vlayk6CisJICBGaXggdHlwby4KKwkgIHRpbWUgYW5kIHN0YXJ0IG11c3QgYWx3YXlzIHN0YXkgaW4gc3luYyBhcyBkZWZpbmVkIGluIGRlc2lnbiBkb2MuCisJICAqIGdzdC9nc3R0YWdsaXN0LmM6IChnc3RfdGFnX2xpc3RfaXNfZW1wdHkpOgorCSAgUmVuYW1lIHBhcmFtIHRvIGZpeCBkb2NzLgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c2VnbWVudC5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgQ2hlY2sgdGhhdCBzdGFydCBhbmQgdGltZSBhcmUgaW4gc3luYy4KKwkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOgorCSAgKGdzdF9wYXJzZV90ZXN0X2VsZW1lbnRfY2hhbmdlX3N0YXRlKToKKwkgIEFjdGl2YXRlIHBhZCBiZWZvcmUgYWRkaW5nIHRvIHRoZSBlbGVtZW50LgorCisyMDA2LTEwLTA5IDE2OjMzOjI5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL2Rlc2lnbi9wYXJ0LXFvcy50eHQ6IEZpeCB0eXBvLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtcW9zLnR4dDoKKwkgIEZpeCB0eXBvLgorCSAgKiBnc3QvZ3N0ZXZlbnQuYzoKKwkgICogZ3N0L2dzdGV2ZW50Lmg6CisJICBVcGRhdGUgc2VlayBldmVudCBkb2NzIHJlZ2FyZGluZyBuZWdhdGl2ZSByYXRlcy4KKwkgIFJlbmFtZSBAY3VyIHRvIEBzdGFydC4KKwkgICogZ3N0L2dzdHNlZ21lbnQuYzogKGdzdF9zZWdtZW50X3NldF9zZWVrKToKKwkgICogZ3N0L2dzdHNlZ21lbnQuaDoKKwkgIFVwZGF0ZSBzZXRfc2VlayBkb2NzIHJlZ2FyZGluZyBuZWdhdGl2ZSByYXRlcy4KKwkgIENvcnJlY3RseSB1cGRhdGUgbGFzdF9zdG9wIHRvIEBzdG9wIHdoZW4gZGVhbGluZyB3aXRoIG5lZ2F0aXZlCisJICByYXRlcy4KKwkgIFJlbmFtZSBAY3VyIHRvIEBzdGFydC4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgQWN0aXZhdGUgcGFkcyBiZWZvcmUgdHJ5aW5nIHRvIHVzZSB0aGVtLgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c2VnbWVudC5jOiAoR1NUX1NUQVJUX1RFU1QpLAorCSAgKGdzdF9zZWdtZW50X3N1aXRlKToKKwkgIEFkZCBzaW1wbGUgY2hlY2sgZm9yIHNlZ21lbnRzIGFuZCBuZWdhdGl2ZSByYXRlcy4KKworMjAwNi0xMC0wOSAxMToyMDo0NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgQVBJOiBhZGQgZ3N0X3RhZ19saXN0X2lzX2VtcHR5KCkgKCMzNjA0NjcpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R0YWdsaXN0LmM6IChnc3RfdGFnX2xpc3RfaXNfZW1wdHkpOgorCSAgKiBnc3QvZ3N0dGFnbGlzdC5oOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgQVBJOiBhZGQgZ3N0X3RhZ19saXN0X2lzX2VtcHR5KCkgKCMzNjA0NjcpLgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFnLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBBbmQgYSB0ZXN0IGNhc2UuCisKKzIwMDYtMTAtMDkgMTE6MDY6NTAgKzAwMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+CisKKwkgIGdzdC9nc3RtZXNzYWdlLmg6IFJldmVydCBjaGFuZ2UgZnJvbSBlYXJsaWVyIHdydCBHU1RfTUVTU0FHRV9UWVBFX0FOWSBoYXZpbmcgYSB2YWx1ZSB0aGF0IGRvZXNuJ3QgZml0IG9uIGVudW1lcmF0aW9uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA2LTEwLTA5ICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+CisJICAqIGdzdC9nc3RtZXNzYWdlLmg6CisJICBSZXZlcnQgY2hhbmdlIGZyb20gZWFybGllciB3cnQgR1NUX01FU1NBR0VfVFlQRV9BTlkgaGF2aW5nCisJICBhIHZhbHVlIHRoYXQgZG9lc24ndCBmaXQgb24gZW51bWVyYXRpb24uCisKKzIwMDYtMTAtMDkgMTA6MTQ6MjggKzAwMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+CisKKwkgIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOiBSZW1vdmUgbG9jYWwgZGVidWdnaW5nIHN5c3RlbSBhbmQgdXNlIEdzdHJlYW1lcidzIGluc3RlYWQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDYtMTAtMDkgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KKwkgICogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6IChnc3RfbmV0X2NsaWVudF9jbG9ja190aHJlYWQpOgorCSAgUmVtb3ZlIGxvY2FsIGRlYnVnZ2luZyBzeXN0ZW0gYW5kIHVzZSBHc3RyZWFtZXIncyBpbnN0ZWFkLgorCisyMDA2LTEwLTA5IDA5OjMyOjI5ICswMDAwICBKb3NlcCBUb3JyZSBWYWxsZXMgPGpvc2VwQGZsdWVuZG8uY29tPgorCisJICBjb21tb24vbTQvZ3N0LWVycm9yLm00OiBEaXNhYmxlIHdhcm5pbmcgb2Ygc3RhdGVtZW50IG5vdCByZWFjaGVkIG9uIEZvcnRlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA2LTEwLTA5ICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+CisJICBQYXRjaCBieTogSm9zZXAgVG9ycmUgVmFsbGVzIDxqb3NlcEBmbHVlbmRvLmNvbT4KKwkgICogY29tbW9uL200L2dzdC1lcnJvci5tNDoKKwkgIERpc2FibGUgd2FybmluZyBvZiBzdGF0ZW1lbnQgbm90IHJlYWNoZWQgb24gRm9ydGUuCisJICAqIGdzdC9nc3RtZXNzYWdlLmg6CisJICBGaXggd2FybmluZyBvbiBGb3J0ZSAodmFsdWUgZG9lc24ndCBmaXQgb24gZW51bWVyYXRpb24pLgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NoYWluX3VubG9ja2VkKToKKwkgIEZpeCB3YXJuaW5nIG9uIEZvcnRlICh2YWx1ZSBkb2Vzbid0IGZpdCBvbiBlbnVtZXJhdGlvbikuCisJICAqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOiAoZ3N0X25ldF9jbGllbnRfY2xvY2tfdGhyZWFkKToKKwkgIERFQlVHIG1hY3JvIHNheXMgaXQgdGFrZXMgbWluaW11bSBvZiAyIGFyZ3MgYW5kIHNvIEZvcnRlCisJICBjb21wbGFpbnMgYWJvdXQgdGhlIHVzZSB3aXRoIGp1c3QgMSBhcmcuCisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKKwkgIFVzZSBjb3JyZWN0IHJldHVybiB0eXBlIGZvciB0aGUgdXJpIGhhbmRsZXIgaW1wbGVtZW50YXRpb25zLgorCSAgQWxsIHRoZXNlIGZpeCB3YXJuaW5ncyBpbiBGb3J0ZS4gIEZpeGVzIGJ1ZyAjMzYwODYwLgorCisyMDA2LTEwLTA4IDEzOjI3OjE3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0ZWxlbWVudC5oOiBnY2MgdmVyc2lvbnMgcHJpb3IgdG8gZ2NjIDMuMyBhcHBhcmVudGx5IGNvbXBsYWluIGFib3V0IGEgTlVMTCBwcmludGYgZm9ybWF0IHN0cmluZywgc28gZG9uJ3QgdXNlIEcuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSAgZ2NjIHZlcnNpb25zIHByaW9yIHRvIGdjYyAzLjMgYXBwYXJlbnRseSBjb21wbGFpbiBhYm91dCBhIE5VTEwgcHJpbnRmCisJICBmb3JtYXQgc3RyaW5nLCBzbyBkb24ndCB1c2UgR19HTlVDX1BSSU5URiBmb3IgdGhvc2UgdmVyc2lvbnMuCisKKzIwMDYtMTAtMDcgMTg6NDE6MTkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3R0YWdsaXN0Lio6IE1pbm9yIGZpeGVzIHRvIEdTVF9JU19UQUdfTElTVCBhbmQgZ3N0X2lzX3RhZ19saXN0KCkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHRhZ2xpc3QuYzogKGdzdF9pc190YWdfbGlzdCk6CisJICAqIGdzdC9nc3R0YWdsaXN0Lmg6CisJICBNaW5vciBmaXhlcyB0byBHU1RfSVNfVEFHX0xJU1QgYW5kIGdzdF9pc190YWdfbGlzdCgpLgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFnLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RfdGFnX3N1aXRlKToKKwkgIFNtYWxsIHRlc3QgZm9yIHRoZSBhYm92ZS4KKworMjAwNi0xMC0wNyAxODoxMTowMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdHRhZ2xpc3QuaDogTGVzcyB0YWJzLCBtb3JlIHNwYWNlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dGFnbGlzdC5oOgorCSAgTGVzcyB0YWJzLCBtb3JlIHNwYWNlcy4KKworMjAwNi0xMC0wNiAxNzoyMTozMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdGluZm8uaDogVGhvc2UgdHdvIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBkbyBhY3R1YWxseSBiZWxvbmcgdGhlcmUsIHJldmVydCBjb21taXQgZnJvbSB5ZXN0ZXJkYXkgdGhhdCB0dXJuZWQgdGhlLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGluZm8uaDoKKwkgIFRob3NlIHR3byBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgZG8gYWN0dWFsbHkgYmVsb25nIHRoZXJlLCByZXZlcnQKKwkgIGNvbW1pdCBmcm9tIHllc3RlcmRheSB0aGF0IHR1cm5lZCB0aGVtIGludHJvIG1hY3Jvcy4KKworMjAwNi0xMC0wNiAxNDo0NjowNCArMDAwMCAgSm9zZXAgVG9ycmUgVmFsbGVzIDxqb3NlcEBmbHVlbmRvLmNvbT4KKworCSAgZ3N0L2dzdC5jOiBGaXggZW1wdHkgZGVjbGFyYXRpb24gYW5kIHR5cGUgbWlzbWF0Y2guCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDYtMTAtMDYgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KKwkgIFBhdGNoIGJ5OiBKb3NlcCBUb3JyZSBWYWxsZXMgPGpvc2VwQGZsdWVuZG8uY29tPgorCSAgKiBnc3QvZ3N0LmM6IChnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwKToKKwkgIEZpeCBlbXB0eSBkZWNsYXJhdGlvbiBhbmQgdHlwZSBtaXNtYXRjaC4KKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGVfZnVuYyk6CisJICBGaXggdHlwZSBtaXNtYXRjaC4KKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2NvbnRpbnVlX3N0YXRlKSwKKwkgIChnc3RfZWxlbWVudF9zZXRfc3RhdGVfZnVuYyksIChnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUpLAorCSAgKGdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZV9mdW5jKToKKwkgIEZpeCB0eXBlIG1pc21hdGNoZXMuCisJICAqIGdzdC9nc3RpbmZvLmM6IChnc3RfZGVidWdfY29tcGFyZV9sb2dfZnVuY3Rpb25fYnlfZnVuYyksCisJICAoZ3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb24pLCAoX2dzdF9kZWJ1Z19uYW1lb2ZfZnVuY3B0cik6CisJICBDYXN0IGFzIGFwcHJvcHJpYXRlLgorCSAgKiBnc3QvZ3N0b2JqZWN0LmM6IChnc3RfY2xhc3Nfc2lnbmFsX2Nvbm5lY3QpOgorCSAgQ2FzdCBhcyBhcHByb3ByaWF0ZS4gIFRoZSBmdW5jdGlvbiBwb2ludGVyIHBhcmFtZXRlciByZWFsbHkKKwkgIGhhcyB0aGUgd3JvbmcgdHlwZSBidXQgd291bGQgYnJlYWsgQVBJIGlmIHdlIGNoYW5nZSBpdC4KKwkgICogZ3N0L2dzdHF1ZXJ5LmM6CisJICBGaXggcmVkZWZpbml0aW9uIG9mIF9GSUxFX09GRlNFVF9CSVRTIGNhdXNlZCBvbiBTb2xhcmlzIHdydAorCSAgb3JkZXIgb2YgaW5jbHVkaW5nIHN0cmluZy5oLgorCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKToKKwkgIFJlbW92ZSB1bnJlYWNoYWJsZSBsaW5lLgorCSAgKiBnc3QvZ3N0eG1sLmM6IChnc3RfeG1sX3BhcnNlX2RvYyk6CisJICBGaXggdHlwZSBtaXNtYXRjaC4KKwkgIEFsbCB0aGVzZSBjYXVnaHQgYnkgRm9ydGUuCisKKzIwMDYtMTAtMDYgMTQ6MDA6NDkgKzAwMDAgIEpvc2VwIFRvcnJlIFZhbGxlcyA8am9zZXBAZmx1ZW5kby5jb20+CisKKwkgIGNvbW1vbi9tNC9nc3QtZXJyb3IubTQ6IEZpeGVkIGJ1ZyAjMzYwMTUxLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA2LTEwLTA2ICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+CisJICBQYXRjaCBieTogSm9zZXAgVG9ycmUgVmFsbGVzIDxqb3NlcEBmbHVlbmRvLmNvbT4KKwkgICogY29tbW9uL200L2dzdC1lcnJvci5tNDoKKwkgIEZpeGVkIGJ1ZyAjMzYwMTUxLgorCSAgV2UgbmVlZCB0byBkaXNhYmxlIHdhcm5pbmdzIG9uIEZvcnRlIGZvciBlbXB0eSBkZWNsYXJhdGlvbnMKKwkgIGR1ZSB0byBnc3QtaW5kZW50IGFkZGluZyA7cyB0byBsaW5lcyB0aGF0IGp1c3QgdXNlIG1hY3JvcworCSAgd2hlcmUgdGhlIG1hY3JvIGFjdHVhbGx5IGRvZXNuJ3QgbmVlZCBhIDsgYXQgZW5kIHRvIGVuZAorCSAgc3RhdGVtZW50LgorCisyMDA2LTEwLTA2IDEzOjAxOjMwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IEFkZCBzb21lIEZJWE1FIGZvciB0aGUgTkVXU0VHTUVOVCBoYW5kbGluZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IChnc3RfZmlsZV9zaW5rX29wZW5fZmlsZSksCisJICAoZ3N0X2ZpbGVfc2lua19jbG9zZV9maWxlKSwgKGdzdF9maWxlX3NpbmtfZXZlbnQpLAorCSAgKGdzdF9maWxlX3NpbmtfcmVuZGVyKToKKwkgIEFkZCBzb21lIEZJWE1FIGZvciB0aGUgTkVXU0VHTUVOVCBoYW5kbGluZy4KKworMjAwNi0xMC0wNSAxNTo0Nzo0NCArMDAwMCAgWmFoZWVyIEFiYmFzIE1lcmFsaSA8emFoZWVyYWJiYXNAbWVyYWxpLm9yZz4KKworCSAgZ3N0L3BhcnNlL2dyYW1tYXIueTogUmVtb3ZlIHN0YXRpYyBmdW5jdGlvbiBnc3RfcGFyc2VfZWxlbWVudF9sb2NrIGFzIGFsbCBpdCBkb2VzIGlzIHJldHVybi4gIExvb2tzIGxpa2UgY3J1ZnQgZnJvbSAwLjguCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDYtMTAtMDUgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KKwkgICogZ3N0L3BhcnNlL2dyYW1tYXIueToKKwkgIFJlbW92ZSBzdGF0aWMgZnVuY3Rpb24gZ3N0X3BhcnNlX2VsZW1lbnRfbG9jayBhcyBhbGwgaXQgZG9lcworCSAgaXMgcmV0dXJuLiAgTG9va3MgbGlrZSBjcnVmdCBmcm9tIDAuOC4KKworMjAwNi0xMC0wNSAxNTozMToxNiArMDAwMCAgSm9zZXAgVG9ycmUgVmFsbGVzIDxqb3NlcEBmbHVlbmRvLmNvbT4KKworCSAgRml4IGEgY29tcGlsYXRpb24gaXNzdWUgd2l0aCBGb3J0ZSBvbiBTb2xhcmlzLiAgaW5ldF9hdG9uIGlzIGluIGxpYnJlc29sdi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNi0xMC0wNSAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgorCSAgUGF0Y2ggYnk6IEpvc2VwIFRvcnJlIFZhbGxlcyA8am9zZXBAZmx1ZW5kby5jb20+CisJICAqIGNvbW1vbi9tNC9nc3QtZXJyb3IubTQ6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgICogbGlicy9nc3QvbmV0L01ha2VmaWxlLmFtOgorCSAgRml4IGEgY29tcGlsYXRpb24gaXNzdWUgd2l0aCBGb3J0ZSBvbiBTb2xhcmlzLiAgaW5ldF9hdG9uIGlzIGluCisJICBsaWJyZXNvbHYuCisKKzIwMDYtMTAtMDUgMTQ6MjY6MDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIFByaW50ZiBmaXhlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChwcmVfYWN0aXZhdGUpOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzogKGdzdF9yZWdpc3RyeV9zY2FuX3BhdGhfbGV2ZWwpOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogKGxvYWRfcGx1Z2luKToKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6CisJICAoZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfc2V0X2ludGVycG9sYXRpb25fbW9kZSk6CisJICAqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzoKKwkgIChnc3RfZHBfcGFja2V0X2Zyb21fZXZlbnRfMV8wKToKKwkgICogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6CisJICAoZ3N0X25ldF9jbGllbnRfY2xvY2tfb2JzZXJ2ZV90aW1lcyk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzogKGdzdF9mZF9zcmNfY3JlYXRlKToKKwkgIFByaW50ZiBmaXhlcy4KKworMjAwNi0xMC0wNSAxMjozMTowNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgQWRkIEdTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OIHRvIGdzdGNvbmZpZy5oIHNvIHRoYXQgd2Uga25vdyB3aGV0aGVyIHdlIGNhbiB1c2UgR19HTlVDX1BSSU5URiBpbiBvdGhlciBoZWFkZXIgZmlsZXMgLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBnc3QvZ3N0Y29uZmlnLmguaW46CisJICAqIGdzdC9nc3RlbGVtZW50Lmg6CisJICAqIGdzdC9nc3RpbmZvLmg6CisJICBBZGQgR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT04gdG8gZ3N0Y29uZmlnLmggc28gdGhhdCB3ZSBrbm93CisJICB3aGV0aGVyIHdlIGNhbiB1c2UgR19HTlVDX1BSSU5URiBpbiBvdGhlciBoZWFkZXIgZmlsZXMgYW5kIGF0CisJICBsZWFzdCBjaGVjayB0aGUgcHJpbnRmIGZvcm1hdC9hcmd1bWVudHMgb2YgZGVidWcgbWVzc2FnZXMgYW5kCisJICBHU1RfRUxFTUVOVF9FUlJPUiBtZXNzYWdlcyB3aGVuIHRoZSBwcmludGYgZXh0ZW5zaW9uIGlzIG5vdAorCSAgYmVpbmcgdXNlZC4KKwkgIFJlcGxhY2UgbW9yZSB0YWJzIHdpdGggc3BhY2VzIGluIGdzdGluZm8uaCBhbmQgcmVtb3ZlIHR3byBzcHVyaW91cworCSAgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGluIEdTVF9ESVNBQkxFX0RFQlVHIHBhcnQgd2l0aCBtYWNyb3MuCisKKzIwMDYtMTAtMDMgMTk6MTM6MzYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RidXMuYzogTW9yZSBkb2NzIGZvciB0aGUgc3luYy1tZXNzYWdlIHNpZ25hbCAobWVudGlvbiB0aGF0IGl0IGlzIG5vdCBlbWl0dGVkIGJ5IGRlZmF1bHQpOyBsb2cgbWVzc2FnZSBzdHJ1Y3R1ci4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RidXMuYzogKGdzdF9idXNfY2xhc3NfaW5pdCksIChnc3RfYnVzX3Bvc3QpOgorCSAgTW9yZSBkb2NzIGZvciB0aGUgc3luYy1tZXNzYWdlIHNpZ25hbCAobWVudGlvbiB0aGF0IGl0IGlzIG5vdAorCSAgZW1pdHRlZCBieSBkZWZhdWx0KTsgbG9nIG1lc3NhZ2Ugc3RydWN0dXJlcyBvZiBtZXNzYWdlcyBwb3N0ZWQgb24KKwkgIHRoZSBidXMgYXMgd2VsbC4KKworMjAwNi0xMC0wMyAxNToxMDo1MSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGdzdC9nc3QuYzogVXNlIGEgcGlwZSBwYWlyIHRvIHJlY2VpdmUgc3RhdHVzIHJlc3VsdHMgZnJvbSB0aGUgZm9ya2VkIGNoaWxkLCBhbmQgaWdub3JlIHRoZSByZXN1bHQgZnJvbSB3YWl0cGlkLiBGaXhlcy4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3QuYzogKGVuc3VyZV9jdXJyZW50X3JlZ2lzdHJ5X2ZvcmtpbmcpOgorCSAgVXNlIGEgcGlwZSBwYWlyIHRvIHJlY2VpdmUgc3RhdHVzIHJlc3VsdHMgZnJvbSB0aGUgZm9ya2VkIGNoaWxkLCBhbmQKKwkgIGlnbm9yZSB0aGUgcmVzdWx0IGZyb20gd2FpdHBpZC4gRml4ZXMgIzM1NTQ5OQorCisyMDA2LTEwLTAyIDE2OjQ2OjE2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzogRml4IGxlYWsgaW4gY2hlY2suCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6IChHU1RfU1RBUlRfVEVTVCksCisJICAoZ3N0X2dob3N0X3BhZF9zdWl0ZSk6CisJICBGaXggbGVhayBpbiBjaGVjay4KKworMjAwNi0xMC0wMiAxNjozNzo1NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdHBhZC5jOiBBZGQgJ1NpbmNlOiAwLjEwLjExJyB0byBnc3RfcGFkX2lzX2Jsb2NraW5nKCkgZ3RrLWRvYyBibHVyYi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkLmM6CisJICBBZGQgJ1NpbmNlOiAwLjEwLjExJyB0byBnc3RfcGFkX2lzX2Jsb2NraW5nKCkgZ3RrLWRvYyBibHVyYi4KKworMjAwNi0xMC0wMiAxNjowMTo1NCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1ibG9jay50eHQ6IEZ1cnRoZXIgZXhwbGFpbiB0aGUgdXNlIG9mIGZsdXNoaW5nIG9uIGJsb2NrZWQgcGFkcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWJsb2NrLnR4dDoKKwkgIEZ1cnRoZXIgZXhwbGFpbiB0aGUgdXNlIG9mIGZsdXNoaW5nIG9uIGJsb2NrZWQgcGFkcy4KKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9pc19ibG9ja2luZyksIChoYW5kbGVfcGFkX2Jsb2NrKSwKKwkgIChnc3RfcGFkX3B1c2hfZXZlbnQpOgorCSAgKiBnc3QvZ3N0cGFkLmg6CisJICBBZGRlZCBuZXcgR3N0UGFkRmxhZyA6IEdTVF9QQURfQkxPQ0tJTkcuCisJICBBZGRzIHRoZSBub3Rpb24gb2YgcGFkcyByZWFsbHkgYmxvY2tpbmcsIHdoaWNoIGVuYWJsZXMgdG8gcHJvcGVybHkKKwkgIGhhbmRsZSBGTFVTSF9TVEFSVC9GTFVTSF9TVE9QIGV2ZW50cyBvbiBibG9ja2VkIHBhZHMuCisJICBGaXhlcyAjMzU4OTk5CisJICBBUEk6IGdzdF9wYWRfaXNfYmxvY2tpbmcoKQorCSAgQVBJOiBHU1RfUEFEX0lTX0JMT0NLSU5HKCkgbWFjcm8KKwkgIEFQSTogR1NUX1BBRF9CTE9DS0lORyBHc3RQYWRGbGFnCisKKzIwMDYtMTAtMDIgMTA6MDY6MTcgKzAwMDAgIG1yY2dyYW4gPG1yYy5ncmFuQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGdob3N0cGFkLmM6IEZpbHRlciB0aGUgcHJveGllZCBjYXBzIGFnYWluc3QgdGhlIHBhZHRlbXBsYXRlIGlmIHdlIGhhdmUgb25lLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogbXJjZ3JhbiA8bXJjLmdyYW4gYXQgZ21haWwgZG90IGNvbT4KKwkgICogZ3N0L2dzdGdob3N0cGFkLmM6IChnc3RfcHJveHlfcGFkX2RvX2dldGNhcHMpOgorCSAgRmlsdGVyIHRoZSBwcm94aWVkIGNhcHMgYWdhaW5zdCB0aGUgcGFkdGVtcGxhdGUgaWYgd2UgaGF2ZSBvbmUuCisJICAqIGdzdC9nc3RxdWVyeS5jOiAoZ3N0X3F1ZXJ5X25ld19zZWdtZW50KToKKwkgIEFkZCBpbmNsdWRlIGZvciBnc3RpbmZvLmggc28gdGhhdCBjb21waWxhdGlvbiB3aXRoCisJICAtREdTVF9ESVNBQkxFX0dTVF9ERUJVRyB3b3JrcyBhZ2Fpbi4gRml4ZXMgIzM1ODQzNi4KKworMjAwNi0xMC0wMiAwOTo0NDowMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSogQ2hhbmdlTG9nOgorCSAgR2l2ZSBjcmVkaXQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgR2l2ZSBjcmVkaXQKKworMjAwNi0xMC0wMiAwOTo0MTowOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOiBTZXQgZmlsZSB0byBOVUxMIHdoZW4gY2xvc2luZyBmaWxlc2luayBzbyB0aGF0IHdlIGNhbiBzZXQgYSBuZXcgZmlsZW5hbWUgaW4gUkVBRFkuIEZpLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOiAoZ3N0X2ZpbGVfc2lua19pbml0KSwKKwkgIChnc3RfZmlsZV9zaW5rX3NldF9sb2NhdGlvbiksIChnc3RfZmlsZV9zaW5rX29wZW5fZmlsZSksCisJICAoZ3N0X2ZpbGVfc2lua19jbG9zZV9maWxlKSwgKGdzdF9maWxlX3NpbmtfZXZlbnQpLAorCSAgKGdzdF9maWxlX3NpbmtfcmVuZGVyKToKKwkgIFNldCBmaWxlIHRvIE5VTEwgd2hlbiBjbG9zaW5nIGZpbGVzaW5rIHNvIHRoYXQgd2UgY2FuIHNldCBhIG5ldyBmaWxlbmFtZQorCSAgaW4gUkVBRFkuIEZpeGVzICMzNTg2MTMuCisKKzIwMDYtMTAtMDIgMDg6Mzc6MjQgKzAwMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvQG5udmEub3JnPgorCisJICBnc3QvZ3N0ZXZlbnQuYzogRml4IGdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlKCkgYW5kIGdzdF9ldmVudF9jb3B5KCkgZm9yIGV2ZW50cyB3aXRoIGV2ZW50IHN0cnVjdHVyZXMgYnkgc2V0dGluZyAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IEFsZXNzYW5kcm8gRGVjaW5hICA8YWxlc3NhbmRybyBhdCBubnZhIG9yZz4KKwkgICogZ3N0L2dzdGV2ZW50LmM6IChfZ3N0X2V2ZW50X2NvcHkpOgorCSAgRml4IGdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlKCkgYW5kIGdzdF9ldmVudF9jb3B5KCkgZm9yIGV2ZW50cworCSAgd2l0aCBldmVudCBzdHJ1Y3R1cmVzIGJ5IHNldHRpbmcgdGhlIHBhcmVudCByZWZjb3VudCBhZGRyZXNzIG9mIHRoZQorCSAgY29waWVkIHN0cnVjdHVyZSB0byB0aGUgYWRkcmVzcyBvZiB0aGUgcmVmY291bnQgbWVtYmVyIG9mIHRoZSBuZXdseQorCSAgY29waWVkIGV2ZW50IHJhdGhlciB0aGFuIHRoZSBhZGRyZXNzIG9mIHRoZSByZWZjb3VudCBtZW1iZXIgb2YgdGhlCisJICBvcmlnaW5hbCBldmVudC4gRml4ZXMgIzM1ODczNy4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBVbml0IHRlc3QgZm9yIHRoZSBhYm92ZS4KKworMjAwNi0wOS0yOSAyMDoyOTo0OSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBkb2NzL2Rlc2lnbi9NYWtlZmlsZS5hbTogRGlzdCBzb21lIG1vcmUgZmlsZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vTWFrZWZpbGUuYW06CisJICBEaXN0IHNvbWUgbW9yZSBmaWxlcy4KKworMjAwNi0wOS0yOSAxMjozMToxOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6IEFkZCB0ZXN0IGZvciB0aGUgcHJldmlvdXMgZml4OyBhZGQgc29tZSBtb3JlIHRlc3RzIGZvciBjb3JyZWN0IHJlZmNvdW50aW5nIGJlaGF2aW91cjsgLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6IChHU1RfU1RBUlRfVEVTVCksCisJICAoZ3N0X2NvbnRyb2xsZXJfc3VpdGUpOgorCSAgQWRkIHRlc3QgZm9yIHRoZSBwcmV2aW91cyBmaXg7IGFkZCBzb21lIG1vcmUgdGVzdHMKKwkgIGZvciBjb3JyZWN0IHJlZmNvdW50aW5nIGJlaGF2aW91cjsgZml4IGEgZmV3IGxlYWtzCisJICBpbiB0ZXN0IGNhc2VzOyBjYWxsIGdzdF9jb250cm9sbGVyX2luaXQoKSBhdCBzdGFydAorCSAgb2YgYWxsIHRlc3RzLgorCisyMDA2LTA5LTI5IDEyOjI0OjUwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzogRG9uJ3QgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoKSBvbiB0aW1lZCB2YWx1ZXMgd2l0aCBpbnZhbGlkIHRpbWVzdGFtcHMgaW5zaWRlIGEgY3IuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzogKGdzdF9jb250cm9sbGVyX25ld192YWxpc3QpLAorCSAgKGdzdF9jb250cm9sbGVyX3NldF9mcm9tX2xpc3QpOgorCSAgRG9uJ3QgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoKSBvbiB0aW1lZCB2YWx1ZXMgd2l0aCBpbnZhbGlkIHRpbWVzdGFtcHMKKwkgIGluc2lkZSBhIGNyaXRpY2FsIHNlY3Rpb24gd2l0aG91dCB1bmxvY2tpbmcgdGhlIG11dGV4LiBTcG90dGVkIGJ5CisJICBSZW7DqSBTdGFkbGVyLiAoIzM1NzYxNykKKwkgIEFsc28sIGZpeCB1cCByZWZjb3VudGluZyBwcm9wZXJseTogd2hlbiByZXR1cm5pbmcgYW4gZXhpc3RpbmcKKwkgIGNvbnRyb2xsZXIsIHdlIHNob3VsZCBpbmNyZWFzZSB0aGUgcmVmZXJlbmNlIG9ubHkgb25jZSBhbmQgbm90CisJICBvbmNlIHBlciBwcm9wZXJ0eSBhbmQgd2hlbiB0cnlpbmcgdG8gY29udHJvbCBhIHByb3BlcnR5IGFnYWluCisJICB3ZSBzaG91bGQgYWxzbyBpbmNyZWFzZSB0aGUgcmVmY291bnQuCisKKzIwMDYtMDktMjkgMDg6MjI6MjIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L25ldC86IFN0b3AgcmVhZGluZyBjb21tYW5kcyB3aGVuIEVPRiBhcyB3ZWxsLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOiAoZ3N0X25ldF9jbGllbnRfY2xvY2tfdGhyZWFkKToKKwkgICogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jOgorCSAgKGdzdF9uZXRfdGltZV9wcm92aWRlcl90aHJlYWQpOgorCSAgU3RvcCByZWFkaW5nIGNvbW1hbmRzIHdoZW4gRU9GIGFzIHdlbGwuCisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzogKGdzdF9mYWtlX3NpbmtfY2xhc3NfaW5pdCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiAoZ3N0X2Zha2Vfc3JjX2NsYXNzX2luaXQpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IChnc3RfaWRlbnRpdHlfY2xhc3NfaW5pdCk6CisJICBVbmlmeSBkZXNjcmlwdGlvbiBvZiB0aGUgZHVtcCBwcm9wZXJ0eS4KKworMjAwNi0wOS0yOCAxNzoyMDoxNyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkqIENoYW5nZUxvZzoKKwkgIE1lbnRpb24gYnVnIG51bWJlciBpbiBwcmV2aW91cyBjb21taXQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgTWVudGlvbiBidWcgbnVtYmVyIGluIHByZXZpb3VzIGNvbW1pdAorCisyMDA2LTA5LTI4IDE1OjUyOjA0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgdGVzdHMvZXhhbXBsZXMvbWFudWFsLy5jdnNpZ25vcmU6IE9LLCBzbyBpdCdzIGFjdHVhbGx5IGN2c2lnbm9yZSB0aGF0IG5lZWRzIGNoYW5naW5nLiBTdG9wIGxhdWdoaW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2V4YW1wbGVzL21hbnVhbC8uY3ZzaWdub3JlOgorCSAgT0ssIHNvIGl0J3MgYWN0dWFsbHkgY3ZzaWdub3JlIHRoYXQgbmVlZHMgY2hhbmdpbmcuIFN0b3AgbGF1Z2hpbmcuCisKKzIwMDYtMDktMjggMTU6Mjc6MTIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICB0ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuYW06IEdhaCwgZGVjbGFyZSB2YXJzICpiZWZvcmUqIHVzaW5nIHRoZW0KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuYW06CisJICBHYWgsIGRlY2xhcmUgdmFycyAqYmVmb3JlKiB1c2luZyB0aGVtCisKKzIwMDYtMDktMjggMTQ6MDA6NDMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBnc3QvOiBSZS1jb21taXQgdGhlIHJlZ2lzdHJ5IGNoYW5nZXMsIGFsb25nIHdpdGggYW4gZXh0cmEgZml4OgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3QuYzogKGluaXRfcHJlKSwgKHNjYW5fYW5kX3VwZGF0ZV9yZWdpc3RyeSksCisJICAoZW5zdXJlX2N1cnJlbnRfcmVnaXN0cnlfbm9uZm9ya2luZyksCisJICAoZW5zdXJlX2N1cnJlbnRfcmVnaXN0cnlfZm9ya2luZyksIChlbnN1cmVfY3VycmVudF9yZWdpc3RyeSksCisJICAoaW5pdF9wb3N0KSwgKGdzdF9kZWJ1Z19oZWxwKSwgKGdzdF9kZWluaXQpOgorCSAgKiBnc3QvZ3N0X3ByaXZhdGUuaDoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6IChnc3RfcmVnaXN0cnlfZmluYWxpemUpLAorCSAgKGdzdF9yZWdpc3RyeV9yZW1vdmVfZmVhdHVyZXNfZm9yX3BsdWdpbl91bmxvY2tlZCksCisJICAoZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9wbHVnaW4pLCAoZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9sZXZlbCksCisJICAoZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aCksCisJICAoX3ByaXZfZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9jYWNoZV9wbHVnaW5zKSwKKwkgIChfcHJpdl9nc3RfcmVnaXN0cnlfY2xlYW51cCk6CisJICAqIGdzdC9nc3RyZWdpc3RyeS5oOgorCSAgUmUtY29tbWl0IHRoZSByZWdpc3RyeSBjaGFuZ2VzLCBhbG9uZyB3aXRoIGFuIGV4dHJhIGZpeDoKKwkgIFdoZW4gYSBjYWNoZWQgcGx1Z2luIGlzIGVuY291bnRlcmVkIGF0IGEgZGlmZmVyZW50IGZpbGUgcGF0aCwKKwkgIHVwZGF0ZSB0aGUgc3RvcmVkIHBhdGggaW4gdGhlIHJlZ2lzdHJ5IGNhY2hlIHNvIHRoYXQgdGhlIHBhcmVudAorCSAgcHJvY2VzcyBrbm93cyB3aGVyZSBpdCBhY3R1YWxseSBpcyBub3cgd2hlbiBpdCByZS1yZWFkcyB0aGUgcmVnaXN0cnkKKwkgIGNhY2hlLiBGaXhlcyB0aGUgdGhpbmcgdGhhdCBicm9rZSBkaXN0Y2hlY2sgd2l0aCB0aGUgcHJldmlvdXMgY29tbWl0LgorCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgIENsZWFuIHVwIGZpbGVzIG5hbWVkICdjb3JlJyB0b28gd2hlbiBydW5uaW5nIG1ha2UgY2xlYW4uCisJICAqIHRlc3RzL2V4YW1wbGVzL21hbnVhbC9NYWtlZmlsZS5hbToKKwkgIFNldCB1cCBhIHJlZ2lzdHJ5IHBhdGggZm9yIHJ1bm5pbmcgdGhlc2UgdGVzdHMsIGFuZCBjbGVhbiBpdCBwcm9wZXJseQorCSAgZm9yIGRpc3RjaGVjay4KKworMjAwNi0wOS0yOCAxMToxMToyOCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGNvbmZpZ3VyZS5hYzogRG9uJ3QgcHVsbCBpbiBnbW9kdWxlLTIuMC5wYyBhcyBhIGRlcGVuZGVuY3kgaW4gb3VyIC5wYyBmaWxlcyAtIHdlIHdhbnQgZ21vZHVsZS1uby1leHBvcnQtMi4wLnBjIGluc3RlYS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgIERvbid0IHB1bGwgaW4gZ21vZHVsZS0yLjAucGMgYXMgYSBkZXBlbmRlbmN5IGluIG91ciAucGMgZmlsZXMgLSB3ZQorCSAgd2FudCBnbW9kdWxlLW5vLWV4cG9ydC0yLjAucGMgaW5zdGVhZCBzbyB0aGF0IHdlIGRvbid0IGRyYWcgaW4KKwkgIC0tZXhwb3J0LWR5bmFtaWMgb24gZXZlcnkgcHJvamVjdCB0aGF0IGxpbmtzIHRvIEdTdHJlYW1lci4KKwkgIEFsc28sIG1ha2Ugb3VyIGV4cG9ydCByZWdleCBvbmx5IG1hdGNoIHRoZSBzdGFydCBvZiBzeW1ib2xzLCByYXRoZXIKKwkgIHRoYW4gYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zICdfZ3N0JyBzb21ld2hlcmUuCisJICAqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgorCSAgVGhlIGxpYmdzdGNoZWNrIHdlIGJ1aWxkIGRvZXMgaG93ZXZlciBuZWVkIGV4cG9ydC1keW5hbWljLCBhcyBpdAorCSAgcHJvZHVjZXMgc29tZSBzeW1ib2xzIHRoYXQgZG9uJ3QgbWF0Y2ggb3VyIF9nc3QuLi4gc3R5bGUgcmVnZXguCisKKzIwMDYtMDktMjcgMTc6NDI6NDcgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBnc3QvOiBSZXZlcnQgcHJldmlvdXMgY2hhbmdlIHVudGlsIEkgZmlndXJlIG91dCB3aHkgaXQgYnJlYWtzIGRpc3RjaGVjay4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0LmM6IChpbml0X3ByZSksIChzY2FuX2FuZF91cGRhdGVfcmVnaXN0cnkpLAorCSAgKGVuc3VyZV9jdXJyZW50X3JlZ2lzdHJ5X25vbmZvcmtpbmcpLAorCSAgKGVuc3VyZV9jdXJyZW50X3JlZ2lzdHJ5X2ZvcmtpbmcpLCAoZW5zdXJlX2N1cnJlbnRfcmVnaXN0cnkpLAorCSAgKGluaXRfcG9zdCksIChnc3RfZGVidWdfaGVscCksIChnc3RfZGVpbml0KToKKwkgICogZ3N0L2dzdF9wcml2YXRlLmg6CisJICAqIGdzdC9nc3RyZWdpc3RyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2ZpbmFsaXplKSwKKwkgIChnc3RfcmVnaXN0cnlfcmVtb3ZlX3BsdWdpbiksIChnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2xldmVsKSwKKwkgIChnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoKSwgKF9nc3RfcmVnaXN0cnlfcmVtb3ZlX2NhY2hlX3BsdWdpbnMpLAorCSAgKF9nc3RfcmVnaXN0cnlfY2xlYW51cCk6CisJICAqIGdzdC9nc3RyZWdpc3RyeS5oOgorCSAgUmV2ZXJ0IHByZXZpb3VzIGNoYW5nZSB1bnRpbCBJIGZpZ3VyZSBvdXQgd2h5IGl0IGJyZWFrcyBkaXN0Y2hlY2suCisKKzIwMDYtMDktMjcgMTY6NTI6NTkgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBnc3QvZ3N0LmM6IE1ha2UgaW5pdF9wcmUgYW5kIGluaXRfcG9zdCB0YWtlIHRoZSBmdWxsIGNvbXBsZW1lbnQgb2YgR09wdGlvbkZ1bmMgYXJncyBzbyB0aGV5IGNhbiByZXR1cm4gdXNlZnVsIEdFcnJvcnMuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0LmM6IChpbml0X3ByZSksIChzY2FuX2FuZF91cGRhdGVfcmVnaXN0cnkpLAorCSAgKGVuc3VyZV9jdXJyZW50X3JlZ2lzdHJ5X25vbmZvcmtpbmcpLAorCSAgKGVuc3VyZV9jdXJyZW50X3JlZ2lzdHJ5X2ZvcmtpbmcpLCAoZW5zdXJlX2N1cnJlbnRfcmVnaXN0cnkpLAorCSAgKGluaXRfcG9zdCksIChnc3RfZGVidWdfaGVscCksIChnc3RfZGVpbml0KToKKwkgIE1ha2UgaW5pdF9wcmUgYW5kIGluaXRfcG9zdCB0YWtlIHRoZSBmdWxsIGNvbXBsZW1lbnQgb2YgR09wdGlvbkZ1bmMKKwkgIGFyZ3Mgc28gdGhleSBjYW4gcmV0dXJuIHVzZWZ1bCBHRXJyb3JzLiBNYWtlIHRoZSByZWdpc3RyeSB1cGRhdGluZworCSAgZnVuY3Rpb25zIGRvIHNvLgorCSAgQ2FsbCBfcHJpdl9nc3RfcmVnaXN0cnlfcmVtb3ZlX2NhY2hlX3BsdWdpbnMgYWZ0ZXIgc2Nhbm5pbmcgZmlsZXMgdG8KKwkgIGVuc3VyZSB0aGF0IHRoZSByZWdpc3RyeSB3ZSdyZSBhYm91dCB0byB3cml0ZSBvdXQgZG9lc24ndCBjb250YWluCisJICBzdGFsZSBpbmZvcm1hdGlvbiBhYm91dCBvbGQtZGVsZXRlZCBwbHVnaW4gZmlsZXMuCisJICBNYWtlIF9wcml2X2dzdF9yZWdpc3RyeV9yZW1vdmVfY2FjaGVfcGx1Z2lucyByZXR1cm4gYSBib29sZWFuIHNvCisJICB0aGF0IGRlbGV0aW9uIG9mIHBsdWdpbiBmaWxlcyBpcyBjb25zaWRlcmVkIGEgcmVnaXN0cnkgY2hhbmdlLgorCSAgKiBnc3QvZ3N0X3ByaXZhdGUuaDoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6IChnc3RfcmVnaXN0cnlfZmluYWxpemUpLAorCSAgKGdzdF9yZWdpc3RyeV9yZW1vdmVfZmVhdHVyZXNfZm9yX3BsdWdpbl91bmxvY2tlZCksCisJICAoZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9wbHVnaW4pLCAoZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9sZXZlbCksCisJICAoZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aCksCisJICAoX3ByaXZfZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9jYWNoZV9wbHVnaW5zKSwKKwkgIChfcHJpdl9nc3RfcmVnaXN0cnlfY2xlYW51cCk6CisJICAqIGdzdC9nc3RyZWdpc3RyeS5oOgorCSAgUmVuYW1lIF9nc3RfcmVnaXN0cnlfcmVtb3ZlX2NhY2hlX3BsdWdpbnMgYW5kIF9nc3RfcmVnaXN0cnlfY2xlYW51cAorCSAgYnkgYWRkaW5nIF9wcml2IHByZWZpeCwgc28gdGhhdCB0aGV5IHdvbid0IGFwcGVhciBpbiB0aGUgZ2xvYmFsCisJICBzeW1ib2wgdGFibGUuIFRoZXkgc3RpbGwgZG8gYXRtIHRob3VnaCBiZWNhdXNlIG9mICMzMTgwMzEuIE1vdmUgdGhlCisJICBwcm90b3R5cGVzIHRvIGdzdF9wcml2YXRlLmgKKwkgIFdoZW4gcmVtb3ZpbmcgYSBwbHVnaW4sIHJlbW92ZSBhbGwgZmVhdHVyZXMgZm9yIHRoYXQgcGx1Z2luIHRvby4KKwkgIEZpeGVzICMzNDA4NzguCisKKzIwMDYtMDktMjcgMTM6MTk6NTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvcmFuZG9tL21vdmluZy1wbHVnaW5zOiBNYWtlIGl0IGNsZWFyIHRoYXQgdGhlICJjb21waWxlZC1pbiBkZXNjcmlwdGlvbnMiIHJlYWxseSBtZWFuIHRoZSBlbGVtZW50IGRldGFpbHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9yYW5kb20vbW92aW5nLXBsdWdpbnM6CisJICBNYWtlIGl0IGNsZWFyIHRoYXQgdGhlICJjb21waWxlZC1pbiBkZXNjcmlwdGlvbnMiIHJlYWxseSBtZWFuCisJICB0aGUgZWxlbWVudCBkZXRhaWxzLgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NvbW1pdF9zdGF0ZSksCisJICAoZ3N0X2Jhc2Vfc2lua193YWl0X3ByZXJvbGwpOgorCSAgVXBkYXRlIGRvY3MuCisJICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX3dhaXRfcGxheWluZyksCisJICAoZ3N0X2Jhc2Vfc3JjX2dldF9yYW5nZSksIChnc3RfYmFzZV9zcmNfYWN0aXZhdGVfcHVzaCk6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgorCSAgQWRkZWQgZnVuY3Rpb24gdG8gYmxvY2sgd2hpbGUgd2FpdGluZyBmb3IgUExBWUlORywgdGhpcyBmdW5jdGlvbgorCSAgaXMgdXNlZCBieSBsaXZlIHNvdXJjZXMgdGhhdCBibG9jayBvbiB0aGUgY2xvY2suCisJICBBUEk6IGdzdF9iYXNlX3NyY193YWl0X3BsYXlpbmcoKQorCisyMDA2LTA5LTI3IDEwOjEzOjEzICswMDAwICBQZXRlciBLamVsbGVyc3RlZHQgPHBrakBheGlzLmNvbT4KKworCSAgTWFrZWZpbGUuYW06IGdzdC1lbGVtZW50LWNoZWNrLm00IGlzIGdlbmVyYXRlZCBhbmQgc2hvdWxkIHRoZXJlZm9yZSBiZSBjb3BpZWQgZnJvbSB0aGUgYnVpbGQgZGlyIHJhdGhlciB0aGFuIHRoZSBzb3VyLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBQZXRlciBLamVsbGVyc3RlZHQgPHBraiBhdCBheGlzIGNvbT4KKwkgICogTWFrZWZpbGUuYW06CisJICBnc3QtZWxlbWVudC1jaGVjay5tNCBpcyBnZW5lcmF0ZWQgYW5kIHNob3VsZCB0aGVyZWZvcmUgYmUKKwkgIGNvcGllZCBmcm9tIHRoZSBidWlsZCBkaXIgcmF0aGVyIHRoYW4gdGhlIHNvdXJjZSBkaXIgKCMzNTc1OTMpLgorCSAgJ21ha2UgZGlzdGNoZWNrJyBoYXNuJ3Qgbm90aWNlZCB0aGlzIGJlY2F1c2Ugd2Ugd2VyZSBkaXN0aW5nCisJICB0aGUgZmlsZSBhcyB3ZWxsLCBzbyBzdG9wIGRvaW5nIHRoYXQuCisKKzIwMDYtMDktMjcgMDk6MjM6MTggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHRlc3RzL2NoZWNrL2dzdC9nc3RjYXBzLmM6IEFkZCBzb21lIHRlc3RzIGZvciBnc3RfY2Fwc19pbnRlcnNlY3QoKS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X2NhcHNfc3VpdGUpOgorCSAgQWRkIHNvbWUgdGVzdHMgZm9yIGdzdF9jYXBzX2ludGVyc2VjdCgpLgorCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChldmVudF9sb29wKToKKwkgIFByaW50IGFsbCBidWZmZXJpbmcgcGVyY2VudGFnZXMgd2UgZ2V0LCBldmVuIHRoZSAxMDAlIG9uZS4KKworMjAwNi0wOS0yNiAxMjozOToyNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgdG9vbHMvZ3N0LWluc3BlY3QuYzogRml4IHByaW50aW5nIG9mIGZsYWdzIHRvIG1hdGNoIHRoZSBsb29rIG9mIGVudW1zLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1pbnNwZWN0LmM6IChwcmludF9lbGVtZW50X3Byb3BlcnRpZXNfaW5mbyksCisJICAocHJpbnRfc2lnbmFsX2luZm8pOgorCSAgRml4IHByaW50aW5nIG9mIGZsYWdzIHRvIG1hdGNoIHRoZSBsb29rIG9mIGVudW1zLgorCisyMDA2LTA5LTI1IDEzOjA4OjI5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzogRml4IHR5cG8gaW4gZG9jcyBibHVyYi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKKwkgIEZpeCB0eXBvIGluIGRvY3MgYmx1cmIuCisKKzIwMDYtMDktMjUgMTE6MTY6MzcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3R1cmkuYzogRG9uJ3QgYXNzZXJ0L2NyYXNoIGhlcmUgaWYgYSB1cmkgaGFuZGxlciBkb2Vzbid0IHJldHVybiBhbnkgc3VwcG9ydGVkIHByb3RvY29scy4gVGhlIGxpc3Qgb2YgcHJvdG9jb2xzIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R1cmkuYzogKHNlYXJjaF9ieV9lbnRyeSk6CisJICBEb24ndCBhc3NlcnQvY3Jhc2ggaGVyZSBpZiBhIHVyaSBoYW5kbGVyIGRvZXNuJ3QgcmV0dXJuIGFueQorCSAgc3VwcG9ydGVkIHByb3RvY29scy4gVGhlIGxpc3Qgb2YgcHJvdG9jb2xzIGNvdWxkIGJlIGdlbmVyYXRlZAorCSAgZHluYW1pY2FsbHkgYXQgcnVudGltZSBvciBhdCBwbHVnaW4gcmVnaXN0cmF0aW9uLCBhbmQgYW4gZXJyb3IKKwkgIGluIHRoZSB1bmRlcmx5aW5nIGxpYnJhcnkgc2hvdWxkbid0IGJlIGZhdGFsICgjMzUzMzAxKS4KKworMjAwNi0wOS0yNSAxMDozNjoyMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdGluZm8uYzogRml4IHdhcm5pbmcgaWYgSEFWRV9QUklOVEZfRVhURU5TSU9OIGlzIHVuZGVmaW5lZCAoc3BvdHRlZCBieSBQZXRlciBLamVsbGVyc3RlZHQpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RpbmZvLmM6CisJICBGaXggd2FybmluZyBpZiBIQVZFX1BSSU5URl9FWFRFTlNJT04gaXMgdW5kZWZpbmVkCisJICAoc3BvdHRlZCBieSBQZXRlciBLamVsbGVyc3RlZHQpLgorCisyMDA2LTA5LTIzIDA5OjMwOjQwICswMDAwICBBbnRvaW5lIFRyZW1ibGF5IDxoZXhhMDBAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogTWF0Y2ggX3N0YXJ0L19zdG9wIGNhbGxzIGluIHRoZSBhY3RpdmF0ZSBmdW5jdGlvbnMuIFJlbW92ZSByZWR1bmRhbnQgX3N0b3AgY2FsbCBmcm9tIHRoZSAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgQmFzZWQgb24gcGF0Y2ggYnk6IEFudG9pbmUgVHJlbWJsYXkgPGhleGEwMCBhdCBnbWFpbCBkb3QgY29tPgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIChnc3RfYmFzZV9zcmNfZGVmYXVsdF9jaGVja19nZXRfcmFuZ2UpLCAoZ3N0X2Jhc2Vfc3JjX3N0YXJ0KSwKKwkgIChnc3RfYmFzZV9zcmNfYWN0aXZhdGVfcHVzaCksIChnc3RfYmFzZV9zcmNfYWN0aXZhdGVfcHVsbCksCisJICAoZ3N0X2Jhc2Vfc3JjX2NoYW5nZV9zdGF0ZSk6CisJICBNYXRjaCBfc3RhcnQvX3N0b3AgY2FsbHMgaW4gdGhlIGFjdGl2YXRlIGZ1bmN0aW9ucy4gUmVtb3ZlIHJlZHVuZGFudAorCSAgX3N0b3AgY2FsbCBmcm9tIHRoZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24uIEZpeGVzICMzNTY5MTAuCisJICBUdXJuIGZhaWx1cmUgREVCVUcgaW50byBFUlJPUi4KKworMjAwNi0wOS0yMiAxNToyOToyMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgVXBkYXRlIGRvY3MgYWJvdXQgYnVmZmVyaW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtYnVmZmVyaW5nLnR4dDoKKwkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKGdzdF9tZXNzYWdlX25ld19idWZmZXJpbmcpLAorCSAgKGdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZyk6CisJICBVcGRhdGUgZG9jcyBhYm91dCBidWZmZXJpbmcuCisJICAqIGRvY3MvZGVzaWduL3BhcnQtdHJpY2ttb2Rlcy50eHQ6CisJICBGaXggdHlwby4KKworMjAwNi0wOS0yMiAxNDozMDo0OSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGRvY3MvbWFudWFsL2Jhc2ljcy1lbGVtZW50cy54bWw6CisJICBhdWRpb3Rlc3RzcmMgaXMgbm90IHBhcnQgb2YgY29yZSwgZmFrZXNyYyBpcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhdWRpb3Rlc3RzcmMgaXMgbm90IHBhcnQgb2YgY29yZSwgZmFrZXNyYyBpcworCisyMDA2LTA5LTIyIDEzOjMyOjQzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOiBSZWYgaW5zdGFuY2VzIHdoZW4gcmV0dXJuaW5nIHRoZW0gYWdhaW4gKGZpeGVzICMzNTcxODApCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6IChnc3RfY29udHJvbGxlcl9uZXdfdmFsaXN0KSwKKwkgIChnc3RfY29udHJvbGxlcl9uZXdfbGlzdCk6CisJICBSZWYgaW5zdGFuY2VzIHdoZW4gcmV0dXJuaW5nIHRoZW0gYWdhaW4gKGZpeGVzICMzNTcxODApCisKKzIwMDYtMDktMjIgMTA6MTc6MTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RnaG9zdHBhZC5jOiBEb24ndCBmb3JnZXQgdG8gcmVsZWFzZSBwcm94eSBsb2NrIHdoZW4gdGhlcmUncyBhbiBlcnJvci4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzogKGdzdF9naG9zdF9wYWRfc2V0X3RhcmdldCk6CisJICBEb24ndCBmb3JnZXQgdG8gcmVsZWFzZSBwcm94eSBsb2NrIHdoZW4gdGhlcmUncyBhbiBlcnJvci4KKworMjAwNi0wOS0yMCAxNjoxNzoyNiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGdzdC9nc3RjYXBzLmg6IEFkZCBleHRyYSBpbml0aWFsaXNlcnMgZm9yIENhcHMgdGhpbmdzLCB0byBmaXggc29tZSBwbHVnaW4gd2FybmluZ3Mgd2hlbiB1c2luZyAtV2V4dHJhCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGNhcHMuaDoKKwkgIEFkZCBleHRyYSBpbml0aWFsaXNlcnMgZm9yIENhcHMgdGhpbmdzLCB0byBmaXggc29tZSBwbHVnaW4gd2FybmluZ3MKKwkgIHdoZW4gdXNpbmcgLVdleHRyYQorCisyMDA2LTA5LTE4IDEzOjU2OjI2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0Z2hvc3RwYWQuYzogQWxzbyBzZXQgdGVtcGxhdGUgb24gdGhlIGludGVybmFsIHBhZCBzbyB0aGF0IGEgZ2V0Y2FwcyBmcm9tIHRoZSB0YXJnZXQgcGFkIHJldHVybnMgdGhlIHRlbXBsYXRlIGMuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzogKGdzdF9naG9zdF9wYWRfbmV3X2Z1bGwpOgorCSAgQWxzbyBzZXQgdGVtcGxhdGUgb24gdGhlIGludGVybmFsIHBhZCBzbyB0aGF0IGEgZ2V0Y2FwcyBmcm9tIHRoZSB0YXJnZXQKKwkgIHBhZCByZXR1cm5zIHRoZSB0ZW1wbGF0ZSBjYXBzLgorCisyMDA2LTA5LTE4IDEzOjQ0OjEyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0ZWxlbWVudC5jOiBVc2UgX0RFQlVHX09CSkVDVCBzb21lIG1vcmUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSksCisJICAoZ3N0X2VsZW1lbnRfZGlzcG9zZSk6CisJICBVc2UgX0RFQlVHX09CSkVDVCBzb21lIG1vcmUuCisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2xvb3ApOgorCSAgQXZvaWQgdHlwZWNoZWNrcy4KKwkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAobWFpbik6CisJICBJZiB0aGUgdG9wbGV2ZWwgZWxlbWVudCBpcyBub3QgYSBHc3RQaXBlbGluZSwgaXQgbXVzdCBiZSBwdXQgaW4gYQorCSAgcGlwZWxpbmUgc28gdGhhdCBhIGJ1cyBhbmQgY2xvY2sgaXMgc2VsZWN0ZWQuCisKKzIwMDYtMDktMTcgMTk6MzE6MjcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBKSVRURVIsIFJBVEUsIGFuZCBMQVRFTkNZIHF1ZXJ5IHNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSBkZWZhdWx0IGNhc2UgYW5kIG5vdCBieSB0aGUgQ09OVi4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfcXVlcnkpOgorCSAgSklUVEVSLCBSQVRFLCBhbmQgTEFURU5DWSBxdWVyeSBzaG91bGQgYmUgaGFuZGxlZCBieSB0aGUKKwkgIGRlZmF1bHQgY2FzZSBhbmQgbm90IGJ5IHRoZSBDT05WRVJUIHF1ZXJ5IGNvZGUuCisKKzIwMDYtMDktMTcgMTk6MjY6MTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3Rmb3JtYXQuYzogRml4IGxvY2tpbmcgb3JkZXIgKG11c3QgdGFrZSBsb2NrIGJlZm9yZSB1c2luZyBuX3ZhbHVlcykuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGZvcm1hdC5jOiAoZ3N0X2Zvcm1hdF9yZWdpc3Rlcik6CisJICBGaXggbG9ja2luZyBvcmRlciAobXVzdCB0YWtlIGxvY2sgYmVmb3JlIHVzaW5nIG5fdmFsdWVzKS4KKwkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfc2VyaWFsaXplX2VudW0pLAorCSAgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9lbnVtX2l0ZXJfY21wKSwKKwkgIChnc3RfdmFsdWVfZGVzZXJpYWxpemVfZW51bSk6CisJICBGaXggc2VyaWFsaXNhdGlvbi9kZXNlcmlhbGlzYXRpb24gb2YgY3VzdG9tIHJlZ2lzdGVyZWQgR3N0Rm9ybWF0cy4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RfdmFsdWVfc3VpdGUpOgorCSAgVW5pdCB0ZXN0IGZvciBjdXN0b20gZm9ybWF0IHNlcmlhbGlzYXRpb24vZGVzZXJpYWxpc2F0aW9uLgorCisyMDA2LTA5LTE2IDIxOjM4OjA5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIE1vcmUgR19PQkpFQ1QgbWFjcm8gZml4aW5nLiBBbHNvIEZpeCBzb21lIGRldGFpbHMgb24gdGhlIHBsdWdpbi1zdGFtcCBzZWN0aW9uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcHdnL2J1aWxkaW5nLWJvaWxlci54bWw6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgorCSAgTW9yZSBHX09CSkVDVCBtYWNybyBmaXhpbmcuIEFsc28gRml4IHNvbWUgZGV0YWlscyBvbiB0aGUgcGx1Z2luLXN0YW1wCisJICBzZWN0aW9uLgorCisyMDA2LTA5LTE2IDEyOjQ5OjAyICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogQ2hlY2sgaWYgcmVxdWVzdGVkIGNhcHMgYXJlIHRoZSBzYW1lIGFzIHRoZSBzaW5rcyBjYXBzIElGCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2J1ZmZlcl9hbGxvYyk6CisJICBDaGVjayBpZiByZXF1ZXN0ZWQgY2FwcyBhcmUgdGhlIHNhbWUgYXMgdGhlIHNpbmtzIGNhcHMgSUYKKwkgIC0+aGF2ZV9zYW1lX2NhcHMgaXMgVFJVRS4gSWYgdGhleSBhcmUgbm90LCBhY3QgYXMgaWYgaGF2ZV9zYW1lX2NhcHMKKwkgIGlzIEZBTFNFLgorCSAgVGhpcyBmaXhlcyB0aGUgcmVuZWdvdGlhdGlvbiBpc3N1ZXMgc3RhdGVkIGluICMzNTI4MjcuCisKKzIwMDYtMDktMTYgMTA6NDk6NDcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBFeHRyYWN0IHRoZSBtYW51YWwgZXhhbXBsZXMgYWdhaW4gbGlrZSB3ZSB1c2VkIHRvIGRvLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgICogZG9jcy9tYW51YWwvYWR2YW5jZWQtYXV0b3BsdWdnaW5nLnhtbDoKKwkgICogdGVzdHMvZXhhbXBsZXMvTWFrZWZpbGUuYW06CisJICAqIHRlc3RzL2V4YW1wbGVzL21hbnVhbC8uY3ZzaWdub3JlOgorCSAgKiB0ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuYW06CisJICAqIHRlc3RzL2V4YW1wbGVzL21hbnVhbC9leHRyYWN0LnBsOgorCSAgRXh0cmFjdCB0aGUgbWFudWFsIGV4YW1wbGVzIGFnYWluIGxpa2Ugd2UgdXNlZCB0byBkby4KKwkgIEZpeCBvbmUgb2YgdGhlbS4KKworMjAwNi0wOS0xNiAxMDo0NzozNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIHdpbjMyL2NvbW1vbi9jb25maWcuaDogdXBkYXRlIGZvciB2ZXJzaW9uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oOgorCSAgdXBkYXRlIGZvciB2ZXJzaW9uCisKKzIwMDYtMDktMTUgMjE6MzA6MDAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdGVycm9yLmM6IERvY3VtZW50cyBob3cgdG8gcmVjZWl2ZSBlcnJvcnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGVycm9yLmM6CisJICBEb2N1bWVudHMgaG93IHRvIHJlY2VpdmUgZXJyb3JzLgorCisyMDA2LTA5LTE1IDEwOjQzOjE2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICB0b29scy9nc3QtbGF1bmNoLmM6IEFkZGVkIHNvbWUgY29tbWVudHMgaGVyZSBhbmQgdGhlcmUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAoc2lnaW50X2hhbmRsZXJfc2lnaGFuZGxlciksIChjaGVja19pbnRyKSwKKwkgIChldmVudF9sb29wKSwgKG1haW4pOgorCSAgQWRkZWQgc29tZSBjb21tZW50cyBoZXJlIGFuZCB0aGVyZS4KKwkgIFBvc3QgYW4gYXBwbGljYXRpb24gbWVzc2FnZSB3aGVuIGFuIGludGVycnVwdCBpcyBjYXVnaHQgaW5zdGVhZCBvZiBkb2luZworCSAgYW4gdW5jb250cm9sbGVkIHN0YXRlIGNoYW5nZS4KKwkgIENsZWFuIHVwIHRoZSBldmVudCBsb29wLgorCSAgSGFuZGxlIGJ1ZmZlcmluZyBtZXNzYWdlcywgcGF1c2UvcmVzdW1lIHRoZSBwaXBlbGluZS4KKwkgIE1ha2Ugc2h1dGRvd24gYmVjYXVzZSBvZiBhbiBpbnRlcnJ1cHQgbW9yZSByZWxpYWJsZS4KKworMjAwNi0wOS0xNSAwOTo0OToxNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBNYWtlIHN1cmUgdGhhdCBvdXIgaW50ZXJuYWwgc3RhdGUgaXMgY29ycmVjdCB3aGVuIHdlIGNvbW1pdCBvdXIgc3RhdGUgYXN5bmNocm9ub3VzbHkuIFRoLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19jb21taXRfc3RhdGUpLAorCSAgKGdzdF9iYXNlX3Npbmtfd2FpdF9wcmVyb2xsKSwgKGdzdF9iYXNlX3NpbmtfZG9fc3luYyksCisJICAoZ3N0X2Jhc2Vfc2lua19wcmVyb2xsX29iamVjdCk6CisJICBNYWtlIHN1cmUgdGhhdCBvdXIgaW50ZXJuYWwgc3RhdGUgaXMgY29ycmVjdCB3aGVuIHdlIGNvbW1pdCBvdXIgc3RhdGUKKwkgIGFzeW5jaHJvbm91c2x5LiBUaGlzIHNvbHZlcyBhIHJhY2Ugd2hlcmUgYSBzdGF0ZSBjaGFuZ2UgdG8gUExBWUlORworCSAgY291bGQgY2F1c2UgdGhlIHNpbmsgdG8gcmVtYWluIGJsb2NrZWQgaW4gcHJlcm9sbCBpbiBzb21lIHNpdHVhdGlvbnMuCisKKzIwMDYtMDktMTUgMDg6NTA6MjEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHRvb2xzL2dzdC1pbnNwZWN0LmM6IExpc3QgZmxhZ3MgYXMgaGV4IHNvIGl0J3MgZWFzaWVyIHRvIGRlYWwgd2l0aC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAocHJpbnRfZWxlbWVudF9wcm9wZXJ0aWVzX2luZm8pLAorCSAgKHByaW50X3NpZ25hbF9pbmZvKToKKwkgIExpc3QgZmxhZ3MgYXMgaGV4IHNvIGl0J3MgZWFzaWVyIHRvIGRlYWwgd2l0aC4KKworMjAwNi0wOS0xNSAwODo0NzozNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgRXhwb3NlIGxvZ2ljIHRvIHdhaXQgZm9yIHByZXJvbGwgc28gdGhhdCBzdWJjbGFzc2VzIHN1Y2ggYXMgYXVkaW9zaW5rIGNhbiBhbHNvIHVzZSB0aGlzIG1ldGhvZC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX3dhaXRfcHJlcm9sbCksCisJICAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKToKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSAgRXhwb3NlIGxvZ2ljIHRvIHdhaXQgZm9yIHByZXJvbGwgc28gdGhhdCBzdWJjbGFzc2VzIHN1Y2ggYXMgYXVkaW9zaW5rCisJICBjYW4gYWxzbyB1c2UgdGhpcyBtZXRob2QuCisJICBBUEk6IGdzdF9iYXNlX3Npbmtfd2FpdF9wcmVyb2xsKCkKKworMjAwNi0wOS0xNSAwODo0Mzo0NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0LzogU21hbGwgY2xlYW51cHMgaW4gZG9jcyBhbmQgY29kZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0b2JqZWN0LmM6IChnc3Rfb2JqZWN0X3NldF9wYXJlbnQpOgorCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGRvX3BpcGVsaW5lX3NlZWspOgorCSAgU21hbGwgY2xlYW51cHMgaW4gZG9jcyBhbmQgY29kZS4KKwkgICogZ3N0L2dzdHNlZ21lbnQuYzogKGdzdF9zZWdtZW50X2NsaXApOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c2VnbWVudC5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgaWYgc3RvcCA9PSBzdGFydCBhbmQgc3RhcnQgaXMgaW4gdGhlIHNlZ21lbnQsIG5vIGNsaXBwaW5nIHNob3VsZCBiZQorCSAgZG9uZS4gQWxzbyBhZGQgYSB0ZXN0IGZvciB0aGlzLgorCisyMDA2LTA5LTE1IDA4OjM5OjU2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBBZGRlZCBtZXRob2RzIHRvIGNyZWF0ZSBhbmQgcGFyc2UgQlVGRkVSSU5HIG1lc3NhZ2VzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtYnVmZmVyaW5nLnR4dDoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKGdzdF9tZXNzYWdlX25ld19idWZmZXJpbmcpLAorCSAgKGdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZyk6CisJICAqIGdzdC9nc3RtZXNzYWdlLmg6CisJICBBZGRlZCBtZXRob2RzIHRvIGNyZWF0ZSBhbmQgcGFyc2UgQlVGRkVSSU5HIG1lc3NhZ2VzLgorCSAgQWRkZWQgcHJlbGltaW5hcnkgZG9jcyBhYm91dCBidWZmZXJpbmcuCisJICBBUEk6IGdzdF9tZXNzYWdlX25ld19idWZmZXJpbmcKKwkgIEFQSTogZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nCisKKzIwMDYtMDktMTUgMDg6MzI6NTcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RiaW4uYzogVXBkYXRlIGRvY3VtZW50YXRpb24uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOgorCSAgVXBkYXRlIGRvY3VtZW50YXRpb24uCisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9jbGFzc19pbml0KSwKKwkgIChnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkKSwgKGdzdF9lbGVtZW50X3NldF9jbG9jayksCisJICAoZ3N0X2VsZW1lbnRfZ2V0X2luZGV4KSwgKGdzdF9lbGVtZW50X2FkZF9wYWQpLAorCSAgKGdzdF9lbGVtZW50X3JlbW92ZV9wYWQpLCAoZ3N0X2VsZW1lbnRfZ2V0X3JhbmRvbV9wYWQpLAorCSAgKGdzdF9lbGVtZW50X3NlbmRfZXZlbnQpLCAoZ3N0X2VsZW1lbnRfZ2V0X3F1ZXJ5X3R5cGVzKSwKKwkgIChnc3RfZWxlbWVudF9xdWVyeSksIChnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UpLAorCSAgKGdzdF9lbGVtZW50X21lc3NhZ2VfZnVsbCksIChnc3RfZWxlbWVudF9jb250aW51ZV9zdGF0ZSksCisJICAoZ3N0X2VsZW1lbnRfbG9zdF9zdGF0ZSksIChnc3RfZWxlbWVudF9zYXZlX3RoeXNlbGYpLAorCSAgKGdzdF9lbGVtZW50X3Jlc3RvcmVfdGh5c2VsZik6CisJICBEb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisJICBSZW5hbWUgbGFzdCBiaXQgb2YgdGhlIG5ldy1wYWQgLT4gcGFkLWFkZGVkIHNpZ25hbCByZW5hbWUuCisJICBGaXggdGhlIGNhc2Ugd2hlcmUgYW4gZWxlbWVudCBxdWVyeSB3b3VsZCBvbmx5IHdvcmsgaWYgdGhlIHNvdXJjZQorCSAgcGFkIHdhcyBsaW5rZWQuCisJICBBdm9pZCBzb21lIHVzZWxlc3MgdHlwZSBjaGVja2luZyBpbiBtZXNzYWdlIGhhbmRsaW5nLgorCSAgKiBnc3QvZ3N0ZXZlbnQuYzoKKwkgICogZ3N0L2dzdGV2ZW50Lmg6CisJICAqIGdzdC9nc3R1dGlscy5jOgorCSAgRG9jdW1lbnRhdGlvbiB1cGRhdGVzLgorCisyMDA2LTA5LTE0IDIwOjEyOjA0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOgorCSAgYWRkIGFuIElORk8gbGluZSBmb3Igd2hlbiB3ZSBhY3R1YWxseSB1cGRhdGUgdGhlIGZkCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFkZCBhbiBJTkZPIGxpbmUgZm9yIHdoZW4gd2UgYWN0dWFsbHkgdXBkYXRlIHRoZSBmZAorCisyMDA2LTA5LTE0IDIwOjExOjEwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogY29uZmlndXJlLmFjOgorCSAgYmFjayB0byB0cnVuaworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBiYWNrIHRvIHRydW5rCisKKz09PSByZWxlYXNlIDAuMTAuMTAgPT09CisKKzIwMDYtMDktMTQgMjA6MDg6MTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBORVdTOgorCSogUkVMRUFTRToKKwkqIGNvbW1vbjoKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKKwkqIGdzdC9nc3QuYzoKKwkqIGdzdC9nc3RjYXBzLmM6CisJKiBnc3QvZ3N0Y2xvY2suaDoKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkgIHJlbGVhc2luZyAwLjEwLjEwCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJlbGVhc2luZyAwLjEwLjEwCisKKzIwMDYtMDktMDkgMTY6MDg6MTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBjb25maWd1cmUuYWM6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICBmaXJzdCBwcmVyZWxlYXNlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGZpcnN0IHByZXJlbGVhc2UKKworMjAwNi0wOS0wOSAxNjowNzozNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHBvL2FmLnBvOgorCSogcG8vYXoucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kZS5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZnIucG86CisJKiBwby9pdC5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9ydS5wbzoKKwkqIHBvL3NxLnBvOgorCSogcG8vc3IucG86CisJKiBwby9zdi5wbzoKKwkqIHBvL3RyLnBvOgorCSogcG8vdWsucG86CisJKiBwby92aS5wbzoKKwkqIHBvL3poX0NOLnBvOgorCSogcG8vemhfVFcucG86CisJICB0cmFuc2xhdGlvbiB1cGRhdGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHRyYW5zbGF0aW9uIHVwZGF0ZXMKKworMjAwNi0wOS0wNSAxNDoxMTowNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZG9jcy9tYW51YWwvYWR2YW5jZWQtcG9zaXRpb24ueG1sOiBGaXggdHlwbyBpbiBzYW1wbGUgY29kZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1wb3NpdGlvbi54bWw6CisJICBGaXggdHlwbyBpbiBzYW1wbGUgY29kZS4KKworMjAwNi0wOS0wNSAwODozNToyMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvbmV0LzogTWFrZSBzdHVmZiBjb21waWxlIG9uIHdpbmRvd3MuIEZpeGVzICMzNDUyOTUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6IChpbmV0X2F0b24pLAorCSAgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX2luaXQpLCAoZ3N0X25ldF9jbGllbnRfY2xvY2tfZmluYWxpemUpLAorCSAgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX2RvX3NlbGVjdCksIChnc3RfbmV0X2NsaWVudF9jbG9ja19uZXcpOgorCSAgKiBsaWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suaDoKKwkgICogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwYWNrZXQuYzogKGdzdF9uZXRfdGltZV9wYWNrZXRfc2VuZCk6CisJICAqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcGFja2V0Lmg6CisJICAqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzogKGluZXRfYXRvbiksCisJICAoZ3N0X25ldF90aW1lX3Byb3ZpZGVyX2luaXQpLCAoZ3N0X25ldF90aW1lX3Byb3ZpZGVyX2ZpbmFsaXplKSwKKwkgIChnc3RfbmV0X3RpbWVfcHJvdmlkZXJfdGhyZWFkKSwgKGdzdF9uZXRfdGltZV9wcm92aWRlcl9uZXcpOgorCSAgKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmg6CisJICBNYWtlIHN0dWZmIGNvbXBpbGUgb24gd2luZG93cy4gRml4ZXMgIzM0NTI5NS4KKworMjAwNi0wOS0wMyAxMToxNjo1MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdC5jOiBQcmludCBiZXR0ZXIgZGV0YWlscyB3aGVuIGNoaWxkIHdhcyB0ZXJtaW5hdGVkIGJ5IHNpZ25hbC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0LmM6IChlbnN1cmVfY3VycmVudF9yZWdpc3RyeV9mb3JraW5nKToKKwkgIFByaW50IGJldHRlciBkZXRhaWxzIHdoZW4gY2hpbGQgd2FzIHRlcm1pbmF0ZWQgYnkgc2lnbmFsLgorCisyMDA2LTA5LTAzIDExOjA2OjUyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogUHJpbnQgYSB3YXJuaW5nIHJhdGhlciB0aGFuIGdfYXNzZXJ0KCkgaWYgYSBwbHVnaW4gZmVhdHVyZSBpcyBhIFVSSSBoYW5kbGVyIGJ1dCByZXR1cm5zIG5vIHByb3QuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogKGdzdF9yZWdpc3RyeV94bWxfc2F2ZV9mZWF0dXJlKToKKwkgIFByaW50IGEgd2FybmluZyByYXRoZXIgdGhhbiBnX2Fzc2VydCgpIGlmIGEgcGx1Z2luIGZlYXR1cmUKKwkgIGlzIGEgVVJJIGhhbmRsZXIgYnV0IHJldHVybnMgbm8gcHJvdG9jb2xzICgjMzUzOTc2KS4KKworMjAwNi0wOS0wMiAxOToxMDo1NiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBkb2NzL3JhbmRvbS9tb3ZpbmctcGx1Z2luczogRml4IHR3byB0eXBvcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL3JhbmRvbS9tb3ZpbmctcGx1Z2luczoKKwkgIEZpeCB0d28gdHlwb3MuCisKKzIwMDYtMDktMDIgMTk6MDM6NDEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBkb2NzL3JhbmRvbS9tb3ZpbmctcGx1Z2luczoKKwkgIGRvY3VtZW50IHByb2Nlc3Mgc29tZSBtb3JlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGRvY3VtZW50IHByb2Nlc3Mgc29tZSBtb3JlCisKKzIwMDYtMDktMDIgMTM6NDA6NDEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBnc3QvZ3N0ZXJyb3IuYzoKKwkgIGNsYXJpZnkgZXJyb3IgbWVzc2FnZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBjbGFyaWZ5IGVycm9yIG1lc3NhZ2UKKworMjAwNi0wOS0wMiAxMzozNjo0NCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGRvY3MvcmFuZG9tL21vdmluZy1wbHVnaW5zOgorCSAgZG9jdW1lbnQgcHJvY2VzcyBzb21lIG1vcmUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZG9jdW1lbnQgcHJvY2VzcyBzb21lIG1vcmUKKworMjAwNi0wOS0wMSAxNjowMzo0OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSogQ2hhbmdlTG9nOgorCSAgQ2hhbmdlTG9nIHN1cmdlcnk6IGZpeCB0eXBvCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIENoYW5nZUxvZyBzdXJnZXJ5OiBmaXggdHlwbworCisyMDA2LTA5LTAxIDE1OjU1OjIwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0aW5mby5jOiBGaXggbG9ja2luZyBvcmRlciwgaGFuZGxlIE5VTEwgZnVuY3Rpb24gdmFsdWVzIHByb3Blcmx5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RpbmZvLmM6IChfZ3N0X2RlYnVnX25hbWVvZl9mdW5jcHRyKToKKwkgIEZpeCBsb2NraW5nIG9yZGVyLCBoYW5kbGUgTlVMTCBmdW5jdGlvbiB2YWx1ZXMgcHJvcGVybHkuCisJICAqIGdzdC9nc3RpbmZvLmg6CisJICBGaXggZG9jcy4KKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9idWZmZXJfYWxsb2NfdW5jaGVja2VkKToKKwkgIEluaXRpYWxpc2VkIHZhcmlhYmxlIGJlZm9yZSB1c2luZyBpdCBhbmQgZml4IGRlYnVnIHN0YXRlbWVudCB0bworCSAgcHJpbnQgdGhlIGFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uIHJhdGhlciB0aGFuIHRoZSBhZGRyZXNzIG9mIHRoZQorCSAgdmFyaWFibGUgb24gdGhlIHN0YWNrIGhvbGRpbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uLgorCisyMDA2LTA5LTAxIDEwOjMzOjAzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0Z2hvc3RwYWQuYzogTW9yZSBjbGVhbnVwcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzogKGdzdF9wcm94eV9wYWRfZG9fZXZlbnQpLAorCSAgKGdzdF9wcm94eV9wYWRfZG9fYnVmZmVyYWxsb2MpLCAoZ3N0X3Byb3h5X3BhZF9kb19jaGFpbiksCisJICAoZ3N0X3Byb3h5X3BhZF9kb19nZXRyYW5nZSksIChnc3RfcHJveHlfcGFkX2RvX2NoZWNrZ2V0cmFuZ2UpLAorCSAgKGdzdF9wcm94eV9wYWRfc2V0X3RhcmdldF91bmxvY2tlZCksIChnc3RfZ2hvc3RfcGFkX3BhcmVudF9zZXQpLAorCSAgKGdzdF9naG9zdF9wYWRfcGFyZW50X3Vuc2V0KSwKKwkgIChnc3RfZ2hvc3RfcGFkX2ludGVybmFsX2RvX2FjdGl2YXRlX3B1c2gpLAorCSAgKGdzdF9naG9zdF9wYWRfaW50ZXJuYWxfZG9fYWN0aXZhdGVfcHVsbCksCisJICAoZ3N0X2dob3N0X3BhZF9kb19hY3RpdmF0ZV9wdXNoKSwgKGdzdF9naG9zdF9wYWRfZG9fYWN0aXZhdGVfcHVsbCksCisJICAoZ3N0X2dob3N0X3BhZF9kb19saW5rKSwgKGdzdF9naG9zdF9wYWRfZG9fdW5saW5rKSwKKwkgIChnc3RfZ2hvc3RfcGFkX2luaXQpLCAoZ3N0X2dob3N0X3BhZF9kaXNwb3NlKSwKKwkgIChnc3RfZ2hvc3RfcGFkX25ld19mdWxsKSwgKGdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldCksCisJICAoZ3N0X2dob3N0X3BhZF9uZXcpLCAoZ3N0X2dob3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSksCisJICAoZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0X2Zyb21fdGVtcGxhdGUpLAorCSAgKGdzdF9naG9zdF9wYWRfZ2V0X3RhcmdldCksIChnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQpOgorCSAgTW9yZSBjbGVhbnVwcy4KKwkgIEF2b2lkIG5lZWRsZXNzIHR5cGVjaGVja2luZyBpbiBtYWNyb3MuCisJICBTaW5jZSB0aGUgaW50ZXJuYWwgcGFkIGlzIGFsd2F5cyBwcmVzZW50IGFuZCBuZXZlciBjaGFuZ2VzLCB0aGVyZSBpcworCSAgbm8gbmVlZCB0byBsb2NraW5nIG9yIHJlZiB3aGVuIHJldHJpZXZpbmcgaXQuCisJICBJbXByb3ZlIGRlYnVnZ2luZyBhIGJpdC4KKwkgIEhhbmRsZSBsaW5rIGVycm9ycyB3aGVuIHNldHRpbmcgdGhlIHRhcmdldC4gRml4ZXMgIzM0MTAyOS4KKworMjAwNi0wOS0wMSAxMDoyNjo1MiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy86IEZpeCBkb2NzIHNvbWUgbW9yZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSAgKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMtc2VjdGlvbnMudHh0OgorCSAgRml4IGRvY3Mgc29tZSBtb3JlLgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChnc3RfY29sbGVjdF9wYWRzX3JlbW92ZV9wYWQpLAorCSAgKGdzdF9jb2xsZWN0X3BhZHNfZXZlbnQpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg6CisJICBEb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisJICBGcmVlIHF1ZXVlZCBidWZmZXIgd2hlbiByZW1vdmluZyBhIHBhZC4KKworMjAwNi0wOC0zMSAxNzoxMzozNCArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgorCisJICBnc3QvZ3N0dXRpbHMuYzogRW5zdXJlIHRoYXQgd2Ugc2V0IGEgY2Fwc2ZpbHRlciB0byBOVUxMIGlmIHdlIGZhaWxlZCB0byBsaW5rIGl0IHdoZW4gZG9pbmcgZmlsdGVyZWQgbGlua2luZywgdG8gYXZvaWQuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9lbGVtZW50X2xpbmtfcGFkcyksCisJICAoZ3N0X2VsZW1lbnRfbGlua19wYWRzX2ZpbHRlcmVkKToKKwkgIEVuc3VyZSB0aGF0IHdlIHNldCBhIGNhcHNmaWx0ZXIgdG8gTlVMTCBpZiB3ZSBmYWlsZWQgdG8gbGluayBpdAorCSAgd2hlbiBkb2luZyBmaWx0ZXJlZCBsaW5raW5nLCB0byBhdm9pZCBjcml0aWNhbHMuCisJICBObyBuZWVkIHRvIGNoZWNrIGZvciB1bnJlZmZpbmcgc3JjcGFkLCB3aGljaCBpcyBleHBsaWNseSBOVUxMZWQKKwkgIGFib3ZlIChhIHRyaXZpYWwgY29kZSBjbGVhbnVwKS4KKworMjAwNi0wOC0zMSAxNToxOTo0NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1nc3RnaG9zdHBhZC50eHQ6IFVwZGF0ZSBhc2NpaSBhcnQgaW4gZG9jdW1lbnRhdGlvbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdGdob3N0cGFkLnR4dDoKKwkgIFVwZGF0ZSBhc2NpaSBhcnQgaW4gZG9jdW1lbnRhdGlvbi4KKwkgICogZ3N0L2dzdGdob3N0cGFkLmM6IChnc3RfcHJveHlfcGFkX2RvX2ludGVybmFsX2xpbmspLAorCSAgKGdzdF9wcm94eV9wYWRfc2V0X3RhcmdldF91bmxvY2tlZCksIChnc3RfcHJveHlfcGFkX2luaXQpLAorCSAgKGdzdF9naG9zdF9wYWRfcGFyZW50X3NldCksIChnc3RfZ2hvc3RfcGFkX3BhcmVudF91bnNldCksCisJICAoZ3N0X2dob3N0X3BhZF9pbnRlcm5hbF9kb19hY3RpdmF0ZV9wdXNoKSwKKwkgIChnc3RfZ2hvc3RfcGFkX2ludGVybmFsX2RvX2FjdGl2YXRlX3B1bGwpLAorCSAgKGdzdF9naG9zdF9wYWRfZG9fYWN0aXZhdGVfcHVzaCksIChnc3RfZ2hvc3RfcGFkX2RvX2FjdGl2YXRlX3B1bGwpLAorCSAgKGdzdF9naG9zdF9wYWRfZG9fbGluayksIChnc3RfZ2hvc3RfcGFkX2RvX3VubGluayksCisJICAoZ3N0X2dob3N0X3BhZF9kaXNwb3NlKSwgKGdzdF9naG9zdF9wYWRfbmV3X2Z1bGwpLAorCSAgKGdzdF9naG9zdF9wYWRfc2V0X3RhcmdldCk6CisJICBTbWFsbCBjbGVhbnVwcyBhbmQgbGVhayBmaXhlcy4KKwkgIFJlbW92ZSBzb21lIGNoZWNrcyBub3cgdGhhdCB0aGUgaW50ZXJuYWwgcGFkIGlzIG5ldmVyIE5VTEwuCisJICBGaXggdGhlIGNhc2Ugd2hlcmUgbGlua2luZyBwYWRzIHdpdGhvdXQgYSB0YXJnZXQgd291bGQgY3JlYXRlIG5hc3R5CisJICBjcml0aWNhbHMuIEZpeGVzICMzNDEwMjkuCisJICBEb24ndCBhc3NpZ24gYSBHc3RQYWRMaW5rUmV0dXJuIHRvIGEgZ2Jvb2xlYW4gYW5kIG1lc3MgdXAgdGhlIHJldHVybgorCSAgdmFsdWUgb2YgX3NldF90YXJnZXQoKS4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6IChHU1RfU1RBUlRfVEVTVCksCisJICAoZ3N0X2dob3N0X3BhZF9zdWl0ZSk6CisJICBTb21lIG1vcmUgdGVzdHMgZm9yIGNyZWF0aW5nIGFuZCBsaW5raW5nIHVudGFyZ2V0ZWQgZ2hvc3RwYWRzLgorCisyMDA2LTA4LTMxIDEwOjU5OjExICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBSZWZhY3RvcmVkICpfbmV3KCkgZnVuY3Rpb25zLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3RnaG9zdHBhZC5jOiAoZ3N0X3Byb3h5X3BhZF9kb19nZXRjYXBzKSwKKwkgIChnc3RfcHJveHlfcGFkX2RvX3NldGNhcHMpLCAoZ3N0X3Byb3h5X3BhZF9zZXRfdGFyZ2V0X3VubG9ja2VkKSwKKwkgIChnc3RfcHJveHlfcGFkX2Rpc3Bvc2UpLCAoZ3N0X2dob3N0X3BhZF9uZXdfZnVsbCksCisJICAoZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0KSwgKGdzdF9naG9zdF9wYWRfbmV3KSwKKwkgIChnc3RfZ2hvc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlKSwKKwkgIChnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXRfZnJvbV90ZW1wbGF0ZSk6CisJICAqIGdzdC9nc3RnaG9zdHBhZC5oOgorCSAgUmVmYWN0b3JlZCAqX25ldygpIGZ1bmN0aW9ucy4KKwkgIFRlbXBsYXRlcyBhcmUgbm93IHVzZWQgYXMgYSBnX29iamVjdF9uZXcoKSBwYXJhbWV0ZXIuCisJICBVc2UgdGVtcGxhdGUgaW4gX2RvX2dldGNhcHMoKSBpZiB3ZSBkb24ndCBoYXZlIGEgdGFyZ2V0LgorCSAgU21hbGwgZG9jdW1lbnRhdGlvbiBjbGVhbnVwcy4KKwkgIEFkZGVkIHR3byBuZXcgY29uc3RydWN0b3JzOgorCSAgZ3N0X2dob3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSgpCisJICBnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXRfZnJvbV90ZW1wbGF0ZSgpCisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOiAoR1NUX1NUQVJUX1RFU1QpLAorCSAgKGdzdF9naG9zdF9wYWRfc3VpdGUpOgorCSAgQWRkZWQgdGVzdHMgZm9yIG5ldyBnaG9zdHBhZCBpbnN0YW5jaWF0aW9uIGZ1bmN0aW9ucy4KKwkgIEFQSSBhZGRpdGlvbnM6IGdzdF9naG9zdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUsCisJICBnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXRfZnJvbV90ZW1wbGF0ZQorCisyMDA2LTA4LTMwIDEyOjI4OjU1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvcmFuZG9tL2Vuc29uaWMvcHJvZmlsaW5nLnR4dDogSWRlYXMgYWJvdXQgcW9zIHByb2ZpbGluZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL3JhbmRvbS9lbnNvbmljL3Byb2ZpbGluZy50eHQ6CisJICBJZGVhcyBhYm91dCBxb3MgcHJvZmlsaW5nLgorCisyMDA2LTA4LTI5IDE0OjM5OjQyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0Y2Fwcy5jOiBDb2RlIGNsZWFudXBzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RjYXBzLmM6IChnc3RfY2Fwc19zdHJ1Y3R1cmVfaXNfc3Vic2V0X2ZpZWxkKToKKwkgIENvZGUgY2xlYW51cHMuCisJICBGaXggbWVtbGVhay4KKworMjAwNi0wOC0yOSAxMDo0OTowMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdHhtbC5jOiBJbXByb3ZlIGFuZCBkZXR5cG9meSBkb2NzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R4bWwuYzoKKwkgIEltcHJvdmUgYW5kIGRldHlwb2Z5IGRvY3MuCisJICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvLmN2c2lnbm9yZToKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHhtbC5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3htbF9zdWl0ZSk6CisJICBBZGQgYSBiYXNpYyB0ZXN0IHN1aXRlIGZvciBHc3RYTUwuCisKKzIwMDYtMDgtMjkgMDk6NTY6NTcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RlbGVtZW50LmM6IENsZWFyIHRoZSBwYWQgY2FwcyB3aGVuIHRoZSBlbGVtZW50IHNodXQgZG93biBhbGwgb2YgdGhlIHBhZHMgYW5kIGlzIG5vdCBzdHJlYW1pbmcgZGF0YSB0aGF0IGNvdWxkIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChhY3RpdmF0ZV9wYWRzKSwgKGNsZWFyX2NhcHMpLAorCSAgKGl0ZXJhdG9yX2FjdGl2YXRlX2ZvbGRfd2l0aF9yZXN5bmMpLCAoZ3N0X2VsZW1lbnRfcGFkc19hY3RpdmF0ZSk6CisJICBDbGVhciB0aGUgcGFkIGNhcHMgd2hlbiB0aGUgZWxlbWVudCBzaHV0IGRvd24gYWxsIG9mIHRoZSBwYWRzIGFuZAorCSAgaXMgbm90IHN0cmVhbWluZyBkYXRhIHRoYXQgY291bGQgbW9kaWZ5IHRoZSBjYXBzLgorCSAgRml4ZXMgIzM1Mjk1OC4KKworMjAwNi0wOC0yOSAwODowMjo0MSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkgIEkgZG9uJ3QgZXZlbiBrbm93IHdoaWNoIGFyY2ggdGhhdCBpcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBJIGRvbid0IGV2ZW4ga25vdyB3aGljaCBhcmNoIHRoYXQgaXMKKworMjAwNi0wOC0yOCAyMzoxNjozMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIG1vcmUgbG9naWNhbCB0byBsb2cgdGhlIHNlbmRpbmcgcGFkLCBhbmQgdGhlIHBhZCBpdCBpcyBzZW5kaW5nIHRvCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIG1vcmUgbG9naWNhbCB0byBsb2cgdGhlIHNlbmRpbmcgcGFkLCBhbmQgdGhlIHBhZCBpdCBpcyBzZW5kaW5nIHRvCisKKzIwMDYtMDgtMjggMTg6MjA6MDAgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiBSZXZlcnQgcHJldmlvdXMgY2hhbmdlOyBJIG1pc3VuZGVyc3Rvb2Qgc2luZ2xlLXNlZ21lbnQgbW9kZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IChnc3RfaWRlbnRpdHlfdHJhbnNmb3JtX2lwKToKKwkgIFJldmVydCBwcmV2aW91cyBjaGFuZ2U7IEkgbWlzdW5kZXJzdG9vZCBzaW5nbGUtc2VnbWVudCBtb2RlLgorCisyMDA2LTA4LTI4IDE4OjA4OjA5ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogVW5zZXQgRElTQ09OVCBvbiBidWZmZXJzIHdoZW4gdXNpbmcgc2luZ2xlLXNlZ21lbnQgbW9kZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IChnc3RfaWRlbnRpdHlfdHJhbnNmb3JtX2lwKToKKwkgIFVuc2V0IERJU0NPTlQgb24gYnVmZmVycyB3aGVuIHVzaW5nIHNpbmdsZS1zZWdtZW50IG1vZGUuCisKKzIwMDYtMDgtMjggMTY6Mzk6MjAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RjYXBzLio6IEZpeCBkb2NzIGFuZCBpbmRlbnRhdGlvbiBhZ2Fpbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0Y2Fwcy5jOiAoZ3N0X2NhcHNfbWVyZ2Vfc3RydWN0dXJlKToKKwkgICogZ3N0L2dzdGNhcHMuaDoKKwkgIEZpeCBkb2NzIGFuZCBpbmRlbnRhdGlvbiBhZ2Fpbi4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHF1ZXJ5LmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBGaXggbGVhayBpbiB0ZXN0cyBhbmQgYWRkIHNvbWUgbW9yZSB0ZXN0cy4KKworMjAwNi0wOC0yOCAxNTo1NzozOSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBJbmZvcm0gR3N0U2VnbWVudCBvZiB0aGUgbGFzdCBzdG9wIHBvc2l0aW9uIGluIG9yZGVyIGZvciB0aGUgY3VycmVudCBzZWdtZW50IHRvIGhhdmUgYSBwLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19nZXRfc3luY190aW1lcyk6CisJICBJbmZvcm0gR3N0U2VnbWVudCBvZiB0aGUgbGFzdCBzdG9wIHBvc2l0aW9uIGluIG9yZGVyIGZvciB0aGUgY3VycmVudAorCSAgc2VnbWVudCB0byBoYXZlIGEgcHJvcGVyIGR1cmF0aW9uIGlmIGl0IGRvZXNuJ3QgaGF2ZSBhIHNwZWNpZmljIHN0b3AKKwkgIHBvc2l0aW9uIGZyb20gd2hpY2ggYSBkdXJhdGlvbiBjb3VsZCBiZSBjYWxjdWxhdGVkLgorCSAgVGhpcyBidWcgd2FzIG5vdGljZWFibGUgd2hlbiBhIG5vbi1mbHVzaGluZywgbm9uLXVwZGF0ZSBuZXcgc2VnbWVudCB3YXMKKwkgIGZvbGxvd2VkIGJ5IGFub3RoZXIgc2VnbWVudCAoYWxsIGJ1ZmZlcnMgZnJvbSB0aGUgbmV3IHNlZ21lbnQgd2VyZSBiZWluZworCSAgZHJvcHBlZCkuCisKKzIwMDYtMDgtMjggMTU6NDg6MjQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBTbWFsbCBjb21tZW50IHVwZGF0ZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19wZXJmb3JtX3NlZWspOgorCSAgU21hbGwgY29tbWVudCB1cGRhdGUuCisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogKGdzdF9pZGVudGl0eV9jbGFzc19pbml0KSwKKwkgIChnc3RfaWRlbnRpdHlfdHJhbnNmb3JtX2lwKToKKwkgIERyb3AtcHJvYmFiaWxpdHkgaXMgYnJva2VuLCBtZW50aW9uIHRoaXMgaW4gdGhlIGNvZGUgd2l0aCBhCisJICBGSVhNRSBhbmQgYWxzbyBpbiB0aGUgcHJvcGVydHkgZGVzY3JpcHRpb24uCisJICBNYWtlIHNpbGVudCBhbHNvIGJlIHNpbGVudCBhYm91dCB0aGUgZHJvcCBtZXNzYWdlcy4KKworMjAwNi0wOC0yOCAxMTowNjowNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZG9jcy9tYW51YWwvYXBwZW5kaXgtd2luMzIueG1sOiBSZW1vdmUgbWVudGlvbiBvZiBwb3B0LCB3ZSBkb24ndCBkZXBlbmQgb24gdGhhdCBhbnkgbG9uZ2VyICgjMzUzMTM2KS4gQWRkIHNvbWUgY29tbWVuLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9tYW51YWwvYXBwZW5kaXgtd2luMzIueG1sOgorCSAgUmVtb3ZlIG1lbnRpb24gb2YgcG9wdCwgd2UgZG9uJ3QgZGVwZW5kIG9uIHRoYXQgYW55CisJICBsb25nZXIgKCMzNTMxMzYpLiBBZGQgc29tZSBjb21tZW50cyBwb2ludGluZyBvdXQgdGhhdAorCSAgdGhpcyBzZWN0aW9uIGlzIHNsaWdodGx5IG91dGRhdGVkLgorCisyMDA2LTA4LTI4IDA4OjQ0OjI5ICswMDAwICBUb3JzdGVuIFNjaG9lbmZlbGQgPGthZmZlZXRpc2NoQGdteC5kZT4KKworCSAgSW5pdGlhbGl6ZSB2YXJpYWJsZXMgd2hlbiBjcmVhdGluZyBhIG5ldyBzZWdtZW50IHF1ZXJ5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogVG9yc3RlbiBTY2hvZW5mZWxkIDxrYWZmZWV0aXNjaCBhdCBnbXggZG90IGRlPgorCSAgKiBnc3QvZ3N0cXVlcnkuYzogKGdzdF9xdWVyeV9uZXdfc2VnbWVudCk6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RxdWVyeS5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgSW5pdGlhbGl6ZSB2YXJpYWJsZXMgd2hlbiBjcmVhdGluZyBhIG5ldyBzZWdtZW50IHF1ZXJ5LgorCSAgRml4ZXMgIzM1MzEyMS4KKworMjAwNi0wOC0yOCAwODozNTozMSArMDAwMCAgVG9yc3RlbiBTY2hvZW5mZWxkIDxrYWZmZWV0aXNjaEBnbXguZGU+CisKKwkgIENoZWNrIGZvciBOVUxMIGJlZm9yZSBfcmVmZmluZyB0aGUgYnVzLiBGaXhlcyAjMzUzMTIyLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogVG9yc3RlbiBTY2hvZW5mZWxkIDxrYWZmZWV0aXNjaCBhdCBnbXggZG90IGRlPgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfZ2V0X2J1cyk6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RlbGVtZW50LmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBDaGVjayBmb3IgTlVMTCBiZWZvcmUgX3JlZmZpbmcgdGhlIGJ1cy4gRml4ZXMgIzM1MzEyMi4KKworMjAwNi0wOC0yNSAxNjo0NjowOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZG9jcy9tYW51YWwvYmFzaWNzLWJ1cy54bWw6IERvY3MgdXBkYXRlOiBmaXggd3JvbmcgY2FsbGJhY2sgcmV0dXJuIHZhbHVlIGV4cGxhbmF0aW9uOyBhZGQgc29tZSBsaW5lcyBhYm91dCB0aGUgaW1wbGljLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9tYW51YWwvYmFzaWNzLWJ1cy54bWw6CisJICBEb2NzIHVwZGF0ZTogZml4IHdyb25nIGNhbGxiYWNrIHJldHVybiB2YWx1ZSBleHBsYW5hdGlvbjsgYWRkCisJICBzb21lIGxpbmVzIGFib3V0IHRoZSBpbXBsaWNpdCByZWxhdGlvbnNoaXAgYmV0d2VlbiBtYWluIGxvb3AKKwkgIGFuZCBtYWluIGNvbnRleHQ7IHJlbW92ZSBkdXBsaWNhdGUgbWFpbiBsb29wIHZhcmlhYmxlIGRlY2xhcmF0aW9uLgorCisyMDA2LTA4LTI0IDEyOjMwOjA0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOiBEb24ndCBsZWFrIGNhcHMgaW4gdW5pdCB0ZXN0OyBhZGQgYSBmZXcgbW9yZSBzaW1wbGUgY2hlY2tzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RjYXBzLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBEb24ndCBsZWFrIGNhcHMgaW4gdW5pdCB0ZXN0OyBhZGQgYSBmZXcgbW9yZSBzaW1wbGUKKwkgIGNoZWNrcy4KKworMjAwNi0wOC0yNCAxMDo0MDozMSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBpbXBsZW1lbnQgY2FwcyBtZXJnaW5nIChmaXhlcyAjMzUyNTgwKQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3RjYXBzLmM6IChnc3RfY2Fwc19zdHJ1Y3R1cmVfaXNfc3Vic2V0X2ZpZWxkKSwKKwkgIChnc3RfY2Fwc19zdHJ1Y3R1cmVfaXNfc3Vic2V0KSwgKGdzdF9jYXBzX21lcmdlKSwKKwkgIChnc3RfY2Fwc19tZXJnZV9zdHJ1Y3R1cmUpOgorCSAgKiBnc3QvZ3N0Y2Fwcy5oOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fdHJhbnNmb3JtX2NhcHMpOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X2NhcHNfc3VpdGUpOgorCSAgaW1wbGVtZW50IGNhcHMgbWVyZ2luZyAoZml4ZXMgIzM1MjU4MCkKKworMjAwNi0wOC0yMyAxODo1Mzo0NCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICB0b29scy86IGFkZCBkZWJ1Zy1sb2cgcGxvdHRpbmcgZGV2ZWxvcGVyIHRvb2wgKCMzNDA2NzQpCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdG9vbHMvTWFrZWZpbGUuYW06CisJICAqIHRvb2xzL2dzdC1wbG90LXRpbWVsaW5lLnB5OgorCSAgYWRkIGRlYnVnLWxvZyBwbG90dGluZyBkZXZlbG9wZXIgdG9vbCAoIzM0MDY3NCkKKworMjAwNi0wOC0yMyAxNjo1MToxOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHBhZC5jOiBJbXByb3ZlIGRlYnVnZ2luZyBmb3IgdGFzayBmdW5jdGlvbnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9zdGFydF90YXNrKSwgKGdzdF9wYWRfcGF1c2VfdGFzayksCisJICAoZ3N0X3BhZF9zdG9wX3Rhc2spOgorCSAgSW1wcm92ZSBkZWJ1Z2dpbmcgZm9yIHRhc2sgZnVuY3Rpb25zLgorCSAgKiBnc3QvZ3N0dGFzay5jOiAoZ3N0X3Rhc2tfZnVuYyksIChnc3RfdGFza19zZXRfbG9jayksCisJICAoZ3N0X3Rhc2tfc3RhcnQpLCAoZ3N0X3Rhc2tfcGF1c2UpLCAoZ3N0X3Rhc2tfam9pbik6CisJICBNYWtlIHN1cmUgdGhhdCB0aGUgdGFzayBmdW5jdGlvbiBzdGFydGVkIGFuZCBmaW5pc2hlZCBhZnRlciBhCisJICBqb2luKCkuCisJICBEb24ndCB0cnkgdG8gcHVzaCB0aGUgdGFzayBmdW5jdGlvbiBvbiB0aGUgdGhyZWFkcG9vbCBtdWx0aXBsZQorCSAgdGltZXMuCisJICBJbXByb3ZlIHRoZSBnX3dhcm5pbmcgbWVzc2FnZSB3aXRoIHNvbWUgdXNlZnVsIHN1Z2dlc3Rpb25zCisJICBhYm91dCBob3cgdG8gZml4IHRoZSBwcm9ibGVtLgorCisyMDA2LTA4LTIzIDEwOjU5OjQ3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0dXRpbHMuYzogSGFuZGxlIFJFU1lOQyBjb3JyZWN0bHkgaW4gX3Byb3h5X2dldGNhcHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfcGFkX3Byb3h5X2dldGNhcHMpOgorCSAgSGFuZGxlIFJFU1lOQyBjb3JyZWN0bHkgaW4gX3Byb3h5X2dldGNhcHMuCisKKzIwMDYtMDgtMjMgMDk6NDc6MzIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBnc3QvZ3N0YnVmZmVyLmg6CisJICB3b3JkIHJlZmNvdW50aW5nIG1vcmUgcHJlY2lzZWx5IGZvciBnc3RfdmFsdWVfKl9idWZmZXIKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgd29yZCByZWZjb3VudGluZyBtb3JlIHByZWNpc2VseSBmb3IgZ3N0X3ZhbHVlXypfYnVmZmVyCisKKzIwMDYtMDgtMjEgMTU6MTk6NDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3R4bWwuYzogQ2hhaW4gdXAgdG8gcGFyZW50IGNsYXNzIGluIGRpc3Bvc2UgZnVuY3Rpb24gYW5kIGFsc28gdW5yZWYgdGhlIGVsZW1lbnRzIGluIHRoZSB0b3BsZXZlbF9lbGVtZW50cyBHTGlzdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0eG1sLmM6IChnc3RfeG1sX2Rpc3Bvc2UpLCAoZ3N0X3htbF9wYXJzZV9maWxlKSwKKwkgIChnc3RfeG1sX3BhcnNlX21lbW9yeSksIChnc3RfeG1sX2dldF9lbGVtZW50KToKKwkgIENoYWluIHVwIHRvIHBhcmVudCBjbGFzcyBpbiBkaXNwb3NlIGZ1bmN0aW9uIGFuZCBhbHNvCisJICB1bnJlZiB0aGUgZWxlbWVudHMgaW4gdGhlIHRvcGxldmVsX2VsZW1lbnRzIEdMaXN0LgorCSAgRG9uJ3QgbGVhayBYbWxEb2NQdHIgaW4gX3BhcnNlX2ZpbGUoKSBhbmQgX3BhcnNlX21lbW9yeSgpLgorCSAgQWx3YXlzIHJldHVybiBhIHJlZmVyZW5jZSBpbiBnc3RfeG1sX2dldF9lbGVtZW50KCkgcmF0aGVyCisJICB0aGFuIG9ubHkgc29tZXRpbWVzLgorCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6ICh4bWxsYXVuY2hfcGFyc2VfY21kbGluZSk6CisJICBEb24ndCBsZWFrIEdzdFhtbCBvYmplY3QuCisKKzIwMDYtMDgtMjEgMTQ6NTQ6MzEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgQVBJOiBBZGQgZ3N0X2NhcHNfbWVyZ2UoKSBhbmQgdXNlIGl0IGluIGJhc2V0cmFuc2Zvcm0sIGZpeGVzICMzNDU0NDQgaW4gYSBiZXR0ZXIgd2F5CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdGNhcHMuYzogKGdzdF9zdHJ1Y3R1cmVfaXNfZXF1YWxfZm9yZWFjaCksCisJICAoZ3N0X2NhcHNfbWVyZ2UpOgorCSAgKiBnc3QvZ3N0Y2Fwcy5oOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fdHJhbnNmb3JtX2NhcHMpOgorCSAgQVBJOiBBZGQgZ3N0X2NhcHNfbWVyZ2UoKSBhbmQgdXNlIGl0IGluIGJhc2V0cmFuc2Zvcm0sIGZpeGVzICMzNDU0NDQKKwkgIGluIGEgYmV0dGVyIHdheQorCisyMDA2LTA4LTIxIDE0OjAzOjMzICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBnc3QvZ3N0eG1sLmM6IEltcGxlbWVudCBHT2JqZWN0OjpkaXNwb3NlIHZpcnR1YWwgbWV0aG9kIGluIEdzdFhNTCBzbyB3ZSBjYW4gZnJlZSB0aGUgdG9wX2VsZW1lbnRzIEdMaXN0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R4bWwuYzogKGdzdF94bWxfY2xhc3NfaW5pdCksIChnc3RfeG1sX2Rpc3Bvc2UpOgorCSAgSW1wbGVtZW50IEdPYmplY3Q6OmRpc3Bvc2UgdmlydHVhbCBtZXRob2QgaW4gR3N0WE1MIHNvIHdlIGNhbiBmcmVlIHRoZQorCSAgdG9wX2VsZW1lbnRzIEdMaXN0LgorCisyMDA2LTA4LTIxIDA5OjMwOjA0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YnVmZmVyLmM6IENvcHkgZHVyYXRpb24vb2Zmc2V0X2VuZC9jYXBzIHdoZW4gY3JlYXRpbmcgYSBzdWJidWZmZXIgb2YgdGhlIGNvbXBsZXRlIHBhcmVudC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YnVmZmVyLmM6IChnc3RfYnVmZmVyX21ha2VfbWV0YWRhdGFfd3JpdGFibGUpLAorCSAgKGdzdF9idWZmZXJfY3JlYXRlX3N1Yik6CisJICBDb3B5IGR1cmF0aW9uL29mZnNldF9lbmQvY2FwcyB3aGVuIGNyZWF0aW5nIGEgc3ViYnVmZmVyIG9mIHRoZQorCSAgY29tcGxldGUgcGFyZW50LgorCSAgTWFrZSB0aGUgc3ViYnVmZmVyIHJlYWQtb25seSB3aGVuIHdlIG1ha2UgdGhlIG1ldGFkYXRhIHdyaXRhYmxlIGZvcgorCSAgbm93LiBGaXhlcyAjMzUxNzY4LgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBBZGRlZCBjaGVjayBmb3IgbWV0YWRhdGEgY29weSB3aGVuIGNyZWF0aW5nIHN1YmJ1ZmZlcnMuCisKKzIwMDYtMDgtMjEgMDk6MjA6NDIgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBPbmx5IGNhbGwgZG93bnN0cmVhbSBidWZmZXJfYWxsb2MgaWYgdHJhbnNmb3JtIGVsZW1lbnQgaXMgcGFzc3Rocm91Z2ggb3IgYWx3YXlzX2luXy4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9idWZmZXJfYWxsb2MpOgorCSAgT25seSBjYWxsIGRvd25zdHJlYW0gYnVmZmVyX2FsbG9jIGlmIHRyYW5zZm9ybSBlbGVtZW50IGlzIHBhc3N0aHJvdWdoCisJICBvciBhbHdheXNfaW5fcGxhY2UuIENsb3NlcyAjMzUwNDQ5LgorCisyMDA2LTA4LTIwIDE5OjM2OjIxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIENoYW5nZUxvZzogQ2hhbmdlTG9nIHN1cmdlcnkgdG8gYWRkIGNvbW1lbnRzIHRvIHByZXZpb3VzIGNoYW5nZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBDaGFuZ2VMb2c6CisJICBDaGFuZ2VMb2cgc3VyZ2VyeSB0byBhZGQgY29tbWVudHMgdG8gcHJldmlvdXMgY2hhbmdlcworCisyMDA2LTA4LTIwIDE5OjMwOjA5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIFNpbXBsaWZ5IGNhcHMgdG8gZ2V0IHJpZCBvZiBkdXBsaWNhdGVzLCBmaXhlcyAjMzQ1NDQ0CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdC5jOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3NldF9hY3RpdmUpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fdHJhbnNmb3JtX2NhcHMpOgorCSAgU2ltcGxpZnkgY2FwcyB0byBnZXQgcmlkIG9mIGR1cGxpY2F0ZXMsIGZpeGVzICMzNDU0NDQKKworMjAwNi0wOC0yMCAxNTo1NToxMiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0dmFsdWUuKjogVXNlIHRoZXNlIG9wdGltaXphdGlvbnMgb25seSBpbnRlcm5hbHkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHZhbHVlLmM6CisJICAqIGdzdC9nc3R2YWx1ZS5oOgorCSAgVXNlIHRoZXNlIG9wdGltaXphdGlvbnMgb25seSBpbnRlcm5hbHkuCisKKzIwMDYtMDgtMjAgMTQ6MzA6MjAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdHZhbHVlLio6IFNhdmVzIHRoZSBleHBlbnNpdmUgbG9va3VwIG9mIHRoZSBjb21wYXJlIGZ1bmN0aW9uIGluIG1hbnkgY2FzZXMgKCMzNDU0NDQpCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfY29tcGFyZV9saXN0KSwKKwkgIChnc3RfdmFsdWVfY29tcGFyZV9mcmFjdGlvbl9yYW5nZSksCisJICAoZ3N0X3ZhbHVlX2ludGVyc2VjdF9mcmFjdGlvbl9mcmFjdGlvbl9yYW5nZSksCisJICAoZ3N0X3ZhbHVlX2ludGVyc2VjdF9mcmFjdGlvbl9yYW5nZV9mcmFjdGlvbl9yYW5nZSksCisJICAoZ3N0X3ZhbHVlX3N1YnRyYWN0X2ZyYWN0aW9uX2ZyYWN0aW9uX3JhbmdlKSwKKwkgIChnc3RfdmFsdWVfc3VidHJhY3RfZnJhY3Rpb25fcmFuZ2VfZnJhY3Rpb25fcmFuZ2UpLAorCSAgKGdzdF92YWx1ZV9nZXRfY29tcGFyZV9mdW5jKSwgKGdzdF92YWx1ZV9jb21wYXJlKSwKKwkgIChnc3RfdmFsdWVfY29tcGFyZV93aXRoX2Z1bmMpOgorCSAgKiBnc3QvZ3N0dmFsdWUuaDoKKwkgIFNhdmVzIHRoZSBleHBlbnNpdmUgbG9va3VwIG9mIHRoZSBjb21wYXJlIGZ1bmN0aW9uIGluIG1hbnkgY2FzZXMKKwkgICgjMzQ1NDQ0KQorCisyMDA2LTA4LTE4IDEzOjQxOjAyICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICB0ZXN0cy9jaGVjay9nc3QvZ3N0aW5mby5jOiBEaXNhYmxlIHRlc3QgdGhhdCByZXF1aXJlIGdzdGRlYnVnIGlmIGl0IHdhc24ndCBidWlsdCBpbiBjb3JlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RpbmZvLmM6IChnc3RfaW5mb19zdWl0ZSk6CisJICBEaXNhYmxlIHRlc3QgdGhhdCByZXF1aXJlIGdzdGRlYnVnIGlmIGl0IHdhc24ndCBidWlsdCBpbiBjb3JlLgorCisyMDA2LTA4LTE4IDEwOjUyOjMzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvcmFuZG9tL2Vuc29uaWMvbG9nZ2luZy50eHQ6IHVwZGF0ZSBpZGVhcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcmFuZG9tL2Vuc29uaWMvbG9nZ2luZy50eHQ6CisJICB1cGRhdGUgaWRlYXMKKwkgICogZ3N0L2dzdGluZm8uYzogKGdzdF9kZWJ1Z19sb2dfZGVmYXVsdCk6CisJICByZW9yZGVyIGZpZWxkcywgc2F2ZSBzb21lIGNvbHVtbnMsIGFkZCBvcHRpbmFsIGNvbG9yIGNvZGVzIGZvciBsb2ctCisJICBsZXZlbHMKKworMjAwNi0wOC0xOCAwODowNzoxMiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBkb2NzL3JhbmRvbS9lbnNvbmljL2xvZ2dpbmcudHh0OiBhZGQgaWRlYXMgYWJvdXQgbWFraW5nIHRoZSBsb2dzIGFiaXQgbW9yZSB1c2VmdWwKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL3JhbmRvbS9lbnNvbmljL2xvZ2dpbmcudHh0OgorCSAgYWRkIGlkZWFzIGFib3V0IG1ha2luZyB0aGUgbG9ncyBhYml0IG1vcmUgdXNlZnVsCisKKzIwMDYtMDgtMTcgMTg6MTE6MTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGRvY3MvcHdnLzogVXBkYXRlIGZvciAwLjEwIEFQSSAoIzM0MDYyNykuIEFkZCBteXNlbGYgdG8gYXV0aG9ycyBsaXN0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcHdnL2FkdmFuY2VkLWV2ZW50cy54bWw6CisJICAqIGRvY3MvcHdnL3RpdGxlcGFnZS54bWw6CisJICBVcGRhdGUgZm9yIDAuMTAgQVBJICgjMzQwNjI3KS4gQWRkIG15c2VsZgorCSAgdG8gYXV0aG9ycyBsaXN0LgorCisyMDA2LTA4LTE3IDEwOjQ2OjE5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBNYWtlIGdzdGNoZWNrIHN0dWZmIHNob3cgdXAgaW4gZG9jcyAoc3RpbGwgbmVlZHMgdG8gYmUgZG9jdW1lbnRlZCBwcm9wZXJseSB0aG91Z2gpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1kb2NzLnNnbWw6CisJICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGJ1ZmZlcnN0cmF3LmM6CisJICBNYWtlIGdzdGNoZWNrIHN0dWZmIHNob3cgdXAgaW4gZG9jcyAoc3RpbGwgbmVlZHMgdG8KKwkgIGJlIGRvY3VtZW50ZWQgcHJvcGVybHkgdGhvdWdoKS4KKworMjAwNi0wOC0xNiAxMTo0Nzo1NCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIEFkZCBpbnRlcm5hbCBoZWxwZXJzIGZvciBwcmUtcmVnaXN0ZXJpbmcgcXVhcmtzIGZyb20gc3RhdGljIHN0cmluZ3MgYW5kIHVzaW5nIHRoZSBxdWFyayB2YWx1ZXMgZGlyZWN0bHkgaW5zdGVhZCBvZiBsby4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9NYWtlZmlsZS5hbToKKwkgICogZ3N0L2dzdC5jOiAoaW5pdF9wb3N0KToKKwkgICogZ3N0L2dzdF9wcml2YXRlLmg6CisJICAqIGdzdC9nc3RxdWFyay5jOiAoX3ByaXZfZ3N0X3F1YXJrc19pbml0aWFsaXplKToKKwkgICogZ3N0L2dzdHF1YXJrLmg6CisJICAqIGdzdC9nc3RxdWVyeS5jOiAoZ3N0X3F1ZXJ5X25ld19wb3NpdGlvbiksCisJICAoZ3N0X3F1ZXJ5X3NldF9wb3NpdGlvbiksIChnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24pLAorCSAgKGdzdF9xdWVyeV9uZXdfZHVyYXRpb24pLCAoZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbiksCisJICAoZ3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uKSwgKGdzdF9xdWVyeV9uZXdfY29udmVydCksCisJICAoZ3N0X3F1ZXJ5X3NldF9jb252ZXJ0KSwgKGdzdF9xdWVyeV9wYXJzZV9jb252ZXJ0KSwKKwkgIChnc3RfcXVlcnlfbmV3X3NlZ21lbnQpLCAoZ3N0X3F1ZXJ5X3NldF9zZWdtZW50KSwKKwkgIChnc3RfcXVlcnlfcGFyc2Vfc2VnbWVudCksIChnc3RfcXVlcnlfbmV3X3NlZWtpbmcpLAorCSAgKGdzdF9xdWVyeV9zZXRfc2Vla2luZyksIChnc3RfcXVlcnlfcGFyc2Vfc2Vla2luZyk6CisJICBBZGQgaW50ZXJuYWwgaGVscGVycyBmb3IgcHJlLXJlZ2lzdGVyaW5nIHF1YXJrcyBmcm9tIHN0YXRpYyBzdHJpbmdzCisJICBhbmQgdXNpbmcgdGhlIHF1YXJrIHZhbHVlcyBkaXJlY3RseSBpbnN0ZWFkIG9mIGxvb2tpbmcgdGhlbSB1cCB3aGVuCisJICBjcmVhdGluZyBhbmQgcGFyc2luZyBxdWVyaWVzLiBDYW4gYmUgdXNlZCBmb3IgZXZlbnQgY29uc3RydWN0aW9uIHRvby4KKwkgIENsb3NlcyAjMzUwNDMyLgorCisyMDA2LTA4LTE2IDA4OjU0OjU2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YmluLmM6IEZpeCBib2d1cyBkb2NzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RiaW4uYzoKKwkgIEZpeCBib2d1cyBkb2NzLgorCisyMDA2LTA4LTE1IDE4OjQ1OjM5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0dXRpbHMuYzogRml4IG1lbWxlYWsgKCMzNTE1MDIpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nKToKKwkgIEZpeCBtZW1sZWFrICgjMzUxNTAyKS4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RfdXRpbHNfc3VpdGUpOgorCSAgQWRkIHVuaXQgdGVzdCBmb3IgbW9zdCBvZiBnc3RfdXRpbF9zZXRfdmFsdWVfZnJvbV9zdHJpbmcoKQorCSAgKG5vdCB0aGF0IG9uZSB3b3VsZCB3YW50IHRvIGVuY291cmFnZSB1c2Ugb2YgdGhpcyBmdW5jdGlvbikuCisKKzIwMDYtMDgtMTUgMTg6Mjk6MjIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6IFVzZSBjb25zdCBnY2hhciAqIHZhcmlhYmxlcyBpbiBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIG1hY3JvIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6CisJICBVc2UgY29uc3QgZ2NoYXIgKiB2YXJpYWJsZXMgaW4gZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZworCSAgbWFjcm8gdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZ3MgKGFuZCBkb24ndCB1c2UgdGFicyBmb3IKKwkgIGluZGVudGluZykuCisKKzIwMDYtMDgtMTUgMTA6MDg6MzQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHRvb2xzL2dzdC1sYXVuY2guYzogTW9yZSBzcGFjZSBvbiB0aGUgbGVmdCBmb3IgdGhlIHRhZyBuYW1lcywgdG8gY2F0ZXIgZm9yIHRoZSAnZXh0ZW5kZWQgY29tbWVudCcgdGFnIChub3QgdG91Y2hpbmcgdC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKHByaW50X3RhZyk6CisJICBNb3JlIHNwYWNlIG9uIHRoZSBsZWZ0IGZvciB0aGUgdGFnIG5hbWVzLCB0byBjYXRlcgorCSAgZm9yIHRoZSAnZXh0ZW5kZWQgY29tbWVudCcgdGFnIChub3QgdG91Y2hpbmcgdGhlCisJICBzdHJpbmcgZm9yIHRoZSBmaXJzdCBsaW5lIHNpbmNlIGl0J3MgdHJhbnNsYXRlZCkuCisKKzIwMDYtMDgtMTUgMDk6NDQ6NTggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkqIENoYW5nZUxvZzoKKwkgIENoYW5nZUxvZyBzdXJnZXJ5OiBkb24ndCBmb3JnZXQgdG8gbWVudGlvbiB0aGUgb3RoZXIgY2hhbmdlIGluIHRoZSBDaGFuZ2VMb2cKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgQ2hhbmdlTG9nIHN1cmdlcnk6IGRvbid0IGZvcmdldCB0byBtZW50aW9uIHRoZSBvdGhlciBjaGFuZ2UgaW4gdGhlIENoYW5nZUxvZworCisyMDA2LTA4LTE1IDA5OjMzOjI0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOiBGaXggQVNTRVJUX0NSSVRJQ0FMIGFuZCBBU1NFUlRfV0FSTklORyBtYWNyb3MgdG8gYWN0dWFsbHkgcHJpbnQgc29tZXRoaW5nIHdoZW4gdGhleSBmYWlsLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6CisJICBGaXggQVNTRVJUX0NSSVRJQ0FMIGFuZCBBU1NFUlRfV0FSTklORyBtYWNyb3MgdG8gYWN0dWFsbHkKKwkgIHByaW50IHNvbWV0aGluZyB3aGVuIHRoZXkgZmFpbC4KKworMjAwNi0wOC0xNCAxOTowNDo1NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgQVBJOiBhZGQgR1NUX1RBR19FWFRFTkRFRF9DT01NRU5UICgjMzUwOTM1KS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBnc3QvZ3N0dGFnbGlzdC5jOiAoX2dzdF90YWdfaW5pdGlhbGl6ZSk6CisJICAqIGdzdC9nc3R0YWdsaXN0Lmg6CisJICBBUEk6IGFkZCBHU1RfVEFHX0VYVEVOREVEX0NPTU1FTlQgKCMzNTA5MzUpLgorCisyMDA2LTA4LTE0IDE3OjI5OjMxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0aW5mby5jOiBNYWtlIEdTVF9QVFJfRk9STUFUIHByaW50IG1lc3NhZ2VzIGFzIHdlbGwuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGluZm8uYzogKGdzdF9kZWJ1Z19wcmludF9vYmplY3QpOgorCSAgTWFrZSBHU1RfUFRSX0ZPUk1BVCBwcmludCBtZXNzYWdlcyBhcyB3ZWxsLgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0aW5mby5jOiAocHJpbnRmX2V4dGVuc2lvbl9sb2dfZnVuYyksCisJICAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X2luZm9fc3VpdGUpOgorCSAgTW9yZSB0ZXN0cy4KKworMjAwNi0wOC0xNCAxNTozMzoxNyArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6IElmIHRoZSBHc3RFbGVtZW50Q2xhc3MgZG9lc24ndCBoYXZlIGEgR3N0RWxlbWVudERldGFpbHMgd2l0aCBhbGwgZmllbGRzIHRoZW4gZXJyb3Igb3V0IG5pY2VsLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6IChnc3RfZWxlbWVudF9yZWdpc3Rlcik6CisJICBJZiB0aGUgR3N0RWxlbWVudENsYXNzIGRvZXNuJ3QgaGF2ZSBhIEdzdEVsZW1lbnREZXRhaWxzIHdpdGggYWxsIGZpZWxkcworCSAgZmlsbGVkIHVwIGNvcnJlY3RseSAobG9uZ25hbWUsIGRlc2NyaXB0aW9uIEFORCBhdXRob3IpLCB0aGVuIGVycm9yIG91dAorCSAgbmljZWx5IGluc3RlYWQgb2YgY3Jhc2hpbmcuCisKKzIwMDYtMDgtMTQgMTI6MzU6MDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RzdHJ1Y3R1cmUuYzogRml4IHR5cG8gaW4gZG9jcyBhbmQgcmUtd3JhcCBkb2NzIGJsdXJiIHRvIG5vdCBleGNlZWQgODAgY2hhcnMvbGluZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJICBGaXggdHlwbyBpbiBkb2NzIGFuZCByZS13cmFwIGRvY3MgYmx1cmIgdG8gbm90IGV4Y2VlZCA4MCBjaGFycy9saW5lLgorCSAgKiBnc3QvZ3N0dmFsdWUuaDoKKwkgIEV4cGFuZCBvbiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFycmF5cyBhbmQgbGlzdHMgYXMgd2UgdXNlIHRoZW0uCisKKzIwMDYtMDgtMTQgMDc6NDQ6MTQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBJZiB0aGUgcGFyZW50IHN0YXRlIGNoYW5nZSBmdW5jdGlvbiBmYWlsZWQsIGRvbid0IGFzc3VtZSB3ZSBjYW4gc2FmZWx5IHN0b3AgdGhlIHNvdXJjZSwgdC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2NoYW5nZV9zdGF0ZSk6CisJICBJZiB0aGUgcGFyZW50IHN0YXRlIGNoYW5nZSBmdW5jdGlvbiBmYWlsZWQsIGRvbid0IGFzc3VtZSB3ZSBjYW4gc2FmZWx5CisJICBzdG9wIHRoZSBzb3VyY2UsIHRoaXMgd2lsbCBiZSBkb25lIHdoZW4gdGhlIHBhZHMgYXJlIGRlYWN0aXZhdGVkLgorCisyMDA2LTA4LTE0IDA3OjM1OjA5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvOiBTbWFsbCBkb2MgdXBkYXRlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YnVmZmVyLmM6CisJICAqIGdzdC9nc3R0YXNrLmM6IChnc3RfdGFza19qb2luKToKKwkgIFNtYWxsIGRvYyB1cGRhdGVzLgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2FjdGl2YXRlX3B1bGwpLCAoZ3N0X3BhZF9hY3RpdmF0ZV9wdXNoKSwKKwkgIChnc3RfcGFkX3N0b3BfdGFzayk6CisJICBXaGVuIHBhZCAoZGUpYWN0aXZhdGlvbiBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLCByZXN0b3JlIHRoZSBvbGQKKwkgIGFjdGl2YXRpb24gbW9kZSBhbmQgc2V0IHRoZSBwYWQgdG8gZmx1c2hpbmcgaW5zdGVhZCBvZiBhc3N1bWluZyB0aGUKKwkgIHBhZCBpcyBkZWFjdGl2YXRlZC4KKwkgIElmIHRoZSBfdGFza19qb2luKCkgZmFpbGVkLCByZWluc3RhbGwgdGhlIHRhc2sgb24gdGhlIHBhZCBzbyB0aGF0IGl0IGNhbgorCSAgYmUgc3RvcHBlZCBsYXRlciBhbmQgcmV0dXJuIGFuIGVycm9yLgorCisyMDA2LTA4LTExIDE1OjI2OjMzICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIEdTVF9ESVNBQkxFX0RFUFJFQ0FURUQgaXMgb25seSBmb3IgdXNlcnMgb2YgQVBJIHRoYXQgZG9uJ3Qgd2FudCB0byBzZWUgZGVwcmVjYXRlZCBmdW5jdGlvbnMgaW4gdGhlIGhlYWRlcnM7IHBlb3BsZSB0aC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA2LTA4LTExICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBjb25maWd1cmUuYWM6CisJICAqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzogKGdzdF9kcF9wYWNrZXRpemVyX25ldyk6CisJICAqIHRlc3RzL2NoZWNrL2xpYnMvZ2RwLmM6IChnc3RfZHBfc3VpdGUpOiBHU1RfRElTQUJMRV9ERVBSRUNBVEVECisJICBpcyBvbmx5IGZvciB1c2VycyBvZiBBUEkgdGhhdCBkb24ndCB3YW50IHRvIHNlZSBkZXByZWNhdGVkCisJICBmdW5jdGlvbnMgaW4gdGhlIGhlYWRlcnM7IHBlb3BsZSB0aGF0IHdhbnQgdG8gY29tcGlsZSBvdXQKKwkgIGRlcHJlY2F0ZWQgY29kZSBzaG91bGQgcGFzcyAtREdTVF9SRU1PVkVfREVQUkVDQVRFRCBpbnRvIHRoZQorCSAgQ0ZMQUdTLiBGaXhlcyB0aGUgYnVpbGQgb2YgbXVsdGlmZHNpbmssIG9yIHdpbGwgc29vbi4uCisKKzIwMDYtMDgtMTEgMTU6MjQ6MDMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IEFkZCBHc3RDbG9ja0NsYXNzIHZtZXRob2QgZG9jcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgQWRkIEdzdENsb2NrQ2xhc3Mgdm1ldGhvZCBkb2NzLgorCSAgKiBnc3QvZ3N0Y2Fwcy5oOgorCSAgTWFyayAjZW5kaWYgd2l0aCBjb21tZW50IGZvciBhc3NvY2lhdGVkICNpZgorCSAgKiBnc3QvZ3N0Y2xvY2suYzogKGdzdF9jbG9ja19pZF93YWl0KToKKwkgICogZ3N0L2dzdGNsb2NrLmg6CisJICBBZGQgdm1ldGhvZCB3YWl0X2ppdHRlciB0byBhdm9pZCBhbiB1bm5lZWRlZCBfZ2V0X3RpbWUoKSBmb3IKKwkgIG1vc3QgY2xvY2sgaW1wbGVtZW50YXRpb25zLgorCSAgRG9jdW1lbnQgdm1ldGhvZHMuCisJICBGbGVzaCBvdXQgZG9jcyBhYm91dCByZXNvbHV0aW9uIG1ldGhvZHMuCisJICBBUEk6IEdzdENsb2NrQ2xhc3M6OndhaXRfaml0dGVyCisJICAqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOiAoZ3N0X3N5c3RlbV9jbG9ja19jbGFzc19pbml0KSwKKwkgIChnc3Rfc3lzdGVtX2Nsb2NrX2FzeW5jX3RocmVhZCksCisJICAoZ3N0X3N5c3RlbV9jbG9ja19pZF93YWl0X2ppdHRlcl91bmxvY2tlZCksCisJICAoZ3N0X3N5c3RlbV9jbG9ja19pZF93YWl0X2ppdHRlcik6CisJICBVc2UgYmFzZSBjbGFzcyB3YWl0X2ppdHRlciB2YXJpYW50IGZvciBpbXByb3ZlZCBwZXJmb3JtYW5jZQorCSAgZHVlIHRvIGxlc3MgY2xvY2sgcG9sbGluZy4KKworMjAwNi0wOC0xMSAxNTowNzo1OCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgZ3N0L2dzdC5jOiBTZXQgZ3N0IGFzIGJlaW5nIGluaXRpYWxpemVkIGJlZm9yZSBzY2FubmluZy91cGRhdGluZyB0aGUgcmVnaXN0cnksIHNpbmNlIHRoZXJlIG1pZ2h0IGJlIHNvbWUgcGx1Z2lucyB0aGF0Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdC5jOiAoZ3N0X2luaXRfY2hlY2spLCAoaW5pdF9wb3N0KToKKwkgIFNldCBnc3QgYXMgYmVpbmcgaW5pdGlhbGl6ZWQgYmVmb3JlIHNjYW5uaW5nL3VwZGF0aW5nIHRoZSByZWdpc3RyeSwKKwkgIHNpbmNlIHRoZXJlIG1pZ2h0IGJlIHNvbWUgcGx1Z2lucyB0aGF0IGNhbGwgZ3N0X2luaXQoKSBhbmQgd2UgZG9uJ3QKKwkgIHdhbnQgdG8gbG9vcCBiYWNrIGluLgorCSAgQ2xvc2VzICMzNTA4NzkKKworMjAwNi0wOC0xMSAxMzoxMzowNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSogQ2hhbmdlTG9nOgorCSAgTWVudGlvbiB0aGF0IHdlIGZpeGVkIGJ1ZyAjMzQ5OTQzIHdpdGggdGhlIGxhc3QgY29tbWl0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBNZW50aW9uIHRoYXQgd2UgZml4ZWQgYnVnICMzNDk5NDMgd2l0aCB0aGUgbGFzdCBjb21taXQuCisKKzIwMDYtMDgtMTEgMTM6MDU6MzAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZGVzaWduL3BhcnQtcW9zLnR4dDogQnJpbmcgZG9jcyBpbiBsaW5lIHdpdGggdGhlIGNvZGUuIE1vc3RseSB0aGUgc2lnbiBvZiB0aGUgaml0dGVyIHdhcyB3cm9uZyBpbiB0aGUgZG9jcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXFvcy50eHQ6CisJICBCcmluZyBkb2NzIGluIGxpbmUgd2l0aCB0aGUgY29kZS4gTW9zdGx5IHRoZSBzaWduIG9mIHRoZSBqaXR0ZXIgd2FzCisJICB3cm9uZyBpbiB0aGUgZG9jcy4KKwkgICogZ3N0L2dzdGNsb2NrLmM6CisJICBGaXggdGhlIGRvY3MgZm9yIHRoZSBqaXR0ZXIuCisJICAqIGdzdC9nc3RldmVudC5jOiAoZ3N0X2V2ZW50X25ld19jdXN0b20pLCAoZ3N0X2V2ZW50X25ld190YWcpLAorCSAgKGdzdF9ldmVudF9wYXJzZV90YWcpLCAoZ3N0X2V2ZW50X25ld19idWZmZXJfc2l6ZSksCisJICAoZ3N0X2V2ZW50X3BhcnNlX2J1ZmZlcl9zaXplKSwgKGdzdF9ldmVudF9wYXJzZV9xb3MpLAorCSAgKGdzdF9ldmVudF9uZXdfc2VlayksIChnc3RfZXZlbnRfcGFyc2Vfc2VlayksCisJICAoZ3N0X2V2ZW50X25ld19uYXZpZ2F0aW9uKToKKwkgIE1ha2Ugc3VyZSB0aGUgR3N0U3RydWN0dXJlIGhhcyBubyBwYXJlbnQgd2hlbiBjcmVhdGluZyBjdXN0b20KKwkgIGV2ZW50cy4KKwkgIEFkZCBzb21lIG1vcmUgYXJndW1lbnQgY2hlY2tpbmcgc28gdGhhdCB3ZSBhdm9pZCAwLjAgcmF0ZXMuCisJICBGbGVzaCBvdXQgdGhlIGRvY3MgZm9yIHRoZSBRb1MgZXZlbnQgc29tZSBtb3JlLgorCisyMDA2LTA4LTExIDEwOjIxOjM2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJKiBDaGFuZ2VMb2c6CisJICBGb3Jnb3QgdG8gbWVudGlvbiBmaXhlZCBidWcuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIEZvcmdvdCB0byBtZW50aW9uIGZpeGVkIGJ1Zy4KKworMjAwNi0wOC0xMSAxMDoxOTo1MSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgRG9jIHVwZGF0ZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdC5jOiAoZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCksIChnc3RfaW5pdF9jaGVjayksCisJICAoZW5zdXJlX2N1cnJlbnRfcmVnaXN0cnlfZm9ya2luZyksIChlbnN1cmVfY3VycmVudF9yZWdpc3RyeSksCisJICAocGFyc2Vfb25lX29wdGlvbiksIChwYXJzZV9nb3B0aW9uX2FyZyksIChnc3RfZGVpbml0KSwKKwkgIChnc3RfcmVnaXN0cnlfZm9ya19pc19lbmFibGVkKSwgKGdzdF9yZWdpc3RyeV9mb3JrX3NldF9lbmFibGVkKToKKwkgICogZ3N0L2dzdC5oOgorCSAgRG9jIHVwZGF0ZXMuCisJICBBZGRlZCBBUEkgYW5kIGNvbW1hbmQgbGluZSBvcHRpb24gdG8gZGlzYWJsZSByZWdpc3RyeSBmb3JraW5nIGluCisJICBhZGRpdGlvbiB0byB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUuCisJICBDb25zdGlmeSBzb21lIHN0YXRpYyBhcnJheXMuCisJICBBZGRlZCBzb21lIG1vcmUgZGVidWcuCisJICBEb24ndCBkZWluaXQgdHdpY2UuCisJICBBUEk6IGdzdF9yZWdpc3RyeV9mb3JrX2lzX2VuYWJsZWQoKQorCSAgQVBJOiBnc3RfcmVnaXN0cnlfZm9ya19zZXRfZW5hYmxlZCgpCisJICBBUEk6IC0tZ3N0LWRpc2FibGUtcmVnaXN0cnktZm9yayBjb21tYW5kIGxpbmUgb3B0aW9uCisKKzIwMDYtMDgtMTEgMDk6NTk6MjkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3QuYzogRml4IHR5cG8gaW4gZXJyb3IgbWVzc2FnZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0LmM6IChnc3RfaW5pdCk6CisJICBGaXggdHlwbyBpbiBlcnJvciBtZXNzYWdlLgorCisyMDA2LTA4LTEwIDIwOjA1OjMwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5oOiBmaXggQUJJIHNpemUtY29ycmVjdGlvbgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5oOgorCSAgZml4IEFCSSBzaXplLWNvcnJlY3Rpb24KKwkgICogdGVzdHMvY2hlY2svbGlicy9nZHAuYzogKGdzdF9kcF9zdWl0ZSk6CisJICBtYWtlIHRlc3RzIHRoYXQgdXNlIGRlcHJlY2F0ZWQgQVBJIGNvbmRpdGlvbmFsCisKKzIwMDYtMDgtMTAgMTk6NDY6MTQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgQVBJOiBhZGQgZ3N0X29iamVjdF97cyxnfWV0X2NvbnRyb2xfcmF0ZSgpLCBhZGQgcHJpdmF0ZSBkYXRhIHNlY3Rpb24sIGZpeCBkb2NzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6CisJICAoX2dzdF9jb250cm9sbGVyX2dldF9wcm9wZXJ0eSksIChfZ3N0X2NvbnRyb2xsZXJfc2V0X3Byb3BlcnR5KSwKKwkgIChfZ3N0X2NvbnRyb2xsZXJfaW5pdCksIChfZ3N0X2NvbnRyb2xsZXJfY2xhc3NfaW5pdCk6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5oOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGhlbHBlci5jOiAoZ3N0X29iamVjdF9nZXRfY29udHJvbF9yYXRlKSwKKwkgIChnc3Rfb2JqZWN0X3NldF9jb250cm9sX3JhdGUpOgorCSAgQVBJOiBhZGQgZ3N0X29iamVjdF97cyxnfWV0X2NvbnRyb2xfcmF0ZSgpLCBhZGQgcHJpdmF0ZSBkYXRhIHNlY3Rpb24sCisJICBmaXggZG9jcworCSAgKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6IChnc3RfZHBfcGFja2V0aXplcl9uZXcpOgorCSAgKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmg6CisJICBhZGQgZGVwcmVjYXRpb24gZ3VhcmRzIHRvIG1ha2UgZ3RrLWRvYyBoYXBweSBhbmQgYWxsb3cgZGlzYWJsaW5nIGNydWZ0CisKKzIwMDYtMDgtMDkgMTU6MjY6NTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHRlc3RzL2NoZWNrLzogTGV0J3MgZW5hYmxlIHRoZSBuZXcgdW5pdCB0ZXN0IGFzIHdlbGwuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICAqIHRlc3RzL2NoZWNrL2dzdC8uY3ZzaWdub3JlOgorCSAgTGV0J3MgZW5hYmxlIHRoZSBuZXcgdW5pdCB0ZXN0IGFzIHdlbGwuCisKKzIwMDYtMDgtMDkgMTU6MTM6MTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIEFQSTogYWRkIEdTVF9TRUdNRU5UX0ZPUk1BVCwgd2hpY2ggaXMgYSBwcmludGYgZXh0ZW5zaW9uIHdlIHJlZ2lzdGVyIHRoYXQgbGV0cyB1cyBlYXNpbHkgZHVtcCBHc3RTZWdtZW50cyBpbnRvIGRlYnVnIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdGNvbmZpZy5oLmluOgorCSAgKiBnc3QvZ3N0aW5mby5jOiAoX2dzdF9kZWJ1Z19pbml0KSwgKGdzdF9kZWJ1Z19wcmludF9zZWdtZW50KSwKKwkgIChfZ3N0X2luZm9fcHJpbnRmX2V4dGVuc2lvbl9wdHIpLAorCSAgKF9nc3RfaW5mb19wcmludGZfZXh0ZW5zaW9uX3NlZ21lbnQpOgorCSAgQVBJOiBhZGQgR1NUX1NFR01FTlRfRk9STUFULCB3aGljaCBpcyBhIHByaW50ZiBleHRlbnNpb24gd2UKKwkgIHJlZ2lzdGVyIHRoYXQgbGV0cyB1cyBlYXNpbHkgZHVtcCBHc3RTZWdtZW50cyBpbnRvIGRlYnVnCisJICBsb2dzICgjMzUwNDE5KS4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGluZm8uYzogKHNlZ21lbnRfcHJpbnRmX2V4dGVuc2lvbl9sb2dfZnVuYyksCisJICAoaW5mb19zZWdtZW50X2Zvcm1hdF9wcmludGZfZXh0ZW5zaW9uKSwgKGdzdF9pbmZvX3N1aXRlKToKKwkgIEFkZCBzaW1wbGUgdW5pdCB0ZXN0IHRoYXQgbG9ncyBhIGJ1bmNoIG9mIGRpZmZlcmVudCBzZWdtZW50cyAobm90CisJICB2YWxncmluZGVkIGF0IHRoZSBtb21lbnQgYmVjYXVzZSBvZiBsZWFrcyBpbiBnc3RfZGVidWdfYWRkX2xvZ19mdW5jdGlvbikuCisKKzIwMDYtMDgtMDkgMTE6MDE6MjAgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBFdmVuIGlmIHdlIGNhbid0IGZpZ3VyZSBvdXQgdGhlIHByb3BlciBmb3JtYXQgdG8gcmVxdWVzdCBkb3duc3RyZWFtLCBjYWxsIGJ1ZmZlcl9hbC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9idWZmZXJfYWxsb2MpOgorCSAgRXZlbiBpZiB3ZSBjYW4ndCBmaWd1cmUgb3V0IHRoZSBwcm9wZXIgZm9ybWF0IHRvIHJlcXVlc3QgZG93bnN0cmVhbSwKKwkgIGNhbGwgYnVmZmVyX2FsbG9jKCkgZG93bnN0cmVhbSB3aXRoIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIHdpdGhvdXQgc2V0dGluZworCSAgdGhlIGNhcHMgb24gdGhlIHNyY3BhZC4gVGhpcyB3aWxsIGZvcmNlIG5lZ290aWF0aW9uIGluIHRoZSBjaGFpbgorCSAgZnVuY3Rpb24uCisJICBDbG9zZXMgIzM1MDQ0OQorCisyMDA2LTA4LTA4IDE2OjI0OjU4ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBnc3QvZ3N0Z2hvc3RwYWQuYzogVW5saW5raW5nIGZyb20gYSBwYWQgd2l0aG91dCBhIHRhcmdldCBpcyBub3cgYSBwZXJmZWN0bHkgdmFsaWQgY2FzZSB3aGljaCBzaG91bGQgTk9UIHJhaXNlIGFuIGFzc2UuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzogKGdzdF9naG9zdF9wYWRfZG9fdW5saW5rKToKKwkgIFVubGlua2luZyBmcm9tIGEgcGFkIHdpdGhvdXQgYSB0YXJnZXQgaXMgbm93IGEgcGVyZmVjdGx5IHZhbGlkIGNhc2UKKwkgIHdoaWNoIHNob3VsZCBOT1QgcmFpc2UgYW4gYXNzZXJ0aW9uLgorCSAgVGhpcyBjYXNlIHdvdWxkIGhhcHBlbiBpZiBhIGxpbmtlZCBnaG9zdHBhZCBpdHMgdGFyZ2V0IHNldCB0byBOVUxMIGFmdGVyCisJICBpdCB3YXMgcHJldmlvdXNseSBsaW5rZWQuCisKKzIwMDYtMDgtMDggMDk6NTY6NDUgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkgIHRlc3RzL2NoZWNrL2xpYnMvZ2RwLmM6IEFsc28gY29tbWVudCBvdXQgdGhlIHRlc3QgKHNlZSBiZWxvdykuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svbGlicy9nZHAuYzoKKwkgIEFsc28gY29tbWVudCBvdXQgdGhlIHRlc3QgKHNlZSBiZWxvdykuCisKKzIwMDYtMDgtMDggMDk6MDc6MzQgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkgIHRlc3RzL2NoZWNrL2xpYnMvZ2RwLmM6IFVzZSB0aGUgYXJjaGl0ZWN0dXJlIGluZm9ybWF0aW9uIGZyb20gY29uZmlnLmggYW5kIG5vdCBnY2MgbWFjcm9zIGluIG9yZGVyIHRvIHByb3Blcmx5IGRpc2FibC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL2xpYnMvZ2RwLmM6IChnc3RfZHBfc3VpdGUpOgorCSAgVXNlIHRoZSBhcmNoaXRlY3R1cmUgaW5mb3JtYXRpb24gZnJvbSBjb25maWcuaCBhbmQgbm90IGdjYyBtYWNyb3MKKwkgIGluIG9yZGVyIHRvIHByb3Blcmx5IGRpc2FibGUgYSB0ZXN0IHRoYXQgZmFpbHMgb24gUFBDNjQuCisKKzIwMDYtMDgtMDQgMTU6MTU6MjQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RlbGVtZW50LmM6IERvbid0IGNyYXNoIHByaW50aW5nIHRoZSB3YXJuaW5nIGlmIHRoZSBwYWQgaGFzIG5vIHBhcmVudC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCk6CisJICBEb24ndCBjcmFzaCBwcmludGluZyB0aGUgd2FybmluZyBpZiB0aGUgcGFkIGhhcyBubyBwYXJlbnQuCisKKzIwMDYtMDgtMDIgMTU6MTk6MzAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzogTWFrZSBkZWJ1ZyBjYXRlZ29yeSBzdGF0aWMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6CisJICAoZ3N0X2RwX2hlYWRlcl9mcm9tX2J1ZmZlcl9hbnkpLCAoZ3N0X2RwX3BhY2tldF9mcm9tX2NhcHNfYW55KSwKKwkgIChnc3RfZHBfY3JjKSwgKGdzdF9kcF9oZWFkZXJfcGF5bG9hZF9sZW5ndGgpLAorCSAgKGdzdF9kcF9oZWFkZXJfcGF5bG9hZF90eXBlKSwgKGdzdF9kcF9wYWNrZXRfZnJvbV9ldmVudCksCisJICAoZ3N0X2RwX3BhY2tldF9mcm9tX2V2ZW50XzFfMCksIChnc3RfZHBfYnVmZmVyX2Zyb21faGVhZGVyKSwKKwkgIChnc3RfZHBfY2Fwc19mcm9tX3BhY2tldCksIChnc3RfZHBfZXZlbnRfZnJvbV9wYWNrZXRfMF8yKSwKKwkgIChnc3RfZHBfZXZlbnRfZnJvbV9wYWNrZXQpLCAoZ3N0X2RwX3ZhbGlkYXRlX2hlYWRlciksCisJICAoZ3N0X2RwX3ZhbGlkYXRlX3BheWxvYWQpOgorCSAgTWFrZSBkZWJ1ZyBjYXRlZ29yeSBzdGF0aWMKKwkgIENvbnN0aWZ5IHRoZSBjcmMgdGFibGUuCisJICBEbyBzb21lIG1vcmUgYXJnIGNoZWNraW5nIGluIHB1YmxpYyBmdW5jdGlvbnMuCisJICBGaXggc29tZSBkb2NzIGFuZCBkbyBzb21lIHNtYWxsIGNsZWFudXBzLgorCSAgKiB0ZXN0cy9jaGVjay9saWJzL2dkcC5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X2RwX3N1aXRlKToKKwkgIEFkZCBzb21lIG1vcmUgY2hlY2tzIHRvIHNlZSBpZiBHRFAgZGVhbHMgd2l0aCBib2d1cyBpbnB1dC4KKworMjAwNi0wNy0zMSAxNjozNDo0MSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHZhbHVlLmM6IEZpeCBHc3RWYWx1ZUxpc3QgY29tcGFyaXNvbiBjb2RlLiBGaXhlcyAjMzQ3MjkzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X3ZhbHVlX2NvbXBhcmVfbGlzdCk6CisJICBGaXggR3N0VmFsdWVMaXN0IGNvbXBhcmlzb24gY29kZS4gRml4ZXMgIzM0NzI5My4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBDaGVjayB0byB0ZXN0IEdzdFZhbHVlTGlzdCBjb21wYXJpc29uLgorCisyMDA2LTA3LTMxIDE1OjEyOjU5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogVXNlIE9CSkVDVF9MT0NLIGFuZCByZWZjb3VudGluZyB0byBnZXQgdGhlIHBhZCBjYXBzIGluIHRoZSBidWZmZXJfYWxsb2MgZnVuY3Rpb24gYmUuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fYnVmZmVyX2FsbG9jKToKKwkgIFVzZSBPQkpFQ1RfTE9DSyBhbmQgcmVmY291bnRpbmcgdG8gZ2V0IHRoZSBwYWQgY2FwcyBpbiB0aGUKKwkgIGJ1ZmZlcl9hbGxvYyBmdW5jdGlvbiBiZWNhdXNlIHRoZSBjYXBzIGNvdWxkIGNoYW5nZSB3aGlsZSB3ZSBhcmUKKwkgIGJ1c3kgd2l0aCB0aGVtLiBGaXhlcyAjMzQ5MTA1CisKKzIwMDYtMDctMzEgMTU6MTI6MDEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOiBSZW1vdmUgdW5uZWNlc3NhcnkgcmVmL3VucmVmIHBhaXIKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzogKGdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlKToKKwkgIFJlbW92ZSB1bm5lY2Vzc2FyeSByZWYvdW5yZWYgcGFpcgorCSAgKiBnc3QvcGFyc2UvZ3JhbW1hci55OgorCSAgTWFrZSBzdXJlIHRvIGZyZWUgdGhlIHBhcnNlIGJ1ZmZlciBvbiBhbGwgY29kZSBwYXRocy4KKwkgIE1vdmUgYSBnX2ZyZWUgdXAgdG8gdGhlIGVycm9yIGhhbmRsZXIgd2hlcmUgaXQncyBlYXNpZXIgdG8gc2VlLgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzogKHRlc3RfZXZlbnQpOgorCSAgRXh0ZW5kaW5nIHRpbWVvdXQgZm9yIGRvd25zdHJlYW0gdHJhdmVsbGluZyBldmVudHMgdG8gMTAgc2Vjb25kcyB0bworCSAgaG9wZWZ1bGx5IGF2b2lkIGludGVybWl0dGVudCBmYWlsdXJlIG9uIHRoZSBidWlsZGJvdHMuCisJICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9wYXJzZS1sYXVuY2guYzogKHJ1bl9kZWxheWVkX3Rlc3QpOgorCSAgRG9uJ3QgbWFudWFsbHkgc2V0IHRoZSBzdGF0ZSBvZiB0aGUgc3JjIGVsZW1lbnQgLSBpdCB3aWxsIGhhcHBlbiBhcyBhCisJICBuYXR1cmFsIGNvbnNlcXVlbmNlIG9mIHRoZSBwaXBlbGluZSBjaGFuZ2luZyBzdGF0ZSwgYW5kIHRoYXQgd2F5IGl0CisJICB3aWxsIGRvIGl0IGluIHRoZSByaWdodCBvcmRlciB0b28uCisKKzIwMDYtMDctMzEgMTU6MDc6MzAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzogUmVtb3ZlIHVubmVjZXNzYXJ5IHJlZi91bnJlZiBwYWlyCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6IChnc3RfZWxlbWVudF9mYWN0b3J5X2NyZWF0ZSk6CisJICBSZW1vdmUgdW5uZWNlc3NhcnkgcmVmL3VucmVmIHBhaXIKKwkgICogZ3N0L3BhcnNlL2dyYW1tYXIueToKKwkgIE1ha2Ugc3VyZSB0byBmcmVlIHRoZSBwYXJzZSBidWZmZXIgb24gYWxsIGNvZGUgcGF0aHMuCisJICBNb3ZlIGEgZ19mcmVlIHVwIHRvIHRoZSBlcnJvciBoYW5kbGVyIHdoZXJlIGl0J3MgZWFzaWVyIHRvIHNlZS4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmM6ICh0ZXN0X2V2ZW50KToKKwkgIEV4dGVuZGluZyB0aW1lb3V0IGZvciBkb3duc3RyZWFtIHRyYXZlbGxpbmcgZXZlbnRzIHRvIDEwIHNlY29uZHMgdG8KKwkgIGhvcGVmdWxseSBhdm9pZCBpbnRlcm1pdHRlbnQgZmFpbHVyZSBvbiB0aGUgYnVpbGRib3RzLgorCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvcGFyc2UtbGF1bmNoLmM6IChydW5fZGVsYXllZF90ZXN0KToKKwkgIERvbid0IG1hbnVhbGx5IHNldCB0aGUgc3RhdGUgb2YgdGhlIHNyYyBlbGVtZW50IC0gaXQgd2lsbCBoYXBwZW4gYXMgYQorCSAgbmF0dXJhbCBjb25zZXF1ZW5jZSBvZiB0aGUgcGlwZWxpbmUgY2hhbmdpbmcgc3RhdGUsIGFuZCB0aGF0IHdheSBpdAorCSAgd2lsbCBkbyBpdCBpbiB0aGUgcmlnaHQgb3JkZXIgdG9vLgorCisyMDA2LTA3LTMxIDE0OjIzOjI2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0dXRpbHMuYzogUHJvdGVjdCBfUEFEX0NBUFMgd2l0aCBPQkpFQ1RfTE9DSy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9wYWRfZ2V0X2ZpeGVkX2NhcHNfZnVuYyk6CisJICBQcm90ZWN0IF9QQURfQ0FQUyB3aXRoIE9CSkVDVF9MT0NLLgorCisyMDA2LTA3LTMxIDE0OjIxOjEwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0cGFkLmM6IFVzZSBfREVCVUdfT0JKRUNUIHdoZW4gaXQgbWFrZXMgc2Vuc2UuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9jbGFzc19pbml0KSwgKGdzdF9wYWRfZGlzcG9zZSksCisJICAoZ3N0X3BhZF9nZXRfcHJvcGVydHkpLCAoZ3N0X3BhZF9hY3RpdmF0ZV9wdWxsKSwKKwkgIChnc3RfcGFkX2FjdGl2YXRlX3B1c2gpLCAoZ3N0X3BhZF9zZXRfYmxvY2tlZF9hc3luYyksCisJICAoZ3N0X3BhZF9zZXRfYWN0aXZhdGVfZnVuY3Rpb24pLAorCSAgKGdzdF9wYWRfc2V0X2FjdGl2YXRlcHVsbF9mdW5jdGlvbiksCisJICAoZ3N0X3BhZF9zZXRfYWN0aXZhdGVwdXNoX2Z1bmN0aW9uKSwgKGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uKSwKKwkgIChnc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbiksCisJICAoZ3N0X3BhZF9zZXRfY2hlY2tnZXRyYW5nZV9mdW5jdGlvbiksIChnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiksCisJICAoZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24pLCAoZ3N0X3BhZF9zZXRfcXVlcnlfdHlwZV9mdW5jdGlvbiksCisJICAoZ3N0X3BhZF9zZXRfaW50ZXJuYWxfbGlua19mdW5jdGlvbiksIChnc3RfcGFkX3NldF9saW5rX2Z1bmN0aW9uKSwKKwkgIChnc3RfcGFkX3NldF91bmxpbmtfZnVuY3Rpb24pLCAoZ3N0X3BhZF9zZXRfZ2V0Y2Fwc19mdW5jdGlvbiksCisJICAoZ3N0X3BhZF9zZXRfYWNjZXB0Y2Fwc19mdW5jdGlvbiksCisJICAoZ3N0X3BhZF9zZXRfZml4YXRlY2Fwc19mdW5jdGlvbiksIChnc3RfcGFkX3NldF9zZXRjYXBzX2Z1bmN0aW9uKSwKKwkgIChnc3RfcGFkX3NldF9idWZmZXJhbGxvY19mdW5jdGlvbiksIChnc3RfcGFkX2xpbmtfY2hlY2tfaGllcmFyY2h5KSwKKwkgIChnc3RfcGFkX2dldF9jYXBzX3VubG9ja2VkKSwgKGdzdF9wYWRfZ2V0X2NhcHMpLAorCSAgKGdzdF9wYWRfcGVlcl9nZXRfY2FwcyksIChnc3RfcGFkX2FjY2VwdF9jYXBzKSwKKwkgIChnc3RfcGFkX3BlZXJfYWNjZXB0X2NhcHMpLCAoZ3N0X3BhZF9zZXRfY2FwcyksCisJICAoZ3N0X3BhZF9jb25maWd1cmVfc2luayksIChnc3RfcGFkX2NvbmZpZ3VyZV9zcmMpLAorCSAgKGdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwcyksIChnc3RfcGFkX2dldF9uZWdvdGlhdGVkX2NhcHMpLAorCSAgKGdzdF9wYWRfYnVmZmVyX2FsbG9jX3VuY2hlY2tlZCksIChnc3RfcGFkX2FsbG9jX2J1ZmZlcl9mdWxsKSwKKwkgIChnc3RfcGFkX3F1ZXJ5KSwgKGdzdF9wYWRfbG9hZF9hbmRfbGluayksIChoYW5kbGVfcGFkX2Jsb2NrKSwKKwkgIChnc3RfcGFkX2NoYWluX3VuY2hlY2tlZCksIChnc3RfcGFkX3B1c2gpLCAoZ3N0X3BhZF9nZXRfcmFuZ2UpLAorCSAgKGdzdF9wYWRfc2VuZF9ldmVudCk6CisJICBVc2UgX0RFQlVHX09CSkVDVCB3aGVuIGl0IG1ha2VzIHNlbnNlLgorCSAgUHJvdGVjdCBHU1RfUEFEX0NBUFMgd2l0aCB0aGUgT0JKRUNUX0xPQ0suCisJICBTbWFsbCBjbGVhbnVwcyBhbmQgY29kZSByZWZsb3dzLgorCSAgQXZvaWQgY2FwcyByZWZjb3VudGluZyBpbiBfYWNjZXB0X2NhcHMuCisJICBSZWZhY3RvciBhbGxvY19idWZmZXIgc28gdGhhdCB0aGUgY29kZSBwZXJmb3JtZWQgb24gdGhlIHBlZXIgaXMgaW4gYQorCSAgc2VwYXJhdGUgZnVuY3Rpb24uIEFsc28gaWYgdGhlIHBhZCBkb2VzIG5vdCBpbXBsZW1lbnQgYSBidWZmZXIgYWxsb2MKKwkgIGZ1bmN0aW9uLCB3ZSBzaG91bGQgc3RpbGwgY2hlY2sgaWYgdGhlIHBhZCBpcyBmbHVzaGluZyBiZWZvcmUgZmFsbGluZworCSAgYmFjayB0byB0aGUgZGVmYXVsdCBhbGxvY2F0b3IuCisKKzIwMDYtMDctMzAgMjI6MjA6NDIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICB0ZXN0cy9jaGVjay9waXBlbGluZXMvcGFyc2UtbGF1bmNoLmM6IE1ha2UgYWxsIHVzZXMgb2YgaWRlbnRpdHkgYW5kIGZha2VzaW5rIGhhdmUgc2lsZW50PXRydWUgdG8gYXZvaWQgc2VyaWFsaXNpbmcgZXYuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvcGFyc2UtbGF1bmNoLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBNYWtlIGFsbCB1c2VzIG9mIGlkZW50aXR5IGFuZCBmYWtlc2luayBoYXZlIHNpbGVudD10cnVlIHRvIGF2b2lkCisJICBzZXJpYWxpc2luZyBldmVyeSBwYXNzaW5nIGRhdGEgc3RydWN0dXJlLCB3aGljaCBpcyBicmVha2luZyB0ZXN0cworCSAgb24gRkM0IGZvciBzb21lIHVua25vd24gcmVhc29uLgorCisyMDA2LTA3LTMwIDE4OjU4OjI4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9wYXJzZS86IFJldmVydGVkIHByZXZpb3VzIHBhdGNoIGFzIGl0IHJlcXVpcmVkIHRvIGJ1bXAgdGhlIGZsZXggZGVwZW5kZW5jeSB0byAyLjUuMzEsIHdoZXJlIGZjNC81IHNlZW0gdG8gc2hpcCBvbi4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9wYXJzZS9NYWtlZmlsZS5hbToKKwkgICogZ3N0L3BhcnNlL2dyYW1tYXIueToKKwkgICogZ3N0L3BhcnNlL3BhcnNlLmw6CisJICBSZXZlcnRlZCBwcmV2aW91cyBwYXRjaCBhcyBpdCByZXF1aXJlZCB0byBidW1wIHRoZSBmbGV4IGRlcGVuZGVuY3kgdG8KKwkgIDIuNS4zMSwgd2hlcmUgZmM0LzUgc2VlbSB0byBzaGlwIG9ubHkgdGhlIGFuY2llbnQgMi41LjRhIDooCisKKzIwMDYtMDctMzAgMTg6MzI6NDkgKzAwMDAgIE1hcmMtQW5kcmUgTHVyZWF1IDxtYXJjYW5kcmUubHVyZWF1QGdtYWlsLmNvbT4KKworCSAgZ3N0L3BhcnNlLzogcHVzaCAmIHBvcCB0aGUgc3RhdGUgb2YgdGhlIGxleGVyIGZvciByZWVudHJhbnQgdXNlIGNhc2UKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IE1hcmMtQW5kcmUgTHVyZWF1IDxtYXJjYW5kcmUubHVyZWF1QGdtYWlsLmNvbT4KKwkgICogZ3N0L3BhcnNlL01ha2VmaWxlLmFtOgorCSAgKiBnc3QvcGFyc2UvZ3JhbW1hci55OgorCSAgKiBnc3QvcGFyc2UvcGFyc2UubDoKKwkgIHB1c2ggJiBwb3AgdGhlIHN0YXRlIG9mIHRoZSBsZXhlciBmb3IgcmVlbnRyYW50IHVzZSBjYXNlCisJICBGaXhlcyAjMzQ5MTgwCisKKzIwMDYtMDctMjkgMTM6NDU6MDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOiBOb3RlIGluIHRoZSBkb2NzIHRoYXQgdGhlIDo6bmV3c2VnbWVudCB2ZnVuYyBpcyBub3QgYWN0dWFsbHkgdXNlZCBieQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgorCSAgTm90ZSBpbiB0aGUgZG9jcyB0aGF0IHRoZSA6Om5ld3NlZ21lbnQgdmZ1bmMgaXMgbm90IGFjdHVhbGx5IHVzZWQgYnkKKwkgIEdzdEJhc2VTcmMuCisKKzIwMDYtMDctMjggMTQ6MDk6MTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogV2hlbiBmbHVzaGluZyBhIHBhZCwgYWxzbyBjbGVhciB0aGUgcXVldWVkIGJ1ZmZlciBzbyB0aGF0IHdlIGRvbid0IGFjY2lkZW50YWxseSB1c2UgaS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKKwkgIChnc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaGluZ191bmxvY2tlZCksIChnc3RfY29sbGVjdF9wYWRzX3BvcCksCisJICAoZ3N0X2NvbGxlY3RfcGFkc19jbGVhciksIChnc3RfY29sbGVjdF9wYWRzX2ZsdXNoKSwKKwkgIChnc3RfY29sbGVjdF9wYWRzX2V2ZW50KSwgKGdzdF9jb2xsZWN0X3BhZHNfY2hhaW4pOgorCSAgV2hlbiBmbHVzaGluZyBhIHBhZCwgYWxzbyBjbGVhciB0aGUgcXVldWVkIGJ1ZmZlciBzbyB0aGF0IHdlIGRvbid0CisJICBhY2NpZGVudGFsbHkgdXNlIGl0IHdoZW4gd2Ugc2hvdWxkbid0LgorCSAgRml4IGxlYWtzIGJ5IGlucmVmZmluZyBpbmNvbW1pbmcgYnVmZmVyLgorCSAgRmx1c2ggb3V0IHF1ZXVlZCBidWZmZXJzIGluIGNhc2Ugb2YgZXJyb3JzLgorCSAgRml4ZXMgIzM0NzQ1Mi4KKworMjAwNi0wNy0yOCAxMDoxNzo1NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9yYW5kb20vcGhvbm9uLWdzdDogUmFuZG9tIG5vdGVzIGFib3V0IGEgUGhvbm9uIGJhY2tlbmQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9yYW5kb20vcGhvbm9uLWdzdDoKKwkgIFJhbmRvbSBub3RlcyBhYm91dCBhIFBob25vbiBiYWNrZW5kLgorCisyMDA2LTA3LTI3IDE0OjMyOjAxICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IEV4dHJhIGRlYnVnIG91dHB1dAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldGNhcHMpOgorCSAgRXh0cmEgZGVidWcgb3V0cHV0CisJICAqIHRlc3RzL2NoZWNrL2xpYnMvZ2RwLmM6IChnc3RfZHBfc3VpdGUpOgorCSAgVGFrZSBhIHdoYWNrIGF0IGZpeGluZyB0aGUgcHBjIGNvbXBpbGUgdXNpbmcgYSBkaWZmZXJlbnQgZGVmaW5lIHRvCisJICBkaXNhYmxlIHRoZSBicm9rZW4gdGVzdC4KKwkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgUmVtb3ZlIGV4Y2VzcyBnX3ByaW50KCkKKworMjAwNi0wNy0yNyAxMzo0NDoyMiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9wYXJzZS1sYXVuY2guYzogT29wcywgbWVhbnQgdG8gdW5jb21tZW50IHRoaXMgbGluZSB0b28gdG8gZGFtcGVuIHRoZSBub2lzZSBhIGJpdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvcGFyc2UtbGF1bmNoLmM6IChleHBlY3RlZF9mYWlsX3BpcGUpOgorCSAgT29wcywgbWVhbnQgdG8gdW5jb21tZW50IHRoaXMgbGluZSB0b28gdG8gZGFtcGVuIHRoZSBub2lzZSBhIGJpdC4KKworMjAwNi0wNy0yNyAxMzoyNjoyNyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIEZpeCBzb21lIG9mIHRoZSBsZWFrcyBleHBvc2VkIGJ5IGV4dGVuZGluZyB0aGUgcGFyc2UtbGF1bmNoIHRlc3RzdWl0ZSwgYW5kIG1vdmUgdGhlIDMgSSBjYW4ndCBmaWd1cmUgb3V0IGludG8gYSBzZXBhci4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9wYXJzZS9ncmFtbWFyLnk6CisJICAqIGdzdC9wYXJzZS9wYXJzZS5sOgorCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvcGFyc2UtbGF1bmNoLmM6IChleHBlY3RlZF9mYWlsX3BpcGUpLAorCSAgKEdTVF9TVEFSVF9URVNUKSwgKHBhcnNlX3N1aXRlKToKKwkgIEZpeCBzb21lIG9mIHRoZSBsZWFrcyBleHBvc2VkIGJ5IGV4dGVuZGluZyB0aGUgcGFyc2UtbGF1bmNoIHRlc3RzdWl0ZSwKKwkgIGFuZCBtb3ZlIHRoZSAzIEkgY2FuJ3QgZmlndXJlIG91dCBpbnRvIGEgc2VwYXJhdGUgdGVzdCB0aGF0IHdvbid0IHJ1bgorCSAgdGhlIHBpcGVsaW5lcyB1bmxlc3MgdGhlIGFwcHJvcHJpYXRlIGxpbmUgaXMgdW5jb21tZW50ZWQuCisKKzIwMDYtMDctMjcgMTI6Mzk6NDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiBSZXF1ZXN0aW5nIDAgYnl0ZXMgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIGZpbGUgc2hvdWxkIHJlc3VsdCBpbgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiAoZ3N0X2ZpbGVfc3JjX2NyZWF0ZV9yZWFkKToKKwkgIFJlcXVlc3RpbmcgMCBieXRlcyBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgZmlsZSBzaG91bGQgcmVzdWx0IGluCisJICBGTE9XX09LIGFuZCBhbiBlbXB0eSBidWZmZXIsIG5vdCBGTE9XX1VORVhQRUNURUQuIFRoYW5rIHlvdQorCSAgdW5pdCB0ZXN0LgorCisyMDA2LTA3LTI3IDExOjAwOjIxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0Y2Fwcy5jOiBGaXggdXNlbGVzcyBhc3NlcnQsIGEgdWludCBpcyBhbHdheXMgcG9zaXRpdmUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGNhcHMuYzogKGdzdF9zdGF0aWNfY2Fwc19nZXQpLCAoZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSk6CisJICBGaXggdXNlbGVzcyBhc3NlcnQsIGEgdWludCBpcyBhbHdheXMgcG9zaXRpdmUuCisJICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzogKGdzdF9zdHJ1Y3R1cmVfbnRoX2ZpZWxkX25hbWUpLAorCSAgKGdzdF9zdHJ1Y3R1cmVfZm9yZWFjaCksIChnc3Rfc3RydWN0dXJlX21hcF9pbl9wbGFjZSk6CisJICBDaGVjayBpbnB1dCBhcmd1bWVudHMgZm9yIHB1YmxpYyBmdW5jdGlvbnMgdG8gYXZvaWQgb2J2aW91cyBjcmFzaGVzLgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6IChnc3RfZmFrZV9zaW5rX3JlbmRlcik6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuaDoKKwkgIERvIGxlc3MgdXNlbGVzcyB0eXBlY2hlY2tpbmcuCisKKzIwMDYtMDctMjcgMTA6NTQ6MjkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiBEbyBub3QgdXNlIG1tYXAoKSBieSBkZWZhdWx0IHNpbmNlIHRoZXJlIGFyZSBhIG51bWJlciBvZiBlcnJvciBjb25kaXRpb25zIHRoYXQgd2Ugd291bC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiAoZ3N0X2ZpbGVfc3JjX2NsYXNzX2luaXQpOgorCSAgRG8gbm90IHVzZSBtbWFwKCkgYnkgZGVmYXVsdCBzaW5jZSB0aGVyZSBhcmUgYSBudW1iZXIgb2YgZXJyb3IKKwkgIGNvbmRpdGlvbnMgdGhhdCB3ZSB3b3VsZCBsaWtlIHRvIGhhbmRsZSBpbiBhIG5vbi1mYXRhbCB3YXkgdGhhdAorCSAgd2lsbCByZXN1bHQgaW4gYSBTSUdCVVMgaWYgd2UgdXNlIG1tYXAoKS4gRXhhbXBsZXM6IGV4dGVybmFsCisJICBkZXZpY2VzIChVU0IgaGFyZGRyaXZlLCBwb3J0YWJsZSBtdXNpYyBwbGF5ZXIpIGJlaW5nIHVucGx1Z2dlZAorCSAgd2hpbGUgaW4gdXNlOyBmaWxlIG9uIG1vdW50ZWQgQ0QvRFZEIHRoYXQgY2FuJ3QgYmUgcmVhZCBiZWNhdXNlCisJICB0aGUgbWVkaXVtIGlzIHBhcnRseSBkYW1hZ2VkLiBGaXhlcyAjMzQ4NDU1IGFuZCAjMzQ4NDc1LgorCisyMDA2LTA3LTI2IDIyOjU5OjE5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZ3N0L2dzdHF1ZXJ5Lmg6IERlbGV0ZSB1bnVzZWQgYW5kIG1pc2xlYWRpbmcgZGVmaW5lIG9mIEdTVF9RVUVSWV9UWVBFX1JBVEVfREVOIC0gcmF0ZXMgYXJlIGEgZ2RvdWJsZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RxdWVyeS5oOgorCSAgRGVsZXRlIHVudXNlZCBhbmQgbWlzbGVhZGluZyBkZWZpbmUgb2YgR1NUX1FVRVJZX1RZUEVfUkFURV9ERU4gLQorCSAgcmF0ZXMgYXJlIGEgZ2RvdWJsZQorCisyMDA2LTA3LTI2IDIwOjMwOjU1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3RyZWdpc3RyeS5jOiBNb3ZlIGJpZyBkb2N1bWVudGF0aW9uIGNvbW1lbnQgaW50byBjbGFzcyBzZWN0aW9uIGhlYWRlciwgc28gdGhhdCBpdCBhcHBlYXJzIGluIHRoZSBBUEkgZG9jcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzoKKwkgIE1vdmUgYmlnIGRvY3VtZW50YXRpb24gY29tbWVudCBpbnRvIGNsYXNzIHNlY3Rpb24gaGVhZGVyLCBzbyB0aGF0IGl0CisJICBhcHBlYXJzIGluIHRoZSBBUEkgZG9jcy4KKworMjAwNi0wNy0yNiAxNzoxODoyNSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IE9vcHMuIENvbW1pdCB0aGUgZG9jcyBhZGRpdGlvbnMgdG9vIGZvciBuZXcgQVBJLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICBPb3BzLiBDb21taXQgdGhlIGRvY3MgYWRkaXRpb25zIHRvbyBmb3IgbmV3IEFQSS4KKwkgIEFsc28sIHJlbW92ZSB0aGUgbWVudGlvbiBvZiB0aGUgbm9uLWV4aXN0ZW50IEdTVF9RVUVSWV9UWVBFX1JBVEVfREVOCisKKzIwMDYtMDctMjYgMTc6MDQ6NDUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBnc3QvZ3N0c3RydWN0dXJlLio6IEFkZCBBUEkgZm9yIHNldHRpbmcgdmFsdWVzIGludG8gc3RydWN0dXJlcyB3aXRob3V0IHBlcmZvcm1pbmcgYSBxdWFyayBsb29rdXAsIGlmIHRoZSBhcHByb3ByaWF0ZSAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6IChnc3Rfc3RydWN0dXJlX2lkX3NldCksCisJICAoZ3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsaXN0KToKKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5oOgorCSAgQWRkIEFQSSBmb3Igc2V0dGluZyB2YWx1ZXMgaW50byBzdHJ1Y3R1cmVzIHdpdGhvdXQgcGVyZm9ybWluZworCSAgYSBxdWFyayBsb29rdXAsIGlmIHRoZSBhcHByb3ByaWF0ZSBxdWFyayBpcyBhbHJlYWR5IGtub3duLgorCSAgQVBJOiBnc3Rfc3RydWN0dXJlX2lkX3NldAorCSAgQVBJOiBnc3Rfc3RydWN0dXJlX2lkX3NldF92YWxpc3QKKwkgICogZ3N0L3BhcnNlL2dyYW1tYXIueToKKwkgICogZ3N0L3BhcnNlL3BhcnNlLmw6CisJICBSZW1vdmUgc29tZSBkZWFkIGNvZGUgc2hvd24gYnkgdGhlIGNvdmVyYWdlIGluZm9ybWF0aW9uLgorCSAgRG9uJ3QgdGhyb3cgYSBjcml0aWNhbCBnX3dhcm5pbmcgd2hlbiBlbmNvdW50ZXJpbmcgYSBzeW50YXggZXJyb3IsCisJICBqdXN0IHdhcm4gYW5kIGxldCB0aGUgbm9ybWFsIGVycm9yIHBhdGggaGFuZGxlIGl0LgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6CisJICBCdW1wIHRoZSByYW5rIG9mIGZpbGVzaW5rIHVwIHRvIFBSSU1BUlkgc28gdGhhdCBpdCBpcyBwcmVmZXJyZWQgb3ZlcgorCSAgZ25vbWV2ZnNzaW5rIGZvciBmaWxlOi8vIHNpbmsgdXJpJ3MKKwkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOiAoZXhwZWN0ZWRfZmFpbF9waXBlKSwKKwkgIChHU1RfU1RBUlRfVEVTVCksIChydW5fZGVsYXllZF90ZXN0KSwKKwkgIChnc3RfcGFyc2VfdGVzdF9lbGVtZW50X2Jhc2VfaW5pdCksCisJICAoZ3N0X3BhcnNlX3Rlc3RfZWxlbWVudF9jbGFzc19pbml0KSwgKGdzdF9wYXJzZV90ZXN0X2VsZW1lbnRfaW5pdCksCisJICAoZ3N0X3BhcnNlX3Rlc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUpLAorCSAgKGdzdF9yZWdpc3Rlcl9wYXJzZV9lbGVtZW50KSwgKHBhcnNlX3N1aXRlKToKKwkgIEJlZWYgdXAgdGhlIHRlc3RzIGZvciBwYXJzZSBzeW50YXggdG8gY2hlY2sgdGhhdCBtb3JlIGVycm9yIGNhc2VzCisJICBmYWlsIGFzIHRoZXkgYXJlIHN1cHBvc2VkIHRvLiBJbmNyZWFzZXMgdGhlIHRlc3QgY292ZXJhZ2UgYSBiaXQuCisKKzIwMDYtMDctMjYgMTE6NDM6MjMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGRvY3MvbWFudWFsL2Jhc2ljcy1lbGVtZW50cy54bWw6IEZpeCBnc3RfZWxlbWVudF9saW5rKCkgZXhhbXBsZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtZWxlbWVudHMueG1sOgorCSAgRml4IGdzdF9lbGVtZW50X2xpbmsoKSBleGFtcGxlLgorCSAgKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIE1lbnRpb24gaW4gQVBJIGRvY3MgdGhhdCBvbmUgc2hvdWxkIHVzdWFsbHkgZ3N0X2Jpbl9hZGQoKQorCSAgZWxlbWVudHMgdG8gYSBiaW4gb3IgcGlwZWxpbmUgYmVmb3JlIGRvaW5nIHRoZSBsaW5raW5nLgorCisyMDA2LTA3LTI2IDEwOjQ3OjE3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgorCSAgYmFjayB0byAzMiBiaXQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYmFjayB0byAzMiBiaXQKKworMjAwNi0wNy0yNiAxMDozOTo1OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJ1ZmZlci5jOiBBdm9pZCBmdW5jdGlvbiBjYWxsIGZvciBrbm93biB0eXBlcyBieSBrZWVwaW5nIHRoZSBidWZmZXIgYW5kIHN1YmJ1ZmZlciBHVHlwZSBnbG9iYWwuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJ1ZmZlci5jOiAoZ3N0X2J1ZmZlcl9nZXRfdHlwZSksIChnc3RfYnVmZmVyX25ldyksCisJICAoZ3N0X3N1YmJ1ZmZlcl9nZXRfdHlwZSksIChnc3RfYnVmZmVyX2NyZWF0ZV9zdWIpOgorCSAgQXZvaWQgZnVuY3Rpb24gY2FsbCBmb3Iga25vd24gdHlwZXMgYnkga2VlcGluZyB0aGUgYnVmZmVyIGFuZAorCSAgc3ViYnVmZmVyIEdUeXBlIGdsb2JhbC4KKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IChnc3RfZmlsZV9zcmNfY3JlYXRlX3JlYWQpOgorCSAgUmFuZG9tIHNpbGx5IG9wdGltaXNhdGlvbnMgaW4gcmVhZCgpIHBhdGguCisKKzIwMDYtMDctMjYgMDY6MTg6NDQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICB0b29scy9nc3QtbGF1bmNoLmM6IElmIHRoZSB0b3AtbGV2ZWwgb2YgdGhlIHBhcnNlIGlzIGEgbm9ybWFsIGJpbiwgaXQgZG9lc24ndCBkbyB0aGUgcmlnaHQgbG9naWMgdG8gcnVuIGFzIGEgdG9wLWxldmUuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChtYWluKToKKwkgIElmIHRoZSB0b3AtbGV2ZWwgb2YgdGhlIHBhcnNlIGlzIGEgbm9ybWFsIGJpbiwgaXQgZG9lc24ndCBkbyB0aGUKKwkgIHJpZ2h0IGxvZ2ljIHRvIHJ1biBhcyBhIHRvcC1sZXZlbCBlbGVtZW50LCBzbyBwbGFjZSBpdCBpbnNpZGUgYQorCSAgcGlwZWxpbmUuCisKKzIwMDYtMDctMjUgMTk6Mzc6MDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiBSZW1vdmUgc3VwZXJmbHVvdXMgZ19vYmplY3Rfbm90aWZ5KCkgY2FsbHMsIEdPYmplY3QgZG9lcyB0aGF0IGZvciB1cyBhdXRvbWF0aWNhbGx5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiAoZ3N0X2ZpbGVfc3JjX3NldF9wcm9wZXJ0eSk6CisJICBSZW1vdmUgc3VwZXJmbHVvdXMgZ19vYmplY3Rfbm90aWZ5KCkgY2FsbHMsIEdPYmplY3QgZG9lcworCSAgdGhhdCBmb3IgdXMgYXV0b21hdGljYWxseS4KKworMjAwNi0wNy0yNSAxNTowNzo1OCArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgorCisJKiBnc3RyZWFtZXIuc3BlYy5pbjoKKwkgIGFkZCBsYXRlc3QgLmggYWRkaXRpb24KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkIGxhdGVzdCAuaCBhZGRpdGlvbgorCisyMDA2LTA3LTI1IDEzOjA2OjE0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3RpbmZvLmg6IE1vdmUgdGhlIFdpbjMyIHZlcnNpb24gZnJvbSBnc3QtcGx1Z2lucy1nb29kL2dzdC9hdmkvYXZpZGVtdXguYyB0byBoZXJlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RpbmZvLmg6CisJICBNb3ZlIHRoZSBXaW4zMiB2ZXJzaW9uIGZyb20gZ3N0LXBsdWdpbnMtZ29vZC9nc3QvYXZpL2F2aWRlbXV4LmMgdG8KKwkgIGhlcmUuCisKKzIwMDYtMDctMjQgMTY6MzM6MzEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3R0YWdsaXN0LmM6IEFsbG93IG1vcmUgdGhhbiBvbmUgR1NUX1RBR19JTUFHRSBwZXIgdGFnbGlzdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dGFnbGlzdC5jOiAoX2dzdF90YWdfaW5pdGlhbGl6ZSk6CisJICBBbGxvdyBtb3JlIHRoYW4gb25lIEdTVF9UQUdfSU1BR0UgcGVyIHRhZ2xpc3QuCisKKzIwMDYtMDctMjQgMDc6NDA6MTMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBnc3QvZ3N0bWluaW9iamVjdC5jOiB1cGRhdGUgZG9jcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RtaW5pb2JqZWN0LmM6CisJICB1cGRhdGUgZG9jcworCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6IChnc3RfZmRfc3JjX3NldF9wcm9wZXJ0eSksCisJICAoZ3N0X2ZkX3NyY19jcmVhdGUpOgorCSAgbG9nIHJlY3VycmluZyBldmVudHMgYXQgTE9HIGxldmVsCisJICBhZGQgbW9yZSBkZWJ1ZyBmb3Igd2hlbiB0aGUgZmQgZ2V0cyBzZXQKKworMjAwNi0wNy0yNCAwNzozNzo1MiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGF1dG9nZW4uc2g6CisJKiBjb21tb246CisJICByZW1vdmUgLS1lbmFibGUtZG9jcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICByZW1vdmUgLS1lbmFibGUtZG9jcworCisyMDA2LTA3LTIzIDA5OjQxOjMwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJKiBDaGFuZ2VMb2c6CisJKiBjb21tb246CisJICBDaGFuZ2VMb2cgc3VyZ2VyeTogYWRkIGJ1ZyByZWZlcmVuY2UKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgQ2hhbmdlTG9nIHN1cmdlcnk6IGFkZCBidWcgcmVmZXJlbmNlCisKKzIwMDYtMDctMjEgMTg6NTI6MzAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdHBhcnNlLmM6IEFsc28gcmVtb3ZlIHJlZW50cmFuY2UgY2hlY2tzIGlmIGZsZXggaXMgTVQgc2F2ZSAoIzM0ODE3OSkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFyc2UuYzogKGdzdF9wYXJzZV9sYXVuY2gpOgorCSAgQWxzbyByZW1vdmUgcmVlbnRyYW5jZSBjaGVja3MgaWYgZmxleCBpcyBNVCBzYXZlICgjMzQ4MTc5KQorCSAgRml4IG15IGVtcHR5IENoYW5nZUxvZyBlbnRyeSBiZWxvdworCisyMDA2LTA3LTIxIDE2OjAxOjM0ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6IEF0dGVtcHQgdG8gcGFjaWZ5IGJ1aWxkYm90LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA2LTA3LTIxICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OiBBdHRlbXB0IHRvIHBhY2lmeSBidWlsZGJvdC4KKworMjAwNi0wNy0yMSAxNTo0ODowNCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbSAobGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVfSEVBREVSUykKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNi0wNy0yMSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW0KKwkgIChsaWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAaW5jbHVkZV9IRUFERVJTKQorCSAgKGxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGFfU09VUkNFUyk6CisJICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGJ1ZmZlcnN0cmF3Lmg6CisJICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGJ1ZmZlcnN0cmF3LmM6IEFkZCBzb21lIG5ldyBoeXBlIHRlc3RpbmcKKwkgIGZ1bmN0aW9ucywgdGh1cyBwcm92aW5nIEkgYW0gc3RpbGwgYSBHU3RyZWFtZXIgaGF4b3IuIE9LIEkgd3JvdGUKKwkgIHRoZW0gYSBsb25nIHRpbWUgYWdvLCBidXQgYW55d2F5cy4KKworMjAwNi0wNy0yMSAxMzoxMTozMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBDaGFuZ2VMb2c6CisJKiBjb21tb246CisJKiBjb25maWd1cmUuYWM6CisJKiBnc3QvZ3N0cGFyc2UuYzoKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOiAqIGNvbmZpZ3VyZS5hYzogKiBnc3QvZ3N0cGFyc2UuYzogKGdzdF9wYXJzZV9sYXVuY2gpOgorCisyMDA2LTA3LTIxIDEwOjQwOjI1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0cGFyc2UuYzogUHJvdGVjdCByZWN1cnNpdmUgY2FsbHMgdG8gX3BhcnNlIHdpdGggYSByZWN1cnNpdmUgbXV0ZXggYW5kIGJ1c3kgZmxhZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFyc2UuYzogKGdzdF9wYXJzZV9sYXVuY2gpOgorCSAgUHJvdGVjdCByZWN1cnNpdmUgY2FsbHMgdG8gX3BhcnNlIHdpdGggYSByZWN1cnNpdmUgbXV0ZXgKKwkgIGFuZCBidXN5IGZsYWcuCisKKzIwMDYtMDctMjEgMTA6Mzg6NTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzogRml4IGxlYWsgaW4gdGVzdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBGaXggbGVhayBpbiB0ZXN0LgorCisyMDA2LTA3LTIwIDIwOjAyOjU1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3RwYXJzZS5jOiBEbyBub3QgaGFuZ2Ugb24gcmVjdXJzaXZlIHVhc2dlIG9mIGdzdF9wYXJzZV9sYXVuY2goKQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYXJzZS5jOiAoZ3N0X3BhcnNlX2xhdW5jaCk6CisJICBEbyBub3QgaGFuZ2Ugb24gcmVjdXJzaXZlIHVhc2dlIG9mIGdzdF9wYXJzZV9sYXVuY2goKQorCisyMDA2LTA3LTIwIDE2OjEwOjE3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0dGFnbGlzdC5jOiBBZGQgc29tZSBtb3JlIGRvY3MsIGNvbW1lbnRzIGFuZCBGSVhNRSAwLjExcyBoZXJlIGFuZCB0aGVyZSBhbmQgIGFsc28gZml4IHNvbWUgdHlwb3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHRhZ2xpc3QuYzoKKwkgIEFkZCBzb21lIG1vcmUgZG9jcywgY29tbWVudHMgYW5kIEZJWE1FIDAuMTFzIGhlcmUgYW5kIHRoZXJlCisJICBhbmQgIGFsc28gZml4IHNvbWUgdHlwb3MuCisKKzIwMDYtMDctMjAgMTA6NTA6MjAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RzZWdtZW50Lmg6IENvbnZlcnQgdGFicyB0byBzcGFjZXMgZm9yIGJldHRlciByZWFkYWJpbGl0eS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0c2VnbWVudC5oOgorCSAgQ29udmVydCB0YWJzIHRvIHNwYWNlcyBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5LgorCisyMDA2LTA3LTIwIDEwOjI1OjI4ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICB0ZXN0cy9jaGVjay9saWJzL2dkcC5jOiB0aGUgdGVzdF9idWZmZXIgdGVzdCBmYWlscyBhdCBsaW5lIDE0MCBvbiBwcGM2NCBhdCB0aGUgZm9sbG93aW5nIGNoZWNrOiAiR1NUX0JVRkZFUl9JTl9DQVBTIGYuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9saWJzL2dkcC5jOiAoZ3N0X2RwX3N1aXRlKToKKwkgIHRoZSB0ZXN0X2J1ZmZlciB0ZXN0IGZhaWxzIGF0IGxpbmUgMTQwIG9uIHBwYzY0IGF0IHRoZSBmb2xsb3dpbmcKKwkgIGNoZWNrOgorCSAgZmFpbF91bmxlc3MgKEdTVF9CVUZGRVJfRkxBR19JU19TRVQgKG5ld2J1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX0lOX0NBUFMpLAorCSAgIkdTVF9CVUZGRVJfSU5fQ0FQUyBmbGFnIHNob3VsZCBoYXZlIGJlZW4gY29waWVkICEiKTsKKwkgIFNlZSBidWcgIzM0ODExNCBmb3IgbW9yZSBkZXRhaWxzLgorCisyMDA2LTA3LTE5IDEyOjQwOjU0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBGaXggdHlwb3MgKCMzNDgwMDApLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcHdnL2FkdmFuY2VkLXNjaGVkdWxpbmcueG1sOgorCSAgKiBnc3QvZ3N0cGFkLmM6CisJICBGaXggdHlwb3MgKCMzNDgwMDApLgorCisyMDA2LTA3LTE4IDIwOjM4OjQ1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBkb2NzL3B3Zy9pbnRyby1iYXNpY3MueG1sOiBGaXggd3JvbmcgbGlua3MgKCMzNDc5MjcpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcHdnL2ludHJvLWJhc2ljcy54bWw6CisJICBGaXggd3JvbmcgbGlua3MgKCMzNDc5MjcpLgorCisyMDA2LTA3LTE4IDE5OjAxOjI1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIG1ha2UgLS1kaXNhYmxlLWluZGV4IHdvcmsgKCMzNDI1NjQpCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5Lmg6CisJICAqIGdzdC9nc3RyZWdpc3RyeXhtbC5jOiAobG9hZF9mZWF0dXJlKSwKKwkgIChnc3RfcmVnaXN0cnlfeG1sX3JlYWRfY2FjaGUpLCAoZ3N0X3JlZ2lzdHJ5X3htbF9zYXZlX2ZlYXR1cmUpOgorCSAgKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICBtYWtlIC0tZGlzYWJsZS1pbmRleCB3b3JrICgjMzQyNTY0KQorCisyMDA2LTA3LTE4IDA5OjQyOjMxICswMDAwICBQZXRlciBLamVsbGVyc3RlZHQgPHBrakBheGlzLmNvbT4KKworCSAgZ3N0LzogVGhlIGF0dGFjaGVkIHBhdGNoIGFkZHMgdHdvIG1pc3NpbmcgZGVmaW5lcyB0byBnc3R0cmFjZS5oIHdoZW4gdHJhY2luZyBpcyBkaXNhYmxlZC4gIEl0IGFsc28gY29ycmVjdHMgb25lIGV4aXN0Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBQZXRlciBLamVsbGVyc3RlZHQgPHBraiBhdCBheGlzIGRvdCBjb20+CisJICAqIGdzdC9NYWtlZmlsZS5hbToKKwkgICogZ3N0L2dzdHRyYWNlLmg6CisJICBUaGUgYXR0YWNoZWQgcGF0Y2ggYWRkcyB0d28gbWlzc2luZyBkZWZpbmVzIHRvIGdzdHRyYWNlLmggd2hlbiB0cmFjaW5nCisJICBpcyBkaXNhYmxlZC4gIEl0IGFsc28gY29ycmVjdHMgb25lIGV4aXN0aW5nIGRlZmluZS4KKwkgIEZpeGVzICMzNDc3NTYuCisKKzIwMDYtMDctMTcgMTc6NDA6NTIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIEFkZCB0d28gZnVuY3Rpb25zIHRvIGNoZWNrIGFuZCBjaGFuZ2UgdGhlIFNJR1NFR1YgYmVoYXZpb3VyIHdoZW4gbG9hZGluZyBwbHVnaW5zLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3QuYzogKGdzdF9zZWd0cmFwX2lzX2VuYWJsZWQpLCAoZ3N0X3NlZ3RyYXBfc2V0X2VuYWJsZWQpOgorCSAgKiBnc3QvZ3N0Lmg6CisJICAqIGdzdC9nc3RwbHVnaW4uYzogKF9nc3RfcGx1Z2luX2ZhdWx0X2hhbmRsZXJfcmVzdG9yZSk6CisJICBBZGQgdHdvIGZ1bmN0aW9ucyB0byBjaGVjayBhbmQgY2hhbmdlIHRoZSBTSUdTRUdWIGJlaGF2aW91cgorCSAgd2hlbiBsb2FkaW5nIHBsdWdpbnMuCisJICBEb24ndCBtZXNzIHdpdGggdGhlIFNJR1NFR1YgaGFuZGxlciB3aGVuIHdlIHdlcmUgdG9sZCBub3QgdG8uCisJICBGaXhlcyAjMzQ3Nzk0LgorCSAgQVBJOiBnc3Rfc2VndHJhcF9pc19lbmFibGVkCisJICBBUEk6IGdzdF9zZWd0cmFwX3NldF9lbmFibGVkCisKKzIwMDYtMDctMTQgMTY6NDI6MjAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIFJldmVydCBmaXggZm9yIHJlZ3Jlc3Npb24gaW4gIzM0NzQwOCBhZnRlciByZWxlYXNlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX3VwZGF0ZV9sZW5ndGgpOgorCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc3JjLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBSZXZlcnQgZml4IGZvciByZWdyZXNzaW9uIGluICMzNDc0MDggYWZ0ZXIgcmVsZWFzZS4KKworMjAwNi0wNy0xNCAxNjoyMDoxOCArMDAwMCAgQW50b2luZSBUcmVtYmxheSA8aGV4YTAwQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHV0aWxzLmM6IEZyZWUgaXRlcmF0b3Igd2hlbiBkb25lICgjMzQ3MzExKS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IEFudG9pbmUgVHJlbWJsYXkgPGhleGEwMCBhdCBnbWFpbCBjb20+CisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X2VsZW1lbnRfdW5saW5rKToKKwkgIEZyZWUgaXRlcmF0b3Igd2hlbiBkb25lICgjMzQ3MzExKS4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RfdXRpbHNfc3VpdGUpOgorCSAgQW5kIGFkZCBhIHRlc3QgY2FzZSBmb3IgdGhpcy4KKworMjAwNi0wNy0xNCAxNTo1Mjo1NSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGNvbmZpZ3VyZS5hYzogQnVtcCBuYW5vIGJhY2sgdG8gQ1ZTCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgQnVtcCBuYW5vIGJhY2sgdG8gQ1ZTCisKKz09PSByZWxlYXNlIDAuMTAuOSA9PT0KKworMjAwNi0wNy0xNCAxNTo1MDoxOSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGNvbmZpZ3VyZS5hYzogcmVsZWFzaW5nIDAuMTAuOSwgIk9uIHRoZSByb2FkIGFnYWluIgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA2LTA3LTEzICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKwkgICogY29uZmlndXJlLmFjOgorCSAgcmVsZWFzaW5nIDAuMTAuOSwgIk9uIHRoZSByb2FkIGFnYWluIgorCisyMDA2LTA3LTEzIDE5OjQ3OjE0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSogcG8vYWYucG86CisJKiBwby9hei5wbzoKKwkqIHBvL2JnLnBvOgorCSogcG8vY2EucG86CisJKiBwby9jcy5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkgIFVwZGF0ZSAucG8gZmlsZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgVXBkYXRlIC5wbyBmaWxlcworCisyMDA2LTA3LTEzIDE1OjUxOjA1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBSZXZlcnQgcHVsbC0wIGZpeCBmb3IgcmVsZWFzZS4gRGlzYWJsZSBjaGVjay4gRml4ZXMgIzM0NzQwOC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY191cGRhdGVfbGVuZ3RoKToKKwkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNyYy5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgUmV2ZXJ0IHB1bGwtMCBmaXggZm9yIHJlbGVhc2UuIERpc2FibGUgY2hlY2suIEZpeGVzICMzNDc0MDguCisKKzIwMDYtMDctMTMgMTQ6MDI6MTYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6IEZpeGVzICMzNDczMzc6IGZhaWx1cmUgdG8gZGVzZXJpYWxpemUgZXZlbnQgcGFja2V0cyB3aXRoIGVtcHR5IHBheWxvYWQgKG9ubHkgZXYuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6CisJICAoZ3N0X2RwX2V2ZW50X2Zyb21fcGFja2V0XzFfMCk6CisJICBGaXhlcyAjMzQ3MzM3OiBmYWlsdXJlIHRvIGRlc2VyaWFsaXplIGV2ZW50IHBhY2tldHMgd2l0aAorCSAgZW1wdHkgcGF5bG9hZCAob25seSBldmVudCB0eXBlKQorCisyMDA2LTA3LTEzIDEzOjU3OjMzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0L01ha2VmaWxlLmFtOiBkbyBub3QgaW5zdGFsbCBhIC5jIGZpbGUgaW4gdGhlIGhlYWRlciBkaXJlY3RvcnkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvTWFrZWZpbGUuYW06CisJICBkbyBub3QgaW5zdGFsbCBhIC5jIGZpbGUgaW4gdGhlIGhlYWRlciBkaXJlY3RvcnkKKworMjAwNi0wNy0xMyAxMDo0NzowMCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgZ3N0L2dzdGdob3N0cGFkLmM6IEdob3N0UGFkIG5vIGxvbmdlciBpbXBsaWNpdGVseSB1c2UgdGhlIHBhZHRlbXBsYXRlcyBvZiB0aGUgdGFyZ2V0cy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzogKGdzdF9wcm94eV9wYWRfc2V0X3RhcmdldF91bmxvY2tlZCk6CisJICBHaG9zdFBhZCBubyBsb25nZXIgaW1wbGljaXRlbHkgdXNlIHRoZSBwYWR0ZW1wbGF0ZXMgb2YgdGhlIHRhcmdldHMuCisJICBGaXhlcyAjMzQ3Mzg0CisKKzIwMDYtMDctMTEgMjI6NTU6NDAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmcucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGUucG86CisJKiBwby9lbl9HQi5wbzoKKwkqIHBvL2ZyLnBvOgorCSogcG8vaXQucG86CisJKiBwby9uYi5wbzoKKwkqIHBvL25sLnBvOgorCSogcG8vcnUucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJKiBwby96aF9DTi5wbzoKKwkqIHBvL3poX1RXLnBvOgorCSAgVXBkYXRlIC5wbyBmaWxlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBVcGRhdGUgLnBvIGZpbGVzCisKKzIwMDYtMDctMTEgMjA6NDQ6NDYgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJKiBDaGFuZ2VMb2c6CisJICBNZW50aW9uIGJ1ZyAjMzQxMDI5IGZpeGVkIGJ5IGJpbGJvZWQncyBwcmV2aW91cyBjb21taXQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgTWVudGlvbiBidWcgIzM0MTAyOSBmaXhlZCBieSBiaWxib2VkJ3MgcHJldmlvdXMgY29tbWl0CisKKzIwMDYtMDctMTEgMjA6MTQ6MjAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBNYWtlIEdzdFZhbHVlQXJyYXkgY29tcGFyaXNvbiBiZSBvcmRlciBkZXBlbmRlbnQgYXMgZGVzaWduZWQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfY29tcGFyZV9saXN0KSwKKwkgIChnc3RfdmFsdWVfY29tcGFyZV9hcnJheSksIChfZ3N0X3ZhbHVlX2luaXRpYWxpemUpOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgIE1ha2UgR3N0VmFsdWVBcnJheSBjb21wYXJpc29uIGJlIG9yZGVyIGRlcGVuZGVudCBhcyBkZXNpZ25lZC4KKwkgIEFkZCBjaGVja3MgZm9yIHZhbHVlIGxpc3RzIGFuZCB2YWx1ZSBhcnJheSBjb21wYXJpc29ucy4KKwkgIEZpeGVzICMzNDcyMjEKKworMjAwNi0wNy0xMSAxNjoyMDowOSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgZ3N0L2dzdGJpbi5jOiAoZGUpYWN0aXZhdGUgc3JjIHBhZHMgYmVmb3JlIGNhbGxpbmcgc3RhdGVfY2hhbmdlIG9uIHRoZSBjaGlsZHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAoYWN0aXZhdGVfcGFkcyksCisJICAoaXRlcmF0b3JfYWN0aXZhdGVfZm9sZF93aXRoX3Jlc3luYyksIChnc3RfYmluX3NyY19wYWRzX2FjdGl2YXRlKSwKKwkgIChnc3RfYmluX2NoYW5nZV9zdGF0ZV9mdW5jKToKKwkgIChkZSlhY3RpdmF0ZSBzcmMgcGFkcyBiZWZvcmUgY2FsbGluZyBzdGF0ZV9jaGFuZ2Ugb24gdGhlIGNoaWxkcy4KKwkgIFRoaXMgaXMgdG8gYXZvaWQgdGhlIGNhc2Ugd2hlcmUgYSBzcmMgZ2hvc3RwYWQgaXMgYmxvY2tlZCAoaG9sZGluZyB0aGUKKwkgIHN0cmVhbSBsb2NrKSwgd2hpY2ggd291bGQgYmxvY2sgdGhlIGRlYWN0aXZhdGlvbiBvZiB0aGUgZ2hvc3RwYWQncworCSAgdGFyZ2V0IHBhZC4KKwkgICogZ3N0L2dzdGdob3N0cGFkLmM6IChnc3RfcHJveHlfcGFkX2RvX3F1ZXJ5X3R5cGUpLAorCSAgKGdzdF9wcm94eV9wYWRfZG9fZXZlbnQpLCAoZ3N0X3Byb3h5X3BhZF9kb19xdWVyeSksCisJICAoZ3N0X3Byb3h5X3BhZF9kb19pbnRlcm5hbF9saW5rKSwgKGdzdF9wcm94eV9wYWRfZG9fYnVmZmVyYWxsb2MpLAorCSAgKGdzdF9wcm94eV9wYWRfZG9fY2hhaW4pLCAoZ3N0X3Byb3h5X3BhZF9kb19nZXRyYW5nZSksCisJICAoZ3N0X3Byb3h5X3BhZF9kb19jaGVja2dldHJhbmdlKSwgKGdzdF9wcm94eV9wYWRfZG9fZ2V0Y2FwcyksCisJICAoZ3N0X3Byb3h5X3BhZF9kb19hY2NlcHRjYXBzKSwgKGdzdF9wcm94eV9wYWRfZG9fZml4YXRlY2FwcyksCisJICAoZ3N0X3Byb3h5X3BhZF9kb19zZXRjYXBzKSwgKGdzdF9wcm94eV9wYWRfc2V0X3RhcmdldF91bmxvY2tlZCksCisJICAoZ3N0X3Byb3h5X3BhZF9zZXRfdGFyZ2V0KSwgKGdzdF9wcm94eV9wYWRfZ2V0X2ludGVybmFsKSwKKwkgIChnc3RfcHJveHlfcGFkX2Rpc3Bvc2UpLCAoZ3N0X3Byb3h5X3BhZF9pbml0KSwKKwkgIChnc3RfZ2hvc3RfcGFkX3BhcmVudF9zZXQpLCAoZ3N0X2dob3N0X3BhZF9wYXJlbnRfdW5zZXQpLAorCSAgKGdzdF9naG9zdF9wYWRfY2xhc3NfaW5pdCksCisJICAoZ3N0X2dob3N0X3BhZF9pbnRlcm5hbF9kb19hY3RpdmF0ZV9wdXNoKSwKKwkgIChnc3RfZ2hvc3RfcGFkX2ludGVybmFsX2RvX2FjdGl2YXRlX3B1bGwpLAorCSAgKGdzdF9naG9zdF9wYWRfZG9fYWN0aXZhdGVfcHVzaCksIChnc3RfZ2hvc3RfcGFkX2RvX2FjdGl2YXRlX3B1bGwpLAorCSAgKGdzdF9naG9zdF9wYWRfZG9fbGluayksIChnc3RfZ2hvc3RfcGFkX2RvX3VubGluayksCisJICAoZ3N0X2dob3N0X3BhZF9kaXNwb3NlKSwgKGdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldCksCisJICAoZ3N0X2dob3N0X3BhZF9uZXcpLCAoZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0KToKKwkgIEdob3N0UGFkcyBub3cgY3JlYXRlIHRoZWlyIGludGVybmFsIEdzdFByb3h5UGFkIGF0IGNyZWF0aW9uIChhbmQgbm90CisJICB3aGVuIHRoZXkncmUgbGlua2VkLCBhcyBpdCB3YXMgYmVpbmcgZG9uZSBwcmV2aW91c2x5KS4KKwkgIFRoZSBpbnRlcm5hbCBhbmQgdGFyZ2V0IHBhZHMgYXJlIGxpbmtlZCBzdHJhaWdodCBhd2F5LgorCSAgVGhlIGRhdGEgd2lsbCBhbHNvIHRyYXZlbCB0aHJvdWdoIHRoZSBvdGhlciBwYWQgaW4gb3JkZXIgdG8gbWFrZQorCSAgcGFkIGJsb2NraW5nIGFuZCBwcm9iZXMgbm9uLWhhY2tpc2ggKHRoZSBwcm9iZS9ibG9jayBub3cgcmVhbGx5IGhhcHBlbnMKKwkgIG9uIHRoZSBHaG9zdFBhZCBhbmQgbm90IG9uIHRoZSB0YXJnZXQpLgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3NldF9ibG9ja2VkX2FzeW5jKSwKKwkgIChnc3RfcGFkX2xpbmtfcHJlcGFyZSksIChnc3RfcGFkX3B1c2hfZXZlbnQpOgorCSAgUmVtb3ZlIHByZXZpb3VzIGdob3N0cGFkIGNydWZ0LgorCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9wYWRfYWRkX2RhdGFfcHJvYmUpLAorCSAgKGdzdF9wYWRfYWRkX2V2ZW50X3Byb2JlKSwgKGdzdF9wYWRfYWRkX2J1ZmZlcl9wcm9iZSksCisJICAoZ3N0X3BhZF9yZW1vdmVfZGF0YV9wcm9iZSksIChnc3RfcGFkX3JlbW92ZV9ldmVudF9wcm9iZSksCisJICAoZ3N0X3BhZF9yZW1vdmVfYnVmZmVyX3Byb2JlKToKKwkgIFJlbW92ZSBwcmV2aW91cyBnaG9zdCBwYWQgY3J1ZnQuCisJICBBZGRlZCBtb3JlIGRldGFpbGVkIGRlYnVnIHN0YXRlbWVudHMuCisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgRml4IHRoZSB0ZXN0c3VpdGUgZm9yIHJlZmNvdW50aW5nIGNoYW5nZXMuCisJICBUaGUgY29tbWVudHMgYWJvdXQgd2hvIGhhcyByZWZlcmVuY2VzIHdlcmUgY29ycmVjdCwgYnV0IHRoZSByZWZjb3VudAorCSAgYmVpbmcgY2hlY2tlZCB3YXNuJ3QgdGhlIHNhbWUgKCE/ISkuCisKKzIwMDYtMDctMTAgMTk6MzU6MzIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgTW9yZSBkb2NzIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFkZCBkb2NzIHRvIGd0ay1kb2MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdGNvbmZpZy5oLmluOgorCSAgTW9yZSBkb2NzIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFkZCBkb2NzIHRvIGd0ay1kb2MuCisKKzIwMDYtMDctMTAgMTg6Mjc6NDAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgRml4IGJ1aWxkIHdoZW4gZGlzYWJsaW5nIHRyYWNpbmcgKGZpeGVzICMzNDQwMTYpLiBBbHNvIHN0YXJ0IHRvIGRvY3VtZW50IHRoZSBkZWZpbmVzIHRoYXQgZGlzYWJsZSB0aGUgc3ViLXN5c3RlbXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L01ha2VmaWxlLmFtOgorCSAgKiBnc3QvZ3N0Y29uZmlnLmguaW46CisJICAqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkgIEZpeCBidWlsZCB3aGVuIGRpc2FibGluZyB0cmFjaW5nIChmaXhlcyAjMzQ0MDE2KS4gQWxzbyBzdGFydCB0byBkb2N1bWVudAorCSAgdGhlIGRlZmluZXMgdGhhdCBkaXNhYmxlIHRoZSBzdWItc3lzdGVtcy4KKworMjAwNi0wNy0xMCAwOTo0MjoyMCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgZ3N0L2dzdC5jOiBsZXQncyBtYWtlIHZhbGdyaW5kIGhhcHB5Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdC5jOiAoZW5zdXJlX2N1cnJlbnRfcmVnaXN0cnlfZm9ya2luZyk6CisJICBsZXQncyBtYWtlIHZhbGdyaW5kIGhhcHB5Li4uCisKKzIwMDYtMDctMDkgMTY6NTY6NDggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RlbGVtZW50LmM6IEJldHRlciBwYWQgYWN0aXZhdGlvbiBjb2RlOiBSZXNldCB0aGUgY29sbGVjdCB2YWx1ZSB0b28gb24gcmVzeW5jLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChhY3RpdmF0ZV9wYWRzKSwKKwkgIChpdGVyYXRvcl9hY3RpdmF0ZV9mb2xkX3dpdGhfcmVzeW5jKSwgKGdzdF9lbGVtZW50X3BhZHNfYWN0aXZhdGUpOgorCSAgQmV0dGVyIHBhZCBhY3RpdmF0aW9uIGNvZGU6IFJlc2V0IHRoZSBjb2xsZWN0IHZhbHVlIHRvbyBvbiByZXN5bmMuCisJICBBZGQgc29tZSBjb21tZW50cy4KKworMjAwNi0wNy0wOSAxMzoyNjowNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHBhZC5jOiBVc2Ugc29tZSBtb3JlIG1hY3JvcyB3aGVyZSBpdCBtYWtlcyBzZW5zZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2luaXQpLCAoZ3N0X3BhZF9hY3RpdmF0ZV9wdWxsKSwKKwkgIChnc3RfcGFkX2FjdGl2YXRlX3B1c2gpOgorCSAgVXNlIHNvbWUgbW9yZSBtYWNyb3Mgd2hlcmUgaXQgbWFrZXMgc2Vuc2UuCisJICBBbGxvdyBwYWQgbW9kZSBzd2l0Y2hpbmcgaW5zdGVhZCBvZiBhc3NlcnRpbmcuIFdoZW4gYSBwYWQKKwkgIGlzIGFjdGl2YXRlZCBpbiBvbmUgbW9kZSBhbmQgd2UgYWN0aXZhdGUgaXQgaW4gYW5vdGhlciwKKwkgIGRlYWN0aXZhdGUgaXQgZmlyc3QgYmVmb3JlIGFjdGl2YXRpbmcgaXQgaW4gYSBkaWZmZXJlbnQgbW9kZS4KKwkgIEZpeGVzICMzMjkxOTguCisKKzIwMDYtMDctMDggMTM6MjI6MzIgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgdG9vbHMvZ3N0LWxhdW5jaC5jIChtYWluKTogSGFuZGxlIGVyciA9PSBOVUxMLiBnc3QvZ3N0LmMgKGluaXRfcG9zdCwgZW5zdXJlX2N1cnJlbnRfcmVnaXN0cnkpIChlbnN1cmVfY3VycmVudF9yZWdpc3RyLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDYtMDctMDggIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIHRvb2xzL2dzdC1sYXVuY2guYyAobWFpbik6IEhhbmRsZSBlcnIgPT0gTlVMTC4KKwkgICogZ3N0L2dzdC5jIChpbml0X3Bvc3QsIGVuc3VyZV9jdXJyZW50X3JlZ2lzdHJ5KQorCSAgKGVuc3VyZV9jdXJyZW50X3JlZ2lzdHJ5X2ZvcmtpbmcpCisJICAoZW5zdXJlX2N1cnJlbnRfcmVnaXN0cnlfbm9uZm9ya2luZyk6IFJlZHVjZSAjaWZkZWYgcmF0bmVzdCBieQorCSAgZmFjdG9yaW5nIG91dCB0aGUgcmVnaXN0cnkgc2Nhbm5pbmcgaW50byBzZXBhcmF0ZSBmdW5jdGlvbnMuIERvbid0CisJICBmb3JrIGZvciB0aGUgcmVzY2FuIGlzIEdTVF9SRUdJU1RSWV9GT1JLPW5vOyB1c2VmdWwgaW4gZGVidWdnaW5nLgorCSAgQmV0dGVyIGVudmlyb25tZW50IHZhciBuYW1lL2ludGVyZmFjZSBzdWdnZXN0aW9ucyBhY2NlcHRlZC4KKworMjAwNi0wNy0wNyAxNzoxNjoyNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdG9iamVjdC5jOiBSYW5kb20gbWljcm8tb3B0aW1pc2F0aW9uOiBkb24ndCB1c2UgYSBoYXNoIHRhYmxlIHdpdGggc3RyaW5ncyBhcyBrZXlzIGFuZCB0aGUgdXN1YWwgc3RyZHVwL3N0cmNtcCBpLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdG9iamVjdC5jOiAoZ3N0X29iamVjdF9zZXRfbmFtZV9kZWZhdWx0KSwKKwkgIChnc3Rfb2JqZWN0X3NldF9uYW1lKToKKwkgIFJhbmRvbSBtaWNyby1vcHRpbWlzYXRpb246IGRvbid0IHVzZSBhIGhhc2ggdGFibGUKKwkgIHdpdGggc3RyaW5ncyBhcyBrZXlzIGFuZCB0aGUgdXN1YWwgc3RyZHVwL3N0cmNtcAorCSAgaW52b2x2ZWQsIGJ1dCByYXRoZXIganVzdCB1c2UgdGhlIEdRdWFyayBvZiB0aGUKKwkgIHR5cGUgbmFtZSBhcyBrZXksIHNpbmNlIGl0IG5lZWRzIHRvIGJlIGxvb2tlZCB1cAorCSAgYW55d2F5IHRvIGdldCB0aGUgdHlwZSBuYW1lIHN0cmluZy4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdG9iamVjdC5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgRml4IHZhcmlvdXMgbGVha3MuCisKKzIwMDYtMDctMDcgMTU6NDI6MDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RiaW4uYzogQ2FuJ3QgdXNlIEdQT0lOVEVSX1RPX0lOVCBhbmQgR0lOVF9UT19QT0lOVEVSIHdpdGggR1R5cGVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RiaW4uYzogKGNvbXBhcmVfaW50ZXJmYWNlKSwgKGdzdF9iaW5fZ2V0X2J5X2ludGVyZmFjZSksCisJICAoZ3N0X2Jpbl9pdGVyYXRlX2FsbF9ieV9pbnRlcmZhY2UpOgorCSAgQ2FuJ3QgdXNlIEdQT0lOVEVSX1RPX0lOVCBhbmQgR0lOVF9UT19QT0lOVEVSIHdpdGggR1R5cGVzLgorCSAgR1R5cGVzIGFyZSBndWxvbmdzIGFuZCB0aHVzIHRoZSB0b3AgNCBieXRlcyBtaWdodCBiZSBjdXQKKwkgIG9mZiBvbiBzb21lIHBsYXRmb3JtcyB3aGVuIGRvaW5nIEdQT0lOVEVSX1RPX0lOVCwgbGVhZGluZworCSAgdG8gaW52YWxpZCBHVHlwZXMgYW5kIGJhZCB0aGluZ3MgaGFwcGVuaW5nLgorCSAgQWxzbyBhZGQgYSBjaGVjayB0byBtYWtlIHN1cmUgdGhlIHR5cGUgcGFzc2VkIGluIGlzIHJlYWxseQorCSAgYW4gaW50ZXJmYWNlIHR5cGUuCisKKzIwMDYtMDctMDcgMDk6NDc6MTkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIC5jdnNpZ25vcmU6IElnbm9yZSBtb3JlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIC5jdnNpZ25vcmU6CisJICBJZ25vcmUgbW9yZS4KKworMjAwNi0wNy0wNyAwOTowOToxMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgTWFrZSBnc3QtZWxlbWVudC1jaGVjay0kVkVSU0lPTi5tNCBjYWxsIGdzdC1pbnNwZWN0LSRWRVJTSU9OIGluc3RlYWQgb2YgdGhlIHVudmVyc2lvbmVkIGdzdC1pbnNwZWN0ICgjMzI0MTc2LCAjMTY4NjU5KS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBNYWtlZmlsZS5hbToKKwkgICogY29uZmlndXJlLmFjOgorCSAgKiBnc3QtZWxlbWVudC1jaGVjay5tNDoKKwkgICogZ3N0LWVsZW1lbnQtY2hlY2subTQuaW46CisJICBNYWtlIGdzdC1lbGVtZW50LWNoZWNrLSRWRVJTSU9OLm00IGNhbGwgZ3N0LWluc3BlY3QtJFZFUlNJT04KKwkgIGluc3RlYWQgb2YgdGhlIHVudmVyc2lvbmVkIGdzdC1pbnNwZWN0ICgjMzI0MTc2LCAjMTY4NjU5KS4KKworMjAwNi0wNy0wNiAxNjoxNzoyMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdG1lc3NhZ2UuaDogVXNlIGEgdmFsaWQgaW50IGZvciB0aGUgX01FU1NBR0VfQU5ZIGVudW0gdmFsdWUgdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZ3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdG1lc3NhZ2UuaDoKKwkgIFVzZSBhIHZhbGlkIGludCBmb3IgdGhlIF9NRVNTQUdFX0FOWSBlbnVtIHZhbHVlIHRvIGF2b2lkIGNvbXBpbGVyCisJICB3YXJuaW5ncy4KKworMjAwNi0wNy0wNiAxNTo0NjoyNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IFVwZGF0ZSBkb2NzLiBibG9ja3NpemUgPT0gMCBub3cgbWVhbnMgdGhlIGRlZmF1bHQgYmxvY2tzaXplIHdoZW4gd29ya2luZyBpbiBwdXNoIGJhc2VkIG1vZGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfY2xhc3NfaW5pdCksCisJICAoZ3N0X2Jhc2Vfc3JjX3dhaXQpLCAoZ3N0X2Jhc2Vfc3JjX3VwZGF0ZV9sZW5ndGgpLAorCSAgKGdzdF9iYXNlX3NyY19nZXRfcmFuZ2UpLCAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfY2hlY2tfZ2V0X3JhbmdlKSwKKwkgIChnc3RfYmFzZV9zcmNfY2hlY2tfZ2V0X3JhbmdlKSwgKGdzdF9iYXNlX3NyY19wYWRfY2hlY2tfZ2V0X3JhbmdlKSwKKwkgIChnc3RfYmFzZV9zcmNfbG9vcCksIChnc3RfYmFzZV9zcmNfc3RhcnQpLAorCSAgKGdzdF9iYXNlX3NyY19hY3RpdmF0ZV9wdWxsKToKKwkgIFVwZGF0ZSBkb2NzLgorCSAgYmxvY2tzaXplID09IDAgbm93IG1lYW5zIHRoZSBkZWZhdWx0IGJsb2Nrc2l6ZSB3aGVuIHdvcmtpbmcgaW4gcHVzaAorCSAgYmFzZWQgbW9kZS4KKwkgIFJlbW92ZSBzb21lIHBvaW50bGVzcyBhc3NlcnRzIGluIF93YWl0IGZ1bmN0aW9uLgorCSAgRml4IG9mZnNldC9sZW5ndGggY2FsY3VsYXRpb25zIGFuZCBFT1MgaGFuZGxpbmcuIFdlIGNhbiBub3cgcHVsbCAwCisJICBieXRlcyBhcyB3ZWxsLCB3aGljaCBpcyBhbGxvd2VkLgorCSAgdXNlIF9jaGVja19nZXRfcmFuZ2UoKSB0byBkZWNpZGUgaWYgd2UgY2FuIG9wZXJhdGUgaW4gX3B1bGwgYmFzZWQKKwkgIG1vZGUuCisJICBGaXggcmVmY291bnRpbmcgbGVhayB3aGVuIGNoZWNrX2dldF9yYW5nZSBmdW5jdGlvbiB3YXMgbm90CisJICBpbXBsZW1lbnRlZC4KKwkgIEFQSSBHc3RCYXNlU3JjOjpibG9ja3NpemUgcmFuZ2UgY2FuIGJlIDAgdG9vIG5vdyAoZGVmYXVsdCkKKwkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNyYy5jOiAoR1NUX1NUQVJUX1RFU1QpLAorCSAgKGZpbGVzcmNfc3VpdGUpOgorCSAgQWRkZWQgY2hlY2sgdG8gdGVzdCBfZ2V0X3JhbmdlKCkgYmVoYXZpb3VyLgorCisyMDA2LTA3LTA2IDE1OjIxOjQ2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0cGFkLio6IExvdHMgb2YgY29tbWVudHMgYW5kIGRvY3MgYWRkZWQgdG8gdGhlIHBhZCBmdW5jdGlvbnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9jaGFpbl91bmNoZWNrZWQpLCAoZ3N0X3BhZF9jaGFpbiksCisJICAoZ3N0X3BhZF9wdXNoKSwgKGdzdF9wYWRfY2hlY2tfcHVsbF9yYW5nZSksIChnc3RfcGFkX2dldF9yYW5nZSksCisJICAoZ3N0X3BhZF9wdWxsX3JhbmdlKToKKwkgICogZ3N0L2dzdHBhZC5oOgorCSAgTG90cyBvZiBjb21tZW50cyBhbmQgZG9jcyBhZGRlZCB0byB0aGUgcGFkIGZ1bmN0aW9ucy4KKwkgIEZsZXNoIG91dCB0aGUgZXhwZWN0ZWQgYmVoYXZpb3VyIG9mIHRoZSBnZXRfcmFuZ2UoKSBmdW5jdGlvbnMuCisKKzIwMDYtMDctMDYgMDk6MjE6MDMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC86IFJlbW92ZSBjb21tYSBhdCBlbmQgb2YgZW51bWVyYXRvciBsaXN0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RidXMuaDoKKwkgICogZ3N0L2dzdGNsb2NrLmg6CisJICAqIGdzdC9nc3RldmVudC5oOgorCSAgKiBnc3QvZ3N0aXRlcmF0b3IuaDoKKwkgICogZ3N0L2dzdHBhZC5oOgorCSAgKiBnc3QvZ3N0cGx1Z2luLmg6CisJICAqIGdzdC9nc3R0YXNrLmg6CisJICBSZW1vdmUgY29tbWEgYXQgZW5kIG9mIGVudW1lcmF0b3IgbGlzdC4KKworMjAwNi0wNy0wNSAxOTo1NjowOCArMDAwMCAgU8OpYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgorCisJICB3aW4zMi9jb21tb24vOiBBZGQgbmV3IGV4cG9ydGVkIGZ1bmN0aW9ucy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6CisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RkYXRhcHJvdG9jb2wuZGVmOgorCSAgKiB3aW4zMi9jb21tb24vbGlic2d0cmVhbWVyLmRlZjoKKwkgIEFkZCBuZXcgZXhwb3J0ZWQgZnVuY3Rpb25zLgorCisyMDA2LTA3LTA1IDE4OjIwOjU4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdHB1c2hzcmMuYzogQWRkIHNvbWUgbW9yZSBkb2NzIGhlcmUgYW5kIHRoZXJlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5jOiAoZ3N0X3B1c2hfc3JjX2NoZWNrX2dldF9yYW5nZSk6CisJICBBZGQgc29tZSBtb3JlIGRvY3MgaGVyZSBhbmQgdGhlcmUuCisKKzIwMDYtMDctMDUgMTg6MTg6NDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogV2hlbiBvcGVyYXRpbmcgaW4gcHVsbCBtb2RlIHVwZGF0ZSB0aGUgb2Zmc2V0IHNvIHRoYXQgd2UgcmVhZCBzZXF1ZW50aWFsbHkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19wcmVyb2xsX29iamVjdCksCisJICAoZ3N0X2Jhc2Vfc2lua19sb29wKSwgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uKToKKwkgIFdoZW4gb3BlcmF0aW5nIGluIHB1bGwgbW9kZSB1cGRhdGUgdGhlIG9mZnNldCBzbyB0aGF0IHdlCisJICByZWFkIHNlcXVlbnRpYWxseS4KKworMjAwNi0wNy0wNSAxODoxNzowMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6IEF2b2lkIHN0cmR1cC4gKHdpbGwgaGFwcGVuIGluIGxpYnhtbCwgYnV0IGhleSEpCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6IChyZWFkX3N0cmluZyk6CisJICBBdm9pZCBzdHJkdXAuICh3aWxsIGhhcHBlbiBpbiBsaWJ4bWwsIGJ1dCBoZXkhKQorCSAgKiBnc3QvZ3N0dXJpLmM6CisJICBBZGQgc29tZSBtb3JlIGRvY3MuCisKKzIwMDYtMDctMDUgMTc6MDk6MTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIE5vIHBvaW50IGluIGNoZWNraW5nIGlmIHRoZSBzaXplIG9mIHRoZSBzdWJidWZmZXIgPiAwLCB0aGUgY29kZSBoYW5kbGVzIGl0IGNvcnJlY2x0eSBhcyBkZW1vbnN0cmF0ZWQgYnkgdW5pdCB0ZXN0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RidWZmZXIuYzogKF9nc3RfYnVmZmVyX2NvcHkpLCAoZ3N0X2J1ZmZlcl9jcmVhdGVfc3ViKToKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOiAoR1NUX1NUQVJUX1RFU1QpLAorCSAgKGdzdF9idWZmZXJfc3VpdGUpOgorCSAgTm8gcG9pbnQgaW4gY2hlY2tpbmcgaWYgdGhlIHNpemUgb2YgdGhlIHN1YmJ1ZmZlciA+IDAsIHRoZQorCSAgY29kZSBoYW5kbGVzIGl0IGNvcnJlY2x0eSBhcyBkZW1vbnN0cmF0ZWQgYnkgdW5pdCB0ZXN0LgorCSAgQWxzbyBhZGQgYSB1bml0IHRlc3QgZm9yIHRoZSB6ZXJvIHNpemVkIF9uZXdfYW5kX2FsbG9jIGFuZAorCSAgX2NvcHkuIEZpeGVzICMzNDY2NjMuCisKKzIwMDYtMDctMDUgMDg6MTY6MTIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBNYWtlIHN1cmUgdGhlIGJ1ZmZlciB3ZSBwYXNzIHRvIHRyYW5zZm9ybV9pcCBoYXMgYSByZWZjb3VudCBvZiAxIGFuZCB0aHVzIGlzIHdyaXRhYi4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9wcmVwYXJlX291dHB1dF9idWZmZXIpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9idWZmZXJfYWxsb2MpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9oYW5kbGVfYnVmZmVyKToKKwkgIE1ha2Ugc3VyZSB0aGUgYnVmZmVyIHdlIHBhc3MgdG8gdHJhbnNmb3JtX2lwIGhhcyBhIHJlZmNvdW50IG9mCisJICAxIGFuZCB0aHVzIGlzIHdyaXRhYmxlLiBGaXhlcyAjMzQzMTk2CisKKzIwMDYtMDctMDQgMDk6MDE6NTEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuKjogQWRkICJzZXF1ZW50aWFsIiBwcm9wZXJ0eSwgb2ZmIGJ5IGRlZmF1bHQsIHRvIHVzZSBtYWR2aXNlIGFuZCBoaW50IHRvIHRoZSBrZXJuZWwgdGhhdCAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogKGdzdF9maWxlX3NyY19jbGFzc19pbml0KSwKKwkgIChnc3RfZmlsZV9zcmNfaW5pdCksIChnc3RfZmlsZV9zcmNfc2V0X3Byb3BlcnR5KSwKKwkgIChnc3RfZmlsZV9zcmNfZ2V0X3Byb3BlcnR5KSwgKGdzdF9maWxlX3NyY19tYXBfcmVnaW9uKToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmg6CisJICBBZGQgInNlcXVlbnRpYWwiIHByb3BlcnR5LCBvZmYgYnkgZGVmYXVsdCwgdG8gdXNlIG1hZHZpc2UgYW5kIGhpbnQKKwkgIHRvIHRoZSBrZXJuZWwgdGhhdCBzZXF1ZW50aWFsIGFjY2VzcyBpcyBkZXNpcmVkLgorCSAgVG91Y2ggYWxsIHJldHJpZXZlZCBwYWdlcyBieSBkZWZhdWx0IHRvIGVuc3VyZSB0aGV5IGFyZSBwdWxsZWQKKwkgIGludG8gbWVtb3J5LiAoQ2xvc2VzICMzNDU3MjApCisKKzIwMDYtMDctMDMgMTc6NDQ6MDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZGVzaWduLzogU21hbGwgZG9jcyB1cGRhdGVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtYmxvY2sudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWR5bmFtaWMudHh0OgorCSAgU21hbGwgZG9jcyB1cGRhdGVzLgorCisyMDA2LTA3LTAzIDE2OjU3OjU0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvOiBVc2UgR1NsaWNlIHdoZW4gdGhlIGdsaWIgd2UgYnVpbGQgYWdhaW5zdCBpcyA+PSAyLjEwCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGNhcHMuYzogKGdzdF9jYXBzX25ld19lbXB0eSksIChfZ3N0X2NhcHNfZnJlZSksCisJICAoZ3N0X2NhcHNfdW5yZWYpLCAoZ3N0X3N0YXRpY19jYXBzX2dldCksCisJICAoZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZSk6CisJICAqIGdzdC9nc3RjbG9jay5jOiAoZ3N0X2Nsb2NrX2VudHJ5X25ldyksIChfZ3N0X2Nsb2NrX2lkX2ZyZWUpOgorCSAgVXNlIEdTbGljZSB3aGVuIHRoZSBnbGliIHdlIGJ1aWxkIGFnYWluc3QgaXMgPj0gMi4xMAorCisyMDA2LTA3LTAzIDE2OjQ2OjA3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0ZWxlbWVudC5jOiBTbWFsbCBjbGVhbnVwIGluIHBhZCBhY3RpdmF0aW9uIGNvZGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X3BhZHNfYWN0aXZhdGUpOgorCSAgU21hbGwgY2xlYW51cCBpbiBwYWQgYWN0aXZhdGlvbiBjb2RlLgorCisyMDA2LTA3LTAzIDE0OjE0OjQ4ICswMDAwICBQZXRlciBLamVsbGVyc3RlZHQgPHBrakBheGlzLmNvbT4KKworCSAgVGhlIGF0dGFjaGVkIHBhdGNoIHdpbGwgbWFrZSB0aGUgaW5jbHVzaW9uIG9mIGdldHRleHQuaCB1bmNvbmRpdGlvbmFsIGluIGdzdC9nc3QtaTE4bi1hcHAuaCBhbmQgZ3N0L2dzdC1pMThuLWxpYi5oLCBhLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBQZXRlciBLamVsbGVyc3RlZHQgPHBraiBhdCBheGlzIGRvdCBjb20+CisJICAqIGdzdC9nc3QtaTE4bi1hcHAuaDoKKwkgICogZ3N0L2dzdC1pMThuLWxpYi5oOgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAocHJpbnRfc2lnbmFsX2luZm8pOgorCSAgVGhlIGF0dGFjaGVkIHBhdGNoIHdpbGwgbWFrZSB0aGUgaW5jbHVzaW9uIG9mIGdldHRleHQuaCB1bmNvbmRpdGlvbmFsIGluCisJICBnc3QvZ3N0LWkxOG4tYXBwLmggYW5kIGdzdC9nc3QtaTE4bi1saWIuaCwgYW5kIGl0IHdpbGwgcmVtb3ZlIHRoZSBpbmNsdXNpb24gb2YKKwkgIGxpYmludGwuaCBpbiB0b29scy9nc3QtaW5zcGVjdC5jLgorCSAgVGhpcyBhbGxvd3MgdXNlIG9mIC0tZGlzYWJsZS1ubHMgYWdhaW4gYW5kIGZpeGVzICMzNDQ2NDIuCisKKzIwMDYtMDctMDMgMTE6MTA6NDMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6CisJICBmaXggbGVhaworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaXggbGVhaworCisyMDA2LTA3LTAzIDEwOjMwOjQ5ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBnc3QvZ3N0cGFkLmM6IEltcGxlbWVudCBwYWQgYmxvY2tpbmcgb24gZXZlbnRzIGFjY29yZGluZyB0byBwYXJ0LWJsb2NrLnR4dC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChoYW5kbGVfcGFkX2Jsb2NrKSwgKGdzdF9wYWRfcHVzaF9ldmVudCk6CisJICBJbXBsZW1lbnQgcGFkIGJsb2NraW5nIG9uIGV2ZW50cyBhY2NvcmRpbmcgdG8gcGFydC1ibG9jay50eHQuCisJICBNb3JlIGNvbW1lbnRzIG9uIGJlaGF2aW91ci4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmM6ICh0ZXN0X2V2ZW50KToKKwkgIFNlbmQgZXZlbnQgdG8gcGVlciBwYWQgb2YgYmxvY2tlZCBwYWQgKGVsc2UgaXQgd2lsbCBibG9jaykuCisKKzIwMDYtMDctMDIgMjM6MjI6MzEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOiBpZiB3ZSBnZXQgdGhlIHdyb25nIG1lc3NhZ2UsIGdpdmUgdXMgdGhlIHR5cGVzIGFzIHN0cmluZworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6IChnc3RfY2hlY2tfbWVzc2FnZV9lcnJvciksCisJICAoZ3N0X2NoZWNrX3J1bl9zdWl0ZSk6CisJICBpZiB3ZSBnZXQgdGhlIHdyb25nIG1lc3NhZ2UsIGdpdmUgdXMgdGhlIHR5cGVzIGFzIHN0cmluZworCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogKGdzdF9maWxlX3NyY19zdGFydCk6CisJICBGaXggYSB0cmFuc2xhdGFibGUKKwkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNyYy5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgYWRkIGEgdGVzdCBmb3IgdHJ5aW5nIHRvIG9wZW4gYSBub24tZXhpc3RpbmcgZmlsZQorCisyMDA2LTA3LTAyIDIyOjQ0OjI0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkgIGFkZCBtYWNyb3MKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkIG1hY3JvcworCisyMDA2LTA3LTAyIDIyOjI4OjM4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICByZW1vdmUgZG91YmxlIHZhcgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICByZW1vdmUgZG91YmxlIHZhcgorCisyMDA2LTA3LTAyIDIyOjI3OjMyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZS5hbToKKwkgIGNsZWFuIG1vcmUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgY2xlYW4gbW9yZQorCisyMDA2LTA3LTAyIDIyOjIwOjIwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZG9jcy9nc3QvLmdpdGlnbm9yZToKKwkqIGRvY3MvbGlicy8uZ2l0aWdub3JlOgorCSogdGVzdHMvYmVuY2htYXJrcy8uZ2l0aWdub3JlOgorCSogdGVzdHMvY2hlY2svZWxlbWVudHMvLmdpdGlnbm9yZToKKwkqIHRlc3RzL2NoZWNrL2dlbmVyaWMvLmdpdGlnbm9yZToKKwkqIHRlc3RzL2NoZWNrL2dzdC8uZ2l0aWdub3JlOgorCSogdGVzdHMvY2hlY2svbGlicy8uZ2l0aWdub3JlOgorCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzLy5naXRpZ25vcmU6CisJKiB0ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyLy5naXRpZ25vcmU6CisJKiB0ZXN0cy9leGFtcGxlcy9oZWxsb3dvcmxkLy5naXRpZ25vcmU6CisJKiB0ZXN0cy9leGFtcGxlcy9sYXVuY2gvLmdpdGlnbm9yZToKKwkqIHRlc3RzL2V4YW1wbGVzL21ldGFkYXRhLy5naXRpZ25vcmU6CisJKiB0ZXN0cy9leGFtcGxlcy9xdWV1ZS8uZ2l0aWdub3JlOgorCSogdGVzdHMvZXhhbXBsZXMvdHlwZWZpbmQvLmdpdGlnbm9yZToKKwkqIHRlc3RzL2V4YW1wbGVzL3htbC8uZ2l0aWdub3JlOgorCSAgbW9hcCBpZ25vcmUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgbW9hcCBpZ25vcmUKKworMjAwNi0wNy0wMiAyMjoxNzozMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIHRlc3RzL2NoZWNrL2dzdC9nc3RiaW4uYzogYWRkIGEgdGVzdCBmb3IgYWRkaW5nIHNlbGYKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RfYmluX3N1aXRlKToKKwkgIGFkZCBhIHRlc3QgZm9yIGFkZGluZyBzZWxmCisKKzIwMDYtMDctMDIgMjI6MDU6NDggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOiBhZGQgc29tZSBhc3NlcnRfIGFzIGFsaWFzIGZvciBmYWlsX3VubGVzc18qCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKKwkgIGFkZCBzb21lIGFzc2VydF8gYXMgYWxpYXMgZm9yIGZhaWxfdW5sZXNzXyoKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdC5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3N1aXRlKToKKwkgIGluY3JlYXNlIHRlc3QgY292ZXJhZ2UKKworMjAwNi0wNy0wMiAyMTo1NDo0MyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIE1ha2VmaWxlLmFtOiBpbmNsdWRlIGxjb3YubWFrIGZvciBsY292IGNvdmVyYWdlIGdlbmVyYXRpb24KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBNYWtlZmlsZS5hbToKKwkgIGluY2x1ZGUgbGNvdi5tYWsgZm9yIGxjb3YgY292ZXJhZ2UgZ2VuZXJhdGlvbgorCSAgKiB0b29scy9NYWtlZmlsZS5hbToKKwkgIGFkZCB0byBDTEVBTkZJTEVTCisKKzIwMDYtMDctMDIgMjE6NTI6NTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBjb21tb246CisJKiBnc3QvZ3N0ZXZlbnQuaDoKKwkqIGdzdC9nc3RtZXNzYWdlLmg6CisJICB3aGl0ZXNwYWNlL2RvYyBmaXhlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB3aGl0ZXNwYWNlL2RvYyBmaXhlcworCisyMDA2LTA3LTAyIDE2OjI3OjE0ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICB0ZXN0cy9jaGVjay9lbGVtZW50cy8uY3ZzaWdub3JlOiBtb2FwaW5nCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvLmN2c2lnbm9yZToKKwkgIG1vYXBpbmcKKworMjAwNi0wNy0wMiAxNDozOToxMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGNvbmZpZ3VyZS5hYzogZG9uJ3Qgc2V0IENGTEFHUyBhbmQgZnJpZW5kcyBmb3IgZ2NvdiwgZG9uZSBmcm9tIEdTVF9HQ09WIG5vdworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgIGRvbid0IHNldCBDRkxBR1MgYW5kIGZyaWVuZHMgZm9yIGdjb3YsIGRvbmUgZnJvbSBHU1RfR0NPViBub3cKKwkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICBjbGVhbiB1cCBnY292IGZpbGVzCisKKzIwMDYtMDctMDIgMTQ6Mzc6MTAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBnc3QvZ3N0Y2Fwcy5jOiByZW1vdmUgZ3N0X2NhcHNfc2ltcGxpZnk7IGl0IHdhcyBub3QgZGVjbGFyZWQgYW5kIG5vdCB1c2VkIGFuZCBkZXByZWNhdGVkIGluIDAuOAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RjYXBzLmM6IChnc3RfY2Fwc19yZW1vdmVfYW5kX2dldF9zdHJ1Y3R1cmUpOgorCSAgcmVtb3ZlIGdzdF9jYXBzX3NpbXBsaWZ5OyBpdCB3YXMgbm90IGRlY2xhcmVkIGFuZCBub3QgdXNlZAorCSAgYW5kIGRlcHJlY2F0ZWQgaW4gMC44CisKKzIwMDYtMDctMDIgMTQ6MDU6NTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6IGRvbid0IHB1dCBlbXB0eSBwYXRocyBvbiBQWVRIT05QQVRICisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOgorCSAgZG9uJ3QgcHV0IGVtcHR5IHBhdGhzIG9uIFBZVEhPTlBBVEgKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgIHJlbW92ZSBzb21lIHN5bWJvbHMgdGhhdCBhcmUgbm90IHRoZXJlCisKKzIwMDYtMDctMDIgMTI6NTc6MTkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOgorCSAgdW5icmVhayB0ZXN0CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHVuYnJlYWsgdGVzdAorCisyMDA2LTA3LTAyIDEyOjU0OjAzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0L2dzdGNhcHMuYzogd2hpdGVzcGFjZSBmaXhlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RjYXBzLmM6IChnc3RfY2Fwc19jb21wYXJlX3N0cnVjdHVyZXMpOgorCSAgd2hpdGVzcGFjZSBmaXhlcworCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RjYXBzLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RfY2Fwc19zdWl0ZSk6CisJICBhZGQgbW9yZSB0ZXN0cworCisyMDA2LTA3LTAyIDEyOjUyOjA5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0Ly5naXRpZ25vcmU6CisJICBpZ25vcmUgbW9yZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBpZ25vcmUgbW9yZQorCisyMDA2LTA3LTAyIDA5OjA0OjQ1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgbGlicy9nc3QvZGF0YXByb3RvY29sL01ha2VmaWxlLmFtOiBidWlsZCBkYXRhcHJvdG9jb2wgdGVzdCBieSBsaW5raW5nIHRvIHRoZSBsaWIsIGluc3RlYWQgb2YgY29tcGlsaW5nIHRoZSBzb3VyY2UsIHNvLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL01ha2VmaWxlLmFtOgorCSAgYnVpbGQgZGF0YXByb3RvY29sIHRlc3QgYnkgbGlua2luZyB0byB0aGUgbGliLCBpbnN0ZWFkIG9mCisJICBjb21waWxpbmcgdGhlIHNvdXJjZSwgc28gd2UgZ2V0IGNvdmVyYWdlCisJICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc3JjLmM6IChldmVudF9mdW5jKSwgKHNldHVwX2ZpbGVzcmMpLAorCSAgKGNsZWFudXBfZmlsZXNyYyksIChHU1RfU1RBUlRfVEVTVCksIChmaWxlc3JjX3N1aXRlKToKKwkgIGFkZCBhIHRlc3QgZm9yIGZpbGVzcmMKKworMjAwNi0wNy0wMiAwODoyNjo0OCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzogUHVzaCBjb3ZlcmFnZSBmcm9tIDU5LjA0JSB0byA3MC4wMCUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6IChHU1RfU1RBUlRfVEVTVCksCisJICAoZ3N0X3N0cnVjdHVyZV9zdWl0ZSk6CisJICBQdXNoIGNvdmVyYWdlIGZyb20gNTkuMDQlIHRvIDcwLjAwJQorCisyMDA2LTA3LTAyIDAwOjQwOjU2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOiBQdXNoIGNvdmVyYWdlIGZyb20gNTkuMDQlIHRvIDcwLjAwJQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzogKEdTVF9TVEFSVF9URVNUKSwKKwkgIChnc3Rfc3RydWN0dXJlX3N1aXRlKToKKwkgIFB1c2ggY292ZXJhZ2UgZnJvbSA1OS4wNCUgdG8gNzAuMDAlCisKKzIwMDYtMDctMDIgMDA6Mzk6MjggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBsaWJzL2dzdC9iYXNlLy5naXRpZ25vcmU6CisJKiBsaWJzL2dzdC9jaGVjay8uZ2l0aWdub3JlOgorCSogbGlicy9nc3QvZGF0YXByb3RvY29sLy5naXRpZ25vcmU6CisJICBtb2FwIGlnbm9yZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBtb2FwIGlnbm9yZQorCisyMDA2LTA3LTAyIDAwOjM4OjM1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogbGlicy9nc3QvYmFzZS8uZ2l0aWdub3JlOgorCSAgbW9hcCBpZ25vcmUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgbW9hcCBpZ25vcmUKKworMjAwNi0wNy0wMiAwMDozMzo1MSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOiBnc3QtaW5zcGVjdCBldmVyeSBlbGVtZW50OyB0aGlzIG1ha2VzIHN1cmUgdGhhdCB3ZSBhbHNvIGdldCBjb3ZlcmFnZSBvbiBlbGVtZW50J3MgZ2V0L3NldCBmdS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSAgZ3N0LWluc3BlY3QgZXZlcnkgZWxlbWVudDsgdGhpcyBtYWtlcyBzdXJlIHRoYXQgd2UgYWxzbyBnZXQKKwkgIGNvdmVyYWdlIG9uIGVsZW1lbnQncyBnZXQvc2V0IGZ1bmN0aW9ucworCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6IChHU1RfU1RBUlRfVEVTVCksCisJICAoZ3N0X3N0cnVjdHVyZV9zdWl0ZSk6CisJICBQdXNoIGNvdmVyYWdlIGZyb20gNTkuMDQlIHRvIDcwLjAwJQorCisyMDA2LTA3LTAxIDIzOjI2OjA2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgY29uZmlndXJlLmFjOiBzZXQgQ0ZMQUdTIGFuZCBmcmllbmRzIHRvIC1PMCBpZiBnY292IGlzIGJlaW5nIHVzZWQgYWRkIEdDT1YgTElCUworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgIHNldCBDRkxBR1MgYW5kIGZyaWVuZHMgdG8gLU8wIGlmIGdjb3YgaXMgYmVpbmcgdXNlZAorCSAgYWRkIEdDT1YgTElCUworCSAgKiBnc3QvTWFrZWZpbGUuYW06CisJICAqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06CisJICAqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmFtOgorCSAgKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvTWFrZWZpbGUuYW06CisJICAqIGxpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZS5hbToKKwkgICogcGx1Z2lucy9pbmRleGVycy9NYWtlZmlsZS5hbToKKwkgIGFkZCBtYWtlZmlsZSBydWxlcyB0byBnZW5lcmF0ZSBnY292IGRhdGEgYW5kIGNsZWFuIHVwCisJICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSAgYWRkIGEgY292ZXJhZ2UgdGFyZ2V0IHRoYXQgZ2VuZXJhdGVzIGFuIGh0bWwgb3ZlcnZpZXcKKwkgIG9mIGNvdmVyYWdlIGRhdGEKKworMjAwNi0wNy0wMSAyMzoxOToyOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJICBmaXggZG9jcyBidWlsZAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaXggZG9jcyBidWlsZAorCisyMDA2LTA3LTAxIDIwOjU2OjU2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgdGVzdHMvY2hlY2svOiB1c2UgdGhlIG5ldyBtYWNybworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzaW5rLmM6CisJICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzcmMuYzoKKwkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvZmRzcmMuYzoKKwkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvaWRlbnRpdHkuYzoKKwkgICogdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jOiAoZ3N0X3NpbmtzX3N1aXRlKToKKwkgICogdGVzdHMvY2hlY2svZ2VuZXJpYy9zdGF0ZXMuYzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdC5jOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YWJpLmM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RiaW4uYzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOiAoZ3N0X2J1ZmZlcl9zdWl0ZSk6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RidXMuYzogKGdzdF9idXNfc3VpdGUpOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZWxlbWVudC5jOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzogKGdzdF9ldmVudF9zdWl0ZSk6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0aXRlcmF0b3IuYzogKGdzdF9pdGVyYXRvcl9zdWl0ZSk6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZXNzYWdlLmM6IChnc3RfbWVzc2FnZV9zdWl0ZSk6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RtaW5pb2JqZWN0LmM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RvYmplY3QuYzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHBsdWdpbi5jOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cXVlcnkuYzogKGdzdF9xdWVyeV9zdWl0ZSk6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RzZWdtZW50LmM6IChnc3Rfc2VnbWVudF9zdWl0ZSk6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHN5c3RlbWNsb2NrLmM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R0YWcuYzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHRhc2suYzogKGdzdF90YXNrX3N1aXRlKToKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOgorCSAgKiB0ZXN0cy9jaGVjay9saWJzL2FkYXB0ZXIuYzoKKwkgICogdGVzdHMvY2hlY2svbGlicy9iYXNlc3JjLmM6CisJICAqIHRlc3RzL2NoZWNrL2xpYnMvY29sbGVjdHBhZHMuYzoKKwkgICogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6CisJICAqIHRlc3RzL2NoZWNrL2xpYnMvZ2RwLmM6IChnc3RfZHBfc3VpdGUpOgorCSAgKiB0ZXN0cy9jaGVjay9saWJzL2dzdG5ldGNsaWVudGNsb2NrLmM6CisJICAqIHRlc3RzL2NoZWNrL2xpYnMvZ3N0bmV0dGltZXByb3ZpZGVyLmM6CisJICAqIHRlc3RzL2NoZWNrL2xpYnMvbGlic2FiaS5jOiAobGlic2FiaV9zdWl0ZSk6CisJICAqIHRlc3RzL2NoZWNrL2xpYnMvdHlwZWZpbmRoZWxwZXIuYzoKKwkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL2NsZWFudXAuYzoKKwkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOgorCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jOgorCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc3RyZXNzLmM6IChzdHJlc3Nfc3VpdGUpOgorCSAgdXNlIHRoZSBuZXcgbWFjcm8KKworMjAwNi0wNy0wMSAyMDo1NDoyNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLio6IGNyZWF0ZSBhIG1hY3JvIGFuZCBmdW5jdGlvbiBzbyB0aGF0IHRoZSBzaW1wbGUgdW5pdCB0ZXN0IGNhc2UgY2FuIGJlIGp1c3Qgb25lIG1hY3JvIHRvIGNyZS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6IChnc3RfY2hlY2tfcnVuX3N1aXRlKToKKwkgICogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKKwkgIGNyZWF0ZSBhIG1hY3JvIGFuZCBmdW5jdGlvbiBzbyB0aGF0IHRoZSBzaW1wbGUgdW5pdCB0ZXN0CisJICBjYXNlIGNhbiBiZSBqdXN0IG9uZSBtYWNybyB0byBjcmVhdGUgbWFpbigpCisKKzIwMDYtMDYtMzAgMTM6MTc6NDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC86IEZpeCBkZXNlcmlhbGlzYXRpb24gZnJvbSBYTUwuIFNldCBwYXJlbnQgbWFudWFsbHkgaW5zdGVhZCBvZiB1c2luZyBnc3RfYmluX2FkZCgpLCBzaW5jZSBnc3RfYmluX2FkZCgpIHdpbGwgdW5saS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fcmVzdG9yZV90aHlzZWxmKToKKwkgICogZ3N0L2dzdHhtbC5jOiAoZ3N0X3htbF9tYWtlX2VsZW1lbnQpOgorCSAgRml4IGRlc2VyaWFsaXNhdGlvbiBmcm9tIFhNTC4gU2V0IHBhcmVudCBtYW51YWxseQorCSAgaW5zdGVhZCBvZiB1c2luZyBnc3RfYmluX2FkZCgpLCBzaW5jZSBnc3RfYmluX2FkZCgpCisJICB3aWxsIHVubGluayBhbGwgcGFkcyBvZiB0aGUgZWxlbWVudCBiZWluZyBhZGRlZC4KKwkgIEZpeGVzICMzNDE2NjcuCisKKzIwMDYtMDYtMjggMTU6MTk6MDggKzAwMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgorCisJICBnc3QvZ3N0LmM6IEZpeCBtaXNzaW5nIGdfc3RyZHVwKCkgYW5kIGRvdWJsZSBmcmVlIHdoZW4gdXNpbmcgdGhlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBQZXRlciBLamVsbGVyc3RlZHQgPHBraiBhdCBheGlzIGNvbT4KKwkgICogZ3N0L2dzdC5jOiAocHJlcGFyZV9mb3JfbG9hZF9wbHVnaW5fZnVuYyksIChzcGxpdF9hbmRfaXRlcmF0ZSk6CisJICBGaXggbWlzc2luZyBnX3N0cmR1cCgpIGFuZCBkb3VibGUgZnJlZSB3aGVuIHVzaW5nIHRoZQorCSAgLS1nc3QtcGx1Z2luLWxvYWQgY29tbWFuZCBsaW5lIG9wdGlvbiAoIzM0NjA5NykuCisKKzIwMDYtMDYtMjMgMTM6MTY6NDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RpbmZvLmM6IFByb21vdGUgR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyBpbiBleGFtcGxlIGluIGRvY3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGluZm8uYzoKKwkgIFByb21vdGUgR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyBpbiBleGFtcGxlIGluIGRvY3MuCisJICAqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgorCSAgKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmM6CisJICBVc2UgR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyBoZXJlIHRvbyAoIzM0MjUwMykuCisKKzIwMDYtMDYtMjMgMTA6MzA6MDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGRvY3MvbWFudWFsL2FkdmFuY2VkLWRhdGFhY2Nlc3MueG1sOiBGaXggYnVmZmVyIHByb2JlIGV4YW1wbGUgY29tcGlsYXRpb24gaW4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbDoKKwkgIEZpeCBidWZmZXIgcHJvYmUgZXhhbXBsZSBjb21waWxhdGlvbiBpbgorCSAgQURNICgjMzQ1NzA4KS4KKworMjAwNi0wNi0yMiAxNzowOToxMyArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgZ3N0L2dzdGVsZW1lbnQuYzogV2UgbmVlZCB0byBkZWFjdGl2YXRlIHNyYyBwYWRzIGZpcnN0IGFuZCB0aGVuIHNpbmsgcGFkcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfcGFkc19hY3RpdmF0ZSk6CisJICBXZSBuZWVkIHRvIGRlYWN0aXZhdGUgc3JjIHBhZHMgZmlyc3QgYW5kIHRoZW4gc2luayBwYWRzLgorCSAgVGhlIHJlYXNvbiBpcyB0aGUgc3JjIHBhZHMgbWlnaHQgYmUgYmxvY2tpbmcgd2hpbGUgaG9sZGluZyB0aGUgc3RyZWFtaW5nCisJICBsb2NrLCBzbyB3ZSBuZWVkIHRvIGRlYWN0aXZhdGUgdGhlbSBmaXJzdCBzbyB0aGF0IGRlYWN0aXZhdGluZyB0aGUgc2luaworCSAgcGFkcyBkb2Vzbid0IGJsb2NrIChzaW5jZSBpdCB3aWxsIHJlcXVpcmUgdGhlIHN0cmVhbWluZyBsb2NrKS4KKworMjAwNi0wNi0yMiAxNToxMjo1MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IEZvcmdvdCB0byByZW1vdmUgdHdvIHVubmVlZGVkIHVucmVmcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fYnVmZmVyX2FsbG9jKToKKwkgIEZvcmdvdCB0byByZW1vdmUgdHdvIHVubmVlZGVkIHVucmVmcy4KKwkgIFNpbXBsaWZ5IGEgY2hlY2sgX2lzX2VxdWFsIGFsbHJlYWR5IGNoZWNrcyB0aGUgb2J2aW91cyBjYXNlLgorCisyMDA2LTA2LTIyIDE0OjA5OjQxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL2Rlc2lnbi9wYXJ0LWJsb2NrLnR4dDogU29tZSBkb2NzIGFib3V0IHdoYXQgcGFkX2Jsb2NrIHNob3VsZCBkby4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWJsb2NrLnR4dDoKKwkgIFNvbWUgZG9jcyBhYm91dCB3aGF0IHBhZF9ibG9jayBzaG91bGQgZG8uCisKKzIwMDYtMDYtMjIgMTM6NTE6MTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RjYXBzLmM6IEZpeCBjcmFzaGVyIHdoZW4gcGFzc2VkIE5VTEwuIERvYyBjbGFyaWZpY2F0aW9uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RjYXBzLmM6IChnc3RfY2Fwc19yZXBsYWNlKToKKwkgIEZpeCBjcmFzaGVyIHdoZW4gcGFzc2VkIE5VTEwuIERvYyBjbGFyaWZpY2F0aW9uLgorCSAgT3B0aW1pemUgZm9yIHRoZSB0cml2aWFsIGNhc2UuCisJICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX2NoYW5nZV9zdGF0ZSk6CisJICBTbWFsbCBjbGVhbnVwcy4KKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfbG9vcCk6CisJICBTbWFsbCBkb2N1bWVudGF0aW9uIGNsZWFudXAuCisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9idWZmZXJfYWxsb2MpOgorCSAgRG9uJ3QgdXNlIHNpbGx5IGdzdF9wYWRfZ2V0X25lZ290aWF0ZWRfY2FwcywgR1NUX1BBRF9DQVBTCisJICBpcyB3aGF0IHdlIG5lZWQgYW5kIGl0IGF2b2lkcyBhIHdob2xlIGxvdCBvZiByZWR1bmRhbnQKKwkgIHJlZmNvdW50IG9wZXJhdGlvbnMuCisKKzIwMDYtMDYtMjIgMDg6NTM6NDAgKzAwMDAgIFBoaWxpcCBKw6RnZW5zdGVkdCA8cGhpbGlwQGx5c2F0b3IubGl1LnNlPgorCisJICBkb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbDogRml4ICdFbWJlZGRpbmcgc3RhdGljIGVsZW1lbnRzJyBzZWN0aW9uIHRvIHVzZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogUGhpbGlwIErDpGdlbnN0ZWR0ICA8cGhpbGlwIGF0IGx5c2F0b3IgbGl1IHNlPgorCSAgKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbDoKKwkgIEZpeCAnRW1iZWRkaW5nIHN0YXRpYyBlbGVtZW50cycgc2VjdGlvbiB0byB1c2UKKwkgIEdTVF9QTFVHSU5fREVGSU5FX1NUQVRJQyAoIzM0NTYwNykuCisKKzIwMDYtMDYtMjEgMTE6MTI6MjQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmM6IEF0dGVtcHQgdG8gJ2ZpeCcgc3B1cmlvdXNseSBmYWlsaW5nIHRlc3QgY2FzZTogaXQgc2VlbXMgbGlrZSB0aGUgdGltZW91dC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmM6ICh0ZXN0X3N0b3BfZnJvbV9hcHApOgorCSAgQXR0ZW1wdCB0byAnZml4JyBzcHVyaW91c2x5IGZhaWxpbmcgdGVzdCBjYXNlOiBpdCBzZWVtcyBsaWtlIHRoZQorCSAgdGltZW91dCBvZiBoYWxmIGEgc2Vjb25kIGlzIHNpbXBseSB0b28gc21hbGwgd2hlbiB0aGUgc3lzdGVtIGlzIHVuZGVyCisJICBsb2FkIG90aGVyd2lzZSwgYW5kIHRoZSB0aW1lb3V0IGRvZXNuJ3QgcmVhbGx5IHNlZW0gdG8gc2VydmUgYW55CisJICBwYXJ0aWN1bGFyIHB1cnBvc2UgaGVyZS4gR2l2ZSB0aGUgcGlwZWxpbmUgYSBmZXcgc2Vjb25kcyB0byBwcmVyb2xsCisJICBmaXJzdCwgYW5kIHRoZW4gZ2l2ZSBpdCBhbm90aGVyIGhhbGYgYSBzZWNvbmQgdG8gZ28gZnJvbSBQQVVTRUQgdG8KKwkgIFBMQVlJTkcgYW5kIG1hcnNoYWwgdGhlIG1lc3NhZ2UgaW50byB0aGUgbWFpbiB0aHJlYWQuCisKKzIwMDYtMDYtMjEgMTA6MTQ6MDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHRvb2xzL2dzdC1mZWVkYmFjay1tLm06IERvbid0IG9ubHkgdXNlIHVudmVyc2lvbmVkIHRvb2xzLCB0cnkgdmVyc2lvbmVkIHRvb2xzIGFzIHdlbGwgKCMzNDUwODYpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1mZWVkYmFjay1tLm06CisJICBEb24ndCBvbmx5IHVzZSB1bnZlcnNpb25lZCB0b29scywgdHJ5IHZlcnNpb25lZCB0b29scyBhcyB3ZWxsCisJICAoIzM0NTA4NikuCisKKzIwMDYtMDYtMjEgMTA6MDE6NTggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RidXMuYzogRml4IHNvbWUgdHlwb3MsIG1ha2UgZG9jcyBtb3JlIGV4cGxpY2l0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RidXMuYzogKGdzdF9idXNfY2xhc3NfaW5pdCk6CisJICBGaXggc29tZSB0eXBvcywgbWFrZSBkb2NzIG1vcmUgZXhwbGljaXQuCisKKzIwMDYtMDYtMjAgMDg6NDA6NDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOiBBZGRlZCBzb21lIG1vcmUgZ2hvc3RwYWQgdGVzdHMsIG1haW5seSBibG9ja2luZyBhbmQgcHJvYmVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOiAoYmxvY2tfY2FsbGJhY2spLAorCSAgKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9naG9zdF9wYWRfc3VpdGUpOgorCSAgQWRkZWQgc29tZSBtb3JlIGdob3N0cGFkIHRlc3RzLCBtYWlubHkgYmxvY2tpbmcKKwkgIGFuZCBwcm9iZXMuCisKKzIwMDYtMDYtMTkgMDg6NTY6NDggKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KKworCSogZ3N0cmVhbWVyLnNwZWMuaW46CisJICBsYXRlc3QgdXBkYXRlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBsYXRlc3QgdXBkYXRlcworCisyMDA2LTA2LTE2IDE2OjI4OjM3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLio6IENoZWNrIGlmIHdlIGNhbiBzZWVrIGluIHRoZSBmaWxlIGluc3RlYWQgb2YgYXNzdW1pbmcgd2UgYWx3YXlzIGNhbi4gUG9zdCBhbiBlcnJvciB3aGUuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IChnc3RfZmlsZV9zaW5rX29wZW5fZmlsZSksCisJICAoZ3N0X2ZpbGVfc2lua19jbG9zZV9maWxlKSwgKGdzdF9maWxlX3NpbmtfZG9fc2VlayksCisJICAoZ3N0X2ZpbGVfc2lua19ldmVudCksIChnc3RfZmlsZV9zaW5rX3JlbmRlcik6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuaDoKKwkgIENoZWNrIGlmIHdlIGNhbiBzZWVrIGluIHRoZSBmaWxlIGluc3RlYWQgb2YgYXNzdW1pbmcKKwkgIHdlIGFsd2F5cyBjYW4uIFBvc3QgYW4gZXJyb3Igd2hlbiB3ZSBhcmUgYXNrZWQgdG8gc2VlayBpbiBhCisJICBub24tc2Vla2FibGUgZmlsZSAobGlrZSBhIGZpZm8pLiBGaXhlcyAjMzQzMzEyLgorCSAgU29tZSBjbGVhbnVwcy4KKworMjAwNi0wNi0xNiAxNDozMTowNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgdG9vbHMvZ3N0LWxhdW5jaC4xLmluOiBVbi1nYXJibGUgKGZvdXJjYykgYml0IGluIGZpbHRlcmVkIGNhcHMgc2VjdGlvbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0b29scy9nc3QtbGF1bmNoLjEuaW46CisJICBVbi1nYXJibGUgKGZvdXJjYykgYml0IGluIGZpbHRlcmVkIGNhcHMgc2VjdGlvbi4KKworMjAwNi0wNi0xNiAwOTozOTo1NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZG9jcy9tYW51YWwvOiBEb24ndCBsZWFrIGJ1cyByZWZlcmVuY2UgaW4gc2FtcGxlIGNvZGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9tYW51YWwvYWR2YW5jZWQtYXV0b3BsdWdnaW5nLnhtbDoKKwkgICogZG9jcy9tYW51YWwvYmFzaWNzLWhlbGxvd29ybGQueG1sOgorCSAgKiBkb2NzL21hbnVhbC9oaWdobGV2ZWwtY29tcG9uZW50cy54bWw6CisJICBEb24ndCBsZWFrIGJ1cyByZWZlcmVuY2UgaW4gc2FtcGxlIGNvZGUuCisKKzIwMDYtMDYtMTYgMDg6MzA6NDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGF1dG9nZW4uc2g6IEFkZCBkZWZhdWx0IGZvciBuZXcgLS1lbmFibGUtcGx1Z2luLWRvY3Mgc3dpdGNoLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGF1dG9nZW4uc2g6CisJICBBZGQgZGVmYXVsdCBmb3IgbmV3IC0tZW5hYmxlLXBsdWdpbi1kb2NzIHN3aXRjaC4KKwkgICogY29uZmlndXJlLmFjOgorCSAgVXNlIG5ldyBHU1RfUExVR0lOX0RPQ1MgbWFjcm8gdG8gY2hlY2sgZm9yIHB5eG1sIGV0Yy4KKwkgIEZpeGVzICMzNDQwMzkuCisJICAqIGRvY3MvTWFrZWZpbGUuYW06CisJICBVc2UgbmV3IEVOQUJMRV9QTFVHSU5fRE9DUyBjb25kaXRpb25hbC4KKworMjAwNi0wNi0xNCAxMDozNDoxNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJpbi5jOiBNYWtlIGl0IGNsZWFyIHdpdGggYSBGSVhNRSBhbmQgYSByZWFsIGRlZmluZSB3aGF0IHRoZSAjaWYgMCBwcmV2aW91c2x5IGRpc2FibGVkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RiaW4uYzogKGJpbl9xdWVyeV9kdXJhdGlvbl9kb25lKSwgKGdzdF9iaW5fcXVlcnkpOgorCSAgTWFrZSBpdCBjbGVhciB3aXRoIGEgRklYTUUgYW5kIGEgcmVhbCBkZWZpbmUgd2hhdCB0aGUgI2lmIDAKKwkgIHByZXZpb3VzbHkgZGlzYWJsZWQuCisKKzIwMDYtMDYtMTQgMTA6MzE6NDMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvOiBEb24ndCByYW5kb21seSBhbmQgc2lsZW50bHkgcmVzZXQgYSBzZWdtZW50IHdoZW4gdGhlIGZvcm1hdCBjaGFuZ2VzIGFzIHRoaXMgaXMgYSBidWcgc29tZXdoZXJlIHVwc3RyZS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfY29uZmlndXJlX3NlZ21lbnQpLAorCSAgKGdzdF9iYXNlX3NpbmtfcHJlcm9sbF9vYmplY3QpLCAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24pOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc2lua19ldmVudGZ1bmMpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChnc3RfY29sbGVjdF9wYWRzX2V2ZW50KToKKwkgIERvbid0IHJhbmRvbWx5IGFuZCBzaWxlbnRseSByZXNldCBhIHNlZ21lbnQgd2hlbiB0aGUgZm9ybWF0CisJICBjaGFuZ2VzIGFzIHRoaXMgaXMgYSBidWcgc29tZXdoZXJlIHVwc3RyZWFtLiBGaXhlcyAjMzMwMzc5LgorCisyMDA2LTA2LTE0IDA4OjI2OjUzICswMDAwICBXb3V0ZXIgUGFlc2VuIDx3b3V0ZXJAa2FuZ2Fyb290Lm5ldD4KKworCSAgbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6IEZpeCBjb250cm9sbGluZyBvZiBmbG9hdCBwcm9wZXJ0aWVzICgjMzQ0ODQ5KS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IFdvdXRlciBQYWVzZW4gIDx3b3V0ZXIgYXQga2FuZ2Fyb290IG5ldD4KKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6CisJICAoZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfbmV3KToKKwkgIEZpeCBjb250cm9sbGluZyBvZiBmbG9hdCBwcm9wZXJ0aWVzICgjMzQ0ODQ5KS4KKwkgICogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6CisJICAoZ3N0X3Rlc3RfbW9ub19zb3VyY2VfZ2V0X3Byb3BlcnR5KSwKKwkgIChnc3RfdGVzdF9tb25vX3NvdXJjZV9zZXRfcHJvcGVydHkpLAorCSAgKGdzdF90ZXN0X21vbm9fc291cmNlX2NsYXNzX2luaXQpLCAoR1NUX1NUQVJUX1RFU1QpOgorCSAgV2hpbGUgd2UncmUgYXQgaXQsIGFkZCBzb21lIGZsb2F0IHN0dWZmIHRvIHVuaXQgdGVzdC4KKworMjAwNi0wNi0xMyAxOToyNDozNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGRvY3MvOiBhZGQgYSBnZHAgaW1hZ2UKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL1JFQURNRToKKwkgICogZG9jcy9pbWFnZXMvZ2RwLWhlYWRlci5zdmc6CisJICBhZGQgYSBnZHAgaW1hZ2UKKwkgICogZG9jcy9saWJzL01ha2VmaWxlLmFtOgorCSAgKiBkb2NzL2xpYnMvZ2RwLWhlYWRlci5wbmc6CisJICAqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzoKKwkgIGFkZCBpdCB0byB0aGUgQVBJIGRvY3MKKwkgICogZG9jcy9tYW51YWwvaW50cm8tbW90aXZhdGlvbi54bWw6CisJICBmaXggdHlwbworCisyMDA2LTA2LTEzIDE2OjQxOjM3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0LmM6IElmIHRoZSBmb3JrKCknZWQgY2hpbGQgcHJvY2VzcyBjYW4ndCB3cml0ZSB0aGUgdXBkYXRlZCByZWdpc3RyeSBjYWNoZSBmaWxlIHRvIGRpc2sgZm9yIHNvbWUgcmVhc29uLCBtYWtlIGkuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0LmM6IChzY2FuX2FuZF91cGRhdGVfcmVnaXN0cnkpLCAoaW5pdF9wb3N0KToKKwkgIElmIHRoZSBmb3JrKCknZWQgY2hpbGQgcHJvY2VzcyBjYW4ndCB3cml0ZSB0aGUgdXBkYXRlZCByZWdpc3RyeSBjYWNoZQorCSAgZmlsZSB0byBkaXNrIGZvciBzb21lIHJlYXNvbiwgbWFrZSBpdCBleGl0IHdpdGggYSBmYWlsdXJlIGV4aXQgY29kZSwKKwkgIHNvIHRoYXQgdGhlIHBhcmVudCBjYW4gdGhlbiByZS1zY2FuIHRoZSBwbHVnaW5zIGl0c2VsZiBhbmQgdXBkYXRlIHRoZQorCSAgcmVnaXN0cnkgc3RydWN0dXJlcyBpbiBtZW1vcnkgYW5kIHdvcmsgd2l0aCB0aGF0IChyYXRoZXIgdGhhbiBmYWlsaW5nCisJICB3aGVuIGNyZWF0aW5nIGVsZW1lbnRzIGJlY2F1c2Ugc2VlbWluZ2x5IG5vIHBsdWdpbnMgYXJlIGF2YWlsYWJsZSkuCisJICBSZWZhY3RvciByZWdpc3RyeSBzY2FubmluZyBjb2RlIGludG8gc2VwYXJhdGUgZnVuY3Rpb24gZm9yIHRoaXMgYW5kCisJICBhbHNvIHNlcGFyYXRlIGZvcmsoKSBhbmQgbm9uLWZvcmsoKSBjb2RlIHBhdGhzLiBGaXhlcyAjMzQ0NzQ4LgorCisyMDA2LTA2LTEzIDE2OjI0OjQzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbDogRml4IHdyb25nIFBsdWdpbkRlc2MuIEZpeGVzICMzNDQ3NTUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWw6CisJICBGaXggd3JvbmcgUGx1Z2luRGVzYy4gRml4ZXMgIzM0NDc1NS4KKworMjAwNi0wNi0xMyAxMzozMDo0NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6IEZpeCBzaWxseSBidWcgdGhhdCBwcmV2ZW50ZWQgdXMgZnJvbSBjcmVhdGluZyB+Ly5nc3RyZWFtZXItMC4xMCBhbmQgd3JpdGluZyB0aGUgcmVnaXN0cnkgaW4gb25lLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6IChnc3RfcmVnaXN0cnlfeG1sX3dyaXRlX2NhY2hlKToKKwkgIEZpeCBzaWxseSBidWcgdGhhdCBwcmV2ZW50ZWQgdXMgZnJvbSBjcmVhdGluZworCSAgfi8uZ3N0cmVhbWVyLTAuMTAgYW5kIHdyaXRpbmcgdGhlIHJlZ2lzdHJ5IGluIG9uZQorCSAgZ28gKHRoZSBmaXJzdCBjYWxsIHRvIGdfbWtzdGVtcCgpIHdvdWxkIG92ZXJ3cml0ZSB0aGUKKwkgIHBsYWNlaG9sZGVyIGluIHRoZSB0ZW1wbGF0ZSBzdHJpbmcsIHNvIHRoZSBzZWNvbmQgY2FsbAorCSAgdG8gZ19ta3N0ZW1wKCkgYWZ0ZXIgY3JlYXRpbmcgdGhlIG1pc3NpbmcgZGlyZWN0b3J5CisJICB3b3VsZCB0aGVuIGVycm9yIG91dCB3aXRoICdpbnZhbGlkIGFyZ3VtZW50JykuCisKKzIwMDYtMDYtMTMgMTE6MTc6MDIgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkgIGdzdC9nc3QuYzogRnJlZSBzdHJpbmcuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdC5jOiAoaW5pdF9wb3N0KToKKwkgIEZyZWUgc3RyaW5nLgorCisyMDA2LTA2LTEzIDA4OjIwOjI0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0LzogcmVtb3ZlIEdMaWIgMi42IGNvbXBhdGliaWxpdHkgY29kZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nbGliLWNvbXBhdC1wcml2YXRlLmg6CisJICAqIGdzdC9nbGliLWNvbXBhdC5jOgorCSAgKiBnc3QvZ2xpYi1jb21wYXQuaDoKKwkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfc2VyaWFsaXplX2ZsYWdzKToKKwkgIHJlbW92ZSBHTGliIDIuNiBjb21wYXRpYmlsaXR5IGNvZGUKKworMjAwNi0wNi0xMiAxNjo1MDowOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L3BhcnNlL01ha2VmaWxlLmFtOiBGaXggYnVpbGQgd2l0aCAnbWFrZSAtaiBOJyBldmVuIG1vcmUgKCMzNDAwMTYpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9wYXJzZS9NYWtlZmlsZS5hbToKKwkgIEZpeCBidWlsZCB3aXRoICdtYWtlIC1qIE4nIGV2ZW4gbW9yZSAoIzM0MDAxNikuCisKKzIwMDYtMDYtMTIgMDk6Mzc6NTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IEZpeCBkb2NzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICBGaXggZG9jcy4KKworMjAwNi0wNi0xMiAwOToyOTo0OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHNlZ21lbnQuYzogVXNlIEdfVU5MSUtFTFkgdG8gaGVscCB0aGUgY29tcGlsZXIgYSBiaXQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHNlZ21lbnQuYzogKGdzdF9zZWdtZW50X3NldF9kdXJhdGlvbiksCisJICAoZ3N0X3NlZ21lbnRfc2V0X2xhc3Rfc3RvcCksIChnc3Rfc2VnbWVudF9zZXRfc2VlayksCisJICAoZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnRfZnVsbCksIChnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSksCisJICAoZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lKSwgKGdzdF9zZWdtZW50X2NsaXApOgorCSAgVXNlIEdfVU5MSUtFTFkgdG8gaGVscCB0aGUgY29tcGlsZXIgYSBiaXQuCisKKzIwMDYtMDYtMTIgMDk6Mjg6MzUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHNvbmljcHVsc2UuZGU+CisKKwkgIGdzdC86IGNvbnN0aWZ5IHF1YXJrIHJlZ2lzdHJhdGlvbiBzdHJpbmdzLiBGaXhlcyAjMzQ0MTE1CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBTdGVmYW4gS29zdCA8ZW5zb25pYyBhdCBzb25pY3B1bHNlIGRvdCBkZT4KKwkgICogZ3N0L2dzdGV2ZW50LmM6IChnc3RfZXZlbnRfZ2V0X3R5cGUpOgorCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2NoYWluX3VuY2hlY2tlZCksIChnc3RfcGFkX2NoYWluKSwKKwkgIChnc3RfcGFkX3B1c2gpOgorCSAgY29uc3RpZnkgcXVhcmsgcmVnaXN0cmF0aW9uIHN0cmluZ3MuIEZpeGVzICMzNDQxMTUKKwkgIEF2b2lkIHVubmVlZGVkIHR5cGUgY2hlY2tpbmcgaXMgX3BhZF9wdXNoKCkgYnkgaW50ZXJuYWxseQorCSAgY2FsbGluZyBnc3RfcGFkX2NoYWluX3VuY2hlY2tlZCgpLgorCisyMDA2LTA2LTEyIDA5OjIzOjQzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YnVmZmVyLmM6IEluaXQgX3R5cGUgZm9yIGNvbnNpc3RlbmN5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RidWZmZXIuYzogKGdzdF9idWZmZXJfZ2V0X3R5cGUpLCAoZ3N0X2J1ZmZlcl9maW5hbGl6ZSksCisJICAoX2dzdF9idWZmZXJfY29weSksIChnc3RfYnVmZmVyX2lzX21ldGFkYXRhX3dyaXRhYmxlKSwKKwkgIChnc3Rfc3ViYnVmZmVyX2ZpbmFsaXplKSwgKGdzdF9idWZmZXJfY3JlYXRlX3N1YiksCisJICAoZ3N0X2J1ZmZlcl9pc19zcGFuX2Zhc3QpLCAoZ3N0X2J1ZmZlcl9zcGFuKToKKwkgIEluaXQgX3R5cGUgZm9yIGNvbnNpc3RlbmN5LgorCSAgVXNlIF9GTEFHUyBtYWNybyB0byBhdm9pZCB0eXBlIGNoZWNrLgorCSAgQXZvaWQgdW5uZWVkZWQgdHlwZSBjaGVja3MgaW4gc3ViYnVmZXIgY29kZS4KKworMjAwNi0wNi0xMiAwOToxNzo0NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0LzogVXNlIF9DQVNUIG1hY3JvcyB0byBhdm9pZCB1bm5lZWRlZCB0eXBlIGNoZWNraW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3QuYzogKGdzdF9kZWJ1Z19oZWxwKToKKwkgICogZ3N0L2dzdHBsdWdpbi5jOiAoZ3N0X3BsdWdpbl9maW5hbGl6ZSksIChnc3RfcGx1Z2luX2xpc3RfZnJlZSk6CisJICAqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6IChnc3RfcGx1Z2luX2ZlYXR1cmVfZmluYWxpemUpLAorCSAgKGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUpOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzogKGdzdF9yZWdpc3RyeV9hZGRfcGx1Z2luKSwKKwkgIChnc3RfcmVnaXN0cnlfYWRkX2ZlYXR1cmUpLCAoZ3N0X3JlZ2lzdHJ5X3BsdWdpbl9maWx0ZXIpLAorCSAgKGdzdF9yZWdpc3RyeV9mZWF0dXJlX2ZpbHRlciksIChnc3RfcmVnaXN0cnlfZmluZF9wbHVnaW4pLAorCSAgKGdzdF9yZWdpc3RyeV9maW5kX2ZlYXR1cmUpLCAoZ3N0X3JlZ2lzdHJ5X2dldF9wbHVnaW5fbGlzdCksCisJICAoZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9mZWF0dXJlX2xvY2tlZCksIChnc3RfcmVnaXN0cnlfbG9va3VwX2xvY2tlZCk6CisJICAqIGdzdC9nc3RyZWdpc3RyeXhtbC5jOiAobG9hZF9mZWF0dXJlKSwKKwkgIChnc3RfcmVnaXN0cnlfeG1sX3JlYWRfY2FjaGUpLCAoZ3N0X3JlZ2lzdHJ5X3htbF93cml0ZV9jYWNoZSk6CisJICAqIGdzdC9nc3RtaW5pb2JqZWN0LmM6IChnc3RfbWluaV9vYmplY3RfdW5yZWYpLAorCSAgKGdzdF9taW5pX29iamVjdF9yZXBsYWNlKSwgKGdzdF92YWx1ZV9taW5pX29iamVjdF9mcmVlKSwKKwkgIChnc3RfdmFsdWVfbWluaV9vYmplY3RfY29weSk6CisJICBVc2UgX0NBU1QgbWFjcm9zIHRvIGF2b2lkIHVubmVlZGVkIHR5cGUgY2hlY2tpbmcuCisJICBBZGRlZCBzb21lIG1vcmUgR19VTkxJS0VMWS4KKworMjAwNi0wNi0xMiAwOToxMTo0NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJ1ZmZlci5oOiBBdm9pZCB1bm5lZWRlZCB0eXBlIGNoZWNraW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RidWZmZXIuaDoKKwkgIEF2b2lkIHVubmVlZGVkIHR5cGUgY2hlY2tpbmcuCisJICBBUEk6IEdTVF9CVUZGRVJfSVNfRElTQ09OVAorCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5oOgorCSAgQXZvaWQgdHlwZSBjaGVjayBpbiBmbGFnIGFjY2Vzc29yLgorCSAgKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKKwkgICogZ3N0L2dzdHBsdWdpbi5oOgorCSAgKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oOgorCSAgQWRkIF9DQVNUIG1hY3Jvcy4KKwkgIEFQSTogR1NUX0VMRU1FTlRfRkFDVE9SWV9DQVNUCisJICBBUEk6IEdTVF9QTFVHSU5fQ0FTVAorCSAgQVBJOiBHU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVAorCisyMDA2LTA2LTEyIDA5OjA2OjAxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0b2JqZWN0LmM6IEFkZCBHX1VOTElLRUxZIGluIHR5cGUgcmVnaXN0cmF0aW9uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RvYmplY3QuYzogKGdzdF9vYmplY3RfZ2V0X3R5cGUpLCAoZ3N0X29iamVjdF9yZWYpLAorCSAgKGdzdF9vYmplY3RfdW5yZWYpOgorCSAgQWRkIEdfVU5MSUtFTFkgaW4gdHlwZSByZWdpc3RyYXRpb24uCisJICBBdm9pZCB0eXBlIGNoZWNrIGluIF9yZWYvX3VucmVmIHNpbmNlIHRoYXQgaXMgYWxzbworCSAgZG9uZSBpbiBnbGliLgorCisyMDA2LTA2LTEyIDA4OjU1OjIxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBBZGQgR19VTkxJS0VMWSBpbiB0eXBlIHJlZ2lzdHJhdGlvbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZXJyb3IuYzogKGdzdF9nX2Vycm9yX2dldF90eXBlKToKKwkgICogZ3N0L2dzdHBhZHRlbXBsYXRlLmM6IChnc3RfcGFkX3RlbXBsYXRlX2dldF90eXBlKSwKKwkgIChnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXRfdHlwZSk6CisJICAqIGdzdC9nc3R0YWdsaXN0LmM6IChnc3RfdGFnX2xpc3RfZ2V0X3R5cGUpOgorCSAgKiBnc3QvZ3N0dGFnc2V0dGVyLmM6IChnc3RfdGFnX3NldHRlcl9nZXRfdHlwZSk6CisJICAqIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuYzogKGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfdHlwZSk6CisJICAqIGdzdC9nc3R1cmkuYzogKGdzdF91cmlfaGFuZGxlcl9nZXRfdHlwZSk6CisJICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X2RhdGVfZ2V0X3R5cGUpOgorCSAgKiBnc3QvZ3N0eG1sLmM6IChnc3RfeG1sX2dldF90eXBlKToKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19nZXRfdHlwZSksCisJICAoZ3N0X2Jhc2Vfc2lua19wcmVyb2xsX29iamVjdCksIChnc3RfYmFzZV9zaW5rX2dldF9wb3NpdGlvbik6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2dldF90eXBlKToKKwkgIEFkZCBHX1VOTElLRUxZIGluIHR5cGUgcmVnaXN0cmF0aW9uLgorCisyMDA2LTA2LTEyIDA4OjUxOjIwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICB0b29scy9nc3QtaW5zcGVjdC5jOiBQcm9wZXJseSBwcmludCBlbnVtIHZhbHVlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAocHJpbnRfc2lnbmFsX2luZm8pOgorCSAgUHJvcGVybHkgcHJpbnQgZW51bSB2YWx1ZXMuCisKKzIwMDYtMDYtMTIgMDg6NDc6MTYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RpbmZvLio6IEFkZCBzb21lIEdfW1VOXUxJS0VMWS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0aW5mby5jOiAoZ3N0X2RlYnVnX3NldF9hY3RpdmUpLAorCSAgKGdzdF9kZWJ1Z19jYXRlZ29yeV9zZXRfdGhyZXNob2xkKSwgKF9nc3RfZGVidWdfbmFtZW9mX2Z1bmNwdHIpOgorCSAgKiBnc3QvZ3N0aW5mby5oOgorCSAgQWRkIHNvbWUgR19bVU5dTElLRUxZLgorCSAgTWFpbnRhaW4gX19nc3RfZGVidWdfbWluIHRvIGF2b2lkIGZvcm1hdHRpbmcgdGhlIGFyZ3VtZW50cyBvZgorCSAgZGVidWcgbWVzc2FnZXMgdGhhdCB3aWxsIGJlIGRyb3BwZWQgYW55d2F5IHRvIGF2b2lkIGEgbG90IG9mCisJICBvdmVyaGVhZCBmcm9tIHRoZSBkZWJ1Z2dpbmcgc3lzdGVtLgorCisyMDA2LTA2LTExIDIwOjM3OjQxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIHBvL1BPVEZJTEVTLio6IGFkZCBtaXNzaW5nIGZpbGVzIGNvbnRhaW5pbmcgdHJhbnNsYXRhYmxlIHN0cmluZ3MsIHRlbGwgaW50bHRvb2wgYWJvdXQgb25lIGV4Y2VwdGlvbgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBvL1BPVEZJTEVTLmluOgorCSAgKiBwby9QT1RGSUxFUy5za2lwOgorCSAgYWRkIG1pc3NpbmcgZmlsZXMgY29udGFpbmluZyB0cmFuc2xhdGFibGUgc3RyaW5ncywgdGVsbCBpbnRsdG9vbCBhYm91dAorCSAgb25lIGV4Y2VwdGlvbgorCisyMDA2LTA2LTExIDE3OjI4OjE5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIHRlc3RzL2NoZWNrL2xpYnMvLmN2c2lnbm9yZTogYWRkIHRlc3QtYmluYXJ5IHRvIGlnbm9yZSBsaXN0CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svbGlicy8uY3ZzaWdub3JlOgorCSAgYWRkIHRlc3QtYmluYXJ5IHRvIGlnbm9yZSBsaXN0CisKKzIwMDYtMDYtMTEgMTc6MDM6MDYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbDogcmVvcmRlciAocHV0IGRwIGludG8gYSBjaGFwdGVyKSBhbmQgaW5kZW50CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbDoKKwkgIHJlb3JkZXIgKHB1dCBkcCBpbnRvIGEgY2hhcHRlcikgYW5kIGluZGVudAorCisyMDA2LTA2LTExIDExOjU2OjM2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogY29tbW9uOgorCSogZG9jcy9yYW5kb20vYXV0b3Rvb2xzOgorCSAgYWRkIG5vdGVzIG9uIG91ciBhdXRvdG9vbHMgc2V0dXAKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkIG5vdGVzIG9uIG91ciBhdXRvdG9vbHMgc2V0dXAKKworMjAwNi0wNi0xMCAxNzozMjo1MyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkgIGJhY2sgdG8gSEVBRAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBiYWNrIHRvIEhFQUQKKworPT09IHJlbGVhc2UgMC4xMC44ID09PQorCisyMDA2LTA2LTEwIDE3OjA2OjMzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogTkVXUzoKKwkqIFJFTEVBU0U6CisJKiBjb25maWd1cmUuYWM6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgorCSogcG8vYWYucG86CisJKiBwby9hei5wbzoKKwkqIHBvL2JnLnBvOgorCSogcG8vY2EucG86CisJKiBwby9jcy5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkgIHJlbGVhc2luZyAwLjEwLjgKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVsZWFzaW5nIDAuMTAuOAorCisyMDA2LTA2LTEwIDExOjUxOjU4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0L2dzdC5jOiBtb3ZlIHBpZCBkZWNsYXJhdGlvbiB0byBkZWNsYXJhdGlvbiBibG9jaworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3QuYzogKGluaXRfcG9zdCk6CisJICBtb3ZlIHBpZCBkZWNsYXJhdGlvbiB0byBkZWNsYXJhdGlvbiBibG9jaworCisyMDA2LTA2LTEwIDExOjQ3OjQyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0L2dzdC5jOiB1c2UgX2V4aXQoKSBpbnN0ZWFkIG9mIGV4aXQoKSBpbiBvdXIgZm9ya2VkIGNoaWxkOyB0aGlzIGVuc3VyZXMgdGhhdCBub25lIG9mIHRoZSByZWdpc3RlcmVkIGV4aXQgaGFuZGxlcnMgLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdC5jOiAoaW5pdF9wb3N0KToKKwkgIHVzZSBfZXhpdCgpIGluc3RlYWQgb2YgZXhpdCgpIGluIG91ciBmb3JrZWQgY2hpbGQ7IHRoaXMgZW5zdXJlcworCSAgdGhhdCBub25lIG9mIHRoZSByZWdpc3RlcmVkIGV4aXQgaGFuZGxlcnMgZnJvbSB3aGF0ZXZlciBpcyB1c2luZworCSAgR1N0cmVhbWVyIGdldCBleGVjdXRlZC4gIFRoaXMgZml4ZXMgZ25vbWUtbWl4ZXItYXBwbGV0IGZhaWxpbmcKKwkgIHRvIGxvYWQsIGJlY2F1c2UgT1JCaXQgd291bGQgc2h1dCBkb3duLgorCSAgU3BvdHRlZCBieTogRWR3YXJkIEhlcnZleSAgPGVkd2FyZEBmbHVlbmRvLmNvbT4KKwkgIEZpeCBzdWdnZXN0ZWQgYnk6IFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KKwkgIEZpeGVzICMzNDQ0NzQKKworMjAwNi0wNi0wOSAxODo1MjowMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGNvbmZpZ3VyZS5hYzogYmFjayB0byBUUlVOSworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA2LTA2LTA5ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCSAgKiBjb25maWd1cmUuYWM6CisJICBiYWNrIHRvIFRSVU5LCisKKz09PSByZWxlYXNlIDAuMTAuNyA9PT0KKworMjAwNi0wNi0wOSAxODo0OToyNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIE5FV1M6CisJKiBSRUxFQVNFOgorCSogY29uZmlndXJlLmFjOgorCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmFyZ3M6CisJKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuc2lnbmFsczoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICByZWxlYXNpbmcgMC4xMC43CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJlbGVhc2luZyAwLjEwLjcKKworMjAwNi0wNi0wNyAxMDo0NjowNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIDAuMTAuNi4yIHByZXJlbGVhc2UKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICAqIHBvL2FmLnBvOgorCSAgKiBwby9hei5wbzoKKwkgICogcG8vYmcucG86CisJICAqIHBvL2NhLnBvOgorCSAgKiBwby9jcy5wbzoKKwkgICogcG8vZGUucG86CisJICAqIHBvL2VuX0dCLnBvOgorCSAgKiBwby9mci5wbzoKKwkgICogcG8vaXQucG86CisJICAqIHBvL25iLnBvOgorCSAgKiBwby9ubC5wbzoKKwkgICogcG8vcnUucG86CisJICAqIHBvL3NxLnBvOgorCSAgKiBwby9zci5wbzoKKwkgICogcG8vc3YucG86CisJICAqIHBvL3RyLnBvOgorCSAgKiBwby91ay5wbzoKKwkgICogcG8vdmkucG86CisJICAqIHBvL3poX0NOLnBvOgorCSAgKiBwby96aF9UVy5wbzoKKwkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oOgorCSAgMC4xMC42LjIgcHJlcmVsZWFzZQorCisyMDA2LTA2LTA3IDA4OjM4OjMwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBGaXggbGVhayBzcG90dGVkIGJ5IGNvdmVyaXR5IGNoZWNrZXIuIEZpeGVzICMzNDM4MjcKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0aW5kZXguYzogKGdzdF9pbmRleF9ndHlwZV9yZXNvbHZlcik6CisJICAqIHRvb2xzL2dzdC14bWxpbnNwZWN0LmM6IChwcmludF9wbHVnaW5faW5mbyk6CisJICBGaXggbGVhayBzcG90dGVkIGJ5IGNvdmVyaXR5IGNoZWNrZXIuIEZpeGVzICMzNDM4MjcKKwkgIEZpeCBhbm90aGVyIG90aGVyIGxlYWsgZm91bmQgYnkgcGFvbG8gYm9yZWxsaS4KKworMjAwNi0wNi0wNiAxNjo1Mjo1OSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfcHBjNjQuaDoKKwkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfeDg2XzY0Lmg6CisJICBpZmRlZiBMT0FEU0FWRQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBpZmRlZiBMT0FEU0FWRQorCisyMDA2LTA2LTA2IDE1OjE4OjI2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZG9jcy9saWJzL3RtcGwvZ3N0Y29udHJvbC5zZ21sOgorCSAgcmVtb3ZlIG9sZCBkb2NzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJlbW92ZSBvbGQgZG9jcworCisyMDA2LTA2LTA2IDE0OjUxOjQ1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogdGVzdHMvY2hlY2svbGlicy9saWJzYWJpLmM6CisJICB0ZXJtaW5hdGUgaWZkZWYKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgdGVybWluYXRlIGlmZGVmCisKKzIwMDYtMDYtMDYgMTQ6MzI6NTUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBkb2NzL2xpYnMvdG1wbC9nc3RieXRlc3RyZWFtLnNnbWw6CisJICByZW1vdmUgdW51c2VkIHRtcGwKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVtb3ZlIHVudXNlZCB0bXBsCisKKzIwMDYtMDYtMDYgMTQ6Mjk6NTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBkb2NzL2xpYnMvdG1wbC9nc3RkYXRhcHJvdG9jb2wuc2dtbDoKKwkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzoKKwkgIGFkZCBub3RlIHRvIGRvY3MgYWJvdXQgR0RQIHZlcnNpb25pbmc7IHJlbW92ZSB0bXBsIGZpbGUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkIG5vdGUgdG8gZG9jcyBhYm91dCBHRFAgdmVyc2lvbmluZzsgcmVtb3ZlIHRtcGwgZmlsZQorCisyMDA2LTA2LTA2IDE0OjI0OjAwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC4qOiBBUEk6IGFkZCBhIEdzdERQUGFja2V0aXplciBvYmplY3QsIGFuZCBjcmVhdGUvZnJlZSBmdW5jdGlvbnMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6CisJICAoZ3N0X2RwX2hlYWRlcl9mcm9tX2J1ZmZlcl9hbnkpLCAoZ3N0X2RwX3BhY2tldF9mcm9tX2NhcHNfYW55KSwKKwkgIChnc3RfZHBfdmVyc2lvbl9nZXRfdHlwZSksIChnc3RfZHBfaW5pdCksCisJICAoZ3N0X2RwX2hlYWRlcl9mcm9tX2J1ZmZlciksIChnc3RfZHBfaGVhZGVyX2Zyb21fYnVmZmVyXzFfMCksCisJICAoZ3N0X2RwX3BhY2tldF9mcm9tX2NhcHMpLCAoZ3N0X2RwX3BhY2tldF9mcm9tX2NhcHNfMV8wKSwKKwkgIChnc3RfZHBfcGFja2V0X2Zyb21fZXZlbnQpLCAoZ3N0X2RwX3BhY2tldF9mcm9tX2V2ZW50XzFfMCksCisJICAoZ3N0X2RwX2V2ZW50X2Zyb21fcGFja2V0XzBfMiksIChnc3RfZHBfZXZlbnRfZnJvbV9wYWNrZXRfMV8wKSwKKwkgIChnc3RfZHBfZXZlbnRfZnJvbV9wYWNrZXQpLCAoZ3N0X2RwX3BhY2tldGl6ZXJfbmV3KSwKKwkgIChnc3RfZHBfcGFja2V0aXplcl9mcmVlKToKKwkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5oOgorCSAgQVBJOiBhZGQgYSBHc3REUFBhY2tldGl6ZXIgb2JqZWN0LCBhbmQgY3JlYXRlL2ZyZWUgZnVuY3Rpb25zCisJICBBUEk6IGFkZCBHc3REUFZlcnNpb24gZW51bQorCSAgQWRkIDEuMCBldmVudCBmdW5jdGlvbiB0aGF0IHVzZXMgdGhlIHN0cmluZyBzZXJpYWxpemF0aW9uCisJICBTZXJpYWxpemUgbW9yZSB1c2VmdWwgYnVmZmVyIGZsYWdzCisJICBGaXhlcyAjMzQzOTg4CisKKzIwMDYtMDYtMDYgMTQ6MjE6MTAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSogZG9jcy9saWJzL3RtcGwvZ3N0ZGF0YXByb3RvY29sLnNnbWw6CisJICBhZGQgc3ltYm9sCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFkZCBzeW1ib2wKKworMjAwNi0wNi0wNiAxNDoxNjozMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGdzdC9nc3RidWZmZXIuaDoKKwkgIHdpZHRoIHJlc3BlY3RhdGlvbml6aW5nCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHdpZHRoIHJlc3BlY3RhdGlvbml6aW5nCisKKzIwMDYtMDYtMDYgMTQ6MTA6MDkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICB0ZXN0cy9jaGVjay86IGFkZCBwcGM2NCBzdHJ1Y3R1cmUgc2l6ZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGFiaS5jOgorCSAgKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3BwYzY0Lmg6CisJICAqIHRlc3RzL2NoZWNrL2xpYnMvbGlic2FiaS5jOgorCSAgKiB0ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9wcGM2NC5oOgorCSAgYWRkIHBwYzY0IHN0cnVjdHVyZSBzaXplcworCisyMDA2LTA2LTA2IDEzOjU5OjEwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgdGVzdHMvY2hlY2svOiBnZW5lcmF0ZSBhbmQgYWRkIHN0cnVjdHVyZSBzaXplIGxpc3RzIGZvciB4ODZfNjQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGFiaS5jOgorCSAgKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3g4Nl82NC5oOgorCSAgKiB0ZXN0cy9jaGVjay9saWJzL2xpYnNhYmkuYzoKKwkgICogdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfeDg2XzY0Lmg6CisJICBnZW5lcmF0ZSBhbmQgYWRkIHN0cnVjdHVyZSBzaXplIGxpc3RzIGZvciB4ODZfNjQKKworMjAwNi0wNi0wNiAxMzo1MzoyNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6CisJICBjb3NtZXRpY3MKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgY29zbWV0aWNzCisKKzIwMDYtMDYtMDYgMTM6NDg6MjAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay4qOiBmYWN0b3Igb3V0IHRoZSBtZXRob2QgZnJvbSB0ZXN0cyB0aGF0IGNoZWNrcyBzaXplIG9mIHN0cnVjdHVyZXMsIGFuZCBhZGQgY29kZSB0byBnZW5lcmF0ZSAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOiAoZ3N0X2NoZWNrX2FiaV9saXN0KToKKwkgICogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKKwkgIGZhY3RvciBvdXQgdGhlIG1ldGhvZCBmcm9tIHRlc3RzIHRoYXQgY2hlY2tzIHNpemUgb2Ygc3RydWN0dXJlcywKKwkgIGFuZCBhZGQgY29kZSB0byBnZW5lcmF0ZSB0aGUgaGVhZGVyIGNvbnRhaW5pbmcgdGhlc2Ugc2l6ZXMKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGFiaS5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X2kzODYuaDoKKwkgICogdGVzdHMvY2hlY2svbGlicy9saWJzYWJpLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICAqIHRlc3RzL2NoZWNrL2xpYnMvc3RydWN0X2kzODYuaDoKKwkgIHVzZSBpdAorCisyMDA2LTA2LTA2IDEzOjExOjAzICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+CisKKwkgIGdzdC9nc3RzZWdtZW50Lmg6IERvbid0IHVzZSBjKystc3R5bGUgY29tbWVudHMsIGZpeGVzICMzNDM5MjkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0c2VnbWVudC5oOgorCSAgRG9uJ3QgdXNlIGMrKy1zdHlsZSBjb21tZW50cywgZml4ZXMgIzM0MzkyOQorCisyMDA2LTA2LTA2IDA5OjQ3OjQwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2dzdGVsZW1lbnQuaDoKKwkgIHdoaXRlc3BhY2Uvd2lkdGggZml4ZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgd2hpdGVzcGFjZS93aWR0aCBmaXhlcworCisyMDA2LTA2LTA2IDA4OjUwOjQwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSAgd2hpdGVzcGFjZSBmaXhlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB3aGl0ZXNwYWNlIGZpeGVzCisKKzIwMDYtMDYtMDYgMDg6NTA6MjUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBjb21tb246CisJKiBnc3QvZ3N0ZXJyb3IuYzoKKwkgIHJlbW92ZSBhbiBleHRyYSBzcGFjZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICByZW1vdmUgYW4gZXh0cmEgc3BhY2UKKworMjAwNi0wNi0wNSAxMzowNTozNyArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgZ3N0L2dzdC5jOiBwbHVnaW5fcGF0aHMgaXMgbm90IHVzZWQgaWYgd2UgYnVpbGQgd2l0aG91dCByZWdpc3RyeSBzdXBwb3J0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3QuYzoKKwkgIHBsdWdpbl9wYXRocyBpcyBub3QgdXNlZCBpZiB3ZSBidWlsZCB3aXRob3V0IHJlZ2lzdHJ5IHN1cHBvcnQuCisJICAqIGdzdC9nc3RzZWdtZW50LmM6IChnc3Rfc2VnbWVudF9jb3B5KToKKwkgIF9jb3B5KCkgd2FzIGFsd2F5cyByZXR1cm5pbmcgTlVMTC4uLgorCisyMDA2LTA2LTA1IDEyOjU1OjU4ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBnc3QvZ3N0c2VnbWVudC5jOiBfY29weSgpIHdhcyBhbHdheXMgcmV0dXJuaW5nIE5VTEwuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0c2VnbWVudC5jOiAoZ3N0X3NlZ21lbnRfY29weSk6CisJICBfY29weSgpIHdhcyBhbHdheXMgcmV0dXJuaW5nIE5VTEwuLi4KKworMjAwNi0wNi0wMiAxNjo0NjoxOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzogZmFjdG9yIG91dCBDUkMgY29kZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzoKKwkgIChnc3RfZHBfaGVhZGVyX2Zyb21fYnVmZmVyKSwgKGdzdF9kcF9wYWNrZXRfZnJvbV9jYXBzKSwKKwkgIChnc3RfZHBfcGFja2V0X2Zyb21fZXZlbnQpOgorCSAgZmFjdG9yIG91dCBDUkMgY29kZQorCisyMDA2LTA2LTAyIDE2OjQ1OjA4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzogbWFrZSBzdXJlIHdlIHVuc2V0IGNhcHMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOiAoZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQpOgorCSAgbWFrZSBzdXJlIHdlIHVuc2V0IGNhcHMKKworMjAwNi0wNi0wMiAxNjo0MTowMiArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgorCisJICBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay4qOiBBZGQgYSBjb25kL211dGV4IHRvIHRoZSBjaGVjayBzdXBwb3J0IGxpYiwgc2lnbmFsIHRoaXMgd2hlbmV2ZXIgd2UgYWRkIHRvIHRoZSBidWZmZXJzIGxpc3QuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOiAoZ3N0X2NoZWNrX2luaXQpLAorCSAgKGdzdF9jaGVja19jaGFpbl9mdW5jKToKKwkgICogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKKwkgIEFkZCBhIGNvbmQvbXV0ZXggdG8gdGhlIGNoZWNrIHN1cHBvcnQgbGliLCBzaWduYWwgdGhpcyB3aGVuZXZlciB3ZQorCSAgYWRkIHRvIHRoZSBidWZmZXJzIGxpc3QuIFRoaXMgd2lsbCBhbGxvdyB0ZXN0cyB0byBub3QgYnVzeS13YWl0IG9uCisJICB0aGUgYnVmZmVyLWxpc3QuCisKKzIwMDYtMDYtMDIgMTA6NTg6NDcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6IGZhY3RvciBvdXQgc29tZSBjb21tb24gaGVhZGVyIGluaXQgY29kZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzoKKwkgIChnc3RfZHBfaGVhZGVyX2Zyb21fYnVmZmVyKSwgKGdzdF9kcF9wYWNrZXRfZnJvbV9jYXBzKSwKKwkgIChnc3RfZHBfcGFja2V0X2Zyb21fZXZlbnQpOgorCSAgZmFjdG9yIG91dCBzb21lIGNvbW1vbiBoZWFkZXIgaW5pdCBjb2RlCisKKzIwMDYtMDYtMDIgMTA6MDg6MzEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBBUEk6IG1ha2UgZ3N0X2RwX2NyYygpIHB1YmxpYworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJICAqIGRvY3MvbGlicy90bXBsL2dzdGRhdGFwcm90b2NvbC5zZ21sOgorCSAgKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6IChnc3RfZHBfY3JjKToKKwkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5oOgorCSAgQVBJOiBtYWtlIGdzdF9kcF9jcmMoKSBwdWJsaWMKKworMjAwNi0wNi0wMiAwOToxMzo1NiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGdzdC9nc3RldmVudC5jOgorCSAgZGVidWcgY2hhbmdlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGRlYnVnIGNoYW5nZQorCisyMDA2LTA2LTAxIDE4OjMwOjE5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIHBsdWdpbnMvaW5kZXhlcnMvZ3N0aW5kZXhlcnMuYzogY29uZGl0aW9uYWxseSByZWdpc3RlciBmaWxlaW5kZXhlciAoZml4ZXMgIzM0MzU5OCkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2luZGV4ZXJzL2dzdGluZGV4ZXJzLmM6IChwbHVnaW5faW5pdCk6CisJICBjb25kaXRpb25hbGx5IHJlZ2lzdGVyIGZpbGVpbmRleGVyIChmaXhlcyAjMzQzNTk4KQorCisyMDA2LTA2LTAxIDE4OjIyOjE0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3R0YWdzZXR0ZXIuaDogQ2FuJ3QgY2FzdCBpZmFjZXMgdG8gYSBjbGFzcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R0YWdzZXR0ZXIuaDoKKwkgIENhbid0IGNhc3QgaWZhY2VzIHRvIGEgY2xhc3MKKwkgICogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmg6CisJICAqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuaDoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5oOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuaDoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuaDoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5oOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmg6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5oOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5Lmg6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuaDoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuaDoKKwkgICogcGx1Z2lucy9pbmRleGVycy9nc3RmaWxlaW5kZXguYzoKKwkgICogcGx1Z2lucy9pbmRleGVycy9nc3RtZW1pbmRleC5jOgorCSAgKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcGx1Z2lucy9leGFtcGxlLmg6CisJICBGaXggbW9yZSBnb2JqZWN0IG1hY3Jvczogb2JqPC0+a2xhc3MsIEdzdFhYWDwtPkdzdFhYWENsYXNzCisKKzIwMDYtMDYtMDEgMTE6MTM6NDQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6IG1ha2Ugc3VyZSB3ZSB6ZXJvIHRoZSB3aG9sZSBBQkktY29tcGF0aWJsZSBhcmVhCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOgorCSAgKGdzdF9kcF9oZWFkZXJfZnJvbV9idWZmZXIpOgorCSAgbWFrZSBzdXJlIHdlIHplcm8gdGhlIHdob2xlIEFCSS1jb21wYXRpYmxlIGFyZWEKKworMjAwNi0wNi0wMSAwOTowMjoyMyArMDAwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm9Abm52YS5vcmc+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogTWFrZSBzdXJlIHRoZSBFT1MgZmxhZyBpcyBjbGVhcmVkIGZyb20gcGFkcyBhZnRlciBhIGZsdXNoIG9yIHN0b3AuIEZpeGVzICMzNDM1MzguCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRybyBhdCBubnZhIGRvdCBvcmc+CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0X3BhZHNfc3RvcCk6CisJICBNYWtlIHN1cmUgdGhlIEVPUyBmbGFnIGlzIGNsZWFyZWQgZnJvbSBwYWRzIGFmdGVyIGEgZmx1c2gKKwkgIG9yIHN0b3AuIEZpeGVzICMzNDM1MzguCisJICAqIHRlc3RzL2NoZWNrL2xpYnMvY29sbGVjdHBhZHMuYzogKEdTVF9TVEFSVF9URVNUKSwKKwkgIChnc3RfY29sbGVjdF9wYWRzX3N1aXRlKToKKwkgIEFkZGVkIHRlc3QgZm9yIGNvbGxlY3RwYWRzIHJldXNhZ2UgYWZ0ZXIgRU9TLgorCisyMDA2LTA1LTMwIDIwOjI1OjAzICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+CisKKwkgIGdzdC9nc3QuYzogc2V0ICNpbmNsdWRlIDxzeXMvd2FpdC5oPiBpbiBhICNpZmRlZiAjaWZkZWYgSEFWRV9GT1JLCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdC5jOgorCSAgc2V0ICNpbmNsdWRlIDxzeXMvd2FpdC5oPiBpbiBhICNpZmRlZiAjaWZkZWYgSEFWRV9GT1JLCisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKKwkgIGV4cG9ydCBnc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaGluZworCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGV4cG9ydCBnc3RfcGFkX3NldF9hY2NlcHRjYXBzX2Z1bmN0aW9uLCBnc3Rfc3RydWN0dXJlX2VtcHR5X25ldywKKwkgIGdzdF92YWx1ZV9mcmFjdGlvbl9tdWx0aXBseQorCSAgKiB3aW4zMi92czYvZ3N0X2luc3BlY3QuZHNwOgorCSAgYWRkIGEgbGluayB0byBpbnRsLmxpYgorCisyMDA2LTA1LTMwIDE1OjU1OjE5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhIHBhZCBpcyByZW1vdmVkIGZyb20gdGhlIGNvbGxlY3Rpb24gdGhhdCBjb3VsZCBjYXVzZSB0aGUgb3RoZXIuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChnc3RfY29sbGVjdF9wYWRzX3JlbW92ZV9wYWQpLAorCSAgKGdzdF9jb2xsZWN0X3BhZHNfY2hhaW4pOgorCSAgSGFuZGxlIHRoZSBjYXNlIHdoZXJlIGEgcGFkIGlzIHJlbW92ZWQgZnJvbSB0aGUgY29sbGVjdGlvbgorCSAgdGhhdCBjb3VsZCBjYXVzZSB0aGUgb3RoZXIgcGFkcyB0byBiZWNvbWUgY29sbGVjdGFibGUuCisKKzIwMDYtMDUtMzAgMTU6NTM6NDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RlbGVtZW50LmM6IENsYXJpZnkgdGhlIHVzZSBvZiBfcmVsZWFzZV9yZXF1ZXN0X3BhZCgpIGFuZCBfZ2V0X3JlcXVlc3RfcGFkKCkgYSBiaXQgYmV0dGVyLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6CisJICBDbGFyaWZ5IHRoZSB1c2Ugb2YgX3JlbGVhc2VfcmVxdWVzdF9wYWQoKSBhbmQKKwkgIF9nZXRfcmVxdWVzdF9wYWQoKSBhIGJpdCBiZXR0ZXIuCisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOiAoZ3N0X2FkYXB0ZXJfcGVlayksCisJICAoZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIpOgorCSAgRml4IHNvbWUgZG9jIGFuZCBjb21tZW50IHR5cG9zLgorCisyMDA2LTA1LTMwIDE0OjQzOjM1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZG9jcy86IGFkZCBkZWNsYXJlZCBzeW1ib2xzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkgIGFkZCBkZWNsYXJlZCBzeW1ib2xzCisKKzIwMDYtMDUtMzAgMTQ6NDE6MTUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmcucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGUucG86CisJKiBwby9lbl9HQi5wbzoKKwkqIHBvL2ZyLnBvOgorCSogcG8vaXQucG86CisJKiBwby9uYi5wbzoKKwkqIHBvL25sLnBvOgorCSogcG8vcnUucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJKiBwby96aF9DTi5wbzoKKwkqIHBvL3poX1RXLnBvOgorCSAgdXBkYXRlIHBvIGZpbGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHVwZGF0ZSBwbyBmaWxlcworCisyMDA2LTA1LTMwIDE0OjQwOjQ4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICBmaXggYnVpbGQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZml4IGJ1aWxkCisKKzIwMDYtMDUtMzAgMTQ6MDM6NTggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICBhZGRlZCBIQVZFX0ZPUksKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkZWQgSEFWRV9GT1JLCisKKzIwMDYtMDUtMzAgMTI6MDQ6MjkgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBnc3QvZ3N0c3lzdGVtY2xvY2suYzogQWRkIGRlYnVnIHRoYXQgY2FuIGJlIGVuYWJsZWQgdXNpbmcgYSAjZGVmaW5lIGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUsIGZvciBkdW1waW5nIHN0YXRzIGFib3V0IGguLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzogKGdzdF9zeXN0ZW1fY2xvY2tfaWRfd2FpdF91bmxvY2tlZCk6CisJICBBZGQgZGVidWcgdGhhdCBjYW4gYmUgZW5hYmxlZCB1c2luZyBhICNkZWZpbmUgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZSwKKwkgIGZvciBkdW1waW5nIHN0YXRzIGFib3V0IGhvdyBsYXRlL2Vhcmx5IHdlIHdlcmUgd2hlbiB3YWtpbmcgdXAgZnJvbQorCSAgd2FpdGluZyBvbiB0aGUgY2xvY2suCisKKzIwMDYtMDUtMzAgMTE6NDM6NDMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogV2hlbiByZWJ1aWxkaW5nIHRoZSBwYWQgbGlzdCwgZG9uJ3QgbGVhayB0aGUgcHJldmlvdXMgbGlzdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChnc3RfY29sbGVjdF9wYWRzX2NoZWNrX3BhZHMpOgorCSAgV2hlbiByZWJ1aWxkaW5nIHRoZSBwYWQgbGlzdCwgZG9uJ3QgbGVhayB0aGUgcHJldmlvdXMgbGlzdC4KKworMjAwNi0wNS0zMCAxMDo1Nzo0NCArMDAwMCAgTHV0eiBNdWVsbGVyIDxsdXR6QHRvcGZyb3NlLmRlPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogUHVibGlzaCBzdXBwb3J0ZWQgcXVlcnkgdHlwZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBMdXR6IE11ZWxsZXIgPGx1dHogYXQgdG9wZnJvc2UgZG90IGRlPgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19jbGFzc19pbml0KSwKKwkgIChnc3RfYmFzZV9zcmNfZ2V0X3F1ZXJ5X3R5cGVzKSwgKGdzdF9iYXNlX3NyY191cGRhdGVfbGVuZ3RoKToKKwkgIFB1Ymxpc2ggc3VwcG9ydGVkIHF1ZXJ5IHR5cGVzLgorCSAgVXBkYXRlIGxhc3Rfc3RvcCBmaWVsZCBpbiBnZXRfcmFuZ2UgbW9kZSBzbyB0aGUgcG9zaXRpb24KKwkgIHF1ZXJ5IHdvcmtzLiBGaXhlcyAjMzQyMzIxLgorCisyMDA2LTA1LTMwIDEwOjEyOjAyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBBUEk6IGFkZCBHU1RfVEFHX1BSRVZJRVdfSU1BR0UgKCMzNDMzNDEpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3R0YWdsaXN0LmM6IChfZ3N0X3RhZ19pbml0aWFsaXplKToKKwkgICogZ3N0L2dzdHRhZ2xpc3QuaDoKKwkgIEFQSTogYWRkIEdTVF9UQUdfUFJFVklFV19JTUFHRSAoIzM0MzM0MSkuCisKKzIwMDYtMDUtMzAgMDk6NDI6MDkgKzAwMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvQG5udmEub3JnPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IFVubG9jayBtdXRleCB3aGVuIHJlbW92aW5nIGFuIHVua25vd24gcGFkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8gYXQgbm52YSBkb3Qgb3JnPgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChnc3RfY29sbGVjdF9wYWRzX3JlbW92ZV9wYWQpOgorCSAgVW5sb2NrIG11dGV4IHdoZW4gcmVtb3ZpbmcgYW4gdW5rbm93biBwYWQuCisJICBGaXhlcyAjMzQzMzM0LgorCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgICogdGVzdHMvY2hlY2svbGlicy9jb2xsZWN0cGFkcy5jOiAoY29sbGVjdGVkX2NiKSwgKHB1c2hfYnVmZmVyKSwKKwkgIChwdXNoX2V2ZW50KSwgKHNldHVwKSwgKHRlYXJkb3duKSwgKEdTVF9TVEFSVF9URVNUKSwKKwkgIChnc3RfY29sbGVjdF9wYWRzX3N1aXRlKSwgKG1haW4pOgorCSAgQWRkZWQgY29sbGVjcGFkcyBjaGVjaywgZGlzYWJsZWQgZm9yIG5vdyBhcyBjaGVjayBjcmFzaGVzIGZvcgorCSAgc29tZSByZWFzb24uCisKKzIwMDYtMDUtMjkgMTc6MjA6MDMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogRG9uJ3QgbGVhayBwYWRzIGxpc3RzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0X3BhZHNfZmluYWxpemUpOgorCSAgRG9uJ3QgbGVhayBwYWRzIGxpc3RzLgorCisyMDA2LTA1LTI5IDE2OjAwOjEzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBBUEk6IGdzdF9jb2xsZWN0X3BhZHNfc2V0X2ZsdXNoaW5nCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgorCSAgKGdzdF9jb2xsZWN0X3BhZHNfc2V0X2ZsdXNoaW5nX3VubG9ja2VkKSwKKwkgIChnc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaGluZyksIChnc3RfY29sbGVjdF9wYWRzX3N0YXJ0KSwKKwkgIChnc3RfY29sbGVjdF9wYWRzX3N0b3ApOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg6CisJICBBUEk6IGdzdF9jb2xsZWN0X3BhZHNfc2V0X2ZsdXNoaW5nCisJICBBZGRlZCBhcGkgdG8gc2V0IHRoZSBwYWRzIHRvIGZsdXNoaW5nLCB1c2VmdWxsIGZvciBzZWVraW5nCisJICBjb2RlIGluIGVsZW1lbnRzIHVzaW5nIGNvbGxlY3RwYWRzLgorCSAgQ2xlYXIgc2VnbWVudCB3aGVuIHJlY2VpdmluZyBhIGZsdXNoLgorCisyMDA2LTA1LTI5IDExOjUyOjUwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0LmM6IERvbid0IHNjYW4gcmVnaXN0cnkgcGF0aHMgcGFzc2VkIHZpYSAtLWdzdC1wbHVnaW4tLXBhdGggaW1tZWRpYXRlbHkgKHdpbGwgY3Jhc2gsIGJlY2F1c2UgYWJzb2x1dGVseSBub3RoaW4uLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0LmM6IChhZGRfcGF0aF9mdW5jKSwgKGluaXRfcG9zdCk6CisJICBEb24ndCBzY2FuIHJlZ2lzdHJ5IHBhdGhzIHBhc3NlZCB2aWEgLS1nc3QtcGx1Z2luLS1wYXRoIGltbWVkaWF0ZWx5CisJICAod2lsbCBjcmFzaCwgYmVjYXVzZSBhYnNvbHV0ZWx5IG5vdGhpbmcgaXMgc2V0IHVwIGFuZCBubyB0eXBlcyBhcmUKKwkgIHJlZ2lzdGVyZWQgZXRjLik7IGRvIHRoaXMgbGF0ZXIgaW4gaW5pdF9wb3N0KCkuIEZpeGVzICMzNDMwNTcuCisKKzIwMDYtMDUtMjggMDk6MDk6MDMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBnc3QvZ3N0LmM6IGlmIHdlIGhhdmUgZm9yaywgZm9yayB3aGlsZSByZWFkaW5nL3JlYnVpbGRpbmcgdGhlIHJlZ2lzdHJ5IHNvIHRoZSBwYXJlbnQgZG9lc24ndCB0YWtlIHRoZSBoaXQgb2YgaGF2aW5nIGEuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0LmM6IChpbml0X3Bvc3QpOgorCSAgaWYgd2UgaGF2ZSBmb3JrLCBmb3JrIHdoaWxlIHJlYWRpbmcvcmVidWlsZGluZyB0aGUgcmVnaXN0cnkKKwkgIHNvIHRoZSBwYXJlbnQgZG9lc24ndCB0YWtlIHRoZSBoaXQgb2YgaGF2aW5nIGFsbCBwbHVnaW5zIGxvYWRlZAorCSAgaW4gbWVtb3J5LiAgRml4ZXMgIzM0Mjc3Ny4KKwkgICogY29uZmlndXJlLmFjOgorCSAgQ2hlY2sgaWYgd2UgaGF2ZSBmb3JrKCkKKwkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oLmluOgorCSAgbm8gZm9yaygpIG9uIHdpbjMyCisKKzIwMDYtMDUtMjYgMTM6NTI6MDMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzLzogQWRkIGEgdXNlLW1tYXAgcHJvcGVydHkgdG8gZW5hYmxlIGVhc2llciB0ZXN0aW5nIG9mIGFsbCBjb2RlIHBhdGhzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IChnc3RfZmlsZV9zcmNfY2xhc3NfaW5pdCksCisJICAoZ3N0X2ZpbGVfc3JjX2luaXQpLCAoZ3N0X2ZpbGVfc3JjX3NldF9wcm9wZXJ0eSksCisJICAoZ3N0X2ZpbGVfc3JjX2dldF9wcm9wZXJ0eSksIChnc3RfZmlsZV9zcmNfc3RhcnQpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuaDoKKwkgIEFkZCBhIHVzZS1tbWFwIHByb3BlcnR5IHRvIGVuYWJsZSBlYXNpZXIgdGVzdGluZyBvZiBhbGwgY29kZSBwYXRocy4KKwkgIEJ1bXAgcmFuayB0byBQUklNQVJZLCBzbyBmaWxlc3JjIGlzIHRoZSBwcmVmZXJyZWQgZmlsZSByZWFkZXIgYW5kIHVzZWQKKwkgIGluIHRoZSBhYnNlbmNlIG9mIGdub21ldmZzc3JjLiAoQ2xvc2VzICMzNDA1MDEpCisKKzIwMDYtMDUtMjYgMTA6MzU6MzQgKzAwMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+CisKKwkgIHRvb2xzL2dzdC1pbnNwZWN0LmM6IEFkZCBtaXNzaW5nIGluY2x1ZGUsIHJlbW92ZXMgd2FybmluZyBvZiBuZ2V0dGV4dCBub3QgYmVpbmcgZGVmaW5lZCBvbiBzb21lIGFyY2hlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNi0wNS0yNiAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOgorCSAgQWRkIG1pc3NpbmcgaW5jbHVkZSwgcmVtb3ZlcyB3YXJuaW5nIG9mIG5nZXR0ZXh0IG5vdCBiZWluZyBkZWZpbmVkIG9uCisJICBzb21lIGFyY2hlcy4KKworMjAwNi0wNS0yNiAwOToxOToyNCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGdzdC9nc3R2YWx1ZS5jOiBIYW5kbGUgTlVMTCBpbnB1dCBhbmQgb3V0cHV0IHBvaW50ZXJzIHNpbGVudGx5IGFzIGEgZmFpbGVkIGNvbnZlcnNpb24sIHJhdGhlciB0aGFuIGdfd2FybmluZ3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfZGVzZXJpYWxpemVfZnJhY3Rpb24pOgorCSAgSGFuZGxlIE5VTEwgaW5wdXQgYW5kIG91dHB1dCBwb2ludGVycyBzaWxlbnRseSBhcyBhIGZhaWxlZCBjb252ZXJzaW9uLAorCSAgcmF0aGVyIHRoYW4gZ193YXJuaW5ncy4KKworMjAwNi0wNS0yNSAxNTo1MjoxOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6IEluaXRpYWxpemUgdmFyaWFibGUgYmVmb3JlIHVzaW5nLiBGaXhlcyAjMzQyODIwLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOiAoZ3N0X25ldF9jbGllbnRfY2xvY2tfc3RhcnQpOgorCSAgSW5pdGlhbGl6ZSB2YXJpYWJsZSBiZWZvcmUgdXNpbmcuIEZpeGVzICMzNDI4MjAuCisKKzIwMDYtMDUtMjQgMTc6MTE6MDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzogRml4IG9mZi1ieS1vbmUgYnVnIHRoYXQgd291bGQgb25seSBhbGxvdyBwZWVrcyBvZiBOLTEgYnl0ZXMgZnJvbSB0aGUgc3RhcnQgZXZlbiBpZi4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzogKGJ1Zl9oZWxwZXJfZmluZF9wZWVrKToKKwkgIEZpeCBvZmYtYnktb25lIGJ1ZyB0aGF0IHdvdWxkIG9ubHkgYWxsb3cgcGVla3Mgb2YgTi0xIGJ5dGVzCisJICBmcm9tIHRoZSBzdGFydCBldmVuIGlmIHRoZSBidWZmZXIgdG8gdHlwZWZpbmQgb24gY29udGFpbnMKKwkgIGluIGZhY3QgTiBieXRlcyBvZiBkYXRhIChtYWtlcyB2b3JiaXMgdHlwZWZpbmRpbmcgZnJvbSBhCisJICB2b3JiaXMgaWRlbnRpZmljYXRpb24gaGVhZGVyIGJ1ZmZlciB3b3JrKS4KKwkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICAqIHRlc3RzL2NoZWNrL2xpYnMvLmN2c2lnbm9yZToKKwkgICogdGVzdHMvY2hlY2svbGlicy90eXBlZmluZGhlbHBlci5jOiAoR1NUX1NUQVJUX1RFU1QpLAorCSAgKGdzdF90eXBlZmluZGhlbHBlcl9zdWl0ZSksIChtYWluKSwgKGZvb2Jhcl90eXBlZmluZCksCisJICAocGx1Z2luX2luaXQpOgorCSAgQWRkIHZlcnkgYmFzaWMgdW5pdCB0ZXN0IGZvciBnc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfYnVmZmVyKCkKKwkgIHRoYXQgY2hlY2tzIGZvciB0aGUgcHJvYmxlbSBmaXhlZCBhYm92ZS4KKworMjAwNi0wNS0yNCAwOTowMDo0NyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGdzdC9nc3R0eXBlZmluZC5jOgorCSAgZG9jIGluZGVudCBmaXgKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZG9jIGluZGVudCBmaXgKKworMjAwNi0wNS0yNCAwOTowMDoxMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6CisJICBtYXJrIG1vcmUgc3RyaW5ncyBmb3IgdHJhbnNsYXRpb24KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgbWFyayBtb3JlIHN0cmluZ3MgZm9yIHRyYW5zbGF0aW9uCisKKzIwMDYtMDUtMjMgMTQ6MjM6NDkgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgorCisJICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBNYWtlIG5ldyBHU1RfRkxPV19JU19TVUNDRVNTIG1hY3JvIHZpc2libGUgaW4gZG9jcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IEp1bGllbiBNb3V0dGUgIDxqdWxpZW4gYXQgbW91dHRlIG5ldD4KKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgIE1ha2UgbmV3IEdTVF9GTE9XX0lTX1NVQ0NFU1MgbWFjcm8gdmlzaWJsZSBpbiBkb2NzLgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6IChnc3RfZmFrZV9zaW5rX2NsYXNzX2luaXQpLAorCSAgKGdzdF9mYWtlX3NpbmtfcHJlcm9sbCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuaDoKKwkgIEFkZCBuZXcgOjpwcmVyb2xsLWhhbmRvZmYgc2lnbmFsICgjMzM3MTAwKS4KKworMjAwNi0wNS0yMyAxMToxMzo1MSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHBhZC4qOiBBZGRlZCBfQ1VTVE9NIGVycm9yIGFuZCBzdWNjZXNzIEdzdEZsb3dSZXR1cm4gdGhhdCBjYW4gYmUgdXNlZCBiZSBlbGVtZW50cyBpbnRlcm5hbGx5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9mbG93X2dldF9uYW1lKSwgKGdzdF9mbG93X3RvX3F1YXJrKToKKwkgICogZ3N0L2dzdHBhZC5oOgorCSAgQWRkZWQgX0NVU1RPTSBlcnJvciBhbmQgc3VjY2VzcyBHc3RGbG93UmV0dXJuIHRoYXQgY2FuIGJlCisJICB1c2VkIGJlIGVsZW1lbnRzIGludGVybmFsbHkuCisJICBBZGRlZCBtYWNybyB0byBjaGVjayBmb3IgU1VDQ0VTUyBmbG93cmV0dXJucy4KKwkgIEFQSTogR1NUX0ZMT1dfQ1VTVE9NX1NVQ0NFU1MKKwkgIEFQSTogR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SCisJICBBUEk6IEdTVF9GTE9XX0lTX1NVQ0NFU1MKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3BhZF9zdWl0ZSk6CisJICBBZGRlZCBjaGVjayBmb3IgR3N0Rmxvd1JldHVybiBzYW5pdHkuCisKKzIwMDYtMDUtMjMgMDk6NDA6MTQgKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hbmF1d0Bza3luZXQuYmU+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogY2xlYXIvcmVzZXQgc2VnbWVudCBpbmZvIGluIEZMVVNIX1NUT1AuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBNYXJrIE5hdXdlbGFlcnRzIDxtYW5hdXcgYXQgc2t5bmV0IGRvdCBiZT4KKwkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RfcGFkc19yZW1vdmVfcGFkKSwKKwkgIChnc3RfY29sbGVjdF9wYWRzX2V2ZW50KToKKwkgIGNsZWFyL3Jlc2V0IHNlZ21lbnQgaW5mbyBpbiBGTFVTSF9TVE9QLgorCSAgRml4ZXMgIzMzNjkyOS4KKworMjAwNi0wNS0yMiAxNjozMDozNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IEZsdXNoIHF1ZXVlZCBidWZmZXIgb24gX3N0b3AoKSwgZml4ZXMgcGxheWluZyBhZ2FpbiAoIzM0MjQ1NCkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChnc3RfY29sbGVjdF9wYWRzX3N0b3ApLAorCSAgKGdzdF9jb2xsZWN0X3BhZHNfY2hlY2tfY29sbGVjdGVkKToKKwkgIEZsdXNoIHF1ZXVlZCBidWZmZXIgb24gX3N0b3AoKSwgZml4ZXMgcGxheWluZyBhZ2FpbiAoIzM0MjQ1NCkKKworMjAwNi0wNS0yMiAxMzozNDowMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzogYWRkIGEgdGVzdCBmb3IgYSBjb21wbGV0ZSBzdHJ1Y3R1cmUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6IChHU1RfU1RBUlRfVEVTVCksCisJICAoZ3N0X3N0cnVjdHVyZV9zdWl0ZSk6CisJICBhZGQgYSB0ZXN0IGZvciBhIGNvbXBsZXRlIHN0cnVjdHVyZQorCisyMDA2LTA1LTIyIDEzOjMxOjQ4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKKwkgIGRlYnVnZ2luZyBjaGFuZ2VzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGRlYnVnZ2luZyBjaGFuZ2VzCisKKzIwMDYtMDUtMTkgMTU6MzU6NDEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGRvY3MvZmFxLzogU29tZSBtaW5vciBGQVEgdXBkYXRlcyB0aGF0IHdvbid0IGNoYW5nZSB0aGUgZmFjdCB0aGF0IG91ciBGQVEgaXMgYmFkbHkgc3RydWN0dXJlZCwgZnVsbCBvZiBpbmZvcm1hdGlvbiBoYS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZmFxL2RldmVsb3BpbmcueG1sOgorCSAgKiBkb2NzL2ZhcS9mYXEueG1sOgorCSAgKiBkb2NzL2ZhcS90cm91Ymxlc2hvb3RpbmcueG1sOgorCSAgKiBkb2NzL2ZhcS91c2luZy54bWw6CisJICBTb21lIG1pbm9yIEZBUSB1cGRhdGVzIHRoYXQgd29uJ3QgY2hhbmdlIHRoZSBmYWN0IHRoYXQKKwkgIG91ciBGQVEgaXMgYmFkbHkgc3RydWN0dXJlZCwgZnVsbCBvZiBpbmZvcm1hdGlvbiBoYXJkbHkKKwkgIGFueW9uZSBuZXcgdG8gR1N0cmVhbWVyIG5lZWRzIHRvIGtub3cgYW5kIGxhY2tpbmcgbG90cworCSAgb2YgaW5mb3JtYXRpb24gcGVvcGxlIGNvbnN0YW50bHkgYXNrIGZvci4KKworMjAwNi0wNS0xOSAxMzo0NjoxMCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGdzdC9nc3RwYWQuYzogU2hvcnQtY2lyY3VpdCBnc3RfcGFkX3NldF9jYXBzIGlmIHNldHRpbmcgdGhlIGV4aXN0aW5nIGNhcHMgcG9pbnRlciBhZ2FpbiwgYW5kIGF2b2lkIHByaW50aW5nIGRlYnVnIGFuZC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfc2V0X2NhcHMpOgorCSAgU2hvcnQtY2lyY3VpdCBnc3RfcGFkX3NldF9jYXBzIGlmIHNldHRpbmcgdGhlIGV4aXN0aW5nCisJICBjYXBzIHBvaW50ZXIgYWdhaW4sIGFuZCBhdm9pZCBwcmludGluZyBkZWJ1ZyBhbmQKKwkgIHJlZmZpbmcvdW5yZWZmaW5nIHRoZSBjYXBzLgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfcHVzaF9vbmUpOgorCSAgVGhlcmUncyBhY3R1YWxseSBubyBuZWVkIHRvIHNldCB0aGUgY2FwcyBiZWZvcmUgcHVzaGluZyAtCisJICB0aGUgYWNjZXB0Y2FwcyBtZXRob2Qgd2lsbCBoYW5kbGUgaXQgYW55d2F5LgorCisyMDA2LTA1LTE5IDEwOjI5OjA3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBBUEk6IGFkZCBnc3RfZWxlbWVudF9zZWVrX3NpbXBsZSgpICgjMzQyMjM4KS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfZWxlbWVudF9zZWVrX3NpbXBsZSk6CisJICAqIGdzdC9nc3R1dGlscy5oOgorCSAgQVBJOiBhZGQgZ3N0X2VsZW1lbnRfc2Vla19zaW1wbGUoKSAoIzM0MjIzOCkuCisKKzIwMDYtMDUtMTggMTQ6MjU6MDAgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkgIGdzdC9nc3R0eXBlZmluZC4qOiBBZGRlZCBHU1RfVFlQRV9UWVBFX0ZJTkQgYW5kIGdzdF90eXBlX2ZpbmRfZ2V0X3R5cGUoKSBzbyBhIEdUeXBlIGdldHMgcmVnaXN0ZXJlZCBmb3IgR3N0VHlwZUZpbmQgcC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R0eXBlZmluZC5jOiAoZ3N0X3R5cGVfZmluZF9nZXRfdHlwZSk6CisJICAqIGdzdC9nc3R0eXBlZmluZC5oOgorCSAgQWRkZWQgR1NUX1RZUEVfVFlQRV9GSU5EIGFuZCBnc3RfdHlwZV9maW5kX2dldF90eXBlKCkgc28gYSBHVHlwZSBnZXRzCisJICByZWdpc3RlcmVkIGZvciBHc3RUeXBlRmluZCBwb2ludGVycy4gVGhpcyBhbGxvd3Mgd3JhcHBpbmcgdGhlIHN0cnVjdHVyZQorCSAgaW4gYmluZGluZ3MgKGkuZS4gZ3N0LXB5dGhvbikuCisKKzIwMDYtMDUtMTggMTQ6MDE6MDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3R0YWdzZXR0ZXIuYzogRG9jcyBhZGRpdGlvbnMgYW5kIGZpeGVzIChzZWUgIzMzOTkxOCkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHRhZ3NldHRlci5jOgorCSAgRG9jcyBhZGRpdGlvbnMgYW5kIGZpeGVzIChzZWUgIzMzOTkxOCkuCisKKzIwMDYtMDUtMTggMDk6MDc6NTUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzogVGhlIGNhcHMgaW50ZXJzZWN0aW9uIGFsZ29yaXRobSBjYW4gcHJvZHVjZSBtdWx0aXBsZSBjb3BpZXMgb2YgdGhlIGNhcHMuIFVudGlsIHRoYXQuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzogKGdzdF9jYXBzZmlsdGVyX3ByZXBhcmVfYnVmKToKKwkgIFRoZSBjYXBzIGludGVyc2VjdGlvbiBhbGdvcml0aG0gY2FuIHByb2R1Y2UgbXVsdGlwbGUgY29waWVzIG9mIHRoZQorCSAgY2Fwcy4gVW50aWwgdGhhdCBpcyBmaXhlZCwgd2UgbmVlZCB0byBzaW1wbGlmeSB0aGUgcmVzdWx0IHRvIGJlCisJICBzdXJlIHdoZXRoZXIgdGhlIGFsbG93ZWQgY2FwcyBhcmUgZml4ZWQgb3Igbm90LgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfaW5pdCksCisJICAoZ3N0X3F1ZXVlX2J1ZmZlcmFsbG9jKSwgKGdzdF9xdWV1ZV9hY2NlcHRjYXBzKSwKKwkgIChnc3RfcXVldWVfcHVzaF9vbmUpOgorCSAgUHJveGllZCBidWZmZXIgYWxsb2Mgc2hvdWxkIG5vdCBzZXQgdGhlIGNhcHMgb24gdGhlIHNvdXJjZSBwYWQuCisJICBXaGVuIHB1c2hpbmcgYnVmZmVycywgd2UgYWx3YXlzIGFjY2VwdCB0aGUgY2FwcyBjaGFuZ2UgdGhhdCB0cmlnZ2Vycy4KKwkgIFRoaXMgcHJldmVudHMgbmVnb3RpYXRpb24gZXJyb3JzIGNhdXNlZCBieSBjYXBzIGNoYW5naW5nIG1pZC1zdHJlYW0KKwkgIGFuZCB0aGVuIGJlaW5nIHJlZnVzZWQgb24gb3VyIHNvdXJjZSBwYWQgKGJlY2F1c2UgdXBzdHJlYW0gaXMgbm93CisJICByZWZ1c2luZyB0aG9zZSBjYXBzKS4KKworMjAwNi0wNS0xOCAwODo0ODoyMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgdGVzdHMvZXhhbXBsZXMvaGVsbG93b3JsZC9oZWxsb3dvcmxkLmM6IE11c3QgcGx1ZyBhdWRpb2NvbnZlcnQgYW5kIGF1ZGlvcmVzYW1wbGUgYmV0d2VlbiBkZWNvZGVyIGFuZCBhdWRpbyBzaW5rLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2V4YW1wbGVzL2hlbGxvd29ybGQvaGVsbG93b3JsZC5jOiAobWFpbik6CisJICBNdXN0IHBsdWcgYXVkaW9jb252ZXJ0IGFuZCBhdWRpb3Jlc2FtcGxlIGJldHdlZW4gZGVjb2RlcgorCSAgYW5kIGF1ZGlvIHNpbmsuCisKKzIwMDYtMDUtMTcgMTQ6MTg6MTIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJKiBDaGFuZ2VMb2c6CisJICBNZW50aW9uIGJ1ZyBmaXhlZCBieSBwcmV2aW91cyBjb21taXQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgTWVudGlvbiBidWcgZml4ZWQgYnkgcHJldmlvdXMgY29tbWl0CisKKzIwMDYtMDUtMTcgMTQ6MDE6MzMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogQWxsb3cgZW1wdHkgc3RyaW5ncyBmb3Igc29tZSBvZiB0aGUgcGx1Z2luIGZpZWxkcyBzbyB3ZSBkb24ndCBkcm9wIHZhbGlkIHBsdWdpbiBlbnRyaWVzIHRoYXQgd2UuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogKHJlYWRfc3RyaW5nKSwgKGxvYWRfcGFkX3RlbXBsYXRlKSwKKwkgIChsb2FkX2ZlYXR1cmUpLCAobG9hZF9wbHVnaW4pOgorCSAgQWxsb3cgZW1wdHkgc3RyaW5ncyBmb3Igc29tZSBvZiB0aGUgcGx1Z2luIGZpZWxkcyBzbyB3ZSBkb24ndAorCSAgZHJvcCB2YWxpZCBwbHVnaW4gZW50cmllcyB0aGF0IHdlcmUgd3JpdHRlbiBvdXQgY29ycmVjdGx5LgorCisyMDA2LTA1LTE3IDEzOjQwOjIwICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+CisKKwkgIGdzdC9nc3RyZWdpc3RyeXhtbC5jOiBVc2UgZ19yZW1vdmUgYW5kIGdfcmVuYW1lIGluc3RlYWQgb2YgcmVtb3ZlIGFuZCByZW5hbWUgdGhhdCBkb24ndCBoYW5kbGUgdXRmOCBjaGFyYWN0ZXJzLiByZW5hbS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RyZWdpc3RyeXhtbC5jOiAoZ3N0X3JlZ2lzdHJ5X3htbF93cml0ZV9jYWNoZSk6CisJICBVc2UgZ19yZW1vdmUgYW5kIGdfcmVuYW1lIGluc3RlYWQgb2YgcmVtb3ZlIGFuZCByZW5hbWUgdGhhdCBkb24ndAorCSAgaGFuZGxlIHV0ZjggY2hhcmFjdGVycy4gcmVuYW1lIHdhcyBmYWlsaW5nIGZvciB1c2VycyB3aG8gaGFkIHNwZWNpZmljCisJICBjaGFyYWN0ZXJzIGluIHRoZWlyIG5hbWUgdGhlbiB0aGUgcmVnaXN0cnkgd2FzIGJ1aWx0IGF0IGVhY2ggZ3N0cmVhbWVyIGluaXQuCisJICAqIHdpbjMyL3ZzNi9nc3RfaW5zcGVjdC5kc3A6CisJICAqIHdpbjMyL3ZzNi9nc3RfbGF1bmNoLmRzcDoKKwkgICogd2luMzIvdnM2L2xpYmdzdGJhc2UuZHNwOgorCSAgKiB3aW4zMi92czYvbGliZ3N0Y29yZWVsZW1lbnRzLmRzcDoKKwkgICogd2luMzIvdnM2L2xpYmdzdHJlYW1lci5kc3A6CisJICBVc2UgYSBkZWJ1ZyB2ZXJzaW9uIG9mIGxpYnhtbDIgKGxpYnhtbDJELmxpYixsaWJ4bWwyRC5kbGwpIGZvciBERUJVRyBidWlsZAorCSAgb2YgbGliZ3N0cmVhbWVyIGFuZCBjbGVhbiB1bnVzZWQgbGlicmFyaWVzIGluIHByb2plY3QgbGlua3Mgc2V0dGluZ3MuCisKKzIwMDYtMDUtMTcgMDk6MjQ6MzQgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogVGhlIHF1ZXVlIGlzIG5vdCByZXNwb25zaWJsZSBmb3IgcHVzaGluZyBhbiBFT1Mgd2hlbiByZWNlaXZpbmcgYSBmYXRhbCBmbG93IGVycm9yLiBJdCdzIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9wdXNoX29uZSk6CisJICBUaGUgcXVldWUgaXMgbm90IHJlc3BvbnNpYmxlIGZvciBwdXNoaW5nIGFuIEVPUyB3aGVuIHJlY2VpdmluZyBhIGZhdGFsCisJICBmbG93IGVycm9yLiBJdCdzIHVwIHRvIHRoZSByZWFsIGVsZW1lbnQgZHJpdmluZyB0aGUgcGlwZWxpbmUgdG8gZG8gdGhhdC4KKworMjAwNi0wNS0xNiAxNzoxNTowMiArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiBUaGUgcXVldWUgd2FzIHBvc3RpbmcgYSBub24tbmVlZGVkIEdTVF9NRVNTQUdFX0VSUk9SIHdoZW4gcHVzaGluZyBhIGJ1ZmZlciByZXR1cm5lZCBhIGZhLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX3B1c2hfb25lKToKKwkgIFRoZSBxdWV1ZSB3YXMgcG9zdGluZyBhIG5vbi1uZWVkZWQgR1NUX01FU1NBR0VfRVJST1Igd2hlbiBwdXNoaW5nIGEKKwkgIGJ1ZmZlciByZXR1cm5lZCBhIGZhdGFsIGVycm9yLiBJdCBzaG91bGQganVzdCBzZW5kIGFuIEVPUyBhbmQgc3RvcAorCSAgaXQncyB0YXNrLgorCSAgVXBzdHJlYW0gZWxlbWVudHMgd2lsbCB0aGVuIHByb3Blcmx5IHJlY2VpdmUgdGhlIEdTVF9GTE9XX1VORVhQRUNURUQKKwkgIHdoZW4gcHVzaGluZyBidWZmZXJzIG9uIHRoZSBxdWV1ZSBhbmQgd2lsbCBiZSBhYmxlIHRvIGhhbmRsZSB0aGUgZXZlbnQuCisKKzIwMDYtMDUtMTYgMTY6MTA6MzggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGRvY3MvbWFudWFsLzogRml4IHR5cG9zIGFuZCBtaW5vciBlcnJvcnMgaW4gc2FtcGxlIGNvZGUgKCMzNDE4NTYpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1iaW5zLnhtbDoKKwkgICogZG9jcy9tYW51YWwvYmFzaWNzLWluaXQueG1sOgorCSAgRml4IHR5cG9zIGFuZCBtaW5vciBlcnJvcnMgaW4gc2FtcGxlIGNvZGUgKCMzNDE4NTYpLgorCisyMDA2LTA1LTE2IDEzOjMxOjMyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL2Rlc2lnbi9wYXJ0LXFvcy50eHQ6IEZpeCBpbmRleGVzIGluIGZvcm11bGFzIHRvIG1ha2UgbW9yZSBzZW5zZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXFvcy50eHQ6CisJICBGaXggaW5kZXhlcyBpbiBmb3JtdWxhcyB0byBtYWtlIG1vcmUgc2Vuc2UuCisKKzIwMDYtMDUtMTUgMTE6NTQ6MjIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogRG9uJ3QgcmVwb3J0IFBPU0lUSU9OIGJhc2VkIG9uIGNsb2NrIHRpbWUgaWYgc3luYyBpcyBkaXNhYmxlZCBpbiBhIHNpbmsuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24pOgorCSAgRG9uJ3QgcmVwb3J0IFBPU0lUSU9OIGJhc2VkIG9uIGNsb2NrIHRpbWUgaWYgc3luYyBpcworCSAgZGlzYWJsZWQgaW4gYSBzaW5rLgorCisyMDA2LTA1LTE1IDA4OjE2OjA5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0b2JqZWN0Lmg6IEFkZCBjYXN0IHRvIG1ha2UgY29tcGlsZXIgaGFwcHkgLSByZWZjb3VudCB2YXJpYWJsZSB3YXMgYSBnaW50IGluIEdzdE9iamVjdCBidXQgaXMgYSBndWludCBpbiBHT2JqZWMuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0b2JqZWN0Lmg6CisJICBBZGQgY2FzdCB0byBtYWtlIGNvbXBpbGVyIGhhcHB5IC0gcmVmY291bnQgdmFyaWFibGUgd2FzIGEgZ2ludAorCSAgaW4gR3N0T2JqZWN0IGJ1dCBpcyBhIGd1aW50IGluIEdPYmplY3QgYW5kIGdfYXRvbWljX2ludF9nZXQoKQorCSAgd2FudHMgYSBnaW50ICouCisKKzIwMDYtMDUtMTQgMjM6MjM6NTYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBnc3QvcGFyc2UvTWFrZWZpbGUuYW06CisJICBmaXggcGFyYWxsZWwgbWFrZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaXggcGFyYWxsZWwgbWFrZQorCisyMDA2LTA1LTE0IDIxOjE4OjIzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgorCSAgdXBkYXRlIGNvbmZpZy5oCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHVwZGF0ZSBjb25maWcuaAorCisyMDA2LTA1LTE0IDIxOjE2OjU4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2dzdHBhZC5oOgorCSAgd2hpdGVzcGFjZSBmaXhlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB3aGl0ZXNwYWNlIGZpeGVzCisKKzIwMDYtMDUtMTQgMjE6MTY6NTAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBkb2NzL3JhbmRvbS9zdHJlYW1oZWFkZXI6CisJICBzb21lIHN0cmVhbWhlYWRlciB1cGRhdGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHNvbWUgc3RyZWFtaGVhZGVyIHVwZGF0ZXMKKworMjAwNi0wNS0xNCAxOToyNTo1MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgTWlub3IgZG9jcyBmaXhlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBnc3QvZ3N0ZXZlbnQuYzoKKwkgICogZ3N0L2dzdGV2ZW50Lmg6CisJICAqIGdzdC9nc3RtZXNzYWdlLmg6CisJICBNaW5vciBkb2NzIGZpeGVzLgorCisyMDA2LTA1LTE0IDE2OjAzOjIwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSogY29tbW9uOgorCSogY29uZmlndXJlLmFjOgorCSAgQmFjayB0byBDVlMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgQmFjayB0byBDVlMKKworPT09IHJlbGVhc2UgMC4xMC42ID09PQorCisyMDA2LTA1LTE0IDE1OjIwOjI0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgY29uZmlndXJlLmFjOiByZWxlYXNpbmcgMC4xMC42LCAiVGFrZSB0aGUgY2Fubm9saSIKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNi0wNS0xNCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgIHJlbGVhc2luZyAwLjEwLjYsICJUYWtlIHRoZSBjYW5ub2xpIgorCisyMDA2LTA1LTE0IDE1OjE4OjAyICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSogcG8vYWYucG86CisJKiBwby9hei5wbzoKKwkqIHBvL2JnLnBvOgorCSogcG8vY2EucG86CisJKiBwby9jcy5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkgIFVwZGF0ZSAucG8gZmlsZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgVXBkYXRlIC5wbyBmaWxlcworCisyMDA2LTA1LTEzIDE3OjUwOjExICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICB0b29scy9nc3QtbGF1bmNoLmM6IEZpeCB1c2Ugb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBpbiB0aGUgaHlwb3RoZXRpY2FsIGNhc2UgdGhhdCBzb21lIGJyb2tlbiBwbHVnaW4gY3JlYXRlcyBhIEdTVF8uLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChwcmludF90YWcpOgorCSAgRml4IHVzZSBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGluIHRoZSBoeXBvdGhldGljYWwKKwkgIGNhc2UgdGhhdCBzb21lIGJyb2tlbiBwbHVnaW4gY3JlYXRlcyBhIEdTVF9UQUdfSU1BR0UKKwkgIHRhZyBjb250YWluaW5nIGEgTlVMTCBidWZmZXIgKCMzNDE2NjcpLgorCisyMDA2LTA1LTEyIDE2OjUwOjM3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICB0b29scy9nc3QtbGF1bmNoLmM6IFByaW50IHNvbWV0aGluZyBtb3JlIGludGVsbGlnaWJsZSBmb3IgaW1hZ2UgdGFncyB3aGVuIHVzaW5nIHRoZSAtdCBzd2l0Y2ggKCMzNDE1NTYpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKHByaW50X3RhZyk6CisJICBQcmludCBzb21ldGhpbmcgbW9yZSBpbnRlbGxpZ2libGUgZm9yIGltYWdlIHRhZ3Mgd2hlbgorCSAgdXNpbmcgdGhlIC10IHN3aXRjaCAoIzM0MTU1NikuCisKKzIwMDYtMDUtMTIgMTQ6NTM6NDkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBNYWtlZmlsZS5hbTogdXBkYXRlcyBmb3Igd2luMzIKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBNYWtlZmlsZS5hbToKKwkgIHVwZGF0ZXMgZm9yIHdpbjMyCisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgIGRlZmluZSBHU1RfTUFKT1JNSU5PUiBzbyB3ZSBoYXZlIGl0IGF2YWlsYWJsZSBpbiB3aW4zMi9jb21tb24vY29uZmlnLmgKKwkgIFBvc3NpYmx5IHJlbW92ZSBpdCBmcm9tIG91ciBNYWtlZmlsZS5hbSBmaWxlcyBsYXRlcgorCSAgKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICAqIHdpbjMyL2NvbW1vbi9jb25maWcuaC5pbjoKKwkgIGFkZGVkIEdTVF9NQUpPUk1JTk9SCisJICAqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzogKHJlZ2lzdGVyX2dzdF9yZXNvdXJjZV9lcnJvcik6CisJICAqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6CisJICB1cGRhdGVkCisKKzIwMDYtMDUtMTIgMTM6NDI6NTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBkb2NzL3JhbmRvbS9zdHJlYW1oZWFkZXI6CisJICBhZGRpbmcgbm90ZXMgYWJvdXQgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBhbmQgaWRlYXMgYWJvdXQgc3RyZWFtaGVhZGVyCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFkZGluZyBub3RlcyBhYm91dCBjdXJyZW50IGltcGxlbWVudGF0aW9uIGFuZCBpZGVhcyBhYm91dCBzdHJlYW1oZWFkZXIKKworMjAwNi0wNS0xMiAxMDo1MDo0MiArMDAwMCAgU8OpYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgorCisJICB3aW4zMi9NQU5JRkVTVDogVXBkYXRlIHdpbjMyIGZpbGVzIGxpc3RpbmcuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogd2luMzIvTUFOSUZFU1Q6CisJICBVcGRhdGUgd2luMzIgZmlsZXMgbGlzdGluZy4KKwkgICogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKKwkgIEFkZCBHU1RfTUFKT1JNSU5PUiBkZWZpbml0aW9uLgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIEFkZCBuZXcgZXhwb3J0ZWQgZnVuY3Rpb25zLgorCisyMDA2LTA1LTEyIDA5OjI4OjIyICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+CisKKwkgIGdzdC9nc3RwbHVnaW4uYzogSWYgYW4gc28gZmlsZSBoYXMgbm8gcGx1Z2luIGVudHJ5IHBvaW50LCB1bmxvYWQgdGhlIG1vZHVsZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGx1Z2luLmM6IChnc3RfcGx1Z2luX2xvYWRfZmlsZSk6CisJICBJZiBhbiBzbyBmaWxlIGhhcyBubyBwbHVnaW4gZW50cnkgcG9pbnQsIHVubG9hZCB0aGUgbW9kdWxlLgorCisyMDA2LTA1LTExIDE5OjA3OjQ4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IERvbid0IGZvcmdldCB0byBzaWduYWwgdGhlIF9jaGFpbiBvciBfbG9vcCBmdW5jdGlvbiB3aGVuIHRoZSBxdWV1ZSBzaXplIG9yIHRocmVzaG9sZHMgY2guLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfY2hhaW4pLCAoZ3N0X3F1ZXVlX2xvb3ApLAorCSAgKGdzdF9xdWV1ZV9zZXRfcHJvcGVydHkpOgorCSAgRG9uJ3QgZm9yZ2V0IHRvIHNpZ25hbCB0aGUgX2NoYWluIG9yIF9sb29wIGZ1bmN0aW9uCisJICB3aGVuIHRoZSBxdWV1ZSBzaXplIG9yIHRocmVzaG9sZHMgY2hhbmdlIHNpbmNlIHRoYXQgbWlnaHQKKwkgIGNhdXNlIHRoZW0gdG8gbWFrZSBwcm9ncmVzIGFnYWluLgorCisyMDA2LTA1LTExIDE4OjEwOjM0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIEdfT0JKRUNUX0NMQVNTIG1hY3JvIHVzYWdlIGJhdGNoIGNsZWFudXAsIGZpeGVzICMzMzc3NDcgZm9yIGNvcmUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0Y2xvY2suYzogKGdzdF9jbG9ja19jbGFzc19pbml0KToKKwkgICogZ3N0L2dzdGluZGV4LmM6IChnc3RfaW5kZXhfY2xhc3NfaW5pdCk6CisJICAqIGdzdC9nc3RvYmplY3QuYzogKGdzdF9vYmplY3RfY2xhc3NfaW5pdCk6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfY2xhc3NfaW5pdCk6CisJICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX2NsYXNzX2luaXQpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NsYXNzX2luaXQpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19jbGFzc19pbml0KToKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NsYXNzX2luaXQpOgorCSAgKiBsaWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzoKKwkgIChnc3RfbmV0X2NsaWVudF9jbG9ja19jbGFzc19pbml0KToKKwkgICogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jOgorCSAgKGdzdF9uZXRfdGltZV9wcm92aWRlcl9jbGFzc19pbml0KToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6IChnc3RfY2Fwc2ZpbHRlcl9jbGFzc19pbml0KToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOiAoZ3N0X2Zha2Vfc2lua19jbGFzc19pbml0KToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6IChnc3RfZmFrZV9zcmNfY2xhc3NfaW5pdCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6IChnc3RfZmRfc2lua19jbGFzc19pbml0KToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOiAoZ3N0X2ZkX3NyY19jbGFzc19pbml0KToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOiAoZ3N0X2ZpbGVfc2lua19jbGFzc19pbml0KToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IChnc3RfZmlsZV9zcmNfY2xhc3NfaW5pdCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogKGdzdF9pZGVudGl0eV9jbGFzc19pbml0KToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzogKGdzdF90ZWVfY2xhc3NfaW5pdCk6CisJICAqIHRlc3RzL29sZC9leGFtcGxlcy9wbHVnaW5zL2V4YW1wbGUuYzogKGdzdF9leGFtcGxlX2NsYXNzX2luaXQpOgorCSAgKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3RocmVhZHMvc2lnbmFscy5jOiAoZ3N0X3Rlc3RfY2xhc3NfaW5pdCk6CisJICBHX09CSkVDVF9DTEFTUyBtYWNybyB1c2FnZSBiYXRjaCBjbGVhbnVwLCBmaXhlcyAjMzM3NzQ3IGZvciBjb3JlCisKKzIwMDYtMDUtMTEgMTA6MzU6MTQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RidWZmZXIuYzogUmVnaXN0ZXIgc3ViYnVmZXIgYWxvbmcgd2l0aCB0aGUgYnVmZmVyIHR5cGUgc28gdGhhdCBpdCBkb2VzIG5vdCBhY2NpZGVudGFsbHkgZ2V0cyByZWdpc3RlcmVkIGZyb20gTi4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RidWZmZXIuYzogKF9nc3RfYnVmZmVyX2luaXRpYWxpemUpOgorCSAgUmVnaXN0ZXIgc3ViYnVmZXIgYWxvbmcgd2l0aCB0aGUgYnVmZmVyIHR5cGUgc28gdGhhdAorCSAgaXQgZG9lcyBub3QgYWNjaWRlbnRhbGx5IGdldHMgcmVnaXN0ZXJlZCBmcm9tIE4KKwkgIGRpZmZlcmVudCBzdHJlYW1pbmcgdGhyZWFkcyBpbiBhIG5vbiB0aHJlYWRzYWZlIHdheS4KKworMjAwNi0wNS0xMCAxNjo0NDoxNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0LzogTWFrZSBndGstZG9jIGdlbmVyYXRlIGRvY3MgZm9yIG91ciBpbmxpbmVkIGdzdF9idWZmZXJfcmVmKCksIGdzdF9ldmVudF9yZWYoKSBhbmQgZ3N0X21lc3NhZ2VfcmVmKCkgZnVuY3Rpb25zIGFnLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJ1ZmZlci5oOgorCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKKwkgICogZ3N0L2dzdG1lc3NhZ2UuaDoKKwkgIE1ha2UgZ3RrLWRvYyBnZW5lcmF0ZSBkb2NzIGZvciBvdXIgaW5saW5lZCBnc3RfYnVmZmVyX3JlZigpLAorCSAgZ3N0X2V2ZW50X3JlZigpIGFuZCBnc3RfbWVzc2FnZV9yZWYoKSBmdW5jdGlvbnMgYWdhaW4KKwkgICh1Z2x5IGhhY2ssIHBsZWFzZSBkbyBmaXggaWYgdGhlcmUncyBhIGJldHRlciB3YXkgYmVzaWRlcworCSAgb3ZlcnJpZGVzLnR4dCwgd2hpY2ggZG9lc24ndCBzZWVtIHRvIHdvcmspLgorCisyMDA2LTA1LTEwIDE1OjQ5OjMwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDogYWRkIGFuIGFzc2VydCBmb3Igc2V0dGluZyBzdGF0ZSB0byBhdm9pZCBsb3RzIG9mIHJlcGV0aXRpdmUgY29kZSBpbiB0aGUgZnV0dXJlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDYtMDUtMTAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisJICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6CisJICBhZGQgYW4gYXNzZXJ0IGZvciBzZXR0aW5nIHN0YXRlIHRvIGF2b2lkIGxvdHMgb2YgcmVwZXRpdGl2ZSBjb2RlCisJICBpbiB0aGUgZnV0dXJlCisKKzIwMDYtMDUtMTAgMTU6Mzg6NTMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBnc3QvZ3N0dmFsdWUuYzogZml4IGEgbGVhayBpZiBubyBmbGFncyBhcmUgc2V0CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfc2VyaWFsaXplX2ZsYWdzKToKKwkgIGZpeCBhIGxlYWsgaWYgbm8gZmxhZ3MgYXJlIHNldAorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgIGZpeCBsZWFrIGluIHRlc3RzCisKKzIwMDYtMDUtMTAgMTU6MDA6MzIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGRvY3MvbWFudWFsL2Jhc2ljcy1wYWRzLnhtbDogRXhwYW5kIGEgYml0IG9uIGNhcHMgYW5kIGZpbHRlcmVkIGxpbmtzIGFuZCB1cGRhdGUgZXhhbXBsZXMgdGhhdCB3ZXJlIHN0aWxsIHVzaW5nIHRoZSBuby4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1wYWRzLnhtbDoKKwkgIEV4cGFuZCBhIGJpdCBvbiBjYXBzIGFuZCBmaWx0ZXJlZCBsaW5rcyBhbmQgdXBkYXRlCisJICBleGFtcGxlcyB0aGF0IHdlcmUgc3RpbGwgdXNpbmcgdGhlIG5vIGxvbmdlciBleGlzdGluZworCSAgZ3N0X3BhZF9saW5rX2ZpbHRlcmVkKCkgKCMzMzgyMDYpLgorCisyMDA2LTA1LTEwIDE0OjUxOjMzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLio6IE5vIG5lZWQgdG8gY2FsbCBfc3RvcCBpbiBfZmluYWxpemUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RfcGFkc19maW5hbGl6ZSksCisJICAoZ3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkKSwgKGdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZCksCisJICAoZ3N0X2NvbGxlY3RfcGFkc19zZXRfZmx1c2hpbmcpLCAoZ3N0X2NvbGxlY3RfcGFkc19zdGFydCksCisJICAoZ3N0X2NvbGxlY3RfcGFkc19zdG9wKToKKwkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oOgorCSAgTm8gbmVlZCB0byBjYWxsIF9zdG9wIGluIF9maW5hbGl6ZS4KKwkgIEl0ZXJhdGUgdGhlIG1haW4gcGFkIGxpc3QgaW4gX2ZpbmFsaXplLgorCSAgQWRkZWQgc29tZSBtb3JlIGRlYnVnLgorCSAgRnJlZSBsaXN0cyBhbmQgZGF0YSBpbiB0aGUgcmlnaHQgb3JkZXIuCisJICBBbHNvIGZyZWUgZGF0YSB3aGVtIGRvaW5nIF9yZW1vdmVfcGFkIHdoZW4gc3RvcHBlZCBmb3IKKwkgIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcHJvdGVjdCA6OnN0YXJ0ZWQgd2l0aCBQQURfTE9DSyBhcworCSAgd2VsbC4KKworMjAwNi0wNS0xMCAxNDoxMjoxNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGdzdC9nc3RzdHJ1Y3R1cmUuYzogYWRkIHNvbWUgY29tbWVudHMgcmVuYW1lIGEgbWV0aG9kIHNvIHRoYXQgaXQgYWN0dWFsbHkgc2F5cyB3aGF0IGl0IGRvZXMgYmV0dGVyCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOiAoZ3N0X3N0cnVjdHVyZV9ndHlwZV9mcm9tX2FiYnIpLAorCSAgKGdzdF9zdHJ1Y3R1cmVfcGFyc2VfdmFsdWUpOgorCSAgYWRkIHNvbWUgY29tbWVudHMKKwkgIHJlbmFtZSBhIG1ldGhvZCBzbyB0aGF0IGl0IGFjdHVhbGx5IHNheXMgd2hhdCBpdCBkb2VzIGJldHRlcgorCisyMDA2LTA1LTEwIDE0OjA1OjQ2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0LzogbWFrZSBzdXJlIHNvbWUgZXNzZW50aWFsIHR5cGVzIHVzZWQgYnkgZXZlbnRzIGFyZSByZWdpc3RlcmVkIGFzIHBhcnQgb2YgZ3N0X2luaXQoKQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RldmVudC5jOiAoX2dzdF9ldmVudF9pbml0aWFsaXplKToKKwkgICogZ3N0L2dzdGZvcm1hdC5jOiAoX2dzdF9mb3JtYXRfaW5pdGlhbGl6ZSk6CisJICBtYWtlIHN1cmUgc29tZSBlc3NlbnRpYWwgdHlwZXMgdXNlZCBieSBldmVudHMgYXJlIHJlZ2lzdGVyZWQKKwkgIGFzIHBhcnQgb2YgZ3N0X2luaXQoKQorCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF92YWx1ZV9zZXJpYWxpemVfZmxhZ3MpOgorCSAgaWYgbm8gZmxhZ3MgYXJlIHNldCwgc2VyaWFsaXplIHRoZW0gdG8gYSB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgTk9ORQorCSAgc28gdGhhdCBkZXNlcmlhbGl6aW5nIHRoZW0gd29ya3MKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RfdmFsdWVfc3VpdGUpOgorCSAgYWRkIHRlc3RzIGZvciBzZXJpYWxpemF0aW9uIGFuZCBkZXNlcmlhbGl6YXRpb24gb2YgZmxhZ3MKKworMjAwNi0wNS0xMCAxMzo1Mzo0OCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6CisJICBsaW1pdCB0byA4MCBjaGFycyBhZGQgbm90ZSBhYm91dCBjaGFuZ2luZyBkaXZpZGVyIGZvciBmbGFncworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBsaW1pdCB0byA4MCBjaGFycworCSAgYWRkIG5vdGUgYWJvdXQgY2hhbmdpbmcgZGl2aWRlciBmb3IgZmxhZ3MKKworMjAwNi0wNS0xMCAxMToyNDo1NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiBVcGRhdGUgZG9jcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChnc3RfY29sbGVjdF9wYWRzX2NvbGxlY3QpLAorCSAgKGdzdF9jb2xsZWN0X3BhZHNfY29sbGVjdF9yYW5nZSksIChnc3RfY29sbGVjdF9wYWRzX2F2YWlsYWJsZSksCisJICAoZ3N0X2NvbGxlY3RfcGFkc19jaGVja19wYWRzKSwgKGdzdF9jb2xsZWN0X3BhZHNfY2hlY2tfY29sbGVjdGVkKSwKKwkgIChnc3RfY29sbGVjdF9wYWRzX2V2ZW50KSwgKGdzdF9jb2xsZWN0X3BhZHNfY2hhaW4pOgorCSAgVXBkYXRlIGRvY3MuCisJICBCZXR0ZXIgZGVidWcgaW5mby4KKwkgIENhdGNoIGFuZCByZXR1cm4gZXJyb3JzIGZyb20gdGhlIGNvbGxlY3QgZnVuY3Rpb24KKwkgIFJlZnVzZSBkYXRhIG9uIGVvcyBwYWRzLgorCisyMDA2LTA1LTEwIDEwOjI2OjU1ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBnc3QvZ3N0aW50ZXJmYWNlLmg6IEdTVF9JTVBMRU1FTlRTX0lOVEVSRkFDRSBhbmQgR1NUX0lTX0lNUExFTUVOVFNfSU5URVJGQUNFIHVzZSB0aGUgbm9ybWFsCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGludGVyZmFjZS5oOgorCSAgR1NUX0lNUExFTUVOVFNfSU5URVJGQUNFIGFuZCBHU1RfSVNfSU1QTEVNRU5UU19JTlRFUkZBQ0UgdXNlIHRoZSBub3JtYWwKKwkgIEdJbnRlcmZhY2UgdHlwZSBjaGVja2luZy4KKwkgIFRoZXkgd2VyZSBwcmV2aW91c2x5IHVzaW5nIG5vbi1kZWZpbmVkIG1hY3Jvcy4KKworMjAwNi0wNS0wOSAyMDo0NzoyMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy4qOiBDbGVhbiB1cCB0aGUgbWVzcyB0aGF0IGlzIGNvbGxlY3RwYWRzLCBhZGQgY29tbWVudHMgYW5kCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RfcGFkc19pbml0KSwKKwkgIChnc3RfY29sbGVjdF9wYWRzX2ZpbmFsaXplKSwgKGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZCksCisJICAoZ3N0X2NvbGxlY3RfcGFkc19yZW1vdmVfcGFkKSwgKGdzdF9jb2xsZWN0X3BhZHNfc2V0X2ZsdXNoaW5nKSwKKwkgIChnc3RfY29sbGVjdF9wYWRzX3N0YXJ0KSwgKGdzdF9jb2xsZWN0X3BhZHNfc3RvcCksCisJICAoZ3N0X2NvbGxlY3RfcGFkc19wZWVrKSwgKGdzdF9jb2xsZWN0X3BhZHNfcG9wKSwKKwkgIChnc3RfY29sbGVjdF9wYWRzX2F2YWlsYWJsZSksIChnc3RfY29sbGVjdF9wYWRzX3JlYWQpLAorCSAgKGdzdF9jb2xsZWN0X3BhZHNfZmx1c2gpLCAoZ3N0X2NvbGxlY3RfcGFkc19jaGVja19wYWRzKSwKKwkgIChnc3RfY29sbGVjdF9wYWRzX2lzX2NvbGxlY3RlZCksIChnc3RfY29sbGVjdF9wYWRzX2V2ZW50KSwKKwkgIChnc3RfY29sbGVjdF9wYWRzX2NoYWluKToKKwkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oOgorCSAgQ2xlYW4gdXAgdGhlIG1lc3MgdGhhdCBpcyBjb2xsZWN0cGFkcywgYWRkIGNvbW1lbnRzIGFuZAorCSAgRklYTUVzIHdoZXJlIG5lZWRlZC4KKwkgIE1haW50YWluIGEgc2VwYXJhdGUgcGFkIGxpc3Qgc28gd2UgY2FuIGFkZCBwYWRzIHdoaWxlCisJICBjb2xsZWN0aW5nIHRoZSBvdGhlciBvbmVzLiBGb3IgdGhpcyB3ZSBuZWVkIGEgbmV3IHNlcGFyYXRlCisJICBsb2NrIChzZWUgY29taWNzKS4KKwkgIEZpeCBtZW1vcnkgbGVhayBpbiBmaW5hbGl6ZS4KKwkgIFJlZmFjdG9yIHNvbWUgd2VpcmQgY29kZSB0byBzZXQvdW5zZXQgcGFkIGZsdXNoaW5nIGZsYWdzLCBtYXJrCisJICB3aXRoIGNvbW1lbnRzLgorCSAgRG9uJ3QgY3Jhc2ggaW4gX2F2YWlsYWJsZSwgX3JlYWQsIF9mbHVzaCB3aGVuIHdlJ3JlIEVPUy4KKwkgICogdGVzdHMvY2hlY2svbGlicy8uY3ZzaWdub3JlOgorCSAgSWdub3JlIGFkYXB0ZXIgY2hlY2sgYmluYXJ5LgorCisyMDA2LTA1LTA5IDE5OjE0OjU1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2dzdGV2ZW50Lmg6CisJICBkb2Mgd2hpdGVzcGFjZSBmaXhlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBkb2Mgd2hpdGVzcGFjZSBmaXhlcworCisyMDA2LTA1LTA5IDE3OjU4OjM1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBDb25zdC1pZnkgR0VudW1WYWx1ZSBhcnJheXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGluZGV4LmM6IChnc3RfaW5kZXhfcmVzb2x2ZXJfZ2V0X3R5cGUpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6CisJICAoZ3N0X2Zha2Vfc2lua19zdGF0ZV9lcnJvcl9nZXRfdHlwZSk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiAoZ3N0X2Zha2Vfc3JjX2RhdGFfZ2V0X3R5cGUpLAorCSAgKGdzdF9mYWtlX3NyY19zaXpldHlwZV9nZXRfdHlwZSksIChnc3RfZmFrZV9zcmNfZmlsbHR5cGVfZ2V0X3R5cGUpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChxdWV1ZV9sZWFreV9nZXRfdHlwZSk6CisJICBDb25zdC1pZnkgR0VudW1WYWx1ZSBhcnJheXMuCisKKzIwMDYtMDUtMDkgMTM6MjM6MDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXIuYzogQWRkIHRlc3QgY2FzZSBmb3IgZmxhZ3MgKyBnc3RfYnVmZmVyX21ha2VfbWV0YWRhdGFfd3JpdGFibGUoKS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBBZGQgdGVzdCBjYXNlIGZvciBmbGFncyArIGdzdF9idWZmZXJfbWFrZV9tZXRhZGF0YV93cml0YWJsZSgpLgorCisyMDA2LTA1LTA5IDEyOjAxOjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0YnVmZmVyLmM6IGdzdF9idWZmZXJfbWFrZV9tZXRhZGF0YV93cml0YWJsZSgpIHNob3VsZCBtYWludGFpbiB0aGUgYnVmZmVyIGZsYWdzICh0aG9zZSB0aGF0IG1ha2Ugc2Vuc2UgYXQgbGVhc3QuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YnVmZmVyLmM6IChnc3RfYnVmZmVyX21ha2VfbWV0YWRhdGFfd3JpdGFibGUpOgorCSAgZ3N0X2J1ZmZlcl9tYWtlX21ldGFkYXRhX3dyaXRhYmxlKCkgc2hvdWxkIG1haW50YWluIHRoZQorCSAgYnVmZmVyIGZsYWdzICh0aG9zZSB0aGF0IG1ha2Ugc2Vuc2UgYXQgbGVhc3QpIChzZWUgIzM0MDg1OSkuCisKKzIwMDYtMDUtMDkgMTA6NTM6MTggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHRvb2xzLzogRml4IHVwIGluY2x1ZGVzOiBuZWVkIHRvIGluY2x1ZGUgc3RkbGliLmggaW4gdG9vbHMuaCBmb3IgZXhpdCgpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1pbnNwZWN0LmM6CisJICAqIHRvb2xzL2dzdC1sYXVuY2guYzoKKwkgICogdG9vbHMvZ3N0LXR5cGVmaW5kLmM6CisJICAqIHRvb2xzL2dzdC14bWxpbnNwZWN0LmM6CisJICAqIHRvb2xzL3Rvb2xzLmg6CisJICBGaXggdXAgaW5jbHVkZXM6IG5lZWQgdG8gaW5jbHVkZSBzdGRsaWIuaCBpbiB0b29scy5oIGZvciBleGl0KCkuCisKKzIwMDYtMDUtMDkgMTA6MDI6NTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3R0YWdsaXN0Lio6IEFQSTogYWRkIEdTVF9UQUdfSU1BR0UgdGFnICgjMzQwNzIxKS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dGFnbGlzdC5jOiAoX2dzdF90YWdfaW5pdGlhbGl6ZSk6CisJICAqIGdzdC9nc3R0YWdsaXN0Lmg6CisJICBBUEk6IGFkZCBHU1RfVEFHX0lNQUdFIHRhZyAoIzM0MDcyMSkuCisKKzIwMDYtMDUtMDggMTc6MTI6MDggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RxdWVyeS5jOiBBZGRlZCBzb21lIGRvY3MgZm9yIHRoZSBzZWdtZW50IHF1ZXJ5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RxdWVyeS5jOgorCSAgQWRkZWQgc29tZSBkb2NzIGZvciB0aGUgc2VnbWVudCBxdWVyeS4KKworMjAwNi0wNS0wOCAxNzowMzoxMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IEFsd2F5cyBwdXNoIG5vbi1mbHVzaGluZyBzZXJpYWxpemVkIGV2ZW50cyBpbiB0aGUgc3RyZWFtaW5nIHRocmVhZC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19wZXJmb3JtX3NlZWspLAorCSAgKGdzdF9iYXNlX3NyY19sb29wKSwgKGdzdF9iYXNlX3NyY19jaGFuZ2Vfc3RhdGUpOgorCSAgQWx3YXlzIHB1c2ggbm9uLWZsdXNoaW5nIHNlcmlhbGl6ZWQgZXZlbnRzIGluIHRoZSBzdHJlYW1pbmcKKwkgIHRocmVhZC4KKworMjAwNi0wNS0wOCAxNTo1MzoxMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzoKKwkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuaDoKKwkgIHdoaXRlc3BhY2UsIGNvbW1lbnQsIGRvYyBmaXh1cAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB3aGl0ZXNwYWNlLCBjb21tZW50LCBkb2MgZml4dXAKKworMjAwNi0wNS0wOCAxNTo1MjoyOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGdzdC9nc3RlcnJvci5jOiBBZGQgYSBtaXNzaW5nIGVycm9yIHN0cmluZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZXJyb3IuYzogKF9nc3Rfc3RyZWFtX2Vycm9yc19pbml0KToKKwkgIEFkZCBhIG1pc3NpbmcgZXJyb3Igc3RyaW5nLgorCisyMDA2LTA1LTA4IDE0OjU1OjI2ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBBZGQgYXBwbGllZF9yYXRlIHRvIHRoZSBkZWJ1ZworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfY29uZmlndXJlX3NlZ21lbnQpOgorCSAgQWRkIGFwcGxpZWRfcmF0ZSB0byB0aGUgZGVidWcKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfcGVyZm9ybV9zZWVrKToKKwkgIENvcHkgYXBwbGllZF9yYXRlIGludG8gdGhlIG91dGdvaW5nIE5FV1NFR01FTlQgZXZlbnQKKworMjAwNi0wNS0wOCAxMTo0OTo0MyArMDAwMCAgUGhpbGlwcGUgUm91cXVpZXIgPHBoaWxpcHBlcm9AbGliZXJ0eXN1cmYuZnI+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogY2FsbCA6OnVubG9jayBiZWZvcmUgdGFraW5nIHRoZSBQUkVST0xMX0xPQ0sgc28gd2UgY2FuIHNhZmVseSBoYW5kbGUgZWxlbWVudHMgdGhhdCBsb2NrIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogUGhpbGlwcGUgUm91cXVpZXIgPHBoaWxpcHBlcm8gYXQgbGliZXJ0eXN1cmYgZG90IGZyPgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX3NldF9mbHVzaGluZyksCisJICAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgorCSAgY2FsbCA6OnVubG9jayBiZWZvcmUgdGFraW5nIHRoZSBQUkVST0xMX0xPQ0sgc28gd2UgY2FuIHNhZmVseQorCSAgaGFuZGxlIGVsZW1lbnRzIHRoYXQgbG9jayBpbiA6OnJlbmRlci4KKwkgIEZpeGVzICMzNDAxNzQuCisKKzIwMDYtMDUtMDggMTE6NDM6MTkgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkgIGF1dG9nZW4uc2g6IERhcndpbidzIGxpYnRvb2xpemUgaXMgaW4gZmFjdCBjYWxsZWQgZ2xpYnRvb2xpemUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogYXV0b2dlbi5zaDogKENPTkZJR1VSRV9ERUZfT1BUKToKKwkgIERhcndpbidzIGxpYnRvb2xpemUgaXMgaW4gZmFjdCBjYWxsZWQgZ2xpYnRvb2xpemUuCisJICBBZGRpbmcgZ2xpYnRvb2xpemUgdG8gdGhlIGxpc3Qgb2YgYWNjZXB0ZWQgbmFtZXMgZm9yIGxpYnRvb2xpemUuCisKKzIwMDYtMDUtMDggMTE6MzU6MjkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBVbmlmeSBlcnJvciBoYW5kbGluZywgZG9uJ3QgcG9zdCBhbiBlcnJvciBtZXNzYWdlIHdoZW4gYSBwdXNoKCkgcmV0dXJucyBFT1MgYnV0IHBlcmZvcm0gby4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2xvb3ApOgorCSAgVW5pZnkgZXJyb3IgaGFuZGxpbmcsIGRvbid0IHBvc3QgYW4gZXJyb3IgbWVzc2FnZQorCSAgd2hlbiBhIHB1c2goKSByZXR1cm5zIEVPUyBidXQgcGVyZm9ybSBvdXIgbm9ybWFsIEVPUworCSAgaGFuZGxpbmcgY29kZS4gRml4ZXMgIzM0MDc3Mi4KKworMjAwNi0wNS0wOCAwOTo1MjozMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1vdmVydmlldy50eHQ6IE1ha2UgdXBzdGVhbS9kb3duc3RyZWFtIGNvbmNlcHRzIG1vcmUgY2xlYXIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1vdmVydmlldy50eHQ6CisJICBNYWtlIHVwc3RlYW0vZG93bnN0cmVhbSBjb25jZXB0cyBtb3JlIGNsZWFyLgorCSAgR2l2ZSBhbiBleGFtcGxlIG9mIHNlcmlhbGl6ZWQvbm9uLXNlcmlhbGl6ZWQgZXZlbnRzLgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtc3RyZWFtcy50eHQ6CisJICBNZW50aW9uIGFwcGxpZWRfcmF0ZS4KKwkgICogZG9jcy9kZXNpZ24vcGFydC10cmlja21vZGVzLnR4dDoKKwkgIE1lbnRpb24gYXBwbGllZCByYXRlLCBmbGVzaCBvdXQgc29tZSBtb3JlIHVzZSBjYXNlcy4KKwkgICogZ3N0L2dzdGV2ZW50LmM6IChnc3RfZXZlbnRfbmV3X25ld19zZWdtZW50KSwKKwkgIChnc3RfZXZlbnRfcGFyc2VfbmV3X3NlZ21lbnQpLCAoZ3N0X2V2ZW50X25ld19uZXdfc2VnbWVudF9mdWxsKSwKKwkgIChnc3RfZXZlbnRfcGFyc2VfbmV3X3NlZ21lbnRfZnVsbCksIChnc3RfZXZlbnRfbmV3X3RhZyksCisJICAoZ3N0X2V2ZW50X3BhcnNlX3RhZyksIChnc3RfZXZlbnRfbmV3X2J1ZmZlcl9zaXplKSwKKwkgIChnc3RfZXZlbnRfcGFyc2VfYnVmZmVyX3NpemUpLCAoZ3N0X2V2ZW50X25ld19xb3MpLAorCSAgKGdzdF9ldmVudF9wYXJzZV9xb3MpLCAoZ3N0X2V2ZW50X3BhcnNlX3NlZWspLAorCSAgKGdzdF9ldmVudF9uZXdfbmF2aWdhdGlvbik6CisJICAqIGdzdC9nc3RldmVudC5oOgorCSAgQWRkIGFwcGxpZWRfcmF0ZSBmaWVsZCB0byBORVdTRUdNRU5UIGV2ZW50LgorCSAgQVBJOiBnc3RfZXZlbnRfbmV3X25ld19zZWdtZW50X2Z1bGwoKQorCSAgQVBJOiBnc3RfZXZlbnRfcGFyc2VfbmV3X3NlZ21lbnRfZnVsbCgpCisJICAqIGdzdC9nc3RzZWdtZW50LmM6IChnc3Rfc2VnbWVudF9pbml0KSwgKGdzdF9zZWdtZW50X3NldF9zZWVrKSwKKwkgIChnc3Rfc2VnbWVudF9zZXRfbmV3c2VnbWVudCksIChnc3Rfc2VnbWVudF9zZXRfbmV3c2VnbWVudF9mdWxsKSwKKwkgIChnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSksIChnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUpOgorCSAgKiBnc3QvZ3N0c2VnbWVudC5oOgorCSAgQWRkIGFwcGxpZWRfcmF0ZSB0byBHc3RTZWdtZW50IHN0cnVjdHVyZS4KKwkgIE1ha2UgY2FsY3VsYXRpb24gb2Ygc3RyZWFtX3RpbWUgYW5kIHJ1bm5pbmdfdGltZSBtb3JlIGNvcnJlY3QKKwkgIHdydCByYXRlL2FwcGxpZWRfcmF0ZS4KKwkgIEFkZCBzb21lIG1vcmUgZG9jcy4KKwkgIEFQSTogR3N0U2VnbWVudDo6YXBwbGllZF9yYXRlIGZpZWxkCisJICBBUEk6IGdzdF9zZWdtZW50X3NldF9uZXdzZWdtZW50X2Z1bGwoKTsKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19jb25maWd1cmVfc2VnbWVudCksCisJICAoZ3N0X2Jhc2Vfc2lua19nZXRfc3luY190aW1lcyksIChnc3RfYmFzZV9zaW5rX2dldF9wb3NpdGlvbik6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zaW5rX2V2ZW50ZnVuYyksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2hhbmRsZV9idWZmZXIpOgorCSAgUGFyc2UgYW5kIHVzZSBhcHBsaWVkX3JhdGUgaW4gdGhlIEdzdFNlZ21lbnQgZmllbGQuCisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgQWRkIGNoZWNrIGZvciBhcHBsaWVkX3JhdGUgZmllbGQuCisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RzZWdtZW50LmM6IChHU1RfU1RBUlRfVEVTVCksCisJICAoZ3N0c2VnbWVudHNfc3VpdGUpOgorCSAgQWRkIG1vcmUgY2hlY2tzIGZvciB2YXJpb3VzIEdzdFNlZ21lbnQgb3BlcmF0aW9ucy4KKworMjAwNi0wNS0wOCAwOToxNjowMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBTdG9yZSB0aGUgc3luYyB0aW1lIG9mIHRoZSBidWZmZXIgZW5kIHBvc2l0aW9uIHNlcGFyYXRseSBpbiBhIG5ldyB2YXJpYWJsZSBlb3NfcnRpbWUgc28gLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19nZXRfc3luY190aW1lcyksCisJICAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKSwgKGdzdF9iYXNlX3NpbmtfY2hhaW5fdW5sb2NrZWQpLAorCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uKSwgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKKwkgIFN0b3JlIHRoZSBzeW5jIHRpbWUgb2YgdGhlIGJ1ZmZlciBlbmQgcG9zaXRpb24gc2VwYXJhdGx5IGluIGEKKwkgIG5ldyB2YXJpYWJsZSBlb3NfcnRpbWUgc28gd2UgY2FuIHByb3Blcmx5IHN5bmMgdGhlIEVPUyBldmVudC4KKwkgIEZpeGVzICMzNDA2OTcuCisJICBGaXggdGhlIGRvY3MgZm9yIGdzdF9iYXNlX3Npbmtfc2V0X3Fvc19lbmFibGVkKCkuCisJICBEb24ndCBzZXQgc2VnbWVudCBzdGFydCB0byBpbnZhbGlkIHZhbHVlIHdoZW4gd2UgcmVjZWl2ZSBhCisJICBub24gVElNRSBuZXdzZWdtZW50LgorCSAgZ2V0IGNsb3NlciB0byBoYW5kbGluZyBwb3NpdGlvbiByZXBvcnRpbmcgZm9yIG5lZ2F0aXZlIHJhdGVzCisJICBjb3JyZWN0bHkuCisKKzIwMDYtMDUtMDcgMTk6NTc6NDggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdGNhcHMuYzogRG9jcyBhYm91dCBob3cgdG8gcHJpbnQgY2FwcyBmb3IgZGVidWcgcHVycG9zZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGNhcHMuYzoKKwkgIERvY3MgYWJvdXQgaG93IHRvIHByaW50IGNhcHMgZm9yIGRlYnVnIHB1cnBvc2VzLgorCSAgKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzogKGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCk6CisJICB1c2UgZ3N0X2NhcHNfbWFrZV93cml0YWJsZSBpbnN0ZWFkIG9mIGdzdF9jYXBzX2NvcHksIEZpeGVzICMzNDA2MDgKKworMjAwNi0wNS0wNiAyMTo0NToyNyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0ZWxlbWVudC5jOiB1c2UgZnVsbCBlbnVtIG5hbWVzIGFuZCBwcmVwcmVuZCBhICclJyBpbiBkb2NzIHN0cmluZ3MgdG8gbWFrZSByZWNlbnQgZ3RrLWRvYyB0dXJuIHRoYXQgaW50byBhIGxpbmsKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSAgdXNlIGZ1bGwgZW51bSBuYW1lcyBhbmQgcHJlcHJlbmQgYSAnJScgaW4gZG9jcyBzdHJpbmdzIHRvIG1ha2UgcmVjZW50CisJICBndGstZG9jIHR1cm4gdGhhdCBpbnRvIGEgbGluaworCisyMDA2LTA1LTA1IDIxOjQ0OjU3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBkb2NzL21hbnVhbC86IFNvbWUgdHlwbyBmaXhlcywgc29tZSBhZGRpdGlvbnMsIHNvbWUgY2xhcmlmaWNhdGlvbnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9tYW51YWwvYmFzaWNzLWJpbnMueG1sOgorCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtYnVzLnhtbDoKKwkgICogZG9jcy9tYW51YWwvYmFzaWNzLXBhZHMueG1sOgorCSAgU29tZSB0eXBvIGZpeGVzLCBzb21lIGFkZGl0aW9ucywgc29tZSBjbGFyaWZpY2F0aW9ucy4KKworMjAwNi0wNS0wNSAxNzo0NTo0MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgdG9vbHMvOiBVc2UgdGhlIHN0cmluZyBwYXNzZWQgdG8gZ19vcHRpb25fY29udGV4dF9uZXcoKSBmb3Igd2hhdCBpdCdzIGludGVuZGVkIGZvciAtIHRoZSBwcm9ncmFtIG5hbWUgaXMgYWxyZWFkeSBwcmluLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKG1haW4pOgorCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChtYWluKToKKwkgICogdG9vbHMvZ3N0LXJ1bi5jOiAobWFpbik6CisJICAqIHRvb2xzL2dzdC10eXBlZmluZC5jOiAobWFpbik6CisJICAqIHRvb2xzL2dzdC14bWxpbnNwZWN0LmM6IChtYWluKToKKwkgIFVzZSB0aGUgc3RyaW5nIHBhc3NlZCB0byBnX29wdGlvbl9jb250ZXh0X25ldygpIGZvcgorCSAgd2hhdCBpdCdzIGludGVuZGVkIGZvciAtIHRoZSBwcm9ncmFtIG5hbWUgaXMgYWxyZWFkeQorCSAgcHJpbnRlZCBlbHNld2hlcmUuCisKKzIwMDYtMDUtMDUgMTc6MDc6NDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHRvb2xzLzogQWRkIGJhY2sgLS12ZXJzaW9uIGNvbW1hbmQgbGluZSBvcHRpb24gKCMzNDA0NjApLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL01ha2VmaWxlLmFtOgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAobWFpbik6CisJICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKG1haW4pOgorCSAgKiB0b29scy9nc3QteG1saW5zcGVjdC5jOiAobWFpbik6CisJICAqIHRvb2xzL3Rvb2xzLmg6CisJICBBZGQgYmFjayAtLXZlcnNpb24gY29tbWFuZCBsaW5lIG9wdGlvbiAoIzM0MDQ2MCkuCisJICAqIHRvb2xzL2dzdC10eXBlZmluZC5jOiAoaGF2ZV90eXBlX2hhbmRsZXIpLCAodHlwZWZpbmRfZmlsZSksIChtYWluKToKKwkgIEFkZCAtLXZlcnNpb24gb3B0aW9uIGFuZCB1c2UgR09wdGlvbiBmb3IgYXJndW1lbnQgcGFyc2luZzsgcmVmYWN0b3IgYQorCSAgYml0OyBhY2NlcHQgZGlyZWN0b3JpZXMgYXMgYXJndW1lbnRzIGFuZCByZWN1cnNlIGludG8gdGhlbTsgbGFzdGx5LAorCSAgcHJpbnQgYSBkZWNlbnQgZXJyb3IgbWVzc2FnZSB3aGVuIHRoaW5ncyBnbyB3cm9uZy4KKworMjAwNi0wNS0wNSAxNDozODowMSArMDAwMCAgTWFjaWVqIEthdGFmaWFzeiA8bWF0aHJpY2tAbWF0aHJpY2sub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBkb2NzL21hbnVhbC9iYXNpY3MtYmlucy54bWw6CisJKiBkb2NzL21hbnVhbC9iYXNpY3MtZWxlbWVudHMueG1sOgorCSAgRG9uJ3QgbWVudGlvbiBHc3RUaHJlYWQgKCMzNDA2MTEpCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIERvbid0IG1lbnRpb24gR3N0VGhyZWFkICgjMzQwNjExKQorCSAgVXBkYXRlIGxpbmsgdG8gR09iamVjdCB0dXRvcmlhbCAoIzM0MDYwNykKKworMjAwNi0wNS0wNSAxNDoyNzozMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0LzogQWRkIG5vdGUgYWJvdXQgcmVmY291bnRpbmcgYW5kIG1pbmlvYmplY3QvYnVmZmVyIHdyaXRlYWJpbGl0eSB0byBkb2NzLiBGaXhlcyAjMzQwNjA0CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJ1ZmZlci5oOgorCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5jOgorCSAgQWRkIG5vdGUgYWJvdXQgcmVmY291bnRpbmcgYW5kIG1pbmlvYmplY3QvYnVmZmVyIHdyaXRlYWJpbGl0eQorCSAgdG8gZG9jcy4gRml4ZXMgIzM0MDYwNAorCSAgKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKKwkgIEFkZGVkIHNvbWUgZXhwbGFuYXRpb24gYWJvdXQgQGtsYXNzLgorCisyMDA2LTA1LTA1IDE0OjA5OjIxICswMDAwICBNYWNpZWogS2F0YWZpYXN6IDxtYXRocmlja0BtYXRocmljay5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIGRvY3MvbWFudWFsL2ludHJvLW1vdGl2YXRpb24ueG1sOgorCSogZG9jcy9tYW51YWwvbWFudWFsLnhtbDoKKwkgIEF2b2lkIENPUkJBICYgQm9ub2JvIHJlZmVyZW5jZXMgKCMzNDA1OTgpCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIEF2b2lkIENPUkJBICYgQm9ub2JvIHJlZmVyZW5jZXMgKCMzNDA1OTgpCisKKzIwMDYtMDUtMDUgMTM6NTM6MjggKzAwMDAgIE1hY2llaiBLYXRhZmlhc3ogPG1hdGhyaWNrQG1hdGhyaWNrLm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogZG9jcy9tYW51YWwvYmFzaWNzLWJ1cy54bWw6CisJKiBkb2NzL21hbnVhbC9iYXNpY3MtcGFkcy54bWw6CisJICBGaXggdXAgc29tZSBpbmFjY3VyYWNpZXMgYW5kIG9taXNzaW9ucyBpbiBBRE0gKCMzNDA2MDkpCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIEZpeCB1cCBzb21lIGluYWNjdXJhY2llcyBhbmQgb21pc3Npb25zIGluIEFETSAoIzM0MDYwOSkKKworMjAwNi0wNS0wNSAxMjo1MzozMyArMDAwMCAgTWFjaWVqIEthdGFmaWFzeiA8bWF0aHJpY2tAbWF0aHJpY2sub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKKwkgIFNtYWxsIHR5cG8gaW4gZG9jcyAoIzM0MDYyNSkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgU21hbGwgdHlwbyBpbiBkb2NzICgjMzQwNjI1KQorCisyMDA2LTA1LTA1IDA5OjAxOjUyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvcGFyc2UvTWFrZWZpbGUuYW06IE1ha2UgJ21ha2UgLWonIHByb29mIChzZWUgIzM0MDY5OCkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L3BhcnNlL01ha2VmaWxlLmFtOgorCSAgTWFrZSAnbWFrZSAtaicgcHJvb2YgKHNlZSAjMzQwNjk4KS4KKworMjAwNi0wNS0wNSAwODo1NjozMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgY29uZmlndXJlLmFjOiBSZXF1aXJlIEdMaWItMi44IGhlcmUgYXMgd2VsbC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICBSZXF1aXJlIEdMaWItMi44IGhlcmUgYXMgd2VsbC4KKworMjAwNi0wNS0wNSAwODoxNzoyMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0LzogUmVtb3ZlIHByZSBnbGliMi44IGNvbXBhdGliaWxpdHksIGZpeGVzICMzNDA1MDgKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ2xpYi1jb21wYXQuYzoKKwkgICogZ3N0L2dzdC5jOiAoaW5pdF9wcmUpOgorCSAgKiBnc3QvZ3N0b2JqZWN0LmM6IChnc3Rfb2JqZWN0X2luaXQpLCAoZ3N0X29iamVjdF9yZWYpLAorCSAgKGdzdF9vYmplY3RfdW5yZWYpLCAoZ3N0X29iamVjdF9yZXBsYWNlKSwgKGdzdF9vYmplY3RfZGlzcG9zZSksCisJICAoZ3N0X29iamVjdF9kaXNwYXRjaF9wcm9wZXJ0aWVzX2NoYW5nZWQpOgorCSAgKiBnc3QvZ3N0b2JqZWN0Lmg6CisJICAqIGdzdC9nc3RyZWdpc3RyeXhtbC5jOiAoZ3N0X3JlZ2lzdHJ5X3htbF9yZWFkX2NhY2hlKToKKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOiAoZ3N0X3N0cnVjdHVyZV9zZXRfdmFsaXN0KToKKwkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfZGF0ZV9nZXRfdHlwZSksIChfZ3N0X3ZhbHVlX2luaXRpYWxpemUpOgorCSAgUmVtb3ZlIHByZSBnbGliMi44IGNvbXBhdGliaWxpdHksIGZpeGVzICMzNDA1MDgKKworMjAwNi0wNS0wNCAxODoxNDozMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdHRhZ2xpc3QuaDogTWVudGlvbiB0eXBlIG9mIHRhZ3MgaW4gZG9jIGJsdXJicy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dGFnbGlzdC5oOgorCSAgTWVudGlvbiB0eXBlIG9mIHRhZ3MgaW4gZG9jIGJsdXJicy4KKworMjAwNi0wNS0wNCAxNjozNDoyMCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGdzdC9nc3RwYWQuYzogUmVzdG9yZSBhY2NlcHRjYXBzIGNoZWNraW5nIGJlaGF2aW91ciBub3cgdGhhdCBnb29kIHBsdWdpbnMgaGF2ZSBiZWVuIHJlbGVhc2VkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfaW5pdCksIChnc3RfcGFkX2NvbmZpZ3VyZV9zaW5rKSwKKwkgIChnc3RfcGFkX2NvbmZpZ3VyZV9zcmMpLCAoZ3N0X3BhZF9wdXNoKToKKwkgIFJlc3RvcmUgYWNjZXB0Y2FwcyBjaGVja2luZyBiZWhhdmlvdXIgbm93IHRoYXQgZ29vZCBwbHVnaW5zIGhhdmUKKwkgIGJlZW4gcmVsZWFzZWQuCisKKzIwMDYtMDUtMDQgMTU6MjA6MTQgKzAwMDAgIEphbWVzIEFuZHJld2FydGhhIDx0cnM4MEB0YXJ0YXJ1cy51d2EuZWR1LmF1PgorCisJICBNYWtlIHN1cmUgZ3N0cHJpdmF0ZS5oIGFuZC9vciBjb25maWcuaCBhcmUgYWx3YXlzIGluY2x1ZGVkIGZpcnN0LCBvdGhlcndpc2Ugc29tZSBvZiBvdXIgZGVmaW5lcyAobGlrZSBfRklMRV9PRkZTRVRfQkkuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IEphbWVzIEFuZHJld2FydGhhIDx0cnM4MCBhdCB0YXJ0YXJ1cyB1d2EgZWR1IGF1PgorCSAgKiBnc3QvZ3N0LmM6CisJICAqIGdzdC9nc3RidXMuYzoKKwkgICogZ3N0L2dzdGNsb2NrLmM6CisJICAqIGdzdC9nc3RldmVudC5jOgorCSAgKiBnc3QvZ3N0Zm9ybWF0LmM6CisJICAqIGdzdC9nc3RtZXNzYWdlLmM6CisJICAqIGdzdC9nc3RwYXJzZS5jOgorCSAgKiBnc3QvZ3N0cXVlcnkuYzoKKwkgICogZ3N0L2dzdHV0aWxzLmM6CisJICAqIGdzdC9wYXJzZS9NYWtlZmlsZS5hbToKKwkgICogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdHB1c2hzcmMuYzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgorCSAgTWFrZSBzdXJlIGdzdHByaXZhdGUuaCBhbmQvb3IgY29uZmlnLmggYXJlCisJICBhbHdheXMgaW5jbHVkZWQgZmlyc3QsIG90aGVyd2lzZSBzb21lIG9mIG91cgorCSAgZGVmaW5lcyAobGlrZSBfRklMRV9PRkZTRVRfQklUUykgbWlnaHQgYmUKKwkgIHJlZGVmaW5lZCBpbiB0aGUgc3lzdGVtIGhlYWRlcnMuIEZpeGVzIGJ1aWxkCisJICBvbiBvcGVuc29sYXJpcyAoIzM0MDAxNikuCisKKzIwMDYtMDUtMDQgMTQ6MTk6NTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6IEFQSTogYWRkaXRpb246IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyKCkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSAgQVBJOiBhZGRpdGlvbjogZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIoKQorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzogKGdzdF9hZGFwdGVyX3B1c2gpLAorCSAgKGdzdF9hZGFwdGVyX3BlZWspLCAoZ3N0X2FkYXB0ZXJfdGFrZSksIChnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciksCisJICAoZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlX2Zhc3QpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuaDoKKwkgIFByZXBhcmUgZm9yIG9wdGltaXppbmcgdGhlIGhlbGwgb3V0IG9mIHRoaXMgaHVnZWx5IGluZWZmaWNpZW50CisJICBwaWVjZSBvZiBjb2RlLgorCSAgQWRkZWQgZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIoKSBzbyB3ZSBjYW4gYXQgbGVhc3Qgc3RhcnQgdGhpbmtpbmcKKwkgIGFib3V0IHN1YmJ1ZmZlcmluZyBhbmQgbWVyZ2luZy4KKwkgIEFkZGVkIHNvbWUgY29tbWVudHMuCisJICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSAgKiB0ZXN0cy9jaGVjay9saWJzL2FkYXB0ZXIuYzogKEdTVF9TVEFSVF9URVNUKSwKKwkgIChnc3RfYWRhcHRlcl9zdWl0ZSksIChtYWluKToKKwkgIEFkZGVkIEdzdEFkYXB0ZXIgY2hlY2suCisKKzIwMDYtMDUtMDQgMTM6MzA6MzAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZGVzaWduL3BhcnQtb3ZlcnZpZXcudHh0OiBGaXggc29tZSB0eXBvcywgYWRkIGJsdXJiIGFib3V0IGJ1ZmZlciBmbGFncy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LW92ZXJ2aWV3LnR4dDoKKwkgIEZpeCBzb21lIHR5cG9zLCBhZGQgYmx1cmIgYWJvdXQgYnVmZmVyIGZsYWdzLgorCisyMDA2LTA1LTAzIDE2OjQ1OjExICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDogbWFrZSBzdXJlIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyBzaG93cyB1cCBpbiB0aGUgZG9jcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJICBtYWtlIHN1cmUgR3N0QmFzZVRyYW5zZm9ybUNsYXNzIHNob3dzIHVwIGluIHRoZSBkb2NzCisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKKwkgIG1vdmUgZG9jcyBzbyBndGstZG9jIHBpY2tzIGl0IHVwIG5vdworCisyMDA2LTA1LTAzIDE2OjQyOjA4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSAgd2hpdGVzcGFjZSByZW1vdmFsIGFuZCB3aWR0aCBjb2VyY2lvbgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB3aGl0ZXNwYWNlIHJlbW92YWwgYW5kIHdpZHRoIGNvZXJjaW9uCisKKzIwMDYtMDUtMDMgMTY6NDA6NTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBNYWtlZmlsZS5hbToKKwkgIHdoaXRlc3BhY2UgbW92aW5nCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHdoaXRlc3BhY2UgbW92aW5nCisKKzIwMDYtMDUtMDIgMTc6Mjk6MDcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDogYWRkIG1pc3Npbmcgc3ltYm9scyB0byBkb2NzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkgIGFkZCBtaXNzaW5nIHN5bWJvbHMgdG8gZG9jcworCisyMDA2LTA1LTAyIDE3OjE3OjIyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogYmFjayBvdXQgdGhlIG5ld3NlZ21lbnQgaGFuZGxpbmcgY2hhbmdlLCBzZWUgIzM0MDA2MCBmb3Igb25nb2luZyBkaXNjdXNzaW9uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RfcGFkc19ldmVudCk6CisJICBiYWNrIG91dCB0aGUgbmV3c2VnbWVudCBoYW5kbGluZyBjaGFuZ2UsIHNlZSAjMzQwMDYwIGZvciBvbmdvaW5nCisJICBkaXNjdXNzaW9uCisKKzIwMDYtMDQtMjkgMjM6MTU6NDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHRvb2xzL2dzdC1ydW4uYzogRml4IHdyb25nIGdfZmlsZV90ZXN0KCkgdXNhZ2UgKHNlZSBnbGliIGRvY3MgZm9yIHdoeSBpdCBkb2Vzbid0IHdvcmspOyBmaXggdHlwbyBpbiBlcnJvciBtZXNzYWdlLiBGaS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1ydW4uYzogKGdldF9jYW5kaWRhdGVzKSwgKG1haW4pOgorCSAgRml4IHdyb25nIGdfZmlsZV90ZXN0KCkgdXNhZ2UgKHNlZSBnbGliIGRvY3MgZm9yIHdoeSBpdCBkb2Vzbid0CisJICB3b3JrKTsgZml4IHR5cG8gaW4gZXJyb3IgbWVzc2FnZS4gRml4ZXMgIzM0MDA3OS4KKworMjAwNi0wNC0yOSAwMDozODowNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGRvY3MvcGx1Z2lucy90bXBsLy5naXRpZ25vcmU6CisJICBpZ25vcmUgbW9yZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBpZ25vcmUgbW9yZQorCisyMDA2LTA0LTI5IDAwOjM2OjQ3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgbW92ZSB1cGxvYWQubWFrIHRvIGNvbW1vbgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbW1vbi9NYWtlZmlsZS5hbToKKwkgICogZG9jcy9NYWtlZmlsZS5hbToKKwkgICogZG9jcy9mYXEvTWFrZWZpbGUuYW06CisJICAqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgorCSAgKiBkb2NzL2xpYnMvTWFrZWZpbGUuYW06CisJICAqIGRvY3MvbWFudWFsL01ha2VmaWxlLmFtOgorCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06CisJICAqIGRvY3MvcHdnL01ha2VmaWxlLmFtOgorCSAgKiBkb2NzL3NsaWRlcy9NYWtlZmlsZS5hbToKKwkgICogZG9jcy91cGxvYWQubWFrOgorCSAgKiBjb21tb24vdXBsb2FkLm1hazoKKwkgIG1vdmUgdXBsb2FkLm1hayB0byBjb21tb24KKworMjAwNi0wNC0yOSAwMDozNTo0OCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGRvY3MvcmFuZG9tL21vdmluZy1wbHVnaW5zOgorCSAgYWRkIG1vcmUgbm90ZXMgb24gbW92aW5nCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFkZCBtb3JlIG5vdGVzIG9uIG1vdmluZworCisyMDA2LTA0LTI5IDAwOjMzOjQ0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6IGFkZCBtb3JlIGFzc2VydHMgb24gcmVmY291bnRzIGRvIG1vcmUgY2xlYW51cCBhdCBlbmQgb2YgdGVzdHMgZml4IHRlc3QgbGVha3Mgc2hvd2luZyBpLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDYtMDQtMjkgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgYWRkIG1vcmUgYXNzZXJ0cyBvbiByZWZjb3VudHMKKwkgIGRvIG1vcmUgY2xlYW51cCBhdCBlbmQgb2YgdGVzdHMKKwkgIGZpeCB0ZXN0IGxlYWtzIHNob3dpbmcgaW4gRkM1CisKKzIwMDYtMDQtMjggMjI6NTY6MjggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogcmV2ZXJ0ZWQgd3JvbmcgY2hhbmdlIGFuZCByZWZsb3dlZCBjb2RlIHRvIGF2b2lkIG90aGVycyBmYWxsaW5nIGludG8gdGhpcyB0cmFwCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfaGFuZGxlX2V2ZW50KToKKwkgIHJldmVydGVkIHdyb25nIGNoYW5nZSBhbmQgcmVmbG93ZWQgY29kZSB0byBhdm9pZCBvdGhlcnMgZmFsbGluZyBpbnRvCisJICB0aGlzIHRyYXAKKworMjAwNi0wNC0yOCAyMDo1NTozMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IGZpeCBjaGFuZ2Vsb2cgZW50cnkgYWJvdXQgbGFzdCBjb2xsZWN0cGFkcyBjaGFuZ2UsIGFkZCBub3RlcyBhYm91dCBwcm9wZXIgZml4CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RfcGFkc19ldmVudCk6CisJICBmaXggY2hhbmdlbG9nIGVudHJ5IGFib3V0IGxhc3QgY29sbGVjdHBhZHMgY2hhbmdlLAorCSAgYWRkIG5vdGVzIGFib3V0IHByb3BlciBmaXgKKworMjAwNi0wNC0yOCAyMDo0NzoyMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvOiBvbmx5IHdyaXRlIG91dCByZWdpc3RyeSBpZiBpdCBoYXMgY2hhbmdlZCwgZml4ZXMgIzMzODMzOQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3QuYzoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6IChnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2xldmVsKSwKKwkgIChnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoKToKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5Lmg6CisJICBvbmx5IHdyaXRlIG91dCByZWdpc3RyeSBpZiBpdCBoYXMgY2hhbmdlZCwgZml4ZXMgIzMzODMzOQorCisyMDA2LTA0LTI4IDIwOjQ0OjIxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC86IG9ubHkgd3JpdGUgb3V0IHJlZ2lzdHJ5IGlmIGl0IGhhcyBjaGFuZ2VkLCBmaXhlcyAjMzM4MzM5CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdC5jOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzogKGdzdF9yZWdpc3RyeV9zY2FuX3BhdGhfbGV2ZWwpLAorCSAgKGdzdF9yZWdpc3RyeV9zY2FuX3BhdGgpOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnkuaDoKKwkgIG9ubHkgd3JpdGUgb3V0IHJlZ2lzdHJ5IGlmIGl0IGhhcyBjaGFuZ2VkLCBmaXhlcyAjMzM4MzM5CisKKzIwMDYtMDQtMjggMTg6NTU6MTcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgbWFrZSBHc3RFbGVtZW50RGV0YWlscyBjb25zdAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RiaW4uYzoKKwkgICogZ3N0L2dzdHBpcGVsaW5lLmM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9oYW5kbGVfZXZlbnQpOgorCSAgbWFrZSBHc3RFbGVtZW50RGV0YWlscyBjb25zdAorCisyMDA2LTA0LTI4IDE4OjQ4OjM4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvOiBtb3JlIGRldGFpbGVkIGRlYnVnIGFuZCBmb3JtYXR0aW5nIGNsZWFudXAKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2V2ZW50KToKKwkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RfcGFkc19iYXNlX2luaXQpLAorCSAgKGdzdF9jb2xsZWN0X3BhZHNfaXNfY29sbGVjdGVkKSwgKGdzdF9jb2xsZWN0X3BhZHNfZXZlbnQpOgorCSAgbW9yZSBkZXRhaWxlZCBkZWJ1ZyBhbmQgZm9ybWF0dGluZyBjbGVhbnVwCisKKzIwMDYtMDQtMjggMTc6NTI6MTMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdHV0aWxzLmM6IGNsZWFudXAgZG91YmxlIGNvZGUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9lbGVtZW50X2xpbmtfcGFkcyk6CisJICBjbGVhbnVwIGRvdWJsZSBjb2RlCisKKzIwMDYtMDQtMjggMTc6MzM6NDEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6IHNvbWUgbGl0dGxlIHR1bmluZworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgorCSAgKGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzKToKKwkgIHNvbWUgbGl0dGxlIHR1bmluZworCSAgKiB0ZXN0cy9jaGVjay9saWJzL2NvbnRyb2xsZXIuYzogKEdTVF9TVEFSVF9URVNUKSwKKwkgIChnc3RfY29udHJvbGxlcl9zdWl0ZSk6CisJICBhIG5ldyB0ZXN0IGZvciBsaXZlIHZhbHVlIGhhbmRsaW5nCisKKzIwMDYtMDQtMjggMTU6NTE6NTYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkqIENoYW5nZUxvZzoKKwkgIEdpdmUgY3JlZGl0IHRvIFRhcGkgUGFhdm9sYSBmb3IgbGFzdCBwYXRjaAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBHaXZlIGNyZWRpdCB0byBUYXBpIFBhYXZvbGEgZm9yIGxhc3QgcGF0Y2gKKworMjAwNi0wNC0yOCAxNTo0ODo1MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHV0aWxzLmM6IEFkZGVkIHNvbWUgbW9yZSBkb2NzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R1dGlscy5jOiAocHVzaF9hbmRfcmVmKToKKwkgIEFkZGVkIHNvbWUgbW9yZSBkb2NzLgorCSAgRml4IHJlZmNvdW50IGlzc3VlIHdoaXRoIGdzdF9lbGVtZW50X2ZvdW5kX3RhZ3MoKSBoZWxwZXIKKwkgIGZ1bmN0aW9uLiBGaXhlcyAjMzM4MzM1CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3V0aWxzX3N1aXRlKToKKwkgIEFkZGVkIHRlc3RzdWl0ZSBmb3IgZ3N0X2VsZW1lbnRfZm91bmRfdGFncygpLgorCisyMDA2LTA0LTI4IDEzOjUxOjAwICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+CisKKwkgIGdzdC9nc3R2YWx1ZS5jOiBBdm9pZCBOVUxMIGRlcmVmZXJlbmNlIHdoZW4gdHJ5aW5nIHRvIHNlcmlhbGl6ZSBmbGFncyBjb250YWluaW5nIGludmFsaWQgdmFsdWVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9mbGFncyk6CisJICBBdm9pZCBOVUxMIGRlcmVmZXJlbmNlIHdoZW4gdHJ5aW5nIHRvIHNlcmlhbGl6ZSBmbGFncyBjb250YWluaW5nCisJICBpbnZhbGlkIHZhbHVlcy4KKworMjAwNi0wNC0yOCAxMzo0NDoyMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHNtYWxsIGRvYyBmaXgKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgc21hbGwgZG9jIGZpeAorCisyMDA2LTA0LTI4IDEzOjQzOjAzICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6IElmIHdlIGdldCBFT1MgYmVmb3JlIGFueSBkYXRhIGlzIGFjY3VtdWxhdGVkLCBkb24ndCB1c2UgdW5pbml0aWFsaXNlZCBsb2NhbCB2YS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6CisJICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2hhbmRsZV9ldmVudCk6CisJICBJZiB3ZSBnZXQgRU9TIGJlZm9yZSBhbnkgZGF0YSBpcyBhY2N1bXVsYXRlZCwgZG9uJ3QgdXNlCisJICB1bmluaXRpYWxpc2VkIGxvY2FsIHZhcmlhYmxlcy4KKworMjAwNi0wNC0yOCAxMzo0MDoxNSArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgorCisJICBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6IEZpeGVzIGluIHJlYWRpbmcvd3JpdGluZyBldmVudHMgb3ZlciBHRFAgKG5vdCBjdXJyZW50bHkgdXNlZD8pIC0gZGVyZWZlcmVuY2luZyAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6IChnc3RfZHBfcGFja2V0X2Zyb21fZXZlbnQpLAorCSAgKGdzdF9kcF9ldmVudF9mcm9tX3BhY2tldCk6CisJICBGaXhlcyBpbiByZWFkaW5nL3dyaXRpbmcgZXZlbnRzIG92ZXIgR0RQIChub3QgY3VycmVudGx5IHVzZWQ/KSAtCisJICBkZXJlZmVyZW5jaW5nIE5VTEwgZXZlbnRzIGZvciB1bmtub3duL2ludmFsaWQgZXZlbnQgdHlwZXMsIG1lbW9yeQorCSAgbGVhaywgYW5kIGNoYW5nZSBnX3dhcm5pbmcgdG8gR1NUX1dBUk5JTkcuCisKKzIwMDYtMDQtMjggMTM6MjU6NTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogV2hlbiBmcmFtZSBkcm9wcGluZyBpcyBlbmFibGVkLCB3ZSBzaG91bGQgbm90IGlnbm9yZSBmcmFtZXMgd2l0aG91dCBhIGR1cmF0aW9uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfaXNfdG9vX2xhdGUpLAorCSAgKGdzdF9iYXNlX3NpbmtfZG9fcmVuZGVyX3N0YXRzKSwgKGdzdF9iYXNlX3NpbmtfcmVuZGVyX29iamVjdCksCisJICAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24pLCAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgorCSAgV2hlbiBmcmFtZSBkcm9wcGluZyBpcyBlbmFibGVkLCB3ZSBzaG91bGQgbm90IGlnbm9yZSBmcmFtZXMKKwkgIHdpdGhvdXQgYSBkdXJhdGlvbi4KKwkgIFVwZGF0ZSBzb21lIGRvY3VtZW50YXRpb24uCisKKzIwMDYtMDQtMjggMTM6MTg6NDEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBEb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfcGVyZm9ybV9zZWVrKSwKKwkgIChnc3RfYmFzZV9zcmNfc2VuZF9ldmVudCksIChnc3RfYmFzZV9zcmNfY2hhbmdlX3N0YXRlKToKKwkgIERvY3VtZW50YXRpb24gdXBkYXRlcy4KKworMjAwNi0wNC0yOCAxMzoxNjowMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzogaGFuZGxlIEVBR0FJTiwgRUlOVFIgYW5kIHNob3J0IHdyaXRlcyBjb3JyZWN0bHkuIEFsc28gY2xlYW4gdXAgc29tZSBlcnJvciBjYXNlcywgYXZvaWQgLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzogKGdzdF9mZF9zaW5rX3JlbmRlciksCisJICAoZ3N0X2ZkX3NpbmtfY2hlY2tfZmQpLCAoZ3N0X2ZkX3NpbmtfdXBkYXRlX2ZkKToKKwkgIGhhbmRsZSBFQUdBSU4sIEVJTlRSIGFuZCBzaG9ydCB3cml0ZXMgY29ycmVjdGx5LiBBbHNvIGNsZWFuCisJICB1cCBzb21lIGVycm9yIGNhc2VzLCBhdm9pZCBhIGRlYWRsb2NrIG9uIGJhZCBmaWxlIGRlc2NyaXB0b3JzIGFuZAorCSAgdXNlIEdTVF9ERUJVR19PQkpFQ1QuCisJICBGaXhlcyAjMzM5ODQzCisKKzIwMDYtMDQtMjggMTM6MTM6MjMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3R2YWx1ZS5jOiBEb24ndCB0cnkgdG8gc2VyaWFsaXplIGEgR1ZhbHVlIHdpdGggYSBOVUxMIGJ1ZmZlci4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF92YWx1ZV9zZXJpYWxpemVfYnVmZmVyKSwKKwkgIChnc3RfdmFsdWVfZGVzZXJpYWxpemVfYnVmZmVyKToKKwkgIERvbid0IHRyeSB0byBzZXJpYWxpemUgYSBHVmFsdWUgd2l0aCBhIE5VTEwgYnVmZmVyLgorCSAgRml4ZXMgIzMzOTgyMS4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RfdmFsdWVfc3VpdGUpOgorCSAgQWRkZWQgY2hlY2sgZm9yIHNlcmlhbGlzYXRpb24gb2YgTlVMTCBidWZmZXJzLgorCisyMDA2LTA0LTI4IDEzOjEwOjA3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0bWluaW9iamVjdC5jOiBUYWtpbmcgYSBOVUxMIG1pbmlvYmplY3QgaXMgdmFsaWQsIGZpeCB0aGUgY2FzZSB3aGVyZSB3ZSB0cnkgdG8gdW5yZWYgdGhlIE5VTEwgbWluaW9iamVjdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5jOiAoZ3N0X3ZhbHVlX3Rha2VfbWluaV9vYmplY3QpOgorCSAgVGFraW5nIGEgTlVMTCBtaW5pb2JqZWN0IGlzIHZhbGlkLCBmaXggdGhlIGNhc2Ugd2hlcmUKKwkgIHdlIHRyeSB0byB1bnJlZiB0aGUgTlVMTCBtaW5pb2JqZWN0LgorCisyMDA2LTA0LTI4IDEzOjA1OjE5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgorCSAgdXBkYXRlIHdpbjMyIGNvbmZpZy5oCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHVwZGF0ZSB3aW4zMiBjb25maWcuaAorCisyMDA2LTA0LTI4IDEzOjA0OjA3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0Bzb25pY3B1bHNlLmRlPgorCisJICBnc3QvZ3N0YmluLmM6IFVwZGF0ZSBkb2NzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogU3RlZmFuIEtvc3QgPGVuc29uaWMgYXQgc29uaWNwdWxzZSBkb3QgZGU+CisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5faGFuZGxlX21lc3NhZ2VfZnVuYyk6CisJICBVcGRhdGUgZG9jcy4KKwkgIERvbid0IGxlYWsgYmluIHJlZmNvdW50IHdoZW4gYSBzdGF0ZSByZWNhbGMgaXMKKwkgIGluIHByb2dyZXNzIGFuZCB3ZSBkZWxheSBhbm90aGVyIG9uZSAjMzM5ODA4LgorCisyMDA2LTA0LTI4IDEyOjU4OjE1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OiBNZW50aW9uIFFvUyBhcyBhbiBvbmdvaW5nIHdvcmsgaXRlbS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgorCSAgTWVudGlvbiBRb1MgYXMgYW4gb25nb2luZyB3b3JrIGl0ZW0uCisJICAqIGRvY3MvZGVzaWduL3BhcnQtYnVmZmVyaW5nLnR4dDoKKwkgIE5ldyBkb2MgYWJvdXQgYnVmZmVyaW5nIHRoYXQgbmVlZHMgdG8gYmUgZmxlc2hlZCBvdXQKKwkgIGF0IHNvbWUgcG9pbnQuCisJICAqIGRvY3MvZGVzaWduL3BhcnQtcW9zLnR4dDoKKwkgIE1vcmUgUW9TIHBvbGljeSBmb3IgZGVjb2RlcnMvZGVtdXhlcnMvdHJhbnNmb3JtcworCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXRyaWNrbW9kZXMudHh0OgorCSAgU21hbGwgdXBkYXRlLgorCisyMDA2LTA0LTI4IDEwOjU2OjA0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogY29uZmlndXJlLmFjOgorCSAgYmFjayB0byBIRUFECisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGJhY2sgdG8gSEVBRAorCis9PT0gcmVsZWFzZSAwLjEwLjUgPT09CisKKzIwMDYtMDQtMjggMTA6NTM6MzMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBORVdTOgorCSogUkVMRUFTRToKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkgIHJlbGVhc2luZyAwLjEwLjUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVsZWFzaW5nIDAuMTAuNQorCisyMDA2LTA0LTI4IDA5OjQ4OjA5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLnNpZ25hbHM6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgorCSogZG9jcy91cGxvYWQubWFrOgorCSAgZml4IHVwbG9hZC5tYWs7IHNob3VsZCBtb3ZlIHRvIGNvbW1vbgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaXggdXBsb2FkLm1hazsgc2hvdWxkIG1vdmUgdG8gY29tbW9uCisKKzIwMDYtMDQtMjggMDk6MjA6MjYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiB3aW4zMi9NQU5JRkVTVDoKKwkgIGFkZGluZyBtaXNzaW5nIGRzcCBmaWxlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGRpbmcgbWlzc2luZyBkc3AgZmlsZXMKKworMjAwNi0wNC0yNiAxMzo1NDo0OCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkgIHByZXJlbGVhc2UKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcHJlcmVsZWFzZQorCisyMDA2LTA0LTIyIDIxOjM0OjIzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvOiBGaXggaW50ZXJuYWwgZGF0YSBmbG93IGVycm9ycy4gIEZpeGVzICMzMzg3MTEuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHBhdGNoIGJ5OiBXaW0gVGF5bWFucworCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2luaXQpLCAoZ3N0X3BhZF9jb25maWd1cmVfc2luayksCisJICAoZ3N0X3BhZF9jb25maWd1cmVfc3JjKSwgKGdzdF9wYWRfcHVzaCk6CisJICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX2luaXQpOgorCSAgRml4IGludGVybmFsIGRhdGEgZmxvdyBlcnJvcnMuICBGaXhlcyAjMzM4NzExLgorCisyMDA2LTA0LTEyIDExOjU4OjQzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICB0ZXN0cy9jaGVjay9nc3QvZ3N0ZWxlbWVudC5jOiBEb24ndCBsZWFrIHRoZSBmYWN0b3J5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RlbGVtZW50LmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBEb24ndCBsZWFrIHRoZSBmYWN0b3J5LgorCisyMDA2LTA0LTEyIDExOjA2OjQ0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogcG8vYmcucG86CisJKiBwby9jcy5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vbmwucG86CisJKiBwby9ydS5wbzoKKwkqIHBvL3NxLnBvOgorCSogcG8vc3IucG86CisJKiBwby9zdi5wbzoKKwkqIHBvL3RyLnBvOgorCSogcG8vdWsucG86CisJKiBwby92aS5wbzoKKwkqIHBvL3poX1RXLnBvOgorCSAgdXBkYXRlZCB0cmFuc2xhdGlvbnMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgdXBkYXRlZCB0cmFuc2xhdGlvbnMKKworMjAwNi0wNC0xMiAxMTowNDozNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIHBvL2FmLnBvOgorCSogcG8vYXoucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kZS5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZnIucG86CisJKiBwby9pdC5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9ydS5wbzoKKwkqIHBvL3NxLnBvOgorCSogcG8vc3IucG86CisJKiBwby9zdi5wbzoKKwkqIHBvL3RyLnBvOgorCSogcG8vdWsucG86CisJKiBwby92aS5wbzoKKwkqIHBvL3poX0NOLnBvOgorCSogcG8vemhfVFcucG86CisJICB1cGRhdGUgbGlidG9vbCB2ZXJzaW9uaW5nCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHVwZGF0ZSBsaWJ0b29sIHZlcnNpb25pbmcKKworMjAwNi0wNC0xMiAxMDo1NzoyNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkgIHByZXJlbGVhc2UKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcHJlcmVsZWFzZQorCisyMDA2LTA0LTEyIDEwOjI4OjUzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzogRnJlZSBhbGxvY2F0ZWQgR3N0VGltZWRWYWx1ZXMgd2hlbiBmcmVlaW5nIGxpc3Qgbm9kZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6IChnc3RfY29udHJvbGxlcl91bnNldCksCisJICAoZ3N0X2NvbnRyb2xsZXJfdW5zZXRfYWxsKToKKwkgIEZyZWUgYWxsb2NhdGVkIEdzdFRpbWVkVmFsdWVzIHdoZW4gZnJlZWluZyBsaXN0IG5vZGVzLgorCSAgU2hvdWxkIGZpeCBsZWFrcyAnbWFrZSBjaGVjay12YWxncmluZCcgY29tcGxhaW5zIGFib3V0LgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0Y29udHJvbGxlci5kZWY6CisJICBBZGQgZ3N0X2NvbnRyb2xsZXJfdW5zZXRfYWxsLgorCisyMDA2LTA0LTEyIDEwOjE1OjEyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSAgZml4IENoYW5nZUxvZworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaXggQ2hhbmdlTG9nCisKKzIwMDYtMDQtMTEgMjE6MDc6MjYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgQWRkZWQgbmV3IG1ldGhvZCBfdW5zZXRfYWxsKCkgYW5kIGZpeGVkIF91bnNldCgpCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6IChnc3RfY29udHJvbGxlcl91bnNldCksCisJICAoZ3N0X2NvbnRyb2xsZXJfdW5zZXRfYWxsKToKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmg6CisJICBBZGRlZCBuZXcgbWV0aG9kIF91bnNldF9hbGwoKSBhbmQgZml4ZWQgX3Vuc2V0KCkKKwkgICogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6IChHU1RfU1RBUlRfVEVTVCksCisJICAoZ3N0X2NvbnRyb2xsZXJfc3VpdGUpOgorCSAgQWRkZWQgdHdvIHRlc3RjYXNlcyBmb3IgbmV3IGFuZCBmaXhlZCBtZXRob2QKKworMjAwNi0wNC0xMSAxODo0MzowNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwYWNrZXQuYzogTVNHX0RPTlRXQUlUIGlzIG5vdCBkZWZpbmVkIG9uIEN5Z3dpbiwgc28gd29yayBhcm91bmQgdGhhdCAoZml4ZXMgIzMxNzA0OCkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwYWNrZXQuYzogKGdzdF9uZXRfdGltZV9wYWNrZXRfc2VuZCk6CisJICBNU0dfRE9OVFdBSVQgaXMgbm90IGRlZmluZWQgb24gQ3lnd2luLCBzbyB3b3JrCisJICBhcm91bmQgdGhhdCAoZml4ZXMgIzMxNzA0OCkuCisKKzIwMDYtMDQtMTEgMTQ6NDg6MzQgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KKworCSogZ3N0cmVhbWVyLnNwZWMuaW46CisJICBmaXggdmVyc2lvbmluZyBtYWNybworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaXggdmVyc2lvbmluZyBtYWNybworCisyMDA2LTA0LTExIDExOjQ3OjM5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzogU29tZSBjbGVhbnVwcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzogKGdzdF9lbGVtZW50X3JlZ2lzdGVyKSwKKwkgIChnc3RfZWxlbWVudF9mYWN0b3J5X2NyZWF0ZSksIChnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UpOgorCSAgU29tZSBjbGVhbnVwcy4KKwkgIEZpeGVkIGEgRklYTUUuCisJICBVcGRhdGVkIGRvY3MgKEZpeGVzICMxMzEwNzkpCisJICAqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6IChnc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZCk6CisJICBTbWFsbCBjbGVhbnVwcy4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGVsZW1lbnQuYzogKEdTVF9TVEFSVF9URVNUKSwKKwkgIChnc3RfZWxlbWVudF9zdWl0ZSk6CisJICBBZGRlZCB0ZXN0Y2FzZSBmb3IgZWxlbWVudGZhY3RvcnkgY2xhc3MgZmllbGQuCisKKzIwMDYtMDQtMTAgMTA6NDY6NDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RzZWdtZW50LmM6IEFkZGVkIHNvbWUgbW9yZSBkb2NzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RzZWdtZW50LmM6CisJICBBZGRlZCBzb21lIG1vcmUgZG9jcy4KKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19wZXJmb3JtX3FvcyksCisJICAoZ3N0X2Jhc2Vfc2lua19yZXNldF9xb3MpOgorCSAgQ2FsY3VsYXRlIG1vcmUgYWNjdXJhdGUgcmF0ZSB2YWx1ZXMuCisKKzIwMDYtMDQtMDkgMTY6NTc6MzQgKzAwMDAgIFPDqWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KKworCSAgZ3N0L2dzdF9wcml2YXRlLmg6IGFkZCBhIG5ldyAjaWZkZWYgdG8gdXNlIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSBvbmx5IGZvciBvdGhlciBtb2R1bGVzIGFuZCBub3QgZm9yIGdzdHJlYW1lciBjb3JlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdF9wcml2YXRlLmg6CisJICBhZGQgYSBuZXcgI2lmZGVmIHRvIHVzZSBfX2RlY2xzcGVjKGRsbGltcG9ydCkgb25seSBmb3IKKwkgIG90aGVyIG1vZHVsZXMgYW5kIG5vdCBmb3IgZ3N0cmVhbWVyIGNvcmUKKwkgICogZ3N0L2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX3BlcmZvcm1fcW9zKToKKwkgIHVzZSBnc3RfZ3VpbnQ2NF90b19nZG91YmxlIGZvciBjb252ZXJzaW9uCisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgYWRkIG5ldyBleHBvcnRlZCBmdW5jdGlvbnMKKwkgICogd2luMzIvdnM2L2dzdF9pbnNwZWN0LmRzcDoKKwkgICogd2luMzIvdnM2L2dzdF9sYXVuY2guZHNwOgorCSAgKiB3aW4zMi92czYvbGliZ3N0YmFzZS5kc3A6CisJICAqIHdpbjMyL3ZzNi9saWJnc3Rjb250cm9sbGVyLmRzcDoKKwkgICogd2luMzIvdnM2L2xpYmdzdGNvcmVlbGVtZW50cy5kc3A6CisJICAqIHdpbjMyL3ZzNi9saWJnc3RkYXRhcHJvdG9jb2wuZHNwOgorCSAgKiB3aW4zMi92czYvbGliZ3N0bmV0LmRzcDoKKwkgIHVwZGF0ZSBwcm9qZWN0IGZpbGVzCisKKzIwMDYtMDQtMDggMjA6NTc6MzEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgRml4ICMzMzczNjUgKGdfdHlwZV9jbGFzc19yZWYgPC0+IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YnVmZmVyLmM6IChnc3Rfc3ViYnVmZmVyX2NsYXNzX2luaXQpOgorCSAgKiBnc3QvZ3N0Y2xvY2suYzogKGdzdF9jbG9ja19jbGFzc19pbml0KToKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2NsYXNzX2luaXQpOgorCSAgKiBnc3QvZ3N0aW5kZXguYzogKGdzdF9pbmRleF9jbGFzc19pbml0KToKKwkgICogZ3N0L2dzdGluZGV4ZmFjdG9yeS5jOiAoZ3N0X2luZGV4X2ZhY3RvcnlfY2xhc3NfaW5pdCk6CisJICAqIGdzdC9nc3RvYmplY3QuYzogKGdzdF9vYmplY3RfY2xhc3NfaW5pdCksCisJICAoZ3N0X3NpZ25hbF9vYmplY3RfY2xhc3NfaW5pdCk6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfY2xhc3NfaW5pdCk6CisJICAqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOiAoZ3N0X3BhZF90ZW1wbGF0ZV9jbGFzc19pbml0KToKKwkgICogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzogKGdzdF9wbHVnaW5fZmVhdHVyZV9jbGFzc19pbml0KToKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6IChnc3RfcmVnaXN0cnlfY2xhc3NfaW5pdCk6CisJICAqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOiAoZ3N0X3N5c3RlbV9jbG9ja19jbGFzc19pbml0KToKKwkgICogZ3N0L2dzdHRhc2suYzogKGdzdF90YXNrX2NsYXNzX2luaXQpOgorCSAgKiBnc3QvZ3N0eG1sLmM6IChnc3RfeG1sX2NsYXNzX2luaXQpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NsYXNzX2luaXQpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19jbGFzc19pbml0KSwKKwkgIChnc3RfYmFzZV9zcmNfbG9vcCk6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgorCSAgKF9nc3RfY29udHJvbGxlcl9jbGFzc19pbml0KToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOiAoZ3N0X2ZkX3NyY19jbGFzc19pbml0KToKKwkgICogcGx1Z2lucy9pbmRleGVycy9nc3RmaWxlaW5kZXguYzogKGdzdF9maWxlX2luZGV4X2NsYXNzX2luaXQpOgorCSAgKiBwbHVnaW5zL2luZGV4ZXJzL2dzdG1lbWluZGV4LmM6IChnc3RfbWVtX2luZGV4X2NsYXNzX2luaXQpOgorCSAgKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcGx1Z2lucy9leGFtcGxlLmM6IChnc3RfZXhhbXBsZV9jbGFzc19pbml0KToKKwkgICogdGVzdHMvb2xkL3Rlc3RzdWl0ZS90aHJlYWRzL3NpZ25hbHMuYzogKGdzdF90ZXN0X2NsYXNzX2luaXQpOgorCSAgRml4ICMzMzczNjUgKGdfdHlwZV9jbGFzc19yZWYgPC0+IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCkKKworMjAwNi0wNC0wOCAxODoxMTo1NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdHBhZC5jOiBNdXN0IHNldCBwZWVyIHBhZHMgYmVmb3JlIGNhbGxpbmcgdGhlIGxpbmsgZnVuY3Rpb24sIG90aGVyd2lzZSBhIHRhc2sgc3RhcnRlZCBmcm9tIGEgbGluayBmdW5jdGlvbiBtaWdoLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9saW5rKToKKwkgIE11c3Qgc2V0IHBlZXIgcGFkcyBiZWZvcmUgY2FsbGluZyB0aGUgbGluayBmdW5jdGlvbiwgb3RoZXJ3aXNlCisJICBhIHRhc2sgc3RhcnRlZCBmcm9tIGEgbGluayBmdW5jdGlvbiBtaWdodCBnZXQgYSBmbG93LW5vdC1saW5rZWQKKwkgIHJlc3VsdCB3aGVuIHRyeWluZyB0byBwdXNoIGJlY2F1c2UgdGhlIG90aGVyIHRocmVhZCB3aGVyZSB0aGUKKwkgIGxpbmtpbmcgaGFwcGVucyBoYXNuJ3QgaGFkIGEgY2hhbmNlIHRvIHNldCB0aGUgcGVlcnMgeWV0LiBUaGlzCisJICBtaWdodCBoYXBwZW4gZm9yIGV4YW1wbGUgd2hlbiBhIHF1ZXVlIGdldHMgbGlua2VkIHRvIGEgZG93bnN0cmVhbQorCSAgZWxlbWVudCwgYXMgcXVldWUgc3RhcnRzIGEgc3RyZWFtaW5nIHRhc2sgd2hlbiBpdHMgc291cmNlIHBhZAorCSAgZ2V0cyBsaW5rZWQuIEhhcHBlbnMgaW4gcmVhbCBsaWZlIHdoZW4gcGxheWluZyBiYWNrIGZsYWMvbXVzZXBhY2sKKwkgIGZpbGVzIGluIHBsYXliaW4gKCMzMzIzOTApLgorCisyMDA2LTA0LTA4IDE4OjA1OjE2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIEZpeCBicm9rZW4gR09iamVjdCBtYWNyb3MKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0aW5kZXguaDoKKwkgICogZ3N0L2dzdHhtbC5oOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuaDoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RwdXNoc3JjLmg6CisJICBGaXggYnJva2VuIEdPYmplY3QgbWFjcm9zCisKKzIwMDYtMDQtMDcgMTU6MTk6MDggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogSW5pdGlhbGl6ZSBzdGFydCBhbmQgc3RvcCB0aW1lcywgdGhhbmtzIHZhbGdyaW5kLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZ2V0X3N5bmNfdGltZXMpOgorCSAgSW5pdGlhbGl6ZSBzdGFydCBhbmQgc3RvcCB0aW1lcywgdGhhbmtzIHZhbGdyaW5kLgorCisyMDA2LTA0LTA3IDE0OjUwOjA2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IEJlIGEgYml0IG5pY2VyIHRvIGJhZGx5IGJlaGF2aW5nIHVwc3RyZWFtIGVsZW1lbnRzIHRoYXQgZXhwZWN0IHVzIHRvIGRlYWwgd2l0aCBub24gVElNRSAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2dldF9zeW5jX3RpbWVzKToKKwkgIEJlIGEgYml0IG5pY2VyIHRvIGJhZGx5IGJlaGF2aW5nIHVwc3RyZWFtIGVsZW1lbnRzIHRoYXQgZXhwZWN0CisJICB1cyB0byBkZWFsIHdpdGggbm9uIFRJTUUgc2VnbWVudHMgYW5kIHRpbWVzdGFtcHMgKHN1Y2ggYXMgZmFrZXNyYworCSAgaW4gdGhlIHRlc3RzdWl0ZSkuCisKKzIwMDYtMDQtMDcgMTQ6MDI6MTIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RidXMuYzogU21hbGwgZG9jdW1lbnRhdGlvbiBjbGFyaWZpY2F0aW9uIGFib3V0IHRoZSBzaWduYWwgd2F0Y2guCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJ1cy5jOgorCSAgU21hbGwgZG9jdW1lbnRhdGlvbiBjbGFyaWZpY2F0aW9uIGFib3V0IHRoZSBzaWduYWwgd2F0Y2guCisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZ2V0X3N5bmNfdGltZXMpLAorCSAgKGdzdF9iYXNlX3Npbmtfd2FpdF9jbG9jayksIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpLAorCSAgKGdzdF9iYXNlX3NpbmtfcGVyZm9ybV9xb3MpLCAoZ3N0X2Jhc2Vfc2lua19yZXNldF9xb3MpLAorCSAgKGdzdF9iYXNlX3NpbmtfZG9fcmVuZGVyX3N0YXRzKSwgKGdzdF9iYXNlX3NpbmtfcmVuZGVyX29iamVjdCksCisJICAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb25fbGFzdCksCisJICAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb25fcGF1c2VkKSwgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKKwkgIENvbnZlcnQgYW5kIHN0b3JlIHRpbWVzdGFtcHMgaW4gc3RyZWFtIHRpbWUgYW5kIHJ1bm5pbmcgdGltZSwgdGhlCisJICByYXcgdGltZXN0YW1wcyBhcmUgbm90IHVzZWZ1bGwsIGFsc28gZG9jdW1lbnQgdGhpcyBiZXR0ZXIuCisJICBVc2UgZGlmZmVyZW50IHdpbmRvdyBzaXplcyBmb3IgZ29vZCBhbmQgYmFkIFFvUyBvYnNlcnZhdGlvbnMgc28KKwkgIHdlIHJlYWN0IHRvIGJhZG5lc3MgYSBsaXR0bGUgcXVpY2tlci4KKwkgIEtlZXAgdHJhY2sgb2YgdGhlIGFtb3VudCBvZiByZW5kZXJlZCBhbmQgZHJvcHBlZCBidWZmZXJzLgorCSAgU2VuZCBRb1MgdGltZXN0YW1wcyBpbiBydW5uaW5nIHRpbWUuCisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zaW5rX2V2ZW50ZnVuYyksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2hhbmRsZV9idWZmZXIpOgorCSAgQ29tcGFyZSBRb1MgdGltZXN0YW1wcyBhZ2FpbnN0IHJ1bm5pbmcgdGltZS4KKworMjAwNi0wNC0wNiAxNzozNjoyNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDoKKwkgIGFkZCBnbm9ubGluCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFkZCBnbm9ubGluCisKKzIwMDYtMDQtMDYgMTU6NDY6MDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RwYWQuYzogVHlwbyBmaXhlcyBpbiBkb2NzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzoKKwkgIFR5cG8gZml4ZXMgaW4gZG9jcy4KKworMjAwNi0wNC0wNiAxNTowNzoxMiArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgorCisJICBnc3QvZ3N0cGFkLmM6IFVzZSBnX3ZhbHVlX2dldF9vYmplY3QoKSBpbnN0ZWFkIG9mIGdfdmFsdWVfZHVwX2dzdF9vYmplY3QoKSwgdG8gYXZvaWQgZG91YmxlLXJlZmZpbmcgdGhlIHBhZCB0ZW1wbGF0ZSAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3NldF9wcm9wZXJ0eSk6CisJICBVc2UgZ192YWx1ZV9nZXRfb2JqZWN0KCkgaW5zdGVhZCBvZiBnX3ZhbHVlX2R1cF9nc3Rfb2JqZWN0KCksCisJICB0byBhdm9pZCBkb3VibGUtcmVmZmluZyB0aGUgcGFkIHRlbXBsYXRlICh3aGljaCB3ZSB0aGVuIHNpbmssCisJICBzbyB0aGlzIHdvcmtlZCBwcmV2aW91c2x5IGlmIChhbmQgb25seSBpZikgdGhlIHBhZCB0ZW1wbGF0ZQorCSAgd2FzIGZsb2F0aW5nLgorCSAgKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzogKGdzdF9wYWRfdGVtcGxhdGVfaW5pdCksCisJICAoZ3N0X3BhZF90ZW1wbGF0ZV9wYWRfY3JlYXRlZCk6CisJICBOZXZlciByZXR1cm4gZmxvYXRpbmcgcmVmZXJlbmNlcyB0byBwYWQgdGVtcGxhdGVzLCBjcmVhdGUKKwkgIHRoZW0gYXMgaW5pdGlhbGx5LXN1bmtlbi4KKwkgIERvY3VtZW50IGFuIGV4dHJhIGZ1bmN0aW9uIChhbmQgbWFrZSB0aGlzIHN0b3Agc2lua2luZyBvdXIKKwkgIHBhZCB0ZW1wbGF0ZSwgc2luY2UgdGhhdCBpcyBub3cgZ3VhcmFudGVlZCB0byBkbyBub3RoaW5nLAorCSAgc2luY2Ugd2UgY3JlYXRlZCBpdCBzdW5rZW4pLgorCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKKwkgIEZpeCBkb2NzIHR5cG8uCisKKzIwMDYtMDQtMDYgMTE6Mjc6MjQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RpbmZvLmM6IEFkZCBzb21lIG5ld2xpbmVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RpbmZvLmM6IChfX2dzdF9pbl92YWxncmluZCk6CisJICBBZGQgc29tZSBuZXdsaW5lcy4KKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfY2hhaW4pOgorCSAgRG9uJ3QgbGVhayBidWZmZXIgY2Fwcy4KKworMjAwNi0wNC0wNiAxMDozODo1NCArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgorCisJICBnc3QvcGFyc2UvZ3JhbW1hci55OiBGaXggYSBsZWFrIGluIHBhcnNlLWxhdW5jaCBmb3IgYW55IHNvdXJjZS1vci1zaW5rIG5hbWVkIGVsZW1lbnQgcmVmZXJlbmNlcyB1c2VkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9wYXJzZS9ncmFtbWFyLnk6CisJICBGaXggYSBsZWFrIGluIHBhcnNlLWxhdW5jaCBmb3IgYW55IHNvdXJjZS1vci1zaW5rIG5hbWVkIGVsZW1lbnQKKwkgIHJlZmVyZW5jZXMgdXNlZC4KKwkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOiAoZXhwZWN0ZWRfZmFpbF9waXBlKToKKwkgIFVucmVmIHRoZSBwaXBlbGluZSBpZiBpdCBleGlzdHMgYWZ0ZXIgd2UndmUgZmFpbGVkIHBhcnNpbmcuCisKKzIwMDYtMDQtMDUgMTU6NDY6MDAgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KKworCSAgZ3N0L2dzdHBpcGVsaW5lLmM6IFdoZW4gd2UgY3JlYXRlIGEgcGlwZWxpbmUgYnVzLCBpbml0aWFsbHkgY3JlYXRlIGl0IGluIGZsdXNoaW5nIG1vZGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBpcGVsaW5lLmM6IChnc3RfcGlwZWxpbmVfaW5pdCk6CisJICBXaGVuIHdlIGNyZWF0ZSBhIHBpcGVsaW5lIGJ1cywgaW5pdGlhbGx5IGNyZWF0ZSBpdCBpbiBmbHVzaGluZyBtb2RlLgorCSAgRml4ZXMgbGVha3MgaW4gYXQgbGVhc3Qgb25lIHRlc3QsIGFuZCBtYWtlcyBhIG5ldyBwaXBlbGluZSB3b3JrIHRoZQorCSAgc2FtZSBhcyBvbmUgdGhhdCBoYXMgZ29uZSB0byBSRUFEWSBhbmQgdGhlbiBiYWNrIHRvIE5VTEwuCisJICAqIGdzdC9nc3RlbGVtZW50LmM6CisJICBUeXBvIGZpeCBpbiBkb2NzLgorCisyMDA2LTA0LTA1IDE1OjEyOjM5ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+CisKKwkgIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOiBVbnJlZiBhIHBhZCB3ZSByZWZmZWQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBVbnJlZiBhIHBhZCB3ZSByZWZmZWQuCisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgVW5yZWYgYmlucworCisyMDA2LTA0LTA1IDEzOjE4OjI5ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+CisKKwkgIGdzdC9nc3RxdWVyeS5jOiBGaXggbGVha2luZyBHVmFsdWVzIGluIHF1ZXJpZXMsIGFzIHNob3duIGJ5IHZhbGdyaW5kL3Rlc3RzdWl0ZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cXVlcnkuYzogKGdzdF9xdWVyeV9zZXRfZm9ybWF0cyksCisJICAoZ3N0X3F1ZXJ5X3NldF9mb3JtYXRzdik6CisJICBGaXggbGVha2luZyBHVmFsdWVzIGluIHF1ZXJpZXMsIGFzIHNob3duIGJ5IHZhbGdyaW5kL3Rlc3RzdWl0ZS4KKworMjAwNi0wNC0wNSAxMjoxMToyMCArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgorCisJICB0ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmM6IEZpeCBhIHZhcmlldHkgb2YgbWVtbGVha3MgaW4gc2lua3MgY2hlY2ssIHdoaWNoIGFyZSBvbmx5IHNvbWV0aW1lcyBzaG93biBieSBydW5uaW5nIHRoZSAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBGaXggYSB2YXJpZXR5IG9mIG1lbWxlYWtzIGluIHNpbmtzIGNoZWNrLCB3aGljaCBhcmUgb25seSBzb21ldGltZXMKKwkgIHNob3duIGJ5IHJ1bm5pbmcgdGhlIHRlc3RzIHVuZGVyIHZhbGdyaW5kICh3ZWlyZD8pLgorCisyMDA2LTA0LTA1IDExOjA0OjE5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZG9jcy92ZXJzaW9uLmVudGl0aWVzLmluOiBGaXggdGhlIHN1YnN0aXR1dGVkIGVudGl0eSBuYW1lIGFmdGVyIHRob21hcycgY2hhbmdlcyBvbiB0aGUgd2Vla2VuZC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL3ZlcnNpb24uZW50aXRpZXMuaW46CisJICBGaXggdGhlIHN1YnN0aXR1dGVkIGVudGl0eSBuYW1lIGFmdGVyIHRob21hcycgY2hhbmdlcyBvbiB0aGUKKwkgIHdlZWtlbmQuCisKKzIwMDYtMDQtMDUgMTA6MzE6MjAgKzAwMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+CisKKwkgIGdzdC9nc3RpbmZvLmM6IFVzZSBwcmludGYgaW5zdGVhZCBvZgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA2LTA0LTA1ICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+CisJICAqIGdzdC9nc3RpbmZvLmM6IChfX2dzdF9pbl92YWxncmluZCk6IFVzZSBwcmludGYgaW5zdGVhZCBvZgorCSAgVkFMR1JJTkRfUFJJTlRGCisKKzIwMDYtMDQtMDUgMTA6MjY6MjkgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdHBhZC5jIChnc3RfcGFkX3NldF9ibG9ja2VkX2FzeW5jKTogTW9yZSBkZWJ1Zy4gbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNi0wNC0wNSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdHBhZC5jIChnc3RfcGFkX3NldF9ibG9ja2VkX2FzeW5jKTogTW9yZSBkZWJ1Zy4KKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmMKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc2lua19ldmVudGZ1bmMpOiBXaGVuIHJlc2V0dGluZyBvdXIgc2VnbWVudCBvbgorCSAgRkxVU0hfU1RPUCwgYWxzbyB1cGRhdGUgdGhlIGZsYWcgc2F5aW5nIHdlIGhhdmVuJ3Qgc2VlbiBhCisJICBuZXdzZWdtZW50LgorCisyMDA2LTA0LTA0IDE4OjAyOjA3ICswMDAwICBQYW9sbyBCb3JlbGxpIDxwYm9yZWxsaUBrYXRhbWFpbC5jb20+CisKKwkgIGdzdC9nc3RwbHVnaW4uYzogbWlub3IgY2xlYW4tdXBzOiBHX0RFRklORV9UWVBFIGFscmVhZHkgdGFrZXMgY2FyZSBvZiB0aGUgcGFyZW50X2NsYXNzIHN0dWZmLCBubyBuZWVkIHRvIGRvIGl0IHR3aWNlLi4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogUGFvbG8gQm9yZWxsaSAgPHBib3JlbGxpIGF0IGthdGFtYWlsIGRvdCBjb20+CisJICAqIGdzdC9nc3RwbHVnaW4uYzogKGdzdF9wbHVnaW5fZmluYWxpemUpLCAoZ3N0X3BsdWdpbl9jbGFzc19pbml0KSwKKwkgIChnc3RfcGx1Z2luX2NoZWNrX2xpY2Vuc2UpOgorCSAgbWlub3IgY2xlYW4tdXBzOiBHX0RFRklORV9UWVBFIGFscmVhZHkgdGFrZXMgY2FyZSBvZiB0aGUKKwkgIHBhcmVudF9jbGFzcyBzdHVmZiwgbm8gbmVlZCB0byBkbyBpdCB0d2ljZS4gTWFyayBhcnJheSBvZgorCSAgbGljZW5zZSBzdHJpbmdzIGFzIGNvbnN0YW50LiAoIzMzNzEwMykKKworMjAwNi0wNC0wNCAxNzo1NDozMCArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgorCisJICB0b29scy9nc3QtaW5zcGVjdC5jOiBGcmVlIHRoZSByaWdodCBwbHVnaW4gbGlzdDsgZml4ZXMgYSBtZW1vcnkgbGVhay4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAocHJpbnRfZWxlbWVudF9saXN0KToKKwkgIEZyZWUgdGhlIHJpZ2h0IHBsdWdpbiBsaXN0OyBmaXhlcyBhIG1lbW9yeSBsZWFrLgorCisyMDA2LTA0LTA0IDE1OjQ1OjM2ICswMDAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYW5hdXdAc2t5bmV0LmJlPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IERvbid0IGVycm9yIG91dCBvbiBlbXB0eSBidWZmZXJzICgjMzM2OTQ1KS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IE1hcmsgTmF1d2VsYWVydHMgIDxtYW5hdXcgYXQgc2t5bmV0IGRvdCBiZT4KKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOiAoZ3N0X2ZpbGVfc2lua19yZW5kZXIpOgorCSAgRG9uJ3QgZXJyb3Igb3V0IG9uIGVtcHR5IGJ1ZmZlcnMgKCMzMzY5NDUpLgorCisyMDA2LTA0LTA0IDE0OjU4OjUwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgRG9jdW1lbnRhdGlvbiB1cGRhdGVzLiBNYWtlIEJhc2VTaW5rIGFuZCBCYXNlU3JjIGRvY3MgY29udGFpbiB0aGUgY2xhc3Mgc3RydWN0dXJlIHNvIHRoYXQgcGVvcGxlIGNhbiBhY3R1YWxseSBzZWUgdGhlLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdHRhZ2xpc3QuYzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkgIERvY3VtZW50YXRpb24gdXBkYXRlcy4gTWFrZSBCYXNlU2luayBhbmQgQmFzZVNyYyBkb2NzIGNvbnRhaW4gdGhlCisJICBjbGFzcyBzdHJ1Y3R1cmUgc28gdGhhdCBwZW9wbGUgY2FuIGFjdHVhbGx5IHNlZSB0aGUgcHJvdG90eXBlcyBmb3IKKwkgIHZpcnR1YWwgZnVuY3Rpb25zIHRoZXkncmUgc3VwcG9zZWQgdG8gYmUgb3ZlcnJpZGluZy4KKworMjAwNi0wNC0wNCAwODo1NTo0NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogTW9yZSBkZWJ1ZyBpbmZvOyB3aGVuIHNraXBwaW5nIHR5cGVmaW5kaW5nLCBzZW5kIGNhY2hlZCBldmVudHMgaW4gYWxsIGNhc2VzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6CisJICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NoYWluKToKKwkgIE1vcmUgZGVidWcgaW5mbzsgd2hlbiBza2lwcGluZyB0eXBlZmluZGluZywgc2VuZCBjYWNoZWQKKwkgIGV2ZW50cyBpbiBhbGwgY2FzZXMuCisKKzIwMDYtMDQtMDMgMTc6MDU6MzEgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KKworCSogZ3N0L2dzdHBhZC5jOgorCSAgRml4IHR5cG8gaW4gZG9jcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgRml4IHR5cG8gaW4gZG9jcy4KKworMjAwNi0wNC0wMyAwODo1OTo1MiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGNvbW1vbjoKKwkqIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkgIHVwZGF0ZSB3aW4zMiBjb21tb24gZGlyOyB1cGRhdGUgdW5pbnN0YWxsZWQgc2NyaXB0CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHVwZGF0ZSB3aW4zMiBjb21tb24gZGlyOyB1cGRhdGUgdW5pbnN0YWxsZWQgc2NyaXB0CisKKzIwMDYtMDQtMDEgMTU6MzA6NDkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBjb21tb246CisJKiBjb25maWd1cmUuYWM6CisJICBkaXNhYmxlIHVzZSBvZiBBU19MSUJUT09MX1RBR1MsIGl0IGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZGlzYWJsZSB1c2Ugb2YgQVNfTElCVE9PTF9UQUdTLCBpdCBkb2Vzbid0IHdvcmsgY29ycmVjdGx5CisKKzIwMDYtMDQtMDEgMDk6NDE6NDMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBjb25maWd1cmUuYWM6IHVzZSBuZXcgQVNfVkVSU0lPTiBhbmQgQVNfTkFOTyBtYWNyb3MKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICB1c2UgbmV3IEFTX1ZFUlNJT04gYW5kIEFTX05BTk8gbWFjcm9zCisJICAqIGdzdC9nc3QtaTE4bi1saWIuaDoKKwkgICogZ3N0L2dzdC5jOgorCSAgKiBnc3QvZ3N0ZXJyb3IuYzoKKwkgICogZ3N0L2dzdHZlcnNpb24uaC5pbjoKKwkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oOgorCSAgKiB3aW4zMi9jb21tb24vY29uZmlnLmguaW46CisJICB1cGRhdGUgYWNjb3JkaW5nbHkKKworMjAwNi0wMy0zMSAxNToyNjowNCArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOiBEbyBub3QgdHlwZWZpbmQgY29udGVudCBpZiB0aGUgYnVmZmVycyBhbHJlYWR5IGhhdmUgY2Fwcy4gYW5kIHRoZSByaWdodCB0aGluZyAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9jaGFpbik6CisJICBEbyBub3QgdHlwZWZpbmQgY29udGVudCBpZiB0aGUgYnVmZmVycyBhbHJlYWR5IGhhdmUgY2Fwcy4KKwkgIE5lY2Nlc2FyeSBmb3IgaWN5ZGVtdXggKCMzMzM2NTcpLCBhbmQgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvIGFueXdheS4KKworMjAwNi0wMy0zMCAxNjozNjoxMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBNb3JlIFFvUyBtZWFzdXJlbWVudHMgYXMgZGVzY3JpYmVkIGluIHRoZSBkZXNpZ24gZG9jLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfaW5pdCksCisJICAoZ3N0X2Jhc2Vfc2lua19maW5hbGl6ZSksIChnc3RfYmFzZV9zaW5rX3NldF9xb3NfZW5hYmxlZCksCisJICAoZ3N0X2Jhc2Vfc2lua19pc19xb3NfZW5hYmxlZCksIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpLAorCSAgKGdzdF9iYXNlX3NpbmtfcmVjb3JkX3Fvc19vYnNlcnZhdGlvbiksCisJICAoZ3N0X2Jhc2Vfc2lua19wZXJmb3JtX3FvcyksIChnc3RfYmFzZV9zaW5rX3Jlc2V0X3FvcyksCisJICAoZ3N0X2Jhc2Vfc2lua19pc190b29fbGF0ZSksIChnc3RfYmFzZV9zaW5rX3JlbmRlcl9vYmplY3QpLAorCSAgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKKwkgIE1vcmUgUW9TIG1lYXN1cmVtZW50cyBhcyBkZXNjcmliZWQgaW4gdGhlIGRlc2lnbiBkb2MuCisJICBHZXQgcmlkIG9mIHJpbmdidWZmZXIgd2l0aCBvYnNlcnZhdGlvbnMsIHJ1bm5pbmcgYXZlcmFnZSBpcworCSAgbW9yZSBzaW1wbGUgYW5kIGVxdWFsbHkgZ29vZC4KKwkgIENhbGN1bGF0ZXMgdmFsaWQgcHJvcG9ydGlvbiBub3cuCisJICBBZGRlZCBiZWdpbm5pbmcgb2YgZmxvb2QgbWVhc3VyZW1lbnQuCisKKzIwMDYtMDMtMjkgMTM6NDU6MTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIFNtYWxsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgYWRkaXRpb25zLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtcW9zLnR4dDoKKwkgICogZ3N0L2dzdGNsb2NrLmM6CisJICBTbWFsbCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGFkZGl0aW9ucy4KKworMjAwNi0wMy0yOSAxMzozOTowNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IFBlcmZvcm0gdGhlIEVPUyBsb2dpYyB3aGVuIHdlIHJlYWNoIHRoZSBzZWdtZW50IHN0b3AgcG9zaXRpb24uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfZmluYWxpemUpLAorCSAgKGdzdF9iYXNlX3NyY19zZW5kX2V2ZW50KSwgKGdzdF9iYXNlX3NyY19sb29wKSwKKwkgIChnc3RfYmFzZV9zcmNfY2hhbmdlX3N0YXRlKToKKwkgIFBlcmZvcm0gdGhlIEVPUyBsb2dpYyB3aGVuIHdlIHJlYWNoIHRoZSBzZWdtZW50IHN0b3AgcG9zaXRpb24uCisJICBGaXggY29tcGlsYXRpb24gb24gZ2NjNC4xCisKKzIwMDYtMDMtMjkgMTE6MDI6MzMgKzAwMDAgIFRvbW1pIE15w7Zow6RuZW4gPGV4dC10b21taS5teW9oYW5lbkBub2tpYS5jb20+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuKjogSW4gcXVldWUsIHdoZW4gRU9TIGlzIHJlY2VpdmVkLCBpZiBtaW5pbXVtIHRocmVzaG9sZCA+IG1heF9zaXplIC0gY3VycmVudF9sZXZlbCwgdGhlcmUgaS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieSBUb21taSBNecO2aMOkbmVuIDxleHQtdG9tbWkgZG90IG15b2hhbmVuIGF0IG5va2lhIGRvdCBjb20+CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9pbml0KSwKKwkgIChnc3RfcXVldWVfbG9ja2VkX2ZsdXNoKSwgKGdzdF9xdWV1ZV9oYW5kbGVfc2lua19ldmVudCksCisJICAoZ3N0X3F1ZXVlX3NldF9wcm9wZXJ0eSk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuaDoKKwkgIEluIHF1ZXVlLCB3aGVuIEVPUyBpcyByZWNlaXZlZCwgaWYgbWluaW11bSB0aHJlc2hvbGQgPiBtYXhfc2l6ZSAtCisJICBjdXJyZW50X2xldmVsLCB0aGVyZSBpcyBjaGFuY2UgdGhhdCBxdWV1ZSBibG9ja3MgZm9yZXZlciBpbiBjb25kaXRpb25hbCBpdGVtCisJICBkZWwgd2FpdC4gVGhpcyBpcyBiZWNhdXNlIHRoZSBxdWV1ZSBpcyBub3QgZW1wdGllZCBjb21wbGV0ZWx5IGR1ZSB0byBtaW5pbXVtCisJICB0aHJlc2hvbGQuCisJICBIZXJlIGlzIGFub3RoZXIgYXBwcm9hY2guIEluc3RlYWQgb2Ygc2V0dGluZyBjdXJfbGV2ZWxzIHRvIG1heCBpbiBFT1MsIGp1c3QKKwkgIHplcm8gYWxsIG1pbmltdW0gdGhyZXNob2xkIGxldmVscy4gVGhpcyBzaG91bGQgbWFrZSBzdXJlIHRoYXQgcXVldWUgZ2l2ZXMgb3V0CisJICBhbGwgZGF0YS4gV2hlbiBnb2luZyB0byBSRUFEWSAoc3RvcCkgc3RhdGUsIGp1c3QgcmVzZXQgdGhlIG9yaWdpbmFsIG1pbmltdW0KKwkgIHRocmVzaG9sZCBsZXZlbHMuCisJICBGaXhlcyAjMzM2MzM2LgorCisyMDA2LTAzLTI5IDEwOjMzOjE5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC4qOiBXaGVuIHR5cGVmaW5kaW5nIGlzIGRvbmUgaW4gcHVzaCBtb2RlLCB3ZSBzaG91bGQgY2FjaGUgZXZlbnRzIHdlIHJlY2VpdmUgZHVyaW4uLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOiAoc3RvcF90eXBlZmluZGluZyksCisJICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2hhbmRsZV9ldmVudCksCisJICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X3NlbmRfY2FjaGVkX2V2ZW50cyksCisJICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NoYW5nZV9zdGF0ZSk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50Lmg6CisJICBXaGVuIHR5cGVmaW5kaW5nIGlzIGRvbmUgaW4gcHVzaCBtb2RlLCB3ZSBzaG91bGQgY2FjaGUKKwkgIGV2ZW50cyB3ZSByZWNlaXZlIGR1cmluZyB0eXBlZmluZGluZyBpbnN0ZWFkIG9mIGp1c3QKKwkgIGRyb3BwaW5nIHRoZW0gKGUuZy4gbmV3c2VnbWVudCwgY3VzdG9tIGV2ZW50cyBmcm9tCisJICBkdmRyZWFkc3JjIGV0Yy4pIGFuZCB0aGVuIHNlbmQgdGhlbSBvdXQgb25jZSB3ZSd2ZQorCSAgZGV0ZXJtaW5lZCB0aGUgdHlwZSBvZiB0aGUgc3RyZWFtIChhbmQgZGVjb2RlYmluCisJICBoYXMgaGFkIGEgY2hhbmNlIHRvIHBsdWcgaW4gYSBkZWNvZGVyL2RlbXV4ZXIpLgorCisyMDA2LTAzLTI3IDE4OjM4OjQ5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL2Rlc2lnbi9wYXJ0LXFvcy50eHQ6IEZpcnN0IFFvUyBpZGVhcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXFvcy50eHQ6CisJICBGaXJzdCBRb1MgaWRlYXMuCisKKzIwMDYtMDMtMjcgMTE6NDg6MTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBIYW5kbGUgZWxlbWVudCBzZWVrIGNvcnJlY3RseSB3aGVuIHdlIGFyZSBzdHJlYW1pbmcuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIEluc3BpcmVkIGJ5IGEgcGF0Y2ggb2Y6IEx1dHogTXVlbGxlciA8bHV0eiBhdCB0b3Bmcm9zZSBkb3QgZGU+CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2ZpbmFsaXplKSwKKwkgIChnc3RfYmFzZV9zcmNfc2VuZF9ldmVudCksIChnc3RfYmFzZV9zcmNfY2hhbmdlX3N0YXRlKToKKwkgIEhhbmRsZSBlbGVtZW50IHNlZWsgY29ycmVjdGx5IHdoZW4gd2UgYXJlIHN0cmVhbWluZy4KKwkgIEZpeGVzICMzMjY5OTguCisKKzIwMDYtMDMtMjQgMTg6Mzg6MTIgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KKworCSAgZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOiBTZXQgdXAgTERfTElCUkFSWV9QQVRIIHRvIHBvaW50IGF0IGFsbCB0aGUgZ3N0cmVhbWVyIGxpYnMuIFRoaXMgd2lsbCBhbGxvdyB5b3UgdG8gY29ycmVjdGx5Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOgorCSAgU2V0IHVwIExEX0xJQlJBUllfUEFUSCB0byBwb2ludCBhdCBhbGwgdGhlIGdzdHJlYW1lciBsaWJzLiBUaGlzIHdpbGwKKwkgIGFsbG93IHlvdSB0byBjb3JyZWN0bHkgcnVuIGludGFsbGVkIGFwcGxpY2F0aW9ucyBidWlsdCBhZ2FpbnN0IG9sZCAgICAgICAgICAgY29yZSwgdXNpbmcgcGx1Z2lucyB0aGF0IHJlcXVpcmUgdXBkYXRlZCBjb3JlIChlLmcuIHJ1bm5pbmcKKwkgIGluc3RhbGxlZCB0b3RlbSBhZ2FpbnN0IGEgZnVsbCB1bmluc3RhbGxlZCBnc3RyZWFtZXIgc3RhY2spCisKKzIwMDYtMDMtMjQgMTc6Mjk6MjUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJICBhZGQgQVBJOiBtYXJrZXIgaW4gQ2hhbmdlTG9nCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFkZCBBUEk6IG1hcmtlciBpbiBDaGFuZ2VMb2cKKworMjAwNi0wMy0yNCAxNzoxMDo0NiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IG1vcmUgZGVidWcgZGV0YWlscworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0X3BhZHNfaXNfY29sbGVjdGVkKToKKwkgIG1vcmUgZGVidWcgZGV0YWlscworCisyMDA2LTAzLTI0IDExOjAyOjQyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBSZWFycmFuZ2UgdGhlIG9yZGVyIG9mIHRoZSBtZXRob2RzIHNvIHRoYXQgcmVsYXRlZCBtZXRob2RzIGFyZSBncm91cGVkIHRvZ2V0aGVyIGluIHMuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgUmVhcnJhbmdlIHRoZSBvcmRlciBvZiB0aGUgbWV0aG9kcyBzbyB0aGF0IHJlbGF0ZWQgbWV0aG9kcworCSAgYXJlIGdyb3VwZWQgdG9nZXRoZXIgaW4gc2VjdGlvbnMuCisKKzIwMDYtMDMtMjQgMTA6NDQ6MTcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdGVsZW1lbnQuYzogTGl0dGxlIGNsYXJpZmljYXRpb24gaW4gdGhlIGRvY3MKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSAgTGl0dGxlIGNsYXJpZmljYXRpb24gaW4gdGhlIGRvY3MKKworMjAwNi0wMy0yNCAxMDozODoyMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBkb2NzL1JFQURNRTogZm9ybWF0dGluZyBmaXgKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL1JFQURNRToKKwkgIGZvcm1hdHRpbmcgZml4CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSAgR1NUX0VMRU1FTlRfREVUQUlMUyBmb3JtYXR0aW5nCisKKzIwMDYtMDMtMjQgMDk6NDg6MzMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDogT25seSBhZGQgZmllbGRzLCBub3QgaW5zZXJ0IG9yIHdlIGJyZWFrIEFCSS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJICBPbmx5IGFkZCBmaWVsZHMsIG5vdCBpbnNlcnQgb3Igd2UgYnJlYWsgQUJJLgorCisyMDA2LTAzLTIzIDE4OjUxOjA1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICB3aW4zMi9jb21tb24vOiBVcGRhdGUsIGFkZCByZWNlbnRseSBhZGRlZCBmdW5jdGlvbnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIFVwZGF0ZSwgYWRkIHJlY2VudGx5IGFkZGVkIGZ1bmN0aW9ucy4KKworMjAwNi0wMy0yMyAxODo0NTowMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgQVBJOiBhZGQgc29tZSBuZXcgdXRpbGl0eSBmdW5jdGlvbnM6CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfcGFkX3F1ZXJ5X3BlZXJfcG9zaXRpb24pLAorCSAgKGdzdF9wYWRfcXVlcnlfcGVlcl9kdXJhdGlvbiksIChnc3RfcGFkX3F1ZXJ5X3BlZXJfY29udmVydCk6CisJICAqIGdzdC9nc3R1dGlscy5oOgorCSAgQVBJOiBhZGQgc29tZSBuZXcgdXRpbGl0eSBmdW5jdGlvbnM6CisJICAtIGdzdF9wYWRfcXVlcnlfcGVlcl9wb3NpdGlvbgorCSAgLSBnc3RfcGFkX3F1ZXJ5X3BlZXJfZHVyYXRpb24KKwkgIC0gZ3N0X3BhZF9xdWVyeV9wZWVyX2NvbnZlcnQKKworMjAwNi0wMy0yMyAxNjozMjo0MSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSogQ2hhbmdlTG9nOgorCSAgRm9yZ290IHRvIG1lbnRpb24gdGhlIHByZXZpb3VzIGNvbW1pdCBmaXhlZCAjMzI2MzExCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIEZvcmdvdCB0byBtZW50aW9uIHRoZSBwcmV2aW91cyBjb21taXQgZml4ZWQgIzMyNjMxMQorCisyMDA2LTAzLTIzIDE2OjIwOjQwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IERlY291cGxlIG1heC1sYXRlbmVzcyBhbmQgdGhlIGZhY3QgdGhhdCBRb1MgbWVzc2FnZXMgYXJlIGdlbmVyYXRlZCB3aXRoIGEgbmV3IHByb3BlcnR5ICguLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NsYXNzX2luaXQpLAorCSAgKGdzdF9iYXNlX3NpbmtfaW5pdCksIChnc3RfYmFzZV9zaW5rX2ZpbmFsaXplKSwKKwkgIChnc3RfYmFzZV9zaW5rX3NldF9xb3NfZW5hYmxlZCksIChnc3RfYmFzZV9zaW5rX2lzX3Fvc19lbmFibGVkKSwKKwkgIChnc3RfYmFzZV9zaW5rX3NldF9wcm9wZXJ0eSksIChnc3RfYmFzZV9zaW5rX2dldF9wcm9wZXJ0eSksCisJICAoZ3N0X2Jhc2Vfc2lua19jb21taXRfc3RhdGUpLCAoZ3N0X2Jhc2Vfc2lua19nZXRfc3luY190aW1lcyksCisJICAoZ3N0X2Jhc2Vfc2lua193YWl0X2Nsb2NrKSwgKGdzdF9iYXNlX3NpbmtfZG9fc3luYyksCisJICAoZ3N0X2Jhc2Vfc2lua19hZGRfcW9zX29ic2VydmF0aW9uKSwgKGdzdF9iYXNlX3Npbmtfc2VuZF9xb3MpLAorCSAgKGdzdF9iYXNlX3NpbmtfcGVyZm9ybV9xb3MpLCAoZ3N0X2Jhc2Vfc2lua19yZXNldF9xb3MpLAorCSAgKGdzdF9iYXNlX3NpbmtfaXNfdG9vX2xhdGUpLCAoZ3N0X2Jhc2Vfc2lua19yZW5kZXJfb2JqZWN0KSwKKwkgIChnc3RfYmFzZV9zaW5rX3ByZXJvbGxfb2JqZWN0KSwgKGdzdF9iYXNlX3NpbmtfZXZlbnQpLAorCSAgKGdzdF9iYXNlX3NpbmtfY2hhaW5fdW5sb2NrZWQpLCAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb25fbGFzdCksCisJICAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb25fcGF1c2VkKSwgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uKSwKKwkgIChnc3RfYmFzZV9zaW5rX3F1ZXJ5KSwgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKKwkgIERlY291cGxlIG1heC1sYXRlbmVzcyBhbmQgdGhlIGZhY3QgdGhhdCBRb1MgbWVzc2FnZXMgYXJlIGdlbmVyYXRlZAorCSAgd2l0aCBhIG5ldyBwcm9wZXJ0eSAocW9zKS4KKwkgIEFkZCB2bWV0aG9kIHNvIHN1YmNsYXNzZXMgY2FuIGJlIG5vdGlmaWVkIG9mIEFTWU5DIHBsYXlpbmcKKwkgIHN0YXRlIGNoYW5nZXMuCisJICBDb2xsZWN0IHRpbWVzdGFtcCBzdGFydCBhbmQgc3RvcCB0byByZXBvcnQgYmV0dGVyIGN1cnJlbnQKKwkgIHBvc2l0aW9uIGluIEVPUy9QTEFZSU5HL1BBVVNFRC9SRUFEWS9OVUxMLgorCSAgUmVmYWN0b3IgUW9TL2ZyYW1lIGRyb3BwaW5nIGFuZCBvdGhlciBtZWFzdXJlbWVudHMuCisJICBBUEk6IEdzdEJhc2VTcmM6OnFvcworCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJICBBZGRlZCBQcml2YXRlIHN0cnVjdC4KKwkgIEFQSTogZ3N0X2Jhc2Vfc2lua19zZXRfcW9zX2VuYWJsZWQKKwkgIEFQSTogZ3N0X2Jhc2Vfc2lua19pc19xb3NfZW5hYmxlZAorCisyMDA2LTAzLTIzIDExOjU0OjUxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogSWYgY29tcGlsaW5nIGFnYWluc3QgR0xpYi0yLjggb3IgbmV3ZXIsIHRyeSB0byByZWFkIHRoZSByZWdpc3RyeSBmaWxlIHVzaW5nIEdNYXBwZWRGaWxlIGZpcnN0IGIuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogKGdzdF9yZWdpc3RyeV94bWxfcmVhZF9jYWNoZSk6CisJICBJZiBjb21waWxpbmcgYWdhaW5zdCBHTGliLTIuOCBvciBuZXdlciwgdHJ5IHRvIHJlYWQgdGhlCisJICByZWdpc3RyeSBmaWxlIHVzaW5nIEdNYXBwZWRGaWxlIGZpcnN0IGJlZm9yZSBmYWxsaW5nIGJhY2sKKwkgIHRvIGZvcGVuKCkgKyBmcmVhZCgpICgjMzMyMTUxKS4KKworMjAwNi0wMy0yMiAxODoyNTowNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGluZm8uYzogRGlzYWJsZSBkZWJ1Z2dpbmcgdW5sZXNzIGV4cGxpY2l0bHkgYWN0aXZhdGVkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RpbmZvLmM6IChnc3RfZGVidWdfc2V0X2FjdGl2ZSksCisJICAoZ3N0X2RlYnVnX2NhdGVnb3J5X3NldF90aHJlc2hvbGQpOgorCSAgRGlzYWJsZSBkZWJ1Z2dpbmcgdW5sZXNzIGV4cGxpY2l0bHkgYWN0aXZhdGVkLgorCSAgRml4ZXMgIzMzNTQ4MC4KKworMjAwNi0wMy0yMiAxMzoxMDoxNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGVsZW1lbnQuYzogQ2xlYW51cCB0aGUgZXJyb3IgY2FzZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZSksCisJICAoZ3N0X2VsZW1lbnRfZGlzcG9zZSk6CisJICBDbGVhbnVwIHRoZSBlcnJvciBjYXNlLgorCSAgKiBnc3QvZ3N0b2JqZWN0LmM6IChnc3Rfb2JqZWN0X2Rpc3Bvc2UpOgorCSAgcHJpbnQgYSBjcml0aWNhbCB3aGVuIHNvbWUgb2JqZWN0IHdhcyBkaXNwb3NlZCB3aXRoCisJICBhIHBhcmVudCwgYWxzbyByZXZpdmUgdGhlIG9iamVjdCBzaW5jZSBpdCBtaWdodAorCSAgY3Jhc2ggdGhlIHBhcmVudC4KKworMjAwNi0wMy0yMiAwOTowMzoxMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgdG9vbHMvZ3N0LWxhdW5jaC4xLmluOiBGaXggYW5vdGhlciB0eXBvLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKKwkgIEZpeCBhbm90aGVyIHR5cG8uCisKKzIwMDYtMDMtMjEgMTk6Mjc6MTUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBkaXNhYmxlIHNvbWUgdGVzdHMgd2hlbiB3ZSBkb24ndCBoYXZlIGEgcmVnaXN0cnkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSAgZGlzYWJsZSBzb21lIHRlc3RzIHdoZW4gd2UgZG9uJ3QgaGF2ZSBhIHJlZ2lzdHJ5CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jOiAoZ3N0X3V0aWxzX3N1aXRlKToKKwkgIGRvbid0IGJ1aWxkIHRoZSBwYXJ0IHRoYXQgbmVlZHMgcGFyc2luZworCisyMDA2LTAzLTIxIDE3OjI1OjIyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0L01ha2VmaWxlLmFtCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L01ha2VmaWxlLmFtCisJICAqIHRlc3RzL2V4YW1wbGVzL01ha2VmaWxlLmFtOgorCSAgZml4IC0tZGlzYWJsZS1wYXJzZSBidWlsZAorCisyMDA2LTAzLTIxIDE3OjI0OjMwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzOgorCSAgdGhlIC5pbiBmaWxlIGlzIGluIGN2cworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB0aGUgLmluIGZpbGUgaXMgaW4gY3ZzCisKKzIwMDYtMDMtMjEgMTU6NDI6MDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHRvb2xzL2dzdC1mZWVkYmFjay4xLmluOiBGaXggdHlwbzogcy9mZWViYWNrL2ZlZWRiYWNrLyAoIzEzMzQ5NCkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdG9vbHMvZ3N0LWZlZWRiYWNrLjEuaW46CisJICBGaXggdHlwbzogcy9mZWViYWNrL2ZlZWRiYWNrLyAoIzEzMzQ5NCkuCisKKzIwMDYtMDMtMjEgMTU6MDQ6MjAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHRvb2xzLzogQWRkIEZJTEVTIHNlY3Rpb24gYW5kIGNvcnJlY3QgZW50cnkgYWJvdXQgR1NUX1JFR0lTVFJZX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgKCMxMzM0OTU7ICMxMzM0OTQpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL01ha2VmaWxlLmFtOgorCSAgKiB0b29scy9nc3QtbGF1bmNoLjEuaW46CisJICBBZGQgRklMRVMgc2VjdGlvbiBhbmQgY29ycmVjdCBlbnRyeSBhYm91dCBHU1RfUkVHSVNUUllfUEFUSAorCSAgZW52aXJvbm1lbnQgdmFyaWFibGUgKCMxMzM0OTU7ICMxMzM0OTQpLgorCisyMDA2LTAzLTIxIDE0OjQxOjU4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICB0b29scy86IFJlbW92ZSBnc3QtbWQ1c3VtIGFuZCBtYW4gcGFnZSAodGhlIG1kNXNpbmsgZWxlbWVudCByZXF1aXJlZCB3YXMgcmVtb3ZlZCBhZ2VzIGFnbykKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0b29scy9NYWtlZmlsZS5hbToKKwkgICogdG9vbHMvZ3N0LW1kNXN1bS4xLmluOgorCSAgKiB0b29scy9nc3QtbWQ1c3VtLmM6CisJICBSZW1vdmUgZ3N0LW1kNXN1bSBhbmQgbWFuIHBhZ2UgKHRoZSBtZDVzaW5rIGVsZW1lbnQKKwkgIHJlcXVpcmVkIHdhcyByZW1vdmVkIGFnZXMgYWdvKQorCisyMDA2LTAzLTIxIDE0OjI0OjQxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0c3RydWN0dXJlLmM6IE1ha2Ugc3VyZSB0aGF0IHN0cmluZyBmaWVsZHMgaW4gc3RydWN0dXJlcy90YWdsaXN0cyBjb250YWluIHZhbGlkIFVURi04IC0gd2UgZG9uJ3Qgd2FudCB0byBwYXNzIHIuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6IChnc3Rfc3RydWN0dXJlX2lkX3NldF92YWx1ZSk6CisJICBNYWtlIHN1cmUgdGhhdCBzdHJpbmcgZmllbGRzIGluIHN0cnVjdHVyZXMvdGFnbGlzdHMKKwkgIGNvbnRhaW4gdmFsaWQgVVRGLTggLSB3ZSBkb24ndCB3YW50IHRvIHBhc3MgcnViYmlzaCB0bworCSAgYXBwbGljYXRpb25zIGJlY2F1c2Ugb2YgYSBidWdneSBwbHVnaW4gKGNwLiAjMzM0MTY3KS4KKworMjAwNi0wMy0yMSAxNDoxNDo0OSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgU2VyaWVzIG9mIGZpeGVzIGZvciBkZXJlZmVyZW5jZWQgcG9pbnRlcnMgdGhhdCBnY2MgNC4xIGNvbXBsYWlucyBhYm91dC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmV2aWV3ZWQgYnk6IDxkZWxldGUgaWYgbm90IHVzaW5nIGEgYnVkZHk+CisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fZGlzcG9zZSksIChnc3RfYmluX3Byb3ZpZGVfY2xvY2tfZnVuYyksCisJICAoZ3N0X2Jpbl9oYW5kbGVfbWVzc2FnZV9mdW5jKToKKwkgICogZ3N0L2dzdGNsb2NrLmM6IChnc3RfY2xvY2tfZGlzcG9zZSksIChnc3RfY2xvY2tfc2V0X21hc3Rlcik6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9zZXRfY2xvY2spLCAoZ3N0X2VsZW1lbnRfZGlzcG9zZSksCisJICAoZ3N0X2VsZW1lbnRfc2V0X2J1c19mdW5jKToKKwkgICogZ3N0L2dzdGdob3N0cGFkLmM6IChnc3RfcHJveHlfcGFkX2Rpc3Bvc2UpOgorCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5jOiAoZ3N0X3ZhbHVlX3NldF9taW5pX29iamVjdCksCisJICAoZ3N0X3ZhbHVlX3Rha2VfbWluaV9vYmplY3QpOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3NldF9wYWRfdGVtcGxhdGUpOgorCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9kaXNwb3NlKSwKKwkgIChnc3RfcGlwZWxpbmVfdXNlX2Nsb2NrKSwgKGdzdF9waXBlbGluZV9hdXRvX2Nsb2NrKToKKwkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RfcGFkc19wb3ApLAorCSAgKGdzdF9jb2xsZWN0X3BhZHNfY2hhaW4pOgorCSAgKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmM6CisJICAoZ3N0X25ldF90aW1lX3Byb3ZpZGVyX3NldF9wcm9wZXJ0eSk6CisJICBTZXJpZXMgb2YgZml4ZXMgZm9yIGRlcmVmZXJlbmNlZCBwb2ludGVycyB0aGF0IGdjYyA0LjEgY29tcGxhaW5zIGFib3V0LgorCSAgSXQncyBpbiBmYWN0IGFsbCBpc3N1ZXMgd2l0aCBnc3RfKm9iamVjdF9yZXBsYWNlKCkuCisKKzIwMDYtMDMtMjEgMTM6NTU6NDQgKzAwMDAgIExvw69jIE1pbmllciA8bG9vbC5nbm9tZUB2aWEuZWNwLmZyPgorCisJICBwa2djb25maWcvOiBVc2UgQENIRUNLX0xJQlNAIGhlcmUgaW5zdGVhZCBvZiBoYXJkLWNvZGluZyAtbGNoZWNrICgjMzM0MTA5KS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUGF0Y2ggYnk6IExvw69jIE1pbmllciAgPGxvb2wgKyBnbm9tZSBhdCB2aWEgZG90IGVjcCBkb3QgZnI+CisJICAqIHBrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2stdW5pbnN0YWxsZWQucGMuaW46CisJICAqIHBrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2sucGMuaW46CisJICBVc2UgQENIRUNLX0xJQlNAIGhlcmUgaW5zdGVhZCBvZiBoYXJkLWNvZGluZyAtbGNoZWNrICgjMzM0MTA5KS4KKworMjAwNi0wMy0yMSAxMzo1MDo1MiArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgZ3N0LzogZ3N0X1tidWZmZXJ8ZXZlbnR8bWVzc2FnZV1fcmVmKCkgbWFjcm9zIGFyZSByZXBsYWNlZCBieSBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGJlY2F1c2UgZ2NjLTQuMSB3aWxsIGFib3V0IGlmLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJ1ZmZlci5oOgorCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKKwkgICogZ3N0L2dzdG1lc3NhZ2UuaDoKKwkgIGdzdF9bYnVmZmVyfGV2ZW50fG1lc3NhZ2VdX3JlZigpIG1hY3JvcyBhcmUgcmVwbGFjZWQgYnkgYSBzdGF0aWMKKwkgIGlubGluZSBmdW5jdGlvbnMgYmVjYXVzZSBnY2MtNC4xIHdpbGwgYWJvdXQgaWYgdGhlIHJldHVybiB2YWx1ZQorCSAgaXNuJ3QgdXNlZC4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmM6IChldmVudF9wcm9iZSk6CisJICBnc3RfZXZlbnRfcmVmIG5vdyBoYXMgdG8gYmUgZ2l2ZW4gYSBHc3RFdmVudCogLCBmaXggY2hlY2sgYWNjb3JkaW5nbHkuCisKKzIwMDYtMDMtMjAgMTY6NDc6MzUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJKiBkb2NzL3BsdWdpbnMvdG1wbC8uZ2l0aWdub3JlOgorCSAgUmVtb3ZlIGlycml0YXRpbmcgZmlsZSB0aGF0IGtlZXBzIGJyZWFraW5nIG15IGNoZWNrb3V0cworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBSZW1vdmUgaXJyaXRhdGluZyBmaWxlIHRoYXQga2VlcHMgYnJlYWtpbmcgbXkgY2hlY2tvdXRzCisKKzIwMDYtMDMtMjAgMTY6NDU6MTUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBnc3QvZ3N0dXRpbHMuaDogQWRkIEdfVU5MSUtFTFkgdG8gb3VyIGJvaWxlcnBsYXRlIHRvIG9wdGltaXNlIHRoZSAnYWxyZWFkeSByZWdpc3RlcmVkIHRoZSB0eXBlJyBjYXNlLiAoQ2xvc2VzOiAjMzM1MTkuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dXRpbHMuaDoKKwkgIEFkZCBHX1VOTElLRUxZIHRvIG91ciBib2lsZXJwbGF0ZSB0byBvcHRpbWlzZSB0aGUgJ2FscmVhZHkgcmVnaXN0ZXJlZAorCSAgdGhlIHR5cGUnIGNhc2UuIChDbG9zZXM6ICMzMzUxOTUgZm9yIG5vdykuIEluIHRoZSBmdXR1cmUsIHdoZW4gd2UKKwkgIGRlcGVuZCBvbiBHTGliIDIuMTAsIHdlIGNvdWxkIGFsc28gaW50ZXJuIHRoZSB0eXBlIG5hbWUgdXNpbmcKKwkgIGdfaW50ZXJuX3N0YXRpY19zdHJpbmcoKQorCisyMDA2LTAzLTIwIDEwOjU2OjA4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YmluLmM6IFBvc2l0aW9uIHF1ZXJ5IHNob3VsZCBhbHNvIHRha2UgbWF4IG9mIGFsbCBzdHJlYW1zLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5faGFuZGxlX21lc3NhZ2VfZnVuYyksCisJICAoYmluX3F1ZXJ5X21heF9pbml0KSwgKGJpbl9xdWVyeV9wb3NpdGlvbl9mb2xkKSwKKwkgIChiaW5fcXVlcnlfcG9zaXRpb25fZG9uZSksIChnc3RfYmluX3F1ZXJ5KToKKwkgIFBvc2l0aW9uIHF1ZXJ5IHNob3VsZCBhbHNvIHRha2UgbWF4IG9mIGFsbCBzdHJlYW1zLgorCisyMDA2LTAzLTIwIDA5OjI4OjQxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzogRml4IGxlYWtzIGluIGZha2VzcmMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6IChnc3RfZmFrZV9zcmNfY2xhc3NfaW5pdCksCisJICAoZ3N0X2Zha2Vfc3JjX2ZpbmFsaXplKToKKwkgIEZpeCBsZWFrcyBpbiBmYWtlc3JjLgorCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvcGFyc2UtbGF1bmNoLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBGaXggbGVha3MgaW4gdGhlIHRlc3RjYXNlLgorCisyMDA2LTAzLTE5IDIxOjM5OjIxICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+CisKKwkgIGdzdC9nc3RfcHJpdmF0ZS5oOiBhZGQgd2luMzIgc3BlY2lmaWMgaW1wb3J0IGRlY29yYXRpb24oX19kZWNsc3BlYyhkbGxpbXBvcnQpKSBmb3IgYWxsIGV4dGVybiBHc3REZWJ1Z0NhdGVnb3J5ICogdmFyaS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RfcHJpdmF0ZS5oOgorCSAgYWRkIHdpbjMyIHNwZWNpZmljIGltcG9ydCBkZWNvcmF0aW9uKF9fZGVjbHNwZWMoZGxsaW1wb3J0KSkKKwkgIGZvciBhbGwgZXh0ZXJuIEdzdERlYnVnQ2F0ZWdvcnkgKiB2YXJpYWJsZXMKKwkgICogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0Y29udHJvbGxlci5kZWY6CisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgQWRkIHNvbWUgZXhwb3J0cywgcmVtb3ZlIGVtcHR5IGxpbmVzCisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RkYXRhcHJvdG9jb2wuZGVmOgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0ZGF0YXByb3RvY29sLmRzcDoKKwkgICogd2luMzIvY29tbW9uL2xpYmdzdG5ldC5kZWY6CisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RuZXQuZHNwOgorCSAgbmV3IHByb2plY3QgZmlsZXMgYW5kIGV4cG9ydGF0aW9uIGZpbGVzIGFkZGVkCisKKzIwMDYtMDMtMTkgMTY6MDU6MjMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHRlc3RzL2NoZWNrL2xpYnMvYmFzZXNyYy5jOiBVc2UgcHJvcGVyIHJldHVybiB2YWx1ZSBmb3IgcHJvYmUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svbGlicy9iYXNlc3JjLmM6IChlb3NfZXZlbnRfY291bnRlcik6CisJICBVc2UgcHJvcGVyIHJldHVybiB2YWx1ZSBmb3IgcHJvYmUuCisKKzIwMDYtMDMtMTcgMTk6Mjc6NTEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RwYWQuYzogRG9uJ3QgbGVhayBidWZmZXJzLCBjYXBzIGFuZCBwYWRzIG9uIG5lZ290aWF0aW9uIGVycm9ycy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2FjY2VwdF9jYXBzKSwgKGdzdF9wYWRfYWxsb2NfYnVmZmVyX2Z1bGwpLAorCSAgKGdzdF9wYWRfcHVzaCk6CisJICBEb24ndCBsZWFrIGJ1ZmZlcnMsIGNhcHMgYW5kIHBhZHMgb24gbmVnb3RpYXRpb24gZXJyb3JzLgorCisyMDA2LTAzLTE2IDE1OjMzOjU1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvZmFxLzogRmFxIHJldmlldyBhbmQgdXBkYXRlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZmFxL2N2cy54bWw6CisJICAqIGRvY3MvZmFxL2RlcGVuZGVuY2llcy54bWw6CisJICAqIGRvY3MvZmFxL2RldmVsb3BpbmcueG1sOgorCSAgKiBkb2NzL2ZhcS9mYXEueG1sOgorCSAgKiBkb2NzL2ZhcS9nZW5lcmFsLnhtbDoKKwkgICogZG9jcy9mYXEvZ2V0dGluZy54bWw6CisJICAqIGRvY3MvZmFxL2xlZ2FsLnhtbDoKKwkgICogZG9jcy9mYXEvdHJvdWJsZXNob290aW5nLnhtbDoKKwkgICogZG9jcy9mYXEvdXNpbmcueG1sOgorCSAgRmFxIHJldmlldyBhbmQgdXBkYXRlLgorCisyMDA2LTAzLTE2IDEwOjE4OjI3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZ3N0L2dzdHBhZC5jOiBEb24ndCBwb3VuZCB0aGUgY3B1IHRvIHBpZWNlcyBieSBjaGVja2luZyBnZXRfY2FwcyB3aGVuIGFjY2VwdF9jYXBzIGlzIGNhbGxlZCB3aXRoIHRoZSBzYW1lIGNhcHMgYXMgdGhlLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9hY2NlcHRfY2FwcyksIChnc3RfcGFkX2FsbG9jX2J1ZmZlcl9mdWxsKSwKKwkgIChnc3RfcGFkX3B1c2gpOgorCSAgRG9uJ3QgcG91bmQgdGhlIGNwdSB0byBwaWVjZXMgYnkgY2hlY2tpbmcgZ2V0X2NhcHMgd2hlbiBhY2NlcHRfY2FwcworCSAgaXMgY2FsbGVkIHdpdGggdGhlIHNhbWUgY2FwcyBhcyB0aGUgcGFkIGFscmVhZHkgaGFzLgorCSAgVXNlIEdTVF9ERUJVR19PQkpFQ1Qgd2hlbiBvdXRwdXR0aW5nIGNhcHMgY2hhbmdlIGluZm9ybWF0aW9uLgorCisyMDA2LTAzLTE1IDIwOjE3OjQwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0Y2xvY2suYzogRml4IGRvY3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGNsb2NrLmM6IChnc3RfY2xvY2tfY2xhc3NfaW5pdCk6CisJICBGaXggZG9jcy4KKworMjAwNi0wMy0xNSAxNjoyOTowMiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGdzdC9nc3RidWZmZXIuaDogRG9jdW1lbnRhdGlvbiBmaXguCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJ1ZmZlci5oOgorCSAgRG9jdW1lbnRhdGlvbiBmaXguCisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfaW5pdCksIChnc3RfcGFkX2FjY2VwdGNhcHNfZGVmYXVsdCksCisJICAoZ3N0X3BhZF9hY2NlcHRfY2FwcyksIChnc3RfcGFkX2NvbmZpZ3VyZV9zaW5rKSwKKwkgIChnc3RfcGFkX2NvbmZpZ3VyZV9zcmMpLCAoZ3N0X3BhZF9jaGFpbiksIChnc3RfcGFkX3B1c2gpOgorCSAgTWFrZSB0aGUgZGVmYXVsdCBhY2NlcHRjYXBzIGJlaGF2aW91ciBiZSB0byBjaGVjayB0aGUgcmVxdWVzdGVkCisJICBjYXBzIGFnYWluc3QgdGhlIGdzdF9wYWRfZ2V0X2NhcHMgb3V0cHV0LgorCSAgRW5zdXJlIHRoYXQgZ3N0X3BhZF9hY2NlcHRfY2FwcyBpcyB1c2VkIHRvIGNoZWNrIGNhcHMgd2hlbiBhIHBhZAorCSAgZG9lc24ndCBoYXZlIGEgc2V0Y2FwcyBmdW5jdGlvbiwgc28gdGhhdCBwYWRzIGF1dG9tYXRpY2FsbHkgcmVmdXNlCisJICBjYXBzIHRoYXQgdGhleSBkb24ndCBhbGxvdyBpbiB0aGVpciBwYWQgdGVtcGxhdGUuIChGaXhlcyAjMzMyOTg2KQorCSAgV2hlbiBhIGJ1ZmZlciB3aXRoIGF0dGFjaGVkIGNhcHMgaXMgcHVzaGVkLCBlbnN1cmUgdGhhdCB0aGUgc291cmNlCisJICBwYWQgcmVjZWl2ZXMgdGhvc2UgY2FwcyBldmVuIGlmIHRoZSBlbGVtZW50IGRpZG4ndCBjYWxsCisJICBnc3RfcGFkX3NldF9jYXBzIGZpcnN0LgorCisyMDA2LTAzLTE1IDE2OjIyOjI2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzogQWRkIHNvbWUgZG9jcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKKwkgIEFkZCBzb21lIGRvY3MuCisKKzIwMDYtMDMtMTUgMTU6NTc6NTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHdpbjMyL2NvbW1vbi86IEFkZCBhIHdob2xlIGJ1bmNoIG9mIG1pc3NpbmcgZnVuY3Rpb25zICgjMzM0NDM0KS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6CisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3Rjb250cm9sbGVyLmRlZjoKKwkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBBZGQgYSB3aG9sZSBidW5jaCBvZiBtaXNzaW5nIGZ1bmN0aW9ucyAoIzMzNDQzNCkuCisKKzIwMDYtMDMtMTQgMTk6MzY6MDUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogQmV0dGVyIGRlYnVnIGluZm8gd2hlbiB3ZSByZWNlaXZlIGEgc2VnbWVudCBldmVudC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NvbmZpZ3VyZV9zZWdtZW50KSwKKwkgIChnc3RfYmFzZV9zaW5rX2dldF9zeW5jX3RpbWVzKSwgKGdzdF9iYXNlX3Npbmtfd2FpdF9jbG9jayksCisJICAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKSwgKGdzdF9iYXNlX3NpbmtfZG9fcW9zKToKKwkgIEJldHRlciBkZWJ1ZyBpbmZvIHdoZW4gd2UgcmVjZWl2ZSBhIHNlZ21lbnQgZXZlbnQuCisJICBSZW9yZ2FuaXplIGEgYml0IHNvIHdlIGNhbiBwYXNzIHRoZSBnZXRfdGltZXMoKSByZXN1bHRzIGFyb3VuZC4KKwkgIFVzZSB0aGUgc2VnbWVudCBmb3JtYXQgd2hlbiBjYWxjdWxhdGluZyB0aGUgcnVubmluZyB0aW1lLgorCSAgRG9uJ3QgZG8gUW9TIGlzIHN5bmMgaXMgZGlzYWJsZWQgb3Igd2UgaGF2ZSBubyBjbG9jayBvciB0aGUKKwkgIGVsZW1lbnQgZG9lcyBub3Qgd2FudCB1cyB0byBzeW5jIHRvIHRoZSBjbG9jay4KKwkgIERvbid0IGRyb3AgYnVmZmVycyBpZiBRb1MgaXMgZGlzYWJsZWQgZm9yIG5vdy4KKworMjAwNi0wMy0xNCAxOToyODoyMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGNsb2NrLmM6IE1hcmtlZCB0aGUgc3RhdHMgcHJvcGVydHkgYXMgdW5pbXBsZW1lbnRlZCBzbyBwZW9wbGUgZG9uJ3QgZ2V0IHdpbGQgaWRlYXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGNsb2NrLmM6IChnc3RfY2xvY2tfY2xhc3NfaW5pdCksIChkb19saW5lYXJfcmVncmVzc2lvbik6CisJICBNYXJrZWQgdGhlIHN0YXRzIHByb3BlcnR5IGFzIHVuaW1wbGVtZW50ZWQgc28gcGVvcGxlIGRvbid0IGdldAorCSAgd2lsZCBpZGVhcy4KKwkgIEFkZCBkZWJ1ZyBtZXNzYWdlIHdoZW4gcmVncmVzc2lvbiBnb2VzIHdyb25nLgorCSAgQWRkZWQgc29tZSBtb3JlIGRvY3MuCisKKzIwMDYtMDMtMTQgMTk6MjY6MTcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RzZWdtZW50LmM6IFJldHVybiBjb3JyZWN0IHJldHVybiB0eXBlIGluIGNhc2Ugb2YgZXJyb3JzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RzZWdtZW50LmM6IChnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSk6CisJICBSZXR1cm4gY29ycmVjdCByZXR1cm4gdHlwZSBpbiBjYXNlIG9mIGVycm9ycy4KKworMjAwNi0wMy0xNCAxOToxNjo0NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGZvcm1hdC5jOiBEb24ndCBzZWdmYXVsdCBvbiBpbnZhbGlkIGZvcm1hdHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGZvcm1hdC5jOiAoZ3N0X2Zvcm1hdF9nZXRfbmFtZSksIChnc3RfZm9ybWF0X3RvX3F1YXJrKToKKwkgIERvbid0IHNlZ2ZhdWx0IG9uIGludmFsaWQgZm9ybWF0cy4KKworMjAwNi0wMy0xNCAxODoyNTo1NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBDYW4ndCB1c2UgZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lKCkgd2hlbiB0aGUgc2VnbWVudCBpcyBub3QgaW4gR1NUX1RJTUVfRk9STUFUIChsaWtlLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19nZXRfc3luY190aW1lcyk6CisJICBDYW4ndCB1c2UgZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lKCkgd2hlbiB0aGUgc2VnbWVudAorCSAgaXMgbm90IGluIEdTVF9USU1FX0ZPUk1BVCAobGlrZSB3aXRoIGZpbGVzaW5rLCBmb3IgZXhhbXBsZSkuCisJICBTdG9wcyBmbGFjIGVuY29kaW5nIHBpcGVsaW5lcyBmcm9tIHNwZXdpbmcgY3JpdGljYWwgd2FybmluZ3MKKwkgIGF0IEVPUyAoIzMzMTI0OCkuCisKKzIwMDYtMDMtMTQgMTY6MzI6NTggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RwaXBlbGluZS5jOiBBZGQgJ1NpbmNlOiAwLjEwLjUnIHRvIGd0ay1kb2MgYmx1cmIgZm9yIGFkZGVkIHByb3BlcnR5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX2NsYXNzX2luaXQpOgorCSAgQWRkICdTaW5jZTogMC4xMC41JyB0byBndGstZG9jIGJsdXJiIGZvciBhZGRlZCBwcm9wZXJ0eS4KKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfaGFuZGxlX2V2ZW50KToKKwkgIERvbid0IHRyeSB0byB0eXBlZmluZCBlbXB0eSBzdHJlYW1zLgorCisyMDA2LTAzLTE0IDExOjE4OjA3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFNlcGFyYXRlIFFvUyBjYWxjdWxhdGlvbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpLAorCSAgKGdzdF9iYXNlX3NpbmtfZG9fcW9zKToKKwkgIFNlcGFyYXRlIFFvUyBjYWxjdWxhdGlvbi4KKwkgIE9ubHkgZHJvcCBidWZmZXJzIHdoZW4gbGF0ZW5lc3MgaXMgYmlnZ2VyIHRoYW4gdGhlCisJICBkdXJhdGlvbiBvZiB0aGUgYnVmZmVyLgorCisyMDA2LTAzLTEzIDE1OjE3OjQ1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0cGlwZWxpbmUuYzogRG9uJ3QgZGVhZGxvY2sgd2hlbiByZWFkaW5nIHByb3BlcnRpZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBpcGVsaW5lLmM6IChnc3RfcGlwZWxpbmVfc2V0X3Byb3BlcnR5KSwKKwkgIChnc3RfcGlwZWxpbmVfZ2V0X3Byb3BlcnR5KSwgKGRvX3BpcGVsaW5lX3NlZWspLAorCSAgKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X3BpcGVsaW5lX3NldF9kZWxheSksCisJICAoZ3N0X3BpcGVsaW5lX2dldF9kZWxheSk6CisJICBEb24ndCBkZWFkbG9jayB3aGVuIHJlYWRpbmcgcHJvcGVydGllcy4KKworMjAwNi0wMy0xMyAxMToyNzo1NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLio6IE1ha2UgYmFzZXRyYW5zZm9ybSB2aXJ0dWFsIG1ldGhvZCBmb3Igc3JjIGV2ZW50cyB0b28uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NsYXNzX2luaXQpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2luaXQpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zaW5rX2V2ZW50KSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc2lua19ldmVudGZ1bmMpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zcmNfZXZlbnQpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NyY19ldmVudGZ1bmMpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9oYW5kbGVfYnVmZmVyKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9jaGFpbiksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wcm9wZXJ0eSksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldF9wcm9wZXJ0eSksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NoYW5nZV9zdGF0ZSksIChnc3RfYmFzZV90cmFuc2Zvcm1fdXBkYXRlX3FvcyksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9xb3NfZW5hYmxlZCksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Fvc19lbmFibGVkKToKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6CisJICBNYWtlIGJhc2V0cmFuc2Zvcm0gdmlydHVhbCBtZXRob2QgZm9yIHNyYyBldmVudHMgdG9vLgorCSAgSGFuZGxlIFFPUyBpbiBiYXNldHJhbnNmb3JtLgorCSAgQVBJOiBnc3RfYmFzZV90cmFuc2Zvcm1fdXBkYXRlX3FvcworCSAgQVBJOiBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Fvc19lbmFibGVkCisJICBBUEk6IGdzdF9iYXNlX3RyYW5zZm9ybV9pc19xb3NfZW5hYmxlZAorCisyMDA2LTAzLTEzIDExOjE2OjQ1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFNtYWxsIGNsZWFudXBzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfaW5pdCksCisJICAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKToKKwkgIFNtYWxsIGNsZWFudXBzLgorCSAgVXNlIFFPUyBkZWJ1ZyBjYXRlZ29yeS4KKworMjAwNi0wMy0xMyAxMToxMToxNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiBWZXJ5IHNtYWxsIGRvYyB1cGRhdGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSAgVmVyeSBzbWFsbCBkb2MgdXBkYXRlLgorCisyMDA2LTAzLTEzIDExOjA4OjI4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvOiBBZGRlZCBRT1MgZGVidWcgY2F0ZWdvcnkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0X3ByaXZhdGUuaDoKKwkgICogZ3N0L2dzdGluZm8uYzogKF9nc3RfZGVidWdfaW5pdCk6CisJICBBZGRlZCBRT1MgZGVidWcgY2F0ZWdvcnkKKworMjAwNi0wMy0xMyAxMTowNDozOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgRG9jdW1lbnRhdGlvbiB1cGRhdGVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3RiaW4uYzogKGJpbl9idXNfaGFuZGxlciksIChnc3RfYmluX2hhbmRsZV9tZXNzYWdlX2Z1bmMpOgorCSAgKiBnc3QvZ3N0YmluLmg6CisJICAqIGdzdC9nc3RidXMuYzogKGdzdF9idXNfY2xhc3NfaW5pdCk6CisJICAqIGdzdC9nc3RidXMuaDoKKwkgICogZ3N0L2dzdGNsb2NrLmM6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlKToKKwkgICogZ3N0L2dzdHNlZ21lbnQuYzoKKwkgIERvY3VtZW50YXRpb24gdXBkYXRlcy4KKwkgICogZ3N0L2dzdHBpcGVsaW5lLmM6IChnc3RfcGlwZWxpbmVfZ2V0X3R5cGUpLAorCSAgKGdzdF9waXBlbGluZV9jbGFzc19pbml0KSwgKGdzdF9waXBlbGluZV9pbml0KSwKKwkgIChnc3RfcGlwZWxpbmVfZGlzcG9zZSksIChnc3RfcGlwZWxpbmVfc2V0X3Byb3BlcnR5KSwKKwkgIChnc3RfcGlwZWxpbmVfZ2V0X3Byb3BlcnR5KSwgKGRvX3BpcGVsaW5lX3NlZWspLAorCSAgKGdzdF9waXBlbGluZV9zZW5kX2V2ZW50KSwgKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpLAorCSAgKGdzdF9waXBlbGluZV9wcm92aWRlX2Nsb2NrX2Z1bmMpLCAoZ3N0X3BpcGVsaW5lX3NldF9kZWxheSksCisJICAoZ3N0X3BpcGVsaW5lX2dldF9kZWxheSk6CisJICAqIGdzdC9nc3RwaXBlbGluZS5oOgorCSAgQWRkZWQgbWV0aG9kcyBmb3Igc2V0dGluZyB0aGUgZGVsYXkuCisJICBBUEk6IGdzdF9waXBlbGluZV9zZXRfZGVsYXkKKwkgIEFQSTogZ3N0X3BpcGVsaW5lX2dldF9kZWxheQorCSAgQWRkIHBpcGVsaW5lIGRlYnVnIGNhdGVnb3J5CisJICBWYXJpb3VzIGNsZWFudXBzLgorCSAgVXBkYXRlZCBkb2NzLgorCSAgRG9uJ3QgcmVzZXQgc3RyZWFtIHRpbWUgd2hlbiBzZWVrIGZhaWxlZC4KKworMjAwNi0wMy0xMyAxMDozMjoyNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vOiBEb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vZHJhZnQta2xhc3MudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWNsb2Nrcy50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtZXZlbnRzLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RiaW4udHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdHBpcGVsaW5lLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1tZXNzYWdlcy50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtbmVnb3RpYXRpb24udHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LW92ZXJ2aWV3LnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1wcmVyb2xsLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1zZWVraW5nLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1zdGF0ZXMudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXN0cmVhbXMudHh0OgorCSAgRG9jdW1lbnRhdGlvbiB1cGRhdGVzLgorCisyMDA2LTAzLTEyIDIwOjQ0OjQ2ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KKworCSAgZ3N0L2dzdHRhZ2xpc3QuYzogRml4IHJ1YmJpc2ggZG9jcyB0aGF0IGFyZSBlbmNvdXJhZ2luZyB1cyB0byBsZWFrIHN0cmluZ3MuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNi0wMy0xMiAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgorCSAgKiBnc3QvZ3N0dGFnbGlzdC5jOiBGaXggcnViYmlzaCBkb2NzIHRoYXQgYXJlIGVuY291cmFnaW5nCisJICB1cyB0byBsZWFrIHN0cmluZ3MuLi4KKworMjAwNi0wMy0xMiAyMDo0MDoxOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzogZml4IGRvY3MKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmM6CisJICBmaXggZG9jcworCSAgKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICB1cGRhdGUKKworMjAwNi0wMy0xMiAxNDozMjozNyArMDAwMCAgSnVsaW8gTS4gTWVyaW5vIFZpZGFsIDxqbW12QG5ldGJzZC5vcmc+CisKKwkgIGNvbmZpZ3VyZS5hYzogRG9uJ3QgY2hlY2sgZm9yIGxpYmdub21ldWkgKGxlZnRvdmVyIGZyb20gb2xkIGV4YW1wbGVzIHRoYXQgYXJlbid0IGJ1aWx0IG9yIGRpc3RlZCBhbnkgbG9uZ2VyKSAoIzMzNDMwMykuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFBhdGNoIGJ5OiBKdWxpbyBNLiBNZXJpbm8gVmlkYWwgPGptbXYgYXQgbmV0YnNkIG9yZz4KKwkgICogY29uZmlndXJlLmFjOgorCSAgRG9uJ3QgY2hlY2sgZm9yIGxpYmdub21ldWkgKGxlZnRvdmVyIGZyb20gb2xkIGV4YW1wbGVzCisJICB0aGF0IGFyZW4ndCBidWlsdCBvciBkaXN0ZWQgYW55IGxvbmdlcikgKCMzMzQzMDMpLgorCisyMDA2LTAzLTExIDEzOjAyOjI4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBwbHVnaW5zL2VsZW1lbnRzLzogRW1pdCBSRVNPVVJDRV9OT19TUEFDRV9MRUZUIGVycm9yIGhlcmUgYXMgd2VsbCB3aGVuIHRoZXJlJ3Mgbm8gc3BhY2UgbGVmdCBvbiB0aGUgZGV2aWNlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6IChnc3RfZmRfc2lua19yZW5kZXIpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IChnc3RfZmlsZV9zaW5rX3JlbmRlcik6CisJICBFbWl0IFJFU09VUkNFX05PX1NQQUNFX0xFRlQgZXJyb3IgaGVyZSBhcyB3ZWxsIHdoZW4KKwkgIHRoZXJlJ3Mgbm8gc3BhY2UgbGVmdCBvbiB0aGUgZGV2aWNlLgorCisyMDA2LTAzLTEwIDIzOjQ0OjAwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0Y2xvY2suaDogRml4IEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIHNpZ25lZG5lc3MgaXNzdWVzIC0gd2UgbmVlZCB0byBjYXN0IHRoZSBpbnB1dCB0byBHc3RDbG9ja1RpbWUgYmVmb3JlIGNvbXAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0Y2xvY2suaDoKKwkgIEZpeCBHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCBzaWduZWRuZXNzIGlzc3VlcyAtIHdlIG5lZWQKKwkgIHRvIGNhc3QgdGhlIGlucHV0IHRvIEdzdENsb2NrVGltZSBiZWZvcmUgY29tcGFyaW5nIHdpdGgKKwkgIGFub3RoZXIgR3N0Q2xvY2tUaW1lIHZhbHVlLgorCisyMDA2LTAzLTEwIDE5OjEyOjAxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgbG9nIHdoYXQgd2UncmUgd2FpdGluZyBvbgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBsb2cgd2hhdCB3ZSdyZSB3YWl0aW5nIG9uCisKKzIwMDYtMDMtMTAgMTk6MTE6MzQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBjb25maWd1cmUuYWM6CisJICBiYWNrIHRvIGhlYWQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYmFjayB0byBoZWFkCisKKz09PSByZWxlYXNlIDAuMTAuNCA9PT0KKworMjAwNi0wMy0xMCAxOTowMzoxMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIE5FV1M6CisJKiBSRUxFQVNFOgorCSogY29uZmlndXJlLmFjOgorCSogZG9jcy9tYW51YWwvUkVBRE1FOgorCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmFyZ3M6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgorCSogZG9jcy91cGxvYWQubWFrOgorCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgorCSAgcmVsZWFzaW5nIDAuMTAuNAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICByZWxlYXNpbmcgMC4xMC40CisKKzIwMDYtMDMtMTAgMTU6MzA6MjcgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KKworCSAgbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOiBGaXggZG9jcyBmb3IgZGF0YXByb2NvdG9sIHRvIG5vdCBnZXQgdGhlIHJldHVybiB0eXBlcyBjb21wbGV0ZWx5IHdyb25nIGZvciBhIGZlLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOgorCSAgRml4IGRvY3MgZm9yIGRhdGFwcm9jb3RvbCB0byBub3QgZ2V0IHRoZSByZXR1cm4gdHlwZXMgY29tcGxldGVseQorCSAgd3JvbmcgZm9yIGEgZmV3IGZ1bmN0aW9ucy4KKworMjAwNi0wMy0wOSAxOTowMDoyMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIHBvL2FmLnBvOgorCSogcG8vYXoucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kZS5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZnIucG86CisJKiBwby9pdC5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9ydS5wbzoKKwkqIHBvL3NxLnBvOgorCSogcG8vc3IucG86CisJKiBwby9zdi5wbzoKKwkqIHBvL3RyLnBvOgorCSogcG8vdWsucG86CisJKiBwby92aS5wbzoKKwkqIHBvL3poX0NOLnBvOgorCSogcG8vemhfVFcucG86CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICBwcmVyZWxlYXNpbmcKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcHJlcmVsZWFzaW5nCisKKzIwMDYtMDMtMDkgMTY6NTM6MDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIEFkZCBuZXcgQVBJOiBnc3RfcGlwZWxpbmVfc2V0X2F1dG9fZmx1c2hfYnVzKCkgYW5kIGdzdF9waXBlbGluZV9nZXRfYXV0b19mbHVzaF9idXMoKSB0byBkaXNhYmxlIGF1dG9tYXRpYyBmbHVzaGluZyBvZi4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX2NsYXNzX2luaXQpLAorCSAgKGdzdF9waXBlbGluZV9pbml0KSwgKGdzdF9waXBlbGluZV9zZXRfcHJvcGVydHkpLAorCSAgKGdzdF9waXBlbGluZV9nZXRfcHJvcGVydHkpLCAoZ3N0X3BpcGVsaW5lX2NoYW5nZV9zdGF0ZSksCisJICAoZ3N0X3BpcGVsaW5lX3NldF9hdXRvX2ZsdXNoX2J1cyksCisJICAoZ3N0X3BpcGVsaW5lX2dldF9hdXRvX2ZsdXNoX2J1cyk6CisJICAqIGdzdC9nc3RwaXBlbGluZS5oOgorCSAgQWRkIG5ldyBBUEk6IGdzdF9waXBlbGluZV9zZXRfYXV0b19mbHVzaF9idXMoKSBhbmQKKwkgIGdzdF9waXBlbGluZV9nZXRfYXV0b19mbHVzaF9idXMoKSB0byBkaXNhYmxlIGF1dG9tYXRpYworCSAgZmx1c2hpbmcgb2YgdGhlIHBpcGVsaW5lJ3MgR3N0QnVzIHdoZW4gZ29pbmcgZnJvbSBSRUFEWQorCSAgdG8gTlVMTCBzdGF0ZSAoIzMzMjA0NSkuCisKKzIwMDYtMDMtMDkgMTI6MDg6NTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIEFkZCBuZXcgQVBJOiBnc3RfdXJpX2hhc19wcm90b2NvbCgpICgjMzMzNzc5KS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBnc3QvZ3N0dXJpLmM6IChnc3RfdXJpX2hhc19wcm90b2NvbCk6CisJICAqIGdzdC9nc3R1cmkuaDoKKwkgIEFkZCBuZXcgQVBJOiBnc3RfdXJpX2hhc19wcm90b2NvbCgpICgjMzMzNzc5KS4KKworMjAwNi0wMy0wOSAxMTo0NToxNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGNsb2NrLio6IFJldmlldyBkb2NzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RjbG9jay5jOiAoZ3N0X2Nsb2NrX2VudHJ5X25ldyksCisJICAoZ3N0X2Nsb2NrX2lkX2NvbXBhcmVfZnVuYyksIChnc3RfY2xvY2tfaWRfd2FpdCksCisJICAoZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMpLCAoZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUpLAorCSAgKGdzdF9jbG9ja19pbml0KSwgKGdzdF9jbG9ja19nZXRfaW50ZXJuYWxfdGltZSksCisJICAoZ3N0X2Nsb2NrX3NldF9tYXN0ZXIpLCAoZG9fbGluZWFyX3JlZ3Jlc3Npb24pLAorCSAgKGdzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb24pLCAoZ3N0X2Nsb2NrX3NldF9wcm9wZXJ0eSk6CisJICAqIGdzdC9nc3RjbG9jay5oOgorCSAgUmV2aWV3IGRvY3MuCisJICBTbWFsbCBjbGVhbnVwcy4KKwkgIEZpeCBhIHBvc3NpYmxlIHNlZ2ZhdWx0IHdoZW4gdGhlIHdpbmRvdy1zaXplIGlzIG1hZGUgc21hbGxlci4KKwkgIENhbGN1bGF0ZSBqaXR0ZXIgYmVmb3JlIHBlcmZvcm1pbmcgdGhlIGNsb2NrIHdhaXQuIElkZWFsbHkKKwkgIHRoZSBjbG9jayBpbXBsZW1lbnRhdGlvbiBzaG91bGQgY2FsY3VsYXRlIGppdHRlciBidXQgd2UgbmVlZAorCSAgQVBJIGJyZWFrYWdlIGZvciB0aGF0LgorCSAgKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzogKGdzdF9zeXN0ZW1fY2xvY2tfaW5pdCk6CisJICBEb2NzIHJldmlldy4KKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKToKKwkgIFJlbW92ZSBsZWZ0b3ZlciBlbHNlCisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RzeXN0ZW1jbG9jay5jOiAoR1NUX1NUQVJUX1RFU1QpLAorCSAgKGdzdF9zeXN0ZW1jbG9ja19zdWl0ZSk6CisJICBBZGRlZCBjaGVjayB0byB0ZXN0IEdTVF9DTE9DS19ESUZGLgorCisyMDA2LTAzLTA5IDEwOjQ2OjM1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6IElmIHdlIGFyZSBwcm92aWRlZCB3aXRoIHRoZSBzaXplLCB3ZSBzaG91bGQgaW1wbGVtZW50CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOiAoaGVscGVyX2ZpbmRfZ2V0X2xlbmd0aCksCisJICAoZ3N0X3R5cGVfZmluZF9oZWxwZXJfZ2V0X3JhbmdlKToKKwkgIElmIHdlIGFyZSBwcm92aWRlZCB3aXRoIHRoZSBzaXplLCB3ZSBzaG91bGQgaW1wbGVtZW50CisJICBHc3RUeXBlRmluZDo6Z2V0X2xlbmd0aCwgc28gdGhhdCB0eXBlZmluZCBmdW5jdGlvbnMgd2hvCisJICB3YW50IHRvIGNhbiBhY3R1YWxseSBwZWVrIGF0IHRoZSBtaWRkbGUgb2YgYSBmaWxlLgorCisyMDA2LTAzLTA4IDE0OjMwOjQwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBkb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbDogQWRkIHNvbWUgdmVyeSB2ZXJ5IGJhc2ljIGVycm9yIGNoZWNraW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWRhdGFhY2Nlc3MueG1sOgorCSAgQWRkIHNvbWUgdmVyeSB2ZXJ5IGJhc2ljIGVycm9yIGNoZWNraW5nLgorCSAgKiBkb2NzL3B3Zy9hcHBlbmRpeC1jaGVja2xpc3QueG1sOgorCSAgU29tZSB1cGRhdGVzIHRvIHRoZSBsaXN0IG9mIHRoaW5ncyB0byBjaGVjayB3aGVuIHdyaXRpbmcgYW4gZWxlbWVudC4KKworMjAwNi0wMy0wOCAxMzo0NDo1NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1lbGVtZW50LXRyYW5zZm9ybS50eHQ6IEFkZGVkIHNvbWUgZG9jcyBhYm91dCB0aGUgZGVzaWduIG9mIHRyYW5mb3JtIGVsZW1lbnRzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtZWxlbWVudC10cmFuc2Zvcm0udHh0OgorCSAgQWRkZWQgc29tZSBkb2NzIGFib3V0IHRoZSBkZXNpZ24gb2YgdHJhbmZvcm0gZWxlbWVudHMuCisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX3BlcmZvcm1fc2VlayksCisJICAoZ3N0X2Jhc2Vfc3JjX2xvb3ApLCAoZ3N0X2Jhc2Vfc3JjX2NoYW5nZV9zdGF0ZSk6CisJICBNYXJrIGJ1ZmZlcnMgd2l0aCB0aGUgRElTQ09OVCBmbGFnLgorCisyMDA2LTAzLTA4IDEyOjU3OjM3ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+CisKKwkgIGdzdC86IFJld3JpdGUgcmVnaXN0cnktc2F2aW5nIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyBhbmQgY2hlY2sgZm9yIGZhaWxlZCB3cml0ZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5Lmg6CisJICAqIGdzdC9nc3RyZWdpc3RyeXhtbC5jOiAoZ3N0X3JlZ2lzdHJ5X3NhdmUpLAorCSAgKGdzdF9yZWdpc3RyeV9zYXZlX2VzY2FwZWQpLCAoZ3N0X3JlZ2lzdHJ5X3htbF9zYXZlX2NhcHMpLAorCSAgKGdzdF9yZWdpc3RyeV94bWxfc2F2ZV9wYWRfdGVtcGxhdGUpLAorCSAgKGdzdF9yZWdpc3RyeV94bWxfc2F2ZV9mZWF0dXJlKSwgKGdzdF9yZWdpc3RyeV94bWxfc2F2ZV9wbHVnaW4pLAorCSAgKGdzdF9yZWdpc3RyeV94bWxfd3JpdGVfY2FjaGUpOgorCSAgUmV3cml0ZSByZWdpc3RyeS1zYXZpbmcgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIGFuZCBjaGVjayBmb3IKKwkgIGZhaWxlZCB3cml0ZXMuCisKKzIwMDYtMDMtMDggMTA6MTc6NDEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBDbGVhbnVwcywgc2VwYXJhdGUgbm9ybWFsIGZsb3cgZnJvbSBlcnJvcnMsIGFkZCBzZW5zaWJsZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV90cmFuc2Zvcm1fY2FwcyksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3RyYW5zZm9ybV9zaXplKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fcHJlcGFyZV9vdXRwdXRfYnVmZmVyKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0X3VuaXRfc2l6ZSksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2J1ZmZlcl9hbGxvYyksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2hhbmRsZV9idWZmZXIpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9jaGFuZ2Vfc3RhdGUpOgorCSAgQ2xlYW51cHMsIHNlcGFyYXRlIG5vcm1hbCBmbG93IGZyb20gZXJyb3JzLCBhZGQgc2Vuc2libGUKKwkgIERFQlVHIGxpbmVzLgorCSAgRG9uJ3QgdHJ5IHRvIHJlbmVnb3RpYXRlIHdoZW4gYWxsb2NhdGluZyBhbiBvdXRwdXQgYnVmZmVyLgorCSAgQWxzbyBjb3B5IERJU0NPTlQgYnVmZmVyIGZsYWcgd2hlbiBjb3B5aW5nIGEgYnVmZmVyLgorCSAgUmVzZXQgdGhlIHRyYW5zZm9ybSBhZnRlciB3ZSBmaW5pc2ggc3RyZWFtaW5nLCBub3QgZHVyaW5nLgorCisyMDA2LTAzLTA4IDA5OjQ2OjU0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFVzZSBsYXN0IGJ1ZmZlciB0aW1lc3RhbXAgaW4gcW9zIG1lc3NhZ2UuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKToKKwkgIFVzZSBsYXN0IGJ1ZmZlciB0aW1lc3RhbXAgaW4gcW9zIG1lc3NhZ2UuCisKKzIwMDYtMDMtMDcgMTc6MDY6NTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvcHdnLzogQXBwbGllZCBwYXRjaCBmcm9tIENocmlzdG9waGUgRmVyZ2VhdSwgZml4ZXMgIzMzMzQxNgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcHdnL2FkdmFuY2VkLXRhZ2dpbmcueG1sOgorCSAgKiBkb2NzL3B3Zy9idWlsZGluZy1wYWRzLnhtbDoKKwkgIEFwcGxpZWQgcGF0Y2ggZnJvbSBDaHJpc3RvcGhlIEZlcmdlYXUsIGZpeGVzICMzMzM0MTYKKworMjAwNi0wMy0wNyAxNjoyMTowMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDogQWRkZWQgYmFzZXNpbmsgbmV3IG1ldGhvZHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkgIEFkZGVkIGJhc2VzaW5rIG5ldyBtZXRob2RzLgorCSAgKiBnc3QvZ3N0ZXZlbnQuYzoKKwkgICogZ3N0L2dzdGV2ZW50Lmg6CisJICBEb2NzIHVwZGF0ZXMuIEZsZXNoIG91dCB0aGUgUW9TIGRvY3MuCisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgorCSAgU21hbGwgZG9jIGNsYXJpZmljYXRpb24gYWJvdXQgb3duZXJzaGlwIGFuZCBmbHVzaGluZy4KKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19zZXRfc3luYyksCisJICAoZ3N0X2Jhc2Vfc2lua19nZXRfc3luYyksIChnc3RfYmFzZV9zaW5rX3NldF9tYXhfbGF0ZW5lc3MpLAorCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X21heF9sYXRlbmVzcyksIChnc3RfYmFzZV9zaW5rX3NldF9wcm9wZXJ0eSksCisJICAoZ3N0X2Jhc2Vfc2lua19nZXRfcHJvcGVydHkpLCAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKToKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSAgQWRkZWQgbmV3IG1ldGhvZHMgdG8gYWxsb3cgc3ViY2xhc3MgdG8gY29udHJvbCBtYXgtbGF0ZW5lc3MKKwkgIGFuZCBzeW5jLgorCSAgR2VuZXJhdGUgdmVyeSBiYXNpYyBRb1MgZXZlbnRzIGJhc2VkIG9uIGxhc3Qgc3luYyBvYnNlcnZhdGlvbi4KKwkgIFVwZGF0ZWQgZG9jcywgZml4IHR5cG8sIGFkZGVkIHNvbWUgUW9TIGJsdXJiLgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgIFJlbW92ZSBvYnNvbGV0ZSBfZ2V0X3N0YXRlKCkgY2FsbHMgZnJvbSBkb2NzLgorCisyMDA2LTAzLTA3IDE1OjE0OjUxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBGaXggIzMzMzY2OSwgQWRkIHBhZCBhY2Nlc3NvciBkZWZpbmVzIGZvciBHc3RCYXNlVHJhbnNmb3JtCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6CisJICBGaXggIzMzMzY2OSwgQWRkIHBhZCBhY2Nlc3NvciBkZWZpbmVzIGZvciBHc3RCYXNlVHJhbnNmb3JtCisJICBGaXggZG9jcyBmb3IgR3N0QmFzZVNyYy4KKworMjAwNi0wMy0wNyAxNTowODo1NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgU21hbGwgZG9jdW1lbnRhdGlvbiBmaXhlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBnc3QvZ3N0YnVmZmVyLmg6CisJICAqIGdzdC9nc3R2YWx1ZS5jOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKKwkgIFNtYWxsIGRvY3VtZW50YXRpb24gZml4ZXMuCisKKzIwMDYtMDMtMDcgMTE6NDc6MjQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3R2YWx1ZS5jOiBEb2N1bWVudCB0aHJlYWQtdW5zYWZldHkgb2YgZ3N0X3ZhbHVlX3JlZ2lzdGVyX2Zvb19mdW5jKCkgd2hlbiB1c2VkIGF0IHRoZSBzYW1lIHRpbWUgYXMgZ3N0X3ZhbHVlX2Zvby4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R2YWx1ZS5jOgorCSAgRG9jdW1lbnQgdGhyZWFkLXVuc2FmZXR5IG9mIGdzdF92YWx1ZV9yZWdpc3Rlcl9mb29fZnVuYygpCisJICB3aGVuIHVzZWQgYXQgdGhlIHNhbWUgdGltZSBhcyBnc3RfdmFsdWVfZm9vKCkgKCMzMjI2MjgpLgorCisyMDA2LTAzLTA3IDEwOjE5OjI1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogUkVBRE1FOgorCSAgdXBkYXRlIFJFQURNRQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB1cGRhdGUgUkVBRE1FCisKKzIwMDYtMDMtMDcgMDk6Mjg6NDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5jOiBQdXNoIHNvdXJjZXMgZG9uJ3Qgc3VwcG9ydCBwdWxsIG1vZGUgYnkgZGVmYXVsdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdHB1c2hzcmMuYzogKGdzdF9wdXNoX3NyY19jbGFzc19pbml0KSwKKwkgIChnc3RfcHVzaF9zcmNfY2hlY2tfZ2V0X3JhbmdlKToKKwkgIFB1c2ggc291cmNlcyBkb24ndCBzdXBwb3J0IHB1bGwgbW9kZSBieSBkZWZhdWx0LgorCisyMDA2LTAzLTA2IDE5OjU1OjA2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuKjogQWRkIDo6Y2hlY2tfZ2V0X3JhbmdlKCkgdmZ1bmMgdG8gR3N0QmFzZVNyYyAoIzMzMjYxMSksIHByb3ZpZGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiwgYW4uLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19jbGFzc19pbml0KSwKKwkgIChnc3RfYmFzZV9zcmNfaW5pdCksIChnc3RfYmFzZV9zcmNfcGFkX2NoZWNrX2dldF9yYW5nZSksCisJICAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfY2hlY2tfZ2V0X3JhbmdlKToKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJICBBZGQgOjpjaGVja19nZXRfcmFuZ2UoKSB2ZnVuYyB0byBHc3RCYXNlU3JjICgjMzMyNjExKSwKKwkgIHByb3ZpZGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiwgYW5kIHJlbmFtZQorCSAgZ3N0X2Jhc2Vfc3JjX2NoZWNrX2dldF9yYW5nZSgpIHRvCisJICBnc3RfYmFzZV9zcmNfcGFkX2NoZWNrX2dldF9yYW5nZSgpIGZvciBjbGFyaXR5LgorCisyMDA2LTAzLTA2IDE2OjI0OjM0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZG9jcy9yYW5kb20vc3R5bGVndWlkZToKKwkgIHN0eWxlIGd1aWRlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHN0eWxlIGd1aWRlCisKKzIwMDYtMDMtMDYgMTY6MTA6NDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogTWFrZSBwcm9wZXJ0eSBvdmVycmlkYWJsZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NsYXNzX2luaXQpOgorCSAgTWFrZSBwcm9wZXJ0eSBvdmVycmlkYWJsZS4KKworMjAwNi0wMy0wNiAxNjowMjozNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay4qOiBNYWtlIG1heC1sYXRlbmVzcyBhIHByb3BlcnR5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfY2xhc3NfaW5pdCksCisJICAoZ3N0X2Jhc2Vfc2lua19pbml0KSwgKGdzdF9iYXNlX3Npbmtfc2V0X3Byb3BlcnR5KSwKKwkgIChnc3RfYmFzZV9zaW5rX2dldF9wcm9wZXJ0eSksIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJICBNYWtlIG1heC1sYXRlbmVzcyBhIHByb3BlcnR5LgorCisyMDA2LTAzLTA2IDE1OjE2OjIzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IERvbid0IGV2ZXIgZHJhdyBhIGZyYW1lIHRoYXQgaXMgPjEwbXMgbGF0ZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX3dhaXRfY2xvY2spLAorCSAgKGdzdF9iYXNlX3NpbmtfZG9fc3luYyksIChnc3RfYmFzZV9zaW5rX3JlbmRlcl9vYmplY3QpOgorCSAgRG9uJ3QgZXZlciBkcmF3IGEgZnJhbWUgdGhhdCBpcyA+MTBtcyBsYXRlLgorCisyMDA2LTAzLTA2IDE0OjUxOjM2ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+CisKKwkgIGdzdC9nc3RtZXNzYWdlLmM6IFdoZW4gY29weWluZyBhIG1lc3NhZ2UsIHNldCB0aGUgcGFyZW50X3JlZmNvdW50IG9mIHRoZSBlbmNsb3NlZCBzdHJ1Y3R1cmUgdG8gcG9pbnQgYXQgdGhlIGNvcHksIG5vdC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RtZXNzYWdlLmM6IChfZ3N0X21lc3NhZ2VfY29weSk6CisJICBXaGVuIGNvcHlpbmcgYSBtZXNzYWdlLCBzZXQgdGhlIHBhcmVudF9yZWZjb3VudCBvZiB0aGUgZW5jbG9zZWQKKwkgIHN0cnVjdHVyZSB0byBwb2ludCBhdCB0aGUgY29weSwgbm90IHRoZSBvcmlnaW5hbCBtZXNzYWdlLgorCisyMDA2LTAzLTA2IDE0OjQ2OjMxICswMDAwICBDaHJpc3RvcGhlIEZlcmdlYXUgPHRldWZAZ25vbWUub3JnPgorCisJICBnc3QvZ3N0dXRpbHMuaDogRG8gcHJvcGVyIGNhc3QgaGVyZSB0byBtYWtlIEdTVF9CT0lMRVJQTEFURV9XSVRIX0lOVEVSRkFDRQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R1dGlscy5oOgorCSAgRG8gcHJvcGVyIGNhc3QgaGVyZSB0byBtYWtlIEdTVF9CT0lMRVJQTEFURV9XSVRIX0lOVEVSRkFDRQorCSAgdXNhYmxlIGluIGMrKyBjb2RlICgjMzMzNDE3OyBwYXRjaCBieTogQ2hyaXN0b3BoZSBGZXJnZWF1KQorCisyMDA2LTAzLTA2IDE0OjM0OjQ5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0L2dzdGNsb2NrLmg6IFNob3cgR1NUX0NMT0NLX1RJTUVfTk9ORSBhcyA5OTo5OTo5OS45OTk5OTk5OTkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0Y2xvY2suaDoKKwkgIFNob3cgR1NUX0NMT0NLX1RJTUVfTk9ORSBhcyA5OTo5OTo5OS45OTk5OTk5OTkKKworMjAwNi0wMy0wNiAxNDoyMzo1NiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGRvY3MvbWFudWFsL2FwcGVuZGl4LXF1b3Rlcy54bWw6CisJICBhZGQgYW5vdGhlciBxdW90ZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGQgYW5vdGhlciBxdW90ZQorCisyMDA2LTAzLTA1IDIwOjU2OjU1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogTWFrZSBzdXJlIGNhcHMgYXJlIHdyaXRhYmxlIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gZ3N0X2NhcHNfYXBwZW5kKCkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3RyYW5zZm9ybV9jYXBzKToKKwkgIE1ha2Ugc3VyZSBjYXBzIGFyZSB3cml0YWJsZSBiZWZvcmUgcGFzc2luZyB0aGVtIHRvCisJICBnc3RfY2Fwc19hcHBlbmQoKS4KKworMjAwNi0wMy0wNCAxNDo0NTo0MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdGVycm9yLmg6IEZpeCBzb21lIG1pbm9yIGRvY3MgZXJyb3JzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RlcnJvci5oOgorCSAgRml4IHNvbWUgbWlub3IgZG9jcyBlcnJvcnMuCisKKzIwMDYtMDMtMDQgMTM6NTQ6MjYgKzAwMDAgIFJvc3MgQnVydG9uIDxyb3NzQGJ1cnRvbmluaS5jb20+CisKKwkgIGdzdC9nc3RlcnJvci4qOiBBZGQgR1NUX1JFU09VUkNFX0VSUk9SX05PX1NQQUNFX0xFRlQgKGZvciAjMzMzMzUyOworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RlcnJvci5jOiAoX2dzdF9yZXNvdXJjZV9lcnJvcnNfaW5pdCk6CisJICAqIGdzdC9nc3RlcnJvci5oOgorCSAgQWRkIEdTVF9SRVNPVVJDRV9FUlJPUl9OT19TUEFDRV9MRUZUIChmb3IgIzMzMzM1MjsKKwkgIHBhdGNoIGJ5OiBSb3NzIEJ1cnRvbiA8cm9zcyBhdCBidXJ0b25pbmkgZG90IGNvbT4pLgorCisyMDA2LTAzLTAzIDE2OjU4OjUxICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZ3N0L2dzdC5jOiBBZGQgYSBjaGVjayBhbmQgb3V0cHV0IGEgZ193YXJuaW5nIHdoZW4gR1N0cmVhbWVyIGlzIGJ1aWx0IGFnYWluc3QgR0xpYiAyLjYgYnV0IHJ1bm5pbmcgYWdhaW5zdCAyLjggb3IgaGlnLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdC5jOgorCSAgQWRkIGEgY2hlY2sgYW5kIG91dHB1dCBhIGdfd2FybmluZyB3aGVuIEdTdHJlYW1lciBpcyBidWlsdAorCSAgYWdhaW5zdCBHTGliIDIuNiBidXQgcnVubmluZyBhZ2FpbnN0IDIuOCBvciBoaWdoZXIsIGFuZCB2aWNlCisJICB2ZXJzYS4gKENsb3NlczogIzMyMzU0MikKKworMjAwNi0wMy0wMyAxNTozMjozMCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGdzdC9wYXJzZS9wYXJzZS5sOiBDb21taXQgcGF0Y2ggZm9yIHBhcnNlX2xhdW5jaCBzeW50YXggZnJvbSAjMzMxMjU1LiBSZW1vdmVzIHN1cHBvcnQgZm9yIHF1b3RlZCBzdHJpbmdzIGFuZCBtaW1ldHlwZS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9wYXJzZS9wYXJzZS5sOgorCSAgQ29tbWl0IHBhdGNoIGZvciBwYXJzZV9sYXVuY2ggc3ludGF4IGZyb20gIzMzMTI1NS4gUmVtb3ZlcworCSAgc3VwcG9ydCBmb3IgcXVvdGVkIHN0cmluZ3MgYW5kIG1pbWV0eXBlcyB3aGVuIHdyaXRpbmcgZmlsdGVyZWQKKwkgIGNhcHMuIFNlZSB0aGUgYnVnIHJlcG9ydCBmb3IgbW9yZSBkZXRhaWxzIC0gSSdtIHByZXR0eSBzdXJlIHRoaXMKKwkgIG9ic2N1cmUgZmVhdHVyZSBpcyBub3QgaW4gdXNlIGJ5IF9hbnlvbmVfIGFueXdoZXJlLgorCSAgV2l0aCB0aGlzIHNpbXBsZSBjaGFuZ2UsIHRoZSBzaXplIG9mIHRoZSBnc3RyZWFtZXIuc28gaGVyZQorCSAgZHJvcHMgZnJvbSAyMTkzS0IgdG8gMTU2NUtCLgorCisyMDA2LTAzLTAzIDE0OjE4OjAxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC4qOiBVc2UgZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2J1ZmZlcigpIGZvciBjaGFpbi1iYXNlZCB0eXBlZmluZGluZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5oOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9zcmNfZXZlbnQpLCAoc3RhcnRfdHlwZWZpbmRpbmcpLAorCSAgKHN0b3BfdHlwZWZpbmRpbmcpLCAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2hhbmRsZV9ldmVudCksCisJICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NoYWluKSwKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfY2hhaW5fZG9fdHlwZWZpbmRpbmcpOgorCSAgVXNlIGdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9idWZmZXIoKSBmb3IgY2hhaW4tYmFzZWQKKwkgIHR5cGVmaW5kaW5nLgorCisyMDA2LTAzLTAzIDExOjQyOjQwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOiBEZXByZWNhdGUgIm1heGltdW0iIHByb3BlcnR5IChub3Qgb25seSB3YXMgaXQgb25seSB0YWtlbiBpbnRvIGFjY291bnQgZm9yIHR5cGUuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9jbGFzc19pbml0KSwKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfc2V0X3Byb3BlcnR5KSwKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfZ2V0X3Byb3BlcnR5KToKKwkgIERlcHJlY2F0ZSAibWF4aW11bSIgcHJvcGVydHkgKG5vdCBvbmx5IHdhcyBpdCBvbmx5IHRha2VuIGludG8KKwkgIGFjY291bnQgZm9yIHR5cGVmaW5kaW5nIGluIHB1c2gtbW9kZSBhbnl3YXksIGl0IGFsc28gd2FzIG5ldmVyCisJICBhY3R1YWxseSBwb3NzaWJsZSB0byBzZXQgaXQgaW4gdGhlIGZpcnN0IHBsYWNlIGJlY2F1c2UgdGhlCisJICBwcm9wZXJ0eSB3YXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBudW1lcmljIHByb3BlcnR5IElEIGZvciB0aGUKKwkgICJtaW5pbXVtIiBwcm9wZXJ0eSkuIFJlZ2lzdGVyICJtYXhpbXVtIiBwcm9wZXJ0eSBjb3JyZWN0bHksCisJICBmb3IgdGhlIHNha2Ugb2YgZnV0dXJlIGNvcHknbidwYXN0ZXJzLiBSZW1vdmUgc29tZSBjcnVmdAorCSAgZnJvbSBwcm9wZXJ0eSBnZXQvc2V0IGZ1bmN0aW9ucy4KKworMjAwNi0wMy0wMyAxMToyNzowMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogVXNlIGdzdF90eXBlX2ZpbmRfaGVscGVyX2dldF9yYW5nZSgpIGhlcmUsIHNvIHdlIGNhbiBob25vdXIgdGhlIG1pbi1wcm9iYWJpbGl0Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfYWN0aXZhdGUpOgorCSAgVXNlIGdzdF90eXBlX2ZpbmRfaGVscGVyX2dldF9yYW5nZSgpIGhlcmUsIHNvIHdlCisJICBjYW4gaG9ub3VyIHRoZSBtaW4tcHJvYmFiaWxpdHkgcHJvcGVydHkgYW5kIGFsc28gZW1pdAorCSAgdGhlIHNpZ25hbCB3aXRoIHRoZSBjb3JyZWN0IHByb2JhYmlsaXR5IG9mIHRoZSBmb3VuZCBjYXBzLgorCisyMDA2LTAzLTAyIDEzOjQ1OjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBOZXcgQVBJOiBnc3RfdHlwZV9maW5kX2hlbHBlcl9nZXRfcmFuZ2UoKSAoIzMzMzA0MikuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkgICogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOiAoaGVscGVyX2ZpbmRfcGVlayksCisJICAoaGVscGVyX2ZpbmRfc3VnZ2VzdCksIChnc3RfdHlwZV9maW5kX2hlbHBlcl9nZXRfcmFuZ2UpLAorCSAgKGdzdF90eXBlX2ZpbmRfaGVscGVyKToKKwkgICogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5oOgorCSAgTmV3IEFQSTogZ3N0X3R5cGVfZmluZF9oZWxwZXJfZ2V0X3JhbmdlKCkgKCMzMzMwNDIpLgorCisyMDA2LTAzLTAyIDExOjA0OjU4ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+CisKKwkgIGdzdC9nc3RyZWdpc3RyeXhtbC5jOiBBc3NlcnRpbmcgb24gYSBmYWlsdXJlIHRvIHJlYWQgcGFydCBvZiB0aGUgcmVnaXN0cnkgaXMgTm90IENvb2wuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6IChsb2FkX2ZlYXR1cmUpOgorCSAgQXNzZXJ0aW5nIG9uIGEgZmFpbHVyZSB0byByZWFkIHBhcnQgb2YgdGhlIHJlZ2lzdHJ5IGlzIE5vdCBDb29sLgorCSAgSnVzdCBsb2cgYSB3YXJuaW5nIGFuZCByZXR1cm4gTlVMTCAod2hpY2ggaXMgYWxyZWFkeSBoYW5kbGVkKQorCisyMDA2LTAyLTI4IDIwOjU3OjEwICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+CisKKwkgIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjogYWRkZWQgZXhwb3J0IG9mIGdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9idWZmZXIKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6CisJICBhZGRlZCBleHBvcnQgb2YgZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2J1ZmZlcgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6CisJICBhZGRlZCBzb21lIGV4cG9ydHMgOiBnc3RfYmluX2l0ZXJhdGVfZWxlbWVudHMsIGdzdF9pdGVyYXRvcl9yZXN5bmMsCisJICBnc3RfZ2hvc3RfcGFkX2dldF90YXJnZXQKKworMjAwNi0wMi0yOCAxNzoyNDoxMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vZHJhZnQta2xhc3MudHh0OiBXZSB1c2UgRmlsdGVyIG5vdy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9kcmFmdC1rbGFzcy50eHQ6CisJICBXZSB1c2UgRmlsdGVyIG5vdy4KKwkgIEFkZGVkIENvbm5lY3RvciB0byBtYXJrIGVsZW1lbnRzIHRoYXQgYXJlIG9ubHkgdXNlZCB0bworCSAgYWxsb3cgcGlwZWxpbmUgY29ubmVjdGlvbnMuCisJICBNb3ZlZCBEZWJ1ZyB0byBleHRyYSBmZWF0dXJlIHNpbmNlIG1vc3Qgb2YgdGhlbSBhcmUKKwkgIGZ1bmN0aW9uYWxseSBzb21ldGhpbmcgZWxzZS4KKworMjAwNi0wMi0yOCAxNzowMzozMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vZHJhZnQta2xhc3MudHh0OiBTb21lIHVwZGF0ZXMgYW5kIGNsYXJpZmljYXRpb25zLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL2RyYWZ0LWtsYXNzLnR4dDoKKwkgIFNvbWUgdXBkYXRlcyBhbmQgY2xhcmlmaWNhdGlvbnMuCisKKzIwMDYtMDItMjggMTU6NTQ6MDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZGVzaWduL2RyYWZ0LWtsYXNzLnR4dDogUHJvcG9zYWwgZm9yIGtsYXNzIGZpZWxkIHZhbHVlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9kcmFmdC1rbGFzcy50eHQ6CisJICBQcm9wb3NhbCBmb3Iga2xhc3MgZmllbGQgdmFsdWVzLgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXN0cmVhbXMudHh0OgorCSAgU3RhcnQgb2YgYSBkb2MgZGVzY3JpYmluZyBzdHJlYW0gYW5hdG9teS4KKworMjAwNi0wMi0yOCAxMDo1MjowMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJpbi5jOiBIZWxwIHRoZSBjb21waWxlciBhIGJpdCB3aXRoIHR5cGUgcmVnaXN0cmF0aW9uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fZ2V0X3R5cGUpLCAoZ3N0X2Jpbl9oYW5kbGVfbWVzc2FnZV9mdW5jKToKKwkgIEhlbHAgdGhlIGNvbXBpbGVyIGEgYml0IHdpdGggdHlwZSByZWdpc3RyYXRpb24uCisJICBVc2UgZXhpc3RpbmcgZm9yd2FyZCBjb2QgcGF0aCBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIGl0IHdoZW4KKwkgIGhhbmRsaW5nIGEgbWVzc2FnZS4KKwkgICogZ3N0L2dzdGJ1cy5jOiAoZ3N0X2J1c19nZXRfdHlwZSk6CisJICAqIGdzdC9nc3RjYXBzLmM6IChnc3RfY2Fwc19nZXRfdHlwZSksIChnc3Rfc3RhdGljX2NhcHNfZ2V0X3R5cGUpOgorCSAgKiBnc3QvZ3N0Y2hpbGRwcm94eS5jOiAoZ3N0X2NoaWxkX3Byb3h5X2dldF90eXBlKToKKwkgICogZ3N0L2dzdGNsb2NrLmM6IChnc3RfY2xvY2tfZ2V0X3R5cGUpOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfZ2V0X3R5cGUpLAorCSAgKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzogKGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3R5cGUpOgorCSAgKiBnc3QvZ3N0aW5kZXhmYWN0b3J5LmM6IChnc3RfaW5kZXhfZmFjdG9yeV9nZXRfdHlwZSk6CisJICAqIGdzdC9nc3RtaW5pb2JqZWN0LmM6IChnc3RfbWluaV9vYmplY3RfZ2V0X3R5cGUpOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2dldF90eXBlKToKKwkgICogZ3N0L2dzdHNlZ21lbnQuYzogKGdzdF9zZWdtZW50X2dldF90eXBlKToKKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOiAoZ3N0X3N0cnVjdHVyZV9nZXRfdHlwZSk6CisJICAqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOiAoZ3N0X3N5c3RlbV9jbG9ja19nZXRfdHlwZSk6CisJICAqIGdzdC9nc3R0YXNrLmM6IChnc3RfdGFza19nZXRfdHlwZSksIChnc3RfdGFza19qb2luKToKKwkgICogZ3N0L2dzdHZhbHVlLmM6CisJICBIZWxwIGNvbXBpbGVyIHdpdGggdHlwZSByZWdpc3RyYXRpb24uCisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9oYW5kbGVfc2lua19ldmVudCk6CisJICBTbWFsbCBkb2MgdXBkYXRlLgorCisyMDA2LTAyLTI3IDIwOjAxOjUzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOiBXaGVuIHdlIGdldCBhbiBFT1MgZXZlbnQgYW5kIGhhdmUgbm90IGZvdW5kIGEgdHlwZSB5ZXQgKG1vc3QgbGlrZWx5IGJlY2F1c2Ugd2UuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9oYW5kbGVfZXZlbnQpOgorCSAgV2hlbiB3ZSBnZXQgYW4gRU9TIGV2ZW50IGFuZCBoYXZlIG5vdCBmb3VuZCBhIHR5cGUgeWV0CisJICAobW9zdCBsaWtlbHkgYmVjYXVzZSB3ZSBoYWQgbm90IHlldCBhY2N1bXVsYXRlZAorCSAgVFlQRV9GSU5EX01JTl9TSVpFIG9mIGRhdGEgeWV0KSwgdHJ5IHRvIGRldGVybWluZSB0aGUKKwkgIHR5cGUgZ2l2ZW4gdGhlIGRhdGEgd2UgaGF2ZSBzbyBmYXIuIEZpeGVzIHR5cGVmaW5kaW5nCisJICBmb3IgdmVyeSBzaG9ydCBzdHJlYW1zIGFnYWluLCBtb3N0IG5vdGFibHkgcXVpY2t0aW1lCisJICByZWRpcmVjdGlvbnMgYXMgdXNlZCBvbiBBcHBsZSdzIHRyYWlsZXIgc2l0ZSAoIzMzMTcwMSkuCisKKzIwMDYtMDItMjcgMTk6NDU6MzEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzogVHJ5IHR5cGVmaW5kaW5nIGZhY3RvcmllcyB3aXRoIHRoZSBoaWdoZXN0IHJhbmsgZmlyc3QuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOiAodHlwZV9maW5kX2ZhY3RvcnlfcmFua19jbXApLAorCSAgKGdzdF90eXBlX2ZpbmRfaGVscGVyKToKKwkgIFRyeSB0eXBlZmluZGluZyBmYWN0b3JpZXMgd2l0aCB0aGUgaGlnaGVzdCByYW5rIGZpcnN0LgorCisyMDA2LTAyLTI3IDE5OjE5OjQwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBBZGQgc2VjdGlvbiBmb3IgdHlwZWZpbmQgaGVscGVyIGFuZCBhZGQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIG9sZCBhbmQgdGhlIG5ldyBmdW5jdGlvbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtZG9jcy5zZ21sOgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6CisJICBBZGQgc2VjdGlvbiBmb3IgdHlwZWZpbmQgaGVscGVyIGFuZCBhZGQgZG9jdW1lbnRhdGlvbgorCSAgZm9yIHRoZSBvbGQgYW5kIHRoZSBuZXcgZnVuY3Rpb24uCisKKzIwMDYtMDItMjcgMTg6NDM6MjYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuKjogTmV3IEFQSTogZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2J1ZmZlcigpICgjMzMyNzIzKS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6IChidWZfaGVscGVyX2ZpbmRfcGVlayksCisJICAoYnVmX2hlbHBlcl9maW5kX3N1Z2dlc3QpLCAodHlwZV9maW5kX2ZhY3RvcnlfcmFua19jbXApLAorCSAgKGdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9idWZmZXIpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmg6CisJICBOZXcgQVBJOiBnc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfYnVmZmVyKCkgKCMzMzI3MjMpLgorCisyMDA2LTAyLTI3IDE1OjQzOjEwICswMDAwICBMb8OvYyBNaW5pZXIgPGxvb2wuZ25vbWVAdmlhLmVjcC5mcj4KKworCSAgUGF0Y2ggZnJvbSBMb8OvYyBNaW5pZXIgdG8gcHJldmVudCBDVlMgZGlyZWN0b3JpZXMgZ2V0dGluZyBkaXN0ZWQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgKiBkb2NzL01ha2VmaWxlLmFtOgorCSAgKiBkb2NzL3NsaWRlcy9NYWtlZmlsZS5hbToKKwkgIFBhdGNoIGZyb20gTG/Dr2MgTWluaWVyIHRvIHByZXZlbnQgQ1ZTIGRpcmVjdG9yaWVzIGdldHRpbmcgZGlzdGVkLgorCisyMDA2LTAyLTI3IDEyOjEwOjQ3ICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+CisKKwkqIGdzdHJlYW1lci5zcGVjLmluOgorCSAgdXBkYXRlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHVwZGF0ZQorCisyMDA2LTAyLTI3IDExOjAxOjA2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0Y2Fwcy5jOiBVc2UgdGhlIFJFRkNPVU5USU5HIGNhdGVnb3J5IGZvciBjYXBzIHJlZmNvdW50aW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RjYXBzLmM6IChnc3RfY2Fwc19yZWYpLCAoZ3N0X2NhcHNfdW5yZWYpOgorCSAgVXNlIHRoZSBSRUZDT1VOVElORyBjYXRlZ29yeSBmb3IgY2FwcyByZWZjb3VudGluZy4KKworMjAwNi0wMi0yNiAxOToyMDo1MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogVGhpcyBzaG91bGQgYmUgMCBub3QgR1NUX0NMT0NLX1RJTUVfTk9ORSAoc2VlICMzMzE3MDEpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6IChzdG9wX3R5cGVmaW5kaW5nKToKKwkgIFRoaXMgc2hvdWxkIGJlIDAgbm90IEdTVF9DTE9DS19USU1FX05PTkUgKHNlZSAjMzMxNzAxKS4KKworMjAwNi0wMi0yNiAxNDo0MjoyOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogVXNlIGdzdF9wYWRfY2hlY2tfcHVsbF9yYW5nZSgpIGJlZm9yZSBfYWN0aXZhdGVfcHVsbCgpIHRvIGF2b2lkIHVubmVjZXNzYXJ5IG9wLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfYWN0aXZhdGUpOgorCSAgVXNlIGdzdF9wYWRfY2hlY2tfcHVsbF9yYW5nZSgpIGJlZm9yZSBfYWN0aXZhdGVfcHVsbCgpCisJICB0byBhdm9pZCB1bm5lY2Vzc2FyeSBvcGVuL2Nsb3NlIChzZWUgIzMzMTY5MCkuCisKKzIwMDYtMDItMjQgMTY6NTQ6MjcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3R1dGlscy5jOiBEb2NzIGVuaGFuY2VtZW50OiBtYWtlIGl0IGNyeXN0YWwgY2xlYXIgd2hhdCB0aGUgZ3N0X3BhZF9hZGRfKl9wcm9iZSgpIGNhbGxiYWNrcyBzaG91bGQgbG9vayBsaWtlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R1dGlscy5jOgorCSAgRG9jcyBlbmhhbmNlbWVudDogbWFrZSBpdCBjcnlzdGFsIGNsZWFyIHdoYXQgdGhlCisJICBnc3RfcGFkX2FkZF8qX3Byb2JlKCkgY2FsbGJhY2tzIHNob3VsZCBsb29rIGxpa2UuCisKKzIwMDYtMDItMjQgMTA6NTc6NDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBEb2N1bWVudCBob3cgYXBwbGljYXRpb25zIGNhbiBzdG9wIHJlY29yZGluZyBmcm9tIGxpdmUgc291cmNlcyAoc2VlICMzMzA5OTYpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgRG9jdW1lbnQgaG93IGFwcGxpY2F0aW9ucyBjYW4gc3RvcCByZWNvcmRpbmcgZnJvbQorCSAgbGl2ZSBzb3VyY2VzIChzZWUgIzMzMDk5NikuCisKKzIwMDYtMDItMjMgMTg6MDY6MzEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIElnbm9yZSBtb3JlIHN0dWZmLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L3RtcGwvLmN2c2lnbm9yZToKKwkgICogZG9jcy9wbHVnaW5zL3RtcGwvLmN2c2lnbm9yZToKKwkgICogdGVzdHMvY2hlY2svZ3N0Ly5jdnNpZ25vcmU6CisJICAqIHRlc3RzL2NoZWNrL2xpYnMvLmN2c2lnbm9yZToKKwkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzLy5jdnNpZ25vcmU6CisJICBJZ25vcmUgbW9yZSBzdHVmZi4KKworMjAwNi0wMi0yMyAxNzozOToyMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgdGVzdHMvY2hlY2svOiAuLi4gYW5kIGFkZCBzb21lIHRlc3RzIGZvciB0aGUgYmFzZSBzb3VyY2UgRU9TIHN0dWZmLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSAgKiB0ZXN0cy9jaGVjay9saWJzL2Jhc2VzcmMuYzogKGVvc19ldmVudF9jb3VudGVyKSwKKwkgIChiYXNlc3JjX2Vvc19ldmVudHNfcHVsbCksIChiYXNlc3JjX2Vvc19ldmVudHNfcHVzaCksCisJICAoYmFzZXNyY19lb3NfZXZlbnRzX3B1c2hfbGl2ZV9vcCksIChiYXNlc3JjX2Vvc19ldmVudHNfcHVsbF9saXZlX29wKSwKKwkgIChnc3RfYmFzZXNyY19zdWl0ZSksIChtYWluKToKKwkgIC4uLiBhbmQgYWRkIHNvbWUgdGVzdHMgZm9yIHRoZSBiYXNlIHNvdXJjZSBFT1Mgc3R1ZmYuCisKKzIwMDYtMDItMjMgMTY6NTY6MTggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHRlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jOiBUZXN0IGNhc2Ugb3JpZ2luYWxseSBzaG93ZWQgdGhlIHByb2JsZW0gZml4ZWQgYmVsb3csIGJ1dCB3YXMgdGhlbiBhbWVuZGVkLiBBZGQgY2hlY2tzIGJhYy4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jOiAodGVzdF9idWZmZXJfcHJvYmVfbl90aW1lcyk6CisJICBUZXN0IGNhc2Ugb3JpZ2luYWxseSBzaG93ZWQgdGhlIHByb2JsZW0gZml4ZWQgYmVsb3csCisJICBidXQgd2FzIHRoZW4gYW1lbmRlZC4gQWRkIGNoZWNrcyBiYWNrIGF0IHRoZSBwbGFjZQorCSAgd2hlcmUgdGhleSB1c2VkIHRvIGJlLgorCisyMDA2LTAyLTIzIDE2OjI0OjM2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuKjogRG9uJ3QgdW5jb25kaXRpb25hbGx5IHNlbmQgRU9TIHdoZW4gZ29pbmcgZnJvbSBQQVVTRUQgdG8KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19jbGFzc19pbml0KSwKKwkgIChnc3RfYmFzZV9zcmNfaW5pdCksIChnc3RfYmFzZV9zcmNfbG9vcCksCisJICAoZ3N0X2Jhc2Vfc3JjX2FjdGl2YXRlX3B1c2gpLCAoZ3N0X2Jhc2Vfc3JjX2FjdGl2YXRlX3B1bGwpLAorCSAgKGdzdF9iYXNlX3NyY19jaGFuZ2Vfc3RhdGUpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkgIERvbid0IHVuY29uZGl0aW9uYWxseSBzZW5kIEVPUyB3aGVuIGdvaW5nIGZyb20gUEFVU0VEIHRvCisJICBSRUFEWSBzdGF0ZSwgZXNwLiBtYWtlIHN1cmUgd2UgZG9uJ3Qgc2VuZCB0d28gRU9TIGV2ZW50cworCSAgaW4gc29tZSBjYXNlcyAoZS5nLiBvbmUgd2hlbiByZWFjaGluZyBFT1MgYW5kIG9uZSB3aGVuCisJICBnb2luZyBmcm9tIFBBVVNFRCB0byBSRUFEWSkuIEFsc28sIHdlIGRvbid0IHdhbnQgdG8gc2VuZAorCSAgRU9TIGV2ZW50cyB3aGVuIG9wZXJhdGluZyBpbiBwdWxsIG1vZGUuIEhvd2V2ZXIsIHdlIGRvCisJICB3YW50IHRvIHNlbmQgYW4gRU9TIGV2ZW50IHdoZW4gc2h1dHRpbmcgZG93biBhIGxpdmUKKwkgIHNvdXJjZSBleHBsaWNpdGx5LCBmb3IgZXhhbXBsZSAoZml4ZXMgIzMzMDk5NikuCisKKzIwMDYtMDItMjMgMTA6MjQ6MTMgKzAwMDAgIFJlbmNoaSBSYWp1IDxyZW5jaGlAZ21haWwuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogVXBkYXRlIHNyYy0+cmVhZF9wb3NpdGlvbiBhZnRlciBhIHNlZWsgd2hlbiBub3QgdXNpbmcgbW1hcC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogKGdzdF9maWxlX3NyY19jcmVhdGVfcmVhZCk6CisJICBVcGRhdGUgc3JjLT5yZWFkX3Bvc2l0aW9uIGFmdGVyIGEgc2VlayB3aGVuIG5vdCB1c2luZyBtbWFwLgorCSAgRml4ZXMgIzMzMjI3NywgcGF0Y2ggYnk6IFJlbmNoaSBSYWp1IDxyZW5jaGkgZ21haWwgY29tPgorCisyMDA2LTAyLTIwIDIzOjM0OjQwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZ3N0LzogTWFrZSB0aGluZ3Mgd29yayB3aXRoIC0tZGlzYWJsZS1wYXJzZSBhcyB0aGV5IGRvIHdpdGgKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvTWFrZWZpbGUuYW06CisJICAqIGdzdC9nc3RwYXJzZS5oOgorCSAgKiBnc3QvZ3N0dXRpbHMuYzoKKwkgICogZ3N0L2dzdHV0aWxzLmg6CisJICBNYWtlIHRoaW5ncyB3b3JrIHdpdGggLS1kaXNhYmxlLXBhcnNlIGFzIHRoZXkgZG8gd2l0aAorCSAgLS1kaXNhYmxlLWxvYWQtc2F2ZSAtIHRoZSBzeW1ib2xzIGludm9sdmVkIGRpc2FwcGVhciwgYnV0IHRoZQorCSAgaGVhZGVyIGlzIHN0aWxsIGluc3RhbGxlZCBhbmQgR1NUX0RJU0FCTEVfUEFSU0UgaXMgaW5jbHVkZWQgdmlhCisJICBnc3Rjb25maWcuaAorCisyMDA2LTAyLTIwIDE2OjA3OjQyICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IEZpeCBhIHN0dXBpZCBidWcuIEkgd2FzIHN1cmUgaSBjb21waWxlZCB0aGF0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9jaGFuZ2Vfc3RhdGUpOiBGaXggYSBzdHVwaWQgYnVnLiBJIHdhcworCSAgc3VyZSBpIGNvbXBpbGVkIHRoYXQuCisJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMjAwNi0wMi0yMCAxNTowNzozMyArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+CisKKwkgIGdzdC86IE1ha2UgdGhvc2UgZnVuY3Rpb24gYWN0IG9uIHRoZSBnaG9zdHBhZCB0YXJnZXQgd2hlbiBpdCdzIGEgZ2hvc3RwYWQuIChDbG9zZXMgIzMzMTcyNykKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3NldF9ibG9ja2VkX2FzeW5jKToKKwkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfcGFkX2FkZF9kYXRhX3Byb2JlKSwKKwkgIChnc3RfcGFkX2FkZF9ldmVudF9wcm9iZSksIChnc3RfcGFkX2FkZF9idWZmZXJfcHJvYmUpLAorCSAgKGdzdF9wYWRfcmVtb3ZlX2RhdGFfcHJvYmUpLCAoZ3N0X3BhZF9yZW1vdmVfZXZlbnRfcHJvYmUpLAorCSAgKGdzdF9wYWRfcmVtb3ZlX2J1ZmZlcl9wcm9iZSk6IE1ha2UgdGhvc2UgZnVuY3Rpb24gYWN0IG9uIHRoZQorCSAgZ2hvc3RwYWQgdGFyZ2V0IHdoZW4gaXQncyBhIGdob3N0cGFkLiAoQ2xvc2VzICMzMzE3MjcpCisJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMjAwNi0wMi0yMCAxNTowMToxNCArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBNYWtlIGJhc2V0cmFuc2Zvcm0gcmV1c2FibGUuIChDbG9zZXMgIzMzMTg5OCkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fY2hhbmdlX3N0YXRlKTogTWFrZSBiYXNldHJhbnNmb3JtIHJldXNhYmxlLgorCSAgKENsb3NlcyAjMzMxODk4KQorCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzIwMDYtMDItMjAgMTI6MjY6NTAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBkb2NzL3JhbmRvbS9yZWxlYXNlOiBNb3ZlIHRoZSBjdXJyZW50IGRvY3VtZW50YXRpb24gb2YgaG93IHRvIGRvIGEgcmVsZWFzZSB0byB0aGUgdG9wIG9mIHRoZSBmaWxlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcmFuZG9tL3JlbGVhc2U6CisJICBNb3ZlIHRoZSBjdXJyZW50IGRvY3VtZW50YXRpb24gb2YgaG93IHRvIGRvIGEgcmVsZWFzZSB0byB0aGUgdG9wCisJICBvZiB0aGUgZmlsZS4KKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9jbGFzc19pbml0KSwKKwkgIChnc3RfYmluX2hhbmRsZV9tZXNzYWdlX2Z1bmMpOgorCSAgQWxsb3cgbXVsdGlwbGUgc3RhdGUtcmVjYWxjdWxhdGlvbiB0aHJlYWRzLiAoQ2xvc2VzICMzMjg4NzMpCisKKzIwMDYtMDItMTkgMTI6MjU6MDEgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgorCisJICBnc3QvZ3N0aW5mby5oOiBBZGQgR1NUX1NUUl9OVUxMIHRvIHRoZSBzZWNvbmQgc3RyaW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA2LTAyLTE5ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+CisJICAqIGdzdC9nc3RpbmZvLmg6IEFkZCBHU1RfU1RSX05VTEwgdG8gdGhlIHNlY29uZCBzdHJpbmcuCisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uKSwKKwkgIChnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiksIChnc3RfcGFkX3NldF9xdWVyeV90eXBlX2Z1bmN0aW9uKSwKKwkgIChnc3RfcGFkX3NldF9nZXRjYXBzX2Z1bmN0aW9uKTogR1NUX0RFQlVHX1BBRF9OQU1FIGV2YWx1YXRlcyB0bworCSAgMiBzdHJpbmdzLiBZb3UgY2FuJ3QgdXNlIHRoZSBTVFJfTlVMTCBtYWNybyBvbiB0aGF0LgorCisyMDA2LTAyLTE5IDEyOjAwOjM4ICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+CisKKwkgIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfc2V0X2dldGNhcHNfZnVuY3Rpb24pCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24pLAorCSAgKGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uKSwgKGdzdF9wYWRfc2V0X3F1ZXJ5X3R5cGVfZnVuY3Rpb24pLAorCSAgKGdzdF9wYWRfc2V0X2dldGNhcHNfZnVuY3Rpb24pCisJICAqIGdzdC9wYXJzZS9ncmFtbWFyLnk6IChnc3RfcGFyc2VfZm91bmRfcGFkKSwgKGdzdF9wYXJzZV9wZXJmb3JtX2RlbGF5ZWRfbGluaykKKwkgIEZpeGVkIE5VTEwgcG9pbnRlciB1c2VkIGluIEdTVF9DQVRfREVCVUcgdXNpbmcgR1NUX1NUUl9OVUxMIG1hY3JvCisJICBTbyBub3csIHdlIGNhbiB1c2UgLS1nc3QtZGVidWctbGV2ZWw9NSBvbiBXaW5kb3dzCisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3Rjb250cm9sbGVyLmRlZjoKKwkgIEFkZGVkIGV4cG9ydCBvZiBnc3RfY29udHJvbGxlcl9pbml0CisJICAqIHdpbjMyL3ZzNi9saWJnc3Rjb250cm9sbGVyLmRzcDoKKwkgIEZpeGVkIFJlbGVhc2UgcG9zdCBidWlsZCBjb25maWd1cmF0aW9uCisKKzIwMDYtMDItMTcgMTU6MjU6MzkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHRlc3RzL2NoZWNrL2dzdC9nc3RxdWVyeS5jOiBBZGRlZCBhbm90aGVyIGNoZWNrLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RxdWVyeS5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgQWRkZWQgYW5vdGhlciBjaGVjay4KKworMjAwNi0wMi0xNSAxMjoxNzo1MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogV2UgY2FuIGRvIHBlZWtzIGF0IG5vbi16ZXJvIG9mZnNldHMsIGFzIGxvbmcgYXMgdGhleSBmYWxsIHdpdGhpbiB0aGUgYnVmZmVyIHdlLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogKGZpbmRfcGVlayk6CisJICBXZSBjYW4gZG8gcGVla3MgYXQgbm9uLXplcm8gb2Zmc2V0cywgYXMgbG9uZyBhcyB0aGV5CisJICBmYWxsIHdpdGhpbiB0aGUgYnVmZmVyIHdlIGhhdmUuCisKKzIwMDYtMDItMTUgMDE6MDI6MTEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICB0ZXN0cy9jaGVjay86IEFkZCB0ZXN0c3VpdGUgZm9yIHBhcnNlIGxhdW5jaCBzeW50YXgKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOiAoc2V0dXBfcGlwZWxpbmUpLAorCSAgKGV4cGVjdGVkX2ZhaWxfcGlwZSksIChjaGVja19waXBlbGluZV9ydW5zKSwgKEdTVF9TVEFSVF9URVNUKSwKKwkgIChwYXJzZV9zdWl0ZSksIChtYWluKToKKwkgIEFkZCB0ZXN0c3VpdGUgZm9yIHBhcnNlIGxhdW5jaCBzeW50YXgKKworMjAwNi0wMi0xNCAyMDo1NzozMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogV2hlbiB0eXBlZmluZGluZyBpcyB1bnN1Y2Nlc3NmdWwgaW4gdGhlIGNoYWluIGZ1bmN0aW9uLCBkb24ndCBlcnJvciBvdXQgaW1tZWRpLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfY2hhaW4pOgorCSAgV2hlbiB0eXBlZmluZGluZyBpcyB1bnN1Y2Nlc3NmdWwgaW4gdGhlIGNoYWluIGZ1bmN0aW9uLCBkb24ndAorCSAgZXJyb3Igb3V0IGltbWVkaWF0ZWx5LiBPbmx5IGVycm9yIG91dCB3aXRoIE5PX0NBUFNfRk9VTkQgaWYKKwkgIHRoZSBhbW91bnQgb2YgZGF0YSBpcyBhdCBsZWFzdCBNQVhfVFlQRUZJTkRfU0laRSBieXRlcywKKwkgIG90aGVyd2lzZSBzaW1wbHkgd2FpdCBmb3IgbW9yZSBkYXRhIHNvIHdlIGNhbiB0cnkgdHlwZWZpbmRpbmcKKwkgIGFnYWluIHdpdGggbW9yZSBkYXRhIGxhdGVyLiBBbHNvLCBkb24ndCBhdHRlbXB0IHRvIHR5cGVmaW5kCisJICBpZiB3ZSBoYXZlIGxlc3MgdGhhbiBNSU5fVFlQRUZJTkRfU0laRSBkYXRhIGF2YWlsYWJsZS4gT3ZlcmFsbCwKKwkgIHRoaXMgc2hvdWxkIGltcHJvdmUgdHlwZWZpbmRpbmcgZnJvbSBuZXR3b3JrIHNvdXJjZXMgd2hlcmUgdGhlCisJICBzaXplIG9mIHRoZSBmaXJzdCBidWZmZXIgY2FuIGJlIHNvbWV3aGF0IHJhbmRvbS4KKworMjAwNi0wMi0xNCAxODoyNjoxOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgRml4IHBhZHRlbXBsYXRlIGRvY3MsIGZpeGVzICMzMjg4MDUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdHBhZHRlbXBsYXRlLmM6CisJICAqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5oOgorCSAgRml4IHBhZHRlbXBsYXRlIGRvY3MsIGZpeGVzICMzMjg4MDUuCisKKzIwMDYtMDItMTQgMTc6MjU6MTEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHRvb2xzL2dzdC1sYXVuY2guYzogTk9fUFJFUk9MTCBpcyBub3QgYW4gRVJST1Igc28gZG9uJ3Qgc2VuZCBjb25mdXNpbmcgbWVzc2FnZXMgdG8gdGhlIHVzZXIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAobWFpbik6CisJICBOT19QUkVST0xMIGlzIG5vdCBhbiBFUlJPUiBzbyBkb24ndCBzZW5kIGNvbmZ1c2luZyBtZXNzYWdlcworCSAgdG8gdGhlIHVzZXIuCisKKzIwMDYtMDItMTQgMTY6MTU6MDUgKzAwMDAgIFRvcnN0ZW4gU2Nob2VuZmVsZCA8a2FmZmVldGlzY2hAZ214LmRlPgorCisJICBnc3QvZ3N0cmVnaXN0cnkuYzogUHJvdGVjdCBkZWZhdWx0IHJlZ2lzdHJ5IHdpdGggbG9jayBhbmQgcmVmL3NpbmsgaXQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6IChnc3RfcmVnaXN0cnlfZ2V0X2RlZmF1bHQpLAorCSAgKF9nc3RfcmVnaXN0cnlfY2xlYW51cCk6CisJICBQcm90ZWN0IGRlZmF1bHQgcmVnaXN0cnkgd2l0aCBsb2NrIGFuZCByZWYvc2luayBpdC4KKwkgIEZpeGVzICMzMjQ4MTgsIHBhdGNoIGJ5IFRvcnN0ZW4gU2Nob2VuZmVsZC4KKworMjAwNi0wMi0xNCAxMzowNzoxMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgRG9jcyBmaXhlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YnVmZmVyLmM6CisJICAqIGdzdC9nc3RxdWVyeS5jOiAoZ3N0X3F1ZXJ5X2xpc3RfYWRkX2Zvcm1hdCksCisJICAoZ3N0X3F1ZXJ5X3NldF9mb3JtYXRzdiksIChnc3RfcXVlcnlfcGFyc2VfZm9ybWF0c19sZW5ndGgpLAorCSAgKGdzdF9xdWVyeV9wYXJzZV9mb3JtYXRzX250aCk6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZ2V0X3N5bmNfdGltZXMpOgorCSAgRG9jcyBmaXhlcy4KKworMjAwNi0wMi0xNCAxMjowNzoxNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogUmV3b3JrZWQgcXVlcnkgZG9jcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgUmV3b3JrZWQgcXVlcnkgZG9jcy4KKwkgICogZ3N0L2dzdHF1ZXJ5LmM6IChnc3RfcXVlcnlfbmV3X2Zvcm1hdHMpLAorCSAgKGdzdF9xdWVyeV9saXN0X2FkZF9mb3JtYXQpLCAoZ3N0X3F1ZXJ5X3NldF9mb3JtYXRzKSwKKwkgIChnc3RfcXVlcnlfc2V0X2Zvcm1hdHN2KSwgKGdzdF9xdWVyeV9wYXJzZV9mb3JtYXRzX2xlbmd0aCksCisJICAoZ3N0X3F1ZXJ5X3BhcnNlX2Zvcm1hdHNfbnRoKToKKwkgICogZ3N0L2dzdHF1ZXJ5Lmg6CisJICBGbGVzaCBvdXQgZm9ybWF0cyBxdWVyeSwgYWRkZWQgc29tZSBuZXcgbWV0aG9kcy4KKwkgIEZpeCBwYXJ0IG9mICMzMjQzOTguCisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RxdWVyeS5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0cXVlcnlfc3VpdGUpOgorCSAgQWRkZWQgcXVlcnkgY3JlYXRpb24gdGVzdHMuCisKKzIwMDYtMDItMTQgMTE6Mzg6NTAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBnc3QvZ3N0cGFkLmM6IEFkZCBhIGRlZmF1bHQgZml4YXRpb24gZm9yIGZyYWN0aW9uIGxpc3RzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKGZpeGF0ZV92YWx1ZSk6CisJICBBZGQgYSBkZWZhdWx0IGZpeGF0aW9uIGZvciBmcmFjdGlvbiBsaXN0cy4KKworMjAwNi0wMi0xMyAxNzowMzoyMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHRhc2suKjogRGV0ZWN0IGFuZCB3YXJuIGZvciBvYnZpb3VzIGRlYWRsb2Nrcy4gZml4ZXMgIzMyMDM0MAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R0YXNrLmM6IChnc3RfdGFza19pbml0KSwgKGdzdF90YXNrX2Z1bmMpLAorCSAgKGdzdF90YXNrX3NldF9sb2NrKSwgKGdzdF90YXNrX3N0YXJ0KSwgKGdzdF90YXNrX3BhdXNlKSwKKwkgIChnc3RfdGFza19qb2luKToKKwkgICogZ3N0L2dzdHRhc2suaDoKKwkgIERldGVjdCBhbmQgd2FybiBmb3Igb2J2aW91cyBkZWFkbG9ja3MuIGZpeGVzICMzMjAzNDAKKwkgIEZpeCBlcnJvciBjYXNlIHdoZXJlIGxvY2sgd2FzIG5vdCByZWxlYXNlZC4KKwkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R0YXNrLmM6ICh0YXNrX2Z1bmMyKSwgKEdTVF9TVEFSVF9URVNUKSwKKwkgICh0YXNrX2Z1bmMpLCAoZ3N0X2VsZW1lbnRfc3VpdGUpLCAobWFpbik6CisJICBBZGQgdGFzayBjaGVjay4KKworMjAwNi0wMi0xMyAxNDowMDozMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSogQ2hhbmdlTG9nOgorCSAgRm9yZ290IGNoYW5nZWxvZworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBGb3Jnb3QgY2hhbmdlbG9nCisKKzIwMDYtMDItMTMgMTM6NTc6MjkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIEFkZCBuZXcgZnVuY3Rpb25zIHRvIGRvY3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdGJ1cy5jOgorCSAgQWRkIG5ldyBmdW5jdGlvbnMgdG8gZG9jcy4KKworMjAwNi0wMi0xMyAxMTo1Mjo0MyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDogVXBkYXRlZCBUT0RPIGxpc3QsIGJhc2VzcmMgc3VwcG9ydHMgc2Vla2luZyB0byBub24tYnl0ZXMgZm9ybWF0cy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgorCSAgVXBkYXRlZCBUT0RPIGxpc3QsIGJhc2VzcmMgc3VwcG9ydHMgc2Vla2luZyB0byBub24tYnl0ZXMKKwkgIGZvcm1hdHMuCisJICAqIGRvY3MvZGVzaWduL3BhcnQtZWxlbWVudC1zaW5rLnR4dDoKKwkgIFVwZGF0ZSBkb2NzLgorCSAgKiBnc3QvZ3N0YmluLmM6IChiaW5fcmVwbGFjZV9tZXNzYWdlKSwKKwkgIChnc3RfYmluX2hhbmRsZV9tZXNzYWdlX2Z1bmMpOgorCSAgKiBnc3QvZ3N0YnVzLmM6IChnc3RfYnVzX3Bvc3QpLCAoZ3N0X2J1c19wb3ApOgorCSAgKiBnc3QvZ3N0ZXZlbnQuYzogKGdzdF9ldmVudF9maW5hbGl6ZSk6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfZXZlbnRfZGVmYXVsdF9kaXNwYXRjaCksCisJICAoZ3N0X3BhZF9zZW5kX2V2ZW50KToKKwkgIFVzZSBzaGlueSBuZXcgX1RZUEVfTkFNRSBtYWNyb3MuCisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2dldF9yYW5nZSk6CisJICBNb3ZlIGRlYnVnIHN0YXRlbWVudCB1cC4KKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUpOgorCSAgQWRkIHNvbWUgZGVidWdnaW5nLgorCisyMDA2LTAyLTEzIDExOjE5OjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBOZXcgQVBJOiBhZGQgR1NUX01FU1NBR0VfVFlQRV9OQU1FIGFuZCBHU1RfUVVFUllfVFlQRV9OQU1FIG1hY3JvcyAoIzMzMDkwNikuIEFsc28sIGRvY3VtZW50IHRoZSBhbHJlYWR5IGV4aXN0aW5nCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdG1lc3NhZ2UuaDoKKwkgICogZ3N0L2dzdHF1ZXJ5Lmg6CisJICBOZXcgQVBJOiBhZGQgR1NUX01FU1NBR0VfVFlQRV9OQU1FIGFuZCBHU1RfUVVFUllfVFlQRV9OQU1FCisJICBtYWNyb3MgKCMzMzA5MDYpLiBBbHNvLCBkb2N1bWVudCB0aGUgYWxyZWFkeSBleGlzdGluZworCSAgR1NUX1FVRVJZX1RZUEUgbWFjcm8uCisKKzIwMDYtMDItMTMgMTA6NTQ6MDMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHRlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jOiBPbmx5IGV2ZW50cyB1cCB0byB0aGUgcGlwZWxpbmUgRU9TIGFyZSBjb3VudGVkLCB0aGVyZSBhcmUgc29tZSBtb3JlIHdoZW4gZ29pbmcgdG8gTlVMTCBjdS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jOiAoZGF0YV9wcm9iZSksIChidWZmZXJfcHJvYmUpLAorCSAgKGV2ZW50X3Byb2JlKSwgKEdTVF9TVEFSVF9URVNUKToKKwkgIE9ubHkgZXZlbnRzIHVwIHRvIHRoZSBwaXBlbGluZSBFT1MgYXJlIGNvdW50ZWQsIHRoZXJlIGFyZQorCSAgc29tZSBtb3JlIHdoZW4gZ29pbmcgdG8gTlVMTCBjdXJyZW50bHkgd2hpY2ggd2UgZG9uJ3QgY2FyZQorCSAgYWJvdXQgZm9yIG5vdy4KKworMjAwNi0wMi0xMyAwOTo1OTowMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHBhZC5jOiBDb3JyZWN0bHkgY2hlY2sgZmx1c2hpbmcgYW5kIGVtaXQgcHJvYmVzLiBmaXhlcyAjMzMwMTI1CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9zZW5kX2V2ZW50KToKKwkgIENvcnJlY3RseSBjaGVjayBmbHVzaGluZyBhbmQgZW1pdCBwcm9iZXMuIGZpeGVzICMzMzAxMjUKKworMjAwNi0wMi0xMiAxMzoxMTo1MyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkgIHJldmVydCB3cm9uZyBjb21taXQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmV2ZXJ0IHdyb25nIGNvbW1pdAorCisyMDA2LTAyLTEwIDE2OjA0OjU5ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGdzdC9nc3RidXMuYyAoZ3N0X2J1c19jbGFzc19pbml0KTogRGVjbGFyZSBvdXIgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNi0wMi0xMCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdGJ1cy5jIChnc3RfYnVzX2NsYXNzX2luaXQpOiBEZWNsYXJlIG91ciBwcml2YXRlIGRhdGEKKwkgIHN0cnVjdHVyZS4KKwkgIChnc3RfYnVzX2luaXQpOiBDYWNoZSB0aGUgbG9jYXRpb24gb2YgdGhlIHByaXZhdGUgZGF0YSBpbiB0aGUKKwkgIGluc3RhbmNlIHN0cnVjdHVyZS4KKwkgIChnc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24pCisJICAoZ3N0X2J1c19kaXNhYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbik6IEltcGxlbWVudCBuZXcgcHVibGljCisJICBmdW5jdGlvbnMuCisJICAoZ3N0X2J1c19wb3N0KTogRW1pdCB0aGUgc3luYy1tZXNzYWdlIHNpZ25hbCBpZiB0aGUgdXNlciBhc2tlZCBmb3IKKwkgIGl0LiBGaXhlcyAjMzMwNjg0LgorCSAgKiBnc3QvZ3N0YnVzLmggKEdzdEJ1cyk6IFVzZSBhIHBhZGRpbmcgcG9pbnRlciB0byBjYWNoZSB0aGUKKwkgIGxvY2F0aW9uIG9mIHRoZSBidXMtcHJpdmF0ZSBzdHJ1Y3R1dXJlLgorCSAgKGdzdF9idXNfZW5hYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbikKKwkgIChnc3RfYnVzX2Rpc2FibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uKTogTmV3IHB1YmxpYyBmdW5jdGlvbnMuCisKKzIwMDYtMDItMDkgMjM6NDA6NDMgKzAwMDAgIFZpbmNlbnQgVG9ycmkgPHZ0b3JyaUB1bml2LWV2cnkuZnI+CisKKwkgIGRvY3MvcHdnL2J1aWxkaW5nLWJvaWxlci54bWw6CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9wd2cvYnVpbGRpbmctYm9pbGVyLnhtbDoKKwkgIFBXRyBwYXRjaCBmcm9tICMzMjY4MDAgKFBhdGNoIGJ5IFZpbmNlbnQgVG9ycmkpCisKKzIwMDYtMDItMDkgMTg6MzA6NTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkqIENoYW5nZUxvZzoKKwkqIGRvY3MvZGVzaWduL01ha2VmaWxlLmFtOgorCSAgQ2hhbmdlTG9nIHN1cmdlcnkgYW5kIGFkZCBtaXNzaW5nIG5ldyBmaWxlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIENoYW5nZUxvZyBzdXJnZXJ5IGFuZCBhZGQgbWlzc2luZyBuZXcgZmlsZQorCisyMDA2LTAyLTA5IDE4OjI4OjMzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBkb2NzL2Rlc2lnbi9NYWtlZmlsZS5hbQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgICogZG9jcy9NYWtlZmlsZS5hbToKKwkgICogZG9jcy9kZXNpZ24vTWFrZWZpbGUuYW0KKwkgIERpc3QgZGVzaWduIGRvY3MuCisKKzIwMDYtMDItMDggMTc6MzQ6NDMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBjb25maWd1cmUuYWM6IGJhY2sgdG8gQ1ZTCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgYmFjayB0byBDVlMKKworPT09IHJlbGVhc2UgMC4xMC4zID09PQorCisyMDA2LTAyLTA4IDE3OjMxOjM0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgY29uZmlndXJlLmFjOiByZWxlYXNpbmcgMC4xMC4zLCAiTGlrZSBhIHZpcmdpbiIKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgPT09IHJlbGVhc2UgMC4xMC4zID09PQorCSAgMjAwNi0wMi0wOCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgIHJlbGVhc2luZyAwLjEwLjMsICJMaWtlIGEgdmlyZ2luIgorCisyMDA2LTAyLTA4IDExOjEyOjA3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgY29uZmlndXJlLmFjOiAybmQgcHJlcmVsZWFzZSBvZiAwLjEwLjMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNi0wMi0wOCAgSmFuIFNjaG1pZHQgIDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCSAgKiBjb25maWd1cmUuYWM6CisJICAybmQgcHJlcmVsZWFzZSBvZiAwLjEwLjMKKwkgIEJ1bXAgbGlidG9vbCB2ZXJzaW9uaW5nLgorCisyMDA2LTAyLTA3IDE1OjQ5OjQwICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYyAoZ3N0X2NvbGxlY3RfcGFkc19jaGFpbik6IE9ubHkgdXBkYXRlIGxhc3Rfc3RvcCBpZiB3ZSdyZSBpbiBUSU1FIGZvcm1hdCBhbmQgdGhlIHRpbWVzdC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA2LTAyLTA3ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmMgKGdzdF9jb2xsZWN0X3BhZHNfY2hhaW4pOiBPbmx5CisJICB1cGRhdGUgbGFzdF9zdG9wIGlmIHdlJ3JlIGluIFRJTUUgZm9ybWF0IGFuZCB0aGUgdGltZXN0YW1wIGlzCisJICB2YWxpZC4KKwkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jIChnc3RfY29sbGVjdF9wYWRzX2V2ZW50KQorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYyAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2V2ZW50ZnVuYyk6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYyAoZ3N0X2Jhc2Vfc2lua19jb25maWd1cmVfc2VnbWVudCk6CisJICBJZiB3ZSBnZXQgYSBuZXcgbmV3c2VnbWVudCB3aXRoIGEgZGlmZmVyZW50IGZvcm1hdCwgYWRhcHQKKwkgIGFjY29yZGluZ2x5LgorCSAgKiBnc3QvZ3N0Y2xvY2suYyAoZ3N0X2Nsb2NrX3NldF9jYWxpYnJhdGlvbik6IEFjY2VwdCBhIG51bWVyYXRvcgorCSAgb2YgMC4gTm90IGEgcHJvYmxlbSwgcmVhbGx5LgorCisyMDA2LTAyLTA3IDEzOjIwOjE2ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYyAoZ3N0X2Jhc2Vfc2lua19jaGFpbl91bmxvY2tlZCk6IE9ubHkgd2FybiBpZiBzeW5jPXRydWUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDYtMDItMDcgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYyAoZ3N0X2Jhc2Vfc2lua19jaGFpbl91bmxvY2tlZCk6IE9ubHkKKwkgIHdhcm4gaWYgc3luYz10cnVlLgorCisyMDA2LTAyLTA3IDEwOjUxOjI0ICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+CisKKwkqIGdzdHJlYW1lci5zcGVjLmluOgorCSAgdXBkYXRlIHNwZWMgZmlsZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB1cGRhdGUgc3BlYyBmaWxlCisKKzIwMDYtMDItMDYgMjI6MDE6MjMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBjb25maWd1cmUuYWM6IFByZWxlYXNlIG9mIDAuMTAuMworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgIFByZWxlYXNlIG9mIDAuMTAuMworCisyMDA2LTAyLTA2IDIxOjUzOjA1ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSogcG8vYWYucG86CisJKiBwby9hei5wbzoKKwkqIHBvL2JnLnBvOgorCSogcG8vY2EucG86CisJKiBwby9jcy5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkgIFVwZGF0ZSAucG8gZmlsZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgVXBkYXRlIC5wbyBmaWxlcworCisyMDA2LTAyLTA2IDIxOjI5OjA0ICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+CisKKwkgIHdpbjMyL3ZzNzogcHJvamVjdCBmaWxlcyB1cGRhdGVkIHRvIHRoZSBkZWZhdWx0IHZzNyBjb25maWd1cmF0aW9uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogd2luMzIvdnM3OgorCSAgcHJvamVjdCBmaWxlcyB1cGRhdGVkIHRvIHRoZSBkZWZhdWx0IHZzNyBjb25maWd1cmF0aW9uCisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKKwkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBhZGRlZCBuZXcgc3ltYm9scywKKwkgIHJlbW92ZWQgZW1wdHkgbGluZXMsCisJICBzb3J0ZWQgYWxsIGV4cG9ydGVkIHN5bWJvbHMgYWxwaGFiZXRpY2FsbHkKKwkgICogd2luMzIvY29tbW9uL2RpcmVudC5jOgorCSAgKiB3aW4zMi9jb21tb24vZGlyZW50Lmg6CisJICAqIHdpbjMyL2NvbW1vbi9nY2hhci5oOgorCSAgdXNlIHdpbmRvd3MgbGluZSBlbmQuCisKKzIwMDYtMDItMDYgMTU6MjU6MjYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSAgZG9jIHN1YjgwIGZpeGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGRvYyBzdWI4MCBmaXhlcworCisyMDA2LTAyLTA2IDE0OjU3OjQwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogU2VuZCBFT1MgZXZlbnQgd2hlbiBzdG9wcGluZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19jaGFuZ2Vfc3RhdGUpOgorCSAgU2VuZCBFT1MgZXZlbnQgd2hlbiBzdG9wcGluZy4KKworMjAwNi0wMi0wNiAxMDo0MjowMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZG9jcy9SRUFETUU6IFRlbGwgZm9sa3Mgd2hhdCB0byBkbyBpZiB0aGUgcGx1Z2luLWZvb2Jhci54bWwgZmlsZSBoYXNuJ3QgYmVlbiBnZW5lcmF0ZWQgZm9yIGEgbmV3bHktYWRkZWQgcGx1Z2luLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvUkVBRE1FOgorCSAgVGVsbCBmb2xrcyB3aGF0IHRvIGRvIGlmIHRoZSBwbHVnaW4tZm9vYmFyLnhtbCBmaWxlCisJICBoYXNuJ3QgYmVlbiBnZW5lcmF0ZWQgZm9yIGEgbmV3bHktYWRkZWQgcGx1Z2luLgorCisyMDA2LTAyLTA1IDE4OjEzOjI4ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KKworCSAgbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiBDb2xsZWN0cGFkcyBub3cgaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhlIEdzdFBhZCB0aGF0IHdhcyBhZGRlZC4gSW5kZWVkIHdlIGRvbid0IHdhbnQgLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDYtMDItMDUgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KKwkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RfcGFkc19maW5hbGl6ZSksCisJICAoZ3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkKSwgKGdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZCksCisJICAoZ3N0X2NvbGxlY3RfcGFkc19zdGFydCksIChnc3RfY29sbGVjdF9wYWRzX3N0b3ApLAorCSAgKGdzdF9jb2xsZWN0X3BhZHNfZXZlbnQpOiBDb2xsZWN0cGFkcyBub3cgaG9sZHMgYSByZWZlcmVuY2UKKwkgIHRvIHRoZSBHc3RQYWQgdGhhdCB3YXMgYWRkZWQuIEluZGVlZCB3ZSBkb24ndCB3YW50IHRvIGxvb2sKKwkgIGF0IHBhZHMgdGhhdCBtaWdodCBqdXN0IGdvIGF3YXkgd2l0aCBubyB3YXJuaW5nLi4uCisKKzIwMDYtMDItMDUgMTY6MTg6MzcgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLio6IEhhbmRsZSBmbHVzaC4gQWRhcHRlZCBmcm9tCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDYtMDItMDUgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KKwkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkKSwKKwkgIChnc3RfY29sbGVjdF9wYWRzX3N0YXJ0KSwgKGdzdF9jb2xsZWN0X3BhZHNfc3RvcCksCisJICAoZ3N0X2NvbGxlY3RfcGFkc19ldmVudCksIChnc3RfY29sbGVjdF9wYWRzX2NoYWluKToKKwkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oOiBIYW5kbGUgZmx1c2guIEFkYXB0ZWQgZnJvbQorCSAgTWFyayBOYXV3ZWxhZXJ0cydzIHBhdGNoIG9uIGJ1ZyAjMzI4NDkxLgorCisyMDA2LTAyLTA0IDEyOjQ5OjUzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzogQWRkIHNvbWUgc2ltcGxlIHRlc3RzIGZvciBnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb24oKSBhbmQgZ3N0X2Jpbl9maW5kX3VuY29ubmVjdGVkX3AuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzogKHRlc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb24pLAorCSAgKGdzdF91dGlsc19zdWl0ZSk6CisJICBBZGQgc29tZSBzaW1wbGUgdGVzdHMgZm9yIGdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbigpIGFuZAorCSAgZ3N0X2Jpbl9maW5kX3VuY29ubmVjdGVkX3BhZCgpICgjMzI5MDY5KS4KKworMjAwNi0wMi0wNCAxMTo1NjoxOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgdG9vbHMvZ3N0LWxhdW5jaC5jOiBDYXRjaCBlcnJvcnMgZHVyaW5nIHByZXJvbGwgKCMzMjAwODQpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKGV2ZW50X2xvb3ApLCAobWFpbik6CisJICBDYXRjaCBlcnJvcnMgZHVyaW5nIHByZXJvbGwgKCMzMjAwODQpLgorCisyMDA2LTAyLTAzIDIxOjE0OjU3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOiBQb3N0IFRZUEVfTk9UX0ZPVU5EIGVycm9yIG1lc3NhZ2Ugd2hlbiB0eXBlZmluZGluZyBpcyB1bnN1Y2Nlc3NmdWwgaW4gdGhlIGFjdGkuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9hY3RpdmF0ZSk6CisJICBQb3N0IFRZUEVfTk9UX0ZPVU5EIGVycm9yIG1lc3NhZ2Ugd2hlbiB0eXBlZmluZGluZworCSAgaXMgdW5zdWNjZXNzZnVsIGluIHRoZSBhY3RpdmF0ZSBmdW5jdGlvbiBhcyB3ZWxsLgorCisyMDA2LTAyLTAyIDE2OjE1OjE3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtc2luay50eHQ6IFVwZGF0ZWQgZG9jLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtZWxlbWVudC1zaW5rLnR4dDoKKwkgIFVwZGF0ZWQgZG9jLgorCisyMDA2LTAyLTAyIDE2OjEyOjM1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IE9ubHkga2VlcCB0cmFjayBvZiBwcmVyb2xsYWJsZSBpdGVtcyB3aGVuIHdlIGFyZSBwcmVyb2xsaW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZG9fc3luYyksCisJICAoZ3N0X2Jhc2Vfc2lua19yZW5kZXJfb2JqZWN0KSwKKwkgIChnc3RfYmFzZV9zaW5rX3F1ZXVlX29iamVjdF91bmxvY2tlZCk6CisJICBPbmx5IGtlZXAgdHJhY2sgb2YgcHJlcm9sbGFibGUgaXRlbXMgd2hlbiB3ZSBhcmUKKwkgIHByZXJvbGxpbmcuCisJICBCZWZvcmUgcmVuZGVyaW5nIGFmdGVyIHByZXJvbGwsIGFsd2F5cyBjaGVjayBpZiB3ZQorCSAgaGF2ZSBxdWV1ZWQgaXRlbXMuCisJICBBZGRlZCBzb21lIG1vcmUgZGVidWdnaW5nLgorCisyMDA2LTAyLTAyIDEzOjU4OjEyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0ZWxlbWVudC5jOiBGaXhlZCAjMzI2NTc2LCBiZWVuIHJ1bm5pbmcgdGhpcyBmb3IgcXVpdGUgc29tZSB0aW1lIHdpdGggbm8gcmVncmVzc2lvbnMgYXQgYWxsLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9jb250aW51ZV9zdGF0ZSksCisJICAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlX2Z1bmMpLCAoZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlKToKKwkgIEZpeGVkICMzMjY1NzYsIGJlZW4gcnVubmluZyB0aGlzIGZvciBxdWl0ZSBzb21lIHRpbWUgd2l0aAorCSAgbm8gcmVncmVzc2lvbnMgYXQgYWxsLgorCisyMDA2LTAyLTAyIDEzOjQ0OjA0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBjb21tb24vZ3N0LnN1cHA6IEFkZGVkIG1vcmUgc3VwcHJlc3Npb25zCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29tbW9uL2dzdC5zdXBwOgorCSAgQWRkZWQgbW9yZSBzdXBwcmVzc2lvbnMKKworMjAwNi0wMi0wMiAxMjowNzo0OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1lbGVtZW50LXNpbmsudHh0OiBVcGRhdGVkIGRvY3VtZW50LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtZWxlbWVudC1zaW5rLnR4dDoKKwkgIFVwZGF0ZWQgZG9jdW1lbnQuCisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfaW5pdCksCisJICAoZ3N0X2Jhc2Vfc2lua19maW5hbGl6ZSksIChnc3RfYmFzZV9zaW5rX3ByZXJvbGxfcXVldWVfZmx1c2gpLAorCSAgKGdzdF9iYXNlX3NpbmtfY29uZmlndXJlX3NlZ21lbnQpLCAoZ3N0X2Jhc2Vfc2lua19jb21taXRfc3RhdGUpLAorCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3N5bmNfdGltZXMpLCAoZ3N0X2Jhc2Vfc2lua193YWl0X2Nsb2NrKSwKKwkgIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpLCAoZ3N0X2Jhc2Vfc2lua19yZW5kZXJfb2JqZWN0KSwKKwkgIChnc3RfYmFzZV9zaW5rX3ByZXJvbGxfb2JqZWN0KSwKKwkgIChnc3RfYmFzZV9zaW5rX3F1ZXVlX29iamVjdF91bmxvY2tlZCksCisJICAoZ3N0X2Jhc2Vfc2lua19xdWV1ZV9vYmplY3QpLCAoZ3N0X2Jhc2Vfc2lua19ldmVudCksCisJICAoZ3N0X2Jhc2Vfc2lua19jaGFpbl91bmxvY2tlZCksIChnc3RfYmFzZV9zaW5rX2NoYWluKSwKKwkgIChnc3RfYmFzZV9zaW5rX2xvb3ApLCAoZ3N0X2Jhc2Vfc2lua19hY3RpdmF0ZV9wdWxsKSwKKwkgIChnc3RfYmFzZV9zaW5rX2dldF9wb3NpdGlvbiksIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKKwkgIFRvdGFsbHkgcmVmYWN0b3JlZCBtYXRjaGluZyB0aGUgZGVzaWduIGRvYy4KKwkgIFVzZSB0d28gc2VnbWVudHMsIG9uZSB0byBjbGlwIGluY29tbWluZyBidWZmZXJzIGFuZCBhbm90aGVyIHRvCisJICBwZXJmb3JtIHN5bmMuCisJICBIYW5kbGUgcXVldWVpbmcgY29ycmVjdGx5LCBieXBhc3MgdGhlIHF1ZXVlIHdoZW4gcGxheWluZy4KKwkgIE1ha2UgRU9TIGNhbmNlbGFibGUuCisJICBIYW5kbGUgZXJyb3JzIGNvcnJlY3RseSB3aGVuIG9wZXJhdGluZyBpbiBwdWxsIGJhc2VkIG1vZGUuCisJICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzaW5rLmM6IChHU1RfU1RBUlRfVEVTVCksCisJICAoZmFrZXNpbmtfc3VpdGUpOgorCSAgQWRkZWQgbmV3IGNoZWNrIGZvciBzaW5rcy4KKworMjAwNi0wMi0wMiAxMTo1OToyNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHNlZ21lbnQuYzogTm8gcmVhc29uIHRvIHJlZnVzZSB0byBjbGlwIHdoZW4gc3RhcnQgPT0gLTEKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0c2VnbWVudC5jOiAoZ3N0X3NlZ21lbnRfY2xpcCk6CisJICBObyByZWFzb24gdG8gcmVmdXNlIHRvIGNsaXAgd2hlbiBzdGFydCA9PSAtMQorCisyMDA2LTAyLTAyIDExOjI0OjE5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvOiBkZXNjcmliZSBkcGFyYW1zIChjb250cm9sbGVyKSBmb3IgcGx1Z2lucyB1bmlmeSBkb2NzIGEgbGl0dGxlIG1vcmUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL1JFQURNRToKKwkgICogZG9jcy9tYW51YWwvaW50cm8tYmFzaWNzLnhtbDoKKwkgICogZG9jcy9tYW51YWwvaW50cm8tcHJlZmFjZS54bWw6CisJICAqIGRvY3MvbWFudWFsL21hbnVhbC54bWw6CisJICAqIGRvY3MvcHdnL2FkdmFuY2VkLWRwYXJhbXMueG1sOgorCSAgKiBkb2NzL3B3Zy9pbnRyby1iYXNpY3MueG1sOgorCSAgKiBkb2NzL3B3Zy9pbnRyby1wcmVmYWNlLnhtbDoKKwkgICogZG9jcy9wd2cvcHdnLnhtbDoKKwkgIGRlc2NyaWJlIGRwYXJhbXMgKGNvbnRyb2xsZXIpIGZvciBwbHVnaW5zCisJICB1bmlmeSBkb2NzIGEgbGl0dGxlIG1vcmUKKworMjAwNi0wMi0wMiAwOTo1MToxOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgQWRkIG5ldyBBUEk6IGdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbigpIGFuZCBnc3RfYmluX2ZpbmRfdW5jb25uZWN0ZWRfcGFkKCkgKCMzMjkwNjkpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3R1dGlscy5jOiAoZWxlbWVudF9maW5kX3VuY29ubmVjdGVkX3BhZCksCisJICAoZ3N0X2Jpbl9maW5kX3VuY29ubmVjdGVkX3BhZCksIChnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb24pOgorCSAgKiBnc3QvZ3N0dXRpbHMuaDoKKwkgIEFkZCBuZXcgQVBJOiBnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb24oKSBhbmQKKwkgIGdzdF9iaW5fZmluZF91bmNvbm5lY3RlZF9wYWQoKSAoIzMyOTA2OSkuCisKKzIwMDYtMDItMDEgMjI6NDM6MTcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZG9jcy9tYW51YWwvUkVBRE1FOiB1bmNvdmVyIGEgbmFzdHkgZGV0YWlsIG9mIHRoZSBkb2NzIGJ1aWxkCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9tYW51YWwvUkVBRE1FOgorCSAgdW5jb3ZlciBhIG5hc3R5IGRldGFpbCBvZiB0aGUgZG9jcyBidWlsZAorCisyMDA2LTAyLTAxIDA4OjI3OjI0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZG9jcy9SRUFETUU6CisJICB1cGRhdGVzIGZvciBwbHVnaW4gZG9jcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB1cGRhdGVzIGZvciBwbHVnaW4gZG9jcworCisyMDA2LTAxLTMxIDE4OjQ2OjE1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YmluLmM6IERvbid0IGNhY2hlIGR1cmF0aW9uIG1lc3NhZ2VzIGlmIHdlJ3JlIG5vdCBnb2luZyB0byB1c2Ugb3IgZnJlZSB0aGVtLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RiaW4uYzogKGJpbl9yZW1vdmVfbWVzc2FnZXMpLCAoYmluX3F1ZXJ5X2R1cmF0aW9uX2RvbmUpOgorCSAgRG9uJ3QgY2FjaGUgZHVyYXRpb24gbWVzc2FnZXMgaWYgd2UncmUgbm90IGdvaW5nIHRvIHVzZSBvcgorCSAgZnJlZSB0aGVtLgorCisyMDA2LTAxLTMxIDE2OjU2OjI4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvOiBtb3JlIGRwYXJhbSBkb2NzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9tYW51YWwvYWR2YW5jZWQtZHBhcmFtcy54bWw6CisJICAqIGRvY3MvcHdnL2FkdmFuY2VkLWRwYXJhbXMueG1sOgorCSAgbW9yZSBkcGFyYW0gZG9jcworCSAgKiBnc3QvZ3N0aW5kZXguYzoKKwkgIGZpeCBkb2NzCisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvbGliLmM6IChnc3RfY29udHJvbGxlcl9pbml0KToKKwkgIGluaXQganVzdCBvbmNlCisKKzIwMDYtMDEtMzEgMTA6MTY6NDkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBnc3QvZ3N0ZWxlbWVudC5jOiBhbHNvIHNob3cgZmlsZS9saW5lL2Z1bmMgaWYgbm8gYWRkaXRpb25hbCBkZWJ1ZyB3YXMgZ2l2ZW4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfbWVzc2FnZV9mdWxsKToKKwkgIGFsc28gc2hvdyBmaWxlL2xpbmUvZnVuYyBpZiBubyBhZGRpdGlvbmFsIGRlYnVnIHdhcyBnaXZlbgorCisyMDA2LTAxLTMwIDIzOjUyOjUyICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+CisKKwkgIHdpbjMyL3ZzNy9ncmFtbWFyLnZjcHJvajogYWN0aXZhdGUgY29weSBvZiBhdXRvZ2VuZXJhdGVkIGZpbGVzIGZvciBSZWxlYXNlIG1vZGUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB3aW4zMi92czcvZ3JhbW1hci52Y3Byb2o6CisJICBhY3RpdmF0ZSBjb3B5IG9mIGF1dG9nZW5lcmF0ZWQgZmlsZXMgZm9yIFJlbGVhc2UgbW9kZQorCisyMDA2LTAxLTMwIDIyOjI5OjAzICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+CisKKwkgIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOiBleHBvcnQgZ3N0X3ZhbHVlX2NvbXBhcmUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGV4cG9ydCBnc3RfdmFsdWVfY29tcGFyZQorCisyMDA2LTAxLTMwIDIxOjU3OjAwICswMDAwICBQaGlsaXBwZSBSb3VxdWllciA8Ym9uZmlyZS1hcHBAd2FuYWRvby5mcj4KKworCSAgcGx1Z2lucy9lbGVtZW50cy86CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZS5hbToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RlbGVtZW50cy5jOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOiAoX2RvX2luaXQpLAorCSAgKGdzdF9mZF9zaW5rX2Jhc2VfaW5pdCksIChnc3RfZmRfc2lua19jbGFzc19pbml0KSwKKwkgIChnc3RfZmRfc2lua19pbml0KSwgKGdzdF9mZF9zaW5rX2Rpc3Bvc2UpLCAoZ3N0X2ZkX3NpbmtfcXVlcnkpLAorCSAgKGdzdF9mZF9zaW5rX3JlbmRlciksIChnc3RfZmRfc2lua19jaGVja19mZCksIChnc3RfZmRfc2lua19zdGFydCksCisJICAoZ3N0X2ZkX3Npbmtfc3RvcCksIChnc3RfZmRfc2lua191bmxvY2spLCAoZ3N0X2ZkX3NpbmtfdXBkYXRlX2ZkKSwKKwkgIChnc3RfZmRfc2lua19zZXRfcHJvcGVydHkpLCAoZ3N0X2ZkX3NpbmtfdXJpX2dldF90eXBlKSwKKwkgIChnc3RfZmRfc2lua191cmlfZ2V0X3Byb3RvY29scyksIChnc3RfZmRfc2lua191cmlfZ2V0X3VyaSksCisJICAoZ3N0X2ZkX3NpbmtfdXJpX3NldF91cmkpLCAoZ3N0X2ZkX3NpbmtfdXJpX2hhbmRsZXJfaW5pdCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmg6CisJICBQb3J0IGZkc2luayB0byAwLjEwIChwYXRjaCBieSBQaGlsaXBwZSBSb3VxdWllcikgKEZpeGVzICMzMjU0OTApCisKKzIwMDYtMDEtMzAgMjE6MTE6MzggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZG9jcy9tYW51YWwvYWR2YW5jZWQtZHBhcmFtcy54bWw6IGRlc2NyaWJlIGNvbnRyb2xsZXIKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kcGFyYW1zLnhtbDoKKwkgIGRlc2NyaWJlIGNvbnRyb2xsZXIKKwkgICogZG9jcy9tYW51YWwvYWR2YW5jZWQtcG9zaXRpb24ueG1sOgorCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtaW5pdC54bWw6CisJICAqIGRvY3MvbWFudWFsL21hbnVhbC54bWw6CisJICAqIGRvY3MvbWFudWFsL3RpdGxlcGFnZS54bWw6CisJICAqIGRvY3MvcHdnL3B3Zy54bWw6CisJICAqIGRvY3MvcHdnL3RpdGxlcGFnZS54bWw6CisJICBjbGVhbnVwIHhtbCAobW9yZSB0byBjb21lKQorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKKwkgIGZpeCB0eXBvCisKKzIwMDYtMDEtMzAgMjA6MzY6NTEgKzAwMDAgIFPDqWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KKworCSAgd2luMzIvdnM2L2dyYW1tYXIuZHNwOiBhZGQgYXV0b2dlbiBvZiBnc3RtYXJzaGFsLmMsaCBmb3IgUmVsZWFzZSBtb2RlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogd2luMzIvdnM2L2dyYW1tYXIuZHNwOgorCSAgYWRkIGF1dG9nZW4gb2YgZ3N0bWFyc2hhbC5jLGggZm9yIFJlbGVhc2UgbW9kZQorCisyMDA2LTAxLTMwIDE2OjA3OjQ4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IEJhc2VzaW5rIGNsZWFudXBzLCByZW1vdmUgc29tZSBvbGQgY29kZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2luaXQpLAorCSAgKGdzdF9iYXNlX3NpbmtfcHJlcm9sbF9xdWV1ZV9lbXB0eSksIChnc3RfYmFzZV9zaW5rX2NvbW1pdF9zdGF0ZSksCisJICAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwgKGdzdF9iYXNlX3NpbmtfZXZlbnQpLAorCSAgKGdzdF9iYXNlX3NpbmtfaXNfcHJlcm9sbGVkKSwgKGdzdF9iYXNlX3Npbmtfd2FpdCksCisJICAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKSwgKGdzdF9iYXNlX3NpbmtfaGFuZGxlX2V2ZW50KSwKKwkgIChnc3RfYmFzZV9zaW5rX2hhbmRsZV9idWZmZXIpLCAoZ3N0X2Jhc2Vfc2lua19zZXRfZmx1c2hpbmcpLAorCSAgKGdzdF9iYXNlX3NpbmtfZGVhY3RpdmF0ZSksIChnc3RfYmFzZV9zaW5rX2FjdGl2YXRlKSwKKwkgIChnc3RfYmFzZV9zaW5rX2FjdGl2YXRlX3B1bGwpLCAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24pLAorCSAgKGdzdF9iYXNlX3NpbmtfcXVlcnkpLCAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgorCSAgQmFzZXNpbmsgY2xlYW51cHMsIHJlbW92ZSBzb21lIG9sZCBjb2RlLgorCSAgSGFuZGxlIHRoZSBjYXNlIHdoZXJlIGEgc3ViY2xhc3MgY2FuIHByZXJvbGwgaW4gdGhlIHJlbmRlcgorCSAgbWV0aG9kIChtb3N0bHkgYXVkaW9zaW5rcykuCisJICBIYW5kbGUgbW9yZSBldmVudHMuCisJICBSZW1vdmUgc29tZSBsb2NrcyBhcm91bmQgdmFyaWFibGVzIHRoYXQgYXJlIG5vdyBwcm90ZWN0ZWQKKwkgIHdpdGggdGhlIFBSRVJPTExfTE9DSyAoY2xvY2tfaWQsIGZsdXNoaW5nLCAuLikuCisJICBPcHRpbWl6ZSBwb3NpdGlvbiBxdWVyeSBzb21lIG1vcmUsIGRvIGNvcnJlY3QgbG9ja2luZy4KKwkgIFJlbW92ZSBvbGQgY29kZSB0byBwdXNoIHF1ZXVlIGluIHN0YXRlIGNoYW5nZSwgdGhpcyBpcyBub3QKKwkgIG5lZWRlZCBhbnltb3JlIHNpbmNlIHByZXJvbGwgYmxvY2tzIG9uIGFsbCBwcmVyb2xsYWJsZSBpdGVtcworCSAgbm93LgorCSAgQWxtb3N0IGltcGxlbWVudGVkIGFzIGRlc2NyaWJlZCBpbiBkZXNpZ24gZG9jLgorCisyMDA2LTAxLTMwIDE1OjU3OjQzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6IFdhaXQgZm9yIHJlZmNvdW50IHRvIHNldHRsZSBkb3duIGJlZm9yZSBjaGVja2luZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBXYWl0IGZvciByZWZjb3VudCB0byBzZXR0bGUgZG93biBiZWZvcmUgY2hlY2tpbmcuCisKKzIwMDYtMDEtMzAgMTU6MTU6NDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZGVzaWduL3BhcnQtZWxlbWVudC1zaW5rLnR4dDogUHNldWRvIGNvZGUgb3ZlcnZpZXcgb2YgZGVzaXJlZCBzaW5rIGJlaGF2aW91ciByZWdhcmRpbmcgcHJlcm9sbC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtc2luay50eHQ6CisJICBQc2V1ZG8gY29kZSBvdmVydmlldyBvZiBkZXNpcmVkIHNpbmsgYmVoYXZpb3VyIHJlZ2FyZGluZworCSAgcHJlcm9sbC4KKworMjAwNi0wMS0zMCAxNDoyODowMyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkqIENoYW5nZUxvZzoKKwkgIEJsZWgsIGZvcmdvdCB0byBjb21taXQgdGhlIGNoYW5nZWxvZyBlbnRyeSBvbiBTYXR1cmRheS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgQmxlaCwgZm9yZ290IHRvIGNvbW1pdCB0aGUgY2hhbmdlbG9nIGVudHJ5IG9uIFNhdHVyZGF5LgorCisyMDA2LTAxLTI5IDIxOjU2OjAwICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+CisKKwkgIHdpbjMyL3ZzNi9ncmFtbWFyLmRzcDogZml4IHNvbWUgYnVncyBpbiBhdXRvZ2VuZXJhdGVkIGZpbGVzIGZvciBSZWxlYXNlIG1vZGUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB3aW4zMi92czYvZ3JhbW1hci5kc3A6CisJICBmaXggc29tZSBidWdzIGluIGF1dG9nZW5lcmF0ZWQgZmlsZXMgZm9yIFJlbGVhc2UgbW9kZQorCisyMDA2LTAxLTI5IDE5OjI0OjE4ICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+CisKKwkgIHdpbjMyL2NvbW1vbi86IGV4cG9ydCBzb21lIG5ldyBzeW1ib2xzOiBnc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdCwgZ3N0X2l0ZXJhdG9yX25leHQsIGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbGlzdAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKKwkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBleHBvcnQgc29tZSBuZXcgc3ltYm9sczogZ3N0X2Jhc2Vfc3JjX3NldF9mb3JtYXQsCisJICBnc3RfaXRlcmF0b3JfbmV4dCwgZ3N0X3N0cnVjdHVyZV9zZXRfdmFsaXN0CisKKzIwMDYtMDEtMjkgMTc6Mzc6MDggKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgorCisJICBnc3QvZ3N0Z2hvc3RwYWQuYzogU2V0IHBhZCBmdW5jdGlvbnMgdW5jb25kaXRpb25hbGx5LiBGaXhlcyAjMzI5MTA1LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA2LTAxLTI5ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+CisJICAqIGdzdC9nc3RnaG9zdHBhZC5jOiAoZ3N0X3Byb3h5X3BhZF9zZXRfdGFyZ2V0X3VubG9ja2VkKToKKwkgIFNldCBwYWQgZnVuY3Rpb25zIHVuY29uZGl0aW9uYWxseS4gRml4ZXMgIzMyOTEwNS4KKworMjAwNi0wMS0yOSAxNjo1NDo0MCArMDAwMCAgU8OpYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgorCisJICB3aW4zMi92czg6IGFkZCB2czggcHJvamVjdCBmaWxlcyBjcmVhdGVkIGJ5IFNlcmdleSBTY29iaWNoCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogd2luMzIvdnM4OgorCSAgYWRkIHZzOCBwcm9qZWN0IGZpbGVzIGNyZWF0ZWQgYnkgU2VyZ2V5IFNjb2JpY2gKKworMjAwNi0wMS0yOCAwMDo1OTozNyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGdzdC9nc3R1dGlscy5jOiBEb24ndCBsZWFrIHBhZCByZWZlcmVuY2VzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X2VsZW1lbnRfdW5saW5rX3BhZHMpOgorCSAgRG9uJ3QgbGVhayBwYWQgcmVmZXJlbmNlcy4KKwkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvZmFrZXNpbmsuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgICogdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgKiB0ZXN0cy9jaGVjay9nZW5lcmljL3N0YXRlcy5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RjYXBzLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RlbGVtZW50LmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0aXRlcmF0b3IuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBGaXggYSBidW5jaCBvZiBsZWFrcy4gTWFrZSBnZW5lcmljL3NpbmtzLmMKKwkgIHVzZSBhIGJpdCBsZXNzIGNwdSBieSBzbG93aW5nIHRoZSBidWZmZXIgcmF0ZQorCSAgYmV0d2VlbiBmYWtlc3JjIGFuZCBmYWtlc2luay4KKworMjAwNi0wMS0yNyAyMjozNDo1MSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBkb2MgZml4ZXMsIHRvIGxpbmsgdG8gZnVuY3Rpb24sIGp1c3Qgd3JpdGUgZ3N0X2Nvb2xfZnVuY3Rpb24oKSwgZG9uJ3QgcHJlZml4IHdpdGggJyMnCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGNhcHMuYzoKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X3NlbmRfZXZlbnQpOgorCSAgKiBnc3QvZ3N0ZXZlbnQuYzoKKwkgICogZ3N0L2dzdGluZm8uYzoKKwkgICogZ3N0L2dzdGl0ZXJhdG9yLmM6CisJICAqIGdzdC9nc3RpdGVyYXRvci5oOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3NlbmRfZXZlbnQpOgorCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJICAqIGdzdC9nc3R1cmkuYzoKKwkgICogZ3N0L2dzdHV0aWxzLmM6CisJICAqIGdzdC9nc3R2YWx1ZS5jOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKKwkgIGRvYyBmaXhlcywgdG8gbGluayB0byBmdW5jdGlvbiwganVzdCB3cml0ZSBnc3RfY29vbF9mdW5jdGlvbigpLCBkb24ndAorCSAgcHJlZml4IHdpdGggJyMnCisKKzIwMDYtMDEtMjcgMTY6NTk6NTcgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOiBBbHdheXMgcHJlZmVyIGFuIGFjdHVhbCByZXR1cm4gdmFsdWUgZnJvbSBhIHNyYyBwYWQgaW4gcGxhY2Ugb2YgTk9UX0xJTktFRC4gVGhpcyBtZWFucyB3ZSAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOiAoZ3N0X3RlZV9kb19wdXNoKSwKKwkgIChnc3RfdGVlX2hhbmRsZV9idWZmZXIpOgorCSAgQWx3YXlzIHByZWZlciBhbiBhY3R1YWwgcmV0dXJuIHZhbHVlIGZyb20gYSBzcmMKKwkgIHBhZCBpbiBwbGFjZSBvZiBOT1RfTElOS0VELiBUaGlzIG1lYW5zIHdlIHJldHVybgorCSAgV1JPTkdfU1RBVEUgd2hlbiBhbGwgc3JjIHBhZHMgYXJlIFdST05HX1NUQVRFCisJICBpbnN0ZWFkIG9mIE5PVF9MSU5LRUQuCisJICBMb2NrIHdoZW4gcmVwbGFjaW5nIHRoZSBsYXN0IG1lc3NhZ2UgdG8gcHJldmVudAorCSAgcmFjaW5nIHdpdGggdGhlIGdldF9wcm9wZXJ0eSBtZXRob2QuCisJICBBZGQgZGVidWcgb3V0cHV0CisKKzIwMDYtMDEtMjcgMTE6NTM6MjAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICB0ZXN0cy9jaGVjay86IEFkZCBhIHZlcnkgc2ltcGxlIGNoZWNrIHRoYXQgc2hvdWxkIGhhdmUgY2F1Z2h0IHRoZSBtZW1sZWFrIEkgZml4ZWQgbGFzdCBuaWdodCAoaWYgbm90IGZvciB0aGUgc2xpY2UgYWwuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHF1ZXJ5LmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RxdWVyeV9zdWl0ZSksCisJICAobWFpbik6CisJICBBZGQgYSB2ZXJ5IHNpbXBsZSBjaGVjayB0aGF0IHNob3VsZCBoYXZlIGNhdWdodCB0aGUgbWVtbGVhayBJIGZpeGVkCisJICBsYXN0IG5pZ2h0IChpZiBub3QgZm9yIHRoZSBzbGljZSBhbGxvY2F0b3IgaGlkaW5nIGl0KQorCisyMDA2LTAxLTI3IDAxOjQ4OjM3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZ3N0L2dzdGJpbi5jOiBDbGVhbiB1cCByZWZlcmVuY2VzIHRvIHRoZSBjbG9jayBwcm92aWRlciB3aGVuIGRpc3Bvc2VkIG9yIHdoZW4gaGFuZGxpbmcgYSBjbG9jay1sb3N0IG1lc3NhZ2UgZnJvbSBpdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2Rpc3Bvc2UpLCAoZ3N0X2Jpbl9wcm92aWRlX2Nsb2NrX2Z1bmMpLAorCSAgKGdzdF9iaW5fcmVtb3ZlX2Z1bmMpLCAoZ3N0X2Jpbl9oYW5kbGVfbWVzc2FnZV9mdW5jKSwKKwkgIChiaW5fcXVlcnlfZHVyYXRpb25fZm9sZCksIChiaW5fcXVlcnlfZ2VuZXJpY19mb2xkKToKKwkgIENsZWFuIHVwIHJlZmVyZW5jZXMgdG8gdGhlIGNsb2NrIHByb3ZpZGVyIHdoZW4gZGlzcG9zZWQgb3Igd2hlbgorCSAgaGFuZGxpbmcgYSBjbG9jay1sb3N0IG1lc3NhZ2UgZnJvbSBpdC4KKwkgIFVucmVmIHNpbmtzIHdoZW4gcGVyZm9ybWluZyBhIHF1ZXJ5IHZpYSBnc3RfaXRlcmF0b3JfZm9sZCwgYXMgdGhlCisJICBnc3RfYmluX2l0ZXJhdGVfc2lua3MgaXRlcmF0b3IgcmVmcyBlYWNoIGl0ZW0uIChGaXhlcyAjMzIzODc0KQorCSAgKiBnc3QvZ3N0Y2xvY2suYzogKGdzdF9jbG9ja19jbGFzc19pbml0KSwgKGdzdF9jbG9ja19kaXNwb3NlKSwKKwkgIChnc3RfY2xvY2tfc2V0X21hc3Rlcik6CisJICBEcm9wIG91ciByZWZlcmVuY2UgdG8gdGhlIG1hc3RlciBjbG9jaywgaWYgYW55LCB3aGVuIHdlIGFyZSBkaXNwb3NlZC4KKwkgICogZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5jOiAoZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2Rpc3Bvc2UpOgorCSAgQ2hhaW4gdXAgaW4gZGlzcG9zZS4KKworMjAwNi0wMS0yNyAwMToxMzoxMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGRvY3MvcmFuZG9tL2kxOG46CisJICBhZGQgbm90ZXMgb24gaTE4bgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGQgbm90ZXMgb24gaTE4bgorCisyMDA2LTAxLTI2IDEyOjU5OjQ4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogQWRkIHNvbWUgZGVidWdnaW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2dldF9yYW5nZSk6CisJICBBZGQgc29tZSBkZWJ1Z2dpbmcuCisKKzIwMDYtMDEtMjYgMTI6NDA6MTcgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOiBBcHBseSBwYXRjaCBmcm9tICMzMjg3MTUuIFRlZSBub3cgaGFuZGxlcyBwYWQgYmVpbmcgTk9UX0xJTktFRCBvciBpbiBXUk9OR19TVEFURS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNi0wMS0yNiAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOiAoZ3N0X3RlZV9kb19wdXNoKSwKKwkgIChnc3RfdGVlX2hhbmRsZV9idWZmZXIpOiBBcHBseSBwYXRjaCBmcm9tICMzMjg3MTUuIFRlZSBub3cKKwkgIGhhbmRsZXMgcGFkIGJlaW5nIE5PVF9MSU5LRUQgb3IgaW4gV1JPTkdfU1RBVEUuCisKKzIwMDYtMDEtMjYgMDg6NTc6NDAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgd2luMzIvTUFOSUZFU1Q6IG1vcmUgdXBkYXRpbmcKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB3aW4zMi9NQU5JRkVTVDoKKwkgIG1vcmUgdXBkYXRpbmcKKworMjAwNi0wMS0yNiAwODozOToyMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICB3aW4zMi9NQU5JRkVTVDogcmVtb3ZlIG9ic29sZXRlIGVudHJ5CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogd2luMzIvTUFOSUZFU1Q6CisJICByZW1vdmUgb2Jzb2xldGUgZW50cnkKKworMjAwNi0wMS0yNiAwNjo1NzoxNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBhZGRlZCBjb2RlIGZvciBkb3duc3RyZWFtIGV2ZW50cywgcmV2aWV3ZWQgZG9jcyBpbiBnc3RldmVudC5jCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdGJpbi5jOiAoYmluX2VsZW1lbnRfaXNfc3JjKSwgKHNyY19pdGVyYXRvcl9maWx0ZXIpLAorCSAgKGdzdF9iaW5faXRlcmF0ZV9zb3VyY2VzKSwgKGdzdF9iaW5fc2VuZF9ldmVudCk6CisJICAqIGdzdC9nc3RiaW4uaDoKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X3NlbmRfZXZlbnQpOgorCSAgKiBnc3QvZ3N0ZXZlbnQuYzoKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9zZW5kX2V2ZW50KToKKwkgIGFkZGVkIGNvZGUgZm9yIGRvd25zdHJlYW0gZXZlbnRzLCByZXZpZXdlZCBkb2NzIGluIGdzdGV2ZW50LmMKKworMjAwNi0wMS0yNSAxODowNzowMiArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogV2Ugb25seSBxdWVyeSBwb3NpdGlvbiB1c2luZyB0aGUgY2xvY2sgaW4gdGhlIHBsYXlpbmcgc3RhdGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDYtMDEtMjUgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24pOgorCSAgV2Ugb25seSBxdWVyeSBwb3NpdGlvbiB1c2luZyB0aGUgY2xvY2sgaW4gdGhlIHBsYXlpbmcgc3RhdGUuCisJICBRdWVyeSBwZWVyIGluIHRoZSBvdGhlciBjYXNlcy4KKwkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oOiBVcGRhdGVzLgorCisyMDA2LTAxLTI0IDE2OjIzOjE3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0c3lzdGVtY2xvY2suYzogQSBjbG9jayBlbnRyeSB0aGF0IGlzIHNjaGVkdWxlZCBmb3IgdGhlIGV4YWN0IHRpbWUgb2YgdGhlIGNsb2NrIGlzIHN0aWxsIGluIHRpbWUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6IChnc3Rfc3lzdGVtX2Nsb2NrX2lkX3dhaXRfdW5sb2NrZWQpOgorCSAgQSBjbG9jayBlbnRyeSB0aGF0IGlzIHNjaGVkdWxlZCBmb3IgdGhlIGV4YWN0IHRpbWUgb2YgdGhlCisJICBjbG9jayBpcyBzdGlsbCBpbiB0aW1lLgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2hhbmRsZV9vYmplY3QpLAorCSAgKGdzdF9iYXNlX3NpbmtfZG9fc3luYyk6CisJICBBZGQgc29tZSBtb3JlIGRlYnVnIGluZm8uCisKKzIwMDYtMDEtMjMgMTI6Mzc6MzMgKzAwMDAgIFPDqWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KKworCSAgd2luMzIvdnM3OiBBZGQgbmV3IHZzNyBwcm9qZWN0IGZpbGVzIGFuZCBzb2x1dGlvbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB3aW4zMi92czcgOgorCSAgQWRkIG5ldyB2czcgcHJvamVjdCBmaWxlcyBhbmQgc29sdXRpb24uCisKKzIwMDYtMDEtMjMgMTI6MjM6MDAgKzAwMDAgIFPDqWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KKworCSAgd2luMzIvdnM3OiBhbGwgZmlsZXMgcmVtb3ZlZCBhcyB0aGV5IHdlcmUgb3V0LWRhdGVkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHdpbjMyL3ZzNzoKKwkgIGFsbCBmaWxlcyByZW1vdmVkIGFzIHRoZXkgd2VyZSBvdXQtZGF0ZWQuCisKKzIwMDYtMDEtMjAgMTk6MDE6NTkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBkb2NzL3JhbmRvbS9yZWxlYXNlOiB1cGRhdGUgbm90ZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL3JhbmRvbS9yZWxlYXNlOgorCSAgdXBkYXRlIG5vdGVzCisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5faW5pdCk6CisJICAqIGdzdC9nc3RidXMuYzogKGdzdF9idXNfbmV3KToKKwkgICogZ3N0L2dzdGJ1cy5oOgorCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9pbml0KToKKwkgIHVzZSBnc3RfYnVzX25ldygpLCBpbXByb3ZlIGxvZ2dpbmcsIGZpeCBkb2NzCisJICAqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkgIHVwZGF0ZSBmb3IgY3ZzIGJ1aWxkCisKKzIwMDYtMDEtMjAgMTg6NTk6MDAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBhdXRvZ2VuLnNoOiB1cCByZXF1aXJlZCB2ZXJzaW9uIG9mIGF1dG9tYWtlIHRvIDEuNworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGF1dG9nZW4uc2g6CisJICB1cCByZXF1aXJlZCB2ZXJzaW9uIG9mIGF1dG9tYWtlIHRvIDEuNworCisyMDA2LTAxLTIwIDEyOjUzOjQwICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+CisKKwkgIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOiBleHBvcnQgZ3N0X2J1ZmZlcl9pc19tZXRhZGF0YV93cml0YWJsZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgZXhwb3J0IGdzdF9idWZmZXJfaXNfbWV0YWRhdGFfd3JpdGFibGUKKworMjAwNi0wMS0yMCAxMTo0NjowMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgQWRkIGdzdF9ldmVudF9yZXBsYWNlKCkgKCMzMjcwMDEpCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdGV2ZW50Lmg6CisJICBBZGQgZ3N0X2V2ZW50X3JlcGxhY2UoKSAoIzMyNzAwMSkKKworMjAwNi0wMS0yMCAwOTo1NjozOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHBhZC5jOiBNYWtlIGl0IGFjdHVhbGx5IGNvbXBpbGUgdG9vLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2xpbmtfY2hlY2tfY29tcGF0aWJsZV91bmxvY2tlZCk6CisJICBNYWtlIGl0IGFjdHVhbGx5IGNvbXBpbGUgdG9vLi4KKworMjAwNi0wMS0yMCAwOTo1MzoyNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGNhcHMuYzogQ2xhcmlmeSBiZWhhdmlvdXIgb2YgX2lzX2VxdWFsKCkgd2hlbiBwYXNzaW5nIE5VTEwgcGFyYW1ldGVycy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0Y2Fwcy5jOgorCSAgQ2xhcmlmeSBiZWhhdmlvdXIgb2YgX2lzX2VxdWFsKCkgd2hlbiBwYXNzaW5nIE5VTEwgcGFyYW1ldGVycy4KKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9saW5rX2NoZWNrX2NvbXBhdGlibGVfdW5sb2NrZWQpLAorCSAgKGdzdF9wYWRfc2V0X2NhcHMpOgorCSAgQ2xlYW51cHMuIERvbid0IHVucmVmIE5VTEwgY2Fwcy4KKwkgIFdoZW4gc2V0dGluZyB0aGUgc2FtZSBjYXBzLCBwcm90ZWN0IGNhcHMgb2YgdGhlIHBhZCB3aXRoCisJICBwcm9wZXIgbG9jay4KKwkgIFVzZSBmdWxsIGZ1bmN0aW9uYWxpdHkgb2YgX2lzX2VxdWFsKCkgd2hlbiBjb21wYXJpbmcgY2Fwcy4KKworMjAwNi0wMS0yMCAwOToyNjowMCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogRG9uJ3QgbG9vcCBpbmZpbml0ZWx5IGlmIHRoZXJlIGFyZSBubyBidWZmZXJzIHRvIHByZXNlbnQuIFBhcnRpYWxseSBmaXhlcyAjMzI3MTk3LCBidS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0X3BhZHNfaXNfY29sbGVjdGVkKToKKwkgIERvbid0IGxvb3AgaW5maW5pdGVseSBpZiB0aGVyZSBhcmUgbm8gYnVmZmVycyB0byBwcmVzZW50LiBQYXJ0aWFsbHkKKwkgIGZpeGVzICMzMjcxOTcsIGJ1dCBjb2xsZWN0cGFkcyBpcyBqdXN0IGJyb2tlbiBmb3IgcmV1c2luZyBlbGVtZW50cworCSAgdG8gZG8gbXVsdGlwbGUgZW5jb2RlcyBhdG0uCisKKzIwMDYtMDEtMjAgMDk6MTI6MTAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICB0b29scy86IFVSTF9IQU5ETEVSIGlzIG5vdCBhIHBsdWdpbiBmZWF0dXJlIHdlIGNhbiBzZWFyY2ggZm9yIGluIHRoZSByZWdpc3RyeS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAocHJpbnRfZWxlbWVudF9mZWF0dXJlcyk6CisJICAqIHRvb2xzL2dzdC14bWxpbnNwZWN0LmM6IChtYWluKToKKwkgIFVSTF9IQU5ETEVSIGlzIG5vdCBhIHBsdWdpbiBmZWF0dXJlIHdlIGNhbiBzZWFyY2ggZm9yIGluCisJICB0aGUgcmVnaXN0cnkuCisKKzIwMDYtMDEtMTkgMTg6MDY6MTggKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkgIGdzdC9nc3RlbGVtZW50LmM6IFdoZW4gYWN0aXZhdGluZywgZG8gc3JjIHBhZHMgZmlyc3QsIHRoZW4gc2luayBwYWRzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9wYWRzX2FjdGl2YXRlKToKKwkgIFdoZW4gYWN0aXZhdGluZywgZG8gc3JjIHBhZHMgZmlyc3QsIHRoZW4gc2luayBwYWRzLgorCSAgV2hlbiBkZS1hY3RpdmF0aW5nLCBkbyBzaW5rIHBhZHMgZmlyc3QsIHRoZW4gc3JjIHBhZHMuCisKKzIwMDYtMDEtMTkgMTQ6MDI6MDQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBBZGQgZ3N0X2luZGV4X2FkZF9hc3NvY2lhdGlvbnYgdG8gdGhlIGRvY3MKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgQWRkIGdzdF9pbmRleF9hZGRfYXNzb2NpYXRpb252IHRvIHRoZSBkb2NzCisKKzIwMDYtMDEtMTkgMTM6MzA6MzEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBnc3QvZ3N0ZXZlbnQuYzogRml4IGRvY3MgdHlwbworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RldmVudC5jOgorCSAgRml4IGRvY3MgdHlwbworCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfaGFuZGxlX3NpbmtfZXZlbnQpLAorCSAgKGdzdF9xdWV1ZV9jaGFpbiksIChnc3RfcXVldWVfcHVzaF9vbmUpLCAoZ3N0X3F1ZXVlX2xvb3ApOgorCSAgRG8gc29tZSByZWZhY3RvcmluZy4gRG9lc24ndCBhY3R1YWxseSBjaGFuZ2UgZnVuY3Rpb25hbGl0eSwKKwkgIGJ1dCBtYWtlcyBsYW5kaW5nIHRoZSBEUkFJTiBldmVudCBlYXNpZXIgbGF0ZXIuCisKKzIwMDYtMDEtMTkgMTA6Mzk6MjcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGRvY3MvcHdnL2FkdmFuY2VkLXNjaGVkdWxpbmcueG1sOiBVcGRhdGUgZnJvbSAwLjkueCB0byAwLjEwIEFQSSBhbmQgbWFrZSBleGFtcGxlIGEgYml0IGNsZWFyZXIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9wd2cvYWR2YW5jZWQtc2NoZWR1bGluZy54bWw6CisJICBVcGRhdGUgZnJvbSAwLjkueCB0byAwLjEwIEFQSSBhbmQgbWFrZSBleGFtcGxlIGEgYml0CisJICBjbGVhcmVyLgorCisyMDA2LTAxLTE5IDA5OjI0OjAzICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogQWRkIGdzdF9idWZmZXJfKGlzfG1ha2UpX21ldGFkYXRhX3dyaXRhYmxlIG1ldGhvZHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgIEFkZCBnc3RfYnVmZmVyXyhpc3xtYWtlKV9tZXRhZGF0YV93cml0YWJsZSBtZXRob2RzLgorCisyMDA2LTAxLTE5IDA5OjA4OjE1ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1zcGFyc2VzdHJlYW1zLnR4dDogVXBkYXRlIHNwYXJzZSBzdHJlYW1zIGRvYworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtc3BhcnNlc3RyZWFtcy50eHQ6CisJICBVcGRhdGUgc3BhcnNlIHN0cmVhbXMgZG9jCisKKzIwMDYtMDEtMTkgMDk6MDI6MTIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQ6IFJlbW92ZSBtZW50aW9uIG9mIEZJTExFUiBldmVudHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1ldmVudHMudHh0OgorCSAgUmVtb3ZlIG1lbnRpb24gb2YgRklMTEVSIGV2ZW50cy4KKwkgIEFkZCBEUkFJTiBldmVudC4KKwkgICogZG9jcy9kZXNpZ24vcGFydC1zcGFyc2VzdHJlYW1zLnR4dDoKKwkgIFdyaXRlIHNvbWUgdGhpbmdzIGFib3V0IHVzaW5nIE5FV1NFR01FTlQgdG8ga2VlcCBzcGFyc2Ugc3RyZWFtcworCSAgZmxvd2luZy4KKworMjAwNi0wMS0xOCAxODo1Njo0NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdGJpbi5jOiBHdWFyZCBnc3Rfb2JqZWN0X3VucmVmIGNhbGwgYWdhaW5zdCBhIE5VTEwgb2JqZWN0IChkaXNwb3NlIGNhbiB0aGVvcmV0aWNhbGx5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcykuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9kaXNwb3NlKToKKwkgIEd1YXJkIGdzdF9vYmplY3RfdW5yZWYgY2FsbCBhZ2FpbnN0IGEgTlVMTCBvYmplY3QgKGRpc3Bvc2UKKwkgIGNhbiB0aGVvcmV0aWNhbGx5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcykuCisKKzIwMDYtMDEtMTggMTg6MDU6NDMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQ6IFJlbW92ZSBtZW50aW9uIG9mIEZJTExFUiBldmVudHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1ldmVudHMudHh0OgorCSAgUmVtb3ZlIG1lbnRpb24gb2YgRklMTEVSIGV2ZW50cy4KKwkgIEFkZCBEUkFJTiBldmVudC4KKwkgICogZG9jcy9kZXNpZ24vcGFydC1zcGFyc2VzdHJlYW1zLnR4dDoKKwkgIFdyaXRlIHNvbWUgdGhpbmdzIGFib3V0IHVzaW5nIE5FV1NFR01FTlQgdG8ga2VlcCBzcGFyc2Ugc3RyZWFtcworCSAgZmxvd2luZy4KKworMjAwNi0wMS0xOCAxODowMTo1NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0LzogQWRkZWQgc29tZSBtb3JlIGRlYnVnIGluZm8uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9lbGVtZW50X3NldF9zdGF0ZSk6CisJICAqIGdzdC9nc3RjbG9jay5jOiAoZ3N0X2Nsb2NrX2lkX3dhaXQpOgorCSAgQWRkZWQgc29tZSBtb3JlIGRlYnVnIGluZm8uCisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgorCSAgQWRkZWQgbW9yZSBkb2NzLgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2hhbmRsZV9vYmplY3QpLAorCSAgKGdzdF9iYXNlX3NpbmtfZG9fc3luYyksIChnc3RfYmFzZV9zaW5rX2NoYWluKToKKwkgIEFkZGVkIHNvbWUgY29tbWVudHMuCisKKzIwMDYtMDEtMTggMTc6NTk6MDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5naXRpZ25vcmU6CisJICBJZ25vcmUgZmFrZXNpbmsgdGVzdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgSWdub3JlIGZha2VzaW5rIHRlc3QuCisKKzIwMDYtMDEtMTggMTc6NTc6NTcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIHRlc3RzL2NoZWNrLzogQWRkZWQgZmFrZXNpbmsgdGVzdCB0aGF0IGNoZWNrcyBwcmVyb2xsaW5nIGFuZCBjbGlwcGluZyBiZWhhdmlvdXIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzaW5rLmM6IChjaGFpbl9hc3luY19idWZmZXIpLAorCSAgKGNoYWluX2FzeW5jKSwgKGNoYWluX2FzeW5jX3JldHVybiksIChHU1RfU1RBUlRfVEVTVCksCisJICAoZmFrZXNpbmtfc3VpdGUpLCAobWFpbik6CisJICBBZGRlZCBmYWtlc2luayB0ZXN0IHRoYXQgY2hlY2tzIHByZXJvbGxpbmcgYW5kIGNsaXBwaW5nCisJICBiZWhhdmlvdXIuCisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgTWFrZSBjaGVjayBydW4gZmFzdGVyIHNvIHRoYXQgYnVpbGRib3RzIGRvbid0IHRpbWVvdXQuCisKKzIwMDYtMDEtMTggMTc6MTg6MzkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogU29tZSBjbGVhbnVwcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2hhbmRsZV9vYmplY3QpLAorCSAgKGdzdF9iYXNlX3NpbmtfZG9fc3luYyk6CisJICBTb21lIGNsZWFudXBzLgorCSAgV2hlbiB0aGUgc2luayBmaW5pc2hlcyBibG9ja2luZyBvbiB0aGUgcHJlcm9sbCBidWZmZXIsIGl0IGNhbgorCSAgaW1tZWRpYXRseSByZW5kZXIgaXQgaW5zdGVhZCBvZiByZW5kZXJpbmcgd2hlbiB0aGUgbmV4dCBidWZmZXIKKwkgIGFycml2ZXMuCisKKzIwMDYtMDEtMTggMTY6NDA6MTYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogU21hbGwgY2xlYW51cHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19zZXRfcHJvcGVydHkpLAorCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3Byb3BlcnR5KSwgKGdzdF9iYXNlX3NpbmtfZG9fc3luYyksCisJICAoZ3N0X2Jhc2Vfc2lua19jaGFpbik6CisJICBTbWFsbCBjbGVhbnVwcy4KKwkgIEdTVF9FTEVNRU5UX0NMT0NLIGFuZCBzeW5jIGFyZSBwcm90ZWN0ZWQgd2l0aCBMT0NLLgorCSAgRG9uJ3Qgc3RvcmUgX2xhc3Rfc3RvcCBpZiB0aGUgYnVmZmVyIGlzIGRyb3BwZWQuCisKKzIwMDYtMDEtMTggMTY6MzE6NDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6ICdoYXZlLXR5cGUnIHNpZ25hbCBuZWVkcyB0byBiZSBHX1NJR05BTF9SVU5fRklSU1QsIGFzIGl0IGlzIHRoZSBvYmplY3QgbWV0aG9kIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6CisJICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NsYXNzX2luaXQpOgorCSAgJ2hhdmUtdHlwZScgc2lnbmFsIG5lZWRzIHRvIGJlIEdfU0lHTkFMX1JVTl9GSVJTVCwgYXMgaXQgaXMgdGhlCisJICBvYmplY3QgbWV0aG9kIGhhbmRsZXIgdGhhdCBzZXRzIHRoZSBjYXBzIG9uIHRoZSBwYWQgYW5kIHdlIHdhbnQKKwkgIHRoYXQgdG8gaGFwcGVuIGJlZm9yZSB3ZSBlbWl0IHRoZSBzaWduYWwgKGZpeGVzIGUuZy4gZmVlZGluZyBhCisJICBwbGFpbiB0ZXh0IGZpbGUgdG8gZGVjb2RlYmluKS4KKworMjAwNi0wMS0xOCAxMTo0NDo1NSArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBnc3QvZ3N0cGx1Z2luLmM6CisJICBhZGQgTVBMIGFuZCBQcm9wZXJpZXRhcnQgdG8gbGlzdCBvZiBsaWNlbnNlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGQgTVBMIGFuZCBQcm9wZXJpZXRhcnQgdG8gbGlzdCBvZiBsaWNlbnNlcworCisyMDA2LTAxLTE4IDA5OjQyOjEyICswMDAwICBUb3JzdGVuIFNjaG9lbmZlbGQgPGthZmZlZXRpc2NoQGdteC5kZT4KKworCSAgZ3N0L2dzdGluZGV4LmggKGdzdF9pbmRleF9hZGRfYXNzb2NpYXRpb252KTogQWRkIHRvIGhlYWRlci4gVGhlIHN5bWJvbCB3YXMgZXhwb3J0ZWQgYmVmb3JlLCBpdCBhcHBlYXJzIHRoaXMgd2FzIGp1c3QgLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDYtMDEtMTggIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3RpbmRleC5oIChnc3RfaW5kZXhfYWRkX2Fzc29jaWF0aW9udik6IEFkZCB0byBoZWFkZXIuIFRoZQorCSAgc3ltYm9sIHdhcyBleHBvcnRlZCBiZWZvcmUsIGl0IGFwcGVhcnMgdGhpcyB3YXMganVzdCBhbiBvdmVyc2lnaHQuCisJICBGaXhlcyAjMTY4NzAzLgorCSAgUGF0Y2ggYnk6IFRvcnN0ZW4gU2Nob2VuZmVsZCA8a2FmZmVldGlzY2ggYXQgZ214LmRlPgorCSAgKiBnc3QvZ3N0aW5kZXguYyAoZ3N0X2luZGV4X2FkZF9hc3NvY2lhdGlvbnYpOiBDaGFuZ2VkIGludCBpbgorCSAgcHJvdG90eXBlIHRvIGdpbnQuIE9LIHNpbmNlIHRoaXMgcHJvdG90eXBlIHdhcyBub3QgaW4gdGhlIGhlYWRlci4KKworMjAwNi0wMS0xNyAxNjozOToyMyArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgorCisJKiBkb2NzL21hbnVhbC9hcHBlbmRpeC1saWNlbnNpbmcueG1sOgorCSAgc21hbGwgZml4IHRvIHRoZSBwcm9wb3NlZCBsaWNlbnNlIGNsYXVzZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBzbWFsbCBmaXggdG8gdGhlIHByb3Bvc2VkIGxpY2Vuc2UgY2xhdXNlCisKKzIwMDYtMDEtMTcgMTI6NTM6MDcgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdHJlZ2lzdHJ5LmMgKF9nc3RfcmVnaXN0cnlfcmVtb3ZlX2NhY2hlX3BsdWdpbnMpOiBMb2NrIHRoZSByZWdpc3RyeSB3aGlsZSB3ZSByZW1vdmUgcGx1Z2lucy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNi0wMS0xNyAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdHJlZ2lzdHJ5LmMgKF9nc3RfcmVnaXN0cnlfcmVtb3ZlX2NhY2hlX3BsdWdpbnMpOiBMb2NrIHRoZQorCSAgcmVnaXN0cnkgd2hpbGUgd2UgcmVtb3ZlIHBsdWdpbnMuCisJICAqIHRvb2xzL2dzdC1pbnNwZWN0LmMgKHByaW50X2VsZW1lbnRfaW5mbyk6IERvbid0IHVucmVmIHRoZQorCSAgZmFjdG9yeSBhcmcsIHRoYXQgc2hvdWxkIGJlIHRoZSByZXNwb25zaWJpbGl0eSBvZiB3aGF0ZXZlciBjb2RlCisJICByZWNlaXZlZCB0aGUgcmVmLiBGaXhlcyBhIGRvdWJsZS1mcmVlIHdoZW4gY2FsbGVkIGZyb20KKwkgIHByaW50X2VsZW1lbnRfbGlzdCB2aWEgZ3N0LWluc3BlY3QtMC4xMCAtYS4gRml4ZXMgIzMyNzMyNC4KKwkgIChtYWluKTogVW5yZWYgdGhlIGZhY3RvcnkgaWYgd2UgaGF2ZSBvbmUuCisJICAocHJpbnRfZWxlbWVudF9saXN0KTogTm8gY2hhbmdlIC0tIHJlbGllcyBvbiB0aGUKKwkgIHBsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSB0byBmcmVlIHRoZSBsaXN0IG9mIGZlYXR1cmVzLgorCisyMDA2LTAxLTE3IDEyOjE0OjIwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgUmVwbGFjZSBnc3RfYnVmZmVyXyhtYWtlfGlzKV9tZXRhZGF0YV93cml0YWJsZSBwYXRjaCBub3cgdGhhdCB0aGUgcmVsZWFzZSBpcyBvdXQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJ1ZmZlci5jOiAoZ3N0X2J1ZmZlcl9pc19tZXRhZGF0YV93cml0YWJsZSksCisJICAoZ3N0X2J1ZmZlcl9tYWtlX21ldGFkYXRhX3dyaXRhYmxlKToKKwkgICogZ3N0L2dzdGJ1ZmZlci5oOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fcHJlcGFyZV9vdXRwdXRfYnVmKToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6IChnc3RfY2Fwc2ZpbHRlcl9wcmVwYXJlX2J1Zik6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXIuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF90ZXN0X3N1aXRlKToKKwkgIFJlcGxhY2UgZ3N0X2J1ZmZlcl8obWFrZXxpcylfbWV0YWRhdGFfd3JpdGFibGUgcGF0Y2ggbm93CisJICB0aGF0IHRoZSByZWxlYXNlIGlzIG91dC4KKworMjAwNi0wMS0xNyAxMjowODo0MyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0cmVnaXN0cnkuYzogUmVmbG93IGRlc2lnbiBjb21tZW50LiBVcGRhdGUgc28gYXMgdG8gc3BlYWsgaW4gdGhlIHByZXNlbnQgdGVuc2Ugd2l0aG91dCByZWZlcmVuY2UgdG8gdmVyc2lvbnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDYtMDEtMTcgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3RyZWdpc3RyeS5jOiBSZWZsb3cgZGVzaWduIGNvbW1lbnQuIFVwZGF0ZSBzbyBhcyB0byBzcGVhaworCSAgaW4gdGhlIHByZXNlbnQgdGVuc2Ugd2l0aG91dCByZWZlcmVuY2UgdG8gdmVyc2lvbnMuCisJICAqIGdzdC9nc3RyZWdpc3RyeS5jIChnc3RfcmVnaXN0cnlfYWRkX3BsdWdpbikKKwkgIChnc3RfcmVnaXN0cnlfcmVtb3ZlX3BsdWdpbiwgZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9mZWF0dXJlKQorCSAgKGdzdF9yZWdpc3RyeV9maW5kX2ZlYXR1cmUsIGdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0KQorCSAgKGdzdF9yZWdpc3RyeV9nZXRfcGx1Z2luX2xpc3QsIGdzdF9yZWdpc3RyeV9sb29rdXBfZmVhdHVyZSkKKwkgIChnc3RfcmVnaXN0cnlfbG9va3VwLCBnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoKQorCSAgKF9nc3RfcmVnaXN0cnlfcmVtb3ZlX2NhY2hlX3BsdWdpbnMpCisJICAoZ3N0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3RfYnlfcGx1Z2luKTogQWRkIGFyZ3VtZW50CisJICB2YWxpZGF0aW9uLgorCisyMDA2LTAxLTE2IDIxOjAwOjUzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogY29uZmlndXJlLmFjOgorCSAgYmFjayB0byBIRUFECisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGJhY2sgdG8gSEVBRAorCis9PT0gcmVsZWFzZSAwLjEwLjIgPT09CisKKzIwMDYtMDEtMTYgMjA6NTk6MzggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBORVdTOgorCSogUkVMRUFTRToKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICByZWxlYXNpbmcgMC4xMC4yCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJlbGVhc2luZyAwLjEwLjIKKworMjAwNi0wMS0xNiAxNTo0MjowOCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIEJhY2sgb3V0IHBhdGNoIHVudGlsIGFmdGVyIHRoZSByZWxlYXNlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RidWZmZXIuYzoKKwkgICogZ3N0L2dzdGJ1ZmZlci5oOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fcHJlcGFyZV9vdXRwdXRfYnVmKToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6IChnc3RfY2Fwc2ZpbHRlcl9wcmVwYXJlX2J1Zik6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXIuYzogKGdzdF90ZXN0X3N1aXRlKToKKwkgIEJhY2sgb3V0IHBhdGNoIHVudGlsIGFmdGVyIHRoZSByZWxlYXNlLgorCisyMDA2LTAxLTE2IDE0OjM3OjU0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZ3N0L2dzdG1pbmlvYmplY3QuYzogU3BlbGxpbmcgZml4IGluIGRvY3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdG1pbmlvYmplY3QuYzoKKwkgIFNwZWxsaW5nIGZpeCBpbiBkb2NzLgorCSAgKiBDaGFuZ2VMb2cgLSByZW1vdmUgY29uZmxpY3QgaW5kaWNhdG9yCisKKzIwMDYtMDEtMTYgMTQ6Mzc6MDEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICAoTWlzc2VkIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jIGluIHByZXZpb3VzIGNvbW1pdCkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKE1pc3NlZCBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYyBpbiBwcmV2aW91cyBjb21taXQpCisJICBSZXZpZXdlZCBCeTogQW5keSBXaW5nbworCSAgKiBnc3QvZ3N0YnVmZmVyLmM6IChnc3RfYnVmZmVyX2lzX21ldGFkYXRhX3dyaXRhYmxlKSwKKwkgIChnc3RfYnVmZmVyX21ha2VfbWV0YWRhdGFfd3JpdGFibGUpOgorCSAgKiBnc3QvZ3N0YnVmZmVyLmg6CisJICBBZGQgZ3N0X2J1ZmZlcl8oaXN8bWFrZSlfbWV0YWRhdGFfd3JpdGFibGUgYXMgYW5hbG9ndWVzIG9mCisJICBnc3RfYnVmZmVyXyhpc3xtYWtlKV93cml0YWJsZS4KKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3ByZXBhcmVfb3V0cHV0X2J1Zik6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOiAoZ3N0X2NhcHNmaWx0ZXJfcHJlcGFyZV9idWYpOgorCSAgVXNlIG5hbWUgZ3N0X2J1ZmZlcl8oaXN8bWFrZSlfbWV0YWRhdGFfd3JpdGFibGUgZnVuY3Rpb25zLgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RfdGVzdF9zdWl0ZSk6CisJICBUZXN0IGdzdF9idWZmZXJfKGlzfG1ha2UpX21ldGFkYXRhX3dyaXRhYmxlCisJICAoQ2xvc2VzOiAjMzI0MTYyKQorCisyMDA2LTAxLTE2IDE0OjMyOjMzICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZ3N0L2dzdGJ1ZmZlci4qOiBBZGQgZ3N0X2J1ZmZlcl8oaXN8bWFrZSlfbWV0YWRhdGFfd3JpdGFibGUgYXMgYW5hbG9ndWVzIG9mIGdzdF9idWZmZXJfKGlzfG1ha2UpX3dyaXRhYmxlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBSZXZpZXdlZCBCeTogQW5keSBXaW5nbworCSAgKiBnc3QvZ3N0YnVmZmVyLmM6IChnc3RfYnVmZmVyX2lzX21ldGFkYXRhX3dyaXRhYmxlKSwKKwkgIChnc3RfYnVmZmVyX21ha2VfbWV0YWRhdGFfd3JpdGFibGUpOgorCSAgKiBnc3QvZ3N0YnVmZmVyLmg6CisJICBBZGQgZ3N0X2J1ZmZlcl8oaXN8bWFrZSlfbWV0YWRhdGFfd3JpdGFibGUgYXMgYW5hbG9ndWVzIG9mCisJICBnc3RfYnVmZmVyXyhpc3xtYWtlKV93cml0YWJsZS4KKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3ByZXBhcmVfb3V0cHV0X2J1Zik6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOiAoZ3N0X2NhcHNmaWx0ZXJfcHJlcGFyZV9idWYpOgorCSAgVXNlIG5hbWUgZ3N0X2J1ZmZlcl8oaXN8bWFrZSlfbWV0YWRhdGFfd3JpdGFibGUgZnVuY3Rpb25zLgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RfdGVzdF9zdWl0ZSk6CisJICBUZXN0IGdzdF9idWZmZXJfKGlzfG1ha2UpX21ldGFkYXRhX3dyaXRhYmxlCisJICAoQ2xvc2VzOiAjMzI0MTYyKQorCisyMDA2LTAxLTE0IDIyOjU5OjQ2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogY29uZmlndXJlLmFjOgorCSogcG8vYWYucG86CisJKiBwby9hei5wbzoKKwkqIHBvL2JnLnBvOgorCSogcG8vY2EucG86CisJKiBwby9jcy5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJKiBwby96aF9UVy5wbzoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkgIHByZXJlbGVhc2UKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcHJlcmVsZWFzZQorCisyMDA2LTAxLTE0IDE0OjEyOjI2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1cy5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGVsZW1lbnQuYzoKKwkgIGFkZCB1bmxpbmsgYW5kIHNvbWUgYXNzZXJ0cworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGQgdW5saW5rIGFuZCBzb21lIGFzc2VydHMKKworMjAwNi0wMS0xNCAxMToyMDo0MCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGRvY3MvbWFudWFsL01ha2VmaWxlLmFtOiBkb24ndCBkbyBwYXJhbGxlbCBtYWtlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9tYW51YWwvTWFrZWZpbGUuYW06CisJICBkb24ndCBkbyBwYXJhbGxlbCBtYWtlCisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgIEFDX1NVQlNUIEhPU1RfQ1BVCisJICAqIHdpbjMyL2NvbW1vbi9jb25maWcuaC5pbjoKKwkgIGFkZCBnZW5lcmF0aW9ucyBmb3IgSE9TVF9DUFUgYW5kIEdTVF9NQUpPUk1JTk9SCisJICAqIHdpbjMyL2NvbW1vbi9jb25maWcuaDogICAgICAgICAgIGNvbW1pdCBnZW5lcmF0ZWQgcmVzdWx0CisKKzIwMDYtMDEtMTMgMTk6NTE6NDggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBkb2NzL3JhbmRvbS9yZWxlYXNlOgorCSAgdXBkYXRlcyB0byByZWxlYXNlIGRvYworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB1cGRhdGVzIHRvIHJlbGVhc2UgZG9jCisKKzIwMDYtMDEtMTMgMTk6MTc6MDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGRvY3MvbWFudWFsL2FwcGVuZGl4LWludGVncmF0aW9uLnhtbDogVXBkYXRlIEdOT01FIGludGVncmF0aW9uIHNlY3Rpb24gdG8gdXNlIGdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXAoKSBpbnN0ZWFkIG9mIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvbWFudWFsL2FwcGVuZGl4LWludGVncmF0aW9uLnhtbDoKKwkgIFVwZGF0ZSBHTk9NRSBpbnRlZ3JhdGlvbiBzZWN0aW9uIHRvIHVzZSBnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwKCkKKwkgIGluc3RlYWQgb2YgdGhlIG9sZCBwb3B0IHN0dWZmICgjMzIyOTExKS4gQWxzbywgR05PTUUgYXBwbGljYXRpb25zCisJICBzaG91bGQgIG5vdyB1c2UgZ2NvbmYqc2luayBhbmQgZ2NvbmYqc3JjIGluc3RlYWQgb2YgdGhlIG9sZCBnY29uZgorCSAgaGVscGVyIGxpYiB3ZSBoYWQuCisKKzIwMDYtMDEtMTMgMTY6MTY6MjQgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KKworCSogZ3N0cmVhbWVyLnNwZWMuaW46CisJICByZW1vdmluZyAwMTAgc3VmZml4aW5nIG9mIHBhY2thZ2UgbmFtZSBhcyBGZWRvcmEgb25seSB1c2UgaXQgZm9yIDAuOCwgd2FudCB0byBoYXZlIHRoZSBwYWNrYWdlcyBiZSBpbnRlcmNoYW5nZWFibGUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVtb3ZpbmcgMDEwIHN1ZmZpeGluZyBvZiBwYWNrYWdlIG5hbWUgYXMgRmVkb3JhIG9ubHkgdXNlIGl0IGZvciAwLjgsIHdhbnQKKwkgIHRvIGhhdmUgdGhlIHBhY2thZ2VzIGJlIGludGVyY2hhbmdlYWJsZQorCisyMDA2LTAxLTEzIDE0OjU5OjAwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogY29uZmlndXJlLmFjOgorCSogcG8vTElOR1VBUzoKKwkgIHJlYWRkIHpoX1RXIGFuZCBmb3JjZSBhbiBhdXRvZ2VuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJlYWRkIHpoX1RXIGFuZCBmb3JjZSBhbiBhdXRvZ2VuCisKKzIwMDYtMDEtMTMgMTQ6MjE6NDggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZG9jcy86IGFkZCBuZXcgQVBJIGVudHJpZXMgdG8gdGhlIGRvY3MKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSAgYWRkIG5ldyBBUEkgZW50cmllcyB0byB0aGUgZG9jcworCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmFtOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmg6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlcnByaXZhdGUuaDoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RoZWxwZXIuYzoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6CisJICBtb3ZlIHByaXZhdGUgc3RydWN0cyB0byBwcml2YXRlIGhlYWRlcgorCSAgKiBwby9SRUFETUU6CisJICBnc3RyZWFtZXItMC43IC0+IGdzdHJlYW1lci0wLjEwCisJICAqIHRlc3RzL2NoZWNrL2xpYnMvc3RydWN0X2kzODYuaDoKKwkgIHJlbW92ZSBwcml2YXRlIHN0cnVjdHMKKworMjAwNi0wMS0xMyAxNDoxOTozNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHBvL1BPVEZJTEVTLmluOgorCSAgdHJpZ2dlciBhIHJlYnVpbGQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgdHJpZ2dlciBhIHJlYnVpbGQKKworMjAwNi0wMS0xMyAxNDoxOToxMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHBvL0xJTkdVQVM6CisJICB0cmlnZ2VyIGEgcmVidWlsZAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB0cmlnZ2VyIGEgcmVidWlsZAorCisyMDA2LTAxLTEzIDE0OjEyOjU1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgcGx1Z2lucy9pbmRleGVycy9NYWtlZmlsZS5hbTogRml4ZXMgYXMgcGFydCBvZiAjMzE3MDQ4CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9pbmRleGVycy9NYWtlZmlsZS5hbToKKwkgIEZpeGVzIGFzIHBhcnQgb2YgIzMxNzA0OAorCisyMDA2LTAxLTEzIDEzOjQxOjU1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgcGx1Z2lucy9pbmRleGVycy9NYWtlZmlsZS5hbTogZml4ICMzMTYwODYgLSBjb21waWxhdGlvbiB3aGVuIG1tYXAgaXMgbWlzc2luZworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvaW5kZXhlcnMvTWFrZWZpbGUuYW06CisJICBmaXggIzMxNjA4NiAtIGNvbXBpbGF0aW9uIHdoZW4gbW1hcCBpcyBtaXNzaW5nCisKKzIwMDYtMDEtMTIgMjI6MDQ6NTggKzAwMDAgIFPDqWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KKworCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAqY3VyID0gKG5vdyAtIGJhc2UpICogYmFzZXNpbmstPnNlZ21lbnQuYWJzX3JhdGUgKyB0aW1lOyByZXBsYWNlZCBieQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgICpjdXIgPSAobm93IC0gYmFzZSkgKiBiYXNlc2luay0+c2VnbWVudC5hYnNfcmF0ZSArIHRpbWU7IHJlcGxhY2VkIGJ5CisJICAqY3VyID0gZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZShub3cgLSBiYXNlKSAqIGJhc2VzaW5rLT5zZWdtZW50LmFic19yYXRlICsgdGltZTsgZm9yIHZzNgorCSAgKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICBhZGRlZCBzb21lIGRlZmluZXMgR1NUX01BSk9STUlOT1IgYW5kIEhPU1RfQ1BVCisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKKwkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBhZGRlZCBzb21lIGV4cG9ydGVkIGZ1bmN0aW9ucworCisyMDA2LTAxLTEyIDIxOjU1OjQyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvOiBtYWtlIEdfVFlQRV9TVFJJTkcgY29udHJvbGFibGUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKKwkgIChnc3RfY29udHJvbGxlZF9wcm9wZXJ0eV9zZXRfaW50ZXJwb2xhdGlvbl9tb2RlKSwKKwkgIChnc3RfY29udHJvbGxlZF9wcm9wZXJ0eV9uZXcpOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuaDoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6CisJICAoaW50ZXJwb2xhdGVfbm9uZV9nZXRfc3RyaW5nX3ZhbHVlX2FycmF5KToKKwkgIG1ha2UgR19UWVBFX1NUUklORyBjb250cm9sYWJsZQorCisyMDA2LTAxLTEyIDE2OjMxOjM1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIHRvb2xzLzogY2xlYW51cCBtYW4tcGFnZXMsIHJlbW92ZSByZWZlcmVuY2UgdG8gZ3N0LXJlZ2lzdGVyLCBkb2N1bWVudCBlbnYtdmFycworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL1JFQURNRToKKwkgICogdG9vbHMvZ3N0LWZlZWRiYWNrLjEuaW46CisJICAqIHRvb2xzL2dzdC1pbnNwZWN0LjEuaW46CisJICAqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKKwkgICogdG9vbHMvZ3N0LW1kNXN1bS4xLmluOgorCSAgKiB0b29scy9nc3QtdHlwZWZpbmQuMS5pbjoKKwkgICogdG9vbHMvZ3N0LXhtbGluc3BlY3QuMS5pbjoKKwkgICogdG9vbHMvZ3N0LXhtbGxhdW5jaC4xLmluOgorCSAgY2xlYW51cCBtYW4tcGFnZXMsIHJlbW92ZSByZWZlcmVuY2UgdG8gZ3N0LXJlZ2lzdGVyLCBkb2N1bWVudCBlbnYtdmFycworCisyMDA2LTAxLTEyIDE2OjA3OjUwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZ3N0L2dzdGJ1ZmZlci5jOiBnc3RfYnVmZmVyX3NwYW4gc2hvdWxkIGNvcHkgdGhlIHRpbWVzdGFtcCBvZiB0aGUgZmlyc3QgYnVmZmVyIGlmIHRoZXkgd2VyZSBib3RoIG9yaWdpbmFsbHkgb3ZlcmxhcHBpLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJ1ZmZlci5jOiAoZ3N0X2J1ZmZlcl9zcGFuKToKKwkgIGdzdF9idWZmZXJfc3BhbiBzaG91bGQgY29weSB0aGUgdGltZXN0YW1wIG9mIHRoZSBmaXJzdCBidWZmZXIKKwkgIGlmIHRoZXkgd2VyZSBib3RoIG9yaWdpbmFsbHkgb3ZlcmxhcHBpbmcgc3ViYnVmZmVycyBvZiB0aGUKKwkgIHNhbWUgcGFyZW50LCB1c2luZyB0aGUgc2FtZSBsb2dpYyBhcyB0aGUgJ3Nsb3cgY29weScgY2FzZS4KKworMjAwNi0wMS0xMSAyMTozMjoyMSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogTmVlZCB0byBhd2FrZW4gQUxMIHRoZSBwYWRzIHdoZW4gd2UgcG9wIGEgYnVmZmVyLCBvdGhlcndpc2UgY29sbGVjdHBhZHMgb25seSB3b3JrcyB3aC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0X3BhZHNfcG9wKToKKwkgIE5lZWQgdG8gYXdha2VuIEFMTCB0aGUgcGFkcyB3aGVuIHdlIHBvcCBhIGJ1ZmZlciwgb3RoZXJ3aXNlCisJICBjb2xsZWN0cGFkcyBvbmx5IHdvcmtzIHdoZW4gdGhlcmUgaXMgMiBpbnB1dCBzdHJlYW1zLgorCisyMDA2LTAxLTExIDE5OjE4OjI3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvcmFuZG9tL2Vuc29uaWMvbWVkaWEtZGV2aWNlLWRhZW1vbi50eHQ6IG1vcmUgaWRlYXMgKGRidXMpCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9yYW5kb20vZW5zb25pYy9tZWRpYS1kZXZpY2UtZGFlbW9uLnR4dDoKKwkgIG1vcmUgaWRlYXMgKGRidXMpCisJICAqIGdzdC9nc3RidWZmZXIuYzoKKwkgIGZpeCBkb2MgZXhhbXBsZSwgYWRkIGNsYXJpZmljYXRpb24KKwkgICogdG9vbHMvZ3N0LWxhdW5jaC4xLmluOgorCSAgYWRkIGluaXRpYWwgaW5mbyBhYm91dCBHU1RfUExVR0lOX1BBVEgsIG5lZWRzIG1vcmUgd29yaworCisyMDA2LTAxLTExIDEwOjM4OjU2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBkb2NzL21hbnVhbC86IFNvbWUgbW9yZSBtaW5vciBkb2NzIGFkZGl0aW9ucyBhbmQgdXBkYXRlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtYmlucy54bWw6CisJICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1lbGVtZW50cy54bWw6CisJICAqIGRvY3MvbWFudWFsL2ludHJvLWJhc2ljcy54bWw6CisJICBTb21lIG1vcmUgbWlub3IgZG9jcyBhZGRpdGlvbnMgYW5kIHVwZGF0ZXMuCisKKzIwMDYtMDEtMTEgMTA6MjA6MDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvbWFudWFsLzogU29tZSBzbWFsbCBmaXhlcyBhcyBwb2ludGVkIG91dCBieSBTZXItdmVyIG9uIElSQy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtYmlucy54bWw6CisJICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1lbGVtZW50cy54bWw6CisJICBTb21lIHNtYWxsIGZpeGVzIGFzIHBvaW50ZWQgb3V0IGJ5IFNlci12ZXIgb24gSVJDLgorCisyMDA2LTAxLTEwIDE1OjQyOjI5ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IFNldCB0aGUgYnVmZmVyIG9mZnNldC9vZmZzZXRfZW5kIHRvIEdTVF9DTE9DS19USU1FX05PTkUgd2hlbiB1c2luZyB0aGUgc2luZ2xlLXNlZ21lbnQuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IChnc3RfaWRlbnRpdHlfdHJhbnNmb3JtX2lwKToKKwkgIFNldCB0aGUgYnVmZmVyIG9mZnNldC9vZmZzZXRfZW5kIHRvIEdTVF9DTE9DS19USU1FX05PTkUgd2hlbiB1c2luZworCSAgdGhlIHNpbmdsZS1zZWdtZW50IG1vZGUuCisKKzIwMDYtMDEtMTAgMDk6MjM6MTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy4qOiBOYW1lIChwcml2YXRlKSB1bmlvbjsgbWFrZXMgU3VuJ3MgRm9ydGUgY29tcGlsZXIgaGFwcHkgKCMzMjQ5MDApLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBSZXZpZXdlZCBieTogVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19pbml0KSwKKwkgIChnc3RfYmFzZV9zcmNfcGVyZm9ybV9zZWVrKSwgKGdzdF9iYXNlX3NyY19zZW5kX2V2ZW50KSwKKwkgIChnc3RfYmFzZV9zcmNfc2V0X3Byb3BlcnR5KSwgKGdzdF9iYXNlX3NyY19nZXRfcHJvcGVydHkpLAorCSAgKGdzdF9iYXNlX3NyY19sb29wKSwgKGdzdF9iYXNlX3NyY19zdGFydCksCisJICAoZ3N0X2Jhc2Vfc3JjX2FjdGl2YXRlX3B1c2gpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkgIE5hbWUgKHByaXZhdGUpIHVuaW9uOyBtYWtlcyBTdW4ncyBGb3J0ZSBjb21waWxlciBoYXBweSAoIzMyNDkwMCkuCisKKzIwMDYtMDEtMDkgMTA6NDc6MTcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIFJFQURNRTogZ3N0LXJlZ2lzdGVyIGlzIGdvbmUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogUkVBRE1FOgorCSAgZ3N0LXJlZ2lzdGVyIGlzIGdvbmUuCisKKzIwMDYtMDEtMDcgMTE6MDc6NDIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBwby9MSU5HVUFTOgorCSAgcmVtb3ZlIGFuZCByZWFkZAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICByZW1vdmUgYW5kIHJlYWRkCisKKzIwMDYtMDEtMDcgMTE6MDc6MTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBjb21tb246CisJKiBwby9MSU5HVUFTOgorCSAgcmVtb3ZlIGFuZCByZWFkZAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICByZW1vdmUgYW5kIHJlYWRkCisKKzIwMDYtMDEtMDcgMTA6MDQ6MzYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBnc3QvZ3N0dmFsdWUuYzogbWFrZSB0aGUgR19UWVBFX0RBVEUgaW5zdGFudGlhdGlvbiB3b3JrIGlmIGRlYnVnIGlzIGRpc2FibGVkCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHZhbHVlLmM6IChfZ3N0X3ZhbHVlX2luaXRpYWxpemUpOgorCSAgbWFrZSB0aGUgR19UWVBFX0RBVEUgaW5zdGFudGlhdGlvbiB3b3JrIGlmIGRlYnVnIGlzIGRpc2FibGVkCisKKzIwMDYtMDEtMDcgMDk6NTY6MDEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmcucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGUucG86CisJKiBwby9lbl9HQi5wbzoKKwkqIHBvL2ZyLnBvOgorCSogcG8vaXQucG86CisJKiBwby9uYi5wbzoKKwkqIHBvL25sLnBvOgorCSogcG8vcnUucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJKiBwby96aF9DTi5wbzoKKwkqIHBvL3poX1RXLnBvOgorCSAgdXBkYXRlIHRyYW5zbGF0aW9ucworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB1cGRhdGUgdHJhbnNsYXRpb25zCisKKzIwMDYtMDEtMDYgMTc6MTY6NDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RtZXNzYWdlLmM6IERvbid0IGNyYXNoIHdoZW4gcmV0dXJuIGxvY2F0aW9uIGZvciBlcnJvci93YXJuaW5nIGRlYnVnIHN0cmluZyBpcyBOVUxMOyBhZGQgZmFjdCB0aGF0IHJldHVybiBsb2NhdC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RtZXNzYWdlLmM6IChnc3RfbWVzc2FnZV9wYXJzZV90YWcpLAorCSAgKGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yKSwgKGdzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmcpOgorCSAgRG9uJ3QgY3Jhc2ggd2hlbiByZXR1cm4gbG9jYXRpb24gZm9yIGVycm9yL3dhcm5pbmcgZGVidWcKKwkgIHN0cmluZyBpcyBOVUxMOyBhZGQgZmFjdCB0aGF0IHJldHVybiBsb2NhdGlvbnMgY2FuIGJlCisJICBOVUxMIHRvIGRvY3Mgd2hlcmUgYXBwcm9wcmlhdGUuCisKKzIwMDYtMDEtMDUgMTA6NDM6MDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RwbHVnaW4uYzogUmVwbGFjZSBzdHJkdXAgYnkgZ19zdHJkdXAgYXMgc3VnZ2VzdGVkIGJ5IFNlci12ZXIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBsdWdpbi5jOiAoZ3N0X3BsdWdpbl9sb2FkX2ZpbGUpOgorCSAgUmVwbGFjZSBzdHJkdXAgYnkgZ19zdHJkdXAgYXMgc3VnZ2VzdGVkIGJ5IFNlci12ZXIuCisKKzIwMDYtMDEtMDQgMjM6NTM6MDEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICB1cGRhdGUgY29uZmlnIGZvciAuMQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB1cGRhdGUgY29uZmlnIGZvciAuMQorCisyMDA2LTAxLTA0IDIzOjUyOjM1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZG9jcy9wd2cvYWR2YW5jZWQtdHlwZXMueG1sOiBmaXggZG9jIGJvcmthZ2UKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL3B3Zy9hZHZhbmNlZC10eXBlcy54bWw6CisJICBmaXggZG9jIGJvcmthZ2UKKworMjAwNi0wMS0wNCAyMzo1MDoxOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIHN1Ym1pdHRlZCBieTogQWJlbCBDaGV1bmcKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgc3VibWl0dGVkIGJ5OiBBYmVsIENoZXVuZworCSAgKiBwby9MSU5HVUFTOgorCSAgKiBwby96aF9UVy5wbzoKKwkgIEFkZGVkIENoaW5lc2UgKHRyYWRpdGlvbmFsKSB0cmFuc2xhdGlvbgorCisyMDA2LTAxLTA0IDEyOjQxOjM1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBTbWFsbCB1cGRhdGVzIHRvIHZhcmlvdXMgZG9jcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtcGFkcy54bWw6CisJICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKKwkgICogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLWRvY3Muc2dtbDoKKwkgICogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKKwkgICogZG9jcy9wd2cvYWR2YW5jZWQtY2xvY2sueG1sOgorCSAgKiBkb2NzL3B3Zy9hZHZhbmNlZC1zY2hlZHVsaW5nLnhtbDoKKwkgICogZG9jcy9wd2cvYWR2YW5jZWQtdHlwZXMueG1sOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuaDoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiAoZ3N0X2lkZW50aXR5X2NsYXNzX2luaXQpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5Lmg6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuaDoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuaDoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfY2xhc3NfaW5pdCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50Lmg6CisJICBTbWFsbCB1cGRhdGVzIHRvIHZhcmlvdXMgZG9jcy4KKwkgIEFkZGVkIGNvcmUgcGx1Z2lucyB0byBkb2NzLgorCisyMDA2LTAxLTAzIDE4OjA4OjA0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgY29tbW9uL2dzdC5zdXBwOiBhZGQgYSBzdXBwcmVzc2lvbiBmb3IgbGlib2lsJ3MgdW5pbml0aWFsaXplZCB2YXJpYWJsZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbW1vbi9nc3Quc3VwcDoKKwkgIGFkZCBhIHN1cHByZXNzaW9uIGZvciBsaWJvaWwncyB1bmluaXRpYWxpemVkIHZhcmlhYmxlCisKKzIwMDYtMDEtMDIgMjA6MjY6MDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3R1dGlscy5oOiBBZGQgcHJvdG90eXBlIGZvciBfZ2V0X3R5cGUoKSBmdW5jdGlvbiB0byBHU1RfQk9JTEVSUExBVEVfRlVMTCBtYWNybywgc28gdGhhdCBnY2MgZG9lc24ndCBjb21wbGFpbiBpZi4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBSZXZpZXdlZCBieTogVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgorCSAgKiBnc3QvZ3N0dXRpbHMuaDoKKwkgIEFkZCBwcm90b3R5cGUgZm9yIF9nZXRfdHlwZSgpIGZ1bmN0aW9uIHRvIEdTVF9CT0lMRVJQTEFURV9GVUxMCisJICBtYWNybywgc28gdGhhdCBnY2MgZG9lc24ndCBjb21wbGFpbiBpZiB0aGUgLVdtaXNzaW5nLXByb3RvdHlwZXMKKwkgIGNvbXBpbGVyIHN3aXRjaCBpcyBiZWluZyB1c2VkICgjMzI1NDI5KS4KKworMjAwNS0xMi0yOSAxNjo0NzoyNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdGJpbi5jOiBEaXNhYmxlIGR1cmF0aW9uIHF1ZXJ5IGNhY2hpbmcgaW4gYmlucyB1bnRpbCBpdCBnZXRzIGZpeGVkIChzZWUgIzMyNDgwNykuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9xdWVyeSk6CisJICBEaXNhYmxlIGR1cmF0aW9uIHF1ZXJ5IGNhY2hpbmcgaW4gYmlucyB1bnRpbCBpdCBnZXRzCisJICBmaXhlZCAoc2VlICMzMjQ4MDcpLgorCisyMDA1LTEyLTI3IDE4OjA0OjU4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICB0b29scy9nc3QtaW5zcGVjdC5jOiBIYW5kbGUgcHJvcGVydGllcyBvZiBQT0lOVEVSIGFuZCBCT1hFRCB0eXBlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1pbnNwZWN0LmM6IChwcmludF9lbGVtZW50X3Byb3BlcnRpZXNfaW5mbyk6CisJICBIYW5kbGUgcHJvcGVydGllcyBvZiBQT0lOVEVSIGFuZCBCT1hFRCB0eXBlLgorCisyMDA1LTEyLTI3IDEyOjExOjE5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0LmM6IEluaXQgdGFncyBzdHVmZiBhbmQgc29tZSBvdGhlciB0aGluZ3MgYmVmb3JlIGxvYWRpbmcgYW55IHN0YXRpYyBwbHVnaW5zICh0aGVyZSBtYXkgYmUgb3RoZXIgc3RhdGljIHBsdWdpbnMuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0LmM6IChpbml0X3Bvc3QpOgorCSAgSW5pdCB0YWdzIHN0dWZmIGFuZCBzb21lIG90aGVyIHRoaW5ncyBiZWZvcmUgbG9hZGluZworCSAgYW55IHN0YXRpYyBwbHVnaW5zICh0aGVyZSBtYXkgYmUgb3RoZXIgc3RhdGljIHBsdWdpbnMKKwkgIHRoYW4ganVzdCB0aGUgR1N0cmVhbWVyIG9uZXMsIGFuZCB0aGV5IG1heSB3YW50IHRvCisJICByZWdpc3RlciB0aGVpciBvd24gdGFncyBvciBmb3JtYXRzIG9yIHdoYXRldmVyLCBhbmQKKwkgIHByZWZlcmFibHkgd2l0aG91dCBzZWdmYXVsdGluZykuCisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9oYW5kbGVfc3JjX3F1ZXJ5KToKKwkgIFByaW50IGF0IGxlYXN0IGEgd2FybmluZyBpbiB0aGUgZGVidWcgbG9ncyBpZiB3ZSBkcm9wIGEKKwkgIHF1ZXJ5IGp1c3QgYmVjYXVzZSB3ZSBkb24ndCBrbm93IGhvdyB0byBhZGp1c3QgdGhlIHZhbHVlCisJICBpbiB0aGUgcGFydGljdWxhciBmb3JtYXQuCisKKzIwMDUtMTItMjUgMDM6NDU6NDUgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJICB0b29scy9nc3RyZWFtZXItY29tcGxldGlvbjogUmVwbGFjZW1lbnQgZm9yIGdzdC1jb21wbGV0ZSB3cml0dGVuIGluIHNoIGFuZCBzZWQuICBPbmx5IGNvbXBsZXRlcyBuYW1lcyBvZiBmZWF0dXJlcywgYnUuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0b29scy9nc3RyZWFtZXItY29tcGxldGlvbjoKKwkgIFJlcGxhY2VtZW50IGZvciBnc3QtY29tcGxldGUgd3JpdHRlbiBpbiBzaCBhbmQgc2VkLiAgT25seQorCSAgY29tcGxldGVzIG5hbWVzIG9mIGZlYXR1cmVzLCBidXQgdGhhdCdzIDkwJSBvZiB3aGF0IEkgd2FudAorCSAgaXQgZm9yLiAgUHJvcGVydGllcyBhcmUgbm90IGF2YWlsYWJsZSBpbiByZWdpc3RyeS54bWwuICAoTWF5YmUKKwkgIHRoZXkgc2hvdWxkIGJlLi4uKQorCisyMDA1LTEyLTIzIDE4OjE1OjQ4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogY29uZmlndXJlLmFjOgorCSAgYmFjayB0byBIRUFECisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGJhY2sgdG8gSEVBRAorCis9PT0gcmVsZWFzZSAwLjEwLjEgPT09CisKKzIwMDUtMTItMjMgMTg6MDQ6NDkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBORVdTOgorCSogUkVMRUFTRToKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkgIHJlbGVhc2luZyAwLjEwLjEKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVsZWFzaW5nIDAuMTAuMQorCisyMDA1LTEyLTIzIDE0OjUzOjEyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogcG8vYWYucG86CisJKiBwby9hei5wbzoKKwkqIHBvL2JnLnBvOgorCSogcG8vY2EucG86CisJKiBwby9jcy5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSogcG8vemhfQ04ucG86CisJICBVcGRhdGUgLnBvIGZpbGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFVwZGF0ZSAucG8gZmlsZXMKKworMjAwNS0xMi0yMyAxMzo0NToyMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHRlc3RzL2NoZWNrL2xpYnMvLmdpdGlnbm9yZToKKwkgIGlnbm9yZSBtb3JlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGlnbm9yZSBtb3JlCisKKzIwMDUtMTItMjIgMTQ6NDg6MTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGRvY3MvZmFxL2N2cy54bWw6IEFkZCBtaXNzaW5nIHF1b3RlLCBzaG91bGQgYmUgbWFrZSBFUlJPUl9DRkxBR1M9IiIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9mYXEvY3ZzLnhtbDoKKwkgIEFkZCBtaXNzaW5nIHF1b3RlLCBzaG91bGQgYmUgbWFrZSBFUlJPUl9DRkxBR1M9IiIuCisKKzIwMDUtMTItMjAgMTY6MDE6MDkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBjb25maWd1cmUuYWM6CisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmcucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGUucG86CisJKiBwby9lbl9HQi5wbzoKKwkqIHBvL2ZyLnBvOgorCSogcG8vaXQucG86CisJKiBwby9uYi5wbzoKKwkqIHBvL25sLnBvOgorCSogcG8vcnUucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJKiBwby96aF9DTi5wbzoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkgIHByZXJlbGVhc2luZworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBwcmVyZWxlYXNpbmcKKworMjAwNS0xMi0yMCAxMjo1MDo1NiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC10cmlja21vZGVzLnR4dDogTW9yZSBkb2N1bWVudGF0aW9uIG9uIHRyaWNrbW9kZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC10cmlja21vZGVzLnR4dDoKKwkgIE1vcmUgZG9jdW1lbnRhdGlvbiBvbiB0cmlja21vZGVzLgorCisyMDA1LTEyLTIwIDExOjEyOjUzICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBnc3QvZ3N0Y2Fwcy4qOiBBZGRlZCBncG9pbnRlciBHVHlwZSBmb3IgR3N0U3RhdGljQ2FwcyBzbyB3ZSBjYW4gd3JhcCB0aGVtIGluIGJpbmRpbmdzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RjYXBzLmM6IChnc3Rfc3RhdGljX2NhcHNfZ2V0X3R5cGUpOgorCSAgKiBnc3QvZ3N0Y2Fwcy5oOgorCSAgQWRkZWQgZ3BvaW50ZXIgR1R5cGUgZm9yIEdzdFN0YXRpY0NhcHMgc28gd2UgY2FuIHdyYXAgdGhlbSBpbiBiaW5kaW5ncy4KKwkgICogZ3N0L2dzdHBhZHRlbXBsYXRlLmM6IChnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXRfdHlwZSk6CisJICAqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5oOgorCSAgQWRkZWQgZ3BvaW50ZXIgR1R5cGUgZm9yIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNvIHdlIGNhbiB3cmFwIHRoZW0gaW4KKwkgIGJpbmRpbmdzLgorCisyMDA1LTEyLTE4IDE2OjA0OjQxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC86IERvY3VtZW50YXRpb24gdXBkYXRlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmg6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfY2xhc3NfaW5pdCksCisJICAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24pOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2NsYXNzX2luaXQpLAorCSAgKGdzdF9iYXNlX3NyY19kZWZhdWx0X3F1ZXJ5KSwgKGdzdF9iYXNlX3NyY19kZWZhdWx0X2RvX3NlZWspLAorCSAgKGdzdF9iYXNlX3NyY19kb19zZWVrKSwgKGdzdF9iYXNlX3NyY19wZXJmb3JtX3NlZWspLAorCSAgKGdzdF9iYXNlX3NyY19zZW5kX2V2ZW50KSwgKGdzdF9iYXNlX3NyY191cGRhdGVfbGVuZ3RoKSwKKwkgIChnc3RfYmFzZV9zcmNfZ2V0X3JhbmdlKSwgKGdzdF9iYXNlX3NyY19sb29wKSwKKwkgIChnc3RfYmFzZV9zcmNfc3RhcnQpOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RwdXNoc3JjLmM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5oOgorCSAgKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6CisJICAqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuaDoKKwkgICogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmg6CisJICAqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuaDoKKwkgIERvY3VtZW50YXRpb24gdXBkYXRlcy4KKworMjAwNS0xMi0xOCAxNDoyODoyNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZG9jcy9tYW51YWwvYmFzaWNzLWhlbGxvd29ybGQueG1sOiBSZW1vdmUgc3VwZXJmbHVvdXMgY2xvc2luZyBicmFja2V0IGluIGhlbGxvd29ybGQgZXhhbXBsZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtaGVsbG93b3JsZC54bWw6CisJICBSZW1vdmUgc3VwZXJmbHVvdXMgY2xvc2luZyBicmFja2V0IGluIGhlbGxvd29ybGQgZXhhbXBsZS4KKworMjAwNS0xMi0xNyAxNDoxOToyNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgdG9vbHMvZ3N0LWxhdW5jaC4xLmluOiBVcGRhdGUgZ3N0LWxhdW5jaCBtYW4gcGFnZTsgYWRkIGEgc2VjdGlvbiB3aXRoIHVzZWZ1bCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIEZpeGVzICMzMjM4ODIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdG9vbHMvZ3N0LWxhdW5jaC4xLmluOgorCSAgVXBkYXRlIGdzdC1sYXVuY2ggbWFuIHBhZ2U7IGFkZCBhIHNlY3Rpb24gd2l0aCB1c2VmdWwKKwkgIGVudmlyb25tZW50IHZhcmlhYmxlcy4gRml4ZXMgIzMyMzg4Mi4KKworMjAwNS0xMi0xNiAyMTo1OToxMiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvOiBjaGFuZ2Ugc29tZSBjaGFyKiBpbnRvIGNoYXJbXQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3QuYzoKKwkgICogZ3N0L2dzdF9wcml2YXRlLmg6CisJICBjaGFuZ2Ugc29tZSBjaGFyKiBpbnRvIGNoYXJbXQorCisyMDA1LTEyLTE2IDE5OjI0OjI0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogQ2xlYW51cHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6IChsb2FkX2ZlYXR1cmUpOgorCSAgQ2xlYW51cHMuCisJICBEb24ndCB1c2UgZ19vYmplY3RfdW5yZWYgb24gR3N0T2JqZWN0cyBzbyB0aGF0IHdlIGF2b2lkCisJICBsZWFrcyBvbiB1bnNhZmUgZ2xpYnMuCisKKzIwMDUtMTItMTYgMTg6MjA6NTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RiaW4uYzogU21hbGwgZG9jIHVwZGF0ZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9yZWNhbGNfc3RhdGUpOgorCSAgU21hbGwgZG9jIHVwZGF0ZXMuCisKKzIwMDUtMTItMTYgMTg6MTA6MDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGNvbW1vbi9jaGVjay5tYWs6IEFkZGVkIG1ha2UgZm9yZXZlciB0YXJnZXQgZm9yIGNoZWNrLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbW1vbi9jaGVjay5tYWs6CisJICBBZGRlZCBtYWtlIGZvcmV2ZXIgdGFyZ2V0IGZvciBjaGVjay4KKworMjAwNS0xMi0xNiAxNzozNDoxOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGdzdC9nc3QuYzogbWFrZSB0aGUgcmVnaXN0cnkgY2FjaGUgZmlsZSBIT1NUX0NQVS1kZXBlbmRlbnQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0LmM6IChpbml0X3Bvc3QpOgorCSAgbWFrZSB0aGUgcmVnaXN0cnkgY2FjaGUgZmlsZSBIT1NUX0NQVS1kZXBlbmRlbnQKKworMjAwNS0xMi0xNiAxNDo0NDo0OSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJKiBDaGFuZ2VMb2c6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGJ1ZmZlcnN0b3JlLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0b2JqZWN0LmM6CisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGJ1ZmZlcnN0b3JlLmMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMi0xNiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RidWZmZXJzdG9yZS5jCisJICAoZ3N0X2J1ZmZlcl9zdG9yZV9jbGVhcmVkX2Z1bmMpOiBQYXkgYXR0ZW50aW9uIHRvIGdfbGlzdF9hcHBlbmQKKwkgIHJldHVybiB2YWx1ZS4KKwkgICogdGVzdHMvY2hlY2svZ3N0L2dzdG9iamVjdC5jCisJICAodGVzdF9mYWtlX29iamVjdF9uYW1lX3RocmVhZGVkX3VuaXF1ZSk6IFBheSBhdHRlbnRpb24gdG8KKwkgIGdfbGlzdF9zb3J0IHJldHVybiB2YWx1ZS4KKworMjAwNS0xMi0xNiAxMTo1MjowMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgdG9vbHMvZ3N0LWZlZWRiYWNrLW0ubTogVXBkYXRlIGZvciAwLjkvMC4xMCAoZml4ZXMgIzMyMzg3MCkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdG9vbHMvZ3N0LWZlZWRiYWNrLW0ubToKKwkgIFVwZGF0ZSBmb3IgMC45LzAuMTAgKGZpeGVzICMzMjM4NzApLgorCisyMDA1LTEyLTE1IDEyOjIyOjM4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0bWluaW9iamVjdC5jOiBGaXggbGNvcHkgZm9yIG1pbmkgb2JqZWN0cywgdGhlIG1pbmkgb2JqZWN0IG5lZWRzIHRvIGJlIHJlZidlZC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5jOiAoZ3N0X3ZhbHVlX21pbmlfb2JqZWN0X2xjb3B5KToKKwkgIEZpeCBsY29weSBmb3IgbWluaSBvYmplY3RzLCB0aGUgbWluaSBvYmplY3QgbmVlZHMgdG8gYmUgcmVmJ2VkLgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWluaW9iamVjdC5jOiAobXlfZm9vX2luaXQpLAorCSAgKG15X2Zvb19nZXRfcHJvcGVydHkpLCAobXlfZm9vX3NldF9wcm9wZXJ0eSksIChteV9mb29fY2xhc3NfaW5pdCksCisJICAodGVzdF92YWx1ZV9jb2xsZWN0aW9uKSwgKGdzdF9taW5pX29iamVjdF9zdWl0ZSk6CisJICBBZGQgdGVzdCB0byBlbnN1cmUgcmVmY291bnRzIGVuZCB1cCBhcyBleHBlY3RlZCB3aGVuIHBhc3NpbmcKKwkgIEdzdE1pbmlPYmplY3RzIHRocm91Z2ggZ19vYmplY3RfZ2V0KCkgYW5kIGdfb2JqZWN0X3NldCgpLgorCisyMDA1LTEyLTE0IDE3OjA4OjM2ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KKworCSAgbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiBSZWZhY3RvcmluZyBvZiBjb2xsZWN0cGFkcy4gVGhpcyB2ZXJzaW9uIHJlbW92ZXMgYSBsb3Qgb2YgcmFjZXMgd2l0aG91dCB0b3VjaGluZyBBUEkvLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTItMTQgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KKwkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RfcGFkc19iYXNlX2luaXQpLAorCSAgKGdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZCksIChnc3RfY29sbGVjdF9wYWRzX2lzX2NvbGxlY3RlZCksCisJICAoZ3N0X2NvbGxlY3RfcGFkc19ldmVudCksIChnc3RfY29sbGVjdF9wYWRzX2NoYWluKTogUmVmYWN0b3JpbmcKKwkgIG9mIGNvbGxlY3RwYWRzLiBUaGlzIHZlcnNpb24gcmVtb3ZlcyBhIGxvdCBvZiByYWNlcyB3aXRob3V0CisJICB0b3VjaGluZyBBUEkvQUJJLiBZYXkgIQorCisyMDA1LTEyLTE0IDEwOjA5OjM1ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZ3N0L2dzdHBhZC5jOiBEb24ndCBhbGxvdyBhY3RpdmF0aW9uIG9mIGEgc3JjcGFkIGluIHB1bGxfcmFuZ2UgaWYgaXQgaGFzIG5vIGdldHJhbmdlIGZ1bmN0aW9uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfYWN0aXZhdGVfcHVsbCksIChnc3RfcGFkX2xpbmtfcHJlcGFyZSk6CisJICBEb24ndCBhbGxvdyBhY3RpdmF0aW9uIG9mIGEgc3JjcGFkIGluIHB1bGxfcmFuZ2UgaWYgaXQgaGFzIG5vCisJICBnZXRyYW5nZSBmdW5jdGlvbi4KKwkgIENoYW5nZSBzb21lIGRlYnVnIHN0YXRlbWVudHMgdG8gYmUgYSBsaXR0bGUgY2xlYXJlcgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSAgKGdzdF90eXBlX2ZpbmRfaGFuZGxlX3NyY19xdWVyeSk6CisJICBDaGVjayB0aGF0IHdlIGhhdmUgYSBwZWVyIGJlZm9yZSBleGVjdXRpbmcgcXVlcmllcyB0aGVyZXVwb24uCisJICAqIHRlc3RzL2V4YW1wbGVzL21ldGFkYXRhL3JlYWQtbWV0YWRhdGEuYzogKG1lc3NhZ2VfbG9vcCk6CisJICBVc2UgZ3N0X2J1c19wb3AgaW5zdGVhZCBvZiBnc3RfYnVzX3BvbGwgd2hlbiB3ZSBqdXN0IHdhbnQgaXQgdG8KKwkgIGltbWVkaWF0ZWx5IHJldHVybiB1cyBhbnkgYXZhaWxhYmxlIG1lc3NhZ2Ugd2l0aCAwIHRpbWVvdXQuCisKKzIwMDUtMTItMTIgMTk6MDk6NDkgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KKworCSAgZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5jOiBEb24ndCB1bnJlZiBmYWN0b3JpZXMgYWZ0ZXIgY2FsbGluZyB0aGVtLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuYzogKGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9jYWxsX2Z1bmN0aW9uKToKKwkgIERvbid0IHVucmVmIGZhY3RvcmllcyBhZnRlciBjYWxsaW5nIHRoZW0uCisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzogKGdzdF90eXBlX2ZpbmRfaGVscGVyKToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfY2hhaW4pOgorCSAgRnJlZSBsaXN0cyBvZiBmYWN0b3JpZXMgYWZ0ZXIgdXNpbmcgdGhlbS4gRml4aW5nIHR5cGVmaW5kaW5nIG1lbW9yeQorCSAgbGVha3MuCisKKzIwMDUtMTItMTIgMTg6MTI6MTMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzogbW9yZSBtZWFuaW5nZnVsIGRlYnVnIG91dHB1dAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6IChnc3RfcGx1Z2luX2ZlYXR1cmVfZmluYWxpemUpLAorCSAgKGdzdF9wbHVnaW5fZmVhdHVyZV9sb2FkKToKKwkgIG1vcmUgbWVhbmluZ2Z1bCBkZWJ1ZyBvdXRwdXQKKwkgICogY29uZmlndXJlLmFjOgorCSAgKiB0ZXN0cy9NYWtlZmlsZS5hbToKKwkgICogdGVzdHMvb2xkL2V4YW1wbGVzL01ha2VmaWxlLmFtOgorCSAgbWFrZSBtYWtlIGRpc3RjaGVjayBoYXBweSBhZ2FpbgorCisyMDA1LTEyLTEyIDE3OjM3OjE3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogY29uZmlndXJlLmFjOgorCSAgcmVtb3ZlIGFsbCB0ZXN0cy9vbGQgTWFrZWZpbGVzIGZyb20gdGhlIGJ1aWxkCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJlbW92ZSBhbGwgdGVzdHMvb2xkIE1ha2VmaWxlcyBmcm9tIHRoZSBidWlsZAorCisyMDA1LTEyLTEyIDE3OjA5OjA0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOiBDYXRjaCB0aGUgc3BlY2lhbCBjYXNlIHdoZXJlIHdlIGFyZSBvcGVyYXRpbmcgY2hhaW4tYmFzZWQsIGJ1dCB0aGUgZG93bnN0cmVhbSAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOiAoc3RvcF90eXBlZmluZGluZyk6CisJICBDYXRjaCB0aGUgc3BlY2lhbCBjYXNlIHdoZXJlIHdlIGFyZSBvcGVyYXRpbmcgY2hhaW4tYmFzZWQsCisJICBidXQgdGhlIGRvd25zdHJlYW0gcGVlciBwYWQgaGFzIG5vIGNoYWluIGZ1bmN0aW9uLiBFbWl0IGEKKwkgIGN1c3RvbSBlcnJvciBtZXNzYWdlIGluIHRoaXMgY2FzZSBpbnN0ZWFkIG9mIGxldHRpbmcgdGhlCisJICBjb3JlIGdlbmVyYXRlIG9uZSBpbXBseWluZyB0aGF0IHRoaXMgaXMgc29tZSBzb3J0IG9mIGNvcmUKKwkgIGJ1Zy4gSXQncyBub3QsIGl0IGp1c3QgbWVhbnMgdGhhdCB3aGF0ZXZlciBnb3QgcGx1Z2dlZAorCSAgaW50byB0aGUgcGlwZWxpbmUgZG93bnN0cmVhbSB3aGVuIHdlIGFubm91bmNlZCB0aGUgdHlwZQorCSAgY2FuIG9ubHkgb3BlcmF0ZSBwdWxsLWJhc2VkLCB3aGlsZSBvdXIgc291cmNlIGNhbiBvbmx5CisJICBvcGVyYXRlIHB1c2gtYmFzZWQgKGUuZy4gaHR0cDovL2Zvby9iYXIubW92ICEgcXRkZW11eCAhIC4uLikKKwkgIEVycm9yIHN0cmluZyBoYXMgbm90IGJlZW4gbWFya2VkIGZvciB0cmFuc2xhdGlvbiB5ZXQsIGFzCisJICBpdCBwcm9iYWJseSBuZWVkcyBzb21lIG1vcmUgd29yayBmaXJzdC4KKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfZ2V0X2Jlc3RfcG9zc2liaWxpdHkpOgorCSAgQWRkIGhlbHBlciBmdW5jdGlvbiB0byBmaW5kIHRoZSBiZXN0IG9mIGFsbCBhdmFpbGFibGUKKwkgIGZvdW5kIHBvc3NpYmlsaXRpZXMgdGhhdCBxdWFsaWZ5IGdpdmVuIHRoZSBtaW4uIHRocmVzaG9sZC4KKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfaGFuZGxlX2V2ZW50KToKKwkgIEZpeCB0aGUgY2FzZSB3aGVyZSB3ZSBnZXQgYW4gRU9TIHdoaWxlIHN0aWxsIGluIFRZUEVGSU5ECisJICBtb2RlICh3ZSB3YW50IHRvIGNob3NlIHRoZSBiZXN0IG9mIGFsbCBwb3NzaWJsZSB0eXBlcywKKwkgIG5vdCBqdXN0IHRoZSBmaXJzdCB0eXBlIHRoYXQgaGFwcGVucyB0byBiZSBpbiBvdXIgdW5zb3J0ZWQKKwkgIGxpc3Qgb2YgcG9zc2libGUgdHlwZXMpLgorCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9jaGFpbik6CisJICBNYWtlIHN1cmUgd2UgcmV0dXJuIEdTVF9GTE9XX0VSUk9SIHdoZW4gd2UgZXJyb3JlZCBvdXQKKwkgIGluIHN0b3BfdHlwZWZpbmRpbmcoKTsgYWxzbywgZG9uJ3QganVzdCBmaW5kIHRoZSBiZXN0IG9mCisJICBhbGwgZm91bmQgdHlwZSBlbnRyaWVzIGFuZCB0aGVuIHVzZSB0aGUgbGFzdCBleGFtaW5lZAorCSAgdHlwZSBlbnRyeSwgYnV0IGFjdHVhbGx5IHVzZSB0aGUgYmVzdCBlbnRyeS4KKworMjAwNS0xMi0xMiAxNzowNzowNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgdGVzdHMvZXhhbXBsZXMvOiBNb3JlIGdjYzQgZml4ZXMgYW5kIGEgbWVtIGxlYWsgZml4LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzL2V4YW1wbGVzL3R5cGVmaW5kL3R5cGVmaW5kLmM6ICh0eXBlX2ZvdW5kKToKKwkgICogdGVzdHMvZXhhbXBsZXMveG1sL3J1bnhtbC5jOiAoeG1sX2xvYWRlZCk6CisJICBNb3JlIGdjYzQgZml4ZXMgYW5kIGEgbWVtIGxlYWsgZml4LgorCisyMDA1LTEyLTEyIDE2OjIwOjQ3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIHRlc3RzL2V4YW1wbGVzL3htbC9ydW54bWwuYzoKKwkgIG1vcmUgZ2NjIDQgd2FybmluZyBmaXhlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBtb3JlIGdjYyA0IHdhcm5pbmcgZml4ZXMKKworMjAwNS0xMi0xMiAxNjowNDo0NSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiB0ZXN0cy9leGFtcGxlcy94bWwvY3JlYXRleG1sLmM6CisJICBhbm90aGVyIGdjYzQgZml4CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFub3RoZXIgZ2NjNCBmaXgKKworMjAwNS0xMi0xMiAxNTo1OTo0OCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICB0ZXN0cy9leGFtcGxlcy94bWwvY3JlYXRleG1sLmM6IGdjYyA0IGZpeGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvZXhhbXBsZXMveG1sL2NyZWF0ZXhtbC5jOiAob2JqZWN0X3NhdmVkKToKKwkgIGdjYyA0IGZpeGVzCisKKzIwMDUtMTItMTIgMTU6NDY6MTYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgdGVzdHMvTWFrZWZpbGUuYW06IGVuYWJsZSB0aGUgZXhhbXBsZXMgZXZlbiBtb3JlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvTWFrZWZpbGUuYW06CisJICBlbmFibGUgdGhlIGV4YW1wbGVzIGV2ZW4gbW9yZQorCisyMDA1LTEyLTEyIDE1OjAyOjAyICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYyAoZ3N0X25ldF90aW1lX3Byb3ZpZGVyX2NsYXNzX2luaXQsIGdzdF9uZXRfdGltZV9wcm92aWRlcl9pbml0KSAoZ3N0X25ldF90aW1lX3Byb3ZpZC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTEyLTEyICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmMKKwkgIChnc3RfbmV0X3RpbWVfcHJvdmlkZXJfY2xhc3NfaW5pdCwgZ3N0X25ldF90aW1lX3Byb3ZpZGVyX2luaXQpCisJICAoZ3N0X25ldF90aW1lX3Byb3ZpZGVyX3NldF9wcm9wZXJ0eSkKKwkgIChnc3RfbmV0X3RpbWVfcHJvdmlkZXJfZ2V0X3Byb3BlcnR5KTogRXhwb3J0ICJhY3RpdmUiIGFzIGEgR09iamVjdAorCSAgcHJvcGVydHkuCisJICAoZ3N0X25ldF90aW1lX3Byb3ZpZGVyX3RocmVhZCk6IE9ubHkgcmVzcG9uZCB0byB0aW1lIHF1ZXJpZXMgaWYKKwkgIHRoZSB0aW1lIHByb3ZpZGVyIGlzIGFjdGl2ZS4KKwkgICogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5oOiBBZGQgYW4gImFjdGl2ZSIgYm9vbGVhbiB0bworCSAgTmV0VGltZVByb3ZpZGVyLCBwcmVzZXJ2aW5nIGJpbmFyeSBjb21wYXQuCisKKzIwMDUtMTItMTIgMTQ6NDY6MDYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgdGVzdHMvZXhhbXBsZXMvOiBjb252ZXJ0IGNvbW1lbnRzIGFnYWluCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci9hdWRpby1leGFtcGxlLmM6IChtYWluKToKKwkgICogdGVzdHMvZXhhbXBsZXMvbGF1bmNoL01ha2VmaWxlLmFtOgorCSAgY29udmVydCBjb21tZW50cyBhZ2FpbgorCisyMDA1LTEyLTEyIDE0OjQzOjU3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdHB1c2hzcmMuYzogRml4IHR5cG8uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RwdXNoc3JjLmM6CisJICBGaXggdHlwby4KKworMjAwNS0xMi0xMiAxNDo0MjoxMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSogQ2hhbmdlTG9nOgorCSAgRm9yZ290IHRoZSBDaGFuZ2Vsb2cuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgRm9yZ290IHRoZSBDaGFuZ2Vsb2cuLi4KKworMjAwNS0xMi0xMiAxNDo0MTowNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDogQWRkZWQgbmV3IHN5bWJvbCB0byBkb2NzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJICBBZGRlZCBuZXcgc3ltYm9sIHRvIGRvY3MuCisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2NsYXNzX2luaXQpLAorCSAgKGdzdF9iYXNlX3NyY19pbml0KSwgKGdzdF9iYXNlX3NyY19zZXRfZm9ybWF0KSwKKwkgIChnc3RfYmFzZV9zcmNfZGVmYXVsdF9xdWVyeSksIChnc3RfYmFzZV9zcmNfcXVlcnkpLAorCSAgKGdzdF9iYXNlX3NyY19kZWZhdWx0X2RvX3NlZWspLCAoZ3N0X2Jhc2Vfc3JjX2RvX3NlZWspLAorCSAgKGdzdF9iYXNlX3NyY19wZXJmb3JtX3NlZWspLCAoZ3N0X2Jhc2Vfc3JjX3NlbmRfZXZlbnQpLAorCSAgKGdzdF9iYXNlX3NyY19kZWZhdWx0X2V2ZW50KSwgKGdzdF9iYXNlX3NyY19ldmVudF9oYW5kbGVyKSwKKwkgIChnc3RfYmFzZV9zcmNfc2V0X3Byb3BlcnR5KSwgKGdzdF9iYXNlX3NyY19nZXRfcHJvcGVydHkpLAorCSAgKGdzdF9iYXNlX3NyY193YWl0KSwgKGdzdF9iYXNlX3NyY19kb19zeW5jKSwKKwkgIChnc3RfYmFzZV9zcmNfdXBkYXRlX2xlbmd0aCksIChnc3RfYmFzZV9zcmNfZ2V0X3JhbmdlKSwKKwkgIChnc3RfYmFzZV9zcmNfY2hlY2tfZ2V0X3JhbmdlKSwgKGdzdF9iYXNlX3NyY19sb29wKSwKKwkgIChnc3RfYmFzZV9zcmNfZGVmYXVsdF9uZWdvdGlhdGUpLCAoZ3N0X2Jhc2Vfc3JjX3N0YXJ0KSwKKwkgIChnc3RfYmFzZV9zcmNfYWN0aXZhdGVfcHVzaCksIChnc3RfYmFzZV9zcmNfYWN0aXZhdGVfcHVsbCksCisJICAoZ3N0X2Jhc2Vfc3JjX2NoYW5nZV9zdGF0ZSk6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgorCSAgSW1wbGVtZW50IHNlZWtpbmcgdG8gb3RoZXIgZm9ybWF0cyB0aGFuIF9CWVRFUy4KKwkgIEltcGxlbWVudCBtb3JlIHNlZWtpbmcgbWV0aG9kcyBjb3JyZWN0bHkuCisJICBEb2MgdXBkYXRlcy4KKwkgIEFkZGVkIHF1ZXJ5IHZtZXRob2QuCisJICBBZGRlZCBkb19zZWVrIHZtZXRob2QgdG8gbWFrZSBsaWZlIGVhc2llciBmb3Igc3ViY2xhc3NlcworCSAgd2hlbiBzZWVraW5nLgorCSAgQVBJIGFkZGl0aW9uOiBnc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdCgpCisKKzIwMDUtMTItMTIgMTQ6MDg6MDkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgdGVzdHMvZXhhbXBsZXMvTWFrZWZpbGUuYW06IGFkZGVkIHRoYXQgdG9vCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvZXhhbXBsZXMvTWFrZWZpbGUuYW06CisJICBhZGRlZCB0aGF0IHRvbworCisyMDA1LTEyLTEyIDE0OjAyOjE4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGFwcGxpZWQgc29tZSBzaW1wbGUgZml4aW5nIHRvIHNvbWUgZXhhbXBsZXMgcmUtZW5hYmxlZCB0aGUgd29ya2luZyBleGFtcGxlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgICogZG9jcy9yYW5kb20vZW5zb25pYy9tZWRpYS1kZXZpY2UtZGFlbW9uLnR4dDoKKwkgICogdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci8uY3ZzaWdub3JlOgorCSAgKiB0ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL01ha2VmaWxlLmFtOgorCSAgKiB0ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL2F1ZGlvLWV4YW1wbGUuYzogKG1haW4pOgorCSAgKiB0ZXN0cy9leGFtcGxlcy9oZWxsb3dvcmxkLy5jdnNpZ25vcmU6CisJICAqIHRlc3RzL2V4YW1wbGVzL2hlbGxvd29ybGQvTWFrZWZpbGUuYW06CisJICAqIHRlc3RzL2V4YW1wbGVzL2hlbGxvd29ybGQvaGVsbG93b3JsZC5jOiAoZXZlbnRfbG9vcCksIChtYWluKToKKwkgICogdGVzdHMvZXhhbXBsZXMvbGF1bmNoLy5jdnNpZ25vcmU6CisJICAqIHRlc3RzL2V4YW1wbGVzL2xhdW5jaC9NYWtlZmlsZS5hbToKKwkgICogdGVzdHMvZXhhbXBsZXMvbGF1bmNoL21wM3BhcnNlbGF1bmNoLmM6IChldmVudF9sb29wKSwgKG1haW4pOgorCSAgKiB0ZXN0cy9leGFtcGxlcy9tZXRhZGF0YS8uY3ZzaWdub3JlOgorCSAgKiB0ZXN0cy9leGFtcGxlcy9tZXRhZGF0YS9NYWtlZmlsZS5hbToKKwkgICogdGVzdHMvZXhhbXBsZXMvbWV0YWRhdGEvcmVhZC1tZXRhZGF0YS5jOiAobWVzc2FnZV9sb29wKSwKKwkgIChtYWtlX3BpcGVsaW5lKSwgKHByaW50X3RhZyksIChtYWluKToKKwkgICogdGVzdHMvZXhhbXBsZXMvcXVldWUvLmN2c2lnbm9yZToKKwkgICogdGVzdHMvZXhhbXBsZXMvcXVldWUvTWFrZWZpbGUuYW06CisJICAqIHRlc3RzL2V4YW1wbGVzL3F1ZXVlL3F1ZXVlLmM6IChldmVudF9sb29wKSwgKG1haW4pOgorCSAgKiB0ZXN0cy9leGFtcGxlcy90eXBlZmluZC8uY3ZzaWdub3JlOgorCSAgKiB0ZXN0cy9leGFtcGxlcy90eXBlZmluZC9NYWtlZmlsZS5hbToKKwkgICogdGVzdHMvZXhhbXBsZXMvdHlwZWZpbmQvdHlwZWZpbmQuYzogKHR5cGVfZm91bmQpLCAoZXZlbnRfbG9vcCksCisJICAobWFpbik6CisJICAqIHRlc3RzL2V4YW1wbGVzL3htbC8uY3ZzaWdub3JlOgorCSAgKiB0ZXN0cy9leGFtcGxlcy94bWwvTWFrZWZpbGUuYW06CisJICAqIHRlc3RzL2V4YW1wbGVzL3htbC9jcmVhdGV4bWwuYzogKG9iamVjdF9zYXZlZCksIChtYWluKToKKwkgICogdGVzdHMvZXhhbXBsZXMveG1sL3J1bnhtbC5jOiAoeG1sX2xvYWRlZCksIChldmVudF9sb29wKSwgKG1haW4pOgorCSAgKiB0ZXN0cy9vbGQvZXhhbXBsZXMvTWFrZWZpbGUuYW06CisJICAqIHRlc3RzL29sZC9leGFtcGxlcy9UT0RPOgorCSAgKiB0ZXN0cy9vbGQvZXhhbXBsZXMvY29udHJvbGxlci8uY3ZzaWdub3JlOgorCSAgKiB0ZXN0cy9vbGQvZXhhbXBsZXMvY29udHJvbGxlci9NYWtlZmlsZS5hbToKKwkgICogdGVzdHMvb2xkL2V4YW1wbGVzL2NvbnRyb2xsZXIvYXVkaW8tZXhhbXBsZS5jOgorCSAgKiB0ZXN0cy9vbGQvZXhhbXBsZXMvaGVsbG93b3JsZC8uY3ZzaWdub3JlOgorCSAgKiB0ZXN0cy9vbGQvZXhhbXBsZXMvaGVsbG93b3JsZC9NYWtlZmlsZS5hbToKKwkgICogdGVzdHMvb2xkL2V4YW1wbGVzL2hlbGxvd29ybGQvaGVsbG93b3JsZC5jOgorCSAgKiB0ZXN0cy9vbGQvZXhhbXBsZXMvbGF1bmNoLy5jdnNpZ25vcmU6CisJICAqIHRlc3RzL29sZC9leGFtcGxlcy9sYXVuY2gvTWFrZWZpbGUuYW06CisJICAqIHRlc3RzL29sZC9leGFtcGxlcy9sYXVuY2gvbXAzcGFyc2VsYXVuY2guYzoKKwkgICogdGVzdHMvb2xkL2V4YW1wbGVzL2xhdW5jaC9tcDNwbGF5OgorCSAgKiB0ZXN0cy9vbGQvZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlLmFtOgorCSAgKiB0ZXN0cy9vbGQvZXhhbXBsZXMvbWV0YWRhdGEvTWFrZWZpbGUuYW06CisJICAqIHRlc3RzL29sZC9leGFtcGxlcy9tZXRhZGF0YS9yZWFkLW1ldGFkYXRhLmM6CisJICAqIHRlc3RzL29sZC9leGFtcGxlcy9xdWV1ZS8uY3ZzaWdub3JlOgorCSAgKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcXVldWUvTWFrZWZpbGUuYW06CisJICAqIHRlc3RzL29sZC9leGFtcGxlcy9xdWV1ZS9xdWV1ZS5jOgorCSAgKiB0ZXN0cy9vbGQvZXhhbXBsZXMvdHlwZWZpbmQvLmN2c2lnbm9yZToKKwkgICogdGVzdHMvb2xkL2V4YW1wbGVzL3R5cGVmaW5kL01ha2VmaWxlLmFtOgorCSAgKiB0ZXN0cy9vbGQvZXhhbXBsZXMvdHlwZWZpbmQvdHlwZWZpbmQuYzoKKwkgICogdGVzdHMvb2xkL2V4YW1wbGVzL3htbC8uY3ZzaWdub3JlOgorCSAgKiB0ZXN0cy9vbGQvZXhhbXBsZXMveG1sL01ha2VmaWxlLmFtOgorCSAgKiB0ZXN0cy9vbGQvZXhhbXBsZXMveG1sL2NyZWF0ZXhtbC5jOgorCSAgKiB0ZXN0cy9vbGQvZXhhbXBsZXMveG1sL3J1bnhtbC5jOgorCSAgYXBwbGllZCBzb21lIHNpbXBsZSBmaXhpbmcgdG8gc29tZSBleGFtcGxlcworCSAgcmUtZW5hYmxlZCB0aGUgd29ya2luZyBleGFtcGxlcworCisyMDA1LTEyLTEyIDEyOjQ4OjM1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0c2VnbWVudC5jOiBBZGRlZCBtb3JlIGRvY3VtZW50YXRpb24uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHNlZ21lbnQuYzogKGdzdF9zZWdtZW50X2luaXQpLAorCSAgKGdzdF9zZWdtZW50X3NldF9sYXN0X3N0b3ApLCAoZ3N0X3NlZ21lbnRfc2V0X3NlZWspLAorCSAgKGdzdF9zZWdtZW50X3NldF9uZXdzZWdtZW50KSwgKGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lKSwKKwkgIChnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUpOgorCSAgQWRkZWQgbW9yZSBkb2N1bWVudGF0aW9uLgorCSAgTWFrZSBzdXJlIHRoZSBsYXN0X3BvcyB2YWx1ZSBpcyB1cGRhdGVkIHByb3Blcmx5LgorCSAgTWFrZSBzdXJlIHRvX3N0cmVhbV90aW1lIGFuZCB0b19ydW5uaW5nX3RpbWUgZG9uJ3QKKwkgIG9wZXJhdGUgb24gd3JvbmcgdmFsdWVzLgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c2VnbWVudC5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgVXBkYXRlIGNoZWNrLgorCisyMDA1LTEyLTEyIDEyOjMyOjA0ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6IE5vdyB0aGF0IHdlJ3JlIG5vdCBsZWFraW5nIGZhY3RvcmllcywgbWFrZSBzdXJlIHdlIGtlZXAgcmVmZXJlbmNlcyB0byB0aGVtIHdoaS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6IChmcmVlX2VudHJ5KSwKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfY2hhaW4pOgorCSAgTm93IHRoYXQgd2UncmUgbm90IGxlYWtpbmcgZmFjdG9yaWVzLCBtYWtlIHN1cmUgd2Uga2VlcCByZWZlcmVuY2VzCisJICB0byB0aGVtIHdoaWxlIHdlIG5lZWQgdGhlbS4KKworMjAwNS0xMi0xMiAxMTo0MDoxMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfaTM4Ni5oOiBpZmRlZiBvdXQgdGhlIFhNTCBzdHJ1Y3RzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9pMzg2Lmg6CisJICBpZmRlZiBvdXQgdGhlIFhNTCBzdHJ1Y3RzCisKKzIwMDUtMTItMTIgMTA6NTk6MTIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBnc3QvZ3N0dmFsdWUuYzogZmxvb3IgaXMgbm90IG5lZWRlZCwgRiBpcyBhbHdheXMgcG9zaXRpdmU7IHRoaXMgb2J2aWF0ZXMgdGhlIG5lZWQgZm9yIGFkZGluZyAtbG0gd2hlbiBidWlsZGluZyB3aXRob3UuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF92YWx1ZV90cmFuc2Zvcm1fZG91YmxlX2ZyYWN0aW9uKToKKwkgIGZsb29yIGlzIG5vdCBuZWVkZWQsIEYgaXMgYWx3YXlzIHBvc2l0aXZlOyB0aGlzIG9idmlhdGVzIHRoZQorCSAgbmVlZCBmb3IgYWRkaW5nIC1sbSB3aGVuIGJ1aWxkaW5nIHdpdGhvdXQgbGlieG1sCisKKzIwMDUtMTItMTIgMTA6NTc6MzcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBkb2NzL3JhbmRvbS9hc3BlY3RyYXRpbzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidXMuYzoKKwkgIGFkZCBhIDsgYW5kIGFuIGV4YW1wbGUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkIGEgOyBhbmQgYW4gZXhhbXBsZQorCisyMDA1LTEyLTEyIDEwOjE2OjExICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFRha2UgY3VycmVudCBwbGF5YmFjayByYXRlIGludG8gYWNjb3VudCB3aGVuIHJlcG9ydGluZyB0aGUgcG9zaXRpb24uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24pOgorCSAgVGFrZSBjdXJyZW50IHBsYXliYWNrIHJhdGUgaW50byBhY2NvdW50IHdoZW4gcmVwb3J0aW5nCisJICB0aGUgcG9zaXRpb24uCisKKzIwMDUtMTItMTEgMTk6MzU6MDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGRvY3MvbWFudWFsL21pbWUtd29ybGQuZmlnOiBMZXQncyB0cnkgdGhpcyBhZ2FpbiwgdGhpcyB0aW1lIHdpdGggYSBmaWxlIHRoYXQgaXMgYWN0dWFsbHkgaW4gWEZpZyBmb3JtYXQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9tYW51YWwvbWltZS13b3JsZC5maWc6CisJICBMZXQncyB0cnkgdGhpcyBhZ2FpbiwgdGhpcyB0aW1lIHdpdGggYSBmaWxlIHRoYXQgaXMKKwkgIGFjdHVhbGx5IGluIFhGaWcgZm9ybWF0LgorCisyMDA1LTEyLTExIDE5OjE5OjA5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBkb2NzL21hbnVhbC9taW1lLXdvcmxkLmZpZzogQWRkIGF1ZGlvY29udmVydCBlbGVtZW50IHRvIGRpYWdyYW0gc28gdGhhdCBpdCBtYXRjaGVzIHRoZSB0ZXh0IGFuZCB0aGUgY29kZSAoZml4ZXMgIzMxOTUuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL21hbnVhbC9taW1lLXdvcmxkLmZpZzoKKwkgIEFkZCBhdWRpb2NvbnZlcnQgZWxlbWVudCB0byBkaWFncmFtIHNvIHRoYXQgaXQKKwkgIG1hdGNoZXMgdGhlIHRleHQgYW5kIHRoZSBjb2RlIChmaXhlcyAjMzE5NTI2KS4KKworMjAwNS0xMi0xMSAxODoyNDoyNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZG9jcy9wd2cvOiBVcGRhdGUgc3RhdGUgY2hhbmdlIHN0dWZmIGZvciAwLjEwIChmaXhlcyAjMzIyOTY5KS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL3B3Zy9idWlsZGluZy1jaGFpbmZuLnhtbDoKKwkgICogZG9jcy9wd2cvYnVpbGRpbmctcGFkcy54bWw6CisJICAqIGRvY3MvcHdnL2J1aWxkaW5nLXN0YXRlLnhtbDoKKwkgICogZG9jcy9wd2cvb3RoZXItc291cmNlLnhtbDoKKwkgIFVwZGF0ZSBzdGF0ZSBjaGFuZ2Ugc3R1ZmYgZm9yIDAuMTAgKGZpeGVzICMzMjI5NjkpLgorCisyMDA1LTEyLTExIDE3OjQ5OjEwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBkb2NzL21hbnVhbC86IFVwZGF0ZSBmb3IgMC4xMDogcy8wLjkvMC4xMC87IHMvYXVkaW9zY2FsZS9hdWRpb3JzYW1wbGUvOyBhZGQgY29udmVydGVycyBpbiBmcm9udCBvZiBwaXBlbGluZXM7IHJlbW92ZSAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbDoKKwkgICogZG9jcy9tYW51YWwvYXBwZW5kaXgtY2hlY2tsaXN0LnhtbDoKKwkgICogZG9jcy9tYW51YWwvYXBwZW5kaXgtcHJvZ3JhbXMueG1sOgorCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtcGFkcy54bWw6CisJICAqIGRvY3MvbWFudWFsL2hpZ2hsZXZlbC1jb21wb25lbnRzLnhtbDoKKwkgICogZG9jcy9tYW51YWwvbWFudWFsLnhtbDoKKwkgIFVwZGF0ZSBmb3IgMC4xMDogcy8wLjkvMC4xMC87IHMvYXVkaW9zY2FsZS9hdWRpb3JzYW1wbGUvOworCSAgYWRkIGNvbnZlcnRlcnMgaW4gZnJvbnQgb2YgcGlwZWxpbmVzOyByZW1vdmUgY3VybHkKKwkgIGJyYWNrZXRzIGZvciB0aHJlYWRzIHN0dWZmLCB0aGV5IG5vIGxvbmdlciBleGlzdDsgdXNlCisJICBHU1RfVFlQRV9GUkFDVElPTiBmb3IgZnJhbWVyYXRlczsgdXBkYXRlIHNvbWUgcGllY2VzIG9mCisJICBjb2RlIHRvIDAuMTAsIGJ1dCB0aGVyZSdzIHBsZW50eSBtb3JlIHRvIGRvLgorCSAgKiBkb2NzL21hbnVhbC9hcHBlbmRpeC1wb3J0aW5nLnhtbDoKKwkgIEV4cGFuZCBvbiBhc3luY2hyb25lb3VzIHN0YXRlIGNoYW5nZXM7IHMvMC45LzAuMTAvOworCSAgbWVudGlvbiBkaXNhcHBlYXJhbmNlIG9mIGdzdF9pbml0X2dldF9wb3B0X3RhYmxlKCkKKwkgIChmaXhlcyAjMzIyOTE2KS4KKworMjAwNS0xMi0xMSAxMTo1Mzo1NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZG9jcy9mYXEvdXNpbmcueG1sOiBTcGlkZXIgbm8gbG9uZ2VyIGV4aXN0cywgYW5kIG5laXRoZXIgZG9lcyBnc3QtbGF1bmNoLWV4dC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2ZhcS91c2luZy54bWw6CisJICBTcGlkZXIgbm8gbG9uZ2VyIGV4aXN0cywgYW5kIG5laXRoZXIgZG9lcyBnc3QtbGF1bmNoLWV4dC4KKwkgIFVwZGF0ZSBleGFtcGxlcyB0byB1c2UgZGVjb2RlYmluIGFuZCBwbGF5YmluIGFuZCBwdXQKKwkgIGNvbnZlcnRlcnMgaW4gZnJvbnQgb2Ygc2lua3MgKGZpeGVzICMzMjM3MjYpLgorCisyMDA1LTEyLTA5IDE3OjI2OjMxICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+CisKKwkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6IEZpeCBsZWFraW5nIGVsZW1lbnQgZmFjdG9yaWVzIGluIHR5cGVmaW5kaW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6IChmaW5kX3BlZWspLAorCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9jaGFpbik6CisJICBGaXggbGVha2luZyBlbGVtZW50IGZhY3RvcmllcyBpbiB0eXBlZmluZGluZy4KKwkgIEZpeCBwcm9ibGVtIHdoZXJlIHdlIGZvcmdvdCBhYm91dCBhIHByb2JhYmxlIHR5cGUgb24gbm9uLXNlZWthYmxlCisJICBmaWxlcywgYW5kIHRodXMgbGF0ZXIgbWlzLXR5cGVmb3VuZCBpdC4KKworMjAwNS0xMi0wOSAxNTowOTo0MiArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgorCisJICBSZW1vdmUgbWFrZWNvbnRleHQgc3R1ZmY7IG5vdCB1c2VkIGluIDAuMTAgYW5kIGNhdXNlcyBwcm9ibGVtcyBvbgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbW1vbi9tNC9nc3QtbWFrZWNvbnRleHQubTQ6CisJICAqIGNvbW1vbi9tNC9nc3QtbWNzYy5tNDoKKwkgICogY29uZmlndXJlLmFjOgorCSAgKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICAqIHdpbjMyL2NvbW1vbi9jb25maWcuaC5pbjoKKwkgIFJlbW92ZSBtYWtlY29udGV4dCBzdHVmZjsgbm90IHVzZWQgaW4gMC4xMCBhbmQgY2F1c2VzIHByb2JsZW1zIG9uCisJICBIUFVYIGFjY29yZGluZyB0byBidWcgIzMyMjQ0MQorCisyMDA1LTEyLTA3IDE5OjAzOjU0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICB0ZXN0cy9jaGVjay86IEFkZGVkIEFCSSBjaGVjayBmb3IgbGlicywgdGhpcyB0aW1lIGZvciByZWFsCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICAqIHRlc3RzL2NoZWNrL2xpYnMvbGlic2FiaS5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0YWJpX3N1aXRlKSwKKwkgIChtYWluKToKKwkgICogdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfaTM4Ni5oOgorCSAgQWRkZWQgQUJJIGNoZWNrIGZvciBsaWJzLCB0aGlzIHRpbWUgZm9yIHJlYWwKKworMjAwNS0xMi0wNyAxOTowMzowOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgdGVzdHMvY2hlY2svOiBBZGRlZCBBQkkgY2hlY2sgZm9yIGxpYnMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgICogdGVzdHMvY2hlY2svbGlicy9saWJzYWJpLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RhYmlfc3VpdGUpLAorCSAgKG1haW4pOgorCSAgKiB0ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9pMzg2Lmg6CisJICBBZGRlZCBBQkkgY2hlY2sgZm9yIGxpYnMKKworMjAwNS0xMi0wNyAxNzo1OToyMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06IEFuZCBhZGQgdGhlIHN0cnVjdF9pMzg2LmggdG8gZGlzdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgIEFuZCBhZGQgdGhlIHN0cnVjdF9pMzg2LmggdG8gZGlzdC4KKworMjAwNS0xMi0wNyAxNzozNjo0NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgdGVzdHMvY2hlY2svOiBBZGRlZCBjaGVjayBmb3IgQUJJIGNvbXBhdGliaWxpdHkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICAqIHRlc3RzL2NoZWNrL2dzdC8uY3ZzaWdub3JlOgorCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YWJpLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RhYmlfc3VpdGUpLAorCSAgKG1haW4pOgorCSAgKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X2kzODYuaDoKKwkgIEFkZGVkIGNoZWNrIGZvciBBQkkgY29tcGF0aWJpbGl0eS4KKworMjAwNS0xMi0wNyAxNTozMzo0MiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6IEZpeCBicm9rZW4gc3luYyBvcHRpb24sIGZpeGVzICMzMjMyNTkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzogKGdzdF9mYWtlX3NyY19jbGFzc19pbml0KSwKKwkgIChnc3RfZmFrZV9zcmNfZ2V0X3RpbWVzKSwgKGdzdF9mYWtlX3NyY19jcmVhdGUpOgorCSAgRml4IGJyb2tlbiBzeW5jIG9wdGlvbiwgZml4ZXMgIzMyMzI1OQorCisyMDA1LTEyLTA3IDE1OjE2OjQzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YnVmZmVyLmM6IFNtYWxsIGRvY3MgdXBkYXRlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RidWZmZXIuYzoKKwkgIFNtYWxsIGRvY3MgdXBkYXRlLgorCSAgKiBnc3QvZ3N0Y2Fwcy5jOiAoZ3N0X2NhcHNfaXNfZXF1YWwpOgorCSAgRG9uJ3QgYXNzZXJ0IG9uIE5VTEwgPC0tPiBYLiBGaXhlcyAjMzIzMjYwCisJICAqIGdzdC9nc3RtaW5pb2JqZWN0LmM6IChnc3RfbWluaV9vYmplY3RfcmVwbGFjZSk6CisJICBJZiB3ZSdyZSBkb2luZyBhdG9taWMgb3BlcmF0aW9ucywgd2UgbWlnaHQganVzdCBhcyB3ZWxsIHVzZQorCSAgdGhlIHByb3BlciB3YXkgdG8gZ2V0IGFuIGF0b21pYyBwb2ludGVyLgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2dldF9wb3NpdGlvbik6CisJICBDbGVhbiB1cCBkZWJ1Z2dpbmcuCisKKzIwMDUtMTItMDcgMTE6NTI6MDUgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KKworCSAgZ3N0L3BhcnNlL2dyYW1tYXIueTogUmVtb3ZlIGhhbmRsaW5nIG9mIHsgfSBmb3IgdGhyZWFkcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvcGFyc2UvZ3JhbW1hci55OgorCSAgUmVtb3ZlIGhhbmRsaW5nIG9mIHsgfSBmb3IgdGhyZWFkcy4KKworMjAwNS0xMi0wNiAyMzozMjowMSArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBzcGVsaW5nIGZpeC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogc3BlbGluZyBmaXguCisKKzIwMDUtMTItMDYgMTk6Mjk6MTUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBkb2NzL2xpYnMvdG1wbC9nc3RkYXRhcHJvdG9jb2wuc2dtbDoKKwkqIGRvY3MvcmFuZG9tL29tZWdhL3Rlc3RpbmcvZ3N0b2JqZWN0LmM6CisJKiBnc3QvZ3N0LmM6CisJKiBnc3QvZ3N0Y2xvY2suYzoKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKKwkqIGdzdC9nc3RlcnJvci5jOgorCSogZ3N0L2dzdGV2ZW50LmM6CisJKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKKwkqIGdzdC9nc3RpbmZvLmM6CisJKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzoKKwkqIGdzdC9nc3RyZWdpc3RyeXhtbC5jOgorCSogZ3N0L2dzdHRhZ2xpc3QuYzoKKwkqIGdzdC9nc3R0YWdzZXR0ZXIuYzoKKwkqIGdzdC9nc3R0eXBlZmluZC5jOgorCSogZ3N0L2dzdHZhbHVlLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgorCSogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6CisJKiBwbHVnaW5zL2luZGV4ZXJzL2dzdGZpbGVpbmRleC5jOgorCSogcGx1Z2lucy9pbmRleGVycy9nc3RtZW1pbmRleC5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRhZy5jOgorCSogdGVzdHMvb2xkL2V4YW1wbGVzL2N1dHRlci9jdXR0ZXIuYzoKKwkqIHRlc3RzL29sZC9leGFtcGxlcy9taXhlci9taXhlci5jOgorCSogdGVzdHMvb2xkL2V4YW1wbGVzL3htbC9ydW54bWwuYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2Fwcy9ub3JtYWxpc2F0aW9uLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2RlYnVnL2dsb2JhbC5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9wYXJzZS9wYXJzZTEuYzoKKwkqIHRvb2xzL2dzdC14bWxpbnNwZWN0LmM6CisJKiB3aW4zMi9jb21tb24vZGlyZW50LmM6CisJICBleHBhbmQgdGFicworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBleHBhbmQgdGFicworCisyMDA1LTEyLTA2IDE5OjA0OjQ5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgorCSAgYmFjayB0byBjdnMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYmFjayB0byBjdnMKKworMjAwNS0xMi0wNSAxODoxMzowMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkgIGJhY2sgdG8gSEVBRAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBiYWNrIHRvIEhFQUQKKworPT09IHJlbGVhc2UgMC4xMC4wID09PQorCisyMDA1LTEyLTA1IDE4OjA1OjAxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogTkVXUzoKKwkqIFJFTEVBU0U6CisJKiBjb25maWd1cmUuYWM6CisJKiBkb2NzL2xpYnMvdG1wbC9nc3RkYXRhcHJvdG9jb2wuc2dtbDoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICByZWxlYXNpbmcgMC4xMC4wCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJlbGVhc2luZyAwLjEwLjAKKworMjAwNS0xMi0wNSAxNTo1Nzo0OCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHBvL2FmLnBvOgorCSogcG8vYXoucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kZS5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZnIucG86CisJKiBwby9pdC5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9ydS5wbzoKKwkqIHBvL3NxLnBvOgorCSogcG8vc3IucG86CisJKiBwby9zdi5wbzoKKwkqIHBvL3RyLnBvOgorCSogcG8vdWsucG86CisJKiBwby92aS5wbzoKKwkqIHBvL3poX0NOLnBvOgorCSAgVXBkYXRlIC5wbyBmaWxlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBVcGRhdGUgLnBvIGZpbGVzCisKKzIwMDUtMTItMDUgMTQ6MzY6MDUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBwby86IGFkZGVkIENoaW5lc2UgKFRyYWRpdGlvbmFsKSB0cmFuc2xhdGlvbgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBzdWJtaXR0ZWQgYnk6IEZ1bmRhIFdhbmcgPGZ1bmRhd2FuZ0BsaW51eC5uZXQuY24+CisJICAqIHBvL0xJTkdVQVM6CisJICAqIHBvL3poX0NOLnBvOgorCSAgYWRkZWQgQ2hpbmVzZSAoVHJhZGl0aW9uYWwpIHRyYW5zbGF0aW9uCisKKzIwMDUtMTItMDUgMTQ6MTQ6MzkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBwby9hZi5wbzoKKwkgIHVwZGF0ZWQgQWZyaWthYW5zIHRyYW5zbGF0aW9uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHVwZGF0ZWQgQWZyaWthYW5zIHRyYW5zbGF0aW9uCisKKzIwMDUtMTItMDUgMTQ6MTQ6MDIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBnc3QvZ3N0cGFkLmg6CisJICByZW1vdmUgZGVwcmVjYXRpb24gZ3VhcmQgZnJvbSBkb2NzdHJpbmcKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVtb3ZlIGRlcHJlY2F0aW9uIGd1YXJkIGZyb20gZG9jc3RyaW5nCisKKzIwMDUtMTItMDUgMTM6MTA6NDQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vYmcucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGUucG86CisJKiBwby9lbl9HQi5wbzoKKwkqIHBvL2ZyLnBvOgorCSogcG8vaXQucG86CisJKiBwby9uYi5wbzoKKwkqIHBvL25sLnBvOgorCSogcG8vcnUucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJICB1cGRhdGUgdHJhbnNsYXRpb25zCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHVwZGF0ZSB0cmFuc2xhdGlvbnMKKworMjAwNS0xMi0wNSAxMzowNjozNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBkb2NzL3JhbmRvbS90aG9tYXN2cy9UT0RPOgorCSogZ3N0L2dzdHV0aWxzLmM6CisJKiBnc3QvZ3N0dXRpbHMuaDoKKwkgIGZpeCBkb2NzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGZpeCBkb2NzCisKKzIwMDUtMTItMDUgMTM6MDE6MzUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jIChnc3RfYmFzZV90cmFuc2Zvcm1fcHJlcGFyZV9vdXRwdXRfYnVmKQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTEyLTA1ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgcGF0Y2ggYnk6IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3ByZXBhcmVfb3V0cHV0X2J1ZikKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fYnVmZmVyX2FsbG9jKToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jIChnc3RfcXVldWVfYnVmZmVyYWxsb2MpOiBDYWxsCisJICBhbGxvY19idWZmZXJfYW5kX3NldF9jYXBzLgorCSAgKiBnc3QvZ3N0cGFkLmMgKGdzdF9wYWRfYWxsb2NfYnVmZmVyKTogQ2hhbmdlZCB0byBub3QgY2FsbAorCSAgc2V0X2NhcHMgb24gdGhlIHNvdXJjZSBwYWQuCisJICAoZ3N0X3BhZF9hbGxvY19idWZmZXJfYW5kX3NldF9jYXBzKTogTmV3IGZ1bmN0aW9uLCBkb2VzIHdoYXQKKwkgIGFsbG9jX2J1ZmZlciB1c2VkIHRvIGRvLiBGaXhlcyAjMzIyODc0LgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LW5lZ290aWF0aW9uLnR4dDoKKwkgICogZG9jcy9wd2cvYWR2YW5jZWQtbmVnb3RpYXRpb24ueG1sOiBVcGRhdGUgZm9yIHRoZSBhbGxvY19idWZmZXIKKwkgIGNoYW5nZXMuCisKKzIwMDUtMTItMDUgMTI6MzM6NDQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzoKKwkgIHJlYWxseSBhZGQgdGhlIHRlc3RzIGZvciB0aGUgNjQvZG91YmxlIGNvbnZlcnNpb24KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVhbGx5IGFkZCB0aGUgdGVzdHMgZm9yIHRoZSA2NC9kb3VibGUgY29udmVyc2lvbgorCisyMDA1LTEyLTA1IDEyOjA5OjQzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogd2luMzIvY29tbW9uL2xpYmdzdGNvbnRyb2xsZXIuZGVmOgorCSAgYWRkIGRlZiBmb3IgY29udHJvbGxlcgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGQgZGVmIGZvciBjb250cm9sbGVyCisKKzIwMDUtMTItMDUgMTI6MDk6MDEgKzAwMDAgIFNlYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgorCisJICB3aW4zMi86IHdpbjMyIGJ1aWxkIGZpeGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHBhdGNoIGJ5OiBTZWJhc3RpZW4gTW91dHRlCisJICAqIHdpbjMyL01BTklGRVNUOgorCSAgKiB3aW4zMi9jb21tb24vY29uZmlnLmguaW46CisJICAqIHdpbjMyL3ZzNi9saWJnc3Rjb250cm9sbGVyLmRzcDoKKwkgIHdpbjMyIGJ1aWxkIGZpeGVzCisKKzIwMDUtMTItMDUgMTA6NTk6MTcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIEJhY2sgb3V0IHByZXZpb3VzIGNvZGUgY2hhbmdlcywgbGVhdmUgZG9jIHVwZGF0ZXMsIGZpbGUgYnVncyBpbnN0ZWFkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RjYXBzLmM6IChnc3RfY2Fwc19pc19lcXVhbCk6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiAoZ3N0X2Zha2Vfc3JjX2NsYXNzX2luaXQpLAorCSAgKGdzdF9mYWtlX3NyY19jcmVhdGUpOgorCSAgQmFjayBvdXQgcHJldmlvdXMgY29kZSBjaGFuZ2VzLCBsZWF2ZSBkb2MgdXBkYXRlcywgZmlsZSBidWdzCisJICBpbnN0ZWFkLgorCisyMDA1LTEyLTA1IDEwOjI3OjU5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuKjogRml4IGJyb2tlbiBzeW5jIGNvZGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6IChnc3RfZmFrZV9zcmNfY2xhc3NfaW5pdCksCisJICAoZ3N0X2Zha2Vfc3JjX2dldF90aW1lcyksIChnc3RfZmFrZV9zcmNfY3JlYXRlKToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmg6CisJICBGaXggYnJva2VuIHN5bmMgY29kZS4KKworMjAwNS0xMi0wNSAxMDoyMjo1NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGNhcHMuYzogQ29tcGFyaW5nIE5VTEwgYWdhaW5zdCAhTlVMTCB5aWVsZHMgZGlmZmVyZW50IGNhcHMsIG5vdCBhIGZhaWx1cmUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGNhcHMuYzogKGdzdF9jYXBzX2lzX2VxdWFsKToKKwkgIENvbXBhcmluZyBOVUxMIGFnYWluc3QgIU5VTEwgeWllbGRzIGRpZmZlcmVudCBjYXBzLCBub3QgYQorCSAgZmFpbHVyZS4KKworMjAwNS0xMi0wNSAxMDoxODoyNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHBpcGVsaW5lLmM6IEZpeCBzbWFsbCB0eXBvIGluIGRvY3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBpcGVsaW5lLmM6CisJICBGaXggc21hbGwgdHlwbyBpbiBkb2NzLgorCisyMDA1LTEyLTA1IDA5OjUzOjU0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0L2dzdC5jIChpbml0X3Bvc3QpOiByZW1vdmUgaGFyZC1jb2RlZCAwLjkgbG9jYXRpb24gZm9yIHJlZ2lzdHJpZXMvcGx1Z2lucyB3aXRoIGEgTUFKT1JNSU5PUiBvbmUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTItMDUgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICBwYXRjaCBieTogVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKwkgICogZ3N0L2dzdC5jIChpbml0X3Bvc3QpOiByZW1vdmUgaGFyZC1jb2RlZCAwLjkgbG9jYXRpb24gZm9yCisJICByZWdpc3RyaWVzL3BsdWdpbnMgd2l0aCBhIE1BSk9STUlOT1Igb25lLgorCSAgKHBsdWdpbl9kZXNjKTogUmVuYW1lIGxpYnJhcnkgZnJvbSBnc3Rjb3JlbGVlbWVudHMgdG8KKwkgIHN0YXRpY2VsZW1lbnRzLiBGaXhlcyAjMzIzMjIyLgorCisyMDA1LTEyLTA1IDA5OjQ1OjI5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IENoYW5nZSBkZWJ1ZyBjYXRlZ29yeSB0byAnY29sbGVjdHBhZHMnIGZyb20gJ2NvbGxlY3RfcGFkcycgKGZpeGVzICMzMjMyNTApLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0X3BhZHNfYmFzZV9pbml0KToKKwkgIENoYW5nZSBkZWJ1ZyBjYXRlZ29yeSB0byAnY29sbGVjdHBhZHMnIGZyb20gJ2NvbGxlY3RfcGFkcycKKwkgIChmaXhlcyAjMzIzMjUwKS4KKworMjAwNS0xMi0wNCAxOTo1NzoyNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgcmVuYW1lIHR3byBleHBvcnRzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJlbmFtZSB0d28gZXhwb3J0cworCisyMDA1LTEyLTA0IDE4OjU0OjE5ICswMDAwICBTZWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KKworCSAgbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6IHVzZSBjb252ZXJ0IGZ1bmN0aW9uIGZvciB1aW50NjQvZG91YmxlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHBhdGNoIGJ5OiBTZWJhc3RpZW4gTW91dHRlCisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jOgorCSAgdXNlIGNvbnZlcnQgZnVuY3Rpb24gZm9yIHVpbnQ2NC9kb3VibGUKKwkgICogd2luMzIvdnM2L2xpYmdzdGNvbnRyb2xsZXIuZHNwOgorCSAgbGluayB0byBHTGliCisKKzIwMDUtMTItMDQgMDk6NTc6MTEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBhZGQgdGVzdHMgdGhhdCBzZWVtIHRvIHNob3cgdGhhdCB0aGUgZ3VpbnQ2NC9nZG91YmxlIGNvbnZlcnNpb25zIGFyZSBjb3JyZWN0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X3V0aWxfZ3VpbnQ2NF90b19nZG91YmxlKSwKKwkgIChnc3RfdXRpbF9nZG91YmxlX3RvX2d1aW50NjQpLCAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludDY0KToKKwkgICogZ3N0L2dzdHV0aWxzLmg6CisJICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3V0aWxzX3N1aXRlKToKKwkgIGFkZCB0ZXN0cyB0aGF0IHNlZW0gdG8gc2hvdyB0aGF0IHRoZSBndWludDY0L2dkb3VibGUgY29udmVyc2lvbnMKKwkgIGFyZSBjb3JyZWN0LgorCisyMDA1LTEyLTAyIDEyOjQ0OjUzICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+CisKKwkqIGdzdHJlYW1lci5zcGVjLmluOgorCSAgbWFrZSB2ZXJzaW9uIG51bWJlciBhIGxpdHRsZSBsZXNzIGhvcGVmdWxsCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIG1ha2UgdmVyc2lvbiBudW1iZXIgYSBsaXR0bGUgbGVzcyBob3BlZnVsbAorCisyMDA1LTEyLTAyIDEyOjM0OjQ3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvOiBGaXggZG9jcyBhZ2Fpbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzogKGdzdF9yZWdpc3RyeV9hZGRfcGF0aCk6CisJICAqIGdzdC9nc3RyZWdpc3RyeS5oOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzoKKwkgIEZpeCBkb2NzIGFnYWluLgorCSAgUmVtb3ZlZCBvbGQgY29kZSBmcm9tIGdzdHJlZ2lzdHJ5eG1sLmMKKworMjAwNS0xMi0wMiAxMjoxOTo1NSArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgorCisJKiBnc3RyZWFtZXIuc3BlYy5pbjoKKwkgIGZpeCB1cGRhdGluZyBnc3RyZWFtZXIgc3BlYyBmaWxlIG1ha2luZyBpdCAwLjEwIHJlYWR5CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGZpeCB1cGRhdGluZyBnc3RyZWFtZXIgc3BlYyBmaWxlIG1ha2luZyBpdCAwLjEwIHJlYWR5CisKKzIwMDUtMTItMDIgMTE6MzY6NTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3R1dGlscy5jOiBTbWFsbCBjbGVhbnVwLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludDY0KSwKKwkgIChnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KToKKwkgIFNtYWxsIGNsZWFudXAuCisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfaGFuZGxlX29iamVjdCk6CisJICBBZGQgZGVidWcgbG9nIGxpbmUuCisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2V2ZW50KToKKwkgIEFkZCBGSVhNRS4KKworMjAwNS0xMi0wMiAwOTo0ODoxNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIHdpbjMyLzogcmVuYW1lZCBjb3JlIGVsZW1lbnRzIHBsdWdpbgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHdpbjMyL01BTklGRVNUOgorCSAgKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICAqIHdpbjMyL3ZzNi9nc3RyZWFtZXIuZHN3OgorCSAgKiB3aW4zMi92czYvbGliZ3N0Y29yZWVsZW1lbnRzLmRzcDoKKwkgICogd2luMzIvdnM2L2xpYmdzdGVsZW1lbnRzLmRzcDoKKwkgIHJlbmFtZWQgY29yZSBlbGVtZW50cyBwbHVnaW4KKworMjAwNS0xMi0wMiAwMTozNToyMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIHRvb2xzL2dzdC1ydW4uYzogZG8gcGllY2Utd2lzZSBtYWpvci9taW5vciBjb21wYXJpc29uIHNvIDAuOSA8IDAuMTAgYWxzbyBhbGxvdyAuZXhlIGV4dGVuc2lvbnMgZm9yIHRvb2xzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdG9vbHMvZ3N0LXJ1bi5jOiAoY29tcGFyZV9tYWpvcl9taW5vciksIChmaW5kX2hpZ2hlc3RfdmVyc2lvbiksCisJICAoZ2V0X2NhbmRpZGF0ZXMpOgorCSAgZG8gcGllY2Utd2lzZSBtYWpvci9taW5vciBjb21wYXJpc29uIHNvIDAuOSA8IDAuMTAKKwkgIGFsc28gYWxsb3cgLmV4ZSBleHRlbnNpb25zIGZvciB0b29scworCisyMDA1LTEyLTAxIDIzOjU3OjA3ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+CisKKwkgIGdzdC9nc3QuYzogRXNjYXBlIGEgJSB0byBtYWtlIGd0a2RvYyBoYXBwaWVyOyBidWcgMzIyOTU4LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3QuYzoKKwkgIEVzY2FwZSBhICUgdG8gbWFrZSBndGtkb2MgaGFwcGllcjsgYnVnIDMyMjk1OC4KKworMjAwNS0xMi0wMSAxOToxODo1NyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkgIGJhY2sgdG8gSEVBRAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBiYWNrIHRvIEhFQUQKKworPT09IHJlbGVhc2UgMC45LjcgPT09CisKKzIwMDUtMTItMDEgMTk6MTE6NTYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDSEFOR0VTLTAuOToKKwkqIENoYW5nZUxvZzoKKwkqIE5FV1M6CisJKiBSRUxFQVNFOgorCSogY29uZmlndXJlLmFjOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkgIHJlbGVhc2luZyAwLjkuNworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICByZWxlYXNpbmcgMC45LjcKKworMjAwNS0xMi0wMSAxNjo1MToyMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIGNvbW1vbjoKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGRvY3MvbGlicy90bXBsL2dzdGRhdGFwcm90b2NvbC5zZ21sOgorCSogZG9jcy9yYW5kb20vcmVsZWFzZToKKwkqIHBvL2FmLnBvOgorCSogcG8vYXoucG86CisJKiBwby9iZy5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kZS5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZnIucG86CisJKiBwby9pdC5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9ydS5wbzoKKwkqIHBvL3NxLnBvOgorCSogcG8vc3IucG86CisJKiBwby9zdi5wbzoKKwkqIHBvL3RyLnBvOgorCSogcG8vdWsucG86CisJKiBwby92aS5wbzoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaC5pbjoKKwkqIHdpbjMyL3ZzNi9nc3RfaW5zcGVjdC5kc3A6CisJKiB3aW4zMi92czYvZ3N0X2xhdW5jaC5kc3A6CisJKiB3aW4zMi92czYvbGliZ3N0YmFzZS5kc3A6CisJKiB3aW4zMi92czYvbGliZ3N0ZWxlbWVudHMuZHNwOgorCSogd2luMzIvdnM2L2xpYmdzdHJlYW1lci5kc3A6CisJKiB3aW4zMi92czcvR1N0cmVhbWVyLnZjcHJvajoKKwkqIHdpbjMyL3ZzNy9nc3QtaW5zcGVjdC52Y3Byb2o6CisJKiB3aW4zMi92czcvZ3N0LWxhdW5jaC52Y3Byb2o6CisJKiB3aW4zMi92czcvbGliZ3N0YmFzZS52Y3Byb2o6CisJICBidW1wIEdTVF9NQUpPUk1JTk9SIHRvIDAuMTAgcmVzZXQgbGlidG9vbCB2ZXJzaW9uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGJ1bXAgR1NUX01BSk9STUlOT1IgdG8gMC4xMAorCSAgcmVzZXQgbGlidG9vbCB2ZXJzaW9uCisKKzIwMDUtMTItMDEgMTU6Mjg6MjUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiB0b29scy9nc3QtZmVlZGJhY2stMC43OgorCSAgcmVtb3ZlIG9sZCBmaWxlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJlbW92ZSBvbGQgZmlsZQorCisyMDA1LTEyLTAxIDE1OjE4OjQxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZG9jcy9wbHVnaW5zLy5naXRpZ25vcmU6CisJICBpZ25vcmUgbW9yZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBpZ25vcmUgbW9yZQorCisyMDA1LTEyLTAxIDE1OjA4OjA5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogcG8vTElOR1VBUzoKKwkqIHBvL2JnLnBvOgorCSAgQWRkZWQgQnVsZ2FyaWFuIHRyYW5zbGF0aW9uIGJ5IChBbGV4YW5kZXIgU2hvcG92KQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBBZGRlZCBCdWxnYXJpYW4gdHJhbnNsYXRpb24gYnkgKEFsZXhhbmRlciBTaG9wb3YpCisKKzIwMDUtMTItMDEgMTU6MDQ6MDMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC1idWlsZC5zdGFtcDoKKwkgIGNvbW1pdCBmaW5hbCBzdGFtcCBmaWxlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGNvbW1pdCBmaW5hbCBzdGFtcCBmaWxlCisKKzIwMDUtMTItMDEgMTQ6NTE6MDcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuaGllcmFyY2h5OgorCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmludGVyZmFjZXM6CisJKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMucHJlcmVxdWlzaXRlczoKKwkqIHBvL2FmLnBvOgorCSogcG8vYXoucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGUucG86CisJKiBwby9lbl9HQi5wbzoKKwkqIHBvL2ZyLnBvOgorCSogcG8vaXQucG86CisJKiBwby9uYi5wbzoKKwkqIHBvL25sLnBvOgorCSogcG8vcnUucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJICBhZGQgbW9yZSBmaWxlcyBmb3IgZGlzdGNoZWNrCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFkZCBtb3JlIGZpbGVzIGZvciBkaXN0Y2hlY2sKKworMjAwNS0xMi0wMSAxNDo0MDo0NyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzOgorCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLnNpZ25hbHM6CisJICBhZGQgc2lnbmFscyBhbmQgYXJncworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGQgc2lnbmFscyBhbmQgYXJncworCisyMDA1LTEyLTAxIDEyOjM2OjEwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBsdWdpbi5jOgorCSAgZml4IHRlc3QKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZml4IHRlc3QKKworMjAwNS0xMi0wMSAxMjoyOTozNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIGNvbW1vbjoKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGRvY3MvTWFrZWZpbGUuYW06CisJKiBkb2NzL2dzdC9NYWtlZmlsZS5hbToKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6CisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzOgorCSogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzLmluOgorCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgorCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLWRvY3Muc2dtbDoKKwkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy1zZWN0aW9ucy50eHQ6CisJKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMudHlwZXM6CisJKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC5zdGFtcDoKKwkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgorCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6CisJKiBkb2NzL3BsdWdpbnMvc2Nhbm9iai1idWlsZC5zdGFtcDoKKwkqIGdzdHJlYW1lci5zcGVjLmluOgorCSogcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZS5hbToKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6CisJKiBwbHVnaW5zL2luZGV4ZXJzL01ha2VmaWxlLmFtOgorCSogcGx1Z2lucy9pbmRleGVycy9nc3RpbmRleGVycy5jOgorCSAgZG9jdW1lbnQgY29yZSBwbHVnaW5zIGluIGEgc2VwYXJhdGUgZG9jdW1lbnQganVzdCBsaWtlIGFsbCB0aGUgb3RoZXJzIHJlbmFtZSB0aGVzZSBwbHVnaW5zIHRvIHNvbWV0aGluZyBzdGFydGluZyB3aXRoLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGRvY3VtZW50IGNvcmUgcGx1Z2lucyBpbiBhIHNlcGFyYXRlIGRvY3VtZW50IGp1c3QgbGlrZSBhbGwgdGhlCisJICBvdGhlcnMKKwkgIHJlbmFtZSB0aGVzZSBwbHVnaW5zIHRvIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIGNvcmUKKworMjAwNS0xMi0wMSAxMjowMDo1NiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0ZXZlbnQuaCAoc3RydWN0IF9Hc3RFdmVudCk6IE1lYW50IHRvIHJlbW92ZSB0aGUgZXh0cmEgcGFkZGluZyBoZXJlIGJlZm9yZSwgYnV0IGl0IG1pc3NlZCB0aGUgY29tbWl0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTEyLTAxICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvZ3N0ZXZlbnQuaCAoc3RydWN0IF9Hc3RFdmVudCk6IE1lYW50IHRvIHJlbW92ZSB0aGUgZXh0cmEKKwkgIHBhZGRpbmcgaGVyZSBiZWZvcmUsIGJ1dCBpdCBtaXNzZWQgdGhlIGNvbW1pdC4KKworMjAwNS0xMi0wMSAxMDowNzoyNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aGVscGVyLmM6CisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkqIHdpbjMyL3ZzNi9nc3RyZWFtZXIuZHN3OgorCSogd2luMzIvdnM2L2xpYmdzdGNvbnRyb2xsZXIuZHNwOgorCSAgYWRkIGxpYmdzdGNvbnRyb2xsZXIgdG8gdGhlIGJ1aWxkCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFkZCBsaWJnc3Rjb250cm9sbGVyIHRvIHRoZSBidWlsZAorCisyMDA1LTEyLTAxIDA5OjU0OjU2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6IHdoaXRlc3BhY2UgcHJpY2VzIGhhdmUgY3Jhc2hlZCwgd2Ugc2hvdWxkIGZlZWwgZnJlZSB0byB1c2Ugc29tZSBub3cgdXNlIGdzdF9nLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6CisJICB3aGl0ZXNwYWNlIHByaWNlcyBoYXZlIGNyYXNoZWQsIHdlIHNob3VsZCBmZWVsIGZyZWUgdG8gdXNlIHNvbWUgbm93CisJICB1c2UgZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZQorCisyMDA1LTEyLTAxIDA5OjMyOjE3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmg6CisJICBmaXggdHlwbworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaXggdHlwbworCisyMDA1LTEyLTAxIDA5OjIzOjIwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGhlbHBlci5jOgorCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2xpYi5jOgorCSAgd3JhcCBjb25maWcuaCBpbmNsdWRlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHdyYXAgY29uZmlnLmggaW5jbHVkZQorCisyMDA1LTEyLTAxIDAyOjA4OjE4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgIHVwZGF0ZSBkb2NzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHVwZGF0ZSBkb2NzCisKKzIwMDUtMTItMDEgMDA6NTQ6NTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBwbHVnaW5zL2VsZW1lbnRzLzogbW9yZSBhbmFsIGNsZWFudXAKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6IChnc3RfZmRfc2lua19fYmFzZV9pbml0KSwKKwkgIChnc3RfZmRfc2lua19fY2xhc3NfaW5pdCksIChnc3RfZmRfc2lua19faW5pdCksCisJICAoZ3N0X2ZkX3NpbmtfX2NoYWluKSwgKGdzdF9mZF9zaW5rX19zZXRfcHJvcGVydHkpLAorCSAgKGdzdF9mZF9zaW5rX19nZXRfcHJvcGVydHkpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5oOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6IChfZG9faW5pdCksIChnc3RfZmRfc3JjX2Jhc2VfaW5pdCksCisJICAoZ3N0X2ZkX3NyY19jbGFzc19pbml0KSwgKGdzdF9mZF9zcmNfaW5pdCksIChnc3RfZmRfc3JjX2Rpc3Bvc2UpLAorCSAgKGdzdF9mZF9zcmNfdXBkYXRlX2ZkKSwgKGdzdF9mZF9zcmNfc3RhcnQpLCAoZ3N0X2ZkX3NyY19zdG9wKSwKKwkgIChnc3RfZmRfc3JjX3VubG9jayksIChnc3RfZmRfc3JjX3NldF9wcm9wZXJ0eSksCisJICAoZ3N0X2ZkX3NyY19nZXRfcHJvcGVydHkpLCAoZ3N0X2ZkX3NyY19jcmVhdGUpLAorCSAgKGdzdF9mZF9zcmNfaXNfc2Vla2FibGUpLCAoZ3N0X2ZkX3NyY19nZXRfc2l6ZSksCisJICAoZ3N0X2ZkX3NyY191cmlfZ2V0X3R5cGUpLCAoZ3N0X2ZkX3NyY191cmlfZ2V0X3Byb3RvY29scyksCisJICAoZ3N0X2ZkX3NyY191cmlfZ2V0X3VyaSksIChnc3RfZmRfc3JjX3VyaV9zZXRfdXJpKSwKKwkgIChnc3RfZmRfc3JjX3VyaV9oYW5kbGVyX2luaXQpOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmg6CisJICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9nZXRfdHlwZSk6CisJICBtb3JlIGFuYWwgY2xlYW51cAorCisyMDA1LTExLTMwIDE5OjM2OjU0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogZG9jcy9nc3QvTWFrZWZpbGUuYW06CisJKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXMuaW46CisJKiBnc3QvTWFrZWZpbGUuYW06CisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vY2EucG86CisJKiBwby9jcy5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSAgZml4IHRoZSBkb2NzIGJ1aWxkCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGZpeCB0aGUgZG9jcyBidWlsZAorCisyMDA1LTExLTMwIDE5OjAzOjU5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzLmluOgorCSAgYWRkIG5ldyBpbnB1dCB0eXBlcyBmaWxlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFkZCBuZXcgaW5wdXQgdHlwZXMgZmlsZQorCisyMDA1LTExLTMwIDE5OjAxOjUzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgdmFyaW91cyBmaXhlcyB0byBtYWtlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgKiBnc3QvTWFrZWZpbGUuYW06CisJICAqIGdzdC9nc3QuYzoKKwkgICogZ3N0L2dzdHBsdWdpbi5oOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnkuaDoKKwkgICogdGVzdHMvYmVuY2htYXJrcy9jb21wbGV4aXR5LmM6CisJICAqIHRlc3RzL2JlbmNobWFya3MvbWFzcy1lbGVtZW50cy5jOgorCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgICogdG9vbHMvTWFrZWZpbGUuYW06CisJICAqIHRvb2xzL2dzdC1pbnNwZWN0LmM6CisJICAqIHRvb2xzL2dzdC14bWxpbnNwZWN0LmM6CisJICB2YXJpb3VzIGZpeGVzIHRvIG1ha2UKKwkgIC0tZGlzYWJsZS1ubHMgLS1kaXNhYmxlLXJlZ2lzdHJ5IC0tZGlzYWJsZS1sb2Fkc2F2ZSAgICAgICAgICAgLS1kaXNhYmxlLXBhcnNlIC0tZGlzYWJsZS1nc3QtZGVidWcKKwkgIHdvcmsgYW5kIGdldCB0aGUgY29yZSAuc28gZG93biB0byAzNjA0NDQgYnl0ZXMgYWZ0ZXIgc3RyaXBwaW5nCisKKzIwMDUtMTEtMzAgMTc6MDU6MjkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBkb2NzL2xpYnMvdG1wbC9nc3RkYXRhcHJvdG9jb2wuc2dtbDoKKwkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSAgbW92ZSBsb2NhdGlvbiBvZiB0ZXN0IHJlZ2lzdHJ5CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIG1vdmUgbG9jYXRpb24gb2YgdGVzdCByZWdpc3RyeQorCisyMDA1LTExLTMwIDE2OjQ1OjU0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzLy5naXRpZ25vcmU6CisJICBpZ25vcmUgbW9yZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBpZ25vcmUgbW9yZQorCisyMDA1LTExLTMwIDE2OjQ1OjE1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogdGVzdHMvbWlzYy9NYWtlZmlsZS5hbToKKwkgIG1pc3NpbmcgbWFrZWZpbGUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgbWlzc2luZyBtYWtlZmlsZQorCisyMDA1LTExLTMwIDE2OjQzOjE2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogc2NyaXB0cy9jdnMtdXBkYXRlLnNoOgorCSAgcHJ1bmUgZW1wdHkgZGlycyB3aGVuIHVwZGF0aW5nCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHBydW5lIGVtcHR5IGRpcnMgd2hlbiB1cGRhdGluZworCisyMDA1LTExLTMwIDE2OjQyOjI3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogRE9DQlVJTERJTkc6CisJKiBkb2NzL1JFQURNRToKKwkgIHJlbW92ZSBlbXB0eSBkaXJzOyBtb3ZlIGRvY2J1aWxkaW5nIG5vdGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJlbW92ZSBlbXB0eSBkaXJzOyBtb3ZlIGRvY2J1aWxkaW5nIG5vdGVzCisKKzIwMDUtMTEtMzAgMTY6Mzk6MDQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBkZXNjZW5kIGludG8gdGVzdHMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBNYWtlZmlsZS5hbToKKwkgICogY29uZmlndXJlLmFjOgorCSAgZGVzY2VuZCBpbnRvIHRlc3RzCisJICAqIGRvY3MvcmFuZG9tL3Rob21hc3ZzL1RPRE86CisJICAqIHRlc3RzL01ha2VmaWxlLmFtOgorCSAgKiB0ZXN0cy9SRUFETUU6CisJICBhZGQgYSBSRUFETUUKKworMjAwNS0xMS0zMCAxNjozMjoyMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHRlc3RzL2JlbmNobWFya3MvLmdpdGlnbm9yZToKKwkqIHRlc3RzL2NoZWNrL2dlbmVyaWMvLmdpdGlnbm9yZToKKwkqIHRlc3RzL2NoZWNrL2xpYnMvLmdpdGlnbm9yZToKKwkgIGlnbm9yZSBtb3JlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGlnbm9yZSBtb3JlCisKKzIwMDUtMTEtMzAgMTY6MzA6NDEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBSRUFETUU6CisJICB1cGRhdGUgUkVBRE1FCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHVwZGF0ZSBSRUFETUUKKworMjAwNS0xMS0zMCAxNjoyOToyOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGNvbW1vbjoKKwkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSAgZG9uJ3QgZmFpbCBvbiBtaXNzaW5nIHJlZ2lzdHJ5CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGRvbid0IGZhaWwgb24gbWlzc2luZyByZWdpc3RyeQorCisyMDA1LTExLTMwIDE2OjI4OjE3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogd2luMzIvUkVBRE1FLnR4dDoKKwkgIGFkZCBhIFJFQURNRQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGQgYSBSRUFETUUKKworMjAwNS0xMS0zMCAxNjoyNjozNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIHdpbjMyL0dTdHJlYW1lci52Y3Byb2o6CisJKiB3aW4zMi9NQU5JRkVTVDoKKwkqIHdpbjMyL01ha2VmaWxlOgorCSogd2luMzIvTWFrZWZpbGUuaW5zcGVjdDoKKwkqIHdpbjMyL01ha2VmaWxlLmxhdW5jaDoKKwkqIHdpbjMyL01ha2VmaWxlLnJlZ2lzdGVyOgorCSogd2luMzIvUkVBRE1FLnR4dDoKKwkqIHdpbjMyL2dzdC1pbnNwZWN0LnZjcHJvajoKKwkqIHdpbjMyL2dzdC1sYXVuY2gudmNwcm9qOgorCSogd2luMzIvZ3N0LXJlZ2lzdGVyLnZjcHJvajoKKwkqIHdpbjMyL2dzdGVsZW1lbnRzLnZjcHJvajoKKwkqIHdpbjMyL2dzdGdldGJpdHMuZGVmOgorCSogd2luMzIvZ3N0Z2V0Yml0cy52Y3Byb2o6CisJKiB3aW4zMi9nc3RyZWFtZXItZGJnLmRlZjoKKwkqIHdpbjMyL2dzdHJlYW1lci5kZWY6CisJKiB3aW4zMi9saWJnc3RiYXNlLmRlZjoKKwkqIHdpbjMyL2xpYmdzdGJhc2UudmNwcm9qOgorCSogd2luMzIvbGlua19vbGRydW50aW1lLmM6CisJKiB3aW4zMi9tbWFuLmM6CisJKiB3aW4zMi9tbWFuLmg6CisJKiB3aW4zMi9tbWFuLmlubDoKKwkqIHdpbjMyL21zdmM3MS5zbG46CisJICBtb3ZlIGV2ZW4gbW9yZSBzdHVmZiwgd2luMzIvIGlzIG5pY2UgYW5kIGNsZWFuIG5vdworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBtb3ZlIGV2ZW4gbW9yZSBzdHVmZiwgd2luMzIvIGlzIG5pY2UgYW5kIGNsZWFuIG5vdworCisyMDA1LTExLTMwIDE2OjE3OjIzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogbGlicy9nc3QvY29udHJvbC8uZ2l0aWdub3JlOgorCSogcG8vYWYucG86CisJKiBwby9hei5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kZS5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZnIucG86CisJKiBwby9pdC5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9ydS5wbzoKKwkqIHBvL3NxLnBvOgorCSogcG8vc3IucG86CisJKiBwby9zdi5wbzoKKwkqIHBvL3RyLnBvOgorCSogcG8vdWsucG86CisJKiBwby92aS5wbzoKKwkqIHdpbjMyL01BTklGRVNUOgorCSogd2luMzIvY29uZmlnLmg6CisJKiB3aW4zMi9kaXJlbnQuYzoKKwkqIHdpbjMyL2RpcmVudC5oOgorCSogd2luMzIvZ3N0Ynl0ZXN0cmVhbS5kZWY6CisJKiB3aW4zMi9nc3RieXRlc3RyZWFtLnZjcHJvajoKKwkqIHdpbjMyL2dzdGNvbmZpZy5oOgorCSogd2luMzIvZ3N0ZW51bXR5cGVzLmM6CisJKiB3aW4zMi9nc3RlbnVtdHlwZXMuaDoKKwkqIHdpbjMyL2dzdG9wdGltYWxzY2hlZHVsZXIudmNwcm9qOgorCSogd2luMzIvZ3N0dmVyc2lvbi5oOgorCSogd2luMzIvZ3RjaGFyLmg6CisJKiB3aW4zMi90ZXN0c3VpdGUvYmlucy52Y3Byb2o6CisJKiB3aW4zMi90ZXN0c3VpdGUvYnl0ZXN0cmVhbS52Y3Byb2o6CisJKiB3aW4zMi90ZXN0c3VpdGUvY2Fwcy52Y3Byb2o6CisJKiB3aW4zMi90ZXN0c3VpdGUvY2xlYW51cC52Y3Byb2o6CisJKiB3aW4zMi90ZXN0c3VpdGUvY2xvY2sudmNwcm9qOgorCSogd2luMzIvdGVzdHN1aXRlL2RlYnVnLnZjcHJvajoKKwkqIHdpbjMyL3Rlc3RzdWl0ZS9kbG9wZW4udmNwcm9qOgorCSogd2luMzIvdGVzdHN1aXRlL2R5bnBhcmFtcy52Y3Byb2o6CisJKiB3aW4zMi90ZXN0c3VpdGUvZWxlbWVudHMudmNwcm9qOgorCSogd2luMzIvdGVzdHN1aXRlL2dob3N0cGFkcy52Y3Byb2o6CisJKiB3aW4zMi90ZXN0c3VpdGUvaW5kZXhlcnMudmNwcm9qOgorCSogd2luMzIvdGVzdHN1aXRlL25lZ290aWF0aW9uLnZjcHJvajoKKwkqIHdpbjMyL3Rlc3RzdWl0ZS9wYXJzZS52Y3Byb2o6CisJKiB3aW4zMi90ZXN0c3VpdGUvcGx1Z2luLnZjcHJvajoKKwkqIHdpbjMyL3Rlc3RzdWl0ZS9yZWZjb3VudGluZy52Y3Byb2o6CisJKiB3aW4zMi90ZXN0c3VpdGUvc2NoZWR1bGVycy52Y3Byb2o6CisJKiB3aW4zMi90ZXN0c3VpdGUvc3RhdGVzLnZjcHJvajoKKwkqIHdpbjMyL3Rlc3RzdWl0ZS90YWdzLnZjcHJvajoKKwkqIHdpbjMyL3Rlc3RzdWl0ZS90aHJlYWRzLnZjcHJvajoKKwkgIHJlbW92ZSBvbGQgd2luMzIgc3R1ZmYgdGhhdCBpc24ndCBtYWludGFpbmVkIGFuZCBzaG91bGQgYmUgcmVvcmdhbml6ZWQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVtb3ZlIG9sZCB3aW4zMiBzdHVmZiB0aGF0IGlzbid0IG1haW50YWluZWQgYW5kIHNob3VsZCBiZQorCSAgcmVvcmdhbml6ZWQKKworMjAwNS0xMS0zMCAxNjoxMjo0OCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGxpYnMvZ3N0L2dldGJpdHMvLmdpdGlnbm9yZToKKwkgIHJlbW92ZSBnZXRiaXRzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJlbW92ZSBnZXRiaXRzCisKKzIwMDUtMTEtMzAgMTY6MTA6NTcgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgY29uZmlndXJlLmFjIChHU1RfUEtHX0RFUFMpOiBSZXZlcnQgcHJldmlvdXMgcGF0Y2gsIG1ha2VzIGxvYWRpbmcgdGhlIGdzdC5pbnRlcmZhY2VzIHB5dGhvbiBtb2R1bGUgYm9yay4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0zMCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogY29uZmlndXJlLmFjIChHU1RfUEtHX0RFUFMpOiBSZXZlcnQgcHJldmlvdXMgcGF0Y2gsIG1ha2VzCisJICBsb2FkaW5nIHRoZSBnc3QuaW50ZXJmYWNlcyBweXRob24gbW9kdWxlIGJvcmsuCisJICAqIGNvbmZpZ3VyZS5hYyAoR1NUX1BLR19ERVBTKTogVXNlIGdtb2R1bGUtbm8tZXhwb3J0LTIuMC5wYywKKwkgIGF2YWlsYWJsZSBzaW5jZSBHTGliIDIuMi4gRml4ZXMgIzMxODAzMS4KKworMjAwNS0xMS0zMCAxNjowODozMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIE1ha2VmaWxlLmFtOgorCSogY2hlY2svLmdpdGlnbm9yZToKKwkqIGNoZWNrL01ha2VmaWxlLmFtOgorCSogY2hlY2svZWxlbWVudHMvLmdpdGlnbm9yZToKKwkqIGNoZWNrL2VsZW1lbnRzL2Zha2VzcmMuYzoKKwkqIGNoZWNrL2VsZW1lbnRzL2Zkc3JjLmM6CisJKiBjaGVjay9lbGVtZW50cy9pZGVudGl0eS5jOgorCSogY2hlY2svZ2VuZXJpYy8uZ2l0aWdub3JlOgorCSogY2hlY2svZ2VuZXJpYy9zdGF0ZXMuYzoKKwkqIGNoZWNrL2dzdC1saWJzLy5naXRpZ25vcmU6CisJKiBjaGVjay9nc3QtbGlicy9jb250cm9sbGVyLmM6CisJKiBjaGVjay9nc3QtbGlicy9nZHAuYzoKKwkqIGNoZWNrL2dzdC8uZ2l0aWdub3JlOgorCSogY2hlY2svZ3N0L2NhcHNsaXN0Lmg6CisJKiBjaGVjay9nc3QvZ3N0LmM6CisJKiBjaGVjay9nc3QvZ3N0YmluLmM6CisJKiBjaGVjay9nc3QvZ3N0YnVmZmVyLmM6CisJKiBjaGVjay9nc3QvZ3N0YnVzLmM6CisJKiBjaGVjay9nc3QvZ3N0Y2Fwcy5jOgorCSogY2hlY2svZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGNoZWNrL2dzdC9nc3RldmVudC5jOgorCSogY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6CisJKiBjaGVjay9nc3QvZ3N0aXRlcmF0b3IuYzoKKwkqIGNoZWNrL2dzdC9nc3RtZXNzYWdlLmM6CisJKiBjaGVjay9nc3QvZ3N0bWluaW9iamVjdC5jOgorCSogY2hlY2svZ3N0L2dzdG9iamVjdC5jOgorCSogY2hlY2svZ3N0L2dzdHBhZC5jOgorCSogY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmM6CisJKiBjaGVjay9nc3QvZ3N0cGx1Z2luLmM6CisJKiBjaGVjay9nc3QvZ3N0c2VnbWVudC5jOgorCSogY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSogY2hlY2svZ3N0L2dzdHN5c3RlbWNsb2NrLmM6CisJKiBjaGVjay9nc3QvZ3N0dGFnLmM6CisJKiBjaGVjay9nc3QvZ3N0dXRpbHMuYzoKKwkqIGNoZWNrL2dzdC9nc3R2YWx1ZS5jOgorCSogY2hlY2svbmV0Ly5naXRpZ25vcmU6CisJKiBjaGVjay9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzoKKwkqIGNoZWNrL25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzoKKwkqIGNoZWNrL3BpcGVsaW5lcy8uZ2l0aWdub3JlOgorCSogY2hlY2svcGlwZWxpbmVzL2NsZWFudXAuYzoKKwkqIGNoZWNrL3BpcGVsaW5lcy9zaW1wbGVfbGF1bmNoX2xpbmVzLmM6CisJKiBjaGVjay9waXBlbGluZXMvc3RyZXNzLmM6CisJKiBjaGVjay9zdGF0ZXMvLmdpdGlnbm9yZToKKwkqIGNoZWNrL3N0YXRlcy9zaW5rcy5jOgorCSogY29uZmlndXJlLmFjOgorCSogZXhhbXBsZXMvTWFrZWZpbGUuYW06CisJKiBleGFtcGxlcy9hcHByZWFkZXIvLmdpdGlnbm9yZToKKwkqIGV4YW1wbGVzL2FwcHJlYWRlci9NYWtlZmlsZS5hbToKKwkqIGV4YW1wbGVzL2FwcHJlYWRlci9hcHByZWFkZXIuYzoKKwkqIGV4YW1wbGVzL2NvbnRyb2xsZXIvLmdpdGlnbm9yZToKKwkqIGV4YW1wbGVzL2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06CisJKiBleGFtcGxlcy9jb250cm9sbGVyL2F1ZGlvLWV4YW1wbGUuYzoKKwkqIGV4YW1wbGVzL2N1dHRlci8uZ2l0aWdub3JlOgorCSogZXhhbXBsZXMvY3V0dGVyL01ha2VmaWxlLmFtOgorCSogZXhhbXBsZXMvY3V0dGVyL2N1dHRlci5jOgorCSogZXhhbXBsZXMvY3V0dGVyL2N1dHRlci5oOgorCSogZXhhbXBsZXMvZXZlbnRzL01ha2VmaWxlLmFtOgorCSogZXhhbXBsZXMvZXZlbnRzL3NlZWsuYzoKKwkqIGV4YW1wbGVzL2hlbGxvd29ybGQvLmdpdGlnbm9yZToKKwkqIGV4YW1wbGVzL2hlbGxvd29ybGQvTWFrZWZpbGUuYW06CisJKiBleGFtcGxlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQuYzoKKwkqIGV4YW1wbGVzL2hlbGxvd29ybGQyLy5naXRpZ25vcmU6CisJKiBleGFtcGxlcy9oZWxsb3dvcmxkMi9NYWtlZmlsZS5hbToKKwkqIGV4YW1wbGVzL2hlbGxvd29ybGQyL2hlbGxvd29ybGQyLmM6CisJKiBleGFtcGxlcy9sYXVuY2gvLmdpdGlnbm9yZToKKwkqIGV4YW1wbGVzL2xhdW5jaC9NYWtlZmlsZS5hbToKKwkqIGV4YW1wbGVzL2xhdW5jaC9tcDNwYXJzZWxhdW5jaC5jOgorCSogZXhhbXBsZXMvbGF1bmNoL21wM3BsYXk6CisJKiBleGFtcGxlcy9tYW51YWwvLmdpdGlnbm9yZToKKwkqIGV4YW1wbGVzL21hbnVhbC9NYWtlZmlsZS5hbToKKwkqIGV4YW1wbGVzL21hbnVhbC9leHRyYWN0LnBsOgorCSogZXhhbXBsZXMvbWV0YWRhdGEvTWFrZWZpbGUuYW06CisJKiBleGFtcGxlcy9tZXRhZGF0YS9yZWFkLW1ldGFkYXRhLmM6CisJKiBleGFtcGxlcy9taXhlci8uZ2l0aWdub3JlOgorCSogZXhhbXBsZXMvbWl4ZXIvTWFrZWZpbGUuYW06CisJKiBleGFtcGxlcy9taXhlci9taXhlci5jOgorCSogZXhhbXBsZXMvbWl4ZXIvbWl4ZXIuaDoKKwkqIGV4YW1wbGVzL3Bpbmdwb25nLy5naXRpZ25vcmU6CisJKiBleGFtcGxlcy9waW5ncG9uZy9NYWtlZmlsZS5hbToKKwkqIGV4YW1wbGVzL3Bpbmdwb25nL3Bpbmdwb25nLmM6CisJKiBleGFtcGxlcy9wbHVnaW5zLy5naXRpZ25vcmU6CisJKiBleGFtcGxlcy9wbHVnaW5zL01ha2VmaWxlLmFtOgorCSogZXhhbXBsZXMvcGx1Z2lucy9leGFtcGxlLmM6CisJKiBleGFtcGxlcy9wbHVnaW5zL2V4YW1wbGUuaDoKKwkqIGV4YW1wbGVzL3B3Zy8uZ2l0aWdub3JlOgorCSogZXhhbXBsZXMvcHdnL01ha2VmaWxlLmFtOgorCSogZXhhbXBsZXMvcHdnL2V4dHJhY3QucGw6CisJKiBleGFtcGxlcy9xdWV1ZS8uZ2l0aWdub3JlOgorCSogZXhhbXBsZXMvcXVldWUvTWFrZWZpbGUuYW06CisJKiBleGFtcGxlcy9xdWV1ZS9xdWV1ZS5jOgorCSogZXhhbXBsZXMvcXVldWUyLy5naXRpZ25vcmU6CisJKiBleGFtcGxlcy9xdWV1ZTIvTWFrZWZpbGUuYW06CisJKiBleGFtcGxlcy9xdWV1ZTIvcXVldWUyLmM6CisJKiBleGFtcGxlcy9xdWV1ZTMvLmdpdGlnbm9yZToKKwkqIGV4YW1wbGVzL3F1ZXVlMy9NYWtlZmlsZS5hbToKKwkqIGV4YW1wbGVzL3F1ZXVlMy9xdWV1ZTMuYzoKKwkqIGV4YW1wbGVzL3F1ZXVlNC8uZ2l0aWdub3JlOgorCSogZXhhbXBsZXMvcXVldWU0L01ha2VmaWxlLmFtOgorCSogZXhhbXBsZXMvcXVldWU0L3F1ZXVlNC5jOgorCSogZXhhbXBsZXMvcmV0YWcvLmdpdGlnbm9yZToKKwkqIGV4YW1wbGVzL3JldGFnL01ha2VmaWxlLmFtOgorCSogZXhhbXBsZXMvcmV0YWcvcmV0YWcuYzoKKwkqIGV4YW1wbGVzL3JldGFnL3RyYW5zY29kZS5jOgorCSogZXhhbXBsZXMvdGhyZWFkLy5naXRpZ25vcmU6CisJKiBleGFtcGxlcy90aHJlYWQvTWFrZWZpbGUuYW06CisJKiBleGFtcGxlcy90aHJlYWQvdGhyZWFkLmM6CisJKiBleGFtcGxlcy90eXBlZmluZC8uZ2l0aWdub3JlOgorCSogZXhhbXBsZXMvdHlwZWZpbmQvTWFrZWZpbGUuYW06CisJKiBleGFtcGxlcy90eXBlZmluZC90eXBlZmluZC5jOgorCSogZXhhbXBsZXMveG1sLy5naXRpZ25vcmU6CisJKiBleGFtcGxlcy94bWwvTWFrZWZpbGUuYW06CisJKiBleGFtcGxlcy94bWwvY3JlYXRleG1sLmM6CisJKiBleGFtcGxlcy94bWwvcnVueG1sLmM6CisJKiB0ZXN0cy9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSogdGVzdHN1aXRlLy5naXRpZ25vcmU6CisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW06CisJKiB0ZXN0c3VpdGUvUnVsZXM6CisJKiB0ZXN0c3VpdGUvY2Fwcy8uZ2l0aWdub3JlOgorCSogdGVzdHN1aXRlL2NhcHMvTWFrZWZpbGUuYW06CisJKiB0ZXN0c3VpdGUvY2Fwcy9hcHBfZml4YXRlLmM6CisJKiB0ZXN0c3VpdGUvY2Fwcy9hdWRpb3NjYWxlLmM6CisJKiB0ZXN0c3VpdGUvY2Fwcy9jYXBzLmM6CisJKiB0ZXN0c3VpdGUvY2Fwcy9jYXBzLmg6CisJKiB0ZXN0c3VpdGUvY2Fwcy9jYXBzX3N0cmluZ3M6CisJKiB0ZXN0c3VpdGUvY2Fwcy9jb21wYXRpYmlsaXR5LmM6CisJKiB0ZXN0c3VpdGUvY2Fwcy9kZXNlcmlhbGl6ZS5jOgorCSogdGVzdHN1aXRlL2NhcHMvZW51bWNhcHMuYzoKKwkqIHRlc3RzdWl0ZS9jYXBzL2VyYXRvc3RoZW5lcy5jOgorCSogdGVzdHN1aXRlL2NhcHMvZmlsdGVyY2Fwcy5jOgorCSogdGVzdHN1aXRlL2NhcHMvZml4ZWQuYzoKKwkqIHRlc3RzdWl0ZS9jYXBzL2ZyYWN0aW9uLWNvbnZlcnQuYzoKKwkqIHRlc3RzdWl0ZS9jYXBzL2ZyYWN0aW9uLW11bHRpcGx5LWFuZC16ZXJvLmM6CisJKiB0ZXN0c3VpdGUvY2Fwcy9pbnRlcnNlY3QyLmM6CisJKiB0ZXN0c3VpdGUvY2Fwcy9pbnRlcnNlY3Rpb24uYzoKKwkqIHRlc3RzdWl0ZS9jYXBzL25vcm1hbGlzYXRpb24uYzoKKwkqIHRlc3RzdWl0ZS9jYXBzL3JhbmRvbS5jOgorCSogdGVzdHN1aXRlL2NhcHMvcmVuZWdvdGlhdGUuYzoKKwkqIHRlc3RzdWl0ZS9jYXBzL3NldHMuYzoKKwkqIHRlc3RzdWl0ZS9jYXBzL3NpbXBsaWZ5LmM6CisJKiB0ZXN0c3VpdGUvY2Fwcy9zdHJpbmctY29udmVyc2lvbnMuYzoKKwkqIHRlc3RzdWl0ZS9jYXBzL3N0cnVjdHVyZS5jOgorCSogdGVzdHN1aXRlL2NhcHMvc3VidHJhY3QuYzoKKwkqIHRlc3RzdWl0ZS9jYXBzL3VuaW9uLmM6CisJKiB0ZXN0c3VpdGUvZGVidWcvLmdpdGlnbm9yZToKKwkqIHRlc3RzdWl0ZS9kZWJ1Zy9NYWtlZmlsZS5hbToKKwkqIHRlc3RzdWl0ZS9kZWJ1Zy9jYXRlZ29yeS5jOgorCSogdGVzdHN1aXRlL2RlYnVnL2NvbW1hbmRsaW5lLmM6CisJKiB0ZXN0c3VpdGUvZGVidWcvZ2xvYmFsLmM6CisJKiB0ZXN0c3VpdGUvZGVidWcvb3V0cHV0LmM6CisJKiB0ZXN0c3VpdGUvZGVidWcvcHJpbnRmX2V4dGVuc2lvbi5jOgorCSogdGVzdHN1aXRlL2Rsb3Blbi8uZ2l0aWdub3JlOgorCSogdGVzdHN1aXRlL2Rsb3Blbi9NYWtlZmlsZS5hbToKKwkqIHRlc3RzdWl0ZS9kbG9wZW4vZGxvcGVuX2dzdC5jOgorCSogdGVzdHN1aXRlL2Rsb3Blbi9sb2FkZ3N0LmM6CisJKiB0ZXN0c3VpdGUvZWxlbWVudHMvLmdpdGlnbm9yZToKKwkqIHRlc3RzdWl0ZS9lbGVtZW50cy9NYWtlZmlsZS5hbToKKwkqIHRlc3RzdWl0ZS9lbGVtZW50cy9nc3QtaW5zcGVjdC1jaGVjay5pbjoKKwkqIHRlc3RzdWl0ZS9lbGVtZW50cy9zdHJ1Y3RfaTM4Ni5oOgorCSogdGVzdHN1aXRlL2VsZW1lbnRzL3N0cnVjdF9zaXplLmM6CisJKiB0ZXN0c3VpdGUvaW5kZXhlcnMvLmdpdGlnbm9yZToKKwkqIHRlc3RzdWl0ZS9pbmRleGVycy9NYWtlZmlsZS5hbToKKwkqIHRlc3RzdWl0ZS9pbmRleGVycy9jYWNoZTEuYzoKKwkqIHRlc3RzdWl0ZS9pbmRleGVycy9pbmRleGR1bXAuYzoKKwkqIHRlc3RzdWl0ZS9wYXJzZS8uZ2l0aWdub3JlOgorCSogdGVzdHN1aXRlL3BhcnNlL01ha2VmaWxlLmFtOgorCSogdGVzdHN1aXRlL3BhcnNlL3BhcnNlMS5jOgorCSogdGVzdHN1aXRlL3BhcnNlL3BhcnNlMi5jOgorCSogdGVzdHN1aXRlL3BsdWdpbi8uZ2l0aWdub3JlOgorCSogdGVzdHN1aXRlL3BsdWdpbi9NYWtlZmlsZS5hbToKKwkqIHRlc3RzdWl0ZS9wbHVnaW4vUkVBRE1FOgorCSogdGVzdHN1aXRlL3BsdWdpbi9keW5hbWljLmM6CisJKiB0ZXN0c3VpdGUvcGx1Z2luL2xpbmtlZC5jOgorCSogdGVzdHN1aXRlL3BsdWdpbi9sb2FkaW5nLmM6CisJKiB0ZXN0c3VpdGUvcGx1Z2luL3JlZ2lzdHJ5LmM6CisJKiB0ZXN0c3VpdGUvcGx1Z2luL3N0YXRpYy5jOgorCSogdGVzdHN1aXRlL3BsdWdpbi9zdGF0aWMyLmM6CisJKiB0ZXN0c3VpdGUvcGx1Z2luL3Rlc3RwbHVnaW4uYzoKKwkqIHRlc3RzdWl0ZS9wbHVnaW4vdGVzdHBsdWdpbjIuYzoKKwkqIHRlc3RzdWl0ZS9wbHVnaW4vdGVzdHBsdWdpbjJfcy5jOgorCSogdGVzdHN1aXRlL3BsdWdpbi90ZXN0cGx1Z2luX3MuYzoKKwkqIHRlc3RzdWl0ZS9yZWZjb3VudGluZy8uZ2l0aWdub3JlOgorCSogdGVzdHN1aXRlL3JlZmNvdW50aW5nL01ha2VmaWxlLmFtOgorCSogdGVzdHN1aXRlL3JlZmNvdW50aW5nL2Jpbi5jOgorCSogdGVzdHN1aXRlL3JlZmNvdW50aW5nL2VsZW1lbnQuYzoKKwkqIHRlc3RzdWl0ZS9yZWZjb3VudGluZy9lbGVtZW50X3BhZC5jOgorCSogdGVzdHN1aXRlL3JlZmNvdW50aW5nL21haW5sb29wLmM6CisJKiB0ZXN0c3VpdGUvcmVmY291bnRpbmcvbWVtLmM6CisJKiB0ZXN0c3VpdGUvcmVmY291bnRpbmcvbWVtLmg6CisJKiB0ZXN0c3VpdGUvcmVmY291bnRpbmcvb2JqZWN0LmM6CisJKiB0ZXN0c3VpdGUvcmVmY291bnRpbmcvcGFkLmM6CisJKiB0ZXN0c3VpdGUvcmVmY291bnRpbmcvc2NoZWQuYzoKKwkqIHRlc3RzdWl0ZS9yZWZjb3VudGluZy90aHJlYWQuYzoKKwkqIHRlc3RzdWl0ZS9zdGF0ZXMvLmdpdGlnbm9yZToKKwkqIHRlc3RzdWl0ZS9zdGF0ZXMvTWFrZWZpbGUuYW06CisJKiB0ZXN0c3VpdGUvc3RhdGVzL2Jpbi5jOgorCSogdGVzdHN1aXRlL3N0YXRlcy9sb2NrZWQuYzoKKwkqIHRlc3RzdWl0ZS9zdGF0ZXMvcGFyZW50LmM6CisJKiB0ZXN0c3VpdGUvdGhyZWFkcy8uZ2l0aWdub3JlOgorCSogdGVzdHN1aXRlL3RocmVhZHMvMTU5NTY2LmM6CisJKiB0ZXN0c3VpdGUvdGhyZWFkcy8xNTk4NTIuYzoKKwkqIHRlc3RzdWl0ZS90aHJlYWRzL01ha2VmaWxlLmFtOgorCSogdGVzdHN1aXRlL3RocmVhZHMvcXVldWUuYzoKKwkqIHRlc3RzdWl0ZS90aHJlYWRzL3NpZ25hbHMuYzoKKwkqIHRlc3RzdWl0ZS90aHJlYWRzL3N0YXRpY3JlYy5jOgorCSogdGVzdHN1aXRlL3RocmVhZHMvdGhyZWFkLmM6CisJKiB0ZXN0c3VpdGUvdGhyZWFkcy90aHJlYWRiLmM6CisJKiB0ZXN0c3VpdGUvdGhyZWFkcy90aHJlYWRjLmM6CisJKiB0ZXN0c3VpdGUvdGhyZWFkcy90aHJlYWRkLmM6CisJKiB0ZXN0c3VpdGUvdGhyZWFkcy90aHJlYWRlLmM6CisJKiB0ZXN0c3VpdGUvdGhyZWFkcy90aHJlYWRmLmM6CisJKiB0ZXN0c3VpdGUvdGhyZWFkcy90aHJlYWRnLmM6CisJKiB0ZXN0c3VpdGUvdGhyZWFkcy90aHJlYWRoLmM6CisJKiB0ZXN0c3VpdGUvdGhyZWFkcy90aHJlYWRpLmM6CisJICBtb3ZlIGFsbCBvZiB0aGVzZSB1bmRlciB0ZXN0cworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBtb3ZlIGFsbCBvZiB0aGVzZSB1bmRlciB0ZXN0cworCisyMDA1LTExLTMwIDE1OjM3OjM2ICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+CisKKwkqIGdzdHJlYW1lci5zcGVjLmluOgorCSAgdXBkYXRlIGFmdGVyIHRob21hcydzIENWUyBzdXJnZXJ5CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHVwZGF0ZSBhZnRlciB0aG9tYXMncyBDVlMgc3VyZ2VyeQorCisyMDA1LTExLTMwIDE1OjM0OjM3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogdGVzdHMvYmVuY2htYXJrcy8uZ2l0aWdub3JlOgorCSogdGVzdHMvYmVuY2htYXJrcy9NYWtlZmlsZS5hbToKKwkgIGFkZCBNYWtlZmlsZS5hbQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGQgTWFrZWZpbGUuYW0KKworMjAwNS0xMS0zMCAxNToyOTowNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGZpeCBkaXN0Y2hlY2sKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICAqIHRlc3RzL01ha2VmaWxlLmFtOgorCSAgZml4IGRpc3RjaGVjaworCisyMDA1LTExLTMwIDE1OjIwOjI5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jYXBzL2Rlc2VyaWFsaXplLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NhcHMvaW50ZXJzZWN0aW9uLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NhcHMvdW5pb24uYzoKKwkqIHRlc3RzdWl0ZS9jYXBzL2Rlc2VyaWFsaXplLmM6CisJKiB0ZXN0c3VpdGUvY2Fwcy9pbnRlcnNlY3Rpb24uYzoKKwkqIHRlc3RzdWl0ZS9jYXBzL3VuaW9uLmM6CisJICBjb21waWxlIHdhcm5pbmcgZml4ZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgY29tcGlsZSB3YXJuaW5nIGZpeGVzCisKKzIwMDUtMTEtMzAgMTM6Mjg6MTMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2VsZW1lbnRzL01ha2VmaWxlLmFtOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9lbGVtZW50cy9nc3QtY29tcHByZXAtY2hlY2suaW46CisJKiB0ZXN0c3VpdGUvZWxlbWVudHMvTWFrZWZpbGUuYW06CisJKiB0ZXN0c3VpdGUvZWxlbWVudHMvZ3N0LWNvbXBwcmVwLWNoZWNrLmluOgorCSAgcmVtb3ZlIGNvbXBwcmVwCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJlbW92ZSBjb21wcHJlcAorCisyMDA1LTExLTMwIDEzOjI1OjA1ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGNvbmZpZ3VyZS5hYyAoR1NUX1BLR19ERVBTKTogVXNlIGdtb2R1bGUtbm8tZXhwb3J0LTIuMC5wYywgYXZhaWxhYmxlIHNpbmNlIEdMaWIgMi4yLiBGaXhlcyAjMzE4MDMxLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTExLTMwICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBjb25maWd1cmUuYWMgKEdTVF9QS0dfREVQUyk6IFVzZSBnbW9kdWxlLW5vLWV4cG9ydC0yLjAucGMsCisJICBhdmFpbGFibGUgc2luY2UgR0xpYiAyLjIuIEZpeGVzICMzMTgwMzEuCisKKzIwMDUtMTEtMzAgMTM6MDg6MDggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBGaXJzdCBwYXNzIGF0IGNsZWFuaW5nIHVwIHRlc3RzLyBkaXIgYmVmb3JlIG1vdmluZyB0aGUgcmVzdAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgICogdGVzdHMvYmVuY2gtY29tcGxleGl0eS5zY206CisJICAqIHRlc3RzL2JlbmNoLW1hc3NfZWxlbWVudHMuc2NtOgorCSAgKiB0ZXN0cy9jb21wbGV4aXR5LmM6CisJICAqIHRlc3RzL2NvbXBsZXhpdHkuZ251cGxvdDoKKwkgICogdGVzdHMvaW5zdGFudGlhdGUvLmN2c2lnbm9yZToKKwkgICogdGVzdHMvaW5zdGFudGlhdGUvTWFrZWZpbGUuYW06CisJICAqIHRlc3RzL2luc3RhbnRpYXRlL2NhcHMuYzoKKwkgICogdGVzdHMvbWFzc19lbGVtZW50cy5jOgorCSAgKiB0ZXN0cy9uZXR3b3JrLWNsb2NrLXV0aWxzLnNjbToKKwkgICogdGVzdHMvbmV0d29yay1jbG9jay5zY206CisJICAqIHRlc3RzL3Bsb3QtZGF0YToKKwkgIEZpcnN0IHBhc3MgYXQgY2xlYW5pbmcgdXAgdGVzdHMvIGRpciBiZWZvcmUgbW92aW5nIHRoZSByZXN0CisJICBDb21iaW5lZCB3aXRoIENWUyBzdXJnZXJ5CisKKzIwMDUtMTEtMzAgMTM6MDc6MTUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgbW92ZSBpbmNsdWRlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBtb3ZlIGluY2x1ZGVzCisKKzIwMDUtMTEtMzAgMTE6NTU6MzIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBSRUFETUU6CisJICByZW1vdmUgbm9yd2VnaWFuaXNtCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJlbW92ZSBub3J3ZWdpYW5pc20KKworMjAwNS0xMS0zMCAxMDo1MDo1NyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIE1ha2VmaWxlLmFtOgorCSAgbWFrZSBub3QgaGF2aW5nIGNoZWNrIG5vbi1mYXRhbCBmb3IgZXh0cmEgdGFyZ2V0cworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBtYWtlIG5vdCBoYXZpbmcgY2hlY2sgbm9uLWZhdGFsIGZvciBleHRyYSB0YXJnZXRzCisKKzIwMDUtMTEtMzAgMTA6MTU6MDggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBwby9QT1RGSUxFUy5pbjogcXVldWUgaGFzIG1vdmVkLCB1cGRhdGUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwby9QT1RGSUxFUy5pbjoKKwkgIHF1ZXVlIGhhcyBtb3ZlZCwgdXBkYXRlCisKKzIwMDUtMTEtMzAgMTA6MTM6NTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBnc3QvZ3N0dmFsdWUuYzoKKwkqIHdpbjMyL3ZzNi9ncmFtbWFyLmRzcDoKKwkqIHdpbjMyL3ZzNi9nc3RfaW5zcGVjdC5kc3A6CisJKiB3aW4zMi92czYvZ3N0X2xhdW5jaC5kc3A6CisJKiB3aW4zMi92czYvbGliZ3N0YmFzZS5kc3A6CisJKiB3aW4zMi92czYvbGliZ3N0ZWxlbWVudHMuZHNwOgorCSogd2luMzIvdnM2L2xpYmdzdHJlYW1lci5kc3A6CisJICBhZGQgc29tZSBleHBsaWNpdCBjYXN0cyB1cGRhdGUgZHNwIGZpbGVzOyBhbHNvIGluc3RhbGxzIHRoZSBkZWJ1ZyBidWlsZCBpbiBcZ3N0cmVhbWVyXGRlYnVnIHRvIHNlcGFyYXRlIGl0IGZyb20gdGhlIG4uLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkIHNvbWUgZXhwbGljaXQgY2FzdHMKKwkgIHVwZGF0ZSBkc3AgZmlsZXM7IGFsc28gaW5zdGFsbHMgdGhlIGRlYnVnIGJ1aWxkIGluIFxnc3RyZWFtZXJcZGVidWcgdG8gc2VwYXJhdGUgaXQgZnJvbSB0aGUgbm9uLWRlYnVnIGJ1aWxkCisKKzIwMDUtMTEtMzAgMTA6MDM6NDYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGFkZCBtb3JlIHN5bWJvbHMgdG8gZGVmIGZpbGUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkIG1vcmUgc3ltYm9scyB0byBkZWYgZmlsZQorCisyMDA1LTExLTMwIDA5OjU5OjA0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogcmVtb3ZlIGRvdWJsZSBlbnRyaWVzIGZyb20gdGhlIGRvY3MKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgcmVtb3ZlIGRvdWJsZSBlbnRyaWVzIGZyb20gdGhlIGRvY3MKKwkgICogZ3N0L2dzdF9wcml2YXRlLmg6CisJICAqIGdzdC9nc3RpbmZvLmM6IChfZ3N0X2RlYnVnX2luaXQpOgorCSAgcmVtb3ZlIHRoZSBUSFJFQUQgZGVidWcgY2F0ZWdvcnkKKwkgICogZ3N0L01ha2VmaWxlLmFtOgorCSAgKiBnc3QvZ3N0cXVldWUuYzoKKwkgICogZ3N0L2dzdHF1ZXVlLmg6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlczoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2dldF90eXBlKSwKKwkgIChnc3RfcXVldWVfaW5pdCksIChnc3RfcXVldWVfZmluYWxpemUpLCAoZ3N0X3F1ZXVlX2NoYW5nZV9zdGF0ZSk6CisJICBjb21wbGV0ZWx5IG1vdmUgcXVldWUgYW5kIGZpeCB1cCBkZWJ1Z2dpbmcgY2F0ZWdvcmllcworCisyMDA1LTExLTMwIDA5OjM4OjQyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiBtYWtlIGluaXRpYWxpemF0aW9uIHBvcnRhYmxlLCB1c2luZyBMTCBpcyBub3QKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IChnc3RfaWRlbnRpdHlfdHJhbnNmb3JtX2lwKToKKwkgIG1ha2UgaW5pdGlhbGl6YXRpb24gcG9ydGFibGUsIHVzaW5nIExMIGlzIG5vdAorCisyMDA1LTExLTMwIDA5OjM2OjE5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBhZGQgbW9yZSBzeW1ib2xzIHRvIGRlZiBmaWxlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFkZCBtb3JlIHN5bWJvbHMgdG8gZGVmIGZpbGUKKworMjAwNS0xMS0zMCAwOTozMDo1MCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgYWRkIG1vcmUgc3ltYm9scyB0byBkZWYgZmlsZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGQgbW9yZSBzeW1ib2xzIHRvIGRlZiBmaWxlCisKKzIwMDUtMTEtMzAgMDk6Mjc6NDcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICB3aW4zMi9jb21tb24vZ3N0Y29uZmlnLmg6IGFkZCBsYXJnZSBwYWRkaW5nCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogd2luMzIvY29tbW9uL2dzdGNvbmZpZy5oOgorCSAgYWRkIGxhcmdlIHBhZGRpbmcKKworMjAwNS0xMS0zMCAwOToyMjo0NSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOiByZW5hbWUgc3ltYm9sczsgc29ydCBiYXNlIHNlY3Rpb24KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIHJlbmFtZSBzeW1ib2xzOyBzb3J0IGJhc2Ugc2VjdGlvbgorCisyMDA1LTExLTMwIDA5OjE4OjE1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0L2dzdGNsb2NrLmM6IHJlbW92ZSBjcmFjayBub24tcG9ydGFibGUgaGFuZHJvbGxlZCBERUJVRyBtYWNybworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTExLTMwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCSAgKiBnc3QvZ3N0Y2xvY2suYzogKGRvX2xpbmVhcl9yZWdyZXNzaW9uKToKKwkgIHJlbW92ZSBjcmFjayBub24tcG9ydGFibGUgaGFuZHJvbGxlZCBERUJVRyBtYWNybworCisyMDA1LTExLTMwIDA5OjEyOjU3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogZG9jcy9yYW5kb20vcmVsZWFzZToKKwkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKKwkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuaDoKKwkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6CisJICB1cGRhdGUgdmlzdWFsIHN0dWRpbyBnZW5lcmF0ZWQgZmlsZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgdXBkYXRlIHZpc3VhbCBzdHVkaW8gZ2VuZXJhdGVkIGZpbGVzCisKKzIwMDUtMTEtMzAgMDg6NTY6NTkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICB3aW4zMi92czYvOiB1cGRhdGUgcHJvamVjdCBmaWxlcyBmb3IgbmV3IGxvY2F0aW9ucworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHdpbjMyL3ZzNi9saWJnc3RiYXNlLmRzcDoKKwkgICogd2luMzIvdnM2L2xpYmdzdGVsZW1lbnRzLmRzcDoKKwkgIHVwZGF0ZSBwcm9qZWN0IGZpbGVzIGZvciBuZXcgbG9jYXRpb25zCisKKzIwMDUtMTEtMzAgMDg6NTI6NDEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBNYWtlZmlsZS5hbTogcmVtb3ZlIHNvbWUgZmlsZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBNYWtlZmlsZS5hbToKKwkgIHJlbW92ZSBzb21lIGZpbGVzCisJICAqIFJFQURNRToKKwkgIHJlaW5zdGF0ZSBhbmQgdXBkYXRlCisJICAqIERFVkVMOgorCSAgKiBSRVFVSVJFTUVOVFM6CisJICByZW1vdmVkCisJICAqIExJQ0VOU0U6CisJICAqIGRvY3MvcmFuZG9tL0xJQ0VOU0U6CisJICBtb3ZlZCB0byByYW5kb20KKworMjAwNS0xMS0zMCAwODozNjo0NyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIFJFQURNRToKKwkgIHB1dCB0aGUgUkVBRE1FIGJhY2sKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcHV0IHRoZSBSRUFETUUgYmFjaworCisyMDA1LTExLTMwIDA4OjMzOjMzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogVE9ETzoKKwkgIGNsZWFuIHVwIFRPRE8KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgY2xlYW4gdXAgVE9ETworCisyMDA1LTExLTMwIDA4OjI5OjE0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogbGlicy9leHQvTWFrZWZpbGUuYW06CisJICByZW1vdmluZyBleHQsIHdhcyBub3QgdXNlZCBhbnltb3JlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJlbW92aW5nIGV4dCwgd2FzIG5vdCB1c2VkIGFueW1vcmUKKworMjAwNS0xMS0yOSAyMzo1NjoyMCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgZ3N0LzogRml4IG1lbW9yeSBsZWFrIGluIEdzdFR5cGVGaW5kRmFjdG9yeS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dHlwZWZpbmQuYzogKGdzdF90eXBlX2ZpbmRfcmVnaXN0ZXIpOgorCSAgKiBnc3QvZ3N0dHlwZWZpbmQuaDoKKwkgICogZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5jOiAoZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2luaXQpLAorCSAgKGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9kaXNwb3NlKToKKwkgICogZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5oOgorCSAgRml4IG1lbW9yeSBsZWFrIGluIEdzdFR5cGVGaW5kRmFjdG9yeS4KKworMjAwNS0xMS0yOSAyMDoxNjo0MCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHBvL2FmLnBvOgorCSogcG8vYXoucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGUucG86CisJKiBwby9lbl9HQi5wbzoKKwkqIHBvL2ZyLnBvOgorCSogcG8vaXQucG86CisJKiBwby9uYi5wbzoKKwkqIHBvL25sLnBvOgorCSogcG8vcnUucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJICB1cGRhdGVkIHRyYW5zbGF0aW9ucworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB1cGRhdGVkIHRyYW5zbGF0aW9ucworCisyMDA1LTExLTI5IDE5OjQ3OjAwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgbW92ZSBxdWV1ZSBmcm9tIGNvcmUgdG8gdGhlIGVsZW1lbnRzIHBsdWdpbiDDpworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3QuYzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZS5hbToKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RlbGVtZW50cy5jOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6CisJICBtb3ZlIHF1ZXVlIGZyb20gY29yZSB0byB0aGUgZWxlbWVudHMgcGx1Z2luCisJICDDpworCisyMDA1LTExLTI5IDE5OjQ0OjU2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogcGtnY29uZmlnL2dzdHJlYW1lci1iYXNlLXVuaW5zdGFsbGVkLnBjLmluOgorCSogcGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay11bmluc3RhbGxlZC5wYy5pbjoKKwkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItbmV0LXVuaW5zdGFsbGVkLnBjLmluOgorCSAgdXBkYXRlIHVuaW5zdGFsbGVkIHBjIGZpbGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHVwZGF0ZSB1bmluc3RhbGxlZCBwYyBmaWxlcworCisyMDA1LTExLTI5IDE5OjM3OjQ5ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGxpYnMvZ3N0L2Jhc2UvOiBlbi1MQVJHRSB0aGUgcGFkZGluZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0yOSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6CisJICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgorCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6IGVuLUxBUkdFIHRoZSBwYWRkaW5nLgorCSAgKiBnc3QvZ3N0Y29uZmlnLmguaW4gKEdTVF9QQURESU5HX0xBUkdFKTogTmV3IGRlZmluZSwgdGhlIG51bWJlcgorCSAgb2YgcG9pbnRlcnMgYnkgd2hpY2ggdG8gcGFkIHZlcnkgZXh0ZW5zaWJsZSBiYXNlIGNsYXNzZXMgKGxpa2UgdGhlCisJICBvbmVzIGluIGxpYnMvZ3N0L2Jhc2UpLgorCisyMDA1LTExLTI5IDE5OjM0OjI0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZG9jcy86IG1vdmluZyBkb2N1bWVudGF0aW9uIGZyb20gY29yZSB0byBsaWIKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtZG9jcy5zZ21sOgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSAgbW92aW5nIGRvY3VtZW50YXRpb24gZnJvbSBjb3JlIHRvIGxpYgorCisyMDA1LTExLTI5IDE5OjEyOjMwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogY2hlY2svTWFrZWZpbGUuYW06CisJKiBjb25maWd1cmUuYWM6CisJKiBkb2NzL2dzdC9NYWtlZmlsZS5hbToKKwkqIGdzdC9NYWtlZmlsZS5hbToKKwkqIGdzdC9iYXNlLy5naXRpZ25vcmU6CisJKiBnc3QvYmFzZS9NYWtlZmlsZS5hbToKKwkqIGdzdC9iYXNlL1JFQURNRToKKwkqIGdzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKKwkqIGdzdC9iYXNlL2dzdGFkYXB0ZXIuaDoKKwkqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJKiBnc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgorCSogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgorCSogZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKKwkqIGdzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg6CisJKiBnc3QvYmFzZS9nc3RwdXNoc3JjLmM6CisJKiBnc3QvYmFzZS9nc3RwdXNoc3JjLmg6CisJKiBnc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOgorCSogZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuaDoKKwkqIGdzdC9jaGVjay9NYWtlZmlsZS5hbToKKwkqIGdzdC9jaGVjay9nc3RjaGVjay5jOgorCSogZ3N0L2NoZWNrL2dzdGNoZWNrLmg6CisJKiBnc3QvbmV0L01ha2VmaWxlLmFtOgorCSogZ3N0L25ldC9nc3RuZXQuaDoKKwkqIGdzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzoKKwkqIGdzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suaDoKKwkqIGdzdC9uZXQvZ3N0bmV0dGltZXBhY2tldC5jOgorCSogZ3N0L25ldC9nc3RuZXR0aW1lcGFja2V0Lmg6CisJKiBnc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jOgorCSogZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuaDoKKwkqIGxpYnMvZ3N0L01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06CisJKiBwbHVnaW5zL2VsZW1lbnRzL01ha2VmaWxlLmFtOgorCSogcG8vUE9URklMRVMuaW46CisJKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgIENWUyBzdXJnZXJ5ICsgc3VwcG9ydCB0byBtb3ZlIGJhc2UsIGNoZWNrLCBhbmQgbmV0IG91dCBvZiBnc3QgYW5kIGludG8gbGlicy9nc3QKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgQ1ZTIHN1cmdlcnkgKyBzdXBwb3J0IHRvIG1vdmUgYmFzZSwgY2hlY2ssIGFuZCBuZXQgb3V0IG9mIGdzdAorCSAgYW5kIGludG8gbGlicy9nc3QKKworMjAwNS0xMS0yOSAxODo1Nzo1OSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0ZXZlbnQuaCAoc3RydWN0IF9Hc3RFdmVudCk6IE9ubHkgb25lIHBvaW50ZXIgb2YgcGFkZGluZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0yOSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdGV2ZW50LmggKHN0cnVjdCBfR3N0RXZlbnQpOiBPbmx5IG9uZSBwb2ludGVyIG9mIHBhZGRpbmcuCisJICAqIGdzdC9nc3RzdHJ1Y3R1cmUuaCAoc3RydWN0IF9Hc3RTdHJ1Y3R1cmUpOiBPbmx5IG9uZSBwb2ludGVyIG9mCisJICBwYWRkaW5nLgorCSAgKiBnc3QvZ3N0cXVlcnkuaCAoc3RydWN0IF9Hc3RRdWVyeSk6IE9ubHkgb25lIHBvaW50ZXIgb2YgcGFkZGluZy4KKwkgICogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuaDogUmVtb3ZlIGEgY29tbWVudCBpbiBQbHVnaW5GZWF0dXJlLgorCSAgKiBnc3QvZ3N0cGx1Z2luLmggKHN0cnVjdCBfR3N0UGx1Z2luQ2xhc3MpOiBBZGQgc29tZSBwYWRkaW5nLgorCSAgKiBnc3QvZ3N0b2JqZWN0Lmg6IChzdHJ1Y3QgX0dzdE9iamVjdCk6IE9ubHkgb25lIHBvaW50ZXIgb2YKKwkgIHBhZGRpbmc7IHJlZHVjZXMgb2JqZWN0IHNpemUgYnkgYWJvdXQgMzAlLiBXZSBkb24ndCBleHBlY3QKKwkgIGFueXRoaW5nIGVsc2UgdG8gZ28gaW50byBnc3RvYmplY3QuCisJICAqIGdzdC9nc3RtaW5pb2JqZWN0LmggKHN0cnVjdCBfR3N0TWluaU9iamVjdCkKKwkgIChzdHJ1Y3QgX0dzdE1pbmlPYmplY3RDbGFzcyk6IE9ubHkgb25lIHBvaW50ZXIgb2YgcGFkZGluZzsgdGhlCisJICBwYXlsb2FkIGlzIG9ubHkgYSBwb2ludGVyIGFuZCB0d28gaW50cyBhbnl3YXkuIEZvciB0aGUgY2xhc3MgdGhlcmUKKwkgIGFyZSBvbmx5IHR3byBtZXRob2RzIGFzIHdlbGwuCisJICAqIGdzdC9nc3RlbGVtZW50LmggKHN0cnVjdCBfR3N0RWxlbWVudENsYXNzKTogUmVtb3ZlZAorCSAgdGhlIHN0YXRlX2NoYW5nZWQgc2lnbmFsIGNhbGxiYWNrLCBpdCBpcyBub3QgdXNlZC4KKworMjAwNS0xMS0yOSAxODo0OToxOSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJKiBjb21wb25lbnRzL2Jvbm9iby1nc3RtZWRpYXBsYXkvLmdpdGlnbm9yZToKKwkqIGNvbXBvbmVudHMvYm9ub2JvLWdzdG1lZGlhcGxheS9NYWtlZmlsZS5hbToKKwkqIGNvbXBvbmVudHMvYm9ub2JvLWdzdG1lZGlhcGxheS9ib25vYm8tZ3N0bWVkaWFwbGF5LXVpLnhtbDoKKwkqIGNvbXBvbmVudHMvYm9ub2JvLWdzdG1lZGlhcGxheS9ib25vYm8tZ3N0bWVkaWFwbGF5LmM6CisJKiBjb21wb25lbnRzL2Jvbm9iby1nc3RtZWRpYXBsYXkvZ3N0bWVkaWFwbGF5Lm9hZmluZm86CisJKiBjb21wb25lbnRzL2Jvbm9iby1tZWRpYS9NYWtlZmlsZS5hbToKKwkqIGNvbXBvbmVudHMvYm9ub2JvLW1lZGlhL2Jvbm9iby1tZWRpYS1nc3RyZWFtZXItZmFjdG9yeS5jOgorCSogY29tcG9uZW50cy9ib25vYm8tbWVkaWEvYm9ub2JvLW1lZGlhLWdzdHJlYW1lci5nb2I6CisJKiBjb21wb25lbnRzL2Jvbm9iby1tZWRpYS9ib25vYm8tbWVkaWEtZ3N0cmVhbWVyLm9hZmluZm86CisJKiBjb21wb25lbnRzL2Jvbm9iby1tZWRpYS9ib25vYm8tbWVkaWEtZ3N0cmVhbWVydmlkZW8uZ29iOgorCSAgd2hhY2sgYSBtb2xlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHdoYWNrIGEgbW9sZQorCisyMDA1LTExLTI5IDE4OjM4OjQ2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogcG8vUE9URklMRVMuaW46CisJICB0aGVzZSBmaWxlcyB3ZXJlIG1vdmVkCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHRoZXNlIGZpbGVzIHdlcmUgbW92ZWQKKworMjAwNS0xMS0yOSAxODoyMToxNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlczogZml4IGluY2x1ZGVzLCB0aG91Z2ggdGhleSBhcmUgYSBsaXR0bGUgZGlua3kKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXM6CisJICBmaXggaW5jbHVkZXMsIHRob3VnaCB0aGV5IGFyZSBhIGxpdHRsZSBkaW5reQorCisyMDA1LTExLTI5IDE4OjE0OjM1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgY2hlY2svTWFrZWZpbGUuYW06IGxvb2sgaW4gdGhlIHJpZ2h0IHBsYWNlIGZvciBlbGVtZW50cywgYSBsb3QgbW9yZSBjaGFuY2Ugb2Ygc3VjY2VzcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL01ha2VmaWxlLmFtOgorCSAgbG9vayBpbiB0aGUgcmlnaHQgcGxhY2UgZm9yIGVsZW1lbnRzLCBhIGxvdCBtb3JlIGNoYW5jZSBvZgorCSAgc3VjY2VzcworCSAgKiBnc3QvTWFrZWZpbGUuYW06CisJICByZW1vdmUgaW5kZXhlcnMgYW5kIGVsZW1lbnRzIHN1YmRpcnMKKwkgICogcGx1Z2lucy9NYWtlZmlsZS5hbToKKwkgIG1ha2UgaW5kZXhlcnMgY29uZGl0aW9uYWwKKworMjAwNS0xMS0yOSAxODowODoxNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHBsdWdpbnMvTWFrZWZpbGUuYW06CisJICBhZGQgbWlzc2luZyBNYWtlZmlsZS5hbQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGQgbWlzc2luZyBNYWtlZmlsZS5hbQorCisyMDA1LTExLTI5IDE4OjA0OjI4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZG9jcy9nc3QvTWFrZWZpbGUuYW06CisJICBmaXggZG9jIGJ1aWxkIGZvciBzdHVmZiBtb3ZlZCBhcm91bmQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZml4IGRvYyBidWlsZCBmb3Igc3R1ZmYgbW92ZWQgYXJvdW5kCisKKzIwMDUtMTEtMjkgMTg6MDM6NTIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBnc3QvZWxlbWVudHMvLmdpdGlnbm9yZToKKwkqIGdzdC9lbGVtZW50cy9NYWtlZmlsZS5hbToKKwkqIGdzdC9lbGVtZW50cy9nc3RidWZmZXJzdG9yZS5jOgorCSogZ3N0L2VsZW1lbnRzL2dzdGJ1ZmZlcnN0b3JlLmg6CisJKiBnc3QvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgorCSogZ3N0L2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6CisJKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKKwkqIGdzdC9lbGVtZW50cy9nc3RmYWtlc2luay5oOgorCSogZ3N0L2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKKwkqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmg6CisJKiBnc3QvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6CisJKiBnc3QvZWxlbWVudHMvZ3N0ZmRzaW5rLmg6CisJKiBnc3QvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKKwkqIGdzdC9lbGVtZW50cy9nc3RmZHNyYy5oOgorCSogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6CisJKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuaDoKKwkqIGdzdC9lbGVtZW50cy9nc3RmaWxlc3JjLmM6CisJKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNyYy5oOgorCSogZ3N0L2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6CisJKiBnc3QvZWxlbWVudHMvZ3N0aWRlbnRpdHkuaDoKKwkqIGdzdC9lbGVtZW50cy9nc3R0ZWUuYzoKKwkqIGdzdC9lbGVtZW50cy9nc3R0ZWUuaDoKKwkqIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkqIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuaDoKKwkqIGdzdC9pbmRleGVycy8uZ2l0aWdub3JlOgorCSogZ3N0L2luZGV4ZXJzL01ha2VmaWxlLmFtOgorCSogZ3N0L2luZGV4ZXJzL2dzdGZpbGVpbmRleC5jOgorCSogZ3N0L2luZGV4ZXJzL2dzdGluZGV4ZXJzLmM6CisJKiBnc3QvaW5kZXhlcnMvZ3N0bWVtaW5kZXguYzoKKwkgIHJlbW92ZSBtb3ZlZCBkaXJzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJlbW92ZSBtb3ZlZCBkaXJzCisKKzIwMDUtMTEtMjkgMTg6MDI6NDUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBnc3QvcmVnaXN0cmllcy8uZ2l0aWdub3JlOgorCSogZ3N0L3NjaGVkdWxlcnMvLmdpdGlnbm9yZToKKwkgIHJlbW92ZSBlbXB0eSBkaXJzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJlbW92ZSBlbXB0eSBkaXJzCisKKzIwMDUtMTEtMjkgMTg6MDA6MTUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBkbyBDVlMgc3VyZ2VyeSBhbmQgcmVsYXRlZCBidWlsZCBmaXhlcnkgdG8gbW92ZSBlbGVtZW50cyBhbmQgaW5kZXhlcnMgaW4gYSBuZXcgZ3N0cmVhbWVyL3BsdWdpbnMgZGlyZWN0b3J5LCBvdXQgb2YgdGguLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBNYWtlZmlsZS5hbToKKwkgICogY29uZmlndXJlLmFjOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL01ha2VmaWxlLmFtOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgorCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKKwkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgorCSAgKiBwbHVnaW5zL2luZGV4ZXJzL01ha2VmaWxlLmFtOgorCSAgZG8gQ1ZTIHN1cmdlcnkgYW5kIHJlbGF0ZWQgYnVpbGQgZml4ZXJ5IHRvIG1vdmUgZWxlbWVudHMKKwkgIGFuZCBpbmRleGVycyBpbiBhIG5ldyBnc3RyZWFtZXIvcGx1Z2lucyBkaXJlY3RvcnksIG91dCBvZiB0aGUKKwkgIGdzdC8gZGlyZWN0b3J5CisKKzIwMDUtMTEtMjkgMTc6NDc6MDYgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgUmVuYW1lIGdzdG5ldC10ZW1wbmFtZSB0byBnc3RuZXQuIEZpeGVzICMzMjIyNTcuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTEtMjkgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGNoZWNrL01ha2VmaWxlLmFtOgorCSAgKiBwa2djb25maWcvZ3N0cmVhbWVyLW5ldC11bmluc3RhbGxlZC5wYy5pbjoKKwkgICogcGtnY29uZmlnL2dzdHJlYW1lci1uZXQucGMuaW46CisJICAqIGdzdC9uZXQvTWFrZWZpbGUuYW06IFJlbmFtZSBnc3RuZXQtdGVtcG5hbWUgdG8gZ3N0bmV0LiBGaXhlcworCSAgIzMyMjI1Ny4KKworMjAwNS0xMS0yOSAxNzozNTowMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGNoZWNrL2VsZW1lbnRzLy5naXRpZ25vcmU6CisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uZ2l0aWdub3JlOgorCSAgaWdub3JlIG1vcmUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgaWdub3JlIG1vcmUKKworMjAwNS0xMS0yOSAxNzozMzo1NSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGdzdHJlYW1lci5zcGVjLmluOgorCSAgcmVtb3ZlIHNvbWUgbW9yZSBjb21wbGV0ZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICByZW1vdmUgc29tZSBtb3JlIGNvbXBsZXRlCisKKzIwMDUtMTEtMjkgMTc6MzI6MzYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICB0b29scy86IHJlbW92aW5nIC1jb21wcHJlcCBhbmQgLWNvbXBsZXRlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdG9vbHMvTWFrZWZpbGUuYW06CisJICAqIHRvb2xzL2dzdC1jb21wbGV0ZS4xLmluOgorCSAgKiB0b29scy9nc3QtY29tcGxldGUuYzoKKwkgICogdG9vbHMvZ3N0LWNvbXBwcmVwLjEuaW46CisJICAqIHRvb2xzL2dzdC1jb21wcHJlcC5jOgorCSAgcmVtb3ZpbmcgLWNvbXBwcmVwIGFuZCAtY29tcGxldGUKKworMjAwNS0xMS0yOSAxNzoyMzo1NiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGdzdC9nc3RldmVudC4qOiBmaXggIzMyMDUyOSAtIGNsZWFuIHVwIG5ld19zZWdtZW50IEFQSSBhbmQgc3RydWN0dXJlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RldmVudC5jOiAoZ3N0X2V2ZW50X25ld19uZXdfc2VnbWVudCksCisJICAoZ3N0X2V2ZW50X3BhcnNlX25ld19zZWdtZW50KToKKwkgICogZ3N0L2dzdGV2ZW50Lmg6CisJICBmaXggIzMyMDUyOSAtIGNsZWFuIHVwIG5ld19zZWdtZW50IEFQSSBhbmQgc3RydWN0dXJlLgorCSAgTGV0J3MgaG9wZSBldmVyeW9uZSB3YXMgdXNpbmcgdGhlIG1ldGhvZHMsIGFuZCBub3QgdGhlIHN0cnVjdHVyZS4KKworMjAwNS0xMS0yOSAxNzoxMzo0NCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogUHJvcGVybHkgaGFuZGxlIG5vbiBHU1RfRk9STUFUX1RJTUUgc2VnbWVudAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2hhbmRsZV9vYmplY3QpLAorCSAgKGdzdF9iYXNlX3NpbmtfZXZlbnQpLCAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKSwKKwkgIChnc3RfYmFzZV9zaW5rX2FjdGl2YXRlX3B1bGwpLCAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgorCSAgUHJvcGVybHkgaGFuZGxlIG5vbiBHU1RfRk9STUFUX1RJTUUgc2VnbWVudAorCSAgKiBnc3QvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogKGdzdF9pZGVudGl0eV90cmFuc2Zvcm1faXApOgorCSAgUHJvcGVybHkgaGFuZGxlIG5vbiBHU1RfRk9STUFUX1RJTUUgc2VnbWVudAorCSAgKiBnc3QvZ3N0c2VnbWVudC5jOgorCSAgVGhpcyBmdW5jdGlvbiBpcyB2YWxpZCBpZiB0aGUgYWNjdW11bGF0b3IgaXMgMCBhbmQgdGhlIGZvcm1hdAorCSAgaXMgZGlmZmVyZW50IGZyb20gdGhlIHJlcXVlc3RlZCBmb3JtYXQuCisKKzIwMDUtMTEtMjkgMTU6NTA6NTAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBBZGQgZ3N0X3F1ZXJ5X25ld19zZWVraW5nIGFuZCBnc3RfcXVlcnlfcGFyc2Vfc2Vla2luZyB0byB0aGUgZG9jcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgQWRkIGdzdF9xdWVyeV9uZXdfc2Vla2luZyBhbmQgZ3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmcgdG8gdGhlCisJICBkb2NzLgorCisyMDA1LTExLTI5IDE1OjE1OjM4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSogQ2hhbmdlTG9nOgorCSAgRml4IGNvbmZsaWN0IG1hcmtlcgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBGaXggY29uZmxpY3QgbWFya2VyCisKKzIwMDUtMTEtMjkgMTU6MTI6MjIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IFRyZWF0IGEgcGFkIGFsbG9jIHdpdGggbmV3IGNhcHMgdGhlIHNhbWUgYXMgaWYgd2Ugd2VyZSBub3QgbmVnb3RpYXRlZCwgaW4gb3JkZXIgdG8gYWxsb3cuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1fYnVmZmVyX2FsbG9jKToKKwkgIFRyZWF0IGEgcGFkIGFsbG9jIHdpdGggbmV3IGNhcHMgdGhlIHNhbWUgYXMgaWYgd2Ugd2VyZSBub3QKKwkgIG5lZ290aWF0ZWQsIGluIG9yZGVyIHRvIGFsbG93IGEgY2hhbmdpbmcgdXBzdHJlYW0gb3V0cHV0CisJICB0byBwcm9kdWNlIGEgbmV3IGZvcm1hdCBvZiBkYXRhLgorCisyMDA1LTExLTI5IDE0OjQ3OjA3ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IFRoZSBldmVudCB2aXJ0dWFsIG1ldGhvZCBpcyBub3cgcHJvcGVybHkgaW1wbGVtZW50ZWQsIHdpdGggYSBkZWZhdWx0IGhhbmRsZXIKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1fY2xhc3NfaW5pdCksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2V2ZW50KSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9ldmVudGZ1bmMpOgorCSAgVGhlIGV2ZW50IHZpcnR1YWwgbWV0aG9kIGlzIG5vdyBwcm9wZXJseSBpbXBsZW1lbnRlZCwgd2l0aCBhIGRlZmF1bHQKKwkgIGhhbmRsZXIKKwkgIFN1YiBjbGFzc2VzIHNob3VsZCBjYWxsIHRoZSBwYXJlbnRfY2xhc3MgZXZlbnQgbWV0aG9kLiBUaGV5IHNob3VsZAorCSAgcmV0dXJuIEZBTFNFIGlmIHRoZXkgaGFkIGEgcHJvYmxlbSBoYW5kbGluZyB0aGUgZ2l2ZW4gZXZlbnQsIG9yIGRvbid0CisJICB3YW50IEdzdEJhc2VUcmFuc2Zvcm0gdG8gc2VuZCB0aGF0IGV2ZW4gZG93bnN0cmVhbQorCSAgKiBnc3QvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogKGdzdF9pZGVudGl0eV9jbGFzc19pbml0KSwKKwkgIChnc3RfaWRlbnRpdHlfaW5pdCksIChnc3RfaWRlbnRpdHlfZXZlbnQpLAorCSAgKGdzdF9pZGVudGl0eV90cmFuc2Zvcm1faXApLCAoZ3N0X2lkZW50aXR5X3NldF9wcm9wZXJ0eSksCisJICAoZ3N0X2lkZW50aXR5X2dldF9wcm9wZXJ0eSk6CisJICAqIGdzdC9lbGVtZW50cy9nc3RpZGVudGl0eS5oOgorCSAgQWRkZWQgdGhlIHNpbmdsZS1zZWdtZW50IGJvb2xlYW4gcHJvcGVydHkuCisJICBJZiBzZXQgdG8gVFJVRSwgaXQgd2lsbCBvdXRwdXQgYSBzaW5nbGUgc2VnbWVudCBvZiBkYXRhLCBzdGFydGluZyBmcm9tCisJICAwLCB3aWxsIGVhdCB1cCBhbGwgaW5jb21pbmcgbmV3c2VnbWVudCwgYW5kIG1vZGlmeSB0aGUgdGltZXN0YW1wIG9mIHRoZQorCSAgYnVmZmVycyBhY2NvcmRpbmdseQorCisyMDA1LTExLTI5IDE0OjQzOjUzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZG9jcy9yYW5kb20vdGhvbWFzdnMvMC4xMDoKKwkgIGZ1cnRoZXIgcmV2aWV3CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGZ1cnRoZXIgcmV2aWV3CisKKzIwMDUtMTEtMjkgMTM6MTA6MzggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RnaG9zdHBhZC5jOiBEb24ndCByZWYgTlVMTCB0YXJnZXQgcGFkICgjMzIyNzUxKS4gSW1wcm92ZSBkb2NzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RnaG9zdHBhZC5jOiAoZ3N0X3Byb3h5X3BhZF9nZXRfdGFyZ2V0KToKKwkgIERvbid0IHJlZiBOVUxMIHRhcmdldCBwYWQgKCMzMjI3NTEpLiBJbXByb3ZlIGRvY3MuCisKKzIwMDUtMTEtMjkgMTE6MDc6NTQgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KKworCSAgZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6IERvbid0IGNyYXNoIGlmIHdlIGZhaWxlZCB0byBsb2FkIGEgZmVhdHVyZSBmcm9tIGEgcGx1Z2luLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RyZWdpc3RyeXhtbC5jOiAobG9hZF9wbHVnaW4pOgorCSAgRG9uJ3QgY3Jhc2ggaWYgd2UgZmFpbGVkIHRvIGxvYWQgYSBmZWF0dXJlIGZyb20gYSBwbHVnaW4uCisKKzIwMDUtMTEtMjkgMDA6NTE6NTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBkb2NzL3JhbmRvbS90aG9tYXN2cy8wLjEwOgorCSAgYWRkIG15IHRvZG9zIGZvciAwLjEwCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFkZCBteSB0b2RvcyBmb3IgMC4xMAorCisyMDA1LTExLTI4IDIxOjUxOjM3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgY2hlY2svcGlwZWxpbmVzL3NpbXBsZV9sYXVuY2hfbGluZXMuYzogdXNlIG1vcmUgY2hlY2sgQVBJIGFuZCBsZXNzIEdMaWIgQVBJCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svcGlwZWxpbmVzL3NpbXBsZV9sYXVuY2hfbGluZXMuYzogKHNldHVwX3BpcGVsaW5lKSwKKwkgIChHU1RfU1RBUlRfVEVTVCk6CisJICB1c2UgbW9yZSBjaGVjayBBUEkgYW5kIGxlc3MgR0xpYiBBUEkKKworMjAwNS0xMS0yOCAyMTo0ODoxOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGNoZWNrL3BpcGVsaW5lcy9zaW1wbGVfbGF1bmNoX2xpbmVzLmM6CisJKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jOgorCSAgY29zbWV0aWMgY2hhbmdlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBjb3NtZXRpYyBjaGFuZ2VzCisKKzIwMDUtMTEtMjggMTk6NTg6NTYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBNYWtlZmlsZS5hbTogZG9uJ3QgcnVuIGNoZWNrcyBpZiB3ZSBkb24ndCBoYXZlIGNoZWNrCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogTWFrZWZpbGUuYW06CisJICBkb24ndCBydW4gY2hlY2tzIGlmIHdlIGRvbid0IGhhdmUgY2hlY2sKKwkgICogY29tbW9uL2NoZWNrLm1hazoKKwkgIHJlbW92ZSB0aGUgcmVnaXN0cnkgd2hlbiBydW5uaW5nIG1ha2UgdG9ydHVyZQorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgcmVtb3ZlIHNlY29uZCBtdWx0aXBseQorCSAgKiBnc3QvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9sb29wKToKKwkgIGZpeCBhIGNvbXBpbGUgd2FybmluZyB3aGVuIGRpc2FibGluZyBkZWJ1ZworCisyMDA1LTExLTI4IDE5OjQzOjI3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZ3N0L2dzdGluZm8uaDogSGV5ISBMZXQncyBwcmludCB0aGUgcGFkIG5hbWUgaWYgdGhlIHBvaW50ZXIgIT0gTlVMTCBpbnN0ZWFkIG9mIHdoZW4gaXQgPT0gTlVMTCA6LSkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0aW5mby5oOgorCSAgSGV5ISBMZXQncyBwcmludCB0aGUgcGFkIG5hbWUgaWYgdGhlIHBvaW50ZXIgIT0gTlVMTCBpbnN0ZWFkCisJICBvZiB3aGVuIGl0ID09IE5VTEwgOi0pCisKKzIwMDUtMTEtMjggMTg6NDQ6MTEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGNoZWNrL2dzdC9nc3R1dGlscy5jOiBVcGRhdGVkIGNoZWNrLCBhZGQgc29tZSBzY2FsaW5nIGFjY3VyYWN5IGNoZWNraW5nIGNvZGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svZ3N0L2dzdHV0aWxzLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBVcGRhdGVkIGNoZWNrLCBhZGQgc29tZSBzY2FsaW5nIGFjY3VyYWN5IGNoZWNraW5nIGNvZGUuCisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X3V0aWxfZGl2MTI4XzY0KSwKKwkgIChnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50NjQpLCAoZ3N0X3V0aWxfdWludDY0X3NjYWxlKSwKKwkgIChnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KToKKwkgIEZpeCA2IHRpbWVzIGZhc3RlciBkaXZpc2lvbiBjb2RlLiBPcHRpbWl6ZSBmb3IgY29tbW9uCisJICAxLzEgYW5kIGxlc3MgY29tbW9uIFgvMSBjYXNlcy4KKworMjAwNS0xMS0yOCAxNzo1OToyNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGdzdC9nc3RjbG9jay5jOgorCSAgZG9jIHVwZGF0ZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZG9jIHVwZGF0ZXMKKworMjAwNS0xMS0yOCAxNjowNTozNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgY2hlY2svZ3N0L2dzdHV0aWxzLmM6IE1vcmUgY2hlY2tzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dzdC9nc3R1dGlscy5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3V0aWxzX3N1aXRlKToKKwkgIE1vcmUgY2hlY2tzLgorCSAgKiBnc3QvZ3N0Y2xvY2suYzogKGdzdF9jbG9ja19maW5hbGl6ZSksIChnc3RfY2xvY2tfc2V0X21hc3RlciksCisJICAoZG9fbGluZWFyX3JlZ3Jlc3Npb24pLCAoZ3N0X2Nsb2NrX2FkZF9vYnNlcnZhdGlvbik6CisJICBDbGVhbnVwcy4KKwkgIFJlbGVhc2UgbG9jayB3aGVuIHRoZSBjbG9jayBjYW5ub3QgYmUgc2xhdmVkLgorCSAgQ2F0Y2ggdGhlIGNhc2Ugd2hlcmUgdGhlIHJlZ3Jlc3Npb24gcmV0dXJuZWQgYW4gaW52YWxpZCBkZW5vbWluYXRvci4KKwkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfdXRpbF9kaXYxMjhfNjRfaXRlcmF0ZSksCisJICAoZ3N0X3V0aWxfZGl2MTI4XzY0KSwgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQ2NCksCisJICAoZ3N0X3V0aWxfdWludDY0X3NjYWxlKSwgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQpOgorCSAgQWRkIHByb3RlbnRpYWxseSBtb3JlIHBlcmZvcm1hbnQgbm9uLWl0ZXJhdGl2ZSAxMjgvNjQgZGl2aWRlIGZ1bmN0aW9uCisJICB0aGF0IHVuZm9ydHVuYXRseSBkb2VzIG5vdCB3b3JrIHlldC4KKwkgIFNob3J0Y3V0IHRoZSB0cml2aWFsIDAvWCA9IDAgY2FzZS4KKwkgIFJlbW92ZSB0aGUgd2FybmluZ3Mgb24gb3ZlcmZsb3cuCisKKzIwMDUtMTEtMjggMTQ6MTg6MjIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBnc3QvZ3N0cGx1Z2luLmM6IGV2ZXJ5dGhpbmcgY2F1c2luZyBhIHBsdWdpbiBub3QgdG8gbG9hZCBzaG91bGQgYmUgYXQgbGVhc3QgYSBXQVJOSU5HCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBsdWdpbi5jOiAoZ3N0X3BsdWdpbl9yZWdpc3Rlcl9mdW5jKToKKwkgIGV2ZXJ5dGhpbmcgY2F1c2luZyBhIHBsdWdpbiBub3QgdG8gbG9hZCBzaG91bGQgYmUgYXQgbGVhc3QgYSBXQVJOSU5HCisKKzIwMDUtMTEtMjggMTQ6MDI6NTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBnc3QvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6CisJICBsb2cgY2FwcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBsb2cgY2FwcworCisyMDA1LTExLTI4IDE0OjAxOjUyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkgIGZpeCBkb2NzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGZpeCBkb2NzCisKKzIwMDUtMTEtMjggMTM6MjU6MTQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZG9jcy9yYW5kb20vZW5zb25pYy9kcGFyYW1zLnR4dDogc29tZSBUT0RPcyBmb3IgdGhlIG5leHQgZGV2IGN5Y2xlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9yYW5kb20vZW5zb25pYy9kcGFyYW1zLnR4dDoKKwkgIHNvbWUgVE9ET3MgZm9yIHRoZSBuZXh0IGRldiBjeWNsZQorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKKwkgIChnc3RfY29udHJvbGxlZF9wcm9wZXJ0eV9zZXRfaW50ZXJwb2xhdGlvbl9tb2RlKSwKKwkgIChnc3RfY29udHJvbGxlZF9wcm9wZXJ0eV9uZXcpOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuaDoKKwkgIHVzZSBiYXNlIHR5cGUgdG8gYXNzaWduIGFjY2Nlc3NvciBmdW5jdGlvbnMKKworMjAwNS0xMS0yOCAxMTozMTozMSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGNoZWNrL01ha2VmaWxlLmFtOiBPb3BzLCB0aGF0IHNob3VsZCBoYXZlIGJlZW4gdG9wX3NyY2RpcgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL01ha2VmaWxlLmFtOgorCSAgT29wcywgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIHRvcF9zcmNkaXIKKworMjAwNS0xMS0yOCAxMDoyOTozNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGNoZWNrL01ha2VmaWxlLmFtOgorCSogY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmM6CisJKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwaXBlbGluZS5jOgorCSAgZGlzYWJsZSBwaXBlbGluZSB0ZXN0IHVudGlsIHNvbWVvbmUgZml4ZXMgdGhlIHVucmVsaWFibGUgZXJyb3JzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGRpc2FibGUgcGlwZWxpbmUgdGVzdCB1bnRpbCBzb21lb25lIGZpeGVzIHRoZSB1bnJlbGlhYmxlIGVycm9ycworCisyMDA1LTExLTI4IDEwOjA3OjM4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgY2hlY2svOiBVc2UgYSBjbWRsaW5lIGRlZmluZSB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiBhIGZpbGUgdG8gdXNlIGZvciB0ZXN0aW5nLCB0byBhdm9pZCBicmVha2luZyBkaXN0Y2hlY2suCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svTWFrZWZpbGUuYW06CisJICAqIGNoZWNrL2VsZW1lbnRzL2Zkc3JjLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBVc2UgYSBjbWRsaW5lIGRlZmluZSB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiBhIGZpbGUgdG8gdXNlIGZvcgorCSAgdGVzdGluZywgdG8gYXZvaWQgYnJlYWtpbmcgZGlzdGNoZWNrLgorCisyMDA1LTExLTI4IDEwOjA0OjQ1ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGdzdC9nc3RwYWQuYyAoZml4YXRlX3ZhbHVlKTogVXNlIGFycmF5IGZ1bmN0aW9ucyBmb3IgYXJyYXlzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTExLTI4ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvZ3N0cGFkLmMgKGZpeGF0ZV92YWx1ZSk6IFVzZSBhcnJheSBmdW5jdGlvbnMgZm9yIGFycmF5cy4KKworMjAwNS0xMS0yOCAwOTo1NToxOSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgdG9vbHMvZ3N0LWxhdW5jaC5jOiBDbGFyaWZ5IHRoZSBvdXRwdXQgc3RyaW5ncywgbWFrZXMgaXQgZWFzaWVyIHRvIHRyYW5zbGF0ZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChtYWluKToKKwkgIENsYXJpZnkgdGhlIG91dHB1dCBzdHJpbmdzLCBtYWtlcyBpdCBlYXNpZXIgdG8gdHJhbnNsYXRlLgorCSAgRml4ZXMgIzMyMjYyNgorCisyMDA1LTExLTI4IDA4OjIwOjQ4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0L01ha2VmaWxlLmFtOiBkb24ndCB0cnkgYW5kIGJ1aWxkIG5ldCBpZiB3ZSBkb24ndCBldmVuIGhhdmUgPHN5cy9zb2NrZXQuaD4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvTWFrZWZpbGUuYW06CisJICBkb24ndCB0cnkgYW5kIGJ1aWxkIG5ldCBpZiB3ZSBkb24ndCBldmVuIGhhdmUgPHN5cy9zb2NrZXQuaD4KKworMjAwNS0xMS0yNyAyMjo1MDowOSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGNoZWNrLzogQWRkIHRlc3RzIGZvciBmZHNyYyBzZWVrYWJpbGl0eQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL01ha2VmaWxlLmFtOgorCSAgKiBjaGVjay9lbGVtZW50cy9mZHNyYy5jOiAoZXZlbnRfZnVuYyksIChzZXR1cF9mZHNyYyksCisJICAoY2xlYW51cF9mZHNyYyksIChHU1RfU1RBUlRfVEVTVCksIChmZHNyY19zdWl0ZSksIChtYWluKToKKwkgIEFkZCB0ZXN0cyBmb3IgZmRzcmMgc2Vla2FiaWxpdHkKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGZkc3JjLmM6IChnc3RfZmRzcmNfY2xhc3NfaW5pdCksCisJICAoZ3N0X2Zkc3JjX2luaXQpLCAoZ3N0X2Zkc3JjX3VwZGF0ZV9mZCksIChnc3RfZmRzcmNfc3RhcnQpLAorCSAgKGdzdF9mZHNyY19zZXRfcHJvcGVydHkpLCAoZ3N0X2Zkc3JjX2lzX3NlZWthYmxlKSwKKwkgIChnc3RfZmRzcmNfZ2V0X3NpemUpLCAoZ3N0X2Zkc3JjX3VyaV9zZXRfdXJpKToKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGZkc3JjLmg6CisJICBmZHNyYyBzaG91bGQgbm90IGJlIGEgJ2xpdmUnIHNvdXJjZS4KKwkgIEltcGxlbWVudCBzZWVraW5nIG9uIHNlZWthYmxlIGZkJ3MuCisJICAqIGdzdC9nc3RxdWVyeS5jOiAoZ3N0X3F1ZXJ5X25ld19zZWVraW5nKSwKKwkgIChnc3RfcXVlcnlfcGFyc2Vfc2Vla2luZyk6CisJICAqIGdzdC9nc3RxdWVyeS5oOgorCSAgSW1wbGVtZW50IFNFRUtJTkcgcXVlcnkgZnVuY3Rpb25zOgorCSAgKl9uZXdfc2Vla2luZyBhbmQgKl9wYXJzZV9zZWVraW5nCisKKzIwMDUtMTEtMjcgMjI6NDM6MDggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdGVsZW1lbnQuYzogZG9uJ3QgbG9vcCBmb3JldmVyCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2Rpc3Bvc2UpOgorCSAgZG9uJ3QgbG9vcCBmb3JldmVyCisJICAqIGdzdC9nc3RpdGVyYXRvci5jOgorCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJICBkb2MgZml4ZXMKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6CisJICAoZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfc2V0X2ludGVycG9sYXRpb25fbW9kZSk6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5oOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzoKKwkgIChpbnRlcnBvbGF0ZV9ub25lX2dldF9lbnVtX3ZhbHVlX2FycmF5KToKKwkgIHN1cHBvcnQgY29udHJvbGxpbmcgZW51bXMKKworMjAwNS0xMS0yNyAxOTo1Mjo0OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdHZhbHVlLmM6IEltcHJvdmUgZG9jdW1lbnRhdGlvbiBmb3IgZ3N0X3ZhbHVlX3VuaW9uKCkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHZhbHVlLmM6CisJICBJbXByb3ZlIGRvY3VtZW50YXRpb24gZm9yIGdzdF92YWx1ZV91bmlvbigpLgorCSAgKiBnc3QvZ3N0dmFsdWUuaDoKKwkgIENoYW5nZSByZXR1cm4gdmFsdWUgZm9yIHVuaW9uLCBpbnRlcnNlY3QgYW5kIHN1YnRyYWN0IGZ1bmN0aW9ucworCSAgZnJvbSBnaW50IHRvIGdib29sZWFuLgorCisyMDA1LTExLTI3IDE4OjExOjAyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0dmFsdWUuKjogVXNlIGdpbnQsIGdkb3VibGUgYW5kIGdjaGFyIGluIG91ciBBUEkgaW5zdGVhZCBvZiBpbnQsIGRvdWJsZSBhbmQgY2hhciAoYW5kIG1ha2UgdXNhZ2UgaW4gZ3N0dmFsdWUuYyAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF92YWx1ZV9zZXJpYWxpemVfYW55X2xpc3QpLAorCSAgKGdzdF92YWx1ZV90cmFuc2Zvcm1fYW55X2xpc3Rfc3RyaW5nKSwKKwkgIChnc3RfdmFsdWVfZGVzZXJpYWxpemVfbGlzdCksIChnc3RfdmFsdWVfZGVzZXJpYWxpemVfYXJyYXkpLAorCSAgKGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlKSwgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9pbnRfcmFuZ2UpLAorCSAgKGdzdF92YWx1ZV9zZXRfZG91YmxlX3JhbmdlKSwgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9kb3VibGVfcmFuZ2UpLAorCSAgKGdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2VfZnVsbCksCisJICAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2ZyYWN0aW9uX3JhbmdlKSwKKwkgIChnc3RfdmFsdWVfZGVzZXJpYWxpemVfY2FwcyksIChnc3RfdmFsdWVfZGVzZXJpYWxpemVfYnVmZmVyKSwKKwkgIChnc3RfdmFsdWVfZGVzZXJpYWxpemVfYm9vbGVhbiksCisJICAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2ludF9oZWxwZXIpLCAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2RvdWJsZSksCisJICAoZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9mbG9hdCksIChnc3RfdmFsdWVfZGVzZXJpYWxpemVfZmxvYXQpLAorCSAgKGdzdF9zdHJpbmdfd3JhcCksIChnc3RfdmFsdWVfZGVzZXJpYWxpemVfc3RyaW5nKSwKKwkgIChnc3RfdmFsdWVfZGVzZXJpYWxpemVfZW51bSksIChnc3RfdmFsdWVfZGVzZXJpYWxpemVfZmxhZ3MpLAorCSAgKGdzdF92YWx1ZV91bmlvbl9pbnRfcmFuZ2VfaW50X3JhbmdlKSwKKwkgIChnc3RfdmFsdWVfaW50ZXJzZWN0X2ludF9yYW5nZV9pbnRfcmFuZ2UpLAorCSAgKGdzdF92YWx1ZV9pbnRlcnNlY3RfZG91YmxlX3JhbmdlX2RvdWJsZV9yYW5nZSksCisJICAoZ3N0X3ZhbHVlX2NyZWF0ZV9uZXdfcmFuZ2UpLCAoZ3N0X3ZhbHVlX3N1YnRyYWN0X2ludF9yYW5nZV9pbnQpLAorCSAgKGdzdF92YWx1ZV9zdWJ0cmFjdF9pbnRfcmFuZ2VfaW50X3JhbmdlKSwKKwkgIChnc3RfdmFsdWVfc3VidHJhY3RfZG91YmxlX2RvdWJsZV9yYW5nZSksCisJICAoZ3N0X3ZhbHVlX3N1YnRyYWN0X2RvdWJsZV9yYW5nZV9kb3VibGVfcmFuZ2UpLAorCSAgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9mcmFjdGlvbik6CisJICAqIGdzdC9nc3R2YWx1ZS5oOgorCSAgVXNlIGdpbnQsIGdkb3VibGUgYW5kIGdjaGFyIGluIG91ciBBUEkgaW5zdGVhZCBvZiBpbnQsIGRvdWJsZSBhbmQKKwkgIGNoYXIgKGFuZCBtYWtlIHVzYWdlIGluIGdzdHZhbHVlLmMgbW9yZSBjb25zaXN0ZW50KS4KKworMjAwNS0xMS0yNyAxNzowNTozOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGdzdC9NYWtlZmlsZS5hbToKKwkgIGFkZCB1bmRlZmluZWQgZm9yIGNvcmUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkIHVuZGVmaW5lZCBmb3IgY29yZQorCisyMDA1LTExLTI3IDE2OjQ2OjQ4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogY2hlY2svTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvZGF0YXByb3RvY29sL01ha2VmaWxlLmFtOgorCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICBmaXggdXAgTWFrZWZpbGUuYW0gYW5kIHJlbW92ZSBHU1RfRU5BQkxFX05FVworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaXggdXAgTWFrZWZpbGUuYW0gYW5kIHJlbW92ZSBHU1RfRU5BQkxFX05FVworCisyMDA1LTExLTI3IDE1OjE1OjM1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgdXBkYXRlIExERkxBR1MgdXNlIHNvbWUgbW9yZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgICogZ3N0L01ha2VmaWxlLmFtOgorCSAgKiBnc3QvYmFzZS9NYWtlZmlsZS5hbToKKwkgICogZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgorCSAgKiBnc3QvZWxlbWVudHMvTWFrZWZpbGUuYW06CisJICAqIGdzdC9uZXQvTWFrZWZpbGUuYW06CisJICB1cGRhdGUgTERGTEFHUyB1c2Ugc29tZSBtb3JlCisKKzIwMDUtMTEtMjcgMTQ6MTk6MzggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBjb21tb246CisJICBGaXhlcyAjMzEyNTg5CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIEZpeGVzICMzMTI1ODkKKworMjAwNS0xMS0yNyAxNDowMzoyMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGNoZWNrL2dzdC9nc3RwaXBlbGluZS5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmM6CisJICBhZGQgc29tZSBhZGRpdGlvbmFsIGZhaWxfaWYncworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGQgc29tZSBhZGRpdGlvbmFsIGZhaWxfaWYncworCisyMDA1LTExLTI2IDExOjI4OjMyICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOiBUaGlzIHNob3VsZG4ndCBpc3N1ZSBhIGdfd2FybmluZyBzaW5jZSBpdCByZXR1cm5zIE5VTEwgaWYgaXQgY291bGRuJ3QgZmluZCB0aGUgcGx1Z2luLCBhbmQgYWwuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOiAoZ3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQpOgorCSAgVGhpcyBzaG91bGRuJ3QgaXNzdWUgYSBnX3dhcm5pbmcgc2luY2UgaXQgcmV0dXJucyBOVUxMIGlmIGl0CisJICBjb3VsZG4ndCBmaW5kIHRoZSBwbHVnaW4sIGFuZCBhbGwgZnVuY3Rpb25zIHVzaW5nIHRoaXMgYmVoYXZlCisJICBwcm9wZXJseSBvbiBhIE5VTEwgcmV0dXJuLiBTd2l0Y2hpbmcgdG8gYSBHU1RfV0FSTklORy4KKworMjAwNS0xMS0yNSAxNzowNjozNiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGdzdC9nc3RiaW4uYzogRG9uJ3QgbGVhayBjbG9jayBtZXNzYWdlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2hhbmRsZV9tZXNzYWdlX2Z1bmMpOgorCSAgRG9uJ3QgbGVhayBjbG9jayBtZXNzYWdlcy4KKworMjAwNS0xMS0yNSAxMTozODozOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHV0aWxzLmM6IE9wdGltaXNhdGlvbnMsIHJlbW92ZSB1bm5lZWRlZCB2YXJzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludDY0KSwKKwkgIChnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KToKKwkgIE9wdGltaXNhdGlvbnMsIHJlbW92ZSB1bm5lZWRlZCB2YXJzLgorCisyMDA1LTExLTI1IDAwOjAyOjA1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBjaGVjay9nc3QvZ3N0dXRpbHMuYzogQWRkZWQgbW9yZSBjaGVja3MgZm9yIHRoZSBoaWdoIHByZWNpc2lvbiB1aW50NjQgY2FzZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svZ3N0L2dzdHV0aWxzLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RfdXRpbHNfc3VpdGUpOgorCSAgQWRkZWQgbW9yZSBjaGVja3MgZm9yIHRoZSBoaWdoIHByZWNpc2lvbiB1aW50NjQgY2FzZXMuCisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludDY0KSwKKwkgIChnc3RfdXRpbF91aW50NjRfc2NhbGUpLCAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCk6CisJICBJbXBsZW1lbnQgaGlnaCBwcmVjaXNzaW9uIChndWludDY0ICogZ3VpbnQ2NCkgLyBndWludDY0LgorCisyMDA1LTExLTI0IDE5OjA2OjU4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IEZpeCB3cm9uZyBwZXJjZW50YWdlIHF1ZXJ5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19xdWVyeSk6CisJICBGaXggd3JvbmcgcGVyY2VudGFnZSBxdWVyeS4KKwkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfdXRpbF91aW50NjRfc2NhbGUpLAorCSAgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQpOgorCSAgQWRkIHNvbWUgbW9yZSBjb21tb24gY2FzZXMgdGhhdCBjYW4gYmUgaGFuZGxlZAorCSAgZWZmaWNpZW50bHkgdG8gX3NjYWxlLgorCisyMDA1LTExLTI0IDE4OjQ0OjQzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogY2hlY2svZ3N0L2dzdG1pbmlvYmplY3QuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtaW5pb2JqZWN0LmM6CisJICByZW1vdmUgd3JvbmdseSBjb21taXRlZCBjb21tZW50cworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICByZW1vdmUgd3JvbmdseSBjb21taXRlZCBjb21tZW50cworCisyMDA1LTExLTI0IDE4OjQwOjU4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgY2hlY2svZ3N0L2dzdG1pbmlvYmplY3QuYzogZG9uJ3QgdXNlIGNoZWNrIGNhbGxzIGZyb20gdGhyZWFkczsgY2hlY2sgcHJvYmFibHkgaXNuJ3QgdGhyZWFkc2FmZSBhbmQgdXNpbmcgYSBsb2NrIHRvIG1hLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svZ3N0L2dzdG1pbmlvYmplY3QuYzogKHRocmVhZF9yZWYpLCAoR1NUX1NUQVJUX1RFU1QpLAorCSAgKGdzdF9taW5pX29iamVjdF9zdWl0ZSk6CisJICBkb24ndCB1c2UgY2hlY2sgY2FsbHMgZnJvbSB0aHJlYWRzOyBjaGVjayBwcm9iYWJseSBpc24ndAorCSAgdGhyZWFkc2FmZSBhbmQgdXNpbmcgYSBsb2NrIHRvIG1ha2UgaXQgdGhyZWFkc2FmZSB3b3VsZAorCSAgZGVmZWF0IHRoZSBwdXJwb3NlIG9mIHRoaXMgY2hlY2sKKwkgICogZ3N0L2NoZWNrL2dzdGNoZWNrLmM6CisJICAqIGdzdC9jaGVjay9nc3RjaGVjay5oOgorCSAgdXNlIEdTVF9ERUJVRyBzb21lIG1vcmUKKworMjAwNS0xMS0yNCAxODowMzoxNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHV0aWxzLmM6IENoYWluIHRyaXZpYWwgY2FzZSB0byBfc2NhbGVfaW50LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlKSwKKwkgIChnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KToKKwkgIENoYWluIHRyaXZpYWwgY2FzZSB0byBfc2NhbGVfaW50LgorCisyMDA1LTExLTI0IDE3OjQ0OjU3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBjaGVjay9nc3QvZ3N0dXRpbHMuYzogQWRkZWQgdGVzdCBmb3Igc2NhbGluZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9nc3QvZ3N0dXRpbHMuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF91dGlsc19zdWl0ZSk6CisJICBBZGRlZCB0ZXN0IGZvciBzY2FsaW5nLgorCSAgKiBnc3QvZ3N0Y2xvY2suaDoKKwkgIFNtYWxsIGRvYyBmaXguCisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCk6CisJICBJbXBsZW1lbnRlZCBoaWdoIHByZWNpc2lvbiBzY2FsaW5nIGNvZGUuCisKKzIwMDUtMTEtMjQgMTY6NTY6MjggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdGluZm8uaDogZG8gbm90IGNyYXNoIG9uIHBhZD09TlVMTAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RpbmZvLmg6CisJICBkbyBub3QgY3Jhc2ggb24gcGFkPT1OVUxMCisKKzIwMDUtMTEtMjQgMTY6MzI6MjYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSAgRml4IGRpc3RjaGVjayBpc3N1ZXMgZm9yIHRoZSBsaWJyYXJpZXMgZG9jcyBidWlsZAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBQYXRjaCBieTogU3RlZmFuIEtvc3QKKwkgICogY29tbW9uL2d0ay1kb2MubWFrOgorCSAgKiBkb2NzL2dzdC9NYWtlZmlsZS5hbToKKwkgICogZG9jcy9saWJzL01ha2VmaWxlLmFtOgorCSAgRml4IGRpc3RjaGVjayBpc3N1ZXMgZm9yIHRoZSBsaWJyYXJpZXMgZG9jcyBidWlsZAorCSAgQ2xvc2VzICMzMTk1OTkKKworMjAwNS0xMS0yNCAxNDozOTo1OSArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgorCisJICBkb2NzL21hbnVhbC9iYXNpY3MtaGVsbG93b3JsZC54bWw6IEZpeCBidWcgIzMxNTAyNzogbWVtb3J5IGxlYWsgaW4gZXhhbXBsZSBjb2RlIGluIGRvY3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9tYW51YWwvYmFzaWNzLWhlbGxvd29ybGQueG1sOgorCSAgRml4IGJ1ZyAjMzE1MDI3OiBtZW1vcnkgbGVhayBpbiBleGFtcGxlIGNvZGUgaW4gZG9jcy4KKworMjAwNS0xMS0yNCAxMjo0NDoyNSArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgorCisJICBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiBVbmxvY2sgdGhlIFBSRVJPTExfTE9DSyBpbiBhIGZhaWx1cmUgY2FzZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0yNCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQGZsdWVuZG8uY29tPgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KToKKwkgIFVubG9jayB0aGUgUFJFUk9MTF9MT0NLIGluIGEgZmFpbHVyZSBjYXNlLgorCisyMDA1LTExLTI0IDExOjE2OjMyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogY2hlY2svZ3N0Ly5naXRpZ25vcmU6CisJKiBjaGVjay9uZXQvLmdpdGlnbm9yZToKKwkqIHRlc3RzL2NoZWNrL2dzdC8uZ2l0aWdub3JlOgorCSAgaWdub3JlIG1vcmUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgaWdub3JlIG1vcmUKKworMjAwNS0xMS0yNCAwOTo0NDowNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSogQ2hhbmdlTG9nOgorCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9iYXNlL2dzdGFkYXB0ZXIuaDoKKwkqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6CisJKiBnc3QvYmFzZS9nc3RwdXNoc3JjLmg6CisJKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuaDoKKwkqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmM6CisJKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5oOgorCSogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzaW5rLmg6CisJKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNyYy5oOgorCSogZ3N0L2dzdC5jOgorCSogZ3N0L2dzdGJpbi5jOgorCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSogZ3N0L2dzdGJ1cy5oOgorCSogZ3N0L2dzdGNhcHMuYzoKKwkqIGdzdC9nc3RjaGlsZHByb3h5LmM6CisJKiBnc3QvZ3N0Y2xvY2suYzoKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKKwkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5oOgorCSogZ3N0L2dzdGV2ZW50LmM6CisJKiBnc3QvZ3N0Z2hvc3RwYWQuaDoKKwkqIGdzdC9nc3RpbmRleC5oOgorCSogZ3N0L2dzdGludGVyZmFjZS5oOgorCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKKwkqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6CisJKiBnc3QvZ3N0cGFkLmM6CisJKiBnc3QvZ3N0cGFkLmg6CisJKiBnc3QvZ3N0cGFkdGVtcGxhdGUuaDoKKwkqIGdzdC9nc3RwaXBlbGluZS5oOgorCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuaDoKKwkqIGdzdC9nc3RxdWVyeS5oOgorCSogZ3N0L2dzdHF1ZXVlLmg6CisJKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSogZ3N0L2dzdHRhZ2xpc3QuaDoKKwkqIGdzdC9nc3R0YWdzZXR0ZXIuYzoKKwkqIGdzdC9nc3R0YWdzZXR0ZXIuaDoKKwkqIGdzdC9nc3R0cmFjZS5jOgorCSogZ3N0L2dzdHRyYWNlLmg6CisJKiBnc3QvZ3N0dHlwZWZpbmQuaDoKKwkqIGdzdC9nc3R1cmkuaDoKKwkqIGdzdC9nc3R2YWx1ZS5jOgorCSogZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgorCSogZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5oOgorCSogZ3N0L25ldC9nc3RuZXR0aW1lcGFja2V0LmM6CisJKiBnc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jOgorCSogZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5oOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5oOgorCSogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6CisJKiBsaWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suaDoKKwkqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcGFja2V0LmM6CisJKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmM6CisJKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmg6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmg6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5oOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5oOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmg6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmg6CisJICBEb2MgZml4ZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIERvYyBmaXhlcy4KKworMjAwNS0xMS0yMyAyMjo1NDo1NCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkgIHJlbW92ZWQgZGlyZWN0b3JpZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVtb3ZlZCBkaXJlY3RvcmllcworCisyMDA1LTExLTIzIDIyOjIxOjI1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogdGVzdHMvaW5zdGFudGlhdGUvTWFrZWZpbGUuYW06CisJICBmaXggZGlzdAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaXggZGlzdAorCisyMDA1LTExLTIzIDIxOjI0OjQ2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogTWFrZWZpbGUuYW06CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICBhZGQgYSB0b3J0dXJlIHRhcmdldAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGQgYSB0b3J0dXJlIHRhcmdldAorCisyMDA1LTExLTIzIDIxOjE4OjQ0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogdGVzdHMvaW5zdGFudGlhdGUvY3JlYXRlLmM6CisJKiB0ZXN0cy9uZWdvdGlhdGlvbi8uZ2l0aWdub3JlOgorCSogdGVzdHMvbmVnb3RpYXRpb24vTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9uZWdvdGlhdGlvbi9jYXBzbmVnbzEuYzoKKwkgIHJlbW92ZSBvYnNvbGV0ZSB0ZXN0cworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICByZW1vdmUgb2Jzb2xldGUgdGVzdHMKKworMjAwNS0xMS0yMyAyMToxNjo1OCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHRlc3RzL01ha2VmaWxlLmFtOgorCSogdGVzdHMvbGF0LmM6CisJKiB0ZXN0cy9tdXhpbmcvLmdpdGlnbm9yZToKKwkqIHRlc3RzL211eGluZy9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL211eGluZy9jYXNlMS5jOgorCSogdGVzdHMvcHJvYmVzLy5naXRpZ25vcmU6CisJKiB0ZXN0cy9wcm9iZXMvTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9wcm9iZXMvcHJvYmV0ZXN0LmM6CisJICByZW1vdmUgb2Jzb2xldGUgdGVzdHMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVtb3ZlIG9ic29sZXRlIHRlc3RzCisKKzIwMDUtMTEtMjMgMjE6MTM6NTkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL01ha2VmaWxlLmFtOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS90cmlnZ2VyL01ha2VmaWxlLmFtOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS90cmlnZ2VyL1JFQURNRToKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvdHJpZ2dlci90cmlnZ2VyLmM6CisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW06CisJKiB0ZXN0c3VpdGUvdHJpZ2dlci9NYWtlZmlsZS5hbToKKwkqIHRlc3RzdWl0ZS90cmlnZ2VyL1JFQURNRToKKwkqIHRlc3RzdWl0ZS90cmlnZ2VyL3RyaWdnZXIuYzoKKwkgIHJlbW92ZSB0cmlnZ2VyIHN1YmRpcgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICByZW1vdmUgdHJpZ2dlciBzdWJkaXIKKworMjAwNS0xMS0yMyAyMToxMjoyMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvZWxlbWVudHMvTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2VsZW1lbnRzL2Zha2UuYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvZWxlbWVudHMvbmFtZS5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9lbGVtZW50cy9wcm9wZXJ0eS5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9lbGVtZW50cy9wcm9wZXJ0eS5oOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9lbGVtZW50cy90ZWUuYzoKKwkqIHRlc3RzdWl0ZS9lbGVtZW50cy9NYWtlZmlsZS5hbToKKwkqIHRlc3RzdWl0ZS9lbGVtZW50cy9mYWtlLmM6CisJKiB0ZXN0c3VpdGUvZWxlbWVudHMvbmFtZS5jOgorCSogdGVzdHN1aXRlL2VsZW1lbnRzL3Byb3BlcnR5LmM6CisJKiB0ZXN0c3VpdGUvZWxlbWVudHMvcHJvcGVydHkuaDoKKwkqIHRlc3RzdWl0ZS9lbGVtZW50cy90ZWUuYzoKKwkgIHJlbW92ZSB0ZXN0cyByZXBsYWNlZCBieSBjaGVja3MKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVtb3ZlIHRlc3RzIHJlcGxhY2VkIGJ5IGNoZWNrcworCisyMDA1LTExLTIzIDIwOjA0OjI1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogY29uZmlndXJlLmFjOgorCSAgYmFjayB0byBIRUFECisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGJhY2sgdG8gSEVBRAorCis9PT0gcmVsZWFzZSAwLjkuNiA9PT0KKworMjAwNS0xMS0yMyAxOTo1NTowOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIE5FV1M6CisJKiBSRUxFQVNFOgorCSogY29uZmlndXJlLmFjOgorCSogZG9jcy9yYW5kb20vbW92aW5nLXBsdWdpbnM6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICByZWxlYXNpbmcgMC45LjYKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVsZWFzaW5nIDAuOS42CisKKzIwMDUtMTEtMjMgMTg6MDc6MTggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vY2EucG86CisJKiBwby9jcy5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSAgVXBkYXRlIC5wbyBmaWxlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBVcGRhdGUgLnBvIGZpbGVzCisKKzIwMDUtMTEtMjMgMTc6NTk6MDAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBkb2NzL3VwbG9hZC5tYWs6CisJICBDaHJpc3RpYW4sIGxlYXJuIHRvIGNvbmZpZ3VyZSB5b3VyIC5zc2gvY29uZmlnIGZpbGUsIGFuZCBTVE9QIGNvbW1pdHRpbmcgdG8gdGhpc2ZpbGUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgQ2hyaXN0aWFuLCBsZWFybiB0byBjb25maWd1cmUgeW91ciAuc3NoL2NvbmZpZyBmaWxlLCBhbmQgU1RPUCBjb21taXR0aW5nIHRvIHRoaXNmaWxlCisKKzIwMDUtMTEtMjMgMTY6MTA6MzggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIERvYyB1cGRhdGVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nbGliLWNvbXBhdC5jOgorCSAgKiBnc3QvZ3N0dGFnc2V0dGVyLmM6CisJICAqIGdzdC9nc3R2YWx1ZS5jOgorCSAgKiBnc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6CisJICAqIGdzdC9uZXQvZ3N0bmV0dGltZXBhY2tldC5oOgorCSAgRG9jIHVwZGF0ZXMuCisKKzIwMDUtMTEtMjMgMTU6NDk6MDYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBkb2NzL2ZhcS91c2luZy54bWw6CisJKiBkb2NzL2xpYnMvdG1wbC9nc3Rjb250cm9sLnNnbWw6CisJKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kcGFyYW1zLnhtbDoKKwkqIGRvY3MvbWFudWFsL2FwcGVuZGl4LWNoZWNrbGlzdC54bWw6CisJKiBkb2NzL21hbnVhbC9iYXNpY3MtZWxlbWVudHMueG1sOgorCSogZG9jcy9wd2cvb3RoZXItc291cmNlLnhtbDoKKwkqIGRvY3MvcmFuZG9tL21vdmluZy1wbHVnaW5zOgorCSogZ3N0L2dzdHBhZC5jOgorCSogdG9vbHMvZ3N0LWxhdW5jaC4xLmluOgorCSAgcmVtb3ZlIG1lbnRpb25zIG9mIHNpbmVzcmMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVtb3ZlIG1lbnRpb25zIG9mIHNpbmVzcmMKKworMjAwNS0xMS0yMyAxNDo1MjozMSArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgorCisJICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBVcGRhdGUgZm9yIG5ldyBBUEkgYW5kIEFQSSBjaGFuZ2VzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICBVcGRhdGUgZm9yIG5ldyBBUEkgYW5kIEFQSSBjaGFuZ2VzLgorCSAgKiBnc3QvZ3N0b2JqZWN0Lmg6CisJICBEb2N1bWVudGF0aW9uIGZpeDogR1NUX1RSWUxPQ0sgLT4gR1NUX09CSkVDVF9UUllMT0NLCisJICAqIGdzdC9nc3R2YWx1ZS5jOgorCSAgRG9jdW1lbnRhdGlvbiB0eXBvIGZpeC4KKwkgICogZ3N0L25ldC9nc3RuZXR0aW1lcGFja2V0LmM6CisJICBEb2N1bWVudGF0aW9uIGZpeGVzIGZvciBhcmd1bWVudHMuCisKKzIwMDUtMTEtMjMgMTM6MjI6MjEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBBUEkgQ2hhbmdlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6IChnc3Rfc3RydWN0dXJlX2dldF9mcmFjdGlvbiksCisJICAoZ3N0X3N0cnVjdHVyZV9wYXJzZV92YWx1ZSksCisJICAoZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9mcmFjdGlvbik6CisJICAqIGdzdC9nc3RzdHJ1Y3R1cmUuaDoKKwkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KToKKwkgICogZ3N0L2dzdHV0aWxzLmg6CisJICAqIHNjcmlwdHMvdXBkYXRlLWZ1bmNuYW1lczoKKwkgIEFQSSBDaGFuZ2VzLgorCSAgUmVuYW1lIGdzdF91dGlsX2Nsb2NrX3RpbWVfc2NhbGUgdG8gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludAorCSAgTWFrZSBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ZyYWN0aW9uIHRha2UgYSBudW1lcmF0b3IKKwkgIGFuZCBkZW5vbWluYXRvciBhcmd1bWVudCBpbnN0ZWFkIG9mIGEgR1ZhbHVlCisJICBhZGQgZ3N0X3N0cnVjdHVyZV9nZXRfZnJhY3Rpb24gaGVscGVyIGZ1bmN0aW9uLgorCisyMDA1LTExLTIzIDEzOjE0OjQ2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OiBVcGRhdGUgVE9ETy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgorCSAgVXBkYXRlIFRPRE8uCisJICAqIGdzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzogKGdzdF9uZXRfY2xpZW50X2Nsb2NrX3RocmVhZCk6CisJICAqIGdzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suaDoKKwkgIFVzZSBwYXJlbnQgZmllbGRzIGZvciB0aW1lb3V0IGFuZCB3aW5kb3dfc2l6ZS4KKworMjAwNS0xMS0yMyAxMjozOTozNiArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgorCisJKiBkb2NzL3VwbG9hZC5tYWs6CisJKiBnc3QvcmVnaXN0cmllcy8uZ2l0aWdub3JlOgorCSogZ3N0L3NjaGVkdWxlcnMvLmdpdGlnbm9yZToKKwkqIGxpYnMvZ3N0L2NvbnRyb2wvLmdpdGlnbm9yZToKKwkqIGxpYnMvZ3N0L2dldGJpdHMvLmdpdGlnbm9yZToKKwkgIGFkZCBtaXNzaW5nIGN2c2lnbm9yZXMgc28gQ1ZTIHNodXRzIHVwCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFkZCBtaXNzaW5nIGN2c2lnbm9yZXMgc28gQ1ZTIHNodXRzIHVwCisKKzIwMDUtMTEtMjMgMTI6MzY6MDAgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgY2hlY2svbmV0L2dzdG5ldGNsaWVudGNsb2NrLmMgKHRlc3RfZnVuY3Rpb25pbmcpOiBBZGp1c3QgdG8gcmF0ZV9udW0vcmF0ZV9kZW5vbSBjaGFuZ2UuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTEtMjMgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGNoZWNrL25ldC9nc3RuZXRjbGllbnRjbG9jay5jICh0ZXN0X2Z1bmN0aW9uaW5nKTogQWRqdXN0IHRvCisJICByYXRlX251bS9yYXRlX2Rlbm9tIGNoYW5nZS4KKwkgICogZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jCisJICAoZ3N0X25ldF9jbGllbnRfY2xvY2tfb2JzZXJ2ZV90aW1lcyk6IFRha2UgdGhlIFNMQVZFX0xPQ0sgbm90IHRoZQorCSAgT0JKRUNUX0xPQ0suIERvbid0IGNhbGwgYWRkX29ic2VydmF0aW9uIHdpdGggdGhlIGxvY2suCisJICAqIGdzdC9nc3RjbG9jay5jIChnc3RfY2xvY2tfaW5pdCk6IEluaXRpYWxpemUgdGhlIHJhdGUgYXMgYQorCSAgZnJhY3Rpb24uCisJICAoZ3N0X2Nsb2NrX2FkanVzdF91bmxvY2tlZCk6IEFkanVzdCB1c2luZyB1aW50NjRfc2NhbGUgYW5kIHRoZQorCSAgcmF0ZSBmcmFjdGlvbi4KKwkgIChnc3RfY2xvY2tfc2V0X2NhbGlicmF0aW9uLCBnc3RfY2xvY2tfZ2V0X2NhbGlicmF0aW9uKTogQ2hhbmdlIHRvCisJICBkZWFsIHdpdGggcmF0ZSBhcyBhIGZyYWN0aW9uIHdob3NlIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3IgYXJlCisJICBHc3RDbG9ja1RpbWUgdmFsdWVzLgorCSAgKGdzdF9jbG9ja19zZXRfbWFzdGVyKTogT25seSB1c2UgdGhlIE9CSkVDVF9MT0NLIHRvIHNldCB0aGUKKwkgIG1hc3RlcjsgdGhlIG90aGVyIGZpZWxkcyBhcmUgcHJvdGVjdGVkIGJ5IHRoZSBTTEFWRV9MT0NLLgorCSAgKGRvX2xpbmVhcl9yZWdyZXNzaW9uKTogTm90ZSB0aGF0IHRoaXMgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUKKwkgIFNMQVZFX0xPQ0suCisJICAoZ3N0X2Nsb2NrX2FkZF9vYnNlcnZhdGlvbik6IFRha2UgdGhlIFNMQVZFX0xPQ0ssIG5vdCB0aGUKKwkgIE9CSkVDVF9MT0NLLiBDYWxsIHNldF9jYWxpYnJhdGlvbiBpbnN0ZWFkIG9mIHRvdWNoaW5nIHRoZQorCSAgdmFyaWFibGVzIGRpcmVjdGx5LgorCSAgKGdzdF9jbG9ja19zZXRfcHJvcGVydHksIGdzdF9jbG9ja19nZXRfcHJvcGVydHkpOiBQcm90ZWN0CisJICBtYXN0ZXIvc2xhdmUgcGFyYW1ldGVycyB3aXRoIHRoZSBTTEFWRV9MT0NLLgorCSAgKiBnc3QvZ3N0Y2xvY2suaCAoR3N0Q2xvY2spOiBSZW1vdmUgcmF0ZSwgYWRkIHJhdGVfbnVtZXJhdG9yIGFuZAorCSAgcmF0ZV9kZW5vbWluYXRvci4gUFIzQzFTMy4gQWRkIGEgbmV3IGxvY2ssIHRoZSBTTEFWRV9MT0NLLCBhbmQKKwkgIG5vdGUgdGhhdCBhbGwgb2YgdGhlIGluc3RhbmNlIHZhcmlhYmxlcyB0aGF0IGFkZF9vYnNlcnZhdGlvbiBhbmQKKwkgIHRoZSBzZXRfbWFzdGVyIGZ1bmN0aW9ucyB1c2UgYXJlIHByb3RlY3RlZCBieSB0aGF0IGxvY2sgYW5kIG5vdAorCSAgdGhlIE9CSkVDVF9MT0NLLgorCSAgKEdTVF9DTE9DS19TTEFWRV9MT0NLLCBHU1RfQ0xPQ0tfU0xBVkVfVU5MT0NLKTogTmV3IG1hY3Jvcy4KKwkgICogZ3N0L2dzdGNsb2NrLmMgKGdzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb24pOiBObyBsb25nZXIgcmVxdWlyZXMKKwkgIHRoZSBjYWxsZXIgdG8gdGFrZSB0aGUgb2JqZWN0IGxvY2suCisKKzIwMDUtMTEtMjMgMTE6MjI6MzkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RlcnJvci4qOiBBZGQgZXJyb3IgZm9yIGNsb2NrIHN0dWZmLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RlcnJvci5jOiAoX2dzdF9jb3JlX2Vycm9yc19pbml0KToKKwkgICogZ3N0L2dzdGVycm9yLmg6CisJICBBZGQgZXJyb3IgZm9yIGNsb2NrIHN0dWZmLgorCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpLAorCSAgKGdzdF9waXBlbGluZV9zZXRfY2xvY2spOgorCSAgUG9zdCBjbG9jayBlcnJvciB3aGVuIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIGEgcGlwZWxpbmUuCisKKzIwMDUtMTEtMjMgMTE6MDU6MzcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogbWFrZSB0d28gc3ltYm9scyBmcm9tIGdzdGluZm8gcHJpdmF0ZSBmb3IgdGhlIGRvY3MKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgbWFrZSB0d28gc3ltYm9scyBmcm9tIGdzdGluZm8gcHJpdmF0ZSBmb3IgdGhlIGRvY3MKKwkgICogZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKKwkgICogZ3N0L2dzdHV0aWxzLmM6CisJICBmaXggZG9jIHR5cG9zLCB1cGRhdGUgZG9jcworCisyMDA1LTExLTIyIDE4OjI4OjQ0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNlc2luay4qOiBObyBuZWVkIHRvIHN0b3JlIHRoZSBjbG9jaywgdGhlIHBhcmVudCBlbGVtZW50IGNsYXNzIGFscmVhZHkgaGFzIGl0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NsYXNzX2luaXQpLAorCSAgKGdzdF9iYXNlX3Npbmtfd2FpdCksIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpLAorCSAgKGdzdF9iYXNlX3NpbmtfaGFuZGxlX2V2ZW50KToKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKKwkgIE5vIG5lZWQgdG8gc3RvcmUgdGhlIGNsb2NrLCB0aGUgcGFyZW50IGVsZW1lbnQgY2xhc3MgYWxyZWFkeQorCSAgaGFzIGl0LgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX3NldF9jbG9ja19mdW5jKSwgKGdzdF9iaW5fYWRkX2Z1bmMpOgorCSAgVXBkYXRlcyBmb3IgY2xvY2tfc2V0IHJldHVybmluZyBhIGdib29sZWFuCisJICAqIGdzdC9nc3RjbG9jay5jOiAoZ3N0X2Nsb2NrX2VudHJ5X25ldyksIChnc3RfY2xvY2tfaWRfd2FpdCksCisJICAoZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMpLCAoZ3N0X2Nsb2NrX2NsYXNzX2luaXQpLAorCSAgKGdzdF9jbG9ja19pbml0KSwgKGdzdF9jbG9ja19maW5hbGl6ZSksCisJICAoZ3N0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lKSwgKGdzdF9jbG9ja19nZXRfdGltZSksCisJICAoZ3N0X2Nsb2NrX3NsYXZlX2NhbGxiYWNrKSwgKGdzdF9jbG9ja19zZXRfbWFzdGVyKSwKKwkgIChnc3RfY2xvY2tfZ2V0X21hc3RlciksIChkb19saW5lYXJfcmVncmVzc2lvbiksCisJICAoZ3N0X2Nsb2NrX2FkZF9vYnNlcnZhdGlvbiksIChnc3RfY2xvY2tfc2V0X3Byb3BlcnR5KSwKKwkgIChnc3RfY2xvY2tfZ2V0X3Byb3BlcnR5KToKKwkgICogZ3N0L2dzdGNsb2NrLmg6CisJICBJbXBsZW1lbnQgbWFzdGVyL3NsYXZlLiBXaGVuIHNldHRpbmcgYSBjbG9jayBhcyBhIHNsYXZlLCBhCisJICBwZXJpb2RpYyB0aW1lb3V0IGlzIHNjaGVkdWxlZCB0byBzYW1wbGUgbWFzdGVyIGFuZCBzbGF2ZSB0aW1lcy4KKwkgIFRoZW4gdGhlIHNsYXZlIGNsb2NrIGlzIHJlY2FsaWJyYXRlZCB0byBtYXRjaCBvZmZzZXQgYW5kIHJhdGUKKwkgIG9mIHRoZSBtYXN0ZXIgY2xvY2suCisJICBVcGRhdGUgbG9nZ2luZyBhIGJpdC4KKwkgIEFkZCBmbGFnIHNvIHRoYXQgYSBjbG9jayBjYW4gc3RhdGUgdGhhdCBpcyBjYW5ub3QgYmUgc2xhdmVkIHRvCisJICBhbm90aGVyIGNsb2NrLgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfc2V0X2Nsb2NrKToKKwkgICogZ3N0L2dzdGVsZW1lbnQuaDoKKwkgIFRoZSBzZXRfY2xvY2sgcmV0dXJucyBhIGdib29sZWFuIGZvciB3aGVuIGFuIGVsZW1lbnQgY2Fubm90CisJICBkZWFsIHdpdGggdGhlIHNlbGVjdGVkIGNsb2NrIGluIHRoZSBwaXBlbGluZS4KKwkgICogZ3N0L2dzdHBpcGVsaW5lLmM6IChnc3RfcGlwZWxpbmVfY2hhbmdlX3N0YXRlKSwKKwkgIChnc3RfcGlwZWxpbmVfc2V0X2Nsb2NrKToKKwkgICogZ3N0L2dzdHBpcGVsaW5lLmg6CisJICBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSBzZXQgb24KKwkgIHRoZSBwaXBlbGluZS4KKwkgICogZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOiAoZ3N0X25ldF9jbGllbnRfY2xvY2tfY2xhc3NfaW5pdCksCisJICAoZ3N0X25ldF9jbGllbnRfY2xvY2tfaW5pdCksIChnc3RfbmV0X2NsaWVudF9jbG9ja19maW5hbGl6ZSksCisJICAoZ3N0X25ldF9jbGllbnRfY2xvY2tfc2V0X3Byb3BlcnR5KSwKKwkgIChnc3RfbmV0X2NsaWVudF9jbG9ja19nZXRfcHJvcGVydHkpLAorCSAgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX29ic2VydmVfdGltZXMpOgorCSAgKiBnc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmg6CisJICBVc2UgcmVncmVzc2lvbiBjb2RlIGluIEdzdENsb2NrIHBhcmVudCwgcmVtb3ZlIGR1cGxpY2F0ZWQKKwkgIGZ1bmN0aW9uYWxpdHkuCisKKzIwMDUtMTEtMjIgMTY6MzE6MDggKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGdzdC9nc3R1dGlscy5jOgorCSogZ3N0L2dzdHV0aWxzLmg6CisJICBBZGQgdW5kZXJzY29yZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgQWRkIHVuZGVyc2NvcmVzCisKKzIwMDUtMTEtMjIgMTU6NTI6MDMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBnc3QvOiBjb3JyZWN0bHkgZml4IEdFbnVtVmFsdWVzIHNvIHRoYXQgbmljayBpcyB0aGUgc2hvcnQgbG93ZXJjYXNlIGRhc2hlZCB0YWcKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZWxlbWVudHMvTWFrZWZpbGUuYW06CisJICAqIGdzdC9lbGVtZW50cy9nc3RmYWtlc2luay5jOiAoZ3N0X2Zha2Vfc2lua19zdGF0ZV9lcnJvcl9nZXRfdHlwZSk6CisJICAqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmM6IChnc3RfZmFrZV9zcmNfZGF0YV9nZXRfdHlwZSksCisJICAoZ3N0X2Zha2Vfc3JjX3NpemV0eXBlX2dldF90eXBlKSwgKGdzdF9mYWtlX3NyY19maWxsdHlwZV9nZXRfdHlwZSksCisJICAoZ3N0X2Zha2Vfc3JjX2luaXQpLCAoZ3N0X2Zha2Vfc3JjX3ByZXBhcmVfYnVmZmVyKSwKKwkgIChnc3RfZmFrZV9zcmNfYWxsb2NfYnVmZmVyKSwgKGdzdF9mYWtlX3NyY19nZXRfc2l6ZSk6CisJICAqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmg6CisJICAqIGdzdC9nc3RxdWV1ZS5jOiAocXVldWVfbGVha3lfZ2V0X3R5cGUpOgorCSAgY29ycmVjdGx5IGZpeCBHRW51bVZhbHVlcyBzbyB0aGF0IG5pY2sgaXMgdGhlIHNob3J0IGxvd2VyY2FzZQorCSAgZGFzaGVkIHRhZworCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAocHJpbnRfZWxlbWVudF9wcm9wZXJ0aWVzX2luZm8pOgorCSAgYWxzbyBzaG93IHRoZSBuaWNrLCBzaW5jZSBpdCdzIHVzZWZ1bCB0byB1c2UgZnJvbSBwYXJzZV9sYXVuY2gKKwkgIHN5bnRheAorCSAgRml4ZXMgIzMyMjEzOQorCisyMDA1LTExLTIyIDE1OjE1OjUzICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+CisKKwkgIEFkZCB1dGlsIG1ldGhvZCBmb3Igc2NhbGluZyBhIGNsb2NrdGltZSBieSBhIGZyYWN0aW9uLiBVc2VmdWwgaW1wbGVtZW50YXRpb24gaXMgbGVmdCBhcyBhbiBleGVyY2lzZSBmb3IgdGhlIHJlYWRlci4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF91dGlsX2Nsb2NrdGltZV9zY2FsZSk6CisJICAqIGdzdC9nc3R1dGlscy5oOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgQWRkIHV0aWwgbWV0aG9kIGZvciBzY2FsaW5nIGEgY2xvY2t0aW1lIGJ5IGEgZnJhY3Rpb24uIFVzZWZ1bAorCSAgaW1wbGVtZW50YXRpb24gaXMgbGVmdCBhcyBhbiBleGVyY2lzZSBmb3IgdGhlIHJlYWRlci4KKworMjAwNS0xMS0yMiAxNDoyOToxMCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGdzdC9nc3R2YWx1ZS5jOiBJZiBuZWVkZWQsIGFsbG9jYXRlIHN0b3JhZ2UgaW4gdGhlIGRlc3RpbmF0aW9uIHZhbHVlIGR1cmluZyBjb2xsZWN0aW9uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X3ZhbHVlX2NvbGxlY3RfZnJhY3Rpb25fcmFuZ2UpOgorCSAgSWYgbmVlZGVkLCBhbGxvY2F0ZSBzdG9yYWdlIGluIHRoZSBkZXN0aW5hdGlvbiB2YWx1ZSBkdXJpbmcKKwkgIGNvbGxlY3Rpb24uCisKKzIwMDUtMTEtMjIgMTM6NTg6MDAgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkgIFJlbW92ZWQgR3N0VVJJICwgY2xvc2VzIGJ1ZyAjMzIxMDYxCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L01ha2VmaWxlLmFtOgorCSAgKiBnc3QvZ3N0Lmg6CisJICAqIGdzdC9nc3R1cml0eXBlLmM6CisJICAqIGdzdC9nc3R1cml0eXBlLmg6CisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X3V0aWxfc2V0X29iamVjdF9hcmcpOgorCSAgKiB0b29scy9nc3QtY29tcHByZXAuYzogKG1haW4pOgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAocHJpbnRfZWxlbWVudF9wcm9wZXJ0aWVzX2luZm8pOgorCSAgUmVtb3ZlZCBHc3RVUkkgLCBjbG9zZXMgYnVnICMzMjEwNjEKKworMjAwNS0xMS0yMiAxMzoxNDo1MSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIE9vcHMsIGJyb2tlIGF1dG9tYXRpYyBzdHJpbmcgdHlwZSBwYXJzaW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOiAoZ3N0X3N0cnVjdHVyZV9wYXJzZV92YWx1ZSk6CisJICBPb3BzLCBicm9rZSBhdXRvbWF0aWMgc3RyaW5nIHR5cGUgcGFyc2luZy4KKwkgIEFkZCBhIHRlc3QgdG8gY2F0Y2ggaXQgaW4gZnV0dXJlLgorCisyMDA1LTExLTIyIDEzOjAyOjEyICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkqIENoYW5nZUxvZzoKKwkqIGdzdC9nc3R0YWdzZXR0ZXIuYzoKKwkgIGdzdC9nc3R0YWdzZXR0ZXIuYyAoZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19tZXJnZV9tb2RlKQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTExLTIyICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvZ3N0dGFnc2V0dGVyLmMgKGdzdF90YWdfc2V0dGVyX2dldF90YWdfbWVyZ2VfbW9kZSkKKwkgIChnc3RfdGFnX3NldHRlcl9zZXRfdGFnX21lcmdlX21vZGUsIGdzdF90YWdfc2V0dGVyX2dldF90YWdfbGlzdCk6CisJICBBY3R1YWxseSByZW5hbWUgdGhlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucy4gR3JyLgorCisyMDA1LTExLTIyIDEyOjUxOjE4ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkqIHNjcmlwdHMvdXBkYXRlLWZ1bmNuYW1lczoKKwkgIGZpeCBib3JrZWQgY29tbWl0CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGZpeCBib3JrZWQgY29tbWl0CisKKzIwMDUtMTEtMjIgMTI6MzU6NDIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBjaGVjay9nc3QvY2Fwc2xpc3QuaDogQ29tbWVudCB0ZXN0IGNhc2VzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svZ3N0L2NhcHNsaXN0Lmg6CisJICBDb21tZW50IHRlc3QgY2FzZXMKKwkgICogY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOiAoR1NUX1NUQVJUX1RFU1QpLAorCSAgKGdzdF9zdHJ1Y3R1cmVfc3VpdGUpOgorCSAgVGVzdCBhdXRvbWF0aWMgdmFsdWUgdHlwZSBkZXRlY3Rpb24gaW4gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZy4KKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOiAoZ3N0X3N0cnVjdHVyZV9wYXJzZV92YWx1ZSk6CisJICBBZGQgZnJhY3Rpb24gYXMgYSB0eXBlIHdlIHRyeSBhbmQgZ3Vlc3MgYXV0b21hdGljYWxseSBpbgorCSAgY2Fwcy9zdHJ1Y3R1cmUgc3RyaW5ncy4KKworMjAwNS0xMS0yMiAxMjozNTozNSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJKiBzY3JpcHRzL3VwZGF0ZS1mdW5jbmFtZXM6CisJICB1cGRhdGUgdXBkYXRlLWZ1bmNzIGZvciB0YWdzZXR0ZXIKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgdXBkYXRlIHVwZGF0ZS1mdW5jcyBmb3IgdGFnc2V0dGVyCisKKzIwMDUtMTEtMjIgMTI6MjA6MDQgKzAwMDAgIFRvcnN0ZW4gU2Nob2VuZmVsZCA8a2FmZmVldGlzY2hAZ214LmRlPgorCisJICBnc3QvZ3N0dGFnc2V0dGVyLio6IChnc3RfdGFnX3NldHRlcl9tZXJnZV90YWdzKSAoZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ3MsIGdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsdWVzKSAoZ3N0X3RhZ19zZXQuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0yMiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgIHBhdGNoIGJ5OiBUb3JzdGVuIFNjaG9lbmZlbGQgPGthZmZlZXRpc2NoIGdteCBkZT4KKwkgICogZ3N0L2dzdHRhZ3NldHRlci5oOgorCSAgKiBnc3QvZ3N0dGFnc2V0dGVyLmM6IChnc3RfdGFnX3NldHRlcl9tZXJnZV90YWdzKQorCSAgKGdzdF90YWdfc2V0dGVyX2FkZF90YWdzLCBnc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbHVlcykKKwkgIChnc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbGlzdCkKKwkgIChnc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbGlzdF92YWx1ZXMpOiBSZW5hbWVkIGZyb20gX21lcmdlLCBfYWRkLAorCSAgX2FkZF92YWx1ZXMsIF9hZGRfdmFsaXN0LCBhbmQgX2FkZF92YWxpc3RfdmFsdWVzLiBTaW5jZSB0aGlzIGlzIGFuCisJICBpbnRlcmZhY2UgdGhlIGZ1bmN0aW9uIHN1ZmZpeGVzIHNob3VsZCBiZSBtb3JlIGV4cGxpY2l0IHNvCisJICBsYW5ndWFnZSBiaW5kaW5nIGRvbid0IGVuZCB1cCB3aXRoIGVsZW1lbnQuYWRkX3ZhbGlzdCAtPgorCSAgZ3N0X3RhZ19zZXR0ZXJfYWRkX3ZhbGlzdCwgZm9yIGV4YW1wbGUuIEZpeGVzICMzMjIwNjkuCisKKzIwMDUtMTEtMjIgMTI6MTU6MTkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBjaGVjay9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSAgZG9uJ3QgdmFsZ3JpbmQgdGhlIHN0cmVzcyB0ZXN0LCB0YWtlcyB0b28gbG9uZworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBkb24ndCB2YWxncmluZCB0aGUgc3RyZXNzIHRlc3QsIHRha2VzIHRvbyBsb25nCisKKzIwMDUtMTEtMjIgMTE6NTY6MDEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBjaGVjay9nc3QvZ3N0Y2Fwcy5jOiBFeHRlbmQgY2FwcyBzdHJpbmcgdGVzdHMgdG8gY2hlY2sgdGhhdCBhIGNhcHMgdG8gc3RyaW5nIGNvbnZlcnNpb24gaXMgcmV2ZXJzaWJsZSBhbmQgcHJvZHVjZXMgdGguLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9nc3QvZ3N0Y2Fwcy5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgRXh0ZW5kIGNhcHMgc3RyaW5nIHRlc3RzIHRvIGNoZWNrIHRoYXQgYSBjYXBzIHRvIHN0cmluZworCSAgY29udmVyc2lvbiBpcyByZXZlcnNpYmxlIGFuZCBwcm9kdWNlcyB0aGUgc2FtZSBjYXBzLgorCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6IChnc3Rfc3RydWN0dXJlX3ZhbHVlX2dldF9nZW5lcmljX3R5cGUpOgorCSAgT3V0cHV0ICJmcmFjdGlvbiIgYXMgdGhlIGdlbmVyaWMgdHlwZSBmcmFjdGlvbiByYW5nZSwgc28gY2FwcworCSAgc2VyaWFsaXNhdGlvbiBhbmQgZGVzZXJpYWxpc2F0aW9uIHdvcmtzLgorCSAgKiBjaGVjay9nc3QvY2Fwc2xpc3QuaDoKKwkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfZGVzZXJpYWxpemVfZnJhY3Rpb24pOgorCSAgU3VwcG9ydCAnTUlOJyBhbmQgJ01BWCcgZm9yIGRlc2VyaWFsaXNpbmcgZnJhY3Rpb25zLgorCisyMDA1LTExLTIyIDExOjUwOjEyICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+CisKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkgIE1pbm9yIGRvYyBmaXguCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIE1pbm9yIGRvYyBmaXguCisKKzIwMDUtMTEtMjIgMTE6NDg6NTggKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdGV2ZW50LmggKGdzdF9ldmVudF9uZXdfbmV3X3NlZ21lbnQpIChnc3RfZXZlbnRfcGFyc2VfbmV3X3NlZ21lbnQsIGdzdF9ldmVudF9uZXdfYnVmZmVyX3NpemUpCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTEtMjIgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3RldmVudC5oIChnc3RfZXZlbnRfbmV3X25ld19zZWdtZW50KQorCSAgKGdzdF9ldmVudF9wYXJzZV9uZXdfc2VnbWVudCwgZ3N0X2V2ZW50X25ld19idWZmZXJfc2l6ZSkKKwkgIChnc3RfZXZlbnRfcGFyc2VfYnVmZmVyX3NpemUsIGdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldCk6CisJICBSZW5hbWVkIGZyb20gKl9uZXdzZWdtZW50LCAqX2J1ZmZlcnNpemUsICpfbm90YXJnZXQuCisJICAqIHNjcmlwdHMvdXBkYXRlLWZ1bmNuYW1lczogTmV3IHNjcmlwdCwgcGVyZm9ybXMgdGhlIGNoYW5nZXMKKwkgIGxpc3RlZCBhYm92ZS4KKworMjAwNS0xMS0yMiAxMToyNTowMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogTWFrZSBzdXJlIHRoZSBHc3RGbG93UmV0dXJuIGlzIHJldHVybmVkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2hhbmRsZV9vYmplY3QpOgorCSAgTWFrZSBzdXJlIHRoZSBHc3RGbG93UmV0dXJuIGlzIHJldHVybmVkLgorCSAgKiBnc3QvZ3N0YnVzLmM6IChnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2hfZnVsbCksCisJICAoZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoKToKKwkgICogZ3N0L2dzdGJ1cy5oOgorCSAgYWRkIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaF9mdWxsLgorCSAgKiBnc3QvZ3N0cGx1Z2luLmM6IChnc3RfcGx1Z2luX2xvYWRfZmlsZSk6CisJICBTbWFsbCBzdHlsZSBjbGVhbnVwLgorCisyMDA1LTExLTIyIDEwOjI0OjMxICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgY2hlY2svZ3N0L2dzdGV2ZW50LmM6IEJsb2NrIHRoZSBmYWtlc3JjIHNyY3BhZCB3aGVuIHdlIHNlbmQgYW4gZXZlbnQsIHRvIGF2b2lkIGNvbnRlbnRpb24gb24gdGhlIHN0cmVhbV9sb2NrIGNhdXNpbmcgLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svZ3N0L2dzdGV2ZW50LmM6ICh0ZXN0X2V2ZW50KSwgKEdTVF9TVEFSVF9URVNUKToKKwkgIEJsb2NrIHRoZSBmYWtlc3JjIHNyY3BhZCB3aGVuIHdlIHNlbmQgYW4gZXZlbnQsIHRvIGF2b2lkCisJICBjb250ZW50aW9uIG9uIHRoZSBzdHJlYW1fbG9jayBjYXVzaW5nIHJhbmRvbSB0ZXN0IGZhaWx1cmVzLgorCisyMDA1LTExLTIyIDA5OjQyOjE3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgRml4IHN1YnRyYWN0aW9uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dzdC9nc3R2YWx1ZS5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF92YWx1ZV9mcmFjdGlvbl9zdWJ0cmFjdCk6CisJICBGaXggc3VidHJhY3Rpb24uCisKKzIwMDUtMTEtMjIgMDk6MzU6MjUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdC5oOiBpbmNsdWRlICJnc3RjaGlsZHByb3h5LmgiCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdC5oOgorCSAgaW5jbHVkZSAiZ3N0Y2hpbGRwcm94eS5oIgorCSAgKiBnc3QvZ3N0Y2hpbGRwcm94eS5oOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuaDoKKwkgIHVzZSBHX0dOVUNfTlVMTF9URVJNSU5BVEVECisKKzIwMDUtMTEtMjEgMjM6NTQ6NTkgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBJbXBsZW1lbnQgZnJhY3Rpb24gcmFuZ2VzIGFuZCBleHRlbmQgR3N0RnJhY3Rpb24gdG8gc3VwcG9ydCBhcml0aG1ldGljIHN1YnRyYWN0aW9uLCBhcyB3ZWxsIGFzIGRlc2VyaWFsaXphdGlvbiBmcm9tIGkuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9nc3QvY2Fwc2xpc3QuaDoKKwkgICogY2hlY2svZ3N0L2dzdGNhcHMuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgICogY2hlY2svZ3N0L2dzdHZhbHVlLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RfdmFsdWVfc3VpdGUpOgorCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6IChnc3Rfc3RydWN0dXJlX3BhcnNlX3JhbmdlKSwKKwkgIChnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ZyYWN0aW9uKToKKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5oOgorCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF92YWx1ZV9pbml0X2ZyYWN0aW9uX3JhbmdlKSwKKwkgIChnc3RfdmFsdWVfZnJlZV9mcmFjdGlvbl9yYW5nZSksIChnc3RfdmFsdWVfY29weV9mcmFjdGlvbl9yYW5nZSksCisJICAoZ3N0X3ZhbHVlX2NvbGxlY3RfZnJhY3Rpb25fcmFuZ2UpLAorCSAgKGdzdF92YWx1ZV9sY29weV9mcmFjdGlvbl9yYW5nZSksIChnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlKSwKKwkgIChnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlX2Z1bGwpLAorCSAgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWluKSwKKwkgIChnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21heCksCisJICAoZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9mcmFjdGlvbl9yYW5nZSksCisJICAoZ3N0X3ZhbHVlX3RyYW5zZm9ybV9mcmFjdGlvbl9yYW5nZV9zdHJpbmcpLAorCSAgKGdzdF92YWx1ZV9jb21wYXJlX2ZyYWN0aW9uX3JhbmdlKSwKKwkgIChnc3RfdmFsdWVfZGVzZXJpYWxpemVfZnJhY3Rpb25fcmFuZ2UpLAorCSAgKGdzdF92YWx1ZV9pbnRlcnNlY3RfZnJhY3Rpb25fZnJhY3Rpb25fcmFuZ2UpLAorCSAgKGdzdF92YWx1ZV9pbnRlcnNlY3RfZnJhY3Rpb25fcmFuZ2VfZnJhY3Rpb25fcmFuZ2UpLAorCSAgKGdzdF92YWx1ZV9zdWJ0cmFjdF9mcmFjdGlvbl9mcmFjdGlvbl9yYW5nZSksCisJICAoZ3N0X3ZhbHVlX3N1YnRyYWN0X2ZyYWN0aW9uX3JhbmdlX2ZyYWN0aW9uKSwKKwkgIChnc3RfdmFsdWVfc3VidHJhY3RfZnJhY3Rpb25fcmFuZ2VfZnJhY3Rpb25fcmFuZ2UpLAorCSAgKGdzdF92YWx1ZV9jb2xsZWN0X2ZyYWN0aW9uKSwgKGdzdF92YWx1ZV9mcmFjdGlvbl9tdWx0aXBseSksCisJICAoZ3N0X3ZhbHVlX2ZyYWN0aW9uX3N1YnRyYWN0KSwgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9mcmFjdGlvbiksCisJICAoZ3N0X3ZhbHVlX3RyYW5zZm9ybV9zdHJpbmdfZnJhY3Rpb24pLCAoX2dzdF92YWx1ZV9pbml0aWFsaXplKToKKwkgICogZ3N0L2dzdHZhbHVlLmg6CisJICBJbXBsZW1lbnQgZnJhY3Rpb24gcmFuZ2VzIGFuZCBleHRlbmQgR3N0RnJhY3Rpb24gdG8gc3VwcG9ydAorCSAgYXJpdGhtZXRpYyBzdWJ0cmFjdGlvbiwgYXMgd2VsbCBhcyBkZXNlcmlhbGl6YXRpb24gZnJvbSBpbnRlZ2VyCisJICBzdHJpbmdzIHN1Y2ggYXMgIjEwMCIKKwkgIEFkZCBhIHRlc3RzdWl0ZSBhcyBmb3IgaW50IGFuZCBkb3VibGUgcmFuZ2Ugc2V0IG9wZXJhdGlvbnMKKworMjAwNS0xMS0yMSAxOTo1ODoyMyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvOiBBZGQgZ2xpYi1jb21wYXQuaC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0yMSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdHRhZ2xpc3QuaDoKKwkgICogZ3N0L2dzdGNhcHMuaDoKKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5oOiBBZGQgZ2xpYi1jb21wYXQuaC4KKworMjAwNS0xMS0yMSAxOToxMzoxMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJpbi5jOiBGaXggZm9yICMzMjE1OTUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2NoYW5nZV9zdGF0ZV9mdW5jKToKKwkgIEZpeCBmb3IgIzMyMTU5NQorCisyMDA1LTExLTIxIDE5OjAwOjI4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0c2VnbWVudC5oOiBBbmQgYWRkIGEgbmljZSBkZWZpbmUgdG9vLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RzZWdtZW50Lmg6CisJICBBbmQgYWRkIGEgbmljZSBkZWZpbmUgdG9vLgorCisyMDA1LTExLTIxIDE4OjUzOjA2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0c2VnbWVudC4qOiBNYWtlIGJpbmRpbmcgZnJpZW5kbHkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHNlZ21lbnQuYzogKGdzdF9zZWdtZW50X2NvcHkpLCAoZ3N0X3NlZ21lbnRfZ2V0X3R5cGUpLAorCSAgKGdzdF9zZWdtZW50X25ldyksIChnc3Rfc2VnbWVudF9mcmVlKSwgKGdzdF9zZWdtZW50X2luaXQpLAorCSAgKGdzdF9zZWdtZW50X3NldF9kdXJhdGlvbiksIChnc3Rfc2VnbWVudF9zZXRfbGFzdF9zdG9wKSwKKwkgIChnc3Rfc2VnbWVudF9zZXRfc2VlayksIChnc3Rfc2VnbWVudF9zZXRfbmV3c2VnbWVudCksCisJICAoZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUpLCAoZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lKSwKKwkgIChnc3Rfc2VnbWVudF9jbGlwKToKKwkgICogZ3N0L2dzdHNlZ21lbnQuaDoKKwkgIE1ha2UgYmluZGluZyBmcmllbmRseS4KKworMjAwNS0xMS0yMSAxODo0MTozOSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvOiBTcHJpbmtsZSBOVUxMX1RFUk1JTkFURUQgdG8gdGFzdGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTEtMjEgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3R0YWdzZXR0ZXIuaDoKKwkgICogZ3N0L2dzdHRhZ2xpc3QuaDoKKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5oOgorCSAgKiBnc3QvZ3N0Y2Fwcy5oOgorCSAgKiBnc3QvZ3N0dXRpbHMuaDogU3ByaW5rbGUgTlVMTF9URVJNSU5BVEVEIHRvIHRhc3RlLgorCisyMDA1LTExLTIxIDE4OjI3OjI2ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGdzdC9nc3RlcnJvci4qOiBOZXcgZXJyb3IgY2F0ZWdvcnkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTEtMjEgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3RlcnJvci5jIChfZ3N0X2NvcmVfZXJyb3JzX2luaXQpOgorCSAgKiBnc3QvZ3N0ZXJyb3IuaCAoR1NUX0NPUkVfRVJST1JfTUlTU0lOR19QTFVHSU4pOiBOZXcgZXJyb3IKKwkgIGNhdGVnb3J5LgorCisyMDA1LTExLTIxIDE4OjE2OjAwICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGdzdC9NYWtlZmlsZS5hbSAoZ3N0X2hlYWRlcnMpOiBBZGQgZ2xpYi1jb21wYXQuaC4gbm9pbnN0IHRoZSAtcHJpdmF0ZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0yMSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L01ha2VmaWxlLmFtIChnc3RfaGVhZGVycyk6IEFkZCBnbGliLWNvbXBhdC5oLgorCSAgKG5vaW5zdF9IRUFERVJTKTogbm9pbnN0IHRoZSAtcHJpdmF0ZS4KKworMjAwNS0xMS0yMSAxODoxMDoxMyArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgorCisJICBnc3QvOiBSZW1vdmUgdW5pbXBsZW1lbnRlZCBkZWNsYXJhdGlvbnMgZm9yIHdoaWNoIHdlIGNhbiBzZWUgbm8gc2Vuc2libGUgdXNlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwbHVnaW4uaDoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5Lmg6CisJICBSZW1vdmUgdW5pbXBsZW1lbnRlZCBkZWNsYXJhdGlvbnMgZm9yIHdoaWNoIHdlIGNhbiBzZWUgbm8gc2Vuc2libGUKKwkgIHVzZS4KKworMjAwNS0xMS0yMSAxODowMzoyMiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0Lmg6IEluY2x1ZGUgZ2xpYi1jb21wYXQuaC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0yMSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdC5oOiBJbmNsdWRlIGdsaWItY29tcGF0LmguCisJICAqIGdzdC9nbGliLWNvbXBhdC5oOiBBZGQgR19HTlVDX05VTExfVEVSTUlOQVRFRC4KKwkgICogZ3N0L2dsaWItY29tcGF0LmM6IEluY2x1ZGUgdGhlIHB1YmxpYyBhbmQgdGhlIHByaXZhdGUgaGVhZGVyLgorCSAgKiBnc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oOiBDb3BpZWQgaGVyZSBmcm9tIGdsaWItY29tcGF0LmguCisJICAqIGdzdC9nc3R2YWx1ZS5jOgorCSAgKiBnc3QvZ3N0cGFkLmM6CisJICAqIGdzdC9nc3RyZWdpc3RyeXhtbC5jOiBzL2dsaWItY29tcGF0L2dsaWItY29tcGF0LXByaXZhdGUvLgorCisyMDA1LTExLTIxIDE3OjIxOjE1ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGNoZWNrL2dzdC9nc3RldmVudC5jIChjcmVhdGVfY3VzdG9tX2V2ZW50cyk6IENoZWNrIHRoYXQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0yMSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogY2hlY2svZ3N0L2dzdGV2ZW50LmMgKGNyZWF0ZV9jdXN0b21fZXZlbnRzKTogQ2hlY2sgdGhhdAorCSAgRkxVU0hfU1RPUCBpcyBzZXJpYWxpemVkLgorCSAgKiBjaGVjay9lbGVtZW50cy9pZGVudGl0eS5jIChldmVudF9mdW5jKToKKwkgICogY2hlY2svZWxlbWVudHMvZmFrZXNyYy5jIChldmVudF9mdW5jKTogTm8gc3RyZWFtIGxvY2ssIHRoZSBjb3JlCisJICB0YWtlcyBpdC4KKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jIChnc3RfYmFzZV90cmFuc2Zvcm1fZXZlbnQpOiBObyBtb3JlCisJICBzdHJlYW0gbG9jayB0YWtpbmcsIHlheS4KKwkgICogZ3N0L2dzdGV2ZW50LmggKEdTVF9FVkVOVF9GTFVTSF9TVE9QKTogTWFya2VkIGFzIHNlcmlhbGl6ZWQgdG8KKwkgIGVuc3VyZSB0aGF0IGNvcmUgdGFrZXMgdGhlIHN0cmVhbSBsb2NrLgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmMgKGdzdF9iYXNlX3NyY19kb19zZWVrKTogVXBkYXRlIGZvciBzdHJlYW0KKwkgIGxvY2sgbmFtZSBjaGFuZ2UuCisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmMgKGdzdF9iYXNlX3NpbmtfZXZlbnQpOiBObyBuZWVkIHRvIHRha2UKKwkgIHRoZSBzdHJlYW0gbG9jayBmb3IgRU9TLCBORVdTRUdNRU5ULCBvciBGTFVTSF9TVE9QLCB0aGUgY29yZSBkb2VzCisJICBpdCBhbHJlYWR5LiBGb3IgdGhlIGZsdXNoIHN0YXJ0IHdlIGRvIHRha2UgaXQgdGhvdWdoIHNvIHdlIGdldCB0aGUKKwkgIHJpZ2h0IHByZXJvbGwgc3RhdGUgY2hhbmdlIG1lc3NhZ2VzLgorCSAgKiBnc3QvZ3N0cXVldWUuYyAoZ3N0X3F1ZXVlX3NpbmtfYWN0aXZhdGVfcHVzaCk6IE5vIG5lZWQgdG8gdGFrZQorCSAgdGhlIHN0cmVhbSBsb2NrIGhlcmUsIHRoZSBjb3JlIGRvZXMgaXQgZm9yIHVzLgorCSAgKiBnc3QvZ3N0cGFkLmggKEdTVF9QQURfR0VUX1NUUkVBTV9MT0NLKTogUmVuYW1lZCBmcm9tCisJICBHU1RfU1RSRUFNX0dFVF9MT0NLLgorCSAgKEdTVF9QQURfU1RSRUFNX0xPQ0ssIEdTVF9QQURfU1RSRUFNX1RSWUxPQ0spCisJICAoR1NUX1BBRF9TVFJFQU1fVU5MT0NLLCBHU1RfUEFEX1NUUkVBTV9VTkxPQ0tfRlVMTCkKKwkgIChHU1RfUEFEX1NUUkVBTV9MT0NLX0ZVTEwpOiBSZW5hbWVkIGZyb20gR1NUX1NUUkVBTV8qLgorCSAgKEdTVF9QQURfR0VUX1BSRVJPTExfTE9DSyk6IFJlbmFtZWQgZnJvbSBHU1RfUFJFUk9MTF9HRVRfTE9DSy4KKwkgIChHU1RfUEFEX1BSRVJPTExfTE9DSywgR1NUX1BBRF9QUkVST0xMX1RSWUxPQ0spCisJICAoR1NUX1BBRF9QUkVST0xMX1VOTE9DSyk6IFJlbmFtZWQgZnJvbSBHU1RfUFJFUk9MTF8qLgorCSAgKiBnc3QvZ3N0cGFkLmM6IFVwZGF0ZSBmb3Igc3RyZWFtIGxvY2sgbmFtZSBjaGFuZ2UuCisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFVwZGF0ZSBmb3IgcHJlcm9sbCBsb2NrIG5hbWUgY2hhbmdlLgorCisyMDA1LTExLTIxIDE3OjEyOjUwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvOiBDb252ZXJ0IENsb2NrIGZsYWdzIHRvIG9iamVjdCBmbGFncy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0Y2xvY2suYzogKGdzdF9jbG9ja19pbml0KSwgKGdzdF9jbG9ja19zZXRfbWFzdGVyKSwKKwkgIChnc3RfY2xvY2tfZ2V0X21hc3Rlcik6CisJICAqIGdzdC9nc3RjbG9jay5oOgorCSAgKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzogKGdzdF9zeXN0ZW1fY2xvY2tfaW5pdCk6CisJICBDb252ZXJ0IENsb2NrIGZsYWdzIHRvIG9iamVjdCBmbGFncy4KKwkgIEFkZGVkIG1ldGhvZHMgdG8gbWFuYWdlIG1hc3Rlci9zbGF2ZSBjbG9ja3MuCisKKzIwMDUtMTEtMjEgMTc6MDk6NDUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIE1vcmUgc2VnbWVudCB1cGRhdGVzLCByZXBsYWNlIGNvZGUgaW4gcGx1Z2lucyB3aXRoIHNlZ21lbnQgaGVscGVyIGZ1bmN0aW9ucy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9nc3QvZ3N0c2VnbWVudC5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwKKwkgIChnc3RfYmFzZV9zaW5rX2V2ZW50KSwgKGdzdF9iYXNlX3NpbmtfZG9fc3luYyksCisJICAoZ3N0X2Jhc2Vfc2lua19hY3RpdmF0ZV9wdWxsKSwgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uKSwKKwkgIChnc3RfYmFzZV9zaW5rX3F1ZXJ5KSwgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2luaXQpLCAoZ3N0X2Jhc2Vfc3JjX3F1ZXJ5KSwKKwkgIChnc3RfYmFzZV9zcmNfZGVmYXVsdF9uZXdzZWdtZW50KSwKKwkgIChnc3RfYmFzZV9zcmNfY29uZmlndXJlX3NlZ21lbnQpLCAoZ3N0X2Jhc2Vfc3JjX2RvX3NlZWspLAorCSAgKGdzdF9iYXNlX3NyY19nZXRfcmFuZ2UpLCAoZ3N0X2Jhc2Vfc3JjX2xvb3ApLAorCSAgKGdzdF9iYXNlX3NyY19jaGFuZ2Vfc3RhdGUpOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fcHJlcGFyZV9vdXRwdXRfYnVmKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fZXZlbnQpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NoYW5nZV9zdGF0ZSk6CisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKKwkgICogZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZCksCisJICAoZ3N0X2NvbGxlY3RfcGFkc19ldmVudCk6CisJICAqIGdzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg6CisJICAqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmM6IChnc3RfZmFrZV9zcmNfaW5pdCksCisJICAoZ3N0X2Zha2Vfc3JjX2NyZWF0ZSk6CisJICAqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmg6CisJICAqIGdzdC9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiAoZ3N0X2lkZW50aXR5X3RyYW5zZm9ybV9pcCk6CisJICAqIGdzdC9nc3RzZWdtZW50LmM6IChnc3Rfc2VnbWVudF9pbml0KSwgKGdzdF9zZWdtZW50X3NldF9kdXJhdGlvbiksCisJICAoZ3N0X3NlZ21lbnRfc2V0X2xhc3Rfc3RvcCksIChnc3Rfc2VnbWVudF9zZXRfc2VlayksCisJICAoZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnQpLCAoZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUpLAorCSAgKGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSksIChnc3Rfc2VnbWVudF9jbGlwKToKKwkgICogZ3N0L2dzdHNlZ21lbnQuaDoKKwkgIE1vcmUgc2VnbWVudCB1cGRhdGVzLCByZXBsYWNlIGNvZGUgaW4gcGx1Z2lucyB3aXRoIHNlZ21lbnQKKwkgIGhlbHBlciBmdW5jdGlvbnMuCisKKzIwMDUtMTEtMjEgMTY6NDY6MDcgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBnc3QvZWxlbWVudHMvZ3N0ZmRzcmMuYzogRG9uJ3QgaWdub3JlIHNzY2FuZiByZXN1bHRzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGZkc3JjLmM6IChnc3RfZmRzcmNfdXJpX3NldF91cmkpOgorCSAgRG9uJ3QgaWdub3JlIHNzY2FuZiByZXN1bHRzCisKKzIwMDUtMTEtMjEgMTY6NDE6MTYgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdHBhZC5oIChHU1RfSVNfUEFEX0ZBU1QpOiBSZW1vdmVkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTExLTIxICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvZ3N0cGFkLmggKEdTVF9JU19QQURfRkFTVCk6IFJlbW92ZWQuCisKKzIwMDUtMTEtMjEgMTY6MzQ6MjYgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgKi4qOiBSYW4gc2NyaXB0cy91cGRhdGUtbWFjcm9zLiBPaCB5ZXMuIGdzdC9nc3RvYmplY3QuaCAoR1NUX09CSkVDVF9HRVRfTE9DSywgR1NUX09CSkVDVF9MT0NLKQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTExLTIxICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiAqLmg6CisJICAqICouYzogUmFuIHNjcmlwdHMvdXBkYXRlLW1hY3Jvcy4gT2ggeWVzLgorCSAgKiBnc3QvZ3N0b2JqZWN0LmggKEdTVF9PQkpFQ1RfR0VUX0xPQ0ssIEdTVF9PQkpFQ1RfTE9DSykKKwkgIChHU1RfT0JKRUNUX1RSWUxPQ0ssIEdTVF9PQkpFQ1RfVU5MT0NLKTogUmVuYW1lZCBmcm9tCisJICBHU1RfR0VUX0xPQ0ssIGV0Yy4KKwkgICogc2NyaXB0cy91cGRhdGUtbWFjcm9zOiBOZXcgc2NyaXB0LiBSdW4gaXQgb24geW91ciBmaWxlcyB0bworCSAgY2hhbmdlIEdTVF9MT0NLIHRvIEdTVF9PQkpFQ1RfTE9DSywgYW5kIHRoZSBzYW1lIGZvciBVTkxPQ0sgYXMKKwkgIHdlbGwuCisKKzIwMDUtMTEtMjEgMTU6NDc6MDkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgbW9yZSBkb2NzIGZpeGVzLCBhZGQgbmV3IGFwaSB0byB0aGUgZG9jcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXM6CisJICAqIGdzdC9nc3RpbmZvLmg6CisJICBtb3JlIGRvY3MgZml4ZXMsIGFkZCBuZXcgYXBpIHRvIHRoZSBkb2NzCisKKzIwMDUtMTEtMjEgMTU6MDE6NDggKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdGJpbi5jIChnc3RfYmluX3JlbW92ZV9mdW5jKTogV2ltIGNsYWltcyBJIGNhbiByZW1vdmUgdGhpcyBzdGF0ZV9icm9hZGNhc3QgY2FsbC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0yMSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdGJpbi5jIChnc3RfYmluX3JlbW92ZV9mdW5jKTogV2ltIGNsYWltcyBJIGNhbiByZW1vdmUgdGhpcworCSAgc3RhdGVfYnJvYWRjYXN0IGNhbGwuCisKKzIwMDUtMTEtMjEgMTQ6NTM6MzQgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdHNlZ21lbnQuYyAoZ3N0X3NlZ21lbnRfaW5pdCk6IEluaXRpYWxpemUgYWJzX3JhdGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTEtMjEgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3RzZWdtZW50LmMgKGdzdF9zZWdtZW50X2luaXQpOiBJbml0aWFsaXplIGFic19yYXRlLgorCisyMDA1LTExLTIxIDE0OjUyOjU2ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KKworCSAgZ3N0L2dzdHZhbHVlLmM6IEZpeCB3cm9uZyBmdW5jdGlvbiBjYWxscyBmb3IgYXJyYXlzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTExLTIxICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+CisJICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X3ZhbHVlX2ludGVyc2VjdF9hcnJheSk6IEZpeCB3cm9uZworCSAgZnVuY3Rpb24gY2FsbHMgZm9yIGFycmF5cy4KKworMjAwNS0xMS0yMSAxNDo1MDoyMiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBkb2NzL3JhbmRvbS9lbnNvbmljL21lZGlhLWRldmljZS1kYWVtb24udHh0OiB3aWxkIGlkZWEsIGNhbiB0aGlzIGJlIGRvbmU/CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9yYW5kb20vZW5zb25pYy9tZWRpYS1kZXZpY2UtZGFlbW9uLnR4dDoKKwkgIHdpbGQgaWRlYSwgY2FuIHRoaXMgYmUgZG9uZT8KKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdGVycm9yLmg6CisJICAqIGdzdC9nc3RmaWx0ZXIuYzoKKwkgICogZ3N0L2dzdGZpbHRlci5oOgorCSAgKiBnc3QvZ3N0cGx1Z2luLmg6CisJICAqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6CisJICAqIGdzdC9nc3R0cmFjZS5jOgorCSAgKiBnc3QvZ3N0dmFsdWUuYzoKKwkgICogZ3N0L2dzdHZhbHVlLmg6CisJICBkb2MgZml4ZXMgYW5kIGFkZGl0aW9ucworCisyMDA1LTExLTIxIDE0OjQxOjI2ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkqIENoYW5nZUxvZzoKKwkqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkqIGdzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJICBnc3QvYmFzZS9nc3RiYXNlc3JjLmMgKEdTVF9MSVZFX0JST0FEQ0FTVCwgR1NUX0xJVkVfU0lHTkFMKSAoR1NUX0xJVkVfVElNRURfV0FJVCwgR1NUX0xJVkVfV0FJVCwgR1NUX0xJVkVfR0VUX0NPTkQpICguLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0yMSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jIChHU1RfTElWRV9CUk9BRENBU1QsIEdTVF9MSVZFX1NJR05BTCkKKwkgIChHU1RfTElWRV9USU1FRF9XQUlULCBHU1RfTElWRV9XQUlULCBHU1RfTElWRV9HRVRfQ09ORCkKKwkgIChHU1RfTElWRV9VTkxPQ0ssIEdTVF9MSVZFX1RSWUxPQ0ssIEdTVF9MSVZFX0xPQ0spCisJICAoR1NUX0xJVkVfR0VUX0xPQ0spOiBNb3ZlZCBoZXJlIGZyb20gZ3N0YmFzZXNyYy5oLiBUaGV5IGFyZQorCSAgcHJpdmF0ZSB0byB0aGUgYmFzZXNyYyBpbXBsZW1lbnRhdGlvbi4KKworMjAwNS0xMS0yMSAxNDozNDowNyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0cGFkLmMgKGdzdF9wYWRfc2VuZF9ldmVudCk6IERvYyBtb3JlLiBUYWtlIHN0cmVhbSBsb2NrIG9uIGJlaGFsZiBvZiBldmVudCBmdW5jdGlvbiBpZiBuZWNlc3NhcnkuIEl0IHNob3VsZCBubyAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0yMSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdHBhZC5jIChnc3RfcGFkX3NlbmRfZXZlbnQpOiBEb2MgbW9yZS4gVGFrZSBzdHJlYW0gbG9jayBvbgorCSAgYmVoYWxmIG9mIGV2ZW50IGZ1bmN0aW9uIGlmIG5lY2Vzc2FyeS4gSXQgc2hvdWxkIG5vIGxvbmdlciBiZQorCSAgbmVjZXNzYXJ5IHRvIHRha2UgdGhlIHN0cmVhbSBsb2NrIGluIHBhZCdzIGV2ZW50IGZ1bmN0aW9ucy4gRml4ZXMKKwkgICMzMjAyOTkuCisKKzIwMDUtMTEtMjEgMTQ6Mjg6MjEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBSZW5hbWUgZ3N0X2NhcHNfc3RydWN0dXJlX2ZpeGF0ZV8qIHRvIGdzdF9zdHJ1Y3R1cmVfZml4YXRlXyogKCMzMjIwMjcpCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOiAoZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9pbnQpLAorCSAgKGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfZG91YmxlKSwKKwkgIChnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9ib29sZWFuKToKKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5oOgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgICogd2luMzIvZ3N0cmVhbWVyLmRlZjoKKwkgIFJlbmFtZSBnc3RfY2Fwc19zdHJ1Y3R1cmVfZml4YXRlXyogdG8gZ3N0X3N0cnVjdHVyZV9maXhhdGVfKgorCSAgKCMzMjIwMjcpCisKKzIwMDUtMTEtMjEgMTQ6MjU6MjEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBnc3QvZWxlbWVudHMvZ3N0ZmRzcmMuKjogUG9ydCBmZDovLyBVUkkgaGFuZGxlciBmcm9tIDAuOCB0byBmZHNyYworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9lbGVtZW50cy9nc3RmZHNyYy5jOiAoX2RvX2luaXQpLCAoZ3N0X2Zkc3JjX2NsYXNzX2luaXQpLAorCSAgKGdzdF9mZHNyY19pbml0KSwgKGdzdF9mZHNyY19kaXNwb3NlKSwgKGdzdF9mZHNyY19zZXRfcHJvcGVydHkpLAorCSAgKGdzdF9mZHNyY191cmlfZ2V0X3R5cGUpLCAoZ3N0X2Zkc3JjX3VyaV9nZXRfcHJvdG9jb2xzKSwKKwkgIChnc3RfZmRzcmNfdXJpX2dldF91cmkpLCAoZ3N0X2Zkc3JjX3VyaV9zZXRfdXJpKSwKKwkgIChnc3RfZmRzcmNfdXJpX2hhbmRsZXJfaW5pdCk6CisJICAqIGdzdC9lbGVtZW50cy9nc3RmZHNyYy5oOgorCSAgUG9ydCBmZDovLyBVUkkgaGFuZGxlciBmcm9tIDAuOCB0byBmZHNyYworCisyMDA1LTExLTIxIDEzOjI2OjUxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBNb3JlIHNlZ21lbnQgdXBkYXRlcyBhbmQgbW9yZSBjaGVja3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svZ3N0L2dzdHNlZ21lbnQuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdHNlZ21lbnRzX3N1aXRlKSwKKwkgIChtYWluKToKKwkgICogZ3N0L2dzdHNlZ21lbnQuYzogKGdzdF9zZWdtZW50X2luaXQpLCAoZ3N0X3NlZ21lbnRfc2V0X2R1cmF0aW9uKSwKKwkgIChnc3Rfc2VnbWVudF9zZXRfbGFzdF9zdG9wKSwgKGdzdF9zZWdtZW50X3NldF9zZWVrKSwKKwkgIChnc3Rfc2VnbWVudF9zZXRfbmV3c2VnbWVudCksIChnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSksCisJICAoZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lKSwgKGdzdF9zZWdtZW50X2NsaXApOgorCSAgKiBnc3QvZ3N0c2VnbWVudC5oOgorCSAgTW9yZSBzZWdtZW50IHVwZGF0ZXMgYW5kIG1vcmUgY2hlY2tzLgorCisyMDA1LTExLTIxIDEzOjI2OjQwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0dmFsdWUuKjogRHJvcCBsZWFkaW5nICclJyBmcm9tIEdTVF9GT1VSQ0NfRk9STUFULCB0aHVzIG1ha2luZyBpdCBjb25zaXN0ZW50IHdpdGggb3VyIG90aGVyIGZvcm1hdCBkZWZpbmVzICgjMzIuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF92YWx1ZV90cmFuc2Zvcm1fZm91cmNjX3N0cmluZyksCisJICAoZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9mb3VyY2MpOgorCSAgKiBnc3QvZ3N0dmFsdWUuaDoKKwkgIERyb3AgbGVhZGluZyAnJScgZnJvbSBHU1RfRk9VUkNDX0ZPUk1BVCwgdGh1cyBtYWtpbmcgaXQKKwkgIGNvbnNpc3RlbnQgd2l0aCBvdXIgb3RoZXIgZm9ybWF0IGRlZmluZXMgKCMzMjAzMjQpLgorCisyMDA1LTExLTIxIDEzOjEyOjE4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0dmFsdWUuYzogUmV2ZXJ0IHByZXZpb3VzIGNvbW1pdC4gVmFsdWUgbGlzdHMgYXJlIGJ5IGRlZmluaXRpb24gbm90IGZpeGVkLCBhcyB0aGV5IGFyZSBhIGxpc3Qgb2YgcG9zc2libGUgdmFsdWVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X3ZhbHVlX2lzX2ZpeGVkKToKKwkgIFJldmVydCBwcmV2aW91cyBjb21taXQuIFZhbHVlIGxpc3RzIGFyZSBieSBkZWZpbml0aW9uCisJICBub3QgZml4ZWQsIGFzIHRoZXkgYXJlIGEgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMuCisKKzIwMDUtMTEtMjEgMTM6MDM6MzYgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdGV2ZW50LmggKEdTVF9FVkVOVF9GSUxMRVIpOiBSZW1vdmVkLiBDYW4gYmUgYWRkZWQgYmFjayBkdXJpbmcgdGhlIHN0YWJsZSBzZXJpZXMgaWYgd2UgbmVlZCBpdC4gRml4ZXMgIzMxOTE3OC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0yMSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdGV2ZW50LmggKEdTVF9FVkVOVF9GSUxMRVIpOiBSZW1vdmVkLiBDYW4gYmUgYWRkZWQgYmFjaworCSAgZHVyaW5nIHRoZSBzdGFibGUgc2VyaWVzIGlmIHdlIG5lZWQgaXQuIEZpeGVzICMzMTkxNzguCisJICAqIGdzdC9nc3RldmVudC5jIChnc3RfZXZlbnRfbmV3X2ZpbGxlcik6IFJlbW92ZWQuCisJICAqIGNoZWNrL2dzdC9nc3RldmVudC5jOiBVcGRhdGUgY29tbWVudCBhYm91dCBmaWxsZXIgZXZlbnRzLgorCisyMDA1LTExLTIxIDEyOjQyOjQxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0dmFsdWUuYzogU2hvdWxkIGhhbmRsZSBib3RoIHZhbHVlIGFycmF5cyBhbmQgdmFsdWUgbGlzdHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfaXNfZml4ZWQpOgorCSAgU2hvdWxkIGhhbmRsZSBib3RoIHZhbHVlIGFycmF5cyBhbmQgdmFsdWUgbGlzdHMuCisKKzIwMDUtMTEtMjEgMTI6Mjc6MDEgKzAwMDAgIEFsZXNzYW5kcm8gRGVzc2luYSA8YWxlc3NhbmRyb0BubnZhLm9yZz4KKworCSAgZ3N0L2dzdHZhbHVlLmMgKGdzdF92YWx1ZV9pc19maXhlZCk6IFVzZSBnc3RfdmFsdWVfYXJyYXkgZnVuY3Rpb25zIHRvIGFjY2VzcyBhcnJheXMuIEZpeGVzICMzMjE5NjIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTEtMjEgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICBwYXRjaCBieTogQWxlc3NhbmRybyBEZXNzaW5hIDxhbGVzc2FuZHJvIG5udmEgb3JnPgorCSAgKiBnc3QvZ3N0dmFsdWUuYyAoZ3N0X3ZhbHVlX2lzX2ZpeGVkKTogVXNlIGdzdF92YWx1ZV9hcnJheQorCSAgZnVuY3Rpb25zIHRvIGFjY2VzcyBhcnJheXMuIEZpeGVzICMzMjE5NjIuCisKKzIwMDUtMTEtMjEgMTE6MjY6MDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlczogZ3N0X2NvbGxlY3RwYWRzX2dldF90eXBlID0+IGdzdF9jb2xsZWN0X3BhZHNfZ2V0X3R5cGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzOgorCSAgZ3N0X2NvbGxlY3RwYWRzX2dldF90eXBlID0+IGdzdF9jb2xsZWN0X3BhZHNfZ2V0X3R5cGUuCisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIFJlbW92ZSB1bnVzZWQgU0lHTkFMX0hBTkRPRkYgZW51bS4KKworMjAwNS0xMS0yMSAxMTowNjo0MiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0ZXZlbnQuaCAoR3N0RXZlbnRUeXBlRmxhZ3MpOiBOZXcgZGF0YSB0eXBlLCB0aGUgZmxhZ3Mgb2YgdGhlIGV2ZW50IHR5cGUgKHVwc3RyZWFtLCBkb3duc3RyZWFtLCBzZXJpYWxpemVkKS4gUmUuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0yMSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdGV2ZW50LmggKEdzdEV2ZW50VHlwZUZsYWdzKTogTmV3IGRhdGEgdHlwZSwgdGhlIGZsYWdzIG9mCisJICB0aGUgZXZlbnQgdHlwZSAodXBzdHJlYW0sIGRvd25zdHJlYW0sIHNlcmlhbGl6ZWQpLiBSZW5hbWVkCisJICBHU1RfRVZESVJfKiBhbmQgR1NUX0VWU0VSIHRvIEdTVF9FVkVOVF9UWVBFXyouCisJICAoR3N0RXZlbnRUeXBlKTogVXNlIEdzdEV2ZW50VHlwZUZsYWdzLiBSZW5hbWUgQ1VTVE9NX1VQIHRvCisJICBDVVNUT01fVVBTVFJFQU0sIENVU1RPTV9EUyB0byBDVVNUT01fRE9XTlNUUkVBTSwgZXRjLgorCSAgKiBnc3QvZ3N0ZXZlbnQuYzogVXBkYXRlIGZvciBuZXcgQ1VTVE9NIGV2ZW50IG5hbWVzLgorCSAgKiBjaGVjay9nc3QvZ3N0ZXZlbnQuYzogVXBkYXRlIGNoZWNrIGZvciBuZXcgQ1VTVE9NIGV2ZW50IG5hbWVzLgorCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKKwkgICogZ3N0L2dzdGV2ZW50LmMgKGdzdF9ldmVudF90eXBlX2dldF9mbGFncyk6IE5ldyBmdW5jdGlvbi4gRml4ZXMKKwkgIGJ1ZyAjMzE5MzkyLgorCisyMDA1LTExLTIxIDExOjAwOjAzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBSZW5hbWUgZ3N0X2NvbGxlY3BhZHNfZm9vKCkgPT4gZ3N0X2NvbGxlY3RfcGFkc19mb28oKS4gRG9jdW1lbnQgdW5pbXBsZW1lbnRlZCBmdW5jdGlvbnMgYXMgdW5pbXBsZW1lbnRlZCAoIzMyMDc2NikuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgorCSAgKiB3aW4zMi9saWJnc3RiYXNlLmRlZjoKKwkgICogZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0X3BhZHNfYmFzZV9pbml0KSwKKwkgIChnc3RfY29sbGVjdF9wYWRzX2NsYXNzX2luaXQpLCAoZ3N0X2NvbGxlY3RfcGFkc19pbml0KSwKKwkgIChnc3RfY29sbGVjdF9wYWRzX2ZpbmFsaXplKSwgKGdzdF9jb2xsZWN0X3BhZHNfbmV3KSwKKwkgIChnc3RfY29sbGVjdF9wYWRzX3NldF9mdW5jdGlvbiksIChnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQpLAorCSAgKGdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZCksIChnc3RfY29sbGVjdF9wYWRzX2lzX2FjdGl2ZSksCisJICAoZ3N0X2NvbGxlY3RfcGFkc19jb2xsZWN0KSwgKGdzdF9jb2xsZWN0X3BhZHNfY29sbGVjdF9yYW5nZSksCisJICAoZ3N0X2NvbGxlY3RfcGFkc19zdGFydCksIChnc3RfY29sbGVjdF9wYWRzX3N0b3ApLAorCSAgKGdzdF9jb2xsZWN0X3BhZHNfcGVlayksIChnc3RfY29sbGVjdF9wYWRzX3BvcCksCisJICAoZ3N0X2NvbGxlY3RfcGFkc19hdmFpbGFibGUpLCAoZ3N0X2NvbGxlY3RfcGFkc19yZWFkKSwKKwkgIChnc3RfY29sbGVjdF9wYWRzX2ZsdXNoKSwgKGdzdF9jb2xsZWN0X3BhZHNfZXZlbnQpLAorCSAgKGdzdF9jb2xsZWN0X3BhZHNfY2hhaW4pOgorCSAgKiBnc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oOgorCSAgUmVuYW1lIGdzdF9jb2xsZWNwYWRzX2ZvbygpID0+IGdzdF9jb2xsZWN0X3BhZHNfZm9vKCkuIERvY3VtZW50CisJICB1bmltcGxlbWVudGVkIGZ1bmN0aW9ucyBhcyB1bmltcGxlbWVudGVkICgjMzIwNzY2KS4KKworMjAwNS0xMS0yMSAxMDo0MTowMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdG1lc3NhZ2UuYzogSW1wcm92ZSBkb2NzIGZvciBEVVJBVElPTiBtZXNzYWdlICh1c2FnZSBvZiBkdXJhdGlvbiBwYXJhbWV0ZXIpICgjMzIwMTEzKQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RtZXNzYWdlLmM6CisJICBJbXByb3ZlIGRvY3MgZm9yIERVUkFUSU9OIG1lc3NhZ2UgKHVzYWdlIG9mIGR1cmF0aW9uIHBhcmFtZXRlcikKKwkgICgjMzIwMTEzKQorCisyMDA1LTExLTIxIDEwOjA0OjE4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZG9jcy9yYW5kb20vbW92aW5nLXBsdWdpbnM6CisJICB1cGRhdGUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgdXBkYXRlCisKKzIwMDUtMTEtMjEgMDk6NDQ6NDYgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KKworCSogZ3N0cmVhbWVyLnNwZWMuaW46CisJICBhZGQgbGF0ZXN0IC5wYyBmaWxlIHRvIHNwZWMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkIGxhdGVzdCAucGMgZmlsZSB0byBzcGVjCisKKzIwMDUtMTEtMjAgMTk6MTE6MDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIEFkZGVkIHNlZ21lbnQgaGVscGVyIHN0cnVjdHVyZSBhbmQgbWV0aG9kcy4gTm90IGZ1bGx5IGltcGxlbWVudGVkIHlldC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9NYWtlZmlsZS5hbToKKwkgICogY2hlY2svZ3N0L2dzdHNlZ21lbnQuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdGV2ZW50c19zdWl0ZSksCisJICAobWFpbik6CisJICAqIGdzdC9NYWtlZmlsZS5hbToKKwkgICogZ3N0L2dzdC5oOgorCSAgKiBnc3QvZ3N0c2VnbWVudC5jOiAoZ3N0X3NlZ21lbnRfaW5pdCksIChnc3Rfc2VnbWVudF9zZXRfZHVyYXRpb24pLAorCSAgKGdzdF9zZWdtZW50X3NldF9zZWVrKSwgKGdzdF9zZWdtZW50X3NldF9uZXdzZWdtZW50KSwKKwkgIChnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSksIChnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUpLAorCSAgKGdzdF9zZWdtZW50X2NsaXApOgorCSAgKiBnc3QvZ3N0c2VnbWVudC5oOgorCSAgQWRkZWQgc2VnbWVudCBoZWxwZXIgc3RydWN0dXJlIGFuZCBtZXRob2RzLiBOb3QgZnVsbHkgaW1wbGVtZW50ZWQKKwkgIHlldC4KKwkgIEFkZGVkIHNlZ21lbnQgY2hlY2suCisKKzIwMDUtMTEtMjAgMTc6MTI6NDkgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBjaGVjay9nc3QvZ3N0dmFsdWUuYzogQWRkIGEgZGVzZXJpYWxpc2F0aW9uIHRlc3QgZm9yIGZyYWN0aW9ucworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dzdC9nc3R2YWx1ZS5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3ZhbHVlX3N1aXRlKToKKwkgIEFkZCBhIGRlc2VyaWFsaXNhdGlvbiB0ZXN0IGZvciBmcmFjdGlvbnMKKwkgICogZXhhbXBsZXMvbWV0YWRhdGEvcmVhZC1tZXRhZGF0YS5jOiAobWVzc2FnZV9sb29wKSwKKwkgIChtYWtlX3BpcGVsaW5lKSwgKG1haW4pOgorCSAgRml4IHVwIG1ldGFkYXRhIHJlYWRpbmcgc2FtcGxlLgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKToKKwkgIERlYnVnIGZvcm1hdCBmaXgKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfbmVnb3RpYXRlKToKKwkgIERvbid0IHRyeSBhbmQgZml4YXRlIGVtcHR5IGNhcHMKKwkgICogZ3N0L2dzdF9wcml2YXRlLmg6CisJICBXcmFwIGluIEdfQkVHSU5fREVDTFMvR19FTkRfREVDTFMKKwkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfY29sbGVjdF9mcmFjdGlvbiksCisJICAoZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiksIChnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX2Rlbm9taW5hdG9yKSwKKwkgIChnc3RfdmFsdWVfdHJhbnNmb3JtX3N0cmluZ19mcmFjdGlvbiksCisJICAoZ3N0X3ZhbHVlX2NvbXBhcmVfZnJhY3Rpb24pOgorCSAgQWRkIHNvbWUgZXh0cmEgZ3VhcmRzIHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0IGVuZCB1cAorCSAgd2l0aCBhbiBpbnZhbGlkIGRlbm9taW5hdG9yIG9mIDAgaW4gYSBnc3RmcmFjdGlvbiBhbmQKKwkgIHRoYXQgZnJhY3Rpb25zIGFsd2F5cyBnZXQgcmVkdWNlZC4KKworMjAwNS0xMS0yMCAxNDo1NjoxMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSogQ2hhbmdlTG9nOgorCSAgU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBjaGFuZ2Vsb2cgaW4gbGFzdCBjb21taXQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBjaGFuZ2Vsb2cgaW4gbGFzdCBjb21taXQKKworMjAwNS0xMS0yMCAxNDo1MDo0MyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgRG9jIGZpeGVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3RidWZmZXIuaDoKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzoKKwkgICogZ3N0L2dzdGZvcm1hdC5jOgorCSAgKiBnc3QvZ3N0Zm9ybWF0Lmg6CisJICAqIGdzdC9nc3RpbmRleC5oOgorCSAgKiBnc3QvZ3N0cXVlcnkuYzoKKwkgICogZ3N0L2dzdHF1ZXJ5Lmg6CisJICAqIGdzdC9nc3R2YWx1ZS5jOgorCSAgRG9jIGZpeGVzLgorCisyMDA1LTExLTIwIDEzOjI4OjExICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBNYWtlIGEgcHJvcGVyIGVudW0gb2YgdGhlIGZsYWcuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKKwkgICogZ3N0L2dzdGNhcHMuaDoKKwkgIE1ha2UgYSBwcm9wZXIgZW51bSBvZiB0aGUgZmxhZy4KKworMjAwNS0xMS0xOSAxODo1NzowMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgQWRkIHR5cGUgdG8gcXVhcmsgYW5kIHR5cGUgdG8gc3RyaW5nIGNvbnZlcnNpb25zLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6CisJICAqIGdzdC9nc3Rmb3JtYXQuYzogKF9nc3RfZm9ybWF0X2luaXRpYWxpemUpLCAoZ3N0X2Zvcm1hdF9nZXRfbmFtZSksCisJICAoZ3N0X2Zvcm1hdF90b19xdWFyayksIChnc3RfZm9ybWF0X3JlZ2lzdGVyKToKKwkgICogZ3N0L2dzdGZvcm1hdC5oOgorCSAgKiBnc3QvZ3N0cXVlcnkuYzogKF9nc3RfcXVlcnlfaW5pdGlhbGl6ZSksCisJICAoZ3N0X3F1ZXJ5X3R5cGVfZ2V0X25hbWUpLCAoZ3N0X3F1ZXJ5X3R5cGVfdG9fcXVhcmspLAorCSAgKGdzdF9xdWVyeV90eXBlX3JlZ2lzdGVyKToKKwkgICogZ3N0L2dzdHF1ZXJ5Lmg6CisJICBBZGQgdHlwZSB0byBxdWFyayBhbmQgdHlwZSB0byBzdHJpbmcgY29udmVyc2lvbnMuCisKKzIwMDUtMTEtMTkgMTg6MzI6MDEgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdGJ1ZmZlci5oIChHU1RfQlVGRkVSX0ZMQUdfT1JJR0lOQUwpOiBSZW1vdmVkLiBGaXhlcyAjMzIwMDk3LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTExLTE5ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvZ3N0YnVmZmVyLmggKEdTVF9CVUZGRVJfRkxBR19PUklHSU5BTCk6IFJlbW92ZWQuIEZpeGVzCisJICAjMzIwMDk3LgorCisyMDA1LTExLTE5IDE4OjI4OjQwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBNYWtlIG1lc3NhZ2UgaGFuZGxpbmcgb3ZlcnJpZGFibGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9jbGFzc19pbml0KSwgKGdzdF9iaW5fcHJvdmlkZV9jbG9ja19mdW5jKSwKKwkgIChnc3RfYmluX2FkZF9mdW5jKSwgKGdzdF9iaW5fcmVtb3ZlX2Z1bmMpLCAoYmluX2J1c19oYW5kbGVyKSwKKwkgIChnc3RfYmluX2hhbmRsZV9tZXNzYWdlX2Z1bmMpOgorCSAgKiBnc3QvZ3N0YmluLmg6CisJICBNYWtlIG1lc3NhZ2UgaGFuZGxpbmcgb3ZlcnJpZGFibGUuCisKKzIwMDUtMTEtMTkgMTg6MjY6MzUgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdHBhZC5oIChHU1RfUEFEX0lTX1VTQUJMRSk6IFJlbW92ZWQuIEZpeGVzICMzMjEyMzUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTEtMTkgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3RwYWQuaCAoR1NUX1BBRF9JU19VU0FCTEUpOiBSZW1vdmVkLiBGaXhlcyAjMzIxMjM1LgorCisyMDA1LTExLTE5IDE4OjE3OjI5ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGdzdC9nc3RjbG9jay4qOiBDaGFuZ2UgcmVzb2x1dGlvbiB0byBiZSBhIEdzdENsb2NrVGltZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0xOSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdGNsb2NrLmg6CisJICAqIGdzdC9nc3RjbG9jay5jIChHc3RDbG9jaywgR3N0Q2xvY2tDbGFzcyk6IENoYW5nZSByZXNvbHV0aW9uIHRvCisJICBiZSBhIEdzdENsb2NrVGltZS4KKwkgIChnc3RfY2xvY2tfc2V0X3Jlc29sdXRpb24sIGdzdF9jbG9ja19nZXRfcmVzb2x1dGlvbik6IFJlc29sdXRpb24KKwkgIGlzIGEgR3N0Q2xvY2tUaW1lLiBGaXhlcyAjMzIxNzEwLgorCisyMDA1LTExLTE5IDE4OjA2OjU2ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGdzdC9nc3RjbG9jay5oIChHc3RDbG9jayk6IFJlbW92ZSBvZmZzZXQgcHJvcGVydHkuIEFkZCBpbnRlcm5hbF9jYWxpYnJhdGlvbiBhbmQgZXh0ZXJuYWxfY2FsaWJyYXRpb24uIEZpeCBwYWRkaW5nLiBQYS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTExLTE5ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvZ3N0Y2xvY2suaCAoR3N0Q2xvY2spOiBSZW1vdmUgb2Zmc2V0IHByb3BlcnR5LiBBZGQKKwkgIGludGVybmFsX2NhbGlicmF0aW9uIGFuZCBleHRlcm5hbF9jYWxpYnJhdGlvbi4gRml4IHBhZGRpbmcuIFBhZAorCSAgYWxzbyBieSBHc3RDbG9ja1RpbWUgc28gd2UgZG9uJ3QgcnVuIGludG8gcHJvYmxlbXMuCisJICAqIGdzdC9nc3RjbG9jay5jIChnc3RfY2xvY2tfc2V0X3JhdGVfb2Zmc2V0KTogUmVtb3ZlLgorCSAgKGdzdF9jbG9ja19nZXRfcmF0ZV9vZmZzZXQpOiBSZW1vdmUuCisJICAoZ3N0X2Nsb2NrX3NldF90aW1lX2FkanVzdCk6IFJlbW92ZS4gRml4ZXMgIzMyMTcxMi4KKworMjAwNS0xMS0xOSAxNzo1MDo1MiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0dXRpbHMuaDogZ3N0L2dzdHV0aWxzLmMgKGdfc3RhdGljX3JlY19jb25kX3dhaXQpCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTEtMTkgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3R1dGlscy5oOgorCSAgKiBnc3QvZ3N0dXRpbHMuYyAoZ19zdGF0aWNfcmVjX2NvbmRfd2FpdCkKKwkgIChnX3N0YXRpY19yZWNfY29uZF90aW1lZF93YWl0KTogUmVtb3ZlZCwgbm8gbG9uZ2VyIG5lZWRlZC4KKwkgICogZ3N0L2dzdGJpbi5jOiBSZW1vdmUgdGVycmlibGUgY29udGludWVfc3RhdGUgcHJvdG90eXBlLgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5oIChnc3RfZWxlbWVudF9jb250aW51ZV9zdGF0ZSk6IE1ha2UgcHVibGljLgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jIChnc3RfZWxlbWVudF9jb21taXRfc3RhdGUpOiBSZW1vdmVkLCByZXBsYWNlZAorCSAgYnkgY29udGludWVfc3RhdGUuIEZpeGVzICMzMTkzODkuCisKKzIwMDUtMTEtMTkgMTc6Mjg6NTggKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdGluZGV4LmggKEdzdEluZGV4RmlsdGVyKTogQWN0dWFsbHkgcGFzcyBvbiB0aGUgdXNlcl9kYXRhLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTExLTE5ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvZ3N0aW5kZXguaCAoR3N0SW5kZXhGaWx0ZXIpOiBBY3R1YWxseSBwYXNzIG9uIHRoZSB1c2VyX2RhdGEuCisJICBSZWFsbHkgZml4ZXMgIzE2ODQzOC4gSG93ZXZlciBJIGRvbid0IHNlZSBhbnl3aGVyZSB3aGVyZSB0aGUKKwkgIGZpbHRlciBmdW5jdGlvbiBpcyBjYWxsZWQuLi4gc3R1cGlkIEdTdHJlYW1lci4uLgorCisyMDA1LTExLTE5IDE3OjI2OjI3ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGdzdC9nc3RpbmRleC5oIChHc3RJbmRleCk6IEFkZCBmaWVsZCBmb3IgdXNlcl9kYXRhX2Rlc3Ryb3kuIFdlIGRvbid0IGhhdmUgYSBkaXNwb3NlIGZ1bmN0aW9uLCBzbyBpdCB3b24ndCBnZXQgY2FsbGVkIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTExLTE5ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvZ3N0aW5kZXguaCAoR3N0SW5kZXgpOiBBZGQgZmllbGQgZm9yIHVzZXJfZGF0YV9kZXN0cm95LiBXZQorCSAgZG9uJ3QgaGF2ZSBhIGRpc3Bvc2UgZnVuY3Rpb24sIHNvIGl0IHdvbid0IGdldCBjYWxsZWQgd2hlbiB0aGUKKwkgIG9iamVjdCBpcyB1bnJlZmZlZCwgYnV0IG9oIHdlbGwhCisJICAqIGdzdC9nc3RpbmRleC5jIChnc3RfaW5kZXhfc2V0X2ZpbHRlcl9mdWxsKTogTmV3IEFQSSBmdW5jdGlvbiwKKwkgIGFsbG93cyBhIGRlc3Ryb3kgZnVuY3Rpb24gdG8gYmUgc2V0IHNvIHVzZXJfZGF0YSBjYW4gYmUgZnJlZWQuCisJICBGaXhlcyAjMTY4NDM4LgorCSAgKGdzdF9pbmRleF9zZXRfZmlsdGVyKTogQ2FsbCBnc3RfaW5kZXhfc2V0X2ZpbHRlcl9mdWxsLgorCisyMDA1LTExLTE5IDE3OjA4OjIzICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGNoZWNrL2dzdC9nc3R2YWx1ZS5jICh0ZXN0X3N0cmluZyk6IEFkZCB0ZXN0IGZvciBidWcgIzE2NTY1MC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0xOSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogY2hlY2svZ3N0L2dzdHZhbHVlLmMgKHRlc3Rfc3RyaW5nKTogQWRkIHRlc3QgZm9yIGJ1ZyAjMTY1NjUwLgorCSAgKiBnc3QvZ3N0dmFsdWUuYyAoZ3N0X3N0cmluZ193cmFwKTogVHJ5aW5nIHRvIHNlcmlhbGl6ZSBhIE5VTEwKKwkgIHN0cmluZyBzaG91bGQgcHJvZHVjZSBhbiBlcnJvciwgZ2l2ZW4gdGhlIGxhY2sgb2YgYSB3YXkgdG8KKwkgIHJlcHJlc2VudCBOVUxMIHN0cmluZ3MuIEZpeGVzICMxNjU2NTAuCisKKzIwMDUtMTEtMTkgMTY6NDY6MzAgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdHZhbHVlLmg6IGdzdC9nc3R2YWx1ZS5jIChnc3RfdmFsdWVfYXJyYXlfYXBwZW5kX3ZhbHVlKSAoZ3N0X3ZhbHVlX2FycmF5X3ByZXBlbmRfdmFsdWUsIGdzdF92YWx1ZV9hcnJheV9nZXRfc2l6ZSkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0xOSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdHZhbHVlLmg6CisJICAqIGdzdC9nc3R2YWx1ZS5jIChnc3RfdmFsdWVfYXJyYXlfYXBwZW5kX3ZhbHVlKQorCSAgKGdzdF92YWx1ZV9hcnJheV9wcmVwZW5kX3ZhbHVlLCBnc3RfdmFsdWVfYXJyYXlfZ2V0X3NpemUpCisJICAoZ3N0X3ZhbHVlX2FycmF5X2dldF92YWx1ZSk6IE5ldyBBUEksIGNvcGllZCBmcm9tCisJICBnc3RfdmFsdWVfbGlzdF8qLCBvbmx5IG9wZXJhdGVzIG9uIGFycmF5cy4KKwkgIChnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUsIGdzdF92YWx1ZV9saXN0X3ByZXBlbmRfdmFsdWUpCisJICAoZ3N0X3ZhbHVlX2xpc3RfY29uY2F0LCBnc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZSkKKwkgIChnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUpOiBPbmx5IG9wZXJhdGUgb24gbGlzdHMuIEZpeGVzICMxNTY2MzMuCisJICAqIGdzdC9nc3R2YWx1ZS5jIChnc3RfdmFsdWVfaW5pdF9saXN0X29yX2FycmF5KTogUmVuYW1lZCBmcm9tCisJICBpbml0X2xpc3QsIGJlY2F1c2UgaXQgd29ya3Mgb24gYm90aC4KKwkgIChjb3B5X2dhcnJheV9vZl9nc3R2YWx1ZSk6IFJlbmFtZWQgZnJvbSBnc3RfdmFsdWVfbGlzdF9jb3B5X2FycmF5LgorCSAgKGdzdF92YWx1ZV9jb3B5X2xpc3Rfb3JfYXJyYXkpOiBSZW5hbWVkIGZyb20gY29weV9saXN0LgorCSAgKGdzdF92YWx1ZV9mcmVlX2xpc3Rfb3JfYXJyYXkpOiBSZW5hbWVkIGZyb20gZnJlZV9saXN0LgorCSAgKGdzdF92YWx1ZV9jb2xsZWN0X2xpc3Rfb3JfYXJyYXkpOiBSZW5hbWVkIGZyb20gY29sbGVjdF9saXN0LgorCSAgKGdzdF92YWx1ZV9sY29weV9saXN0X29yX2FycmF5KTogUmVuYW1lZCBmcm9tIGxjb3B5X2xpc3QuCisJICAoZ3N0X3ZhbHVlX2xpc3Rfb3JfYXJyYXlfcGVla19wb2ludGVyKTogUmVuYW1lZCBmcm9tCisJICBsaXN0X3BlZWtfcG9pbnRlci4KKwkgIChfZ3N0X3ZhbHVlX2FycmF5X3ZhbHVlX3RhYmxlLCBfZ3N0X3ZhbHVlX2xpc3RfdmFsdWVfdGFibGUpOgorCSAgVXBkYXRlIHZhbHVlIHRhYmxlIGZ1bmN0aW9ucy4KKwkgIChnc3RfdmFsdWVfY29tcGFyZV9saXN0X29yX2FycmF5KTogUmVuYW1lZCBmcm9tIGNvbXBhcmVfbGlzdC4KKworMjAwNS0xMS0xOSAxNjowNToxMSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3R0YWdsaXN0Lmg6IFdob29wcywgZm9yZWFjaCBmdW5jdGlvbiByZXR1cm5zIHZvaWQuIEFsc28gZml4IHNvbWUgY29uc3RuZXNzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTExLTE5ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3R0YWdsaXN0Lmg6IFdob29wcywgZm9yZWFjaCBmdW5jdGlvbiByZXR1cm5zIHZvaWQuIEFsc28gZml4CisJICBzb21lIGNvbnN0bmVzcy4KKworMjAwNS0xMS0xOSAxNTo1MTo0MSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0dGFnbGlzdC4qOiBPcGVyYXRlcyBvbiBhIGNvbnN0CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTEtMTkgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3R0YWdsaXN0LmM6CisJICAqIGdzdC9nc3R0YWdsaXN0LmggKGdzdF90YWdfbGlzdF9mb3JlYWNoKTogT3BlcmF0ZXMgb24gYSBjb25zdAorCSAgR3N0VGFnTGlzdCouIEZpeGVzICMxNDM0NzIuCisJICAqIGdzdC9nc3RzdHJ1Y3R1cmUuaDogQ2xhcmlmeSB3aGF0IHRoZSBmb3JlYWNoL21hcCBmdW5jdGlvbnMgY2FuCisJICBvciBjYW4ndCBkbyB0byB0aGVpciBhcmd1bWVudHMuCisKKzIwMDUtMTEtMTggMTk6MjE6NTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RjbG9jay5jOiBEb2MgYW5kIEFQSSBmaXhlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0Y2xvY2suYzogKGdzdF9jbG9ja19zZXRfY2FsaWJyYXRpb24pLAorCSAgKGdzdF9jbG9ja19nZXRfY2FsaWJyYXRpb24pOgorCSAgRG9jIGFuZCBBUEkgZml4ZXMuCisJICBDYWxsaWJyYXRpb24gY2FuIGJlIHNldCB3aXRoIGludGVybmFsIHRpbWUgZXF1YWwgdG8gY3VycmVudAorCSAgaW50ZXJuYWwgdGltZSB0b28uCisKKzIwMDUtMTEtMTggMTg6NTU6MjQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBnc3QvZ3N0ZXJyb3IuKjogZG9jdW1lbnQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZXJyb3IuYzoKKwkgICogZ3N0L2dzdGVycm9yLmg6CisJICBkb2N1bWVudAorCisyMDA1LTExLTE4IDE4OjM4OjQxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZG9jcy9yYW5kb20vbW92aW5nLXBsdWdpbnM6CisJICBkb2N1bWVudCBvbiByZXF1aXJlbWVudHMgZm9yIG1vdmluZyBwbHVnaW5zIHRvIGdvb2QKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZG9jdW1lbnQgb24gcmVxdWlyZW1lbnRzIGZvciBtb3ZpbmcgcGx1Z2lucyB0byBnb29kCisKKzIwMDUtMTEtMTggMTY6MjQ6NTYgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgQWRkIG5ldCBwa2djb25maWcgZmlsZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTEtMTggIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgICogcGtnY29uZmlnL2dzdHJlYW1lci1uZXQucGMuaW46CisJICAqIHBrZ2NvbmZpZy9nc3RyZWFtZXItbmV0LXVuaW5zdGFsbGVkLnBjLmluOgorCSAgKiBwa2djb25maWcvTWFrZWZpbGUuYW06IEFkZCBuZXQgcGtnY29uZmlnIGZpbGVzLgorCisyMDA1LTExLTE4IDE2OjA0OjI4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC86IGRvY3MgZml4ZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0Y2Fwcy5jOgorCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKKwkgICogZ3N0L2dzdHRyYWNlLmM6CisJICAqIGdzdC9nc3R2YWx1ZS5jOgorCSAgKiBnc3QvZ3N0dmFsdWUuaDoKKwkgIGRvY3MgZml4ZXMKKworMjAwNS0xMS0xOCAxNTo1MjoyNCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6IFR1cm4gb2ZmIGRlYnVnZ2luZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0xOCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOiBUdXJuIG9mZiBkZWJ1Z2dpbmcuCisJICAqIGNoZWNrL25ldC9nc3RuZXRjbGllbnRjbG9jay5jICh0ZXN0X2Z1bmN0aW9uaW5nKTogQXNzZXJ0IHRoYXQgdGhlCisJICB0aW1lcyBjb25udmVyZ2Ugc29tZXdoYXQuIENhbid0IG1ha2UgYSByZWFsIHRlc3QuCisKKzIwMDUtMTEtMTggMTU6MzA6MTggKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jIChkb19saW5lYXJfcmVncmVzc2lvbik6IFVzZSBhbGwgaW50ZWdlciBhcml0aG1ldGljLiBSZXR1cm4gdGhlIG1pbmltdW0gb2YgdGhlIGRvbWFpbiwgd2hpLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTEtMTggIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYyAoZG9fbGluZWFyX3JlZ3Jlc3Npb24pOiBVc2UgYWxsCisJICBpbnRlZ2VyIGFyaXRobWV0aWMuIFJldHVybiB0aGUgbWluaW11bSBvZiB0aGUgZG9tYWluLCB3aGljaCBjYW4gYmUKKwkgIHNldCBhcyAiaW50ZXJuYWwiIGZvciBnc3RfY2xvY2tfc2V0X2NhbGlicmF0aW9uLgorCSAgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX29ic2VydmVfdGltZXMpOiBDYWxsIF9zZXRfY2FsaWJyYXRpb24uCisJICAoZ3N0X25ldF9jbGllbnRfY2xvY2tfbmV3KTogQ2FsbCBfc2V0X2NhbGlicmF0aW9uIGluc3RlYWQgb2YKKwkgIHJhdGVfb2Zmc2V0LgorCSAgKiBjaGVjay9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYyAodGVzdF9mdW5jdGlvbmluZyk6IFVzZSB0aGUgcmlnaHQKKwkgIGFkanVzdG1lbnQgYXBpLgorCSAgKiBnc3QvZ3N0Y2xvY2suaDoKKwkgICogZ3N0L2dzdGNsb2NrLmMgKGdzdF9jbG9ja19nZXRfY2FsaWJyYXRpb24pCisJICAoZ3N0X2Nsb2NrX3NldF9jYWxpYnJhdGlvbik6IE5ldyBmdW5jdGlvbnMsIG9ic29sZXRlIHRoZSBvbmVzIEkKKwkgIGFkZGVkIHllc3RlcmRheS4gRG9oLiBQcmVjaXNpb24gaXNzdWVzIG1lYW4gd2UgaGF2ZSB0byBleHRyYXBvbGF0ZQorCSAgZnJvbSBhIHBvaW50IGluIHRoZSBtb3JlIHJlY2VudCBwYXN0IHRoYW4gMTk3MC4KKwkgIChnc3RfY2xvY2tfZ2V0X3JhdGVfb2Zmc2V0LCBnc3RfY2xvY2tfc2V0X3JhdGVfb2Zmc2V0KTogTWFyayBhcworCSAgb2Jzb2xldGUuCisJICAoZ3N0X2Nsb2NrX2FkanVzdF91bmxvY2tlZCk6IFVzZSB0aGUgcmlnaHQgY2FsaWJyYXRpb24gZGF0YS4KKworMjAwNS0xMS0xOCAxNDo0OToyOCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogQWxzbyByZXNldCB0aGUgLT5jdXJyZW50XyogdmFsdWVzIGluIFJFQURZLT5QQVVTRUQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgorCSAgQWxzbyByZXNldCB0aGUgLT5jdXJyZW50XyogdmFsdWVzIGluIFJFQURZLT5QQVVTRUQKKworMjAwNS0xMS0xOCAxNDoxMzoyOCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmMgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX3RocmVhZCk6IFdob29wcywgY2hlY2sgdGhlIHJpZ2h0IGZkLiBBbHNvIGFkZCBzb21lIGRlYnVnZ2luZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0xOCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jIChnc3RfbmV0X2NsaWVudF9jbG9ja190aHJlYWQpOgorCSAgV2hvb3BzLCBjaGVjayB0aGUgcmlnaHQgZmQuIEFsc28gYWRkIHNvbWUgZGVidWdnaW5nLgorCSAgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX29ic2VydmVfdGltZXMpOiBBZGp1c3QgZm9yIGludDY0IG9mZnNldC4KKwkgIChkb19saW5lYXJfcmVncmVzc2lvbik6IEFkZCBhIGNyYXBsb2FkIG9mIGRlYnVnZ2luZy4gU3VidHJhY3Qgb2ZmCisJICB0aGUgbWluaW11bSB2YWx1ZXMgZnJvbSB0aGUgaW5wdXQgc2VyaWVzIHRvIGRpc2NhcmQgdW5uZWVkZWQgYml0cy4KKwkgIFVzZSBvbmx5IGludCBhcml0aG1ldGljLiBUaGVyZSBpcyBzdGlsbCBkb3VibGUgYXJpdGhtZXRpYyB3aGVuCisJICBjYWxjdWxhdGluZyB0aGUgaW50ZXJjZXB0IHRoYXQgbmVlZHMgZml4aW5nLiBSZXR1cm4gYm9vbGVhbiB0bworCSAgaW5kaWNhdGUgc3VjY2VzczsgRkFMU0Ugd291bGQgbWVhbiB0aGUgZG9tYWluIG9yIHJhbmdlIGlzIHRvbworCSAgZ3JlYXQuIFN0aWxsIG5lZWRzIGZpeGVzLgorCisyMDA1LTExLTE4IDEzOjE4OjQ0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiBGb3IgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gc3RyZWFtIHRpbWUsIHdlIG5lZWQgdG8gc3VidHJhY3QgYWNjdW11bGF0ZWQgdGltZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24pOgorCSAgRm9yIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHN0cmVhbSB0aW1lLCB3ZSBuZWVkIHRvIHN1YnRyYWN0CisJICBhY2N1bXVsYXRlZCB0aW1lLgorCSAgKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzogKGdzdF9zeXN0ZW1fY2xvY2tfYXN5bmNfdGhyZWFkKToKKwkgIFJlbGVhc2UgbG9jayBiZWZvcmUgY2FsbGluZyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gb2YgYXN5bmMKKwkgIGVudHJpZXMuCisKKzIwMDUtMTEtMTggMTE6NTc6MzAgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jIChnc3RfbmV0X2NsaWVudF9jbG9ja19jbGFzc19pbml0KTogUG9ydCBnb2VzIGFsbCB0aGUgd2F5IHRvIE1BWFVJTlQxNi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0xOCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jIChnc3RfbmV0X2NsaWVudF9jbG9ja19jbGFzc19pbml0KToKKwkgIFBvcnQgZ29lcyBhbGwgdGhlIHdheSB0byBNQVhVSU5UMTYuCisJICAqIGdzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmM6IE1ha2UgdGhlIHBvcnQgcmFuZ2UgdGhlIHNhbWUgYXMKKwkgIGZvciB0aGUga2VybmVsOiAwIGFzc2lnbnMsIG90aGVyd2lzZSBwb3J0cyBhcmUgbGVzcyB0aGFuCisJICBNQVhVSU5UMTYuCisJICAqIGNoZWNrL25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzogQWRhcHQgZm9yIDAgPT0ga2VybmVsIGFzc2lnbnMKKwkgIHBvcnQgY2hhbmdlLgorCSAgKiBjaGVjay9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYyAodGVzdF9mdW5jdGlvbmluZyk6IEFkZCB0aGUgc3RhcnQKKwkgIG9mIGFub3RoZXIgdGVzdC4KKworMjAwNS0xMS0xOCAxMTowMzoxMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJpbi4qOiBSZW1vdmluZyBhIGNsb2NrIHByb3ZpZGVyIGZyb20gYSBiaW4sIHRyaWdnZXJzIGEgY2xvY2sgbG9zdCBtZXNzYWdlIHNvIHRoYXQgYSBuZXcgY2xvY2sgd2lsbCBiZSBzZWxlY3RlZC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX3Byb3ZpZGVfY2xvY2tfZnVuYyksIChnc3RfYmluX2FkZF9mdW5jKSwKKwkgIChnc3RfYmluX3JlbW92ZV9mdW5jKSwgKGJpbl9idXNfaGFuZGxlcik6CisJICAqIGdzdC9nc3RiaW4uaDoKKwkgIFJlbW92aW5nIGEgY2xvY2sgcHJvdmlkZXIgZnJvbSBhIGJpbiwgdHJpZ2dlcnMgYSBjbG9jayBsb3N0IG1lc3NhZ2UKKwkgIHNvIHRoYXQgYSBuZXcgY2xvY2sgd2lsbCBiZSBzZWxlY3RlZC4KKwkgIEFkZGluZyBhIGNsb2NrIHRvIGEgYmluIHRyaWdnZXJzIGEgY2xvY2sgcHJvdmlkZXIgbWVzc2FnZS4KKwkgIE1ha2Ugc3VyZSB3ZSByZXNlbGVjdCBhIGNsb2NrIHdoZW4gd2UgcmVjZWl2ZWQgYSBjbG9jayBsb3N0IG1lc3NhZ2UuCisJICBLZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IHRoYXQgcHJvdmlkZWQgdGhlIGNsb2NrLgorCisyMDA1LTExLTE4IDEwOjU0OjU1ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGdzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYyAoZ3N0X25ldF9jbGllbnRfY2xvY2tfbmV3KTogQWRqdXN0IHRoZSBjbG9jayBpbml0aWFsbHkgc28gaXQgcHJvZHVjZXMgdmFsdWVzIGFyb3VuZCB0aGUgYi4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTExLTE4ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmMgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX25ldyk6IEFkanVzdAorCSAgdGhlIGNsb2NrIGluaXRpYWxseSBzbyBpdCBwcm9kdWNlcyB2YWx1ZXMgYXJvdW5kIHRoZSBiYXNlIHRpbWUuCisJICAoZ3N0X25ldF9jbGllbnRfY2xvY2tfY2xhc3NfaW5pdCk6IFR5cG8gZml4LgorCSAgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX3RocmVhZCk6IEFkZCBub3RlIG9uIHdoZW4gdGhlIHNvY2tldCBnZXRzCisJICBjbG9zZWQuCisKKzIwMDUtMTEtMTcgMTg6NTA6MTQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzogRnJlZSByZW1vdGUgYW5kIGxvY2FsIHRpbWUgYXJyYXlzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzogKGdzdF9uZXRfY2xpZW50X2Nsb2NrX2ZpbmFsaXplKToKKwkgIEZyZWUgcmVtb3RlIGFuZCBsb2NhbCB0aW1lIGFycmF5cy4KKworMjAwNS0xMS0xNyAxODoxODo0MSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOiBGaXggY29tcGlsYXRpb24sIHVuaW5pdGlhbGl6ZWQgdmFycyBhbmQgYSBmb3Jnb3R0ZW4gY29udGludWUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOiAoZG9fbGluZWFyX3JlZ3Jlc3Npb24pLAorCSAgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX2RvX3NlbGVjdCksIChnc3RfbmV0X2NsaWVudF9jbG9ja190aHJlYWQpOgorCSAgRml4IGNvbXBpbGF0aW9uLCB1bmluaXRpYWxpemVkIHZhcnMgYW5kIGEgZm9yZ290dGVuIGNvbnRpbnVlLgorCisyMDA1LTExLTE3IDE3OjU1OjE3ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGNoZWNrLzogQWRkIGEgbW9zdCBtaW5pbWFsIHRlc3QgZm9yIHRoZSBuZXQgY2xpZW50IGNsb2NrLiBNb3JlIHRvIGNvbWUgbGF0ZXIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTEtMTcgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGNoZWNrL01ha2VmaWxlLmFtIChjaGVja19QUk9HUkFNUyk6CisJICAqIGNoZWNrL25ldC9nc3RuZXRjbGllbnRjbG9jay5jOiBBZGQgYSBtb3N0IG1pbmltYWwgdGVzdCBmb3IgdGhlCisJICBuZXQgY2xpZW50IGNsb2NrLiBNb3JlIHRvIGNvbWUgbGF0ZXIuCisJICAqIGdzdC9uZXQvZ3N0bmV0Lmg6CisJICAqIGdzdC9uZXQvTWFrZWZpbGUuYW06IEFkZCBuZXRjbGllbnRjbG9jay4KKwkgICogZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5oOgorCSAgKiBnc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6IE5ldyBmaWxlcywgaW1wbGVtZW50IGFuIHVudGVzdGVkCisJICBHc3RDbG9jayB0aGF0IHRha2VzIGl0cyB0aW1lIGZyb20gYSBuZXR3b3JrIHRpbWUgcHJvdmlkZXIuCisJICBJbXBsZW1lbnRzIHRoZSBhbGdvcml0aG0gaW4gbmV0d29yay1jbG9jay5zY20uCisJICAqIHRlc3RzL25ldHdvcmstY2xvY2suc2NtICgqd2luZG93LXNpemUqKTogUmVuYW1lIGZyb20KKwkgICpxdWV1ZS1sZW5ndGgqLgorCSAgKiB0ZXN0cy9uZXR3b3JrLWNsb2NrLnNjbSAobmV0d29yay10aW1lKToKKwkgICogdGVzdHMvbmV0d29yay1jbG9jay11dGlscy5zY20gKHEtcHVzaCk6IFVwZGF0ZSBjYWxsZXJzLgorCisyMDA1LTExLTE3IDE2OjAyOjQ4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YmluLmM6IEFuZCB1bnJlZiB0aGUgY2hpbGQgdG9vLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX3Byb3ZpZGVfY2xvY2tfZnVuYyksCisJICAoZ3N0X2Jpbl9zb3J0X2l0ZXJhdG9yX25ldyk6CisJICBBbmQgdW5yZWYgdGhlIGNoaWxkIHRvby4uCisKKzIwMDUtMTEtMTcgMTQ6NTE6MTEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RiaW4uYzogUmVmYWN0b3IgdGhlIHNvcnQgaXRlcmF0b3Igc28gaXQgY2FuIGJlIHVzZWQgd2hpbGUgaG9sZGluZyB0aGUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2Rpc3Bvc2UpLCAoZ3N0X2Jpbl9wcm92aWRlX2Nsb2NrX2Z1bmMpLAorCSAgKGdzdF9iaW5fc29ydF9pdGVyYXRvcl9uZXcpLCAoZ3N0X2Jpbl9pdGVyYXRlX3NvcnRlZCk6CisJICBSZWZhY3RvciB0aGUgc29ydCBpdGVyYXRvciBzbyBpdCBjYW4gYmUgdXNlZCB3aGlsZSBob2xkaW5nIHRoZQorCSAgTE9DSyB0b28uCisJICBNYWtlIGNsb2NrIHNlbGVjdGlvbiBzZWxlY3QgYSBjbG9jayBjbG9zZXN0IHRvIHRoZSBzb3VyY2UuCisKKzIwMDUtMTEtMTcgMTI6MzY6MzAgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KKworCSAgZ3N0L2dzdGNsb2NrLio6IEFub255bW91cyBzdHJ1Y3RzIGFyZSBhIGdjYyAoYW5kIHNvbWUgb3RoZXIgY29tcGlsZXJzKSBleHRlbnNpb24sIHNvIGRvbid0IHVzZSB0aGVtLiBTaW5jZSB0aGlzIGlzIG9uLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGNsb2NrLmM6IChnc3RfY2xvY2tfaW5pdCksIChnc3RfY2xvY2tfYWRqdXN0X3VubG9ja2VkKSwKKwkgIChnc3RfY2xvY2tfc2V0X3JhdGVfb2Zmc2V0KSwgKGdzdF9jbG9ja19nZXRfcmF0ZV9vZmZzZXQpOgorCSAgKiBnc3QvZ3N0Y2xvY2suaDoKKwkgIEFub255bW91cyBzdHJ1Y3RzIGFyZSBhIGdjYyAoYW5kIHNvbWUgb3RoZXIgY29tcGlsZXJzKSBleHRlbnNpb24sIHNvCisJICBkb24ndCB1c2UgdGhlbS4gU2luY2UgdGhpcyBpcyBvbmx5IGZvciBBQkktY29tcGF0aWJpbGl0eSwgYW5kIG91cgorCSAgQVBJL0FCSSBmcmVlemUgaXMgb3ZlciBpbiBhIGZldyBkYXlzLCB0aGlzIHdob2xlIHRoaW5nIHdpbGwgb25seQorCSAgbGFzdCBhIGZldyBkYXlzLCBzbyBkb24ndCBib3RoZXIgdHJ5aW5nIHRvIHRoaW5rIHVwIGEgbWVhbmluZ2Z1bAorCSAgbmFtZSBmb3IgdGhlIHN0cnVjdC4KKworMjAwNS0xMS0xNyAxMTo1MTo0OSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0Y2xvY2suaCAoR3N0Q2xvY2spOiBBZGQgcmF0ZSBhbmQgb2Zmc2V0IHByb3BlcnRpZXMsIHByZXNlcnZpbmcgQUJJIHN0YWJpbGl0eS4gQWRkIHJhdGUvb2Zmc2V0IGFjY2Vzc29ycy4gV2lsbCAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0xNyAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdGNsb2NrLmggKEdzdENsb2NrKTogQWRkIHJhdGUgYW5kIG9mZnNldCBwcm9wZXJ0aWVzLAorCSAgcHJlc2VydmluZyBBQkkgc3RhYmlsaXR5LiBBZGQgcmF0ZS9vZmZzZXQgYWNjZXNzb3JzLiBXaWxsIGZpbGUgYnVnCisJICBmb3IgdGhlIGZyZWV6ZSBicmVhay4KKwkgICogZ3N0L2dzdGNsb2NrLmMgKGdzdF9jbG9ja19hZGp1c3RfdW5sb2NrZWQpOiBJbXBsZW1lbnQgdXNpbmcgcmF0ZQorCSAgYW5kIG9mZnNldCwgdHJ5aW5nIHRvIGtlZXAgcHJlY2lzaW9uIGFuZCBhdm9pZGluZworCSAgdW5kZXJmbG93L292ZXJmbG93LgorCSAgKGdzdF9jbG9ja19zZXRfcmF0ZV9vZmZzZXQsIGdzdF9jbG9ja19nZXRfcmF0ZV9vZmZzZXQpOiBOZXcKKwkgIGZ1bmN0aW9ucy4gTWFrZSBnc3RfY2xvY2tfc2V0X3RpbWVfYWRqdXN0IG9ic29sZXRlLgorCSAgKGdzdF9jbG9ja19zZXRfdGltZV9hZGp1c3QpOiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBvYnNvbGV0ZS4KKwkgIFdpbGwgZmlsZSBidWcgc29vbi4KKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOiBNYWtlIHRoZSBBQkktc3RhYmlsaXR5IGhhY2sKKwkgIGdyZXBwYWJsZSBieSB1c2luZyBHU1RfUEFERElORy0xKzEuCisKKzIwMDUtMTEtMTcgMTE6MjU6MzQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBkb2NzL3JhbmRvbS9OT1RFUy0wLjEuMToKKwkqIGRvY3MvcmFuZG9tL05PVEVTLTAuMi4wOgorCSogZG9jcy9yYW5kb20vVE9ETy1wb3N0LTAuMS4wOgorCSogZG9jcy9yYW5kb20vYXJjaDoKKwkqIGRvY3MvcmFuZG9tL2Nvcm91dGluZXM6CisJKiBkb2NzL3JhbmRvbS9kZXNpZ246CisJKiBkb2NzL3JhbmRvbS9mYWN0b3J5aW5mbzoKKwkqIGRvY3MvcmFuZG9tL2dib29sZWFuOgorCSogZG9jcy9yYW5kb20vcGFkYXJjaDoKKwkqIGRvY3MvcmFuZG9tL3NlcXVlbmNlOgorCSogZG9jcy9yYW5kb20vc3RhdGUtdHJhbnNpdGlvbnM6CisJKiBkb2NzL3JhbmRvbS9zdGF0ZXM6CisJKiBkb2NzL3JhbmRvbS9zdGF0ZXMubmV3OgorCSogZG9jcy9yYW5kb20vc3RhdGVzLm9sZDoKKwkqIGRvY3MvcmFuZG9tL3dhbGt0aHJvdWdoOgorCSAgcmVtb3ZlIGNvbXBsZXRlbHkgb3V0ZGF0ZWQgcmFuZG9tIGRvY3MKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVtb3ZlIGNvbXBsZXRlbHkgb3V0ZGF0ZWQgcmFuZG9tIGRvY3MKKworMjAwNS0xMS0xNyAwOTozNzo1NSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdG1lc3NhZ2UuYzogQXNzZXJ0aW9uIHNob3VsZCBjaGVjayBmb3IgQ0xPQ0tfTE9TVCwgbm90IE5FV19DTE9DSyAoIzMyMTY0OCkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFJldmlld2VkIGJ5OiBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+CisJICAqIGdzdC9nc3RtZXNzYWdlLmM6IChnc3RfbWVzc2FnZV9wYXJzZV9jbG9ja19sb3N0KToKKwkgIEFzc2VydGlvbiBzaG91bGQgY2hlY2sgZm9yIENMT0NLX0xPU1QsIG5vdCBORVdfQ0xPQ0sgKCMzMjE2NDgpLgorCSAgKiBnc3QvZ3N0cGFkdGVtcGxhdGUuaDoKKwkgICogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuaDoKKwkgIERvbid0IHVzZSBjKysgc3R5bGUgY29tbWVudHMgaW4gaGVhZGVycyAoIzMyMTYzOCkuCisKKzIwMDUtMTEtMTYgMTg6Mzc6NTcgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L25ldC9nc3RuZXR0aW1lcGFja2V0LmMgKGdzdF9uZXRfdGltZV9wYWNrZXRfc2VuZCk6IEZyZWUgYnVmZmVyLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTExLTE2ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvbmV0L2dzdG5ldHRpbWVwYWNrZXQuYyAoZ3N0X25ldF90aW1lX3BhY2tldF9zZW5kKTogRnJlZQorCSAgYnVmZmVyLgorCisyMDA1LTExLTE2IDE4OjE2OjUxICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGNoZWNrL25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzogQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHRpbWUgcHJvdmlkZXIgYWN0dWFsbHkgcHJvdmlkZXMgdGltZXMuIFdvcmtzLCB5byEKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0xNiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogY2hlY2svbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jOiBDaGVjayB0byBzZWUgdGhhdCB0aGUgdGltZQorCSAgcHJvdmlkZXIgYWN0dWFsbHkgcHJvdmlkZXMgdGltZXMuIFdvcmtzLCB5byEKKworMjAwNS0xMS0xNiAxODowOTo0NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgY2hlY2svTWFrZWZpbGUuYW06IEVuYWJsZSBtb3JlIHRlc3RzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL01ha2VmaWxlLmFtOgorCSAgRW5hYmxlIG1vcmUgdGVzdHMuCisJICAqIGNoZWNrL2VsZW1lbnRzL2Zha2VzcmMuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgIFNldCBlbGVtZW50IHRvIE5VTEwgYmVmb3JlIGRpc3Bvc2luZyBpdC4KKworMjAwNS0xMS0xNiAxNzo1Mzo1NCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJKiBnc3QvbmV0L01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvbmV0L01ha2VmaWxlLmFtOgorCSAgZml4CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGZpeAorCisyMDA1LTExLTE2IDE3OjUyOjA0ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGdzdC9uZXQvOiBVc2UgdGhlIHRpbWVwYWNrZXQgc3R1ZmYgaW4gdGhlIHByb3ZpZGVyLCBpbmNsdWRlIGl0IGZyb20gZ3N0bmV0LmgsIGFuZCBhZGQgaXQgdG8gdGhlIGJ1aWxkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTExLTE2ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvbmV0L01ha2VmaWxlLmFtOgorCSAgKiBnc3QvbmV0L2dzdG5ldC5oOgorCSAgKiBnc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jOgorCSAgKiBnc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5oOiBVc2UgdGhlIHRpbWVwYWNrZXQgc3R1ZmYgaW4gdGhlCisJICBwcm92aWRlciwgaW5jbHVkZSBpdCBmcm9tIGdzdG5ldC5oLCBhbmQgYWRkIGl0IHRvIHRoZSBidWlsZC4KKwkgICogZ3N0L25ldC9nc3RuZXR0aW1lcGFja2V0Lmg6CisJICAqIGdzdC9uZXQvZ3N0bmV0dGltZXBhY2tldC5jOiBOZXcgZmlsZXMsIGFic3RyYWN0cyBvdXQgdGhlIHBhY2tldAorCSAgc2VuZGluZyBhbmQgcmVjZWl2aW5nLgorCisyMDA1LTExLTE2IDE3OjM1OjA3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBjaGVjay9NYWtlZmlsZS5hbTogRW5hYmxlIHZhbGdyaW5kIGNoZWNrLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL01ha2VmaWxlLmFtOgorCSAgRW5hYmxlIHZhbGdyaW5kIGNoZWNrLgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiAoZ3N0X2Zha2Vfc3JjX2FsbG9jX3BhcmVudCksCisJICAoZ3N0X2Zha2Vfc3JjX2FsbG9jX2J1ZmZlcik6CisJICBGaXggbWVtbGVhay4KKworMjAwNS0xMS0xNiAxNzoyMjozNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzogQ2FsbCBwYXJlbnQgZmluYWxpemUgdG9vLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmM6IChnc3RfbmV0X3RpbWVfcHJvdmlkZXJfZmluYWxpemUpOgorCSAgQ2FsbCBwYXJlbnQgZmluYWxpemUgdG9vLgorCisyMDA1LTExLTE2IDE3OjE4OjM0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBjaGVjay9NYWtlZmlsZS5hbTogRW5hYmxlIHZhbGdyaW5kIGNoZWNrIHRoYXQgc2hvdWxkIHdvcmsgZmluZSBub3cuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svTWFrZWZpbGUuYW06CisJICBFbmFibGUgdmFsZ3JpbmQgY2hlY2sgdGhhdCBzaG91bGQgd29yayBmaW5lIG5vdy4KKwkgICogZ3N0L2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOiAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2luaXQpOgorCSAgKiBnc3QvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9pbml0KToKKwkgIEZpeCBtZW1sZWFrcyBpbiBwYWQgYWxsb2NhdGlvbi4KKworMjAwNS0xMS0xNiAxNjo0OTo0OSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvbmV0LzogTmV3IHBhcnQgb2YgY29yZSB0byBob2xkIG5ldHdvcmsgZWxlbWVudHMgYW5kIG9iamVjdHMuIFB1dCBpbiBjb3JlIGJlY2F1c2UgaXQgZXhwb3NlcyBBUEkgdGhhdCBhcHBsaWNhdGlvbnMuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0xNiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L25ldC9NYWtlZmlsZS5hbToKKwkgICogZ3N0L25ldC9nc3RuZXQuaDogTmV3IHBhcnQgb2YgY29yZSB0byBob2xkIG5ldHdvcmsgZWxlbWVudHMgYW5kCisJICBvYmplY3RzLiBQdXQgaW4gY29yZSBiZWNhdXNlIGl0IGV4cG9zZXMgQVBJIHRoYXQgYXBwbGljYXRpb25zIHdhbnQKKwkgIHRvIHVzZS4gVGhlIGxpYnJhcnkgaXMgbmFtZWQgbGliZ3N0bmV0LXRlbXBuYW1lIHJpZ2h0IG5vdyBiZWNhdXNlCisJICBvZiB0aGUgZXhpc3RpbmcgbGliZ3N0bmV0IGluIGdzdC1wbHVnaW5zLWJhc2UuIFNvbHV0aW9uIGlzCisJICBwcm9iYWJseSB0byByZW5hbWUgdGhlIG9uZSBpbiBwbHVnaW5zLWJhc2U7IHdpbGwgZmlsZSBhIGJ1ZyBmb3IKKwkgIHRoZSBmcmVlemUgYnJlYWsuCisJICAqIGdzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmM6CisJICAqIGdzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmg6IE5ldyBvYmplY3QgdG8gZXhwb3J0IGEgR3N0Q2xvY2sncworCSAgZ2V0X3RpbWUgY2FsbCBvdmVyIHRoZSBuZXR3b3JrLgorCSAgKiBjb25maWd1cmUuYWM6CisJICAqIGdzdC9NYWtlZmlsZS5hbSAobGliX0xUTElCUkFSSUVTKTogQWRkIGdzdG5ldCB0byB0aGUgYnVpbGQuCisJICAqIGNoZWNrL01ha2VmaWxlLmFtOgorCSAgKiBjaGVjay9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmM6IEEgbW9zdCBtaW5pbWFsIHRlc3Qgc3VpdGUuIFdpbGwKKwkgIGdldCBhZGRpdGlvbnMgc2hvcnRseS4KKworMjAwNS0xMS0xNiAxNjowOTo0OSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGdzdC9nc3RwYWQuKjogYWRkIGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlIGZ1bmN0aW9ucworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlKToKKwkgICogZ3N0L2dzdHBhZC5oOgorCSAgYWRkIGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlIGZ1bmN0aW9ucworCSAgKiBnc3QvY2hlY2svZ3N0Y2hlY2suYzogKGdzdF9jaGVja19zZXR1cF9zcmNfcGFkKSwKKwkgIChnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQpOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0dGVlLmM6IChnc3RfdGVlX2luaXQpOgorCSAgYW5kIHVzZSB0aGVtCisKKzIwMDUtMTEtMTYgMTY6MDY6MDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RwYWQuYzogUmVtb3ZlZCB3YXJuaW5nLCBpdCdzIG5vdCByZWFseSBhbiBlcnJvciBlaXRoZXIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9wYXVzZV90YXNrKToKKwkgIFJlbW92ZWQgd2FybmluZywgaXQncyBub3QgcmVhbHkgYW4gZXJyb3IgZWl0aGVyLgorCisyMDA1LTExLTE2IDE0OjI3OjIwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IENoZWNrIGlmIHRoZSBjYXBzIGFyZSBOVUxMLCB0aGlzIGNhbiBoYXBwZW4gaWYgdGhlIGVsZW1lbnQgaXMgc2h1dHRpbmcgZG93biBhbmQgdGhlIHBhZCAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3ByZXBhcmVfb3V0cHV0X2J1ZiksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2V2ZW50KToKKwkgIENoZWNrIGlmIHRoZSBjYXBzIGFyZSBOVUxMLCB0aGlzIGNhbiBoYXBwZW4gaWYgdGhlIGVsZW1lbnQKKwkgIGlzIHNodXR0aW5nIGRvd24gYW5kIHRoZSBwYWQgY2FwcyBhcmUgc2V0IHRvIE5VTEwuCisKKzIwMDUtMTEtMTYgMTI6NTc6NTEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBnc3QvZWxlbWVudHMvZ3N0dGVlLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgorCSAgZml4IHBhZCB0ZW1wYWx0ZSBsZWFrIGluIHRlZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaXggcGFkIHRlbXBhbHRlIGxlYWsgaW4gdGVlCisKKzIwMDUtMTEtMTYgMTI6NDA6MTggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBnc3QvOiB1c2UgZ3N0X29iamVjdF9yZWYgd2hlbiBzZXR0aW5nIHRoZSBwYWQgdGVtcGxhdGU7IHRoaXMgd2lsbCB0cmlnZ2VyIHRoZSBwYWQgdGVtcGxhdGUgbGVha3Mgb24gR0xpYiAyLjYgYW5kIHRoZSAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ2xpYi1jb21wYXQuYzogKGdfdmFsdWVfZHVwX2dzdF9vYmplY3QpOgorCSAgKiBnc3QvZ2xpYi1jb21wYXQuaDoKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9zZXRfcHJvcGVydHkpOgorCSAgdXNlIGdzdF9vYmplY3RfcmVmIHdoZW4gc2V0dGluZyB0aGUgcGFkIHRlbXBsYXRlOyB0aGlzIHdpbGwKKwkgIHRyaWdnZXIgdGhlIHBhZCB0ZW1wbGF0ZSBsZWFrcyBvbiBHTGliIDIuNiBhbmQgdGhlIHNsYXZlcworCisyMDA1LTExLTE2IDEyOjI1OjIyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0LzogcmVtb3ZlIGZ1bmN0aW9ucyBjb3BpZWQgZnJvbSBHTGliIDIuNgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nbGliLWNvbXBhdC5jOiAoZ3N0X2ZsYWdzX2dldF9maXJzdF92YWx1ZSk6CisJICAqIGdzdC9nbGliLWNvbXBhdC5oOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzoKKwkgIHJlbW92ZSBmdW5jdGlvbnMgY29waWVkIGZyb20gR0xpYiAyLjYKKworMjAwNS0xMS0xNiAxMToyOTo1NyArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgorCisJICBnc3QvTWFrZWZpbGUuYW06IERvbid0IGxpbmsgYWdhaW5zdCBWQUxHUklORF9MSUJTLiBUaGF0IHdhcyBhbHdheXMgdGhlIHdyb25nIHRoaW5nIHRvIGRvLCBidXQgb25seSBicmVha3Mgd2l0aCBuZXdlciAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvTWFrZWZpbGUuYW06CisJICBEb24ndCBsaW5rIGFnYWluc3QgVkFMR1JJTkRfTElCUy4gVGhhdCB3YXMgYWx3YXlzIHRoZSB3cm9uZyB0aGluZyB0bworCSAgZG8sIGJ1dCBvbmx5IGJyZWFrcyB3aXRoIG5ld2VyIHZhbGdyaW5kIHZlcnNpb25zLiBXZSdyZSBub3QgYQorCSAgdmFsZ3JpbmQgdG9vbCwgd2UgaGF2ZSBubyBsaW5rLXRpbWUgZGVwZW5kZW5jaWVzIG9uIGxpYmNvcmVncmluZC4KKworMjAwNS0xMS0xNiAxMTowNjowNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogc29tZSBkZWJ1ZyBjaGFuZ2VzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfbmVnb3RpYXRlKToKKwkgIHNvbWUgZGVidWcgY2hhbmdlcworCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgorCSAgdHlwbyBmaXhlcworCisyMDA1LTExLTE1IDIzOjUzOjA4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogZ3N0L2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSogZ3N0L2dzdHF1ZXVlLmM6CisJKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkgIFJldmVydCBhbGwgdGhlc2UgdW5yZWZzLCB0aGV5IGRvbid0IGV2ZW4gcGFzcyBtYWtlIGNoZWNrICEKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUmV2ZXJ0IGFsbCB0aGVzZSB1bnJlZnMsIHRoZXkgZG9uJ3QgZXZlbiBwYXNzIG1ha2UgY2hlY2sgIQorCisyMDA1LTExLTE1IDE5OjQ4OjQwICswMDAwICBKb2hhbiBEYWhsaW4gPGpvaGFuQGdub21lLm9yZz4KKworCSogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogZ3N0L2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSogZ3N0L2dzdHF1ZXVlLmM6CisJKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkgIEFuZCBnc3Rfb2JqZWN0X3VucmVmIGhlcmUgdG9vCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIEFuZCBnc3Rfb2JqZWN0X3VucmVmIGhlcmUgdG9vCisKKzIwMDUtMTEtMTUgMTk6MzE6MDUgKzAwMDAgIEpvaGFuIERhaGxpbiA8am9oYW5AZ25vbWUub3JnPgorCisJICBnc3QvOiBGcmVlIHBhZCB0ZW1wbGF0ZXMsIGZpeGVzIGEgY291cGxlIG9mIGxlYWtzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19pbml0KToKKwkgICogZ3N0L2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOiAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2luaXQpOgorCSAgKiBnc3QvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9pbml0KToKKwkgIEZyZWUgcGFkIHRlbXBsYXRlcywgZml4ZXMgYSBjb3VwbGUgb2YgbGVha3MuCisKKzIwMDUtMTEtMTUgMTk6MjQ6NDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RwYWQuYzogR1NUX1BBRF9QQURfVEVNUExBVEUocGFkKSBnZXRzIHRoZSBwYWQgdGVtcGxhdGUsIHdoaWxlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFJldmlld2VkIGJ5OiBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfZ2V0X3Byb3BlcnR5KToKKwkgIEdTVF9QQURfUEFEX1RFTVBMQVRFKHBhZCkgZ2V0cyB0aGUgcGFkIHRlbXBsYXRlLCB3aGlsZQorCSAgR1NUX1BBRF9URU1QTEFURShwYWQpIGRvZXMgYSBjYXN0LiBXZSB3YW50IHRoZSBmb3JtZXIgaGVyZS4KKwkgICgjMzIxNDUyKQorCisyMDA1LTExLTE1IDE4OjM0OjI4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0ZXZlbnQuYzogU21hbGwgZG9jIHVwZGF0ZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZXZlbnQuYzoKKwkgIFNtYWxsIGRvYyB1cGRhdGUuCisKKzIwMDUtMTEtMTUgMTc6NTc6NTEgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdGVsZW1lbnQuYyAoZ3N0X2VsZW1lbnRfc2V0X2Jhc2VfdGltZSk6IEFkZCBkZWJ1Z2dpbmcuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTEtMTUgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3RlbGVtZW50LmMgKGdzdF9lbGVtZW50X3NldF9iYXNlX3RpbWUpOiBBZGQgZGVidWdnaW5nLgorCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYyAoZ3N0X3BpcGVsaW5lX3NldF9uZXdfc3RyZWFtX3RpbWUpOiBEb2N1bWVudAorCSAgdXNpbmcgR1NUX0NMT0NLX1RJTUVfTk9ORSB0byBkaXNhYmxlIGJhc2UgdGltZSBtYW5hZ2VtZW50LgorCSAgKGRvX3BpcGVsaW5lX3NlZWssIGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpOiBEb24ndCByZXNldCBzdHJlYW0KKwkgIHRpbWUgaWYgaXQgd2FzIE5PTkUgYmVmb3JlLgorCSAgKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpOiBPbmx5IG11bmdlIHRoZSBiYXNlIHRpbWUgaWYKKwkgIHN0cmVhbV90aW1lICE9IEdTVF9DTE9DS19USU1FX05PTkUuCisJICAqIGNoZWNrL2dzdC9nc3RwaXBlbGluZS5jICh0ZXN0X2Jhc2VfdGltZSk6IFB1bnQgYXJvdW5kIHRoZQorCSAgcHJvYmxlbSBvZiB0aGUgcHJvYmUgbm90IGJlaW5nIGNhbGxlZCwgYmVjYXVzZSB0aGF0J3Mgbm90IHRoZQorCSAgaXNzdWUgSSdtIGxvb2tpbmcgYXQuIEFkZCBhIGNoZWNrIHRoYXQgc2V0dGluZyBzdHJlYW1fdGltZSB0byBOT05FCisJICBkaXNhYmxlcyBiYXNlIHRpbWUgbWFuYWdlbWVudC4KKworMjAwNS0xMS0xNSAxNzoxODoxMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogc2VnbWVudF9zdG9wID09IC0xIGF0IHN0YXJ0dXAuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKKwkgIHNlZ21lbnRfc3RvcCA9PSAtMSBhdCBzdGFydHVwLgorCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1fZXZlbnQpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9jaGFuZ2Vfc3RhdGUpOgorCSAgSW5pdCBzZWdtZW50IHZhbHVlcyBhdCBzdGFydC4KKworMjAwNS0xMS0xNSAxNjo1Mjo0NiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBjaGVjay9nc3QvZ3N0cGlwZWxpbmUuYyAodGVzdF9iYXNlX3RpbWUpOiBQdW50IGFyb3VuZCB0aGUgcHJvYmxlbSBvZiB0aGUgcHJvYmUgbm90IGJlaW5nIGNhbGxlZCwgYmVjYXVzZSB0aGF0J3Mgbm90IHQuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0xNSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmMgKHRlc3RfYmFzZV90aW1lKTogUHVudCBhcm91bmQgdGhlCisJICBwcm9ibGVtIG9mIHRoZSBwcm9iZSBub3QgYmVpbmcgY2FsbGVkLCBiZWNhdXNlIHRoYXQncyBub3QgdGhlCisJICBpc3N1ZSBJJ20gbG9va2luZyBhdC4uLgorCisyMDA1LTExLTE1IDE2OjQ3OjA3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAwIHNlZ21lbnQgdmFsdWVzIGFyZSAwIGluIGFueSBmb3JtYXQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfaGFuZGxlX29iamVjdCk6CisJICAwIHNlZ21lbnQgdmFsdWVzIGFyZSAwIGluIGFueSBmb3JtYXQuCisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV9ldmVudCk6CisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKKwkgIFBhcnNlIG5ld3NlZ21lbnQgY29ycmVjdGx5IGluIGJhc2V0cmFuc2Zvcm0KKwkgICogZ3N0L2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IChnc3RfaWRlbnRpdHlfdHJhbnNmb3JtX2lwKToKKwkgIFN5bmMgdG8gY2xvY2sgdXNpbmcgdXBkYXRlZCBzZWdtZW50IHZhbHVlcy4KKworMjAwNS0xMS0xNSAxNjoyNzowNCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBjaGVjay9nc3QvZ3N0cGlwZWxpbmUuYyAodGVzdF9iYXNlX3RpbWUpOiBBZGQgY2hlY2sgdGhhdCB0aGUgYmFzZSB0aW1lIGFuZCBzdHJlYW0gdGltZSBhcmUgcmVzZXQgY29ycmVjdGx5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTExLTE1ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBjaGVjay9nc3QvZ3N0cGlwZWxpbmUuYyAodGVzdF9iYXNlX3RpbWUpOiBBZGQgY2hlY2sgdGhhdCB0aGUKKwkgIGJhc2UgdGltZSBhbmQgc3RyZWFtIHRpbWUgYXJlIHJlc2V0IGNvcnJlY3RseS4KKworMjAwNS0xMS0xNSAxNTo0NDo0NiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDogU29tZSBtb3JlIFRPRE8gaXRlbXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKKwkgIFNvbWUgbW9yZSBUT0RPIGl0ZW1zLgorCisyMDA1LTExLTE1IDEyOjM1OjQ1ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmMgKGdzdF9mYWtlX3NyY19jcmVhdGUpOiBJdCdzIG5vdCBhbiBlcnJvciBpZiB0aGUgdXNlciBzZWxlY3RlZCAibm8gY2xvY2siIGFzIHRoZSBjbG9ja2luZyBtZS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTExLTE1ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jIChnc3RfZmFrZV9zcmNfY3JlYXRlKTogSXQncyBub3QgYW4KKwkgIGVycm9yIGlmIHRoZSB1c2VyIHNlbGVjdGVkICJubyBjbG9jayIgYXMgdGhlIGNsb2NraW5nIG1ldGhvZC4KKworMjAwNS0xMS0xNSAxMjoyOTowNyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBjaGVjay9nc3QvZ3N0cGlwZWxpbmUuYyAodGVzdF9iYXNlX3RpbWUpOiBOZXcgdGVzdCBmb3IgYnVmZmVyIHRpbWVzdGFtcHMgd2l0aCBsaXZlIGNhcHR1cmUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTEtMTUgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGNoZWNrL2dzdC9nc3RwaXBlbGluZS5jICh0ZXN0X2Jhc2VfdGltZSk6IE5ldyB0ZXN0IGZvciBidWZmZXIKKwkgIHRpbWVzdGFtcHMgd2l0aCBsaXZlIGNhcHR1cmUuCisJICAqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmMgKGdzdF9mYWtlX3NyY19jcmVhdGUpOiBJZiB0aGUgZGF0YXJhdGUKKwkgIGlzIDAgYnV0IHdlIGFyZSBhIGxpdmUgc291cmNlLCB0aW1lc3RhbXAgdGhlIGJ1ZmZlcnMgdXNpbmcgdGhlCisJICBlbGVtZW50J3MgY2xvY2suCisKKzIwMDUtMTEtMTQgMTU6MTU6NDMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgbW9yZSBzZWN0aW9uIGRvY3MKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBnc3QvZ3N0ZXJyb3IuYzoKKwkgICogZ3N0L2dzdGdob3N0cGFkLmM6CisJICAqIGdzdC9nc3RvYmplY3QuaDoKKwkgICogZ3N0L2dzdHhtbC5jOgorCSAgbW9yZSBzZWN0aW9uIGRvY3MKKworMjAwNS0xMS0xNCAxNDo0NTo0MyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgY29tbW9uL2dzdC5zdXBwOiBhZGQgc3VwcHJlc3Npb25zIGZyb20gV2ltJ3MgRGViaWFuIG1hY2hpbmUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb21tb24vZ3N0LnN1cHA6CisJICBhZGQgc3VwcHJlc3Npb25zIGZyb20gV2ltJ3MgRGViaWFuIG1hY2hpbmUKKworMjAwNS0xMS0xNCAxNDozNjoxNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGNvbW1vbi9nc3Quc3VwcDogYWRkIHN1cHByZXNzaW9ucyBmcm9tIEFuZHkncyBBTUQ2NCBVYnVudHUgbWFjaGluZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbW1vbi9nc3Quc3VwcDoKKwkgIGFkZCBzdXBwcmVzc2lvbnMgZnJvbSBBbmR5J3MgQU1ENjQgVWJ1bnR1IG1hY2hpbmUKKworMjAwNS0xMS0xNCAxMjo0Mzo0MyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0cGFkLmMgKGdzdF9wYWRfc2V0X2FjdGl2ZSk6IENoYW5nZSBkb2NzOyBwYXJlbnQncworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTExLTE0ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvZ3N0cGFkLmMgKGdzdF9wYWRfc2V0X2FjdGl2ZSk6IENoYW5nZSBkb2NzOyBwYXJlbnQncworCSAgU1RBVEVfTE9DSyBub3QgbmVjZXNzYXJ5LiBGaXhlcyAjMzExNDg5LgorCisyMDA1LTExLTE0IDEyOjE3OjQ2ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGdzdC9nc3RlcnJvci5jIChGSUxFX0FfQlVHKTogQmUgcG9saXRlICphbmQqIGhlbHBmdWwuIEZpeGVzICMzMDUyOTEuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTEtMTQgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3RlcnJvci5jIChGSUxFX0FfQlVHKTogQmUgcG9saXRlICphbmQqIGhlbHBmdWwuIEZpeGVzCisJICAjMzA1MjkxLgorCisyMDA1LTExLTE0IDExOjU4OjQ0ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGdzdC9nc3RpbmRleC5jIChnc3RfaW5kZXhfYWRkX29iamVjdCk6IE5vdGUgaW4gdGhlIGRvY3MgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0xNCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdGluZGV4LmMgKGdzdF9pbmRleF9hZGRfb2JqZWN0KTogTm90ZSBpbiB0aGUgZG9jcyB0aGF0CisJICB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZC4KKworMjAwNS0xMS0xNCAxMDo0OTozNSArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+CisKKwkgIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogUmVmIHRoZSBzb3VyY2UgcGFkIGNhcHMgd2hpbGUgd2UgbmVlZCB0aGVtLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTExLTE0ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+CisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fcHJlcGFyZV9vdXRwdXRfYnVmKToKKwkgIFJlZiB0aGUgc291cmNlIHBhZCBjYXBzIHdoaWxlIHdlIG5lZWQgdGhlbS4KKwkgIEZpeGVzICgjMzIxMzg2KQorCisyMDA1LTExLTEyIDEwOjIzOjUyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogY2hlY2svcGlwZWxpbmVzLy5naXRpZ25vcmU6CisJKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvLmdpdGlnbm9yZToKKwkgIGlnbm9yZSBtb3JlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGlnbm9yZSBtb3JlCisKKzIwMDUtMTEtMTIgMTA6MDQ6MDEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICB1cGRhdGUgd2luMzIgZmlsZXMgZm9yIEhFQUQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgdXBkYXRlIHdpbjMyIGZpbGVzIGZvciBIRUFECisKKzIwMDUtMTEtMTIgMTA6MDM6MDggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBnc3QvZ3N0dGFzay5jOgorCSAgZGVidWcgdGFzayBqb2luCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGRlYnVnIHRhc2sgam9pbgorCisyMDA1LTExLTEyIDEwOjAwOjAzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZG9jcy9tYW51YWwvYXBwZW5kaXgtcXVvdGVzLnhtbDoKKwkgIGZvdW5kIGFub3RoZXIgcXVvdGUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZm91bmQgYW5vdGhlciBxdW90ZQorCisyMDA1LTExLTExIDIwOjEyOjQyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBBZGRlZCBzb21lIGRvY3MgZm9yIEdzdENvbGxlY3REYXRhLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICBBZGRlZCBzb21lIGRvY3MgZm9yIEdzdENvbGxlY3REYXRhLgorCSAgKiBnc3QvYmFzZS9nc3RhZGFwdGVyLmM6CisJICBTb21lIHNtYWxsIGNvZGUgZXhhbXBsZSBmaXguCisJICAqIGdzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6CisJICAqIGdzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg6CisJICBEb2N1bWVudCBzb21lIG1vcmUuCisKKzIwMDUtMTEtMTEgMTk6MjY6MzYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBjb25maWd1cmUuYWM6CisJICBiYWNrIHRvIGhlYWQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYmFjayB0byBoZWFkCisKKz09PSByZWxlYXNlIDAuOS41ID09PQorCisyMDA1LTExLTExIDE5OjI0OjMwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogTkVXUzoKKwkqIFJFTEVBU0U6CisJKiBjb25maWd1cmUuYWM6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICByZWxlYXNpbmcgMC45LjUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVsZWFzaW5nIDAuOS41CisKKzIwMDUtMTEtMTEgMTg6MjU6NTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RidWZmZXIuYzogQ29weSBtb3JlIGZsYWdzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RidWZmZXIuYzogKF9nc3RfYnVmZmVyX2NvcHkpOgorCSAgQ29weSBtb3JlIGZsYWdzLgorCSAgKiBnc3QvZ3N0Y2Fwcy5jOiAoZ3N0X2NhcHNfaXNfZXF1YWwpOgorCSAgRml4IHNvbWUgZG9jcy4KKwkgIE1ha2UgX2lzX2VxdWFsIGZhc3QgaW4gdGhlIHRyaXZpYWwgY2FzZXMuCisJICAqIGdzdC9nc3RtaW5pb2JqZWN0LmM6CisJICAqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6CisJICBNb3JlIGRvY3MuIFNwaWZpZnkgLmggZmlsZS4KKwkgICogZ3N0L2dzdHV0aWxzLmM6CisJICBTbWFsbCBkb2MgdXBkYXRlLgorCisyMDA1LTExLTExIDE3OjE2OjE4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogcG8vYWYucG86CisJKiBwby9hei5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kZS5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZnIucG86CisJKiBwby9pdC5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9ydS5wbzoKKwkqIHBvL3NxLnBvOgorCSogcG8vc3IucG86CisJKiBwby9zdi5wbzoKKwkqIHBvL3RyLnBvOgorCSogcG8vdWsucG86CisJKiBwby92aS5wbzoKKwkgIFVwZGF0ZSAucG8gZmlsZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgVXBkYXRlIC5wbyBmaWxlcworCisyMDA1LTExLTExIDE2OjM3OjExICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IFNtYWxsIGNsZWFudXBzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fcHJlcGFyZV9vdXRwdXRfYnVmKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1faGFuZGxlX2J1ZmZlcik6CisJICBTbWFsbCBjbGVhbnVwcy4KKwkgIElmIHdlJ3JlIHByb2Nlc3NpbmcgYSBidWZmZXIgYW5kIG5lZWQgdG8gYWxsb2NhdGUgYW4gb3V0cHV0CisJICBidWZmZXIsIHdlIGNhbm5vdCBhY2NlcHQgYSBmb3JtYXQgY2hhbmdlLiBJZiB3ZSBkaWQgZ2V0IGEKKwkgIGZvcm1hdCBjaGFuZ2UsIHdlIGhhdmUgdG8gYWxsb2MgYSBidWZmZXIgb3Vyc2VsdmVzIG9mIHRoZQorCSAgcmlnaHQgc2l6ZS4KKworMjAwNS0xMS0xMSAxNjozNDoxNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHBhZC5jOiBXaGlsZSBjaGVja2luZyB0aGUgZmxhZyBmb3IgcmVlbnRyYW5jeSBpbiB0aGUgZ3N0Y2FwcyBmdW5jdGlvbiBpcyBuaWNlIHRvIGRldGVjdCByZWN1cnNpdmUgaW52b2NhdGlvbnMsLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9nZXRfY2FwcyksIChnc3RfcGFkX3BlZXJfZ2V0X2NhcHMpOgorCSAgV2hpbGUgY2hlY2tpbmcgdGhlIGZsYWcgZm9yIHJlZW50cmFuY3kgaW4gdGhlIGdzdGNhcHMgZnVuY3Rpb24KKwkgIGlzIG5pY2UgdG8gZGV0ZWN0IHJlY3Vyc2l2ZSBpbnZvY2F0aW9ucywgaXQgYWxzbyBtYWtlcyBpdAorCSAgaW1wb3NzaWJsZSB0byBjYWxsIGdldGNhcHMgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLCB3aGljaCBtdXN0IGJlCisJICBwb3NzaWJsZS4gU28sIGNoZWNraW5nIGZvciByZWN1cnNpdmUgY2FsbHMgaGFzIHRvIGdvLgorCisyMDA1LTExLTExIDE1OjE5OjM3ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+CisKKwkgIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IERvbid0IHN5bmMgb24gYnVmZmVycyB0aGF0IGZhbGwgcGFydGlhbGx5IG91dHNpZGUgb3VyIGN1cnJlbnQgc2VnbWVudC4gUHJldmVudHMgYW4gYXNzZXJ0aW9uIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpOgorCSAgRG9uJ3Qgc3luYyBvbiBidWZmZXJzIHRoYXQgZmFsbCBwYXJ0aWFsbHkgb3V0c2lkZSBvdXIgY3VycmVudAorCSAgc2VnbWVudC4gUHJldmVudHMgYW4gYXNzZXJ0aW9uIGZhaWx1cmUvYWJvcnQgcGxheWluZyBzb21lIGZpbGVzLgorCisyMDA1LTExLTEwIDE4OjE1OjI0ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGNoZWNrL2dzdC9nc3RiaW4uYyAodGVzdF9tZXNzYWdlX3N0YXRlX2NoYW5nZWRfY2hpbGRyZW4pOiBTdHlsZSBmaXguLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTExLTEwICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBjaGVjay9nc3QvZ3N0YmluLmMgKHRlc3RfbWVzc2FnZV9zdGF0ZV9jaGFuZ2VkX2NoaWxkcmVuKTogU3R5bGUKKwkgIGZpeC4uCisJICAqIGdzdC9nc3RidXMuYyAocG9sbF9kZXN0cm95LCBwb2xsX2Z1bmMsIGdzdF9idXNfcG9sbCk6IEltcGxlbWVudAorCSAgZ3N0X2J1c19wb2xsIHdpdGggdGhlIHNpZ25hbCB3YXRjaC4gRW5zdXJlcyB0aGF0IHBvbGwgYW5kIGEgc2lnbmFsCisJICB3YXRjaCBzZWUgdGhlIHNhbWUgbWVzc2FnZXMuCisJICAqIGNoZWNrL2dzdC9nc3RidXMuYyAodGVzdF93YXRjaF93aXRoX3BvbGwpOiBOZXcgdGVzdCwgY2hlY2tzIHRoYXQKKwkgIGEgcG9sbCBhbmQgYSB3YXRjaCBhdCB0aGUgc2FtZSB0aW1lIGdldCB0aGUgc2FtZSBtZXNzYWdlcy4KKworMjAwNS0xMS0xMCAxNzozNzozOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGdzdC86IERvbid0IGNhbGwgZ3N0X2NhcHNfZG9fc2ltcGxpZnkgLSBpdCBkb2Vzbid0IHJlc3BlY3Qgb3JkZXIgb2YgY2FwcyBhbmQgaXQncyBub3QgbmVlZGVkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV90cmFuc2Zvcm1fY2Fwcyk6CisJICAqIGdzdC9nc3RjYXBzLmM6IChnc3RfY2Fwc19pbnRlcnNlY3QpOgorCSAgRG9uJ3QgY2FsbCBnc3RfY2Fwc19kb19zaW1wbGlmeSAtIGl0IGRvZXNuJ3QgcmVzcGVjdCBvcmRlciBvZiBjYXBzCisJICBhbmQgaXQncyBub3QgbmVlZGVkLgorCisyMDA1LTExLTEwIDE1OjA3OjQ2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OiBVcGRhdGVkIHRvZG8uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKKwkgIFVwZGF0ZWQgdG9kby4KKworMjAwNS0xMS0xMCAxNDo0NToyNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2Jhc2UvOiBJbXBsZW1lbnQgY2xvY2sgc3luYyBpbiBiYXNlIGNsYXNzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfd2FpdCksCisJICAoZ3N0X2Jhc2Vfc3JjX2RvX3N5bmMpLCAoZ3N0X2Jhc2Vfc3JjX2dldF9yYW5nZSk6CisJICBJbXBsZW1lbnQgY2xvY2sgc3luYyBpbiBiYXNlIGNsYXNzLgorCisyMDA1LTExLTEwIDEyOjMyOjU3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0c3RydWN0dXJlLmM6IEZvcndhcmQtcG9ydCBhIDAuOCBwYXRjaCB0byBoYW5kbGUgZXNjYXBlZCBzcGFjZXMgaW4gc3RydWN0dXJlIHN0cmluZywgICAgICAgICAgc28gdGhhdCBnc3RfcGFyc2UuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcGF0Y2ggYnk6IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgorCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6IChnc3Rfc3RydWN0dXJlX3BhcnNlX2ZpZWxkKSwKKwkgIChnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nKToKKwkgIEZvcndhcmQtcG9ydCBhIDAuOCBwYXRjaCB0byBoYW5kbGUgZXNjYXBlZCBzcGFjZXMgaW4gc3RydWN0dXJlIHN0cmluZywgICAgICAgICAgc28gdGhhdCBnc3RfcGFyc2VfbGF1bmNoKCkgY2FuIGRlYWwgd2l0aCBzcGFjZXMgaW4gZmlsdGVyZWQgbGluaworCSAgY2FwcyAoZml4ZXMgIzE2NDQ3OSkKKwkgICogY2hlY2svZ3N0L2NhcHNsaXN0Lmg6CisJICAqIGNoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgIGFkZCB1bml0IHRlc3RzIGZvciB0aGlzIGNoYW5nZQorCisyMDA1LTExLTEwIDExOjE3OjI2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBGaXggZG9jcywgbW92ZSBzb21lIFNUQVRFIG1hY3JvcyB0byBwcml2YXRlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6CisJICAqIGdzdC9nc3RlbGVtZW50Lmg6CisJICBGaXggZG9jcywgbW92ZSBzb21lIFNUQVRFIG1hY3JvcyB0byBwcml2YXRlLgorCisyMDA1LTExLTEwIDEwOjE3OjAxICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+CisKKwkqIGdzdC9nc3RxdWVyeS5jOgorCSogZ3N0L2dzdHF1ZXJ5Lmg6CisJICBGdXJ0aGVyIGltcHJvdmUgcXVlcnkgZG9jcy4gU3RpbGwgbm90IGhhcHB5IHdpdGggdGhpcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgRnVydGhlciBpbXByb3ZlIHF1ZXJ5IGRvY3MuIFN0aWxsIG5vdCBoYXBweSB3aXRoIHRoaXMuCisKKzIwMDUtMTEtMTAgMDk6MTk6MTIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGNoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOiBBZGRlZCBjaGVjayBmb3IgYnVnICMzMTczNDEKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9naG9zdF9wYWRfc3VpdGUpOgorCSAgQWRkZWQgY2hlY2sgZm9yIGJ1ZyAjMzE3MzQxCisJICAqIGdzdC9nc3RidWZmZXIuYzoKKwkgICogZ3N0L2dzdGJ1ZmZlci5oOgorCSAgU29tZSBtb3JlIHNwaWZmaWZ5aW5nLgorCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzogKGdzdF9naG9zdF9wYWRfZG9fbGluayk6CisJICBDYWxsIHBlZXIgbGlua2Z1bmN0aW9uIGlmIHdlIGFyZSBhIHNvdXJjZSBwYWQuIFRvdGFsbHkgZml4ZXMKKwkgICMzMTczNDEKKwkgICogZ3N0L2dzdHBhZC5jOgorCSAgVXBkYXRlIGRvY3MsIHNvdXJjZSBwYWRzIHNob3VsZCBjYWxsIHRoZSBwZWVyIGxpbmtmdW5jdGlvbgorCSAgc28gdGhleSBjYW4gYXRvbWljYWxseSBwZXJmb3JtIHRoZSBwYWQgbGluay4KKworMjAwNS0xMS0wOSAxOTozMjozMiArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgorCisJKiBnc3QvZ3N0cXVlcnkuYzoKKwkgIEltcHJvdmUvZml4IGRvY3VtZW50YXRpb24gZm9yIEdzdFF1ZXJ5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBJbXByb3ZlL2ZpeCBkb2N1bWVudGF0aW9uIGZvciBHc3RRdWVyeS4KKwkgIFRoaXMgc3RpbGwgbmVlZHMgc29tZSBtb3JlIHdvcmsgdG8gZXhwbGFpbiB3aGF0IHRoZSBxdWVyaWVzIGFjdHVhbGx5IG1lYW4uCisKKzIwMDUtMTEtMDkgMTg6NDE6NTMgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KKworCSogZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6CisJICBTbGlnaHRseSBwb2xpc2ggZG9jcyBmb3IgR3N0QWRhcHRlci4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgU2xpZ2h0bHkgcG9saXNoIGRvY3MgZm9yIEdzdEFkYXB0ZXIuCisKKzIwMDUtMTEtMDkgMTg6MTA6NTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RidWZmZXIuKjogVWJlci1zcGlmZnktc3BpZmZpZnkgc29tZSBtb3JlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RidWZmZXIuYzoKKwkgICogZ3N0L2dzdGJ1ZmZlci5oOgorCSAgVWJlci1zcGlmZnktc3BpZmZpZnkgc29tZSBtb3JlLgorCisyMDA1LTExLTA5IDE3OjU1OjEzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvOiBVc2UgR1NUX0RFQlVHX0ZVTkNQVFIoKSBtb3JlIGV4dGVuc2l2ZWx5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChnc3RfY29sbGVjdHBhZHNfYWRkX3BhZCk6CisJICAqIGdzdC9lbGVtZW50cy9nc3RmaWxlc2luay5jOiAoZ3N0X2ZpbGVfc2lua19pbml0KToKKwkgICogZ3N0L2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOiAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2luaXQpOgorCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzogKGdzdF9naG9zdF9wYWRfc2V0X2ludGVybmFsKSwKKwkgIChnc3RfZ2hvc3RfcGFkX2luaXQpLCAoZ3N0X2dob3N0X3BhZF9uZXdfbm90YXJnZXQpOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2luaXQpOgorCSAgVXNlIEdTVF9ERUJVR19GVU5DUFRSKCkgbW9yZSBleHRlbnNpdmVseS4KKworMjAwNS0xMS0wOSAxNzozMjoxMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdG9iamVjdC4qOiBEb2N1bWVudGF0aW9uIGZpeGVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RvYmplY3QuYzogKGdzdF9vYmplY3RfY2xhc3NfaW5pdCk6CisJICAqIGdzdC9nc3RvYmplY3QuaDoKKwkgIERvY3VtZW50YXRpb24gZml4ZXMuCisKKzIwMDUtMTEtMDkgMTc6MDY6MjAgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkgIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuYzogRml4IGRvY3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5jOgorCSAgRml4IGRvY3MuCisKKzIwMDUtMTEtMDkgMTY6NDQ6NDAgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkgIGdzdC86CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzoKKwkgICogZ3N0L2dzdHR5cGVmaW5kLmM6CisJICAqIGdzdC9nc3R0eXBlZmluZC5oOgorCisyMDA1LTExLTA5IDE2OjMyOjQ5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0aXRlcmF0b3IuYzogRml4IHJldmlzaW9uIGRhdGEuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGl0ZXJhdG9yLmM6CisJICBGaXggcmV2aXNpb24gZGF0YS4KKwkgICogZ3N0L2dzdHRhc2suYzoKKwkgICogZ3N0L2dzdHRhc2suaDoKKwkgIEZpeCBkb2NzLgorCisyMDA1LTExLTA5IDE2OjE2OjQxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvOiBGaXggZG9jcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKKwkgICogZ3N0L2dzdHVyaS5oOgorCSAgRml4IGRvY3MuCisKKzIwMDUtMTEtMDkgMTY6MDA6MDUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IE1vdmVkIHRoZSBtZXNzYWdlIGFzeW5jIGRlbGl2ZXJ5IHByaXZhdGUgbG9jayBhbmQgY29uZCB0byB0aGUgcHJpdmF0ZSBzZWN0aW9uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICBNb3ZlZCB0aGUgbWVzc2FnZSBhc3luYyBkZWxpdmVyeSBwcml2YXRlIGxvY2sgYW5kIGNvbmQKKwkgIHRvIHRoZSBwcml2YXRlIHNlY3Rpb24uCisJICAqIGdzdC9nc3RtZXNzYWdlLmM6CisJICAqIGdzdC9nc3RtZXNzYWdlLmg6CisJICBGaXhlZCBkb2NzLgorCisyMDA1LTExLTA5IDE1OjM0OjQ2ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBEb2N1bWVudCBHc3RVUklIYW5kbGVyCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdHVyaS5jOgorCSAgKiBnc3QvZ3N0dXJpLmg6CisJICBEb2N1bWVudCBHc3RVUklIYW5kbGVyCisKKzIwMDUtMTEtMDkgMTU6MzE6MDggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RpdGVyYXRvci4qOiBGaXggaXRlcmF0b3IgZG9jcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0aXRlcmF0b3IuYzogKGdzdF9pdGVyYXRvcl9mb2xkKSwgKGdzdF9pdGVyYXRvcl9mb3JlYWNoKSwKKwkgIChnc3RfaXRlcmF0b3JfZmluZF9jdXN0b20pOgorCSAgKiBnc3QvZ3N0aXRlcmF0b3IuaDoKKwkgIEZpeCBpdGVyYXRvciBkb2NzLgorCisyMDA1LTExLTA5IDE1OjEwOjMyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YmluLmg6IERvY3VtZW50IGFub3RoZXIgZmllbGQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5oOgorCSAgRG9jdW1lbnQgYW5vdGhlciBmaWVsZC4KKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmg6CisJICBEb2N1bWVudC4KKworMjAwNS0xMS0wOSAxMzoxNDoyNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJpbi5oOiBEb2N1bWVudGVkIHN0cnVjdHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5oOgorCSAgRG9jdW1lbnRlZCBzdHJ1Y3RzLgorCisyMDA1LTExLTA5IDEyOjM2OjE3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBBZGRlZCBzb21lIG5ldyBtYWNyb3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgIEFkZGVkIHNvbWUgbmV3IG1hY3Jvcy4KKwkgICogZ3N0L2dzdGNsb2NrLmM6CisJICAqIGdzdC9nc3RjbG9jay5oOgorCSAgKiBnc3QvZ3N0b2JqZWN0Lmg6CisJICBEb2NzIHVwZGF0ZXMuCisKKzIwMDUtMTEtMDkgMTI6MDE6NDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6IFNvbWUgbW9yZSBpdGVtcyBmb3IgdGhlIFRPRE8KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgorCSAgU29tZSBtb3JlIGl0ZW1zIGZvciB0aGUgVE9ETworCSAgKiBnc3QvZ3N0Y2Fwcy5jOgorCSAgKiBnc3QvZ3N0Y2Fwcy5oOgorCSAgRG9jdW1lbnQgR3N0Q2Fwcy4KKworMjAwNS0xMS0wOSAxMDowNjozMCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiBBZGQgdGhlIGJlZ2lubmluZyBvZiBkb2NzIGhlcmUgLS0gaGF2ZSB0byB3b3JrIG9uIHNvbWV0aGluZyBlbHNlIG5vdyB0aG8uLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0wOSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogQWRkIHRoZSBiZWdpbm5pbmcgb2YgZG9jcyBoZXJlIC0tIGhhdmUKKwkgIHRvIHdvcmsgb24gc29tZXRoaW5nIGVsc2Ugbm93IHRoby4uLgorCisyMDA1LTExLTA5IDA5OjQ4OjE2ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkqIENoYW5nZUxvZzoKKwkqIGdzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKKwkqIGdzdC9iYXNlL2dzdGFkYXB0ZXIuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmg6CisJICBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYyAoZ3N0X2ZpbGVfc2lua19zdGFydCkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0wOSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzaW5rLmMgKGdzdF9maWxlX3Npbmtfc3RhcnQpCisJICAoZ3N0X2ZpbGVfc2lua19zdG9wKTogTmV3IGZ1bmN0aW9ucywgcmVwbGFjZSB0aGUgc3RhdGUgY2hhbmdlCisJICBoYW5kbGVyLgorCSAgKGdzdF9maWxlX3NpbmtfY2xhc3NfaW5pdCk6IEhvb2sgdXAgdGhlIHN0YXJ0IGFuZCBzdG9wIGZ1bmN0aW9ucy4KKwkgIChnc3RfZmlsZV9zaW5rX2Jhc2VfaW5pdCk6IERvbid0IHNldCB0aGUgc3RhdGUgY2hhbmdlIGhhbmRsZXIgYW55CisJICBtb3JlLiBJdCB3YXMgYSBiaXQgdWdseSB0b28sIGJlaW5nIHNldCBmcm9tIGhlcmUuLi4KKwkgIChnc3RfZmlsZV9zaW5rX2dldF9wcm9wZXJ0eSwgZ3N0X2ZpbGVfc2lua19zZXRfcHJvcGVydHkpOgorCSAgQ2xlYW51cHMuLi4KKwkgIChnc3RfZmlsZV9zaW5rX3NldF9sb2NhdGlvbik6IE1vcmUgcm9idXN0IGNoZWNrIHRoYXQgZG9lc24ndCBjYWxsCisJICBHU1RfU1RBVEUuIFVnZ2dnZ2cuCisKKzIwMDUtMTEtMDkgMDk6NDc6MTIgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSogQ2hhbmdlTG9nOgorCSogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6CisJICBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYyAoZ3N0X2ZpbGVfc2lua19zdGFydCkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0wOSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzaW5rLmMgKGdzdF9maWxlX3Npbmtfc3RhcnQpCisJICAoZ3N0X2ZpbGVfc2lua19zdG9wKTogTmV3IGZ1bmN0aW9ucywgcmVwbGFjZSB0aGUgc3RhdGUgY2hhbmdlCisJICBoYW5kbGVyLgorCSAgKGdzdF9maWxlX3NpbmtfY2xhc3NfaW5pdCk6IEhvb2sgdXAgdGhlIHN0YXJ0IGFuZCBzdG9wIGZ1bmN0aW9ucy4KKwkgIChnc3RfZmlsZV9zaW5rX2Jhc2VfaW5pdCk6IERvbid0IHNldCB0aGUgc3RhdGUgY2hhbmdlIGhhbmRsZXIgYW55CisJICBtb3JlLiBJdCB3YXMgYSBiaXQgdWdseSB0b28sIGJlaW5nIHNldCBmcm9tIGhlcmUuLi4KKwkgIChnc3RfZmlsZV9zaW5rX2dldF9wcm9wZXJ0eSwgZ3N0X2ZpbGVfc2lua19zZXRfcHJvcGVydHkpOgorCSAgQ2xlYW51cHMuLi4KKwkgIChnc3RfZmlsZV9zaW5rX3NldF9sb2NhdGlvbik6IE1vcmUgcm9idXN0IGNoZWNrIHRoYXQgZG9lc24ndCBjYWxsCisJICBHU1RfU1RBVEUuIFVnZ2dnZ2cuCisKKzIwMDUtMTEtMDggMTI6MzM6MDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogSG9sZCBTVFJFQU1fTE9DSyB3aGlsZSBwdXNoaW5nIG5ld3NlZ21lbnQgb3IgdGFnIGV2ZW50cyBhcyB3ZWxsLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV9ldmVudCk6CisJICBIb2xkIFNUUkVBTV9MT0NLIHdoaWxlIHB1c2hpbmcgbmV3c2VnbWVudCBvciB0YWcgZXZlbnRzIGFzIHdlbGwuCisKKzIwMDUtMTEtMDggMTE6NTI6MjQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6CisJICByZXZlcnQgcGFydCBvZiB0aGUgcGF0Y2ggc28gdGhhdCBwYXRocyBhcmUgY29ycmVjdAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICByZXZlcnQgcGFydCBvZiB0aGUgcGF0Y2ggc28gdGhhdCBwYXRocyBhcmUgY29ycmVjdAorCisyMDA1LTExLTA4IDExOjEzOjA3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvOiBBdm9pZCBleGNlc3NpdmUgdHlwZWNoZWNraW5nIGluIG1hY3Jvcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19wcmVyb2xsX3F1ZXVlX2VtcHR5KSwKKwkgIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpLCAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfZXZlbnQpLAorCSAgKGdzdF9iYXNlX3NpbmtfY2hhaW4pLCAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJICAqIGdzdC9nc3RlbGVtZW50Lmg6CisJICAqIGdzdC9nc3RldmVudC5oOgorCSAgQXZvaWQgZXhjZXNzaXZlIHR5cGVjaGVja2luZyBpbiBtYWNyb3MuCisJICAqIGdzdC9nc3RtaW5pb2JqZWN0LmM6IChnc3RfbWluaV9vYmplY3RfZ2V0X3R5cGUpLAorCSAgKGdzdF9taW5pX29iamVjdF9pbml0KSwgKGdzdF9taW5pX29iamVjdF9uZXcpLAorCSAgKGdzdF9taW5pX29iamVjdF9mcmVlKToKKwkgICogZ3N0L2dzdG9iamVjdC5jOiAoZ3N0X29iamVjdF9jbGFzc19pbml0KSwgKGdzdF9vYmplY3RfaW5pdCksCisJICAoZ3N0X29iamVjdF9maW5hbGl6ZSk6CisJICBSZW1vdmUgY3J1ZnQgY29kZSwgb3B0aW1pemUgYWxsb2NfdHJhY2UuCisKKzIwMDUtMTEtMDcgMTg6MTY6MTMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6IGZpeCB1cCBQUzEgZm9yIHN5c3RlbXMgdGhhdCB0cnkgdG8gcmVzZXQgaXQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6CisJICBmaXggdXAgUFMxIGZvciBzeXN0ZW1zIHRoYXQgdHJ5IHRvIHJlc2V0IGl0CisKKzIwMDUtMTEtMDcgMTA6MzM6MDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogU2V0IHRoZSBzZWdtZW50X2VuZCB0byAtMSBpbml0aWFsbHkuIEZpeGVkIHR5cGVmaW5kLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19pbml0KSwKKwkgIChnc3RfYmFzZV9zcmNfZ2V0X3JhbmdlKToKKwkgIFNldCB0aGUgc2VnbWVudF9lbmQgdG8gLTEgaW5pdGlhbGx5LiBGaXhlZCB0eXBlZmluZC4KKworMjAwNS0xMS0wNyAxMDoxMzo0NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOiBEZWJ1ZyBjYXRlZ29yeSBzaG91bGQgYmUgJ2FkYXB0ZXInLCBub3QgJ0dzdEFkYXB0ZXInLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKKwkgIERlYnVnIGNhdGVnb3J5IHNob3VsZCBiZSAnYWRhcHRlcicsIG5vdCAnR3N0QWRhcHRlcicuCisJICAqIGdzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChnc3RfY29sbGVjdHBhZHNfYmFzZV9pbml0KSwKKwkgIChnc3RfY29sbGVjdHBhZHNfY2xhc3NfaW5pdCksIChnc3RfY29sbGVjdHBhZHNfaW5pdCksCisJICAoZ3N0X2NvbGxlY3RwYWRzX3BlZWspLCAoZ3N0X2NvbGxlY3RwYWRzX3BvcCksCisJICAoZ3N0X2NvbGxlY3RwYWRzX2V2ZW50KSwgKGdzdF9jb2xsZWN0cGFkc19jaGFpbik6CisJICBBZGQgZGVidWcgY2F0ZWdvcnkgYW5kIHNvbWUgZGVidWdnaW5nIG91dHB1dC4gVXNlIGJvaWxlcnBsYXRlCisJICBtYWNyb3MuIFJlbW92ZSBzb21lIGV4dHJhbmVvdXMgd29yZHMgZnJvbSBkb2NzLgorCisyMDA1LTExLTA1IDE1OjE0OjMzICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGdzdC9iYXNlL2dzdHB1c2hzcmMuYzogU2hvcnRlbiBieSAzMCUgdmlhIHVzZSBvZiBib2lsZXJwbGF0ZSBtYWNyby4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0wNSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5jOiBTaG9ydGVuIGJ5IDMwJSB2aWEgdXNlIG9mIGJvaWxlcnBsYXRlCisJICBtYWNyby4KKworMjAwNS0xMS0wNCAyMDoxMjowMSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBtb3JlIGRvY3MgYWRkZWQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBnc3QvZ3N0Y2Fwcy5oOgorCSAgKiBnc3QvZ3N0aW5mby5jOgorCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5oOgorCSAgKiBnc3QvZ3N0b2JqZWN0Lmg6CisJICAqIGdzdC9nc3R1dGlscy5oOgorCSAgbW9yZSBkb2NzIGFkZGVkCisKKzIwMDUtMTEtMDQgMTU6MzM6NDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogU21hbGwgdXBkYXRlIHRvIHN0b3AgYXQgdGhlIGNvbmZpZ3VyZWQgc2VnbWVudF9lbmQgcG9zaXRpb24uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2dldF9yYW5nZSk6CisJICBTbWFsbCB1cGRhdGUgdG8gc3RvcCBhdCB0aGUgY29uZmlndXJlZCBzZWdtZW50X2VuZAorCSAgcG9zaXRpb24uCisKKzIwMDUtMTEtMDQgMTU6MDI6NDggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdHJlZ2lzdHJ5Lio6IGFkZGVkIG1pc3NpbmcgZG9jcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnkuaDoKKwkgIGFkZGVkIG1pc3NpbmcgZG9jcworCisyMDA1LTExLTA0IDE0OjM1OjEwICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IENoZWNrIGlmIHdlIGFyZSBkb2luZyBhIHNlZ21lbnQgc2VlayBhbmQgaGF2ZSBhcnJpdmVkIGF0IHRoZSBlbmQgb2YgdGhhdCBzZWdtZW50LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19nZXRfcmFuZ2UpOgorCSAgQ2hlY2sgaWYgd2UgYXJlIGRvaW5nIGEgc2VnbWVudCBzZWVrIGFuZCBoYXZlIGFycml2ZWQgYXQgdGhlCisJICBlbmQgb2YgdGhhdCBzZWdtZW50LgorCisyMDA1LTExLTA0IDEyOjA4OjE5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YnVzLmM6IERvbid0IGxlYWsgYSBtdXRleCB1bmxvY2sgaW4gY2FzZSBvZiBhbiBlcnJvci4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YnVzLmM6IChnc3RfYnVzX3Bvc3QpLCAoZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyKToKKwkgIERvbid0IGxlYWsgYSBtdXRleCB1bmxvY2sgaW4gY2FzZSBvZiBhbiBlcnJvci4KKwkgICogZ3N0L2dzdGJ1cy5oOgorCSAgRG9jIGZpeGVzLgorCisyMDA1LTExLTA0IDExOjQzOjEwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YnVzLmM6IEdldCB0aGUgY29udGV4dCB0byB3YWtlIHVwIG9ubHkgb25jZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YnVzLmM6IChnc3RfYnVzX2NsYXNzX2luaXQpLCAoZ3N0X2J1c19pbml0KSwKKwkgIChnc3RfYnVzX3Bvc3QpOgorCSAgR2V0IHRoZSBjb250ZXh0IHRvIHdha2UgdXAgb25seSBvbmNlLgorCisyMDA1LTExLTAzIDIwOjE3OjI0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGNoZWNrL3N0YXRlcy9zaW5rcy5jOiBVbmNvbW1lbnQgZml4ZWQgY2hlY2suCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svc3RhdGVzL3NpbmtzLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBVbmNvbW1lbnQgZml4ZWQgY2hlY2suCisJICAqIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6CisJICBVcGRhdGVkIFRPRE8uCisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NvbW1pdF9zdGF0ZSksCisJICAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwgKGdzdF9iYXNlX3NpbmtfZG9fc3luYyksCisJICAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24pOgorCSAgSWYgd2UgYXJlIGdvaW5nIHRvIFBMQVlJTkcsIHBvc3QgdGhlIHJpZ2h0IHBlbmRpbmcgc3RhdGUKKwkgIHdoZW4gd2UgcG9zdCB0aGUgaW50ZXJtZWRpYXRlIHBhdXNlZCBtZXNzYWdlLgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfY29udGludWVfc3RhdGUpLAorCSAgKGdzdF9lbGVtZW50X3NldF9zdGF0ZV9mdW5jKSwgKGdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZSk6CisJICBEb24ndCBwb3N0IHN0YXRlIGNoYW5nZXMgdGhhdCB3ZXJlIGJldHdlZW4gdGhlIHNhbWUgc3RhdGUKKwkgIGFuZCB3ZXJlIG5vdCBBU1lOQy4KKworMjAwNS0xMS0wMyAyMDoxNDoyNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgY2hlY2svc3RhdGVzL3NpbmtzLmM6IFVuY29tbWVudCBmaXhlZCBjaGVjay4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9zdGF0ZXMvc2lua3MuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgIFVuY29tbWVudCBmaXhlZCBjaGVjay4KKwkgICogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKKwkgIFVwZGF0ZWQgVE9ETy4KKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfY29tbWl0X3N0YXRlKSwKKwkgIChnc3RfYmFzZV9zaW5rX2hhbmRsZV9vYmplY3QpLCAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKSwKKwkgIChnc3RfYmFzZV9zaW5rX2dldF9wb3NpdGlvbik6CisJICBJZiB3ZSBhcmUgZ29pbmcgdG8gUExBWUlORywgcG9zdCB0aGUgcmlnaHQgcGVuZGluZyBzdGF0ZQorCSAgd2hlbiB3ZSBwb3N0IHRoZSBpbnRlcm1lZGlhdGUgcGF1c2VkIG1lc3NhZ2UuCisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9jb250aW51ZV9zdGF0ZSksCisJICAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlX2Z1bmMpLCAoZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlKToKKwkgIERvbid0IHBvc3Qgc3RhdGUgY2hhbmdlcyB0aGF0IHdlcmUgYmV0d2VlbiB0aGUgc2FtZSBzdGF0ZQorCSAgYW5kIHdlcmUgbm90IEFTWU5DLgorCisyMDA1LTExLTAzIDE5OjM4OjQ4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvYyBmaXhlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6CisJICAqIGdzdC9nc3RtaW5pb2JqZWN0LmM6CisJICBkb2MgZml4ZXMKKworMjAwNS0xMS0wMyAxNzo1MzoyNyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBjaGVjay9zdGF0ZXMvc2lua3MuYyAodGVzdF9saXZlc3JjX3NpbmspOiBBZGQgY2hlY2tzIHRoYXQgdGhlIHN0YXRlLWNoYW5nZWQgbWVzc2FnZXMgYWN0dWFsbHkgaGF2ZSB0aGUgcmlnaHQgb3JkZXIgYW4uLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0wMyAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogY2hlY2svc3RhdGVzL3NpbmtzLmMgKHRlc3RfbGl2ZXNyY19zaW5rKTogQWRkIGNoZWNrcyB0aGF0IHRoZQorCSAgc3RhdGUtY2hhbmdlZCBtZXNzYWdlcyBhY3R1YWxseSBoYXZlIHRoZSByaWdodCBvcmRlciBhbmQgdGhlIHJpZ2h0CisJICB2YWx1ZXMuCisKKzIwMDUtMTEtMDMgMTc6MTI6MDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGNoZWNrL3N0YXRlcy9zaW5rcy5jOiBBZGRlZCBzb21lIG1vcmUgY2hlY2tzLiBTcGVjaWZpY2FsbHkgdGhlIGNhc2Ugd2hlcmUgTk9fUFJFUk9MTCBlbGVtZW50cyBhcmUgaW4gdGhlIHBpcGVsaW5lLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL3N0YXRlcy9zaW5rcy5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X29iamVjdF9zdWl0ZSk6CisJICBBZGRlZCBzb21lIG1vcmUgY2hlY2tzLiBTcGVjaWZpY2FsbHkgdGhlIGNhc2Ugd2hlcmUgTk9fUFJFUk9MTAorCSAgZWxlbWVudHMgYXJlIGluIHRoZSBwaXBlbGluZS4KKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfY29tbWl0X3N0YXRlKSwKKwkgIChnc3RfYmFzZV9zaW5rX2hhbmRsZV9vYmplY3QpLCAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKSwKKwkgIChnc3RfYmFzZV9zaW5rX2dldF9wb3NpdGlvbik6CisJICBQb3N0IFJFQURZLT5QQVVTRUQgc3RhdGUgY2hhbmdlIG1lc3NhZ2VzIHRvby4KKwkgIEZpeCBidWcgd2hlcmUgVk9JRCB3YXMgcG9zdGVkIGFzIHBlbmRpbmcgc3RhdGUuLi4KKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9yZWNhbGNfc3RhdGUpOgorCSAgdXNlIF9lbGVtZW50X2NvbnRpbnVlX3N0YXRlKCkgdG8gY29udGludWUgdGhlIHN0YXRlIGNoYW5nZS4KKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2NvbnRpbnVlX3N0YXRlKSwKKwkgIChnc3RfZWxlbWVudF9jb21taXRfc3RhdGUpLCAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlX2Z1bmMpLAorCSAgKGdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZSksIChnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGVfZnVuYyk6CisJICBMb3RzIG9mIHN0YXRlIGNoYW5nZSBjbGVhbnVwcywgYXNzaWduIHRoZSBTVEFURV9SRVRVUk4gaW4KKwkgIGEgbmV3IGNvbnRpbnVlX3N0YXRlKCkgZnVuY3Rpb24gdGhhdCBhbHNvIHByb3BhZ2F0ZXMgdGhlCisJICBsYXN0IHJldHVybiB2YWx1ZSBmcm9tIGEgc3RhdGUgY2hhbmdlIHRvIHRoZSBhcHAuCisJICBVcGRhdGUgc29tZSBkZWJ1ZyBzdGF0ZW1lbnRzIHdpdGggcHJvcGVyIGNhdGVnb3J5LgorCisyMDA1LTExLTAzIDE0OjIyOjQ0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzLzogU21hbGwgZG9jcyB1cGRhdGVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtZXZlbnRzLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RwaXBlbGluZS50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtbWVzc2FnZXMudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LW92ZXJ2aWV3LnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1zZWVraW5nLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1zdGF0ZXMudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXRyaWNrbW9kZXMudHh0OgorCSAgKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1wb3NpdGlvbi54bWw6CisJICBTbWFsbCBkb2NzIHVwZGF0ZXMuCisJICAqIGdzdC9nc3RvYmplY3QuaDoKKwkgIFBlb3BsZSB0aGluayAhISBpcyB1Z2x5LCB0aGlzIGxvb2tzIGJldHRlci4KKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9zZXRfYmxvY2tlZF9hc3luYyk6CisJICBSZW1vdmUgISEgc2luY2UgaXQncyBmaXhlZCBlbHNld2hlcmUgbm93LgorCisyMDA1LTExLTAzIDEzOjUyOjU5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvOiBBZGQgISEgdG8gX0ZMQUdfSVNfU0VUIG1hY3JvcyB0byBtYWtlIHRoZSByZXN1bHQgYm9vbGVhbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5oOgorCSAgKiBnc3QvZ3N0b2JqZWN0Lmg6CisJICBBZGQgISEgdG8gX0ZMQUdfSVNfU0VUIG1hY3JvcyB0byBtYWtlIHRoZSByZXN1bHQgYm9vbGVhbi4KKworMjAwNS0xMS0wMyAxMjo0ODozMCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgZ3N0L2dzdHBhZC5jOiBjb21wYXJpbmcgYSBmbGFnIGFuZCBhIGdib29sZWFuIHJhcmVseSByZXR1cm5zIGNvaGVyZW50IHJlc3VsdHMuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3NldF9ibG9ja2VkX2FzeW5jKToKKwkgIGNvbXBhcmluZyBhIGZsYWcgYW5kIGEgZ2Jvb2xlYW4gcmFyZWx5IHJldHVybnMgY29oZXJlbnQgcmVzdWx0cy4uLgorCSAgQWRkZWQgdHdvIGNoYXJhY3RlcnMgKCEhKSB0byBtYWtlIHRoYXQgd29yayBjb3JyZWN0bHkuCisKKzIwMDUtMTEtMDMgMTI6MTY6NDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RidXMuYzogRml4IHNvbWUgdHlwb3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJ1cy5jOiAoZ3N0X2J1c19jbGFzc19pbml0KToKKwkgIEZpeCBzb21lIHR5cG9zLgorCSAgKiBnc3QvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9sb29wKToKKwkgIERvbid0IGFzc3VtZSBhIG1pbmlvYmplY3QgdGhhdCBpc24ndCBhIGJ1ZmZlciBpcyBhbgorCSAgZXZlbnQgKGl0IGNvdWxkIGJlIHRoYXQgdGhlcmUgaXMgYSByZWZjb3VudGluZworCSAgcHJvYmxlbSBzb21ld2hlcmUgYW5kIHRoZSBwb2ludGVyIGlzIHN0YWxlIGFuZAorCSAgcmVmZXJzIHRvIGFuIGFscmVhZHkgZGVzdHJveWVkIG1pbmlvYmplY3QpLgorCisyMDA1LTExLTAzIDEwOjU2OjIzICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KKworCSAgZ3N0L2dzdHBhZC5jOiBGaXggc29tZSB0eXBvcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMS0wMyAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2FsbG9jX2J1ZmZlcik6IEZpeCBzb21lIHR5cG9zLgorCisyMDA1LTExLTAzIDA5OjE4OjUzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBkb2NzL21hbnVhbC9hZHZhbmNlZC1wb3NpdGlvbi54bWw6IFVwZGF0ZSBzZWVrIGV4YW1wbGUgYW5kIGV4cGxhbmF0aW9ucyB0byBjdXJyZW50IDAuOSBBUEkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9tYW51YWwvYWR2YW5jZWQtcG9zaXRpb24ueG1sOgorCSAgVXBkYXRlIHNlZWsgZXhhbXBsZSBhbmQgZXhwbGFuYXRpb25zIHRvIGN1cnJlbnQgMC45IEFQSS4KKwkgICogZ3N0L2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9hY3RpdmF0ZSk6CisJICBSZW1vdmUgRklYTUUgY29tbWVudCBub3cgdGhhdCB0aGUgZm91bmQgY2FwcworCSAgYXJlIHVucmVmZmVkLgorCisyMDA1LTExLTAzIDAwOjM5OjU0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6CisJICBBZGQgYW5vdGhlciBHU1RfU1RSX05VTEwgaW5zdGFuY2UKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgQWRkIGFub3RoZXIgR1NUX1NUUl9OVUxMIGluc3RhbmNlCisKKzIwMDUtMTEtMDIgMTk6MDQ6MjAgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkgIGdzdC9nc3RwYWQuYzogRm9sbG93LXVwIHRvIFdpbSdzIHBhdGNoLCBzb2x2ZXMgZGVhZGxvY2sgZm9yIGJsb2NrZWQgYW5kIGZsdXNoaW5nIHBhZHMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChoYW5kbGVfcGFkX2Jsb2NrKToKKwkgIEZvbGxvdy11cCB0byBXaW0ncyBwYXRjaCwgc29sdmVzIGRlYWRsb2NrIGZvciBibG9ja2VkIGFuZCBmbHVzaGluZyBwYWRzCisKKzIwMDUtMTEtMDIgMTg6NDQ6MjAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RiaW4uYzogRml4IHR5cG8gaW4gZG9jcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6CisJICBGaXggdHlwbyBpbiBkb2NzLgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfY29tbWl0X3N0YXRlKToKKwkgIFJlbW92ZSB1bnVzZWQgdmFsdWUuCisJICAqIGdzdC9nc3RpdGVyYXRvci5jOgorCSAgTWVudGlvbiB0aGF0IHRoZSByZXR1cm5lZCBlbGVtZW50IGlzIHJlZmZlZCBpbiB0aGUgZG9jcy4KKworMjAwNS0xMS0wMiAxODozMzowMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHBhZC5jOiBVbmxvY2sgYmxvY2tlZCBwYWRzIHdoZW4gdGhleSBhcmUgZmx1c2hlZC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2FsbG9jX2J1ZmZlciksIChoYW5kbGVfcGFkX2Jsb2NrKSwKKwkgIChnc3RfcGFkX3B1c2gpLCAoZ3N0X3BhZF9wdXNoX2V2ZW50KToKKwkgIFVubG9jayBibG9ja2VkIHBhZHMgd2hlbiB0aGV5IGFyZSBmbHVzaGVkLgorCisyMDA1LTExLTAyIDE1OjM0OjIzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZG9jIHVwZGF0ZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL1JFQURNRToKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdGJpbi5jOgorCSAgZG9jIHVwZGF0ZXMKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6IChnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2xldmVsKToKKwkgIGZpeCBmb3IgYSBuYXN0eSBsaXR0bGUgbWlzc2VkIHNpdHVhdGlvbiB3aGVyZSBhbiBpbnN0YWxsZWQgcGx1Zy1pbgorCSAgd2hpY2ggd2FzIGluIHRoZSBjYWNoZSBkaWQgbm90IGdldCBvdmVycmlkZGVuIGJ5IGFuIHVuaW5zdGFsbGVkIG9uZQorCSAgd2hpY2ggd2FzIGVhcmxpZXIgaW4gdGhlIHBsdWdpbiBwYXRoIGJlY2F1c2UgdGhlIG5ld2x5IGNyZWF0ZWQgcGx1Z2luCisJICBmb3IgdGhlIHVuaW5zdGFsbGVkIG9uZSAobm90IGluIHRoZSByZWdpc3RyeSkgZGlkbid0IGdldCBpdHMKKwkgIC0+cmVnaXN0ZXJlZCBzZXQgdG8gVFJVRQorCisyMDA1LTExLTAyIDE1OjA4OjA1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiBHdWFyZCBwdWJsaWMgQVBJIHdpdGggYXNzZXJ0aW9ucy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RwYWRzX3NldF9mdW5jdGlvbiksCisJICAoZ3N0X2NvbGxlY3RwYWRzX2FkZF9wYWQpLCAoZ3N0X2NvbGxlY3RwYWRzX3JlbW92ZV9wYWQpLAorCSAgKGdzdF9jb2xsZWN0cGFkc19pc19hY3RpdmUpLCAoZ3N0X2NvbGxlY3RwYWRzX2NvbGxlY3QpLAorCSAgKGdzdF9jb2xsZWN0cGFkc19jb2xsZWN0X3JhbmdlKSwgKGdzdF9jb2xsZWN0cGFkc19zdGFydCksCisJICAoZ3N0X2NvbGxlY3RwYWRzX3N0b3ApLCAoZ3N0X2NvbGxlY3RwYWRzX3BlZWspLAorCSAgKGdzdF9jb2xsZWN0cGFkc19wb3ApLCAoZ3N0X2NvbGxlY3RwYWRzX2F2YWlsYWJsZSksCisJICAoZ3N0X2NvbGxlY3RwYWRzX3JlYWQpLCAoZ3N0X2NvbGxlY3RwYWRzX2ZsdXNoKToKKwkgIEd1YXJkIHB1YmxpYyBBUEkgd2l0aCBhc3NlcnRpb25zLgorCSAgKiBnc3QvZ3N0cGFkLmM6CisJICBGaXggZG9jcyBmb3IgZ3N0X3BhZF9zZXRfbGlua19mdW5jdGlvbigpLgorCisyMDA1LTExLTAyIDE0OjI4OjAyICswMDAwICBKb2hhbiBEYWhsaW4gPGpvaGFuQGdub21lLm9yZz4KKworCSAgZ3N0L2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfYWN0aXZhdGUpOiBVbnJlZiBmb3VuZF9jYXBzIGFmdGVyIHdlIHVzZWQgaXQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfYWN0aXZhdGUpOgorCSAgVW5yZWYgZm91bmRfY2FwcyBhZnRlciB3ZSB1c2VkIGl0LgorCisyMDA1LTExLTAyIDEyOjIwOjU0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiBEb24ndCB0cnkgdG8gcmVmIE5VTEwuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0cGFkc19wZWVrKToKKwkgIERvbid0IHRyeSB0byByZWYgTlVMTC4KKworMjAwNS0xMS0wMiAwOTozMTowMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgYWRkIG1vcmUgc3ltYm9scworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGQgbW9yZSBzeW1ib2xzCisKKzIwMDUtMTEtMDIgMDk6Mjc6MzMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGFkZCBtb3JlIHN5bWJvbHMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkIG1vcmUgc3ltYm9scworCisyMDA1LTExLTAyIDA5OjI0OjU4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgorCSAgdXBkYXRlIGdlbmVyYXRlZCBjb25maWcKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgdXBkYXRlIGdlbmVyYXRlZCBjb25maWcKKworMjAwNS0xMS0wMiAwOToyNDowMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaC5pbjoKKwkgIHByb3ZpZGUgYSBHU1RfRlVOQ1RJT04gdGhhdCBqdXN0IGdpdmVzIGEgc3RyaW5nIGZvciBub3cKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcHJvdmlkZSBhIEdTVF9GVU5DVElPTiB0aGF0IGp1c3QgZ2l2ZXMgYSBzdHJpbmcgZm9yIG5vdworCisyMDA1LTExLTAyIDA4OjU2OjAwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jOgorCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKKwkgIHVwZGF0ZSB3aW4zMiBjb3BpZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgdXBkYXRlIHdpbjMyIGNvcGllcworCisyMDA1LTExLTAxIDE5OjE2OjU4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2dzdGJpbi5jOgorCSAgbW9yZSBkb2MgdXBkYXRlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBtb3JlIGRvYyB1cGRhdGVzCisKKzIwMDUtMTEtMDEgMTc6NDU6NDYgKzAwMDAgIEx1Y2EgT2duaWJlbmUgPGx1b2duaUB0aW4uaXQ+CisKKwkgIGdzdC9nc3QuYzogZml4IGRvY3MuIHBvcHQgaXMgZGVhdGgsIGxvbmcgbGl2ZSBHT3B0aW9uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3QuYzoKKwkgIGZpeCBkb2NzLiBwb3B0IGlzIGRlYXRoLCBsb25nIGxpdmUgR09wdGlvbi4KKworMjAwNS0xMC0zMSAxMTo0NDozMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJ1ZmZlci5oOiBTbWFsbCBkb2MgZml4LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RidWZmZXIuaDoKKwkgIFNtYWxsIGRvYyBmaXguCisKKzIwMDUtMTAtMzEgMDk6NTI6MTMgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgQm9vIQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTEwLTMxICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBCb28hCisJICAqIGdzdC9nc3RxdWV1ZS5jIChnc3RfcXVldWVfY2hhaW4pOiBGaXggZG93bnN0cmVhbSBsZWFreSBtb2RlLgorCSAgKiBnc3QvZ3N0b2JqZWN0LmMgKGdzdF9vYmplY3RfZGlzcGF0Y2hfcHJvcGVydGllc19jaGFuZ2VkKTogTm8KKwkgIG5lZWQgdG8gc2VyaWFsaXplIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMgb24gR0xpYiAyLjguIEdMaWIgMi42IGhhcworCSAgdGhlIHBvc3NpYmlsaXR5IG9mIGRlYWRsb2NrcyBoZXJlIGlmIGNvZGUgY2FsbGluZyBub3RpZnkoKSBvcgorCSAgc2V0KCkgaGFzIGEgbG9jayB0aGF0IGNhbiBiZSB0YWtlbiBpbiBhbm90aGVyIG5vdGlmeSBoYW5kbGVyIChBQkJBCisJICB3aXRoIGNsYXNzIGxvY2sgYW5kIGUuZy4gcHl0aG9uIEdJTCBzdGF0ZSBsb2NrKS4KKworMjAwNS0xMC0yOCAxODoxODoyMyArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+CisKKwkgIGdzdC9nc3RidXMuYzogRG9jIHVwZGF0ZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTAtMjggIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KKwkgICogZ3N0L2dzdGJ1cy5jOiBEb2MgdXBkYXRlcy4KKworMjAwNS0xMC0yOCAxODoxNDoyNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgRG9jIHVwZGF0ZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKKwkgICogZ3N0L2dzdGl0ZXJhdG9yLmM6CisJICAqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgorCSAgKiBnc3QvZ3N0c3lzdGVtY2xvY2suaDoKKwkgIERvYyB1cGRhdGVzLgorCisyMDA1LTEwLTI4IDE4OjEwOjQxICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBkb2NzL2dzdC86IHRoZSBHc3RVUklUeXBlIGRvY3VtZW50YXRpb24gcGFnZSBpcyBwcml2YXRlLCBpdCBvbmx5IGRlZmluZXMgR3N0VVJJVHlwZSB3aGljaCBzaG91bGQgYmUgZGVmaW5lZCBpbiB0aGUgR3MuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgdGhlIEdzdFVSSVR5cGUgZG9jdW1lbnRhdGlvbiBwYWdlIGlzIHByaXZhdGUsIGl0IG9ubHkgZGVmaW5lcyBHc3RVUklUeXBlCisJICB3aGljaCBzaG91bGQgYmUgZGVmaW5lZCBpbiB0aGUgR3N0VVJJSGFuZGxlciBwYWdlCisKKzIwMDUtMTAtMjggMTc6MzU6NDMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBnc3QvZ3N0YmluLmM6CisJKiBnc3QvZ3N0YmluLmg6CisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIERvY3VtZW50YXRpb24gdXBkYXRlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgRG9jdW1lbnRhdGlvbiB1cGRhdGVzLgorCisyMDA1LTEwLTI4IDE3OjM1OjA1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBEb2N1bWVudGVkIHRoZSBjbG9ja3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdGNsb2NrLmM6CisJICAqIGdzdC9nc3RjbG9jay5oOgorCSAgRG9jdW1lbnRlZCB0aGUgY2xvY2tzLgorCisyMDA1LTEwLTI4IDE3OjM0OjMyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogY29tbW9uOgorCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgorCSAgdXBkYXRlZCBjb25maWcKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgdXBkYXRlZCBjb25maWcKKworMjAwNS0xMC0yOCAxNzoyMDo0NSArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgorCisJKiBnc3QvZ3N0YnVmZmVyLmg6CisJICBXb3JrIGFyb3VuZCBndGtkb2MgZGVmaWNpZW5jaWVzLCBkb2N1bWVudCBhIG1hY3JvIGRpZmZlcmVudGx5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBXb3JrIGFyb3VuZCBndGtkb2MgZGVmaWNpZW5jaWVzLCBkb2N1bWVudCBhIG1hY3JvIGRpZmZlcmVudGx5LgorCisyMDA1LTEwLTI4IDE3OjAxOjE0ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+CisKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkqIGdzdC9nc3RidWZmZXIuaDoKKwkqIGdzdC9nc3R1dGlscy5jOgorCSAgSW1wcm92ZSBHc3RCdWZmZXIgZG9jdW1lbnRhdGlvbi4gSXQncyBub3cgMTAwJSBTcGlmZmllci4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgSW1wcm92ZSBHc3RCdWZmZXIgZG9jdW1lbnRhdGlvbi4gSXQncyBub3cgMTAwJSBTcGlmZmllci4KKworMjAwNS0xMC0yOCAxNjo1NDoxNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGRvY3MvUkVBRE1FOgorCSAgc29tZSBzdHlsZSBmaXhlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBzb21lIHN0eWxlIGZpeGVzCisKKzIwMDUtMTAtMjggMTY6NDY6NTggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogbW92ZSBzb21lIG1hY3JvcyB0byBwcml2YXRlIHNlY3Rpb25zCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgIG1vdmUgc29tZSBtYWNyb3MgdG8gcHJpdmF0ZSBzZWN0aW9ucworCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5jOgorCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5oOgorCSAgYWRkIGRlc2NyaXB0aW9ucyBwcm92aWRlZCBieSBkcyBhbmQgc29tZSBtb3JlCisJICAqIGdzdC9nc3RwYWQuaDoKKwkgIG1hcmsgbWFjcm8gYXMgdG8gYmUgcmVtb3ZlZAorCisyMDA1LTEwLTI4IDE2OjIxOjI5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OiBBZGQgYW4gaXRlbSB0byBUT0RPLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6CisJICBBZGQgYW4gaXRlbSB0byBUT0RPLgorCSAgKiBnc3QvZ3N0aXRlcmF0b3IuYzogKGdzdF9pdGVyYXRvcl9mb2xkKSwKKwkgIChnc3RfaXRlcmF0b3JfZmluZF9jdXN0b20pOgorCSAgKiBnc3QvZ3N0aXRlcmF0b3IuaDoKKwkgIEFkZCBpdGVyYXRvciBkb2NzLgorCisyMDA1LTEwLTI4IDE2OjA4OjUyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZG9jcy9SRUFETUU6CisJICBhZGQgc3R5bGUgZ3VpZGUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkIHN0eWxlIGd1aWRlCisKKzIwMDUtMTAtMjggMTA6NDU6MzMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogRG9uJ3QgbGVhayBjbGFzcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1fY2xhc3NfaW5pdCksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2luaXQpOgorCSAgRG9uJ3QgbGVhayBjbGFzcy4KKwkgICogZ3N0L2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfaGFuZGxlX3NpbmtfZXZlbnQpLCAoZ3N0X3F1ZXVlX2xvb3ApOgorCSAgQW4gRU9TIGV2ZW50IG1hcmtzIHRoZSBxdWV1ZSBhcyBjb21wbGV0ZWx5IGZpbGxlZC4KKworMjAwNS0xMC0yNyAyMDo1OTowMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogU29tZSBtb3JlIGRlYnVnZ2luZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwKKwkgIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpLCAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24pOgorCSAgU29tZSBtb3JlIGRlYnVnZ2luZy4KKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2ZpbmFsaXplKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1faW5pdCksIChnc3RfYmFzZV90cmFuc2Zvcm1fYnVmZmVyX2FsbG9jKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fZXZlbnQpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldHJhbmdlKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fY2hhaW4pOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6CisJICBGaXggZGVidWdnaW5nLAorCSAgUHJvdGVjdCB0cmFuc2Zvcm0gYW5kIGNvbmN1cnJlbnQgYnVmZmVyIGFsbG9jIHdpdGggYSBuZXcgbG9jay4KKwkgIFRyeSBub3QgdG8gYnJlYWsgQUJJL0FQSS4KKworMjAwNS0xMC0yNyAxOTozNzoyNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBNb3ZlIHNvbWUgc3R1ZmYgYXJvdW5kIGFuZCBjbGVhbnVwIHRoaW5ncy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfY2xhc3NfaW5pdCksCisJICAoZ3N0X2Jhc2Vfc3JjX2luaXQpLCAoZ3N0X2Jhc2Vfc3JjX3F1ZXJ5KSwKKwkgIChnc3RfYmFzZV9zcmNfZGVmYXVsdF9uZXdzZWdtZW50KSwKKwkgIChnc3RfYmFzZV9zcmNfY29uZmlndXJlX3NlZ21lbnQpLCAoZ3N0X2Jhc2Vfc3JjX2RvX3NlZWspLAorCSAgKGdzdF9iYXNlX3NyY19zZW5kX2V2ZW50KSwgKGdzdF9iYXNlX3NyY19ldmVudF9oYW5kbGVyKSwKKwkgIChnc3RfYmFzZV9zcmNfcGFkX2dldF9yYW5nZSksIChnc3RfYmFzZV9zcmNfbG9vcCksCisJICAoZ3N0X2Jhc2Vfc3JjX3VubG9jayksIChnc3RfYmFzZV9zcmNfZGVmYXVsdF9uZWdvdGlhdGUpLAorCSAgKGdzdF9iYXNlX3NyY19zdGFydCksIChnc3RfYmFzZV9zcmNfZGVhY3RpdmF0ZSksCisJICAoZ3N0X2Jhc2Vfc3JjX2FjdGl2YXRlX3B1c2gpLCAoZ3N0X2Jhc2Vfc3JjX2NoYW5nZV9zdGF0ZSk6CisJICBNb3ZlIHNvbWUgc3R1ZmYgYXJvdW5kIGFuZCBjbGVhbnVwIHRoaW5ncy4KKworMjAwNS0xMC0yNyAxNTo0ODo1NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBBZGQgbWlzc2luZyBicmVhayBzdGF0ZW1lbnRzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19xdWVyeSk6CisJICBBZGQgbWlzc2luZyBicmVhayBzdGF0ZW1lbnRzLgorCisyMDA1LTEwLTI3IDEzOjQ3OjMzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBjaGVjay9nc3QvZ3N0YmluLmM6IEFuIGV4dHJhIHJlZmNvdW50IGlzIHRha2VuIGluIGJhc2VzcmMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svZ3N0L2dzdGJpbi5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgQW4gZXh0cmEgcmVmY291bnQgaXMgdGFrZW4gaW4gYmFzZXNyYy4KKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2luaXQpLCAoZ3N0X2Jhc2Vfc3JjX3F1ZXJ5KSwKKwkgIChnc3RfYmFzZV9zcmNfZ2V0X3JhbmdlKSwgKGdzdF9iYXNlX3NyY19wYWRfZ2V0X3JhbmdlKSwKKwkgIChnc3RfYmFzZV9zcmNfbG9vcCk6CisJICBTbWFsbCBjbGVhbnVwcywgY2hlY2sgZm9yIGZsdXNoaW5nIGFmdGVyIGJlaW5nIHVubG9ja2VkIGZyb20gdGhlCisJICBMSVZFX0xPQ0suIHRha2UgcmVmY291bnRzIGNvcnJlY3RseSAobm90IHlldCBldmVyeXdoZXJlKS4KKwkgIERvbid0IHNlbmQgb3V0IEVPUyB3aGVuIGdvaW5nIHRvIFJFQURZLgorCisyMDA1LTEwLTI3IDA4OjU1OjQ0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiBTb21lIG1vcmUgZGVidWcuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfaGFuZGxlX29iamVjdCksCisJICAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24pOgorCSAgU29tZSBtb3JlIGRlYnVnLgorCSAgKiBnc3QvZ3N0YmluLmM6IChtZXNzYWdlX2NoZWNrKSwgKGJpbl9yZXBsYWNlX21lc3NhZ2UpLAorCSAgKGJpbl9yZW1vdmVfbWVzc2FnZXMpLCAoaXNfZW9zKSwgKGdzdF9iaW5fYWRkX2Z1bmMpLAorCSAgKHVwZGF0ZV9kZWdyZWUpLCAoZ3N0X2Jpbl9zb3J0X2l0ZXJhdG9yX25leHQpLCAoYmluX2J1c19oYW5kbGVyKSwKKwkgIChiaW5fcXVlcnlfZHVyYXRpb25faW5pdCksIChiaW5fcXVlcnlfZHVyYXRpb25fZm9sZCksCisJICAoYmluX3F1ZXJ5X2R1cmF0aW9uX2RvbmUpLCAoYmluX3F1ZXJ5X2dlbmVyaWNfZm9sZCksCisJICAoZ3N0X2Jpbl9xdWVyeSk6CisJICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKG1haW4pOgorCSAgUmVtb3ZlIG9sZCBvcHRpb24uCisKKzIwMDUtMTAtMjYgMTg6NTc6NDMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZml4aW5nIGV4YW1wbGVzIGZpeGluZyBkb2NzIHR5cG9zIGNoYW5naW5nIGxvZyBwcmlvcml0eSBpbiBlcnJvciBzaXR1YXRpb25zCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZXhhbXBsZXMvY29udHJvbGxlci9hdWRpby1leGFtcGxlLmM6IChtYWluKToKKwkgICogZXhhbXBsZXMvcXVldWUvcXVldWUuYzogKGV2ZW50X2xvb3ApOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9zZW5kX2V2ZW50KToKKwkgICogZ3N0L2dzdGV2ZW50Lmg6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfc2VuZF9ldmVudCk6CisJICBmaXhpbmcgZXhhbXBsZXMKKwkgIGZpeGluZyBkb2NzIHR5cG9zCisJICBjaGFuZ2luZyBsb2cgcHJpb3JpdHkgaW4gZXJyb3Igc2l0dWF0aW9ucworCisyMDA1LTEwLTI2IDEwOjExOjI1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogc2NyaXB0cy9jdnMtdXBkYXRlLnNoOgorCSAgbWFrZSBzdXJlIGRpcnMgZ2V0IGNoZWNrZWQgb3V0CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIG1ha2Ugc3VyZSBkaXJzIGdldCBjaGVja2VkIG91dAorCisyMDA1LTEwLTI2IDA5OjU2OjQzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogd2luMzIvTUFOSUZFU1Q6CisJICBmaXggZGlzdAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaXggZGlzdAorCisyMDA1LTEwLTI1IDE3OjQxOjI0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YmluLmM6IFNvbWUgZG9jIGFuZCBkZWJ1ZyB1cGRhdGVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RiaW4uYzogKG1lc3NhZ2VfY2hlY2spLCAoYmluX3JlcGxhY2VfbWVzc2FnZSksCisJICAoYmluX3JlbW92ZV9tZXNzYWdlcyksIChpc19lb3MpLCAoZ3N0X2Jpbl9hZGRfZnVuYyksCisJICAodXBkYXRlX2RlZ3JlZSksIChnc3RfYmluX3NvcnRfaXRlcmF0b3JfbmV4dCksIChiaW5fYnVzX2hhbmRsZXIpLAorCSAgKGJpbl9xdWVyeV9kdXJhdGlvbl9pbml0KSwgKGJpbl9xdWVyeV9kdXJhdGlvbl9mb2xkKSwKKwkgIChiaW5fcXVlcnlfZHVyYXRpb25fZG9uZSksIChiaW5fcXVlcnlfZ2VuZXJpY19mb2xkKSwKKwkgIChnc3RfYmluX3F1ZXJ5KToKKwkgIFNvbWUgZG9jIGFuZCBkZWJ1ZyB1cGRhdGVzLgorCSAgQ2FjaGUgcHJldmlvdXNseSByZXF1ZXN0ZWQgcXVlcnkgRFVSQVRJT04gZm9yIHNwZWVkLiBpbnZhbGlkYXRlCisJICBjYWNoZWQgZHVyYXRpb24gaWYgZWxlbWVudCBwb3N0cyBhIERVUkFUSU9OIG1lc3NhZ2UuCisKKzIwMDUtMTAtMjUgMTU6Mzk6MzYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6IFVwZGF0ZSBUT0RPLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6CisJICBVcGRhdGUgVE9ETy4KKwkgICogZ3N0L2dzdGJpbi5jOiAobWVzc2FnZV9jaGVjayksIChiaW5fcmVwbGFjZV9tZXNzYWdlKSwKKwkgIChiaW5fcmVtb3ZlX21lc3NhZ2VzKSwgKGlzX2VvcyksIChnc3RfYmluX2FkZF9mdW5jKSwKKwkgICh1cGRhdGVfZGVncmVlKSwgKGdzdF9iaW5fc29ydF9pdGVyYXRvcl9uZXh0KSwgKGJpbl9idXNfaGFuZGxlciksCisJICAoYmluX3F1ZXJ5X2R1cmF0aW9uX2luaXQpLCAoYmluX3F1ZXJ5X2R1cmF0aW9uX2ZvbGQpLAorCSAgKGJpbl9xdWVyeV9kdXJhdGlvbl9kb25lKSwgKGJpbl9xdWVyeV9nZW5lcmljX2ZvbGQpLAorCSAgKGdzdF9iaW5fcXVlcnkpOgorCSAgSGFuZGxlIFNFR01FTlRfU1RBUlQvRE9ORSBtZXNzYWdlcyBjb3JyZWN0bHkuCisJICBNb3JlIGV2b2x2ZWQgcXVlcnkgYWxnb3JpdGhtIHRoYXQgaGFuZGxlcyBkdXJhdGlvbiBxdWVyaWVzCisJICBjb3JyZWN0bHkuCisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9zZW5kX2V2ZW50KSwgKGdzdF9lbGVtZW50X3F1ZXJ5KSwKKwkgIChnc3RfZWxlbWVudF9nZXRfc3RhdGVfZnVuYyksIChnc3RfZWxlbWVudF9hYm9ydF9zdGF0ZSksCisJICAoZ3N0X2VsZW1lbnRfY29tbWl0X3N0YXRlKSwgKGdzdF9lbGVtZW50X2xvc3Rfc3RhdGUpOgorCSAgU29tZSBtb3JlIGRlYnVnZ2luZy4KKwkgICogZ3N0L2dzdG1lc3NhZ2UuaDoKKwkgIEFkZGVkIGRvYy4KKworMjAwNS0xMC0yNSAxMDoxNTo0NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogRG9uJ3QgdXNlIGludmFsaWQgc3RyZWFtX3RpbWUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uKToKKwkgIERvbid0IHVzZSBpbnZhbGlkIHN0cmVhbV90aW1lLgorCSAgKiBnc3QvZ3N0ZXZlbnQuYzogKGdzdF9ldmVudF9uZXdfbmV3c2VnbWVudCk6CisJICBzdHJlYW1fdGltZSBpbiBuZXdzZWdtZW50IGNhbm5vdCBiZSB1bmRlZmluZWQuCisKKzIwMDUtMTAtMjUgMTA6MTI6MTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkqIENoYW5nZUxvZzoKKwkgIEZvcmdvdCB0aGUgY2hhbmdlbG9nIGxhc3QgdGltZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBGb3Jnb3QgdGhlIGNoYW5nZWxvZyBsYXN0IHRpbWUKKworMjAwNS0xMC0yNCAxNTo0MTo0OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJ1cy5jOiBEb2MgZml4LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RidXMuYzoKKwkgIERvYyBmaXguCisJICAqIGdzdC9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2hhbmRsZV9zaW5rX2V2ZW50KSwgKGdzdF9xdWV1ZV9jaGFpbiksCisJICAoZ3N0X3F1ZXVlX2xvb3ApOgorCSAgRml4IHBvdGVudGlhbCBkZWFkbG9jayB3aGVuIFFVRVVFX0xPQ0sgaXMgdGFrZW4gYmVmb3JlIFNUUkVBTV9MT0NLLgorCisyMDA1LTEwLTI0IDExOjU2OjAzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvbGlicy90bXBsLzogdGhlc2UgYXJlIG9ic29sZXRlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9saWJzL3RtcGwvZ3N0ZHBhcmFtLnNnbWw6CisJICAqIGRvY3MvbGlicy90bXBsL2dzdGRwbGluaW50LnNnbWw6CisJICAqIGRvY3MvbGlicy90bXBsL2dzdGRwbWFuLnNnbWw6CisJICAqIGRvY3MvbGlicy90bXBsL2dzdGRwc21vb3RoLnNnbWw6CisJICAqIGRvY3MvbGlicy90bXBsL2dzdHVuaXRjb252ZXJ0LnNnbWw6CisJICB0aGVzZSBhcmUgb2Jzb2xldGUKKworMjAwNS0xMC0yNCAwOToxMzoyNyArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgorCisJKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSogZ3N0L2dzdHF1ZXVlLmM6CisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkgIEZpeCBzb21lIG1pbm9yIGRvY3VtZW50YXRpb24gdHlwb3MKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgRml4IHNvbWUgbWlub3IgZG9jdW1lbnRhdGlvbiB0eXBvcworCisyMDA1LTEwLTIzIDIzOjA0OjM4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogY29uZmlndXJlLmFjOgorCSAgYmFjayB0byBIRUFECisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGJhY2sgdG8gSEVBRAorCis9PT0gcmVsZWFzZSAwLjkuNCA9PT0KKworMjAwNS0xMC0yMyAyMjozMDoxNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIE5FV1M6CisJKiBSRUxFQVNFOgorCSogY29uZmlndXJlLmFjOgorCSogZG9jcy9yYW5kb20vcmVsZWFzZToKKwkqIHBvL2FmLnBvOgorCSogcG8vYXoucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGUucG86CisJKiBwby9lbl9HQi5wbzoKKwkqIHBvL2ZyLnBvOgorCSogcG8vaXQucG86CisJKiBwby9uYi5wbzoKKwkqIHBvL25sLnBvOgorCSogcG8vcnUucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICB0aW1lIHRvIHJlbGVhc2UKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgdGltZSB0byByZWxlYXNlCisKKzIwMDUtMTAtMjMgMTA6NDk6MjYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiB3aW4zMi9NQU5JRkVTVDoKKwkgIGFkZCBtb3JlIGZpbGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFkZCBtb3JlIGZpbGVzCisKKzIwMDUtMTAtMjMgMTA6Mjk6NTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9lbGVtZW50cy9nc3RmaWxlc2luay5jOiBVc2UgZnNlZWtvKCkgYW5kIGZ0ZWxsbygpIGlmIGF2YWlsYWJsZS4gV2hlbiBmYWxsaW5nIGJhY2sgb24gbHNlZWsoKSB0byBnZXQgdGhlIGN1cnJlbnQgby4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9lbGVtZW50cy9nc3RmaWxlc2luay5jOiAoZ3N0X2ZpbGVfc2lua19kb19zZWVrKSwKKwkgIChnc3RfZmlsZV9zaW5rX2dldF9jdXJyZW50X29mZnNldCk6CisJICBVc2UgZnNlZWtvKCkgYW5kIGZ0ZWxsbygpIGlmIGF2YWlsYWJsZS4gV2hlbiBmYWxsaW5nIGJhY2sgb24KKwkgIGxzZWVrKCkgdG8gZ2V0IHRoZSBjdXJyZW50IG9mZnNldCwgZmZsdXNoKCkgZmlyc3QgdG8gbWFrZSBzdXJlCisJICBldmVyeXRoaW5nIGlzIHVwLXRvLWRhdGUgYW5kIHdlIGdldCB0aGUgcmlnaHQgb2Zmc2V0LgorCisyMDA1LTEwLTIzIDA5OjA4OjQ0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkqIGdzdC9nc3RlcnJvci5jOgorCSogZ3N0L2dzdGVycm9yLmg6CisJKiBnc3QvZ3N0cXVldWUuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSogcG8vUE9URklMRVMuaW46CisJICByZW1vdmUgcHJlbWF0dXJlbHkgYWRkZWQgZXJyb3IgY2F0ZWdvcnkgYW5kIGNsZWFuIHVwIHRoZSBpbnN0YW5jZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVtb3ZlIHByZW1hdHVyZWx5IGFkZGVkIGVycm9yIGNhdGVnb3J5IGFuZCBjbGVhbiB1cCB0aGUgaW5zdGFuY2VzCisKKzIwMDUtMTAtMjEgMTc6NTM6MzEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFNpbXBseSBzZXQgdGhlIHJpZ2h0IGZsYWcgd2hlbiBnb2luZyB0byBwbGF5aW5nLCB0aGF0J3MgYWxsIHdlIG5lZWQgdG8gZG8gaW5zdGVhZCBvZiBjYWxsaW5nIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NvbW1pdF9zdGF0ZSksCisJICAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24pLCAoZ3N0X2Jhc2Vfc2lua19xdWVyeSksCisJICAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgorCSAgU2ltcGx5IHNldCB0aGUgcmlnaHQgZmxhZyB3aGVuIGdvaW5nIHRvIHBsYXlpbmcsIHRoYXQncyBhbGwKKwkgIHdlIG5lZWQgdG8gZG8gaW5zdGVhZCBvZiBjYWxsaW5nIGEgZnVuY3Rpb24gaW5zaWRlIHRoZSBvYmplY3QKKwkgIGxvY2sgKHRoYXQgY291bGQgdGFrZSB0aGUgbG9jayBhcyB3ZWxsIGFuZCBkZWFkbG9jaykKKworMjAwNS0xMC0yMSAxNjoxODo1NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBEb24ndCB3YXJuLCB0aGUgcGVlciBlbGVtZW50IGtub3dzIHdoYXQgdG8gZG8gYmVzdCB3aGVuIHRoZSBzZWVrIGZhaWxlZCwgaXQgbWlnaHQgdHJ5IHNvbWV0aGluLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2RvX3NlZWspLAorCSAgKGdzdF9iYXNlX3NyY19sb29wKToKKwkgIERvbid0IHdhcm4sIHRoZSBwZWVyIGVsZW1lbnQga25vd3Mgd2hhdCB0byBkbyBiZXN0IHdoZW4KKwkgIHRoZSBzZWVrIGZhaWxlZCwgaXQgbWlnaHQgdHJ5IHNvbWV0aGluZyBlbHNlLgorCisyMDA1LTEwLTIxIDE2OjE0OjM0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IEZpeCBzZWVraW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19pbml0KSwKKwkgIChnc3RfYmFzZV9zcmNfZG9fc2VlayksIChnc3RfYmFzZV9zcmNfbG9vcCksIChnc3RfYmFzZV9zcmNfc3RhcnQpOgorCSAgRml4IHNlZWtpbmcuCisKKzIwMDUtMTAtMjEgMTU6MTM6MDggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZGVzaWduL3BhcnQtc2VnbWVudHMudHh0OiBNb3JlIGRvY3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1zZWdtZW50cy50eHQ6CisJICBNb3JlIGRvY3MuCisJICAqIGdzdC9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6IChnc3RfY2Fwc2ZpbHRlcl9wcmVwYXJlX2J1Zik6CisJICBDb3JyZWN0bHkgc2V0IGNhcHMsIGV2ZW4gb24gdGhlIHN1YmJ1ZmVyLgorCisyMDA1LTEwLTIxIDExOjM2OjMyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBBbmQgMiUgbW9yZSBkb2MgY292ZXJhZ2UuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdGVsZW1lbnQuaDoKKwkgICogZ3N0L2dzdGV2ZW50LmM6CisJICAqIGdzdC9nc3RldmVudC5oOgorCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgorCSAgKiBnc3QvZ3N0cGFkLmg6CisJICAqIGdzdC9nc3RwYXJzZS5oOgorCSAgKiBnc3QvZ3N0dGFzay5jOiAoZ3N0X3Rhc2tfZmluYWxpemUpLCAoZ3N0X3Rhc2tfZnVuYyk6CisJICAqIGdzdC9nc3R0YXNrLmg6CisJICAqIGdzdC9nc3R1dGlscy5jOgorCSAgKiBnc3QvZ3N0dXRpbHMuaDoKKwkgIEFuZCAyJSBtb3JlIGRvYyBjb3ZlcmFnZS4KKworMjAwNS0xMC0yMSAwOToyNDoyOCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNlc3JjLmMgKGdzdF9iYXNlX3NyY19xdWVyeSk6IENsZWFuIHVwIHBlcmNlbnQgcG9zaXRpb24gcmVwb3J0aW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTEwLTIxICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmMgKGdzdF9iYXNlX3NyY19xdWVyeSk6IENsZWFuIHVwIHBlcmNlbnQKKwkgIHBvc2l0aW9uIHJlcG9ydGluZy4KKworMjAwNS0xMC0yMCAyMTowODo0NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0LzogTW9yZSBkb2NzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RlcnJvci5jOiAoZ3N0X2Vycm9yX2dldF9tZXNzYWdlKToKKwkgICogZ3N0L2dzdHBhcnNlLmg6CisJICAqIGdzdC9nc3RxdWVyeS5oOgorCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJICAqIGdzdC9nc3R0cmFjZS5jOgorCSAgKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIE1vcmUgZG9jcy4KKworMjAwNS0xMC0yMCAyMDo0NjoxNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0LzogQW5vdGhlciAxJSBtb3JlIGNvdmVyYWdlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RidWZmZXIuaDoKKwkgICogZ3N0L2dzdHBhZC5jOgorCSAgKiBnc3QvZ3N0cGFyc2UuYzoKKwkgIEFub3RoZXIgMSUgbW9yZSBjb3ZlcmFnZS4KKworMjAwNS0xMC0yMCAyMDoyNTo1NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgWWF5ISAxJSBtb3JlIGRvY3MgY292ZXJhZ2UuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2dldF9zdGF0ZV9mdW5jKSwKKwkgIChnc3RfZWxlbWVudF9hYm9ydF9zdGF0ZSksIChnc3RfZWxlbWVudF9jb21taXRfc3RhdGUpLAorCSAgKGdzdF9lbGVtZW50X2xvc3Rfc3RhdGUpOgorCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKKwkgICogZ3N0L2dzdHF1ZXJ5LmM6IChnc3RfcXVlcnlfc2V0X3Bvc2l0aW9uKSwKKwkgIChnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24pLCAoZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbiksCisJICAoZ3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uKSwgKGdzdF9xdWVyeV9uZXdfY29udmVydCk6CisJICAqIGdzdC9nc3R1dGlscy5jOgorCSAgWWF5ISAxJSBtb3JlIGRvY3MgY292ZXJhZ2UuCisKKzIwMDUtMTAtMjAgMTk6NDc6MDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC86IERvY3MgYW5kIGNvbnNpc3RlbmN5IGZpeGVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuaDoKKwkgICogZ3N0L2dzdHF1ZXJ5LmM6IChnc3RfcXVlcnlfc2V0X3Bvc2l0aW9uKSwKKwkgIChnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24pLCAoZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbiksCisJICAoZ3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uKSwgKGdzdF9xdWVyeV9uZXdfY29udmVydCk6CisJICAqIGdzdC9nc3RxdWVyeS5oOgorCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9lbGVtZW50X3F1ZXJ5X2NvbnZlcnQpOgorCSAgKiBnc3QvZ3N0dXRpbHMuaDoKKwkgIERvY3MgYW5kIGNvbnNpc3RlbmN5IGZpeGVzLgorCisyMDA1LTEwLTIwIDE5OjMwOjU3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0dGFzay4qOiBNb3JlIGRvY3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHRhc2suYzoKKwkgICogZ3N0L2dzdHRhc2suaDoKKwkgIE1vcmUgZG9jcy4KKworMjAwNS0xMC0yMCAxNzoyMjo0MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJpbi5jOiBSZXdvcmtlZCB0aGUgbWVzc2FnZSBoYW5kbGluZyBhIGJpdCwgY2FjaGUgdGhlIG1lc3NhZ2VzIGluc3RlYWQgb2Ygb25seSB0aGUgc2VuZGVycy4gYWxvd3MgdXMgdG8gZG8gbW9yLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAobWVzc2FnZV9jaGVjayksIChiaW5fcmVwbGFjZV9tZXNzYWdlKSwKKwkgIChiaW5fcmVtb3ZlX21lc3NhZ2VzKSwgKGlzX2VvcyksIChnc3RfYmluX2FkZF9mdW5jKSwKKwkgICh1cGRhdGVfZGVncmVlKSwgKGdzdF9iaW5fc29ydF9pdGVyYXRvcl9uZXh0KSwKKwkgIChnc3RfYmluX2NoYW5nZV9zdGF0ZV9mdW5jKSwgKGdzdF9iaW5fZGlzcG9zZSksIChiaW5fYnVzX2hhbmRsZXIpOgorCSAgUmV3b3JrZWQgdGhlIG1lc3NhZ2UgaGFuZGxpbmcgYSBiaXQsIGNhY2hlIHRoZSBtZXNzYWdlcyBpbnN0ZWFkIG9mCisJICBvbmx5IHRoZSBzZW5kZXJzLiBhbG93cyB1cyB0byBkbyBtb3JlIGluIHRoZSBmdXR1cmUuCisKKzIwMDUtMTAtMjAgMTc6MTg6MTIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6IFVwZGF0ZSBUT0RPCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKKwkgIFVwZGF0ZSBUT0RPCisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2dldF9wb3NpdGlvbiksCisJICAoZ3N0X2Jhc2Vfc2lua19xdWVyeSk6CisJICBEb24ndCB1c2UgY2xvY2sgdGltZSB0byByZXBvcnQgcG9zaXRpb24gd2hlbiBpbiBFT1MuCisKKzIwMDUtMTAtMjAgMTM6MTA6MTMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHRvb2xzL2dzdC1pbnNwZWN0LmM6IEZpeCBpbnRlcmZhY2Ugb3V0cHV0IHdpdGggZ3N0LWluc3BlY3QgLWE7IGRvbid0IHByaW50IG5ld2xpbmVzIGFmdGVyIGRvdWJsZS9mbG9hdCBwcm9wZXJ0aWVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1pbnNwZWN0LmM6IChwcmludF9pbnRlcmZhY2VzKSwKKwkgIChwcmludF9lbGVtZW50X3Byb3BlcnRpZXNfaW5mbyksIChwcmludF9lbGVtZW50X2luZm8pOgorCSAgRml4IGludGVyZmFjZSBvdXRwdXQgd2l0aCBnc3QtaW5zcGVjdCAtYTsgZG9uJ3QgcHJpbnQKKwkgIG5ld2xpbmVzIGFmdGVyIGRvdWJsZS9mbG9hdCBwcm9wZXJ0aWVzLgorCisyMDA1LTEwLTIwIDExOjQ4OjUzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiBTcGVlZCB1cCBjdXJyZW50IHBvc2l0aW9uIGNhbGN1bGF0aW9uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2dldF9wb3NpdGlvbiksCisJICAoZ3N0X2Jhc2Vfc2lua19xdWVyeSk6CisJICBTcGVlZCB1cCBjdXJyZW50IHBvc2l0aW9uIGNhbGN1bGF0aW9uLgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfcXVlcnkpLAorCSAgKGdzdF9iYXNlX3NyY19kZWZhdWx0X25ld3NlZ21lbnQpOgorCSAgQ29ycmVjdGx5IHNldCBzdHJlYW0gcG9zaXRpb24gaW4gbmV3c2VnbWVudC4KKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9hZGRfZnVuYyksIChhZGRfdG9fcXVldWUpLAorCSAgKHVwZGF0ZV9kZWdyZWUpLCAoZ3N0X2Jpbl9zb3J0X2l0ZXJhdG9yX25leHQpLAorCSAgKGdzdF9iaW5fc29ydF9pdGVyYXRvcl9yZXN5bmMpLCAoZ3N0X2Jpbl9zb3J0X2l0ZXJhdG9yX2ZyZWUpOgorCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOiAoZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbSk6CisJICBDbGVhbiB1cCBkZWJ1Z2dpbmcgaW5mbworCSAgKiBnc3QvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9saW5rX3NyYyksIChnc3RfcXVldWVfY2hhaW4pLAorCSAgKGdzdF9xdWV1ZV9sb29wKSwgKGdzdF9xdWV1ZV9oYW5kbGVfc3JjX3F1ZXJ5KToKKwkgIFBhdXNlIHRhc2sgZmFzdGVyLgorCisyMDA1LTEwLTE5IDE3OjA2OjU2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiBGaXggcXVlcnkgaGFuZGxpbmcgYWdhaW4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfY29tbWl0X3N0YXRlKSwKKwkgIChnc3RfYmFzZV9zaW5rX2hhbmRsZV9vYmplY3QpLCAoZ3N0X2Jhc2Vfc2lua19xdWVyeSksIChkb19wbGF5aW5nKToKKwkgIEZpeCBxdWVyeSBoYW5kbGluZyBhZ2Fpbi4KKworMjAwNS0xMC0xOSAxNTo1MDoxMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0LzogQVBJIGNoYW5nZSBmaXguCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfY29tbWl0X3N0YXRlKSwKKwkgIChnc3RfYmFzZV9zaW5rX2hhbmRsZV9vYmplY3QpLCAoZ3N0X2Jhc2Vfc2lua19xdWVyeSksIChkb19wbGF5aW5nKToKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX3F1ZXJ5KToKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IChnc3RfZmlsZV9zaW5rX3F1ZXJ5KToKKwkgICogZ3N0L2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSAgKGdzdF90eXBlX2ZpbmRfaGFuZGxlX3NyY19xdWVyeSksIChmaW5kX2VsZW1lbnRfZ2V0X2xlbmd0aCksCisJICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2FjdGl2YXRlKToKKwkgIEFQSSBjaGFuZ2UgZml4LgorCSAgKiBnc3QvZ3N0cXVlcnkuYzogKGdzdF9xdWVyeV9uZXdfcG9zaXRpb24pLAorCSAgKGdzdF9xdWVyeV9zZXRfcG9zaXRpb24pLCAoZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uKSwKKwkgIChnc3RfcXVlcnlfbmV3X2R1cmF0aW9uKSwgKGdzdF9xdWVyeV9zZXRfZHVyYXRpb24pLAorCSAgKGdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbiksIChnc3RfcXVlcnlfc2V0X3NlZ21lbnQpLAorCSAgKGdzdF9xdWVyeV9wYXJzZV9zZWdtZW50KToKKwkgICogZ3N0L2dzdHF1ZXJ5Lmg6CisJICBCdW5kbGluZyBxdWVyeSBwb3NpdGlvbi9kdXJhdGlvbiBpcyBub3QgYSBnb29kIGlkZWEgc2luY2UgZHVyYXRpb24KKwkgIGRvZXMgbm90IGNoYW5nZSBtdWNoIGFuZCB3ZSBkb24ndCB3YW50IHRvIHJlY2FsY3VsYXRlIGl0IGZvciBldmVyeQorCSAgcG9zaXRpb24gcXVlcnksIHNvIHRoZXkgYXJlIHNlcGFyYXRlZCBhZ2Fpbi4uCisJICBCYXNlIHZhbHVlIGluIHNlZ21lbnQgcXVlcnkgaXMgbm90IG5lZWRlZC4KKwkgICogZ3N0L2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfaGFuZGxlX3NyY19xdWVyeSk6CisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24pLAorCSAgKGdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uKSwgKGdzdF9wYWRfcXVlcnlfcG9zaXRpb24pLAorCSAgKGdzdF9wYWRfcXVlcnlfZHVyYXRpb24pOgorCSAgKiBnc3QvZ3N0dXRpbHMuaDoKKwkgIFVwZGF0ZXMgZm9yIHF1ZXJ5IEFQSSBjaGFuZ2UuCisJICBBZGRlZCBzb21lIGRvY3MgaGVyZSBhbmQgdGhlcmUuCisKKzIwMDUtMTAtMTkgMTE6NDM6NDIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBjaGVjay86IHdhaXQgb24gdGhyZWFkIHRvIGRpZSBzbyB3ZSBjYW4gY2hlY2sgcmVmY291bnQgY29ycmVjdGx5CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svZ3N0L2dzdGJpbi5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgKiBjaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgICogY2hlY2svcGlwZWxpbmVzL2NsZWFudXAuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgIHdhaXQgb24gdGhyZWFkIHRvIGRpZSBzbyB3ZSBjYW4gY2hlY2sgcmVmY291bnQgY29ycmVjdGx5CisKKzIwMDUtMTAtMTkgMTE6NDM6MTggKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KKworCSogZ3N0cmVhbWVyLnNwZWMuaW46CisJICB1cGRhdGUgdG9vbHMgcGFja2FnZSBuYW1pbmcKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgdXBkYXRlIHRvb2xzIHBhY2thZ2UgbmFtaW5nCisKKzIwMDUtMTAtMTkgMTE6NDI6MzkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBsb2cgYW4gaWYgYnJhbmNoCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGxvZyBhbiBpZiBicmFuY2gKKworMjAwNS0xMC0xOCAxNzozMDo1MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgY2hlY2svcGlwZWxpbmVzL3N0cmVzcy5jOiBNYWtlIGNoZWNrIGEgbGl0dGxlIG1vcmUgdGltZSBjb25zdW1pbmcuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svcGlwZWxpbmVzL3N0cmVzcy5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgTWFrZSBjaGVjayBhIGxpdHRsZSBtb3JlIHRpbWUgY29uc3VtaW5nLgorCisyMDA1LTEwLTE4IDE3OjA2OjI5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBjaGVjay86IFNtYWxsIHN0YXRlIGNoYW5nZSB0b3J0dXJlIHRlc3QuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svTWFrZWZpbGUuYW06CisJICAqIGNoZWNrL3BpcGVsaW5lcy9zdHJlc3MuYzogKEdTVF9TVEFSVF9URVNUKSwKKwkgIChzaW1wbGVfbGF1bmNoX2xpbmVzX3N1aXRlKSwgKG1haW4pOgorCSAgU21hbGwgc3RhdGUgY2hhbmdlIHRvcnR1cmUgdGVzdC4KKwkgICogZG9jcy9kZXNpZ24vcGFydC1zdGF0ZXMudHh0OgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19jb21taXRfc3RhdGUpLAorCSAgKGdzdF9iYXNlX3NpbmtfaGFuZGxlX29iamVjdCksIChnc3RfYmFzZV9zaW5rX2V2ZW50KSwgKGRvX3BsYXlpbmcpLAorCSAgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKKwkgIE5ldmVyIHRha2Ugc3RhdGUgbG9jayBmcm9tIHN0cmVhbWluZyB0aHJlYWQsIGNsZWFuIHVwIHVnbHkKKwkgIGhhY2tzLiBVbmZvcnR1bmF0bHkgY29yZSBkb2VzIG5vdCB5ZXQgc3VwcG9ydCBuaWNlIHdheXMgdG8KKwkgIGFzeW5jIGNvbW1pdCBzdGF0ZS4KKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9yZW1vdmVfZnVuYyksIChnc3RfYmluX3JlY2FsY19zdGF0ZSksCisJICAoYmluX2J1c19oYW5kbGVyKToKKwkgIFN0YXJ0IHN0YXRlIHJlY2FsYyBpZiBhIFNUQVRFX0RJUlRZIG1lc3NhZ2UgaXMgcG9zdGVkLCBidXQgb25seQorCSAgb24gdGhlIHRvcGxldmVsIGJpbi4KKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQpLAorCSAgKGdzdF9lbGVtZW50X2dldF9zdGF0ZV9mdW5jKSwgKGdzdF9lbGVtZW50X2Fib3J0X3N0YXRlKSwKKwkgIChnc3RfZWxlbWVudF9jb21taXRfc3RhdGUpLCAoZ3N0X2VsZW1lbnRfbG9zdF9zdGF0ZSksCisJICAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlX2Z1bmMpLCAoZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlKToKKwkgICogZ3N0L2dzdGVsZW1lbnQuaDoKKwkgIFN0YXRlIHZhcmlhYmxlcyBhcmUgbm93IHByb3RlY3RlZCB3aXRoIHRoZSBMT0NLLCB0aGUgc3RhdGUKKwkgIGxvY2sgaXMgb25seSB1c2VkIHRvIHNlcmlhbGl6ZSBfc2V0X3N0YXRlKCkuCisKKzIwMDUtMTAtMTggMTY6MjU6MzggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIFNlcmlvdXNseSwgdGhpcyBpcyBiZXR0ZXIgdGhhbiBhIHByZXZpb3VzIGNvbW1pdCBhcyB3ZSBvbmx5IG5lZWQgdG8gbm90aWZ5IHRoZSBmYWN0IHRoYXQgYW4gZWxlbWVudCBjaGFuZ2VkIHN0YXRlIGluIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dzdC9nc3RiaW4uYzogKEdTVF9TVEFSVF9URVNUKToKKwkgICogY2hlY2svZ3N0L2dzdG1lc3NhZ2UuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgICogY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmM6IChHU1RfU1RBUlRfVEVTVCksIChtZXNzYWdlX3JlY2VpdmVkKToKKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9jbGFzc19pbml0KSwgKGdzdF9iaW5fcmVjYWxjX2Z1bmMpLAorCSAgKGJpbl9idXNfaGFuZGxlcik6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9hYm9ydF9zdGF0ZSksCisJICAoZ3N0X2VsZW1lbnRfY29tbWl0X3N0YXRlKSwgKGdzdF9lbGVtZW50X2xvc3Rfc3RhdGUpOgorCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOiAoZ3N0X21lc3NhZ2VfbmV3X3N0YXRlX2NoYW5nZWQpLAorCSAgKGdzdF9tZXNzYWdlX25ld19zdGF0ZV9kaXJ0eSksIChnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9zdGFydCksCisJICAoZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfZG9uZSksIChnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb24pLAorCSAgKGdzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQpLAorCSAgKGdzdF9tZXNzYWdlX3BhcnNlX3NlZ21lbnRfc3RhcnQpLAorCSAgKGdzdF9tZXNzYWdlX3BhcnNlX3NlZ21lbnRfZG9uZSksIChnc3RfbWVzc2FnZV9wYXJzZV9kdXJhdGlvbik6CisJICAqIGdzdC9nc3RtZXNzYWdlLmg6CisJICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKGV2ZW50X2xvb3ApOgorCSAgU2VyaW91c2x5LCB0aGlzIGlzIGJldHRlciB0aGFuIGEgcHJldmlvdXMgY29tbWl0IGFzIHdlIG9ubHkgbmVlZAorCSAgdG8gbm90aWZ5IHRoZSBmYWN0IHRoYXQgYW4gZWxlbWVudCBjaGFuZ2VkIHN0YXRlIGluIGEgc3RyZWFtaW5nCisJICB0aHJlYWQsIG1hcmtpbmcgdGhlIHN0YXRlIG9mIHRoZSBwYXJlbnRzIGRpcnR5LCBoZW5jZSB0aGUKKwkgIFNUQVRFX0RJUlRZIG1lc3NhZ2UgaW5zdGVhZCBvZiBhYnVzaW5nIGEgYm9vbGVhbiBpbiBhIFNUQVRFX0NIQU5HRQorCSAgbWVzc2FnZS4KKworMjAwNS0xMC0xOCAxNToxNToxMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0LzogQ2xlYW51cHMsIHByZXBhcmUgZm9yIHN0YXRlIGNoYW5nZSBmaXhlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2NsYXNzX2luaXQpLCAoZ3N0X2Jpbl9nZXRfc3RhdGVfZnVuYyksCisJICAoZ3N0X2Jpbl9yZWNhbGNfZnVuYyk6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9zZXRfY2xvY2spLAorCSAgKGdzdF9lbGVtZW50X2Fib3J0X3N0YXRlKSwgKGdzdF9lbGVtZW50X2xvc3Rfc3RhdGUpOgorCSAgQ2xlYW51cHMsIHByZXBhcmUgZm9yIHN0YXRlIGNoYW5nZSBmaXhlcy4KKworMjAwNS0xMC0xOCAxNDoyOToyMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0LzogUGVuZGluZyBBQkkgY2hhbmdlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmg6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9jbGFzc19pbml0KSwKKwkgIChnc3RfZWxlbWVudF9zZXRfc3RhdGUpLCAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlX2Z1bmMpOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSAgUGVuZGluZyBBQkkgY2hhbmdlcy4KKwkgIEdUaHJlYWRQb29sIGluIEdzdEJpbkNsYXNzIHRvIG1vbml0b3IgYXN5bmMgc3RhdGUgY2hhbmdlcy4KKwkgIHN0YXRlX2Nvb2tpZSBpbiBHc3RFbGVtZW50IHRvIGRldGVjdCBjb25jdXJyZW50IGdzdC9zZXQgc3RhdGUuCisJICBzZXRfc3RhdGUgaXMgbm93IHZpcnR1YWwgdG9vIGluIGNhc2UgYSB2ZXJ5IGNvbXBsaWNhdGVkIGVsZW1lbnQKKwkgIGhhcyB0byBiZSBjb25zdHJ1Y3RlZC4KKworMjAwNS0xMC0xOCAxMzoxOToxNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgTWFrZSBtZXNzYWdlcyBmdXR1cmUgcHJvb2YuIHN0YXRlLWNoYW5nZSBnZXRzIGEgZmxhZyBpZiBpdCB3YXMgYSBtZXNzYWdlIGNvbW1pbmcgZnJvbSB0aGUgc3RyZWFtaW5nIHRocmVhZC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9nc3QvZ3N0YmluLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICAqIGNoZWNrL2dzdC9nc3RtZXNzYWdlLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICAqIGNoZWNrL2dzdC9nc3RwaXBlbGluZS5jOiAoR1NUX1NUQVJUX1RFU1QpLCAobWVzc2FnZV9yZWNlaXZlZCk6CisJICAqIGdzdC9nc3RiaW4uYzogKGJpbl9idXNfaGFuZGxlcik6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9jb21taXRfc3RhdGUpLAorCSAgKGdzdF9lbGVtZW50X2xvc3Rfc3RhdGUpOgorCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOiAoZ3N0X21lc3NhZ2VfbmV3X3N0YXRlX2NoYW5nZWQpLAorCSAgKGdzdF9tZXNzYWdlX25ld19zZWdtZW50X3N0YXJ0KSwgKGdzdF9tZXNzYWdlX25ld19zZWdtZW50X2RvbmUpLAorCSAgKGdzdF9tZXNzYWdlX25ld19kdXJhdGlvbiksIChnc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkKSwKKwkgIChnc3RfbWVzc2FnZV9wYXJzZV9zZWdtZW50X3N0YXJ0KSwKKwkgIChnc3RfbWVzc2FnZV9wYXJzZV9zZWdtZW50X2RvbmUpLCAoZ3N0X21lc3NhZ2VfcGFyc2VfZHVyYXRpb24pOgorCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgorCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChldmVudF9sb29wKToKKwkgIE1ha2UgbWVzc2FnZXMgZnV0dXJlIHByb29mLgorCSAgc3RhdGUtY2hhbmdlIGdldHMgYSBmbGFnIGlmIGl0IHdhcyBhIG1lc3NhZ2UgY29tbWluZyBmcm9tIHRoZQorCSAgc3RyZWFtaW5nIHRocmVhZC4KKwkgIHNlZ21lbnQtc3RhcnQvc3RvcCBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgaW4gb3RoZXIgZm9ybWF0cy4KKwkgIEEgbWVzc2FnZSB0byBub3RpZnkgYW4gYXBwIHRoYXQgYSBwaXBlbGluZSBjaGFuZ2VkIHBsYXliYWNrCisJICBkdXJhdGlvbi4KKwkgIEFsc28gZml4IGEgR3N0TWVzc2FnZSBsZWFrIGluIC1sYXVuY2gKKworMjAwNS0xMC0xOCAxMDozMjo0OCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0ZWxlbWVudC5jIChnc3RfZWxlbWVudF9kaXNwb3NlKTogTW9yZSBoZWxwZnVsIG1lc3NhZ2UuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTAtMTggIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3RlbGVtZW50LmMgKGdzdF9lbGVtZW50X2Rpc3Bvc2UpOiBNb3JlIGhlbHBmdWwgbWVzc2FnZS4KKworMjAwNS0xMC0xOCAwODoyMDoyNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGNvbW1vbjoKKwkqIGNvbmZpZ3VyZS5hYzoKKwkgIHJlbW92ZSBpbmZvIG1lc3NhZ2VzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJlbW92ZSBpbmZvIG1lc3NhZ2VzCisKKzIwMDUtMTAtMTggMDc6MTM6MjUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBnc3QvZ3N0cmVnaXN0cnkuYzogdW5yZWYgYSBwbHVnLWluIHdlIGdldCB0aGF0IHdhcyBhbHJlYWR5IGluaXRpYWxpemVkCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6IChnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2xldmVsKToKKwkgIHVucmVmIGEgcGx1Zy1pbiB3ZSBnZXQgdGhhdCB3YXMgYWxyZWFkeSBpbml0aWFsaXplZAorCisyMDA1LTEwLTE3IDIwOjE2OjU1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGFkZCBuZXcgYXBpIGVudHJpZXMgaGlkZSBpbnRlcm5hbCBtYWNybworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3RlbGVtZW50Lmg6CisJICBhZGQgbmV3IGFwaSBlbnRyaWVzCisJICBoaWRlIGludGVybmFsIG1hY3JvCisKKzIwMDUtMTAtMTcgMTg6MDk6MzIgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYyAoZ3N0X2NvbGxlY3RwYWRzX2NoYWluKTogU2xpZ2h0IGNsZWFudXAuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTAtMTcgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmMgKGdzdF9jb2xsZWN0cGFkc19jaGFpbik6IFNsaWdodAorCSAgY2xlYW51cC4KKwkgICogZ3N0L01ha2VmaWxlLmFtIChnc3RlbnVtdHlwZXMuYyk6IFRocmVhZHNhZmUgbm93LgorCSAgKiBnc3QvZ3N0ZXZlbnQuYyAoZ3N0X2V2ZW50X25ldywgZ3N0X2V2ZW50X2ZpbmFsaXplKTogTE9HLgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jIChnc3RfZWxlbWVudF9nZXRfc3RhdGVfZnVuYyk6IHMvSU5GTy9ERUJVRy8uCisJICAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlX2Z1bmMpOiBCZXR0ZXIgZGVidWcgbWVzc2FnZS4KKwkgIChnc3RfZWxlbWVudF9jb21taXRfc3RhdGUpOiBzL0lORk8vREVCVUcvLgorCSAgKGdzdF9lbGVtZW50X2xvc3Rfc3RhdGUsIGdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZSk6CisJICAqIGdzdC9nc3RtZXNzYWdlLmMgKGdzdF9tZXNzYWdlX2luaXQpOiBzL0lORk8vTE9HLy4KKwkgIChnc3RfbWVzc2FnZV9uZXdfY3VzdG9tKTogcy9JTkZPL0xPRy8uCisKKzIwMDUtMTAtMTcgMTc6NDY6MzcgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIENoZWNrIHZhbGlkaXR5IG9mIGVuZCB0aW1lIGJhc2VkIG9uIGVuZCB0aW1lIHZhcmlhYmxlLCBub3Qgc3RhcnQgdGltZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgQ2hlY2sgdmFsaWRpdHkgb2YgZW5kIHRpbWUgYmFzZWQgb24gZW5kIHRpbWUgdmFyaWFibGUsIG5vdCBzdGFydCB0aW1lLgorCisyMDA1LTEwLTE3IDE3OjA1OjM4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIG1lcmdlIGNvbnRyb2xsZXIgdGVzdHN1aXRlcyBmaXggYnJva2VuIHRlc3RzIHJlbW92ZSBtZW0tY2h1bmsgZnJvbSBkb2NzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svZ3N0LWxpYnMvY29udHJvbGxlci5jOiAoR1NUX1NUQVJUX1RFU1QpLAorCSAgKGdzdF9jb250cm9sbGVyX3N1aXRlKToKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6CisJICAoZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfc2V0X2ludGVycG9sYXRpb25fbW9kZSk6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5oOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzoKKwkgICogdGVzdHN1aXRlL2NvbnRyb2xsZXIvLmN2c2lnbm9yZToKKwkgICogdGVzdHN1aXRlL2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06CisJICAqIHRlc3RzdWl0ZS9jb250cm9sbGVyL2ludGVycG9sYXRvci5jOgorCSAgbWVyZ2UgY29udHJvbGxlciB0ZXN0c3VpdGVzCisJICBmaXggYnJva2VuIHRlc3RzCisJICByZW1vdmUgbWVtLWNodW5rIGZyb20gZG9jcworCisyMDA1LTEwLTE3IDE0OjQyOjIyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0Lzogb3V0LiAgZ2V0IG91dC4gIHlvdSdyZSBmaXJlZC4gIHRvIHRoZSBBdHRpYyAhCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdG1lbWNodW5rLmM6CisJICAqIGdzdC9nc3RtZW1jaHVuay5oOgorCSAgKiBnc3QvZ3N0dHJhc2hzdGFjay5jOgorCSAgKiBnc3QvZ3N0dHJhc2hzdGFjay5oOgorCSAgb3V0LiAgZ2V0IG91dC4gIHlvdSdyZSBmaXJlZC4gIHRvIHRoZSBBdHRpYyAhCisKKzIwMDUtMTAtMTcgMTQ6Mzc6MDYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBnc3QvZ3N0Y2Fwcy5jOiBmaXggc2lnbmVkbmVzcyBpc3N1ZXMgaW4gYSAoaG9wZWZ1bGx5KSBjb3JyZWN0IHdheQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RjYXBzLmM6IChnc3RfY2Fwc19pbnRlcnNlY3QpOgorCSAgZml4IHNpZ25lZG5lc3MgaXNzdWVzIGluIGEgKGhvcGVmdWxseSkgY29ycmVjdCB3YXkKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X3BhZHNfYWN0aXZhdGUpOgorCSAgc29tZSBkZWJ1Z2dpbmcKKwkgICogZ3N0L2dzdG9iamVjdC5jOiAoZ3N0X29iamVjdF9zZXRfcGFyZW50KToKKwkgIHNvbWUgZGVidWdnaW5nCisKKzIwMDUtMTAtMTcgMTA6Mzc6MTMgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KKworCSogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIEZpeCBhIGRvYyB0eXBvLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBGaXggYSBkb2MgdHlwby4KKworMjAwNS0xMC0xNyAwOToyODozNSArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+CisKKwkgIGdzdC9nc3R2YWx1ZS5oOiBGaXggcHJvdG90eXBlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMC0xNyAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgorCSAgKiBnc3QvZ3N0dmFsdWUuaDogRml4IHByb3RvdHlwZXMuCisKKzIwMDUtMTAtMTYgMTQ6MzI6NTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZ3N0L2dzdC5jOgorCSogZ3N0L2dzdC5oOgorCSogZ3N0L2dzdHZlcnNpb24uaC5pbjoKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgYWRkIGdzdF92ZXJzaW9uX3N0cmluZyAoKQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGQgZ3N0X3ZlcnNpb25fc3RyaW5nICgpCisKKzIwMDUtMTAtMTYgMTM6NTU6NDEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBjb25maWd1cmUuYWM6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICBjb21tZW50OyB1cGRhdGUgd2luMzIgY29uZmlnLmgKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgY29tbWVudDsgdXBkYXRlIHdpbjMyIGNvbmZpZy5oCisKKzIwMDUtMTAtMTYgMTI6Mzc6MTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBzY3JpcHRzL2N2cy11cGRhdGUuc2g6CisJICBEZWFyIEFuZHk6IGhlcmUncyBhIHNjcmlwdCB0byB1cGRhdGUgc3R1ZmYgZnJvbSBDVlMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgRGVhciBBbmR5OgorCSAgaGVyZSdzIGEgc2NyaXB0IHRvIHVwZGF0ZSBzdHVmZiBmcm9tIENWUworCSAgTG92ZSwKKwkgIFRob21hcworCisyMDA1LTEwLTE2IDEyOjI4OjIwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgY29uZmlndXJlLmFjOiBjbGVhbiB1cCBmdXJ0aGVyCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgY2xlYW4gdXAgZnVydGhlcgorCSAgKiBnc3QvZ3N0LmM6IChpbml0X3Bvc3QpOgorCSAgKiB3aW4zMi9jb21tb24vY29uZmlnLmguaW46CisJICBpdCdzIFBMVUdJTkRJUiBub3cKKwkgICogZ3N0L2dzdGNhcHMuYzogKGdzdF9jYXBzX2ludGVyc2VjdCk6CisJICB1c2UgZ2ludDY0LCB0aGUgcmFuZ2UgY291bGQgYmUgYmlnZ2VyIHRoYW4gYSBndWludAorCisyMDA1LTEwLTE2IDExOjQ4OjA5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogY29tbW9uOgorCSogZ3N0L2dzdGNsb2NrLmg6CisJICBHU3RyZWFtZXIgY29uc3VsdGFudHMgd2lsbCBtYWtlIGEgbG90IG9mIG1vbmV5IGluIDIwMzgKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgR1N0cmVhbWVyIGNvbnN1bHRhbnRzIHdpbGwgbWFrZSBhIGxvdCBvZiBtb25leSBpbiAyMDM4CisKKzIwMDUtMTAtMTYgMTA6NTg6NDEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBnc3QvZ3N0Y2Fwcy5jOiBGaXggZ3VpbnQgaiBkaXZpbmcgdW5kZXIgMAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RjYXBzLmM6IChnc3RfY2Fwc19pbnRlcnNlY3QpOgorCSAgRml4IGd1aW50IGogZGl2aW5nIHVuZGVyIDAKKworMjAwNS0xMC0xNiAxMDozODowMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGNoZWNrIGZvciBwcm9jZXNzLmgsIGRlY2xhcmVzIGdldHBpZCgpIG9uIFdpbmRvd3MKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICAqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oLmluOgorCSAgY2hlY2sgZm9yIHByb2Nlc3MuaCwgZGVjbGFyZXMgZ2V0cGlkKCkgb24gV2luZG93cworCSAgKiBnc3QvZ3N0aW5mby5jOgorCSAgaW5jbHVkZSBwcm9jZXNzLmggaWYgd2UgaGF2ZSBpdAorCSAgKiBnc3QvZ3N0bWVtY2h1bmsuYzogKHBvcHVsYXRlKSwgKGdzdF9tZW1fY2h1bmtfbmV3KToKKwkgICogZ3N0L2dzdG1lbWNodW5rLmg6CisJICBmaXggc2lnbmVkbmVzcyBpc3N1ZXMKKwkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICBmaXggZ2V0X3R5cGUncworCisyMDA1LTEwLTE2IDEwOjIyOjI5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2dzdGNhcHMuYzoKKwkgIGZpeCBzaWduZWRuZXNzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGZpeCBzaWduZWRuZXNzCisKKzIwMDUtMTAtMTYgMTA6MTg6MzYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmguaW46CisJICBmaXggR1NUX1ZFUlNJT04KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZml4IEdTVF9WRVJTSU9OCisKKzIwMDUtMTAtMTYgMTA6MTU6MjQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmguaW46CisJICBmaXggaW5saW5lCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGZpeCBpbmxpbmUKKworMjAwNS0xMC0xNiAxMDoxMjozNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaC5pbjoKKwkgIGRlZmluZSBQQUNLQUdFCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGRlZmluZSBQQUNLQUdFCisKKzIwMDUtMTAtMTYgMTA6MTA6MjUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJKiB3aW4zMi9jb21tb24vY29uZmlnLmguaW46CisJICB1cGRhdGUgYXZhaWxhYmxlIGhlYWRlcnMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgdXBkYXRlIGF2YWlsYWJsZSBoZWFkZXJzCisKKzIwMDUtMTAtMTYgMDk6NTY6MzMgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgorCisJICBnc3QvZ3N0Y2Fwcy5jOiBGaXggYSBiYWQgYnVnIHdpdGggYSBzaW1wbGUgZml4LiBCZWNhdXNlIG9mIHVuc2lnbmVkIGludHMsIGNhcHMgaW50ZXJzZWN0aW9uIHdhcyBnb2luZyBudXRzIGFuZCB0cnlpbmcuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMC0xNiAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgorCSAgKiBnc3QvZ3N0Y2Fwcy5jOiAoZ3N0X2NhcHNfaW50ZXJzZWN0KTogRml4IGEgYmFkIGJ1ZyB3aXRoIGEKKwkgIHNpbXBsZQorCSAgZml4LiBCZWNhdXNlIG9mIHVuc2lnbmVkIGludHMsIGNhcHMgaW50ZXJzZWN0aW9uIHdhcyBnb2luZyBudXRzCisJICBhbmQKKwkgIHRyeWluZyB0byBhY2Nlc3Mgc3RydWN0dXJlcyB3aXRoIEdfTUFYVUlOVCBpbmRleC4gVGhhdCBmaXhlcworCSAgdmlkZW90ZXN0c3JjICEgZmZtcGVnY29sb3JzcGFjZSAhIGZha2VzaW5rCisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfbGlua19jaGVja19jb21wYXRpYmxlX3VubG9ja2VkKTogbG9ncworCSAgY29uc2lzdGVuY3kuCisKKzIwMDUtMTAtMTYgMDk6NTU6MjQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICB1cGRhdGUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgdXBkYXRlCisKKzIwMDUtMTAtMTYgMDk6NTQ6MjIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiB3aW4zMi9jb21tb24vY29uZmlnLmguaW46CisJICB0eXBvCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHR5cG8KKworMjAwNS0xMC0xNiAwOTo1MToyNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKKwkqIHdpbjMyL2NvbW1vbi9jb25maWcuaC5pbjoKKwkgIHVwZGF0ZXMgZm9yIDJpbjMyCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHVwZGF0ZXMgZm9yIDJpbjMyCisKKzIwMDUtMTAtMTYgMDk6NDQ6MDQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBjaGVjay9nc3QtbGlicy9jb250cm9sbGVyLmM6CisJKiBjaGVjay9nc3QvZ3N0cGx1Z2luLmM6CisJKiBjb25maWd1cmUuYWM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGx1Z2luLmM6CisJKiB0ZXN0cy9jaGVjay9saWJzL2NvbnRyb2xsZXIuYzoKKwkgIG1vcmUgZGVmaW5lIGZpeGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIG1vcmUgZGVmaW5lIGZpeGVzCisKKzIwMDUtMTAtMTYgMDk6MjA6NTIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBjb25maWd1cmUuYWM6IHVzZSB0aGUgZ2V0dGV4dCBtYWNybworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTEwLTE2ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCSAgKiBjb25maWd1cmUuYWM6CisJICB1c2UgdGhlIGdldHRleHQgbWFjcm8KKwkgICogZ3N0L2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6CisJICAqIGdzdC9nc3QuYzoKKwkgICogZ3N0L2luZGV4ZXJzL2dzdGluZGV4ZXJzLmM6CisJICB1cGRhdGUgZm9yIEdTVF9QQUNLQUdFX05BTUUsIEdTVF9QQUNLQUdFX09SSUdJTgorCSAgKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICB1cGRhdGVkIGNvbmZpZy5oCisJICAqIHdpbjMyL2NvbW1vbi9jb25maWcuaC5pbjoKKwkgIGFkZCB0aGUgdGVtcGxhdGUgdG8gZ2VuZXJhdGUgY29uZmlnLmgKKwkgICogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jOgorCSAgKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgorCSAgdXBkYXRlZCBjb3BpZXMKKworMjAwNS0xMC0xNiAwOToxMTo1NyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItZGF0YXByb3RvY29sLXVuaW5zdGFsbGVkLnBjLmluOgorCSogcGtnY29uZmlnL2dzdHJlYW1lci1kYXRhcHJvdG9jb2wucGMuaW46CisJICByZW1vdmUgbW9yZSBQS0dfQ0ZMQUdTCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJlbW92ZSBtb3JlIFBLR19DRkxBR1MKKworMjAwNS0xMC0xNiAwOToxMDoxNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGdzdC86IGFkZCB0aGUgbmFubworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3QuYzogKGdzdF92ZXJzaW9uKToKKwkgICogZ3N0L2dzdHZlcnNpb24uaC5pbjoKKwkgIGFkZCB0aGUgbmFubworCisyMDA1LTEwLTE2IDA4OjU5OjM0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogcGtnY29uZmlnL2dzdHJlYW1lci11bmluc3RhbGxlZC5wYy5pbjoKKwkqIHBrZ2NvbmZpZy9nc3RyZWFtZXIucGMuaW46CisJICByZW1vdmUgR1NUX1BLR19DRkxBR1MKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVtb3ZlIEdTVF9QS0dfQ0ZMQUdTCisKKzIwMDUtMTAtMTUgMjI6MjQ6MjAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RldmVudC5oOiBPb3BzLCBhZGQgbWlzc2luZyBjbG9zaW5nIGJyYWNrZXQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGV2ZW50Lmg6CisJICBPb3BzLCBhZGQgbWlzc2luZyBjbG9zaW5nIGJyYWNrZXQuCisKKzIwMDUtMTAtMTUgMjE6NDE6MjAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBjb25maWd1cmUuYWM6IHVzZSBjb21tb24gbTQncyBmb3IgYXJndW1lbnQgY2hlY2tpbmcKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICB1c2UgY29tbW9uIG00J3MgZm9yIGFyZ3VtZW50IGNoZWNraW5nCisKKzIwMDUtMTAtMTUgMjA6MzM6MDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIEFkZCBHU1RfRVZFTlRfVFlQRV9OQU1FKCkgbWFjcm8uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdGV2ZW50Lmg6CisJICBBZGQgR1NUX0VWRU5UX1RZUEVfTkFNRSgpIG1hY3JvLgorCisyMDA1LTEwLTE1IDIwOjAwOjMwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6CisJICB1cGRhdGUgZGVmcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB1cGRhdGUgZGVmcworCisyMDA1LTEwLTE1IDE5OjU3OjAzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0LzogcHJpdmF0aXplIG1vcmUgc3ltYm9scworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RpbmZvLmM6CisJICAqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6CisJICAqIGdzdC9nc3R0YXNrLmM6CisJICBwcml2YXRpemUgbW9yZSBzeW1ib2xzCisKKzIwMDUtMTAtMTUgMTg6MjI6MzEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBjb25maWd1cmUuYWM6IGFkZCBzcmNkaXIsIGJ1aWxkZGlyIGluY2x1ZGVzIHRvIEdTVF9BTExfQ0ZMQUdTLCBzaW5jZSBldmVyeXRoaW5nIHRoYXQgdXNlcyBHU3RyZWFtZXIgQVBJIHNob3VsZCBoYXZlIHQuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICBhZGQgc3JjZGlyLCBidWlsZGRpciBpbmNsdWRlcyB0byBHU1RfQUxMX0NGTEFHUywgc2luY2UKKwkgIGV2ZXJ5dGhpbmcgdGhhdCB1c2VzIEdTdHJlYW1lciBBUEkgc2hvdWxkIGhhdmUgdGhlIGluY2x1ZGVzCisKKzIwMDUtMTAtMTUgMTc6NTk6MDcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBnaXZlIGVhY2ggdmFsdWUgYSBfZ2V0X3R5cGUsIHJlbW92ZXMgdGhlIERBVEEgZXhwb3J0cworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X2RhdGVfZ2V0X3R5cGUpLCAoX2dzdF92YWx1ZV9pbml0aWFsaXplKToKKwkgICogZ3N0L2dzdHZhbHVlLmg6CisJICBnaXZlIGVhY2ggdmFsdWUgYSBfZ2V0X3R5cGUsIHJlbW92ZXMgdGhlIERBVEEgZXhwb3J0cworCisyMDA1LTEwLTE1IDE3OjIyOjM0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2Jhc2UvTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgorCSAgZml4IGxpbmsgZmxhZ3MKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZml4IGxpbmsgZmxhZ3MKKworMjAwNS0xMC0xNSAxNjozOTo1NyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgdXBkYXRlIGRlZnMgZmlsZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB1cGRhdGUgZGVmcyBmaWxlCisKKzIwMDUtMTAtMTUgMTY6Mzc6MjIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIHVwZGF0ZSBkZWZzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHVwZGF0ZSBkZWZzCisKKzIwMDUtMTAtMTUgMTY6MzM6MDkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBnc3QvZ3N0Lio6IHJlbW92ZSBfZ3N0X3JlZ2lzdHJ5X2F1dG9fbG9hZCwgbm90IHVzZWQgYW55bW9yZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3QuYzoKKwkgICogZ3N0L2dzdC5oOgorCSAgcmVtb3ZlIF9nc3RfcmVnaXN0cnlfYXV0b19sb2FkLCBub3QgdXNlZCBhbnltb3JlCisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fZ2V0X3R5cGUpOgorCSAgKiBnc3QvZ3N0YmluLmg6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9nZXRfdHlwZSk6CisJICAqIGdzdC9nc3RlbGVtZW50Lmg6CisJICAqIGdzdC9nc3RvYmplY3QuYzogKGdzdF9vYmplY3RfZ2V0X3R5cGUpOgorCSAgKiBnc3QvZ3N0b2JqZWN0Lmg6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfZ2V0X3R5cGUpOgorCSAgKiBnc3QvZ3N0cGFkLmg6CisJICBtYWtlIF9nZXRfdHlwZSBmdW5jdGlvbnMgc2ltaWxhciwgZml4ZXMgZGF0YSBleHBvcnQgZnJvbSBsaWJyYXJ5CisKKzIwMDUtMTAtMTUgMTY6MTY6MDQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBnc3QvY2hlY2svZ3N0Y2hlY2suYzoKKwkqIGdzdC9nc3QuYzoKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkqIGdzdC9nc3RjYXBzLmM6CisJKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKKwkqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOgorCSogZ3N0L2dzdHBsdWdpbi5jOgorCSogZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5jOgorCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKKwkgIEknbSB0b28gbGF6eSB0byBjb21tZW50IHRoaXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZ3RrLWRvYyBpbnNpc3RzIG9uIGluc2VydGluZyA8UEFSQT4gYXQgZXZlcnkgZW1wdHkgbGluZSwgc2lnaAorCisyMDA1LTEwLTE1IDE2OjAxOjU3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2dzdC5jOgorCSogZ3N0L2dzdGJpbi5jOgorCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSogZ3N0L2dzdGJ1cy5jOgorCSogZ3N0L2dzdGNhcHMuYzoKKwkqIGdzdC9nc3RjaGlsZHByb3h5LmM6CisJKiBnc3QvZ3N0Y2xvY2suYzoKKwkqIGdzdC9nc3Rjb25maWcuaC5pbjoKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKKwkqIGdzdC9nc3RlcnJvci5jOgorCSogZ3N0L2dzdGV2ZW50LmM6CisJKiBnc3QvZ3N0ZmlsdGVyLmM6CisJKiBnc3QvZ3N0Zm9ybWF0LmM6CisJKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKKwkqIGdzdC9nc3RpbmRleC5jOgorCSogZ3N0L2dzdGluZGV4ZmFjdG9yeS5jOgorCSogZ3N0L2dzdGluZm8uYzoKKwkqIGdzdC9nc3RpbnRlcmZhY2UuYzoKKwkqIGdzdC9nc3RpdGVyYXRvci5jOgorCSogZ3N0L2dzdG1lbWNodW5rLmM6CisJKiBnc3QvZ3N0bWVzc2FnZS5jOgorCSogZ3N0L2dzdG9iamVjdC5jOgorCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZHRlbXBsYXRlLmM6CisJKiBnc3QvZ3N0cGFyc2UuYzoKKwkqIGdzdC9nc3RwaXBlbGluZS5jOgorCSogZ3N0L2dzdHBsdWdpbi5jOgorCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzoKKwkqIGdzdC9nc3RxdWVyeS5jOgorCSogZ3N0L2dzdHF1ZXVlLmM6CisJKiBnc3QvZ3N0cmVnaXN0cnkuYzoKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgorCSogZ3N0L2dzdHRhZ2xpc3QuYzoKKwkqIGdzdC9nc3R0YWdzZXR0ZXIuYzoKKwkqIGdzdC9nc3R0cmFjZS5jOgorCSogZ3N0L2dzdHR5cGVmaW5kLmM6CisJKiBnc3QvZ3N0dHlwZWZpbmRmYWN0b3J5LmM6CisJKiBnc3QvZ3N0dXJpLmM6CisJKiBnc3QvZ3N0dXJpdHlwZS5jOgorCSogZ3N0L2dzdHV0aWxzLmM6CisJKiBnc3QvZ3N0eG1sLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6CisJICB2YXJpb3VzIHN0eWxlIGZpeGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHZhcmlvdXMgc3R5bGUgZml4ZXMKKworMjAwNS0xMC0xNSAxNTo1Mzo1OSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGNoZWNrL2dzdC9nc3RiaW4uYzoKKwkqIGNoZWNrL2dzdC9nc3RjYXBzLmM6CisJKiBjaGVjay9nc3QvZ3N0dmFsdWUuYzoKKwkqIGV4YW1wbGVzL2FwcHJlYWRlci9hcHByZWFkZXIuYzoKKwkqIGV4YW1wbGVzL2NvbnRyb2xsZXIvYXVkaW8tZXhhbXBsZS5jOgorCSogZXhhbXBsZXMvY3V0dGVyL2N1dHRlci5jOgorCSogZXhhbXBsZXMvY3V0dGVyL2N1dHRlci5oOgorCSogZXhhbXBsZXMvbWl4ZXIvbWl4ZXIuYzoKKwkqIGV4YW1wbGVzL21peGVyL21peGVyLmg6CisJKiBleGFtcGxlcy9yZXRhZy9yZXRhZy5jOgorCSogZXhhbXBsZXMvcmV0YWcvdHJhbnNjb2RlLmM6CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5oOgorCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RoZWxwZXIuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RiaW4uYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RjYXBzLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKKwkqIHRlc3RzL29sZC9leGFtcGxlcy9hcHByZWFkZXIvYXBwcmVhZGVyLmM6CisJKiB0ZXN0cy9vbGQvZXhhbXBsZXMvY29udHJvbGxlci9hdWRpby1leGFtcGxlLmM6CisJKiB0ZXN0cy9vbGQvZXhhbXBsZXMvY3V0dGVyL2N1dHRlci5jOgorCSogdGVzdHMvb2xkL2V4YW1wbGVzL2N1dHRlci9jdXR0ZXIuaDoKKwkqIHRlc3RzL29sZC9leGFtcGxlcy9taXhlci9taXhlci5jOgorCSogdGVzdHMvb2xkL2V4YW1wbGVzL21peGVyL21peGVyLmg6CisJKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcmV0YWcvcmV0YWcuYzoKKwkqIHRlc3RzL29sZC9leGFtcGxlcy9yZXRhZy90cmFuc2NvZGUuYzoKKwkqIHdpbjMyL2NvbW1vbi9nc3Rjb25maWcuaDoKKwkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6CisJKiB3aW4zMi9kaXJlbnQuYzoKKwkqIHdpbjMyL2dzdGNvbmZpZy5oOgorCSogd2luMzIvZ3N0dmVyc2lvbi5oOgorCSogd2luMzIvZ3RjaGFyLmg6CisJKiB3aW4zMi9tbWFuLmg6CisJKiB3aW4zMi92czcvbW1hbi5oOgorCSAgd2hpdGVzcGFjZSBmaXhlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB3aGl0ZXNwYWNlIGZpeGVzCisKKzIwMDUtMTAtMTUgMTU6NTM6MTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL01ha2VmaWxlLmFtOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9ieXRlc3RyZWFtLy5naXRpZ25vcmU6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2J5dGVzdHJlYW0vTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2J5dGVzdHJlYW0vZmlsZXBhZHNpbmsuYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvYnl0ZXN0cmVhbS9nc3Ric3Rlc3QuYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvYnl0ZXN0cmVhbS90ZXN0MS5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9ieXRlc3RyZWFtL3Rlc3RmaWxlMToKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2Fwcy9ub3JtYWxpc2F0aW9uLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NhcHMvcmFuZG9tLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NsZWFudXAvLmdpdGlnbm9yZToKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2xlYW51cC9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2xlYW51cC9jbGVhbnVwMS5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jbGVhbnVwL2NsZWFudXAyLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NsZWFudXAvY2xlYW51cDMuYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2xlYW51cC9jbGVhbnVwNC5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jbGVhbnVwL2NsZWFudXA1LmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NvbnRyb2xsZXIvaW50ZXJwb2xhdG9yLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2RlYnVnL3ByaW50Zl9leHRlbnNpb24uYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvZWxlbWVudHMvdGVlLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL25lZ290aWF0aW9uLy5naXRpZ25vcmU6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL25lZ290aWF0aW9uL01ha2VmaWxlLmFtOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9uZWdvdGlhdGlvbi9wYWRfbGluay5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9wYWQvTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3BhZC9jaGFpbm5vcHVsbC5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9wYWQvZ2V0bm9wdXNoLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3BhZC9saW5rLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3JlZmNvdW50aW5nL3NjaGVkLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3JlZ2lzdHJ5L01ha2VmaWxlLmFtOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9yZWdpc3RyeS9nc3QtcHJpbnQtZm9ybWF0cy5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9zY2hlZHVsZXJzLy5naXRpZ25vcmU6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3NjaGVkdWxlcnMvMTQyMTgzLTIuYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvc2NoZWR1bGVycy8xNDIxODMuYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvc2NoZWR1bGVycy8xNDM3NzctMi5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9zY2hlZHVsZXJzLzE0Mzc3Ny5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9zY2hlZHVsZXJzLzE0NzcxMy5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9zY2hlZHVsZXJzLzE0NzgxOS5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9zY2hlZHVsZXJzLzE0Nzg5NC0yLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3NjaGVkdWxlcnMvMTQ3ODk0LmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3NjaGVkdWxlcnMvTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3NjaGVkdWxlcnMvZ3JvdXBfbGluay5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9zY2hlZHVsZXJzL3F1ZXVlX2xpbmsuYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvc2NoZWR1bGVycy9yZWxpbmsuYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvc2NoZWR1bGVycy91bmxpbmsuYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvc2NoZWR1bGVycy91bnJlZi5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9zY2hlZHVsZXJzL3VzZWxlc3NfaXRlcmF0aW9uLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3N0YXRlcy9iaW4uYzoKKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbToKKwkqIHRlc3RzdWl0ZS9ieXRlc3RyZWFtLy5naXRpZ25vcmU6CisJKiB0ZXN0c3VpdGUvYnl0ZXN0cmVhbS9NYWtlZmlsZS5hbToKKwkqIHRlc3RzdWl0ZS9ieXRlc3RyZWFtL2ZpbGVwYWRzaW5rLmM6CisJKiB0ZXN0c3VpdGUvYnl0ZXN0cmVhbS9nc3Ric3Rlc3QuYzoKKwkqIHRlc3RzdWl0ZS9ieXRlc3RyZWFtL3Rlc3QxLmM6CisJKiB0ZXN0c3VpdGUvYnl0ZXN0cmVhbS90ZXN0ZmlsZTE6CisJKiB0ZXN0c3VpdGUvY2Fwcy9ub3JtYWxpc2F0aW9uLmM6CisJKiB0ZXN0c3VpdGUvY2Fwcy9yYW5kb20uYzoKKwkqIHRlc3RzdWl0ZS9jbGVhbnVwLy5naXRpZ25vcmU6CisJKiB0ZXN0c3VpdGUvY2xlYW51cC9NYWtlZmlsZS5hbToKKwkqIHRlc3RzdWl0ZS9jbGVhbnVwL2NsZWFudXAxLmM6CisJKiB0ZXN0c3VpdGUvY2xlYW51cC9jbGVhbnVwMi5jOgorCSogdGVzdHN1aXRlL2NsZWFudXAvY2xlYW51cDMuYzoKKwkqIHRlc3RzdWl0ZS9jbGVhbnVwL2NsZWFudXA0LmM6CisJKiB0ZXN0c3VpdGUvY2xlYW51cC9jbGVhbnVwNS5jOgorCSogdGVzdHN1aXRlL2NvbnRyb2xsZXIvaW50ZXJwb2xhdG9yLmM6CisJKiB0ZXN0c3VpdGUvZGVidWcvcHJpbnRmX2V4dGVuc2lvbi5jOgorCSogdGVzdHN1aXRlL2VsZW1lbnRzL3RlZS5jOgorCSogdGVzdHN1aXRlL25lZ290aWF0aW9uLy5naXRpZ25vcmU6CisJKiB0ZXN0c3VpdGUvbmVnb3RpYXRpb24vTWFrZWZpbGUuYW06CisJKiB0ZXN0c3VpdGUvbmVnb3RpYXRpb24vcGFkX2xpbmsuYzoKKwkqIHRlc3RzdWl0ZS9wYWQvTWFrZWZpbGUuYW06CisJKiB0ZXN0c3VpdGUvcGFkL2NoYWlubm9wdWxsLmM6CisJKiB0ZXN0c3VpdGUvcGFkL2dldG5vcHVzaC5jOgorCSogdGVzdHN1aXRlL3BhZC9saW5rLmM6CisJKiB0ZXN0c3VpdGUvcmVmY291bnRpbmcvc2NoZWQuYzoKKwkqIHRlc3RzdWl0ZS9yZWdpc3RyeS9NYWtlZmlsZS5hbToKKwkqIHRlc3RzdWl0ZS9yZWdpc3RyeS9nc3QtcHJpbnQtZm9ybWF0cy5jOgorCSogdGVzdHN1aXRlL3NjaGVkdWxlcnMvLmdpdGlnbm9yZToKKwkqIHRlc3RzdWl0ZS9zY2hlZHVsZXJzLzE0MjE4My0yLmM6CisJKiB0ZXN0c3VpdGUvc2NoZWR1bGVycy8xNDIxODMuYzoKKwkqIHRlc3RzdWl0ZS9zY2hlZHVsZXJzLzE0Mzc3Ny0yLmM6CisJKiB0ZXN0c3VpdGUvc2NoZWR1bGVycy8xNDM3NzcuYzoKKwkqIHRlc3RzdWl0ZS9zY2hlZHVsZXJzLzE0NzcxMy5jOgorCSogdGVzdHN1aXRlL3NjaGVkdWxlcnMvMTQ3ODE5LmM6CisJKiB0ZXN0c3VpdGUvc2NoZWR1bGVycy8xNDc4OTQtMi5jOgorCSogdGVzdHN1aXRlL3NjaGVkdWxlcnMvMTQ3ODk0LmM6CisJKiB0ZXN0c3VpdGUvc2NoZWR1bGVycy9NYWtlZmlsZS5hbToKKwkqIHRlc3RzdWl0ZS9zY2hlZHVsZXJzL2dyb3VwX2xpbmsuYzoKKwkqIHRlc3RzdWl0ZS9zY2hlZHVsZXJzL3F1ZXVlX2xpbmsuYzoKKwkqIHRlc3RzdWl0ZS9zY2hlZHVsZXJzL3JlbGluay5jOgorCSogdGVzdHN1aXRlL3NjaGVkdWxlcnMvdW5saW5rLmM6CisJKiB0ZXN0c3VpdGUvc2NoZWR1bGVycy91bnJlZi5jOgorCSogdGVzdHN1aXRlL3NjaGVkdWxlcnMvdXNlbGVzc19pdGVyYXRpb24uYzoKKwkqIHRlc3RzdWl0ZS9zdGF0ZXMvYmluLmM6CisJICByZW1vdmUgb2Jzb2xldGUgdGVzdHMgd2hpdGVzcGFjZSBmaXhlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICByZW1vdmUgb2Jzb2xldGUgdGVzdHMKKwkgIHdoaXRlc3BhY2UgZml4ZXMKKworMjAwNS0xMC0xNSAxNTo1MjowOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGNvbmZpZ3VyZS5hYzogY29ycmVjdGx5IG1ha2UgY29uZGl0aW9uYWxzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgY29ycmVjdGx5IG1ha2UgY29uZGl0aW9uYWxzCisJICAqIGdzdC9lbGVtZW50cy9NYWtlZmlsZS5hbToKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6CisJICBmaXggdHlwbyBjYXVzaW5nIGZkc3JjIG5vdCB0byBidWlsZAorCisyMDA1LTEwLTE1IDE1OjMwOjI0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgorCSogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKKwkqIGdzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6CisJKiBnc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oOgorCSogZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5oOgorCSogZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzoKKwkqIGdzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmg6CisJKiBnc3QvZWxlbWVudHMvZ3N0YnVmZmVyc3RvcmUuYzoKKwkqIGdzdC9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6CisJKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKKwkqIGdzdC9lbGVtZW50cy9nc3RmZHNpbmsuYzoKKwkqIGdzdC9lbGVtZW50cy9nc3RmZHNpbmsuaDoKKwkqIGdzdC9lbGVtZW50cy9nc3RmZHNyYy5jOgorCSogZ3N0L2VsZW1lbnRzL2dzdGZkc3JjLmg6CisJKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgorCSogZ3N0L2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6CisJKiBnc3QvZWxlbWVudHMvZ3N0aWRlbnRpdHkuaDoKKwkqIGdzdC9lbGVtZW50cy9nc3R0ZWUuYzoKKwkqIGdzdC9lbGVtZW50cy9nc3R0ZWUuaDoKKwkqIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkqIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuaDoKKwkqIGdzdC9nbGliLWNvbXBhdC5jOgorCSogZ3N0L2dzdC5jOgorCSogZ3N0L2dzdGJpbi5jOgorCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSogZ3N0L2dzdGJ1cy5jOgorCSogZ3N0L2dzdGJ1cy5oOgorCSogZ3N0L2dzdGNhcHMuYzoKKwkqIGdzdC9nc3RjaGlsZHByb3h5LmM6CisJKiBnc3QvZ3N0Y2xvY2suYzoKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKKwkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5oOgorCSogZ3N0L2dzdGV2ZW50LmM6CisJKiBnc3QvZ3N0ZXZlbnQuaDoKKwkqIGdzdC9nc3Rmb3JtYXQuYzoKKwkqIGdzdC9nc3Rmb3JtYXQuaDoKKwkqIGdzdC9nc3RnaG9zdHBhZC5jOgorCSogZ3N0L2dzdGluZGV4LmM6CisJKiBnc3QvZ3N0aW5kZXguaDoKKwkqIGdzdC9nc3RpbmRleGZhY3RvcnkuYzoKKwkqIGdzdC9nc3RpbmRleGZhY3RvcnkuaDoKKwkqIGdzdC9nc3RpbmZvLmM6CisJKiBnc3QvZ3N0aW5mby5oOgorCSogZ3N0L2dzdGludGVyZmFjZS5jOgorCSogZ3N0L2dzdGl0ZXJhdG9yLmM6CisJKiBnc3QvZ3N0bWFjcm9zLmg6CisJKiBnc3QvZ3N0bWVtY2h1bmsuYzoKKwkqIGdzdC9nc3RtZXNzYWdlLmM6CisJKiBnc3QvZ3N0bWVzc2FnZS5oOgorCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKKwkqIGdzdC9nc3RvYmplY3QuYzoKKwkqIGdzdC9nc3RvYmplY3QuaDoKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RwYWQuaDoKKwkqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOgorCSogZ3N0L2dzdHBhZHRlbXBsYXRlLmg6CisJKiBnc3QvZ3N0cGlwZWxpbmUuYzoKKwkqIGdzdC9nc3RwbHVnaW4uYzoKKwkqIGdzdC9nc3RwbHVnaW4uaDoKKwkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6CisJKiBnc3QvZ3N0cXVlcnkuYzoKKwkqIGdzdC9nc3RxdWVyeS5oOgorCSogZ3N0L2dzdHF1ZXVlLmM6CisJKiBnc3QvZ3N0cXVldWUuaDoKKwkqIGdzdC9nc3RyZWdpc3RyeS5oOgorCSogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6CisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJKiBnc3QvZ3N0c3RydWN0dXJlLmg6CisJKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKKwkqIGdzdC9nc3R0YWdsaXN0LmM6CisJKiBnc3QvZ3N0dGFnc2V0dGVyLmM6CisJKiBnc3QvZ3N0dHJhY2UuYzoKKwkqIGdzdC9nc3R0cmFjZS5oOgorCSogZ3N0L2dzdHR5cGVmaW5kLmM6CisJKiBnc3QvZ3N0dHlwZWZpbmQuaDoKKwkqIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuYzoKKwkqIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuaDoKKwkqIGdzdC9nc3R1cmkuYzoKKwkqIGdzdC9nc3R1dGlscy5jOgorCSogZ3N0L2dzdHV0aWxzLmg6CisJKiBnc3QvZ3N0dmFsdWUuYzoKKwkqIGdzdC9nc3R2YWx1ZS5oOgorCSogZ3N0L2luZGV4ZXJzL2dzdGZpbGVpbmRleC5jOgorCSogZ3N0L2luZGV4ZXJzL2dzdG1lbWluZGV4LmM6CisJKiBnc3QvcGFyc2UvdHlwZXMuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5oOgorCSogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOgorCSogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5oOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RidWZmZXJzdG9yZS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuaDoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuaDoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5oOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5oOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmg6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuaDoKKwkqIHBsdWdpbnMvaW5kZXhlcnMvZ3N0ZmlsZWluZGV4LmM6CisJKiBwbHVnaW5zL2luZGV4ZXJzL2dzdG1lbWluZGV4LmM6CisJICB3aGl0ZXNwYWNlIGZpeGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHdoaXRlc3BhY2UgZml4ZXMKKworMjAwNS0xMC0xNSAxNTowMTozOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGNvbmZpZ3VyZS5hYzogY2hlY2sgZm9yIHNvbWUgaGVhZGVycworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgIGNoZWNrIGZvciBzb21lIGhlYWRlcnMKKwkgICogZ3N0L2VsZW1lbnRzL01ha2VmaWxlLmFtOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzoKKwkgIGRvbid0IGNvbXBpbGUgZmRzcmMgd2l0aG91dCBzeXMvc29ja2V0LmgKKwkgICogZ3N0L2luZGV4ZXJzL01ha2VmaWxlLmFtOgorCSAgKiBnc3QvaW5kZXhlcnMvZ3N0aW5kZXhlcnMuYzogKHBsdWdpbl9pbml0KToKKwkgIGRvbid0IGNvbXBpbGUgZmlsZWluZGV4IHdpdGhvdXQgbW1hcAorCisyMDA1LTEwLTE1IDEzOjU4OjE4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgY29uZmlndXJlLmFjOiByZW9yZ2FuaXplIGNsZWFuIHVwIGRvY3VtZW50IG1vcmUgcmVtb3ZlIGNydWZ0CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgcmVvcmdhbml6ZQorCSAgY2xlYW4gdXAKKwkgIGRvY3VtZW50IG1vcmUKKwkgIHJlbW92ZSBjcnVmdAorCSAgKiBjaGVjay9NYWtlZmlsZS5hbToKKwkgICogZG9jcy9nc3QvTWFrZWZpbGUuYW06CisJICAqIGV4YW1wbGVzL2hlbGxvd29ybGQvTWFrZWZpbGUuYW06CisJICAqIGdzdC9NYWtlZmlsZS5hbToKKwkgICogZ3N0L2Jhc2UvTWFrZWZpbGUuYW06CisJICAqIGdzdC9jaGVjay9NYWtlZmlsZS5hbToKKwkgICogZ3N0L2VsZW1lbnRzL01ha2VmaWxlLmFtOgorCSAgKiBnc3QvaW5kZXhlcnMvTWFrZWZpbGUuYW06CisJICAqIGdzdC9wYXJzZS9NYWtlZmlsZS5hbToKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbToKKwkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL01ha2VmaWxlLmFtOgorCSAgKiBleGFtcGxlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQuYzogKGV2ZW50X2xvb3ApOgorCSAgY29tcGlsZSBmaXhlcywgdGhvdWdoIGl0J3Mgbm90IGJlaW5nIGNvbXBpbGVkIGN1cnJlbnRseQorCisyMDA1LTEwLTE1IDEzOjI0OjU0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogcGtnY29uZmlnL2dzdHJlYW1lci1iYXNlLXVuaW5zdGFsbGVkLnBjLmluOgorCSogcGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay11bmluc3RhbGxlZC5wYy5pbjoKKwkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2sucGMuaW46CisJKiBwa2djb25maWcvZ3N0cmVhbWVyLWNvbnRyb2xsZXItdW5pbnN0YWxsZWQucGMuaW46CisJKiBwa2djb25maWcvZ3N0cmVhbWVyLWRhdGFwcm90b2NvbC11bmluc3RhbGxlZC5wYy5pbjoKKwkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItdW5pbnN0YWxsZWQucGMuaW46CisJKiBwa2djb25maWcvZ3N0cmVhbWVyLnBjLmluOgorCSAgY2xlYW4gdXAgcGMgZmlsZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgY2xlYW4gdXAgcGMgZmlsZXMKKworMjAwNS0xMC0xNSAxMjowMzozMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGxpYnMvZ3N0L2dldGJpdHMvLmdpdGlnbm9yZToKKwkgIHJlbW92ZSBkaXIKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVtb3ZlIGRpcgorCisyMDA1LTEwLTE1IDEwOjM0OjE3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogY29tbW9uOgorCSogZ3N0L3NjaGVkdWxlcnMvLmdpdGlnbm9yZToKKwkgIHJlbW92ZSBkaXJlY3RvcnkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVtb3ZlIGRpcmVjdG9yeQorCisyMDA1LTEwLTE1IDAwOjIyOjAyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3RwbHVnaW4uaDoKKwkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkqIGdzdC9nc3R1cmkuYzoKKwkgIHNpZ25lZG5lc3MvdHlwZSBmaXhlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBzaWduZWRuZXNzL3R5cGUgZml4ZXMKKworMjAwNS0xMC0xNSAwMDoyMDo0NSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGdzdC9nc3R2YWx1ZS5jOgorCSAgc2lnbmVkbmVzcy90eXBlIGZpeGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHNpZ25lZG5lc3MvdHlwZSBmaXhlcworCisyMDA1LTEwLTE1IDAwOjE1OjQzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6CisJKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIHNpZ25lZG5lc3MgZml4ZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgc2lnbmVkbmVzcyBmaXhlcworCisyMDA1LTEwLTE1IDAwOjEyOjIyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2dzdGNhcHMuYzoKKwkqIGdzdC9nc3RjYXBzLmg6CisJICBzaWduZWRuZXNzIGZpeGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHNpZ25lZG5lc3MgZml4ZXMKKworMjAwNS0xMC0xNCAxNzowMTo1NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgY2hlY2svZ3N0L2dzdHRhZy5jOiBBZGQgc29tZSBzaW1wbGUgdGVzdHMgZm9yIHRoZSBuZXcgdGFnbGlzdCBkYXRlIEFQSS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9nc3QvZ3N0dGFnLmM6ICh0ZXN0X2RhdGVfdGFncyksIChnc3RfdGFnX3N1aXRlKToKKwkgIEFkZCBzb21lIHNpbXBsZSB0ZXN0cyBmb3IgdGhlIG5ldyB0YWdsaXN0IGRhdGUgQVBJLgorCisyMDA1LTEwLTE0IDE0OjEwOjI0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZWxlbWVudHMvOiBCZWF1dGlmeSAnbGFzdC1tZXNzYWdlJyBvdXRwdXQ6IHByaW50ICdub25lJyBmb3IgYnVmZmVyIHRpbWVzdGFtcHMgYW5kIGR1cmF0aW9ucyBpZiBub25lIGlzIHNldDsgaW1wcm8uLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzogKGdzdF9mYWtlX3NpbmtfcmVuZGVyKToKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGZha2VzcmMuYzogKGdzdF9mYWtlX3NyY19jcmVhdGUpOgorCSAgQmVhdXRpZnkgJ2xhc3QtbWVzc2FnZScgb3V0cHV0OiBwcmludCAnbm9uZScgZm9yIGJ1ZmZlciB0aW1lc3RhbXBzCisJICBhbmQgZHVyYXRpb25zIGlmIG5vbmUgaXMgc2V0OyBpbXByb3ZlIGFsaWdubWVudCB3aXRoIG5leHQgbWVzc2FnZXMuCisKKzIwMDUtMTAtMTQgMTE6MDk6MjkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIEFkZCBuZXcgQVBJIHRvIGNoZWNrIHBsdWdpbiBmZWF0dXJlIHZlcnNpb24gcmVxdWlyZW1lbnRzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6IChnc3RfcGx1Z2luX2ZlYXR1cmVfY2hlY2tfdmVyc2lvbik6CisJICAqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmg6CisJICAqIGdzdC9nc3RyZWdpc3RyeS5jOiAoZ3N0X2RlZmF1bHRfcmVnaXN0cnlfY2hlY2tfZmVhdHVyZV92ZXJzaW9uKToKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5Lmg6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICBBZGQgbmV3IEFQSSB0byBjaGVjayBwbHVnaW4gZmVhdHVyZSB2ZXJzaW9uIHJlcXVpcmVtZW50cy4KKwkgICogY2hlY2svZ3N0L2dzdHBsdWdpbi5jOiAodGVzdF92ZXJzaW9uX2NoZWNrcyksIChnc3RfcGx1Z2luX3N1aXRlKToKKwkgIFNvbWUgYmFzaWMgdGVzdHMgZm9yIHRoZSBhYm92ZS4KKworMjAwNS0xMC0xMyAyMToyNzo1NyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGdzdC9nc3RzdHJ1Y3R1cmUuYzogZ3VhcmQgYWdhaW5zdCBOVUxMIHByaW50ZiAtIGhhcHBlbnMgd2hlbiBmb3IgZXhhbXBsZSBhIG1lc3NhZ2Ugc3RydWN0dXJlIHdpdGggR3N0Q2xvY2sgZ2V0cyBzZXJpYS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTEwLTEzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6IChnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyk6CisJICBndWFyZCBhZ2FpbnN0IE5VTEwgcHJpbnRmIC0gaGFwcGVucyB3aGVuIGZvciBleGFtcGxlCisJICBhIG1lc3NhZ2Ugc3RydWN0dXJlIHdpdGggR3N0Q2xvY2sgZ2V0cyBzZXJpYWxpemVkCisKKzIwMDUtMTAtMTMgMTg6MzM6MjcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IEZpeCBwcmVzdW1hYmxlIGNvcHknbidwYXN0by4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RwYWRzX2V2ZW50KToKKwkgIEZpeCBwcmVzdW1hYmxlIGNvcHknbidwYXN0by4KKworMjAwNS0xMC0xMyAxNzo1MTo1MSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGdzdC9lbGVtZW50cy9nc3RlbGVtZW50cy5jOgorCSogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgorCSAgYWRkIGNvcnJlY3QgaGVhZGVyIGZvciBXSU4zMgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGQgY29ycmVjdCBoZWFkZXIgZm9yIFdJTjMyCisKKzIwMDUtMTAtMTMgMTc6NDM6MzYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBnc3QvZWxlbWVudHMvOiBmaXggc29tZSBzaWduZWRuZXNzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGZha2VzcmMuaDoKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogKGdzdF9maWxlX3NyY19jcmVhdGVfcmVhZCk6CisJICAqIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkgIGZpeCBzb21lIHNpZ25lZG5lc3MKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IChnc3RfZmlsZV9zaW5rX3JlbmRlcik6CisJICBJIHdvbmRlciBpZiB0aGlzIGNvdWxkIGFjdHVhbGx5IHdyaXRlICsyR0IgZmlsZXMgYmVmb3JlCisKKzIwMDUtMTAtMTMgMTc6MjQ6NTMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKKwkgIGFkZCBhbiBleHBvcnQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkIGFuIGV4cG9ydAorCisyMDA1LTEwLTEzIDE3OjIwOjQ0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2dsaWItY29tcGF0Lmg6CisJKiBnc3QvZ3N0cGFkLmM6CisJICBpbmNsdWRlIGhlYWRlciBjb3JyZWN0bHk7IHNob3cgbWUgdGhlIG5hbWUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgaW5jbHVkZSBoZWFkZXIgY29ycmVjdGx5OyBzaG93IG1lIHRoZSBuYW1lCisKKzIwMDUtMTAtMTMgMTY6MzQ6MDQgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSogQ2hhbmdlTG9nOgorCSAgZm9vCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGZvbworCisyMDA1LTEwLTEzIDE2OjI2OjEyICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYyAoZ3N0X2RwX3BhY2tldF9mcm9tX2NhcHMpOiBGaXggVGltbWVrZSBXYXltYW5zIGJ1Zy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMC0xMyAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jIChnc3RfZHBfcGFja2V0X2Zyb21fY2Fwcyk6CisJICBGaXggVGltbWVrZSBXYXltYW5zIGJ1Zy4KKwkgIChnc3RfZHBfY2Fwc19mcm9tX3BhY2tldCk6IE1ha2Ugc3VyZSB3ZSBwYXNzIGEgTlVMLXRlcm1pbmF0ZWQKKwkgIHN0cmluZyBvZiB0aGUgcHJvcGVyIGxlbmd0aCB0byBnc3RfY2Fwc19mcm9tX3N0cmluZy4gVGhlcmUncyBhCisJICBwb3RlbnRpYWwgZm9yLCBiZWZvcmUgdGhpcyBmaXgsIHRoYXQgdGhpcyBjb3VsZCBjYXVzZSBzb21lb25lCisJICBjb25uZWN0aW5nIG92ZXIgdGhlIG5ldHdvcmsgdG8gY2F1c2UgYSBzZWdmYXVsdCBpZiB0aGUgcGF5bG9hZCBpcworCSAgbm90IE5VTC10ZXJtaW5hdGVkLgorCisyMDA1LTEwLTEzIDE1OjI3OjQwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGZpeGVkIHR5cG9zCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vZHJhZnQtcHVzaC1wdWxsLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1vdmVydmlldy50eHQ6CisJICAqIGRvY3MvcmFuZG9tL1RPRE8tcHJlLTAuOToKKwkgICogZG9jcy9yYW5kb20vb2xkL0NoYW5nZUxvZy5nc3RyZWFtZXI6CisJICAqIGdzdC9iYXNlL2dzdHB1c2hzcmMuYzoKKwkgICogZ3N0L2dzdGNsb2NrLmM6CisJICBmaXhlZCB0eXBvcworCisyMDA1LTEwLTEzIDE1OjIzOjUxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0LzogR0xpYiAyLjYgZ19mbGFnc19nZXRfZmlyc3RfdmFsdWUgaGFzIGEgYnVnIHRoYXQgdHJpZ2dlcnMgYW4gaW5maW5pdGUgbG9vcAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nbGliLWNvbXBhdC5jOiAoZ3N0X2ZsYWdzX2dldF9maXJzdF92YWx1ZSk6CisJICAqIGdzdC9nbGliLWNvbXBhdC5oOgorCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9pbnRfaGVscGVyKSwKKwkgIChnc3RfdmFsdWVfY29tcGFyZV9kb3VibGUpLCAoZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9mbGFncyk6CisJICBHTGliIDIuNiBnX2ZsYWdzX2dldF9maXJzdF92YWx1ZSBoYXMgYSBidWcgdGhhdCB0cmlnZ2VycyBhbgorCSAgaW5maW5pdGUgbG9vcAorCisyMDA1LTEwLTEzIDE1OjIyOjI2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0L2Jhc2UvOiBmaXggdXAgZGVidWdnaW5nCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTAtMTMgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2hhbmRsZV9vYmplY3QpOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfZ2V0X3JhbmdlKToKKwkgIGZpeCB1cCBkZWJ1Z2dpbmcKKwkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAoZXZlbnRfbG9vcCk6CisJICBwcmludCBvdXQgY2xvY2sgbmljZWx5CisKKzIwMDUtMTAtMTMgMTU6MTM6MzIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIEFkZGVkIGdzdF90YWdfbGlzdF9nZXRfZGF0ZSgpIGFuZCBnc3RfdGFnX2xpc3RfZ2V0X2RhdGVfaW5kZXgoKS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBnc3QvZ3N0dGFnbGlzdC5oOgorCSAgKiBnc3QvZ3N0dGFnbGlzdC5jOiAoX2dzdF90YWdfaW5pdGlhbGl6ZSksIChnc3RfdGFnX2xpc3RfZ2V0X2RhdGUpLAorCSAgKGdzdF90YWdfbGlzdF9nZXRfZGF0ZV9pbmRleCk6CisJICBBZGRlZCBnc3RfdGFnX2xpc3RfZ2V0X2RhdGUoKSBhbmQgZ3N0X3RhZ19saXN0X2dldF9kYXRlX2luZGV4KCkuCisJICBHU1RfVEFHX0RBVEUgbm93IGhhcyBhIHRhZyB0eXBlIG9mIEdTVF9UWVBFX0RBVEUgKCMxNzA3NzcpLgorCisyMDA1LTEwLTEzIDE0OjU1OjE3ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KKworCSAgZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuKjogSGFuZGxlIG5ld3NlZ21lbnQgYW5kIHN0b3JlIGluZm9ybWF0aW9ucyBpbiBDb2xsZWN0RGF0YS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMC0xMyAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgorCSAgKiBnc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RwYWRzX2V2ZW50KSwKKwkgIChnc3RfY29sbGVjdHBhZHNfY2hhaW4pOgorCSAgKiBnc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oOiBIYW5kbGUgbmV3c2VnbWVudCBhbmQgc3RvcmUKKwkgIGluZm9ybWF0aW9ucworCSAgaW4gQ29sbGVjdERhdGEuCisKKzIwMDUtMTAtMTMgMDk6NTc6MTUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZml4IEdPcHRpb24gY29udGV4dCBsZWFrcyBkb2MgZml4ZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBnc3QvZ3N0LmM6CisJICAqIGdzdC9nc3RlcnJvci5oOgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAobWFpbik6CisJICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKG1haW4pOgorCSAgKiB0b29scy9nc3QtcnVuLmM6IChtYWluKToKKwkgICogdG9vbHMvZ3N0LXhtbGluc3BlY3QuYzogKG1haW4pOgorCSAgZml4IEdPcHRpb24gY29udGV4dCBsZWFrcworCSAgZG9jIGZpeGVzCisKKzIwMDUtMTAtMTIgMjI6MzQ6NDcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBnc3QvZ3N0YnVzLmM6IHVzZSBIQVZFX1VOSVNURF9ICisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJ1cy5jOgorCSAgdXNlIEhBVkVfVU5JU1REX0gKKwkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oOgorCSAgdXBkYXRlIGNvbmZpZworCSAgKiB3aW4zMi92czYvZ3JhbW1hci5kc3A6CisJICAqIHdpbjMyL3ZzNi9saWJnc3RlbGVtZW50cy5kc3A6CisJICAqIHdpbjMyL3ZzNi9saWJnc3RyZWFtZXIuZHNwOgorCSAgdXBkYXRlIHZzNiBmaWxlcworCisyMDA1LTEwLTEyIDIyOjAwOjU0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgorCSAgaGFkIGEgZmV3IHRvbyBtYW55IDBEIGJ5dGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGhhZCBhIGZldyB0b28gbWFueSAwRCBieXRlcworCisyMDA1LTEwLTEyIDIxOjU2OjUyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0L2Jhc2UvOiBmaXggbW9yZSBndWludDY0PC0+Z2RvdWJsZSBjb252ZXJzaW9ucworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2hhbmRsZV9vYmplY3QpOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfcXVlcnkpOgorCSAgZml4IG1vcmUgZ3VpbnQ2NDwtPmdkb3VibGUgY29udmVyc2lvbnMKKworMjAwNS0xMC0xMiAyMDoyMzo0MiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIE1ha2VmaWxlLmFtOiBhZGQgd2luMzItdXBkYXRlIHRhcmdldAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIE1ha2VmaWxlLmFtOgorCSAgYWRkIHdpbjMyLXVwZGF0ZSB0YXJnZXQKKwkgICogd2luMzIvY29tbW9uL2dzdGNvbmZpZy5oOgorCSAgKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmM6CisJICAqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuaDoKKwkgICogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKKwkgIGFkZCBmaWxlcyB0aGF0IHZpc3VhbCBzdHVkaW8gY2FuJ3QgZ2VuZXJhdGUKKworMjAwNS0xMC0xMiAxOTozODo0NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0LzogUHJvdGVjdCBmbGFncyB3aXRoIHByb3BlciBsb2NrLiB1bnJlZiBwcm92aWRlZCBjYWNoZWQgY2xvY2sgaW4gZGlzcG9zZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2FkZF9mdW5jKSwgKGdzdF9iaW5fcmVtb3ZlX2Z1bmMpLAorCSAgKHJlc2V0X2RlZ3JlZSksIChnc3RfYmluX2Rpc3Bvc2UpLCAoYmluX2J1c19oYW5kbGVyKToKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2NvbW1pdF9zdGF0ZSksCisJICAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKToKKwkgIFByb3RlY3QgZmxhZ3Mgd2l0aCBwcm9wZXIgbG9jay4KKwkgIHVucmVmIHByb3ZpZGVkIGNhY2hlZCBjbG9jayBpbiBkaXNwb3NlLgorCisyMDA1LTEwLTEyIDE5OjE0OjIzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2dzdGNvbmZpZy5oLmluOgorCSAgbGF5b3V0IGNsZWFudXAKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgbGF5b3V0IGNsZWFudXAKKworMjAwNS0xMC0xMiAxOToxMDo0NiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICByZW1vdmVkIHVudXNlZCBmbGFncyBmcm9tIG1pbmlvYmplY3QgZG9jIGZpeGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdC5jOgorCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5oOgorCSAgKiBnc3QvZ3N0cGFkLmg6CisJICAqIHdpbjMyL2dzdGVudW10eXBlcy5jOiAoZ3N0X21pbmlfb2JqZWN0X2ZsYWdzX2dldF90eXBlKToKKwkgIHJlbW92ZWQgdW51c2VkIGZsYWdzIGZyb20gbWluaW9iamVjdAorCSAgZG9jIGZpeGVzCisKKzIwMDUtMTAtMTIgMTg6MDM6MTggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiB3aW4zMi92czYvZ3JhbW1hci5kc3A6CisJKiB3aW4zMi92czYvZ3N0X2luc3BlY3QuZHNwOgorCSogd2luMzIvdnM2L2dzdF9sYXVuY2guZHNwOgorCSogd2luMzIvdnM2L2dzdHJlYW1lci5kc3c6CisJKiB3aW4zMi92czYvbGliZ3N0YmFzZS5kc3A6CisJKiB3aW4zMi92czYvbGliZ3N0ZWxlbWVudHMuZHNwOgorCSogd2luMzIvdnM2L2xpYmdzdHJlYW1lci5kc3A6CisJICBjb252ZXJ0IHRvIHVuaXggbGluZSBlbmRzOyBzaW5jZSB0aGUgc291cmNlIGlzIGFsc28gdW5peC1zdHlsZSBsaW5lIGVuZHMsIGRldmVsb3BlcnMgZG9uJ3QgbmVlZCB0byBmaWRkbGUgYW5kIHNwZWNpYWwuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgY29udmVydCB0byB1bml4IGxpbmUgZW5kczsgc2luY2UgdGhlIHNvdXJjZSBpcyBhbHNvIHVuaXgtc3R5bGUgbGluZSBlbmRzLCBkZXZlbG9wZXJzIGRvbid0IG5lZWQgdG8gZmlkZGxlIGFuZCBzcGVjaWFsLWNhc2UsIGJ1dCBjYW4ganVzdCBhbGxvdyB0cmFuc2xhdGlvbiBvbiB0aGUgZmx5CisKKzIwMDUtMTAtMTIgMTY6MDM6MzkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9lbGVtZW50cy9nc3RmaWxlc2luay5jOiBGbHVzaCBiZWZvcmUgc2Vla2luZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzogKGdzdF9maWxlX3NpbmtfZG9fc2VlayksCisJICAoZ3N0X2ZpbGVfc2lua19ldmVudCksIChnc3RfZmlsZV9zaW5rX3JlbmRlcik6CisJICBGbHVzaCBiZWZvcmUgc2Vla2luZy4KKworMjAwNS0xMC0xMiAxNTo1ODoyNCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0LmMgKGdzdF9pbml0X2NoZWNrKTogSWdub3JlIHVua25vd24gb3B0aW9ucywgYXMgaGFzIGFsd2F5cyBiZWVuIHRoZSBjYXNlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTEwLTEyICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvZ3N0LmMgKGdzdF9pbml0X2NoZWNrKTogSWdub3JlIHVua25vd24gb3B0aW9ucywgYXMgaGFzCisJICBhbHdheXMgYmVlbiB0aGUgY2FzZS4KKworMjAwNS0xMC0xMiAxNDoyODozOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICByZW5hbWVkIEdTVF9GTEFHUyBtYWNyb3MgdG8gR1NUX09CSkVDVF9GTEFHUyBtb3ZlZCBiaXRzaGlmdCBmcm9tIG1hY3JvIHRvIGVudW0gZGVmaW5pdGlvbgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dzdC9nc3RiaW4uYzogKEdTVF9TVEFSVF9URVNUKToKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfaW5pdCk6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19pbml0KSwKKwkgIChnc3RfYmFzZV9zcmNfZ2V0X3JhbmdlKSwgKGdzdF9iYXNlX3NyY19jaGVja19nZXRfcmFuZ2UpLAorCSAgKGdzdF9iYXNlX3NyY19zdGFydCksIChnc3RfYmFzZV9zcmNfc3RvcCk6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGZha2VzcmMuYzogKGdzdF9mYWtlX3NyY19zZXRfcHJvcGVydHkpOgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2FkZF9mdW5jKSwgKGdzdF9iaW5fcmVtb3ZlX2Z1bmMpLAorCSAgKGJpbl9lbGVtZW50X2lzX3NpbmspLCAocmVzZXRfZGVncmVlKSwgKGdzdF9iaW5fZWxlbWVudF9zZXRfc3RhdGUpLAorCSAgKGJpbl9idXNfaGFuZGxlcik6CisJICAqIGdzdC9nc3RiaW4uaDoKKwkgICogZ3N0L2dzdGJ1ZmZlci5oOgorCSAgKiBnc3QvZ3N0YnVzLmM6IChnc3RfYnVzX3Bvc3QpLCAoZ3N0X2J1c19zZXRfZmx1c2hpbmcpOgorCSAgKiBnc3QvZ3N0YnVzLmg6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9pc19sb2NrZWRfc3RhdGUpLAorCSAgKGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUpLCAoZ3N0X2VsZW1lbnRfY29tbWl0X3N0YXRlKSwKKwkgIChnc3RfZWxlbWVudF9zZXRfc3RhdGUpOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSAgKiBnc3QvZ3N0aW5kZXguYzogKGdzdF9pbmRleF9pbml0KToKKwkgICogZ3N0L2dzdGluZGV4Lmg6CisJICAqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6CisJICAqIGdzdC9nc3RvYmplY3QuYzogKGdzdF9vYmplY3RfaW5pdCksIChnc3Rfb2JqZWN0X3NpbmspLAorCSAgKGdzdF9vYmplY3Rfc2V0X3BhcmVudCk6CisJICAqIGdzdC9nc3RvYmplY3QuaDoKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9zZXRfYmxvY2tlZF9hc3luYyksIChnc3RfcGFkX2lzX2Jsb2NrZWQpLAorCSAgKGdzdF9wYWRfZ2V0X2NhcHNfdW5sb2NrZWQpLCAoZ3N0X3BhZF9zZXRfY2Fwcyk6CisJICAqIGdzdC9nc3RwYWQuaDoKKwkgICogZ3N0L2dzdHBhZHRlbXBsYXRlLmg6CisJICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX3Byb3ZpZGVfY2xvY2tfZnVuYyksCisJICAoZ3N0X3BpcGVsaW5lX3VzZV9jbG9jayksIChnc3RfcGlwZWxpbmVfYXV0b19jbG9jayk6CisJICAqIGdzdC9nc3RwaXBlbGluZS5oOgorCSAgKiBnc3QvaW5kZXhlcnMvZ3N0ZmlsZWluZGV4LmM6IChnc3RfZmlsZV9pbmRleF9sb2FkKSwKKwkgIChnc3RfZmlsZV9pbmRleF9jb21taXQpOgorCSAgKiB0ZXN0c3VpdGUvYnl0ZXN0cmVhbS9maWxlcGFkc2luay5jOiAoZ3N0X2ZwX3NpbmtfaW5pdCk6CisJICAqIHRlc3RzdWl0ZS9wYWQvbGluay5jOiAoZ3N0X3Rlc3Rfc3JjX2luaXQpLAorCSAgKGdzdF90ZXN0X2ZpbHRlcl9pbml0KSwgKGdzdF90ZXN0X3NpbmtfaW5pdCk6CisJICAqIHRlc3RzdWl0ZS9zdGF0ZXMvbG9ja2VkLmM6IChtYWluKToKKwkgIHJlbmFtZWQgR1NUX0ZMQUdTIG1hY3JvcyB0byBHU1RfT0JKRUNUX0ZMQUdTCisJICBtb3ZlZCBiaXRzaGlmdCBmcm9tIG1hY3JvIHRvIGVudW0gZGVmaW5pdGlvbgorCisyMDA1LTEwLTEyIDE0OjEyOjM3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvOiBTb21lIG1vcmUgZGVidWdnaW5nIGluZm8uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfaGFuZGxlX2J1ZmZlcik6CisJICAqIGdzdC9lbGVtZW50cy9nc3RmaWxlc2luay5jOiAoZ3N0X2ZpbGVfc2lua19ldmVudCksCisJICAoZ3N0X2ZpbGVfc2lua19yZW5kZXIpOgorCSAgU29tZSBtb3JlIGRlYnVnZ2luZyBpbmZvLgorCisyMDA1LTEwLTEyIDEyOjU4OjU1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBTb21lIGRvYyB1cGRhdGVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtc3RhdGVzLnR4dDoKKwkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAobWFpbik6CisJICBTb21lIGRvYyB1cGRhdGVzLgorCSAgUmV2ZXJ0IG5vbi1pbnRlbnRpb25hbCBjaGFuZ2UuCisKKzIwMDUtMTAtMTIgMTI6MTg6NDggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIFVzZSBHc3RDbG9ja1RpbWUgaW4gX2dldF9zdGF0ZSgpIGluc3RlYWQgb2YgR1RpbWVWYWwuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svZ3N0L2dzdGJpbi5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgKiBjaGVjay9nc3QvZ3N0ZWxlbWVudC5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgKiBjaGVjay9nc3QvZ3N0ZXZlbnQuYzogKEdTVF9TVEFSVF9URVNUKSwgKHRlc3RfZXZlbnQpOgorCSAgKiBjaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgICogY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICAqIGNoZWNrL3BpcGVsaW5lcy9zaW1wbGVfbGF1bmNoX2xpbmVzLmM6IChydW5fcGlwZWxpbmUpOgorCSAgKiBjaGVjay9zdGF0ZXMvc2lua3MuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgICogZ3N0L2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOiAoc3RvcF90eXBlZmluZGluZyk6CisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fcHJvdmlkZV9jbG9ja19mdW5jKSwgKGdzdF9iaW5fYWRkX2Z1bmMpLAorCSAgKGdzdF9iaW5fcmVtb3ZlX2Z1bmMpLCAoZ3N0X2Jpbl9nZXRfc3RhdGVfZnVuYyksCisJICAoZ3N0X2Jpbl9yZWNhbGNfc3RhdGUpLCAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGVfZnVuYyksCisJICAoYmluX2J1c19oYW5kbGVyKToKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2dldF9zdGF0ZV9mdW5jKSwKKwkgIChnc3RfZWxlbWVudF9nZXRfc3RhdGUpLCAoZ3N0X2VsZW1lbnRfYWJvcnRfc3RhdGUpLAorCSAgKGdzdF9lbGVtZW50X2NvbW1pdF9zdGF0ZSksIChnc3RfZWxlbWVudF9zZXRfc3RhdGUpLAorCSAgKGdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZSksIChnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGVfZnVuYyk6CisJICAqIGdzdC9nc3RlbGVtZW50Lmg6CisJICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX2NsYXNzX2luaXQpLCAoZG9fcGlwZWxpbmVfc2VlayksCisJICAoZ3N0X3BpcGVsaW5lX3Byb3ZpZGVfY2xvY2tfZnVuYyk6CisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X2VsZW1lbnRfbGlua19wYWRzX2ZpbHRlcmVkKToKKwkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAobWFpbik6CisJICAqIHRvb2xzL2dzdC10eXBlZmluZC5jOiAobWFpbik6CisJICBVc2UgR3N0Q2xvY2tUaW1lIGluIF9nZXRfc3RhdGUoKSBpbnN0ZWFkIG9mIEdUaW1lVmFsLgorCSAgUmVtb3ZlIG9sZCBjb2RlIGluIGdzdHV0aWxzLmMKKworMjAwNS0xMC0xMiAxMTo0OTozNSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0cGFkLmMgKGdzdF9wYWRfcGF1c2VfdGFzayk6IEFjdHVhbGx5IHJldHVybiBGQUxTRSBpZiB0aGVyZSBpcyBubyB0YXNrLiBTaG91bGRuJ3QgYWZmZWN0IGFueSBjb2RlLCBhcyBub3RoaW5nIGkuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMC0xMiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdHBhZC5jIChnc3RfcGFkX3BhdXNlX3Rhc2spOiBBY3R1YWxseSByZXR1cm4gRkFMU0UgaWYKKwkgIHRoZXJlIGlzIG5vIHRhc2suIFNob3VsZG4ndCBhZmZlY3QgYW55IGNvZGUsIGFzIG5vdGhpbmcgaW4gb3VyCisJICBwbHVnaW5zIGNoZWNrcyB0aGlzIHJldHVybiB2YWx1ZS4KKwkgIChnc3RfcGFkX3N0b3BfdGFzayk6IEFsc28gdGFrZSB0aGUgc3RyZWFtIGxvY2sgaWYgdGhlIHBhZCBoYXMgbm8KKwkgIHRhc2suIERvY3MgdXBkYXRlZC4KKworMjAwNS0xMC0xMiAxMDowNTozNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHBhZC5jOiBDbGVhbnVwIGFjdGl2YXRpb24gY29kZS4gUmVzZXQgb2xkIHN0YXRlIGlmIGFjdGl2YXRpb24gZmFpbGVkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKHByZV9hY3RpdmF0ZSksIChwb3N0X2FjdGl2YXRlKSwKKwkgIChnc3RfcGFkX2FjdGl2YXRlX3B1bGwpLCAoZ3N0X3BhZF9hY3RpdmF0ZV9wdXNoKToKKwkgIENsZWFudXAgYWN0aXZhdGlvbiBjb2RlLiBSZXNldCBvbGQgc3RhdGUgaWYKKwkgIGFjdGl2YXRpb24gZmFpbGVkLgorCisyMDA1LTEwLTEyIDA5OjAyOjQyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiBObyBuZWVkIHRvIHByZXJvbCBhZnRlciByZWNlaXZpbmcgRU9TLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2hhbmRsZV9vYmplY3QpLAorCSAgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKKwkgIE5vIG5lZWQgdG8gcHJlcm9sIGFmdGVyIHJlY2VpdmluZyBFT1MuCisJICAqIGdzdC9lbGVtZW50cy9nc3RmYWtlc2luay5jOiAoZ3N0X2Zha2Vfc2lua19ldmVudCk6CisJICAqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmM6IChnc3RfZmFrZV9zcmNfZXZlbnRfaGFuZGxlcik6CisJICAqIGdzdC9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiAoZ3N0X2lkZW50aXR5X2V2ZW50KToKKwkgIFByaW50IGV2ZW50cyBtb3JlIHZlcmJvc2VseS4KKworMjAwNS0xMC0xMiAwODozODowNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgY2hlY2svOiBNb3ZlZCBzaW5rczIgdGVzdGNvZGUgaW4gc2lua3MgY2hlY2suCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svTWFrZWZpbGUuYW06CisJICAqIGNoZWNrL3N0YXRlcy9zaW5rcy5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X29iamVjdF9zdWl0ZSk6CisJICAqIGNoZWNrL3N0YXRlcy9zaW5rczIuYzoKKwkgIE1vdmVkIHNpbmtzMiB0ZXN0Y29kZSBpbiBzaW5rcyBjaGVjay4KKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9wcm92aWRlX2Nsb2NrX2Z1bmMpLCAoZ3N0X2Jpbl9hZGRfZnVuYyksCisJICAoZ3N0X2Jpbl9yZW1vdmVfZnVuYyksIChnc3RfYmluX3JlY2FsY19zdGF0ZSksCisJICAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGVfZnVuYyksIChiaW5fYnVzX2hhbmRsZXIpOgorCSAgRml4IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiB3aGVuIF9nZXRfc3RhdGUoKSBpdGVyYXRlZCBvdmVyIGFuCisJICBBU1lOQyBlbGVtZW50IHJpZ2h0IGJlZm9yZSBpdCBwb3N0ZWQgYSBzdGF0ZSBjb21wbGV0aW9uLgorCSAgKiBnc3QvZ3N0Y2xvY2suaDoKKwkgIERvIHByb3BlciBjYXN0IGhlcmUuCisJICAqIGdzdC9nc3RldmVudC5jOiAoZ3N0X2V2ZW50X25ld19uZXdzZWdtZW50KSwKKwkgIChnc3RfZXZlbnRfcGFyc2VfbmV3c2VnbWVudCk6CisJICBBIHBsYXliYWNrIHJhdGUgb2YgMC4wIGlzIG5vdCBhbGxvd2VkLgorCisyMDA1LTEwLTEyIDAyOjI2OjQ0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogYXV0b2dlbi5zaDoKKwkgIGF1dG9jb25mIGZvciBmcmVlYnNkCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGF1dG9jb25mIGZvciBmcmVlYnNkCisKKzIwMDUtMTAtMTIgMDI6MjU6MTggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBhdXRvZ2VuLnNoOgorCSAgYXV0b2NvbmYgZm9yIGZyZWVic2QKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYXV0b2NvbmYgZm9yIGZyZWVic2QKKworMjAwNS0xMC0xMiAwMjoyMzoyOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGF1dG9nZW4uc2g6CisJICBhdXRvY29uZiBmb3IgZnJlZWJzZAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhdXRvY29uZiBmb3IgZnJlZWJzZAorCisyMDA1LTEwLTEyIDAyOjE5OjM4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogYXV0b2dlbi5zaDoKKwkgIGF1dG9jb25mIGZvciBmcmVlYnNkCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGF1dG9jb25mIGZvciBmcmVlYnNkCisKKzIwMDUtMTAtMTIgMDI6MTY6MjYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBhdXRvZ2VuLnNoOgorCSAgYXV0b2NvbmYgZm9yIGZyZWVic2QKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYXV0b2NvbmYgZm9yIGZyZWVic2QKKworMjAwNS0xMC0xMSAxODowMzoxMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIHdpbjMyLzogVmlzdWFsIFN0dWRpbyA2IHByb2plY3QgZmlsZXMsIGFuZCBhIG5ldyBjb21tb24gZGlyZWN0b3J5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTEwLTExICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCSAgKiB3aW4zMi9jb21tb24vY29uZmlnLmg6CisJICAqIHdpbjMyL2NvbW1vbi9kaXJlbnQuYzogKF90b3BlbmRpciksIChfdHJlYWRkaXIpLCAoX3RjbG9zZWRpciksCisJICAoX3RyZXdpbmRkaXIpLCAoX3R0ZWxsZGlyKSwgKF90c2Vla2Rpcik6CisJICAqIHdpbjMyL2NvbW1vbi9kaXJlbnQuaDoKKwkgICogd2luMzIvY29tbW9uL2d0Y2hhci5oOgorCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6CisJICAqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgorCSAgKiB3aW4zMi92czYvZ3JhbW1hci5kc3A6CisJICAqIHdpbjMyL3ZzNi9nc3RfaW5zcGVjdC5kc3A6CisJICAqIHdpbjMyL3ZzNi9nc3RfbGF1bmNoLmRzcDoKKwkgICogd2luMzIvdnM2L2dzdHJlYW1lci5kc3c6CisJICAqIHdpbjMyL3ZzNi9saWJnc3RiYXNlLmRzcDoKKwkgICogd2luMzIvdnM2L2xpYmdzdGVsZW1lbnRzLmRzcDoKKwkgICogd2luMzIvdnM2L2xpYmdzdHJlYW1lci5kc3A6CisJICBWaXN1YWwgU3R1ZGlvIDYgcHJvamVjdCBmaWxlcywgYW5kIGEgbmV3IGNvbW1vbiBkaXJlY3RvcnkuCisJICBQaGVhci4KKworMjAwNS0xMC0xMSAxNzozMzoyNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKKwkgIGZvcmdvdCB0aGlzIG9uZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmb3Jnb3QgdGhpcyBvbmUKKworMjAwNS0xMC0xMSAxNzozMjowMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuKjogQ29ycmVjdGx5IHBhcnNlIG5ld3NlZ21lbnQgaW5mby4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwKKwkgIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpLCAoZ3N0X2Jhc2Vfc2lua19xdWVyeSksCisJICAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSAgQ29ycmVjdGx5IHBhcnNlIG5ld3NlZ21lbnQgaW5mby4KKworMjAwNS0xMC0xMSAxNjo1NDo0MSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGdzdC9nc3QuYzogc3BsaXQgcGx1Z2luIHBhdGhzIGNvcnJlY3RseQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTEwLTExICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCSAgKiBnc3QvZ3N0LmM6IChpbml0X3Bvc3QpOgorCSAgc3BsaXQgcGx1Z2luIHBhdGhzIGNvcnJlY3RseQorCisyMDA1LTEwLTExIDE2OjI4OjQ5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBBZGRlZCBleHRyYSBmbGFnIHRvIG5ld3NlZ21lbnQgZm9yIGZ1dHVyZSBBUEkgZnJlZXplLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dzdC9nc3RldmVudC5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwKKwkgIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19kZWZhdWx0X25ld3NlZ21lbnQpOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1fZXZlbnQpOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzogKGdzdF9maWxlX3NpbmtfZXZlbnQpOgorCSAgKiBnc3QvZ3N0ZXZlbnQuYzogKGdzdF9ldmVudF9uZXdfbmV3c2VnbWVudCksCisJICAoZ3N0X2V2ZW50X3BhcnNlX25ld3NlZ21lbnQpOgorCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKKwkgIEFkZGVkIGV4dHJhIGZsYWcgdG8gbmV3c2VnbWVudCBmb3IgZnV0dXJlIEFQSSBmcmVlemUuCisJICBVcGRhdGVkIGNoZWNrIGFuZCBiYXNlIGVsZW1lbnRzLgorCisyMDA1LTEwLTExIDE2OjI1OjM1ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KKworCSAgZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuKjogSGFuZGxlIEVPUyBjb3JyZWN0bHkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTAtMTEgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KKwkgICogZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0cGFkc19pbml0KSwKKwkgIChnc3RfY29sbGVjdHBhZHNfYWRkX3BhZCksIChnc3RfY29sbGVjdHBhZHNfcG9wKSwKKwkgIChnc3RfY29sbGVjdHBhZHNfZXZlbnQpLCAoZ3N0X2NvbGxlY3RwYWRzX2NoYWluKToKKwkgICogZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDogSGFuZGxlIEVPUyBjb3JyZWN0bHkuCisKKzIwMDUtMTAtMTEgMTY6MjE6MDUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiB0b29scy9nc3QtbGF1bmNoLmM6CisJICBtb3JlIHN0ciBudWxsIHByb3RlY3Rpb24KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgbW9yZSBzdHIgbnVsbCBwcm90ZWN0aW9uCisKKzIwMDUtMTAtMTEgMTY6MDU6MTYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBnc3QvZ3N0LWkxOG4tbGliLmg6IGNoZWNrIGZvciBFTkFCTEVfTkxTLCBub3QgR0VUVEVYVF9QQUNLQUdFCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdC1pMThuLWxpYi5oOgorCSAgY2hlY2sgZm9yIEVOQUJMRV9OTFMsIG5vdCBHRVRURVhUX1BBQ0tBR0UKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6IChnc3RfcmVnaXN0cnlfYWRkX3BsdWdpbiksCisJICAoZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9sZXZlbCksCisJICAoX2dzdF9yZWdpc3RyeV9yZW1vdmVfY2FjaGVfcGx1Z2lucyk6CisJICBwcm90ZWN0IHBvc3NpYmx5IE5VTEwgc3RyaW5ncworCSAgKiBnc3QvcGFyc2UvdHlwZXMuaDoKKwkgIGNvbmZpZy5oIGFscmVhZHkgaW5jbHVkZWQgYmVmb3JlCisJICAqIHRvb2xzL2dzdC1pbnNwZWN0LmM6IChtYWluKToKKwkgIHN5cy93YWl0LmggYWxzbyBkb2VzbrR0IGV4aXN0IG9uIG1pbmd3LCBzbyBjaGFuZ2UgdGhlIGlmZGVmIGNoZWNrCisJICBjaGVjayBmb3IgRU5BQkxFX05MUywgbm90IEdFVFRFWFRfUEFDS0FHRQorCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChtYWluKToKKwkgIGNoZWNrIGZvciBFTkFCTEVfTkxTLCBub3QgR0VUVEVYVF9QQUNLQUdFCisJICBUaGlzIGNvbW1pdCBicm91Z2h0IHRvIHlvdSBmcm9tIG1zeXMvbWluZ3cKKworMjAwNS0xMC0xMSAxNToyNjo1OCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGNvbmZpZ3VyZS5hYzogaWYgd2UgZG9uJ3QgaGF2ZSBnbGliLCBmYWlsIGJlZm9yZSB0ZXN0aW5nIDIuOAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgIGlmIHdlIGRvbid0IGhhdmUgZ2xpYiwgZmFpbCBiZWZvcmUgdGVzdGluZyAyLjgKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NoYW5nZV9zdGF0ZSk6CisJICBmaXggYSBsZWFrLCBzaG91bGQgZml4IHBsdWdpbnMtYmFzZSB0ZXN0c3VpdGUKKworMjAwNS0xMC0xMSAxNToyMzoxMCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0cGFkLmMgKHByZV9hY3RpdmF0ZSk6IFJlbmFtZWQgZnJvbSBwcmVfYWN0aXZhdGVfc3dpdGNoLCB0YWtlIHRoZSBtb2RlIHdlJ3JlIGdvaW5nIHRvIGFzIGFuIGFyZy4gR28gaGVhZCBhbmQgc2UuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMC0xMSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdHBhZC5jIChwcmVfYWN0aXZhdGUpOiBSZW5hbWVkIGZyb20gcHJlX2FjdGl2YXRlX3N3aXRjaCwKKwkgIHRha2UgdGhlIG1vZGUgd2UncmUgZ29pbmcgdG8gYXMgYW4gYXJnLiBHbyBoZWFkIGFuZCBzZXQgdGhlIG1vZGUKKwkgIGFuZCBmbHVzaGluZyBmbGFncyBub3csIHNvIHRoYXQgaWYgdGhlIGFjdGl2YXRlIGZ1bmN0aW9uIHN0YXJ0cyBhCisJICB0aHJlYWQgYWxsIHRoZSBmbGFncyB3aWxsIGJlIGluIHRoZSByaWdodCBzdGF0ZS4KKwkgIChwb3N0X2FjdGl2YXRlKTogUmVuYW1lZCBhbHNvLiBKdXN0IGhhbmRsZSBtYWtpbmcgc3VyZSBzdHJlYW1pbmcKKwkgIGZpbmlzaGVzIGZvciB0aGUgZGVhY3RpdmF0aW9uIGNhc2UsIGFuZCBzZXR0aW5nIHRoZSBkZWFjdGl2YXRlZAorCSAgbW9kZS4KKwkgIChnc3RfcGFkX3NldF9hY3RpdmUpOiBDb21wbGFpbiBsb3VkbHkgaWYgZGVhY3RpdmF0aW9uIGZhaWxzLgorCSAgKGdzdF9wYWRfYWN0aXZhdGVfcHVsbCk6IEFkYXB0IHRvIHByZS9wb3N0X2FjdGl2YXRlIGNoYW5nZXMuCisJICAoZ3N0X3BhZF9hY3RpdmF0ZV9wdXNoKTogQWRhcHQgdG8gcHJlL3Bvc3RfYWN0aXZhdGUgY2hhbmdlcywKKwkgIHJlbW92ZSB0aGUgdGVycmlibGUgaGFjay4KKworMjAwNS0xMC0xMSAxNTowNTo1NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJpbi4qOiBQcmVwYXJlIHRvIG1ha2UgY3VycmVudCBFT1MgbWVzc2FnZSBxdWV1ZSBtb3JlIGdlbmVyaWMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9pbml0KSwgKGdzdF9iaW5fcHJvdmlkZV9jbG9ja19mdW5jKSwKKwkgIChpc19lb3MpLCAoZ3N0X2Jpbl9hZGRfZnVuYyksIChnc3RfYmluX3JlbW92ZV9mdW5jKSwKKwkgIChnc3RfYmluX3JlY2FsY19zdGF0ZSksIChnc3RfYmluX2NoYW5nZV9zdGF0ZV9mdW5jKSwKKwkgIChnc3RfYmluX2Rpc3Bvc2UpLCAoYmluX2J1c19oYW5kbGVyKToKKwkgICogZ3N0L2dzdGJpbi5oOgorCSAgUHJlcGFyZSB0byBtYWtlIGN1cnJlbnQgRU9TIG1lc3NhZ2UgcXVldWUgbW9yZSBnZW5lcmljLgorCSAgRml4IHNvbWUgdHlwb3MuCisJICAqIGdzdC9nc3RldmVudC5jOiAoZ3N0X2V2ZW50X25ld19uZXdzZWdtZW50KSwKKwkgIChnc3RfZXZlbnRfcGFyc2VfbmV3c2VnbWVudCk6CisJICAqIGdzdC9nc3RldmVudC5oOgorCSAgUmVuYW1lIGJhc2UgdG8gc3RyZWFtX3RpbWUuCisJICAqIGdzdC9nc3RtZXNzYWdlLmg6CisJICBGaXggdHlwbyBpbiBkb2NzLgorCisyMDA1LTEwLTExIDEyOjU4OjQ0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YmluLio6IFdvcmsgb24gcHJvcGVyIGNsb2NrIHNlbGVjdGlvbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2luaXQpLCAoZ3N0X2Jpbl9wcm92aWRlX2Nsb2NrX2Z1bmMpLAorCSAgKGdzdF9iaW5fYWRkX2Z1bmMpLCAoZ3N0X2Jpbl9yZW1vdmVfZnVuYyksIChnc3RfYmluX3JlY2FsY19zdGF0ZSksCisJICAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGVfZnVuYyksIChiaW5fYnVzX2hhbmRsZXIpOgorCSAgKiBnc3QvZ3N0YmluLmg6CisJICBXb3JrIG9uIHByb3BlciBjbG9jayBzZWxlY3Rpb24uCisKKzIwMDUtMTAtMTEgMTI6NDI6MjMgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci4qOiBBZGRlZCBHTGlzdCogdmVyc2lvbiBvZiBfcmVtb3ZlX3Byb3BlcnRpZXMoKSBpbiBvcmRlciB0byBiZSBhYmxlIHRvIHdyYXAgaXQgaW4gYi4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOiAoZ3N0X2NvbnRyb2xsZXJfcmVtb3ZlX3Byb3BlcnRpZXNfbGlzdCk6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5oOgorCSAgQWRkZWQgR0xpc3QqIHZlcnNpb24gb2YgX3JlbW92ZV9wcm9wZXJ0aWVzKCkgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byB3cmFwCisJICBpdCBpbiBiaW5kaW5ncy4KKworMjAwNS0xMC0xMSAxMTowODo1MiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1zdGF0ZXMudHh0OiBTb21lIG1vcmUgZG9jcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXN0YXRlcy50eHQ6CisJICBTb21lIG1vcmUgZG9jcy4KKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9zZXRfY2xvY2tfZnVuYyksIChnc3RfYmluX3JlY2FsY19zdGF0ZSksCisJICAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGVfZnVuYyksIChiaW5fYnVzX2hhbmRsZXIpOgorCSAgRG9jIHVwZGF0ZXMuIERvbid0IGRpc3RyaWJ1dGUgdGhlIHNhbWUgY2xvY2sgb3ZlciBhbmQgb3ZlciBhZ2Fpbi4KKwkgICogZ3N0L2dzdGNsb2NrLmM6CisJICAqIGdzdC9nc3RjbG9jay5oOgorCSAgRG9jIHVwZGF0ZXMuCisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9mbG93X2dldF9uYW1lKSwgKGdzdF9mbG93X3RvX3F1YXJrKSwKKwkgIChnc3RfcGFkX2dldF90eXBlKSwgKGdzdF9wYWRfcHVzaCksIChnc3RfcGFkX3B1c2hfZXZlbnQpLAorCSAgKGdzdF9wYWRfc2VuZF9ldmVudCk6CisJICAqIGdzdC9nc3RwYWQuaDoKKwkgIE1ha2UgcHJvYmUgZW1pc3Npb24gdGhyZWFkc2FmZSBhZ2Fpbi4KKwkgIFJlZ2lzdGVyIHF1YXJrcyBhbmQgbW92ZSBfZ2V0X25hbWUoKSBmcm9tIHV0aWxzLgorCSAgRG9jIHVwZGF0ZXMuCisJICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX2NsYXNzX2luaXQpLAorCSAgKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X3BpcGVsaW5lX3Byb3ZpZGVfY2xvY2tfZnVuYyk6CisJICBPbmx5IHJlZGlzdHJpYnV0ZSB0aGUgY2xvY2sgb2YgaXQgY2hhbmdlZC4KKwkgICogZ3N0L2dzdHN5c3RlbWNsb2NrLmg6CisJICBEb2MgdXBkYXRlcy4KKwkgICogZ3N0L2dzdHV0aWxzLmM6CisJICAqIGdzdC9nc3R1dGlscy5oOgorCSAgTW92ZWQgdGhlIF9mbG93X2dldF9uYW1lKCkgdG8gR3N0UGFkLgorCisyMDA1LTEwLTExIDA5OjE0OjU5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogY29tbW9uOgorCSogZ3N0L2dzdGJ1ZmZlci5jOgorCSAgaWYgd2UgbG9nIG91ciBpbml0LCBzaG91bGQgYWxzbyBsb2cgZmluYWxpemUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgaWYgd2UgbG9nIG91ciBpbml0LCBzaG91bGQgYWxzbyBsb2cgZmluYWxpemUKKworMjAwNS0xMC0xMCAyMzo1NTozOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIGNoZWNrL2dzdC1saWJzL2dkcC5jOgorCSogY2hlY2svZ3N0L2dzdGNhcHMuYzoKKwkqIGNvbW1vbjoKKwkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RjYXBzLmM6CisJKiB0ZXN0cy9jaGVjay9saWJzL2dkcC5jOgorCSAgZml4IG1vcmUgdmFsZ3JpbmQgd2FybmluZ3MgYmVmb3JlIHR1cm5pbmcgdXAgdGhlIGhlYXQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZml4IG1vcmUgdmFsZ3JpbmQgd2FybmluZ3MgYmVmb3JlIHR1cm5pbmcgdXAgdGhlIGhlYXQKKworMjAwNS0xMC0xMCAyMzoxMTozMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGdzdC9wYXJzZS9ncmFtbWFyLnk6CisJICBkb24ndCBkZWNsYXJlIG9uIHRoZSBwcm9wZXIgZGVmaW5lCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGRvbid0IGRlY2xhcmUgb24gdGhlIHByb3BlciBkZWZpbmUKKworMjAwNS0xMC0xMCAyMjo1OToyMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGdzdC9wYXJzZS9ncmFtbWFyLnk6CisJICB1bm1hbmdsZSB0aGUgbmVzdGluZyBhIGxpdHRsZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB1bm1hbmdsZSB0aGUgbmVzdGluZyBhIGxpdHRsZQorCisyMDA1LTEwLTEwIDIyOjQ5OjQyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0L3BhcnNlL2dyYW1tYXIueTogc29tZSBjbGVhbnVwIGJlZm9yZSB0aGUgaGFja2luZworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9wYXJzZS9ncmFtbWFyLnk6CisJICBzb21lIGNsZWFudXAgYmVmb3JlIHRoZSBoYWNraW5nCisKKzIwMDUtMTAtMTAgMTg6MTY6MzcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IHVzZSBjb252ZXJzaW9ucworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19xdWVyeSk6CisJICB1c2UgY29udmVyc2lvbnMKKwkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfZ3VpbnQ2NF90b19nZG91YmxlKSwKKwkgIChnc3RfZ2RvdWJsZV90b19ndWludDY0KSwgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZSk6CisJICAqIGdzdC9nc3R1dGlscy5oOgorCSAgZXh0ZXJuYWxpemUsIGJhc2VzcmMgdXNlcyBpdAorCSAgb2J2aW91c2x5IHRoZSBpbXBsZW1lbnRhdGlvbiBuZWVkcyB0ZXN0aW5nCisKKzIwMDUtMTAtMTAgMTc6MDU6MDQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIGFub3RoZXIgY2FzdCBiaXRlcyB0aGUgZHVzdAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhbm90aGVyIGNhc3QgYml0ZXMgdGhlIGR1c3QKKworMjAwNS0xMC0xMCAxNjo0NTo0NSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGdzdC9nc3R1dGlscy5jOgorCSAgYW5vdGhlciBjYXN0IGJpdGVzIHRoZSBkdXN0CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFub3RoZXIgY2FzdCBiaXRlcyB0aGUgZHVzdAorCisyMDA1LTEwLTEwIDE2OjQzOjMyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICB0ZXN0cy9zY2hlZC86CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdGVzdHMvc2NoZWQvTWFrZWZpbGUuYW06CisJICAqIHRlc3RzL3NjaGVkL3NvcnQuYzogKG1ha2VfcGlwZWxpbmUxKSwgKG1ha2VfcGlwZWxpbmUyKSwKKwkgIChtYWtlX3BpcGVsaW5lMyksIChtYWtlX3BpcGVsaW5lNCksIChwcmludF9lbGVtKSwgKG1haW4pOgorCisyMDA1LTEwLTEwIDE2OjM4OjU5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0L2dzdHV0aWxzLmM6IGFwcGFyZW50bHkgY29udmVydGluZyBmcm9tIGd1aW50NjQgdG8gZG91YmxlIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBNU1ZDCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHV0aWxzLmM6IChndWludDY0X3RvX2dkb3VibGUpLCAoZ3N0X3V0aWxfdWludDY0X3NjYWxlKToKKwkgIGFwcGFyZW50bHkgY29udmVydGluZyBmcm9tIGd1aW50NjQgdG8gZG91YmxlIGlzIG5vdCBpbXBsZW1lbnRlZAorCSAgb24gTVNWQworCisyMDA1LTEwLTEwIDE2OjM4OjI2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBjaGVjay86IENoZWNrIGZpeGVzLCB1c2UgQVBJIGFzIHN0YXRlZCBpbiBkZXNpZ24gZG9jcywgcmVtb3ZlIGhhY2tzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL01ha2VmaWxlLmFtOgorCSAgKiBjaGVjay9nZW5lcmljL3N0YXRlcy5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgKiBjaGVjay9nc3QvZ3N0YmluLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICAqIGNoZWNrL2dzdC9nc3RwaXBlbGluZS5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3BpcGVsaW5lX3N1aXRlKToKKwkgICogY2hlY2svc3RhdGVzL3NpbmtzLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICAqIGNoZWNrL3N0YXRlcy9zaW5rczIuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9vYmplY3Rfc3VpdGUpLAorCSAgKG1haW4pOgorCSAgQ2hlY2sgZml4ZXMsIHVzZSBBUEkgYXMgc3RhdGVkIGluIGRlc2lnbiBkb2NzLCByZW1vdmUgaGFja3MuCisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2hhbmRsZV9vYmplY3QpLAorCSAgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKKwkgIENhdGNoIHN0b3BwaW5nIG91ciB0YXNrIHdoaWxlIHdlJ3JlIHNodXR0aW5nIGRvd24uCisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5faW5pdCksIChnc3RfYmluX2FkZF9mdW5jKSwKKwkgIChnc3RfYmluX3JlbW92ZV9mdW5jKSwgKGdzdF9iaW5fZ2V0X3N0YXRlX2Z1bmMpLAorCSAgKGdzdF9iaW5fcmVjYWxjX3N0YXRlKSwgKGdzdF9iaW5fY2hhbmdlX3N0YXRlX2Z1bmMpLAorCSAgKGJpbl9idXNfaGFuZGxlcik6CisJICAqIGdzdC9nc3RiaW4uaDoKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2luaXQpLAorCSAgKGdzdF9lbGVtZW50X2dldF9zdGF0ZV9mdW5jKSwgKGdzdF9lbGVtZW50X2Fib3J0X3N0YXRlKSwKKwkgIChnc3RfZWxlbWVudF9jb21taXRfc3RhdGUpLCAoZ3N0X2VsZW1lbnRfbG9zdF9zdGF0ZSksCisJICAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKSwgKGdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZSksCisJICAoZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlX2Z1bmMpOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSAgTmV3IHN0YXRlIGNoYW5nZSBhbGdvcml0aG0gKHNlZSAjMzE4MTE2KQorCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9jbGFzc19pbml0KSwKKwkgIChnc3RfcGlwZWxpbmVfaW5pdCksIChnc3RfcGlwZWxpbmVfc2V0X3Byb3BlcnR5KSwKKwkgIChnc3RfcGlwZWxpbmVfZ2V0X3Byb3BlcnR5KSwgKGRvX3BpcGVsaW5lX3NlZWspLAorCSAgKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X3BpcGVsaW5lX3Byb3ZpZGVfY2xvY2tfZnVuYyk6CisJICAqIGdzdC9nc3RwaXBlbGluZS5oOgorCSAgUmVtb3ZlIGNydWRlIHN0YXRlIGNoYW5nZSBoYWNrcy4KKwkgICogZ3N0L2dzdHV0aWxzLmg6CisJICBSZW1vdmUgY3J1ZGUgaGFja3MuCisJICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKG1haW4pOgorCSAgRml4ZXMgZm9yIHN0YXRlIGNoYW5nZS4gTmVlZHMgc29tZSBtb3JlIHdvcmsgdG8gZnVsbHkgdXNlIHRoZQorCSAgbmV3IHN0dWZmLgorCisyMDA1LTEwLTEwIDE2OjIwOjQxICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIHRlc3RzL01ha2VmaWxlLmFtIChub2luc3RfUFJPR1JBTVMpOiBObyBtb3JlIGluaXQuYy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMC0xMCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogdGVzdHMvTWFrZWZpbGUuYW0gKG5vaW5zdF9QUk9HUkFNUyk6IE5vIG1vcmUgaW5pdC5jLgorCisyMDA1LTEwLTEwIDE2OjA0OjI4ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGdzdC9nc3QuYyAoR19PUFRJT05fRkxBR19OT19BUkcpOiBBcHBhcmVudGx5IEdMaWIgMi44IHJlcXVpcmVzIHRoaXMgZmxhZywgYnV0IGl0J3Mgbm90IGV2ZW4gaW4gR0xpYiAyLjYuIE9kZC4gSGFjayBhci4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTEwLTEwICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvZ3N0LmMgKEdfT1BUSU9OX0ZMQUdfTk9fQVJHKTogQXBwYXJlbnRseSBHTGliIDIuOCByZXF1aXJlcworCSAgdGhpcyBmbGFnLCBidXQgaXQncyBub3QgZXZlbiBpbiBHTGliIDIuNi4gT2RkLiBIYWNrIGFyb3VuZCB0aGUKKwkgIGlzc3VlLgorCisyMDA1LTEwLTEwIDE1OjU4OjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0aXRlcmF0b3IuYzogRml4IG15IHByZXZpb3VzIGNvbW1pdDogR1R5cGVzIHBhc3NlZCB0byBnc3RfaXRlcmF0b3JfbmV3KCkgY2FuIGJlIGZ1bmRhbWVudGFsIHR5cGVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RpdGVyYXRvci5jOiAoZ3N0X2l0ZXJhdG9yX25ldyk6CisJICBGaXggbXkgcHJldmlvdXMgY29tbWl0OiBHVHlwZXMgcGFzc2VkIHRvIGdzdF9pdGVyYXRvcl9uZXcoKQorCSAgY2FuIGJlIGZ1bmRhbWVudGFsIHR5cGVzLgorCisyMDA1LTEwLTEwIDE1OjU1OjM3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0ZWxlbWVudC5jOiBVc2Ugc3JjL3NpbmsgcGFkcyBsaXN0cyBmb3IgdGhlIHJlc3BlY3RpdmUgaXRlcmF0b3JzIGluc3RlYWQgb2YgZmlsdGVyaW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9pdGVyYXRlX3BhZF9saXN0KSwKKwkgIChnc3RfZWxlbWVudF9pdGVyYXRlX3BhZHMpLCAoZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zcmNfcGFkcyksCisJICAoZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zaW5rX3BhZHMpOgorCSAgVXNlIHNyYy9zaW5rIHBhZHMgbGlzdHMgZm9yIHRoZSByZXNwZWN0aXZlIGl0ZXJhdG9ycyBpbnN0ZWFkCisJICBvZiBmaWx0ZXJpbmcuCisKKzIwMDUtMTAtMTAgMTU6NTM6NTkgKzAwMDAgIFJvbmFsZCA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgorCisJICBNZXJnZWQgaW4gcG9wdCByZW1vdmFsICsgR09wdGlvbiBhZGRpdGlvbiBwYXRjaCBmcm9tIFJvbmFsZCwgYnVnICMxNjk3NzIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTAtMTAgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICBNZXJnZWQgaW4gcG9wdCByZW1vdmFsICsgR09wdGlvbiBhZGRpdGlvbiBwYXRjaCBmcm9tIFJvbmFsZCwgYnVnCisJICAjMTY5NzcyLgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBBZGQgU1RBVEVfKFVOKUxPQ0tfRlVMTCwgbW92ZQorCSAgR3N0RWxlbWVudCBtYWNyb3MgYXJvdW5kLCByZW1vdmUgcG9wdC1yZWxhdGVkIHN5bWJvbHMsIGFkZCBnb3B0aW9uCisJICBzdHVmZi4KKwkgICogY29uZmlndXJlLmFjOiBSZW1vdmUgcG9wdCBjaGVja3MsIHJlcXVpcmUgR0xpYiAyLjYgZm9yIEdPcHRpb24uCisJICAqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgorCSAgKiBkb2NzL2xpYnMvTWFrZWZpbGUuYW06IE5vIFBPUFRfQ0ZMQUdTLgorCSAgKiBleGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuYW06CisJICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1pbml0LnhtbDogRG9jIHVwZGF0ZXMgd2l0aCBhbiBleGFtcGxlLgorCSAgKiBnc3QvZ3N0LmM6IChnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwKSwgKGdzdF9pbml0X2NoZWNrKSwKKwkgIChnc3RfaW5pdCksIChwYXJzZV9vbmVfb3B0aW9uKSwgKHBhcnNlX2dvcHRpb25fYXJnKToKKwkgICogZ3N0L2dzdC5oOiBSZW1vdmVkIGdzdF9pbml0X3dpdGhfcG9wdF90YWJsZSBhbmQgZnJpZW5kcy4gVG9vayBhCisJICBiaXQgb2YgaGFuZCBtZXJnaW5nIGFuZCBkZWJ1Z2dpbmcgdG8gZ2V0IHRoZSBHT3B0aW9uIHN0dWZmIHdvcmtpbmcKKwkgIHRoby4KKwkgICogdGVzdHMvTWFrZWZpbGUuYW06CisJICAqIHRvb2xzL01ha2VmaWxlLmFtOgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAobWFpbik6CisJICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKG1haW4pOgorCSAgKiB0b29scy9nc3QtcnVuLmM6IChtYWluKToKKwkgICogdG9vbHMvZ3N0LXhtbGluc3BlY3QuYzogKG1haW4pOiBUaGFua3MgUm9uYWxkIQorCisyMDA1LTEwLTEwIDE1OjMwOjQ1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0aXRlcmF0b3IuYzogQWRkIGFzc2VydGlvbnMgdG8gbWFrZSBzdXJlIHBhc3NlZCBHVHlwZSBpcyBsaWtlbHkgdG8gcmVhbGx5IGJlIGEgR1R5cGUgKGFzIHRoZSBjb21waWxlciB3b24ndCBjYXQuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0aXRlcmF0b3IuYzogKGdzdF9pdGVyYXRvcl9uZXcpOgorCSAgQWRkIGFzc2VydGlvbnMgdG8gbWFrZSBzdXJlIHBhc3NlZCBHVHlwZSBpcyBsaWtlbHkgdG8gcmVhbGx5CisJICBiZSBhIEdUeXBlIChhcyB0aGUgY29tcGlsZXIgd29uJ3QgY2F0Y2ggaXQgaWYgdGhlIHNpemUgYW5kCisJICBHVHlwZSBhcmd1bWVudHMgZ2V0IG1peGVkIHVwLCBzZWUgIzMxODQ0NykuCisKKzIwMDUtMTAtMTAgMTU6Mjc6MTIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RiaW4uYzogUGFzcyBHVHlwZSBhbmQgc2l6ZSBhcmd1bWVudHMgdG8gZ3N0X2l0ZXJhdG9yX25ldygpIGluIHRoZSByaWdodCBvcmRlciAobWF5YmUgd2Ugc2hvdWxkIG1ha2UgX25ldygpIHRhay4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBSZXZpZXdlZCBieTogVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2l0ZXJhdGVfc29ydGVkKToKKwkgIFBhc3MgR1R5cGUgYW5kIHNpemUgYXJndW1lbnRzIHRvIGdzdF9pdGVyYXRvcl9uZXcoKSBpbiB0aGUgcmlnaHQKKwkgIG9yZGVyIChtYXliZSB3ZSBzaG91bGQgbWFrZSBfbmV3KCkgdGFrZSB0aGUgR1R5cGUgYXMgZmlyc3QgYXJndW1lbnQKKwkgIGp1c3QgbGlrZSBfbmV3X2xpc3QoKT8pICgjMzE4NDQ3KS4KKworMjAwNS0xMC0xMCAxNToxNzozNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGVsZW1lbnQuYzogQW5kIGZyZWUgdGhlIEdTdGF0aWNSZWNNdXRleCB0b28KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfZmluYWxpemUpOgorCSAgQW5kIGZyZWUgdGhlIEdTdGF0aWNSZWNNdXRleCB0b28KKworMjAwNS0xMC0xMCAxNDozMzozOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHdpbjMyL0dTdHJlYW1lci52Y3Byb2o6CisJKiB3aW4zMi92czcvR1N0cmVhbWVyLnZjcHJvajoKKwkgIGRvbid0IGVjaG8gcGF0aAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBkb24ndCBlY2hvIHBhdGgKKworMjAwNS0xMC0xMCAxNDozMzoxMyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0ZWxlbWVudC5jIChnc3RfZWxlbWVudF9pbml0LCBnc3RfZWxlbWVudF9maW5hbGl6ZSk6IEFsbG9jYXRlIGFuZCBmcmVlIHRoZSBtdXRleCBwcm9wZXJseS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMC0xMCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdGVsZW1lbnQuYyAoZ3N0X2VsZW1lbnRfaW5pdCwgZ3N0X2VsZW1lbnRfZmluYWxpemUpOgorCSAgQWxsb2NhdGUgYW5kIGZyZWUgdGhlIG11dGV4IHByb3Blcmx5LgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5oIChHU1RfU1RBVEVfVU5MT0NLX0ZVTEwsIEdTVF9TVEFURV9MT0NLX0ZVTEwpOgorCSAgTmV3IG1hY3Jvcy4KKwkgIChHc3RFbGVtZW50KTogVGhlIHN0YXRlX2xvY2sgaXMgbm93IHJlY3Vyc2l2ZS4gUmVidWlsZCB5b3VyCisJICBwbHVnaW5zLCBzdWNrZXJzLiBPbGQgbWFjcm9zIGFkYXB0ZWQuCisKKzIwMDUtMTAtMTAgMTQ6MjM6NTcgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSogQ2hhbmdlTG9nOgorCSAgY2hhbmdlbG9nCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGNoYW5nZWxvZworCisyMDA1LTEwLTEwIDE0OjIzOjI2ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IERvYyB1cGRhdGVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTEwLTEwICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBEb2MgdXBkYXRlcy4KKwkgICogZ3N0L2dzdHV0aWxzLmg6CisJICAqIGdzdC9nc3R1dGlscy5jIChnX3N0YXRpY19yZWNfY29uZF90aW1lZF93YWl0KQorCSAgKGdfc3RhdGljX3JlY19jb25kX3dhaXQpOiBQb3J0ZWQgZnJvbSBzdGF0ZSBjaGFuZ2VzIHBhdGNoLCB3aGlsZQorCSAgd2Ugd2FpdCBvbiBidWcgIzMxNzgwMiB0byBiZSBzb2x2ZWQgaW4gYSB3ZWxsLWRpc3RyaWJ1dGVkIEdMaWIuCisKKzIwMDUtMTAtMTAgMTQ6MTU6MTUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiB3aW4zMi9NQU5JRkVTVDoKKwkqIHdpbjMyL2xpYmdzdGJhc2UuZGVmOgorCSogd2luMzIvbGliZ3N0YmFzZS52Y3Byb2o6CisJKiB3aW4zMi9saW5rX29sZHJ1bnRpbWUuYzoKKwkqIHdpbjMyL3ZzNy9saWJnc3RiYXNlLmRlZjoKKwkqIHdpbjMyL3ZzNy9saWJnc3RiYXNlLnZjcHJvajoKKwkqIHdpbjMyL3ZzNy9saW5rX29sZHJ1bnRpbWUuYzoKKwkgIGFkZCBtb3JlIHdpbjMyIGJ1aWxkIGZpbGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFkZCBtb3JlIHdpbjMyIGJ1aWxkIGZpbGVzCisKKzIwMDUtMTAtMTAgMTQ6MDM6MjUgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdGVsZW1lbnQuYyAoZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlX2Z1bmMpOiBSZW5hbWVkIGZyb20gZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlLCB2YXJpYWJsZSBuYW1lIGNoYW5nZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTAtMTAgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3RlbGVtZW50LmMgKGdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZV9mdW5jKTogUmVuYW1lZCBmcm9tCisJICBnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUsIHZhcmlhYmxlIG5hbWUgY2hhbmdlcy4KKwkgIChnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUpOiBTcGxpdCBvdXQgb2YgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIGluCisJICBwcmVwYXJhdGlvbiBmb3IgdGhlIHN0YXRlIGNoYW5nZSBtZXJnZS4gRG9lc24ndCBwYXkgYXR0ZW50aW9uIHRvCisJICB0aGUgJ3RyYW5zaXRpb24nIGFyZ3VtZW50LgorCSAgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSk6IFVwZGF0ZXMsIGhvcGVmdWxseSBwdXJlbHkgY29zbWV0aWMuCisJICAoZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudCk6IE1ULXNhZmV0eS4gUG9ydGVkIGZyb20gdGhlCisJICBzdGF0ZSBjaGFuZ2UgcGF0Y2guCisJICAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlX2Z1bmMpOiBSZW5hbWVkIGZyb20gZ2V0X3N0YXRlLCBjb3NtZXRpYworCSAgY2hhbmdlcy4KKworMjAwNS0xMC0xMCAxMzo1MjoxOCArMDAwMCAgU2ViYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+CisKKwkgIHVwZGF0ZXMgZm9yIHRoZSB3aW4zMiBidWlsZCAocGF0Y2ggZnJvbSBTZWJhc3RpZW4gTW91dHRlKQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9lbGVtZW50cy9nc3RlbGVtZW50cy5jOgorCSAgKiB3aW4zMi9HU3RyZWFtZXIudmNwcm9qOgorCSAgKiB3aW4zMi9jb25maWcuaDoKKwkgICogd2luMzIvZGlyZW50LmM6IChfdHNlZWtkaXIpOgorCSAgKiB3aW4zMi9nc3QtaW5zcGVjdC52Y3Byb2o6CisJICAqIHdpbjMyL2dzdC1sYXVuY2gudmNwcm9qOgorCSAgKiB3aW4zMi9nc3Rjb25maWcuaDoKKwkgICogd2luMzIvZ3N0ZWxlbWVudHMudmNwcm9qOgorCSAgKiB3aW4zMi9nc3RlbnVtdHlwZXMuYzogKGdzdF9vYmplY3RfZmxhZ3NfZ2V0X3R5cGUpOgorCSAgKiB3aW4zMi9nc3RyZWFtZXIuZGVmOgorCSAgKiB3aW4zMi9tc3ZjNzEuc2xuOgorCSAgdXBkYXRlcyBmb3IgdGhlIHdpbjMyIGJ1aWxkIChwYXRjaCBmcm9tIFNlYmFzdGllbiBNb3V0dGUpCisKKzIwMDUtMTAtMTAgMTE6NTI6NTggKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdGJpbi5jIChnc3RfYmluX2dldF9zdGF0ZV9mdW5jKTogUmVuYW1lZCBmcm9tIGdzdF9iaW5fZ2V0X3N0YXRlLCBjbGVhbmVkIHVwIChidXQgbm8gbG9naWMgY2hhbmdlcykuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTAtMTAgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3RiaW4uYyAoZ3N0X2Jpbl9nZXRfc3RhdGVfZnVuYyk6IFJlbmFtZWQgZnJvbQorCSAgZ3N0X2Jpbl9nZXRfc3RhdGUsIGNsZWFuZWQgdXAgKGJ1dCBubyBsb2dpYyBjaGFuZ2VzKS4KKwkgIChiaW5fZWxlbWVudF9pc19zaW5rKTogQ29tbWVudCB1cGRhdGVzLgorCSAgKHNpbmtfaXRlcmF0b3JfZmlsdGVyKTogUmVtb3ZlIG5lZWRsZXNzIGNhc3QuCisJICAoZ3N0X2Jpbl9pdGVyYXRlX3NpbmtzKTogRG9jIHVwZGF0ZS4KKwkgIChnc3RfYmluX2NoYW5nZV9zdGF0ZV9mdW5jKTogUmVuYW1lZCBmcm9tIGdzdF9iaW5fY2hhbmdlX3N0YXRlLAorCSAgY2xlYW5lZCB1cCAoYnV0IG5vIGxvZ2ljIGNoYW5nZXMpLgorCisyMDA1LTEwLTEwIDExOjA0OjU1ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGNoZWNrL3N0YXRlcy9zaW5rcy5jICh0ZXN0X3NyY19zaW5rKTogQ2xlYW51cHMgZnJvbSB0aGUgc3RhdGUgY2hhbmdlIHBhdGNoLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTEwLTEwICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBjaGVjay9zdGF0ZXMvc2lua3MuYyAodGVzdF9zcmNfc2luayk6IENsZWFudXBzIGZyb20gdGhlIHN0YXRlCisJICBjaGFuZ2UgcGF0Y2guCisJICAodGVzdF9saXZlc3JjX3NpbmspOiBTeW5jIG9uIHRoZSBzdGF0ZS4KKworMjAwNS0xMC0xMCAxMDo1OTozMyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBjaGVjay9waXBlbGluZXMvc2ltcGxlX2xhdW5jaF9saW5lcy5jIChydW5fcGlwZWxpbmUpOiBNZXJnZSBmcm9tIHRoZSBzdGF0ZSBjaGFuZ2UgcGF0Y2guCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTAtMTAgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGNoZWNrL3BpcGVsaW5lcy9zaW1wbGVfbGF1bmNoX2xpbmVzLmMgKHJ1bl9waXBlbGluZSk6IE1lcmdlIGZyb20KKwkgIHRoZSBzdGF0ZSBjaGFuZ2UgcGF0Y2guCisKKzIwMDUtMTAtMTAgMTA6NTc6NDAgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgY2hlY2svZ3N0L2dzdGdob3N0cGFkLmMgKHRlc3RfZ2hvc3RfcGFkcyk6IE1lcmdlIGZyb20gdGhlIHN0YXRlIGNoYW5nZSBwYXRjaC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMC0xMCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogY2hlY2svZ3N0L2dzdGdob3N0cGFkLmMgKHRlc3RfZ2hvc3RfcGFkcyk6IE1lcmdlIGZyb20gdGhlIHN0YXRlCisJICBjaGFuZ2UgcGF0Y2guCisKKzIwMDUtMTAtMTAgMTA6NTA6MTIgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgY2hlY2svZ3N0L2dzdGJpbi5jOiBNZXJnZSBpbiBzb21lIHN0eWxlIGZpeGVzIGFuZCBhZGRpdGlvbmFsIGNoZWNrcyBmcm9tIFdpbSdzIHN0YXRlIGNoYW5nZSBwYXRjaC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMC0xMCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogY2hlY2svZ3N0L2dzdGJpbi5jOiBNZXJnZSBpbiBzb21lIHN0eWxlIGZpeGVzIGFuZCBhZGRpdGlvbmFsCisJICBjaGVja3MgZnJvbSBXaW0ncyBzdGF0ZSBjaGFuZ2UgcGF0Y2guCisKKzIwMDUtMTAtMTAgMTA6NDM6MTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6IENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0aGUgcmVxdWVzdGVkIGRhdGEgYWxyZWFkeSBpbiBvdXIgbGlzdCBvZiBjYWNoZWQgYnVmZmVycyBiZWZvcmUgcC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6IChoZWxwZXJfZmluZF9wZWVrKSwKKwkgIChnc3RfdHlwZV9maW5kX2hlbHBlcik6CisJICBDaGVjayB3aGV0aGVyIHdlIGhhdmUgdGhlIHJlcXVlc3RlZCBkYXRhIGFscmVhZHkgaW4gb3VyIGxpc3Qgb2YKKwkgIGNhY2hlZCBidWZmZXJzIGJlZm9yZSBwdWxsaW5nIGEgbmV3IGJ1ZmZlcjsgYWxzbyBtYWtlIHRoZSBidWZmZXIKKwkgIGxpc3QgYSBHU0xpc3QuIFNwZWVkcyB1cCB0eXBlZmluZGluZyBieSBjYS4gNS0xMCUgYWx0b2dldGhlci4KKworMjAwNS0xMC0xMCAwOTo0ODoyMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGdzdC86IGRvYyB1cGRhdGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGNhcHMuYzoKKwkgICogZ3N0L2dzdGV2ZW50LmM6CisJICBkb2MgdXBkYXRlcworCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9pbnRfaGVscGVyKToKKwkgIGRvbid0IHVzZSBsb25nIGxvbmcsIGl0J3Mgbm90IHBvcnRhYmxlLiAgUmVwbGFjaW5nIHdpdGgKKwkgIGdpbnQ2NCBzZWVtcyB0byB3b3JrOyBsZXQncyBob3BlIG5vIHNrZWxldG9ucyBmYWxsIG91dCBvZiB0aGUgY2xvc2V0LgorCisyMDA1LTEwLTEwIDA4OjUxOjU5ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGF1dG9nZW4uc2ggKENPTkZJR1VSRV9ERUZfT1BUKTogTm8gbW9yZSAtLXBsdWdpbi1idWlkZGlyLCB5YXkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMC0xMCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogYXV0b2dlbi5zaCAoQ09ORklHVVJFX0RFRl9PUFQpOiBObyBtb3JlIC0tcGx1Z2luLWJ1aWRkaXIsIHlheQorCisyMDA1LTEwLTA5IDIwOjQ5OjQ2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIG1vcmUgZG9jcywgZml4IGNvbXBpbGF0aW9uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdGV2ZW50LmM6CisJICAqIGdzdC9nc3RldmVudC5oOgorCSAgKiBnc3QvZ3N0aW5mby5jOgorCSAgKiBnc3QvZ3N0aW5mby5oOgorCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOiAoZ3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZCk6CisJICAqIGdzdC9nc3RwYWQuYzoKKwkgICogZ3N0L2dzdHBhZC5oOgorCSAgbW9yZSBkb2NzLCBmaXggY29tcGlsYXRpb24KKworMjAwNS0xMC0wOSAyMDoxOTo0OCArMDAwMCAgUGhpbGlwcGUgS2FsYWYgPHBoaWxpcHBlLmthbGFmQGNvbGxhYm9yYS5jby51az4KKworCSAgZ3N0L2dzdG1lc3NhZ2UuYzogRml4ZWQgYSBmZXcgZm9yZ290dGVuIHZhcmlhYmxlcyBvbiBwcmV2aW91cyBjb21taXQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMC0wOSAgUGhpbGlwcGUgS2hhbGFmIDxidXJnZXJAc3BlZWR5Lm9yZz4KKwkgICogZ3N0L2dzdG1lc3NhZ2UuYzoKKwkgIEZpeGVkIGEgZmV3IGZvcmdvdHRlbiB2YXJpYWJsZXMgb24gcHJldmlvdXMgY29tbWl0CisKKzIwMDUtMTAtMDkgMTc6NTk6MDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6IEZpeCBldmlsIHR5cGVmaW5kIGNyYXNoZXI6IGdldHJhbmdlKCkgbWlnaHQgcmV0dXJuIGEgc2hvcnQgYnVmZmVyIGF0IHRoZSBlbmQgb2YgYSBmaWxlLC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6IChoZWxwZXJfZmluZF9wZWVrKToKKwkgIEZpeCBldmlsIHR5cGVmaW5kIGNyYXNoZXI6IGdldHJhbmdlKCkgbWlnaHQgcmV0dXJuIGEgc2hvcnQKKwkgIGJ1ZmZlciBhdCB0aGUgZW5kIG9mIGEgZmlsZSwgYnV0IGdzdF90eXBlX2ZpbmRfcGVlaygpIG11c3QKKwkgIGVpdGhlciByZXR1cm4gdGhlIGZ1bGwgZGF0YSBhcyByZXF1ZXN0ZWQgb3IgTlVMTCwgYnV0CisJICBuZXZlciBhIHNob3J0IGJ1ZmZlci4KKworMjAwNS0xMC0wOSAxNzo1MzozMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGdzdC9nc3RtZXNzYWdlLio6IGRvbid0IHVzZSBuZXcsIGl0J3MgYSBDKysga2V5d29yZAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RtZXNzYWdlLmM6IChnc3RfbWVzc2FnZV9uZXdfc3RhdGVfY2hhbmdlZCksCisJICAoZ3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZCk6CisJICAqIGdzdC9nc3RtZXNzYWdlLmg6CisJICBkb24ndCB1c2UgbmV3LCBpdCdzIGEgQysrIGtleXdvcmQKKworMjAwNS0xMC0wOSAxNzoyMjozMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICBvbmNlIGlzIGVub3VnaAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBvbmNlIGlzIGVub3VnaAorCisyMDA1LTEwLTA4IDE4OjIxOjIwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvOiBTbWFsbCBkb2NzIGFuZCBkZWJ1ZyB1cGRhdGVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RiaW4uYzogKGlzX2VvcyksICh1cGRhdGVfZGVncmVlKSwgKGdzdF9iaW5fcXVlcnkpOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKToKKwkgICogZ3N0L2dzdHBpcGVsaW5lLmM6IChnc3RfcGlwZWxpbmVfY2hhbmdlX3N0YXRlKToKKwkgIFNtYWxsIGRvY3MgYW5kIGRlYnVnIHVwZGF0ZXMuCisKKzIwMDUtMTAtMDggMTg6MDc6MjAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgbW9yZSBkb2NzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6CisJICAqIGdzdC9nc3RldmVudC5jOgorCSAgKiBnc3QvZ3N0dGFnbGlzdC5jOgorCSAgbW9yZSBkb2NzCisKKzIwMDUtMTAtMDggMTg6MDE6MDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RiaW4uYzogRml4IHR5cG9zLCBhZGQgY29tbWVudHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAoaXNfZW9zKSwgKHVwZGF0ZV9kZWdyZWUpLCAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGUpLAorCSAgKGdzdF9iaW5fZGlzcG9zZSksIChiaW5fYnVzX2hhbmRsZXIpOgorCSAgRml4IHR5cG9zLCBhZGQgY29tbWVudHMuCisJICBDbGVhciBFT1MgbGlzdCB3aGVuIGdvaW5nIHRvIFBBVVNFRCBmcm9tIGFueSBkaXJlY3Rpb24gYW5kIGRvIGl0CisJICBpbiBhIHRocmVhZHNhZmUgd2F5LgorCSAgR2V0IGJhc2UgdGltZSBpbiBhIHRocmVhZHNhZmUgd2F5IHRvby4KKwkgIEZpeCBjb25mdXNpbmcgZGVidWcgaW4gdGhlIGNoYW5nZV9zdGF0ZSBmdW5jdGlvbi4KKwkgIFZhcmlvdXMgb3RoZXIgbWFsbCBjbGVhbnVwcy4KKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSk6CisJICBGaXggdmVyeSB2ZXJib3NlIGJ1cyBwb3N0aW5nIGNvZGUuCisJICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX2NsYXNzX2luaXQpLAorCSAgKGdzdF9waXBlbGluZV9zZXRfcHJvcGVydHkpLCAoZ3N0X3BpcGVsaW5lX2dldF9wcm9wZXJ0eSksCisJICAoZ3N0X3BpcGVsaW5lX2NoYW5nZV9zdGF0ZSk6CisJICBTbWFsbCBBUkdfIC0+IFBST1BfIGNsZWFudXAKKworMjAwNS0xMC0wOCAxNzozMDoyOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJpbi5jOiBEbyBhIGxlc3MgQ1BVIGRlbWFuZGluZyBFT1MgY2hlY2sgYmVjYXVzZSB3ZSBjYW4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAoaXNfZW9zKSwgKGJpbl9idXNfaGFuZGxlcik6CisJICBEbyBhIGxlc3MgQ1BVIGRlbWFuZGluZyBFT1MgY2hlY2sgYmVjYXVzZSB3ZSBjYW4uCisKKzIwMDUtMTAtMDggMTc6MTc6MjUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC86IEl0J3MgYWJvdXQgdGltZSB3ZSBidW1wIHRoZSB2ZXJzaW9uIG51bWJlci4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6CisJICAoZ3N0X2RwX2hlYWRlcl9mcm9tX2J1ZmZlciksIChnc3RfZHBfcGFja2V0X2Zyb21fY2FwcyksCisJICAoZ3N0X2RwX3BhY2tldF9mcm9tX2V2ZW50KToKKwkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5oOgorCSAgKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZHAtcHJpdmF0ZS5oOgorCSAgSXQncyBhYm91dCB0aW1lIHdlIGJ1bXAgdGhlIHZlcnNpb24gbnVtYmVyLgorCSAgU2luY2UgZXZlbnQgdHlwZXMgZG9uJ3QgZml0IGluIHRoZSBndWludDggYW55bW9yZSBkZXNjcmliaW5nCisJICB0aGUgcGF5bG9hZCB0eXBlLCBtYWtlIHBheWxvYWQgdHlwZSAxNiBiaXRzIHdpZGUuCisKKzIwMDUtMTAtMDggMTY6NDk6MTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZGVzaWduLzogTWFueSBkb2MgdXBkYXRlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWNsb2Nrcy50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtZXZlbnRzLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RiaW4udHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdGVsZW1lbnQudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdHBpcGVsaW5lLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1saXZlLXNvdXJjZS50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtbWVzc2FnZXMudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LW92ZXJ2aWV3LnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1zdGF0ZXMudHh0OgorCSAgTWFueSBkb2MgdXBkYXRlcy4KKworMjAwNS0xMC0wOCAxNjoxMzo1MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGV2ZW50Lio6IEZpeCBldmVudCBxdWFyayByZWdpc3RyYXRpb24uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGV2ZW50LmM6CisJICAqIGdzdC9nc3RldmVudC5oOgorCSAgRml4IGV2ZW50IHF1YXJrIHJlZ2lzdHJhdGlvbi4KKwkgIEFkZCBzb21lIHNwYWNlIGJldHdlZW4gZXZlbnRzIHNvIHdlIGNhbiBpbnNlcnQgdGhlbSBpbiB0aGUKKwkgIHJpZ2h0IGdyb3Vwcy4KKworMjAwNS0xMC0wOCAxNDo1NzowOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogQmV0dGVyIGxvZyBtZXNzYWdlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2hhbmRsZV9vYmplY3QpLAorCSAgKGdzdF9iYXNlX3NpbmtfaGFuZGxlX2J1ZmZlcik6CisJICBCZXR0ZXIgbG9nIG1lc3NhZ2UuCisJICAqIGdzdC9nc3RidXMuaDoKKwkgICogZ3N0L2dzdGVsZW1lbnQuaDoKKwkgIE1vcmUgZG9jcy4KKwkgICogZ3N0L2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfY2xhc3NfaW5pdCksIChnc3RfcXVldWVfaW5pdCksCisJICAoZ3N0X3F1ZXVlX3NldF9wcm9wZXJ0eSksIChnc3RfcXVldWVfZ2V0X3Byb3BlcnR5KToKKwkgICogZ3N0L2dzdHF1ZXVlLmg6CisJICBSZW1vdmUgb2xkIHVudXNlZCBwcm9wZXJ0aWVzLgorCisyMDA1LTEwLTA4IDE0OjQ4OjE3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGxvdHMgb2YgbmV3IGRvY3MgYW5kIGRvYyBmaXhlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3RtZXNzYWdlLmM6CisJICAqIGdzdC9nc3RtZXNzYWdlLmg6CisJICAqIGdzdC9nc3RtaW5pb2JqZWN0LmM6CisJICAqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6CisJICAqIGdzdC9nc3RvYmplY3QuaDoKKwkgICogZ3N0L2dzdHBhZC5oOgorCSAgKiBnc3QvZ3N0dXRpbHMuaDoKKwkgIGxvdHMgb2YgbmV3IGRvY3MgYW5kIGRvYyBmaXhlcworCisyMDA1LTEwLTA4IDE0OjQxOjU2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6CisJICBmaXggYSBsZWFrIEkgaW50cm9kdWNlZAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaXggYSBsZWFrIEkgaW50cm9kdWNlZAorCisyMDA1LTEwLTA4IDEzOjU3OjE3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0LzogT25seSBldmVyIGxvYWQgb25lIHBsdWdpbiBmb3IgYSBnaXZlbiBwbHVnaW4gYmFzZW5hbWUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBsdWdpbi5jOiAoZ3N0X3BsdWdpbl9maW5hbGl6ZSksIChnc3RfcGx1Z2luX2xvYWRfZmlsZSk6CisJICAqIGdzdC9nc3RwbHVnaW4uaDoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6IChnc3RfcmVnaXN0cnlfbG9va3VwX2xvY2tlZCksCisJICAoZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9sZXZlbCk6CisJICAqIGdzdC9nc3RyZWdpc3RyeXhtbC5jOiAobG9hZF9wbHVnaW4pOgorCSAgT25seSBldmVyIGxvYWQgb25lIHBsdWdpbiBmb3IgYSBnaXZlbiBwbHVnaW4gYmFzZW5hbWUuCisJICBUaGlzIGVuc3VyZXMgY29ycmVjdCBvdmVycmlkaW5nIG9mIEdTVF9QTFVHSU5fUEFUSCBvdmVyCisJICBHU1RfUExVR0lOX1NZU1RFTV9QQVRIIGFuZCBvZiBob21lIGRpciBwbHVnaW5zIG92ZXIKKwkgIHN5c3RlbSBpbnN0YWxsZWQgcGx1Z2lucy4KKworMjAwNS0xMC0wOCAxMzozOTowMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogUHJlcGFyZSBmb3IgZG9pbmcgUU9TLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2hhbmRsZV9vYmplY3QpLAorCSAgKGdzdF9iYXNlX3NpbmtfZG9fc3luYyksIChnc3RfYmFzZV9zaW5rX2hhbmRsZV9idWZmZXIpOgorCSAgUHJlcGFyZSBmb3IgZG9pbmcgUU9TLgorCisyMDA1LTEwLTA4IDEzOjEwOjM0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBjaGVjay86IEFsbG93IG5ldyBjbG9jayBtZXNzYWdlIHRvby4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9nc3QvZ3N0YmluLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICAqIGNoZWNrL3BpcGVsaW5lcy9jbGVhbnVwLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICAqIGNoZWNrL3BpcGVsaW5lcy9zaW1wbGVfbGF1bmNoX2xpbmVzLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBBbGxvdyBuZXcgY2xvY2sgbWVzc2FnZSB0b28uCisKKzIwMDUtMTAtMDggMTI6NTY6MzcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RtZXNzYWdlLio6IEFsc28gY2FycnkgdGhlIGNsb2NrIGluIHF1ZXN0aW9uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RtZXNzYWdlLmM6IChnc3RfbWVzc2FnZV9uZXdfZXJyb3IpLAorCSAgKGdzdF9tZXNzYWdlX25ld193YXJuaW5nKSwgKGdzdF9tZXNzYWdlX25ld190YWcpLAorCSAgKGdzdF9tZXNzYWdlX25ld19zdGF0ZV9jaGFuZ2VkKSwgKGdzdF9tZXNzYWdlX25ld19jbG9ja19wcm92aWRlKSwKKwkgIChnc3RfbWVzc2FnZV9uZXdfY2xvY2tfbG9zdCksIChnc3RfbWVzc2FnZV9uZXdfbmV3X2Nsb2NrKSwKKwkgIChnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9zdGFydCksIChnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lKSwKKwkgIChnc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkKSwKKwkgIChnc3RfbWVzc2FnZV9wYXJzZV9jbG9ja19wcm92aWRlKSwgKGdzdF9tZXNzYWdlX3BhcnNlX2Nsb2NrX2xvc3QpLAorCSAgKGdzdF9tZXNzYWdlX3BhcnNlX25ld19jbG9jayk6CisJICAqIGdzdC9nc3RtZXNzYWdlLmg6CisJICBBbHNvIGNhcnJ5IHRoZSBjbG9jayBpbiBxdWVzdGlvbi4KKworMjAwNS0xMC0wOCAxMjozNjozNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdG1lc3NhZ2UuKjogQ2xlYW4gdXAuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKGdzdF9tZXNzYWdlX25ld19jdXN0b20pLAorCSAgKGdzdF9tZXNzYWdlX25ld19lb3MpLCAoZ3N0X21lc3NhZ2VfbmV3X2Vycm9yKSwKKwkgIChnc3RfbWVzc2FnZV9uZXdfd2FybmluZyksIChnc3RfbWVzc2FnZV9uZXdfdGFnKSwKKwkgIChnc3RfbWVzc2FnZV9uZXdfc3RhdGVfY2hhbmdlZCksIChnc3RfbWVzc2FnZV9uZXdfY2xvY2tfcHJvdmlkZSksCisJICAoZ3N0X21lc3NhZ2VfbmV3X25ld19jbG9jayksIChnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9zdGFydCksCisJICAoZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfZG9uZSksIChnc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkKSwKKwkgIChnc3RfbWVzc2FnZV9wYXJzZV9jbG9ja19wcm92aWRlKSwgKGdzdF9tZXNzYWdlX3BhcnNlX25ld19jbG9jayk6CisJICAqIGdzdC9nc3RtZXNzYWdlLmg6CisJICBDbGVhbiB1cC4KKwkgIEFkZGVkIGNsb2NrIHJlbGF0ZWQgbWVzc2FnZXMuCisJICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX2NoYW5nZV9zdGF0ZSk6CisJICBQb3N0IG1lc3NhZ2Ugd2hlbiB0aGUgY2xvY2sgY2hhbmdlZC4KKwkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAoZXZlbnRfbG9vcCk6CisJICBQcmludCBuZXcgY2xvY2suCisKKzIwMDUtMTAtMDggMTE6MTY6MDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHRvb2xzL2dzdC1pbnNwZWN0LmM6IENhbid0IHBhc3MgTlVMTCBzdHJpbmdzIHRvIGdfcHJpbnQoKSBvbiB3aW5kb3dzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1pbnNwZWN0LmM6IChwcmludF9lbGVtZW50X3Byb3BlcnRpZXNfaW5mbyk6CisJICBDYW4ndCBwYXNzIE5VTEwgc3RyaW5ncyB0byBnX3ByaW50KCkgb24gd2luZG93cy4KKworMjAwNS0xMC0wOCAxMToxMjoyNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGRvY3MvOiBhZGQgYSBjaGFwdGVyIG9uIHJ1bm5pbmcgR1N0cmVhbWVyLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvTWFrZWZpbGUuYW06CisJICAqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgorCSAgKiBkb2NzL2dzdC9ydW5uaW5nLnhtbDoKKwkgICogZG9jcy92ZXJzaW9uLmVudGl0aWVzLmluOgorCSAgYWRkIGEgY2hhcHRlciBvbiBydW5uaW5nIEdTdHJlYW1lci4KKwkgIGRvY3VtZW50IEdTVF9ERUJVRyBhbmQgR1NUX1BMVUdJTiogZW52IHZhcnMKKworMjAwNS0xMC0wOCAxMToxMDoxNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIE1ha2VmaWxlLmFtOiByZW1vdmUgaW5jbHVkZSBkaXIKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBNYWtlZmlsZS5hbToKKwkgIHJlbW92ZSBpbmNsdWRlIGRpcgorCSAgKiBjb25maWd1cmUuYWM6CisJICByZW1vdmUgUExVR0lOU19CVUlMRERJUiBzdHVmZgorCSAgKiBnc3QvZ3N0LmM6IChpbml0X3Bvc3QpOgorCSAgcmVvcmRlciBwYXJzaW5nIG9mIEdTVF9QTFVHSU5fUEFUSCBhbmQgR1NUX1BMVUdJTl9TWVNURU1fUEFUSAorCSAgKiBpZGlvdHRlc3QubWFrOgorCSAgcmVtb3ZlLCBpdCB3YXMgY29uZGVzY2VuZGluZyBhbmQgbm90IG5lZWRlZAorCisyMDA1LTEwLTA4IDA5OjU4OjMwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNlc2luay4qOiBSZXBvc3QgRU9TIG1lc3NhZ2Ugd2hpbGUgZ29pbmcgdG8gUExBWUlORyBpZiBzdGlsbCBFT1MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfcHJlcm9sbF9xdWV1ZV9mbHVzaCksCisJICAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwgKGdzdF9iYXNlX3NpbmtfZXZlbnQpLAorCSAgKGdzdF9iYXNlX3Npbmtfd2FpdCksIChnc3RfYmFzZV9zaW5rX2hhbmRsZV9ldmVudCksCisJICAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSAgUmVwb3N0IEVPUyBtZXNzYWdlIHdoaWxlIGdvaW5nIHRvIFBMQVlJTkcgaWYgc3RpbGwgRU9TLgorCSAgTWFrZSBzdXJlIHRoYXQgd2hlbiByZWNlaXZpbmcgYSBGTFVTSF9TVEFSVCB3ZSBkb24ndCBhdHRlbXB0CisJICB0byBzeW5jIG9uIHRoZSBjbG9jayBhbnltb3JlLgorCisyMDA1LTEwLTA4IDA5OjM4OjE5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICB0b29scy9nc3QtbGF1bmNoLmM6IEJldHRlciBtZXNzYWdlIHByaW50b3V0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKGV2ZW50X2xvb3ApOgorCSAgQmV0dGVyIG1lc3NhZ2UgcHJpbnRvdXQuCisKKzIwMDUtMTAtMDggMDk6MjQ6MjUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC86IE1ha2UgQ2hpbGRQcm94eSB0aHJlYWRzYWZlIGFuZCBmaXggbWVtIGxlYWtzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X2luZGV4KSwKKwkgIChnc3RfYmluX2NoaWxkX3Byb3h5X2dldF9jaGlsZHJlbl9jb3VudCk6CisJICAqIGdzdC9nc3RjaGlsZHByb3h5LmM6IChnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X25hbWUpLAorCSAgKGdzdF9jaGlsZF9wcm94eV9sb29rdXApLCAoZ3N0X2NoaWxkX3Byb3h5X2dldF9wcm9wZXJ0eSksCisJICAoZ3N0X2NoaWxkX3Byb3h5X2dldF92YWxpc3QpLCAoZ3N0X2NoaWxkX3Byb3h5X3NldF9wcm9wZXJ0eSksCisJICAoZ3N0X2NoaWxkX3Byb3h5X3NldF92YWxpc3QpOgorCSAgKiBnc3QvcGFyc2UvZ3JhbW1hci55OgorCSAgTWFrZSBDaGlsZFByb3h5IHRocmVhZHNhZmUgYW5kIGZpeCBtZW0gbGVha3MuCisKKzIwMDUtMTAtMDggMDk6MDk6NTUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBnc3QvZ3N0LmM6IGRlYnVnIHRoZSBHU1RfUExVR0lOXyBlbnYgdmFycworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3QuYzogKGluaXRfcG9zdCk6CisJICBkZWJ1ZyB0aGUgR1NUX1BMVUdJTl8gZW52IHZhcnMKKworMjAwNS0xMC0wOCAwODo1ODo0NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgQWRkZWQgZXh0cmEgZmllbGQgdG8gU1RBVEVfQ0hBTkdFIG1lc3NhZ2Ugd2l0aCB0aGUgcGVuZGluZyBzdGF0ZSwgd2hpY2ggd2lsbCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgbmV3IHN0YXRlIHNvb24uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svZ3N0L2dzdGJpbi5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgKiBjaGVjay9nc3QvZ3N0bWVzc2FnZS5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgKiBjaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzogKEdTVF9TVEFSVF9URVNUKSwgKG1lc3NhZ2VfcmVjZWl2ZWQpOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfY29tbWl0X3N0YXRlKSwKKwkgIChnc3RfZWxlbWVudF9sb3N0X3N0YXRlKToKKwkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKGdzdF9tZXNzYWdlX25ld19zdGF0ZV9jaGFuZ2VkKSwKKwkgIChnc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkKToKKwkgICogZ3N0L2dzdG1lc3NhZ2UuaDoKKwkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAoZXZlbnRfbG9vcCk6CisJICBBZGRlZCBleHRyYSBmaWVsZCB0byBTVEFURV9DSEFOR0UgbWVzc2FnZSB3aXRoIHRoZSBwZW5kaW5nCisJICBzdGF0ZSwgd2hpY2ggd2lsbCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgbmV3IHN0YXRlIHNvb24uCisKKzIwMDUtMTAtMDggMDg6MDA6MzcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC86IFNtYWxsIGNsZWFudXBzIGFuZCBkb2MgdXBkYXRlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YnVzLmM6IChnc3RfYnVzX3BvcCk6CisJICAqIGdzdC9nc3RjbG9jay5jOgorCSAgKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzogKGdzdF9zeXN0ZW1fY2xvY2tfYXN5bmNfdGhyZWFkKToKKwkgIFNtYWxsIGNsZWFudXBzIGFuZCBkb2MgdXBkYXRlcy4KKworMjAwNS0xMC0wOCAwNjo0OTowOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGdzdC86IGxvZyBkaXN0cmlidXRpbmcgY2xvY2tzIGFuZCBiYXNlIHRpbWUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0LmM6IChpbml0X3ByZSk6CisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fYWRkX2Z1bmMpOgorCSAgbG9nIGRpc3RyaWJ1dGluZyBjbG9ja3MgYW5kIGJhc2UgdGltZQorCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzogKGdzdF9yZWdpc3RyeV9hZGRfcGx1Z2luKSwKKwkgIChnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2xldmVsKSwgKGdzdF9yZWdpc3RyeV9zY2FuX3BhdGgpOgorCSAgY2xlYW4gdXAgdGhlIGRlYnVnZ2luZyBvdXRwdXQgYSBsaXR0bGUKKwkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSk6CisJICB3YXJuIGFib3V0IGEgbWVtbGVhayAoSSd2ZSBhY3R1YWxseSBzZWVuIHRoaXMgYmUgdXNlZCwgdGhvdWdoCisJICBpdCB3YXMgcHJvYmFibHkgYSBidWcpCisKKzIwMDUtMTAtMDggMDY6NDI6MzAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgYWRkIHR3byBuZXcgZnVuY3Rpb25zCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFkZCB0d28gbmV3IGZ1bmN0aW9ucworCisyMDA1LTEwLTA3IDE4OjE3OjIzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNlc3JjLio6IE1ha2UgdGhlIG5ld3NlZ21lbnQgZXZlbnQgY3VzdG9taXphYmxlIGJ5IHN1YmNsYXNzZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2NsYXNzX2luaXQpLAorCSAgKGdzdF9iYXNlX3NyY19pbml0KSwgKGdzdF9iYXNlX3NyY19kZWZhdWx0X25ld3NlZ21lbnQpLAorCSAgKGdzdF9iYXNlX3NyY19uZXdzZWdtZW50KSwgKGdzdF9iYXNlX3NyY19kb19zZWVrKSwKKwkgIChnc3RfYmFzZV9zcmNfbG9vcCksIChnc3RfYmFzZV9zcmNfc3RhcnQpOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJICBNYWtlIHRoZSBuZXdzZWdtZW50IGV2ZW50IGN1c3RvbWl6YWJsZSBieSBzdWJjbGFzc2VzLgorCisyMDA1LTEwLTA3IDE4OjAyOjE0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0ZXZlbnQuKjogTmV3IGV2ZW50IGZvciBmdXR1cmUgaWRlYS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZXZlbnQuYzogKGdzdF9ldmVudF9uZXdfYnVmZmVyc2l6ZSksCisJICAoZ3N0X2V2ZW50X3BhcnNlX2J1ZmZlcnNpemUpOgorCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKKwkgIE5ldyBldmVudCBmb3IgZnV0dXJlIGlkZWEuCisKKzIwMDUtMTAtMDcgMTY6Mjg6NTYgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdGVsZW1lbnQuYyAoZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKTogRG9jIHVwZGF0ZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMC0wNyAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdGVsZW1lbnQuYyAoZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKTogRG9jIHVwZGF0ZS4KKworMjAwNS0xMC0wNyAxNjoxMzo1MSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBVcGRhdGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTAtMDcgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IFVwZGF0ZS4KKwkgICogZ3N0L2dzdG1lc3NhZ2UuYyAoZ3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9uKTogTWFkZSBpbnRvIGEKKwkgIGZ1bmN0aW9uIGxpa2UgaG9uZXN0IEFQSSBjYWxscy4KKwkgIChnc3RfbWVzc2FnZV9uZXdfZWxlbWVudCk6IE5ldyBtZXNzYWdlIHR5cGUuCisJICAqIGdzdC9nc3RtZXNzYWdlLmggKGVudW0pOiBBZGQgR1NUX01FU1NBR0VfRUxFTUVOVCB0eXBlLgorCisyMDA1LTEwLTA3IDE1OjI1OjQ5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6CisJICBmZHNyYyBkb2VzIG5vdCBidWlsZCBjdXJyZW50bHkgb24gd2luMzIgZHVlIHRvIHNvY2tldHBhaXIKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZmRzcmMgZG9lcyBub3QgYnVpbGQgY3VycmVudGx5IG9uIHdpbjMyIGR1ZSB0byBzb2NrZXRwYWlyCisKKzIwMDUtMTAtMDcgMTU6MjI6MzggKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgY2hlY2svZWxlbWVudHMvZmFrZXNyYy5jICh0ZXN0X25vX3ByZXJvbGwpOiBOZXcgY2hlY2ssIGNoZWNrcyB0aGF0IHNldHRpbmcgYSBsaXZlIGZha2VzcmMgdG8gUEFVU0VEIHJldHVybnMgTk9fUFJFUk9MLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTAtMDcgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGNoZWNrL2VsZW1lbnRzL2Zha2VzcmMuYyAodGVzdF9ub19wcmVyb2xsKTogTmV3IGNoZWNrLCBjaGVja3MKKwkgIHRoYXQgc2V0dGluZyBhIGxpdmUgZmFrZXNyYyB0byBQQVVTRUQgcmV0dXJucyBOT19QUkVST0xMIGJvdGgKKwkgIHRpbWVzLgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmMgKGdzdF9iYXNlX3NyY19jaGFuZ2Vfc3RhdGUpOiBBbGxvdyBhCisJICBOT19QUkVST0xMIGZyb20gZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlIHRvIGZhbGwgdGhyb3VnaC4KKworMjAwNS0xMC0wNyAxNToxMzoyNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHRvb2xzL2dzdC1sYXVuY2guYzoKKwkgIGRvbid0IHVzZSBpZiBub3QgZGVjbGFyZWQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZG9uJ3QgdXNlIGlmIG5vdCBkZWNsYXJlZAorCisyMDA1LTEwLTA3IDEyOjUyOjE1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0Z2hvc3RwYWQuYzogQWN0aXZhdGluZyBhIGdob3N0cGFkIHdpdGggbm8gaW50ZXJuYWwgcGFkIGluIHB1c2ggbW9kZSBpcyBvay4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzogKGdzdF9naG9zdF9wYWRfZ2V0X2ludGVybmFsKSwKKwkgIChnc3RfZ2hvc3RfcGFkX2RvX2FjdGl2YXRlX3B1c2gpOgorCSAgQWN0aXZhdGluZyBhIGdob3N0cGFkIHdpdGggbm8gaW50ZXJuYWwgcGFkIGluIHB1c2ggbW9kZQorCSAgaXMgb2suCisKKzIwMDUtMTAtMDcgMTI6NDU6NDkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBnc3QvZ3N0b2JqZWN0Lmg6IHRoZXJlJ3Mgbm8gcG9pbnQgaW4gd3JhcHBpbmcgRkxBR19TRVQvX1VOU0VUIGluIFNUTVQgbWFjcm9zLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RvYmplY3QuaDoKKwkgIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gd3JhcHBpbmcgRkxBR19TRVQvX1VOU0VUIGluIFNUTVQgbWFjcm9zLgorCSAgRml4ZXMgY29tcGlsYXRpb24gb24gV2luZG93cy4KKworMjAwNS0xMC0wNyAxMDozMjoyNCArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBjb21tb246CisJKiB0b29scy9nc3QtaW5zcGVjdC5jOgorCSAgUHJpbnQgb3V0IGZlYXR1cmUgYW5kIHBsdWdpbiBjb3VudCBhdCB0aGUgZW5kIHdoZW4gcHJpbnRpbmcgb3V0IGFsbCBmZWF0dXJlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUHJpbnQgb3V0IGZlYXR1cmUgYW5kIHBsdWdpbiBjb3VudCBhdCB0aGUgZW5kIHdoZW4gcHJpbnRpbmcgb3V0CisJICBhbGwgZmVhdHVyZXMuCisJICBBbHNvIGFkZCBhIGNoYW5nZWxvZyBlbnRyeSB3aGljaCBJJ2Qgd3JpdHRlbiBidXQgbm90IGNvbW1pdHRlZD8KKworMjAwNS0xMC0wNyAwMDoxNDo0NSArMDAwMCAgSm9oYW4gRGFobGluIDxqb2hhbkBnbm9tZS5vcmc+CisKKwkgIEFkZCBhIEdUeXBlIHRvIEdzdEl0ZXJhdG9yLCB1cGRhdGUgY2FsbHNpdGVzIGFuZCB0ZXN0cy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9nc3QvZ3N0aXRlcmF0b3IuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9pdGVyYXRlX2VsZW1lbnRzKSwKKwkgIChnc3RfYmluX2l0ZXJhdGVfcmVjdXJzZSksIChnc3RfYmluX2l0ZXJhdGVfc29ydGVkKToKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2l0ZXJhdGVfcGFkcyk6CisJICAqIGdzdC9nc3Rmb3JtYXQuYzogKGdzdF9mb3JtYXRfaXRlcmF0ZV9kZWZpbml0aW9ucyk6CisJICAqIGdzdC9nc3RpdGVyYXRvci5jOiAoZ3N0X2l0ZXJhdG9yX2luaXQpLCAoZ3N0X2l0ZXJhdG9yX25ldyksCisJICAoZ3N0X2l0ZXJhdG9yX25ld19saXN0KSwgKGdzdF9pdGVyYXRvcl9maWx0ZXIpOgorCSAgKiBnc3QvZ3N0aXRlcmF0b3IuaDoKKwkgICogZ3N0L2dzdHF1ZXJ5LmM6IChnc3RfcXVlcnlfdHlwZV9pdGVyYXRlX2RlZmluaXRpb25zKToKKwkgIEFkZCBhIEdUeXBlIHRvIEdzdEl0ZXJhdG9yLCB1cGRhdGUgY2FsbHNpdGVzIGFuZCB0ZXN0cy4KKworMjAwNS0xMC0wNiAyMTowOToxMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDoKKwkgIGRvaC4gIHVzZSBjb3JyZWN0IHZhcmlhYmxlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGRvaC4gIHVzZSBjb3JyZWN0IHZhcmlhYmxlCisKKzIwMDUtMTAtMDYgMTc6MDA6NTAgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KKworCSogZ3N0cmVhbWVyLnNwZWMuaW46CisJICB2ZXJzaW9uIGdzdHJlYW1lci10b29scyBwYWNrYWdlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHZlcnNpb24gZ3N0cmVhbWVyLXRvb2xzIHBhY2thZ2UKKworMjAwNS0xMC0wNiAxNDoyMDoxNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGdzdC9nc3RldmVudC5jOgorCSAgaW5pdGlhbGl6ZSBxdWFya3MKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgaW5pdGlhbGl6ZSBxdWFya3MKKworMjAwNS0xMC0wNiAxNDowMTo0NCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGdzdC9nc3RwYWQuYzogZ2l2ZSBldmVudHMgYSBjaGFuY2UgdG8gYmUgaGFuZGxlZCBieSBldmVudCBwcm9iZXMgd2hlbiB0aGUgcGFkIGlzIG5vdCBsaW5rZWQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2V2ZW50X2RlZmF1bHRfZGlzcGF0Y2gpOgorCSAgZ2l2ZSBldmVudHMgYSBjaGFuY2UgdG8gYmUgaGFuZGxlZCBieSBldmVudCBwcm9iZXMgd2hlbiB0aGUgcGFkCisJICBpcyBub3QgbGlua2VkCisKKzIwMDUtMTAtMDYgMTM6NTU6NDMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBnc3QvZ3N0ZXZlbnQuKjogYWRkIHN0cmluZyByZXByZXNlbnRhdGlvbnMgZm9yIGV2ZW50IHR5cGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGV2ZW50LmM6IChnc3RfZXZlbnRfdHlwZV9nZXRfbmFtZSksCisJICAoZ3N0X2V2ZW50X3R5cGVfdG9fcXVhcmspLCAoZ3N0X2V2ZW50X2ZpbmFsaXplKSwgKGdzdF9ldmVudF9uZXcpOgorCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKKwkgIGFkZCBzdHJpbmcgcmVwcmVzZW50YXRpb25zIGZvciBldmVudCB0eXBlcworCisyMDA1LTEwLTA2IDEzOjQyOjU2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2dzdGV2ZW50Lmg6CisJICB3aGl0ZXNwYWNlIGZpeGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHdoaXRlc3BhY2UgZml4ZXMKKworMjAwNS0xMC0wNiAxMzoyNDoyOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IERvbid0IHVzZSBOVUxMIHBvaW50ZXJzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9lbGVtZW50cy9nc3RmaWxlc2luay5jOiAoZ3N0X2ZpbGVfc2lua19jbG9zZV9maWxlKToKKwkgIERvbid0IHVzZSBOVUxMIHBvaW50ZXJzLgorCisyMDA1LTEwLTA2IDA5OjQ5OjQyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0Lzogd2lkZW4gdGhlIGRlYnVnIGNhdGVnb3J5IGluIG91dHB1dCB0byBmaXQgdGhlIGJpZ2dlc3Qgb25lIHdlIGhhdmUgYWRkIGEgYnVzIGNhdGVnb3J5IGFuZCB1c2UgaXQgcGxheSB3aXRoIHRoZSBjLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdF9wcml2YXRlLmg6CisJICAqIGdzdC9nc3RidXMuYzoKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzoKKwkgICogZ3N0L2dzdGluZm8uYzoKKwkgICogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzoKKwkgIHdpZGVuIHRoZSBkZWJ1ZyBjYXRlZ29yeSBpbiBvdXRwdXQgdG8gZml0IHRoZSBiaWdnZXN0IG9uZSB3ZSBoYXZlCisJICBhZGQgYSBidXMgY2F0ZWdvcnkgYW5kIHVzZSBpdAorCSAgcGxheSB3aXRoIHRoZSBjb2xvcnMKKwkgIGZpeCB1cCBzb21lIGNhdGVnb3JpZXMKKworMjAwNS0xMC0wNiAwNzo0Mjo0MSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICBmaXJzdCBzdGFiIGF0IHJlb3JnYW5pemluZyBkb2NzIGZvciBwYWQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZmlyc3Qgc3RhYiBhdCByZW9yZ2FuaXppbmcgZG9jcyBmb3IgcGFkCisKKzIwMDUtMTAtMDYgMDc6MTM6MDEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBnc3QvZ3N0Z2hvc3RwYWQuYzogYWRkIHB1c2ggYWN0aXZhdGlvbiBvZiBzaW5rIGdob3N0IHBhZHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTAtMDYgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisJICAqIGdzdC9nc3RnaG9zdHBhZC5jOiAoZ3N0X2dob3N0X3BhZF9pbnRlcm5hbF9kb19hY3RpdmF0ZV9wdXNoKToKKwkgIGFkZCBwdXNoIGFjdGl2YXRpb24gb2Ygc2luayBnaG9zdCBwYWRzLgorCSAgQW5keWUsIHBsZWFzZSB2ZXJpZnkKKworMjAwNS0xMC0wNSAyMjozNToxNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSogZ3N0L2dzdHBhZC5jOgorCSAgZG9jIHVwZGF0ZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZG9jIHVwZGF0ZXMKKworMjAwNS0xMC0wNSAyMTozNDo0MiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGdzdC9nc3R1dGlscy5jOiBmaXggYSBidWcgaW4gdGhlIGNhc2Ugd2hlcmUgbmVpdGhlciBlbGVtZW50IGhhcyBhIHBhZAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X2VsZW1lbnRfbGlua19wYWRzKToKKwkgIGZpeCBhIGJ1ZyBpbiB0aGUgY2FzZSB3aGVyZSBuZWl0aGVyIGVsZW1lbnQgaGFzIGEgcGFkCisJICAqIGNoZWNrL2dzdC9nc3RlbGVtZW50LmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RfZWxlbWVudF9zdWl0ZSk6CisJICBhZGQgYSB0ZXN0IGZvciB0aGF0IGNhc2UKKworMjAwNS0xMC0wNSAxNzowMTo0NCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGNoZWNrL2dzdC9nc3RwYWQuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKKwkgIHVucmVmIG91ciB0ZXN0IGJ1ZmZlcnMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgdW5yZWYgb3VyIHRlc3QgYnVmZmVycworCisyMDA1LTEwLTA1IDE2OjE2OjU4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0L2dzdHBhZC5jOiBlbWl0IGhhdmUtZGF0YSBiZWZvcmUgY2hlY2tpbmcgZm9yIHBlZXJzLiAgVGhpcyBhbGxvd3MgZm9yIHByb2JlIGhhbmRsZXJzIHRvIGNvbm5lY3QgZWxlbWVudHMuICBUaGlzIGhlLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9wdXNoKSwgKGdzdF9wYWRfcHVzaF9ldmVudCk6CisJICBlbWl0IGhhdmUtZGF0YSBiZWZvcmUgY2hlY2tpbmcgZm9yIHBlZXJzLiAgVGhpcyBhbGxvd3MKKwkgIGZvciBwcm9iZSBoYW5kbGVycyB0byBjb25uZWN0IGVsZW1lbnRzLiAgVGhpcyBoZWxwcyBhdXRvcGx1Z2dlcnMuCisJICAqIGNoZWNrL2dzdC9nc3RwYWQuYzogKEdTVF9TVEFSVF9URVNUKSwgKF9wcm9iZV9oYW5kbGVyKSwKKwkgIChnc3RfcGFkX3N1aXRlKToKKwkgIGFkZCBzaXggY2hlY2tzLCBsaW5rZWQvdW5saW5rZWQgd2l0aCBuby90cnVlL2ZhbHNlIHByb2JlCisKKzIwMDUtMTAtMDUgMTE6NTA6NDkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBnc3QvZ3N0b2JqZWN0LmM6CisJICBpbmRlbnQgaWZkZWZzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGluZGVudCBpZmRlZnMKKworMjAwNS0xMC0wNCAxODo0NjowOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2VsZW1lbnRzLzogUHJvdGVjdCBsYXN0X21lc3NhZ2Ugd2l0aCBsb2NrLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9lbGVtZW50cy9nc3RmYWtlc2luay5jOiAoZ3N0X2Zha2Vfc2lua19nZXRfcHJvcGVydHkpLAorCSAgKGdzdF9mYWtlX3NpbmtfZXZlbnQpLCAoZ3N0X2Zha2Vfc2lua19wcmVyb2xsKSwKKwkgIChnc3RfZmFrZV9zaW5rX3JlbmRlciksIChnc3RfZmFrZV9zaW5rX2NoYW5nZV9zdGF0ZSk6CisJICAqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmM6IChnc3RfZmFrZV9zcmNfZXZlbnRfaGFuZGxlciksCisJICAoZ3N0X2Zha2Vfc3JjX2dldF9wcm9wZXJ0eSksIChnc3RfZmFrZV9zcmNfY3JlYXRlKSwKKwkgIChnc3RfZmFrZV9zcmNfc3RvcCk6CisJICAqIGdzdC9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiAoZ3N0X2lkZW50aXR5X3N0b3ApOgorCSAgUHJvdGVjdCBsYXN0X21lc3NhZ2Ugd2l0aCBsb2NrLgorCisyMDA1LTEwLTA0IDE1OjA0OjUwICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBnc3QvZ3N0Zm9ybWF0Lmg6IEFkZGVkIHByZWNpc2lvbiBpbiB0aGUgY29tbWVudHMgZm9yIEdTVF9GT1JNQVRfREVGQVVMVAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3Rmb3JtYXQuaDoKKwkgIEFkZGVkIHByZWNpc2lvbiBpbiB0aGUgY29tbWVudHMgZm9yIEdTVF9GT1JNQVRfREVGQVVMVAorCisyMDA1LTEwLTA0IDEzOjE5OjQ3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOgorCSAgdXBkYXRlIHVuaW5zdGFsbGVkIHNjcmlwdAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB1cGRhdGUgdW5pbnN0YWxsZWQgc2NyaXB0CisKKzIwMDUtMTAtMDQgMTI6MDI6MzQgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KKworCSogZ3N0cmVhbWVyLnNwZWMuaW46CisJICByZW1vdmUgc29tZSBmaWxlcyB0aGF0IGFyZSBubyBsb25nZXIgdGhlcmUgZnJvbSBzcGVjIGZpbGUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVtb3ZlIHNvbWUgZmlsZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIHRoZXJlIGZyb20gc3BlYyBmaWxlCisKKzIwMDUtMTAtMDQgMTE6NTE6MzcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHRvb2xzL2dzdC1sYXVuY2guYzogRG9uJ3QgdHJ5IHRvIHJ1biBlcnJvbmVvdXMgcGlwZWxpbmVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKG1haW4pOgorCSAgRG9uJ3QgdHJ5IHRvIHJ1biBlcnJvbmVvdXMgcGlwZWxpbmVzLgorCisyMDA1LTEwLTA0IDExOjEwOjA0ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+CisKKwkgIGdzdC9nc3RlcnJvci5jOiBBZGQgYW5vdGhlciBlcnJvciBzdHJpbmcgdXNlZCBpbiBhIGZldyBleGlzdGluZyBwbHVnaW5zLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RlcnJvci5jOiAoX2dzdF9zdHJlYW1fZXJyb3JzX2luaXQpOgorCSAgQWRkIGFub3RoZXIgZXJyb3Igc3RyaW5nIHVzZWQgaW4gYSBmZXcgZXhpc3RpbmcgcGx1Z2lucy4KKwkgICogZ3N0L2dzdHBsdWdpbi5jOgorCSAgKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOiAoZ3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQpOgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAocHJpbnRfZWxlbWVudF9pbmZvKToKKwkgIFdoZW4gYSBmZWF0dXJlIGRpc2FwcGVhcnMgZnJvbSBhIHBsdWdpbiAoYW5kIHRoZSBmZWF0dXJlIGV4aXN0cyBpbgorCSAgdGhlIGNhY2hlZCByZWdpc3RyeSBmaWxlKSwgdGhpbmdzIHdlbnQgaG9ycmlibHkgd3JvbmcuIFRoaXMgaXNuJ3QgYQorCSAgY29tcGxldGUgZml4LCB3ZSBzaG91bGQgYWN0dWFsbHkgYmUgcmVtb3ZpbmcgdGhlICdtaXNzaW5nJyBmZWF0dXJlcworCSAgZnJvbSB0aGUgZmVhdHVyZXMgbGlzdCB3aGVuIHdlIGxvYWQgdGhlIGFjdHVhbCBwbHVnaW4uIFRoYXQncyBub3QKKwkgIHlldCBpbXBsZW1lbnRlZC4KKworMjAwNS0xMC0wNCAxMTowOTo0MSArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+CisKKwkgIGdzdC9nc3RidXMuYzogV2UgZG9uJ3QgbmVlZCB0aGlzIGhlYWRlci4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMC0wNCAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgorCSAgKiBnc3QvZ3N0YnVzLmM6IFdlIGRvbid0IG5lZWQgdGhpcyBoZWFkZXIuCisKKzIwMDUtMTAtMDMgMTc6NTc6MzIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBjb25maWd1cmUuYWM6CisJICBiYWNrIHRvIGhlYWQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYmFjayB0byBoZWFkCisKKz09PSByZWxlYXNlIDAuOS4zID09PQorCisyMDA1LTEwLTAzIDE3OjQ3OjIxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogTkVXUzoKKwkqIFJFQURNRToKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIHBvL2FmLnBvOgorCSogcG8vYXoucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGUucG86CisJKiBwby9lbl9HQi5wbzoKKwkqIHBvL2ZyLnBvOgorCSogcG8vaXQucG86CisJKiBwby9uYi5wbzoKKwkqIHBvL25sLnBvOgorCSogcG8vcnUucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJICByZWxlYXNlIHRpbWUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVsZWFzZSB0aW1lCisKKzIwMDUtMTAtMDIgMjM6MjQ6MjUgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdHBhZC5jIChnc3RfcGFkX2FjdGl2YXRlX3B1c2gpOiBUaGVyZSBpcyBhIHJhY2UgY29uZGl0aW9uIHdoZXJlYnkgY2FsbGluZyBhIHBhZCdzIGFjdGl2YXRlcHVzaCgpIGZ1bmN0aW9uIGNhbiBzLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMTAtMDMgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3RwYWQuYyAoZ3N0X3BhZF9hY3RpdmF0ZV9wdXNoKTogVGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvbgorCSAgd2hlcmVieSBjYWxsaW5nIGEgcGFkJ3MgYWN0aXZhdGVwdXNoKCkgZnVuY3Rpb24gY2FuIHN0YXJ0IGEgdGhyZWFkCisJICB0aGF0IHN0YXJ0cyB0byBwdXNoIG9yIHB1bGwgYmVmb3JlIHRoZSBwYWQgZ2V0cyB0aGUgRkxVU0hJTkcgZmxhZworCSAgdW5zZXQuIEhhY2sgYXJvdW5kIGl0IGJ5IGhvbGRpbmcgdGhlIHN0cmVhbSBsb2NrIHVudGlsIHRoZSBmbGFnIGlzCisJICBzZXQuIE5lZWQgdG8gcmVwbGFjZSB0aGlzIHdpdGggYSBwcm9wZXIgc29sdXRpb24uIFRvZ2V0aGVyIHdpdGgKKwkgIHRoZSBnaG9zdCBwYWQgZml4ZXMsIHRoaXMgZml4ZXMgbXAzIHBsYXlpbmcvdGFncmVhZGluZy4KKworMjAwNS0xMC0wMiAyMzoyMTowNCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJKiBDaGFuZ2VMb2c6CisJICBjaGFuZ2Vsb2cKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgY2hhbmdlbG9nCisKKzIwMDUtMTAtMDIgMjM6MjA6MjYgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1nc3RnaG9zdHBhZC50eHQ6IEFkZCBhIG5vdGUgYWJvdXQgYWN0aXZhdGlvbiBvZiBwcm94eSBwYWRzIG91dHNpZGUgb2YgZ2hvc3QgcGFkcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0xMC0wMyAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RnaG9zdHBhZC50eHQ6IEFkZCBhIG5vdGUgYWJvdXQgYWN0aXZhdGlvbiBvZgorCSAgcHJveHkgcGFkcyBvdXRzaWRlIG9mIGdob3N0IHBhZHMuCisJICAqIGdzdC9nc3RnaG9zdHBhZC5jOiBJbXBsZW1lbnQgdGhlIGdob3N0IHBhZCBhY3RpdmF0aW9uIGRlc2lnbi4KKworMjAwNS0xMC0wMiAxODo1NzowNyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0b2JqZWN0LmggKEdTVF9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUpOiBKdXN0IHVzZSB0aGUgaW50LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTEwLTAyICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvZ3N0b2JqZWN0LmggKEdTVF9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUpOiBKdXN0IHVzZSB0aGUgaW50LgorCSAgSXQgaXMgdm9sYXRpbGUsIGFmdGVyIGFsbC4KKwkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RnaG9zdHBhZC50eHQ6IEZsZXNoIG91dCBhY3RpdmF0aW9uIHdpdGgKKwkgIGdob3N0IHBhZHMuCisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYyAoZ3N0X2Jhc2Vfc3JjX2luaXQpOiBVc2UKKwkgIEdTVF9ERUJVR19GVU5DUFRSLgorCisyMDA1LTEwLTAyIDE4OjMwOjI3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBjb25maWd1cmUuYWM6IEZpeCAodW51c2VkKSBBTV9DT05ESVRJT05BTCB0ZXN0cy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICBGaXggKHVudXNlZCkgQU1fQ09ORElUSU9OQUwgdGVzdHMuCisKKzIwMDUtMTAtMDEgMTc6MTE6MDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3R1dGlscy5jOiBBZGQgYXNzZXJ0aW9uIHRoYXQgbWFrZXMgc3VyZSBzcmNfdmFsIGlzID49MCwganVzdCBsaWtlIGdzdF9xdWVyeV9uZXdfY29udmVydCgpIGhhcy4gKCMzMTU4OTUpCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFJldmlld2VkIGJ5OiBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+CisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X3BhZF9xdWVyeV9jb252ZXJ0KToKKwkgIEFkZCBhc3NlcnRpb24gdGhhdCBtYWtlcyBzdXJlIHNyY192YWwgaXMgPj0wLCBqdXN0IGxpa2UKKwkgIGdzdF9xdWVyeV9uZXdfY29udmVydCgpIGhhcy4gKCMzMTU4OTUpCisKKzIwMDUtMDktMzAgMTU6NDM6MDMgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkgIGdzdC9lbGVtZW50cy9nc3R0ZWUuYzogTGV0J3Mgbm90IGl0ZXJhdGUgcGFkcyB3ZSdyZSBub3QgaW50ZXJlc3RlZCBpbiwgaXQgYXZvaWRzIGdldHRpbmcgc2t5LWhpZ2ggcmVmY291bnRzIG9uIHNpbmtwYWQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2VsZW1lbnRzL2dzdHRlZS5jOiAoZ3N0X3RlZV9kb19wdXNoKSwgKGdzdF90ZWVfaGFuZGxlX2J1ZmZlcik6CisJICBMZXQncyBub3QgaXRlcmF0ZSBwYWRzIHdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluLCBpdCBhdm9pZHMgZ2V0dGluZworCSAgc2t5LWhpZ2ggcmVmY291bnRzIG9uIHNpbmtwYWQuCisKKzIwMDUtMDktMzAgMDg6Mjk6MDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RlbGVtZW50LmM6IFNtYWxsIHR3ZWFrLCBlbGVtZW50IGluIEFTWU5DIHJlbWFpbnMgQVNZTkMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X3NldF9zdGF0ZSksCisJICAoZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlKToKKwkgIFNtYWxsIHR3ZWFrLCBlbGVtZW50IGluIEFTWU5DIHJlbWFpbnMgQVNZTkMuCisKKzIwMDUtMDktMzAgMDg6MDA6MTIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IE9ubHkgZXJyb3IgaXMgYW4gZXJyb3IuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKKwkgIE9ubHkgZXJyb3IgaXMgYW4gZXJyb3IuCisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fY2hhbmdlX3N0YXRlKToKKwkgIEJldHRlciBkZWJ1Z2dpbmcuCisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfYWxsb2NfYnVmZmVyKSwgKGdzdF9wYWRfY2hhaW4pOgorCSAgQWxzbyBjYWxsIHBhZF9ibG9jayBpbiBwYWQgYWxsb2MuCisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X2Zsb3dfZ2V0X25hbWUpOgorCSAgQmV0dGVyIGRlYnVnZ2luZy4KKworMjAwNS0wOS0yOSAyMDoyNjoxMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBGaXggZG9jdW1lbnRhdGlvbiB0eXBvcy4gQWRkIHNvbWUgbW9yZSBkZWJ1ZyBpbmZvLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19jbGFzc19pbml0KSwKKwkgIChnc3RfYmFzZV9zcmNfZ2V0X3JhbmdlKToKKwkgIEZpeCBkb2N1bWVudGF0aW9uIHR5cG9zLiBBZGQgc29tZSBtb3JlIGRlYnVnIGluZm8uCisKKzIwMDUtMDktMjkgMjA6MTY6NDIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBjaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwaXBlbGluZS5jOgorCSAgZGlzYWJsZSByZWZjb3VudCBjaGVja3MgdW50aWwgd2UgdHJhY2sgdGhlIGRhbmdsaW5nIHJlZgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBkaXNhYmxlIHJlZmNvdW50IGNoZWNrcyB1bnRpbCB3ZSB0cmFjayB0aGUgZGFuZ2xpbmcgcmVmCisKKzIwMDUtMDktMjkgMTk6NDU6MjcgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJICBnc3QvZ3N0cGx1Z2luLmM6IE1ha2Ugc29tZSBlcnJvciBtZXNzYWdlcyBtb3JlIGVuZC11c2VyIGZyaWVuZGx5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwbHVnaW4uYzogKGdzdF9wbHVnaW5fbG9hZF9maWxlKTogTWFrZSBzb21lIGVycm9yIG1lc3NhZ2VzCisJICBtb3JlIGVuZC11c2VyIGZyaWVuZGx5LgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAobWFpbik6IENoZWNrIGlmIGNvbW1hbmQtbGluZSBhcmd1bWVudCBpcworCSAgYSBmaWxlIGFuZCBhdHRlbXB0IHRvIGxvYWQgdGhhdCBmaWxlIGFzIGEgcGx1Z2luLgorCisyMDA1LTA5LTI5IDE4OjM3OjQ4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgY2hlY2svOiBmaXggdGVzdHMgZm9yIHRoZSBuZXcgd2FybmluZworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dzdC9nc3RiaW4uYzoKKwkgICogY2hlY2svc3RhdGVzL3NpbmtzLmM6CisJICBmaXggdGVzdHMgZm9yIHRoZSBuZXcgd2FybmluZworCSAgKiBjaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzoKKwkgIGFkZCBhIHRlc3QgZm9yIHBpcGVsaW5lIGFuZCBidXMgaW50ZXJhY3Rpb24KKwkgICogZ3N0L2dzdGVsZW1lbnQuYzoKKwkgIGVsZW1lbnRzIHNob3VsZCBiZSBOVUxMIGlmIHRoZXkgZ2V0IGRpc3Bvc2VkOyBhZGQgYSB3YXJuaW5nIGlmIG5vdAorCisyMDA1LTA5LTI5IDE4OjM1OjM4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0L2dzdG9iamVjdC5jOiBmb3IgMi42IHJlZmNvdW50aW5nLCBtYWtlIGRlYnVnIGxvZyBtb3JlIGNvcnJlY3QgYnkgcHJpbnRpbmcgdGhlIGFjdHVhbCByZWZjb3VudHMgYXQgdGhlIHRpbWUgb2Ygc3dhLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdG9iamVjdC5jOgorCSAgZm9yIDIuNiByZWZjb3VudGluZywgbWFrZSBkZWJ1ZyBsb2cgbW9yZSBjb3JyZWN0IGJ5IHByaW50aW5nCisJICB0aGUgYWN0dWFsIHJlZmNvdW50cyBhdCB0aGUgdGltZSBvZiBzd2FwIChXaW0pCisKKzIwMDUtMDktMjkgMTg6MjU6NTAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBjb21tb246CisJKiBnc3QvZ3N0YmluLmM6CisJKiBnc3QvZ3N0YnVzLmM6CisJKiBnc3QvZ3N0bWVzc2FnZS5jOgorCSAgdXNlIG1lc3NhZ2UgdHlwZSBuYW1lcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB1c2UgbWVzc2FnZSB0eXBlIG5hbWVzCisKKzIwMDUtMDktMjkgMTY6MDY6MTggKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSogQ2hhbmdlTG9nOgorCSAgY2hhbmdlbG9nCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGNoYW5nZWxvZworCisyMDA1LTA5LTI5IDE2OjA0OjMxICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGdzdC9nc3RidXMuYyAoZ3N0X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNoKTogTmV3IGZ1bmN0aW9uLCByZW1vdmVzIHNpZ25hbCB3YXRjaGVzIHByZXZpb3VzbHkgYWRkZWQgdmlhIGdzdF9idXNfYWRkX3NpZy4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTA5LTI5ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvZ3N0YnVzLmMgKGdzdF9idXNfcmVtb3ZlX3NpZ25hbF93YXRjaCk6IE5ldyBmdW5jdGlvbiwKKwkgIHJlbW92ZXMgc2lnbmFsIHdhdGNoZXMgcHJldmlvdXNseSBhZGRlZCB2aWEKKwkgIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaC4KKwkgIChnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2gpOiBEb24ndCByZXR1cm4gdGhlIHNvdXJjZSBpZCwganVzdCBzdG9yZQorCSAgaXQgb24gdGhlIGJ1cyBpZiB0aGVyZSB3YXNuJ3QgYW4gaWQgYWxyZWFkeS4KKwkgICogZ3N0L2dzdGJ1cy5oIChHc3RCdXMpOiBBZGQgYSBjb3VwbGUgbmV3IGZpZWxkcy4gQVBJIGNoYW5nZXMgZm9yCisJICBhZGRfc2lnbmFsX3dhdGNoIGFuZCByZW1vdmVfc2lnbmFsX3dhdGNoLgorCisyMDA1LTA5LTI5IDE1OjM5OjIyICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzogQmV0dGVyIGlmIHdlIGFjdHVhbGx5IGl0ZXJhdGUgdGhlIGxpc3QgOikKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzogKGdzdF9jb250cm9sbGVyX25ld19saXN0KToKKwkgIEJldHRlciBpZiB3ZSBhY3R1YWxseSBpdGVyYXRlIHRoZSBsaXN0IDopCisKKzIwMDUtMDktMjkgMTM6MDc6MzcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGNoZWNrL2dzdC9nc3RiaW4uYzogQ2hhbmdlIGZvciBuZXcgYnVzIEFQSS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9nc3QvZ3N0YmluLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBDaGFuZ2UgZm9yIG5ldyBidXMgQVBJLgorCSAgKiBjaGVjay9nc3QvZ3N0YnVzLmM6IChtZXNzYWdlX2Z1bmNfZW9zKSwgKG1lc3NhZ2VfZnVuY19hcHApLAorCSAgKHNlbmRfbWVzc2FnZXMpLCAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0YnVzX3N1aXRlKToKKwkgIENoYW5nZSBmb3IgbmV3IGJ1cyBzaWduYWwgQVBJLgorCSAgKiBnc3QvZ3N0YnVzLmM6IChnc3RfYnVzX2NsYXNzX2luaXQpLCAoZ3N0X2J1c19oYXZlX3BlbmRpbmcpLAorCSAgKGdzdF9idXNfc291cmNlX3ByZXBhcmUpLCAoZ3N0X2J1c19zb3VyY2VfY2hlY2spLAorCSAgKGdzdF9idXNfY3JlYXRlX3dhdGNoKSwgKGdzdF9idXNfYWRkX3dhdGNoX2Z1bGwpLAorCSAgKGdzdF9idXNfYWRkX3dhdGNoKSwgKGdzdF9idXNfcG9sbCksIChnc3RfYnVzX2FzeW5jX3NpZ25hbF9mdW5jKSwKKwkgIChnc3RfYnVzX3N5bmNfc2lnbmFsX2hhbmRsZXIpLCAoZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoKToKKwkgICogZ3N0L2dzdGJ1cy5oOgorCSAgUmVtb3ZlIHN1cHBvcnQgZm9yIG11bHRpcGxlIEdTb3VyY2VzIG9wZXJhdGluZyBvbiBkaWZmZXJlbnQKKwkgIG1lc3NhZ2UgdHlwZXMgYXMgaXQgaXMgdG9vIGNvbXBsZXggYW5kIHVubmVlZGVkIHdoZW4gdXNpbmcKKwkgIHNpZ25hbHMuCisJICBBZGRlZCBzdXBwb3J0IGZvciByZWNlaXZpbmcgc2lnbmFscyBmcm9tIHRoZSBidXMuCisKKzIwMDUtMDktMjkgMTI6Mzc6MzggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICByZW5hbWUgZmlsdGVyLWNhcHMgdG8gY2FwcyBwcm9wZXJ0eQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvbGlicy90bXBsL2dzdGRhdGFwcm90b2NvbC5zZ21sOgorCSAgKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbDoKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKKwkgICogZ3N0L2dzdHV0aWxzLmM6CisJICByZW5hbWUgZmlsdGVyLWNhcHMgdG8gY2FwcyBwcm9wZXJ0eQorCisyMDA1LTA5LTI5IDEyOjA1OjUxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0dmFsdWUuYzogTW9yZSByb2J1c3QgZnJhY3Rpb24gc3RyaW5nIHBhcnNpbmcuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfZGVzZXJpYWxpemVfZnJhY3Rpb24pOgorCSAgTW9yZSByb2J1c3QgZnJhY3Rpb24gc3RyaW5nIHBhcnNpbmcuCisJICAqIGRvY3MvcHdnL2FwcGVuZGl4LXBvcnRpbmcueG1sOgorCSAgTWVudGlvbiBnc3RfcGFkX3VzZV9leHBsaWNpdF9jYXBzKCkgPT4gZ3N0X3BhZF91c2VfZml4ZWRfY2FwcygpCisKKzIwMDUtMDktMjkgMTA6NTY6NTcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RjYXBzLmM6IFRob3Ugc2hhbHQgbm90IGZyZWUgYSBzdHJ1Y3R1cmUgYW5kIHRoZW4gY29udGludWUgdXNpbmcgaXQgaW4gdGhlIG5leHQgbG9vcCBpdGVyYXRpb24uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGNhcHMuYzogKGdzdF9jYXBzX2RvX3NpbXBsaWZ5KToKKwkgIFRob3Ugc2hhbHQgbm90IGZyZWUgYSBzdHJ1Y3R1cmUgYW5kIHRoZW4gY29udGludWUgdXNpbmcgaXQKKwkgIGluIHRoZSBuZXh0IGxvb3AgaXRlcmF0aW9uLgorCSAgKiBjaGVjay9nc3QvZ3N0Y2Fwcy5jOiAoY2hlY2tfZm91cmNjX2xpc3QpLCAodGVzdF9zaW1wbGlmeSksCisJICAoZ3N0X2NhcHNfc3VpdGUpOgorCSAgQWRkIHRlc3QgY2FzZSBmb3IgY2FwcyBzaW1wbGlmaWNhdGlvbi4KKworMjAwNS0wOS0yOSAwOTo0NDozNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICByZW1vdmUgdHdvIHJlbW92ZWQgZnVuY3Rpb25zCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJlbW92ZSB0d28gcmVtb3ZlZCBmdW5jdGlvbnMKKworMjAwNS0wOS0yOSAwOTo0MjoxNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgY2hlY2svZ3N0L2dzdGJpbi5jOiBPb3BzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dzdC9nc3RiaW4uYzogKEdTVF9TVEFSVF9URVNUKToKKwkgIE9vcHMuCisKKzIwMDUtMDktMjkgMDk6Mzk6MzYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGNoZWNrL2dzdC9nc3RiaW4uYzogQWRkIGJ1cyB0byBiaW4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svZ3N0L2dzdGJpbi5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgQWRkIGJ1cyB0byBiaW4uCisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fY2xhc3NfaW5pdCksIChnc3RfYmluX2luaXQpLAorCSAgKGFkZF90b19xdWV1ZSksIChjbGVhcl9xdWV1ZSksIChyZXNldF9kZWdyZWUpLCAodXBkYXRlX2RlZ3JlZSksCisJICAoZmluZF9lbGVtZW50KSwgKGdzdF9iaW5fc29ydF9pdGVyYXRvcl9uZXh0KSwKKwkgIChnc3RfYmluX3NvcnRfaXRlcmF0b3JfcmVzeW5jKSwgKGdzdF9iaW5fc29ydF9pdGVyYXRvcl9mcmVlKSwKKwkgIChnc3RfYmluX2l0ZXJhdGVfc29ydGVkKSwgKGdzdF9iaW5fZWxlbWVudF9zZXRfc3RhdGUpLAorCSAgKGdzdF9iaW5fY2hhbmdlX3N0YXRlKSwgKGdzdF9iaW5fZGlzcG9zZSk6CisJICBBIGJpbiBkb2VzIG5vdCBoYXZlIGEgYnVzLCBpdCBnZXRzIHRoZSBidXMgZnJvbSB0aGUgcGFyZW50LgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfcmVxdWlyZXNfY2xvY2spLAorCSAgKGdzdF9lbGVtZW50X3Byb3ZpZGVzX2Nsb2NrKSwgKGdzdF9lbGVtZW50X2lzX2luZGV4YWJsZSksCisJICAoZ3N0X2VsZW1lbnRfaXNfbG9ja2VkX3N0YXRlKSwgKGdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZSksCisJICAoZ3N0X2VsZW1lbnRfc2V0X2J1c19mdW5jKToKKwkgIFNtYWxsIGNsZWFudXBzLgorCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9jbGFzc19pbml0KSwKKwkgIChnc3RfcGlwZWxpbmVfaW5pdCksIChnc3RfcGlwZWxpbmVfcHJvdmlkZV9jbG9ja19mdW5jKToKKwkgIFRoZSBwaXBlbGluZSBwcm92aWRlcyBhIGJ1cy4KKworMjAwNS0wOS0yOSAwMjozMjozNyArMDAwMCAgSm9oYW4gRGFobGluIDxqb2hhbkBnbm9tZS5vcmc+CisKKwkgIGdzdC9nc3RtZXNzYWdlLmMgKGdzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQpOiBVc2UgZ3N0X3N0cnVjdHVyZV9nZXRfZW51bSBpbnN0ZWFkIG9mIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RtZXNzYWdlLmMgKGdzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQpOiBVc2UKKwkgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2VudW0gaW5zdGVhZCBvZiBnc3Rfc3RydWN0dXJlX2dldF9pbnQKKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5jIChnc3Rfc3RydWN0dXJlX2dldF9lbnVtKTogSW1wbC4KKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5oIChnc3Rfc3RydWN0dXJlX2dldF9lbnVtKTogQWRkCisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IERpdHRvCisKKzIwMDUtMDktMjkgMDE6NTc6MDAgKzAwMDAgIEpvaGFuIERhaGxpbiA8am9oYW5AZ25vbWUub3JnPgorCisJICBnc3QvZ3N0bWVzc2FnZS5jIChnc3RfbWVzc2FnZV9uZXdfc3RhdGVfY2hhbmdlZCk6IFVzZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RtZXNzYWdlLmMgKGdzdF9tZXNzYWdlX25ld19zdGF0ZV9jaGFuZ2VkKTogVXNlCisJICBHU1RfVFlQRV9TVEFURSBpbnN0ZWFkIG9mIEdfVFlQRV9JTlQsIG1haW5seSBmb3IgbGFuZ3VhZ2UgYmluZGluZ3MKKwkgIHdoaWNoIGRvZXMgaW50cm9zcGVjdGlvbi4KKwkgIFJldmlld2VkIGJ5IENocmlzdGlhbiBTY2hhbGxlcgorCisyMDA1LTA5LTI4IDE4OjE0OjEzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIENoYW5nZUxvZzoKKwkgIGZpeGVkIHVtbGF1dHMgaW4gQ2hhbmdlTG9nIGFnYWluCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGZpeGVkIHVtbGF1dHMgaW4gQ2hhbmdlTG9nIGFnYWluCisKKzIwMDUtMDktMjggMTc6MzA6MTMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0L2dzdGluZm8uYzogZG9uJ3QgZG8gZHVtbXkgZ19zdHJkdXAoKXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0aW5mby5jOiAoZ3N0X2RlYnVnX2xvZ19kZWZhdWx0KToKKwkgIGRvbid0IGRvIGR1bW15IGdfc3RyZHVwKClzCisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgorCSAgKG9uX29iamVjdF9jb250cm9sbGVkX3Byb3BlcnR5X2NoYW5nZWQpLAorCSAgKGdzdF9jb250cm9sbGVkX3Byb3BlcnR5X25ldyksIChnc3RfY29udHJvbGxlcl9uZXdfdmFsaXN0KSwKKwkgIChnc3RfY29udHJvbGxlcl9uZXdfbGlzdCksCisJICAoZ3N0X2NvbnRyb2xsZXJfcmVtb3ZlX3Byb3BlcnRpZXNfdmFsaXN0KSwgKGdzdF9jb250cm9sbGVyX3NldCksCisJICAoZ3N0X2NvbnRyb2xsZXJfZ2V0KSwgKGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzKSwKKwkgIChnc3RfY29udHJvbGxlcl9nZXRfdmFsdWVfYXJyYXkpLCAoX2dzdF9jb250cm9sbGVyX2NsYXNzX2luaXQpLAorCSAgKGdzdF9jb250cm9sbGVyX2dldF90eXBlKToKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmg6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jOgorCSAgKGdzdF9jb250cm9sbGVkX3Byb3BlcnR5X2ZpbmRfdGltZWRfdmFsdWVfbm9kZSk6CisJICBjb252ZXJ0IC8vIHRvIC8qKi8gY29tbWVudHMKKworMjAwNS0wOS0yOCAxNjo0MzoyMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJ1cy4qOiBBZGRlZCBhc3luYy1tZXNzYWdlIGFuZCBzeW5jLW1lc3NhZ2Ugc2lnbmFscyB0byB0aGUgYnVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RidXMuYzogKG1hcnNoYWxfVk9JRF9fTUlOSU9CSkVDVCksIChnc3RfYnVzX2NsYXNzX2luaXQpLAorCSAgKGdzdF9idXNfcG9zdCksIChwb2xsX2Z1bmMpLCAoZ3N0X2J1c19hc3luY19zaWduYWxfZnVuYyksCisJICAoZ3N0X2J1c19zeW5jX3NpZ25hbF9oYW5kbGVyKToKKwkgICogZ3N0L2dzdGJ1cy5oOgorCSAgQWRkZWQgYXN5bmMtbWVzc2FnZSBhbmQgc3luYy1tZXNzYWdlIHNpZ25hbHMgdG8gdGhlIGJ1cy4KKwkgIEFkZGVkIGhlbHBlciBCdXNGdW5jIHRvIGVtaXQgc2lnbmFscyBmb3IgYWxsIHBvc3RlZCBtZXNzYWdlcy4KKwkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKGdzdF9tZXNzYWdlX3R5cGVfZ2V0X25hbWUpLAorCSAgKGdzdF9tZXNzYWdlX3R5cGVfdG9fcXVhcmspLCAoZ3N0X21lc3NhZ2VfZ2V0X3R5cGUpOgorCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgorCSAgUmVnaXN0ZXIgcXVhcmtzIGZvciBtZXNzYWdlIG5hbWVzLgorCisyMDA1LTA5LTI4IDE2OjM5OjI5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGFkZGVkIGFub3RoZXIgY29uc3RydWN0b3IgZm9yIGxhbmd1YWdlIGJpbmRpbmdzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6IChnc3RfY29udHJvbGxlcl9uZXdfdmFsaXN0KSwKKwkgIChnc3RfY29udHJvbGxlcl9uZXdfbGlzdCk6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5oOgorCSAgYWRkZWQgYW5vdGhlciBjb25zdHJ1Y3RvciBmb3IgbGFuZ3VhZ2UgYmluZGluZ3MKKworMjAwNS0wOS0yOCAxNTo0NToyMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGNoZWNrL2dzdC9nc3RwaXBlbGluZS5jOiBhZGQgYW5vdGhlciBjaGVjaworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dzdC9nc3RwaXBlbGluZS5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3BpcGVsaW5lX3N1aXRlKToKKwkgIGFkZCBhbm90aGVyIGNoZWNrCisJICAqIGdzdC9nc3RidXMuYzoKKwkgIGFkZCBzb21lIGRvYworCSAgKiBnc3QvZ3N0aW5mby5jOiAoX2dzdF9kZWJ1Z19pbml0KToKKwkgIHNsaWdodGx5IG1vcmUgcmVhZGFibGUgY29sb3IgZm9yIHJlZmNvdW50IGRlYnVnZ2luZworCisyMDA1LTA5LTI4IDEzOjQxOjI3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YmluLmM6IFNtYWxsIGRvYyBmaXhlcy4gZ2V0X2Nsb2NrIC0+IHByb3ZpZGVfY2xvY2suCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9jbGFzc19pbml0KSwgKGdzdF9iaW5fcHJvdmlkZV9jbG9ja19mdW5jKSwKKwkgIChhZGRfdG9fcXVldWUpLCAoY2xlYXJfcXVldWUpLCAocmVzZXRfZGVncmVlKSwgKHVwZGF0ZV9kZWdyZWUpLAorCSAgKGZpbmRfZWxlbWVudCksIChnc3RfYmluX3NvcnRfaXRlcmF0b3JfbmV4dCksCisJICAoZ3N0X2Jpbl9zb3J0X2l0ZXJhdG9yX3Jlc3luYyksIChnc3RfYmluX3NvcnRfaXRlcmF0b3JfZnJlZSksCisJICAoZ3N0X2Jpbl9pdGVyYXRlX3NvcnRlZCksIChnc3RfYmluX2VsZW1lbnRfc2V0X3N0YXRlKSwKKwkgIChnc3RfYmluX2NoYW5nZV9zdGF0ZSksIChnc3RfYmluX2Rpc3Bvc2UpOgorCSAgU21hbGwgZG9jIGZpeGVzLiBnZXRfY2xvY2sgLT4gcHJvdmlkZV9jbG9jay4KKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2NsYXNzX2luaXQpLAorCSAgKGdzdF9lbGVtZW50X3Byb3ZpZGVzX2Nsb2NrKSwgKGdzdF9lbGVtZW50X3Byb3ZpZGVfY2xvY2spLAorCSAgKGdzdF9lbGVtZW50X2dldF9jbG9jayksIChnc3RfZWxlbWVudF9jb21taXRfc3RhdGUpLAorCSAgKGdzdF9lbGVtZW50X2xvc3Rfc3RhdGUpOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSAgTWFrZSBnZXQvc2V0X2Nsb2NrKCkgc3ltZXRyaWMuIEFkZCBwcm92aWRlX2Nsb2NrIHZtZXRob2Qgc2luY2UKKwkgIHRoYXQgaXMgYWN0dWFsbHkgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMuCisJICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX2NsYXNzX2luaXQpLAorCSAgKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X3BpcGVsaW5lX3Byb3ZpZGVfY2xvY2tfZnVuYyksCisJICAoZ3N0X3BpcGVsaW5lX2dldF9jbG9jayk6CisJICBnZXRfY2xvY2sgLT4gcHJvdmlkZV9jbG9jay4KKworMjAwNS0wOS0yOCAxMzowNToxMiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNlc3JjLmMgKGdzdF9iYXNlX3NyY191bmxvY2spOiBDb21tZW50IGEgYml0IGluIGxpZXUgb2YgcmVhbCBkb2NzLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDktMjggIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYyAoZ3N0X2Jhc2Vfc3JjX3VubG9jayk6IENvbW1lbnQgYSBiaXQgaW4KKwkgIGxpZXUgb2YgcmVhbCBkb2NzLi4uCisJICAqIGdzdC9lbGVtZW50cy9nc3RmZHNyYy5jOiBDbGVhbmVkIHVwIGEgYml0LgorCisyMDA1LTA5LTI4IDEyOjUyOjUxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZWxlbWVudHMvOiBNYWtlIGVsZW1lbnQgZGV0YWlscyBzdGF0aWMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6CisJICAqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmM6CisJICAqIGdzdC9lbGVtZW50cy9nc3RmZHNpbmsuYzoKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGZkc3JjLmM6CisJICAqIGdzdC9lbGVtZW50cy9nc3RmaWxlc2luay5jOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKKwkgICogZ3N0L2VsZW1lbnRzL2dzdHRlZS5jOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6CisJICBNYWtlIGVsZW1lbnQgZGV0YWlscyBzdGF0aWMuCisKKzIwMDUtMDktMjggMTE6MDM6NTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RiaW4uYzogU29tZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAoYWRkX3RvX3F1ZXVlKSwgKGNsZWFyX3F1ZXVlKSwgKHJlc2V0X291dGRlZ3JlZSksCisJICAodXBkYXRlX291dGRlZ3JlZSksIChmaW5kX2VsZW1lbnQpLCAoZ3N0X2Jpbl9zb3J0X2l0ZXJhdG9yX25leHQpLAorCSAgKGdzdF9iaW5fc29ydF9pdGVyYXRvcl9yZXN5bmMpLCAoZ3N0X2Jpbl9zb3J0X2l0ZXJhdG9yX2ZyZWUpLAorCSAgKGdzdF9iaW5faXRlcmF0ZV9zb3J0ZWQpLCAoZ3N0X2Jpbl9lbGVtZW50X3NldF9zdGF0ZSksCisJICAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X2Jpbl9kaXNwb3NlKToKKwkgIFNvbWUgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgorCSAgQ2xlYW4gdXAgZGlzcG9zZSBoYW5kbGVycy4KKwkgICogZ3N0L2dzdG9iamVjdC5jOiAoZ3N0X29iamVjdF9yZWYpLCAoZ3N0X29iamVjdF91bnJlZik6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfZGlzcG9zZSk6CisJICBDbGVhbiB1cCBkaXNwb3NlIGhhbmRsZXIuCisJICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX2NoYW5nZV9zdGF0ZSk6CisJICBSZW1vdmVkIHNwdXJpb3VzIFVOTE9DSy4KKworMjAwNS0wOS0yNyAyMDo0MDozNSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBhZGRlZCB0d28gbmV3IGZ1bmN0aW9ucyB0byB0aGUgZG9jcyBkb2N1bWVudHMgYWxsIHVuZG9jdW1lbnRlZCBHc3RYWFhGbGFncyBjb21wbGV0ZWQgc29tZSBpbmNvbXBsZXRlIGRvY3MKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJICAqIGdzdC9nc3RlbGVtZW50Lmg6CisJICAqIGdzdC9nc3RldmVudC5oOgorCSAgKiBnc3QvZ3N0b2JqZWN0Lmg6CisJICAqIGdzdC9nc3RwYWQuaDoKKwkgICogZ3N0L2dzdHBpcGVsaW5lLmM6CisJICAqIGdzdC9nc3RwaXBlbGluZS5oOgorCSAgKiBnc3QvZ3N0dXRpbHMuaDoKKwkgICogZ3N0L2dzdHhtbC5oOgorCSAgYWRkZWQgdHdvIG5ldyBmdW5jdGlvbnMgdG8gdGhlIGRvY3MKKwkgIGRvY3VtZW50cyBhbGwgdW5kb2N1bWVudGVkIEdzdFhYWEZsYWdzCisJICBjb21wbGV0ZWQgc29tZSBpbmNvbXBsZXRlIGRvY3MKKworMjAwNS0wOS0yNyAxODozMzo0OCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGdzdC86IHJlbW92ZSBub3cgdXNlbGVzcyBhbmQgbGVha3kgcmVzdXJyZWN0aW9uIGNvZGUgaW4gZGlzcG9zZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fZGlzcG9zZSk6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9kaXNwb3NlKToKKwkgIHJlbW92ZSBub3cgdXNlbGVzcyBhbmQgbGVha3kgcmVzdXJyZWN0aW9uIGNvZGUgaW4gZGlzcG9zZQorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfaW5pdCk6CisJICAqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOiAoZ3N0X2VsZW1lbnRfZmFjdG9yeV9jcmVhdGUpOgorCSAgKiBnc3QvZ3N0b2JqZWN0LmM6IChnc3Rfb2JqZWN0X3NldF9wYXJlbnQpOgorCSAgYWRkIHNvbWUgZGVidWdnaW5nCisKKzIwMDUtMDktMjcgMTc6MDA6MTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6IFVwZGF0ZSBUT0RPLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6CisJICBVcGRhdGUgVE9ETy4KKwkgICogZ3N0L2dzdGJpbi5jOiAoYWRkX3RvX3F1ZXVlKSwgKGNsZWFyX3F1ZXVlKSwgKHJlc2V0X291dGRlZ3JlZSksCisJICAodXBkYXRlX291dGRlZ3JlZSksIChmaW5kX2VsZW1lbnQpLCAoZ3N0X2Jpbl9zb3J0X2l0ZXJhdG9yX25leHQpLAorCSAgKGdzdF9iaW5fc29ydF9pdGVyYXRvcl9yZXN5bmMpLCAoZ3N0X2Jpbl9zb3J0X2l0ZXJhdG9yX2ZyZWUpLAorCSAgKGdzdF9iaW5faXRlcmF0ZV9zb3J0ZWQpLCAoZ3N0X2Jpbl9lbGVtZW50X3NldF9zdGF0ZSksCisJICAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGUpOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSAgUmVtb3ZlIGVsZW1lbnQgdmFyaWFibGUsIHdlIGtlZXAgZWxlbWVudCBpbmZvIGluIHRoZSBpdGVyYXRvciBub3cuCisKKzIwMDUtMDktMjcgMTY6MzA6MjYgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOiBGaXggZXJyb3ItY2hlY2tpbmcgcmV0dXJuIHZhbHVlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wOS0yNyAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOiBGaXggZXJyb3ItY2hlY2tpbmcgcmV0dXJuCisJICB2YWx1ZXMuCisKKzIwMDUtMDktMjcgMTY6MTY6MzkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGNoZWNrL2dzdC9nc3RiaW4uYzogRW5hYmxlIGNoZWNrIHRoYXQgd29ya3Mgbm93LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dzdC9nc3RiaW4uYzogKEdTVF9TVEFSVF9URVNUKToKKwkgIEVuYWJsZSBjaGVjayB0aGF0IHdvcmtzIG5vdy4KKwkgICogZ3N0L2dzdGJpbi5jOiAoYWRkX3RvX3F1ZXVlKSwgKGNsZWFyX3F1ZXVlKSwgKHJlc2V0X291dGRlZ3JlZSksCisJICAodXBkYXRlX291dGRlZ3JlZSksIChmaW5kX2VsZW1lbnQpLCAoZ3N0X2Jpbl9zb3J0X2l0ZXJhdG9yX25leHQpLAorCSAgKGdzdF9iaW5fc29ydF9pdGVyYXRvcl9yZXN5bmMpLCAoZ3N0X2Jpbl9zb3J0X2l0ZXJhdG9yX2ZyZWUpLAorCSAgKGdzdF9iaW5faXRlcmF0ZV9zb3J0ZWQpLCAoZ3N0X2Jpbl9lbGVtZW50X3NldF9zdGF0ZSksCisJICAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGUpOgorCSAgKiBnc3QvZ3N0YmluLmg6CisJICBSZWRpZCB0aGUgc3RhdGUgY2hhbmdlIGFsZ29yaXRobSB1c2luZyBhIHRvcG9sb2dpY2FsIHNvcnQgYWxnby4KKwkgIEhhbmRsZXMgYWxsIGNhc2VzIGNvcnJlY3RseS4KKwkgIEV4cG9zZWQgaXRlcmF0b3IgZm9yIHN0YXRlIGNoYW5nZSBvcmRlci4KKwkgICogZ3N0L2dzdGVsZW1lbnQuaDoKKwkgIFRlbXAgc3RvcmFnZSBmb3Igc3RhdGUgY2hhbmdlcy4gTmVlZCB0byBnZXQgcmlkIG9mIHRoaXMgc29vbi4KKworMjAwNS0wOS0yNyAxNTozNzo0MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0LzogTGVhayBmaXhlcywgdGhlIGZvbGQgZnVuY3Rpb25zIG5lZWQgdG8gdW5yZWYgdGhlIHBhc3NlZCBvYmplY3QgYW5kIF9nZXRfcGFyZW50XyooKSByZXR1cm5zIHJlZiB0byBwYXJlbnQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2VsZW1lbnRzL2dzdHRlZS5jOiAoZ3N0X3RlZV9pbml0KSwgKGdzdF90ZWVfZG9fcHVzaCk6CisJICAqIGdzdC9nc3R1dGlscy5jOiAoaW50ZXJzZWN0X2NhcHNfZnVuYyksIChnc3RfcGFkX3Byb3h5X2dldGNhcHMpLAorCSAgKGxpbmtfZm9sZF9mdW5jKSwgKGdzdF9wYWRfcHJveHlfc2V0Y2Fwcyk6CisJICBMZWFrIGZpeGVzLCB0aGUgZm9sZCBmdW5jdGlvbnMgbmVlZCB0byB1bnJlZiB0aGUgcGFzc2VkIG9iamVjdCBhbmQKKwkgIF9nZXRfcGFyZW50XyooKSByZXR1cm5zIHJlZiB0byBwYXJlbnQuCisKKzIwMDUtMDktMjcgMTM6MjU6MTggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGNoZWNrL2dzdC9nc3RidWZmZXIuYzogUGx1ZyBsZWFrIGluIHRlc3QgY2FzZSBhbmQgZml4ICdtYWtlIGNoZWNrLXZhbGdyaW5kJworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dzdC9nc3RidWZmZXIuYzogKHRlc3RfbWFrZV93cml0YWJsZSk6CisJICBQbHVnIGxlYWsgaW4gdGVzdCBjYXNlIGFuZCBmaXggJ21ha2UgY2hlY2stdmFsZ3JpbmQnCisKKzIwMDUtMDktMjcgMTM6MDc6MTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RidWZmZXIuYzogU2V0IFJFQURPTkxZIGZsYWcgb24gc3ViYnVmZmVycywgc28gdGhhdCBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUoKSB3b3JrcyBjb3JyZWN0bHkgaW4gYWxsIGNpcmN1bXN0YS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RidWZmZXIuYzogKGdzdF9zdWJidWZmZXJfaW5pdCk6CisJICBTZXQgUkVBRE9OTFkgZmxhZyBvbiBzdWJidWZmZXJzLCBzbyB0aGF0IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSgpCisJICB3b3JrcyBjb3JyZWN0bHkgaW4gYWxsIGNpcmN1bXN0YW5jZXMgKHdlIGNvdWxkIGhhdmUganVzdCBjb3BpZWQKKwkgIHRoZSBwYXJlbnQgYnVmZmVyJ3MgcmVhZG9ubHkgZmxhZywgYnV0IGNvbmNlcHR1YWxseSBpdCBzZWVtcworCSAgY2xlYW5lciB0byBtYXJrIGFsbCBzdWJidWZmZXJzIGFzIHJlYWQtb25seSkuIChiYXNlZCBvbiBwYXRjaAorCSAgYnkgQWxlc3NhbmRybyBEZWNpbmEsICMzMTQ3MTApLgorCSAgKiBjaGVjay9nc3QvZ3N0YnVmZmVyLmM6IChjcmVhdGVfcmVhZF9vbmx5X2J1ZmZlciksCisJICAodGVzdF9tYWtlX3dyaXRhYmxlKSwgKHRlc3Rfc3ViYnVmZmVyX21ha2Vfd3JpdGFibGUpLAorCSAgKGdzdF90ZXN0X3N1aXRlKToKKwkgIEFkZCBzb21lIHRlc3RzIGZvciBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUoKS4KKworMjAwNS0wOS0yNyAwOTo1NzoyMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJpbi5jOiB1c2UgZ3N0X29iamVjdF9oYXNfYW5jZXN0b3IoKS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChiaW5fZWxlbWVudF9pc19zZW1pX3NpbmspLCAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGUpOgorCSAgdXNlIGdzdF9vYmplY3RfaGFzX2FuY2VzdG9yKCkuCisJICAqIGdzdC9nc3RvYmplY3QuYzogKGdzdF9vYmplY3RfaGFzX2FuY2VzdG9yKToKKwkgICogZ3N0L2dzdG9iamVjdC5oOgorCSAgZ3N0X29iamVjdF9oYXNfYW5jZXN0b3IoKSBjb3BpZWQgZnJvbSBnc3RiaW4uYyBhcyBpdCBpcyBhCisJICB1c2VmdWxsIGZ1bmN0aW9uLgorCSAgKiB0ZXN0cy9pbnN0YW50aWF0ZS9jcmVhdGUuYzogKGNyZWF0ZV9hbGxfZWxlbWVudHMpOgorCSAgKiB0ZXN0cy9sYXQuYzogKGhhbmRvZmZfc3JjKSwgKGhhbmRvZmZfc2luayk6CisJICAqIHRlc3RzL3NjaGVkL3J1bnhtbC5jOiAobWFpbik6CisJICAqIHRlc3RzL3NlZWtpbmcvc2Vla2luZzEuYzogKG1haW4pOgorCSAgKiB0ZXN0cy90aHJlYWRzdGF0ZS90aHJlYWRzdGF0ZTIuYzogKGJ1c19oYW5kbGVyKSwgKHRpbWVvdXRfZnVuYyksCisJICAobWFpbik6CisJICBGaXggY29tcGlsYXRpb24gb2Ygc29tZSB0ZXN0cy4KKworMjAwNS0wOS0yNyAwOToyOTowNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdGVycm9yLmg6IFJlbW92ZSBjb21tZW50LiBHU1RfVFlQRV9HX0VSUk9SIGlzIGhlcmUgdG8gc3RheSwKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZXJyb3IuaDoKKwkgIFJlbW92ZSBjb21tZW50LiBHU1RfVFlQRV9HX0VSUk9SIGlzIGhlcmUgdG8gc3RheSwKKwkgIEdfVFlQRV9FUlJPUiBoYXMgYmVlbiBXT05URklYJ2VkIGJ5IHRoZSBHTGliIGZvbGtzCisJICAoIzMxNjk2MSwgIzMwMDYxMCkuCisKKzIwMDUtMDktMjYgMTg6MjI6MDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGNoZWNrL2dzdC9nc3RiaW4uYzogQWRkZWQgY2hlY2sgdGhhdCBzaG93cyBlcnJvciBpbiBzdGF0ZSBjaGFuZ2Ugb3JkZXIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svZ3N0L2dzdGJpbi5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X2Jpbl9zdWl0ZSk6CisJICBBZGRlZCBjaGVjayB0aGF0IHNob3dzIGVycm9yIGluIHN0YXRlIGNoYW5nZSBvcmRlci4KKworMjAwNS0wOS0yNiAxNzo0NjoyNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJpbi5jOiBNYWtlIHN0YXRlIGNoYW5nZSBmdW5jdGlvbiB1c2UgMyBxdWV1ZXMgYWdhaW4sIHdlIHdlcmUgYWRkaW5nIGVsZW1lbnRzIGluIHRoZSB3cm9uZyBvcmRlci4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2NoYW5nZV9zdGF0ZSk6CisJICBNYWtlIHN0YXRlIGNoYW5nZSBmdW5jdGlvbiB1c2UgMyBxdWV1ZXMgYWdhaW4sIHdlIHdlcmUKKwkgIGFkZGluZyBlbGVtZW50cyBpbiB0aGUgd3Jvbmcgb3JkZXIuCisJICAqIGdzdC9nc3RnaG9zdHBhZC5jOiAoZ3N0X2dob3N0X3BhZF9kb191bmxpbmspOgorCSAgU29tZSBkZWJ1ZyBpbmZvLAorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2Rpc3Bvc2UpOgorCSAgQWRkZWQgc29tZSBkZWJ1ZyBpbmZvIGZpcnN0LgorCisyMDA1LTA5LTI2IDE3OjQwOjM5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBkb2NzL2Rlc2lnbi86IFJlcGxhY2UgYWxsIF9wdWxsX3JlZ2lvbigpIHdpdGggX3B1bGxfcmFuZ2UoKQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL2RyYWZ0LXB1c2gtcHVsbC50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtZXZlbnRzLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1vdmVydmlldy50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtc2NoZWR1bGluZy50eHQ6CisJICBSZXBsYWNlIGFsbCBfcHVsbF9yZWdpb24oKSB3aXRoIF9wdWxsX3JhbmdlKCkKKworMjAwNS0wOS0yNiAxNjoxOToyNyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJKiBnc3QvZ3N0dmFsdWUuYzoKKwkgIHRyeSB0aGUgZm91cnRoCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHRyeSB0aGUgZm91cnRoCisKKzIwMDUtMDktMjYgMTY6MTI6MDcgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSogZ3N0L2dzdHZhbHVlLmM6CisJICBmb28KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZm9vCisKKzIwMDUtMDktMjYgMTY6MDc6NTQgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdHZhbHVlLmMgKF9nc3RfdmFsdWVfaW5pdGlhbGl6ZSk6IEJldHRlciBmYWtlb3V0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTA5LTI2ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvZ3N0dmFsdWUuYyAoX2dzdF92YWx1ZV9pbml0aWFsaXplKTogQmV0dGVyIGZha2VvdXQuCisKKzIwMDUtMDktMjYgMTU6NDk6MjMgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgY2hlY2svZ3N0LWxpYnMvY29udHJvbGxlci5jOiBVcGRhdGUgZm9yIGNvbnRyb2xsZXIgYXBpIGNoYW5nZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wOS0yNiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogY2hlY2svZ3N0LWxpYnMvY29udHJvbGxlci5jOiBVcGRhdGUgZm9yIGNvbnRyb2xsZXIgYXBpIGNoYW5nZS4KKworMjAwNS0wOS0yNiAxNTo0MzozMCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBSZW1vdmUgbWVtY2h1bmsgYmVuY2htYXJrIHN0dWZmLCB0aGlzIGlzIHRha2VuIG92ZXIgYnkgR0xpYiBidWcgMTE4NDM5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTA5LTI2ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBjb25maWd1cmUuYWM6CisJICAqIHRlc3RzL01ha2VmaWxlLmFtOgorCSAgKiB0ZXN0cy9tZW1jaHVuazogUmVtb3ZlIG1lbWNodW5rIGJlbmNobWFyayBzdHVmZiwgdGhpcyBpcyB0YWtlbgorCSAgb3ZlciBieSBHTGliIGJ1ZyAxMTg0MzkuCisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmMgKGdzdF9iYXNlX3Npbmtfd2FpdCk6IEZhY3RvciBvdXQgdGhlIHdhaXQKKwkgIHJvdXRpbmVzIHRvIGEgZnVuY3Rpb24uCisJICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6IEkgYW0gYSBnb29kIHBlcnNvbiB0b2RheS4KKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RoZWxwZXIuYzoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmggKGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzKQorCSAgKGdzdF9vYmplY3Rfc3luY192YWx1ZXMpOiBSZW5hbWVkIGZyb20gc2lua192YWx1ZXMuIFVnaC4KKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RoZWxwZXIuYzogVXBkYXRlIGZvciBfX2dzdF9jb250cm9sbGVyX2tleS4KKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmMgKF9fZ3N0X2NvbnRyb2xsZXJfa2V5KToKKwkgIFJlbmFtZWQgZnJvbSBjb250cm9sbGVyX2tleSwgYXMgaXQgaXMgZXhwb3J0ZWQuCisJICAqIGdzdC9nc3R2YWx1ZS5jIChfZ3N0X3ZhbHVlX2luaXRpYWxpemUpOiBGYWtlIG91dCB0aGUgY29tcGlsZXIuCisKKzIwMDUtMDktMjYgMTU6MDM6NDMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBnc3QvTWFrZWZpbGUuYW06CisJKiBnc3QvZ3N0Lmg6CisJKiBnc3QvZ3N0cGFkLmg6CisJKiBnc3QvZ3N0cGFkdGVtcGxhdGUuaDoKKwkqIGdzdC9nc3RxdWVyeS5jOgorCSogZ3N0L2dzdHF1ZXJ5Lmg6CisJKiBnc3QvZ3N0cXVlcnl1dGlscy5jOgorCSogZ3N0L2dzdHF1ZXJ5dXRpbHMuaDoKKwkgIHJlbW92ZSBxdWVyeXV0aWxzIGhlYWRlcnMgYWZ0ZXIgbW92aW5nIHRoZSB0d28gdXNlZCBmdW5jdGlvbnMgdG8gZ3N0cXVlcnkuICBhbHNvIGZpeGVzIGJ1aWxkIHByb2JsZW0gZm9yIGdzdHNpZGRlYworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICByZW1vdmUgcXVlcnl1dGlscyBoZWFkZXJzIGFmdGVyIG1vdmluZyB0aGUgdHdvIHVzZWQgZnVuY3Rpb25zCisJICB0byBnc3RxdWVyeS4gIGFsc28gZml4ZXMgYnVpbGQgcHJvYmxlbSBmb3IgZ3N0c2lkZGVjCisKKzIwMDUtMDktMjYgMTM6NDA6MjEgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogdG9vbHMvZ3N0LWxhdW5jaC4xLmluOgorCSAgQ29ycmVjdCBzeW50YXggZm9yIGRlYnVnIG9wdGlvbiBpbiBnc3QtbGF1bmNoIG1hbnBhZ2UKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgQ29ycmVjdCBzeW50YXggZm9yIGRlYnVnIG9wdGlvbiBpbiBnc3QtbGF1bmNoIG1hbnBhZ2UKKworMjAwNS0wOS0yNiAxMToyMTo0MiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBTb21lIG1vcmUgZGVidWdnaW5nIGluZm8uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2dldF9yYW5nZSksCisJICAoZ3N0X2Jhc2Vfc3JjX2lzX3NlZWthYmxlKSwgKGdzdF9iYXNlX3NyY19jaGFuZ2Vfc3RhdGUpOgorCSAgU29tZSBtb3JlIGRlYnVnZ2luZyBpbmZvLgorCisyMDA1LTA5LTI1IDE4OjM0OjQ5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGFkZGVkIG1vcmUgZG9jcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKKwkgICogZ3N0L2dzdGluZGV4Lmg6CisJICBhZGRlZCBtb3JlIGRvY3MKKworMjAwNS0wOS0yNSAxMjoxMTozOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBpbmxpbmVkIHRoZSBsYXN0IHR3byBkb2NzIGZpbGVzIHJlbW92ZWQgdGhlIHRtcGwgZGlyZWN0b3J5IGZyb20gY3ZzIChubyBtb3JlIGNvbmZsaWN0cyBoZXJlISkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC8uY3ZzaWdub3JlOgorCSAgKiBkb2NzL2dzdC90bXBsLy5jdnNpZ25vcmU6CisJICAqIGRvY3MvZ3N0L3RtcGwvZ3N0cGlwZWxpbmUuc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9nc3RwbHVnaW4uc2dtbDoKKwkgICogZ3N0L2dzdHBpcGVsaW5lLmM6CisJICAqIGdzdC9nc3RwbHVnaW4uYzoKKwkgICogZ3N0L2dzdHBsdWdpbi5oOgorCSAgaW5saW5lZCB0aGUgbGFzdCB0d28gZG9jcyBmaWxlcworCSAgcmVtb3ZlZCB0aGUgdG1wbCBkaXJlY3RvcnkgZnJvbSBjdnMgKG5vIG1vcmUgY29uZmxpY3RzIGhlcmUhKQorCisyMDA1LTA5LTI1IDExOjE5OjIyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGlubGluZWQgdHdvIG1vcmUgZG9jcyBmYWN0b3JlZCBnc3RwYWR0ZW1wbGF0ZSBvdXQgb2YgZ3N0cGFkCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZG9jcy9nc3QvdG1wbC8uY3ZzaWdub3JlOgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdHBhZC5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdHBhZHRlbXBsYXRlLnNnbWw6CisJICAqIGdzdC9NYWtlZmlsZS5hbToKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9jbGFzc19pbml0KSwgKGdzdF9wYWRfZGlzcG9zZSksCisJICAoZ3N0X3BhZF9maW5hbGl6ZSksIChnc3RfcGFkX3NldF9wYWRfdGVtcGxhdGUpOgorCSAgKiBnc3QvZ3N0cGFkLmg6CisJICAqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOiAoZ3N0X3BhZF90ZW1wbGF0ZV9nZXRfdHlwZSksCisJICAoZ3N0X3BhZF90ZW1wbGF0ZV9jbGFzc19pbml0KSwgKGdzdF9wYWRfdGVtcGxhdGVfaW5pdCksCisJICAoZ3N0X3BhZF90ZW1wbGF0ZV9kaXNwb3NlKSwgKG5hbWVfaXNfdmFsaWQpLAorCSAgKGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCksIChnc3RfcGFkX3RlbXBsYXRlX25ldyksCisJICAoZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHMpLCAoZ3N0X3BhZF90ZW1wbGF0ZV9nZXRfY2FwcyksCisJICAoZ3N0X3BhZF90ZW1wbGF0ZV9wYWRfY3JlYXRlZCk6CisJICAqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5oOgorCSAgaW5saW5lZCB0d28gbW9yZSBkb2NzCisJICBmYWN0b3JlZCBnc3RwYWR0ZW1wbGF0ZSBvdXQgb2YgZ3N0cGFkCisKKzIwMDUtMDktMjQgMTQ6MzU6MDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGNoZWNrL2dzdC9nc3RiaW4uYzogRml4IHRlc3QgY2FzZTogd2UgY2FuJ3QgcmVseSBvbiBhIGZpeGVkIHN0YXRlIGNoYW5nZSBvcmRlciB3aGVuIGdvaW5nIGZyb20gUkVBRFkgPT4gUEFVU0VEIGJlY2F1cy4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dzdC9nc3RiaW4uYzogKHRlc3RfY2hpbGRyZW5fc3RhdGVfY2hhbmdlX29yZGVyX2ZsYWdnZWRfc2luayksCisJICAodGVzdF9jaGlsZHJlbl9zdGF0ZV9jaGFuZ2Vfb3JkZXJfc2VtaV9zaW5rKToKKwkgIEZpeCB0ZXN0IGNhc2U6IHdlIGNhbid0IHJlbHkgb24gYSBmaXhlZCBzdGF0ZSBjaGFuZ2Ugb3JkZXIgd2hlbgorCSAgZ29pbmcgZnJvbSBSRUFEWSA9PiBQQVVTRUQgYmVjYXVzZSB0aGUgc2luayBtaWdodCBjb21taXQgaXRzCisJICBuZXcgc3RhdGUgZmlyc3Qgd2hlbiB0aGUgZmlyc3QgYnVmZmVyIGNyZWF0ZWQgYnkgdGhlIHNvdXJjZQorCSAgcmVhY2hlcyB0aGUgc2luayBiZWZvcmUgdGhlIHNvdXJjZSBoYXMgZmluaXNoZWQgaXRzIGNoYW5nZSBzdGF0ZS4KKwkgIChUZXN0IGNhc2Ugc3RpbGwgZmFpbHMgYXQgdGltZXMsIHNlZSAjMzE2ODU2LCBjb21tZW50IDUgb253YXJkcykKKworMjAwNS0wOS0yNCAxNDoxNDowMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgVmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1ldmVudHMudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdGJ1cy50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtZ3N0cGlwZWxpbmUudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LW1lc3NhZ2VzLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1vdmVydmlldy50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtc2VnbWVudHMudHh0OgorCSAgKiBnc3QvZ3N0YmluLmM6CisJICAqIGdzdC9nc3RidWZmZXIuYzoKKwkgICogZ3N0L2dzdGNsb2NrLmM6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6CisJICAqIGdzdC9nc3RldmVudC5jOgorCSAgKiBnc3QvZ3N0ZmlsdGVyLmM6CisJICAqIGdzdC9nc3RpdGVyYXRvci5jOgorCSAgVmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisKKzIwMDUtMDktMjQgMTE6NDE6MDEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBnc3QvZ3N0Y2xvY2suaDogV2VsbCwgdGhhdCdzIGVtYmFyYXNzaW5nLiAgTHVja2lseSB3ZSB3ZXJlbid0IHVzaW5nCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGNsb2NrLmg6CisJICBXZWxsLCB0aGF0J3MgZW1iYXJhc3NpbmcuICBMdWNraWx5IHdlIHdlcmVuJ3QgdXNpbmcKKwkgIEdTVF9DTE9DS19ESUZGIGFueXdoZXJlLgorCisyMDA1LTA5LTIzIDE4OjA4OjU5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgY29tbW9uL2d0ay1kb2MubWFrOiBkb24ndCBmYWlsIG9uIGJ1aWxkaW5nIFhNTCwgRkM0IHNsYXZlIHNob3dzIGEgYnVuY2ggb2YgZG9jIG1pc3NpbmcgYml0cyB0aGF0IEkgZG9uJ3QgZ2V0CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29tbW9uL2d0ay1kb2MubWFrOgorCSAgZG9uJ3QgZmFpbCBvbiBidWlsZGluZyBYTUwsIEZDNCBzbGF2ZSBzaG93cyBhIGJ1bmNoIG9mIGRvYworCSAgbWlzc2luZyBiaXRzIHRoYXQgSSBkb24ndCBnZXQKKwkgICogZ3N0L2dzdHBhZC5jOgorCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzoKKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSAgc29tZSBkb2MgdXBkYXRlcworCisyMDA1LTA5LTIzIDE4OjAyOjE4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBBZGQgYmx1cmIgYWJvdXQgaG93IHRoZSBidXMgZ29lcyBpbnRvIGZsdXNoaW5nIG1vZGUgYW5kIGRyb3BzIGFsbCBtZXNzYWdlcyB3aGVuIGl0cyBiaW4gZ29lcyBmcm9tIFJFQURZIGludG8gTlVMTCBzdGF0ZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdGJpbi50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtZ3N0YnVzLnR4dDoKKwkgICogZ3N0L2dzdGJ1cy5jOgorCSAgQWRkIGJsdXJiIGFib3V0IGhvdyB0aGUgYnVzIGdvZXMgaW50byBmbHVzaGluZyBtb2RlIGFuZAorCSAgZHJvcHMgYWxsIG1lc3NhZ2VzIHdoZW4gaXRzIGJpbiBnb2VzIGZyb20gUkVBRFkgaW50byBOVUxMCisJICBzdGF0ZS4KKworMjAwNS0wOS0yMyAxNzo0NjowNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGFkZCBhIG1ldGhvZCB0byBnZXQgYSBHc3RDbG9ja1RpbWUgb3V0IG9mIGEgc3RydWN0dXJlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOiAoZ3N0X3N0cnVjdHVyZV9nZXRfY2xvY2tfdGltZSk6CisJICAqIGdzdC9nc3RzdHJ1Y3R1cmUuaDoKKwkgIGFkZCBhIG1ldGhvZCB0byBnZXQgYSBHc3RDbG9ja1RpbWUgb3V0IG9mIGEgc3RydWN0dXJlCisKKzIwMDUtMDktMjMgMTc6MTc6NDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGNoZWNrL2dzdC9nc3RiaW4uYzogQWRkZWQgdGVzdCB0byBjaGVjayBzdGF0ZSBjaGFuZ2Ugb3JkZXIgaW4gYmlucyAoY2FuIHN0aWxsIGJlIG1hZGUgdG8gZmFpbCBoZXJlIHVuZGVyIGhlYXZ5IGRpc2sgbC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dzdC9nc3RiaW4uYzogKHRlc3RfY2hpbGRyZW5fc3RhdGVfY2hhbmdlX29yZGVyX2ZsYWdnZWRfc2luayksCisJICAodGVzdF9jaGlsZHJlbl9zdGF0ZV9jaGFuZ2Vfb3JkZXJfc2VtaV9zaW5rKSwgKGdzdF9iaW5fc3VpdGUpOgorCSAgQWRkZWQgdGVzdCB0byBjaGVjayBzdGF0ZSBjaGFuZ2Ugb3JkZXIgaW4gYmlucyAoY2FuIHN0aWxsIGJlIG1hZGUKKwkgIHRvIGZhaWwgaGVyZSB1bmRlciBoZWF2eSBkaXNrIGxvYWQ7IGJhaWxzIG91dCB3aXRoICdQdXNoIG9uIHBhZAorCSAgZmFrZXNpbms6c2luazAsIGJ1dCBpdCB3YXMgbm90IGFjdGl2YXRlZCBpbiBwdXNoIG1vZGUnKS4KKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9jbGFzc19pbml0KSwgKGdzdF9iaW5fY2hhbmdlX3N0YXRlKToKKwkgIEZpeCBzdGF0ZSBjaGFuZ2Ugb3JkZXIgd2hlbiB0aGVyZSBpcyBvbmx5IGEgc2VtaSBzaW5rICgjMzE2ODU2KQorCSAgKiBnc3QvZ3N0YnVzLmM6IChnc3RfYnVzX2NsYXNzX2luaXQpOgorCSAgVXNlIF9jbGFzc19wZWVrX3BhcmVudCgpLCBub3QgX2NsYXNzX3JlZigpOyBmaXggZG9jcyB0byBzYXkKKwkgICdkZWZhdWx0IG1haW4gY29udGV4dCcgaW5zdGVhZCBvZiAnbWFpbmxvb3AnIHdoZXJlIHRoYXQgaXMKKwkgIHdoYXQncyBtZWFudC4KKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2NvbW1pdF9zdGF0ZSksCisJICAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKToKKwkgIEZpeCB0eXBvcyBpbiBkZWJ1ZyBtZXNzYWdlcworCisyMDA1LTA5LTIzIDE2OjM1OjQzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogY29tbW9uOgorCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJKiBnc3QvZ3N0Y2xvY2suaDoKKwkqIGdzdC9nc3RlbGVtZW50Lmg6CisJKiBnc3QvZ3N0aW5mby5oOgorCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSogZ3N0L2dzdHN0cnVjdHVyZS5oOgorCSogZ3N0L2dzdHZhbHVlLmM6CisJICBmaXggZG9jcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaXggZG9jcworCisyMDA1LTA5LTIzIDE1OjQ4OjE0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzoKKwkgIGRvbid0IGJyZWFrIGRvY3MgYnVpbGQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZG9uJ3QgYnJlYWsgZG9jcyBidWlsZAorCisyMDA1LTA5LTIzIDE1OjM2OjI4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgdmFyaW91cyBkb2MgdXBkYXRlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvUkVBRE1FOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2NsYXNzX2luaXQpLCAoZ3N0X3BhZF9jaGFpbik6CisJICAqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6CisJICAqIGdzdC9nc3R1dGlscy5jOgorCSAgdmFyaW91cyBkb2MgdXBkYXRlcworCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KToKKwkgIGNoYW5nZSBhbiBhc3NlcnQgaW50byBhbiBlcnJvciB1bnRpbCBpdCBnZXRzIGZpeGVkIHByb3Blcmx5CisKKzIwMDUtMDktMjMgMTQ6MzE6MjEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgaW5saW5lZCAzIG1vcmUgYmlpaWlnIGRvYyBmaWxlcyBhbmQgYWRkZWQgc29tZSBtaXNzaW5nIGRvY3Mgb24gdGhlIGZseQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGRvY3MvZ3N0L3RtcGwvLmN2c2lnbm9yZToKKwkgICogZG9jcy9nc3QvdG1wbC9nc3RlbGVtZW50LnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvZ3N0aW5mby5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdG9iamVjdC5zZ21sOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSAgKiBnc3QvZ3N0aW5mby5jOgorCSAgKiBnc3QvZ3N0aW5mby5oOgorCSAgKiBnc3QvZ3N0b2JqZWN0LmM6IChnc3Rfb2JqZWN0X2NsYXNzX2luaXQpOgorCSAgKiBnc3QvZ3N0b2JqZWN0Lmg6CisJICBpbmxpbmVkIDMgbW9yZSBiaWlpaWcgZG9jIGZpbGVzIGFuZCBhZGRlZCBzb21lIG1pc3NpbmcgZG9jcyBvbiB0aGUgZmx5CisKKzIwMDUtMDktMjMgMTE6NDE6MzAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBwdXQgYmFjayBzb3VyY2UgaW4gcmVnaXN0cnkuICBhZGQgY2hlY2tzIGZvciBmaW5kX3BsdWdpbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9nc3QvLmN2c2lnbm9yZToKKwkgICogY2hlY2svZ3N0L2dzdHBsdWdpbi5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3BsdWdpbl9zdWl0ZSk6CisJICAqIGdzdC9nc3RyZWdpc3RyeXhtbC5jOiAobG9hZF9wbHVnaW4pLAorCSAgKGdzdF9yZWdpc3RyeV94bWxfc2F2ZV9wbHVnaW4pOgorCSAgcHV0IGJhY2sgc291cmNlIGluIHJlZ2lzdHJ5LiAgYWRkIGNoZWNrcyBmb3IgZmluZF9wbHVnaW4uCisJICAqIHRlc3RzdWl0ZS9zdGF0ZXMvYmluLmM6IChhc3NlcnRfc3RhdGUpLCAoZW1wdHlfYmluKSwKKwkgICh0ZXN0X2FkZGluZ19vbmVfZWxlbWVudCksIChtYWluKToKKwkgICogdGVzdHN1aXRlL3N0YXRlcy9sb2NrZWQuYzogKG1haW4pOgorCSAgc29tZSBjb21waWxlL3J1biBmaXhlcworCisyMDA1LTA5LTIyIDIwOjAyOjExICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogY2hlY2svZ3N0L2dzdHZhbHVlLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKKwkgIGZpeCBsZWFrIGluIHRoZSB0ZXN0IGl0c2VsZgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaXggbGVhayBpbiB0aGUgdGVzdCBpdHNlbGYKKworMjAwNS0wOS0yMiAxODowNzoyMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogUHJlcGFyZSBmb3IgbW9yZSBhY2N1cmF0ZSBwb3NpdGlvbiByZXBvcnRpbmcgYW5kIHF1ZXJ5IGhhbmRsaW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NsYXNzX2luaXQpLAorCSAgKGdzdF9iYXNlX3Npbmtfc2VuZF9ldmVudCksIChnc3RfYmFzZV9zaW5rX3BlZXJfcXVlcnkpLAorCSAgKGdzdF9iYXNlX3NpbmtfcXVlcnkpOgorCSAgUHJlcGFyZSBmb3IgbW9yZSBhY2N1cmF0ZSBwb3NpdGlvbiByZXBvcnRpbmcgYW5kIHF1ZXJ5CisJICBoYW5kbGluZy4KKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X3NlbmRfZXZlbnQpLAorCSAgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSk6CisJICBBZGQgc29tZSBjb21tZW50LgorCisyMDA1LTA5LTIyIDE3OjQwOjQyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0cXVlcnkuKjogTW9yZSBkb2N1bWVudGF0aW9uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RxdWVyeS5jOiAoZ3N0X3F1ZXJ5X25ld19zZWdtZW50KSwgKGdzdF9xdWVyeV9zZXRfc2VnbWVudCksCisJICAoZ3N0X3F1ZXJ5X3BhcnNlX3NlZ21lbnQpOgorCSAgKiBnc3QvZ3N0cXVlcnkuaDoKKwkgIE1vcmUgZG9jdW1lbnRhdGlvbi4KKwkgIEFkZCBzZWdtZW50IHF1ZXJ5IGZvciBmdXR1cmUgdXNlLgorCisyMDA1LTA5LTIyIDE2OjUxOjI3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YmluLmM6IFNvbWUgbW9yZSBkZWJ1ZyBpbmZvLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fYWRkX2Z1bmMpOgorCSAgU29tZSBtb3JlIGRlYnVnIGluZm8uCisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9zZW5kX2V2ZW50KToKKwkgIFNpbXBsaWZ5IHNlbmRfZXZlbnQKKwkgICogZ3N0L2dzdGVsZW1lbnQuaDoKKwkgIERvbid0IGtub3cgaG93IGZsYWdzIGdvdCBicm9rZW4uCisJICAqIGdzdC9nc3RxdWVyeS5oOgorCSAgQWRkZWQgbmV3IHF1ZXJ5LgorCisyMDA1LTA5LTIyIDE1OjM4OjEyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBjaGVjay9nc3QvZ3N0dmFsdWUuYzogQWRkIHNpbXBsaXN0aWMgdGVzdCBzdWl0ZSBmb3IgR1NUX1RZUEVfREFURSBzZXJpYWxpc2F0aW9uIGFuZCBkZXNlcmlhbGlzYXRpb24uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svZ3N0L2dzdHZhbHVlLmM6ICh0ZXN0X2RhdGUpLCAoZ3N0X3ZhbHVlX3N1aXRlKToKKwkgIEFkZCBzaW1wbGlzdGljIHRlc3Qgc3VpdGUgZm9yIEdTVF9UWVBFX0RBVEUgc2VyaWFsaXNhdGlvbiBhbmQKKwkgIGRlc2VyaWFsaXNhdGlvbi4KKworMjAwNS0wOS0yMiAxNTowODowMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgQWRkIEdTVF9UWVBFX0RBVEUsIGEgYm94ZWQgdHlwZSB0aGF0IHdyYXBzIEdEYXRlLCBhbmQgdGhlIHVzdWFsIGJ1bmNoIG9mIHV0aWxpdHkgZnVuY3Rpb25zIGFsb25nIHdpdGggYSBoYWNrIHRoYXQgY2hlLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOiAoZ3N0X3N0cnVjdHVyZV9zZXRfdmFsaXN0KSwKKwkgIChnc3Rfc3RydWN0dXJlX2dldF9kYXRlKToKKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5oOgorCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF92YWx1ZV9zZXRfZGF0ZSksIChnc3RfdmFsdWVfZ2V0X2RhdGUpLAorCSAgKGdzdF9kYXRlX2NvcHkpLCAoZ3N0X3ZhbHVlX2NvbXBhcmVfZGF0ZSksCisJICAoZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9kYXRlKSwgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9kYXRlKSwKKwkgIChnc3RfdmFsdWVfdHJhbnNmb3JtX2RhdGVfc3RyaW5nKSwKKwkgIChnc3RfdmFsdWVfdHJhbnNmb3JtX3N0cmluZ19kYXRlKSwgKF9nc3RfdmFsdWVfaW5pdGlhbGl6ZSk6CisJICAqIGdzdC9nc3R2YWx1ZS5oOgorCSAgQWRkIEdTVF9UWVBFX0RBVEUsIGEgYm94ZWQgdHlwZSB0aGF0IHdyYXBzIEdEYXRlLCBhbmQgdGhlIHVzdWFsCisJICBidW5jaCBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBhbG9uZyB3aXRoIGEgaGFjayB0aGF0IGNoZWNrcyB0aGF0CisJICBkZXZlbG9wZXJzIGRvbid0IGFjY2lkZW50YWxseSB1c2UgR19UWVBFX0RBVEUgd2hlcmUgR1NUX1RZUEVfREFURQorCSAgaXMgcmVxdWlyZWQuIFBhcnQgb2YgdGhlIGdyYW5kIHNjaGVtZSBpbiAjMTcwNzc3LgorCisyMDA1LTA5LTIyIDEyOjA1OjA1ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGdzdC9nc3Rjb25maWcuaC5pbjogUHN5Y2ggb3V0IGd0ay1kb2MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDktMjIgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3Rjb25maWcuaC5pbjogUHN5Y2ggb3V0IGd0ay1kb2MuCisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IEFkZCBHU1RfSEFWRV9HTElCXzJfOC4KKwkgICogY2hlY2svTWFrZWZpbGUuYW0gKGNoZWNrX1BST0dSQU1TKTogQWRkIGdzdHBsdWdpbiB0byB0aGUgdGVzdHMuCisJICAqIHRvb2xzL2dzdC1pbnNwZWN0LmMgKHByaW50X2VsZW1lbnRfbGlzdCk6IFBsdWcgc29tZQorCSAgaW5jb25zZXF1ZW50aWFsIGxlYWtzLgorCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYyAoZ3N0X3JlZ2lzdHJ5X2dldF9kZWZhdWx0KTogRG9jLgorCSAgKiBnc3QvZ3N0dHlwZWZpbmRmYWN0b3J5LmMgKGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9jYWxsX2Z1bmN0aW9uKToKKwkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmMgKGdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlKToKKwkgICogZ3N0L2dzdGluZGV4ZmFjdG9yeS5jIChnc3RfaW5kZXhfZmFjdG9yeV9jcmVhdGUpOiBVcGRhdGUgZm9yCisJICByZWZjb3VudCBjaGFuZ2VzLgorCSAgKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jIChnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlKTogRG9jLgorCSAgKGdzdF9wbHVnaW5fZmVhdHVyZV9sb2FkKTogRG9jLCBkb24ndCBlYXQgcmVmcy4KKwkgICogZ3N0L2dzdHBsdWdpbi5jIChnc3RfcGx1Z2luX2xvYWQpOiBEb2MsIGRvbid0IGVhdCByZWZzLgorCSAgKGdzdF9wbHVnaW5fbGlzdF9mcmVlKTogRG9jLgorCSAgKGdzdF9wbHVnaW5fbG9hZF9maWxlKTogRG9jIHVwZGF0ZXMuCisKKzIwMDUtMDktMjIgMDk6MzA6NDEgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdGJ1ZmZlci5jIChnc3RfYnVmZmVyX2dldF9jYXBzKTogTGlrZSBhbGwgb3VyIF9nZXQgYWNjZXNzb3JzIHJldHVybmluZyByZWZjb3VudGVkIG9iamVjdHMsIHJldHVybiBhIHJlZi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wOS0yMiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdGJ1ZmZlci5jIChnc3RfYnVmZmVyX2dldF9jYXBzKTogTGlrZSBhbGwgb3VyIF9nZXQKKwkgIGFjY2Vzc29ycyByZXR1cm5pbmcgcmVmY291bnRlZCBvYmplY3RzLCByZXR1cm4gYSByZWYuCisJICAqIGNoZWNrL2dzdC9nc3RidWZmZXIuYyAoR1NUX1NUQVJUX1RFU1QpOiBVc2UgcmVmY291bnQtaWRlbXBvdGVudAorCSAgYWNjZXNzb3IgZm9yIGNhcHMuIElERU1QT1RFTkNFLiBPaCB5ZXMuCisKKzIwMDUtMDktMjEgMjE6Mzk6MDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9nc3RpbmZvLmM6IEFkZCBtdXRleCB0byBzZXJpYWxpc2UgYWNjZXNzIHRvIHRoZSBoYXNoIHRhYmxlIHdpdGggdGhlIGZ1bmN0aW9uIHBvaW50ZXIgPT4gZnVuY3Rpb24gbmFtZSBzdHJpbmcgbWFwcC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBSZXZpZXdlZCBieTogVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgorCSAgKiBnc3QvZ3N0aW5mby5jOiAoX2dzdF9kZWJ1Z19uYW1lb2ZfZnVuY3B0ciksCisJICAoX2dzdF9kZWJ1Z19yZWdpc3Rlcl9mdW5jcHRyKToKKwkgIEFkZCBtdXRleCB0byBzZXJpYWxpc2UgYWNjZXNzIHRvIHRoZSBoYXNoIHRhYmxlIHdpdGgKKwkgIHRoZSBmdW5jdGlvbiBwb2ludGVyID0+IGZ1bmN0aW9uIG5hbWUgc3RyaW5nIG1hcHBpbmc7CisJICBtYWtlIHRoYXQgaGFzaCB0YWJsZSBzdGF0aWMgc2NvcGUgKCMzMTY4MDkpLgorCSAgKiBnc3QvcmVnaXN0cmllcy8uY3ZzaWdub3JlOgorCSAgUmVtb3ZlIGxlZnQtb3ZlciBmaWxlLgorCisyMDA1LTA5LTIxIDE1OjU1OjEyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBkb2NzL3B3Zy9hcHBlbmRpeC1wb3J0aW5nLnhtbDogQW5kIHNvbWV0aGluZyBhYm91dCBuZXdzZWdtZW50IGV2ZW50cyBhbmQgY2Fwcy1vbi1idWZmZXJzIHRvIHRoZSBwb3J0aW5nIGd1aWRlIChmZWVsIGYuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL3B3Zy9hcHBlbmRpeC1wb3J0aW5nLnhtbDoKKwkgIEFuZCBzb21ldGhpbmcgYWJvdXQgbmV3c2VnbWVudCBldmVudHMgYW5kIGNhcHMtb24tYnVmZmVycyB0bworCSAgdGhlIHBvcnRpbmcgZ3VpZGUgKGZlZWwgZnJlZSB0byBpbXByb3ZlKS4KKworMjAwNS0wOS0yMSAxMzoyNDozMyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJKiBDaGFuZ2VMb2c6CisJKiBjaGVjay9nc3QvZ3N0dXRpbHMuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jOgorCSAgVGVzdCB0aGF0IHJlbW92aW5nIHByb2JlcyBmcm9tIHdpdGhpbiB0aGUgcHJvYmUgZnVuY3Rpb25zIHdvcmtzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAodGVzdF9idWZmZXJfcHJvYmVfb25jZSk6IFRlc3QgdGhhdCByZW1vdmluZyBwcm9iZXMgZnJvbSB3aXRoaW4KKwkgIHRoZSBwcm9iZSBmdW5jdGlvbnMgd29ya3MuCisKKzIwMDUtMDktMjEgMTM6MTE6MjIgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgY2hlY2svZ3N0L2dzdHV0aWxzLmMgKHRlc3RfYnVmZmVyX3Byb2JlX25fdGltZXMpOiBBZGQgdGVzdHMgZm9yIGRhdGEgYW5kIGV2ZW50IHByb2JlcyBvbiB0aGUgc2FtZSBwYWQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDktMjEgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGNoZWNrL2dzdC9nc3R1dGlscy5jICh0ZXN0X2J1ZmZlcl9wcm9iZV9uX3RpbWVzKTogQWRkIHRlc3RzIGZvcgorCSAgZGF0YSBhbmQgZXZlbnQgcHJvYmVzIG9uIHRoZSBzYW1lIHBhZC4KKworMjAwNS0wOS0yMSAxMjoyMToxMCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBjaGVjay9nc3QvZ3N0dXRpbHMuYzogTmV3IGZpbGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDktMjEgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGNoZWNrL2dzdC9nc3R1dGlscy5jOiBOZXcgZmlsZS4KKwkgICh0ZXN0X2J1ZmZlcl9wcm9iZV9uX3RpbWVzKTogQSBzaW1wbGUgYnVmZmVyIHByb2JlIHRlc3QuIE1vcmUgdG8KKwkgIGNvbWUsIGZvb2xpb3MuCisJICAqIGdzdC9nc3R1dGlscy5jIChnc3RfcGFkX2FkZF9idWZmZXJfcHJvYmUpOiBDb25uZWN0IHRvCisJICBoYXZlLWRhdGE6OmJ1ZmZlciwgbm90IGhhdmUtZGF0YS4KKwkgIChnc3RfcGFkX2FkZF9ldmVudF9wcm9iZSk6IExpa2V3aXNlIGZvciBoYXZlLWRhdGE6OmV2ZW50LgorCSAgKGdzdF9wYWRfYWRkX2RhdGFfcHJvYmUpOiBNb3JlIGRvY3MuIFRoZSBwYXJ0IGFib3V0ICdyZXNvbHZpbmcgdGhlCisJICBwZWVyJyBpc24ndCBxdWl0ZSByaWdodCB5ZXQgdGhvdWdoLgorCSAgKGdzdF9wYWRfcmVtb3ZlX2J1ZmZlcl9wcm9iZSwgZ3N0X3BhZF9yZW1vdmVfZXZlbnRfcHJvYmUpCisJICAoZ3N0X3BhZF9yZW1vdmVfZGF0YV9wcm9iZSk6IENoYW5nZSB0byB0YWtlIHRoZSBndWludCBoYW5kbGVyX2lkCisJICBhcyB0aGVpciBhcmcsIG5vdCB0aGUgZnVuY3Rpb24rZGF0YSwgd2hpY2ggaXMgbW9yZSBnbGliLWxpa2UuCisJICAqIGdzdC9nc3RwYWQuYyAoZ3N0X3BhZF9lbWl0X2hhdmVfZGF0YV9zaWduYWwpOiBBZGQgYSBkZXRhaWwgdG8KKwkgIHRoZSBzaWduYWwgZW1pc3Npb24gdG8gaW5kaWNhdGUgaWYgdGhlIGRhdGEgaXMgYSBidWZmZXIgb3IgYW4KKwkgIGV2ZW50LgorCSAgKGdzdF9wYWRfZ2V0X3R5cGUpOiBJbml0aWFsaXplIGJ1ZmZlciBhbmQgZXZlbnQgcXVhcmtzLgorCSAgKGdzdF9wYWRfY2xhc3NfaW5pdCk6IGhhdmUtZGF0YSBpcyBub3cgYSBkZXRhaWxlZCBzaWduYWwsIHllcyBpdAorCSAgaXMuCisKKzIwMDUtMDktMjEgMTE6NTI6MDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC86IERvbid0IHB1dCBmdW5jdGlvbmFsIGNvZGUgaW4gZ19yZXR1cm5faWZfZmFpbCgpIG9yIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCkgc3RhdGVtZW50cywgb3RoZXJ3aXNlIHRoaW5ncyB3aWxsIGJyZS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV90cmFuc2Zvcm1fc2l6ZSk6CisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nKSwKKwkgIChnc3RfdXRpbF9zZXRfb2JqZWN0X2FyZyk6CisJICBEb24ndCBwdXQgZnVuY3Rpb25hbCBjb2RlIGluIGdfcmV0dXJuX2lmX2ZhaWwoKSBvcgorCSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoKSBzdGF0ZW1lbnRzLCBvdGhlcndpc2UgdGhpbmdzIHdpbGwKKwkgIGJyZWFrIHdoZW4gR19ESVNBQkxFX0NIRUNLUyBpcyBkZWZpbmVkIGR1cmluZyBjb21waWxhdGlvbi4KKworMjAwNS0wOS0yMSAwOTo0ODo0MCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBpbmxpZWQgYW5vdGhlciBvbmUgYW5kIGFkZGVkICBzb21lIG9idmlvdXMgZG9jcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L3RtcGwvLmN2c2lnbm9yZToKKwkgICogZG9jcy9nc3QvdG1wbC9nc3R2YWx1ZS5zZ21sOgorCSAgKiBnc3QvZ3N0dmFsdWUuYzoKKwkgICogZ3N0L2dzdHZhbHVlLmg6CisJICBpbmxpZWQgYW5vdGhlciBvbmUgYW5kIGFkZGVkICBzb21lIG9idmlvdXMgZG9jcworCisyMDA1LTA5LTIxIDA5OjEzOjMyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZWxlbWVudHMvZ3N0ZmRzcmMuKjogUHJvcGVybHkgaW1wbGVtZW50IGZkc3JjLiBSZW1vdmVkIHNpZ25hbCBhbmQgdGltZW91dCwgYmV0dGVyIGltcGxlbWVudGVkIHNvbWV3aGVyZSBlbHNlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9lbGVtZW50cy9nc3RmZHNyYy5jOiAoZ3N0X2Zkc3JjX2NsYXNzX2luaXQpLAorCSAgKGdzdF9mZHNyY19pbml0KSwgKGdzdF9mZHNyY19zdGFydCksIChnc3RfZmRzcmNfc3RvcCksCisJICAoZ3N0X2Zkc3JjX3VubG9jayksIChnc3RfZmRzcmNfc2V0X3Byb3BlcnR5KSwKKwkgIChnc3RfZmRzcmNfZ2V0X3Byb3BlcnR5KSwgKGdzdF9mZHNyY19jcmVhdGUpOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmRzcmMuaDoKKwkgIFByb3Blcmx5IGltcGxlbWVudCBmZHNyYy4gUmVtb3ZlZCBzaWduYWwgYW5kIHRpbWVvdXQsCisJICBiZXR0ZXIgaW1wbGVtZW50ZWQgc29tZXdoZXJlIGVsc2UuCisKKzIwMDUtMDktMjEgMDg6NTg6NDggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgaW5saW5lZCBtb3JlIGRvY3MKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC90bXBsLy5jdnNpZ25vcmU6CisJICAqIGRvY3MvZ3N0L3RtcGwvZ3N0aW1wbGVtZW50c2ludGVyZmFjZS5zZ21sOgorCSAgKiBnc3QvZ3N0aW50ZXJmYWNlLmM6CisJICBpbmxpbmVkIG1vcmUgZG9jcworCisyMDA1LTA5LTIxIDA4OjQwOjU1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvZ3N0LzogcmVtb3ZlIG9ic29sZXRlIGRvYyBmaWxlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZG9jcy9nc3QvdG1wbC8uY3ZzaWdub3JlOgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdGVudW10eXBlcy5zZ21sOgorCSAgcmVtb3ZlIG9ic29sZXRlIGRvYyBmaWxlCisKKzIwMDUtMDktMjEgMDc6Mzc6MDIgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJICBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzogRHJpbmsgYSBsaXR0bGUgYmVlciwgZml4IGEgbGl0dGxlIGxlYWsuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6IChnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UpOiBEcmluayBhCisJICBsaXR0bGUgYmVlciwgZml4IGEgbGl0dGxlIGxlYWsuCisKKzIwMDUtMDktMjAgMjA6NTQ6MzcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogZG9jcy9nc3QvdG1wbC9nc3RlbGVtZW50LnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGVudW10eXBlcy5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RpbXBsZW1lbnRzaW50ZXJmYWNlLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGluZGV4LnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGluZGV4ZmFjdG9yeS5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RpbmZvLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdG9iamVjdC5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RwYWQuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0cGFkdGVtcGxhdGUuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0cGlwZWxpbmUuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0cGx1Z2luLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHBsdWdpbmZlYXR1cmUuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0dHlwZXMuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0dmFsdWUuc2dtbDoKKwkgIHJlbW92ZSBmaWxlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICByZW1vdmUgZmlsZXMKKworMjAwNS0wOS0yMCAyMDo0MDowMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBtb3JlIGRvY3MgaW5saW5lZCwgc3BsaXR0ZWQgZ3N0aW5kZXgue2MsaH0KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBkb2NzL2dzdC90bXBsLy5jdnNpZ25vcmU6CisJICAqIGdzdC9NYWtlZmlsZS5hbToKKwkgICogZ3N0L2dzdC5oOgorCSAgKiBnc3QvZ3N0YmluLmM6CisJICAqIGdzdC9nc3RlbGVtZW50Lmg6CisJICAqIGdzdC9nc3RpbmRleC5jOiAoZ3N0X2luZGV4X2NsYXNzX2luaXQpOgorCSAgKiBnc3QvZ3N0aW5kZXguaDoKKwkgICogZ3N0L2dzdGluZGV4ZmFjdG9yeS5jOiAoZ3N0X2luZGV4X2ZhY3RvcnlfZ2V0X3R5cGUpLAorCSAgKGdzdF9pbmRleF9mYWN0b3J5X2NsYXNzX2luaXQpLCAoZ3N0X2luZGV4X2ZhY3RvcnlfaW5pdCksCisJICAoZ3N0X2luZGV4X2ZhY3RvcnlfZmluYWxpemUpLCAoZ3N0X2luZGV4X2ZhY3RvcnlfbmV3KSwKKwkgIChnc3RfaW5kZXhfZmFjdG9yeV9kZXN0cm95KSwgKGdzdF9pbmRleF9mYWN0b3J5X2ZpbmQpLAorCSAgKGdzdF9pbmRleF9mYWN0b3J5X2NyZWF0ZSksIChnc3RfaW5kZXhfZmFjdG9yeV9tYWtlKToKKwkgICogZ3N0L2dzdGluZGV4ZmFjdG9yeS5oOgorCSAgKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgorCSAgKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzogKGdzdF9jb250cm9sbGVyX25ld192YWxpc3QpOgorCSAgbW9yZSBkb2NzIGlubGluZWQsIHNwbGl0dGVkIGdzdGluZGV4LntjLGh9CisKKzIwMDUtMDktMjAgMjA6MTk6NTIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKKwkgIGZpeCBhIGxlYWsgaW4gY29udHJvbGxlcgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaXggYSBsZWFrIGluIGNvbnRyb2xsZXIKKworMjAwNS0wOS0yMCAxOToxNjo0MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IFNldCBzeW5jIHRvIEZBTFNFIGJ5IGRlZmF1bHQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IChnc3RfZmlsZV9zaW5rX2luaXQpOgorCSAgU2V0IHN5bmMgdG8gRkFMU0UgYnkgZGVmYXVsdC4KKworMjAwNS0wOS0yMCAxNzozODo1MSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogTWFrZSBzeW5jIHByb3BlcnR5IHNldHRhYmxlIGZyb20gc3ViY2xhc3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfY2xhc3NfaW5pdCksCisJICAoZ3N0X2Jhc2Vfc2lua19pbml0KToKKwkgIE1ha2Ugc3luYyBwcm9wZXJ0eSBzZXR0YWJsZSBmcm9tIHN1YmNsYXNzLgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzogKGdzdF9mYWtlX3NpbmtfaW5pdCksCisJICAoZ3N0X2Zha2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgorCSAgU2V0IHN5bmMgdG8gRkFMU0UgYnkgZGVmYXVsdC4KKworMjAwNS0wOS0yMCAxNzozMDozNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgVGhlIHRpbWVvdXQgaGFuZGxlciBzaG91bGQgaGF2ZSBsb3dlciBwcmlvcml0eSB0aGFuIHRoZSBzb3VyY2Ugc28gd2UgZG9uJ3QgdGltZW91dCBiZWZvcmUgcG9wcGluZyBhIG1lc3NhZ2Ugd2l0aCAwIHRpLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJ1cy5jOiAocG9sbF9mdW5jKSwgKHBvbGxfdGltZW91dCksIChnc3RfYnVzX3BvbGwpOgorCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChtYWluKToKKwkgIFRoZSB0aW1lb3V0IGhhbmRsZXIgc2hvdWxkIGhhdmUgbG93ZXIgcHJpb3JpdHkgdGhhbiB0aGUgc291cmNlCisJICBzbyB3ZSBkb24ndCB0aW1lb3V0IGJlZm9yZSBwb3BwaW5nIGEgbWVzc2FnZSB3aXRoIDAgdGltZW91dC4KKwkgIER1bXAgZXJyb3IgbWVzc2FnZXMgYWZ0ZXIgZmFpbGVkIHN0YXRlIGNoYW5nZS4KKworMjAwNS0wOS0yMCAxNzoyMToxMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgdG9vbHMvZ3N0LWluc3BlY3QuYzogRml4IHR3byB0eXBvcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAocHJpbnRfZWxlbWVudF9wcm9wZXJ0aWVzX2luZm8pOgorCSAgRml4IHR3byB0eXBvcy4KKworMjAwNS0wOS0yMCAxNTo0NTo0MiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIHJlbW92ZSB0aGUgc3luYyBwcm9wZXJ0eSBmcm9tIGZha2VzaW5rLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dzdC9nc3RldmVudC5jOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGZha2VzaW5rLmg6CisJICByZW1vdmUgdGhlIHN5bmMgcHJvcGVydHkgZnJvbSBmYWtlc2luay4KKwkgIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2Ygc2V0dGluZyBzeW5jIFRSVUUKKwkgIGZvciBmYWtlc2luaywgd2hpY2ggaXMgYSBjaGFuZ2UuICBBbnlvbmUgd2hvIGtub3dzIGhvdworCSAgdG8gZml4IHRoaXMgbmljZWx5IGluIGEgR09iamVjdC15IHdheSwgZmVlbCBmcmVlLgorCisyMDA1LTA5LTIwIDE1OjE5OjA4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6IHJlbW92ZSBwcm9iZSByZWZzZWN0aW9uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKKwkgIHJlbW92ZSBwcm9iZSByZWZzZWN0aW9uCisKKzIwMDUtMDktMjAgMTI6NTA6MjMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgY2hlY2svTWFrZWZpbGUuYW06IGRpc2FibGUgdmFsZ3JpbmRpbmcgdGhlIGNvbnRyb2xsZXIgdGVzdCBhZ2FpbgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL01ha2VmaWxlLmFtOgorCSAgZGlzYWJsZSB2YWxncmluZGluZyB0aGUgY29udHJvbGxlciB0ZXN0IGFnYWluCisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICB1cGRhdGUgZm9yIGFwaS1jaGFuZ2VzCisKKzIwMDUtMDktMjAgMTI6MDU6NDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9iYXNlL2dzdGJhc2VzaW5rLio6IEFkZGVkIHN5bmMgcHJvcGVydHkgdG8gYmFzZXNpbmsgdG8gZGlzYWJsZSBjbG9jayBzeW5jLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NsYXNzX2luaXQpLAorCSAgKGdzdF9iYXNlX3Npbmtfc2V0X3Byb3BlcnR5KSwgKGdzdF9iYXNlX3NpbmtfZ2V0X3Byb3BlcnR5KSwKKwkgIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSAgQWRkZWQgc3luYyBwcm9wZXJ0eSB0byBiYXNlc2luayB0byBkaXNhYmxlIGNsb2NrIHN5bmMuCisKKzIwMDUtMDktMjAgMTE6MDk6NTAgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmMgKGdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlKTogQXZvaWQgZWF0aW5nIHRoZSBjYWxsZXIncyByZWZjb3VudC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wOS0yMCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmMgKGdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlKTogQXZvaWQKKwkgIGVhdGluZyB0aGUgY2FsbGVyJ3MgcmVmY291bnQuCisJICAqIGdzdC9nc3RvYmplY3QuaCAoR1NUX09CSkVDVF9SRUZDT1VOVCkKKwkgIChHU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFKTogQ29uZGl0aW9uYWxseSBmb25kbGUgdGhlIHJpZ2h0CisJICByZWZjb3VudC4KKwkgICogZ3N0L2dzdGNvbmZpZy5oLmluIChHU1RfSEFWRV9HTElCXzJfOCk6CisJICAqIGNvbmZpZ3VyZS5hYyAoR1NUX0hBVkVfR0xJQl8yXzhfREVGSU5FKTogTWFrZSB0aGUgYXZhaWxhYmlsaXR5CisJICBvZiBHTGliIDIuOCBwdWJsaWMsIHNvIHdlIGNhbiBrbm93IHdoaWNoIHJlZmNvdW50IHRvIGNoZWNrIGluCisJICB0ZXN0cy4KKwkgICogZ3N0L2dzdG9iamVjdC5jOiBVc2UgdGhlIEdTVF9IQVZFX0dMSUJfMl84IGRlZmluZS4KKwkgIChnc3Rfb2JqZWN0X2luaXQpOiBPbmx5IHNldCB0aGUgZ3N0IHJlZmNvdW50IGlmIHdlJ3JlIGdvaW5nIGFoZWFkCisJICB3aXRoIHRoZSByZWZjb3VudCBoYWNrLgorCisyMDA1LTA5LTIwIDEwOjQxOjAzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIG1vcmUgbGVha3MgcGx1bWJlZCwgYWRkZWQgbW9yZSBkZWJ1Zy1sb2dnaW5nCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svZ3N0LWxpYnMvY29udHJvbGxlci5jOiAocGx1Z2luX2luaXQpLCAoR1NUX1NUQVJUX1RFU1QpOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzogKGdzdF9jb250cm9sbGVyX25ld192YWxpc3QpOgorCSAgbW9yZSBsZWFrcyBwbHVtYmVkLCBhZGRlZCBtb3JlIGRlYnVnLWxvZ2dpbmcKKwkgICogZ3N0L2dzdG1hY3Jvcy5oOgorCSAgd2hpdGVzcGFjZSBmaXgKKworMjAwNS0wOS0yMCAwOTo0NzoxMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIGdzdC9nc3RtZXNzYWdlLmM6CisJICByZW1vdmUgaW5jbHVkZSBvZiByZW1vdmVkIGhlYWRlcgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICByZW1vdmUgaW5jbHVkZSBvZiByZW1vdmVkIGhlYWRlcgorCisyMDA1LTA5LTIwIDA5OjI4OjU2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0L2dzdGNsb2NrLmM6IENvbW1pdCBmcm9tIHRoZSBQb2xpdGljYWwgUGFydHkgRm9yIE1vcmUgQXRvbWljIENWUyBDb21taXRzLCBzbyB0aGF0IHBlb3BsZSBkb24ndCB3YXN0ZSB0b28gbXVjaCBvZiB0Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGNsb2NrLmM6IChfZ3N0X2Nsb2NrX2lkX2ZyZWUpOgorCSAgQ29tbWl0IGZyb20gdGhlIFBvbGl0aWNhbCBQYXJ0eSBGb3IgTW9yZSBBdG9taWMgQ1ZTIENvbW1pdHMsCisJICBzbyB0aGF0IHBlb3BsZSBkb24ndCB3YXN0ZSB0b28gbXVjaCBvZiB0aGVpciBkYXkgZmlzaGluZworCSAgb3V0IG9idmlvdXMgbGVha3Mgb3V0IG9mIG1hc3NpdmUgY29tbWl0cy4KKwkgIE9oLCBhbmQgZml4IGEgcHJldHR5IGRhbW4gb2J2aW91cyBsZWFrIGluIHRoZSBtZW1jaHVuaworCSAgcmVtb3ZhbCBjb2RlLgorCisyMDA1LTA5LTIwIDA5OjIzOjM5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGNoZWNrLzogcGx1ZyBtZW0tbGVhaywgcmUtYWRkIHRvIHZhbGdyaW5kYWJsZSB0ZXN0cworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL01ha2VmaWxlLmFtOgorCSAgKiBjaGVjay9nc3QtbGlicy9jb250cm9sbGVyLmM6IChwbHVnaW5faW5pdCksIChHU1RfU1RBUlRfVEVTVCk6CisJICBwbHVnIG1lbS1sZWFrLCByZS1hZGQgdG8gdmFsZ3JpbmRhYmxlIHRlc3RzCisKKzIwMDUtMDktMjAgMDk6MDg6MjUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBnc3QvZ3N0cGx1Z2luLmg6CisJICB1bmJyZWFrIHRoZSBidWlsZCBmb3IgdGhvc2Ugd2hvIGhhdmUgY2hyb25pYyBhcnRocml0aXMgYW5kIHR5cGluZyAibWFrZSBjaGVjayIgaXMganVzdCB0b28gdGF4aW5nIG9uIHRoZSBoYW5kcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB1bmJyZWFrIHRoZSBidWlsZCBmb3IgdGhvc2Ugd2hvIGhhdmUgY2hyb25pYyBhcnRocml0aXMKKwkgIGFuZCB0eXBpbmcgIm1ha2UgY2hlY2siIGlzIGp1c3QgdG9vIHRheGluZyBvbiB0aGUgaGFuZHMKKworMjAwNS0wOS0yMCAwODoyNTozMiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0Lmg6IFJlLWFkZCBtYXJzaGFsIHRvIGdzdC5oJ3MgaW5jbHVkZSBsaXN0IC0tIGlmIHdlIHJlYWxseSB3YW50IGl0IG91dCwgeW91IHNob3VsZCBmaXggcGx1Z2lucyBhdCB0aGUgc2FtZSB0aW1lLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTA5LTIwICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvZ3N0Lmg6IFJlLWFkZCBtYXJzaGFsIHRvIGdzdC5oJ3MgaW5jbHVkZSBsaXN0IC0tIGlmIHdlCisJICByZWFsbHkgd2FudCBpdCBvdXQsIHlvdSBzaG91bGQgZml4IHBsdWdpbnMgYXQgdGhlIHNhbWUgdGltZS4KKworMjAwNS0wOS0yMCAwNzozMjo0OCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBhZGRlZCBtaXNzaW5nIHN5bWJvbHMgdG8gYXBpIGRvY3MgZGlzYWJsZSByZWYtY291bnQgaGFjayBpZiB3ZSBoYXZlIGdsaWIgPj0gMi44CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBnc3QvZ3N0b2JqZWN0LmM6CisJICBhZGRlZCBtaXNzaW5nIHN5bWJvbHMgdG8gYXBpIGRvY3MKKwkgIGRpc2FibGUgcmVmLWNvdW50IGhhY2sgaWYgd2UgaGF2ZSBnbGliID49IDIuOAorCisyMDA1LTA5LTIwIDA2OjI4OjMzICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSAgZG9jcy9nc3QvTWFrZWZpbGUuYW06IElnbm9yZSBhIGZldyBtb3JlIGludGVybmFsIGhlYWRlcnMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9NYWtlZmlsZS5hbTogSWdub3JlIGEgZmV3IG1vcmUgaW50ZXJuYWwgaGVhZGVycworCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOiBSZW1vdmUgb2xkIHNlY3Rpb25zCisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IFJlbW92ZSBvbGQgc2VjdGlvbnMKKwkgICogZG9jcy9nc3QvdG1wbC9nc3RvYmplY3Quc2dtbDogdXBkYXRlCisJICAqIGRvY3MvZ3N0L3RtcGwvZ3N0cGx1Z2luLnNnbWw6IHVwZGF0ZQorCSAgKiBkb2NzL2dzdC90bXBsL2dzdHBsdWdpbmZlYXR1cmUuc2dtbDogdXBkYXRlCisJICAqIGRvY3MvcmFuZG9tL2RzLzAuOS1zdWdnZXN0ZWQtY2hhbmdlczogdXBkYXRlLgorCSAgKiBnc3QvTWFrZWZpbGUuYW06IHJlbW92ZSBtZW1jaHVuayBhbmQgdHJhc2hzdGFjaywgc2luY2UgdGhleSdyZQorCSAgbm90IHVzZWQuCisJICAqIGdzdC9nc3QuYzogKGdzdF9kZWluaXQpOiByZW5hbWUgZ3N0X3JlZ2lzdHJ5X2RlaW5pdCB0byBfY2xlYW51cAorCSAgKiBnc3QvZ3N0Lmg6IGRvbid0IGluY2x1ZGUgc29tZSBoZWFkZXJzCisJICAqIGdzdC9nc3RjaGlsZHByb3h5LmM6IGFkZCBnc3RtYXJzaGFsLmgKKwkgICogZ3N0L2dzdGNsb2NrLmM6IERvbid0IHVzZSBtZW1jaHVua3MKKwkgICogZ3N0L2dzdG1pbmlvYmplY3QuYzogQWRkIHNvbWUgZG9jcworCSAgKiBnc3QvZ3N0b2JqZWN0LmM6IHJlbW92ZSBERVNUUk9ZRUQgZmxhZywgc2luY2UgaXQncyByZWR1bmRhbnQKKwkgICogZ3N0L2dzdG9iamVjdC5oOiBzYW1lCisJICAqIGdzdC9nc3RwbHVnaW4uYzogaW5jbHVkZSBnc3RtYWNyb3MuaAorCSAgKiBnc3QvZ3N0cGx1Z2luLmg6IGRvbid0IGluY2x1ZGUgZ3N0bWFjcm9zLmgsIHNpbmNlIGl0J3MgcHJpdmF0ZQorCSAgKiBnc3QvZ3N0cXVlcnkuYzogZG9uJ3QgdXNlIG1lbWNodW5rcworCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzogcmVuYW1lIGdzdF9yZWdpc3RyeV9kZWluaXQoKQorCSAgKiBnc3QvZ3N0cmVnaXN0cnkuaDogc2FtZQorCisyMDA1LTA5LTIwIDA1OjEzOjMwICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSAgZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbDogUmVtb3ZlIGRvY3MgZm9yIGdldGJpdHMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtZG9jcy5zZ21sOiBSZW1vdmUgZG9jcyBmb3IgZ2V0Yml0cworCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSAgKiBkb2NzL2xpYnMvdG1wbC9nc3RnZXRiaXRzLnNnbWw6CisJICAqIGRvY3MvbGlicy90bXBsL2dzdHB1dGJpdHMuc2dtbDoKKworMjAwNS0wOS0yMCAwMDoyNzozNyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGNoZWNrL2dlbmVyaWMvc3RhdGVzLmM6IEFkZCBhIHNsZWVwIHRvIGVuc3VyZSBlbGVtZW50cyBoYXZlIGEgY2hhbmNlIHRvIHN0YXJ0IHRoZWlyIHBhZCB0YXNrcyBiZWZvcmUgc2h1dGRvd24uIFJlZHVjZS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dlbmVyaWMvc3RhdGVzLmM6IChHU1RfU1RBUlRfVEVTVCksIChzdGF0ZXNfc3VpdGUpOgorCSAgQWRkIGEgc2xlZXAgdG8gZW5zdXJlIGVsZW1lbnRzIGhhdmUgYSBjaGFuY2UgdG8gc3RhcnQgdGhlaXIKKwkgIHBhZCB0YXNrcyBiZWZvcmUgc2h1dGRvd24uIFJlZHVjZXMgcmFjeSB0ZXN0IHJlc3VsdHMuCisJICAqIGdzdC9lbGVtZW50cy9nc3RmZHNyYy5jOiAoZ3N0X2Zkc3JjX2luaXQpLCAoZ3N0X2Zkc3JjX2NyZWF0ZSk6CisJICBUaW1lIG91dCB0aGUgc2VsZWN0IGV2ZXJ5IG5vdyBhbmQgdGhlbiB0byBjaGVjayBmb3Igc2h1dGRvd24uCisKKzIwMDUtMDktMTkgMjA6MDE6NDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIHdpbjMyL2dzdGVudW10eXBlcy4qOiBVcGRhdGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogd2luMzIvZ3N0ZW51bXR5cGVzLmM6CisJICAqIHdpbjMyL2dzdGVudW10eXBlcy5oOgorCSAgVXBkYXRlLgorCisyMDA1LTA5LTE5IDE2OjMyOjQ0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0cGlwZWxpbmUuYzogQXV0b21hdGljYWxseSBQQVVTRSBhbmQgUkVTVU1FIGEgcGlwZWxpbmUgd2hlbiBhIGZsdXNoaW5nIHNlZWsgaXMgcGVyZm9ybWVkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZG9fcGlwZWxpbmVfc2VlayksIChnc3RfcGlwZWxpbmVfc2VuZF9ldmVudCk6CisJICBBdXRvbWF0aWNhbGx5IFBBVVNFIGFuZCBSRVNVTUUgYSBwaXBlbGluZSB3aGVuIGEgZmx1c2hpbmcgc2VlaworCSAgaXMgcGVyZm9ybWVkLgorCSAgUmVtb3ZlZCBvbGQgZmlsZXMuCisKKzIwMDUtMDktMTkgMTY6Mjg6NTggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBnc3QvZ3N0YnVzLmM6CisJICB3aGl0ZXNwYWNlIGZpeAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB3aGl0ZXNwYWNlIGZpeAorCisyMDA1LTA5LTE5IDE1OjEyOjI1ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGdzdC9nc3RyZWdpc3RyeS5oOiBTcGFjaW5nIGZpeGVuLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTA5LTE5ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvZ3N0cmVnaXN0cnkuaDogU3BhY2luZyBmaXhlbi4KKworMjAwNS0wOS0xOSAxNDo1NToyNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBIYW5kbGUgc3RhdGUgY2hhbmdlIGZhaWx1cmUgbW9yZSBjb3JyZWN0bHkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2NoYW5nZV9zdGF0ZSk6CisJICBIYW5kbGUgc3RhdGUgY2hhbmdlIGZhaWx1cmUgbW9yZSBjb3JyZWN0bHkuCisKKzIwMDUtMDktMTkgMTQ6NDE6NTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBjaGVjay86IGVuYWJsZSBjbGVhbnVwIGFnYWluIGFmdGVyIGZpeGluZyB0aGUgbGVhaworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL01ha2VmaWxlLmFtOgorCSAgKiBjaGVjay9waXBlbGluZXMvY2xlYW51cC5jOiAocnVuX3BpcGVsaW5lKToKKwkgICogY2hlY2svcGlwZWxpbmVzL3NpbXBsZV9sYXVuY2hfbGluZXMuYzogKHJ1bl9waXBlbGluZSksCisJICAoR1NUX1NUQVJUX1RFU1QpOgorCSAgZW5hYmxlIGNsZWFudXAgYWdhaW4gYWZ0ZXIgZml4aW5nIHRoZSBsZWFrCisJICAqIGRvY3MvUkVBRE1FOgorCSAgc29tZSBtb3JlIGluZm8gb24gZG9jcworCisyMDA1LTA5LTE5IDE0OjIwOjM3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2dzdHBsdWdpbi5jOgorCSAgZG9uJ3QgY29tcGxhaW4gYWJvdXQgbXkgQVJNIC5zbyBmaWxlcy4gIEFub3RoZXIgcmVhc29uIHdoeSBpdCBkb2VzIG1ha2Ugc2Vuc2UgdG8gaGF2ZSBwbHVnaW5zIGZvbGxvdyBhIHN0YW5kYXJkIGZpbGUgLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGRvbid0IGNvbXBsYWluIGFib3V0IG15IEFSTSAuc28gZmlsZXMuICBBbm90aGVyIHJlYXNvbiB3aHkgaXQgZG9lcyBtYWtlIHNlbnNlCisJICB0byBoYXZlIHBsdWdpbnMgZm9sbG93IGEgc3RhbmRhcmQgZmlsZSBuYW1lIHBhdHRlcm4gbGlrZSBsaWJnc3Qod2hhdGV2ZXIpLnNvCisKKzIwMDUtMDktMTkgMTQ6MDk6NTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBjaGVjay9NYWtlZmlsZS5hbTogcmUtZW5hYmxlIHRlc3RzIG5vdyB0aGF0IGxlYWtzIGFyZSBwbHVnZ2VkCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svTWFrZWZpbGUuYW06CisJICByZS1lbmFibGUgdGVzdHMgbm93IHRoYXQgbGVha3MgYXJlIHBsdWdnZWQKKwkgICogY2hlY2svZ3N0L2dzdC5jOgorCSAgKiBjaGVjay9nc3QvZ3N0YmluLmM6CisJICAqIGNoZWNrL2dzdC9nc3RwaXBlbGluZS5jOgorCSAgYWRkIHNvbWUgbW9yZSB0ZXN0cyB3aGlsZSBmaXhpbmcgbGVha3MKKwkgICogY29tbW9uL2NoZWNrLm1hazoKKwkgIG1ha2Ugc3VyZSBiaW5hcmllcyBhcmUgdXB0b2RhdGUgd2hlbiB2YWxncmluZGluZy9nZGJpbmcKKwkgICogZ3N0L2dzdC5jOgorCSAgKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKKwkgIHJlbW92ZSBhIHJlZiB0b28gbWFueSwgYW5kIGFkZCBhIEZJWE1FIGZvciB3aGVuIHdlIGdldAorCSAgcm91bmQgdG8gZGlzcG9zaW5nIG9mIGNsYXNzZXMKKwkgICogZ3N0L2dzdHBsdWdpbi5jOgorCSAgZml4IHRoZSByZWZjb3VudGluZyB3aGVuIGxvYWRpbmcgYSBwbHVnaW4gZnJvbSBhIGZpbGUgYW5kCisJICB0aGUgY29kZSBwcmV0ZW5kcyB0aGF0IHRoZSBwb2ludGVyIGlzIHRoZSBzYW1lIGV2ZW4gdGhvdWdoCisJICBvZiBjb3Vyc2UgaXQgY2FuIGNoYW5nZQorCSAgKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgorCSAgdW5yZWYgcGx1Z2lucyBtYXJrZWQgY2FjaGVkIChhIGJpdCBjb25mdXNpbmcgYXMgYSBuYW1lKQorCSAgYXMgdGhlIGRvY3Mgc3RhdGUgc2hvdWxkIGJlIGRvbmUKKwkgIHZhcmlvdXMgZG9jIGFkZGl0aW9ucyB0byBleHBsYWluIHJlZmNvdW50aW5nCisJICAqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzoKKwkgIGRlYnVnZ2luZworCisyMDA1LTA5LTE5IDE0OjA5OjM3ICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+CisKKwkqIGdzdHJlYW1lci5zcGVjLmluOgorCSAgdXBkYXRlIHNwZWMgZmlsZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB1cGRhdGUgc3BlYyBmaWxlCisKKzIwMDUtMDktMTkgMTE6MTg6MDMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIEdzdEJ1c0hhbmRsZXIgLT4gR3N0QnVzRnVuYywgcmV0dXJuIHZhbHVlIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGFueSBvdGhlciBHU291cmNlIChGQUxTRSA9PSByZW1vdmUgc291cmNlKS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9nc3QvZ3N0YmluLmM6IChwb3BfbWVzc2FnZXMpLCAoR1NUX1NUQVJUX1RFU1QpOgorCSAgKiBjaGVjay9nc3QvZ3N0YnVzLmM6IChtZXNzYWdlX2Z1bmNfZW9zKSwgKG1lc3NhZ2VfZnVuY19hcHApLAorCSAgKHNlbmRfbWVzc2FnZXMpLCAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0YnVzX3N1aXRlKToKKwkgICogY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICAqIGNoZWNrL3BpcGVsaW5lcy9jbGVhbnVwLmM6IChydW5fcGlwZWxpbmUpOgorCSAgKiBjaGVjay9waXBlbGluZXMvc2ltcGxlX2xhdW5jaF9saW5lcy5jOiAocnVuX3BpcGVsaW5lKSwKKwkgIChHU1RfU1RBUlRfVEVTVCk6CisJICAqIGdzdC9nc3RidXMuYzogKGdzdF9idXNfaGF2ZV9wZW5kaW5nKSwgKGdzdF9idXNfc291cmNlX3ByZXBhcmUpLAorCSAgKGdzdF9idXNfc291cmNlX2NoZWNrKSwgKGdzdF9idXNfc291cmNlX2Rpc3BhdGNoKSwKKwkgIChnc3RfYnVzX2NyZWF0ZV93YXRjaCksIChnc3RfYnVzX2FkZF93YXRjaF9mdWxsKSwKKwkgIChnc3RfYnVzX2FkZF93YXRjaCksIChwb2xsX2Z1bmMpLCAocG9sbF90aW1lb3V0KSwgKGdzdF9idXNfcG9sbCk6CisJICAqIGdzdC9nc3RidXMuaDoKKwkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAoZXZlbnRfbG9vcCk6CisJICAqIHRvb2xzL2dzdC1tZDVzdW0uYzogKGV2ZW50X2xvb3ApOgorCSAgR3N0QnVzSGFuZGxlciAtPiBHc3RCdXNGdW5jLCByZXR1cm4gdmFsdWUgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMKKwkgIGFueSBvdGhlciBHU291cmNlIChGQUxTRSA9PSByZW1vdmUgc291cmNlKS4KKwkgIF9hZGRfd2F0Y2goKSBhbmQgX2FkZF93YXRjaF9mdWxsKCkgbm93IHRha2UgYSBNZXNzYWdlVHlwZSBtYXNrIHRvCisJICBvbmx5IGhhbmRsZSBzcGVjaWZpYyB0eXBlcyBvZiBtZXNzYWdlcy4KKwkgIF9wb2xsKCkgcmV0dXJucyB0aGUgR3N0TWVzc2FnZSBpbnN0ZWFkIG9mIHRoZSBtZXNzYWdlIHR5cGUgdG8gYXZvaWQKKwkgIHJhY2UgY29uZGl0aW9ucy4KKwkgIF9oYXZlX3BlbmRpbmcoKSB0YWtlcyBhIE1lc3NhZ2VUeXBlIG1hc2sgbm93IHRvby4KKwkgIEFkZGVkIHRlc3RzdWl0ZSBmb3IgbXVsdGlwbGUgYnVzIHdhdGNoZXMuCisJICBGaXggdGVzdHN1aXRlcyBhbmQgYXBwbGljYXRpb25zIGZvciBuZXcgYnVzIEFQSS4KKworMjAwNS0wOS0xOCAyMjoxNToyMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIGNoZWNrL01ha2VmaWxlLmFtOgorCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICBtYXJrIGEgYnVuY2ggb2YgdGhlIHRlc3RzIGFzIHRvIGZpeCB1bnRpbCB3ZSBmaXggdGhlbQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBtYXJrIGEgYnVuY2ggb2YgdGhlIHRlc3RzIGFzIHRvIGZpeCB1bnRpbCB3ZSBmaXggdGhlbQorCisyMDA1LTA5LTE4IDIxOjQwOjU4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgY29tbW9uL2NoZWNrLm1hazogdXNlIEdTVF9QTFVHSU4gc2V0dGluZ3MgZm9yIHZhbGdyaW5kIHRlc3RzIGFzIHdlbGwsIHNvIHdlJ3JlIHZhbGdyaW5kaW5nIHRoZSBjb3JyZWN0IHRoaW5nCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29tbW9uL2NoZWNrLm1hazoKKwkgIHVzZSBHU1RfUExVR0lOIHNldHRpbmdzIGZvciB2YWxncmluZCB0ZXN0cyBhcyB3ZWxsLCBzbyB3ZSdyZQorCSAgdmFsZ3JpbmRpbmcgdGhlIGNvcnJlY3QgdGhpbmcKKwkgICogZ3N0L2dzdC5jOiAoaW5pdF9wb3N0KToKKwkgIHBsdWcgYW5vdGhlciBsZWFrCisKKzIwMDUtMDktMTggMjE6MjQ6NTUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBjaGVjay9nc3QvZ3N0LmM6CisJKiBnc3QvZ3N0LmM6CisJKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKKwkqIGdzdC9nc3RpbmRleC5jOgorCSogZ3N0L2dzdG9iamVjdC5jOgorCSogZ3N0L2dzdHBsdWdpbi5jOgorCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzoKKwkqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSogZ3N0L2dzdHJlZ2lzdHJ5Lmg6CisJKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3QuYzoKKwkgIHZhcmlvdXMgY2xlYW51cHMgYW5kIG1lbWxlYWsgcGx1Z2dpbmcuICBtYWtlIHZhbGdyaW5kIGlzIGhhcHB5IG5vdy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgdmFyaW91cyBjbGVhbnVwcyBhbmQgbWVtbGVhayBwbHVnZ2luZy4gIG1ha2UgdmFsZ3JpbmQgaXMgaGFwcHkgbm93LgorCisyMDA1LTA5LTE4IDIxOjIzOjEzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogY2hlY2svZ3N0Ly5naXRpZ25vcmU6CisJKiBjb21tb246CisJKiB0ZXN0cy9jaGVjay9nc3QvLmdpdGlnbm9yZToKKwkgIGFkZCBjaGVjay12YWxncmluZCB0YXJnZXQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkIGNoZWNrLXZhbGdyaW5kIHRhcmdldAorCisyMDA1LTA5LTE4IDA5OjE1OjEwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6CisJICBsb2FkaW5nIGEgcGx1Z2luIGNhbiByZXR1cm4gTlVMTAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBsb2FkaW5nIGEgcGx1Z2luIGNhbiByZXR1cm4gTlVMTAorCisyMDA1LTA5LTE4IDA3OjQxOjI4ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSAgdG9vbHMvZ3N0LWluc3BlY3QuYzogUmV2ZXJ0IHRoZSBHT3B0aW9uIGNvZGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogUmV2ZXJ0IHRoZSBHT3B0aW9uIGNvZGUuCisKKzIwMDUtMDktMTggMDY6NTk6MjUgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJICBjaGVjay9NYWtlZmlsZS5hbTogRml4IGVudmlyb25tZW50IHZhcmlhYmxlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9NYWtlZmlsZS5hbTogRml4IGVudmlyb25tZW50IHZhcmlhYmxlcy4KKwkgICogY2hlY2svZ3N0L2dzdHBsdWdpbi5jOiBGaXggZm9yIEFQSSBjaGFuZ2VzLgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiBGaXggZm9yIEFQSSBjaGFuZ2VzLgorCSAgKiB0b29scy9nc3QteG1saW5zcGVjdC5jOiBGaXggZm9yIEFQSSBjaGFuZ2VzLgorCSAgKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKKwkgICogZ3N0L2dzdHBsdWdpbi5jOgorCSAgKiBnc3QvZ3N0cGx1Z2luLmg6CisJICAqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6CisJICAqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmg6CisJICAqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnkuaDoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6CisJICAqIGdzdC9nc3R0eXBlZmluZC5jOgorCSAgKiBnc3QvZ3N0dHlwZWZpbmRmYWN0b3J5LmM6CisJICAqIGdzdC9pbmRleGVycy9nc3RmaWxlaW5kZXguYzoKKwkgICogZ3N0L2luZGV4ZXJzL2dzdG1lbWluZGV4LmM6CisJICAqIGdzdC9zY2hlZHVsZXJzL01ha2VmaWxlLmFtOgorCSAgQ2hhbmdlIHJlZ2lzdHJ5IHRvIGtlZXAgdHJhY2sgb2YgYm90aCBwbHVnaW5zIGFuZCBmZWF0dXJlcywKKwkgIHJlbW92aW5nIHRoZSBmZWF0dXJlIHRyYWNraW5nIGZyb20gcGx1Z2lucyB0aGVtc2VsdmVzLgorCisyMDA1LTA5LTE3IDE4OjE0OjQwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogY2hlY2svTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgIGFkZCB2YWxncmluZCB0YXJnZXQ7IGRpc2FibGUgZ3N0cGx1Z2luIHVudGlsIGl0IHBhc3NlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGQgdmFsZ3JpbmQgdGFyZ2V0OyBkaXNhYmxlIGdzdHBsdWdpbiB1bnRpbCBpdCBwYXNzZXMKKworMjAwNS0wOS0xNyAxODoxMToyNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIE1ha2VmaWxlLmFtOgorCSogY2hlY2svTWFrZWZpbGUuYW06CisJKiBjb21tb246CisJKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgIGFkZCB2YWxncmluZCB0YXJnZXQ7IGRpc2FibGUgZ3N0cGx1Z2luIHVudGlsIGl0IHBhc3NlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGQgdmFsZ3JpbmQgdGFyZ2V0OyBkaXNhYmxlIGdzdHBsdWdpbiB1bnRpbCBpdCBwYXNzZXMKKworMjAwNS0wOS0xNiAxMToyNDoxMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGdzdC9nc3RwbHVnaW4uaDoKKwkgIGFkZCBtaXNpbmcgaW5jbHVkZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGQgbWlzaW5nIGluY2x1ZGUKKworMjAwNS0wOS0xNiAwODoxNzo0OSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGNoZWNrL01ha2VmaWxlLmFtOgorCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICBzZXQgdGhlIHJpZ2h0IHZhcgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBzZXQgdGhlIHJpZ2h0IHZhcgorCisyMDA1LTA5LTE2IDA4OjE0OjU0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogY2hlY2svTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkqIHRvb2xzL2dzdC1yZWdpc3Rlci4xLmluOgorCSAgcmVtb3ZlIGdzdC1yZWdpc3RlcgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICByZW1vdmUgZ3N0LXJlZ2lzdGVyCisKKzIwMDUtMDktMTYgMDQ6NTQ6MjQgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJICBHZXR0aW5nIHRpcmVkIG9mIGRlYnVnZ2luZy4gIERpc2FibGVkIGFsbCB0aGUgdW5yZWZmaW5nIG9mIHBsdWdpbnMgYW5kIGZlYXR1cmVzLCB3aGljaCBmaXhlcyB0aGUgc2VnZmF1bHRzLCBidXQgb2YgY28uLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9nc3QvZ3N0cGx1Z2luLmM6CisJICAqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgorCSAgKiBnc3QvZ3N0cGx1Z2luLmM6CisJICAqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6CisJICAqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSAgR2V0dGluZyB0aXJlZCBvZiBkZWJ1Z2dpbmcuICBEaXNhYmxlZCBhbGwgdGhlIHVucmVmZmluZyBvZgorCSAgcGx1Z2lucyBhbmQgZmVhdHVyZXMsIHdoaWNoIGZpeGVzIHRoZSBzZWdmYXVsdHMsIGJ1dCBvZgorCSAgY291cnNlIGxlYWtzIGxpa2UgY3JhenkuICBBdCBsZWFzdCBwbGF5YmluIHdvcmtzLgorCisyMDA1LTA5LTE2IDAzOjQ2OjE0ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSAgY2hlY2svZ3N0L2dzdHBsdWdpbi5jOiBNb3JlIHRlc3RpbmcKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9nc3QvZ3N0cGx1Z2luLmM6IChyZWdpc3Rlcl9jaGVja19lbGVtZW50cyksCisJICAoR1NUX1NUQVJUX1RFU1QpLCAocGVlayksIChzdWdnZXN0KSwgKGdzdF9wbHVnaW5fc3VpdGUpOgorCSAgTW9yZSB0ZXN0aW5nCisJICAqIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogRml4IHJlZmNvdW50aW5nLgorCSAgKiBnc3QvZ3N0dHlwZWZpbmQuYzoKKwkgICogZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5jOgorCSAgKiBnc3QvZ3N0dHlwZWZpbmRmYWN0b3J5Lmg6CisKKzIwMDUtMDktMTYgMDA6Mzc6NTEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBjaGVjay9nc3QvZ3N0cGx1Z2luLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGx1Z2luLmM6CisJICB1bnZlcmJvc2lmeQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB1bnZlcmJvc2lmeQorCisyMDA1LTA5LTE2IDAwOjA4OjE1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJICBzb21lIHdoaXRlc3BhY2UgdG8gdHJpZ2dlciBhIGJ1aWxkCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHNvbWUgd2hpdGVzcGFjZSB0byB0cmlnZ2VyIGEgYnVpbGQKKworMjAwNS0wOS0xNiAwMDowMjoyNyArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkgIGdzdC9nc3RpbmRleC5jOiBnZXQgcmVmY291bnRpbmcgY29ycmVjdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0aW5kZXguYzogZ2V0IHJlZmNvdW50aW5nIGNvcnJlY3QuCisJICAqIGdzdC9nc3RyZWdpc3RyeS5jOiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYSBmZWF0dXJlL3BsdWdpbiBpcworCSAgbm90IGZvdW5kLgorCisyMDA1LTA5LTE1IDIzOjUxOjI0ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSAgY2hlY2svOiBBZGQgdGVzdAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL01ha2VmaWxlLmFtOgorCSAgKiBjaGVjay9nc3QvZ3N0cGx1Z2luLmM6IEFkZCB0ZXN0CisJICAqIGdzdC9nc3RwbHVnaW4uYzogRml4IHByb2JsZW1zIG5vdGljZWQgYnkgdGVzdHN1aXRlCisJICAqIGdzdC9nc3RwbHVnaW4uaDoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6CisJICAqIGdzdC9nc3RyZWdpc3RyeS5oOgorCisyMDA1LTA5LTE1IDIwOjU2OjMwICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSAgZ3N0L2dzdHBsdWdpbi5jOiBJbXBsZW1lbnQgc2VtaS1kZWNlbnQgcmVjb3VudGluZyBhbmQgbG9ja2luZyBpbiBwbHVnaW5zIGFuZCBwbHVnaW4gZmVhdHVyZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBsdWdpbi5jOiBJbXBsZW1lbnQgc2VtaS1kZWNlbnQgcmVjb3VudGluZyBhbmQgbG9ja2luZworCSAgaW4gcGx1Z2lucyBhbmQgcGx1Z2luIGZlYXR1cmVzLgorCSAgKiBnc3QvZ3N0cGx1Z2luLmg6CisJICAqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6CisJICAqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmg6CisJICAqIGdzdC9nc3RyZWdpc3RyeS5jOgorCisyMDA1LTA5LTE1IDE0OjIxOjA4ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIGNvbW1vbjoKKwkqIGdzdC9nc3RyZWdpc3RyeS5jOgorCSAgSW1wbGVtZW50IG1pc3NpbmcgZnVuY3Rpb24uIFRoaXMgaXMgZW5vdWdoIHRvIGdldCB0aGUgYmFzaWNzIG9mIHR5cGVmaW5kaW5nIHdvcmtpbmcgLSBvZ2dkZW11eCBzdWNjZWVkcyBub3cuIGRlY29kZWJpLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIEltcGxlbWVudCBtaXNzaW5nIGZ1bmN0aW9uLiBUaGlzIGlzIGVub3VnaCB0byBnZXQgdGhlIGJhc2ljcyBvZgorCSAgdHlwZWZpbmRpbmcgd29ya2luZyAtIG9nZ2RlbXV4IHN1Y2NlZWRzIG5vdy4gZGVjb2RlYmluIGlzIHN0aWxsIGJyb2tlbi4KKworMjAwNS0wOS0xNSAwNTo1ODozNyArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkgIGNvbmZpZ3VyZS5hYzogQWRkIC1uby11bmRlZmluZWQgdG8gR1NUX1BMVUdJTl9MREZMQUdTIChidWcgIzMxNjA3NikKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6IEFkZCAtbm8tdW5kZWZpbmVkIHRvIEdTVF9QTFVHSU5fTERGTEFHUyAoYnVnCisJICAjMzE2MDc2KQorCSAgKiBnc3QvYmFzZS9NYWtlZmlsZS5hbTogQWRkIC1uby11bmRlZmluZWQgdG8gTERGTEFHUyBmb3IgbGlicworCSAgKiBnc3QvY2hlY2svTWFrZWZpbGUuYW06CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06CisJICAqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9NYWtlZmlsZS5hbToKKworMjAwNS0wOS0xNSAwNTo0ODozMCArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkgIGNvbmZpZ3VyZS5hYzogUmVtb3ZlIGdldGJpdHMgbGlicmFyeS4gIE5vdGhpbmcgdXNlcyBpdCwgYW5kIGl0IHNob3VsZCBiZSBpbiBzb21ldGhpbmcgbGlrZSBsaWJvaWwgaWYgc29tZW9uZSBkaWQgd2FudC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzogUmVtb3ZlIGdldGJpdHMgbGlicmFyeS4gIE5vdGhpbmcgdXNlcyBpdCwgYW5kCisJICBpdCBzaG91bGQgYmUgaW4gc29tZXRoaW5nIGxpa2UgbGlib2lsIGlmIHNvbWVvbmUgZGlkIHdhbnQKKwkgIHRvIHVzZSBpdC4KKwkgICogbGlicy9nc3QvTWFrZWZpbGUuYW06CisJICAqIGxpYnMvZ3N0L2dldGJpdHMvTWFrZWZpbGUuYW06CisJICAqIGxpYnMvZ3N0L2dldGJpdHMvZ2J0ZXN0LmM6CisJICAqIGxpYnMvZ3N0L2dldGJpdHMvZ2V0Yml0cy5jOgorCSAgKiBsaWJzL2dzdC9nZXRiaXRzL2dldGJpdHMuaDoKKwkgICogbGlicy9nc3QvZ2V0Yml0cy9nc3RnZXRiaXRzX2dlbmVyaWMuYzoKKwkgICogbGlicy9nc3QvZ2V0Yml0cy9nc3RnZXRiaXRzX2kzODYuczoKKwkgICogbGlicy9nc3QvZ2V0Yml0cy9nc3RnZXRiaXRzX2lubC5oOgorCisyMDA1LTA5LTE1IDA1OjQyOjEzICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSAgZ3N0L01ha2VmaWxlLmFtOiBEaXN0IGdsaWItY29tcGF0LmgKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvTWFrZWZpbGUuYW06IERpc3QgZ2xpYi1jb21wYXQuaAorCisyMDA1LTA5LTE1IDAzOjIwOjQ5ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSAgY29uZmlndXJlLmFjOiBSZW1vdmUgZ3N0L3JlZ2lzdHJpZXMsIHNpbmNlIGl0J3Mgbm8gbG9uZ2VyIHVzZWQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOiBSZW1vdmUgZ3N0L3JlZ2lzdHJpZXMsIHNpbmNlIGl0J3Mgbm8gbG9uZ2VyIHVzZWQuCisJICAqIGdzdC9yZWdpc3RyaWVzL01ha2VmaWxlLmFtOgorCSAgKiBnc3QvcmVnaXN0cmllcy9nc3RsaWJ4bWxyZWdpc3RyeS5jOgorCSAgKiBnc3QvcmVnaXN0cmllcy9nc3RsaWJ4bWxyZWdpc3RyeS5oOgorCSAgKiBnc3QvcmVnaXN0cmllcy9nc3R4bWxyZWdpc3RyeS5jOgorCSAgKiBnc3QvcmVnaXN0cmllcy9nc3R4bWxyZWdpc3RyeS5oOgorCSAgKiBnc3QvcmVnaXN0cmllcy9yZWdpc3RyeXRlc3QuYzoKKworMjAwNS0wOS0xNSAwMTozODozMyArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkgIGdzdC86IENvbnZlcmdlbmNlIGlzIG5lYXIuICBTZXJpb3VzbHkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dsaWItY29tcGF0Lmg6CisJICAqIGdzdC9nc3RyZWdpc3RyeXhtbC5jOgorCSAgQ29udmVyZ2VuY2UgaXMgbmVhci4gIFNlcmlvdXNseS4KKworMjAwNS0wOS0xNSAwMTozNDo1MiArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkgIGdzdC9nbGliLWNvbXBhdC4qOiBBdHRlbXB0ICM0IHRvIGFwcGVhc2UgdGhlIGJ1aWxkYm90cy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ2xpYi1jb21wYXQuYzogKGdfbWtkaXJfd2l0aF9wYXJlbnRzKSwgKGdfbWtkaXIpLCAoZ19zdGF0KToKKwkgICogZ3N0L2dsaWItY29tcGF0Lmg6CisJICBBdHRlbXB0ICM0IHRvIGFwcGVhc2UgdGhlIGJ1aWxkYm90cy4KKworMjAwNS0wOS0xNSAwMToyNjo0MiArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkgIGdzdC9nbGliLWNvbXBhdC5jOiBBdHRlbXB0ICMzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nbGliLWNvbXBhdC5jOiAoZ19ta2Rpcl93aXRoX3BhcmVudHMpLCAoZ19ta2RpciksIChnX3N0YXQpOgorCSAgQXR0ZW1wdCAjMy4KKworMjAwNS0wOS0xNSAwMToyMDoyMiArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkgIGdzdC9nbGliLWNvbXBhdC5jOiBBdHRlbXB0ICMyLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nbGliLWNvbXBhdC5jOiAoZ19ta2Rpcl93aXRoX3BhcmVudHMpLCAoZ19ta2RpciksIChnX3N0YXQpOgorCSAgQXR0ZW1wdCAjMi4KKworMjAwNS0wOS0xNSAwMToxNDoxNyArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkgIGdzdC9NYWtlZmlsZS5hbTogT2ggeWVhaCwgbGliZ3N0cmVhbWVyLnNvIG5lZWRzIHRvIGNvbnRhaW4gdGhlIG5ldyBmdW5jdGlvbnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L01ha2VmaWxlLmFtOiBPaCB5ZWFoLCBsaWJnc3RyZWFtZXIuc28gbmVlZHMgdG8gY29udGFpbgorCSAgdGhlIG5ldyBmdW5jdGlvbnMuCisKKzIwMDUtMDktMTUgMDE6MTA6NTIgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJICBnc3QvZ2xpYi1jb21wYXQuKjogQWRkIHNvbWUgZnVuY3Rpb25zIHRoYXQgYXJlIGluIG5ld2VyIHZlcnNpb25zIG9mIGdsaWIgdGhhbiB3ZSBjYXJlIHRvIHJlcXVpcmUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dsaWItY29tcGF0LmM6IChnX21rZGlyX3dpdGhfcGFyZW50cyksIChnX21rZGlyKSwgKGdfc3RhdCk6CisJICAqIGdzdC9nbGliLWNvbXBhdC5oOiBBZGQgc29tZSBmdW5jdGlvbnMgdGhhdCBhcmUgaW4gbmV3ZXIgdmVyc2lvbnMKKwkgIG9mIGdsaWIgdGhhbiB3ZSBjYXJlIHRvIHJlcXVpcmUuCisJICAqIGdzdC9nc3RyZWdpc3RyeXhtbC5jOiBVc2UgdGhlbS4KKworMjAwNS0wOS0xNSAwMDo0ODo0NSArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkgIHBvL1BPVEZJTEVTLmluOiByZW1vdmUgZ3N0LXJlZ2lzdGVyLmMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBwby9QT1RGSUxFUy5pbjogcmVtb3ZlIGdzdC1yZWdpc3Rlci5jCisKKzIwMDUtMDktMTUgMDA6NDI6MDMgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJICBkb2NzL2dzdC86IERvY3VtZW50YXRpb24gdXBkYXRlcyBmb3IgcmVnaXN0cnkgY2hhbmdlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXM6CisJICAqIGRvY3MvZ3N0L3RtcGwvZ3N0ZWxlbWVudC5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdHBsdWdpbi5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdHBsdWdpbmZlYXR1cmUuc2dtbDoKKwkgIERvY3VtZW50YXRpb24gdXBkYXRlcyBmb3IgcmVnaXN0cnkgY2hhbmdlcy4KKworMjAwNS0wOS0xNSAwMDozNToxMSArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkgIGdzdC9nc3RyZWdpc3RyeXhtbC5jOiBDb3B5IGdfbWtkaXJfd2l0aF9wYXJlbnQoKSBmcm9tIGdsaWIsIGJlY2F1c2Ugd2UgZG9uJ3QgcmVxdWlyZSBnbGliLTIuOC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogQ29weSBnX21rZGlyX3dpdGhfcGFyZW50KCkgZnJvbSBnbGliLAorCSAgYmVjYXVzZSB3ZSBkb24ndCByZXF1aXJlIGdsaWItMi44LgorCisyMDA1LTA5LTE1IDAwOjIwOjE0ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSAgZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6IEFkZGVkLiAgRXNzZW50aWFsbHkgbW92ZWQgb3V0IG9mIHRoZSByZWdpc3RyaWVzIGRpcmVjdG9yeS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogQWRkZWQuICBFc3NlbnRpYWxseSBtb3ZlZCBvdXQgb2YgdGhlCisJICByZWdpc3RyaWVzIGRpcmVjdG9yeS4KKworMjAwNS0wOS0xNSAwMDoxMzoyNiArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkgIHJlbW92ZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL01ha2VmaWxlLmFtOgorCSAgKiBjaGVjay9nZW5lcmljL3N0YXRlcy5jOgorCSAgKiBnc3QvTWFrZWZpbGUuYW06CisJICAqIGdzdC9nc3QuYzoKKwkgICogZ3N0L2dzdC5oOgorCSAgKiBnc3QvZ3N0X3ByaXZhdGUuaDoKKwkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6CisJICAqIGdzdC9nc3RpbmRleC5jOgorCSAgKiBnc3QvZ3N0aW5mby5jOgorCSAgKiBnc3QvZ3N0cGx1Z2luLmM6CisJICAqIGdzdC9nc3RwbHVnaW4uaDoKKwkgICogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzoKKwkgICogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuaDoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6CisJICAqIGdzdC9nc3RyZWdpc3RyeS5oOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnlwb29sLmM6IHJlbW92ZQorCSAgKiBnc3QvZ3N0cmVnaXN0cnlwb29sLmg6IHJlbW92ZQorCSAgKiBnc3QvZ3N0dHlwZWZpbmQuYzoKKwkgICogZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5jOgorCSAgKiBnc3QvZ3N0dXJpLmM6CisJICAqIHRvb2xzL01ha2VmaWxlLmFtOgorCSAgKiB0b29scy9nc3QtY29tcHByZXAuYzoKKwkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzoKKwkgICogdG9vbHMvZ3N0LXJlZ2lzdGVyLmM6IHJlbW92ZQorCSAgKiB0b29scy9nc3QteG1saW5zcGVjdC5jOgorCSAgUmVnaXN0cnkgcmV3cml0ZS4gIENoYW5nZXMgcmVnaXN0cnkgZnJvbSBiZWluZyBhIGZpbGUgY3JlYXRlZAorCSAgYnkgYSB0b29sIGludG8gYSBzaW1wbGUgY2FjaGUgZmlsZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkKKwkgIGxpYmdzdHJlYW1lci4gIFJlbW92ZWQgZ3N0LXJlZ2lzdGVyIChiZWNhdXNlIGl0J3Mgbm8gbG9uZ2VyCisJICBuZWVkZWQpLiAgUmVtb3ZlIHJlZ2lzdHJ5IHBvb2xzLCBiZWNhdXNlIHdlIG9ubHkgaGF2ZSBvbmUKKwkgIHJlZ2lzdHJ5IGltcGxlbWVudGF0aW9uIChYTUwpLiAgRml4IHVwIG90aGVyIHN1YnN5c3RlbXMgYXMKKwkgIG5lY2Vzc2FyeS4KKworMjAwNS0wOS0xNCAyMjowNTo1NCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGNvbW1vbjoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZWxlbWVudC5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RlbnVtdHlwZXMuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0aW1wbGVtZW50c2ludGVyZmFjZS5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RpbmRleC5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RpbmRleGZhY3Rvcnkuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0aW5mby5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RvYmplY3Quc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0cGFkLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHBhZHRlbXBsYXRlLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHBpcGVsaW5lLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHBsdWdpbi5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RwbHVnaW5mZWF0dXJlLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHR5cGVzLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHZhbHVlLnNnbWw6CisJKiBkb2NzL2xpYnMvdG1wbC9nc3RkYXRhcHJvdG9jb2wuc2dtbDoKKwkqIGRvY3MvbGlicy90bXBsL2dzdGdldGJpdHMuc2dtbDoKKwkgIHdob29wcywgd3JvbmcgY29tbWl0CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHdob29wcywgd3JvbmcgY29tbWl0CisKKzIwMDUtMDktMTQgMjI6MDE6NDUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBjb21tb246CisJKiBkb2NzL1JFQURNRToKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZWxlbWVudC5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RlbnVtdHlwZXMuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0aW1wbGVtZW50c2ludGVyZmFjZS5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RpbmRleC5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RpbmRleGZhY3Rvcnkuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0aW5mby5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RvYmplY3Quc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0cGFkLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHBhZHRlbXBsYXRlLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHBpcGVsaW5lLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHBsdWdpbi5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RwbHVnaW5mZWF0dXJlLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHR5cGVzLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHZhbHVlLnNnbWw6CisJKiBkb2NzL2xpYnMvdG1wbC9nc3RkYXRhcHJvdG9jb2wuc2dtbDoKKwkqIGRvY3MvbGlicy90bXBsL2dzdGdldGJpdHMuc2dtbDoKKwkgIG5vdGVzIG9uIGRvY3VtZW50aW5nIGVsZW1lbnRzIGFuZCBwbHVnaW5zCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIG5vdGVzIG9uIGRvY3VtZW50aW5nIGVsZW1lbnRzIGFuZCBwbHVnaW5zCisKKzIwMDUtMDktMTQgMTU6MTY6MzMgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KKworCSogY29tbW9uOgorCSogZ3N0L01ha2VmaWxlLmFtOgorCSAgUmVzdCBvZiB0aGUgZml4IGZvciAzMTYxNTU6IGRvbid0IGNvbmZ1c2UgTWluR1cgd2hlbiBydW5uaW5nIGdsaWItbWtlbnVtcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBSZXN0IG9mIHRoZSBmaXggZm9yIDMxNjE1NTogZG9uJ3QgY29uZnVzZSBNaW5HVyB3aGVuIHJ1bm5pbmcgZ2xpYi1ta2VudW1zCisKKzIwMDUtMDktMTMgMTU6MDM6MDUgKzAwMDAgIFN0ZXZlIExob21tZSA8c3RldmUubGhvbW1lQGZyZWUuZnI+CisKKwkgIGZpbGUgZ3N0LXR5cGVmaW5kLnZjcHJvaiB3YXMgaW5pdGlhbGx5IGFkZGVkIG9uIGJyYW5jaCBCUkFOQ0gtR1NUUkVBTUVSLTBfOC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZmlsZSBnc3QtdHlwZWZpbmQudmNwcm9qIHdhcyBpbml0aWFsbHkgYWRkZWQgb24gYnJhbmNoIEJSQU5DSC1HU1RSRUFNRVItMF84LgorCisyMDA1LTA5LTEzIDE0OjQ5OjIzICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIGdzdC9nc3Rjb25maWcuaC5pbjoKKwkgIERvbid0IHVzZSB3aW5kb3dzIGxpbmtpbmcgYXR0cmlidXRlcyBpbiBNaW5HVworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBEb24ndCB1c2Ugd2luZG93cyBsaW5raW5nIGF0dHJpYnV0ZXMgaW4gTWluR1cKKworMjAwNS0wOS0xMyAxMTowMDo0NCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGdzdC9nc3R1dGlscy5jOiBBcHBhcmVudGx5IHBlb3BsZSB0aGluayBpdCdzIGJldHRlciBpZiB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgdHJ5IHRvIHNldCB0aGUgc3RhdGUgdG8gd2hhdGV2ZXIgc3RhdGUgdy4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3R1dGlscy5jOiAoc2V0X3N0YXRlX2FzeW5jX3RocmVhZF9mdW5jKSwKKwkgIChnc3RfZWxlbWVudF9zZXRfc3RhdGVfYXN5bmMpOgorCSAgQXBwYXJlbnRseSBwZW9wbGUgdGhpbmsgaXQncyBiZXR0ZXIgaWYgdGhpcyBmdW5jdGlvbiBkb2Vzbid0CisJICB0cnkgdG8gc2V0IHRoZSBzdGF0ZSB0byB3aGF0ZXZlciBzdGF0ZSB3YXMgYXNrZWQgZm9yIG9uIHRoZSBmaXJzdAorCSAgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIGZvciBhbnkgb2JqZWN0LiAgU2VyaW91c2x5LgorCisyMDA1LTA5LTEyIDE4OjE0OjAzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgYWRkIGEgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlX2FzeW5jIG1ldGhvZCB0aGF0IHNldHMgdGhlIHN0YXRlIGFuZCBzdGFydHMgYSB0aHJlYWQgdG8gbWFrZSBzdXJlIHRoZSBzdGF0ZSBjaGFuZ2UgY29tcGxlLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGdzdC9nc3R1dGlscy5jOiAoc2V0X3N0YXRlX2FzeW5jX3RocmVhZF9mdW5jKSwKKwkgIChnc3RfZWxlbWVudF9zZXRfc3RhdGVfYXN5bmMpOgorCSAgKiBnc3QvZ3N0dXRpbHMuaDoKKwkgIGFkZCBhIGdzdF9lbGVtZW50X3NldF9zdGF0ZV9hc3luYyBtZXRob2QgdGhhdAorCSAgc2V0cyB0aGUgc3RhdGUgYW5kIHN0YXJ0cyBhIHRocmVhZCB0byBtYWtlIHN1cmUgdGhlIHN0YXRlCisJICBjaGFuZ2UgY29tcGxldGVzIGFzIGJlc3QgYXMgaXQgY2FuCisKKzIwMDUtMDktMTIgMTc6MDE6MTggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBjaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwaXBlbGluZS5jOgorCSAgY29kaWZ5IGRlc2lnbitiZWhhdmlvdXIgaW4gdGVzdHN1aXRlIGFmdGVyIGRpc2N1c3Npb24KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgY29kaWZ5IGRlc2lnbitiZWhhdmlvdXIgaW4gdGVzdHN1aXRlIGFmdGVyIGRpc2N1c3Npb24KKworMjAwNS0wOS0xMiAxNjoxMDoxOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGRvY3MvOiBhZGQgYSBxdW90ZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L3RtcGwvZ3N0ZWxlbWVudC5zZ21sOgorCSAgKiBkb2NzL21hbnVhbC9hcHBlbmRpeC1xdW90ZXMueG1sOgorCSAgYWRkIGEgcXVvdGUKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X3NldF9zdGF0ZSk6CisJICBhZGQgc29tZSBkZWJ1ZworCisyMDA1LTA5LTEyIDEzOjQ1OjA0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZ3N0LzogUmVtb3ZlIHRoZSByZXF1aXJlbWVudCBmb3Igc3ViLWNsYXNzZXMgdG8gY2FsbCB0aGUgcGFyZW50IGltcGxlbWVudGF0aW9uIG9mIHByZXBhcmVfb3V0cHV0X2J1ZmZlciB3aXRoIGEgd3JhcHBlLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NsYXNzX2luaXQpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9wcmVwYXJlX291dHB1dF9idWYpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9oYW5kbGVfYnVmZmVyKToKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzogKGdzdF9jYXBzZmlsdGVyX3RyYW5zZm9ybV9pcCksCisJICAoZ3N0X2NhcHNmaWx0ZXJfcHJlcGFyZV9idWYpOgorCSAgUmVtb3ZlIHRoZSByZXF1aXJlbWVudCBmb3Igc3ViLWNsYXNzZXMgdG8gY2FsbCB0aGUgcGFyZW50CisJICBpbXBsZW1lbnRhdGlvbiBvZiBwcmVwYXJlX291dHB1dF9idWZmZXIgd2l0aCBhIHdyYXBwZXIgZnVuY3Rpb24uCisJICAqIGdzdC9nc3R0YWdsaXN0Lmg6CisJICAqIGdzdC9nc3R0YWdzZXR0ZXIuaDoKKwkgIEZpeCAjZGVmaW5lIHdyYXBwZXIKKworMjAwNS0wOS0xMSAxOToyMjoyMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBtb3JlIGRvYyBjbGVhbnVwcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICBtb3JlIGRvYyBjbGVhbnVwcworCisyMDA1LTA5LTExIDEzOjA3OjI1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZWxlbWVudC5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RwbHVnaW4uc2dtbDoKKwkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6CisJKiBnc3QvZ3N0dmFsdWUuaDoKKwkgIGRvYyBidWlsZCBjbGVhbiwgaHVycmF5CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGRvYyBidWlsZCBjbGVhbiwgaHVycmF5CisKKzIwMDUtMDktMTEgMTI6NTc6MzYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzOgorCSogZG9jcy9nc3QvdG1wbC9nc3RwYWQuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0dHlwZXMuc2dtbDoKKwkqIGdzdC9iYXNlL2dzdGFkYXB0ZXIuaDoKKwkqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJKiBnc3QvZ3N0YmluLmg6CisJKiBnc3QvZ3N0YnVmZmVyLmg6CisJKiBnc3QvZ3N0YnVzLmg6CisJKiBnc3QvZ3N0Y2Fwcy5oOgorCSogZ3N0L2dzdGNsb2NrLmg6CisJKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSogZ3N0L2dzdGV2ZW50Lmg6CisJKiBnc3QvZ3N0bWVzc2FnZS5oOgorCSogZ3N0L2dzdHBhZC5oOgorCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSogZ3N0L3JlZ2lzdHJpZXMvZ3N0bGlieG1scmVnaXN0cnkuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5oOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJICB2YXJpb3VzIGRvYyBmaXhlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB2YXJpb3VzIGRvYyBmaXhlcworCisyMDA1LTA5LTExIDEyOjAyOjAyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogY29uZmlndXJlLmFjOgorCSAgZml4IHNpbGx5IGJ1ZyB0aGF0IGNhdXNlZCBidWlsZCB0byBmYWlsIHdoZW4gY2hlY2sgaXMgbWlzc2luZworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaXggc2lsbHkgYnVnIHRoYXQgY2F1c2VkIGJ1aWxkIHRvIGZhaWwgd2hlbiBjaGVjayBpcyBtaXNzaW5nCisKKzIwMDUtMDktMTEgMTI6MDE6MTIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBkb2NzL2dzdC86IHJlYXJyYW5nZSBnc3R2YWx1ZSBzZWN0aW9uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZG9jcy9nc3QvdG1wbC9nc3R2YWx1ZS5zZ21sOgorCSAgcmVhcnJhbmdlIGdzdHZhbHVlIHNlY3Rpb24KKwkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSk6CisJICBOT05FIC0+IFZPSUQKKwkgICogZ3N0L2dzdHZhbHVlLmM6IChfZ3N0X3ZhbHVlX2luaXRpYWxpemUpOgorCSAgKiBnc3QvZ3N0dmFsdWUuaDoKKwkgIGRvYyB1cGRhdGVzCisKKzIwMDUtMDktMTEgMTE6NTc6MDggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSAgZGVidWcgZml4ZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZGVidWcgZml4ZXMKKworMjAwNS0wOS0wOSAyMzo0NToxNSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGNoZWNrL2dzdC1saWJzL2NvbnRyb2xsZXIuYzogSGVhZGVyIGluY2x1ZGUgZml4LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dzdC1saWJzL2NvbnRyb2xsZXIuYzoKKwkgIEhlYWRlciBpbmNsdWRlIGZpeC4KKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9kZWZhdWx0X3ByZXBhcmVfYnVmKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1faGFuZGxlX2J1ZmZlcik6CisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKKwkgIFNvbWUgbW9yZSBiYXNldHJhbnNmb3JtIGNoYW5nZXMgYW5kIGZpeGVzIHRvIGVuYWJsZSBzdWItY2xhc3NlcworCSAgdGhhdCBtb2RpZnkgYnVmZmVyIG1ldGFkYXRhIG9ubHkuCisJICAqIGdzdC9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6IChnc3RfY2Fwc2ZpbHRlcl9jbGFzc19pbml0KSwKKwkgIChnc3RfY2Fwc2ZpbHRlcl9pbml0KSwgKGdzdF9jYXBzZmlsdGVyX3RyYW5zZm9ybV9pcCksCisJICAoZ3N0X2NhcHNmaWx0ZXJfcHJlcGFyZV9idWYpOgorCSAgSWYgdGhlIG91dHB1dCBwYWQgaGFzIGZpeGVkIGFsbG93ZWQgY2FwcyBhbmQgaW5wdXQgYnVmZmVycworCSAgZG9uJ3QgaGF2ZSBhbnksIHNldCB0aGUgZml4ZWQgY2FwcyBvbiBvdXRnb2luZyBidWZmZXJzLgorCisyMDA1LTA5LTA5IDE4OjA1OjQwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgIG9iamVjdCBkZWJ1Z2dpbmcgaXMgZ29vZAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBvYmplY3QgZGVidWdnaW5nIGlzIGdvb2QKKworMjAwNS0wOS0wOSAxNzo0MjoyMCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGNoZWNrL2VsZW1lbnRzL2lkZW50aXR5LmM6IE1ha2UgdGhlIGVycm9yIGEgbGl0dGxlIGNsZWFyZXIgd2hlbiB0aGUgdGVzdCBmYWlscyBiZWNhdXNlIGlkZW50aXR5IG1hZGUgYSBjb3B5IG9mIHRoZSBidS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2VsZW1lbnRzL2lkZW50aXR5LmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBNYWtlIHRoZSBlcnJvciBhIGxpdHRsZSBjbGVhcmVyIHdoZW4gdGhlIHRlc3QgZmFpbHMgYmVjYXVzZQorCSAgaWRlbnRpdHkgbWFkZSBhIGNvcHkgb2YgdGhlIGJ1ZmZlci4KKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgIE5ldyBzeW1ib2xzIGluIGdzdGJhc2V0cmFuc2Zvcm0uaAorCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1fY2xhc3NfaW5pdCksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2luaXQpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3RyYW5zZm9ybV9zaXplKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fY29uZmlndXJlX2NhcHMpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldGNhcHMpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9kZWZhdWx0X3ByZXBhcmVfYnVmKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0X3VuaXRfc2l6ZSksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2J1ZmZlcl9hbGxvYyksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2hhbmRsZV9idWZmZXIpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NoYWluKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fY2hhbmdlX3N0YXRlKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Bhc3N0aHJvdWdoKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2luX3BsYWNlKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1faXNfaW5fcGxhY2UpOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6CisJICBDaGFuZ2UgQmFzZVRyYW5zZm9ybSB0byBzZXBhcmF0ZSBpbl9wbGFjZSBvcGVyYXRlIGZyb20gc2FtZV9jYXBzCisJICBvdXRwdXQuIGluX3BsYWNlIGltcGxpZXMgdGhhdCB0aGUgZWxlbWVudCBjYW4gcGVyZm9ybSB0aGUgdHJhbnNmb3JtCisJICBvbiBpbmNvbWluZyBidWZmZXJzIGluLXBsYWNlLCBldmVuIGlmIHRoZSBjYXBzIG9uIHRoZSBvdXRwdXQgYXJlCisJICBkaWZmZXJlbnQuCisJICBTdWItY2xhc3MgZWxlbWVudHMgY2FuIG5vdyBpbXBsZW1lbnQgc3BlY2lhbCBidWZmZXIgYWxsb2NhdGlvbgorCSAgbWV0aG9kcyBmb3Igb3V0Z29pbmcgYnVmZmVycyBpZiB0aGV5IHdpc2ggdG8uCisJICBCaWcgZG9jdW1lbnRhdGlvbiBhZGRpdGlvbi4KKwkgICogZ3N0L2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzogKGdzdF9jYXBzZmlsdGVyX3RyYW5zZm9ybV9pcCk6CisJICAqIGdzdC9lbGVtZW50cy9nc3RlbGVtZW50cy5jOgorCSAgQ2hhbmdlcyBmb3IgYmFzZXRyYW5zZm9ybSBtb2RpZmljYXRpb25zLgorCSAgKiBnc3QvZWxlbWVudHMvTWFrZWZpbGUuYW06CisJICAqIGdzdC9lbGVtZW50cy9nc3RmZHNyYy5jOiAoZ3N0X2Zkc3JjX2luaXQpLCAoZ3N0X2Zkc3JjX2NyZWF0ZSk6CisJICBDb21waWxlIGZpeC4gRXh0cmEgZGVidWcgb3V0cHV0LgorCisyMDA1LTA5LTA5IDE1OjE5OjI0ICswMDAwICBTdGV2ZSBMaG9tbWUgPHN0ZXZlLmxob21tZUBmcmVlLmZyPgorCisJICBmaWxlIGdzdGNvbnRyb2wudmNwcm9qIHdhcyBpbml0aWFsbHkgYWRkZWQgb24gYnJhbmNoIEJSQU5DSC1HU1RSRUFNRVItMF84LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaWxlIGdzdGNvbnRyb2wudmNwcm9qIHdhcyBpbml0aWFsbHkgYWRkZWQgb24gYnJhbmNoIEJSQU5DSC1HU1RSRUFNRVItMF84LgorCisyMDA1LTA5LTA5IDE0OjM0OjQzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgY2hlY2svZ3N0L2dzdHBhZC5jOiBhZGQgdGVzdHMgZm9yIHZhbGlkIHBhZCBuYW1pbmcKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9nc3QvZ3N0cGFkLmM6IChHU1RfU1RBUlRfVEVTVCksIChuYW1lX2lzX3ZhbGlkKSwKKwkgIChnc3RfcGFkX3N1aXRlKToKKwkgIGFkZCB0ZXN0cyBmb3IgdmFsaWQgcGFkIG5hbWluZworCSAgKiBnc3QvY2hlY2svZ3N0Y2hlY2suYzogKGdzdF9jaGVja19sb2dfbWVzc2FnZV9mdW5jKSwKKwkgIChnc3RfY2hlY2tfbG9nX2NyaXRpY2FsX2Z1bmMpOgorCSAgYWRkIEFTU0VSVF9XQVJOSU5HCisJICByZW1vdmUgcHJpbnRpbmcgb2YgY29kZSwgaXQgaXMgZnJhZ2lsZSB3aGVuIHRoZSBjb2RlIGNvbnRhaW5zCisJICAlIGFuZCB0aGUgbGluZSBudW1iZXIgaXMgZW5vdWdoIGluZm8KKwkgICogZ3N0L2NoZWNrL2dzdGNoZWNrLmg6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfdGVtcGxhdGVfbmV3KToKKwkgIGZpeCBtZW1sZWFrcworCisyMDA1LTA5LTA5IDEzOjI4OjA2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSAgYW5kIHRoZSBjaGFuZ2Vsb2cKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYW5kIHRoZSBjaGFuZ2Vsb2cKKworMjAwNS0wOS0wOSAxMzoyNjo1NCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGNvbmZpZ3VyZS5hYzogc2F5IHdoYXQgQ0hFQ0sgZmxhZ3Mgd2UgdXNlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgc2F5IHdoYXQgQ0hFQ0sgZmxhZ3Mgd2UgdXNlCisJICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy50eXBlczoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbToKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3QtY29udHJvbGxlci5jOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdC1jb250cm9sbGVyLmg6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0LWhlbHBlci5jOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdC1pbnRlcnBvbGF0aW9uLmM6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGhlbHBlci5jOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzoKKwkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKHByaW50X3BsdWdpbl9pbmZvKToKKwkgIHdlIGRvbid0IHVzZSBkYXNoZXMgaW4gaGVhZGVyIG5hbWVzCisKKzIwMDUtMDktMDkgMTI6MDI6NDEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBjaGVjay86IGFkZGluZyBhIHRlc3QgZm9yIHBpcGVsaW5lcyBhbmQgc3RhdGUgY2hhbmdlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL01ha2VmaWxlLmFtOgorCSAgKiBjaGVjay9nc3QvLmN2c2lnbm9yZToKKwkgICogY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmM6IChwb3BfbWVzc2FnZXMpLCAoR1NUX1NUQVJUX1RFU1QpLAorCSAgKGdzdF9waXBlbGluZV9zdWl0ZSksIChtYWluKToKKwkgIGFkZGluZyBhIHRlc3QgZm9yIHBpcGVsaW5lcyBhbmQgc3RhdGUgY2hhbmdlcworCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdldF9zdGF0ZV9mdW5jKToKKwkgIGFkZCBzb21lIGRlYnVnZ2luZworCSAgKiBnc3RyZWFtZXIuc3BlYy5pbjoKKwkgIGZpeCB1cCBzcGVjIGZpbGUKKworMjAwNS0wOS0wOCAxNzoyMzo1NyArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgorCSogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzcmMuaDoKKwkqIGdzdC9nc3RldmVudC5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuaDoKKwkgIFZhcmlvdXMgZml4ZXMgZm9yIHVuc2Vla2FibGUsIHVubW1hcGFibGUsIGFuZCBub24tbm9ybWFsIGZpbGVzLCBzbyB0aGF0IGZhbGxiYWNrIHRvIHJlYWQoKSByYXRoZXIgdGhhbiBtbWFwKCkgd29ya3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFZhcmlvdXMgZml4ZXMgZm9yIHVuc2Vla2FibGUsIHVubW1hcGFibGUsIGFuZCBub24tbm9ybWFsIGZpbGVzLCBzbyB0aGF0CisJICBmYWxsYmFjayB0byByZWFkKCkgcmF0aGVyIHRoYW4gbW1hcCgpIHdvcmtzLgorCSAgQWxsb3cgbmV3c2VnbWVudCBldmVudHMgd2l0aCBzdGFydCA9PSBlbmQsIHNvIHRoYXQgY2FzZXMgd2hlcmUgdGhhdCdzCisJICBjb3JyZWN0IHdvcmsgKGUuZy4gZmlsZXNyYyBvbiBhIHplcm8tc2l6ZSBmaWxlKS4KKworMjAwNS0wOS0wOCAxMTo0NToxMiArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgorCisJKiBkb2NzL3B3Zy9idWlsZGluZy1zdGF0ZS54bWw6CisJICBVcGRhdGUgdGhlIG1hbnVhbCBzZWN0aW9uIG9uIHN0YXRlIGNoYW5nZXMgZm9yIHdpbmdvJ3MgbmV3IEFQSQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBVcGRhdGUgdGhlIG1hbnVhbCBzZWN0aW9uIG9uIHN0YXRlIGNoYW5nZXMgZm9yIHdpbmdvJ3MgbmV3IEFQSQorCisyMDA1LTA5LTA3IDE1OjIyOjI5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZ3N0L2dzdHBsdWdpbi5jOiBDYWxsIGdfbW9kdWxlX2Nsb3NlIHdoZW4gd2UgZG9uJ3QgbG9hZCB0aGUgbW9kdWxlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBsdWdpbi5jOiAoZ3N0X3BsdWdpbl9sb2FkX2ZpbGUpOgorCSAgQ2FsbCBnX21vZHVsZV9jbG9zZSB3aGVuIHdlIGRvbid0IGxvYWQgdGhlIG1vZHVsZQorCSAgKiBnc3QvcmVnaXN0cmllcy9nc3RsaWJ4bWxyZWdpc3RyeS5jOgorCSAgKGdzdF94bWxfcmVnaXN0cnlfZ2V0X3Byb3BlcnR5KToKKwkgIFBvcnQgbGVhayBmaXggZnJvbSAwLjgKKworMjAwNS0wOS0wNyAxNDowODo0NiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBwby9QT1RGSUxFUy5pbjoKKwkgIG1vcmUgcmVuYW1lIGZpeGluZyAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgbW9yZSByZW5hbWUgZml4aW5nIC4uLgorCisyMDA1LTA5LTA3IDEzOjIyOjE2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIHJlbmFtZWQgZ3N0dGFnIC0+IGdzdHRhZ2xpc3QsIGdzdHRhZ2ludGVyZmFjZSAtPiBnc3R0YWdzZXR0ZXIgaW5saW5lZCBkb2NzIGZvciBnc3R0cmFjZSwgZ3N0dHJhc2hzdGFjaworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvLmN2c2lnbm9yZToKKwkgICogZG9jcy9nc3QvdG1wbC9nc3R0cmFjZS5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdHRyYXNoc3RhY2suc2dtbDoKKwkgICogZ3N0L01ha2VmaWxlLmFtOgorCSAgKiBnc3QvZ3N0Lmg6CisJICAqIGdzdC9nc3RlbGVtZW50Lmg6CisJICAqIGdzdC9nc3RldmVudC5oOgorCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOgorCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgorCSAgKiBnc3QvZ3N0dGFnLmM6CisJICAqIGdzdC9nc3R0YWcuaDoKKwkgICogZ3N0L2dzdHRhZ2ludGVyZmFjZS5jOgorCSAgKiBnc3QvZ3N0dGFnaW50ZXJmYWNlLmg6CisJICAqIGdzdC9nc3R0YWdsaXN0LmM6CisJICAqIGdzdC9nc3R0YWdsaXN0Lmg6CisJICAqIGdzdC9nc3R0YWdzZXR0ZXIuYzoKKwkgICogZ3N0L2dzdHRhZ3NldHRlci5oOgorCSAgKiBnc3QvZ3N0dHJhY2UuYzoKKwkgICogZ3N0L2dzdHRyYWNlLmg6CisJICAqIGdzdC9nc3R0cmFzaHN0YWNrLmM6CisJICByZW5hbWVkIGdzdHRhZyAtPiBnc3R0YWdsaXN0LCBnc3R0YWdpbnRlcmZhY2UgLT4gZ3N0dGFnc2V0dGVyCisJICBpbmxpbmVkIGRvY3MgZm9yIGdzdHRyYWNlLCBnc3R0cmFzaHN0YWNrCisKKzIwMDUtMDktMDcgMTI6MzU6MjMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZ3N0Lzogc3BsaXR0ZWQgZ3N0dHlwZWZpbmQgaW50byBnc3R0eXBlZmluZCwgZ3N0dHlwZWZpbmRmYWN0b3J5CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L01ha2VmaWxlLmFtOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0YnVmZmVyc3RvcmUuaDoKKwkgICogZ3N0L2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50Lmg6CisJICAqIGdzdC9nc3QuaDoKKwkgICogZ3N0L2dzdHR5cGVmaW5kLmM6CisJICAqIGdzdC9nc3R0eXBlZmluZC5oOgorCSAgKiBnc3QvZ3N0dHlwZWZpbmRmYWN0b3J5LmM6IChnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X3R5cGUpLAorCSAgKGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9jbGFzc19pbml0KSwgKGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9pbml0KSwKKwkgIChnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZGlzcG9zZSksCisJICAoZ3N0X3R5cGVfZmluZF9mYWN0b3J5X3VubG9hZF90aHlzZWxmKSwKKwkgIChnc3RfdHlwZV9maW5kX2xvYWRfcGx1Z2luKSwgKGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfbGlzdCksCisJICAoZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9jYXBzKSwKKwkgIChnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2V4dGVuc2lvbnMpLAorCSAgKGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9jYWxsX2Z1bmN0aW9uKToKKwkgICogZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5oOgorCSAgKiBnc3QvcmVnaXN0cmllcy9nc3RsaWJ4bWxyZWdpc3RyeS5jOgorCSAgKiBnc3QvcmVnaXN0cmllcy9nc3R4bWxyZWdpc3RyeS5jOgorCSAgc3BsaXR0ZWQgZ3N0dHlwZWZpbmQgaW50byBnc3R0eXBlZmluZCwgZ3N0dHlwZWZpbmRmYWN0b3J5CisKKzIwMDUtMDktMDcgMTA6MDY6NTYgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYyAoZ3N0X2Jhc2Vfc2lua19hY3RpdmF0ZV9wdWxsKTogRml4IGEgcmFjZSBjb25kaXRpb24gd2hlcmVieSB0aGUgcGFkJ3MgdGFzayBmdW5jdGlvbiBpcyBlbnRlcmVkLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDktMDcgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmMgKGdzdF9iYXNlX3NpbmtfYWN0aXZhdGVfcHVsbCk6IEZpeCBhIHJhY2UKKwkgIGNvbmRpdGlvbiB3aGVyZWJ5IHRoZSBwYWQncyB0YXNrIGZ1bmN0aW9uIGlzIGVudGVyZWQgYmVmb3JlIHRoZQorCSAgcGFkX21vZGUgdmFyaWFibGUgd2FzIHNldC4KKworMjAwNS0wOS0wNiAyMjo1NzowNSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGdzdC9nc3RwYWQuYzogQ2F0Y2ggbWlzYmVoYXZpbmcgcGFkX2FsbG9jIGZ1bmN0aW9ucyB0aGF0IGRvbid0IHNldCB1cCBjYXBzIGFuZCBkbyBpdCBmb3IgdGhlbS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2FsbG9jX2J1ZmZlcik6CisJICBDYXRjaCBtaXNiZWhhdmluZyBwYWRfYWxsb2MgZnVuY3Rpb25zIHRoYXQgZG9uJ3QKKwkgIHNldCB1cCBjYXBzIGFuZCBkbyBpdCBmb3IgdGhlbS4KKworMjAwNS0wOS0wNiAyMjowMzowMSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBjaGVjay9waXBlbGluZXMvc2ltcGxlX2xhdW5jaF9saW5lcy5jOiB0ZXN0IGZvciBwaXBlIT1OVUxMCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svcGlwZWxpbmVzL3NpbXBsZV9sYXVuY2hfbGluZXMuYzogKHJ1bl9waXBlbGluZSk6CisJICB0ZXN0IGZvciBwaXBlIT1OVUxMCisJICAqIGRvY3MvZ3N0L3RtcGwvLmN2c2lnbm9yZToKKwkgICogZG9jcy9nc3QvdG1wbC9nc3RtZW1jaHVuay5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdHBhcnNlLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvZ3N0dGFnbGlzdC5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdHRhZ3NldHRlci5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdHR5cGVmaW5kLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvZ3N0dHlwZWZpbmRmYWN0b3J5LnNnbWw6CisJICAqIGdzdC9nc3RtZW1jaHVuay5jOgorCSAgKiBnc3QvZ3N0cGFyc2UuYzoKKwkgICogZ3N0L2dzdHRhZy5jOgorCSAgKiBnc3QvZ3N0dGFnaW50ZXJmYWNlLmM6CisJICAqIGdzdC9nc3R0eXBlZmluZC5jOgorCSAgKiBnc3QvZ3N0dHlwZWZpbmQuaDoKKwkgIGlubGluZWQgbW9yZSBkb2NzCisKKzIwMDUtMDktMDYgMTg6MTg6NDggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBjaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgorCSAgYWRkIGEgY2hlY2sgZm9yIGEgZ2hvc3RwYWQgdGhhdCBkb2Vzbid0IGhhdmUgYSB0YXJnZXQgYmVpbmcgbGlua2VkCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFkZCBhIGNoZWNrIGZvciBhIGdob3N0cGFkIHRoYXQgZG9lc24ndCBoYXZlIGEgdGFyZ2V0IGJlaW5nIGxpbmtlZAorCisyMDA1LTA5LTA2IDE0OjExOjIxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogY29uZmlndXJlLmFjOgorCSAgYmFjayB0byBoZWFkCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGJhY2sgdG8gaGVhZAorCis9PT0gcmVsZWFzZSAwLjkuMiA9PT0KKworMjAwNS0wOS0wNiAxNDowMjoxNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIE5FV1M6CisJKiBSRUFETUU6CisJKiBSRUxFQVNFOgorCSogY29uZmlndXJlLmFjOgorCSAgcmVsZWFzaW5nIDAuOS4yCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJlbGVhc2luZyAwLjkuMgorCisyMDA1LTA5LTA2IDExOjQ1OjAwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogUkVBRE1FOgorCSogY29tbW9uOgorCSAgdXBkYXRlIHJlYWRtZSB3aXRoIGV4cGxhbmF0aW9uIG9mIG1vZHVsZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgdXBkYXRlIHJlYWRtZSB3aXRoIGV4cGxhbmF0aW9uIG9mIG1vZHVsZXMKKworMjAwNS0wOS0wNiAwOTo1MjoyMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIGNvbW1vbjoKKwkqIGRvY3MvcmFuZG9tL0NoYW5nZUxvZy0wLjg6CisJICBjaGFuZ2Vsb2cgc3BsaXQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgY2hhbmdlbG9nIHNwbGl0CisKKzIwMDUtMDktMDUgMTc6NTU6MTAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBhdXRvZ2VuLnNoOgorCSogZG9jcy9nc3QvdG1wbC9nc3RwbHVnaW4uc2dtbDoKKwkgIG1haW50ZW5hbmNlIHVwZGF0ZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgbWFpbnRlbmFuY2UgdXBkYXRlcworCisyMDA1LTA5LTA1IDE3OjUzOjI0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOgorCSAgYWRkaW5nIC1iYWQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkaW5nIC1iYWQKKworMjAwNS0wOS0wNSAxNjo1NDo1NCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvcmVnaXN0cmllcy9nc3R4bWxyZWdpc3RyeS4qOiBhbmQgdXBkYXRlIHRvIG5ld2VyIEFQSS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvcmVnaXN0cmllcy9nc3R4bWxyZWdpc3RyeS5oOgorCSAgKiBnc3QvcmVnaXN0cmllcy9nc3R4bWxyZWdpc3RyeS5jOiBhbmQgdXBkYXRlIHRvIG5ld2VyIEFQSS4KKwkgIEluY2lkZW50YWxseSB0aGV5IHNob3VsZCBiZSBhIGJpdCBmYXN0ZXIgbm93IHRoYXQgdGhleSBkb24ndCBoYXZlCisJICB0byBwYXJzZSB0aGUgY2Fwcy4KKworMjAwNS0wOS0wNSAxNjo1Mjo1NiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvcmVnaXN0cmllcy9nc3R4bWxyZWdpc3RyeS4qOiBVbS4uLiByZXN1cnJlY3QuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wOS0wNSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L3JlZ2lzdHJpZXMvZ3N0eG1scmVnaXN0cnkuaDoKKwkgICogZ3N0L3JlZ2lzdHJpZXMvZ3N0eG1scmVnaXN0cnkuYzogVW0uLi4gcmVzdXJyZWN0Li4uCisKKzIwMDUtMDktMDUgMTY6MzY6NDcgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L3JlZ2lzdHJpZXMvZ3N0eG1scmVnaXN0cnkuKjogUmVtb3ZlIGZyb20gQ1ZTLCB0aGV5IHdlcmUgcmVwbGFjZWQgYnkgdGhlIGxpYnhtbCByZWdpc3RyeSBhIHdoaWxlIGJhY2sKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wOS0wNSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L3JlZ2lzdHJpZXMvZ3N0eG1scmVnaXN0cnkuaDoKKwkgICogZ3N0L3JlZ2lzdHJpZXMvZ3N0eG1scmVnaXN0cnkuYzogUmVtb3ZlIGZyb20gQ1ZTLCB0aGV5IHdlcmUKKwkgIHJlcGxhY2VkIGJ5IHRoZSBsaWJ4bWwgcmVnaXN0cnkgYSB3aGlsZSBiYWNrCisKKzIwMDUtMDktMDUgMTE6NTQ6NTUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBjaGVjay9nZW5lcmljLy5naXRpZ25vcmU6CisJKiBjaGVjay9nc3QvLmdpdGlnbm9yZToKKwkqIGRvY3MvUkVBRE1FOgorCSogZXhhbXBsZXMvcHdnLy5naXRpZ25vcmU6CisJKiB0ZXN0cy9jaGVjay9nZW5lcmljLy5naXRpZ25vcmU6CisJKiB0ZXN0cy9jaGVjay9nc3QvLmdpdGlnbm9yZToKKwkqIHRlc3RzL29sZC9leGFtcGxlcy9wd2cvLmdpdGlnbm9yZToKKwkgIG1haW50ZW5hbmNlIHVwZGF0ZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgbWFpbnRlbmFuY2UgdXBkYXRlcworCisyMDA1LTA5LTA1IDA5OjM4OjM4ICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6CisJICBSZXZlciB0byAxLjgwIHZlcnNpb24gb2YgdGhpcyBmaWxlIGFzIEdzdFV0aWxzIGlzIG5vdCBhcyBkZWFkIGFzIGl0IHNlZW1lZAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBSZXZlciB0byAxLjgwIHZlcnNpb24gb2YgdGhpcyBmaWxlIGFzIEdzdFV0aWxzIGlzIG5vdCBhcyBkZWFkIGFzIGl0IHNlZW1lZAorCisyMDA1LTA5LTA1IDA5OjIzOjQ0ICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+CisKKwkqIGNvbW1vbjoKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6CisJICByZW1vdmUgR3N0VXRpbHMgbWVudGlvbiBhcyBpdCBpcyBub3cgZ29uZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICByZW1vdmUgR3N0VXRpbHMgbWVudGlvbiBhcyBpdCBpcyBub3cgZ29uZQorCisyMDA1LTA5LTA0IDExOjAxOjQ0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogY29tbW9uOgorCSogcGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay11bmluc3RhbGxlZC5wYy5pbjoKKwkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2sucGMuaW46CisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vY2EucG86CisJKiBwby9jcy5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSAgbmVlZCB0byBhZGQgLWxjaGVjayB0byB0aGUgcGtnY29uZmlnIGZpbGUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgbmVlZCB0byBhZGQgLWxjaGVjayB0byB0aGUgcGtnY29uZmlnIGZpbGUKKworMjAwNS0wOS0wMyAxNzozNjoyMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGdzdC9nc3RwbHVnaW4uYzoKKwkgIGZpeCBmb3IgYSBjcml0aWNhbCB3aGVuIGEgbW9kdWxlIHJldHVybnMgTlVMTCBvbiBvcGVuaW5nCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGZpeCBmb3IgYSBjcml0aWNhbCB3aGVuIGEgbW9kdWxlIHJldHVybnMgTlVMTCBvbiBvcGVuaW5nCisKKzIwMDUtMDktMDMgMTc6MDA6NTIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBkb2NzL2dzdC90bXBsL2dzdHBsdWdpbi5zZ21sOgorCSogZ3N0L2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6CisJKiBnc3QvZ3N0LmM6CisJKiBnc3QvZ3N0cGx1Z2luLmM6CisJKiBnc3QvZ3N0cGx1Z2luLmg6CisJKiBnc3QvcmVnaXN0cmllcy9nc3RsaWJ4bWxyZWdpc3RyeS5jOgorCSogZ3N0L3JlZ2lzdHJpZXMvZ3N0eG1scmVnaXN0cnkuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzoKKwkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6CisJICBhZGQgYSBzb3VyY2UgcGx1Z2luIGRlc2NyaXB0aW9uIGZpZWxkLCB0byByZXByZXNlbnQgdGhlIHNvdXJjZSBtb2R1bGUgdGhpcyBwbHVnaW4gaXMgYSBwYXJ0IG9mLiAgQnkgZGVmYXVsdCBHU1RfUExVR0kuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkIGEgc291cmNlIHBsdWdpbiBkZXNjcmlwdGlvbiBmaWVsZCwgdG8gcmVwcmVzZW50IHRoZSBzb3VyY2UKKwkgIG1vZHVsZSB0aGlzIHBsdWdpbiBpcyBhIHBhcnQgb2YuICBCeSBkZWZhdWx0IEdTVF9QTFVHSU5fREVGSU5FCisJICB3aWxsIHNldCBpdCB0byBQQUNLQUdFLCB3aGljaCBpcyBhdXRvbWFrZSdzIGlkZWEgb2YgdGhlIG5hbWUgb2YKKwkgIHRoZSBzb3VyY2UgcHJvamVjdC4KKworMjAwNS0wOS0wMyAxNjoxNjoxNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGNvbW1vbjoKKwkqIGRvY3MvaHRtbGluc3RhbGwubWFrOgorCSAgZml4IGRpc3RjaGVjaworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaXggZGlzdGNoZWNrCisKKzIwMDUtMDktMDMgMTQ6MjA6MTAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBNYWtlZmlsZS5hbToKKwkqIGRvY3MvaHRtbGluc3RhbGwubWFrOgorCSAgZW5hYmxlIGRvY3MgYnVpbGQgZm9yIGRpc3RjaGVjaworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBlbmFibGUgZG9jcyBidWlsZCBmb3IgZGlzdGNoZWNrCisKKzIwMDUtMDktMDMgMTM6NTQ6MjYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBkb2NzL3BsdWdpbnMvLmdpdGlnbm9yZToKKwkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKKwkqIGRvY3MvcGx1Z2lucy9nc3Rkb2MtbWtkYjoKKwkqIGRvY3MvcGx1Z2lucy9nc3Rkb2MtbWt0bXBsOgorCSogZG9jcy9wbHVnaW5zL2dzdGRvYy1zY2Fub2JqOgorCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLWRvY3Muc2dtbDoKKwkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy1zZWN0aW9ucy50eHQ6CisJKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMudHlwZXMuaW46CisJKiBkb2NzL3BsdWdpbnMvdG1wbC9hYzNkZWMuc2dtbDoKKwkqIGRvY3MvcGx1Z2lucy90bXBsL2FjM3BhcnNlLnNnbWw6CisJKiBkb2NzL3BsdWdpbnMvdG1wbC9hdWRpb3NjYWxlLnNnbWw6CisJKiBkb2NzL3BsdWdpbnMvdG1wbC9jb2Jpbi5zZ21sOgorCSogZG9jcy9wbHVnaW5zL3RtcGwvZHZkc3JjLnNnbWw6CisJKiBkb2NzL3BsdWdpbnMvdG1wbC9leGFtcGxlLnNnbWw6CisJKiBkb2NzL3BsdWdpbnMvdG1wbC9nc3RhdmllbmNvZGVyLnNnbWw6CisJKiBkb2NzL3BsdWdpbnMvdG1wbC9nc3RqcGVnLnNnbWw6CisJKiBkb2NzL3BsdWdpbnMvdG1wbC9nc3RqcGVnZGVjLnNnbWw6CisJKiBkb2NzL3BsdWdpbnMvdG1wbC9nc3RqcGVnZW5jLnNnbWw6CisJKiBkb2NzL3BsdWdpbnMvdG1wbC9nc3RtcGVnMWVuY29kZXIuc2dtbDoKKwkqIGRvY3MvcGx1Z2lucy90bXBsL2dzdG1wZWcyZW5jLnNnbWw6CisJKiBkb2NzL3BsdWdpbnMvdG1wbC9nc3RtcGVnMnBsYXkuc2dtbDoKKwkqIGRvY3MvcGx1Z2lucy90bXBsL2dzdG1wZWdfcGxheS5zZ21sOgorCSogZG9jcy9wbHVnaW5zL3RtcGwvZ3N0bXBlZ2F1ZGlvLnNnbWw6CisJKiBkb2NzL3BsdWdpbnMvdG1wbC9nc3RtcGcxMjMuc2dtbDoKKwkqIGRvY3MvcGx1Z2lucy90bXBsL2dzdHBhcnNlYXUuc2dtbDoKKwkqIGRvY3MvcGx1Z2lucy90bXBsL2dzdHBhcnNlYXZpLnNnbWw6CisJKiBkb2NzL3BsdWdpbnMvdG1wbC9nc3RwYXJzZXdhdi5zZ21sOgorCSogZG9jcy9wbHVnaW5zL3RtcGwvZ3N0cmVhbWVyLXBsdWdpbnMtdW51c2VkLnNnbWw6CisJKiBkb2NzL3BsdWdpbnMvdG1wbC9nc3RzcGVjdHJ1bS5zZ21sOgorCSogZG9jcy9wbHVnaW5zL3RtcGwvZ3N0djRsc3JjLnNnbWw6CisJKiBkb2NzL3BsdWdpbnMvdG1wbC9nc3R3aW5jb2RlYy5zZ21sOgorCSogZG9jcy9wbHVnaW5zL3RtcGwvZ3N0d2luZGVjLnNnbWw6CisJKiBkb2NzL3BsdWdpbnMvdG1wbC9nc3R3aW5lbmMuc2dtbDoKKwkqIGRvY3MvcGx1Z2lucy90bXBsL2dzdHhhLnNnbWw6CisJKiBkb2NzL3BsdWdpbnMvdG1wbC9nc3R4aW5nLnNnbWw6CisJKiBkb2NzL3BsdWdpbnMvdG1wbC9tZWRpYW4uc2dtbDoKKwkqIGRvY3MvcGx1Z2lucy90bXBsL21wMXZpZGVvcGFyc2Uuc2dtbDoKKwkqIGRvY3MvcGx1Z2lucy90bXBsL21wMnZpZGVvcGFyc2Uuc2dtbDoKKwkqIGRvY3MvcGx1Z2lucy90bXBsL21wM3BhcnNlLnNnbWw6CisJKiBkb2NzL3BsdWdpbnMvdG1wbC9tcGVnMXBhcnNlLnNnbWw6CisJKiBkb2NzL3BsdWdpbnMvdG1wbC9tcGVnMnBhcnNlLnNnbWw6CisJKiBkb2NzL3BsdWdpbnMvdG1wbC9tcGVnMnN1YnQuc2dtbDoKKwkqIGRvY3MvcGx1Z2lucy90bXBsL3J0anBlZ2RlYy5zZ21sOgorCSogZG9jcy9wbHVnaW5zL3RtcGwvcnRqcGVnZW5jLnNnbWw6CisJKiBkb2NzL3BsdWdpbnMvdG1wbC9zbW9vdGguc2dtbDoKKwkqIGRvY3MvcGx1Z2lucy90bXBsL3Ntb290aHdhdmUuc2dtbDoKKwkqIGRvY3MvcGx1Z2lucy90bXBsL3NwaW5kZW50aXR5LnNnbWw6CisJKiBkb2NzL3BsdWdpbnMvdG1wbC9zdGVyZW8uc2dtbDoKKwkqIGRvY3MvcGx1Z2lucy90bXBsL3N5bmFlc3RoZXNpYS5zZ21sOgorCSogZG9jcy9wbHVnaW5zL3RtcGwvc3lzdGVtX2VuY29kZS5zZ21sOgorCSogZG9jcy9wbHVnaW5zL3RtcGwvdmNkc3JjLnNnbWw6CisJKiBkb2NzL3BsdWdpbnMvdG1wbC92aWRlb3NjYWxlLnNnbWw6CisJKiBkb2NzL3BsdWdpbnMvdG1wbC92aWRlb3Npbmsuc2dtbDoKKwkqIGRvY3MvcGx1Z2lucy90bXBsL3ZvbHVtZS5zZ21sOgorCSogZG9jcy9wbHVnaW5zL3RtcGwvdm9yYmlzZGVjLnNnbWw6CisJKiBkb2NzL3BsdWdpbnMvdG1wbC92b3JiaXNlbmMuc2dtbDoKKwkqIGRvY3MvcGx1Z2lucy90bXBsL3Z1bWV0ZXIuc2dtbDoKKwkgIHJlbW92ZSBvbGQgcGx1Z2lucyBkb2NzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJlbW92ZSBvbGQgcGx1Z2lucyBkb2NzCisKKzIwMDUtMDktMDMgMTM6NDk6NDkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBNYWtlZmlsZS5hbToKKwkqIGF1dG9nZW4uc2g6CisJKiBjb21tb246CisJKiBjb25maWd1cmUuYWM6CisJKiBkb2NzL01ha2VmaWxlLmFtOgorCSogZG9jcy9mYXEvTWFrZWZpbGUuYW06CisJKiBkb2NzL2dzdC90bXBsL2dzdGVsZW1lbnQuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0dHlwZXMuc2dtbDoKKwkqIGRvY3MvaHRtbGluc3RhbGwubWFrOgorCSogZG9jcy9tYW51YWwvTWFrZWZpbGUuYW06CisJKiBkb2NzL3B3Zy9NYWtlZmlsZS5hbToKKwkqIGdzdHJlYW1lci5zcGVjLmluOgorCSogcG8vYWYucG86CisJKiBwby9hei5wbzoKKwkqIHBvL2NhLnBvOgorCSogcG8vY3MucG86CisJKiBwby9kZS5wbzoKKwkqIHBvL2VuX0dCLnBvOgorCSogcG8vZnIucG86CisJKiBwby9pdC5wbzoKKwkqIHBvL25iLnBvOgorCSogcG8vbmwucG86CisJKiBwby9ydS5wbzoKKwkqIHBvL3NxLnBvOgorCSogcG8vc3IucG86CisJKiBwby9zdi5wbzoKKwkqIHBvL3RyLnBvOgorCSogcG8vdWsucG86CisJKiBwby92aS5wbzoKKwkgIGNsZWFuIHVwIGRvY3MgYnVpbGQgYSBsaXR0bGU7IGhhdmUgZG9jZGlyIGJlIGFuIG92ZXJyaWRhYmxlIGluc3RhbGwgbG9jYXRpb247IHNlcGFyYXRlIGd0ay1kb2MgYW5kIGRvY2Jvb2sgYml0cworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBjbGVhbiB1cCBkb2NzIGJ1aWxkIGEgbGl0dGxlOyBoYXZlIGRvY2RpciBiZSBhbiBvdmVycmlkYWJsZSBpbnN0YWxsIGxvY2F0aW9uOyBzZXBhcmF0ZSBndGstZG9jIGFuZCBkb2Nib29rIGJpdHMKKworMjAwNS0wOS0wMiAyMzozNjoyNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGdzdC9nc3R1cmkuaDoKKwkgIHdoaXRlc3BhY2UgY2xlYW51cHMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgd2hpdGVzcGFjZSBjbGVhbnVwcworCisyMDA1LTA5LTAyIDIzOjE3OjI2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiBBZGQgY29tbWVudC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19wYWRfYnVmZmVyX2FsbG9jKToKKwkgIEFkZCBjb21tZW50LgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzogKGdzdF9mYWtlX3NpbmtfaW5pdCksCisJICAoZ3N0X2Zha2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgorCSAgTWFrZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gdGhyZWFkLXNhZmUuCisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfYWxsb2NfYnVmZmVyKToKKwkgIFNldCBvZmZzZXQgb24gZ2VuZXJpYyBidWZmZXIgYWxsb2NhdGVkIGJ5IGZhbGxiYWNrLgorCisyMDA1LTA5LTAyIDIzOjAzOjM2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2dzdHRyYXNoc3RhY2suaDoKKwkgIHdoaXRlc3BhY2UgZml4ZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgd2hpdGVzcGFjZSBmaXhlcworCisyMDA1LTA5LTAyIDIxOjM3OjU1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIHJ1biB0aGUgd2luZ28tbWFnaWMgc2NyaXB0IGFnYWluc3QgdGhlIGRvY3MKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdGVsZW1lbnQuc2dtbDoKKwkgICogZ3N0L2dzdHBhZC5jOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdC1jb250cm9sbGVyLmM6CisJICAoZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfc2V0X2ludGVycG9sYXRpb25fbW9kZSksCisJICAoZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfbmV3KSwKKwkgIChnc3RfY29udHJvbGxlcl9maW5kX2NvbnRyb2xsZWRfcHJvcGVydHkpOgorCSAgcnVuIHRoZSB3aW5nby1tYWdpYyBzY3JpcHQgYWdhaW5zdCB0aGUgZG9jcworCisyMDA1LTA5LTAyIDE4OjM2OjA5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0cXVldWUuc2dtbDoKKwkgIHJlbW92ZWQgZmlsZSBhZ2FpbgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICByZW1vdmVkIGZpbGUgYWdhaW4KKworMjAwNS0wOS0wMiAxNzoyMzowNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBtZXJnZWQgZWxlbWVudGRldGFpbHMgZG9jcyBpbnRvIGVsZW1lbnRmYWN0b3J5IGRvY3MgaW5saW5lZCBib3RoCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZG9jcy9nc3QvdG1wbC8uY3ZzaWdub3JlOgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdGVsZW1lbnRkZXRhaWxzLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvZ3N0ZWxlbWVudGZhY3Rvcnkuc2dtbDoKKwkgICogZ3N0L2dzdC5jOgorCSAgKiBnc3QvZ3N0YnVzLmM6CisJICAqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgorCSAgKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKKwkgIG1lcmdlZCBlbGVtZW50ZGV0YWlscyBkb2NzIGludG8gZWxlbWVudGZhY3RvcnkgZG9jcworCSAgaW5saW5lZCBib3RoCisKKzIwMDUtMDktMDIgMTY6NDQ6NTcgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdGVsZW1lbnQuaDogQWRkIG1hZ2ljYWwgcGl4aWUgZHVzdCB0byBtYWtlIGdsaWItbWtlbnVtcyBjb25zaWRlciB0aGlzIGVudW0gYW4gZW51bSBhbmQgbm90IGEgZmxhZ3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDktMDIgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3RlbGVtZW50Lmg6IEFkZCBtYWdpY2FsIHBpeGllIGR1c3QgdG8gbWFrZSBnbGliLW1rZW51bXMKKwkgIGNvbnNpZGVyIHRoaXMgZW51bSBhbiBlbnVtIGFuZCBub3QgYSBmbGFncy4KKworMjAwNS0wOS0wMiAxNjoxNzoyMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBtb3JlIGRvY3MgaW5saW5lZAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvLmN2c2lnbm9yZToKKwkgICogZG9jcy9nc3QvdG1wbC9nc3RnaG9zdHBhZC5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdGl0ZXJhdG9yLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvZ3N0bWFjcm9zLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvZ3N0cmVhbHBhZC5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdHJlZ2lzdHJ5LnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvZ3N0cmVnaXN0cnlwb29sLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvZ3N0c3RydWN0dXJlLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvZ3N0c3lzdGVtY2xvY2suc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9nc3R0cmFjZS5zZ21sOgorCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKKwkgICogZ3N0L2dzdG1hY3Jvcy5oOgorCSAgKiBnc3QvZ3N0bWVtY2h1bmsuYzoKKwkgICogZ3N0L2dzdG1lbWNodW5rLmg6CisJICAqIGdzdC9nc3RxdWV1ZS5jOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzoKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5cG9vbC5jOgorCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJICAqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgorCSAgbW9yZSBkb2NzIGlubGluZWQKKworMjAwNS0wOS0wMiAxNTo0MjowMCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0ZWxlbWVudC5oIChHc3RTdGF0ZSk6IFJlbmFtZWQgZnJvbSBHc3RFbGVtZW50U3RhdGUsIGNoYW5nZWQgdG8gYmUgYSBub3JtYWwgZW51bSBpbnN0ZWFkIG9mIGZsYWdzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTA5LTAyICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5oIChHc3RTdGF0ZSk6IFJlbmFtZWQgZnJvbSBHc3RFbGVtZW50U3RhdGUsCisJICBjaGFuZ2VkIHRvIGJlIGEgbm9ybWFsIGVudW0gaW5zdGVhZCBvZiBmbGFncy4KKwkgIChHc3RTdGF0ZUNoYW5nZVJldHVybik6IFJlbmFtZWQgZnJvbSBHc3RFbGVtZW50U3RhdGVSZXR1cm4sIG5hbWVzCisJICBtdW5nZWQgdG8gYmUgR1NUX1NUQVRFX0NIQU5HRV8qLgorCSAgKEdTVF9TVEFURV9DSEFOR0UpOiBSZW5hbWVkIGZyb20gR1NUX1NUQVRFX1RSQU5TSVRJT04sIHVwZGF0ZWQgdG8KKwkgIHdvcmsgd2l0aCB0aGUgbmV3IHN0YXRlIHJlcHJlc2VudGF0aW9uLgorCSAgKEdzdFN0YXRlQ2hhbmdlKTogTmV3IGVudW1lcmF0aW9uIG9mIHBvc3NpYmxlIHN0YXRlIHRyYW5zaXRpb25zLgorCSAgUmVwbGFjZXMgR1NUX1NUQVRFX0ZPT19UT19CQVIgd2l0aCBHU1RfU1RBVEVfQ0hBTkdFX0ZPT19UT19CQVIuCisJICAoR3N0RWxlbWVudENsYXNzOjpjaGFuZ2Vfc3RhdGUpOiBQYXNzIHRoZSBHc3RTdGF0ZUNoYW5nZSBhbG9uZyBhcworCSAgYW4gYXJndW1lbnQuIEhlbHBzIGxhbmd1YWdlIGJpbmRpbmdzLCBzbyB0aGV5IGRvbid0IGhhdmUgdG8gdXNlCisJICB0cmlja3kgbG9jay1uZWVkaW5nIG1hY3JvcyBsaWtlIEdTVF9TVEFURV9DSEFOR0UgKCkuCisJICAqIHNjcmlwdHMvdXBkYXRlLXN0YXRlcyAoZmlsZSk6IE5ldyBzY3JpcHQuIFJ1biBpdCBvbiBhIGZpbGUgdG8KKwkgIHVwZGF0ZSBpdCBmb3Igc3RhdGUgbmFtaW5nIGFuZCBBUEkgY2hhbmdlcy4gVXBkYXRlcyBmaWxlcyBpbgorCSAgcGxhY2UuCisJICAqIEFsbCBmaWxlcyB1cGRhdGVkIGZvciB0aGUgbmV3IEFQSS4KKworMjAwNS0wOS0wMiAxMjoxMTo1NCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGdzdHJlYW1lci5zcGVjLmluOgorCSAgY2xlYW4gdXAgc3BlYyBzb21lIG1vcmUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgY2xlYW4gdXAgc3BlYyBzb21lIG1vcmUKKworMjAwNS0wOS0wMiAxMjowODo0NSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGdzdC86IGZpeCBhIGJ1bmNoIG9mIHVuY2hlY2tlZCByZXR1cm4gdmFsdWVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHRyYWNlLmM6IChnc3RfdHJhY2VfZmx1c2gpLCAoZ3N0X3RyYWNlX3RleHRfZmx1c2gpOgorCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF91dGlsX3NldF92YWx1ZV9mcm9tX3N0cmluZyksCisJICAoZ3N0X3V0aWxfc2V0X29iamVjdF9hcmcpOgorCSAgZml4IGEgYnVuY2ggb2YgdW5jaGVja2VkIHJldHVybiB2YWx1ZXMKKwkgICogdG9vbHMvZ3N0LWNvbXBsZXRlLmM6IChtYWluKToKKwkgICogZ3N0cmVhbWVyLnNwZWMuaW46CisJICBjbGVhbiB1cCBhIGxpdHRsZQorCisyMDA1LTA5LTAxIDE5OjA2OjM5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGRvY3MvZ3N0L3RtcGwvLmdpdGlnbm9yZToKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0dGFnbGlzdC5zZ21sOgorCSAgdXBkYXRlZCAuY3ZzaWdub3JlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHVwZGF0ZWQgLmN2c2lnbm9yZQorCisyMDA1LTA5LTAxIDE4OjEyOjE4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNlc2luay4qOiBIYW5kbGUgbmV3c2VnbWVudHMgbW9yZSBjb3JyZWN0bHkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfaGFuZGxlX29iamVjdCksCisJICAoZ3N0X2Jhc2Vfc2lua19ldmVudCksIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpLAorCSAgKGdzdF9iYXNlX3NpbmtfaGFuZGxlX2V2ZW50KToKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKKwkgIEhhbmRsZSBuZXdzZWdtZW50cyBtb3JlIGNvcnJlY3RseS4KKwkgICogZ3N0L2dzdGJ1cy5jOgorCSAgRml4IGRvY3MuCisJICAqIGdzdC9nc3RldmVudC5jOiAoZ3N0X2V2ZW50X25ld19uZXdzZWdtZW50KToKKwkgIEEgbmV3c2VnbWVudCBjYW5ub3QgaGF2ZSBhIHN0YXJ0X3RpbWUgb2YgLTEKKworMjAwNS0wOS0wMSAxNjo1MzoxNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgd2luMzIvZ3N0ZW51bXR5cGVzLio6IFVwZGF0ZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHdpbjMyL2dzdGVudW10eXBlcy5jOgorCSAgKiB3aW4zMi9nc3RlbnVtdHlwZXMuaDoKKwkgIFVwZGF0ZQorCisyMDA1LTA4LTMxIDIxOjAxOjM1ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+CisKKwkqIGRvY3MvcHdnL2J1aWxkaW5nLWJvaWxlci54bWw6CisJICBSZW1vdmUgZXh0cmFuZW91cyAnY28nIGZyb20gY3ZzIGNvbW1hbmQgaW4gUFdHLCBhcyByZXBvcnRlZCBvbiBpcmMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFJlbW92ZSBleHRyYW5lb3VzICdjbycgZnJvbSBjdnMgY29tbWFuZCBpbiBQV0csIGFzIHJlcG9ydGVkIG9uIGlyYy4KKworMjAwNS0wOC0zMSAxODo0NTo0MSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBsaWJzL2dzdC9jb250cm9sbGVyL2dzdC1jb250cm9sbGVyLmM6IGZpeGVkIGJvb2xlYW4gYWdhaW4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdC1jb250cm9sbGVyLmM6CisJICAoZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfc2V0X2ludGVycG9sYXRpb25fbW9kZSksCisJICAoZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfbmV3KToKKwkgIGZpeGVkIGJvb2xlYW4gYWdhaW4KKworMjAwNS0wOC0zMSAxNToyNzo1NSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDogYWRkIC1nb29kCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOgorCSAgYWRkIC1nb29kCisJICAqIGdzdC9nc3RldmVudC5jOgorCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKKwkgIHJlbW92ZSB3cm9uZyBkb2NzCisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X2VsZW1lbnRfbGlua19maWx0ZXJlZCk6CisJICAqIGdzdC9nc3R1dGlscy5oOgorCSAgYWRkIGdzdF9lbGVtZW50X2xpbmtfZmlsdGVyZWQKKworMjAwNS0wOC0zMSAxNDowODo0NSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBpbmxpbmVkIG1vcmUgZG9jcywgZml4ZWQgZG91YmxlIGlkLXJlZgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGRvY3MvZ3N0L3RtcGwvLmN2c2lnbm9yZToKKwkgICogZG9jcy9nc3QvdG1wbC9nc3RlcnJvci5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdGZpbHRlci5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdHVyaWhhbmRsZXIuc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9nc3R1cml0eXBlLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvZ3N0dXRpbHMuc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9nc3R4bWwuc2dtbDoKKwkgICogZ3N0L2dzdGVycm9yLmM6CisJICAqIGdzdC9nc3RlcnJvci5oOgorCSAgKiBnc3QvZ3N0ZmlsdGVyLmM6CisJICAqIGdzdC9nc3R1cmkuYzoKKwkgICogZ3N0L2dzdHVyaXR5cGUuYzoKKwkgICogZ3N0L2dzdHV0aWxzLmM6CisJICAqIGdzdC9nc3R4bWwuYzoKKwkgIGlubGluZWQgbW9yZSBkb2NzLCBmaXhlZCBkb3VibGUgaWQtcmVmCisKKzIwMDUtMDgtMzEgMTM6NTM6MzkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogUGFzc3Rocm91Z2ggZWxlbWVudHMgZG9uJ3QgbmVlZCB0aGUgY2FwcyBhcyB0aGV5IGRvbid0IGNhcmUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldGNhcHMpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9oYW5kbGVfYnVmZmVyKToKKwkgIFBhc3N0aHJvdWdoIGVsZW1lbnRzIGRvbid0IG5lZWQgdGhlIGNhcHMgYXMgdGhleSBkb24ndCBjYXJlLgorCisyMDA1LTA4LTMxIDEzOjUwOjQwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IERvbid0IGxlYWsgcmVmY291bnRzIG9uIGJ1ZmZlcnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldGNhcHMpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9oYW5kbGVfYnVmZmVyKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9jaGFpbik6CisJICBEb24ndCBsZWFrIHJlZmNvdW50cyBvbiBidWZmZXJzLgorCisyMDA1LTA4LTMxIDEzOjQxOjE5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLio6IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgbm90IG5lZ290aWF0ZWQgbW9yZSBncmFjZWZ1bGx5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV9jb25maWd1cmVfY2FwcyksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldGNhcHMpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2hhbmRsZV9idWZmZXIpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9jaGFpbiksIChnc3RfYmFzZV90cmFuc2Zvcm1fY2hhbmdlX3N0YXRlKToKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgorCSAgSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSBub3QgbmVnb3RpYXRlZCBtb3JlIGdyYWNlZnVsbHkuCisKKzIwMDUtMDgtMzEgMTI6NTU6NTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGdzdC9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IFNldCBSRUFET05MWSBmbGFnIG9uIG1tYXAnZWQgYnVmZmVycywgb3RoZXJ3aXNlIGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSgpIHdvbid0IHdvcmsgcHJvcC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IChnc3RfbW1hcF9idWZmZXJfaW5pdCksCisJICAoZ3N0X2ZpbGVfc3JjX21hcF9yZWdpb24pOgorCSAgU2V0IFJFQURPTkxZIGZsYWcgb24gbW1hcCdlZCBidWZmZXJzLCBvdGhlcndpc2UKKwkgIGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSgpIHdvbid0IHdvcmsgcHJvcGVybHkgKCMzMTQ3MDgpLgorCisyMDA1LTA4LTMxIDEwOjA3OjI0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IHBhc3N0aHJvdWdoIGVsZW1lbnRzIGNhbiBldmVuIGRvIGlucGxhY2Ugb24gbm9uIHdyaXRhYmxlIGJ1ZmZlcnMgKGFzIHRoZXkgZG9uJ3QgdG91Y2ggdGguLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1faGFuZGxlX2J1ZmZlcik6CisJICBwYXNzdGhyb3VnaCBlbGVtZW50cyBjYW4gZXZlbiBkbyBpbnBsYWNlIG9uIG5vbiB3cml0YWJsZQorCSAgYnVmZmVycyAoYXMgdGhleSBkb24ndCB0b3VjaCB0aGVtKS4KKworMjAwNS0wOC0zMSAxMDowMDowOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBjaGVjay9nc3QtbGlicy9jb250cm9sbGVyLmM6IG1vcmUgdGVzdHMgKGhlaGUgSSBoYXZlIHRoZSBtb3N0KQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dzdC1saWJzL2NvbnRyb2xsZXIuYzogKGdzdF90ZXN0X21vbm9fc291cmNlX2dldF9wcm9wZXJ0eSksCisJICAoZ3N0X3Rlc3RfbW9ub19zb3VyY2Vfc2V0X3Byb3BlcnR5KSwKKwkgIChnc3RfdGVzdF9tb25vX3NvdXJjZV9jbGFzc19pbml0KSwgKEdTVF9TVEFSVF9URVNUKSwKKwkgIChnc3RfY29udHJvbGxlcl9zdWl0ZSk6CisJICBtb3JlIHRlc3RzIChoZWhlIEkgaGF2ZSB0aGUgbW9zdCkKKwkgICogZ3N0L2dzdGJ1cy5jOgorCSAgZGVzY3JpYmUgcG9wcGluZyBtZXNzYWdlcyB3aGVudXNpbmcgbXVsbHRpcGxlIHNvdXJjZXMKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3QtY29udHJvbGxlci5jOgorCSAgKGdzdF9jb250cm9sbGVkX3Byb3BlcnR5X3NldF9pbnRlcnBvbGF0aW9uX21vZGUpLAorCSAgKGdzdF9jb250cm9sbGVkX3Byb3BlcnR5X25ldyk6CisJICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0LWNvbnRyb2xsZXIuaDoKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3QtaW50ZXJwb2xhdGlvbi5jOgorCSAgaW1wbGVtZW50IGJvb2xlYW4gcHJvcGVydGllcworCisyMDA1LTA4LTMxIDA4OjU3OjE0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0bWluaW9iamVjdC5jOiBDYW5ub3QgYXNzZXJ0IHRoYXQgdGhlIHJlZmNvdW50IGhhcyB0byBiZSBwb3NpdGl2ZSBzaW5jZSBhIGRpc3Bvc2VkIG9iamVjdCBjYW4gYmUgcmVzdXJlY3RlZC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5jOiAoZ3N0X21pbmlfb2JqZWN0X3JlZik6CisJICBDYW5ub3QgYXNzZXJ0IHRoYXQgdGhlIHJlZmNvdW50IGhhcyB0byBiZSBwb3NpdGl2ZQorCSAgc2luY2UgYSBkaXNwb3NlZCBvYmplY3QgY2FuIGJlIHJlc3VyZWN0ZWQuCisKKzIwMDUtMDgtMzEgMDg6Mzg6MzkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RwYWQuYzogUmV2ZXJ0IGNoYW5nZSwgbmVlZCB0byBmaXJzdCBmaXggYmFkbHkgYmVoYXZpbmcgYXBwcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2luaXQpOgorCSAgUmV2ZXJ0IGNoYW5nZSwgbmVlZCB0byBmaXJzdCBmaXggYmFkbHkgYmVoYXZpbmcKKwkgIGFwcHMuCisKKzIwMDUtMDgtMzAgMTk6NDU6MzggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGNoZWNrL2VsZW1lbnRzLzogQWN0aXZhdGUgcGFkcyBiZWZvcmUgdXNpbmcgdGhlbS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9lbGVtZW50cy9mYWtlc3JjLmM6IChzZXR1cF9mYWtlc3JjKToKKwkgICogY2hlY2svZWxlbWVudHMvaWRlbnRpdHkuYzogKHNldHVwX2lkZW50aXR5KToKKwkgIEFjdGl2YXRlIHBhZHMgYmVmb3JlIHVzaW5nIHRoZW0uCisKKzIwMDUtMDgtMzAgMTk6Mjk6NTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9iYXNlL2dzdGFkYXB0ZXIuYzogRmx1c2hpbmcgb3V0IDAgYnl0ZXMgaXMgb2sgZm9yIHRoaXMgZnVuY3Rpb24uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOiAoZ3N0X2FkYXB0ZXJfZmx1c2gpOgorCSAgRmx1c2hpbmcgb3V0IDAgYnl0ZXMgaXMgb2sgZm9yIHRoaXMgZnVuY3Rpb24uCisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2hhbmRsZV9vYmplY3QpOgorCSAgbm8gbmV3c2VnbWVudCBnaXZlcyBhIHdhcm5pbmcgYW5kIHNldHMgdGhlIHN0YXJ0L3N0b3AgdG8KKwkgIGludmFsaWQuCisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV9jaGFuZ2Vfc3RhdGUpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcGFzc3Rocm91Z2gpOgorCSAgU29tZSBkZWJ1ZyBpbmZvLgorCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5jOiAoZ3N0X21pbmlfb2JqZWN0X3JlZik6CisJICBDaGVjayByZWZjb3VudCBoZXJlIHRvby4KKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9pbml0KToKKwkgIFBhZHMgYXJlIGluaXRpYWxseSBmbHVzaGluZyBhbmQgcmVmdXNpbmcgZGF0YS4KKwkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfZWxlbWVudF9saW5rX3BhZHNfZmlsdGVyZWQpOgorCSAgV2hlbiBhZGRpbmcgYSBjYXBzZmlsdGVyIGVsZW1lbnQgbWFrZSBzdXJlIGl0IGhhcyB0aGUKKwkgIHNhbWUgc3RhdGUgYXMgdGhlIHBhcmVudCBiaW4uCisKKzIwMDUtMDgtMzAgMTc6MjM6MTkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgbW9yZSBkb2NzIGFuZCB0d28gbW9yZSBpbmxpbmVkCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvdG1wbC8uY3ZzaWdub3JlOgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdGZvcm1hdC5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdHZlcnNpb24uc2dtbDoKKwkgICogZ3N0L2dzdGJ1cy5oOgorCSAgKiBnc3QvZ3N0Zm9ybWF0LmM6CisJICAqIGdzdC9nc3Rmb3JtYXQuaDoKKwkgICogZ3N0L2dzdHZlcnNpb24uaC5pbjoKKwkgIG1vcmUgZG9jcyBhbmQgdHdvIG1vcmUgaW5saW5lZAorCisyMDA1LTA4LTMwIDE3OjEyOjMzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzogRG9uJ3Qgc3luYyB0byBjbG9jay4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzogKGdzdF9maWxlX3NpbmtfY2xhc3NfaW5pdCk6CisJICBEb24ndCBzeW5jIHRvIGNsb2NrLgorCisyMDA1LTA4LTMwIDA4OjE3OjQ4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IHVsdHJhbDMzdCBmdW5jMTBucyBkZXNlcnZlIHRvIGFwcGVhciBpbiB0aGUgZG9jcyBhY3R1YWx5CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgIHVsdHJhbDMzdCBmdW5jMTBucyBkZXNlcnZlIHRvIGFwcGVhciBpbiB0aGUgZG9jcyBhY3R1YWx5CisJICAqIGRvY3MvZ3N0L3RtcGwvLmN2c2lnbm9yZToKKwkgICogZG9jcy9nc3QvdG1wbC9nc3Rjb21wYXQuc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9nc3Rjb25maWcuc2dtbDoKKwkgICogZ3N0L2NoZWNrL2dzdGNoZWNrLmM6CisJICAqIGdzdC9nc3Rjb21wYXQuaDoKKwkgICogZ3N0L2dzdGNvbmZpZy5oLmluOgorCSAgaW5saW5lZCBtb3JlIGRvY3MKKworMjAwNS0wOC0yOSAyMTo0MTowMiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBpbmxpbmVkIGFuZCBleHRlbmRlZCBkb2NzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvdG1wbC8uY3ZzaWdub3JlOgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdHF1ZXJ5LnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvZ3N0dXRpbHMuc2dtbDoKKwkgICogZ3N0L2dzdHF1ZXJ5LmM6CisJICAqIGdzdC9nc3RxdWVyeS5oOgorCSAgaW5saW5lZCBhbmQgZXh0ZW5kZWQgZG9jcworCisyMDA1LTA4LTI5IDE5OjU5OjUyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGNoZWNrL2dzdC1saWJzL2NvbnRyb2xsZXIuYzogbW9yZSB0ZXN0cworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dzdC1saWJzL2NvbnRyb2xsZXIuYzogKEdTVF9TVEFSVF9URVNUKSwKKwkgIChnc3RfY29udHJvbGxlcl9zdWl0ZSk6CisJICBtb3JlIHRlc3RzCisJICAqIGRvY3MvZ3N0L3RtcGwvZ3N0dXRpbHMuc2dtbDoKKwkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkgICogZG9jcy9saWJzL3RtcGwvZ3N0ZGF0YXByb3RvY29sLnNnbWw6CisJICBpbmNsdWRlIHBhdGggZml4ZXMKKwkgICogZXhhbXBsZXMvY29udHJvbGxlci9hdWRpby1leGFtcGxlLmM6IChtYWluKToKKwkgIGNvbnRyb2xsZXIgZXhhbXBsZSB3b3JrcyBub3cKKwkgICogZ3N0L2dzdGNsb2NrLmg6CisJICBkb2MgZml4ZXMKKwkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKHByaW50X2VsZW1lbnRfcHJvcGVydGllc19pbmZvKToKKwkgIHNob3cgcGFyYW0gc3BlYyBmbGFncworCisyMDA1LTA4LTI5IDE2OjEwOjM2ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGdzdC9nc3R1dGlscy5jIChnc3RfdXRpbF91aW50NjRfc2NhbGUpOiBOZXcgMzczM3QgZnVuY3QxMG4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDgtMjkgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3R1dGlscy5jIChnc3RfdXRpbF91aW50NjRfc2NhbGUpOiBOZXcgMzczM3QgZnVuY3QxMG4uCisKKzIwMDUtMDgtMjkgMDk6NTI6NDQgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KKworCSogZG9jcy9mYXEvY3ZzLnhtbDoKKwkgIE1pbm9yIHVwZGF0ZXMgdG8gZGV2ZWxvcGVyIGN2cyBpbnN0cnVjdGlvbnMsIHRvIG1vcmUgY2xvc2VseSBtYXRjaCB3aGF0IHRoZSBmcmVlZGVza3RvcCBwZW9wbGUgd2FudC4gQWxzbywgdGVzdCBteSBjdi4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBNaW5vciB1cGRhdGVzIHRvIGRldmVsb3BlciBjdnMgaW5zdHJ1Y3Rpb25zLCB0byBtb3JlIGNsb3NlbHkgbWF0Y2ggd2hhdAorCSAgdGhlIGZyZWVkZXNrdG9wIHBlb3BsZSB3YW50LiBBbHNvLCB0ZXN0IG15IGN2cyBjb21taXQgYWNjZXNzLi4uCisKKzIwMDUtMDgtMjggMTc6NDU6NTggKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdHV0aWxzLmggKEdTVF9CT0lMRVJQTEFURV9GVUxMKTogUHJvdG90eXBlIGluc3RhbmNlX2luaXQgYXMgaGF2aW5nIHR3byBhcmd1bWVudHMgaW5zdGVhZCBvZiBqdXN0IG9uZS4gQWxsb3dzIHN1Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDgtMjggIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3R1dGlscy5oIChHU1RfQk9JTEVSUExBVEVfRlVMTCk6IFByb3RvdHlwZSBpbnN0YW5jZV9pbml0CisJICBhcyBoYXZpbmcgdHdvIGFyZ3VtZW50cyBpbnN0ZWFkIG9mIGp1c3Qgb25lLiBBbGxvd3Mgc3VwZXJjbGFzc2VzCisJICB0byBhY2Nlc3MgaW5mb3JtYXRpb24gb24gc3ViY2xhc3NlcyAtLSBzZWUgdGhlIHRlcnJpYmxlIGZvcigpIGxvb3AKKwkgIGluIGd0eXBlLmM6Z190eXBlX2NyZWF0ZV9pbnN0YW5jZSBmb3IgdGhlIHJlYXNvbiB3aHkuIEFsbCBjYWxsZXJzCisJICBjaGFuZ2VkLgorCisyMDA1LTA4LTI3IDEwOjU3OjAwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGRvY3MvZGVzaWduL3BhcnQtbWVzc2FnZXMudHh0OiB1cGRhdGUgaW5mbworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtbWVzc2FnZXMudHh0OgorCSAgdXBkYXRlIGluZm8KKwkgICogZG9jcy9nc3QvdG1wbC8uY3ZzaWdub3JlOgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdGNhcHMuc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9nc3RjbG9jay5zZ21sOgorCSAgKiBnc3QvZ3N0YnVzLmM6CisJICAqIGdzdC9nc3RjYXBzLmM6CisJICAqIGdzdC9nc3RjYXBzLmg6CisJICAqIGdzdC9nc3RjbG9jay5jOgorCSAgKiBnc3QvZ3N0Y2xvY2suaDoKKwkgICogZ3N0L2dzdG1lc3NhZ2UuYzoKKwkgIGFkZGVkIGRlc2NyaXB0aW9ucyBmb3IgYnVzIGFuZCBtZXNzYWdlCisJICBpbmxpbmUgY2FwcyBhbmQgY2xvY2sgZG9jcworCisyMDA1LTA4LTI2IDIyOjMyOjUxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdzdC9nc3RtZXNzYWdlLio6IGRvYyBmaXhlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RtZXNzYWdlLmM6CisJICAqIGdzdC9nc3RtZXNzYWdlLmg6CisJICBkb2MgZml4ZXMKKworMjAwNS0wOC0yNiAyMToyMzo1MSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IGZpeCBkaXYtYnktemVybworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV90cmFuc2Zvcm1fc2l6ZSk6CisJICBmaXggZGl2LWJ5LXplcm8KKworMjAwNS0wOC0yNiAxNDoyMTo0MyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBjaGVjay9waXBlbGluZXMvc2ltcGxlX2xhdW5jaF9saW5lcy5jIChydW5fcGlwZWxpbmUpOiBDaGVjayBlbGVtZW50X3NldF9zdGF0ZSdzIHJldHVybiB2YWwuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDgtMjYgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGNoZWNrL3BpcGVsaW5lcy9zaW1wbGVfbGF1bmNoX2xpbmVzLmMgKHJ1bl9waXBlbGluZSk6IENoZWNrCisJICBlbGVtZW50X3NldF9zdGF0ZSdzIHJldHVybiB2YWwuCisJICAodGVzdF8yX2VsZW1lbnRzKTogQWRkIHRlc3QgdGhhdCdzIGJlZW4gZGlzYWJsZWQgZm9yIG1vbnRocy4KKwkgICogZ3N0L2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6IENsZWFudXBzLiBBZGQgY2FuLWFjdGl2YXRlLXB1c2ggYW5kCisJICBjYW4tYWN0aXZhdGUtcHVsbCBwcm9wZXJ0aWVzLgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiBDbGVhbnVwcy4gQWRkIGNhbi1hY3RpdmF0ZS1wdXNoIGFuZAorCSAgY2FuLWFjdGl2YXRlLXB1bGwgcHJvcGVydGllcy4gSW1wbGVtZW50IGlzX3NlZWthYmxlIHNvIGZha2VzcmMgY2FuCisJICBvcGVyYXRlIGluIHB1bGwgbW9kZS4KKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYyAoR3N0QmFzZVNpbmspOiBSZW1vdmUgaGFzLWxvb3AsIGhhcy1jaGFpbgorCSAgcHJvcGVydGllcy4KKwkgIChnc3RfYmFzZV9zaW5rX2FjdGl2YXRlLCBnc3RfYmFzZV9zaW5rX2FjdGl2YXRlX3B1bGwpCisJICAoZ3N0X2Jhc2Vfc2lua19hY3RpdmF0ZV9wdXNoKTogTWFrZSBhY3RpdmF0aW9uIG1vZGUgY2hvb3Npbmcgd29yay4KKwkgIENsZWFudXBzLgorCSAgKGdzdF9iYXNlX3NpbmtfY2hhaW4sIGdzdF9iYXNlX3NpbmtfbG9vcCk6IEFzc2VydCBhY3RpdmF0aW9uIG1vZGUKKwkgIGlzIHJpZ2h0LiBNYWtlIHB1bGwgbW9kZSB3b3JrLiBQb3N0IGFuIGVvcyBiZWZvcmUgcGF1c2luZyBpbiBwdWxsCisJICBtb2RlLgorCSAgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKTogUGF5IGF0dGVudGlvbiB0byB0aGUgY29yZSdzCisJICBjaGFuZ2Vfc3RhdGUoKSByZXR1cm4gdmFsLgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmMgKEdzdEJhc2VTcmMpOiBSZW1vdmUgaGFzLWxvb3AsCisJICBoYXMtZ2V0cmFuZ2UgcHJvcGVydGllcy4gQ2xlYW51cHMuCisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuaCAoR3N0QmFzZVNyYyk6IFJlbW92ZSBoYXNfbG9vcCwKKwkgIGhhc19nZXRyYW5nZSBhbmQgcmVwbGFjZSB3aXRoIGNhbl9hY3RpdmF0ZV9wdWxsIGFuZAorCSAgY2FuX2FjdGl2YXRlX3B1c2guCisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmggKEdzdEJhc2VTaW5rKTogUmVhcnJhbmdlIGZpZWxkcywgYWRkCisJICBsb2NraW5nIGNvbW1lbnRzLiBSZW1vdmUgaGFzX2xvb3AsIGhhc19jaGFpbiBhbmQgcmVwbGFjZSB3aXRoCisJICBjYW5fYWN0aXZhdGVfcHVsbCBhbmQgY2FuX2FjdGl2YXRlX3B1c2guCisKKzIwMDUtMDgtMjYgMTM6Mjg6MDEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBBZGQgbWV0YWRhdGEgcmVhZGluZyBleGFtcGxlIHRoYXQgbG9vcHMgb3ZlciBhIGxpc3Qgb2YgZmlsZW5hbWVzLCBkdW1waW5nIGFueSB0YWdzIGZvdW5kLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgICogZXhhbXBsZXMvTWFrZWZpbGUuYW06CisJICAqIGV4YW1wbGVzL21ldGFkYXRhL01ha2VmaWxlLmFtOgorCSAgKiBleGFtcGxlcy9tZXRhZGF0YS9yZWFkLW1ldGFkYXRhLmM6IChtZXNzYWdlX2xvb3ApLAorCSAgKGhhdmVfcGFkX2hhbmRsZXIpLCAobWFrZV9waXBlbGluZSksIChwcmludF90YWcpLCAobWFpbik6CisJICBBZGQgbWV0YWRhdGEgcmVhZGluZyBleGFtcGxlIHRoYXQgbG9vcHMgb3ZlciBhIGxpc3Qgb2YgZmlsZW5hbWVzLAorCSAgZHVtcGluZyBhbnkgdGFncyBmb3VuZC4KKwkgICogZ3N0L2dzdGJ1cy5jOiAoZ3N0X2J1c19kaXNwb3NlKToKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2Rpc3Bvc2UpOgorCSAgUmVsZWFzZSBhIGZldyBwb3RlbnRpYWxseS1oZWxkIHJlZmVyZW5jZXMgaW4gZGlzcG9zZS4KKworMjAwNS0wOC0yNiAxMzoyMTo0NyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBkb2NzL2dzdC90bXBsL2dzdG1pbmlvYmplY3Quc2dtbDogZG8gKm5vdCogYWRkIHRtcGwvKi5zZ21sIGZpbGVzIHRvIENWUyEKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdG1pbmlvYmplY3Quc2dtbDoKKwkgIGRvICpub3QqIGFkZCB0bXBsLyouc2dtbCBmaWxlcyB0byBDVlMhCisKKzIwMDUtMDgtMjYgMTM6MTc6NTQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgbGlicy9nc3QvYnl0ZXN0cmVhbS86IHJlbW92aW5nIG9ic29sZXRlIGZpbGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvYnl0ZXN0cmVhbS8uY3ZzaWdub3JlOgorCSAgKiBsaWJzL2dzdC9ieXRlc3RyZWFtL01ha2VmaWxlLmFtOgorCSAgKiBsaWJzL2dzdC9ieXRlc3RyZWFtL2FkYXB0ZXIuYzoKKwkgICogbGlicy9nc3QvYnl0ZXN0cmVhbS9hZGFwdGVyLmg6CisJICAqIGxpYnMvZ3N0L2J5dGVzdHJlYW0vYnl0ZXN0cmVhbS5jOgorCSAgKiBsaWJzL2dzdC9ieXRlc3RyZWFtL2J5dGVzdHJlYW0uaDoKKwkgICogbGlicy9nc3QvYnl0ZXN0cmVhbS9maWxlcGFkLmM6CisJICAqIGxpYnMvZ3N0L2J5dGVzdHJlYW0vZmlsZXBhZC5oOgorCSAgcmVtb3Zpbmcgb2Jzb2xldGUgZmlsZXMKKworMjAwNS0wOC0yNiAxMjo0ODoyOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBkb2NzLzogZGlzYWJlZCBhZGRpdGlvbmFsIGluZGV4IGVudHJpZXMgYWdhaW4sIGFzIHRoaXMgbWFrZXMgZG9jcy1nZW4ganVzdCBzbG93IGFuZCB0aGV5IGFyZW4ndCB1c2VmdWwgeWV0CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKKwkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbDoKKwkgIGRpc2FiZWQgYWRkaXRpb25hbCBpbmRleCBlbnRyaWVzIGFnYWluLCBhcyB0aGlzIG1ha2VzIGRvY3MtZ2VuIGp1c3QKKwkgIHNsb3cgYW5kIHRoZXkgYXJlbid0IHVzZWZ1bCB5ZXQKKwkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkgIGxpdHRsZSAtc2VjdGlvbi50eHQgY2xlYW51cCBmb3IgbGlicworCisyMDA1LTA4LTI2IDExOjU2OjExICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0L2Jhc2UvOiBmaXggdXAgc29tZSBkZWJ1Z2dpbmcKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KToKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3RyYW5zZm9ybV9zaXplKSwKKwkgIGZpeCB1cCBzb21lIGRlYnVnZ2luZworCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfdW5pdF9zaXplKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fYnVmZmVyX2FsbG9jKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9ldmVudCksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2hhbmRsZV9idWZmZXIpOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6CisJICBoYW5kbGUgYW5kIHN0b3JlIHRpbWVkIE5FV1NFR01FTlQgZXZlbnRzIHNvIHRoYXQgc3ViY2xhc3NlcyB0aGF0CisJICBjYWxjdWxhdGUgdGltZSBieSBjb3VudGluZyBzYW1wbGVzIGhhdmUgYSBzZWdtZW50X3N0YXJ0IHRpbWUgdGhleQorCSAgbmVlZCB0byBhZGQgdG8gdGhlaXIgdGltZXN0YW1wcyAtIHNlZSBhdWRpb3Jlc2FtcGxlCisKKzIwMDUtMDgtMjYgMTE6MTk6MjIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBjb21tb246CisJKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJKiBnc3QvZ3N0YnVmZmVyLmg6CisJKiBnc3QvZ3N0cGFkLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgIHdoaXRlc3BhY2UsIGRvYyBhbmQgZGVidWcgZml4aW5nL2FkZGl0aW9ucworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB3aGl0ZXNwYWNlLCBkb2MgYW5kIGRlYnVnIGZpeGluZy9hZGRpdGlvbnMKKworMjAwNS0wOC0yNSAyMzoxNzoxOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBnc3QvZ3N0YmluLmg6IHJlbW92ZWQgJzsnIGZyb20gdGhlIGVuZCBvZiBtYWNybyBkZWZzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5oOgorCSAgcmVtb3ZlZCAnOycgZnJvbSB0aGUgZW5kIG9mIG1hY3JvIGRlZnMKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZG9jcy9nc3QvdG1wbC8uY3ZzaWdub3JlOgorCSAgKiBnc3QvZ3N0YnVzLmg6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9jbGFzc19pbml0KSwKKwkgIChnc3RfZWxlbWVudF9zZXRfc3RhdGUpLCAoYWN0aXZhdGVfcGFkcyksCisJICAoZ3N0X2VsZW1lbnRfc2F2ZV90aHlzZWxmKToKKwkgICogZ3N0L2dzdGV2ZW50LmM6IChnc3RfZXZlbnRfbmV3X25ld3NlZ21lbnQpOgorCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKKwkgICogZ3N0L2dzdGl0ZXJhdG9yLmM6CisJICAqIGdzdC9nc3RpdGVyYXRvci5oOgorCSAgKiBnc3QvZ3N0cGFkLmM6CisJICAqIGdzdC9nc3Rwcm9iZS5oOgorCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9wYWRfcXVlcnlfY29udmVydCk6CisJICAqIGdzdC9nc3R1dGlscy5oOgorCSAgZml4ZWQgcGFyYW1ldGVyIG5hbWUgbWlzbWF0Y2hlcyBiZXR3ZWVuIHNvdXJjZSwgaGVhZGVyIGFuZCBkb2NzCisJICBhZGRlZCBzb21lIG1vcmUgZG9jcywgcmVzb2x2ZWQgdGhlIGxhc3QgYmF0Y2ggb2YgdW51c2VkIGVsZW1lbnRzIGluCisJICBkb2NzIChub3cgc29tZW9uZSBuZWVkcyB0byBkb2MgdGhlbSkKKworMjAwNS0wOC0yNSAyMDo1MjowNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIGdzdC9yZWdpc3RyaWVzL2dzdGxpYnhtbHJlZ2lzdHJ5LmM6CisJKiBnc3QvcmVnaXN0cmllcy9nc3R4bWxyZWdpc3RyeS5jOgorCSAgcmVzcGVjdCBvcmRlciBvZiBwbHVnaW4gZGlycyB3aGVuIGxvYWRpbmcgcGxsdWdpbnMgYW5kIHJlYnVpbGRpbmcgcmVnaXN0cnkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVzcGVjdCBvcmRlciBvZiBwbHVnaW4gZGlycyB3aGVuIGxvYWRpbmcgcGxsdWdpbnMgYW5kIHJlYnVpbGRpbmcgcmVnaXN0cnkKKworMjAwNS0wOC0yNSAxOTozNjowNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS4qOiBDYWNoZSBjYXBzIHVuaXRfc2l6ZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1faW5pdCksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3RyYW5zZm9ybV9zaXplKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fY29uZmlndXJlX2NhcHMpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfdW5pdF9zaXplKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fYnVmZmVyX2FsbG9jKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fY2hhbmdlX3N0YXRlKToKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgorCSAgQ2FjaGUgY2FwcyB1bml0X3NpemUuCisJICBNYWtlIHN1cmUgd2UgY2Fubm90IG5lZ290aWF0ZSB1cCBhbmQgZG93bnN0cmVhbSBhdCB0aGUKKwkgIHNhbWUgdGltZS4KKworMjAwNS0wOC0yNSAxODo1NTozNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIGdzdC9nc3QuYzoKKwkqIGdzdC9yZWdpc3RyaWVzL2dzdGxpYnhtbHJlZ2lzdHJ5LmM6CisJKiBnc3QvcmVnaXN0cmllcy9nc3R4bWxyZWdpc3RyeS5jOgorCSAgbWFrZSByZWdpc3RyeSByZXNwZWN0IG9yZGVyIG9mIEdTVF9QTFVHSU5fUEFUSDsgbWFrZSB0aGUgaW5zdGFsbGVkIGxvY2F0aW9uIGdvIGxhc3QKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgbWFrZSByZWdpc3RyeSByZXNwZWN0IG9yZGVyIG9mIEdTVF9QTFVHSU5fUEFUSDsgbWFrZSB0aGUgaW5zdGFsbGVkIGxvY2F0aW9uIGdvIGxhc3QKKworMjAwNS0wOC0yNSAxODo1NDowMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgorCSAgYWRkIGRvY3MKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkIGRvY3MKKworMjAwNS0wOC0yNSAxNjoyNzo0NCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGdzdC9jaGVjay9nc3RjaGVjay5jOgorCSogZ3N0L2NoZWNrL2dzdGNoZWNrLmg6CisJKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgorCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKKwkgIGFkZCBhIHVpbnQ2NCBjaGVja2luZyBtZXRob2QKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkIGEgdWludDY0IGNoZWNraW5nIG1ldGhvZAorCisyMDA1LTA4LTI1IDEzOjUyOjEzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YmluLmM6IEJlIGEgYml0IG1vcmUgY29uc2VydmF0aXZlIGFib3V0IHRoZSBwb3N0ZWQgbWVzc2FnZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChiaW5fYnVzX2hhbmRsZXIpOgorCSAgQmUgYSBiaXQgbW9yZSBjb25zZXJ2YXRpdmUgYWJvdXQgdGhlIHBvc3RlZCBtZXNzYWdlLgorCSAgKiBnc3QvZ3N0YnVzLmM6IChnc3RfYnVzX3Bvc3QpOgorCSAgU29tZSBjbGVhbnVwcywgd2FybiB3cm9uZyByZXR1cm4gdmFsdWVzLgorCisyMDA1LTA4LTI1IDEwOjUxOjE0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgUmV2ZXJ0IHVucG9wdWxhciBjaGFuZ2UgZm9yIEdTVF9NRVNTQUdFX1NSQyB0byBHT2JqZWN0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dzdC9nc3RiaW4uYzogKEdTVF9TVEFSVF9URVNUKToKKwkgICogZ3N0L2dzdGJpbi5jOiAoYmluX2J1c19oYW5kbGVyKToKKwkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKGdzdF9tZXNzYWdlX2ZpbmFsaXplKSwgKF9nc3RfbWVzc2FnZV9jb3B5KSwKKwkgIChnc3RfbWVzc2FnZV9uZXcpLCAoZ3N0X21lc3NhZ2VfbmV3X2VvcyksIChnc3RfbWVzc2FnZV9uZXdfZXJyb3IpLAorCSAgKGdzdF9tZXNzYWdlX25ld193YXJuaW5nKSwgKGdzdF9tZXNzYWdlX25ld190YWcpLAorCSAgKGdzdF9tZXNzYWdlX25ld19zdGF0ZV9jaGFuZ2VkKSwgKGdzdF9tZXNzYWdlX25ld19zZWdtZW50X3N0YXJ0KSwKKwkgIChnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lKSwgKGdzdF9tZXNzYWdlX25ld19jdXN0b20pOgorCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgorCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChldmVudF9sb29wKToKKwkgICogdG9vbHMvZ3N0LW1kNXN1bS5jOiAoZXZlbnRfbG9vcCk6CisJICBSZXZlcnQgdW5wb3B1bGFyIGNoYW5nZSBmb3IgR1NUX01FU1NBR0VfU1JDIHRvIEdPYmplY3QuCisKKzIwMDUtMDgtMjUgMTA6MzU6NDYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBnc3QvZ3N0YnVmZmVyLmg6CisJKiBnc3QvZ3N0bWVzc2FnZS5jOgorCSogZ3N0L2dzdG1lc3NhZ2UuaDoKKwkgIGZpeCBkb2NzIGJ5IGZpeGluZyBlbnVtIHR5cGVkZWYKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZml4IGRvY3MgYnkgZml4aW5nIGVudW0gdHlwZWRlZgorCisyMDA1LTA4LTI1IDEwOjE2OjIxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogY2hlY2svTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgIHdpbSBmaXhlZCB0aGUgdGFzaywgeWF5CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHdpbSBmaXhlZCB0aGUgdGFzaywgeWF5CisKKzIwMDUtMDgtMjUgMTA6MDE6NDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGNoZWNrL2dlbmVyaWMvc3RhdGVzLmM6IENsZWFudXAgY2FuIGJlIGRvbmUgYXQgdGhlIGVuZC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9nZW5lcmljL3N0YXRlcy5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgQ2xlYW51cCBjYW4gYmUgZG9uZSBhdCB0aGUgZW5kLgorCSAgKiBnc3QvZ3N0dGFzay5jOiAoZ3N0X3Rhc2tfZ2V0X3R5cGUpLCAoZ3N0X3Rhc2tfZmluYWxpemUpLAorCSAgKGdzdF90YXNrX2Z1bmMpLCAoZ3N0X3Rhc2tfY2xlYW51cF9hbGwpLCAoZ3N0X3Rhc2tfc2V0X2xvY2spLAorCSAgKGdzdF90YXNrX2dldF9zdGF0ZSksIChnc3RfdGFza19zdGFydCksIChnc3RfdGFza19wYXVzZSk6CisJICBPaCBib3kuLiBUaGFua3MgZm9yIGZpbmRpbmcgdGhpcywgVGhvbWFzLgorCisyMDA1LTA4LTI0IDIyOjAxOjQxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlczoKKwkgIGdybXBmLCBhbm90aGVyIHRyeSB0byBmaXggaXQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZ3JtcGYsIGFub3RoZXIgdHJ5IHRvIGZpeCBpdAorCisyMDA1LTA4LTI0IDIxOjU3OjA1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlczoKKwkgIGFub3RoZXIgZml4CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFub3RoZXIgZml4CisKKzIwMDUtMDgtMjQgMjE6NDU6MTMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzOiBhZGRlZCBtaXNzaW5nIHR5cGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzOgorCSAgYWRkZWQgbWlzc2luZyB0eXBlcworCisyMDA1LTA4LTI0IDIxOjM1OjQzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGFkZGVkIG1paXNzaW5nIGNsYXNzZXMgYW5kIHN5bWJvbHMgKDEyMyBtb3JlIHRvIGdvKSByZW1vdmVkIHJlbW92ZWQgc3ltYm9scyBmcm9tIHNlY3Rpb24gZmlsZSBmaXhlZCBtYW55IGRvYy1jb21tZW50cworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGRvY3MvZ3N0L3RtcGwvLmN2c2lnbm9yZToKKwkgICogZ3N0L2dzdGJpbi5jOgorCSAgKiBnc3QvZ3N0aXRlcmF0b3IuYzoKKwkgICogZ3N0L2dzdHV0aWxzLmM6CisJICAqIGdzdC9yZWdpc3RyaWVzL2dzdHhtbHJlZ2lzdHJ5Lmg6CisJICBhZGRlZCBtaWlzc2luZyBjbGFzc2VzIGFuZCBzeW1ib2xzICgxMjMgbW9yZSB0byBnbykKKwkgIHJlbW92ZWQgcmVtb3ZlZCBzeW1ib2xzIGZyb20gc2VjdGlvbiBmaWxlCisJICBmaXhlZCBtYW55IGRvYy1jb21tZW50cworCisyMDA1LTA4LTI0IDIwOjQ5OjUzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBjaGVjay9nZW5lcmljL3N0YXRlcy5jOiBNYWtlIHN1cmUgYWxsIHRhc2tzIGFyZSBzdG9wcGVkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dlbmVyaWMvc3RhdGVzLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBNYWtlIHN1cmUgYWxsIHRhc2tzIGFyZSBzdG9wcGVkLgorCSAgKiBjaGVjay9nc3QvZ3N0YmluLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBVbnJlZiBhZnRlciB1c2FnZSBmb3IgcHJvcGVyIHZhbGdyaW5kaW5nLgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2ZpbmFsaXplKSwgKGdzdF9wYWRfc3RvcF90YXNrKToKKwkgIFJlYWxseSB3YWl0IGZvciB0aGUgdGFzayB0byBzdG9wIGJlZm9yZSBkZXN0cm95aW5nIHRoZQorCSAgbXV0ZXguCisJICAqIGdzdC9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX3NpbmtfYWN0aXZhdGVfcHVzaCksCisJICAoZ3N0X3F1ZXVlX3NyY19hY3RpdmF0ZV9wdXNoKToKKwkgIFNtYWxsIGNsZWFudXBzLiBEb24ndCBzdG9wIHRoZSB0YXNrIHdoZW4gd2UgZGlkIG5vdCBzdGFydAorCSAgaXQuCisJICAqIGdzdC9nc3R0YXNrLmM6IChnc3RfdGFza19nZXRfdHlwZSksIChnc3RfdGFza19pbml0KSwKKwkgIChnc3RfdGFza19mdW5jKSwgKGdzdF90YXNrX2NsZWFudXBfYWxsKSwgKGdzdF90YXNrX3NldF9sb2NrKSwKKwkgIChnc3RfdGFza19nZXRfc3RhdGUpLCAoZ3N0X3Rhc2tfc3RhcnQpLCAoZ3N0X3Rhc2tfcGF1c2UpLAorCSAgKGdzdF90YXNrX2pvaW4pOgorCSAgKiBnc3QvZ3N0dGFzay5oOgorCSAgUHJvdGVjdCB0aGUgc3RyZWFtIGxvY2sgd2l0aCB0aGUgb2JqZWN0IGxvY2suCisJICBEaXNhbGxvdyBzZXR0aW5nIHRoZSBzdHJlYW0gbG9jayB3aGVuIHJ1bm5pbmcuCisJICBBZGQgY2xlYW51cF9hbGwgdG8gd2FpdCBmb3IgdGhlIHRocmVhZHBvb2wgdG8gZmluaXNoLgorCSAgUmVtb3ZlIGNvZGUgdG8gYXV0b2FsbG9jYXRlIGEgbXV0ZXggaWYgbm9uZSB3YXMgcHJvdmlkZWQuCisJICBBZGQgX2pvaW4oKSB0byB3YWl0IGZvciBhIHRhc2sgdG8gc3RvcC4KKwkgIFByb3RlY3QgdGhlIHRocmVhZCBwb29sIHdpdGggYSBnbG9iYWwgbG9jay4KKworMjAwNS0wOC0yNCAxNzo1NzozNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuKjogSGFuZGxlIG5ld3NlZ21lbnQgZXZlbnRzIGNvcnJlY3RseS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwKKwkgIChnc3RfYmFzZV9zaW5rX2dldF90aW1lcyksIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpLAorCSAgKGdzdF9iYXNlX3NpbmtfaGFuZGxlX2J1ZmZlciksIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJICBIYW5kbGUgbmV3c2VnbWVudCBldmVudHMgY29ycmVjdGx5LgorCSAgRHJvcCBidWZmZXJzIG91dCBvZiB0aGUgc2VnbWVudCByYW5nZS4KKworMjAwNS0wOC0yNCAxNzoyNDoyMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGNoZWNrL01ha2VmaWxlLmFtOgorCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICBkaXNhYmxlIHRlc3Qgd2hpbGUgd2ltIGlzIGZpeGluZworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBkaXNhYmxlIHRlc3Qgd2hpbGUgd2ltIGlzIGZpeGluZworCisyMDA1LTA4LTI0IDE2OjQ2OjEwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogcGtnY29uZmlnL2dzdHJlYW1lci11bmluc3RhbGxlZC5wYy5pbjoKKwkqIHBrZ2NvbmZpZy9nc3RyZWFtZXIucGMuaW46CisJICBhZGQgcGx1Z2luc2RpciB0byBwa2djb25maWcgZmlsZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkIHBsdWdpbnNkaXIgdG8gcGtnY29uZmlnIGZpbGVzCisKKzIwMDUtMDgtMjQgMTY6NDE6NDUgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSogQ2hhbmdlTG9nOgorCSAgY2hhbmdlbG9nCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGNoYW5nZWxvZworCisyMDA1LTA4LTI0IDE2OjA5OjUwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgY2hlY2svOiBhZGQgYSB0ZXN0IHRoYXQgZG9lcyBhIGJ1bmNoIG9mIHN0YXRlIGNoYW5nZXMgb24gZWxlbWVudHMgbmVlZHMgc29tZSBmaXhpbmcgZm9yIHZhbGdyaW5kCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svTWFrZWZpbGUuYW06CisJICAqIGNoZWNrL2dlbmVyaWMvc3RhdGVzLmM6IChHU1RfU1RBUlRfVEVTVCksIChzdGF0ZXNfc3VpdGUpLCAobWFpbik6CisJICBhZGQgYSB0ZXN0IHRoYXQgZG9lcyBhIGJ1bmNoIG9mIHN0YXRlIGNoYW5nZXMgb24gZWxlbWVudHMKKwkgIG5lZWRzIHNvbWUgZml4aW5nIGZvciB2YWxncmluZAorCSAgKiBjaGVjay9zdGF0ZXMvc2lua3MuYzogKGdzdF9vYmplY3Rfc3VpdGUpOgorCSAgd2hpdGVzcGFjZQorCSAgKiBnc3QvZ3N0Y2Fwcy5oOgorCSAgYWRkIHByb3RvdHlwZSBmb3IgZ3N0X2NhcHNfaXNfZXF1YWxfZml4ZWQKKwkgICogZ3N0L2dzdHBsdWdpbi5jOgorCSAgKiBnc3QvZ3N0cmVnaXN0cnlwb29sLmM6CisJICBkb2MgZml4ZXMKKworMjAwNS0wOC0yNCAxNTo0OTowMyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0cXVlcnkuYyAoZ3N0X3F1ZXJ5X25ld19jb252ZXJ0KTogU3BldyBpZiB3ZSB0cnkgdG8gY29udmVydCBhIG5lZ2F0aXZlIHZhbHVlLiBEb2Vzbid0IG1ha2UgbXVjaCBzZW5zZS4gTW9zdGx5IHQuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wOC0yNCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdHF1ZXJ5LmMgKGdzdF9xdWVyeV9uZXdfY29udmVydCk6IFNwZXcgaWYgd2UgdHJ5IHRvCisJICBjb252ZXJ0IGEgbmVnYXRpdmUgdmFsdWUuIERvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlLiBNb3N0bHkgdGhpcyBpcworCSAgaGVyZSB0byBmb3JjZSBjYWxsZXJzIHRvIGVuc3VyZSAtMSBtYXBzIHRvIC0xLgorCisyMDA1LTA4LTI0IDE1OjEwOjQxICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZG9jcy9wd2cvYWR2YW5jZWQtdHlwZXMueG1sOiBXZWxsIGRvbmUgdG8gTWljaGFlbCBmb3IgY2F0Y2hpbmcgbXkgZGVsaWJlcmF0ZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyBzcGVsbGluZyBtaXN0YWtlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcHdnL2FkdmFuY2VkLXR5cGVzLnhtbDoKKwkgIFdlbGwgZG9uZSB0byBNaWNoYWVsIGZvciBjYXRjaGluZyBteSBkZWxpYmVyYXRlIGludHJvZHVjdGlvbgorCSAgb2YgdGhpcyBzcGVsbGluZyBtaXN0YWtlLgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX3JlbW92ZV9mdW5jKSwgKGJpbl9idXNfaGFuZGxlcik6CisJICAqIGdzdC9nc3RlbGVtZW50Lmg6CisJICBBZGQgR1NUX0VMRU1FTlRfVU5QQVJFTlRJTkcgdG8gcHJldmVudCByYWNlcyBzbyB0aGF0IHdlIGNhbgorCSAgdW5saW5rIHBhZHMgYmVmb3JlIHJlbW92aW5nIHRoZSBlbGVtZW50IGZyb20gdGhlIGJpbi4KKworMjAwNS0wOC0yNCAxMzo0OToyMSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0LmMgKHBhcnNlX2RlYnVnX2xpc3QpOiBBY2NlcHQgZS5nLiBHU1RfREVCVUc9NCB0byBtZWFuIHRoZSBzYW1lIHRoaW5nIGFzIEdTVF9ERUJVRz0qOjQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDgtMjQgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3QuYyAocGFyc2VfZGVidWdfbGlzdCk6IEFjY2VwdCBlLmcuIEdTVF9ERUJVRz00IHRvIG1lYW4KKwkgIHRoZSBzYW1lIHRoaW5nIGFzIEdTVF9ERUJVRz0qOjQuCisJICAocGFyc2VfZGVidWdfbGV2ZWwsIHBhcnNlX2RlYnVnX2NhdGVnb3J5KTogTmV3IGhlbHBlciBwYXJzZXJzLgorCisyMDA1LTA4LTI0IDEzOjMzOjIxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiB1c2UgZ2Jvb2xlYW4gcmV0dXJuIHZhbHVlcyBhbmQgcG9pbnRlcnMgdG8gc2l6ZSBzbyB3ZSBjYW4gdXNlIHRoZSBmdWxsIEdTVF9CVUZGRVJfU0laRSByLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3RyYW5zZm9ybV9jYXBzKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fdHJhbnNmb3JtX3NpemUpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldGNhcHMpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRjYXBzKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfdW5pdF9zaXplKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fYnVmZmVyX2FsbG9jKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1faGFuZGxlX2J1ZmZlcik6CisJICB1c2UgZ2Jvb2xlYW4gcmV0dXJuIHZhbHVlcyBhbmQgcG9pbnRlcnMgdG8gc2l6ZSBzbyB3ZSBjYW4gdXNlIHRoZQorCSAgZnVsbCBHU1RfQlVGRkVSX1NJWkUgcmFuZ2UgKGd1aW50KSBmb3IgYnVmZmVyIHNpemVzCisJICB1c2UgR3N0UGFkRGlyZWN0aW9uIGZvciB0cmFuc2Zvcm1fY2FwcworCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6CisJICByZW5hbWUgZ2V0X3NpemUgdG8gZ2V0X3VuaXRfc2l6ZSBzaW5jZSB0aGF0J3Mgd2hhdCBpdCBpcworCSAgKiBnc3QvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOiAoZ3N0X2NhcHNmaWx0ZXJfdHJhbnNmb3JtX2NhcHMpOgorCSAgdXNlIEdzdFBhZERpcmVjdGlvbiBmb3IgdHJhbnNmb3JtX2NhcHMKKwkgICogZ3N0L2dzdGJ1ZmZlci5jOiAoZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jKToKKwkgICogZ3N0L2dzdHV0aWxzLmg6CisJICBjbGVhbnVwIGFuZCBkZWJ1Z2dpbmcKKworMjAwNS0wOC0yNCAxMzowNDozMSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBGaXhlZCBsb25nIHN0YW5kaW5nIG1lbS1sZWFrCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2NsYXNzX2luaXQpLAorCSAgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSksIChhY3RpdmF0ZV9wYWRzKSwKKwkgIChnc3RfZWxlbWVudF9zYXZlX3RoeXNlbGYpOgorCSAgKiB0b29scy9nc3QtY29tcHByZXAuYzogKG1haW4pOgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAocHJpbnRfZWxlbWVudF9wcm9wZXJ0aWVzX2luZm8pOgorCSAgKiB0b29scy9nc3QteG1saW5zcGVjdC5jOiAocHJpbnRfZWxlbWVudF9wcm9wZXJ0aWVzKToKKwkgIEZpeGVkIGxvbmcgc3RhbmRpbmcgbWVtLWxlYWsKKworMjAwNS0wOC0yNCAxMTo1NDozNyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIENoYW5nZSBHU1RfTUVTU0FHRV9TUkMgdG8gYmUgYSBHT2JqZWN0IHJhdGhlciB0aGFuIGEgR3N0T2JqZWN0LCBzbyB0aGF0IGFwcGxpY2F0aW9ucyBjYW4gc2Vuc2libHkgcG9zdCBjdXN0b20gbWVzc2FnZS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dzdC9nc3RiaW4uYzogKEdTVF9TVEFSVF9URVNUKToKKwkgICogZ3N0L2dzdGJpbi5jOiAoYmluX2J1c19oYW5kbGVyKToKKwkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKGdzdF9tZXNzYWdlX2ZpbmFsaXplKSwgKF9nc3RfbWVzc2FnZV9jb3B5KSwKKwkgIChnc3RfbWVzc2FnZV9uZXcpLCAoZ3N0X21lc3NhZ2VfbmV3X2VvcyksIChnc3RfbWVzc2FnZV9uZXdfZXJyb3IpLAorCSAgKGdzdF9tZXNzYWdlX25ld193YXJuaW5nKSwgKGdzdF9tZXNzYWdlX25ld190YWcpLAorCSAgKGdzdF9tZXNzYWdlX25ld19zdGF0ZV9jaGFuZ2VkKSwgKGdzdF9tZXNzYWdlX25ld19zZWdtZW50X3N0YXJ0KSwKKwkgIChnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lKSwgKGdzdF9tZXNzYWdlX25ld19jdXN0b20pOgorCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgorCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChldmVudF9sb29wKToKKwkgICogdG9vbHMvZ3N0LW1kNXN1bS5jOiAoZXZlbnRfbG9vcCk6CisJICBDaGFuZ2UgR1NUX01FU1NBR0VfU1JDIHRvIGJlIGEgR09iamVjdCByYXRoZXIgdGhhbiBhIEdzdE9iamVjdCwgc28KKwkgIHRoYXQgYXBwbGljYXRpb25zIGNhbiBzZW5zaWJseSBwb3N0IGN1c3RvbSBtZXNzYWdlcyB3aXRoIHJlZmVyZW5jZXMKKwkgIHRvIHRoZWlyIG93biBvYmplY3RzLgorCisyMDA1LTA4LTI0IDExOjQ0OjI0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLio6IE1hbnkgZml4ZXMgYW5kIG5ldyBmZWF0dXJlcyBhZGRlZCBieSBUaG9tYXMuIENhbiBub3cgYWxzbyBkbyB0cmFuc2Zvcm1zIHdpdGggdmFyaWFibGUgc2kuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1faW5pdCksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3RyYW5zZm9ybV9jYXBzKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fdHJhbnNmb3JtX3NpemUpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9jb25maWd1cmVfY2FwcyksIChnc3RfYmFzZV90cmFuc2Zvcm1fc2V0Y2FwcyksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldF9zaXplKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9idWZmZXJfYWxsb2MpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9oYW5kbGVfYnVmZmVyKToKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgorCSAgTWFueSBmaXhlcyBhbmQgbmV3IGZlYXR1cmVzIGFkZGVkIGJ5IFRob21hcy4gQ2FuIG5vdyBhbHNvIGRvCisJICB0cmFuc2Zvcm1zIHdpdGggdmFyaWFibGUgc2l6ZXMgYW5kIGEgY3VzdG9tIGZpeGF0ZV9jYXBzIGZ1bmN0aW9uLgorCisyMDA1LTA4LTI0IDExOjM2OjQ5ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGdzdC9nc3RwYWQuYyAoZ3N0X3BhZF9maXhhdGVfY2Fwcyk6IENoZWNrIGlmIHRoZSBjYXBzIGlzIGZpeGVkIGFscmVhZHkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDgtMjQgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3RwYWQuYyAoZ3N0X3BhZF9maXhhdGVfY2Fwcyk6IENoZWNrIGlmIHRoZSBjYXBzIGlzIGZpeGVkCisJICBhbHJlYWR5LgorCisyMDA1LTA4LTI0IDExOjIyOjMyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YnVmZmVyLmM6IFNvbWUgZGVidWdnaW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RidWZmZXIuYzogKGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyk6CisJICBTb21lIGRlYnVnZ2luZy4KKwkgICogZ3N0L2dzdGNsb2NrLmg6CisJICBDYXN0IHRvIENsb2NrVGltZSBiZWZvcmUgZm9ybWF0dGluZyB0byB0aW1lLgorCSAgKiBnc3QvZ3N0dXRpbHMuaDoKKwkgIENsZWFudXBzLgorCisyMDA1LTA4LTIzIDIxOjMyOjMxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGdyYWNlZnVsbHkgaGFuZGxlIGhlbHBlciBtZXRob2QgY2FsbHMgdG8gb2JqZWN0cyB0aGF0IGFyZSBub3QgYmVlaW5nIGNvbnRyb2xsZWQsIGFkZGVkIHRlc3QgY2FzZSBmb3IgdGhhdAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dzdC1saWJzL2NvbnRyb2xsZXIuYzogKEdTVF9TVEFSVF9URVNUKSwKKwkgIChnc3RfY29udHJvbGxlcl9zdWl0ZSk6CisJICAqIGRvY3MvZ3N0L3RtcGwvZ3N0Y2Fwcy5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdGdob3N0cGFkLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvZ3N0cXVlcnkuc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9nc3R1dGlscy5zZ21sOgorCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdC1oZWxwZXIuYzogKGdzdF9vYmplY3Rfc2V0X2NvbnRyb2xsZXIpLAorCSAgKGdzdF9vYmplY3Rfc2lua192YWx1ZXMpLCAoZ3N0X29iamVjdF9nZXRfdmFsdWVfYXJyYXlzKSwKKwkgIChnc3Rfb2JqZWN0X2dldF92YWx1ZV9hcnJheSk6CisJICBncmFjZWZ1bGx5IGhhbmRsZSBoZWxwZXIgbWV0aG9kIGNhbGxzIHRvIG9iamVjdHMgdGhhdCBhcmUgbm90IGJlZWluZworCSAgY29udHJvbGxlZCwgYWRkZWQgdGVzdCBjYXNlIGZvciB0aGF0CisKKzIwMDUtMDgtMjMgMTg6MTc6MDEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RldmVudC4qOiBTb21lIG1vcmUgZGVidWdnaW5nIG91dHB1dCBhbmQgZG9jIGNsZWFudXBzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RldmVudC5jOiAoX2dzdF9ldmVudF9jb3B5KSwgKGdzdF9ldmVudF9uZXdfY3VzdG9tKSwKKwkgIChnc3RfZXZlbnRfbmV3X25ld3NlZ21lbnQpLCAoZ3N0X2V2ZW50X3BhcnNlX25ld3NlZ21lbnQpLAorCSAgKGdzdF9ldmVudF9uZXdfdGFnKSwgKGdzdF9ldmVudF9wYXJzZV90YWcpLCAoZ3N0X2V2ZW50X25ld19xb3MpLAorCSAgKGdzdF9ldmVudF9wYXJzZV9xb3MpLCAoZ3N0X2V2ZW50X25ld19zZWVrKSwKKwkgIChnc3RfZXZlbnRfcGFyc2Vfc2Vlayk6CisJICAqIGdzdC9nc3RldmVudC5oOgorCSAgU29tZSBtb3JlIGRlYnVnZ2luZyBvdXRwdXQgYW5kIGRvYyBjbGVhbnVwcy4KKwkgICogZ3N0L2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfaGFuZGxlX3NpbmtfZXZlbnQpOgorCSAgRml4IHBvc3NpYmxlIGRlYWRsb2NrLgorCisyMDA1LTA4LTIzIDE0OjI1OjU1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGFkZGVkIGFib3V0IDEwMCBzeW1ib2xzIGZyb20gZ3N0cmVhbWVyLXVudXNlZC50eHQgdG8gdGhlIHJpZ2h0IHNlY3Rpb25zIGZpeGVkIG1vcmUgYnJva2VuIGNvbW1lbnRzIGFkZGVkIEdzdEJ1cyB0byBkb2NzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzOgorCSAgKiBkb2NzL2dzdC90bXBsLy5jdnNpZ25vcmU6CisJICAqIGdzdC9nc3RiaW4uaDoKKwkgICogZ3N0L2dzdGJ1cy5jOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKKwkgIGFkZGVkIGFib3V0IDEwMCBzeW1ib2xzIGZyb20gZ3N0cmVhbWVyLXVudXNlZC50eHQgdG8gdGhlIHJpZ2h0IHNlY3Rpb25zCisJICBmaXhlZCBtb3JlIGJyb2tlbiBjb21tZW50cworCSAgYWRkZWQgR3N0QnVzIHRvIGRvY3MKKworMjAwNS0wOC0yMyAxMTo1Mzo1OCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBpbmxpbmVkIG1vcmUgZG9jIGNvbW1lbnRzLCBhZGRlZCBtaXNzaW5nIGNvbW1lbnRzIGFuZCBmaXhlZCBjb21tZW50cyBmaXhlZCB0eXBvcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGRvY3MvZ3N0L3RtcGwvLmN2c2lnbm9yZToKKwkgICogZG9jcy9nc3QvdG1wbC9nc3RiaW4uc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9nc3RidWZmZXIuc2dtbDoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2dldF90eXBlKSwgKGdzdF9iaW5fY2xhc3NfaW5pdCk6CisJICAqIGdzdC9nc3RidWZmZXIuYzoKKwkgICogZ3N0L2dzdGJ1ZmZlci5oOgorCSAgKiB0b29scy9nc3QtbGF1bmNoLjEuaW46CisJICBpbmxpbmVkIG1vcmUgZG9jIGNvbW1lbnRzLCBhZGRlZCBtaXNzaW5nIGNvbW1lbnRzIGFuZCBmaXhlZCBjb21tZW50cworCSAgZml4ZWQgdHlwb3MKKworMjAwNS0wOC0yMyAxMTozODoyOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGdzdC9nc3RidWZmZXIuYzogc29tZSBkZWJ1Z2dpbmcKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YnVmZmVyLmM6IChnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MpOgorCSAgc29tZSBkZWJ1Z2dpbmcKKwkgICogZ3N0L2dzdGNhcHMuaDoKKwkgIHdoaXRlc3BhY2UgZml4ZXMKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9hY3RpdmF0ZV9wdXNoKSwgKGdzdF9wYWRfYWxsb2NfYnVmZmVyKToKKwkgIG1vcmUgZGVidWdnaW5nCisJICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzogKGdzdF9jYXBzX3N0cnVjdHVyZV9maXhhdGVfZmllbGRfYm9vbGVhbik6CisJICAqIGdzdC9nc3RzdHJ1Y3R1cmUuaDoKKwkgIGFkZCBhIGZpeGF0ZSBmdW5jdGlvbiBmb3IgYm9vbGVhbnM7IGFkZCBhIEZJWE1FIHRoYXQgdGhlc2UgZnVuYworCSAgbmFtZXMgc2hvdWxkIHByb2JhYmx5IGJlIGdzdF9zdHJ1Y3R1cmVfZml4YXRlXyoKKworMjAwNS0wOC0yMiAyMTowMzozMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBwb3J0ZWQgZ3N0Y2hpbGRwcm94eSBvdmVyIGZyb20gMC44IHBvcnRlZCBnc3QtaW5zcGVjdCBmaXhlcyBhbmQgZW5oYW5jZW1lbnRzIG92ZXIgZnJvbSAwLjgKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBnc3QvTWFrZWZpbGUuYW06CisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fZ2V0X3R5cGUpLAorCSAgKGdzdF9iaW5fY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X2luZGV4KSwKKwkgIChnc3RfYmluX2NoaWxkX3Byb3h5X2dldF9jaGlsZHJlbl9jb3VudCksCisJICAoZ3N0X2Jpbl9jaGlsZF9wcm94eV9pbml0KToKKwkgICogZ3N0L2dzdGNoaWxkcHJveHkuYzogKGdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfbmFtZSksCisJICAoZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9pbmRleCksCisJICAoZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZHJlbl9jb3VudCksIChnc3RfY2hpbGRfcHJveHlfbG9va3VwKSwKKwkgIChnc3RfY2hpbGRfcHJveHlfZ2V0X3Byb3BlcnR5KSwgKGdzdF9jaGlsZF9wcm94eV9nZXRfdmFsaXN0KSwKKwkgIChnc3RfY2hpbGRfcHJveHlfZ2V0KSwgKGdzdF9jaGlsZF9wcm94eV9zZXRfcHJvcGVydHkpLAorCSAgKGdzdF9jaGlsZF9wcm94eV9zZXRfdmFsaXN0KSwgKGdzdF9jaGlsZF9wcm94eV9zZXQpLAorCSAgKGdzdF9jaGlsZF9wcm94eV9jaGlsZF9hZGRlZCksIChnc3RfY2hpbGRfcHJveHlfY2hpbGRfcmVtb3ZlZCksCisJICAoZ3N0X2NoaWxkX3Byb3h5X2Jhc2VfaW5pdCksIChnc3RfY2hpbGRfcHJveHlfZ2V0X3R5cGUpOgorCSAgKiBnc3QvZ3N0Y2hpbGRwcm94eS5oOgorCSAgKiBnc3QvcGFyc2UvZ3JhbW1hci55OgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAocHJpbnRfaW50ZXJmYWNlcyksCisJICAocHJpbnRfZWxlbWVudF9wcm9wZXJ0aWVzX2luZm8pLCAocHJpbnRfZWxlbWVudF9pbmZvKToKKwkgIHBvcnRlZCBnc3RjaGlsZHByb3h5IG92ZXIgZnJvbSAwLjgKKwkgIHBvcnRlZCBnc3QtaW5zcGVjdCBmaXhlcyBhbmQgZW5oYW5jZW1lbnRzIG92ZXIgZnJvbSAwLjgKKworMjAwNS0wOC0yMiAxOTo0ODo0NiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBBbHNvIGNhbGwgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbiBpZiB3ZSBoYXZlIEFOWSBjYXBzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV90cmFuc2Zvcm1fY2FwcyksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2hhbmRsZV9idWZmZXIpOgorCSAgQWxzbyBjYWxsIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gaWYgd2UgaGF2ZSBBTlkgY2Fwcy4KKwkgICogZ3N0L2dzdHBpcGVsaW5lLmM6IChnc3RfcGlwZWxpbmVfc2V0X25ld19zdHJlYW1fdGltZSk6CisJICBGaXggZGVidWcgaW5mby4KKworMjAwNS0wOC0yMiAxOToyMjozNCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19ldmVudF9oYW5kbGVyKQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19ldmVudF9oYW5kbGVyKQorCSAgRG9uJ3QgcHJldGVuZCB0byBoYW5kbGUgc2VlayBldmVudHMgaWYgdGhlIHNvdXJjZSBpcyBub3Qgc2Vla2FibGUKKworMjAwNS0wOC0yMiAxODo0ODo0OCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFJlbW92ZSBleHRyYSBwYXJhbWV0ZXIgdG8gZGVidWcgb3V0cHV0CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfaGFuZGxlX29iamVjdCk6CisJICBSZW1vdmUgZXh0cmEgcGFyYW1ldGVyIHRvIGRlYnVnIG91dHB1dAorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfc2VuZF9kaXNjb250KSwKKwkgIChnc3RfYmFzZV9zcmNfZG9fc2VlayksIChnc3RfYmFzZV9zcmNfYWN0aXZhdGVfcHVzaCk6CisJICBGaXggc2VlayBldmVudCBoYW5kbGluZy4KKwkgICogZ3N0L2dzdHBpcGVsaW5lLmM6IChnc3RfcGlwZWxpbmVfY2hhbmdlX3N0YXRlKToKKwkgICogZ3N0L2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfaGFuZGxlX3NpbmtfZXZlbnQpLAorCSAgKGdzdF9xdWV1ZV9zcmNfYWN0aXZhdGVfcHVzaCk6CisJICBEb24ndCBzdGFydCB0aGUgc3JjIHBhZCB0YXNrIG9uIEZMVVNIX1NUT1AgaWYgdGhlIHBhZAorCSAgaXNuJ3QgbGlua2VkLgorCSAgRGVidWcgY2hhbmdlcy4KKworMjAwNS0wOC0yMiAxNToxMjo1NiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0dXRpbHMuaCAoR1NUX0JPSUxFUlBMQVRFX1dJVEhfSU5URVJGQUNFKTogTmV3IGdoZXR0byBtYWNybywgaW1wbGVtZW50cyBhbiBpbnRlcmZhY2UgYW5kIGdzdGltcGxlbWVudHNpbnRlcmZhY2UuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wOC0yMiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdHV0aWxzLmggKEdTVF9CT0lMRVJQTEFURV9XSVRIX0lOVEVSRkFDRSk6IE5ldyBnaGV0dG8KKwkgIG1hY3JvLCBpbXBsZW1lbnRzIGFuIGludGVyZmFjZSBhbmQgZ3N0aW1wbGVtZW50c2ludGVyZmFjZSBmb3IgYQorCSAgbmV3IHR5cGUuCisKKzIwMDUtMDgtMjIgMTU6MDg6NDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGNoZWNrL2dzdC9nc3RjYXBzLmM6IEFkZGVkIGNoZWNrIGZvciBnc3Rfc3RhdGljX2NhcHNfZ2V0KCkgcmVmY291bnRpbmcuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svZ3N0L2dzdGNhcHMuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9jYXBzX3N1aXRlKToKKwkgIEFkZGVkIGNoZWNrIGZvciBnc3Rfc3RhdGljX2NhcHNfZ2V0KCkgcmVmY291bnRpbmcuCisKKzIwMDUtMDgtMjIgMTQ6MzU6NDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RjYXBzLmM6IE1ha2UgX3N0YXRpY19jYXBzX2dldCgpIHJlZmNvdW50aW5nIHNhbmUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGNhcHMuYzogKGdzdF9zdGF0aWNfY2Fwc19nZXQpLCAoZ3N0X2NhcHNfdG9fc3RyaW5nKToKKwkgIE1ha2UgX3N0YXRpY19jYXBzX2dldCgpIHJlZmNvdW50aW5nIHNhbmUuCisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9zZXRfc3RhdGUpOgorCSAgQWRkIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCkgdG8gcHJvdGVjdCBhZ2FpbnN0IHNlZ2ZhdWx0cy4KKworMjAwNS0wOC0yMiAxMDozNzowMiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBpbmxpbmVkIHJlbWFpbmluZyBkb2NzLCBhZGRlZCBtaXNzaW5nIGRvYyBjb21tZW50cworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L3RtcGwvZ3N0ZXZlbnQuc2dtbDoKKwkgICogZ3N0L2dzdGV2ZW50LmM6CisJICAqIGdzdC9nc3RldmVudC5oOgorCSAgaW5saW5lZCByZW1haW5pbmcgZG9jcywgYWRkZWQgbWlzc2luZyBkb2MgY29tbWVudHMKKworMjAwNS0wOC0yMiAwOToyNTo1MSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGNoZWNrL2dzdC9nc3RiaW4uYzogc2luY2Ugd2UgZG9uJ3Qga25vdyB3aGVuIHByZXJvbGwgaXMgZG9uZSwgdXNlIHJlZmNvdW50IHJhbmdlIGNoZWNrIGZvciB0aGUgc2luaworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dzdC9nc3RiaW4uYzogKEdTVF9TVEFSVF9URVNUKToKKwkgIHNpbmNlIHdlIGRvbid0IGtub3cgd2hlbiBwcmVyb2xsIGlzIGRvbmUsIHVzZSByZWZjb3VudCByYW5nZQorCSAgY2hlY2sgZm9yIHRoZSBzaW5rCisJICAqIGdzdC9jaGVjay9nc3RjaGVjay5oOgorCSAgYWRkIG1hY3JvIGZvciBjaGVja2luZyByZWZjb3VudCByYW5nZQorCisyMDA1LTA4LTIxIDE2OjUzOjA4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogY2hlY2svZ3N0L2dzdGJpbi5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOgorCSAgZmlndXJlIHRoaXMgb3V0IGZvciBIVCBtYWNoaW5lcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaWd1cmUgdGhpcyBvdXQgZm9yIEhUIG1hY2hpbmVzCisKKzIwMDUtMDgtMjEgMTU6MjE6NDkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBjaGVjay9nc3QvZ3N0YmluLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6CisJICBzb21lIGZ1bmt5IEhUL211bHRpY3B1IHZzIHNpbmdsZSBkaWZmZXJlbmNlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHNvbWUgZnVua3kgSFQvbXVsdGljcHUgdnMgc2luZ2xlIGRpZmZlcmVuY2UKKworMjAwNS0wOC0yMSAxNTowMToxOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGNoZWNrL01ha2VmaWxlLmFtOiBjbGVhbiB1cCBlbnZpcm9ubWVudCBmb3Igd2hlbiByZWdpc3RyeSBnZXRzIGJ1aWx0IHZlcnN1cyB3aGVuIGFjdHVhbCB0ZXN0cyBhcmUgcnVuOyB2YWxncmluZCBzZWVtcy4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL01ha2VmaWxlLmFtOgorCSAgY2xlYW4gdXAgZW52aXJvbm1lbnQgZm9yIHdoZW4gcmVnaXN0cnkgZ2V0cyBidWlsdCB2ZXJzdXMKKwkgIHdoZW4gYWN0dWFsIHRlc3RzIGFyZSBydW47IHZhbGdyaW5kIHNlZW1zIHRvIG5vdCByZXBvcnQKKwkgIGxlYWtzIGlmIEdTVF9QTFVHSU5fUEFUSCBpcyBzZXQgdG8gc29tZSBzcGVjaWZpYyB2YWx1ZXMKKwkgICogY2hlY2svZ3N0L2dzdGJpbi5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgYWRkIG1vcmUgcmVmY291bnRpbmcgY2hlY2tzOyBtYXliZSB0aGlzIGV4cG9zZXMgYQorCSAgcHJlcm9sbCBsb2NrIGJ1ZyA/CisJICAqIGNvbW1vbi9jaGVjay5tYWs6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2hhbmRsZV9vYmplY3QpOgorCSAgKiBnc3QvY2hlY2svZ3N0Y2hlY2suaDoKKwkgICogZ3N0L2dzdGJpbi5jOiAoYmluX2VsZW1lbnRfaXNfc2VtaV9zaW5rKSwgKGdzdF9iaW5fZ2V0X3N0YXRlKSwKKwkgIChnc3RfYmluX2NoYW5nZV9zdGF0ZSk6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfYWN0aXZhdGVfcHVzaCksIChnc3RfcGFkX2NoYWluKToKKwkgIGFkZC9maXggZGVidWdnaW5nL3doaXRlc3BhY2UKKworMjAwNS0wOC0yMSAxMTo0MDo0NCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGNoZWNrL2dzdC9nc3RldmVudC5jOiBFciwgZG9uJ3QgY2FsbCBnc3RfYmluX3dhdGNoX2Zvcl9zdGF0ZV9jaGFuZ2UgeW91IGlkaW90LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dzdC9nc3RldmVudC5jOiAoZXZlbnRfcHJvYmUpLCAodGVzdF9ldmVudCksCisJICAoR1NUX1NUQVJUX1RFU1QpOgorCSAgRXIsIGRvbid0IGNhbGwgZ3N0X2Jpbl93YXRjaF9mb3Jfc3RhdGVfY2hhbmdlIHlvdSBpZGlvdC4KKworMjAwNS0wOC0yMSAxMToxNTo1NyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGNoZWNrL01ha2VmaWxlLmFtOgorCSogY29tbW9uOgorCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICBydW4gdmFsZ3JpbmQgd2l0aCBwcm9wZXIgZW52CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJ1biB2YWxncmluZCB3aXRoIHByb3BlciBlbnYKKworMjAwNS0wOC0yMSAxMDo1NDo0NyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGNoZWNrL01ha2VmaWxlLmFtOiBVc2UgQ0hFQ0tfQ0ZMQUdTIGFuZCBDSEVDS19MSUJTCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svTWFrZWZpbGUuYW06CisJICBVc2UgQ0hFQ0tfQ0ZMQUdTIGFuZCBDSEVDS19MSUJTCisJICAqIGNoZWNrL2dzdC9nc3RldmVudC5jOiAoZXZlbnRfcHJvYmUpLCAodGVzdF9ldmVudCksCisJICAoR1NUX1NUQVJUX1RFU1QpOgorCSAgRG9uJ3QgbGVhayBldmVudHMuCisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19zZW5kX2Rpc2NvbnQpLAorCSAgKGdzdF9iYXNlX3NyY19zdGFydCksIChnc3RfYmFzZV9zcmNfc3RvcCksCisJICAoZ3N0X2Jhc2Vfc3JjX2FjdGl2YXRlX3B1c2gpLCAoZ3N0X2Jhc2Vfc3JjX2FjdGl2YXRlX3B1bGwpLAorCSAgKGdzdF9iYXNlX3NyY19jaGFuZ2Vfc3RhdGUpOgorCSAgU3ByaW5rbGUgZ3N0X2Jhc2Vfc3JjX3N0b3AgbGliZXJhbGx5IGFyb3VuZCBlcnJvciBwYXRocyB0byBmaXgKKwkgIHByb2JsZW1zIHJldXNpbmcgYSBzb3VyY2UgYWZ0ZXIgZmFpbGVkIHN0YXRlIGNoYW5nZXMuCisJICAqIGdzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6IChoZWxwZXJfZmluZF9wZWVrKSwKKwkgIChoZWxwZXJfZmluZF9zdWdnZXN0KSwgKGdzdF90eXBlX2ZpbmRfaGVscGVyKToKKwkgIEV4dHJhIGRlYnVnIG91dHB1dC4gRG9uJ3Qgc2VnZmF1bHQgb24gR1NUX1BBRF9HRVRSQU5HRUZVTkMgPSBOVUxMCisJICAqIGdzdC9nc3RldmVudC5oOgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdGV2ZW50LnNnbWw6CisJICBNaWdyYXRlIHBhcnQgb2YgdGhlIGRvY3MgZnJvbSB0aGUgU0dNTCBmaWxlLiBXYWl0IGZvciBlbnNvbmljIHRvCisJICB0ZWxsIG1lIGhvdyBJIGRpZCBpdCB3cm9uZyA7KQorCSAgKiB0b29scy9nc3QtdHlwZWZpbmQuYzogKG1haW4pOgorCSAgRXh0cmEgcm9idXN0bmVzcyB0byBzdGF0ZSBjaGFuZ2VzIGJldHdlZW4gZmlsZXMuCisKKzIwMDUtMDgtMjEgMTA6Mzk6MzkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBjaGVjay9NYWtlZmlsZS5hbTogZG9uJ3QgdmFsZ3JpbmQgdGhlIGNvbnRyb2xsZXIgdGVzdCAtIGl0J3MgbGVha2luZyAtIFN0ZWZhbiwgSEVMUAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL01ha2VmaWxlLmFtOgorCSAgZG9uJ3QgdmFsZ3JpbmQgdGhlIGNvbnRyb2xsZXIgdGVzdCAtIGl0J3MgbGVha2luZyAtIFN0ZWZhbiwgSEVMUAorCSAgKiBnc3QvY2hlY2svZ3N0Y2hlY2suYzogKGdzdF9jaGVja19tZXNzYWdlX2Vycm9yKSwKKwkgIChnc3RfY2hlY2tfY2hhaW5fZnVuYyksIChnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCksCisJICAoZ3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQpLCAoZ3N0X2NoZWNrX3NldHVwX3NyY19wYWQpLAorCSAgKGdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkKSwgKGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCksCisJICAoZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkKToKKwkgICogZ3N0L2NoZWNrL2dzdGNoZWNrLmg6CisJICBhZGQgYSBidW5jaCBvZiBtZXRob2RzIHRvIHNldCB1cCBlbGVtZW50cywgYW5kIHNyYyBhbmQgc2luayBwYWRzCisJICAqIGNoZWNrL2VsZW1lbnRzL2Zha2VzcmMuYzogKHNldHVwX2Zha2VzcmMpLCAoY2xlYW51cF9mYWtlc3JjKToKKwkgICogY2hlY2svZWxlbWVudHMvaWRlbnRpdHkuYzogKHNldHVwX2lkZW50aXR5KSwgKGNsZWFudXBfaWRlbnRpdHkpLAorCSAgKEdTVF9TVEFSVF9URVNUKToKKwkgIHVzZSB0aGVtCisJICAqIGdzdC9nc3RtZXNzYWdlLmM6CisJICAqIGdzdC9nc3R0YWcuaDoKKwkgIHdoaXRlc3BhY2UvZG9jIGZpeGVzCisKKzIwMDUtMDgtMjAgMjA6MzA6MzYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSAgbWFrZSBHU1RfRUxFTUVOVF9FUlJPUiBub3QgZG8gR1NUX0VSUk9SX09CSkVDVCAtIHRoZXNlIGVycm9ycyBzaG91bGQgYmUgaGFuZGxlZCBieSB0aGUgYXBwbGljYXRpb24gYW5kIG5vdCBhbHdheXMgcHJpLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIG1ha2UgR1NUX0VMRU1FTlRfRVJST1Igbm90IGRvIEdTVF9FUlJPUl9PQkpFQ1QgLSB0aGVzZSBlcnJvcnMgc2hvdWxkCisJICBiZSBoYW5kbGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBhbmQgbm90IGFsd2F5cyBwcmludGVkIGFzIHdlbGwKKworMjAwNS0wOC0yMCAyMDoxNTo1MyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGNoZWNrL01ha2VmaWxlLmFtOiBzZXQgR1NUX1RPT0xTX0RJUgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL01ha2VmaWxlLmFtOgorCSAgc2V0IEdTVF9UT09MU19ESVIKKwkgICogZ3N0L2NoZWNrL2dzdGNoZWNrLmM6IChnc3RfY2hlY2tfbWVzc2FnZV9lcnJvcik6CisJICAqIGdzdC9jaGVjay9nc3RjaGVjay5oOgorCSAgYWRkIGEgZmFpbF91bmxlc3NfZXF1YWxzX2ludAorCSAgYWRkIGZhaWxfdW5sZXNzIGZvciBlcnJvciBtZXNzYWdlcworCisyMDA1LTA4LTIwIDE0OjAwOjExICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogY2hlY2svTWFrZWZpbGUuYW06CisJKiBjaGVjay9nc3Quc3VwcDoKKwkqIGNvbW1vbjoKKwkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSogdGVzdHMvY2hlY2svZ3N0LnN1cHA6CisJICBmYWN0b3Igb3V0IHRoZSBjb21tb24gc3R1ZmYKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZmFjdG9yIG91dCB0aGUgY29tbW9uIHN0dWZmCisKKzIwMDUtMDgtMjAgMTM6MTc6NDIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBnc3QvTWFrZWZpbGUuYW06CisJICB3b3JrIG9uIGJ1aWxkcyB3aXRob3V0IGNoZWNrCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHdvcmsgb24gYnVpbGRzIHdpdGhvdXQgY2hlY2sKKworMjAwNS0wOC0yMCAxMjo0NzowOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGNoZWNrL01ha2VmaWxlLmFtOgorCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICByZW5hbWVkIHRlc3QKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVuYW1lZCB0ZXN0CisKKzIwMDUtMDgtMjAgMTI6NDM6MTggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBjaGVjay9NYWtlZmlsZS5hbToKKwkqIGNoZWNrL2dzdC9nc3RldmVudC5jOgorCSogY2hlY2svZ3N0L2dzdGV2ZW50cy5jOgorCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudHMuYzoKKwkgIHB1dCBzb21lIG1ha2UtdXAgb24gdGhlIGdzdGV2ZW50IHRlc3QKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcHV0IHNvbWUgbWFrZS11cCBvbiB0aGUgZ3N0ZXZlbnQgdGVzdAorCisyMDA1LTA4LTIwIDEyOjM5OjA1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogY2hlY2svTWFrZWZpbGUuYW06CisJKiBjaGVjay9nc3QvZ3N0aXRlcmF0b3IuYzoKKwkqIGNoZWNrL2dzdC9nc3RzeXN0ZW1jbG9jay5jOgorCSogY2hlY2svZ3N0L2dzdHRhZy5jOgorCSogZ3N0L2dzdGNsb2NrLmM6CisJKiBnc3QvZ3N0aXRlcmF0b3IuYzoKKwkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGl0ZXJhdG9yLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3lzdGVtY2xvY2suYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0YWcuYzoKKwkgIHZhbGdyaW5kIG1vcmUgdGVzdHMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgdmFsZ3JpbmQgbW9yZSB0ZXN0cworCisyMDA1LTA4LTIwIDEyOjE0OjI4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogY2hlY2svTWFrZWZpbGUuYW06CisJKiBjaGVjay9lbGVtZW50cy8uZ2l0aWdub3JlOgorCSogY2hlY2svZWxlbWVudHMvZmFrZXNyYy5jOgorCSogY2hlY2svZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgorCSogY2hlY2svZWxlbWVudHMvaWRlbnRpdHkuYzoKKwkqIGNoZWNrL2dzdC1saWJzL2NvbnRyb2xsZXIuYzoKKwkqIGNoZWNrL2dzdC1saWJzL2dkcC5jOgorCSogY2hlY2svZ3N0L2dzdC5jOgorCSogY2hlY2svZ3N0L2dzdGJpbi5jOgorCSogY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOgorCSogY2hlY2svZ3N0L2dzdGJ1cy5jOgorCSogY2hlY2svZ3N0L2dzdGNhcHMuYzoKKwkqIGNoZWNrL2dzdC9nc3RlbGVtZW50LmM6CisJKiBjaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzoKKwkqIGNoZWNrL2dzdC9nc3RpdGVyYXRvci5jOgorCSogY2hlY2svZ3N0L2dzdG1lc3NhZ2UuYzoKKwkqIGNoZWNrL2dzdC9nc3RtaW5pb2JqZWN0LmM6CisJKiBjaGVjay9nc3QvZ3N0b2JqZWN0LmM6CisJKiBjaGVjay9nc3QvZ3N0cGFkLmM6CisJKiBjaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6CisJKiBjaGVjay9nc3QvZ3N0c3lzdGVtY2xvY2suYzoKKwkqIGNoZWNrL2dzdC9nc3R0YWcuYzoKKwkqIGNoZWNrL2dzdC9nc3R2YWx1ZS5jOgorCSogY2hlY2svZ3N0Y2hlY2suYzoKKwkqIGNoZWNrL2dzdGNoZWNrLmg6CisJKiBjaGVjay9waXBlbGluZXMvY2xlYW51cC5jOgorCSogY2hlY2svcGlwZWxpbmVzL3NpbXBsZV9sYXVuY2hfbGluZXMuYzoKKwkqIGNoZWNrL3N0YXRlcy9zaW5rcy5jOgorCSogY29uZmlndXJlLmFjOgorCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0cGFkLnNnbWw6CisJKiBnc3QvTWFrZWZpbGUuYW06CisJKiBnc3QvY2hlY2svTWFrZWZpbGUuYW06CisJKiBnc3QvY2hlY2svZ3N0Y2hlY2suYzoKKwkqIGdzdC9jaGVjay9nc3RjaGVjay5oOgorCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKKwkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKKwkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6CisJKiBwa2djb25maWcvTWFrZWZpbGUuYW06CisJKiBwa2djb25maWcvZ3N0cmVhbWVyLWNoZWNrLXVuaW5zdGFsbGVkLnBjLmluOgorCSogcGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay5wYy5pbjoKKwkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSogdGVzdHMvY2hlY2svZWxlbWVudHMvLmdpdGlnbm9yZToKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzcmMuYzoKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2lkZW50aXR5LmM6CisJKiB0ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0LmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVzLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGl0ZXJhdG9yLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWVzc2FnZS5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1pbmlvYmplY3QuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RvYmplY3QuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzeXN0ZW1jbG9jay5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRhZy5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6CisJKiB0ZXN0cy9jaGVjay9nc3RjaGVjay5jOgorCSogdGVzdHMvY2hlY2svZ3N0Y2hlY2suaDoKKwkqIHRlc3RzL2NoZWNrL2xpYnMvY29udHJvbGxlci5jOgorCSogdGVzdHMvY2hlY2svbGlicy9nZHAuYzoKKwkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9jbGVhbnVwLmM6CisJKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jOgorCSAgbW92ZSBjaGVjayBzdHVmZiB0byBpdHMgb3duIGxpYnJhcnkgdG8gYmUgdXNlZCBieSBvdGhlciBtb2R1bGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIG1vdmUgY2hlY2sgc3R1ZmYgdG8gaXRzIG93biBsaWJyYXJ5IHRvIGJlIHVzZWQgYnkgb3RoZXIgbW9kdWxlcworCisyMDA1LTA4LTE5IDA5OjU4OjQyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGVsaW1pbmF0ZSBhbm90aGVyIHRtcGwgZmlsZSwgZml4IHNwZWxsaW5nIGluIHRoZSBsb25nLWRlc2NyaXB0aW9uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvdG1wbC9nc3Quc2dtbDoKKwkgICogZ3N0L2dzdC5jOgorCSAgZWxpbWluYXRlIGFub3RoZXIgdG1wbCBmaWxlLCBmaXggc3BlbGxpbmcgaW4gdGhlIGxvbmctZGVzY3JpcHRpb24KKworMjAwNS0wOC0xOCAxNjo0Mjo0OSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGNoZWNrL2dzdC9nc3RldmVudHMuYzogU2hvdWxkIGZpeCBidWlsZCBvbiA2NC1iaXQgYXJjaCdzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svZ3N0L2dzdGV2ZW50cy5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZXZlbnRfcHJvYmUpLAorCSAgKHRlc3RfZXZlbnQpLCAodGltZWRpZmYpLCAoZ3N0ZXZlbnRzX3N1aXRlKToKKwkgIFNob3VsZCBmaXggYnVpbGQgb24gNjQtYml0IGFyY2gncworCisyMDA1LTA4LTE4IDE2OjIwOjI0ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIE1ha2Ugc3VyZSB0aGF0IHdoZW4gYSBwaXBlbGluZSBnb2VzIHRvIFBMQVlJTkcsIHRoYXQgZGF0YSBoYXMgYWN0dWFsbHkgaGl0IHRoZSBzaW5rLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTA4LTE4ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgTWFrZSBzdXJlIHRoYXQgd2hlbiBhIHBpcGVsaW5lIGdvZXMgdG8gUExBWUlORywgdGhhdCBkYXRhIGhhcworCSAgYWN0dWFsbHkgaGl0IHRoZSBzaW5rLgorCSAgKiBjaGVjay9zdGF0ZXMvc2lua3MuYyAodGVzdF9zaW5rKTogQSBzaW5rIHRoYXQgZG9lc24ndCBnZXQgYW55CisJICBkYXRhIHNob3VsZG4ndCByZXR1cm4gU1VDQ0VTUyBmb3IgZ29pbmcgdG8gZWl0aGVyIFBMQVlJTkcgb3IKKwkgIFBBVVNFRC4gVGVzdCBhbHNvIHRoZSByZXR1cm4gdmFsdWVzIG9uIHRoZSB3YXkgYmFjayBkb3duLgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jIChnc3RfZWxlbWVudF9zZXRfc3RhdGUpOiBXaGVuIGNoYW5naW5nIHRoZQorCSAgc3RhdGUgb2YgYW4gZWxlbWVudCBjdXJyZW50bHkgY2hhbmdpbmcgc3RhdGUgYXN5bmNocm9ub3VzbHksIGdvIHRvCisJICBsb3N0LXN0YXRlIGFmdGVyIGNvbW1pdGluZyB0aGUgcGVuZGluZyBzdGF0ZS4gTWFrZXMgZnV0dXJlIGNhbGxzCisJICB0byBnZXRfc3RhdGUgY29udGludWUgdG8gcmV0dXJuIEFTWU5DLgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6IFJldHVybgorCSAgQVNZTkMgd2hlbiBnb2luZyB0byBQTEFZSU5HIGlmIHdlIHN0aWxsIGRvbid0IGhhdmUgcHJlcm9sbCwgYXMgY2FuCisJICBoYXBwZW4gd2l0aCBsaXZlIHNvdXJjZXMuCisKKzIwMDUtMDgtMTggMTY6MTU6MjggKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBkb2NzL3B3Zy9hZHZhbmNlZC10eXBlcy54bWw6IEhhY2sgbG9uZyBwYXJhZ3JhcGggaW50byAyIGNodW5rcyBhcyBhIHdvcmthcm91bmQgZm9yIGJ1Z2d5IGphZGV0ZXggdmVyc2lvbiBpbiBzaWQgYW5kIGIuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL3B3Zy9hZHZhbmNlZC10eXBlcy54bWw6CisJICBIYWNrIGxvbmcgcGFyYWdyYXBoIGludG8gMiBjaHVua3MgYXMgYSB3b3JrYXJvdW5kIGZvciBidWdneQorCSAgamFkZXRleCB2ZXJzaW9uIGluIHNpZCBhbmQgYnJlZXp5IHRoYXQgbG9vcHMgaW5maW5pdGVseSBhbmQKKwkgIGVhdHMgYWxsIFJBTS4KKworMjAwNS0wOC0xOCAxNjowMDozNCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGNoZWNrL2dzdC9nc3RldmVudHMuYzogUHJvdmlkZSBtb3JlIGVycm9yIG1hcmdpbiBpbiBjbG9jayBtZWFzdXJlbWVudHMgdG8gYWxsb3cgZm9yIGdfZ2V0X2N1cnJlbnRfdGltZSBpbmFjY3VyYWNpZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svZ3N0L2dzdGV2ZW50cy5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZXZlbnRfcHJvYmUpLAorCSAgKHRlc3RfZXZlbnQpLCAodGltZWRpZmYpLCAoZ3N0ZXZlbnRzX3N1aXRlKToKKwkgIFByb3ZpZGUgbW9yZSBlcnJvciBtYXJnaW4gaW4gY2xvY2sgbWVhc3VyZW1lbnRzIHRvIGFsbG93IGZvcgorCSAgZ19nZXRfY3VycmVudF90aW1lIGluYWNjdXJhY2llcy4KKworMjAwNS0wOC0xOCAxNTo0NzoxNiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGNoZWNrL2dzdC9nc3RldmVudHMuYzogRml4IGVycm9yIG1lc3NhZ2Ugb3V0cHV0IHNvIEkgbWlnaHQgYmUgYWJsZSB0byB0ZWxsIHdoeSB0aGUgdGVzdCB3b3JrcyBoZXJlIGJ1dCBmYWlscyBvbiB0aGUgYi4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dzdC9nc3RldmVudHMuYzogKEdTVF9TVEFSVF9URVNUKSwgKGV2ZW50X3Byb2JlKSwKKwkgICh0ZXN0X2V2ZW50KSwgKHRpbWVkaWZmKSwgKGdzdGV2ZW50c19zdWl0ZSk6CisJICBGaXggZXJyb3IgbWVzc2FnZSBvdXRwdXQgc28gSSBtaWdodCBiZSBhYmxlIHRvIHRlbGwgd2h5IHRoZQorCSAgdGVzdCB3b3JrcyBoZXJlIGJ1dCBmYWlscyBvbiB0aGUgYnVpbGQgZmFybS4KKworMjAwNS0wOC0xOCAxNTozMToyOCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGNoZWNrLzogSSB3cm90ZSBhIHRlc3QhCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svTWFrZWZpbGUuYW06CisJICAqIGNoZWNrL2dzdC9nc3RldmVudHMuYzogKEdTVF9TVEFSVF9URVNUKSwgKGV2ZW50X3Byb2JlKSwKKwkgICh0ZXN0X2V2ZW50KSwgKHRpbWVkaWZmKSwgKGdzdGV2ZW50c19zdWl0ZSksIChtYWluKToKKwkgIEkgd3JvdGUgYSB0ZXN0IQorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXNlZWtpbmcudHh0OgorCSAgU3BlbGxpbmcgY29ycmVjdGlvbgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdGV2ZW50LnNnbWw6CisJICBEb2NzIHVwZGF0ZXMuCisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2hhbmRsZV9vYmplY3QpOgorCSAgVHJlYXQgYSBidWZmZXItd2l0aG91dC1uZXdzZWdtZW50IHRoZSBzYW1lIGFzIGEgcmVjZWl2aW5nCisJICBhIG5ld3NlZ21lbnQgbm90IGluIHRpbWUgZm9ybWF0LCBhbmQgZGlzYWJsZSBzeW5jaW5nIHRvIHRoZSBjbG9jaworCSAgd2l0aCBhIHdhcm5pbmcuCisJICAqIGdzdC9nc3RidXMuYzogKGdzdF9idXNfc2V0X3N5bmNfaGFuZGxlcik6CisJICBBc3NlcnQgaWYgYW55b25lIHRyaWVzIHRvIHJlcGxhY2UgdGhlIGV4aXN0aW5nIHN5bmNfaGFuZGxlciBmb3IgYnVzLAorCSAgYXMgb25seSB0aGUgb3duZXIgc2hvdWxkIGJlIHNldHRpbmcgaXQuCisJICAqIGdzdC9nc3RldmVudC5oOgorCSAgSGF2ZSBhIGZpeGVkIHNldCBvZiBjdXN0b20gZXZlbnQgZW51bXMgd2l0aCBldmVudHMgaWRlbnRpZmllZCBieQorCSAgdGhlaXIgc3RydWN0dXJlIG5hbWUgKGFzIGluIDAuOCksIHJhdGhlciB0aGFuIGEgZnJlZS1mb3ItYWxsCisJICBhbGxvd2luZyBjb2xsaXNpb25zIGJldHdlZW4gZW51bSB2YWx1ZXMgZnJvbSBkaWZmZXJlbnQgcGx1Z2lucy4KKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9jbGFzc19pbml0KToKKwkgIERvY3MgY2hhbmdlLgorCSAgKiBnc3QvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9oYW5kbGVfc2lua19ldmVudCk6CisJICBIYW5kbGUgb3V0LW9mLWJhbmQgZG93bnN0cmVhbSBldmVudHMgZnJvbSB0aGUgc2VuZGluZyB0aHJlYWQuCisKKzIwMDUtMDgtMTcgMTY6NTc6MDEgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdHBpcGVsaW5lLmMgKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpOiBJbnRlcnByZXQgcGxheS10aW1lb3V0PT0wIHRvIG1lYW4gbm8gdGltZW91dCBhdCBhbGwuIEluIHRoYXQgY2FzZSwgZG9uLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDgtMTcgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3RwaXBlbGluZS5jIChnc3RfcGlwZWxpbmVfY2hhbmdlX3N0YXRlKTogSW50ZXJwcmV0CisJICBwbGF5LXRpbWVvdXQ9PTAgdG8gbWVhbiBubyB0aW1lb3V0IGF0IGFsbC4gSW4gdGhhdCBjYXNlLCBkb24ndAorCSAgYm90aGVyIHdpdGggYSBnZXRfc3RhdGUgb3IgYSB3YXJuaW5nLCBqdXN0IHJldHVybiBkaXJlY3RseSwgZXZlbgorCSAgaWYgaXQncyBBU1lOQy4KKworMjAwNS0wOC0xNyAxNjozMzoyNyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IERlYnVnIGNoYW5nZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDgtMTcgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogRGVidWcgY2hhbmdlcy4KKwkgICogZ3N0L2dzdHV0aWxzLmg6CisJICAqIGdzdC9nc3R1dGlscy5jIChnc3RfYmluX3dhdGNoX2Zvcl9zdGF0ZV9jaGFuZ2UpOiBBZGQgZnVuY3Rpb24gdG8KKwkgIGVuc3VyZSBiaW5zIHBvc3Qgc3RhdGUgY2hhbmdlIG1lc3NhZ2VzLiBBIGJpdCBvZiBhIGhhY2sgYnV0IEkgY2FuJ3QKKwkgIHRoaW5rIG9mIGEgd2F5IHRvIGF2b2lkIGl0LgorCSAgKiBjaGVjay9nc3QvZ3N0YmluLmMgKHRlc3Rfd2F0Y2hfZm9yX3N0YXRlX2NoYW5nZSk6IEFkZGVkIHRlc3QuCisKKzIwMDUtMDgtMTYgMTc6MjM6NTUgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YWRhcHRlci4qOiBOZXcgZnVuY3Rpb24sIGxpa2UgcGVlaygpIGJ1dCB5b3Ugb3duIHRoZSBkYXRhLiBOb3QgdGVycmlibHkgZWZmaWNpZW50IGF0bS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wOC0xNiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2Jhc2UvZ3N0YWRhcHRlci5oOgorCSAgKiBnc3QvYmFzZS9nc3RhZGFwdGVyLmMgKGdzdF9hZGFwdGVyX3Rha2UpOiBOZXcgZnVuY3Rpb24sIGxpa2UKKwkgIHBlZWsoKSBidXQgeW91IG93biB0aGUgZGF0YS4gTm90IHRlcnJpYmx5IGVmZmljaWVudCBhdG0uCisKKzIwMDUtMDgtMTYgMTY6Mjk6MDQgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KKworCSAgZ3N0L2dzdHV0aWxzLio6IEFkZCB0d28gdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRhZyBoYW5kbGluZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9lbGVtZW50X2ZvdW5kX3RhZ3NfZm9yX3BhZCksIChwdXNoX2FuZF9yZWYpLAorCSAgKGdzdF9lbGVtZW50X2ZvdW5kX3RhZ3MpOgorCSAgKiBnc3QvZ3N0dXRpbHMuaDoKKwkgIEFkZCB0d28gdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRhZyBoYW5kbGluZy4KKworMjAwNS0wOC0xNiAxMjoxNTo0NiArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgorCisJICBkb2NzL21hbnVhbC86IEZpeCBkb2NzIHRvIHVzZSBfYmluX2FkZCgpIGJlZm9yZSBfbGluaygpLCB3aGljaCBmaXhlcyB0aGUgZXhhbXBsZXMgd2l0aCByZWNlbnQgY29yZSB2ZXJzaW9ucyAocmVwb3J0ZWQuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbDoKKwkgICogZG9jcy9tYW51YWwvYmFzaWNzLWhlbGxvd29ybGQueG1sOgorCSAgRml4IGRvY3MgdG8gdXNlIF9iaW5fYWRkKCkgYmVmb3JlIF9saW5rKCksIHdoaWNoIGZpeGVzIHRoZSBleGFtcGxlcworCSAgd2l0aCByZWNlbnQgY29yZSB2ZXJzaW9ucyAocmVwb3J0ZWQgYnkgTWFkaGFuIFJhaiBNCisJICA8cmFqX21hZGFuQHJlZGlmZm1haWwuY29tPiwgIzMxMzE5OSkuCisKKzIwMDUtMDgtMTYgMDk6NDI6NTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGNoZWNrL2dzdC9nc3R2YWx1ZS5jOiBBZGRlZCBzdWJ0cmFjdCBjaGVja3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svZ3N0L2dzdHZhbHVlLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RfdmFsdWVfc3VpdGUpOgorCSAgQWRkZWQgc3VidHJhY3QgY2hlY2tzLgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQ6CisJICBTb21lIG1vcmUgZG9jcyBhYm91dCBuZXdzZWdtZW50CisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fY2hhbmdlX3N0YXRlKSwgKGJpbl9idXNfaGFuZGxlcik6CisJICBGaXggRklYTUUKKwkgICogZ3N0L2dzdGNhcHMuYzogKGdzdF9jYXBzX3RvX3N0cmluZyk6CisJICBBZGQgY29tbWVudHMsIGNsZWFudXBzLgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfc2F2ZV90aHlzZWxmKToKKwkgIGNsZWFudXBzCisJICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X3ZhbHVlX2NvbGxlY3RfaW50X3JhbmdlKSwKKwkgIChnc3Rfc3RyaW5nX3Vud3JhcCksIChnc3RfdmFsdWVfdW5pb25faW50X2ludF9yYW5nZSksCisJICAoZ3N0X3ZhbHVlX3VuaW9uX2ludF9yYW5nZV9pbnRfcmFuZ2UpLAorCSAgKGdzdF92YWx1ZV9pbnRlcnNlY3RfaW50X2ludF9yYW5nZSksCisJICAoZ3N0X3ZhbHVlX2ludGVyc2VjdF9pbnRfcmFuZ2VfaW50X3JhbmdlKSwKKwkgIChnc3RfdmFsdWVfaW50ZXJzZWN0X2RvdWJsZV9kb3VibGVfcmFuZ2UpLAorCSAgKGdzdF92YWx1ZV9pbnRlcnNlY3RfZG91YmxlX3JhbmdlX2RvdWJsZV9yYW5nZSksCisJICAoZ3N0X3ZhbHVlX2ludGVyc2VjdF9saXN0KSwgKGdzdF92YWx1ZV9zdWJ0cmFjdF9pbnRfaW50X3JhbmdlKSwKKwkgIChnc3RfdmFsdWVfc3VidHJhY3RfaW50X3JhbmdlX2ludCksCisJICAoZ3N0X3ZhbHVlX3N1YnRyYWN0X2RvdWJsZV9yYW5nZV9kb3VibGUpLAorCSAgKGdzdF92YWx1ZV9zdWJ0cmFjdF9kb3VibGVfcmFuZ2VfZG91YmxlX3JhbmdlKSwKKwkgIChnc3RfdmFsdWVfc3VidHJhY3RfZnJvbV9saXN0KSwgKGdzdF92YWx1ZV9zdWJ0cmFjdF9saXN0KSwKKwkgIChnc3RfdmFsdWVfY2FuX2NvbXBhcmUpLCAoZ3N0X3ZhbHVlX2NvbXBhcmVfZnJhY3Rpb24pOgorCSAgQ2xlYW51cHMsIGFkZCBjb21tZW50cywgcmVtb3ZlIHVubmVlZGVkIGFzc2VydHMuCisKKzIwMDUtMDgtMTUgMTg6MTU6MzggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBnc3QvZ3N0YnVzLmM6CisJKiB0b29scy9nc3QtbGF1bmNoLmM6CisJICBkb24ndCBjb252ZXJ0IE5VTEwgc3RydWN0dXJlcyB0byBzdHJpbmdzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGRvbid0IGNvbnZlcnQgTlVMTCBzdHJ1Y3R1cmVzIHRvIHN0cmluZ3MKKworMjAwNS0wOC0xNSAxNjo1NzozNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBtYWRlIHNvbWUgZGVmaW5lcyBwcml2YXRlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgIG1hZGUgc29tZSBkZWZpbmVzIHByaXZhdGUKKwkgICogZG9jcy9nc3QvdG1wbC9nc3Rjb25maWcuc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9nc3RxdWV1ZS5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdHRhZ2xpc3Quc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9nc3R0eXBlcy5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdHV0aWxzLnNnbWw6CisJICAqIGRvY3MvcHdnL2FwcGVuZGl4LXBvcnRpbmcueG1sOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6IChnc3RfZmFrZV9zaW5rX2NsYXNzX2luaXQpOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiAoZ3N0X2Zha2Vfc3JjX2NsYXNzX2luaXQpOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfY2xhc3NfaW5pdCk6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfY2xhc3NfaW5pdCk6CisJICAqIGdzdC9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2NsYXNzX2luaXQpOgorCSAgKiBnc3QvZ3N0eG1sLmM6IChnc3RfeG1sX2NsYXNzX2luaXQpOgorCSAgZG9jdW1lbnRlZCBhbGwgdW5kb2N1bWVudGVkIHNpZ25hbCBpbmxpbmUKKwkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3QtY29udHJvbGxlci5oOgorCSAgYWRkZWQgcGFkZGluZworCisyMDA1LTA4LTE1IDA5OjU2OjE5ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+CisKKwkgIGRvY3MvcHdnL2FwcGVuZGl4LXBvcnRpbmcueG1sOiBEb2N1bWVudCBfc2V0X2xpbmtfZnVuY3Rpb24gLT4gX3NldF9zZXRjYXBzX2Z1bmN0aW9uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcHdnL2FwcGVuZGl4LXBvcnRpbmcueG1sOgorCSAgRG9jdW1lbnQgX3NldF9saW5rX2Z1bmN0aW9uIC0+IF9zZXRfc2V0Y2Fwc19mdW5jdGlvbi4KKworMjAwNS0wOC0xNCAyMjoyOTowNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGNoZWNrL01ha2VmaWxlLmFtOiBhZGQgYSAuY2hlY2sgdGFyZ2V0IGZvciBydW5uaW5nIHRoZSBjaGVjaworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL01ha2VmaWxlLmFtOgorCSAgYWRkIGEgLmNoZWNrIHRhcmdldCBmb3IgcnVubmluZyB0aGUgY2hlY2sKKwkgICogY2hlY2svZ3N0LWxpYnMvY29udHJvbGxlci5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgY29zbWV0aWMgZml4dXBzCisJICAqIGNoZWNrL2dzdC9nc3RidWZmZXIuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF90ZXN0X3N1aXRlKToKKwkgIGNvbXBsZXRlIGNoZWNrcyBmb3IgZ3N0YnVmZmVyOyB3b3VsZCBiZSBuaWNlIGlmIEkgY291bGQgZ2V0IHRoZQorCSAgZ2NvdiBzdHVmZiB0byB3b3JrIHNvIEkgY2FuIHNlZSBpZiBJIGFjdHVhbGx5IGNvbXBsZXRlZCBnc3RidWZmZXIuYworCSAgKiBjaGVjay9nc3RjaGVjay5oOgorCSAgYWRkIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQKKworMjAwNS0wOC0xMyAxMTo0NTo1MCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHdpbjMyL01BTklGRVNUOgorCSAgcmVtb3ZlIHNwaWRlciBmcm9tIGRpc3QKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVtb3ZlIHNwaWRlciBmcm9tIGRpc3QKKworMjAwNS0wOC0xMyAxMTo0MzoxMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHdpbjMyL2dzdHNwaWRlci52Y3Byb2o6CisJICByZW1vdmVkIGZyb20gSEVBRAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICByZW1vdmVkIGZyb20gSEVBRAorCisyMDA1LTA4LTEzIDEwOjMzOjIyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBBZGQgR1NUX1RBR19MQU5HVUFHRV9DT0RFIGFzIHdlIGhhdmUgaW4gMC44LCBhbmQgZG9uJ3Qgc3BldyBvdXQgYSB3YXJuaW5nIGlmIGEgdGFnIHRoYXQgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGlzIHJlLXIuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBnc3QvZ3N0dGFnLmM6IChfZ3N0X3RhZ19pbml0aWFsaXplKSwgKGdzdF90YWdfcmVnaXN0ZXIpOgorCSAgKiBnc3QvZ3N0dGFnLmg6CisJICBBZGQgR1NUX1RBR19MQU5HVUFHRV9DT0RFIGFzIHdlIGhhdmUgaW4gMC44LCBhbmQgZG9uJ3QKKwkgIHNwZXcgb3V0IGEgd2FybmluZyBpZiBhIHRhZyB0aGF0IGlzIGFscmVhZHkgcmVnaXN0ZXJlZAorCSAgaXMgcmUtcmVnaXN0ZXJlZCwgdW5sZXNzIGl0IGlzIHJlLXJlZ2lzdGVyZWQgd2l0aCBhCisJICBkaWZmZXJlbnQgdHlwZSAoIzMwODQzOCkuCisKKzIwMDUtMDgtMTIgMTQ6MzA6MzEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGRvY3MvcHdnLzogQWRkIHNvbWUgcGFyYWdyYXBocyBhYm91dCBzdGF0ZSBjaGFuZ2VzIGluIDAuOSB0byB0aGUgUFdHIGFuZCB0aGUgcG9ydGluZyBndWlkZSwgaW4gcGFydGljdWxhciBhYm91dCB0aGUgbi4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcHdnL2FwcGVuZGl4LXBvcnRpbmcueG1sOgorCSAgKiBkb2NzL3B3Zy9idWlsZGluZy1zdGF0ZS54bWw6CisJICBBZGQgc29tZSBwYXJhZ3JhcGhzIGFib3V0IHN0YXRlIGNoYW5nZXMgaW4gMC45IHRvIHRoZSBQV0cKKwkgIGFuZCB0aGUgcG9ydGluZyBndWlkZSwgaW4gcGFydGljdWxhciBhYm91dCB0aGUgbmV3IG1lYW5pbmcKKwkgIG9mIEdTVF9TVEFURV9QQVVTRUQgYW5kIGhvdyB0byB3cml0ZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb25zCisJICB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzIGJ5IG11bHRpcGxlIHRocmVhZHMgaW4gbWluZC4KKworMjAwNS0wOC0xMSAxNzozOTo0OCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBDaGFuZ2VMb2c6CisJKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgorCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbDoKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0LWNvbnRyb2xsZXIuYzoKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0LWhlbHBlci5jOgorCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGhlbHBlci5jOgorCSAgYWRkZWQgZGVwcmVjYXRpb24gYW5kIHNpbmNlIGluZGV4ZXMgYWRkZWQgc2luY2UgdGFncworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGRlZCBkZXByZWNhdGlvbiBhbmQgc2luY2UgaW5kZXhlcworCSAgYWRkZWQgc2luY2UgdGFncworCisyMDA1LTA4LTExIDE0OjI0OjU4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0Z2hvc3RwYWQuYzogQWN0dWFsbHkgaW1wbGVtZW50IChyZSlzZXR0aW5nIHRoZSB0YXJnZXQgb24gYSBnaG9zdHBhZCBhcyBkZXNjcmliZWQgaW4gdGhlIGRvY3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGdob3N0cGFkLmM6IChnc3RfcHJveHlfcGFkX3NldF90YXJnZXRfdW5sb2NrZWQpLAorCSAgKGdzdF9wcm94eV9wYWRfc2V0X3RhcmdldCksIChnc3RfcHJveHlfcGFkX2dldF90YXJnZXQpLAorCSAgKGdzdF9wcm94eV9wYWRfZGlzcG9zZSksIChnc3RfZ2hvc3RfcGFkX2RvX2FjdGl2YXRlX3B1c2gpLAorCSAgKGdzdF9naG9zdF9wYWRfZG9fbGluayksIChnc3RfZ2hvc3RfcGFkX3NldF9pbnRlcm5hbCksCisJICAoZ3N0X2dob3N0X3BhZF9uZXdfbm90YXJnZXQpLCAoZ3N0X2dob3N0X3BhZF9nZXRfdGFyZ2V0KSwKKwkgIChnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQpOgorCSAgQWN0dWFsbHkgaW1wbGVtZW50IChyZSlzZXR0aW5nIHRoZSB0YXJnZXQgb24gYSBnaG9zdHBhZAorCSAgYXMgZGVzY3JpYmVkIGluIHRoZSBkb2NzLgorCisyMDA1LTA4LTEwIDIxOjE5OjAxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0LmM6IENoZWNrIHdoZXRoZXIgR1NUX0RFQlVHX05PX0NPTE9SIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCBhbmQgZGlzYWJsZSBjb2xvdXJlZCBkZWJ1ZyBvdXRwdXQgaWYgdGhhdCBpcyAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0LmM6IChnc3RfaW5pdF9jaGVja193aXRoX3BvcHRfdGFibGUpLCAoaW5pdF9wcmUpOgorCSAgQ2hlY2sgd2hldGhlciBHU1RfREVCVUdfTk9fQ09MT1IgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMKKwkgIHNldCBhbmQgZGlzYWJsZSBjb2xvdXJlZCBkZWJ1ZyBvdXRwdXQgaWYgdGhhdCBpcyB0aGUgY2FzZS4KKworMjAwNS0wOC0xMCAxNTowODowMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzogVGhlIG1lbW9yeSByZXR1cm5lZCBieSBnc3RfdHlwZV9maW5kX3BlZWsoKSBuZWVkcyB0byBzdGF5IHZhbGlkIHVudGlsIHRoZSBlbmQgb2YgYSB0eXBlLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzogKGhlbHBlcl9maW5kX3BlZWspLAorCSAgKGdzdF90eXBlX2ZpbmRfaGVscGVyKToKKwkgIFRoZSBtZW1vcnkgcmV0dXJuZWQgYnkgZ3N0X3R5cGVfZmluZF9wZWVrKCkgbmVlZHMgdG8KKwkgIHN0YXkgdmFsaWQgdW50aWwgdGhlIGVuZCBvZiBhIHR5cGVmaW5kIGZ1bmN0aW9uLCBhbmQKKwkgIHR5cGVmaW5kIGZ1bmN0aW9ucyBtYXkga2VlcCByZXN1bHRzIGZyb20gZGlmZmVyZW50CisJICBvZmZzZXRzIGFyb3VuZCwgc28gd2UgY2FuJ3QganVzdCB1bnJlZiB0aGUgYnVmZmVyIGZyb20KKwkgIHRoZSBwcmV2aW91cyBfcGVlaygpLCBidXQgaGF2ZSB0byBzYXZlIGFsbCBidWZmZXJzCisJICByZXR1cm5lZCBieSBfcGVlaygpIHVudGlsIHR5cGVmaW5kaW5nIGlzIGRvbmUgYW5kIG9ubHkKKwkgIGZyZWUgdGhlbSB0aGVuLgorCisyMDA1LTA4LTA5IDE2OjI1OjQ1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBOZXcgbWFjcm9zOiBHU1RfUk9VTkRfVVBfMigpIHRocm91Z2ggR1NUX1JPVU5EX1VQXzY0KCkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZ3N0L2dzdHV0aWxzLmg6CisJICBOZXcgbWFjcm9zOiBHU1RfUk9VTkRfVVBfMigpIHRocm91Z2ggR1NUX1JPVU5EX1VQXzY0KCkuCisKKzIwMDUtMDgtMDggMTY6MDE6MTIgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KKworCSogZ3N0cmVhbWVyLnNwZWMuaW46CisJICBmaXggdXAgc3BlYyBmb3IgbGF0ZXN0IENWUyBjaGFuZ2VzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGZpeCB1cCBzcGVjIGZvciBsYXRlc3QgQ1ZTIGNoYW5nZXMKKworMjAwNS0wOC0wOCAxNTowODoxNCArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgorCisJICBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IEZpeCBhIHByZXR0eSBnb29kIG1lbWxlYWsuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2J1ZmZlcl9hbGxvYyk6CisJICBGaXggYSBwcmV0dHkgZ29vZCBtZW1sZWFrLgorCisyMDA1LTA4LTA4IDEzOjU1OjM3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0aXRlcmF0b3IuaDogRml4IHdyb25nIGluY2x1ZGUgYW5kICdtYWtlIGRpc3RjaGVjaycuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGl0ZXJhdG9yLmg6CisJICBGaXggd3JvbmcgaW5jbHVkZSBhbmQgJ21ha2UgZGlzdGNoZWNrJy4KKworMjAwNS0wOC0wOCAxMzozODozNCArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgorCisJICBnc3QvZ3N0YmluLmM6IFVzZSBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoKSBpbnN0ZWFkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RiaW4uYzogKGJpbl9idXNfaGFuZGxlcik6CisJICBVc2UgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKCkgaW5zdGVhZC4KKworMjAwNS0wOC0wOCAxMzozMTowOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0LzogQWRkIHBhZGRpbmcgdG8gb3VyIGJhc2UgZWxlbWVudHMnIGNsYXNzIGFuZCBpbnN0YW5jZSBzdHJ1Y3RzIGFuZCB0byBHc3RJdGVyYXRvciAoeW91IHdpbGwgbmVlZCB0byByZWJ1aWxkIGFsbCBwLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YWRhcHRlci5oOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKKwkgICogZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKKwkgICogZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5oOgorCSAgKiBnc3QvZ3N0aXRlcmF0b3IuaDoKKwkgIEFkZCBwYWRkaW5nIHRvIG91ciBiYXNlIGVsZW1lbnRzJyBjbGFzcyBhbmQgaW5zdGFuY2Ugc3RydWN0cyBhbmQKKwkgIHRvIEdzdEl0ZXJhdG9yICh5b3Ugd2lsbCBuZWVkIHRvIHJlYnVpbGQgYWxsIHBsdWdpbnMgYW5kIGFwcHMhKQorCisyMDA1LTA4LTA4IDEzOjE3OjA3ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+CisKKwkgIGdzdC9nc3RiaW4uYzogTWFrZSBkZWZhdWx0IG1lc3NhZ2UgZm9yd2FyZGluZyBmcm9tIGNoaWxkLT5idXMgdG8gYmluLT5idXMgdGhyZWFkc2FmZSBhbmQgbWFrZSBpdCBub3QgZW1pdCB3YXJuaW5ncyBpZi4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RiaW4uYzogKGJpbl9idXNfaGFuZGxlcik6CisJICBNYWtlIGRlZmF1bHQgbWVzc2FnZSBmb3J3YXJkaW5nIGZyb20gY2hpbGQtPmJ1cyB0byBiaW4tPmJ1cworCSAgdGhyZWFkc2FmZSBhbmQgbWFrZSBpdCBub3QgZW1pdCB3YXJuaW5ncyBpZiB0aGUgcGFyZW50IGhhcyBubyBidXMuCisKKzIwMDUtMDgtMDggMTI6MTQ6MjAgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KKworCSAgZ3N0L2dzdGVsZW1lbnQuYzogT24gcGF1c2VkLT5yZWFkeSwgc2V0IHBhZC0+Y2FwcyB0byBOVUxMLCBhcyBpcyB0aGUgZG9jdW1lbnRlZCBiZWhhdmlvdXIgaW4gdGhpcyBzdGF0ZSBjaGFuZ2UuIEZpeGVzLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGFjdGl2YXRlX3BhZHMpOgorCSAgT24gcGF1c2VkLT5yZWFkeSwgc2V0IHBhZC0+Y2FwcyB0byBOVUxMLCBhcyBpcyB0aGUgZG9jdW1lbnRlZAorCSAgYmVoYXZpb3VyIGluIHRoaXMgc3RhdGUgY2hhbmdlLiBGaXhlcyBwbGF5YmFjayBvZiBzZXJpZXMgb2YKKwkgIG1lZGlhIGZpbGVzIHdoZW4gdmlzdWFsaXphdGlvbiBpcyBlbmFibGVkIGluIFRvdGVtLgorCisyMDA1LTA4LTA3IDEzOjM3OjA4ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+CisKKwkgIGdzdC9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6IEFsbG93IE5VTEwgYXMgZmlsdGVyLWNhcHMgKHdoaWNoIG1lYW5zICJhbnkiKS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOiAoZ3N0X2NhcHNmaWx0ZXJfc2V0X3Byb3BlcnR5KToKKwkgIEFsbG93IE5VTEwgYXMgZmlsdGVyLWNhcHMgKHdoaWNoIG1lYW5zICJhbnkiKS4KKworMjAwNS0wOC0wNSAxNzoyODozMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBDaGFuZ2VMb2c6CisJKiBjb21tb246CisJKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgorCSogbGlicy9nc3QvY29udHJvbGxlci9nc3QtY29udHJvbGxlci5jOgorCSogbGlicy9nc3QvY29udHJvbGxlci9nc3QtY29udHJvbGxlci5oOgorCSogbGlicy9nc3QvY29udHJvbGxlci9nc3QtaGVscGVyLmM6CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5oOgorCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RoZWxwZXIuYzoKKwkgIGFkZGluZyBtb3JlIGVudHJpZXMgdG8gdGhlIGRvY3MgYW5kIGZpeCBzbWFsbCBkb2MtYnVncworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGRpbmcgbW9yZSBlbnRyaWVzIHRvIHRoZSBkb2NzIGFuZCBmaXggc21hbGwgZG9jLWJ1Z3MKKworMjAwNS0wOC0wNSAxMzo0MjoxMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBjaGVjay9nc3QtbGlicy8uZ2l0aWdub3JlOgorCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGRvY3MvZ3N0L3RtcGwvLmdpdGlnbm9yZToKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZmFrZXNpbmsuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZmFrZXNyYy5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RmaWxlc2luay5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RmaWxlc3JjLnNnbWw6CisJKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKKwkqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmM6CisJKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKKwkqIGdzdC9lbGVtZW50cy9nc3RmaWxlc3JjLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgorCSogdGVzdHMvY2hlY2svbGlicy8uZ2l0aWdub3JlOgorCSAgbWlncmF0ZWQgc29tZSBtb3JlIGRvY3MgdG8gYmUgaW5saW5lZCBpbiB0aGUgc291cmNlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBtaWdyYXRlZCBzb21lIG1vcmUgZG9jcyB0byBiZSBpbmxpbmVkIGluIHRoZSBzb3VyY2VzCisKKzIwMDUtMDgtMDUgMTI6NTk6NDYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogQ2hhbmdlTG9nOgorCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXM6CisJKiBkb2NzL2dzdC90bXBsL2dzdGJhc2VzaW5rLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGJhc2VzcmMuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0YmFzZXRyYW5zZm9ybS5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RmYWtlc3JjLnNnbWw6CisJKiBnc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgorCSogZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0LWNvbnRyb2xsZXIuYzoKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0LWNvbnRyb2xsZXIuaDoKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0LWhlbHBlci5jOgorCSogbGlicy9nc3QvY29udHJvbGxlci9nc3QtaW50ZXJwb2xhdGlvbi5jOgorCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuaDoKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aGVscGVyLmM6CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzoKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvbGliLmM6CisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vY2EucG86CisJKiBwby9jcy5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSAgYWRkZWQgbG9uZy9zaG9ydCBkZXNjIGZvciBjb250cm9sbGVyIGRvY3MgYWRkZWQgY29sbGVjdHBhZHMgYmFzZSBjbGFzcyBkb2NzIGFkZGVkIGNvcnJlY3QgaW5jbHVkZXMgdG8gYmFzZS1jbGFzcyBkb2NzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFkZGVkIGxvbmcvc2hvcnQgZGVzYyBmb3IgY29udHJvbGxlciBkb2NzCisJICBhZGRlZCBjb2xsZWN0cGFkcyBiYXNlIGNsYXNzIGRvY3MKKwkgIGFkZGVkIGNvcnJlY3QgaW5jbHVkZXMgdG8gYmFzZS1jbGFzcyBkb2NzCisKKzIwMDUtMDgtMDUgMTA6MDI6NDQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogQ2hhbmdlTG9nOgorCSogY2hlY2svZ3N0LWxpYnMvY29udHJvbGxlci5jOgorCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXM6CisJKiBkb2NzL2dzdC90bXBsL2dzdC5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RiYXNlc2luay5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RiYXNlc3JjLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGJhc2V0cmFuc2Zvcm0uc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0YmluLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGJ1ZmZlci5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RjYXBzLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGNsb2NrLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGNvbXBhdC5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3Rjb25maWcuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZWxlbWVudC5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RlbGVtZW50ZGV0YWlscy5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RlbGVtZW50ZmFjdG9yeS5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RlbnVtdHlwZXMuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZXJyb3Iuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZXZlbnQuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZmFrZXNpbmsuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZmFrZXNyYy5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RmaWxlc2luay5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RmaWxlc3JjLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGZpbHRlci5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3Rmb3JtYXQuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0Z2hvc3RwYWQuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0aW1wbGVtZW50c2ludGVyZmFjZS5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RpbmRleC5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RpbmRleGZhY3Rvcnkuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0aW5mby5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RpdGVyYXRvci5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RtYWNyb3Muc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0bWVtY2h1bmsuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0bWluaW9iamVjdC5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RvYmplY3Quc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0cGFkLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHBhZHRlbXBsYXRlLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHBhcnNlLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHBpcGVsaW5lLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHBsdWdpbi5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RwbHVnaW5mZWF0dXJlLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHF1ZXJ5LnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHF1ZXVlLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHJlZ2lzdHJ5LnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHJlZ2lzdHJ5cG9vbC5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RzdHJ1Y3R1cmUuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0c3lzdGVtY2xvY2suc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0dGFnbGlzdC5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3R0YWdzZXR0ZXIuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0dHJhY2Uuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0dHJhc2hzdGFjay5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3R0eXBlZmluZC5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3R0eXBlZmluZGZhY3Rvcnkuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0dHlwZXMuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0dXJpaGFuZGxlci5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3R1cml0eXBlLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHV0aWxzLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHZhbHVlLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHZlcnNpb24uc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0eG1sLnNnbWw6CisJKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtZG9jcy5zZ21sOgorCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKKwkqIGRvY3MvbGlicy90bXBsL2dzdGRhdGFwcm90b2NvbC5zZ21sOgorCSogZG9jcy9saWJzL3RtcGwvZ3N0Z2V0Yml0cy5zZ21sOgorCSogZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdC1jb250cm9sbGVyLmM6CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdC1jb250cm9sbGVyLmg6CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdC1oZWxwZXIuYzoKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgorCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmg6CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGhlbHBlci5jOgorCSogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6CisJICBtb3JlIHRlc3RzIChhbmQgZml4ZXMpIGZvciB0aGUgY29udHJvbGxlciBtb3JlIGRvY3MgZm9yIHRoZSBjb250cm9sbGVyIGludGVncmF0ZWQgY29tcGFuaWVzIGRvY3MgZm9yIHRoZSBhZGFwdGVyCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIG1vcmUgdGVzdHMgKGFuZCBmaXhlcykgZm9yIHRoZSBjb250cm9sbGVyCisJICBtb3JlIGRvY3MgZm9yIHRoZSBjb250cm9sbGVyCisJICBpbnRlZ3JhdGVkIGNvbXBhbmllcyBkb2NzIGZvciB0aGUgYWRhcHRlcgorCisyMDA1LTA4LTA1IDA2OjU3OjI3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogY2hlY2svZ3N0LWxpYnMvY29udHJvbGxlci5jOgorCSogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6CisJICBjb3NtZXRpYyBmaXhlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBjb3NtZXRpYyBmaXhlcworCisyMDA1LTA4LTA1IDA2OjU1OjAzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogY2hlY2svZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgorCSogZG9jcy9nc3QvdG1wbC9nc3Quc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0YmFzZXNpbmsuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0YmFzZXNyYy5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RiYXNldHJhbnNmb3JtLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGJpbi5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RidWZmZXIuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0Y2Fwcy5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RjbG9jay5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3Rjb21wYXQuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0Y29uZmlnLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGVsZW1lbnQuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZWxlbWVudGRldGFpbHMuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZWxlbWVudGZhY3Rvcnkuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZW51bXR5cGVzLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGVycm9yLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGV2ZW50LnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGZha2VzaW5rLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGZha2VzcmMuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZmlsZXNpbmsuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZmlsZXNyYy5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RmaWx0ZXIuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0Zm9ybWF0LnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGdob3N0cGFkLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGltcGxlbWVudHNpbnRlcmZhY2Uuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0aW5kZXguc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0aW5kZXhmYWN0b3J5LnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGluZm8uc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0aXRlcmF0b3Iuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0bWFjcm9zLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdG1lbWNodW5rLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdG1pbmlvYmplY3Quc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0b2JqZWN0LnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHBhZC5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RwYWR0ZW1wbGF0ZS5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RwYXJzZS5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RwaXBlbGluZS5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RwbHVnaW4uc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0cGx1Z2luZmVhdHVyZS5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RxdWVyeS5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RxdWV1ZS5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RyZWdpc3RyeS5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RyZWdpc3RyeXBvb2wuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0c3RydWN0dXJlLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHN5c3RlbWNsb2NrLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHRhZ2xpc3Quc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0dGFnc2V0dGVyLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHRyYWNlLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHRyYXNoc3RhY2suc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0dHlwZWZpbmQuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0dHlwZWZpbmRmYWN0b3J5LnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHR5cGVzLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHVyaWhhbmRsZXIuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0dXJpdHlwZS5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3R1dGlscy5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3R2YWx1ZS5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3R2ZXJzaW9uLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHhtbC5zZ21sOgorCSogZG9jcy9saWJzL3RtcGwvZ3N0ZGF0YXByb3RvY29sLnNnbWw6CisJKiBkb2NzL2xpYnMvdG1wbC9nc3RnZXRiaXRzLnNnbWw6CisJKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9nc3RmYWtlc3JjLmM6CisJICBhZGQgc2l6ZXR5cGUgdGVzdHMgZm9yIGZha2VzcmMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkIHNpemV0eXBlIHRlc3RzIGZvciBmYWtlc3JjCisKKzIwMDUtMDgtMDQgMTk6NDA6NDMgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzogUmVpbXBsZW1lbnQgdXNpbmcgYmFzZXRyYW5zZm9ybSwgZml4ZXMgYnVmZmVyX2FsbG9jIHByb3h5aW5nIGFtb25nIG90aGVyIHRoaW5ncy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wOC0wNCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzogUmVpbXBsZW1lbnQgdXNpbmcgYmFzZXRyYW5zZm9ybSwKKwkgIGZpeGVzIGJ1ZmZlcl9hbGxvYyBwcm94eWluZyBhbW9uZyBvdGhlciB0aGluZ3MuCisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgorCSAgUmV2ZXJ0IHBhdGNoIHRvIGdzdGJhc2V0cmFuc2Zvcm0gZnJvbSA3LTI4IHJlbW92aW5nCisJICBkZWxheV9jb25maWd1cmUuCisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaCAoR3N0QmFzZVRyYW5zZm9ybUNsYXNzLmdldF9zaXplKToKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jIChnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0X3NpemUpOgorCSAgU2VtYW50aWNzIGNoYW5nZWQsIHNob3VsZCByZXR1cm4gbm90IHRoZSBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyCisJICBidXQgdGhlIGJ5dGUgc2l6ZSBvZiBhIGJ1ZmZlciB3aXRoIGEgZ2l2ZW4gY2Fwcy4KKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jIChnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0Y2Fwcyk6IEJldHRlcgorCSAgZGVidWcgb2JqZWN0LgorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9jb25maWd1cmVfY2Fwcyk6IERvbid0IHNldCBvdXRfc2l6ZSBoZXJlOiAoaW4sCisJICBvdXQpIGFyZSBub3QgdGhlIHBhZCBjYXBzIHVudGlsIHNldGNhcHMgZmluaXNoZXMuCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2J1ZmZlcl9hbGxvYyk6IFByb3h5IHRoZSBidWZmZXJfYWxsb2MgZm9yIHRoZQorCSAgbm90LWluLXBsYWNlIGNhc2UgYXMgd2VsbC4gRGVhbCB3aXRoIGNoYW5naW5nIGZyb20gaW4tcGxhY2UgdG8KKwkgIG5vdC1pbi1wbGFjZSB3aXRoaW4gY2FsbGluZyBwYWRfYWxsb2NfYnVmZmVyLiBTdGlsbCBhIGJpdAorCSAgY29uY2VybmVkIGFib3V0IHRoZSBvdmVyaGVhZCBoZXJlLi4uCisKKzIwMDUtMDgtMDQgMTE6NTY6NTcgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkgIGdzdC9iYXNlL2dzdGFkYXB0ZXIuaDogQWRkZWQgZ3N0X2FkYXB0ZXJfZ2V0X3R5cGUoKSB0byB0aGUgaGVhZGVyCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YWRhcHRlci5oOgorCSAgQWRkZWQgZ3N0X2FkYXB0ZXJfZ2V0X3R5cGUoKSB0byB0aGUgaGVhZGVyCisKKzIwMDUtMDgtMDMgMTY6MTA6MDYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogY2hlY2svTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgIGZpeGVkIGRpc3RjaGVjayBicmVha2FnZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaXhlZCBkaXN0Y2hlY2sgYnJlYWthZ2UKKworMjAwNS0wOC0wMyAxNTo1OToxMSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBDaGFuZ2VMb2c6CisJKiBjaGVjay9NYWtlZmlsZS5hbToKKwkqIGNoZWNrL2dzdC1saWJzL2NvbnRyb2xsZXIuYzoKKwkqIGdzdC9iYXNlL2dzdHB1c2hzcmMuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5jOgorCSogbGlicy9nc3QvY29udHJvbGxlci9nc3QtY29udHJvbGxlci5jOgorCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6CisJKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL2NoZWNrL2xpYnMvY29udHJvbGxlci5jOgorCSAgYWRkZWQgY2hlY2sgdGVzdCBzdWl0ZSBmb3IgdGhlIGNvbnRyb2xsZXIgZml4ZWQgYSBkb2MgdHlwbworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGRlZCBjaGVjayB0ZXN0IHN1aXRlIGZvciB0aGUgY29udHJvbGxlcgorCSAgZml4ZWQgYSBkb2MgdHlwbworCisyMDA1LTA4LTAzIDEzOjMwOjE4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIENoYW5nZUxvZzoKKwkqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgorCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXM6CisJKiBkb2NzL2dzdC90bXBsL2dzdGZha2VzcmMuc2dtbDoKKwkqIGdzdC9iYXNlL1JFQURNRToKKwkqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJKiBnc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgorCSogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSogZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5jOgorCSogZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5oOgorCSogbGlicy9nc3QvYmFzZS9SRUFETUU6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdHB1c2hzcmMuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5oOgorCSAgYWRkIHNob3J0L2xvbmcgZGVzY3JpcHRpb24gZG9jcyB0byBiYXNlIGNsYXNzZXMgYWRkIHB1c2hzcmMgdG8gdGhlIGRvY3MgcmVtb3ZlIGNvbnNvbGlkYXRlZCBkb2MgZnJhZ21lbnRzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFkZCBzaG9ydC9sb25nIGRlc2NyaXB0aW9uIGRvY3MgdG8gYmFzZSBjbGFzc2VzCisJICBhZGQgcHVzaHNyYyB0byB0aGUgZG9jcworCSAgcmVtb3ZlIGNvbnNvbGlkYXRlZCBkb2MgZnJhZ21lbnRzCisKKzIwMDUtMDgtMDIgMjE6Mzk6MzQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogcGtnY29uZmlnL2dzdHJlYW1lci1jb250cm9sbGVyLXVuaW5zdGFsbGVkLnBjLmluOgorCSAgdGhhdCBvbmUgdG9vCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHRoYXQgb25lIHRvbworCisyMDA1LTA4LTAyIDIxOjM4OjE0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItY29udHJvbGxlci5wYy5pbjoKKwkgIGFkZGVkIG1pc3NpbmcgcGMgZmlsZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkZWQgbWlzc2luZyBwYyBmaWxlcworCisyMDA1LTA4LTAyIDIxOjM1OjM0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIENoYW5nZUxvZzoKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZXZlbnQuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZmFrZXNyYy5zZ21sOgorCSogZG9jcy9saWJzL01ha2VmaWxlLmFtOgorCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbDoKKwkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMudHlwZXM6CisJKiBleGFtcGxlcy9NYWtlZmlsZS5hbToKKwkqIGV4YW1wbGVzL2NvbnRyb2xsZXIvLmdpdGlnbm9yZToKKwkqIGV4YW1wbGVzL2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06CisJKiBleGFtcGxlcy9jb250cm9sbGVyL2F1ZGlvLWV4YW1wbGUuYzoKKwkqIGxpYnMvZ3N0L01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvY29udHJvbGxlci8uZ2l0aWdub3JlOgorCSogbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0LWNvbnRyb2xsZXIuYzoKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0LWNvbnRyb2xsZXIuaDoKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0LWhlbHBlci5jOgorCSogbGlicy9nc3QvY29udHJvbGxlci9nc3QtaW50ZXJwb2xhdGlvbi5jOgorCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuaDoKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aGVscGVyLmM6CisJKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzoKKwkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvbGliLmM6CisJKiBwa2djb25maWcvTWFrZWZpbGUuYW06CisJKiBwa2djb25maWcvZ3N0cmVhbWVyLWNvbnRyb2wtdW5pbnN0YWxsZWQucGMuaW46CisJKiBwa2djb25maWcvZ3N0cmVhbWVyLWNvbnRyb2wucGMuaW46CisJKiB0ZXN0cy9vbGQvZXhhbXBsZXMvTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9vbGQvZXhhbXBsZXMvY29udHJvbGxlci8uZ2l0aWdub3JlOgorCSogdGVzdHMvb2xkL2V4YW1wbGVzL2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9vbGQvZXhhbXBsZXMvY29udHJvbGxlci9hdWRpby1leGFtcGxlLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL01ha2VmaWxlLmFtOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jb250cm9sbGVyLy5naXRpZ25vcmU6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NvbnRyb2xsZXIvaW50ZXJwb2xhdG9yLmM6CisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW06CisJKiB0ZXN0c3VpdGUvY29udHJvbGxlci8uZ2l0aWdub3JlOgorCSogdGVzdHN1aXRlL2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06CisJKiB0ZXN0c3VpdGUvY29udHJvbGxlci9pbnRlcnBvbGF0b3IuYzoKKwkgIGFkZGVkIGNvbnRyb2xsZXIgY29kZSByZW1vdmVkIGRwYXJhbSBwYyBmaWxlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGRlZCBjb250cm9sbGVyIGNvZGUKKwkgIHJlbW92ZWQgZHBhcmFtIHBjIGZpbGVzCisKKzIwMDUtMDgtMDEgMjE6MTc6MDEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBnc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiBCcm9hZGNhc3QgdGhlIGNvbmRpdGlvbiB3aGVuIHNodXR0aW5nIGRvd24sIHRvIG1ha2Ugc3VyZSB3ZSB3YWtlIGFsbCB0aHJlYWRzIHVwLiBTaHV0IGRvd24uLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RwYWRzX2ZpbmFsaXplKSwKKwkgIChnc3RfY29sbGVjdHBhZHNfc3RvcCk6CisJICBCcm9hZGNhc3QgdGhlIGNvbmRpdGlvbiB3aGVuIHNodXR0aW5nIGRvd24sIHRvIG1ha2Ugc3VyZSB3ZSB3YWtlIGFsbAorCSAgdGhyZWFkcyB1cC4gU2h1dCBkb3duIHBhZHMgb24gZmluYWxpemUsIGZvciBzYWZldHkuCisKKzIwMDUtMDgtMDEgMTc6MjY6MDAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IEhhbmRsZSBQQVVTRUQtPlJFQURZLT5QQVVTRUQgdHJhbnNpdGlvbiBhZnRlciBuZWdvdGlhdGlvbiBvY2N1cnJlZCBhbHJlYWR5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTA4LTAxICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV9pbml0KSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1faGFuZGxlX2J1ZmZlciksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NoYW5nZV9zdGF0ZSk6CisJICBIYW5kbGUgUEFVU0VELT5SRUFEWS0+UEFVU0VEIHRyYW5zaXRpb24gYWZ0ZXIgbmVnb3RpYXRpb24KKwkgIG9jY3VycmVkIGFscmVhZHkuCisJICAqIGdzdC9nc3RtZXNzYWdlLmM6IChnc3RfbWVzc2FnZV9pbml0KToKKwkgIEV4dHJhIHBpZWNlIG9mIGRlYnVnIGZvciBuZXcgbWVzc2FnZXMuCisKKzIwMDUtMDgtMDEgMTY6NDM6NTggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogZG9jcy9saWJzL01ha2VmaWxlLmFtOgorCSAgcmVtb3ZlIGRwYXJhbXMgZGVwcyBmcm9tIHRoZSBkb2NzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJlbW92ZSBkcGFyYW1zIGRlcHMgZnJvbSB0aGUgZG9jcworCisyMDA1LTA4LTAxIDE2OjE3OjMxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIENoYW5nZUxvZzoKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0YmFzZXNyYy5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RlbGVtZW50LnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGV2ZW50LnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGZha2VzcmMuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0Zm9ybWF0LnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGdob3N0cGFkLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHBhZC5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RxdWVyeS5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RzdHJ1Y3R1cmUuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0dGFnbGlzdC5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3R2YWx1ZS5zZ21sOgorCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbDoKKwkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6CisJKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMudHlwZXM6CisJKiBsaWJzL2dzdC9NYWtlZmlsZS5hbToKKwkqIGxpYnMvZ3N0L2NvbnRyb2wvLmdpdGlnbm9yZToKKwkqIGxpYnMvZ3N0L2NvbnRyb2wvTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9jb250cm9sL2NvbnRyb2wuYzoKKwkqIGxpYnMvZ3N0L2NvbnRyb2wvY29udHJvbC5oOgorCSogbGlicy9nc3QvY29udHJvbC9kcGFyYW0uYzoKKwkqIGxpYnMvZ3N0L2NvbnRyb2wvZHBhcmFtLmg6CisJKiBsaWJzL2dzdC9jb250cm9sL2RwYXJhbV9zbW9vdGguYzoKKwkqIGxpYnMvZ3N0L2NvbnRyb2wvZHBhcmFtX3Ntb290aC5oOgorCSogbGlicy9nc3QvY29udHJvbC9kcGFyYW1jb21tb24uaDoKKwkqIGxpYnMvZ3N0L2NvbnRyb2wvZHBhcmFtbWFuYWdlci5jOgorCSogbGlicy9nc3QvY29udHJvbC9kcGFyYW1tYW5hZ2VyLmg6CisJKiBsaWJzL2dzdC9jb250cm9sL2RwbGluZWFyaW50ZXJwLmM6CisJKiBsaWJzL2dzdC9jb250cm9sL2RwbGluZWFyaW50ZXJwLmg6CisJKiBsaWJzL2dzdC9jb250cm9sL3VuaXRjb252ZXJ0LmM6CisJKiBsaWJzL2dzdC9jb250cm9sL3VuaXRjb252ZXJ0Lmg6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL01ha2VmaWxlLmFtOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9keW5wYXJhbXMvLmdpdGlnbm9yZToKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvZHlucGFyYW1zL01ha2VmaWxlLmFtOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9keW5wYXJhbXMvZHBhcmFtc3Rlc3QuYzoKKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbToKKwkqIHRlc3RzdWl0ZS9keW5wYXJhbXMvLmdpdGlnbm9yZToKKwkqIHRlc3RzdWl0ZS9keW5wYXJhbXMvTWFrZWZpbGUuYW06CisJKiB0ZXN0c3VpdGUvZHlucGFyYW1zL2RwYXJhbXN0ZXN0LmM6CisJKiB0b29scy9NYWtlZmlsZS5hbToKKwkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6CisJKiB0b29scy9nc3QteG1saW5zcGVjdC5jOgorCSAgZGVhY3RpdmF0ZSBhbmQgcmVtb3ZlIGRwYXJhbXMgKGxpYmdzdGNvbnRyb2wpCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGRlYWN0aXZhdGUgYW5kIHJlbW92ZSBkcGFyYW1zIChsaWJnc3Rjb250cm9sKQorCisyMDA1LTA4LTAxIDExOjE1OjQ3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50Lio6IFNldCBjYXBzIG9uIGFsbCBvdXRnb2luZyBidWZmZXJzLCBub3QganVzdCB0aGUgZmlyc3Qgb25lLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfaGF2ZV90eXBlKSwgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9pbml0KSwKKwkgIChzdG9wX3R5cGVmaW5kaW5nKSwgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9oYW5kbGVfZXZlbnQpLAorCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9jaGFpbiksIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfZ2V0cmFuZ2UpOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50Lmg6CisJICBTZXQgY2FwcyBvbiBhbGwgb3V0Z29pbmcgYnVmZmVycywgbm90IGp1c3QgdGhlIGZpcnN0IG9uZS4KKworMjAwNS0wOC0wMSAwOToxMDowMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC4qOiBTZXQgY2FwcyBvbiBmaXJzdCBvdXRnb2luZyBidWZmZXIgd2hlbiB3ZSd2ZSBmb3VuZCB0aGUgdHlwZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6CisJICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2hhdmVfdHlwZSksCisJICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NoZWNrX3NldF9idWZmZXJfY2FwcyksCisJICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2luaXQpLCAoc3RvcF90eXBlZmluZGluZyksCisJICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2hhbmRsZV9ldmVudCksCisJICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NoYWluKSwgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9nZXRyYW5nZSk6CisJICAqIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuaDoKKwkgIFNldCBjYXBzIG9uIGZpcnN0IG91dGdvaW5nIGJ1ZmZlciB3aGVuIHdlJ3ZlIGZvdW5kIHRoZSB0eXBlLgorCisyMDA1LTA4LTAxIDA4OjUyOjMxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBkb2NzL2dzdC86IFJlbW92ZSBzb21lIG9sZCBjcnVmdCBmcm9tIGRvY3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZG9jcy9nc3QvdG1wbC9nc3RzY2hlZHVsZXIuc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9nc3RzY2hlZHVsZXJmYWN0b3J5LnNnbWw6CisJICBSZW1vdmUgc29tZSBvbGQgY3J1ZnQgZnJvbSBkb2NzLgorCisyMDA1LTA3LTMxIDExOjU5OjMzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvZ3N0cGFkLmg6IEZpeCBpbmxpbmUgZG9jcyBmb3IgR3N0UGFkTGlua1JldHVybi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkLmg6CisJICBGaXggaW5saW5lIGRvY3MgZm9yIEdzdFBhZExpbmtSZXR1cm4uCisJICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzogKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUpOgorCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmg6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICBOZXcgQVBJOiBnc3Rfc3RydWN0dXJlX2hhc19uYW1lKCkuCisKKzIwMDUtMDctMzAgMTU6MDA6MDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIGNvbmZpZ3VyZS5hYzogVXNlIEFDX1NZU19MQVJHRUZJTEUsIHdoaWNoIHdpbGwgc2V0IF9GSUxFX09GRlNFVF9CSVRTPTY0IGFuZCBfTEFSR0VGSUxFX1NPVVJDRSBpbiBjb25maWcuaCBhcyByZXF1aXJlZC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgIFVzZSBBQ19TWVNfTEFSR0VGSUxFLCB3aGljaCB3aWxsIHNldCBfRklMRV9PRkZTRVRfQklUUz02NAorCSAgYW5kIF9MQVJHRUZJTEVfU09VUkNFIGluIGNvbmZpZy5oIGFzIHJlcXVpcmVkLiBEbyBub3QKKwkgIGV4cG9ydCB0aG9zZSBmbGFncyBpbiBvdXIgLnBjIGZpbGVzIGFueSBsb25nZXIgKCMxNDIyMDkpLgorCSAgUmVtb3ZlIHVudXNlZCBHU1RfRElTQUJMRV9PTUVHQV9DT1RIUkVBRFMgc3R1ZmYuCisJICAqIGdzdC9lbGVtZW50cy9nc3RmaWxlc2luay5jOiAoZ3N0X2ZpbGVfc2lua19jbGFzc19pbml0KSwKKwkgIChnc3RfZmlsZV9zaW5rX2RvX3NlZWspLCAoZ3N0X2ZpbGVfc2lua19ldmVudCksCisJICAoZ3N0X2ZpbGVfc2lua19nZXRfY3VycmVudF9vZmZzZXQpLCAoZ3N0X2ZpbGVfc2lua19yZW5kZXIpOgorCSAgUmVkbyBzZWVrL3RlbGwgY2FsbHMgd2l0aCBsYXJnZSBmaWxlIHN1cHBvcnQgaW4gbWluZDsgYWRkIHNvbWUKKwkgIGRlYnVnZ2luZyBtZXNzYWdlczsgYWRkIGxvZyBtZXNzYWdlIHRoYXQgdGVsbHMgdXMgd2hlbiBsYXJnZQorCSAgZmlsZSBzdXBwb3J0IGlzIHVuYXZhaWxhYmxlIG9yIG5vdCBlbmFibGVkIGZvciBzb21lIHJlYXNvbi4KKwkgICogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogKGdzdF9maWxlX3NyY19jbGFzc19pbml0KToKKwkgIEFkZCBsb2cgbWVzc2FnZSB0aGF0IHRlbGxzIHVzIHdoZW4gbGFyZ2UgZmlsZSBzdXBwb3J0CisJICBpcyB1bmF2YWlsYWJsZSBvciBub3QgZW5hYmxlZCBmb3Igc29tZSByZWFzb24uCisKKzIwMDUtMDctMjkgMTk6MjI6MjggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGNoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOiBBZGRlZCB0ZXN0IGZvciByZW1vdmluZyBhbiBlbGVtZW50IHdpdGggZ2hvc3RwYWQgZnJvbSBhIGJpbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9naG9zdF9wYWRfc3VpdGUpOgorCSAgQWRkZWQgdGVzdCBmb3IgcmVtb3ZpbmcgYW4gZWxlbWVudCB3aXRoIGdob3N0cGFkIGZyb20gYSBiaW4uCisJICBGaXhlZCB0ZXN0IGFzIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZG9lcyB0aGUgcmlnaHQgdGhpbmcuCisJICAqIGdzdC9nc3RnaG9zdHBhZC5jOiAoZ3N0X3Byb3h5X3BhZF9jbGFzc19pbml0KSwKKwkgIChnc3RfcHJveHlfcGFkX2RvX3F1ZXJ5X3R5cGUpLCAoZ3N0X3Byb3h5X3BhZF9kb19ldmVudCksCisJICAoZ3N0X3Byb3h5X3BhZF9kb19xdWVyeSksIChnc3RfcHJveHlfcGFkX2RvX2ludGVybmFsX2xpbmspLAorCSAgKGdzdF9wcm94eV9wYWRfZG9fYnVmZmVyYWxsb2MpLCAoZ3N0X3Byb3h5X3BhZF9kb19hY3RpdmF0ZSksCisJICAoZ3N0X3Byb3h5X3BhZF9kb19hY3RpdmF0ZXB1bGwpLCAoZ3N0X3Byb3h5X3BhZF9kb19hY3RpdmF0ZXB1c2gpLAorCSAgKGdzdF9wcm94eV9wYWRfZG9fY2hhaW4pLCAoZ3N0X3Byb3h5X3BhZF9kb19nZXRyYW5nZSksCisJICAoZ3N0X3Byb3h5X3BhZF9kb19jaGVja2dldHJhbmdlKSwgKGdzdF9wcm94eV9wYWRfZG9fZ2V0Y2FwcyksCisJICAoZ3N0X3Byb3h5X3BhZF9kb19hY2NlcHRjYXBzKSwgKGdzdF9wcm94eV9wYWRfZG9fZml4YXRlY2FwcyksCisJICAoZ3N0X3Byb3h5X3BhZF9kb19zZXRjYXBzKSwgKGdzdF9wcm94eV9wYWRfc2V0X3RhcmdldCksCisJICAoZ3N0X3Byb3h5X3BhZF9nZXRfdGFyZ2V0KSwgKGdzdF9wcm94eV9wYWRfaW5pdCksCisJICAoZ3N0X3Byb3h5X3BhZF9kaXNwb3NlKSwgKGdzdF9wcm94eV9wYWRfZmluYWxpemUpLAorCSAgKGdzdF9naG9zdF9wYWRfY2xhc3NfaW5pdCksIChnc3RfZ2hvc3RfcGFkX2RvX2FjdGl2YXRlX3B1c2gpLAorCSAgKGdzdF9naG9zdF9wYWRfZG9fbGluayksIChnc3RfZ2hvc3RfcGFkX2RvX3VubGluayksCisJICAoZ3N0X2dob3N0X3BhZF9zZXRfaW50ZXJuYWwpLCAoZ3N0X2dob3N0X3BhZF9kaXNwb3NlKSwKKwkgIChnc3RfZ2hvc3RfcGFkX25ld19ub3RhcmdldCksIChnc3RfZ2hvc3RfcGFkX25ldyksCisJICAoZ3N0X2dob3N0X3BhZF9nZXRfdGFyZ2V0KSwgKGdzdF9naG9zdF9wYWRfc2V0X3RhcmdldCk6CisJICAqIGdzdC9nc3RnaG9zdHBhZC5oOgorCSAgQ2xlYW4gdXAgZ2hvc3RwYWRzLCByZW1vdmUgcHJvcGVydGllcyBmb3IgaW50ZXJuYWwgc3R1ZmYuCisJICBNYWtlIHRocmVhZHNhZmUuCisJICBGaXggcmVmY291bnRpbmcuCisJICBQcmVwYXJlIGZvciBzd2l0Y2hpbmcgdGFyZ2V0cywgbm90IGFsbCB1c2UgY2FzZXMgd29yayB5ZXQuCisKKzIwMDUtMDctMjkgMTk6MTk6MjkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZGVzaWduL3BhcnQtZ3N0Z2hvc3RwYWQudHh0OiBTbWFsbCB1cGRhdGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RnaG9zdHBhZC50eHQ6CisJICBTbWFsbCB1cGRhdGUuCisJICAqIGdzdC9nc3RiaW4uYzogKHVubGlua19wYWRzKSwgKGdzdF9iaW5fYWRkX2Z1bmMpLAorCSAgKGdzdF9iaW5fcmVtb3ZlX2Z1bmMpOgorCSAgVW5saW5raW5nIHBhZHMgd2hpbGUgaG9sZGluZyB0aGUgYmluIExPQ0sgaXMgbm90IGEgZ29vZAorCSAgaWRlYS4KKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9jbGFzc19pbml0KSwKKwkgIChnc3RfcGFkX2xpbmtfY2hlY2tfaGllcmFyY2h5KSwgKGdzdF9wYWRfZ2V0X2NhcHNfdW5sb2NrZWQpLAorCSAgKGdzdF9wYWRfYWNjZXB0X2NhcHMpLCAoZ3N0X3BhZF9zZXRfY2FwcyksIChnc3RfcGFkX3NlbmRfZXZlbnQpOgorCSAgTm8gcHJvYiBzZXR0aW5nIHRlbXBsYXRlIGFmdGVyIGNyZWF0aW5nIHRoZSBwYWQuCisKKzIwMDUtMDctMjkgMTU6MzQ6NTIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBnc3QvZ3N0YnVzLmM6IGdzdF9idXNfcG9sbCBtYXkgYmUgY2FsbGVkIGZyb20gb3RoZXIgdGhyZWFkcy4gSGFuZGxlIHRoaXMgbmljZWx5IGJ5IG5vdCBtYWtpbmcgcG9sbF9kYXRhIGRpc2FwcGVhciBvZmYuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YnVzLmM6IChnc3RfYnVzX3NldF9mbHVzaGluZyksIChnc3RfYnVzX3BvcCksCisJICAoZ3N0X2J1c19wZWVrKSwgKGdzdF9idXNfc291cmNlX2Rpc3BhdGNoKSwKKwkgIChnc3RfYnVzX2FkZF93YXRjaF9mdWxsKSwgKHBvbGxfaGFuZGxlciksIChwb2xsX3RpbWVvdXQpLAorCSAgKHBvbGxfZGVzdHJveSksIChwb2xsX2Rlc3Ryb3lfdGltZW91dCksIChnc3RfYnVzX3BvbGwpOgorCSAgZ3N0X2J1c19wb2xsIG1heSBiZSBjYWxsZWQgZnJvbSBvdGhlciB0aHJlYWRzLiBIYW5kbGUKKwkgIHRoaXMgbmljZWx5IGJ5IG5vdCBtYWtpbmcgcG9sbF9kYXRhIGRpc2FwcGVhciBvZmYgdGhlCisJICBzdGFjayBvbmNlIGdzdF9idXNfcG9sbCByZXR1cm5zLgorCSAgZ3N0X2J1c19wZWVrIG5vdyBpbmNyZW1lbnRzIHRoZSByZWZjb3VudCBvbiB0aGUgcmV0dXJuZWQKKwkgIG1lc3NhZ2UuCisKKzIwMDUtMDctMjkgMTE6Mjk6NTIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZGVzaWduL3BhcnQtZ3N0Z2hvc3RwYWQudHh0OiBPdmVydmlldyBvZiBjdXJyZW50IEdob3N0UGFkIGRhdGFzdHJ1Y3R1cmVzIGFuZCB1c2UgY2FzZXMgZm9yIGNoYW5naW5nIHRoZSB0YXJnZXQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RnaG9zdHBhZC50eHQ6CisJICBPdmVydmlldyBvZiBjdXJyZW50IEdob3N0UGFkIGRhdGFzdHJ1Y3R1cmVzIGFuZCB1c2UKKwkgIGNhc2VzIGZvciBjaGFuZ2luZyB0aGUgdGFyZ2V0LgorCisyMDA1LTA3LTI4IDE1OjM4OjQ2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBjaGVjay9nc3QvZ3N0YmluLmM6IEFkZGVkIGNoZWNrcyBmb3IgaGllcmFyY2h5IGNvbnNpc3RlbmN5IHdoYW4gYWRkaW5nIGxpbmtlZCBlbGVtZW50cyB0byBiaW5zLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dzdC9nc3RiaW4uYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9iaW5fc3VpdGUpOgorCSAgQWRkZWQgY2hlY2tzIGZvciBoaWVyYXJjaHkgY29uc2lzdGVuY3kgd2hhbiBhZGRpbmcgbGlua2VkCisJICBlbGVtZW50cyB0byBiaW5zLgorCSAgKiBjaGVjay9nc3QvZ3N0ZWxlbWVudC5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X2VsZW1lbnRfc3VpdGUpOgorCSAgQWRkZWQgY2hlY2sgdG8gdGVzdCBlbGVtZW50IHNjaGVkdWxpbmcgd2l0aG91dCBiaW4vcGlwZWxpbmUuCisJICAqIGNoZWNrL3BpcGVsaW5lcy9zaW1wbGVfbGF1bmNoX2xpbmVzLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBGaXJzdCBhZGQgZWxlbWVudHMgdG8gYmluLCB0aGVuIGxpbmsuCisJICAqIGdzdC9nc3RiaW4uYzogKHVubGlua19wYWRzKSwgKGdzdF9iaW5fYWRkX2Z1bmMpLAorCSAgKGdzdF9iaW5fcmVtb3ZlX2Z1bmMpOgorCSAgVW5saW5rIHBhZHMgZnJvbSBlbGVtZW50cyBhZGRlZC9yZW1vdmVkIGZyb20gYmluIHRvIG1haW50YWluCisJICBoaWVyYXJjaHkgY29uc2lzdGVuY3kuCisKKzIwMDUtMDctMjggMTE6NDk6NTYgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS4qOiBSZW1vdmUgYnJva2VuIGRlbGF5X2NvbmZpZ3VyZSAoZml4ZXMgcmVuZWdvdGlhdGlvbiBvZiBzb2Z0d2FyZSBzY2FsaW5nIHBpcGVsaW5lcyk7IHJlbW92Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldGNhcHMpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9oYW5kbGVfYnVmZmVyKToKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgorCSAgUmVtb3ZlIGJyb2tlbiBkZWxheV9jb25maWd1cmUgKGZpeGVzIHJlbmVnb3RpYXRpb24gb2Ygc29mdHdhcmUKKwkgIHNjYWxpbmcgcGlwZWxpbmVzKTsgcmVtb3ZlIHNvbWUgbGVmdG92ZXIgcHJpbnRmKClzLgorCisyMDA1LTA3LTI4IDExOjI0OjMzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBjaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzogQWRkZWQgc29tZSBtb3JlIHRlc3RzIGZvciB3cm9uZyBoaWVyYXJjaHkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9naG9zdF9wYWRfc3VpdGUpOgorCSAgQWRkZWQgc29tZSBtb3JlIHRlc3RzIGZvciB3cm9uZyBoaWVyYXJjaHkKKwkgICogZG9jcy9kZXNpZ24vcGFydC1vdmVydmlldy50eHQ6CisJICBTb21lIHVwZGF0ZXMuCisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fcmVtb3ZlX2Z1bmMpLCAoZ3N0X2Jpbl9kaXNwb3NlKToKKwkgIENsZWFudXBzLgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCksIChnc3RfZWxlbWVudF9zZWVrKSwKKwkgIChnc3RfZWxlbWVudF9kaXNwb3NlKToKKwkgIFNvbWUgbW9yZSBjbGVhbnVwcy4KKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9saW5rX2NoZWNrX2NvbXBhdGlibGVfdW5sb2NrZWQpLAorCSAgKGdzdF9wYWRfbGlua19jaGVja19oaWVyYXJjaHkpLCAoZ3N0X3BhZF9saW5rX3ByZXBhcmUpLAorCSAgKGdzdF9wYWRfZ2V0X2NhcHNfdW5sb2NrZWQpLCAoZ3N0X3BhZF9hY2NlcHRfY2FwcyksCisJICAoZ3N0X3BhZF9zZXRfY2FwcyksIChnc3RfcGFkX3NlbmRfZXZlbnQpOgorCSAgQ2hlY2sgZm9yIGNvcnJlY3QgaGllcmFyY2h5IHdoZW4gbGlua2luZyBwYWRzLiBNb3ZpbmcgdG8KKwkgIHN0cmljdCByZXF1aXJlbWVudCBmb3IgZ2hvc3RwYWRzIHdoZW4gbGlua2luZyBlbGVtZW50cyBpbgorCSAgZGlmZmVyZW50IGJpbnMuCisJICAqIGdzdC9nc3RwYWQuaDoKKwkgIENsZWFuIHVwcy4gQWRkZWQgV1JPTkdfSElFUkFSQ0hZIHJldHVybiB2YWx1ZS4KKworMjAwNS0wNy0yOCAxMDozODowMiArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgorCisJICBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IEJldHRlciBkZWJ1ZyBpZiBubyB0cmFuc2Zvcm0gaXMgcG9zc2libGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldGNhcHMpOgorCSAgQmV0dGVyIGRlYnVnIGlmIG5vIHRyYW5zZm9ybSBpcyBwb3NzaWJsZS4KKworMjAwNS0wNy0yNyAyMDoyMjo0OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9yYW5kb20vd3RheS9uZXR3b3JrLXRyYW5zcDogU29tZSBvbGQgZG9jIEkgaGFkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcmFuZG9tL3d0YXkvbmV0d29yay10cmFuc3A6CisJICBTb21lIG9sZCBkb2MgSSBoYWQuCisKKzIwMDUtMDctMjcgMTk6MDA6MzYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzogRml4IHNlcmlhbGl6YXRpb24gb2Ygc2VlayBldmVudHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOiAoZ3N0X2RwX3BhY2tldF9mcm9tX2V2ZW50KSwKKwkgIChnc3RfZHBfZXZlbnRfZnJvbV9wYWNrZXQpOgorCSAgRml4IHNlcmlhbGl6YXRpb24gb2Ygc2VlayBldmVudHMuCisKKzIwMDUtMDctMjcgMTg6NDc6NDggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIEZpeCBjb21waWxhdGlvbiBhbmQgZml4IGV2ZW50IHNlcmlhbGl6YXRpb24uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svZ3N0LWxpYnMvZ2RwLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICAqIGdzdC9lbGVtZW50cy9nc3RmYWtlc2luay5jOiAoZ3N0X2Zha2Vfc2lua19ldmVudCk6CisJICBGaXggY29tcGlsYXRpb24gYW5kIGZpeCBldmVudCBzZXJpYWxpemF0aW9uLgorCisyMDA1LTA3LTI3IDE4OjMzOjAzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBTb21lIGRvY3MgdXBkYXRlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIENIQU5HRVMtMC45OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQ6CisJICBTb21lIGRvY3MgdXBkYXRlcworCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwKKwkgIChnc3RfYmFzZV9zaW5rX2V2ZW50KSwgKGdzdF9iYXNlX3NpbmtfZG9fc3luYyksCisJICAoZ3N0X2Jhc2Vfc2lua19hY3RpdmF0ZV9wdXNoKSwgKGdzdF9iYXNlX3NpbmtfYWN0aXZhdGVfcHVsbCk6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19zZW5kX2Rpc2NvbnQpLAorCSAgKGdzdF9iYXNlX3NyY19kb19zZWVrKSwgKGdzdF9iYXNlX3NyY19ldmVudF9oYW5kbGVyKSwKKwkgIChnc3RfYmFzZV9zcmNfbG9vcCk6CisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV90cmFuc2Zvcm1fY2FwcyksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NvbmZpZ3VyZV9jYXBzKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRjYXBzKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0X3NpemUpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2J1ZmZlcl9hbGxvYyksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2V2ZW50KSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9oYW5kbGVfYnVmZmVyKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Bhc3N0aHJvdWdoKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1faXNfcGFzc3Rocm91Z2gpOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzogKGdzdF9mYWtlX3NpbmtfZXZlbnQpOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzogKGdzdF9maWxlX3NpbmtfZXZlbnQpOgorCSAgRXZlbnQgdXBkYXRlcy4KKwkgICogZ3N0L2dzdGJ1ZmZlci5oOgorCSAgVXNlIGZhc3RlciBjYXN0cy4KKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X3NlZWspOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSAgVXBkYXRlIGdzdF9lbGVtZW50X3NlZWsuCisJICAqIGdzdC9nc3RldmVudC5jOiAoZ3N0X2V2ZW50X2ZpbmFsaXplKSwgKF9nc3RfZXZlbnRfY29weSksCisJICAoZ3N0X2V2ZW50X25ldyksIChnc3RfZXZlbnRfbmV3X2N1c3RvbSksIChnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSksCisJICAoZ3N0X2V2ZW50X25ld19mbHVzaF9zdGFydCksIChnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3ApLAorCSAgKGdzdF9ldmVudF9uZXdfZW9zKSwgKGdzdF9ldmVudF9uZXdfbmV3c2VnbWVudCksCisJICAoZ3N0X2V2ZW50X3BhcnNlX25ld3NlZ21lbnQpLCAoZ3N0X2V2ZW50X25ld190YWcpLAorCSAgKGdzdF9ldmVudF9wYXJzZV90YWcpLCAoZ3N0X2V2ZW50X25ld19maWxsZXIpLCAoZ3N0X2V2ZW50X25ld19xb3MpLAorCSAgKGdzdF9ldmVudF9wYXJzZV9xb3MpLCAoZ3N0X2V2ZW50X25ld19zZWVrKSwKKwkgIChnc3RfZXZlbnRfcGFyc2Vfc2VlayksIChnc3RfZXZlbnRfbmV3X25hdmlnYXRpb24pOgorCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKKwkgIE1ha2UgR3N0RXZlbnQgdXNlIEdzdFN0cnVjdHVyZS4gQWRkIHBhcnNpbmcgY29kZSwgbWFrZSBzdXJlIHRoZQorCSAgQVBJIGlzIHN1ZmZpY2llbnRseSBnZW5lcmljLgorCSAgTWFyayBwb3NzaWJsZSBkaXJlY3Rpb25zIG9mIGV2ZW50cyBhbmQgc2VyaWFsaXphdGlvbi4KKwkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKGdzdF9tZXNzYWdlX2luaXQpLCAoZ3N0X21lc3NhZ2VfZmluYWxpemUpLAorCSAgKF9nc3RfbWVzc2FnZV9jb3B5KSwgKGdzdF9tZXNzYWdlX25ld19zZWdtZW50X3N0YXJ0KSwKKwkgIChnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lKSwgKGdzdF9tZXNzYWdlX25ld19jdXN0b20pLAorCSAgKGdzdF9tZXNzYWdlX3BhcnNlX3NlZ21lbnRfc3RhcnQpLAorCSAgKGdzdF9tZXNzYWdlX3BhcnNlX3NlZ21lbnRfZG9uZSk6CisJICBTbWFsbCBjbGVhbnVwcy4KKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9nZXRfY2Fwc191bmxvY2tlZCksIChnc3RfcGFkX2FjY2VwdF9jYXBzKSwKKwkgIChnc3RfcGFkX3NldF9jYXBzKSwgKGdzdF9wYWRfc2VuZF9ldmVudCk6CisJICBVcGRhdGUgZm9yIG5ldyBldmVudHMuCisJICBDYXRjaCBldmVudHMgc2VudCBpbiB3cm9uZyBkaXJlY3Rpb25zLgorCSAgKiBnc3QvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9saW5rX3NyYyksCisJICAoZ3N0X3F1ZXVlX2hhbmRsZV9zaW5rX2V2ZW50KSwgKGdzdF9xdWV1ZV9jaGFpbiksIChnc3RfcXVldWVfbG9vcCksCisJICAoZ3N0X3F1ZXVlX2hhbmRsZV9zcmNfcXVlcnkpOgorCSAgRXZlbnQgdXBkYXRlcy4KKwkgICogZ3N0L2dzdHRhZy5jOgorCSAgKiBnc3QvZ3N0dGFnLmg6CisJICBSZW1vdmUgZXZlbnQgY29kZSBmcm9tIHRoaXMgZmlsZS4KKwkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOiAoZ3N0X2RwX3BhY2tldF9mcm9tX2V2ZW50KSwKKwkgIChnc3RfZHBfZXZlbnRfZnJvbV9wYWNrZXQpOgorCSAgRXZlbnQgdXBkYXRlcy4KKworMjAwNS0wNy0yNyAxNTowNTo0NSArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgorCisJICBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IE1ha2UgZGVidWdnaW5nIGFjdHVhbGx5IHVzZWZ1bC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0Y2FwcyksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NvbmZpZ3VyZV9jYXBzKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRjYXBzKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0X3NpemUpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2hhbmRsZV9idWZmZXIpOgorCSAgTWFrZSBkZWJ1Z2dpbmcgYWN0dWFsbHkgdXNlZnVsLgorCisyMDA1LTA3LTI1IDEyOjMxOjA4ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+CisKKwkgIGdzdC9nc3RwYWQuYzogSW1wbGVtZW50IGRlZmF1bHQgZml4YXRpb24gb25jZSBhZ2Fpbiwgc28gdGhhdCBnc3RfcGFkX2ZpeGF0ZSgpIGFjdHVhbGx5IGRvZXMgYW55dGhpbmcgYXQgYWxsLiBUaGlzIHByby4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKGZpeGF0ZV92YWx1ZSksIChnc3RfcGFkX2RlZmF1bHRfZml4YXRlKSwKKwkgIChnc3RfcGFkX2ZpeGF0ZV9jYXBzKToKKwkgIEltcGxlbWVudCBkZWZhdWx0IGZpeGF0aW9uIG9uY2UgYWdhaW4sIHNvIHRoYXQgZ3N0X3BhZF9maXhhdGUoKQorCSAgYWN0dWFsbHkgZG9lcyBhbnl0aGluZyBhdCBhbGwuIFRoaXMgcHJvYmFibHkgbmVlZHMgdG8gYmUgc29tZQorCSAgc29ydCBvZiBhIGxhc3QgcmVzb3J0LCBhbmQgdXNlIHByb2ZpbGUtYmFzZWQgZml4YXRpb24gZmlyc3QsIGJ1dAorCSAgc2luY2UgdGhhdCBkb2Vzbid0IGV4aXN0IHlldCwgdGhpcyBpcyB0aGUgYmVzdCB3ZSBoYXZlLiBGaXhlcworCSAgdmlzdWFsaXphdGlvbiBpbiBUb3RlbS4KKworMjAwNS0wNy0yMiAxMTo0NzoxMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1ldmVudHMudHh0OiBTbWFsbCB1cGRhdGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1ldmVudHMudHh0OgorCSAgU21hbGwgdXBkYXRlLgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwKKwkgIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpLCAoZ3N0X2Jhc2Vfc2lua19hY3RpdmF0ZV9wdXNoKSwKKwkgIChnc3RfYmFzZV9zaW5rX2FjdGl2YXRlX3B1bGwpOgorCSAgU29tZSBtb3JlIGNvbW1lbnRzLgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiAoZ3N0X2Zha2Vfc3JjX2NsYXNzX2luaXQpLAorCSAgKGdzdF9mYWtlX3NyY19jcmVhdGUpOgorCSAgRml4IGhhbmRvZmYgbWFyc2hhbGwuCisJICAqIGdzdC9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiAoZ3N0X2lkZW50aXR5X2NsYXNzX2luaXQpLAorCSAgKGdzdF9pZGVudGl0eV90cmFuc2Zvcm1faXApOgorCSAgV2UncmUgYSByZWFsIGlucGxhY2UgZWxlbWVudC4KKwkgICogZ3N0L2dzdGJ1cy5jOiAoZ3N0X2J1c19wb3N0KToKKwkgIEFkZGVkIHNvbWUgY29tbWVudHMuCisJICAqIHRlc3RzL2xhdC5jOiAoZmFrZXNyYyksIChmYWtlc2luayksIChzaW1wbGUpLCAocXVldWUpLCAobWFpbik6CisJICAqIHRlc3RzL211eGluZy9jYXNlMS5jOiAobWFpbik6CisJICAqIHRlc3RzL3NjaGVkL2R5bmFtaWMtcGlwZWxpbmUuYzogKG1haW4pOgorCSAgKiB0ZXN0cy9zY2hlZC9pbnRlcnJ1cHQxLmM6IChtYWluKToKKwkgICogdGVzdHMvc2NoZWQvaW50ZXJydXB0Mi5jOiAobWFpbik6CisJICAqIHRlc3RzL3NjaGVkL2ludGVycnVwdDMuYzogKG1haW4pOgorCSAgKiB0ZXN0cy9zY2hlZC9ydW54bWwuYzogKG1haW4pOgorCSAgKiB0ZXN0cy9zY2hlZC9zY2hlZC1zdHJlc3MuYzogKG1haW4pOgorCSAgKiB0ZXN0cy9zZWVraW5nL3NlZWtpbmcxLmM6IChldmVudF9yZWNlaXZlZCksIChtYWluKToKKwkgICogdGVzdHMvdGhyZWFkc3RhdGUvdGhyZWFkc3RhdGUyLmM6IChidXNfaGFuZGxlciksICh0aW1lb3V0X2Z1bmMpLAorCSAgKG1haW4pOgorCSAgKiB0ZXN0cy90aHJlYWRzdGF0ZS90aHJlYWRzdGF0ZTMuYzogKG1haW4pOgorCSAgKiB0ZXN0cy90aHJlYWRzdGF0ZS90aHJlYWRzdGF0ZTQuYzogKG1haW4pOgorCSAgKiB0ZXN0cy90aHJlYWRzdGF0ZS90aHJlYWRzdGF0ZTUuYzogKG1haW4pOgorCSAgRml4IHRoZSB0ZXN0cy4KKworMjAwNS0wNy0yMSAxNzoyMjoxMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vcGFydC1zZWVraW5nLnR4dDogU29tZSBzbWFsbCBhZGRpdGlvbnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1zZWVraW5nLnR4dDoKKwkgIFNvbWUgc21hbGwgYWRkaXRpb25zLgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwKKwkgIChnc3RfYmFzZV9zaW5rX2dldF90aW1lcyksIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpLAorCSAgKGdzdF9iYXNlX3NpbmtfYWN0aXZhdGVfcHVzaCksIChnc3RfYmFzZV9zaW5rX2FjdGl2YXRlX3B1bGwpOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSAgZGlzY29udCB2YWx1ZXMgYXJlIGdpbnQ2NCwgaGFuZGxlIHRoZSBtYXRoIGNvcnJlY3RseS4KKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2xvb3ApOgorCSAgTWFrZSB0aGUgYmFzZXNyYyByZXBvcnQgZXJyb3IgaWYgdGhlIHNvdXJjZSBwYWQgaXMgbm90IGxpbmtlZC4KKwkgICogZ3N0L2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfbGlua19zcmMpLCAoZ3N0X3F1ZXVlX2NoYWluKSwKKwkgIChnc3RfcXVldWVfbG9vcCksIChnc3RfcXVldWVfaGFuZGxlX3NyY19xdWVyeSksCisJICAoZ3N0X3F1ZXVlX3NyY19hY3RpdmF0ZV9wdXNoKToKKwkgIE1ha2UgcXVldWUgY29sbGVjdCBkYXRhIGV2ZW4gaWYgdGhlIHNyY3BhZCBpcyBub3QgbGlua2VkLgorCSAgU3RhcnQgcHVzaGluZyBvdXQgZGF0YSBhcyBzb29uIGFzIGl0IGlzIGxpbmtlZC4KKwkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfZWxlbWVudF91bmxpbmspLCAoZ3N0X2Zsb3dfZ2V0X25hbWUpOgorCSAgKiBnc3QvZ3N0dXRpbHMuaDoKKwkgIEFkZGVkIGdzdF9mbG93X2dldF9uYW1lKCkgdG8gZWFzZSBlcnJvciByZXBvcnRpbmcuCisKKzIwMDUtMDctMjAgMTg6MDI6MTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RtZXNzYWdlLio6IEFkZGVkIGEgYnVuY2ggb2YgbWVzc2FnZXMgZm9yIGFkdmFuY2VkIHNlZWtpbmcuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKGdzdF9tZXNzYWdlX25ld19zZWdtZW50X3N0YXJ0KSwKKwkgIChnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lKSwgKGdzdF9tZXNzYWdlX3BhcnNlX3NlZ21lbnRfc3RhcnQpLAorCSAgKGdzdF9tZXNzYWdlX3BhcnNlX3NlZ21lbnRfZG9uZSk6CisJICAqIGdzdC9nc3RtZXNzYWdlLmg6CisJICBBZGRlZCBhIGJ1bmNoIG9mIG1lc3NhZ2VzIGZvciBhZHZhbmNlZCBzZWVraW5nLgorCSAgKiBnc3QvcGFyc2UvZ3JhbW1hci55OgorCSAgKiBsaWJzL2dzdC9jb250cm9sL2RwYXJhbW1hbmFnZXIuYzogKGdzdF9kcG1hbl9zZXRfcGFyZW50KSwKKwkgIChnc3RfZHBtYW5fc3RhdGVfY2hhbmdlZCk6CisJICBGaXggc29tZSBuZXctcGFkIC0+IHBhZC1hZGRlZCBzaWduYWxzCisKKzIwMDUtMDctMjAgMTc6MjI6MjcgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KKworCSAgZG9jcy86IERvY3VtZW50IG5ldy1wYWQvc3RhdGUtY2hhbmdlIHNpZ25hbCByZW5hbWVzIGFuZCB0aGUgRml4ZWRMaXN0IHR5cGUgcmVuYW1lLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvbWFudWFsL2FwcGVuZGl4LXBvcnRpbmcueG1sOgorCSAgKiBkb2NzL3B3Zy9hcHBlbmRpeC1wb3J0aW5nLnhtbDoKKwkgIERvY3VtZW50IG5ldy1wYWQvc3RhdGUtY2hhbmdlIHNpZ25hbCByZW5hbWVzIGFuZCB0aGUgRml4ZWRMaXN0CisJICB0eXBlIHJlbmFtZS4KKworMjAwNS0wNy0yMCAxNzoxNjo0NCArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgorCisJICBHc3RFbGVtZW50OjpuZXctcGFkIC0+IHBhZC1hZGRlZCwgR3N0RWxlbWVudDo6c3RhdGUtY2hhbmdlIC0+IHN0YXRlLWNoYW5nZWQsIEdzdFZhbHVlRml4ZWRMaXN0IC0+IEdzdFZhbHVlQXJyYXksIGFkZCAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1hdXRvcGx1Z2dpbmcueG1sOgorCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtaGVsbG93b3JsZC54bWw6CisJICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1wYWRzLnhtbDoKKwkgICogZG9jcy9yYW5kb20vZHMvMC45LXN1Z2dlc3RlZC1jaGFuZ2VzOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfY2xhc3NfaW5pdCksIChnc3RfZWxlbWVudF9zZWVrKToKKwkgICogZ3N0L2dzdGVsZW1lbnQuaDoKKwkgICogZ3N0L2dzdGV2ZW50Lmg6CisJICAqIGdzdC9nc3Rmb3JtYXQuaDoKKwkgICogZ3N0L2dzdHF1ZXJ5Lmg6CisJICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzogKGdzdF9zdHJ1Y3R1cmVfdmFsdWVfZ2V0X2dlbmVyaWNfdHlwZSksCisJICAoZ3N0X3N0cnVjdHVyZV9wYXJzZV9hcnJheSksIChnc3Rfc3RydWN0dXJlX3BhcnNlX3ZhbHVlKToKKwkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdHlwZV9pc19maXhlZCksCisJICAoZ3N0X3ZhbHVlX2xpc3RfcHJlcGVuZF92YWx1ZSksIChnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUpLAorCSAgKGdzdF92YWx1ZV9saXN0X2dldF9zaXplKSwgKGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSksCisJICAoZ3N0X3ZhbHVlX3RyYW5zZm9ybV9hcnJheV9zdHJpbmcpLCAoZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9hcnJheSksCisJICAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2FycmF5KSwgKGdzdF92YWx1ZV9pbnRlcnNlY3RfYXJyYXkpLAorCSAgKGdzdF92YWx1ZV9pc19maXhlZCksIChfZ3N0X3ZhbHVlX2luaXRpYWxpemUpOgorCSAgKiBnc3QvZ3N0dmFsdWUuaDoKKwkgIEdzdEVsZW1lbnQ6Om5ldy1wYWQgLT4gcGFkLWFkZGVkLCBHc3RFbGVtZW50OjpzdGF0ZS1jaGFuZ2UgLT4KKwkgIHN0YXRlLWNoYW5nZWQsIEdzdFZhbHVlRml4ZWRMaXN0IC0+IEdzdFZhbHVlQXJyYXksIGFkZCBmb3JtYXQgYW5kCisJICBmbGFncyBhcyB0aGVpciBvd24gYXJndW1lbnRzIGluIGdzdF9lbGVtZW50X3NlZWsoKSAoc2hvdWxkIGltcHJvdmUKKwkgICJiaW5kZWFiaWxpdHkiKSwgcmVtb3ZlIGZ1bmN0aW9uIGdlbmVyYXRvcnMgc2luY2UgdGhleSBkb24ndCB3b3JrCisJICB1bmRlciBhIHdob2xlIGJ1bmNoIG9mIGNvbXBpbGVycyAodGhleSB3ZXJlIGRlcHJlY2F0ZWQgYWxyZWFkeQorCSAgYW55d2F5KS4KKworMjAwNS0wNy0yMCAxNzoxNToxOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGNoZWNrL2dzdC5zdXBwOgorCSogY29tbW9uOgorCSogdGVzdHMvY2hlY2svZ3N0LnN1cHA6CisJICBwYXRjaCBmcm9tIEVkZ2FyZCB0byBwcm9wZXJseSBzdXBwcmVzcyB0aGVzZSB3YXJuaW5ncworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBwYXRjaCBmcm9tIEVkZ2FyZCB0byBwcm9wZXJseSBzdXBwcmVzcyB0aGVzZSB3YXJuaW5ncworCisyMDA1LTA3LTIwIDE2OjIwOjM5ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+CisKKwkgIGdzdC9nc3RpbmZvLio6IEZpeCBpbGxlZ2FsIGNhc3Qgb24gc29tZSBwbGF0Zm9ybXMgKCMzMDkyNTMpLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RpbmZvLmM6IChfZ3N0X2RlYnVnX25hbWVvZl9mdW5jcHRyKSwKKwkgIChfZ3N0X2RlYnVnX3JlZ2lzdGVyX2Z1bmNwdHIpOgorCSAgKiBnc3QvZ3N0aW5mby5oOgorCSAgRml4IGlsbGVnYWwgY2FzdCBvbiBzb21lIHBsYXRmb3JtcyAoIzMwOTI1MykuCisKKzIwMDUtMDctMjAgMTE6MzU6MTggKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KKworCSAgZ3N0L2dzdG1lc3NhZ2UuKjogQWRkIF9uZXdfY3VzdG9tLCBtYWtlIF9uZXdfYXBwbGljYXRpb24gYSBtYWNybyB0byBfbmV3X2N1c3RvbS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOiAoZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbSk6CisJICAqIGdzdC9nc3RtZXNzYWdlLmg6CisJICBBZGQgX25ld19jdXN0b20sIG1ha2UgX25ld19hcHBsaWNhdGlvbiBhIG1hY3JvIHRvIF9uZXdfY3VzdG9tLgorCisyMDA1LTA3LTIwIDEwOjU4OjEwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNlc3JjLio6IEFkZCBhIGdib29sZWFuIHRvIGRlY2lkZSB3aGVuIHRvIHB1c2ggb3V0IGEgZGlzY29udC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfaW5pdCksCisJICAoZ3N0X2Jhc2Vfc3JjX2RvX3NlZWspLCAoZ3N0X2Jhc2Vfc3JjX2xvb3ApLCAoZ3N0X2Jhc2Vfc3JjX3N0YXJ0KToKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgorCSAgQWRkIGEgZ2Jvb2xlYW4gdG8gZGVjaWRlIHdoZW4gdG8gcHVzaCBvdXQgYSBkaXNjb250LgorCSAgKiBnc3QvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9oYW5kbGVfc2lua19ldmVudCksIChnc3RfcXVldWVfY2hhaW4pLAorCSAgKGdzdF9xdWV1ZV9sb29wKSwgKGdzdF9xdWV1ZV9oYW5kbGVfc3JjX3F1ZXJ5KSwKKwkgIChnc3RfcXVldWVfc2lua19hY3RpdmF0ZV9wdXNoKSwgKGdzdF9xdWV1ZV9zcmNfYWN0aXZhdGVfcHVzaCksCisJICAoZ3N0X3F1ZXVlX3NldF9wcm9wZXJ0eSksIChnc3RfcXVldWVfZ2V0X3Byb3BlcnR5KToKKwkgIFNvbWUgY2xlYW51cHMuCisJICAqIHRlc3RzL3RocmVhZHN0YXRlL3RocmVhZHN0YXRlMS5jOiAobWFpbik6CisJICBNYWtlIGEgdGhyZWFkIHRlc3QgY29tcGlsZSBhbmQgcnVuLi4uIHZlcnkgc2lsbHkuLgorCisyMDA1LTA3LTIwIDEwOjEzOjQ2ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+CisKKwkgIGRvY3MvbWFudWFsL2FwcGVuZGl4LXBvcnRpbmcueG1sOiBNZW50aW9uIHJlbW92YWwgb2YgbGliZ3N0Z2NvbmYtMC45LmxhIGFuZCBleGlzdGVuY2Ugb2YgZ2NvbmYgZWxlbWVudHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9tYW51YWwvYXBwZW5kaXgtcG9ydGluZy54bWw6CisJICBNZW50aW9uIHJlbW92YWwgb2YgbGliZ3N0Z2NvbmYtMC45LmxhIGFuZCBleGlzdGVuY2Ugb2YgZ2NvbmYKKwkgIGVsZW1lbnRzLgorCisyMDA1LTA3LTIwIDA4OjI5OjA2ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+CisKKwkgIGRvY3MvcHdnLzogRG9jdW1lbnQgYmFzZSBjbGFzc2VzLCB1cGRhdGUgc2VjdGlvbnMgb2Ygbi10by0xIGFuZCAxLXRvLW4gKG11eGVyLCBmaXggc29tZSBjb2RlIGV4YW1wbGVzIGFuZCBsaW5rcyBhbmQgdS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcHdnL2FkdmFuY2VkLWNsb2NrLnhtbDoKKwkgICogZG9jcy9wd2cvYXBwZW5kaXgtcG9ydGluZy54bWw6CisJICAqIGRvY3MvcHdnL2ludHJvLXByZWZhY2UueG1sOgorCSAgKiBkb2NzL3B3Zy9vdGhlci1iYXNlLnhtbDoKKwkgICogZG9jcy9wd2cvb3RoZXItbWFuYWdlci54bWw6CisJICAqIGRvY3MvcHdnL290aGVyLW50b24ueG1sOgorCSAgKiBkb2NzL3B3Zy9vdGhlci1udG9vbmUueG1sOgorCSAgKiBkb2NzL3B3Zy9vdGhlci1vbmV0b24ueG1sOgorCSAgKiBkb2NzL3B3Zy9wd2cueG1sOgorCSAgRG9jdW1lbnQgYmFzZSBjbGFzc2VzLCB1cGRhdGUgc2VjdGlvbnMgb2Ygbi10by0xIGFuZCAxLXRvLW4gKG11eGVyLAorCSAgZGVtdXhlciksIHJlbW92ZSBuLXRvLW4gKHdhcyBuZXZlciB3cml0dGVuKSwgZml4IHNvbWUgY29kZSBleGFtcGxlcworCSAgYW5kIGxpbmtzIGFuZCB1cGRhdGUgdGhlIHBvcnRpbmcgc2VjdGlvbiB0byBpbmNsdWRlIGFsbCB0aGlzLgorCisyMDA1LTA3LTE5IDE3OjQ2OjM3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0cXVldWUuKjogUHJvcGFnYXRlIEdzdEZsb3dSZXR1cm4gbW9yZSBpbnRlbGxpZ2VudGx5IHVwc3RyZWFtIGFuZCBvdXRwdXQgYW4gRVJST1IvRU9TIHdoZW4gc3RyZWFtaW5nIHN0b3BwZWQgZHUuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9pbml0KSwgKGdzdF9xdWV1ZV9oYW5kbGVfc2lua19ldmVudCksCisJICAoZ3N0X3F1ZXVlX2NoYWluKSwgKGdzdF9xdWV1ZV9sb29wKSwgKGdzdF9xdWV1ZV9oYW5kbGVfc3JjX2V2ZW50KSwKKwkgIChnc3RfcXVldWVfaGFuZGxlX3NyY19xdWVyeSksIChnc3RfcXVldWVfc2lua19hY3RpdmF0ZV9wdXNoKSwKKwkgIChnc3RfcXVldWVfc3JjX2FjdGl2YXRlX3B1c2gpLCAoZ3N0X3F1ZXVlX2NoYW5nZV9zdGF0ZSksCisJICAoZ3N0X3F1ZXVlX2dldF9wcm9wZXJ0eSk6CisJICAqIGdzdC9nc3RxdWV1ZS5oOgorCSAgUHJvcGFnYXRlIEdzdEZsb3dSZXR1cm4gbW9yZSBpbnRlbGxpZ2VudGx5IHVwc3RyZWFtIGFuZCBvdXRwdXQKKwkgIGFuIEVSUk9SL0VPUyB3aGVuIHN0cmVhbWluZyBzdG9wcGVkIGR1ZSB0byBmYXRhbCBlcnJvci4KKworMjAwNS0wNy0xOSAxNDo1Mjo1OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgdG9vbHMvZ3N0LWxhdW5jaC5jOiBEb24ndCBibG9jayBmb3JldmVyIGZvciB0aGUgc3RhdGUgY2hhbmdlIHRvIGNvbXBsZXRlLCB0aGUgcGlwZWxpbmUgYWxyZWFkeSBkaWQgd2l0aCBhIHNlbnNpYmxlIHRpLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAoY2hlY2tfaW50ciksIChldmVudF9sb29wKSwgKG1haW4pOgorCSAgRG9uJ3QgYmxvY2sgZm9yZXZlciBmb3IgdGhlIHN0YXRlIGNoYW5nZSB0byBjb21wbGV0ZSwgdGhlCisJICBwaXBlbGluZSBhbHJlYWR5IGRpZCB3aXRoIGEgc2Vuc2libGUgdGltZW91dC4KKworMjAwNS0wNy0xOSAxMzo0Mzo1MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBNYWtlIHN1cmUgd2UgbmV2ZXIgY2FsbCB0aGUgY3JlYXRlIGZ1bmN0aW9uIGlzIHdlIGdvdCBkZWFjdGl2YXRlZC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfZ2V0X3JhbmdlKToKKwkgIE1ha2Ugc3VyZSB3ZSBuZXZlciBjYWxsIHRoZSBjcmVhdGUgZnVuY3Rpb24gaXMgd2UKKwkgIGdvdCBkZWFjdGl2YXRlZC4KKworMjAwNS0wNy0xOSAxMToyNzowNyArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgorCisJKiBnc3RyZWFtZXIuc3BlYy5pbjoKKwkgIHVwZGF0ZSBmb3IgbGF0ZXN0IGNoYW5nZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgdXBkYXRlIGZvciBsYXRlc3QgY2hhbmdlcworCisyMDA1LTA3LTE5IDEwOjQwOjQ5ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGdzdC9wYXJzZS9wYXJzZS5sOiBBdHRlbXB0IHRvIHNvbHZlIGJ1ZyAjMTcyODE1LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTA3LTE5ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvcGFyc2UvcGFyc2UubDogQXR0ZW1wdCB0byBzb2x2ZSBidWcgIzE3MjgxNS4KKworMjAwNS0wNy0xOSAwOToxOTowNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgU21hbGwgZG9jcyB1cGRhdGVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtY2xvY2tzLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1ldmVudHMudHh0OgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfZG9fc2Vlayk6CisJICBTbWFsbCBkb2NzIHVwZGF0ZXMuCisJICBPbmx5IHVwZGF0ZSB0aGUgc2Vla2luZyB2YWx1ZXMgd2hlbiB3ZSBhcmUgbm90CisJICBidXN5IHN0cmVhbWluZy4KKworMjAwNS0wNy0xOCAxNzo0Mzo1MiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkqIENoYW5nZUxvZzoKKwkqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSAgT29wcywgaWdub3JlIHRoZSByZXN1bHQgb2YgZ3N0X3BhZF9wdXNoX2V2ZW50IGhlcmUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIE9vcHMsIGlnbm9yZSB0aGUgcmVzdWx0IG9mIGdzdF9wYWRfcHVzaF9ldmVudCBoZXJlLgorCisyMDA1LTA3LTE4IDE3OjEyOjM2ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBTZW5kIGRpc2NvbnQgZXZlbnQgZnJvbSB0aGUgbG9vcCBmdW5jdGlvbiwgYXMgcGFkcyBhcmVuJ3QgYWN0aXZhdGVkIHlldCBpbiB0aGUgYWN0aXZhdGVfcHVzaCBoLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2xvb3ApLAorCSAgKGdzdF9iYXNlX3NyY19hY3RpdmF0ZV9wdXNoKToKKwkgIFNlbmQgZGlzY29udCBldmVudCBmcm9tIHRoZSBsb29wIGZ1bmN0aW9uLCBhcyBwYWRzCisJICBhcmVuJ3QgYWN0aXZhdGVkIHlldCBpbiB0aGUgYWN0aXZhdGVfcHVzaCBoYW5kbGVyLgorCSAgKiBnc3QvZ3N0YmluLmM6IChiaW5fYnVzX2hhbmRsZXIpOgorCSAgRG9uJ3QgbGVhayBlbGVtZW50IG5hbWUuCisKKzIwMDUtMDctMTggMTQ6NDc6MzkgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgY29uZmlndXJlLmFjOiBVc2UgQVNfTElCVE9PTF9UQUdTLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTA3LTE4ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBjb25maWd1cmUuYWM6IFVzZSBBU19MSUJUT09MX1RBR1MuCisKKzIwMDUtMDctMTggMTI6NTg6MjcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlczogUmVtb3ZlIGRlbGV0ZWQgdHlwZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzOgorCSAgUmVtb3ZlIGRlbGV0ZWQgdHlwZXMuCisKKzIwMDUtMDctMTggMTI6NDk6NTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkqIENoYW5nZUxvZzoKKwkqIGNoZWNrL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGdzdC9NYWtlZmlsZS5hbToKKwkqIGdzdC9nc3QuYzoKKwkqIGdzdC9nc3QuaDoKKwkqIGdzdC9nc3RfcHJpdmF0ZS5oOgorCSogZ3N0L2dzdGJpbi5jOgorCSogZ3N0L2dzdGJpbi5oOgorCSogZ3N0L2dzdGJ1cy5oOgorCSogZ3N0L2dzdGNvbmZpZy5oLmluOgorCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3RlbGVtZW50Lmg6CisJKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKKwkqIGdzdC9nc3RlcnJvci5jOgorCSogZ3N0L2dzdGVycm9yLmg6CisJKiBnc3QvZ3N0ZXZlbnQuaDoKKwkqIGdzdC9nc3RnaG9zdHBhZC5jOgorCSogZ3N0L2dzdGluZGV4LmM6CisJKiBnc3QvZ3N0aW5mby5jOgorCSogZ3N0L2dzdG1lc3NhZ2UuYzoKKwkqIGdzdC9nc3RtZXNzYWdlLmg6CisJKiBnc3QvZ3N0bWluaW9iamVjdC5oOgorCSogZ3N0L2dzdG9iamVjdC5jOgorCSogZ3N0L2dzdG9iamVjdC5oOgorCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5oOgorCSogZ3N0L2dzdHBhcnNlLmg6CisJKiBnc3QvZ3N0cGlwZWxpbmUuYzoKKwkqIGdzdC9nc3RwaXBlbGluZS5oOgorCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuaDoKKwkqIGdzdC9nc3RxdWVyeS5oOgorCSogZ3N0L2dzdHNjaGVkdWxlci5jOgorCSogZ3N0L2dzdHNjaGVkdWxlci5oOgorCSogZ3N0L2dzdHN0cnVjdHVyZS5oOgorCSogZ3N0L2dzdHRhc2suYzoKKwkqIGdzdC9nc3R0YXNrLmg6CisJKiBnc3QvZ3N0dHlwZWZpbmQuaDoKKwkqIGdzdC9nc3R0eXBlcy5oOgorCSogZ3N0L3JlZ2lzdHJpZXMvZ3N0bGlieG1scmVnaXN0cnkuYzoKKwkqIGdzdC9yZWdpc3RyaWVzL2dzdHhtbHJlZ2lzdHJ5LmM6CisJKiBnc3Qvc2NoZWR1bGVycy90aHJlYWRzY2hlZHVsZXIuYzoKKwkqIGxpYnMvZ3N0L2NvbnRyb2wvZHBhcmFtbWFuYWdlci5oOgorCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgorCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKKwkqIHRvb2xzL2dzdC14bWxpbnNwZWN0LmM6CisJICBSZW1vdmVkIHBsdWdhYmxlIHNjaGVkdWxlcnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFJlbW92ZWQgcGx1Z2FibGUgc2NoZWR1bGVycy4KKwkgIFJlbW92ZWQgU2NoZWR1bGVyL01hbmFnZXIgZnJvbSBlbGVtZW50cy4KKwkgIFJlbW92ZWQgZ3N0dHlwZXMuaCwgcmVhcnJhbmdlZCBpbmNsdWRlcy4KKwkgIFJlbW92ZWQgZGVwZW5kZW5jeSBwYWQ8LT5lbGVtZW50LCBlbGVtZW50PD5waXBlbGluZSwgYW5kCisJICB2YXJpb3VzIG90aGVycywgIGZpeCBpbmNsdWRlcy4KKwkgIGltcGxlbWVudCBnc3RfcGFkX2dldF9wYXJlbnQoKSB3aXRoIGdzdF9vYmplY3RfZ2V0X3BhcmVudCgpCisJICBNYWtlIEdzdFRhc2sgc2VmY29udGFpbmVkLgorCSAgRml4IF9nZXRfc3RhdGUoKSBvbiBHc3RCaW4sIGl0IGRpZCBub3QgcmV0dXJuIEFTWU5DIHdpdGggYSAwCisJICB0aW1lb3V0LgorCSAgRml4IGVuZGxlc3MgbG9vcCBpbiBpdGVyYXRvcl9mb2xkX3dpdGhfcmVzeW5jLgorCisyMDA1LTA3LTE4IDA5OjIyOjU1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvOiBSZW1vdmUgb2xkIGZpbGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L01ha2VmaWxlLmFtOgorCSAgKiBnc3QvZ3N0YXJjaC5oOgorCSAgUmVtb3ZlIG9sZCBmaWxlLgorCisyMDA1LTA3LTE4IDA4OjUxOjMxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvTWFrZWZpbGUuYW06IE5vIG1vcmUgY290aHJlYWRzLmgKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvTWFrZWZpbGUuYW06CisJICBObyBtb3JlIGNvdGhyZWFkcy5oCisKKzIwMDUtMDctMTggMDg6NDM6MjcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9jb3RocmVhZHMuKjogTGV0J3MgcmVtb3ZlIHRoZXNlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9jb3RocmVhZHMuYzoKKwkgICogZ3N0L2NvdGhyZWFkcy5oOgorCSAgTGV0J3MgcmVtb3ZlIHRoZXNlLgorCisyMDA1LTA3LTE4IDA4OjI4OjQ4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL2Rlc2lnbi86IFNvbWUgbW9yZSBkb2NzIGluIHRoZSB3b3Jrcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWR5bmFtaWMudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtc2Vla2luZy50eHQ6CisJICBTb21lIG1vcmUgZG9jcyBpbiB0aGUgd29ya3MuCisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV90cmFuc2Zvcm1fY2FwcyksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldGNhcHMpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NvbmZpZ3VyZV9jYXBzKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc2V0Y2FwcyksIChnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0X3NpemUpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9idWZmZXJfYWxsb2MpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2V2ZW50KSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1faGFuZGxlX2J1ZmZlciksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NpbmtfYWN0aXZhdGVfcHVzaCksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NyY19hY3RpdmF0ZV9wdWxsKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Bhc3N0aHJvdWdoKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1faXNfcGFzc3Rocm91Z2gpOgorCSAgUmVmY291bnRpbmcgZml4ZXMuCisJICAqIGdzdC9nc3RidXMuYzogKGdzdF9idXNfc291cmNlX2Rpc3BhdGNoKSwgKGdzdF9idXNfcG9sbCk6CisJICBDbGVhbnVwcy4KKwkgICogZ3N0L2dzdGV2ZW50LmM6IChnc3RfZXZlbnRfZmluYWxpemUpOgorCSAgU2V0IFNSQyB0byBOVUxMLgorCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9lbGVtZW50X3VubGluayksCisJICAoZ3N0X3BhZF9nZXRfcGFyZW50X2VsZW1lbnQpLCAoZ3N0X3BhZF9wcm94eV9nZXRjYXBzKSwKKwkgIChnc3RfcGFkX3Byb3h5X3NldGNhcHMpOgorCSAgKiBnc3QvZ3N0dXRpbHMuaDoKKwkgIEFkZCBfZ2V0X3BhcmVudF9lbGVtZW50KCkgdG8gZ2V0IGEgcGFkcyBwYXJlbnQgYXMgYW4gZWxlbWVudC4KKworMjAwNS0wNy0xNyAyMjo0NDowMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgY2hlY2svZ3N0L2dzdGJpbi5jOiBSZW1vdmUgYm9ndXMgdGVzdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9nc3QvZ3N0YmluLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBSZW1vdmUgYm9ndXMgdGVzdC4KKworMjAwNS0wNy0xNyAyMjoyNjowMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogUmVmY291bnRpbmcgZml4ZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfcGFkX2dldGNhcHMpLAorCSAgKGdzdF9iYXNlX3NpbmtfcGFkX3NldGNhcHMpLCAoZ3N0X2Jhc2Vfc2lua19wYWRfYnVmZmVyX2FsbG9jKSwKKwkgIChnc3RfYmFzZV9zaW5rX3ByZXJvbGxfcXVldWVfZmx1c2gpLCAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwKKwkgIChnc3RfYmFzZV9zaW5rX2V2ZW50KSwgKGdzdF9iYXNlX3NpbmtfZG9fc3luYyksCisJICAoZ3N0X2Jhc2Vfc2lua19jaGFpbiksIChnc3RfYmFzZV9zaW5rX2xvb3ApLAorCSAgKGdzdF9iYXNlX3NpbmtfZGVhY3RpdmF0ZSksIChnc3RfYmFzZV9zaW5rX2FjdGl2YXRlX3B1c2gpLAorCSAgKGdzdF9iYXNlX3NpbmtfYWN0aXZhdGVfcHVsbCksIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6CisJICBSZWZjb3VudGluZyBmaXhlcy4KKwkgIEZpeCBsb2dpYyBmb3IgcmV0dXJuaW5nIEFTWU5DIHdoZW4gbm90IHByZXJvbGxlZC4KKworMjAwNS0wNy0xNyAyMjoyMjo1MiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHF1ZXVlLmM6IEZpeCBuYXN0eSByZWZjb3VudCBidWcuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfaGFuZGxlX3NpbmtfZXZlbnQpOgorCSAgRml4IG5hc3R5IHJlZmNvdW50IGJ1Zy4KKworMjAwNS0wNy0xNiAxOToyNTo0MSArMDAwMCAgUGhpbGlwcGUgS2FsYWYgPHBoaWxpcHBlLmthbGFmQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2VsZW1lbnRzL01ha2VmaWxlLmFtOgorCSogZ3N0L2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL01ha2VmaWxlLmFtOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RlbGVtZW50cy5jOgorCSAgTW92ZWQgZmRzcmMgdG8gZ3N0LXBsdWdpbnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIE1vdmVkIGZkc3JjIHRvIGdzdC1wbHVnaW5zLgorCisyMDA1LTA3LTE2IDE1OjQzOjEwICswMDAwICBQaGlsaXBwZSBLYWxhZiA8cGhpbGlwcGUua2FsYWZAY29sbGFib3JhLmNvLnVrPgorCisJKiBDaGFuZ2VMb2c6CisJICBGb3Jnb3QgY2hhbmdlbG9nIGVudHJ5CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIEZvcmdvdCBjaGFuZ2Vsb2cgZW50cnkKKworMjAwNS0wNy0xNiAxNTo0MTowNCArMDAwMCAgUGhpbGlwcGUgS2FsYWYgPHBoaWxpcHBlLmthbGFmQGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0L2VsZW1lbnRzL01ha2VmaWxlLmFtOgorCSogZ3N0L2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6CisJKiBnc3QvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKKwkqIGdzdC9lbGVtZW50cy9nc3RmZHNyYy5oOgorCSogcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZS5hbToKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuaDoKKwkgIGdzdC9lbGVtZW50cy9nc3RmZHNyYy5jIGdzdC9lbGVtZW50cy9nc3RmZHNyYy5oIGdzdC9lbGVtZW50cy9nc3RlbGVtZW50cy5jIGdzdC9lbGVtZW50cy9NYWtlZmlsZS5hbQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTA3LTE2IFBoaWxpcHBlIEtoYWxhZiA8YnVyZ2VyQHNwZWVkeS5vcmc+CisJICAqIGdzdC9lbGVtZW50cy9nc3RmZHNyYy5jCisJICAqIGdzdC9lbGVtZW50cy9nc3RmZHNyYy5oCisJICAqIGdzdC9lbGVtZW50cy9nc3RlbGVtZW50cy5jCisJICAqIGdzdC9lbGVtZW50cy9NYWtlZmlsZS5hbQorCSAgUG9ydGVkIGZkc3JjIHRvIDAuOS4KKworMjAwNS0wNy0xNiAxNDo1MjoxNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogRml4IGNvbXBpbGUgZXJyb3IuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfaGFuZGxlX29iamVjdCksCisJICAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKToKKwkgIEZpeCBjb21waWxlIGVycm9yLgorCisyMDA1LTA3LTE2IDE0OjQxOjI1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNlc2luay4qOiBTdG9yZSBhbmQgdXNlIGRpc2NvbnQgdmFsdWVzIHdoZW4gc3luY2luZyBidWZmZXJzIGFzIGRlc2NyaWJlZCBpbiBkZXNpZ24gZG9jcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwKKwkgIChnc3RfYmFzZV9zaW5rX2V2ZW50KSwgKGdzdF9iYXNlX3NpbmtfZ2V0X3RpbWVzKSwKKwkgIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpLCAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSAgU3RvcmUgYW5kIHVzZSBkaXNjb250IHZhbHVlcyB3aGVuIHN5bmNpbmcgYnVmZmVycyBhcyBkZXNjcmliZWQKKwkgIGluIGRlc2lnbiBkb2NzLgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfc2VuZF9kaXNjb250KSwKKwkgIChnc3RfYmFzZV9zcmNfZG9fc2VlayksIChnc3RfYmFzZV9zcmNfbG9vcCksIChnc3RfYmFzZV9zcmNfc3RhcnQpLAorCSAgKGdzdF9iYXNlX3NyY19hY3RpdmF0ZV9wdXNoKToKKwkgIFB1c2ggZGlzY29udCBldmVudCB3aGVuIHN0YXJ0aW5nLgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogKGdzdF9pZGVudGl0eV90cmFuc2Zvcm0pOgorCSAgU21hbGwgY2xlYW51cHMuCisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fY2hhbmdlX3N0YXRlKToKKwkgIFNtYWxsIGNsZWFudXBzIGluIGJhc2VfdGltZSAgZGlzdHJpYnV0aW9uLgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfc2V0X2Jhc2VfdGltZSksCisJICAoZ3N0X2VsZW1lbnRfZ2V0X2Jhc2VfdGltZSksIChnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUpOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSAgQWRkZWQgbWV0aG9kcyBmb3IgdGhlIGJhc2VfdGltZSBvZiB0aGUgZWxlbWVudC4KKwkgIFNvbWUgTVQgZml4ZXMuCisJICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX3NlbmRfZXZlbnQpLAorCSAgKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X3BpcGVsaW5lX3NldF9uZXdfc3RyZWFtX3RpbWUpLAorCSAgKGdzdF9waXBlbGluZV9nZXRfbGFzdF9zdHJlYW1fdGltZSk6CisJICAqIGdzdC9nc3RwaXBlbGluZS5oOgorCSAgTVQgZml4ZXMuCisJICBIYW5kbGUgc2Vla2luZyBhcyBkZXNjcmliZWQgaW4gZGVzaWduIGRvYywgcmVtb3ZlIHN0cmVhbV90aW1lCisJICBoYWNrLgorCSAgQ2xlYW51cHMgY2xvY2sgYW5kIHN0cmVhbV90aW1lIHNlbGVjdGlvbiBjb2RlLiBBZGRlZCBhY2Nlc3NvcnMKKwkgIGZvciB0aGUgc3RyZWFtX3RpbWUuCisKKzIwMDUtMDctMTYgMTQ6MDY6MjEgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdGVycm9yLmMgKF9nc3RfY29yZV9lcnJvcnNfaW5pdCk6IFVzZSB0aGUgbWFnaWMgd29yZC4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDctMTYgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3RlcnJvci5jIChfZ3N0X2NvcmVfZXJyb3JzX2luaXQpOiBVc2UgdGhlIG1hZ2ljIHdvcmQuLgorCisyMDA1LTA3LTE2IDEzOjUwOjM3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBjaGVjay9nc3QvZ3N0YmluLmM6IE1ha2UgZWxlbWVudHMgc2lsZW50IGFzIHRoZSBkZWVwX25vdGlmeSByZWZzIHRoZSBwYXJlbnQsIHdoaWNoIG1pZ2h0IG1ha2UgdGhlIHRlc3QgZmFpbC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9nc3QvZ3N0YmluLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICBNYWtlIGVsZW1lbnRzIHNpbGVudCBhcyB0aGUgZGVlcF9ub3RpZnkgcmVmcyB0aGUKKwkgIHBhcmVudCwgd2hpY2ggbWlnaHQgbWFrZSB0aGUgdGVzdCBmYWlsLgorCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzogKGdzdF9naG9zdF9wYWRfZG9fYWN0aXZhdGVfcHVzaCk6CisJICBEb24ndCBob2xkIHRoZSBsb2NrIGZvciB0b28gbG9uZy4KKworMjAwNS0wNy0xNiAxMjozMzoxMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBEb24ndCB1bnJlZiB0aGUgY2FwcyB3ZSBwYXNzZWQgdG8gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSgpIGFmdGVyIHBhc3NpbmcgdGhlbS4gZ3N0X2NhcHNfbWFrZV93Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfbmVnb3RpYXRlKToKKwkgIERvbid0IHVucmVmIHRoZSBjYXBzIHdlIHBhc3NlZCB0byBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlKCkgYWZ0ZXIKKwkgIHBhc3NpbmcgdGhlbS4gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSgpIHdpbGwgZG8gdGhhdCBmb3IgdXMuCisKKzIwMDUtMDctMTUgMTY6MTA6NDEgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdGNhcHMuaCAoZ3N0X2NhcHNfaXNfc2ltcGxlKTogUmVtb3ZlZCBkZXByZWNhdGVkIG1hY3JvICgjMTU3MzExKS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNy0xNSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdGNhcHMuaCAoZ3N0X2NhcHNfaXNfc2ltcGxlKTogUmVtb3ZlZCBkZXByZWNhdGVkIG1hY3JvCisJICAoIzE1NzMxMSkuCisKKzIwMDUtMDctMTUgMTQ6NTk6MjIgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2VsZW1lbnRzL2dzdGlkZW50aXR5LmMgKG1hcnNoYWxfVk9JRF9fTUlOSU9CSkVDVCk6IFdyaXRlIG91ciBvd24gbWFyc2hhbGxpbmcgZnVuY3Rpb24gZm9yIHRoZSBoYW5kb2ZmIHNpZ25hbC4gUHJvLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDctMTUgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9lbGVtZW50cy9nc3RpZGVudGl0eS5jIChtYXJzaGFsX1ZPSURfX01JTklPQkpFQ1QpOiBXcml0ZSBvdXIKKwkgIG93biBtYXJzaGFsbGluZyBmdW5jdGlvbiBmb3IgdGhlIGhhbmRvZmYgc2lnbmFsLiBQcm9wZXJseSB0eXBlIHRoZQorCSAgYnVmZmVyIGFzIGEgYnVmZmVyLiBGaXhlcyBzb21lIHdhcm5pbmdzLiBTaG91bGQgZG8gYSBtb3JlIGdlbmVyYWwKKwkgIHNvbHV0aW9uLgorCSAgKGdzdF9pZGVudGl0eV9jbGFzc19pbml0KTogUGx1ZyBpbnRvIHRoZSByaWdodCBtYXJzaGFsbGVyLgorCisyMDA1LTA3LTE1IDEzOjQ0OjE5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL2Rlc2lnbi86IFVwZGF0ZWQgZG9jcywgbW9zdGx5IERJU0NPTlQgcmVsYXRlZC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWNsb2Nrcy50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtZWxlbWVudC1zaW5rLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1ldmVudHMudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdHBpcGVsaW5lLnR4dDoKKwkgIFVwZGF0ZWQgZG9jcywgbW9zdGx5IERJU0NPTlQgcmVsYXRlZC4KKworMjAwNS0wNy0xNSAxMjo1NTozMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZG9jcy9wd2cvYnVpbGRpbmctcGFkcy54bWw6IHMvR1NUX1BBRF9MSU5LX1JFRlVTRUQvRkFMU0UvIGluIGdzdF9teV9maWx0ZXJfc2V0Y2FwcygpCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9wd2cvYnVpbGRpbmctcGFkcy54bWw6CisJICBzL0dTVF9QQURfTElOS19SRUZVU0VEL0ZBTFNFLyBpbiBnc3RfbXlfZmlsdGVyX3NldGNhcHMoKQorCisyMDA1LTA3LTE1IDExOjA1OjUyICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkqIHRvb2xzL2dzdC10eXBlZmluZC5jOgorCSAgcmVtb3ZlIGlycmVsZXZhbnQgY29kZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICByZW1vdmUgaXJyZWxldmFudCBjb2RlCisKKzIwMDUtMDctMTUgMTE6MDQ6MTggKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgdG9vbHMvZ3N0LXR5cGVmaW5kLmM6IFVwZGF0ZSwgYWRkIGNvcHlyaWdodCBibG9jay4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNy0xNSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogdG9vbHMvZ3N0LXR5cGVmaW5kLmM6IFVwZGF0ZSwgYWRkIGNvcHlyaWdodCBibG9jay4KKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jIChnc3RfYmFzZV9zcmNfZGVmYXVsdF9uZWdvdGlhdGUpOgorCSAgTm9ybWFsaXplIGFuZCB0cnVuY2F0ZSBjYXBzIGJlZm9yZSBmaXhhdGlvbi4KKwkgICogZ3N0L2dzdGNhcHMuaDoKKwkgICogZ3N0L2dzdGNhcHMuYyAoZ3N0X2NhcHNfdHJ1bmNhdGUpOiBOZXcgZnVuY3Rpb24sIGRlc3RydWN0aXZlbHkKKwkgIGRpc2NhcmRzIGFsbCBidXQgdGhlIGZpcnN0IHN0cnVjdHVyZSBmcm9tIGl0cyBhcmd1bWVudC4KKworMjAwNS0wNy0xNSAxMDo0MTozMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS4qOiBNYWtlIHBhc3N0aHJvdWdoIHdvcmsgdXNpbmcgdGhlIGJ1ZmZlcnBvb2xzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV9pbml0KSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fdHJhbnNmb3JtX2NhcHMpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldGNhcHMpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9jb25maWd1cmVfY2FwcyksIChnc3RfYmFzZV90cmFuc2Zvcm1fc2V0Y2FwcyksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldF9zaXplKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9idWZmZXJfYWxsb2MpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9oYW5kbGVfYnVmZmVyKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRyYW5nZSksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NoYWluKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9jaGFuZ2Vfc3RhdGUpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcGFzc3Rocm91Z2gpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9pc19wYXNzdGhyb3VnaCk6CisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKKwkgIE1ha2UgcGFzc3Rocm91Z2ggd29yayB1c2luZyB0aGUgYnVmZmVycG9vbHMuCisJICBDaGFuZ2VkIEFQSSBhIGJpdCwgc3ViY2xhc3NlcyBoYXZlIHRvIHdyaXRlIGludG8gYSBidWZmZXIKKwkgIHByb3ZpZGVkIGJ5IHRoZSBiYXNlIGNsYXNzLgorCSAgTW9yZSBkZWJ1ZyBpbmZvIGluIG5lZ28gZnVuY3Rpb25zLgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogKGdzdF9pZGVudGl0eV9pbml0KSwKKwkgIChnc3RfaWRlbnRpdHlfdHJhbnNmb3JtKToKKwkgIFBvcnQgdG8gbmV3IGJhc2UgY2xhc3MuCisKKzIwMDUtMDctMTUgMTA6MzA6NDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIFRvdGFsbHkgZHVtcCBtZXNzYWdlcyBpbiAtbGF1bmNoIHdpdGggdGhlIC1tIG9wdGlvbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOiAoZ3N0X21lc3NhZ2VfbmV3X3N0YXRlX2NoYW5nZWQpOgorCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChldmVudF9sb29wKSwgKG1haW4pOgorCSAgVG90YWxseSBkdW1wIG1lc3NhZ2VzIGluIC1sYXVuY2ggd2l0aCB0aGUgLW0gb3B0aW9uLgorCSAgRml4IG1lc3NhZ2UgbmFtZSBmb3IgU3RhdGUgbWVzc2FnZXMsCisKKzIwMDUtMDctMTQgMTg6NDU6NTEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogUG9zdCBlcnJvciBtZXNzYWdlcyBvbiBlcnJvcnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2xvb3ApOgorCSAgUG9zdCBlcnJvciBtZXNzYWdlcyBvbiBlcnJvcnMuCisKKzIwMDUtMDctMTQgMTg6MTA6MDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RjYXBzLmM6IFJlbW92ZSBkZWJ1ZyBpbmZvLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RjYXBzLmM6IChnc3RfY2Fwc19kb19zaW1wbGlmeSk6CisJICBSZW1vdmUgZGVidWcgaW5mby4KKwkgICogZ3N0L2dzdGVycm9yLmg6CisJICBEZWZpbmUgZXJyb3IgZm9yIHN0cmVhbSBzdG9wcGVkLgorCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzogKGdzdF9wcm94eV9wYWRfZG9fYnVmZmVyYWxsb2MpLAorCSAgKGdzdF9wcm94eV9wYWRfZG9fY2hhaW4pLCAoZ3N0X3Byb3h5X3BhZF9kb19nZXRyYW5nZSk6CisJICBEbyBwcm9wZXIgcmV0dXJuIHZhbHVlcy4KKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9nZXRfY2Fwc191bmxvY2tlZCksIChnc3RfcGFkX2FjY2VwdF9jYXBzKSwKKwkgIChnc3RfcGFkX3NldF9jYXBzKSwgKGdzdF9wYWRfY2hhaW4pLCAoZ3N0X3BhZF9wdXNoKSwKKwkgIChnc3RfcGFkX2dldF9yYW5nZSk6CisJICBCZXR0ZXIgcmV0dXJuIHZhbHVlcy4KKwkgICogZ3N0L2dzdHBhZC5oOgorCSAgUmVvcmdhbmlzZSByZXR1cm4gdmFsdWVzLCBhZGQgbWFjcm8gdG8gY2hlY2sgZm9yIGZhdGFsIGVycm9ycy4KKwkgICogZ3N0L2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfY2hhaW4pOgorCSAgUmV0dXJuIHByb3BlciBHc3RGbG93UmV0dXJuIHZhbHVlcywKKworMjAwNS0wNy0xNCAwOTozNToxMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXM6CisJKiBkb2NzL2dzdC90bXBsL2dzdC5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RiYXNlc2luay5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RiYXNlc3JjLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGJhc2V0cmFuc2Zvcm0uc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0YmluLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGJ1ZmZlci5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RjYXBzLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGNsb2NrLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGNvbXBhdC5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3Rjb25maWcuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZWxlbWVudC5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RlbGVtZW50ZGV0YWlscy5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RlbGVtZW50ZmFjdG9yeS5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RlbnVtdHlwZXMuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZXJyb3Iuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZXZlbnQuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZmFrZXNpbmsuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZmFrZXNyYy5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RmaWxlc2luay5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RmaWxlc3JjLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGZpbHRlci5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3Rmb3JtYXQuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0Z2hvc3RwYWQuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0aW1wbGVtZW50c2ludGVyZmFjZS5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RpbmRleC5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RpbmRleGZhY3Rvcnkuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0aW5mby5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RpdGVyYXRvci5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RtYWNyb3Muc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0bWVtY2h1bmsuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0bWluaW9iamVjdC5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RvYmplY3Quc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0cGFkLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHBhZHRlbXBsYXRlLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHBhcnNlLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHBpcGVsaW5lLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHBsdWdpbi5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RwbHVnaW5mZWF0dXJlLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHF1ZXJ5LnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHF1ZXVlLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHJlZ2lzdHJ5LnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHJlZ2lzdHJ5cG9vbC5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RzY2hlZHVsZXIuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0c2NoZWR1bGVyZmFjdG9yeS5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RzdHJ1Y3R1cmUuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0c3lzdGVtY2xvY2suc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0dGFnbGlzdC5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3R0YWdzZXR0ZXIuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0dHJhY2Uuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0dHJhc2hzdGFjay5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3R0eXBlZmluZC5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3R0eXBlZmluZGZhY3Rvcnkuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0dHlwZXMuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0dXJpaGFuZGxlci5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3R1cml0eXBlLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHV0aWxzLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHZhbHVlLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHZlcnNpb24uc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0eG1sLnNnbWw6CisJKiBkb2NzL2xpYnMvdG1wbC9nc3Rjb250cm9sLnNnbWw6CisJKiBkb2NzL2xpYnMvdG1wbC9nc3RkYXRhcHJvdG9jb2wuc2dtbDoKKwkqIGRvY3MvbGlicy90bXBsL2dzdGRwYXJhbS5zZ21sOgorCSogZG9jcy9saWJzL3RtcGwvZ3N0ZHBsaW5pbnQuc2dtbDoKKwkqIGRvY3MvbGlicy90bXBsL2dzdGRwbWFuLnNnbWw6CisJKiBkb2NzL2xpYnMvdG1wbC9nc3RkcHNtb290aC5zZ21sOgorCSogZG9jcy9saWJzL3RtcGwvZ3N0Z2V0Yml0cy5zZ21sOgorCSogZG9jcy9saWJzL3RtcGwvZ3N0dW5pdGNvbnZlcnQuc2dtbDoKKwkqIGdzdC9iYXNlL2dzdHB1c2hzcmMuYzoKKwkqIGdzdC9iYXNlL2dzdHB1c2hzcmMuaDoKKwkqIGdzdC9lbGVtZW50cy9nc3RlbGVtZW50cy5jOgorCSogZ3N0L2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6CisJKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuaDoKKwkqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmM6CisJKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5oOgorCSogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6CisJKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuaDoKKwkqIGdzdC9lbGVtZW50cy9nc3RmaWxlc3JjLmM6CisJKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNyYy5oOgorCSogbGlicy9nc3QvYmFzZS9nc3RwdXNoc3JjLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdHB1c2hzcmMuaDoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuaDoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmg6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmg6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5oOgorCSAgbW9yZSBhdXRpc3RpYyBjbGVhbmxpbmVzcyBpbiBmdW5jdGlvbnMvbmFtZXMvZGVmaW5lcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBtb3JlIGF1dGlzdGljIGNsZWFubGluZXNzIGluIGZ1bmN0aW9ucy9uYW1lcy9kZWZpbmVzCisKKzIwMDUtMDctMTMgMTg6Mjk6NDEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBnc3QvZ3N0cXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkgIGZpeCBkZWJ1ZyBpZmRlZgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaXggZGVidWcgaWZkZWYKKworMjAwNS0wNy0xMyAxNjoyNjowNyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNlc3JjLmMgKGdzdF9iYXNlX3NyY19zdGFydCk6IFBvc3QgYW4gZXJyb3IgaWYgdGhlIHNvdXJjZSBjb3VsZG4ndCBuZWdvdGlhdGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDctMTMgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYyAoZ3N0X2Jhc2Vfc3JjX3N0YXJ0KTogUG9zdCBhbiBlcnJvciBpZiB0aGUKKwkgIHNvdXJjZSBjb3VsZG4ndCBuZWdvdGlhdGUuCisKKzIwMDUtMDctMTMgMTM6MTQ6NTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBjaGVjay9nc3Quc3VwcDoKKwkqIHRlc3RzL2NoZWNrL2dzdC5zdXBwOgorCSAgYWRkIGEgc3VwcHJlc3Npb24gZnJvbSBFZGdhcmQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkIGEgc3VwcHJlc3Npb24gZnJvbSBFZGdhcmQKKworMjAwNS0wNy0xMyAxMzoxMDoxOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIG1vdmUgdHdvIHRlc3RzdWl0ZSBhcHBzIG92ZXIgdG8gdGhlIGNoZWNrIGRpcgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRlc3RzdWl0ZS9jYXBzL01ha2VmaWxlLmFtOgorCSAgKiB0ZXN0c3VpdGUvY2Fwcy92YWx1ZV9jb21wYXJlLmM6CisJICAqIHRlc3RzdWl0ZS9jYXBzL3ZhbHVlX2ludGVyc2VjdC5jOgorCSAgKiBjaGVjay9nc3QvZ3N0dmFsdWUuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF92YWx1ZV9zdWl0ZSk6CisJICBtb3ZlIHR3byB0ZXN0c3VpdGUgYXBwcyBvdmVyIHRvIHRoZSBjaGVjayBkaXIKKworMjAwNS0wNy0xMiAxNzoxNzozNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBBZGRlZCBtb3JlIGRlYnVnIGluZm8gaW4gdGhlIG5lZ290aWF0ZSBwcm9jZXNzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRjYXBzKToKKwkgIEFkZGVkIG1vcmUgZGVidWcgaW5mbyBpbiB0aGUgbmVnb3RpYXRlIHByb2Nlc3MuCisJICAqIGdzdC9nc3RtZXNzYWdlLmg6CisJICBQcmVwYXJlIGZvciBzZWdtZW50IHBsYXliYWNrLgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2FjY2VwdF9jYXBzKSwgKGdzdF9wYWRfc2V0X2NhcHMpOgorCSAgQmV0dGVyIGRlYnVnZ2luZy4KKwkgICogZ3N0L2dzdHV0aWxzLmM6CisJICBTb21lIG1vcmUgZG9jcy4KKwkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAobWFpbik6CisJICBOVUxMIHBpcGVsaW5lIG9uIGVycm9ycy4KKworMjAwNS0wNy0xMiAxNzowNDo0MSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0YnVmZmVyLmMgKF9nc3RfYnVmZmVyX2NvcHkpOiBDb3B5IHRoZSBidWZmZXIgd2hldGhlciBvciBub3QgaXQgY29tZXMgZnJvbSBhIG1hbGxvYyByZWdpb24uIE1ha2Ugc3VyZSBvdXIgY29weSAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNy0xMiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdGJ1ZmZlci5jIChfZ3N0X2J1ZmZlcl9jb3B5KTogQ29weSB0aGUgYnVmZmVyIHdoZXRoZXIgb3IKKwkgIG5vdCBpdCBjb21lcyBmcm9tIGEgbWFsbG9jIHJlZ2lvbi4gTWFrZSBzdXJlIG91ciBjb3B5IGdldHMgZnJlZWQuCisKKzIwMDUtMDctMTIgMTY6Mjg6MzYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBjaGVjay9nc3QvZ3N0ZWxlbWVudC5jOgorCSogY2hlY2svZ3N0L2dzdG1lc3NhZ2UuYzoKKwkqIGNoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzoKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJKiBnc3QvZ3N0bWVzc2FnZS5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZXNzYWdlLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6CisJICBmaXggcmVmY291bnRpbmcgb2Ygd2FybmluZyBhbmQgZXJyb3IgbWVzc2FnZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZml4IHJlZmNvdW50aW5nIG9mIHdhcm5pbmcgYW5kIGVycm9yIG1lc3NhZ2VzCisKKzIwMDUtMDctMTIgMTM6MjY6MjIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBjaGVjay9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSAgcmUtZW5hYmxlIGxlYWsgY2hlY2tpbmcgOikKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmUtZW5hYmxlIGxlYWsgY2hlY2tpbmcgOikKKworMjAwNS0wNy0xMiAxMjoyMDowMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGNoZWNrL01ha2VmaWxlLmFtOiBhZGQgcGVyLXRlc3QgdmFsZ3JpbmQgdGFyZ2V0cworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL01ha2VmaWxlLmFtOgorCSAgYWRkIHBlci10ZXN0IHZhbGdyaW5kIHRhcmdldHMKKwkgICogY2hlY2svZ3N0LWxpYnMvZ2RwLmM6IChHU1RfU1RBUlRfVEVTVCksCisJICAoZ3N0X2RhdGFfcHJvdG9jb2xfc3VpdGUpLCAobWFpbik6CisJICBjbGVhbiB1cAorCisyMDA1LTA3LTEyIDA5OjQxOjAwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgY2hlY2svTWFrZWZpbGUuYW06IGluc3RhdGUgbW9yZSB2YWxncmluZGFibGUgdGVzdHMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNy0xMiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKwkgICogY2hlY2svTWFrZWZpbGUuYW06CisJICBpbnN0YXRlIG1vcmUgdmFsZ3JpbmRhYmxlIHRlc3RzCisJICAqIGNoZWNrL2VsZW1lbnRzL2dzdGZha2VzcmMuYzogKGNoYWluX2Z1bmMpLCAoZXZlbnRfZnVuYyksCisJICAoR1NUX1NUQVJUX1RFU1QpLCAoZmFrZXNyY19zdWl0ZSk6CisJICAqIGNoZWNrL2dzdC9nc3RwYWQuYzogKEdTVF9TVEFSVF9URVNUKToKKwkgICogY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOiAoR1NUX1NUQVJUX1RFU1QpOgorCSAgZml4IHRlc3QgbGVha3MKKwkgICogZG9jcy9nc3QvdG1wbC9nc3RtaW5pb2JqZWN0LnNnbWw6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfZmluYWxpemUpOgorCSAgZml4IHRoZSBzdGF0aWMgbXV0ZXggbGVhaworCisyMDA1LTA3LTExIDE4OjQxOjQ5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgY2hlY2svTWFrZWZpbGUuYW06IGFkZCB0d28gbW9yZSB0ZXN0cyBmb3IgdmFsZ3JpbmRpbmcKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9NYWtlZmlsZS5hbToKKwkgIGFkZCB0d28gbW9yZSB0ZXN0cyBmb3IgdmFsZ3JpbmRpbmcKKwkgICogY2hlY2svZ3N0L2dzdHZhbHVlLmM6IChHU1RfU1RBUlRfVEVTVCk6CisJICB0ZXN0IHJlZmNvdW50IG9mIGRlc2VyaWFsaXplZCBidWZmZXIsIGZvdW5kIGEgbGVhaworCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXM6CisJICAqIGRvY3MvZ3N0L3RtcGwvZ3N0bWluaW9iamVjdC5zZ21sOgorCSAgYWRkIG1pbmlvYmplY3QgdG8gZG9jcworCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5jOgorCSAgYWRkIHNvbWUgZG9jcworCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9idWZmZXIpLAorCSAgKGdzdF9zdHJpbmdfdW53cmFwKToKKwkgIGZpeCBhIGhhcmQtdG8tZmluZCBpbnZhbGlkIHdyaXRlIGZvciBvbmUgb2YgdGhlIHRlc3RzCisJICBmaXggYSBsZWFrIGZvciBkZXNlcmlhbGl6ZWQgYnVmZmVycworCisyMDA1LTA3LTExIDE1OjQxOjA3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogY2hlY2svTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgIGRvbid0IHZhbGdyaW5kIGFzIHBhcnQgb2YgbWFrZSBjaGVjayBmb3Igbm93CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGRvbid0IHZhbGdyaW5kIGFzIHBhcnQgb2YgbWFrZSBjaGVjayBmb3Igbm93CisKKzIwMDUtMDctMTEgMTU6MjI6MjQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBjaGVjay9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSAgc3BlY2lmeSB0b29sCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHNwZWNpZnkgdG9vbAorCisyMDA1LTA3LTExIDE1OjE4OjMyICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+CisKKwkgIGRvY3MvcHdnLzogUmV3cml0ZSBzY2hlZHVsaW5nLWNoYXB0ZXIgZm9yIHNjaGVkdWxpbmcgbW9kZWwgaW4gMC45LiBBZGQgbG90cyBvZiBleGFtcGxlIGNvZGUgYW5kIGV4cGxhbmF0aW9uIGZvciBwYWQgYS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcHdnL2FkdmFuY2VkLWV2ZW50cy54bWw6CisJICAqIGRvY3MvcHdnL2FkdmFuY2VkLXJlcXVlc3QueG1sOgorCSAgKiBkb2NzL3B3Zy9hZHZhbmNlZC1zY2hlZHVsaW5nLnhtbDoKKwkgICogZG9jcy9wd2cvYXBwZW5kaXgtcG9ydGluZy54bWw6CisJICAqIGRvY3MvcHdnL2J1aWxkaW5nLWJvaWxlci54bWw6CisJICAqIGRvY3MvcHdnL2ludHJvLXByZWZhY2UueG1sOgorCSAgKiBkb2NzL3B3Zy9vdGhlci1udG9vbmUueG1sOgorCSAgUmV3cml0ZSBzY2hlZHVsaW5nLWNoYXB0ZXIgZm9yIHNjaGVkdWxpbmcgbW9kZWwgaW4gMC45LiBBZGQgbG90cworCSAgb2YgZXhhbXBsZSBjb2RlIGFuZCBleHBsYW5hdGlvbiBmb3IgcGFkIGFjdGl2YXRpb24sIGxvb3AoKSBhbmQKKwkgIGdldHJhbmdlKCkgZnVuY3Rpb25zIGFuZCBhIGJpdCBtb3JlLiBSZW1vdmUgb2xkIGNvbW1lbnRzIHBvaW50aW5nCisJICB0byBsb29wLWZ1bmN0aW9ucy4KKwkgICogZXhhbXBsZXMvcHdnL01ha2VmaWxlLmFtOgorCSAgQWRkIGxvb3AvZ2V0cmFuZ2UgZXhhbXBsZXMuCisKKzIwMDUtMDctMTEgMTU6MTA6NDAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBjaGVjay9NYWtlZmlsZS5hbToKKwkqIGNoZWNrL2dzdC5zdXBwOgorCSogY2hlY2svZ3N0L2dzdC5jOgorCSogY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOgorCSogY2hlY2svZ3N0L2dzdGRhdGEuYzoKKwkqIGNoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgorCSogY2hlY2svZ3N0L2dzdG1pbmlvYmplY3QuYzoKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGdzdC9nc3QuYzoKKwkqIGdzdC9nc3QuaDoKKwkqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgorCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9jaGVjay9nc3Quc3VwcDoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3QuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXIuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RkYXRhLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtaW5pb2JqZWN0LmM6CisJKiB0b29scy9nc3QtbGF1bmNoLmM6CisJICB2YWxncmluZCB1bml0IHRlc3RzIGFzIGNoZWNrLWxvY2FsOyBhZGQgZ3N0X2RlaW5pdAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB2YWxncmluZCB1bml0IHRlc3RzIGFzIGNoZWNrLWxvY2FsOyBhZGQgZ3N0X2RlaW5pdAorCisyMDA1LTA3LTExIDE1OjA2OjI3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogZG9jcy9nc3QvdG1wbC9nc3RiYXNlc3JjLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGZha2VzcmMuc2dtbDoKKwkqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkqIGdzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6CisJICBhZGQgbnVtLWJ1ZmZlcnMgcHJvcGVydHkgdG8gYmFzZXNyYworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGQgbnVtLWJ1ZmZlcnMgcHJvcGVydHkgdG8gYmFzZXNyYworCisyMDA1LTA3LTEwIDEyOjAzOjEzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0YmFzZXNpbmsuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0YmFzZXNyYy5zZ21sOgorCSogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKKwkqIGdzdC9lbGVtZW50cy9nc3RmaWxlc2luay5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6CisJICBtb3JlIG1hY3JvIHNwbGl0dGluZworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBtb3JlIG1hY3JvIHNwbGl0dGluZworCisyMDA1LTA3LTEwIDAwOjA3OjUxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0L2dzdGVsZW1lbnQuYzogYWRkIGRlYnVnCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2dldF9idXMpOgorCSAgYWRkIGRlYnVnCisJICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKGNoZWNrX2ludHIpLCAoZXZlbnRfbG9vcCk6CisJICBmaXggYnVzIGxlYWtzCisKKzIwMDUtMDctMDkgMjM6NTI6MDcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBmaXggY2FwcyBsZWFrIGluIGJvdGggY2FzZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZml4IGNhcHMgbGVhayBpbiBib3RoIGNhc2VzCisKKzIwMDUtMDctMDkgMjM6NDg6NDUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBkdWgsIHJlbW92ZSB1bnVzZWQgdmFyCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGR1aCwgcmVtb3ZlIHVudXNlZCB2YXIKKworMjAwNS0wNy0wOSAyMzo0NzoyMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIGZpeCBhIGNhcHMgbGVhaworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaXggYSBjYXBzIGxlYWsKKworMjAwNS0wNy0wOSAyMzozMzoyNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogYWRkIGZpbmFsaXplIG1ldGhvZCBhbmQgY2xlYW4gdXAgcHJvcGVybHkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfY2xhc3NfaW5pdCksCisJICAoZ3N0X2Jhc2Vfc3JjX2ZpbmFsaXplKToKKwkgIGFkZCBmaW5hbGl6ZSBtZXRob2QgYW5kIGNsZWFuIHVwIHByb3Blcmx5CisJICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX2Rpc3Bvc2UpOgorCSAgYWRkIGRlYnVnCisKKzIwMDUtMDctMDkgMjM6MTU6MjcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBnc3QvZ3N0YmluLmM6CisJICBkb24ndCBnZXQgc3JjIGZvciBhbGwgbWVzc2FnZXM7IG9ubHkgZm9yIGVvcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBkb24ndCBnZXQgc3JjIGZvciBhbGwgbWVzc2FnZXM7IG9ubHkgZm9yIGVvcworCisyMDA1LTA3LTA5IDIyOjU0OjI4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgY2hlY2svZ3N0L2dzdGJpbi5jOiBhZGQgbW9yZSB0aGluZ3MgdG8gY2hlY2sKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9nc3QvZ3N0YmluLmM6IChwb3BfbWVzc2FnZXMpLCAoR1NUX1NUQVJUX1RFU1QpLAorCSAgKGdzdF9iaW5fc3VpdGUpOgorCSAgYWRkIG1vcmUgdGhpbmdzIHRvIGNoZWNrCisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fY2hhbmdlX3N0YXRlKSwgKGJpbl9idXNfaGFuZGxlcik6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6CisJICBtb3JlIGRlYnVnCisKKzIwMDUtMDctMDkgMTY6MzY6MTggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBjaGVjay9lbGVtZW50cy9nc3RmYWtlc3JjLmM6CisJKiBjaGVjay9nc3QtbGlicy9nZHAuYzoKKwkqIGNoZWNrL2dzdC9nc3QuYzoKKwkqIGNoZWNrL2dzdC9nc3RiaW4uYzoKKwkqIGNoZWNrL2dzdC9nc3RidWZmZXIuYzoKKwkqIGNoZWNrL2dzdC9nc3RidXMuYzoKKwkqIGNoZWNrL2dzdC9nc3RjYXBzLmM6CisJKiBjaGVjay9nc3QvZ3N0ZGF0YS5jOgorCSogY2hlY2svZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGNoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgorCSogY2hlY2svZ3N0L2dzdGl0ZXJhdG9yLmM6CisJKiBjaGVjay9nc3QvZ3N0bWVzc2FnZS5jOgorCSogY2hlY2svZ3N0L2dzdG9iamVjdC5jOgorCSogY2hlY2svZ3N0L2dzdHBhZC5jOgorCSogY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSogY2hlY2svZ3N0L2dzdHN5c3RlbWNsb2NrLmM6CisJKiBjaGVjay9nc3QvZ3N0dGFnLmM6CisJKiBjaGVjay9nc3QvZ3N0dmFsdWUuYzoKKwkqIGNoZWNrL2dzdGNoZWNrLmM6CisJKiBjaGVjay9nc3RjaGVjay5oOgorCSogY2hlY2svcGlwZWxpbmVzL2NsZWFudXAuYzoKKwkqIGNoZWNrL3BpcGVsaW5lcy9zaW1wbGVfbGF1bmNoX2xpbmVzLmM6CisJKiBjaGVjay9zdGF0ZXMvc2lua3MuYzoKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKKwkqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc2lua3MuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3QuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RiaW4uYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXIuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidXMuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RjYXBzLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZGF0YS5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGl0ZXJhdG9yLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWVzc2FnZS5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdG9iamVjdC5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHN5c3RlbWNsb2NrLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFnLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdGNoZWNrLmM6CisJKiB0ZXN0cy9jaGVjay9nc3RjaGVjay5oOgorCSogdGVzdHMvY2hlY2svbGlicy9nZHAuYzoKKwkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9jbGVhbnVwLmM6CisJKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jOgorCSAgYWRkIGRlYnVnZ2luZyBjYXRlZ29yeSB1c2UgR1NUX1NUQVJUX1RFU1Qgbm93LCBzbyB3ZSBhZGQgYSBkZWJ1ZyBsaW5lCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFkZCBkZWJ1Z2dpbmcgY2F0ZWdvcnkKKwkgIHVzZSBHU1RfU1RBUlRfVEVTVCBub3csIHNvIHdlIGFkZCBhIGRlYnVnIGxpbmUKKworMjAwNS0wNy0wOSAxNToxODo1MyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGNoZWNrL2dzdC9nc3RiaW4uYzogYWRkIHRlc3QgZm9yIHN0YXRlIGNoYW5nZSBtZXNzYWdlIG9uIGEgYmluCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svZ3N0L2dzdGJpbi5jOiAoU1RBUlRfVEVTVCksIChnc3RfYmluX3N1aXRlKToKKwkgIGFkZCB0ZXN0IGZvciBzdGF0ZSBjaGFuZ2UgbWVzc2FnZSBvbiBhIGJpbgorCSAgKiBjaGVjay9nc3QvZ3N0ZWxlbWVudC5jOiAoU1RBUlRfVEVTVCksIChnc3RfZWxlbWVudF9zdWl0ZSk6CisJICBhZGQgYW5vdGhlciB0ZXN0CisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5faW5pdCk6CisJICAqIGdzdC9nc3RidXMuYzogKGdzdF9idXNfaW5pdCksIChnc3RfYnVzX3Bvc3QpOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKSwKKwkgIChnc3RfZWxlbWVudF9zZXRfc3RhdGUpOgorCSAgKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzogKGdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlKToKKwkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKGdzdF9tZXNzYWdlX25ldyk6CisJICAqIGdzdC9nc3RzY2hlZHVsZXIuYzoKKwkgIHZhcmlvdXMgZGVidWdnaW5nIGFkZGl0aW9ucyBhbmQgY2xlYW51cHMKKworMjAwNS0wNy0wOCAxNjo0MTo0NSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIGNoZWNrL01ha2VmaWxlLmFtOgorCSogY2hlY2svZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3RlbGVtZW50LmM6CisJICBhZGRpbmcgdGVzdHMgZm9yIGVsZW1lbnRzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFkZGluZyB0ZXN0cyBmb3IgZWxlbWVudHMKKworMjAwNS0wNy0wOCAxNjoxNjoyOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGdzdC9yZWdpc3RyaWVzL2dzdGxpYnhtbHJlZ2lzdHJ5LmM6IHBsdWcgbW9yZSBsZWFrcy4gIEEgc2ltcGxlIGdzdF9pbml0KCkgbm93IGlzIGxlYWtmcmVlLCB5YXkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L3JlZ2lzdHJpZXMvZ3N0bGlieG1scmVnaXN0cnkuYzogKGxvYWRfZmVhdHVyZSk6CisJICBwbHVnIG1vcmUgbGVha3MuICBBIHNpbXBsZSBnc3RfaW5pdCgpIG5vdyBpcyBsZWFrZnJlZSwgeWF5LgorCisyMDA1LTA3LTA4IDE2OjA4OjE2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogZ3N0L3JlZ2lzdHJpZXMvZ3N0bGlieG1scmVnaXN0cnkuYzoKKwkgIHBsdWcgYW5vdGhlciBtZW1sZWFrIGluIHJlZ2lzdHJ5IGxvYWRpbmcgLSBJIGhhdmUgTk8gaWRlYSB3aHkgdGhpcyB3YXMgcmV0dXJuaW5nIGEgR3N0UGx1Z2luCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHBsdWcgYW5vdGhlciBtZW1sZWFrIGluIHJlZ2lzdHJ5IGxvYWRpbmcgLSBJIGhhdmUgTk8gaWRlYSB3aHkgdGhpcyB3YXMgcmV0dXJuaW5nIGEgR3N0UGx1Z2luCisKKzIwMDUtMDctMDggMTQ6NTA6NDQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBnc3QvcmVnaXN0cmllcy9nc3RsaWJ4bWxyZWdpc3RyeS5jOgorCSAgSSBuZWVkIHRvIGxlYXJuIHRvIHN0b3AgZG9pbmcgdGhpcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBJIG5lZWQgdG8gbGVhcm4gdG8gc3RvcCBkb2luZyB0aGlzCisKKzIwMDUtMDctMDggMTQ6Mzk6MDEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBjb25maWd1cmUuYWM6CisJICBhZGQgcmlnaHQgdmFyaWFibGUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkIHJpZ2h0IHZhcmlhYmxlCisKKzIwMDUtMDctMDggMTQ6MzU6NTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBjb25maWd1cmUuYWM6IHVzZSBHU1RfU0VUX0VSUk9SX0NGTEFHUworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgIHVzZSBHU1RfU0VUX0VSUk9SX0NGTEFHUworCSAgKiBkb2NzL2ZhcS9jdnMueG1sOgorCSAgY2hhbmdlIHRvIEVSUk9SX0NGTEFHUworCisyMDA1LTA3LTA4IDE0OjAxOjMxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgY29uZmlndXJlLmFjOiBtYWtlIEdTVF9FUlJPUl9DRkxBR1Mgb3ZlcnJpZGFibGUgYW5kIHJlLWVuYWJsZSBXZXJyb3IKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICBtYWtlIEdTVF9FUlJPUl9DRkxBR1Mgb3ZlcnJpZGFibGUgYW5kIHJlLWVuYWJsZSBXZXJyb3IKKwkgICogZG9jcy9mYXEvY3ZzLnhtbDoKKwkgIGFkZCBhIG5vdGUgYWJvdXQgZXJyb3IgQ0ZMQUdTCisJICAqIGRvY3MvZ3N0L3RtcGwvZ3N0ZmFrZXNyYy5zZ21sOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgorCSAgY29tbWVudCBvdXQgc29tZSB1bnVzZWQgY29kZQorCSAgKiBnc3QvZ3N0LmM6IChzcGxpdF9hbmRfaXRlcmF0ZSk6CisJICAqIGdzdC9yZWdpc3RyaWVzL2dzdGxpYnhtbHJlZ2lzdHJ5LmM6IChsb2FkX3BhZF90ZW1wbGF0ZSksCisJICAobG9hZF9mZWF0dXJlKToKKwkgIHBsdWcgc29tZSBtZW1sZWFrcworCisyMDA1LTA3LTA3IDE1OjA3OjIxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZG9jcy9saWJzL01ha2VmaWxlLmFtOgorCSAgbWFrZSBsaWJzIHVzZSBzYW1lIGd0ay1kb2MubWFrCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIG1ha2UgbGlicyB1c2Ugc2FtZSBndGstZG9jLm1haworCisyMDA1LTA3LTA3IDE0OjE2OjQwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogY29tbW9uOgorCSogZG9jcy9nc3QvTWFrZWZpbGUuYW06CisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vY2EucG86CisJKiBwby9jcy5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSAgZmFjdG9yIG91dCBndGstZG9jCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGZhY3RvciBvdXQgZ3RrLWRvYworCisyMDA1LTA3LTA3IDE0OjAxOjQ3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3Qvc2NoZWR1bGVycy90aHJlYWRzY2hlZHVsZXIuYzogVW5sb2NrIHRoZSBTVFJFQU1fTE9DSyBjb21wbGV0ZWx5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9zY2hlZHVsZXJzL3RocmVhZHNjaGVkdWxlci5jOiAoZ3N0X3RocmVhZF9zY2hlZHVsZXJfZnVuYyksCisJICAoZ3N0X3RocmVhZF9zY2hlZHVsZXJfZGlzcG9zZSk6CisJICBVbmxvY2sgdGhlIFNUUkVBTV9MT0NLIGNvbXBsZXRlbHkuCisKKzIwMDUtMDctMDcgMTM6MTQ6NDAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBleGFtcGxlcy9wd2cvLmdpdGlnbm9yZToKKwkqIHRlc3RzL29sZC9leGFtcGxlcy9wd2cvLmdpdGlnbm9yZToKKwkgIGlnbm9yZSBtb3JlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGlnbm9yZSBtb3JlCisKKzIwMDUtMDctMDcgMTM6MTI6NDMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiB0ZXN0cy9pbnN0YW50aWF0ZS8uZ2l0aWdub3JlOgorCSAgaWdub3JlIG1vcmUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgaWdub3JlIG1vcmUKKworMjAwNS0wNy0wNyAxMTo1OTozNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIGNoZWNrL01ha2VmaWxlLmFtOgorCSogY2hlY2svZWxlbWVudHMvLmdpdGlnbm9yZToKKwkqIGNoZWNrL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKKwkqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmM6CisJKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5oOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuaDoKKwkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSogdGVzdHMvY2hlY2svZWxlbWVudHMvLmdpdGlnbm9yZToKKwkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKKwkgIGFkZGluZyBhbiBlbGVtZW50IHRlc3QKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkaW5nIGFuIGVsZW1lbnQgdGVzdAorCisyMDA1LTA3LTA3IDExOjA5OjMyICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGdzdC9nc3RidXMuYyAoZ3N0X2J1c19oYXZlX3BlbmRpbmcpOiBSZW1vdmUgaW50ZW5zZWx5IGlycml0YXRpbmcgZGVidWcgbWVzc2FnZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNy0wNyAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdGJ1cy5jIChnc3RfYnVzX2hhdmVfcGVuZGluZyk6IFJlbW92ZSBpbnRlbnNlbHkgaXJyaXRhdGluZworCSAgZGVidWcgbWVzc2FnZS4KKworMjAwNS0wNy0wNyAxMDowMzowNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgorCSAgYW5vdGhlciBkb2MgZml4CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFub3RoZXIgZG9jIGZpeAorCisyMDA1LTA3LTA3IDA5OjEwOjE3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZG9jcy9tYW51YWwvQlVJTEQ6CisJKiBkb2NzL21hbnVhbC9NYWtlZmlsZS5hbToKKwkgIG1vcmUgbWFjb3N4IG1hZG5lc3MgZml4aW5nCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIG1vcmUgbWFjb3N4IG1hZG5lc3MgZml4aW5nCisKKzIwMDUtMDctMDcgMDg6NDM6MTcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RxdWVyeS4qOiBSZW1vdmUgb2xkIHR5cGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHF1ZXJ5LmM6CisJICAqIGdzdC9nc3RxdWVyeS5oOgorCSAgUmVtb3ZlIG9sZCB0eXBlcworCisyMDA1LTA3LTA3IDA4OjE2OjU0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IEFsbG93IHN1YmNsYXNzZXMgdG8gaW1wbGVtZW50IHRoZWlyIG93biBuZWdvdGlhdGlvbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfZ2V0X3JhbmdlKSwKKwkgIChnc3RfYmFzZV9zcmNfZGVmYXVsdF9uZWdvdGlhdGUpLCAoZ3N0X2Jhc2Vfc3JjX25lZ290aWF0ZSk6CisJICBBbGxvdyBzdWJjbGFzc2VzIHRvIGltcGxlbWVudCB0aGVpciBvd24gbmVnb3RpYXRpb24uCisKKzIwMDUtMDctMDYgMTc6MTc6NTkgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBkb2NzL2Rlc2lnbi86IFVwZGF0ZSBkZXNpZ24gbm90ZXMgdG8gcmVmbGVjdCB0aGUgbW92ZW1lbnQgb2YgcmVzcG9uc2liaWxpdHkgZm9yIGJ1cyBoYW5kbGluZyBmcm9tIEdzdFBpcGVsaW5lIHRvCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RiaW4udHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdHBpcGVsaW5lLnR4dDoKKwkgIFVwZGF0ZSBkZXNpZ24gbm90ZXMgdG8gcmVmbGVjdCB0aGUgbW92ZW1lbnQgb2YKKwkgIHJlc3BvbnNpYmlsaXR5IGZvciBidXMgaGFuZGxpbmcgZnJvbSBHc3RQaXBlbGluZSB0bworCSAgR3N0QmluCisKKzIwMDUtMDctMDYgMTY6NDU6NDUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBjb25maWd1cmUuYWM6IFJlbW92ZSB1bm5lY2Vzc2FyeSBxdWV1ZTIvMy80IGV4YW1wbGVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzoKKwkgIFJlbW92ZSB1bm5lY2Vzc2FyeSBxdWV1ZTIvMy80IGV4YW1wbGVzLgorCisyMDA1LTA3LTA2IDE2OjIyOjQ3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZXhhbXBsZXMvOiBVcGRhdGUgYSBjb3VwbGUgb2YgdGhlIGV4YW1wbGVzIHRvIHdvcmsgYWdhaW4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZXhhbXBsZXMvTWFrZWZpbGUuYW06CisJICAqIGV4YW1wbGVzL2hlbGxvd29ybGQvaGVsbG93b3JsZC5jOiAoZXZlbnRfbG9vcCksIChtYWluKToKKwkgICogZXhhbXBsZXMvcXVldWUvcXVldWUuYzogKGV2ZW50X2xvb3ApLCAobWFpbik6CisJICAqIGV4YW1wbGVzL3F1ZXVlMi9xdWV1ZTIuYzogKG1haW4pOgorCSAgVXBkYXRlIGEgY291cGxlIG9mIHRoZSBleGFtcGxlcyB0byB3b3JrIGFnYWluLgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19wcmVyb2xsX3F1ZXVlX2VtcHR5KSwKKwkgIChnc3RfYmFzZV9zaW5rX3ByZXJvbGxfcXVldWVfZmx1c2gpLCAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfZXZlbnQpOgorCSAgU3BlbGxpbmcgY29ycmVjdGlvbnMgYW5kIGV4dHJhIGRlYnVnLgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2NsYXNzX2luaXQpLCAoZ3N0X2Jpbl9pbml0KSwgKGlzX2VvcyksCisJICAoZ3N0X2Jpbl9hZGRfZnVuYyksIChiaW5fZWxlbWVudF9pc19zaW5rKSwgKGdzdF9iaW5fZ2V0X3N0YXRlKSwKKwkgIChnc3RfYmluX2NoYW5nZV9zdGF0ZSksIChnc3RfYmluX2Rpc3Bvc2UpLCAoYmluX2J1c19oYW5kbGVyKToKKwkgICogZ3N0L2dzdGJpbi5oOgorCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9pbml0KSwgKGdzdF9waXBlbGluZV9kaXNwb3NlKSwKKwkgIChnc3RfcGlwZWxpbmVfY2hhbmdlX3N0YXRlKToKKwkgICogZ3N0L2dzdHBpcGVsaW5lLmg6CisJICBNb3ZlIHRoZSBidXMgaGFuZGxlciBmb3IgY2hpbGRyZW4gdG8gdGhlIEdzdEJpbiwgYW5kIGNyZWF0ZSBhCisJICBzZXBhcmF0ZSBidXMgZm9yIHJlY2VpdmluZyBtZXNzYWdlcyBmcm9tIGNoaWxkcmVuIHRvIHRoZSBvbmUgdGhlCisJICBidXMgc2VuZHMgJ3Vwd2FyZHMnIG9uLgorCisyMDA1LTA3LTA2IDEzOjI1OjI2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS86IE1ha2UgYmFzZXNyYyBuZWdvdGlhdGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvUkVBRE1FOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19wcmVyb2xsX3F1ZXVlX2VtcHR5KSwKKwkgIChnc3RfYmFzZV9zaW5rX2hhbmRsZV9vYmplY3QpLCAoZ3N0X2Jhc2Vfc2lua19sb29wKSwKKwkgIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19jbGFzc19pbml0KSwKKwkgIChnc3RfYmFzZV9zcmNfaW5pdCksIChnc3RfYmFzZV9zcmNfc2V0Y2FwcyksCisJICAoZ3N0X2Jhc2Vfc3JjX2dldGNhcHMpLCAoZ3N0X2Jhc2Vfc3JjX2xvb3ApLAorCSAgKGdzdF9iYXNlX3NyY19kZWZhdWx0X25lZ290aWF0ZSksIChnc3RfYmFzZV9zcmNfbmVnb3RpYXRlKSwKKwkgIChnc3RfYmFzZV9zcmNfc3RhcnQpLCAoZ3N0X2Jhc2Vfc3JjX2NoYW5nZV9zdGF0ZSk6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkgIE1ha2UgYmFzZXNyYyBuZWdvdGlhdGUuCisJICBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgcHJlcm9sbCBmYWlscyBpbiBiYXNlc2luay4KKwkgIFVwZGF0ZSBSRUFETUUuCisKKzIwMDUtMDctMDYgMTM6MjA6NDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RwYWQuYzogSW1wbGVtZW50IHRoZSBmaXhhdGUgZnVuY3Rpb24uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9maXhhdGVfY2FwcyksIChnc3RfcGFkX2FjY2VwdF9jYXBzKToKKwkgIEltcGxlbWVudCB0aGUgZml4YXRlIGZ1bmN0aW9uLgorCSAgQ2xlYW4gdXAgYWNjZXB0Y2Fwcy4KKworMjAwNS0wNy0wNiAxMjoyNDo1MCArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgorCisJICBkb2NzL3B3Zy86IFJlbW92ZSBuZXZlci13cml0dGVuIGZpbHRlci1mYWN0b3J5IGNoYXB0ZXI7IEknbGwgYWRkIHRoZSB2YXJpb3VzIGJhc2UgY2xhc3NlcyB0byBwYXJ0IDQgKCJvdGhlciBlbGVtZW50IHQuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL3B3Zy9idWlsZGluZy1maWx0ZXJmYWN0b3J5LnhtbDoKKwkgICogZG9jcy9wd2cvcHdnLnhtbDoKKwkgIFJlbW92ZSBuZXZlci13cml0dGVuIGZpbHRlci1mYWN0b3J5IGNoYXB0ZXI7IEknbGwgYWRkIHRoZSB2YXJpb3VzCisJICBiYXNlIGNsYXNzZXMgdG8gcGFydCA0ICgib3RoZXIgZWxlbWVudCB0eXBlcyIpIGxhdGVyIG9uLgorCisyMDA1LTA3LTA2IDEyOjE4OjAwICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+CisKKwkgIEFkZCBhIGNoYXB0ZXIgb24gY2FwcyBuZWdvdGlhdGlvbiwgc2ltcGxpZnkgdGhlIG9yaWdpbmFsIGNvZGUgc2FtcGxlcyBhIGJpdCB3LnIudC4gY2FwcyBuZWdvdGlhdGlvbiwgYWRkIGxpbmsgdG8gdGhlIC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvcHdnL2FkdmFuY2VkLW5lZ290aWF0aW9uLnhtbDoKKwkgICogZG9jcy9wd2cvYnVpbGRpbmctYm9pbGVyLnhtbDoKKwkgICogZG9jcy9wd2cvYnVpbGRpbmctcGFkcy54bWw6CisJICAqIGRvY3MvcHdnL3B3Zy54bWw6CisJICAqIGV4YW1wbGVzL3B3Zy9NYWtlZmlsZS5hbToKKwkgIEFkZCBhIGNoYXB0ZXIgb24gY2FwcyBuZWdvdGlhdGlvbiwgc2ltcGxpZnkgdGhlIG9yaWdpbmFsIGNvZGUKKwkgIHNhbXBsZXMgYSBiaXQgdy5yLnQuIGNhcHMgbmVnb3RpYXRpb24sIGFkZCBsaW5rIHRvIHRoZSBhZHZhbmNlZAorCSAgc2VjdGlvbi4gQWRkIGEgYnVuY2ggb2YgZXhhbXBsZXMgc2hvd2luZyBkaWZmZXJlbnQgdXNlIGNhc2VzIG9mCisJICBkaWZmZXJlbnQgdHlwZXMgb2YgY2FwcyBuZWdvdGlhdGlvbi4gVXBzdHJlYW0gcmVuZWdvdGlhdGlvbiBpc24ndAorCSAgZnVsbHkgZG9jdW1lbnRlZCB5ZXQgc2luY2Ugbm9ib2R5IGtub3dzIGhvdyB0aGF0IHdvcmtzLgorCisyMDA1LTA3LTA2IDExOjM0OjA2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogcGtnY29uZmlnL2dzdHJlYW1lci1kYXRhcHJvdG9jb2wtdW5pbnN0YWxsZWQucGMuaW46CisJKiBwa2djb25maWcvZ3N0cmVhbWVyLWRhdGFwcm90b2NvbC5wYy5pbjoKKwkgIHBjIGZpbGUgY2xlYW51cHMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcGMgZmlsZSBjbGVhbnVwcworCisyMDA1LTA3LTA2IDExOjMxOjU3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgaWYgcGFkIGhhcyBubyBwYXJlbnQsIHJldHVybiBOVUxMIGFzIGxpc3Qgb2YgaW50ZXJuYWwgbGlua3MKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9nc3QvZ3N0cGFkLmM6CisJICAqIGNoZWNrL2dzdGNoZWNrLmM6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfZ2V0X2ludGVybmFsX2xpbmtzX2RlZmF1bHQpOgorCSAgaWYgcGFkIGhhcyBubyBwYXJlbnQsIHJldHVybiBOVUxMIGFzIGxpc3Qgb2YgaW50ZXJuYWwgbGlua3MKKworMjAwNS0wNy0wNSAxNjozODoxMyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvOiBzL0JBU0VTUkMvQkFTRV9TUkMvZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNy0wNSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKKwkgICogZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5jOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogcy9CQVNFU1JDL0JBU0VfU1JDL2cuCisKKzIwMDUtMDctMDUgMTU6Mjg6MTggKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KKworCSogY29uZmlndXJlLmFjOgorCSogZ3N0cmVhbWVyLnNwZWMuaW46CisJKiBwby9hZi5wbzoKKwkqIHBvL2F6LnBvOgorCSogcG8vY2EucG86CisJKiBwby9jcy5wbzoKKwkqIHBvL2RlLnBvOgorCSogcG8vZW5fR0IucG86CisJKiBwby9mci5wbzoKKwkqIHBvL2l0LnBvOgorCSogcG8vbmIucG86CisJKiBwby9ubC5wbzoKKwkqIHBvL3J1LnBvOgorCSogcG8vc3EucG86CisJKiBwby9zci5wbzoKKwkqIHBvL3N2LnBvOgorCSogcG8vdHIucG86CisJKiBwby91ay5wbzoKKwkqIHBvL3ZpLnBvOgorCSAgdXBkYXRlIHNwZWMgZmlsZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICB1cGRhdGUgc3BlYyBmaWxlCisKKzIwMDUtMDctMDUgMTI6MTc6MjQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogQ2hhbmdlTG9nOgorCSogTWFrZWZpbGUuYW06CisJICBiZXR0ZXIgcmVwb3J0IGdlbnJhdGlvbiB0YXJnZXQgKGxjb3YgbmVlZHMgYSBwYXRjaCkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYmV0dGVyIHJlcG9ydCBnZW5yYXRpb24gdGFyZ2V0IChsY292IG5lZWRzIGEgcGF0Y2gpCisKKzIwMDUtMDctMDUgMTA6NTg6MjEgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2VsZW1lbnRzLCB0ZXN0c3VpdGU6IE51bGwgaWYgd2UgZ290IGl0Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDctMDUgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9lbGVtZW50cywgdGVzdHN1aXRlOiBOdWxsIGlmIHdlIGdvdCBpdC4uLgorCisyMDA1LTA3LTA1IDEwOjIwOjE0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBQb3J0ZWQgZGF0YXByb3RvbCB0byAwLjkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvTWFrZWZpbGUuYW06CisJICAqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzogKGdzdF9kcF92YWxpZGF0ZV9wYWNrZXQpOgorCSAgKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmg6CisJICAqIHBrZ2NvbmZpZy9NYWtlZmlsZS5hbToKKwkgICogcGtnY29uZmlnL2dzdHJlYW1lci1kYXRhcHJvdG9jb2wtdW5pbnN0YWxsZWQucGMuaW46CisJICAqIHBrZ2NvbmZpZy9nc3RyZWFtZXItZGF0YXByb3RvY29sLnBjLmluOgorCSAgUG9ydGVkIGRhdGFwcm90b2wgdG8gMC45LgorCSAgQWRkZWQgcGtnY29uZmlnIGZpbGVzLgorCisyMDA1LTA3LTA1IDA5OjM1OjIyICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYyAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldGNhcHMpOiBEZWZhdWx0IHRvIHJldHVybmluZyBUUlVFIGZvciB0aGUgY2FzZSB3aGVuIHRyYW5mb3JtX2NhcHMgci4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTA3LTA1ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmMgKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRjYXBzKToKKwkgIERlZmF1bHQgdG8gcmV0dXJuaW5nIFRSVUUgZm9yIHRoZSBjYXNlIHdoZW4gdHJhbmZvcm1fY2FwcyByZXR1cm5zCisJICBhIGZpeGVkIGNhcHMsIGxpa2UgZm9yIGlkZW50aXR5IG9yIHZvbHVtZS4KKworMjAwNS0wNy0wNSAwODo0Nzo0MCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBjaGVjay86IEFwcGxpY2F0aW9uIG1lc3NhZ2UgQVBJIGNoYW5nZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNy0wNSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogY2hlY2svZ3N0L2dzdGJ1cy5jIChwb3VuZF9idXNfd2l0aF9tZXNzYWdlcyk6CisJICAqIGNoZWNrL2dzdC9nc3RtZXNzYWdlLmMgKFNUQVJUX1RFU1QpOgorCSAgKiBjaGVjay9waXBlbGluZXMvc2ltcGxlX2xhdW5jaF9saW5lcy5jIChnb3RfaGFuZG9mZik6IEFwcGxpY2F0aW9uCisJICBtZXNzYWdlIEFQSSBjaGFuZ2UuCisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYyAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldGNhcHMpOiBNb3JlCisJICBsb2dpYyB3ZWFrcyBoZXJlOiBhbHdheXMgcnVuIHRyYW5zZm9ybV9jYXBzLCB0cnlpbmcgcGFzc3Rocm91Z2gKKwkgIG9wZXJhdGlvbiBvbmx5IGlmIHRoZSBvcmlnaW5hbCBjYXBzIGludGVyc2VjdHMgd2l0aCB0aGUgdHJhbnNmb3JtLgorCSAgKiBnc3QvZ3N0cGFkLmMgKGdzdF9wYWRfbGlua19jaGVja19jb21wYXRpYmxlX3VubG9ja2VkKTogRGVidWcKKwkgIHNvdXJjZSBhbmQgc2luayBjYXBzLgorCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmMgKGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRjYXBzKToKKwkgIEludGVyc2VjdCB0aGUgcGVlciBjYXBzIHdpdGggdGhlIHBhZCB0ZW1wbGF0ZSBiZWZvcmUgZ29pbmcgaW50bworCSAgdHJhbnNmb3JtX2NhcHMuCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3RyYW5zZm9ybV9jYXBzKTogTW9yZSBkZWJ1Z2dpbmcuCisJICAqIGdzdC9nc3RtZXNzYWdlLmggKGdzdF9tZXNzYWdlX25ld19hcHBsaWNhdGlvbik6IFRha2UgYSBHc3RPYmplY3QKKwkgIHNyYyBhcmd1bWVudC4KKworMjAwNS0wNy0wNCAxNTowODozMCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgZ3N0L2dzdHV0aWxzLio6IG5vdyByZXR1cm5zIHRoZSBzaWduYWwgaWQgZm9yIGJldHRlciB3cmFwcGluZyBpbiBiaW5kaW5ncy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dXRpbHMuYzoKKwkgICogZ3N0L2dzdHV0aWxzLmg6CisJICAoZ3N0X3BhZF9hZGRfKl9wcm9iZSk6IG5vdyByZXR1cm5zIHRoZSBzaWduYWwgaWQgZm9yIGJldHRlciB3cmFwcGluZworCSAgaW4gYmluZGluZ3MuCisKKzIwMDUtMDctMDQgMDk6MjI6NTEgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgY2hlY2svZ3N0L2dzdHBhZC5jOiBPbmx5IHNldCBleHBsaWNpdCBjYXBzIG9uIHBhZHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDctMDQgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGNoZWNrL2dzdC9nc3RwYWQuYzogT25seSBzZXQgZXhwbGljaXQgY2FwcyBvbiBwYWRzLgorCisyMDA1LTA3LTAxIDE2OjQ2OjU5ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIHRlc3RzL25ldHdvcmstY2xvY2suc2NtOiBDb21tZW50YXJ5IHVwZGF0ZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNy0wMSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogdGVzdHMvbmV0d29yay1jbG9jay5zY206IENvbW1lbnRhcnkgdXBkYXRlLgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYyAoUFJPUF9EVVBMSUNBVEUpOiBHb25lIGRhZGR5IGdvbmUuCisJICBEaWRuJ3QgcmVhbGx5IG1ha2Ugc2Vuc2UsIG5vdCBpbXBsZW1lbnRhYmxlIHdpdGggYmFzZXRyYW5zZm9ybSwKKwkgIGV0Yy4KKwkgIChnc3RfaWRlbnRpdHlfdHJhbnNmb3JtKTogVW5yZWYgaW5idWYgdmlhIG1ha2Vfd3JpdGFibGUuIEZlZWJsZQorCSAgYXR0ZW1wdCBhdCBpbXBsZW1lbnRpbmcgdGhlIHN5bmMgcHJvcGVydHksIG5lZWRzIGFuIHVubG9jayBtZXRob2QuCisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYyAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3RyYW5zZm9ybV9jYXBzKToKKwkgIE5ldyBmdW5jLCBieSBkZWZhdWx0IHJldHVybnMgdGhlIHNhbWUgY2FwcyAodGhlIGlkZW50aXR5CisJICB0cmFuc2Zvcm1hdGlvbikuCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldGNhcHMpOiBVc2VzIHRyYW5zZm9ybV9jYXBzIHRvIHJldHVybgorCSAgc29tZXRoaW5nIHNlbnNpYmxlLgorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRjYXBzKTogQ29tcGxpY2F0ZWQgbG9naWMgdG8gZ2V0IGNhcHMgb24KKwkgIGJvdGggcGFkcywgZXZlbiBpZiB0aGV5IGFyZSBkaWZmZXJlbnQsIGFuZCB0byBjYWxsIHNldF9jYXBzIG9uY2UKKwkgIGZvciBldmVyeSB0aW1lIGJvdGggcGFkcyBnZXQgdGhlaXIgY2FwcyBzZXQuCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2hhbmRsZV9idWZmZXIpOiBHaXZlIHRoZSByZWYgdG8gdGhlIHRyYW5zZm9ybQorCSAgZnVuY3Rpb24uIEFsbG93cyBpbi1wbGFjZSBtb2RpZmljYXRpb24gb2YgdGhlIGJ1ZmZlci4KKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oICh0cmFuc2Zvcm1fY2Fwcyk6IE5ldyBjbGFzcyBtZXRob2QuCisJICBHaXZlbiBjYXBzIG9uIG9uZSBzaWRlLCB3aGF0IGNhbiBJIGRvIG9uIHRoZSBvdGhlci4KKwkgIChzZXRfY2Fwcyk6IFRha2UgdHdvIGNhcHMsIG9uZSBmb3IgZWFjaCBzaWRlIG9mIHRoZSBlbGVtZW50LgorCSAgKiBnc3QvZ3N0cGFkLmg6CisJICAqIGdzdC9nc3RwYWQuYyAoZ3N0X3BhZF9maXhhdGVfY2Fwcyk6IENoYW5nZSBwcm90b3R5cGUgdG8gbW9kaWZ5CisJICBjYXBzIGluIHBsYWNlLiBUaGlzIGlzIHNhZmUgYmVjYXVzZSB3ZSBjYW4gY2hlY2sgdGhlIG11dGFiaWxpdHkgb2YKKwkgIHRoZSBjYXBzLCBhbmQgYSBnb29kIGlkZWEgYmVjYXVzZSBmaXhhdGUgZnVuY3Rpb25zIGFyZSBqdXN0IGNhbGxlZAorCSAgYXMgYSBtYXR0ZXIgb2YgbGFzdCByZXNvcnQuIChOb3QgYWN0dWFsbHkgaW1wbGVtZW50ZWQuKQorCSAgKGdzdF9wYWRfc2V0X2NhcHMpOiBJZiB0aGUgY2FwcyB3ZSdyZSBzZXR0aW5nIGlzIGFjdHVhbGx5IHRoZSBzYW1lCisJICBhcyB0aGUgZXhpc3RpbmcgcGFkIGNhcHMsIGp1c3QgdXBkYXRlIHRoZSBwb2ludGVyIHdpdGhvdXQgY2FsbGluZworCSAgc2V0Y2Fwcy4gQXNzZXJ0IHRoYXQgY2FwcyBpcyBlaXRoZXIgTlVMTCBvciBmaXhlZCwgYXMgcGVyIHRoZQorCSAgZG9jcy4KKwkgICogZ3N0L2dzdGdob3N0cGFkLmM6IFVwZGF0ZSBmb3IgZml4YXRlIGNoYW5nZXMuCisKKzIwMDUtMDctMDEgMTQ6MzY6MTIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJICBnc3QvZ3N0cGFkLmM6IFB1dCB0aGUgbWluaV9vYmplY3QgaW50byBHVmFsdWUgYXMgYSBtaW5pX29iamVjdCwgbm90IGEgZ3BvaW50ZXIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDctMDIgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9lbWl0X2hhdmVfZGF0YV9zaWduYWwpOgorCSAgUHV0IHRoZSBtaW5pX29iamVjdCBpbnRvIEdWYWx1ZSBhcyBhIG1pbmlfb2JqZWN0LAorCSAgbm90IGEgZ3BvaW50ZXIuCisKKzIwMDUtMDctMDEgMTQ6MjA6MTkgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KKworCSAgZXhhbXBsZXMvcHdnL01ha2VmaWxlLmFtOiBGaXggYnVpbGRib3QgYWdhaW4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZXhhbXBsZXMvcHdnL01ha2VmaWxlLmFtOgorCSAgRml4IGJ1aWxkYm90IGFnYWluLgorCisyMDA1LTA3LTAxIDEzOjAxOjQ3ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+CisKKwkgIGRvY3MvcHdnL2J1aWxkaW5nLXRlc3RhcHAueG1sOiBBZGQgZXh0cmEgY2hlY2suCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9wd2cvYnVpbGRpbmctdGVzdGFwcC54bWw6CisJICBBZGQgZXh0cmEgY2hlY2suCisJICAqIGV4YW1wbGVzL3B3Zy9NYWtlZmlsZS5hbToKKwkgIEZpeCBidWlsZGJvdC4KKworMjAwNS0wNy0wMSAxMjo0MzowMyArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgorCisJICBFbmFibGUgYnVpbGRpbmcgdGhlIFBXRyBleGFtcGxlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICAqIGV4YW1wbGVzL01ha2VmaWxlLmFtOgorCSAgKiBleGFtcGxlcy9wd2cvTWFrZWZpbGUuYW06CisJICAqIGV4YW1wbGVzL3B3Zy9leHRyYWN0LnBsOgorCSAgRW5hYmxlIGJ1aWxkaW5nIHRoZSBQV0cgZXhhbXBsZXMuCisJICAqIGRvY3MvcHdnL2FkdmFuY2VkLWludGVyZmFjZXMueG1sOgorCSAgQWRkIFVSSSBpbnRlcmZhY2Ugc3R1Yi4KKwkgICogZG9jcy9wd2cvYWR2YW5jZWQtdHlwZXMueG1sOgorCSAgKiBkb2NzL3B3Zy9vdGhlci1hdXRvcGx1Z2dlci54bWw6CisJICAqIGRvY3MvcHdnL2FwcGVuZGl4LXBvcnRpbmcueG1sOgorCSAgKiBkb2NzL3B3Zy9wd2cueG1sOgorCSAgQWRkIHBvcnRpbmcgZ3VpZGUgKG1vc3RseSBzdHVicyksIHJlbW92ZSBhdXRvcGx1Z2dpbmcgKHNlZSBBRE0pLgorCSAgKiBkb2NzL3B3Zy9idWlsZGluZy1ib2lsZXIueG1sOgorCSAgKiBkb2NzL3B3Zy9idWlsZGluZy1jaGFpbmZuLnhtbDoKKwkgICogZG9jcy9wd2cvYnVpbGRpbmctcGFkcy54bWw6CisJICAqIGRvY3MvcHdnL2J1aWxkaW5nLXByb3BzLnhtbDoKKwkgICogZG9jcy9wd2cvYnVpbGRpbmctc3RhdGUueG1sOgorCSAgKiBkb2NzL3B3Zy9idWlsZGluZy10ZXN0YXBwLnhtbDoKKwkgIFVwZGF0ZSB0aGUgYnVpbGRpbmctKi54bWwgcGFydHMgZm9yIDAuOSBjaGFuZ2VzLiBBbGwgZXhhbXBsZXMKKwkgIGNvZGUgYmxvY2tzIGNvbXBpbGUgaW4gZXhhbXBsZXMvcHdnLyouCisKKzIwMDUtMDYtMzAgMTI6MzI6MTcgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KKworCSAgZG9jcy9tYW51YWwvOiBGaXggcGxheWJpbi9kZWNvZGViaW4gZXhhbXBsZXMsIHVwZGF0ZSBkb2NzIGEgYml0LCBtZW50aW9uIGJ1cyBpbnN0ZWFkIG9mIHNpZ25hbHMgaW4gdmFyaW91cyBwbGFjZXMsIG1lLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9tYW51YWwvYWR2YW5jZWQtYXV0b3BsdWdnaW5nLnhtbDoKKwkgICogZG9jcy9tYW51YWwvYXBwZW5kaXgtY2hlY2tsaXN0LnhtbDoKKwkgICogZG9jcy9tYW51YWwvYXBwZW5kaXgtaW50ZWdyYXRpb24ueG1sOgorCSAgKiBkb2NzL21hbnVhbC9oaWdobGV2ZWwtY29tcG9uZW50cy54bWw6CisJICBGaXggcGxheWJpbi9kZWNvZGViaW4gZXhhbXBsZXMsIHVwZGF0ZSBkb2NzIGEgYml0LCBtZW50aW9uIGJ1cworCSAgaW5zdGVhZCBvZiBzaWduYWxzIGluIHZhcmlvdXMgcGxhY2VzLCBtZW50aW9uIGttcGxheWVyIGFuZAorCSAga2FmZmVpbmUgc2luY2UgdGhleSBoYXZlIGEgd29ya2luZyBHU3RyZWFtZXIgYmFja2VuZCBpbiB0aGUgS0RFCisJICBzZWN0aW9uLgorCisyMDA1LTA2LTMwIDEyOjI2OjI2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2dzdHF1ZXVlLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6CisJICBkZWJ1ZyBkaXNhYmxlIGZpeGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGRlYnVnIGRpc2FibGUgZml4ZXMKKworMjAwNS0wNi0zMCAxMjoxODoxOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgQWRkZWQgQ0hBTkdFUy0wLjkgZG9jLCB1cGRhdGVkIHN0YXR1cyBvZiBvdGhlciBkb2NzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIENIQU5HRVMtMC45OgorCSAgKiBkb2NzL2Rlc2lnbi9kcmFmdC1naG9zdHBhZHMudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9kcmFmdC1wdXNoLXB1bGwudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9kcmFmdC1xdWVyeS50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtcXVlcnkudHh0OgorCSAgQWRkZWQgQ0hBTkdFUy0wLjkgZG9jLCB1cGRhdGVkIHN0YXR1cyBvZiBvdGhlciBkb2NzLgorCSAgKiBnc3QvZ3N0cXVlcnkuaDoKKwkgIFJlbW92ZSAiaG1tIiBtYWNybworCisyMDA1LTA2LTMwIDEyOjE0OjQ3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNlc2luay4qOiBTb21lIHR3ZWFrcywgb25seSBFT1MgYW5kIGEgYnVmZmVyIGNvbXBsZXRlIGEgcHJlcm9sbC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19wcmVyb2xsX3F1ZXVlX2VtcHR5KSwKKwkgIChnc3RfYmFzZV9zaW5rX3ByZXJvbGxfcXVldWVfZmx1c2gpLCAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwKKwkgIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJICBTb21lIHR3ZWFrcywgb25seSBFT1MgYW5kIGEgYnVmZmVyIGNvbXBsZXRlIGEgcHJlcm9sbC4KKworMjAwNS0wNi0zMCAxMTozOTozNCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0Z2hvc3RwYWQuYyAoZ3N0X2dob3N0X3BhZF9kb19hY3RpdmF0ZV9wdXNoKTogUHJveHkgYWN0aXZhdGVfcHVzaCBkb3duIHRvIHRoZSBpbnRlcm5hbCBwYWQgYXMgd2VsbC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNi0zMCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdGdob3N0cGFkLmMgKGdzdF9naG9zdF9wYWRfZG9fYWN0aXZhdGVfcHVzaCk6IFByb3h5CisJICBhY3RpdmF0ZV9wdXNoIGRvd24gdG8gdGhlIGludGVybmFsIHBhZCBhcyB3ZWxsLgorCisyMDA1LTA2LTMwIDEwOjU5OjM0ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+CisKKwkgIGdzdC9nc3R0YWdpbnRlcmZhY2UuYzogU29tZSBkb2N1bWVudGF0aW9uIGZpeGVzICgjMzA3Mzk0IGFuZCAjMzA3Mzk3KS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUmV2aWV3ZWQgYnk6ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgorCSAgKiBnc3QvZ3N0dGFnaW50ZXJmYWNlLmM6CisJICBTb21lIGRvY3VtZW50YXRpb24gZml4ZXMgKCMzMDczOTQgYW5kICMzMDczOTcpLgorCisyMDA1LTA2LTMwIDEwOjIzOjE2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogY2hlY2svZ3N0Ly5naXRpZ25vcmU6CisJKiBjaGVjay9zdGF0ZXMvLmdpdGlnbm9yZToKKwkqIHRlc3RzL2NoZWNrL2dzdC8uZ2l0aWdub3JlOgorCSAgaWdub3JlIG1vcmUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgaWdub3JlIG1vcmUKKworMjAwNS0wNi0zMCAxMDoyMjoxNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGNoZWNrL01ha2VmaWxlLmFtOgorCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06CisJICBnbyBiYWNrIHRvIHRoZSBjaXJjdWxhciBkZXBlbmRlbmN5IGZvciBub3cKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZ28gYmFjayB0byB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeSBmb3Igbm93CisKKzIwMDUtMDYtMzAgMTA6MTA6MDAgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KKworCSAgZ3N0L2dzdHZhbHVlLmM6IEZpeCBtZW1sZWFrICgjMzA5MTI1KS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUmV2aWV3ZWQgYnk6ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgorCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF92YWx1ZV9pbnRlcnNlY3RfbGlzdCk6CisJICBGaXggbWVtbGVhayAoIzMwOTEyNSkuCisKKzIwMDUtMDYtMzAgMDk6NTk6MjcgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KKworCSAgZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWw6IEZpeCBmYWtlc3JjIGV4YW1wbGUgdG8gY29tcGlsZTsgZG9lc24ndCB3b3JrLCBidWcgc29tZXdoZXJlLi4uPworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWRhdGFhY2Nlc3MueG1sOgorCSAgRml4IGZha2VzcmMgZXhhbXBsZSB0byBjb21waWxlOyBkb2Vzbid0IHdvcmssIGJ1ZyBzb21ld2hlcmUuLi4/CisJICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1wYWRzLnhtbDoKKwkgIEFkZCByZWZlcmVuY2UgZm9yIGZpbHRlcmVkIGNhcHMgdG8gYWJvdmUgY2hhcHRlci4KKworMjAwNS0wNi0zMCAwOTo0MToxNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJpbi5jOiBMYW1lIGF0dGVtcHQgYXQgbWFraW5nIHRoZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gYSBiaXQgbW9yZSByZWFkYWJsZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChjbGVhcl9xdWV1ZSksIChyZW1vdmVfYWxsX2Zyb21fcXVldWUpLAorCSAgKGdzdF9iaW5fY2hhbmdlX3N0YXRlKToKKwkgIExhbWUgYXR0ZW1wdCBhdCBtYWtpbmcgdGhlIHN0YXRlIGNoYW5nZSBmdW5jdGlvbiBhIGJpdAorCSAgbW9yZSByZWFkYWJsZS4KKworMjAwNS0wNi0zMCAwOTozMzo0NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9kZXNpZ24vOiBTb21lIG1vcmUgdHdlZWtzIGFuZCBhZGRpdGlvbnMgdG8gdGhlIGRvY3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1jbG9ja3MudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtc2luay50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtZXZlbnRzLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1wcmVyb2xsLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1zdGF0ZXMudHh0OgorCSAgU29tZSBtb3JlIHR3ZWVrcyBhbmQgYWRkaXRpb25zIHRvIHRoZSBkb2NzLgorCisyMDA1LTA2LTMwIDA5OjIzOjU0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvOiBSZW1vdmVkIGF0b21pYyBvcGVyYXRpb25zLCB1c2UgZXhpc3RpbmcgTE9DSy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChfZ3N0X2RvX3Bhc3NfZGF0YV9hY2N1bXVsYXRvciksCisJICAoZGVmYXVsdF9oYXZlX2RhdGEpLCAoZ3N0X3BhZF9jbGFzc19pbml0KSwgKGdzdF9wYWRfaW5pdCksCisJICAoZ3N0X3BhZF9lbWl0X2hhdmVfZGF0YV9zaWduYWwpLCAoZ3N0X3BhZF9jaGFpbiksIChnc3RfcGFkX3B1c2gpLAorCSAgKGdzdF9wYWRfY2hlY2tfcHVsbF9yYW5nZSksIChnc3RfcGFkX2dldF9yYW5nZSksCisJICAoZ3N0X3BhZF9wdWxsX3JhbmdlKSwgKGdzdF9wYWRfcHVzaF9ldmVudCksIChnc3RfcGFkX3NlbmRfZXZlbnQpOgorCSAgKiBnc3QvZ3N0cGFkLmg6CisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X2F0b21pY19pbnRfc2V0KSwgKGdzdF9wYWRfYWRkX2RhdGFfcHJvYmUpLAorCSAgKGdzdF9wYWRfYWRkX2V2ZW50X3Byb2JlKSwgKGdzdF9wYWRfYWRkX2J1ZmZlcl9wcm9iZSksCisJICAoZ3N0X3BhZF9yZW1vdmVfZGF0YV9wcm9iZSksIChnc3RfcGFkX3JlbW92ZV9ldmVudF9wcm9iZSksCisJICAoZ3N0X3BhZF9yZW1vdmVfYnVmZmVyX3Byb2JlKToKKwkgIFJlbW92ZWQgYXRvbWljIG9wZXJhdGlvbnMsIHVzZSBleGlzdGluZyBMT0NLLgorCSAgTW92ZSBleGNlcHRpb24gaGFuZGxpbmcgb3V0IG9mIG1haW4gY29kZSBwYXRoLgorCisyMDA1LTA2LTMwIDA3OjQ1OjU1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogY2hlY2svTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgIGRyb3AgY2lyY3VsYXIgcmVmZXJlbmNlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGRyb3AgY2lyY3VsYXIgcmVmZXJlbmNlCisKKzIwMDUtMDYtMjkgMTk6MjA6MDcgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KKworCSAgZ3N0L2dzdHBhZC5jOiBGaXggYWNjdW11bGF0b3IsIGFkZCBkZWZhdWx0IHZhbHVlIGJ5IHVzaW5nIF9lbWl0digpIGluc3RlYWQgb2YgX2VtaXQoKSBmb3Igc2lnbmFsIGVtaXNzaW9uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKF9nc3RfZG9fcGFzc19kYXRhX2FjY3VtdWxhdG9yKSwKKwkgIChzaWxseV9yZXR1cm5fdHJ1ZV9mdW5jdGlvbiksIChnc3RfcGFkX2NsYXNzX2luaXQpLAorCSAgKGdzdF9wYWRfZW1pdF9oYXZlX2RhdGFfc2lnbmFsKSwgKGdzdF9wYWRfY2hhaW4pLCAoZ3N0X3BhZF9wdXNoKSwKKwkgIChnc3RfcGFkX2dldF9yYW5nZSksIChnc3RfcGFkX3B1bGxfcmFuZ2UpLCAoZ3N0X3BhZF9wdXNoX2V2ZW50KSwKKwkgIChnc3RfcGFkX3NlbmRfZXZlbnQpOgorCSAgRml4IGFjY3VtdWxhdG9yLCBhZGQgZGVmYXVsdCB2YWx1ZSBieSB1c2luZyBfZW1pdHYoKSBpbnN0ZWFkCisJICBvZiBfZW1pdCgpIGZvciBzaWduYWwgZW1pc3Npb24uCisKKzIwMDUtMDYtMjkgMTY6NTc6NTkgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KKworCSAgQWRkIHByb2JlIGV4YW1wbGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWw6CisJICAqIGV4YW1wbGVzL21hbnVhbC9NYWtlZmlsZS5hbToKKwkgIEFkZCBwcm9iZSBleGFtcGxlLgorCSAgKiBnc3QvZ3N0cGFkLmM6IChfZ3N0X2RvX3Bhc3NfZGF0YV9hY2N1bXVsYXRvcik6CisJICBNYWtlIHdvcmsgKD8/KS4KKworMjAwNS0wNi0yOSAxNjo0NTo1OCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6CisJICBmaXggZm9yIHBwYywgaG9wZWZ1bGx5CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGZpeCBmb3IgcHBjLCBob3BlZnVsbHkKKworMjAwNS0wNi0yOSAxNjoxMToxMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IFNpbXBsaWZ5IGNvZGUgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGhhbmRsZSBzaG9ydCB3cml0ZXMgYW5kIHJldHVybiBHU1RfRkxPV19FUlJPUiBpZiBhLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IChnc3RfZmlsZXNpbmtfcmVuZGVyKToKKwkgIFNpbXBsaWZ5IGNvZGUgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGhhbmRsZSBzaG9ydAorCSAgd3JpdGVzIGFuZCByZXR1cm4gR1NUX0ZMT1dfRVJST1IgaWYgYW4gZXJyb3Igb2NjdXJlZC4KKworMjAwNS0wNi0yOSAxNjowNToyNiArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgorCisJICBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOiBSZW1vdmUgcHJvYmVzIG1vcmUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKKwkgIFJlbW92ZSBwcm9iZXMgbW9yZS4KKworMjAwNS0wNi0yOSAxNTo1MToyNSArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgorCisJICBSZW1vdmUgb2xkIHByb2JlcywgYWRkIG5ldyBnLXNpZ25hbC1iYXNlZCBwcm9iZXMgYW5kIHNvbWUgdXRpbGl0eSBmdW5jdGlvbnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkgICogZG9jcy9nc3QvdG1wbC9nc3RwYWQuc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9nc3Rwcm9iZS5zZ21sOgorCSAgKiBnc3QvTWFrZWZpbGUuYW06CisJICAqIGdzdC9nc3RwYWQuYzogKF9nc3RfZG9fcGFzc19kYXRhX2FjY3VtdWxhdG9yKSwKKwkgIChnc3RfcGFkX2NsYXNzX2luaXQpLCAoZ3N0X3BhZF9pbml0KSwgKGdzdF9wYWRfY2hhaW4pLAorCSAgKGdzdF9wYWRfcHVzaCksIChnc3RfcGFkX2dldF9yYW5nZSksIChnc3RfcGFkX3B1bGxfcmFuZ2UpLAorCSAgKGdzdF9wYWRfcHVzaF9ldmVudCksIChnc3RfcGFkX3NlbmRfZXZlbnQpOgorCSAgKiBnc3QvZ3N0cGFkLmg6CisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X3BhZF9hZGRfZGF0YV9wcm9iZSksCisJICAoZ3N0X3BhZF9hZGRfZXZlbnRfcHJvYmUpLCAoZ3N0X3BhZF9hZGRfYnVmZmVyX3Byb2JlKSwKKwkgIChnc3RfcGFkX3JlbW92ZV9kYXRhX3Byb2JlKSwgKGdzdF9wYWRfcmVtb3ZlX2V2ZW50X3Byb2JlKSwKKwkgIChnc3RfcGFkX3JlbW92ZV9idWZmZXJfcHJvYmUpOgorCSAgKiBnc3QvZ3N0dXRpbHMuaDoKKwkgIFJlbW92ZSBvbGQgcHJvYmVzLCBhZGQgbmV3IGctc2lnbmFsLWJhc2VkIHByb2JlcyBhbmQgc29tZSB1dGlsaXR5CisJICBmdW5jdGlvbnMuCisKKzIwMDUtMDYtMjkgMTU6MTc6MjUgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisKKwkgIGdzdC86IE1vdmVkIGdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX1tzaW5rfHNyY11fY2FwcygpIHRvIGdzdHV0aWxzIGFuZCBhZGRlZCB0aGUgZGVmaW5pdGlvbiB0byB0aGUgaGVhZGVyIGZpbGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6CisJICAqIGdzdC9nc3R1dGlscy5oOgorCSAgKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIE1vdmVkIGdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX1tzaW5rfHNyY11fY2FwcygpIHRvIGdzdHV0aWxzIGFuZCBhZGRlZAorCSAgdGhlIGRlZmluaXRpb24gdG8gdGhlIGhlYWRlciBmaWxlLgorCisyMDA1LTA2LTI5IDE0OjU2OjA4ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGRvY3MvZ3N0L01ha2VmaWxlLmFtIChzY2FuLWJ1aWxkLnN0YW1wKTogVG90YWxseSBvbmx5IGNoZWNrIHBsdWdpbnMgZnJvbSB0aGUgc291cmNlIGRpcmVjdG9yeS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNi0yOSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZG9jcy9nc3QvTWFrZWZpbGUuYW0gKHNjYW4tYnVpbGQuc3RhbXApOiBUb3RhbGx5IG9ubHkgY2hlY2sKKwkgIHBsdWdpbnMgZnJvbSB0aGUgc291cmNlIGRpcmVjdG9yeS4KKworMjAwNS0wNi0yOSAxNDo1Mjo0NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZG9jcy9nc3QvdG1wbC86IFNvbWUgZml4aW5ncyBmb3IgYmxhbnRlbnRseSB3cm9uZyB0ZXh0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZ3N0L3RtcGwvZ3N0YnVmZmVyLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvZ3N0Y2xvY2suc2dtbDoKKwkgIFNvbWUgZml4aW5ncyBmb3IgYmxhbnRlbnRseSB3cm9uZyB0ZXh0LgorCisyMDA1LTA2LTI5IDEyOjQwOjM5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2dzdC5jOgorCSAgbG9naWMgd2FzIHJldmVyc2VkLCBkdWgKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgbG9naWMgd2FzIHJldmVyc2VkLCBkdWgKKworMjAwNS0wNi0yOSAxMjoyNTowNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGFkZCBBIEdTVF9QTFVHSU5fUEFUSF9PTkxZIGVudiB2YXI7IGlmIGl0IGlzIHNldCwgaXQgd2lsbCBvbmx5IHNjYW4gdGhlIEdTVF9QTFVHSU5fUEFUSCBsb2NhdGlvbnMsIGFuZCBub3QgYWRkIHN5c3RlbS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL01ha2VmaWxlLmFtOgorCSAgKiBnc3QvZ3N0LmM6IChhZGRfcGF0aF9mdW5jKSwgKGluaXRfcHJlKToKKwkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6IChnc3RfcmVnaXN0cnlfYWRkX3BhdGgpOgorCSAgYWRkIEEgR1NUX1BMVUdJTl9QQVRIX09OTFkgZW52IHZhcjsgaWYgaXQgaXMgc2V0LCBpdCB3aWxsCisJICBvbmx5IHNjYW4gdGhlIEdTVF9QTFVHSU5fUEFUSCBsb2NhdGlvbnMsIGFuZCBub3QgYWRkCisJICBzeXN0ZW0gbG9jYXRpb25zCisKKzIwMDUtMDYtMjkgMTI6MjM6MzUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSogZG9jcy9nc3QvdG1wbC9nc3RiYXNlc3JjLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGVsZW1lbnQuc2dtbDoKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSogZ3N0L2dzdGV2ZW50LmM6CisJKiBnc3QvZ3N0dXRpbHMuYzoKKwkgIGRvYyBmaXhlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBkb2MgZml4ZXMKKworMjAwNS0wNi0yOSAxMjowMjoxMyArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgorCisJICBkb2NzL21hbnVhbC9hZHZhbmNlZC1hdXRvcGx1Z2dpbmcueG1sOiBGaXggYXV0b3BsdWdnaW5nIGV4YW1wbGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9tYW51YWwvYWR2YW5jZWQtYXV0b3BsdWdnaW5nLnhtbDoKKwkgIEZpeCBhdXRvcGx1Z2dpbmcgZXhhbXBsZS4KKworMjAwNS0wNi0yOSAxMTo0NjoxNiArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgorCisJICBkb2NzL21hbnVhbC86IFRyeSB0byBnZXQgYXV0b3BsdWdnaW5nIHdvcmtpbmcsIGZpeCB0eXBlIGRldGVjdGlvbi4gRml4IHRleHQgaW4gaGVsbG8td29ybGQgaW1hZ2UuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9tYW51YWwvYWR2YW5jZWQtYXV0b3BsdWdnaW5nLnhtbDoKKwkgICogZG9jcy9tYW51YWwvbWltZS13b3JsZC5maWc6CisJICBUcnkgdG8gZ2V0IGF1dG9wbHVnZ2luZyB3b3JraW5nLCBmaXggdHlwZSBkZXRlY3Rpb24uIEZpeCB0ZXh0CisJICBpbiBoZWxsby13b3JsZCBpbWFnZS4KKworMjAwNS0wNi0yOSAxMToxMDo0NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogU21hbGwgZGVidWcgbGluZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwKKwkgIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6CisJICBTbWFsbCBkZWJ1ZyBsaW5lLgorCSAgKiBnc3QvZ3N0Y2xvY2suaDoKKwkgIG1hcCBTSUdOQUwgYW5kIEJST0FEQ0FTVCB0byB0aGUgcmlnaHQgZnVuY3Rpb24uCisJICAqIGdzdC9nc3RvYmplY3QuaDoKKwkgIFJlbW92ZSByZWR1bmRhbnQgYnJhY2VzLgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3NldF9jYXBzKToKKwkgIERvbid0IGNhbGwgc2V0Y2FwcyBmdW5jdGlvbiB3aGVuIHJlc2V0aW5nIGNhcHMgdG8gTlVMTC4KKwkgICogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6IChnc3Rfc3lzdGVtX2Nsb2NrX2Rpc3Bvc2UpLAorCSAgKGdzdF9zeXN0ZW1fY2xvY2tfYXN5bmNfdGhyZWFkKSwgKGdzdF9zeXN0ZW1fY2xvY2tfaWRfd2FpdF9hc3luYyksCisJICAoZ3N0X3N5c3RlbV9jbG9ja19pZF91bnNjaGVkdWxlKToKKwkgIFVzZSBCUk9BRENBU1QgYXMgdGhpcyBpcyB3aGF0IHdlIGRvLgorCisyMDA1LTA2LTI5IDEwOjI0OjA4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiBXZSBhcmUgYWN0dWFsbHkgcHJlcm9sbGluZyBiZWZvcmUgY29tbWl0aW5nIHRoZSBzdGF0ZSBjaGFuZ2UuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfaGFuZGxlX29iamVjdCk6CisJICBXZSBhcmUgYWN0dWFsbHkgcHJlcm9sbGluZyBiZWZvcmUgY29tbWl0aW5nIHRoZSBzdGF0ZQorCSAgY2hhbmdlLgorCisyMDA1LTA2LTI5IDA5OjI1OjUxICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+CisKKwkgIGRvY3MvbWFudWFsLzogVXBkYXRlICh1bnRpbCB0aHJlYWRzL3NjaGVkdWxpbmcpIEFwcGxpY2F0aW9uIERldmVsb3BtZW50IE1hbnVhbDsgcmVtb3ZlIEdzdFRocmVhZCwgYWRkIEdzdEJ1cywgYWRkIHNpbS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWNsb2Nrcy54bWw6CisJICAqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWludGVyZmFjZXMueG1sOgorCSAgKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1tZXRhZGF0YS54bWw6CisJICAqIGRvY3MvbWFudWFsL2FkdmFuY2VkLXBvc2l0aW9uLnhtbDoKKwkgICogZG9jcy9tYW51YWwvYWR2YW5jZWQtc2NoZWR1bGVycy54bWw6CisJICAqIGRvY3MvbWFudWFsL2FkdmFuY2VkLXRocmVhZHMueG1sOgorCSAgKiBkb2NzL21hbnVhbC9hcHBlbmRpeC1wb3J0aW5nLnhtbDoKKwkgICogZG9jcy9tYW51YWwvYmFzaWNzLWJpbnMueG1sOgorCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtYnVzLnhtbDoKKwkgICogZG9jcy9tYW51YWwvYmFzaWNzLWVsZW1lbnRzLnhtbDoKKwkgICogZG9jcy9tYW51YWwvYmFzaWNzLWhlbGxvd29ybGQueG1sOgorCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtcGFkcy54bWw6CisJICAqIGRvY3MvbWFudWFsL2hpZ2hsZXZlbC1jb21wb25lbnRzLnhtbDoKKwkgICogZG9jcy9tYW51YWwvbWFudWFsLnhtbDoKKwkgICogZG9jcy9tYW51YWwvdGhyZWFkLmZpZzoKKwkgIFVwZGF0ZSAodW50aWwgdGhyZWFkcy9zY2hlZHVsaW5nKSBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBNYW51YWw7CisJICByZW1vdmUgR3N0VGhyZWFkLCBhZGQgR3N0QnVzLCBhZGQgc2ltcGxlIHBvcnRpbmcgY2hlY2tsaXN0LCBhZGQKKwkgIGRvY3VtZW50YXRpb24gZm9yIHRhZyB3cml0aW5nLCBjbG9ja3MsIG1ha2UgYWxsIGV4YW1wbGVzIHVudGlsIHRoaXMKKwkgIHBhcnQgY29tcGlsZSBhbmQgcnVuLgorCSAgKiBleGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuYW06CisJICBVcGRhdGUgZnJvbSBjaGFuZ2VzIHRvIEFwcGxpY2F0aW9uIERldmVsb3BtZW50IE1hbnVhbDsgYWRkIGJ1cworCSAgZXhhbXBsZSwgcmVtb3ZlIHRocmVhZCBleGFtcGxlLgorCisyMDA1LTA2LTI4IDE5OjQ1OjI2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YnVzLmM6IEFkZCBkZWJ1Z2dpbmcgbWVzc2FnZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJ1cy5jOiAoZ3N0X2J1c19wb3N0KSwgKGdzdF9idXNfaGF2ZV9wZW5kaW5nKSwKKwkgIChnc3RfYnVzX3NldF9mbHVzaGluZyksIChnc3RfYnVzX3BvcCksIChnc3RfYnVzX3BlZWspLAorCSAgKGdzdF9idXNfc291cmNlX2Rpc3BhdGNoKToKKwkgIEFkZCBkZWJ1Z2dpbmcgbWVzc2FnZXMuCisJICBNYWtlIGludGVybmFsIG1ldGhvZHMgc3RhdGljLgorCSAgSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBidXMgaXMgZmx1c2hlZCBpbiB0aGUgaGFuZGxlci4KKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2dldF9idXMpOgorCSAgRml4IHJlZmNvdW50IGluIF9nZXRfYnVzKCk7CisJICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX2NoYW5nZV9zdGF0ZSksCisJICAoZ3N0X3BpcGVsaW5lX2dldF9jbG9ja19mdW5jKToKKwkgIENsb2NrIHJlZmNvdW50aW5nIGZpeGVzLgorCSAgSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHByZXJvbGwgdGltZWQgb3V0IG1vcmUgZ3JhY2VmdWxseS4KKwkgICogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6IChnc3Rfc3lzdGVtX2Nsb2NrX2Rpc3Bvc2UpOgorCSAgQ2xlYW4gdXAgdGhlIGludGVybmFsIHRocmVhZCBpbiBkaXNwb3NlLiBUaGlzIGlzIG5lZWRlZAorCSAgZm9yIHN1YmNsYXNzZXMgdGhhdCBhY3R1YWxseSBnZXQgZGlzcG9zZWQuCisJICAqIGdzdC9zY2hlZHVsZXJzL3RocmVhZHNjaGVkdWxlci5jOgorCSAgKGdzdF90aHJlYWRfc2NoZWR1bGVyX2NsYXNzX2luaXQpLCAoZ3N0X3RocmVhZF9zY2hlZHVsZXJfZnVuYyksCisJICAoZ3N0X3RocmVhZF9zY2hlZHVsZXJfZGlzcG9zZSk6CisJICBGcmVlIHRocmVhZCBwb29sIGluIGRpc3Bvc2UuCisKKzIwMDUtMDYtMjggMTY6NTc6MjcgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgdGVzdHMvbmV0d29yay1jbG9jay11dGlscy5zY20gKGRlYnVnLCBwcmludC1ldmVudCk6IE5ldyB1dGlscy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNi0yOCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogdGVzdHMvbmV0d29yay1jbG9jay11dGlscy5zY20gKGRlYnVnLCBwcmludC1ldmVudCk6IE5ldyB1dGlscy4KKwkgICogdGVzdHMvbmV0d29yay1jbG9jay5zY20gKCpkZWJ1ZyosICp3aXRoLWdyYXBoKik6IE5ldyBwYXJhbWV0ZXJzLgorCSAgKCpwYWNrZXQtbG9zcyopOiBVbmlmaWVkIGxvc3MgcHJvYmFiaWxpdHkuCisJICAobmV0d29yay10aW1lKTogUmVwb3J0IG91dC1vZi1iYW5kIGV2ZW50cy4KKwkgICogdGVzdHMvcGxvdC1kYXRhOiBBZGQgc3VwcG9ydCBmb3Igb3V0LW9mLWJhbmQgZXZlbnRzLiBIYWNrIGl0CisJICBpbnRvIHRoaXMgc2NyaXB0IGluc3RlYWQgb2YgcGFzc2luZyBpdCBkb3duIHRoZSBwaXBlOyBzaG91bGQgZml4CisJICB0aGlzIGxhdGVyLgorCisyMDA1LTA2LTI4IDE1OjM2OjM3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL2dzdC86IERvY3MgZml4ZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzOgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdGJhc2VzcmMuc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9nc3RwYWQuc2dtbDoKKwkgIERvY3MgZml4ZXMuCisKKzIwMDUtMDYtMjggMTM6NDA6MTIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RnaG9zdHBhZC5jOiBDb3JyZWN0bHkgcHJveHkgdGhlIGNoZWNrX3B1bGxfcmFuZ2UgZnVuY3Rpb24uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGdob3N0cGFkLmM6IChnc3RfcHJveHlfcGFkX2RvX2J1ZmZlcmFsbG9jKSwKKwkgIChnc3RfcHJveHlfcGFkX2RvX2NoZWNrZ2V0cmFuZ2UpLCAoZ3N0X3Byb3h5X3BhZF9kb19hY2NlcHRjYXBzKSwKKwkgIChnc3RfcHJveHlfcGFkX2RvX2ZpeGF0ZWNhcHMpOgorCSAgQ29ycmVjdGx5IHByb3h5IHRoZSBjaGVja19wdWxsX3JhbmdlIGZ1bmN0aW9uLgorCisyMDA1LTA2LTI4IDEyOjQ1OjIxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6CisJKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6CisJICBmaXggZmFrZSBlbGVtZW50cyB0b28KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZml4IGZha2UgZWxlbWVudHMgdG9vCisKKzIwMDUtMDYtMjggMTI6MDE6NDkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKKwkqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkqIGdzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJICBkaWQgcy9iYXNlcyhyYy9pbmspXy9iYXNlX3MocmMvaW5rKV8vOyB3aW0gd2FudHMgdG8gcmVtb3ZlIGJhc2UgY29tcGxldGVseSwgYnV0IHRoYXQncyBmb3IgbGF0ZXIKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZGlkIHMvYmFzZXMocmMvaW5rKV8vYmFzZV9zKHJjL2luaylfLzsgd2ltIHdhbnRzIHRvIHJlbW92ZSBiYXNlIGNvbXBsZXRlbHksIGJ1dCB0aGF0J3MgZm9yIGxhdGVyCisKKzIwMDUtMDYtMjggMTE6NDg6NTcgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgdGVzdHMvbmV0d29yay1jbG9jay5zY206IFJlbW92ZWQgbmVlZCBmb3Igc2xpYi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNi0yOCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogdGVzdHMvbmV0d29yay1jbG9jay5zY206IFJlbW92ZWQgbmVlZCBmb3Igc2xpYi4KKworMjAwNS0wNi0yOCAxMTozNjo0MyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0LzogVGhlIGRlcHJlY2F0ZWQgcGFkIGxvb3AgZnVuY3Rpb24gaXMgcmVtb3ZlZCBub3cuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlc2lua19zZXRfcGFkX2Z1bmN0aW9ucyksCisJICAoZ3N0X2Jhc2VzaW5rX3ByZXJvbGxfcXVldWVfZmx1c2gpOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZXNyY19zZXRfZGF0YWZsb3dfZnVuY3MpOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0dGVlLmM6IChnc3RfdGVlX3VwZGF0ZV9wYWRfZnVuY3Rpb25zKToKKwkgICogZ3N0L2dzdGdob3N0cGFkLmM6IChnc3RfcHJveHlfcGFkX2RvX2J1ZmZlcmFsbG9jKSwKKwkgIChnc3RfcHJveHlfcGFkX2RvX2FjY2VwdGNhcHMpLCAoZ3N0X3Byb3h5X3BhZF9kb19maXhhdGVjYXBzKSwKKwkgIChnc3RfcHJveHlfcGFkX3NldF9wcm9wZXJ0eSk6CisJICAqIGdzdC9nc3RwYWQuYzoKKwkgICogZ3N0L2dzdHBhZC5oOgorCSAgKiBnc3QvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9pbml0KToKKwkgIFRoZSBkZXByZWNhdGVkIHBhZCBsb29wIGZ1bmN0aW9uIGlzIHJlbW92ZWQgbm93LgorCisyMDA1LTA2LTI4IDExOjMzOjIyICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIHRlc3RzL25ldHdvcmstY2xvY2suc2NtICgqdGltZW91dCosICpzZW5kLWxvc3MqLCAqcmVjdi1sb3NzKik6IE5ldyBwYXJhbWV0ZXJzLCBzaW11bGF0ZSBuZXR3b3JrIHBhY2tldCBsb3NzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTA2LTI4ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiB0ZXN0cy9uZXR3b3JrLWNsb2NrLnNjbSAoKnRpbWVvdXQqLCAqc2VuZC1sb3NzKiwgKnJlY3YtbG9zcyopOgorCSAgTmV3IHBhcmFtZXRlcnMsIHNpbXVsYXRlIG5ldHdvcmsgcGFja2V0IGxvc3MuCisJICAqIHRlc3RzL25ldHdvcmstY2xvY2stdXRpbHMuc2NtOiBJbml0aWFsaXplIHRoZSBSTkcuCisKKzIwMDUtMDYtMjggMTE6MDI6MTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IEZsdXNoaW5nIHRoZSBwcmVyb2xsIHF1ZXVlIGFsd2F5cyBuZWVkcyB0byB1bmxvY2sgdGhlIHdhaXRlcnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlc2lua19wcmVyb2xsX3F1ZXVlX2ZsdXNoKSwKKwkgIChnc3RfYmFzZXNpbmtfZXZlbnQpLCAoZ3N0X2Jhc2VzaW5rX2RlYWN0aXZhdGUpOgorCSAgRmx1c2hpbmcgdGhlIHByZXJvbGwgcXVldWUgYWx3YXlzIG5lZWRzIHRvIHVubG9jayB0aGUgd2FpdGVycy4KKworMjAwNS0wNi0yOCAxMDo0NTo0OCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKworCSAgZ3N0L2dzdHBpcGVsaW5lLmM6IFdoZWVuIGEgc2VlayB3YXMgc3VjY2Vzc2Z1bCBvbiBhIHBpcGVsaW5lLCBzZXQgdGhlIHN0cmVhbV90aW1lIHRvIHRoZSBzZWVrIG9mZnNldCBpbiBvcmRlciB0byBoYXZlLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBpcGVsaW5lLmM6IChnc3RfcGlwZWxpbmVfc2VuZF9ldmVudCk6CisJICBXaGVlbiBhIHNlZWsgd2FzIHN1Y2Nlc3NmdWwgb24gYSBwaXBlbGluZSwgc2V0IHRoZSBzdHJlYW1fdGltZSB0byB0aGUKKwkgIHNlZWsgb2Zmc2V0IGluIG9yZGVyIHRvIGhhdmUgYSBzeW5jaHJvbml6ZWQgc3RyZWFtX3RpbWUuCisKKzIwMDUtMDYtMjggMTA6Mzc6MjQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RnaG9zdHBhZC5jOiBDYWxsIHdyYXBwZXIgZnVuY3Rpb24gaW5zdGVhZCBvZiBqdXN0IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzLiBUaGlzIHRha2VzIGNhcmUgb2YgYW55IGxvY2tpbi4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RnaG9zdHBhZC5jOiAoZ3N0X3Byb3h5X3BhZF9kb19idWZmZXJhbGxvYyksCisJICAoZ3N0X3Byb3h5X3BhZF9kb19nZXRyYW5nZSksIChnc3RfcHJveHlfcGFkX2RvX2NoZWNrZ2V0cmFuZ2UpLAorCSAgKGdzdF9wcm94eV9wYWRfZG9fZ2V0Y2FwcyksIChnc3RfcHJveHlfcGFkX2RvX2FjY2VwdGNhcHMpLAorCSAgKGdzdF9wcm94eV9wYWRfZG9fZml4YXRlY2Fwcyk6CisJICBDYWxsIHdyYXBwZXIgZnVuY3Rpb24gaW5zdGVhZCBvZiBqdXN0IGNhbGxpbmcgdGhlIGZ1bmN0aW9uCisJICBwb2ludGVycy4gVGhpcyB0YWtlcyBjYXJlIG9mIGFueSBsb2NraW5nIGFuZCB3aGF0bW9yZS4KKworMjAwNS0wNi0yOCAxMDoyODozMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHBhZC4qOiBDT05ORUNURUQgLT4gTElOS0VELgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfYWxsb2NfYnVmZmVyKSwgKGdzdF9wYWRfcHVzaCksCisJICAoZ3N0X3BhZF9wdWxsX3JhbmdlKToKKwkgICogZ3N0L2dzdHBhZC5oOgorCSAgQ09OTkVDVEVEIC0+IExJTktFRC4KKworMjAwNS0wNi0yOCAwOTo1OTowMSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICAqLmM6IERvbid0IGNhc3QgdG8gR1NUX09CSkVDVCB3aGVuIHJlZmZpbmcgb3IgdW5yZWZmaW5nLiBMYXJnZSBzb3VyY2UtbXVuZ2luZyBjb21taXQhISEKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNi0yOCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogKi5jOiBEb24ndCBjYXN0IHRvIEdTVF9PQkpFQ1Qgd2hlbiByZWZmaW5nIG9yIHVucmVmZmluZy4gTGFyZ2UKKwkgIHNvdXJjZS1tdW5naW5nIGNvbW1pdCEhIQorCisyMDA1LTA2LTI4IDA5OjE3OjE0ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkqIENoYW5nZUxvZzoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0b2JqZWN0LnNnbWw6CisJKiBnc3QvZ3N0b2JqZWN0LmM6CisJKiBnc3QvZ3N0b2JqZWN0Lmg6CisJICBnc3QvZ3N0b2JqZWN0LmMgKGdzdF9vYmplY3RfdW5yZWYsIGdzdF9vYmplY3RfcmVmKQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTA2LTI4ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvZ3N0b2JqZWN0LmMgKGdzdF9vYmplY3RfdW5yZWYsIGdzdF9vYmplY3RfcmVmKQorCSAgKGdzdF9vYmplY3Rfc2luayk6IFRha2UgZ3BvaW50ZXIgYXJndW1lbnRzLCBub3QgR3N0T2JqZWN0IC0tCisJICBhdm9pZHMgY2FzdHMuIExpa2UgR0xpYi4KKworMjAwNS0wNi0yOCAwODo0MTo0MyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0Z2hvc3RwYWQuYyAoZ3N0X3Byb3h5X3BhZF9kb19hY3RpdmF0ZSk6IERvbid0IHByb3h5IGFjdGl2YXRlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTA2LTI4ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYyAoZ3N0X3Byb3h5X3BhZF9kb19hY3RpdmF0ZSk6IERvbid0IHByb3h5CisJICBhY3RpdmF0ZS4KKworMjAwNS0wNi0yNyAxODozOTo0MSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBzaHV0IHVwIGdjYzMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgc2h1dCB1cCBnY2MzCisKKzIwMDUtMDYtMjcgMTg6MzU6MDUgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYyAoZ3N0X3R5cGVfZmluZF9oZWxwZXIpOiBVbnJlZiBhbnkgcmVtYWluaW5nIGJ1ZmZlci4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNi0yNyAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYyAoZ3N0X3R5cGVfZmluZF9oZWxwZXIpOiBVbnJlZiBhbnkKKwkgIHJlbWFpbmluZyBidWZmZXIuCisJICAqIGdzdC9nc3R0cmFjZS5jIChnc3RfYWxsb2NfdHJhY2VfbGlzdF9zb3J0ZWQpOiBOZXcgaGVscGVyLAorCSAgcmV0dXJucyBhIHNvcnRlZCBjb3B5IG9mIHRoZSB0cmFjZSBsaXN0LgorCSAgKGdzdF9hbGxvY190cmFjZV9wcmludF9saXZlKTogTmV3IEFQSSwgb25seSBwcmludHMgdHJhY2VzIHdpdGgKKwkgIGxpdmUgb2JqZWN0cy4gU29ydCB0aGUgbGlzdC4KKwkgIChnc3RfYWxsb2NfdHJhY2VfcHJpbnRfYWxsKTogU29ydCB0aGUgbGlzdC4KKwkgIChnc3RfYWxsb2NfdHJhY2VfcHJpbnQpOiBBbGlnbiBjb2x1bW5zLgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0dHR5cGVmaW5kZWxlbWVudC5jOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0dGVlLmM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgorCSAgKiBnc3QvZ3N0cXVldWUuYzogQWRhcHQgZm9yIHBhZCBhY3RpdmF0aW9uIGNoYW5nZXMuCisJICAqIGdzdC9nc3RwaXBlbGluZS5jIChnc3RfcGlwZWxpbmVfaW5pdCk6IFVucmVmIGFmdGVyIHBhcmVudGluZworCSAgc2NoZWQuCisJICAoZ3N0X3BpcGVsaW5lX2Rpc3Bvc2UpOiBEcm9wIHJlZiBvbiBzY2hlZC4KKwkgICogZ3N0L2dzdHBhZC5jIChnc3RfcGFkX2luaXQpOiBTZXQgdGhlIGRlZmF1bHQgYWN0aXZhdGUgZnVuYy4KKwkgIChnc3RfcGFkX2FjdGl2YXRlX2RlZmF1bHQpOiBQdXNoIG1vZGUgYnkgZGVmYXVsdC4KKwkgIChwcmVfYWN0aXZhdGVfc3dpdGNoLCBwb3N0X2FjdGl2YXRlX3N3aXRjaCk6IE5ldyBzdHVicywgdGhpbmdzIHRvCisJICBkbyBiZWZvcmUgYW5kIGFmdGVyIHN3aXRjaGluZyBhY3RpdmF0aW9uIG1vZGVzIG9uIHBhZHMuCisJICAoZ3N0X3BhZF9zZXRfYWN0aXZlKTogVGFrZSBhIGJvb2xlYW4gYW5kIG5vdCBhIG1vZGUsIGRpc3BhdGNoIHRvCisJICB0aGUgcGFkJ3MgYWN0aXZhdGUgZnVuY3Rpb24gdG8gY2hvb3NlIHdoaWNoIG1vZGUgdG8gYWN0aXZhdGUuCisJICBTaG9ydGN1dCBvbiBkZWFjdGl2YXRpb24gYW5kIGNhbGwgdGhlIHJpZ2h0IGZ1bmN0aW9uIGRpcmVjdGx5LgorCSAgKGdzdF9wYWRfYWN0aXZhdGVfcHVsbCk6IE5ldyBBUEksIChkZSlhY3RpdmF0ZXMgYSBwYWQgaW4gcHVsbAorCSAgbW9kZS4KKwkgIChnc3RfcGFkX2FjdGl2YXRlX3B1c2gpOiBOZXcgQVBJLCBzYW1lIGZvciBwdXNoIG1vZGUuCisJICAoZ3N0X3BhZF9zZXRfYWN0aXZhdGVfZnVuY3Rpb24pCisJICAoZ3N0X3BhZF9zZXRfYWN0aXZhdGVwdWxsX2Z1bmN0aW9uKQorCSAgKGdzdF9wYWRfc2V0X2FjdGl2YXRlcHVzaF9mdW5jdGlvbik6IFNldHRlcnMgZm9yIG5ldyBBUEkuCisJICAqIGdzdC9nc3RtaW5pb2JqZWN0LmMgKGdzdF9taW5pX29iamVjdF9uZXcsIGdzdF9taW5pX29iamVjdF9mcmVlKToKKwkgIFRyYWNlIGFsbCBtaW5pb2JqZWN0cy4KKwkgIChnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZSk6IFVucmVmIHRoZSBhcmcgaWYgd2UgY29weSwgbGlrZQorCSAgZ3N0X2NhcHNfbWFrZV93cml0YWJsZS4KKwkgICogZ3N0L2dzdG1lc3NhZ2UuYyAoX2dzdF9tZXNzYWdlX2luaXRpYWxpemUpOiBObyB0cmFjZSBpbml0LgorCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYyAoZ3N0X3Byb3h5X3BhZF9kb19hY3RpdmF0ZSkKKwkgIChnc3RfcHJveHlfcGFkX2RvX2FjdGl2YXRlcHVsbCwgZ3N0X3Byb3h5X3BhZF9kb19hY3RpdmF0ZXB1c2gpOgorCSAgQWRhcHQgZm9yIG5ldyBwYWQgQVBJLgorCSAgKiBnc3QvZ3N0ZXZlbnQuYyAoX2dzdF9ldmVudF9pbml0aWFsaXplKTogRG9uJ3QgaW5pdGlhbGl6ZSB0cmFjZS4KKwkgICogZ3N0L2dzdGVsZW1lbnQuaDoKKwkgICogZ3N0L2dzdGVsZW1lbnQuYyAoZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zcmNfcGFkcykKKwkgIChnc3RfZWxlbWVudF9pdGVyYXRlX3NpbmtfcGFkcyk6IE5ldyBBUEkgZnVuY3Rpb25zLgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jIChpdGVyYXRvcl9mb2xkX3dpdGhfcmVzeW5jKTogTmV3IHV0aWxpdHksCisJICBzaG91bGQgZm9sZCBpbnRvIGdzdGl0ZXJhdG9yLmMgaW4gc29tZSBmb3JtLgorCSAgKGdzdF9lbGVtZW50X3BhZHNfYWN0aXZhdGUpOiBTaW1wbGlmaWVkIHZpYSB1c2Ugb2YgZm9sZCBhbmQKKwkgIGRlbGVnYXRpb24gb2YgZGVjaXNpb25zIHRvIGdzdHBhZC0+YWN0aXZhdGUuCisJICAqIGdzdC9nc3RidXMuYyAoZ3N0X2J1c19zb3VyY2VfZmluYWxpemUpOiBTZXQgdGhlIGJ1cyB0byBOVUxMLAorCSAgaGVscCBpbiBkZWJ1Z2dpbmcuCisJICAqIGdzdC9nc3RidWZmZXIuYyAoX2dzdF9idWZmZXJfaW5pdGlhbGl6ZSk6IFJlZiB0aGUgYnVmZmVyIHR5cGUKKwkgIGNsYXNzIG9uY2UgaW4gaW5pdCwgbGlrZSBnc3RtZXNzYWdlLiBEaWRuJ3QgcnVuIGludG8gdGhpcyBpc3N1ZQorCSAgYnV0IGl0IHNlZW1zIGNvcnJlY3QuIERvbid0IGluaXRpYWxpemUgYSB0cmFjZSwgZ3N0bWluaW9iamVjdCBkb2VzCisJICB0aGF0LgorCSAgKiBjaGVjay9waXBlbGluZXMvc2ltcGxlX2xhdW5jaF9saW5lcy5jICh0ZXN0X3N0b3BfZnJvbV9hcHApOiBOZXcKKwkgIHRlc3QsIHJ1bnMgZmFrZXNyYyAhIGZha2VzaW5rLCBzdG9wcGluZyBvbiA6OmhhbmRvZmYgdmlhIGEgbWVzc2FnZQorCSAgdG8gdGhlIGJ1cy4KKwkgIChhc3NlcnRfbGl2ZV9jb3VudCk6IE5ldyB1dGlsIGZ1bmN0aW9uLCB1c2VzIGFsbG9jIHRyYWNlcyB0byBjaGVjaworCSAgY2xlYW51cC4KKwkgICogY2hlY2svZ3N0L2dzdGdob3N0cGFkLmMgKHRlc3RfZ2hvc3RfcGFkcyk6IE1vcmUgcmVmY291bnQgY2hlY2tzLgorCSAgVG8gYmUgbW9kaWZpZWQgd2hlbiB1bmxpbmsgZHJvcHMgdGhlIGludGVybmFsIHBhZC4KKworMjAwNS0wNi0yNyAxODoxMToyNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJpbi5jOiBDbGVhbnVwIHRoZSBnZXRfc3RhdGUoKSBmdW5jdGlvbiBhIGxpdHRsZSwgbWFrZSBzdXJlIGl0IGl0ZXJhdGVzIHRoZSBzYW1lIHNldCBvZiBlbGVtZW50cy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2dldF9zdGF0ZSksIChnc3RfYmluX2l0ZXJhdGVfc3RhdGVfb3JkZXIpLAorCSAgKGdzdF9iaW5fY2hhbmdlX3N0YXRlKToKKwkgIENsZWFudXAgdGhlIGdldF9zdGF0ZSgpIGZ1bmN0aW9uIGEgbGl0dGxlLCBtYWtlIHN1cmUgaXQKKwkgIGl0ZXJhdGVzIHRoZSBzYW1lIHNldCBvZiBlbGVtZW50cy4KKwkgIEFkZGVkIHN0dWIgaXRlcmF0ZV9zdGF0ZV9vcmRlcigpLgorCisyMDA1LTA2LTI3IDE0OjQwOjA5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXM6CisJKiBkb2NzL2dzdC90bXBsL2dzdGJhc2VzaW5rLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGJhc2VzcmMuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0YmFzZXRyYW5zZm9ybS5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RlbGVtZW50LnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGl0ZXJhdG9yLnNnbWw6CisJKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6CisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSogZ3N0L2dzdGl0ZXJhdG9yLmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6CisJICBhZGRpbmcgYmFzZXRyYW5zZm9ybSBhbmQgaXRlcmF0b3IgZG9jcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGRpbmcgYmFzZXRyYW5zZm9ybSBhbmQgaXRlcmF0b3IgZG9jcworCisyMDA1LTA2LTI3IDEzOjI1OjQ0ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGRvY3MvZGVzaWduL3BhcnQtYWN0aXZhdGlvbi50eHQ6IE5vdGVzIG9uIGhvdyBhY3RpdmF0aW9uIHNob3VsZCB3b3JrIC0tIG5vdCBxdWl0ZSBpbXBsZW1lbnRlZCB5ZXQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDYtMjcgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGRvY3MvZGVzaWduL3BhcnQtYWN0aXZhdGlvbi50eHQ6IE5vdGVzIG9uIGhvdyBhY3RpdmF0aW9uIHNob3VsZAorCSAgd29yayAtLSBub3QgcXVpdGUgaW1wbGVtZW50ZWQgeWV0LgorCisyMDA1LTA2LTI3IDA4OjU0OjE2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0YmFzZXNyYy5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RlbGVtZW50LnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHJlZ2lzdHJ5LnNnbWw6CisJICByZW1vdmUgc3R1ZmYgdGhhdCBpc24ndCB0aGVyZSBhbnltb3JlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHJlbW92ZSBzdHVmZiB0aGF0IGlzbid0IHRoZXJlIGFueW1vcmUKKworMjAwNS0wNi0yNyAwODoxNjo1MSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBkb2NzL2dzdC90bXBsL2dzdGJhc2VzcmMuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0YmluLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGVsZW1lbnQuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0dHlwZXMuc2dtbDoKKwkqIGdzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkqIGdzdC9nc3RiaW4uYzoKKwkqIGdzdC9nc3RiaW4uaDoKKwkqIGdzdC9nc3RlbGVtZW50Lmg6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkgIG1vcmUgZG9jIGFuZCB3aGl0ZXNwYWNlIGZpeGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIG1vcmUgZG9jIGFuZCB3aGl0ZXNwYWNlIGZpeGVzCisKKzIwMDUtMDYtMjUgMTk6NTM6MDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RnaG9zdHBhZC5jOiBBdCBsZWFzdCBnZXQgdGhlIGNoYWluIGZ1bmN0aW9uIGNvcnJlY3QsIG5lZWRzIG1vcmUgZml4aW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RnaG9zdHBhZC5jOiAoZ3N0X3Byb3h5X3BhZF9kb19jaGFpbik6CisJICBBdCBsZWFzdCBnZXQgdGhlIGNoYWluIGZ1bmN0aW9uIGNvcnJlY3QsIG5lZWRzIG1vcmUKKwkgIGZpeGluZy4KKworMjAwNS0wNi0yNSAxOTozNzo1OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0LzogUmlnaHQsIHR3byBwcm9ibGVtcyBoZXJlOiBnaG9zdHBhZHMgZG9uJ3QgdGFrZSBsb2NrcyBhbmQgZ2xpYiBfcmVjX211dGV4X2xvY2tfZnVsbCgpIHdpdGggZGVwdGg9PTAgc3RpbGwgbG9ja3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlc2lua19wcmVyb2xsX3F1ZXVlX2VtcHR5KSwKKwkgIChnc3RfYmFzZXNpbmtfaGFuZGxlX29iamVjdCksIChnc3RfYmFzZXNpbmtfZXZlbnQpLAorCSAgKGdzdF9iYXNlc2lua19kb19zeW5jKSwgKGdzdF9iYXNlc2lua19oYW5kbGVfZXZlbnQpLAorCSAgKGdzdF9iYXNlc2lua19jaGFuZ2Vfc3RhdGUpOgorCSAgKiBnc3QvZ3N0dGFzay5oOgorCSAgUmlnaHQsIHR3byBwcm9ibGVtcyBoZXJlOiBnaG9zdHBhZHMgZG9uJ3QgdGFrZSBsb2NrcyBhbmQKKwkgIGdsaWIgX3JlY19tdXRleF9sb2NrX2Z1bGwoKSB3aXRoIGRlcHRoPT0wIHN0aWxsIGxvY2tzLgorCSAgQ2F0Y2ggaWxsZWdhbCBsb2NraW5nIGFuZCBnX3dhcm4gdGhlbS4KKworMjAwNS0wNi0yNSAxOToxNDo1MSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgY2hlY2svc3RhdGVzL3NpbmtzLmM6IEhhdmUgdG8gY2hlY2sgZm9yIGNvbXBsZXRpb24gbm93Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svc3RhdGVzL3NpbmtzLmM6IChTVEFSVF9URVNUKSwgKGdzdF9vYmplY3Rfc3VpdGUpOgorCSAgSGF2ZSB0byBjaGVjayBmb3IgY29tcGxldGlvbiBub3cuLi4KKworMjAwNS0wNi0yNSAxOTowOToyOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0LzogVW5sb2NrIFNUUkVBTV9MT0NLIHdoYXRldmVyIHRoZSByZWN1cnNpb24gd2FzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZXNpbmtfcHJlcm9sbF9xdWV1ZV9lbXB0eSksCisJICAoZ3N0X2Jhc2VzaW5rX2hhbmRsZV9vYmplY3QpLCAoZ3N0X2Jhc2VzaW5rX2V2ZW50KSwKKwkgIChnc3RfYmFzZXNpbmtfZG9fc3luYyksIChnc3RfYmFzZXNpbmtfaGFuZGxlX2V2ZW50KSwKKwkgIChnc3RfYmFzZXNpbmtfY2hhbmdlX3N0YXRlKToKKwkgICogZ3N0L2dzdHBhZC5oOgorCSAgVW5sb2NrIFNUUkVBTV9MT0NLIHdoYXRldmVyIHRoZSByZWN1cnNpb24gd2FzLgorCisyMDA1LTA2LTI1IDE3OjU0OjU4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiBSZXdvcmtlZCB0aGUgYmFzZSBzaW5rLCBoYW5kbGUgZXZlbnQgYW5kIGJ1ZmZlciBzZXJpYWxpc2F0aW9uIGNvcnJlY3RseSBhbmQgcmVtb3ZlZCBwb3NzaWJsZSAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2VzaW5rX3NldF9wcm9wZXJ0eSksCisJICAoZ3N0X2Jhc2VzaW5rX3ByZXJvbGxfcXVldWVfZW1wdHkpLAorCSAgKGdzdF9iYXNlc2lua19wcmVyb2xsX3F1ZXVlX2ZsdXNoKSwgKGdzdF9iYXNlc2lua19oYW5kbGVfb2JqZWN0KSwKKwkgIChnc3RfYmFzZXNpbmtfZXZlbnQpLCAoZ3N0X2Jhc2VzaW5rX2RvX3N5bmMpLAorCSAgKGdzdF9iYXNlc2lua19oYW5kbGVfZXZlbnQpLCAoZ3N0X2Jhc2VzaW5rX2hhbmRsZV9idWZmZXIpLAorCSAgKGdzdF9iYXNlc2lua19jaGFpbiksIChnc3RfYmFzZXNpbmtfbG9vcCksIChnc3RfYmFzZXNpbmtfYWN0aXZhdGUpLAorCSAgKGdzdF9iYXNlc2lua19jaGFuZ2Vfc3RhdGUpOgorCSAgUmV3b3JrZWQgdGhlIGJhc2Ugc2luaywgaGFuZGxlIGV2ZW50IGFuZCBidWZmZXIgc2VyaWFsaXNhdGlvbgorCSAgY29ycmVjdGx5IGFuZCByZW1vdmVkIHBvc3NpYmxlIGRlYWRsb2NrLgorCSAgSGFuZGxlIEVPUyBjb3JyZWN0bHkuCisKKzIwMDUtMDYtMjUgMTc6NTE6MTIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIEFsbG93IGVsZW1lbnRzIHRvIHBvc3QgRU9TIGluIHRoZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBpcGVsaW5lLmM6IChpc19lb3MpLCAocGlwZWxpbmVfYnVzX2hhbmRsZXIpLAorCSAgKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpOgorCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChjaGVja19pbnRyKSwgKGV2ZW50X2xvb3ApLCAobWFpbik6CisJICBBbGxvdyBlbGVtZW50cyB0byBwb3N0IEVPUyBpbiB0aGUgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uLgorCSAgRml4IHVwIC1sYXVuY2gsIG1ha2UgaXQgZXhpdCB0aGUgcG9sbCBsb29wIHdoZW4gdGhlCisJICBwaXBlbGluZSBhY3R1YWxseSBjaGFuZ2VkIHN0YXRlLgorCSAgRml4IHVwIHdhcm5pbmcgcGFyc2luZyBpbiAtbGF1bmNoLgorCisyMDA1LTA2LTI1IDE3OjQ0OjM5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZWxlbWVudHMvZ3N0dGVlLmM6IENvcmUgdGFrZXMgU1RSRUFNX0xPQ0sgZm9yIHVzIG5vdy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0dGVlLmM6IChnc3RfdGVlX2NoYWluKSwgKGdzdF90ZWVfbG9vcCksCisJICAoZ3N0X3RlZV9zaW5rX2FjdGl2YXRlKToKKwkgIENvcmUgdGFrZXMgU1RSRUFNX0xPQ0sgZm9yIHVzIG5vdy4KKworMjAwNS0wNi0yNSAxNzo0MjoxNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0LzogS2VlcCB0cmFjayBvZiBjdXJyZW50IHRhcmdldCBzdGF0ZSB3aGlsZSBwZXJmb3JtaW5nIGEgc3RhdGUgY2hhbmdlIHNvIHRoYXQgc3ViY2xhc3NlcyBjYW4gZG8gc29tZXRoaW5nIGludGVyZXN0Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2dldF9zdGF0ZV9mdW5jKSwKKwkgIChnc3RfZWxlbWVudF9zZXRfc3RhdGUpOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOiAoZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IpLAorCSAgKGdzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmcpOgorCSAgS2VlcCB0cmFjayBvZiBjdXJyZW50IHRhcmdldCBzdGF0ZSB3aGlsZSBwZXJmb3JtaW5nIGEgc3RhdGUKKwkgIGNoYW5nZSBzbyB0aGF0IHN1YmNsYXNzZXMgY2FuIGRvIHNvbWV0aGluZyBpbnRlcmVzdGluZy4KKwkgIEZpeCBwYXJzaW5nIG9mIHdhcm5pbmcvZXJyb3IgbWVzc2FnZXMgd2hlbiBHRXJyb3IgaXMgTlVMTC4KKworMjAwNS0wNi0yNCAxODoxNjoxNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgorCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKKwkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXM6CisJKiBkb2NzL2dzdC90bXBsL2dzdGJhc2VzaW5rLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGJhc2VzcmMuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0YmluLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGNvbXBhdC5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RmYWtlc2luay5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RmYWtlc3JjLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGZpbGVzaW5rLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGZpbGVzcmMuc2dtbDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0aW5kZXguc2dtbDoKKwkqIGRvY3MvbWFudWFsL2FwcGVuZGl4LXF1b3Rlcy54bWw6CisJKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5oOgorCSogZ3N0L2dzdG1lc3NhZ2UuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmg6CisJICBzdGFydCBwdWxsaW5nIGluIGJhc2UgY2xhc3NlcyBhbmQgZWxlbWVudHMgZm9yIGRvY3MKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgc3RhcnQgcHVsbGluZyBpbiBiYXNlIGNsYXNzZXMgYW5kIGVsZW1lbnRzIGZvciBkb2NzCisKKzIwMDUtMDYtMjQgMDc6NDk6NDAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogQ2hhbmdlTG9nOgorCSogZG9jcy9nc3QvTWFrZWZpbGUuYW06CisJKiBkb2NzL2xpYnMvTWFrZWZpbGUuYW06CisJICBmaXhlZCBtYWtlIGRpc3RjaGVjayB3aXRoIGd0ay1kb2MgMS4zCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGZpeGVkIG1ha2UgZGlzdGNoZWNrIHdpdGggZ3RrLWRvYyAxLjMKKworMjAwNS0wNi0yMyAxNzoxMTo0OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGVsZW1lbnQuYzogV2hlbiB0aGUgc3RhdGUgZGlkIG5vdCBjaGFuZ2UsIGFsc28gcmVwb3J0IE5PX1BSRVJPTEwgd2hlbiBpdCBtYXR0ZXJzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9nZXRfc3RhdGVfZnVuYyksCisJICAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKSwgKGdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZSk6CisJICBXaGVuIHRoZSBzdGF0ZSBkaWQgbm90IGNoYW5nZSwgYWxzbyByZXBvcnQgTk9fUFJFUk9MTAorCSAgd2hlbiBpdCBtYXR0ZXJzLgorCisyMDA1LTA2LTIzIDE3OjA5OjIxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvOiBObyB1bnNhZmUgdGFzayBwYXVzaW5nIHBsZWFzZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2V2ZW50X2RlZmF1bHQpOgorCSAgKiBnc3QvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9sb29wKToKKwkgIE5vIHVuc2FmZSB0YXNrIHBhdXNpbmcgcGxlYXNlLgorCisyMDA1LTA2LTIzIDE3OjA3OjA4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3Qvc2NoZWR1bGVycy90aHJlYWRzY2hlZHVsZXIuYzogUmVmIHRoZSB0YXNrIGJlZm9yZSBwdXNoaW5nIGl0IG9uIHRoZSB0aHJlYWRwb29sLiBUaGlzIG1ha2VzIHN1cmUgdGhhdCB3ZSBoYXZlIGEgcmUuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3Qvc2NoZWR1bGVycy90aHJlYWRzY2hlZHVsZXIuYzoKKwkgIChnc3RfdGhyZWFkX3NjaGVkdWxlcl90YXNrX3N0YXJ0KSwKKwkgIChnc3RfdGhyZWFkX3NjaGVkdWxlcl90YXNrX3BhdXNlKSwgKGdzdF90aHJlYWRfc2NoZWR1bGVyX2Z1bmMpOgorCSAgUmVmIHRoZSB0YXNrIGJlZm9yZSBwdXNoaW5nIGl0IG9uIHRoZSB0aHJlYWRwb29sLiBUaGlzCisJICBtYWtlcyBzdXJlIHRoYXQgd2UgaGF2ZSBhIHJlZiB3aGVuIHRoZSB0aHJlYWRmdW5jdGlvbiBpcworCSAgYWN0dWFsbHkgY2FsbGVkLgorCisyMDA1LTA2LTIzIDE1OjI2OjA5ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGdzdC9iYXNlL2dzdGJhc2VzcmMuYyAoZ3N0X2Jhc2VzcmNfZ2V0X3JhbmdlKTogQ2hlY2sgaWYgdGhlIG9mZnNldCBpcyBncmVhdGVyIHRoYW4gdGhlIGZpbGUncyBzaXplLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTA2LTIzICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmMgKGdzdF9iYXNlc3JjX2dldF9yYW5nZSk6IENoZWNrIGlmIHRoZQorCSAgb2Zmc2V0IGlzIGdyZWF0ZXIgdGhhbiB0aGUgZmlsZSdzIHNpemUuCisKKzIwMDUtMDYtMjMgMTU6MDQ6NDggKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdG9iamVjdC5oIChHU1RfQ0xBU1NfTE9DSywgR1NUX0NMQVNTX1RSWUxPQ0spIChHU1RfQ0xBU1NfVU5MT0NLLCBHU1RfQ0xBU1NfR0VUX0xPQ0ssIEdzdE9iamVjdENsYXNzKQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTA2LTIzICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvZ3N0b2JqZWN0LmggKEdTVF9DTEFTU19MT0NLLCBHU1RfQ0xBU1NfVFJZTE9DSykKKwkgIChHU1RfQ0xBU1NfVU5MT0NLLCBHU1RfQ0xBU1NfR0VUX0xPQ0ssIEdzdE9iamVjdENsYXNzKQorCSAgKiBnc3QvZ3N0b2JqZWN0LmMgKGdzdF9vYmplY3RfY2xhc3NfaW5pdCk6IE1ha2UgdGhlIGNsYXNzIGxvY2sKKwkgIHJlY3Vyc2l2ZS4gV2ltIHdvbid0IGxldCBtZSBkcm9wIGRlZXBfbm90aWZ5LiBEZWNvZGViaW4gd29ya3MKKwkgIGFnYWluLCB3aG9vcGR5IGRvby4KKworMjAwNS0wNi0yMyAxNDoxODoxNSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0Z2hvc3RwYWQuYyAob25faW50X25vdGlmeSk6IENhdGNoZXMgbm90aWZ5OjpjYXBzIG9uIHRoZSBpbnRlcm5hbCBwYWQsIGFuZCBoYWNrcyBhY2NvcmRpbmdseS4gRG9lc24ndCBkbyBpdCBvbiAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNi0yMyAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdGdob3N0cGFkLmMgKG9uX2ludF9ub3RpZnkpOiBDYXRjaGVzIG5vdGlmeTo6Y2FwcyBvbiB0aGUKKwkgIGludGVybmFsIHBhZCwgYW5kIGhhY2tzIGFjY29yZGluZ2x5LiBEb2Vzbid0IGRvIGl0IG9uIHRoZSB0YXJnZXQKKwkgIHBhZCBiZWNhdXNlIHdlIGNoYW5nZSBpdHMgY2Fwcy4gUHJvYmFibHkgY2F0Y2hlcyBhbGwgY2FzZXMgb2YKKwkgIGludGVyZXN0IHRoby4KKwkgIChnc3RfZ2hvc3RfcGFkX3NldF9wcm9wZXJ0eSk6IENvbm5lY3QgdG8gbm90aWZ5OjpjYXBzIGFzCisJICBhcHByb3ByaXRhdGUuCisKKzIwMDUtMDYtMjMgMTM6MjA6NDQgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgdGVzdHMvbmV0d29yay1jbG9jay5zY20gKHBsb3Qtc2ltdWxhdGlvbik6IFBpcGUgZGF0YSB0byB0aGUgZWxpdGUgcHl0aG9uIHNrcmlwdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNi0yMyAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogdGVzdHMvbmV0d29yay1jbG9jay5zY20gKHBsb3Qtc2ltdWxhdGlvbik6IFBpcGUgZGF0YSB0byB0aGUKKwkgIGVsaXRlIHB5dGhvbiBza3JpcHQuCisJICAqIHRlc3RzL25ldHdvcmstY2xvY2stdXRpbHMuc2NtIChkZWZpbmUtcGFyYW1ldGVyKTogTmV3IG1hY3JvLAorCSAgZGVmaW5lcyBhIHBhcmFtZXRlciB0aGF0IGNhbiBiZSBzZXQgdmlhIHRoZSBjb21tYW5kIGxpbmUuCisJICAoc2V0LXBhcmFtZXRlciEsIHBhcnNlLXBhcmFtZXRlci1hcmd1bWVudHMpOiBDb21tYW5kIGxpbmUgYXJncworCSAgcGFyc2VyLgorCSAgKiB0ZXN0cy9wbG90LWRhdGE6IFNpbXBsZSBtYXRwbG90bGliLWJhc2VkIHBsb3R0ZXIsIHRha2VzIGlucHV0IG9uCisJICBzdGRpbi4KKworMjAwNS0wNi0yMyAxMzoyMDowMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGRvY3MvbWFudWFsL2FwcGVuZGl4LXF1b3Rlcy54bWw6CisJICBhZGQgbW9yZSBpbXBvcnRhbnQgZG9jdW1lbnRhdGlvbgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGQgbW9yZSBpbXBvcnRhbnQgZG9jdW1lbnRhdGlvbgorCisyMDA1LTA2LTIzIDExOjQzOjM5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZ3N0L2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOiBEb24ndCByZXN0YXJ0IHR5cGVmaW5kaW5nIG9uIGEgZGlzY29udC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNi0yMyAgSmFuIFNjaG1pZHQgIDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6CisJICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2hhbmRsZV9ldmVudCk6CisJICBEb24ndCByZXN0YXJ0IHR5cGVmaW5kaW5nIG9uIGEgZGlzY29udC4KKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X3NldF9zdGF0ZSk6CisJICBEZWJ1ZyBzcGVsbGluZyBmaXguCisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfc2V0X2FjdGl2ZSksIChnc3RfcGFkX3NlbmRfZXZlbnQpOgorCSAgQWxsb3cgY2hhbmdpbmcgbW9kZSBvZiBhbiBhY3RpdmUgcGFkLgorCSAgRGVidWcgb3V0cHV0IGZpeGVzLgorCSAgKiBnc3QvcmVnaXN0cmllcy9nc3RsaWJ4bWxyZWdpc3RyeS5jOiAobG9hZF9mZWF0dXJlKToKKwkgIERvbid0IGNhc3QgYSBzdGF0aWMgcGFkIHRlbXBsYXRlIHRvIGEgbm9ybWFsIHBhZCB0ZW1wbGF0ZS4KKworMjAwNS0wNi0yMyAxMToyNToyOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIHJlbW92ZSBnc3Rfc3RydG9sbCBjb21wbGV0ZWx5LCBzaW5jZSBpdCBkaWRuJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgbW9yZSB0aGFuIHdoYXQgZ19hc2NpaV9zdHJ0b3VsbCBhbHJlYWR5IGRvZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svZ3N0L2dzdHZhbHVlLmM6IChTVEFSVF9URVNUKSwgKGdzdF92YWx1ZV9zdWl0ZSk6CisJICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2ludF9oZWxwZXIpOgorCSAgcmVtb3ZlIGdzdF9zdHJ0b2xsIGNvbXBsZXRlbHksIHNpbmNlIGl0IGRpZG4ndCBhY3R1YWxseSBkbworCSAgYW55dGhpbmcgbW9yZSB0aGFuIHdoYXQgZ19hc2NpaV9zdHJ0b3VsbCBhbHJlYWR5IGRvZXMuCisJICBjaGVjayBmb3IgcmFuZ2UgZXJyb3JzIHdoZW4gZGVzZXJpYWxpemluZworCSAgZG8gYSBjYXN0IGZvciB0aGUgdW5zaWduZWQgY2FzZXM7IGJ1dCBmdXJ0aGVyIGZpeGluZyBuZWVkcworCSAgYSBkZWNpc2lvbiBvbiB3aGF0IHRoZSBpbnRlcnByZXRhdGlvbiBvZiAiKGludCkiIGFuZAorCSAgZGVzZXJpYWxpemF0aW9uIHNob3VsZCBiZSBmb3IgdmFsdWVzIHRoYXQgZmFsbCBvdXRzaWRlIHRoZQorCSAgdHlwZSdzIGJvdW5kYXJpZXMgKGllLCByZWZ1c2UsIG9yIGludGVycHJldCBhcyBjYXN0aW5nKQorCisyMDA1LTA2LTIzIDEwOjM3OjA5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJKiBDaGFuZ2VMb2c6CisJKiBjaGVjay9NYWtlZmlsZS5hbToKKwkqIGNoZWNrL3N0YXRlcy9zaW5rcy5jOgorCSogZG9jcy9kZXNpZ24vcGFydC1saXZlLXNvdXJjZS50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LXN0YXRlcy50eHQ6CisJKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgorCSogZ3N0L2dzdGJpbi5jOgorCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3RlbGVtZW50Lmg6CisJKiBnc3QvZ3N0dHlwZXMuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKKwkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSogdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jOgorCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgorCSAgQWRkZWQgc3VwcG9ydCBmb3IgbGl2ZSBzb3VyY2VzIGFuZCBvdGhlciBlbGVtZW50cyB0aGF0IGNhbm5vdCBkbyBwcmVyb2xsLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBBZGRlZCBzdXBwb3J0IGZvciBsaXZlIHNvdXJjZXMgYW5kIG90aGVyIGVsZW1lbnRzIHRoYXQKKwkgIGNhbm5vdCBkbyBwcmVyb2xsLgorCSAgVXBkYXRlZCBkZXNpZ24gZG9jcywgYWRkZWQgbGl2ZS1zb3VyY2UgZGVzaWduIGRvYy4KKwkgIEltcGxlbWVudGVkIGxpdmUgc291cmNlIGZ1bmN0aW9uYWxpdHkgaW4gYmFzZXNyYworCSAgRml4IGVycm9yIGNvbmRpdGlvbiBpbiBfYmluX2dldF9zdGF0ZSgpCisJICBJbXBsZW1lbnQgbGl2ZSBzb3VyY2UgaGFuZGxpbmcgaW4gLWxhdW5jaC4KKwkgIEFkZGVkIGNoZWNrIGZvciBsaXZlIHNvdXJjZXMuCisJICBGaXhlZCBjYXNlIGluIEdzdEJpbiB3aGVyZSBlbGVtZW50cyB3ZXJlIGNoYW5nZWQgc3RhdGUKKwkgIG11bHRpcGxlIHRpbWVzLgorCisyMDA1LTA2LTIzIDA5OjU5OjMzICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGNoZWNrL2dzdC9nc3RwYWQuYyAodGVzdF9nZXRfYWxsb3dlZF9jYXBzLCB0ZXN0X3JlZmNvdW50KTogRml4IGJvcmtlbiByZWZjb3VudGluZy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNi0yMyAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogY2hlY2svZ3N0L2dzdHBhZC5jICh0ZXN0X2dldF9hbGxvd2VkX2NhcHMsIHRlc3RfcmVmY291bnQpOiBGaXgKKwkgIGJvcmtlbiByZWZjb3VudGluZy4KKworMjAwNS0wNi0yMyAwOTo0MTo0MSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJKiBnc3QvZ3N0cGFkLmM6CisJICBjb21taXQgdGhlIGZpbGUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgY29tbWl0IHRoZSBmaWxlCisKKzIwMDUtMDYtMjMgMDk6NDE6MDkgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdHBhZC5jIChnc3RfcGFkX3NldF9jYXBzKTogUmVtb3ZlIG5lZWRsZXNzIHJlZnMsIGdzdF9jYXBzX3JlcGxhY2UgdGFrZXMgY2FyZSBvZiB0aGlzIGZvciB1cy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNi0yMyAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdHBhZC5jIChnc3RfcGFkX3NldF9jYXBzKTogUmVtb3ZlIG5lZWRsZXNzIHJlZnMsCisJICBnc3RfY2Fwc19yZXBsYWNlIHRha2VzIGNhcmUgb2YgdGhpcyBmb3IgdXMuCisKKzIwMDUtMDYtMjMgMDk6Mjg6MjcgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdGdob3N0cGFkLmMgKGdzdF9wcm94eV9wYWRfZG9fc2V0Y2Fwcyk6IENhbGwgdGhlIGZ1bGwgZ3N0X3BhZF9zZXRfY2FwcyBvbiB0aGUgdGFyZ2V0LCBub3QganVzdCBpdHMgc2V0Y2FwcygpIGZ1Li4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDYtMjMgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3RnaG9zdHBhZC5jIChnc3RfcHJveHlfcGFkX2RvX3NldGNhcHMpOiBDYWxsIHRoZSBmdWxsCisJICBnc3RfcGFkX3NldF9jYXBzIG9uIHRoZSB0YXJnZXQsIG5vdCBqdXN0IGl0cyBzZXRjYXBzKCkgZnVuY3Rpb24uCisKKzIwMDUtMDYtMjMgMDA6Mzk6MjYgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgdGVzdHMvOiBBIG5ldHdvcmsgY2xvY2sgc2ltdWxhdG9yLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTA2LTIzICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiB0ZXN0cy9uZXR3b3JrLWNsb2NrLnNjbToKKwkgICogdGVzdHMvbmV0d29yay1jbG9jay11dGlscy5zY206IEEgbmV0d29yayBjbG9jayBzaW11bGF0b3IuCisJICBTb21ldGhpbmcgb2YgYW4gYWxnb3JpdGhtaWMgdGVzdGJlZCBiZWZvcmUgZG9pbmcgc29tZXRoaW5nIGluIEMuCisKKzIwMDUtMDYtMjIgMTk6NTc6MTIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBjaGVjay9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSAgbWFrZSBzdXJlIGNhcHNsaXN0LmggZ2V0cyBkaXN0ZWQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgbWFrZSBzdXJlIGNhcHNsaXN0LmggZ2V0cyBkaXN0ZWQKKworMjAwNS0wNi0yMiAxOTo0ODo1NCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGZpbGUgZnJvbXN0cmluZy5jIHdhcyBpbml0aWFsbHkgYWRkZWQgb24gYnJhbmNoIEJSQU5DSC1HU1RSRUFNRVItMF84LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaWxlIGZyb21zdHJpbmcuYyB3YXMgaW5pdGlhbGx5IGFkZGVkIG9uIGJyYW5jaCBCUkFOQ0gtR1NUUkVBTUVSLTBfOC4KKworMjAwNS0wNi0yMiAxOToyMjozNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGNoZWNrLzogY29weSBvdmVyIGZyb20gMC44LCBhbmQgYWRkIHR3byB3aXRoIGJpdG1hc2tzIHNwZWNpZmllZCB3aXRoIChpbnQpIDB4RkYuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9NYWtlZmlsZS5hbToKKwkgICogY2hlY2svZ3N0L2NhcHNsaXN0Lmg6CisJICBjb3B5IG92ZXIgZnJvbSAwLjgsIGFuZCBhZGQgdHdvIHdpdGggYml0bWFza3Mgc3BlY2lmaWVkIHdpdGgKKwkgIChpbnQpIDB4RkYuLi4KKwkgICogY2hlY2svZ3N0L2dzdGNhcHMuYzogKFNUQVJUX1RFU1QpLCAoZ3N0X2NhcHNfc3VpdGUpOgorCSAgYWRkIHRlc3QgdG8gcGFyc2UgZXZlcnl0aGluZyBmcm9tIGNhcHNsaXN0LmgKKwkgICogY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOiAoU1RBUlRfVEVTVCksIChnc3RfdmFsdWVfc3VpdGUpLAorCSAgKG1haW4pOgorCSAgYWRkIHRlc3QgZm9yIHN0cnVjdHVyZSBkZXNlcmlhbGl6YXRpb24KKwkgICogY2hlY2svZ3N0L2dzdHZhbHVlLmM6IChTVEFSVF9URVNUKSwgKGdzdF92YWx1ZV9zdWl0ZSk6CisJICBhZGQgdGVzdHMgZm9yIGRlc2VyaWFsaXphdGlvbiBvZiBzdHJpbmdzIHRvIGludCB0eXBlcworCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6IChnc3Rfc3RydWN0dXJlX250aF9maWVsZF9uYW1lKToKKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5oOgorCSAgYWRkIGEgd2F5IHRvIGdldCB0aGUgbmFtZSBvZiBhIGZpZWxkIHJlZmVyZW5jZWQgYnkgaW5kZXgKKwkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfZGVzZXJpYWxpemVfaW50X2hlbHBlcik6CisJICBpbnN0ZWFkIG9mIGNoZWNraW5nIGlmIHRoZSByZXN1bHRpbmcgbG9uZyBsb25nIGxpZXMgYmV0d2VlbgorCSAgbWluIGFuZCBtYXgsIHdlIGNoZWNrIGlmIHRoZSBsb25nIGxvbmcgd291bGQgZml0IGludG8KKwkgIGEgbnVtYmVyIG9mIGJ5dGVzIGZvciB0aGUgZmluYWwgdHlwZS4KKwkgIFRoaXMgZml4ZXMgY2FzZXMgd2hlcmUgYSBzdHJpbmcgcmVwcmVzZW50cyAyXjMyIC0gMSwgd2hpY2gKKwkgIHdoZW4gY2FzdCB0byBpbnQgd291bGQgYmUgdGhlICh2YWxpZCkgLTEsIGJ1dCBpcyBiaWdnZXIgdGhhbgorCSAgR19NQVhJTlQKKworMjAwNS0wNi0yMiAxMTowMjo1NyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIGdzdC9wYXJzZS9ncmFtbWFyLnk6CisJICBhZGQgYSBsb2cgbGluZSBmb3IgdHlwZSBkZXNlcmlhbGl6YXRpb24KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkIGEgbG9nIGxpbmUgZm9yIHR5cGUgZGVzZXJpYWxpemF0aW9uCisKKzIwMDUtMDYtMjIgMTA6NTI6MTggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICByZXR1cm4gbG9uZyBsb25nLCBub3QgaW50LCBzbyBnaW50NjQgZGVzZXJpYWxpemF0aW9uIGFjdHVhbGx5IHdvcmtzLiAgSXMgdGhlcmUgYW55IGZsYWcgdGhhdCBtYWtlcyB0aGUgY29tcGlsZXIgY2hlY2suLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9nc3QvZ3N0dmFsdWUuYzogKFNUQVJUX1RFU1QpOgorCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZSk6CisJICByZXR1cm4gbG9uZyBsb25nLCBub3QgaW50LCBzbyBnaW50NjQgZGVzZXJpYWxpemF0aW9uIGFjdHVhbGx5CisJICB3b3Jrcy4gIElzIHRoZXJlIGFueSBmbGFnIHRoYXQgbWFrZXMgdGhlIGNvbXBpbGVyIGNoZWNrIHRoaXMgPworCSAgRml4ZXMgIzMwODU1OQorCisyMDA1LTA2LTIyIDA5OjU1OjE2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YnVmZmVyLmg6IEFkZGVkIGNvbnZlbmllbmNlIG1hY3JvcyBmb3Igc2V0dGluZyBidWZmZXJzIGluIEdWYWx1ZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YnVmZmVyLmg6CisJICBBZGRlZCBjb252ZW5pZW5jZSBtYWNyb3MgZm9yIHNldHRpbmcgYnVmZmVycyBpbiBHVmFsdWUuCisKKzIwMDUtMDYtMjEgMTc6NDE6MzUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBjaGVjay9nc3QvOiBhZGQgYSB0ZXN0IGRlc2VyaWFsaXppbmcgaW50NjQsIGFuZCBjb21tZW50IHBhcnQgb3V0IGJlY2F1c2UgaXQgZmFpbHMsIHlheSAhCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svZ3N0Ly5jdnNpZ25vcmU6CisJICAqIGNoZWNrL2dzdC9nc3R2YWx1ZS5jOiAoU1RBUlRfVEVTVCksIChnc3RfdmFsdWVfc3VpdGUpOgorCSAgYWRkIGEgdGVzdCBkZXNlcmlhbGl6aW5nIGludDY0LCBhbmQgY29tbWVudCBwYXJ0IG91dCBiZWNhdXNlCisJICBpdCBmYWlscywgeWF5ICEKKworMjAwNS0wNi0yMSAxNjo1MzoxNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGNoZWNrL2dzdC9nc3QuYzoKKwkqIHRlc3RzL2NoZWNrL2dzdC9nc3QuYzoKKwkgIGNvbW1pdCBhIGZpbGUgSSBmb3Jnb3QKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgY29tbWl0IGEgZmlsZSBJIGZvcmdvdAorCisyMDA1LTA2LTIxIDE2OjQ4OjQ2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogY2hlY2svTWFrZWZpbGUuYW06CisJKiBjaGVjay9nc3QvZ3N0dmFsdWUuYzoKKwkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL01ha2VmaWxlLmFtOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jYXBzL01ha2VmaWxlLmFtOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jYXBzL3ZhbHVlX3NlcmlhbGl6ZS5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS90ZXN0X2dzdF9pbml0LmM6CisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW06CisJKiB0ZXN0c3VpdGUvY2Fwcy9NYWtlZmlsZS5hbToKKwkqIHRlc3RzdWl0ZS9jYXBzL3ZhbHVlX3NlcmlhbGl6ZS5jOgorCSogdGVzdHN1aXRlL3Rlc3RfZ3N0X2luaXQuYzoKKwkgIG1vdmUgb3ZlciBhIHZhbHVlX3NlcmlhbGl6ZSB0ZXN0CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIG1vdmUgb3ZlciBhIHZhbHVlX3NlcmlhbGl6ZSB0ZXN0CisKKzIwMDUtMDYtMjAgMTU6MTg6MTcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RwYWQuYzogU21hbGwgZG9jIHVwZGF0ZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBhZC5jOgorCSAgU21hbGwgZG9jIHVwZGF0ZXMuCisJICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X3ZhbHVlX2NvbXBhcmVfYnVmZmVyKSwKKwkgIChnc3RfdmFsdWVfc2VyaWFsaXplX2J1ZmZlciksIChnc3RfdmFsdWVfZGVzZXJpYWxpemVfYnVmZmVyKSwKKwkgIChnc3RfdmFsdWVfY29tcGFyZV9mbGFncyksIChnc3RfdmFsdWVfc2VyaWFsaXplX2ZsYWdzKSwKKwkgIChnc3RfdmFsdWVfZGVzZXJpYWxpemVfZmxhZ3MpLCAoX2dzdF92YWx1ZV9pbml0aWFsaXplKToKKwkgIEZpeCBzZXJpYWxpc2F0aW9uIG9mIGJ1ZmZlcnMsIHRoZXkgYXJlIG5vdCBib3hlZCB0eXBlcyBhbnltb3JlCisKKzIwMDUtMDYtMjAgMTU6MTQ6NTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGNoZWNrL2dzdC9nc3RjYXBzLmM6IFRlc3RjYXNlIHRvIHNob3cgZXJyb3IgaW4gYnVmZmVyLW9uLWNhcHMgc2VyaWFsaXNhdGlvbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9nc3QvZ3N0Y2Fwcy5jOiAoU1RBUlRfVEVTVCksIChnc3RfY2Fwc19zdWl0ZSk6CisJICBUZXN0Y2FzZSB0byBzaG93IGVycm9yIGluIGJ1ZmZlci1vbi1jYXBzIHNlcmlhbGlzYXRpb24uCisKKzIwMDUtMDYtMjAgMTU6MTM6NDMgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZG9jcy9yYW5kb20vd2luZ28vcG9ydGluZy1wbHVnaW5zLXRvLTAuOTogQSBwaXRpZnVsIGRvY3VtZW50IEkgd2lsbCBiZSBhZGRpbmcgdG8gbGF0ZXIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDYtMjAgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGRvY3MvcmFuZG9tL3dpbmdvL3BvcnRpbmctcGx1Z2lucy10by0wLjk6IEEgcGl0aWZ1bCBkb2N1bWVudCBJCisJICB3aWxsIGJlIGFkZGluZyB0byBsYXRlci4KKworMjAwNS0wNi0yMCAxMTo0MToxNyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0c3lzdGVtY2xvY2suYyAoZ3N0X3N5c3RlbV9jbG9ja19pbml0KTogVW5sb2NrIHRoZSBjbG9jayBpZiBpdHMgc29ja3MgZmlsbCB3aXRoIHJvY2tzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTA2LTIwICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvZ3N0c3lzdGVtY2xvY2suYyAoZ3N0X3N5c3RlbV9jbG9ja19pbml0KTogVW5sb2NrIHRoZSBjbG9jaworCSAgaWYgaXRzIHNvY2tzIGZpbGwgd2l0aCByb2Nrcy4KKwkgIChnc3Rfc3lzdGVtX2Nsb2NrX29idGFpbik6IFNldCB0aGUgbmFtZSBvbiBvYmplY3QgY29uc3RydWN0aW9uLgorCSAgQXZvaWQgZG91YmxlLWNoZWNrZWQgbG9ja2luZy4KKworMjAwNS0wNi0yMCAxMTozMjoxNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2dzdHVyaS5jOiBGaXggcG90ZW50aWFsIGVuZGxlc3MgbG9vcC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dXJpLmM6IChnc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpKToKKwkgIEZpeCBwb3RlbnRpYWwgZW5kbGVzcyBsb29wLgorCisyMDA1LTA2LTIwIDExOjI3OjM2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogY29uZmlndXJlLmFjOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvZ2hvc3RwYWRzLy5naXRpZ25vcmU6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2dob3N0cGFkcy9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvZ2hvc3RwYWRzL2dob3N0cGFkcy5jOgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtOgorCSogdGVzdHN1aXRlL2dob3N0cGFkcy8uZ2l0aWdub3JlOgorCSogdGVzdHN1aXRlL2dob3N0cGFkcy9NYWtlZmlsZS5hbToKKwkqIHRlc3RzdWl0ZS9naG9zdHBhZHMvZ2hvc3RwYWRzLmM6CisJICByZW1vdmUgYW5vdGhlciB0ZXN0IHRoYXQncyBvYnNvbGV0ZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICByZW1vdmUgYW5vdGhlciB0ZXN0IHRoYXQncyBvYnNvbGV0ZQorCisyMDA1LTA2LTIwIDExOjIzOjU5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogY29uZmlndXJlLmFjOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2xvY2svLmdpdGlnbm9yZToKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2xvY2svTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2Nsb2NrL2Nsb2NrMS5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jbG9jay9jbG9jazIuYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2xvY2svc2lnbmVkbmVzcy5jOgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtOgorCSogdGVzdHN1aXRlL2Nsb2NrLy5naXRpZ25vcmU6CisJKiB0ZXN0c3VpdGUvY2xvY2svTWFrZWZpbGUuYW06CisJKiB0ZXN0c3VpdGUvY2xvY2svY2xvY2sxLmM6CisJKiB0ZXN0c3VpdGUvY2xvY2svY2xvY2syLmM6CisJKiB0ZXN0c3VpdGUvY2xvY2svc2lnbmVkbmVzcy5jOgorCSAgcmVtb3ZlIGNsb2NrIHRlc3RzdWl0ZSwgaW1wb3J0YW50IHN0dWZmIGFscmVhZHkgbW92ZWQgdG8gY2hlY2sKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVtb3ZlIGNsb2NrIHRlc3RzdWl0ZSwgaW1wb3J0YW50IHN0dWZmIGFscmVhZHkgbW92ZWQgdG8gY2hlY2sKKworMjAwNS0wNi0yMCAxMToxODo0MCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2JpbnMvLmdpdGlnbm9yZToKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvYmlucy9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvYmlucy9pbnRlcmZhY2UuYzoKKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbToKKwkqIHRlc3RzdWl0ZS9iaW5zLy5naXRpZ25vcmU6CisJKiB0ZXN0c3VpdGUvYmlucy9NYWtlZmlsZS5hbToKKwkqIHRlc3RzdWl0ZS9iaW5zL2ludGVyZmFjZS5jOgorCSAgcmVtb3ZlIHRlc3QgdGhhdCB3YXMgYWxyZWFkeSBtb3ZlZCB0byBjaGVjaworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICByZW1vdmUgdGVzdCB0aGF0IHdhcyBhbHJlYWR5IG1vdmVkIHRvIGNoZWNrCisKKzIwMDUtMDYtMTkgMTE6MzI6NDIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBjaGVjay9NYWtlZmlsZS5hbTogYWRkIGdzdHRhZworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL01ha2VmaWxlLmFtOgorCSAgYWRkIGdzdHRhZworCSAgKiBjaGVjay9nc3QvZ3N0dGFnLmM6IChjaGVja190YWdzKSwgKFNUQVJUX1RFU1QpLCAoZ3N0X3RhZ19zdWl0ZSksCisJICAobWFpbik6CisJICBtb3ZlIG92ZXIgZnJvbSB0ZXN0c3VpdGUgZGlyIGFuZCBjbGVhbiB1cAorCSAgKiBjb25maWd1cmUuYWM6CisJICAqIGdzdC9nc3R0YWcuYzoKKwkgICogdGVzdHN1aXRlL01ha2VmaWxlLmFtOgorCSAgKiB0ZXN0c3VpdGUvdGFncy8uY3ZzaWdub3JlOgorCSAgKiB0ZXN0c3VpdGUvdGFncy9NYWtlZmlsZS5hbToKKwkgICogdGVzdHN1aXRlL3RhZ3MvbWVyZ2UuYzoKKwkgIHJlbW92ZSB0ZXN0c3VpdGUvdGFncworCisyMDA1LTA2LTE5IDEwOjU0OjEyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0YmluLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdGJ1ZmZlci5zZ21sOgorCSogZG9jcy9nc3QvdG1wbC9nc3RjYXBzLnNnbWw6CisJKiBkb2NzL2dzdC90bXBsL2dzdHN0cnVjdHVyZS5zZ21sOgorCSogZ3N0L2dzdGJpbi5oOgorCSogZ3N0L2dzdGJ1ZmZlci5oOgorCSAgc29tZSBtb3JlIGRvY3MgY2xlYW51cAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBzb21lIG1vcmUgZG9jcyBjbGVhbnVwCisKKzIwMDUtMDYtMTkgMTA6MzE6NDIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBjb25maWd1cmUuYWM6CisJKiB0ZXN0cy9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL2J1ZnNwZWVkLy5naXRpZ25vcmU6CisJKiB0ZXN0cy9idWZzcGVlZC9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL2J1ZnNwZWVkL1JFQURNRToKKwkqIHRlc3RzL2J1ZnNwZWVkL2dzdG1lbXBvb2wuYzoKKwkqIHRlc3RzL2J1ZnNwZWVkL2dzdG1lbXBvb2wuaDoKKwkqIHRlc3RzL2J1ZnNwZWVkL3Rlc3QxLmM6CisJKiB0ZXN0cy9idWZzcGVlZC90ZXN0Mi5jOgorCSogdGVzdHMvc3BpZGV5X2JlbmNoLmM6CisJICByZW1vdmUgYnVmc3BlZWQgYW5kIHNwaWRleV9iZW5jaAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICByZW1vdmUgYnVmc3BlZWQgYW5kIHNwaWRleV9iZW5jaAorCisyMDA1LTA2LTE5IDEwOjIyOjQ3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKKwkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZW51bXR5cGVzLnNnbWw6CisJKiB3aW4zMi9nc3RlbnVtdHlwZXMuYzoKKwkgIGNsZWFuIHVwIGRvY3MgYSBsaXR0bGUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgY2xlYW4gdXAgZG9jcyBhIGxpdHRsZQorCisyMDA1LTA2LTE5IDAwOjUyOjMxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgY2hlY2svZ3N0Y2hlY2suaDogYWRkIG1hY3JvcyBmb3IgY2hlY2tpbmcgcmVmY291bnRzIG9uIG9iamVjdHMgYW5kIGNhcHMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9nc3RjaGVjay5oOgorCSAgYWRkIG1hY3JvcyBmb3IgY2hlY2tpbmcgcmVmY291bnRzIG9uIG9iamVjdHMgYW5kIGNhcHMKKwkgICogY2hlY2svZ3N0L2dzdHBhZC5jOiAoU1RBUlRfVEVTVCksIChnc3RfcGFkX3N1aXRlKToKKwkgIGFkZCBzb21lIG1vcmUgdW5pdCB0ZXN0cworCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2xpbmtfY2hlY2tfY29tcGF0aWJsZV91bmxvY2tlZCksCisJICAoZ3N0X3BhZF9saW5rX3ByZXBhcmUpLCAoZ3N0X3BhZF9saW5rKSwgKGdzdF9wYWRfZ2V0X2FsbG93ZWRfY2Fwcyk6CisJICBmaXggbGVha2VkIHJlZmNvdW50cyAoSSBob3BlIDopKSBzbyB1bml0dGVzdCB3b3JrcworCSAgKiBnc3QvZ3N0cGFkLmg6CisJICB3aGl0ZXNwYWNlIHJlbW92YWwKKworMjAwNS0wNi0xOCAyMjozMzoxNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIE5FV1M6CisJKiBSRUxFQVNFOgorCSogY29uZmlndXJlLmFjOgorCSAgYmFjayB0byBoZWFkCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGJhY2sgdG8gaGVhZAorCisyMDA1LTA2LTE3IDEyOjAwOjM1ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkqIENoYW5nZUxvZzoKKwkgIGNoYW5nZWxvZworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBjaGFuZ2Vsb2cKKworMjAwNS0wNi0xNyAxMTo1ODo0OCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNlc2luay5jIChnc3RfYmFzZXNpbmtfY2hhaW4pOiBSZW1vdmUgYm9ndXMgYXNzZXJ0OyBpdCdzIGFsd2F5cyBwb3NzaWJsZSB0aGF0IHRoZSBwYWQgZ2V0cyBkZWFjdGl2YXRlZCAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNi0xNyAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYyAoZ3N0X2Jhc2VzaW5rX2NoYWluKTogUmVtb3ZlIGJvZ3VzCisJICBhc3NlcnQ7IGl0J3MgYWx3YXlzIHBvc3NpYmxlIHRoYXQgdGhlIHBhZCBnZXRzIGRlYWN0aXZhdGVkIGluCisJICBiZXR3ZWVuIHRoZSBjaGVja3MgaW4gZ3N0cGFkLmMgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbi4gUmVseSBvbgorCSAgZmluaXNoX3ByZXJvbGwoKSB0byByZXR1cm4gYSBGTFVTSElORyBvciBzaW1pbGFyIGluc3RlYWQgb2Ygb24gdGhlCisJICBhc3NlcnQuCisKKzIwMDUtMDYtMTcgMTE6MzM6MjcgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYyAoZ3N0X2Jhc2VzaW5rX2V2ZW50KTogT25seSB3YWl0IGZvciB0aGUgY2xvY2sgYW5kIHBvc3QgYW4gRU9TIG1lc3NhZ2UgaWYgd2UgY29tZSBvdXQgb2YgZmluaXNoLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDYtMTcgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmMgKGdzdF9iYXNlc2lua19ldmVudCk6IE9ubHkgd2FpdCBmb3IgdGhlCisJICBjbG9jayBhbmQgcG9zdCBhbiBFT1MgbWVzc2FnZSBpZiB3ZSBjb21lIG91dCBvZiBmaW5pc2hfcHJlcm9sbCBpbgorCSAgdGhlIHBsYXlpbmcgc3RhdGUuCisKKzIwMDUtMDYtMTcgMDk6NTg6MzggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBSRUFETUU6CisJICBpbmNvcnBvcmF0ZSBwbHVnaW5zIHN0dWZmIGFuZCB1bmluc3RhbGxlZCBzdHVmZgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBpbmNvcnBvcmF0ZSBwbHVnaW5zIHN0dWZmIGFuZCB1bmluc3RhbGxlZCBzdHVmZgorCisyMDA1LTA2LTE3IDA5OjMyOjE5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2luZGV4ZXJzLy5naXRpZ25vcmU6CisJKiBwbHVnaW5zL2luZGV4ZXJzLy5naXRpZ25vcmU6CisJICBpZ25vcmUgbW9yZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBpZ25vcmUgbW9yZQorCisyMDA1LTA2LTE3IDA5OjEyOjMzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogY2hlY2svZ3N0Ly5naXRpZ25vcmU6CisJKiBnc3QvYmFzZS8uZ2l0aWdub3JlOgorCSogZ3N0L2VsZW1lbnRzLy5naXRpZ25vcmU6CisJKiBnc3QvcGFyc2UvLmdpdGlnbm9yZToKKwkqIGdzdC9yZWdpc3RyaWVzLy5naXRpZ25vcmU6CisJKiBnc3Qvc2NoZWR1bGVycy8uZ2l0aWdub3JlOgorCSogbGlicy9nc3QvYmFzZS8uZ2l0aWdub3JlOgorCSogbGlicy9nc3QvYnl0ZXN0cmVhbS8uZ2l0aWdub3JlOgorCSogbGlicy9nc3QvY29udHJvbC8uZ2l0aWdub3JlOgorCSogbGlicy9nc3QvZGF0YXByb3RvY29sLy5naXRpZ25vcmU6CisJKiBsaWJzL2dzdC9nZXRiaXRzLy5naXRpZ25vcmU6CisJKiBwbHVnaW5zL2VsZW1lbnRzLy5naXRpZ25vcmU6CisJKiB0ZXN0cy9jaGVjay9nc3QvLmdpdGlnbm9yZToKKwkqIHRvb2xzLy5naXRpZ25vcmU6CisJICBpZ25vcmUgbW9yZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBpZ25vcmUgbW9yZQorCisyMDA1LTA2LTE3IDA4OjU5OjQxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogLmdpdGlnbm9yZToKKwkqIENoYW5nZUxvZzoKKwkqIFJFQURNRToKKwkqIGNoZWNrLy5naXRpZ25vcmU6CisJKiBleGFtcGxlcy9tYW51YWwvLmdpdGlnbm9yZToKKwkqIGdzdC8uZ2l0aWdub3JlOgorCSogdGVzdHMvY2hlY2svLmdpdGlnbm9yZToKKwkqIHRlc3RzL29sZC9leGFtcGxlcy9tYW51YWwvLmdpdGlnbm9yZToKKwkgIGlnbm9yZSBtb3JlOyBmaXggUkVBRE1FCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGlnbm9yZSBtb3JlOyBmaXggUkVBRE1FCisKKzIwMDUtMDYtMTYgMTc6NTA6MTYgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJICBnc3QvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOiBBbGxvdyBOVUxMIGFzIHBvc3NpYmxlIHZhbHVlIGZvciBmaWx0ZXJfY2FwcyBwcm9wZXJ0eSwgaW5kaWNhdGluZyBHU1RfQ0FQU19BTlkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzogKGdzdF9jYXBzZmlsdGVyX2NsYXNzX2luaXQpLAorCSAgKGdzdF9jYXBzZmlsdGVyX3NldF9wcm9wZXJ0eSk6IEFsbG93IE5VTEwgYXMgcG9zc2libGUgdmFsdWUKKwkgIGZvciBmaWx0ZXJfY2FwcyBwcm9wZXJ0eSwgaW5kaWNhdGluZyBHU1RfQ0FQU19BTlkuCisKKzIwMDUtMDYtMDkgMTM6MzM6MDAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiBmaXggZGVidWcgb3V0cHV0CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGZha2VzcmMuYzogKGdzdF9mYWtlc3JjX2NyZWF0ZSk6CisJICBmaXggZGVidWcgb3V0cHV0CisJICAqIGdzdC9zY2hlZHVsZXJzL01ha2VmaWxlLmFtOgorCSAgdXNlIGxpYmdzdCBwcmVmaXgKKwkgICogZ3N0cmVhbWVyLnNwZWMuaW46CisJICBmaXggc3BlYyBmb3IgaXQKKworMjAwNS0wNi0wOSAxMjoyMzowNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGdzdHJlYW1lci5zcGVjLmluOiBjbGVhbiB1cAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdHJlYW1lci5zcGVjLmluOgorCSAgY2xlYW4gdXAKKworMjAwNS0wNi0wOSAxMjowOTo1NiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGdzdHJlYW1lci5zcGVjLmluOiBjbGVhbiB1cAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdHJlYW1lci5zcGVjLmluOgorCSAgY2xlYW4gdXAKKworMjAwNS0wNi0wOSAxMjowMzowNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIFRPRE86CisJKiBkb2NzL3JhbmRvbS9UT0RPLXByZS0wLjk6CisJICBoYXZlIGEgcmVhbCBUT0RPLCBtb3ZlIG9sZCBUT0RPCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGhhdmUgYSByZWFsIFRPRE8sIG1vdmUgb2xkIFRPRE8KKworMjAwNS0wNi0wOSAxMjowMDoyNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHBvL2FmLnBvOgorCSogcG8vYXoucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGUucG86CisJKiBwby9lbl9HQi5wbzoKKwkqIHBvL2ZyLnBvOgorCSogcG8vaXQucG86CisJKiBwby9uYi5wbzoKKwkqIHBvL25sLnBvOgorCSogcG8vcnUucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJICBwbyB1cGRhdGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHBvIHVwZGF0ZXMKKworMjAwNS0wNi0wOSAxMToxMjo1NyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHBvL2FmLnBvOgorCSogcG8vYXoucG86CisJKiBwby9jYS5wbzoKKwkqIHBvL2NzLnBvOgorCSogcG8vZGUucG86CisJKiBwby9lbl9HQi5wbzoKKwkqIHBvL2ZyLnBvOgorCSogcG8vaXQucG86CisJKiBwby9uYi5wbzoKKwkqIHBvL25sLnBvOgorCSogcG8vcnUucG86CisJKiBwby9zcS5wbzoKKwkqIHBvL3NyLnBvOgorCSogcG8vc3YucG86CisJKiBwby90ci5wbzoKKwkqIHBvL3VrLnBvOgorCSogcG8vdmkucG86CisJICB1cGRhdGUgdHJhbnNsYXRpb25zCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHVwZGF0ZSB0cmFuc2xhdGlvbnMKKworMjAwNS0wNi0wOCAyMjoxNjoyNyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0dXRpbHMuYzogUlBBRCBmaXhlcyBhbGwgYXJvdW5kLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTA2LTA4ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvZ3N0dXRpbHMuYzogUlBBRCBmaXhlcyBhbGwgYXJvdW5kLgorCSAgKGdzdF9lbGVtZW50X2xpbmtfcGFkcyk6IFJlZmNvdW50aW5nIGZpeGVzLgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOgorCSAgKiB0b29scy9nc3QteG1saW5zcGVjdC5jOgorCSAgKiBwYXJzZS9ncmFtbWFyLnk6CisJICAqIGdzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJICAqIGdzdC9nc3RxdWV1ZS5jOiBSUEFEIGZpeGVzLgorCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuaDoKKwkgICogZ3N0L2dzdGdob3N0cGFkLmM6IE5ldyBnaG9zdCBwYWQgaW1wbGVtZW50YXRpb24gYXMgZnVsbCBwcm94eQorCSAgcGFkcy4gVGhlIHRyaWNreSB0aGluZyBpcyB0aGV5IHByb3ZpZGUgYm90aCBzb3VyY2UgYW5kIHNpbmsKKwkgIGludGVyZmFjZXMsIHNpbmNlIHRoZXkgcHJveHkgdGhlIGludGVybmFsIHBhZCBmb3IgdGhlIGV4dGVybmFsCisJICBwYWQsIGFuZCB2aWNlIHZlcnNhLiBJbXBsZW1lbnQgd2l0aCBsb3dlci1sZXZlbCBQcm94eVBhZCBvYmplY3RzLAorCSAgd2l0aCB0aGUgaW50ZXJpb3IgcHJveHkgcGFkIGFzIGEgY2hpbGQgb2YgdGhlIGV4dGVyaW9yIGdob3N0IHBhZC4KKwkgIFNob3VsZCB3cml0ZSBhIGRvYyBvbiB0aGlzLgorCSAgKiBnc3QvZ3N0cGFkLmg6IHMvUlBBRC9QQUQvLCBzL1JlYWxQYWQvUGFkLy4KKwkgIChnc3RfcGFkX3NldF9uYW1lLCBnc3RfcGFkX3NldF9wYXJlbnQpOiBNYWNyb3MgcmVtb3ZlZCwgdXNlCisJICBnc3Rfb2JqZWN0IEFQSS4KKwkgICogZ3N0L2dzdHBhZC5jOiBCaWcgY2hhbmdlcy4gTm8gbW9yZSBzdHViIGJhc2UgR3N0UGFkLCBub3cgYWxsCisJICBwYWRzIGFyZSByZWFsIHBhZHMuIE5vIGdob3N0IHBhZHMgaW4gdGhpcyBmaWxlLiBOb3QgZG9jdW1lbnRpbmcKKwkgIHRoZSBteXJpYWQgcy9SUEFEL1BBRC8gYW5kIFJFQUxJWkUgZml4ZXMuCisJICAoZ3N0X3BhZF9jbGFzc19pbml0KTogQWRkIHByb3BlcnRpZXMgZm9yICJkaXJlY3Rpb24iIGFuZAorCSAgInRlbXBsYXRlIi4gQm90aCBhcmUgY29uc3RydWN0LW9ubHksIHNvIHRoZXkgY2FuJ3QgY2hhbmdlIGR1cmluZworCSAgdGhlIGxpZmUgb2YgdGhlIHBhZC4gRml4ZXMgcHJvcGVybHkgZGVyaXZpbmcgZnJvbSBHc3RQYWQuCisJICAoZ3N0X3BhZF9jdXN0b21fbmV3LCBnc3RfcGFkX2N1c3RvbV9uZXdfZnJvbV90ZW1wbGF0ZSk6IEdvbmUuIEZvcgorCSAgZGVyaXZlZCBvYmplY3RzLCBqdXN0IHNldCBwcm9wZXJ0aWVzIHdoZW4gY3JlYXRpbmcgdGhlIG9iamVjdHMgdmlhCisJICBnX29iamVjdF9uZXcuCisJICAoZ3N0X3BhZF9nZXRfcGFyZW50KTogSW1wbGVtZW50IGFzIGEgZnVuY3Rpb24sIHJldHVybiBOVUxMIGlmIHRoZQorCSAgcGFyZW50IGlzIG5vdCBhbiBlbGVtZW50LgorCSAgKGdzdF9wYWRfZ2V0X3JlYWxfcGFyZW50LCBnc3RfcGFkX2FkZF9naG9zdF9wYWQpCisJICAoZ3N0X3BhZF9yZW1vdmVfZ2hvc3RfcGFkLCBnc3RfcGFkX3JlYWxpemUpOiBSZW1vdmVkLgorCSAgKiBnc3QvZ3N0b2JqZWN0LmMgKGdzdF9vYmplY3RfY2xhc3NfaW5pdCk6IE1ha2UgbmFtZSBhIGNvbnN0cnVjdAorCSAgcHJvcGVydHkuIERvbid0IHNldCBpdCBpbiB0aGUgb2JqZWN0IGluaXQuCisJICAqIGdzdC9nc3RlbGVtZW50LmMgKGdzdF9lbGVtZW50X2FkZF9wYWQpOiBEb24ndCBhbGxvdyBhZGRpbmcgcGFkcworCSAgd2l0aCBVTktOT1dOIGRpcmVjdGlvbi4KKwkgIChnc3RfZWxlbWVudF9hZGRfZ2hvc3RfcGFkKTogUmVtb3ZlIG5vbi1vcnRob2dvbmFsIEFQSS4gUmVwbGFjZQorCSAgd2l0aCBnc3RfZWxlbWVudF9hZGRfcGFkIChlLCBnc3RfZ2hvc3RfcGFkX25ldyAobmFtZSwgcGFkKSkuCisJICAoZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCk6IFJlbW92ZSBnaG9zdC1wYWQgc3BlY2lhbCBjYXNlcy4KKwkgIChnc3RfZWxlbWVudF9wYWRzX2FjdGl2YXRlKTogUmVtb3ZlIHJwYWQgY3J1ZnQuCisJICAqIGdzdC9nc3RiaW4uYyAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGUpOiBVc2UgZ3N0X3BhZF9nZXRfcGFyZW50IHRvCisJICBjYXRjaCB0aGUgcGFkJ3MtcGFyZW50LW5vdC1hbi1lbGVtZW50IGNhc2UuCisJICAqIGdzdC9nc3QuaDogSW5jbHVkZSBnc3RnaG9zdHBhZC5oLgorCSAgKiBnc3QvZ3N0LmMgKGluaXRfcG9zdCk6IE5vIG1vcmUgcmVhbCwgZ2hvc3QgcGFkcy4KKwkgICogZ3N0L01ha2VmaWxlLmFtOiBBZGQgZ3N0Z2hvc3RwYWQuW2NoXS4KKwkgICogY2hlY2svTWFrZWZpbGUuYW06CisJICAqIGNoZWNrL2dzdC9nc3RiaW4uYzoKKwkgICogY2hlY2svZ3N0L2dzdGdob3N0cGFkLmMgKHRlc3RfZ2hvc3RfcGFkcyk6IENoZWNrIHRoYXQgbGlua2luZworCSAgaW50byBhIGJpbiBjcmVhdGVzIGdob3N0IHBhZHMsIGFuZCB0aGF0IHRoZSByZWZjb3VudHMgYXJlIHJpZ2h0LgorCSAgUGFydGx5IG1vdmVkIGZyb20gZ3N0YmluLmMuCisKKzIwMDUtMDYtMDggMTQ6MDA6MjEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBjaGVjay86IGlnbm9yZSBtb3JlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svZ3N0LWxpYnMvLmN2c2lnbm9yZToKKwkgICogY2hlY2svZ3N0Ly5jdnNpZ25vcmU6CisJICAqIGNoZWNrL3BpcGVsaW5lcy8uY3ZzaWdub3JlOgorCSAgaWdub3JlIG1vcmUKKwkgICogY2hlY2svcGlwZWxpbmVzL2NsZWFudXAuYzogKHNldHVwX3BpcGVsaW5lKSwgKHJ1bl9waXBlbGluZSksCisJICAoU1RBUlRfVEVTVCksIChjbGVhbnVwX3N1aXRlKSwgKG1haW4pOgorCSAgYWRkIHNvbWUgdGVzdHMgcmVsYXRlZCB0byBjbGVhbnVwIGFmdGVyIHJ1bm5pbmcgcGlwZWxpbmVzCisKKzIwMDUtMDYtMDggMTM6NTc6MTMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBjaGVjay9nc3QvZ3N0YnVmZmVyLmM6CisJKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6CisJICBhZGQgYSBHc3RCdWZmZXIgdW5pdCB0ZXN0CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFkZCBhIEdzdEJ1ZmZlciB1bml0IHRlc3QKKworMjAwNS0wNi0wOCAxMzo0NToyNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkgIHByZXZpb3VzIGNvbW1pdCBhY2NpZGVudGFsbHkgYWxzbyBhZGRlZCByZWZjb3VudCBkZWZpbmVzIGZvciBnc3RtaW5pb2JqZWN0LCBsb2dnaW5nIHRoYXQgbm93CisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHByZXZpb3VzIGNvbW1pdCBhY2NpZGVudGFsbHkgYWxzbyBhZGRlZCByZWZjb3VudCBkZWZpbmVzIGZvciBnc3RtaW5pb2JqZWN0LCBsb2dnaW5nIHRoYXQgbm93CisKKzIwMDUtMDYtMDggMTM6NDI6NTIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBjaGVjay9NYWtlZmlsZS5hbToKKwkqIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDoKKwkqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6CisJKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgIGFkZCBhICdwbHVnaW5zJyBkaXIgdG8gdGhlIFBMVUdJTl9QQVRIIGluIHRoZSB1bmluc3RhbGxlZCBzY3JpcHQgdG8gZHJvcCByYW5kb20gb3RoZXIgcGx1Z2luLWhhdmluZyBwcm9qZWN0cyBpbgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhZGQgYSAncGx1Z2lucycgZGlyIHRvIHRoZSBQTFVHSU5fUEFUSCBpbiB0aGUgdW5pbnN0YWxsZWQgc2NyaXB0IHRvIGRyb3AgcmFuZG9tIG90aGVyIHBsdWdpbi1oYXZpbmcgcHJvamVjdHMgaW4KKworMjAwNS0wNi0wOCAxMzo0MTo0OCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzoKKwkgIHdlIGRpZCBhIHByZXJlbGVhc2UKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgd2UgZGlkIGEgcHJlcmVsZWFzZQorCisyMDA1LTA2LTA4IDEzOjQxOjMxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2dzdG9iamVjdC5oOgorCSAgT0JKRUNUIGFjdHMgb24gb2JqIG5vdCBjYXBzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIE9CSkVDVCBhY3RzIG9uIG9iaiBub3QgY2FwcworCisyMDA1LTA2LTA4IDEzOjQxOjA1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6CisJICBhZGQgYSBkZWJ1ZyBsaW5lCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFkZCBhIGRlYnVnIGxpbmUKKworMjAwNS0wNi0wOCAxMzo0MDo0NiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkqIGdzdC9nc3RidWZmZXIuaDoKKwkgIHdoaXRlIHNwYWNlIGZpeGVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHdoaXRlIHNwYWNlIGZpeGVzCisKKzIwMDUtMDYtMDMgMTg6MjY6NTkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogQ2hhbmdlTG9nOgorCSogTWFrZWZpbGUuYW06CisJKiBjb21tb246CisJICBhZGRlZCBzdXBwb3J0IGZvciBodG1sIHVuaXQgdGVzdCBjb3ZlcmFnZSByZXBvcnRzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFkZGVkIHN1cHBvcnQgZm9yIGh0bWwgdW5pdCB0ZXN0IGNvdmVyYWdlIHJlcG9ydHMKKworMjAwNS0wNi0wMiAxNTo0NToxNiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkgIGdzdC9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6IEZyZWUgZXhpc3RpbmcgY2FwcyBpZiB0aGUgY2Fwc2ZpbHRlciBjaGFuZ2VzLiBBZGQgYSBGSVhNRSBhYm91dCBzZXR0aW5nIHRob3NlIGNhcHMgb24gdC4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6IChnc3RfY2Fwc2ZpbHRlcl9zZXRfcHJvcGVydHkpOgorCSAgRnJlZSBleGlzdGluZyBjYXBzIGlmIHRoZSBjYXBzZmlsdGVyIGNoYW5nZXMuIEFkZCBhIEZJWE1FIGFib3V0CisJICBzZXR0aW5nIHRob3NlIGNhcHMgb24gdGhlIHBhZHMuCisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkKSwgKGdob3N0X3VwKToKKwkgIEJlZm9yZSBhZGRpbmcgYSBnaG9zdCBwYWQgdG8gYSBwYXJlbnQgYmluLCBjaGVjayB0aGF0IHRoZXJlIGlzbid0CisJICBhbHJlYWR5IG9uZSBmb3IgdGhlIGVsZW1lbnQgb24gdGhlIGJpbi4gUHJldmVudHMgaW5maW5pdGUgcmVjdXJzaW9uCisJICB3aGVuIHVzaW5nIGRlY29kZWJpbiBpbiBwYXJzZSBwaXBlbGluZXMuIEFuZHkgc2F5cyBoZSdsbCByZXdyaXRlIHRoZQorCSAgd2F5IHRoaXMgd29ya3MgYW55d2F5LCBzbyBpZ25vcmUgdGhlIGhhY2suCisKKzIwMDUtMDYtMDIgMTE6MTI6MzQgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jIChkb19wdWxsX3R5cGVmaW5kKTogUXVlcnkgdGhlIGZpbGUgc2l6ZSwgcGFzcyBpdCBvbiB0byB0aGUgdHlwZSBmaW5kIGhlbHBlci4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNi0wMiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jIChkb19wdWxsX3R5cGVmaW5kKTogUXVlcnkgdGhlCisJICBmaWxlIHNpemUsIHBhc3MgaXQgb24gdG8gdGhlIHR5cGUgZmluZCBoZWxwZXIuCisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYyAoZ3N0X2Jhc2VzcmNfZG9fc2Vlayk6IFNldCB0aGUKKwkgIHNlZ21lbnRfc3RhcnQgYW5kIHNlZ21lbnRfZW5kIHByb3Blcmx5IGFjY29yZGluZyB0byB0aGUgc2VlaworCSAgbWV0aG9kLiBTZWdtZW50X2VuZCBpcyBzdGlsbCBhIGJpdCBmbGFreSBiZWNhdXNlIG9mZnNldCBjYW4gYmUKKwkgIG5lZ2F0aXZlIGZvciBDVVIgYW5kIEVORCBjYXNlcywgYnV0IGl0IHRha2VzIC0xIGFzIGFuICJ1bnNldCIKKwkgIHZhbHVlLgorCisyMDA1LTA2LTAyIDA5OjQyOjAyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvOiBCdWZmZXJhbGxvYzogcmV0dXJuIEdzdEZsb3dSZXR1cm4gdG8gbW9yZSBhY2N1cmF0bHkgcmVwb3J0IHdoeSBhbGxvY2F0aW9uIGZhaWxlZC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2VzaW5rX3BhZF9idWZmZXJfYWxsb2MpLAorCSAgKGdzdF9iYXNlX3NpbmtfYnVmZmVyX2FsbG9jKSwgKGdzdF9iYXNlc2lua19wcmVyb2xsX3F1ZXVlX3B1c2gpLAorCSAgKGdzdF9iYXNlc2lua19hY3RpdmF0ZSk6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfc2V0X2FjdGl2ZSksIChnc3RfcGFkX2xpbmtfcHJlcGFyZSksCisJICAoZ3N0X3BhZF9saW5rKSwgKGdzdF9wYWRfYWNjZXB0X2NhcHMpLCAoZ3N0X3BhZF9hbGxvY19idWZmZXIpLAorCSAgKGdzdF9wYWRfcXVlcnkpLCAoZ3N0X3BhZF9zdGFydF90YXNrKToKKwkgICogZ3N0L2dzdHBhZC5oOgorCSAgKiBnc3QvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9idWZmZXJhbGxvYyksCisJICAoZ3N0X3F1ZXVlX2hhbmRsZV9zaW5rX2V2ZW50KSwgKGdzdF9xdWV1ZV9jaGFpbik6CisJICBCdWZmZXJhbGxvYzogcmV0dXJuIEdzdEZsb3dSZXR1cm4gdG8gbW9yZSBhY2N1cmF0bHkgcmVwb3J0CisJICB3aHkgYWxsb2NhdGlvbiBmYWlsZWQuCisKKzIwMDUtMDYtMDIgMDk6Mzk6MjEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RwaXBlbGluZS5jOiBUYWtlIHNuYXBzaG90IG9mIHN0YXRlIHdpdGhvdXQgYmxvY2tpbmcuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBpcGVsaW5lLmM6IChnc3RfcGlwZWxpbmVfc2VuZF9ldmVudCk6CisJICBUYWtlIHNuYXBzaG90IG9mIHN0YXRlIHdpdGhvdXQgYmxvY2tpbmcuCisKKzIwMDUtMDYtMDIgMDg6MjY6NTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZGVzaWduLzogU21hbGwgZG9jIHVwZGF0ZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWNhcHMudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWNsb2Nrcy50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtbmVnb3RpYXRpb24udHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXByZXJvbGwudHh0OgorCSAgU21hbGwgZG9jIHVwZGF0ZXMKKworMjAwNS0wNS0zMCAxNjoyODo0MSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IFByb3RlY3QgbGFzdF9tZXNzYWdlIHByb3BlcnR5IGFzIGl0IGlzIGFjY2Vzc2VkIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogKGdzdF9pZGVudGl0eV9ldmVudCksCisJICAoZ3N0X2lkZW50aXR5X3RyYW5zZm9ybSksIChnc3RfaWRlbnRpdHlfZ2V0X3Byb3BlcnR5KToKKwkgIFByb3RlY3QgbGFzdF9tZXNzYWdlIHByb3BlcnR5IGFzIGl0IGlzIGFjY2Vzc2VkIGZyb20KKwkgIG11bHRpcGxlIHRocmVhZHMuCisKKzIwMDUtMDUtMzAgMTU6NTM6MDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RlbGVtZW50LmM6IFNsaWNrZXIgcGFkIGFjdGl2YXRpb24gY29kZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfaW5pdCksCisJICAoZ3N0X2VsZW1lbnRfcGFkc19hY3RpdmF0ZSksIChnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUpOgorCSAgU2xpY2tlciBwYWQgYWN0aXZhdGlvbiBjb2RlLgorCisyMDA1LTA1LTMwIDE1OjUxOjQwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvOiBNb3ZlIGVsZW1lbnRmYWN0b3J5IG1ldGhvZHMgdG8gc2VwYXJhdGUgLmggZmlsZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvTWFrZWZpbGUuYW06CisJICAqIGdzdC9nc3RlbGVtZW50Lmg6CisJICAqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5oOgorCSAgKiBnc3QvZ3N0dHlwZXMuaDoKKwkgIE1vdmUgZWxlbWVudGZhY3RvcnkgbWV0aG9kcyB0byBzZXBhcmF0ZSAuaCBmaWxlLgorCisyMDA1LTA1LTMwIDE1OjQ4OjQ1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBTbWFsbCB0eXBvIGZpeGVzLCBkb2MgdXBkYXRlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LW92ZXJ2aWV3LnR4dDoKKwkgICogZ3N0L2dzdHN5c3RlbWNsb2NrLmg6CisJICBTbWFsbCB0eXBvIGZpeGVzLCBkb2MgdXBkYXRlcy4KKworMjAwNS0wNS0zMCAxNTo0NjoxNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdC5jOiBSZW1vdmUgY3B1LW9wdCBmbGFnLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3QuYzogKGdzdF9pbml0X2dldF9wb3B0X3RhYmxlKSwgKGluaXRfcG9zdCksCisJICAoaW5pdF9wb3B0X2NhbGxiYWNrKToKKwkgIFJlbW92ZSBjcHUtb3B0IGZsYWcuCisKKzIwMDUtMDUtMzAgMTU6NDQ6NTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RidWZmZXIuKjogQXZvaWQgdHlwZWNoZWNraW5nIGluIHBsYWNlcyB3aGVyZSBub3QgbmVlZGVkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RidWZmZXIuYzogKGdzdF9zdWJidWZmZXJfZmluYWxpemUpLAorCSAgKGdzdF9idWZmZXJfY3JlYXRlX3N1YiksIChnc3RfYnVmZmVyX2lzX3NwYW5fZmFzdCk6CisJICAqIGdzdC9nc3RidWZmZXIuaDoKKwkgIEF2b2lkIHR5cGVjaGVja2luZyBpbiBwbGFjZXMgd2hlcmUgbm90IG5lZWRlZC4KKwkgIEFkZGVkIGFjY2Vzc29yIGZvciBtYWxsb2NfZGF0YS4KKworMjAwNS0wNS0zMCAxNTo0MTo1NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHBhZC5jOiBQcm9wYWdhdGUgZXJyb3JzIGZyb20gX3NldF9jYXBzKCkgaW4gY29uZmlndXJlX3NyYy9zaW5rIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIHJldHVybmluZyBUUlVFLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9yZWFsX3BhZF9pbml0KSwgKGdzdF9wYWRfc2V0X2FjdGl2ZSksCisJICAoZ3N0X3BhZF9saW5rX3ByZXBhcmUpLCAoZ3N0X3BhZF9saW5rKSwgKGdzdF9wYWRfYWNjZXB0X2NhcHMpLAorCSAgKGdzdF9wYWRfY29uZmlndXJlX3NpbmspLCAoZ3N0X3BhZF9jb25maWd1cmVfc3JjKSwKKwkgIChnc3RfcGFkX2FsbG9jX2J1ZmZlciksIChnc3RfcGFkX3F1ZXJ5KSwgKGdzdF9wYWRfc2VuZF9ldmVudCksCisJICAoZ3N0X3BhZF9zdGFydF90YXNrKToKKwkgIFByb3BhZ2F0ZSBlcnJvcnMgZnJvbSBfc2V0X2NhcHMoKSBpbiBjb25maWd1cmVfc3JjL3NpbmsKKwkgIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIHJldHVybmluZyBUUlVFLgorCSAgRkxVU0ggZXZlbnRzIGNhbiB0cmF2ZWwgdXAgYW5kIGRvd25zdHJlYW0KKworMjAwNS0wNS0zMCAxNTozNjowOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogSGFuZGxlIEVPUyBpbiBwcmVyb2xsLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZXNpbmtfcHJlcm9sbF9xdWV1ZV9wdXNoKSwKKwkgIChnc3RfYmFzZXNpbmtfYWN0aXZhdGUpOgorCSAgSGFuZGxlIEVPUyBpbiBwcmVyb2xsLgorCisyMDA1LTA1LTMwIDE1OjM0OjEzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0cXVldWUuYzogUmVtb3ZlIG9sZCBwaWVjZXMgb2YgY29kZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2hhbmRsZV9zaW5rX2V2ZW50KSwgKGdzdF9xdWV1ZV9jaGFpbiksCisJICAoZ3N0X3F1ZXVlX2xvb3ApLCAoZ3N0X3F1ZXVlX2hhbmRsZV9zcmNfZXZlbnQpOgorCSAgUmVtb3ZlIG9sZCBwaWVjZXMgb2YgY29kZQorCSAgRmx1c2hpbmcgdGhlIHF1ZXVlIGluIGFuIHVwc3RyZWFtIGV2ZW50IGlzIGEgdmVyeSBiYWQgaWRlYS4KKworMjAwNS0wNS0yOSAxMzo1Njo1NSArMDAwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUBnbm9tZS5vcmc+CisKKwkgIGZpbGUgZ3N0c2ltcGxlc2NoZWR1bGVyLmMgd2FzIGluaXRpYWxseSBhZGRlZCBvbiBicmFuY2ggQlJBTkNILUNPTVBBTlkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGZpbGUgZ3N0c2ltcGxlc2NoZWR1bGVyLmMgd2FzIGluaXRpYWxseSBhZGRlZCBvbiBicmFuY2ggQlJBTkNILUNPTVBBTlkuCisKKzIwMDUtMDUtMjcgMDk6Mjg6MDUgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSogQ2hhbmdlTG9nOgorCSAgcmVtb3ZlIGNvbmZsaWN0IGRvb2JlcnMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVtb3ZlIGNvbmZsaWN0IGRvb2JlcnMKKworMjAwNS0wNS0yNyAwOToyNzozNSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0bWluaW9iamVjdC5jIChnc3RfdmFsdWVfbWluaV9vYmplY3RfY29sbGVjdCk6IFVzZSBnc3RfdmFsdWVfc2V0X21pbmlfb2JqZWN0IHNvIGFzIHRvIGFkZCBhIHJlZiBvbiB0aGUgb2JqZWN0ICguLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNS0yNiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdG1pbmlvYmplY3QuYyAoZ3N0X3ZhbHVlX21pbmlfb2JqZWN0X2NvbGxlY3QpOiBVc2UKKwkgIGdzdF92YWx1ZV9zZXRfbWluaV9vYmplY3Qgc28gYXMgdG8gYWRkIGEgcmVmIG9uIHRoZSBvYmplY3QgKHdoaWNoCisJICB3aWxsIGJlIHJlbW92ZWQgd2hlbiB0aGUgdmFsdWUgaXMgdW5zZXQpLgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYyAoZ3N0X2Zha2VzaW5rX2NsYXNzX2luaXQpOiBGaXggc2lnbmFsCisJICBhcmcgdHlwZSBpbiA6OmhhbmRvZmYuCisJICAqIGdzdC9nc3RlbGVtZW50LmMgKGdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZSk6IEFsc28gZGVhY3RpdmF0ZQorCSAgcGFkcyBpbiBSRUFEWS0+TlVMTCwganVzdCBpbiBjYXNlIHRoZSBlbGVtZW50IGRpZG4ndCBtYWtlIGl0IHRvCisJICBQQVVTRUQuIFdpbmdvIHRlc3RlZCwgV2ltIGFwcHJvdmVkLgorCisyMDA1LTA1LTI2IDEwOjUwOjEyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0cGFkLmM6IEEgZmx1c2hpbmcgcGFkIGNhbm5vdCBiZSB1c2VkIHRvIGFsbG9jX2J1ZmZlciBmcm9tLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfc2V0X2FjdGl2ZSksIChnc3RfcGFkX2xpbmtfcHJlcGFyZSksCisJICAoZ3N0X3BhZF9saW5rKSwgKGdzdF9wYWRfYWNjZXB0X2NhcHMpLCAoZ3N0X3BhZF9hbGxvY19idWZmZXIpLAorCSAgKGdzdF9wYWRfcXVlcnkpLCAoZ3N0X3BhZF9zZW5kX2V2ZW50KSwgKGdzdF9wYWRfc3RhcnRfdGFzayk6CisJICBBIGZsdXNoaW5nIHBhZCBjYW5ub3QgYmUgdXNlZCB0byBhbGxvY19idWZmZXIgZnJvbS4KKworMjAwNS0wNS0yNiAxMDo0ODo1MyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdGJ1cy4qOiBJbXBsZW1lbnQgYSByZWFsIEdTb3VyY2UgYW5kIHVzZSBnX21haW5fY29udGV4dF93YWtldXAoKSB0byBzaWduYWwgbmV3IG1lc3NhZ2VzIGluc3RlYWQgb2YgdGhlIHNvY2tldHBhaXIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJ1cy5jOiAoZ3N0X2J1c19pbml0KSwgKGdzdF9idXNfZGlzcG9zZSksIChnc3RfYnVzX3Bvc3QpLAorCSAgKGdzdF9idXNfcG9wKSwgKGdzdF9idXNfc291cmNlX3ByZXBhcmUpLCAoZ3N0X2J1c19zb3VyY2VfY2hlY2spLAorCSAgKGdzdF9idXNfc291cmNlX2Rpc3BhdGNoKSwgKGdzdF9idXNfc291cmNlX2ZpbmFsaXplKSwKKwkgIChnc3RfYnVzX2NyZWF0ZV93YXRjaCksIChnc3RfYnVzX2FkZF93YXRjaF9mdWxsKToKKwkgICogZ3N0L2dzdGJ1cy5oOgorCSAgSW1wbGVtZW50IGEgcmVhbCBHU291cmNlIGFuZCB1c2UgZ19tYWluX2NvbnRleHRfd2FrZXVwKCkgdG8KKwkgIHNpZ25hbCBuZXcgbWVzc2FnZXMgaW5zdGVhZCBvZiB0aGUgc29ja2V0cGFpci4KKworMjAwNS0wNS0yNSAxOTozMzozOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0LzogRml4IHN0YXRlIGNoYW5nZXMgZm9yIG5vbiBzaW5rcy4gV2Ugbm93IGNoYW5nZSBzaW5rcywgdGhlbiBlbGVtZW50cyB3aXRoIHVuY29ubmVjdGVkIHNyY3BhZHMsIHRoZW4gdGhlIHJlc3QuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAoYmluX2VsZW1lbnRfaXNfc2luayksIChoYXNfYW5jZXN0b3IpLAorCSAgKGJpbl9lbGVtZW50X2lzX3NlbWlfc2luayksIChhcHBlbmRfY2hpbGQpLCAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGUpOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3NldF9hY3RpdmUpLCAoZ3N0X3BhZF9saW5rX3ByZXBhcmUpLAorCSAgKGdzdF9wYWRfbGluayksIChnc3RfcGFkX2FjY2VwdF9jYXBzKSwgKGdzdF9wYWRfcXVlcnkpLAorCSAgKGdzdF9wYWRfc2VuZF9ldmVudCksIChnc3RfcGFkX3N0YXJ0X3Rhc2spOgorCSAgKiBnc3QvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9pbml0KSwgKGdzdF9xdWV1ZV9sb2NrZWRfZmx1c2gpLAorCSAgKGdzdF9xdWV1ZV9oYW5kbGVfc2lua19ldmVudCksIChnc3RfcXVldWVfY2hhaW4pLCAoZ3N0X3F1ZXVlX2xvb3ApLAorCSAgKGdzdF9xdWV1ZV9zaW5rX2FjdGl2YXRlKSwgKGdzdF9xdWV1ZV9zcmNfYWN0aXZhdGUpLAorCSAgKGdzdF9xdWV1ZV9jaGFuZ2Vfc3RhdGUpOgorCSAgKiBnc3QvZ3N0cXVldWUuaDoKKwkgIEZpeCBzdGF0ZSBjaGFuZ2VzIGZvciBub24gc2lua3MuIFdlIG5vdyBjaGFuZ2Ugc2lua3MsIHRoZW4gZWxlbWVudHMKKwkgIHdpdGggdW5jb25uZWN0ZWQgc3JjcGFkcywgdGhlbiB0aGUgcmVzdC4KKwkgIE1vcmUgZWZmaWNpZW50IHF1ZXVlIHVubG9ja2luZyBpbiBmbHVzaCBhbmQgc3RhdGUgY2hhbmdlcy4KKwkgIFNldCB0aGUgcGFkIGFjdGl2YXRlIG1vZGUgZXZlbiBpZiBpdCBkb2VzIG5vdCBoYXZlIGFuIGFjdGl2YXRlCisJICBmdW5jdGlvbi4KKworMjAwNS0wNS0yNSAxNjowOTozNCArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgorCisJKiBDaGFuZ2VMb2c6CisJKiBnc3QvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50Lmg6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5oOgorCSAgaGFwcGlmeSBidWlsZGJvdAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBoYXBwaWZ5IGJ1aWxkYm90CisKKzIwMDUtMDUtMjUgMTU6NTc6NTcgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBEb24ndCBnbyBpbiBwdWxsIG1vZGUgZm9yIG5vbi1zZWVrYWJsZSBzb3VyY2VzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlc3JjX2FjdGl2YXRlKToKKwkgIERvbid0IGdvIGluIHB1bGwgbW9kZSBmb3Igbm9uLXNlZWthYmxlIHNvdXJjZXMuCisJICAqIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9pbml0KSwKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfZGlzcG9zZSksIChnc3RfdHlwZV9maW5kX2hhbmRsZV9zcmNfcXVlcnkpLAorCSAgKGZyZWVfZW50cnkpLCAoc3RvcF90eXBlZmluZGluZyksCisJICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2hhbmRsZV9ldmVudCksIChmaW5kX3BlZWspLAorCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9jaGFpbiksIChkb19wdWxsX3R5cGVmaW5kKSwKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfY2hhbmdlX3N0YXRlKToKKwkgIEFsbG93IHR5cGVmaW5kaW5nICh3L28gc2Vla2luZykgaW4gcHVzaC1tb2RlLCBzaW1wbGlmaWVkIHZlcnNpb24KKwkgIG9mIHdoYXQgd2FzIGluIDAuOC4KKwkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfYnVmZmVyX2pvaW4pOgorCSAgKiBnc3QvZ3N0dXRpbHMuaDoKKwkgIGdzdF9idWZmZXJfam9pbigpIGZyb20gMC44LgorCisyMDA1LTA1LTI1IDEzOjU5OjE4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0cGFkLmM6IERpc2FibGUgYXR0ZW1wdCBhdCBtb2RlIHN3aXRjaGluZyB1bnRpbCBpdCBpcyBmaWd1cmVkIG91dC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3NldF9hY3RpdmUpLCAoZ3N0X3BhZF9saW5rX3ByZXBhcmUpLAorCSAgKGdzdF9wYWRfbGluayksIChnc3RfcGFkX2FjY2VwdF9jYXBzKSwgKGdzdF9wYWRfcXVlcnkpLAorCSAgKGdzdF9wYWRfc2VuZF9ldmVudCksIChnc3RfcGFkX3N0YXJ0X3Rhc2spOgorCSAgRGlzYWJsZSBhdHRlbXB0IGF0IG1vZGUgc3dpdGNoaW5nIHVudGlsIGl0IGlzIGZpZ3VyZWQgb3V0LgorCisyMDA1LTA1LTI1IDExOjUwOjExICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvOiBJbXBsZW1lbnQgZ3N0X3BhZF9wYXVzZS9zdGFydC9zdG9wX3Rhc2soKSwgdGFrZSBTVFJFQU0gbG9jayBpbiB0YXNrIGZ1bmN0aW9uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGFkYXB0ZXIuYzogKGdzdF9hZGFwdGVyX3BlZWspLCAoZ3N0X2FkYXB0ZXJfZmx1c2gpOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2VzaW5rX3ByZXJvbGxfcXVldWVfcHVzaCksCisJICAoZ3N0X2Jhc2VzaW5rX2ZpbmlzaF9wcmVyb2xsKSwgKGdzdF9iYXNlc2lua19jaGFpbiksCisJICAoZ3N0X2Jhc2VzaW5rX2xvb3ApLCAoZ3N0X2Jhc2VzaW5rX2FjdGl2YXRlKSwKKwkgIChnc3RfYmFzZXNpbmtfY2hhbmdlX3N0YXRlKToKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2VzcmNfZG9fc2VlayksCisJICAoZ3N0X2Jhc2VzcmNfZ2V0X3JhbmdlKSwgKGdzdF9iYXNlc3JjX2xvb3ApLAorCSAgKGdzdF9iYXNlc3JjX2FjdGl2YXRlKToKKwkgICogZ3N0L2VsZW1lbnRzL2dzdHRlZS5jOiAoZ3N0X3RlZV9zaW5rX2FjdGl2YXRlKToKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9kaXNwb3NlKSwgKGdzdF9yZWFsX3BhZF9jbGFzc19pbml0KSwKKwkgIChnc3RfcmVhbF9wYWRfaW5pdCksIChnc3RfcmVhbF9wYWRfc2V0X3Byb3BlcnR5KSwKKwkgIChnc3RfcmVhbF9wYWRfZ2V0X3Byb3BlcnR5KSwgKGdzdF9wYWRfc2V0X2FjdGl2ZSksCisJICAoZ3N0X3BhZF9pc19hY3RpdmUpLCAoZ3N0X3BhZF9nZXRfcXVlcnlfdHlwZXMpLCAoZ3N0X3BhZF91bmxpbmspLAorCSAgKGdzdF9wYWRfbGlua19wcmVwYXJlKSwgKGdzdF9wYWRfbGluayksIChnc3RfcGFkX2dldF9yZWFsX3BhcmVudCksCisJICAoZ3N0X3JlYWxfcGFkX2dldF9jYXBzX3VubG9ja2VkKSwgKGdzdF9wYWRfcGVlcl9nZXRfY2FwcyksCisJICAoZ3N0X3BhZF9hY2NlcHRfY2FwcyksIChnc3RfcGFkX2dldF9wZWVyKSwgKGdzdF9wYWRfcmVhbGl6ZSksCisJICAoZ3N0X3BhZF9ldmVudF9kZWZhdWx0X2Rpc3BhdGNoKSwgKGdzdF9wYWRfZXZlbnRfZGVmYXVsdCksCisJICAoZ3N0X3BhZF9kaXNwYXRjaGVyKSwgKGdzdF9wYWRfcXVlcnkpLCAoZ3N0X3JlYWxfcGFkX2Rpc3Bvc2UpLAorCSAgKGdzdF9wYWRfc2F2ZV90aHlzZWxmKSwgKGhhbmRsZV9wYWRfYmxvY2spLCAoZ3N0X3BhZF9jaGFpbiksCisJICAoZ3N0X3BhZF9wdXNoKSwgKGdzdF9wYWRfZ2V0X3JhbmdlKSwgKGdzdF9wYWRfcHVsbF9yYW5nZSksCisJICAoZ3N0X3BhZF9zZW5kX2V2ZW50KSwgKGdzdF9wYWRfc3RhcnRfdGFzayksIChnc3RfcGFkX3BhdXNlX3Rhc2spLAorCSAgKGdzdF9wYWRfc3RvcF90YXNrKToKKwkgICogZ3N0L2dzdHBhZC5oOgorCSAgKiBnc3QvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9oYW5kbGVfc2lua19ldmVudCksIChnc3RfcXVldWVfY2hhaW4pLAorCSAgKGdzdF9xdWV1ZV9sb29wKSwgKGdzdF9xdWV1ZV9zcmNfYWN0aXZhdGUpOgorCSAgKiBnc3QvZ3N0dGFzay5jOiAoZ3N0X3Rhc2tfaW5pdCksIChnc3RfdGFza19zZXRfbG9jayksCisJICAoZ3N0X3Rhc2tfZ2V0X3N0YXRlKToKKwkgICogZ3N0L2dzdHRhc2suaDoKKwkgICogZ3N0L3NjaGVkdWxlcnMvdGhyZWFkc2NoZWR1bGVyLmM6CisJICAoZ3N0X3RocmVhZF9zY2hlZHVsZXJfdGFza19zdGFydCksIChnc3RfdGhyZWFkX3NjaGVkdWxlcl9mdW5jKToKKwkgIEltcGxlbWVudCBnc3RfcGFkX3BhdXNlL3N0YXJ0L3N0b3BfdGFzaygpLCB0YWtlIFNUUkVBTSBsb2NrCisJICBpbiB0YXNrIGZ1bmN0aW9uLgorCSAgUmVtb3ZlIEFDVElWRSBwYWQgZmxhZywgdXNlIEZMVVNISU5HIGV2ZXJ5d2hlcmUKKwkgIEFkZGVkIF9wYWRfY2hhaW4oKSwgX3BhZF9nZXRfcmFuZ2UoKSB0byBjYWxsIGNoYWluL2dldHJhbmdlCisJICBmdW5jdGlvbnMuCisJICBBZGQgbG9ja3MgYXJvdW5kIElTX0ZMVVNISU5HIHdoZW4gcmVhZGluZy4KKwkgIFRha2UgU1RSRUFNIGxvY2sgaW4gY2hhaW4oKSwgZ2V0X3JhbmdlKCkgZnVuY3Rpb25zIHNvIHBsdWdpbnMKKwkgIGRvbid0IG5lZWQgdG8gdGFrZSBpdCBhbnltb3JlLgorCisyMDA1LTA1LTI1IDExOjI2OjE0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICB0b29scy9nc3QtbGF1bmNoLmM6IFVucmVmIG1lc3NhZ2UgYWZ0ZXIgdXNpbmcgaXRzIGNvbnRlbnRzIGluc3RlYWQgb2YgYmVmb3JlLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKGV2ZW50X2xvb3ApOgorCSAgVW5yZWYgbWVzc2FnZSBhZnRlciB1c2luZyBpdHMgY29udGVudHMgaW5zdGVhZCBvZgorCSAgYmVmb3JlLgorCisyMDA1LTA1LTI0IDE2OjQ3OjA2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBkb2NzL2Rlc2lnbi86IERvY3MgdXBkYXRlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9kcmFmdC1naG9zdHBhZHMudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9kcmFmdC1wdXNoLXB1bGwudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9kcmFmdC1xdWVyeS50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtb3ZlcnZpZXcudHh0OgorCSAgRG9jcyB1cGRhdGVzLgorCSAgQWRkZWQgZ2VuZXJhbCBvdmVydmlldyBkb2MuCisJICBBZGRlZCBkcmFmdCBnaG9zdHBhZCByZXBsYWNlbWVudCBpZGVhLgorCisyMDA1LTA1LTIyIDA0OjI2OjQxICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSAgZG9jcy9nc3QvdG1wbC9vbGQvOiBJIGRpZG4ndCBpbnRlbmQgdG8gYWRkIHRoZXNlIG9yIGNoZWNrIHRoZW0gaW4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvdG1wbC9vbGQvR3N0QmluLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvb2xkL0dzdEJ1ZmZlci5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL29sZC9Hc3RDYXBzLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvb2xkL0dzdENsb2NrLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvb2xkL0dzdENvbXBhdC5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL29sZC9Hc3REYXRhLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvb2xkL0dzdEVsZW1lbnQuc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9vbGQvR3N0RXZlbnQuc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9vbGQvR3N0SW5kZXguc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9vbGQvR3N0U3RydWN0dXJlLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvb2xkL0dzdFRhZy5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL29sZC9jb3RocmVhZHMuc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9vbGQvY290aHJlYWRzX2NvbXBhdC5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nZXR0ZXh0LnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2dvYmplY3QyZ3RrLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2dyYW1tYXIudGFiLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2dzdC1pMThuLWFwcC5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nc3QtaTE4bi1saWIuc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9vbGQvZ3N0X3ByaXZhdGUuc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9vbGQvZ3N0YWdncmVnYXRvci5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nc3RhcmNoLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2dzdGF0b21pY19pbXBsLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2dzdGJ1ZmZlcnN0b3JlLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2dzdGRhdGFfcHJpdmF0ZS5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nc3RkaXNrc2luay5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nc3RkaXNrc3JjLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2dzdGVsZW1lbnRmYWN0b3J5LnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2dzdGV4dHJhdHlwZXMuc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9vbGQvZ3N0ZmFrZXNpbmsuc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9vbGQvZ3N0ZmFrZXNyYy5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nc3RmZHNpbmsuc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9vbGQvZ3N0ZmRzcmMuc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9vbGQvZ3N0ZmlsZXNpbmsuc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9vbGQvZ3N0ZmlsZXNyYy5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nc3RodHRwc3JjLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2dzdGlkZW50aXR5LnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2dzdGluZGV4ZmFjdG9yeS5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nc3RtYXJzaGFsLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2dzdG1kNXNpbmsuc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9vbGQvZ3N0bXVsdGlkaXNrc3JjLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2dzdG11bHRpZmlsZXNyYy5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nc3RwYWR0ZW1wbGF0ZS5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nc3RwaXBlZmlsdGVyLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2dzdHNjaGVkdWxlcmZhY3Rvcnkuc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9vbGQvZ3N0c2VhcmNoZnVuY3Muc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9vbGQvZ3N0c2hhcGVyLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2dzdHNwaWRlci5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nc3RzcGlkZXJpZGVudGl0eS5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nc3RzdGF0aXN0aWNzLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2dzdHRlZS5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nc3R0aW1lY2FjaGUuc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9vbGQvZ3N0dHlwZWZpbmRmYWN0b3J5LnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2dzdHhtbHJlZ2lzdHJ5LnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2d0aHJlYWQtY290aHJlYWRzLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvb2xkL3R5cGVzLnNnbWw6CisJICBJIGRpZG4ndCBpbnRlbmQgdG8gYWRkIHRoZXNlIG9yIGNoZWNrIHRoZW0gaW4uCisKKzIwMDUtMDUtMjAgMTI6NDc6MDUgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KKworCSogZ3N0cmVhbWVyLnNwZWMuaW46CisJICB1cGRhdGUgc3BlYyBmaWxlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHVwZGF0ZSBzcGVjIGZpbGUKKworMjAwNS0wNS0xOSAxOTo1NDowMSArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkgIGNvbmZpZ3VyZS5hYzogVXNlIC1uby1jb21tb24gZXZlcnl3aGVyZS4gIEluIGEgc2FuZSB3b3JsZCwgaXQgd291bGQgYmUgdGhlIGRlZmF1bHQgaW4gbGlidG9vbCwgYmVjYXVzZSB3aXRob3V0IGl0LCB5by4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNvbmZpZ3VyZS5hYzogVXNlIC1uby1jb21tb24gZXZlcnl3aGVyZS4gIEluIGEgc2FuZSB3b3JsZCwgaXQKKwkgIHdvdWxkIGJlIHRoZSBkZWZhdWx0IGluIGxpYnRvb2wsIGJlY2F1c2Ugd2l0aG91dCBpdCwgeW91IGNhbid0CisJICBidWlsZCBETExzIG9uIFdpbmRvd3MuCisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6IFJlbW92ZSBHc3RDcHUsIEdzdERhdGEsIEdzdFRocmVhZAorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdGNwdS5zZ21sOgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdGRhdGEuc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9nc3R0aHJlYWQuc2dtbDoKKworMjAwNS0wNS0xOSAxOTo0MToxMiArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkgIGdzdC9nc3RtaW5pb2JqZWN0Lio6IEFkZCBHVmFsdWUgc2V0L2dldCBmdW5jdGlvbnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdG1pbmlvYmplY3QuYzogKGdzdF92YWx1ZV9zZXRfbWluaV9vYmplY3QpLAorCSAgKGdzdF92YWx1ZV90YWtlX21pbmlfb2JqZWN0KSwgKGdzdF92YWx1ZV9nZXRfbWluaV9vYmplY3QpOgorCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5oOiBBZGQgR1ZhbHVlIHNldC9nZXQgZnVuY3Rpb25zLgorCisyMDA1LTA1LTE5IDE2OjI2OjUwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvOiBNYWtlIHN1YmJ1ZmVyIHVucmVmIHRoZSBwYXJlbnQgaW4gZmluYWxpemUuIHNvbWUgbW9yZSBkZWJ1Z2dpbmcgaW5mby4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YnVmZmVyLmM6IChnc3RfYnVmZmVyX2luaXQpLCAoZ3N0X3N1YmJ1ZmZlcl9nZXRfdHlwZSksCisJICAoZ3N0X3N1YmJ1ZmZlcl9jbGFzc19pbml0KSwgKGdzdF9zdWJidWZmZXJfZmluYWxpemUpLAorCSAgKGdzdF9zdWJidWZmZXJfaW5pdCksIChnc3RfYnVmZmVyX2lzX3NwYW5fZmFzdCk6CisJICAqIGdzdC9nc3RidWZmZXIuaDoKKwkgICogZ3N0L2dzdGJ1cy5jOiAoZ3N0X2J1c19wb3N0KToKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2dldF9yYW5kb21fcGFkKToKKwkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKGdzdF9tZXNzYWdlX2luaXQpLCAoZ3N0X21lc3NhZ2VfZmluYWxpemUpOgorCSAgTWFrZSBzdWJidWZlciB1bnJlZiB0aGUgcGFyZW50IGluIGZpbmFsaXplLgorCSAgc29tZSBtb3JlIGRlYnVnZ2luZyBpbmZvLgorCisyMDA1LTA1LTE5IDE2OjIzOjA0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiBEb24ndCBmcmVlIHByZXJvbGwgcXVldWUgdG9vIGVhcmx5LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZXNpbmtfY2xhc3NfaW5pdCksCisJICAoZ3N0X2Jhc2VzaW5rX2luaXQpLCAoZ3N0X2Jhc2VzaW5rX2ZpbmFsaXplKSwKKwkgIChnc3RfYmFzZXNpbmtfYWN0aXZhdGUpLCAoZ3N0X2Jhc2VzaW5rX2NoYW5nZV9zdGF0ZSk6CisJICBEb24ndCBmcmVlIHByZXJvbGwgcXVldWUgdG9vIGVhcmx5LgorCisyMDA1LTA1LTE5IDE0OjUyOjE2ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+CisKKwkgIGdzdC86IEhpLCBJJ20gb3V0ZGF0ZWQuIFBsZWFzZSBzaG9vdCBtZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvTWFrZWZpbGUuYW06CisJICAqIGdzdC9ST0FETUFQOgorCSAgSGksIEknbSBvdXRkYXRlZC4gUGxlYXNlIHNob290IG1lLgorCisyMDA1LTA1LTE5IDEyOjA3OjM1ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+CisKKwkgIGdzdC9nc3RwaXBlbGluZS5jOiBEbyBub3QgYWNjZXNzIHZhcmlhYmxlcyBhZnRlciB0aGV5IGhhdmUgYmVlbiBkZWxldGVkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX3NlbmRfZXZlbnQpOgorCSAgRG8gbm90IGFjY2VzcyB2YXJpYWJsZXMgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gZGVsZXRlZC4KKworMjAwNS0wNS0xOSAwODo0MTo0MiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgdG9vbHMvZ3N0LWluc3BlY3QuYzogQSBwbHVnaW4gZmVhdHVyZSBkb2VzIHVuZm9ydHVuYXRseSBub3QgdXNlIHRoZSBvYmplY3QgbmFtZSB5ZXQuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAocHJpbnRfcGx1Z2luX2ZlYXR1cmVzKToKKwkgIEEgcGx1Z2luIGZlYXR1cmUgZG9lcyB1bmZvcnR1bmF0bHkgbm90IHVzZSB0aGUKKwkgIG9iamVjdCBuYW1lIHlldC4uLgorCisyMDA1LTA1LTE4IDE3OjM1OjIzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YnVmZmVyLmM6IFBvcnQgX3NwYW4oKSBmdW5jdGlvbnMgdG8gbmV3IHN1YmJ1ZmZlcnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJ1ZmZlci5jOiAoZ3N0X2J1ZmZlcl9pc19zcGFuX2Zhc3QpLCAoZ3N0X2J1ZmZlcl9zcGFuKToKKwkgIFBvcnQgX3NwYW4oKSBmdW5jdGlvbnMgdG8gbmV3IHN1YmJ1ZmZlcnMuCisKKzIwMDUtMDUtMTggMTM6NDk6MDggKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KKworCSAgZ3N0L2dzdGJpbi5jOiBGaXggY2xvY2sgc2V0dGVyeSBpbiBiaW5zIHdoZW4gYWRkaW5nIGtpZHMgYWZ0ZXIgdGhlIGNsb2NrIGhhcyBiZWVuIHNlbGVjdGVkLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fYWRkX2Z1bmMpOgorCSAgRml4IGNsb2NrIHNldHRlcnkgaW4gYmlucyB3aGVuIGFkZGluZyBraWRzIGFmdGVyIHRoZSBjbG9jayBoYXMKKwkgIGJlZW4gc2VsZWN0ZWQuCisKKzIwMDUtMDUtMTggMTM6MjM6MjQgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KKworCSAgZ3N0L2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IFdvcmthcm91bmQgdW50aWwgc2lnbmFscyBzdXBwb3J0IEdzdE1pbmlPYmplY3QuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IChnc3RfaWRlbnRpdHlfY2xhc3NfaW5pdCk6CisJICBXb3JrYXJvdW5kIHVudGlsIHNpZ25hbHMgc3VwcG9ydCBHc3RNaW5pT2JqZWN0LgorCisyMDA1LTA1LTE4IDExOjM0OjQ1ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZ3N0L2dzdGJ1ZmZlci5jOiBPb3BzLCBmaXggYSB0eXBvIEdTVF9UWVBFX0JVRkZFUiAtPiBHU1RfVFlQRV9TVUJCVUZGRVIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJ1ZmZlci5jOgorCSAgT29wcywgZml4IGEgdHlwbyBHU1RfVFlQRV9CVUZGRVIgLT4gR1NUX1RZUEVfU1VCQlVGRkVSLgorCisyMDA1LTA1LTE4IDA5OjU1OjQzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS86IFBvcnRlZCBhbmQgYWRkZWQgYWRhcHRlciB0byB0aGUgYmFzZSBjbGFzc2VzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL01ha2VmaWxlLmFtOgorCSAgKiBnc3QvYmFzZS9nc3RhZGFwdGVyLmM6IChnc3RfYWRhcHRlcl9iYXNlX2luaXQpLAorCSAgKGdzdF9hZGFwdGVyX2NsYXNzX2luaXQpLCAoZ3N0X2FkYXB0ZXJfaW5pdCksCisJICAoZ3N0X2FkYXB0ZXJfZGlzcG9zZSksIChnc3RfYWRhcHRlcl9maW5hbGl6ZSksIChnc3RfYWRhcHRlcl9uZXcpLAorCSAgKGdzdF9hZGFwdGVyX2NsZWFyKSwgKGdzdF9hZGFwdGVyX3B1c2gpLCAoZ3N0X2FkYXB0ZXJfcGVlayksCisJICAoZ3N0X2FkYXB0ZXJfZmx1c2gpLCAoZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlKSwKKwkgIChnc3RfYWRhcHRlcl9hdmFpbGFibGVfZmFzdCk6CisJICAqIGdzdC9iYXNlL2dzdGFkYXB0ZXIuaDoKKwkgIFBvcnRlZCBhbmQgYWRkZWQgYWRhcHRlciB0byB0aGUgYmFzZSBjbGFzc2VzLgorCisyMDA1LTA1LTE3IDE3OjUwOjQxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgZ3N0LzogTWFrZSBzdXJlIHRoZSBjbGFzcyBpcyByZWZmZWQvdW5yZWZmZWQgb25jZSBiZWZvcmUgdGhyZWFkcyBjYW4gYmUgdXNlZC4gIEZpeGVzICMzMDQ1NTEuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdC5jOgorCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOgorCSAgTWFrZSBzdXJlIHRoZSBjbGFzcyBpcyByZWZmZWQvdW5yZWZmZWQgb25jZSBiZWZvcmUgdGhyZWFkcyBjYW4gYmUKKwkgIHVzZWQuICBGaXhlcyAjMzA0NTUxLgorCisyMDA1LTA1LTE3IDE3OjM3OjQzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvOiBEb24ndCBxdWV1ZSBidWZmZXJzIGluIGJhc2VzaW5rIHdoZW4gd2UgYXJlIGZsdXNoaW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZXNpbmtfZmluaXNoX3ByZXJvbGwpLAorCSAgKGdzdF9iYXNlc2lua19jaGFpbl91bmxvY2tlZCksIChnc3RfYmFzZXNpbmtfYWN0aXZhdGUpOgorCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5jOiAoZ3N0X21pbmlfb2JqZWN0X2dldF90eXBlKSwKKwkgIChnc3RfbWluaV9vYmplY3RfZnJlZSk6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfYWNjZXB0X2NhcHMpLCAoZ3N0X3BhZF9xdWVyeSksCisJICAoZ3N0X3BhZF9wdXNoKSwgKGdzdF9wYWRfcHVzaF9ldmVudCk6CisJICAqIGdzdC9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2NoYW5nZV9zdGF0ZSk6CisJICBEb24ndCBxdWV1ZSBidWZmZXJzIGluIGJhc2VzaW5rIHdoZW4gd2UgYXJlIGZsdXNoaW5nLgorCSAgVW5yZWYgYnVmZmVyIHdoZW4gZmx1c2hpbmcgaW4gYmFzZXNpbmsuCisJICBGbHVzaCBxdWV1ZSB3aGVuIGdvaW5nIHRvIFJFQURZCisJICBVbnJlZiBidWZmZXIgd2hlbiBfcHVzaCgpIHJldHVybnMgYW4gZXJyb3IuCisJICBEb24ndCBmcmVlIE1pbmlPYmplY3QgaW5zdGFuY2Ugd2hlbiByZWZjb3VudCBpcyBpbmNyZW1lbnRlZAorCSAgaW4gX2ZpbmFsaXplKCkgc28gdGhhdCB3ZSBjYW4gcmVjb3ZlciBvYmplY3RzLgorCisyMDA1LTA1LTE3IDE3OjIyOjMxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogQ2hhbmdlTG9nOgorCSogY29tbW9uOgorCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtc2NoZWR1bGVycy54bWw6CisJKiBkb2NzL21hbnVhbC9hcHBlbmRpeC1jaGVja2xpc3QueG1sOgorCSogZG9jcy9wd2cvYWR2YW5jZWQtY2xvY2sueG1sOgorCSogZG9jcy9wd2cvYWR2YW5jZWQtaW50ZXJmYWNlcy54bWw6CisJKiBkb2NzL3B3Zy9hZHZhbmNlZC1yZXF1ZXN0LnhtbDoKKwkqIGRvY3MvcHdnL2FkdmFuY2VkLXR5cGVzLnhtbDoKKwkqIGRvY3MvcHdnL2ludHJvLXByZWZhY2UueG1sOgorCSogZXhhbXBsZXMvcGx1Z2lucy9leGFtcGxlLmM6CisJKiBleGFtcGxlcy9wbHVnaW5zL2V4YW1wbGUuaDoKKwkqIHRlc3RzL29sZC9leGFtcGxlcy9wbHVnaW5zL2V4YW1wbGUuYzoKKwkqIHRlc3RzL29sZC9leGFtcGxlcy9wbHVnaW5zL2V4YW1wbGUuaDoKKwkgIHNtYWxsIGRvYyBmaXhlcworCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBzbWFsbCBkb2MgZml4ZXMKKworMjAwNS0wNS0xNyAxNDoxMTozMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0LzogQ2xlYXIgcXVldWUgd2hlbiBnb2luZyB0byBSRUFEWS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2FjY2VwdF9jYXBzKSwgKGdzdF9wYWRfc2V0X2NhcHMpLAorCSAgKGdzdF9wYWRfYWxsb2NfYnVmZmVyKSwgKGdzdF9wYWRfcXVlcnkpLCAoZ3N0X3BhZF9wdXNoKToKKwkgICogZ3N0L2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfY2hhbmdlX3N0YXRlKToKKwkgIENsZWFyIHF1ZXVlIHdoZW4gZ29pbmcgdG8gUkVBRFkuCisJICBSZW1vdmUgSU5fU0VUQ0FQUyBmbGFnIHRvby4KKworMjAwNS0wNS0xNyAxNDowMTo1MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBSZW1vdmUgaW1wbGljaXQgY2FzdCBmcm9tIGdib29sZWFuIHRvIEdzdEVsZW1lbnRTdGF0ZVJldHVybjsgbWFrZSBzdXJlIHdlIHN0aWxsIHJldHVybiBmYWlsdXJlLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2VzcmNfY2hhbmdlX3N0YXRlKToKKwkgIFJlbW92ZSBpbXBsaWNpdCBjYXN0IGZyb20gZ2Jvb2xlYW4gdG8gR3N0RWxlbWVudFN0YXRlUmV0dXJuOworCSAgbWFrZSBzdXJlIHdlIHN0aWxsIHJldHVybiBmYWlsdXJlIGluIHBhdXNlZCA9PiByZWFkeSBjYXNlIGlmCisJICB0aGUgcGFyZW50IGNsYXNzIGZhaWxzIHRvIGNoYW5nZSBzdGF0ZSBhbmQgb3VyIG93biBzdG9wCisJICB2ZnVuYyBzdWNjZWVkcy4KKworMjAwNS0wNS0xNyAxMDo0MTo1MSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgdG9vbHMvZ3N0LWxhdW5jaC5jOiBNZXNzYWdlIHdhcyB1bnJlZmZlZCB0b28gc29vbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChldmVudF9sb29wKToKKwkgIE1lc3NhZ2Ugd2FzIHVucmVmZmVkIHRvbyBzb29uLgorCisyMDA1LTA1LTE2IDIxOjE3OjE0ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGdzdC9nc3RiaW4uYyAoc2lua19pdGVyYXRvcl9maWx0ZXIpOiBFcnIuLi4gdW0uLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNS0xNiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdGJpbi5jIChzaW5rX2l0ZXJhdG9yX2ZpbHRlcik6IEVyci4uLiB1bS4uLgorCSAgKiBjaGVjay9nc3QvZ3N0YmluLmMgKHRlc3RfZ2hvc3RfcGFkcyk6IE5ldyB0ZXN0IGZvciB0aGUKKwkgIGdob3N0aW5nLWlmLWVsZW1lbnRzLW5vdC1pbi1zYW1lLWJpbiBiZWhhdmlvci4KKworMjAwNS0wNS0xNiAyMTowNToyMSArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkgIGdzdC9nc3RtaW5pb2JqZWN0LmM6IFVzZSBnX2F0b21pY19pbnRfZ2V0KCkgaW5zdGVhZCBvZiBhY2Nlc3NpbmcgcmVmY291bnQgZGlyZWN0bHkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdG1pbmlvYmplY3QuYzogVXNlIGdfYXRvbWljX2ludF9nZXQoKSBpbnN0ZWFkIG9mCisJICBhY2Nlc3NpbmcgcmVmY291bnQgZGlyZWN0bHkuCisKKzIwMDUtMDUtMTYgMjA6MjE6NTUgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJICBjaGVjay9NYWtlZmlsZS5hbTogcmVtb3ZlIEdzdERhdGEgY2hlY2tzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svTWFrZWZpbGUuYW06IHJlbW92ZSBHc3REYXRhIGNoZWNrcworCSAgKiBjaGVjay9nc3QtbGlicy9nZHAuYzogKFNUQVJUX1RFU1QpOiBmaXggZm9yIEFQSSBjaGFuZ2VzCisJICAqIGdzdC9NYWtlZmlsZS5hbTogYWRkIG1pbmlvYmplY3QsIHJlbW92ZSBkYXRhCisJICAqIGdzdC9nc3QuaDogYWRkIG1pbmlvYmplY3QsIHJlbW92ZSBkYXRhCisJICAqIGdzdC9nc3RkYXRhLmM6IHJlbW92ZQorCSAgKiBnc3QvZ3N0ZGF0YS5oOiByZW1vdmUKKwkgICogZ3N0L2dzdGRhdGFfcHJpdmF0ZS5oOiByZW1vdmUKKwkgICogZ3N0L2dzdHR5cGVzLmg6IHJlbW92ZSBHc3RFdmVudCBhbmQgR3N0TWVzc2FnZQorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKTogZml4IGZvciBBUEkgY2hhbmdlcworCSAgKiBnc3QvZ3N0bWFyc2hhbC5saXN0OiBjaGFuZ2UgQk9YRUQgLT4gT0JKRUNUCisJICBJbXBsZW1lbnQgR3N0TWluaU9iamVjdC4KKwkgICogZ3N0L2dzdG1pbmlvYmplY3QuYzoKKwkgICogZ3N0L2dzdG1pbmlvYmplY3QuaDoKKwkgIE1vZGlmeSB0byBiZSBzdWJjbGFzc2VzIG9mIEdzdE1pbmlPYmplY3QuCisJICAqIGdzdC9nc3RidWZmZXIuYzogKF9nc3RfYnVmZmVyX2luaXRpYWxpemUpLCAoZ3N0X2J1ZmZlcl9nZXRfdHlwZSksCisJICAoZ3N0X2J1ZmZlcl9jbGFzc19pbml0KSwgKGdzdF9idWZmZXJfZmluYWxpemUpLCAoX2dzdF9idWZmZXJfY29weSksCisJICAoZ3N0X2J1ZmZlcl9pbml0KSwgKGdzdF9idWZmZXJfbmV3KSwgKGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyksCisJICAoZ3N0X3N1YmJ1ZmZlcl9nZXRfdHlwZSksIChnc3Rfc3ViYnVmZmVyX2luaXQpLAorCSAgKGdzdF9idWZmZXJfY3JlYXRlX3N1YiksIChnc3RfYnVmZmVyX2lzX3NwYW5fZmFzdCksCisJICAoZ3N0X2J1ZmZlcl9zcGFuKToKKwkgICogZ3N0L2dzdGJ1ZmZlci5oOgorCSAgKiBnc3QvZ3N0ZXZlbnQuYzogKF9nc3RfZXZlbnRfaW5pdGlhbGl6ZSksIChnc3RfZXZlbnRfZ2V0X3R5cGUpLAorCSAgKGdzdF9ldmVudF9jbGFzc19pbml0KSwgKGdzdF9ldmVudF9pbml0KSwgKGdzdF9ldmVudF9maW5hbGl6ZSksCisJICAoX2dzdF9ldmVudF9jb3B5KSwgKGdzdF9ldmVudF9uZXcpOgorCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKKwkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKF9nc3RfbWVzc2FnZV9pbml0aWFsaXplKSwKKwkgIChnc3RfbWVzc2FnZV9nZXRfdHlwZSksIChnc3RfbWVzc2FnZV9jbGFzc19pbml0KSwKKwkgIChnc3RfbWVzc2FnZV9pbml0KSwgKGdzdF9tZXNzYWdlX2ZpbmFsaXplKSwgKF9nc3RfbWVzc2FnZV9jb3B5KSwKKwkgIChnc3RfbWVzc2FnZV9uZXcpLCAoZ3N0X21lc3NhZ2VfbmV3X2Vycm9yKSwKKwkgIChnc3RfbWVzc2FnZV9uZXdfd2FybmluZyksIChnc3RfbWVzc2FnZV9uZXdfdGFnKSwKKwkgIChnc3RfbWVzc2FnZV9uZXdfc3RhdGVfY2hhbmdlZCksIChnc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRpb24pOgorCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgorCSAgKiBnc3QvZ3N0cHJvYmUuYzogKGdzdF9wcm9iZV9wZXJmb3JtKSwKKwkgIChnc3RfcHJvYmVfZGlzcGF0Y2hlcl9kaXNwYXRjaCk6CisJICAqIGdzdC9nc3Rwcm9iZS5oOgorCSAgKiBnc3QvZ3N0cXVlcnkuYzogKF9nc3RfcXVlcnlfaW5pdGlhbGl6ZSksIChnc3RfcXVlcnlfZ2V0X3R5cGUpLAorCSAgKGdzdF9xdWVyeV9jbGFzc19pbml0KSwgKGdzdF9xdWVyeV9maW5hbGl6ZSksIChnc3RfcXVlcnlfaW5pdCksCisJICAoX2dzdF9xdWVyeV9jb3B5KSwgKGdzdF9xdWVyeV9uZXcpOgorCSAgVXBkYXRlIGVsZW1lbnRzIGZvciBHc3REYXRhIC0+IEdzdE1pbmlPYmplY3QgY2hhbmdlcworCSAgKiBnc3QvZ3N0cXVlcnkuaDoKKwkgICogZ3N0L2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfZmluYWxpemUpLCAoZ3N0X3F1ZXVlX2xvY2tlZF9mbHVzaCksCisJICAoZ3N0X3F1ZXVlX2NoYWluKSwgKGdzdF9xdWV1ZV9sb29wKToKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGJ1ZmZlcnN0b3JlLmM6CisJICAoZ3N0X2J1ZmZlcl9zdG9yZV9hZGRfYnVmZmVyX2Z1bmMpLAorCSAgKGdzdF9idWZmZXJfc3RvcmVfY2xlYXJlZF9mdW5jKSwgKGdzdF9idWZmZXJfc3RvcmVfZ2V0X2J1ZmZlcik6CisJICAqIGdzdC9lbGVtZW50cy9nc3RmYWtlc2luay5jOiAoZ3N0X2Zha2VzaW5rX2NsYXNzX2luaXQpLAorCSAgKGdzdF9mYWtlc2lua19yZW5kZXIpOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiAoZ3N0X2Zha2VzcmNfY2xhc3NfaW5pdCk6CisJICAqIGdzdC9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IChnc3RfbW1hcF9idWZmZXJfZ2V0X3R5cGUpLAorCSAgKGdzdF9tbWFwX2J1ZmZlcl9jbGFzc19pbml0KSwgKGdzdF9tbWFwX2J1ZmZlcl9pbml0KSwKKwkgIChnc3RfbW1hcF9idWZmZXJfZmluYWxpemUpLCAoZ3N0X2ZpbGVzcmNfbWFwX3JlZ2lvbiksCisJICAoZ3N0X2ZpbGVzcmNfY3JlYXRlX3JlYWQpOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogKGdzdF9pZGVudGl0eV9jbGFzc19pbml0KToKKwkgICogZ3N0L2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9zcmNfZXZlbnQpLCAoZnJlZV9lbnRyeV9idWZmZXJzKSwKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfaGFuZGxlX2V2ZW50KToKKwkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOgorCSAgKGdzdF9kcF9oZWFkZXJfZnJvbV9idWZmZXIpOgorCSAgKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmg6CisJICAqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kcC1wcml2YXRlLmg6CisKKzIwMDUtMDUtMTUgMjM6MTg6NDAgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJICBnc3QvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzogRG9uJ3QgaW5jbHVkZSBoZWFkZXJzIHRoYXQgd2VyZSBqdXN0IHJlbW92ZWQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6IERvbid0IGluY2x1ZGUgaGVhZGVycyB0aGF0IHdlcmUKKwkgIGp1c3QgcmVtb3ZlZC4KKworMjAwNS0wNS0xNSAyMzoxNjoyOSArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKwkgIGdzdC9lbGVtZW50cy9NYWtlZmlsZS5hbTogUmVtb3ZlIHNvbWUgZWxlbWVudHMgdGhhdCBkb24ndCBuZWVkIHRvIGJlIGluIHRoZSBjb3JlIChvciBldmVuIGV4aXN0IGF0IGFsbCkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2VsZW1lbnRzL01ha2VmaWxlLmFtOiBSZW1vdmUgc29tZSBlbGVtZW50cyB0aGF0IGRvbid0CisJICBuZWVkIHRvIGJlIGluIHRoZSBjb3JlIChvciBldmVuIGV4aXN0IGF0IGFsbCkuCisJICAqIGdzdC9lbGVtZW50cy9nc3RhZ2dyZWdhdG9yLmM6CisJICAqIGdzdC9lbGVtZW50cy9nc3RhZ2dyZWdhdG9yLmg6CisJICAqIGdzdC9lbGVtZW50cy9nc3RtZDVzaW5rLmM6CisJICAqIGdzdC9lbGVtZW50cy9nc3RtZDVzaW5rLmg6CisJICAqIGdzdC9lbGVtZW50cy9nc3RtdWx0aWZpbGVzcmMuYzoKKwkgICogZ3N0L2VsZW1lbnRzL2dzdG11bHRpZmlsZXNyYy5oOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0cGlwZWZpbHRlci5jOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0cGlwZWZpbHRlci5oOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0c2hhcGVyLmM6CisJICAqIGdzdC9lbGVtZW50cy9nc3RzaGFwZXIuaDoKKwkgICogZ3N0L2VsZW1lbnRzL2dzdHN0YXRpc3RpY3MuYzoKKwkgICogZ3N0L2VsZW1lbnRzL2dzdHN0YXRpc3RpY3MuaDoKKwkgICogcG8vUE9URklMRVMuaW46IFJlbW92ZSBhYm92ZSBmaWxlcy4KKworMjAwNS0wNS0xNCAxODowMToxMiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0YmluLmMgKGdzdF9iaW5faXRlcmF0ZV9zaW5rcyk6IFVzZSBzaW5rX2l0ZXJhdG9yX2ZpbHRlciBzbyBhcyB0byBnZXQgdGhlIHJlZnMgcmlnaHQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDUtMTQgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3RiaW4uYyAoZ3N0X2Jpbl9pdGVyYXRlX3NpbmtzKTogVXNlIHNpbmtfaXRlcmF0b3JfZmlsdGVyCisJICBzbyBhcyB0byBnZXQgdGhlIHJlZnMgcmlnaHQuCisJICAoc2lua19pdGVyYXRvcl9maWx0ZXIpOiBOZXcgZnVuY3Rpb24sIHdyYXBzIGJpbl9lbGVtZW50X2lzX3NpbmssCisJICB1bnJlZmZpbmcgb2JqZWN0cyB0aGF0IGRvbid0IHBhc3MgdGhlIGZpbHRlci4KKworMjAwNS0wNS0xNCAxNzoxMjoxMSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0cGlwZWxpbmUuYyAoZ3N0X3BpcGVsaW5lX2luaXQpOiBEcm9wIHJlZiBvbiBidXMgYWZ0ZXIgZ3N0X2VsZW1lbnRfc2V0X2J1cy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNS0xNCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdHBpcGVsaW5lLmMgKGdzdF9waXBlbGluZV9pbml0KTogRHJvcCByZWYgb24gYnVzIGFmdGVyCisJICBnc3RfZWxlbWVudF9zZXRfYnVzLgorCSAgKGdzdF9waXBlbGluZV9kaXNwb3NlKTogU2V0IHRoZSBidXMgb24gdGhlIHBpcGVsaW5lIHRvIE5VTEwuIEluCisJICBub3JtYWwgY2FzZXMsIHRoaXMgd2lsbCBkZXN0cm95IHRoZSBidXMuCisJICAqIGdzdC9nc3R1dGlscy5jIChwcmVwYXJlX2xpbmtfbWF5YmVfZ2hvc3RpbmcpOiBEcm9wIHJlZiBvbiByb290CisJICBvYmplY3QuCisKKzIwMDUtMDUtMTQgMTU6NTQ6NDkgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdGJpbi5jIChnc3RfYmluX2NoYW5nZV9zdGF0ZSk6IEZpeCBzdGF0ZSBjaGFuZ2VzIGlmIGEgYmluIGhhcyBubyBzaW5rcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNS0xNCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2dzdGJpbi5jIChnc3RfYmluX2NoYW5nZV9zdGF0ZSk6IEZpeCBzdGF0ZSBjaGFuZ2VzIGlmIGEgYmluCisJICBoYXMgbm8gc2lua3MuCisKKzIwMDUtMDUtMTQgMTU6MzI6MzYgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZ3N0L2dzdHV0aWxzLmMgKGdzdF9lbGVtZW50X2xpbmtfcGFkcyk6IEluc3RlYWQgb2YgY2FsbGluZyBnc3RfcGFkX2xpbmssIGNhbGwgcGFkX2xpbmtfbWF5YmVfZ2hvc3RpbmcsCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDUtMTMgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3R1dGlscy5jIChnc3RfZWxlbWVudF9saW5rX3BhZHMpOiBJbnN0ZWFkIG9mIGNhbGxpbmcKKwkgIGdzdF9wYWRfbGluaywgY2FsbCBwYWRfbGlua19tYXliZV9naG9zdGluZywKKwkgIChwYWRfbGlua19tYXliZV9naG9zdGluZyk6IExpbmtzIHBhZHMsIG1ha2luZyBzdXJlIHRoYXQgdGhlCisJICBlbGVtZW50cyBiZWluZyBsaW5rZWQgYXJlIGluIHRoZSBzYW1lIGJpbi4KKwkgIChmaW5kX2NvbW1vbl9yb290LCBvYmplY3RfaGFzX2FuY2VzdG9yLCBnaG9zdF91cCwgcmVtb3ZlX3BhZCk6CisJICBIZWxwZXJzIGZvciBwYWRfbGlua19tYXliZV9naG9zdGluZy4KKworMjAwNS0wNS0xMyAxMjo1Mzo0NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSogQ2hhbmdlTG9nOgorCSogY29uZmlndXJlLmFjOgorCSAgUmVxdWlyZSBHTGliID49IDIuNC4wIChmb3IgdGhlIGdfYXRvbWljXyogZnVuY3MpCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIFJlcXVpcmUgR0xpYiA+PSAyLjQuMCAoZm9yIHRoZSBnX2F0b21pY18qIGZ1bmNzKQorCisyMDA1LTA1LTEzIDEwOjE4OjQxICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+CisKKwkqIGdzdHJlYW1lci5zcGVjLmluOgorCSAgYWRkIG1pc3NpbmcgLmggZmlsZSB0byBzcGVjIGZpbGUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkIG1pc3NpbmcgLmggZmlsZSB0byBzcGVjIGZpbGUKKworMjAwNS0wNS0xMyAwOToyNzoyNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KKworCSogQ2hhbmdlTG9nOgorCSogZG9jcy9kZXNpZ24vcGFydC1lbGVtZW50LXNvdXJjZS50eHQ6CisJICBNZW50aW9uIEdzdFB1c2hTcmMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgTWVudGlvbiBHc3RQdXNoU3JjCisKKzIwMDUtMDUtMTIgMTk6NDU6NDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC86IElkZW50aWZ5IHNpbmtzIGJ5IHRoZWlyIGZsYWcgdG8gYXZvaWQgb3Zlcmx5IGNvbXBsaWNhdGVkIGNoZWNrcyAoZm93IG5vdykuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlc2lua19pbml0KSwKKwkgIChnc3RfYmFzZXNpbmtfYWN0aXZhdGUpOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZXNyY191bmxvY2spLAorCSAgKGdzdF9iYXNlc3JjX2lzX3NlZWthYmxlKToKKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9hZGRfZnVuYyksIChnc3RfYmluX3JlbW92ZV9mdW5jKSwKKwkgIChiaW5fZWxlbWVudF9pc19zaW5rKSwgKGdzdF9iaW5fY2hhbmdlX3N0YXRlKToKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2FkZF9wYWQpLCAoZ3N0X2VsZW1lbnRfcXVlcnkpOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSAgSWRlbnRpZnkgc2lua3MgYnkgdGhlaXIgZmxhZyB0byBhdm9pZCBvdmVybHkgY29tcGxpY2F0ZWQKKwkgIGNoZWNrcyAoZm93IG5vdykuCisJICBEbyBzdGF0ZSBjaGFuZ2VzIGV2ZW4gZm9yIGVsZW1lbnRzIG5vdCByZWFjaGFibGUgZnJvbSB0aGUKKwkgIHNpbmtzLgorCSAgQmFzZVNpbmsgaXMgYSBzaW5rIG5vdyA6KQorCSAgU29tZSBtb3JlIGRlYnVnZ2luZyBpbmZvIGluIHRoZSBiYXNlc3JjLgorCisyMDA1LTA1LTEyIDE1OjA5OjE3ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+CisKKwkgIGdzdC9nc3RiaW4uYzogSW1wbGVtZW50IF9xdWVyeSBvbiBhIGJpbiwgc2ltaWxhciB0byBfc2VuZF9ldmVudC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2NsYXNzX2luaXQpLCAoZ3N0X2Jpbl9xdWVyeSk6CisJICBJbXBsZW1lbnQgX3F1ZXJ5IG9uIGEgYmluLCBzaW1pbGFyIHRvIF9zZW5kX2V2ZW50LgorCisyMDA1LTA1LTEyIDEzOjU5OjU4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgorCisJICBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IERpc2NvbnQgZXZlbnQgb2Zmc2V0IGZvcm1hdCBzaG91bGQgYmUgR1NUX0ZPUk1BVF9CWVRFUywgbm90IEdTVF9GT1JNQVRfVElNRS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZXNyY19kb19zZWVrKToKKwkgIERpc2NvbnQgZXZlbnQgb2Zmc2V0IGZvcm1hdCBzaG91bGQgYmUgR1NUX0ZPUk1BVF9CWVRFUywKKwkgIG5vdCBHU1RfRk9STUFUX1RJTUUuCisKKzIwMDUtMDUtMTIgMTM6MTg6MTQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RiaW4uYzogU2FtZSBmaXggYXMgUm9uYWxkJ3MgYnV0IHdpdGhvdXQgdGhlIHNpZ25hbC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX3JlbW92ZV9mdW5jKSwgKGdzdF9iaW5fZ2V0X3N0YXRlKToKKwkgIFNhbWUgZml4IGFzIFJvbmFsZCdzIGJ1dCB3aXRob3V0IHRoZSBzaWduYWwuCisKKzIwMDUtMDUtMTIgMTI6Mjc6MDcgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KKworCSAgZ3N0L2dzdHV0aWxzLmM6IE5vLCBhbiBlbGVtZW50IGlzIG5vdCBhIHBhZC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uKToKKwkgIE5vLCBhbiBlbGVtZW50IGlzIG5vdCBhIHBhZC4KKworMjAwNS0wNS0xMiAxMjoxNzoyMyArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgorCisJICBnc3QvZ3N0YmluLmM6IElmIGEgY2hpbGQgaXMgcmVtb3ZlZCBmcm9tIGEgYmluIHdoaWxlIHdlIHJlbW92ZSB0aGUgY2hpbGQgZnJvbSB0aGUgYmluIGFuZCB3aGlsZSB3ZSdyZSByZXRyaWV2aW5nIGl0cyAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2FkZF9mdW5jKSwgKGNiX3BhcmVudF91bnNldCksCisJICAoZ3N0X2Jpbl9nZXRfc3RhdGUpOgorCSAgSWYgYSBjaGlsZCBpcyByZW1vdmVkIGZyb20gYSBiaW4gd2hpbGUgd2UgcmVtb3ZlIHRoZSBjaGlsZCBmcm9tCisJICB0aGUgYmluIGFuZCB3aGlsZSB3ZSdyZSByZXRyaWV2aW5nIGl0cyBzdGF0ZSwgc2lnbmFsIHRoaXMgdG8gdGhlCisJICBnZXRfc3RhdGUgZnVuY3Rpb24gc28gd2UgYWJvcnQgdGhlIHdhaXQgKGluc3RlYWQgb2Ygd2FpdGluZyBmb3IKKwkgIGEgdGltZW91dCkgYW5kIGNhbiBpbW1lZGlhdGVseSByZS1pdGVyYXRlIG92ZXIgYWxsIG90aGVyIGVsZW1lbnRzLgorCisyMDA1LTA1LTEyIDEwOjQzOjE0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvYmFzZS86IEFkZGVkIGlzX3NlZWthYmxlIHRvIEJhc2VTcmMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9NYWtlZmlsZS5hbToKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2VzcmNfaXNfc2Vla2FibGUpLAorCSAgKGdzdF9iYXNlc3JjX3N0YXJ0KToKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgorCSAgKiBnc3QvYmFzZS9nc3RwdXNoc3JjLmM6IChnc3RfcHVzaHNyY19nZXRfdHlwZSksCisJICAoZ3N0X3B1c2hzcmNfYmFzZV9pbml0KSwgKGdzdF9wdXNoc3JjX2NsYXNzX2luaXQpLAorCSAgKGdzdF9wdXNoc3JjX2luaXQpLCAoZ3N0X3B1c2hzcmNfY3JlYXRlKToKKwkgICogZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5oOgorCSAgQWRkZWQgaXNfc2Vla2FibGUgdG8gQmFzZVNyYworCSAgQWRkZWQgc2ltcGxlIFB1c2hTcmMuCisKKzIwMDUtMDUtMTEgMDk6MjE6MjQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC86IEZpeCByZWZjb3VudGluZyBpbiB1dGlscyBmdW5jdGlvbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfYWRkX3BhZCksIChnc3RfZWxlbWVudF9xdWVyeSk6CisJICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkX3RlbXBsYXRlKSwKKwkgIChnc3RfZWxlbWVudF9saW5rX3BhZHMpLCAoZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24pLAorCSAgKGdzdF9lbGVtZW50X3F1ZXJ5X2NvbnZlcnQpLCAoaW50ZXJzZWN0X2NhcHNfZnVuYyksCisJICAoZ3N0X3BhZF9xdWVyeV9wb3NpdGlvbiksIChnc3RfcGFkX3F1ZXJ5X2NvbnZlcnQpOgorCSAgRml4IHJlZmNvdW50aW5nIGluIHV0aWxzIGZ1bmN0aW9uLgorCSAgTm8gcG9pbnQgaW4gdHJ5aW5nIHRvIGFjdGl2YXRlIGEgcGFkIHdoZW4gaXQncyBhZGRlZCwgaXQgY291bGQKKwkgIGJlIGFkZGVkIGZyb20gdGhlIHN0YXRlIGNoYW5nZSBmdW5jdGlvbiBhbmQgdGhlbiB3ZSBkZWFkbG9jaywgdGhlCisJICBlbGVtZW50IGhhcyB0byBkZWNpZGUgd2hhdCB0byBkby4KKworMjAwNS0wNS0xMSAwMzozNzoxMCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYyAoZ3N0X2Zha2VzaW5rX3JlbmRlcik6IEVyLCBlbWl0IHdpdGgKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNS0xMCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2VsZW1lbnRzL2dzdGZha2VzaW5rLmMgKGdzdF9mYWtlc2lua19yZW5kZXIpOiBFciwgZW1pdCB3aXRoCisJICAqYWxsKiB0aGUgYXJndW1lbnRzLgorCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmMgKGdzdF9iYXNlX3RyYW5zZm9ybV9ldmVudCk6IEdyYWIgdGhlCisJICBzdHJlYW0gbG9jayBpZiBpdCdzIGEgRkxVU0hfRE9ORTsgbm9ybWFsIGZsdXNoZXMgZG9uJ3QgZ2V0IHRoZQorCSAgbG9jayAoYWNjb3JkaW5nIHRvIHRoZSBkb2NzIC0tIGlmIHRoaXMgaXMgd3JvbmcgY2hhbmdlIHRoZSBkb2NzKS4KKwkgICogZ3N0L2dzdHBpcGVsaW5lLmMgKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpOiBTZXQgdGhlIGJ1cyB0bworCSAgZmx1c2ggbWVzc2FnZXMgaW4gdGhlIE5VTEwgc3RhdGUuCisJICAqIGdzdC9nc3RidXMuYyAoZ3N0X2J1c19wb3N0KTogSWYgYSBidXMgaXMgZmx1c2hpbmcsIHVucmVmIHRoZQorCSAgbWVzc2FnZSBpbW1lZGlhdGVseSBhbmQgcmV0dXJuLgorCSAgKGdzdF9idXNfc2V0X2ZsdXNoaW5nKTogTmV3IGZ1bmN0aW9uLiBJZiBhIGJ1cyBpcyBmbHVzaGluZywgaXQKKwkgIGZsdXNoZXMgb3V0IGFueSBxdWV1ZWQgbWVzc2FnZXMgYW5kIGltbWVkaWF0ZWx5IHVucmVmcyBuZXcKKwkgIG1lc3NhZ2VzLiBUaGlzIGlzIHNvIHdoZW4gYW4gZWxlbWVudCBnb2VzIHRvIE5VTEwsIGFsbCBvZiB0aGUKKwkgIHVuaGFuZGxlZCBtZXNzYWdlcyBjb21pbmcgZnJvbSBpdCBjYW4gYmUgZnJlZWQsIGFuZCB0aGVpcgorCSAgcmVmZXJlbmNlcyB0byB0aGUgZWxlbWVudCBkcm9wcGVkLiBJbiBvdGhlciB3b3JkczogbWVzc2FnZSBzb3VyY2UKKwkgIHJlZiBjb25zaWRlcmVkIGhhcm1mdWwgOlAKKwkgICogZ3N0L2dzdGJpbi5jIChnc3RfYmluX2NoYW5nZV9zdGF0ZSk6IFVucmVmIHBlZXIgZWxlbWVudCB3aGVuCisJICB3ZSdyZSBmaW5pc2hlZCB3aXRoIGl0LgorCSAgKiBnc3QvZ3N0bWVzc2FnZS5jIChnc3RfbWVzc2FnZV9uZXdfc3RhdGVfY2hhbmdlZCk6CisKKzIwMDUtMDUtMTAgMTQ6NTE6NDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkqIGdzdC9nc3R2YWx1ZS5jOgorCSAgcmVtb3ZlIHN0dXBpZCBwcmludGYKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVtb3ZlIHN0dXBpZCBwcmludGYKKworMjAwNS0wNS0xMCAxNDo1MDo1NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHZhbHVlLmM6IEFkZGVkIGZsYWdzIHNlcmlhbGl6ZS9kZXNlcmlhbGl6ZS9jb21wYXJlIGNvZGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfY29tcGFyZV9mbGFncyksCisJICAoZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9mbGFncyksIChnc3RfdmFsdWVfZGVzZXJpYWxpemVfZmxhZ3MpLAorCSAgKF9nc3RfdmFsdWVfaW5pdGlhbGl6ZSk6CisJICBBZGRlZCBmbGFncyBzZXJpYWxpemUvZGVzZXJpYWxpemUvY29tcGFyZSBjb2RlLgorCisyMDA1LTA1LTA5IDIxOjM3OjU0ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYyAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3Byb3h5X2dldGNhcHMpOiBJbnRlcnNlY3QgdGhlIHBlZXIncyBjYXBzIHdpdGggb3VyIGNhcHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDUtMDkgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYyAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3Byb3h5X2dldGNhcHMpOgorCSAgSW50ZXJzZWN0IHRoZSBwZWVyJ3MgY2FwcyB3aXRoIG91ciBjYXBzLgorCisyMDA1LTA1LTA5IDE1OjU0OjI2ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+CisKKwkgIGdzdC86IEhhbmRsZSBuZWdhdGl2ZSBvZmZzZXRzIGJldHRlci4gRml4ZXMgZGVjb2RlYmluLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6IChoZWxwZXJfZmluZF9wZWVrKToKKwkgICogZ3N0L2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOiAoZmluZF9wZWVrKToKKwkgIEhhbmRsZSBuZWdhdGl2ZSBvZmZzZXRzIGJldHRlci4gRml4ZXMgZGVjb2RlYmluLgorCisyMDA1LTA1LTA5IDE0OjQ3OjE1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvOiBJbXBsZW1lbnQgYWNjZXB0X2NhcHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3Byb3h5X2dldGNhcHMpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9ldmVudCk6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfYWNjZXB0X2NhcHMpLCAoZ3N0X3BhZF9xdWVyeSk6CisJICBJbXBsZW1lbnQgYWNjZXB0X2NhcHMuCisJICBGaXggc2lsbHkgbG9jay91bmxvY2sgbWlzbWF0Y2ggaW4gYmFzZSBjbGFzcy4KKworMjAwNS0wNS0wOSAxMDo1MzoxMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSogQ2hhbmdlTG9nOgorCSogZG9jcy9kZXNpZ24vZHJhZnQtcHVzaC1wdWxsLnR4dDoKKwkqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkqIGdzdC9lbGVtZW50cy9nc3RmaWxlc2luay5jOgorCSogZ3N0L2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3RlbGVtZW50Lmg6CisJKiBnc3QvZ3N0bWVzc2FnZS5jOgorCSogZ3N0L2dzdG1lc3NhZ2UuaDoKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RwYWQuaDoKKwkqIGdzdC9nc3RxdWVyeS5jOgorCSogZ3N0L2dzdHF1ZXJ5Lmg6CisJKiBnc3QvZ3N0cXVlcnl1dGlscy5jOgorCSogZ3N0L2dzdHF1ZXJ5dXRpbHMuaDoKKwkqIGdzdC9nc3RxdWV1ZS5jOgorCSogZ3N0L2dzdHV0aWxzLmM6CisJKiBnc3QvZ3N0dXRpbHMuaDoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6CisJKiB0b29scy9nc3QteG1saW5zcGVjdC5jOgorCSAgUmVtb3ZlIG9sZCBxdWVyeSBmdW5jdGlvbnMuIFBvcnRlZCBvbGQgY29kZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUmVtb3ZlIG9sZCBxdWVyeSBmdW5jdGlvbnMuIFBvcnRlZCBvbGQgY29kZS4KKwkgIEFkZGVkIHBvc2l0aW9uL2NvbnZlcnQgaGVscGVyIGZ1bmN0aW9ucyB0byBnc3R1dGlscy4KKwkgIFJlb3JkZXJlZCBnc3RwYWQuYyBjb2RlLCBncm91cGluZyByZWxldmFudCB0aGluZ3MuCisJICBSZW1vdmUgZ3N0X21lc3NhZ2VfbmV3KCksIGFsd2F5cyBuZWVkIHRvIHNwZWZpY3kgYSBzcGVjaWZpYworCSAgbWVzc2FnZS4KKworMjAwNS0wNS0wOSAwNjoyMToxMCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0aXRlcmF0b3IuaDogQWRkIHNvbWUgaW5jbHVkZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDUtMDkgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9nc3RpdGVyYXRvci5oOiBBZGQgc29tZSBpbmNsdWRlcy4KKwkgICogZ3N0L2dzdHF1ZXJ5dXRpbHMuaDogSW5jbHVkZSBtb3JlIGhlYWRlcnMuCisJICAqIGdzdC9nc3RwYWQuaDoKKwkgICogZ3N0L2dzdHBhZC5jIChnc3RfcGFkX3F1ZXJ5X3Bvc2l0aW9uKTogTmV3IHJvdXRpbmUsIHJlcGxhY2VzCisJICBzb21lIHVzZXMgb2YgZ3N0X3BhZF9xdWVyeS4KKwkgICogZ3N0L2dzdHF1ZXJ5dXRpbHMuYzogQnVpbGQgZml4ZXMuIE1ha2UgcGFyc2UgZnVuY3Rpb25zIGlnbm9yZQorCSAgTlVMTCBvdXQgcGFyYW1ldGVycy4KKwkgIChnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uKTogTmV3IHByb2MsIGFsbG9jYXRlcyBhIG5ldyBwb3NpdGlvbgorCSAgcXVlcnkuCisJICAqIGdzdC9NYWtlZmlsZS5hbSAobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfU09VUkNFUyk6IEFkZAorCSAgZ3N0cXVlcnl1dGlscy5jIHRvIHRoZSBidWlsZC4KKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5jIChnc3Rfc3RydWN0dXJlX3NldF92YWxpc3QpOiBJbXBsZW1lbnQgd2l0aAorCSAgdGhlIGdlbmVyaWMgR19WQUxVRV9DT0xMRUNULgorCisyMDA1LTA1LTA4IDE3OjA3OjA1ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgorCisJICBnc3QvTWFrZWZpbGUuYW06IEFkZGVkIGdzdHF1ZXJ5dXRpbHMuaCB0byB0aGUgbGlzdCBvZiBoZWFkZXJzIHRvIGluc3RhbGwsIHRoYXQgd2FzIGEgJ25hY2h0eScgbW92ZSB3aW5nbyA6KQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9NYWtlZmlsZS5hbTogKGdzdF9oZWFkZXJzKToKKwkgIEFkZGVkIGdzdHF1ZXJ5dXRpbHMuaCB0byB0aGUgbGlzdCBvZiBoZWFkZXJzIHRvIGluc3RhbGwsIHRoYXQgd2FzCisJICBhICduYWNodHknIG1vdmUgd2luZ28gOikKKworMjAwNS0wNS0wNiAyMTo0MToyMiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBnc3QvZ3N0cXVlcnkuaAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTA1LTA2ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBnc3QvZ3N0cXVlcnkuaAorCSAgKiBnc3QvZ3N0cXVlcnkuYyAoX2dzdF9xdWVyeV9pbml0aWFsaXplKTogRXh0ZW5kIEdzdFF1ZXJ5IGZyb20KKwkgIEdzdERhdGEsIGluaXQgYSBtZW1jaHVuay4KKwkgIChzdGFuZGFyZF9kZWZpbml0aW9ucyk6IEFkZCBhIGZldyBxdWVyeSB0eXBlcywgZGVwcmVjYXRlIGEgZmV3LgorCSAgKGdzdF9xdWVyeV9nZXRfdHlwZSk6IE5ldyBwcm9jLgorCSAgKF9nc3RfcXVlcnlfY29weSwgX2dzdF9xdWVyeV9mcmVlLCBnc3RfcXVlcnlfbmV3KTogR3N0RGF0YQorCSAgaW1wbGVtZW50YXRpb24uCisJICAoZ3N0X3F1ZXJ5X25ld19hcHBsaWNhdGlvbiwgZ3N0X3F1ZXJ5X2dldF9zdHJ1Y3R1cmUpOiBOZXcgcHVibGljCisJICBwcm9jcy4KKwkgICogZG9jcy9kZXNpZ24vZHJhZnQtcXVlcnkudHh0OiBSZW1vdmVkIExJTktTIGZyb20gdGhlIHF1ZXJ5IHR5cGVzLAorCSAgYmVjYXVzZSBhbGwgdGhlIHJlc3QgY2FuIGJlIGRpc3BhdGNoZWQgdG8gb3RoZXIgcGFkcyAtLSBzZWVtZWQKKwkgIHVnbHkgdG8gaGF2ZSBhIHF1ZXJ5IHRoYXQgY291bGRuJ3QgYmUgZGlzcGF0Y2hlZC4gaW50ZXJuYWxfbGlua3MKKwkgIGlzIGZpbmUgYXMgYSBwYWQgbWV0aG9kLgorCSAgKiBnc3QvZ3N0cGFkLmg6IEFkZCBxdWVyeTIgYXMgYSBwYWQgbWV0aG9kLCBhZGQgdGhlIG5ldyBmdW5jdGlvbnMKKwkgIGluIGdzdHBhZC5jLCBidXQgbWFpbnRhaW4gYmluYXJ5IGNvbXBhdGliaWxpdHkgZm9yIHRoZSBtb21lbnQuCisJICBXaWxsIGZpeCBiZWZvcmUgMC45IGlzIG91dC4KKwkgICogZ3N0L2dzdHF1ZXJ5dXRpbHMuYzoKKwkgICogZ3N0L2dzdHF1ZXJ5dXRpbHMuaDogTmV3IGZpbGVzLCBpbXBsZW1lbnQgMyBtZXRob2RzIGZvciBlYWNoCisJICBxdWVyeSB0eXBlOiBwYXJzZV9xdWVyeSwgcGFyc2VfcmVzcG9uc2UsIGFuZCBzZXQuIFByb2JhYmx5IG5lZWQgYW4KKwkgIGFsbG9jYXRvciBhcyB3ZWxsLgorCSAgKiBnc3QvZ3N0Lmg6IEFkZCBnc3RxdWVyeS5oIGFuZCBnc3RxdWVyeXV0aWxzLmggdG8gdGhlIGxpc3QuCisJICAqIGdzdC9lbGVtZW50cy9nc3RmaWxlc2luay5jIChnc3RfZmlsZXNpbmtfcXVlcnkyKToKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jIChnc3RfYmFzZXNyY19xdWVyeTIpOiBSZXBsYWNlIG9sZCBxdWVyeSwKKwkgIHF1ZXJ5X3R5cGVzLCBhbmQgZm9ybWF0cyBtZXRob2RzLgorCSAgKiBnc3QvZ3N0cGFkLmMgKGdzdF9wYWRfcXVlcnkyLCBnc3RfcGFkX3F1ZXJ5Ml9kZWZhdWx0KQorCSAgKGdzdF9wYWRfc2V0X3F1ZXJ5Ml9mdW5jdGlvbik6IE5ldyBmdW5jdGlvbnMuCisJICAoZ3N0X3JlYWxfcGFkX2luaXQpOiBTZXQgcXVlcnkyX2RlZmF1bHQgYXMgdGhlIGRlZmF1bHQgcXVlcnkyCisJICBmdW5jdGlvbi4gQmFzaWNhbGx5IGp1c3QgZGlzcGF0Y2hlcyB0byBpbnRlcm5hbGx5IGxpbmtlZCBwYWRzLgorCSAgTmVlZHMgcmV2aWV3IQorCSAgKiBnc3QvZ3N0ZGF0YV9wcml2YXRlLmggKF9HU1RfREFUQV9JTklUKTogU2V0IGRhdGEtPnJlZmNvdW50IHRvIDEKKwkgIHdpdGhvdXQgdXNpbmcgdGhlIGF0b21pYyBvcGVyYXRpb25zLiBPbmx5IG9uZSB0aHJlYWQgY2FuIHBvc3NpYmx5CisJICBiZSBhY2Nlc3NpbmcgdGhlIGRhdGEgYXQgdGhpcyBwb2ludC4gQ2hhbmdlZCBzbyBhcyB0byBhdm9pZAorCSAgZ3N0X2F0b21pYyBvcGVyYXRpb25zLgorCisyMDA1LTA1LTA2IDE5OjUwOjIzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0cGFkLmM6IEFsc28gc2V0IGNhcHMgaWYgd2UgdXNlIHRoZSBmYWxsYmFjayBidWZmZXIgYWxsb2MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9hbGxvY19idWZmZXIpLCAoZ3N0X3BhZF9wdXNoKToKKwkgIEFsc28gc2V0IGNhcHMgaWYgd2UgdXNlIHRoZSBmYWxsYmFjayBidWZmZXIgYWxsb2MuCisKKzIwMDUtMDUtMDYgMTc6MzM6NTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+CisKKwkgIFB1cmdlIEdzdEF0b21pYyBzdHVmZiBmcm9tIGRvY3MgYW5kIHdpbjMyIG1ha2VmaWxlcyBhcyB3ZWxsCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9nc3QvTWFrZWZpbGUuYW06CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6CisJICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6CisJICAqIGRvY3MvZ3N0L3RtcGwvZ3N0YXRvbWljLnNnbWw6CisJICAqIGRvY3MvZ3N0L3RtcGwvZ3N0bWVtY2h1bmsuc2dtbDoKKwkgICogdGVzdHN1aXRlL2VsZW1lbnRzL3N0cnVjdF9pMzg2Lmg6CisJICAqIHdpbjMyL0dTdHJlYW1lci52Y3Byb2o6CisJICAqIHdpbjMyL01ha2VmaWxlOgorCSAgUHVyZ2UgR3N0QXRvbWljIHN0dWZmIGZyb20gZG9jcyBhbmQgd2luMzIgbWFrZWZpbGVzIGFzIHdlbGwKKworMjAwNS0wNS0wNiAxNzoxMDo0OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0LzogRml4IGdzdF9wYWRfcGVlcl9nZXRfY2FwcygpLCBtYWtlIGl0IHJldHVybiBOVUxMIGlmIG5vIHBlZXIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3Byb3h5X2dldGNhcHMpOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOiAoZ3N0X2NhcHNmaWx0ZXJfZ2V0Y2Fwcyk6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfcGVlcl9nZXRfY2Fwcyk6CisJICAqIGdzdC9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2luaXQpLCAoZ3N0X3F1ZXVlX2dldGNhcHMpLAorCSAgKGdzdF9xdWV1ZV9idWZmZXJhbGxvYyksIChnc3RfcXVldWVfaGFuZGxlX3NpbmtfZXZlbnQpLAorCSAgKGdzdF9xdWV1ZV9zcmNfYWN0aXZhdGUpLCAoZ3N0X3F1ZXVlX2NoYW5nZV9zdGF0ZSk6CisJICAqIGdzdC9nc3RxdWV1ZS5oOgorCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9lbGVtZW50X2dldF9jb21wYXRpYmxlX3BhZF90ZW1wbGF0ZSksCisJICAoaW50ZXJzZWN0X2NhcHNfZnVuYyk6CisJICBGaXggZ3N0X3BhZF9wZWVyX2dldF9jYXBzKCksIG1ha2UgaXQgcmV0dXJuIE5VTEwgaWYgbm8gcGVlci4KKwkgIEFsd2F5cyB0YWtlIFFVRVVFX0xPQ0sgYWZ0ZXIgU1RSRUFNX0xPQ0sgb3Igd2UgbWlnaHQgZGVhZGxvY2suCisJICBTb21lIGZpeGVzIGZvciB0aGUgcGVlcl9nZXRfY2FwcygpIGNoYW5nZS4KKworMjAwNS0wNS0wNiAxNjoxOTo1OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogQWN0dWFsbHkgZG8gc29tZXRoaW5nIHdpdGggZXJyb3IgY29kZXMgcmV0dXJuZWQgZnJvbSB0aGUgcHVzaCBmdW5jdGlvbnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlc2lua19wcmVyb2xsX3F1ZXVlX2VtcHR5KSwKKwkgIChnc3RfYmFzZXNpbmtfaGFuZGxlX2J1ZmZlciksIChnc3RfYmFzZXNpbmtfY2hhaW5fdW5sb2NrZWQpLAorCSAgKGdzdF9iYXNlc2lua19hY3RpdmF0ZSk6CisJICBBY3R1YWxseSBkbyBzb21ldGhpbmcgd2l0aCBlcnJvciBjb2RlcyByZXR1cm5lZCBmcm9tIHRoZSBwdXNoCisJICBmdW5jdGlvbnMuCisKKzIwMDUtMDUtMDYgMDg6MjU6MTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIFNvbWUgbW9yZSBkb2N1bWVudGF0aW9uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtZWxlbWVudC1zaW5rLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1lbGVtZW50LXNvdXJjZS50eHQ6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZXNpbmtfY2xhc3NfaW5pdCksCisJICAoZ3N0X2Jhc2VzaW5rX2V2ZW50KSwgKGdzdF9iYXNlc2lua19hY3RpdmF0ZSk6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlc3JjX2luaXQpLCAoZ3N0X2Jhc2VzcmNfdW5sb2NrKSwKKwkgIChnc3RfYmFzZXNyY19hY3RpdmF0ZSk6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuaDoKKwkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X3BhZHNfYWN0aXZhdGUpOgorCSAgU29tZSBtb3JlIGRvY3VtZW50YXRpb24uCisJICBGaXhlZCBzY2hlZHVsaW5nIGRlY2lzaW9uIGluIF9wYWRzX2FjdGl2YXRlKCkuCisKKzIwMDUtMDUtMDUgMjE6NTk6NTMgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3RwYWQuYzoKKwkgIGZpbmFsIGNydWZ0IGZpeGFnZQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaW5hbCBjcnVmdCBmaXhhZ2UKKworMjAwNS0wNS0wNSAyMTo0NTo1NCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJKiBnc3QvZWxlbWVudHMvZ3N0dGVlLmM6CisJKiBnc3QvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkgIGNydWZ0IHJlbW92YWwKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgY3J1ZnQgcmVtb3ZhbAorCisyMDA1LTA1LTA1IDIxOjQyOjI0ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6CisJICByZXZlcnQgY3J1ZnQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmV2ZXJ0IGNydWZ0CisKKzIwMDUtMDUtMDUgMjE6Mzc6MzQgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBhZC5oOgorCSAgcmV2ZXJ0IGFjY2lkZW50YWwgY29tbWl0IG9mIGNydWZ0IC0tIGRvaAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICByZXZlcnQgYWNjaWRlbnRhbCBjb21taXQgb2YgY3J1ZnQgLS0gZG9oCisKKzIwMDUtMDUtMDUgMTU6MDI6NDAgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgY2hlY2svcGlwZWxpbmVzL3NpbXBsZV9sYXVuY2hfbGluZXMuYyAodGVzdF8yX2VsZW1lbnRzKTogIkZpeCIgdGhlIHRlc3Qgc3VpdGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDUtMDUgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGNoZWNrL3BpcGVsaW5lcy9zaW1wbGVfbGF1bmNoX2xpbmVzLmMgKHRlc3RfMl9lbGVtZW50cyk6ICJGaXgiCisJICB0aGUgdGVzdCBzdWl0ZS4KKworMjAwNS0wNS0wNSAxMTo0MzowNiArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgorCisJKiBnc3RyZWFtZXIuc3BlYy5pbjoKKwkgIGZpeCBicm9rZW4gc3BlYyBmaWxlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGZpeCBicm9rZW4gc3BlYyBmaWxlCisKKzIwMDUtMDUtMDUgMDk6MzE6NTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC86IEFkZGVkIG9iamVjdCB0byBoZWxwIGluIG1ha2luZyBjb2xsZWN0IHBhZCBiYXNlZCBlbGVtZW50cy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9NYWtlZmlsZS5hbToKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2VzcmNfaW5pdCksCisJICAoZ3N0X2Jhc2VzcmNfc2V0X2RhdGFmbG93X2Z1bmNzKSwgKGdzdF9iYXNlc3JjX3F1ZXJ5KToKKwkgICogZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0cGFkc19nZXRfdHlwZSksCisJICAoZ3N0X2NvbGxlY3RwYWRzX2NsYXNzX2luaXQpLCAoZ3N0X2NvbGxlY3RwYWRzX2luaXQpLAorCSAgKGdzdF9jb2xsZWN0cGFkc19maW5hbGl6ZSksIChnc3RfY29sbGVjdHBhZHNfbmV3KSwKKwkgIChnc3RfY29sbGVjdHBhZHNfc2V0X2Z1bmN0aW9uKSwgKGdzdF9jb2xsZWN0cGFkc19hZGRfcGFkKSwKKwkgIChmaW5kX3BhZCksIChnc3RfY29sbGVjdHBhZHNfcmVtb3ZlX3BhZCksCisJICAoZ3N0X2NvbGxlY3RwYWRzX2lzX2FjdGl2ZSksIChnc3RfY29sbGVjdHBhZHNfY29sbGVjdCksCisJICAoZ3N0X2NvbGxlY3RwYWRzX2NvbGxlY3RfcmFuZ2UpLCAoZ3N0X2NvbGxlY3RwYWRzX3N0YXJ0KSwKKwkgIChnc3RfY29sbGVjdHBhZHNfc3RvcCksIChnc3RfY29sbGVjdHBhZHNfcGVlayksCisJICAoZ3N0X2NvbGxlY3RwYWRzX3BvcCksIChnc3RfY29sbGVjdHBhZHNfYXZhaWxhYmxlKSwKKwkgIChnc3RfY29sbGVjdHBhZHNfcmVhZCksIChnc3RfY29sbGVjdHBhZHNfZmx1c2gpLAorCSAgKGdzdF9jb2xsZWN0cGFkc19jaGFpbik6CisJICAqIGdzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg6CisJICAqIGdzdC9lbGVtZW50cy9NYWtlZmlsZS5hbToKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6CisJICAqIGdzdC9lbGVtZW50cy9nc3RmYWtlc2luay5jOiAoZ3N0X2Zha2VzaW5rX2NsYXNzX2luaXQpLAorCSAgKGdzdF9mYWtlc2lua19nZXRfdGltZXMpLCAoZ3N0X2Zha2VzaW5rX2V2ZW50KSwKKwkgIChnc3RfZmFrZXNpbmtfcHJlcm9sbCksIChnc3RfZmFrZXNpbmtfcmVuZGVyKToKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IChnc3RfZmlsZXNpbmtfY2xhc3NfaW5pdCksCisJICAoZ3N0X2ZpbGVzaW5rX2luaXQpLCAoZ3N0X2ZpbGVzaW5rX3NldF9sb2NhdGlvbiksCisJICAoZ3N0X2ZpbGVzaW5rX29wZW5fZmlsZSksIChnc3RfZmlsZXNpbmtfY2xvc2VfZmlsZSksCisJICAoZ3N0X2ZpbGVzaW5rX3BhZF9xdWVyeSksIChnc3RfZmlsZXNpbmtfZXZlbnQpLAorCSAgKGdzdF9maWxlc2lua19yZW5kZXIpLCAoZ3N0X2ZpbGVzaW5rX2NoYW5nZV9zdGF0ZSk6CisJICAqIGdzdC9lbGVtZW50cy9nc3RmaWxlc2luay5oOgorCSAgQWRkZWQgb2JqZWN0IHRvIGhlbHAgaW4gbWFraW5nIGNvbGxlY3QgcGFkIGJhc2VkIGVsZW1lbnRzLgorCSAgUG9ydGVkIGZpbGVzaW5rLgorCSAgTWFrZSBldmVudCBmdW5jdGlvbiBpbiBzaW5rIGJhc2VjbGFzcyByZXR1cm4gZ2Jvb2xlYW4uCisKKzIwMDUtMDUtMDUgMDk6Mjg6MDEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC86IEZpeCBuYW1lIGxvb2t1cCBpbiBHc3RCaW4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9zZW5kX2V2ZW50KSwgKGNvbXBhcmVfbmFtZSksCisJICAoZ3N0X2Jpbl9nZXRfYnlfbmFtZSk6CisJICAqIGdzdC9nc3RidWZmZXIuaDoKKwkgICogZ3N0L2dzdGNsb2NrLmM6IChnc3RfY2xvY2tfZW50cnlfbmV3KSwgKGdzdF9jbG9ja19jbGFzc19pbml0KSwKKwkgIChnc3RfY2xvY2tfZmluYWxpemUpOgorCSAgKiBnc3QvZ3N0ZGF0YS5jOiAoZ3N0X2RhdGFfcmVwbGFjZSk6CisJICAqIGdzdC9nc3RkYXRhLmg6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9yZXF1ZXN0X3BhZCksCisJICAoZ3N0X2VsZW1lbnRfcGFkc19hY3RpdmF0ZSk6CisJICAqIGdzdC9nc3RvYmplY3QuYzogKGdzdF9vYmplY3RfaW5pdCksIChnc3Rfb2JqZWN0X3JlZiksCisJICAoZ3N0X29iamVjdF91bnJlZik6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfc2V0X2FjdGl2ZSksIChnc3RfcGFkX3BlZXJfc2V0X2FjdGl2ZSksCisJICAoZ3N0X3BhZF9zZXRfY2hlY2tnZXRyYW5nZV9mdW5jdGlvbiksCisJICAoZ3N0X3BhZF9saW5rX2NoZWNrX2NvbXBhdGlibGVfdW5sb2NrZWQpLCAoZ3N0X3BhZF9zZXRfY2FwcyksCisJICAoZ3N0X3BhZF9jaGVja19wdWxsX3JhbmdlKSwgKGdzdF9wYWRfcHVsbF9yYW5nZSksCisJICAoZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHMpLCAoZ3N0X3BhZF9zdGFydF90YXNrKSwKKwkgIChnc3RfcGFkX3BhdXNlX3Rhc2spLCAoZ3N0X3BhZF9zdG9wX3Rhc2spOgorCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9lbGVtZW50X2dldF9jb21wYXRpYmxlX3BhZF90ZW1wbGF0ZSksCisJICAoZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQpLCAoZ3N0X3BhZF9wcm94eV9nZXRjYXBzKToKKwkgIEZpeCBuYW1lIGxvb2t1cCBpbiBHc3RCaW4uCisJICBBZGRlZCBfZGF0YV9yZXBsYWNlKCkgZnVuY3Rpb24gYW5kIF9idWZmZXJfcmVwbGFjZSgpCisJICBVc2UgZmluYWxpemUgbWV0aG9kIHRvIGNsZWFuIHVwIGNsb2NrLgorCSAgRml4IHJlZmNvdW50aW5nIG9uIHJlcXVlc3QgcGFkcy4KKwkgIEZpeCBwYWQgc2NoZWR1bGUgbW9kZSBlcnJvci4KKwkgIFNvbWUgbW9yZSBvYmplY3QgcmVmY291bnRpbmcgZGVidWcgaW5mbywKKworMjAwNS0wNS0wNCAyMToyOTo0NCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICBHQ0MgNCBmaXhlbi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNS0wNCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCSAgKiBjaGVjay9NYWtlZmlsZS5hbToKKwkgICogZG9jcy9nc3QvdG1wbC9nc3RhdG9taWMuc2dtbDoKKwkgICogZG9jcy9nc3QvdG1wbC9nc3RwbHVnaW4uc2dtbDoKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlc2lua19hY3RpdmF0ZSk6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlc3JjX2NsYXNzX2luaXQpLAorCSAgKGdzdF9iYXNlc3JjX2luaXQpLCAoZ3N0X2Jhc2VzcmNfc2V0X2RhdGFmbG93X2Z1bmNzKSwKKwkgIChnc3RfYmFzZXNyY19xdWVyeSksIChnc3RfYmFzZXNyY19zZXRfcHJvcGVydHkpLAorCSAgKGdzdF9iYXNlc3JjX2dldF9wcm9wZXJ0eSksIChnc3RfYmFzZXNyY19jaGVja19nZXRfcmFuZ2UpLAorCSAgKGdzdF9iYXNlc3JjX2FjdGl2YXRlKToKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1fc2lua19hY3RpdmF0ZSksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NyY19hY3RpdmF0ZSk6CisJICAqIGdzdC9lbGVtZW50cy9nc3RlbGVtZW50cy5jOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiAoZ3N0X2Zha2VzcmNfY2xhc3NfaW5pdCksCisJICAoZ3N0X2Zha2VzcmNfc2V0X3Byb3BlcnR5KSwgKGdzdF9mYWtlc3JjX2dldF9wcm9wZXJ0eSk6CisJICAqIGdzdC9lbGVtZW50cy9nc3R0ZWUuYzogKGdzdF90ZWVfc2lua19hY3RpdmF0ZSk6CisJICAqIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogKGZpbmRfZWxlbWVudF9nZXRfbGVuZ3RoKSwKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfY2hlY2tnZXRyYW5nZSksCisJICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2FjdGl2YXRlKToKKwkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9zYXZlX3RoeXNlbGYpLCAoZ3N0X2Jpbl9yZXN0b3JlX3RoeXNlbGYpOgorCSAgKiBnc3QvZ3N0Y2Fwcy5jOiAoZ3N0X2NhcHNfZG9fc2ltcGxpZnkpLCAoZ3N0X2NhcHNfc2F2ZV90aHlzZWxmKSwKKwkgIChnc3RfY2Fwc19sb2FkX3RoeXNlbGYpOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfcGFkc19hY3RpdmF0ZSksCisJICAoZ3N0X2VsZW1lbnRfc2F2ZV90aHlzZWxmKSwgKGdzdF9lbGVtZW50X3Jlc3RvcmVfdGh5c2VsZik6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfbG9hZF9hbmRfbGluayksIChnc3RfcGFkX3NhdmVfdGh5c2VsZiksCisJICAoZ3N0X2dob3N0X3BhZF9zYXZlX3RoeXNlbGYpLCAoZ3N0X3BhZF9jaGVja19wdWxsX3JhbmdlKToKKwkgICogZ3N0L2dzdHBhZC5oOgorCSAgKiBnc3QvZ3N0eG1sLmM6IChnc3RfeG1sX3dyaXRlKSwgKGdzdF94bWxfcGFyc2VfZG9jKSwKKwkgIChnc3RfeG1sX3BhcnNlX2ZpbGUpLCAoZ3N0X3htbF9wYXJzZV9tZW1vcnkpLAorCSAgKGdzdF94bWxfZ2V0X2VsZW1lbnQpLCAoZ3N0X3htbF9tYWtlX2VsZW1lbnQpOgorCSAgKiBnc3QvaW5kZXhlcnMvZ3N0ZmlsZWluZGV4LmM6IChnc3RfZmlsZV9pbmRleF9sb2FkKSwKKwkgIChfZmlsZV9pbmRleF9pZF9zYXZlX3htbCksIChnc3RfZmlsZV9pbmRleF9jb21taXQpOgorCSAgKiBnc3QvcmVnaXN0cmllcy9nc3RsaWJ4bWxyZWdpc3RyeS5jOiAocmVhZF9zdHJpbmcpLCAocmVhZF91aW50KSwKKwkgIChyZWFkX2VudW0pLCAobG9hZF9wYWRfdGVtcGxhdGUpLCAobG9hZF9mZWF0dXJlKSwgKGxvYWRfcGx1Z2luKSwKKwkgIChsb2FkX3BhdGhzKToKKwkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOiAoZ3N0X2RwX3BhY2tldF9mcm9tX2NhcHMpLAorCSAgKGdzdF9kcF9wYWNrZXRfZnJvbV9ldmVudCksIChnc3RfZHBfY2Fwc19mcm9tX3BhY2tldCk6CisJICAqIHRvb2xzL2dzdC1jb21wbGV0ZS5jOiAobWFpbik6CisJICAqIHRvb2xzL2dzdC1jb21wcHJlcC5jOiAobWFpbik6CisJICAqIHRvb2xzL2dzdC1pbnNwZWN0LmM6IChwcmludF9lbGVtZW50X3Byb3BlcnRpZXNfaW5mbyk6CisJICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKHhtbGxhdW5jaF9wYXJzZV9jbWRsaW5lKToKKwkgICogdG9vbHMvZ3N0LXhtbGluc3BlY3QuYzogKHByaW50X2VsZW1lbnRfcHJvcGVydGllcyk6CisJICBHQ0MgNCBmaXhlbi4KKworMjAwNS0wNS0wNCAxOTo0MTowNSArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgorCisJKiBnc3RyZWFtZXIuc3BlYy5pbjoKKwkgIGZpeCB1cCBzcGVjIGZpbGUgdG8gd29yayBmb3IgMC45IGJyYW5jaAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaXggdXAgc3BlYyBmaWxlIHRvIHdvcmsgZm9yIDAuOSBicmFuY2gKKworMjAwNS0wNS0wMyAxMjo0Njo0NyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkgIGdzdC9nc3RwbHVnaW4uYzogYXBwbHkgcGF0Y2ggZnJvbSAjMTcyNTI2IHRvIG1ha2UgcmVnaXN0ZXIgd29yayBvbiBNYWNPU1gKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGx1Z2luLmM6IChnc3RfcGx1Z2luX2NoZWNrX21vZHVsZSksCisJICAoZ3N0X3BsdWdpbl9jaGVja19maWxlKSwgKGdzdF9wbHVnaW5fbG9hZF9maWxlKToKKwkgIGFwcGx5IHBhdGNoIGZyb20gIzE3MjUyNiB0byBtYWtlIHJlZ2lzdGVyIHdvcmsgb24gTWFjT1NYCisKKzIwMDUtMDUtMDIgMTY6NTA6MzEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBmaWxlIC5jdnNpZ25vcmUgd2FzIGluaXRpYWxseSBhZGRlZCBvbiBicmFuY2ggQlJBTkNILUdTVFJFQU1FUi0wXzguCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGZpbGUgLmN2c2lnbm9yZSB3YXMgaW5pdGlhbGx5IGFkZGVkIG9uIGJyYW5jaCBCUkFOQ0gtR1NUUkVBTUVSLTBfOC4KKworMjAwNS0wNS0wMiAxNTozMTozNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvaW5kZXhlcnMvY2FjaGUxLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2luZGV4ZXJzL2luZGV4ZHVtcC5jOgorCSogdGVzdHN1aXRlL2luZGV4ZXJzL2NhY2hlMS5jOgorCSogdGVzdHN1aXRlL2luZGV4ZXJzL2luZGV4ZHVtcC5jOgorCSAgbW9yZSBwcmludCBmb3JtYXQgZml4ZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgbW9yZSBwcmludCBmb3JtYXQgZml4ZXMKKworMjAwNS0wNS0wMiAxNToyMDozMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIGdzdC9nc3Rjb25maWcuaC5pbjoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvZGVidWcvcHJpbnRmX2V4dGVuc2lvbi5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9lbGVtZW50cy9wcm9wZXJ0eS5oOgorCSogdGVzdHN1aXRlL2RlYnVnL3ByaW50Zl9leHRlbnNpb24uYzoKKwkqIHRlc3RzdWl0ZS9lbGVtZW50cy9wcm9wZXJ0eS5oOgorCSAgbWVyZ2VzIGZyb20gMC44IGZvciA2NCBiaXQgaXNzdWVzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIG1lcmdlcyBmcm9tIDAuOCBmb3IgNjQgYml0IGlzc3VlcworCisyMDA1LTA1LTAyIDEzOjU1OjIxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBBZGRlZCBkcmFmdCBmb3IgbmV3IHF1ZXJ5IEFQSS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9kcmFmdC1wdXNoLXB1bGwudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9kcmFmdC1xdWVyeS50eHQ6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlc3JjX2dldF9yYW5nZV91bmxvY2tlZCksCisJICAoZ3N0X2Jhc2VzcmNfc3RhcnQpOgorCSAgQWRkZWQgZHJhZnQgZm9yIG5ldyBxdWVyeSBBUEkuCisJICBBZGRlZCBkcmFmdCBmb3IgYmV0dGVyIHNlbGVjdGluZyBzY2hlZHVsaW5nIG1ldGhvZHMuCisJICBNYWtlIGJhc2VzcmMgaWdub3JlIGxlbmd0aCBpZiB0aGUgc3ViY2xhc3MgZG9lcyBub3Qgc3VwcG9ydAorCSAgaXQuCisKKzIwMDUtMDUtMDIgMTE6NTQ6MzIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBnc3QvTWFrZWZpbGUuYW06CisJICBhdXRvbWFrZSAxLjUgZml4ZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYXV0b21ha2UgMS41IGZpeGVzCisKKzIwMDUtMDUtMDIgMTE6NDc6MTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBDaGFuZ2VMb2c6CisJKiBkb2NzL2ZhcS9NYWtlZmlsZS5hbToKKwkqIGRvY3MvbWFudWFsL01ha2VmaWxlLmFtOgorCSogZG9jcy9tYW51YWxzLm1hazoKKwkqIGRvY3MvcHdnL01ha2VmaWxlLmFtOgorCSogZ3N0L01ha2VmaWxlLmFtOgorCSAgcG9zc2libGUgZml4ZXMgZm9yIGF1dG9tYWtlLTEuNQorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBwb3NzaWJsZSBmaXhlcyBmb3IgYXV0b21ha2UtMS41CisKKzIwMDUtMDQtMjggMTY6Mjg6MjggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC86IEJldHRlciBkZWJ1Z2dpbmcgb2YgY2xvY2tpbmcgaW5mby4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2VzaW5rX2Jhc2VfaW5pdCksCisJICAoZ3N0X2Jhc2VzaW5rX3BhZF9nZXRjYXBzKSwgKGdzdF9iYXNlc2lua19pbml0KSwKKwkgIChnc3RfYmFzZXNpbmtfZG9fc3luYyk6CisJICAqIGdzdC9nc3RjbG9jay5jOiAoZ3N0X2Nsb2NrX2VudHJ5X25ldyk6CisJICAqIGdzdC9nc3RldmVudC5jOiAoZ3N0X2V2ZW50X2Rpc2NvbnRfZ2V0X3ZhbHVlKToKKwkgICogZ3N0L2dzdHBpcGVsaW5lLmM6IChwaXBlbGluZV9idXNfaGFuZGxlciksCisJICAoZ3N0X3BpcGVsaW5lX2NoYW5nZV9zdGF0ZSk6CisJICAqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOiAoZ3N0X3N5c3RlbV9jbG9ja19pZF93YWl0X3VubG9ja2VkKToKKwkgIEJldHRlciBkZWJ1Z2dpbmcgb2YgY2xvY2tpbmcgaW5mby4KKwkgIEFsbG93IE5VTEwgdmFsdWVzIHdoZW4gZ2V0dGluZyBkaXNjb250IHZhbHVlcy4KKworMjAwNS0wNC0yNyAxNDoxOTo0NiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgY2hlY2svZ3N0LzogSW5jcmVhc2UgdGltZW91dCBmb3IgY2hlY2tzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dzdC9nc3RvYmplY3QuYzogKFNUQVJUX1RFU1QpLCAoZ3N0X29iamVjdF9zdWl0ZSk6CisJICAqIGNoZWNrL2dzdC9nc3RwYWQuYzogKGdzdF9wYWRfc3VpdGUpOgorCSAgSW5jcmVhc2UgdGltZW91dCBmb3IgY2hlY2tzLgorCisyMDA1LTA0LTI3IDEzOjUyOjQyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgY2hlY2svTWFrZWZpbGUuYW06IGZpeCB0aGUgYnJva2VuIHJ1bGUgZm9yIGNsZWFudXAuICBBcHBhcmVudGx5IHRoaXMgcnVsZSBpcyBvbmx5IG5lZWRlZCBvbiBGQzIsIHNvIG1heWJlIHRoaXMgd2FycmFuLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svTWFrZWZpbGUuYW06CisJICBmaXggdGhlIGJyb2tlbiBydWxlIGZvciBjbGVhbnVwLiAgQXBwYXJlbnRseSB0aGlzIHJ1bGUgaXMKKwkgIG9ubHkgbmVlZGVkIG9uIEZDMiwgc28gbWF5YmUgdGhpcyB3YXJyYW50cyBmdXJ0aGVyIGF1dG90b29sCisJICBpbnNwZWN0aW9uLgorCisyMDA1LTA0LTI2IDE4OjA3OjQ1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0dHJhc2hzdGFjay5oOiBPb29oaC4gYSBuYXN0eSBvbmUhIEFmdGVyIGhhdmluZyBhIGZhaWxlZCBwb3AoKSBmcm9tIHRoZSBzdGFjaywgaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBzdGFjayBpcyAuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0dHJhc2hzdGFjay5oOgorCSAgT29vaGguIGEgbmFzdHkgb25lISBBZnRlciBoYXZpbmcgYSBmYWlsZWQgcG9wKCkgZnJvbSB0aGUgc3RhY2ssCisJICBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHN0YWNrIGlzIGVtcHR5LiBJbiB0aGF0IGNhc2UsIGRvbid0CisJICBmb2xsb3cgdGhlIE5VTEwgcG9pbnRlci4KKworMjAwNS0wNC0yNSAxMzowMDo0NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0LzogUmVtb3ZlIGdzdF9saWJyYXJ5X2xvYWQgYXMgaXQgZG9lcyBtb3JlIGhhcm0gdGhhbiBnb29kIHdpdGggdGhlIG5ldyBnX21vZHVsZSBmbGFncy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3NldF9hY3RpdmUpLCAoZ3N0X3BhZF9wZWVyX3NldF9hY3RpdmUpLAorCSAgKGdzdF9wYWRfc2V0X2NoZWNrZ2V0cmFuZ2VfZnVuY3Rpb24pLAorCSAgKGdzdF9wYWRfbGlua19jaGVja19jb21wYXRpYmxlX3VubG9ja2VkKSwgKGdzdF9wYWRfbGlua19wcmVwYXJlKSwKKwkgIChnc3RfcGFkX2NoZWNrX3B1bGxfcmFuZ2UpLCAoZ3N0X3BhZF9wdWxsX3JhbmdlKSwKKwkgIChnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXRfY2FwcyksIChnc3RfcGFkX3N0YXJ0X3Rhc2spLAorCSAgKGdzdF9wYWRfcGF1c2VfdGFzayksIChnc3RfcGFkX3N0b3BfdGFzayk6CisJICAqIGdzdC9nc3RwbHVnaW4uYzogKGdzdF9wbHVnaW5fbG9hZCk6CisJICAqIGdzdC9nc3RwbHVnaW4uaDoKKwkgIFJlbW92ZSBnc3RfbGlicmFyeV9sb2FkIGFzIGl0IGRvZXMgbW9yZSBoYXJtIHRoYW4gZ29vZCB3aXRoCisJICB0aGUgbmV3IGdfbW9kdWxlIGZsYWdzLgorCSAgUmV2ZXJ0IGJvZ3VzIGNhcHMgdGVtcGxhdGUgY2hlY2sgaW4gcGFkIGxpbmtpbmcsIHBhZCBjYXBzCisJICBhcmUgaW1wb3J0YW50IHdoZW4gbGlua2luZyBub3QgdGhlIHRlbXBsYXRlLCB3aGljaCBpcyBtb3JlCisJICBnZW5lcmFsIHRoYW4gdGhlIGN1cnJlbnQgY2Fwcy4KKworMjAwNS0wNC0yNSAxMTo1MTowOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHRlc3RzL01ha2VmaWxlLmFtOgorCSAgdGhlcmUgaXMgbm8gc3BlZWQuICByZWFsbHkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHRoZXJlIGlzIG5vIHNwZWVkLiAgcmVhbGx5LgorCisyMDA1LTA0LTI1IDA5OjUxOjA2ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+CisKKwkgIGdzdC9hdXRvcGx1Zy86IERpZSwgc3BpZGVyLCBkaWUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2F1dG9wbHVnLy5jdnNpZ25vcmU6CisJICAqIGdzdC9hdXRvcGx1Zy9NYWtlZmlsZS5hbToKKwkgICogZ3N0L2F1dG9wbHVnL2dzdHNlYXJjaGZ1bmNzLmM6CisJICAqIGdzdC9hdXRvcGx1Zy9nc3RzZWFyY2hmdW5jcy5oOgorCSAgKiBnc3QvYXV0b3BsdWcvZ3N0c3BpZGVyLmM6CisJICAqIGdzdC9hdXRvcGx1Zy9nc3RzcGlkZXIuaDoKKwkgICogZ3N0L2F1dG9wbHVnL2dzdHNwaWRlcmlkZW50aXR5LmM6CisJICAqIGdzdC9hdXRvcGx1Zy9nc3RzcGlkZXJpZGVudGl0eS5oOgorCSAgKiBnc3QvYXV0b3BsdWcvc3BpZGVydGVzdC5jOgorCSAgRGllLCBzcGlkZXIsIGRpZS4KKworMjAwNS0wNC0yNSAwOTo0NTozNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0L2dzdHBhZC4qOiBBZGRlZCBzdHVicyBmb3IgdW5pbXBsZW1lbnRlZCBmdW5jdGlvbnMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9zZXRfYWN0aXZlKSwgKGdzdF9wYWRfcGVlcl9zZXRfYWN0aXZlKSwKKwkgIChnc3RfcGFkX3NldF9jaGVja2dldHJhbmdlX2Z1bmN0aW9uKSwgKGdzdF9wYWRfY2hlY2tfcHVsbF9yYW5nZSksCisJICAoZ3N0X3BhZF9wdWxsX3JhbmdlKSwgKGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldF9jYXBzKSwKKwkgIChnc3RfcGFkX3N0YXJ0X3Rhc2spLCAoZ3N0X3BhZF9wYXVzZV90YXNrKSwgKGdzdF9wYWRfc3RvcF90YXNrKToKKwkgICogZ3N0L2dzdHBhZC5oOgorCSAgQWRkZWQgc3R1YnMgZm9yIHVuaW1wbGVtZW50ZWQgZnVuY3Rpb25zLgorCisyMDA1LTA0LTI1IDAzOjU0OjI4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSAgZmlsZSBweXRob24tZWxlbWVudHMudHh0IHdhcyBpbml0aWFsbHkgYWRkZWQgb24gYnJhbmNoIEJSQU5DSC1HU1RSRUFNRVItMF84LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBmaWxlIHB5dGhvbi1lbGVtZW50cy50eHQgd2FzIGluaXRpYWxseSBhZGRlZCBvbiBicmFuY2ggQlJBTkNILUdTVFJFQU1FUi0wXzguCisKKzIwMDUtMDQtMjQgMjM6NTM6MDYgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJICBnc3QvZ3N0cGFkLmg6IERpc2FibGUgc29tZSB1bmltcGxlbWVudGVkIGZ1bmN0aW9ucy4gIFdpbSwgcGxlYXNlIGZpeC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGFkLmg6IERpc2FibGUgc29tZSB1bmltcGxlbWVudGVkIGZ1bmN0aW9ucy4gIFdpbSwKKwkgIHBsZWFzZSBmaXguCisKKzIwMDUtMDQtMjQgMjI6NDk6NDUgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJICBDb252ZXJ0IGV2ZXJ5dGhpbmcgZnJvbSBHc3RBdG9taWNJbnQgdG8gZ19hdG9taWNfaW50XyosIGFuZCByZW1vdmUgZ3N0YXRvbWljLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBDb252ZXJ0IGV2ZXJ5dGhpbmcgZnJvbSBHc3RBdG9taWNJbnQgdG8gZ19hdG9taWNfaW50XyosIGFuZAorCSAgcmVtb3ZlIGdzdGF0b21pYy4KKwkgICogZ3N0L01ha2VmaWxlLmFtOgorCSAgKiBnc3QvZ3N0YXRvbWljLmM6CisJICAqIGdzdC9nc3RhdG9taWMuaDoKKwkgICogZ3N0L2dzdGF0b21pY19pbXBsLmg6CisJICAqIGdzdC9nc3RidWZmZXIuYzoKKwkgICogZ3N0L2dzdGNhcHMuYzoKKwkgICogZ3N0L2dzdGNhcHMuaDoKKwkgICogZ3N0L2dzdGNsb2NrLmM6CisJICAqIGdzdC9nc3RjbG9jay5oOgorCSAgKiBnc3QvZ3N0ZGF0YS5jOgorCSAgKiBnc3QvZ3N0ZGF0YS5oOgorCSAgKiBnc3QvZ3N0ZGF0YV9wcml2YXRlLmg6CisJICAqIGdzdC9nc3RldmVudC5jOgorCSAgKiBnc3QvZ3N0aW5mby5jOgorCSAgKiBnc3QvZ3N0aW5mby5oOgorCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOgorCSAgKiBnc3QvZ3N0b2JqZWN0LmM6CisJICAqIGdzdC9nc3RvYmplY3QuaDoKKwkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmg6CisJICAqIGdzdC9nc3R1dGlscy5jOiBBZGQgZ3N0X2F0b21pY19pbnRfc2V0KCkgY29tcGFpdGliaWxpdHkgZnVuY3Rpb24uCisJICAqIGdzdC9nc3R1dGlscy5oOgorCisyMDA1LTA0LTI0IDIyOjQ0OjEzICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSAgY2hlY2svZ3N0L2dzdHBhZC5jOiBPaCB5ZWFoLCBpdCdzIGFsd2F5cyBuaWNlIHRvIG1ha2UgdGhlIHJlZ3Jlc3Npb25zIHRlc3RzIHdvcmsuICBSZW1vdmUgc29tZSBjb2RlIHRoYXQgaXMgbm8gbG9uZ2VyLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svZ3N0L2dzdHBhZC5jOiAoU1RBUlRfVEVTVCk6IE9oIHllYWgsIGl0J3MgYWx3YXlzIG5pY2UgdG8KKwkgIG1ha2UgdGhlIHJlZ3Jlc3Npb25zIHRlc3RzIHdvcmsuICBSZW1vdmUgc29tZSBjb2RlIHRoYXQgaXMgbm8KKwkgIGxvbmdlciB0cnVlLgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2xpbmtfY2hlY2tfdGVtcGxhdGVzX2NvbXBhdGlibGVfdW5sb2NrZWQpOgorCSAgRGlzYWJsZSB3YXJuaW5nIGZvciBwYWRzIHdpdGhvdXQgdGVtcGxhdGVzLgorCisyMDA1LTA0LTI0IDIxOjE2OjQ1ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSAgZ3N0L2dzdHBhZC5jOiBSZW1vdmUgaGFuZGxpbmcgb2YgZmlsdGVyZWQgY2Fwcy4gIEZpeC9tZXJnZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgZmlsdGVyZWQgbGlua3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBhZC5jOiBSZW1vdmUgaGFuZGxpbmcgb2YgZmlsdGVyZWQgY2Fwcy4gIEZpeC9tZXJnZQorCSAgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIGZpbHRlcmVkIGxpbmtzLgorCSAgKiBnc3QvZ3N0cGFkLmg6IFJlbW92ZSAnYXBwZmlsdGVyJyBmaWVsZCBhbmQgcHJvdG90eXBlcyBvZgorCSAgcmVtb3ZlZCBmdW5jdGlvbnMuCisJICAqIGdzdC9nc3R1dGlscy5jOiBGaXgvcmVtb3ZlIHV0aWxpdHkgZnVuY3Rpb25zIHRoYXQgaGFuZGxlCisJICBmaWx0ZXJlZCBjYXBzLgorCSAgKiBnc3QvZ3N0dXRpbHMuaDoKKwkgICogZ3N0L2dzdHZhbHVlLmM6IEFkZCBzZXJpYWxpemF0aW9uL2Rlc2VyaWFsaXphdGlvbiBvZiBjYXBzCisJICAqIGdzdC9wYXJzZS9ncmFtbWFyLnk6IElnbm9yZSBmaWx0ZXJlZCBjYXBzIHdoZW4gbGlua2luZy4gIFRoaXMKKwkgIHJlcXVpcmVzIGZpeGluZyBzbyB0aGF0IHRoZSBmaWx0ZXIgY2FwcyBub3RhdGlvbiBjcmVhdGVzCisJICBhIGNhcHNmaWx0ZXIgZWxlbWVudCBhbmQgc2V0cyB0aGUgZmlsdGVyX2NhcHMgcHJvcGVydHkuICBJCisJICB0aGluayBldmVyeW9uZSBwcm9iYWJseSB3YW50cyB0byBrZWVwIHRoZSBzaG9ydGhhbmQgbm90YXRpb24uCisJICAqIGRvY3MvZ3N0L3RtcGwvZ3N0ZWxlbWVudC5zZ21sOiB1cGRhdGVzIGZvciBBUEkgY2hhbmdlcy4KKwkgICogZG9jcy9nc3QvdG1wbC9nc3RwYWQuc2dtbDoKKwkgICogZ3N0L2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6IFJlZ2lzdGVyIGNhcHNmaWx0ZXIgZWxlbWVudC4KKwkgICogZ3N0L01ha2VmaWxlLmFtOiBmaXggc3BhY2luZworCSAgKiBkb2NzL3JhbmRvbS9kcy8wLjktc3VnZ2VzdGVkLWNoYW5nZXM6IHJhbmRvbQorCisyMDA1LTA0LTIzIDIzOjI5OjQ3ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSAgZ3N0L2VsZW1lbnRzLzogTmV3IGVsZW1lbnQgdGhhdCBhY3RzIGxpa2UgYW4gaWRlbnRpdHksIGJ1dCBmaWx0ZXJzIGNhcHMuICBXaWxsIGV2ZW50dWFsbHkgcmVwbGFjZSBmaWx0ZXJlZCBjYXBzIGluIHBhLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2VsZW1lbnRzL01ha2VmaWxlLmFtOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOiBOZXcgZWxlbWVudCB0aGF0IGFjdHMgbGlrZSBhbgorCSAgaWRlbnRpdHksIGJ1dCBmaWx0ZXJzIGNhcHMuICBXaWxsIGV2ZW50dWFsbHkgcmVwbGFjZSBmaWx0ZXJlZAorCSAgY2FwcyBpbiBwYWQgbGlua2luZy4KKwkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfZWxlbWVudF9jcmVhdGVfYWxsX3BhZHMpOiBOZXcgZnVuY3Rpb24KKwkgIHRvIGNyZWF0ZSBhbGwgdGhlIEFMV0FZUyBwYWRzIHRoYXQgYXJlIHJlZ2lzdGVyZWQgd2l0aCBhbgorCSAgZWxlbWVudCBjbGFzcy4gIFRoaXMgZnVuY3Rpb25hbGl0eSBzaG91bGQgZXZlbnR1YWxseSBiZQorCSAgbWVyZ2VkIGluIHdpdGggR3N0RWxlbWVudCBpbml0aWFsaXphdGlvbi4KKwkgICogZ3N0L2dzdHV0aWxzLmg6CisJICAqIHRlc3RzdWl0ZS90cmlnZ2VyL1JFQURNRTogcGFydCBvZiB0cmlnZ2VyIHRlc3QgY29kZSB0aGF0IHNob3VsZAorCSAgaGF2ZSBiZWVuIGNoZWNrZWQgaW4gYSBsb25nIHRpbWUgYWdvLgorCisyMDA1LTA0LTIzIDIzOjI1OjA4ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSAgZ3N0L01ha2VmaWxlLmFtOiBSZW1vdmUgYXMtbGlidG9vbCBzdHVmZi4gIEl0J3MgbGlrZWx5IG5vdCBhbmQgaGFyZCB0byBjYXJyeSBhcm91bmQuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L01ha2VmaWxlLmFtOiBSZW1vdmUgYXMtbGlidG9vbCBzdHVmZi4gIEl0J3MgbGlrZWx5IG5vdAorCSAgbmVlZGVkIHdpdGggbmV3IHZlcnNpb25zIG9mIGxpYnRvb2wgKG5vYm9keSB3aWxsIGNvbmZpcm0gdGhpcyksCisJICBhbmQgaGFyZCB0byBjYXJyeSBhcm91bmQuCisJICAqIGdzdC9hdXRvcGx1Zy9NYWtlZmlsZS5hbToKKwkgICogZ3N0L2Jhc2UvTWFrZWZpbGUuYW06CisJICAqIGdzdC9lbGVtZW50cy9NYWtlZmlsZS5hbToKKwkgICogZ3N0L2luZGV4ZXJzL01ha2VmaWxlLmFtOgorCSAgKiBnc3Qvc2NoZWR1bGVycy9NYWtlZmlsZS5hbToKKwkgICogbGlicy9nc3QvYnl0ZXN0cmVhbS9NYWtlZmlsZS5hbToKKwkgICogbGlicy9nc3QvY29udHJvbC9NYWtlZmlsZS5hbToKKwkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL01ha2VmaWxlLmFtOgorCSAgKiBsaWJzL2dzdC9nZXRiaXRzL01ha2VmaWxlLmFtOgorCisyMDA1LTA0LTIxIDE3OjEwOjA5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGZpbGUgTWFrZWZpbGUuYW0gd2FzIGluaXRpYWxseSBhZGRlZCBvbiBicmFuY2ggQlJBTkNILUdTVFJFQU1FUi0wXzguCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGZpbGUgTWFrZWZpbGUuYW0gd2FzIGluaXRpYWxseSBhZGRlZCBvbiBicmFuY2ggQlJBTkNILUdTVFJFQU1FUi0wXzguCisKKzIwMDUtMDQtMjEgMDk6Mzc6MzQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGRvY3MvZGVzaWduLzogU29tZSBtb3JlIGRvY3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vZHJhZnQtcHVzaC1wdWxsLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1NVC1yZWZjb3VudGluZy50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtY2Fwcy50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtZXZlbnRzLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RidXMudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdHBpcGVsaW5lLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1tZXNzYWdlcy50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtcHVzaC1wdWxsLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1xdWVyeS50eHQ6CisJICBTb21lIG1vcmUgZG9jcy4KKworMjAwNS0wNC0yMSAwOTozMzozMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0LzogVXNlIHBhcmVudCByZWZjb3VudCBpbiBHc3RNZXNzYWdlIHRvIGVuc3VyZSBHc3RTdHJ1Y3R1cmUgY29uc2lzdGVuY3kuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKF9nc3RfbWVzc2FnZV9jb3B5KSwgKF9nc3RfbWVzc2FnZV9mcmVlKSwKKwkgIChnc3RfbWVzc2FnZV9uZXcpLCAoZ3N0X21lc3NhZ2VfbmV3X2Vycm9yKSwKKwkgIChnc3RfbWVzc2FnZV9uZXdfd2FybmluZyksIChnc3RfbWVzc2FnZV9uZXdfdGFnKSwKKwkgIChnc3RfbWVzc2FnZV9uZXdfc3RhdGVfY2hhbmdlZCksIChnc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRpb24pLAorCSAgKGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUpOgorCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgorCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6IChnc3Rfc3RydWN0dXJlX3NldF9wYXJlbnRfcmVmY291bnQpLAorCSAgKGdzdF9zdHJ1Y3R1cmVfY29weV9jb25kaXRpb25hbCk6CisJICBVc2UgcGFyZW50IHJlZmNvdW50IGluIEdzdE1lc3NhZ2UgdG8gZW5zdXJlIEdzdFN0cnVjdHVyZQorCSAgY29uc2lzdGVuY3kuCisJICBDbGVhbmVkIHVwIGhlYWRlcnMgYSBiaXQuCisKKzIwMDUtMDQtMjAgMDk6MTA6NDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC86IE1ha2UgZ3N0X2NhcHNfcmVwbGFjZSgpIHdvcmsgbGlrZSBvdGhlciBfcmVwbGFjZSgpIGZ1bmN0aW9ucy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2VzaW5rX2Jhc2VfaW5pdCksCisJICAoZ3N0X2Jhc2VzaW5rX3BhZF9nZXRjYXBzKSwgKGdzdF9iYXNlc2lua19pbml0KSwKKwkgIChnc3RfYmFzZXNpbmtfY2hhaW5fdW5sb2NrZWQpOgorCSAgKiBnc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOiAoaGVscGVyX2ZpbmRfc3VnZ2VzdCksCisJICAoZ3N0X3R5cGVfZmluZF9oZWxwZXIpOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6CisJICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2hhdmVfdHlwZSksIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfaW5pdCksCisJICAoc3RvcF90eXBlZmluZGluZyksIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfaGFuZGxlX2V2ZW50KSwKKwkgIChmaW5kX3N1Z2dlc3QpLCAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NoYWluKSwKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfY2hlY2tnZXRyYW5nZSksCisJICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2dldHJhbmdlKSwgKGRvX3R5cGVmaW5kKSwKKwkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfYWN0aXZhdGUpOgorCSAgKiBnc3QvZ3N0YnVmZmVyLmM6IChfZ3N0X2J1ZmZlcl9zdWJfZnJlZSksCisJICAoZ3N0X2J1ZmZlcl9kZWZhdWx0X2ZyZWUpLCAoZ3N0X2J1ZmZlcl9kZWZhdWx0X2NvcHkpLAorCSAgKGdzdF9idWZmZXJfc2V0X2NhcHMpOgorCSAgKiBnc3QvZ3N0Y2Fwcy5jOiAoZ3N0X2NhcHNfcmVmKSwgKGdzdF9jYXBzX3VucmVmKSwKKwkgIChnc3RfY2Fwc19yZXBsYWNlKToKKwkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKGdzdF9tZXNzYWdlX25ldyksCisJICAoZ3N0X21lc3NhZ2VfbmV3X3N0YXRlX2NoYW5nZWQpOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3NldF9hY3RpdmUpLCAoZ3N0X3BhZF9wZWVyX3NldF9hY3RpdmUpLAorCSAgKGdzdF9wYWRfc2V0X2NoZWNrZ2V0cmFuZ2VfZnVuY3Rpb24pLAorCSAgKGdzdF9wYWRfbGlua19wcmVwYXJlX2ZpbHRlcmVkKSwgKGdzdF9wYWRfcmVsaW5rX2ZpbHRlcmVkKSwKKwkgIChnc3RfcGFkX3NldF9jYXBzKSwgKGdzdF9wYWRfY2hlY2tfcHVsbF9yYW5nZSksCisJICAoZ3N0X3BhZF9wdWxsX3JhbmdlKSwgKGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldF9jYXBzKToKKwkgICogZ3N0L2dzdHBhZC5oOgorCSAgKiBnc3QvZ3N0dHlwZWZpbmQuYzogKGdzdF90eXBlX2ZpbmRfcmVnaXN0ZXIpOgorCSAgTWFrZSBnc3RfY2Fwc19yZXBsYWNlKCkgd29yayBsaWtlIG90aGVyIF9yZXBsYWNlKCkgZnVuY3Rpb25zLgorCSAgVXNlIF9jYXBzX3JlcGxhY2UoKSB3aGVyZSBwb3NzaWJsZS4KKwkgIE1ha2Ugc3VyZSBfbWVzc2FnZV9uZXcoKSBpbml0aWFsaXNlcyBpdHMgZmllbGQuCisJICBBZGQgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHMoKQorCisyMDA1LTA0LTE4IDA4OjUzOjAyICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmM6IHMvQVJHXy9QUk9QXy8uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDQtMTggIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmM6IHMvQVJHXy9QUk9QXy8uCisKKzIwMDUtMDQtMTggMDg6MjQ6MzAgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSogQ2hhbmdlTG9nOgorCSogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgorCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJICBnc3QvYmFzZS9nc3RiYXNlc3JjLmMgKGdzdF9iYXNlc3JjX3NldF9wcm9wZXJ0eSkKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wNC0xOCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jIChnc3RfYmFzZXNyY19zZXRfcHJvcGVydHkpCisJICAoZ3N0X2Jhc2VzcmNfZ2V0X3Byb3BlcnR5KTogQkxPQ0tTSVpFIGlzIGEgVUxPTkcuIFJlbmFtZSBBUkdfLi4uCisJICB0byBQUk9QXy4uLi4KKworMjAwNS0wNC0xNiAyMDoyNzo1NSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIE5FV1M6CisJKiB0ZXN0cy9NYWtlZmlsZS5hbToKKwkgIE5FV1MgYnVpbGQKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgTkVXUyBidWlsZAorCisyMDA1LTA0LTE2IDIwOjE2OjM4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSAgcmVtb3ZlZCBzb21lIGxpbmUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgcmVtb3ZlZCBzb21lIGxpbmUKKworMjAwNS0wNC0xNiAxNjoyODowNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDoKKwkgIGFkZCBnc3QtcGx1Z2lucy1iYXNlIHRvIHBrZ2NvbmZpZyBwYXRoCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFkZCBnc3QtcGx1Z2lucy1iYXNlIHRvIHBrZ2NvbmZpZyBwYXRoCisKKzIwMDUtMDQtMTQgMTc6MTc6MzAgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KKworCSAgZG9jcy9mYXEvdXNpbmcueG1sOiBBZGQgbm90ZSBvbiBnc3RyZWFtZXItcHJvcGVydGllcyAoIzE1NDk5NikuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9mYXEvdXNpbmcueG1sOgorCSAgQWRkIG5vdGUgb24gZ3N0cmVhbWVyLXByb3BlcnRpZXMgKCMxNTQ5OTYpLgorCisyMDA1LTA0LTEzIDE3OjQxOjI5ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+CisKKwkgIGRvY3MvcmFuZG9tL2JiYi9vcHRpb25hbC1wcm9wZXJ0aWVzOiBTb21lIGFuYWx5c2lzIG9uIG9wdGlvbmFsIHByb3BlcnRpZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9yYW5kb20vYmJiL29wdGlvbmFsLXByb3BlcnRpZXM6CisJICBTb21lIGFuYWx5c2lzIG9uIG9wdGlvbmFsIHByb3BlcnRpZXMuCisKKzIwMDUtMDQtMTIgMTU6MDA6MzAgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KKworCSAgVXNlIGxpYnhtbDIgZm9yIHJlZ2lzdHJ5IHBhcnNpbmcsIHVzZSBzdGF0aWNwYWR0ZW1wbGF0ZXMgaW4gZWxlbWVudGZhY3Rvcmllcy4gTWFrZXMgZ3N0X2luaXQoKSArLy0gMTB4IGZhc3Rlci4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2dzdC90bXBsL2dzdGVsZW1lbnRmYWN0b3J5LnNnbWw6CisJICAqIGdzdC9nc3RlbGVtZW50Lmg6CisJICAqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOiAoZ3N0X2VsZW1lbnRfZmFjdG9yeV9pbml0KSwKKwkgIChnc3RfZWxlbWVudF9mYWN0b3J5X2NsZWFudXApLCAoZ3N0X2VsZW1lbnRfcmVnaXN0ZXIpLAorCSAgKF9fZ3N0X2VsZW1lbnRfZmFjdG9yeV9hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSksCisJICAoZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfc3RhdGljX3BhZF90ZW1wbGF0ZXMpLAorCSAgKGdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NyY19jYXBzKSwKKwkgIChnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zaW5rX2NhcHMpOgorCSAgKiBnc3QvcmVnaXN0cmllcy9NYWtlZmlsZS5hbToKKwkgICogZ3N0L3JlZ2lzdHJpZXMvZ3N0bGlieG1scmVnaXN0cnkuYzogKGdzdF94bWxfcmVnaXN0cnlfZ2V0X3R5cGUpLAorCSAgKGdzdF94bWxfcmVnaXN0cnlfY2xhc3NfaW5pdCksIChnc3RfeG1sX3JlZ2lzdHJ5X2luaXQpLAorCSAgKGdzdF94bWxfcmVnaXN0cnlfbmV3KSwgKGdzdF94bWxfcmVnaXN0cnlfc2V0X3Byb3BlcnR5KSwKKwkgIChnc3RfeG1sX3JlZ2lzdHJ5X2dldF9wcm9wZXJ0eSksIChnZXRfdGltZSksIChtYWtlX2RpciksCisJICAoZ3N0X3htbF9yZWdpc3RyeV9nZXRfcGVybXNfZnVuYyksCisJICAocGx1Z2luX3RpbWVzX29sZGVyX3RoYW5fcmVjdXJzZSksIChwbHVnaW5fdGltZXNfb2xkZXJfdGhhbiksCisJICAoZ3N0X3htbF9yZWdpc3RyeV9vcGVuX2Z1bmMpLCAoZ3N0X3htbF9yZWdpc3RyeV9sb2FkX2Z1bmMpLAorCSAgKGdzdF94bWxfcmVnaXN0cnlfc2F2ZV9mdW5jKSwgKGdzdF94bWxfcmVnaXN0cnlfY2xvc2VfZnVuYyksCisJICAoYWRkX3RvX2NoYXJfYXJyYXkpLCAocmVhZF9zdHJpbmcpLCAocmVhZF91aW50KSwgKHJlYWRfZW51bSksCisJICAobG9hZF9wYWRfdGVtcGxhdGUpLCAobG9hZF9mZWF0dXJlKSwgKGxvYWRfcGx1Z2luKSwgKGxvYWRfcGF0aHMpLAorCSAgKGdzdF94bWxfcmVnaXN0cnlfbG9hZCksIChnc3RfeG1sX3JlZ2lzdHJ5X2xvYWRfcGx1Z2luKSwKKwkgIChnc3RfeG1sX3JlZ2lzdHJ5X3NhdmVfY2FwcyksIChnc3RfeG1sX3JlZ2lzdHJ5X3NhdmVfcGFkX3RlbXBsYXRlKSwKKwkgIChnc3RfeG1sX3JlZ2lzdHJ5X3NhdmVfZmVhdHVyZSksIChnc3RfeG1sX3JlZ2lzdHJ5X3NhdmVfcGx1Z2luKSwKKwkgIChnc3RfeG1sX3JlZ2lzdHJ5X3NhdmUpLCAoZ3N0X3htbF9yZWdpc3RyeV9yZWJ1aWxkX3JlY3Vyc2UpLAorCSAgKGdzdF94bWxfcmVnaXN0cnlfcmVidWlsZCk6CisJICAqIGdzdC9yZWdpc3RyaWVzL2dzdGxpYnhtbHJlZ2lzdHJ5Lmg6CisJICAqIHRvb2xzL2dzdC1jb21wcHJlcC5jOiAobWFpbik6CisJICAqIHRvb2xzL2dzdC1pbnNwZWN0LmM6IChwcmludF9wYWRfdGVtcGxhdGVzX2luZm8pOgorCSAgKiB0b29scy9nc3QteG1saW5zcGVjdC5jOiAocHJpbnRfZWxlbWVudF9pbmZvKToKKwkgIFVzZSBsaWJ4bWwyIGZvciByZWdpc3RyeSBwYXJzaW5nLCB1c2Ugc3RhdGljcGFkdGVtcGxhdGVzIGluCisJICBlbGVtZW50ZmFjdG9yaWVzLiBNYWtlcyBnc3RfaW5pdCgpICsvLSAxMHggZmFzdGVyLgorCisyMDA1LTA0LTEyIDEwOjUyOjU1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJKiBDaGFuZ2VMb2c6CisJKiBnc3QvYmFzZS9NYWtlZmlsZS5hbToKKwkqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6CisJKiBnc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOgorCSogZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuaDoKKwkqIGdzdC9lbGVtZW50cy9NYWtlZmlsZS5hbToKKwkqIGdzdC9lbGVtZW50cy9nc3RlbGVtZW50cy5jOgorCSogZ3N0L2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6CisJKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgorCSogZ3N0L2VsZW1lbnRzL2dzdGZha2VzcmMuaDoKKwkqIGdzdC9lbGVtZW50cy9nc3RmaWxlc3JjLmM6CisJKiBnc3QvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6CisJKiBnc3QvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50Lmg6CisJKiBnc3QvZ3N0cGlwZWxpbmUuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzoKKwkqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuaDoKKwkqIHBsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUuYW06CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5oOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuaDoKKwkgIEFkZGVkIHR5cGVmaW5kIGhlbHBlci4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgQWRkZWQgdHlwZWZpbmQgaGVscGVyLgorCSAgU21hbGwgcHJlcm9sbCBmaXggaW4gdGhlIGJhc2Ugc2luay4KKwkgIERpc2FibGUgdHlwZWZpbmQgY29kZSBpbiBiYXNlc3JjLgorCSAgQ3J1ZGUgcG9ydCBvZiB0eXBlZmluZGVsZW1lbnQuCisJICBGYWtlc3JjIGNsZWFudXBzLgorCisyMDA1LTA0LTEyIDA5OjE2OjAwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJKiBjaGVjay9nc3QvZ3N0ZGF0YS5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGRhdGEuYzoKKwkgIEluY3JlYXNlIHRpbWVvdXQgc29tZSBtb3JlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIEluY3JlYXNlIHRpbWVvdXQgc29tZSBtb3JlCisKKzIwMDUtMDQtMTEgMTI6MDI6MTMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBjaGVjay9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSAgb25seSBkaXJzCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIG9ubHkgZGlycworCisyMDA1LTA0LTExIDExOjQwOjExICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogY2hlY2svTWFrZWZpbGUuYW06CisJKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkgIGZpeCBkaXN0Y2hlY2sKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZml4IGRpc3RjaGVjaworCisyMDA1LTA0LTExIDExOjI0OjUzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBjaGVjay86IEZpeCB1cCB0aGUgdGltZW91dCBzbyB0aGF0IHRoZSB0ZXN0IGRvZXMgbm90IGZhaWwuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY2hlY2svZ3N0L2dzdGJ1cy5jOiAoZ3N0YnVzX3N1aXRlKToKKwkgICogY2hlY2svZ3N0L2dzdGRhdGEuYzogKHRocmVhZF9yZWYpLCAoZ3N0X2RhdGFfc3VpdGUpOgorCSAgKiBjaGVjay9nc3RjaGVjay5oOgorCSAgRml4IHVwIHRoZSB0aW1lb3V0IHNvIHRoYXQgdGhlIHRlc3QgZG9lcyBub3QgZmFpbC4KKworMjAwNS0wNC0xMSAwOTo1Mzo0NCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuYW06CisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW06CisJICBkaXN0IHRyaWdnZXIKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZGlzdCB0cmlnZ2VyCisKKzIwMDUtMDQtMTAgMjE6NDI6MzIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSAgd29yayB3aXRoIGRlYnVnIGRpc2FibGVkCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHdvcmsgd2l0aCBkZWJ1ZyBkaXNhYmxlZAorCisyMDA1LTA0LTEwIDIwOjI5OjQ0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2dzdG9iamVjdC5jOgorCSAgd29yayB3aXRoIGRlYnVnIGRpc2FibGVkCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIHdvcmsgd2l0aCBkZWJ1ZyBkaXNhYmxlZAorCisyMDA1LTA0LTEwIDE4OjE5OjE4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogYXV0b2dlbi5zaDoKKwkgIGlnbm9yZSBhbHJlYWR5IGFwcGxpZWQgcGF0Y2gKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgaWdub3JlIGFscmVhZHkgYXBwbGllZCBwYXRjaAorCisyMDA1LTA0LTA4IDExOjM0OjE0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkgIGZpbGUgZ3N0cGFyZW50LmMgd2FzIGluaXRpYWxseSBhZGRlZCBvbiBicmFuY2ggQlJBTkNILUdTVFJFQU1FUi0wXzguCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGZpbGUgZ3N0cGFyZW50LmMgd2FzIGluaXRpYWxseSBhZGRlZCBvbiBicmFuY2ggQlJBTkNILUdTVFJFQU1FUi0wXzguCisKKzIwMDUtMDQtMDggMTE6MzQ6MTQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSAgZmlsZSBnc3RwYXJlbnQuaCB3YXMgaW5pdGlhbGx5IGFkZGVkIG9uIGJyYW5jaCBCUkFOQ0gtR1NUUkVBTUVSLTBfOC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZmlsZSBnc3RwYXJlbnQuaCB3YXMgaW5pdGlhbGx5IGFkZGVkIG9uIGJyYW5jaCBCUkFOQ0gtR1NUUkVBTUVSLTBfOC4KKworMjAwNS0wNC0wNiAxNzozMDo0OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0LzogTW9yZSB3b3JrIG9uIHRoZSBnZW5lcmljIHNvdXJjZSBiYXNlIGNsYXNzLCBpbXBsZW1lbnQgc2Vla2luZywgcXVlcnkuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2Jhc2UvUkVBRE1FOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZXNyY19nZXRfdHlwZSksCisJICAoZ3N0X2Jhc2VzcmNfaW5pdCksIChnc3RfYmFzZXNyY19nZXRfZm9ybWF0cyksIChnc3RfYmFzZXNyY19xdWVyeSksCisJICAoZ3N0X2Jhc2VzcmNfZ2V0X2V2ZW50X21hc2spLCAoZ3N0X2Jhc2VzcmNfZG9fc2VlayksCisJICAoZ3N0X2Jhc2VzcmNfZXZlbnRfaGFuZGxlciksIChnc3RfYmFzZXNyY19nZXRfcmFuZ2VfdW5sb2NrZWQpLAorCSAgKGdzdF9iYXNlc3JjX2NoZWNrX2dldF9yYW5nZSksIChnc3RfYmFzZXNyY19sb29wKSwKKwkgIChnc3RfYmFzZXNyY191bmxvY2spLCAoZ3N0X2Jhc2VzcmNfZ2V0X3NpemUpLCAoZ3N0X2Jhc2VzcmNfc3RhcnQpLAorCSAgKGdzdF9iYXNlc3JjX3N0b3ApLCAoZ3N0X2Jhc2VzcmNfYWN0aXZhdGUpLAorCSAgKGdzdF9iYXNlc3JjX2NoYW5nZV9zdGF0ZSksIChiYXNlc3JjX2ZpbmRfcGVlayksCisJICAoYmFzZXNyY19maW5kX3N1Z2dlc3QpLCAoZ3N0X2Jhc2VzcmNfdHlwZV9maW5kKToKKwkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiAoZ3N0X2ZpbGVzcmNfYmFzZV9pbml0KSwKKwkgIChnc3RfZmlsZXNyY19jbGFzc19pbml0KSwgKGdzdF9maWxlc3JjX2luaXQpLAorCSAgKGdzdF9maWxlc3JjX2ZpbmFsaXplKSwgKGdzdF9maWxlc3JjX3NldF9sb2NhdGlvbiksCisJICAoZ3N0X2ZpbGVzcmNfc2V0X3Byb3BlcnR5KSwgKGdzdF9maWxlc3JjX2dldF9wcm9wZXJ0eSksCisJICAoZ3N0X2ZpbGVzcmNfZnJlZV9wYXJlbnRfbW1hcCksIChnc3RfZmlsZXNyY19tYXBfcmVnaW9uKSwKKwkgIChnc3RfZmlsZXNyY19tYXBfc21hbGxfcmVnaW9uKSwgKGdzdF9maWxlc3JjX2NyZWF0ZV9tbWFwKSwKKwkgIChnc3RfZmlsZXNyY19jcmVhdGVfcmVhZCksIChnc3RfZmlsZXNyY19jcmVhdGUpLAorCSAgKGdzdF9maWxlc3JjX2dldF9zaXplKSwgKGdzdF9maWxlc3JjX3N0YXJ0KSwgKGdzdF9maWxlc3JjX3N0b3ApOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNyYy5oOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlX2Z1bmMpLAorCSAgKGdzdF9lbGVtZW50X2xvc3Rfc3RhdGUpLCAoZ3N0X2VsZW1lbnRfcGFkc19hY3RpdmF0ZSk6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfc2V0X2FjdGl2ZSksIChnc3RfcGFkX3BlZXJfc2V0X2FjdGl2ZSksCisJICAoZ3N0X3BhZF9zZXRfY2hlY2tnZXRyYW5nZV9mdW5jdGlvbiksIChnc3RfcGFkX2NoZWNrX3B1bGxfcmFuZ2UpLAorCSAgKGdzdF9wYWRfcHVsbF9yYW5nZSk6CisJICAqIGdzdC9nc3RwYWQuaDoKKwkgIE1vcmUgd29yayBvbiB0aGUgZ2VuZXJpYyBzb3VyY2UgYmFzZSBjbGFzcywgaW1wbGVtZW50IHNlZWtpbmcsCisJICBxdWVyeS4KKwkgIE1ha2UgZmlsZXNyYyBleHRlbmQgdGhlIGJhc2Ugc291cmNlIGNsYXNzLgorCSAgQWRkZWQgZ3N0X3BhZF9zZXRfY2hlY2tnZXRyYW5nZV9mdW5jdGlvbiB0byBHc3RQYWQuCisKKzIwMDUtMDQtMDYgMTE6MDg6MDcgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgcGtnY29uZmlnLzogTmV3IGZpbGVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTA0LTA2ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiBwa2djb25maWcvZ3N0cmVhbWVyLWJhc2UucGMuaW46CisJICAqIHBrZ2NvbmZpZy9nc3RyZWFtZXItYmFzZS11bmluc3RhbGxlZC5wYy5pbjogTmV3IGZpbGVzLgorCSAgKiBwa2djb25maWcvTWFrZWZpbGUuYW06CisJICAqIGNvbmZpZ3VyZS5hYyAoQUNfT1VUUFVUKTogQWRkIGdzdHJlYW1lci1iYXNlIHBrZ2NvbmZpZyBmaWxlcy4KKworMjAwNS0wNC0wNSAxNzo0MTo1MSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGRvY3MvZmFxL2N2cy54bWw6CisJICBhZGQgYSBub3RlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIGFkZCBhIG5vdGUKKworMjAwNS0wNC0wNSAwODo0NDoyMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0LzogTWFkZSBiYXNlIHNvdXJjZSBjbGFzcywgbWFrZSBmYWtlc3JjIGV4dGVuZCBpdC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvYmFzZS9NYWtlZmlsZS5hbToKKwkgICogZ3N0L2Jhc2UvUkVBRE1FOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2VzaW5rX2Jhc2VfaW5pdCksCisJICAoZ3N0X2Jhc2VzaW5rX3BhZF9nZXRjYXBzKSwgKGdzdF9iYXNlc2lua19wYWRfc2V0Y2FwcyksCisJICAoZ3N0X2Jhc2VzaW5rX3BhZF9idWZmZXJfYWxsb2MpLCAoZ3N0X2Jhc2VzaW5rX2luaXQpLAorCSAgKGdzdF9iYXNlc2lua19kb19zeW5jKSwgKGdzdF9iYXNlc2lua19jaGFpbl91bmxvY2tlZCk6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlc3JjX2dldF90eXBlKSwKKwkgIChnc3RfYmFzZXNyY19iYXNlX2luaXQpLCAoZ3N0X2Jhc2VzcmNfY2xhc3NfaW5pdCksCisJICAoZ3N0X2Jhc2VzcmNfaW5pdCksIChnc3RfYmFzZXNyY19nZXRfZm9ybWF0cyksCisJICAoZ3N0X2Jhc2VzcmNfZ2V0X3F1ZXJ5X3R5cGVzKSwgKGdzdF9iYXNlc3JjX3F1ZXJ5KSwKKwkgIChnc3RfYmFzZXNyY19nZXRfZXZlbnRfbWFzayksIChnc3RfYmFzZXNyY19ldmVudF9oYW5kbGVyKSwKKwkgIChnc3RfYmFzZXNyY19zZXRfcHJvcGVydHkpLCAoZ3N0X2Jhc2VzcmNfZ2V0X3Byb3BlcnR5KSwKKwkgIChnc3RfYmFzZXNyY19nZXRfcmFuZ2VfdW5sb2NrZWQpLCAoZ3N0X2Jhc2VzcmNfZ2V0X3JhbmdlKSwKKwkgIChnc3RfYmFzZXNyY19sb29wKSwgKGdzdF9iYXNlc3JjX2FjdGl2YXRlKSwKKwkgIChnc3RfYmFzZXNyY19jaGFuZ2Vfc3RhdGUpOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmg6CisJICAqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmM6IChnc3RfZmFrZXNyY19iYXNlX2luaXQpLAorCSAgKGdzdF9mYWtlc3JjX2NsYXNzX2luaXQpLCAoZ3N0X2Zha2VzcmNfaW5pdCksCisJICAoZ3N0X2Zha2VzcmNfZXZlbnRfaGFuZGxlciksIChnc3RfZmFrZXNyY19zZXRfcHJvcGVydHkpLAorCSAgKGdzdF9mYWtlc3JjX2dldF9wcm9wZXJ0eSksIChnc3RfZmFrZXNyY19jcmVhdGUpOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5oOgorCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiAoZ3N0X2ZpbGVzcmNfZ2V0cmFuZ2UpLAorCSAgKGdzdF9maWxlc3JjX29wZW5fZmlsZSksIChnc3RfZmlsZXNyY19sb29wKSwKKwkgIChnc3RfZmlsZXNyY19hY3RpdmF0ZSksIChmaWxlc3JjX2ZpbmRfcGVlayksCisJICAoZ3N0X2ZpbGVzcmNfdHlwZV9maW5kKToKKwkgIE1hZGUgYmFzZSBzb3VyY2UgY2xhc3MsIG1ha2UgZmFrZXNyYyBleHRlbmQgaXQuCisJICBBZGQgY29tbWVudHMgdG8gYmFzZXNpbmsgY2xhc3MuCisJICBTb21lIGZpbGVzcmMgY2xlYW51cC4KKworMjAwNS0wNC0wMSAxMDoxNDo0NSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJKiB0ZXN0cy9tZW1jaHVuay9nbWVtY2h1bmt0ZXN0LmM6CisJICBhZGQgc3VwcG9ydCBmb3IgZ29vZ2xlIG1hbGxvYyBpZiBhdmFpbGFibGUKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkIHN1cHBvcnQgZm9yIGdvb2dsZSBtYWxsb2MgaWYgYXZhaWxhYmxlCisKKzIwMDUtMDQtMDEgMDI6NDE6MzUgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisJICBnc3QvZ3N0cGx1Z2luLmM6IFN3aXRjaCB0byB1c2luZyBHX01PRFVMRV9CSU5EX0xPQ0FMLCB3aGljaCBtZWFucyBwbHVnaW5zIGFyZSBub3cgZXhwZWN0ZWQgdG8gbGluayBhZ2FpbnN0IGxpYmdzdHJlYW1lci4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGx1Z2luLmM6IChnc3RfcGx1Z2luX2NoZWNrX2ZpbGUpLCAoZ3N0X3BsdWdpbl9sb2FkX2ZpbGUpOgorCSAgU3dpdGNoIHRvIHVzaW5nIEdfTU9EVUxFX0JJTkRfTE9DQUwsIHdoaWNoIG1lYW5zIHBsdWdpbnMgYXJlIG5vdworCSAgZXhwZWN0ZWQgdG8gbGluayBhZ2FpbnN0IGxpYmdzdHJlYW1lci4KKwkgICogZ3N0L2Jhc2UvTWFrZWZpbGUuYW06IGxpbmsgYWdhaW5zdCBsaWJnc3RyZWFtZXIKKwkgICogZ3N0L2VsZW1lbnRzL01ha2VmaWxlLmFtOiBzYW1lCisKKzIwMDUtMDMtMzEgMTU6MDA6MTEgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgdGVzdHMvaW5zdGFudGlhdGUvOiBBZGQgdGVzdCB0byB0ZXN0IHNwZWVkIG9mIGNhcHMgY29weSBhbmQgZnJlZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wMy0zMSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogdGVzdHMvaW5zdGFudGlhdGUvTWFrZWZpbGUuYW06CisJICAqIHRlc3RzL2luc3RhbnRpYXRlL2NhcHMuYzogQWRkIHRlc3QgdG8gdGVzdCBzcGVlZCBvZiBjYXBzIGNvcHkKKwkgIGFuZCBmcmVlLgorCSAgKiB0ZXN0cy9tZW1jaHVuay9nbWVtY2h1bmt0ZXN0LmMgKG1haW4pOiBVc2UgYWxsb2Mgb25seSBvbiB0aGUKKwkgIEdNZW1DaHVuayB0byBiZSBmYWlyLgorCSAgKiBnc3QvZ3N0dHJhc2hzdGFjay5oOiBSZW1vdmUgd2FybmluZyBhYm91dCB1c2luZyB0aGUgZmFsbGJhY2sKKwkgIHRyYXNoIHN0YWNrIGltcGxlbWVudGF0aW9uLCBpdCdzIHN0aWxsIGZhc3RlciB0aGFuIG1hbGxvYy4KKworMjAwNS0wMy0zMSAxMDoxMDo1NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0LzogQWRkZWQgc3RhcnQvc3RvcCBtZXRob2RzIHRvIHRyYW5zZm9ybSBiYXNlIGNsYXNzIHNvIHN1YmNsYXNzZXMgZG9uJ3QgbmVlZCB0byBkZWFsIHdpdGggc3RhdGUgY2hhbmdlcyBldmVuLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV9iYXNlX2luaXQpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9jbGFzc19pbml0KSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9pbml0KSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc2V0Y2FwcyksIChnc3RfYmFzZV90cmFuc2Zvcm1faGFuZGxlX2J1ZmZlciksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldF9wcm9wZXJ0eSksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NpbmtfYWN0aXZhdGUpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zcmNfYWN0aXZhdGUpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9jaGFuZ2Vfc3RhdGUpOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6CisJICAqIGdzdC9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiAoZ3N0X2lkZW50aXR5X2NsYXNzX2luaXQpLAorCSAgKGdzdF9pZGVudGl0eV9ldmVudCksIChnc3RfaWRlbnRpdHlfY2hlY2tfcGVyZmVjdCksCisJICAoZ3N0X2lkZW50aXR5X3RyYW5zZm9ybSksIChnc3RfaWRlbnRpdHlfc3RhcnQpLAorCSAgKGdzdF9pZGVudGl0eV9zdG9wKToKKwkgIEFkZGVkIHN0YXJ0L3N0b3AgbWV0aG9kcyB0byB0cmFuc2Zvcm0gYmFzZSBjbGFzcyBzbyBzdWJjbGFzc2VzCisJICBkb24ndCBuZWVkIHRvIGRlYWwgd2l0aCBzdGF0ZSBjaGFuZ2VzIGV2ZW4uCisKKzIwMDUtMDMtMzEgMTA6MTA6MjEgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSogdGVzdHMvbWVtY2h1bmsvZ21lbWNodW5rdGVzdC5jOgorCSAgYWRkIHBlci10aHJlYWQgc3RhdHMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgYWRkIHBlci10aHJlYWQgc3RhdHMKKworMjAwNS0wMy0zMSAwOTo0NjoyOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgZ3N0LzogQWRkZWQgcmF0ZSB0byB0aGUgZGlzY29udCBldmVudCB0byBwcmVwYXJlIGZvciB2YXJpYWJsZSBzcGVlZCBhbmQgcmV2ZXJzZSBwbGF5YmFjay4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0ZXZlbnQuYzogKGdzdF9ldmVudF9uZXdfZGlzY29udGludW91c192YWxpc3QpLAorCSAgKGdzdF9ldmVudF9uZXdfZGlzY29udGludW91cyksIChnc3RfZXZlbnRfZGlzY29udF9nZXRfdmFsdWUpOgorCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9zZXRfYWN0aXZlKSwgKGdzdF9wYWRfcGVlcl9zZXRfYWN0aXZlKSwKKwkgIChnc3RfcGFkX3B1bGxfcmFuZ2UpOgorCSAgQWRkZWQgcmF0ZSB0byB0aGUgZGlzY29udCBldmVudCB0byBwcmVwYXJlIGZvciB2YXJpYWJsZSBzcGVlZAorCSAgYW5kIHJldmVyc2UgcGxheWJhY2suCisKKzIwMDUtMDMtMzAgMTQ6MDk6MDEgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSogdGVzdHMvbWVtY2h1bmsvZ21lbWNodW5rdGVzdC5jOgorCSAgQ29tbWl0IG1lbSBjaHVuayB0ZXN0OyBwcm9iYWJseSB3aWxsIGJlIHJlbW92ZWQgbGF0ZXIuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIENvbW1pdCBtZW0gY2h1bmsgdGVzdDsgcHJvYmFibHkgd2lsbCBiZSByZW1vdmVkIGxhdGVyLgorCisyMDA1LTAzLTMwIDAzOjU3OjM5ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSAgQSBsaXR0bGUgZXhhbXBsZSBwcm9ncmFtIHRvIHNob3cgaG93IHRyaWdnZXItYmFzZWQgZWxlbWVudHMgY2FuIHdvcmsuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogY29uZmlndXJlLmFjOgorCSAgKiB0ZXN0c3VpdGUvdHJpZ2dlci9NYWtlZmlsZS5hbToKKwkgICogdGVzdHN1aXRlL3RyaWdnZXIvdHJpZ2dlci5jOiBBIGxpdHRsZSBleGFtcGxlIHByb2dyYW0gdG8gc2hvdworCSAgaG93IHRyaWdnZXItYmFzZWQgZWxlbWVudHMgY2FuIHdvcmsuCisKKzIwMDUtMDMtMjkgMTY6MTg6MTIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC86IFNpbXBsaWZ5IHBhZCBhY3RpdmF0aW9uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9iYXNlL01ha2VmaWxlLmFtOgorCSAgKiBnc3QvYmFzZS9SRUFETUU6CisJICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZXNpbmtfZ2V0X3R5cGUpLAorCSAgKGdzdF9iYXNlc2lua19iYXNlX2luaXQpLCAoZ3N0X2Jhc2VzaW5rX2NsYXNzX2luaXQpLAorCSAgKGdzdF9iYXNlc2lua19wYWRfZ2V0Y2FwcyksIChnc3RfYmFzZXNpbmtfaW5pdCksCisJICAoZ3N0X2Jhc2VzaW5rX2FjdGl2YXRlKSwgKGdzdF9iYXNlc2lua19jaGFuZ2Vfc3RhdGUpOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5oOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0X3R5cGUpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9iYXNlX2luaXQpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2ZpbmFsaXplKSwKKwkgIChnc3RfYmFzZV90cmFuc2Zvcm1fY2xhc3NfaW5pdCksIChnc3RfYmFzZV90cmFuc2Zvcm1faW5pdCksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3Byb3h5X2dldGNhcHMpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldGNhcHMpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9ldmVudCksIChnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0cmFuZ2UpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9jaGFpbiksIChnc3RfYmFzZV90cmFuc2Zvcm1faGFuZGxlX2J1ZmZlciksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wcm9wZXJ0eSksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldF9wcm9wZXJ0eSksCisJICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NpbmtfYWN0aXZhdGUpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zcmNfYWN0aXZhdGUpLAorCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9jaGFuZ2Vfc3RhdGUpOgorCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6CisJICAqIGdzdC9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiAoZ3N0X2lkZW50aXR5X2ZpbmFsaXplKSwKKwkgIChnc3RfaWRlbnRpdHlfY2xhc3NfaW5pdCksIChnc3RfaWRlbnRpdHlfaW5pdCksCisJICAoZ3N0X2lkZW50aXR5X2V2ZW50KSwgKGdzdF9pZGVudGl0eV9jaGVja19wZXJmZWN0KSwKKwkgIChnc3RfaWRlbnRpdHlfdHJhbnNmb3JtKSwgKGdzdF9pZGVudGl0eV9zZXRfcHJvcGVydHkpLAorCSAgKGdzdF9pZGVudGl0eV9nZXRfcHJvcGVydHkpLCAoZ3N0X2lkZW50aXR5X2NoYW5nZV9zdGF0ZSk6CisJICAqIGdzdC9lbGVtZW50cy9nc3RpZGVudGl0eS5oOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlX2Z1bmMpLAorCSAgKGdzdF9lbGVtZW50X2xvc3Rfc3RhdGUpLCAoZ3N0X2VsZW1lbnRfcGFkc19hY3RpdmF0ZSk6CisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfc2V0X2FjdGl2ZSksIChnc3RfcGFkX3BlZXJfc2V0X2FjdGl2ZSksCisJICAoZ3N0X3BhZF9jaGVja19wdWxsX3JhbmdlKSwgKGdzdF9wYWRfcHVsbF9yYW5nZSk6CisJICAqIGdzdC9nc3RwYWQuaDoKKwkgIFNpbXBsaWZ5IHBhZCBhY3RpdmF0aW9uLgorCSAgQWRkZWQgZnVuY3Rpb24gdG8gY2hlY2sgaWYgcHVsbF9yYW5nZSBjYW4gYmUgcGVyZm9ybWVkLgorCSAgRXJyb3Igb3V0IHdoZW4gcHVsbGluZyBpbmFjdGl2ZSBvciBmbHVzaGluZyBwYWRzLgorCSAgUmVtb3ZlZCBjb25zdCBmcm9tIHJlZmNvdW50ZWQgdHlwZXMgYXMgaXQgZG9lcyBub3QgbWFrZSBzZW5zZS4KKwkgIFNpbXBsaWZ5IHBhZCB0ZW1wbGF0ZXMgaW4gYmFzZXNpbmsKKwkgIEFkZGVkIGJhc2UgY2xhc3MgZm9yIHNpbXBsZSAxLXRvLTEgdHJhbnNmb3Jtcy4KKwkgIE1ha2UgaWRlbnRpdHkgc3ViY2xhc3MgdGhlIGJhc2UgdHJhbnNmb3JtLgorCisyMDA1LTAzLTI5IDE0OjM0OjUxICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIGRvY3MvOiBBZGQgdGhlc2UgZmlsZXMgdG8gQ1ZTLiBOb3cgSSByZWFsbHkgZG9uJ3QgdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24sIGJ1dCBsaWtlIHdoYXRldmVyLiBJIHdhbnQgZ3JlZW4gYnVpbGRib3QhCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDMtMjkgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1vdmVycmlkZXMudHh0OgorCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItb3ZlcnJpZGVzLnR4dDogQWRkIHRoZXNlIGZpbGVzIHRvIENWUy4gTm93IEkKKwkgIHJlYWxseSBkb24ndCB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiwgYnV0IGxpa2Ugd2hhdGV2ZXIuIEkgd2FudAorCSAgZ3JlZW4gYnVpbGRib3QhCisKKzIwMDUtMDMtMjkgMTQ6MTI6NDggKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgZG9jcy86IERpc3QgdGhlIG92ZXJyaWRlcyBmaWxlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wMy0yOSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogZG9jcy9nc3QvTWFrZWZpbGUuYW06CisJICAqIGRvY3MvbGlicy9NYWtlZmlsZS5hbTogRGlzdCB0aGUgb3ZlcnJpZGVzIGZpbGVzLgorCSAgKiBjaGVjay9NYWtlZmlsZS5hbSAoY2xlYW4tbG9jYWwpOiBSZW1vdmUgLmxpYnMgZGlyZWN0b3JpZXMuCisJICAqIGdzdC9lbGVtZW50cy9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBhbGwgdGhlIGF0dGljCisJICBlbGVtZW50cyB0byBFWFRSQV9ESVNULCBzbyBwby8gZmlsZXMgYXJlIGhhcHB5LgorCisyMDA1LTAzLTI5IDEzOjEwOjI1ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIHBvL1BPVEZJTEVTOiBSZW1vdmUgZ3N0c3BpZGVyLmMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDMtMjkgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIHBvL1BPVEZJTEVTOiBSZW1vdmUgZ3N0c3BpZGVyLmMuCisJICAqIGNvbmZpZ3VyZS5hYyAoQUNfT1VUUFVUKTogQWRkIG1pc3NpbmcgdGVzdHN1aXRlIG1ha2VmaWxlcy4KKwkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbDoKKwkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDogUmVtb3ZlIHRoZSBzZWN0aW9uIG9uCisJICBieXRlc3RyZWFtLgorCSAgKiB0ZXN0cy9jb21wbGV4aXR5LmMgKG1haW4pOiBTZXQgdGhlIGxlbmd0aCBvZiB0aGUgcHJlcm9sbCBxdWV1ZQorCSAgb24gdGhlIHNpbmtzIHRvIHByZXZlbnQgYSBsb2NrdXAuCisKKzIwMDUtMDMtMjkgMTE6Mzk6MTcgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgbGlicy9nc3QvZGF0YXByb3RvY29sLzogUmVtb3ZlIHRlc3QsIGl0J3MgdGhlIHNhbWUgYXMgdGhlIG9uZSBpbiBjaGVjay9nc3QtbGlicy9nZHAuYy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wMy0yOSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL01ha2VmaWxlLmFtOgorCSAgKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLXRlc3QuYzogUmVtb3ZlIHRlc3QsIGl0J3MKKwkgIHRoZSBzYW1lIGFzIHRoZSBvbmUgaW4gY2hlY2svZ3N0LWxpYnMvZ2RwLmMuCisKKzIwMDUtMDMtMjkgMTA6NTU6MzkgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKworCSAgcG8vLCBkb2NzL2dzdC86IENvbW1pdCBhdXRvbWF0aWMgY2hhbmdlcyB0byBkb2NzIGFuZCBwbyBmaWxlcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgMjAwNS0wMy0yOSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKwkgICogcG8vLCBkb2NzL2dzdC86IENvbW1pdCBhdXRvbWF0aWMgY2hhbmdlcyB0byBkb2NzIGFuZCBwbyBmaWxlcy4KKwkgICogZ3N0L2VsZW1lbnRzL01ha2VmaWxlLmFtIChsaWJnc3RlbGVtZW50c19sYV9MREZMQUdTKTogTGluayB0bworCSAgdGhlIHZlcnNpb25lZCBsaWJnc3RiYXNlLgorCSAgKiBjaGVjay9NYWtlZmlsZS5hbTogRGVwZW5kIG9uIGFuIHVudmVyc2lvbmVkIGdzdC1yZWdpc3Rlciwgc2VlbXMKKwkgIHRvIG1ha2UgYXV0b2NvbmYgaGFwcGllci4KKwkgICogZ3N0L2Jhc2UvTWFrZWZpbGUuYW06IE1ha2UgbGliZ3N0YmFzZSBhIHZlcnNpb25lZCBsaWIuCisKKzIwMDUtMDMtMjggMTQ6NTQ6MzMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkqIENoYW5nZUxvZzoKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGRvY3MvZGVzaWduL3BhcnQtZ3N0ZWxlbWVudC50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LW5lZ290aWF0aW9uLnR4dDoKKwkqIGRvY3MvZGVzaWduL3BhcnQtcHJlcm9sbC50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LXNjaGVkdWxpbmcudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1zdGF0ZXMudHh0OgorCSogZ3N0L01ha2VmaWxlLmFtOgorCSogZ3N0L2Jhc2UvTWFrZWZpbGUuYW06CisJKiBnc3QvYmFzZS9SRUFETUU6CisJKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOgorCSogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKKwkqIGdzdC9lbGVtZW50cy9NYWtlZmlsZS5hbToKKwkqIGdzdC9lbGVtZW50cy9nc3RmYWtlc2luay5jOgorCSogZ3N0L2VsZW1lbnRzL2dzdGZha2VzaW5rLmg6CisJKiBnc3QvZ3N0YmluLmM6CisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSogZ3N0L2dzdHBhZC5jOgorCSogZ3N0L2dzdHBpcGVsaW5lLmM6CisJKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvYmFzZS9SRUFETUU6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6CisJKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6CisJKiBwbHVnaW5zL2VsZW1lbnRzL01ha2VmaWxlLmFtOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5oOgorCSAgQWRkZWQgc3RhdGUgY2hhbmdlIGNvZGUuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIEFkZGVkIHN0YXRlIGNoYW5nZSBjb2RlLgorCSAgQWRkZWQvdXBkYXRlZCBkb2NzLgorCSAgQWRkZWQgc2luayBiYXNlIGNsYXNzLCBtYWtlIGZha2VzaW5rIGV4dGVuZCB0aGUgYmFzZSBjbGFzcy4KKwkgIFNtYWxsIGNsZWFudXBzIGluIEdzdFBpcGVsaW5lLgorCisyMDA1LTAzLTI2IDIyOjA3OjUzICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworCSAgZ3N0L01ha2VmaWxlLmFtOiByZW1vdmUgZ3N0Y3B1LltjaF0uICBUaGUgZ3N0X2NwdSBmdW5jdGlvbmFsaXR5IGlzIGJyb2tlbiBhbmQgc2hvdWxkIGJlIGltcGxlbWVudGVkIGluIGEgZGlmZmVyZW50IGxpLi4uCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L01ha2VmaWxlLmFtOiByZW1vdmUgZ3N0Y3B1LltjaF0uICBUaGUgZ3N0X2NwdSBmdW5jdGlvbmFsaXR5CisJICBpcyBicm9rZW4gYW5kIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiBhIGRpZmZlcmVudCBsaWJyYXJ5LgorCSAgKiBnc3QvZ3N0LmM6IChpbml0X3Bvc3QpOiBkb24ndCBjYWxsIF9nc3RfY3B1X2luaXRpYWxpemUoKQorCSAgKiBnc3QvZ3N0Lmg6IHJlbW92ZSBnc3RjcHUuaAorCSAgKiBnc3QvZ3N0Y3B1LmM6IHJlbW92ZQorCSAgKiBnc3QvZ3N0Y3B1Lmg6IHJlbW92ZQorCSAgKiBnc3QvTWFrZWZpbGUuYW0uZnV0dXJlOiBSZW1vdmUgdGhpcyBmaWxlLiAgSXQncyBhbmNpZW50LgorCisyMDA1LTAzLTI1IDA5OjU3OjQyICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+CisKKwkgIGdzdC9nc3RiaW4uYzogQWRkIGRlZmF1bHQgZXZlbnQvc2V0X21hbmFnZXIgaGFuZGxlcnMuIFRoZSBzZXRfbWFuYWdlciBoYW5kbGVyIHRha2VzIGNhcmUgdGhhdCB0aGUgbWFuYWdlciBpcyBkaXN0cmlidS4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fY2xhc3NfaW5pdCksIChnc3RfYmluX3NldF9tYW5hZ2VyKSwKKwkgIChnc3RfYmluX3NlbmRfZXZlbnQpOgorCSAgQWRkIGRlZmF1bHQgZXZlbnQvc2V0X21hbmFnZXIgaGFuZGxlcnMuIFRoZSBzZXRfbWFuYWdlciBoYW5kbGVyCisJICB0YWtlcyBjYXJlIHRoYXQgdGhlIG1hbmFnZXIgaXMgZGlzdHJpYnV0ZWQgb3ZlciBraWRzIHRoYXQgd2VyZQorCSAgYWxyZWFkeSBpbiB0aGUgYmluIGJlZm9yZSB0aGUgbWFuYWdlciB3YXMgc2V0LiBUaGUgZXZlbnQgaGFuZGxlcgorCSAgaXMgYSB1dGlsaXR5IHZpcnR1YWwgZnVuY3Rpb24gdGhhdCBzZW5kcyB0aGUgZXZlbnQgb3ZlciBhbGwgc2lua3MsCisJICBzbyB0aGF0IGdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKGJpbiwgZXZlbnQpOyBoYXMgdGhlIGV4cGVjdGVkCisJICBiZWhhdmlvdXIuCisJICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfZXZlbnRfZGVmYXVsdCk6CisJICBSZS1pbnN0YWxsIGRlZmF1bHQgZXZlbnQgaGFuZGxpbmcgZm9yIGRpc2NvbnRpbnVpdGllcywgc28gdGhhdAorCSAgc2Vla2luZyB3b3JrcyB3aXRob3V0IHJlcXVpcmluZyBoYWNrcyBpbiBhcHBsaWNhdGlvbnMgb3IgZXh0cmEKKwkgIGNvZGUgaW4gc2lua3MuCisJICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX2NsYXNzX2luaXQpLAorCSAgKGdzdF9waXBlbGluZV9zZW5kX2V2ZW50KToKKwkgIEhhbGYgaGFjaywgaGFsZiB1dGlsaXR5OiBzZXQgYSBwaXBlbGluZSB0byBQQVVTRUQgZm9yIHNlZWsgZXZlbnRzLAorCSAgc2luY2UgdGhhdCBpcyB0aGUgb25seSB3YXkgd2UgY2FuIGd1YXJhbnRlZSBhL3Ygc3luYy4gTWVhbnMgdGhhdAorCSAgeW91IGNhbiBkbyBnc3RfZWxlbWVudF9zZWVrIChwaXBlbGluZSwgbWV0aG9kLCBwb3MpOyBvbiBhIHBpcGVsaW5lCisJICBhbmQgaXQgImp1c3Qgd29ya3MiLgorCisyMDA1LTAzLTI1IDA5OjM1OjAxICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+CisKKwkgIGdzdC9nc3RwaXBlbGluZS5jOiBMb2NrL3VubG9jayBtaXNtYXRjaC4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV91c2VfY2xvY2spOgorCSAgTG9jay91bmxvY2sgbWlzbWF0Y2guCisKKzIwMDUtMDMtMjUgMDA6MzU6NDQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorCisJICBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6IGFkZCBnc3QtcGx1Z2lucy1iYXNlCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOgorCSAgYWRkIGdzdC1wbHVnaW5zLWJhc2UKKwkgICogZG9jcy9nc3QvTWFrZWZpbGUuYW06CisJICBkb24ndCBlcnJvciBvdXQgdW50aWwgZG9jcyBhcmUgZml4ZWQKKwkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzOgorCSAgcmVtb3ZlIHRocmVhZAorCisyMDA1LTAzLTIyIDE0OjIzOjQ5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBBY3RpdmF0ZWQgbW9yZSB0ZXN0cy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay9NYWtlZmlsZS5hbToKKwkgICogY2hlY2svZ3N0L2dzdG1lc3NhZ2UuYzogKFNUQVJUX1RFU1QpLCAoZ3N0X2RhdGFfc3VpdGUpLCAobWFpbik6CisJICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzogKGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbGlzdCksCisJICAoZ3N0X3N0cnVjdHVyZV9jb3B5X2NvbmRpdGlvbmFsKToKKwkgIEFjdGl2YXRlZCBtb3JlIHRlc3RzLgorCSAgQWRkZWQgbWVzc2FnZSB0ZXN0LgorCSAgQWRkZWQgR19UWVBFX1BPSU5URVIgdG8gR3N0U3RydWN0dXJlLgorCisyMDA1LTAzLTIyIDExOjMyOjU5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBEb2NzIHVwZGF0ZXMKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtZ3N0YmluLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RidXMudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdHBpcGVsaW5lLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1tZXNzYWdlcy50eHQ6CisJICAqIGdzdC9nc3RidXMuYzoKKwkgICogZ3N0L2dzdG1lc3NhZ2UuYzoKKwkgIERvY3MgdXBkYXRlcworCisyMDA1LTAzLTIxIDE4OjE3OjU3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBnc3QvZ3N0YnVzLmM6IEZpeCBjb3B5LWFuZC1wYXN0ZSBlcnJvci4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBnc3QvZ3N0YnVzLmM6IChnc3RfYnVzX3Bvc3QpOgorCSAgRml4IGNvcHktYW5kLXBhc3RlIGVycm9yLgorCisyMDA1LTAzLTIxIDE3OjM0OjAyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJKiBDaGFuZ2VMb2c6CisJKiBjaGVjay9NYWtlZmlsZS5hbToKKwkqIGNvbW1vbjoKKwkqIGdzdC9NYWtlZmlsZS5hbToKKwkqIGdzdC9lbGVtZW50cy9NYWtlZmlsZS5hbToKKwkqIGdzdC9lbGVtZW50cy9nc3RlbGVtZW50cy5jOgorCSogZ3N0L2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6CisJKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgorCSogZ3N0L2VsZW1lbnRzL2dzdGZha2VzcmMuaDoKKwkqIGdzdC9lbGVtZW50cy9nc3RmaWxlc3JjLmM6CisJKiBnc3QvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKKwkqIGdzdC9lbGVtZW50cy9nc3RpZGVudGl0eS5oOgorCSogZ3N0L2VsZW1lbnRzL2dzdHRlZS5jOgorCSogZ3N0L2VsZW1lbnRzL2dzdHRlZS5oOgorCSogZ3N0L2dzdC5jOgorCSogZ3N0L2dzdC5oOgorCSogZ3N0L2dzdGJpbi5jOgorCSogZ3N0L2dzdGJpbi5oOgorCSogZ3N0L2dzdGJ1cy5jOgorCSogZ3N0L2dzdGJ1cy5oOgorCSogZ3N0L2dzdGNhcHMuaDoKKwkqIGdzdC9nc3RkYXRhLmg6CisJKiBnc3QvZ3N0ZWxlbWVudC5jOgorCSogZ3N0L2dzdGVsZW1lbnQuaDoKKwkqIGdzdC9nc3RldmVudC5jOgorCSogZ3N0L2dzdGV2ZW50Lmg6CisJKiBnc3QvZ3N0bWVzc2FnZS5jOgorCSogZ3N0L2dzdG1lc3NhZ2UuaDoKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RwYWQuaDoKKwkqIGdzdC9nc3RwaXBlbGluZS5jOgorCSogZ3N0L2dzdHBpcGVsaW5lLmg6CisJKiBnc3QvZ3N0cHJvYmUuaDoKKwkqIGdzdC9nc3RxdWV1ZS5jOgorCSogZ3N0L2dzdHF1ZXVlLmg6CisJKiBnc3QvZ3N0c2NoZWR1bGVyLmM6CisJKiBnc3QvZ3N0c2NoZWR1bGVyLmg6CisJKiBnc3QvZ3N0c3RydWN0dXJlLmM6CisJKiBnc3QvZ3N0c3RydWN0dXJlLmg6CisJKiBnc3QvZ3N0dGFnaW50ZXJmYWNlLmg6CisJKiBnc3QvZ3N0dGFnc2V0dGVyLmg6CisJKiBnc3QvZ3N0dGFzay5jOgorCSogZ3N0L2dzdHRhc2suaDoKKwkqIGdzdC9nc3R0aHJlYWQuYzoKKwkqIGdzdC9nc3R0aHJlYWQuaDoKKwkqIGdzdC9nc3R0eXBlcy5oOgorCSogZ3N0L3NjaGVkdWxlcnMvTWFrZWZpbGUuYW06CisJKiBnc3Qvc2NoZWR1bGVycy9jb3RocmVhZHNfY29tcGF0Lmg6CisJKiBnc3Qvc2NoZWR1bGVycy9lbnRyeXNjaGVkdWxlci5jOgorCSogZ3N0L3NjaGVkdWxlcnMvZmFpcmNvdGhyZWFkcy5jOgorCSogZ3N0L3NjaGVkdWxlcnMvZmFpcmNvdGhyZWFkcy5oOgorCSogZ3N0L3NjaGVkdWxlcnMvZmFpcnNjaGVkdWxlci5jOgorCSogZ3N0L3NjaGVkdWxlcnMvZ3N0YmFzaWNzY2hlZHVsZXIuYzoKKwkqIGdzdC9zY2hlZHVsZXJzL2dzdG9wdGltYWxzY2hlZHVsZXIuYzoKKwkqIGdzdC9zY2hlZHVsZXJzL2d0aHJlYWQtY290aHJlYWRzLmg6CisJKiBnc3Qvc2NoZWR1bGVycy90aHJlYWRzY2hlZHVsZXIuYzoKKwkqIGxpYnMvZ3N0L01ha2VmaWxlLmFtOgorCSogbGlicy9nc3QvYnl0ZXN0cmVhbS9ieXRlc3RyZWFtLmM6CisJKiBsaWJzL2dzdC9ieXRlc3RyZWFtL2ZpbGVwYWQuYzoKKwkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUuYW06CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5oOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5Lmg6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmg6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuaDoKKwkqIHRlc3RzL2JlbmNobWFya3MvY29tcGxleGl0eS5jOgorCSogdGVzdHMvYmVuY2htYXJrcy9tYXNzLWVsZW1lbnRzLmM6CisJKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKKwkqIHRlc3RzL2NvbXBsZXhpdHkuYzoKKwkqIHRlc3RzL21hc3NfZWxlbWVudHMuYzoKKwkqIHRlc3RzL29sZC90ZXN0c3VpdGUvc3RhdGVzL2xvY2tlZC5jOgorCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9zdGF0ZXMvcGFyZW50LmM6CisJKiB0ZXN0c3VpdGUvc3RhdGVzL2xvY2tlZC5jOgorCSogdGVzdHN1aXRlL3N0YXRlcy9wYXJlbnQuYzoKKwkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6CisJKiB0b29scy9nc3QtbGF1bmNoLmM6CisJKiB0b29scy9nc3QtbWQ1c3VtLmM6CisJKiB0b29scy9nc3QtdHlwZWZpbmQuYzoKKwkqIHRvb2xzL2dzdC14bWxpbnNwZWN0LmM6CisJICBOZXh0IGJpZyBtZXJnZS4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgTmV4dCBiaWcgbWVyZ2UuCisJICBBZGRlZCBHc3RCdXMgZm9yIG1haW5sb29wIGludGVncmF0aW9uLgorCSAgQWRkZWQgR3N0TWVzc2FnZSBmb3Igc2VuZGluZyBub3RpZmljYXRpb25zIG9uIHRoZSBidXMuCisJICBBZGRlZCBHc3RUYXNrIGFzIGFuIGFic3RyYWN0aW9uIGZvciBwaXBlbGluZSBlbnRyeSBwb2ludHMuCisJICBSZW1vdmVkIEdzdFRocmVhZC4KKwkgIFJlbW92ZWQgU2NoZWR1bGVycy4KKwkgIFNpbXBsaWZpZWQgR3N0UXVldWUgZm9yIG11bHRpdGhyZWFkZWQgY29yZS4KKwkgIE1hZGUgX2xpbmsgdGhyZWFkc2FmZSwgcmVtb3ZlZCBvbGQgY2Fwc25lZ28uCisJICBBZGRlZCBTVFJFQU1fTE9DSyBhbmQgUFJFUk9MTF9MT0NLIGluIEdzdFBhZC4KKwkgIEFkZGVkIHBhZCBibG9ja2luZyBmdW5jdGlvbnMuCisJICBSZXdvcmtlZCBzY2hlZHVsaW5nIGZ1bmN0aW9ucyBpbiBHc3RQYWQgdG8gcHJlcGFyZSBmb3IKKwkgIHNjaGVkdWxpbmcgdXBkYXRlcyBzb29uLgorCSAgTW92ZWQgZXZlbnRzIG91dCBvZiBkYXRhIHN0cmVhbS4KKwkgIFNpbXBsaWZpZWQgR3N0RXZlbnQgdHlwZXMuCisJICBBZGRlZCByZXR1cm4gdmFsdWVzIHRvIHB1c2gvcHVsbC4KKwkgIFJlbW92ZWQgY2xvY2tpbmcgZnJvbSBHc3RFbGVtZW50LgorCSAgQWRkZWQgcHJvdG90eXBlcyBmb3Igc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIGZvciBuZXh0IG1lcmdlLgorCSAgUmVtb3ZlZCBpdGVyYXRlIGZyb20gYmlucyBhbmQgc3RhdGUgY2hhbmdlIG1hbmFnZW1lbnQuCisJICBGaXhlZCBzb21lIGVsZW1lbnRzLCBkaXNhYmxlZCBvdGhlcnMgZm9yIG5vdy4KKwkgIEZpeGVkIC1pbnNwZWN0IGFuZCAtbGF1bmNoLgorCSAgQWRkZWQgY2hlY2sgZm9yIEdzdEJ1cy4KKworMjAwNS0wMy0xMCAxMjo1MTo0NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgRG9jIHVwZGF0ZXMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1NVC1yZWZjb3VudGluZy50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtY2xvY2tzLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RlbGVtZW50LnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RvYmplY3QudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXN0YW5kYXJkcy50eHQ6CisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fYWRkX2Z1bmMpLCAoZ3N0X2Jpbl9hZGQpLAorCSAgKGdzdF9iaW5fcmVtb3ZlX2Z1bmMpLCAoZ3N0X2Jpbl9yZW1vdmUpOgorCSAgKiBnc3QvZ3N0YmluLmg6CisJICAqIGdzdC9nc3RidWZmZXIuYzoKKwkgICogZ3N0L2dzdGNhcHMuaDoKKwkgICogdGVzdHN1aXRlL2Nsb2NrL2Nsb2NrMS5jOiAobWFpbik6CisJICAqIHRlc3RzdWl0ZS9jbG9jay9jbG9jazIuYzogKGdzdF9jbG9ja19kZWJ1ZyksIChlbGVtZW50X3dhaXQpLAorCSAgKG1haW4pOgorCSAgKiB0ZXN0c3VpdGUvZGxvcGVuL2xvYWRnc3QuYzogKGRvX3Rlc3QpOgorCSAgKiB0ZXN0c3VpdGUvcmVmY291bnRpbmcvYmluLmM6IChhZGRfcmVtb3ZlX3Rlc3QxKSwKKwkgIChhZGRfcmVtb3ZlX3Rlc3QyKSwgKG1haW4pOgorCSAgKiB0ZXN0c3VpdGUvcmVmY291bnRpbmcvZWxlbWVudC5jOiAobWFpbik6CisJICAqIHRlc3RzdWl0ZS9yZWZjb3VudGluZy9lbGVtZW50X3BhZC5jOiAobWFpbik6CisJICAqIHRlc3RzdWl0ZS9yZWZjb3VudGluZy9wYWQuYzogKG1haW4pOgorCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChzaWdpbnRfaGFuZGxlcl9zaWdoYW5kbGVyKToKKwkgICogdG9vbHMvZ3N0LXR5cGVmaW5kLmM6IChtYWluKToKKwkgIERvYyB1cGRhdGVzLgorCSAgQWRkZWQgZG9jIGFib3V0IGNsb2NrLgorCSAgcmVtb3ZlZCBnc3RfYmluX2l0ZXJhdGVfcmVjdXJzZV91cCgpLCBtYXJrZWQgbWV0aG9kcworCSAgZm9yIHJlbW92YWwuCisJICBGaXggbW9yZSB0ZXN0c3VpdGVzLgorCisyMDA1LTAzLTA5IDE3OjI4OjUyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBGaXggX3BhZF9nZXRfZGlyZWN0aW9uIHdydCBnaG9zdHBhZHMuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9nZXRfZGlyZWN0aW9uKSwKKwkgIChfZ3N0X3BhZF9kZWZhdWx0X2ZpeGF0ZV9mb3JlYWNoKSwgKGdzdF9wYWRfY29sbGVjdHYpLAorCSAgKGdzdF9wYWRfY29sbGVjdF92YWxpc3QpOgorCSAgKiB0ZXN0c3VpdGUvYmlucy9pbnRlcmZhY2UuYzogKG1haW4pOgorCSAgKiB0ZXN0c3VpdGUvY2Fwcy9hdWRpb3NjYWxlLmM6ICh0ZXN0X2NhcHMpOgorCSAgKiB0ZXN0c3VpdGUvY2Fwcy9jYXBzLmM6ICh0ZXN0MSksICh0ZXN0MiksICh0ZXN0Myk6CisJICAqIHRlc3RzdWl0ZS9jYXBzL2Rlc2VyaWFsaXplLmM6IChtYWluKToKKwkgICogdGVzdHN1aXRlL2NhcHMvZW51bWNhcHMuYzogKG1haW4pOgorCSAgKiB0ZXN0c3VpdGUvY2Fwcy9maWx0ZXJjYXBzLmM6IChtYWluKToKKwkgICogdGVzdHN1aXRlL2NhcHMvaW50ZXJzZWN0Mi5jOiAobWFpbik6CisJICAqIHRlc3RzdWl0ZS9jYXBzL3JhbmRvbS5jOiAobWFpbik6CisJICAqIHRlc3RzdWl0ZS9jYXBzL3JlbmVnb3RpYXRlLmM6IChteV9maXhhdGUpLCAobWFpbik6CisJICAqIHRlc3RzdWl0ZS9jYXBzL3NldHMuYzogKGNoZWNrX2NhcHMpOgorCSAgKiB0ZXN0c3VpdGUvY2Fwcy9zaW1wbGlmeS5jOiAoY2hlY2tfY2FwcyksIChtYWluKToKKwkgICogdGVzdHN1aXRlL2NhcHMvc3VidHJhY3QuYzogKGNoZWNrX2NhcHMpOgorCSAgRml4IF9wYWRfZ2V0X2RpcmVjdGlvbiB3cnQgZ2hvc3RwYWRzLgorCSAgRml4IGNhcHMgdGVzdHN1aXRlLgorCisyMDA1LTAzLTA5IDE2OjEwOjU5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJKiBDaGFuZ2VMb2c6CisJKiBjaGVjay9NYWtlZmlsZS5hbToKKwkqIGNoZWNrL2dzdC9nc3RiaW4uYzoKKwkqIGNoZWNrL2dzdC9nc3RzeXN0ZW1jbG9jay5jOgorCSogZ3N0L2dzdGJpbi5jOgorCSogZ3N0L2dzdGJpbi5oOgorCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3RlbGVtZW50Lmg6CisJKiBnc3QvZ3N0aXRlcmF0b3IuYzoKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RwaXBlbGluZS5jOgorCSogZ3N0L2dzdHV0aWxzLmg6CisJKiBnc3Qvc2NoZWR1bGVycy9lbnRyeXNjaGVkdWxlci5jOgorCSogZ3N0L3NjaGVkdWxlcnMvZ3N0YmFzaWNzY2hlZHVsZXIuYzoKKwkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOgorCSogdGVzdHMvY2hlY2svZ3N0L2dzdHN5c3RlbWNsb2NrLmM6CisJKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2JpbnMvaW50ZXJmYWNlLmM6CisJKiB0ZXN0c3VpdGUvYmlucy9pbnRlcmZhY2UuYzoKKwkgIEFkZGVkIEdzdEJpbiB0ZXN0LgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBBZGRlZCBHc3RCaW4gdGVzdC4KKwkgIEFkZGVkIEdzdFN5c3RlbUNsb2NrIHRlc3QuCisJICBJbXBsZW1lbnRlZCBjbG9jayBkaXN0cmlidXRpb24gY29kZSBpbiBHc3RCaW4uCisJICBJbXBsZW1lbnRlZCBpdGVyYXRlIHNpbmtzIG1ldGhvZCBmb3IgZnV0dXJlIHVzZS4KKwkgIFJlYXJyYW5nZWQgZ3N0ZWxlbWVudC5oCisJICBGaXggR3N0SXRlcmF0b3IgY29tcGFyaXNvbiBidWcuCisJICBNb3ZlZCBzb21lIGNvZGUgdG8gR3N0UGlwZWxpbmUsIG1vc3RseSBjbG9ja2luZyByZWxhdGVkLgorCisyMDA1LTAzLTA5IDExOjA4OjE4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBCdW1wIHZlcnNpb24gbnVtYmVyLCB3ZSdyZSBub3cgMC45LjAKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjb25maWd1cmUuYWM6CisJICAqIGdzdC9nc3RfcHJpdmF0ZS5oOgorCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2FkZF9mdW5jKSwgKGdzdF9iaW5fYWRkKSwKKwkgIChnc3RfYmluX3JlbW92ZV9mdW5jKSwgKGdzdF9iaW5fcmVtb3ZlKSwKKwkgIChnc3RfYmluX2dldF9ieV9uYW1lX3JlY3Vyc2VfdXApOgorCSAgKiBnc3QvZ3N0Y2xvY2suYzogKGdzdF9jbG9ja19pZF9yZWYpLCAoZ3N0X2Nsb2NrX2lkX3VucmVmKSwKKwkgIChnc3RfY2xvY2tfaWRfY29tcGFyZV9mdW5jKSwgKGdzdF9jbG9ja19pZF93YWl0KSwKKwkgIChnc3RfY2xvY2tfaWRfd2FpdF9hc3luYyksIChnc3RfY2xvY2tfaW5pdCksCisJICAoZ3N0X2Nsb2NrX2FkanVzdF91bmxvY2tlZCksIChnc3RfY2xvY2tfZ2V0X3RpbWUpOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSAgKiBnc3QvZ3N0aW5mby5jOiAoX2dzdF9kZWJ1Z19pbml0KToKKwkgICogZ3N0L2dzdG9iamVjdC5oOgorCSAgKiBnc3QvZ3N0cGFkLmM6IChfZ3N0X3BhZF9kZWZhdWx0X2ZpeGF0ZV9mb3JlYWNoKSwKKwkgIChnc3RfcGFkX2NvbGxlY3R2KSwgKGdzdF9wYWRfY29sbGVjdF92YWxpc3QpLCAoZ3N0X3BhZF9xdWVyeSk6CisJICAqIGdzdC9nc3RwYWQuaDoKKwkgIEJ1bXAgdmVyc2lvbiBudW1iZXIsIHdlJ3JlIG5vdyAwLjkuMAorCSAgQWRkIGZ1dHVyZSBkZWJ1Z2dpbmcgY2F0ZWdvcnkuCisJICBGaXggTlVMTCBfdW5yZWYoKSBpbiBfZ2V0X2J5X25hbWVfcmVjdXJzZV91cAorCSAgUmVhcnJhbmdlIGdzdHBhZC5oLgorCSAgVXBkYXRlIHNvbWUgZG9jcy4KKworMjAwNS0wMy0wOCAxNzo0MjoyOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSogQ2hhbmdlTG9nOgorCSogZ3N0L2VsZW1lbnRzL2dzdGFnZ3JlZ2F0b3IuYzoKKwkqIGdzdC9lbGVtZW50cy9nc3RmYWtlc2luay5jOgorCSogZ3N0L2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKKwkqIGdzdC9lbGVtZW50cy9nc3RmZHNpbmsuYzoKKwkqIGdzdC9lbGVtZW50cy9nc3RmZHNyYy5jOgorCSogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6CisJKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgorCSogZ3N0L2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6CisJKiBnc3QvZWxlbWVudHMvZ3N0bWQ1c2luay5jOgorCSogZ3N0L2VsZW1lbnRzL2dzdG11bHRpZmlsZXNyYy5jOgorCSogZ3N0L2VsZW1lbnRzL2dzdHNoYXBlci5jOgorCSogZ3N0L2VsZW1lbnRzL2dzdHN0YXRpc3RpY3MuYzoKKwkqIGdzdC9lbGVtZW50cy9nc3R0ZWUuYzoKKwkqIGdzdC9nc3RlbGVtZW50LmM6CisJKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSogZ3N0L2dzdHF1ZXVlLmM6CisJKiBnc3QvZ3N0dGhyZWFkLmM6CisJKiBnc3Qvc2NoZWR1bGVycy9nc3RiYXNpY3NjaGVkdWxlci5jOgorCSogZ3N0L3NjaGVkdWxlcnMvZ3N0b3B0aW1hbHNjaGVkdWxlci5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RhZ2dyZWdhdG9yLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bWQ1c2luay5jOgorCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aWZpbGVzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0c2hhcGVyLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHN0YXRpc3RpY3MuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6CisJICBSZW1vdmUgdGhyZWFkc2FmZSBwcm9wZXJ0aWVzLiBGaXggZWxlbWVudHMgYmVjYXVzZSBHT2JqZWN0IGNvbXBsYWlucyB3aGVuIGluc3RhbGxpbmcgYSBwcm9wZXJ0eSBiZWZvcmUgZGVjbGFyaW5nIGEgc2UuLi4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgUmVtb3ZlIHRocmVhZHNhZmUgcHJvcGVydGllcy4gRml4IGVsZW1lbnRzIGJlY2F1c2UgR09iamVjdAorCSAgY29tcGxhaW5zIHdoZW4gaW5zdGFsbGluZyBhIHByb3BlcnR5IGJlZm9yZSBkZWNsYXJpbmcgYQorCSAgc2V0L2dldF9wcm9wZXJ0eSBoYW5kbGVyLgorCSAgUmVhcnJhbmdlIGdzdGVsZW1lbnQuaCBmaWxlLCB1c2UgU1RBVEUgbWFjcm9zIGZvciBzdGF0ZSBsb2Nrcy4KKwkgIEZyZWUgbXV0ZXhlcyBpbiB0aGUgZmluYWxpemUgbWV0aG9kIGluc3RlYWQgb2YgZGlzcG9zZS4KKworMjAwNS0wMy0wOCAxNTo1NzoxNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKworCSAgQWRkZWQgcGFyZW50YWdlIGNoZWNrLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGNoZWNrL2dzdC9nc3RvYmplY3QuYzogKFNUQVJUX1RFU1QpLCAoZ3N0X29iamVjdF9zdWl0ZSk6CisJICAqIGdzdC9nc3R0aHJlYWQuYzogKGdzdF90aHJlYWRfcmVsZWFzZV9jaGlsZHJlbl9sb2Nrcyk6CisJICBBZGRlZCBwYXJlbnRhZ2UgY2hlY2suCisJICBGaXggYnVpbGQgb2cgR3N0VGhyZWFkIGFnYWluLgorCisyMDA1LTAzLTA4IDE0OjM4OjA2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBEb2NzIHVwZGF0ZXMsIGNsZWFuIHVwIHNvbWUgaGVhZGVycy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LU1ULXJlZmNvdW50aW5nLnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1jb252ZW50aW9ucy50eHQ6CisJICAqIGRvY3MvZGVzaWduL3BhcnQtZ3N0b2JqZWN0LnR4dDoKKwkgICogZG9jcy9kZXNpZ24vcGFydC1yZWxhdGlvbnMudHh0OgorCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXN0YW5kYXJkcy50eHQ6CisJICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fYWRkX2Z1bmMpLCAoZ3N0X2Jpbl9hZGQpLAorCSAgKGdzdF9iaW5fcmVtb3ZlX2Z1bmMpLCAoZ3N0X2Jpbl9yZW1vdmUpLCAoZ3N0X2Jpbl9pdGVyYXRlX3JlY3Vyc2UpLAorCSAgKGdzdF9iaW5fZ2V0X2J5X25hbWUpLCAoZ3N0X2Jpbl9nZXRfYnlfaW50ZXJmYWNlKSwKKwkgIChnc3RfYmluX2l0ZXJhdGVfYWxsX2J5X2ludGVyZmFjZSk6CisJICAqIGdzdC9nc3RidWZmZXIuaDoKKwkgICogZ3N0L2dzdGNsb2NrLmg6CisJICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9jbGFzc19pbml0KSwKKwkgIChnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X2VsZW1lbnRfc2V0X2xvb3BfZnVuY3Rpb24pOgorCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgorCSAgKiBnc3QvZ3N0aXRlcmF0b3IuYzoKKwkgICogZ3N0L2dzdG9iamVjdC5jOiAoZ3N0X29iamVjdF9jbGFzc19pbml0KSwgKGdzdF9vYmplY3RfcmVmKSwKKwkgIChnc3Rfb2JqZWN0X3VucmVmKSwgKGdzdF9vYmplY3Rfc2luayksIChnc3Rfb2JqZWN0X2Rpc3Bvc2UpLAorCSAgKGdzdF9vYmplY3RfZGlzcGF0Y2hfcHJvcGVydGllc19jaGFuZ2VkKSwgKGdzdF9vYmplY3Rfc2V0X25hbWUpLAorCSAgKGdzdF9vYmplY3Rfc2V0X3BhcmVudCksIChnc3Rfb2JqZWN0X3VucGFyZW50KSwKKwkgIChnc3Rfb2JqZWN0X2NoZWNrX3VuaXF1ZW5lc3MpOgorCSAgKiBnc3QvZ3N0b2JqZWN0Lmg6CisJICBEb2NzIHVwZGF0ZXMsIGNsZWFuIHVwIHNvbWUgaGVhZGVycy4KKwkgIEZyZWUgaXRlcmF0b3JzIGluIEdzdEJpbi4KKwkgIEdzdE9iamVjdCBpcyBub3cgbG9va2luZyBnb29kLgorCisyMDA1LTAzLTA3IDE4OjMzOjM3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJICBjaGVjay86IEFkZGVkIGNoZWNrcy4KKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgKiBjaGVjay8uY3ZzaWdub3JlOgorCSAgKiBjaGVjay9NYWtlZmlsZS5hbToKKwkgICogY2hlY2svZ3N0LWxpYnMvLmN2c2lnbm9yZToKKwkgICogY2hlY2svZ3N0LWxpYnMvZ2RwLmM6IChTVEFSVF9URVNUKSwgKGdzdF9vYmplY3Rfc3VpdGUpLCAobWFpbik6CisJICAqIGNoZWNrL2dzdC8uY3ZzaWdub3JlOgorCSAgKiBjaGVjay9nc3QvZ3N0YnVzLmM6IChwb3VuZF9idXNfd2l0aF9tZXNzYWdlcyksIChwdWxsX21lc3NhZ2VzKSwKKwkgIChTVEFSVF9URVNUKSwgKGdzdGJ1c19zdWl0ZSksIChtYWluKToKKwkgICogY2hlY2svZ3N0L2dzdGNhcHMuYzogKFNUQVJUX1RFU1QpLCAoZ3N0X2NhcHNfc3VpdGUpLCAobWFpbik6CisJICAqIGNoZWNrL2dzdC9nc3RkYXRhLmM6IChTVEFSVF9URVNUKSwgKHRocmVhZF9yZWYpLCAodGhyZWFkX3VucmVmKSwKKwkgIChnc3RfZGF0YV9zdWl0ZSksIChtYWluKToKKwkgICogY2hlY2svZ3N0L2dzdGl0ZXJhdG9yLmM6IChtYWtlX2xpc3Rfb2ZfaW50cyksIChTVEFSVF9URVNUKSwKKwkgIChhZGRfZm9sZF9mdW5jKSwgKGdzdGl0ZXJhdG9yX3N1aXRlKSwgKG1haW4pOgorCSAgKiBjaGVjay9nc3QvZ3N0b2JqZWN0LmM6IChnc3RfZmFrZV9vYmplY3RfZ2V0X3R5cGUpLCAoU1RBUlRfVEVTVCksCisJICAodGhyZWFkX25hbWVfb2JqZWN0KSwgKHRocmVhZF9uYW1lX29iamVjdF9kZWZhdWx0KSwKKwkgIChnc3Rfb2JqZWN0X25hbWVfY29tcGFyZSksIChnc3Rfb2JqZWN0X3N1aXRlKSwgKG1haW4pOgorCSAgKiBjaGVjay9nc3QvZ3N0cGFkLmM6IChTVEFSVF9URVNUKSwgKHRocmVhZF9saW5rX3VubGluayksCisJICAoZ3N0X3BhZF9zdWl0ZSksIChtYWluKToKKwkgICogY2hlY2svZ3N0Y2hlY2suYzogKGdzdF9jaGVja19sb2dfbWVzc2FnZV9mdW5jKSwKKwkgIChnc3RfY2hlY2tfbG9nX2NyaXRpY2FsX2Z1bmMpLCAoZ3N0X2NoZWNrX2luaXQpOgorCSAgKiBjaGVjay9nc3RjaGVjay5oOgorCSAgKiBjaGVjay9waXBlbGluZXMvc2ltcGxlX2xhdW5jaF9saW5lcy5jOiAoc2V0dXBfcGlwZWxpbmUpLAorCSAgKHJ1bl9waXBlbGluZSksIChTVEFSVF9URVNUKSwgKHNpbXBsZV9sYXVuY2hfbGluZXNfc3VpdGUpLCAobWFpbik6CisJICBBZGRlZCBjaGVja3MuCisKKzIwMDUtMDMtMDcgMTg6Mjk6MzYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisKKwkgIGdzdC9nc3RpdGVyYXRvci4qOiBBZGRlZCBtaXNzaW5nIGZpbGVzLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAqIGdzdC9nc3RpdGVyYXRvci5jOiAoZ3N0X2l0ZXJhdG9yX2luaXQpLCAoZ3N0X2l0ZXJhdG9yX25ldyksCisJICAoZ3N0X2xpc3RfaXRlcmF0b3JfbmV4dCksIChnc3RfbGlzdF9pdGVyYXRvcl9yZXN5bmMpLAorCSAgKGdzdF9saXN0X2l0ZXJhdG9yX2ZyZWUpLCAoZ3N0X2l0ZXJhdG9yX25ld19saXN0KSwKKwkgIChnc3RfaXRlcmF0b3JfcG9wKSwgKGdzdF9pdGVyYXRvcl9uZXh0KSwgKGdzdF9pdGVyYXRvcl9yZXN5bmMpLAorCSAgKGdzdF9pdGVyYXRvcl9mcmVlKSwgKGdzdF9pdGVyYXRvcl9wdXNoKSwgKGZpbHRlcl9uZXh0KSwKKwkgIChmaWx0ZXJfcmVzeW5jKSwgKGZpbHRlcl91bmluaXQpLCAoZmlsdGVyX2ZyZWUpLAorCSAgKGdzdF9pdGVyYXRvcl9maWx0ZXIpLCAoZ3N0X2l0ZXJhdG9yX2ZvbGQpLCAoZm9yZWFjaF9mb2xkX2Z1bmMpLAorCSAgKGdzdF9pdGVyYXRvcl9mb3JlYWNoKSwgKGZpbmRfY3VzdG9tX2ZvbGRfZnVuYyksCisJICAoZ3N0X2l0ZXJhdG9yX2ZpbmRfY3VzdG9tKToKKwkgICogZ3N0L2dzdGl0ZXJhdG9yLmg6CisJICBBZGRlZCBtaXNzaW5nIGZpbGVzLgorCisyMDA1LTAzLTA3IDE4OjI3OjQyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorCisJKiBDaGFuZ2VMb2c6CisJKiBNYWtlZmlsZS5hbToKKwkqIGNvbmZpZ3VyZS5hYzoKKwkqIGRvY3MvZGVzaWduL3BhcnQtTVQtcmVmY291bnRpbmcudHh0OgorCSogZG9jcy9kZXNpZ24vcGFydC1jb252ZW50aW9ucy50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdG9iamVjdC50eHQ6CisJKiBkb2NzL2Rlc2lnbi9wYXJ0LXJlbGF0aW9ucy50eHQ6CisJKiBleGFtcGxlcy9taXhlci9taXhlci5jOgorCSogZXhhbXBsZXMvdGhyZWFkL3RocmVhZC5jOgorCSogZ3N0L01ha2VmaWxlLmFtOgorCSogZ3N0L2F1dG9wbHVnL2dzdHNlYXJjaGZ1bmNzLmM6CisJKiBnc3QvYXV0b3BsdWcvZ3N0c3BpZGVyLmM6CisJKiBnc3QvYXV0b3BsdWcvZ3N0c3BpZGVyaWRlbnRpdHkuYzoKKwkqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmM6CisJKiBnc3QvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKKwkqIGdzdC9lbGVtZW50cy9nc3R0ZWUuYzoKKwkqIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKKwkqIGdzdC9nc3QuYzoKKwkqIGdzdC9nc3QuaDoKKwkqIGdzdC9nc3RiaW4uYzoKKwkqIGdzdC9nc3RiaW4uaDoKKwkqIGdzdC9nc3RidWZmZXIuYzoKKwkqIGdzdC9nc3RidWZmZXIuaDoKKwkqIGdzdC9nc3RjYXBzLmM6CisJKiBnc3QvZ3N0Y2Fwcy5oOgorCSogZ3N0L2dzdGNsb2NrLmM6CisJKiBnc3QvZ3N0Y2xvY2suaDoKKwkqIGdzdC9nc3Rjb21wYXQuaDoKKwkqIGdzdC9nc3RjcHUuYzoKKwkqIGdzdC9nc3RkYXRhLmM6CisJKiBnc3QvZ3N0ZGF0YS5oOgorCSogZ3N0L2dzdGVsZW1lbnQuYzoKKwkqIGdzdC9nc3RlbGVtZW50Lmg6CisJKiBnc3QvZ3N0ZXZlbnQuaDoKKwkqIGdzdC9nc3Rmb3JtYXQuYzoKKwkqIGdzdC9nc3Rmb3JtYXQuaDoKKwkqIGdzdC9nc3RpbmRleC5jOgorCSogZ3N0L2dzdGluZm8uYzoKKwkqIGdzdC9nc3RpbmZvLmg6CisJKiBnc3QvZ3N0bWVtY2h1bmsuYzoKKwkqIGdzdC9nc3RvYmplY3QuYzoKKwkqIGdzdC9nc3RvYmplY3QuaDoKKwkqIGdzdC9nc3RwYWQuYzoKKwkqIGdzdC9nc3RwYWQuaDoKKwkqIGdzdC9nc3RwaXBlbGluZS5jOgorCSogZ3N0L2dzdHBpcGVsaW5lLmg6CisJKiBnc3QvZ3N0cGx1Z2luLmM6CisJKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgorCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuaDoKKwkqIGdzdC9nc3Rwcm9iZS5jOgorCSogZ3N0L2dzdHF1ZXJ5LmM6CisJKiBnc3QvZ3N0cXVlcnkuaDoKKwkqIGdzdC9nc3RxdWV1ZS5jOgorCSogZ3N0L2dzdHNjaGVkdWxlci5jOgorCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgorCSogZ3N0L2dzdHN0cnVjdHVyZS5oOgorCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6CisJKiBnc3QvZ3N0c3lzdGVtY2xvY2suaDoKKwkqIGdzdC9nc3R0YWcuYzoKKwkqIGdzdC9nc3R0YWdpbnRlcmZhY2UuYzoKKwkqIGdzdC9nc3R0YWdsaXN0LmM6CisJKiBnc3QvZ3N0dGFnc2V0dGVyLmM6CisJKiBnc3QvZ3N0dGhyZWFkLmM6CisJKiBnc3QvZ3N0dHJhc2hzdGFjay5oOgorCSogZ3N0L2dzdHR5cGVmaW5kLmM6CisJKiBnc3QvZ3N0dHlwZXMuaDoKKwkqIGdzdC9nc3R1dGlscy5jOgorCSogZ3N0L2dzdHV0aWxzLmg6CisJKiBnc3QvZ3N0dmFsdWUuYzoKKwkqIGdzdC9wYXJzZS9ncmFtbWFyLnk6CisJKiBnc3Qvc2NoZWR1bGVycy9nc3RiYXNpY3NjaGVkdWxlci5jOgorCSogZ3N0L3NjaGVkdWxlcnMvZ3N0b3B0aW1hbHNjaGVkdWxlci5jOgorCSogbGlicy9nc3QvYnl0ZXN0cmVhbS9ieXRlc3RyZWFtLmM6CisJKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKKwkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6CisJKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgorCSogcG8vbmIucG86CisJKiBwby9ydS5wbzoKKwkqIHRlc3RzL29sZC9leGFtcGxlcy9taXhlci9taXhlci5jOgorCSogdGVzdHMvb2xkL2V4YW1wbGVzL3RocmVhZC90aHJlYWQuYzoKKwkqIHRlc3RzL3RocmVhZHN0YXRlL3RocmVhZHN0YXRlMi5jOgorCSogdG9vbHMvZ3N0LWNvbXBwcmVwLmM6CisJKiB0b29scy9nc3QtaW5zcGVjdC5jOgorCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgorCSogdG9vbHMvZ3N0LW1kNXN1bS5jOgorCSogdG9vbHMvZ3N0LXhtbGluc3BlY3QuYzoKKwkgIEZpcnN0IFRIUkVBREVEIGJhY2twb3J0IGF0dGVtcHQsIGZvY3VzaW5nIG9uIGFkZGluZyBsb2NrcyBhbmQgbWFraW5nIHN1cmUgdGhlIEFQSSBpcyB0aHJlYWRzYWZlLiBOZWVkcyBtb3JlIHdvcmsuIE1vci4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBGaXJzdCBUSFJFQURFRCBiYWNrcG9ydCBhdHRlbXB0LCBmb2N1c2luZyBvbiBhZGRpbmcgbG9ja3MgYW5kCisJICBtYWtpbmcgc3VyZSB0aGUgQVBJIGlzIHRocmVhZHNhZmUuIE5lZWRzIG1vcmUgd29yay4gTW9yZSBkb2NzCisJICBmb2xsb3cgdGhpcyB3ZWVrLgorCisyMDA1LTAyLTI1IDAwOjEwOjA1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L2dzdGluZm8uYzoKKwkqIGdzdC9nc3RpbmZvLmg6CisJICBhbm90aGVyIG5vLWRlYnVnIGJ1aWxkIGZpeAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBhbm90aGVyIG5vLWRlYnVnIGJ1aWxkIGZpeAorCisyMDA1LTAyLTI0IDIzOjQxOjU3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKworCSogZ3N0L3NjaGVkdWxlcnMvZmFpcmNvdGhyZWFkcy5jOgorCSAgZGlzYWJsZSBkZWJ1ZyBidWlsZCBmaXgKKwkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgorCSAgZGlzYWJsZSBkZWJ1ZyBidWlsZCBmaXgKKworMjAwNS0wMi0yNCAxNzoxMjoxOSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorCisJICB0ZXN0cy86IE5ldyBmaWxlcywgZ29vZCBmb3IgcnVubmluZyBjb21wbGV4aXR5IGJlbmNobWFya3MuCisJICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKKwkgIDIwMDUtMDItMjQgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+CisJICAqIHRlc3RzL2JlbmNoLWNvbXBsZXhpdHkuc2NtOgorCSAgKiB0ZXN0cy9jb21wbGV4aXR5LmdudXBsb3Q6IE5ldyBmaWxlcywgZ29vZCBmb3IgcnVubmluZyBjb21wbGV4aXR5CisJICBiZW5jaG1hcmtzLgorCisyMDA1LTAyLTI0IDE1OjM2OjIyICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIHRlc3RzLzogTmV3IHRlc3QsIHNldHMgdXAgTiBlbGVtZW50cywgYXQgZWFjaCBsZXZlbCB0ZWVpbmcgaW50byBNIHN0cmVhbXMgcGVyIGVsZW1lbnQuIEVlZWVudGVyZXN0aW5nLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTAyLTI0ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiB0ZXN0cy9NYWtlZmlsZS5hbToKKwkgICogdGVzdHMvY29tcGxleGl0eS5jOiBOZXcgdGVzdCwgc2V0cyB1cCBOIGVsZW1lbnRzLCBhdCBlYWNoIGxldmVsCisJICB0ZWVpbmcgaW50byBNIHN0cmVhbXMgcGVyIGVsZW1lbnQuIEVlZWVudGVyZXN0aW5nLgorCisyMDA1LTAyLTI0IDEyOjMxOjEyICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisKKwkgIHRlc3RzL21hc3NfZWxlbWVudHMuZ251cGxvdDogZ251cGxvdCBmaWxlIGZvciB0aGUgbWFzc19lbGVtZW50cyBiZW5jaG1hcmsuIFJ1biBhcyBnbnVwbG90IG1hc3NfZWxlbWVudHMuZ251cGxvdCA+IGZvby4uLgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICAyMDA1LTAyLTI0ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCSAgKiB0ZXN0cy9tYXNzX2VsZW1lbnRzLmdudXBsb3Q6IGdudXBsb3QgZmlsZSBmb3IgdGhlIG1hc3NfZWxlbWVudHMKKwkgIGJlbmNobWFyay4gUnVuIGFzIGdudXBsb3QgbWFzc19lbGVtZW50cy5nbnVwbG90ID4gZm9vLnBzLCBhZnRlcgorCSAgcnVubmluZyBiZW5jaC1tYXNzX2VsZW1lbnRzLnNjbS4KKwkgICogdGVzdHMvYmVuY2gtbWFzc19lbGVtZW50cy5zY206IE5ldyBzY3JpcHQsIHJ1bnMgbWFzc19lbGVtZW50cworCSAgZm9yIHZhcmlvdXMgbnVtYmVycyBvZiBpZGVudGl0aWVzLCBvdXRwdXR0aW5nIHRoZSByZXN1bHRzIHRvIGEKKwkgIGZpbGUuIFJlcXVpcmVzIGd1aWxlIDEuNi4gSnVzdCBmb3IgdGVzdGluZy4KKworMjAwNS0wMi0yMyAxNToxNDowMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIGdzdC9zY2hlZHVsZXJzL2ZhaXJzY2hlZHVsZXIuYzoKKwkgIG9uZSBtb3JlIGZpeAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBvbmUgbW9yZSBmaXgKKworMjAwNS0wMi0yMyAxNTowNjozNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIGdzdC9zY2hlZHVsZXJzL2ZhaXJzY2hlZHVsZXIuYzoKKwkgIGNvbXBpbGUgd2l0aCBkZWJ1ZyBkaXNhYmxlZAorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBjb21waWxlIHdpdGggZGVidWcgZGlzYWJsZWQKKworMjAwNS0wMi0yMiAxNjozNDoxMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisKKwkqIENoYW5nZUxvZzoKKwkqIGNvbmZpZ3VyZS5hYzoKKwkgIGh1bnRpbmcgc2Vhc29uIG9uIDAuOSBpcyBub3cgT1BFTgorCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6CisJICBodW50aW5nIHNlYXNvbiBvbiAwLjkgaXMgbm93IE9QRU4KKwpkaWZmIC0tZ2l0IGEvSU5TVEFMTCBiL0lOU1RBTEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQyYTE3YQotLS0gL2Rldi9udWxsCisrKyBiL0lOU1RBTEwKQEAgLTAsMCArMSwxODIgQEAKK0Jhc2ljIEluc3RhbGxhdGlvbgorPT09PT09PT09PT09PT09PT09CisKKyAgIFRoZXNlIGFyZSBnZW5lcmljIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMuCisKKyAgIFRoZSBgY29uZmlndXJlJyBzaGVsbCBzY3JpcHQgYXR0ZW1wdHMgdG8gZ3Vlc3MgY29ycmVjdCB2YWx1ZXMgZm9yCit2YXJpb3VzIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIHVzZWQgZHVyaW5nIGNvbXBpbGF0aW9uLiAgSXQgdXNlcwordGhvc2UgdmFsdWVzIHRvIGNyZWF0ZSBhIGBNYWtlZmlsZScgaW4gZWFjaCBkaXJlY3Rvcnkgb2YgdGhlIHBhY2thZ2UuCitJdCBtYXkgYWxzbyBjcmVhdGUgb25lIG9yIG1vcmUgYC5oJyBmaWxlcyBjb250YWluaW5nIHN5c3RlbS1kZXBlbmRlbnQKK2RlZmluaXRpb25zLiAgRmluYWxseSwgaXQgY3JlYXRlcyBhIHNoZWxsIHNjcmlwdCBgY29uZmlnLnN0YXR1cycgdGhhdAoreW91IGNhbiBydW4gaW4gdGhlIGZ1dHVyZSB0byByZWNyZWF0ZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLCBhIGZpbGUKK2Bjb25maWcuY2FjaGUnIHRoYXQgc2F2ZXMgdGhlIHJlc3VsdHMgb2YgaXRzIHRlc3RzIHRvIHNwZWVkIHVwCityZWNvbmZpZ3VyaW5nLCBhbmQgYSBmaWxlIGBjb25maWcubG9nJyBjb250YWluaW5nIGNvbXBpbGVyIG91dHB1dAorKHVzZWZ1bCBtYWlubHkgZm9yIGRlYnVnZ2luZyBgY29uZmlndXJlJykuCisKKyAgIElmIHlvdSBuZWVkIHRvIGRvIHVudXN1YWwgdGhpbmdzIHRvIGNvbXBpbGUgdGhlIHBhY2thZ2UsIHBsZWFzZSB0cnkKK3RvIGZpZ3VyZSBvdXQgaG93IGBjb25maWd1cmUnIGNvdWxkIGNoZWNrIHdoZXRoZXIgdG8gZG8gdGhlbSwgYW5kIG1haWwKK2RpZmZzIG9yIGluc3RydWN0aW9ucyB0byB0aGUgYWRkcmVzcyBnaXZlbiBpbiB0aGUgYFJFQURNRScgc28gdGhleSBjYW4KK2JlIGNvbnNpZGVyZWQgZm9yIHRoZSBuZXh0IHJlbGVhc2UuICBJZiBhdCBzb21lIHBvaW50IGBjb25maWcuY2FjaGUnCitjb250YWlucyByZXN1bHRzIHlvdSBkb24ndCB3YW50IHRvIGtlZXAsIHlvdSBtYXkgcmVtb3ZlIG9yIGVkaXQgaXQuCisKKyAgIFRoZSBmaWxlIGBjb25maWd1cmUuaW4nIGlzIHVzZWQgdG8gY3JlYXRlIGBjb25maWd1cmUnIGJ5IGEgcHJvZ3JhbQorY2FsbGVkIGBhdXRvY29uZicuICBZb3Ugb25seSBuZWVkIGBjb25maWd1cmUuaW4nIGlmIHlvdSB3YW50IHRvIGNoYW5nZQoraXQgb3IgcmVnZW5lcmF0ZSBgY29uZmlndXJlJyB1c2luZyBhIG5ld2VyIHZlcnNpb24gb2YgYGF1dG9jb25mJy4KKworVGhlIHNpbXBsZXN0IHdheSB0byBjb21waWxlIHRoaXMgcGFja2FnZSBpczoKKworICAxLiBgY2QnIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgcGFja2FnZSdzIHNvdXJjZSBjb2RlIGFuZCB0eXBlCisgICAgIGAuL2NvbmZpZ3VyZScgdG8gY29uZmlndXJlIHRoZSBwYWNrYWdlIGZvciB5b3VyIHN5c3RlbS4gIElmIHlvdSdyZQorICAgICB1c2luZyBgY3NoJyBvbiBhbiBvbGQgdmVyc2lvbiBvZiBTeXN0ZW0gViwgeW91IG1pZ2h0IG5lZWQgdG8gdHlwZQorICAgICBgc2ggLi9jb25maWd1cmUnIGluc3RlYWQgdG8gcHJldmVudCBgY3NoJyBmcm9tIHRyeWluZyB0byBleGVjdXRlCisgICAgIGBjb25maWd1cmUnIGl0c2VsZi4KKworICAgICBSdW5uaW5nIGBjb25maWd1cmUnIHRha2VzIGF3aGlsZS4gIFdoaWxlIHJ1bm5pbmcsIGl0IHByaW50cyBzb21lCisgICAgIG1lc3NhZ2VzIHRlbGxpbmcgd2hpY2ggZmVhdHVyZXMgaXQgaXMgY2hlY2tpbmcgZm9yLgorCisgIDIuIFR5cGUgYG1ha2UnIHRvIGNvbXBpbGUgdGhlIHBhY2thZ2UuCisKKyAgMy4gT3B0aW9uYWxseSwgdHlwZSBgbWFrZSBjaGVjaycgdG8gcnVuIGFueSBzZWxmLXRlc3RzIHRoYXQgY29tZSB3aXRoCisgICAgIHRoZSBwYWNrYWdlLgorCisgIDQuIFR5cGUgYG1ha2UgaW5zdGFsbCcgdG8gaW5zdGFsbCB0aGUgcHJvZ3JhbXMgYW5kIGFueSBkYXRhIGZpbGVzIGFuZAorICAgICBkb2N1bWVudGF0aW9uLgorCisgIDUuIFlvdSBjYW4gcmVtb3ZlIHRoZSBwcm9ncmFtIGJpbmFyaWVzIGFuZCBvYmplY3QgZmlsZXMgZnJvbSB0aGUKKyAgICAgc291cmNlIGNvZGUgZGlyZWN0b3J5IGJ5IHR5cGluZyBgbWFrZSBjbGVhbicuICBUbyBhbHNvIHJlbW92ZSB0aGUKKyAgICAgZmlsZXMgdGhhdCBgY29uZmlndXJlJyBjcmVhdGVkIChzbyB5b3UgY2FuIGNvbXBpbGUgdGhlIHBhY2thZ2UgZm9yCisgICAgIGEgZGlmZmVyZW50IGtpbmQgb2YgY29tcHV0ZXIpLCB0eXBlIGBtYWtlIGRpc3RjbGVhbicuICBUaGVyZSBpcworICAgICBhbHNvIGEgYG1ha2UgbWFpbnRhaW5lci1jbGVhbicgdGFyZ2V0LCBidXQgdGhhdCBpcyBpbnRlbmRlZCBtYWlubHkKKyAgICAgZm9yIHRoZSBwYWNrYWdlJ3MgZGV2ZWxvcGVycy4gIElmIHlvdSB1c2UgaXQsIHlvdSBtYXkgaGF2ZSB0byBnZXQKKyAgICAgYWxsIHNvcnRzIG9mIG90aGVyIHByb2dyYW1zIGluIG9yZGVyIHRvIHJlZ2VuZXJhdGUgZmlsZXMgdGhhdCBjYW1lCisgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworQ29tcGlsZXJzIGFuZCBPcHRpb25zCis9PT09PT09PT09PT09PT09PT09PT0KKworICAgU29tZSBzeXN0ZW1zIHJlcXVpcmUgdW51c3VhbCBvcHRpb25zIGZvciBjb21waWxhdGlvbiBvciBsaW5raW5nIHRoYXQKK3RoZSBgY29uZmlndXJlJyBzY3JpcHQgZG9lcyBub3Qga25vdyBhYm91dC4gIFlvdSBjYW4gZ2l2ZSBgY29uZmlndXJlJworaW5pdGlhbCB2YWx1ZXMgZm9yIHZhcmlhYmxlcyBieSBzZXR0aW5nIHRoZW0gaW4gdGhlIGVudmlyb25tZW50LiAgVXNpbmcKK2EgQm91cm5lLWNvbXBhdGlibGUgc2hlbGwsIHlvdSBjYW4gZG8gdGhhdCBvbiB0aGUgY29tbWFuZCBsaW5lIGxpa2UKK3RoaXM6CisgICAgIENDPWM4OSBDRkxBR1M9LU8yIExJQlM9LWxwb3NpeCAuL2NvbmZpZ3VyZQorCitPciBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSB0aGUgYGVudicgcHJvZ3JhbSwgeW91IGNhbiBkbyBpdCBsaWtlIHRoaXM6CisgICAgIGVudiBDUFBGTEFHUz0tSS91c3IvbG9jYWwvaW5jbHVkZSBMREZMQUdTPS1zIC4vY29uZmlndXJlCisKK0NvbXBpbGluZyBGb3IgTXVsdGlwbGUgQXJjaGl0ZWN0dXJlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgIFlvdSBjYW4gY29tcGlsZSB0aGUgcGFja2FnZSBmb3IgbW9yZSB0aGFuIG9uZSBraW5kIG9mIGNvbXB1dGVyIGF0IHRoZQorc2FtZSB0aW1lLCBieSBwbGFjaW5nIHRoZSBvYmplY3QgZmlsZXMgZm9yIGVhY2ggYXJjaGl0ZWN0dXJlIGluIHRoZWlyCitvd24gZGlyZWN0b3J5LiAgVG8gZG8gdGhpcywgeW91IG11c3QgdXNlIGEgdmVyc2lvbiBvZiBgbWFrZScgdGhhdAorc3VwcG9ydHMgdGhlIGBWUEFUSCcgdmFyaWFibGUsIHN1Y2ggYXMgR05VIGBtYWtlJy4gIGBjZCcgdG8gdGhlCitkaXJlY3Rvcnkgd2hlcmUgeW91IHdhbnQgdGhlIG9iamVjdCBmaWxlcyBhbmQgZXhlY3V0YWJsZXMgdG8gZ28gYW5kIHJ1bgordGhlIGBjb25maWd1cmUnIHNjcmlwdC4gIGBjb25maWd1cmUnIGF1dG9tYXRpY2FsbHkgY2hlY2tzIGZvciB0aGUKK3NvdXJjZSBjb2RlIGluIHRoZSBkaXJlY3RvcnkgdGhhdCBgY29uZmlndXJlJyBpcyBpbiBhbmQgaW4gYC4uJy4KKworICAgSWYgeW91IGhhdmUgdG8gdXNlIGEgYG1ha2UnIHRoYXQgZG9lcyBub3Qgc3VwcG9ydHMgdGhlIGBWUEFUSCcKK3ZhcmlhYmxlLCB5b3UgaGF2ZSB0byBjb21waWxlIHRoZSBwYWNrYWdlIGZvciBvbmUgYXJjaGl0ZWN0dXJlIGF0IGEgdGltZQoraW4gdGhlIHNvdXJjZSBjb2RlIGRpcmVjdG9yeS4gIEFmdGVyIHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgcGFja2FnZSBmb3IKK29uZSBhcmNoaXRlY3R1cmUsIHVzZSBgbWFrZSBkaXN0Y2xlYW4nIGJlZm9yZSByZWNvbmZpZ3VyaW5nIGZvciBhbm90aGVyCithcmNoaXRlY3R1cmUuCisKK0luc3RhbGxhdGlvbiBOYW1lcworPT09PT09PT09PT09PT09PT09CisKKyAgIEJ5IGRlZmF1bHQsIGBtYWtlIGluc3RhbGwnIHdpbGwgaW5zdGFsbCB0aGUgcGFja2FnZSdzIGZpbGVzIGluCitgL3Vzci9sb2NhbC9iaW4nLCBgL3Vzci9sb2NhbC9tYW4nLCBldGMuICBZb3UgY2FuIHNwZWNpZnkgYW4KK2luc3RhbGxhdGlvbiBwcmVmaXggb3RoZXIgdGhhbiBgL3Vzci9sb2NhbCcgYnkgZ2l2aW5nIGBjb25maWd1cmUnIHRoZQorb3B0aW9uIGAtLXByZWZpeD1QQVRIJy4KKworICAgWW91IGNhbiBzcGVjaWZ5IHNlcGFyYXRlIGluc3RhbGxhdGlvbiBwcmVmaXhlcyBmb3IKK2FyY2hpdGVjdHVyZS1zcGVjaWZpYyBmaWxlcyBhbmQgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzLiAgSWYgeW91CitnaXZlIGBjb25maWd1cmUnIHRoZSBvcHRpb24gYC0tZXhlYy1wcmVmaXg9UEFUSCcsIHRoZSBwYWNrYWdlIHdpbGwgdXNlCitQQVRIIGFzIHRoZSBwcmVmaXggZm9yIGluc3RhbGxpbmcgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcy4KK0RvY3VtZW50YXRpb24gYW5kIG90aGVyIGRhdGEgZmlsZXMgd2lsbCBzdGlsbCB1c2UgdGhlIHJlZ3VsYXIgcHJlZml4LgorCisgICBJbiBhZGRpdGlvbiwgaWYgeW91IHVzZSBhbiB1bnVzdWFsIGRpcmVjdG9yeSBsYXlvdXQgeW91IGNhbiBnaXZlCitvcHRpb25zIGxpa2UgYC0tYmluZGlyPVBBVEgnIHRvIHNwZWNpZnkgZGlmZmVyZW50IHZhbHVlcyBmb3IgcGFydGljdWxhcgora2luZHMgb2YgZmlsZXMuICBSdW4gYGNvbmZpZ3VyZSAtLWhlbHAnIGZvciBhIGxpc3Qgb2YgdGhlIGRpcmVjdG9yaWVzCit5b3UgY2FuIHNldCBhbmQgd2hhdCBraW5kcyBvZiBmaWxlcyBnbyBpbiB0aGVtLgorCisgICBJZiB0aGUgcGFja2FnZSBzdXBwb3J0cyBpdCwgeW91IGNhbiBjYXVzZSBwcm9ncmFtcyB0byBiZSBpbnN0YWxsZWQKK3dpdGggYW4gZXh0cmEgcHJlZml4IG9yIHN1ZmZpeCBvbiB0aGVpciBuYW1lcyBieSBnaXZpbmcgYGNvbmZpZ3VyZScgdGhlCitvcHRpb24gYC0tcHJvZ3JhbS1wcmVmaXg9UFJFRklYJyBvciBgLS1wcm9ncmFtLXN1ZmZpeD1TVUZGSVgnLgorCitPcHRpb25hbCBGZWF0dXJlcworPT09PT09PT09PT09PT09PT0KKworICAgU29tZSBwYWNrYWdlcyBwYXkgYXR0ZW50aW9uIHRvIGAtLWVuYWJsZS1GRUFUVVJFJyBvcHRpb25zIHRvCitgY29uZmlndXJlJywgd2hlcmUgRkVBVFVSRSBpbmRpY2F0ZXMgYW4gb3B0aW9uYWwgcGFydCBvZiB0aGUgcGFja2FnZS4KK1RoZXkgbWF5IGFsc28gcGF5IGF0dGVudGlvbiB0byBgLS13aXRoLVBBQ0tBR0UnIG9wdGlvbnMsIHdoZXJlIFBBQ0tBR0UKK2lzIHNvbWV0aGluZyBsaWtlIGBnbnUtYXMnIG9yIGB4JyAoZm9yIHRoZSBYIFdpbmRvdyBTeXN0ZW0pLiAgVGhlCitgUkVBRE1FJyBzaG91bGQgbWVudGlvbiBhbnkgYC0tZW5hYmxlLScgYW5kIGAtLXdpdGgtJyBvcHRpb25zIHRoYXQgdGhlCitwYWNrYWdlIHJlY29nbml6ZXMuCisKKyAgIEZvciBwYWNrYWdlcyB0aGF0IHVzZSB0aGUgWCBXaW5kb3cgU3lzdGVtLCBgY29uZmlndXJlJyBjYW4gdXN1YWxseQorZmluZCB0aGUgWCBpbmNsdWRlIGFuZCBsaWJyYXJ5IGZpbGVzIGF1dG9tYXRpY2FsbHksIGJ1dCBpZiBpdCBkb2Vzbid0LAoreW91IGNhbiB1c2UgdGhlIGBjb25maWd1cmUnIG9wdGlvbnMgYC0teC1pbmNsdWRlcz1ESVInIGFuZAorYC0teC1saWJyYXJpZXM9RElSJyB0byBzcGVjaWZ5IHRoZWlyIGxvY2F0aW9ucy4KKworU3BlY2lmeWluZyB0aGUgU3lzdGVtIFR5cGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgIFRoZXJlIG1heSBiZSBzb21lIGZlYXR1cmVzIGBjb25maWd1cmUnIGNhbiBub3QgZmlndXJlIG91dAorYXV0b21hdGljYWxseSwgYnV0IG5lZWRzIHRvIGRldGVybWluZSBieSB0aGUgdHlwZSBvZiBob3N0IHRoZSBwYWNrYWdlCit3aWxsIHJ1biBvbi4gIFVzdWFsbHkgYGNvbmZpZ3VyZScgY2FuIGZpZ3VyZSB0aGF0IG91dCwgYnV0IGlmIGl0IHByaW50cworYSBtZXNzYWdlIHNheWluZyBpdCBjYW4gbm90IGd1ZXNzIHRoZSBob3N0IHR5cGUsIGdpdmUgaXQgdGhlCitgLS1ob3N0PVRZUEUnIG9wdGlvbi4gIFRZUEUgY2FuIGVpdGhlciBiZSBhIHNob3J0IG5hbWUgZm9yIHRoZSBzeXN0ZW0KK3R5cGUsIHN1Y2ggYXMgYHN1bjQnLCBvciBhIGNhbm9uaWNhbCBuYW1lIHdpdGggdGhyZWUgZmllbGRzOgorICAgICBDUFUtQ09NUEFOWS1TWVNURU0KKworU2VlIHRoZSBmaWxlIGBjb25maWcuc3ViJyBmb3IgdGhlIHBvc3NpYmxlIHZhbHVlcyBvZiBlYWNoIGZpZWxkLiAgSWYKK2Bjb25maWcuc3ViJyBpc24ndCBpbmNsdWRlZCBpbiB0aGlzIHBhY2thZ2UsIHRoZW4gdGhpcyBwYWNrYWdlIGRvZXNuJ3QKK25lZWQgdG8ga25vdyB0aGUgaG9zdCB0eXBlLgorCisgICBJZiB5b3UgYXJlIGJ1aWxkaW5nIGNvbXBpbGVyIHRvb2xzIGZvciBjcm9zcy1jb21waWxpbmcsIHlvdSBjYW4gYWxzbwordXNlIHRoZSBgLS10YXJnZXQ9VFlQRScgb3B0aW9uIHRvIHNlbGVjdCB0aGUgdHlwZSBvZiBzeXN0ZW0gdGhleSB3aWxsCitwcm9kdWNlIGNvZGUgZm9yIGFuZCB0aGUgYC0tYnVpbGQ9VFlQRScgb3B0aW9uIHRvIHNlbGVjdCB0aGUgdHlwZSBvZgorc3lzdGVtIG9uIHdoaWNoIHlvdSBhcmUgY29tcGlsaW5nIHRoZSBwYWNrYWdlLgorCitTaGFyaW5nIERlZmF1bHRzCis9PT09PT09PT09PT09PT09CisKKyAgIElmIHlvdSB3YW50IHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgYGNvbmZpZ3VyZScgc2NyaXB0cyB0byBzaGFyZSwKK3lvdSBjYW4gY3JlYXRlIGEgc2l0ZSBzaGVsbCBzY3JpcHQgY2FsbGVkIGBjb25maWcuc2l0ZScgdGhhdCBnaXZlcworZGVmYXVsdCB2YWx1ZXMgZm9yIHZhcmlhYmxlcyBsaWtlIGBDQycsIGBjYWNoZV9maWxlJywgYW5kIGBwcmVmaXgnLgorYGNvbmZpZ3VyZScgbG9va3MgZm9yIGBQUkVGSVgvc2hhcmUvY29uZmlnLnNpdGUnIGlmIGl0IGV4aXN0cywgdGhlbgorYFBSRUZJWC9ldGMvY29uZmlnLnNpdGUnIGlmIGl0IGV4aXN0cy4gIE9yLCB5b3UgY2FuIHNldCB0aGUKK2BDT05GSUdfU0lURScgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBzaXRlIHNjcmlwdC4KK0Egd2FybmluZzogbm90IGFsbCBgY29uZmlndXJlJyBzY3JpcHRzIGxvb2sgZm9yIGEgc2l0ZSBzY3JpcHQuCisKK09wZXJhdGlvbiBDb250cm9scworPT09PT09PT09PT09PT09PT09CisKKyAgIGBjb25maWd1cmUnIHJlY29nbml6ZXMgdGhlIGZvbGxvd2luZyBvcHRpb25zIHRvIGNvbnRyb2wgaG93IGl0CitvcGVyYXRlcy4KKworYC0tY2FjaGUtZmlsZT1GSUxFJworICAgICBVc2UgYW5kIHNhdmUgdGhlIHJlc3VsdHMgb2YgdGhlIHRlc3RzIGluIEZJTEUgaW5zdGVhZCBvZgorICAgICBgLi9jb25maWcuY2FjaGUnLiAgU2V0IEZJTEUgdG8gYC9kZXYvbnVsbCcgdG8gZGlzYWJsZSBjYWNoaW5nLCBmb3IKKyAgICAgZGVidWdnaW5nIGBjb25maWd1cmUnLgorCitgLS1oZWxwJworICAgICBQcmludCBhIHN1bW1hcnkgb2YgdGhlIG9wdGlvbnMgdG8gYGNvbmZpZ3VyZScsIGFuZCBleGl0LgorCitgLS1xdWlldCcKK2AtLXNpbGVudCcKK2AtcScKKyAgICAgRG8gbm90IHByaW50IG1lc3NhZ2VzIHNheWluZyB3aGljaCBjaGVja3MgYXJlIGJlaW5nIG1hZGUuICBUbworICAgICBzdXBwcmVzcyBhbGwgbm9ybWFsIG91dHB1dCwgcmVkaXJlY3QgaXQgdG8gYC9kZXYvbnVsbCcgKGFueSBlcnJvcgorICAgICBtZXNzYWdlcyB3aWxsIHN0aWxsIGJlIHNob3duKS4KKworYC0tc3JjZGlyPURJUicKKyAgICAgTG9vayBmb3IgdGhlIHBhY2thZ2UncyBzb3VyY2UgY29kZSBpbiBkaXJlY3RvcnkgRElSLiAgVXN1YWxseQorICAgICBgY29uZmlndXJlJyBjYW4gZGV0ZXJtaW5lIHRoYXQgZGlyZWN0b3J5IGF1dG9tYXRpY2FsbHkuCisKK2AtLXZlcnNpb24nCisgICAgIFByaW50IHRoZSB2ZXJzaW9uIG9mIEF1dG9jb25mIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGBjb25maWd1cmUnCisgICAgIHNjcmlwdCwgYW5kIGV4aXQuCisKK2Bjb25maWd1cmUnIGFsc28gYWNjZXB0cyBzb21lIG90aGVyLCBub3Qgd2lkZWx5IHVzZWZ1bCwgb3B0aW9ucy4KZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI3ZjM0YQotLS0gL2Rldi9udWxsCisrKyBiL01BSU5UQUlORVJTCkBAIC0wLDAgKzEsMTEgQEAKK0dTdHJlYW1lciBpcyBjdXJyZW50bHkgbWFpbnRhaW5lZCBieSB0aGUgY29uc2Vuc3VzIG9mIGEgbnVtYmVyCitvZiBwZW9wbGUsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOgorCisgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgorIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KKworTWFpbnRhaW5lci1yZWxhdGVkIGlzc3VlcyBzaG91bGQgYmUgYWRkcmVzc2VkIHRvOgorCisgIGdzdHJlYW1lci1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZkZGM0YQotLS0gL2Rldi9udWxsCisrKyBiL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMjAzIEBACitESVNUQ0hFQ0tfQ09ORklHVVJFX0ZMQUdTPS0tZW5hYmxlLWd0ay1kb2MgLS1lbmFibGUtZG9jYm9vaworCisjIG5vdGU6IGtlZXAgaW4gc3luYyB3aXRoIGNvbmZpZ3VyZS5hYworQUNMT0NBTF9BTUZMQUdTID0gLUkgbTQgLUkgY29tbW9uL200CisKK2FjbG9jYWxkaXIgPSAkKGRhdGFkaXIpL2FjbG9jYWwKK2FjbG9jYWxfREFUQSA9IGdzdC1lbGVtZW50LWNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubTQKKworU1VCRElSUyA9IHBrZ2NvbmZpZyBcCisJZ3N0IGxpYnMgcGx1Z2lucyB0b29scyB0ZXN0cyBcCisJZG9jcyBcCisJcG8gXAorCW00IFwKKwljb21tb24KKworIyBUaGVzZSBhcmUgYWxsIHRoZSBwb3NzaWJsZSBzdWJkaXJzCitESVNUX1NVQkRJUlMgPSBwa2djb25maWcgXAorCWdzdCBsaWJzIHBsdWdpbnMgdG9vbHMgdGVzdHMgXAorCWRvY3MgXAorCXBvIFwKKwltNCBcCisJY29tbW9uCisKKyMgaW5jbHVkZSBiZWZvcmUgRVhUUkFfRElTVCBmb3Igd2luMzIgYXNzaWdubWVudAoraW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbW1vbi93aW4zMi5tYWsKKworRVhUUkFfRElTVCA9IFwKKwlnc3RyZWFtZXIuc3BlYyBnc3RyZWFtZXIuc3BlYy5pbiBcCisJZ3N0LWVsZW1lbnQtY2hlY2subTQuaW4gXAorCWNvbmZpZ3VyZS5hYyBhdXRvZ2VuLnNoIGRlcGNvbXAgXAorCU1BSU5UQUlORVJTIEFCT1VULU5MUyBSRUxFQVNFIGdzdHJlYW1lci5kb2FwIFwKKwlzY3JpcHRzL2dzdC11bmluc3RhbGxlZCBcCisJJCh3aW4zMikKKworQ0xFQU5GSUxFUyA9IGdzdC1lbGVtZW50LWNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubTQKKworRElTVENMRUFORklMRVMgPSBfc3RkaW50LmgKKworaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9yZWxlYXNlLm1haworaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9wby5tYWsKKworaWYgR1NUX0dDT1ZfRU5BQkxFRAorY2xlYW4tZ2NvdjoKKwlmaW5kIC1uYW1lICIqLmRhIiAtbyAtbmFtZSAiKi5nY292IiB8IHhhcmdzIHJtIHx8IHRydWUKKworY2xlYW4tYmJnOgorCWZpbmQgLW5hbWUgIiouYmJnIiAtbyAtbmFtZSAiKi5iYiIgfCB4YXJncyBybSB8fCB0cnVlCisKK0dDT1ZfRElSUz1nc3QgbGlicworCisjIyAuUEhPTlkgc28gaXQgYWx3YXlzIHJlYnVpbGRzIGl0CisuUEhPTlk6IGNvdmVyYWdlLXJlcG9ydC50eHQKKworY292ZXJhZ2UtcmVwb3J0LnR4dDoKKwlCQkdfRklMRVM9YGZpbmQgJChHQ09WX0RJUlMpIC1uYW1lICIqLmJiZyJgIDsJCQkgIFwKKwlDX0ZJTEVTPSA7CQkJCQkJCSAgXAorCWZvciBGIGluICQkQkJHX0ZJTEVTIDsgZG8JCQkJCSAgXAorCQlGX25vbGlicz1gZWNobyAkJEYgfCBzZWQgLWUgJ3MvLmxpYnNcLy8vZydgIDsJCSAgXAorCQlDPWBlY2hvICQkRl9ub2xpYnMgfCBzZWQgLWUgJ3MvLmJiZy8uYy9nJ2AgOwkJICBcCisJCUI9YGJhc2VuYW1lICQkRiAuYmJnYCA7CQkJCQkgIFwKKwkJRD1gZGlybmFtZSAkJEZgIDsJCQkJCSAgXAorCQlEQT1gZWNobyAkJEYgfCBzZWQgLWUgJ3MvLmJiZy8uZGEvZydgIDsJCQkgIFwKKwkJREFfbGlicz1gZWNobyAkJEQvLmxpYnMvJCRCLy5kYWAgOwkJCSAgXAorCQlpZiB0ZXN0IC1lICQkREEgfHwgdGVzdCAtZSAkJERBX2xpYnM7IHRoZW4JCSAgXAorCQkJQ19GSUxFUz0iJCRDX0ZJTEVTICQkQyIgOwkJCSAgXAorCQlmaSA7CQkJCQkJCSAgXAorCWRvbmUgOwkJCQkJCQkJICBcCisJZWNobyAkJENfRklMRVMgOwkJCQkJCSAgXAorCSQodG9wX2J1aWxkZGlyKS90ZXN0c3VpdGUvZGVjb2RlLWdjb3YgLS1yZXBvcnQgJCRDX0ZJTEVTID4gY292ZXJhZ2UtcmVwb3J0LnR4dAorCitjaGVjay1jb3ZlcmFnZTogY2xlYW4tZ2NvdiBhbGwgY2hlY2sgY292ZXJhZ2UtcmVwb3J0LnR4dAorCWNhdCBjb3ZlcmFnZS1yZXBvcnQudHh0CisKK2Vsc2UKK2NvdmVyYWdlLXJlcG9ydC50eHQ6CisJZWNobyAiTmVlZCB0byByZWNvbmZpZ3VyZSB3aXRoIC0tZW5hYmxlLWdjb3YiCisKK2NoZWNrLWNvdmVyYWdlOgorCWVjaG8gIk5lZWQgdG8gcmVjb25maWd1cmUgd2l0aCAtLWVuYWJsZS1nY292IgorZW5kaWYKKworaWYgSEFWRV9DSEVDSworY2hlY2stdmFsZ3JpbmQ6CisJY2QgdGVzdHMvY2hlY2sgJiYgbWFrZSBjaGVjay12YWxncmluZAorCitjaGVjay10b3J0dXJlOgorCWNkIHRlc3RzL2NoZWNrICYmIG1ha2UgdG9ydHVyZQorZWxzZQorY2hlY2stdmFsZ3JpbmQ6CisJZWNobyAiJ2NoZWNrJyBsaWJyYXJ5IG5vdCBpbnN0YWxsZWQsIHNraXBwaW5nIgorCitjaGVjay10b3J0dXJlOgorCWVjaG8gIidjaGVjaycgbGlicmFyeSBub3QgaW5zdGFsbGVkLCBza2lwcGluZyIKK2VuZGlmCisKKyMgRklYTUU6IHRoaXMgdGFyZ2V0IHNob3VsZCBiZSBydW4gZXZlcnkgdGltZSB3ZSBkbyAibWFrZSByZWxlYXNlIgorIyBmaW5kIGEgd2F5IG9mIGF1dG9tYXRpbmcgdGhhdAord2luMzItdXBkYXRlOgorCWZvciBmIGluIGdzdHZlcnNpb24uaCBnc3RlbnVtdHlwZXMuYyBnc3RlbnVtdHlwZXMuaCBnc3RtYXJzaGFsLmMgZ3N0bWFyc2hhbC5oOyBkbyBcCisJCWNwICQodG9wX2J1aWxkZGlyKS9nc3QvJCRmIHdpbjMyL2NvbW1vbjsgZG9uZQorCSQodG9wX3NyY2RpcikvdG9vbHMvZ3N0LWluZGVudCB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmMKKwkkKHRvcF9zcmNkaXIpL3Rvb2xzL2dzdC1pbmRlbnQgd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jCisJJCh0b3Bfc3JjZGlyKS90b29scy9nc3QtaW5kZW50IHdpbjMyL2NvbW1vbi9nc3RtYXJzaGFsLmMKKwkkKHRvcF9zcmNkaXIpL3Rvb2xzL2dzdC1pbmRlbnQgd2luMzIvY29tbW9uL2dzdG1hcnNoYWwuYworCWNwICQodG9wX2J1aWxkZGlyKS93aW4zMi9jb21tb24vY29uZmlnLmgtbmV3IFwKKwkJJCh0b3Bfc3JjZGlyKS93aW4zMi9jb21tb24vY29uZmlnLmgKKworY2hlY2stZW51bS1nZXR0eXBlczogJCh0b3BfYnVpbGRkaXIpL2dzdC9nc3RlbnVtdHlwZXMuaAorCUBlY2hvICdDaGVja2luZyBpZiBhbGwgZW51bSBhbmQgZmxhZyBfZ2V0X3R5cGUoKSBmdW5jcyBhcmUgaW5pdGVkIGluIGdzdF9pbml0KCknOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlGVU5DUz1gZ3JlcCAnX2dldF90eXBlICgnIGdzdC9nc3RlbnVtdHlwZXMuaCB8IHNlZCAtZSAncy9eLipnc3RfL2dzdF8vJyAtZSAncy9fZ2V0X3R5cGUuKiQkL19nZXRfdHlwZS8nYDtcCisJTUlTU0lOR19GVU5DUz0nJzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWZvciBmIGluICQkRlVOQ1M7IGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgIElOSVRfTElORT1gZ3JlcCAkJGYgJCh0b3Bfc3JjZGlyKS9nc3QvKi5jIHwgZ3JlcCBnX3R5cGVfY2xhc3NfcmVmYDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICBpZiB0ZXN0ICJ4JCRJTklUX0xJTkUiID0gIngiOyB0aGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICBNSVNTSU5HX0ZVTkNTPSIkJE1JU1NJTkdfRlVOQ1MgJCRmIjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgIGZpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZG9uZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIHRlc3QgIngkJE1JU1NJTkdfRlVOQ1MiICE9ICJ4IjsgdGhlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgIGVjaG8gIkZJWE1FOiBwbGVhc2UgYWRkIHRvIHRoZSBmb2xsb3dpbmcgdG8gZ3N0L2dzdC5jIGluaXRfcG9zdCgpOiI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICBmb3IgZiBpbiAkJE1JU1NJTkdfRlVOQ1M7IGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICBlY2hvICIgIGdfdHlwZV9jbGFzc19yZWYgKCQkZiAoKSk7IjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgIGRvbmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICBleGl0IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWZpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwllY2hvICdDaGVja2luZyBpZiBhbGwgZW51bSBhbmQgZmxhZyBfZ2V0X3R5cGUoKSBmdW5jcyBhcmUgZGVpbml0ZWQgaW4gZ3N0X2RlaW5pdCgpJzsgICAgICAgICAgICAgICAgICAgICBcCisJTUlTU0lOR19GVU5DUz0nJzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWZvciBmIGluICQkRlVOQ1M7IGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgIElOSVRfTElORT1gZ3JlcCAkJGYgJCh0b3Bfc3JjZGlyKS9nc3QvKi5jIHwgZ3JlcCBnX3R5cGVfY2xhc3NfdW5yZWZgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICBpZiB0ZXN0ICJ4JCRJTklUX0xJTkUiID0gIngiOyB0aGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICBNSVNTSU5HX0ZVTkNTPSIkJE1JU1NJTkdfRlVOQ1MgJCRmIjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgIGZpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZG9uZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIHRlc3QgIngkJE1JU1NJTkdfRlVOQ1MiICE9ICJ4IjsgdGhlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgIGVjaG8gIkZJWE1FOiBwbGVhc2UgYWRkIHRvIHRoZSBmb2xsb3dpbmcgdG8gZ3N0L2dzdC5jIGdzdF9kZWluaXQoKToiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICBmb3IgZiBpbiAkJE1JU1NJTkdfRlVOQ1M7IGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICBlY2hvICIgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKCQkZiAoKSkpOyI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgIGRvbmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICBleGl0IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWZpCisKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb21tb24vY292ZXJhZ2UvbGNvdi5tYWsKKworIyBEbyBub3QgcnVuIHRoZSBjaGVjay1leHBvcnRzIHRlc3QgaW4gY2FzZSBhbnkgb3B0aW9uIHdoaWNoIGNhdXNlcyB0aGUgQVBJIHRvCisjIGNoYW5nZSBoYXMgYmVlbiB1c2VkCitpZiAhR1NUX0RJU0FCTEVfUkVHSVNUUlkKK2lmICFHU1RfRElTQUJMRV9UUkFDRQorQ0hFQ0tfRVhQT1JUUyA9IGNoZWNrLWV4cG9ydHMKK2VuZGlmCitlbmRpZgorCitjaGVjazogJChDSEVDS19FWFBPUlRTKSBjaGVjay1lbnVtLWdldHR5cGVzCisKK2dzdC1lbGVtZW50LWNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubTQ6IGdzdC1lbGVtZW50LWNoZWNrLm00CisJJChBTV9WX0dFTiljcCBnc3QtZWxlbWVudC1jaGVjay5tNCBnc3QtZWxlbWVudC1jaGVjay1AR1NUX01BSk9STUlOT1JALm00CisKKyMgY3J1ZnQ6IHBsdWdpbnMgdGhhdCBoYXZlIGJlZW4gbWVyZ2VkIG9yIG1vdmVkIG9yIHJlbmFtZWQKKworQ1JVRlRfRklMRVMgPSBcCisJJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9zaGF2ZSBcCisJJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9zaGF2ZS1saWJ0b29sIFwKKwkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2NvZGVzZXQubTQgXAorCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvZ2V0dGV4dC5tNCBcCisJJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9nbGliYzIubTQgXAorCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvZ2xpYmMyMS5tNCBcCisJJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9pY29udi5tNCBcCisJJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9pbnRkaXYwLm00IFwKKwkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2ludGwubTQgXAorCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvaW50bGRpci5tNCBcCisJJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9pbnRsbWFjb3N4Lm00IFwKKwkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2ludG1heC5tNCBcCisJJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9pbnR0eXBlcy1wcmkubTQgXAorCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvaW50dHlwZXNfaC5tNCBcCisJJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9sY21lc3NhZ2UubTQgXAorCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvbGliLWxkLm00IFwKKwkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2xpYi1wcmVmaXgubTQgXAorCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvbGlidG9vbC5tNCBcCisJJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9sb2NrLm00IFwKKwkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2xvbmdsb25nLm00IFwKKwkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2x0b3B0aW9ucy5tNCBcCisJJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2x0dmVyc2lvbi5tNCBcCisJJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9ubHMubTQgXAorCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvcG8ubTQgXAorCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvcHJpbnRmLXBvc2l4Lm00IFwKKwkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L3Byb2d0ZXN0Lm00IFwKKwkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L3NpemVfbWF4Lm00IFwKKwkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L3N0ZGludF9oLm00IFwKKwkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L3VpbnRtYXhfdC5tNCBcCisJJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC92aXNpYmlsaXR5Lm00IFwKKwkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L3djaGFyX3QubTQgXAorCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvd2ludF90Lm00IFwKKwkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L3hzaXplLm00CisKK0NSVUZUX0RJUlMgPSBcCisJJCh0b3BfYnVpbGRkaXIpL3Rlc3RzL2V4YW1wbGVzL3htbCBcCisJJCh0b3BfYnVpbGRkaXIpL2dzdC90bXAtaW50cm9zcGVjdCogXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC8qL3RtcC1pbnRyb3NwZWN0KgorCitpbmNsdWRlICQodG9wX3NyY2RpcikvY29tbW9uL2NydWZ0Lm1haworCithbGwtbG9jYWw6IGdzdC1lbGVtZW50LWNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubTQgY2hlY2stY3J1ZnQKZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg1ZDQ0OQotLS0gL2Rldi9udWxsCisrKyBiL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMTM0MiBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4xIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIyB2YXJpb3VzIHRlc3RzIHRvIG1ha2Ugc3VyZSB3ZSBkaXN0IHRoZSB3aW4zMiBzdHVmZiAoZm9yIE1TVkMgYnVpbGRzKSByaWdodAorCisjIGluY2x1ZGUgdGhpcyBzbmlwcGV0IHRvIGFkZCBhIGNvbW1vbiByZWxlYXNlOiB0YXJnZXQgYnkgdXNpbmcKKyMgaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9yZWxlYXNlLm1haworCisjIGNoZWNrcyBmb3IgbGVmdC1vdmVyIGZpbGVzIGluIHRoZSAodXN1YWxseSB1bmluc3RhbGxlZCkgdHJlZSwgaWUuIGZvcgorIyBzdHVmZiB0aGF0IGJlc3QgYmUgZGVsZXRlZCB0byBhdm9pZCBwcm9ibGVtcyBsaWtlIGhhdmluZyBvbGQgcGx1Z2luIGJpbmFyaWVzCisjIGx5aW5nIGFyb3VuZC4KKyMKKyMgc2V0IENSVUZUX0ZJTEVTIGFuZC9vciBDUlVGVF9ESVJTIGluIHlvdXIgTWFrZWZpbGUuYW0gd2hlbiB5b3UgaW5jbHVkZSB0aGlzCisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK0RJU1RfQ09NTU9OID0gUkVBRE1FICQoYW1fX2NvbmZpZ3VyZV9kZXBzKSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gXAorCSQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHNyY2RpcikvY29uZmlnLmguaW4gXAorCSQoc3JjZGlyKS9nc3QtZWxlbWVudC1jaGVjay5tNC5pbiAkKHNyY2RpcikvZ3N0cmVhbWVyLnNwZWMuaW4gXAorCSQoc3JjZGlyKS9zdGFtcC5oLmluICQodG9wX3NyY2RpcikvY29tbW9uL2NvdmVyYWdlL2xjb3YubWFrIFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9jcnVmdC5tYWsgJCh0b3Bfc3JjZGlyKS9jb21tb24vcG8ubWFrIFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9yZWxlYXNlLm1hayBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vd2luMzIubWFrICQodG9wX3NyY2RpcikvY29uZmlndXJlIFwKKwlBQk9VVC1OTFMgQVVUSE9SUyBDT1BZSU5HIENoYW5nZUxvZyBJTlNUQUxMIE5FV1MgVE9ETyBjb21waWxlIFwKKwljb25maWcuZ3Vlc3MgY29uZmlnLnJwYXRoIGNvbmZpZy5zdWIgZGVwY29tcCBpbnN0YWxsLXNoIFwKKwlsdG1haW4uc2ggbWlzc2luZworc3ViZGlyID0gLgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXB5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtc2NydWItaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCithbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUyA9IGNvbmZpZy5zdGF0dXMgY29uZmlnLmNhY2hlIGNvbmZpZy5sb2cgXAorIGNvbmZpZ3VyZS5saW5lbm8gY29uZmlnLnN0YXR1cy5saW5lbm8KK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9IHN0YW1wLmggZ3N0LWVsZW1lbnQtY2hlY2subTQgZ3N0cmVhbWVyLnNwZWMKK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOXyQoVikpCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF8kKFYpKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X2F0XzAgPSBACitTT1VSQ0VTID0KK0RJU1RfU09VUkNFUyA9CitSRUNVUlNJVkVfVEFSR0VUUyA9IGFsbC1yZWN1cnNpdmUgY2hlY2stcmVjdXJzaXZlIGR2aS1yZWN1cnNpdmUgXAorCWh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIGluc3RhbGwtZGF0YS1yZWN1cnNpdmUgXAorCWluc3RhbGwtZHZpLXJlY3Vyc2l2ZSBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWh0bWwtcmVjdXJzaXZlIGluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAorCWluc3RhbGwtcGRmLXJlY3Vyc2l2ZSBpbnN0YWxsLXBzLXJlY3Vyc2l2ZSBpbnN0YWxsLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBpbnN0YWxsZGlycy1yZWN1cnNpdmUgcGRmLXJlY3Vyc2l2ZSBcCisJcHMtcmVjdXJzaXZlIHVuaW5zdGFsbC1yZWN1cnNpdmUKK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxfbWF4ID0gNDAKK2FtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCisgIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKK2FtX19ub2Jhc2Vfc3RyaXAgPSBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgorYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCisgICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAorICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAorICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKK2FtX19iYXNlX2xpc3QgPSBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKK2FtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChhY2xvY2FsZGlyKSIKK0RBVEEgPSAkKGFjbG9jYWxfREFUQSkKK1JFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTID0gbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZQlcCisgIGRpc3RjbGVhbi1yZWN1cnNpdmUgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKK0FNX1JFQ1VSU0lWRV9UQVJHRVRTID0gJChSRUNVUlNJVkVfVEFSR0VUUzotcmVjdXJzaXZlPSkgXAorCSQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFM6LXJlY3Vyc2l2ZT0pIHRhZ3MgVEFHUyBjdGFncyBDVEFHUyBcCisJZGlzdGRpciBkaXN0IGRpc3QtYWxsIGRpc3RjaGVjaworRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK2Rpc3RkaXIgPSAkKFBBQ0tBR0UpLSQoVkVSU0lPTikKK3RvcF9kaXN0ZGlyID0gJChkaXN0ZGlyKQorYW1fX3JlbW92ZV9kaXN0ZGlyID0gXAorICB7IHRlc3QgISAtZCAiJChkaXN0ZGlyKSIgXAorICAgIHx8IHsgZmluZCAiJChkaXN0ZGlyKSIgLXR5cGUgZCAhIC1wZXJtIC0yMDAgLWV4ZWMgY2htb2QgdSt3IHt9ICc7JyBcCisgICAgICAgICAmJiBybSAtZnIgIiQoZGlzdGRpcikiOyB9OyB9CithbV9fcmVsYXRpdml6ZSA9IFwKKyAgZGlyMD1gcHdkYDsgXAorICBzZWRfZmlyc3Q9J3MsXlwoW14vXSpcKS8uKiQkLFwxLCc7IFwKKyAgc2VkX3Jlc3Q9J3MsXlteL10qLyosLCc7IFwKKyAgc2VkX2xhc3Q9J3MsXi4qL1woW14vXSpcKSQkLFwxLCc7IFwKKyAgc2VkX2J1dGxhc3Q9J3MsLypbXi9dKiQkLCwnOyBcCisgIHdoaWxlIHRlc3QgLW4gIiQkZGlyMSI7IGRvIFwKKyAgICBmaXJzdD1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAorICAgIGlmIHRlc3QgIiQkZmlyc3QiICE9ICIuIjsgdGhlbiBcCisgICAgICBpZiB0ZXN0ICIkJGZpcnN0IiA9ICIuLiI7IHRoZW4gXAorICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9sYXN0ImAvIiQkZGlyMiI7IFwKKyAgICAgICAgZGlyMD1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfYnV0bGFzdCJgOyBcCisgICAgICBlbHNlIFwKKyAgICAgICAgZmlyc3QyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCisgICAgICAgIGlmIHRlc3QgIiQkZmlyc3QyIiA9ICIkJGZpcnN0IjsgdGhlbiBcCisgICAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCisgICAgICAgIGVsc2UgXAorICAgICAgICAgIGRpcjI9Ii4uLyQkZGlyMiI7IFwKKyAgICAgICAgZmk7IFwKKyAgICAgICAgZGlyMD0iJCRkaXIwIi8iJCRmaXJzdCI7IFwKKyAgICAgIGZpOyBcCisgICAgZmk7IFwKKyAgICBkaXIxPWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKKyAgZG9uZTsgXAorICByZWxkaXI9IiQkZGlyMiIKK0RJU1RfQVJDSElWRVMgPSAkKGRpc3RkaXIpLnRhci5neiAkKGRpc3RkaXIpLnRhci5iejIKK0daSVBfRU5WID0gLS1iZXN0CitkaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzID0gZmluZCAuIC10eXBlIGYgLXByaW50CitkaXN0Y2xlYW5jaGVja19saXN0ZmlsZXMgPSBmaW5kIC4gLXR5cGUgZiAtcHJpbnQKK0FDTE9DQUwgPSBAQUNMT0NBTEAKKworIyBub3RlOiBrZWVwIGluIHN5bmMgd2l0aCBjb25maWd1cmUuYWMKK0FDTE9DQUxfQU1GTEFHUyA9IC1JIG00IC1JIGNvbW1vbi9tNAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVMgPSBAQVNACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JJU09OX1BBVEggPSBAQklTT05fUEFUSEAKK0NBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKK0NBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACitDQyA9IEBDQ0AKK0NDQVMgPSBAQ0NBU0AKK0NDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAorQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAorQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAorQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAorQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRBRElSID0gQERBVEFESVJACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACitETExUT09MID0gQERMTFRPT0xACitET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAorRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKK0VYRUVYVCA9IEBFWEVFWFRACitGRkxBR1MgPSBARkZMQUdTQAorRkdSRVAgPSBARkdSRVBACitGTEVYX1BBVEggPSBARkxFWF9QQVRIQAorR0NPViA9IEBHQ09WQAorR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACitHQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAorR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACitHTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKK0dMSUJfTElCUyA9IEBHTElCX0xJQlNACitHTElCX09OTFlfQ0ZMQUdTID0gQEdMSUJfT05MWV9DRkxBR1NACitHTElCX09OTFlfTElCUyA9IEBHTElCX09OTFlfTElCU0AKK0dMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAorR0xJQl9SRVEgPSBAR0xJQl9SRVFACitHTVBfTElCUyA9IEBHTVBfTElCU0AKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAorR1JFUCA9IEBHUkVQQAorR1NMX0xJQlMgPSBAR1NMX0xJQlNACitHU1RfQUdFID0gQEdTVF9BR0VACitHU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKK0dTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKK0dTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACitHU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAorR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACitHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FQAorR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAorR1NUX0RJU0FCTEVfTkVUX0RFRklORSA9IEBHU1RfRElTQUJMRV9ORVRfREVGSU5FQAorR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKK0dTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACitHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACitHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAorR1NUX0RJU0FCTEVfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1RSQUNFX0RFRklORUAKK0dTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkUgPSBAR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORUAKK0dTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkUgPSBAR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORUAKK0dTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FID0gQEdTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FQAorR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACitHU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKK0dTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACitHU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKK0dTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAorR1NUX01BSk9STUlOT1IgPSBAR1NUX01BSk9STUlOT1JACitHU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKK0dTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKK0dTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACitHU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKK0dTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKK0dTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKK0dTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACitHU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACitHU1RfUEtHX0RFUFMgPSBAR1NUX1BLR19ERVBTQAorR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKK0dTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgPSBAR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFREAKK0dTVF9QUklOVEZfRVhURU5TSU9OX1BPSU5URVJfRk9STUFUX0RFRklORSA9IEBHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkVACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FQAorR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAorR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKK0dTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OX0RFRklORSA9IEBHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkVACitHVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAorSEFWRV9ET0NCT09LMkhUTUwgPSBASEFWRV9ET0NCT09LMkhUTUxACitIQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAorSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAorSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAorSEFWRV9GSUcyREVWID0gQEhBVkVfRklHMkRFVkAKK0hBVkVfR01QID0gQEhBVkVfR01QQAorSEFWRV9HU0wgPSBASEFWRV9HU0xACitIQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAorSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAorSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKK0hBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAorSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKK0hPU1RfQ1BVID0gQEhPU1RfQ1BVQAorSFRNTF9ESVIgPSBASFRNTF9ESVJACitJTkVUX0FUT05fTElCUyA9IEBJTkVUX0FUT05fTElCU0AKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACitJTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKK0lOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKK0lOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKK0lOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAorSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKK0lOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKK0lOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACitJTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJESVIgPSBATElCRElSQAorTElCSUNPTlYgPSBATElCSUNPTlZACitMSUJJTlRMID0gQExJQklOVExACitMSUJNID0gQExJQk1ACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMT0NBTEVESVIgPSBATE9DQUxFRElSQAorTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAorTFRMSUJJTlRMID0gQExUTElCSU5UTEAKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUlOVCA9IEBNQUlOVEAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKK01TR01FUkdFID0gQE1TR01FUkdFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKK1BBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACitQQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAorUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACitQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BMVUdJTkRJUiA9IEBQTFVHSU5ESVJACitQT1NVQiA9IEBQT1NVQkAKK1BST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAorUFlUSE9OID0gQFBZVEhPTkAKK1BZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACitQWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAorUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAorUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1ZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACitWQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACitWQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACitWRVJTSU9OID0gQFZFUlNJT05ACitXQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKK1dJTjMyX0xJQlMgPSBAV0lOMzJfTElCU0AKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKK1hHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKK1hNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAorWFNMVFBST0MgPSBAWFNMVFBST0NACitYU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3BrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACitwa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAorcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3B5ZXhlY2RpciA9IEBweWV4ZWNkaXJACitweXRob25kaXIgPSBAcHl0aG9uZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitESVNUQ0hFQ0tfQ09ORklHVVJFX0ZMQUdTID0gLS1lbmFibGUtZ3RrLWRvYyAtLWVuYWJsZS1kb2Nib29rCithY2xvY2FsZGlyID0gJChkYXRhZGlyKS9hY2xvY2FsCithY2xvY2FsX0RBVEEgPSBnc3QtZWxlbWVudC1jaGVjay1AR1NUX01BSk9STUlOT1JALm00CitTVUJESVJTID0gcGtnY29uZmlnIFwKKwlnc3QgbGlicyBwbHVnaW5zIHRvb2xzIHRlc3RzIFwKKwlkb2NzIFwKKwlwbyBcCisJbTQgXAorCWNvbW1vbgorCisKKyMgVGhlc2UgYXJlIGFsbCB0aGUgcG9zc2libGUgc3ViZGlycworRElTVF9TVUJESVJTID0gcGtnY29uZmlnIFwKKwlnc3QgbGlicyBwbHVnaW5zIHRvb2xzIHRlc3RzIFwKKwlkb2NzIFwKKwlwbyBcCisJbTQgXAorCWNvbW1vbgorCisKKyMgdGhlIE1BTklGRVNUIGNvbnRhaW5zIGFsbCB3aW4zMiByZWxhdGVkIGZpbGVzIHRoYXQgc2hvdWxkIGJlIGRpc3RlZAord2luMzIgPSAkKHNoZWxsIGNhdCAkKHRvcF9zcmNkaXIpL3dpbjMyL01BTklGRVNUKQorCisjIHdpbGRjYXJkIGlzIGFwcGFyZW50bHkgbm90IHBvcnRhYmxlIHRvIG90aGVyIG1ha2VzLCBoZW5jZSB0aGUgdXNlIG9mIGZpbmQKKyMgdGhlc2UgYXJlIGxpYnJhcnkgLmRlZiBmaWxlcyB3aXRoIHRoZSBzeW1ib2xzIHRvIGV4cG9ydAord2luMzJkZWZzID0gJChzaGVsbCBmaW5kICQodG9wX3NyY2Rpcikvd2luMzIvY29tbW9uIC1uYW1lICcqLmRlZicpCisKKyMgd2lsZGNhcmQgaXMgYXBwYXJlbnRseSBub3QgcG9ydGFibGUgdG8gb3RoZXIgbWFrZXMsIGhlbmNlIHRoZSB1c2Ugb2YgZmluZAorIyB0aGVzZSBhcmUgZmlsZXMgdGhhdCBuZWVkIHRvIGJlIGRpc3RlZCB3aXRoIENSTEYgbGluZSBlbmRpbmdzOgord2luMzJjcmxmID0gJChzaGVsbCBmaW5kICQodG9wX3NyY2Rpcikvd2luMzIgLW5hbWUgJyouZHN3JyAtbyAtbmFtZSAnKi5kc3AnKQorCisjIGluY2x1ZGUgYmVmb3JlIEVYVFJBX0RJU1QgZm9yIHdpbjMyIGFzc2lnbm1lbnQKK0VYVFJBX0RJU1QgPSBcCisJZ3N0cmVhbWVyLnNwZWMgZ3N0cmVhbWVyLnNwZWMuaW4gXAorCWdzdC1lbGVtZW50LWNoZWNrLm00LmluIFwKKwljb25maWd1cmUuYWMgYXV0b2dlbi5zaCBkZXBjb21wIFwKKwlNQUlOVEFJTkVSUyBBQk9VVC1OTFMgUkVMRUFTRSBnc3RyZWFtZXIuZG9hcCBcCisJc2NyaXB0cy9nc3QtdW5pbnN0YWxsZWQgXAorCSQod2luMzIpCisKK0NMRUFORklMRVMgPSBnc3QtZWxlbWVudC1jaGVjay1AR1NUX01BSk9STUlOT1JALm00CitESVNUQ0xFQU5GSUxFUyA9IF9zdGRpbnQuaAorCisjIG1ha2UgYnoyIGFzIHdlbGwKK0FVVE9NQUtFX09QVElPTlMgPSBkaXN0LWJ6aXAyCitAR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQEdDT1ZfRElSUyA9IGdzdCBsaWJzCisKKyMgRG8gbm90IHJ1biB0aGUgY2hlY2stZXhwb3J0cyB0ZXN0IGluIGNhc2UgYW55IG9wdGlvbiB3aGljaCBjYXVzZXMgdGhlIEFQSSB0bworIyBjaGFuZ2UgaGFzIGJlZW4gdXNlZAorQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQEBHU1RfRElTQUJMRV9UUkFDRV9GQUxTRUBDSEVDS19FWFBPUlRTID0gY2hlY2stZXhwb3J0cworCisjIGNydWZ0OiBwbHVnaW5zIHRoYXQgaGF2ZSBiZWVuIG1lcmdlZCBvciBtb3ZlZCBvciByZW5hbWVkCitDUlVGVF9GSUxFUyA9IFwKKwkkKHRvcF9idWlsZGRpcikvY29tbW9uL3NoYXZlIFwKKwkkKHRvcF9idWlsZGRpcikvY29tbW9uL3NoYXZlLWxpYnRvb2wgXAorCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvY29kZXNldC5tNCBcCisJJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9nZXR0ZXh0Lm00IFwKKwkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2dsaWJjMi5tNCBcCisJJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9nbGliYzIxLm00IFwKKwkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2ljb252Lm00IFwKKwkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2ludGRpdjAubTQgXAorCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvaW50bC5tNCBcCisJJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9pbnRsZGlyLm00IFwKKwkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2ludGxtYWNvc3gubTQgXAorCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvaW50bWF4Lm00IFwKKwkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2ludHR5cGVzLXByaS5tNCBcCisJJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9pbnR0eXBlc19oLm00IFwKKwkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2xjbWVzc2FnZS5tNCBcCisJJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9saWItbGQubTQgXAorCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvbGliLWxpbmsubTQgXAorCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvbGliLXByZWZpeC5tNCBcCisJJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2xvY2subTQgXAorCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvbG9uZ2xvbmcubTQgXAorCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvbHRvcHRpb25zLm00IFwKKwkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2x0c3VnYXIubTQgXAorCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvbHR2ZXJzaW9uLm00IFwKKwkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L25scy5tNCBcCisJJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9wby5tNCBcCisJJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9wcmludGYtcG9zaXgubTQgXAorCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvcHJvZ3Rlc3QubTQgXAorCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvc2l6ZV9tYXgubTQgXAorCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvc3RkaW50X2gubTQgXAorCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvdWludG1heF90Lm00IFwKKwkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L3Zpc2liaWxpdHkubTQgXAorCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvd2NoYXJfdC5tNCBcCisJJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC93aW50X3QubTQgXAorCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQveHNpemUubTQKKworQ1JVRlRfRElSUyA9IFwKKwkkKHRvcF9idWlsZGRpcikvdGVzdHMvZXhhbXBsZXMveG1sIFwKKwkkKHRvcF9idWlsZGRpcikvZ3N0L3RtcC1pbnRyb3NwZWN0KiBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0LyovdG1wLWludHJvc3BlY3QqCisKK2FsbDogY29uZmlnLmgKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbGwtcmVjdXJzaXZlCisKKy5TVUZGSVhFUzoKK2FtLS1yZWZyZXNoOgorCUA6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICQodG9wX3NyY2RpcikvY29tbW9uL3dpbjMyLm1hayAkKHRvcF9zcmNkaXIpL2NvbW1vbi9yZWxlYXNlLm1hayAkKHRvcF9zcmNkaXIpL2NvbW1vbi9wby5tYWsgJCh0b3Bfc3JjZGlyKS9jb21tb24vY292ZXJhZ2UvbGNvdi5tYWsgJCh0b3Bfc3JjZGlyKS9jb21tb24vY3J1ZnQubWFrICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgIGVjaG8gJyBjZCAkKHNyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUnOyBcCisJICAgICAgJChhbV9fY2QpICQoc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBcCisJCSYmIGV4aXQgMDsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbnUgTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBlY2hvICcgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzJzsgXAorCSAgICAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXM7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJJChTSEVMTCkgLi9jb25maWcuc3RhdHVzIC0tcmVjaGVjaworCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwkkKGFtX19jZCkgJChzcmNkaXIpICYmICQoQVVUT0NPTkYpCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwkkKGFtX19jZCkgJChzcmNkaXIpICYmICQoQUNMT0NBTCkgJChBQ0xPQ0FMX0FNRkxBR1MpCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorCitjb25maWcuaDogc3RhbXAtaDEKKwlAaWYgdGVzdCAhIC1mICRAOyB0aGVuIFwKKwkgIHJtIC1mIHN0YW1wLWgxOyBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBzdGFtcC1oMTsgXAorCWVsc2UgOjsgZmkKKworc3RhbXAtaDE6ICQoc3JjZGlyKS9jb25maWcuaC5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBybSAtZiBzdGFtcC1oMQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgKKyQoc3JjZGlyKS9jb25maWcuaC5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykgCisJKCQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmICQoQVVUT0hFQURFUikpCisJcm0gLWYgc3RhbXAtaDEKKwl0b3VjaCAkQAorCitkaXN0Y2xlYW4taGRyOgorCS1ybSAtZiBjb25maWcuaCBzdGFtcC1oMQorc3RhbXAuaDogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL3N0YW1wLmguaW4KKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICRACitnc3QtZWxlbWVudC1jaGVjay5tNDogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL2dzdC1lbGVtZW50LWNoZWNrLm00LmluCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkQAorZ3N0cmVhbWVyLnNwZWM6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9nc3RyZWFtZXIuc3BlYy5pbgorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJEAKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworZGlzdGNsZWFuLWxpYnRvb2w6CisJLXJtIC1mIGxpYnRvb2wgY29uZmlnLmx0CitpbnN0YWxsLWFjbG9jYWxEQVRBOiAkKGFjbG9jYWxfREFUQSkKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGFjbG9jYWxkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChhY2xvY2FsZGlyKSIKKwlAbGlzdD0nJChhY2xvY2FsX0RBVEEpJzsgdGVzdCAtbiAiJChhY2xvY2FsZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChhY2xvY2FsZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQoYWNsb2NhbGRpcikiIHx8IGV4aXQgJCQ/OyBcCisJZG9uZQorCit1bmluc3RhbGwtYWNsb2NhbERBVEE6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChhY2xvY2FsX0RBVEEpJzsgdGVzdCAtbiAiJChhY2xvY2FsZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAorCXRlc3QgLW4gIiQkZmlsZXMiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiAoIGNkICckKERFU1RESVIpJChhY2xvY2FsZGlyKScgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisJY2QgIiQoREVTVERJUikkKGFjbG9jYWxkaXIpIiAmJiBybSAtZiAkJGZpbGVzCisKKyMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCisjIGludG8gdGhlbSBhbmQgcnVuIGBtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KKyMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgYG1ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKKyMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gYGNvbmZpZy5zdGF0dXMnLCBlZGl0IGBjb25maWcuc3RhdHVzJworIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gYG1ha2UnKTsKKyMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlIGBtYWtlJyBjb21tYW5kIGxpbmUuCiskKFJFQ1VSU0lWRV9UQVJHRVRTKToKKwlAZmFpbD0gZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKwkgIGNhc2UgJCRmIGluIFwKKwkgICAgKj0qIHwgLS1bIWtdKik7OyBcCisJICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGRvdF9zZWVuPXllczsgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKKwlkb25lOyBcCisJaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCisJZmk7IHRlc3QgLXogIiQkZmFpbCIKKworJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyk6CisJQGZhaWw9IGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwljYXNlICIkQCIgaW4gXAorCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAorCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAorCWVzYWM7IFwKKwlyZXY9Jyc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gOjsgZWxzZSBcCisJICAgIHJldj0iJCRzdWJkaXIgJCRyZXYiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlyZXY9IiQkcmV2IC4iOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWZvciBzdWJkaXIgaW4gJCRyZXY7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmUgJiYgdGVzdCAteiAiJCRmYWlsIgordGFncy1yZWN1cnNpdmU6CisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8ICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdGFncyk7IFwKKwlkb25lCitjdGFncy1yZWN1cnNpdmU6CisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8ICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcCisJZG9uZQorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiB0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgY29uZmlnLmguaW4gJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PS47IFwKKwllbHNlIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PTsgXAorCWZpOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCisJICAgICAgc2V0ICIkJEAiICIkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpIGNvbmZpZy5oLmluICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6IGN0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgY29uZmlnLmguaW4gJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgY29uZmlnLmguaW4gJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCXRlc3QgLWQgIiQoZGlzdGRpcikiIHx8IG1rZGlyICIkKGRpc3RkaXIpIgorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCAkKE1LRElSX1ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJQGxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKGRpc3RkaXIpLyQkc3ViZGlyIjsgXAorCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAorCSAgICBuZXdfZGlzdGRpcj0kJHJlbGRpcjsgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKHRvcF9kaXN0ZGlyKSI7IFwKKwkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKKwkgICAgbmV3X3RvcF9kaXN0ZGlyPSQkcmVsZGlyOyBcCisJICAgIGVjaG8gIiAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcXCI7IFwKKwkgICAgZWNobyAiICAgICBhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBhbV9fc2tpcF9tb2RlX2ZpeD06IGRpc3RkaXIpIjsgXAorCSAgICAoJChhbV9fY2QpICQkc3ViZGlyICYmIFwKKwkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCisJICAgICAgICB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIFwKKwkgICAgICAgIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFwKKwkJYW1fX3JlbW92ZV9kaXN0ZGlyPTogXAorCQlhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBcCisJCWFtX19za2lwX21vZGVfZml4PTogXAorCSAgICAgICAgZGlzdGRpcikgXAorCSAgICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgdG9wX2Rpc3RkaXI9IiQodG9wX2Rpc3RkaXIpIiBkaXN0ZGlyPSIkKGRpc3RkaXIpIiBcCisJICBkaXN0LWhvb2sKKwktdGVzdCAtbiAiJChhbV9fc2tpcF9tb2RlX2ZpeCkiIFwKKwl8fCBmaW5kICIkKGRpc3RkaXIpIiAtdHlwZSBkICEgLXBlcm0gLTc1NSBcCisJCS1leGVjIGNobW9kIHUrcnd4LGdvK3J4IHt9IFw7IC1vIFwKKwkgICEgLXR5cGUgZCAhIC1wZXJtIC00NDQgLWxpbmtzIDEgLWV4ZWMgY2htb2QgYStyIHt9IFw7IC1vIFwKKwkgICEgLXR5cGUgZCAhIC1wZXJtIC00MDAgLWV4ZWMgY2htb2QgYStyIHt9IFw7IC1vIFwKKwkgICEgLXR5cGUgZCAhIC1wZXJtIC00NDQgLWV4ZWMgJChpbnN0YWxsX3NoKSAtYyAtbSBhK3Ige30ge30gXDsgXAorCXx8IGNobW9kIC1SIGErciAiJChkaXN0ZGlyKSIKK2Rpc3QtZ3ppcDogZGlzdGRpcgorCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWMgPiQoZGlzdGRpcikudGFyLmd6CisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCitkaXN0LWJ6aXAyOiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IGJ6aXAyIC05IC1jID4kKGRpc3RkaXIpLnRhci5iejIKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworZGlzdC1sem1hOiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IGx6bWEgLTkgLWMgPiQoZGlzdGRpcikudGFyLmx6bWEKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworZGlzdC14ejogZGlzdGRpcgorCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCB4eiAtYyA+JChkaXN0ZGlyKS50YXIueHoKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworZGlzdC10YXJaOiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IGNvbXByZXNzIC1jID4kKGRpc3RkaXIpLnRhci5aCisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisKK2Rpc3Qtc2hhcjogZGlzdGRpcgorCXNoYXIgJChkaXN0ZGlyKSB8IEdaSVA9JChHWklQX0VOVikgZ3ppcCAtYyA+JChkaXN0ZGlyKS5zaGFyLmd6CisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisKK2Rpc3QtemlwOiBkaXN0ZGlyCisJLXJtIC1mICQoZGlzdGRpcikuemlwCisJemlwIC1ycSAkKGRpc3RkaXIpLnppcCAkKGRpc3RkaXIpCisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisKK2Rpc3QgZGlzdC1hbGw6IGRpc3RkaXIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1jID4kKGRpc3RkaXIpLnRhci5negorCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBiemlwMiAtOSAtYyA+JChkaXN0ZGlyKS50YXIuYnoyCisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisKKyMgVGhpcyB0YXJnZXQgdW50YXJzIHRoZSBkaXN0IGZpbGUgYW5kIHRyaWVzIGEgVlBBVEggY29uZmlndXJhdGlvbi4gIFRoZW4KKyMgaXQgZ3VhcmFudGVlcyB0aGF0IHRoZSBkaXN0cmlidXRpb24gaXMgc2VsZi1jb250YWluZWQgYnkgbWFraW5nIGFub3RoZXIKKyMgdGFyZmlsZS4KK2Rpc3RjaGVjazogZGlzdAorCWNhc2UgJyQoRElTVF9BUkNISVZFUyknIGluIFwKKwkqLnRhci5neiopIFwKKwkgIEdaSVA9JChHWklQX0VOVikgZ3ppcCAtZGMgJChkaXN0ZGlyKS50YXIuZ3ogfCAkKGFtX191bnRhcikgOztcCisJKi50YXIuYnoyKikgXAorCSAgYnppcDIgLWRjICQoZGlzdGRpcikudGFyLmJ6MiB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnRhci5sem1hKikgXAorCSAgbHptYSAtZGMgJChkaXN0ZGlyKS50YXIubHptYSB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnRhci54eiopIFwKKwkgIHh6IC1kYyAkKGRpc3RkaXIpLnRhci54eiB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnRhci5aKikgXAorCSAgdW5jb21wcmVzcyAtYyAkKGRpc3RkaXIpLnRhci5aIHwgJChhbV9fdW50YXIpIDs7XAorCSouc2hhci5neiopIFwKKwkgIEdaSVA9JChHWklQX0VOVikgZ3ppcCAtZGMgJChkaXN0ZGlyKS5zaGFyLmd6IHwgdW5zaGFyIDs7XAorCSouemlwKikgXAorCSAgdW56aXAgJChkaXN0ZGlyKS56aXAgOztcCisJZXNhYworCWNobW9kIC1SIGEtdyAkKGRpc3RkaXIpOyBjaG1vZCBhK3cgJChkaXN0ZGlyKQorCW1rZGlyICQoZGlzdGRpcikvX2J1aWxkCisJbWtkaXIgJChkaXN0ZGlyKS9faW5zdAorCWNobW9kIGEtdyAkKGRpc3RkaXIpCisJdGVzdCAtZCAkKGRpc3RkaXIpL19idWlsZCB8fCBleGl0IDA7IFwKKwlkY19pbnN0YWxsX2Jhc2U9YCQoYW1fX2NkKSAkKGRpc3RkaXIpL19pbnN0ICYmIHB3ZCB8IHNlZCAtZSAncyxeW146XFwvXTpbXFwvXSwvLCdgIFwKKwkgICYmIGRjX2Rlc3RkaXI9IiQke1RNUERJUi0vdG1wfS9hbS1kYy0kJCQkLyIgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgZGlzdGNoZWNrLWhvb2sgXAorCSAgJiYgYW1fX2N3ZD1gcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJChkaXN0ZGlyKS9fYnVpbGQgXAorCSAgJiYgLi4vY29uZmlndXJlIC0tc3JjZGlyPS4uIC0tcHJlZml4PSIkJGRjX2luc3RhbGxfYmFzZSIgXAorCSAgICAkKERJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MpIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGR2aSBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjaGVjayBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGxjaGVjayBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB1bmluc3RhbGwgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgZGlzdHVuaW5zdGFsbGNoZWNrX2Rpcj0iJCRkY19pbnN0YWxsX2Jhc2UiIFwKKwkgICAgICAgIGRpc3R1bmluc3RhbGxjaGVjayBcCisJICAmJiBjaG1vZCAtUiBhLXcgIiQkZGNfaW5zdGFsbF9iYXNlIiBcCisJICAmJiAoeyBcCisJICAgICAgIChjZCAuLi8uLiAmJiB1bWFzayAwNzcgJiYgbWtkaXIgIiQkZGNfZGVzdGRpciIpIFwKKwkgICAgICAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgREVTVERJUj0iJCRkY19kZXN0ZGlyIiBpbnN0YWxsIFwKKwkgICAgICAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgREVTVERJUj0iJCRkY19kZXN0ZGlyIiB1bmluc3RhbGwgXAorCSAgICAgICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBERVNURElSPSIkJGRjX2Rlc3RkaXIiIFwKKwkgICAgICAgICAgICBkaXN0dW5pbnN0YWxsY2hlY2tfZGlyPSIkJGRjX2Rlc3RkaXIiIGRpc3R1bmluc3RhbGxjaGVjazsgXAorCSAgICAgIH0gfHwgeyBybSAtcmYgIiQkZGNfZGVzdGRpciI7IGV4aXQgMTsgfSkgXAorCSAgJiYgcm0gLXJmICIkJGRjX2Rlc3RkaXIiIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3QgXAorCSAgJiYgcm0gLXJmICQoRElTVF9BUkNISVZFUykgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgZGlzdGNsZWFuY2hlY2sgXAorCSAgJiYgY2QgIiQkYW1fX2N3ZCIgXAorCSAgfHwgZXhpdCAxCisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisJQChlY2hvICIkKGRpc3RkaXIpIGFyY2hpdmVzIHJlYWR5IGZvciBkaXN0cmlidXRpb246ICI7IFwKKwkgIGxpc3Q9JyQoRElTVF9BUkNISVZFUyknOyBmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRpOyBkb25lKSB8IFwKKwkgIHNlZCAtZSAxaCAtZSAxcy8uLz0vZyAtZSAxcCAtZSAxeCAtZSAnJCRwJyAtZSAnJCR4JworZGlzdHVuaW5zdGFsbGNoZWNrOgorCUAkKGFtX19jZCkgJyQoZGlzdHVuaW5zdGFsbGNoZWNrX2RpciknIFwKKwkmJiB0ZXN0IGAkKGRpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMpIHwgd2MgLWxgIC1sZSAxIFwKKwkgICB8fCB7IGVjaG8gIkVSUk9SOiBmaWxlcyBsZWZ0IGFmdGVyIHVuaW5zdGFsbDoiIDsgXAorCSAgICAgICAgaWYgdGVzdCAtbiAiJChERVNURElSKSI7IHRoZW4gXAorCSAgICAgICAgICBlY2hvICIgIChjaGVjayBERVNURElSIHN1cHBvcnQpIjsgXAorCSAgICAgICAgZmkgOyBcCisJICAgICAgICAkKGRpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMpIDsgXAorCSAgICAgICAgZXhpdCAxOyB9ID4mMgorZGlzdGNsZWFuY2hlY2s6IGRpc3RjbGVhbgorCUBpZiB0ZXN0ICckKHNyY2RpciknID0gLiA7IHRoZW4gXAorCSAgZWNobyAiRVJST1I6IGRpc3RjbGVhbmNoZWNrIGNhbiBvbmx5IHJ1biBmcm9tIGEgVlBBVEggYnVpbGQiIDsgXAorCSAgZXhpdCAxIDsgXAorCWZpCisJQHRlc3QgYCQoZGlzdGNsZWFuY2hlY2tfbGlzdGZpbGVzKSB8IHdjIC1sYCAtZXEgMCBcCisJICB8fCB7IGVjaG8gIkVSUk9SOiBmaWxlcyBsZWZ0IGluIGJ1aWxkIGRpcmVjdG9yeSBhZnRlciBkaXN0Y2xlYW46IiA7IFwKKwkgICAgICAgJChkaXN0Y2xlYW5jaGVja19saXN0ZmlsZXMpIDsgXAorCSAgICAgICBleGl0IDE7IH0gPiYyCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stcmVjdXJzaXZlCithbGwtYW06IE1ha2VmaWxlICQoREFUQSkgY29uZmlnLmggYWxsLWxvY2FsCitpbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtcmVjdXJzaXZlCitpbnN0YWxsZGlycy1hbToKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChhY2xvY2FsZGlyKSI7IGRvIFwKKwkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKKwlkb25lCitpbnN0YWxsOiBpbnN0YWxsLXJlY3Vyc2l2ZQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1yZWN1cnNpdmUKK3VuaW5zdGFsbDogdW5pbnN0YWxsLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCS10ZXN0IC16ICIkKERJU1RDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChESVNUQ0xFQU5GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tcmVjdXJzaXZlCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCisJLXJtIC1mICQoYW1fX0NPTkZJR19ESVNUQ0xFQU5fRklMRVMpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1oZHIgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLXJlY3Vyc2l2ZQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtcmVjdXJzaXZlCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tcmVjdXJzaXZlCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1hY2xvY2FsREFUQQorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktcmVjdXJzaXZlCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtcmVjdXJzaXZlCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLXJlY3Vyc2l2ZQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCisJLXJtIC1mICQoYW1fX0NPTkZJR19ESVNUQ0xFQU5fRklMRVMpCisJLXJtIC1yZiAkKHRvcF9zcmNkaXIpL2F1dG9tNHRlLmNhY2hlCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1yZWN1cnNpdmUKKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1yZWN1cnNpdmUKKworcGRmLWFtOgorCitwczogcHMtcmVjdXJzaXZlCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1hY2xvY2FsREFUQQorCisuTUFLRTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgYWxsIFwKKwljdGFncy1yZWN1cnNpdmUgaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwIHRhZ3MtcmVjdXJzaXZlCisKKy5QSE9OWTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgQ1RBR1MgR1RBR1MgXAorCWFsbCBhbGwtYW0gYWxsLWxvY2FsIGFtLS1yZWZyZXNoIGNoZWNrIGNoZWNrLWFtIGNsZWFuIFwKKwljbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY3RhZ3MgY3RhZ3MtcmVjdXJzaXZlIGRpc3QgXAorCWRpc3QtYWxsIGRpc3QtYnppcDIgZGlzdC1nemlwIGRpc3QtaG9vayBkaXN0LWx6bWEgZGlzdC1zaGFyIFwKKwlkaXN0LXRhclogZGlzdC14eiBkaXN0LXppcCBkaXN0Y2hlY2sgZGlzdGNsZWFuIFwKKwlkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4taGRyIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tdGFncyBkaXN0Y2xlYW5jaGVjayBkaXN0ZGlyIGRpc3R1bmluc3RhbGxjaGVjayBkdmkgXAorCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hY2xvY2FsREFUQSBcCisJaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCisJaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCisJaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKKwlpbnN0YWxsZGlycy1hbSBtYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gXAorCXBzIHBzLWFtIHRhZ3MgdGFncy1yZWN1cnNpdmUgdW5pbnN0YWxsIHVuaW5zdGFsbC1hY2xvY2FsREFUQSBcCisJdW5pbnN0YWxsLWFtCisKKword2luMzItZGVidWc6CisJQGVjaG87IFwKKwllY2hvIHdpbjMyICAgICA9ICQod2luMzIpOyBcCisJZWNobzsgXAorCWVjaG8gd2luMzJkZWZzID0gJCh3aW4zMmRlZnMpOyBcCisJZWNobzsgXAorCWVjaG8gd2luMzJjcmxmID0gJCh3aW4zMmNybGYpOyBcCisJZWNobworCit3aW4zMi1jaGVjay1jcmxmOgorCUBlY2hvIENoZWNraW5nIHdpbjMyIGZpbGVzIGZvciBDUiBMRiBsaW5lIGVuZGluZ3MgLi4uOyBcCisJZmFpbD0wIDsgXAorCWZvciBlYWNoIGluICQod2luMzJjcmxmKSA7IGRvIFwKKwkgIHJlc3VsdD1gcGVybCAtZSAncHJpbnQgZ3JlcCgvXHJcbi8sPD4pJyAiJCRlYWNoIiB8IHdjIC1sYDsgXAorCSAgaWYgdGVzdCAiJCRyZXN1bHQiID0gMCA7IHRoZW4gXAorCSAgICBlY2hvICQkZWFjaCBtdXN0IGJlIGZpeGVkIHRvIGhhdmUgQ1JMRiBsaW5lIGVuZGluZ3MgOyBcCisJICAgIGZhaWw9MTsgXAorCSAgZmkgOyBcCisJZG9uZSA7IFwKKwlleGl0ICQkZmFpbAorCisjIG1ha2Ugc3VyZSBhbGwgc3ltYm9scyB3ZSBleHBvcnQgb24gbGludXggYXJlIGRlZmluZWQgaW4gdGhlIHdpbjMyIC5kZWYgdG9vCisjIChkb24ndCBjYXJlIGFib3V0IG90aGVyIHVuaXhlcyBmb3Igbm93LCBpdCdzIGVub3VnaCBpZiBpdCB3b3JrcyBvbiBvbmUgb2YKKyMgdGhlIGxpbnV4IGJ1aWxkIGJvdHM7IHdlIGFzc3VtZSAuc28gKQorY2hlY2stZXhwb3J0czoKKwlAZmFpbD0wIDsgXAorCWZvciBsIGluICQod2luMzJkZWZzKTsgZG8gXAorCSAgbGliYmFzZT1gYmFzZW5hbWUgIiQkbCIgIi5kZWYiYDsgXAorCSAgbGlic289YGZpbmQgIiQodG9wX2J1aWxkZGlyKSIgLW5hbWUgIiQkbGliYmFzZS1AR1NUX01BSk9STUlOT1JALnNvIiB8IGdyZXAgLXYgL19idWlsZC8gfCBoZWFkIC1uMWA7IFwKKwkgIGxpYmRlZj0iJCh0b3Bfc3JjZGlyKS93aW4zMi9jb21tb24vJCRsaWJiYXNlLmRlZiI7IFwKKwkgIGlmIHRlc3QgIngkJGxpYnNvIiAhPSAieCI7IHRoZW4gXAorCSAgICBlY2hvIENoZWNraW5nIHN5bWJvbHMgaW4gJCRsaWJzbzsgXAorCSAgICBpZiAhICgkKHRvcF9zcmNkaXIpL2NvbW1vbi9jaGVjay1leHBvcnRzICQkbGliZGVmICQkbGlic28pIDsgdGhlbiBcCisJICAgICAgZmFpbD0xOyBcCisJICAgIGZpOyBcCisJICBmaTsgXAorCWRvbmUgOyBcCisJaWYgdGVzdCAkJGZhaWwgIT0gMDsgdGhlbiBcCisJICBlY2hvICctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSc7IFwKKwkgIGVjaG8gJ1J1biB0aGlzIHRvIHVwZGF0ZSB0aGUgLmRlZiBmaWxlczonOyBcCisJICBlY2hvICdtYWtlIGNoZWNrLWV4cG9ydHMgMj4mMSB8IHBhdGNoIC1wMSc7IFwKKwkgIGVjaG8gJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJzsgXAorCWZpOyBcCisJZXhpdCAkJGZhaWwKKworIyBjb21wbGFpbiBhYm91dCBub25wb3J0YWJsZSBwcmludGYgZm9ybWF0IHN0cmluZ3MgKCVsbGQsICVsbHUsICV6dSBldGMuKQorY2hlY2stbm9ucG9ydGFibGUtcHJpbnQtZm9ybWF0OgorCUBmYWlsPTAgOyBcCisJbG9jPWBmaW5kICIkKHRvcF9zcmNkaXIpIiAtbmFtZSAnKi5jJyB8IHhhcmdzIGdyZXAgLW4gLWUgJyVbMC05XSpsbFt1ZHhdJyAtZSAnJVswLTldKnpbdWR4XSdgOyBcCisJaWYgdGVzdCAieCQkbG9jIiAhPSAieCI7IHRoZW4gXAorCSAgZWNobyAiUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIHByaW50IGZvcm1hdCBzdHJpbmdzOiIgOyBcCisJICBmaW5kICIkKHRvcF9zcmNkaXIpIiAtbmFtZSAnKi5jJyB8IHhhcmdzIGdyZXAgLW4gLWUgJyVbMC05XSpsbFt1ZHhdJyAtZSAnJVswLTldKnpbdWR4XSc7IFwKKwkgIGZhaWw9MTsgXAorCWZpOyBcCisJZXhpdCAkJGZhaWwKKworZGlzdC1ob29rOiBjaGVjay1leHBvcnRzIHdpbjMyLWNoZWNrLWNybGYKKworcmVsZWFzZTogZGlzdAorCSQoTUFLRSkgJChQQUNLQUdFKS0kKFZFUlNJT04pLnRhci5nei5tZDUKKwkkKE1BS0UpICQoUEFDS0FHRSktJChWRVJTSU9OKS50YXIuYnoyLm1kNQorCisjIGdlbmVyYXRlIG1kNSBzdW0gZmlsZXMKKyUubWQ1OiAlCisJbWQ1c3VtICQ8ID4gJEAKKworIyBjaGVjayB0aGF0IG5vIG1hcnNoYWwgb3IgZW51bXR5cGVzIGZpbGVzIGFyZSBpbmNsdWRlZAorIyB0aGlzIGluIHR1cm4gZW5zdXJlcyB0aGF0IGRpc3RjaGVjayBmYWlscyBmb3IgbWlzc2luZyAubGlzdCBmaWxlcyB3aGljaCBpcyBjdXJyZW50bHkKKyMgc2hhZG93ZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyAuYyBhbmQgLmggZmlsZXMgYXJlIGluY2x1ZGVkLgorZGlzdGNoZWNrLWhvb2s6CisJQHRlc3QgIngiID0gInhgZmluZCAkKGRpc3RkaXIpIC1uYW1lIFwqLWVudW10eXBlcy5bY2hdIHwgZ3JlcCAtdiB3aW4zMmAiICYmIFwKKwl0ZXN0ICJ4IiA9ICJ4YGZpbmQgJChkaXN0ZGlyKSAtbmFtZSBcKi1tYXJzaGFsLltjaF1gIiB8fCBcCisJKCAkKEVDSE8pICIqKiogTGVmdG92ZXIgZW51bXR5cGVzIG9yIG1hcnNoYWwgZmlsZXMgaW4gdGhlIHRhcmJhbGwuIiAmJiBcCisJICAkKEVDSE8pICIqKiogTWFrZSBzdXJlIHRoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIG5vdCBkaXN0ZWQ6IiAmJiBcCisJICBmaW5kICQoZGlzdGRpcikgLW5hbWUgXCotZW51bXR5cGVzLltjaF0gfCBncmVwIC12IHdpbjMyICYmIFwKKwkgIGZpbmQgJChkaXN0ZGlyKSAtbmFtZSBcKi1tYXJzaGFsLltjaF0gJiYgXAorCSAgZmFsc2UgKQorCisjIHJ1bGUgdG8gZG93bmxvYWQgdGhlIGxhdGVzdCAucG8gZmlsZXMKK2Rvd25sb2FkLXBvOiAkKHRvcF9zcmNkaXIpL2NvbW1vbi9kb3dubG9hZC10cmFuc2xhdGlvbnMKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9kb3dubG9hZC10cmFuc2xhdGlvbnMgJChQQUNLQUdFKQorCitAR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQGNsZWFuLWdjb3Y6CitAR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAlmaW5kIC1uYW1lICIqLmRhIiAtbyAtbmFtZSAiKi5nY292IiB8IHhhcmdzIHJtIHx8IHRydWUKKworQEdTVF9HQ09WX0VOQUJMRURfVFJVRUBjbGVhbi1iYmc6CitAR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAlmaW5kIC1uYW1lICIqLmJiZyIgLW8gLW5hbWUgIiouYmIiIHwgeGFyZ3Mgcm0gfHwgdHJ1ZQorCitAR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQC5QSE9OWTogY292ZXJhZ2UtcmVwb3J0LnR4dAorCitAR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQGNvdmVyYWdlLXJlcG9ydC50eHQ6CitAR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAlCQkdfRklMRVM9YGZpbmQgJChHQ09WX0RJUlMpIC1uYW1lICIqLmJiZyJgIDsJCQkgIFwKK0BHU1RfR0NPVl9FTkFCTEVEX1RSVUVACUNfRklMRVM9IDsJCQkJCQkJICBcCitAR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAlmb3IgRiBpbiAkJEJCR19GSUxFUyA7IGRvCQkJCQkgIFwKK0BHU1RfR0NPVl9FTkFCTEVEX1RSVUVACQlGX25vbGlicz1gZWNobyAkJEYgfCBzZWQgLWUgJ3MvLmxpYnNcLy8vZydgIDsJCSAgXAorQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJCUM9YGVjaG8gJCRGX25vbGlicyB8IHNlZCAtZSAncy8uYmJnLy5jL2cnYCA7CQkgIFwKK0BHU1RfR0NPVl9FTkFCTEVEX1RSVUVACQlCPWBiYXNlbmFtZSAkJEYgLmJiZ2AgOwkJCQkJICBcCitAR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAkJRD1gZGlybmFtZSAkJEZgIDsJCQkJCSAgXAorQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJCURBPWBlY2hvICQkRiB8IHNlZCAtZSAncy8uYmJnLy5kYS9nJ2AgOwkJCSAgXAorQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJCURBX2xpYnM9YGVjaG8gJCRELy5saWJzLyQkQi8uZGFgIDsJCQkgIFwKK0BHU1RfR0NPVl9FTkFCTEVEX1RSVUVACQlpZiB0ZXN0IC1lICQkREEgfHwgdGVzdCAtZSAkJERBX2xpYnM7IHRoZW4JCSAgXAorQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJCQlDX0ZJTEVTPSIkJENfRklMRVMgJCRDIiA7CQkJICBcCitAR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAkJZmkgOwkJCQkJCQkgIFwKK0BHU1RfR0NPVl9FTkFCTEVEX1RSVUVACWRvbmUgOwkJCQkJCQkJICBcCitAR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAllY2hvICQkQ19GSUxFUyA7CQkJCQkJICBcCitAR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAkkKHRvcF9idWlsZGRpcikvdGVzdHN1aXRlL2RlY29kZS1nY292IC0tcmVwb3J0ICQkQ19GSUxFUyA+IGNvdmVyYWdlLXJlcG9ydC50eHQKKworQEdTVF9HQ09WX0VOQUJMRURfVFJVRUBjaGVjay1jb3ZlcmFnZTogY2xlYW4tZ2NvdiBhbGwgY2hlY2sgY292ZXJhZ2UtcmVwb3J0LnR4dAorQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJY2F0IGNvdmVyYWdlLXJlcG9ydC50eHQKKworQEdTVF9HQ09WX0VOQUJMRURfRkFMU0VAY292ZXJhZ2UtcmVwb3J0LnR4dDoKK0BHU1RfR0NPVl9FTkFCTEVEX0ZBTFNFQAllY2hvICJOZWVkIHRvIHJlY29uZmlndXJlIHdpdGggLS1lbmFibGUtZ2NvdiIKKworQEdTVF9HQ09WX0VOQUJMRURfRkFMU0VAY2hlY2stY292ZXJhZ2U6CitAR1NUX0dDT1ZfRU5BQkxFRF9GQUxTRUAJZWNobyAiTmVlZCB0byByZWNvbmZpZ3VyZSB3aXRoIC0tZW5hYmxlLWdjb3YiCisKK0BIQVZFX0NIRUNLX1RSVUVAY2hlY2stdmFsZ3JpbmQ6CitASEFWRV9DSEVDS19UUlVFQAljZCB0ZXN0cy9jaGVjayAmJiBtYWtlIGNoZWNrLXZhbGdyaW5kCisKK0BIQVZFX0NIRUNLX1RSVUVAY2hlY2stdG9ydHVyZToKK0BIQVZFX0NIRUNLX1RSVUVACWNkIHRlc3RzL2NoZWNrICYmIG1ha2UgdG9ydHVyZQorQEhBVkVfQ0hFQ0tfRkFMU0VAY2hlY2stdmFsZ3JpbmQ6CitASEFWRV9DSEVDS19GQUxTRUAJZWNobyAiJ2NoZWNrJyBsaWJyYXJ5IG5vdCBpbnN0YWxsZWQsIHNraXBwaW5nIgorCitASEFWRV9DSEVDS19GQUxTRUBjaGVjay10b3J0dXJlOgorQEhBVkVfQ0hFQ0tfRkFMU0VACWVjaG8gIidjaGVjaycgbGlicmFyeSBub3QgaW5zdGFsbGVkLCBza2lwcGluZyIKKworIyBGSVhNRTogdGhpcyB0YXJnZXQgc2hvdWxkIGJlIHJ1biBldmVyeSB0aW1lIHdlIGRvICJtYWtlIHJlbGVhc2UiCisjIGZpbmQgYSB3YXkgb2YgYXV0b21hdGluZyB0aGF0Cit3aW4zMi11cGRhdGU6CisJZm9yIGYgaW4gZ3N0dmVyc2lvbi5oIGdzdGVudW10eXBlcy5jIGdzdGVudW10eXBlcy5oIGdzdG1hcnNoYWwuYyBnc3RtYXJzaGFsLmg7IGRvIFwKKwkJY3AgJCh0b3BfYnVpbGRkaXIpL2dzdC8kJGYgd2luMzIvY29tbW9uOyBkb25lCisJJCh0b3Bfc3JjZGlyKS90b29scy9nc3QtaW5kZW50IHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYworCSQodG9wX3NyY2RpcikvdG9vbHMvZ3N0LWluZGVudCB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmMKKwkkKHRvcF9zcmNkaXIpL3Rvb2xzL2dzdC1pbmRlbnQgd2luMzIvY29tbW9uL2dzdG1hcnNoYWwuYworCSQodG9wX3NyY2RpcikvdG9vbHMvZ3N0LWluZGVudCB3aW4zMi9jb21tb24vZ3N0bWFyc2hhbC5jCisJY3AgJCh0b3BfYnVpbGRkaXIpL3dpbjMyL2NvbW1vbi9jb25maWcuaC1uZXcgXAorCQkkKHRvcF9zcmNkaXIpL3dpbjMyL2NvbW1vbi9jb25maWcuaAorCitjaGVjay1lbnVtLWdldHR5cGVzOiAkKHRvcF9idWlsZGRpcikvZ3N0L2dzdGVudW10eXBlcy5oCisJQGVjaG8gJ0NoZWNraW5nIGlmIGFsbCBlbnVtIGFuZCBmbGFnIF9nZXRfdHlwZSgpIGZ1bmNzIGFyZSBpbml0ZWQgaW4gZ3N0X2luaXQoKSc7ICAgICAgICAgICAgICAgICAgICAgICAgXAorCUZVTkNTPWBncmVwICdfZ2V0X3R5cGUgKCcgZ3N0L2dzdGVudW10eXBlcy5oIHwgc2VkIC1lICdzL14uKmdzdF8vZ3N0Xy8nIC1lICdzL19nZXRfdHlwZS4qJCQvX2dldF90eXBlLydgO1wKKwlNSVNTSU5HX0ZVTkNTPScnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZm9yIGYgaW4gJCRGVU5DUzsgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgSU5JVF9MSU5FPWBncmVwICQkZiAkKHRvcF9zcmNkaXIpL2dzdC8qLmMgfCBncmVwIGdfdHlwZV9jbGFzc19yZWZgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgIGlmIHRlc3QgIngkJElOSVRfTElORSIgPSAieCI7IHRoZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgIE1JU1NJTkdfRlVOQ1M9IiQkTUlTU0lOR19GVU5DUyAkJGYiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgZmk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlkb25lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgdGVzdCAieCQkTUlTU0lOR19GVU5DUyIgIT0gIngiOyB0aGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgZWNobyAiRklYTUU6IHBsZWFzZSBhZGQgdG8gdGhlIGZvbGxvd2luZyB0byBnc3QvZ3N0LmMgaW5pdF9wb3N0KCk6IjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgIGZvciBmIGluICQkTUlTU0lOR19GVU5DUzsgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgIGVjaG8gIiAgZ190eXBlX2NsYXNzX3JlZiAoJCRmICgpKTsiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgZG9uZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgIGV4aXQgMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZmk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWVjaG8gJ0NoZWNraW5nIGlmIGFsbCBlbnVtIGFuZCBmbGFnIF9nZXRfdHlwZSgpIGZ1bmNzIGFyZSBkZWluaXRlZCBpbiBnc3RfZGVpbml0KCknOyAgICAgICAgICAgICAgICAgICAgIFwKKwlNSVNTSU5HX0ZVTkNTPScnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZm9yIGYgaW4gJCRGVU5DUzsgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgSU5JVF9MSU5FPWBncmVwICQkZiAkKHRvcF9zcmNkaXIpL2dzdC8qLmMgfCBncmVwIGdfdHlwZV9jbGFzc191bnJlZmA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgIGlmIHRlc3QgIngkJElOSVRfTElORSIgPSAieCI7IHRoZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgIE1JU1NJTkdfRlVOQ1M9IiQkTUlTU0lOR19GVU5DUyAkJGYiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgZmk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlkb25lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgdGVzdCAieCQkTUlTU0lOR19GVU5DUyIgIT0gIngiOyB0aGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgZWNobyAiRklYTUU6IHBsZWFzZSBhZGQgdG8gdGhlIGZvbGxvd2luZyB0byBnc3QvZ3N0LmMgZ3N0X2RlaW5pdCgpOiI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgIGZvciBmIGluICQkTUlTU0lOR19GVU5DUzsgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgIGVjaG8gIiAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoJCRmICgpKSk7IjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgZG9uZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgIGV4aXQgMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZmkKKy5QSE9OWTogbGNvdi1yZXNldCBsY292IGxjb3YtcnVuIGxjb3YtcmVwb3J0IGxjb3YtdXBsb2FkCisKKyMgcnVuIGxjb3YgZnJvbSBzY3JhdGNoLCBhbHdheXMKK2xjb3YtcmVzZXQ6CisJJChNQUtFKSBsY292LXJ1bgorCSQoTUFLRSkgbGNvdi1yZXBvcnQKKworIyBydW4gbGNvdiBmcm9tIHNjcmF0Y2ggaWYgdGhlIGRpciBpcyBub3QgdGhlcmUKK2xjb3Y6CisJJChNQUtFKSBsY292LXJlc2V0CisKKyMgcmVzZXQgcnVuIGNvdmVyYWdlIHRlc3RzCitAR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQGxjb3YtcnVuOgorQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJQC1ybSAtcmYgbGNvdgorQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJbGNvdiAtLWRpcmVjdG9yeSAuIC0temVyb2NvdW50ZXJzCitAR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAktaWYgdGVzdCAtZCB0ZXN0cy9jaGVjazsgdGhlbiAkKE1BS0UpIC1DIHRlc3RzL2NoZWNrIGluc3BlY3Q7IGZpCitAR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAktJChNQUtFKSBjaGVjaworCisjIGdlbmVyYXRlIHJlcG9ydCBiYXNlZCBvbiBjdXJyZW50IGNvdmVyYWdlIGRhdGEKK0BHU1RfR0NPVl9FTkFCTEVEX1RSVUVAbGNvdi1yZXBvcnQ6CitAR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAlta2RpciBsY292CitAR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAlsY292IC0tY29tcGF0LWxpYnRvb2wgLS1kaXJlY3RvcnkgLiAtLWNhcHR1cmUgLS1vdXRwdXQtZmlsZSBsY292L2xjb3YuaW5mbworQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJbGNvdiAtLWxpc3QtZnVsbC1wYXRoIC1sIGxjb3YvbGNvdi5pbmZvIHwgZ3JlcCAtdiAiYGNkICQodG9wX3NyY2RpcikgJiYgcHdkYCIgfCBjdXQgLWRcfCAtZjEgPiBsY292L3JlbW92ZQorQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJbGNvdiAtLWxpc3QtZnVsbC1wYXRoIC1sIGxjb3YvbGNvdi5pbmZvIHwgZ3JlcCAidGVzdHMvY2hlY2svIiB8IGN1dCAtZFx8IC1mMSA+PiBsY292L3JlbW92ZQorQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJbGNvdiAtLWxpc3QtZnVsbC1wYXRoIC1sIGxjb3YvbGNvdi5pbmZvIHwgZ3JlcCAiZG9jcy9wbHVnaW5zLyIgfCBjdXQgLWRcfCAtZjEgPj4gbGNvdi9yZW1vdmUKK0BHU1RfR0NPVl9FTkFCTEVEX1RSVUVACWxjb3YgLXIgbGNvdi9sY292LmluZm8gYGNhdCBsY292L3JlbW92ZWAgPiBsY292L2xjb3YuY2xlYW5lZC5pbmZvCitAR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAlybSBsY292L3JlbW92ZQorQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJbXYgbGNvdi9sY292LmNsZWFuZWQuaW5mbyBsY292L2xjb3YuaW5mbworQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJZ2VuaHRtbCAtdCAiJChQQUNLQUdFX1NUUklORykiIC1vIGxjb3YgLS1udW0tc3BhY2VzIDIgbGNvdi9sY292LmluZm8KKworQEdTVF9HQ09WX0VOQUJMRURfVFJVRUBsY292LXVwbG9hZDogbGNvdgorQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJcnN5bmMgLXJ2eiAtZSBzc2ggLS1kZWxldGUgbGNvdi8qIGdzdHJlYW1lci5mcmVlZGVza3RvcC5vcmc6L3Nydi9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3d3dy9kYXRhL2NvdmVyYWdlL2xjb3YvJChQQUNLQUdFKQorCitAR1NUX0dDT1ZfRU5BQkxFRF9GQUxTRUBsY292LXJ1bjoKK0BHU1RfR0NPVl9FTkFCTEVEX0ZBTFNFQAllY2hvICJOZWVkIHRvIHJlY29uZmlndXJlIHdpdGggLS1lbmFibGUtZ2NvdiIKKworQEdTVF9HQ09WX0VOQUJMRURfRkFMU0VAbGNvdi1yZXBvcnQ6CitAR1NUX0dDT1ZfRU5BQkxFRF9GQUxTRUAJZWNobyAiTmVlZCB0byByZWNvbmZpZ3VyZSB3aXRoIC0tZW5hYmxlLWdjb3YiCisKK2NoZWNrOiAkKENIRUNLX0VYUE9SVFMpIGNoZWNrLWVudW0tZ2V0dHlwZXMKKworZ3N0LWVsZW1lbnQtY2hlY2stQEdTVF9NQUpPUk1JTk9SQC5tNDogZ3N0LWVsZW1lbnQtY2hlY2subTQKKwkkKEFNX1ZfR0VOKWNwIGdzdC1lbGVtZW50LWNoZWNrLm00IGdzdC1lbGVtZW50LWNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubTQKKworY2hlY2stY3J1ZnQ6CisJQGNydWZ0X2ZpbGVzPSIiOyBjcnVmdF9kaXJzPSIiOyBcCisJZm9yIGYgaW4gJChDUlVGVF9GSUxFUyk7IGRvIFwKKwkgIGlmIHRlc3QgLWUgJCRmOyB0aGVuIFwKKwkgICAgY3J1ZnRfZmlsZXM9IiQkY3J1ZnRfZmlsZXMgJCRmIjsgXAorCSAgZmkgXAorCWRvbmU7IFwKKwlmb3IgZCBpbiAkKENSVUZUX0RJUlMpOyBkbyBcCisJICBpZiB0ZXN0IC1lICQkZDsgdGhlbiBcCisJICAgIGNydWZ0X2RpcnM9IiQkY3J1ZnRfZGlycyAkJGQiOyBcCisJICBmaSBcCisJZG9uZTsgXAorCWlmIHRlc3QgIngkJGNydWZ0X2ZpbGVzJCRjcnVmdF9kaXJzIiAhPSB4OyB0aGVuIFwKKwkgIGVjaG87IFwKKwkgIGVjaG8gIioqKiogQ1JVRlQgQUxFUlQgKioqKioiOyBcCisJICBlY2hvOyBcCisJICBlY2hvICJUaGUgZm9sbG93aW5nIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBtYXkgbm90IGJlIG5lZWRlZCBhbnkgIjsgXAorCSAgZWNobyAibG9uZ2VyICh1c3VhbGx5IGJlY2F1c2UgYSBwbHVnaW4gaGFzIGJlZW4gbWVyZ2VkIGludG8gICAgICI7IFwKKwkgIGVjaG8gImFub3RoZXIgcGx1Z2luLCBtb3ZlZCB0byBhIGRpZmZlcmVudCBtb2R1bGUsIG9yIGJlZW4gICAgICAiOyBcCisJICBlY2hvICJyZW5hbWVkKSwgYW5kIHlvdSBwcm9iYWJseSB3YW50IHRvIGNsZWFuIHRoZW0gdXAgaWYgeW91ICAgIjsgXAorCSAgZWNobyAiZG9uJ3QgaGF2ZSBsb2NhbCBjaGFuZ2VzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI7IFwKKwkgIGVjaG87IFwKKwkgIGZvciBmIGluICQkY3J1ZnRfZmlsZXM7IGRvIGVjaG8gImZpbGUgJCRmIjsgZG9uZTsgXAorCSAgZWNobzsgXAorCSAgZm9yIGQgaW4gJCRjcnVmdF9kaXJzOyBkbyBlY2hvICJkaXJlY3RvcnkgJCRkIjsgZG9uZTsgXAorCSAgZWNobzsgXAorCSAgZWNobyAiJ21ha2UgY2xlYW4tY3J1ZnQnIHdpbGwgcmVtb3ZlIHRoZXNlIGZvciB5b3UuIjsgXAorCSAgZWNobzsgXAorCWZpCisKK2NsZWFuLWNydWZ0LWRpcnM6CisJQGZvciBkIGluICQoQ1JVRlRfRElSUyk7IGRvIFwKKwkgIGlmIHRlc3QgLWUgJCRkOyB0aGVuIFwKKwkgICAgcm0gLXIgIiQkZCIgJiYgZWNobyAiUmVtb3ZlZCBkaXJlY3RvcnkgJCRkIjsgXAorCSAgZmkgXAorCWRvbmUKKworY2xlYW4tY3J1ZnQtZmlsZXM6CisJQGZvciBmIGluICQoQ1JVRlRfRklMRVMpOyBkbyBcCisJICBpZiB0ZXN0IC1lICQkZjsgdGhlbiBcCisJICAgIHJtICIkJGYiICYmIGVjaG8gIlJlbW92ZWQgZmlsZSAkJGYiOyBcCisJICBmaSBcCisJZG9uZQorCitjbGVhbi1jcnVmdDogY2xlYW4tY3J1ZnQtZGlycyBjbGVhbi1jcnVmdC1maWxlcworCisjIGFsc28gbWlnaHQgd2FudCB0byBhZGQgdGhpcyB0byB5b3VyIE1ha2VmaWxlLmFtOgorIworIyBhbGwtbG9jYWw6IGNoZWNrLWNydWZ0CisKK2FsbC1sb2NhbDogZ3N0LWVsZW1lbnQtY2hlY2stQEdTVF9NQUpPUk1JTk9SQC5tNCBjaGVjay1jcnVmdAorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9ORVdTIGIvTkVXUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGE2MWY0Ci0tLSAvZGV2L251bGwKKysrIGIvTkVXUwpAQCAtMCwwICsxLDggQEAKK1RoaXMgaXMgR1N0cmVhbWVyIDAuMTEuMSAiU3dlZXQgTmV3IEJsb3Nzb20iCisKK05ldyBmZWF0dWVzIGluIDAuMTEuMToKKworICAgICAgKiBQYXJhbGxlbCBpbnN0YWxsYWJpbGl0eSB3aXRoIDAuMTAueCBzZXJpZXMKKyAgICAgICogUmVtb3ZlIG5lZ290aWF0aW9uIGZyb20gc3RhdGUgY2hhbmdlIGluIEdzdEJhc2VTcmMKKyAgICAgICogUmVtb3ZlZCBvdXIgY3VzdG9tIEZPVVJDQyB0eXBlCisgICAgICAqIFVwZGF0ZXMgdG8gdGhlIGJhc2UgY2xhc3NlcwpkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NDY1M2QKLS0tIC9kZXYvbnVsbAorKysgYi9SRUFETUUKQEAgLTAsMCArMSwyNDcgQEAKK1dIQVQgSVQgSVMKKy0tLS0tLS0tLS0KKworVGhpcyBpcyBHU3RyZWFtZXIsIGEgZnJhbWV3b3JrIGZvciBzdHJlYW1pbmcgbWVkaWEuCisKK1dIRVJFIFRPIFNUQVJUCistLS0tLS0tLS0tLS0tLQorCitXZSBoYXZlIGEgd2Vic2l0ZSBhdAoraHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvCisKK1lvdSBzaG91bGQgc3RhcnQgYnkgZ29pbmcgdGhyb3VnaCBvdXIgRkFRIGF0CitodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9mYXEvaHRtbC8KKworVGhlcmUgaXMgbW9yZSBkb2N1bWVudGF0aW9uOyBnbyB0bworaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZG9jdW1lbnRhdGlvbgorCitZb3UgY2FuIHN1YnNjcmliZSB0byBvdXIgbWFpbGluZyBsaXN0czsgc2VlIHRoZSB3ZWJzaXRlIGZvciBkZXRhaWxzLgorCitXZSB0cmFjayBidWdzIGluIEdOT01FJ3MgYnVnemlsbGE7IHNlZSB0aGUgd2Vic2l0ZSBmb3IgZGV0YWlscy4KKworWW91IGNhbiBqb2luIHVzIG9uIElSQyAtICNnc3RyZWFtZXIgb24gaXJjLmZyZWVub2RlLm9yZworCitHU3RyZWFtZXIgMC4xMCBzZXJpZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTdGFycmluZworCisgIEdTVFJFQU1FUgorCitUaGUgY29yZSBhcm91bmQgd2hpY2ggYWxsIG90aGVyIG1vZHVsZXMgcmV2b2x2ZS4gIEJhc2UgZnVuY3Rpb25hbGl0eSBhbmQKK2xpYnJhcmllcywgc29tZSBlc3NlbnRpYWwgZWxlbWVudHMsIGRvY3VtZW50YXRpb24sIGFuZCB0ZXN0aW5nLgorCisgIEJBU0UKKworQSB3ZWxsLWdyb29tZWQgYW5kIHdlbGwtbWFpbnRhaW5lZCBjb2xsZWN0aW9uIG9mIEdTdHJlYW1lciBwbHVnLWlucyBhbmQKK2VsZW1lbnRzLCBzcGFubmluZyB0aGUgcmFuZ2Ugb2YgcG9zc2libGUgdHlwZXMgb2YgZWxlbWVudHMgb25lIHdvdWxkIHdhbnQKK3RvIHdyaXRlIGZvciBHU3RyZWFtZXIuICAKKworQW5kIGludHJvZHVjaW5nLCBmb3IgdGhlIGZpcnN0IHRpbWUgZXZlciwgb24gdGhlIGRldmVsb3BtZW50IHNjcmVlbiAuLi4KKworICBUSEUgR09PRAorCisgLS0tICJTdWNoIGluZ3JhdGl0dWRlLiAgQWZ0ZXIgYWxsIHRoZSB0aW1lcyBJJ3ZlIHNhdmVkIHlvdXIgbGlmZS4iCisKK0EgY29sbGVjdGlvbiBvZiBwbHVnLWlucyB5b3UnZCB3YW50IHRvIGhhdmUgcmlnaHQgbmV4dCB0byB5b3Ugb24gdGhlCitiYXR0bGVmaWVsZC4gIFNob290aW5nIHNoYXJwIGFuZCBtYWtpbmcgbm8gbWlzdGFrZXMsIHRoZXNlIHBsdWctaW5zIGhhdmUgaXQKK2FsbDogZ29vZCBsb29rcywgZ29vZCBjb2RlLCBhbmQgZ29vZCBsaWNlbnNpbmcuICBEb2N1bWVudGVkIGFuZCBkcmVzc2VkIHVwCitpbiB0ZXN0cy4gIElmIHlvdSdyZSBsb29raW5nIGZvciBhIHJvbGUgbW9kZWwgdG8gYmFzZSB5b3VyIG93biBwbHVnLWluIG9uLAoraGVyZSBpdCBpcy4KKworSWYgeW91IGZpbmQgYSBwbG90IGhvbGUgb3IgYSBiYWRseSBsaXAtc3luY2VkIGxpbmUgb2YgY29kZSBpbiB0aGVtLAorbGV0IHVzIGtub3cgLSBpdCBpcyBhIG1hdHRlciBvZiBob25vdXIgZm9yIHVzIHRvIGVuc3VyZSBCbG9uZGllIGRvZXNuJ3QgbG9vaworbGlrZSBoZSdzIGJlZW4gd2Fsa2luZyAxMDAgbWlsZXMgdGhyb3VnaCB0aGUgZGVzZXJ0IHdpdGhvdXQgd2F0ZXIuCisKKyAgVEhFIFVHTFkKKworICAtLS0gIldoZW4geW91IGhhdmUgdG8gc2hvb3QsIHNob290LiAgRG9uJ3QgdGFsay4iCisKK1RoZXJlIGFyZSB0aW1lcyB3aGVuIHRoZSB3b3JsZCBuZWVkcyBhIGNvbG9yIGJldHdlZW4gYmxhY2sgYW5kIHdoaXRlLgorUXVhbGl0eSBjb2RlIHRvIG1hdGNoIHRoZSBnb29kJ3MsIGJ1dCB0d28tdGltaW5nLCBiYWNrc3RhYmJpbmcgYW5kIHJlYWR5IHRvCitzZWxsIHlvdXIgZnJlZWRvbSBkb3duIHRoZSByaXZlci4gIFRoZXNlIHBsdWctaW5zIG1pZ2h0IGhhdmUgYSBwYXRlbnQgbm9vc2UKK2Fyb3VuZCB0aGVpciBuZWNrLCBvciBhIGxvY2stdXAgbGljZW5zZSwgb3IgYW55IG90aGVyIHByb2JsZW0gdGhhdCBtYWtlcyB5b3UKK3RoaW5rIHR3aWNlIGFib3V0IHNoaXBwaW5nIHRoZW0uCisKK1dlIGRvbid0IGNhbGwgdGhlbSB1Z2x5IGJlY2F1c2Ugd2UgbGlrZSB0aGVtIGxlc3MuICBEb2VzIGEgbW90aGVyIGxvdmUgaGVyCitzb24gbGVzcyBiZWNhdXNlIGhlJ3Mgbm90IGFzIHByZXR0eSBhcyB0aGUgb3RoZXIgb25lcyA/IE5vICAtIHNoZSBjb21tZW5kcworaGltIG9uIGhpcyBncmVhdCBwZXJzb25hbGl0eS4gIFRoZXNlIHBsdWctaW5zIGFyZSB0aGUgbGlmZSBvZiB0aGUgcGFydHkuCitBbmQgd2UnbGwgc3RpbGwgc3RlcCBpbiBhbmQgc2V0IHRoZW0gc3RyYWlnaHQgaWYgeW91IHJlcG9ydCBhbnkgdW5hY2NlcHRhYmxlCitiZWhhdmlvdXIgLSBiZWNhdXNlIHRoZXJlIGFyZSB0d28ga2luZHMgb2YgcGVvcGxlIGluIHRoZSB3b3JsZCwgbXkgZnJpZW5kOgordGhvc2Ugd2l0aCBhIHJvcGUgYXJvdW5kIHRoZWlyIG5lY2sgYW5kIHRoZSBwZW9wbGUgd2hvIGRvIHRoZSBjdXR0aW5nLgorCisgIFRIRSBCQUQKKworICAtLS0gIlRoYXQgYW4gYWNjdXNhdGlvbj8iCisKK05vIHBlcmZlY3RseSBncm9vbWVkIG1vdXN0YWNoZSBvciBhbnkgYW1vdW50IG9mIGZpbmUgY2xvdGhpbmcgaXMgZ29pbmcgdG8KK2NvdmVyIHVwIHRoZSB0cnV0aCAtIHRoZXNlIHBsdWctaW5zIGFyZSBCYWQgd2l0aCBhIGNhcGl0YWwgQi4gCitUaGV5IGxvb2sgZmluZSBvbiB0aGUgb3V0c2lkZSwgYW5kIG1pZ2h0IGV2ZW4gYXBwZWFyIHRvIGdldCB0aGUgam9iIGRvbmUsIGJ1dAorYXQgdGhlIGVuZCBvZiB0aGUgZGF5IHRoZXkncmUgYSBibGFjayBzaGVlcC4gV2l0aG91dCBhIGdvbGRlbi1oYWlyZWQgYW5nZWwKK3RvIHdhdGNoIG92ZXIgdGhlbSwgdGhleSdsbCBwcm9iYWJseSBsYW5kIGluIGFuIHVubWFya2VkIGdyYXZlIGF0IHRoZSBmaW5hbAorc2hvd2Rvd24uCisKK0Rvbid0IGJ1ZyB1cyBhYm91dCB0aGVpciBxdWFsaXR5IC0gZXhlcmNpc2UgeW91ciBGcmVlIFNvZnR3YXJlIHJpZ2h0cywKK3BhdGNoIHVwIHRoZSBvZmZlbmRlciBhbmQgc2VuZCB1cyB0aGUgcGF0Y2ggb24gdGhlIGZhc3Rlc3Qgc3RlZWQgeW91IGNhbgorc3RlYWwgZnJvbSB0aGUgQ29uZmVkZXJhdGVzLiBCZWNhdXNlIHlvdSBzZWUsIGluIHRoaXMgd29ybGQsIHRoZXJlJ3MgdHdvCitraW5kcyBvZiBwZW9wbGUsIG15IGZyaWVuZDogdGhvc2Ugd2l0aCBsb2FkZWQgZ3VucyBhbmQgdGhvc2Ugd2hvIGRpZy4KK1lvdSBkaWcuCisKK1RoZSBMb3dkb3duCistLS0tLS0tLS0tLQorCisgIC0tLSAiSSd2ZSBuZXZlciBzZWVuIHNvIG1hbnkgcGx1Zy1pbnMgd2FzdGVkIHNvIGJhZGx5LiIKKworR1N0cmVhbWVyIFBsdWctaW5zIGhhcyBncm93biBzbyBiaWcgdGhhdCBpdCdzIGhhcmQgdG8gc2VwYXJhdGUgdGhlIHdoZWF0IGZyb20KK3RoZSBjaGFmZi4gIEFsc28sIGRpc3RyaWJ1dG9ycyBoYXZlIGJyb3VnaHQgdXAgaXNzdWVzIGFib3V0IHRoZSBsZWdhbCBzdGF0dXMKK29mIHNvbWUgb2YgdGhlIHBsdWctaW5zIHdlIHNoaXAuICBUbyByZW1lZHkgdGhpcywgd2UndmUgZGl2aWRlZCB0aGUgcHJldmlvdXMKK3NldCBvZiBhdmFpbGFibGUgcGx1Zy1pbnMgaW50byBmb3VyIG1vZHVsZXM6CisKKy0gZ3N0LXBsdWdpbnMtYmFzZTogYSBzbWFsbCBhbmQgZml4ZWQgc2V0IG9mIHBsdWctaW5zLCBjb3ZlcmluZyBhIHdpZGUgcmFuZ2UKKyAgb2YgcG9zc2libGUgdHlwZXMgb2YgZWxlbWVudHM7IHRoZXNlIGFyZSBjb250aW51b3VzbHkga2VwdCB1cC10by1kYXRlCisgIHdpdGggYW55IGNvcmUgY2hhbmdlcyBkdXJpbmcgdGhlIGRldmVsb3BtZW50IHNlcmllcy4KKworICAtIFdlIGJlbGlldmUgZGlzdHJpYnV0b3JzIGNhbiBzYWZlbHkgc2hpcCB0aGVzZSBwbHVnLWlucy4KKyAgLSBQZW9wbGUgd3JpdGluZyBlbGVtZW50cyBzaG91bGQgYmFzZSB0aGVpciBjb2RlIG9uIHRoZXNlIGVsZW1lbnRzLgorICAtIFRoZXNlIGVsZW1lbnRzIGNvbWUgd2l0aCBleGFtcGxlcywgZG9jdW1lbnRhdGlvbiwgYW5kIHJlZ3Jlc3Npb24gdGVzdHMuCisKKy0gZ3N0LXBsdWdpbnMtZ29vZDogYSBzZXQgb2YgcGx1Zy1pbnMgdGhhdCB3ZSBjb25zaWRlciB0byBoYXZlIGdvb2QgcXVhbGl0eQorICBjb2RlLCBjb3JyZWN0IGZ1bmN0aW9uYWxpdHksIG91ciBwcmVmZXJyZWQgbGljZW5zZSAoTEdQTCBmb3IgdGhlIHBsdWctaW4KKyAgY29kZSwgTEdQTCBvciBMR1BMLWNvbXBhdGlibGUgZm9yIHRoZSBzdXBwb3J0aW5nIGxpYnJhcnkpLgorCisgIC0gV2UgYmVsaWV2ZSBkaXN0cmlidXRvcnMgY2FuIHNhZmVseSBzaGlwIHRoZXNlIHBsdWctaW5zLgorICAtIFBlb3BsZSB3cml0aW5nIGVsZW1lbnRzIHNob3VsZCBiYXNlIHRoZWlyIGNvZGUgb24gdGhlc2UgZWxlbWVudHMuCisgCistIGdzdC1wbHVnaW5zLXVnbHk6IGEgc2V0IG9mIHBsdWctaW5zIHRoYXQgaGF2ZSBnb29kIHF1YWxpdHkgYW5kIGNvcnJlY3QKKyAgZnVuY3Rpb25hbGl0eSwgYnV0IGRpc3RyaWJ1dGluZyB0aGVtIG1pZ2h0IHBvc2UgcHJvYmxlbXMuICBUaGUgbGljZW5zZQorICBvbiBlaXRoZXIgdGhlIHBsdWctaW5zIG9yIHRoZSBzdXBwb3J0aW5nIGxpYnJhcmllcyBtaWdodCBub3QgYmUgaG93IHdlJ2QKKyAgbGlrZS4gVGhlIGNvZGUgbWlnaHQgYmUgd2lkZWx5IGtub3duIHRvIHByZXNlbnQgcGF0ZW50IHByb2JsZW1zLgorCisgIC0gRGlzdHJpYnV0b3JzIHNob3VsZCBjaGVjayBpZiB0aGV5IHdhbnQvY2FuIHNoaXAgdGhlc2UgcGx1Zy1pbnMuCisgIC0gUGVvcGxlIHdyaXRpbmcgZWxlbWVudHMgc2hvdWxkIGJhc2UgdGhlaXIgY29kZSBvbiB0aGVzZSBlbGVtZW50cy4KKworLSBnc3QtcGx1Z2lucy1iYWQ6IGEgc2V0IG9mIHBsdWctaW5zIHRoYXQgYXJlbid0IHVwIHRvIHBhciBjb21wYXJlZCB0byB0aGUKKyAgcmVzdC4gIFRoZXkgbWlnaHQgYmUgY2xvc2UgdG8gYmVpbmcgZ29vZCBxdWFsaXR5LCBidXQgdGhleSdyZSBtaXNzaW5nCisgIHNvbWV0aGluZyAtIGJlIGl0IGEgZ29vZCBjb2RlIHJldmlldywgc29tZSBkb2N1bWVudGF0aW9uLCBhIHNldCBvZiB0ZXN0cywKKyAgYSByZWFsIGxpdmUgbWFpbnRhaW5lciwgb3Igc29tZSBhY3R1YWwgd2lkZSB1c2UuCisgIElmIHRoZSBibGFua3MgYXJlIGZpbGxlZCBpbiB0aGV5IG1pZ2h0IGJlIHVwZ3JhZGVkIHRvIGJlY29tZSBwYXJ0IG9mCisgIGVpdGhlciBnc3QtcGx1Z2lucy1nb29kIG9yIGdzdC1wbHVnaW5zLXVnbHksIGRlcGVuZGluZyBvbiB0aGUgb3RoZXIgZmFjdG9ycy4KKworICAtIElmIHRoZSBwbHVnLWlucyBicmVhaywgeW91IGNhbid0IGNvbXBsYWluIC0gaW5zdGVhZCwgeW91IGNhbiBmaXggdGhlCisgICAgcHJvYmxlbSBhbmQgc2VuZCB1cyBhIHBhdGNoLCBvciBicmliZSBzb21lb25lIGludG8gZml4aW5nIHRoZW0gZm9yIHlvdS4KKyAgLSBOZXcgY29udHJpYnV0b3JzIGNhbiBzdGFydCBoZXJlIGZvciB0aGluZ3MgdG8gd29yayBvbi4KKworUExBVEZPUk1TCistLS0tLS0tLS0KKworLSBMaW51eCBpcyBvZiBjb3Vyc2UgZnVsbHkgc3VwcG9ydGVkCistIEZyZWVCU0QgaXMgcmVwb3J0ZWQgdG8gd29yazsgb3RoZXIgQlNEJ3Mgc2hvdWxkIHdvcmsgdG9vCistIFNvbGFyaXMgaXMgcmVwb3J0ZWQgdG8gd29yazsgYSBzcGVjaWZpYyBzdW5hdWRpb3NpbmsgcGx1Z2luIGhhcyBiZWVuIHdyaXR0ZW4KKy0gTWFjT1NYIGlzIHJlcG9ydGVkIHRvIHdvcms7IHNwZWNpZmljIGF1ZGlvIGFuZCB2aWRlbyBzaW5rcyBoYXZlIGJlZW4gd3JpdHRlbgorLSBXaW5kb3dzIHN1cHBvcnQgaXMgZXhwZXJpbWVudGFsIGJ1dCBpbXByb3ZpbmcuICBPdXRwdXQgc2lua3MgaGF2ZSBiZWVuCisgIHdyaXR0ZW4gYnV0IGFyZSBub3QgeWV0IGluY2x1ZGVkIGluIHRoZSBjb2RlLiBXZSBzdXBwb3J0CisgIC0gTVN5cy9NaW5HVyBidWlsZHMKKyAgLSBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyA2IGJ1aWxkcyAoc2VlIHdpbjMyL1JFQURNRS50eHQpCisKK0lOU1RBTExJTkcgRlJPTSBQQUNLQUdFUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBzaG91bGQgYWx3YXlzIHByZWZlciBpbnN0YWxsaW5nIGZyb20gcGFja2FnZXMgZmlyc3QuICBHU3RyZWFtZXIgaXMKK3dlbGwtbWFpbnRhaW5lZCBmb3IgYSBudW1iZXIgb2YgZGlzdHJpYnV0aW9ucywgaW5jbHVkaW5nIEZlZG9yYSwgRGViaWFuLAorVWJ1bnR1LCBNYW5kcmFrZSwgR2VudG9vLCAuLi4KKworT25seSBpbiBjYXNlcyB3aGVyZSB5b3U6CistIHdhbnQgdG8gaGFjayBvbiBHU3RyZWFtZXIKKy0gd2FudCB0byB2ZXJpZnkgdGhhdCBhIGJ1ZyBoYXMgYmVlbiBmaXhlZAorLSBkbyBub3QgaGF2ZSBhIHNhbmUgZGlzdHJpYnV0aW9uCitzaG91bGQgeW91IGNob29zZSB0byBidWlsZCBmcm9tIHNvdXJjZSB0YXJiYWxscyBvciBnaXQuCisKK0ZpbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdmFyaW91cyBwYWNrYWdlcyBhdAoraHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZG93bmxvYWQvCisKK0NPTVBJTElORyBGUk9NIFNPVVJDRSBUQVJCQUxMUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0gYWdhaW4sIG1ha2Ugc3VyZSB0aGF0IHlvdSByZWFsbHkgbmVlZCB0byBpbnN0YWxsIGZyb20gc291cmNlICEKKyAgSWYgR1N0cmVhbWVyIGlzIG9uZSBvZiB5b3VyIGZpcnN0IHByb2plY3RzIGV2ZXIgdGhhdCB5b3UgYnVpbGQgZnJvbSBzb3VyY2UsCisgIGNvbnNpZGVyIHRha2luZyBvbiBhbiBlYXNpZXIgcHJvamVjdC4KKworLSBjaGVjayBvdXRwdXQgb2YgLi9jb25maWd1cmUgLS1oZWxwIHRvIHNlZSBpZiBhbnkgb3B0aW9ucyBhcHBseSB0byB5b3UKKy0gcnVuCisgIC4vY29uZmlndXJlCisgIG1ha2UKKworICB0byBidWlsZCBHU3RyZWFtZXIuCistIGlmIHlvdSB3YW50IHRvIGluc3RhbGwgaXQgKG5vdCByZXF1aXJlZCwgYnV0IHdoYXQgeW91IHVzdWFsbHkgd2FudCB0byBkbyksIHJ1bgorICBtYWtlIGluc3RhbGwKKworLSB0cnkgb3V0IGEgc2ltcGxlIHRlc3Q6CisgIGdzdC1sYXVuY2ggLXYgZmFrZXNyYyBudW1fYnVmZmVycz01ICEgZmFrZXNpbmsKKyAgKElmIHlvdSBkaWRuJ3QgaW5zdGFsbCBHU3RyZWFtZXIsIHByZWZpeCBnc3QtbGF1bmNoIHdpdGggdG9vbHMvKQorCisgIElmIGl0IG91dHB1dHMgYSBidW5jaCBvZiBtZXNzYWdlcyBmcm9tIGZha2VzcmMgYW5kIGZha2VzaW5rLCBldmVyeXRoaW5nIGlzCisgIG9rLgorCisgIElmIGl0IGRpZCBub3Qgd29yaywga2VlcCBpbiBtaW5kIHRoYXQgeW91IG1pZ2h0IG5lZWQgdG8gYWRqdXN0IHRoZQorICBQQVRIIGFuZC9vciBMRF9MSUJSQVJZX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIG1ha2UgdGhlIHN5c3RlbQorICBmaW5kIEdTdHJlYW1lciBpbiB0aGUgcHJlZml4IHdoZXJlIHlvdSBpbnN0YWxsZWQgKGJ5IGRlZmF1bHQgdGhhdCBpcyAvdXNyL2xvY2FsKS4KKworLSBBZnRlciB0aGlzLCB5b3UncmUgcmVhZHkgdG8gaW5zdGFsbCBnc3QtcGx1Z2lucywgd2hpY2ggd2lsbCBwcm92aWRlIHRoZQorICBmdW5jdGlvbmFsaXR5IHlvdSdyZSBwcm9iYWJseSBsb29raW5nIGZvciBieSBub3csIHNvIGdvIG9uIGFuZCByZWFkCisgIHRoYXQgUkVBRE1FLgorCitDT01QSUxJTkcgRlJPTSBHSVQKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGJ1aWxkaW5nIGZyb20gZ2l0IHNvdXJjZXMsIHlvdSB3aWxsIG5lZWQgdG8gcnVuIGF1dG9nZW4uc2ggdG8gZ2VuZXJhdGUgCit0aGUgYnVpbGQgc3lzdGVtIGZpbGVzLgorCitZb3Ugd2lsbCBuZWVkIGEgc2V0IG9mIGFkZGl0aW9uYWwgdG9vbHMgdHlwaWNhbCBmb3IgYnVpbGRpbmcgZnJvbSBnaXQsCitpbmNsdWRpbmc6CistIGF1dG9jb25mCistIGF1dG9tYWtlCistIGxpYnRvb2wKKworYXV0b2dlbi5zaCB3aWxsIGNoZWNrIGZvciByZWNlbnQgZW5vdWdoIHZlcnNpb25zIGFuZCBjb21wbGFpbiBpZiB5b3UgZG9uJ3QgaGF2ZQordGhlbS4gIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IHNwZWNpZmljIHZlcnNpb25zIG9mIGF1dG9tYWtlIGFuZCBhdXRvY29uZiB3aXRoCistLXdpdGgtYXV0b21ha2UgYW5kIC0td2l0aC1hdXRvY29uZgorCitDaGVjayBhdXRvZ2VuLnNoIG9wdGlvbnMgYnkgcnVubmluZyBhdXRvZ2VuLnNoIC0taGVscAorCithdXRvZ2VuLnNoIGNhbiBwYXNzIG9uIGFyZ3VtZW50cyB0byBjb25maWd1cmUgLSB5b3UganVzdCBuZWVkIHRvIHNlcGFyYXRlIHRoZW0KK2Zyb20gYXV0b2dlbi5zaCB3aXRoIC0tIGJldHdlZW4gdGhlIHR3by4KK3ByZWZpeCBoYXMgYmVlbiBhZGRlZCB0byBhdXRvZ2VuLnNoIGJ1dCB3aWxsIGJlIHBhc3NlZCBvbiB0byBjb25maWd1cmUgYmVjYXVzZQorc29tZSBidWlsZCBzY3JpcHRzIGxpa2UgdGhhdC4KKworV2hlbiB5b3UgaGF2ZSBkb25lIHRoaXMgb25jZSwgeW91IGNhbiB1c2UgYXV0b3JlZ2VuLnNoIHRvIHJlLWF1dG9nZW4gd2l0aAordGhlIGxhc3QgcGFzc2VkIG9wdGlvbnMgYXMgYSBoYW5keSBzaG9ydGN1dC4gIFVzZSBpdC4KKworQWZ0ZXIgdGhlIGF1dG9nZW4uc2ggc3RhZ2UsIHlvdSBjYW4gZm9sbG93IHRoZSBkaXJlY3Rpb25zIGxpc3RlZCBpbgorIkNPTVBJTElORyBGUk9NIFNPVVJDRSIKKworWW91IGNhbiBhbHNvIHJ1biB5b3VyIHdob2xlIGdpdCBzdGFjayB1bmluc3RhbGxlZC4gIFRoZSBzY3JpcHQgaW4KK3RoZSBnc3RyZWFtZXIgbW9kdWxlIC9zY3JpcHRzL2dzdC11bmluc3RhbGxlZCkgaXMgaGVscGZ1bCBpbiBzZXR0aW5nCit1cCB5b3VyIGVudmlyb25tZW50IGZvciB0aGlzLgorCitQTFVHLUlOIERFUEVOREVOQ0lFUyBBTkQgTElDRU5TRVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHU3RyZWFtZXIgaXMgZGV2ZWxvcGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTEdQTCAoc2VlIExJQ0VOU0UgZmlsZSBmb3IKK2RldGFpbHMpLiBTb21lIG9mIG91ciBwbHVnLWlucyBob3dldmVyIHJlbHkgb24gbGlicmFyaWVzIHdoaWNoIGFyZSBhdmFpbGFibGUKK3VuZGVyIG90aGVyIGxpY2Vuc2VzLiBUaGlzIG1lYW5zIHRoYXQgaWYgeW91IGFyZSBkaXN0cmlidXRpbmcgYW4gYXBwbGljYXRpb24KK3doaWNoIGhhcyBhIG5vbi1HUEwgY29tcGF0aWJsZSBsaWNlbnNlIChmb3IgaW5zdGFuY2UgYSBjbG9zZWQtc291cmNlCithcHBsaWNhdGlvbikgd2l0aCBHU3RyZWFtZXIsIHlvdSBoYXZlIHRvIG1ha2Ugc3VyZSBub3QgdG8gZGlzdHJpYnV0ZSBHUEwtbGlua2VkCitwbHVnLWlucy4KKworV2hlbiB1c2luZyBHUEwtbGlua2VkIHBsdWctaW5zLCBHU3RyZWFtZXIgaXMgZm9yIGFsbCBwcmFjdGljYWwgcmVhc29ucwordW5kZXIgdGhlIEdQTCBpdHNlbGYuCisKK0hJU1RPUlkKKy0tLS0tLS0KKworVGhlIGZ1bmRhbWVudGFsIGRlc2lnbiBjb21lcyBmcm9tIHRoZSB2aWRlbyBwaXBlbGluZSBhdCBPcmVnb24gR3JhZHVhdGUKK0luc3RpdHV0ZSwgYXMgd2VsbCBhcyBzb21lIGlkZWFzIGZyb20gRGlyZWN0TWVkaWEuICBJdCdzIGJhc2VkIG9uIHBsdWctaW5zIHRoYXQKK3dpbGwgcHJvdmlkZSB0aGUgdmFyaW91cyBjb2RlYyBhbmQgb3RoZXIgZnVuY3Rpb25hbGl0eS4gIFRoZSBpbnRlcmZhY2UKK2hvcGVmdWxseSBpcyBnZW5lcmljIGVub3VnaCBmb3IgdmFyaW91cyBjb21wYW5pZXMgKGFoZW0sIEFwcGxlKSB0byByZWxlYXNlCitiaW5hcnkgY29kZWNzIGZvciBMaW51eCwgdW50aWwgc3VjaCB0aW1lIGFzIHRoZXkgZ2V0IGEgY2x1ZSBhbmQgcmVsZWFzZSB0aGUKK3NvdXJjZS4KZGlmZiAtLWdpdCBhL1JFTEVBU0UgYi9SRUxFQVNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMWM4MDgKLS0tIC9kZXYvbnVsbAorKysgYi9SRUxFQVNFCkBAIC0wLDAgKzEsOTggQEAKKworUmVsZWFzZSBub3RlcyBmb3IgR1N0cmVhbWVywqAwLjExLjEgIlN3ZWV0IE5ldyBCbG9zc29tIgorICAgICAgICAKKworCitUaGUgR1N0cmVhbWVyIHRlYW0gaXMgcHJvdWQgdG8gYW5ub3VuY2UgYSBuZXcgcmVsZWFzZQoraW4gdGhlIDAuMTEueCB1bnN0YWJsZSBzZXJpZXMgb2YgdGhlCitjb3JlIG9mIHRoZSBHU3RyZWFtZXIgc3RyZWFtaW5nIG1lZGlhIGZyYW1ld29yay4KKworCitUaGUgMC4xMS54IHNlcmllcyBpcyBhbiB1bnN0YWJsZSBzZXJpZXMgdGFyZ2V0ZWQgYXQgZGV2ZWxvcGVycworSXQgaXMgbm90IEFQSSBvciBBQkkgY29tcGF0aWJsZSB3aXRoIHRoZSBzdGFibGUgMC4xMC54IHNlcmllcy4KK0l0IGlzLCBob3dldmVyLCBwYXJhbGxlbCBpbnN0YWxsYWJsZSB3aXRoIHRoZSAwLjEwLnggc2VyaWVzLgorCisKK1RoZSAwLjExLnggc2VyaWVzIGhhcyBpbXByb3ZlZCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZmVhdHVyZXMKK3ZhcmlvdXMgY2xlYW51cHMgYW5kIGVuaGFuY2VtZW50cy4KKworCitUaGlzIG1vZHVsZSwgZ3N0cmVhbWVyLCBvbmx5IGNvbnRhaW5zIGNvcmUgZnVuY3Rpb25hbGl0eS4KK0ZvciBhY3R1YWwgbWVkaWEgcGxheWJhY2ssIHlvdSB3aWxsIG5lZWQgb3RoZXIgbW9kdWxlcy4KKworZ3N0LXBsdWdpbnMtYmFzZQorY29udGFpbnMgYSBiYXNpYyBzZXQgb2Ygd2VsbC1zdXBwb3J0ZWQgcGx1Zy1pbnMKK2dzdC1wbHVnaW5zLWdvb2QKK2NvbnRhaW5zIGEgc2V0IG9mIHdlbGwtc3VwcG9ydGVkIHBsdWctaW5zIHVuZGVyIG91ciBwcmVmZXJyZWQgbGljZW5zZQorZ3N0LXBsdWdpbnMtdWdseQorY29udGFpbnMgYSBzZXQgb2Ygd2VsbC1zdXBwb3J0ZWQgcGx1Zy1pbnMsIGJ1dCBtaWdodCBwb3NlIHByb2JsZW1zIGZvcgorICAgIGRpc3RyaWJ1dG9ycworZ3N0LXBsdWdpbnMtYmFkCitjb250YWlucyBhIHNldCBvZiBsZXNzIHN1cHBvcnRlZCBwbHVnLWlucyB0aGF0IGhhdmVuJ3QgcGFzc2VkIHRoZQorICAgIHJpZ29yb3VzIHF1YWxpdHkgdGVzdGluZyB3ZSBleHBlY3QKKworCisKKyAgCisKK0ZlYXR1cmVzIG9mIHRoaXMgcmVsZWFzZQorICAgIAorICAgICAgKiBQYXJhbGxlbCBpbnN0YWxsYWJpbGl0eSB3aXRoIDAuMTAueCBzZXJpZXMKKyAgICAgICogUmVtb3ZlIG5lZ290aWF0aW9uIGZyb20gc3RhdGUgY2hhbmdlIGluIEdzdEJhc2VTcmMKKyAgICAgICogUmVtb3ZlZCBvdXIgY3VzdG9tIEZPVVJDQyB0eXBlCisgICAgICAqIFVwZGF0ZXMgdG8gdGhlIGJhc2UgY2xhc3NlcworVGhlcmUgd2VyZSBubyBidWdzIGZpeGVkIGluIHRoaXMgcmVsZWFzZQorICAgIAorCitEb3dubG9hZAorCitZb3UgY2FuIGZpbmQgc291cmNlIHJlbGVhc2VzIG9mIGdzdHJlYW1lciBpbiB0aGUgZG93bmxvYWQgZGlyZWN0b3J5OgoraHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci8KKworR1N0cmVhbWVyIEhvbWVwYWdlCisKK01vcmUgZGV0YWlscyBjYW4gYmUgZm91bmQgb24gdGhlIHByb2plY3QncyB3ZWJzaXRlOgoraHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvCisKK1N1cHBvcnQgYW5kIEJ1Z3MKKworV2UgdXNlIEdOT01FJ3MgYnVnemlsbGEgZm9yIGJ1ZyByZXBvcnRzIGFuZCBmZWF0dXJlIHJlcXVlc3RzOgoraHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9R1N0cmVhbWVyCisKK0RldmVsb3BlcnMKKworR1N0cmVhbWVyIGlzIHN0b3JlZCBpbiBHaXQsIGhvc3RlZCBhdCBnaXQuZnJlZWRlc2t0b3Aub3JnLCBhbmQgY2FuIGJlIGNsb25lZCBmcm9tIHRoZXJlLgorSW50ZXJlc3RlZCBkZXZlbG9wZXJzIG9mIHRoZSBjb3JlIGxpYnJhcnksIHBsdWctaW5zLCBhbmQgYXBwbGljYXRpb25zIHNob3VsZAorc3Vic2NyaWJlIHRvIHRoZSBnc3RyZWFtZXItZGV2ZWwgbGlzdC4gSWYgdGhlcmUgaXMgc3VmZmljaWVudCBpbnRlcmVzdCB3ZQord2lsbCBjcmVhdGUgbW9yZSBsaXN0cyBhcyBuZWNlc3NhcnkuCisKKyAgICAgICAgCitBcHBsaWNhdGlvbnMKKworTm8gYXBwbGljYXRpb25zIGFyZSBwb3J0ZWQgdG8gMC4xMSBhcyBvZiB5ZXQuIFdlIGFyZSBsb29raW5nIGZvciBtb3JlIHBlb3BsZSB0bworcG9ydCBwbHVnaW5zIGFuZCBhcHBsaWNhdGlvbnMuCisKKyAgCitDb250cmlidXRvcnMgdG8gdGhpcyByZWxlYXNlCisgICAgCisgICAgICAqIERhdmlkIFNjaGxlZWYKKyAgICAgICogRWR3YXJkIEhlcnZleQorICAgICAgKiBGYWJyaXppbyAoTWlzdG8pIE1pbG8KKyAgICAgICogR3VpbGxhdW1lIERlc21vdHRlcworICAgICAgKiBKb3NlcCBUb3JyYQorICAgICAgKiBNYXJrIE5hdXdlbGFlcnRzCisgICAgICAqIE5pY29sYXMgRHVmcmVzbmUKKyAgICAgICogUGV0ZXJpcyBLcmlzamFuaXMKKyAgICAgICogUGlvdHIgRnVzaWsKKyAgICAgICogUmFpbW8gSsOkcnZpCisgICAgICAqIFNlYmFzdGlhbiBEcsO2Z2UKKyAgICAgICogU2hhdW4gSG9vcGVzCisgICAgICAqIFNqb2VyZCBTaW1vbnMKKyAgICAgICogU3RhcyBTZXJnZWV2CisgICAgICAqIFN0ZWZhbiBLb3N0CisgICAgICAqIFN0ZWZhbiBTYXVlcgorICAgICAgKiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlCisgICAgICAqIFRpbS1QaGlsaXBwIE3DvGxsZXIKKyAgICAgICogVmluY2VudCBQZW5xdWVyYydoCisgICAgICAqIFdpbSBUYXltYW5zCivCoApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1RPRE8gYi9UT0RPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9UT0RPCmRpZmYgLS1naXQgYS9hY2xvY2FsLm00IGIvYWNsb2NhbC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNThkMjhiCi0tLSAvZGV2L251bGwKKysrIGIvYWNsb2NhbC5tNApAQCAtMCwwICsxLDExMjkgQEAKKyMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgYWNsb2NhbCAxLjExLjEgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwKKyMgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK200X2lmbmRlZihbQUNfQVVUT0NPTkZfVkVSU0lPTl0sCisgIFttNF9jb3B5KFttNF9QQUNLQUdFX1ZFUlNJT05dLCBbQUNfQVVUT0NPTkZfVkVSU0lPTl0pXSlkbmwKK200X2lmKG00X2RlZm4oW0FDX0FVVE9DT05GX1ZFUlNJT05dKSwgWzIuNjddLCwKK1ttNF93YXJuaW5nKFt0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgYXV0b2NvbmYgMi42Ny4KK1lvdSBoYXZlIGFub3RoZXIgdmVyc2lvbiBvZiBhdXRvY29uZi4gIEl0IG1heSB3b3JrLCBidXQgaXMgbm90IGd1YXJhbnRlZWQgdG8uCitJZiB5b3UgaGF2ZSBwcm9ibGVtcywgeW91IG1heSBuZWVkIHRvIHJlZ2VuZXJhdGUgdGhlIGJ1aWxkIHN5c3RlbSBlbnRpcmVseS4KK1RvIGRvIHNvLCB1c2UgdGhlIHByb2NlZHVyZSBkb2N1bWVudGVkIGJ5IHRoZSBwYWNrYWdlLCB0eXBpY2FsbHkgYGF1dG9yZWNvbmYnLl0pXSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fQVVUT01BS0VfVkVSU0lPTihWRVJTSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEF1dG9tYWtlIFguWSB0cmFjZXMgdGhpcyBtYWNybyB0byBlbnN1cmUgYWNsb2NhbC5tNCBoYXMgYmVlbgorIyBnZW5lcmF0ZWQgZnJvbSB0aGUgbTQgZmlsZXMgYWNjb21wYW55aW5nIEF1dG9tYWtlIFguWS4KKyMgKFRoaXMgcHJpdmF0ZSBtYWNybyBzaG91bGQgbm90IGJlIGNhbGxlZCBvdXRzaWRlIHRoaXMgZmlsZS4pCitBQ19ERUZVTihbQU1fQVVUT01BS0VfVkVSU0lPTl0sCitbYW1fX2FwaV92ZXJzaW9uPScxLjExJworZG5sIFNvbWUgdXNlcnMgZmluZCBBTV9BVVRPTUFLRV9WRVJTSU9OIGFuZCBtaXN0YWtlIGl0IGZvciBhIHdheSB0bworZG5sIHJlcXVpcmUgc29tZSBtaW5pbXVtIHZlcnNpb24uICBQb2ludCB0aGVtIHRvIHRoZSByaWdodCBtYWNyby4KK200X2lmKFskMV0sIFsxLjExLjFdLCBbXSwKKyAgICAgIFtBQ19GQVRBTChbRG8gbm90IGNhbGwgJDAsIHVzZSBBTV9JTklUX0FVVE9NQUtFKFskMV0pLl0pXSlkbmwKK10pCisKKyMgX0FNX0FVVE9DT05GX1ZFUlNJT04oVkVSU0lPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgYWNsb2NhbCB0cmFjZXMgdGhpcyBtYWNybyB0byBmaW5kIHRoZSBBdXRvY29uZiB2ZXJzaW9uLgorIyBUaGlzIGlzIGEgcHJpdmF0ZSBtYWNybyB0b28uICBVc2luZyBtNF9kZWZpbmUgc2ltcGxpZmllcworIyB0aGUgbG9naWMgaW4gYWNsb2NhbCwgd2hpY2ggY2FuIHNpbXBseSBpZ25vcmUgdGhpcyBkZWZpbml0aW9uLgorbTRfZGVmaW5lKFtfQU1fQVVUT0NPTkZfVkVSU0lPTl0sIFtdKQorCisjIEFNX1NFVF9DVVJSRU5UX0FVVE9NQUtFX1ZFUlNJT04KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDYWxsIEFNX0FVVE9NQUtFX1ZFUlNJT04gYW5kIEFNX0FVVE9NQUtFX1ZFUlNJT04gc28gdGhleSBjYW4gYmUgdHJhY2VkLgorIyBUaGlzIGZ1bmN0aW9uIGlzIEFDX1JFUVVJUkVkIGJ5IEFNX0lOSVRfQVVUT01BS0UuCitBQ19ERUZVTihbQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTl0sCitbQU1fQVVUT01BS0VfVkVSU0lPTihbMS4xMS4xXSlkbmwKK200X2lmbmRlZihbQUNfQVVUT0NPTkZfVkVSU0lPTl0sCisgIFttNF9jb3B5KFttNF9QQUNLQUdFX1ZFUlNJT05dLCBbQUNfQVVUT0NPTkZfVkVSU0lPTl0pXSlkbmwKK19BTV9BVVRPQ09ORl9WRVJTSU9OKG00X2RlZm4oW0FDX0FVVE9DT05GX1ZFUlNJT05dKSldKQorCisjIEZpZ3VyZSBvdXQgaG93IHRvIHJ1biB0aGUgYXNzZW1ibGVyLiAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA1CisKKyMgQU1fUFJPR19BUworIyAtLS0tLS0tLS0tCitBQ19ERUZVTihbQU1fUFJPR19BU10sCitbIyBCeSBkZWZhdWx0IHdlIHNpbXBseSB1c2UgdGhlIEMgY29tcGlsZXIgdG8gYnVpbGQgYXNzZW1ibHkgY29kZS4KK0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQordGVzdCAiJHtDQ0FTK3NldH0iID0gc2V0IHx8IENDQVM9JENDCit0ZXN0ICIke0NDQVNGTEFHUytzZXR9IiA9IHNldCB8fCBDQ0FTRkxBR1M9JENGTEFHUworQUNfQVJHX1ZBUihbQ0NBU10sICAgICAgW2Fzc2VtYmxlciBjb21waWxlciBjb21tYW5kIChkZWZhdWx0cyB0byBDQyldKQorQUNfQVJHX1ZBUihbQ0NBU0ZMQUdTXSwgW2Fzc2VtYmxlciBjb21waWxlciBmbGFncyAoZGVmYXVsdHMgdG8gQ0ZMQUdTKV0pCitfQU1fSUZfT1BUSU9OKFtuby1kZXBlbmRlbmNpZXNdLCwgW19BTV9ERVBFTkRFTkNJRVMoW0NDQVNdKV0pZG5sCitdKQorCisjIEFNX0FVWF9ESVJfRVhQQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzLCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEZvciBwcm9qZWN0cyB1c2luZyBBQ19DT05GSUdfQVVYX0RJUihbZm9vXSksIEF1dG9jb25mIHNldHMKKyMgJGFjX2F1eF9kaXIgdG8gYCRzcmNkaXIvZm9vJy4gIEluIG90aGVyIHByb2plY3RzLCBpdCBpcyBzZXQgdG8KKyMgYCRzcmNkaXInLCBgJHNyY2Rpci8uLicsIG9yIGAkc3JjZGlyLy4uLy4uJy4KKyMKKyMgT2YgY291cnNlLCBBdXRvbWFrZSBtdXN0IGhvbm9yIHRoaXMgdmFyaWFibGUgd2hlbmV2ZXIgaXQgY2FsbHMgYQorIyB0b29sIGZyb20gdGhlIGF1eGlsaWFyeSBkaXJlY3RvcnkuICBUaGUgcHJvYmxlbSBpcyB0aGF0ICRzcmNkaXIgKGFuZAorIyB0aGVyZWZvcmUgJGFjX2F1eF9kaXIgYXMgd2VsbCkgY2FuIGJlIGVpdGhlciBhYnNvbHV0ZSBvciByZWxhdGl2ZSwKKyMgZGVwZW5kaW5nIG9uIGhvdyBjb25maWd1cmUgaXMgcnVuLiAgVGhpcyBpcyBwcmV0dHkgYW5ub3lpbmcsIHNpbmNlCisjIGl0IG1ha2VzICRhY19hdXhfZGlyIHF1aXRlIHVudXNhYmxlIGluIHN1YmRpcmVjdG9yaWVzOiBpbiB0aGUgdG9wCisjIHNvdXJjZSBkaXJlY3RvcnksIGFueSBmb3JtIHdpbGwgd29yayBmaW5lLCBidXQgaW4gc3ViZGlyZWN0b3JpZXMgYQorIyByZWxhdGl2ZSBwYXRoIG5lZWRzIHRvIGJlIGFkanVzdGVkIGZpcnN0LgorIworIyAkYWNfYXV4X2Rpci9taXNzaW5nCisjICAgIGZhaWxzIHdoZW4gY2FsbGVkIGZyb20gYSBzdWJkaXJlY3RvcnkgaWYgJGFjX2F1eF9kaXIgaXMgcmVsYXRpdmUKKyMgJHRvcF9zcmNkaXIvJGFjX2F1eF9kaXIvbWlzc2luZworIyAgICBmYWlscyBpZiAkYWNfYXV4X2RpciBpcyBhYnNvbHV0ZSwKKyMgICAgZmFpbHMgd2hlbiBjYWxsZWQgZnJvbSBhIHN1YmRpcmVjdG9yeSBpbiBhIFZQQVRIIGJ1aWxkIHdpdGgKKyMgICAgICAgICAgYSByZWxhdGl2ZSAkYWNfYXV4X2RpcgorIworIyBUaGUgcmVhc29uIG9mIHRoZSBsYXR0ZXIgZmFpbHVyZSBpcyB0aGF0ICR0b3Bfc3JjZGlyIGFuZCAkYWNfYXV4X2RpcgorIyBhcmUgYm90aCBwcmVmaXhlZCBieSAkc3JjZGlyLiAgSW4gYW4gaW4tc291cmNlIGJ1aWxkIHRoaXMgaXMgdXN1YWxseQorIyBoYXJtbGVzcyBiZWNhdXNlICRzcmNkaXIgaXMgYC4nLCBidXQgdGhpbmdzIHdpbGwgYnJva2Ugd2hlbiB5b3UKKyMgc3RhcnQgYSBWUEFUSCBidWlsZCBvciB1c2UgYW4gYWJzb2x1dGUgJHNyY2Rpci4KKyMKKyMgU28gd2UgY291bGQgdXNlIHNvbWV0aGluZyBzaW1pbGFyIHRvICR0b3Bfc3JjZGlyLyRhY19hdXhfZGlyL21pc3NpbmcsCisjIGlmZiB3ZSBzdHJpcCB0aGUgbGVhZGluZyAkc3JjZGlyIGZyb20gJGFjX2F1eF9kaXIuICBUaGF0IHdvdWxkIGJlOgorIyAgIGFtX2F1eF9kaXI9J1wkKHRvcF9zcmNkaXIpLydgZXhwciAiJGFjX2F1eF9kaXIiIDogIiRzcmNkaXIvLypcKC4qXCkiYAorIyBhbmQgdGhlbiB3ZSB3b3VsZCBkZWZpbmUgJE1JU1NJTkcgYXMKKyMgICBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIKKyMgVGhpcyB3aWxsIHdvcmsgYXMgbG9uZyBhcyBNSVNTSU5HIGlzIG5vdCBjYWxsZWQgZnJvbSBjb25maWd1cmUsIGJlY2F1c2UKKyMgdW5mb3J0dW5hdGVseSAkKHRvcF9zcmNkaXIpIGhhcyBubyBtZWFuaW5nIGluIGNvbmZpZ3VyZS4KKyMgSG93ZXZlciB0aGVyZSBhcmUgb3RoZXIgdmFyaWFibGVzLCBsaWtlIENDLCB3aGljaCBhcmUgb2Z0ZW4gdXNlZCBpbgorIyBjb25maWd1cmUsIGFuZCBjb3VsZCB0aGVyZWZvcmUgbm90IHVzZSB0aGlzICJmaXhlZCIgJGFjX2F1eF9kaXIuCisjCisjIEFub3RoZXIgc29sdXRpb24sIHVzZWQgaGVyZSwgaXMgdG8gYWx3YXlzIGV4cGFuZCAkYWNfYXV4X2RpciB0byBhbgorIyBhYnNvbHV0ZSBQQVRILiAgVGhlIGRyYXdiYWNrIGlzIHRoYXQgdXNpbmcgYWJzb2x1dGUgcGF0aHMgcHJldmVudCBhCisjIGNvbmZpZ3VyZWQgdHJlZSB0byBiZSBtb3ZlZCB3aXRob3V0IHJlY29uZmlndXJhdGlvbi4KKworQUNfREVGVU4oW0FNX0FVWF9ESVJfRVhQQU5EXSwKK1tkbmwgUmVseSBvbiBhdXRvY29uZiB0byBzZXQgdXAgQ0RQQVRIIHByb3Blcmx5LgorQUNfUFJFUkVRKFsyLjUwXSlkbmwKKyMgZXhwYW5kICRhY19hdXhfZGlyIHRvIGFuIGFic29sdXRlIHBhdGgKK2FtX2F1eF9kaXI9YGNkICRhY19hdXhfZGlyICYmIHB3ZGAKK10pCisKKyMgQU1fQ09ORElUSU9OQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTcsIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgOQorCisjIEFNX0NPTkRJVElPTkFMKE5BTUUsIFNIRUxMLUNPTkRJVElPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgYSBjb25kaXRpb25hbC4KK0FDX0RFRlVOKFtBTV9DT05ESVRJT05BTF0sCitbQUNfUFJFUkVRKDIuNTIpZG5sCisgaWZlbHNlKFskMV0sIFtUUlVFXSwgIFtBQ19GQVRBTChbJDA6IGludmFsaWQgY29uZGl0aW9uOiAkMV0pXSwKKwlbJDFdLCBbRkFMU0VdLCBbQUNfRkFUQUwoWyQwOiBpbnZhbGlkIGNvbmRpdGlvbjogJDFdKV0pZG5sCitBQ19TVUJTVChbJDFfVFJVRV0pZG5sCitBQ19TVUJTVChbJDFfRkFMU0VdKWRubAorX0FNX1NVQlNUX05PVE1BS0UoWyQxX1RSVUVdKWRubAorX0FNX1NVQlNUX05PVE1BS0UoWyQxX0ZBTFNFXSlkbmwKK200X2RlZmluZShbX0FNX0NPTkRfVkFMVUVfJDFdLCBbJDJdKWRubAoraWYgJDI7IHRoZW4KKyAgJDFfVFJVRT0KKyAgJDFfRkFMU0U9JyMnCitlbHNlCisgICQxX1RSVUU9JyMnCisgICQxX0ZBTFNFPQorZmkKK0FDX0NPTkZJR19DT01NQU5EU19QUkUoCitbaWYgdGVzdCAteiAiJHskMV9UUlVFfSIgJiYgdGVzdCAteiAiJHskMV9GQUxTRX0iOyB0aGVuCisgIEFDX01TR19FUlJPUihbW2NvbmRpdGlvbmFsICIkMSIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS5dXSkKK2ZpXSldKQorCisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCAxMAorCisjIFRoZXJlIGFyZSBhIGZldyBkaXJ0eSBoYWNrcyBiZWxvdyB0byBhdm9pZCBsZXR0aW5nIGBBQ19QUk9HX0NDJyBiZQorIyB3cml0dGVuIGluIGNsZWFyLCBpbiB3aGljaCBjYXNlIGF1dG9tYWtlLCB3aGVuIHJlYWRpbmcgYWNsb2NhbC5tNCwKKyMgd2lsbCB0aGluayBpdCBzZWVzIGEgKnVzZSosIGFuZCB0aGVyZWZvcmUgd2lsbCB0cmlnZ2VyIGFsbCBpdCdzCisjIEMgc3VwcG9ydCBtYWNoaW5lcnkuICBBbHNvIG5vdGUgdGhhdCBpdCBtZWFucyB0aGF0IGF1dG9zY2FuLCBzZWVpbmcKKyMgQ0MgZXRjLiBpbiB0aGUgTWFrZWZpbGUsIHdpbGwgYXNrIGZvciBhbiBBQ19QUk9HX0NDIHVzZS4uLgorCisKKyMgX0FNX0RFUEVOREVOQ0lFUyhOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNlZSBob3cgdGhlIGNvbXBpbGVyIGltcGxlbWVudHMgZGVwZW5kZW5jeSBjaGVja2luZy4KKyMgTkFNRSBpcyAiQ0MiLCAiQ1hYIiwgIkdDSiIsIG9yICJPQkpDIi4KKyMgV2UgdHJ5IGEgZmV3IHRlY2huaXF1ZXMgYW5kIHVzZSB0aGF0IHRvIHNldCBhIHNpbmdsZSBjYWNoZSB2YXJpYWJsZS4KKyMKKyMgV2UgZG9uJ3QgQUNfUkVRVUlSRSB0aGUgY29ycmVzcG9uZGluZyBBQ19QUk9HX0NDIHNpbmNlIHRoZSBsYXR0ZXIgd2FzCisjIG1vZGlmaWVkIHRvIGludm9rZSBfQU1fREVQRU5ERU5DSUVTKENDKTsgd2Ugd291bGQgaGF2ZSBhIGNpcmN1bGFyCisjIGRlcGVuZGVuY3ksIGFuZCBnaXZlbiB0aGF0IHRoZSB1c2VyIGlzIG5vdCBleHBlY3RlZCB0byBydW4gdGhpcyBtYWNybywKKyMganVzdCByZWx5IG9uIEFDX1BST0dfQ0MuCitBQ19ERUZVTihbX0FNX0RFUEVOREVOQ0lFU10sCitbQUNfUkVRVUlSRShbQU1fU0VUX0RFUERJUl0pZG5sCitBQ19SRVFVSVJFKFtBTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10pZG5sCitBQ19SRVFVSVJFKFtBTV9NQUtFX0lOQ0xVREVdKWRubAorQUNfUkVRVUlSRShbQU1fREVQX1RSQUNLXSlkbmwKKworaWZlbHNlKFskMV0sIENDLCAgIFtkZXBjYz0iJENDIiAgIGFtX2NvbXBpbGVyX2xpc3Q9XSwKKyAgICAgICBbJDFdLCBDWFgsICBbZGVwY2M9IiRDWFgiICBhbV9jb21waWxlcl9saXN0PV0sCisgICAgICAgWyQxXSwgT0JKQywgW2RlcGNjPSIkT0JKQyIgYW1fY29tcGlsZXJfbGlzdD0nZ2NjMyBnY2MnXSwKKyAgICAgICBbJDFdLCBVUEMsICBbZGVwY2M9IiRVUEMiICBhbV9jb21waWxlcl9saXN0PV0sCisgICAgICAgWyQxXSwgR0NKLCAgW2RlcGNjPSIkR0NKIiAgYW1fY29tcGlsZXJfbGlzdD0nZ2NjMyBnY2MnXSwKKyAgICAgICAgICAgICAgICAgICBbZGVwY2M9IiQkMSIgICBhbV9jb21waWxlcl9saXN0PV0pCisKK0FDX0NBQ0hFX0NIRUNLKFtkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjY10sCisgICAgICAgICAgICAgICBbYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGVdLAorW2lmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KKyAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAorICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgorICAjIGluc3RhbmNlIGl0IHdhcyByZXBvcnRlZCB0aGF0IG9uIEhQLVVYIHRoZSBnY2MgdGVzdCB3aWxsIGVuZCB1cAorICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgYEQnIC0tIGJlY2F1c2UgYC1NRCcgbWVhbnMgYHB1dCB0aGUgb3V0cHV0CisgICMgaW4gRCcuCisgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorICAjIENvcHkgZGVwY29tcCB0byBzdWJkaXIgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd29uJ3QgZmluZCBpdCBpZiB3ZSdyZQorICAjIHVzaW5nIGEgcmVsYXRpdmUgZGlyZWN0b3J5LgorICBjcCAiJGFtX2RlcGNvbXAiIGNvbmZ0ZXN0LmRpcgorICBjZCBjb25mdGVzdC5kaXIKKyAgIyBXZSB3aWxsIGJ1aWxkIG9iamVjdHMgYW5kIGRlcGVuZGVuY2llcyBpbiBhIHN1YmRpcmVjdG9yeSBiZWNhdXNlCisgICMgaXQgaGVscHMgdG8gZGV0ZWN0IGluYXBwbGljYWJsZSBkZXBlbmRlbmN5IG1vZGVzLiAgRm9yIGluc3RhbmNlCisgICMgYm90aCBUcnU2NCdzIGNjIGFuZCBJQ0Mgc3VwcG9ydCAtTUQgdG8gb3V0cHV0IGRlcGVuZGVuY2llcyBhcyBhCisgICMgc2lkZSBlZmZlY3Qgb2YgY29tcGlsYXRpb24sIGJ1dCBJQ0Mgd2lsbCBwdXQgdGhlIGRlcGVuZGVuY2llcyBpbgorICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGlsZSBUcnU2NCB3aWxsIHB1dCB0aGVtIGluIHRoZSBvYmplY3QKKyAgIyBkaXJlY3RvcnkuCisgIG1rZGlyIHN1YgorCisgIGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKKyAgaWYgdGVzdCAiJGFtX2NvbXBpbGVyX2xpc3QiID0gIiI7IHRoZW4KKyAgICAgYW1fY29tcGlsZXJfbGlzdD1gc2VkIC1uIFsncy9eIypcKFthLXpBLVowLTldKlwpKSQvXDEvcCddIDwgLi9kZXBjb21wYAorICBmaQorICBhbV9fdW5pdmVyc2FsPWZhbHNlCisgIG00X2Nhc2UoWyQxXSwgW0NDXSwKKyAgICBbY2FzZSAiICRkZXBjYyAiIGluICMoCisgICAgICpcIC1hcmNoXCAqXCAtYXJjaFwgKikgYW1fX3VuaXZlcnNhbD10cnVlIDs7CisgICAgIGVzYWNdLAorICAgIFtDWFhdLAorICAgIFtjYXNlICIgJGRlcGNjICIgaW4gIygKKyAgICAgKlwgLWFyY2hcICpcIC1hcmNoXCAqKSBhbV9fdW5pdmVyc2FsPXRydWUgOzsKKyAgICAgZXNhY10pCisKKyAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCisgICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCisgICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAorICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KKyAgICAjCisgICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKKyAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgorICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgorICAgIDogPiBzdWIvY29uZnRlc3QuYworICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbworICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYworICAgICAgIyBVc2luZyBgOiA+IHN1Yi9jb25mdHN0JGkuaCcgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKKyAgICAgICMgU29sYXJpcyA4J3Mgey91c3IsfS9iaW4vc2guCisgICAgICB0b3VjaCBzdWIvY29uZnRzdCRpLmgKKyAgICBkb25lCisgICAgZWNobyAiJHthbV9faW5jbHVkZX0gJHthbV9fcXVvdGV9c3ViL2NvbmZ0ZXN0LlBvJHthbV9fcXVvdGV9IiA+IGNvbmZtZgorCisgICAgIyBXZSBjaGVjayB3aXRoIGAtYycgYW5kIGAtbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCisgICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKKyAgICAjIGhhbmRsZSBgLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4gIEFsc28sIHNvbWUgSW50ZWwKKyAgICAjIHZlcnNpb25zIGhhZCB0cm91YmxlIHdpdGggb3V0cHV0IGluIHN1YmRpcnMKKyAgICBhbV9fb2JqPXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfQorICAgIGFtX19taW51c19vYmo9Ii1vICRhbV9fb2JqIgorICAgIGNhc2UgJGRlcG1vZGUgaW4KKyAgICBnY2MpCisgICAgICAjIFRoaXMgZGVwbW9kZSBjYXVzZXMgYSBjb21waWxlciByYWNlIGluIHVuaXZlcnNhbCBtb2RlLgorICAgICAgdGVzdCAiJGFtX191bml2ZXJzYWwiID0gZmFsc2UgfHwgY29udGludWUKKyAgICAgIDs7CisgICAgbm9zaWRlZWZmZWN0KQorICAgICAgIyBhZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCisgICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkCisgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZWxzZQorCWJyZWFrCisgICAgICBmaQorICAgICAgOzsKKyAgICBtc3Zpc3VhbGNwcCB8IG1zdmNtc3lzKQorICAgICAgIyBUaGlzIGNvbXBpbGVyIHdvbid0IGdyb2sgYC1jIC1vJywgYnV0IGFsc28sIHRoZSBtaW51c28gdGVzdCBoYXMKKyAgICAgICMgbm90IHJ1biB5ZXQuICBUaGVzZSBkZXBtb2RlcyBhcmUgbGF0ZSBlbm91Z2ggaW4gdGhlIGdhbWUsIGFuZAorICAgICAgIyBzbyB3ZWFrIHRoYXQgdGhlaXIgZnVuY3Rpb25pbmcgc2hvdWxkIG5vdCBiZSBpbXBhY3RlZC4KKyAgICAgIGFtX19vYmo9Y29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICAgIGFtX19taW51c19vYmo9CisgICAgICA7OworICAgIG5vbmUpIGJyZWFrIDs7CisgICAgZXNhYworICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAorICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9JGFtX19vYmogXAorICAgICAgIGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlBvIHRtcGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlRQbyBcCisgICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgJGFtX19taW51c19vYmogc3ViL2NvbmZ0ZXN0LmMgXAorICAgICAgICAgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0LmVyciAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3QxLmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwIHN1Yi9jb25mdHN0Ni5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgZ3JlcCAkYW1fX29iaiBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgICR7TUFLRS1tYWtlfSAtcyAtZiBjb25mbWYgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgIyBpY2MgZG9lc24ndCBjaG9rZSBvbiB1bmtub3duIG9wdGlvbnMsIGl0IHdpbGwganVzdCBpc3N1ZSB3YXJuaW5ncworICAgICAgIyBvciByZW1hcmtzIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKKyAgICAgICMgdGhhdCBzYXlzIGFuIG9wdGlvbiB3YXMgaWdub3JlZCBvciBub3Qgc3VwcG9ydGVkLgorICAgICAgIyBXaGVuIGdpdmVuIC1NUCwgaWNjIDcuMCBhbmQgNy4xIGNvbXBsYWluIHRodXNseToKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSB3YXJuaW5nOiBpZ25vcmluZyBvcHRpb24gJy1NJzsgbm8gYXJndW1lbnQgcmVxdWlyZWQKKyAgICAgICMgVGhlIGRpYWdub3NpcyBjaGFuZ2VkIGluIGljYyA4LjA6CisgICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgcmVtYXJrOiBvcHRpb24gJy1NUCcgbm90IHN1cHBvcnRlZAorICAgICAgaWYgKGdyZXAgJ2lnbm9yaW5nIG9wdGlvbicgY29uZnRlc3QuZXJyIHx8CisgICAgICAgICAgZ3JlcCAnbm90IHN1cHBvcnRlZCcgY29uZnRlc3QuZXJyKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICAgICAgICBhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT0kZGVwbW9kZQorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBmaQorICBkb25lCisKKyAgY2QgLi4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorZWxzZQorICBhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCitmaQorXSkKK0FDX1NVQlNUKFskMURFUE1PREVdLCBbZGVwbW9kZT0kYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGVdKQorQU1fQ09ORElUSU9OQUwoW2FtX19mYXN0ZGVwJDFdLCBbCisgIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCisgICYmIHRlc3QgIiRhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzXSkKK10pCisKKworIyBBTV9TRVRfREVQRElSCisjIC0tLS0tLS0tLS0tLS0KKyMgQ2hvb3NlIGEgZGlyZWN0b3J5IG5hbWUgZm9yIGRlcGVuZGVuY3kgZmlsZXMuCisjIFRoaXMgbWFjcm8gaXMgQUNfUkVRVUlSRWQgaW4gX0FNX0RFUEVOREVOQ0lFUworQUNfREVGVU4oW0FNX1NFVF9ERVBESVJdLAorW0FDX1JFUVVJUkUoW0FNX1NFVF9MRUFESU5HX0RPVF0pZG5sCitBQ19TVUJTVChbREVQRElSXSwgWyIke2FtX19sZWFkaW5nX2RvdH1kZXBzIl0pZG5sCitdKQorCisKKyMgQU1fREVQX1RSQUNLCisjIC0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FNX0RFUF9UUkFDS10sCitbQUNfQVJHX0VOQUJMRShkZXBlbmRlbmN5LXRyYWNraW5nLAorWyAgLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgIHNwZWVkcyB1cCBvbmUtdGltZSBidWlsZAorICAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nICAgZG8gbm90IHJlamVjdCBzbG93IGRlcGVuZGVuY3kgZXh0cmFjdG9yc10pCitpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm87IHRoZW4KKyAgYW1fZGVwY29tcD0iJGFjX2F1eF9kaXIvZGVwY29tcCIKKyAgQU1ERVBCQUNLU0xBU0g9J1wnCitmaQorQU1fQ09ORElUSU9OQUwoW0FNREVQXSwgW3Rlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhub10pCitBQ19TVUJTVChbQU1ERVBCQUNLU0xBU0hdKWRubAorX0FNX1NVQlNUX05PVE1BS0UoW0FNREVQQkFDS1NMQVNIXSlkbmwKK10pCisKKyMgR2VuZXJhdGUgY29kZSB0byBzZXQgdXAgZGVwZW5kZW5jeSB0cmFja2luZy4gICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDgKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworI3NlcmlhbCA1CisKKyMgX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10sCitbeworICAjIEF1dG9jb25mIDIuNjIgcXVvdGVzIC0tZmlsZSBhcmd1bWVudHMgZm9yIGV2YWwsIGJ1dCBub3Qgd2hlbiBmaWxlcworICAjIGFyZSBsaXN0ZWQgd2l0aG91dCAtLWZpbGUuICBMZXQncyBwbGF5IHNhZmUgYW5kIG9ubHkgZW5hYmxlIHRoZSBldmFsCisgICMgaWYgd2UgZGV0ZWN0IHRoZSBxdW90aW5nLgorICBjYXNlICRDT05GSUdfRklMRVMgaW4KKyAgKlwnKikgZXZhbCBzZXQgeCAiJENPTkZJR19GSUxFUyIgOzsKKyAgKikgICBzZXQgeCAkQ09ORklHX0ZJTEVTIDs7CisgIGVzYWMKKyAgc2hpZnQKKyAgZm9yIG1mCisgIGRvCisgICAgIyBTdHJpcCBNRiBzbyB3ZSBlbmQgdXAgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KKyAgICBtZj1gZWNobyAiJG1mIiB8IHNlZCAtZSAncy86LiokLy8nYAorICAgICMgQ2hlY2sgd2hldGhlciB0aGlzIGlzIGFuIEF1dG9tYWtlIGdlbmVyYXRlZCBNYWtlZmlsZSBvciBub3QuCisgICAgIyBXZSB1c2VkIHRvIG1hdGNoIG9ubHkgdGhlIGZpbGVzIG5hbWVkIGBNYWtlZmlsZS5pbicsIGJ1dAorICAgICMgc29tZSBwZW9wbGUgcmVuYW1lIHRoZW07IHNvIGluc3RlYWQgd2UgbG9vayBhdCB0aGUgZmlsZSBjb250ZW50LgorICAgICMgR3JlcCdpbmcgdGhlIGZpcnN0IGxpbmUgaXMgbm90IGVub3VnaDogc29tZSBwZW9wbGUgcG9zdC1wcm9jZXNzCisgICAgIyBlYWNoIE1ha2VmaWxlLmluIGFuZCBhZGQgYSBuZXcgbGluZSBvbiB0b3Agb2YgZWFjaCBmaWxlIHRvIHNheSBzby4KKyAgICAjIEdyZXAnaW5nIHRoZSB3aG9sZSBmaWxlIGlzIG5vdCBnb29kIGVpdGhlcjogQUlYIGdyZXAgaGFzIGEgbGluZQorICAgICMgbGltaXQgb2YgMjA0OCwgYnV0IGFsbCBzZWQncyB3ZSBrbm93IGhhdmUgdW5kZXJzdGFuZCBhdCBsZWFzdCA0MDAwLgorICAgIGlmIHNlZCAtbiAncyxeIy4qZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlLiosWCxwJyAiJG1mIiB8IGdyZXAgWCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIGRpcnBhcnQ9YEFTX0RJUk5BTUUoIiRtZiIpYAorICAgIGVsc2UKKyAgICAgIGNvbnRpbnVlCisgICAgZmkKKyAgICAjIEV4dHJhY3QgdGhlIGRlZmluaXRpb24gb2YgREVQRElSLCBhbV9faW5jbHVkZSwgYW5kIGFtX19xdW90ZQorICAgICMgZnJvbSB0aGUgTWFrZWZpbGUgd2l0aG91dCBydW5uaW5nIGBtYWtlJy4KKyAgICBERVBESVI9YHNlZCAtbiAncy9eREVQRElSID0gLy9wJyA8ICIkbWYiYAorICAgIHRlc3QgLXogIiRERVBESVIiICYmIGNvbnRpbnVlCisgICAgYW1fX2luY2x1ZGU9YHNlZCAtbiAncy9eYW1fX2luY2x1ZGUgPSAvL3AnIDwgIiRtZiJgCisgICAgdGVzdCAteiAiYW1fX2luY2x1ZGUiICYmIGNvbnRpbnVlCisgICAgYW1fX3F1b3RlPWBzZWQgLW4gJ3MvXmFtX19xdW90ZSA9IC8vcCcgPCAiJG1mImAKKyAgICAjIFdoZW4gdXNpbmcgYW5zaTJrbnIsIFUgbWF5IGJlIGVtcHR5IG9yIGFuIHVuZGVyc2NvcmU7IGV4cGFuZCBpdAorICAgIFU9YHNlZCAtbiAncy9eVSA9IC8vcCcgPCAiJG1mImAKKyAgICAjIEZpbmQgYWxsIGRlcGVuZGVuY3kgb3V0cHV0IGZpbGVzLCB0aGV5IGFyZSBpbmNsdWRlZCBmaWxlcyB3aXRoCisgICAgIyAkKERFUERJUikgaW4gdGhlaXIgbmFtZXMuICBXZSBpbnZva2Ugc2VkIHR3aWNlIGJlY2F1c2UgaXQgaXMgdGhlCisgICAgIyBzaW1wbGVzdCBhcHByb2FjaCB0byBjaGFuZ2luZyAkKERFUERJUikgdG8gaXRzIGFjdHVhbCB2YWx1ZSBpbiB0aGUKKyAgICAjIGV4cGFuc2lvbi4KKyAgICBmb3IgZmlsZSBpbiBgc2VkIC1uICIKKyAgICAgIHMvXiRhbV9faW5jbHVkZSAkYW1fX3F1b3RlXCguKihERVBESVIpLipcKSRhbV9fcXVvdGUiJyQvXDEvcCcgPCIkbWYiIHwgXAorCSBzZWQgLWUgJ3MvXCQoREVQRElSKS8nIiRERVBESVIiJy9nJyAtZSAncy9cJFUvJyIkVSInL2cnYDsgZG8KKyAgICAgICMgTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzLgorICAgICAgdGVzdCAtZiAiJGRpcnBhcnQvJGZpbGUiICYmIGNvbnRpbnVlCisgICAgICBmZGlyPWBBU19ESVJOQU1FKFsiJGZpbGUiXSlgCisgICAgICBBU19NS0RJUl9QKFskZGlycGFydC8kZmRpcl0pCisgICAgICAjIGVjaG8gImNyZWF0aW5nICRkaXJwYXJ0LyRmaWxlIgorICAgICAgZWNobyAnIyBkdW1teScgPiAiJGRpcnBhcnQvJGZpbGUiCisgICAgZG9uZQorICBkb25lCit9CitdKSMgX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTCisKKworIyBBTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGlzIG1hY3JvIHNob3VsZCBvbmx5IGJlIGludm9rZWQgb25jZSAtLSB1c2UgdmlhIEFDX1JFUVVJUkUuCisjCisjIFRoaXMgY29kZSBpcyBvbmx5IHJlcXVpcmVkIHdoZW4gYXV0b21hdGljIGRlcGVuZGVuY3kgdHJhY2tpbmcKKyMgaXMgZW5hYmxlZC4gIEZJWE1FLiAgVGhpcyBjcmVhdGVzIGVhY2ggYC5QJyBmaWxlIHRoYXQgd2Ugd2lsbAorIyBuZWVkIGluIG9yZGVyIHRvIGJvb3RzdHJhcCB0aGUgZGVwZW5kZW5jeSBoYW5kbGluZyBjb2RlLgorQUNfREVGVU4oW0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTXSwKK1tBQ19DT05GSUdfQ09NTUFORFMoW2RlcGZpbGVzXSwKKyAgICAgW3Rlc3QgeCIkQU1ERVBfVFJVRSIgIT0geCIiIHx8IF9BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10sCisgICAgIFtBTURFUF9UUlVFPSIkQU1ERVBfVFJVRSIgYWNfYXV4X2Rpcj0iJGFjX2F1eF9kaXIiXSkKK10pCisKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA1CisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDgKKworIyBBTV9DT05GSUdfSEVBREVSIGlzIG9ic29sZXRlLiAgSXQgaGFzIGJlZW4gcmVwbGFjZWQgYnkgQUNfQ09ORklHX0hFQURFUlMuCitBVV9ERUZVTihbQU1fQ09ORklHX0hFQURFUl0sIFtBQ19DT05GSUdfSEVBREVSUygkQCldKQorCisjIERvIGFsbCB0aGUgd29yayBmb3IgQXV0b21ha2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LAorIyAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDE2CisKKyMgVGhpcyBtYWNybyBhY3R1YWxseSBkb2VzIHRvbyBtdWNoLiAgU29tZSBjaGVja3MgYXJlIG9ubHkgbmVlZGVkIGlmCisjIHlvdXIgcGFja2FnZSBkb2VzIGNlcnRhaW4gdGhpbmdzLiAgQnV0IHRoaXMgaXNuJ3QgcmVhbGx5IGEgYmlnIGRlYWwuCisKKyMgQU1fSU5JVF9BVVRPTUFLRShQQUNLQUdFLCBWRVJTSU9OLCBbTk8tREVGSU5FXSkKKyMgQU1fSU5JVF9BVVRPTUFLRShbT1BUSU9OU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoZSBjYWxsIHdpdGggUEFDS0FHRSBhbmQgVkVSU0lPTiBhcmd1bWVudHMgaXMgdGhlIG9sZCBzdHlsZQorIyBjYWxsIChwcmUgYXV0b2NvbmYtMi41MCksIHdoaWNoIGlzIGJlaW5nIHBoYXNlZCBvdXQuICBQQUNLQUdFCisjIGFuZCBWRVJTSU9OIHNob3VsZCBub3cgYmUgcGFzc2VkIHRvIEFDX0lOSVQgYW5kIHJlbW92ZWQgZnJvbQorIyB0aGUgY2FsbCB0byBBTV9JTklUX0FVVE9NQUtFLgorIyBXZSBzdXBwb3J0IGJvdGggY2FsbCBzdHlsZXMgZm9yIHRoZSB0cmFuc2l0aW9uLiAgQWZ0ZXIKKyMgdGhlIG5leHQgQXV0b21ha2UgcmVsZWFzZSwgQXV0b2NvbmYgY2FuIG1ha2UgdGhlIEFDX0lOSVQKKyMgYXJndW1lbnRzIG1hbmRhdG9yeSwgYW5kIHRoZW4gd2UgY2FuIGRlcGVuZCBvbiBhIG5ldyBBdXRvY29uZgorIyByZWxlYXNlIGFuZCBkcm9wIHRoZSBvbGQgY2FsbCBzdXBwb3J0LgorQUNfREVGVU4oW0FNX0lOSVRfQVVUT01BS0VdLAorW0FDX1BSRVJFUShbMi42Ml0pZG5sCitkbmwgQXV0b2NvbmYgd2FudHMgdG8gZGlzYWxsb3cgQU1fIG5hbWVzLiAgV2UgZXhwbGljaXRseSBhbGxvdworZG5sIHRoZSBvbmVzIHdlIGNhcmUgYWJvdXQuCittNF9wYXR0ZXJuX2FsbG93KFteQU1fW0EtWl0rRkxBR1MkXSlkbmwKK0FDX1JFUVVJUkUoW0FNX1NFVF9DVVJSRU5UX0FVVE9NQUtFX1ZFUlNJT05dKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19JTlNUQUxMXSlkbmwKK2lmIHRlc3QgImBjZCAkc3JjZGlyICYmIHB3ZGAiICE9ICJgcHdkYCI7IHRoZW4KKyAgIyBVc2UgLUkkKHNyY2Rpcikgb25seSB3aGVuICQoc3JjZGlyKSAhPSAuLCBzbyB0aGF0IG1ha2UncyBvdXRwdXQKKyAgIyBpcyBub3QgcG9sbHV0ZWQgd2l0aCByZXBlYXRlZCAiLUkuIgorICBBQ19TVUJTVChbYW1fX2lzcmNdLCBbJyAtSSQoc3JjZGlyKSddKV9BTV9TVUJTVF9OT1RNQUtFKFthbV9faXNyY10pZG5sCisgICMgdGVzdCB0byBzZWUgaWYgc3JjZGlyIGFscmVhZHkgY29uZmlndXJlZAorICBpZiB0ZXN0IC1mICRzcmNkaXIvY29uZmlnLnN0YXR1czsgdGhlbgorICAgIEFDX01TR19FUlJPUihbc291cmNlIGRpcmVjdG9yeSBhbHJlYWR5IGNvbmZpZ3VyZWQ7IHJ1biAibWFrZSBkaXN0Y2xlYW4iIHRoZXJlIGZpcnN0XSkKKyAgZmkKK2ZpCisKKyMgdGVzdCB3aGV0aGVyIHdlIGhhdmUgY3lncGF0aAoraWYgdGVzdCAteiAiJENZR1BBVEhfVyI7IHRoZW4KKyAgaWYgKGN5Z3BhdGggLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisgICAgQ1lHUEFUSF9XPSdjeWdwYXRoIC13JworICBlbHNlCisgICAgQ1lHUEFUSF9XPWVjaG8KKyAgZmkKK2ZpCitBQ19TVUJTVChbQ1lHUEFUSF9XXSkKKworIyBEZWZpbmUgdGhlIGlkZW50aXR5IG9mIHRoZSBwYWNrYWdlLgorZG5sIERpc3Rpbmd1aXNoIGJldHdlZW4gb2xkLXN0eWxlIGFuZCBuZXctc3R5bGUgY2FsbHMuCittNF9pZnZhbChbJDJdLAorW200X2lmdmFsKFskM10sIFtfQU1fU0VUX09QVElPTihbbm8tZGVmaW5lXSldKWRubAorIEFDX1NVQlNUKFtQQUNLQUdFXSwgWyQxXSlkbmwKKyBBQ19TVUJTVChbVkVSU0lPTl0sIFskMl0pXSwKK1tfQU1fU0VUX09QVElPTlMoWyQxXSlkbmwKK2RubCBEaWFnbm9zZSBvbGQtc3R5bGUgQUNfSU5JVCB3aXRoIG5ldy1zdHlsZSBBTV9BVVRPTUFLRV9JTklULgorbTRfaWYobTRfaWZkZWYoW0FDX1BBQ0tBR0VfTkFNRV0sIDEpbTRfaWZkZWYoW0FDX1BBQ0tBR0VfVkVSU0lPTl0sIDEpLCAxMSwsCisgIFttNF9mYXRhbChbQUNfSU5JVCBzaG91bGQgYmUgY2FsbGVkIHdpdGggcGFja2FnZSBhbmQgdmVyc2lvbiBhcmd1bWVudHNdKV0pZG5sCisgQUNfU1VCU1QoW1BBQ0tBR0VdLCBbJ0FDX1BBQ0tBR0VfVEFSTkFNRSddKWRubAorIEFDX1NVQlNUKFtWRVJTSU9OXSwgWydBQ19QQUNLQUdFX1ZFUlNJT04nXSldKWRubAorCitfQU1fSUZfT1BUSU9OKFtuby1kZWZpbmVdLCwKK1tBQ19ERUZJTkVfVU5RVU9URUQoUEFDS0FHRSwgIiRQQUNLQUdFIiwgW05hbWUgb2YgcGFja2FnZV0pCisgQUNfREVGSU5FX1VOUVVPVEVEKFZFUlNJT04sICIkVkVSU0lPTiIsIFtWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlXSldKWRubAorCisjIFNvbWUgdG9vbHMgQXV0b21ha2UgbmVlZHMuCitBQ19SRVFVSVJFKFtBTV9TQU5JVFlfQ0hFQ0tdKWRubAorQUNfUkVRVUlSRShbQUNfQVJHX1BST0dSQU1dKWRubAorQU1fTUlTU0lOR19QUk9HKEFDTE9DQUwsIGFjbG9jYWwtJHthbV9fYXBpX3ZlcnNpb259KQorQU1fTUlTU0lOR19QUk9HKEFVVE9DT05GLCBhdXRvY29uZikKK0FNX01JU1NJTkdfUFJPRyhBVVRPTUFLRSwgYXV0b21ha2UtJHthbV9fYXBpX3ZlcnNpb259KQorQU1fTUlTU0lOR19QUk9HKEFVVE9IRUFERVIsIGF1dG9oZWFkZXIpCitBTV9NSVNTSU5HX1BST0coTUFLRUlORk8sIG1ha2VpbmZvKQorQUNfUkVRVUlSRShbQU1fUFJPR19JTlNUQUxMX1NIXSlkbmwKK0FDX1JFUVVJUkUoW0FNX1BST0dfSU5TVEFMTF9TVFJJUF0pZG5sCitBQ19SRVFVSVJFKFtBTV9QUk9HX01LRElSX1BdKWRubAorIyBXZSBuZWVkIGF3ayBmb3IgdGhlICJjaGVjayIgdGFyZ2V0LiAgVGhlIHN5c3RlbSAiYXdrIiBpcyBiYWQgb24KKyMgc29tZSBwbGF0Zm9ybXMuCitBQ19SRVFVSVJFKFtBQ19QUk9HX0FXS10pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX01BS0VfU0VUXSlkbmwKK0FDX1JFUVVJUkUoW0FNX1NFVF9MRUFESU5HX0RPVF0pZG5sCitfQU1fSUZfT1BUSU9OKFt0YXItdXN0YXJdLCBbX0FNX1BST0dfVEFSKFt1c3Rhcl0pXSwKKwkgICAgICBbX0FNX0lGX09QVElPTihbdGFyLXBheF0sIFtfQU1fUFJPR19UQVIoW3BheF0pXSwKKwkJCSAgICAgW19BTV9QUk9HX1RBUihbdjddKV0pXSkKK19BTV9JRl9PUFRJT04oW25vLWRlcGVuZGVuY2llc10sLAorW0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NDXSwKKwkJICBbX0FNX0RFUEVOREVOQ0lFUyhDQyldLAorCQkgIFtkZWZpbmUoW0FDX1BST0dfQ0NdLAorCQkJICBkZWZuKFtBQ19QUk9HX0NDXSlbX0FNX0RFUEVOREVOQ0lFUyhDQyldKV0pZG5sCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19DWFhdLAorCQkgIFtfQU1fREVQRU5ERU5DSUVTKENYWCldLAorCQkgIFtkZWZpbmUoW0FDX1BST0dfQ1hYXSwKKwkJCSAgZGVmbihbQUNfUFJPR19DWFhdKVtfQU1fREVQRU5ERU5DSUVTKENYWCldKV0pZG5sCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19PQkpDXSwKKwkJICBbX0FNX0RFUEVOREVOQ0lFUyhPQkpDKV0sCisJCSAgW2RlZmluZShbQUNfUFJPR19PQkpDXSwKKwkJCSAgZGVmbihbQUNfUFJPR19PQkpDXSlbX0FNX0RFUEVOREVOQ0lFUyhPQkpDKV0pXSlkbmwKK10pCitfQU1fSUZfT1BUSU9OKFtzaWxlbnQtcnVsZXNdLCBbQUNfUkVRVUlSRShbQU1fU0lMRU5UX1JVTEVTXSldKWRubAorZG5sIFRoZSBgcGFyYWxsZWwtdGVzdHMnIGRyaXZlciBtYXkgbmVlZCB0byBrbm93IGFib3V0IEVYRUVYVCwgc28gYWRkIHRoZQorZG5sIGBhbV9fRVhFRVhUJyBjb25kaXRpb25hbCBpZiBfQU1fQ09NUElMRVJfRVhFRVhUIHdhcyBzZWVuLiAgVGhpcyBtYWNybworZG5sIGlzIGhvb2tlZCBvbnRvIF9BQ19DT01QSUxFUl9FWEVFWFQgZWFybHksIHNlZSBiZWxvdy4KK0FDX0NPTkZJR19DT01NQU5EU19QUkUoZG5sCitbbTRfcHJvdmlkZV9pZihbX0FNX0NPTVBJTEVSX0VYRUVYVF0sCisgIFtBTV9DT05ESVRJT05BTChbYW1fX0VYRUVYVF0sIFt0ZXN0IC1uICIkRVhFRVhUIl0pXSldKWRubAorXSkKKworZG5sIEhvb2sgaW50byBgX0FDX0NPTVBJTEVSX0VYRUVYVCcgZWFybHkgdG8gbGVhcm4gaXRzIGV4cGFuc2lvbi4gIERvIG5vdAorZG5sIGFkZCB0aGUgY29uZGl0aW9uYWwgcmlnaHQgaGVyZSwgYXMgX0FDX0NPTVBJTEVSX0VYRUVYVCBtYXkgYmUgZnVydGhlcgorZG5sIG1hbmdsZWQgYnkgQXV0b2NvbmYgYW5kIHJ1biBpbiBhIHNoZWxsIGNvbmRpdGlvbmFsIHN0YXRlbWVudC4KK200X2RlZmluZShbX0FDX0NPTVBJTEVSX0VYRUVYVF0sCittNF9kZWZuKFtfQUNfQ09NUElMRVJfRVhFRVhUXSlbbTRfcHJvdmlkZShbX0FNX0NPTVBJTEVSX0VYRUVYVF0pXSkKKworCisjIFdoZW4gY29uZmlnLnN0YXR1cyBnZW5lcmF0ZXMgYSBoZWFkZXIsIHdlIG11c3QgdXBkYXRlIHRoZSBzdGFtcC1oIGZpbGUuCisjIFRoaXMgZmlsZSByZXNpZGVzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgY29uZmlnIGhlYWRlcgorIyB0aGF0IGlzIGdlbmVyYXRlZC4gIFRoZSBzdGFtcCBmaWxlcyBhcmUgbnVtYmVyZWQgdG8gaGF2ZSBkaWZmZXJlbnQgbmFtZXMuCisKKyMgQXV0b2NvbmYgY2FsbHMgX0FDX0FNX0NPTkZJR19IRUFERVJfSE9PSyAod2hlbiBkZWZpbmVkKSBpbiB0aGUKKyMgbG9vcCB3aGVyZSBjb25maWcuc3RhdHVzIGNyZWF0ZXMgdGhlIGhlYWRlcnMsIHNvIHdlIGNhbiBnZW5lcmF0ZQorIyBvdXIgc3RhbXAgZmlsZXMgdGhlcmUuCitBQ19ERUZVTihbX0FDX0FNX0NPTkZJR19IRUFERVJfSE9PS10sCitbIyBDb21wdXRlICQxJ3MgaW5kZXggaW4gJGNvbmZpZ19oZWFkZXJzLgorX2FtX2FyZz0kMQorX2FtX3N0YW1wX2NvdW50PTEKK2ZvciBfYW1faGVhZGVyIGluICRjb25maWdfaGVhZGVycyA6OyBkbworICBjYXNlICRfYW1faGVhZGVyIGluCisgICAgJF9hbV9hcmcgfCAkX2FtX2FyZzoqICkKKyAgICAgIGJyZWFrIDs7CisgICAgKiApCisgICAgICBfYW1fc3RhbXBfY291bnQ9YGV4cHIgJF9hbV9zdGFtcF9jb3VudCArIDFgIDs7CisgIGVzYWMKK2RvbmUKK2VjaG8gInRpbWVzdGFtcCBmb3IgJF9hbV9hcmciID5gQVNfRElSTkFNRShbIiRfYW1fYXJnIl0pYC9zdGFtcC1oW10kX2FtX3N0YW1wX2NvdW50XSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMsIDIwMDUsIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fUFJPR19JTlNUQUxMX1NICisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgJGluc3RhbGxfc2guCitBQ19ERUZVTihbQU1fUFJPR19JTlNUQUxMX1NIXSwKK1tBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCitpZiB0ZXN0IHgiJHtpbnN0YWxsX3NofSIgIT0geHNldDsgdGhlbgorICBjYXNlICRhbV9hdXhfZGlyIGluCisgICpcICogfCAqXAkqKQorICAgIGluc3RhbGxfc2g9Ilwke1NIRUxMfSAnJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCciIDs7CisgICopCisgICAgaW5zdGFsbF9zaD0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL2luc3RhbGwtc2giCisgIGVzYWMKK2ZpCitBQ19TVUJTVChpbnN0YWxsX3NoKV0pCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCAyCisKKyMgQ2hlY2sgd2hldGhlciB0aGUgdW5kZXJseWluZyBmaWxlLXN5c3RlbSBzdXBwb3J0cyBmaWxlbmFtZXMKKyMgd2l0aCBhIGxlYWRpbmcgZG90LiAgRm9yIGluc3RhbmNlIE1TLURPUyBkb2Vzbid0LgorQUNfREVGVU4oW0FNX1NFVF9MRUFESU5HX0RPVF0sCitbcm0gLXJmIC50c3QgMj4vZGV2L251bGwKK21rZGlyIC50c3QgMj4vZGV2L251bGwKK2lmIHRlc3QgLWQgLnRzdDsgdGhlbgorICBhbV9fbGVhZGluZ19kb3Q9LgorZWxzZQorICBhbV9fbGVhZGluZ19kb3Q9XworZmkKK3JtZGlyIC50c3QgMj4vZGV2L251bGwKK0FDX1NVQlNUKFthbV9fbGVhZGluZ19kb3RdKV0pCisKKyMgQWRkIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSBvcHRpb24gdG8gY29uZmlndXJlLiAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyMgRnJvbSBKaW0gTWV5ZXJpbmcKKworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTgsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDgKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNQorCisjIEFNX01BSU5UQUlORVJfTU9ERShbREVGQVVMVC1NT0RFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb250cm9sIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzLgorIyBEZWZhdWx0IGlzIHRvIGRpc2FibGUgdGhlbSwgdW5sZXNzIGBlbmFibGUnIGlzIHBhc3NlZCBsaXRlcmFsbHkuCisjIEZvciBzeW1tZXRyeSwgYGRpc2FibGUnIG1heSBiZSBwYXNzZWQgYXMgd2VsbC4gIEFueXdheSwgdGhlIHVzZXIKKyMgY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHdpdGggdGhlIC0tZW5hYmxlLy0tZGlzYWJsZSBzd2l0Y2guCitBQ19ERUZVTihbQU1fTUFJTlRBSU5FUl9NT0RFXSwKK1ttNF9jYXNlKG00X2RlZmF1bHQoWyQxXSwgW2Rpc2FibGVdKSwKKyAgICAgICBbZW5hYmxlXSwgW200X2RlZmluZShbYW1fbWFpbnRhaW5lcl9vdGhlcl0sIFtkaXNhYmxlXSldLAorICAgICAgIFtkaXNhYmxlXSwgW200X2RlZmluZShbYW1fbWFpbnRhaW5lcl9vdGhlcl0sIFtlbmFibGVdKV0sCisgICAgICAgW200X2RlZmluZShbYW1fbWFpbnRhaW5lcl9vdGhlcl0sIFtlbmFibGVdKQorICAgICAgICBtNF93YXJuKFtzeW50YXhdLCBbdW5leHBlY3RlZCBhcmd1bWVudCB0byBBTUAmdEBfTUFJTlRBSU5FUl9NT0RFOiAkMV0pXSkKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBhbV9tYWludGFpbmVyX290aGVyIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzXSkKKyAgZG5sIG1haW50YWluZXItbW9kZSdzIGRlZmF1bHQgaXMgJ2Rpc2FibGUnIHVubGVzcyAnZW5hYmxlJyBpcyBwYXNzZWQKKyAgQUNfQVJHX0VOQUJMRShbbWFpbnRhaW5lci1tb2RlXSwKK1sgIC0tXVthbV9tYWludGFpbmVyX290aGVyXVstbWFpbnRhaW5lci1tb2RlICBhbV9tYWludGFpbmVyX290aGVyIG1ha2UgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBub3QgdXNlZnVsCisJCQkgIChhbmQgc29tZXRpbWVzIGNvbmZ1c2luZykgdG8gdGhlIGNhc3VhbCBpbnN0YWxsZXJdLAorICAgICAgW1VTRV9NQUlOVEFJTkVSX01PREU9JGVuYWJsZXZhbF0sCisgICAgICBbVVNFX01BSU5UQUlORVJfTU9ERT1dbTRfaWYoYW1fbWFpbnRhaW5lcl9vdGhlciwgW2VuYWJsZV0sIFtub10sIFt5ZXNdKSkKKyAgQUNfTVNHX1JFU1VMVChbJFVTRV9NQUlOVEFJTkVSX01PREVdKQorICBBTV9DT05ESVRJT05BTChbTUFJTlRBSU5FUl9NT0RFXSwgW3Rlc3QgJFVTRV9NQUlOVEFJTkVSX01PREUgPSB5ZXNdKQorICBNQUlOVD0kTUFJTlRBSU5FUl9NT0RFX1RSVUUKKyAgQUNfU1VCU1QoW01BSU5UXSlkbmwKK10KKykKKworQVVfREVGVU4oW2ptX01BSU5UQUlORVJfTU9ERV0sIFtBTV9NQUlOVEFJTkVSX01PREVdKQorCisjIENoZWNrIHRvIHNlZSBob3cgJ21ha2UnIHRyZWF0cyBpbmNsdWRlcy4JICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNSwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNAorCisjIEFNX01BS0VfSU5DTFVERSgpCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHRvIHNlZSBob3cgbWFrZSB0cmVhdHMgaW5jbHVkZXMuCitBQ19ERUZVTihbQU1fTUFLRV9JTkNMVURFXSwKK1thbV9tYWtlPSR7TUFLRS1tYWtlfQorY2F0ID4gY29uZmluYyA8PCAnRU5EJworYW1fX2RvaXQ6CisJQGVjaG8gdGhpcyBpcyB0aGUgYW1fX2RvaXQgdGFyZ2V0CisuUEhPTlk6IGFtX19kb2l0CitFTkQKKyMgSWYgd2UgZG9uJ3QgZmluZCBhbiBpbmNsdWRlIGRpcmVjdGl2ZSwganVzdCBjb21tZW50IG91dCB0aGUgY29kZS4KK0FDX01TR19DSEVDS0lORyhbZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZV0pCithbV9faW5jbHVkZT0iIyIKK2FtX19xdW90ZT0KK19hbV9yZXN1bHQ9bm9uZQorIyBGaXJzdCB0cnkgR05VIG1ha2Ugc3R5bGUgaW5jbHVkZS4KK2VjaG8gImluY2x1ZGUgY29uZmluYyIgPiBjb25mbWYKKyMgSWdub3JlIGFsbCBraW5kcyBvZiBhZGRpdGlvbmFsIG91dHB1dCBmcm9tIGBtYWtlJy4KK2Nhc2UgYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIGluICMoCisqdGhlXCBhbV9fZG9pdFwgdGFyZ2V0KikKKyAgYW1fX2luY2x1ZGU9aW5jbHVkZQorICBhbV9fcXVvdGU9CisgIF9hbV9yZXN1bHQ9R05VCisgIDs7Citlc2FjCisjIE5vdyB0cnkgQlNEIG1ha2Ugc3R5bGUgaW5jbHVkZS4KK2lmIHRlc3QgIiRhbV9faW5jbHVkZSIgPSAiIyI7IHRoZW4KKyAgIGVjaG8gJy5pbmNsdWRlICJjb25maW5jIicgPiBjb25mbWYKKyAgIGNhc2UgYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIGluICMoCisgICAqdGhlXCBhbV9fZG9pdFwgdGFyZ2V0KikKKyAgICAgYW1fX2luY2x1ZGU9LmluY2x1ZGUKKyAgICAgYW1fX3F1b3RlPSJcIiIKKyAgICAgX2FtX3Jlc3VsdD1CU0QKKyAgICAgOzsKKyAgIGVzYWMKK2ZpCitBQ19TVUJTVChbYW1fX2luY2x1ZGVdKQorQUNfU1VCU1QoW2FtX19xdW90ZV0pCitBQ19NU0dfUkVTVUxUKFskX2FtX3Jlc3VsdF0pCitybSAtZiBjb25maW5jIGNvbmZtZgorXSkKKworIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDgKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNgorCisjIEFNX1BST0dfQ0NfQ19PCisjIC0tLS0tLS0tLS0tLS0tCisjIExpa2UgQUNfUFJPR19DQ19DX08sIGJ1dCBjaGFuZ2VkIGZvciBhdXRvbWFrZS4KK0FDX0RFRlVOKFtBTV9QUk9HX0NDX0NfT10sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DQ19DX09dKWRubAorQUNfUkVRVUlSRShbQU1fQVVYX0RJUl9FWFBBTkRdKWRubAorQUNfUkVRVUlSRV9BVVhfRklMRShbY29tcGlsZV0pZG5sCisjIEZJWE1FOiB3ZSByZWx5IG9uIHRoZSBjYWNoZSB2YXJpYWJsZSBuYW1lIGJlY2F1c2UKKyMgdGhlcmUgaXMgbm8gb3RoZXIgd2F5Lgorc2V0IGR1bW15ICRDQworYW1fY2M9YGVjaG8gJFsyXSB8IHNlZCBbJ3MvW15hLXpBLVowLTlfXS9fL2c7cy9eWzAtOV0vXy8nXWAKK2V2YWwgYW1fdD1cJGFjX2N2X3Byb2dfY2NfJHthbV9jY31fY19vCitpZiB0ZXN0ICIkYW1fdCIgIT0geWVzOyB0aGVuCisgICAjIExvc2luZyBjb21waWxlciwgc28gb3ZlcnJpZGUgd2l0aCB0aGUgc2NyaXB0LgorICAgIyBGSVhNRTogSXQgaXMgd3JvbmcgdG8gcmV3cml0ZSBDQy4KKyAgICMgQnV0IGlmIHdlIGRvbid0IHRoZW4gd2UgZ2V0IGludG8gdHJvdWJsZSBvZiBvbmUgc29ydCBvciBhbm90aGVyLgorICAgIyBBIGxvbmdlci10ZXJtIGZpeCB3b3VsZCBiZSB0byBoYXZlIGF1dG9tYWtlIHVzZSBhbV9fQ0MgaW4gdGhpcyBjYXNlLAorICAgIyBhbmQgdGhlbiB3ZSBjb3VsZCBzZXQgYW1fX0NDPSJcJCh0b3Bfc3JjZGlyKS9jb21waWxlIFwkKENDKSIKKyAgIENDPSIkYW1fYXV4X2Rpci9jb21waWxlICRDQyIKK2ZpCitkbmwgTWFrZSBzdXJlIEFDX1BST0dfQ0MgaXMgbmV2ZXIgY2FsbGVkIGFnYWluLCBvciBpdCB3aWxsIG92ZXJyaWRlIG91cgorZG5sIHNldHRpbmcgb2YgQ0MuCittNF9kZWZpbmUoW0FDX1BST0dfQ0NdLAorICAgICAgICAgIFttNF9mYXRhbChbQUNfUFJPR19DQyBjYW5ub3QgYmUgY2FsbGVkIGFmdGVyIEFNX1BST0dfQ0NfQ19PXSldKQorXSkKKworIyBGYWtlIHRoZSBleGlzdGVuY2Ugb2YgcHJvZ3JhbXMgdGhhdCBHTlUgbWFpbnRhaW5lcnMgdXNlLiAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5NywgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwOAorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA2CisKKyMgQU1fTUlTU0lOR19QUk9HKE5BTUUsIFBST0dSQU0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FNX01JU1NJTkdfUFJPR10sCitbQUNfUkVRVUlSRShbQU1fTUlTU0lOR19IQVNfUlVOXSkKKyQxPSR7JDEtIiR7YW1fbWlzc2luZ19ydW59JDIifQorQUNfU1VCU1QoJDEpXSkKKworCisjIEFNX01JU1NJTkdfSEFTX1JVTgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIE1JU1NJTkcgaWYgbm90IGRlZmluZWQgc28gZmFyIGFuZCB0ZXN0IGlmIGl0IHN1cHBvcnRzIC0tcnVuLgorIyBJZiBpdCBkb2VzLCBzZXQgYW1fbWlzc2luZ19ydW4gdG8gdXNlIGl0LCBvdGhlcndpc2UsIHRvIG5vdGhpbmcuCitBQ19ERUZVTihbQU1fTUlTU0lOR19IQVNfUlVOXSwKK1tBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCitBQ19SRVFVSVJFX0FVWF9GSUxFKFttaXNzaW5nXSlkbmwKK2lmIHRlc3QgeCIke01JU1NJTkcrc2V0fSIgIT0geHNldDsgdGhlbgorICBjYXNlICRhbV9hdXhfZGlyIGluCisgICpcICogfCAqXAkqKQorICAgIE1JU1NJTkc9Ilwke1NIRUxMfSBcIiRhbV9hdXhfZGlyL21pc3NpbmdcIiIgOzsKKyAgKikKKyAgICBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIgOzsKKyAgZXNhYworZmkKKyMgVXNlIGV2YWwgdG8gZXhwYW5kICRTSEVMTAoraWYgZXZhbCAiJE1JU1NJTkcgLS1ydW4gdHJ1ZSI7IHRoZW4KKyAgYW1fbWlzc2luZ19ydW49IiRNSVNTSU5HIC0tcnVuICIKK2Vsc2UKKyAgYW1fbWlzc2luZ19ydW49CisgIEFDX01TR19XQVJOKFtgbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZ10pCitmaQorXSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fUFJPR19NS0RJUl9QCisjIC0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBmb3IgYG1rZGlyIC1wJy4KK0FDX0RFRlVOKFtBTV9QUk9HX01LRElSX1BdLAorW0FDX1BSRVJFUShbMi42MF0pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX01LRElSX1BdKWRubAorZG5sIEF1dG9tYWtlIDEuOCB0byAxLjkuNiB1c2VkIHRvIGRlZmluZSBta2Rpcl9wLiAgV2Ugbm93IHVzZSBNS0RJUl9QLAorZG5sIHdoaWxlIGtlZXBpbmcgYSBkZWZpbml0aW9uIG9mIG1rZGlyX3AgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCitkbmwgQE1LRElSX1BAIGlzIG1hZ2ljOiBBQ19PVVRQVVQgYWRqdXN0cyBpdHMgdmFsdWUgZm9yIGVhY2ggTWFrZWZpbGUuCitkbmwgSG93ZXZlciB3ZSBjYW5ub3QgZGVmaW5lIG1rZGlyX3AgYXMgJChNS0RJUl9QKSBmb3IgdGhlIHNha2Ugb2YKK2RubCBNYWtlZmlsZS5pbnMgdGhhdCBkbyBub3QgZGVmaW5lIE1LRElSX1AsIHNvIHdlIGRvIG91ciBvd24KK2RubCBhZGp1c3RtZW50IHVzaW5nIHRvcF9idWlsZGRpciAod2hpY2ggaXMgZGVmaW5lZCBtb3JlIG9mdGVuIHRoYW4KK2RubCBNS0RJUl9QKS4KK0FDX1NVQlNUKFtta2Rpcl9wXSwgWyIkTUtESVJfUCJdKWRubAorY2FzZSAkbWtkaXJfcCBpbgorICBbW1xcLyRdXSogfCA/OltbXFwvXV0qKSA7OworICAqLyopIG1rZGlyX3A9IlwkKHRvcF9idWlsZGRpcikvJG1rZGlyX3AiIDs7Citlc2FjCitdKQorCisjIEhlbHBlciBmdW5jdGlvbnMgZm9yIG9wdGlvbiBoYW5kbGluZy4gICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1LCAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA0CisKKyMgX0FNX01BTkdMRV9PUFRJT04oTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfQU1fTUFOR0xFX09QVElPTl0sCitbW19BTV9PUFRJT05fXW00X2JwYXRzdWJzdCgkMSwgW1teYS16QS1aMC05X11dLCBbX10pXSkKKworIyBfQU1fU0VUX09QVElPTihOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IG9wdGlvbiBOQU1FLiAgUHJlc2VudGx5IHRoYXQgb25seSBtZWFucyBkZWZpbmluZyBhIGZsYWcgZm9yIHRoaXMgb3B0aW9uLgorQUNfREVGVU4oW19BTV9TRVRfT1BUSU9OXSwKK1ttNF9kZWZpbmUoX0FNX01BTkdMRV9PUFRJT04oWyQxXSksIDEpXSkKKworIyBfQU1fU0VUX09QVElPTlMoT1BUSU9OUykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPUFRJT05TIGlzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgQXV0b21ha2Ugb3B0aW9ucy4KK0FDX0RFRlVOKFtfQU1fU0VUX09QVElPTlNdLAorW200X2ZvcmVhY2hfdyhbX0FNX09wdGlvbl0sIFskMV0sIFtfQU1fU0VUX09QVElPTihfQU1fT3B0aW9uKV0pXSkKKworIyBfQU1fSUZfT1BUSU9OKE9QVElPTiwgSUYtU0VULCBbSUYtTk9ULVNFVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhlY3V0ZSBJRi1TRVQgaWYgT1BUSU9OIGlzIHNldCwgSUYtTk9ULVNFVCBvdGhlcndpc2UuCitBQ19ERUZVTihbX0FNX0lGX09QVElPTl0sCitbbTRfaWZzZXQoX0FNX01BTkdMRV9PUFRJT04oWyQxXSksIFskMl0sIFskM10pXSkKKworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZS4gICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMjAwMCwgMjAwMSwgMjAwMywgMjAwNSwgMjAwOAorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA1CisKKyMgQU1fU0FOSVRZX0NIRUNLCisjIC0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FNX1NBTklUWV9DSEVDS10sCitbQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmVdKQorIyBKdXN0IGluIGNhc2UKK3NsZWVwIDEKK2VjaG8gdGltZXN0YW1wID4gY29uZnRlc3QuZmlsZQorIyBSZWplY3QgdW5zYWZlIGNoYXJhY3RlcnMgaW4gJHNyY2RpciBvciB0aGUgYWJzb2x1dGUgd29ya2luZyBkaXJlY3RvcnkKKyMgbmFtZS4gIEFjY2VwdCBzcGFjZSBhbmQgdGFiIG9ubHkgaW4gdGhlIGxhdHRlci4KK2FtX2xmPScKKycKK2Nhc2UgYHB3ZGAgaW4KKyAgKltbXFxcIlwjXCRcJlwnXGAkYW1fbGZdXSopCisgICAgQUNfTVNHX0VSUk9SKFt1bnNhZmUgYWJzb2x1dGUgd29ya2luZyBkaXJlY3RvcnkgbmFtZV0pOzsKK2VzYWMKK2Nhc2UgJHNyY2RpciBpbgorICAqW1tcXFwiXCNcJFwmXCdcYCRhbV9sZlwgXAldXSopCisgICAgQUNfTVNHX0VSUk9SKFt1bnNhZmUgc3JjZGlyIHZhbHVlOiBgJHNyY2RpciddKTs7Citlc2FjCisKKyMgRG8gYHNldCcgaW4gYSBzdWJzaGVsbCBzbyB3ZSBkb24ndCBjbG9iYmVyIHRoZSBjdXJyZW50IHNoZWxsJ3MKKyMgYXJndW1lbnRzLiAgTXVzdCB0cnkgLUwgZmlyc3QgaW4gY2FzZSBjb25maWd1cmUgaXMgYWN0dWFsbHkgYQorIyBzeW1saW5rOyBzb21lIHN5c3RlbXMgcGxheSB3ZWlyZCBnYW1lcyB3aXRoIHRoZSBtb2QgdGltZSBvZiBzeW1saW5rcworIyAoZWcgRnJlZUJTRCByZXR1cm5zIHRoZSBtb2QgdGltZSBvZiB0aGUgc3ltbGluaydzIGNvbnRhaW5pbmcKKyMgZGlyZWN0b3J5KS4KK2lmICgKKyAgIHNldCBYIGBscyAtTHQgIiRzcmNkaXIvY29uZmlndXJlIiBjb25mdGVzdC5maWxlIDI+IC9kZXYvbnVsbGAKKyAgIGlmIHRlc3QgIiRbKl0iID0gIlgiOyB0aGVuCisgICAgICAjIC1MIGRpZG4ndCB3b3JrLgorICAgICAgc2V0IFggYGxzIC10ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZWAKKyAgIGZpCisgICBybSAtZiBjb25mdGVzdC5maWxlCisgICBpZiB0ZXN0ICIkWypdIiAhPSAiWCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlIiBcCisgICAgICAmJiB0ZXN0ICIkWypdIiAhPSAiWCBjb25mdGVzdC5maWxlICRzcmNkaXIvY29uZmlndXJlIjsgdGhlbgorCisgICAgICAjIElmIG5laXRoZXIgbWF0Y2hlZCwgdGhlbiB3ZSBoYXZlIGEgYnJva2VuIGxzLiAgVGhpcyBjYW4gaGFwcGVuCisgICAgICAjIGlmLCBmb3IgaW5zdGFuY2UsIENPTkZJR19TSEVMTCBpcyBiYXNoIGFuZCBpdCBpbmhlcml0cyBhCisgICAgICAjIGJyb2tlbiBscyBhbGlhcyBmcm9tIHRoZSBlbnZpcm9ubWVudC4gIFRoaXMgaGFzIGFjdHVhbGx5CisgICAgICAjIGhhcHBlbmVkLiAgU3VjaCBhIHN5c3RlbSBjb3VsZCBub3QgYmUgY29uc2lkZXJlZCAic2FuZSIuCisgICAgICBBQ19NU0dfRVJST1IoW2xzIC10IGFwcGVhcnMgdG8gZmFpbC4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4KK2FsaWFzIGluIHlvdXIgZW52aXJvbm1lbnRdKQorICAgZmkKKworICAgdGVzdCAiJFsyXSIgPSBjb25mdGVzdC5maWxlCisgICApCit0aGVuCisgICAjIE9rLgorICAgOgorZWxzZQorICAgQUNfTVNHX0VSUk9SKFtuZXdseSBjcmVhdGVkIGZpbGUgaXMgb2xkZXIgdGhhbiBkaXN0cmlidXRlZCBmaWxlcyEKK0NoZWNrIHlvdXIgc3lzdGVtIGNsb2NrXSkKK2ZpCitBQ19NU0dfUkVTVUxUKHllcyldKQorCisjIENvcHlyaWdodCAoQykgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMQorCisjIEFNX1NJTEVOVF9SVUxFUyhbREVGQVVMVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuYWJsZSBsZXNzIHZlcmJvc2UgYnVpbGQgcnVsZXM7IHdpdGggdGhlIGRlZmF1bHQgc2V0IHRvIERFRkFVTFQKKyMgKGB5ZXMnIGJlaW5nIGxlc3MgdmVyYm9zZSwgYG5vJyBvciBlbXB0eSBiZWluZyB2ZXJib3NlKS4KK0FDX0RFRlVOKFtBTV9TSUxFTlRfUlVMRVNdLAorW0FDX0FSR19FTkFCTEUoW3NpbGVudC1ydWxlc10sCitbICAtLWVuYWJsZS1zaWxlbnQtcnVsZXMgICAgICAgICAgbGVzcyB2ZXJib3NlIGJ1aWxkIG91dHB1dCAodW5kbzogYG1ha2UgVj0xJykKKyAgLS1kaXNhYmxlLXNpbGVudC1ydWxlcyAgICAgICAgIHZlcmJvc2UgYnVpbGQgb3V0cHV0ICh1bmRvOiBgbWFrZSBWPTAnKV0pCitjYXNlICRlbmFibGVfc2lsZW50X3J1bGVzIGluCit5ZXMpIEFNX0RFRkFVTFRfVkVSQk9TSVRZPTA7Oworbm8pICBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0xOzsKKyopICAgQU1fREVGQVVMVF9WRVJCT1NJVFk9bTRfaWYoWyQxXSwgW3llc10sIFswXSwgWzFdKTs7Citlc2FjCitBQ19TVUJTVChbQU1fREVGQVVMVF9WRVJCT1NJVFldKWRubAorQU1fQkFDS1NMQVNIPSdcJworQUNfU1VCU1QoW0FNX0JBQ0tTTEFTSF0pZG5sCitfQU1fU1VCU1RfTk9UTUFLRShbQU1fQkFDS1NMQVNIXSlkbmwKK10pCisKKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzLCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEFNX1BST0dfSU5TVEFMTF9TVFJJUAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT25lIGlzc3VlIHdpdGggdmVuZG9yIGBpbnN0YWxsJyAoZXZlbiBHTlUpIGlzIHRoYXQgeW91IGNhbid0CisjIHNwZWNpZnkgdGhlIHByb2dyYW0gdXNlZCB0byBzdHJpcCBiaW5hcmllcy4gIFRoaXMgaXMgZXNwZWNpYWxseQorIyBhbm5veWluZyBpbiBjcm9zcy1jb21waWxpbmcgZW52aXJvbm1lbnRzLCB3aGVyZSB0aGUgYnVpbGQncyBzdHJpcAorIyBpcyB1bmxpa2VseSB0byBoYW5kbGUgdGhlIGhvc3QncyBiaW5hcmllcy4KKyMgRm9ydHVuYXRlbHkgaW5zdGFsbC1zaCB3aWxsIGhvbm9yIGEgU1RSSVBQUk9HIHZhcmlhYmxlLCBzbyB3ZQorIyBhbHdheXMgdXNlIGluc3RhbGwtc2ggaW4gYG1ha2UgaW5zdGFsbC1zdHJpcCcsIGFuZCBpbml0aWFsaXplCisjIFNUUklQUFJPRyB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgU1RSSVAgdmFyaWFibGUgKHNldCBieSB0aGUgdXNlcikuCitBQ19ERUZVTihbQU1fUFJPR19JTlNUQUxMX1NUUklQXSwKK1tBQ19SRVFVSVJFKFtBTV9QUk9HX0lOU1RBTExfU0hdKWRubAorIyBJbnN0YWxsZWQgYmluYXJpZXMgYXJlIHVzdWFsbHkgc3RyaXBwZWQgdXNpbmcgYHN0cmlwJyB3aGVuIHRoZSB1c2VyCisjIHJ1biBgbWFrZSBpbnN0YWxsLXN0cmlwJy4gIEhvd2V2ZXIgYHN0cmlwJyBtaWdodCBub3QgYmUgdGhlIHJpZ2h0CisjIHRvb2wgdG8gdXNlIGluIGNyb3NzLWNvbXBpbGF0aW9uIGVudmlyb25tZW50cywgdGhlcmVmb3JlIEF1dG9tYWtlCisjIHdpbGwgaG9ub3IgdGhlIGBTVFJJUCcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gb3ZlcnJ1bGUgdGhpcyBwcm9ncmFtLgorZG5sIERvbid0IHRlc3QgZm9yICRjcm9zc19jb21waWxpbmcgPSB5ZXMsIGJlY2F1c2UgaXQgbWlnaHQgYmUgYG1heWJlJy4KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IG5vOyB0aGVuCisgIEFDX0NIRUNLX1RPT0woW1NUUklQXSwgW3N0cmlwXSwgOikKK2ZpCitJTlNUQUxMX1NUUklQX1BST0dSQU09IlwkKGluc3RhbGxfc2gpIC1jIC1zIgorQUNfU1VCU1QoW0lOU1RBTExfU1RSSVBfUFJPR1JBTV0pXSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDIKKworIyBfQU1fU1VCU1RfTk9UTUFLRShWQVJJQUJMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByZXZlbnQgQXV0b21ha2UgZnJvbSBvdXRwdXR0aW5nIFZBUklBQkxFID0gQFZBUklBQkxFQCBpbiBNYWtlZmlsZS5pbi4KKyMgVGhpcyBtYWNybyBpcyB0cmFjZWQgYnkgQXV0b21ha2UuCitBQ19ERUZVTihbX0FNX1NVQlNUX05PVE1BS0VdKQorCisjIEFNX1NVQlNUX05PVE1BS0UoVkFSSUFCTEUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQdWJsaWMgc2lzdGVyIG9mIF9BTV9TVUJTVF9OT1RNQUtFLgorQUNfREVGVU4oW0FNX1NVQlNUX05PVE1BS0VdLCBbX0FNX1NVQlNUX05PVE1BS0UoJEApXSkKKworIyBDaGVjayBob3cgdG8gY3JlYXRlIGEgdGFyYmFsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMgorCisjIF9BTV9QUk9HX1RBUihGT1JNQVQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGhvdyB0byBjcmVhdGUgYSB0YXJiYWxsIGluIGZvcm1hdCBGT1JNQVQuCisjIEZPUk1BVCBzaG91bGQgYmUgb25lIG9mIGB2NycsIGB1c3RhcicsIG9yIGBwYXgnLgorIworIyBTdWJzdGl0dXRlIGEgdmFyaWFibGUgJChhbV9fdGFyKSB0aGF0IGlzIGEgY29tbWFuZAorIyB3cml0aW5nIHRvIHN0ZG91dCBhIEZPUk1BVC10YXJiYWxsIGNvbnRhaW5pbmcgdGhlIGRpcmVjdG9yeQorIyAkdGFyZGlyLgorIyAgICAgdGFyZGlyPWRpcmVjdG9yeSAmJiAkKGFtX190YXIpID4gcmVzdWx0LnRhcgorIworIyBTdWJzdGl0dXRlIGEgdmFyaWFibGUgJChhbV9fdW50YXIpIHRoYXQgZXh0cmFjdCBzdWNoCisjIGEgdGFyYmFsbCByZWFkIGZyb20gc3RkaW4uCisjICAgICAkKGFtX191bnRhcikgPCByZXN1bHQudGFyCitBQ19ERUZVTihbX0FNX1BST0dfVEFSXSwKK1sjIEFsd2F5cyBkZWZpbmUgQU1UQVIgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCitBTV9NSVNTSU5HX1BST0coW0FNVEFSXSwgW3Rhcl0pCittNF9pZihbJDFdLCBbdjddLAorICAgICBbYW1fX3Rhcj0nJHtBTVRBUn0gY2hvZiAtICIkJHRhcmRpciInOyBhbV9fdW50YXI9JyR7QU1UQVJ9IHhmIC0nXSwKKyAgICAgW200X2Nhc2UoWyQxXSwgW3VzdGFyXSwsIFtwYXhdLCwKKyAgICAgICAgICAgICAgW200X2ZhdGFsKFtVbmtub3duIHRhciBmb3JtYXRdKV0pCitBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBjcmVhdGUgYSAkMSB0YXIgYXJjaGl2ZV0pCisjIExvb3Agb3ZlciBhbGwga25vd24gbWV0aG9kcyB0byBjcmVhdGUgYSB0YXIgYXJjaGl2ZSB1bnRpbCBvbmUgd29ya3MuCitfYW1fdG9vbHM9J2dudXRhciBtNF9pZihbJDFdLCBbdXN0YXJdLCBbcGxhaW50YXJdKSBwYXggY3BpbyBub25lJworX2FtX3Rvb2xzPSR7YW1fY3ZfcHJvZ190YXJfJDEtJF9hbV90b29sc30KKyMgRG8gbm90IGZvbGQgdGhlIGFib3ZlIHR3byBsaW5lIGludG8gb25lLCBiZWNhdXNlIFRydTY0IHNoIGFuZAorIyBTb2xhcmlzIHNoIHdpbGwgbm90IGdyb2sgc3BhY2VzIGluIHRoZSByaHMgb2YgYC0nLgorZm9yIF9hbV90b29sIGluICRfYW1fdG9vbHMKK2RvCisgIGNhc2UgJF9hbV90b29sIGluCisgIGdudXRhcikKKyAgICBmb3IgX2FtX3RhciBpbiB0YXIgZ251dGFyIGd0YXI7CisgICAgZG8KKyAgICAgIEFNX1JVTl9MT0coWyRfYW1fdGFyIC0tdmVyc2lvbl0pICYmIGJyZWFrCisgICAgZG9uZQorICAgIGFtX190YXI9IiRfYW1fdGFyIC0tZm9ybWF0PW00X2lmKFskMV0sIFtwYXhdLCBbcG9zaXhdLCBbJDFdKSAtY2hmIC0gIiciJCR0YXJkaXIiJworICAgIGFtX190YXJfPSIkX2FtX3RhciAtLWZvcm1hdD1tNF9pZihbJDFdLCBbcGF4XSwgW3Bvc2l4XSwgWyQxXSkgLWNoZiAtICInIiR0YXJkaXIiJworICAgIGFtX191bnRhcj0iJF9hbV90YXIgLXhmIC0iCisgICAgOzsKKyAgcGxhaW50YXIpCisgICAgIyBNdXN0IHNraXAgR05VIHRhcjogaWYgaXQgZG9lcyBub3Qgc3VwcG9ydCAtLWZvcm1hdD0gaXQgZG9lc24ndCBjcmVhdGUKKyAgICAjIHVzdGFyIHRhcmJhbGwgZWl0aGVyLgorICAgICh0YXIgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjEgJiYgY29udGludWUKKyAgICBhbV9fdGFyPSd0YXIgY2hmIC0gIiQkdGFyZGlyIicKKyAgICBhbV9fdGFyXz0ndGFyIGNoZiAtICIkdGFyZGlyIicKKyAgICBhbV9fdW50YXI9J3RhciB4ZiAtJworICAgIDs7CisgIHBheCkKKyAgICBhbV9fdGFyPSdwYXggLUwgLXggJDEgLXcgIiQkdGFyZGlyIicKKyAgICBhbV9fdGFyXz0ncGF4IC1MIC14ICQxIC13ICIkdGFyZGlyIicKKyAgICBhbV9fdW50YXI9J3BheCAtcicKKyAgICA7OworICBjcGlvKQorICAgIGFtX190YXI9J2ZpbmQgIiQkdGFyZGlyIiAtcHJpbnQgfCBjcGlvIC1vIC1IICQxIC1MJworICAgIGFtX190YXJfPSdmaW5kICIkdGFyZGlyIiAtcHJpbnQgfCBjcGlvIC1vIC1IICQxIC1MJworICAgIGFtX191bnRhcj0nY3BpbyAtaSAtSCAkMSAtZCcKKyAgICA7OworICBub25lKQorICAgIGFtX190YXI9ZmFsc2UKKyAgICBhbV9fdGFyXz1mYWxzZQorICAgIGFtX191bnRhcj1mYWxzZQorICAgIDs7CisgIGVzYWMKKworICAjIElmIHRoZSB2YWx1ZSB3YXMgY2FjaGVkLCBzdG9wIG5vdy4gIFdlIGp1c3Qgd2FudGVkIHRvIGhhdmUgYW1fX3RhcgorICAjIGFuZCBhbV9fdW50YXIgc2V0LgorICB0ZXN0IC1uICIke2FtX2N2X3Byb2dfdGFyXyQxfSIgJiYgYnJlYWsKKworICAjIHRhci91bnRhciBhIGR1bW15IGRpcmVjdG9yeSwgYW5kIHN0b3AgaWYgdGhlIGNvbW1hbmQgd29ya3MKKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorICBta2RpciBjb25mdGVzdC5kaXIKKyAgZWNobyBHcmVwTWUgPiBjb25mdGVzdC5kaXIvZmlsZQorICBBTV9SVU5fTE9HKFt0YXJkaXI9Y29uZnRlc3QuZGlyICYmIGV2YWwgJGFtX190YXJfID5jb25mdGVzdC50YXJdKQorICBybSAtcmYgY29uZnRlc3QuZGlyCisgIGlmIHRlc3QgLXMgY29uZnRlc3QudGFyOyB0aGVuCisgICAgQU1fUlVOX0xPRyhbJGFtX191bnRhciA8Y29uZnRlc3QudGFyXSkKKyAgICBncmVwIEdyZXBNZSBjb25mdGVzdC5kaXIvZmlsZSA+L2Rldi9udWxsIDI+JjEgJiYgYnJlYWsKKyAgZmkKK2RvbmUKK3JtIC1yZiBjb25mdGVzdC5kaXIKKworQUNfQ0FDSEVfVkFMKFthbV9jdl9wcm9nX3Rhcl8kMV0sIFthbV9jdl9wcm9nX3Rhcl8kMT0kX2FtX3Rvb2xdKQorQUNfTVNHX1JFU1VMVChbJGFtX2N2X3Byb2dfdGFyXyQxXSldKQorQUNfU1VCU1QoW2FtX190YXJdKQorQUNfU1VCU1QoW2FtX191bnRhcl0pCitdKSAjIF9BTV9QUk9HX1RBUgorCittNF9pbmNsdWRlKFtjb21tb24vbTQvYXMtYWMtZXhwYW5kLm00XSkKK200X2luY2x1ZGUoW2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNF0pCittNF9pbmNsdWRlKFtjb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNF0pCittNF9pbmNsdWRlKFtjb21tb24vbTQvYXMtZG9jYm9vay5tNF0pCittNF9pbmNsdWRlKFtjb21tb24vbTQvYXMtbGlidG9vbC5tNF0pCittNF9pbmNsdWRlKFtjb21tb24vbTQvYXMtcHl0aG9uLm00XSkKK200X2luY2x1ZGUoW2NvbW1vbi9tNC9hcy1zY3J1Yi1pbmNsdWRlLm00XSkKK200X2luY2x1ZGUoW2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00XSkKK200X2luY2x1ZGUoW2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTRdKQorbTRfaW5jbHVkZShbY29tbW9uL200L2dzdC1hcmNoLm00XSkKK200X2luY2x1ZGUoW2NvbW1vbi9tNC9nc3QtYXJncy5tNF0pCittNF9pbmNsdWRlKFtjb21tb24vbTQvZ3N0LWNoZWNrLm00XSkKK200X2luY2x1ZGUoW2NvbW1vbi9tNC9nc3QtZG9jLm00XSkKK200X2luY2x1ZGUoW2NvbW1vbi9tNC9nc3QtZXJyb3IubTRdKQorbTRfaW5jbHVkZShbY29tbW9uL200L2dzdC1mZWF0dXJlLm00XSkKK200X2luY2x1ZGUoW2NvbW1vbi9tNC9nc3QtZnVuY3Rpb24ubTRdKQorbTRfaW5jbHVkZShbY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00XSkKK200X2luY2x1ZGUoW2NvbW1vbi9tNC9nc3QtZ2xpYjIubTRdKQorbTRfaW5jbHVkZShbY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTRdKQorbTRfaW5jbHVkZShbY29tbW9uL200L2dzdC1wYXJzZXIubTRdKQorbTRfaW5jbHVkZShbY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNF0pCittNF9pbmNsdWRlKFtjb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00XSkKK200X2luY2x1ZGUoW2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00XSkKK200X2luY2x1ZGUoW2NvbW1vbi9tNC9nc3QubTRdKQorbTRfaW5jbHVkZShbY29tbW9uL200L2d0ay1kb2MubTRdKQorbTRfaW5jbHVkZShbY29tbW9uL200L2ludHJvc3BlY3Rpb24ubTRdKQorbTRfaW5jbHVkZShbY29tbW9uL200L3BrZy5tNF0pCittNF9pbmNsdWRlKFttNC9jaGVjay1jaGVja3MubTRdKQorbTRfaW5jbHVkZShbbTQvZ2V0dGV4dC5tNF0pCittNF9pbmNsdWRlKFttNC9pY29udi5tNF0pCittNF9pbmNsdWRlKFttNC9pbnRsbWFjb3N4Lm00XSkKK200X2luY2x1ZGUoW200L2xpYi1sZC5tNF0pCittNF9pbmNsdWRlKFttNC9saWItbGluay5tNF0pCittNF9pbmNsdWRlKFttNC9saWItcHJlZml4Lm00XSkKK200X2luY2x1ZGUoW200L2xpYnRvb2wubTRdKQorbTRfaW5jbHVkZShbbTQvbHRvcHRpb25zLm00XSkKK200X2luY2x1ZGUoW200L2x0c3VnYXIubTRdKQorbTRfaW5jbHVkZShbbTQvbHR2ZXJzaW9uLm00XSkKK200X2luY2x1ZGUoW200L2x0fm9ic29sZXRlLm00XSkKK200X2luY2x1ZGUoW200L25scy5tNF0pCittNF9pbmNsdWRlKFttNC9wby5tNF0pCittNF9pbmNsdWRlKFttNC9wcm9ndGVzdC5tNF0pCmRpZmYgLS1naXQgYS9hdXRvZ2VuLnNoIGIvYXV0b2dlbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMGNkMTllCi0tLSAvZGV2L251bGwKKysrIGIvYXV0b2dlbi5zaApAQCAtMCwwICsxLDExMiBAQAorIyEvYmluL3NoCisjIFJ1biB0aGlzIHRvIGdlbmVyYXRlIGFsbCB0aGUgaW5pdGlhbCBtYWtlZmlsZXMsIGV0Yy4KKworRElFPTAKK3BhY2thZ2U9Z3N0cmVhbWVyCitzcmNmaWxlPWdzdC9nc3QuYworCisjIE1ha2Ugc3VyZSB3ZSBoYXZlIGNvbW1vbgoraWYgdGVzdCAhIC1mIGNvbW1vbi9nc3QtYXV0b2dlbi5zaDsKK3RoZW4KKyAgZWNobyAiKyBTZXR0aW5nIHVwIGNvbW1vbiBzdWJtb2R1bGUiCisgIGdpdCBzdWJtb2R1bGUgaW5pdAorZmkKK2dpdCBzdWJtb2R1bGUgdXBkYXRlCisKKyMgc291cmNlIGhlbHBlciBmdW5jdGlvbnMKK2lmIHRlc3QgISAtZiBjb21tb24vZ3N0LWF1dG9nZW4uc2g7Cit0aGVuCisgIGVjaG8gVGhlcmUgaXMgc29tZXRoaW5nIHdyb25nIHdpdGggeW91ciBzb3VyY2UgdHJlZS4KKyAgZWNobyBZb3UgYXJlIG1pc3NpbmcgY29tbW9uL2dzdC1hdXRvZ2VuLnNoCisgIGV4aXQgMQorZmkKKy4gY29tbW9uL2dzdC1hdXRvZ2VuLnNoCisKKyMgaW5zdGFsbCBwcmUtY29tbWl0IGhvb2sgZm9yIGRvaW5nIGNsZWFuIGNvbW1pdHMKK2lmIHRlc3QgISBcKCAteCAuZ2l0L2hvb2tzL3ByZS1jb21taXQgLWEgLUwgLmdpdC9ob29rcy9wcmUtY29tbWl0IFwpOwordGhlbgorICAgIHJtIC1mIC5naXQvaG9va3MvcHJlLWNvbW1pdAorICAgIGxuIC1zIC4uLy4uL2NvbW1vbi9ob29rcy9wcmUtY29tbWl0Lmhvb2sgLmdpdC9ob29rcy9wcmUtY29tbWl0CitmaQorCisKKworQ09ORklHVVJFX0RFRl9PUFQ9Jy0tZW5hYmxlLW1haW50YWluZXItbW9kZSAtLWVuYWJsZS1mYWlsaW5nLXRlc3RzIC0tZW5hYmxlLXBvaXNvbmluZyAtLWVuYWJsZS1ndGstZG9jIC0tZW5hYmxlLWRvY2Jvb2snCisKK2F1dG9nZW5fb3B0aW9ucyAkQAorCitwcmludGYgIisgY2hlY2sgZm9yIGJ1aWxkIHRvb2xzIgoraWYgdGVzdCAhIC16ICIkTk9DSEVDSyI7IHRoZW4gZWNobyAiOiBza2lwcGVkIHZlcnNpb24gY2hlY2tzIjsgZWxzZSAgZWNobzsgZmkKK3ZlcnNpb25fY2hlY2sgImF1dG9jb25mIiAiJEFVVE9DT05GIGF1dG9jb25mIGF1dG9jb25mMjcwIGF1dG9jb25mMjY5IGF1dG9jb25mMjY4IGF1dG9jb25mMjY3IGF1dG9jb25mMjY2IGF1dG9jb25mMjY1IGF1dG9jb25mMjY0IGF1dG9jb25mMjYzIGF1dG9jb25mMjYyIGF1dG9jb25mMjYxIGF1dG9jb25mMjYwIiBcCisgICAgICAgICAgICAgICJmdHA6Ly9mdHAuZ251Lm9yZy9wdWIvZ251L2F1dG9jb25mLyIgMiA2MCB8fCBESUU9MQordmVyc2lvbl9jaGVjayAiYXV0b21ha2UiICIkQVVUT01BS0UgYXV0b21ha2UgYXV0b21ha2UtMS4xMSBhdXRvbWFrZS0xLjEwIiBcCisgICAgICAgICAgICAgICJmdHA6Ly9mdHAuZ251Lm9yZy9wdWIvZ251L2F1dG9tYWtlLyIgMSAxMCB8fCBESUU9MQordmVyc2lvbl9jaGVjayAiYXV0b3BvaW50IiAiYXV0b3BvaW50IiBcCisgICAgICAgICAgICAgICJmdHA6Ly9mdHAuZ251Lm9yZy9wdWIvZ251L2dldHRleHQvIiAwIDE3IHx8IERJRT0xCit2ZXJzaW9uX2NoZWNrICJsaWJ0b29saXplIiAibGlidG9vbGl6ZSBsaWJ0b29saXplMTUgZ2xpYnRvb2xpemUiIFwKKyAgICAgICAgICAgICAgImZ0cDovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvbGlidG9vbC8iIDEgNSAwIHx8IERJRT0xCit2ZXJzaW9uX2NoZWNrICJwa2ctY29uZmlnIiAiIiBcCisgICAgICAgICAgICAgICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9wa2djb25maWciIDAgOCAwIHx8IERJRT0xCisKK2RpZV9jaGVjayAkRElFCisKK2FjbG9jYWxfY2hlY2sgfHwgRElFPTEKK2F1dG9oZWFkZXJfY2hlY2sgfHwgRElFPTEKKworZGllX2NoZWNrICRESUUKKworIyBpZiBubyBhcmd1bWVudHMgc3BlY2lmaWVkIHRoZW4gdGhpcyB3aWxsIGJlIHByaW50ZWQKK2lmIHRlc3QgLXogIiQqIjsgdGhlbgorICBlY2hvICIrIGNoZWNraW5nIGZvciBhdXRvZ2VuLnNoIG9wdGlvbnMiCisgIGVjaG8gIiAgVGhpcyBhdXRvZ2VuIHNjcmlwdCB3aWxsIGF1dG9tYXRpY2FsbHkgcnVuIC4vY29uZmlndXJlIGFzOiIKKyAgZWNobyAiICAuL2NvbmZpZ3VyZSAkQ09ORklHVVJFX0RFRl9PUFQiCisgIGVjaG8gIiAgVG8gcGFzcyBhbnkgYWRkaXRpb25hbCBvcHRpb25zLCBwbGVhc2Ugc3BlY2lmeSB0aGVtIG9uIHRoZSAkMCIKKyAgZWNobyAiICBjb21tYW5kIGxpbmUuIgorZmkKKwordG9wbGV2ZWxfY2hlY2sgJHNyY2ZpbGUKKworIyBhdXRvcG9pbnQKKyMgICAgb2xkZXIgYXV0b3BvaW50ICg8IDAuMTIpIGhhcyBhIHRlbmRlbmN5IHRvIGNvbXBsYWluIGFib3V0IG1raW5zdGFsbGRpcnMKK2lmIHRlc3QgLXggbWtpbnN0YWxsZGlyczsgdGhlbiBybSBta2luc3RhbGxkaXJzOyBmaQorIyAgICBmaXJzdCByZW1vdmUgcGF0Y2ggaWYgbmVjZXNzYXJ5LCB0aGVuIHJ1biBhdXRvcG9pbnQsIHRoZW4gcmVhcHBseQoraWYgdGVzdCAtZiBwby9NYWtlZmlsZS5pbi5pbjsKK3RoZW4KKyAgcGF0Y2ggLXAwIC1SIC0tZm9yd2FyZCA8IGNvbW1vbi9nZXR0ZXh0LnBhdGNoCitmaQordG9vbF9ydW4gIiRhdXRvcG9pbnQiICItLWZvcmNlIiAicGF0Y2ggLXAwIDwgY29tbW9uL2dldHRleHQucGF0Y2giCitwYXRjaCAtcDAgPCBjb21tb24vZ2V0dGV4dC5wYXRjaAorCisjIGFjbG9jYWwKK2lmIHRlc3QgLWYgYWNpbmNsdWRlLm00OyB0aGVuIHJtIGFjaW5jbHVkZS5tNDsgZmkKKwordG9vbF9ydW4gIiRsaWJ0b29saXplIiAiLS1jb3B5IC0tZm9yY2UiCit0b29sX3J1biAiJGFjbG9jYWwiICItSSBtNCAtSSBjb21tb24vbTQgJEFDTE9DQUxfRkxBR1MiCit0b29sX3J1biAiJGF1dG9oZWFkZXIiCisKKyMgdG91Y2ggdGhlIHN0YW1wLWguaW4gYnVpbGQgc3RhbXAgc28gd2UgZG9uJ3QgcmUtcnVuIGF1dG9oZWFkZXIgaW4gbWFpbnRhaW5lciBtb2RlCitlY2hvIHRpbWVzdGFtcCA+IHN0YW1wLWguaW4gMj4gL2Rldi9udWxsCisKK3Rvb2xfcnVuICIkYXV0b2NvbmYiCitkZWJ1ZyAiYXV0b21ha2U6ICRhdXRvbWFrZSIKK3Rvb2xfcnVuICIkYXV0b21ha2UiICItLWFkZC1taXNzaW5nIC0tY29weSIKKwordGVzdCAtbiAiJE5PQ09ORklHVVJFIiAmJiB7CisgIGVjaG8gInNraXBwaW5nIGNvbmZpZ3VyZSBzdGFnZSBmb3IgcGFja2FnZSAkcGFja2FnZSwgYXMgcmVxdWVzdGVkLiIKKyAgZWNobyAiYXV0b2dlbi5zaCBkb25lLiIKKyAgZXhpdCAwCit9CisKK2VjaG8gIisgcnVubmluZyBjb25maWd1cmUgLi4uICIKK3Rlc3QgISAteiAiJENPTkZJR1VSRV9ERUZfT1BUIiAmJiBlY2hvICIgIC4vY29uZmlndXJlIGRlZmF1bHQgZmxhZ3M6ICRDT05GSUdVUkVfREVGX09QVCIKK3Rlc3QgISAteiAiJENPTkZJR1VSRV9FWFRfT1BUIiAmJiBlY2hvICIgIC4vY29uZmlndXJlIGV4dGVybmFsIGZsYWdzOiAkQ09ORklHVVJFX0VYVF9PUFQiCitlY2hvCisKK2VjaG8gLi9jb25maWd1cmUgJENPTkZJR1VSRV9ERUZfT1BUICRDT05GSUdVUkVfRVhUX09QVAorLi9jb25maWd1cmUgJENPTkZJR1VSRV9ERUZfT1BUICRDT05GSUdVUkVfRVhUX09QVCB8fCB7CisgICAgICAgIGVjaG8gIiAgY29uZmlndXJlIGZhaWxlZCIKKyAgICAgICAgZXhpdCAxCit9CisKK2VjaG8gIk5vdyB0eXBlICdtYWtlJyB0byBjb21waWxlICRwYWNrYWdlLiIKKwpkaWZmIC0tZ2l0IGEvY29tbW9uL0NoYW5nZUxvZyBiL2NvbW1vbi9DaGFuZ2VMb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJkMGQyNQotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9DaGFuZ2VMb2cKQEAgLTAsMCArMSwxNzEyIEBACisyMDA4LTEyLTE3ICBFZHdhcmQgSGVydmV5ICA8YmlsYm9lZEBnbWFpbC5jb20+CisKKwkqIGdzdC5zdXBwOgorCUFuZCB5ZXQgYW5vdGhlciB2YXJpYXRpb24gb2YgdGhlIEdzdEF1ZGlvRmlsdGVyIGxlYWsuCisKKzIwMDgtMTItMTUgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCVBhdGNoIGJ5OiBSb2xhbmQgSWxsaWcgPHJvbGFuZCBkb3QgaWxsaWcgYXQgZ214IGRvdCBkZT4KKworCSogbTQvZ3N0LXBhcnNlci5tNDoKKwlGaXggQUdfR1NUX0JJU09OX0NIRUNLIHRvIGhhbmRsZSB2ZXJzaW9uIG51bWJlcnMgd2l0aCBtb3JlIHRoYW4KKwl0d28gY29tcG9uZW50cyAoaS5lLiAyLjQuMSkuIEZpeGVzIGJ1ZyAjNTY0NTA3LgorCisyMDA4LTEyLTE0ICBFZHdhcmQgSGVydmV5ICA8YmlsYm9lZEBnbWFpbC5jb20+CisKKwkqIGdzdC5zdXBwOgorCUFuZCB5ZXQgYW5vdGhlciB2YXJpYW50IG9mIHRoZSBHc3RBdWRpb0ZpbHRlciBsZWFrLgorCisyMDA4LTEyLTEzICBFZHdhcmQgSGVydmV5ICA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC5zdXBwOgorCUFkZGVkIHZhcmlhbnRzIG9mIGxlYWtzIG9mIGR5bmFtaWMgcGFkIHRlbXBsYXRlcyBjcmVhdGVkIGluCisJR3N0QXVkaW9GaWx0ZXIuCisJQWRkIGNvbmRpdGlvbmFsIGp1bXAgdHJpZ2dlcmVkIGJ5IGdldGFkZHJpbmZvIChtYXliZSBnbGliYy0yLjkpLgorCisyMDA4LTEyLTEyICBFZHdhcmQgSGVydmV5ICA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC5zdXBwOgorCUZpeCBsZWFrIGluIEdJTyBjYWxsZWQgYnkgZ25vbWV2ZnMuIE5vdGhpbmcgd2UgY2FuIGRvIGFib3V0IHRoaXMuCisKKzIwMDgtMTItMTIgIEVkd2FyZCBIZXJ2ZXkgIDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0LnN1cHA6CisJQWRkZWQgYW5vdGhlciBzdXBwcmVzc2lvbiBmb3IgZHluYW1pYyBwYWQgdGVtcGxhdGVzLCBpbiB0aGlzIGNhc2UKKwlHc3RBdWRpb0ZpbHRlci4KKwlBZGRlZCBzdXBwcmVzc2lvbiBmb3IgUGFuZ29MYW5ndWFnZSB3aGljaCBjYW4gbmV2ZXIgYmUgZnJlZWQKKwlhY2NvcmRpbmcgdG8gdGhlIFBhbmdvIEFQSS4KKworMjAwOC0xMi0xMiAgRWR3YXJkIEhlcnZleSAgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3Quc3VwcDoKKwlBIHdob2xlIGJ1bmNoIG9mIHN1cHByZXNzaW9ucyBkZXRlY3RlZCBvbiBsYXRlc3QgZ2VudG9vIH5hbWQ2NC4KKwlNYWtlIHNvbWUgZXhpc3Rpbmcgc3VwcHJlc3Npb25zIG1vcmUgZ2VuZXJpYyAoZm9yIHN1YnRsZSBkZXBlbmRlY3kKKwljb2RlIGNoYW5nZXMpLgorCUFkZGVkIHN1cHByZXNzaW9ucyBmb3IgZ2xpYmMtMi45LgorCUFkZGVkIHN1cHByZXNzaW9ucyBmb3IgbmV3IHZhcmlhbnRzIG9mIEFMU0EgbGVha3MuCisJQWRkZWQgc3VwcHJlc3Npb25zIGZvciBhIHNlcmllcyBvZiBsZWFrcyBpbiBwbHVnaW5zIHJlZ2lzdHJhdGlvbnMgZHVlCisJdG8gc29tZSBwYWQgdGVtcGxhdGVzJyBjYXBzIGNhbGN1bGF0ZWQgYXQgcnVudGltZS4KKwlBZGRlZCBzdXBwcmVzc2lvbnMgZm9yIHZhcmlhbnRzIG9mIHNvbWUgbGVha3MgaW4gcGFuZ28vZm9udGNvbmZpZy4KKwlBZGRlZCBzdXBwcmVzc2lvbnMgZm9yIGxlYWsgaW4gZ3N0ZmZtcGVnY3NwLmMgKG5vdGhpbmcgd2UgY2FuIGRvCisJYWJvdXQgaXQsIGJ1dCB3aWxsIG9ubHkgZXhpc3Qgb25jZSkuCisKKzIwMDgtMTItMDQgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogbTQvZ3N0LXBsdWdpbi1kb2NzLm00OgorCVJlbW92ZSB0aGUgY2hlY2sgaWYgJGhhdmVfZ3RrX2RvYyBlcXVhbHMgeWVzIGFzIGl0J3Mgbm90IGRlZmluZWQKKwlhbmQgJGVuYWJsZV9ndGtfZG9jIHNob3VsZCBiZSBnb29kIGVub3VnaC4KKwlBbHNvIHRoaXMgcmVzdG9yZXMgdGhlIGJ1aWxkIG9mIHRoZSBwbHVnaW4gZG9jdW1lbnRhdGlvbi4KKworMjAwOC0xMi0wMSAgTWFyayBOYXV3ZWxhZXJ0cyAgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgorCisJKiBnc3Quc3VwcDoKKwlBZGQgc3VwcHJlc3Npb24gdmFyaWFudCBmb3IgVWJ1bnR1IEhhcmR5IHg4Ni82NGJpdC4KKworMjAwOC0xMi0wMSAgU3RlZmFuIEtvc3QgIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKKwkqIGd0ay1kb2MubWFrOgorCSAgU2ltcGxpbHkgdW5pbnN0YWxsIHJ1bGUuIEl0cyBjbG9zZXIgdG8gdXBzdHJlYW0gYW5kIGZpeGVzICMxNTAzMzEuCisKKzIwMDgtMTEtMjkgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogbTQvZ2xpYi1nZXR0ZXh0Lm00OgorCVVwZGF0ZSBnbGliLWdldHRleHQubTQgZnJvbSBsYXRlc3Qgc3RhYmxlIEdMaWIgcmVsZWFzZS4KKworMjAwOC0xMS0yOSAgU2ViYXN0aWFuIERyw7ZnZSAgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJUGF0Y2ggYnk6IEN5Z3dpbiBQb3J0cyBtYWludGFpbmVyCisJICAgICAgICAgICA8eXNlbGtvd2l0eiBhdCB1c2VycyBkb3Qgc291cmNlZm9yZ2UgZG90IG5ldD4KKworCSogZ2V0dGV4dC5wYXRjaDoKKwlVcGRhdGUgdGhlIGdldHRleHQgcGF0Y2ggZm9yIHVzZSB3aXRoIGdldHRleHQgMC4xNyB3aGljaCBpcworCXJlcXVpcmVkIHRvIGJ1aWxkIHdpdGggbGlidG9vbCAyLjIgYmVjYXVzZSBvZiBjb25mbGljdHMuCisJRmlyc3QgcGFydCBvZiBidWcgIzU1NjA5MS4KKworMjAwOC0xMS0yOSAgU2ViYXN0aWFuIERyw7ZnZSAgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorCisJKiBtNC9ndGstZG9jLm00OgorCSogbTQvcGtnLm00OgorCVVwZGF0ZSBndGstZG9jIGFuZCBwa2ctY29uZmlnIG00IG1hY3JvcyBmcm9tIHRoZWlyIGxhdGVzdCByZWxlYXNlcy4KKworMjAwOC0xMS0yMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHNvbmdiaXJkbmVzdC5jb20+CisKKwkqIG00L2FzLW9iamMubTQ6CisJICBGaXggb2JqZWN0aXZlIEMgdGVzdCBtYWNybyB3aGVuIG5vbmUgb2YgdGhlIGNvbXBpbGVycyBhcmUgZm91bmQgYXQgYWxsLgorCisyMDA4LTEwLTMwICBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBndGstZG9jLm1hazoKKwkgIEFsc28gY3AgdGhlIGVudGl0aWVzIGhlcmUgdG8gYWxsIHhpbmxjdWRlIGJhc2VkIGRvY3MgKHdvcmthcm91bmQgZm9yCisJICBub3QgYmVpbmcgYWJsZSB0byBzZXQgdXAgYSBzZWFyY2ggcGF0aCkuCisKKzIwMDgtMTAtMTcgIEphbiBTY2htaWR0ICA8amFuLnNjaG1pZHRAc3VuLmNvbT4KKworCSogZ3RrLWRvYy5tYWs6CisJICBEb24ndCBjbG9iYmVyIHRoZSByZWFsIHJlZ2lzdHJ5IGNhY2hlIGZpbGUgd2hlbgorCSAgYnVpbGRpbmcgZG9jcy4KKworMjAwOC0xMC0wNyAgSmFuIFNjaG1pZHQgLSBTdW4gTWljcm9zeXN0ZW1zIDxqYW4uc2NobWlkdEBzdW4uY29tPgorCisJKiBtNC9nc3QtZXJyb3IubTQ6CisJICBBbHNvIGRpc2FibGUgdGhlIGJvZ3VzICJsb29wIG5vdCBlbnRlcmVkIGF0IHRvcCIgd2FybmluZ3MgYXBwZWFyaW5nIG9uIFNwYXJjIEZvcnRlIGJ1aWxkcy4KKworMjAwOC0xMC0wNiAgU3RlZmFuIEtvc3QgIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3RrLWRvYy5tYWs6CisJICBBcHBseSB0aGUgc2FtZSBmaXggYXMgYmVsb3cgdG8gZ3RrLWRvYy5tYWsuIFNvbWVob3cgZGlkIG5vdCBlbmQgdXAgaW4KKwkgIENWUy4KKworMjAwOC0wOS0wNSAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgorCisJKiBndGstZG9jLXBsdWdpbnMubWFrOiBGaXggdGhlIGNoZWNrIGZvciBndGtkb2MtcmViYXNlOiBkb24ndAorCSAgcGFzcyB0aGUgJ3doaWNoJyBlcnJvciBiYWNrIHRvIG1ha2UuICBUaGlzIGZpeCBpcyBtb3JlIHNwZWNpZmljCisJICB0aGFuIHdoYXQgaXMgaW4gdXBzdHJlYW0uCisKKzIwMDgtMDktMDUgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KKworCSogZ3RrLWRvYy5tYWs6IEZpeCB0aGUgY2hlY2sgZm9yIGd0a2RvYy1yZWJhc2U6IGRvbid0IHBhc3MgdGhlCisJICAnd2hpY2gnIGVycm9yIGJhY2sgdG8gbWFrZS4gIFRoaXMgZml4IGlzIG1vcmUgc3BlY2lmaWMgdGhhbgorCSAgd2hhdCBpcyBpbiB1cHN0cmVhbS4KKworMjAwOC0wOS0wNCAgU3RlZmFuIEtvc3QgIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKKwkqIGd0ay1kb2MubWFrOgorCSAgR2V0IGNsb3NlciB0byB1cHN0cmVhbSBtYWtlZmlsZXMuIERvbid0IGluc3RhbGwgaW5kZXguc2dtbCB0d2ljZS4gQ2FsbAorCSAgZ3RrZG9jLXJlYmFzZSAoaWYgZXhpc3RzKS4KKworMjAwOC0wOC0yMSAgU3RlZmFuIEtvc3QgIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKKwkgIFJldmVydCAkKHRvcF9idWlsZGRpcikgLT4gJChidWlsZGRpcikgY2hhbmdlIG9mIHJldi4gMS4zOSBhcyB0aGVyZSBpcworCSAgbm8gdmFyaWFibGUgY2FsbGVkIGJ1aWxkZGlyLgorCisyMDA4LTA3LTMxICBNYXJrIE5hdXdlbGFlcnRzICA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+CisKKwkqIGdzdC5zdXBwOgorCUFkZCBzdXBwcmVzc2lvbnMgZm9yIFVidW50eSBIYXJkeSB4ODYvNjRiaXQsIHNpbWlsYXIgdG8gZWFybGllcgorCXZlcnNpb25zIGFuZCAzMmJpdCB2YXJpYW50LgorCisyMDA4LTA3LTMxICBTZWJhc3RpYW4gRHLDtmdlICA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisKKwkqIG00L2dzdC1mZWF0dXJlLm00OgorCVJlbW92ZSBHU1RfRElTQUJMRV8oRU5VTVRZUEVTfElOREVYfFVSSSkuCisKKzIwMDgtMDctMjEgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0ubXVsbGVyIGF0IGNvbGxhYm9yYSBjbyB1az4KKworCSogbTQvZ3N0LWVycm9yLm00OjoKKwkgIFdoZW4gY2hlY2tpbmcgZm9yIEdTVF9FUlJPUl9DWFhGTEFHUywgY2hlY2sgZWFjaCBjb21waWxlciBmbGFnCisJICBpbmRpdmlkdWFsbHksIG5vdCBhbGwgdG9nZXRoZXIuCisKKzIwMDgtMDctMjAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0ubXVsbGVyIGF0IGNvbGxhYm9yYSBjbyB1az4KKworCSogbTQvZ3N0LXBhcnNlci5tNDo6CisJICBGaXggYmlzb24gdmVyc2lvbiBudW1iZXIgZGV0ZWN0aW9uIGZvciBvbGRlciAtLXZlcnNpb24KKwkgIG91dHB1dCBmb3JtYXQgKGFzIGJpc29uIDEuMjggb24gT1NYIDEwLjQgb3V0cHV0cykuCisJICBGaXhlcyAjNTQzODUzLgorCisyMDA4LTA3LTEyICBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBwbHVnaW5zLnhzbDoKKwkgIFNwbGl0IHJlZnNlY3QyIGFsc28gaGVyZSB0byBtYWtlICJFbGVtZW50IFBhZHMiIHN1YnRpdGxlIHZpc2libGUuCisKKzIwMDgtMDctMDggIFNlYmFzdGlhbiBEcsO2Z2UgIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKworCSogbTQvZ3N0LWVycm9yLm00OgorCUFkZCBjb21waWxlciBmbGFncyB0byB3YXJuIGlmIGRlY2xhcmF0aW9ucyBhZnRlciBzdGF0ZW1lbnRzIG9yCisJdmFyaWFibGUgbGVuZ3RoIGFycmF5cyBhcmUgdXNlZC4gVGhlc2UgYXJlIEM5OS9HQ0MgZXh0ZW5zaW9ucyBhbmQKKwlhcmUgbm90IHN1cHBvcnRlZCBieSBzb21lIGNvbXBpbGVycyB3ZSB3YW50IHRvIHN1cHBvcnQuCisKKzIwMDgtMDctMDIgIE1hcmsgTmF1d2VsYWVydHMgIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KKworCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKKwlPbmx5IGNsZWFuIGRvYyBtYWludGFpbmVyIHN0YW1wcyBpbiBtYWludGFpbmVyLWNsZWFuLiAgRml4ZXMgIzUzOTk3Ny4KKworMjAwOC0wNi0yMCAgU2ViYXN0aWFuIERyw7ZnZSAgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSogZ3N0ZG9jLXNjYW5nb2JqOgorCUFsd2F5cyB1c2UgZm9ybWF0IHN0cmluZ3MgZm9yIHByaW50Zi1saWtlIGZ1bmN0aW9ucywgZXZlbiBpZiB0aGV5IGp1c3QKKwlwcmludCBhIHN0cmluZy4gRml4ZXMgYnVnICM1MzY5ODEuCisKKzIwMDgtMDYtMjAgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6CisJKiBndGstZG9jLm1hazoKKwlJbmNsdWRlIENGTEFHUyBhbmQgTERGTEFHUyBpbiBHVEtET0NfQ0ZMQUdTIGFuZCBHVEtET0NfTERGTEFHUywKKwlvdGhlcndpc2UgdGhlIHZhbHVlcyBwYXNzZWQgdG8gY29uZmlndXJlIGFyZSBpZ25vcmVkLgorCUZpeGVzIGJ1ZyAjNTM2OTc4LgorCisyMDA4LTA2LTA1ICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltLm11bGxlciBhdCBjb2xsYWJvcmEgY28gdWs+CisKKwkqIG00L2dzdC1lcnJvci5tNDoKKwkgIEFkZCAtZm5vLXN0cmljdC1hbGlhc2luZyB3aGVuIGNvbXBpbGluZyB3aXRoIC1XZXJyb3IsIHRvIHdvcmsgYXJvdW5kCisJICB3YXJuaW5ncyBjYXVzZWQgYnkgR19MT0NLIHdpdGggcmVjZW50IEdMaWIgdmVyc2lvbnMgKDIuMTYueCkgKCMzMTYyMjEpLgorCisyMDA4LTA2LTA1ICBKYW4gU2NobWlkdCAgPGphbi5zY2htaWR0QHN1bi5jb20+CisKKwkqIGd0ay1kb2MubWFrOgorCURvbid0IGNvcHkgaHRtbC8qLnBuZyBmaWxlcyB1bmxlc3MgdGhleSBkb24ndCBhbHJlYWR5IGV4aXN0CisJaW4gdGhlIGRlc3RkaXIuIEZpeGVzIGRpc3RjaGVjayBmYWlsdXJlIGNhdXNlZCBieSBwZXJtaXNzaW9ucworCXByb2JsZW1zIHRyeWluZyB0byBjb3B5IGEgZmlsZSBpbnRvIHRoZSBkZXN0ZGlyIHdoZW4gaXQgYWxyZWFkeQorCWV4aXN0cy4KKworMjAwOC0wNS0yOCAgU3RlZmFuIEtvc3QgIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogcGx1Z2lucy54c2w6CisJICBUaGUgY2xhc3Mgd2FzIG5vdCBzaG93biBpbiBwbHVnaW4gZG9jcy4gRml4IHR5cG8gaW4gY2hhbmdlbG9nIGJlbG93LgorCisyMDA4LTA1LTIyICBKYW4gU2NobWlkdCAgPGphbi5zY2htaWR0QHN1bi5jb20+CisKKwkqIGdzdGRvYy1zY2FuZ29iajoKKwlFbWl0IHdhcm5pbmdzIGlmIG9uZSBvZiB0aGUgR1R5cGVzIHdlJ3JlIGV4cGVjdGluZyBpcyAwCisJd2hlbiBzY2FubmluZy4KKworMjAwOC0wNS0yMSAgRmVsaXBlIENvbnRyZXJhcyAgPGZlbGlwZS5jb250cmVyYXNAZ21haWwuY29tPgorCisJKiBndGstZG9jLXBsdWdpbnMubWFrOgorCSogZ3RrLWRvYy5tYWs6CisJRml4IGluc3RhbGxpbmcgcG5nIGltYWdlcyB3aGVuIGd0ay1kb2MgaXMgZGlzYWJsZWQuCisKKzIwMDgtMDUtMjEgIEZlbGlwZSBDb250cmVyYXMgIDxmZWxpcGUuY29udHJlcmFzQGdtYWlsLmNvbT4KKworCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKKwkqIGd0ay1kb2MubWFrOgorCUZpeCBtYWtlIGNsZWFuIHdoZW4gZ3RrLWRvYyBpcyBkaXNhYmxlZCBhbmQgb3RoZXIgY2xlYW51cHMuCisKKzIwMDgtMDUtMTcgIEphbiBTY2htaWR0ICA8amFuLnNjaG1pZHRAc3VuLmNvbT4KKworCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKKwlCZSBtb3JlIHF1aWV0IHdoZW4gdGhlIGZpbGVzIGRvbid0IHlldCBleGlzdC4KKworMjAwOC0wNS0xNiAgSmFuIFNjaG1pZHQgIDxqYW4uc2NobWlkdEBzdW4uY29tPgorCisJKiBnc3Rkb2Mtc2NhbmdvYmo6CisJQWRkIGEgbWVjaGFuaXNtIGZvciBhZGRpbmcgJ2ltcGxpY2l0bHkgY3JlYXRlZCcgR1R5cGVzIGludG8gdGhlCisJc2NhbiwgYWxsb3dpbmcgZm9yIGRvY3VtZW50aW5nIHBsdWdpbi1wcml2YXRlIGJhc2UgY2xhc3NlcyB0aGF0CisJcHJvdmlkZSBzaWduYWxzIG9yIHByb3BlcnRpZXMgZm9yIHB1YmxpYyBlbGVtZW50cy4KKworCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKKwlVc2UgJChidWlsZGRpcikgaW5zdGVhZCBvZiAkKHRvcF9idWlsZGRpcikgaW4gYSBmZXcgcGxhY2VzIC0gdGhlcmUncworCW5vIG5lZWQgdG8gaGFyZCBjb2RlICdkb2NzL3BsdWdpbnMnIGFzIHRoZSBvbmx5IHVzZWFibGUgcGF0aC4KKworMjAwOC0wNS0xNCAgUGV0ZXIgS2plbGxlcnN0ZWR0ICA8cGtqQGF4aXMuY29tPgorCisJKiBtNC9nc3QtZmVhdHVyZS5tNDoKKwlSZXBvcnQgcGx1Zy1pbnMgd2l0aG91dCBleHRlcm5hbCBkZXBlbmRlbmNpZXMgdGhhdCB3aWxsIG5vdCBiZSBidWlsdAorCWV2ZW4gd2hlbiB0aGUgbmFtZSBvZiB0aGUgcGx1Zy1pbiBpcyBhIHN1YnN0cmluZyBvZiBhbm90aGVyIHBsdWctaW4sCisJZS5nLiwgZ29vbSB2cy4gZ29vbTJrMS4KKworMjAwOC0wNS0xNCAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbS5tdWxsZXIgYXQgY29sbGFib3JhIGNvIHVrPgorCisJKiBnc3Quc3VwcDoKKwkgIEFkZCBzdXBwcmVzc2lvbiBmb3IgZ2xpYmMgYnVnIG9uIGd1dHN5L3g4Ni02NAorCisyMDA4LTA1LTEyICBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBwbHVnaW5zLnhzbDoKKwkgIEltcHJvdmUgdGhlIGxheW91dCBvZiB0aGUgY2FwcywgYnV0IHNwbGl0dGluZyB0aGVtIG9uICI7Ii4KKworMjAwOC0wNS0wOSAgU2ViYXN0aWFuIERyw7ZnZSAgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKwkKKwlQYXRjaCBieTogQnJpYW4gQ2FtZXJvbiA8YnJpYW4gZG90IGNhbWVyb24gYXQgc3VuIGRvdCBjb20+CisKKwkqIG00L2dzdC1kZWZhdWx0Lm00OgorCURvbid0IHNldCB0aGUgZGVmYXVsdCBhdWRpbyBzaW5rIHRvIHRoZSBkZWZhdWx0IHZpc3VhbGl6ZXIuCisJRml4ZXMgYnVnICM1MzIyOTUuCisKKzIwMDgtMDUtMDcgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0ubXVsbGVyIGF0IGNvbGxhYm9yYSBjbyB1az4KKworCSogY2hlY2subWFrOiAoaGVscCk6CisJICBEb2N1bWVudCBHU1RfQ0hFQ0tTIGVudmlyb25tZW50IHZhcmlhYmxlIGluIGNoZWNrcyAnbWFrZSBoZWxwJy4KKworMjAwOC0wNS0wNiAgU2ViYXN0aWFuIERyw7ZnZSAgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCVBhdGNoIGJ5OiBNYXJjLUFuZHJlIEx1cmVhdSA8bWFyY2FuZHJlIGRvdCBsdXJlYXUgYXQgZ21haWwgZG90IGNvbT4KKworCSogc2NhbmdvYmotbWVyZ2UucHk6CisJRG9uJ3QgZGVwZW5kIG9uIFR3aXN0ZWQganVzdCBmb3IgdGhlIE9yZGVyZWREaWN0IGJ1dCBpbXBsZW1lbnQgb3VyCisJb3duIG9yZGVyZWQgZGljdGlvbmFyeSBjbGFzcy4gRml4ZXMgYnVnICM1MzE1NzcuCisKKzIwMDgtMDQtMjMgIEVkd2FyZCBIZXJ2ZXkgIDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KKworCSogZ3N0LnN1cHA6CisJUmUtYXJyYW5nZSBsYXRlc3Qgc3VwcHJlc3Npb25zLgorCUFkZCBhbGwga25vd24gc3VwcHJlc3Npb25zIGZvciB1YnVudHUgaGFyZHkuIFNhbWUgYXMgZm9yIG9sZGVyCisJdWJ1bnR1cywgYnV0IHdpdGggZGlmZmVyZW50IGNvZGVwYXRocy4KKworMjAwOC0wNC0yMiAgRWR3YXJkIEhlcnZleSAgPGJpbGJvZWRAZ21haWwuY29tPgorCisJKiBnc3Quc3VwcDogTWFrZSB0bHMgbGVhayBzdXBwcmVzc2lvbiBhIGJpdCBtb3JlIGdlbmVyaWMuCisKKzIwMDgtMDQtMjIgIEVkd2FyZCBIZXJ2ZXkgIDxiaWxib2VkQGdtYWlsLmNvbT4KKworCSogZ3N0LnN1cHA6IEZpeCBvbW1pc3Npb24gaW4gbGF0ZXN0IGNvbW1pdC4KKwlNYWtlIHRscyBsZWFrIHN1cHByZXNzaW9uIG1vcmUgZ2VuZXJpYyBpbiBvcmRlciB0byBjb3ZlciBtb3JlCisJZGlzdHJpYnV0aW9ucyAoYW5kIGhvcGVmdWxseSBhbHNvIGZ1dHVyZSBkaXN0cmlidXRpb25zKS4KKworMjAwOC0wNC0yMiAgRWR3YXJkIEhlcnZleSAgPGJpbGJvZWRAZ21haWwuY29tPgorCisJKiBnc3Quc3VwcDogQWRkIHN1cHByZXNzaW9ucyBmb3IgSGFyZHkuCisJVGhleSdyZSBqdXN0IHRoZSBuZXdlciB2ZXJzaW9ucyBvZiBzaW1pbGFyIHN1cHByZXNzaW9ucyB3ZSBoYWQKKwlmb3IgdGhlIHByZXZpb3VzIHZlcnNpb25zIG9mIHVidW50dS4KKworMjAwOC0wNC0xNSAgU2ViYXN0aWFuIERyw7ZnZSAgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSogTWFrZWZpbGUuYW06CisJKiBtNC9NYWtlZmlsZS5hbToKKwlEaXN0IGFsbCBmaWxlcyBpbiBjb21tb24uIEZpeGVzIGJ1ZyAjNTI3OTg0LgorCisyMDA4LTA0LTE0ICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+CisKKwkqIG00L2dzdC1mdW5jdGlvbi5tNDoKKwkgIFJlbmFtZSBBQ19DQUNIRV9WQUwgY2FjaGUtaWRzIHRvIGNvbnRhaW4gJ19jdl8nIGluIG9yZGVyIHRvIG1ha2UKKwkgIGF1dG9jb25mLTIuNjIgY29tcGxhaW4gbGVzcy4KKworMjAwOC0wNC0xMyAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgorCisJKiBtNC9nc3QtYXJncy5tNDoKKwkqIG00L2dzdC12YWxncmluZC5tNDoKKwkgIEJ1bXAgdmFsZ3JpbmQgcmVxdWlyZW1lbnQgdG8gMy4wICh3aGljaCB3YXMgcmVsZWFzZWQgaW4gQXVndXN0IDIwMDUpLgorCSAgRml4ZXMgIzQ4OTI2OS4gQWxzbywgY2hlY2sgZm9yIHZlcnNpb24gPj1SRVEgYW5kIG5vdCA+UkVRLgorCisyMDA4LTA0LTA5ICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+CisKKwkqIG00L2dzdC1kZWZhdWx0Lm00OgorCSAgQWRkIC0td2l0aC1kZWZhdWx0LXthdWRpb3Npbmt8YXVkaW9zcmN8dmlkZW9zaW5rfHZpZGVvc3JjfHZpc3VhbGl6ZXJ9CisJICBjb25maWd1cmUgc3dpdGNoZXMgKCM1MTk0MTcpLgorCisyMDA4LTA0LTAzICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+CisKKwkqIG00L2dzdC1hcmdzLm00OgorCSAgQWRkIC0tZGlzYWJsZS1mb28gc3dpdGNoIGZvciBkZXBlbmRlbmN5LWxlc3MgcGx1Z2lucyAoIzUyNTU4NikuCisKKzIwMDgtMDQtMDEgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkqIG00L2dzdC1wYXJzZXIubTQ6CisJVW5jb25kaXRpb25hbGx5IHJlcXVpcmUgZmxleCAyLjUuMzEgYW5kIGJpc29uIDEuODc1LgorCisyMDA4LTAzLTIzICBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJKiBtNC9nc3QtYXJjaC5tNDoKKwlhbWQ2NC94ODZfNjQgYWxsb3dzIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzIHRvby4KKworMjAwOC0wMy0yMSAgU2ViYXN0aWFuIERyw7ZnZSAgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSogbTQvZ3N0LWRvd2hpbGUubTQ6CisJQWRkIG1hY3JvIHRoYXQgY2hlY2tzIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyBkbyB7fSB3aGlsZSAoMCkKKwltYWNyb3MgYW5kIGRlZmluZSBIQVZFX0RPV0hJTEVfTUFDUk9TIGlmIGl0IGRvZXMuIFRoaXMgaXMKKwluZWVkZWQgYnkgZ2xpYi9nbWFjcm9zLmggdG8gdXNlIHNvbWV0aGluZyBlbHNlIHRoYW4KKwlpZiAoMSkgZWxzZSBmb3IgR19TVE1UX1NUQVJUL0VORCB3aGVuIGNvbXBsaW5nIEMrKywgd2hpY2gKKwljYXVzZXMgY29tcGlsZXIgd2FybmluZ3MgYmVjYXVzZSBvZiBhbWJpZ2lvdXMgZWxzZSB3aXRoIGcrKyA0LjMuCisKKzIwMDgtMDMtMjEgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkqIG00L2dzdC1wbHVnaW4tZG9jcy5tNDoKKwkqIG1hbmdsZS10bXBsLnB5OgorCURvbid0IGRlcGVuZCBvbiBQeVhNTCBhbmQgdXNlIG9ubHkgWE1MIG1vZHVsZXMgdGhhdCBhcmUgc2hpcHBlZAorCXdpdGggcHl0aG9uLiBGaXhlcyBidWcgIzUxOTYzNS4KKworMjAwOC0wMy0wNyAgRWR3YXJkIEhlcnZleSAgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgorCisJKiBtNC9ndGstZG9jLm00OiAoR1RLX0RPQ19DSEVDSyk6IAorCVRoZSBwcmV2aW91cyBjb21taXQgdG8gdGhpcyBmaWxlIGJ5IFN0ZWZhbiBLb3N0IG1lbnRpb25uZWQgY2hlY2tpbmcgZm9yCisJU0VELCBidXQgTk9UIGNoZWNraW5nIGZvciBndGtkb2MtY2hlY2sgKHd0aCBpcyB0aGF0IGRvaW5nIHRoZXJlID8/KS4KKwlUaGVyZWZvcmUsIHJlbW92aW5nIHRoZSBjaGVjayBmb3IgZ3RrZG9jLWNoZWNrCisKKzIwMDgtMDMtMDMgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KKworCSogbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00OiBPb3BzLCBjaGVja2VkIGluIHRoZSB3cm9uZyBjb3B5IG9mCisJICB0aGlzIGZpbGUuICAoVXBkYXRlIGZyb20gdXBzdHJlYW0pCisKKzIwMDgtMDMtMDMgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KKworCSogbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00OiAgVXBkYXRlIGZyb20gdXBzdHJlYW0uICBGaXhlcyBhIGJ1ZworCSAgY29tcGlsaW5nIHdpdGggTVNWQy4KKworMjAwOC0wMy0wMyAgRWR3YXJkIEhlcnZleSAgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgorCisJKiBtNC9wa2cubTQ6CisJQWxsb3cgb3ZlcnJpZGUgb2YgcGtnLWNvbmZpZyByZXN1bHRzLCBhcyBwcm9wb3NlZCBieSBjb25maWd1cmUgLS1oZWxwLgorCVRoaXMgaXMgaW4gZmFjdCBqdXN0IGEgYmFja3BvcnQgZnJvbSB1cHN0cmVhbSBwa2cubTQuCisJRml4ZXMgIzUxODg5MgorCisyMDA4LTAzLTAzICBQZXRlciBLamVsbGVyc3RlZHQgIDxwa2pAYXhpcy5jb20+CisKKwkqIENoYW5nZUxvZzoKKwlDaGFuZ2Vsb2cgc3VyZ2VyeSBvZiBteSBwcmV2aW91cyBjb21taXQgdG8gYWRkIGJ1Z3ppbGxhIHJlZmVyZW5jZS4KKwkqIG00L2dzdC1hcmdzLm00OgorCUFkZCBBR19HU1RfQ0hFQ0tfUExVR0lOIGFuZCBBR19HU1RfRElTQUJMRV9QTFVHSU4gdG8gbWFrZSBpdCBlYXNpZXIKKwl0byBpbmNsdWRlIGFuZCBleGNsdWRlIHBsdWctaW5zIHdpdGhvdXQgZXh0ZXJuYWwgcmVmZXJlbmNlcywgaS5lLiwKKwlwbHVnLWlucyBsaXN0ZWQgaW4gR1NUX1BMVUdJTlNfU0VMRUNURUQuICgjNDk4MjIyKQorCisyMDA4LTAzLTAzICBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJKiBnc3Quc3VwcDoKKwlBZGQgYW5vdGhlciBnbGliYyBzdXBwcmVzc2lvbi4KKworMjAwOC0wMi0yOSAgUGV0ZXIgS2plbGxlcnN0ZWR0ICA8cGtqQGF4aXMuY29tPgorCisJKiBtNC9nc3QtZmVhdHVyZS5tNDoKKwlNYWtlIHRoZSBjb21tZW50IGJlZm9yZSBkZWZpbmVzIGdlbmVyYXRlZCB2aWEgQUdfR1NUX0NIRUNLX0ZFQVRVUkUKKwlsb29rIG5pY2VyLiAoIzQ5ODIyMikKKworMjAwOC0wMi0yNiAgSmFuIFNjaG1pZHQgIDxqYW4uc2NobWlkdEBzdW4uY29tPgorCisJKiBtNC9NYWtlZmlsZS5hbToKKwkqIG00L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQ6CisJQWRkIERhdmUgU2NobGVlZidzIEdDQyBpbmxpbmUgYXNzZW1ibHkgZGV0ZWN0aW9uIG1hY3JvCisJZm9yIHVzaW5nIGluIGdzdC1wbHVnaW5zLWdvb2QgaW4gdGhlIGdvb20gMms0IHBsdWdpbi4KKworMjAwOC0wMi0yNSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKworCSogZ3N0LWF1dG9nZW4uc2g6IEluc3RlYWQgb2Ygb25seSBwYXNzaW5nIGNlcnRhaW4gYXJndW1lbnRzIHRvCisJY29uZmlndXJlLCBwYXNzIGFueXRoaW5nIHRoYXQgd2UgZGlkbid0IGhhbmRsZS4gTXVjaCBmcmllbmRsaWVyLgorCUZpeGVzICMzNDQxMi4KKworMjAwOC0wMi0yMyAgSmFuIFNjaG1pZHQgIDxKYW4uU2NobWlkdEBzdW4uY29tPgorCisJKiBtNC9nc3QtZXJyb3IubTQ6CisJU3RvcmUgdGhlIGRldGVjdGVkIGNvbXBpbGVyIGZsYWdzIGludG8gRVJST1JfQ0ZMQUdTIHJhdGhlciB0aGFuCisJRVJST1JfQ1hYRkxBR1MsIGFuZCB1c2UgdGhlIG1hY3JvIHRoYXQgY2hlY2tzIHRoZSBDIGNvbXBpbGVyLCBub3QKKwl0aGUgQysrIG9uZS4KKworMjAwOC0wMi0yMyAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgorCisJKiBtNC9nc3QtZXJyb3IubTQ6CisJICBSZWZsb3cgY2hlY2tzIGZvciBhZGRpdGlvbmFsIHdhcm5pbmcgZmxhZ3Mgc28gdGhleSdyZSBub3QKKwkgIG5lc3RlZCwgd2hpY2ggZml4ZXMgdGhlIHJlc3VsdCByZXBvcnRpbmcgaW4gdGhlIGNvbmZpZ3VyZQorCSAgb3V0cHV0LgorCisyMDA4LTAyLTIyICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+CisKKwkqIG00L2FzLWNvbXBpbGVyLWZsYWcubTQ6CisJICBBZGQgQVNfQ1hYX0NPTVBJTEVSX0ZMQUcKKworCSogbTQvZ3N0LWVycm9yLm00OgorCSAgQWRkIEFHX0dTVF9TRVRfRVJST1JfQ1hYRkxBR1MgKEZvcnRlIGJpdHMgbmVlZCB0ZXN0aW5nKQorCisyMDA4LTAyLTIyICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+CisKKwkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6CisJICBBZGQgJ2NoZWNrLWluc3BlY3RlZC12ZXJzaW9ucycgdGFyZ2V0OyB0aGlzIGhlbHBzIGlkZW50aWZ5CisJICBmaWxlcyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCBvciB3aGVyZSB0aGUgdmVyc2lvbgorCSAgbnVtYmVyIHNob3VsZCAoaWRlYWxseSkgYmUgdXBkYXRlZCBiZWZvcmUgYSByZWxlYXNlCisJICAod2hpY2ggZG9lc24ndCBoYXBwZW4gYXV0b21hdGljYWxseSBpZiB0aGUgcmVsZWFzZXIgZG9lc24ndAorCSAgYnVpbGQgdGhhdCBwbHVnaW4gbG9jYWxseSkuIE5vdCBhZGRpbmcgYXQgYSBkaXN0Y2hlY2sgaG9vaworCSAgeWV0IHRob3VnaCwgYmVjYXVzZSBpdCdzIG5vdCByZWFsbHkgdGhhdCBpbXBvcnRhbnQgYW5kIHdvdWxkCisJICBwcm9iYWJseSBhbHNvIGJlIGEgcHJvYmxlbSBvbiBidWlsZGJvdHMuCisKKzIwMDgtMDItMjIgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkqIGdzdC5zdXBwOgorCUFkZCBldmVuIG1vcmUgZ2xpYmMgMi43IHN1cHByZXNzaW9ucy4KKworMjAwOC0wMi0yMiAgU2ViYXN0aWFuIERyw7ZnZSAgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSogZ3N0LnN1cHA6CisJQWRkIGFub3RoZXIgc3VwcHJlc3Npb24gZm9yIEdMaWIgY2FjaGluZyBzb21lIHZhbHVlcyBhZnRlcgorCXRoZSBmaXJzdCBjYWxsLgorCisyMDA4LTAyLTEyICBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJUGF0Y2ggYnk6CisJICBUaW0gTW9vbmV5IDxtb29uZXkgYXQgZG9nYmVydCBkb3QgY2MgZG90IG5kc3UgZG90IG5vZGFrIGRvdCBlZHU+CisKKwkqIG00L2dzdC1lcnJvci5tNDoKKwlVc2Ugbm8lRV9NQUNST19SRURFRklORUQgb24gU29sYXJpcyB0byBwcmV2ZW50IGNvbXBpbGVyIHdhcm5pbmdzLgorCUZpeGVzIGJ1ZyAjNTE1OTA1LgorCisyMDA4LTAyLTExICBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJKiBnc3Quc3VwcDoKKwlBZGQgYSBmZXcgbW9yZSBnbGliYyAyLjcgc3VwcHJlc3Npb25zIHRvIG1ha2UgdGhlIGF2aXN1YnRpdGxlIHVuaXQKKwl0ZXN0IHZhbGdyaW5kIGNsZWFuLiBGaXhlcyBidWcgIzUxNTcwMy4KKworMjAwOC0wMi0wOCAgU3RlZmFuIEtvc3QgIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogQ2hhbmdlTG9nOgorCSAgQ2hhbmdlbG9nIHN1cmdlcnkgZm9yIGxhc3QgY29tbWl0LgorCisyMDA4LTAyLTA4ICBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBtNC9ndGstZG9jLm00OgorCSAgQ29uZGl0aW9uYWxseSBjaGVjayBmb3IgU0VELiBBbHNvIHN5bmMgYSBiaXQgd2l0aCB1cHN0cmVhbSBtYWNyby4KKworMjAwOC0wMi0wOCAgU3RlZmFuIEtvc3QgIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKKwkqIGd0ay1kb2MubWFrOgorCSAgVXNlICckKFNFRCknIGluc3RlYWQgb2YgJ3NlZCcuIERvbid0IHVzZSAtaSBmb3IgaW4tcGxhY2UgYXMgaXRzIGdudQorCSAgb25seSwgbW92ZSB0byBhIHRlbXAgZmlsZSBpbnN0ZWFkLgorCisyMDA4LTAyLTA2ICBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBndGstZG9jLXBsdWdpbnMubWFrOgorCSogZ3RrLWRvYy5tYWs6CisJIEFzIG91ciBkb2NzIGFyZSB2ZXJzaW9uZWQsIHdlIG5lZWQgdG8gcGF0Y2ggdGhlIGluZGV4LnNnbWwgZmlsZSB0byBoYXZlCisJIGNvcnJlY3QgcGF0aHMgdGhlcmUsIHVubGVzcyB3ZSBhbHNvIHdhbnQgdG8gZm9yayBndGstZG9jJ3MgeHNsICh3aGljaAorCSB3ZSBkb24ndCkuIFRoaXMgaG9wZWZ1bGx5IGZpeGVzIHhyZWZzIGJldHdlZW4gbW9kdWxlcy4KKworMjAwOC0wMi0wMiAgU2ViYXN0aWFuIERyw7ZnZSAgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSogbTQvZ3N0LWZlYXR1cmUubTQ6CisJVXNlIHByaW50ZiBpbnN0ZWFkIG9mIGVjaG8gYXMgImVjaG8gLWUiIGlzbid0IFBPU0lYIGFuZCBkb2Vzbid0IHdvcmsKKwl3aXRoIHN0cmljdCBQT1NJWCBzaGVsbHMgbGlrZSB0Y3NoIG9yIGRhc2ggYW5kIGFsc28gbm90IGV2ZXJ5IHBsYXRmb3JtCisJaGFzIGEgL2Jpbi9lY2hvIHRoYXQgc3VwcG9ydHMgaXQuCisKKzIwMDgtMDEtMjQgIFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIENoYW5nZUxvZzoKKwkgIENoYW5nZUxvZyBzdXJnZXJ5LgorCisJKiBnc3Rkb2Mtc2NhbmdvYmo6CisJICBTeW5jIHRoZSBvYmplY3Qgc2Nhbm5lciB3aXRoIGd0ay1kb2MgZml4ZXMuIFVwZGF0ZSBhcmdzIGFuZCBoaWVyYXJjaHkKKwkgIGZpbGVzLgorCisyMDA4LTAxLTIwICBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJKiBjaGVjay5tYWs6CisJKiBjb3ZlcmFnZS9sY292Lm1hazoKKwkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6CisJKiByZWxlYXNlLm1hazoKKwlVc2UgJChNQUtFKSBpbnN0ZWFkIG9mIG1ha2UgdG8gZml4IHRoZSBidWlsZCBpZiBHTlUgbWFrZSBpcyBjYWxsZWQKKwlzb21ldGhpbmcgZWxzZSBvbiB0aGUgc3lzdGVtLgorCQorCSogbTQvYXMtZG9jYm9vay5tNDoKKwlGaXggcGF0aCBmb3IgZG9jYm9vay54c2wgaWYgd2UgaGF2ZSBubyAvZXRjL3htbC9jYXRhbG9nIGFuZCBhZGQgYQorCWRvY2Jvb2steHNsIHNlYXJjaCBwYXRoIGZvciBGcmVlQlNELgorCisyMDA4LTAxLTE4ICBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJKiBnc3Quc3VwcDoKKwlBZGQgYSBzdXBwcmVzc2lvbiBmb3IgYSBnbGliYyBidWc6CisJaHR0cDovL3ZhbGdyaW5kLm9yZy9kb2NzL21hbnVhbC9mYXEuaHRtbCNmYXEuZXhpdF9lcnJvcnM+CisKKzIwMDgtMDEtMTggIFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkqIGdzdC5zdXBwOgorCUFkZCBzb21lIG1vcmUgZ2xpYmMgMi43IHN1cHByZXNzaW9ucyBhbmQgbWFrZSB0aGUgR0xpYiBzdXBwcmVzc2lvbnMKKwlmb3IgdGhlIGhvbWUvdG1wL2V0YyBkaXJlY3RvcnkgY2FjaGluZyBhIGJpdCBtb3JlIGdlbmVyaWMuCisKKzIwMDgtMDEtMTggIFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkqIGdzdC5zdXBwOgorCUFkZCBzb21lIGdsaWJjIDIuNyBzdXByZXNzaW9ucyBhcyBmb3VuZCBvbiBEZWJpYW4vdW5zdGFibGUuCisKKzIwMDgtMDEtMTQgIEphbiBTY2htaWR0ICA8amFuLnNjaG1pZHRAc3VuLmNvbT4KKworCSogZG93bmxvYWQtdHJhbnNsYXRpb25zOgorCUFwcGFyZW50bHkgSSBoYXZlIHByb2JsZW1zIHdpdGggbGVhdmluZyB0aGluZ3MgY29tbWVudGVkIG91dCB3aGVuCisJSSBlZGl0IHNoZWxsIHNjcmlwdHMuCisKKzIwMDgtMDEtMTIgIEphbiBTY2htaWR0ICA8SmFuLlNjaG1pZHRAc3VuLmNvbT4KKworCSogZG93bmxvYWQtdHJhbnNsYXRpb25zOgorCVJlbW92ZSBiYXNoLWlzbXMKKworMjAwOC0wMS0xMiAgSmFuIFNjaG1pZHQgIDxKYW4uU2NobWlkdEBzdW4uY29tPgorCisJKiBjaGVjay1leHBvcnRzOgorCVJlc3RvcmUgdGhlIGNsZWFudXAgcm0gb2Ygb3VyIHRtcCBmaWxlIHdoaWNoIEkgZGlkbid0IG1lYW4gdG8gbGVhdmUgCisJY29tbWVudGVkIG91dC4KKworMjAwOC0wMS0xMiAgSmFuIFNjaG1pZHQgIDxKYW4uU2NobWlkdEBzdW4uY29tPgorCisJKiBjaGVjay1leHBvcnRzOgorCSAgRml4ZXMgdG8gbWFrZSBjaGVjay1leHBvcnQgd29yayBvbiBib3RoIFNvbGFyaXMgYW5kIExpbnV4CisKKwkqIG00L2dzdC1lcnJvci5tNDoKKwkgIERpc2FibGUgZXh0cmEgd2FybmluZyBjYXRlZ29yeSAoYXJndW1lbnQgbWlzbWF0Y2gpIGFzIGFuIGVycm9yCisJICBvbiBGb3J0ZSwgYXMgaXQgcHJldmVudHMgdGhlIGxpYmNoZWNrIGZhaWxfaWYgbWFjcm9zIGZyb20gY29tcGlsaW5nLgorCisJKiB3aW4zMi5tYWs6CisJICBTdWJzdGl0dXRlIHRoZSBHU3RyZWFtZXIgdmVyc2lvbiBzbyB0aGluZ3Mgd2lsbCBrZWVwIHdvcmtpbmcgaW4gMC4xMQorCisyMDA4LTAxLTExICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+CisKKwlQYXRjaCBieTogUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2ogYXhpcyBjb20+CisKKwkqIG00L2dzdC1nbGliMi5tNDoKKwkqIG00L2dzdC1saWJ4bWwyLm00OgorCSAgSW1wcm92ZS9maXggb3V0cHV0IGZyb20gY29uZmlndXJlIGlmIGVpdGhlciBnbGliLTIuMCBvcgorCSAgbGlieG1sMiBhcmUgbm90IGluc3RhbGxlZCAoIzQ5ODIyMikuCisKKzIwMDgtMDEtMDkgIFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGNvdmVyYWdlL2xjb3YubWFrOgorCSAgVXBkYXRlIGNvdmVyYWdlIG1ha2UtcnVsZXM6IHVzZSB0aGVtIGNvbmRpdGlvbmFseSwgdXNlIGxpYnRvb2wgbW9kZQorCSAgYW5kIHVzZSBsY292IHRvIGNsZWFudXAuCisKKzIwMDctMTItMTggIFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkqIGdsaWItZ2VuLm1hazoKKwkgIEFsc28gdXNlICNpbmNsdWRlICJoZWFkZXIiIGluc3RlYWQgb2YgI2luY2x1ZGUgPGhlYWRlcj4gZm9yIHRoZQorCSAgaGVhZGVycyB0aGF0IHdlcmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgc291cmNlIGZpbGVzIGZvciB0aGUgc2FtZQorCSAgcmVhc29uIGFzIGJlbG93LgorCisJICBSZW1vdmUgd2hpdGVzcGFjZSBiZWZvcmUgI2luY2x1ZGUuCisKKzIwMDctMTItMTggIFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwkqIGdsaWItZ2VuLm1hazoKKwkgIFVzZSAjaW5jbHVkZSAiaGVhZGVyIiBpbnN0ZWFkIG9mICNpbmNsdWRlIDxoZWFkZXI+IGZvciB0aGUgZ2VuZXJhdGVkCisJICBlbnVtIEMgZmlsZXMgYXMgdGhlIGZpbGUgd2lsbCBhbHdheXMgYmUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFuZAorCSAgc29tZSBjb21waWxlcnMgc2VlbSB0byBiZSBhIGJpdCBzdHJpY3QgYWJvdXQgdGhhdCB1bmxlc3MgLiBpcyBhZGRlZAorCSAgdG8gdGhlIGluY2x1ZGUgcGF0aC4KKworCSAgSW5jbHVkZSBhbGwgaGVhZGVycyB0aGF0IHdlcmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgc291cmNlIGZpbGVzIGluCisJICB0aGUgQyBmaWxlIGFzIHRoZXkncmUgdXNlZCB0aGVyZS4KKworMjAwNy0xMi0xNyAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgorCisJKiB3aW4zMi5tYWs6ICh3aW4zMiksICh3aW4zMmRlZnMpLCAod2luMzJjcmxmKToKKwkgIE1ha2UgY2hlY2sgZm9yIENSIExGIGluIFZpc3VhbCBDKysgNi4wIHByb2plY3QgZmlsZXMKKwkgIHdvcmssIGJhc2VkIG9uIHBhdGNoIGJ5IERhdmlkIFNjaGxlZWYgKCM0OTY3MjIsICMzOTM2MjYpLgorCQorMjAwNy0xMi0xNyAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgorCisJKiBNYWtlZmlsZS5hbToKKwkgIERvbid0IGZvcmdldCB0byBkaXN0IHRoZSBuZXcgd2luMzIubWFrLgorCisyMDA3LTEyLTE3ICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+CisKKwkqIHdpbjMyLm1hazogKHdpbjMyKSwgKHdpbjMyZGVmcyk6CisJICBNb3ZlIGNvbW1vbiB3aW4zMiBNYWtlZmlsZSBmb28gaW50byB0aGlzIG5ldyBmaWxlLgorCisyMDA3LTEyLTE1ICBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBndGstZG9jLXBsdWdpbnMubWFrOgorCSogZ3RrLWRvYy5tYWs6CisJICBXZSBzaG91bGQgaGF2ZSBuZXZlciBmb3JrZWQgdGhpcyB0aGF0IG11Y2ggOi8uCisKKzIwMDctMTItMTMgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KKworCSogY2hlY2stZXhwb3J0czoKKwkgIEZpeCBidWlsZCBvbiB0aGUgcHBjNjQgYnVpbGQgYm90LgorCisyMDA3LTEyLTEzICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+CisKKwkqIGNoZWNrLWV4cG9ydHM6CisJICBTdXBwcmVzcyBtb3JlIHVuaW50ZW50aW9uYWwgZXhwb3J0cyAodG9vIG11Y2ggaGFzc2xlIHRvIHJlbmFtZSB0aGVtLAorCSAgc2luY2UgdGhlIHdpbjMyIHByb2plY3QgZmlsZXMgd291bGQgbmVlZCBjaGFuZ2luZyB0b28pLgorCisyMDA3LTEyLTEyICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+CisKKwkqIE1ha2VmaWxlLmFtOgorCSAgY2hlY2stZXhwb3J0cyBzaG91bGQgYmUgZGlzdGVkLgorCisyMDA3LTEyLTEyICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+CisKKwkqIGNoZWNrLWV4cG9ydHM6CisJICBBZGQgcXVpY2snbidkaXJ0eSBzY3JpcHQgdG8gY2hlY2sgdGhlIGV4cG9ydGVkIHN5bWJvbHMgb2YgYSBsaWJyYXJ5CisJICBhZ2FpbnN0IHRoZSBzeW1ib2xzIGluIHRoZSBjb3JyZXNwb25kaW5nIC5kZWYgZmlsZSAoIzQ5Mzk4MykuIEJhc2VkCisJICBvbiBzY3JpcHQgYnkgT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzLgorCisyMDA3LTExLTA2ICBKYW4gU2NobWlkdCAgPGphbi5zY2htaWR0QHN1bi5jb20+CisKKwkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6CisJRml4IGRpc3RjaGVjayBieSBtYWtpbmcgc3VyZSB0aGUgdHlwZXMgZmlsZXMgYXJlIHRyZWF0ZWQgbGlrZSB0aGUKKwlvdGhlciBndGtkb2Mtc2NhbmdvYmogZ2VuZXJhdGVkIGZpbGVzLgorCisyMDA3LTA5LTIxICBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJKiBtNC9nc3QtYXJncy5tNDoKKwkgIExldCB0aGUgQUdfR1NUX0FSR19FTkFCTEVfRVhQRVJJTUVOVEFMIG1hY3JvIGRlZmF1bHQgdG8gZGlzYWJsZQorCSAgYnVpbGRpbmcgb2YgZXhwZXJpbWVudGFsIHBsdWdpbnMuIE5vYm9keSB1c2VzIGl0IHlldCBhbmQgdGhlCisJICAtLWVuYWJsZS0tZXhwZXJpbWVudGFsIHN0dWZmIGZyb20gZ3N0LXBsdWdpbnMtZ29vZCBkZWZhdWx0cyB0bworCSAgZGlzYWJsZSB0b28uCisKKzIwMDctMDktMDYgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KKworCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKKwkgIEp1c3QgdXNlIHRoZSBub3JtYWwgJ2NoZWNrJyB0YXJnZXQgYW5kIGF2b2lkIGEgY2lyY3VsYXIKKwkgIGRlcGVuZGVuY3kuCisKKzIwMDctMDktMDYgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KKworCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKKwkgIEFkZCBydWxlIHRvIGVycm9yIG91dCBpZiAuaGllcmFyY2h5IGZpbGUgY29udGFpbnMgdGFicy4KKworMjAwNy0wOC0yMCAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgorCisJKiBkb3dubG9hZC10cmFuc2xhdGlvbnM6CisJKiBwby5tYWs6CisJICBJZiB0aGVyZSBhcmUgbmV3IGxhbmd1YWdlcywgdGhleSBuZWVkIHRvIGJlIGFkZGVkIHRvIHBvL0xJTkdVQVMuCisKKzIwMDctMDgtMjAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KKworCSogZG93bmxvYWQtdHJhbnNsYXRpb25zOgorCSogcG8ubWFrOgorCSAgRml4IHVwICdkb3dubG9hZC1wbycgYSBiaXQsIHNvIHRoYXQgd2UgZmluZCBuZXcgdHJhbnNsYXRpb25zCisJICBmb3IgbGFuZ3VhZ2VzIHRoYXQgYXJlbid0IGluIG91ciBwby9MSU5HVUFTIGZpbGUgeWV0IHRvby4KKworMjAwNy0wNy0xNiAgSmFuIFNjaG1pZHQgIDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJKiBnc3Quc3VwcDoKKwlBZGQgYSBzdXBwcmVzc2lvbiBmb3IgR0xpYiBjYWNoaW5nIHRoZSB0bXAgZGlyIHNlZW4gb24gYW4KKwlVYnVudHUgRmVpc3R5IHN5c3RlbS4KKworMjAwNy0wNy0xMyAgSmFuIFNjaG1pZHQgIDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJKiBtNC9nc3QtZmVhdHVyZS5tNDoKKwlJZiB3ZSB3YW50IHRvIHVzZSAnZWNobyAtZScsIGNhbGwgL2Jpbi9lY2hvIGluc3RlYWQgb2YgdGhlIHNoZWxsJ3MKKwlzaW5jZSAtZSBpcyBhIGJhc2ggZXh0ZW5zaW9uLCBhbmQgb3VyIC9iaW4vc2ggbWlnaHQgbm90IGJlIGJlaW5nCisJcHJvdmlkZWQgYnkgYmFzaC4KKworMjAwNy0wNy0wMSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworCSogcG8ubWFrOgorCSAgVHJhbnNsYXRpb24gcHJvamVjdCBoYXMgbW92ZWQuICBBbHNvLCBubyBpZGVhIGhvdyB0aGlzIHVzZWQgdG8KKwkgIHdvcmsgZ2l2ZW4gdGhhdCB3ZSB3ZXJlbid0IGRvd25sb2FkaW5nIGEgLnBvIGZpbGUuCisKKzIwMDctMDYtMjUgIFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC14bWxpbnNwZWN0LnB5OgorCSogcGx1Z2lucy54c2w6CisJICBBbHNvIGV4dHJhY3QgZWxlbWVudCBjYXBzIGZvciBwbHVnaW4tZG9jcy4gRml4ZXMgcGFydHMgb2YgIzExNzY5Mi4KKworMjAwNy0wNi0yMSAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgorCisJUGF0Y2ggYnk6IEFuZHJlYXMgU2Nod2FiCisKKwkqIG00L2dzdC1mZWF0dXJlLm00OgorCSAgRml4IHF1b3RpbmcgKCM0NDk0OTMpLgorCisyMDA3LTA2LTEwICBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorCisJKiBtNC9nc3QtcGFyc2VyLm00OgorCU9ubHkgZ2VuZXJhdGUgdGhlIHBhcnNlciBpZiBiaXNvbiA+PSAxLjg3NSBfYW5kXyBmbGV4ID49IDIuNS4zMSBpcworCWluc3RhbGxlZCBhbmQgdXNlIHByZS1nZW5lcmF0ZWQgc291cmNlcyBvdGhlcndpc2UuIEZpeGVzIGJ1ZyAjNDQ0ODIwLgorCisyMDA3LTA1LTExICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAZmx1ZW5kby5jb20+CisKKwkqIGdzdC5zdXBwOgorCSAgU3VwcHJlc3Npb24gdmFyaWFudCBmb3Igb3VyIGdvb2QgZnJpZW5kIHRoZSBUTFMgbGVhaywgdGhpcyB0aW1lIGZvcgorCSAgVWJ1bnR1IEZlaXN0eS94ODYuCisKKzIwMDctMDUtMDkgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KKworCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKKwkgIEZpeCBtYWtlIGRpc3RjaGVjayBhZ2FpbjsgY2hhbmdlIHNvbWUgc3BhY2VzIHRvIHRhYnMgaW4gbWFrZWZpbGUuCisKKzIwMDctMDQtMjkgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKwkqIGd0ay1kb2MtcGx1Z2lucy5tYWsgKC1tb2R1bGUpOgorCSAgRXJyb3Igb3V0IHdoZW4gdGhlIGh0bWwgYnVpbGQgc3RlcCBnaXZlcyB3YXJuaW5ncywgc28gdGhleSBnZXQKKwkgIGZpeGVkIHByb3Blcmx5LgorCisyMDA3LTA0LTIzICBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBtNC9nc3QtZmVhdHVyZS5tNDoKKwkgIEFkZCBtYWNybyBBR19HU1RfUEFSU0VfU1VCU1lTVEVNX0RJU0FCTEVTIHRoYXQgY2hlY2tzIHRoZSBkZWZpbmVzIGluCisJICB0aGUgY29uZmlndXJhdGlvbiBoZWFkZXIgYW5kIEFDX0RFRklORVMgdGhlIHNldGluZ3MuCisKKzIwMDctMDQtMTkgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisKKwlQYXRjaCBieTogVmluY2VudCBUb3JyaSA8dnRvcnJpIGF0IHVuaXYtZXZyeSBkb3QgZnI+CisKKwkqIG00L2dzdC1wYXJzZXIubTQ6CisJUHV0IHRoZSBBQ19NU0dfUkVTVUxUIG91dHB1dCBpbiBicmFja2V0cyB0byBnZXQgaXQgcHJvcGVybHkgd3JpdHRlbiB0bworCXRoZSB0ZXJtaW5hbC4KKworMjAwNy0wNC0xOCAgU2ViYXN0aWFuIERyw7ZnZSAgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSogbTQvZ3N0LXBhcnNlci5tNDoKKwlDaGVjayBmb3IgZmxleCA+PSAyLjUuMzEgYW5kIHNldCBHRU5FUkFURV9QQVJTRVIgaWYgd2UgaGF2ZSBhdCBsZWFzdAorCXRoYXQgdmVyc2lvbi4gT3RoZXJ3aXNlIHVzZSBwcmUtZ2VuZXJhdGVkIHBhcnNlciBzb3VyY2VzIGFzIHdlIGNhbid0CisJcmFpc2UgdGhlIHJlcXVpcmVkIGZsZXggdmVyc2lvbi4gSEFWRV9NVF9TQVZFX0ZMRVggaXMgb2Jzb2xldGUgbm93CisJYXMgd2UgdXNlIGEgbmV3IGVub3VnaCBmbGV4IHZlcnNpb24gYW55d2F5LiBGaXJzdCBwYXJ0IG9mICMzNDkxODAKKworMjAwNy0wNC0xMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworCSogbTQvZ3N0LWNoZWNrLm00OgorCSAgQWxsb3cgcHJlLXNldHRpbmcgdGhlIEdTVChQQilfVE9PTFMvUExVR0lOU19ESVIgdmFyaWFibGVzIHRvIGhlbHAKKwkgIGJ1aWxkcyBhZ2FpbnN0IG9sZGVyIEdTdHJlYW1lci4KKworMjAwNy0wMy0yNSAgU2ViYXN0aWFuIERyw7ZnZSAgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKworCSogbTQvZ3N0LXBhcnNlci5tNDoKKwlGaXggdGhlIGZsZXggdmVyc2lvbiBjaGVjay4gSXQgaWdub3JlZCB0aGUgbWljcm8gdmVyc2lvbiBiZWZvcmUuCisKKzIwMDctMDMtMDkgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSogY2hlY2subWFrOgorCVVzZSB0aGUgc2FtZSB0aW1lb3V0IHdoZW4gZ2VuZXJhdGluZyB2YWxncmluZCBzdXBwcmVzc2lvbnMgYXMgCisJcnVubmluZyB0aGUgdmFsZ3JpbmQgdGVzdC4KKworCSogZ3N0LnN1cHA6CisJQWRkIHNvbWUgbW9yZSBzdXBwcmVzc2lvbnMgYW5kIHN0dWZmLgorCisyMDA3LTAzLTA4ICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkqIGNoZWNrLm1hazoKKwlNYWtlIHN1cmUgR1NsaWNlIGlzIGRpc2FibGVkIHdoZW4gYnVpbGRpbmcgc3VwcHJlc3Npb25zIHRvby4KKworCSogZ3N0LnN1cHA6CisJQWRkIGFyb3VuZCAqODUwKiBsaW5lcyBvZiBzdXBwcmVzc2lvbnMgZm9yIG9uZS10aW1lIGluaXRpYWxpc2F0aW9ucworCWluc2lkZSBsaWJhc291bmQgYW5kIGdjb25mL2Jvbm9iby9PUkJpdC4gSSBmZWVsIHNvIGRpcnR5LgorCisyMDA3LTAzLTA3ICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkqIGdzdC5zdXBwOgorCWFkZCBhIHN1cHByZXNzaW9uIGZvciB0aGlzIEdDb25mIGZsdXAgb24gdGhlIEZDNSBidWlsZGJvdC4KKworMjAwNy0wMy0wNiAgSmFuIFNjaG1pZHQgIDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJKiBnc3Quc3VwcDoKKwlNYWtlIHRoZSBzdXBwcmVzc2lvbiBhIGxpdHRsZSBtb3JlIGdlbmVyaWMsIHRvIGNhdGNoIHRoZSBGQzUgCisJYmFja3RyYWNlIHRvby4KKworMjAwNy0wMy0wNiAgSmFuIFNjaG1pZHQgIDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJKiBnc3Quc3VwcDoKKwlBZGQgYSBzdXBwcmVzc2lvbiBmb3IgbGliY2RpbyAwLjc2LiBJdCBsZWFrcyBhbiBpbnRlcm5hbCBzdHJ1Y3QKKwl3aGVuIHRoZSBDRC1ST00gZGV2aWNlIGlzIG5vdCBhY2Nlc3NpYmxlLgorCisyMDA3LTAyLTI4ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBtNC9nc3QtYXJjaC5tNDoKKwkgIE1vdmUgYSBsaW5lIHRoYXQgd2FzIGluIHRoZSB3cm9uZyBtYWNybworCisyMDA3LTAyLTI4ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBtNC9nc3QubTQ6CisJICBBZGQKKwkqIG00L2dzdC1hcmNoLm00OgorCSogbTQvZ3N0LWFyZ3MubTQ6CisJKiBtNC9nc3QtY2hlY2subTQ6CisJKiBtNC9nc3QtZGVidWdpbmZvLm00OgorCSogbTQvZ3N0LWRlZmF1bHQubTQ6CisJKiBtNC9nc3QtZG9jLm00OgorCSogbTQvZ3N0LWVycm9yLm00OgorCSogbTQvZ3N0LWZlYXR1cmUubTQ6CisJKiBtNC9nc3QtZnVuY3Rpb24ubTQ6CisJKiBtNC9nc3QtZ2V0dGV4dC5tNDoKKwkqIG00L2dzdC1nbGliMi5tNDoKKwkqIG00L2dzdC1saWJ4bWwyLm00OgorCSogbTQvZ3N0LXBhcnNlci5tNDoKKwkqIG00L2dzdC1wbHVnaW4tZG9jcy5tNDoKKwkqIG00L2dzdC1wbHVnaW5kaXIubTQ6CisJKiBtNC9nc3QtdmFsZ3JpbmQubTQ6CisJKiBtNC9nc3QteDExLm00OgorCSAgQ29udmVydCBhbGwgbWFjcm9zIHRvIHVzZSBBR19HU1Qgc3R5bGUgc28gd2UgY2FuIHByb3Blcmx5IHdhcm4KKwkgIHdoZW4gdGhleSdyZSBtaXNzaW5nIGlmIGNvbmZpZ3VyZS5hYyBjYWxscyBBR19HU1RfSU5JVAorCSAgV2lsbCByZXF1aXJlIHVwZGF0ZSBpbiBhbGwgR1N0cmVhbWVyIG1vZHVsZXMuCisKKzIwMDctMDItMTEgIFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIG00L2dzdC1hcmdzLm00OgorCSAgUmVtb3ZlICdlbmFibGUnIGZyb20gY29uZmlndXJlIHN3aXRjaCBkZXNjcmlwdGlvbiBhcyB0aGlzIGxlYWRzIHRvIAorCSAgY29uZnVzaW5nIGxpbmVzIGxpa2UgImRpc2FibGUgZW5hYmxlIGJ1aWxpbmcgLi4uIi4KKwkqIG00L2dzdC1mZWF0dXJlLm00OgorCSAgRml4IGNvbW1lbnQgdG8gc291bmQgbGVzcyBob3JyaWJsZS4KKworMjAwNy0wMi0wNyAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgorCisJUGF0Y2ggYnk6IFdpbGwgTmV3dG9uICA8d2lsbC5uZXd0b24gZ21haWwgY29tPgorCisJKiBtNC9nc3QtY2hlY2subTQ6CisJICBVc2UgJFBLR19DT05GSUcgcmF0aGVyIHRoYW4gcGtnLWNvbmZpZyBkaXJlY3RseSwgdGhlIG9uZSBpbiBvdXIgcGF0aAorCSAgbWlnaHQgbm90IGJlIHRoZSBvbmUgd2Ugd2FudCwgbGlrZSB3aGVuIGNyb3NzLWNvbXBpbGluZy4gQWxzbywgb3RoZXIKKwkgIG1hY3JvcyBzdWNoIGFzIFBLR19DSEVDS19NT0RVTEVTIHVzZSAkUEtHX0NPTkZJRywgc28gd2Ugc2hvdWxkCisJICBwcm9iYWJseSB0b28ganVzdCBmb3IgY29uc2lzdGVuY3kuIEZpeGVzICM0MDUyODguCisKKzIwMDctMDEtMDggIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KKworCSogbTQvZ3N0LXBhcnNlci5tNDoKKwkgIE5lZWQgdG8gdXNlIGRvdWJsZSBzcXVhcmUgYnJhY2tldHMgYWdhaW4gc28gbTQgZG9lc24ndCByZW1vdmUgdGhlbQorCSAgKGZpeGVzICMzNzg5MzEpLgorCisJKiBtNC9nc3QtYXJncy5tNDoKKwkgIFVzZSBkb3VibGUgc3F1YXJlIGJyYWNrZXRzIGhlcmUgYXMgd2VsbCwgZm9yIHRoZSBzYW1lIHJlYXNvbi4KKworMjAwNy0wMS0wNSAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgorCisJKiBtNC9nc3QtcGFyc2VyLm00OgorCSAgVXNlICdzZWQnIHJhdGhlciB0aGFuICd0cicgdG8gc3RyaXAgdHJhaWxpbmcgbGV0dGVycyBmcm9tIHZlcnNpb24KKwkgIG51bWJlcnMsIHNpbmNlICd0cicgbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBhbmQgd2Uga25vdyBzZWQgaXMKKwkgICgjMzc4OTMxKS4KKworMjAwNi0xMC0yMSAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgorCisJKiBjaGVjay5tYWs6CisJICBJbmNyZWFzZSBkZWZhdWx0IHRpbWVvdXQgdW5kZXIgdmFsZ3JpbmQsIDYwIGlzIGp1c3QgdG9vIHNob3J0IGFuZAorCSAgc29tZSB0ZXN0cyB0YWtlIGEgYml0IGxvbmdlciB0aGVzZSBkYXlzIGFuZCBub3QgZXZlcnlvbmUgaGFzIGEKKwkgIGJlZWZ5IG1hY2hpbmUuCisKKzIwMDYtMDktMjkgIE1pY2hhZWwgU21pdGggIDxtc21pdGhAZmx1ZW5kby5jb20+CisKKwkqIGdzdC5zdXBwOgorCSAgTW9yZSBzdXBwcmVzc2lvbnMgZm9yIGVkZ3kuIAorCisyMDA2LTA5LTI4ICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkqIG00L2dzdC1nbGliMi5tNDoKKwlVc2UgZ21vZHVsZS1uby1leHBvcnQtMi4wLnBjIGluc3RlYWQgb2YgZ21vZHVsZS0yLjAucGMgLSB3ZSBuZWl0aGVyCisJd2FudCBub3IgbmVlZCAtLWV4cG9ydC1keW5hbWljICh3aGljaCBlbmRzIHVwIG1ha2luZyB1cyBleHBvcnQgYSBidW5jaAorCW9mIHVubmVlZGVkIHN5bWJvbHMpCisKKzIwMDYtMDktMTQgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KKworCSogZ3N0LnN1cHA6CisJICBTb21lIHN1cHByZXNzaW9ucyBmb3IgdGhlIG1vcmUgcmVjZW50IGxkLnNvIGluIHVidW50dSBlZGd5LgorCisyMDA2LTA4LTIzICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+CisKKwkqIGdzdC5zdXBwOgorCSAgU2hvcnRlbiBmdW5jdGlvbiB0cmFpbCBzbyB0aGUgc3VwcHJlc3Npb24gd29ya3Mgb24KKwkgIG15IHVidW50dSBkYXBwZXIgc3lzdGVtIHdpdGggY29yZSBjdnMgYXMgd2VsbC4KKworMjAwNi0wNy0yOCAgSmFuIFNjaG1pZHQgIDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJKiBnc3Quc3VwcDoKKwlFeHRyYSBzdXBwcmVzc2lvbnMgZnJvbSBteSBVYnVudHUgeDg2XzY0IG1hY2hpbmUKKworMjAwNi0wNy0yNCAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgorCisJUGF0Y2ggYnk6IEZyZWRlcmljIFBldGVycyA8ZnBldGVycyBhdCBlbnRyb3V2ZXJ0IGNvbT4KKworCSogbTQvZ3N0LXBhcnNlci5tNDoKKwkgIE5lZWQgdG8gZG91YmxlIHNxdWFyZSBicmFja2V0cyBpbiAubTQgZmlsZXMuIFNob3VsZCBmaXggYmlzb24KKwkgIHZlcnNpb24gZGV0ZWN0aW9uIHdpdGggdmVyc2lvbiBudW1iZXJzIGxpa2UgMS4yM2EgKCMzNDgzNTQpLgorCisyMDA2LTA3LTI0ICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkqIGNoZWNrLm1hazoKKwlWYWxncmluZCBmYWlscyB0byBmaW5kIHRlc3RzIHdyaXR0ZW4gaW4gdGVzdHMvY2hlY2svIGRpcmVjdGx5IChyYXRoZXIKKwl0aGFuIGEgc3ViZGlyKSAtIGJlY2F1c2UgdmFsZ3JpbmQgZ2V0cyBydW4gd2l0aCBhIGZpbGVuYW1lIHRoYXQKKwlkb2Vzbid0IGNvbnRhaW4gYSByZWxhdGl2ZSBwYXRoLCBpdCBnb2VzIHNlYXJjaGluZyAvdXNyL2JpbiBpbnN0ZWFkLgorCVJ1biB3aXRoIC4vLi4uLiB0byBtYWtlIHRoaW5ncyB3b3JrIGVpdGhlciB3YXkuCisKKwkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6CisJQWRkICQodG9wX2J1aWxkZGlyKS9zcmMgYXMgYSBwbGFjZSB0byBsb29rIGZvciBwbHVnaW5zCisJd2hlbiBidWlsZGluZyB0b28sIHNpbmNlIHRoYXQncyB3aGVyZSBnc3QtdGVtcGxhdGUga2VlcHMgdGhpbmdzCisKKzIwMDYtMDctMjMgIFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwlQYXRjaCBieTogRnJlZGVyaWMgUGV0ZXJzIDxmcGV0ZXJzQGVudHJvdXZlcnQuY29tPgorCisJKiBtNC9nc3QtcGFyc2VyLm00OgorCSAgRml4IGJpc29uIGRldGVjdGlvbiAoIzM0ODM1NCkKKworMjAwNi0wNy0yMSAgU3RlZmFuIEtvc3QgIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogbTQvZ3N0LXBhcnNlci5tNDoKKwkgIGNoZWNrIGZvciBiaXNvbiBhbmQgZmxleAorCisyMDA2LTA3LTEzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBtNC9nc3QtcGx1Z2luLWRvY3MubTQ6CisJICByZW1vdmUgdGhlIGNvbmZpZ3VyZSBhcmd1bWVudCBmb3IgZW5hYmxpbmcgcGx1Z2luIGRvYyBidWlsZDsKKwkgIGhhdmluZyBndGstZG9jIGVuYWJsZWQgYW5kIHB5eG1sIHByZXNlbnQgaXMgZW5vdWdoIG9mIGEgdHJpZ2dlcgorCisyMDA2LTA3LTAzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBjb3ZlcmFnZS9sY292Lm1hazoKKwkgIGZpeCB1cCBydWxlcyB0byB3b3JrIHdpdGggZ3N0LXB5dGhvbiBhcyB3ZWxsCisJICBydW4gIm1ha2UgbGNvdiIgdG8gdGVzdCBhbmQgZ2VuZXJhdGUgdGhlIHJlcG9ydHMKKwkgIHJ1biAibWFrZSBsY292LXJlc2V0IiB0byByZWRvIGl0IGFmdGVyIHRoYXQKKworMjAwNi0wNy0wMiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworCSogTWFrZWZpbGUuYW06CisJKiBjaGVjay5tYWs6CisJICBhZGQgYW4gaW5zcGVjdCB0YXJnZXQgdGhhdCBpbnNwZWN0cyBldmVyeSBlbGVtZW50IGZlYXR1cmUsCisJICBzbyB3ZSBjYW4gaGF2ZSB0aGF0IGFkZGVkIGZvciBjb3ZlcmFnZQorCSogY292ZXJhZ2UvbGNvdi5tYWs6CisJICBhZGQgc3VwcG9ydCBmb3IgbGNvdgorCisyMDA2LTA3LTAyICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBtNC9nc3QtYXJncy5tNDoKKwkgIHdoZW4gYnVpbGRpbmcgd2l0aCBnY292LCByZXNldCBDRkxBR1MgYW5kIGZyaWVuZHMgdG8gTzAKKworMjAwNi0wNy0wMiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworCSogbTQvZ3N0LWFyZ3MubTQ6CisJICBGaW5kIHRoZSBnY292IHRoYXQgbWF0Y2hlcyB0aGUgZ2NjIHZlcnNpb24KKwkgIE9ubHkgYWxsb3cgZ2NvdiBpZiB3ZSB1c2UgZ2NjCisKKzIwMDYtMDctMDIgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKwkqIE1ha2VmaWxlLmFtOgorCSogY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LWVudHJ5LnBsOgorCSogY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LnBsOgorCSogY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LnhzbDoKKwkgIGNvcHkgY292ZXJhZ2UgcmVwb3J0aW5nIGZpbGVzIGZyb20gZGJ1cworCisyMDA2LTA3LTAxICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBtNC9nc3QtYXJncy5tNDoKKwkgIGxpYnRvb2wgc3RyaXBzIGdjb3YncyAtZiBmbGFncywgc28gbGliZ2NvdiBkb2VzIG5vdCBnZXQKKwkgIGxpbmtlZCBpbi4gIFNldHRpbmcgR0NPVl9MSUJTIHdpdGggLWxnY292IGZpeGVzIGxpYnRvb2wncworCSAgc3RyaXBwaW5nCisJICBhbHNvIHNob3cgd2hhdCBwa2ctY29uZmlnLXBhdGggd2Ugc2V0CisKKzIwMDYtMDYtMjIgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KKworCVBhdGNoIGJ5OiBQZXRlciBLamVsbGVyc3RlZHQgPHBraiBhdCBheGlzIGNvbT4KKworCSogbTQvZ3N0LWZlYXR1cmUubTQ6CisJICBTaG93IGxpc3Qgb2YgcGx1Z2lucyB3aXRob3V0IGV4dGVybmFsIGRlcGVuZGVuY2llcyB0aGF0CisJICB3aWxsIG5vdCBiZSBidWlsdCBhcyB3ZWxsICgjMzQ0MTM2KS4KKworMjAwNi0wNi0xNSAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgorCisJKiBtNC9nc3QtcGx1Z2luLWRvY3MubTQ6CisJICBhZGQgR1NUX1BMVUdJTl9ET0NTLCB3aGljaCBjaGVja3MgZm9yIGV2ZXJ5dGhpbmcgbmVlZGVkCisJICB0byBidWlsZCB0aGUgcGx1Z2luIGRvY3MgKG5hbWVseSBndGstZG9jIGFuZCBweXhtbCk7IGFsc28KKwkgIGFkZHMgYSBuZXcgLS1lbmFibGUtcGx1Z2luLWRvY3MgY29uZmlndXJlIHN3aXRjaDsgd2lsbAorCSAgc2V0IEVOQUJMRV9QTFVHSU5fRE9DUyBjb25kaXRpb25hbCBmb3IgdXNlIGluIE1ha2VmaWxlLmFtCisJICBmaWxlcyAoc2VlICMzNDQwMzkpLgorCisyMDA2LTA2LTExICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBtNC9nc3QtY2hlY2subTQ6CisJICBhZGQgR1NUX1BLR19DSEVDS19NT0RVTEVTLCB3aGljaCBpbiB0aGUgbm9ybWFsIGNhc2Ugb2YgY2hlY2tpbmcKKwkgIGZvciBhIGRlcGVuZGVuY3kgbGliIGZvciBhIHBsdWctaW4gb25seSBuZWVkcyB0d28gYXJndW1lbnRzCisJICB0byBkbyB0aGUgcmlnaHQgdGhpbmcuCisJKiBtNC9nc3QtZmVhdHVyZS5tNDoKKwkgIGNsZWFuIHVwIG91dHB1dCBhIGxpdHRsZSBvZiBmZWF0dXJlIGNoZWNraW5nOyBhbHNvIGRlYWwgd2l0aAorCSAgbm9uLXBsdWctaW4gZmVhdHVyZSBjaGVja3MKKwkqIG00L01ha2VmaWxlLmFtOgorCSogbTQvZ3N0LWdzdHJlYW1lci5tNDoKKwkgIHJlbW92ZSB0aGlzIGZpbGU7IGl0J3MgYSB1c2VsZXNzIGNoZWNrCisKKzIwMDYtMDYtMDYgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKwkqIG00L2dzdC1hcmNoLm00OgorCSAgYWRkIFBQQzY0IHNvIHdlIGNhbiBoYXZlIHNlcGFyYXRlIHN0cnVjdHVyZSBzaXplcyBmb3IgaXQKKworMjAwNi0wNi0wNSAgRWR3YXJkIEhlcnZleSAgPGVkd2FyZEBmbHVlbmRvLmNvbT4KKworCSogZ3RrLWRvYy5tYWs6CisJQ2hlY2sgZm9yIHRoZSBwcm9wZXIgLmRldmhlbHAyIGZpbGUgdG8gcmVtb3ZlLgorCisyMDA2LTA1LTMxICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBndGstZG9jLm1hazoKKwkgIGFsbG93IGEgbWFnaWMgdmFyaWFibGUgdG8gc3VwcHJlc3MgZXJyb3JzIGZyb20gZG9jYnVpbGRpbmcKKworMjAwNi0wNS0zMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyAoYXQpIGFwZXN0YWFydCAoZG90KSBvcmc+CisKKwkqIGd0ay1kb2MubWFrOgorCSAgZXJyb3Igb3V0IGlmIGd0a2RvYy1ta3RtcGwgZmluZHMgdW51c2VkIGRlY2xhcmF0aW9ucworCisyMDA2LTA1LTI4ICBFZHdhcmQgSGVydmV5ICA8ZWR3YXJkQGZsdWVuZG8uY29tPgorCisJKiBnc3Quc3VwcDoKKwlSZXZlcnRpbmcgcHJldmlvdXMgY29tbWl0LiAgVGhhdCdzIGdvb2QgdG8ga25vdywgRWR3YXJkLCBidXQgd2h5ID8KKwkKKzIwMDYtMDUtMjggIEVkd2FyZCBIZXJ2ZXkgIDxlZHdhcmRAZmx1ZW5kby5jb20+CisKKwkqIGdzdC5zdXBwOgorCUFkZGVkIHN1cHByZXNpb24gZm9yIG1lbWxlYWsgaW4gZ19vcHRpb25fY29udGV4dF9wYXJzZSBvbiBmYzUtNjQKKworMjAwNi0wNS0xOSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworCSogbTQvZ3N0LWNoZWNrLm00OgorCSAgc2V0IEdTVFBCX1BMVUdJTlNfRElSIGp1c3QgbGlrZSBHU1RfUExVR0lOU19ESVIKKworMjAwNi0wNS0xOCAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgorCisJKiBjaGVjay5tYWs6CisJICBGaXggJ21ha2UgaGVscCcgaW4gY2hlY2sgZGlyZWN0b3JpZXMsIGl0IHNob3VsZCBiZQorCSAgJ3ZhbGdyaW5kLmdlbi1zdXBwcmVzc2lvbnMnIG5vdCAndmFsZ3JpbmQtZ2VuLXN1cHByZXNzaW9ucycKKwkgIChub3QgY2hhbmdpbmcgdGFyZ2V0IHRvIG1hdGNoIGhlbHAgc3RyaW5nIG9uIHB1cnBvc2UgdG8ga2VlcAorCSAgc2NyaXB0cyBldGMuIGZ1bmN0aW9uYWwpLgorCisyMDA2LTA1LTE4ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJUGF0Y2ggYnk6IFBldGVyIEtqZWxsZXJzdGVkdAorCisJKiBtNC9nc3QtYXJjaC5tNDoKKwkgIGFkZCBzdXBwb3J0IGZvciBDUklTIGFuZCBDUklTdjMyLgorCisyMDA2LTA1LTE3ICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkqIG00L2dzdC1hcmdzLm00OgorCUZpeCB0aGUgbWFjcm9zIGZvciBjb21tYW5kLWxpbmUgc3VwcGxpZWQgcGFja2FnZSBhbmQgb3JpZ2luIG5hbWVzCisJc28gdGhleSBkb24ndCBlbmQgdXAgYmVpbmcgY29uZmlndXJlIGFzICIiIChGaXhlcyAjMzQxNDc5KQorCisyMDA2LTA1LTE0ICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSogZ3RrLWRvYy5tYWs6CisJQWRkIHVuaW5zdGFsbCBydWxlIHRvIHJlbW92ZSAuZGV2aGVscDIgZmlsZXMuCisKKzIwMDYtMDUtMDkgIEVkd2FyZCBIZXJ2ZXkgIDxlZHdhcmRAZmx1ZW5kby5jb20+CisKKwkqIGdzdC5zdXBwOiAKKwkgIEFkZCBzdXBwcmVzc2lvbiBmb3IgR1NsaWNlIHZlcnNpb24gb2YKKwkgIGdfdHlwZV9pbml0IGNhbGxvYyBsZWFrCisKKzIwMDYtMDQtMDUgIE1pY2hhZWwgU21pdGggIDxtc21pdGhAZmx1ZW5kby5jb20+CisKKwkqIGdzdC5zdXBwOgorCSAgRGVsZXRlIGEgYm9ndXMgc3VwcHJlc3Npb24gZm9yIHRoZSByZWdpc3RyeSBjb2RlLgorCSAgR2VuZXJhbGlzZSBhIHN1cHByZXNzaW9uIGZvciBhIGdsaWIgYnVnIChzZWUgIzMzNzQwNCkKKworMjAwNi0wNC0wNCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQGZsdWVuZG8uY29tPgorCisJKiBnc3Quc3VwcDoKKwkgIEFkZCBhIGxlYWsgc3VwcHJlc3Npb246IHRoZSBleGlzdGluZyBnbGliYy1kb2Vzbid0LWZyZWUtVExTIG9uZQorCSAgd2Fzbid0IHRyaWdnZXJpbmcgaGVyZS4KKworMjAwNi0wNC0wNCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQGZsdWVuZG8uY29tPgorCisJKiBnc3Quc3VwcDoKKwkgIEFkZCBzb21lIG1pbmltYWxseS1uZWNjZXNhcnkgc3VwcHJlc3Npb25zIGZvciBteSB4ODYvZGFwcGVyIHN5c3RlbS4KKworMjAwNi0wNC0wMSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworCSogcGx1Z2lucy54c2w6CisJICBEbyBub3QgZGlzcGxheSBhbiBvcmlnaW4gbGluayBpZiBvcmlnaW4gZG9lcyBub3Qgc3RhcnQgd2l0aCBodHRwCisJICBTZWUgIzMyMzc5OAorCisyMDA2LTA0LTAxICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBtNC9nc3QtYXJncy5tNDoKKwkqIG00L2dzdC1mZWF0dXJlLm00OgorCSAgYWRkIG1vcmUgbWFjcm9zCisJKiBtNC9nc3QteDExLm00OgorCSAgWDExLXJlbGF0ZWQgY2hlY2tzCisKKzIwMDYtMDQtMDEgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKwkqIG00L2FzLXZlcnNpb24ubTQ6CisJICBuZXdlciB2ZXJzaW9uCisJKiBtNC9nc3QtYXJncy5tNDoKKwkqIG00L2dzdC1kb2MubTQ6CisJICB1cGRhdGUgYW5kIGFkZCBvdGhlciBtYWNyb3MgdG8gYmUgc2hhcmVkIGFjcm9zcyBwcm9qZWN0cworCisyMDA2LTAzLTI0ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBnc3Quc3VwcDoKKwkgIGFkZCBhIHN1cHByZXNzaW9uIGZvciBnX3BhcnNlX2RlYnVnX3N0cmluZworCisyMDA2LTAzLTIzICBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBnc3Rkb2Mtc2NhbmdvYmo6CisJICBzeW5jIGZ1bGx5IHdpdGggZ3RrZG9jLTAuMTUKKworMjAwNi0wMy0yMyAgU3RlZmFuIEtvc3QgIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKworCSogZ3N0ZG9jLXNjYW5nb2JqOgorCSogZ3RrLWRvYy5tYWs6CisJICBzeW5jIGEgbGl0dGxlIHdpdGggZ3RrLWRvYyBtYWlubGluZQorCisyMDA2LTAzLTE3ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KKworCSogZ3N0LnN1cHA6CisJICBhZGQgYW5vdGhlciBjbG9uZSBzdXBwcmVzc2lvbgorCSAgY2hhbmdlIGFsbCBnbGliYyBzdXBwcmVzc2lvbnMgdG8gbWF0Y2ggMi4zLioKKworMjAwNi0wMy0wOSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworCSogbTQvY2hlY2subTQ6CisJICBmaXggdGVzdCBzbyBpdCBhY3R1YWxseSB3b3JrcyB3aGVuIHRoZSBub3JtYWwgY2hlY2sgaXMgdXNlZAorCSAgb3ZlciBkZWJpYW4ncy91YnVudHUncworCisyMDA2LTAzLTA4ICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+CisKKwkqIGNoZWNrLm1hazoKKwlTZXQgR19TTElDRT1hbHdheXMtbWFsbG9jIHdoZW4gdmFsZ3JpbmRpbmcgdGVzdHMKKwkoY2xvc2VzICMzMzMyNzIpCisKKzIwMDYtMDItMjEgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKworCSogbTQvZ3N0LWdsaWIyLm00OgorCUZpeCBkZWJ1ZyBvdXRwdXQgd2hlbiB0aGUgR0xpYiB2ZXJzaW9uIHByZXJlcXVpc2l0ZSBpcyBub3QgZm91bmQKKworMjAwNi0wMi0xMyAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KKworCSogbTQvY2hlY2subTQ6IEhhY2sgYXJvdW5kIERlYmlhbi9VYnVudHUncyBicm9rZW4gaW5zdGFsbGF0aW9uIG9mCisJdGhlIFBJQyB2ZXJzaW9uIG9mIGNoZWNrIGFzIGxpYmNoZWNrX3BpYy5hLiBTaG91bGQgd29yayB3aXRoCisJY3Jvc3MtY29tcGlsYXRpb24gdG9vLiBHcnIuCisKKzIwMDYtMDItMDYgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKwkqIG00L2dzdC1kZWZhdWx0Lm00OgorCSAgc3dpdGNoIHRvIGF1dG8qIHNpbmtzIGZvciBkZWZhdWx0cworCisyMDA2LTAyLTAyICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KKworCSogY2hlY2subWFrOgorCSAgYWRkIGEgLnZhbGdyaW5kLmdlbi1zdXBwcmVzc2lvbnMgdGFyZ2V0IHRvIGFpZCBpbiBnZW5lcmF0aW5nCisJICBzdXBwcmVzc2lvbnMKKwkqIGdzdC5zdXBwOgorCSAgYWRkIG1vcmUgcmVwcmVzc2lvbnMgZnJvbSBteSBkZWJpYW4gZ2xpYmMgYXMgb2YgdG9kYXkKKworMjAwNi0wMi0wMiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKKwkgIG9ubHkgYWRkIHNyY2Rpci9nc3QgaWYgaXQgZXhpc3RzCisKKzIwMDYtMDEtMzAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKwkqIHJlbGVhc2UubWFrOgorCSAgZG9uJ3QgY29tcGxhaW4gYWJvdXQgZGlzdGVkIGVudW1zIGluIHdpbjMyCisKKzIwMDYtMDEtMjAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKwkqIG00L2dzdC1jaGVjay5tNDoKKwkgIEFDX1NVQlNUIENGTEFHUyBhbmQgTElCUworCSAgZG8gYSBub24tY29tbWFuZCBiZWNhdXNlIHNvbWV0aGluZyBpcyBzdHJpcHBpbmcgb3V0IG91ciBBQ19TVUJTVAorCisyMDA2LTAxLTIwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBtNC9nc3QtYXJncy5tNDoKKwkqIG00L2dzdC12YWxncmluZC5tNDoKKwkgIHByb3Blcmx5IGdpdmUgYSAibm8iIHJlc3VsdCBtYW51YWxseSB3aGVuIHByb3ZpZGluZyBhCisJICBub3QtZm91bmQgYWN0aW9uIHRvIGZpeCBjb25maWd1cmUgb3V0cHV0CisKKzIwMDYtMDEtMjAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKwkqIG00L3BrZy5tNDoKKwkgIHVwZGF0ZSB3aXRoIGEgbW9yZSByZWNlbnQgdmVyc2lvbgorCisyMDA2LTAxLTA3ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBnZXR0ZXh0LnBhdGNoOgorCSAgbWFrZSBNYWtlZmlsZSBkZXBlbmQgb24gTElOR1VBUywgc28gcmVidWlsZHMgd29yayB3aGVuIGFkZGluZworCSAgYSBsYW5ndWFnZQorCisyMDA2LTAxLTAzICBNaWNoYWVsIFNtaXRoICA8bXNtaXRoQGZsdWVuZG8uY29tPgorCisJKiBjaGVjay5tYWs6CisJICBDbGFyaWZ5IGVycm9yIG1lc3NhZ2UgZnJvbSB2YWxncmluZCB0ZXN0IHJ1bnMuCisKKzIwMDUtMTItMTYgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKwkqIG00L2dzdC1hcmNoLm00OgorCSAgZGVmaW5lIEhPU1RfQ1BVCisKKzIwMDUtMTEtMjkgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKwkqIGNoZWNrLm1hazoKKwkgIGFkZCBhIHZhbGdyaW5kLWZvcmV2ZXIgdGFyZ2V0IGZvciB0ZXN0cworCisyMDA1LTExLTI4ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBjaGVjay5tYWs6CisJICB3aGVuIGEgIm1ha2UgdGVzdC5jaGVjayIgcnVuIGZhaWxzLCBtYWtlIGl0IHJlcnVuIHRoZSB0ZXN0IHdpdGgJCisJICBhdCBsZWFzdCBkZWJ1ZyBsZXZlbCAyCisKKzIwMDUtMTEtMTQgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKwkqIG00L01ha2VmaWxlLmFtOgorCSogbTQvZ3N0LWNoZWNrLm00OgorCSAgZml4IGNoZWNrIGZvciBiYXNlIHBsdWdpbnMKKwkqIG00L2dzdC1kZWZhdWx0Lm00OgorCSAgYWRkIG00IHRvIHNldCBkZWZhdWx0IGVsZW1lbnRzCisKKzIwMDUtMTAtMTggIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKwkqIG00L2dzdC1jaGVjay5tNDoKKwkgIGNoZWNrIGZvciB0b29scyBjb3JyZWN0bHkKKworMjAwNS0xMC0xOCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworCSogZ3RrLWRvYy5tYWs6CisJICBvbmx5IGVuYWJsZSBicmVha2luZyBvbiBuZXcgQVBJIHdoZW4gbWFrZSBkaXN0Y2hlY2sgcGFzc2VzLAorCSAgbm90IGJlZm9yZQorCisyMDA1LTEwLTE4ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBtNC9nc3QtY2hlY2subTQ6CisJICBSZXN1cnJlY3QgSnVsaWVuJ3MgZGVhZCBib2R5IGFuZCB3aXBlIGhpcyBtaW5kIGNsZWFuCisKKzIwMDUtMTAtMTggIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKwkqIG00L2dzdC1jaGVjay5tNDoKKwkgIEtpbGwgSnVsaWVuCisKKzIwMDUtMTAtMTcgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KKworCSogbTQvZ3N0LWNoZWNrLm00OiBJIGtub3cgVGhvbWFzIHdpbGwga2lsbCBtZSBidXQgdGhpcyAKKwlpZmVsc2Ugc3RhdGVtZW50IHNlZW1zIGluY29ycmVjdCBhcyBpdCBpcyBhbHdheXMgc2V0dGluZworCXJlcXVpcmVkIHRvICJ5ZXMiLiBXaXRoIHRoaXMgb25lIGl0IHNlZW1zIHRvIHdvcmsuIEZpeGVzCisJYnVpbGQgb2YgZ3N0LXBsdWdpbnMtYmFzZSBvbiBteSBzZXR1cCB3aGVyZSBnc3RyZWFtZXItY2hlY2sKKwlpcyBkZWZpbml0ZWx5IG5vdCBwcmVzZW50L3JlcXVpcmVkLgorCisyMDA1LTEwLTE4ICBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorCisJKiBndGstZG9jLm1hazoKKwkgIG1ha2UgYnVpbGQgYnJlYWsgb24gbmV3IGFwaSB0aGF0IGhhcyBub3QgYmVlbiBhZGRlZCB0byB0aGUKKwkgIHNlY3Rpb25zIGZpbGUKKworMjAwNS0xMC0xNyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworCSogbTQvZ3N0LWdsaWIyLm00OgorCSogbTQvTWFrZWZpbGUuYW06CisJKiBtNC9nc3QtY2hlY2subTQ6CisJICBhZGQgbWFjcm8gZm9yIGVhc3kgY2hlY2tzIGZvciBHU3RyZWFtZXIgbGlicworCisyMDA1LTEwLTE2ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBtNC9nc3QtZ2xpYjIubTQ6CisJICB1cGRhdGUsIHdhcm4gaW4gZXJyb3IgY2FzZXMKKworMjAwNS0xMC0xNiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworCSogbTQvZ3N0LWVycm9yLm00OgorCSAgYWRkIEdTVF9TRVRfREVGQVVMVF9MRVZFTAorCisyMDA1LTEwLTE2ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBtNC9NYWtlZmlsZS5hbToKKwkqIG00L2dzdC1nZXR0ZXh0Lm00OgorCSAgcmVtb3ZlIHRoZSBBTV9HTlVfR0VUVEVYVCogY2FsbHMsIHRoZXkgbmVlZCB0byBiZSBpbiBjb25maWd1cmUuYWMKKwkqIG00L2dzdC1nbGliMi5tNDoKKwkgIGNsZWFuIHVwIGFuZCByZS11c2UgaW4gY29yZSBzb29uCisJKiBtNC9nc3QtcGx1Z2luZGlyLm00OgorCSAgbWFjcm8gdG8gc2V0IHVwIFBMVUdJTkRJUiBhbmQgcGx1Z2luZGlyIGRlZmluZS92YXIKKworMjAwNS0xMC0xNSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworCSogbTQvTWFrZWZpbGUuYW06CisJKiBtNC9nc3QtZ2V0dGV4dC5tNDoKKwkgIGFkZCBtYWNybyBmb3Igc2V0dGluZyB1cCBnZXR0ZXh0CisKKzIwMDUtMTAtMTUgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKwkqIG00L2dzdC1hcmdzLm00OgorCSAgYWRkIHNvbWUgLm00J3MgZm9yIGFyZ3VtZW50IGNoZWNraW5nIHRoYXQgY2FuIGJlIHNoYXJlZCBhbW9uZyBtb2R1bGVzCisKKzIwMDUtMTAtMTUgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKwkqIG00L2FzLWxpYnRvb2wubTQ6CisJICBzZXQgX0xUX0xERkxBR1MKKwkqIG00L2dzdC1saWJ4bWwyLm00OgorCSAgZG9jdW1lbnQKKworMjAwNS0xMC0xNSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworCSogbTQvZ3N0LWFyY2gubTQ6CisJICBpbmRlbnQgYSBsaXR0bGUKKwkgIGFkZCBBQ19SRVFVSVJFCisJKiBtNC9nc3QtZXJyb3IubTQ6CisJICBjbGVhbiB1cAorCisyMDA1LTEwLTEyICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBnc3QtYXV0b2dlbi5zaDoKKwkgIHVwZGF0ZSB2ZXJzaW9uIGRldGVjdGlvbiBleHByZXNzaW9uIHRvIGNhdGNoIHN0dWZmIGxpa2UKKwkgIExpYnRvb2wgKGxpYnRvb2wxNSkgMS41LjAKKworMjAwNS0xMC0xMSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworCSogZ3N0LnN1cHA6CisJICBjb21taXQgNiBuZXcgc3VwcHJlc3Npb25zIHJlbGF0ZWQgdG8gZ19tb2R1bGVfb3BlbjsgY2FuIHRoZXNlCisJICByZWFsbHkgbm90IGJlIGZvbGRlZCBpbnRvIG9uZSA/CisKKzIwMDUtMTAtMTEgIEVkd2FyZCBIZXJ2ZXkgIDxlZHdhcmRAZmx1ZW5kby5jb20+CisKKwkqIGdzdC5zdXBwOiAKKwltYWRlIHRoZSA8Z190eXBlX2luaXQgY2FsbG9jIDI+IHN1cHByZXNzaW9uIG1vcmUgZ2VuZXJpYworCUFkZGVkIHB0aHJlYWQgbWVtbGVhayBzdXBwcmVzaW9ucworCUFkZGVkIG5zc19wYXJzZV8qIG1lbWxlYWsgc3VwcHJlc2lvbiAodXNlZCBieSBnX29wdGlvbl9jb250ZXh0X3BhcnNlKQorCisyMDA1LTEwLTExICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBjaGVjay5tYWs6CisJICBiZSBtb3JlIHN0cmljdCwgbW9yZSBsZWFrIHJlc29sdXRpb24KKwkqIGdzdC5zdXBwOgorCSAgY2xlYW4gdXAgdGhlIGdfdHlwZV9pbml0IHN1cHByZXNzaW9ucworCisyMDA1LTEwLTA3ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBtNC9NYWtlZmlsZS5hbToKKwkqIG00L2dzdC12YWxncmluZC5tNDoKKwkgIHB1dCB0aGUgdmFsZ3JpbmQgZGV0ZWN0aW9uIGluIGFuIC5tNAorCisyMDA1LTA5LTI5ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBjaGVjay5tYWs6CisJICBhZGQgc29tZSBtb3JlIHRhcmdldHMsIGxpa2UgImhlbHAiLCBidXQgYWxzbyBtb3JlIGludGVuc2l2ZSB0ZXN0cworCisyMDA1LTA5LTIzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBndGstZG9jLm1hazoKKwkgIG1ha2UgY2VydGFpbiBkb2Mgd2FybmluZ3MgZmF0YWwgc28gcGVvcGxlIG1haW50YWluIGRvY3MgYWdhaW4KKworMjAwNS0wOS0yMyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworCSogTWFrZWZpbGUuYW06CisJKiBndGstZG9jLXBsdWdpbnMubWFrOgorCSogc2NhbmdvYmotbWVyZ2UucHk6CisJICBtZXJnZSBhZGRpdGlvbnMgZnJvbSB0aGUgLnNpZ25hbHMubmV3IGFuZCAuYXJncy5uZXcgZmlsZSBpbgorCSAgdGhlIG9yaWdpbmFsIG9uZXMsIG9ubHkgdXBkYXRpbmcgaWYgbmVjZXNzYXJ5CisKKzIwMDUtMDktMjMgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKwkqIGdzdC14bWxpbnNwZWN0LnB5OgorCSogZ3N0ZG9jLXNjYW5nb2JqOgorCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKKwkgIGZpeCBwcm9wZXJseSBmb3IgbmV3IEFQSTsgbWFrZSB1cGRhdGUgaW4gcGx1Z2lucyBkaXIgbm93IHdvcmtzCisKKzIwMDUtMDktMjAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKwkqIGdzdC14bWxpbnNwZWN0LnB5OgorCSogZ3N0ZG9jLXNjYW5nb2JqOgorCSAgc29tZSBmaXhlcyBmb3IgbmV3IEFQSQorCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKKwkgIHNldCBlbnZpcm9ubWVudCBwcm9wZXJseQorCisyMDA1LTA5LTE3ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+CisKKwkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6IFVzZSBuZXcgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorCisyMDA1LTA5LTE2ICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAZmx1ZW5kby5jb20+CisKKwkqIGdzdGRvYy1zY2FuZ29iajoKKwkgIE1ha2UgdGhlIHNjYW5vYmogY29kZSByZWZsZWN0IHJlZ2lzdHJ5L3BsdWdpbiBBUEkgY2hhbmdlcworCisyMDA1LTA5LTE1ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBndGstZG9jLXBsdWdpbnMubWFrOgorCSAgc3BsaXQgb3V0IHNjYW5vYmogc3RlcCAod2hpY2ggd2lsbCBiZSBydW4gYnkgZG9jIG1haW50YWluZXIpCisJICBmcm9tIHNjYW4gc3RlcCAod2hpY2ggd2lsbCBiZSBydW4gb24gZXZlcnkgYnVpbGQpCisJICBjbGVhbiB1cCBzb21lIG9mIHRoZSBjb21tYW5kcyBmb3IgbWFrZSBkaXN0Y2hlY2sKKworMjAwNS0wOS0xNSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKKwkqIG1hbmdsZS10bXBsLnB5OgorCSAgZmlyc3Qgc3RhYiBhdCByZW9yZ2FuaXppbmcgdGhlIHBsdWdpbnMgYnVpbGQgc28gd2UgY2FuIG1haW50YWluCisJICBlbGVtZW50IGRvY3MKKworMjAwNS0wOS0xNCAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgorCisJKiBhcy1saWJ0b29sLm1hazogUmVtb3ZlCisJKiBtNC9hcy1saWJ0b29sLm00OiBUaGUgbGlidG9vbCBidWcgdGhhdCB0aGlzIHdvcmtlZCBhcm91bmQgaGFzCisJICBiZWVuIGZpeGVkLgorCSogbTQvYXMtdmVyc2lvbi5tNDogRG9uJ3QgZGVmaW5lIEdTVF9SRUxFQVNFLCBzaW5jZSBpdCBjYXVzZXMKKwkgIGNvbmZpZy5oIHRvIGJlIHJlZ2VuZXJhdGVkIG5lZWRsZXNzbHksIGFuZCB3ZSBkb24ndCB1c2UgaXQuCisKKzIwMDUtMDktMTQgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKwkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6CisJICBlcnJvciBvdXQgb24gaW5zcGVjdCBmYWlsdXJlCisKKzIwMDUtMDktMTQgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBmbHVlbmRvLmNvbT4KKworCSogZ2xpYi1nZW4ubWFrOgorCSAgRG9uJ3QgY2FsbCBnbGliLW1rZW51bXMgd2l0aCBhcmd1bWVudHMgdGhhdCBjb25mdXNlL2JyZWFrIE1pbkdXLAorCSAgZml4ZXMgMzE2MTU1LgorCisyMDA1LTA5LTAzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBndGstZG9jLXBsdWdpbnMubWFrOgorCSogZ3RrLWRvYy5tYWs6CisJKiBtNC9nc3QtZG9jLm00OgorCSAgc2VwYXJhdGUgb3V0IGd0ay1kb2MgYW5kIGRvY2Jvb2sgc3R1ZmYKKwkgIGhhdmUgdHdvIHNlcGFyYXRlIC0tZW5hYmxlIGNvbmZpZ3VyZSBmbGFncworCisyMDA1LTA4LTI2ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBjaGVjay5tYWs6CisJICBhZGQgYSAuZ2RiIHRhcmdldDsgcmVidWlsZCByZWdpc3RyeSBmb3IgZWFjaCB0YXJnZXQsIG90aGVyd2lzZQorCSAgYSBjb2RlIHJlYnVpbGQgYWx3YXlzIHRyaWdnZXJzIGEgcmVnIHJlYnVpbGQsIGFuZCBpdCdzIGp1c3QgdG9vCisJICBhbm5veWluZworCSogZ3N0ZG9jLXNjYW5nb2JqOgorCisyMDA1LTA4LTIxICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBjaGVjay5tYWs6CisJICBzZXBhcmF0ZSBvdXQgUkVHSVNUUllfRU5WSVJPTk1FTlQ7IHdlIHdhbnQgdG8gdXNlIHRoYXQgZnJvbQorCSAgb3VyIHZhbGdyaW5kIHJ1bnMsIGJ1dCB3ZSBhbHNvIHdhbnQgVEVTVFNfRU5WSVJPTk1FTlQgdG8gY29udGFpbgorCSAgZXZlcnl0aGluZyB0aGF0IHRoZSBmaXJzdCB0ZXN0LCBnc3QtcmVnaXN0ZXIsIG5lZWRzCisKKzIwMDUtMDgtMjEgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKwkqIGNoZWNrLm1hazoKKwkgIHBhcnNlIG91dHB1dCBvZiB2YWxncmluZCBhbmQgY2hlY2sgZm9yIGRlZmluaXRlbHkgbG9zdCwgYW5kIGVycm9yCisJICBvdXQ7IHNvbWVob3cgSSB3YXMgbGVkIHRvIGJlbGlldmUgdmFsZ3JpbmQgcmV0dXJucyBub24temVybyBmb3IKKwkgIGxlYWtzLCBidXQgSSBjYW4ndCBtYWtlIGl0IGRvIHRoYXQsIHNvIGxldCdzIHBhcnNlCisKKzIwMDUtMDgtMjAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKwkqIGNoZWNrLm1hazoKKwkgIGZvciBzb21lIHdlaXJkIHJlYXNvbiB2YWxncmluZCBkb2VzIG5vdCByZXBvcnQgYWN0dWFsIG1lbWxlYWtzCisJICBpZiBHU1RfUExVR0lOX1BBVEggaXMgc2V0IHRvIGFueXRoaW5nIGJ1dCB0aGUgY29yZSBnc3RyZWFtZXIgZGlyCisJICB3aGlsZSB2YWxncmluZCBpcyBydW5uaW5nLiAgU2luY2UgdGhlIHJlZ2lzdHJ5IGlzIGdvaW5nIHRvIGdvCisJICBhbnl3YXksIEkgZG9uJ3Qgd2FudCB0byB3YXN0ZSBhbnkgbW9yZSB0aW1lIG9uIHRoaXM7IEkganVzdCBydW4KKwkgIHZhbGdyaW5kIHdpdGhvdXQgR1NUX1BMVUdJTl9QQVRIIHNldC4gIFNpbmNlIHRoZSByZWdpc3RyeSBsb2FkaW5nCisJICBkb2Vzbid0IGNoZWNrIGlmIEdTVF9QTFVHSU5fUEFUSCBnb3QgY2hhbmdlZCBhcyBhIHJlYXNvbiB0byByZWJ1aWxkCisJICB0aGUgcmVnaXN0cnksIHRoYXQncyBhY3R1YWxseSBmaW5lLgorCisyMDA1LTA4LTE1ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBtYW5nbGUtdG1wbC5weToKKwkgIGtlZXAgb3JpZ2luYWwgTG9uZ19EZXNjcmlwdGlvbjsgb25seSBpbnNlcnQgYW4gaW5jbHVkZSBpZiBpdCdzCisJICBub3QgYWxyZWFkeSB0aGUgZmlyc3QgbGluZSBpbiB0aGVyZQorCSogcGx1Z2lucy54c2w6CisJICBvdXRwdXQgbW9yZSBpbmZvcm1hdGlvbiBmb3IgcGx1Z2lucywgaW5jbHVkaW5nIGFuIG9yaWdpbiBoeXBlcmxpbmsKKworMjAwNS0wOC0xNSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworCSogZ3N0LXhtbGluc3BlY3QucHk6CisJICBhIGZpcnN0IHN0YWIgYXQgaW5zcGVjdGluZyBwbHVnaW5zIGFuZCBvdXRwdXR0aW5nIGFuIHhtbCBkZXNjcmlwdGlvbgorCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKKwkgIGEgZ3RrLWRvYyB1c2luZyBzbmlwcGV0IGZvciBwbHVnaW5zIGRvY3VtZW50YXRpb24KKwkqIHBsdWdpbnMueHNsOgorCSAgYSBzdHlsZXNoZWV0IHRvIGNvbnZlcnQgZ3N0LXhtbGluc3BlY3QucHkgb3V0cHV0IHRvIGRvY2Jvb2sgb3V0cHV0CisJICBmb3IgaW5jbHVzaW9uIGluIHRoZSBndGstZG9jIHN0dWZmCisKKzIwMDUtMDctMjAgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+CisKKwkqIG00L2dzdC1kb2MubTQ6CisJICBzL3BkZi9lcHMvIGluIHRlc3QgZm9yIHdoZXRoZXIgd2Ugb3V0cHV0IEVQUyBpbWFnZXMgKCMzMDkzNzkpLgorCisyMDA1LTA3LTE4ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgorCisJKiBtNC9hcy1saWJ0b29sLXRhZ3MubTQ6IE9vaCwgYmFja3BvcnRlZCBmcm9tIGxpYnRvb2wgMS42LiBNdWNoCisJYmV0dGVyLiBUaGFua3MsIFBhb2xvIEJvbnppbmkhCisJCisJKiBtNC9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IAorCSogbTQvYXMtbGlidG9vbC10YWdzLm00OiBOZXcgZmlsZSwgdHJpZXMgdG8gZGlzYWJsZSBzb21lIENYWCBhbmQKKwlmb3J0cmFuIGNoZWNrcy4KKworMjAwNS0wNy0wOCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworCSogbTQvZ3N0LWVycm9yLm00OgorCSAgYWRkIG1hY3JvIHRvIHNldCBFUlJPUl9DRkxBR1MKKworMjAwNS0wNi0zMCAgSmFuIFNjaG1pZHQgIDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgorCisJKiBnc3QtYXV0b2dlbi5zaDoKKwkgIFJlbW92ZSB0aGUgb2xkIGF1dG9yZWdlbi5zaCBpZiBpdCBleGlzdHMgYmVmb3JlIHJlY3JlYXRpbmcgaXQsCisJICB0byBwcmV2ZW50IGNvbmZ1c2luZyBhbnkgc2hlbGwgcHJvY2VzcyB0aGF0IG1pZ2h0IGJlIHJlYWRpbmcgaXQKKwkgIGN1cnJlbnRseS4KKworMjAwNS0wNi0yOSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworCSogbTQvZ3RrLWRvYy5tNDoKKwkgIGFkZGVkCisKKzIwMDUtMDYtMDMgIFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisKKwkqIGdzdC1hdXRvZ2VuLnNoOiBjcmVhdGUgYXV0b3JlZ2VuLnNoICpiZWZvcmUqIHNoaWZ0aW5nIHRoZSBvcHRpb25zCisKKzIwMDUtMDUtMTcgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKwkqIGdzdC1hdXRvZ2VuLnNoOiBvbmx5IHVwZGF0ZSBhdXRvcmVnZW4uc2ggb24gYWN0dWFsIHJ1bnMKKworMjAwNS0wMy0xMSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworCSogbTQvY2hlY2subTQ6IG00IGZyb20gdGhlIGNoZWNrIHVuaXQgdGVzdCBzdWl0ZQorCisyMDA0LTEyLTE0ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+CisKKwkqIG00L2dzdC1hcmNoLm00OiByZW1vdmUgTU1YIHN0dWZmLCBzaW5jZSBpdCBkb2Vzbid0IHdvcmsgYW5kCisJaXNuJ3QgbmVlZGVkIGFueXdoZXJlCisKKzIwMDQtMTItMDggIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKwkqIGdzdC1hdXRvZ2VuLnNoOgorCSAgYWxsb3cgZmFpbHVyZSBjb21tYW5kIHRvIGJlIHJ1biBzbyB3ZSBjYW4gY2xlYW4gdXBmcm9tIGF1dG9wb2ludAorCisyMDA0LTA5LTAzICBaZWVzaGFuIEFsaSBLaGF0dGFrIDx6ZWVuaXhAZ21haWwuY29tPgorCSogbTQvZ3N0LWZlYXR1cmUubTQ6IFRyeWluZyB0byBjb3JyZWN0IHRoZSBHU1RfQ0hFQ0tfQ09ORklHUFJPRyBtYWNybworCisyMDA0LTA3LTIxICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+CisKKwkqIG00Ly5jdnNpZ25vcmU6IGV4Y2l0aW5nIHVwZGF0ZXMgZm9yIGxpYnRvb2wgbTQgZmlsZXMKKworMjAwNC0wNy0xMiAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgorCisJKiBtNC9hcy1vYmpjLm00OiAgQWRkIGEgbWFjcm8gdG8gdGVzdCBmb3Igb2JqZWN0aXZlIEMKKworMjAwNC0wNi0xMiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworCSogbTQvZ3N0LWZlYXR1cmUubTQ6CisJICBub3QgYWxsIG9mIHRoZW0gc3VwcG9ydCAtLXBsdWdpbi1saWJzLCBzbyByZWRpcmVjdCBzdGRlcnIKKworMjAwNC0wNi0xMiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworCSogbTQvYXMtc2NydWItaW5jbHVkZS5tNDoKKwkgIHN5bmMgd2l0aCB1cHN0cmVhbSB0byAwLjEuNC4gIEZpeGVzICMxMzI0NDAKKworMjAwNC0wNi0wNyAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgorCisJKiBtNC9nc3QtZmVhdHVyZS5tNDoKKwkgIHdyaXRlIGEgYmlnIG1hcmtlciBpbnRvIGNvbmZpZ3VyZSBvdXRwdXQgd2hlbiBjaGVja2luZyBuZXh0IHBsdWdpbgorCSAgdG8gYWxsb3cgZWFzaWVyIHBhcnNpbmcgb2Ygd2h5IHBsdWdpbnMgYXJlKG4ndCkgYnVpbHQuCisKKzIwMDQtMDYtMDEgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKwkqIG00L2FzLWNvbXBpbGVyLWZsYWcubTQ6CisJKiBtNC9hcy1jb21waWxlci5tNDoKKwkqIG00L2FzLWxpYnRvb2wubTQ6CisJKiBtNC9hcy12ZXJzaW9uLm00OgorCSAgc3luYyB3aXRoIHVwc3RyZWFtLCBjaGFuZ2Ugc3RpY2t5IG9wdGlvbnMgdG8gLWtvCisKKzIwMDQtMDUtMjQgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKwkqIG00L2FzLXNjcnViLWluY2x1ZGUubTQ6IHN5bmNlZCB3aXRoIHVwc3RyZWFtCisKKzIwMDQtMDUtMDMgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKwkqIHBvLm1hazoKKyAgICAgICAgICBzbmlwcGV0IGZvciB1cGRhdGluZyAucG8gZmlsZXMKKworMjAwNC0wMy0xOCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworCSogTWFrZWZpbGUuYW06CisJKiBtNC9NYWtlZmlsZS5hbToKKyAgICAgICAgICBpbnRlZ3JhdGUgdGhlc2Ugd2l0aCB0aGUgZGlzdAorCisyMDA0LTAzLTE3ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiByZWxlYXNlLm1hazogYWRkIGEgcmVsZWFzZSB0YXJnZXQKKworMjAwNC0wMy0wOSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworCXBhdGNoIGJ5OiBTdGVwaGFuZSBMb2V1aWxsZXQKKworCSogbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00OgorICAgICAgICAgIHVzZSBoZWFkIC1uIGluc3RlYWQgb2YgaGVhZCAtICgjMTM2NTAwKQorCisyMDA0LTAzLTA1ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisJKiBtNC9nc3QtZG9jLm00OiBkb24ndCBidWlsZCBQUyB3aXRob3V0IGR2aXBzIGJpbmFyeQorCisyMDA0LTAyLTIyICAgSnVsaW8gTS4gTWVyaW5vIFZpZGFsIDxqbW12QG1lbnRhLm5ldD4KKworCXJldmlld2VkIGJ5OiBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+CisKKwkqIG00L2FzLWRvY2Jvb2subTQ6CisJICBkb24ndCB1c2UgPT0gb3BlcmF0b3Igd2l0aCB0ZXN0KDEpIChmaXhlcyAjMTM1MTE1KQorCisyMDA0LTAyLTE2ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorIAorCSogY29tbW9uL200L2dzdC1hcmNoLm00OiB4ODZfNjQgaXMgeDg2IHRvbyAoY2x1ZSBmcm9tIEZlZG9yYSAyIHRlc3QpCisKKzIwMDQtMDItMTMgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKwkqIG00L2dzdC1mZWF0dXJlLm00OgorICAgICAgICAgIHJlbW92ZSBBTV9DT05ESVRJT05BTCBmb3IgdGhlIHN1YnN5c3RlbSBzaW5jZSBhdXRvbWFrZSAxLjYueAorICAgICAgICAgIHJlcXVpcmVzIHRoYXQgY2FsbCBiZSBpbiBjb25maWd1cmUuYWMKKworMjAwNC0wMi0xMyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworCSogbTQvZ3N0LWxpYnhtbDIubTQ6CisgICAgICAgICAgdGFrZSByZXF1aXJlZCB2ZXJzaW9uIGFzIGFyZ3VtZW50LCBhbmQgZGVmYXVsdCB0byAyLjQuOSBpZiBub3QKKyAgICAgICAgICBzcGVjaWZpZWQKKworMjAwNC0wMi0xMiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworCSogbTQvZ3N0LWZlYXR1cmUubTQ6CisgICAgICAgICAgcmVuYW1lIGFuZCBmaXggdXAgR1NUX0NIRUNLX0RJU0FCTEVfU1VCU1lTVEVNCisKKzIwMDQtMDItMTEgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKwkqIGNvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQ6CisJKiBjb21tb24vbTQvYXMtYXV0by1hbHQubTQ6CisJKiBjb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNDoKKwkqIGNvbW1vbi9tNC9hcy1jb21waWxlci5tNDoKKwkqIGNvbW1vbi9tNC9hcy1kb2Nib29rLm00OgorCSogY29tbW9uL200L2FzLWxpYnRvb2wubTQ6CisJKiBjb21tb24vbTQvYXMtc2NydWItaW5jbHVkZS5tNDoKKwkqIGNvbW1vbi9tNC9hcy12ZXJzaW9uLm00OgorCSogY29tbW9uL200L2dsaWItZ2V0dGV4dC5tNDoKKwkqIGNvbW1vbi9tNC9nc3QtYXJjaC5tNDoKKwkqIGNvbW1vbi9tNC9nc3QtZGVidWdpbmZvLm00OgorCSogY29tbW9uL200L2dzdC1kb2MubTQ6CisJKiBjb21tb24vbTQvZ3N0LWZlYXR1cmUubTQ6CisJKiBjb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00OgorCSogY29tbW9uL200L2dzdC1nbGliMi5tNDoKKwkqIGNvbW1vbi9tNC9nc3QtZ3N0cmVhbWVyLm00OgorCSogY29tbW9uL200L2dzdC1saWJ4bWwyLm00OgorCSogY29tbW9uL200L2dzdC1tYWtlY29udGV4dC5tNDoKKwkqIGNvbW1vbi9tNC9nc3QtbWNzYy5tNDoKKwkqIGNvbW1vbi9tNC9wa2cubTQ6CisgICAgICAgICAgZml4IHVuZGVycXVvdGVkIG1hY3JvcyBhcyByZXBvcnRlZCBieSBhdXRvbWFrZSAxLjgueCAoIzEzMzgwMCkKKworMjAwNC0wMi0xMSAgSm9oYW4gRGFobGluICA8am9oYW5AZ25vbWUub3JnPgorCisJKiBnc3QtYXV0b2dlbi5zaDogVXNlIEEtWiBpbnN0ZWFkIG9mIEEteiBpbiBzZWQgZXhwcmVzc2lvbiB0bworCWF2b2lkIGEgd2FybmluZworCisyMDA0LTAyLTA1ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIChhdCkgYXBlc3RhYXJ0IChkb3QpIG9yZz4KKworCSogbTQvZ3N0LWRvYy5tNDoKKyAgICAgICAgICB3ZSB1c2UgLS1vdXRwdXQtZm9ybWF0PXhtbCBhbmQgLS1pbmdub3JlLWZpbGVzIG9wdGlvbnMgdG8KKyAgICAgICAgICBndGtkb2MtbWtkYiwgd2hpY2ggZ290IGFkZGVkIGJldHdlZW4gMC45IGFuZCAxLjAKKworMjAwNC0wMi0wNCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworCSogbTQvYXMtbGlidG9vbC5tNDogcmVtb3ZlIEFNX1BST0dfTElCVE9PTCBzbyBpdCBjYW4gbW92ZSBiYWNrCisgICAgICAgICAgdG8gY29uZmlndXJlLmFjIHRvIHNodXQgdXAgbGlidG9vbGl6ZQorCisyMDA0LTAyLTAzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCisgICAgICAgICogZ2xpYi1nZW4ubWFrOiBhZGRlZDsgdXNlZCB0byBnZW5lcmF0ZSBlbnVtcyBhbmQgbWFyc2hhbCBjb2RlCisKKzIwMDQtMDEtMTMgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKKyAgICAgICAgKiBnZXR0ZXh0LnBhdGNoOiBhZGRlZDsgdXNlZCBieSBhdXRvZ2VuLnNoIHRvIG1ha2Ugc3VyZQorICAgICAgICAgIEdFVFRFWFRfUEFDS0FHRSBpcyB1bmRlcnN0b29kIGZyb20gcG8vTWFrZWZpbGUuaW4uaW4gLT4gcG8vTWFrZWZpbGUuaW4KKwpkaWZmIC0tZ2l0IGEvY29tbW9uL01ha2VmaWxlLmFtIGIvY29tbW9uL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1OTY2ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwyMiBAQAorU1VCRElSUyA9IG00CisKK0VYVFJBX0RJU1QgPSBcCisJQ2hhbmdlTG9nIFwKKwlnZXR0ZXh0LnBhdGNoIFwKKwlnbGliLWdlbi5tYWsgZ3RrLWRvYy5tYWsgdXBsb2FkLWRvYy5tYWsgXAorCWNydWZ0Lm1hayByZWxlYXNlLm1hayB3aW4zMi5tYWsgcG8ubWFrIFwKKwlwYXJhbGxlbC1zdWJkaXJzLm1hayBcCisJZ3N0LWF1dG9nZW4uc2ggXAorCWNoZWNrLWV4cG9ydHMgXAorCWMtdG8teG1sLnB5IG1hbmdsZS10bXBsLnB5IHNjYW5nb2JqLW1lcmdlLnB5IFwKKwlndGstZG9jLXBsdWdpbnMubWFrIFwKKwlwbHVnaW5zLnhzbCBnc3Rkb2Mtc2NhbmdvYmogXAorCWdzdC5zdXBwIGNoZWNrLm1hayBcCisJY292ZXJhZ2UvbGNvdi5tYWsgXAorCWNvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC5wbCBcCisJY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LnhzbCBcCisJY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LWVudHJ5LnBsIFwKKwlkb3dubG9hZC10cmFuc2xhdGlvbnMgXAorCWV4dHJhY3QtcmVsZWFzZS1kYXRlLWZyb20tZG9hcC1maWxlIFwKKwlnc3QtaW5kZW50IFwKKwlvcmMubWFrCmRpZmYgLS1naXQgYS9jb21tb24vTWFrZWZpbGUuaW4gYi9jb21tb24vTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc4Njg2NgotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDc2MCBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4xIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IGNvbW1vbgorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluIENoYW5nZUxvZworQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXB5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtc2NydWItaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOXyQoVikpCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF8kKFYpKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X2F0XzAgPSBACitTT1VSQ0VTID0KK0RJU1RfU09VUkNFUyA9CitSRUNVUlNJVkVfVEFSR0VUUyA9IGFsbC1yZWN1cnNpdmUgY2hlY2stcmVjdXJzaXZlIGR2aS1yZWN1cnNpdmUgXAorCWh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIGluc3RhbGwtZGF0YS1yZWN1cnNpdmUgXAorCWluc3RhbGwtZHZpLXJlY3Vyc2l2ZSBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWh0bWwtcmVjdXJzaXZlIGluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAorCWluc3RhbGwtcGRmLXJlY3Vyc2l2ZSBpbnN0YWxsLXBzLXJlY3Vyc2l2ZSBpbnN0YWxsLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBpbnN0YWxsZGlycy1yZWN1cnNpdmUgcGRmLXJlY3Vyc2l2ZSBcCisJcHMtcmVjdXJzaXZlIHVuaW5zdGFsbC1yZWN1cnNpdmUKK1JFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTID0gbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZQlcCisgIGRpc3RjbGVhbi1yZWN1cnNpdmUgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKK0FNX1JFQ1VSU0lWRV9UQVJHRVRTID0gJChSRUNVUlNJVkVfVEFSR0VUUzotcmVjdXJzaXZlPSkgXAorCSQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFM6LXJlY3Vyc2l2ZT0pIHRhZ3MgVEFHUyBjdGFncyBDVEFHUyBcCisJZGlzdGRpcgorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVF9TVUJESVJTID0gJChTVUJESVJTKQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK2FtX19yZWxhdGl2aXplID0gXAorICBkaXIwPWBwd2RgOyBcCisgIHNlZF9maXJzdD0ncyxeXChbXi9dKlwpLy4qJCQsXDEsJzsgXAorICBzZWRfcmVzdD0ncyxeW14vXSovKiwsJzsgXAorICBzZWRfbGFzdD0ncyxeLiovXChbXi9dKlwpJCQsXDEsJzsgXAorICBzZWRfYnV0bGFzdD0ncywvKlteL10qJCQsLCc7IFwKKyAgd2hpbGUgdGVzdCAtbiAiJCRkaXIxIjsgZG8gXAorICAgIGZpcnN0PWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCisgICAgaWYgdGVzdCAiJCRmaXJzdCIgIT0gIi4iOyB0aGVuIFwKKyAgICAgIGlmIHRlc3QgIiQkZmlyc3QiID0gIi4uIjsgdGhlbiBcCisgICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2xhc3QiYC8iJCRkaXIyIjsgXAorICAgICAgICBkaXIwPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9idXRsYXN0ImA7IFwKKyAgICAgIGVsc2UgXAorICAgICAgICBmaXJzdDI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKKyAgICAgICAgaWYgdGVzdCAiJCRmaXJzdDIiID0gIiQkZmlyc3QiOyB0aGVuIFwKKyAgICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKKyAgICAgICAgZWxzZSBcCisgICAgICAgICAgZGlyMj0iLi4vJCRkaXIyIjsgXAorICAgICAgICBmaTsgXAorICAgICAgICBkaXIwPSIkJGRpcjAiLyIkJGZpcnN0IjsgXAorICAgICAgZmk7IFwKKyAgICBmaTsgXAorICAgIGRpcjE9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAorICBkb25lOyBcCisgIHJlbGRpcj0iJCRkaXIyIgorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKK0NDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKK0NIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKK0NIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKK0NIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUiA9IEBEQVRBRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAorRExMVE9PTCA9IEBETExUT09MQAorRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKK0VSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACitFWEVFWFQgPSBARVhFRVhUQAorRkZMQUdTID0gQEZGTEFHU0AKK0ZHUkVQID0gQEZHUkVQQAorRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKK0dDT1YgPSBAR0NPVkAKK0dDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAorR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACitHTElCX0xJQlMgPSBAR0xJQl9MSUJTQAorR0xJQl9PTkxZX0NGTEFHUyA9IEBHTElCX09OTFlfQ0ZMQUdTQAorR0xJQl9PTkxZX0xJQlMgPSBAR0xJQl9PTkxZX0xJQlNACitHTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKK0dMSUJfUkVRID0gQEdMSUJfUkVRQAorR01QX0xJQlMgPSBAR01QX0xJQlNACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dSRVAgPSBAR1JFUEAKK0dTTF9MSUJTID0gQEdTTF9MSUJTQAorR1NUX0FHRSA9IEBHU1RfQUdFQAorR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACitHU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACitHU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAorR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKK0dTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAorR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORUAKK0dTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKK0dTVF9ESVNBQkxFX05FVF9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfTkVUX0RFRklORUAKK0dTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACitHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAorR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAorR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKK0dTVF9ESVNBQkxFX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkVACitHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACitHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACitHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORSA9IEBHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORUAKK0dTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAorR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACitHU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAorR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACitHU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKK0dTVF9NQUpPUk1JTk9SID0gQEdTVF9NQUpPUk1JTk9SQAorR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACitHU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACitHU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAorR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACitHU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACitHU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACitHU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAorR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAorR1NUX1BLR19ERVBTID0gQEdTVF9QS0dfREVQU0AKK0dTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACitHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FQAorR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORUAKK0dTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKK0dTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACitHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkUgPSBAR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FQAorR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKK0hBVkVfRE9DQk9PSzJIVE1MID0gQEhBVkVfRE9DQk9PSzJIVE1MQAorSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKK0hBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKK0hBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKK0hBVkVfRklHMkRFViA9IEBIQVZFX0ZJRzJERVZACitIQVZFX0dNUCA9IEBIQVZFX0dNUEAKK0hBVkVfR1NMID0gQEhBVkVfR1NMQAorSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKK0hBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKK0hBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACitIQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKK0hBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACitIT1NUX0NQVSA9IEBIT1NUX0NQVUAKK0hUTUxfRElSID0gQEhUTUxfRElSQAorSU5FVF9BVE9OX0xJQlMgPSBASU5FVF9BVE9OX0xJQlNACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCRElSID0gQExJQkRJUkAKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCTSA9IEBMSUJNQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTE9DQUxFRElSID0gQExPQ0FMRURJUkAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACitQQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAorUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKK1BBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAorUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BFUkxfUEFUSCA9IEBQRVJMX1BBVEhACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQTFVHSU5ESVIgPSBAUExVR0lORElSQAorUE9TVUIgPSBAUE9TVUJACitQUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAorVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAorVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACitXSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACitYTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKK1hTTFRQUk9DID0gQFhTTFRQUk9DQAorWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3BsdWdpbmRpciA9IEBwbHVnaW5kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorU1VCRElSUyA9IG00CitFWFRSQV9ESVNUID0gXAorCUNoYW5nZUxvZyBcCisJZ2V0dGV4dC5wYXRjaCBcCisJZ2xpYi1nZW4ubWFrIGd0ay1kb2MubWFrIHVwbG9hZC1kb2MubWFrIFwKKwljcnVmdC5tYWsgcmVsZWFzZS5tYWsgd2luMzIubWFrIHBvLm1hayBcCisJcGFyYWxsZWwtc3ViZGlycy5tYWsgXAorCWdzdC1hdXRvZ2VuLnNoIFwKKwljaGVjay1leHBvcnRzIFwKKwljLXRvLXhtbC5weSBtYW5nbGUtdG1wbC5weSBzY2FuZ29iai1tZXJnZS5weSBcCisJZ3RrLWRvYy1wbHVnaW5zLm1hayBcCisJcGx1Z2lucy54c2wgZ3N0ZG9jLXNjYW5nb2JqIFwKKwlnc3Quc3VwcCBjaGVjay5tYWsgXAorCWNvdmVyYWdlL2xjb3YubWFrIFwKKwljb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQucGwgXAorCWNvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC54c2wgXAorCWNvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC1lbnRyeS5wbCBcCisJZG93bmxvYWQtdHJhbnNsYXRpb25zIFwKKwlleHRyYWN0LXJlbGVhc2UtZGF0ZS1mcm9tLWRvYXAtZmlsZSBcCisJZ3N0LWluZGVudCBcCisJb3JjLm1haworCithbGw6IGFsbC1yZWN1cnNpdmUKKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgY29tbW9uL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251IGNvbW1vbi9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKKyMgaW50byB0aGVtIGFuZCBydW4gYG1ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgorIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiBgbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAorIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiBgY29uZmlnLnN0YXR1cycsIGVkaXQgYGNvbmZpZy5zdGF0dXMnCisjICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biBgbWFrZScpOworIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgYG1ha2UnIGNvbW1hbmQgbGluZS4KKyQoUkVDVVJTSVZFX1RBUkdFVFMpOgorCUBmYWlsPSBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgZG90X3NlZW49eWVzOyBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmU7IFwKKwlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKKwlmaTsgdGVzdCAteiAiJCRmYWlsIgorCiskKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKToKKwlAZmFpbD0gZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKwkgIGNhc2UgJCRmIGluIFwKKwkgICAgKj0qIHwgLS1bIWtdKik7OyBcCisJICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCWNhc2UgIiRAIiBpbiBcCisJICBkaXN0Y2xlYW4tKiB8IG1haW50YWluZXItY2xlYW4tKikgbGlzdD0nJChESVNUX1NVQkRJUlMpJyA7OyBcCisJICAqKSBsaXN0PSckKFNVQkRJUlMpJyA7OyBcCisJZXNhYzsgXAorCXJldj0nJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgcmV2PSIkJHN1YmRpciAkJHJldiI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCXJldj0iJCRyZXYgLiI7IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJZm9yIHN1YmRpciBpbiAkJHJldjsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZSAmJiB0ZXN0IC16ICIkJGZhaWwiCit0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAorCWRvbmUKK2N0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjdGFncyk7IFwKKwlkb25lCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PS47IFwKKwllbHNlIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PTsgXAorCWZpOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCisJICAgICAgc2V0ICIkJEAiICIkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiBjdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCAkKE1LRElSX1ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJQGxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKGRpc3RkaXIpLyQkc3ViZGlyIjsgXAorCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAorCSAgICBuZXdfZGlzdGRpcj0kJHJlbGRpcjsgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKHRvcF9kaXN0ZGlyKSI7IFwKKwkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKKwkgICAgbmV3X3RvcF9kaXN0ZGlyPSQkcmVsZGlyOyBcCisJICAgIGVjaG8gIiAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcXCI7IFwKKwkgICAgZWNobyAiICAgICBhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBhbV9fc2tpcF9tb2RlX2ZpeD06IGRpc3RkaXIpIjsgXAorCSAgICAoJChhbV9fY2QpICQkc3ViZGlyICYmIFwKKwkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCisJICAgICAgICB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIFwKKwkgICAgICAgIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFwKKwkJYW1fX3JlbW92ZV9kaXN0ZGlyPTogXAorCQlhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBcCisJCWFtX19za2lwX21vZGVfZml4PTogXAorCSAgICAgICAgZGlzdGRpcikgXAorCSAgICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stcmVjdXJzaXZlCithbGwtYW06IE1ha2VmaWxlCitpbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtcmVjdXJzaXZlCitpbnN0YWxsZGlycy1hbToKK2luc3RhbGw6IGluc3RhbGwtcmVjdXJzaXZlCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQordW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1yZWN1cnNpdmUKKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktcmVjdXJzaXZlCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1yZWN1cnNpdmUKKworaHRtbC1hbToKKworaW5mbzogaW5mby1yZWN1cnNpdmUKKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktcmVjdXJzaXZlCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtcmVjdXJzaXZlCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLXJlY3Vyc2l2ZQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1yZWN1cnNpdmUKKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1yZWN1cnNpdmUKKworcGRmLWFtOgorCitwczogcHMtcmVjdXJzaXZlCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBjdGFncy1yZWN1cnNpdmUgXAorCWluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcCB0YWdzLXJlY3Vyc2l2ZQorCisuUEhPTlk6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIFwKKwlhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisJY3RhZ3MgY3RhZ3MtcmVjdXJzaXZlIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAorCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAorCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAorCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCisJaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKKwlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBpbnN0YWxsZGlycy1hbSBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1yZWN1cnNpdmUgXAorCXVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9jb21tb24vYy10by14bWwucHkgYi9jb21tb24vYy10by14bWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk3YzExMgotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9jLXRvLXhtbC5weQpAQCAtMCwwICsxLDM0IEBACisjIC0qLSBNb2RlOiBQeXRob24gLSotCisjIHZpOnNpOmV0OnN3PTQ6c3RzPTQ6dHM9NAorCisiIiIKK0NvbnZlcnQgYSBDIHByb2dyYW0gdG8gdmFsaWQgWE1MIHRvIGJlIGluY2x1ZGVkIGluIGRvY2Jvb2sKKyIiIgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2Zyb20geG1sLnNheCBpbXBvcnQgc2F4dXRpbHMKKworZGVmIG1haW4oKToKKyAgICBpZiBsZW4oc3lzLmFyZ3YpID09IDE6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlBsZWFzZSBzcGVjaWZ5IGEgc291cmNlIGZpbGUgdG8gY29udmVydCIpCisgICAgICAgIHN5cy5leGl0KDEpCisgICAgc291cmNlID0gc3lzLmFyZ3ZbMV0KKworICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzb3VyY2UpOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIlcyBkb2VzIG5vdCBleGlzdC5cbiIgJSBzb3VyY2UpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBjb250ZW50ID0gb3Blbihzb3VyY2UsICJyIikucmVhZCgpCisKKyAgICAjIHByaW50IGhlYWRlcgorICAgIHByaW50ICc8P3htbCB2ZXJzaW9uPSIxLjAiPz4nCisgICAgcHJpbnQgJzwhRE9DVFlQRSByZWZlbnRyeSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIj4nCisgICAgcHJpbnQKKyAgICBwcmludCAnPHByb2dyYW1saXN0aW5nPicKKworICAgICMgcHJpbnQgY29udGVudAorICAgIHByaW50IHNheHV0aWxzLmVzY2FwZShjb250ZW50KS5lbmNvZGUoJ1VURi04JykKKyAgICBwcmludCAnPC9wcm9ncmFtbGlzdGluZz4nCisKK21haW4oKQpkaWZmIC0tZ2l0IGEvY29tbW9uL2NoZWNrLWV4cG9ydHMgYi9jb21tb24vY2hlY2stZXhwb3J0cwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNmQzZWNhCi0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uL2NoZWNrLWV4cG9ydHMKQEAgLTAsMCArMSw3MiBAQAorIyEvYmluL3NoCisjIGNoZWNrLWV4cG9ydHMKKyMKKyMgcXVpY2snbidkaXJ0eSBzY3JpcHQgdGhhdCByZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scyBvZiBhIGdpdmVuCisjIGxpYnJhcnkgdXNpbmcgJ25tJywgYW5kIGNvbXBhcmVzIHRoYXQgYWdhaW5zdCB0aGUgbGlzdCBvZiBzeW1ib2xzLXRvLWV4cG9ydAorIyBvZiBvdXIgd2luMzIvY29tbW9uL2xpYmZvby5kZWYgZmlsZXMuCisKK2lmIFsgJCMgLW5lIDIgXTsgdGhlbgorCWVjaG8gIlVzYWdlOiAkMCBsaWJyYXJ5LmRlZiBsaWJyYXJ5LnNvIgorCWV4aXQgMQorZmkKKworZGVmX3BhdGg9IiQxIgorZGVmX25hbWU9IiQoYmFzZW5hbWUgJGRlZl9wYXRoKSIKK2xpYl9wYXRoPSIkMiIKKworbGliX3Jlc3VsdD0iYG1rdGVtcCAvdG1wL2RlZm5hbWUuWFhYWFhYYCIKKworTENfQUxMPUMKK2V4cG9ydCBMQ19BTEwKKworIyBPbiBTb2xhcmlzLCBhZGQgLXAgdG8gZ2V0IHRoZSBjb3JyZWN0IG91dHB1dCBmb3JtYXQKK05NQVJHUz0KK2lmIG5tIC1WIDI+JjEgfGdyZXAgU29sYXJpcyA+IC9kZXYvbnVsbDsgdGhlbgorICBOTUFSR1M9LXAKK2ZpCisKKyMgRklYTUUgMC4xMTogaW4gMC4xMSwgd2Ugc2hvdWxkIGNoYW5nZSB0aGUgZXhwb3J0IGZpbHRlciB0byBvbmx5IGV4cG9ydAorIyBfZ3N0X2ZvbywgYnV0IG5vdCBfX2dzdF9mb28gKHdlIGNhbid0IGNoYW5nZSB0aGlzIG5vdywgc2luY2Ugd2UgYWRkZWQKKyMgX19nc3RfZGVidWdfbWluIGFuZCBfX2dzdF9kZWJ1Z19lbmFibGVkIGF0IHNvbWUgcG9pbnQgYW5kIG5lZWQgdG8ga2VlcAorIyBBQkkgY29tcGF0aWJpbGl0eSkuICBTbyBiZWxvdyB3ZSBzcGVjaWFsLWNhc2Ugc29tZSBzeW1ib2xzIHRoYXQgc2hvdWxkbid0CisjIHJlYWxseSBiZSBleHBvcnRlZCwgZWl0aGVyIGJlY2F1c2Ugd2UncmUgdG9vIGxhenkgdG8gcmVuYW1lIHRoZW0gdG8gc29tZXRoaW5nCisjIHRoYXQncyBub3QgZXhwb3J0ZWQgKGxpa2UgdGhlIF9nc3RfcGFyc2VfKiBzdHVmZikgb3IgYmVjYXVzZSB3ZSBoYWQgdGhlbSBpbgorIyBwdWJsaWMgaGVhZGVycyBhdCBzb21lIHBvaW50IGFsdGhvdWdoIHRoZXkgc2hvdWxkbid0IGJlIGFuZCBzbyB3ZSBuZWVkIHRvCisjIGtlZXAgdGhlbSBleHBvcnRlZCBub3cgKGxpa2UgX2dzdF9kZWJ1Z19pbml0LAorIyBfX2dzdF9lbGVtZW50X2ZhY3RvcnlfYWRkX2ludGVyZmFjZSBvcgorIyBfX2dzdF9lbGVtZW50X2ZhY3RvcnlfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUpLiAgV2Ugc3VwcHJlc3MgdGhlbSBoZXJlIHRvCisjIG1ha2Ugc3VyZSB0aGV5J3JlIGF0IGxlYXN0IG5vdCBleHBvcnRlZCBpbiB0aGUgd2luZG93cyBtc3ZjIGJ1aWxkICh0aGV5CisjIHdlcmUgbmV2ZXIgaW4gdGhlIC5kZWYgZmlsZSwgc28gdGhleSBuZXZlciBnb3QgZXhwb3J0ZWQpLgorIyBfZW5kIGlzIHNwZWNpYWwgY2FzZWQgYmVjYXVzZSBmb3Igc29tZSByZWFzb24gaXQgaXMgcmVwb3J0ZWQgYXMgYW4gZXhwb3J0ZWQKKyMgQlNTIHN5bWJvbCwgdW5saWtlIG9uIGxpbnV4IHdoZXJlIGl0J3MgYSBsb2NhbCBhYnNvbHV0ZSBzeW1ib2wuCitubSAkTk1BUkdTICRsaWJfcGF0aCB8IGF3ayBcCisJJ3sKKwkJaWYgKCQzICF+IC9eX2dzdF9wYXJzZV95eS8gJiYgXAorCQkgICAgJDMgIX4gL15fZ3N0X1thLXpdKl9pbml0LyAmJiBcCisJCSAgICAkMyAhfiAvXl9nc3RfcGFyc2VfbGF1bmNoLyAmJiBcCisJCSAgICAkMyAhfiAvXl9fZ3N0X2VsZW1lbnRfZGV0YWlsc18vICYmIFwKKwkJICAgICQzICF+IC9eX19nc3RfZWxlbWVudF9mYWN0b3J5X2FkZF8vICYmIFwKKwkJICAgICQzICF+IC9eZ3N0X2ludGVyZmFjZXNfbWFyc2hhbC8gJiYgXAorCQkgICAgJDMgfiAvXltfXSooZ3N0X3xHc3R8R1NUXykuKi8pCisJCXsKKwkJCWlmICgkMiB+IC9eW0JTREddJC8pCisJCQkJcHJpbnQgIlx0IiAkMyAiIERBVEEiCisJCQllbHNlIGlmICgkMiA9PSAiVCIpCisJCQkJcHJpbnQgIlx0IiAkMworCQl9CisJIH0nIHwgc29ydCB8IGF3ayAneyBpZiAoTlIgPT0gMSkgcHJpbnQgIkVYUE9SVFMiOyBwcmludCAkMDsgfScgXAorCT4gJGxpYl9yZXN1bHQKKworZGlmZm91dHB1dD1gZGlmZiAtdSAkZGVmX3BhdGggJGxpYl9yZXN1bHRgCitkaWZmcmVzdWx0PSQ/CisKK3JtICRsaWJfcmVzdWx0CisKK2lmIHRlc3QgIiRkaWZmcmVzdWx0IiAtZXEgMDsgdGhlbgorICBleGl0IDA7CitlbHNlCisgIGVjaG8gLW4gIiRkaWZmb3V0cHV0IiA+JjIKKyAgZWNobyA+JjIKKyAgZXhpdCAxOworZmkKKwpkaWZmIC0tZ2l0IGEvY29tbW9uL2NoZWNrLm1hayBiL2NvbW1vbi9jaGVjay5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ODdmMQotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9jaGVjay5tYWsKQEAgLTAsMCArMSwxODEgQEAKKyMga2VlcCB0YXJnZXQgYXJvdW5kLCBzaW5jZSBpdCdzIHJlZmVyZW5jZWQgaW4gdGhlIG1vZHVsZXMnIE1ha2VmaWxlcworY2xlYW4tbG9jYWwtY2hlY2s6CisJQGVjaG8KKworaWYgSEFWRV9WQUxHUklORAorIyBoYW5ncyBzcGVjdGFjdWxhcmx5IG9uIHNvbWUgbWFjaGluZXMsIHNvIGxldCdzIG5vdCBkbyB0aGlzIGJ5IGRlZmF1bHQgeWV0CitjaGVjay12YWxncmluZDoKKwkkKE1BS0UpIHZhbGdyaW5kCitlbHNlCitjaGVjay12YWxncmluZDoKKwlAdHJ1ZQorZW5kaWYKKworTE9PUFMgPSAxMAorCisjIHJ1biBhbnkgZ2l2ZW4gdGVzdCBieSBydW5uaW5nIG1ha2UgdGVzdC5jaGVjaworIyBpZiB0aGUgdGVzdCBmYWlscywgcnVuIGl0IGFnYWluIGF0IGF0IGxlYXN0IGRlYnVnIGxldmVsIDIKKyUuY2hlY2s6ICUKKwlAJChURVNUU19FTlZJUk9OTUVOVCkJCQkJCVwKKwlDS19ERUZBVUxUX1RJTUVPVVQ9MjAJCQkJCVwKKwkkKiB8fAkJCQkJCQlcCisJJChURVNUU19FTlZJUk9OTUVOVCkJCQkJCVwKKwlHU1RfREVCVUc9JCRHU1RfREVCVUcsKjoyCQkJCVwKKwlDS19ERUZBVUxUX1RJTUVPVVQ9MjAJCQkJCVwKKwkkKgorCisjIHJ1biBhbnkgZ2l2ZW4gdGVzdCBpbiBhIGxvb3AKKyUudG9ydHVyZTogJQorCUBmb3IgaSBpbiBgc2VxIDEgJChMT09QUylgOyBkbwkJCQlcCisJJChURVNUU19FTlZJUk9OTUVOVCkJCQkJCVwKKwlDS19ERUZBVUxUX1RJTUVPVVQ9MjAJCQkJCVwKKwkkKjsgZG9uZQorCisjIHJ1biBhbnkgZ2l2ZW4gdGVzdCBpbiBhbiBpbmZpbml0ZSBsb29wCislLmZvcmV2ZXI6ICUKKwlAd2hpbGUgdHJ1ZTsgZG8JCQkJCQlcCisJJChURVNUU19FTlZJUk9OTUVOVCkJCQkJCVwKKwlDS19ERUZBVUxUX1RJTUVPVVQ9MjAJCQkJCVwKKwkkKiB8fCBicmVhazsgZG9uZQorCisjIHZhbGdyaW5kIGFueSBnaXZlbiB0ZXN0IGJ5IHJ1bm5pbmcgbWFrZSB0ZXN0LnZhbGdyaW5kCislLnZhbGdyaW5kOiAlCisJQCQoVEVTVFNfRU5WSVJPTk1FTlQpCQkJCQlcCisJQ0tfREVGQVVMVF9USU1FT1VUPTM2MAkJCQkJXAorCUdfU0xJQ0U9YWx3YXlzLW1hbGxvYwkJCQkJXAorCSQoTElCVE9PTCkgLS1tb2RlPWV4ZWN1dGUJCQkJXAorCSQoVkFMR1JJTkRfUEFUSCkgLXEJCQkJCVwKKwkkKGZvcmVhY2ggcywkKFNVUFBSRVNTSU9OUyksLS1zdXBwcmVzc2lvbnM9JChzKSkJXAorCS0tdG9vbD1tZW1jaGVjayAtLWxlYWstY2hlY2s9ZnVsbCAtLXRyYWNlLWNoaWxkcmVuPXllcwlcCisJLS1sZWFrLXJlc29sdXRpb249aGlnaCAtLW51bS1jYWxsZXJzPTIwCQkJXAorCS4vJCogMj4mMSB8IHRlZSB2YWxncmluZC5sb2cKKwlAaWYgZ3JlcCAiPT0iIHZhbGdyaW5kLmxvZyA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCVwKKwkgICAgcm0gdmFsZ3JpbmQubG9nOwkJCQkJXAorCSAgICBleGl0IDE7CQkJCQkJXAorCWZpCisJQHJtIHZhbGdyaW5kLmxvZworCQorIyB2YWxncmluZCBhbnkgZ2l2ZW4gdGVzdCBhbmQgZ2VuZXJhdGUgc3VwcHJlc3Npb25zIGZvciBpdAorJS52YWxncmluZC5nZW4tc3VwcHJlc3Npb25zOiAlCisJQCQoVEVTVFNfRU5WSVJPTk1FTlQpCQkJCQlcCisJQ0tfREVGQVVMVF9USU1FT1VUPTM2MAkJCQkJXAorCUdfU0xJQ0U9YWx3YXlzLW1hbGxvYwkJCQkJXAorCSQoTElCVE9PTCkgLS1tb2RlPWV4ZWN1dGUJCQkJXAorCSQoVkFMR1JJTkRfUEFUSCkgLXEgCQkJCQlcCisJJChmb3JlYWNoIHMsJChTVVBQUkVTU0lPTlMpLC0tc3VwcHJlc3Npb25zPSQocykpCVwKKwktLXRvb2w9bWVtY2hlY2sgLS1sZWFrLWNoZWNrPWZ1bGwgLS10cmFjZS1jaGlsZHJlbj15ZXMJXAorCS0tbGVhay1yZXNvbHV0aW9uPWhpZ2ggLS1udW0tY2FsbGVycz0yMAkJCVwKKwktLWdlbi1zdXBwcmVzc2lvbnM9YWxsCQkJCQlcCisJLi8kKiAyPiYxIHwgdGVlIHN1cHByZXNzaW9ucy5sb2cKKwkKKyMgdmFsZ3JpbmQgYW55IGdpdmVuIHRlc3QgdW50aWwgZmFpbHVyZSBieSBydW5uaW5nIG1ha2UgdGVzdC52YWxncmluZC1mb3JldmVyCislLnZhbGdyaW5kLWZvcmV2ZXI6ICUKKwlAd2hpbGUgJChNQUtFKSAkKi52YWxncmluZDsgZG8JCQkJXAorCSAgdHJ1ZTsgZG9uZQorCisjIGdkYiBhbnkgZ2l2ZW4gdGVzdCBieSBydW5uaW5nIG1ha2UgdGVzdC5nZGIKKyUuZ2RiOiAlCisJQCQoVEVTVFNfRU5WSVJPTk1FTlQpCQkJCQlcCisJQ0tfRk9SSz1ubwkJCQkJCVwKKwkkKExJQlRPT0wpIC0tbW9kZT1leGVjdXRlCQkJCVwKKwlnZGIgJCoKKworIyB0b3J0dXJlIHRlc3RzCit0b3J0dXJlOiAkKFRFU1RTKQorCS1ybSB0ZXN0LXJlZ2lzdHJ5LnhtbAorCUBlY2hvICJUb3J0dXJpbmcgdGVzdHMgLi4uIgorCUBmb3IgaSBpbiBgc2VxIDEgJChMT09QUylgOyBkbwkJCQlcCisJCSQoTUFLRSkgY2hlY2sgfHwJCQkJXAorCQkoZWNobyAiRmFpbHVyZSBhZnRlciAkJGkgcnVucyI7IGV4aXQgMSkgfHwJXAorCQlleGl0IDE7CQkJCQkJXAorCWRvbmUKKwlAYmFubmVyPSJBbGwgJChMT09QUykgbG9vcHMgcGFzc2VkIjsJCQlcCisJZGFzaGVzPWBlY2hvICIkJGJhbm5lciIgfCBzZWQgcy8uLz0vZ2A7CQkJXAorCWVjaG8gJCRkYXNoZXM7IGVjaG8gJCRiYW5uZXI7IGVjaG8gJCRkYXNoZXMKKworIyBmb3JldmVyIHRlc3RzCitmb3JldmVyOiAkKFRFU1RTKQorCS1ybSB0ZXN0LXJlZ2lzdHJ5LnhtbAorCUBlY2hvICJGb3JldmVyIHRlc3RzIC4uLiIKKwlAd2hpbGUgdHJ1ZTsgZG8JCQkJCQlcCisJCSQoTUFLRSkgY2hlY2sgfHwJCQkJXAorCQkoZWNobyAiRmFpbHVyZSI7IGV4aXQgMSkgfHwJCQlcCisJCWV4aXQgMTsJCQkJCQlcCisJZG9uZQorCisjIHZhbGdyaW5kIGFsbCB0ZXN0cwordmFsZ3JpbmQ6ICQoVEVTVFMpCisJQGVjaG8gIlZhbGdyaW5kaW5nIHRlc3RzIC4uLiIKKwlAZmFpbGVkPTA7CQkJCQkJCVwKKwlmb3IgdCBpbiAkKGZpbHRlci1vdXQgJChWQUxHUklORF9URVNUU19ESVNBQkxFKSwkKFRFU1RTKSk7IGRvCVwKKwkJJChNQUtFKSAkJHQudmFsZ3JpbmQ7CQkJCQlcCisJCWlmIHRlc3QgIiQkPyIgLW5lIDA7IHRoZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJZWNobyAiVmFsZ3JpbmQgZXJyb3IgZm9yIHRlc3QgJCR0IjsJCVwKKwkJCWZhaWxlZD1gZXhwciAkJGZhaWxlZCArIDFgOwkJCVwKKwkJCXdoaWNodD0iJCR3aGljaHQgJCR0IjsJCQkJXAorCQlmaTsJCQkJCQkJXAorCWRvbmU7CQkJCQkJCQlcCisJaWYgdGVzdCAiJCRmYWlsZWQiIC1uZSAwOyB0aGVuCQkJCQlcCisJCWVjaG8gIiQkZmFpbGVkIHRlc3RzIGhhZCBsZWFrcyBvciBlcnJvcnMgdW5kZXIgdmFsZ3JpbmQ6IjsJXAorCQllY2hvICIkJHdoaWNodCI7CQkJCQlcCisJCWZhbHNlOwkJCQkJCQlcCisJZmkKKworIyB2YWxncmluZCBhbGwgdGVzdHMgYW5kIGdlbmVyYXRlIHN1cHByZXNzaW9ucwordmFsZ3JpbmQuZ2VuLXN1cHByZXNzaW9uczogJChURVNUUykKKwlAZWNobyAiVmFsZ3JpbmRpbmcgdGVzdHMgLi4uIgorCUBmYWlsZWQ9MDsJCQkJCQkJXAorCWZvciB0IGluICQoZmlsdGVyLW91dCAkKFZBTEdSSU5EX1RFU1RTX0RJU0FCTEUpLCQoVEVTVFMpKTsgZG8JXAorCQkkKE1BS0UpICQkdC52YWxncmluZC5nZW4tc3VwcHJlc3Npb25zOwkJCVwKKwkJaWYgdGVzdCAiJCQ/IiAtbmUgMDsgdGhlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQllY2hvICJWYWxncmluZCBlcnJvciBmb3IgdGVzdCAkJHQiOwkJXAorCQkJZmFpbGVkPWBleHByICQkZmFpbGVkICsgMWA7CQkJXAorCQkJd2hpY2h0PSIkJHdoaWNodCAkJHQiOwkJCQlcCisJCWZpOwkJCQkJCQlcCisJZG9uZTsJCQkJCQkJCVwKKwlpZiB0ZXN0ICIkJGZhaWxlZCIgLW5lIDA7IHRoZW4JCQkJCVwKKwkJZWNobyAiJCRmYWlsZWQgdGVzdHMgaGFkIGxlYWtzIG9yIGVycm9ycyB1bmRlciB2YWxncmluZDoiOwlcCisJCWVjaG8gIiQkd2hpY2h0IjsJCQkJCVwKKwkJZmFsc2U7CQkJCQkJCVwKKwlmaQorCisjIGluc3BlY3QgZXZlcnkgcGx1Z2luIGZlYXR1cmUKK0dTVF9JTlNQRUNUID0gJChHU1RfVE9PTFNfRElSKS9nc3QtaW5zcGVjdC0kKEdTVF9NQUpPUk1JTk9SKQoraW5zcGVjdDoKKwlAZWNobyAiSW5zcGVjdGluZyBmZWF0dXJlcyAuLi4iCisJQGZvciBlIGluIGAkKFRFU1RTX0VOVklST05NRU5UKSAkKEdTVF9JTlNQRUNUKSB8IGhlYWQgLW4gLTIgCVwKKwkgIHwgY3V0IC1kOiAtZjJgOwkJCQkJCVwKKwkgIGRvIGVjaG8gSW5zcGVjdGluZyAkJGU7CQkJCQlcCisJICAgICAkKEdTVF9JTlNQRUNUKSAkJGUgPiAvZGV2L251bGwgMj4mMTsgZG9uZQorCitoZWxwOgorCUBlY2hvCisJQGVjaG8gIm1ha2UgY2hlY2sgICAgICAgICAgICAgICAgICAgICAgICAgLS0gcnVuIGFsbCBjaGVja3MiCisJQGVjaG8gIm1ha2UgdG9ydHVyZSAgICAgICAgICAgICAgICAgICAgICAgLS0gcnVuIGFsbCBjaGVja3MgJChMT09QUykgdGltZXMiCisJQGVjaG8gIm1ha2UgKGRpcikvKHRlc3QpLmNoZWNrICAgICAgICAgICAgLS0gcnVuIHRoZSBnaXZlbiBjaGVjayBvbmNlIgorCUBlY2hvICJtYWtlIChkaXIpLyh0ZXN0KS5mb3JldmVyICAgICAgICAgIC0tIHJ1biB0aGUgZ2l2ZW4gY2hlY2sgZm9yZXZlciIKKwlAZWNobyAibWFrZSAoZGlyKS8odGVzdCkudG9ydHVyZSAgICAgICAgICAtLSBydW4gdGhlIGdpdmVuIGNoZWNrICQoTE9PUFMpIHRpbWVzIgorCUBlY2hvCisJQGVjaG8gIm1ha2UgKGRpcikvKHRlc3QpLmdkYiAgICAgICAgICAgICAgLS0gc3RhcnQgdXAgZ2RiIGZvciB0aGUgZ2l2ZW4gdGVzdCIKKwlAZWNobworCUBlY2hvICJtYWtlIHZhbGdyaW5kICAgICAgICAgICAgICAgICAgICAgIC0tIHZhbGdyaW5kIGFsbCB0ZXN0cyIKKwlAZWNobyAibWFrZSB2YWxncmluZC5nZW4tc3VwcHJlc3Npb25zICAgICAtLSBnZW5lcmF0ZSBzdXBwcmVzc2lvbnMgZm9yIGFsbCB0ZXN0cyIKKwlAZWNobyAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc2F2ZSB0byBzdXBwcmVzc2lvbnMubG9nIgorCUBlY2hvICJtYWtlIChkaXIpLyh0ZXN0KS52YWxncmluZCAgICAgICAgIC0tIHZhbGdyaW5kIHRoZSBnaXZlbiB0ZXN0IgorCUBlY2hvICJtYWtlIChkaXIpLyh0ZXN0KS52YWxncmluZC1mb3JldmVyIC0tIHZhbGdyaW5kIHRoZSBnaXZlbiB0ZXN0IGZvcmV2ZXIiCisJQGVjaG8gIm1ha2UgKGRpcikvKHRlc3QpLnZhbGdyaW5kLmdlbi1zdXBwcmVzc2lvbnMgLS0gZ2VuZXJhdGUgc3VwcHJlc3Npb25zIgorCUBlY2hvICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzYXZlIHRvIHN1cHByZXNzaW9ucy5sb2ciCisJQGVjaG8gIm1ha2UgaW5zcGVjdCAgICAgICAgICAgICAgICAgICAgICAgLS0gaW5zcGVjdCBhbGwgcGx1Z2luIGZlYXR1cmVzIgorCUBlY2hvCisJQGVjaG8KKwlAZWNobyAiQWRkaXRpb25hbGx5LCB5b3UgY2FuIHVzZSB0aGUgR1NUX0NIRUNLUyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byIKKwlAZWNobyAic3BlY2lmeSB3aGljaCB0ZXN0KHMpIHNob3VsZCBiZSBydW4uIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBhcmUiCisJQGVjaG8gImRlYnVnZ2luZyBhIGZhaWx1cmUgaW4gb25lIHBhcnRpY3VsYXIgdGVzdCwgb3Igd2FudCB0byByZXByb2R1Y2UiCisJQGVjaG8gImEgcmFjZSBjb25kaXRpb24gaW4gYSBzaW5nbGUgdGVzdC4iCisJQGVjaG8KKwlAZWNobyAiRXhhbXBsZXM6IgorCUBlY2hvCisJQGVjaG8gIiAgR1NUX0NIRUNLUz10ZXN0X3RoaXMsdGVzdF90aGF0ICBtYWtlIGVsZW1lbnQvZm9vYmFyLmNoZWNrIgorCUBlY2hvICIgIEdTVF9DSEVDS1M9dGVzdF9tYW55X3RocmVhZHMgICAgbWFrZSBlbGVtZW50L2Zvb2Jhci5mb3JldmVyIgorCUBlY2hvCisKZGlmZiAtLWdpdCBhL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQtZW50cnkucGwgYi9jb21tb24vY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LWVudHJ5LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYzUwNmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LWVudHJ5LnBsCkBAIC0wLDAgKzEsNjkgQEAKKyMhL3Vzci9iaW4vcGVybAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYgRGFuaWVsIEJlcnJhbmdlCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKworCitwcmludCA8PEVPRjsKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+Q292ZXJhZ2UgcmVwb3J0IGZvciAkQVJHVlswXTwvdGl0bGU+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICAgICAgICAgIHNwYW4ucGVyZmVjdCB7CisgICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2IoMCwyNTUsMCk7CisgICAgICAgICAgfQorICAgICAgICAgIHNwYW4udGVycmlibGUgeworICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiKDI1NSwwLDApOworICAgICAgICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5Db3ZlcmFnZSByZXBvcnQgZm9yICRBUkdWWzBdPC9oMT4KKworPHByZT4KK0VPRgorCisKK3doaWxlICg8PikgeworICAgIHMvJi8mYW1wOy9nOworICAgIHMvPC8mbHQ7L2c7CisgICAgcy8+LyZndDsvZzsKKworICAgIGlmICgvXlxzKmZ1bmN0aW9uIChcUyspIGNhbGxlZCAoXGQrKSByZXR1cm5lZCBcZCslIGJsb2NrcyBleGVjdXRlZCBcZCslLykgeworCW15ICRjbGFzcyA9ICQyID4gMCA/ICJwZXJmZWN0IiA6ICJ0ZXJyaWJsZSI7CisJJF8gPSAiPHNwYW4gY2xhc3M9XCIkY2xhc3NcIiBpZD1cIiIgLiAkMSAuICJcIj4kXzwvc3Bhbj4iOworICAgIH0gZWxzaWYgKC9eXHMqYnJhbmNoXHMrXGQrXHMrdGFrZW5ccysoXGQrKSVccysuKiQvKSB7CisJbXkgJGNsYXNzID0gJDEgPiAwID8gInBlcmZlY3QiIDogInRlcnJpYmxlIjsKKwkkXyA9ICI8c3BhbiBjbGFzcz1cIiRjbGFzc1wiPiRfPC9zcGFuPiI7CisgICAgfSBlbHNpZiAoL15ccypicmFuY2hccytcZCtccytuZXZlciBleGVjdXRlZC4qJC8pIHsKKwlteSAkY2xhc3MgPSAidGVycmlibGUiOworCSRfID0gIjxzcGFuIGNsYXNzPVwiJGNsYXNzXCI+JF88L3NwYW4+IjsKKyAgICB9IGVsc2lmICgvXlxzKmNhbGxccytcZCtccytuZXZlciBleGVjdXRlZC4qJC8pIHsKKwlteSAkY2xhc3MgPSAidGVycmlibGUiOworCSRfID0gIjxzcGFuIGNsYXNzPVwiJGNsYXNzXCI+JF88L3NwYW4+IjsKKyAgICB9IGVsc2lmICgvXlxzKmNhbGxccytcZCtccytyZXR1cm5lZFxzKyhcZCspJS4qJC8pIHsKKwlteSAkY2xhc3MgPSAkMSA+IDAgPyAicGVyZmVjdCIgOiAidGVycmlibGUiOworCSRfID0gIjxzcGFuIGNsYXNzPVwiJGNsYXNzXCI+JF88L3NwYW4+IjsKKyAgICB9CisKKyAgICBwcmludDsKK30KKworcHJpbnQgPDxFT0Y7Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KK0VPRgpkaWZmIC0tZ2l0IGEvY29tbW9uL2NvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC5wbCBiL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQzMGY4ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQucGwKQEAgLTAsMCArMSwxMjUgQEAKKyMhL3Vzci9iaW4vcGVybAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYgRGFuaWVsIEJlcnJhbmdlCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKwordXNlIHdhcm5pbmdzOwordXNlIHN0cmljdDsKKworbXkgJWNvdmVyYWdlID0gKCBmdW5jdGlvbnMgPT4ge30sIGZpbGVzID0+IHt9ICk7CisKK215ICVmaWxlbWFwOworCitteSAkdHlwZTsKK215ICRuYW1lOworCitteSBAZnVuY3Rpb25zOworCit3aGlsZSAoPD4pIHsKKyAgICBpZiAoL15GdW5jdGlvbiAnKC4qKSdccyokLykgeworCSR0eXBlID0gImZ1bmN0aW9uIjsKKwkkbmFtZSA9ICQxOworCSRjb3ZlcmFnZXskdHlwZX0tPnskbmFtZX0gPSB7fTsKKwlwdXNoIEBmdW5jdGlvbnMsICRuYW1lOworICAgIH0gZWxzaWYgKC9eRmlsZSAnKC4qPyknXHMqJC8pIHsKKwkkdHlwZSA9ICJmaWxlIjsKKwkkbmFtZSA9ICQxOworCSRjb3ZlcmFnZXskdHlwZX0tPnskbmFtZX0gPSB7fTsKKworCWZvcmVhY2ggbXkgJGZ1bmMgKEBmdW5jdGlvbnMpIHsKKwkgICAgJGNvdmVyYWdleyJmdW5jdGlvbiJ9LT57JGZ1bmN9LT57ZmlsZX0gPSAkbmFtZTsKKwl9CisJQGZ1bmN0aW9ucyA9ICgpOworICAgIH0gZWxzaWYgKC9eTGluZXMgZXhlY3V0ZWQ6KC4qKSVccypvZlxzKihcZCspXHMqJC8pIHsKKwkkY292ZXJhZ2V7JHR5cGV9LT57JG5hbWV9LT57bGluZXN9ID0gJDI7CisJJGNvdmVyYWdleyR0eXBlfS0+eyRuYW1lfS0+e2xpbmVzQ292ZXJhZ2V9ID0gJDE7CisgICAgfSBlbHNpZiAoL15CcmFuY2hlcyBleGVjdXRlZDooLiopJVxzKm9mXHMqKFxkKylccyokLykgeworCSRjb3ZlcmFnZXskdHlwZX0tPnskbmFtZX0tPnticmFuY2hlc30gPSAkMjsKKwkkY292ZXJhZ2V7JHR5cGV9LT57JG5hbWV9LT57YnJhbmNoZXNDb3ZlcmFnZX0gPSAkMTsKKyAgICB9IGVsc2lmICgvXlRha2VuIGF0IGxlYXN0IG9uY2U6KC4qKSVccypvZlxzKihcZCspXHMqJC8pIHsKKwkkY292ZXJhZ2V7JHR5cGV9LT57JG5hbWV9LT57Y29uZHN9ID0gJDI7CisJJGNvdmVyYWdleyR0eXBlfS0+eyRuYW1lfS0+e2NvbmRzQ292ZXJhZ2V9ID0gJDE7CisgICAgfSBlbHNpZiAoL15DYWxscyBleGVjdXRlZDooLiopJVxzKm9mXHMqKFxkKylccyokLykgeworCSRjb3ZlcmFnZXskdHlwZX0tPnskbmFtZX0tPntjYWxsc30gPSAkMjsKKwkkY292ZXJhZ2V7JHR5cGV9LT57JG5hbWV9LT57Y2FsbHNDb3ZlcmFnZX0gPSAkMTsKKyAgICB9IGVsc2lmICgvXk5vIGJyYW5jaGVzJC8pIHsKKwkkY292ZXJhZ2V7JHR5cGV9LT57JG5hbWV9LT57YnJhbmNoZXN9ID0gMDsKKwkkY292ZXJhZ2V7JHR5cGV9LT57JG5hbWV9LT57YnJhbmNoZXNDb3ZlcmFnZX0gPSAiMTAwLjAwIjsKKwkkY292ZXJhZ2V7JHR5cGV9LT57JG5hbWV9LT57Y29uZHN9ID0gMDsKKwkkY292ZXJhZ2V7JHR5cGV9LT57JG5hbWV9LT57Y29uZHNDb3ZlcmFnZX0gPSAiMTAwLjAwIjsKKyAgICB9IGVsc2lmICgvXk5vIGNhbGxzJC8pIHsKKwkkY292ZXJhZ2V7JHR5cGV9LT57JG5hbWV9LT57Y2FsbHN9ID0gMDsKKwkkY292ZXJhZ2V7JHR5cGV9LT57JG5hbWV9LT57Y2FsbHNDb3ZlcmFnZX0gPSAiMTAwLjAwIjsKKyAgICB9IGVsc2lmICgvXlxzKiguKik6Y3JlYXRpbmcgJyguKiknXHMqJC8pIHsKKwkkZmlsZW1hcHskMX0gPSAkMjsKKyAgICB9IGVsc2lmICgvXlxzKiQvKSB7CisJIyBuYWRhCisgICAgfSBlbHNlIHsKKwl3YXJuICJTaGl0IFskX11cbiI7CisgICAgfQorfQorCitteSAlc3VtbWFyeTsKK2ZvcmVhY2ggbXkgJHR5cGUgKCJmdW5jdGlvbiIsICJmaWxlIikgeworICAgICRzdW1tYXJ5eyR0eXBlfSA9IHt9OworICAgIGZvcmVhY2ggbXkgJG0gKCJsaW5lcyIsICJicmFuY2hlcyIsICJjb25kcyIsICJjYWxscyIpIHsKKwlteSAkdG90YWxHb3QgPSAwOworCW15ICR0b3RhbE1pc3MgPSAwOworCW15ICRjb3VudCA9IDA7CisJZm9yZWFjaCBteSAkZnVuYyAoa2V5cyAleyRjb3ZlcmFnZXtmdW5jdGlvbn19KSB7CisJICAgICRjb3VudCsrOworCSAgICBteSAkZ290ID0gJGNvdmVyYWdle2Z1bmN0aW9ufS0+eyRmdW5jfS0+eyRtfTsKKwkgICAgJHRvdGFsR290ICs9ICRnb3Q7CisJICAgIG15ICRtaXNzID0gJGdvdCAqICRjb3ZlcmFnZXtmdW5jdGlvbn0tPnskZnVuY30tPnskbSAuIkNvdmVyYWdlIn0gLyAxMDA7CisJICAgICR0b3RhbE1pc3MgKz0gJG1pc3M7CisJfQorCSRzdW1tYXJ5eyR0eXBlfS0+eyRtfSA9IHNwcmludGYoIiVkIiwgJHRvdGFsR290KTsKKwkkc3VtbWFyeXskdHlwZX0tPnskbSAuICJDb3ZlcmFnZSJ9ID0gc3ByaW50ZigiJS4yZiIsICR0b3RhbE1pc3MgLyAkdG90YWxHb3QgKiAxMDApOworICAgIH0KK30KKworCisKK3ByaW50ICI8Y292ZXJhZ2U+XG4iOworCitmb3JlYWNoIG15ICR0eXBlICgiZnVuY3Rpb24iLCAiZmlsZSIpIHsKKyAgICBwcmludGYgIjwlc3M+XG4iLCAkdHlwZTsKKyAgICBmb3JlYWNoIG15ICRuYW1lIChzb3J0IHsgJGEgY21wICRiIH0ga2V5cyAleyRjb3ZlcmFnZXskdHlwZX19KSB7CisJbXkgJHJlYyA9ICRjb3ZlcmFnZXskdHlwZX0tPnskbmFtZX07CisJcHJpbnRmICIgIDxlbnRyeSBuYW1lPVwiJXNcIiBkZXRhaWxzPVwiJXNcIj5cbiIsICRuYW1lLCAoJHR5cGUgZXEgImZpbGUiID8gJGZpbGVtYXB7JG5hbWV9IDogJGZpbGVtYXB7JHJlYy0+e2ZpbGV9fSk7CisJcHJpbnRmICIgICAgPGxpbmVzIGNvdW50PVwiJXNcIiBjb3ZlcmFnZT1cIiVzXCIvPlxuIiwgJHJlYy0+e2xpbmVzfSwgJHJlYy0+e2xpbmVzQ292ZXJhZ2V9OworCWlmIChleGlzdHMgJHJlYy0+e2JyYW5jaGVzfSkgeworCSAgICBwcmludGYgIiAgICA8YnJhbmNoZXMgY291bnQ9XCIlc1wiIGNvdmVyYWdlPVwiJXNcIi8+XG4iLCAkcmVjLT57YnJhbmNoZXN9LCAkcmVjLT57YnJhbmNoZXNDb3ZlcmFnZX07CisJfQorCWlmIChleGlzdHMgJHJlYy0+e2NvbmRzfSkgeworCSAgICBwcmludGYgIiAgICA8Y29uZGl0aW9ucyBjb3VudD1cIiVzXCIgY292ZXJhZ2U9XCIlc1wiLz5cbiIsICRyZWMtPntjb25kc30sICRyZWMtPntjb25kc0NvdmVyYWdlfTsKKwl9CisJaWYgKGV4aXN0cyAkcmVjLT57Y2FsbHN9KSB7CisJICAgIHByaW50ZiAiICAgIDxjYWxscyBjb3VudD1cIiVzXCIgY292ZXJhZ2U9XCIlc1wiLz5cbiIsICRyZWMtPntjYWxsc30sICRyZWMtPntjYWxsc0NvdmVyYWdlfTsKKwl9CisJcHJpbnQgICIgIDwvZW50cnk+XG4iOworICAgIH0KKworICAgIHByaW50ZiAiICA8c3VtbWFyeT5cbiI7CisgICAgcHJpbnRmICIgICAgPGxpbmVzIGNvdW50PVwiJXNcIiBjb3ZlcmFnZT1cIiVzXCIvPlxuIiwgJHN1bW1hcnl7JHR5cGV9LT57bGluZXN9LCAkc3VtbWFyeXskdHlwZX0tPntsaW5lc0NvdmVyYWdlfTsKKyAgICBwcmludGYgIiAgICA8YnJhbmNoZXMgY291bnQ9XCIlc1wiIGNvdmVyYWdlPVwiJXNcIi8+XG4iLCAkc3VtbWFyeXskdHlwZX0tPnticmFuY2hlc30sICRzdW1tYXJ5eyR0eXBlfS0+e2JyYW5jaGVzQ292ZXJhZ2V9OworICAgIHByaW50ZiAiICAgIDxjb25kaXRpb25zIGNvdW50PVwiJXNcIiBjb3ZlcmFnZT1cIiVzXCIvPlxuIiwgJHN1bW1hcnl7JHR5cGV9LT57Y29uZHN9LCAkc3VtbWFyeXskdHlwZX0tPntjb25kc0NvdmVyYWdlfTsKKyAgICBwcmludGYgIiAgICA8Y2FsbHMgY291bnQ9XCIlc1wiIGNvdmVyYWdlPVwiJXNcIi8+XG4iLCAkc3VtbWFyeXskdHlwZX0tPntjYWxsc30sICRzdW1tYXJ5eyR0eXBlfS0+e2NhbGxzQ292ZXJhZ2V9OworICAgIHByaW50ZiAgIiAgPC9zdW1tYXJ5PlxuIjsKKyAgICBwcmludGYgIjwvJXNzPlxuIiwgJHR5cGU7Cit9CisKK3ByaW50ICI8L2NvdmVyYWdlPlxuIjsKZGlmZiAtLWdpdCBhL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQueHNsIGIvY29tbW9uL2NvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE5ZWJiNgotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQueHNsCkBAIC0wLDAgKzEsMjM1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KKzwhLS0NCisjDQorIyBDb3B5cmlnaHQgKEMpIDIwMDYgRGFuaWVsIEJlcnJhbmdlDQorIw0KKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisjDQorIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKyMNCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQ0KKy0tPg0KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSINCisgICAgICAgICAgICAgICAgdmVyc2lvbj0iMS4wIj4NCisNCisgIDx4c2w6b3V0cHV0IG1ldGhvZD0iaHRtbCIvPg0KKw0KKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY292ZXJhZ2UiPg0KKyAgICA8aHRtbD4NCisgICAgICA8aGVhZD4NCisgICAgICAgIDx0aXRsZT5Db3ZlcmFnZSByZXBvcnQ8L3RpdGxlPg0KKyAgICAgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCisgICAgICAgICAgdGJvZHkgdHIub2RkIHRkLmxhYmVsIHsNCisgICAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiKDEyOCwxMjgsMTI4KTsNCisgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiKDEyOCwxMjgsMTI4KTsNCisgICAgICAgICAgfQ0KKyAgICAgICAgICB0Ym9keSB0ci5vZGQgdGQubGFiZWwgew0KKyAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYigyMDAsMjAwLDIwMCk7DQorICAgICAgICAgIH0NCisgICAgICAgICAgDQorICAgICAgICAgIHRoZWFkLCB0Zm9vdCB7DQorICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiKDYwLDYwLDYwKTsNCisgICAgICAgICAgICBjb2xvcjogd2hpdGU7DQorICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQorICAgICAgICAgIH0NCisNCisgICAgICAgICAgdHIgdGQucGVyZmVjdCB7DQorICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiKDAsMjU1LDApOw0KKyAgICAgICAgICAgIGNvbG9yOiBibGFjazsNCisgICAgICAgICAgfQ0KKyAgICAgICAgICB0ciB0ZC5leGNlbGxhbnQgew0KKyAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYigxNDAsMjU1LDE0MCk7DQorICAgICAgICAgICAgY29sb3I6IGJsYWNrOw0KKyAgICAgICAgICB9DQorICAgICAgICAgIHRyIHRkLmdvb2Qgew0KKyAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYigxNjAsMjU1LDApOw0KKyAgICAgICAgICAgIGNvbG9yOiBibGFjazsNCisgICAgICAgICAgfQ0KKyAgICAgICAgICB0ciB0ZC5wb29yIHsNCisgICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2IoMjU1LDE2MCwwKTsNCisgICAgICAgICAgICBjb2xvcjogYmxhY2s7DQorICAgICAgICAgIH0NCisgICAgICAgICAgdHIgdGQuYmFkIHsNCisgICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2IoMjU1LDE0MCwxNDApOw0KKyAgICAgICAgICAgIGNvbG9yOiBibGFjazsNCisgICAgICAgICAgfQ0KKyAgICAgICAgICB0ciB0ZC50ZXJyaWJsZSB7DQorICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiKDI1NSwwLDApOw0KKyAgICAgICAgICAgIGNvbG9yOiBibGFjazsNCisgICAgICAgICAgfQ0KKyAgICAgICAgPC9zdHlsZT4NCisgICAgICA8L2hlYWQ+DQorICAgICAgPGJvZHk+DQorICAgICAgICA8aDE+Q292ZXJhZ2UgcmVwb3J0PC9oMT4NCisgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzLz4NCisgICAgICA8L2JvZHk+DQorICAgIDwvaHRtbD4NCisgIDwveHNsOnRlbXBsYXRlPg0KKw0KKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZnVuY3Rpb25zIj4NCisgICAgPGgyPkZ1bmN0aW9uIGNvdmVyYWdlPC9oMj4NCisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNvbnRlbnQiPg0KKyAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0eXBlIiBzZWxlY3Q9IidmdW5jdGlvbiciLz4NCisgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4NCisgIDwveHNsOnRlbXBsYXRlPg0KKyAgDQorDQorICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJmaWxlcyI+DQorICAgIDxoMj5GaWxlIGNvdmVyYWdlPC9oMj4NCisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNvbnRlbnQiPg0KKyAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0eXBlIiBzZWxlY3Q9IidmaWxlJyIvPg0KKyAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPg0KKyAgPC94c2w6dGVtcGxhdGU+DQorDQorICA8eHNsOnRlbXBsYXRlIG5hbWU9ImNvbnRlbnQiPg0KKyAgICA8eHNsOnBhcmFtIG5hbWU9InR5cGUiLz4NCisgICAgPHRhYmxlPg0KKyAgICAgIDx0aGVhZD4NCisgICAgICAgIDx0cj4NCisgICAgICAgICAgPHRoPk5hbWU8L3RoPg0KKyAgICAgICAgICA8dGg+TGluZXM8L3RoPg0KKyAgICAgICAgICA8dGg+QnJhbmNoZXM8L3RoPg0KKyAgICAgICAgICA8dGg+Q29uZGl0aW9uczwvdGg+DQorICAgICAgICAgIDx0aD5DYWxsczwvdGg+DQorICAgICAgICA8L3RyPg0KKyAgICAgIDwvdGhlYWQ+DQorICAgICAgPHRib2R5Pg0KKyAgICAgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9ImVudHJ5Ij4NCisgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImVudHJ5Ij4NCisgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0idHlwZSIgc2VsZWN0PSIkdHlwZSIvPg0KKyAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJjbGFzcyI+DQorICAgICAgICAgICAgICA8eHNsOmNob29zZT4NCisgICAgICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9InBvc2l0aW9uKCkgbW9kIDIiPg0KKyAgICAgICAgICAgICAgICAgIDx4c2w6dGV4dD5vZGQ8L3hzbDp0ZXh0Pg0KKyAgICAgICAgICAgICAgICA8L3hzbDp3aGVuPg0KKyAgICAgICAgICAgICAgICA8eHNsOm90aGVyd2lzZT4NCisgICAgICAgICAgICAgICAgICA8eHNsOnRleHQ+ZXZlbjwveHNsOnRleHQ+DQorICAgICAgICAgICAgICAgIDwveHNsOm90aGVyd2lzZT4NCisgICAgICAgICAgICAgIDwveHNsOmNob29zZT4NCisgICAgICAgICAgICA8L3hzbDp3aXRoLXBhcmFtPg0KKyAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPg0KKyAgICAgICAgPC94c2w6Zm9yLWVhY2g+DQorICAgICAgPC90Ym9keT4NCisgICAgICA8dGZvb3Q+DQorICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0ic3VtbWFyeSI+DQorICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJlbnRyeSI+DQorICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InR5cGUiIHNlbGVjdD0iJ3N1bW1hcnknIi8+DQorICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImNsYXNzIj4NCisgICAgICAgICAgICAgIDx4c2w6Y2hvb3NlPg0KKyAgICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0icG9zaXRpb24oKSBtb2QgMiI+DQorICAgICAgICAgICAgICAgICAgPHhzbDp0ZXh0Pm9kZDwveHNsOnRleHQ+DQorICAgICAgICAgICAgICAgIDwveHNsOndoZW4+DQorICAgICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPg0KKyAgICAgICAgICAgICAgICAgIDx4c2w6dGV4dD5ldmVuPC94c2w6dGV4dD4NCisgICAgICAgICAgICAgICAgPC94c2w6b3RoZXJ3aXNlPg0KKyAgICAgICAgICAgICAgPC94c2w6Y2hvb3NlPg0KKyAgICAgICAgICAgIDwveHNsOndpdGgtcGFyYW0+DQorICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+DQorICAgICAgICA8L3hzbDpmb3ItZWFjaD4NCisgICAgICA8L3Rmb290Pg0KKyAgICA8L3RhYmxlPg0KKyAgPC94c2w6dGVtcGxhdGU+DQorICANCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0iZW50cnkiPg0KKyAgICA8eHNsOnBhcmFtIG5hbWU9InR5cGUiLz4NCisgICAgPHhzbDpwYXJhbSBuYW1lPSJjbGFzcyIvPg0KKyAgICA8dHIgY2xhc3M9InskY2xhc3N9Ij4NCisgICAgICA8eHNsOmNob29zZT4NCisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkdHlwZSA9ICdmdW5jdGlvbiciPg0KKyAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVsIj48YSBocmVmPSJ7QGRldGFpbHN9Lmh0bWwje0BuYW1lfSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+PC9hPjwvdGQ+DQorICAgICAgICA8L3hzbDp3aGVuPg0KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiR0eXBlID0gJ2ZpbGUnIj4NCisgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbCI+PGEgaHJlZj0ie0BkZXRhaWxzfS5odG1sIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz48L2E+PC90ZD4NCisgICAgICAgIDwveHNsOndoZW4+DQorICAgICAgICA8eHNsOm90aGVyd2lzZT4NCisgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbCI+U3VtbWFyeTwvdGQ+DQorICAgICAgICA8L3hzbDpvdGhlcndpc2U+DQorICAgICAgPC94c2w6Y2hvb3NlPg0KKw0KKyAgICAgIDx4c2w6aWYgdGVzdD0iY291bnQobGluZXMpIj4NCisgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ibGluZXMiLz4NCisgICAgICA8L3hzbDppZj4NCisgICAgICA8eHNsOmlmIHRlc3Q9Im5vdChjb3VudChsaW5lcykpIj4NCisgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJtaXNzaW5nIi8+DQorICAgICAgPC94c2w6aWY+DQorDQorICAgICAgPHhzbDppZiB0ZXN0PSJjb3VudChicmFuY2hlcykiPg0KKyAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJicmFuY2hlcyIvPg0KKyAgICAgIDwveHNsOmlmPg0KKyAgICAgIDx4c2w6aWYgdGVzdD0ibm90KGNvdW50KGJyYW5jaGVzKSkiPg0KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9Im1pc3NpbmciLz4NCisgICAgICA8L3hzbDppZj4NCisNCisgICAgICA8eHNsOmlmIHRlc3Q9ImNvdW50KGNvbmRpdGlvbnMpIj4NCisgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iY29uZGl0aW9ucyIvPg0KKyAgICAgIDwveHNsOmlmPg0KKyAgICAgIDx4c2w6aWYgdGVzdD0ibm90KGNvdW50KGNvbmRpdGlvbnMpKSI+DQorICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ibWlzc2luZyIvPg0KKyAgICAgIDwveHNsOmlmPg0KKw0KKyAgICAgIDx4c2w6aWYgdGVzdD0iY291bnQoY2FsbHMpIj4NCisgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iY2FsbHMiLz4NCisgICAgICA8L3hzbDppZj4NCisgICAgICA8eHNsOmlmIHRlc3Q9Im5vdChjb3VudChjYWxscykpIj4NCisgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJtaXNzaW5nIi8+DQorICAgICAgPC94c2w6aWY+DQorDQorICAgIDwvdHI+DQorICA8L3hzbDp0ZW1wbGF0ZT4NCisgIA0KKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGluZXMiPg0KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icm93Ii8+DQorICA8L3hzbDp0ZW1wbGF0ZT4NCisNCisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImJyYW5jaGVzIj4NCisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InJvdyIvPg0KKyAgPC94c2w6dGVtcGxhdGU+DQorDQorICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb25kaXRpb25zIj4NCisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InJvdyIvPg0KKyAgPC94c2w6dGVtcGxhdGU+DQorDQorICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJjYWxscyI+DQorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJyb3ciLz4NCisgIDwveHNsOnRlbXBsYXRlPg0KKw0KKyAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJtaXNzaW5nIj4NCisgICAgPHRkPjwvdGQ+DQorICA8L3hzbDp0ZW1wbGF0ZT4NCisNCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0icm93Ij4NCisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJxdWFsaXR5Ij4NCisgICAgICA8eHNsOmNob29zZT4NCisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJAY292ZXJhZ2UgPSAxMDAiPg0KKyAgICAgICAgICA8eHNsOnRleHQ+cGVyZmVjdDwveHNsOnRleHQ+DQorICAgICAgICA8L3hzbDp3aGVuPg0KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IkBjb3ZlcmFnZSA+PSA4MC4wIj4NCisgICAgICAgICAgPHhzbDp0ZXh0PmV4Y2VsbGFudDwveHNsOnRleHQ+DQorICAgICAgICA8L3hzbDp3aGVuPg0KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IkBjb3ZlcmFnZSA+PSA2MC4wIj4NCisgICAgICAgICAgPHhzbDp0ZXh0Pmdvb2Q8L3hzbDp0ZXh0Pg0KKyAgICAgICAgPC94c2w6d2hlbj4NCisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJAY292ZXJhZ2UgPj0gNDAuMCI+DQorICAgICAgICAgIDx4c2w6dGV4dD5wb29yPC94c2w6dGV4dD4NCisgICAgICAgIDwveHNsOndoZW4+DQorICAgICAgICA8eHNsOndoZW4gdGVzdD0iQGNvdmVyYWdlID49IDIwLjAiPg0KKyAgICAgICAgICA8eHNsOnRleHQ+YmFkPC94c2w6dGV4dD4NCisgICAgICAgIDwveHNsOndoZW4+DQorICAgICAgICA8eHNsOm90aGVyd2lzZT4NCisgICAgICAgICAgPHhzbDp0ZXh0PnRlcnJpYmxlPC94c2w6dGV4dD4NCisgICAgICAgIDwveHNsOm90aGVyd2lzZT4NCisgICAgICA8L3hzbDpjaG9vc2U+DQorICAgIDwveHNsOnZhcmlhYmxlPg0KKyAgICANCisgICAgPHRkIGNsYXNzPSJ7JHF1YWxpdHl9Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGNvdmVyYWdlIi8+JSBvZiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGNvdW50Ii8+PC90ZD4NCisgIDwveHNsOnRlbXBsYXRlPg0KKw0KKzwveHNsOnN0eWxlc2hlZXQ+DQpkaWZmIC0tZ2l0IGEvY29tbW9uL2NvdmVyYWdlL2xjb3YubWFrIGIvY29tbW9uL2NvdmVyYWdlL2xjb3YubWFrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMWY2YjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vY292ZXJhZ2UvbGNvdi5tYWsKQEAgLTAsMCArMSw0MyBAQAorIyMgLlBIT05ZIHNvIGl0IGFsd2F5cyByZWJ1aWxkcyBpdAorLlBIT05ZOiBsY292LXJlc2V0IGxjb3YgbGNvdi1ydW4gbGNvdi1yZXBvcnQgbGNvdi11cGxvYWQKKworIyBydW4gbGNvdiBmcm9tIHNjcmF0Y2gsIGFsd2F5cworbGNvdi1yZXNldDoKKwkkKE1BS0UpIGxjb3YtcnVuCisJJChNQUtFKSBsY292LXJlcG9ydAorCisjIHJ1biBsY292IGZyb20gc2NyYXRjaCBpZiB0aGUgZGlyIGlzIG5vdCB0aGVyZQorbGNvdjoKKwkkKE1BS0UpIGxjb3YtcmVzZXQKKworaWYgR1NUX0dDT1ZfRU5BQkxFRAorIyByZXNldCBydW4gY292ZXJhZ2UgdGVzdHMKK2xjb3YtcnVuOgorCUAtcm0gLXJmIGxjb3YKKwlsY292IC0tZGlyZWN0b3J5IC4gLS16ZXJvY291bnRlcnMKKwktaWYgdGVzdCAtZCB0ZXN0cy9jaGVjazsgdGhlbiAkKE1BS0UpIC1DIHRlc3RzL2NoZWNrIGluc3BlY3Q7IGZpCisJLSQoTUFLRSkgY2hlY2sKKworIyBnZW5lcmF0ZSByZXBvcnQgYmFzZWQgb24gY3VycmVudCBjb3ZlcmFnZSBkYXRhCitsY292LXJlcG9ydDoKKwlta2RpciBsY292CisJbGNvdiAtLWNvbXBhdC1saWJ0b29sIC0tZGlyZWN0b3J5IC4gLS1jYXB0dXJlIC0tb3V0cHV0LWZpbGUgbGNvdi9sY292LmluZm8KKwlsY292IC0tbGlzdC1mdWxsLXBhdGggLWwgbGNvdi9sY292LmluZm8gfCBncmVwIC12ICJgY2QgJCh0b3Bfc3JjZGlyKSAmJiBwd2RgIiB8IGN1dCAtZFx8IC1mMSA+IGxjb3YvcmVtb3ZlCisJbGNvdiAtLWxpc3QtZnVsbC1wYXRoIC1sIGxjb3YvbGNvdi5pbmZvIHwgZ3JlcCAidGVzdHMvY2hlY2svIiB8IGN1dCAtZFx8IC1mMSA+PiBsY292L3JlbW92ZQorCWxjb3YgLS1saXN0LWZ1bGwtcGF0aCAtbCBsY292L2xjb3YuaW5mbyB8IGdyZXAgImRvY3MvcGx1Z2lucy8iIHwgY3V0IC1kXHwgLWYxID4+IGxjb3YvcmVtb3ZlCisJbGNvdiAtciBsY292L2xjb3YuaW5mbyBgY2F0IGxjb3YvcmVtb3ZlYCA+IGxjb3YvbGNvdi5jbGVhbmVkLmluZm8KKwlybSBsY292L3JlbW92ZQorCW12IGxjb3YvbGNvdi5jbGVhbmVkLmluZm8gbGNvdi9sY292LmluZm8KKwlnZW5odG1sIC10ICIkKFBBQ0tBR0VfU1RSSU5HKSIgLW8gbGNvdiAtLW51bS1zcGFjZXMgMiBsY292L2xjb3YuaW5mbworCitsY292LXVwbG9hZDogbGNvdgorCXJzeW5jIC1ydnogLWUgc3NoIC0tZGVsZXRlIGxjb3YvKiBnc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnOi9zcnYvZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy93d3cvZGF0YS9jb3ZlcmFnZS9sY292LyQoUEFDS0FHRSkKKworZWxzZQorbGNvdi1ydW46CisJZWNobyAiTmVlZCB0byByZWNvbmZpZ3VyZSB3aXRoIC0tZW5hYmxlLWdjb3YiCisKK2xjb3YtcmVwb3J0OgorCWVjaG8gIk5lZWQgdG8gcmVjb25maWd1cmUgd2l0aCAtLWVuYWJsZS1nY292IgorZW5kaWYKKwpkaWZmIC0tZ2l0IGEvY29tbW9uL2NydWZ0Lm1hayBiL2NvbW1vbi9jcnVmdC5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNlZWMyNAotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9jcnVmdC5tYWsKQEAgLTAsMCArMSw1NiBAQAorIyBjaGVja3MgZm9yIGxlZnQtb3ZlciBmaWxlcyBpbiB0aGUgKHVzdWFsbHkgdW5pbnN0YWxsZWQpIHRyZWUsIGllLiBmb3IKKyMgc3R1ZmYgdGhhdCBiZXN0IGJlIGRlbGV0ZWQgdG8gYXZvaWQgcHJvYmxlbXMgbGlrZSBoYXZpbmcgb2xkIHBsdWdpbiBiaW5hcmllcworIyBseWluZyBhcm91bmQuCisjCisjIHNldCBDUlVGVF9GSUxFUyBhbmQvb3IgQ1JVRlRfRElSUyBpbiB5b3VyIE1ha2VmaWxlLmFtIHdoZW4geW91IGluY2x1ZGUgdGhpcworCitjaGVjay1jcnVmdDoKKwlAY3J1ZnRfZmlsZXM9IiI7IGNydWZ0X2RpcnM9IiI7IFwKKwlmb3IgZiBpbiAkKENSVUZUX0ZJTEVTKTsgZG8gXAorCSAgaWYgdGVzdCAtZSAkJGY7IHRoZW4gXAorCSAgICBjcnVmdF9maWxlcz0iJCRjcnVmdF9maWxlcyAkJGYiOyBcCisJICBmaSBcCisJZG9uZTsgXAorCWZvciBkIGluICQoQ1JVRlRfRElSUyk7IGRvIFwKKwkgIGlmIHRlc3QgLWUgJCRkOyB0aGVuIFwKKwkgICAgY3J1ZnRfZGlycz0iJCRjcnVmdF9kaXJzICQkZCI7IFwKKwkgIGZpIFwKKwlkb25lOyBcCisJaWYgdGVzdCAieCQkY3J1ZnRfZmlsZXMkJGNydWZ0X2RpcnMiICE9IHg7IHRoZW4gXAorCSAgZWNobzsgXAorCSAgZWNobyAiKioqKiBDUlVGVCBBTEVSVCAqKioqKiI7IFwKKwkgIGVjaG87IFwKKwkgIGVjaG8gIlRoZSBmb2xsb3dpbmcgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIG1heSBub3QgYmUgbmVlZGVkIGFueSAiOyBcCisJICBlY2hvICJsb25nZXIgKHVzdWFsbHkgYmVjYXVzZSBhIHBsdWdpbiBoYXMgYmVlbiBtZXJnZWQgaW50byAgICAgIjsgXAorCSAgZWNobyAiYW5vdGhlciBwbHVnaW4sIG1vdmVkIHRvIGEgZGlmZmVyZW50IG1vZHVsZSwgb3IgYmVlbiAgICAgICI7IFwKKwkgIGVjaG8gInJlbmFtZWQpLCBhbmQgeW91IHByb2JhYmx5IHdhbnQgdG8gY2xlYW4gdGhlbSB1cCBpZiB5b3UgICAiOyBcCisJICBlY2hvICJkb24ndCBoYXZlIGxvY2FsIGNoYW5nZXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjsgXAorCSAgZWNobzsgXAorCSAgZm9yIGYgaW4gJCRjcnVmdF9maWxlczsgZG8gZWNobyAiZmlsZSAkJGYiOyBkb25lOyBcCisJICBlY2hvOyBcCisJICBmb3IgZCBpbiAkJGNydWZ0X2RpcnM7IGRvIGVjaG8gImRpcmVjdG9yeSAkJGQiOyBkb25lOyBcCisJICBlY2hvOyBcCisJICBlY2hvICInbWFrZSBjbGVhbi1jcnVmdCcgd2lsbCByZW1vdmUgdGhlc2UgZm9yIHlvdS4iOyBcCisJICBlY2hvOyBcCisJZmkKKworY2xlYW4tY3J1ZnQtZGlyczoKKwlAZm9yIGQgaW4gJChDUlVGVF9ESVJTKTsgZG8gXAorCSAgaWYgdGVzdCAtZSAkJGQ7IHRoZW4gXAorCSAgICBybSAtciAiJCRkIiAmJiBlY2hvICJSZW1vdmVkIGRpcmVjdG9yeSAkJGQiOyBcCisJICBmaSBcCisJZG9uZQorCitjbGVhbi1jcnVmdC1maWxlczoKKwlAZm9yIGYgaW4gJChDUlVGVF9GSUxFUyk7IGRvIFwKKwkgIGlmIHRlc3QgLWUgJCRmOyB0aGVuIFwKKwkgICAgcm0gIiQkZiIgJiYgZWNobyAiUmVtb3ZlZCBmaWxlICQkZiI7IFwKKwkgIGZpIFwKKwlkb25lCisKK2NsZWFuLWNydWZ0OiBjbGVhbi1jcnVmdC1kaXJzIGNsZWFuLWNydWZ0LWZpbGVzCisKKyMgYWxzbyBtaWdodCB3YW50IHRvIGFkZCB0aGlzIHRvIHlvdXIgTWFrZWZpbGUuYW06CisjCisjIGFsbC1sb2NhbDogY2hlY2stY3J1ZnQKKwpkaWZmIC0tZ2l0IGEvY29tbW9uL2Rvd25sb2FkLXRyYW5zbGF0aW9ucyBiL2NvbW1vbi9kb3dubG9hZC10cmFuc2xhdGlvbnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWVmMWQzMQotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9kb3dubG9hZC10cmFuc2xhdGlvbnMKQEAgLTAsMCArMSwxNTIgQEAKKyMhL2Jpbi9zaAorIyBTaGVsbCBzY3JpcHQgdG8gZG93bmxvYWQgdGhlIGxhdGVzdCB0cmFuc2xhdGlvbnMgZm9yIGEgZ2l2ZW4gR1N0cmVhbWVyCisjIHBhY2thZ2UgZnJvbSB0cmFuc2xhdGlvbnByb2plY3Qub3JnCisKKworIyBET01BSU5TIGJhc2VkIG9uIGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL2V4dHJhL21hdHJpeC5odG1sCisjIFdlIG5lZWQgdG8gY2hlY2sgYWxsIGRvbWFpbnMsIG5vdCBvbmx5IHBvL0xJTkdVQVMsIHNpbmNlIHRoZXJlIG1pZ2h0IGJlCisjIG5ldyB0cmFuc2xhdGlvbnMKK0RPTUFJTlM9XAorImFmIGFtIGFyIGF6IGJlIGJnIHB0X0JSIGJzIGNhIHpoX0NOIGNzIGN5IGRhIGRlIGVsIGVvIGVzIGV0IGV1IGZhIGZpIGZyICJcCisiZ2EgZW5fR0IgZ2wgZ3UgaGUgaGkgemhfSEsgaHIgaHUgaWQgaXMgaXQgamEga28ga3Uga3kgbGcgbHQgbHYgbWsgbW4gbXMgIlwKKyJtdCBuYiBuZSBubCBubiBvciBwYSBwbCBwdCBybSBybyBydSBydyBzayBzbCBzcSBzciBzdiB0YSB0cSB0aCB0ayAiXAorInRyIHpoX1RXIHVrIHZlbiB2aSB3YSB4aCB6dSIKKworIyBmb3IgdGVzdGluZy9kZWJ1Z2dpbmc6CisjRE9NQUlOUz0iZXMgZnIgaHUgc3YgcGwgeHgiCisKKyMgY2hlY2sgZm9yICdkaWZmJyBwcm9ncmFtCitkaWZmIC0tdmVyc2lvbiAyPi9kZXYvbnVsbCA+L2Rldi9udWxsCitpZiBbICEgJD8gXTsgdGhlbgorICBlY2hvICI9PT09IFlvdSBtdXN0IGhhdmUgdGhlICdkaWZmJyBwcm9ncmFtIGluc3RhbGxlZCBmb3IgdGhpcyBzY3JpcHQgPT09PSIKKyAgZXhpdCAxCitmaQorCisjIGNoZWNrIGZvciAnd2dldCcgcHJvZ3JhbQord2dldCAtLXZlcnNpb24gMj4vZGV2L251bGwgPi9kZXYvbnVsbAoraWYgWyAhICQ/IF07IHRoZW4KKyAgZWNobyAiPT09PSBZb3UgbXVzdCBoYXZlIHRoZSAnd2dldCcgcHJvZ3JhbSBpbnN0YWxsZWQgZm9yIHRoaXMgc2NyaXB0ID09PT0iCisgIGV4aXQgMQorZmkKKworIyBtYWtlIHN1cmUgd2UncmUgaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkKK2lmIFsgISAtZCAuL3BvIF07IHRoZW4KKyAgZWNobyAiPT09PSBObyAuL3BvIGRpcmVjdG9yeSBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSA9PT09IgorICBleGl0IDEKK2ZpCisKKyMgbWFrZSBzdXJlIGEgcGFja2FnZSBhcmd1bWVudCB3YXMgcGFzc2VkIHRvIHVzCitpZiBbIC16ICIkMSIgXTsgdGhlbgorICBlY2hvICJVc2FnZTogJDAgUEFDS0FHRSwgZS5nLiAkMCBnc3QtcGx1Z2lucy1nb29kIgorICBleGl0IDEKK2ZpCisKK2lmIHRlc3QgIiQxIiAhPSAiZ3N0cmVhbWVyIiAtYSBcCisgICAgICAgICIkMSIgIT0gImdzdC1wbHVnaW5zLWJhc2UiIC1hIFwKKyAgICAgICAgIiQxIiAhPSAiZ3N0LXBsdWdpbnMtZ29vZCIgLWEgXAorICAgICAgICAiJDEiICE9ICJnc3QtcGx1Z2lucy11Z2x5IiAtYSBcCisgICAgICAgICIkMSIgIT0gImdzdC1wbHVnaW5zLWJhZCI7IHRoZW4KKyAgZWNobyAiVW5leHBlY3RlZCBwYWNrYWdlICckMScgPyEiCisgIGV4aXQgMQorZmkKKworUEFDS0FHRT0iJDEiCisKK0RPTUFJTlNfVE9fQUREPSIiCitET01BSU5TX1VQREFURUQ9IiIKK0RPTUFJTlNfTk9UX0lOX0xJTkdVQVM9IiIKKworZWNobyAiRG93bmxvYWRpbmcgbGF0ZXN0IHRyYW5zbGF0aW9uIGZpbGVzIGZvciBwYWNrYWdlICRQQUNLQUdFIC4uLiIKK2VjaG8KKworZm9yIGQgaW4gJERPTUFJTlMKK2RvCisgIFBBQ0tBR0VfUE9fVVJMX0JBU0U9Imh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL2xhdGVzdC8kUEFDS0FHRSIKKyAgUE9fVVJMPSIkUEFDS0FHRV9QT19VUkxfQkFTRS8kZC5wbyIKKyAgUE9fRklMRU5BTUU9IiRQQUNLQUdFLiRkLnBvIgorICBpZiB3Z2V0IC1xIC1uYyAtTyAkUE9fRklMRU5BTUUgJFBPX1VSTDsgdGhlbgorICAgICMgd2Ugd2FudCBhbGwgLnBvIGZpbGVzIGluIFVURi04IGZvcm1hdCByZWFsbHksIHNvIGNvbnZlcnQgaWYgbmVlZGVkLi4KKyAgICBDSEFSU0VUPWBncmVwIENvbnRlbnQtVHlwZSAkUE9fRklMRU5BTUUgfCBzZWQgLWUgJ3MvLipjaGFyc2V0PVwoLipcKVxcXFxuLiovXDEvJ2AKKyAgICBpZiB0ZXN0ICJ4JENIQVJTRVQiICE9ICJ4VVRGLTgiIC1hICJ4JENIQVJTRVQiICE9ICJ4dXRmLTgiOyB0aGVuCisgICAgICAjIG5vdGU6IHRoaW5ncyBsaWtlIHRoZSBidWdzIGFkZHJlc3Mgd2lsbCBiZSBhZGRlZCBiYWNrIGJ5IG1ha2UgdXBkYXRlLXBvCisgICAgICBpZiBtc2d1bmlxICRQT19GSUxFTkFNRSAtLW5vLWxvY2F0aW9uIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tb3V0cHV0LWZpbGU9JFBPX0ZJTEVOQU1FLnV0ZjggXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS10by1jb2RlPVVURi04OyB0aGVuCisgICAgICAgIG12ICRQT19GSUxFTkFNRS51dGY4ICRQT19GSUxFTkFNRQorICAgICAgZWxzZQorICAgICAgICBlY2hvICIqKioqICRkOiBjb252ZXJzaW9uIGZyb20gJENIQVJTRVQgdG8gVVRGLTggZmFpbGVkICoqKioiCisgICAgICBmaQorICAgIGZpCisgICAgaWYgWyAtZiAicG8vJGQucG8iIF07IHRoZW4KKyAgICAgICMgLi9wby9mb28ucG8gZXhpc3RzLCBzbyBsZXQncyBjaGVjayBpZiBvdXJzIG1hdGNoZXMgdGhlIGxhdGVzdCBmcm9tIHRoZQorICAgICAgIyB0cmFuc2xhdGlvbiBwcm9qZWN0IHdlYnNpdGUKKyAgICAgIFJFVkRBVEVfTkVXPWBncmVwIFBPLVJldmlzaW9uLURhdGUgJFBPX0ZJTEVOQU1FYDsKKyAgICAgIFJFVkRBVEVfT0xEPWBncmVwIFBPLVJldmlzaW9uLURhdGUgcG8vJGQucG9gOworICAgICAgQ0hBUlNFVF9PTEQ9YGdyZXAgQ29udGVudC1UeXBlIHBvLyRkLnBvIHwgc2VkIC1lICdzLy4qY2hhcnNldD1cKC4qXClcXFxcbi4qL1wxLydgCisgICAgICBpZiB0ZXN0ICJ4JFJFVkRBVEVfTkVXIiA9ICJ4JFJFVkRBVEVfT0xEIiAtYSAieCRDSEFSU0VUX09MRCIgPSAieFVURi04IjsgdGhlbgorICAgICAgICAjIG5vdGU6IHNvdXJjZSBjb2RlIGxpbmUgbWFya2VycyB3aWxsIGJlIHJlbW92ZWQgbGF0ZXIgYnkgbWFrZSB1cGxvYWQtcG8KKyAgICAgICAgZWNobyAiJGQucG86IHVwLXRvLWRhdGUiCisgICAgICAgIHJtIC1mICRQT19GSUxFTkFNRQorICAgICAgZWxzZQorICAgICAgICBtdiAkUE9fRklMRU5BTUUgInBvLyRkLnBvIgorICAgICAgICBpZiB0ZXN0ICJ4JENIQVJTRVRfT0xEIiAhPSAieFVURi04IiAtYSAieCRDSEFSU0VUX09MRCIgIT0gInh1dGYtOCI7IHRoZW4KKyAgICAgICAgICBlY2hvICIkZC5wbzogdXBkYXRlIChhbmQgY2hhcnNldCBjb252ZXJ0ZWQgZnJvbSAkQ0hBUlNFVF9PTEQgdG8gVVRGLTgpIgorICAgICAgICBlbHNlCisgICAgICAgICAgZWNobyAiJGQucG86IHVwZGF0ZWQiCisgICAgICAgIGZpCisgICAgICAgIERPTUFJTlNfVVBEQVRFRD0iJERPTUFJTlNfVVBEQVRFRCAkZCIKKyAgICAgIGZpCisgICAgICAjIG1ha2Ugc3VyZSBkb21haW4gaXMgbGlzdGVkIGluIExJTkdVQVMKKyAgICAgIGlmICEgZ3JlcCAkZCAicG8vTElOR1VBUyIgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBET01BSU5TX05PVF9JTl9MSU5HVUFTPSIkRE9NQUlOU19OT1RfSU5fTElOR1VBUyAkZCIKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgIyAuL3BvL2Zvby5wbyBkb2Vzbid0IGV4aXN0LCBidXQgZm9vLnBvIGV4aXN0cyBvbiB0aGUgdHJhbnNsYXRpb24gcHJvamVjdAorICAgICAgIyB3ZWJzaXRlLCBzbyBpdCdzIHByb2JhYmx5IGEgbmV3IHRyYW5zbGF0aW9uCisgICAgICBlY2hvICIkZC5wbzogbmV3IGxhbmd1YWdlIgorICAgICAgbXYgJFBPX0ZJTEVOQU1FICJwby8kZC5wbyIKKyAgICAgIERPTUFJTlNfVVBEQVRFRD0iJERPTUFJTlNfVVBEQVRFRCAkZCIKKyAgICAgIERPTUFJTlNfVE9fQUREPSIkRE9NQUlOU19UT19BREQgJGQiCisgICAgZmkKKyAgZWxzZQorICAgIHJtIC1mICRQT19GSUxFTkFNRQorICAgIGVjaG8gIiRkLnBvOiBmYWlsdXJlIChkb2VzIHByb2JhYmx5IG5vdCBleGlzdCkiCisgIGZpCitkb25lCisKK2lmIFsgLW4gIiRET01BSU5TX1VQREFURUQiIF07IHRoZW4KKyAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCisgIGVjaG8KKyAgZWNobyAiTGFuZ3VhZ2UgZG9tYWlucyB1cGRhdGVkICAgIDokRE9NQUlOU19VUERBVEVEIgorICBlY2hvICJMYW5ndWFnZSBkb21haW5zIHRvIGdpdCBhZGQgOiRET01BSU5TX1RPX0FERCIKKyAgZWNobworICBlY2hvICJTb3VyY2U6IGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL2xhdGVzdC8kUEFDS0FHRS8iCisgIGVjaG8KKyAgaWYgWyAtbiAiJERPTUFJTlNfVE9fQUREIiBdOyB0aGVuCisgICAgQ01EX1NUUklORz0iZ2l0IGFkZCIKKyAgICBmb3IgZCBpbiAkRE9NQUlOU19UT19BREQ7IGRvCisgICAgICBDTURfU1RSSU5HPSIkQ01EX1NUUklORyBwby8kZC5wbyIKKyAgICBkb25lCisgICAgZWNobyAiUGxlYXNlIHJ1biIKKyAgICBlY2hvCisgICAgZWNobyAiICAkQ01EX1NUUklORyIKKyAgICBlY2hvCisgICAgZWNobyAibm93IGFuZCBhZGQgdGhlIGZvbGxvd2luZyBkb21haW5zIHRvIHRoZSBwby9MSU5HVUFTIGZpbGU6IgorICAgIGVjaG8KKyAgICBlY2hvICIgICRET01BSU5TX1RPX0FERCIKKyAgICBlY2hvCisgICAgZWNobworICBmaQorICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKK2ZpCisKK2lmIFsgLW4gIiRET01BSU5TX05PVF9JTl9MSU5HVUFTIiBdOyB0aGVuCisgIGVjaG8KKyAgZWNobyAiRXhpc3RpbmcgZG9tYWlucyBtaXNzaW5nIGZyb20gdGhlIHBvL0xJTkdVQVMgZmlsZToiCisgIGVjaG8KKyAgZWNobyAiICAkRE9NQUlOU19OT1RfSU5fTElOR1VBUyIKKyAgZWNobworICBlY2hvCitmaQorCisKZGlmZiAtLWdpdCBhL2NvbW1vbi9leHRyYWN0LXJlbGVhc2UtZGF0ZS1mcm9tLWRvYXAtZmlsZSBiL2NvbW1vbi9leHRyYWN0LXJlbGVhc2UtZGF0ZS1mcm9tLWRvYXAtZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMmJjNDE4Ci0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uL2V4dHJhY3QtcmVsZWFzZS1kYXRlLWZyb20tZG9hcC1maWxlCkBAIC0wLDAgKzEsMzIgQEAKKyMhL2Jpbi9zaAorIyBTaGVsbCBzY3JpcHQgdG8gZXh0cmFjdCB0aGUgZGF0ZSBnaXZlbiBhIHJlbGVhc2UgdmVyc2lvbiBhbmQgYSAuZG9hcCBmaWxlCisKK2lmIHRlc3QgIngkMSIgPSAieCIgLW8gIngkMiIgPSAieCIgLW8gISAtcyAiJDIiOyB0aGVuCisgIGVjaG8gIlVzYWdlOiAkMCBSRUxFQVNFLVZFUlNJT04tTlVNQkVSIERPQVAtRklMRSIgPiYyOworICBleGl0IDEKK2ZpCisKK2lmICEgZ3JlcCAnPFByb2plY3QnICIkMiIgPi9kZXYvbnVsbCA7IHRoZW4KKyAgZWNobyAiJDIgZG9lcyBub3QgbG9vayBsaWthIGEgLmRvYXAgZmlsZSIgPiYyOworICBleGl0IDEKK2ZpCisKK2lmICEgZ3JlcCAiJDEiICIkMiIgPi9kZXYvbnVsbCA7IHRoZW4KKyAgZWNobyAiJDIgY29udGFpbnMgbm8gcmVmZXJlbmNlIHRvIGEgdmVyc2lvbiAkMSIgPiYyOworICBleGl0IDEKK2ZpCisKK2F3ayAnQkVHSU4ge3g9MH0KK3sKK2lmICgkMH4iPHJlbGVhc2U+Iikge3g9MTsgY2h1bms9IiJ9CitpZiAoeD09MSkgeworICBpZiAoJDB+IjxyZXZpc2lvbj4iKSB7IGNodW5rID0gY2h1bmsgJDAgfQorICBpZiAoJDB+IjxjcmVhdGVkPiIpIHsgY2h1bmsgPSBjaHVuayAkMCB9Cit9CitpZiAoJDB+IjwvcmVsZWFzZT4iKSB7eD0wOyBwcmludCBjaHVua30KK30nIDwgIiQyIiB8IFwKK1wKK2dyZXAgJzxyZXZpc2lvbj4nIiQxIic8L3JldmlzaW9uPicgfCBcCitcCitzZWQgLWUgJ3MvXi4qPGNyZWF0ZWQ+Ly8nIC1lICdzLzxcL2NyZWF0ZWQ+LiokLy8nCisKZGlmZiAtLWdpdCBhL2NvbW1vbi9nZXR0ZXh0LnBhdGNoIGIvY29tbW9uL2dldHRleHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgyYjkwNQotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9nZXR0ZXh0LnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKKy0tLSBwby9NYWtlZmlsZS5pbi5pbi5vcmlnCTIwMDYtMDEtMDcgMTI6MDM6NDUuMDAwMDAwMDAwICswMTAwCisrKysgcG8vTWFrZWZpbGUuaW4uaW4JMjAwNi0wMS0wNyAxMjowNDoyMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMSw2ICsxMSw5IEBACisgUEFDS0FHRSA9IEBQQUNLQUdFQAorIFZFUlNJT04gPSBAVkVSU0lPTkAKKyAKKysjIHRob21hczogYWRkIEdFVFRFWFRfUEFDS0FHRSBzdWJzdGl0dXRpb24gYXMgdXNlZCBpbiBNYWtldmFycworK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACisrCisgU0hFTEwgPSAvYmluL3NoCisgQFNFVF9NQUtFQAorIApkaWZmIC0tZ2l0IGEvY29tbW9uL2dsaWItZ2VuLm1hayBiL2NvbW1vbi9nbGliLWdlbi5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY5M2E1ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9nbGliLWdlbi5tYWsKQEAgLTAsMCArMSw0NCBAQAorIyB0aGVzZSBhcmUgdGhlIHZhcmlhYmxlcyB5b3VyIE1ha2VmaWxlLmFtIHNob3VsZCBzZXQKKyMgdGhlIGV4YW1wbGUgaXMgYmFzZWQgb24gdGhlIGNvbG9yYmFsYW5jZSBpbnRlcmZhY2UKKworI2dsaWJfZW51bV9oZWFkZXJzPSQoY29sb3JiYWxhbmNlX2hlYWRlcnMpCisjZ2xpYl9lbnVtX2RlZmluZT1HU1RfQ09MT1JfQkFMQU5DRQorI2dsaWJfZW51bV9wcmVmaXg9Z3N0X2NvbG9yX2JhbGFuY2UKKworZW51bV9oZWFkZXJzPSQoZm9yZWFjaCBoLCQoZ2xpYl9lbnVtX2hlYWRlcnMpLFxuXCNpbmNsdWRlIFwiJChoKVwiKQorCisjIHRoZXNlIGFyZSBhbGwgdGhlIHJ1bGVzIGdlbmVyYXRpbmcgdGhlIHJlbGV2YW50IGZpbGVzCislLW1hcnNoYWwuaDogJS1tYXJzaGFsLmxpc3QKKwkkKEFNX1ZfR0VOKWdsaWItZ2VubWFyc2hhbCAtLWhlYWRlciAtLXByZWZpeD0kKGdsaWJfZW51bV9wcmVmaXgpX21hcnNoYWwgJF4gPiAkKi1tYXJzaGFsLmgudG1wICYmIFwKKwltdiAkKi1tYXJzaGFsLmgudG1wICQqLW1hcnNoYWwuaAorCislLW1hcnNoYWwuYzogJS1tYXJzaGFsLmxpc3QKKwkkKEFNX1ZfR0VOKWVjaG8gIiNpbmNsdWRlIFwiJCotbWFyc2hhbC5oXCIiID4+ICQqLW1hcnNoYWwuYy50bXAgJiYgXAorCWdsaWItZ2VubWFyc2hhbCAtLWJvZHkgLS1wcmVmaXg9JChnbGliX2VudW1fcHJlZml4KV9tYXJzaGFsICReID4+ICQqLW1hcnNoYWwuYy50bXAgJiYgXAorCW12ICQqLW1hcnNoYWwuYy50bXAgJCotbWFyc2hhbC5jCisKKyUtZW51bXR5cGVzLmg6ICQoZ2xpYl9lbnVtX2hlYWRlcnMpCisJJChBTV9WX0dFTilnbGliLW1rZW51bXMgXAorCS0tZmhlYWQgIiNpZm5kZWYgX18kKGdsaWJfZW51bV9kZWZpbmUpX0VOVU1fVFlQRVNfSF9fXG4jZGVmaW5lIF9fJChnbGliX2VudW1fZGVmaW5lKV9FTlVNX1RZUEVTX0hfX1xuXG4jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD5cblxuR19CRUdJTl9ERUNMU1xuIiBcCisJLS1mcHJvZCAiXG4vKiBlbnVtZXJhdGlvbnMgZnJvbSBcIkBmaWxlbmFtZUBcIiAqL1xuIiBcCisJLS12aGVhZCAiR1R5cGUgQGVudW1fbmFtZUBfZ2V0X3R5cGUgKHZvaWQpO1xuI2RlZmluZSBHU1RfVFlQRV9ARU5VTVNIT1JUQCAoQGVudW1fbmFtZUBfZ2V0X3R5cGUoKSlcbiIgICAgICAgICBcCisJLS1mdGFpbCAiR19FTkRfREVDTFNcblxuI2VuZGlmIC8qIF9fJChnbGliX2VudW1fZGVmaW5lKV9FTlVNX1RZUEVTX0hfXyAqLyIgXAorCSReID4gJEAKKworJS1lbnVtdHlwZXMuYzogJChnbGliX2VudW1faGVhZGVycykKKwlAaWYgdGVzdCAieCQoZ2xpYl9lbnVtX2hlYWRlcnMpIiA9ICJ4IjsgdGhlbiBlY2hvICJFUlJPUjogZ2xpYl9lbnVtX2hlYWRlcnMgaXMgZW1wdHksIHBsZWFzZSBmaXggTWFrZWZpbGUiOyBleGl0IDE7IGZpCisJJChBTV9WX0dFTilnbGliLW1rZW51bXMgXAorCS0tZmhlYWQgIiNpbmNsdWRlIFwiJCotZW51bXR5cGVzLmhcIlxuJChlbnVtX2hlYWRlcnMpIiBcCisJLS1mcHJvZCAiXG4vKiBlbnVtZXJhdGlvbnMgZnJvbSBcIkBmaWxlbmFtZUBcIiAqLyIgXAorCS0tdmhlYWQgIkdUeXBlXG5AZW51bV9uYW1lQF9nZXRfdHlwZSAodm9pZClcbntcbiAgc3RhdGljIHZvbGF0aWxlIGdzaXplIGdfZGVmaW5lX3R5cGVfaWRfX3ZvbGF0aWxlID0gMDtcbiAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmZ19kZWZpbmVfdHlwZV9pZF9fdm9sYXRpbGUpKSB7XG4gICAgc3RhdGljIGNvbnN0IEdAVHlwZUBWYWx1ZSB2YWx1ZXNbXSA9IHsiICAgICBcCisJLS12cHJvZCAiICAgICAgeyBAVkFMVUVOQU1FQCwgXCJAVkFMVUVOQU1FQFwiLCBcIkB2YWx1ZW5pY2tAXCIgfSwiIFwKKwktLXZ0YWlsICIgICAgICB7IDAsIE5VTEwsIE5VTEwgfVxuICAgIH07XG4gICAgR1R5cGUgZ19kZWZpbmVfdHlwZV9pZCA9IGdfQHR5cGVAX3JlZ2lzdGVyX3N0YXRpYyAoXCJARW51bU5hbWVAXCIsIHZhbHVlcyk7XG4gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZnX2RlZmluZV90eXBlX2lkX192b2xhdGlsZSwgZ19kZWZpbmVfdHlwZV9pZCk7XG4gIH1cbiAgcmV0dXJuIGdfZGVmaW5lX3R5cGVfaWRfX3ZvbGF0aWxlO1xufVxuIiBcCisJJF4gPiAkQAorCisjIGEgaGFjayBydWxlIHRvIG1ha2Ugc3VyZSAuUGxvIGZpbGVzIGV4aXN0IGJlY2F1c2UgdGhleSBnZXQgaW5jbHVkZSdkCisjIGZyb20gTWFrZWZpbGUncworLmRlcHMvJS1tYXJzaGFsLlBsbzoKKwlAdG91Y2ggJEAKKworLmRlcHMvJS1lbnVtdHlwZXMuUGxvOgorCUB0b3VjaCAkQApkaWZmIC0tZ2l0IGEvY29tbW9uL2dzdC1hdXRvZ2VuLnNoIGIvY29tbW9uL2dzdC1hdXRvZ2VuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNWUwMjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vZ3N0LWF1dG9nZW4uc2gKQEAgLTAsMCArMSwzNzYgQEAKKyMgYSBzaWxseSBoYWNrIHRoYXQgZ2VuZXJhdGVzIGF1dG9yZWdlbi5zaCBidXQgaXQncyBoYW5keQorIyBSZW1vdmUgdGhlIG9sZCBhdXRvcmVnZW4uc2ggZmlyc3QgdG8gY3JlYXRlIGEgbmV3IGZpbGUsCisjIGFzIHRoZSBjdXJyZW50IG9uZSBtYXkgYmUgYmVpbmcgcmVhZCBieSB0aGUgc2hlbGwgZXhlY3V0aW5nCisjIHRoaXMgc2NyaXB0LgoraWYgWyAtZiAiYXV0b3JlZ2VuLnNoIiBdOyB0aGVuCisgIHJtIGF1dG9yZWdlbi5zaAorZmkKK2VjaG8gIiMhL2Jpbi9zaCIgPiBhdXRvcmVnZW4uc2gKK2VjaG8gIi4vYXV0b2dlbi5zaCAkQCBcJEAiID4+IGF1dG9yZWdlbi5zaAorY2htb2QgK3ggYXV0b3JlZ2VuLnNoCisKKyMgaGVscGVyIGZ1bmN0aW9ucyBmb3IgYXV0b2dlbi5zaAorCitkZWJ1ZyAoKQorIyBwcmludCBvdXQgYSBkZWJ1ZyBtZXNzYWdlIGlmIERFQlVHIGlzIGEgZGVmaW5lZCB2YXJpYWJsZQoreworICBpZiB0ZXN0ICEgLXogIiRERUJVRyIKKyAgdGhlbgorICAgIGVjaG8gIkRFQlVHOiAkMSIKKyAgZmkKK30KKwordmVyc2lvbl9nZXQgKCkKKyMgYmFzZWQgb24gdGhlIGNvbW1hbmQncyB2ZXJzaW9uIG91dHB1dCwgc2V0IHZhcmlhYmxlcworIyBfTUFKT1IsIF9NSU5PUiwgX01JQ1JPLCBfVkVSU0lPTiwgdXNpbmcgdGhlIGdpdmVuIHByZWZpeCBhcyB2YXJpYWJsZSBwcmVmaXgKKyMKKyMgYXJnIDE6IGNvbW1hbmQgYmluYXJ5IG5hbWUKKyMgYXJnIDI6ICh1cHBlcmNhc2VkKSB2YXJpYWJsZSBuYW1lIHByZWZpeAoreworICBDT01NQU5EPSQxCisgIFZBUlBSRUZJWD1gZWNobyAkMiB8IHRyIC4sLSBfYAorCisgICMgc3RyaXAgZXZlcnl0aGluZyB0aGF0J3Mgbm90IGEgZGlnaXQsIHRoZW4gdXNlIGN1dCB0byBnZXQgdGhlIGZpcnN0IGZpZWxkCisgIHBrZ192ZXJzaW9uPWAkQ09NTUFORCAtLXZlcnNpb258aGVhZCAtbiAxfHNlZCAncy9eLiopW14wLTldKi8vJ3xjdXQgLWQnICcgLWYxYAorICBkZWJ1ZyAicGtnX3ZlcnNpb24gJHBrZ192ZXJzaW9uIgorICAjIHJlbW92ZSBhbnkgbm9uLWRpZ2l0IGNoYXJhY3RlcnMgZnJvbSB0aGUgdmVyc2lvbiBudW1iZXJzIHRvIHBlcm1pdCBudW1lcmljCisgICMgY29tcGFyaXNvbgorICBwa2dfbWFqb3I9YGVjaG8gJHBrZ192ZXJzaW9uIHwgY3V0IC1kLiAtZjEgfCBzZWQgcy9bYS16QS1aXC1dLiovL2dgCisgIHBrZ19taW5vcj1gZWNobyAkcGtnX3ZlcnNpb24gfCBjdXQgLWQuIC1mMiB8IHNlZCBzL1thLXpBLVpcLV0uKi8vZ2AKKyAgcGtnX21pY3JvPWBlY2hvICRwa2dfdmVyc2lvbiB8IGN1dCAtZC4gLWYzIHwgc2VkIHMvW2EtekEtWlwtXS4qLy9nYAorICB0ZXN0IC16ICIkcGtnX21ham9yIiAmJiBwa2dfbWFqb3I9MAorICB0ZXN0IC16ICIkcGtnX21pbm9yIiAmJiBwa2dfbWlub3I9MAorICB0ZXN0IC16ICIkcGtnX21pY3JvIiAmJiBwa2dfbWljcm89MAorICBkZWJ1ZyAiZm91bmQgbWFqb3IgJHBrZ19tYWpvciBtaW5vciAkcGtnX21pbm9yIG1pY3JvICRwa2dfbWljcm8iCisgIGV2YWwgJHtWQVJQUkVGSVh9X01BSk9SPSRwa2dfbWFqb3IKKyAgZXZhbCAke1ZBUlBSRUZJWH1fTUlOT1I9JHBrZ19taW5vcgorICBldmFsICR7VkFSUFJFRklYfV9NSUNSTz0kcGtnX21pY3JvCisgIGV2YWwgJHtWQVJQUkVGSVh9X1ZFUlNJT049JHBrZ192ZXJzaW9uCit9CisKK3ZlcnNpb25fY29tcGFyZSAoKQorIyBDaGVja3Mgd2hldGhlciB0aGUgdmVyc2lvbiBvZiBWQVJQUkVGSVggaXMgZXF1YWwgdG8gb3IKKyMgbmV3ZXIgdGhhbiB0aGUgcmVxdWVzdGVkIHZlcnNpb24KKyMgYXJnMTogVkFSUFJFRklYCisjIGFyZzI6IE1BSk9SCisjIGFyZzM6IE1JTk9SCisjIGFyZzQ6IE1JQ1JPCit7CisgIFZBUlBSRUZJWD1gZWNobyAkMSB8IHRyIC4sLSBfYAorICBNQUpPUj0kMgorICBNSU5PUj0kMworICBNSUNSTz0kNAorCisgIGV2YWwgcGtnX21ham9yPVwkJHtWQVJQUkVGSVh9X01BSk9SOworICBldmFsIHBrZ19taW5vcj1cJCR7VkFSUFJFRklYfV9NSU5PUjsKKyAgZXZhbCBwa2dfbWljcm89XCQke1ZBUlBSRUZJWH1fTUlDUk87CisKKyAgI3N0YXJ0IGNoZWNraW5nIHRoZSB2ZXJzaW9uCisgIGRlYnVnICJ2ZXJzaW9uX2NvbXBhcmU6ICRWQVJQUkVGSVggYWdhaW5zdCAkTUFKT1IuJE1JTk9SLiRNSUNSTyIKKworICAgICMgcmVzZXQgY2hlY2sKKyAgICBXUk9ORz0KKworICAgIGlmIFsgISAiJHBrZ19tYWpvciIgLWd0ICIkTUFKT1IiIF07IHRoZW4KKyAgICAgIGRlYnVnICJtYWpvcjogJHBrZ19tYWpvciA8PSAkTUFKT1IiCisgICAgICBpZiBbICIkcGtnX21ham9yIiAtbHQgIiRNQUpPUiIgXTsgdGhlbgorICAgICAgICBkZWJ1ZyAibWFqb3I6ICRwa2dfbWFqb3IgPCAkTUFKT1IiCisgICAgICAgIFdST05HPTEKKyAgICAgIGVsaWYgWyAhICIkcGtnX21pbm9yIiAtZ3QgIiRNSU5PUiIgXTsgdGhlbgorICAgICAgICBkZWJ1ZyAibWlub3I6ICRwa2dfbWlub3IgPD0gJE1JTk9SIgorICAgICAgICBpZiBbICIkcGtnX21pbm9yIiAtbHQgIiRNSU5PUiIgXTsgdGhlbgorICAgICAgICAgIGRlYnVnICJtaW5vcjogJHBrZ19taW5vciA8ICRNSU5PUiIKKyAgICAgICAgICBXUk9ORz0xCisgICAgICAgIGVsaWYgWyAiJHBrZ19taWNybyIgLWx0ICIkTUlDUk8iIF07IHRoZW4KKyAgICAgICAgICBkZWJ1ZyAibWljcm86ICRwa2dfbWljcm8gPCAkTUlDUk8iCisJICBXUk9ORz0xCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGZpCisgICAgaWYgdGVzdCAhIC16ICIkV1JPTkciOyB0aGVuCisgICAgICBkZWJ1ZyAidmVyc2lvbl9jb21wYXJlOiAkVkFSUFJFRklYIG9sZGVyIHRoYW4gJE1BSk9SLiRNSU5PUi4kTUlDUk8iCisgICAgICByZXR1cm4gMQorICAgIGZpCisgICAgZGVidWcgInZlcnNpb25fY29tcGFyZTogJFZBUlBSRUZJWCBlcXVhbCB0by9uZXdlciB0aGFuICRNQUpPUi4kTUlOT1IuJE1JQ1JPIgorICAgIHJldHVybiAwCit9CisKKwordmVyc2lvbl9jaGVjayAoKQorIyBjaGVjayB0aGUgdmVyc2lvbiBvZiBhIHBhY2thZ2UKKyMgZmlyc3QgYXJndW1lbnQgOiBwYWNrYWdlIG5hbWUgKGV4ZWN1dGFibGUpCisjIHNlY29uZCBhcmd1bWVudCA6IG9wdGlvbmFsIHBhdGggd2hlcmUgdG8gbG9vayBmb3IgaXQgaW5zdGVhZAorIyB0aGlyZCBhcmd1bWVudCA6IHNvdXJjZSBkb3dubG9hZCB1cmwKKyMgcmVzdCBvZiBhcmd1bWVudHMgOiBtYWpvciwgbWlub3IsIG1pY3JvIHZlcnNpb24KKyMgYWxsIGNvbnNlY3V0aXZlIG9uZXMgOiBzdWdnZXN0aW9ucyBmb3IgYmluYXJpZXMgdG8gdXNlCisjIChpZiBub3Qgc3BlY2lmaWVkIGluIHNlY29uZCBhcmd1bWVudCkKK3sKKyAgUEFDS0FHRT0kMQorICBQS0dfUEFUSD0kMgorICBVUkw9JDMKKyAgTUFKT1I9JDQKKyAgTUlOT1I9JDUKKyAgTUlDUk89JDYKKworICAjIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgd2UgbGV0IFBLR19QQVRIPVBBQ0tBR0Ugd2hlbiBQS0dfUEFUSCBudWxsCisgIGlmIHRlc3QgLXogIiRQS0dfUEFUSCI7IHRoZW4gUEtHX1BBVEg9JFBBQ0tBR0U7IGZpCisgIGRlYnVnICJtYWpvciAkTUFKT1IgbWlub3IgJE1JTk9SIG1pY3JvICRNSUNSTyIKKyAgVkVSU0lPTj0kTUFKT1IKKyAgaWYgdGVzdCAhIC16ICIkTUlOT1IiOyB0aGVuIFZFUlNJT049JFZFUlNJT04uJE1JTk9SOyBlbHNlIE1JTk9SPTA7IGZpCisgIGlmIHRlc3QgISAteiAiJE1JQ1JPIjsgdGhlbiBWRVJTSU9OPSRWRVJTSU9OLiRNSUNSTzsgZWxzZSBNSUNSTz0wOyBmaQorCisgIGRlYnVnICJtYWpvciAkTUFKT1IgbWlub3IgJE1JTk9SIG1pY3JvICRNSUNSTyIKKworICBmb3IgU1VHR0VTVElPTiBpbiAkUEtHX1BBVEg7IGRvCisgICAgQ09NTUFORD0iJFNVR0dFU1RJT04iCisKKyAgICAjIGRvbid0IGNoZWNrIGlmIGFza2VkIG5vdCB0bworICAgIHRlc3QgLXogIiROT0NIRUNLIiAmJiB7CisgICAgICBwcmludGYgIiAgY2hlY2tpbmcgZm9yICRDT01NQU5EID49ICRWRVJTSU9OIC4uLiAiCisgICAgfSB8fCB7CisgICAgICAjIHdlIHNldCBhIHZhciB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHBhY2thZ2UsIGJ1dCBzdHJpcHBlZCBvZgorICAgICAgIyB1bndhbnRlZCBjaGFycworICAgICAgVkFSPWBlY2hvICRQQUNLQUdFIHwgc2VkICdzLy0vL2cnYAorICAgICAgZGVidWcgInNldHRpbmcgJFZBUiIKKyAgICAgIGV2YWwgJFZBUj0iJENPTU1BTkQiCisgICAgICByZXR1cm4gMAorICAgIH0KKworICAgIHdoaWNoICRDT01NQU5EID4gL2Rldi9udWxsIDI+JjEKKyAgICBpZiB0ZXN0ICQ/IC1lcSAxOworICAgIHRoZW4gCisgICAgICBkZWJ1ZyAiJENPTU1BTkQgbm90IGZvdW5kIgorICAgICAgY29udGludWUKKyAgICBmaQorCisgICAgVkFSUFJFRklYPWBlY2hvICRDT01NQU5EIHwgc2VkICdzLy0vL2cnIHwgdHIgWzpsb3dlcjpdIFs6dXBwZXI6XWAKKyAgICB2ZXJzaW9uX2dldCAkQ09NTUFORCAkVkFSUFJFRklYCisKKyAgICB2ZXJzaW9uX2NvbXBhcmUgJFZBUlBSRUZJWCAkTUFKT1IgJE1JTk9SICRNSUNSTworICAgIGlmIHRlc3QgJD8gLW5lIDA7IHRoZW4KKyAgICAgIGVjaG8gImZvdW5kICRwa2dfdmVyc2lvbiwgbm90IG9rICEiCisgICAgICBjb250aW51ZQorICAgIGVsc2UKKyAgICAgIGVjaG8gImZvdW5kICRwa2dfdmVyc2lvbiwgb2suIgorICAgICAgIyB3ZSBzZXQgYSB2YXIgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBwYWNrYWdlLCBidXQgc3RyaXBwZWQgb2YKKyAgICAgICMgdW53YW50ZWQgY2hhcnMKKyAgICAgIFZBUj1gZWNobyAkUEFDS0FHRSB8IHNlZCAncy8tLy9nJ2AKKyAgICAgIGRlYnVnICJzZXR0aW5nICRWQVIiCisgICAgICBldmFsICRWQVI9IiRDT01NQU5EIgorICAgICAgcmV0dXJuIDAKKyAgICBmaQorICBkb25lCisKKyAgZWNobyAiJFBBQ0tBR0Ugbm90IGZvdW5kICEiCisgIGVjaG8gIllvdSBtdXN0IGhhdmUgJFBBQ0tBR0UgaW5zdGFsbGVkIHRvIGNvbXBpbGUgJHBhY2thZ2UuIgorICBlY2hvICJEb3dubG9hZCB0aGUgYXBwcm9wcmlhdGUgcGFja2FnZSBmb3IgeW91ciBkaXN0cmlidXRpb24sIgorICBlY2hvICJvciBnZXQgdGhlIHNvdXJjZSB0YXJiYWxsIGF0ICRVUkwiCisgIHJldHVybiAxOworfQorCithY2xvY2FsX2NoZWNrICgpCit7CisgICMgbm9ybWFsbHkgYWNsb2NhbCBpcyBwYXJ0IG9mIGF1dG9tYWtlCisgICMgc28gd2UgZXhwZWN0IGl0IHRvIGJlIGluIHRoZSBzYW1lIHBsYWNlIGFzIGF1dG9tYWtlCisgICMgc28gaWYgYSBkaWZmZXJlbnQgYXV0b21ha2UgaXMgc3VwcGxpZWQsIHdlIG5lZWQgdG8gYWRhcHQgYXMgd2VsbAorICAjIHNvIGhvdydzIGFib3V0IHJlcGxhY2luZyBhdXRvbWFrZSB3aXRoIGFjbG9jYWwgaW4gdGhlIHNldCB2YXIsCisgICMgYW5kIHNhdmluZyB0aGF0IGluICRhY2xvY2FsID8KKyAgIyBub3RlLCB0aGlzIHdpbGwgZmFpbCBpZiB0aGUgYWN0dWFsIGF1dG9tYWtlIGlzbid0IGNhbGxlZCBhdXRvbWFrZSoKKyAgIyBvciBpZiBwYXJ0IG9mIHRoZSBwYXRoIGJlZm9yZSBpdCBjb250YWlucyBpdAorICBpZiBbIC16ICIkYXV0b21ha2UiIF07IHRoZW4KKyAgICBlY2hvICJFcnJvcjogbm8gYXV0b21ha2UgdmFyaWFibGUgc2V0ICEiCisgICAgcmV0dXJuIDEKKyAgZWxzZQorICAgIGFjbG9jYWw9YGVjaG8gJGF1dG9tYWtlIHwgc2VkIHMvYXV0b21ha2UvYWNsb2NhbC9gCisgICAgZGVidWcgImFjbG9jYWw6ICRhY2xvY2FsIgorICAgIGlmIFsgIiRhY2xvY2FsIiAhPSAiYWNsb2NhbCIgXTsKKyAgICB0aGVuCisgICAgICBDT05GSUdVUkVfREVGX09QVD0iJENPTkZJR1VSRV9ERUZfT1BUIC0td2l0aC1hY2xvY2FsPSRhY2xvY2FsIgorICAgIGZpCisgICAgaWYgWyAhIC14IGB3aGljaCAkYWNsb2NhbGAgXTsgdGhlbgorICAgICAgZWNobyAiRXJyb3I6IGNhbm5vdCBleGVjdXRlICRhY2xvY2FsICEiCisgICAgICByZXR1cm4gMQorICAgIGZpCisgIGZpCit9CisKK2F1dG9oZWFkZXJfY2hlY2sgKCkKK3sKKyAgIyBzYW1lIGhlcmUgLSBhdXRvaGVhZGVyIGlzIHBhcnQgb2YgYXV0b2NvbmYKKyAgIyB1c2UgdGhlIHNhbWUgdm9vZG9vCisgIGlmIFsgLXogIiRhdXRvY29uZiIgXTsgdGhlbgorICAgIGVjaG8gIkVycm9yOiBubyBhdXRvY29uZiB2YXJpYWJsZSBzZXQgISIKKyAgICByZXR1cm4gMQorICBlbHNlCisgICAgYXV0b2hlYWRlcj1gZWNobyAkYXV0b2NvbmYgfCBzZWQgcy9hdXRvY29uZi9hdXRvaGVhZGVyL2AKKyAgICBkZWJ1ZyAiYXV0b2hlYWRlcjogJGF1dG9oZWFkZXIiCisgICAgaWYgWyAiJGF1dG9oZWFkZXIiICE9ICJhdXRvaGVhZGVyIiBdOworICAgIHRoZW4KKyAgICAgIENPTkZJR1VSRV9ERUZfT1BUPSIkQ09ORklHVVJFX0RFRl9PUFQgLS13aXRoLWF1dG9oZWFkZXI9JGF1dG9oZWFkZXIiCisgICAgZmkKKyAgICBpZiBbICEgLXggYHdoaWNoICRhdXRvaGVhZGVyYCBdOyB0aGVuCisgICAgICBlY2hvICJFcnJvcjogY2Fubm90IGV4ZWN1dGUgJGF1dG9oZWFkZXIgISIKKyAgICAgIHJldHVybiAxCisgICAgZmkKKyAgZmkKKworfQorCithdXRvY29uZl8yXzUyZF9jaGVjayAoKQoreworICAjIGF1dG9jb25mIDIuNTJkIGhhcyBhIHdlaXJkIGlzc3VlIGludm9sdmluZyBhIHllczpubyBlcnJvcgorICAjIHNvIGRvbid0IGFsbG93IGl0J3MgdXNlCisgIHRlc3QgLXogIiROT0NIRUNLIiAmJiB7CisgICAgYWNfdmVyc2lvbj1gJGF1dG9jb25mIC0tdmVyc2lvbnxoZWFkIC1uIDF8c2VkICdzL15bYS16QS1aXC5cICgpXSovLztzLyAuKiQvLydgCisgICAgaWYgdGVzdCAiJGFjX3ZlcnNpb24iID0gIjIuNTJkIjsgdGhlbgorICAgICAgZWNobyAiYXV0b2NvbmYgMi41MmQgaGFzIGFuIGlzc3VlIHdpdGggb3VyIGN1cnJlbnQgYnVpbGQuIgorICAgICAgZWNobyAiV2UgZG9uJ3Qga25vdyB3aG8ncyB0byBibGFtZSBob3dldmVyLiAgU28gdW50aWwgd2UgZG8sIGdldCBhIgorICAgICAgZWNobyAicmVndWxhciB2ZXJzaW9uLiAgUlBNJ3Mgb2YgYSB3b3JraW5nIHZlcnNpb24gYXJlIG9uIHRoZSBnc3RyZWFtZXIgc2l0ZS4iCisgICAgICBleGl0IDEKKyAgICBmaQorICB9CisgIHJldHVybiAwCit9CitsaWJ0b29sXzJfMl9nZXR0ZXh0X2NoZWNrICgpCit7CisgICMgbGlidG9vbCAyLjIgbmVlZHMgYXV0b3BvaW50IDAuMTcgb3IgaGlnaGVyCisgIHZlcnNpb25fY29tcGFyZSBMSUJUT09MSVpFIDIgMiAwCisgIGlmIHRlc3QgJD8gLWVxIDAKKyAgdGhlbgorICAgIHZlcnNpb25fY29tcGFyZSBBVVRPUE9JTlQgMCAxNyAwCisgICAgaWYgdGVzdCAkPyAtbmUgMAorICAgIHRoZW4KKyAgICAgIGVjaG8gImxpYnRvb2wgMi4yIHJlcXVpcmVzIGF1dG9wb2ludCAwLjE3IG9yIGhpZ2hlciIKKyAgICAgIHJldHVybiAxCisgICAgZmkKKyAgZmkKKyAgcmV0dXJuIDAKK30KKworCitkaWVfY2hlY2sgKCkKK3sKKyAgIyBjYWxsIHdpdGggJERJRQorICAjIGlmIHNldCB0byAxLCB3ZSBuZWVkIHRvIHByaW50IHNvbWV0aGluZyBoZWxwZnVsIHRoZW4gZGllCisgIERJRT0kMQorICBpZiB0ZXN0ICJ4JERJRSIgPSAieDEiOworICB0aGVuCisgICAgZWNobworICAgIGVjaG8gIi0gUGxlYXNlIGdldCB0aGUgcmlnaHQgdG9vbHMgYmVmb3JlIHByb2NlZWRpbmcuIgorICAgIGVjaG8gIi0gQWx0ZXJuYXRpdmVseSwgaWYgeW91J3JlIHN1cmUgd2UncmUgd3JvbmcsIHJ1biB3aXRoIC0tbm9jaGVjay4iCisgICAgZXhpdCAxCisgIGZpCit9CisKK2F1dG9nZW5fb3B0aW9ucyAoKQoreworICBpZiB0ZXN0ICJ4JDEiID0gIngiOyB0aGVuCisgICAgcmV0dXJuIDAKKyAgZmkKKworICB3aGlsZSB0ZXN0ICJ4JDEiICE9ICJ4IiA7IGRvCisgICAgb3B0YXJnPWBleHByICJ4JDEiIDogJ3hbXj1dKj1cKC4qXCknYAorICAgIGNhc2UgIiQxIiBpbgorICAgICAgLS1ub2NvbmZpZ3VyZSkKKyAgICAgICAgICBOT0NPTkZJR1VSRT1kZWZpbmVkCisJICBBVVRPR0VOX0VYVF9PUFQ9IiRBVVRPR0VOX0VYVF9PUFQgLS1ub2NvbmZpZ3VyZSIKKyAgICAgICAgICBlY2hvICIrIGNvbmZpZ3VyZSBydW4gZGlzYWJsZWQiCisgICAgICAgICAgc2hpZnQKKyAgICAgICAgICA7OworICAgICAgLS1ub2NoZWNrKQorCSAgQVVUT0dFTl9FWFRfT1BUPSIkQVVUT0dFTl9FWFRfT1BUIC0tbm9jaGVjayIKKyAgICAgICAgICBOT0NIRUNLPWRlZmluZWQKKyAgICAgICAgICBlY2hvICIrIGF1dG90b29scyB2ZXJzaW9uIGNoZWNrIGRpc2FibGVkIgorICAgICAgICAgIHNoaWZ0CisgICAgICAgICAgOzsKKyAgICAgIC1kfC0tZGVidWcpCisgICAgICAgICAgREVCVUc9ZGVmaW5lZAorCSAgQVVUT0dFTl9FWFRfT1BUPSIkQVVUT0dFTl9FWFRfT1BUIC0tZGVidWciCisgICAgICAgICAgZWNobyAiKyBkZWJ1ZyBvdXRwdXQgZW5hYmxlZCIKKyAgICAgICAgICBzaGlmdAorICAgICAgICAgIDs7CisgICAgICAtaHwtLWhlbHApCisgICAgICAgICAgZWNobyAiYXV0b2dlbi5zaCAoYXV0b2dlbiBvcHRpb25zKSAtLSAoY29uZmlndXJlIG9wdGlvbnMpIgorICAgICAgICAgIGVjaG8gImF1dG9nZW4uc2ggaGVscCBvcHRpb25zOiAiCisgICAgICAgICAgZWNobyAiIC0tbm9jb25maWd1cmUgICAgICAgICAgICBkb24ndCBydW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQiCisgICAgICAgICAgZWNobyAiIC0tbm9jaGVjayAgICAgICAgICAgICAgICBkb24ndCBkbyB2ZXJzaW9uIGNoZWNrcyIKKyAgICAgICAgICBlY2hvICIgLS1kZWJ1ZyAgICAgICAgICAgICAgICAgIGRlYnVnIHRoZSBhdXRvZ2VuIHByb2Nlc3MiCisgICAgICAgICAgZWNobworICAgICAgICAgIGVjaG8gIiAtLXdpdGgtYXV0b2NvbmYgUEFUSCAgICAgdXNlIGF1dG9jb25mIGluIFBBVEgiCisgICAgICAgICAgZWNobyAiIC0td2l0aC1hdXRvbWFrZSBQQVRIICAgICB1c2UgYXV0b21ha2UgaW4gUEFUSCIKKyAgICAgICAgICBlY2hvCisgICAgICAgICAgZWNobyAiQW55IGFyZ3VtZW50IGVpdGhlciBub3QgaW4gdGhlIGFib3ZlIGxpc3Qgb3IgYWZ0ZXIgYSAnLS0nIHdpbGwgYmUgIgorICAgICAgICAgIGVjaG8gInBhc3NlZCB0byAuL2NvbmZpZ3VyZS4iCisJICBleGl0IDEKKyAgICAgICAgICA7OworICAgICAgLS13aXRoLWF1dG9tYWtlPSopCisgICAgICAgICAgQVVUT01BS0U9JG9wdGFyZworICAgICAgICAgIGVjaG8gIisgdXNpbmcgYWx0ZXJuYXRlIGF1dG9tYWtlIGluICRvcHRhcmciCisJICBDT05GSUdVUkVfREVGX09QVD0iJENPTkZJR1VSRV9ERUZfT1BUIC0td2l0aC1hdXRvbWFrZT0kQVVUT01BS0UiCisgICAgICAgICAgc2hpZnQKKyAgICAgICAgICA7OworICAgICAgLS13aXRoLWF1dG9jb25mPSopCisgICAgICAgICAgQVVUT0NPTkY9JG9wdGFyZworICAgICAgICAgIGVjaG8gIisgdXNpbmcgYWx0ZXJuYXRlIGF1dG9jb25mIGluICRvcHRhcmciCisJICBDT05GSUdVUkVfREVGX09QVD0iJENPTkZJR1VSRV9ERUZfT1BUIC0td2l0aC1hdXRvY29uZj0kQVVUT0NPTkYiCisgICAgICAgICAgc2hpZnQKKyAgICAgICAgICA7OworICAgICAgLS0pIHNoaWZ0IDsgYnJlYWsgOzsKKyAgICAgICopCisgICAgICAgICAgZWNobyAiKyBwYXNzaW5nIGFyZ3VtZW50ICQxIHRvIGNvbmZpZ3VyZSIKKwkgIENPTkZJR1VSRV9FWFRfT1BUPSIkQ09ORklHVVJFX0VYVF9PUFQgJDEiCisgICAgICAgICAgc2hpZnQKKyAgICAgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorCisgIGZvciBhcmcgZG8gQ09ORklHVVJFX0VYVF9PUFQ9IiRDT05GSUdVUkVfRVhUX09QVCAkYXJnIjsgZG9uZQorICBpZiB0ZXN0ICEgLXogIiRDT05GSUdVUkVfRVhUX09QVCIKKyAgdGhlbgorICAgIGVjaG8gIisgb3B0aW9ucyBwYXNzZWQgdG8gY29uZmlndXJlOiAkQ09ORklHVVJFX0VYVF9PUFQiCisgIGZpCit9CisKK3RvcGxldmVsX2NoZWNrICgpCit7CisgIHNyY2ZpbGU9JDEKKyAgdGVzdCAtZiAkc3JjZmlsZSB8fCB7CisgICAgICAgIGVjaG8gIllvdSBtdXN0IHJ1biB0aGlzIHNjcmlwdCBpbiB0aGUgdG9wLWxldmVsICRwYWNrYWdlIGRpcmVjdG9yeSIKKyAgICAgICAgZXhpdCAxCisgIH0KK30KKwordG9vbF9ydW4gKCkKK3sKKyAgdG9vbD0kMQorICBvcHRpb25zPSQyCisgIHJ1bl9pZl9mYWlsPSQzCisgIGVjaG8gIisgcnVubmluZyAkdG9vbCAkb3B0aW9ucy4uLiIKKyAgJHRvb2wgJG9wdGlvbnMgfHwgeworICAgIGVjaG8KKyAgICBlY2hvICR0b29sIGZhaWxlZAorICAgIGV2YWwgJHJ1bl9pZl9mYWlsCisgICAgZXhpdCAxCisgIH0KK30KKworaW5zdGFsbF9naXRfaG9va3MgKCkKK3sKKyAgaWYgdGVzdCAtZCAuZ2l0OyB0aGVuCisgICAgIyBpbnN0YWxsIHByZS1jb21taXQgaG9vayBmb3IgZG9pbmcgY2xlYW4gY29tbWl0cworICAgIGZvciBob29rIGluIHByZS1jb21taXQ7IGRvCisgICAgICBpZiB0ZXN0ICEgXCggLXggLmdpdC9ob29rcy8kaG9vayAtYSAtTCAuZ2l0L2hvb2tzLyRob29rIFwpOyB0aGVuCisgICAgICAgIGVjaG8gIisgSW5zdGFsbGluZyBnaXQgJGhvb2sgaG9vayIKKyAgICAgICAgcm0gLWYgLmdpdC9ob29rcy8kaG9vaworICAgICAgICBsbiAtcyAuLi8uLi9jb21tb24vaG9va3MvJGhvb2suaG9vayAuZ2l0L2hvb2tzLyRob29rIHx8IHsKKyAgICAgICAgICAjIGlmIHdlIGNvdWxkbid0IGNyZWF0ZSBhIHN5bWJvbGljIGxpbmssIHRyeSBkb2luZyBhIHBsYWluIGNwCisgICAgICAgICAgaWYgY3AgY29tbW9uL2hvb2tzL3ByZS1jb21taXQuaG9vayAuZ2l0L2hvb2tzL3ByZS1jb21taXQ7IHRoZW4KKyAgICAgICAgICAgIGNobW9kICt4IC5naXQvaG9va3MvcHJlLWNvbW1pdDsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBlY2hvICIqKioqKioqKioqIENvdWxkbid0IGluc3RhbGwgZ2l0ICRob29rIGhvb2sgKioqKioqKioqKiI7CisgICAgICAgICAgZmkKKyAgICAgICAgfQorICAgICAgZmkKKyAgICBkb25lCisgIGZpCit9CmRpZmYgLS1naXQgYS9jb21tb24vZ3N0LWluZGVudCBiL2NvbW1vbi9nc3QtaW5kZW50Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjczMmIyYmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vZ3N0LWluZGVudApAQCAtMCwwICsxLDQ5IEBACisjIS9iaW4vc2gKKyMKKyMgQ2hlY2sgdGhhdCB0aGUgY29kZSBmb2xsb3dzIGEgY29uc2lzdGFudCBjb2RlIHN0eWxlCisjCisKKyMgQ2hlY2sgZm9yIGV4aXN0ZW5jZSBvZiBpbmRlbnQsIGFuZCBlcnJvciBvdXQgaWYgbm90IHByZXNlbnQuCisjIE9uIHNvbWUgKmJzZCBzeXN0ZW1zIHRoZSBiaW5hcnkgc2VlbXMgdG8gYmUgY2FsbGVkIGdudW5pbmRlbnQsCisjIHNvIGNoZWNrIGZvciB0aGF0IGZpcnN0LgorCit2ZXJzaW9uPWBnbnVpbmRlbnQgLS12ZXJzaW9uIDI+L2Rldi9udWxsYAoraWYgdGVzdCAieCR2ZXJzaW9uIiA9ICJ4IjsgdGhlbgorICB2ZXJzaW9uPWBpbmRlbnQgLS12ZXJzaW9uIDI+L2Rldi9udWxsYAorICBpZiB0ZXN0ICJ4JHZlcnNpb24iID0gIngiOyB0aGVuCisgICAgZWNobyAiR1N0cmVhbWVyIGdpdCBwcmUtY29tbWl0IGhvb2s6IgorICAgIGVjaG8gIkRpZCBub3QgZmluZCBHTlUgaW5kZW50LCBwbGVhc2UgaW5zdGFsbCBpdCBiZWZvcmUgY29udGludWluZy4iCisgICAgZXhpdCAxCisgIGZpCisgIElOREVOVD1pbmRlbnQKK2Vsc2UKKyAgSU5ERU5UPWdudWluZGVudAorZmkKKworY2FzZSBgJElOREVOVCAtLXZlcnNpb25gIGluCisgIEdOVSopCisgICAgICA7OworICBkZWZhdWx0KQorICAgICAgZWNobyAiR1N0cmVhbWVyIGdpdCBwcmUtY29tbWl0IGhvb2s6IgorICAgICAgZWNobyAiRGlkIG5vdCBmaW5kIEdOVSBpbmRlbnQsIHBsZWFzZSBpbnN0YWxsIGl0IGJlZm9yZSBjb250aW51aW5nLiIKKyAgICAgIGVjaG8gIihGb3VuZCAkSU5ERU5ULCBidXQgaXQgZG9lc24ndCBzZWVtIHRvIGJlIEdOVSBpbmRlbnQpIgorICAgICAgZXhpdCAxCisgICAgICA7OworZXNhYworCitJTkRFTlRfUEFSQU1FVEVSUz0iLS1icmFjZXMtb24taWYtbGluZSBcCisJLS1jYXNlLWJyYWNlLWluZGVudGF0aW9uMCBcCisJLS1jYXNlLWluZGVudGF0aW9uMiBcCisJLS1icmFjZXMtYWZ0ZXItc3RydWN0LWRlY2wtbGluZSBcCisJLS1saW5lLWxlbmd0aDgwIFwKKwktLW5vLXRhYnMgXAorCS0tY3VkZGxlLWVsc2UgXAorCS0tZG9udC1saW5lLXVwLXBhcmVudGhlc2VzIFwKKwktLWNvbnRpbnVhdGlvbi1pbmRlbnRhdGlvbjQgXAorCS0taG9ub3VyLW5ld2xpbmVzIFwKKwktLXRhYi1zaXplOCBcCisJLS1pbmRlbnQtbGV2ZWwyIFwKKwktLWxlYXZlLXByZXByb2Nlc3Nvci1zcGFjZSIKKworJElOREVOVCAke0lOREVOVF9QQVJBTUVURVJTfSAkQAorCmRpZmYgLS1naXQgYS9jb21tb24vZ3N0LnN1cHAgYi9jb21tb24vZ3N0LnN1cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEwMDA1ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9nc3Quc3VwcApAQCAtMCwwICsxLDM5NjMgQEAKKyMjIyB0aGlzIGZpbGUgY29udGFpbnMgc3VwcHJlc3Npb25zIGZvciB2YWxncmluZCB3aGVuIHJ1bm5pbmcKKyMjIyB0aGUgZ3N0cmVhbWVyIHVuaXQgdGVzdHMKKyMjIyBpdCBtaWdodCBiZSB1c2VmdWwgZm9yIHdpZGVyIHVzZSBhcyB3ZWxsCisKKyMjIyBzeXNjYWxsIHN1cHByZXNzaW9ucworCit7CisgICA8Y2xvbmUgb24gV2ltJ3MgRGViaWFuPgorICAgTWVtY2hlY2s6UGFyYW0KKyAgIGNsb25lKHBhcmVudF90aWRwdHIpCisgICBmdW46Y2xvbmUKKyAgIGZ1bjpjbG9uZQorfQorCit7CisgICA8Y2xvbmUgb24gV2ltJ3MgRGViaWFuPgorICAgTWVtY2hlY2s6UGFyYW0KKyAgIGNsb25lKGNoaWxkX3RpZHB0cikKKyAgIGZ1bjpjbG9uZQorICAgZnVuOmNsb25lCit9CisKK3sKKyAgIDxjbG9uZSBvbiBXaW0ncyBEZWJpYW4+CisgICBNZW1jaGVjazpQYXJhbQorICAgY2xvbmUodGxzaW5mbykKKyAgIGZ1bjpjbG9uZQorICAgZnVuOmNsb25lCit9CisKKyMjIyBnbGliYyBzdXBwcmVzc2lvbnMKKworeworICAgPGNvbmRpdGlvbmFsIGp1bXAgb24gd2ltJ3MgZGViaWFuIDIvMi8wNj4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIG9iajovbGliL2xkLTIuKi5zbworICAgZnVuOmRsX29wZW5fd29ya2VyCisgICBvYmo6L2xpYi9sZC0yLiouc28KKyAgIGZ1bjpfZGxfb3BlbgorICAgZnVuOmRsb3Blbl9kb2l0CisgICBvYmo6L2xpYi9sZC0yLiouc28KKyAgIGZ1bjpfZGxlcnJvcl9ydW4KKyAgIGZ1bjpkbG9wZW4KKyAgIGZ1bjpnX21vZHVsZV9vcGVuCisgICBmdW46Z3N0X3BsdWdpbl9sb2FkX2ZpbGUKK30KKworeworICAgPENvbmRpdGlvbmFsIGp1bXA+CisgICBNZW1jaGVjazpDb25kCisgICBmdW46c3RybGVuCisgICBmdW46ZmlsbGluX3JwYXRoCisgICBmdW46X2RsX2luaXRfcGF0aHMKKyAgIGZ1bjpkbF9tYWluCisgICBmdW46X2RsX3N5c2RlcF9zdGFydAorICAgZnVuOl9kbF9zdGFydAorICAgb2JqOi9saWI2NC9sZC0yLiouc28KKyAgIG9iajoqCisgICBvYmo6KgorfQorCit7CisgICA8Q29uZGl0aW9uYWwganVtcD4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjpfZGxfcmVsb2NhdGVfb2JqZWN0CisgICBmdW46ZGxfbWFpbgorICAgZnVuOl9kbF9zeXNkZXBfc3RhcnQKKyAgIGZ1bjpfZGxfc3RhcnQKK30KKworeworICAgPGluc2VydCBhIHN1cHByZXNzaW9uIG5hbWUgaGVyZT4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjoqCisgICBmdW46ZGxfb3Blbl93b3JrZXIKKyAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKKyAgIGZ1bjpfZGxfb3BlbgorICAgZnVuOmRsb3Blbl9kb2l0CisgICBmdW46X2RsX2NhdGNoX2Vycm9yCisgICBmdW46X2RsZXJyb3JfcnVuCisgICBmdW46ZGxvcGVuQEBHTElCQ18yLjIuNQorfQorCisjIGdsaWJjIGRvZXMgbm90IGRlYWxsb2NhdGUgdGhyZWFkLWxvY2FsIHN0b3JhZ2UKKworeworICAgPHRscz4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjpjYWxsb2MKKyAgIGZ1bjpfZGxfYWxsb2NhdGVfdGxzCisgICBmdW46cHRocmVhZF9jcmVhdGVAQCoKK30KKworIyBJIGdldCBhbiBleHRyYSBzdGFjayBlbnRyeSBvbiB4ODYvZGFwcGVyCit7CisgICA8dGxzPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOmNhbGxvYworICAgb2JqOi9saWIvbGQtMi4zLiouc28KKyAgIGZ1bjpfZGxfYWxsb2NhdGVfdGxzCisgICBmdW46cHRocmVhZF9jcmVhdGVAQCoKK30KKworCit7CisgICA8cHRocmVhZCBzdHJzdHI+CisgICBNZW1jaGVjazpDb25kCisgICBmdW46c3Ryc3RyCisgICBmdW46X19wdGhyZWFkX2luaXRpYWxpemVfbWluaW1hbAorICAgb2JqOi9saWIvbGlicHRocmVhZC0qLnNvCisgICBvYmo6L2xpYi9saWJwdGhyZWFkLSouc28KKyAgIGZ1bjpjYWxsX2luaXQKKyAgIGZ1bjpfZGxfaW5pdAorICAgb2JqOi9saWIvbGQtKi5zbworfQorCisjIGEgdGhyZWFkLXJlbGF0ZWQgZnJlZSBwcm9ibGVtIGluIGdsaWJjIGZyb20gRWRnYXJkCit7CisgICBfX2xpYmNfZnJlZXJlc19yd19hY2VzcworICAgTWVtY2hlY2s6QWRkcjQKKyAgIG9iajoqCisgICBvYmo6KgorICAgb2JqOioKKyAgIG9iajoqCisgICBvYmo6KgorICAgZnVuOl9fbGliY19mcmVlcmVzCit9CisKK3sKKyAgIDxhIGNvbmRpdGlvbmFsIGp1bXAgb24gd2ltJ3MgZGViaWFuPgorICAgTWVtY2hlY2s6Q29uZAorICAgb2JqOi9saWIvbGQtMi4zLiouc28KKyAgIG9iajovbGliL2xkLTIuMy4qLnNvCisgICBvYmo6L2xpYi9sZC0yLjMuKi5zbworICAgb2JqOi9saWIvbGQtMi4zLiouc28KKyAgIG9iajovbGliL2xkLTIuMy4qLnNvCit9CisKKyMgZ19tb2R1bGVfb3Blbi1yZWxhdGVkIHByb2JsZW1zCit7CisgICA8c3RhcnRlZCBzaG93aW5nIHVwIG9uIGZjNC1xdWljaz4KKyAgIE1lbWNoZWNrOkFkZHIyCisgICBmdW46bWVtY3B5CisgICBmdW46X2RsX21hcF9vYmplY3RfZGVwcworICAgZnVuOmRsX29wZW5fd29ya2VyCisgICBmdW46X2RsX2NhdGNoX2Vycm9yCisgICBmdW46X2RsX29wZW4KKyAgIGZ1bjpkbG9wZW5fZG9pdAorICAgZnVuOl9kbF9jYXRjaF9lcnJvcgorICAgZnVuOl9kbGVycm9yX3J1bgorICAgZnVuOmRsb3BlbkBAR0xJQkNfMi4xCisgICBmdW46Z19tb2R1bGVfb3BlbgorICAgZnVuOmdzdF9wbHVnaW5fbG9hZF9maWxlCisgICBmdW46Z3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9sZXZlbAorICAgZnVuOmdzdF9yZWdpc3RyeV9zY2FuX3BhdGhfbGV2ZWwKKyAgIGZ1bjpnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2xldmVsCisgICBmdW46aW5pdF9wb3N0CisgICBmdW46Z19vcHRpb25fY29udGV4dF9wYXJzZQorICAgZnVuOmdzdF9pbml0X2NoZWNrCisgICBmdW46Z3N0X2luaXQKKyAgIGZ1bjpnc3RfY2hlY2tfaW5pdAorICAgZnVuOm1haW4KK30KKworeworICAgPHN0YXJ0ZWQgc2hvd2luZyB1cCBvbiBmYzQtcXVpY2s+CisgICBNZW1jaGVjazpBZGRyNAorICAgZnVuOm1lbWNweQorICAgZnVuOl9kbF9tYXBfb2JqZWN0X2RlcHMKKyAgIGZ1bjpkbF9vcGVuX3dvcmtlcgorICAgZnVuOl9kbF9jYXRjaF9lcnJvcgorICAgZnVuOl9kbF9vcGVuCisgICBmdW46ZGxvcGVuX2RvaXQKKyAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKKyAgIGZ1bjpfZGxlcnJvcl9ydW4KKyAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMQorICAgZnVuOmdfbW9kdWxlX29wZW4KKyAgIGZ1bjpnc3RfcGx1Z2luX2xvYWRfZmlsZQorICAgZnVuOmdzdF9yZWdpc3RyeV9zY2FuX3BhdGhfbGV2ZWwKKyAgIGZ1bjpnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2xldmVsCisgICBmdW46Z3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9sZXZlbAorICAgZnVuOmluaXRfcG9zdAorICAgZnVuOmdfb3B0aW9uX2NvbnRleHRfcGFyc2UKKyAgIGZ1bjpnc3RfaW5pdF9jaGVjaworICAgZnVuOmdzdF9pbml0CisgICBmdW46Z3N0X2NoZWNrX2luaXQKKyAgIGZ1bjptYWluCit9CisKK3sKKyAgIDxnX21vZHVsZV9vcGVuIG9uIHdpbSdzIGRlYmlhbj4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIG9iajovbGliL2xkLTIuMy4qLnNvCisgICBvYmo6L2xpYi9sZC0yLjMuKi5zbworICAgb2JqOi9saWIvbGQtMi4zLiouc28KKyAgIGZ1bjpkb19zeW0KKyAgIGZ1bjpfZGxfc3ltCisgICBmdW46ZGxzeW1fZG9pdAorICAgb2JqOi9saWIvbGQtMi4zLiouc28KKyAgIGZ1bjpfZGxlcnJvcl9ydW4KKyAgIGZ1bjpkbHN5bQorICAgZnVuOmdfbW9kdWxlX3N5bWJvbAorICAgZnVuOmdfbW9kdWxlX29wZW4KKyAgIGZ1bjpnc3RfcGx1Z2luX2xvYWRfZmlsZQorfQorCit7CisgICA8Z19tb2R1bGVfb3BlbiBvbiB3aW0ncyBkZWJpYW4+CisgICBNZW1jaGVjazpDb25kCisgICBvYmo6L2xpYi9sZC0yLjMuKi5zbworICAgb2JqOi9saWIvbGQtMi4zLiouc28KKyAgIG9iajovbGliL2xkLTIuMy4qLnNvCisgICBmdW46ZGxfb3Blbl93b3JrZXIKKyAgIG9iajovbGliL2xkLTIuMy4qLnNvCisgICBmdW46X2RsX29wZW4KKyAgIGZ1bjpkbG9wZW5fZG9pdAorICAgb2JqOi9saWIvbGQtMi4zLiouc28KKyAgIGZ1bjpfZGxlcnJvcl9ydW4KKyAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMQorICAgZnVuOmdfbW9kdWxlX29wZW4KKyAgIGZ1bjpnc3RfcGx1Z2luX2xvYWRfZmlsZQorfQoreworICAgPGdfbW9kdWxlX29wZW4gb24gd2ltJ3MgZGViaWFuPgorICAgTWVtY2hlY2s6Q29uZAorICAgb2JqOi9saWIvbGQtMi4zLiouc28KKyAgIGZ1bjpkbF9vcGVuX3dvcmtlcgorICAgb2JqOi9saWIvbGQtMi4zLiouc28KKyAgIGZ1bjpfZGxfb3BlbgorICAgZnVuOmRsb3Blbl9kb2l0CisgICBvYmo6L2xpYi9sZC0yLjMuKi5zbworICAgZnVuOl9kbGVycm9yX3J1bgorICAgZnVuOmRsb3BlbkBAR0xJQkNfMi4xCisgICBmdW46Z19tb2R1bGVfb3BlbgorICAgZnVuOmdzdF9wbHVnaW5fbG9hZF9maWxlCisgICBmdW46Z3N0X3BsdWdpbl9sb2FkX2J5X25hbWUKKyAgIGZ1bjpnc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZAorfQorCit7CisgICA8bGVhayBvbiB3aW0ncyBkZWJpYW4gaW4gZ19tb2R1bGVfb3Blbj4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjptYWxsb2MKKyAgIG9iajovbGliL2xkLTIuMy4qLnNvCisgICBmdW46ZGxfb3Blbl93b3JrZXIKKyAgIG9iajovbGliL2xkLTIuMy4qLnNvCisgICBmdW46X2RsX29wZW4KKyAgIGZ1bjpkbG9wZW5fZG9pdAorICAgb2JqOi9saWIvbGQtMi4zLiouc28KKyAgIGZ1bjpfZGxlcnJvcl9ydW4KKyAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMQorICAgZnVuOmdfbW9kdWxlX29wZW4KKyAgIGZ1bjpnc3RfcGx1Z2luX2xvYWRfZmlsZQorICAgZnVuOmdzdF9wbHVnaW5fbG9hZF9ieV9uYW1lCit9CisKK3sKKyAgIDxpbnZhbGlkIHJlYWQgb24gd2ltJ3MgZGViaWFuPgorICAgTWVtY2hlY2s6QWRkcjQKKyAgIG9iajovbGliL2xkLTIuMy4qLnNvCisgICBvYmo6L2xpYi9sZC0yLjMuKi5zbworICAgb2JqOi9saWIvbGQtMi4zLiouc28KKyAgIG9iajovbGliL2xkLTIuMy4qLnNvCisgICBvYmo6L2xpYi9sZC0yLjMuKi5zbworICAgb2JqOi9saWIvbGQtMi4zLiouc28KKyAgIG9iajovbGliL2xkLTIuMy4qLnNvCisgICBmdW46ZGxfb3Blbl93b3JrZXIKKyAgIG9iajovbGliL2xkLTIuMy4qLnNvCisgICBmdW46X2RsX29wZW4KKyAgIGZ1bjpkbG9wZW5fZG9pdAorICAgb2JqOi9saWIvbGQtMi4zLiouc28KK30KKworeworICAgPGludmFsaWQgcmVhZCBvbiB3aW0ncyBkZWJpYW4+CisgICBNZW1jaGVjazpBZGRyNAorICAgb2JqOi9saWIvbGQtMi4zLiouc28KKyAgIG9iajovbGliL2xkLTIuMy4qLnNvCisgICBvYmo6L2xpYi9sZC0yLjMuKi5zbworICAgb2JqOi9saWIvbGQtMi4zLiouc28KKyAgIG9iajovbGliL2xkLTIuMy4qLnNvCisgICBvYmo6L2xpYi9sZC0yLjMuKi5zbworICAgZnVuOmRsX29wZW5fd29ya2VyCisgICBvYmo6L2xpYi9sZC0yLjMuKi5zbworICAgZnVuOl9kbF9vcGVuCisgICBmdW46ZGxvcGVuX2RvaXQKKyAgIG9iajovbGliL2xkLTIuMy4qLnNvCisgICBmdW46X2RsZXJyb3JfcnVuCit9CisKK3sKKyAgIDxpbnZhbGlkIHJlYWQgb24gd2ltJ3MgZGViaWFuIC0gMjAwNi0wMi0wMj4KKyAgIE1lbWNoZWNrOkFkZHI0CisgICBvYmo6L2xpYi9sZC0yLjMuKi5zbworICAgb2JqOi9saWIvbGQtMi4zLiouc28KKyAgIG9iajovbGliL2xkLTIuMy4qLnNvCisgICBmdW46ZGxfb3Blbl93b3JrZXIKKyAgIG9iajovbGliL2xkLTIuMy4qLnNvCisgICBmdW46X2RsX29wZW4KKyAgIGZ1bjpkbG9wZW5fZG9pdAorICAgb2JqOi9saWIvbGQtMi4zLiouc28KKyAgIGZ1bjpfZGxlcnJvcl9ydW4KKyAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMQorICAgZnVuOmdfbW9kdWxlX29wZW4KK30KKworeworICAgPGludmFsaWQgcmVhZCBvbiB3aW0ncyBkZWJpYW4gLSAyMDA2LTAyLTAyPgorICAgTWVtY2hlY2s6QWRkcjQKKyAgIG9iajovbGliL2xkLTIuMy4qLnNvCisgICBvYmo6L2xpYi9sZC0yLjMuKi5zbworICAgZnVuOmRsX29wZW5fd29ya2VyCisgICBvYmo6L2xpYi9sZC0yLjMuKi5zbworICAgZnVuOl9kbF9vcGVuCisgICBmdW46ZGxvcGVuX2RvaXQKKyAgIG9iajovbGliL2xkLTIuMy4qLnNvCisgICBmdW46X2RsZXJyb3JfcnVuCisgICBmdW46ZGxvcGVuQEBHTElCQ18yLjEKKyAgIGZ1bjpnX21vZHVsZV9vcGVuCit9CisKK3sKKyAgIDxpbnZhbGlkIHJlYWQgb24gd2ltJ3MgZGViaWFuIC0gMjAwNi0wMi0wMj4KKyAgIE1lbWNoZWNrOkFkZHI0CisgICBvYmo6L2xpYi9sZC0yLjMuKi5zbworICAgb2JqOi9saWIvbGQtMi4zLiouc28KKyAgIG9iajovbGliL2xkLTIuMy4qLnNvCisgICBmdW46ZG9fc3ltCisgICBmdW46X2RsX3N5bQorICAgZnVuOmRsc3ltX2RvaXQKKyAgIG9iajovbGliL2xkLTIuMy4qLnNvCisgICBmdW46X2RsZXJyb3JfcnVuCisgICBmdW46ZGxzeW0KKyAgIGZ1bjpnX21vZHVsZV9zeW1ib2wKKyAgIGZ1bjpnX21vZHVsZV9vcGVuCit9CisKK3sKKyAgIDxmdXRleCBvbiBBbmR5J3MgNjQtYml0IHVidW50dT4KKyAgIE1lbWNoZWNrOlBhcmFtCisgICBmdXRleCh1YWRkcjIpCisgICBmdW46cHRocmVhZF9vbmNlCisgICBvYmo6L2xpYi9saWJjLTIuMy4qLnNvCisgICBvYmo6L2xpYi9saWJjLTIuMy4qLnNvCisgICBmdW46bWJzbnJ0b3djcworICAgZnVuOnZmcHJpbnRmCisgICBmdW46dnNwcmludGYKKyAgIGZ1bjpzcHJpbnRmCisgICBvYmo6L2xpYi9saWJjLTIuMy4qLnNvCisgICBmdW46dG1wZmlsZQorICAgZnVuOnNldHVwX3BpcGUKKyAgIGZ1bjpzZXR1cF9tZXNzYWdpbmdfd2l0aF9rZXkKKyAgIGZ1bjpzZXR1cF9tZXNzYWdpbmcKK30KKworeworICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gZGViaWFuPgorICAgTWVtY2hlY2s6QWRkcjQKKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbworICAgZnVuOmRsb3BlbgorICAgZnVuOmdfbW9kdWxlX29wZW4KK30KKworeworICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gZGViaWFuPgorICAgTWVtY2hlY2s6QWRkcjQKKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2k2ODYvY21vdi9saWJjLTIuNy5zbworICAgZnVuOl9kbF9zeW0KKyAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbworICAgZnVuOmRsc3ltCisgICBmdW46Z19tb2R1bGVfc3ltYm9sCisgICBmdW46Z19tb2R1bGVfb3BlbgorfQorCit7CisgICA8c3VwcHJlc3Npb24gZm9yIGdsaWJjIDIuNyBvbiBkZWJpYW4+CisgICBNZW1jaGVjazpBZGRyNAorICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCisgICBmdW46ZGxvcGVuCisgICBmdW46Z19tb2R1bGVfb3BlbgorfQorCit7CisgICA8c3VwcHJlc3Npb24gZm9yIGdsaWJjIDIuNyBvbiBkZWJpYW4+CisgICBNZW1jaGVjazpBZGRyNAorICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCisgICBmdW46ZGxvcGVuCisgICBmdW46Z19tb2R1bGVfb3BlbgorfQorCit7CisgICA8c3VwcHJlc3Npb24gZm9yIGdsaWJjIDIuNyBvbiBkZWJpYW4+CisgICBNZW1jaGVjazpBZGRyNAorICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbworICAgZnVuOmRsb3BlbgorICAgZnVuOmdfbW9kdWxlX29wZW4KK30KKworeworICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gZGViaWFuPgorICAgTWVtY2hlY2s6QWRkcjQKKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2k2ODYvY21vdi9saWJjLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBmdW46X19saWJjX2Rsb3Blbl9tb2RlCit9CisKK3sKKyAgIDxzdXBwcmVzc2lvbiBmb3IgZ2xpYmMgMi43IG9uIGRlYmlhbj4KKyAgIE1lbWNoZWNrOkFkZHI0CisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliYy0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgZnVuOl9fbGliY19kbG9wZW5fbW9kZQorfQorCit7CisgICA8c3VwcHJlc3Npb24gZm9yIGdsaWJjIDIuNyBvbiBkZWJpYW4+CisgICBNZW1jaGVjazpBZGRyNAorICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2k2ODYvY21vdi9saWJjLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBmdW46X19saWJjX2Rsb3Blbl9tb2RlCisgICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliYy0yLjcuc28KKyAgIG9iajovbGliL2k2ODYvY21vdi9saWJjLTIuNy5zbworICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmMtMi43LnNvCisgICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliYy0yLjcuc28KKyAgIG9iajovbGliL2k2ODYvY21vdi9saWJjLTIuNy5zbworICAgZnVuOmljb252X29wZW4KK30KKworeworICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gZGViaWFuPgorICAgTWVtY2hlY2s6QWRkcjQKKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2k2ODYvY21vdi9saWJjLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBmdW46X19saWJjX2Rsb3Blbl9tb2RlCisgICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliYy0yLjcuc28KKyAgIG9iajovbGliL2k2ODYvY21vdi9saWJjLTIuNy5zbworICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmMtMi43LnNvCisgICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliYy0yLjcuc28KKyAgIG9iajovbGliL2k2ODYvY21vdi9saWJjLTIuNy5zbworICAgZnVuOmljb252X29wZW4KK30KKworeworICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gVWJ1bnR5IEhhcmR5IDY0LWJpdD4KKyAgIE1lbWNoZWNrOkFkZHI4CisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xpYmMtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIGZ1bjpfX2xpYmNfZGxvcGVuX21vZGUKKyAgIG9iajovbGliL2xpYmMtMi43LnNvCisgICBvYmo6L2xpYi9saWJjLTIuNy5zbworICAgb2JqOi9saWIvbGliYy0yLjcuc28KKyAgIG9iajovbGliL2xpYmMtMi43LnNvCisgICBvYmo6L2xpYi9saWJjLTIuNy5zbworICAgZnVuOmljb252X29wZW4KK30KKworeworICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gVWJ1bnR5IEhhcmR5IDY0LWJpdD4KKyAgIE1lbWNoZWNrOkFkZHI4CisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9saWJjLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBmdW46X19saWJjX2Rsb3Blbl9tb2RlCisgICBvYmo6L2xpYi9saWJjLTIuNy5zbworICAgb2JqOi9saWIvbGliYy0yLjcuc28KKyAgIG9iajovbGliL2xpYmMtMi43LnNvCisgICBvYmo6L2xpYi9saWJjLTIuNy5zbworICAgb2JqOi9saWIvbGliYy0yLjcuc28KKyAgIGZ1bjppY29udl9vcGVuCit9CisKK3sKKyAgIDxzdXBwcmVzc2lvbiBmb3IgZ2xpYmMgMi43IG9uIGRlYmlhbj4KKyAgIE1lbWNoZWNrOkFkZHI0CisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCisgICBmdW46ZGxvcGVuCit9CisKK3sKKyAgIDxzdXBwcmVzc2lvbiBmb3IgZ2xpYmMgMi43IG9uIGRlYmlhbj4KKyAgIE1lbWNoZWNrOkFkZHI0CisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbworICAgZnVuOmRsb3BlbgorfQorCit7CisgICA8c3VwcHJlc3Npb24gZm9yIGdsaWJjIDIuNyBvbiBVYnVudHkgSGFyZHkgNjQtYml0PgorICAgTWVtY2hlY2s6QWRkcjgKKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGliYy0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgZnVuOl9fbGliY19kbG9wZW5fbW9kZQorfQorCit7CisgICA8c3VwcHJlc3Npb24gZm9yIGdsaWJjIDIuNyBvbiBkZWJpYW4+CisgICBNZW1jaGVjazpDb25kCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCisgICBmdW46ZGxvcGVuCit9CisKK3sKKyAgIDxzdXBwcmVzc2lvbiBmb3IgZ2xpYmMgMi43IG9uIGRlYmlhbj4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KKyAgIGZ1bjpkbG9wZW4KK30KKworeworICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gZGViaWFuPgorICAgTWVtY2hlY2s6QWRkcjQKKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KKyAgIGZ1bjpkbG9wZW4KK30KKworeworICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gZGViaWFuPgorICAgTWVtY2hlY2s6QWRkcjQKKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCisgICBmdW46ZGxvcGVuCit9CisKK3sKKyAgIDxzdXBwcmVzc2lvbiBmb3IgZ2xpYmMgMi43IG9uIGRlYmlhbj4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KKyAgIGZ1bjpkbG9wZW4KK30KKworeworICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gZGViaWFuPgorICAgTWVtY2hlY2s6Q29uZAorICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbworICAgZnVuOmRsb3BlbgorfQorCit7CisgICA8c3VwcHJlc3Npb24gZm9yIGdsaWJjIDIuNyBvbiBkZWJpYW4+CisgICBNZW1jaGVjazpBZGRyNAorICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbworICAgZnVuOmRsb3BlbgorfQorCit7CisgICA8c3VwcHJlc3Npb24gZm9yIGdsaWJjIDIuNyBvbiBkZWJpYW4+CisgICBNZW1jaGVjazpBZGRyNAorICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KKyAgIGZ1bjpkbG9wZW4KK30KKworeworICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gZGViaWFuPgorICAgTWVtY2hlY2s6Q29uZAorICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbworICAgZnVuOmRsb3BlbgorfQorCit7CisgICA8c3VwcHJlc3Npb24gZm9yIGdsaWJjIDIuNyBvbiBkZWJpYW4+CisgICBNZW1jaGVjazpDb25kCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCisgICBmdW46ZGxvcGVuCit9CisKK3sKKyAgIDxzdXBwcmVzc2lvbiBmb3IgZ2xpYmMgMi43IG9uIGRlYmlhbj4KKyAgIE1lbWNoZWNrOkFkZHI0CisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbworICAgZnVuOmRsb3BlbgorfQorCisjIHN1cHByZXNzaW9uIGZvciBhIGdsaWJjIGJ1ZzoKKyMgaHR0cDovL3ZhbGdyaW5kLm9yZy9kb2NzL21hbnVhbC9mYXEuaHRtbCNmYXEuZXhpdF9lcnJvcnM+Cit7CisgICA8V29ya2Fyb3VuZCBmb3IgYSBnbGliYyBidWc+CisgICBNZW1jaGVjazpGcmVlCisgICBmdW46ZnJlZQorICAgb2JqOipsaWJjLSouc28KKyAgIGZ1bjpfX2xpYmNfZnJlZXJlcworICAgZnVuOioKKyAgIGZ1bjpfRXhpdAorfQorCisjIHNhbWUgYXMgYWJvdmUsIGp1c3Qgc28gaXQgd29ya3MgZm9yIHRwbSBvbiBndXRzeS94ODYtNjQKK3sKKyAgIDx3b3JrYXJvdW5kIGdsaWJjIGJ1ZyBvbiBndXRzeSB4ODYtNjQ+CisgICBNZW1jaGVjazpGcmVlCisgICBmdW46ZnJlZQorICAgZnVuOmZyZWVfbWVtCisgICBmdW46X19saWJjX2ZyZWVyZXMKK30KKworIyB2YWxncmluZCBkb2Vzbid0IGFsbG93IG1lIHRvIHNwZWNpZnkgYSBzdXBwcmVzc2lvbiBmb3IgQWRkcjEsIEFkZHIyLCBBZGRyNAorIyBhcyBBZGRyKiwgc28gMyBjb3BpZXMgZm9yIHRoYXQ7IGFuZCB0aGVuIDIgb2YgZWFjaCBmb3IgdGhhdCBwZXNreSBtZW1jcHkKK3sKKyAgIDxJbnZhbGlkIHJlYWQgb2Ygc2l6ZSAxLCAyLCA0IG9uIHRob21hcydzIEZDND4KKyAgIE1lbWNoZWNrOkFkZHIxCisgICBmdW46X2RsX3NpZ25hbF9lcnJvcgorICAgZnVuOl9kbF9tYXBfb2JqZWN0X2RlcHMKKyAgIGZ1bjpkbF9vcGVuX3dvcmtlcgorICAgZnVuOl9kbF9jYXRjaF9lcnJvcgorICAgZnVuOl9kbF9vcGVuCisgICBmdW46ZGxvcGVuX2RvaXQKKyAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKKyAgIGZ1bjpfZGxlcnJvcl9ydW4KKyAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMQorICAgZnVuOmdfbW9kdWxlX29wZW4KK30KKworeworICAgPEludmFsaWQgcmVhZCBvZiBzaXplIDEsIDIsIDQgb24gdGhvbWFzJ3MgRkM0PgorICAgTWVtY2hlY2s6QWRkcjIKKyAgIGZ1bjpfZGxfc2lnbmFsX2Vycm9yCisgICBmdW46X2RsX21hcF9vYmplY3RfZGVwcworICAgZnVuOmRsX29wZW5fd29ya2VyCisgICBmdW46X2RsX2NhdGNoX2Vycm9yCisgICBmdW46X2RsX29wZW4KKyAgIGZ1bjpkbG9wZW5fZG9pdAorICAgZnVuOl9kbF9jYXRjaF9lcnJvcgorICAgZnVuOl9kbGVycm9yX3J1bgorICAgZnVuOmRsb3BlbkBAR0xJQkNfMi4xCisgICBmdW46Z19tb2R1bGVfb3BlbgorfQoreworICAgPEludmFsaWQgcmVhZCBvZiBzaXplIDEsIDIsIDQgb24gdGhvbWFzJ3MgRkM0PgorICAgTWVtY2hlY2s6QWRkcjQKKyAgIGZ1bjpfZGxfc2lnbmFsX2Vycm9yCisgICBmdW46X2RsX21hcF9vYmplY3RfZGVwcworICAgZnVuOmRsX29wZW5fd29ya2VyCisgICBmdW46X2RsX2NhdGNoX2Vycm9yCisgICBmdW46X2RsX29wZW4KKyAgIGZ1bjpkbG9wZW5fZG9pdAorICAgZnVuOl9kbF9jYXRjaF9lcnJvcgorICAgZnVuOl9kbGVycm9yX3J1bgorICAgZnVuOmRsb3BlbkBAR0xJQkNfMi4xCisgICBmdW46Z19tb2R1bGVfb3BlbgorfQorCit7CisgICA8SW52YWxpZCByZWFkIG9mIHNpemUgMSwgMiwgNCBvbiB0aG9tYXMncyBGQzQ+CisgICBNZW1jaGVjazpBZGRyMQorICAgZnVuOm1lbWNweQorICAgZnVuOl9kbF9zaWduYWxfZXJyb3IKKyAgIGZ1bjpfZGxfbWFwX29iamVjdF9kZXBzCisgICBmdW46ZGxfb3Blbl93b3JrZXIKKyAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKKyAgIGZ1bjpfZGxfb3BlbgorICAgZnVuOmRsb3Blbl9kb2l0CisgICBmdW46X2RsX2NhdGNoX2Vycm9yCisgICBmdW46X2RsZXJyb3JfcnVuCisgICBmdW46ZGxvcGVuQEBHTElCQ18yLjEKKyAgIGZ1bjpnX21vZHVsZV9vcGVuCit9CisKK3sKKyAgIDxJbnZhbGlkIHJlYWQgb2Ygc2l6ZSAxLCAyLCA0IG9uIHRob21hcydzIEZDND4KKyAgIE1lbWNoZWNrOkFkZHIyCisgICBmdW46bWVtY3B5CisgICBmdW46X2RsX3NpZ25hbF9lcnJvcgorICAgZnVuOl9kbF9tYXBfb2JqZWN0X2RlcHMKKyAgIGZ1bjpkbF9vcGVuX3dvcmtlcgorICAgZnVuOl9kbF9jYXRjaF9lcnJvcgorICAgZnVuOl9kbF9vcGVuCisgICBmdW46ZGxvcGVuX2RvaXQKKyAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKKyAgIGZ1bjpfZGxlcnJvcl9ydW4KKyAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMQorICAgZnVuOmdfbW9kdWxlX29wZW4KK30KK3sKKyAgIDxJbnZhbGlkIHJlYWQgb2Ygc2l6ZSAxLCAyLCA0IG9uIHRob21hcydzIEZDND4KKyAgIE1lbWNoZWNrOkFkZHI0CisgICBmdW46bWVtY3B5CisgICBmdW46X2RsX3NpZ25hbF9lcnJvcgorICAgZnVuOl9kbF9tYXBfb2JqZWN0X2RlcHMKKyAgIGZ1bjpkbF9vcGVuX3dvcmtlcgorICAgZnVuOl9kbF9jYXRjaF9lcnJvcgorICAgZnVuOl9kbF9vcGVuCisgICBmdW46ZGxvcGVuX2RvaXQKKyAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKKyAgIGZ1bjpfZGxlcnJvcl9ydW4KKyAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMQorICAgZnVuOmdfbW9kdWxlX29wZW4KK30KKworeworICAgPEFkZHI4IG9uIEFuZHkncyBBTUQ2NCB1YnVudHUgaW4gZGxfb3Blbj4KKyAgIE1lbWNoZWNrOkFkZHI4CisgICBvYmo6L2xpYi9sZC0yLjMuKi5zbworICAgb2JqOi9saWIvbGQtMi4zLiouc28KKyAgIG9iajovbGliL2xkLTIuMy4qLnNvCisgICBvYmo6L2xpYi9sZC0yLjMuKi5zbworICAgb2JqOi9saWIvbGQtMi4zLiouc28KKyAgIG9iajovbGliL2xkLTIuMy4qLnNvCisgICBvYmo6L2xpYi9sZC0yLjMuKi5zbworICAgb2JqOi9saWIvbGliYy0yLjMuKi5zbworICAgb2JqOi9saWIvbGQtMi4zLiouc28KKyAgIGZ1bjpfZGxfb3BlbgorICAgb2JqOi9saWIvbGliZGwtMi4zLiouc28KKyAgIG9iajovbGliL2xkLTIuMy4qLnNvCit9CisKK3sKKyAgIDxDb25kaXRpb25hbCBqdW1wIG9uIEFuZHkncyBBTUQ2NCB1YnVudHU+CisgICBNZW1jaGVjazpDb25kCisgICBvYmo6L2xpYi9sZC0yLjMuKi5zbworICAgb2JqOi9saWIvbGliYy0yLjMuKi5zbworICAgb2JqOi9saWIvbGQtMi4zLiouc28KKyAgIGZ1bjpfZGxfb3BlbgorICAgb2JqOi9saWIvbGliZGwtMi4zLiouc28KKyAgIG9iajovbGliL2xkLTIuMy4qLnNvCisgICBvYmo6L2xpYi9saWJkbC0yLjMuKi5zbworICAgZnVuOmRsb3BlbgorICAgZnVuOmdfbW9kdWxlX29wZW4KKyAgIGZ1bjpnc3RfcGx1Z2luX2xvYWRfZmlsZQorICAgZnVuOmdzdF9wbHVnaW5fbG9hZF9ieV9uYW1lCisgICBmdW46Z3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQKK30KKworeworICAgPE1pa2UncyB4ODYgZGFwcGVyPgorICAgTWVtY2hlY2s6QWRkcjQKKyAgIG9iajovbGliL2xkLTIuMy42LnNvCisgICBvYmo6L2xpYi9sZC0yLjMuNi5zbworICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJjLTIuMy42LnNvCisgICBvYmo6L2xpYi9sZC0yLjMuNi5zbworICAgZnVuOl9kbF9vcGVuCisgICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmRsLTIuMy42LnNvCisgICBvYmo6L2xpYi9sZC0yLjMuNi5zbworICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJkbC0yLjMuNi5zbworICAgZnVuOmRsb3BlbgorfQorCit7CisgICA8TWlrZSdzIHg4NiBkYXBwZXI+CisgICBNZW1jaGVjazpDb25kCisgICBvYmo6L2xpYi9sZC0yLjMuNi5zbworICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJjLTIuMy42LnNvCisgICBvYmo6L2xpYi9sZC0yLjMuNi5zbworICAgZnVuOl9kbF9vcGVuCisgICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmRsLTIuMy42LnNvCisgICBvYmo6L2xpYi9sZC0yLjMuNi5zbworICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJkbC0yLjMuNi5zbworICAgZnVuOmRsb3BlbgorfQorCit7CisgICA8QW5vdGhlciBkYXBwZXIgb25lPgorICAgTWVtY2hlY2s6Q29uZAorICAgb2JqOi9saWIvbGQtMi4zLjYuc28KKyAgIG9iajovbGliL2xkLTIuMy42LnNvCisgICBvYmo6L2xpYi9sZC0yLjMuNi5zbworICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJjLTIuMy42LnNvCisgICBvYmo6L2xpYi9sZC0yLjMuNi5zbworICAgZnVuOl9kbF9vcGVuCisgICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmRsLTIuMy42LnNvCisgICBvYmo6L2xpYi9sZC0yLjMuNi5zbworICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJkbC0yLjMuNi5zbworICAgZnVuOmRsb3BlbgorfQorCisjIyMgZ2xpYiBzdXBwcmVzc2lvbnMKK3sKKyAgIDxnX3BhcnNlX2RlYnVnX3N0cmluZz4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjpnX3BhcnNlX2RlYnVnX3N0cmluZworICAgb2JqOi91c3IvbGliKi9saWJnbGliLTIuMC5zby4qCisgICBmdW46Z19zbGljZV9hbGxvYworICAgZnVuOmdfc2xpY2VfYWxsb2MwCit9CisKK3sKKyAgIDxnX3R5cGVfaW5pdCBsZWFrcz4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjoqYWxsb2MKKyAgIC4uLgorICAgZnVuOmdfdHlwZV9pbml0KgorICAgZnVuOmluaXRfcHJlCit9CisKK3sKKyAgIDxnX3R5cGVfcmVnaXN0ZXJfZnVuZGFtZW50YWwgbGVha3M+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46KmFsbG9jCisgICAuLi4KKyAgIGZ1bjpnX3R5cGVfcmVnaXN0ZXJfZnVuZGFtZW50YWwKK30KKworeworICAgPGdsaWIgMi4yMSBzdGF0aWMgdHlwZSBkYXRhPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOm1hbGxvYworICAgZnVuOnJlYWxsb2MKKyAgIGZ1bjpnX3JlYWxsb2MKKyAgIGZ1bjp0eXBlX25vZGVfYW55X25ld19XCit9CisKK3sKKyAgIDxnbGliIDIuMjEgc3RhdGljIHR5cGUgZGF0YT4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjpyZWFsbG9jCisgICBmdW46Z19yZWFsbG9jCisgICBmdW46dHlwZV9ub2RlX2FueV9uZXdfVworfQorCit7CisgICA8Z2xpYiAyLjIxIHN0YXRpYyB0eXBlIGRhdGE+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46Y2FsbG9jCisgICBmdW46Z19tYWxsb2MwCisgICBmdW46Z190eXBlX2NsYXNzX3JlZgorfQorCit7CisgICA8Z2xpYiAyLjIxIHN0YXRpYyB0eXBlIGRhdGE+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46bWFsbG9jCisgICBmdW46cmVhbGxvYworICAgZnVuOmdfcmVhbGxvYworICAgZnVuOnR5cGVfYWRkX2ZsYWdzX1cKK30KKworeworICAgPGdsaWIgMi4yMSBzdGF0aWMgdHlwZSBkYXRhPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOmNhbGxvYworICAgZnVuOmdfbWFsbG9jMAorICAgZnVuOnR5cGVfYWRkX2ZsYWdzX1cKK30KKworI3B0aHJlYWQgbWVtbGVha3MKKworeworICAgVGhyZWFkIGNyZWF0aW9uIGxlYWsKKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjpjYWxsb2MKKyAgIGZ1bjphbGxvY2F0ZV9kdHYKKyAgIGZ1bjpfZGxfYWxsb2NhdGUqCisgICBmdW46X2RsX2FsbG9jYXRlKgorICAgZnVuOl9fcHRocmVhZF9pbml0aWFsaXplX21pbmltYWwKK30KKworeworICAgVGhyZWFkIG1hbmFnZW1lbnQgbGVhaworICAgTWVtY2hlY2s6TGVhaworICAgZnVuOmNhbGxvYworICAgZnVuOmFsbG9jYXRlX2R0dgorICAgZnVuOl9kbF9hbGxvY2F0ZSoKKyAgIGZ1bjpfZGxfYWxsb2NhdGUqCisgICBmdW46X19wdGhyZWFkXyoKK30KKworeworICAgVGhyZWFkIG1hbmFnZW1lbnQgbGVhayAyCisgICBNZW1jaGVjazpMZWFrCisgICBmdW46bWVtYWxpZ24KKyAgIGZ1bjpfZGxfYWxsb2NhdGUqCisgICBmdW46X2RsX2FsbG9jYXRlKgorICAgZnVuOl9fcHRocmVhZF8qCit9CisKK3sKKyAgIHB0aHJlYWRfY3JlYXRlIFN5c2NhbGwgcGFyYW0gd3JpdGUoYnVmKSBwb2ludHMgdG8gdW5pbml0aWFsaXNlZCBieXRlKHMpCisgICBNZW1jaGVjazpQYXJhbQorICAgd3JpdGUoYnVmKQorICAgZnVuOnB0aHJlYWRfY3JlYXRlQEBHTElCQ18yLjIuNQorICAgZnVuOmdfdGhyZWFkX2NyZWF0ZSoKKworfQorCisjIG5zc19wYXJzZV8qIG1lbWxlYWsgKHVzZWQgYnkgZ19vcHRpb25fY29udGV4dF9wYXJzZSkKK3sKKyAgIG5zc19wYXJzZV8qIG1lbWxlYWsKKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjptYWxsb2MKKyAgIGZ1bjpuc3NfcGFyc2Vfc2VydmljZV9saXN0CisgICBmdW46X19uc3NfZGF0YWJhc2VfbG9va3VwCit9CisKKyMgbGlib2lsIHN1cHByZXNzaW9ucworeworICAgPGxpYm9pbCBjcHVfZmF1bHRfY2hlY2tfdHJ5PgorICAgTWVtY2hlY2s6VmFsdWU4CisgICBvYmo6L3Vzci9saWIvbGlib2lsLTAuMy5zby4wLjEuMAorICAgb2JqOi91c3IvbGliL2xpYm9pbC0wLjMuc28uMC4xLjAKKyAgIG9iajovdXNyL2xpYi9saWJvaWwtMC4zLnNvLjAuMS4wCisgICBmdW46b2lsX2NwdV9mYXVsdF9jaGVja190cnkKKyAgIGZ1bjpvaWxfdGVzdF9jaGVja19pbXBsCisgICBmdW46b2lsX2NsYXNzX29wdGltaXplCisgICBmdW46b2lsX29wdGltaXplX2FsbAorICAgZnVuOm9pbF9pbml0Cit9CisKK3sKKyAgIDxhbm5veWluZyByZWFkIGVycm9yIGluc2lkZSBkbG9wZW4gc3R1ZmYgb24gVWJ1bnR1IERhcHBlciB4ODZfNjQ+CisgICBNZW1jaGVjazpBZGRyOAorICAgb2JqOi9saWIvbGQtMi4zLjYuc28KK30KKworeworICAgPFVidW50dSBEYXBwZXIgeDg2XzY0PgorICAgTWVtY2hlY2s6UGFyYW0KKyAgIGZ1dGV4KHVhZGRyMikKKyAgIGZ1bjpwdGhyZWFkX29uY2UKKyAgIG9iajovbGliL2xpYmMtMi4zLjYuc28KKyAgIG9iajovbGliL2xpYmMtMi4zLjYuc28KKyAgIGZ1bjpzZXRsb2NhbGUKKyAgIGZ1bjppbml0X3ByZQorICAgZnVuOmdfb3B0aW9uX2NvbnRleHRfcGFyc2UKKyAgIGZ1bjpnc3RfaW5pdF9jaGVjaworICAgZnVuOmdzdF9pbml0CisgICBmdW46Z3N0X2NoZWNrX2luaXQKKyAgIGZ1bjptYWluCit9CisKK3sKKyAgIDxVYnVudHUgRGFwcGVyIHg4Nl82NCBkbG9wZW4gc3R1ZmYgYWdhaW4+CisgICBNZW1jaGVjazpDb25kCisgICBvYmo6L2xpYi9sZC0yLjMuNi5zbworICAgb2JqOi9saWIvbGQtMi4zLjYuc28KKyAgIGZ1bjpfZGxfb3BlbgorICAgb2JqOi9saWIvbGliZGwtMi4zLjYuc28KKyAgIG9iajovbGliL2xkLTIuMy42LnNvCisgICBvYmo6L2xpYi9saWJkbC0yLjMuNi5zbworICAgZnVuOmRsb3BlbgorICAgZnVuOmdfbW9kdWxlX29wZW4KKyAgIGZ1bjpnc3RfcGx1Z2luX2xvYWRfZmlsZQorfQorIyB0aGlzIGV4aXN0cyBpbiBhIGJ1bmNoIG9mIGRpZmZlcmVudCB2YXJpYXRpb25zLCBoZW5jZSB0aGUgc2hvcnQgdGFpbC90cmFjZQoreworICAgPGRsb3BlbiBpbnZhbGlkIHJlYWQgb2Ygc2l6ZSA0IHN1cHByZXNzaW9uIG9uIHRwbSdzIFVidW50dSBlZGd5L3g4Nj4KKyAgIE1lbWNoZWNrOkFkZHI0CisgICBvYmo6L2xpYi9sZC0yLjQuc28KKyAgIG9iajovbGliL2xkLTIuNC5zbworfQoreworICAgPGFuZCB0aGUgc2FtZSBmb3IgNjRiaXQgc3lzdGVtcz4KKyAgIE1lbWNoZWNrOkFkZHI4CisgICBvYmo6L2xpYi9sZC0yLjQuc28KKyAgIG9iajovbGliL2xkLTIuNC5zbworfQorCisjIE1vcmUgZWRneSBzdXBwcmVzc2lvbnMgKE1pa2UpCit7CisgICA8ZGxvcGVuIENvbmRpdGlvbiBqdW1wIHN1cHByZXNzaW9ucyBmb3IgVWJ1bnR1IEVkZ3kveDg2PgorICAgTWVtY2hlY2s6Q29uZAorICAgb2JqOi9saWIvbGQtMi40LnNvCisgICBvYmo6L2xpYi9sZC0yLjQuc28KKyAgIG9iajovbGliL2xkLTIuNC5zbworICAgb2JqOi9saWIvbGQtMi40LnNvCisgICBmdW46ZGxvcGVuX2RvaXQKKyAgIG9iajovbGliL2xkLTIuNC5zbworICAgZnVuOl9kbGVycm9yX3J1bgorICAgZnVuOmRsb3BlbkBAR0xJQkNfMi4xCit9CisKK3sKKyAgIDxkbG9wZW4gQ29uZGl0aW9uIGp1bXAgc3VwcHJlc3Npb25zIGZvciBVYnVudHUgRWRneS94ODY+CisgICBNZW1jaGVjazpDb25kCisgICBvYmo6L2xpYi9sZC0yLjQuc28KKyAgIG9iajovbGliL2xkLTIuNC5zbworICAgb2JqOi9saWIvbGQtMi40LnNvCisgICBvYmo6L2xpYi9sZC0yLjQuc28KKyAgIG9iajovbGliL2xkLTIuNC5zbworICAgb2JqOi9saWIvbGQtMi40LnNvCisgICBmdW46ZGxvcGVuX2RvaXQKKyAgIG9iajovbGliL2xkLTIuNC5zbworICAgZnVuOl9kbGVycm9yX3J1bgorICAgZnVuOmRsb3BlbkBAR0xJQkNfMi4xCit9CisKK3sKKyAgIDxkbG9wZW4gQ29uZGl0aW9uIGp1bXAgc3VwcHJlc3Npb25zIGZvciBVYnVudHUgRWRneS94ODY+CisgICBNZW1jaGVjazpDb25kCisgICBvYmo6L2xpYi9sZC0yLjQuc28KKyAgIG9iajovbGliL2xkLTIuNC5zbworICAgb2JqOi9saWIvbGQtMi40LnNvCisgICBmdW46ZG9fc3ltCisgICBmdW46X2RsX3N5bQorfQorCisjIFRoaXMgb25lJ3Mgb3Zlcmx5IGdlbmVyYWwsIGJ1dCB0aGVyZSdzIHplcm8gb3RoZXIgaW5mb3JtYXRpb24gaW4gdGhlIHN0YWNrCisjIHRyYWNlIC0ganVzdCB0aGVzZSBmaXZlIGxpbmVzIQoreworICAgPGRsb3BlbiBDb25kaXRpb24ganVtcCBzdXBwcmVzc2lvbnMgZm9yIFVidW50dSBFZGd5L3g4Nj4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIG9iajovbGliL2xkLTIuNC5zbworICAgb2JqOi9saWIvbGQtMi40LnNvCisgICBvYmo6L2xpYi9sZC0yLjQuc28KKyAgIG9iajovbGliL2xkLTIuNC5zbworICAgb2JqOi9saWIvbGQtMi40LnNvCit9CisKK3sKKyAgIDx0bHMgbGVha3Mgb24gRWRneS94ODY+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46Y2FsbG9jCisgICBvYmo6L2xpYi9sZC0yLjQuc28KKyAgIGZ1bjpfZGxfYWxsb2NhdGVfdGxzCisgICBmdW46cHRocmVhZF9jcmVhdGVAQEdMSUJDXzIuMQorfQorCisjIFRMUyBsZWFrcyBmb3IgZmVpc3R5L3g4NgoreworICAgPHRscyBsZWFrcyBvbiBGZWlzdHkveDg2PgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOmNhbGxvYworICAgZnVuOmFsbG9jYXRlX2R0dgorICAgZnVuOl9kbF9hbGxvY2F0ZV90bHMKKyAgIGZ1bjpwdGhyZWFkX2NyZWF0ZUBAR0xJQkNfMi4xCit9CisKK3sKKyAgIDxsaWJjZGlvIDAuNzYgbGVhaz4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjpjYWxsb2MKKyAgIG9iajovdXNyL2xpYi9saWJjZGlvLnNvLjYuMC4xCisgICBmdW46Y2Rpb19vcGVuX2FtX2xpbnV4CisgICBvYmo6L3Vzci9saWIvbGliY2Rpby5zby42LjAuMQorICAgZnVuOmNkaW9fb3Blbl9hbQorfQorCit7CisgICA8QWRkcjggb24gSmFuJ3MgQU1ENjQgdWJ1bnR1IEZlaXN0eSBpbiBkbF9vcGVuPgorICAgTWVtY2hlY2s6QWRkcjgKKyAgIG9iajovbGliL2xkLTIuNS5zbworfQorCit7CisgICA8Rmlyc3Qgb2YgbWFueSBBbHNhIGVycm9ycz4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjpzbmRfcGNtX2RpcmVjdF9zaG1fY3JlYXRlX29yX2Nvbm5lY3QKKyAgIGZ1bjpzbmRfcGNtX2Rzbm9vcF9vcGVuCisgICBmdW46X3NuZF9wY21fZHNub29wX29wZW4KKyAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKKyAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKKyAgIGZ1bjpzbmRfcGNtX29wZW5fc2xhdmUKKyAgIGZ1bjpfc25kX3BjbV9wbHVnX29wZW4KKyAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKKyAgIGZ1bjpzbmRfcGNtX29wZW5fc2xhdmUKKyAgIGZ1bjpfc25kX3BjbV9hc3ltX29wZW4KKyAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKKyAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKK30KKworeworICAgPGFsc2EgZXJyb3I+CisgICBNZW1jaGVjazpDb25kCisgICBmdW46c25kKl9wY21faHdfcGFyYW1fc2V0X25lYXIKK30KKworeworICAgPGFsc2EgZXJyb3I+CisgICBNZW1jaGVjazpDb25kCisgICAuLi4KKyAgIGZ1bjpzbmQqX3BjbV9od19wYXJhbV9zZXRfbmVhcgorfQorCit7CisgICA8YWxzYSBlcnJvcj4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKKyAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKKyAgIGZ1bjpzbmRfcGNtX2Nsb3NlCisgICBvYmo6LypsaWIvbGliYXNvdW5kLnNvLjIuMC4wCit9Cit7CisgICA8YWxzYSBlcnJvcj4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjpzbmRfcGNtX2RpcmVjdF9zaG1fY3JlYXRlX29yX2Nvbm5lY3QKKyAgIGZ1bjpzbmRfcGNtX2RtaXhfb3BlbgorICAgZnVuOl9zbmRfcGNtX2RtaXhfb3BlbgorICAgb2JqOi8qbGliL2xpYmFzb3VuZC5zby4yLjAuMAorICAgb2JqOi8qbGliL2xpYmFzb3VuZC5zby4yLjAuMAorICAgZnVuOnNuZF9wY21fb3Blbl9zbGF2ZQorICAgZnVuOl9zbmRfcGNtX3NvZnR2b2xfb3BlbgorICAgb2JqOi8qbGliL2xpYmFzb3VuZC5zby4yLjAuMAorICAgZnVuOnNuZF9wY21fb3Blbl9zbGF2ZQorICAgZnVuOl9zbmRfcGNtX3BsdWdfb3BlbgorICAgb2JqOi8qbGliL2xpYmFzb3VuZC5zby4yLjAuMAorICAgZnVuOnNuZF9wY21fb3Blbl9zbGF2ZQorICAgZnVuOl9zbmRfcGNtX2FzeW1fb3BlbgorICAgb2JqOi8qbGliL2xpYmFzb3VuZC5zby4yLjAuMAorICAgb2JqOi8qbGliL2xpYmFzb3VuZC5zby4yLjAuMAorfQoreworICAgPGFsc2EgZXJyb3I+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46bWFsbG9jCisgICBmdW46c3RyZHVwCisgICBmdW46c25kX2Rsb2JqX2NhY2hlX2FkZAorICAgb2JqOi8qbGliL2xpYmFzb3VuZC5zby4yLjAuMAorICAgZnVuOnNuZF9wY21fb3Blbl9zbGF2ZQorICAgZnVuOnNuZF9wY21fZHNub29wX29wZW4KKyAgIGZ1bjpfc25kX3BjbV9kc25vb3Bfb3BlbgorICAgb2JqOi8qbGliL2xpYmFzb3VuZC5zby4yLjAuMAorICAgb2JqOi8qbGliL2xpYmFzb3VuZC5zby4yLjAuMAorICAgZnVuOnNuZF9wY21fb3Blbl9zbGF2ZQorICAgZnVuOl9zbmRfcGNtX3BsdWdfb3BlbgorICAgb2JqOi8qbGliL2xpYmFzb3VuZC5zby4yLjAuMAorICAgZnVuOnNuZF9wY21fb3Blbl9zbGF2ZQorICAgZnVuOl9zbmRfcGNtX2FzeW1fb3BlbgorICAgb2JqOi8qbGliL2xpYmFzb3VuZC5zby4yLjAuMAorICAgb2JqOi8qbGliL2xpYmFzb3VuZC5zby4yLjAuMAorfQorIyBDYXRjaCBhYm91dCAxNSB2YXJpYXRpb25zIG9uIGluc2VydGluZyBpbmZvIGludG8gYW4gQUxTQQorIyBpbnRlcm5hbCBjYWNoZQoreworICAgPGFsc2EgZXJyb3I+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46bWFsbG9jCisgICAuLi4KKyAgIGZ1bjpzbmQqX2Rsb2JqX2NhY2hlX2FkZAorICAgb2JqOi8qbGliKi9saWJhc291bmQuc28uMi4wLjAKK30KKworeworICAgPGFsc2EgbGVhayBpbiBsb2FkaW5nIGNvbmZpZ3VyYXRpb24+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46KmFsbG9jCisgICAuLi4KKyAgIGZ1bjpzbmRfcGNtX29wZW5fY29uZgorfQorCit7CisgICA8YWxzYSBsZWFrIHNuZF9jb25maWdfaG9va19sb2FkPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOiphbGxvYworICAgb2JqOi8qbGliKi9saWJhc291bmQuc28uMi4wLjAKKyAgIC4uLgorICAgZnVuOnNuZF9jb25maWdfaG9va19sb2FkCit9CisKK3sKKyAgIDxhbHNhIGxlYWsgc25kX2NvbmZpZ191cGRhdGVfcj4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjoqYWxsb2MKKyAgIG9iajovKmxpYiovbGliYXNvdW5kLnNvLjIuMC4wCisgICAuLi4KKyAgIGZ1bjpzbmRfY29uZmlnX3VwZGF0ZV9yCisgICBmdW46c25kX2NvbmZpZ191cGRhdGUKK30KK3sKKyAgIDxhbHNhIGxlYWsgc25kX2NvbmZpZ191cGRhdGVfcj4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjoqYWxsb2MKKyAgIGZ1bjpzdHJkdXAKKyAgIC4uLgorICAgZnVuOnNuZF9jb25maWdfdXBkYXRlX3IKKyAgIGZ1bjpzbmRfY29uZmlnX3VwZGF0ZQorfQoreworICAgPG5zcyBsb29rdXAgd2l0aGluIEFMU0E+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46bWFsbG9jCisgICBvYmo6L2xpYi9saWJjKi5zbworICAgZnVuOl9fbnNzX2RhdGFiYXNlX2xvb2t1cAorICAgb2JqOioKKyAgIG9iajoqCisgICBmdW46Z2V0Z3JuYW1fcgorICAgZnVuOmdldGdybmFtCisgICBmdW46c25kX3BjbV9kaXJlY3RfcGFyc2Vfb3Blbl9jb25mCit9CisKK3sKKyAgIDxsaWJ4Y2IgbGVhayBvbiBVYnVudHUgRmVpc3R5PgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOmNhbGxvYworICAgZnVuOl9YQ0JJbml0RGlzcGxheUxvY2sKKyAgIGZ1bjpYT3BlbkRpc3BsYXkKK30KKworIyBHQ29uZiBpbnRlcm5hbCBpbml0aWFsaXNhdGlvbnMgcmVsYXRlZCB0byBnZXR0aW5nIHRoZSBkZWZhdWx0IGNsaWVudC4KK3sKKyAgIDxPcmJpdCBzb21ldGhpbmcgb3Igb3RoZXI+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46Y2FsbG9jCisgICBmdW46Z19tYWxsb2MwCisgICBmdW46T1JCaXRfYWxsb2NfdGN2YWwKKyAgIG9iajovdXNyL2xpYi9saWJPUkJpdC0yLnNvLioKKyAgIGZ1bjpPUkJpdF9kZW1hcnNoYWxfSU9SCisgICBmdW46T1JCaXRfZGVtYXJzaGFsX29iamVjdAorICAgZnVuOkNPUkJBX09SQl9zdHJpbmdfdG9fb2JqZWN0CisgICBvYmo6L3Vzci9saWIvbGliZ2NvbmYtMi5zby4qCisgICBmdW46Z2NvbmZfZ2V0X2N1cnJlbnRfbG9ja19ob2xkZXIKKyAgIGZ1bjpnY29uZl9hY3RpdmF0ZV9zZXJ2ZXIKKyAgIG9iajovdXNyL2xpYi9saWJnY29uZi0yLnNvLioKKyAgIG9iajovdXNyL2xpYi9saWJnY29uZi0yLnNvLioKKyAgIGZ1bjpnY29uZl9lbmdpbmVfZ2V0X2RlZmF1bHQKK30KK3sKKyAgIDxnY29uZiBpbnRlcm5hbCBsZWFrPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOmNhbGxvYworICAgZnVuOmdfbWFsbG9jMAorICAgZnVuOk9SQml0X2FsbG9jX3RjdmFsCisgICBvYmo6KgorICAgZnVuOlBvcnRhYmxlU2VydmVyX1BPQV9zZXJ2YW50X3RvX3JlZmVyZW5jZQorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOmdjb25mX2VuZ2luZV9nZXRfZGVmYXVsdAorfQoreworICAgPGdjb25mIGludGVybmFsIGxlYWs+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46Y2FsbG9jCisgICBmdW46Z19tYWxsb2MwCisgICBmdW46T1JCaXRfYWxsb2NfdGN2YWwKKyAgIG9iajovdXNyL2xpYi9saWJPUkJpdC0yLnNvLioKKyAgIGZ1bjpPUkJpdF9kZW1hcnNoYWxfSU9SCisgICBmdW46T1JCaXRfZGVtYXJzaGFsX29iamVjdAorICAgZnVuOkNPUkJBX09SQl9zdHJpbmdfdG9fb2JqZWN0CisgICBvYmo6L3Vzci9saWIvbGliZ2NvbmYtMi5zby4qCisgICBmdW46Z2NvbmZfZ2V0X2N1cnJlbnRfbG9ja19ob2xkZXIKKyAgIGZ1bjpnY29uZl9hY3RpdmF0ZV9zZXJ2ZXIKKyAgIG9iajovdXNyL2xpYi9saWJnY29uZi0yLnNvLioKKyAgIG9iajovdXNyL2xpYi9saWJnY29uZi0yLnNvLioKKyAgIGZ1bjpnY29uZl9lbmdpbmVfZ2V0X2RlZmF1bHQKK30KK3sKKyAgIDxnY29uZiBpbnRlcm5hbCBpbml0aWFsaXNhdGlvbj4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjpjYWxsb2MKKyAgIGZ1bjpnX21hbGxvYzAKKyAgIGZ1bjpPUkJpdF9hbGxvYyoKKyAgIGZ1bjoqCisgICBmdW46T1JCaXRfZGVtYXJzaGFsX0lPUgorICAgZnVuOk9SQml0X2RlbWFyc2hhbF9vYmplY3QKKyAgIGZ1bjpPUkJpdF9kZW1hcnNoYWxfdmFsdWUKKyAgIGZ1bjoqCisgICBmdW46T1JCaXRfc21hbGxfaW52b2tlX3N0dWIKKyAgIGZ1bjpDb25maWdTZXJ2ZXJfZ2V0X2RlZmF1bHRfZGF0YWJhc2UKKyAgIGZ1bjoqCisgICBmdW46Z2NvbmZfZW5naW5lX2dldF9kZWZhdWx0Cit9Cit7CisgICA8Z2NvbmYgaW50ZXJuYWwgaW5pdD4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjpjYWxsb2MKKyAgIGZ1bjpnX21hbGxvYzAKKyAgIGZ1bjpPUkJpdF9hbGxvYyoKKyAgIGZ1bjoqCisgICBmdW46SU9QX2dlbmVyYXRlX3Byb2ZpbGVzCisgICBmdW46T1JCaXRfbWFyc2hhbF9vYmplY3QKKyAgIGZ1bjpPUkJpdF9tYXJzaGFsX3ZhbHVlCisgICBmdW46KgorICAgZnVuOk9SQml0X3NtYWxsX2ludm9rZV9zdHViCisgICBmdW46Q29uZmlnU2VydmVyX2FkZF9jbGllbnQKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOmdjb25mX2VuZ2luZV9nZXRfZGVmYXVsdAorfQoreworICAgPGdjb25mIGludGVybmFsIGluaXQ+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46Y2FsbG9jCisgICBmdW46Z19tYWxsb2MwCisgICBmdW46T1JCaXRfYWxsb2NfYnlfdGMKKyAgIGZ1bjoqCisgICBmdW46UG9ydGFibGVTZXJ2ZXJfUE9BX3NlcnZhbnRfdG9fcmVmZXJlbmNlCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46Z2NvbmZfZW5naW5lX2dldF9kZWZhdWx0Cit9Cit7CisgICA8Z2NvbmYgaW50ZXJuYWwgaW5pdD4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjpjYWxsb2MKKyAgIGZ1bjpnX21hbGxvYzAKKyAgIGZ1bjpPUkJpdF9hbGxvY19ieV90YworICAgb2JqOi91c3IvbGliL2xpYk9SQml0LTIuc28uKgorICAgZnVuOk9SQml0X2RlbWFyc2hhbF9JT1IKKyAgIGZ1bjpPUkJpdF9kZW1hcnNoYWxfb2JqZWN0CisgICBmdW46Q09SQkFfT1JCX3N0cmluZ190b19vYmplY3QKKyAgIG9iajovdXNyL2xpYi9saWJnY29uZi0yLnNvLioKKyAgIGZ1bjpnY29uZl9nZXRfY3VycmVudF9sb2NrX2hvbGRlcgorICAgZnVuOmdjb25mX2FjdGl2YXRlX3NlcnZlcgorICAgb2JqOi91c3IvbGliL2xpYmdjb25mLTIuc28uKgorICAgb2JqOi91c3IvbGliL2xpYmdjb25mLTIuc28uKgorICAgZnVuOmdjb25mX2VuZ2luZV9nZXRfZGVmYXVsdAorfQorCit7CisgICA8aW5zZXJ0IGEgc3VwcHJlc3Npb24gbmFtZSBoZXJlPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOmNhbGxvYworICAgZnVuOmdfbWFsbG9jMAorICAgZnVuOk9SQml0X2FsbG9jKgorICAgZnVuOioKKyAgIGZ1bjpPUkJpdF9kZW1hcnNoYWxfSU9SCisgICBmdW46T1JCaXRfZGVtYXJzaGFsX29iamVjdAorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46Z2NvbmZfYWN0aXZhdGVfc2VydmVyCit9CisKKyMgU29tZSBsaWJPUkJpdC9ib25vYm8gaW5pdGlhbGlzYXRpb24gc3R1ZmYKK3sKKyAgIDxib25vYm8gaW5pdD4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjptYWxsb2MKKyAgIGZ1bjpnX21hbGxvYworICAgZnVuOk9SQml0X2FsbG9jX3N0cmluZworICAgZnVuOkNPUkJBX3N0cmluZ19kdXAKKyAgIGZ1bjpCb25vYm9fQWN0aXZhdGlvbkVudlZhbHVlX3NldAorICAgZnVuOmJvbm9ib19hY3RpdmF0aW9uX2luaXRfYWN0aXZhdGlvbl9lbnYKKyAgIGZ1bjpib25vYm9fYWN0aXZhdGlvbl9vcmJfaW5pdAorICAgZnVuOmJvbm9ib19hY3RpdmF0aW9uX2luaXQKK30KK3sKKyAgIDxib25vYm8gaW5pdD4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjpjYWxsb2MKKyAgIGZ1bjpnX21hbGxvYzAKKyAgIGZ1bjpPUkJpdF9hbGxvYyoKKyAgIGZ1bjpPUkJpdF9zbWFsbF9hbGxvYyoKKyAgIG9iajovdXNyL2xpYi9saWJPUkJpdC0yLnNvKgorICAgZnVuOlBvcnRhYmxlU2VydmVyX1BPQV9zZXJ2YW50X3RvX3JlZmVyZW5jZQorICAgb2JqOi91c3IvbGliL2xpYmJvbm9iby0yLnNvKgorfQoreworICAgPGJvbm9ibyBpbml0PgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOmNhbGxvYworICAgZnVuOmdfbWFsbG9jMAorICAgZnVuOk9SQml0X2FsbG9jX3RjdmFsCisgICBmdW46T1JCaXRfc21hbGxfYWxsb2NidWYKKyAgIGZ1bjpPUkJpdF9hZGFwdG9yX3NldHVwCisgICBvYmo6L3Vzci9saWIvbGliT1JCaXQtMi5zbyoKKyAgIGZ1bjpPUkJpdF9QT0Ffc2V0dXBfcm9vdAorICAgZnVuOk9SQml0X2luaXRfaW50ZXJuYWxzCisgICBmdW46Q09SQkFfT1JCX2luaXQKK30KK3sKKyAgIDxib25vYm8gaW5pdCAtIG1vcmUgcmVjZW50IHZhcmlhbnQgb2YgYWJvdmU+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46Y2FsbG9jCisgICBmdW46Z19tYWxsb2MwCisgICBmdW46T1JCaXRfYWxsb2NfdGN2YWwKKyAgIGZ1bjpPUkJpdF9hZGFwdG9yX3NldHVwCisgICBmdW46KgorICAgZnVuOk9SQml0X1BPQV9zZXR1cF9yb290CisgICBmdW46T1JCaXRfaW5pdF9pbnRlcm5hbHMKKyAgIGZ1bjpDT1JCQV9PUkJfaW5pdAorfQoreworICAgPGJvbm9ibyBpbml0PgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOmNhbGxvYworICAgZnVuOmdfbWFsbG9jMAorICAgZnVuOk9SQml0X2FsbG9jKgorICAgZnVuOk9SQml0X3NtYWxsX2FsbG9jYnVmCisgICBmdW46Ym9ub2JvX2FjdGl2YXRpb25faW5pdF9hY3RpdmF0aW9uX2VudgorICAgZnVuOmJvbm9ib19hY3RpdmF0aW9uX29yYl9pbml0CisgICBmdW46Ym9ub2JvX2FjdGl2YXRpb25faW5pdAorfQorCisjIE1vcmUgR0NvbmYgc3R1ZmYgZnJvbSB0aGUgRkM1IGJ1aWxkYm90LCBtb3N0bHkgdmFyaWF0aW9ucyBvbiB0aGUKKyMgYWJvdmUgc3RhY2sgdHJhY2VzCit7CisgICA8aW5jb21wbGV0ZWx5IGluaXRpYWxpc2VkIE9SQml0IGJ1ZmZlcj4KKyAgIE1lbWNoZWNrOlBhcmFtCisgICB3cml0ZXYodmVjdG9yWy4uLl0pCisgICBmdW46d3JpdGV2CisgICBvYmo6L3Vzci9saWIvbGliT1JCaXQtMi5zbyoKKyAgIGZ1bjpsaW5rX2Nvbm5lY3Rpb25fd3JpdGV2CisgICBmdW46Z2lvcF9zZW5kX2J1ZmZlcl93cml0ZQorICAgb2JqOi91c3IvbGliL2xpYk9SQml0LTIuc28qCisgICBmdW46T1JCaXRfc21hbGxfaW52b2tlX3N0dWIKKyAgIGZ1bjpPUkJpdF9zbWFsbF9pbnZva2Vfc3R1Yl9uCisgICBmdW46T1JCaXRfY19zdHViX2ludm9rZQorICAgZnVuOkNvbmZpZ1NlcnZlcl9waW5nCisgICBmdW46Z2NvbmZfYWN0aXZhdGVfc2VydmVyCisgICBvYmo6L3Vzci9saWIvbGliZ2NvbmYtMi5zbyoKKyAgIG9iajovdXNyL2xpYi9saWJnY29uZi0yLnNvKgorICAgZnVuOmdjb25mX2VuZ2luZV9nZXRfZGVmYXVsdAorfQoreworICAgPGdjb25mIGluaXQ+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46Y2FsbG9jCisgICBmdW46Z19tYWxsb2MwCisgICBmdW46T1JCaXRfYWxsb2MqCisgICBmdW46T1JCaXRfc21hbGxfYWxsb2MqCisgICBvYmo6L3Vzci9saWIvbGliT1JCaXQtMi5zbyoKKyAgIGZ1bjpQb3J0YWJsZVNlcnZlcl9QT0Ffc2VydmFudF90b19yZWZlcmVuY2UKKyAgIG9iajovdXNyL2xpYi9saWJnY29uZi0yLnNvKgorICAgb2JqOi91c3IvbGliL2xpYmdjb25mLTIuc28qCisgICBvYmo6L3Vzci9saWIvbGliZ2NvbmYtMi5zbyoKKyAgIGZ1bjpnY29uZl9lbmdpbmVfZ2V0X2RlZmF1bHQKK30KK3sKKyAgIDxnY29uZiBpbml0PgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOmNhbGxvYworICAgZnVuOmdfbWFsbG9jMAorICAgZnVuOk9SQml0X2FsbG9jKgorICAgZnVuOk9SQml0X3NtYWxsX2FsbG9jCisgICBvYmo6L3Vzci9saWIvbGliT1JCaXQtMi5zbyoKKyAgIGZ1bjpPUkJpdF9kZW1hcnNoYWxfSU9SCisgICBmdW46T1JCaXRfZGVtYXJzaGFsX29iamVjdAorICAgZnVuOkNPUkJBX09SQl9zdHJpbmdfdG9fb2JqZWN0CisgICBvYmo6L3Vzci9saWIvbGliZ2NvbmYtMi5zbyoKKyAgIGZ1bjpnY29uZl9nZXRfY3VycmVudF9sb2NrX2hvbGRlcgorICAgZnVuOmdjb25mX2FjdGl2YXRlX3NlcnZlcgorICAgb2JqOi91c3IvbGliL2xpYmdjb25mLTIuc28qCisgICBvYmo6L3Vzci9saWIvbGliZ2NvbmYtMi5zbyoKKyAgIGZ1bjpnY29uZl9lbmdpbmVfZ2V0X2RlZmF1bHQKK30KK3sKKyAgIDxnY29uZiBpbml0PgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOmNhbGxvYworICAgZnVuOmdfbWFsbG9jMAorICAgZnVuOk9SQml0X2FsbG9jKgorICAgZnVuOk9SQml0X3NtYWxsX2FsbG9jKgorICAgb2JqOi91c3IvbGliL2xpYk9SQml0LTIuc28qCisgICBmdW46T1JCaXRfZGVtYXJzaGFsX0lPUgorICAgZnVuOk9SQml0X2RlbWFyc2hhbF9vYmplY3QKKyAgIGZ1bjpDT1JCQV9PUkJfc3RyaW5nX3RvX29iamVjdAorICAgb2JqOi91c3IvbGliL2xpYmdjb25mLTIuc28qCisgICBmdW46Z2NvbmZfZ2V0X2N1cnJlbnRfbG9ja19ob2xkZXIKKyAgIGZ1bjpnY29uZl9hY3RpdmF0ZV9zZXJ2ZXIKKyAgIG9iajovdXNyL2xpYi9saWJnY29uZi0yLnNvKgorICAgb2JqOi91c3IvbGliL2xpYmdjb25mLTIuc28qCisgICBmdW46Z2NvbmZfZW5naW5lX2dldF9kZWZhdWx0Cit9Cit7CisgICA8Ym9ub2JvIGluaXQ+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46Y2FsbG9jCisgICBmdW46Z19tYWxsb2MwCisgICBmdW46T1JCaXRfYWxsb2MqCisgICBmdW46T1JCaXRfc21hbGxfYWxsb2MqCisgICBvYmo6L3Vzci9saWIvbGliT1JCaXQtMi5zbyoKKyAgIGZ1bjpPUkJpdF9kZW1hcnNoYWxfSU9SCisgICBmdW46T1JCaXRfZGVtYXJzaGFsX29iamVjdAorICAgZnVuOk9SQml0X2RlbWFyc2hhbF92YWx1ZQorICAgb2JqOi91c3IvbGliL2xpYk9SQml0LTIuc28qCisgICBmdW46T1JCaXRfc21hbGxfaW52b2tlX3N0dWIKKyAgIGZ1bjpPUkJpdF9zbWFsbF9pbnZva2Vfc3R1Yl9uCisgICBmdW46T1JCaXRfY19zdHViX2ludm9rZQorICAgZnVuOkNvbmZpZ1NlcnZlcl9nZXRfZGVmYXVsdF9kYXRhYmFzZQorICAgb2JqOi91c3IvbGliL2xpYmdjb25mLTIuc28qCisgICBmdW46Z2NvbmZfZW5naW5lX2dldF9kZWZhdWx0Cit9Cit7CisgICA8Z2NvbmYgaW5pdD4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjpjYWxsb2MKKyAgIGZ1bjpnX21hbGxvYzAKKyAgIGZ1bjpPUkJpdF9hbGxvYyoKKyAgIGZ1bjpPUkJpdF9zbWFsbF9hbGxvYyoKKyAgIG9iajovdXNyL2xpYi9saWJPUkJpdC0yLnNvKgorICAgZnVuOk9SQml0X09BT2JqZWN0X29iamVjdF90b19vYmprZXkKKyAgIGZ1bjpJT1BfZ2VuZXJhdGVfcHJvZmlsZXMKKyAgIGZ1bjpPUkJpdF9tYXJzaGFsX29iamVjdAorICAgZnVuOk9SQml0X21hcnNoYWxfdmFsdWUKKyAgIG9iajovdXNyL2xpYi9saWJPUkJpdC0yLnNvKgorICAgZnVuOk9SQml0X3NtYWxsX2ludm9rZV9zdHViCisgICBmdW46T1JCaXRfc21hbGxfaW52b2tlX3N0dWJfbgorICAgZnVuOk9SQml0X2Nfc3R1Yl9pbnZva2UKKyAgIGZ1bjpDb25maWdTZXJ2ZXJfYWRkX2NsaWVudAorICAgb2JqOi91c3IvbGliL2xpYmdjb25mLTIuc28qCisgICBvYmo6L3Vzci9saWIvbGliZ2NvbmYtMi5zbyoKKyAgIGZ1bjpnY29uZl9lbmdpbmVfZ2V0X2RlZmF1bHQKK30KK3sKKyAgIDxHTGliIGNhY2hpbmcgdGhlIGhvbWUgZGlyPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOm1hbGxvYworICAgb2JqOipsaWJjLSouc28KKyAgIGZ1bjpfX25zc19kYXRhYmFzZV9sb29rdXAKKyAgIG9iajoqCisgICBvYmo6KgorICAgZnVuOmdldHB3bmFtX3IKKyAgIG9iajovdXNyL2xpYiovbGliZ2xpYi0yLjAuc28uKgorICAgZnVuOmdfZ2V0X2hvbWVfZGlyCit9Cit7CisgICA8R0xpYiBjYWNoaW5nIHRoZSB1c2VyIG5hbWU+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46bWFsbG9jCisgICBvYmo6KmxpYmMtKi5zbworICAgZnVuOl9fbnNzX2RhdGFiYXNlX2xvb2t1cAorICAgb2JqOioKKyAgIG9iajoqCisgICBmdW46Z2V0cHduYW1fcgorICAgb2JqOi91c3IvbGliKi9saWJnbGliLTIuMC5zby4qCisgICBmdW46Z19nZXRfdXNlcl9uYW1lCit9Cit7CisgICA8R0xpYiBjYWNoaW5nIHRoZSB0bXAgZGlyPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOm1hbGxvYworICAgb2JqOipsaWJjLSouc28KKyAgIGZ1bjpfX25zc19kYXRhYmFzZV9sb29rdXAKKyAgIG9iajoqCisgICBvYmo6KgorICAgZnVuOmdldHB3bmFtX3IKKyAgIG9iajovdXNyL2xpYiovbGliZ2xpYi0yLjAuc28uKgorICAgZnVuOmdfZ2V0X3RtcF9kaXIKK30KKworeworICAgPEdMaWIgY2FjaGluZyB0aGUgaG9zdCBuYW1lPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOm1hbGxvYworICAgb2JqOipsaWJjLSouc28KKyAgIGZ1bjpfX25zc19kYXRhYmFzZV9sb29rdXAKKyAgIG9iajoqCisgICBvYmo6KgorICAgZnVuOmdldHB3bmFtX3IKKyAgIG9iajovdXNyL2xpYiovbGliZ2xpYi0yLjAuc28uMC4qCisgICBmdW46Z19nZXRfaG9zdF9uYW1lCit9CisKKworIyMgU29tZSBGb250Y29uZmlnIGVycm9ycy4KK3sKKyAgIDxGaXJzdCB0aW1lIGxvYWQgb2YgYSBmb250IC0gZmVpc3R5IHg4Nl82ND4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjptYWxsb2MKKyAgIGZ1bjpGY1BhdHRlcm5PYmplY3RJbnNlcnRFbHQKKyAgIGZ1bjpGY1BhdHRlcm5PYmplY3RBZGRXaXRoQmluZGluZworICAgZnVuOkZjUGF0dGVybkFwcGVuZAorICAgZnVuOkZjRW5kRWxlbWVudAorICAgb2JqOi91c3IvbGliL2xpYmV4cGF0LnNvLioKKyAgIG9iajovdXNyL2xpYi9saWJleHBhdC5zby4qCisgICBvYmo6L3Vzci9saWIvbGliZXhwYXQuc28uKgorICAgb2JqOi91c3IvbGliL2xpYmV4cGF0LnNvLioKKyAgIGZ1bjpYTUxfUGFyc2VCdWZmZXIKKyAgIGZ1bjpGY0NvbmZpZ1BhcnNlQW5kTG9hZAorICAgZnVuOkZjQ29uZmlnUGFyc2VBbmRMb2FkCisgICBmdW46RmNQYXJzZUluY2x1ZGUKKyAgIGZ1bjpGY0VuZEVsZW1lbnQKKyAgIG9iajovdXNyL2xpYi9saWJleHBhdC5zby4qCisgICBvYmo6L3Vzci9saWIvbGliZXhwYXQuc28uKgorICAgb2JqOi91c3IvbGliL2xpYmV4cGF0LnNvLioKKyAgIG9iajovdXNyL2xpYi9saWJleHBhdC5zby4qCisgICBmdW46WE1MX1BhcnNlQnVmZmVyCisgICBmdW46RmNDb25maWdQYXJzZUFuZExvYWQKK30KK3sKKyAgIDxGaXJzdCB0aW1lIGxvYWQgb2YgYSBmb250IC0gZ2VuZXJpYz4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjoqYWxsb2MKKyAgIC4uLgorICAgZnVuOkZjSW5pdExvYWRDb25maWcKK30KKworIyBJc3N1ZXMgd2l0aCB1YnVudHUgSGFyZHksIHNhbWUgY3JhY2sgYXMgZm9yIHByZXZpb3VzIHVidW50dXMKK3sKKyAgIDx0bHMgbGVhayBnZW5lcmljIHVidW50dSBoYXJkeSB4ODY+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46Y2FsbG9jCisgICBvYmo6KgorICAgZnVuOl9kbF9hbGxvY2F0ZV90bHMKKyAgIGZ1bjpwdGhyZWFkX2NyZWF0ZUBAKgorICAgb2JqOi91c3IvbGliL2xpYmd0aHJlYWQqCisgICBmdW46Z190aHJlYWRfKgorfQorCisjIEkndmUgbWFkZSB0aGlzIHZlcnNpb24gZ2VuZXJpYywgc28gdGhhdCBpdCBjb3ZlcnMgZnV0dXJlIG1vZGlmaWNhdGlvbnMKKyMgb2YgbGlicmFyeSBuYW1lcworeworICAgPHRscyBsZWFrIGdlbmVyaWM+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46Y2FsbG9jCisgICBvYmo6KgorICAgZnVuOl9kbF9hbGxvY2F0ZV90bHMKKyAgIGZ1bjpwdGhyZWFkX2NyZWF0ZUBAKgorICAgZnVuOmdfdGhyZWFkXyoKK30KKworIyBzZXJpZXMgb2YgaW52YWxpZCByZWFkIG9mIHNpemUgNCBpbiBnX21vZHVsZV9vcGVuIGZvciB1YnVudHUKKyMgaGFyZHkgeDg2LzMyYml0Cit7CisgICA8aW52YWxpZCByZWFkIG9mIHNpemUgNCB3aXRoaW4gPGdfbW9kdWxlX29wZW4+CisgICBNZW1jaGVjazpBZGRyNAorICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJkbC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJkbC0yLjcuc28KKyAgIGZ1bjpkbG9wZW4KKyAgIGZ1bjpnX21vZHVsZV9vcGVuCisgICBmdW46Z3N0X3BsdWdpbl9sb2FkXyoKK30KKworeworICAgPGludmFsaWQgcmVhZCBvZiBzaXplIDQgd2l0aGluIDxnX21vZHVsZV9vcGVuPgorICAgTWVtY2hlY2s6QWRkcjQKKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbworICAgZnVuOmRsb3BlbgorICAgZnVuOmdfbW9kdWxlX29wZW4KKyAgIGZ1bjpnc3RfcGx1Z2luX2xvYWRfKgorfQorCit7CisgICA8aW52YWxpZCByZWFkIG9mIHNpemUgNCB3aXRoaW4gPGdfbW9kdWxlX29wZW4+CisgICBNZW1jaGVjazpBZGRyNAorICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJkbC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJkbC0yLjcuc28KKyAgIGZ1bjpkbG9wZW4KKyAgIGZ1bjpnX21vZHVsZV9vcGVuCisgICBmdW46Z3N0X3BsdWdpbl9sb2FkXyoKK30KKworeworICAgPGludmFsaWQgcmVhZCBvZiBzaXplIDQgd2l0aGluIDxnX21vZHVsZV9vcGVuPgorICAgTWVtY2hlY2s6QWRkcjQKKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJkbC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJkbC0yLjcuc28KKyAgIGZ1bjpkbG9wZW4KKyAgIGZ1bjpnX21vZHVsZV9vcGVuCisgICBmdW46Z3N0X3BsdWdpbl9sb2FkXyoKK30KKworeworICAgPGludmFsaWQgcmVhZCBvZiBzaXplIDQgd2l0aGluIDxnX21vZHVsZV9vcGVuPgorICAgTWVtY2hlY2s6QWRkcjQKKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL3Rscy9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL3Rscy9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCisgICBmdW46ZGxvcGVuCisgICBmdW46Z19tb2R1bGVfb3BlbgorICAgZnVuOmdzdF9wbHVnaW5fbG9hZCoKK30KKworeworICAgPGludmFsaWQgcmVhZCBvZiBzaXplIDQgd2l0aGluIDxnX21vZHVsZV9vcGVuPgorICAgTWVtY2hlY2s6QWRkcjQKKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL3Rscy9pNjg2L2Ntb3YvbGliYy0yLjcuc28KKyAgIGZ1bjpfZGxfc3ltCisgICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbworICAgZnVuOmRsc3ltCisgICBmdW46Z19tb2R1bGVfc3ltYm9sCisgICBmdW46Z19tb2R1bGVfb3BlbgorICAgZnVuOmdzdF9wbHVnaW5fbG9hZF8qCit9CisKKyMgc2VyaWVzIG9mIGludmFsaWQgcmVhZCBvZiBzaXplIDggaW4gZ19tb2R1bGVfb3BlbiBmb3IgdWJ1bnR1CisjIGhhcmR5IHg4Ni82NGJpdAoreworICAgPGludmFsaWQgcmVhZCBvZiBzaXplIDggd2l0aGluIDxnX21vZHVsZV9vcGVuPgorICAgTWVtY2hlY2s6QWRkcjgKKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGliZGwtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xpYmRsLTIuNy5zbworICAgZnVuOmRsb3BlbgorICAgZnVuOmdfbW9kdWxlX29wZW4KK30KKworeworICAgPGludmFsaWQgcmVhZCBvZiBzaXplIDggd2l0aGluIDxnX21vZHVsZV9vcGVuPgorICAgTWVtY2hlY2s6QWRkcjgKKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGliZGwtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xpYmRsLTIuNy5zbworICAgZnVuOmRsb3BlbgorICAgZnVuOmdfbW9kdWxlX29wZW4KK30KKworeworICAgPGludmFsaWQgcmVhZCBvZiBzaXplIDggd2l0aGluIDxnX21vZHVsZV9vcGVuPgorICAgTWVtY2hlY2s6QWRkcjgKKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xpYmRsLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9saWJkbC0yLjcuc28KKyAgIGZ1bjpkbG9wZW4KKyAgIGZ1bjpnX21vZHVsZV9vcGVuCit9CisKK3sKKyAgIDxpbnZhbGlkIHJlYWQgb2Ygc2l6ZSA4IHdpdGhpbiA8Z19tb2R1bGVfb3Blbj4KKyAgIE1lbWNoZWNrOkFkZHI4CisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xpYmRsLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9saWJkbC0yLjcuc28KKyAgIGZ1bjpkbG9wZW4KKyAgIGZ1bjpnX21vZHVsZV9vcGVuCit9CisKK3sKKyAgIDxpbnZhbGlkIHJlYWQgb2Ygc2l6ZSA4IHdpdGhpbiA8Z19tb2R1bGVfb3Blbj4KKyAgIE1lbWNoZWNrOkFkZHI4CisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGliZGwtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xpYmRsLTIuNy5zbworICAgZnVuOmRsb3BlbgorICAgZnVuOmdfbW9kdWxlX29wZW4KK30KKworeworICAgPGludmFsaWQgcmVhZCBvZiBzaXplIDggd2l0aGluIDxnX21vZHVsZV9vcGVuPgorICAgTWVtY2hlY2s6QWRkcjgKKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9saWJkbC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGliZGwtMi43LnNvCisgICBmdW46ZGxvcGVuCisgICBmdW46Z19tb2R1bGVfb3BlbgorfQorCit7CisgICA8aW52YWxpZCByZWFkIG9mIHNpemUgOCB3aXRoaW4gPGdfbW9kdWxlX29wZW4+CisgICBNZW1jaGVjazpBZGRyOAorICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9saWJjLTIuNy5zbworICAgb2JqOi9saWIvbGliZGwtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xpYmRsLTIuNy5zbworICAgZnVuOmRsc3ltCisgICBmdW46Z19tb2R1bGVfc3ltYm9sCisgICBmdW46Z19tb2R1bGVfb3BlbgorfQorCit7CisgICA8R0xpYiBjYWNoaW5nPgorICAgTWVtY2hlY2s6QWRkcjQKKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL3Rscy9pNjg2L2Ntb3YvbGliYy0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgZnVuOl9fbGliY19kbG9wZW5fbW9kZQorICAgZnVuOl9fbnNzX2xvb2t1cF9mdW5jdGlvbgorICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJjLTIuNy5zbworICAgZnVuOl9fbnNzX3Bhc3N3ZF9sb29rdXAKKyAgIGZ1bjpnZXRwd25hbV9yCit9CisKK3sKKyAgIDxHTGliIGNhY2hpbmc+CisgICBNZW1jaGVjazpBZGRyNAorICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJjLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBmdW46X19saWJjX2Rsb3Blbl9tb2RlCisgICBmdW46X19uc3NfbG9va3VwX2Z1bmN0aW9uCisgICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmMtMi43LnNvCisgICBmdW46X19uc3NfcGFzc3dkX2xvb2t1cAorICAgZnVuOmdldHB3bmFtX3IKK30KKworeworICAgPEdMaWIgY2FjaGluZz4KKyAgIE1lbWNoZWNrOkFkZHI0CisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmMtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIGZ1bjpfX2xpYmNfZGxvcGVuX21vZGUKKyAgIGZ1bjpfX25zc19sb29rdXBfZnVuY3Rpb24KKyAgIG9iajovbGliL3Rscy9pNjg2L2Ntb3YvbGlibnNzX2NvbXBhdC0yLjcuc28KKyAgIGZ1bjpfbnNzX2NvbXBhdF9nZXRwd25hbV9yCisgICBmdW46Z2V0cHduYW1fcgorfQorCit7CisgICA8R0xpYiBjYWNoaW5nPgorICAgTWVtY2hlY2s6QWRkcjQKKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL3Rscy9pNjg2L2Ntb3YvbGliYy0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgZnVuOl9fbGliY19kbG9wZW5fbW9kZQorICAgZnVuOl9fbnNzX2xvb2t1cF9mdW5jdGlvbgorICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJuc3NfY29tcGF0LTIuNy5zbworICAgZnVuOl9uc3NfY29tcGF0X2dldHB3bmFtX3IKKyAgIGZ1bjpnZXRwd25hbV9yCit9CisKK3sKKyAgIDxHTGliIGNhY2hpbmc+CisgICBNZW1jaGVjazpBZGRyOAorICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9sZC0yLjcuc28KKyAgIG9iajovbGliL2xkLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBvYmo6L2xpYi9saWJjLTIuNy5zbworICAgb2JqOi9saWIvbGQtMi43LnNvCisgICBmdW46X19saWJjX2Rsb3Blbl9tb2RlCisgICBmdW46X19uc3NfbG9va3VwX2Z1bmN0aW9uCisgICBvYmo6L2xpYi9saWJjLTIuNy5zbworICAgZnVuOmdldHB3bmFtX3IKK30KKworIyMgTGVha3MgaW4gQUxTQSAodmFyaWF0aW9ucyBvZiBsZWFrIGZyb20gc25kX2NvbmZpZ19sb2FkMSkKKworeworICAgPEFsc2EgbGVhaz4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjpjYWxsb2MKKyAgIGZ1bjpfc25kX2NvbmZpZ19tYWtlCisgICBmdW46X3NuZF9jb25maWdfbWFrZV9hZGQKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46c25kX2NvbmZpZ19sb2FkMQorfQorCit7CisgICA8QWxzYSBsZWFrPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOmNhbGxvYworICAgZnVuOl9zbmRfY29uZmlnX21ha2UKKyAgIGZ1bjpfc25kX2NvbmZpZ19tYWtlX2FkZAorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46c25kX2NvbmZpZ19sb2FkMQorfQoreworICAgPEFsc2EgbGVhaz4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjpjYWxsb2MKKyAgIGZ1bjpfc25kX2NvbmZpZ19tYWtlCisgICBmdW46X3NuZF9jb25maWdfbWFrZV9hZGQKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjpzbmRfY29uZmlnX2xvYWQxCit9Cit7CisgICA8QWxzYSBsZWFrPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOmNhbGxvYworICAgZnVuOl9zbmRfY29uZmlnX21ha2UKKyAgIGZ1bjpfc25kX2NvbmZpZ19tYWtlX2FkZAorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46c25kX2NvbmZpZ19sb2FkMQorfQorCit7CisgICA8QWxzYSBsZWFrPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOmNhbGxvYworICAgZnVuOl9zbmRfY29uZmlnX21ha2UKKyAgIGZ1bjpfc25kX2NvbmZpZ19tYWtlX2FkZAorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOnNuZF9jb25maWdfbG9hZDEKK30KKworeworICAgPEFsc2EgbGVhaz4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjpjYWxsb2MKKyAgIGZ1bjpfc25kX2NvbmZpZ19tYWtlCisgICBmdW46X3NuZF9jb25maWdfbWFrZV9hZGQKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46c25kX2NvbmZpZ19sb2FkMQorfQoreworICAgPEFsc2EgbGVhaz4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjpjYWxsb2MKKyAgIGZ1bjpfc25kX2NvbmZpZ19tYWtlCisgICBmdW46X3NuZF9jb25maWdfbWFrZV9hZGQKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOnNuZF9jb25maWdfbG9hZDEKK30KKworeworICAgPEFsc2EgbGVhaz4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjptYWxsb2MKKyAgIGZ1bjpzbmQxX2Rsb2JqX2NhY2hlX2FkZAorICAgZnVuOnNuZF9jdGxfb3Blbl9ub3VwZGF0ZQorfQorCit7CisgICA8QWxzYSBsZWFrPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOm1hbGxvYworICAgZnVuOioKKyAgIGZ1bjpzbmQxX2Rsb2JqX2NhY2hlX2FkZAorICAgZnVuOnNuZF9jdGxfb3Blbl9ub3VwZGF0ZQorfQorCit7CisgICA8QWxzYSBsZWFrPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOiphbGxvYworICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOnNuZF9jb25maWdfbG9hZDEKK30KKworeworICAgPEFsc2EgbGVhaz4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjoqYWxsb2MKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46c25kX2NvbmZpZ19sb2FkMQorfQorCit7CisgICA8QWxzYSBsZWFrPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOiphbGxvYworICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46c25kX2NvbmZpZ19sb2FkMQorfQorCit7CisgICA8QWxzYSBsZWFrPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOiphbGxvYworICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOnNuZF9jb25maWdfbG9hZDEKK30KKworeworICAgPEFsc2EgbGVhaz4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjoqYWxsb2MKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46c25kX2NvbmZpZ19sb2FkMQorfQorCit7CisgICA8QWxzYSBsZWFrPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOiphbGxvYworICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46c25kX2NvbmZpZ19sb2FkMQorfQorCit7CisgICA8QWxzYSBsZWFrPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOiphbGxvYworICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOnNuZF9jb25maWdfbG9hZDEKK30KKworeworICAgPEFsc2EgbGVhaz4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjoqYWxsb2MKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46c25kX2NvbmZpZ19sb2FkMQorfQorCisKKyMgVGhlIGZvbGxvd2luZyBhcmUgbGVha3Mgb2YgY2FwcyB0aGF0IG5lZWQgdG8gYmUgY3JlYXRlZCBkeW5hbWljYWxseQorIyBpbiB0aGUgdHlwZSByZWdpc3RyYXRpb24gb2YgdGhlIHBsdWdpbiAodXNlZCBmb3IgcGFkIHRlbXBsYXRlcykuCisKK3sKKyAgIDxMZWFrIGluIG9nbXBhcnNlcnM+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46bWFsbG9jCisgICBmdW46Z19tYWxsb2MKKyAgIGZ1bjpnX3NsaWNlX2FsbG9jCisgICBmdW46Z3N0X2NhcHNfbmV3X2VtcHR5CisgICBmdW46Z3N0X2NhcHNfbmV3X3NpbXBsZQorICAgZnVuOioKKyAgIGZ1bjpnX3R5cGVfY2xhc3NfcmVmCisgICBmdW46Z3N0X2VsZW1lbnRfcmVnaXN0ZXIKK30KKworeworICAgPExlYWsgaW4gb2dtcGFyc2Vycz4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjptYWxsb2MKKyAgIGZ1bjpnX21hbGxvYworICAgZnVuOmdfc2xpY2VfYWxsb2MKKyAgIGZ1bjpnc3RfY2Fwc19uZXdfZW1wdHkKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOmdfdHlwZV9jbGFzc19yZWYKKyAgIGZ1bjpnc3RfZWxlbWVudF9yZWdpc3RlcgorICAgZnVuOmdzdF9vZ21fcGFyc2VfcGx1Z2luX2luaXQKKyAgIGZ1bjpwbHVnaW5faW5pdAorfQorCit7CisgICA8TGVhayBpbiB2aWRlb3Rlc3RzcmM+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46bWFsbG9jCisgICBmdW46Z19tYWxsb2MKKyAgIGZ1bjpnX3NsaWNlX2FsbG9jCisgICBmdW46Z3N0X2NhcHNfbmV3X2VtcHR5CisgICBmdW46Z3N0X2NhcHNfY29weQorICAgZnVuOmdzdF92aWRlb190ZXN0X3NyY19iYXNlX2luaXQKKyAgIGZ1bjpnX3R5cGVfY2xhc3NfcmVmCisgICBmdW46Z3N0X2VsZW1lbnRfcmVnaXN0ZXIKK30KKworeworICAgPExlYWsgaW4gdmlkZW90ZXN0c3JjPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOm1hbGxvYworICAgZnVuOmdfbWFsbG9jCisgICBmdW46Z19zbGljZV9hbGxvYworICAgZnVuOmdzdF9jYXBzX25ld19lbXB0eQorICAgZnVuOmdzdF9jYXBzX2NvcHkKKyAgIGZ1bjpnc3RfdmlkZW9fdGVzdF9zcmNfZ2V0Y2FwcworICAgZnVuOmdzdF92aWRlb190ZXN0X3NyY19iYXNlX2luaXQKKyAgIGZ1bjpnX3R5cGVfY2xhc3NfcmVmCisgICBmdW46Z3N0X2VsZW1lbnRfcmVnaXN0ZXIKK30KKworeworICAgPExlYWsgaW4gZmZtcGVnY29sb3JzcGFjZT4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjptYWxsb2MKKyAgIGZ1bjpnX21hbGxvYworICAgZnVuOmdfc2xpY2VfYWxsb2MKKyAgIGZ1bjpnc3RfY2Fwc19uZXdfZW1wdHkKKyAgIGZ1bjpnc3RfZmZtcGVnY3NwX2NvZGVjdHlwZV90b19jYXBzCisgICBmdW46Z3N0X2ZmbXBlZ2NvbG9yc3BhY2VfcmVnaXN0ZXIKKyAgIGZ1bjpwbHVnaW5faW5pdAorfQorCit7CisgICA8TGVhayBpbiBmZm1wZWdvY29sb3JzcGFjZT4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjptYWxsb2MKKyAgIGZ1bjpnX21hbGxvYworICAgZnVuOmdfc2xpY2VfYWxsb2MKKyAgIGZ1bjpnc3RfY2Fwc19uZXdfZW1wdHkKKyAgIGZ1bjpnc3RfY2Fwc19jb3B5CisgICBmdW46Z3N0X2ZmbXBlZ2NvbG9yc3BhY2VfcmVnaXN0ZXIKKyAgIGZ1bjpwbHVnaW5faW5pdAorfQorCit7CisgICA8TGVhayBpbiBnc3RmZm1wZWdkZW11eD4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjptYWxsb2MKKyAgIGZ1bjpnX21hbGxvYworICAgZnVuOmdfc2xpY2VfYWxsb2MKKyAgIGZ1bjpnc3RfY2Fwc19uZXdfZW1wdHkKKyAgIGZ1bjpnc3RfY2Fwc19uZXdfYW55CisgICBmdW46Z3N0X2ZmbXBlZ2RlbXV4X3JlZ2lzdGVyCisgICBmdW46cGx1Z2luX2luaXQKK30KKworeworICAgPExlYWsgaW4gR3N0QXVkaW9GaWx0ZXIgc3ViY2xhc3Nlcz4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjptYWxsb2MKKyAgIGZ1bjpnX21hbGxvYworICAgZnVuOmdfc2xpY2VfYWxsb2MKKyAgIGZ1bjpnc3RfY2Fwc19uZXdfZW1wdHkKKyAgIGZ1bjpnc3RfY2Fwc19jb3B5CisgICBmdW46Z3N0X2F1ZGlvX2ZpbHRlcl9jbGFzc19hZGRfcGFkX3RlbXBsYXRlcworfQorCit7CisgICA8TGVhayBpbiBHc3RBdWRpb0ZpbHRlciBzdWJjbGFzc2VzLCB2YXJpYW50PgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOnJlYWxsb2MKKyAgIGZ1bjpnX3JlYWxsb2MKKyAgIGZ1bjpnX3B0cl9hcnJheV9tYXliZV9leHBhbmQKKyAgIGZ1bjpnX3B0cl9hcnJheV9hZGQKKyAgIGZ1bjpnc3RfY2Fwc19hcHBlbmQKKyAgIGZ1bjpnc3RfYXVkaW9fZmlsdGVyX2NsYXNzX2FkZF9wYWRfdGVtcGxhdGVzCit9CisKK3sKKyAgIDxMZWFrIGluIEdzdEF1ZGlvRmlsdGVyIHN1YmNsYXNzZXMsIHZhcmlhbnQ+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46bWFsbG9jCisgICBmdW46cmVhbGxvYworICAgZnVuOmdfcmVhbGxvYworICAgZnVuOmdfcHRyX2FycmF5X21heWJlX2V4cGFuZAorICAgZnVuOmdfcHRyX2FycmF5X2FkZAorICAgZnVuOmdzdF9jYXBzX2FwcGVuZAorICAgZnVuOmdzdF9hdWRpb19maWx0ZXJfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZXMKK30KKworeworICAgPExlYWsgaW4gR3N0QXVkaW9GaWx0ZXIgc3ViY2xhc3NlcywgdmFyaWFudD4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjptYWxsb2MKKyAgIGZ1bjpyZWFsbG9jCisgICBmdW46Z19yZWFsbG9jCisgICBmdW46Z19wdHJfYXJyYXlfbWF5YmVfZXhwYW5kCisgICBmdW46Z19wdHJfYXJyYXlfYWRkCisgICBmdW46Z3N0X2NhcHNfY29weQorICAgZnVuOmdzdF9hdWRpb19maWx0ZXJfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZXMKK30KKworeworICAgPExlYWsgaW4gR3N0QXVkaW9GaWx0ZXIgc3ViY2xhc3NlcywgdmFyaWFudDI+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46bWFsbG9jCisgICBmdW46Z19tYWxsb2MKKyAgIGZ1bjpnX3NsaWNlX2FsbG9jCisgICBmdW46Z19wdHJfYXJyYXlfc2l6ZWRfbmV3CisgICBmdW46Z3N0X2NhcHNfbmV3X2VtcHR5CisgICBmdW46Z3N0X2NhcHNfY29weQorICAgZnVuOmdzdF9hdWRpb19maWx0ZXJfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZXMKK30KK3sKKyAgIDxMZWFrIGluIEdzdEF1ZGlvRmlsdGVyIHN1YmNsYXNzZXMsIHZhcmlhbnQzPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOm1hbGxvYworICAgZnVuOnJlYWxsb2MKKyAgIGZ1bjpnX3JlYWxsb2MKKyAgIGZ1bjpnX2FycmF5X21heWJlX2V4cGFuZAorICAgZnVuOmdfYXJyYXlfc2l6ZWRfbmV3CisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46Z3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkKKyAgIGZ1bjpnc3Rfc3RydWN0dXJlX2NvcHkKKyAgIGZ1bjpnc3RfY2Fwc19jb3B5CisgICBmdW46Z3N0X2F1ZGlvX2ZpbHRlcl9jbGFzc19hZGRfcGFkX3RlbXBsYXRlcworfQoreworICAgPExlYWsgaW4gR3N0QXVkaW9GaWx0ZXIgc3ViY2xhc3NlcywgdmFyaWFudDQ+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46bWFsbG9jCisgICBmdW46cmVhbGxvYworICAgZnVuOmdfcmVhbGxvYworICAgZnVuOmdfYXJyYXlfbWF5YmVfZXhwYW5kCisgICBmdW46Z19hcnJheV9zaXplZF9uZXcKKyAgIGZ1bjoqCisgICBmdW46Z3N0X3N0cnVjdHVyZV9jb3B5CisgICBmdW46Z3N0X2NhcHNfY29weQorICAgZnVuOmdzdF9hdWRpb19maWx0ZXJfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZXMKK30KK3sKKyAgIDxMZWFrIGluIEdzdEF1ZGlvRmlsdGVyIHN1YmNsYXNzZXMsIHZhcmlhbnQ1PgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOm1hbGxvYworICAgZnVuOmdfbWFsbG9jCisgICBmdW46Z19zbGljZV9hbGxvYworICAgZnVuOmdfYXJyYXlfc2l6ZWRfbmV3CisgICBmdW46KgorICAgZnVuOmdzdF9zdHJ1Y3R1cmVfY29weQorICAgZnVuOmdzdF9jYXBzX2NvcHkKKyAgIGZ1bjpnc3RfYXVkaW9fZmlsdGVyX2NsYXNzX2FkZF9wYWRfdGVtcGxhdGVzCit9CisKK3sKKyAgIDxMZWFrIGluIHJpZmYtbWVkaWE+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46bWFsbG9jCisgICBmdW46Z19tYWxsb2MKKyAgIGZ1bjpnX3NsaWNlX2FsbG9jCisgICBmdW46Z3N0X2NhcHNfbmV3X2VtcHR5CisgICBmdW46Z3N0X3JpZmZfY3JlYXRlXypfdGVtcGxhdGVfY2FwcworfQoreworICAgPExlYWsgaW4gcmlmZi1tZWRpYT4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjptYWxsb2MKKyAgIGZ1bjpyZWFsbG9jCisgICBmdW46Z19yZWFsbG9jCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46Z3N0X3N0cnVjdHVyZV9jb3B5CisgICBmdW46Z3N0X2NhcHNfY29weQorICAgZnVuOmdzdF9jYXBzX2FwcGVuZAorICAgZnVuOmdzdF9yaWZmX2NyZWF0ZV8qX3RlbXBsYXRlX2NhcHMKK30KK3sKKyAgIDxMZWFrIGluIHJpZmYtbWVkaWE+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46bWFsbG9jCisgICBmdW46Z19tYWxsb2MKKyAgIGZ1bjpnX3NsaWNlX2FsbG9jCisgICBmdW46Z19hcnJheV9zaXplZF9uZXcKKyAgIGZ1bjoqCisgICBmdW46Z3N0X3N0cnVjdHVyZV9jb3B5CisgICBmdW46Z3N0X2NhcHNfY29weQorICAgZnVuOmdzdF9jYXBzX2FwcGVuZAorICAgZnVuOmdzdF9yaWZmX2NyZWF0ZV8qX3RlbXBsYXRlX2NhcHMKK30KKworIyMgTGVha3MgaW4gcGFuZ28gKGJpbGJvZWQ6IGdlbnRvbyB1bnN0YWJsZSBhbWQ2NCkKKworeworICAgPFBhbmdvIGxlYWsgLSBnZW5lcmljPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOiphbGxvYworICAgLi4uCisgICBmdW46cGFuZ29fbGF5b3V0X2dldF9waXhlbF9leHRlbnRzCit9Cit7CisgICA8aW5zZXJ0IGEgc3VwcHJlc3Npb24gbmFtZSBoZXJlPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOmNhbGxvYworICAgZnVuOmdfbWFsbG9jMAorICAgZnVuOnBhbmdvX2xhbmd1YWdlX2Zyb21fc3RyaW5nCisgICBmdW46cGFuZ29fbGFuZ3VhZ2VfZ2V0X2RlZmF1bHQKKyAgIGZ1bjpwYW5nb19jb250ZXh0X2luaXQKKyAgIGZ1bjpnX3R5cGVfY3JlYXRlX2luc3RhbmNlCisgICBmdW46Z19vYmplY3RfY29uc3RydWN0b3IKKyAgIGZ1bjpnX29iamVjdF9uZXd2CisgICBmdW46Z19vYmplY3RfbmV3X3ZhbGlzdAorICAgZnVuOmdfb2JqZWN0X25ldworICAgZnVuOnBhbmdvX2ZvbnRfbWFwX2NyZWF0ZV9jb250ZXh0Cit9CisKK3sKKyAgIDxQYW5nb0xhbmd1YWdlIGNhbiBuZXZlciBiZSBmcmVlZD4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjpjYWxsb2MKKyAgIGZ1bjpnX21hbGxvYzAKKyAgIGZ1bjpwYW5nb19sYW5ndWFnZV9mcm9tX3N0cmluZworfQorCisKKyMjIExlYWsgb2YgcHJvcGVydHlfbGlzdCBpbiBnc3RmZm1wZWdjZmcuYworIyMgVGhpcyBsaXN0IGlzIGNyZWF0ZWQgaW4gZ3N0X2ZmbXBlZ2NzcF9pbml0KCksIGNhbGxlZCBmcm9tCisjIyBnc3RfZmZtcGVnZW5jX3JlZ2lzdGVyLgoreworICAgPGluc2VydCBhIHN1cHByZXNzaW9uIG5hbWUgaGVyZT4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjptYWxsb2MKKyAgIGZ1bjpnX21hbGxvYworICAgZnVuOmdfc2xpY2VfYWxsb2MKKyAgIGZ1bjpnX2RhdGFsaXN0X2lkX3NldF9kYXRhX2Z1bGwKKyAgIGZ1bjpnc3RfZmZtcGVnX2NmZ19pbml0CisgICBmdW46Z3N0X2ZmbXBlZ2VuY19yZWdpc3RlcgorICAgZnVuOnBsdWdpbl9pbml0Cit9Cit7CisgICA8aW5zZXJ0IGEgc3VwcHJlc3Npb24gbmFtZSBoZXJlPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOm1hbGxvYworICAgZnVuOmdfbWFsbG9jCisgICBmdW46Z19zbGljZV9hbGxvYworICAgZnVuOmdfZGF0YWxpc3RfaWRfc2V0X2RhdGFfZnVsbAorICAgZnVuOmdfcGFyYW1fc3BlY19zZXRfcWRhdGFfZnVsbAorICAgZnVuOmdzdF9mZm1wZWdfY2ZnX2luaXQKKyAgIGZ1bjpnc3RfZmZtcGVnZW5jX3JlZ2lzdGVyCisgICBmdW46cGx1Z2luX2luaXQKK30KKworCit7CisgICA8aW5zZXJ0X2Ffc3VwcHJlc3Npb25fbmFtZV9oZXJlPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOiphbGxvYworICAgZnVuOioKKyAgIGZ1bjpnc3RfZmZtcGVnX2NmZ19pbml0CisgICBmdW46Z3N0X2ZmbXBlZ2VuY19yZWdpc3RlcgorfQorCisjIyBMZWFrIG9mIEdJTyBtb2R1bGUgdGhyb3VnaCBnbm9tZXZmcworCit7CisgICA8Z2lvIGxlYWs+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46bWFsbG9jCisgICBmdW46Z19tYWxsb2MKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOmdfdHlwZV9jcmVhdGVfaW5zdGFuY2UKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46Z19pb19tb2R1bGVfbmV3CisgICBmdW46Z19pb19tb2R1bGVzX2xvYWRfYWxsX2luX2RpcmVjdG9yeQorICAgZnVuOioKKyAgIGZ1bjpnZXRfZGVmYXVsdF92ZnMKK30KKworIyMgQ29uZGl0aW9uYWwganVtcCBpbiBnZXRhZGRyaW5mbyAoYmlsYm9lZCwgZ2VudG9vIH5hbWQ2NCwgRGVjIDEzIDIwMDgpCit7CisgICA8TGVhayBvZiBhZGRyaW5mbyBpbiBlc2Q+CisgICBNZW1jaGVjazpDb25kCisgICBmdW46Z2FpaF9pbmV0CisgICBmdW46Z2V0YWRkcmluZm8KK30KKworIyMgRHluYW1pYyBwYWQgdGVtcGxhdGVzIGluIG14Zm11eAoreworICAgPER5bmFtaWMgcGFkIHRlbXBsYXRlcyBpbiBteGZtdXg+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46bWFsbG9jCisgICBmdW46Z19tYWxsb2MKKyAgIGZ1bjpnX3NsaWNlX2FsbG9jCisgICBmdW46Z3N0X2NhcHNfbmV3X2VtcHR5CisgICBmdW46Z3N0X2NhcHNfZnJvbV9zdHJpbmcKKyAgIGZ1bjpteGZfKl9pbml0CisgICBmdW46cGx1Z2luX2luaXQKK30KKworIyMgV2UgZG9uJ3Qga25vdyBpZiBmZm1wZWcgZnJlZXMgdGhpcyBvciBub3QgYW5kIGJldHRlciBwYXNzIGEgY29weSBmb3Igc2FmZXR5Cit7CisgICA8aW5zZXJ0IGEgc3VwcHJlc3Npb24gbmFtZSBoZXJlPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOm1hbGxvYworICAgZnVuOmdfbWFsbG9jCisgICBmdW46Z19zdHJkdXAKKyAgIGZ1bjpnc3RfZmZtcGVnX2NmZ19maWxsX2NvbnRleHQKKyAgIGZ1bjpnc3RfZmZtcGVnZW5jX3NldGNhcHMKKyAgIGZ1bjpnc3RfcGFkX3NldF9jYXBzCit9CisKKyMjIExlYWsvb3ZlcnJlYWRzIHdpdGggZ2xpYmMtMi4xMAorCit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6VmFsdWU4CisgICBmdW46ZG9fc3ltCisgICBmdW46ZGxzeW1fZG9pdAorICAgZnVuOl9kbF9jYXRjaF9lcnJvcgorICAgZnVuOl9kbGVycm9yX3J1bgorICAgZnVuOmRsc3ltCit9Cit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6Q29uZAorICAgZnVuOmRvX3N5bQorICAgZnVuOmRsc3ltX2RvaXQKKyAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKKyAgIGZ1bjpfZGxlcnJvcl9ydW4KKyAgIGZ1bjpkbHN5bQorfQorCit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6VmFsdWU4CisgICBmdW46ZGxfb3Blbl93b3JrZXIKKyAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKKyAgIGZ1bjpfZGxfb3BlbgorICAgZnVuOmRsb3Blbl9kb2l0CisgICBmdW46X2RsX2NhdGNoX2Vycm9yCisgICBmdW46X2RsZXJyb3JfcnVuCisgICBmdW46ZGxvcGVuKgorfQorCit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6VmFsdWU4CisgICBmdW46X2RsX3JlbG9jYXRlX29iamVjdAorICAgZnVuOmRsX29wZW5fd29ya2VyCisgICBmdW46X2RsX2NhdGNoX2Vycm9yCisgICBmdW46X2RsX29wZW4KKyAgIGZ1bjpkbG9wZW5fZG9pdAorICAgZnVuOl9kbF9jYXRjaF9lcnJvcgorICAgZnVuOl9kbGVycm9yX3J1bgorICAgZnVuOmRsb3BlbioKK30KKworeworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOlZhbHVlOAorICAgZnVuOl9kbF9jaGVja19tYXBfdmVyc2lvbnMKKyAgIGZ1bjpkbF9vcGVuX3dvcmtlcgorICAgZnVuOl9kbF9jYXRjaF9lcnJvcgorICAgZnVuOl9kbF9vcGVuCisgICBmdW46ZGxvcGVuX2RvaXQKKyAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKKyAgIGZ1bjpfZGxlcnJvcl9ydW4KKyAgIGZ1bjpkbG9wZW4qCit9CisKK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpDb25kCisgICBmdW46ZGxfb3Blbl93b3JrZXIKKyAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKKyAgIGZ1bjpfZGxfb3BlbgorICAgZnVuOmRsb3Blbl9kb2l0CisgICBmdW46X2RsX2NhdGNoX2Vycm9yCisgICBmdW46X2RsZXJyb3JfcnVuCisgICBmdW46ZGxvcGVuKgorfQorCit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6Q29uZAorICAgZnVuOl9kbF9yZWxvY2F0ZV9vYmplY3QKKyAgIGZ1bjpkbF9vcGVuX3dvcmtlcgorICAgZnVuOl9kbF9jYXRjaF9lcnJvcgorICAgZnVuOl9kbF9vcGVuCisgICBmdW46ZGxvcGVuX2RvaXQKKyAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKKyAgIGZ1bjpfZGxlcnJvcl9ydW4KKyAgIGZ1bjpkbG9wZW4qCit9CisKK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpDb25kCisgICBmdW46X2RsX2NoZWNrX21hcF92ZXJzaW9ucworICAgZnVuOmRsX29wZW5fd29ya2VyCisgICBmdW46X2RsX2NhdGNoX2Vycm9yCisgICBmdW46X2RsX29wZW4KKyAgIGZ1bjpkbG9wZW5fZG9pdAorICAgZnVuOl9kbF9jYXRjaF9lcnJvcgorICAgZnVuOl9kbGVycm9yX3J1bgorICAgZnVuOmRsb3BlbioKK30KKworeworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjpfZGxfbWFwX29iamVjdCoKKyAgIGZ1bjpkbF9vcGVuX3dvcmtlcgorICAgZnVuOl9kbF9jYXRjaF9lcnJvcgorICAgZnVuOl9kbF9vcGVuCisgICBmdW46ZGxvcGVuX2RvaXQKKyAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKKyAgIGZ1bjpfZGxlcnJvcl9ydW4KKyAgIGZ1bjpkbG9wZW4qCit9CisKK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpWYWx1ZTgKKyAgIGZ1bjpfZGxfbWFwX29iamVjdCoKKyAgIGZ1bjpkbF9vcGVuX3dvcmtlcgorICAgZnVuOl9kbF9jYXRjaF9lcnJvcgorICAgZnVuOl9kbF9vcGVuCisgICBmdW46ZGxvcGVuX2RvaXQKKyAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKKyAgIGZ1bjpfZGxlcnJvcl9ydW4KKyAgIGZ1bjpkbG9wZW4qCit9CisKK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpWYWx1ZTgKKyAgIGZ1bjpfZGxfY2hlY2tfY2FsbGVyCisgICBmdW46ZGxfb3Blbl93b3JrZXIKKyAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKKyAgIGZ1bjpfZGxfb3BlbgorICAgZnVuOmRsb3Blbl9kb2l0CisgICBmdW46X2RsX2NhdGNoX2Vycm9yCisgICBmdW46X2RsZXJyb3JfcnVuCisgICBmdW46ZGxvcGVuKgorfQorCit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6Q29uZAorICAgZnVuOl9kbF9jaGVja19jYWxsZXIKKyAgIGZ1bjpkbF9vcGVuX3dvcmtlcgorICAgZnVuOl9kbF9jYXRjaF9lcnJvcgorICAgZnVuOl9kbF9vcGVuCisgICBmdW46ZGxvcGVuX2RvaXQKKyAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKKyAgIGZ1bjpfZGxlcnJvcl9ydW4KKyAgIGZ1bjpkbG9wZW4qCit9CisKK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpWYWx1ZTgKKyAgIG9iajovbGliKi9saWJjLTIuMTAuKi5zbworICAgb2JqOi9saWIqL2xpYmMtMi4xMC4qLnNvCisgICBmdW46X3ZnblVfZnJlZXJlcworfQoreworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIG9iajovbGliKi9saWJjLTIuMTAuKi5zbworICAgb2JqOi9saWIqL2xpYmMtMi4xMC4qLnNvCisgICBmdW46X3ZnblVfZnJlZXJlcworfQoreworICAgPGdsaWJjLTIuMTAgbXlzdGVyaW91cyBpbnZhbGlkIGZyZWUgb24gZXhpdD4KKyAgIE1lbWNoZWNrOkZyZWUKKyAgIGZ1bjpmcmVlCisgICBvYmo6L2xpYiovbGliYy0yLjEwLiouc28KKyAgIG9iajovbGliKi9saWJjLTIuMTAuKi5zbworICAgZnVuOl92Z25VX2ZyZWVyZXMKK30KKworeworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOlZhbHVlOAorICAgZnVuOl9kbF9maW5pCisgICBmdW46X19ydW5fZXhpdF9oYW5kbGVycworICAgZnVuOmV4aXQKK30KKworeworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjpfZGxfZmluaQorICAgZnVuOl9fcnVuX2V4aXRfaGFuZGxlcnMKKyAgIGZ1bjpleGl0Cit9Cit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6VmFsdWU4CisgICBmdW46X2RsX3NvcnRfZmluaQorICAgZnVuOl9kbF9maW5pCisgICBmdW46X19ydW5fZXhpdF9oYW5kbGVycworICAgZnVuOmV4aXQKK30KKworeworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjpfZGxfc29ydF9maW5pCisgICBmdW46X2RsX2ZpbmkKKyAgIGZ1bjpfX3J1bl9leGl0X2hhbmRsZXJzCisgICBmdW46ZXhpdAorfQorCisjIGdsaWJjLTIuMTAgZGwgb3ZlcnJlYWRzCit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6VmFsdWU4CisgICBmdW46X2RsX2ZpeHVwCisgICBmdW46X2RsX3J1bnRpbWVfcmVzb2x2ZQorfQoreworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjpfZGxfZml4dXAKKyAgIGZ1bjpfZGxfcnVudGltZV9yZXNvbHZlCit9CisKK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpWYWx1ZTgKKyAgIGZ1bjpfZGxfbG9va3VwX3N5bWJvbF94CisgICBmdW46X2RsX2ZpeHVwCisgICBmdW46X2RsX3J1bnRpbWVfcmVzb2x2ZQorfQoreworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjpfZGxfbG9va3VwX3N5bWJvbF94CisgICBmdW46X2RsX2ZpeHVwCisgICBmdW46X2RsX3J1bnRpbWVfcmVzb2x2ZQorfQoreworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOlZhbHVlOAorICAgZnVuOmNhbGxfaW5pdAorICAgZnVuOl9kbF9pbml0Cit9Cit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6VmFsdWU4CisgICBmdW46X2RsX2luaXQKK30KK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpWYWx1ZTgKKyAgIGZ1bjpkb19sb29rdXBfeAorICAgZnVuOl9kbF9sb29rdXBfc3ltYm9sX3gKKyAgIGZ1bjpfZGxfcmVsb2NhdGVfb2JqZWN0CisgICBmdW46ZGxfbWFpbgorfQoreworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjpkb19sb29rdXBfeAorICAgZnVuOl9kbF9sb29rdXBfc3ltYm9sX3gKKyAgIGZ1bjpfZGxfcmVsb2NhdGVfb2JqZWN0CisgICBmdW46ZGxfbWFpbgorfQoreworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOlZhbHVlOAorICAgZnVuOl9kbF9sb29rdXBfc3ltYm9sX3gKKyAgIGZ1bjpfZGxfcmVsb2NhdGVfb2JqZWN0CisgICBmdW46ZGxfbWFpbgorfQoreworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOlZhbHVlOAorICAgZnVuOl9kbF9yZWxvY2F0ZV9vYmplY3QKKyAgIGZ1bjpkbF9tYWluCit9Cit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6VmFsdWU4CisgICBmdW46ZGxfbWFpbgorICAgZnVuOl9kbF9zeXNkZXBfc3RhcnQKKyAgIGZ1bjpfZGxfc3RhcnQKK30KK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpDb25kCisgICBmdW46ZGxfbWFpbgorICAgZnVuOl9kbF9zeXNkZXBfc3RhcnQKKyAgIGZ1bjpfZGxfc3RhcnQKK30KKworeworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjoqCisgICBmdW46ZG9fbG9va3VwX3gKKyAgIGZ1bjpfZGxfbG9va3VwX3N5bWJvbF94CisgICBmdW46X2RsX3JlbG9jYXRlX29iamVjdAorICAgZnVuOmRsX21haW4KK30KKworeworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOlZhbHVlOAorICAgZnVuOioKKyAgIGZ1bjpkb19sb29rdXBfeAorICAgZnVuOl9kbF9sb29rdXBfc3ltYm9sX3gKKyAgIGZ1bjpfZGxfcmVsb2NhdGVfb2JqZWN0CisgICBmdW46ZGxfbWFpbgorfQorCit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6VmFsdWU4CisgICBmdW46X2RsX2NoZWNrX21hcF92ZXJzaW9ucworICAgZnVuOl9kbF9jaGVja19hbGxfdmVyc2lvbnMKKyAgIGZ1bjp2ZXJzaW9uX2NoZWNrX2RvaXQKKyAgIGZ1bjpfZGxfcmVjZWl2ZV9lcnJvcgorICAgZnVuOmRsX21haW4KK30KKworeworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjpfZGxfY2hlY2tfbWFwX3ZlcnNpb25zCisgICBmdW46X2RsX2NoZWNrX2FsbF92ZXJzaW9ucworICAgZnVuOnZlcnNpb25fY2hlY2tfZG9pdAorICAgZnVuOl9kbF9yZWNlaXZlX2Vycm9yCisgICBmdW46ZGxfbWFpbgorfQorCit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6VmFsdWU4CisgICBmdW46X2RsX2NoZWNrX2FsbF92ZXJzaW9ucworICAgZnVuOnZlcnNpb25fY2hlY2tfZG9pdAorICAgZnVuOl9kbF9yZWNlaXZlX2Vycm9yCisgICBmdW46ZGxfbWFpbgorfQorCit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6Q29uZAorICAgZnVuOl9kbF9jaGVja19hbGxfdmVyc2lvbnMKKyAgIGZ1bjp2ZXJzaW9uX2NoZWNrX2RvaXQKKyAgIGZ1bjpfZGxfcmVjZWl2ZV9lcnJvcgorICAgZnVuOmRsX21haW4KK30KKworeworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOlZhbHVlOAorICAgZnVuOioKKyAgIGZ1bjpfZGxfY2hlY2tfbWFwX3ZlcnNpb25zCisgICBmdW46X2RsX2NoZWNrX2FsbF92ZXJzaW9ucworICAgZnVuOnZlcnNpb25fY2hlY2tfZG9pdAorICAgZnVuOl9kbF9yZWNlaXZlX2Vycm9yCisgICBmdW46ZGxfbWFpbgorfQoreworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjoqCisgICBmdW46X2RsX2NoZWNrX21hcF92ZXJzaW9ucworICAgZnVuOl9kbF9jaGVja19hbGxfdmVyc2lvbnMKKyAgIGZ1bjp2ZXJzaW9uX2NoZWNrX2RvaXQKKyAgIGZ1bjpfZGxfcmVjZWl2ZV9lcnJvcgorICAgZnVuOmRsX21haW4KK30KKworeworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOlZhbHVlOAorICAgZnVuOmluaXRfdGxzCisgICBmdW46ZGxfbWFpbgorfQoreworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjppbml0X3RscworICAgZnVuOmRsX21haW4KK30KKworeworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjpfZGxfbWFwX29iamVjdF9kZXBzCisgICBmdW46ZGxfbWFpbgorfQoreworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOlZhbHVlOAorICAgZnVuOl9kbF9tYXBfb2JqZWN0X2RlcHMKKyAgIGZ1bjpkbF9tYWluCit9CisKK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpWYWx1ZTgKKyAgIGZ1bjpfZGxfcHJvdGVjdF9yZWxybworICAgZnVuOl9kbF9yZWxvY2F0ZV9vYmplY3QKKyAgIGZ1bjpkbF9tYWluCit9CisKK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpWYWx1ZTgKKyAgIGZ1bjoqCisgICBmdW46ZG9fbG9va3VwX3gKKyAgIGZ1bjpfZGxfbG9va3VwX3N5bWJvbF94CisgICBmdW46X2RsX3JlbG9jYXRlX29iamVjdAorICAgZnVuOmRsX21haW4KK30KKworeworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOlZhbHVlOAorICAgZnVuOl9kbF9zZXR1cF9oYXNoCisgICBmdW46X2RsX21hcF9vYmplY3RfZnJvbV9mZAorICAgZnVuOl9kbF9tYXBfb2JqZWN0Cit9CisKK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpWYWx1ZTgKKyAgIGZ1bjoqCisgICBmdW46X2RsX25ld19vYmplY3QKKyAgIGZ1bjpfZGxfbWFwX29iamVjdF9mcm9tX2ZkCisgICBmdW46X2RsX21hcF9vYmplY3QKK30KKworeworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjoqCisgICBmdW46X2RsX25ld19vYmplY3QKKyAgIGZ1bjpfZGxfbWFwX29iamVjdF9mcm9tX2ZkCisgICBmdW46X2RsX21hcF9vYmplY3QKK30KKworeworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOlZhbHVlOAorICAgZnVuOm9wZW5hdXgKKyAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKKyAgIGZ1bjpfZGxfbWFwX29iamVjdF9kZXBzCisgICBmdW46ZGxfbWFpbgorfQorCit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6VmFsdWU4CisgICBmdW46KgorICAgZnVuOl9kbF9tYXBfb2JqZWN0Cit9CisKK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpDb25kCisgICBmdW46KgorICAgZnVuOl9kbF9tYXBfb2JqZWN0Cit9CisKK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpDb25kCisgICBmdW46X2RsX21hcF9vYmplY3QKKyAgIGZ1bjpvcGVuYXV4CisgICBmdW46X2RsX2NhdGNoX2Vycm9yCisgICBmdW46X2RsX21hcF9vYmplY3RfZGVwcworICAgZnVuOmRsX21haW4KK30KKworeworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOlZhbHVlOAorICAgZnVuOl9kbF9tYXBfb2JqZWN0CisgICBmdW46b3BlbmF1eAorICAgZnVuOl9kbF9jYXRjaF9lcnJvcgorICAgZnVuOl9kbF9tYXBfb2JqZWN0X2RlcHMKKyAgIGZ1bjpkbF9tYWluCit9CisKK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpDb25kCisgICBmdW46KgorICAgZnVuOl9kbF9tYXBfb2JqZWN0CisgICBmdW46b3BlbmF1eAorICAgZnVuOl9kbF9jYXRjaF9lcnJvcgorICAgZnVuOl9kbF9tYXBfb2JqZWN0X2RlcHMKKyAgIGZ1bjpkbF9tYWluCit9CisKK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpWYWx1ZTgKKyAgIGZ1bjoqCisgICBmdW46b3Blbl9wYXRoCisgICBmdW46X2RsX21hcF9vYmplY3QKKyAgIGZ1bjpvcGVuYXV4CisgICBmdW46X2RsX2NhdGNoX2Vycm9yCisgICBmdW46X2RsX21hcF9vYmplY3RfZGVwcworICAgZnVuOmRsX21haW4KK30KKworeworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjoqCisgICBmdW46b3Blbl9wYXRoCisgICBmdW46X2RsX21hcF9vYmplY3QKKyAgIGZ1bjpvcGVuYXV4CisgICBmdW46X2RsX2NhdGNoX2Vycm9yCisgICBmdW46X2RsX21hcF9vYmplY3RfZGVwcworICAgZnVuOmRsX21haW4KK30KKworeworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOlZhbHVlOAorICAgZnVuOl9kbF9tYXBfb2JqZWN0X2Zyb21fZmQKKyAgIGZ1bjpfZGxfbWFwX29iamVjdAorfQorCit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6Q29uZAorICAgZnVuOl9kbF9tYXBfb2JqZWN0X2Zyb21fZmQKKyAgIGZ1bjpfZGxfbWFwX29iamVjdAorfQorCit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6VmFsdWU4CisgICBmdW46KgorICAgZnVuOl9kbF9uZXdfb2JqZWN0CisgICBmdW46X2RsX21hcF9vYmplY3RfZnJvbV9mZAorICAgZnVuOl9kbF9tYXBfb2JqZWN0Cit9CisKK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpWYWx1ZTgKKyAgIGZ1bjpfZGxfbmV3X29iamVjdAorICAgZnVuOl9kbF9tYXBfb2JqZWN0X2Zyb21fZmQKKyAgIGZ1bjpfZGxfbWFwX29iamVjdAorfQorCit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6Q29uZAorICAgZnVuOl9kbF9uZXdfb2JqZWN0CisgICBmdW46X2RsX21hcF9vYmplY3RfZnJvbV9mZAorICAgZnVuOl9kbF9tYXBfb2JqZWN0Cit9CisKK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpWYWx1ZTgKKyAgIGZ1bjoqCisgICBmdW46X2RsX25hbWVfbWF0Y2hfcAorICAgZnVuOl9kbF9tYXBfb2JqZWN0Cit9CisKK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpDb25kCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjpfZGxfbWFwX29iamVjdAorfQorCit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6VmFsdWU4CisgICBmdW46KgorICAgZnVuOl9kbF9uYW1lX21hdGNoX3AKKyAgIGZ1bjpfZGxfY2hlY2tfbWFwX3ZlcnNpb25zCisgICBmdW46X2RsX2NoZWNrX2FsbF92ZXJzaW9ucworfQorCit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6VmFsdWU4CisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjpkb19sb29rdXBfeAorICAgZnVuOl9kbF9sb29rdXBfc3ltYm9sX3gKK30KKworeworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjpkb19sb29rdXBfeAorICAgZnVuOl9kbF9sb29rdXBfc3ltYm9sX3gKK30KKworeworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOlZhbHVlOAorICAgZnVuOmRvX2xvb2t1cF94CisgICBmdW46X2RsX2xvb2t1cF9zeW1ib2xfeAorfQorCit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6VmFsdWU4CisgICBmdW46KgorICAgZnVuOmRvX2xvb2t1cF94CisgICBmdW46X2RsX2xvb2t1cF9zeW1ib2xfeAorfQoreworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjoqCisgICBmdW46ZG9fbG9va3VwX3gKKyAgIGZ1bjpfZGxfbG9va3VwX3N5bWJvbF94Cit9CisKK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpWYWx1ZTgKKyAgIGZ1bjpfZGxfbmFtZV9tYXRjaF9wCisgICBmdW46X2RsX21hcF9vYmplY3QKKyAgIGZ1bjpkbF9vcGVuX3dvcmtlcgorfQoreworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjpfZGxfbmFtZV9tYXRjaF9wCisgICBmdW46X2RsX21hcF9vYmplY3QKKyAgIGZ1bjpkbF9vcGVuX3dvcmtlcgorfQorCit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6VmFsdWU4CisgICBmdW46KgorICAgZnVuOl9kbF9uYW1lX21hdGNoX3AKKyAgIGZ1bjpfZGxfbWFwX29iamVjdAorICAgZnVuOmRsX29wZW5fd29ya2VyCit9Cit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6Q29uZAorICAgZnVuOioKKyAgIGZ1bjpfZGxfbmFtZV9tYXRjaF9wCisgICBmdW46X2RsX21hcF9vYmplY3QKKyAgIGZ1bjpkbF9vcGVuX3dvcmtlcgorfQorCit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6VmFsdWU4CisgICBmdW46X2RsX2xvb2t1cF9zeW1ib2xfeAorICAgZnVuOl9kbF9yZWxvY2F0ZV9vYmplY3QKK30KK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpDb25kCisgICBmdW46X2RsX2xvb2t1cF9zeW1ib2xfeAorICAgZnVuOl9kbF9yZWxvY2F0ZV9vYmplY3QKK30KKworeworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOlZhbHVlOAorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46X2RsX2NoZWNrX21hcF92ZXJzaW9ucworfQoreworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOlZhbHVlOAorICAgZnVuOioKKyAgIGZ1bjpfZGxfY2hlY2tfbWFwX3ZlcnNpb25zCit9Cit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6Q29uZAorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46X2RsX2NoZWNrX21hcF92ZXJzaW9ucworfQoreworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjoqCisgICBmdW46X2RsX2NoZWNrX21hcF92ZXJzaW9ucworfQoreworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOlZhbHVlOAorICAgZnVuOm9wZW5hdXgKK30KK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpWYWx1ZTgKKyAgIGZ1bjpfZGxfbmFtZV9tYXRjaF9wCisgICBmdW46X2RsX21hcF9vYmplY3QKK30KKworeworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjpfZGxfY2xvc2Vfd29ya2VyCisgICBmdW46X2RsX2Nsb3NlCisgICBmdW46X2RsX2NhdGNoX2Vycm9yCisgICBmdW46ZGxlcnJvcl9ydW4KK30KK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpWYWx1ZTgKKyAgIGZ1bjpfZGxfY2xvc2Vfd29ya2VyCisgICBmdW46X2RsX2Nsb3NlCisgICBmdW46X2RsX2NhdGNoX2Vycm9yCisgICBmdW46ZGxlcnJvcl9ydW4KK30KK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpDb25kCisgICBmdW46KgorICAgZnVuOl9kbF9jbG9zZV93b3JrZXIKKyAgIGZ1bjpfZGxfY2xvc2UKKyAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKKyAgIGZ1bjpkbGVycm9yX3J1bgorfQoreworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOlZhbHVlOAorICAgZnVuOioKKyAgIGZ1bjpfZGxfY2xvc2Vfd29ya2VyCisgICBmdW46X2RsX2Nsb3NlCisgICBmdW46X2RsX2NhdGNoX2Vycm9yCisgICBmdW46ZGxlcnJvcl9ydW4KK30KKworeworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjpmaWxsaW5fcnBhdGgKKyAgIGZ1bjpfZGxfaW5pdF9wYXRocworICAgZnVuOmRsX21haW4KK30KK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpWYWx1ZTgKKyAgIGZ1bjpmaWxsaW5fcnBhdGgKKyAgIGZ1bjpfZGxfaW5pdF9wYXRocworICAgZnVuOmRsX21haW4KK30KK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpDb25kCisgICBmdW46KgorICAgZnVuOmZpbGxpbl9ycGF0aAorICAgZnVuOl9kbF9pbml0X3BhdGhzCisgICBmdW46ZGxfbWFpbgorfQoreworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOlZhbHVlOAorICAgZnVuOioKKyAgIGZ1bjpmaWxsaW5fcnBhdGgKKyAgIGZ1bjpfZGxfaW5pdF9wYXRocworICAgZnVuOmRsX21haW4KK30KKworeworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjpfZGxfbWFwX29iamVjdAorICAgZnVuOm1hcF9kb2l0CisgICBmdW46X2RsX2NhdGNoX2Vycm9yCisgICBmdW46ZG9fcHJlbG9hZAorICAgZnVuOmRsX21haW4KK30KK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpWYWx1ZTgKKyAgIGZ1bjpfZGxfbWFwX29iamVjdAorICAgZnVuOm1hcF9kb2l0CisgICBmdW46X2RsX2NhdGNoX2Vycm9yCisgICBmdW46ZG9fcHJlbG9hZAorICAgZnVuOmRsX21haW4KK30KK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpQYXJhbQorICAgb3BlbihmaWxlbmFtZSkKKyAgIGZ1bjpvcGVuCisgICBmdW46b3Blbl92ZXJpZnkKKyAgIGZ1bjpfZGxfbWFwX29iamVjdAorICAgZnVuOm1hcF9kb2l0CisgICBmdW46X2RsX2NhdGNoX2Vycm9yCisgICBmdW46ZG9fcHJlbG9hZAorICAgZnVuOmRsX21haW4KK30KKworeworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOlBhcmFtCisgICBzdGF0KGZpbGVfbmFtZSkKKyAgIGZ1bjpfeHN0YXQKKyAgIGZ1bjpvcGVuX3BhdGgKKyAgIGZ1bjpfZGxfbWFwX29iamVjdAorICAgZnVuOm9wZW5hdXgKKyAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKKyAgIGZ1bjpfZGxfbWFwX29iamVjdF9kZXBzCisgICBmdW46ZGxfbWFpbgorfQorCit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6VmFsdWU4CisgICBmdW46X2RsX2NhdGNoX2Vycm9yCisgICBmdW46X2RsX21hcF9vYmplY3RfZGVwcworICAgZnVuOmRsX29wZW5fd29ya2VyCit9CisKK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpDb25kCisgICBmdW46KgorICAgZnVuOl9kbF9tYXBfb2JqZWN0X2RlcHMKKyAgIGZ1bjpkbF9tYWluCit9Cit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6VmFsdWU4CisgICBmdW46KgorICAgZnVuOl9kbF9tYXBfb2JqZWN0X2RlcHMKKyAgIGZ1bjpkbF9tYWluCit9CisKK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpWYWx1ZTgKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOl9kbF9tYXBfb2JqZWN0X2RlcHMKKyAgIGZ1bjpkbF9tYWluCit9CisKKyMgZ2xpYmMtMi4xMCB0bHMgaXNzdWVzCit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6Q29uZAorICAgZnVuOioKKyAgIGZ1bjppbml0X3RscworICAgZnVuOmRsX21haW4KK30KK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpWYWx1ZTgKKyAgIGZ1bjoqCisgICBmdW46aW5pdF90bHMKKyAgIGZ1bjpkbF9tYWluCit9Cit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6Q29uZAorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46aW5pdF90bHMKKyAgIGZ1bjpkbF9tYWluCit9Cit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6VmFsdWU4CisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjppbml0X3RscworICAgZnVuOmRsX21haW4KK30KKworeworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjpfZGxfYWxsb2NhdGVfdGxzX2luaXQKKyAgIGZ1bjpkbF9tYWluCit9Cit7CisgICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgorICAgTWVtY2hlY2s6VmFsdWU4CisgICBmdW46X2RsX2FsbG9jYXRlX3Rsc19pbml0CisgICBmdW46ZGxfbWFpbgorfQoreworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjoqCisgICBmdW46X2RsX2FsbG9jYXRlX3Rsc19pbml0CisgICBmdW46ZGxfbWFpbgorfQoreworICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KKyAgIE1lbWNoZWNrOlZhbHVlOAorICAgZnVuOioKKyAgIGZ1bjpfZGxfYWxsb2NhdGVfdGxzX2luaXQKKyAgIGZ1bjpkbF9tYWluCit9CisKK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpDb25kCisgICBmdW46X190bHMqCisgICBvYmo6KgorICAgb2JqOioKKyAgIGZ1bjpfdmduVV9mcmVlcmVzCit9CisKK3sKKyAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+CisgICBNZW1jaGVjazpQYXJhbQorICAgYXJjaF9wcmN0bChhcmcyKQorICAgZnVuOmluaXRfdGxzCit9CisjIEdMaWIgY2FjaGluZyB0bXAvaG9tZSBkaXJlY3RvcmllcyAoZ2xpYmMtMi4xMCB2YXJpYW50cykKK3sKKyAgIDxnbGliYy0yLjEwIEdMSUIgbGVha3M+CisgICBNZW1jaGVjazpDb25kCisgICBmdW46KgorICAgZnVuOmRsX29wZW5fd29ya2VyCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46X2RsX2NhdGNoX2Vycm9yCisgICBmdW46ZGxlcnJvcl9ydW4KKyAgIGZ1bjoqCisgICBmdW46X19uc3NfbG9va3VwX2Z1bmN0aW9uCisgICBmdW46X19uc3NfbG9va3VwCisgICBmdW46Z2V0cHduYW0qCit9Cit7CisgICA8Z2xpYmMtMi4xMCBHTElCIGxlYWtzPgorICAgTWVtY2hlY2s6VmFsdWU4CisgICBmdW46KgorICAgZnVuOmRsX29wZW5fd29ya2VyCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46X2RsX2NhdGNoX2Vycm9yCisgICBmdW46ZGxlcnJvcl9ydW4KKyAgIGZ1bjoqCisgICBmdW46X19uc3NfbG9va3VwX2Z1bmN0aW9uCisgICBmdW46X19uc3NfbG9va3VwCisgICBmdW46Z2V0cHduYW0qCit9Cit7CisgICA8Z2xpYmMtMi4xMCBHTElCIGxlYWtzPgorICAgTWVtY2hlY2s6Q29uZAorICAgZnVuOmRsX29wZW5fd29ya2VyCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjpkb19kbG9wZW4KKyAgIGZ1bjoqCisgICBmdW46ZGxlcnJvcl9ydW4KKyAgIGZ1bjoqCisgICBmdW46X19uc3NfbG9va3VwX2Z1bmN0aW9uCisgICBmdW46X19uc3NfbG9va3VwCisgICBmdW46Z2V0cHduYW0qCit9Cit7CisgICA8Z2xpYmMtMi4xMCBHTElCIGxlYWtzPgorICAgTWVtY2hlY2s6VmFsdWU4CisgICBmdW46ZGxfb3Blbl93b3JrZXIKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOmRvX2Rsb3BlbgorICAgZnVuOioKKyAgIGZ1bjpkbGVycm9yX3J1bgorICAgZnVuOioKKyAgIGZ1bjpfX25zc19sb29rdXBfZnVuY3Rpb24KKyAgIGZ1bjpfX25zc19sb29rdXAKKyAgIGZ1bjpnZXRwd25hbSoKK30KKworeworICAgPGdsaWJjLTIuMTAgR0xJQiBsZWFrcz4KKyAgIE1lbWNoZWNrOlZhbHVlOAorICAgZnVuOl9kbF9hZGRfdG9fc2xvdGluZm8KKyAgIGZ1bjpkbF9tYWluCit9Cit7CisgICA8Z2xpYmMtMi4xMCBHTElCIGxlYWtzPgorICAgTWVtY2hlY2s6UGFyYW0KKyAgIG9wZW4oZmlsZW5hbWUpCisgICBmdW46b3BlbgorICAgZnVuOm9wZW5fdmVyaWZ5CisgICBmdW46b3Blbl9wYXRoCisgICBmdW46X2RsX21hcF9vYmplY3QKK30KKworCisKKyMgR01vZHVsZSBpc3N1ZXMgd2l0aCBnbGliYy0yLjEwCit7CisgICA8Z2xpYmMtMi4xMCBHTElCIGxlYWtzPgorICAgTWVtY2hlY2s6VmFsdWU4CisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjpkbHN5bQorICAgZnVuOmdfbW9kdWxlX3N5bWJvbAorfQoreworICAgPGdsaWJjLTIuMTAgR0xJQiBsZWFrcz4KKyAgIE1lbWNoZWNrOlZhbHVlOAorICAgZnVuOmdfbW9kdWxlXyoKKyAgIGZ1bjpnc3RfcGx1Z2luKgorfQoreworICAgPGdsaWJjLTIuMTAgR0xJQiBsZWFrcz4KKyAgIE1lbWNoZWNrOlZhbHVlOAorICAgZnVuOioKKyAgIGZ1bjpnX21vZHVsZV8qCisgICBmdW46Z3N0X3BsdWdpbioKK30KKworeworICAgPGdsaWJjLTIuMTAgR0xJQiBsZWFrcz4KKyAgIE1lbWNoZWNrOlZhbHVlOAorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46ZGxvcGVuKgorICAgZnVuOmdfbW9kdWxlX29wZW4KK30KK3sKKyAgIDxnbGliYy0yLjEwIEdMSUIgbGVha3M+CisgICBNZW1jaGVjazpWYWx1ZTgKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46ZGxzeW0KKyAgIGZ1bjpnX21vZHVsZV9zeW1ib2wKK30KKworeworICAgPGdsaWJjLTIuMTAgR0xJQiBsZWFrcz4KKyAgIE1lbWNoZWNrOlZhbHVlOAorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46KgorICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46ZGxvcGVuKgorICAgZnVuOmdfbW9kdWxlX29wZW4KK30KKworIyBMZWFrIGluIEdTbGljZQoreworICAgPGluc2VydCBhIHN1cHByZXNzaW9uIG5hbWUgaGVyZT4KKyAgIE1lbWNoZWNrOlZhbHVlOAorICAgZnVuOmdfcGFyc2VfZGVidWdfc3RyaW5nCisgICBmdW46c2xpY2VfY29uZmlnX2luaXQKKyAgIGZ1bjpnX3NsaWNlX2luaXRfbm9tZXNzYWdlCisgICBmdW46X2dfc2xpY2VfdGhyZWFkX2luaXRfbm9tZXNzYWdlCisgICBmdW46Z190aHJlYWRfaW5pdF9nbGliCit9CisKKyMgMi4xMCBwdGhyZWFkIGlzc3VlcworeworICAgPGluc2VydCBhIHN1cHByZXNzaW9uIG5hbWUgaGVyZT4KKyAgIE1lbWNoZWNrOlZhbHVlOAorICAgZnVuOl9fcHRocmVhZF9pbml0aWFsaXplX21pbmltYWwKK30KKworIyBnbGliYyAyLjExIGNvbmRpdGlvbmFsCit7CisgICA8Z2xpYmMtMi4xMSBjb25kaXRpb25hbD4KKyAgIE1lbWNoZWNrOkNvbmQKKyAgIGZ1bjpfZGxfcmVsb2NhdGVfb2JqZWN0CisgICBmdW46ZGxfbWFpbgorICAgZnVuOl9kbF9zeXNkZXBfc3RhcnQKKyAgIGZ1bjpfZGxfc3RhcnQKKyAgIG9iajovbGliNjQvbGQtMi4xMS5zbworfQorCisjIGdsaWJjIDIuMTEgTGVhaworCit7CisgICA8aW5zZXJ0X2Ffc3VwcHJlc3Npb25fbmFtZV9oZXJlPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOiphbGxvYworICAgZnVuOmRsX29wZW5fd29ya2VyCisgICBmdW46X2RsX2NhdGNoX2Vycm9yCisgICBmdW46X2RsX29wZW4KKyAgIGZ1bjpkbG9wZW5fZG9pdAorICAgZnVuOl9kbF9jYXRjaF9lcnJvcgorICAgZnVuOl9kbGVycm9yX3J1bgorICAgZnVuOmRsb3BlbkBAR0xJQkNfMi4yLjUKK30KKworeworICAgPGluc2VydF9hX3N1cHByZXNzaW9uX25hbWVfaGVyZT4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjoqYWxsb2MKKyAgIGZ1bjpfZGxfKgorICAgZnVuOmRsX29wZW5fd29ya2VyCisgICBmdW46X2RsX2NhdGNoX2Vycm9yCisgICBmdW46X2RsX29wZW4KKyAgIGZ1bjpkbG9wZW5fZG9pdAorICAgZnVuOl9kbF9jYXRjaF9lcnJvcgorICAgZnVuOl9kbGVycm9yX3J1bgorICAgZnVuOmRsb3BlbkBAR0xJQkNfMi4yLjUKK30KKworeworICAgPGluc2VydF9hX3N1cHByZXNzaW9uX25hbWVfaGVyZT4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjoqYWxsb2MKKyAgIGZ1bjpfZGxfKgorICAgZnVuOl9kbF8qCisgICBmdW46X2RsXyoKKyAgIGZ1bjpkbF9vcGVuX3dvcmtlcgorICAgZnVuOl9kbF9jYXRjaF9lcnJvcgorICAgZnVuOl9kbF9vcGVuCisgICBmdW46ZGxvcGVuX2RvaXQKKyAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKKyAgIGZ1bjpfZGxlcnJvcl9ydW4KKyAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMi41Cit9CisKK3sKKyAgIDxpbnNlcnRfYV9zdXBwcmVzc2lvbl9uYW1lX2hlcmU+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46KmFsbG9jCisgICBmdW46KgorICAgZnVuOl9kbF8qCisgICBmdW46b3BlbmF1eAorICAgZnVuOl9kbF9jYXRjaF9lcnJvcgorICAgZnVuOl9kbF9tYXBfb2JqZWN0X2RlcHMKKyAgIGZ1bjpkbF9vcGVuX3dvcmtlcgorICAgZnVuOl9kbF9jYXRjaF9lcnJvcgorICAgZnVuOl9kbF9vcGVuCisgICBmdW46ZGxvcGVuX2RvaXQKKyAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKKyAgIGZ1bjpfZGxlcnJvcl9ydW4KKyAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMi41Cit9CisKK3sKKyAgIDxpbnNlcnRfYV9zdXBwcmVzc2lvbl9uYW1lX2hlcmU+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46KmFsbG9jCisgICBmdW46KgorICAgZnVuOl9kbF9tYXBfb2JqZWN0CisgICBmdW46ZGxfb3Blbl93b3JrZXIKKyAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKKyAgIGZ1bjpfZGxfb3BlbgorICAgZnVuOmRsb3Blbl9kb2l0CisgICBmdW46X2RsX2NhdGNoX2Vycm9yCisgICBmdW46X2RsZXJyb3JfcnVuCisgICBmdW46ZGxvcGVuQEBHTElCQ18yLjIuNQorfQorCit7CisgICA8aW5zZXJ0X2Ffc3VwcHJlc3Npb25fbmFtZV9oZXJlPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOiphbGxvYworICAgZnVuOl9kbF9uZXdfb2JqZWN0CisgICBmdW46X2RsX21hcF9vYmplY3RfZnJvbV9mZAorICAgZnVuOl9kbF9tYXBfb2JqZWN0CisgICBmdW46b3BlbmF1eAorICAgZnVuOl9kbF9jYXRjaF9lcnJvcgorICAgZnVuOl9kbF9tYXBfb2JqZWN0X2RlcHMKKyAgIGZ1bjpkbF9vcGVuX3dvcmtlcgorICAgZnVuOl9kbF9jYXRjaF9lcnJvcgorICAgZnVuOl9kbF9vcGVuCisgICBmdW46ZGxvcGVuX2RvaXQKKyAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKKyAgIGZ1bjpfZGxlcnJvcl9ydW4KKyAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMi41Cit9CisKK3sKKyAgIDxpbnNlcnRfYV9zdXBwcmVzc2lvbl9uYW1lX2hlcmU+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46KmFsbG9jCisgICBmdW46KgorICAgZnVuOl9kbF8qCisgICBmdW46X2RsXyoKKyAgIGZ1bjpfZGxfKgorICAgZnVuOmRsX29wZW5fd29ya2VyCisgICBmdW46X2RsX2NhdGNoX2Vycm9yCisgICBmdW46X2RsX29wZW4KKyAgIGZ1bjpkbG9wZW5fZG9pdAorICAgZnVuOl9kbF9jYXRjaF9lcnJvcgorICAgZnVuOl9kbGVycm9yX3J1bgorICAgZnVuOmRsb3BlbkBAR0xJQkNfMi4yLjUKK30KKworIyBnbGliIHR5cGUgbGVha3MKK3sKKyAgIDxpbnNlcnRfYV9zdXBwcmVzc2lvbl9uYW1lX2hlcmU+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46KmFsbG9jCisgICAuLi4KKyAgIGZ1bjpnX3R5cGVfcmVnaXN0ZXJfc3RhdGljCit9CisKKyMgbmV3IHJlZ2lzdHJ5IHN5c3RlbQorIyBhbGwgb2YgdGhpcyB3aWxsIG9ubHkgYmUgY3JlYXRlZCBvbmNlIHdoZW4gbG9hZGluZyByZWdpc3RyeS4KKworeworICAgPGluc2VydF9hX3N1cHByZXNzaW9uX25hbWVfaGVyZT4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjoqYWxsb2MKKyAgIC4uLgorICAgZnVuOl9wcml2X2dzdF9yZWdpc3RyeV9jaHVua3NfbG9hZF9wbHVnaW4KK30KKworIyBzeXN0ZW0td2lkZSB0YWdzCisjIHRoZXNlIHRhZ3MgYXJlIHJlZ2lzdGVyZWQgb25jZQorCit7CisgICA8aW5zZXJ0X2Ffc3VwcHJlc3Npb25fbmFtZV9oZXJlPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOiphbGxvYworICAgZnVuOioKKyAgIGZ1bjoqCisgICBmdW46Z3N0X3RhZ19yZWdpc3RlcgorICAgZnVuOl9nc3RfdGFnX2luaXRpYWxpemUKK30KKworIyBzeXN0ZW0td2lkZSB0eXBlIGNsYXNzZXMgdGhhdCB3ZSBrZWVwIHJlZmVyZW5jZWQKKworeworICAgPGdfdHlwZV9jbGFzc19yZWYgbGVha3M+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46KmFsbG9jCisgICAuLi4KKyAgIGZ1bjpnX3R5cGVfY2xhc3NfcmVmCit9CisKKyMgbGVha2luZyBjYWNoZWQgcXVlcmllcyB3aGljaCBhcmUgb25seSBpbml0aWFsaXplZCBvbmNlCit7CisgICA8aW5zZXJ0X2Ffc3VwcHJlc3Npb25fbmFtZV9oZXJlPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOiphbGxvYworICAgLi4uCisgICBmdW46X2dzdF9xdWVyeV9pbml0aWFsaXplCisgICBmdW46aW5pdF9wb3N0Cit9CisKKyMgbWFjb3N4IChsZW9wYXJkKSBsaWJyYXJ5IGxvYWRlciBsZWFrCit7CisgICA8aW5zZXJ0X2Ffc3VwcHJlc3Npb25fbmFtZV9oZXJlPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOl9abndtCisgICBmdW46X1pOU3M0X1JlcDlfU19jcmVhdGVFbW1SS1NhSWNFCisgICBmdW46X1pOU3MxMl9TX2NvbnN0cnVjdElQS2NFRVBjVF9TM19SS1NhSWNFU3QyMGZvcndhcmRfaXRlcmF0b3JfdGFnCisgICBmdW46X1pOU3NDMkVQS2NSS1NhSWNFCisgICBmdW46X1o0MV9fc3RhdGljX2luaXRpYWxpemF0aW9uX2FuZF9kZXN0cnVjdGlvbl8waWkKKyAgIGZ1bjpfWk4xNkltYWdlTG9hZGVyTWFjaE8xOGRvTW9kSW5pdEZ1bmN0aW9uc0VSS04xMUltYWdlTG9hZGVyMTFMaW5rQ29udGV4dEUKK30KKworIyBHT2JqZWN0IHR5cGUgcmVnaXN0cmF0aW9uCit7CisgICA8aW5zZXJ0X2Ffc3VwcHJlc3Npb25fbmFtZV9oZXJlPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOiphbGxvYworICAgLi4uCisgICBmdW46X2dfYXRvbWljX2FycmF5X2NvcHkKK30KKworeworICAgPGdldGRlbGltIG9uZS10aW1lIGluaXRzIGNhbGxlZCBmcm9tIGxpYnNlbGludXg+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46KmFsbG9jCisgICBmdW46Z2V0ZGVsaW0KKyAgIG9iajoqbGlic2VsaW51eCoKK30KKworeworICAgPHdlaXJkIG9uZSB3aGVuIHJlLXJlYWRpbmcgcmVnaXN0cnk+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46KmFsbG9jCisgICAuLi4KKyAgIG9iajoqL3NlZAorfQorCit7CisgICA8d2VpcmQgb25lIHdoZW4gcmUtcmVhZGluZyByZWdpc3RyeT4KKyAgIE1lbWNoZWNrOkFkZHI4CisgICAuLi4KKyAgIG9iajoqL3NlZAorfQorCisjIEdMaWIgMi4yMyBpbnRlcmZhY2UgdnRhYmxlCit7CisgICA8aW5zZXJ0X2Ffc3VwcHJlc3Npb25fbmFtZV9oZXJlPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOiphbGxvYworICAgLi4uCisgICBmdW46Z190eXBlX2FkZF9pbnRlcmZhY2Vfc3RhdGljCit9CisKK3sKKyAgIDxsZWFrIGluIGRhc2ggb24gZGViaWFuIHNpZD4KKyAgIE1lbWNoZWNrOkxlYWsKKyAgIGZ1bjoqYWxsb2MKKyAgIG9iajoqL2Rhc2gKK30KKworIyBsaWJ0b29sL2dlbnRvbyBmYWtlIGxlYWsKKyMgaXQgYWN0dWFsbHkgcnVucyBiYXNoIGFuZCB2YWxncmluZCBjb21wbGFpbnMKK3sKKyAgIDxpbnNlcnRfYV9zdXBwcmVzc2lvbl9uYW1lX2hlcmU+CisgICBNZW1jaGVjazpMZWFrCisgICBmdW46KmFsbG9jCisgICBvYmo6L2Jpbi9iYXNoCit9CisKK3sKKyAgIDxpZ25vcmUgcG9zc2JseS1sb3N0IGxlYWtzIGluIHRoZSBwbHVnaW4gc2Nhbm5lciB3aGljaCBkb2Vzbid0IGNsZWFuIHVwIHByb3Blcmx5PgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOiphbGxvYworICAgLi4uCisgICBmdW46X2dzdF9wbHVnaW5fbG9hZGVyX2NsaWVudF9ydW4KKyAgIGZ1bjptYWluCit9CisKK3sKKyAgIDx3YXJuaW5nIHdpdGggbGliYyAyLjEzLTIgYXMgaW4gRGViaWFuL3Vuc3RhYmxlIG9uIGFtZDY0PgorICAgTWVtY2hlY2s6Q29uZAorICAgZnVuOipzdHJjYXNlY21wKgorICAgLi4uCisgICBmdW46X19kY2lnZXR0ZXh0Cit9CisKK3sKKyAgIDx3YXJuaW5nIHdpdGggbGliYyAyLjEzLTIgYXMgaW4gRGViaWFuL3Vuc3RhYmxlIG9uIGFtZDY0PgorICAgTWVtY2hlY2s6VmFsdWU4CisgICBmdW46KnN0cmNhc2VjbXAqCisgICAuLi4KKyAgIGZ1bjpfX2RjaWdldHRleHQKK30KKworeworICAgPEdzdFN5c3RlbUNsb2NrIGlzIGEgc2luZ2xldG9uIGFuZCBkb2VzIG5vdCBsZWFrPgorICAgTWVtY2hlY2s6TGVhaworICAgZnVuOm1hbGxvYworICAgLi4uCisgICBmdW46Z3N0X3BvbGxfbmV3CisgICBmdW46Z3N0X3BvbGxfbmV3X3RpbWVyCisgICBmdW46Z3N0X3N5c3RlbV9jbG9ja19pbml0Cit9CisKZGlmZiAtLWdpdCBhL2NvbW1vbi9nc3Rkb2Mtc2NhbmdvYmogYi9jb21tb24vZ3N0ZG9jLXNjYW5nb2JqCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjViMTMzNTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vZ3N0ZG9jLXNjYW5nb2JqCkBAIC0wLDAgKzEsMTU5OCBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorIyAtKi0gY3BlcmwgLSotCisjCisjIGd0ay1kb2MgLSBHVEsgRG9jQm9vayBkb2N1bWVudGF0aW9uIGdlbmVyYXRvci4KKyMgQ29weXJpZ2h0IChDKSAxOTk4ICBEYW1vbiBDaGFwbGluCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisjCisKKyMKKyMgVGhpcyBnZXRzIGluZm9ybWF0aW9uIGFib3V0IG9iamVjdCBoaWVyYXJjaGllcyBhbmQgc2lnbmFscworIyBieSBjb21waWxpbmcgYSBzbWFsbCBDIHByb2dyYW0uIENGTEFHUyBhbmQgTERGTEFHUyBtdXN0IGJlCisjIHNldCBhcHByb3ByaWF0ZWx5IGJlZm9yZSBydW5uaW5nIHRoaXMgc2NyaXB0LgorIworCit1c2UgR2V0b3B0OjpMb25nOworCitteSAkR1RLX0RPQ19QUkVGSVg9YHBrZy1jb25maWcgLS12YXJpYWJsZSBwcmVmaXggZ3RrLWRvY2A7CitpZiAoJEdUS19ET0NfUFJFRklYKSB7CisgIGNob21wICRHVEtfRE9DX1BSRUZJWDsKKyAgI3ByaW50ICJBZGRpbmcgJEdUS19ET0NfUFJFRklYL3NoYXJlL2d0ay1kb2MvZGF0YSB0byBcQElOQ1xuIjsKKyAgdW5zaGlmdCBASU5DLCAiJEdUS19ET0NfUFJFRklYL3NoYXJlL2d0ay1kb2MvZGF0YSI7Cit9IGVsc2UgeworICB1bnNoaWZ0IEBJTkMsICcvdXNyL3NoYXJlL2d0ay1kb2MvZGF0YSc7Cit9CityZXF1aXJlICJndGtkb2MtY29tbW9uLnBsIjsKKworIyBPcHRpb25zCisKKyMgbmFtZSBvZiBkb2N1bWVudGF0aW9uIG1vZHVsZQorbXkgJE1PRFVMRTsKK215ICRPVVRQVVRfRElSOworbXkgJElOU1BFQ1RfRElSOworbXkgJFZFUkJPU0U7CitteSAkUFJJTlRfVkVSU0lPTjsKK215ICRQUklOVF9IRUxQOworbXkgJFRZUEVfSU5JVF9GVU5DPSJnX3R5cGVfaW5pdCAoKSI7CisKKyMgLS1ub2d0a2luaXQgaXMgZGVwcmVjYXRlZCwgYXMgaXQgaXMgdGhlIGRlZmF1bHQgbm93IGFueXdheS4KKyVvcHRjdGwgPSAobW9kdWxlID0+IFwkTU9EVUxFLAorICAgICAgICAgICBzb3VyY2UgPT4gXCRTT1VSQ0UsCisJICAgdHlwZXMgPT4gXCRUWVBFU19GSUxFLAorCSAgIG5vZ3RraW5pdCA9PiBcJE5PX0dUS19JTklULAorCSAgICd0eXBlLWluaXQtZnVuYycgPT4gXCRUWVBFX0lOSVRfRlVOQywKKwkgICAnb3V0cHV0LWRpcicgPT4gXCRPVVRQVVRfRElSLAorCSAgICdpbnNwZWN0LWRpcicgPT4gXCRJTlNQRUNUX0RJUiwKKwkgICAndmVyYm9zZScgPT4gXCRWRVJCT1NFLAorCSAgICd2ZXJzaW9uJyA9PiBcJFBSSU5UX1ZFUlNJT04sCisJICAgJ2hlbHAnID0+IFwkUFJJTlRfSEVMUCk7CisKK0dldE9wdGlvbnMoXCVvcHRjdGwsICJtb2R1bGU9cyIsICJzb3VyY2U9cyIsICJ0eXBlczpzIiwgIm91dHB1dC1kaXI6cyIsICJpbnNwZWN0LWRpcjpzIiwgIm5vZ3RraW5pdCIsICJ0eXBlLWluaXQtZnVuYzpzIiwgInZlcmJvc2UiLCAidmVyc2lvbiIsICJoZWxwIik7CisKK2lmICgkTk9fR1RLX0lOSVQpIHsKKyAgIyBEbyBub3RoaW5nLiBUaGlzIGp1c3QgYXZvaWRzIGEgd2FybmluZy4KKyAgIyB0aGUgb3B0aW9uIGlzIG5vdCB1c2VkIGFueW1vcmUKK30KKworaWYgKCRQUklOVF9WRVJTSU9OKSB7CisgICAgcHJpbnQgIjEuNVxuIjsKKyAgICBleGl0IDA7Cit9CisKK2lmICghJE1PRFVMRSkgeworICAgICRQUklOVF9IRUxQID0gMTsKK30KKworaWYgKCRQUklOVF9IRUxQKSB7CisgICAgcHJpbnQgPDxFT0Y7Citnc3Rkb2Mtc2NhbmdvYmogdmVyc2lvbiAxLjUgLSBpbnRyb3NwZWN0IGdzdHJlYW1lci1wbHVnaW5zCisKKy0tbW9kdWxlPU1PRFVMRV9OQU1FICAgICAgICAgIE5hbWUgb2YgdGhlIGRvYyBtb2R1bGUgYmVpbmcgcGFyc2VkCistLXNvdXJjZT1TT1VSQ0VfTkFNRSAgICAgICAgICBOYW1lIG9mIHRoZSBzb3VyY2UgbW9kdWxlIGZvciBwbHVnaW5zCistLXR5cGVzPUZJTEUgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0byBzdG9yZSB0aGUgdHlwZXMgaW4KKy0tdHlwZS1pbml0LWZ1bmM9RlVOQyAgICAgICAgIFRoZSBpbml0IGZ1bmN0aW9uIHRvIGNhbGwgaW5zdGVhZCBvZiBnX3R5cGVfaW5pdCgpCistLW91dHB1dC1kaXI9RElSTkFNRSAgICAgICAgICBUaGUgZGlyZWN0b3J5IHdoZXJlIHRoZSByZXN1bHRzIGFyZSBzdG9yZWQKKy0taW5zcGVjdC1kaXI9RElSTkFNRSAgICAgICAgIFRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHBsdWdpbiBpbnNwZWN0IGRhdGEgaXMgc3RvcmVkCistLXZlcmJvc2UgICAgICAgICAgICAgICAgICAgICBQcmludCBleHRyYSBvdXRwdXQgd2hpbGUgcHJvY2Vzc2luZworLS12ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgUHJpbnQgdGhlIHZlcnNpb24gb2YgdGhpcyBwcm9ncmFtCistLWhlbHAgICAgICAgICAgICAgICAgICAgICAgICBQcmludCB0aGlzIGhlbHAKK0VPRgorICAgIGV4aXQgMDsKK30KKworJE9VVFBVVF9ESVIgPSAkT1VUUFVUX0RJUiA/ICRPVVRQVVRfRElSIDogIi4iOworCiskVFlQRVNfRklMRSA9ICRUWVBFU19GSUxFID8gJFRZUEVTX0ZJTEUgOiAiJE9VVFBVVF9ESVIvJE1PRFVMRS50eXBlcyI7CisKK29wZW4gKFRZUEVTLCAkVFlQRVNfRklMRSkgfHwgZGllICJDYW5ub3Qgb3BlbiAkVFlQRVNfRklMRTogJCFcbiI7CitvcGVuIChPVVRQVVQsICI+JE1PRFVMRS1zY2FuLmMiKSB8fCBkaWUgIkNhbm5vdCBvcGVuICRNT0RVTEUtc2Nhbi5jOiAkIVxuIjsKKworbXkgJG9sZF9zaWduYWxzX2ZpbGVuYW1lID0gIiRPVVRQVVRfRElSLyRNT0RVTEUuc2lnbmFscyI7CitteSAkbmV3X3NpZ25hbHNfZmlsZW5hbWUgPSAiJE9VVFBVVF9ESVIvJE1PRFVMRS5zaWduYWxzLm5ldyI7CitteSAkb2xkX2hpZXJhcmNoeV9maWxlbmFtZSA9ICIkT1VUUFVUX0RJUi8kTU9EVUxFLmhpZXJhcmNoeSI7CitteSAkbmV3X2hpZXJhcmNoeV9maWxlbmFtZSA9ICIkT1VUUFVUX0RJUi8kTU9EVUxFLmhpZXJhcmNoeS5uZXciOworbXkgJG9sZF9pbnRlcmZhY2VzX2ZpbGVuYW1lID0gIiRPVVRQVVRfRElSLyRNT0RVTEUuaW50ZXJmYWNlcyI7CitteSAkbmV3X2ludGVyZmFjZXNfZmlsZW5hbWUgPSAiJE9VVFBVVF9ESVIvJE1PRFVMRS5pbnRlcmZhY2VzLm5ldyI7CitteSAkb2xkX3ByZXJlcXVpc2l0ZXNfZmlsZW5hbWUgPSAiJE9VVFBVVF9ESVIvJE1PRFVMRS5wcmVyZXF1aXNpdGVzIjsKK215ICRuZXdfcHJlcmVxdWlzaXRlc19maWxlbmFtZSA9ICIkT1VUUFVUX0RJUi8kTU9EVUxFLnByZXJlcXVpc2l0ZXMubmV3IjsKK215ICRvbGRfYXJnc19maWxlbmFtZSA9ICIkT1VUUFVUX0RJUi8kTU9EVUxFLmFyZ3MiOworbXkgJG5ld19hcmdzX2ZpbGVuYW1lID0gIiRPVVRQVVRfRElSLyRNT0RVTEUuYXJncy5uZXciOworCitteSAkZGVidWdfbG9nPSJnX21lc3NhZ2UiOworaWYgKCFkZWZpbmVkKCRWRVJCT1NFKSBvciAkVkVSQk9TRSBlcSAiMCIpIHsKKyAgICAkZGVidWdfbG9nPSIvLyRkZWJ1Z19sb2ciOworfQorCisjIHdyaXRlIGEgQyBwcm9ncmFtIHRvIHNjYW4gdGhlIHR5cGVzCisKKyRpbmNsdWRlcyA9ICIiOworQHR5cGVzID0gKCk7CitAaW1wbF90eXBlcyA9ICgpOworCitmb3IgKDxUWVBFUz4pIHsKKyAgICBpZiAoL14jaW5jbHVkZS8pIHsKKwkkaW5jbHVkZXMgLj0gJF87CisgICAgfSBlbHNpZiAoL14lLykgeworCW5leHQ7CisgICAgfSBlbHNpZiAoL15ccyokLykgeworCW5leHQ7CisgICAgfSBlbHNpZiAoL150eXBlOiguKikkLykgeworCSR0ID0gJDE7CisgICAgICAgIGNob21wICR0OworCXB1c2ggQGltcGxfdHlwZXMsICR0OworICAgIH0gZWxzZSB7CisJY2hvbXA7CisJcHVzaCBAdHlwZXMsICRfOworICAgIH0KK30KKworJG50eXBlcyA9IEB0eXBlcyArIEBpbXBsX3R5cGVzICsgMTsKKworcHJpbnQgT1VUUFVUIDw8RU9UOworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworJGluY2x1ZGVzCisKKyNpZmRlZiBHVEtfSVNfV0lER0VUX0NMQVNTCisjaW5jbHVkZSA8Z3RrL2d0a3ZlcnNpb24uaD4KKyNlbmRpZgorCitzdGF0aWMgR1R5cGUgKm9iamVjdF90eXBlcyA9IE5VTEw7CisKK3N0YXRpYyBHU3RyaW5nICp4bWxzdHIgPSBOVUxMOworCitzdGF0aWMgY29uc3QgZ2NoYXIqCit4bWxwcmludCAoZ2ludCBpbmRlbnQsIGNvbnN0IGdjaGFyICp0YWcsIGNvbnN0IGdjaGFyICpkYXRhKQoreworICBjb25zdCBnY2hhciBpbmRlbnRfc3RyW10gPSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOworCisgIC8qIHJlc2V0ICovCisgIGdfc3RyaW5nX3RydW5jYXRlICh4bWxzdHIsIDApOworICBnX3N0cmluZ19hcHBlbmRfbGVuICh4bWxzdHIsIGluZGVudF9zdHIsIE1JTiAoaW5kZW50LCBzdHJsZW4gKGluZGVudF9zdHIpKSk7CisgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHhtbHN0ciwgIjwlcz4iLCB0YWcpOworCisgIGlmIChkYXRhKSB7CisgICAgZ2NoYXIgKnM7CisKKyAgICBzID0gZ19tYXJrdXBfZXNjYXBlX3RleHQgKGRhdGEsIC0xKTsKKyAgICBnX3N0cmluZ19hcHBlbmQgKHhtbHN0ciwgcyk7CisgICAgZ19mcmVlIChzKTsKKyAgfQorCisgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHhtbHN0ciwgIjwvJXM+XFxuIiwgdGFnKTsKKyAgcmV0dXJuIHhtbHN0ci0+c3RyOworfQorCitzdGF0aWMgZ2ludAorZ3N0X2ZlYXR1cmVfc29ydF9jb21wYXJlIChnY29uc3Rwb2ludGVyIGEsIGdjb25zdHBvaW50ZXIgYikKK3sKKyAgcmV0dXJuIHN0cmNtcCAoKChHc3RQbHVnaW5GZWF0dXJlICopYSktPm5hbWUsICgoR3N0UGx1Z2luRmVhdHVyZSAqKWIpLT5uYW1lKTsKK30KKworc3RhdGljIGdpbnQKK3N0YXRpY19wYWRfdGVtcGxhdGVfY29tcGFyZSAoZ2NvbnN0cG9pbnRlciBhLCBnY29uc3Rwb2ludGVyIGIpCit7CisgIEdzdFN0YXRpY1BhZFRlbXBsYXRlICpzcHRfYSA9IChHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqKSBhOworICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqc3B0X2IgPSAoR3N0U3RhdGljUGFkVGVtcGxhdGUgKikgYjsKKworICAvKiB3ZSB3YW50IFNJTksgYmVmb3JlIFNSQyAoZW51bSBpcyBVTktOT1dOLCBTUkMsIFNJTkspICovCisgIGlmIChzcHRfYS0+ZGlyZWN0aW9uICE9IHNwdF9iLT5kaXJlY3Rpb24pCisgICAgcmV0dXJuIHNwdF9iLT5kaXJlY3Rpb24gLSBzcHRfYS0+ZGlyZWN0aW9uOworCisgIC8qIHdlIHdhbnQgQUxXQVlTIGZpcnN0LCBTT01FVElNRVMgc2Vjb25kLCBSRVFVRVNUIGxhc3QKKyAgICogKGVudW0gaXMgQUxXQVlTLCBTT01FVElNRVMsIFJFUVVFU1QpICovCisgIGlmIChzcHRfYS0+cHJlc2VuY2UgIT0gc3B0X2ItPnByZXNlbmNlKQorICAgIHJldHVybiBzcHRfYS0+cHJlc2VuY2UgLSBzcHRfYi0+cHJlc2VuY2U7CisKKyAgcmV0dXJuIHN0cmNtcCAoc3B0X2EtPm5hbWVfdGVtcGxhdGUsIHNwdF9iLT5uYW1lX3RlbXBsYXRlKTsKK30KKworc3RhdGljIEdUeXBlICoKK2dldF9vYmplY3RfdHlwZXMgKHZvaWQpCit7CisgICAgZ3BvaW50ZXIgZ19vYmplY3RfY2xhc3M7CisgICAgR0xpc3QgKnBsdWdpbnMgPSBOVUxMOworICAgIEdMaXN0ICpmYWN0b3JpZXMgPSBOVUxMOworICAgIEdMaXN0ICpsOworICAgIEdzdEVsZW1lbnRGYWN0b3J5ICpmYWN0b3J5ID0gTlVMTDsKKyAgICBHVHlwZSB0eXBlOworICAgIGdpbnQgaSA9IDA7CisgICAgZ2Jvb2xlYW4gcmVpbnNwZWN0OworCisgICAgLyogZ2V0IGEgbGlzdCBvZiBmZWF0dXJlcyBmcm9tIHBsdWdpbnMgaW4gb3VyIHNvdXJjZSBtb2R1bGUgKi8KKyAgICBwbHVnaW5zID0gZ3N0X3JlZ2lzdHJ5X2dldF9wbHVnaW5fbGlzdCAoZ3N0X3JlZ2lzdHJ5X2dldF9kZWZhdWx0KCkpOworCisgICAgeG1sc3RyID0gZ19zdHJpbmdfbmV3ICgiIik7CisKKyAgICByZWluc3BlY3QgPSAhZ19maWxlX3Rlc3QgKCJzY2Fub2JqLWJ1aWxkLnN0YW1wIiwgR19GSUxFX1RFU1RfRVhJU1RTKTsKKworICAgIHdoaWxlIChwbHVnaW5zKSB7CisgICAgICBHTGlzdCAqZmVhdHVyZXM7CisgICAgICBHc3RQbHVnaW4gKnBsdWdpbjsKKyAgICAgIGNvbnN0IGdjaGFyICpzb3VyY2U7CisgICAgICBGSUxFICppbnNwZWN0ID0gTlVMTDsKKyAgICAgIGdjaGFyICppbnNwZWN0X25hbWU7CisKKyAgICAgIHBsdWdpbiA9IChHc3RQbHVnaW4gKikgKHBsdWdpbnMtPmRhdGEpOworICAgICAgcGx1Z2lucyA9IGdfbGlzdF9uZXh0IChwbHVnaW5zKTsKKyAgICAgIHNvdXJjZSA9IGdzdF9wbHVnaW5fZ2V0X3NvdXJjZSAocGx1Z2luKTsKKyAgICAgIGlmICghc291cmNlIHx8IHN0cmNtcCAoc291cmNlLCAiJFNPVVJDRSIpICE9IDApIHsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIC8qIHNraXAgc3RhdGljIGNvcmVlbGVtZW50cyBwbHVnaW4gd2l0aCBwaXBlbGluZSBhbmQgYmluIGVsZW1lbnQgZmFjdG9yeSAqLworICAgICAgaWYgKGdzdF9wbHVnaW5fZ2V0X2ZpbGVuYW1lIChwbHVnaW4pID09IE5VTEwpCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICAkZGVidWdfbG9nICgicGx1Z2luOiAlcyBzb3VyY2U6ICVzIiwgcGx1Z2luLT5kZXNjLm5hbWUsIHNvdXJjZSk7CisKKyAgICAgIGlmIChyZWluc3BlY3QpIHsKKyAgICAgICAgaW5zcGVjdF9uYW1lID0gZ19zdHJkdXBfcHJpbnRmICgiJElOU1BFQ1RfRElSIiBHX0RJUl9TRVBBUkFUT1JfUyAicGx1Z2luLSVzLnhtbCIsCisgICAgICAgICAgICBwbHVnaW4tPmRlc2MubmFtZSk7CisgICAgICAgIGluc3BlY3QgPSBmb3BlbiAoaW5zcGVjdF9uYW1lLCAidyIpOworICAgICAgICBpZiAoaW5zcGVjdCA9PSBOVUxMKSB7CisgICAgICAgICAgZ19lcnJvciAoIkNvdWxkIG5vdCBvcGVuICVzIGZvciB3cml0aW5nOiAlc1xcbiIsIGluc3BlY3RfbmFtZSwKKyAgICAgICAgICAgICAgZ19zdHJlcnJvciAoZXJybm8pKTsKKyAgICAgICAgfQorICAgICAgICBnX2ZyZWUgKGluc3BlY3RfbmFtZSk7CisKKyAgICAgICAgLyogb3V0cHV0IHBsdWdpbiBkYXRhICovCisgICAgICAgIGZwdXRzICgiPHBsdWdpbj5cXG4iLGluc3BlY3QpOworICAgICAgICBmcHV0cyAoeG1scHJpbnQoMiwgIm5hbWUiLCBwbHVnaW4tPmRlc2MubmFtZSksaW5zcGVjdCk7CisgICAgICAgIGZwdXRzICh4bWxwcmludCgyLCAiZGVzY3JpcHRpb24iLCBwbHVnaW4tPmRlc2MuZGVzY3JpcHRpb24pLGluc3BlY3QpOworICAgICAgICBmcHV0cyAoeG1scHJpbnQoMiwgImZpbGVuYW1lIiwgcGx1Z2luLT5maWxlbmFtZSksaW5zcGVjdCk7CisgICAgICAgIGZwdXRzICh4bWxwcmludCgyLCAiYmFzZW5hbWUiLCBwbHVnaW4tPmJhc2VuYW1lKSxpbnNwZWN0KTsKKyAgICAgICAgZnB1dHMgKHhtbHByaW50KDIsICJ2ZXJzaW9uIiwgcGx1Z2luLT5kZXNjLnZlcnNpb24pLGluc3BlY3QpOworICAgICAgICBmcHV0cyAoeG1scHJpbnQoMiwgImxpY2Vuc2UiLCBwbHVnaW4tPmRlc2MubGljZW5zZSksaW5zcGVjdCk7CisgICAgICAgIGZwdXRzICh4bWxwcmludCgyLCAic291cmNlIiwgcGx1Z2luLT5kZXNjLnNvdXJjZSksaW5zcGVjdCk7CisgICAgICAgIGZwdXRzICh4bWxwcmludCgyLCAicGFja2FnZSIsIHBsdWdpbi0+ZGVzYy5wYWNrYWdlKSxpbnNwZWN0KTsKKyAgICAgICAgZnB1dHMgKHhtbHByaW50KDIsICJvcmlnaW4iLCBwbHVnaW4tPmRlc2Mub3JpZ2luKSxpbnNwZWN0KTsKKyAgICAgICAgZnB1dHMgKCIgIDxlbGVtZW50cz5cXG4iLCBpbnNwZWN0KTsKKyAgICAgIH0KKworICAgICAgZmVhdHVyZXMgPQorICAgICAgICAgIGdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2J5X3BsdWdpbiAoZ3N0X3JlZ2lzdHJ5X2dldF9kZWZhdWx0ICgpLAorICAgICAgICAgIHBsdWdpbi0+ZGVzYy5uYW1lKTsKKworICAgICAgLyogc29ydCBmYWN0b3JpZXMgYnkgZmVhdHVyZS0+bmFtZSAqLworICAgICAgZmVhdHVyZXMgPSBnX2xpc3Rfc29ydCAoZmVhdHVyZXMsIGdzdF9mZWF0dXJlX3NvcnRfY29tcGFyZSk7CisKKyAgICAgIHdoaWxlIChmZWF0dXJlcykgeworICAgICAgICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlOworICAgICAgICBmZWF0dXJlID0gR1NUX1BMVUdJTl9GRUFUVVJFIChmZWF0dXJlcy0+ZGF0YSk7CisgICAgICAgIGZlYXR1cmUgPSBnc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZCAoZmVhdHVyZSk7CisgICAgICAgIGlmICghZmVhdHVyZSkgeworICAgICAgICAgIGdfd2FybmluZyAoIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmZWF0dXJlICVzIiwKKyAgICAgICAgICAgICAgICAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfbmFtZSAoZmVhdHVyZSkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKEdTVF9JU19FTEVNRU5UX0ZBQ1RPUlkgKGZlYXR1cmUpKSB7CisgICAgICAgICAgY29uc3QgZ2NoYXIgKnBhZF9kaXJbXSA9IHsgInVua25vd24iLCJzb3VyY2UiLCJzaW5rIiB9OworICAgICAgICAgIGNvbnN0IGdjaGFyICpwYWRfcHJlc1tdID0geyAiYWx3YXlzIiwic29tZXRpbWVzIiwicmVxdWVzdCIgfTsKKyAgICAgICAgICBHTGlzdCAqcGFkcywgKnBhZDsKKworICAgICAgICAgICRkZWJ1Z19sb2cgKCIgIGZlYXR1cmU6ICVzIiwgZmVhdHVyZS0+bmFtZSk7CisKKyAgICAgICAgICBmYWN0b3J5ID0gR1NUX0VMRU1FTlRfRkFDVE9SWSAoZmVhdHVyZSk7CisgICAgICAgICAgZmFjdG9yaWVzID0gZ19saXN0X3ByZXBlbmQgKGZhY3RvcmllcywgZmFjdG9yeSk7CisKKyAgICAgICAgICBpZiAocmVpbnNwZWN0KSB7CisgICAgICAgICAgICAvKiBvdXRwdXQgZWxlbWVudCBkYXRhICovCisgICAgICAgICAgICBmcHV0cyAoIiAgICA8ZWxlbWVudD5cXG4iLCBpbnNwZWN0KTsKKyAgICAgICAgICAgIGZwdXRzICh4bWxwcmludCg2LCAibmFtZSIsIGZlYXR1cmUtPm5hbWUpLGluc3BlY3QpOworICAgICAgICAgICAgZnB1dHMgKHhtbHByaW50KDYsICJsb25nbmFtZSIsIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X2xvbmduYW1lIChmYWN0b3J5KSksaW5zcGVjdCk7CisgICAgICAgICAgICBmcHV0cyAoeG1scHJpbnQoNiwgImNsYXNzIiwgZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfa2xhc3MgKGZhY3RvcnkpKSxpbnNwZWN0KTsKKyAgICAgICAgICAgIGZwdXRzICh4bWxwcmludCg2LCAiZGVzY3JpcHRpb24iLCBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9kZXNjcmlwdGlvbiAoZmFjdG9yeSkpLGluc3BlY3QpOworICAgICAgICAgICAgZnB1dHMgKHhtbHByaW50KDYsICJhdXRob3IiLCBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9hdXRob3IgKGZhY3RvcnkpKSxpbnNwZWN0KTsKKyAgICAgICAgICAgIGZwdXRzICgiICAgICAgPHBhZHM+XFxuIiwgaW5zcGVjdCk7CisKKyAgICAgICAgICAgIC8qIG91dHB1dCBwYWQtdGVtcGxhdGUgZGF0YSAqLworICAgICAgICAgICAgcGFkcyA9IGdfbGlzdF9jb3B5ICgoR0xpc3QgKikgZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfc3RhdGljX3BhZF90ZW1wbGF0ZXMgKGZhY3RvcnkpKTsKKyAgICAgICAgICAgIHBhZHMgPSBnX2xpc3Rfc29ydCAocGFkcywgc3RhdGljX3BhZF90ZW1wbGF0ZV9jb21wYXJlKTsKKyAgICAgICAgICAgIGZvciAocGFkID0gcGFkczsgcGFkICE9IE5VTEw7IHBhZCA9IHBhZC0+bmV4dCkgeworICAgICAgICAgICAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqcHQgPSBwYWQtPmRhdGE7CisKKyAgICAgICAgICAgICAgZnB1dHMgKCIgICAgICAgIDxjYXBzPlxcbiIsIGluc3BlY3QpOworICAgICAgICAgICAgICBmcHV0cyAoeG1scHJpbnQoMTAsICJuYW1lIiwgcHQtPm5hbWVfdGVtcGxhdGUpLGluc3BlY3QpOworICAgICAgICAgICAgICBmcHV0cyAoeG1scHJpbnQoMTAsICJkaXJlY3Rpb24iLCBwYWRfZGlyW3B0LT5kaXJlY3Rpb25dKSxpbnNwZWN0KTsKKyAgICAgICAgICAgICAgZnB1dHMgKHhtbHByaW50KDEwLCAicHJlc2VuY2UiLCBwYWRfcHJlc1twdC0+cHJlc2VuY2VdKSxpbnNwZWN0KTsKKyAgICAgICAgICAgICAgZnB1dHMgKHhtbHByaW50KDEwLCAiZGV0YWlscyIsIHB0LT5zdGF0aWNfY2Fwcy5zdHJpbmcpLGluc3BlY3QpOworICAgICAgICAgICAgICBmcHV0cyAoIiAgICAgICAgPC9jYXBzPlxcbiIsIGluc3BlY3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ19saXN0X2ZyZWUgKHBhZHMpOworICAgICAgICAgICAgZnB1dHMgKCIgICAgICA8L3BhZHM+XFxuICAgIDwvZWxlbWVudD5cXG4iLCBpbnNwZWN0KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZmVhdHVyZXMgPSBnX2xpc3RfbmV4dCAoZmVhdHVyZXMpOworICAgICAgfQorCisgICAgICBpZiAocmVpbnNwZWN0KSB7CisgICAgICAgIGZwdXRzICgiICA8L2VsZW1lbnRzPlxcbjwvcGx1Z2luPiIsIGluc3BlY3QpOworICAgICAgICBmY2xvc2UgKGluc3BlY3QpOworICAgICAgfQorICAgIH0KKworICAgIGdfc3RyaW5nX2ZyZWUgKHhtbHN0ciwgVFJVRSk7CisKKyAgICAkZGVidWdfbG9nICgibnVtYmVyIG9mIGVsZW1lbnQgZmFjdG9yaWVzOiAlZCIsIGdfbGlzdF9sZW5ndGggKGZhY3RvcmllcykpOworCisgICAgLyogYWxsb2NhdGUgdGhlIG9iamVjdF90eXBlcyBhcnJheSB0byBob2xkIHRoZW0gKi8KKyAgICBvYmplY3RfdHlwZXMgPSBnX25ldzAgKEdUeXBlLCBnX2xpc3RfbGVuZ3RoIChmYWN0b3JpZXMpKyRudHlwZXMrMSk7CisKKyAgICBsID0gZmFjdG9yaWVzOworICAgIGkgPSAwOworCisgICAgLyogZmlsbCBpdCAqLworICAgIHdoaWxlIChsKSB7CisgICAgICBmYWN0b3J5ID0gR1NUX0VMRU1FTlRfRkFDVE9SWSAobC0+ZGF0YSk7CisgICAgICB0eXBlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfZWxlbWVudF90eXBlIChmYWN0b3J5KTsKKyAgICAgIGlmICh0eXBlICE9IDApIHsKKyAgICAgICAgJGRlYnVnX2xvZyAoImFkZGluZyB0eXBlIGZvciBmYWN0b3J5ICVzIiwgZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbG9uZ25hbWUgKGZhY3RvcnkpKTsKKyAgICAgICAgb2JqZWN0X3R5cGVzW2krK10gPSB0eXBlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZ19tZXNzYWdlICgidHlwZSBpbmZvIGZvciBmYWN0b3J5ICVzIG5vdCBmb3VuZCIsCisgICAgICAgICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9sb25nbmFtZSAoZmFjdG9yeSkpOworICAgICAgfQorICAgICAgbCA9IGdfbGlzdF9uZXh0IChsKTsKKyAgICB9CisKK0VPVAorCisjIGdldF90eXBlIGZ1bmN0aW9uczoKK2ZvciAoQHR5cGVzKSB7CitwcmludCBPVVRQVVQgPDxFT1Q7CisgICAgdHlwZSA9ICRfICgpOworICAgIGlmICh0eXBlID09IDApIHsKKyAgICAgIGdfbWVzc2FnZSAoIiRfICgpIGRpZG4ndCByZXR1cm4gYSB2YWxpZCB0eXBlIik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgb2JqZWN0X3R5cGVzW2krK10gPSB0eXBlOworICAgIH0KK0VPVAorfQorCisjIEltcGxpY2l0IHR5cGVzIHJldHJpZXZlZCBmcm9tIEdMaWI6Citmb3IgKEBpbXBsX3R5cGVzKSB7CitwcmludCBPVVRQVVQgPDxFT1Q7CisgICAgdHlwZSA9IGdfdHlwZV9mcm9tX25hbWUgKCIkXyIpOworICAgIGlmICh0eXBlID09IDApIHsKKyAgICAgIGdfbWVzc2FnZSAoIkltcGxpY2l0IHR5cGUgJF8gbm90IGZvdW5kIik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgb2JqZWN0X3R5cGVzW2krK10gPSB0eXBlOworICAgIH0KK0VPVAorfQorCitwcmludCBPVVRQVVQgPDxFT1Q7CisKKyAgICBvYmplY3RfdHlwZXNbaV0gPSAwOworCisgICAgLyogcmVmZXJlbmNlIHRoZSBHT2JqZWN0Q2xhc3MgdG8gaW5pdGlhbGl6ZSB0aGUgcGFyYW0gc3BlYyBwb29sCisgICAgICogcG90ZW50aWFsbHkgbmVlZGVkIGJ5IGludGVyZmFjZXMuIFNlZSBodHRwOi8vYnVncy5nbm9tZS5vcmcvNTcxODIwICovCisgICAgZ19vYmplY3RfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcmVmIChHX1RZUEVfT0JKRUNUKTsKKworICAgIC8qIE5lZWQgdG8gbWFrZSBzdXJlIGFsbCB0aGUgdHlwZXMgYXJlIGxvYWRlZCBpbiBhbmQgaW5pdGlhbGl6ZQorICAgICAqIHRoZWlyIHNpZ25hbHMgYW5kIHByb3BlcnRpZXMuCisgICAgICovCisgICAgZm9yIChpPTA7IG9iamVjdF90eXBlc1tpXTsgaSsrKQorICAgICAgeworICAgICAgICBpZiAoR19UWVBFX0lTX0NMQVNTRUQgKG9iamVjdF90eXBlc1tpXSkpCisgICAgICAgICAgZ190eXBlX2NsYXNzX3JlZiAob2JqZWN0X3R5cGVzW2ldKTsKKyAgICAgICAgaWYgKEdfVFlQRV9JU19JTlRFUkZBQ0UgKG9iamVjdF90eXBlc1tpXSkpCisgICAgICAgICAgZ190eXBlX2RlZmF1bHRfaW50ZXJmYWNlX3JlZiAob2JqZWN0X3R5cGVzW2ldKTsKKyAgICAgIH0KKworICAgIGdfdHlwZV9jbGFzc191bnJlZiAoZ19vYmplY3RfY2xhc3MpOworCisgICAgcmV0dXJuIG9iamVjdF90eXBlczsKK30KKworLyoKKyAqIFRoaXMgdXNlcyBHT2JqZWN0IHR5cGUgZnVuY3Rpb25zIHRvIG91dHB1dCBzaWduYWwgcHJvdG90eXBlcyBhbmQgdGhlIG9iamVjdAorICogaGllcmFyY2h5LgorICovCisKKy8qIFRoZSBvdXRwdXQgZmlsZXMgKi8KK2NvbnN0IGdjaGFyICpzaWduYWxzX2ZpbGVuYW1lID0gIiRuZXdfc2lnbmFsc19maWxlbmFtZSI7Citjb25zdCBnY2hhciAqaGllcmFyY2h5X2ZpbGVuYW1lID0gIiRuZXdfaGllcmFyY2h5X2ZpbGVuYW1lIjsKK2NvbnN0IGdjaGFyICppbnRlcmZhY2VzX2ZpbGVuYW1lID0gIiRuZXdfaW50ZXJmYWNlc19maWxlbmFtZSI7Citjb25zdCBnY2hhciAqcHJlcmVxdWlzaXRlc19maWxlbmFtZSA9ICIkbmV3X3ByZXJlcXVpc2l0ZXNfZmlsZW5hbWUiOworY29uc3QgZ2NoYXIgKmFyZ3NfZmlsZW5hbWUgPSAiJG5ld19hcmdzX2ZpbGVuYW1lIjsKKworCitzdGF0aWMgdm9pZCBvdXRwdXRfc2lnbmFscyAodm9pZCk7CitzdGF0aWMgdm9pZCBvdXRwdXRfb2JqZWN0X3NpZ25hbHMgKEZJTEUgKmZwLAorCQkJCSAgIEdUeXBlIG9iamVjdF90eXBlKTsKK3N0YXRpYyB2b2lkIG91dHB1dF9vYmplY3Rfc2lnbmFsIChGSUxFICpmcCwKKwkJCQkgIGNvbnN0IGdjaGFyICpvYmplY3RfY2xhc3NfbmFtZSwKKwkJCQkgIGd1aW50IHNpZ25hbF9pZCk7CitzdGF0aWMgY29uc3QgZ2NoYXIgKiBnZXRfdHlwZV9uYW1lIChHVHlwZSB0eXBlLAorCQkJICAgICAgICAgICAgZ2Jvb2xlYW4gKiBpc19wb2ludGVyKTsKK3N0YXRpYyB2b2lkIG91dHB1dF9vYmplY3RfaGllcmFyY2h5ICh2b2lkKTsKK3N0YXRpYyB2b2lkIG91dHB1dF9oaWVyYXJjaHkgKEZJTEUgKmZwLAorCQkJICAgICAgR1R5cGUgdHlwZSwKKwkJCSAgICAgIGd1aW50IGxldmVsKTsKKworc3RhdGljIHZvaWQgb3V0cHV0X29iamVjdF9pbnRlcmZhY2VzICh2b2lkKTsKK3N0YXRpYyB2b2lkIG91dHB1dF9pbnRlcmZhY2VzIChGSUxFICpmcCwKKwkJCSAgICAgICBHVHlwZSB0eXBlKTsKKworc3RhdGljIHZvaWQgb3V0cHV0X2ludGVyZmFjZV9wcmVyZXF1aXNpdGVzICh2b2lkKTsKK3N0YXRpYyB2b2lkIG91dHB1dF9wcmVyZXF1aXNpdGVzIChGSUxFICpmcCwKKwkJCSAgICAgICAgICBHVHlwZSB0eXBlKTsKKworc3RhdGljIHZvaWQgb3V0cHV0X2FyZ3MgKHZvaWQpOworc3RhdGljIHZvaWQgb3V0cHV0X29iamVjdF9hcmdzIChGSUxFICpmcCwgR1R5cGUgb2JqZWN0X3R5cGUpOworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIC8qIFNpbGVuY2UgdGhlIGNvbXBpbGVyOiAqLworICBpZiAoYXJndiAhPSBhcmd2KSBhcmdjID0gYXJnYzsKKworICAkVFlQRV9JTklUX0ZVTkM7CisKKyAgZ2V0X29iamVjdF90eXBlcyAoKTsKKworICBvdXRwdXRfc2lnbmFscyAoKTsKKyAgb3V0cHV0X29iamVjdF9oaWVyYXJjaHkgKCk7CisgIG91dHB1dF9vYmplY3RfaW50ZXJmYWNlcyAoKTsKKyAgb3V0cHV0X2ludGVyZmFjZV9wcmVyZXF1aXNpdGVzICgpOworICBvdXRwdXRfYXJncyAoKTsKKworICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZAorb3V0cHV0X3NpZ25hbHMgKHZvaWQpCit7CisgIEZJTEUgKmZwOworICBnaW50IGk7CisKKyAgZnAgPSBmb3BlbiAoc2lnbmFsc19maWxlbmFtZSwgInciKTsKKyAgaWYgKGZwID09IE5VTEwpCisgICAgeworICAgICAgZ193YXJuaW5nICgiQ291bGRuJ3Qgb3BlbiBvdXRwdXQgZmlsZTogJXMgOiAlcyIsIHNpZ25hbHNfZmlsZW5hbWUsIGdfc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgZm9yIChpID0gMDsgb2JqZWN0X3R5cGVzW2ldOyBpKyspCisgICAgb3V0cHV0X29iamVjdF9zaWduYWxzIChmcCwgb2JqZWN0X3R5cGVzW2ldKTsKKworICBmY2xvc2UgKGZwKTsKK30KKworc3RhdGljIGdpbnQKK2NvbXBhcmVfc2lnbmFscyAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKyAgY29uc3QgZ3VpbnQgKnNpZ25hbF9hID0gYTsKKyAgY29uc3QgZ3VpbnQgKnNpZ25hbF9iID0gYjsKKworICByZXR1cm4gc3RyY21wIChnX3NpZ25hbF9uYW1lICgqc2lnbmFsX2EpLCBnX3NpZ25hbF9uYW1lICgqc2lnbmFsX2IpKTsKK30KKworLyogVGhpcyBvdXRwdXRzIGFsbCB0aGUgc2lnbmFscyBvZiBvbmUgb2JqZWN0LiAqLworc3RhdGljIHZvaWQKK291dHB1dF9vYmplY3Rfc2lnbmFscyAoRklMRSAqZnAsIEdUeXBlIG9iamVjdF90eXBlKQoreworICBjb25zdCBnY2hhciAqb2JqZWN0X2NsYXNzX25hbWU7CisgIGd1aW50ICpzaWduYWxzLCBuX3NpZ25hbHM7CisgIGd1aW50IHNpZzsKKworICBpZiAoR19UWVBFX0lTX0lOU1RBTlRJQVRBQkxFIChvYmplY3RfdHlwZSkgfHwKKyAgICAgIEdfVFlQRV9JU19JTlRFUkZBQ0UgKG9iamVjdF90eXBlKSkKKyAgICB7CisKKyAgICAgIG9iamVjdF9jbGFzc19uYW1lID0gZ190eXBlX25hbWUgKG9iamVjdF90eXBlKTsKKworICAgICAgc2lnbmFscyA9IGdfc2lnbmFsX2xpc3RfaWRzIChvYmplY3RfdHlwZSwgJm5fc2lnbmFscyk7CisgICAgICBxc29ydCAoc2lnbmFscywgbl9zaWduYWxzLCBzaXplb2YgKGd1aW50KSwgY29tcGFyZV9zaWduYWxzKTsKKworICAgICAgZm9yIChzaWcgPSAwOyBzaWcgPCBuX3NpZ25hbHM7IHNpZysrKQorICAgICAgICB7CisgICAgICAgICAgIG91dHB1dF9vYmplY3Rfc2lnbmFsIChmcCwgb2JqZWN0X2NsYXNzX25hbWUsIHNpZ25hbHNbc2lnXSk7CisgICAgICAgIH0KKyAgICAgIGdfZnJlZSAoc2lnbmFscyk7CisgICB9Cit9CisKKworLyogVGhpcyBvdXRwdXRzIG9uZSBzaWduYWwuICovCitzdGF0aWMgdm9pZAorb3V0cHV0X29iamVjdF9zaWduYWwgKEZJTEUgKmZwLAorCQkgICAgICBjb25zdCBnY2hhciAqb2JqZWN0X25hbWUsCisJCSAgICAgIGd1aW50IHNpZ25hbF9pZCkKK3sKKyAgR1NpZ25hbFF1ZXJ5IHF1ZXJ5X2luZm87CisgIGNvbnN0IGdjaGFyICp0eXBlX25hbWUsICpyZXRfdHlwZSwgKm9iamVjdF9hcmcsICphcmdfbmFtZTsKKyAgZ2NoYXIgKnBvcywgKm9iamVjdF9hcmdfbG93ZXI7CisgIGdib29sZWFuIGlzX3BvaW50ZXI7CisgIGdjaGFyIGJ1ZmZlclsxMDI0XTsKKyAgZ3VpbnQgaSwgcGFyYW07CisgIGdpbnQgcGFyYW1fbnVtLCB3aWRnZXRfbnVtLCBldmVudF9udW0sIGNhbGxiYWNrX251bTsKKyAgZ2ludCAqYXJnX251bTsKKyAgZ2NoYXIgc2lnbmFsX25hbWVbMTI4XTsKKyAgZ2NoYXIgZmxhZ3NbMTZdOworCisgICRkZWJ1Z19sb2cgKCJPYmplY3Q6ICVzIFNpZ25hbDogJXUiLCBvYmplY3RfbmFtZSwgc2lnbmFsX2lkKTsKKworICBwYXJhbV9udW0gPSAxOworICB3aWRnZXRfbnVtID0gZXZlbnRfbnVtID0gY2FsbGJhY2tfbnVtID0gMDsKKworICBnX3NpZ25hbF9xdWVyeSAoc2lnbmFsX2lkLCAmcXVlcnlfaW5mbyk7CisKKyAgLyogT3V0cHV0IHRoZSBzaWduYWwgb2JqZWN0IHR5cGUgYW5kIHRoZSBhcmd1bWVudCBuYW1lLiBXZSBhc3N1bWUgdGhlCisgICAgIHR5cGUgaXMgYSBwb2ludGVyIC0gSSB0aGluayB0aGF0IGlzIE9LLiBXZSByZW1vdmUgIkd0ayIgb3IgIkdub21lIiBhbmQKKyAgICAgY29udmVydCB0byBsb3dlciBjYXNlIGZvciB0aGUgYXJndW1lbnQgbmFtZS4gKi8KKyAgcG9zID0gYnVmZmVyOworICBzcHJpbnRmIChwb3MsICIlcyAiLCBvYmplY3RfbmFtZSk7CisgIHBvcyArPSBzdHJsZW4gKHBvcyk7CisKKyAgLyogVHJ5IHRvIGNvbWUgdXAgd2l0aCBhIHNlbnNpYmxlIHZhcmlhYmxlIG5hbWUgZm9yIHRoZSBmaXJzdCBhcmcKKyAgICogSXQgY2hvcHMgb2ZmIDIga25vdyBwcmVmaXhlcyA6LyBhbmQgbWFrZXMgdGhlIG5hbWUgbG93ZXJjYXNlCisgICAqIEl0IHNob3VsZCByZXBsYWNlIGxvd2VyY2FzZSAtPiB1cHBlcmNhc2Ugd2l0aCAnXycKKyAgICogR0ZpbGVNb25pdG9yIC0+IGZpbGVfbW9uaXRvcgorICAgKiBHSU9FeHRlbnNpb25Qb2ludCAtPiBleHRlbnNpb25fcG9pbnQKKyAgICogR3RrVHJlZVZpZXcgLT4gdHJlZV92aWV3CisgICAqIGlmIDJuZCBjaGFyIGlzIHVwcGVyIGNhc2UgdG9vCisgICAqICAgc2VhcmNoIGZvciBmaXJzdCBsb3dlciBjYXNlIGFuZCBnbyBiYWNrIG9uZSBjaGFyCisgICAqIGVsc2UKKyAgICogICBzZWFyY2ggZm9yIG5leHQgdXBwZXIgY2FzZQorICAgKi8KKyAgaWYgKCFzdHJuY21wIChvYmplY3RfbmFtZSwgIkd0ayIsIDMpKQorICAgICAgb2JqZWN0X2FyZyA9IG9iamVjdF9uYW1lICsgMzsKKyAgZWxzZSBpZiAoIXN0cm5jbXAgKG9iamVjdF9uYW1lLCAiR25vbWUiLCA1KSkKKyAgICAgIG9iamVjdF9hcmcgPSBvYmplY3RfbmFtZSArIDU7CisgIGVsc2UKKyAgICAgIG9iamVjdF9hcmcgPSBvYmplY3RfbmFtZTsKKworICBvYmplY3RfYXJnX2xvd2VyID0gZ19hc2NpaV9zdHJkb3duIChvYmplY3RfYXJnLCAtMSk7CisgIHNwcmludGYgKHBvcywgIiolc1xcbiIsIG9iamVjdF9hcmdfbG93ZXIpOworICBwb3MgKz0gc3RybGVuIChwb3MpOworICBpZiAoIXN0cm5jbXAgKG9iamVjdF9hcmdfbG93ZXIsICJ3aWRnZXQiLCA2KSkKKyAgICB3aWRnZXRfbnVtID0gMjsKKyAgZ19mcmVlKG9iamVjdF9hcmdfbG93ZXIpOworCisgIC8qIENvbnZlcnQgc2lnbmFsIG5hbWUgdG8gdXNlIHVuZGVyc2NvcmVzIHJhdGhlciB0aGFuIGRhc2hlcyAnLScuICovCisgIHN0cm5jcHkgKHNpZ25hbF9uYW1lLCBxdWVyeV9pbmZvLnNpZ25hbF9uYW1lLCAxMjcpOworICBzaWduYWxfbmFtZVsxMjddID0gJ1xcMCc7CisgIGZvciAoaSA9IDA7IHNpZ25hbF9uYW1lW2ldOyBpKyspCisgICAgeworICAgICAgaWYgKHNpZ25hbF9uYW1lW2ldID09ICctJykKKwlzaWduYWxfbmFtZVtpXSA9ICdfJzsKKyAgICB9CisKKyAgLyogT3V0cHV0IHRoZSBzaWduYWwgcGFyYW1ldGVycy4gKi8KKyAgZm9yIChwYXJhbSA9IDA7IHBhcmFtIDwgcXVlcnlfaW5mby5uX3BhcmFtczsgcGFyYW0rKykKKyAgICB7CisgICAgICB0eXBlX25hbWUgPSBnZXRfdHlwZV9uYW1lIChxdWVyeV9pbmZvLnBhcmFtX3R5cGVzW3BhcmFtXSAmIH5HX1NJR05BTF9UWVBFX1NUQVRJQ19TQ09QRSwgJmlzX3BvaW50ZXIpOworCisgICAgICAvKiBNb3N0IGFyZ3VtZW50cyB0byB0aGUgY2FsbGJhY2sgYXJlIGNhbGxlZCAiYXJnMSIsICJhcmcyIiwgZXRjLgorICAgICAgICAgR3RrV2lkZ2V0cyBhcmUgY2FsbGVkICJ3aWRnZXQiLCAid2lkZ2V0MiIsIC4uLgorICAgICAgICAgR3RrQ2FsbGJhY2tzIGFyZSBjYWxsZWQgImNhbGxiYWNrIiwgImNhbGxiYWNrMiIsIC4uLiAqLworICAgICAgaWYgKCFzdHJjbXAgKHR5cGVfbmFtZSwgIkd0a1dpZGdldCIpKQorICAgICAgICB7CisgICAgICAgICAgYXJnX25hbWUgPSAid2lkZ2V0IjsKKyAgICAgICAgICBhcmdfbnVtID0gJndpZGdldF9udW07CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKHR5cGVfbmFtZSwgIkd0a0NhbGxiYWNrIikKKyAgICAgICAgICAgICAgIHx8ICFzdHJjbXAgKHR5cGVfbmFtZSwgIkd0a0NDYWxsYmFjayIpKQorICAgICAgICB7CisgICAgICAgICAgYXJnX25hbWUgPSAiY2FsbGJhY2siOworICAgICAgICAgIGFyZ19udW0gPSAmY2FsbGJhY2tfbnVtOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBhcmdfbmFtZSA9ICJhcmciOworICAgICAgICAgIGFyZ19udW0gPSAmcGFyYW1fbnVtOworICAgICAgICB9CisgICAgICBzcHJpbnRmIChwb3MsICIlcyAiLCB0eXBlX25hbWUpOworICAgICAgcG9zICs9IHN0cmxlbiAocG9zKTsKKworICAgICAgaWYgKCFhcmdfbnVtIHx8ICphcmdfbnVtID09IDApCisgICAgICAgIHNwcmludGYgKHBvcywgIiVzJXNcXG4iLCBpc19wb2ludGVyID8gIioiIDogIiAiLCBhcmdfbmFtZSk7CisgICAgICBlbHNlCisgICAgICAgIHNwcmludGYgKHBvcywgIiVzJXMlaVxcbiIsIGlzX3BvaW50ZXIgPyAiKiIgOiAiICIsIGFyZ19uYW1lLAorICAgICAgICAgICAgICAgICAqYXJnX251bSk7CisgICAgICBwb3MgKz0gc3RybGVuIChwb3MpOworCisgICAgICBpZiAoYXJnX251bSkKKyAgICAgICAgeworICAgICAgICAgIGlmICgqYXJnX251bSA9PSAwKQorICAgICAgICAgICAgKmFyZ19udW0gPSAyOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICphcmdfbnVtICs9IDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgcG9zID0gZmxhZ3M7CisgIC8qIFdlIHVzZSBvbmUtY2hhcmFjdGVyIGZsYWdzIGZvciBzaW1wbGljaXR5LiAqLworICBpZiAocXVlcnlfaW5mby5zaWduYWxfZmxhZ3MgJiBHX1NJR05BTF9SVU5fRklSU1QpCisgICAgKnBvcysrID0gJ2YnOworICBpZiAocXVlcnlfaW5mby5zaWduYWxfZmxhZ3MgJiBHX1NJR05BTF9SVU5fTEFTVCkKKyAgICAqcG9zKysgPSAnbCc7CisgIGlmIChxdWVyeV9pbmZvLnNpZ25hbF9mbGFncyAmIEdfU0lHTkFMX1JVTl9DTEVBTlVQKQorICAgICpwb3MrKyA9ICdjJzsKKyAgaWYgKHF1ZXJ5X2luZm8uc2lnbmFsX2ZsYWdzICYgR19TSUdOQUxfTk9fUkVDVVJTRSkKKyAgICAqcG9zKysgPSAncic7CisgIGlmIChxdWVyeV9pbmZvLnNpZ25hbF9mbGFncyAmIEdfU0lHTkFMX0RFVEFJTEVEKQorICAgICpwb3MrKyA9ICdkJzsKKyAgaWYgKHF1ZXJ5X2luZm8uc2lnbmFsX2ZsYWdzICYgR19TSUdOQUxfQUNUSU9OKQorICAgICpwb3MrKyA9ICdhJzsKKyAgaWYgKHF1ZXJ5X2luZm8uc2lnbmFsX2ZsYWdzICYgR19TSUdOQUxfTk9fSE9PS1MpCisgICAgKnBvcysrID0gJ2gnOworICAqcG9zID0gMDsKKworICAvKiBPdXRwdXQgdGhlIHJldHVybiB0eXBlIGFuZCBmdW5jdGlvbiBuYW1lLiAqLworICByZXRfdHlwZSA9IGdldF90eXBlX25hbWUgKHF1ZXJ5X2luZm8ucmV0dXJuX3R5cGUgJiB+R19TSUdOQUxfVFlQRV9TVEFUSUNfU0NPUEUsICZpc19wb2ludGVyKTsKKworICBmcHJpbnRmIChmcCwKKwkgICAiPFNJR05BTD5cXG48TkFNRT4lczo6JXM8L05BTUU+XFxuPFJFVFVSTlM+JXMlczwvUkVUVVJOUz5cXG48RkxBR1M+JXM8L0ZMQUdTPlxcbiVzPC9TSUdOQUw+XFxuXFxuIiwKKwkgICBvYmplY3RfbmFtZSwgcXVlcnlfaW5mby5zaWduYWxfbmFtZSwgcmV0X3R5cGUsIGlzX3BvaW50ZXIgPyAiKiIgOiAiIiwgZmxhZ3MsIGJ1ZmZlcik7Cit9CisKKworLyogUmV0dXJucyB0aGUgdHlwZSBuYW1lIHRvIHVzZSBmb3IgYSBzaWduYWwgYXJndW1lbnQgb3IgcmV0dXJuIHZhbHVlLCBnaXZlbgorICAgdGhlIEd0a1R5cGUgZnJvbSB0aGUgc2lnbmFsIGluZm8uIEl0IGFsc28gc2V0cyBpc19wb2ludGVyIHRvIFRSVUUgaWYgdGhlCisgICBhcmd1bWVudCBuZWVkcyBhICcqJyBzaW5jZSBpdCBpcyBhIHBvaW50ZXIuICovCitzdGF0aWMgY29uc3QgZ2NoYXIgKgorZ2V0X3R5cGVfbmFtZSAoR1R5cGUgdHlwZSwgZ2Jvb2xlYW4gKiBpc19wb2ludGVyKQoreworICBjb25zdCBnY2hhciAqdHlwZV9uYW1lOworCisgICppc19wb2ludGVyID0gRkFMU0U7CisgIHR5cGVfbmFtZSA9IGdfdHlwZV9uYW1lICh0eXBlKTsKKworICBzd2l0Y2ggKHR5cGUpIHsKKyAgY2FzZSBHX1RZUEVfTk9ORToKKyAgY2FzZSBHX1RZUEVfQ0hBUjoKKyAgY2FzZSBHX1RZUEVfVUNIQVI6CisgIGNhc2UgR19UWVBFX0JPT0xFQU46CisgIGNhc2UgR19UWVBFX0lOVDoKKyAgY2FzZSBHX1RZUEVfVUlOVDoKKyAgY2FzZSBHX1RZUEVfTE9ORzoKKyAgY2FzZSBHX1RZUEVfVUxPTkc6CisgIGNhc2UgR19UWVBFX0ZMT0FUOgorICBjYXNlIEdfVFlQRV9ET1VCTEU6CisgIGNhc2UgR19UWVBFX1BPSU5URVI6CisgICAgLyogVGhlc2UgYWxsIGhhdmUgbm9ybWFsIEMgdHlwZSBuYW1lcyBzbyB0aGV5IGFyZSBPSy4gKi8KKyAgICByZXR1cm4gdHlwZV9uYW1lOworCisgIGNhc2UgR19UWVBFX1NUUklORzoKKyAgICAvKiBBIEd0a1N0cmluZyBpcyByZWFsbHkgYSBnY2hhciouICovCisgICAgKmlzX3BvaW50ZXIgPSBUUlVFOworICAgIHJldHVybiAiZ2NoYXIiOworCisgIGNhc2UgR19UWVBFX0VOVU06CisgIGNhc2UgR19UWVBFX0ZMQUdTOgorICAgIC8qIFdlIHVzZSBhIGdpbnQgZm9yIGJvdGggb2YgdGhlc2UuIEhvcGVmdWxseSBhIHN1YnR5cGUgd2l0aCBhIGRlY2VudAorICAgICAgIG5hbWUgd2lsbCBiZSByZWdpc3RlcmVkIGFuZCB1c2VkIGluc3RlYWQsIGFzIEdUSysgZG9lcyBpdHNlbGYuICovCisgICAgcmV0dXJuICJnaW50IjsKKworICBjYXNlIEdfVFlQRV9CT1hFRDoKKyAgICAvKiBUaGUgYm94ZWQgdHlwZSBzaG91bGRuJ3QgYmUgdXNlZCBpdHNlbGYsIG9ubHkgc3VidHlwZXMuIFRob3VnaCB3ZQorICAgICAgIHJldHVybiAnZ3BvaW50ZXInIGp1c3QgaW4gY2FzZS4gKi8KKyAgICByZXR1cm4gImdwb2ludGVyIjsKKworICBjYXNlIEdfVFlQRV9QQVJBTToKKyAgICAvKiBBIEdQYXJhbSBpcyByZWFsbHkgYSBHUGFyYW1TcGVjKi4gKi8KKyAgICAqaXNfcG9pbnRlciA9IFRSVUU7CisgICAgcmV0dXJuICJHUGFyYW1TcGVjIjsKKworI2lmIEdMSUJfQ0hFQ0tfVkVSU0lPTiAoMiwgMjUsIDkpCisgIGNhc2UgR19UWVBFX1ZBUklBTlQ6CisgICAgKmlzX3BvaW50ZXIgPSBUUlVFOworICAgIHJldHVybiAiR1ZhcmlhbnQiOworI2VuZGlmCisKK2RlZmF1bHQ6CisgICAgYnJlYWs7CisgIH0KKworICAvKiBGb3IgYWxsIEdPYmplY3Qgc3ViY2xhc3NlcyB3ZSBjYW4gdXNlIHRoZSBjbGFzcyBuYW1lIHdpdGggYSAiKiIsCisgICAgIGUuZy4gJ0d0a1dpZGdldCAqJy4gKi8KKyAgaWYgKGdfdHlwZV9pc19hICh0eXBlLCBHX1RZUEVfT0JKRUNUKSkKKyAgICAqaXNfcG9pbnRlciA9IFRSVUU7CisKKyAgLyogQWxzbyBjYXRjaCBub24gR09iamVjdCByb290IHR5cGVzICovCisgIGlmIChHX1RZUEVfSVNfQ0xBU1NFRCAodHlwZSkpCisgICAgKmlzX3BvaW50ZXIgPSBUUlVFOworCisgIC8qIEFsbCBib3hlZCBzdWJ0eXBlcyB3aWxsIGJlIHBvaW50ZXJzIGFzIHdlbGwuICovCisgIC8qIEV4Y2VwdGlvbjogR1N0cnYgKi8KKyAgaWYgKGdfdHlwZV9pc19hICh0eXBlLCBHX1RZUEVfQk9YRUQpICYmCisgICAgICAhZ190eXBlX2lzX2EgKHR5cGUsIEdfVFlQRV9TVFJWKSkKKyAgICAqaXNfcG9pbnRlciA9IFRSVUU7CisKKyAgLyogQWxsIHBvaW50ZXIgc3VidHlwZXMgd2lsbCBiZSBwb2ludGVycyBhcyB3ZWxsLiAqLworICBpZiAoZ190eXBlX2lzX2EgKHR5cGUsIEdfVFlQRV9QT0lOVEVSKSkKKyAgICAqaXNfcG9pbnRlciA9IFRSVUU7CisKKyAgLyogQnV0IGVudW1zIGFyZSBub3QgKi8KKyAgaWYgKGdfdHlwZV9pc19hICh0eXBlLCBHX1RZUEVfRU5VTSkgfHwKKyAgICAgIGdfdHlwZV9pc19hICh0eXBlLCBHX1RZUEVfRkxBR1MpKQorICAgICppc19wb2ludGVyID0gRkFMU0U7CisKKyAgcmV0dXJuIHR5cGVfbmFtZTsKK30KKworCisvKiBUaGlzIG91dHB1dHMgdGhlIGhpZXJhcmNoeSBvZiBhbGwgb2JqZWN0cyB3aGljaCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQsCisgICBpLmUuIGJ5IGNhbGxpbmcgdGhlaXIgWFhYX2dldF90eXBlKCkgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uICovCitzdGF0aWMgdm9pZAorb3V0cHV0X29iamVjdF9oaWVyYXJjaHkgKHZvaWQpCit7CisgIEZJTEUgKmZwOworICBnaW50IGksajsKKyAgR1R5cGUgcm9vdCwgdHlwZTsKKyAgR1R5cGUgcm9vdF90eXBlc1skbnR5cGVzXSA9IHsgR19UWVBFX0lOVkFMSUQsIH07CisKKyAgZnAgPSBmb3BlbiAoaGllcmFyY2h5X2ZpbGVuYW1lLCAidyIpOworICBpZiAoZnAgPT0gTlVMTCkKKyAgICB7CisgICAgICBnX3dhcm5pbmcgKCJDb3VsZG4ndCBvcGVuIG91dHB1dCBmaWxlOiAlcyA6ICVzIiwgaGllcmFyY2h5X2ZpbGVuYW1lLCBnX3N0cmVycm9yKGVycm5vKSk7CisgICAgICByZXR1cm47CisgICAgfQorICBvdXRwdXRfaGllcmFyY2h5IChmcCwgR19UWVBFX09CSkVDVCwgMCk7CisgIG91dHB1dF9oaWVyYXJjaHkgKGZwLCBHX1RZUEVfSU5URVJGQUNFLCAwKTsKKworICBmb3IgKGk9MDsgb2JqZWN0X3R5cGVzW2ldOyBpKyspIHsKKyAgICByb290ID0gb2JqZWN0X3R5cGVzW2ldOworICAgIHdoaWxlICgodHlwZSA9IGdfdHlwZV9wYXJlbnQgKHJvb3QpKSkgeworICAgICAgcm9vdCA9IHR5cGU7CisgICAgfQorICAgIGlmICgocm9vdCAhPSBHX1RZUEVfT0JKRUNUKSAmJiAocm9vdCAhPSBHX1RZUEVfSU5URVJGQUNFKSkgeworICAgICAgZm9yIChqPTA7IHJvb3RfdHlwZXNbal07IGorKykgeworICAgICAgICBpZiAocm9vdCA9PSByb290X3R5cGVzW2pdKSB7CisgICAgICAgICAgcm9vdCA9IEdfVFlQRV9JTlZBTElEOyBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYocm9vdCkgeworICAgICAgICByb290X3R5cGVzW2pdID0gcm9vdDsKKyAgICAgICAgb3V0cHV0X2hpZXJhcmNoeSAoZnAsIHJvb3QsIDApOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGZjbG9zZSAoZnApOworfQorCitzdGF0aWMgaW50Citjb21wYXJlX3R5cGVzIChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworICBjb25zdCBjaGFyICpuYSA9IGdfdHlwZV9uYW1lICgqKChHVHlwZSAqKWEpKTsKKyAgY29uc3QgY2hhciAqbmIgPSBnX3R5cGVfbmFtZSAoKigoR1R5cGUgKiliKSk7CisKKyAgcmV0dXJuIGdfc3RyY21wMCAobmEsIG5iKTsKK30KKworCisvKiBUaGlzIGlzIGNhbGxlZCByZWN1cnNpdmVseSB0byBvdXRwdXQgdGhlIGhpZXJhcmNoeSBvZiBhIG9iamVjdC4gKi8KK3N0YXRpYyB2b2lkCitvdXRwdXRfaGllcmFyY2h5IChGSUxFICAqZnAsCisJCSAgR1R5cGUgIHR5cGUsCisJCSAgZ3VpbnQgICBsZXZlbCkKK3sKKyAgZ3VpbnQgaTsKKyAgR1R5cGUgKmNoaWxkcmVuOworICBndWludCBuX2NoaWxkcmVuOworCisgIGlmICghdHlwZSkKKyAgICByZXR1cm47CisKKyAgZm9yIChpID0gMDsgaSA8IGxldmVsOyBpKyspCisgICAgZnByaW50ZiAoZnAsICIgICIpOworICBmcHJpbnRmIChmcCwgIiVzXFxuIiwgZ190eXBlX25hbWUgKHR5cGUpKTsKKworICBjaGlsZHJlbiA9IGdfdHlwZV9jaGlsZHJlbiAodHlwZSwgJm5fY2hpbGRyZW4pOworICBxc29ydCAoY2hpbGRyZW4sIG5fY2hpbGRyZW4sIHNpemVvZiAoR1R5cGUpLCBjb21wYXJlX3R5cGVzKTsKKworCisgIGZvciAoaT0wOyBpIDwgbl9jaGlsZHJlbjsgaSsrKQorICAgIG91dHB1dF9oaWVyYXJjaHkgKGZwLCBjaGlsZHJlbltpXSwgbGV2ZWwgKyAxKTsKKworICBnX2ZyZWUgKGNoaWxkcmVuKTsKK30KKworc3RhdGljIHZvaWQgb3V0cHV0X29iamVjdF9pbnRlcmZhY2VzICh2b2lkKQoreworICBndWludCBpOworICBGSUxFICpmcDsKKworICBmcCA9IGZvcGVuIChpbnRlcmZhY2VzX2ZpbGVuYW1lLCAidyIpOworICBpZiAoZnAgPT0gTlVMTCkKKyAgICB7CisgICAgICBnX3dhcm5pbmcgKCJDb3VsZG4ndCBvcGVuIG91dHB1dCBmaWxlOiAlcyA6ICVzIiwgaW50ZXJmYWNlc19maWxlbmFtZSwgZ19zdHJlcnJvcihlcnJubykpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgb3V0cHV0X2ludGVyZmFjZXMgKGZwLCBHX1RZUEVfT0JKRUNUKTsKKworICBmb3IgKGkgPSAwOyBvYmplY3RfdHlwZXNbaV07IGkrKykKKyAgICB7CisgICAgICBpZiAoIWdfdHlwZV9wYXJlbnQgKG9iamVjdF90eXBlc1tpXSkgJiYKKyAgICAgICAgICAob2JqZWN0X3R5cGVzW2ldICE9IEdfVFlQRV9PQkpFQ1QpICYmCisgICAgICAgICAgR19UWVBFX0lTX0lOU1RBTlRJQVRBQkxFIChvYmplY3RfdHlwZXNbaV0pKQorICAgICAgICB7CisgICAgICAgICAgb3V0cHV0X2ludGVyZmFjZXMgKGZwLCBvYmplY3RfdHlwZXNbaV0pOworICAgICAgICB9CisgICAgfQorICBmY2xvc2UgKGZwKTsKK30KKworc3RhdGljIHZvaWQKK291dHB1dF9pbnRlcmZhY2VzIChGSUxFICAqZnAsCisJCSAgIEdUeXBlICB0eXBlKQoreworICBndWludCBpOworICBHVHlwZSAqY2hpbGRyZW4sICppbnRlcmZhY2VzOworICBndWludCBuX2NoaWxkcmVuLCBuX2ludGVyZmFjZXM7CisKKyAgaWYgKCF0eXBlKQorICAgIHJldHVybjsKKworICBpbnRlcmZhY2VzID0gZ190eXBlX2ludGVyZmFjZXMgKHR5cGUsICZuX2ludGVyZmFjZXMpOworCisgIGlmIChuX2ludGVyZmFjZXMgPiAwKQorICAgIHsKKyAgICAgIGZwcmludGYgKGZwLCAiJXMiLCBnX3R5cGVfbmFtZSAodHlwZSkpOworICAgICAgZm9yIChpPTA7IGkgPCBuX2ludGVyZmFjZXM7IGkrKykKKyAgICAgICAgICBmcHJpbnRmIChmcCwgIiAlcyIsIGdfdHlwZV9uYW1lIChpbnRlcmZhY2VzW2ldKSk7CisgICAgICBmcHJpbnRmIChmcCwgIlxcbiIpOworICAgICB9CisgIGdfZnJlZSAoaW50ZXJmYWNlcyk7CisKKyAgY2hpbGRyZW4gPSBnX3R5cGVfY2hpbGRyZW4gKHR5cGUsICZuX2NoaWxkcmVuKTsKKworICBmb3IgKGk9MDsgaSA8IG5fY2hpbGRyZW47IGkrKykKKyAgICBvdXRwdXRfaW50ZXJmYWNlcyAoZnAsIGNoaWxkcmVuW2ldKTsKKworICBnX2ZyZWUgKGNoaWxkcmVuKTsKK30KKworc3RhdGljIHZvaWQgb3V0cHV0X2ludGVyZmFjZV9wcmVyZXF1aXNpdGVzICh2b2lkKQoreworICBGSUxFICpmcDsKKworICBmcCA9IGZvcGVuIChwcmVyZXF1aXNpdGVzX2ZpbGVuYW1lLCAidyIpOworICBpZiAoZnAgPT0gTlVMTCkKKyAgICB7CisgICAgICBnX3dhcm5pbmcgKCJDb3VsZG4ndCBvcGVuIG91dHB1dCBmaWxlOiAlcyA6ICVzIiwgcHJlcmVxdWlzaXRlc19maWxlbmFtZSwgZ19zdHJlcnJvcihlcnJubykpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgb3V0cHV0X3ByZXJlcXVpc2l0ZXMgKGZwLCBHX1RZUEVfSU5URVJGQUNFKTsKKyAgZmNsb3NlIChmcCk7Cit9CisKK3N0YXRpYyB2b2lkCitvdXRwdXRfcHJlcmVxdWlzaXRlcyAoRklMRSAgKmZwLAorCQkgICAgICBHVHlwZSAgdHlwZSkKK3sKKyNpZiBHTElCX0NIRUNLX1ZFUlNJT04oMiwxLDApCisgIGd1aW50IGk7CisgIEdUeXBlICpjaGlsZHJlbiwgKnByZXJlcXVpc2l0ZXM7CisgIGd1aW50IG5fY2hpbGRyZW4sIG5fcHJlcmVxdWlzaXRlczsKKworICBpZiAoIXR5cGUpCisgICAgcmV0dXJuOworCisgIHByZXJlcXVpc2l0ZXMgPSBnX3R5cGVfaW50ZXJmYWNlX3ByZXJlcXVpc2l0ZXMgKHR5cGUsICZuX3ByZXJlcXVpc2l0ZXMpOworCisgIGlmIChuX3ByZXJlcXVpc2l0ZXMgPiAwKQorICAgIHsKKyAgICAgIGZwcmludGYgKGZwLCAiJXMiLCBnX3R5cGVfbmFtZSAodHlwZSkpOworICAgICAgZm9yIChpPTA7IGkgPCBuX3ByZXJlcXVpc2l0ZXM7IGkrKykKKyAgICAgICAgICBmcHJpbnRmIChmcCwgIiAlcyIsIGdfdHlwZV9uYW1lIChwcmVyZXF1aXNpdGVzW2ldKSk7CisgICAgICBmcHJpbnRmIChmcCwgIlxcbiIpOworICAgICB9CisgIGdfZnJlZSAocHJlcmVxdWlzaXRlcyk7CisKKyAgY2hpbGRyZW4gPSBnX3R5cGVfY2hpbGRyZW4gKHR5cGUsICZuX2NoaWxkcmVuKTsKKworICBmb3IgKGk9MDsgaSA8IG5fY2hpbGRyZW47IGkrKykKKyAgICBvdXRwdXRfcHJlcmVxdWlzaXRlcyAoZnAsIGNoaWxkcmVuW2ldKTsKKworICBnX2ZyZWUgKGNoaWxkcmVuKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZAorb3V0cHV0X2FyZ3MgKHZvaWQpCit7CisgIEZJTEUgKmZwOworICBnaW50IGk7CisKKyAgZnAgPSBmb3BlbiAoYXJnc19maWxlbmFtZSwgInciKTsKKyAgaWYgKGZwID09IE5VTEwpCisgICAgeworICAgICAgZ193YXJuaW5nICgiQ291bGRuJ3Qgb3BlbiBvdXRwdXQgZmlsZTogJXMgOiAlcyIsIGFyZ3NfZmlsZW5hbWUsIGdfc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgZm9yIChpID0gMDsgb2JqZWN0X3R5cGVzW2ldOyBpKyspIHsKKyAgICBvdXRwdXRfb2JqZWN0X2FyZ3MgKGZwLCBvYmplY3RfdHlwZXNbaV0pOworICB9CisKKyAgZmNsb3NlIChmcCk7Cit9CisKK3N0YXRpYyBnaW50Citjb21wYXJlX3BhcmFtX3NwZWNzIChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworICBHUGFyYW1TcGVjICpzcGVjX2EgPSAqKEdQYXJhbVNwZWMgKiopYTsKKyAgR1BhcmFtU3BlYyAqc3BlY19iID0gKihHUGFyYW1TcGVjICoqKWI7CisKKyAgcmV0dXJuIHN0cmNtcCAoZ19wYXJhbV9zcGVjX2dldF9uYW1lIChzcGVjX2EpLCBnX3BhcmFtX3NwZWNfZ2V0X25hbWUgKHNwZWNfYikpOworfQorCisvKiBJdHMgY29tbW9uIHRvIGhhdmUgdW5zaWduZWQgcHJvcGVydGllcyByZXN0cmljdGVkCisgKiB0byB0aGUgc2lnbmVkIHJhbmdlLiBUaGVyZWZvcmUgd2UgbWFrZSB0aGlzIGxvb2sKKyAqIGEgYml0IG5pY2VyIGJ5IHNwZWxsaW5nIG91dCB0aGUgbWF4IGNvbnN0YW50cy4KKyAqLworCisvKiBEb24ndCB1c2UgIj09IiB3aXRoIGZsb2F0cywgaXQgbWlnaHQgdHJpZ2dlciBhIGdjYyB3YXJuaW5nLiAgKi8KKyNkZWZpbmUgR1RLRE9DX0NPTVBBUkVfRkxPQVQoeCwgeSkgKHggPD0geSAmJiB4ID49IHkpCisKK3N0YXRpYyBnY2hhcioKK2Rlc2NyaWJlX2RvdWJsZV9jb25zdGFudCAoZ2RvdWJsZSB2YWx1ZSkKK3sKKyAgZ2NoYXIgKmRlc2M7CisKKyAgaWYgKEdUS0RPQ19DT01QQVJFX0ZMT0FUICh2YWx1ZSwgR19NQVhET1VCTEUpKQorICAgIGRlc2MgPSBnX3N0cmR1cCAoIkdfTUFYRE9VQkxFIik7CisgIGVsc2UgaWYgKEdUS0RPQ19DT01QQVJFX0ZMT0FUICh2YWx1ZSwgR19NSU5ET1VCTEUpKQorICAgIGRlc2MgPSBnX3N0cmR1cCAoIkdfTUlORE9VQkxFIik7CisgIGVsc2UgaWYgKEdUS0RPQ19DT01QQVJFX0ZMT0FUICh2YWx1ZSwgLUdfTUFYRE9VQkxFKSkKKyAgICBkZXNjID0gZ19zdHJkdXAgKCItR19NQVhET1VCTEUiKTsKKyAgZWxzZSBpZiAoR1RLRE9DX0NPTVBBUkVfRkxPQVQgKHZhbHVlLCBHX01BWEZMT0FUKSkKKyAgICBkZXNjID0gZ19zdHJkdXAgKCJHX01BWEZMT0FUIik7CisgIGVsc2UgaWYgKEdUS0RPQ19DT01QQVJFX0ZMT0FUICh2YWx1ZSwgR19NSU5GTE9BVCkpCisgICAgZGVzYyA9IGdfc3RyZHVwICgiR19NSU5GTE9BVCIpOworICBlbHNlIGlmIChHVEtET0NfQ09NUEFSRV9GTE9BVCAodmFsdWUsIC1HX01BWEZMT0FUKSkKKyAgICBkZXNjID0gZ19zdHJkdXAgKCItR19NQVhGTE9BVCIpOworICBlbHNleworICAgIC8qIG1ha2Ugc3VyZSBmbG9hdHMgYXJlIG91dHB1dCB3aXRoIGEgZGVjaW1hbCBkb3QgaXJyZXNwZWN0aXZlIG9mCisgICAgKiBjdXJyZW50IGxvY2FsZS4gVXNlIGZvcm1hdGQgc2luY2Ugd2Ugd2FudCBodW1hbi1yZWFkYWJsZSBudW1iZXJzCisgICAgKiBhbmQgZG8gbm90IG5lZWQgdGhlIGV4YWN0IHNhbWUgYml0IHJlcHJlc2VudGF0aW9uIHdoZW4gZGVzZXJpYWxpc2luZyAqLworICAgIGRlc2MgPSBnX21hbGxvYzAgKEdfQVNDSUlfRFRPU1RSX0JVRl9TSVpFKTsKKyAgICBnX2FzY2lpX2Zvcm1hdGQgKGRlc2MsIEdfQVNDSUlfRFRPU1RSX0JVRl9TSVpFLCAiJWciLCB2YWx1ZSk7CisgIH0KKworICByZXR1cm4gZGVzYzsKK30KKworc3RhdGljIGdjaGFyKgorZGVzY3JpYmVfc2lnbmVkX2NvbnN0YW50IChnc2l6ZSBzaXplLCBnaW50NjQgdmFsdWUpCit7CisgIGdjaGFyICpkZXNjID0gTlVMTDsKKworICBzd2l0Y2ggKHNpemUpIHsKKyAgICBjYXNlIDg6CisgICAgICBpZiAodmFsdWUgPT0gR19NQVhJTlQ2NCkKKyAgICAgICAgZGVzYyA9IGdfc3RyZHVwICgiR19NQVhJTlQ2NCIpOworICAgICAgZWxzZSBpZiAodmFsdWUgPT0gR19NSU5JTlQ2NCkKKyAgICAgICAgZGVzYyA9IGdfc3RyZHVwICgiR19NSU5JTlQ2NCIpOworICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgY2FzZSA0OgorICAgICAgaWYgKHNpemVvZiAoaW50KSA9PSA0KSB7CisgICAgICAgIGlmICh2YWx1ZSA9PSBHX01BWElOVCkKKyAgICAgICAgICBkZXNjID0gZ19zdHJkdXAgKCJHX01BWElOVCIpOworICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBHX01JTklOVCkKKyAgICAgICAgICBkZXNjID0gZ19zdHJkdXAgKCJHX01JTklOVCIpOworICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSAoZ2ludDY0KUdfTUFYVUlOVCkKKyAgICAgICAgICBkZXNjID0gZ19zdHJkdXAgKCJHX01BWFVJTlQiKTsKKyAgICAgIH0KKyAgICAgIGlmICh2YWx1ZSA9PSBHX01BWExPTkcpCisgICAgICAgIGRlc2MgPSBnX3N0cmR1cCAoIkdfTUFYTE9ORyIpOworICAgICAgZWxzZSBpZiAodmFsdWUgPT0gR19NSU5MT05HKQorICAgICAgICBkZXNjID0gZ19zdHJkdXAgKCJHX01JTkxPTkciKTsKKyAgICAgIGVsc2UgaWYgKHZhbHVlID09IChnaW50NjQpR19NQVhVTE9ORykKKyAgICAgICAgZGVzYyA9IGdfc3RyZHVwICgiR19NQVhVTE9ORyIpOworICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgY2FzZSAyOgorICAgICAgaWYgKHNpemVvZiAoaW50KSA9PSAyKSB7CisgICAgICAgIGlmICh2YWx1ZSA9PSBHX01BWElOVCkKKyAgICAgICAgICBkZXNjID0gZ19zdHJkdXAgKCJHX01BWElOVCIpOworICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBHX01JTklOVCkKKyAgICAgICAgICBkZXNjID0gZ19zdHJkdXAgKCJHX01JTklOVCIpOworICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSAoZ2ludDY0KUdfTUFYVUlOVCkKKyAgICAgICAgICBkZXNjID0gZ19zdHJkdXAgKCJHX01BWFVJTlQiKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorICBpZiAoIWRlc2MpCisgICAgZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIiUiIEdfR0lOVDY0X0ZPUk1BVCwgdmFsdWUpOworCisgIHJldHVybiBkZXNjOworfQorCitzdGF0aWMgZ2NoYXIqCitkZXNjcmliZV91bnNpZ25lZF9jb25zdGFudCAoZ3NpemUgc2l6ZSwgZ3VpbnQ2NCB2YWx1ZSkKK3sKKyAgZ2NoYXIgKmRlc2MgPSBOVUxMOworCisgIHN3aXRjaCAoc2l6ZSkgeworICAgIGNhc2UgODoKKyAgICAgIGlmICh2YWx1ZSA9PSBHX01BWElOVDY0KQorICAgICAgICBkZXNjID0gZ19zdHJkdXAgKCJHX01BWElOVDY0Iik7CisgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBHX01BWFVJTlQ2NCkKKyAgICAgICAgZGVzYyA9IGdfc3RyZHVwICgiR19NQVhVSU5UNjQiKTsKKyAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgIGNhc2UgNDoKKyAgICAgIGlmIChzaXplb2YgKGludCkgPT0gNCkgeworICAgICAgICBpZiAodmFsdWUgPT0gKGd1aW50NjQpR19NQVhJTlQpCisgICAgICAgICAgZGVzYyA9IGdfc3RyZHVwICgiR19NQVhJTlQiKTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gR19NQVhVSU5UKQorICAgICAgICAgIGRlc2MgPSBnX3N0cmR1cCAoIkdfTUFYVUlOVCIpOworICAgICAgfQorICAgICAgaWYgKHZhbHVlID09IChndWludDY0KUdfTUFYTE9ORykKKyAgICAgICAgZGVzYyA9IGdfc3RyZHVwICgiR19NQVhMT05HIik7CisgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBHX01BWFVMT05HKQorICAgICAgICBkZXNjID0gZ19zdHJkdXAgKCJHX01BWFVMT05HIik7CisgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICBjYXNlIDI6CisgICAgICBpZiAoc2l6ZW9mIChpbnQpID09IDIpIHsKKyAgICAgICAgaWYgKHZhbHVlID09IChndWludDY0KUdfTUFYSU5UKQorICAgICAgICAgIGRlc2MgPSBnX3N0cmR1cCAoIkdfTUFYSU5UIik7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlID09IEdfTUFYVUlOVCkKKyAgICAgICAgICBkZXNjID0gZ19zdHJkdXAgKCJHX01BWFVJTlQiKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorICBpZiAoIWRlc2MpCisgICAgZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIiUiIEdfR1VJTlQ2NF9GT1JNQVQsIHZhbHVlKTsKKworICByZXR1cm4gZGVzYzsKK30KKworc3RhdGljIGdjaGFyKgorZGVzY3JpYmVfdHlwZSAoR1BhcmFtU3BlYyAqc3BlYykKK3sKKyAgZ2NoYXIgKmRlc2M7CisgIGdjaGFyICpsb3dlcjsKKyAgZ2NoYXIgKnVwcGVyOworCisgIGlmIChHX0lTX1BBUkFNX1NQRUNfQ0hBUiAoc3BlYykpCisgICAgeworICAgICAgR1BhcmFtU3BlY0NoYXIgKnBzcGVjID0gR19QQVJBTV9TUEVDX0NIQVIgKHNwZWMpOworCisgICAgICBsb3dlciA9IGRlc2NyaWJlX3NpZ25lZF9jb25zdGFudCAoc2l6ZW9mKGdjaGFyKSwgcHNwZWMtPm1pbmltdW0pOworICAgICAgdXBwZXIgPSBkZXNjcmliZV9zaWduZWRfY29uc3RhbnQgKHNpemVvZihnY2hhciksIHBzcGVjLT5tYXhpbXVtKTsKKyAgICAgIGlmIChwc3BlYy0+bWluaW11bSA9PSBHX01JTklOVDggJiYgcHNwZWMtPm1heGltdW0gPT0gR19NQVhJTlQ4KQorCWRlc2MgPSBnX3N0cmR1cCAoIiIpOworICAgICAgZWxzZSBpZiAocHNwZWMtPm1pbmltdW0gPT0gR19NSU5JTlQ4KQorCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCI8PSAlcyIsIHVwcGVyKTsKKyAgICAgIGVsc2UgaWYgKHBzcGVjLT5tYXhpbXVtID09IEdfTUFYSU5UOCkKKwlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiPj0gJXMiLCBsb3dlcik7CisgICAgICBlbHNlCisJZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIlslcywlc10iLCBsb3dlciwgdXBwZXIpOworICAgICAgZ19mcmVlIChsb3dlcik7CisgICAgICBnX2ZyZWUgKHVwcGVyKTsKKyAgICB9CisgIGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19VQ0hBUiAoc3BlYykpCisgICAgeworICAgICAgR1BhcmFtU3BlY1VDaGFyICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19VQ0hBUiAoc3BlYyk7CisKKyAgICAgIGxvd2VyID0gZGVzY3JpYmVfdW5zaWduZWRfY29uc3RhbnQgKHNpemVvZihndWNoYXIpLCBwc3BlYy0+bWluaW11bSk7CisgICAgICB1cHBlciA9IGRlc2NyaWJlX3Vuc2lnbmVkX2NvbnN0YW50IChzaXplb2YoZ3VjaGFyKSwgcHNwZWMtPm1heGltdW0pOworICAgICAgaWYgKHBzcGVjLT5taW5pbXVtID09IDAgJiYgcHNwZWMtPm1heGltdW0gPT0gR19NQVhVSU5UOCkKKwlkZXNjID0gZ19zdHJkdXAgKCIiKTsKKyAgICAgIGVsc2UgaWYgKHBzcGVjLT5taW5pbXVtID09IDApCisJZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIjw9ICVzIiwgdXBwZXIpOworICAgICAgZWxzZSBpZiAocHNwZWMtPm1heGltdW0gPT0gR19NQVhVSU5UOCkKKwlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiPj0gJXMiLCBsb3dlcik7CisgICAgICBlbHNlCisJZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIlslcywlc10iLCBsb3dlciwgdXBwZXIpOworICAgICAgZ19mcmVlIChsb3dlcik7CisgICAgICBnX2ZyZWUgKHVwcGVyKTsKKyAgICB9CisgIGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19JTlQgKHNwZWMpKQorICAgIHsKKyAgICAgIEdQYXJhbVNwZWNJbnQgKnBzcGVjID0gR19QQVJBTV9TUEVDX0lOVCAoc3BlYyk7CisKKyAgICAgIGxvd2VyID0gZGVzY3JpYmVfc2lnbmVkX2NvbnN0YW50IChzaXplb2YoZ2ludCksIHBzcGVjLT5taW5pbXVtKTsKKyAgICAgIHVwcGVyID0gZGVzY3JpYmVfc2lnbmVkX2NvbnN0YW50IChzaXplb2YoZ2ludCksIHBzcGVjLT5tYXhpbXVtKTsKKyAgICAgIGlmIChwc3BlYy0+bWluaW11bSA9PSBHX01JTklOVCAmJiBwc3BlYy0+bWF4aW11bSA9PSBHX01BWElOVCkKKwlkZXNjID0gZ19zdHJkdXAgKCIiKTsKKyAgICAgIGVsc2UgaWYgKHBzcGVjLT5taW5pbXVtID09IEdfTUlOSU5UKQorCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCI8PSAlcyIsIHVwcGVyKTsKKyAgICAgIGVsc2UgaWYgKHBzcGVjLT5tYXhpbXVtID09IEdfTUFYSU5UKQorCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCI+PSAlcyIsIGxvd2VyKTsKKyAgICAgIGVsc2UKKwlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiWyVzLCVzXSIsIGxvd2VyLCB1cHBlcik7CisgICAgICBnX2ZyZWUgKGxvd2VyKTsKKyAgICAgIGdfZnJlZSAodXBwZXIpOworICAgIH0KKyAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX1VJTlQgKHNwZWMpKQorICAgIHsKKyAgICAgIEdQYXJhbVNwZWNVSW50ICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19VSU5UIChzcGVjKTsKKworICAgICAgbG93ZXIgPSBkZXNjcmliZV91bnNpZ25lZF9jb25zdGFudCAoc2l6ZW9mKGd1aW50KSwgcHNwZWMtPm1pbmltdW0pOworICAgICAgdXBwZXIgPSBkZXNjcmliZV91bnNpZ25lZF9jb25zdGFudCAoc2l6ZW9mKGd1aW50KSwgcHNwZWMtPm1heGltdW0pOworICAgICAgaWYgKHBzcGVjLT5taW5pbXVtID09IDAgJiYgcHNwZWMtPm1heGltdW0gPT0gR19NQVhVSU5UKQorCWRlc2MgPSBnX3N0cmR1cCAoIiIpOworICAgICAgZWxzZSBpZiAocHNwZWMtPm1pbmltdW0gPT0gMCkKKwlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiPD0gJXMiLCB1cHBlcik7CisgICAgICBlbHNlIGlmIChwc3BlYy0+bWF4aW11bSA9PSBHX01BWFVJTlQpCisJZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIj49ICVzIiwgbG93ZXIpOworICAgICAgZWxzZQorCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCJbJXMsJXNdIiwgbG93ZXIsIHVwcGVyKTsKKyAgICAgIGdfZnJlZSAobG93ZXIpOworICAgICAgZ19mcmVlICh1cHBlcik7CisgICAgfQorICBlbHNlIGlmIChHX0lTX1BBUkFNX1NQRUNfTE9ORyAoc3BlYykpCisgICAgeworICAgICAgR1BhcmFtU3BlY0xvbmcgKnBzcGVjID0gR19QQVJBTV9TUEVDX0xPTkcgKHNwZWMpOworCisgICAgICBsb3dlciA9IGRlc2NyaWJlX3NpZ25lZF9jb25zdGFudCAoc2l6ZW9mKGdsb25nKSwgcHNwZWMtPm1pbmltdW0pOworICAgICAgdXBwZXIgPSBkZXNjcmliZV9zaWduZWRfY29uc3RhbnQgKHNpemVvZihnbG9uZyksIHBzcGVjLT5tYXhpbXVtKTsKKyAgICAgIGlmIChwc3BlYy0+bWluaW11bSA9PSBHX01JTkxPTkcgJiYgcHNwZWMtPm1heGltdW0gPT0gR19NQVhMT05HKQorCWRlc2MgPSBnX3N0cmR1cCAoIiIpOworICAgICAgZWxzZSBpZiAocHNwZWMtPm1pbmltdW0gPT0gR19NSU5MT05HKQorCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCI8PSAlcyIsIHVwcGVyKTsKKyAgICAgIGVsc2UgaWYgKHBzcGVjLT5tYXhpbXVtID09IEdfTUFYTE9ORykKKwlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiPj0gJXMiLCBsb3dlcik7CisgICAgICBlbHNlCisJZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIlslcywlc10iLCBsb3dlciwgdXBwZXIpOworICAgICAgZ19mcmVlIChsb3dlcik7CisgICAgICBnX2ZyZWUgKHVwcGVyKTsKKyAgICB9CisgIGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19VTE9ORyAoc3BlYykpCisgICAgeworICAgICAgR1BhcmFtU3BlY1VMb25nICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19VTE9ORyAoc3BlYyk7CisKKyAgICAgIGxvd2VyID0gZGVzY3JpYmVfdW5zaWduZWRfY29uc3RhbnQgKHNpemVvZihndWxvbmcpLCBwc3BlYy0+bWluaW11bSk7CisgICAgICB1cHBlciA9IGRlc2NyaWJlX3Vuc2lnbmVkX2NvbnN0YW50IChzaXplb2YoZ3Vsb25nKSwgcHNwZWMtPm1heGltdW0pOworICAgICAgaWYgKHBzcGVjLT5taW5pbXVtID09IDAgJiYgcHNwZWMtPm1heGltdW0gPT0gR19NQVhVTE9ORykKKwlkZXNjID0gZ19zdHJkdXAgKCIiKTsKKyAgICAgIGVsc2UgaWYgKHBzcGVjLT5taW5pbXVtID09IDApCisJZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIjw9ICVzIiwgdXBwZXIpOworICAgICAgZWxzZSBpZiAocHNwZWMtPm1heGltdW0gPT0gR19NQVhVTE9ORykKKwlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiPj0gJXMiLCBsb3dlcik7CisgICAgICBlbHNlCisJZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIlslcywlc10iLCBsb3dlciwgdXBwZXIpOworICAgICAgZ19mcmVlIChsb3dlcik7CisgICAgICBnX2ZyZWUgKHVwcGVyKTsKKyAgICB9CisgIGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19JTlQ2NCAoc3BlYykpCisgICAgeworICAgICAgR1BhcmFtU3BlY0ludDY0ICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19JTlQ2NCAoc3BlYyk7CisKKyAgICAgIGxvd2VyID0gZGVzY3JpYmVfc2lnbmVkX2NvbnN0YW50IChzaXplb2YoZ2ludDY0KSwgcHNwZWMtPm1pbmltdW0pOworICAgICAgdXBwZXIgPSBkZXNjcmliZV9zaWduZWRfY29uc3RhbnQgKHNpemVvZihnaW50NjQpLCBwc3BlYy0+bWF4aW11bSk7CisgICAgICBpZiAocHNwZWMtPm1pbmltdW0gPT0gR19NSU5JTlQ2NCAmJiBwc3BlYy0+bWF4aW11bSA9PSBHX01BWElOVDY0KQorCWRlc2MgPSBnX3N0cmR1cCAoIiIpOworICAgICAgZWxzZSBpZiAocHNwZWMtPm1pbmltdW0gPT0gR19NSU5JTlQ2NCkKKwlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiPD0gJXMiLCB1cHBlcik7CisgICAgICBlbHNlIGlmIChwc3BlYy0+bWF4aW11bSA9PSBHX01BWElOVDY0KQorCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCI+PSAlcyIsIGxvd2VyKTsKKyAgICAgIGVsc2UKKwlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiWyVzLCVzXSIsIGxvd2VyLCB1cHBlcik7CisgICAgICBnX2ZyZWUgKGxvd2VyKTsKKyAgICAgIGdfZnJlZSAodXBwZXIpOworICAgIH0KKyAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX1VJTlQ2NCAoc3BlYykpCisgICAgeworICAgICAgR1BhcmFtU3BlY1VJbnQ2NCAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfVUlOVDY0IChzcGVjKTsKKworICAgICAgbG93ZXIgPSBkZXNjcmliZV91bnNpZ25lZF9jb25zdGFudCAoc2l6ZW9mKGd1aW50NjQpLCBwc3BlYy0+bWluaW11bSk7CisgICAgICB1cHBlciA9IGRlc2NyaWJlX3Vuc2lnbmVkX2NvbnN0YW50IChzaXplb2YoZ3VpbnQ2NCksIHBzcGVjLT5tYXhpbXVtKTsKKyAgICAgIGlmIChwc3BlYy0+bWluaW11bSA9PSAwICYmIHBzcGVjLT5tYXhpbXVtID09IEdfTUFYVUlOVDY0KQorCWRlc2MgPSBnX3N0cmR1cCAoIiIpOworICAgICAgZWxzZSBpZiAocHNwZWMtPm1pbmltdW0gPT0gMCkKKwlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiPD0gJXMiLCB1cHBlcik7CisgICAgICBlbHNlIGlmIChwc3BlYy0+bWF4aW11bSA9PSBHX01BWFVJTlQ2NCkKKwlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiPj0gJXMiLCBsb3dlcik7CisgICAgICBlbHNlCisJZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIlslcywlc10iLCBsb3dlciwgdXBwZXIpOworICAgICAgZ19mcmVlIChsb3dlcik7CisgICAgICBnX2ZyZWUgKHVwcGVyKTsKKyAgICB9CisgIGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19GTE9BVCAoc3BlYykpCisgICAgeworICAgICAgR1BhcmFtU3BlY0Zsb2F0ICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19GTE9BVCAoc3BlYyk7CisKKyAgICAgIGxvd2VyID0gZGVzY3JpYmVfZG91YmxlX2NvbnN0YW50IChwc3BlYy0+bWluaW11bSk7CisgICAgICB1cHBlciA9IGRlc2NyaWJlX2RvdWJsZV9jb25zdGFudCAocHNwZWMtPm1heGltdW0pOworICAgICAgaWYgKEdUS0RPQ19DT01QQVJFX0ZMT0FUIChwc3BlYy0+bWluaW11bSwgLUdfTUFYRkxPQVQpKQorCXsKKwkgIGlmIChHVEtET0NfQ09NUEFSRV9GTE9BVCAocHNwZWMtPm1heGltdW0sIEdfTUFYRkxPQVQpKQorCSAgICBkZXNjID0gZ19zdHJkdXAgKCIiKTsKKwkgIGVsc2UKKwkgICAgZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIjw9ICVzIiwgdXBwZXIpOworCX0KKyAgICAgIGVsc2UgaWYgKEdUS0RPQ19DT01QQVJFX0ZMT0FUIChwc3BlYy0+bWF4aW11bSwgR19NQVhGTE9BVCkpCisJZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIj49ICVzIiwgbG93ZXIpOworICAgICAgZWxzZQorCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCJbJXMsJXNdIiwgbG93ZXIsIHVwcGVyKTsKKyAgICAgIGdfZnJlZSAobG93ZXIpOworICAgICAgZ19mcmVlICh1cHBlcik7CisgICAgfQorICBlbHNlIGlmIChHX0lTX1BBUkFNX1NQRUNfRE9VQkxFIChzcGVjKSkKKyAgICB7CisgICAgICBHUGFyYW1TcGVjRG91YmxlICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19ET1VCTEUgKHNwZWMpOworCisgICAgICBsb3dlciA9IGRlc2NyaWJlX2RvdWJsZV9jb25zdGFudCAocHNwZWMtPm1pbmltdW0pOworICAgICAgdXBwZXIgPSBkZXNjcmliZV9kb3VibGVfY29uc3RhbnQgKHBzcGVjLT5tYXhpbXVtKTsKKyAgICAgIGlmIChHVEtET0NfQ09NUEFSRV9GTE9BVCAocHNwZWMtPm1pbmltdW0sIC1HX01BWERPVUJMRSkpCisJeworCSAgaWYgKEdUS0RPQ19DT01QQVJFX0ZMT0FUIChwc3BlYy0+bWF4aW11bSwgR19NQVhET1VCTEUpKQorCSAgICBkZXNjID0gZ19zdHJkdXAgKCIiKTsKKwkgIGVsc2UKKwkgICAgZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIjw9ICVzIiwgdXBwZXIpOworCX0KKyAgICAgIGVsc2UgaWYgKEdUS0RPQ19DT01QQVJFX0ZMT0FUIChwc3BlYy0+bWF4aW11bSwgR19NQVhET1VCTEUpKQorCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCI+PSAlcyIsIGxvd2VyKTsKKyAgICAgIGVsc2UKKwlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiWyVzLCVzXSIsIGxvd2VyLCB1cHBlcik7CisgICAgICBnX2ZyZWUgKGxvd2VyKTsKKyAgICAgIGdfZnJlZSAodXBwZXIpOworICAgIH0KKyNpZiBHTElCX0NIRUNLX1ZFUlNJT04gKDIsIDEyLCAwKQorICBlbHNlIGlmIChHX0lTX1BBUkFNX1NQRUNfR1RZUEUgKHNwZWMpKQorICAgIHsKKyAgICAgIEdQYXJhbVNwZWNHVHlwZSAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfR1RZUEUgKHNwZWMpOworICAgICAgZ2Jvb2xlYW4gaXNfcG9pbnRlcjsKKworICAgICAgZGVzYyA9IGdfc3RyZHVwIChnZXRfdHlwZV9uYW1lIChwc3BlYy0+aXNfYV90eXBlLCAmaXNfcG9pbnRlcikpOworICAgIH0KKyNlbmRpZgorI2lmIEdMSUJfQ0hFQ0tfVkVSU0lPTiAoMiwgMjUsIDkpCisgIGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19WQVJJQU5UIChzcGVjKSkKKyAgICB7CisgICAgICBHUGFyYW1TcGVjVmFyaWFudCAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfVkFSSUFOVCAoc3BlYyk7CisgICAgICBnY2hhciAqdmFyaWFudF90eXBlOworCisgICAgICB2YXJpYW50X3R5cGUgPSBnX3ZhcmlhbnRfdHlwZV9kdXBfc3RyaW5nIChwc3BlYy0+dHlwZSk7CisgICAgICBkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiR1ZhcmlhbnQ8JXM+IiwgdmFyaWFudF90eXBlKTsKKyAgICAgIGdfZnJlZSAodmFyaWFudF90eXBlKTsKKyAgICB9CisjZW5kaWYKKyAgZWxzZQorICAgIHsKKyAgICAgIGRlc2MgPSBnX3N0cmR1cCAoIiIpOworICAgIH0KKworICByZXR1cm4gZGVzYzsKK30KKworc3RhdGljIGdjaGFyKgorZGVzY3JpYmVfZGVmYXVsdCAoR1BhcmFtU3BlYyAqc3BlYykKK3sKKyAgZ2NoYXIgKmRlc2M7CisKKyAgaWYgKEdfSVNfUEFSQU1fU1BFQ19DSEFSIChzcGVjKSkKKyAgICB7CisgICAgICBHUGFyYW1TcGVjQ2hhciAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfQ0hBUiAoc3BlYyk7CisKKyAgICAgIGRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCIlZCIsIHBzcGVjLT5kZWZhdWx0X3ZhbHVlKTsKKyAgICB9CisgIGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19VQ0hBUiAoc3BlYykpCisgICAgeworICAgICAgR1BhcmFtU3BlY1VDaGFyICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19VQ0hBUiAoc3BlYyk7CisKKyAgICAgIGRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCIldSIsIHBzcGVjLT5kZWZhdWx0X3ZhbHVlKTsKKyAgICB9CisgIGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19CT09MRUFOIChzcGVjKSkKKyAgICB7CisgICAgICBHUGFyYW1TcGVjQm9vbGVhbiAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfQk9PTEVBTiAoc3BlYyk7CisKKyAgICAgIGRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCIlcyIsIHBzcGVjLT5kZWZhdWx0X3ZhbHVlID8gIlRSVUUiIDogIkZBTFNFIik7CisgICAgfQorICBlbHNlIGlmIChHX0lTX1BBUkFNX1NQRUNfSU5UIChzcGVjKSkKKyAgICB7CisgICAgICBHUGFyYW1TcGVjSW50ICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19JTlQgKHNwZWMpOworCisgICAgICBkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiJWQiLCBwc3BlYy0+ZGVmYXVsdF92YWx1ZSk7CisgICAgfQorICBlbHNlIGlmIChHX0lTX1BBUkFNX1NQRUNfVUlOVCAoc3BlYykpCisgICAgeworICAgICAgR1BhcmFtU3BlY1VJbnQgKnBzcGVjID0gR19QQVJBTV9TUEVDX1VJTlQgKHNwZWMpOworCisgICAgICBkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiJXUiLCBwc3BlYy0+ZGVmYXVsdF92YWx1ZSk7CisgICAgfQorICBlbHNlIGlmIChHX0lTX1BBUkFNX1NQRUNfTE9ORyAoc3BlYykpCisgICAgeworICAgICAgR1BhcmFtU3BlY0xvbmcgKnBzcGVjID0gR19QQVJBTV9TUEVDX0xPTkcgKHNwZWMpOworCisgICAgICBkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiJWxkIiwgcHNwZWMtPmRlZmF1bHRfdmFsdWUpOworICAgIH0KKyAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX0xPTkcgKHNwZWMpKQorICAgIHsKKyAgICAgIEdQYXJhbVNwZWNVTG9uZyAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfVUxPTkcgKHNwZWMpOworCisgICAgICBkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiJWx1IiwgcHNwZWMtPmRlZmF1bHRfdmFsdWUpOworICAgIH0KKyAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX0lOVDY0IChzcGVjKSkKKyAgICB7CisgICAgICBHUGFyYW1TcGVjSW50NjQgKnBzcGVjID0gR19QQVJBTV9TUEVDX0lOVDY0IChzcGVjKTsKKworICAgICAgZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIiUiIEdfR0lOVDY0X0ZPUk1BVCwgcHNwZWMtPmRlZmF1bHRfdmFsdWUpOworICAgIH0KKyAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX1VJTlQ2NCAoc3BlYykpCisgICAgeworICAgICAgR1BhcmFtU3BlY1VJbnQ2NCAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfVUlOVDY0IChzcGVjKTsKKworICAgICAgZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIiUiIEdfR1VJTlQ2NF9GT1JNQVQsIHBzcGVjLT5kZWZhdWx0X3ZhbHVlKTsKKyAgICB9CisgIGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19VTklDSEFSIChzcGVjKSkKKyAgICB7CisgICAgICBHUGFyYW1TcGVjVW5pY2hhciAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfVU5JQ0hBUiAoc3BlYyk7CisKKyAgICAgIGlmIChnX3VuaWNoYXJfaXNwcmludCAocHNwZWMtPmRlZmF1bHRfdmFsdWUpKQorCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCInJWMnIiwgcHNwZWMtPmRlZmF1bHRfdmFsdWUpOworICAgICAgZWxzZQorCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCIldSIsIHBzcGVjLT5kZWZhdWx0X3ZhbHVlKTsKKyAgICB9CisgIGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19FTlVNIChzcGVjKSkKKyAgICB7CisgICAgICBHUGFyYW1TcGVjRW51bSAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfRU5VTSAoc3BlYyk7CisKKyAgICAgIEdFbnVtVmFsdWUgKnZhbHVlID0gZ19lbnVtX2dldF92YWx1ZSAocHNwZWMtPmVudW1fY2xhc3MsIHBzcGVjLT5kZWZhdWx0X3ZhbHVlKTsKKyAgICAgIGlmICh2YWx1ZSkKKwlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiJXMiLCB2YWx1ZS0+dmFsdWVfbmFtZSk7CisgICAgICBlbHNlCisJZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIiVkIiwgcHNwZWMtPmRlZmF1bHRfdmFsdWUpOworICAgIH0KKyAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX0ZMQUdTIChzcGVjKSkKKyAgICB7CisgICAgICBHUGFyYW1TcGVjRmxhZ3MgKnBzcGVjID0gR19QQVJBTV9TUEVDX0ZMQUdTIChzcGVjKTsKKyAgICAgIGd1aW50IGRlZmF1bHRfdmFsdWU7CisgICAgICBHU3RyaW5nICphY2M7CisKKyAgICAgIGRlZmF1bHRfdmFsdWUgPSBwc3BlYy0+ZGVmYXVsdF92YWx1ZTsKKyAgICAgIGFjYyA9IGdfc3RyaW5nX25ldyAoIiIpOworCisgICAgICB3aGlsZSAoZGVmYXVsdF92YWx1ZSkKKwl7CisJICBHRmxhZ3NWYWx1ZSAqdmFsdWUgPSBnX2ZsYWdzX2dldF9maXJzdF92YWx1ZSAocHNwZWMtPmZsYWdzX2NsYXNzLCBkZWZhdWx0X3ZhbHVlKTsKKworCSAgaWYgKCF2YWx1ZSkKKwkgICAgYnJlYWs7CisKKwkgIGlmIChhY2MtPmxlbiA+IDApCisJICAgIGdfc3RyaW5nX2FwcGVuZCAoYWNjLCAifCIpOworCSAgZ19zdHJpbmdfYXBwZW5kIChhY2MsIHZhbHVlLT52YWx1ZV9uYW1lKTsKKworCSAgZGVmYXVsdF92YWx1ZSAmPSB+dmFsdWUtPnZhbHVlOworCX0KKworICAgICAgaWYgKGRlZmF1bHRfdmFsdWUgPT0gMCkKKwlkZXNjID0gZ19zdHJpbmdfZnJlZSAoYWNjLCBGQUxTRSk7CisgICAgICBlbHNlCisJeworCSAgZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIiVkIiwgcHNwZWMtPmRlZmF1bHRfdmFsdWUpOworCSAgZ19zdHJpbmdfZnJlZSAoYWNjLCBUUlVFKTsKKwl9CisgICAgfQorICBlbHNlIGlmIChHX0lTX1BBUkFNX1NQRUNfRkxPQVQgKHNwZWMpKQorICAgIHsKKyAgICAgIEdQYXJhbVNwZWNGbG9hdCAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfRkxPQVQgKHNwZWMpOworCisgICAgICAvKiBtYWtlIHN1cmUgZmxvYXRzIGFyZSBvdXRwdXQgd2l0aCBhIGRlY2ltYWwgZG90IGlycmVzcGVjdGl2ZSBvZgorICAgICAgICogY3VycmVudCBsb2NhbGUuIFVzZSBmb3JtYXRkIHNpbmNlIHdlIHdhbnQgaHVtYW4tcmVhZGFibGUgbnVtYmVycworICAgICAgICogYW5kIGRvIG5vdCBuZWVkIHRoZSBleGFjdCBzYW1lIGJpdCByZXByZXNlbnRhdGlvbiB3aGVuIGRlc2VyaWFsaXNpbmcgKi8KKyAgICAgIGRlc2MgPSBnX21hbGxvYzAgKEdfQVNDSUlfRFRPU1RSX0JVRl9TSVpFKTsKKyAgICAgIGdfYXNjaWlfZm9ybWF0ZCAoZGVzYywgR19BU0NJSV9EVE9TVFJfQlVGX1NJWkUsICIlZyIsCisgICAgICAgICAgcHNwZWMtPmRlZmF1bHRfdmFsdWUpOworICAgIH0KKyAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX0RPVUJMRSAoc3BlYykpCisgICAgeworICAgICAgR1BhcmFtU3BlY0RvdWJsZSAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfRE9VQkxFIChzcGVjKTsKKworICAgICAgLyogbWFrZSBzdXJlIGZsb2F0cyBhcmUgb3V0cHV0IHdpdGggYSBkZWNpbWFsIGRvdCBpcnJlc3BlY3RpdmUgb2YKKyAgICAgICAqIGN1cnJlbnQgbG9jYWxlLiBVc2UgZm9ybWF0ZCBzaW5jZSB3ZSB3YW50IGh1bWFuLXJlYWRhYmxlIG51bWJlcnMKKyAgICAgICAqIGFuZCBkbyBub3QgbmVlZCB0aGUgZXhhY3Qgc2FtZSBiaXQgcmVwcmVzZW50YXRpb24gd2hlbiBkZXNlcmlhbGlzaW5nICovCisgICAgICBkZXNjID0gZ19tYWxsb2MwIChHX0FTQ0lJX0RUT1NUUl9CVUZfU0laRSk7CisgICAgICBnX2FzY2lpX2Zvcm1hdGQgKGRlc2MsIEdfQVNDSUlfRFRPU1RSX0JVRl9TSVpFLCAiJWciLAorICAgICAgICAgIHBzcGVjLT5kZWZhdWx0X3ZhbHVlKTsKKyAgICB9CisgIGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19TVFJJTkcgKHNwZWMpKQorICAgIHsKKyAgICAgIEdQYXJhbVNwZWNTdHJpbmcgKnBzcGVjID0gR19QQVJBTV9TUEVDX1NUUklORyAoc3BlYyk7CisKKyAgICAgIGlmIChwc3BlYy0+ZGVmYXVsdF92YWx1ZSkKKwl7CisJICBnY2hhciAqZXNjID0gZ19zdHJlc2NhcGUgKHBzcGVjLT5kZWZhdWx0X3ZhbHVlLCBOVUxMKTsKKworCSAgZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIlxcIiVzXFwiIiwgZXNjKTsKKworCSAgZ19mcmVlIChlc2MpOworCX0KKyAgICAgIGVsc2UKKwlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiTlVMTCIpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGRlc2MgPSBnX3N0cmR1cCAoIiIpOworICAgIH0KKworICByZXR1cm4gZGVzYzsKK30KKworCitzdGF0aWMgdm9pZAorb3V0cHV0X29iamVjdF9hcmdzIChGSUxFICpmcCwgR1R5cGUgb2JqZWN0X3R5cGUpCit7CisgIGdwb2ludGVyIGNsYXNzOworICBjb25zdCBnY2hhciAqb2JqZWN0X2NsYXNzX25hbWU7CisgIGd1aW50IGFyZzsKKyAgZ2NoYXIgZmxhZ3NbMTZdLCAqcG9zOworICBHUGFyYW1TcGVjICoqcHJvcGVydGllczsKKyAgZ3VpbnQgbl9wcm9wZXJ0aWVzOworICBnYm9vbGVhbiBjaGlsZF9wcm9wOworICBnYm9vbGVhbiBzdHlsZV9wcm9wOworICBnYm9vbGVhbiBpc19wb2ludGVyOworICBjb25zdCBnY2hhciAqdHlwZV9uYW1lOworICBnY2hhciAqdHlwZV9kZXNjOworICBnY2hhciAqZGVmYXVsdF92YWx1ZTsKKworICBpZiAoR19UWVBFX0lTX09CSkVDVCAob2JqZWN0X3R5cGUpKQorICAgIHsKKyAgICAgIGNsYXNzID0gZ190eXBlX2NsYXNzX3BlZWsgKG9iamVjdF90eXBlKTsKKyAgICAgIGlmICghY2xhc3MpCisJcmV0dXJuOworCisgICAgICBwcm9wZXJ0aWVzID0gZ19vYmplY3RfY2xhc3NfbGlzdF9wcm9wZXJ0aWVzIChjbGFzcywgJm5fcHJvcGVydGllcyk7CisgICAgfQorI2lmIEdMSUJfTUFKT1JfVkVSU0lPTiA+IDIgfHwgKEdMSUJfTUFKT1JfVkVSU0lPTiA9PSAyICYmIEdMSUJfTUlOT1JfVkVSU0lPTiA+PSAzKQorICBlbHNlIGlmIChHX1RZUEVfSVNfSU5URVJGQUNFIChvYmplY3RfdHlwZSkpCisgICAgeworICAgICAgY2xhc3MgPSBnX3R5cGVfZGVmYXVsdF9pbnRlcmZhY2VfcmVmIChvYmplY3RfdHlwZSk7CisKKyAgICAgIGlmICghY2xhc3MpCisJcmV0dXJuOworCisgICAgICBwcm9wZXJ0aWVzID0gZ19vYmplY3RfaW50ZXJmYWNlX2xpc3RfcHJvcGVydGllcyAoY2xhc3MsICZuX3Byb3BlcnRpZXMpOworICAgIH0KKyNlbmRpZgorICBlbHNlCisgICAgcmV0dXJuOworCisgIG9iamVjdF9jbGFzc19uYW1lID0gZ190eXBlX25hbWUgKG9iamVjdF90eXBlKTsKKworICBjaGlsZF9wcm9wID0gRkFMU0U7CisgIHN0eWxlX3Byb3AgPSBGQUxTRTsKKworICB3aGlsZSAoVFJVRSkgeworICAgIHFzb3J0IChwcm9wZXJ0aWVzLCBuX3Byb3BlcnRpZXMsIHNpemVvZiAoR1BhcmFtU3BlYyAqKSwgY29tcGFyZV9wYXJhbV9zcGVjcyk7CisgICAgZm9yIChhcmcgPSAwOyBhcmcgPCBuX3Byb3BlcnRpZXM7IGFyZysrKQorICAgICAgeworICAgICAgICBHUGFyYW1TcGVjICpzcGVjID0gcHJvcGVydGllc1thcmddOworICAgICAgICBjb25zdCBnY2hhciAqbmljaywgKmJsdXJiLCAqZG90OworCisgICAgICAgIGlmIChzcGVjLT5vd25lcl90eXBlICE9IG9iamVjdF90eXBlKQorICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHBvcyA9IGZsYWdzOworICAgICAgICAvKiBXZSB1c2Ugb25lLWNoYXJhY3RlciBmbGFncyBmb3Igc2ltcGxpY2l0eS4gKi8KKyAgICAgICAgaWYgKGNoaWxkX3Byb3AgJiYgIXN0eWxlX3Byb3ApCisgICAJICAqcG9zKysgPSAnYyc7CisgICAgICAgIGlmIChzdHlsZV9wcm9wKQorICAgCSAgKnBvcysrID0gJ3MnOworICAgICAgICBpZiAoc3BlYy0+ZmxhZ3MgJiBHX1BBUkFNX1JFQURBQkxFKQorIAkgICpwb3MrKyA9ICdyJzsKKyAgICAgICAgaWYgKHNwZWMtPmZsYWdzICYgR19QQVJBTV9XUklUQUJMRSkKKwkgICpwb3MrKyA9ICd3JzsKKyAgICAgICAgaWYgKHNwZWMtPmZsYWdzICYgR19QQVJBTV9DT05TVFJVQ1QpCisJICAqcG9zKysgPSAneCc7CisgICAgICAgIGlmIChzcGVjLT5mbGFncyAmIEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpCisJICAqcG9zKysgPSAnWCc7CisgICAgICAgICpwb3MgPSAwOworCisgICAgICAgIG5pY2sgPSBnX3BhcmFtX3NwZWNfZ2V0X25pY2sgKHNwZWMpOworICAgICAgICBibHVyYiA9IGdfcGFyYW1fc3BlY19nZXRfYmx1cmIgKHNwZWMpOworCisgICAgICAgIGRvdCA9ICIiOworICAgICAgICBpZiAoYmx1cmIpIHsKKyAgICAgICAgICBpbnQgc3RyX2xlbiA9IHN0cmxlbiAoYmx1cmIpOworICAgICAgICAgIGlmIChzdHJfbGVuID4gMCAgJiYgYmx1cmJbc3RyX2xlbiAtIDFdICE9ICcuJykKKyAgICAgICAgICAgIGRvdCA9ICIuIjsKKyAgICAgICAgfQorCisJdHlwZV9kZXNjID0gZGVzY3JpYmVfdHlwZSAoc3BlYyk7CisJZGVmYXVsdF92YWx1ZSA9IGRlc2NyaWJlX2RlZmF1bHQgKHNwZWMpOworCXR5cGVfbmFtZSA9IGdldF90eXBlX25hbWUgKHNwZWMtPnZhbHVlX3R5cGUsICZpc19wb2ludGVyKTsKKyAgICAgICAgZnByaW50ZiAoZnAsICI8QVJHPlxcbjxOQU1FPiVzOjolczwvTkFNRT5cXG48VFlQRT4lcyVzPC9UWVBFPlxcbjxSQU5HRT4lczwvUkFOR0U+XFxuPEZMQUdTPiVzPC9GTEFHUz5cXG48TklDSz4lczwvTklDSz5cXG48QkxVUkI+JXMlczwvQkxVUkI+XFxuPERFRkFVTFQ+JXM8L0RFRkFVTFQ+XFxuPC9BUkc+XFxuXFxuIiwKKwkgICAgICAgICBvYmplY3RfY2xhc3NfbmFtZSwgZ19wYXJhbV9zcGVjX2dldF9uYW1lIChzcGVjKSwgdHlwZV9uYW1lLCBpc19wb2ludGVyID8gIioiIDogIiIsIHR5cGVfZGVzYywgZmxhZ3MsIG5pY2sgPyBuaWNrIDogIihudWxsKSIsIGJsdXJiID8gYmx1cmIgOiAiKG51bGwpIiwgZG90LCBkZWZhdWx0X3ZhbHVlKTsKKwlnX2ZyZWUgKHR5cGVfZGVzYyk7CisJZ19mcmVlIChkZWZhdWx0X3ZhbHVlKTsKKyAgICAgIH0KKworICAgIGdfZnJlZSAocHJvcGVydGllcyk7CisKKyNpZmRlZiBHVEtfSVNfQ09OVEFJTkVSX0NMQVNTCisgICAgaWYgKCFjaGlsZF9wcm9wICYmIEdUS19JU19DT05UQUlORVJfQ0xBU1MgKGNsYXNzKSkgeworICAgICAgcHJvcGVydGllcyA9IGd0a19jb250YWluZXJfY2xhc3NfbGlzdF9jaGlsZF9wcm9wZXJ0aWVzIChjbGFzcywgJm5fcHJvcGVydGllcyk7CisgICAgICBjaGlsZF9wcm9wID0gVFJVRTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgR1RLX0lTX0NFTExfQVJFQV9DTEFTUworICAgIGlmICghY2hpbGRfcHJvcCAmJiBHVEtfSVNfQ0VMTF9BUkVBX0NMQVNTIChjbGFzcykpIHsKKyAgICAgIHByb3BlcnRpZXMgPSBndGtfY2VsbF9hcmVhX2NsYXNzX2xpc3RfY2VsbF9wcm9wZXJ0aWVzIChjbGFzcywgJm5fcHJvcGVydGllcyk7CisgICAgICBjaGlsZF9wcm9wID0gVFJVRTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgR1RLX0lTX1dJREdFVF9DTEFTUworI2lmIEdUS19DSEVDS19WRVJTSU9OKDIsMSwwKQorICAgIGlmICghc3R5bGVfcHJvcCAmJiBHVEtfSVNfV0lER0VUX0NMQVNTIChjbGFzcykpIHsKKyAgICAgIHByb3BlcnRpZXMgPSBndGtfd2lkZ2V0X2NsYXNzX2xpc3Rfc3R5bGVfcHJvcGVydGllcyAoR1RLX1dJREdFVF9DTEFTUyAoY2xhc3MpLCAmbl9wcm9wZXJ0aWVzKTsKKyAgICAgIHN0eWxlX3Byb3AgPSBUUlVFOworICAgICAgY29udGludWU7CisgICAgfQorI2VuZGlmCisjZW5kaWYKKworICAgIGJyZWFrOworICB9Cit9CitFT1QKKworY2xvc2UgT1VUUFVUOworCisjIENvbXBpbGUgYW5kIHJ1biBvdXIgZmlsZQorCiskQ0MgPSAkRU5We0NDfSA/ICRFTlZ7Q0N9IDogImdjYyI7CiskTEQgPSAkRU5We0xEfSA/ICRFTlZ7TER9IDogJENDOworJENGTEFHUyA9ICRFTlZ7Q0ZMQUdTfSA/ICIkRU5We0NGTEFHU30iIDogIiI7CiskTERGTEFHUyA9ICRFTlZ7TERGTEFHU30gPyAkRU5We0xERkxBR1N9IDogIiI7CisKK215ICRvX2ZpbGU7CitpZiAoJENDID1+IC9saWJ0b29sLykgeworICAkb19maWxlICA9ICIkTU9EVUxFLXNjYW4ubG8iCit9IGVsc2UgeworICAkb19maWxlID0gIiRNT0RVTEUtc2Nhbi5vIgorfQorCitteSAkc3Rkb3V0PSIiOworaWYgKCFkZWZpbmVkKCRWRVJCT1NFKSBvciAkVkVSQk9TRSBlcSAiMCIpIHsKKyAgICAkc3Rkb3V0PSI+L2Rldi9udWxsIjsKK30KKworIyBDb21waWxpbmcgc2Nhbm5lcgorJGNvbW1hbmQgPSAiJENDICRzdGRvdXQgJENGTEFHUyAtYyAtbyAkb19maWxlICRNT0RVTEUtc2Nhbi5jIjsKK3N5c3RlbSgiKCRjb21tYW5kKSIpID09IDAgb3IgZGllICJDb21waWxhdGlvbiBvZiBzY2FubmVyIGZhaWxlZDogJCFcbiI7CisKKyMgTGlua2luZyBzY2FubmVyCiskY29tbWFuZCA9ICIkTEQgJHN0ZG91dCAtbyAkTU9EVUxFLXNjYW4gJG9fZmlsZSAkTERGTEFHUyI7CitzeXN0ZW0oJGNvbW1hbmQpID09IDAgb3IgZGllICJMaW5raW5nIG9mIHNjYW5uZXIgZmFpbGVkOiAkIVxuIjsKKworIyBSdW5uaW5nIHNjYW5uZXIgJE1PRFVMRS1zY2FuICI7CitzeXN0ZW0oInNoIC1jIC4vJE1PRFVMRS1zY2FuIikgPT0gMCBvciBkaWUgIlNjYW4gZmFpbGVkOiAkIVxuIjsKKworaWYgKCFkZWZpbmVkKCRFTlZ7IkdUS19ET0NfS0VFUF9JTlRFUk1FRElBVEUifSkpIHsKKyAgdW5saW5rICIuLyRNT0RVTEUtc2Nhbi5jIiwgIi4vJE1PRFVMRS1zY2FuLm8iLCAiLi8kTU9EVUxFLXNjYW4ubG8iLCAiLi8kTU9EVUxFLXNjYW4iOworfQorCismVXBkYXRlRmlsZUlmQ2hhbmdlZCAoJG9sZF9oaWVyYXJjaHlfZmlsZW5hbWUsICRuZXdfaGllcmFyY2h5X2ZpbGVuYW1lLCAwKTsKKyMgd2Ugd2lsbCBtZXJnZSB0aGVzZSBpbiBzY2FuZ29iai1tZXJnZS5weQorIyZVcGRhdGVGaWxlSWZDaGFuZ2VkICgkb2xkX2ludGVyZmFjZXNfZmlsZW5hbWUsICRuZXdfaW50ZXJmYWNlc19maWxlbmFtZSwgMCk7CisjJlVwZGF0ZUZpbGVJZkNoYW5nZWQgKCRvbGRfcHJlcmVxdWlzaXRlc19maWxlbmFtZSwgJG5ld19wcmVyZXF1aXNpdGVzX2ZpbGVuYW1lLCAwKTsKKyMmVXBkYXRlRmlsZUlmQ2hhbmdlZCAoJG9sZF9zaWduYWxzX2ZpbGVuYW1lLCAkbmV3X3NpZ25hbHNfZmlsZW5hbWUsIDApOworIyZVcGRhdGVGaWxlSWZDaGFuZ2VkICgkb2xkX2FyZ3NfZmlsZW5hbWUsICRuZXdfYXJnc19maWxlbmFtZSwgMCk7CisKZGlmZiAtLWdpdCBhL2NvbW1vbi9ndGstZG9jLXBsdWdpbnMubWFrIGIvY29tbW9uL2d0ay1kb2MtcGx1Z2lucy5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNjNDJlNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9ndGstZG9jLXBsdWdpbnMubWFrCkBAIC0wLDAgKzEsMzg3IEBACisjIFRoaXMgaXMgYW4gaW5jbHVkZSBmaWxlIHNwZWNpZmljYWxseSB0dW5lZCBmb3IgYnVpbGRpbmcgZG9jdW1lbnRhdGlvbgorIyBmb3IgR1N0cmVhbWVyIHBsdWctaW5zCisKK2hlbHA6CisJQGVjaG8KKwlAZWNobyAiSWYgeW91IGFyZSBhIGRvYyBtYWludGFpbmVyLCBydW4gJ21ha2UgdXBkYXRlJyB0byB1cGRhdGUiCisJQGVjaG8gInRoZSBkb2N1bWVudGF0aW9uIGZpbGVzIG1haW50YWluZWQgaW4gZ2l0IgorCUBlY2hvCisJQGVjaG8gT3RoZXIgdXNlZnVsIG1ha2UgdGFyZ2V0czoKKwlAZWNobworCUBlY2hvICBjaGVjay1pbnNwZWN0ZWQtdmVyc2lvbnM6IG1ha2Ugc3VyZSB0aGUgaW5zcGVjdGVkIHBsdWdpbiBpbmZvCisJQGVjaG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdXAgdG8gZGF0ZSBiZWZvcmUgYSByZWxlYXNlCisJQGVjaG8KKworIyB1cGRhdGUgdGhlIHN0dWZmIG1haW50YWluZWQgYnkgZG9jIG1haW50YWluZXJzCit1cGRhdGU6CisJJChNQUtFKSBzY2Fub2JqLXVwZGF0ZQorCSQoTUFLRSkgY2hlY2stb3V0ZGF0ZWQtZG9jcworCisjIFdlIHNldCBHUEFUSCBoZXJlOyB0aGlzIGdpdmVzIHVzIHNlbWFudGljcyBmb3IgR05VIG1ha2UKKyMgd2hpY2ggYXJlIG1vcmUgbGlrZSBvdGhlciBtYWtlJ3MgVlBBVEgsIHdoZW4gaXQgY29tZXMgdG8KKyMgd2hldGhlciBhIHNvdXJjZSB0aGF0IGlzIGEgdGFyZ2V0IG9mIG9uZSBydWxlIGlzIHRoZW4KKyMgc2VhcmNoZWQgZm9yIGluIFZQQVRIL0dQQVRILgorIworR1BBVEggPSAkKHNyY2RpcikKKworIyB0aG9tYXM6IG1ha2UgZG9jcyBwYXJhbGxlbCBpbnN0YWxsYWJsZQorVEFSR0VUX0RJUj0kKEhUTUxfRElSKS8kKERPQ19NT0RVTEUpLUBHU1RfTUFKT1JNSU5PUkAKKworTUFJTlRBSU5FUl9ET0NfU1RBTVBTID0JCQlcCisJc2Nhbm9iai1idWlsZC5zdGFtcAorCitFWFRSQV9ESVNUID0gCQkJCVwKKwkkKE1BSU5UQUlORVJfRE9DX1NUQU1QUykJCVwKKwkkKHNyY2RpcikvaW5zcGVjdC8qLnhtbAkJXAorCSQoU0NBTk9CSl9GSUxFUykJCVwKKwkkKGNvbnRlbnRfZmlsZXMpCQlcCisJJChleHRyYV9maWxlcykJCQlcCisJJChIVE1MX0lNQUdFUykJCQlcCisJJChET0NfTUFJTl9TR01MX0ZJTEUpCVwKKwkkKERPQ19PVkVSUklERVMpCQlcCisJJChET0NfTU9EVUxFKS1zZWN0aW9ucy50eHQKKworIyB3ZSBkb24ndCBhZGQgc2Nhbm9iai1idWlsZC5zdGFtcCBoZXJlIHNpbmNlIHRoZXkgYXJlIGJ1aWx0IG1hbnVhbGx5IGJ5IGRvY3MKKyMgbWFpbnRhaW5lcnMgYW5kIHJlc3VsdCBpcyBjb21taXRlZCB0byBnaXQKK0RPQ19TVEFNUFMgPQkJCQlcCisJc2Nhbi1idWlsZC5zdGFtcAkJXAorCXRtcGwtYnVpbGQuc3RhbXAJCVwKKwlzZ21sLWJ1aWxkLnN0YW1wCQlcCisJaHRtbC1idWlsZC5zdGFtcAkJXAorCXNjYW4uc3RhbXAJCQlcCisJdG1wbC5zdGFtcAkJCVwKKwlzZ21sLnN0YW1wCQkJXAorCWh0bWwuc3RhbXAKKworIyBmaWxlcyBnZW5lcmF0ZWQvdXBkYXRlZCBieSBndGtkb2Mtc2NhbmdvYmoKK1NDQU5PQkpfRklMRVMgPQkJCQlcCisJJChET0NfTU9EVUxFKS5hcmdzICAgICAgICAgICAgICBcCisJJChET0NfTU9EVUxFKS5oaWVyYXJjaHkgICAgICAgICBcCisJJChET0NfTU9EVUxFKS5pbnRlcmZhY2VzICAgICAgICBcCisJJChET0NfTU9EVUxFKS5wcmVyZXF1aXNpdGVzICAgICBcCisJJChET0NfTU9EVUxFKS5zaWduYWxzICAgICAgICAgICBcCisJJChET0NfTU9EVUxFKS50eXBlcworCitTQ0FOT0JKX0ZJTEVTX08gPQkJCVwKKwkubGlicy8kKERPQ19NT0RVTEUpLXNjYW4ubworCisjIGZpbGVzIGdlbmVyYXRlZC91cGRhdGVkIGJ5IGd0a2RvYy1zY2FuCitTQ0FOX0ZJTEVTID0JCQkJXAorCSQoRE9DX01PRFVMRSktc2VjdGlvbnMudHh0CVwKKwkkKERPQ19NT0RVTEUpLW92ZXJyaWRlcy50eHQJXAorCSQoRE9DX01PRFVMRSktZGVjbC50eHQJCVwKKwkkKERPQ19NT0RVTEUpLWRlY2wtbGlzdC50eHQKKworCitSRVBPUlRfRklMRVMgPSBcCisJJChET0NfTU9EVUxFKS11bmRvY3VtZW50ZWQudHh0IFwKKwkkKERPQ19NT0RVTEUpLXVuZGVjbGFyZWQudHh0IFwKKwkkKERPQ19NT0RVTEUpLXVudXNlZC50eHQKKworQ0xFQU5GSUxFUyA9IFwKKwkkKFNDQU5PQkpfRklMRVNfTykgXAorCSQoUkVQT1JUX0ZJTEVTKSBcCisJJChET0NfU1RBTVBTKSBcCisJaW5zcGVjdC1yZWdpc3RyeS54bWwKKworSU5TUEVDVF9ESVIgPSBpbnNwZWN0CisKK2lmIEVOQUJMRV9HVEtfRE9DCithbGwtbG9jYWw6IGh0bWwtYnVpbGQuc3RhbXAKKworIyMjIGluc3BlY3QgR1N0cmVhbWVyIHBsdWctaW5zOyBkb25lIGJ5IGRvY3VtZW50YXRpb24gbWFpbnRhaW5lciAjIyMKKworIyBvbmx5IGxvb2sgYXQgdGhlIHBsdWdpbnMgaW4gdGhpcyBtb2R1bGUgd2hlbiBidWlsZGluZyBpbnNwZWN0IC54bWwgc3R1ZmYKK0lOU1BFQ1RfUkVHSVNUUlk9JCh0b3BfYnVpbGRkaXIpL2RvY3MvcGx1Z2lucy9pbnNwZWN0LXJlZ2lzdHJ5LnhtbAorSU5TUEVDVF9FTlZJUk9OTUVOVD1cCisJTENfQUxMPUMgXAorCUdTVF9QTFVHSU5fU1lTVEVNX1BBVEg9IFwKKwlHU1RfUExVR0lOX1BBVEg9JCh0b3BfYnVpbGRkaXIpL2dzdDokKHRvcF9idWlsZGRpcikvc3lzOiQodG9wX2J1aWxkZGlyKS9leHQ6JCh0b3BfYnVpbGRkaXIpL3BsdWdpbnM6JCh0b3BfYnVpbGRkaXIpL3NyYzokKHRvcF9idWlsZGRpcikvZ25sIFwKKwlHU1RfUkVHSVNUUlk9JChJTlNQRUNUX1JFR0lTVFJZKSBcCisJUEtHX0NPTkZJR19QQVRIPSIkKEdTVF9QS0dfQ09ORklHX1BBVEgpIiBcCisJJChJTlNQRUNUX0VYVFJBX0VOVklST05NRU5UKQorCisjIyMjIHNjYW4gZ29iamVjdHM7IGRvbmUgYnkgZG9jdW1lbnRhdGlvbiBtYWludGFpbmVyICMjIyMKK3NjYW5vYmotdXBkYXRlOgorCS1ybSBzY2Fub2JqLWJ1aWxkLnN0YW1wCisJJChNQUtFKSBzY2Fub2JqLWJ1aWxkLnN0YW1wCisKKyMgZ3N0ZG9jLXNjYW5vYmogcHJvZHVjZXMgNSBvdXRwdXQgZmlsZXMgKC5uZXcpCisjIHNjYW5nb2JqLW1lcmdlLnB5IG1lcmdlcyB0aGVtIGludG8gdGhlIGZpbGUgd2hpY2ggd2UgY29tbWl0IGxhdGVyCisjIFRPRE86IGFsc28gbWVyZ2UgdGhlIGhpZXJhcmNoeQorc2Nhbm9iai1idWlsZC5zdGFtcDogJChTQ0FOT0JKX0RFUFMpICQoYmFzZWZpbGVzKQorCUBlY2hvICIgIERPQyAgIEludHJvc3BlY3RpbmcgZ29iamVjdHMiCisJQGlmIHRlc3QgeCIkKHNyY2RpcikiICE9IHguIDsgdGhlbgkJCQlcCisJICAgIGZvciBmIGluICQoU0NBTk9CSl9GSUxFUykgJChTQ0FOX0ZJTEVTKTsJCQlcCisJICAgIGRvCQkJCQkJCQlcCisJICAgICAgICBpZiB0ZXN0IC1lICQoc3JjZGlyKS8kJGY7IHRoZW4gY3AgLXUgJChzcmNkaXIpLyQkZiAuIDsgZmk7CVwKKwkgICAgZG9uZTsJCQkJCQkJXAorCWZpOwkJCQkJCQkJXAorCW1rZGlyIC1wICQoSU5TUEVDVF9ESVIpOyBcCisJc2Nhbm9ial9vcHRpb25zPSIiOyBcCisJaWYgdGVzdCAieCQoVikiID0gIngxIjsgdGhlbiBcCisJICAgIHNjYW5vYmpfb3B0aW9ucz0iLS12ZXJib3NlIjsgXAorCWZpOyBcCisJJChJTlNQRUNUX0VOVklST05NRU5UKSAJCQkJCVwKKwlDQz0iJChHVEtET0NfQ0MpIiBMRD0iJChHVEtET0NfTEQpIgkJCQlcCisJQ0ZMQUdTPSIkKEdUS0RPQ19DRkxBR1MpICQoQ0ZMQUdTKSAkKFdBUk5JTkdfQ0ZMQUdTKSIJXAorCUxERkxBR1M9IiQoR1RLRE9DX0xJQlMpICQoTERGTEFHUykiCQkJCVwKKwkkKEdTVF9ET0NfU0NBTk9CSikgJCRzY2Fub2JqX29wdGlvbnMgLS10eXBlLWluaXQtZnVuYz0iZ3N0X2luaXQoTlVMTCxOVUxMKSIJXAorCSAgICAtLW1vZHVsZT0kKERPQ19NT0RVTEUpIC0tc291cmNlPSQoUEFDS0FHRSkgLS1pbnNwZWN0LWRpcj0kKElOU1BFQ1RfRElSKSAmJgkJXAorCSAgICBlY2hvICIgIERPQyAgIE1lcmdpbmcgaW50cm9zcGVjdGlvbiBkYXRhIiAmJiBcCisJICAgICQoUFlUSE9OKQkJCQkJCVwKKwkgICAgJCh0b3Bfc3JjZGlyKS9jb21tb24vc2NhbmdvYmotbWVyZ2UucHkgJChET0NfTU9EVUxFKTsJXAorCWlmIHRlc3QgeCIkKHNyY2RpcikiICE9IHguIDsgdGhlbgkJCQlcCisJICAgIGZvciBmIGluICQoU0NBTk9CSl9GSUxFUyk7CQkJCQlcCisJICAgIGRvCQkJCQkJCQlcCisJICAgICAgICBjbXAgLXMgLi8kJGYgJChzcmNkaXIpLyQkZiB8fCBjcCAuLyQkZiAkKHNyY2RpcikvIDsJCVwKKwkgICAgZG9uZTsJCQkJCQkJXAorCWZpOwkJCQkJCQkJXAorCXRvdWNoIHNjYW5vYmotYnVpbGQuc3RhbXAKKworJChET0NfTU9EVUxFKS1kZWNsLnR4dCAkKFNDQU5PQkpfRklMRVMpICQoU0NBTk9CSl9GSUxFU19PKTogc2Nhbi1idWlsZC5zdGFtcAorCUB0cnVlCisKKyMjIyBzY2FuIGhlYWRlcnM7IGRvbmUgb24gZXZlcnkgYnVpbGQgIyMjCitzY2FuLWJ1aWxkLnN0YW1wOiAkKEhGSUxFX0dMT0IpICQoRVhUUkFfSEZJTEVTKSAkKGJhc2VmaWxlcykgc2Nhbm9iai1idWlsZC5zdGFtcAorCUBlY2hvICcgIERPQyAgIFNjYW5uaW5nIGhlYWRlciBmaWxlcycKKwlAaWYgdGVzdCB4IiQoc3JjZGlyKSIgIT0geC4gOyB0aGVuCQkJCVwKKwkgICAgZm9yIGYgaW4gJChTQ0FOT0JKX0ZJTEVTKSAkKFNDQU5fRklMRVMpOwkJCVwKKwkgICAgZG8JCQkJCQkJCVwKKwkgICAgICAgIGlmIHRlc3QgLWUgJChzcmNkaXIpLyQkZjsgdGhlbiBjcCAtdSAkKHNyY2RpcikvJCRmIC4gOyBmaTsJXAorCSAgICBkb25lOwkJCQkJCQlcCisJZmkKKwlAX3NvdXJjZV9kaXI9JycgOwkJCQkJCVwKKwlmb3IgaSBpbiAkKERPQ19TT1VSQ0VfRElSKSA7IGRvCQkJCQlcCisJICAgIF9zb3VyY2VfZGlyPSIkJHtfc291cmNlX2Rpcn0gLS1zb3VyY2UtZGlyPSQkaSIgOwkgICAgICAgIFwKKwlkb25lIDsJCQkJCQkJICAgICAgICBcCisJZ3RrZG9jLXNjYW4JCQkJCQkJXAorCSAgICAkKFNDQU5fT1BUSU9OUykgJChFWFRSQV9IRklMRVMpCQkJCVwKKwkgICAgLS1tb2R1bGU9JChET0NfTU9EVUxFKQkJCQkJXAorCSAgICAkJHtfc291cmNlX2Rpcn0gICAgICAgICAgICAgCQkJCVwKKwkgICAgLS1pZ25vcmUtaGVhZGVycz0iJChJR05PUkVfSEZJTEVTKSI7CQkJXAorCXRvdWNoIHNjYW4tYnVpbGQuc3RhbXAKKworIyMjIyB1cGRhdGUgdGVtcGxhdGVzOyBkb25lIG9uIGV2ZXJ5IGJ1aWxkICMjIyMKKworIyBpbiBhIG5vbi1zcmNkaXIgYnVpbGQsIHdlIG5lZWQgdG8gY29weSBmaWxlcyBmcm9tIHRoZSBwcmV2aW91cyBzdGVwCisjIGFuZCB0aGUgZmlsZXMgZnJvbSBwcmV2aW91cyBydW5zIG9mIHRoaXMgc3RlcAordG1wbC1idWlsZC5zdGFtcDogJChET0NfTU9EVUxFKS1kZWNsLnR4dCAkKFNDQU5PQkpfRklMRVMpICQoRE9DX01PRFVMRSktc2VjdGlvbnMudHh0ICQoRE9DX09WRVJSSURFUykKKwlAZWNobyAnICBET0MgICBSZWJ1aWxkaW5nIHRlbXBsYXRlIGZpbGVzJworCUBpZiB0ZXN0IHgiJChzcmNkaXIpIiAhPSB4LiA7IHRoZW4JCQkJXAorCSAgICBmb3IgZiBpbiAkKFNDQU5PQkpfRklMRVMpICQoU0NBTl9GSUxFUyk7CQkJXAorCSAgICBkbwkJCQkJCQkJXAorCSAgICAgICAgaWYgdGVzdCAtZSAkKHNyY2RpcikvJCRmOyB0aGVuIGNwIC11ICQoc3JjZGlyKS8kJGYgLiA7IGZpOwlcCisJICAgIGRvbmU7CQkJCQkJCVwKKwlmaQorCUBndGtkb2MtbWt0bXBsIC0tbW9kdWxlPSQoRE9DX01PRFVMRSkKKwlAJChQWVRIT04pIFwKKwkJJCh0b3Bfc3JjZGlyKS9jb21tb24vbWFuZ2xlLXRtcGwucHkgJChzcmNkaXIpLyQoSU5TUEVDVF9ESVIpIHRtcGwKKwlAdG91Y2ggdG1wbC1idWlsZC5zdGFtcAorCit0bXBsLnN0YW1wOiB0bXBsLWJ1aWxkLnN0YW1wCisJQHRydWUKKworIyMjIyB4bWwgIyMjIworCitzZ21sLWJ1aWxkLnN0YW1wOiB0bXBsLnN0YW1wIHNjYW4tYnVpbGQuc3RhbXAgJChDRklMRV9HTE9CKSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9wbHVnaW5zLnhzbCAkKGV4cGFuZF9jb250ZW50X2ZpbGVzKQorCUBlY2hvICcgIERPQyAgIEJ1aWxkaW5nIFhNTCcKKwlALW1rZGlyIC1wIHhtbAorCUBmb3IgYSBpbiAkKHNyY2RpcikvJChJTlNQRUNUX0RJUikvKi54bWw7IGRvIFwKKwkgICAgeHNsdHByb2MgLS1zdHJpbmdwYXJhbSBtb2R1bGUgJChNT0RVTEUpIFwKKwkJJCh0b3Bfc3JjZGlyKS9jb21tb24vcGx1Z2lucy54c2wgJCRhID4geG1sL2BiYXNlbmFtZSAkJGFgOyBkb25lCisJQGZvciBmIGluICQoRVhBTVBMRV9DRklMRVMpOyBkbyBcCisJCSQoUFlUSE9OKSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9jLXRvLXhtbC5weSAkJGYgPiB4bWwvZWxlbWVudC1gYmFzZW5hbWUgJCRmIC5jYC54bWw7IGRvbmUKKwlAZ3RrZG9jLW1rZGIgXAorCQktLW1vZHVsZT0kKERPQ19NT0RVTEUpIFwKKwkJLS1zb3VyY2UtZGlyPSQoRE9DX1NPVVJDRV9ESVIpIFwKKwkJIC0tZXhwYW5kLWNvbnRlbnQtZmlsZXM9IiQoZXhwYW5kX2NvbnRlbnRfZmlsZXMpIiBcCisJCS0tbWFpbi1zZ21sLWZpbGU9JChzcmNkaXIpLyQoRE9DX01BSU5fU0dNTF9GSUxFKSBcCisJCS0tb3V0cHV0LWZvcm1hdD14bWwgXAorCQktLWlnbm9yZS1maWxlcz0iJChJR05PUkVfSEZJTEVTKSAkKElHTk9SRV9DRklMRVMpIiBcCisJCSQoTUtEQl9PUFRJT05TKQorCUBjcCAuLi92ZXJzaW9uLmVudGl0aWVzIHhtbAorCUB0b3VjaCBzZ21sLWJ1aWxkLnN0YW1wCisKK3NnbWwuc3RhbXA6IHNnbWwtYnVpbGQuc3RhbXAKKwlAdHJ1ZQorCisjIyMjIGh0bWwgIyMjIworCitodG1sLWJ1aWxkLnN0YW1wOiBzZ21sLnN0YW1wICQoRE9DX01BSU5fU0dNTF9GSUxFKSAkKGNvbnRlbnRfZmlsZXMpCisJQGVjaG8gJyAgRE9DICAgQnVpbGRpbmcgSFRNTCcKKwlAcm0gLXJmIGh0bWwKKwlAbWtkaXIgaHRtbAorCUBjcCAkKHNyY2RpcikvJChET0NfTUFJTl9TR01MX0ZJTEUpIGh0bWwKKwlAZm9yIGYgaW4gJChjb250ZW50X2ZpbGVzKTsgZG8gY3AgJChzcmNkaXIpLyQkZiBodG1sOyBkb25lCisJQGNwIC1wciB4bWwgaHRtbAorCUBjcCAuLi92ZXJzaW9uLmVudGl0aWVzIGh0bWwKKwlAbWtodG1sX29wdGlvbnM9IiI7IFwKKwlndGtkb2MtbWtodG1sIDI+JjEgLS1oZWxwIHwgZ3JlcCAgPi9kZXYvbnVsbCAiXC1cLXZlcmJvc2UiOyBcCisJaWYgdGVzdCAiJCg/KSIgPSAiMCI7IHRoZW4gXAorCSAgaWYgdGVzdCAieCQoVikiID0gIngxIjsgdGhlbiBcCisJICAgIG1raHRtbF9vcHRpb25zPSIkJG1raHRtbF9vcHRpb25zIC0tdmVyYm9zZSI7IFwKKwkgIGZpOyBcCisJZmk7IFwKKwljZCBodG1sICYmIGd0a2RvYy1ta2h0bWwgJCRta2h0bWxfb3B0aW9ucyAkKERPQ19NT0RVTEUpICQoRE9DX01BSU5fU0dNTF9GSUxFKQorCUBtdiBodG1sL2luZGV4LnNnbWwgaHRtbC9pbmRleC5zZ21sLmJhaworCUAkKFNFRCkgInMvIGhyZWY9XCIkKERPQ19NT0RVTEUpXC8vIGhyZWY9XCIkKERPQ19NT0RVTEUpLUBHU1RfTUFKT1JNSU5PUkBcLy9nIiBodG1sL2luZGV4LnNnbWwuYmFrID5odG1sL2luZGV4LnNnbWwKKwlAcm0gLWYgaHRtbC9pbmRleC5zZ21sLmJhaworCUBybSAtZiBodG1sLyQoRE9DX01BSU5fU0dNTF9GSUxFKQorCUBybSAtcmYgaHRtbC94bWwKKwlAcm0gLWYgaHRtbC92ZXJzaW9uLmVudGl0aWVzCisJQHRlc3QgIngkKEhUTUxfSU1BR0VTKSIgPSAieCIgfHwgZm9yIGkgaW4gIiIgJChIVE1MX0lNQUdFUykgOyBkbyBcCisJICAgIGlmIHRlc3QgIiQkaSIgIT0gIiI7IHRoZW4gY3AgJChzcmNkaXIpLyQkaSBodG1sIDsgZmk7IGRvbmUKKwlAZWNobyAnICBET0MgICBGaXhpbmcgY3Jvc3MtcmVmZXJlbmNlcycKKwlAZ3RrZG9jLWZpeHhyZWYgLS1tb2R1bGU9JChET0NfTU9EVUxFKSAtLW1vZHVsZS1kaXI9aHRtbCAtLWh0bWwtZGlyPSQoSFRNTF9ESVIpICQoRklYWFJFRl9PUFRJT05TKQorCUB0b3VjaCBodG1sLWJ1aWxkLnN0YW1wCisKK2NsZWFuLWxvY2FsLWd0a2RvYzoKKwlAcm0gLXJmIHhtbCB0bXBsIGh0bWwKKyMgY2xlYW4gZmlsZXMgY29waWVkIGZvciBub25zcmNkaXIgdGVtcGxhdGVzIGJ1aWxkCisJQGlmIHRlc3QgeCIkKHNyY2RpcikiICE9IHguIDsgdGhlbiBcCisJICAgIHJtIC1yZiAkKFNDQU5PQkpfRklMRVMpICQoU0NBTl9GSUxFUykgJChSRVBPUlRfRklMRVMpIFwKKwkgICAgICAgICQoTUFJTlRBSU5FUl9ET0NfU1RBTVBTKTsgXAorCWZpCitlbHNlCithbGwtbG9jYWw6CitjbGVhbi1sb2NhbC1ndGtkb2M6CitlbmRpZgorCitjbGVhbi1sb2NhbDogY2xlYW4tbG9jYWwtZ3RrZG9jCisJQHJtIC1mICp+ICouYmFrCisJQHJtIC1yZiAubGlicworCitkaXN0Y2xlYW4tbG9jYWw6CisJQHJtIC1mICQoUkVQT1JUX0ZJTEVTKSBcCisJICAgICAgICAkKERPQ19NT0RVTEUpLWRlY2wtbGlzdC50eHQgJChET0NfTU9EVUxFKS1kZWNsLnR4dAorCUBybSAtcmYgdG1wbC8qLnNnbWwuYmFrCisJQHJtIC1mICQoRE9DX01PRFVMRSkuaGllcmFyY2h5CisJQHJtIC1mICouc3RhbXAgfHwgdHJ1ZQorCUBpZiB0ZXN0ICIkKGFic19zcmNkaXIpIiAhPSAiJChhYnNfYnVpbGRkaXIpIiA7IHRoZW4gXAorCSAgICBybSAtZiAkKERPQ19NT0RVTEUpLWRvY3Muc2dtbCA7IFwKKwkgICAgcm0gLWYgJChET0NfTU9EVUxFKS50eXBlcyA7IFwKKwkgICAgcm0gLWYgJChET0NfTU9EVUxFKS5pbnRlcmZhY2VzIDsgXAorCSAgICBybSAtZiAkKERPQ19NT0RVTEUpLW92ZXJyaWRlcy50eHQgOyBcCisJICAgIHJtIC1mICQoRE9DX01PRFVMRSkucHJlcmVxdWlzaXRlcyA7IFwKKwkgICAgcm0gLWYgJChET0NfTU9EVUxFKS1zZWN0aW9ucy50eHQgOyBcCisJICAgIHJtIC1yZiB0bXBsLyouc2dtbCA7IFwKKwkgICAgcm0gLXJmICQoSU5TUEVDVF9ESVIpOyBcCisJZmkKKwlAcm0gLXJmICoubworCitNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9ICQoTUFJTlRBSU5FUl9ET0NfU1RBTVBTKQorCisjIHRob21hczogbWFrZSBkb2NzIHBhcmFsbGVsIGluc3RhbGxhYmxlOyBkZXZoZWxwIHJlcXVpcmVzIG1ham9ybWlub3IgdG9vCitpbnN0YWxsLWRhdGEtbG9jYWw6CisJKGluc3RhbGxmaWxlcz1gZWNobyAkKGJ1aWxkZGlyKS9odG1sLyouc2dtbCAkKGJ1aWxkZGlyKS9odG1sLyouaHRtbCAkKGJ1aWxkZGlyKS9odG1sLyoucG5nICQoYnVpbGRkaXIpL2h0bWwvKi5jc3NgOyBcCisJaWYgdGVzdCAiJCRpbnN0YWxsZmlsZXMiID0gJyQoYnVpbGRkaXIpL2h0bWwvKi5zZ21sICQoYnVpbGRkaXIpL2h0bWwvKi5odG1sICQoYnVpbGRkaXIpL2h0bWwvKi5wbmcgJChidWlsZGRpcikvaHRtbC8qLmNzcyc7IFwKKwl0aGVuIGVjaG8gJy0tIE5vdGhpbmcgdG8gaW5zdGFsbCcgOyBcCisJZWxzZSBcCisJICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKFRBUkdFVF9ESVIpOyBcCisJICBmb3IgaSBpbiAkJGluc3RhbGxmaWxlczsgZG8gXAorCSAgICBlY2hvICctLSBJbnN0YWxsaW5nICckJGkgOyBcCisJICAgICQoSU5TVEFMTF9EQVRBKSAkJGkgJChERVNURElSKSQoVEFSR0VUX0RJUik7IFwKKwkgIGRvbmU7IFwKKwkgIHBuZ2ZpbGVzPWBlY2hvIC4vaHRtbC8qLnBuZ2A7IFwKKwkgIGlmIHRlc3QgIiQkcG5nZmlsZXMiICE9ICcuL2h0bWwvKi5wbmcnOyB0aGVuIFwKKwkgICAgZm9yIGkgaW4gJCRwbmdmaWxlczsgZG8gXAorCSAgICAgIGVjaG8gJy0tIEluc3RhbGxpbmcgJyQkaSA7IFwKKwkgICAgICAkKElOU1RBTExfREFUQSkgJCRpICQoREVTVERJUikkKFRBUkdFVF9ESVIpOyBcCisJICAgIGRvbmU7IFwKKwkgIGZpOyBcCisJICBlY2hvICctLSBJbnN0YWxsaW5nICQoYnVpbGRkaXIpL2h0bWwvJChET0NfTU9EVUxFKS5kZXZoZWxwMicgOyBcCisJICBpZiB0ZXN0IC1lICQoYnVpbGRkaXIpL2h0bWwvJChET0NfTU9EVUxFKS5kZXZoZWxwMjsgdGhlbiBcCisJICAgICAgICAgICAgJChJTlNUQUxMX0RBVEEpICQoYnVpbGRkaXIpL2h0bWwvJChET0NfTU9EVUxFKS5kZXZoZWxwMiBcCisJICAgICAgICAgICAgJChERVNURElSKSQoVEFSR0VUX0RJUikvJChET0NfTU9EVUxFKS1AR1NUX01BSk9STUlOT1JALmRldmhlbHAyOyBcCisJICBmaTsgXAorCSAgKHdoaWNoIGd0a2RvYy1yZWJhc2UgPi9kZXYvbnVsbCAmJiBcCisJICAgIGd0a2RvYy1yZWJhc2UgLS1yZWxhdGl2ZSAtLWRlc3QtZGlyPSQoREVTVERJUikgLS1odG1sLWRpcj0kKERFU1RESVIpJChUQVJHRVRfRElSKSkgfHwgdHJ1ZSA7IFwKKwlmaSkKK3VuaW5zdGFsbC1sb2NhbDoKKwlpZiB0ZXN0IC1kICQoREVTVERJUikkKFRBUkdFVF9ESVIpOyB0aGVuIFwKKwkgIHJtIC1yZiAkKERFU1RESVIpJChUQVJHRVRfRElSKS8qOyBcCisJICBybWRpciAtcCAkKERFU1RESVIpJChUQVJHRVRfRElSKSAyPi9kZXYvbnVsbCB8fCB0cnVlOyBcCisJZWxzZSBcCisJICBlY2hvICctLSBOb3RoaW5nIHRvIHVuaW5zdGFsbCcgOyBcCisJZmk7CisKKyMKKyMgQ2hlY2tzCisjCitpZiBFTkFCTEVfR1RLX0RPQworY2hlY2staGllcmFyY2h5OiAkKERPQ19NT0RVTEUpLmhpZXJhcmNoeQorCUBpZiBncmVwICcJJyAkKERPQ19NT0RVTEUpLmhpZXJhcmNoeTsgdGhlbiBcCisJICAgIGVjaG8gIiQoRE9DX01PRFVMRSkuaGllcmFyY2h5IGNvbnRhaW5zIHRhYnMsIHBsZWFzZSBmaXgiOyBcCisJICAgIC9iaW4vZmFsc2U7IFwKKwlmaQorCitjaGVjazogY2hlY2staGllcmFyY2h5CitlbmRpZgorCisjIHdpbGRjYXJkIGlzIGFwcGFyZW50bHkgbm90IHBvcnRhYmxlIHRvIG90aGVyIG1ha2VzLCBoZW5jZSB0aGUgdXNlIG9mIGZpbmQKK2luc3BlY3RfZmlsZXMgPSAkKHNoZWxsIGZpbmQgJChzcmNkaXIpLyQoSU5TUEVDVF9ESVIpIC1uYW1lICcqLnhtbCcpCisKK2NoZWNrLWluc3BlY3RlZC12ZXJzaW9uczoKKwlAZWNobyBDaGVja2luZyBwbHVnaW4gdmVyc2lvbnMgb2YgaW5zcGVjdGVkIHBsdWdpbiBkYXRhIC4uLjsgXAorCWZhaWw9MCA7IFwKKwlmb3IgZWFjaCBpbiAkKGluc3BlY3RfZmlsZXMpIDsgZG8gXAorCSAgaWYgKGdyZXAgLUggJzx2ZXJzaW9uPicgJCRlYWNoIHwgZ3JlcCAtdiAnPHZlcnNpb24+JChWRVJTSU9OKScpOyB0aGVuIFwKKwkgICAgZWNobyAkJGVhY2ggc2hvdWxkIGJlIGZpeGVkIHRvIHNheSB2ZXJzaW9uICQoVkVSU0lPTikgb3IgYmUgcmVtb3ZlZCA7IFwKKwkgICAgZWNobyAic2VkIC1pIC1lICdzLzx2ZXJzaW9uLip2ZXJzaW9uPi88dmVyc2lvbj4kKFZFUlNJT04pPFwvdmVyc2lvbj4vJyIgJCRlYWNoOyBcCisJICAgIGVjaG8gOyBcCisJICAgIGZhaWw9MTsgXAorCSAgZmkgOyBcCisJZG9uZSA7IFwKKwlleGl0ICQkZmFpbAorCitjaGVjay1vdXRkYXRlZC1kb2NzOgorCSQoQU1fVl9HRU4pZWNobyBDaGVja2luZyBmb3Igb3V0ZGF0ZWQgcGx1Z2luIGluc3BlY3QgZGF0YSAuLi47IFwKKwlmYWlsPTAgOyBcCisJaWYgWyAtZCAkKHRvcF9zcmNkaXIpLy5naXQvIF07IHRoZW4gXAorCSAgZmlsZXM9YGZpbmQgJChzcmNkaXIpL2luc3BlY3QvIC1uYW1lICcqeG1sJ2A7IFwKKwkgIGZvciBmIGluICQkZmlsZXM7IGRvIFwKKwkgICAgdmVyPWBncmVwICc8dmVyc2lvbj4kKFBBQ0tBR0VfVkVSU0lPTik8L3ZlcnNpb24+JyAkJGZgOyBcCisJICAgIGlmIHRlc3QgIngkJHZlciIgPSAieCI7IHRoZW4gXAorCSAgICAgIHBsdWdpbj1gZWNobyAkJGYgfCBzZWQgLWUgJ3MvXi4qcGx1Z2luLS8vJyAtZSAncy8ueG1sLy8nYDsgXAorCSAgICAgICMgZWNobyAiQ2hlY2tpbmcgJCRwbHVnaW4gJCRmIjsgXAorCSAgICAgIHB1c2hkICIkKHRvcF9zcmNkaXIpIiA+L2Rldi9udWxsOyBcCisJICAgICAgcGluaXQ9YGdpdCBncmVwIC1BMyBHU1RfUExVR0lOX0RFRklORSAtLSBleHQvIGdzdC8gc3lzLyB8IGdyZXAgIlwiJCRwbHVnaW5cIiJgOyBcCisJICAgICAgcG9wZCA+L2Rldi9udWxsOyBcCisJICAgICAgIyBlY2hvICJbJCRwaW5pdF0iOyBcCisJICAgICAgaWYgdGVzdCAieCQkcGluaXQiID0gIngiOyB0aGVuIFwKKwkgICAgICAgIHByaW50ZiAiICoqKiogb3V0ZGF0ZWQgZG9jcyBmb3IgcGx1Z2luICUtMTVzOiAlc1xuIiAkJHBsdWdpbiAkJGY7IFwKKwkgICAgICAgIGZhaWw9MTsgXAorCSAgICAgIGZpOyBcCisJICAgIGZpOyBcCisJICBkb25lOyBcCisJZmkgOyBcCisJZXhpdCAkJGZhaWwKKworIworIyBSZXF1aXJlIGd0ay1kb2Mgd2hlbiBtYWtpbmcgZGlzdAorIworaWYgRU5BQkxFX0dUS19ET0MKK2Rpc3QtY2hlY2stZ3RrZG9jOgorZWxzZQorZGlzdC1jaGVjay1ndGtkb2M6CisJQGVjaG8gIioqKiBndGstZG9jIG11c3QgYmUgaW5zdGFsbGVkIGFuZCBlbmFibGVkIGluIG9yZGVyIHRvIG1ha2UgZGlzdCIKKwlAZmFsc2UKK2VuZGlmCisKKyMgRklYTUU6IGRlY2lkZSB3aGV0aGVyIHdlIHdhbnQgdG8gZGlzdCBnZW5lcmF0ZWQgaHRtbCBvciBub3QKKyMgYWxzbyB0aGlzIG9ubHkgd29ya3MsIGlmIHRoZSBwcm9qZWN0IGhhcyBiZWVuIGJ1aWxkIGJlZm9yZQorIyB3ZSBjb3VsZCBkaXN0IGh0bWwgb25seSBpZiBpdHMgdGhlcmUsIGJ1dCB0aGF0IG1pZ2h0IGxlYWQgdG8gbWlzc2luZyBodG1sIGluCisjIHRhcmJhbGxzCitkaXN0LWhvb2s6IGRpc3QtY2hlY2stZ3RrZG9jIGRpc3QtaG9vay1sb2NhbAorCW1rZGlyICQoZGlzdGRpcikvaHRtbAorCWNwIGh0bWwvKiAkKGRpc3RkaXIpL2h0bWwKKwktY3AgJChzcmNkaXIpLyQoRE9DX01PRFVMRSkudHlwZXMgJChkaXN0ZGlyKS8KKwktY3AgJChzcmNkaXIpLyQoRE9DX01PRFVMRSktc2VjdGlvbnMudHh0ICQoZGlzdGRpcikvCisJY2QgJChkaXN0ZGlyKSAmJiBybSAtZiAkKERJU1RDTEVBTkZJTEVTKQorCS1ndGtkb2MtcmViYXNlIC0tb25saW5lIC0tcmVsYXRpdmUgLS1odG1sLWRpcj0kKGRpc3RkaXIpL2h0bWwKKworLlBIT05ZIDogZGlzdC1ob29rLWxvY2FsIGRvY3MgY2hlY2stb3V0ZGF0ZWQtZG9jcyBpbnNwZWN0CisKKyMgYXZvaWQgc3B1cmlvdXMgYnVpbGQgZXJyb3JzIHdoZW4gZGlzdGNoZWNraW5nIHdpdGggLWpOCisuTk9UUEFSQUxMRUw6CmRpZmYgLS1naXQgYS9jb21tb24vZ3RrLWRvYy5tYWsgYi9jb21tb24vZ3RrLWRvYy5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQyYjVhNQotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9ndGstZG9jLm1hawpAQCAtMCwwICsxLDIzMSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEV2ZXJ5dGhpbmcgYmVsb3cgaGVyZSBpcyBnZW5lcmljIGFuZCB5b3Ugc2hvdWxkbid0IG5lZWQgdG8gY2hhbmdlIGl0LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHRob21hczogZXhjZXB0IG9mIGNvdXJzZSB0aGF0IHdlIGRpZAorCisjIHRob21hczogY29waWVkIGZyb20gZ2xpYi0yCisjIFdlIHNldCBHUEFUSCBoZXJlOyB0aGlzIGdpdmVzIHVzIHNlbWFudGljcyBmb3IgR05VIG1ha2UKKyMgd2hpY2ggYXJlIG1vcmUgbGlrZSBvdGhlciBtYWtlJ3MgVlBBVEgsIHdoZW4gaXQgY29tZXMgdG8KKyMgd2hldGhlciBhIHNvdXJjZSB0aGF0IGlzIGEgdGFyZ2V0IG9mIG9uZSBydWxlIGlzIHRoZW4KKyMgc2VhcmNoZWQgZm9yIGluIFZQQVRIL0dQQVRILgorIworR1BBVEggPSAkKHNyY2RpcikKKworIyB0aG9tYXM6IG1ha2UgZG9jcyBwYXJhbGxlbCBpbnN0YWxsYWJsZQorVEFSR0VUX0RJUj0kKEhUTUxfRElSKS8kKERPQ19NT0RVTEUpLUBHU1RfTUFKT1JNSU5PUkAKKworRVhUUkFfRElTVCA9IAkJCQlcCisJJChjb250ZW50X2ZpbGVzKQkJXAorCSQoZXh0cmFfZmlsZXMpCQkJXAorCSQoSFRNTF9JTUFHRVMpCQkJXAorCSQoRE9DX01BSU5fU0dNTF9GSUxFKQkJXAorCSQoRE9DX01PRFVMRSkudHlwZXMJCVwKKwkkKERPQ19PVkVSUklERVMpCQlcCisJJChET0NfTU9EVUxFKS1zZWN0aW9ucy50eHQKKworRE9DX1NUQU1QUyA9CQkJCVwKKwlzZXR1cC1idWlsZC5zdGFtcAkJXAorCXNjYW4tYnVpbGQuc3RhbXAJCVwKKwlzZ21sLWJ1aWxkLnN0YW1wCQlcCisJaHRtbC1idWlsZC5zdGFtcAkJXAorCXNnbWwuc3RhbXAJCVwKKwlodG1sLnN0YW1wCisKK1NDQU5PQkpfRklMRVMgPQkJCQlcCisJJChET0NfTU9EVUxFKS5hcmdzCQlcCisJJChET0NfTU9EVUxFKS5oaWVyYXJjaHkJCVwKKwkkKERPQ19NT0RVTEUpLmludGVyZmFjZXMJCVwKKwkkKERPQ19NT0RVTEUpLnByZXJlcXVpc2l0ZXMJXAorCSQoRE9DX01PRFVMRSkuc2lnbmFscwkJXAorCS5saWJzLyQoRE9DX01PRFVMRSktc2Nhbi5vCisKK1JFUE9SVF9GSUxFUyA9IFwKKwkkKERPQ19NT0RVTEUpLXVuZG9jdW1lbnRlZC50eHQgXAorCSQoRE9DX01PRFVMRSktdW5kZWNsYXJlZC50eHQgXAorCSQoRE9DX01PRFVMRSktdW51c2VkLnR4dAorCitDTEVBTkZJTEVTID0gJChTQ0FOT0JKX0ZJTEVTKSAkKFJFUE9SVF9GSUxFUykgJChET0NfU1RBTVBTKSBkb2MtcmVnaXN0cnkueG1sCisKK2lmIEVOQUJMRV9HVEtfRE9DCithbGwtbG9jYWw6IGh0bWwtYnVpbGQuc3RhbXAKKworIyMjIyBzZXR1cCAjIyMjCisKK3NldHVwLWJ1aWxkLnN0YW1wOiAkKGNvbnRlbnRfZmlsZXMpCisJLUBpZiB0ZXN0ICIkKGFic19zcmNkaXIpIiAhPSAiJChhYnNfYnVpbGRkaXIpIiA7IHRoZW4gXAorCSAgICBlY2hvICcgIERPQyAgIFByZXBhcmluZyBidWlsZCc7IFwKKwkgICAgZmlsZXM9YGVjaG8gJChET0NfTUFJTl9TR01MX0ZJTEUpICQoRE9DX09WRVJSSURFUykgJChET0NfTU9EVUxFKS1zZWN0aW9ucy50eHQgJChET0NfTU9EVUxFKS50eXBlcyAkKGNvbnRlbnRfZmlsZXMpYDsgXAorCSAgICBpZiB0ZXN0ICJ4JCRmaWxlcyIgIT0gIngiIDsgdGhlbiBcCisJICAgICAgICBmb3IgZmlsZSBpbiAkJGZpbGVzIDsgZG8gXAorCSAgICAgICAgICAgIHRlc3QgLWYgJChhYnNfc3JjZGlyKS8kJGZpbGUgJiYgXAorCSAgICAgICAgICAgICAgICBjcCAtcHUgJChhYnNfc3JjZGlyKS8kJGZpbGUgJChhYnNfYnVpbGRkaXIpLyB8fCB0cnVlOyBcCisJICAgICAgICBkb25lOyBcCisJICAgIGZpOyBcCisJZmkKKwlAdG91Y2ggc2V0dXAtYnVpbGQuc3RhbXAKKworIyMjIyBzY2FuICMjIyMKKworIyBpbiB0aGUgY2FzZSBvZiBub24tc3JjZGlyIGJ1aWxkcywgdGhlIGJ1aWx0IGdzdCBkaXJlY3RvcnkgZ2V0cyBhZGRlZAorIyB0byBndGstZG9jIHNjYW5uaW5nOyBidXQgb25seSB0aGVuLCB0byBhdm9pZCBkdXBsaWNhdGVzCitzY2FuLWJ1aWxkLnN0YW1wOiAkKEhGSUxFX0dMT0IpICQoQ0ZJTEVfR0xPQikKKwlAZWNobyAnICBET0MgICBTY2FubmluZyBoZWFkZXIgZmlsZXMnCisJQF9zb3VyY2VfZGlyPScnIDsJCQkJCQlcCisJZm9yIGkgaW4gJChET0NfU09VUkNFX0RJUikgOyBkbwkJCQkJXAorCSAgICBfc291cmNlX2Rpcj0iJCR7X3NvdXJjZV9kaXJ9IC0tc291cmNlLWRpcj0kJGkiIDsJICAgICAgICBcCisJZG9uZSA7CQkJCQkJCSAgICAgICAgXAorCWd0a2RvYy1zY2FuCQkJCQkJCVwKKwkJJChTQ0FOX09QVElPTlMpICQoRVhUUkFfSEZJTEVTKQkJCQlcCisJCS0tbW9kdWxlPSQoRE9DX01PRFVMRSkJCQkJCVwKKwkJJCR7X3NvdXJjZV9kaXJ9ICAgICAgICAgCQkJCVwKKwkJLS1pZ25vcmUtaGVhZGVycz0iJChJR05PUkVfSEZJTEVTKSIKKwlAaWYgZ3JlcCAtbCAnXi4uKiQkJyAkKERPQ19NT0RVTEUpLnR5cGVzID4gL2Rldi9udWxsOyB0aGVuCVwKKwkgICAgZWNobyAiICBET0MgICBJbnRyb3NwZWN0aW5nIGdvYmplY3RzIjsgXAorCSAgICBHU1RfUExVR0lOX1NZU1RFTV9QQVRIPWBjZCAkKHRvcF9idWlsZGRpcikgJiYgcHdkYAkJXAorCSAgICBHU1RfUExVR0lOX1BBVEg9CQkJCQkJXAorCSAgICBHU1RfUkVHSVNUUlk9ZG9jLXJlZ2lzdHJ5LnhtbAkJCQlcCisJICAgICQoR1RLRE9DX0VYVFJBX0VOVklST05NRU5UKQkJCQkJXAorCSAgICBDQz0iJChHVEtET0NfQ0MpIiBMRD0iJChHVEtET0NfTEQpIgkJCQlcCisJICAgIENGTEFHUz0iJChHVEtET0NfQ0ZMQUdTKSAkKENGTEFHUykiCQkJCVwKKwkgICAgTERGTEFHUz0iJChHVEtET0NfTElCUykgJChMREZMQUdTKSIJCQkJXAorCSAgICBndGtkb2Mtc2NhbmdvYmogLS10eXBlLWluaXQtZnVuYz0iZ3N0X2luaXQoTlVMTCxOVUxMKSIJXAorCSAgICAgICAgLS1tb2R1bGU9JChET0NfTU9EVUxFKSA7CQkJCVwKKwllbHNlCQkJCQkJCQlcCisJICAgIGZvciBpIGluICQoU0NBTk9CSl9GSUxFUykgOyBkbwkJCQlcCisJICAgICAgIHRlc3QgLWYgJCRpIHx8IHRvdWNoICQkaSA7CQkJCVwKKwkgICAgZG9uZQkJCQkJCQlcCisJZmkKKwlAdG91Y2ggc2Nhbi1idWlsZC5zdGFtcAorCiskKERPQ19NT0RVTEUpLWRlY2wudHh0ICQoU0NBTk9CSl9GSUxFUykgJChET0NfTU9EVUxFKS1zZWN0aW9ucy50eHQgJChET0NfTU9EVUxFKS1vdmVycmlkZXMudHh0OiBzY2FuLWJ1aWxkLnN0YW1wCisJQHRydWUKKworIyMjIyB4bWwgIyMjIworCitzZ21sLWJ1aWxkLnN0YW1wOiBzZXR1cC1idWlsZC5zdGFtcCAkKERPQ19NT0RVTEUpLWRlY2wudHh0ICQoU0NBTk9CSl9GSUxFUykgJChET0NfTU9EVUxFKS1zZWN0aW9ucy50eHQgJChleHBhbmRfY29udGVudF9maWxlcykKKwlAZWNobyAnICBET0MgICBCdWlsZGluZyBYTUwnCisJQGd0a2RvYy1ta2RiIC0tbW9kdWxlPSQoRE9DX01PRFVMRSkgLS1zb3VyY2UtZGlyPSQoRE9DX1NPVVJDRV9ESVIpICAtLWV4cGFuZC1jb250ZW50LWZpbGVzPSIkKGV4cGFuZF9jb250ZW50X2ZpbGVzKSIgLS1tYWluLXNnbWwtZmlsZT0kKERPQ19NQUlOX1NHTUxfRklMRSkgLS1vdXRwdXQtZm9ybWF0PXhtbCAkKE1LREJfT1BUSU9OUykKKwlAY3AgLi4vdmVyc2lvbi5lbnRpdGllcyB4bWwKKwlAdG91Y2ggc2dtbC1idWlsZC5zdGFtcAorCitzZ21sLnN0YW1wOiBzZ21sLWJ1aWxkLnN0YW1wCisJQHRydWUKKworIyMjIyBodG1sICMjIyMKKworaHRtbC1idWlsZC5zdGFtcDogc2dtbC5zdGFtcCAkKERPQ19NQUlOX1NHTUxfRklMRSkgJChjb250ZW50X2ZpbGVzKQorCUBlY2hvICcgIERPQyAgIEJ1aWxkaW5nIEhUTUwnCisJQHJtIC1yZiBodG1sCisJQG1rZGlyIGh0bWwKKwlAY3AgLXByIHhtbCBodG1sCisJQGNwIC4uL3ZlcnNpb24uZW50aXRpZXMgLi8KKwlAbWtodG1sX29wdGlvbnM9IiI7IFwKKwlndGtkb2MtbWtodG1sIDI+JjEgLS1oZWxwIHwgZ3JlcCAgPi9kZXYvbnVsbCAiXC1cLXZlcmJvc2UiOyBcCisJaWYgdGVzdCAiJCg/KSIgPSAiMCI7IHRoZW4gXAorCSAgaWYgdGVzdCAieCQoVikiID0gIngxIjsgdGhlbiBcCisJICAgIG1raHRtbF9vcHRpb25zPSIkJG1raHRtbF9vcHRpb25zIC0tdmVyYm9zZSI7IFwKKwkgIGZpOyBcCisJZmk7IFwKKwlAZ3RrZG9jLW1raHRtbCAyPiYxIC0taGVscCB8IGdyZXAgID4vZGV2L251bGwgIlwtXC1wYXRoIjsgXAorCWlmIHRlc3QgIiQoPykiID0gIjAiOyB0aGVuIFwKKwkgIG1raHRtbF9vcHRpb25zPS0tcGF0aD0iJChhYnNfc3JjZGlyKSI7IFwKKwlmaTsgXAorCWNkIGh0bWwgJiYgZ3RrZG9jLW1raHRtbCAkJG1raHRtbF9vcHRpb25zICQoTUtIVE1MX09QVElPTlMpICQoRE9DX01PRFVMRSkgLi4vJChET0NfTUFJTl9TR01MX0ZJTEUpCisJQG12IGh0bWwvaW5kZXguc2dtbCBodG1sL2luZGV4LnNnbWwuYmFrCisJQCQoU0VEKSAicy8gaHJlZj1cIiQoRE9DX01PRFVMRSlcLy8gaHJlZj1cIiQoRE9DX01PRFVMRSktQEdTVF9NQUpPUk1JTk9SQFwvL2ciIGh0bWwvaW5kZXguc2dtbC5iYWsgPmh0bWwvaW5kZXguc2dtbAorCUBybSAtZiBodG1sL2luZGV4LnNnbWwuYmFrCisJQHJtIC1yZiBodG1sL3htbAorCUBybSAtZiB2ZXJzaW9uLmVudGl0aWVzCisJQHRlc3QgIngkKEhUTUxfSU1BR0VTKSIgPSAieCIgfHwgICggY2QgJChzcmNkaXIpICYmIGNwICQoSFRNTF9JTUFHRVMpICQoYWJzX2J1aWxkZGlyKS9odG1sICkKKwlAZWNobyAnICBET0MgICBGaXhpbmcgY3Jvc3MtcmVmZXJlbmNlcycKKwlAZ3RrZG9jLWZpeHhyZWYgLS1tb2R1bGU9JChET0NfTU9EVUxFKSAtLW1vZHVsZS1kaXI9aHRtbCAtLWh0bWwtZGlyPSQoSFRNTF9ESVIpICQoRklYWFJFRl9PUFRJT05TKQorCUB0b3VjaCBodG1sLWJ1aWxkLnN0YW1wCisKK2NsZWFuLWxvY2FsLWd0a2RvYzoKKwlAcm0gLXJmIHhtbCB0bXBsIGh0bWwKKyMgY2xlYW4gZmlsZXMgY29waWVkIGZvciBub25zcmNkaXIgdGVtcGxhdGVzIGJ1aWxkCisJQGlmIHRlc3QgeCIkKHNyY2RpcikiICE9IHguIDsgdGhlbiBcCisJICAgICAgICBybSAtcmYgJChET0NfTU9EVUxFKS50eXBlczsgXAorCWZpCitlbHNlCithbGwtbG9jYWw6CitjbGVhbi1sb2NhbC1ndGtkb2M6CitlbmRpZgorCitjbGVhbi1sb2NhbDogY2xlYW4tbG9jYWwtZ3RrZG9jCisJQHJtIC1mICp+ICouYmFrCisJQHJtIC1yZiAubGlicworCitkaXN0Y2xlYW4tbG9jYWw6CisJQHJtIC1mICQoUkVQT1JUX0ZJTEVTKSBcCisJICAgICAgICAkKERPQ19NT0RVTEUpLWRlY2wtbGlzdC50eHQgJChET0NfTU9EVUxFKS1kZWNsLnR4dAorCUBybSAtcmYgdG1wbC8qLnNnbWwuYmFrCisJQHJtIC1mICQoRE9DX01PRFVMRSkuaGllcmFyY2h5CisJQHJtIC1mICouc3RhbXAgfHwgdHJ1ZQorCUBpZiB0ZXN0ICIkKGFic19zcmNkaXIpIiAhPSAiJChhYnNfYnVpbGRkaXIpIiA7IHRoZW4gXAorCSAgICBybSAtZiAkKERPQ19NQUlOX1NHTUxfRklMRSkgOyBcCisJICAgIHJtIC1mICQoRE9DX09WRVJSSURFUykgOyBcCisJICAgIHJtIC1mICQoRE9DX01PRFVMRSkudHlwZXMgOyBcCisJICAgIHJtIC1mICQoRE9DX01PRFVMRSkuaW50ZXJmYWNlcyA7IFwKKwkgICAgcm0gLWYgJChET0NfTU9EVUxFKS5wcmVyZXF1aXNpdGVzIDsgXAorCSAgICBybSAtZiAkKERPQ19NT0RVTEUpLXNlY3Rpb25zLnR4dCA7IFwKKwkgICAgcm0gLWYgJChjb250ZW50X2ZpbGVzKSA7IFwKKwkgICAgcm0gLXJmIHRtcGwvKi5zZ21sIDsgXAorCWZpCisJQHJtIC1yZiAqLm8KKworbWFpbnRhaW5lci1jbGVhbi1sb2NhbDogY2xlYW4KKwlAY2QgJChzcmNkaXIpICYmIHJtIC1yZiBodG1sIFwKKwkJeG1sICQoRE9DX01PRFVMRSktZGVjbC1saXN0LnR4dCAkKERPQ19NT0RVTEUpLWRlY2wudHh0CisKKyMgdGhvbWFzOiBtYWtlIGRvY3MgcGFyYWxsZWwgaW5zdGFsbGFibGU7IGRldmhlbHAgcmVxdWlyZXMgbWFqb3JtaW5vciB0b28KK2luc3RhbGwtZGF0YS1sb2NhbDoKKwkoaW5zdGFsbGZpbGVzPWBlY2hvICQoYnVpbGRkaXIpL2h0bWwvKi5zZ21sICQoYnVpbGRkaXIpL2h0bWwvKi5odG1sICQoYnVpbGRkaXIpL2h0bWwvKi5wbmcgJChidWlsZGRpcikvaHRtbC8qLmNzc2A7IFwKKwlpZiB0ZXN0ICIkJGluc3RhbGxmaWxlcyIgPSAnJChidWlsZGRpcikvaHRtbC8qLnNnbWwgJChidWlsZGRpcikvaHRtbC8qLmh0bWwgJChidWlsZGRpcikvaHRtbC8qLnBuZyAkKGJ1aWxkZGlyKS9odG1sLyouY3NzJzsgXAorCXRoZW4gZWNobyAnLS0gTm90aGluZyB0byBpbnN0YWxsJyA7IFwKKwllbHNlIFwKKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQoVEFSR0VUX0RJUik7IFwKKwkgIGZvciBpIGluICQkaW5zdGFsbGZpbGVzOyBkbyBcCisJICAgIGVjaG8gJy0tIEluc3RhbGxpbmcgJyQkaSA7IFwKKwkgICAgJChJTlNUQUxMX0RBVEEpICQkaSAkKERFU1RESVIpJChUQVJHRVRfRElSKTsgXAorCSAgZG9uZTsgXAorCSAgZWNobyAnLS0gSW5zdGFsbGluZyAkKGJ1aWxkZGlyKS9odG1sLyQoRE9DX01PRFVMRSkuZGV2aGVscDInIDsgXAorCSAgaWYgdGVzdCAtZSAkKGJ1aWxkZGlyKS9odG1sLyQoRE9DX01PRFVMRSkuZGV2aGVscDI7IHRoZW4gXAorCSAgICAgICAgICAgICQoSU5TVEFMTF9EQVRBKSAkKGJ1aWxkZGlyKS9odG1sLyQoRE9DX01PRFVMRSkuZGV2aGVscDIgXAorCSAgICAgICAgICAgICQoREVTVERJUikkKFRBUkdFVF9ESVIpLyQoRE9DX01PRFVMRSktQEdTVF9NQUpPUk1JTk9SQC5kZXZoZWxwMjsgXAorCSAgZmk7IFwKKwkgICh3aGljaCBndGtkb2MtcmViYXNlID4vZGV2L251bGwgJiYgXAorCSAgICBndGtkb2MtcmViYXNlIC0tcmVsYXRpdmUgLS1kZXN0LWRpcj0kKERFU1RESVIpIC0taHRtbC1kaXI9JChERVNURElSKSQoVEFSR0VUX0RJUikpIHx8IHRydWUgOyBcCisJZmkpCit1bmluc3RhbGwtbG9jYWw6CisJaWYgdGVzdCAtZCAkKERFU1RESVIpJChUQVJHRVRfRElSKTsgdGhlbiBcCisJICBybSAtcmYgJChERVNURElSKSQoVEFSR0VUX0RJUikvKjsgXAorCSAgcm1kaXIgLXAgJChERVNURElSKSQoVEFSR0VUX0RJUikgMj4vZGV2L251bGwgfHwgdHJ1ZTsgXAorCWVsc2UgXAorCSAgZWNobyAnLS0gTm90aGluZyB0byB1bmluc3RhbGwnIDsgXAorCWZpOworCisKKyMKKyMgUmVxdWlyZSBndGstZG9jIHdoZW4gbWFraW5nIGRpc3QKKyMKK2lmIEVOQUJMRV9HVEtfRE9DCitkaXN0LWNoZWNrLWd0a2RvYzoKK2Vsc2UKK2Rpc3QtY2hlY2stZ3RrZG9jOgorCUBlY2hvICIqKiogZ3RrLWRvYyBtdXN0IGJlIGluc3RhbGxlZCBhbmQgZW5hYmxlZCBpbiBvcmRlciB0byBtYWtlIGRpc3QiCisJQGZhbHNlCitlbmRpZgorCitkaXN0LWhvb2s6IGRpc3QtY2hlY2stZ3RrZG9jIGRpc3QtaG9vay1sb2NhbAorCW1rZGlyICQoZGlzdGRpcikvaHRtbAorCWNwIGh0bWwvKiAkKGRpc3RkaXIpL2h0bWwKKwktY3AgJChzcmNkaXIpLyQoRE9DX01PRFVMRSkudHlwZXMgJChkaXN0ZGlyKS8KKwktY3AgJChzcmNkaXIpLyQoRE9DX01PRFVMRSktc2VjdGlvbnMudHh0ICQoZGlzdGRpcikvCisJY2QgJChkaXN0ZGlyKSAmJiBybSAtZiAkKERJU1RDTEVBTkZJTEVTKQorCS1ndGtkb2MtcmViYXNlIC0tb25saW5lIC0tcmVsYXRpdmUgLS1odG1sLWRpcj0kKGRpc3RkaXIpL2h0bWwKKworLlBIT05ZIDogZGlzdC1ob29rLWxvY2FsIGRvY3MKKworIyBhdm9pZCBzcHVyaW91cyBidWlsZCBlcnJvcnMgd2hlbiBkaXN0Y2hlY2tpbmcgd2l0aCAtak4KKy5OT1RQQVJBTExFTDoKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9NYWtlZmlsZS5hbSBiL2NvbW1vbi9tNC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGRiOGE3Ci0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uL200L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNDIgQEAKK0VYVFJBX0RJU1QgPSBcCisJUkVBRE1FIFwKKwlhcy1hYy1leHBhbmQubTQgXAorCWFzLWF1dG8tYWx0Lm00IFwKKwlhcy1jb21waWxlci1mbGFnLm00IFwKKwlhcy1jb21waWxlci5tNCBcCisJYXMtZG9jYm9vay5tNCBcCisJYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCisJYXMtbGlidG9vbC5tNCBcCisJYXMtbGlidG9vbC10YWdzLm00IFwKKwlhcy1vYmpjLm00IFwKKwlhcy1weXRob24ubTQgXAorCWFzLXNjcnViLWluY2x1ZGUubTQgXAorCWFzLXZlcnNpb24ubTQgXAorCWF4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCisJZ2xpYi1nZXR0ZXh0Lm00IFwKKwlnc3QtYXJjaC5tNCBcCisJZ3N0LWFyZ3MubTQgXAorCWdzdC1jaGVjay5tNCBcCisJZ3N0LWRlYnVnaW5mby5tNCBcCisJZ3N0LWRlZmF1bHQubTQgXAorCWdzdC1kb2MubTQgXAorCWdzdC1kb3doaWxlLm00IFwKKwlnc3QtZXJyb3IubTQgXAorCWdzdC1mZWF0dXJlLm00IFwKKwlnc3QtZnVuY3Rpb24ubTQgXAorCWdzdC1nZXR0ZXh0Lm00IFwKKwlnc3QtZ2xpYjIubTQgXAorCWdzdC1saWJ4bWwyLm00IFwKKwlnc3QtcGFyc2VyLm00IFwKKwlnc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKKwlnc3QtcGxhdGZvcm0ubTQgXAorCWdzdC1wbHVnaW5kaXIubTQgXAorCWdzdC1wbHVnaW4tZG9jcy5tNCBcCisJZ3N0LXZhbGdyaW5kLm00IFwKKwlnc3QteDExLm00IFwKKwlnc3QubTQgXAorCWd0ay1kb2MubTQgXAorCWludHJvc3BlY3Rpb24ubTQgXAorCXBrZy5tNCBcCisJY2hlY2subTQgXAorCW9yYy5tNApkaWZmIC0tZ2l0IGEvY29tbW9uL200L01ha2VmaWxlLmluIGIvY29tbW9uL200L01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMWM4NjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vbTQvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw1NzkgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSBjb21tb24vbTQKK0RJU1RfQ09NTU9OID0gUkVBRE1FICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1weXRob24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXNjcnViLWluY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorQU1fVl9HRU4gPSAkKGFtX192X0dFTl8kKFYpKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworQU1fVl9hdCA9ICQoYW1fX3ZfYXRfJChWKSkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9hdF8wID0gQAorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBUyA9IEBBU0AKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAorQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAorQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKK0NDID0gQENDQAorQ0NBUyA9IEBDQ0FTQAorQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACitDQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDSEVDS19NQUpPUl9WRVJTSU9OID0gQENIRUNLX01BSk9SX1ZFUlNJT05ACitDSEVDS19NSUNST19WRVJTSU9OID0gQENIRUNLX01JQ1JPX1ZFUlNJT05ACitDSEVDS19NSU5PUl9WRVJTSU9OID0gQENIRUNLX01JTk9SX1ZFUlNJT05ACitDSEVDS19WRVJTSU9OID0gQENIRUNLX1ZFUlNJT05ACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEFESVIgPSBAREFUQURJUkAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRU5BQkxFX1NVQlVOSVQgPSBARU5BQkxFX1NVQlVOSVRACitFUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZGTEFHUyA9IEBGRkxBR1NACitGR1JFUCA9IEBGR1JFUEAKK0ZMRVhfUEFUSCA9IEBGTEVYX1BBVEhACitHQ09WID0gQEdDT1ZACitHQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKK0dDT1ZfTElCUyA9IEBHQ09WX0xJQlNACitHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAorR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKK0dMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAorR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKK0dMSUJfT05MWV9DRkxBR1MgPSBAR0xJQl9PTkxZX0NGTEFHU0AKK0dMSUJfT05MWV9MSUJTID0gQEdMSUJfT05MWV9MSUJTQAorR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACitHTElCX1JFUSA9IEBHTElCX1JFUUAKK0dNUF9MSUJTID0gQEdNUF9MSUJTQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHUkVQID0gQEdSRVBACitHU0xfTElCUyA9IEBHU0xfTElCU0AKK0dTVF9BR0UgPSBAR1NUX0FHRUAKK0dTVF9BTExfQ0ZMQUdTID0gQEdTVF9BTExfQ0ZMQUdTQAorR1NUX0FMTF9DWFhGTEFHUyA9IEBHU1RfQUxMX0NYWEZMQUdTQAorR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKK0dTVF9BTExfTElCUyA9IEBHU1RfQUxMX0xJQlNACitHU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKK0dTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9ERUZJTkVACitHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkVACitHU1RfRElTQUJMRV9ORVRfREVGSU5FID0gQEdTVF9ESVNBQkxFX05FVF9ERUZJTkVACitHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAorR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKK0dTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKK0dTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACitHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfVFJBQ0VfREVGSU5FQAorR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAorR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAorR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTU19ERUZJTkUgPSBAR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTU19ERUZJTkVACitHU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKK0dTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAorR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKK0dTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAorR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACitHU1RfTUFKT1JNSU5PUiA9IEBHU1RfTUFKT1JNSU5PUkAKK0dTVF9PQkpfQ0ZMQUdTID0gQEdTVF9PQkpfQ0ZMQUdTQAorR1NUX09CSl9DWFhGTEFHUyA9IEBHU1RfT0JKX0NYWEZMQUdTQAorR1NUX09CSl9MSUJTID0gQEdTVF9PQkpfTElCU0AKK0dTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAorR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAorR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAorR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKK0dTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKK0dTVF9QS0dfREVQUyA9IEBHU1RfUEtHX0RFUFNACitHU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAorR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAorR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1BPSU5URVJfRk9STUFUX0RFRklORUAKK0dTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORSA9IEBHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkVACitHU1RfUkVHSVNUUllfRE9DX1RZUEVTID0gQEdTVF9SRUdJU1RSWV9ET0NfVFlQRVNACitHU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAorR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FID0gQEdTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OX0RFRklORUAKK0dUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACitIQVZFX0RPQ0JPT0sySFRNTCA9IEBIQVZFX0RPQ0JPT0sySFRNTEAKK0hBVkVfRE9DQk9PSzJQUyA9IEBIQVZFX0RPQ0JPT0syUFNACitIQVZFX0RWSVBTID0gQEhBVkVfRFZJUFNACitIQVZFX0VQU1RPUERGID0gQEhBVkVfRVBTVE9QREZACitIQVZFX0ZJRzJERVYgPSBASEFWRV9GSUcyREVWQAorSEFWRV9HTVAgPSBASEFWRV9HTVBACitIQVZFX0dTTCA9IEBIQVZFX0dTTEAKK0hBVkVfSkFERVRFWCA9IEBIQVZFX0pBREVURVhACitIQVZFX1BOR1RPUE5NID0gQEhBVkVfUE5HVE9QTk1ACitIQVZFX1BOTVRPUFMgPSBASEFWRV9QTk1UT1BTQAorSEFWRV9QUzJQREYgPSBASEFWRV9QUzJQREZACitIQVZFX1hNTExJTlQgPSBASEFWRV9YTUxMSU5UQAorSE9TVF9DUFUgPSBASE9TVF9DUFVACitIVE1MX0RJUiA9IEBIVE1MX0RJUkAKK0lORVRfQVRPTl9MSUJTID0gQElORVRfQVRPTl9MSUJTQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAorSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAorSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAorSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACitJTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAorSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAorSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkRJUiA9IEBMSUJESVJACitMSUJJQ09OViA9IEBMSUJJQ09OVkAKK0xJQklOVEwgPSBATElCSU5UTEAKK0xJQk0gPSBATElCTUAKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xPQ0FMRURJUiA9IEBMT0NBTEVESVJACitMVExJQklDT05WID0gQExUTElCSUNPTlZACitMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BSU5UID0gQE1BSU5UQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAorUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKK1BBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACitQQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKK1BBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMX1BBVEggPSBAUEVSTF9QQVRIQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUExVR0lORElSID0gQFBMVUdJTkRJUkAKK1BPU1VCID0gQFBPU1VCQAorUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACitQWVRIT04gPSBAUFlUSE9OQAorUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKK1BZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACitQWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACitQWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKK1ZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKK1ZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1dBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAorV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAorWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKK1hTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK2x0X0VDSE8gPSBAbHRfRUNIT0AKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKK3BrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACitwbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKK3B5dGhvbmRpciA9IEBweXRob25kaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK0VYVFJBX0RJU1QgPSBcCisJUkVBRE1FIFwKKwlhcy1hYy1leHBhbmQubTQgXAorCWFzLWF1dG8tYWx0Lm00IFwKKwlhcy1jb21waWxlci1mbGFnLm00IFwKKwlhcy1jb21waWxlci5tNCBcCisJYXMtZG9jYm9vay5tNCBcCisJYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCisJYXMtbGlidG9vbC5tNCBcCisJYXMtbGlidG9vbC10YWdzLm00IFwKKwlhcy1vYmpjLm00IFwKKwlhcy1weXRob24ubTQgXAorCWFzLXNjcnViLWluY2x1ZGUubTQgXAorCWFzLXZlcnNpb24ubTQgXAorCWF4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCisJZ2xpYi1nZXR0ZXh0Lm00IFwKKwlnc3QtYXJjaC5tNCBcCisJZ3N0LWFyZ3MubTQgXAorCWdzdC1jaGVjay5tNCBcCisJZ3N0LWRlYnVnaW5mby5tNCBcCisJZ3N0LWRlZmF1bHQubTQgXAorCWdzdC1kb2MubTQgXAorCWdzdC1kb3doaWxlLm00IFwKKwlnc3QtZXJyb3IubTQgXAorCWdzdC1mZWF0dXJlLm00IFwKKwlnc3QtZnVuY3Rpb24ubTQgXAorCWdzdC1nZXR0ZXh0Lm00IFwKKwlnc3QtZ2xpYjIubTQgXAorCWdzdC1saWJ4bWwyLm00IFwKKwlnc3QtcGFyc2VyLm00IFwKKwlnc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKKwlnc3QtcGxhdGZvcm0ubTQgXAorCWdzdC1wbHVnaW5kaXIubTQgXAorCWdzdC1wbHVnaW4tZG9jcy5tNCBcCisJZ3N0LXZhbGdyaW5kLm00IFwKKwlnc3QteDExLm00IFwKKwlnc3QubTQgXAorCWd0ay1kb2MubTQgXAorCWludHJvc3BlY3Rpb24ubTQgXAorCXBrZy5tNCBcCisJY2hlY2subTQgXAorCW9yYy5tNAorCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBjb21tb24vbTQvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbnUgY29tbW9uL200L01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicwordGFnczogVEFHUworVEFHUzoKKworY3RhZ3M6IENUQUdTCitDVEFHUzoKKworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RkaXIgZHZpIFwKKwlkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gXAorCWluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBcCisJaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBcCisJaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgXAorCWluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvY29tbW9uL200L1JFQURNRSBiL2NvbW1vbi9tNC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY3YTM0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9tNC9SRUFETUUKQEAgLTAsMCArMSwzIEBACitBbGwgYWNsb2NhbCAubTQgZmlsZXMgd2UgbmVlZCBhcmUgcHV0IGhlcmUgYW5kIGNhdCdkIHRvIGFjaW5jbHVkZS5tNCBpbgordGhlIHNvdXJjZSByb290LiAgT2ZmaWNpYWwgb25lcyAodGFrZW4gZnJvbSB0aGUgcmVsZXZhbnQgZGV2ZWwgcGFja2FnZXMpCithcmUgbmFtZWQgYXMtaXMsIHVub2ZmaWNpYWwgb25lcyAob3IgY2hhbmdlZCBvbmVzKSBnZXQgYSBnc3QtcHJlZml4LgpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBiL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZjOWUzMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQKQEAgLTAsMCArMSw0MyBAQAorZG5sIGFzLWFjLWV4cGFuZC5tNCAwLjIuMAorZG5sIGF1dG9zdGFycyBtNCBtYWNybyBmb3IgZXhwYW5kaW5nIGRpcmVjdG9yaWVzIHVzaW5nIGNvbmZpZ3VyZSdzIHByZWZpeAorZG5sIHRob21hc0BhcGVzdGFhcnQub3JnCisKK2RubCBBU19BQ19FWFBBTkQoVkFSLCBDT05GSUdVUkVfVkFSKQorZG5sIGV4YW1wbGUKK2RubCBBU19BQ19FWFBBTkQoU1lTQ09ORkRJUiwgJHN5c2NvbmZkaXIpCitkbmwgd2lsbCBzZXQgU1lTQ09ORkRJUiB0byAvdXNyL2xvY2FsL2V0YyBpZiBwcmVmaXg9L3Vzci9sb2NhbAorCitBQ19ERUZVTihbQVNfQUNfRVhQQU5EXSwKK1sKKyAgRVhQX1ZBUj1bJDFdCisgIEZST01fVkFSPVskMl0KKworICBkbmwgZmlyc3QgZXhwYW5kIHByZWZpeCBhbmQgZXhlY19wcmVmaXggaWYgbmVjZXNzYXJ5CisgIHByZWZpeF9zYXZlPSRwcmVmaXgKKyAgZXhlY19wcmVmaXhfc2F2ZT0kZXhlY19wcmVmaXgKKworICBkbmwgaWYgbm8gcHJlZml4IGdpdmVuLCB0aGVuIHVzZSAvdXNyL2xvY2FsLCB0aGUgZGVmYXVsdCBwcmVmaXgKKyAgaWYgdGVzdCAieCRwcmVmaXgiID0gInhOT05FIjsgdGhlbgorICAgIHByZWZpeD0iJGFjX2RlZmF1bHRfcHJlZml4IgorICBmaQorICBkbmwgaWYgbm8gZXhlY19wcmVmaXggZ2l2ZW4sIHRoZW4gdXNlIHByZWZpeAorICBpZiB0ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9ICJ4Tk9ORSI7IHRoZW4KKyAgICBleGVjX3ByZWZpeD0kcHJlZml4CisgIGZpCisKKyAgZnVsbF92YXI9IiRGUk9NX1ZBUiIKKyAgZG5sIGxvb3AgdW50aWwgaXQgZG9lc24ndCBjaGFuZ2UgYW55bW9yZQorICB3aGlsZSB0cnVlOyBkbworICAgIG5ld19mdWxsX3Zhcj0iYGV2YWwgZWNobyAkZnVsbF92YXJgIgorICAgIGlmIHRlc3QgIngkbmV3X2Z1bGxfdmFyIiA9ICJ4JGZ1bGxfdmFyIjsgdGhlbiBicmVhazsgZmkKKyAgICBmdWxsX3Zhcj0kbmV3X2Z1bGxfdmFyCisgIGRvbmUKKworICBkbmwgY2xlYW4gdXAKKyAgZnVsbF92YXI9JG5ld19mdWxsX3ZhcgorICBBQ19TVUJTVChbJDFdLCAiJGZ1bGxfdmFyIikKKworICBkbmwgcmVzdG9yZSBwcmVmaXggYW5kIGV4ZWNfcHJlZml4CisgIHByZWZpeD0kcHJlZml4X3NhdmUKKyAgZXhlY19wcmVmaXg9JGV4ZWNfcHJlZml4X3NhdmUKK10pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgYi9jb21tb24vbTQvYXMtYXV0by1hbHQubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y3OTIwZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNApAQCAtMCwwICsxLDUwIEBACitkbmwgYXMtYXV0by1hbHQubTQgMC4wLjIKK2RubCBhdXRvc3RhcnMgbTQgbWFjcm8gZm9yIHN1cHBseWluZyBhbHRlcm5hdGUgYXV0b3Rvb2xzIHZlcnNpb25zIHRvIGNvbmZpZ3VyZQorZG5sIHRob21hc0BhcGVzdGFhcnQub3JnCitkbmwKK2RubCBBU19BVVRPVE9PTFNfQUxURVJOQVRFKCkKK2RubAorZG5sIHN1cHBsaWVzIC0td2l0aCBhcmd1bWVudHMgZm9yIGF1dG9jb25mLCBhdXRvaGVhZGVyLCBhdXRvbWFrZSwgYWNsb2NhbAorCitBQ19ERUZVTihbQVNfQVVUT1RPT0xTX0FMVEVSTkFURV0sCitbCisgIGRubCBhbGxvdyBmb3IgZGlmZmVyZW50IGF1dG9jb25mIHZlcnNpb24KKyAgQUNfQVJHX1dJVEgoYXV0b2NvbmYsCisgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1hdXRvY29uZl0sCisgICAgICAgICAgICAgICAgICAgW3VzZSBhIGRpZmZlcmVudCBhdXRvY29uZiBmb3IgcmVnZW5lcmF0aW9uIG9mIE1ha2VmaWxlc10pLAorICAgIFsKKyAgICAgIHVuc2V0IEFVVE9DT05GCisgICAgICBBTV9NSVNTSU5HX1BST0coQVVUT0NPTkYsICR7d2l0aHZhbH0pCisgICAgICBBQ19NU0dfTk9USUNFKFtVc2luZyAkQVVUT0NPTkYgYXMgYXV0b2NvbmZdKQorICAgIF0pCisKKyAgZG5sIGFsbG93IGZvciBkaWZmZXJlbnQgYXV0b2hlYWRlciB2ZXJzaW9uCisgIEFDX0FSR19XSVRIKGF1dG9oZWFkZXIsCisgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1hdXRvaGVhZGVyXSwKKyAgICAgICAgICAgICAgICAgICBbdXNlIGEgZGlmZmVyZW50IGF1dG9oZWFkZXIgZm9yIHJlZ2VuZXJhdGlvbiBvZiBNYWtlZmlsZXNdKSwKKyAgICBbCisgICAgICB1bnNldCBBVVRPSEVBREVSCisgICAgICBBTV9NSVNTSU5HX1BST0coQVVUT0hFQURFUiwgJHt3aXRodmFsfSkKKyAgICAgIEFDX01TR19OT1RJQ0UoW1VzaW5nICRBVVRPSEVBREVSIGFzIGF1dG9oZWFkZXJdKQorICAgIF0pCisKKyAgZG5sIGFsbG93IGZvciBkaWZmZXJlbnQgYXV0b21ha2UgdmVyc2lvbgorICBBQ19BUkdfV0lUSChhdXRvbWFrZSwKKyAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWF1dG9tYWtlXSwKKyAgICAgICAgICAgICAgICAgICBbdXNlIGEgZGlmZmVyZW50IGF1dG9tYWtlIGZvciByZWdlbmVyYXRpb24gb2YgTWFrZWZpbGVzXSksCisgICAgWworICAgICAgdW5zZXQgQVVUT01BS0UKKyAgICAgIEFNX01JU1NJTkdfUFJPRyhBVVRPTUFLRSwgJHt3aXRodmFsfSkKKyAgICAgIEFDX01TR19OT1RJQ0UoW1VzaW5nICRBVVRPTUFLRSBhcyBhdXRvbWFrZV0pCisgICAgXSkKKworICBkbmwgYWxsb3cgZm9yIGRpZmZlcmVudCBhY2xvY2FsIHZlcnNpb24KKyAgQUNfQVJHX1dJVEgoYWNsb2NhbCwKKyAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWFjbG9jYWxdLAorICAgICAgICAgICAgICAgICAgIFt1c2UgYSBkaWZmZXJlbnQgYWNsb2NhbCBmb3IgcmVnZW5lcmF0aW9uIG9mIE1ha2VmaWxlc10pLAorICAgIFsKKyAgICAgIHVuc2V0IEFDTE9DQUwKKyAgICAgIEFNX01JU1NJTkdfUFJPRyhBQ0xPQ0FMLCAke3dpdGh2YWx9KQorICAgICAgQUNfTVNHX05PVElDRShbVXNpbmcgJEFDTE9DQUwgYXMgYWNsb2NhbF0pCisgICAgXSkKK10pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBiL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MmE0YzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNApAQCAtMCwwICsxLDY0IEBACitkbmwgYXMtY29tcGlsZXItZmxhZy5tNCAwLjEuMAorCitkbmwgYXV0b3N0YXJzIG00IG1hY3JvIGZvciBkZXRlY3Rpb24gb2YgY29tcGlsZXIgZmxhZ3MKKworZG5sIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorZG5sIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+CisKK2RubCBBU19DT01QSUxFUl9GTEFHKENGTEFHUywgQUNUSU9OLUlGLUFDQ0VQVEVELCBbQUNUSU9OLUlGLU5PVC1BQ0NFUFRFRF0pCitkbmwgVHJpZXMgdG8gY29tcGlsZSB3aXRoIHRoZSBnaXZlbiBDRkxBR1MuCitkbmwgUnVucyBBQ1RJT04tSUYtQUNDRVBURUQgaWYgdGhlIGNvbXBpbGVyIGNhbiBjb21waWxlIHdpdGggdGhlIGZsYWdzLAorZG5sIGFuZCBBQ1RJT04tSUYtTk9ULUFDQ0VQVEVEIG90aGVyd2lzZS4KKworQUNfREVGVU4oW0FTX0NPTVBJTEVSX0ZMQUddLAorWworICBBQ19NU0dfQ0hFQ0tJTkcoW3RvIHNlZSBpZiBjb21waWxlciB1bmRlcnN0YW5kcyAkMV0pCisKKyAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgIENGTEFHUz0iJENGTEFHUyAkMSIKKworICBBQ19UUllfQ09NUElMRShbIF0sIFtdLCBbZmxhZ19vaz15ZXNdLCBbZmxhZ19vaz1ub10pCisgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorCisgIGlmIHRlc3QgIlgkZmxhZ19vayIgPSBYeWVzIDsgdGhlbgorICAgICQyCisgICAgdHJ1ZQorICBlbHNlCisgICAgJDMKKyAgICB0cnVlCisgIGZpCisgIEFDX01TR19SRVNVTFQoWyRmbGFnX29rXSkKK10pCisKK2RubCBBU19DWFhfQ09NUElMRVJfRkxBRyhDUFBGTEFHUywgQUNUSU9OLUlGLUFDQ0VQVEVELCBbQUNUSU9OLUlGLU5PVC1BQ0NFUFRFRF0pCitkbmwgVHJpZXMgdG8gY29tcGlsZSB3aXRoIHRoZSBnaXZlbiBDUFBGTEFHUy4KK2RubCBSdW5zIEFDVElPTi1JRi1BQ0NFUFRFRCBpZiB0aGUgY29tcGlsZXIgY2FuIGNvbXBpbGUgd2l0aCB0aGUgZmxhZ3MsCitkbmwgYW5kIEFDVElPTi1JRi1OT1QtQUNDRVBURUQgb3RoZXJ3aXNlLgorCitBQ19ERUZVTihbQVNfQ1hYX0NPTVBJTEVSX0ZMQUddLAorWworICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NYWF0pCisKKyAgQUNfTVNHX0NIRUNLSU5HKFt0byBzZWUgaWYgYysrIGNvbXBpbGVyIHVuZGVyc3RhbmRzICQxXSkKKworICBzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJDEiCisKKyAgQUNfTEFOR19QVVNIKEMrKykKKworICBBQ19UUllfQ09NUElMRShbIF0sIFtdLCBbZmxhZ19vaz15ZXNdLCBbZmxhZ19vaz1ub10pCisgIENQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyIKKworICBpZiB0ZXN0ICJYJGZsYWdfb2siID0gWHllcyA7IHRoZW4KKyAgICAkMgorICAgIHRydWUKKyAgZWxzZQorICAgICQzCisgICAgdHJ1ZQorICBmaQorCisgIEFDX0xBTkdfUE9QKEMrKykKKworICBBQ19NU0dfUkVTVUxUKFskZmxhZ19va10pCitdKQorCmRpZmYgLS1naXQgYS9jb21tb24vbTQvYXMtY29tcGlsZXIubTQgYi9jb21tb24vbTQvYXMtY29tcGlsZXIubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA5YTA2MAotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9tNC9hcy1jb21waWxlci5tNApAQCAtMCwwICsxLDQ0IEBACitkbmwgYXMtY29tcGlsZXIubTQgMC4xLjAKKworZG5sIGF1dG9zdGFycyBtNCBtYWNybyBmb3IgZGV0ZWN0aW9uIG9mIGNvbXBpbGVyIGZsYXZvcgorCitkbmwgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCitkbmwgJElkOiBhcy1jb21waWxlci5tNCx2IDEuNCAyMDA0LzA2LzAxIDA5OjQ0OjE5IHRob21hc3ZzIEV4cCAkCisKK2RubCBBU19DT01QSUxFUihDT01QSUxFUikKK2RubCB3aWxsIHNldCB2YXJpYWJsZSBDT01QSUxFUiB0bworZG5sIC0gZ2NjCitkbmwgLSBmb3J0ZQorZG5sIC0gKGVtcHR5KSBpZiBubyBndWVzcyBjb3VsZCBiZSBtYWRlCisKK0FDX0RFRlVOKFtBU19DT01QSUxFUl0sCitbCisgIGFzX2NvbXBpbGVyPQorICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGNvbXBpbGVyIGZsYXZvdXIpCisKKyAgZG5sIGlzIGl0IGdjYyA/CisgIGlmIHRlc3QgIngkR0NDIiA9ICJ4eWVzIjsgdGhlbgorICAgIGFzX2NvbXBpbGVyPSJnY2MiCisgIGZpCisKKyAgZG5sIGlzIGl0IGZvcnRlID8KKyAgQUNfVFJZX1JVTihbCitpbnQgbWFpbgorKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisjaWZkZWYgX19zdW4KKyAgcmV0dXJuIDA7CisjZWxzZQorICByZXR1cm4gMTsKKyNlbmRpZgorfQorICBdLCBhc19jb21waWxlcj0iZm9ydGUiLCAsKQorCisgIGlmIHRlc3QgIngkYXNfY29tcGlsZXIiID0gIngiOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChbdW5rbm93biAhXSkKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoJGFzX2NvbXBpbGVyKQorICBmaQorICBbJDFdPSRhc19jb21waWxlcgorXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IGIvY29tbW9uL200L2FzLWRvY2Jvb2subTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGExYjMyYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00CkBAIC0wLDAgKzEsNjYgQEAKK2RubCBBU19ET0NCT09LKFssIEFDVElPTi1JRi1GT1VORCBbLCBBQ1RJT04tSUYtTk9ULUZPVU5EXV0pCitkbmwgY2hlY2tzIGlmIHhzbHRwcm9jIGNhbiBidWlsZCBkb2Nib29rIGRvY3VtZW50YXRpb24KK2RubCAod2hpY2ggaXMgcG9zc2libGUgaWYgdGhlIGNhdGFsb2cgaXMgc2V0IHVwIHByb3Blcmx5CitkbmwgSSBhbHNvIHRyaWVkIGNoZWNraW5nIGZvciBhIHNwZWNpZmljIHZlcnNpb24gYW5kIHR5cGUgb2YgZG9jYm9vaworZG5sIGJ1dCB4c2x0cHJvYyBzZWVtZWQgdG8gaGFwcGlseSBydW4gYW55d2F5LCBzbyB3ZSBjYW4ndCBjaGVjayBmb3IgdGhhdAorZG5sIGFuZCB2ZXJzaW9uCitkbmwgdGhpcyBtYWNybyB0YWtlcyBpbnNwaXJhdGlvbiBmcm9tCitkbmwgaHR0cDovL3d3dy5tb3ZlbWVudC51a2xpbnV4Lm5ldC9kb2NzL2RvY2Jvb2stYXV0b3Rvb2xzL2NvbmZpZ3VyZS5odG1sCitBQ19ERUZVTihbQVNfRE9DQk9PS10sCitbCisgIFhTTFRQUk9DX0ZMQUdTPS0tbm9uZXQKKyAgRE9DQk9PS19ST09UPQorICBUWVBFX0xDPXhtbAorICBUWVBFX1VDPVhNTAorICBET0NCT09LX1ZFUlNJT049NC4xLjIKKworICBpZiB0ZXN0ICEgLWYgL2V0Yy94bWwvY2F0YWxvZzsgdGhlbgorICAgIGZvciBpIGluIC91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3N0eWxlc2hlZXQveHNsL253YWxzaCAvdXNyL3NoYXJlL3NnbWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMvIC91c3IvbG9jYWwvc2hhcmUveHNsL2RvY2Jvb2sgOworICAgIGRvCisgICAgICBpZiB0ZXN0IC1kICIkaSI7IHRoZW4KKyAgICAgICAgRE9DQk9PS19ST09UPSRpCisgICAgICBmaQorICAgIGRvbmUKKyAgZWxzZQorICAgIFhNTF9DQVRBTE9HPS9ldGMveG1sL2NhdGFsb2cKKyAgICBDQVRfRU5UUllfU1RBUlQ9JzwhLS0nCisgICAgQ0FUX0VOVFJZX0VORD0nLS0+JworICBmaQorCisgIGRubCBXZSBuZWVkIHhzbHRwcm9jIHRvIHByb2Nlc3MgdGhlIHRlc3QKKyAgQUNfQ0hFQ0tfUFJPRyhYU0xUUFJPQyx4c2x0cHJvYyx4c2x0cHJvYywpCisgIFhTTFRQUk9DX1dPUktTPW5vCisgIGlmIHRlc3QgLW4gIiRYU0xUUFJPQyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgeHNsdHByb2MgZG9jYm9vayBwcm9jZXNzaW5nIHdvcmtzXSkKKworICAgIGlmIHRlc3QgLW4gIiRYTUxfQ0FUQUxPRyI7IHRoZW4KKyAgICAgIERCX0ZJTEU9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC9jdXJyZW50L3hodG1sL2RvY2Jvb2sueHNsIgorICAgIGVsc2UKKyAgICAgIERCX0ZJTEU9IiRET0NCT09LX1JPT1QveGh0bWwvZG9jYm9vay54c2wiCisgICAgZmkKKyAgICAkWFNMVFBST0MgJFhTTFRQUk9DX0ZMQUdTICREQl9GSUxFID4vZGV2L251bGwgMj4mMSA8PCBFTkQKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9J0lTTy04ODU5LTEnPz4KKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rICRUWVBFX1VDIFYkRE9DQk9PS19WRVJTSU9OLy9FTiIgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay8kVFlQRV9MQy8kRE9DQk9PS19WRVJTSU9OL2RvY2Jvb2t4LmR0ZCI+Cis8Ym9vayBpZD0idGVzdCI+Cis8L2Jvb2s+CitFTkQKKyAgICBpZiB0ZXN0ICIkPyIgPSAwOyB0aGVuCisgICAgICBYU0xUUFJPQ19XT1JLUz15ZXMKKyAgICBmaQorICAgIEFDX01TR19SRVNVTFQoJFhTTFRQUk9DX1dPUktTKQorICBmaQorCisgIGlmIHRlc3QgIngkWFNMVFBST0NfV09SS1MiID0gInh5ZXMiOyB0aGVuCisgICAgZG5sIGV4ZWN1dGUgQUNUSU9OLUlGLUZPVU5ECisgICAgaWZlbHNlKFskMV0sICwgOiwgWyQxXSkKKyAgZWxzZQorICAgIGRubCBleGVjdXRlIEFDVElPTi1JRi1OT1QtRk9VTkQKKyAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQorICBmaQorCisgIEFDX1NVQlNUKFhNTF9DQVRBTE9HKQorICBBQ19TVUJTVChYU0xUUFJPQ19GTEFHUykKKyAgQUNfU1VCU1QoRE9DQk9PS19ST09UKQorICBBQ19TVUJTVChDQVRfRU5UUllfU1RBUlQpCisgIEFDX1NVQlNUKENBVF9FTlRSWV9FTkQpCitdKQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgYi9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjMyMTA0Ci0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQKQEAgLTAsMCArMSw1MiBAQAorZG5sIGFzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgMC4xLjAKKworZG5sIGF1dG9zdGFycyBtNCBtYWNybyBmb3IgZGV0ZWN0aW9uIG9mIGdjYyBpbmxpbmUgYXNzZW1ibHkKKworZG5sIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCitkbmwgJElkJAorCitkbmwgQVNfQ09NUElMRVJfRkxBRyhBQ1RJT04tSUYtQUNDRVBURUQsIFtBQ1RJT04tSUYtTk9ULUFDQ0VQVEVEXSkKK2RubCBUcmllcyB0byBjb21waWxlIHdpdGggdGhlIGdpdmVuIENGTEFHUy4KK2RubCBSdW5zIEFDVElPTi1JRi1BQ0NFUFRFRCBpZiB0aGUgY29tcGlsZXIgY2FuIGNvbXBpbGUgd2l0aCB0aGUgZmxhZ3MsCitkbmwgYW5kIEFDVElPTi1JRi1OT1QtQUNDRVBURUQgb3RoZXJ3aXNlLgorCitBQ19ERUZVTihbQVNfR0NDX0lOTElORV9BU1NFTUJMWV0sCitbCisgIEFDX01TR19DSEVDS0lORyhbaWYgY29tcGlsZXIgc3VwcG9ydHMgZ2NjLXN0eWxlIGlubGluZSBhc3NlbWJseV0pCisKKyAgQUNfVFJZX0NPTVBJTEUoW10sIFsKKyNpZmRlZiBfX0dOVUNfTUlOT1JfXworI2lmIChfX0dOVUNfXyAqIDEwMDAgKyBfX0dOVUNfTUlOT1JfXykgPCAzMDA0CisjZXJyb3IgR0NDIGJlZm9yZSAzLjQgaGFzIGNyaXRpY2FsIGJ1Z3MgY29tcGlsaW5nIGlubGluZSBhc3NlbWJseQorI2VuZGlmCisjZW5kaWYKK19fYXNtX18gKCIiOjopIF0sIFtmbGFnX29rPXllc10sIFtmbGFnX29rPW5vXSkKKworICBpZiB0ZXN0ICJYJGZsYWdfb2siID0gWHllcyA7IHRoZW4KKyAgICAkMQorICAgIHRydWUKKyAgZWxzZQorICAgICQyCisgICAgdHJ1ZQorICBmaQorICBBQ19NU0dfUkVTVUxUKFskZmxhZ19va10pCitdKQorCisKK0FDX0RFRlVOKFtBU19HQ0NfQVNNX1BPV0VSUENfRlBVXSwKK1sKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBjb21waWxlciBzdXBwb3J0cyBGUFUgaW5zdHJ1Y3Rpb25zIG9uIFBvd2VyUENdKQorCisgIEFDX1RSWV9DT01QSUxFKFtdLCBbX19hc21fXyAoImZhZGQgMCwwLDAiOjopIF0sIFtmbGFnX29rPXllc10sIFtmbGFnX29rPW5vXSkKKworICBpZiB0ZXN0ICJYJGZsYWdfb2siID0gWHllcyA7IHRoZW4KKyAgICAkMQorICAgIHRydWUKKyAgZWxzZQorICAgICQyCisgICAgdHJ1ZQorICBmaQorICBBQ19NU0dfUkVTVUxUKFskZmxhZ19va10pCitdKQorCmRpZmYgLS1naXQgYS9jb21tb24vbTQvYXMtbGlidG9vbC10YWdzLm00IGIvY29tbW9uL200L2FzLWxpYnRvb2wtdGFncy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmYwYWU0Ci0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uL200L2FzLWxpYnRvb2wtdGFncy5tNApAQCAtMCwwICsxLDgzIEBACitkbmwgYXMtbGlidG9vbC10YWdzLm00IDAuMS40CisKK2RubCBhdXRvc3RhcnMgbTQgbWFjcm8gZm9yIHNlbGVjdGluZyBsaWJ0b29sICJ0YWdzIiAobGFuZ3VhZ2VzKQorCitkbmwgQW5keSBXaW5nbyBkb2VzIG5vdCBjbGFpbSBjcmVkaXQgZm9yIHRoaXMgbWFjcm8KK2RubCBiYWNrcG9ydGVkIGZyb20gbGlidG9vbCAxLjYgYnkgUGFvbG8gQm9uemluaQorZG5sIHNlZSBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvbGlidG9vbC8yMDAzLTEyL21zZzAwMDA3Lmh0bWwKKworZG5sICRJZCQKKworZG5sIEFTX0xJQlRPT0xfVEFHUyhbdGFncy4uLl0pCisKK2RubCBleGFtcGxlCitkbmwgQVNfTElCVE9PTF9UQUdTKFtdKSBmb3Igb25seSBDIChubyBmb3J0cmFuLCBldGMpCisKK2RubCBXaGVuIEFDX0xJQlRPT0xfVEFHUyBpcyB1c2VkLCBJIHJlZGVmaW5lIF9MVF9BQ19UQUdDT05GSUcKK2RubCB0byBiZSBtb3JlIHNpbWlsYXIgdG8gdGhlIGxpYnRvb2wgMS42IGltcGxlbWVudGF0aW9uLCB3aGljaAorZG5sIHVzZXMgYW4gbTQgbG9vcCBhbmQgbTQgY2FzZSBpbnN0ZWFkIG9mIGEgc2hlbGwgbG9vcC4gIFRoaXMKK2RubCB3YXkgdGhlIENYWC9HQ0ovRjc3L1JDIHRlc3RzIGFyZSBub3QgYWx3YXlzIGV4cGFuZGVkLgorCitkbmwgQVNfTElCVE9PTF9UQUdTCitkbmwgLS0tLS0tLS0tLS0tLS0tCitkbmwgdGFncyB0byBlbmFibGUKK0FDX0RFRlVOKFtBU19MSUJUT09MX1RBR1NdLAorW200X2RlZmluZShbX0xUX1RBR1NdLFskMV0pCittNF9kZWZpbmUoW19MVF9BQ19UQUdDT05GSUddLCBbCisgICMgcmVkZWZpbmVkIExUIEFDIFRBR0NPTkZJRworICBpZiB0ZXN0IC1mICIkbHRtYWluIjsgdGhlbgorICAgIGlmIHRlc3QgISAtZiAiJHtvZmlsZX0iOyB0aGVuCisgICAgICBBQ19NU0dfV0FSTihbb3V0cHV0IGZpbGUgYCRvZmlsZScgZG9lcyBub3QgZXhpc3RdKQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC16ICIkTFRDQyI7IHRoZW4KKyAgICAgIGV2YWwgImAkU0hFTEwgJHtvZmlsZX0gLS1jb25maWcgfCBncmVwICdeTFRDQz0nYCIKKyAgICAgIGlmIHRlc3QgLXogIiRMVENDIjsgdGhlbgorICAgICAgICBBQ19NU0dfV0FSTihbb3V0cHV0IGZpbGUgYCRvZmlsZScgZG9lcyBub3QgbG9vayBsaWtlIGEgbGlidG9vbCBzY3JpcHRdKQorICAgICAgZWxzZQorICAgICAgICBBQ19NU0dfV0FSTihbdXNpbmcgYExUQ0M9JExUQ0MnLCBleHRyYWN0ZWQgZnJvbSBgJG9maWxlJ10pCisgICAgICBmaQorICAgIGZpCisKKyAgICBBQ19GT1JFQUNIKFtfTFRfVEFHXSwgX0xUX1RBR1MsCisgICAgICBlY2hvIFRIT01BUzogdGFnIF9MVF9UQUcKKyAgICAgIFttNF9jYXNlKF9MVF9UQUcsCisgICAgICBbQ1hYXSwgWworICAgIGlmIHRlc3QgLW4gIiRDWFgiICYmIHRlc3QgIlgkQ1hYIiAhPSAiWG5vIjsgdGhlbgorICAgICAgZWNobyAiVEhPTUFTOiBZQVkgQ1hYIgorICAgICAgQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUcKKyAgICAgIGF2YWlsYWJsZV90YWdzPSIkYXZhaWxhYmxlX3RhZ3MgX0xUX1RBRyIKKyAgICBmaV0sCisgICAgICBbRjc3XSwgWworICAgIGlmIHRlc3QgLW4gIiRGNzciICYmIHRlc3QgIlgkRjc3IiAhPSAiWG5vIjsgdGhlbgorICAgICAgQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUcKKyAgICAgIGF2YWlsYWJsZV90YWdzPSIkYXZhaWxhYmxlX3RhZ3MgX0xUX1RBRyIKKyAgICBmaV0sCisgICAgICBbR0NKXSwgWworICAgIGlmIHRlc3QgLW4gIiRHQ0oiICYmIHRlc3QgIlgkR0NKIiAhPSAiWG5vIjsgdGhlbgorICAgICAgQUNfTElCVE9PTF9MQU5HX0dDSl9DT05GSUcKKyAgICAgIGF2YWlsYWJsZV90YWdzPSIkYXZhaWxhYmxlX3RhZ3MgX0xUX1RBRyIKKyAgICBmaV0sCisgICAgICBbUkNdLCBbCisgICAgaWYgdGVzdCAtbiAiJFJDIiAmJiB0ZXN0ICJYJFJDIiAhPSAiWG5vIjsgdGhlbgorICAgICAgQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJRworICAgICAgYXZhaWxhYmxlX3RhZ3M9IiRhdmFpbGFibGVfdGFncyBfTFRfVEFHIgorICAgIGZpXSwKKyAgICAgIFttNF9lcnJwcmludG4obTRfbG9jYXRpb25bOiBlcnJvcjogaW52YWxpZCB0YWcgbmFtZTogXSJfTFRfVEFHIikKKyAgICAgIG00X2V4aXQoMSldKQorICAgIF0pCisgICAgZWNobyBUSE9NQVM6IGF2YWlsYWJsZSB0YWdzOiAkYXZhaWxhYmxlX3RhZ3MKKyAgZmkKKyAgIyBOb3cgc3Vic3RpdHV0ZSB0aGUgdXBkYXRlZCBsaXN0IG9mIGF2YWlsYWJsZSB0YWdzLgorICBpZiBldmFsICJzZWQgLWUgJ3MvXmF2YWlsYWJsZV90YWdzPS4qXCQvYXZhaWxhYmxlX3RhZ3M9XCIkYXZhaWxhYmxlX3RhZ3NcIi8nIFwiJG9maWxlXCIgPiBcIiR7b2ZpbGV9VFwiIjsgdGhlbgorICAgIG12ICIke29maWxlfVQiICIkb2ZpbGUiCisgICAgY2htb2QgK3ggIiRvZmlsZSIKKyAgICBBQ19NU0dfTk9USUNFKFt1cGRhdGVkIGF2YWlsYWJsZSBsaWJ0b29sIHRhZ3Mgd2l0aCAkYXZhaWxhYmxlX3RhZ3MuXSkKKyAgZWxzZQorICAgIHJtIC1mICIke29maWxlfVQiCisgICAgQUNfTVNHX0VSUk9SKFt1bmFibGUgdG8gdXBkYXRlIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ2dlZCBjb25maWd1cmF0aW9ucy5dKQorCisgIGZpCisKK10pZG5sIF9MVF9BQ19UQUdfQ09ORklHCitdKQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2FzLWxpYnRvb2wubTQgYi9jb21tb24vbTQvYXMtbGlidG9vbC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWRlOWQxCi0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uL200L2FzLWxpYnRvb2wubTQKQEAgLTAsMCArMSw0NSBAQAorZG5sIGFzLWxpYnRvb2wubTQgMC4xLjQKKworZG5sIGF1dG9zdGFycyBtNCBtYWNybyBmb3IgbGlidG9vbCB2ZXJzaW9uaW5nCisKK2RubCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisKK2RubCAkSWQ6IGFzLWxpYnRvb2wubTQsdiAxLjEwIDIwMDUvMTAvMTUgMTM6NDQ6MjMgdGhvbWFzdnMgRXhwICQKKworZG5sIEFTX0xJQlRPT0woUFJFRklYLCBDVVJSRU5ULCBSRVZJU0lPTiwgQUdFLCBbUkVMRUFTRV0pCisKK2RubCBleGFtcGxlCitkbmwgQVNfTElCVE9PTChHU1QsIDIsIDAsIDApCisKK2RubCB0aGlzIG1hY3JvCitkbmwgLSBkZWZpbmVzIFskUFJFRklYXV9DVVJSRU5ULCBSRVZJU0lPTiBhbmQgQUdFCitkbmwgLSBkZWZpbmVzIFskUFJFRklYXV9MSUJWRVJTSU9OCitkbmwgLSBkZWZpbmVzIFskUFJFRklYXV9MVF9MREZMQUdTIHRvIHNldCB2ZXJzaW9uaW5nCitkbmwgLSBBQ19TVUJTVCdzIHRoZW0gYWxsCisKK2RubCBpZiBSRUxFQVNFIGlzIGdpdmVuLCB0aGVuIGFkZCBhIC1yZWxlYXNlIG9wdGlvbiB0byB0aGUgTERGTEFHUworZG5sIHdpdGggdGhlIGdpdmVuIHJlbGVhc2UgdmVyc2lvbgorZG5sIHRoZW4gdXNlIFskUFJFRklYXV9MVF9MREZMQUdTIGluIHRoZSByZWxldmFudCBNYWtlZmlsZS5hbSdzCisKK2RubCBjYWxsIEFNX1BST0dfTElCVE9PTCBhZnRlciB0aGlzIGNhbGwKKworQUNfREVGVU4oW0FTX0xJQlRPT0xdLAorWworICBbJDFdX0NVUlJFTlQ9WyQyXQorICBbJDFdX1JFVklTSU9OPVskM10KKyAgWyQxXV9BR0U9WyQ0XQorICBbJDFdX0xJQlZFUlNJT049WyQyXTpbJDNdOlskNF0KKyAgQUNfU1VCU1QoWyQxXV9DVVJSRU5UKQorICBBQ19TVUJTVChbJDFdX1JFVklTSU9OKQorICBBQ19TVUJTVChbJDFdX0FHRSkKKyAgQUNfU1VCU1QoWyQxXV9MSUJWRVJTSU9OKQorCisgIFskMV1fTFRfTERGTEFHUz0iJFskMV1fTFRfTERGTEFHUyAtdmVyc2lvbi1pbmZvICRbJDFdX0xJQlZFUlNJT04iCisgIGlmIHRlc3QgISAteiAiWyQ1XSIKKyAgdGhlbgorICAgIFskMV1fTFRfTERGTEFHUz0iJFskMV1fTFRfTERGTEFHUyAtcmVsZWFzZSBbJDVdIgorICBmaQorICBBQ19TVUJTVChbJDFdX0xUX0xERkxBR1MpCisKKyAgQUNfTElCVE9PTF9ETE9QRU4KK10pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvYXMtb2JqYy5tNCBiL2NvbW1vbi9tNC9hcy1vYmpjLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNzA2NmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vbTQvYXMtb2JqYy5tNApAQCAtMCwwICsxLDU2IEBACisKKworIyBBQ19QUk9HX09CSkMoW0xJU1QtT0YtQ09NUElMRVJTXSkKKyMKK0FDX0RFRlVOKFtBU19QUk9HX09CSkNdLAorWworQUNfQ0hFQ0tfVE9PTFMoT0JKQywKKwlbbTRfZGVmYXVsdChbJDFdLCBbb2JqY2Mgb2JqYyBnY2MgY2MgQ0NdKV0sCisJbm9uZSkKK0FDX1NVQlNUKE9CSkMpCitPQkpDX0xERkxBR1M9Ii1sb2JqYyIKK0FDX1NVQlNUKE9CSkNfTERGTEFHUykKK2lmIHRlc3QgIngkT0JKQyIgIT0geG5vbmUgOyB0aGVuCisgIF9BTV9ERVBFTkRFTkNJRVMoT0JKQykKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBPYmplY3RpdmUgQyBjb21waWxlciB3b3Jrc10pCisgIGNhdCA+PmNvbmZ0ZXN0Lm0gPDxFT0YKKyNpbmNsdWRlIDxvYmpjL09iamVjdC5oPgorQGludGVyZmFjZSBNb286T2JqZWN0Cit7Cit9CistIG1vbzsKK2ludCBtYWluKCk7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBNb28KKy0gbW9vCit7CisgIGV4aXQoMCk7Cit9CisKK2ludCBtYWluKCkKK3sKKyAgaWQgbW9vOworICBtb28gPSBbW01vbyBuZXddXTsKKyAgW1ttb28gbW9vXV07CisgIHJldHVybiAxOworfQorQGVuZAorRU9GCisgICR7T0JKQ30gY29uZnRlc3QubSAke09CSkNfTERGTEFHU30gPiY1IDI+JjUKKyAgaWYgdGVzdCAtZiBhLm91dCAtbyAtZiBhLmV4ZSA7IHRoZW4KKyAgICByZXN1bHQ9eWVzCisgIGVsc2UKKyAgICByZXN1bHQ9bm8KKyAgICBlY2hvIGZhaWxlZCBwcm9ncmFtIGlzOiA+JjUKKyAgICBjYXQgY29uZnRlc3QubSA+JjUKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QubSBhLm91dCBhLmV4ZQorICBBQ19NU0dfUkVTVUxUKFskcmVzdWx0XSkKK2Vsc2UKKyAgX0FNX0RFUEVOREVOQ0lFUyhPQkpDKQorZmkKKworXSkKKworCmRpZmYgLS1naXQgYS9jb21tb24vbTQvYXMtcHl0aG9uLm00IGIvY29tbW9uL200L2FzLXB5dGhvbi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjliMTc1Ci0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uL200L2FzLXB5dGhvbi5tNApAQCAtMCwwICsxLDE1MiBAQAorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIyBQeXRob24gZmlsZSBoYW5kbGluZworIyMgRnJvbSBBbmRyZXcgRGFsa2UKKyMjIFVwZGF0ZWQgYnkgSmFtZXMgSGVuc3RyaWRnZQorIyMgVXBkYXRlZCBieSBBbmR5IFdpbmdvIHRvIGxvb3AgdGhyb3VnaCBwb3NzaWJsZSBweXRob25zCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBBU19QQVRIX1BZVEhPTihbTUlOSU1VTS1WRVJTSU9OXSkKKworIyBBZGRzIHN1cHBvcnQgZm9yIGRpc3RyaWJ1dGluZyBQeXRob24gbW9kdWxlcyBhbmQgcGFja2FnZXMuICBUbworIyBpbnN0YWxsIG1vZHVsZXMsIGNvcHkgdGhlbSB0byAkKHB5dGhvbmRpciksIHVzaW5nIHRoZSBweXRob25fUFlUSE9OCisjIGF1dG9tYWtlIHZhcmlhYmxlLiAgVG8gaW5zdGFsbCBhIHBhY2thZ2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZQorIyBhdXRvbWFrZSBwYWNrYWdlLCBpbnN0YWxsIHRvICQocGtncHl0aG9uZGlyKSwgb3IgdXNlIHRoZQorIyBwa2dweXRob25fUFlUSE9OIGF1dG9tYWtlIHZhcmlhYmxlLgorCisjIFRoZSB2YXJpYWJsZXMgJChweWV4ZWNkaXIpIGFuZCAkKHBrZ3B5ZXhlY2RpcikgYXJlIHByb3ZpZGVkIGFzCisjIGxvY2F0aW9ucyB0byBpbnN0YWxsIHB5dGhvbiBleHRlbnNpb24gbW9kdWxlcyAoc2hhcmVkIGxpYnJhcmllcykuCisjIEFub3RoZXIgbWFjcm8gaXMgcmVxdWlyZWQgdG8gZmluZCB0aGUgYXBwcm9wcmlhdGUgZmxhZ3MgdG8gY29tcGlsZQorIyBleHRlbnNpb24gbW9kdWxlcy4KKworIyBJZiB5b3VyIHBhY2thZ2UgaXMgY29uZmlndXJlZCB3aXRoIGEgZGlmZmVyZW50IHByZWZpeCB0byBweXRob24sCisjIHVzZXJzIHdpbGwgaGF2ZSB0byBhZGQgdGhlIGluc3RhbGwgZGlyZWN0b3J5IHRvIHRoZSBQWVRIT05QQVRICisjIGVudmlyb25tZW50IHZhcmlhYmxlLCBvciBjcmVhdGUgYSAucHRoIGZpbGUgKHNlZSB0aGUgcHl0aG9uCisjIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMpLgorCisjIElmIHRoZSBNSU5JTVVNLVZFUlNJT04gYXJndW1lbnQgaXMgcGFzc2VkLCBBU19QQVRIX1BZVEhPTiB3aWxsCisjIGNhdXNlIGFuIGVycm9yIGlmIHRoZSB2ZXJzaW9uIG9mIHB5dGhvbiBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbQorIyBkb2Vzbid0IG1lZXQgdGhlIHJlcXVpcmVtZW50LiAgTUlOSU1VTS1WRVJTSU9OIHNob3VsZCBjb25zaXN0IG9mCisjIG51bWJlcnMgYW5kIGRvdHMgb25seS4KKworIyBVcGRhdGVkIHRvIGxvb3Agb3ZlciBhbGwgcG9zc2libGUgcHl0aG9uIGJpbmFyaWVzIGJ5IEFuZHkgV2luZ28KKyMgPHdpbmdvQHBvYm94LmNvbT4KKyMgVXBkYXRlZCB0byBvbmx5IHdhcm4gYW5kIHVuc2V0IFBZVEhPTiBpZiBubyBnb29kIG9uZSBpcyBmb3VuZAorCitBQ19ERUZVTihbQVNfUEFUSF9QWVRIT05dLAorIFsKKyAgZG5sIEZpbmQgYSB2ZXJzaW9uIG9mIFB5dGhvbi4gIEkgY291bGQgY2hlY2sgZm9yIHB5dGhvbiB2ZXJzaW9ucyAxLjQKKyAgZG5sIG9yIGVhcmxpZXIsIGJ1dCB0aGUgZGVmYXVsdCBpbnN0YWxsYXRpb24gbG9jYXRpb25zIGNoYW5nZWQgZnJvbQorICBkbmwgJHByZWZpeC9saWIvc2l0ZS1weXRob24gaW4gMS40IHRvICRwcmVmaXgvbGliL3B5dGhvbjEuNS9zaXRlLXBhY2thZ2VzCisgIGRubCBpbiAxLjUsIGFuZCBJIGRvbid0IHdhbnQgdG8gbWFpbnRhaW4gdGhhdCBsb2dpYy4KKworICBkbmwgc2hvdWxkIHdlIGRvIHRoZSB2ZXJzaW9uIGNoZWNrPworICBQWVRIT05fQ0FORElEQVRFUz0icHl0aG9uIHB5dGhvbjIuMiBweXRob24yLjEgcHl0aG9uMi4wIHB5dGhvbjIgXAorICAgICAgICAgICAgICAgICAgICAgcHl0aG9uMS42IHB5dGhvbjEuNSIKKyAgaWZlbHNlKFskMV0sW10sCisgICAgICAgICBbQUNfUEFUSF9QUk9HKFBZVEhPTiwgJFBZVEhPTl9DQU5ESURBVEVTKV0sCisgICAgICAgICBbCisgICAgIEFDX01TR19OT1RJQ0UoTG9va2luZyBmb3IgUHl0aG9uIHZlcnNpb24gPj0gJDEpCisgICAgY2hhbmdlcXVvdGUoPDwsID4+KWRubAorICAgIHByb2c9IgoraW1wb3J0IHN5cywgc3RyaW5nCittaW52ZXIgPSAnJDEnCisjIHNwbGl0IHN0cmluZyBieSAnLicgYW5kIGNvbnZlcnQgdG8gbnVtZXJpYworbWludmVyX2luZm8gPSBtYXAoc3RyaW5nLmF0b2ksIHN0cmluZy5zcGxpdChtaW52ZXIsICcuJykpCisjIHdlIGNhbiBub3cgZG8gY29tcGFyaXNvbnMgb24gdGhlIHR3byBsaXN0czoKK2lmIHN5cy52ZXJzaW9uX2luZm8gPj0gdHVwbGUobWludmVyX2luZm8pOgorCXN5cy5leGl0KDApCitlbHNlOgorCXN5cy5leGl0KDEpIgorICAgIGNoYW5nZXF1b3RlKFssIF0pZG5sCisKKyAgICBweXRob25fZ29vZD1mYWxzZQorICAgIGZvciBweXRob25fY2FuZGlkYXRlIGluICRQWVRIT05fQ0FORElEQVRFUzsgZG8KKyAgICAgIHVuc2V0IFBZVEhPTgorICAgICAgQUNfUEFUSF9QUk9HKFBZVEhPTiwgJHB5dGhvbl9jYW5kaWRhdGUpIDE+IC9kZXYvbnVsbCAyPiAvZGV2L251bGwKKworICAgICAgaWYgdGVzdCAieCRQWVRIT04iID0gIngiOyB0aGVuIGNvbnRpbnVlOyBmaQorCisgICAgICBpZiAkUFlUSE9OIC1jICIkcHJvZyIgMT4mQUNfRkRfQ0MgMj4mQUNfRkRfQ0M7IHRoZW4KKyAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFsiJFBZVEhPTiI6XSkKKwlBQ19NU0dfUkVTVUxUKFtva2F5XSkKKyAgICAgICAgcHl0aG9uX2dvb2Q9dHJ1ZQorICAgICAgICBicmVhazsKKyAgICAgIGVsc2UKKyAgICAgICAgZG5sIGNsZWFyIHRoZSBjYWNoZSB2YWwKKyAgICAgICAgdW5zZXQgYWNfY3ZfcGF0aF9QWVRIT04KKyAgICAgIGZpCisgICAgZG9uZQorICBdKQorCisgIGlmIHRlc3QgIiRweXRob25fZ29vZCIgIT0gInRydWUiOyB0aGVuCisgICAgQUNfTVNHX1dBUk4oW05vIHN1aXRhYmxlIHZlcnNpb24gb2YgcHl0aG9uIGZvdW5kXSkKKyAgICBQWVRIT049CisgIGVsc2UKKworICBBQ19NU0dfQ0hFQ0tJTkcoW2xvY2FsIFB5dGhvbiBjb25maWd1cmF0aW9uXSkKKworICBkbmwgUXVlcnkgUHl0aG9uIGZvciBpdHMgdmVyc2lvbiBudW1iZXIuICBHZXR0aW5nIFs6M10gc2VlbXMgdG8gYmUKKyAgZG5sIHRoZSBiZXN0IHdheSB0byBkbyB0aGlzOyBpdCdzIHdoYXQgInNpdGUucHkiIGRvZXMgaW4gdGhlIHN0YW5kYXJkCisgIGRubCBsaWJyYXJ5LiAgTmVlZCB0byBjaGFuZ2UgcXVvdGUgY2hhcmFjdGVyIGJlY2F1c2Ugb2YgWzozXQorCisgIEFDX1NVQlNUKFBZVEhPTl9WRVJTSU9OKQorICBjaGFuZ2VxdW90ZSg8PCwgPj4pZG5sCisgIFBZVEhPTl9WRVJTSU9OPWAkUFlUSE9OIC1jICJpbXBvcnQgc3lzOyBwcmludCBzeXMudmVyc2lvbls6M10iYAorICBjaGFuZ2VxdW90ZShbLCBdKWRubAorCisKKyAgZG5sIFVzZSB0aGUgdmFsdWVzIG9mICRwcmVmaXggYW5kICRleGVjX3ByZWZpeCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcKKyAgZG5sIHZhbHVlcyBvZiBQWVRIT05fUFJFRklYIGFuZCBQWVRIT05fRVhFQ19QUkVGSVguICBUaGVzZSBhcmUgbWFkZQorICBkbmwgZGlzdGluY3QgdmFyaWFibGVzIHNvIHRoZXkgY2FuIGJlIG92ZXJyaWRkZW4gaWYgbmVlZCBiZS4gIEhvd2V2ZXIsCisgIGRubCBnZW5lcmFsIGNvbnNlbnN1cyBpcyB0aGF0IHlvdSBzaG91bGRuJ3QgbmVlZCB0aGlzIGFiaWxpdHkuCisKKyAgQUNfU1VCU1QoUFlUSE9OX1BSRUZJWCkKKyAgUFlUSE9OX1BSRUZJWD0nJHtwcmVmaXh9JworCisgIEFDX1NVQlNUKFBZVEhPTl9FWEVDX1BSRUZJWCkKKyAgUFlUSE9OX0VYRUNfUFJFRklYPScke2V4ZWNfcHJlZml4fScKKworICBkbmwgQXQgdGltZXMgKGxpa2Ugd2hlbiBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzKSB5b3UgbWF5IHdhbnQKKyAgZG5sIHRvIGtub3cgd2hpY2ggT1MgcGxhdGZvcm0gUHl0aG9uIHRoaW5rcyB0aGlzIGlzLgorCisgIEFDX1NVQlNUKFBZVEhPTl9QTEFURk9STSkKKyAgUFlUSE9OX1BMQVRGT1JNPWAkUFlUSE9OIC1jICJpbXBvcnQgc3lzOyBwcmludCBzeXMucGxhdGZvcm0iYAorCisKKyAgZG5sIFNldCB1cCA0IGRpcmVjdG9yaWVzOgorCisgIGRubCBweXRob25kaXIgLS0gd2hlcmUgdG8gaW5zdGFsbCBweXRob24gc2NyaXB0cy4gIFRoaXMgaXMgdGhlCisgIGRubCAgIHNpdGUtcGFja2FnZXMgZGlyZWN0b3J5LCBub3QgdGhlIHB5dGhvbiBzdGFuZGFyZCBsaWJyYXJ5CisgIGRubCAgIGRpcmVjdG9yeSBsaWtlIGluIHByZXZpb3VzIGF1dG9tYWtlIGJldGFzLiAgVGhpcyBiZWhhdmlvdXIKKyAgZG5sICAgaXMgbW9yZSBjb25zaXN0ZW50IHdpdGggbGlzcGRpci5tNCBmb3IgZXhhbXBsZS4KKyAgZG5sCisgIGRubCBBbHNvLCBpZiB0aGUgcGFja2FnZSBwcmVmaXggaXNuJ3QgdGhlIHNhbWUgYXMgcHl0aG9uJ3MgcHJlZml4LAorICBkbmwgdGhlbiB0aGUgb2xkICQocHl0aG9uZGlyKSB3YXMgcHJldHR5IHVzZWxlc3MuCisKKyAgQUNfU1VCU1QocHl0aG9uZGlyKQorICBweXRob25kaXI9JFBZVEhPTl9QUkVGSVgiL2xpYi9weXRob24iJFBZVEhPTl9WRVJTSU9OL3NpdGUtcGFja2FnZXMKKworICBkbmwgcGtncHl0aG9uZGlyIC0tICRQQUNLQUdFIGRpcmVjdG9yeSB1bmRlciBweXRob25kaXIuICBXYXMKKyAgZG5sICAgUFlUSE9OX1NJVEVfUEFDS0FHRSBpbiBwcmV2aW91cyBiZXRhcywgYnV0IHRoaXMgbmFtaW5nIGlzCisgIGRubCAgIG1vcmUgY29uc2lzdGVudCB3aXRoIHRoZSByZXN0IG9mIGF1dG9tYWtlLgorICBkbmwgICBNYXliZSB0aGlzIHNob3VsZCBiZSBwdXQgaW4gcHl0aG9uLmFtPworCisgIEFDX1NVQlNUKHBrZ3B5dGhvbmRpcikKKyAgcGtncHl0aG9uZGlyPVwke3B5dGhvbmRpcn0vJFBBQ0tBR0UKKworICBkbmwgcHlleGVjZGlyIC0tIGRpcmVjdG9yeSBmb3IgaW5zdGFsbGluZyBweXRob24gZXh0ZW5zaW9uIG1vZHVsZXMKKyAgZG5sICAgKHNoYXJlZCBsaWJyYXJpZXMpICBXYXMgUFlUSE9OX1NJVEVfRVhFQyBpbiBwcmV2aW91cyBiZXRhcy4KKworICBBQ19TVUJTVChweWV4ZWNkaXIpCisgIHB5ZXhlY2Rpcj0kUFlUSE9OX0VYRUNfUFJFRklYIi9saWIvcHl0aG9uIiRQWVRIT05fVkVSU0lPTi9zaXRlLXBhY2thZ2VzCisKKyAgZG5sIHBrZ3B5ZXhlY2RpciAtLSAkKHB5ZXhlY2RpcikvJChQQUNLQUdFKQorICBkbmwgICBNYXliZSB0aGlzIHNob3VsZCBiZSBwdXQgaW4gcHl0aG9uLmFtPworCisgIEFDX1NVQlNUKHBrZ3B5ZXhlY2RpcikKKyAgcGtncHlleGVjZGlyPVwke3B5ZXhlY2Rpcn0vJFBBQ0tBR0UKKworICBBQ19NU0dfUkVTVUxUKFtsb29rcyBnb29kXSkKKworICBmaQorXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9hcy1zY3J1Yi1pbmNsdWRlLm00IGIvY29tbW9uL200L2FzLXNjcnViLWluY2x1ZGUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VkNDliMAotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9tNC9hcy1zY3J1Yi1pbmNsdWRlLm00CkBAIC0wLDAgKzEsMzYgQEAKK2RubCBhcy1zY3J1Yi1pbmNsdWRlLm00IDAuMC40CisKK2RubCBhdXRvc3RhcnMgbTQgbWFjcm8gZm9yIHNjcnViYmluZyBDRkxBR1Mgb2Ygc3lzdGVtIGluY2x1ZGUgZGlycworZG5sIGJlY2F1c2UgZ2NjIDMueCBjb21wbGFpbnMgYWJvdXQgaW5jbHVkaW5nIHN5c3RlbSBpbmNsdWRpbmcgZGlycworCitkbmwgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorCitkbmwgJElkOiBhcy1zY3J1Yi1pbmNsdWRlLm00LHYgMS43IDIwMDQvMDYvMTIgMDg6MzA6MjAgdGhvbWFzdnMgRXhwICQKKworZG5sIFRoaXMgbWFjcm8gdXNlcyBvdXRwdXQgb2YgY3BwIC12IGFuZCBleHBlY3RzIGl0IHRvIGNvbnRhaW4gdGV4dCB0aGF0CitkbmwgbG9va3MgYSBsaXR0bGUgYml0IGxpa2UgdGhpczoKK2RubCAjaW5jbHVkZSA8Li4uPiBzZWFyY2ggc3RhcnRzIGhlcmU6CitkbmwgIC91c3IvbG9jYWwvaW5jbHVkZQorZG5sICAvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzMuMi9pbmNsdWRlCitkbmwgIC91c3IvaW5jbHVkZQorZG5sIEVuZCBvZiBzZWFyY2ggbGlzdC4KKworZG5sIEFTX1NDUlVCX0lOQ0xVREUoVkFSKQorZG5sIGV4YW1wbGUKK2RubCBBU19TQ1JVQl9JTkNMVURFKENGTEFHUykKK2RubCB3aWxsIHJlbW92ZSBhbGwgc3lzdGVtIGluY2x1ZGUgZGlycyBmcm9tIHRoZSBnaXZlbiBDRkxBR1MKKworQUNfREVGVU4oW0FTX1NDUlVCX0lOQ0xVREVdLAorWworICBHSVZFTl9DRkxBR1M9JFskMV0KKyAgSU5DTFVERV9ESVJTPWBlY2hvIHwgY3BwIC12IDI+JjFgCisKKyAgZG5sIHJlbW92ZSBldmVyeXRoaW5nIGZyb20gdGhpcyBvdXRwdXQgYmV0d2VlbiB0aGUgInN0YXJ0cyBoZXJlIiBhbmQgIkVuZCBvZiIKKyAgZG5sIGxpbmUKKyAgSU5DTFVERV9ESVJTPWBlY2hvICRJTkNMVURFX0RJUlMgfCBzZWQgLWUgJ3MvLio8Li4uPiBzZWFyY2ggc3RhcnRzIGhlcmU6Ly8nIHwgc2VkIC1lICdzL0VuZCBvZiBzZWFyY2ggbGlzdC4qLy8nYAorICBmb3IgZGlyIGluICRJTkNMVURFX0RJUlM7IGRvCisgICAgZG5sIHVzZSAiIiBhcyB0aGUgc2VkIHNjcmlwdCBzbyAkZGlyIGdldHMgZXhwYW5kZWQKKyAgICBHSVZFTl9DRkxBR1M9YGVjaG8gJEdJVkVOX0NGTEFHUyB8IHNlZCAtZSAicyMtSSRkaXIgIyMiYAorICBkb25lCisgIFskMV09JEdJVkVOX0NGTEFHUworXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IGIvY29tbW9uL200L2FzLXZlcnNpb24ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJmZjc3NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00CkBAIC0wLDAgKzEsNzUgQEAKK2RubCBhcy12ZXJzaW9uLm00IDAuMi4wCisKK2RubCBhdXRvc3RhcnMgbTQgbWFjcm8gZm9yIHZlcnNpb25pbmcKKworZG5sIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKworZG5sICRJZDogYXMtdmVyc2lvbi5tNCx2IDEuMTUgMjAwNi8wNC8wMSAwOTo0MDoyNCB0aG9tYXN2cyBFeHAgJAorCitkbmwgQVNfVkVSU0lPTgorCitkbmwgZXhhbXBsZQorZG5sIEFTX1ZFUlNJT04KKworZG5sIHRoaXMgbWFjcm8KK2RubCAtIEFDX1NVQlNUJ3MgUEFDS0FHRV9WRVJTSU9OX01BSk9SLCBfTUlOT1IsIF9NSUNSTworZG5sIC0gQUNfU1VCU1QncyBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSwKK2RubCAgICB3aGljaCBjYW4gYmUgdXNlZCBmb3IgcnBtIHJlbGVhc2UgZmllbGRzCitkbmwgLSBkb2Vzbid0IGNhbGwgQU1fSU5JVF9BVVRPTUFLRSBhbnltb3JlIGJlY2F1c2UgaXQgcHJldmVudHMKK2RubCAgIG1haW50YWluZXIgbW9kZSBmcm9tIHJ1bm5pbmcgY29ycmVjdGx5CitkbmwKK2RubCBkb24ndCBmb3JnZXQgdG8gcHV0ICN1bmRlZiBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSBpbiBhY2NvbmZpZy5oCitkbmwgaWYgeW91IHVzZSBhY2NvbmZpZy5oCisKK0FDX0RFRlVOKFtBU19WRVJTSU9OXSwKK1sKKyAgUEFDS0FHRV9WRVJTSU9OX01BSk9SPSQoZWNobyBBQ19QQUNLQUdFX1ZFUlNJT04gfCBjdXQgLWQnLicgLWYxKQorICBQQUNLQUdFX1ZFUlNJT05fTUlOT1I9JChlY2hvIEFDX1BBQ0tBR0VfVkVSU0lPTiB8IGN1dCAtZCcuJyAtZjIpCisgIFBBQ0tBR0VfVkVSU0lPTl9NSUNSTz0kKGVjaG8gQUNfUEFDS0FHRV9WRVJTSU9OIHwgY3V0IC1kJy4nIC1mMykKKworICBBQ19TVUJTVChQQUNLQUdFX1ZFUlNJT05fTUFKT1IpCisgIEFDX1NVQlNUKFBBQ0tBR0VfVkVSU0lPTl9NSU5PUikKKyAgQUNfU1VCU1QoUEFDS0FHRV9WRVJTSU9OX01JQ1JPKQorXSkKKworZG5sIEFTX05BTk8oQUNUSU9OLUlGLU5BTk8tTk9OLU5VTEwsIFtBQ1RJT04tSUYtTkFOTy1OVUxMXSkKKworZG5sIHJlcXVpcmVzIEFDX0lOSVQgdG8gYmUgY2FsbGVkIGJlZm9yZQorZG5sIEZvciBwcm9qZWN0cyB1c2luZyBhIGZvdXJ0aCBvciBuYW5vIG51bWJlciBpbiB5b3VyIHZlcnNpb25pbmcgdG8gaW5kaWNhdGUKK2RubCBkZXZlbG9wbWVudCBvciBwcmVyZWxlYXNlIHNuYXBzaG90cywgdGhpcyBtYWNybyBhbGxvd3MgdGhlIGJ1aWxkIHRvIGJlCitkbmwgc2V0IHVwIGRpZmZlcmVudGx5IGFjY29yZGluZ2x5LgorCitkbmwgdGhpcyBtYWNybzoKK2RubCAtIHBhcnNlcyBBQ19QQUNLQUdFX1ZFUlNJT04sIHNldCBieSBBQ19JTklULCBhbmQgZXh0cmFjdHMgdGhlIG5hbm8gbnVtYmVyCitkbmwgLSBzZXRzIHRoZSB2YXJpYWJsZSBQQUNLQUdFX1ZFUlNJT05fTkFOTworZG5sIC0gc2V0cyB0aGUgdmFyaWFibGUgUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UsIHdoaWNoIGNhbiBiZSB1c2VkCitkbmwgICBmb3IgcnBtIHJlbGVhc2UgZmllbGRzCitkbmwgLSBleGVjdXRlcyBBQ1RJT04tSUYtTkFOTy1OT04tTlVMTCBvciBBQ1RJT04tSUYtTkFOTy1OVUxMCisKK2RubCBleGFtcGxlOgorZG5sIEFTX05BTk8oUkVMRUFTRT0ieWVzIiwgUkVMRUFTRT0ibm8iKQorCitBQ19ERUZVTihbQVNfTkFOT10sCitbCisgIEFDX01TR19DSEVDS0lORyhuYW5vIHZlcnNpb24pCisKKyAgTkFOTz0kKGVjaG8gQUNfUEFDS0FHRV9WRVJTSU9OIHwgY3V0IC1kJy4nIC1mNCkKKworICBpZiB0ZXN0IHgiJE5BTk8iID0geCB8fCB0ZXN0ICJ4JE5BTk8iID0gIngwIiA7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFswIChyZWxlYXNlKV0pCisgICAgTkFOTz0wCisgICAgUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0U9MQorICAgIGlmZWxzZShbJDFdLCAsIDosIFskMV0pCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKCROQU5PKQorICAgIFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFPTAuYGRhdGUgKyVZJW0lZC4lSCVNJVNgCisgICAgaWYgdGVzdCAieCROQU5PIiAhPSAieDEiIDsgdGhlbgorICAgICAgIGlmZWxzZShbJDFdLCAsIDosIFskMV0pCisgICAgZWxzZQorICAgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCisgICAgZmkKKyAgZmkKKyAgUEFDS0FHRV9WRVJTSU9OX05BTk89JE5BTk8KKyAgQUNfU1VCU1QoUEFDS0FHRV9WRVJTSU9OX05BTk8pCisgIEFDX1NVQlNUKFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFKQorXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgYi9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYmY2OTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00CkBAIC0wLDAgKzEsNzM0IEBACisjIyMjIyBodHRwOi8vYXV0b2NvbmYtYXJjaGl2ZS5jcnlwLnRvL2F4X2NyZWF0ZV9zdGRpbnRfaC5odG1sCisjCisjIFNZTk9QU0lTCisjCisjICAgQVhfQ1JFQVRFX1NURElOVF9IIFsoIEhFQURFUi1UTy1HRU5FUkFURSBbLCBIRURFUlMtVE8tQ0hFQ0tdKV0KKyMKKyMgREVTQ1JJUFRJT04KKyMKKyMgICB0aGUgIklTTyBDOVg6IDcuMTggSW50ZWdlciB0eXBlcyA8c3RkaW50Lmg+IiBzZWN0aW9uIHJlcXVpcmVzIHRoZQorIyAgIGV4aXN0ZW5jZSBvZiBhbiBpbmNsdWRlIGZpbGUgPHN0ZGludC5oPiB0aGF0IGRlZmluZXMgYSBzZXQgb2YKKyMgICB0eXBlZGVmcywgZXNwZWNpYWxseSB1aW50OF90LGludDMyX3QsdWludHB0cl90LiBNYW55IG9sZGVyCisjICAgaW5zdGFsbGF0aW9ucyB3aWxsIG5vdCBwcm92aWRlIHRoaXMgZmlsZSwgYnV0IHNvbWUgd2lsbCBoYXZlIHRoZQorIyAgIHZlcnkgc2FtZSBkZWZpbml0aW9ucyBpbiA8aW50dHlwZXMuaD4uIEluIG90aGVyIGVudmlyb21lbnRzIHdlIGNhbgorIyAgIHVzZSB0aGUgaW5ldC10eXBlcyBpbiA8c3lzL3R5cGVzLmg+IHdoaWNoIHdvdWxkIGRlZmluZSB0aGUgdHlwZWRlZnMKKyMgICBpbnQ4X3QgYW5kIHVfaW50OF90IHJlc3BlY3Rpdmx5LgorIworIyAgIFRoaXMgbWFjcm9zIHdpbGwgY3JlYXRlIGEgbG9jYWwgIl9zdGRpbnQuaCIgb3IgdGhlIGhlYWRlcmZpbGUgZ2l2ZW4KKyMgICBhcyBhbiBhcmd1bWVudC4gSW4gbWFueSBjYXNlcyB0aGF0IGZpbGUgd2lsbCBqdXN0ICIjaW5jbHVkZQorIyAgIDxzdGRpbnQuaD4iIG9yICIjaW5jbHVkZSA8aW50dHlwZXMuaD4iLCB3aGlsZSBpbiBvdGhlciBlbnZpcm9ubWVudHMKKyMgICBpdCB3aWxsIHByb3ZpZGUgdGhlIHNldCBvZiBiYXNpYyAnc3RkaW50J3MgZGVmaW5pdGlvbnMvdHlwZWRlZnM6CisjCisjICAgICBpbnQ4X3QsdWludDhfdCxpbnQxNl90LHVpbnQxNl90LGludDMyX3QsdWludDMyX3QsaW50cHRyX3QsdWludHB0cl90CisjICAgICBpbnRfbGVhc3QzMl90Li4gaW50X2Zhc3QzMl90Li4gaW50bWF4X3QKKyMKKyMgICB3aGljaCBtYXkgb3IgbWF5IG5vdCByZWx5IG9uIHRoZSBkZWZpbml0aW9ucyBvZiBvdGhlciBmaWxlcywgb3IKKyMgICB1c2luZyB0aGUgQUNfQ0hFQ0tfU0laRU9GIG1hY3JvIHRvIGRldGVybWluZSB0aGUgYWN0dWFsIHNpemVvZiBlYWNoCisjICAgdHlwZS4KKyMKKyMgICBpZiB5b3VyIGhlYWRlciBmaWxlcyByZXF1aXJlIHRoZSBzdGRpbnQtdHlwZXMgeW91IHdpbGwgd2FudCB0bworIyAgIGNyZWF0ZSBhbiBpbnN0YWxsYWJsZSBmaWxlIG15bGliLWludC5oIHRoYXQgYWxsIHlvdXIgb3RoZXIKKyMgICBpbnN0YWxsYWJsZSBoZWFkZXIgbWF5IGluY2x1ZGUuIFNvIGlmIHlvdSBoYXZlIGEgbGlicmFyeSBwYWNrYWdlCisjICAgbmFtZWQgIm15bGliIiwganVzdCB1c2UKKyMKKyMgICAgICAgIEFYX0NSRUFURV9TVERJTlRfSChteWxpYi1pbnQuaCkKKyMKKyMgICBpbiBjb25maWd1cmUuYWMgYW5kIGdvIHRvIGluc3RhbGwgdGhhdCB2ZXJ5IGhlYWRlciBmaWxlIGluCisjICAgTWFrZWZpbGUuYW0gYWxvbmcgd2l0aCB0aGUgb3RoZXIgaGVhZGVycyAobXlsaWIuaCkgLSBhbmQgdGhlCisjICAgbXlsaWItc3BlY2lmaWMgaGVhZGVycyBjYW4gc2ltcGx5IHVzZSAiI2luY2x1ZGUgPG15bGliLWludC5oPiIgdG8KKyMgICBvYnRhaW4gdGhlIHN0ZGludC10eXBlcy4KKyMKKyMgICBSZW1lbWJlciwgaWYgdGhlIHN5c3RlbSBhbHJlYWR5IGhhZCBhIHZhbGlkIDxzdGRpbnQuaD4sIHRoZQorIyAgIGdlbmVyYXRlZCBmaWxlIHdpbGwgaW5jbHVkZSBpdCBkaXJlY3RseS4gTm8gbmVlZCBmb3IgZnV6enkKKyMgICBIQVZFX1NURElOVF9IIHRoaW5ncy4uLiAob29wcywgR0NDIDQuMi54IGhhcyBkZWxpYmVyYXRseSBkaXNhYmxlZAorIyAgIGl0cyBzdGRpbnQuaCBmb3Igbm9uLWM5OSBjb21waWxhdGlvbiBhbmQgdGhlIGM5OS1tb2RlIGlzIG5vdCB0aGUKKyMgICBkZWZhdWx0LiBUaGVyZWZvcmUgdGhpcyBtYWNybyB3aWxsIG5vdCB1c2UgdGhlIGNvbXBpbGVyJ3Mgc3RkaW50LmgKKyMgICAtIHBsZWFzZSBjb21wbGFpbiB0byB0aGUgR0NDIGRldmVsb3BlcnMpLgorIworIyBMQVNUIE1PRElGSUNBVElPTgorIworIyAgIDIwMDctMDYtMjcKKyMKKyMgQ09QWUxFRlQKKyMKKyMgICBDb3B5cmlnaHQgKGMpIDIwMDcgR3VpZG8gVS4gRHJhaGVpbSA8Z3VpZG9kQGdteC5kZT4KKyMKKyMgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorIyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCisjICAgMDIxMTEtMTMwNywgVVNBLgorIworIyAgIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSByZXNwZWN0aXZlIEF1dG9jb25mIE1hY3JvJ3MgY29weXJpZ2h0CisjICAgb3duZXIgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IHRoZQorIyAgIGNvbmZpZ3VyZSBzY3JpcHRzIHRoYXQgYXJlIHRoZSBvdXRwdXQgb2YgQXV0b2NvbmYgd2hlbiBwcm9jZXNzaW5nCisjICAgdGhlIE1hY3JvLiBZb3UgbmVlZCBub3QgZm9sbG93IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjICAgTGljZW5zZSB3aGVuIHVzaW5nIG9yIGRpc3RyaWJ1dGluZyBzdWNoIHNjcmlwdHMsIGV2ZW4gdGhvdWdoCisjICAgcG9ydGlvbnMgb2YgdGhlIHRleHQgb2YgdGhlIE1hY3JvIGFwcGVhciBpbiB0aGVtLiBUaGUgR05VIEdlbmVyYWwKKyMgICBQdWJsaWMgTGljZW5zZSAoR1BMKSBkb2VzIGdvdmVybiBhbGwgb3RoZXIgdXNlIG9mIHRoZSBtYXRlcmlhbCB0aGF0CisjICAgY29uc3RpdHV0ZXMgdGhlIEF1dG9jb25mIE1hY3JvLgorIworIyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCBhcHBsaWVzIHRvIHZlcnNpb25zIG9mIHRoZQorIyAgIEF1dG9jb25mIE1hY3JvIHJlbGVhc2VkIGJ5IHRoZSBBdXRvY29uZiBNYWNybyBBcmNoaXZlLiBXaGVuIHlvdQorIyAgIG1ha2UgYW5kIGRpc3RyaWJ1dGUgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBBdXRvY29uZiBNYWNybywgeW91CisjICAgbWF5IGV4dGVuZCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwgdG8gYXBwbHkgdG8geW91cgorIyAgIG1vZGlmaWVkIHZlcnNpb24gYXMgd2VsbC4KKworQUNfREVGVU4oW0FYX0NIRUNLX0RBVEFfTU9ERUxdLFsKKyAgIEFDX0NIRUNLX1NJWkVPRihjaGFyKQorICAgQUNfQ0hFQ0tfU0laRU9GKHNob3J0KQorICAgQUNfQ0hFQ0tfU0laRU9GKGludCkKKyAgIEFDX0NIRUNLX1NJWkVPRihsb25nKQorICAgQUNfQ0hFQ0tfU0laRU9GKHZvaWQqKQorICAgYWNfY3ZfY2hhcl9kYXRhX21vZGVsPSIiCisgICBhY19jdl9jaGFyX2RhdGFfbW9kZWw9IiRhY19jdl9jaGFyX2RhdGFfbW9kZWwkYWNfY3Zfc2l6ZW9mX2NoYXIiCisgICBhY19jdl9jaGFyX2RhdGFfbW9kZWw9IiRhY19jdl9jaGFyX2RhdGFfbW9kZWwkYWNfY3Zfc2l6ZW9mX3Nob3J0IgorICAgYWNfY3ZfY2hhcl9kYXRhX21vZGVsPSIkYWNfY3ZfY2hhcl9kYXRhX21vZGVsJGFjX2N2X3NpemVvZl9pbnQiCisgICBhY19jdl9sb25nX2RhdGFfbW9kZWw9IiIKKyAgIGFjX2N2X2xvbmdfZGF0YV9tb2RlbD0iJGFjX2N2X2xvbmdfZGF0YV9tb2RlbCRhY19jdl9zaXplb2ZfaW50IgorICAgYWNfY3ZfbG9uZ19kYXRhX21vZGVsPSIkYWNfY3ZfbG9uZ19kYXRhX21vZGVsJGFjX2N2X3NpemVvZl9sb25nIgorICAgYWNfY3ZfbG9uZ19kYXRhX21vZGVsPSIkYWNfY3ZfbG9uZ19kYXRhX21vZGVsJGFjX2N2X3NpemVvZl92b2lkcCIKKyAgIEFDX01TR19DSEVDS0lORyhbZGF0YSBtb2RlbF0pCisgICBjYXNlICIkYWNfY3ZfY2hhcl9kYXRhX21vZGVsLyRhY19jdl9sb25nX2RhdGFfbW9kZWwiIGluCisgICAgMTIyLzI0MikgICAgIGFjX2N2X2RhdGFfbW9kZWw9IklQMTYiICA7IG49InN0YW5kYXJkIDE2Yml0IG1hY2hpbmUiIDs7CisgICAgMTIyLzI0NCkgICAgIGFjX2N2X2RhdGFfbW9kZWw9IkxQMzIiICA7IG49InN0YW5kYXJkIDMyYml0IG1hY2hpbmUiIDs7CisgICAgMTIyLyopICAgICAgIGFjX2N2X2RhdGFfbW9kZWw9ImkxNiIgICA7IG49InVudXN1YWwgaW50MTYgbW9kZWwiIDs7CisgICAgMTI0LzQ0NCkgICAgIGFjX2N2X2RhdGFfbW9kZWw9IklMUDMyIiA7IG49InN0YW5kYXJkIDMyYml0IHVuaXhpc2giIDs7CisgICAgMTI0LzQ4OCkgICAgIGFjX2N2X2RhdGFfbW9kZWw9IkxQNjQiICA7IG49InN0YW5kYXJkIDY0Yml0IHVuaXhpc2giIDs7CisgICAgMTI0LzQ0OCkgICAgIGFjX2N2X2RhdGFfbW9kZWw9IkxMUDY0IiA7IG49InVudXN1YWwgNjRiaXQgdW5peGlzaCIgOzsKKyAgICAxMjQvKikgICAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iaTMyIiAgIDsgbj0idW51c3VhbCBpbnQzMiBtb2RlbCIgOzsKKyAgICAxMjgvODg4KSAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iSUxQNjQiIDsgbj0idW51c3VhbCA2NGJpdCBudW1lcmljIiA7OworICAgIDEyOC8qKSAgICAgICBhY19jdl9kYXRhX21vZGVsPSJpNjQiICAgOyBuPSJ1bnVzdWFsIGludDY0IG1vZGVsIiA7OworICAgIDIyMi8qMikgICAgICBhY19jdl9kYXRhX21vZGVsPSJEU1AxNiIgOyBuPSJzdHJpY3QgMTZiaXQgZHNwdHlwZSIgOzsKKyAgICAzMzMvKjMpICAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iRFNQMjQiIDsgbj0ic3RyaWN0IDI0Yml0IGRzcHR5cGUiIDs7CisgICAgNDQ0Lyo0KSAgICAgIGFjX2N2X2RhdGFfbW9kZWw9IkRTUDMyIiA7IG49InN0cmljdCAzMmJpdCBkc3B0eXBlIiA7OworICAgIDY2Ni8qNikgICAgICBhY19jdl9kYXRhX21vZGVsPSJEU1A0OCIgOyBuPSJzdHJpY3QgNDhiaXQgZHNwdHlwZSIgOzsKKyAgICA4ODgvKjgpICAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iRFNQNjQiIDsgbj0ic3RyaWN0IDY0Yml0IGRzcHR5cGUiIDs7CisgICAgMjIyLyp8MzMzLyp8NDQ0Lyp8NjY2Lyp8ODg4LyopIDoKKyAgICAgICAgICAgICAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iaURTUCIgIDsgbj0idW51c3VhbCBkc3B0eXBlIiA7OworICAgICAqKSAgICAgICAgICBhY19jdl9kYXRhX21vZGVsPSJub25lIiAgOyBuPSJ2ZXJ5IHVudXN1YWwgbW9kZWwiIDs7CisgICBlc2FjCisgICBBQ19NU0dfUkVTVUxUKFskYWNfY3ZfZGF0YV9tb2RlbCAoJGFjX2N2X2xvbmdfZGF0YV9tb2RlbCwgJG4pXSkKK10pCisKK2RubCBBWF9DSEVDS19IRUFERVJfU1RESU5UX1goW0hFQURFUkxJU1RdWyxBQ1RJT04tSUZdKQorQUNfREVGVU4oW0FYX0NIRUNLX0hFQURFUl9TVERJTlRfWF0sWworQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzdGRpbnQgdWludHB0cl90XSwgW2FjX2N2X2hlYWRlcl9zdGRpbnRfeF0sWworIGFjX2N2X2hlYWRlcl9zdGRpbnRfeD0iIiAjIHRoZSAxOTk3IHR5cGVkZWZzIChpbnR0eXBlcy5oKQorICBBQ19NU0dfUkVTVUxUKFsoLi4pXSkKKyAgZm9yIGkgaW4gbTRfaWZ2YWwoWyQxXSxbJDFdLFtzdGRpbnQuaCBpbnR0eXBlcy5oIHN5cy9pbnR0eXBlcy5oIHN5cy90eXBlcy5oXSkKKyAgZG8KKyAgIHVuc2V0IGFjX2N2X3R5cGVfdWludHB0cl90CisgICB1bnNldCBhY19jdl90eXBlX3VpbnQ2NF90CisgICBBQ19DSEVDS19UWVBFKHVpbnRwdHJfdCxbYWNfY3ZfaGVhZGVyX3N0ZGludF94PSRpXSxjb250aW51ZSxbI2luY2x1ZGUgPCRpPl0pCisgICBBQ19DSEVDS19UWVBFKHVpbnQ2NF90LFthbmQ2ND0iL3VpbnQ2NF90Il0sW2FuZDY0PSIiXSxbI2luY2x1ZGU8JGk+XSkKKyAgIG00X2lmdmFsbihbJDJdLFskMl0pIGJyZWFrCisgIGRvbmUKKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igc3RkaW50IHVpbnRwdHJfdF0pCisgXSkKK10pCisKK0FDX0RFRlVOKFtBWF9DSEVDS19IRUFERVJfU1RESU5UX09dLFsKK0FDX0NBQ0hFX0NIRUNLKFtmb3Igc3RkaW50IHVpbnQzMl90XSwgW2FjX2N2X2hlYWRlcl9zdGRpbnRfb10sWworIGFjX2N2X2hlYWRlcl9zdGRpbnRfbz0iIiAjIHRoZSAxOTk1IHR5cGVkZWZzIChzeXMvaW50dHlwZXMuaCkKKyAgQUNfTVNHX1JFU1VMVChbKC4uKV0pCisgIGZvciBpIGluIG00X2lmdmFsKFskMV0sWyQxXSxbaW50dHlwZXMuaCBzeXMvaW50dHlwZXMuaCBzeXMvdHlwZXMuaCBzdGRpbnQuaF0pCisgIGRvCisgICB1bnNldCBhY19jdl90eXBlX3VpbnQzMl90CisgICB1bnNldCBhY19jdl90eXBlX3VpbnQ2NF90CisgICBBQ19DSEVDS19UWVBFKHVpbnQzMl90LFthY19jdl9oZWFkZXJfc3RkaW50X289JGldLGNvbnRpbnVlLFsjaW5jbHVkZSA8JGk+XSkKKyAgIEFDX0NIRUNLX1RZUEUodWludDY0X3QsW2FuZDY0PSIvdWludDY0X3QiXSxbYW5kNjQ9IiJdLFsjaW5jbHVkZTwkaT5dKQorICAgbTRfaWZ2YWxuKFskMl0sWyQyXSkgYnJlYWsKKyAgIGJyZWFrOworICBkb25lCisgIEFDX01TR19DSEVDS0lORyhbZm9yIHN0ZGludCB1aW50MzJfdF0pCisgXSkKK10pCisKK0FDX0RFRlVOKFtBWF9DSEVDS19IRUFERVJfU1RESU5UX1VdLFsKK0FDX0NBQ0hFX0NIRUNLKFtmb3Igc3RkaW50IHVfaW50MzJfdF0sIFthY19jdl9oZWFkZXJfc3RkaW50X3VdLFsKKyBhY19jdl9oZWFkZXJfc3RkaW50X3U9IiIgIyB0aGUgQlNEIHR5cGVkZWZzIChzeXMvdHlwZXMuaCkKKyAgQUNfTVNHX1JFU1VMVChbKC4uKV0pCisgIGZvciBpIGluIG00X2lmdmFsKFskMV0sWyQxXSxbc3lzL3R5cGVzLmggaW50dHlwZXMuaCBzeXMvaW50dHlwZXMuaF0pIDsgZG8KKyAgIHVuc2V0IGFjX2N2X3R5cGVfdV9pbnQzMl90CisgICB1bnNldCBhY19jdl90eXBlX3VfaW50NjRfdAorICAgQUNfQ0hFQ0tfVFlQRSh1X2ludDMyX3QsW2FjX2N2X2hlYWRlcl9zdGRpbnRfdT0kaV0sY29udGludWUsWyNpbmNsdWRlIDwkaT5dKQorICAgQUNfQ0hFQ0tfVFlQRSh1X2ludDY0X3QsW2FuZDY0PSIvdV9pbnQ2NF90Il0sW2FuZDY0PSIiXSxbI2luY2x1ZGU8JGk+XSkKKyAgIG00X2lmdmFsbihbJDJdLFskMl0pIGJyZWFrCisgICBicmVhazsKKyAgZG9uZQorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzdGRpbnQgdV9pbnQzMl90XSkKKyBdKQorXSkKKworQUNfREVGVU4oW0FYX0NSRUFURV9TVERJTlRfSF0sCitbIyAtLS0tLS0gQVggQ1JFQVRFIFNURElOVCBIIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX01TR19DSEVDS0lORyhbZm9yIHN0ZGludCB0eXBlc10pCithY19zdGRpbnRfaD1gZWNobyBpZmVsc2UoJDEsICwgX3N0ZGludC5oLCAkMSlgCisjIHRyeSB0byBzaG9ydGNpcmN1aXQgLSBpZiB0aGUgZGVmYXVsdCBpbmNsdWRlIHBhdGggb2YgdGhlIGNvbXBpbGVyCisjIGNhbiBmaW5kIGEgInN0ZGludC5oIiBoZWFkZXIgdGhlbiB3ZSBhc3N1bWUgdGhhdCBhbGwgY29tcGlsZXJzIGNhbi4KK0FDX0NBQ0hFX1ZBTChbYWNfY3ZfaGVhZGVyX3N0ZGludF90XSxbCitvbGRfQ1hYRkxBR1M9IiRDWFhGTEFHUyIgOyBDWFhGTEFHUz0iIgorb2xkX0NQUEZMQUdTPSIkQ1BQRkxBR1MiIDsgQ1BQRkxBR1M9IiIKK29sZF9DRkxBR1M9IiRDRkxBR1MiICAgICA7IENGTEFHUz0iIgorQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzdGRpbnQuaD5dLFtpbnRfbGVhc3QzMl90IHYgPSAwO10sCitbYWNfY3Zfc3RkaW50X3Jlc3VsdD0iKGFzc3VtaW5nIEM5OSBjb21wYXRpYmxlIHN5c3RlbSkiCisgYWNfY3ZfaGVhZGVyX3N0ZGludF90PSJzdGRpbnQuaCI7IF0sCitbYWNfY3ZfaGVhZGVyX3N0ZGludF90PSIiXSkKK2lmIHRlc3QgIiRHQ0MiID0gInllcyIgJiYgdGVzdCAiLiRhY19jdl9oZWFkZXJfc3RkaW50X3QiID0gIi4iOyB0aGVuCitDRkxBR1M9Ii1zdGQ9Yzk5IgorQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzdGRpbnQuaD5dLFtpbnRfbGVhc3QzMl90IHYgPSAwO10sCitbQUNfTVNHX1dBUk4oeW91ciBHQ0MgY29tcGlsZXIgaGFzIGEgZGVmdW5jdCBzdGRpbnQuaCBmb3IgaXRzIGRlZmF1bHQtbW9kZSldKQorZmkKK0NYWEZMQUdTPSIkb2xkX0NYWEZMQUdTIgorQ1BQRkxBR1M9IiRvbGRfQ1BQRkxBR1MiCitDRkxBR1M9IiRvbGRfQ0ZMQUdTIiBdKQorCit2PSIuLi4gJGFjX2N2X2hlYWRlcl9zdGRpbnRfaCIKK2lmIHRlc3QgIiRhY19zdGRpbnRfaCIgPSAic3RkaW50LmgiIDsgdGhlbgorIEFDX01TR19SRVNVTFQoWyhhcmUgeW91IHN1cmUgeW91IHdhbnQgdGhlbSBpbiAuL3N0ZGludC5oPyldKQorZWxpZiB0ZXN0ICIkYWNfc3RkaW50X2giID0gImludHR5cGVzLmgiIDsgdGhlbgorIEFDX01TR19SRVNVTFQoWyhhcmUgeW91IHN1cmUgeW91IHdhbnQgdGhlbSBpbiAuL2ludHR5cGVzLmg/KV0pCitlbGlmIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF90IiA9ICJfIiA7IHRoZW4KKyBBQ19NU0dfUkVTVUxUKFsocHV0dGluZyB0aGVtIGludG8gJGFjX3N0ZGludF9oKSR2XSkKK2Vsc2UKKyBhY19jdl9oZWFkZXJfc3RkaW50PSIkYWNfY3ZfaGVhZGVyX3N0ZGludF90IgorIEFDX01TR19SRVNVTFQoWyRhY19jdl9oZWFkZXJfc3RkaW50IChzaG9ydGNpcmN1aXQpXSkKK2ZpCisKK2lmIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF90IiA9ICJfIiA7IHRoZW4gIyBjYW4gbm90IHNob3J0Y2lyY3VpdC4uCisKK2RubCAuLi4uLmludHJvIG1lc3NhZ2UgZG9uZSwgbm93IGRvIGEgZmV3IHN5c3RlbSBjaGVja3MuLi4uLgorZG5sIGJ0dywgYWxsIG9sZCBDSEVDS19UWVBFIG1hY3JvcyBkbyBhdXRvbWF0aWNhbGx5ICJERUZJTkUiIGEgdHlwZSwKK2RubCB0aGVyZWZvcmUgd2UgdXNlIHRoZSBhdXRvY29uZiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgQ0hFQ0tfVFlQRV9ORVcKK2RubCBpbnN0ZWFkIHRoYXQgaXMgdHJpZ2dlcmVkIHdpdGggMyBvciBtb3JlIGFyZ3VtZW50cyAoc2VlIHR5cGVzLm00KQorCitpbnR0eXBlX2hlYWRlcnM9YGVjaG8gJDIgfCBzZWQgLWUgJ3MvLC8gL2cnYAorCithY19jdl9zdGRpbnRfcmVzdWx0PSIobm8gaGVscGZ1bCBzeXN0ZW0gdHlwZWRlZnMgc2VlbikiCitBWF9DSEVDS19IRUFERVJfU1RESU5UX1goZG5sCisgICBzdGRpbnQuaCBpbnR0eXBlcy5oIHN5cy9pbnR0eXBlcy5oICRpbnR0eXBlX2hlYWRlcnMsCisgICBhY19jdl9zdGRpbnRfcmVzdWx0PSIoc2VlbiB1aW50cHRyX3QkYW5kNjQgaW4gJGkpIikKKworaWYgdGVzdCAiXyRhY19jdl9oZWFkZXJfc3RkaW50X3giID0gIl8iIDsgdGhlbgorQVhfQ0hFQ0tfSEVBREVSX1NURElOVF9PKGRubCwKKyAgIGludHR5cGVzLmggc3lzL2ludHR5cGVzLmggc3RkaW50LmggJGludHR5cGVfaGVhZGVycywKKyAgIGFjX2N2X3N0ZGludF9yZXN1bHQ9IihzZWVuIHVpbnQzMl90JGFuZDY0IGluICRpKSIpCitmaQorCitpZiB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfeCIgPSAiXyIgOyB0aGVuCitpZiB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfbyIgPSAiXyIgOyB0aGVuCitBWF9DSEVDS19IRUFERVJfU1RESU5UX1UoZG5sLAorICAgc3lzL3R5cGVzLmggaW50dHlwZXMuaCBzeXMvaW50dHlwZXMuaCAkaW50dHlwZV9oZWFkZXJzLAorICAgYWNfY3Zfc3RkaW50X3Jlc3VsdD0iKHNlZW4gdV9pbnQzMl90JGFuZDY0IGluICRpKSIpCitmaSBmaQorCitkbmwgaWYgdGhlcmUgd2FzIG5vIGdvb2QgQzk5IGhlYWRlciBmaWxlLCBkbyBzb21lIHR5cGVkZWYgY2hlY2tzLi4uCitpZiB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfeCIgPSAiXyIgOyB0aGVuCisgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzdGRpbnQgZGF0YXR5cGUgbW9kZWxdKQorICAgQUNfTVNHX1JFU1VMVChbKC4uKV0pCisgICBBWF9DSEVDS19EQVRBX01PREVMCitmaQorCitpZiB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfeCIgIT0gIl8iIDsgdGhlbgorICAgYWNfY3ZfaGVhZGVyX3N0ZGludD0iJGFjX2N2X2hlYWRlcl9zdGRpbnRfeCIKK2VsaWYgIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF9vIiAhPSAiXyIgOyB0aGVuCisgICBhY19jdl9oZWFkZXJfc3RkaW50PSIkYWNfY3ZfaGVhZGVyX3N0ZGludF9vIgorZWxpZiAgdGVzdCAiXyRhY19jdl9oZWFkZXJfc3RkaW50X3UiICE9ICJfIiA7IHRoZW4KKyAgIGFjX2N2X2hlYWRlcl9zdGRpbnQ9IiRhY19jdl9oZWFkZXJfc3RkaW50X3UiCitlbHNlCisgICBhY19jdl9oZWFkZXJfc3RkaW50PSJzdGRkZWYuaCIKK2ZpCisKK0FDX01TR19DSEVDS0lORyhbZm9yIGV4dHJhIGludHR5cGVzIGluIGNob3NlbiBoZWFkZXJdKQorQUNfTVNHX1JFU1VMVChbKCRhY19jdl9oZWFkZXJfc3RkaW50KV0pCitkbmwgc2VlIGlmIGludF9sZWFzdCBhbmQgaW50X2Zhc3QgdHlwZXMgYXJlIHByZXNlbnQgaW4gX3RoaXNfIGhlYWRlci4KK3Vuc2V0IGFjX2N2X3R5cGVfaW50X2xlYXN0MzJfdAordW5zZXQgYWNfY3ZfdHlwZV9pbnRfZmFzdDMyX3QKK0FDX0NIRUNLX1RZUEUoaW50X2xlYXN0MzJfdCwsLFsjaW5jbHVkZSA8JGFjX2N2X2hlYWRlcl9zdGRpbnQ+XSkKK0FDX0NIRUNLX1RZUEUoaW50X2Zhc3QzMl90LCwsWyNpbmNsdWRlPCRhY19jdl9oZWFkZXJfc3RkaW50Pl0pCitBQ19DSEVDS19UWVBFKGludG1heF90LCwsWyNpbmNsdWRlIDwkYWNfY3ZfaGVhZGVyX3N0ZGludD5dKQorCitmaSAjIHNob3J0Y2lyY3V0IHRvIHN5c3RlbSAic3RkaW50LmgiCisjIC0tLS0tLS0tLS0tLS0tLS0tLSBQUkVQQVJFIFZBUklBQkxFUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2lmIHRlc3QgIiRHQ0MiID0gInllcyIgOyB0aGVuCithY19jdl9zdGRpbnRfbWVzc2FnZT0idXNpbmcgZ251IGNvbXBpbGVyICJgJENDIC0tdmVyc2lvbiB8IGhlYWQgLTFgCitlbHNlCithY19jdl9zdGRpbnRfbWVzc2FnZT0idXNpbmcgJENDIgorZmkKKworQUNfTVNHX1JFU1VMVChbbWFrZSB1c2Ugb2YgJGFjX2N2X2hlYWRlcl9zdGRpbnQgaW4gJGFjX3N0ZGludF9oIGRubAorJGFjX2N2X3N0ZGludF9yZXN1bHRdKQorCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgLS0tLS0tLS0tLS0tLS0tLS0gRE9ORSBpbnR0eXBlcy5oIGNoZWNrcyBTVEFSVCBoZWFkZXIgLS0tLS0tLS0tLS0tLQorQUNfQ09ORklHX0NPTU1BTkRTKFskYWNfc3RkaW50X2hdLFsKK0FDX01TR19OT1RJQ0UoY3JlYXRpbmcgJGFjX3N0ZGludF9oIDogJF9hY19zdGRpbnRfaCkKK2FjX3N0ZGludD0kdG1wL19zdGRpbnQuaAorCitlY2hvICIjaWZuZGVmIiAkX2FjX3N0ZGludF9oID4kYWNfc3RkaW50CitlY2hvICIjZGVmaW5lIiAkX2FjX3N0ZGludF9oICIxIiA+PiRhY19zdGRpbnQKK2VjaG8gIiNpZm5kZWYiIF9HRU5FUkFURURfU1RESU5UX0ggPj4kYWNfc3RkaW50CitlY2hvICIjZGVmaW5lIiBfR0VORVJBVEVEX1NURElOVF9IICciJyRQQUNLQUdFICRWRVJTSU9OJyInID4+JGFjX3N0ZGludAorZWNobyAiLyogZ2VuZXJhdGVkICRhY19jdl9zdGRpbnRfbWVzc2FnZSAqLyIgPj4kYWNfc3RkaW50CitpZiB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfdCIgIT0gIl8iIDsgdGhlbgorZWNobyAiI2RlZmluZSBfU1RESU5UX0hBVkVfU1RESU5UX0giICIxIiA+PiRhY19zdGRpbnQKK2VjaG8gIiNpbmNsdWRlIDxzdGRpbnQuaD4iID4+JGFjX3N0ZGludAorZWNobyAiI2VuZGlmIiA+PiRhY19zdGRpbnQKK2VjaG8gIiNlbmRpZiIgPj4kYWNfc3RkaW50CitlbHNlCisKK2NhdCA+PiRhY19zdGRpbnQgPDxTVERJTlRfRU9GCisKKy8qIC4uLi4uLi4uLi4uLi4uLi4uLi4gc2hvcnRjaXJjdWl0IHBhcnQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisKKyNpZiBkZWZpbmVkIEhBVkVfU1RESU5UX0ggfHwgZGVmaW5lZCBfU1RESU5UX0hBVkVfU1RESU5UX0gKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uIGNvbmZpZ3VyZWQgcGFydCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisKK1NURElOVF9FT0YKKworZWNobyAiLyogd2hldGhlciB3ZSBoYXZlIGEgQzk5IGNvbXBhdGlibGUgc3RkaW50IGhlYWRlciBmaWxlICovIiA+PiRhY19zdGRpbnQKK2lmIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF94IiAhPSAiXyIgOyB0aGVuCisgIGFjX2hlYWRlcj0iJGFjX2N2X2hlYWRlcl9zdGRpbnRfeCIKKyAgZWNobyAiI2RlZmluZSBfU1RESU5UX0hFQURFUl9JTlRQVFIiICciJyIkYWNfaGVhZGVyIiciJyA+PiRhY19zdGRpbnQKK2Vsc2UKKyAgZWNobyAiLyogI3VuZGVmIF9TVERJTlRfSEVBREVSX0lOVFBUUiAqLyIgPj4kYWNfc3RkaW50CitmaQorCitlY2hvICIvKiB3aGV0aGVyIHdlIGhhdmUgYSBDOTYgY29tcGF0aWJsZSBpbnR0eXBlcyBoZWFkZXIgZmlsZSAqLyIgPj4kYWNfc3RkaW50CitpZiAgdGVzdCAiXyRhY19jdl9oZWFkZXJfc3RkaW50X28iICE9ICJfIiA7IHRoZW4KKyAgYWNfaGVhZGVyPSIkYWNfY3ZfaGVhZGVyX3N0ZGludF9vIgorICBlY2hvICIjZGVmaW5lIF9TVERJTlRfSEVBREVSX1VJTlQzMiIgJyInIiRhY19oZWFkZXIiJyInID4+JGFjX3N0ZGludAorZWxzZQorICBlY2hvICIvKiAjdW5kZWYgX1NURElOVF9IRUFERVJfVUlOVDMyICovIiA+PiRhY19zdGRpbnQKK2ZpCisKK2VjaG8gIi8qIHdoZXRoZXIgd2UgaGF2ZSBhIEJTRCBjb21wYXRpYmxlIGluZXQgdHlwZXMgaGVhZGVyICovIiA+PiRhY19zdGRpbnQKK2lmICB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfdSIgIT0gIl8iIDsgdGhlbgorICBhY19oZWFkZXI9IiRhY19jdl9oZWFkZXJfc3RkaW50X3UiCisgIGVjaG8gIiNkZWZpbmUgX1NURElOVF9IRUFERVJfVV9JTlQzMiIgJyInIiRhY19oZWFkZXIiJyInID4+JGFjX3N0ZGludAorZWxzZQorICBlY2hvICIvKiAjdW5kZWYgX1NURElOVF9IRUFERVJfVV9JTlQzMiAqLyIgPj4kYWNfc3RkaW50CitmaQorCitlY2hvICIiID4+JGFjX3N0ZGludAorCitpZiB0ZXN0ICJfJGFjX2hlYWRlciIgIT0gIl8iIDsgdGhlbiBpZiB0ZXN0ICIkYWNfaGVhZGVyIiAhPSAic3RkZGVmLmgiIDsgdGhlbgorICBlY2hvICIjaW5jbHVkZSA8JGFjX2hlYWRlcj4iID4+JGFjX3N0ZGludAorICBlY2hvICIiID4+JGFjX3N0ZGludAorZmkgZmkKKworZWNobyAiLyogd2hpY2ggNjRiaXQgdHlwZWRlZiBoYXMgYmVlbiBmb3VuZCAqLyIgPj4kYWNfc3RkaW50CitpZiB0ZXN0ICIkYWNfY3ZfdHlwZV91aW50NjRfdCIgPSAieWVzIiA7IHRoZW4KK2VjaG8gIiNkZWZpbmUgICBfU1RESU5UX0hBVkVfVUlOVDY0X1QiICIxIiAgPj4kYWNfc3RkaW50CitlbHNlCitlY2hvICIvKiAjdW5kZWYgX1NURElOVF9IQVZFX1VJTlQ2NF9UICovIiA+PiRhY19zdGRpbnQKK2ZpCitpZiB0ZXN0ICIkYWNfY3ZfdHlwZV91X2ludDY0X3QiID0gInllcyIgOyB0aGVuCitlY2hvICIjZGVmaW5lICAgX1NURElOVF9IQVZFX1VfSU5UNjRfVCIgIjEiICA+PiRhY19zdGRpbnQKK2Vsc2UKK2VjaG8gIi8qICN1bmRlZiBfU1RESU5UX0hBVkVfVV9JTlQ2NF9UICovIiA+PiRhY19zdGRpbnQKK2ZpCitlY2hvICIiID4+JGFjX3N0ZGludAorCitlY2hvICIvKiB3aGljaCB0eXBlIG1vZGVsIGhhcyBiZWVuIGRldGVjdGVkICovIiA+PiRhY19zdGRpbnQKK2lmIHRlc3QgIl8kYWNfY3ZfY2hhcl9kYXRhX21vZGVsIiAhPSAiXyIgOyB0aGVuCitlY2hvICIjZGVmaW5lICAgX1NURElOVF9DSEFSX01PREVMIiAiJGFjX2N2X2NoYXJfZGF0YV9tb2RlbCIgPj4kYWNfc3RkaW50CitlY2hvICIjZGVmaW5lICAgX1NURElOVF9MT05HX01PREVMIiAiJGFjX2N2X2xvbmdfZGF0YV9tb2RlbCIgPj4kYWNfc3RkaW50CitlbHNlCitlY2hvICIvKiAjdW5kZWYgX1NURElOVF9DSEFSX01PREVMIC8vIHNraXBwZWQgKi8iID4+JGFjX3N0ZGludAorZWNobyAiLyogI3VuZGVmIF9TVERJTlRfTE9OR19NT0RFTCAvLyBza2lwcGVkICovIiA+PiRhY19zdGRpbnQKK2ZpCitlY2hvICIiID4+JGFjX3N0ZGludAorCitlY2hvICIvKiB3aGV0aGVyIGludF9sZWFzdCB0eXBlcyB3ZXJlIGRldGVjdGVkICovIiA+PiRhY19zdGRpbnQKK2lmIHRlc3QgIiRhY19jdl90eXBlX2ludF9sZWFzdDMyX3QiID0gInllcyI7IHRoZW4KK2VjaG8gIiNkZWZpbmUgICBfU1RESU5UX0hBVkVfSU5UX0xFQVNUMzJfVCIgIjEiICA+PiRhY19zdGRpbnQKK2Vsc2UKK2VjaG8gIi8qICN1bmRlZiBfU1RESU5UX0hBVkVfSU5UX0xFQVNUMzJfVCAqLyIgPj4kYWNfc3RkaW50CitmaQorZWNobyAiLyogd2hldGhlciBpbnRfZmFzdCB0eXBlcyB3ZXJlIGRldGVjdGVkICovIiA+PiRhY19zdGRpbnQKK2lmIHRlc3QgIiRhY19jdl90eXBlX2ludF9mYXN0MzJfdCIgPSAieWVzIjsgdGhlbgorZWNobyAiI2RlZmluZSAgIF9TVERJTlRfSEFWRV9JTlRfRkFTVDMyX1QiICIxIiA+PiRhY19zdGRpbnQKK2Vsc2UKK2VjaG8gIi8qICN1bmRlZiBfU1RESU5UX0hBVkVfSU5UX0ZBU1QzMl9UICovIiA+PiRhY19zdGRpbnQKK2ZpCitlY2hvICIvKiB3aGV0aGVyIGludG1heF90IHR5cGUgd2FzIGRldGVjdGVkICovIiA+PiRhY19zdGRpbnQKK2lmIHRlc3QgIiRhY19jdl90eXBlX2ludG1heF90IiA9ICJ5ZXMiOyB0aGVuCitlY2hvICIjZGVmaW5lICAgX1NURElOVF9IQVZFX0lOVE1BWF9UIiAiMSIgPj4kYWNfc3RkaW50CitlbHNlCitlY2hvICIvKiAjdW5kZWYgX1NURElOVF9IQVZFX0lOVE1BWF9UICovIiA+PiRhY19zdGRpbnQKK2ZpCitlY2hvICIiID4+JGFjX3N0ZGludAorCisgIGNhdCA+PiRhY19zdGRpbnQgPDxTVERJTlRfRU9GCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLiBkZXRlY3Rpb25zIHBhcnQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAqLworCisvKiB3aGV0aGVyIHdlIG5lZWQgdG8gZGVmaW5lIGJpdHNwZWNpZmljIHR5cGVzIGZyb20gY29tcGlsZXIgYmFzZSB0eXBlcyAqLworI2lmbmRlZiBfU1RESU5UX0hFQURFUl9JTlRQVFIKKyNpZm5kZWYgX1NURElOVF9IRUFERVJfVUlOVDMyCisjaWZuZGVmIF9TVERJTlRfSEVBREVSX1VfSU5UMzIKKyNkZWZpbmUgX1NURElOVF9ORUVEX0lOVF9NT0RFTF9UCisjZWxzZQorI2RlZmluZSBfU1RESU5UX0hBVkVfVV9JTlRfVFlQRVMKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIF9TVERJTlRfSEFWRV9VX0lOVF9UWVBFUworI3VuZGVmIF9TVERJTlRfTkVFRF9JTlRfTU9ERUxfVAorI2VuZGlmCisKKyNpZmRlZiAgX1NURElOVF9DSEFSX01PREVMCisjaWYgICAgIF9TVERJTlRfQ0hBUl9NT0RFTCswID09IDEyMiB8fCBfU1RESU5UX0NIQVJfTU9ERUwrMCA9PSAxMjQKKyNpZm5kZWYgX1NURElOVF9CWVRFX01PREVMCisjZGVmaW5lIF9TVERJTlRfQllURV9NT0RFTCAxMgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIF9TVERJTlRfSEFWRV9JTlRfTEVBU1QzMl9UCisjZGVmaW5lIF9TVERJTlRfTkVFRF9JTlRfTEVBU1RfVAorI2VuZGlmCisKKyNpZm5kZWYgX1NURElOVF9IQVZFX0lOVF9GQVNUMzJfVAorI2RlZmluZSBfU1RESU5UX05FRURfSU5UX0ZBU1RfVAorI2VuZGlmCisKKyNpZm5kZWYgX1NURElOVF9IRUFERVJfSU5UUFRSCisjZGVmaW5lIF9TVERJTlRfTkVFRF9JTlRQVFJfVAorI2lmbmRlZiBfU1RESU5UX0hBVkVfSU5UTUFYX1QKKyNkZWZpbmUgX1NURElOVF9ORUVEX0lOVE1BWF9UCisjZW5kaWYKKyNlbmRpZgorCisKKy8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uIGRlZmluaXRpb24gcGFydCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisKKy8qIHNvbWUgc3lzdGVtIGhlYWRlcnMgaGF2ZSBnb29kIHVpbnQ2NF90ICovCisjaWZuZGVmIF9IQVZFX1VJTlQ2NF9UCisjaWYgICAgIGRlZmluZWQgX1NURElOVF9IQVZFX1VJTlQ2NF9UICB8fCBkZWZpbmVkIEhBVkVfVUlOVDY0X1QKKyNkZWZpbmUgX0hBVkVfVUlOVDY0X1QKKyNlbGlmICAgZGVmaW5lZCBfU1RESU5UX0hBVkVfVV9JTlQ2NF9UIHx8IGRlZmluZWQgSEFWRV9VX0lOVDY0X1QKKyNkZWZpbmUgX0hBVkVfVUlOVDY0X1QKK3R5cGVkZWYgdV9pbnQ2NF90IHVpbnQ2NF90OworI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBfSEFWRV9VSU5UNjRfVAorLyogLi4gaGVyZSBhcmUgc29tZSBjb21tb24gaGV1cmlzdGljcyB1c2luZyBjb21waWxlciBydW50aW1lIHNwZWNpZmljcyAqLworI2lmIGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyAmJiBkZWZpbmVkIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAorI2RlZmluZSBfSEFWRV9VSU5UNjRfVAorI2RlZmluZSBfSEFWRV9MT05HTE9OR19VSU5UNjRfVAordHlwZWRlZiBsb25nIGxvbmcgaW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVpbnQ2NF90OworCisjZWxpZiAhZGVmaW5lZCBfX1NUUklDVF9BTlNJX18KKyNpZiBkZWZpbmVkIF9NU0NfVkVSIHx8IGRlZmluZWQgX19XQVRDT01DX18gfHwgZGVmaW5lZCBfX0JPUkxBTkRDX18KKyNkZWZpbmUgX0hBVkVfVUlOVDY0X1QKK3R5cGVkZWYgX19pbnQ2NCBpbnQ2NF90OwordHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IHVpbnQ2NF90OworCisjZWxpZiBkZWZpbmVkIF9fR05VQ19fIHx8IGRlZmluZWQgX19NV0VSS1NfXyB8fCBkZWZpbmVkIF9fRUxGX18KKy8qIG5vdGU6IGFsbCBFTEYtc3lzdGVtcyBzZWVtIHRvIGhhdmUgbG9mZi1zdXBwb3J0IHdoaWNoIG5lZWRzIDY0LWJpdCAqLworI2lmICFkZWZpbmVkIF9OT19MT05HTE9ORworI2RlZmluZSBfSEFWRV9VSU5UNjRfVAorI2RlZmluZSBfSEFWRV9MT05HTE9OR19VSU5UNjRfVAordHlwZWRlZiBsb25nIGxvbmcgaW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVpbnQ2NF90OworI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgX19hbHBoYSB8fCAoZGVmaW5lZCBfX21pcHMgJiYgZGVmaW5lZCBfQUJJTjMyKQorI2lmICFkZWZpbmVkIF9OT19MT05HTE9ORwordHlwZWRlZiBsb25nIGludDY0X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWludDY0X3Q7CisjZW5kaWYKKyAgLyogY29tcGlsZXIvY3B1IHR5cGUgdG8gZGVmaW5lIGludDY0X3QgKi8KKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgX1NURElOVF9IQVZFX1VfSU5UX1RZUEVTCisvKiBpbnQ4X3QgaW50MTZfdCBpbnQzMl90IGRlZmluZWQgYnkgaW5ldCBjb2RlLCByZWRlY2xhcmUgdGhlIHVfaW50WFggdHlwZXMgKi8KK3R5cGVkZWYgdV9pbnQ4X3QgdWludDhfdDsKK3R5cGVkZWYgdV9pbnQxNl90IHVpbnQxNl90OwordHlwZWRlZiB1X2ludDMyX3QgdWludDMyX3Q7CisKKy8qIGdsaWJjIGNvbXBhdGliaWxpdHkgKi8KKyNpZm5kZWYgX19pbnQ4X3RfZGVmaW5lZAorI2RlZmluZSBfX2ludDhfdF9kZWZpbmVkCisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX1NURElOVF9ORUVEX0lOVF9NT0RFTF9UCisvKiB3ZSBtdXN0IGd1ZXNzIGFsbCB0aGUgYmFzaWMgdHlwZXMuIEFwYXJ0IGZyb20gYnl0ZS1hZHJlc3NhYmxlIHN5c3RlbSwgKi8KKy8qIHRoZXJlIGEgZmV3IDMyLWJpdC1vbmx5IGRzcC1zeXN0ZW1zIHRoYXQgd2UgZ3VhcmQgd2l0aCBCWVRFX01PREVMIDgtfSAqLworLyogKGJ0dywgdGhvc2UgbmliYmxlLWFkZHJlc3NhYmxlIHN5c3RlbXMgYXJlIHdheSBvZmYsIG9yIHNvIHdlIGFzc3VtZSkgKi8KKworZG5sICAgLyogaGF2ZSBhIGxvb2sgYXQgIjY0Yml0IGFuZCBkYXRhIHNpemUgbmV1dHJhbGl0eSIgYXQgKi8KK2RubCAgIC8qIGh0dHA6Ly91bml4Lm9yZy92ZXJzaW9uMi93aGF0c25ldy9sb2dpbl82NGJpdC5odG1sICovCitkbmwgICAvKiAodGhlIHNob3J0aGFuZCAiSUxQIiB0eXBlcyBhbHdheXMgaGF2ZSBhICJQIiBwYXJ0KSAqLworCisjaWYgZGVmaW5lZCBfU1RESU5UX0JZVEVfTU9ERUwKKyNpZiBfU1RESU5UX0xPTkdfTU9ERUwrMCA9PSAyNDIKKy8qIDI6NDoyID0gIElQMTYgPSBhIG5vcm1hbCAxNi1iaXQgc3lzdGVtICAgICAgICAgICAgICAgICovCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICB1aW50OF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgdWludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICB1aW50MzJfdDsKKyNpZm5kZWYgX19pbnQ4X3RfZGVmaW5lZAorI2RlZmluZSBfX2ludDhfdF9kZWZpbmVkCit0eXBlZGVmICAgICAgICAgIGNoYXIgICAgaW50OF90OwordHlwZWRlZiAgICAgICAgICBzaG9ydCAgIGludDE2X3Q7Cit0eXBlZGVmICAgICAgICAgIGxvbmcgICAgaW50MzJfdDsKKyNlbmRpZgorI2VsaWYgX1NURElOVF9MT05HX01PREVMKzAgPT0gMjQ0IHx8IF9TVERJTlRfTE9OR19NT0RFTCA9PSA0NDQKKy8qIDI6NDo0ID0gIExQMzIgPSBhIDMyLWJpdCBzeXN0ZW0gZGVyaXZlZCBmcm9tIGEgMTYtYml0ICovCisvKiA0OjQ6NCA9IElMUDMyID0gYSBub3JtYWwgMzItYml0IHN5c3RlbSAgICAgICAgICAgICAgICAqLwordHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgdWludDhfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgIHVpbnQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgdWludDMyX3Q7CisjaWZuZGVmIF9faW50OF90X2RlZmluZWQKKyNkZWZpbmUgX19pbnQ4X3RfZGVmaW5lZAordHlwZWRlZiAgICAgICAgICBjaGFyICAgIGludDhfdDsKK3R5cGVkZWYgICAgICAgICAgc2hvcnQgICBpbnQxNl90OwordHlwZWRlZiAgICAgICAgICBpbnQgICAgIGludDMyX3Q7CisjZW5kaWYKKyNlbGlmIF9TVERJTlRfTE9OR19NT0RFTCswID09IDQ4NCB8fCBfU1RESU5UX0xPTkdfTU9ERUwrMCA9PSA0ODgKKy8qIDQ6ODo0ID0gIElQMzIgPSBhIDMyLWJpdCBzeXN0ZW0gcHJlcGFyZWQgZm9yIDY0LWJpdCAgICAqLworLyogNDo4OjggPSAgTFA2NCA9IGEgbm9ybWFsIDY0LWJpdCBzeXN0ZW0gICAgICAgICAgICAgICAgICovCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICB1aW50OF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgdWludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICB1aW50MzJfdDsKKyNpZm5kZWYgX19pbnQ4X3RfZGVmaW5lZAorI2RlZmluZSBfX2ludDhfdF9kZWZpbmVkCit0eXBlZGVmICAgICAgICAgIGNoYXIgICAgaW50OF90OwordHlwZWRlZiAgICAgICAgICBzaG9ydCAgIGludDE2X3Q7Cit0eXBlZGVmICAgICAgICAgIGludCAgICAgaW50MzJfdDsKKyNlbmRpZgorLyogdGhpcyBzeXN0ZW0gaGFzIGEgImxvbmciIG9mIDY0Yml0ICovCisjaWZuZGVmIF9IQVZFX1VJTlQ2NF9UCisjZGVmaW5lIF9IQVZFX1VJTlQ2NF9UCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICB1aW50NjRfdDsKK3R5cGVkZWYgICAgICAgICAgbG9uZyAgICBpbnQ2NF90OworI2VuZGlmCisjZWxpZiBfU1RESU5UX0xPTkdfTU9ERUwrMCA9PSA0NDgKKy8qICAgICAgTExQNjQgICBhIDY0LWJpdCBzeXN0ZW0gZGVyaXZlZCBmcm9tIGEgMzItYml0IHN5c3RlbSAqLwordHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgdWludDhfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgIHVpbnQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgdWludDMyX3Q7CisjaWZuZGVmIF9faW50OF90X2RlZmluZWQKKyNkZWZpbmUgX19pbnQ4X3RfZGVmaW5lZAordHlwZWRlZiAgICAgICAgICBjaGFyICAgIGludDhfdDsKK3R5cGVkZWYgICAgICAgICAgc2hvcnQgICBpbnQxNl90OwordHlwZWRlZiAgICAgICAgICBpbnQgICAgIGludDMyX3Q7CisjZW5kaWYKKy8qIGFzc3VtaW5nIHRoZSBzeXN0ZW0gaGFzIGEgImxvbmcgbG9uZyIgKi8KKyNpZm5kZWYgX0hBVkVfVUlOVDY0X1QKKyNkZWZpbmUgX0hBVkVfVUlOVDY0X1QKKyNkZWZpbmUgX0hBVkVfTE9OR0xPTkdfVUlOVDY0X1QKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVpbnQ2NF90OwordHlwZWRlZiAgICAgICAgICBsb25nIGxvbmcgIGludDY0X3Q7CisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIF9TVERJTlRfTk9fSU5UMzJfVAorI2VuZGlmCisjZWxzZQorI2RlZmluZSBfU1RESU5UX05PX0lOVDhfVAorI2RlZmluZSBfU1RESU5UX05PX0lOVDMyX1QKKyNlbmRpZgorI2VuZGlmCisKKy8qCisgKiBxdW90ZSBmcm9tIFN1bk9TLTUuOCBzeXMvaW50dHlwZXMuaDoKKyAqIFVzZSBhdCB5b3VyIG93biByaXNrLiAgQXMgb2YgRmVicnVhcnkgMTk5NiwgdGhlIGNvbW1pdHRlZSBpcyBzcXVhcmVseQorICogYmVoaW5kIHRoZSBmaXhlZCBzaXplZCB0eXBlczsgdGhlICJsZWFzdCIgYW5kICJmYXN0IiB0eXBlcyBhcmUgc3RpbGwgYmVpbmcKKyAqIGRpc2N1c3NlZC4gIFRoZSBwcm9iYWJpbGl0eSB0aGF0IHRoZSAiZmFzdCIgdHlwZXMgbWF5IGJlIHJlbW92ZWQgYmVmb3JlCisgKiB0aGUgc3RhbmRhcmQgaXMgZmluYWxpemVkIGlzIGhpZ2ggZW5vdWdoIHRoYXQgdGhleSBhcmUgbm90IGN1cnJlbnRseQorICogaW1wbGVtZW50ZWQuCisgKi8KKworI2lmIGRlZmluZWQgX1NURElOVF9ORUVEX0lOVF9MRUFTVF9UCit0eXBlZGVmICBpbnQ4X3QgICAgaW50X2xlYXN0OF90OwordHlwZWRlZiAgaW50MTZfdCAgIGludF9sZWFzdDE2X3Q7Cit0eXBlZGVmICBpbnQzMl90ICAgaW50X2xlYXN0MzJfdDsKKyNpZmRlZiBfSEFWRV9VSU5UNjRfVAordHlwZWRlZiAgaW50NjRfdCAgIGludF9sZWFzdDY0X3Q7CisjZW5kaWYKKwordHlwZWRlZiB1aW50OF90ICAgdWludF9sZWFzdDhfdDsKK3R5cGVkZWYgdWludDE2X3QgIHVpbnRfbGVhc3QxNl90OwordHlwZWRlZiB1aW50MzJfdCAgdWludF9sZWFzdDMyX3Q7CisjaWZkZWYgX0hBVkVfVUlOVDY0X1QKK3R5cGVkZWYgdWludDY0X3QgIHVpbnRfbGVhc3Q2NF90OworI2VuZGlmCisgIC8qIGxlYXN0IHR5cGVzICovCisjZW5kaWYKKworI2lmIGRlZmluZWQgX1NURElOVF9ORUVEX0lOVF9GQVNUX1QKK3R5cGVkZWYgIGludDhfdCAgICBpbnRfZmFzdDhfdDsKK3R5cGVkZWYgIGludCAgICAgICBpbnRfZmFzdDE2X3Q7Cit0eXBlZGVmICBpbnQzMl90ICAgaW50X2Zhc3QzMl90OworI2lmZGVmIF9IQVZFX1VJTlQ2NF9UCit0eXBlZGVmICBpbnQ2NF90ICAgaW50X2Zhc3Q2NF90OworI2VuZGlmCisKK3R5cGVkZWYgdWludDhfdCAgIHVpbnRfZmFzdDhfdDsKK3R5cGVkZWYgdW5zaWduZWQgIHVpbnRfZmFzdDE2X3Q7Cit0eXBlZGVmIHVpbnQzMl90ICB1aW50X2Zhc3QzMl90OworI2lmZGVmIF9IQVZFX1VJTlQ2NF9UCit0eXBlZGVmIHVpbnQ2NF90ICB1aW50X2Zhc3Q2NF90OworI2VuZGlmCisgIC8qIGZhc3QgdHlwZXMgKi8KKyNlbmRpZgorCisjaWZkZWYgX1NURElOVF9ORUVEX0lOVE1BWF9UCisjaWZkZWYgX0hBVkVfVUlOVDY0X1QKK3R5cGVkZWYgIGludDY0X3QgICAgICAgaW50bWF4X3Q7Cit0eXBlZGVmIHVpbnQ2NF90ICAgICAgdWludG1heF90OworI2Vsc2UKK3R5cGVkZWYgICAgICAgICAgbG9uZyAgaW50bWF4X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWludG1heF90OworI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIF9TVERJTlRfTkVFRF9JTlRQVFJfVAorI2lmbmRlZiBfX2ludHB0cl90X2RlZmluZWQKKyNkZWZpbmUgX19pbnRwdHJfdF9kZWZpbmVkCisvKiB3ZSBlbmNvdXJhZ2UgdXNpbmcgImxvbmciIHRvIHN0b3JlIHBvaW50ZXIgdmFsdWVzLCBuZXZlciB1c2UgImludCIgISAqLworI2lmICAgX1NURElOVF9MT05HX01PREVMKzAgPT0gMjQyIHx8IF9TVERJTlRfTE9OR19NT0RFTCswID09IDQ4NAordHlwZWRlZiAgdW5zaWduZWQgaW50ICAgdWludHB0cl90OwordHlwZWRlZiAgICAgICAgICAgaW50ICAgIGludHB0cl90OworI2VsaWYgX1NURElOVF9MT05HX01PREVMKzAgPT0gMjQ0IHx8IF9TVERJTlRfTE9OR19NT0RFTCswID09IDQ0NAordHlwZWRlZiAgdW5zaWduZWQgbG9uZyAgdWludHB0cl90OwordHlwZWRlZiAgICAgICAgICAgbG9uZyAgIGludHB0cl90OworI2VsaWYgX1NURElOVF9MT05HX01PREVMKzAgPT0gNDQ4ICYmIGRlZmluZWQgX0hBVkVfVUlOVDY0X1QKK3R5cGVkZWYgICAgICAgIHVpbnQ2NF90IHVpbnRwdHJfdDsKK3R5cGVkZWYgICAgICAgICBpbnQ2NF90ICBpbnRwdHJfdDsKKyNlbHNlIC8qIG1hdGNoZXMgdHlwaWNhbCBzeXN0ZW0gdHlwZXMgSUxQMzIgYW5kIExQNjQgLSBidXQgbm90IElQMTYgb3IgTExQNjQgKi8KK3R5cGVkZWYgIHVuc2lnbmVkIGxvbmcgIHVpbnRwdHJfdDsKK3R5cGVkZWYgICAgICAgICAgIGxvbmcgICBpbnRwdHJfdDsKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworLyogVGhlIElTTyBDOTkgc3RhbmRhcmQgc3BlY2lmaWVzIHRoYXQgaW4gQysrIGltcGxlbWVudGF0aW9ucyB0aGVzZQorICAgc2hvdWxkIG9ubHkgYmUgZGVmaW5lZCBpZiBleHBsaWNpdGx5IHJlcXVlc3RlZC4gICovCisjaWYgIWRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfX1NURENfQ09OU1RBTlRfTUFDUk9TCisjaWZuZGVmIFVJTlQzMl9DCisKKy8qIFNpZ25lZC4gICovCisjIGRlZmluZSBJTlQ4X0MoYykgICAgICBjCisjIGRlZmluZSBJTlQxNl9DKGMpICAgICBjCisjIGRlZmluZSBJTlQzMl9DKGMpICAgICBjCisjIGlmZGVmIF9IQVZFX0xPTkdMT05HX1VJTlQ2NF9UCisjICBkZWZpbmUgSU5UNjRfQyhjKSAgICBjICMjIEwKKyMgZWxzZQorIyAgZGVmaW5lIElOVDY0X0MoYykgICAgYyAjIyBMTAorIyBlbmRpZgorCisvKiBVbnNpZ25lZC4gICovCisjIGRlZmluZSBVSU5UOF9DKGMpICAgICBjICMjIFUKKyMgZGVmaW5lIFVJTlQxNl9DKGMpICAgIGMgIyMgVQorIyBkZWZpbmUgVUlOVDMyX0MoYykgICAgYyAjIyBVCisjIGlmZGVmIF9IQVZFX0xPTkdMT05HX1VJTlQ2NF9UCisjICBkZWZpbmUgVUlOVDY0X0MoYykgICBjICMjIFVMCisjIGVsc2UKKyMgIGRlZmluZSBVSU5UNjRfQyhjKSAgIGMgIyMgVUxMCisjIGVuZGlmCisKKy8qIE1heGltYWwgdHlwZS4gICovCisjIGlmZGVmIF9IQVZFX0xPTkdMT05HX1VJTlQ2NF9UCisjICBkZWZpbmUgSU5UTUFYX0MoYykgICBjICMjIEwKKyMgIGRlZmluZSBVSU5UTUFYX0MoYykgIGMgIyMgVUwKKyMgZWxzZQorIyAgZGVmaW5lIElOVE1BWF9DKGMpICAgYyAjIyBMTAorIyAgZGVmaW5lIFVJTlRNQVhfQyhjKSAgYyAjIyBVTEwKKyMgZW5kaWYKKworICAvKiBsaXRlcmFsbnVtYmVycyAqLworI2VuZGlmCisjZW5kaWYKKworLyogVGhlc2UgbGltaXRzIGFyZSBtZXJpbHkgdGhvc2Ugb2YgYSB0d28gY29tcGxlbWVudCBieXRlLW9yaWVudGVkIHN5c3RlbSAqLworCisvKiBNaW5pbXVtIG9mIHNpZ25lZCBpbnRlZ3JhbCB0eXBlcy4gICovCisjIGRlZmluZSBJTlQ4X01JTiAgICAgICAgICAgICAgICgtMTI4KQorIyBkZWZpbmUgSU5UMTZfTUlOICAgICAgICAgICAgICAoLTMyNzY3LTEpCisjIGRlZmluZSBJTlQzMl9NSU4gICAgICAgICAgICAgICgtMjE0NzQ4MzY0Ny0xKQorIyBkZWZpbmUgSU5UNjRfTUlOICAgICAgICAgICAgICAoLV9fSU5UNjRfQyg5MjIzMzcyMDM2ODU0Nzc1ODA3KS0xKQorLyogTWF4aW11bSBvZiBzaWduZWQgaW50ZWdyYWwgdHlwZXMuICAqLworIyBkZWZpbmUgSU5UOF9NQVggICAgICAgICAgICAgICAoMTI3KQorIyBkZWZpbmUgSU5UMTZfTUFYICAgICAgICAgICAgICAoMzI3NjcpCisjIGRlZmluZSBJTlQzMl9NQVggICAgICAgICAgICAgICgyMTQ3NDgzNjQ3KQorIyBkZWZpbmUgSU5UNjRfTUFYICAgICAgICAgICAgICAoX19JTlQ2NF9DKDkyMjMzNzIwMzY4NTQ3NzU4MDcpKQorCisvKiBNYXhpbXVtIG9mIHVuc2lnbmVkIGludGVncmFsIHR5cGVzLiAgKi8KKyMgZGVmaW5lIFVJTlQ4X01BWCAgICAgICAgICAgICAgKDI1NSkKKyMgZGVmaW5lIFVJTlQxNl9NQVggICAgICAgICAgICAgKDY1NTM1KQorIyBkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgICAgICAoNDI5NDk2NzI5NVUpCisjIGRlZmluZSBVSU5UNjRfTUFYICAgICAgICAgICAgIChfX1VJTlQ2NF9DKDE4NDQ2NzQ0MDczNzA5NTUxNjE1KSkKKworLyogTWluaW11bSBvZiBzaWduZWQgaW50ZWdyYWwgdHlwZXMgaGF2aW5nIGEgbWluaW11bSBzaXplLiAgKi8KKyMgZGVmaW5lIElOVF9MRUFTVDhfTUlOICAgICAgICAgSU5UOF9NSU4KKyMgZGVmaW5lIElOVF9MRUFTVDE2X01JTiAgICAgICAgSU5UMTZfTUlOCisjIGRlZmluZSBJTlRfTEVBU1QzMl9NSU4gICAgICAgIElOVDMyX01JTgorIyBkZWZpbmUgSU5UX0xFQVNUNjRfTUlOICAgICAgICBJTlQ2NF9NSU4KKy8qIE1heGltdW0gb2Ygc2lnbmVkIGludGVncmFsIHR5cGVzIGhhdmluZyBhIG1pbmltdW0gc2l6ZS4gICovCisjIGRlZmluZSBJTlRfTEVBU1Q4X01BWCAgICAgICAgIElOVDhfTUFYCisjIGRlZmluZSBJTlRfTEVBU1QxNl9NQVggICAgICAgIElOVDE2X01BWAorIyBkZWZpbmUgSU5UX0xFQVNUMzJfTUFYICAgICAgICBJTlQzMl9NQVgKKyMgZGVmaW5lIElOVF9MRUFTVDY0X01BWCAgICAgICAgSU5UNjRfTUFYCisKKy8qIE1heGltdW0gb2YgdW5zaWduZWQgaW50ZWdyYWwgdHlwZXMgaGF2aW5nIGEgbWluaW11bSBzaXplLiAgKi8KKyMgZGVmaW5lIFVJTlRfTEVBU1Q4X01BWCAgICAgICAgVUlOVDhfTUFYCisjIGRlZmluZSBVSU5UX0xFQVNUMTZfTUFYICAgICAgIFVJTlQxNl9NQVgKKyMgZGVmaW5lIFVJTlRfTEVBU1QzMl9NQVggICAgICAgVUlOVDMyX01BWAorIyBkZWZpbmUgVUlOVF9MRUFTVDY0X01BWCAgICAgICBVSU5UNjRfTUFYCisKKyAgLyogc2hvcnRjaXJjdWl0Ki8KKyNlbmRpZgorICAvKiBvbmNlICovCisjZW5kaWYKKyNlbmRpZgorU1RESU5UX0VPRgorZmkKKyAgICBpZiBjbXAgLXMgJGFjX3N0ZGludF9oICRhY19zdGRpbnQgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgIEFDX01TR19OT1RJQ0UoWyRhY19zdGRpbnRfaCBpcyB1bmNoYW5nZWRdKQorICAgIGVsc2UKKyAgICAgIGFjX2Rpcj1gQVNfRElSTkFNRShbIiRhY19zdGRpbnRfaCJdKWAKKyAgICAgIEFTX01LRElSX1AoWyIkYWNfZGlyIl0pCisgICAgICBybSAtZiAkYWNfc3RkaW50X2gKKyAgICAgIG12ICRhY19zdGRpbnQgJGFjX3N0ZGludF9oCisgICAgZmkKK10sWyMgdmFyaWFibGVzIGZvciBjcmVhdGUgc3RkaW50LmggcmVwbGFjZW1lbnQKK1BBQ0tBR0U9IiRQQUNLQUdFIgorVkVSU0lPTj0iJFZFUlNJT04iCithY19zdGRpbnRfaD0iJGFjX3N0ZGludF9oIgorX2FjX3N0ZGludF9oPUFTX1RSX0NQUChfJFBBQ0tBR0UtJGFjX3N0ZGludF9oKQorYWNfY3Zfc3RkaW50X21lc3NhZ2U9IiRhY19jdl9zdGRpbnRfbWVzc2FnZSIKK2FjX2N2X2hlYWRlcl9zdGRpbnRfdD0iJGFjX2N2X2hlYWRlcl9zdGRpbnRfdCIKK2FjX2N2X2hlYWRlcl9zdGRpbnRfeD0iJGFjX2N2X2hlYWRlcl9zdGRpbnRfeCIKK2FjX2N2X2hlYWRlcl9zdGRpbnRfbz0iJGFjX2N2X2hlYWRlcl9zdGRpbnRfbyIKK2FjX2N2X2hlYWRlcl9zdGRpbnRfdT0iJGFjX2N2X2hlYWRlcl9zdGRpbnRfdSIKK2FjX2N2X3R5cGVfdWludDY0X3Q9IiRhY19jdl90eXBlX3VpbnQ2NF90IgorYWNfY3ZfdHlwZV91X2ludDY0X3Q9IiRhY19jdl90eXBlX3VfaW50NjRfdCIKK2FjX2N2X2NoYXJfZGF0YV9tb2RlbD0iJGFjX2N2X2NoYXJfZGF0YV9tb2RlbCIKK2FjX2N2X2xvbmdfZGF0YV9tb2RlbD0iJGFjX2N2X2xvbmdfZGF0YV9tb2RlbCIKK2FjX2N2X3R5cGVfaW50X2xlYXN0MzJfdD0iJGFjX2N2X3R5cGVfaW50X2xlYXN0MzJfdCIKK2FjX2N2X3R5cGVfaW50X2Zhc3QzMl90PSIkYWNfY3ZfdHlwZV9pbnRfZmFzdDMyX3QiCithY19jdl90eXBlX2ludG1heF90PSIkYWNfY3ZfdHlwZV9pbnRtYXhfdCIKK10pCitdKQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2NoZWNrLm00IGIvY29tbW9uL200L2NoZWNrLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZDI2ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vbTQvY2hlY2subTQKQEAgLTAsMCArMSwxODEgQEAKK2RubCBfQU1fVFJZX0NIRUNLKE1JTklNVU0tVkVSU0lPTiwgRVhUUkEtQ0ZMQUdTLCBFWFRSQS1MSUJTLCBDSEVDSy1MSUItTkFNRQorZG5sICAgICAgICAgICAgICAgWywgQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkRdXSkKK2RubCBUZXN0IGZvciBjaGVjaywgYW5kIGRlZmluZSBDSEVDS19DRkxBR1MgYW5kIENIRUNLX0xJQlMKK2RubCBEb25lIHRoaXMgd2F5IGJlY2F1c2Ugb2YgdGhlIGJyb2tlbm5lc3MgdGhhdCBpcworZG5sIGh0dHBzOi8vbGF1bmNocGFkLm5ldC9kaXN0cm9zL3VidW50dS8rc291cmNlL2NoZWNrLytidWcvNTg0MAorZG5sCisKK0FDX0RFRlVOKFtfQU1fVFJZX0NIRUNLXSwKK1sKKyAgbWluX2NoZWNrX3ZlcnNpb249JDEKKyAgZXh0cmFfY2ZsYWdzPSQyCisgIGV4dHJhX2xpYnM9JDMKKyAgY2hlY2tfbGliX25hbWU9JDQKKworICBDSEVDS19DRkxBR1M9IiRleHRyYV9jZmxhZ3MiCisgIENIRUNLX0xJQlM9IiRleHRyYV9saWJzIC1sJGNoZWNrX2xpYl9uYW1lIgorCisgIGFjX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorCisgIENGTEFHUz0iJENGTEFHUyAkQ0hFQ0tfQ0ZMQUdTIgorICBMSUJTPSIkQ0hFQ0tfTElCUyAkTElCUyIKKworICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGNoZWNrIG5hbWVkICRjaGVja19saWJfbmFtZSAgLSB2ZXJzaW9uID49ICRtaW5fY2hlY2tfdmVyc2lvbikKKworICBybSAtZiBjb25mLmNoZWNrLXRlc3QKKyAgZG5sIHVuc2V0IG5vX2NoZWNrLCBzaW5jZSBpbiBvdXIgc2Vjb25kIHJ1biBpdCB3b3VsZCBoYXZlIGJlZW4gc2V0IHRvIHllcworICBkbmwgYmVmb3JlCisgIG5vX2NoZWNrPQorICBBQ19UUllfUlVOKFsKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8Y2hlY2suaD4KKworaW50IG1haW4gKCkKK3sKKyAgaW50IG1ham9yLCBtaW5vciwgbWljcm87CisgIGNoYXIgKnRtcF92ZXJzaW9uOworCisgIHN5c3RlbSAoInRvdWNoIGNvbmYuY2hlY2stdGVzdCIpOworCisgIC8qIEhQL1VYIDkgKCVAIyEpIHdyaXRlcyB0byBzc2NhbmYgc3RyaW5ncyAqLworICB0bXBfdmVyc2lvbiA9IHN0cmR1cCgiJG1pbl9jaGVja192ZXJzaW9uIik7CisgIGlmIChzc2NhbmYodG1wX3ZlcnNpb24sICIlZC4lZC4lZCIsICZtYWpvciwgJm1pbm9yLCAmbWljcm8pICE9IDMpIHsKKyAgICAgcHJpbnRmKCIlcywgYmFkIHZlcnNpb24gc3RyaW5nXG4iLCAiJG1pbl9jaGVja192ZXJzaW9uIik7CisgICAgIHJldHVybiAxOworICAgfQorCisgIGlmICgoQ0hFQ0tfTUFKT1JfVkVSU0lPTiAhPSBjaGVja19tYWpvcl92ZXJzaW9uKSB8fAorICAgICAgKENIRUNLX01JTk9SX1ZFUlNJT04gIT0gY2hlY2tfbWlub3JfdmVyc2lvbikgfHwKKyAgICAgIChDSEVDS19NSUNST19WRVJTSU9OICE9IGNoZWNrX21pY3JvX3ZlcnNpb24pKQorICAgIHsKKyAgICAgIHByaW50ZigiXG4qKiogVGhlIGNoZWNrIGhlYWRlciBmaWxlICh2ZXJzaW9uICVkLiVkLiVkKSBkb2VzIG5vdCBtYXRjaFxuIiwKKwkgICAgIENIRUNLX01BSk9SX1ZFUlNJT04sIENIRUNLX01JTk9SX1ZFUlNJT04sIENIRUNLX01JQ1JPX1ZFUlNJT04pOworICAgICAgcHJpbnRmKCIqKiogdGhlIGNoZWNrIGxpYnJhcnkgKHZlcnNpb24gJWQuJWQuJWQpLlxuIiwKKwkgICAgIGNoZWNrX21ham9yX3ZlcnNpb24sIGNoZWNrX21pbm9yX3ZlcnNpb24sIGNoZWNrX21pY3JvX3ZlcnNpb24pOworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgIGlmICgoY2hlY2tfbWFqb3JfdmVyc2lvbiA+IG1ham9yKSB8fAorICAgICAgKChjaGVja19tYWpvcl92ZXJzaW9uID09IG1ham9yKSAmJiAoY2hlY2tfbWlub3JfdmVyc2lvbiA+IG1pbm9yKSkgfHwKKyAgICAgICgoY2hlY2tfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKGNoZWNrX21pbm9yX3ZlcnNpb24gPT0gbWlub3IpICYmIChjaGVja19taWNyb192ZXJzaW9uID49IG1pY3JvKSkpCisgICAgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcHJpbnRmKCJcbioqKiBBbiBvbGQgdmVyc2lvbiBvZiBjaGVjayAoJWQuJWQuJWQpIHdhcyBmb3VuZC5cbiIsCisgICAgICAgICAgICAgY2hlY2tfbWFqb3JfdmVyc2lvbiwgY2hlY2tfbWlub3JfdmVyc2lvbiwgY2hlY2tfbWljcm9fdmVyc2lvbik7CisgICAgICBwcmludGYoIioqKiBZb3UgbmVlZCBhIHZlcnNpb24gb2YgY2hlY2sgYmVpbmcgYXQgbGVhc3QgJWQuJWQuJWQuXG4iLCBtYWpvciwgbWlub3IsIG1pY3JvKTsKKyAgICAgIHByaW50ZigiKioqXG4iKTsKKyAgICAgIHByaW50ZigiKioqIElmIHlvdSBoYXZlIGFscmVhZHkgaW5zdGFsbGVkIGEgc3VmZmljaWVudGx5IG5ldyB2ZXJzaW9uLCB0aGlzIGVycm9yXG4iKTsKKyAgICAgIHByaW50ZigiKioqIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHdyb25nIGNvcHkgb2YgdGhlIGNoZWNrIGxpYnJhcnkgYW5kIGhlYWRlclxuIik7CisgICAgICBwcmludGYoIioqKiBmaWxlIGlzIGJlaW5nIGZvdW5kLiBSZXJ1biBjb25maWd1cmUgd2l0aCB0aGUgLS13aXRoLWNoZWNrPVBBVEggb3B0aW9uXG4iKTsKKyAgICAgIHByaW50ZigiKioqIHRvIHNwZWNpZnkgdGhlIHByZWZpeCB3aGVyZSB0aGUgY29ycmVjdCB2ZXJzaW9uIHdhcyBpbnN0YWxsZWQuXG4iKTsKKyAgICB9CisKKyAgcmV0dXJuIDE7Cit9CitdLCwgbm9fY2hlY2s9eWVzLCBbZWNobyAkYWNfbiAiY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWVkIE9LLi4uICRhY19jIl0pCisKKyAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCisgIExJQlM9IiRhY19zYXZlX0xJQlMiCisKKyAgaWYgdGVzdCAieCRub19jaGVjayIgPSB4IDsgdGhlbgorICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgIGlmZWxzZShbJDVdLCAsIDosIFskNV0pCisgIGVsc2UKKyAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgIGlmIHRlc3QgLWYgY29uZi5jaGVjay10ZXN0IDsgdGhlbgorICAgICAgOgorICAgIGVsc2UKKyAgICAgIGVjaG8gIioqKiBDb3VsZCBub3QgcnVuIGNoZWNrIHRlc3QgcHJvZ3JhbSwgY2hlY2tpbmcgd2h5Li4uIgorICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRDSEVDS19DRkxBR1MiCisgICAgICBMSUJTPSIkQ0hFQ0tfTElCUyAkTElCUyIKKyAgICAgIEFDX1RSWV9MSU5LKFsKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8Y2hlY2suaD4KK10sICwgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gY29tcGlsZWQsIGJ1dCBkaWQgbm90IHJ1bi4gVGhpcyB1c3VhbGx5IG1lYW5zIgorICAgICAgICBlY2hvICIqKiogdGhhdCB0aGUgcnVuLXRpbWUgbGlua2VyIGlzIG5vdCBmaW5kaW5nIGNoZWNrLiBZb3UnbGwgbmVlZCB0byBzZXQgeW91ciIKKyAgICAgICAgZWNobyAiKioqIExEX0xJQlJBUllfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3IgZWRpdCAvZXRjL2xkLnNvLmNvbmYgdG8gcG9pbnQiCisgICAgICAgIGVjaG8gIioqKiB0byB0aGUgaW5zdGFsbGVkIGxvY2F0aW9uICBBbHNvLCBtYWtlIHN1cmUgeW91IGhhdmUgcnVuIGxkY29uZmlnIGlmIHRoYXQiCisgICAgICAgIGVjaG8gIioqKiBpcyByZXF1aXJlZCBvbiB5b3VyIHN5c3RlbSIKKwllY2hvICIqKioiCisgICAgICAgIGVjaG8gIioqKiBJZiB5b3UgaGF2ZSBhbiBvbGQgdmVyc2lvbiBpbnN0YWxsZWQsIGl0IGlzIGJlc3QgdG8gcmVtb3ZlIGl0LCBhbHRob3VnaCIKKyAgICAgICAgZWNobyAiKioqIHlvdSBtYXkgYWxzbyBiZSBhYmxlIHRvIGdldCB0aGluZ3MgdG8gd29yayBieSBtb2RpZnlpbmcgTERfTElCUkFSWV9QQVRIIl0sCisgICAgICBbIGVjaG8gIioqKiBUaGUgdGVzdCBwcm9ncmFtIGZhaWxlZCB0byBjb21waWxlIG9yIGxpbmsuIFNlZSB0aGUgZmlsZSBjb25maWcubG9nIGZvciIKKyAgICAgICAgZWNobyAiKioqIHRoZSBleGFjdCBlcnJvciB0aGF0IG9jY3VyZWQuIiBdKQorCisgICAgICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKKyAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCisgICAgZmkKKworICAgIENIRUNLX0NGTEFHUz0iIgorICAgIENIRUNLX0xJQlM9IiIKKworICAgIHJtIC1mIGNvbmYuY2hlY2stdGVzdAorICAgIGlmZWxzZShbJDZdLCAsIEFDX01TR19FUlJPUihbY2hlY2sgbm90IGZvdW5kXSksIFskNl0pCisgIGZpCitdKQorCisKK2RubCBBTV9QQVRIX0NIRUNLKFtNSU5JTVVNLVZFUlNJT04sIFtBQ1RJT04tSUYtRk9VTkQgWywgQUNUSU9OLUlGLU5PVC1GT1VORF1dXSkKK2RubCBUZXN0IGZvciBjaGVjaywgYW5kIGRlZmluZSBDSEVDS19DRkxBR1MgYW5kIENIRUNLX0xJQlMKK2RubAorCitBQ19ERUZVTihbQU1fUEFUSF9DSEVDS10sCitbCisgIEFDX0FSR19XSVRIKGNoZWNrLAorICBbICAtLXdpdGgtY2hlY2s9UEFUSCAgICAgICBwcmVmaXggd2hlcmUgY2hlY2sgaXMgaW5zdGFsbGVkIFtkZWZhdWx0PWF1dG9dXSkKKworICBBQ19BUkdfV0lUSChjaGVja2xpYm5hbWUsCisgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1jaGVjay1saWItbmFtZT1OQU1FXSwKKyAgICAgIFtuYW1lIG9mIHRoZSBQSUMgY2hlY2sgbGlicmFyeSAoZGVmYXVsdD1jaGVjayldKSkKKworICBtaW5fY2hlY2tfdmVyc2lvbj1pZmVsc2UoWyQxXSwgLDAuOC4yLCQxKQorCisgIGlmIHRlc3QgeCR3aXRoX2NoZWNrID0geG5vOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChkaXNhYmxlZCkKKyAgICBpZmVsc2UoWyQzXSwgLCBBQ19NU0dfRVJST1IoW2Rpc2FibGluZyBjaGVjayBpcyBub3Qgc3VwcG9ydGVkXSksIFskM10pCisgIGVsc2UKKyAgICBpZiB0ZXN0ICJ4JHdpdGhfY2hlY2siICE9IHg7IHRoZW4KKyAgICAgIENIRUNLX0VYVFJBX0NGTEFHUz0iLUkkd2l0aF9jaGVjay9pbmNsdWRlIgorICAgICAgQ0hFQ0tfRVhUUkFfTElCUz0iLUwkd2l0aF9jaGVjay9saWIiCisgICAgZWxzZQorICAgICAgQ0hFQ0tfRVhUUkFfQ0ZMQUdTPSIiCisgICAgICBDSEVDS19FWFRSQV9MSUJTPSIiCisgICAgZmkKKworICAgIGlmIHRlc3QgeCR3aXRoX2NoZWNrbGlibmFtZSA9IHg7IHRoZW4KKyAgICAgIF9BTV9UUllfQ0hFQ0soJG1pbl9jaGVja192ZXJzaW9uLCAkQ0hFQ0tfRVhUUkFfQ0ZMQUdTLCAkQ0hFQ0tfRVhUUkFfTElCUywKKyAgICAgICAgY2hlY2tfcGljLCBbaGF2ZV9jaGVjaz10cnVlXSwgW2hhdmVfY2hlY2s9ZmFsc2VdKQorICAgICAgaWYgdGVzdCB4JGhhdmVfY2hlY2sgPSB4dHJ1ZTsgdGhlbgorICAgICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQorICAgICAgZWxzZQorICAgICAgICBfQU1fVFJZX0NIRUNLKCRtaW5fY2hlY2tfdmVyc2lvbiwgJENIRUNLX0VYVFJBX0NGTEFHUywgJENIRUNLX0VYVFJBX0xJQlMsCisgICAgICAgICAgY2hlY2ssIFtoYXZlX2NoZWNrPXRydWVdLCBbaGF2ZV9jaGVjaz1mYWxzZV0pCisgICAgICAgIGlmIHRlc3QgeCRoYXZlX2NoZWNrID0geHRydWU7IHRoZW4KKyAgICAgICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQorICAgICAgICBlbHNlCisgICAgICAgICAgaWZlbHNlKFskM10sICwgQUNfTVNHX0VSUk9SKFtjaGVjayBub3QgZm91bmRdKSwgWyQzXSkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgX0FNX1RSWV9DSEVDSygkbWluX2NoZWNrX3ZlcnNpb24sICRDSEVDS19FWFRSQV9DRkxBR1MsICRDSEVDS19FWFRSQV9MSUJTLAorICAgICAgICAkd2l0aF9jaGVja2xpYm5hbWUsIFtoYXZlX2NoZWNrPXRydWVdLCBbaGF2ZV9jaGVjaz1mYWxzZV0pCisgICAgICBpZiB0ZXN0IHgkaGF2ZV9jaGVjayA9IHh0cnVlOyB0aGVuCisgICAgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCisgICAgICBlbHNlCisgICAgICAgIGlmZWxzZShbJDNdLCAsIEFDX01TR19FUlJPUihbY2hlY2sgbm90IGZvdW5kXSksIFskM10pCisgICAgICBmaQorICAgIGZpCisKKyAgICBBQ19TVUJTVChDSEVDS19DRkxBR1MpCisgICAgQUNfU1VCU1QoQ0hFQ0tfTElCUykKKyAgICBybSAtZiBjb25mLmNoZWNrLXRlc3QKKyAgZmkKK10pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ2xpYi1nZXR0ZXh0Lm00IGIvY29tbW9uL200L2dsaWItZ2V0dGV4dC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGQ0NDJmCi0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uL200L2dsaWItZ2V0dGV4dC5tNApAQCAtMCwwICsxLDQzMiBAQAorIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMsMjAwNCBSZWQgSGF0LCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKyMgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKyMgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgVGhpcyBmaWxlIGNhbiBiZSBjb3BpZWQgYW5kIHVzZWQgZnJlZWx5IHdpdGhvdXQgcmVzdHJpY3Rpb25zLiAgSXQgY2FuCisjIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIgdGhlIEdOVSBQdWJsaWMgTGljZW5zZQorIyBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dCBmdW5jdGlvbmFsaXR5LgorIworIyBNYWNybyB0byBhZGQgZm9yIHVzaW5nIEdOVSBnZXR0ZXh0LgorIyBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NSwgMTk5NgorIworIyBNb2RpZmllZCB0byBuZXZlciB1c2UgaW5jbHVkZWQgbGliaW50bC4KKyMgT3dlbiBUYXlsb3IgPG90YXlsb3JAcmVkaGF0LmNvbT4sIDEyLzE1LzE5OTgKKyMKKyMgTWFqb3IgcmV3b3JrIHRvIHJlbW92ZSB1bnVzZWQgY29kZQorIyBPd2VuIFRheWxvciA8b3RheWxvckByZWRoYXQuY29tPiwgMTIvMTEvMjAwMgorIworIyBBZGRlZCBiZXR0ZXIgaGFuZGxpbmcgb2YgQUxMX0xJTkdVQVMgZnJvbSBHTlUgZ2V0dGV4dCB2ZXJzaW9uCisjIHdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlLCBPd2VuIFRheWxvciA8b3RheWxvci5yZWRoYXQuY29tPiA1LzMwLzMwMDIKKyMKKyMgTW9kaWZpZWQgdG8gcmVxdWlyZSBuZ2V0dGV4dAorIyBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNvbT4gMDgvMDYvMjAwNAorIworIyBXZSBuZWVkIHRoaXMgaGVyZSBhcyB3ZWxsLCBzaW5jZSBzb21lb25lIG1pZ2h0IHVzZSBhdXRvY29uZi0yLjV4CisjIHRvIGNvbmZpZ3VyZSBHTGliIHRoZW4gYW4gb2xkZXIgdmVyc2lvbiB0byBjb25maWd1cmUgYSBwYWNrYWdlCisjIHVzaW5nIEFNX0dMSUJfR05VX0dFVFRFWFQKK0FDX1BSRVJFUSgyLjUzKQorCitkbmwKK2RubCBXZSBnbyB0byBncmVhdCBsZW5ndGhzIHRvIG1ha2Ugc3VyZSB0aGF0IGFjbG9jYWwgd29uJ3QKK2RubCB0cnkgdG8gcHVsbCBpbiB0aGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgdGhlc2UgbWFjcm9zCitkbmwgd2hlbiBydW5uaW5nIGFjbG9jYWwgaW4gdGhlIGdsaWIgZGlyZWN0b3J5LgorZG5sCittNF9jb3B5KFtBQ19ERUZVTl0sW2dsaWJfREVGVU5dKQorbTRfY29weShbQUNfUkVRVUlSRV0sW2dsaWJfUkVRVUlSRV0pCitkbmwKK2RubCBBdCB0aGUgZW5kLCBpZiB3ZSdyZSBub3Qgd2l0aGluIGdsaWIsIHdlJ2xsIGRlZmluZSB0aGUgcHVibGljCitkbmwgZGVmaW5pdGlvbnMgaW4gdGVybXMgb2Ygb3VyIHByaXZhdGUgZGVmaW5pdGlvbnMuCitkbmwKKworIyBHTElCX0xDX01FU1NBR0VTCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dsaWJfREVGVU4oW0dMSUJfTENfTUVTU0FHRVNdLAorICBbQUNfQ0hFQ0tfSEVBREVSUyhbbG9jYWxlLmhdKQorICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9sb2NhbGVfaCA9IHllczsgdGhlbgorICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgTENfTUVTU0FHRVNdLCBhbV9jdl92YWxfTENfTUVTU0FHRVMsCisgICAgICBbQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxsb2NhbGUuaD5dLCBbcmV0dXJuIExDX01FU1NBR0VTXSwKKyAgICAgICBhbV9jdl92YWxfTENfTUVTU0FHRVM9eWVzLCBhbV9jdl92YWxfTENfTUVTU0FHRVM9bm8pXSkKKyAgICBpZiB0ZXN0ICRhbV9jdl92YWxfTENfTUVTU0FHRVMgPSB5ZXM7IHRoZW4KKyAgICAgIEFDX0RFRklORShIQVZFX0xDX01FU1NBR0VTLCAxLAorICAgICAgICBbRGVmaW5lIGlmIHlvdXIgPGxvY2FsZS5oPiBmaWxlIGRlZmluZXMgTENfTUVTU0FHRVMuXSkKKyAgICBmaQorICBmaV0pCisKKyMgR0xJQl9QQVRIX1BST0dfV0lUSF9URVNUCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIEdMSUJfUEFUSF9QUk9HX1dJVEhfVEVTVChWQVJJQUJMRSwgUFJPRy1UTy1DSEVDSy1GT1IsCitkbmwgICBURVNULVBFUkZPUk1FRC1PTi1GT1VORF9QUk9HUkFNIFssIFZBTFVFLUlGLU5PVC1GT1VORCBbLCBQQVRIXV0pCitnbGliX0RFRlVOKFtHTElCX1BBVEhfUFJPR19XSVRIX1RFU1RdLAorWyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJDIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICQyOyBhY193b3JkPVskXTIKK0FDX01TR19DSEVDS0lORyhbZm9yICRhY193b3JkXSkKK0FDX0NBQ0hFX1ZBTChhY19jdl9wYXRoXyQxLAorW2Nhc2UgIlskXSQxIiBpbgorICAvKikKKyAgYWNfY3ZfcGF0aF8kMT0iWyRdJDEiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU306IgorICBmb3IgYWNfZGlyIGluIGlmZWxzZShbJDVdLCAsICRQQVRILCBbJDVdKTsgZG8KKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorICAgICAgaWYgWyQzXTsgdGhlbgorCWFjX2N2X3BhdGhfJDE9IiRhY19kaXIvJGFjX3dvcmQiCisJYnJlYWsKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRhY19zYXZlX2lmcyIKK2RubCBJZiBubyA0dGggYXJnIGlzIGdpdmVuLCBsZWF2ZSB0aGUgY2FjaGUgdmFyaWFibGUgdW5zZXQsCitkbmwgc28gQUNfUEFUSF9QUk9HUyB3aWxsIGtlZXAgbG9va2luZy4KK2lmZWxzZShbJDRdLCAsICwgWyAgdGVzdCAteiAiWyRdYWNfY3ZfcGF0aF8kMSIgJiYgYWNfY3ZfcGF0aF8kMT0iJDQiCitdKWRubAorICA7OworZXNhY10pZG5sCiskMT0iJGFjX2N2X3BhdGhfJDEiCitpZiB0ZXN0IGlmZWxzZShbJDRdLCAsIFstbiAiWyRdJDEiXSwgWyJbJF0kMSIgIT0gIiQ0Il0pOyB0aGVuCisgIEFDX01TR19SRVNVTFQoWyRdJDEpCitlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCitmaQorQUNfU1VCU1QoJDEpZG5sCitdKQorCisjIEdMSUJfV0lUSF9OTFMKKyMtLS0tLS0tLS0tLS0tLS0tLQorZ2xpYl9ERUZVTihbR0xJQl9XSVRIX05MU10sCisgIGRubCBOTFMgaXMgb2JsaWdhdG9yeQorICBbVVNFX05MUz15ZXMKKyAgICBBQ19TVUJTVChVU0VfTkxTKQorCisgICAgZ3RfY3ZfaGF2ZV9nZXR0ZXh0PW5vCisKKyAgICBDQVRPQkpFWFQ9Tk9ORQorICAgIFhHRVRURVhUPToKKyAgICBJTlRMTElCUz0KKworICAgIEFDX0NIRUNLX0hFQURFUihsaWJpbnRsLmgsCisgICAgIFtndF9jdl9mdW5jX2RnZXR0ZXh0X2xpYmludGw9Im5vIgorICAgICAgbGliaW50bF9leHRyYV9saWJzPSIiCisKKyAgICAgICMKKyAgICAgICMgRmlyc3QgY2hlY2sgaW4gbGliYworICAgICAgIworICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBuZ2V0dGV4dCBpbiBsaWJjXSwgZ3RfY3ZfZnVuY19uZ2V0dGV4dF9saWJjLAorICAgICAgICBbQUNfVFJZX0xJTksoWworI2luY2x1ZGUgPGxpYmludGwuaD4KK10sCisgICAgICAgICBbcmV0dXJuICFuZ2V0dGV4dCAoIiIsIiIsIDEpXSwKKwkgIGd0X2N2X2Z1bmNfbmdldHRleHRfbGliYz15ZXMsCisgICAgICAgICAgZ3RfY3ZfZnVuY19uZ2V0dGV4dF9saWJjPW5vKQorICAgICAgICBdKQorCisgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19uZ2V0dGV4dF9saWJjIiA9ICJ5ZXMiIDsgdGhlbgorCSAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgZGdldHRleHQgaW4gbGliY10sIGd0X2N2X2Z1bmNfZGdldHRleHRfbGliYywKKyAgICAgICAgCVtBQ19UUllfTElOSyhbCisjaW5jbHVkZSA8bGliaW50bC5oPgorXSwKKwkgICAgICAgICAgW3JldHVybiAhZGdldHRleHQgKCIiLCIiKV0sCisJCSAgZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJjPXllcywKKwkgICAgICAgICAgZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJjPW5vKQorICAgICAgICAJXSkKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX25nZXR0ZXh0X2xpYmMiID0gInllcyIgOyB0aGVuCisgICAgICAgIEFDX0NIRUNLX0ZVTkNTKGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KQorICAgICAgZmkKKworICAgICAgIworICAgICAgIyBJZiB3ZSBkb24ndCBoYXZlIGV2ZXJ5dGhpbmcgd2Ugd2FudCwgY2hlY2sgaW4gbGliaW50bAorICAgICAgIworICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZGdldHRleHRfbGliYyIgIT0gInllcyIgXAorCSB8fCB0ZXN0ICIkZ3RfY3ZfZnVuY19uZ2V0dGV4dF9saWJjIiAhPSAieWVzIiBcCisgICAgICAgICB8fCB0ZXN0ICIkYWNfY3ZfZnVuY19iaW5kX3RleHRkb21haW5fY29kZXNldCIgIT0gInllcyIgOyB0aGVuCisKKyAgICAgICAgQUNfQ0hFQ0tfTElCKGludGwsIGJpbmR0ZXh0ZG9tYWluLAorCSAgICBbQUNfQ0hFQ0tfTElCKGludGwsIG5nZXR0ZXh0LAorCQkgICAgW0FDX0NIRUNLX0xJQihpbnRsLCBkZ2V0dGV4dCwKKwkJCSAgICAgICAgICBndF9jdl9mdW5jX2RnZXR0ZXh0X2xpYmludGw9eWVzKV0pXSkKKworCWlmIHRlc3QgIiRndF9jdl9mdW5jX2RnZXR0ZXh0X2xpYmludGwiICE9ICJ5ZXMiIDsgdGhlbgorCSAgQUNfTVNHX0NIRUNLSU5HKFtpZiAtbGljb252IGlzIG5lZWRlZCB0byB1c2UgZ2V0dGV4dF0pCisJICBBQ19NU0dfUkVTVUxUKFtdKQorICAJICBBQ19DSEVDS19MSUIoaW50bCwgbmdldHRleHQsCisgICAgICAgICAgCVtBQ19DSEVDS19MSUIoaW50bCwgZGNnZXR0ZXh0LAorCQkgICAgICAgW2d0X2N2X2Z1bmNfZGdldHRleHRfbGliaW50bD15ZXMKKwkJCWxpYmludGxfZXh0cmFfbGlicz0tbGljb252XSwKKwkJCTosLWxpY29udildLAorCQk6LC1saWNvbnYpCisgICAgICAgIGZpCisKKyAgICAgICAgIworICAgICAgICAjIElmIHdlIGZvdW5kIGxpYmludGwsIHRoZW4gY2hlY2sgaW4gaXQgZm9yIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KCk7CisgICAgICAgICMgd2UnbGwgcHJlZmVyIGxpYmMgaWYgbmVpdGhlciBoYXZlIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KCksCisgICAgICAgICMgYW5kIGJvdGggaGF2ZSBkZ2V0dGV4dCBhbmQgbmdldHRleHQKKyAgICAgICAgIworICAgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJpbnRsIiA9ICJ5ZXMiIDsgdGhlbgorICAgICAgICAgIGdsaWJfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgICAgICBMSUJTPSIkTElCUyAtbGludGwgJGxpYmludGxfZXh0cmFfbGlicyIKKyAgICAgICAgICB1bnNldCBhY19jdl9mdW5jX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0CisgICAgICAgICAgQUNfQ0hFQ0tfRlVOQ1MoYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQpCisgICAgICAgICAgTElCUz0iJGdsaWJfc2F2ZV9MSUJTIgorCisgICAgICAgICAgaWYgdGVzdCAiJGFjX2N2X2Z1bmNfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQiID0gInllcyIgOyB0aGVuCisgICAgICAgICAgICBndF9jdl9mdW5jX2RnZXR0ZXh0X2xpYmM9bm8KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJjIiA9ICJ5ZXMiIFwKKwkJJiYgdGVzdCAiJGd0X2N2X2Z1bmNfbmdldHRleHRfbGliYyIgPSAieWVzIjsgdGhlbgorICAgICAgICAgICAgICBndF9jdl9mdW5jX2RnZXR0ZXh0X2xpYmludGw9bm8KKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2RnZXR0ZXh0X2xpYmMiID0gInllcyIgXAorCXx8IHRlc3QgIiRndF9jdl9mdW5jX2RnZXR0ZXh0X2xpYmludGwiID0gInllcyI7IHRoZW4KKyAgICAgICAgZ3RfY3ZfaGF2ZV9nZXR0ZXh0PXllcworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZGdldHRleHRfbGliaW50bCIgPSAieWVzIjsgdGhlbgorICAgICAgICBJTlRMTElCUz0iLWxpbnRsICRsaWJpbnRsX2V4dHJhX2xpYnMiCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfaGF2ZV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisJQUNfREVGSU5FKEhBVkVfR0VUVEVYVCwxLAorCSAgW0RlZmluZSBpZiB0aGUgR05VIGdldHRleHQoKSBmdW5jdGlvbiBpcyBhbHJlYWR5IHByZXNlbnQgb3IgcHJlaW5zdGFsbGVkLl0pCisJR0xJQl9QQVRIX1BST0dfV0lUSF9URVNUKE1TR0ZNVCwgbXNnZm10LAorCSAgW3Rlc3QgLXogImAkYWNfZGlyLyRhY193b3JkIC1oIDI+JjEgfCBncmVwICdkdiAnYCJdLCBubylkbmwKKwlpZiB0ZXN0ICIkTVNHRk1UIiAhPSAibm8iOyB0aGVuCisgICAgICAgICAgZ2xpYl9zYXZlX0xJQlM9IiRMSUJTIgorICAgICAgICAgIExJQlM9IiRMSUJTICRJTlRMTElCUyIKKwkgIEFDX0NIRUNLX0ZVTkNTKGRjZ2V0dGV4dCkKKwkgIE1TR0ZNVF9PUFRTPQorCSAgQUNfTVNHX0NIRUNLSU5HKFtpZiBtc2dmbXQgYWNjZXB0cyAtY10pCisJICBHTElCX1JVTl9QUk9HKFskTVNHRk1UIC1jIC1vIC9kZXYvbnVsbF0sWworbXNnaWQgIiIKK21zZ3N0ciAiIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIlByb2plY3QtSWQtVmVyc2lvbjogdGVzdCAxLjBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA3LTAyLTE1IDEyOjAxKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IHRlc3QgPGZvb0BiYXIueHg+XG4iCisiTGFuZ3VhZ2UtVGVhbTogQyA8TExAbGkub3JnPlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorXSwgW01TR0ZNVF9PUFRTPS1jOyBBQ19NU0dfUkVTVUxUKFt5ZXNdKV0sIFtBQ19NU0dfUkVTVUxUKFtub10pXSkKKwkgIEFDX1NVQlNUKE1TR0ZNVF9PUFRTKQorCSAgQUNfUEFUSF9QUk9HKEdNU0dGTVQsIGdtc2dmbXQsICRNU0dGTVQpCisJICBHTElCX1BBVEhfUFJPR19XSVRIX1RFU1QoWEdFVFRFWFQsIHhnZXR0ZXh0LAorCSAgICBbdGVzdCAteiAiYCRhY19kaXIvJGFjX3dvcmQgLWggMj4mMSB8IGdyZXAgJyhIRUxQKSdgIl0sIDopCisJICBBQ19UUllfTElOSygsIFtleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CisJCQkgcmV0dXJuIF9ubF9tc2dfY2F0X2NudHJdLAorCSAgICBbQ0FUT0JKRVhUPS5nbW8KKyAgICAgICAgICAgICBEQVRBRElSTkFNRT1zaGFyZV0sCisJICAgIFtjYXNlICRob3N0IGluCisJICAgICotKi1zb2xhcmlzKikKKwkgICAgZG5sIE9uIFNvbGFyaXMsIGlmIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IGlzIGluIGxpYmMsCisJICAgIGRubCBHTlUgZm9ybWF0IG1lc3NhZ2UgY2F0YWxvZyBpcyBhbHdheXMgc3VwcG9ydGVkLAorICAgICAgICAgICAgZG5sIHNpbmNlIGJvdGggYXJlIGFkZGVkIHRvIHRoZSBsaWJjIGFsbCB0b2dldGhlci4KKwkgICAgZG5sIEhlbmNlLCB3ZSdkIGxpa2UgdG8gZ28gd2l0aCBEQVRBRElSTkFNRT1zaGFyZSBhbmQKKwkgICAgZG5sIGFuZCBDQVRPQkpFWFQ9LmdtbyBpbiB0aGlzIGNhc2UuCisgICAgICAgICAgICBBQ19DSEVDS19GVU5DKGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0LAorCSAgICAgIFtDQVRPQkpFWFQ9LmdtbworICAgICAgICAgICAgICAgREFUQURJUk5BTUU9c2hhcmVdLAorCSAgICAgIFtDQVRPQkpFWFQ9Lm1vCisgICAgICAgICAgICAgICBEQVRBRElSTkFNRT1saWJdKQorCSAgICA7OworCSAgICAqKQorCSAgICBDQVRPQkpFWFQ9Lm1vCisgICAgICAgICAgICBEQVRBRElSTkFNRT1saWIKKwkgICAgOzsKKwkgICAgZXNhY10pCisgICAgICAgICAgTElCUz0iJGdsaWJfc2F2ZV9MSUJTIgorCSAgSU5TVE9CSkVYVD0ubW8KKwllbHNlCisJICBndF9jdl9oYXZlX2dldHRleHQ9bm8KKwlmaQorICAgICAgZmkKKyAgICBdKQorCisgICAgaWYgdGVzdCAiJGd0X2N2X2hhdmVfZ2V0dGV4dCIgPSAieWVzIiA7IHRoZW4KKyAgICAgIEFDX0RFRklORShFTkFCTEVfTkxTLCAxLAorICAgICAgICBbYWx3YXlzIGRlZmluZWQgdG8gaW5kaWNhdGUgdGhhdCBpMThuIGlzIGVuYWJsZWRdKQorICAgIGZpCisKKyAgICBkbmwgVGVzdCB3aGV0aGVyIHdlIHJlYWxseSBmb3VuZCBHTlUgeGdldHRleHQuCisgICAgaWYgdGVzdCAiJFhHRVRURVhUIiAhPSAiOiI7IHRoZW4KKyAgICAgIGRubCBJZiBpdCBpcyBub3QgR05VIHhnZXR0ZXh0IHdlIGRlZmluZSBpdCBhcyA6IHNvIHRoYXQgdGhlCisgICAgICBkbmwgTWFrZWZpbGVzIHN0aWxsIGNhbiB3b3JrLgorICAgICAgaWYgJFhHRVRURVhUIC0tb21pdC1oZWFkZXIgL2Rldi9udWxsIDI+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6IDsKKyAgICAgIGVsc2UKKyAgICAgICAgQUNfTVNHX1JFU1VMVCgKKwkgIFtmb3VuZCB4Z2V0dGV4dCBwcm9ncmFtIGlzIG5vdCBHTlUgeGdldHRleHQ7IGlnbm9yZSBpdF0pCisgICAgICAgIFhHRVRURVhUPSI6IgorICAgICAgZmkKKyAgICBmaQorCisgICAgIyBXZSBuZWVkIHRvIHByb2Nlc3MgdGhlIHBvLyBkaXJlY3RvcnkuCisgICAgUE9TVUI9cG8KKworICAgIEFDX09VVFBVVF9DT01NQU5EUygKKyAgICAgIFtjYXNlICIkQ09ORklHX0ZJTEVTIiBpbiAqcG8vTWFrZWZpbGUuaW4qKQorICAgICAgICBzZWQgLWUgIi9QT1RGSUxFUyA9L3IgcG8vUE9URklMRVMiIHBvL01ha2VmaWxlLmluID4gcG8vTWFrZWZpbGUKKyAgICAgIGVzYWNdKQorCisgICAgZG5sIFRoZXNlIHJ1bGVzIGFyZSBzb2xlbHkgZm9yIHRoZSBkaXN0cmlidXRpb24gZ29hbC4gIFdoaWxlIGRvaW5nIHRoaXMKKyAgICBkbmwgd2Ugb25seSBoYXZlIHRvIGtlZXAgZXhhY3RseSBvbmUgbGlzdCBvZiB0aGUgYXZhaWxhYmxlIGNhdGFsb2dzCisgICAgZG5sIGluIGNvbmZpZ3VyZS5pbi4KKyAgICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisgICAgICBHTU9GSUxFUz0iJEdNT0ZJTEVTICRsYW5nLmdtbyIKKyAgICAgIFBPRklMRVM9IiRQT0ZJTEVTICRsYW5nLnBvIgorICAgIGRvbmUKKworICAgIGRubCBNYWtlIGFsbCB2YXJpYWJsZXMgd2UgdXNlIGtub3duIHRvIGF1dG9jb25mLgorICAgIEFDX1NVQlNUKENBVEFMT0dTKQorICAgIEFDX1NVQlNUKENBVE9CSkVYVCkKKyAgICBBQ19TVUJTVChEQVRBRElSTkFNRSkKKyAgICBBQ19TVUJTVChHTU9GSUxFUykKKyAgICBBQ19TVUJTVChJTlNUT0JKRVhUKQorICAgIEFDX1NVQlNUKElOVExMSUJTKQorICAgIEFDX1NVQlNUKFBPX0lOX0RBVEFESVJfVFJVRSkKKyAgICBBQ19TVUJTVChQT19JTl9EQVRBRElSX0ZBTFNFKQorICAgIEFDX1NVQlNUKFBPRklMRVMpCisgICAgQUNfU1VCU1QoUE9TVUIpCisgIF0pCisKKyMgQU1fR0xJQl9HTlVfR0VUVEVYVAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIERvIGNoZWNrcyBuZWNlc3NhcnkgZm9yIHVzZSBvZiBnZXR0ZXh0LiBJZiBhIHN1aXRhYmxlIGltcGxlbWVudGF0aW9uCisjIG9mIGdldHRleHQgaXMgZm91bmQgaW4gZWl0aGVyIGluIGxpYmludGwgb3IgaW4gdGhlIEMgbGlicmFyeSwKKyMgaXQgd2lsbCBzZXQgSU5UTExJQlMgdG8gdGhlIGxpYnJhcmllcyBuZWVkZWQgZm9yIHVzZSBvZiBnZXR0ZXh0CisjIGFuZCBBQ19ERUZJTkUoKSBIQVZFX0dFVFRFWFQgYW5kIEVOQUJMRV9OTFMuIChUaGUgc2hlbGwgdmFyaWFibGUKKyMgZ3RfY3ZfaGF2ZV9nZXR0ZXh0IHdpbGwgYmUgc2V0IHRvICJ5ZXMiLikgSXQgd2lsbCBhbHNvIGNhbGwgQUNfU1VCU1QoKQorIyBvbiB2YXJpb3VzIHZhcmlhYmxlcyBuZWVkZWQgYnkgdGhlIE1ha2VmaWxlLmluLmluIGluc3RhbGxlZCBieQorIyBnbGliLWdldHRleHRpemUuCitkbmwKK2dsaWJfREVGVU4oW0dMSUJfR05VX0dFVFRFWFRdLAorICBbQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCisgICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pZG5sCisKKyAgIEdMSUJfTENfTUVTU0FHRVMKKyAgIEdMSUJfV0lUSF9OTFMKKworICAgaWYgdGVzdCAiJGd0X2N2X2hhdmVfZ2V0dGV4dCIgPSAieWVzIjsgdGhlbgorICAgICBpZiB0ZXN0ICJ4JEFMTF9MSU5HVUFTIiA9ICJ4IjsgdGhlbgorICAgICAgIExJTkdVQVM9CisgICAgIGVsc2UKKyAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGNhdGFsb2dzIHRvIGJlIGluc3RhbGxlZCkKKyAgICAgICBORVdfTElOR1VBUz0KKyAgICAgICBmb3IgcHJlc2VudGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworICAgICAgICAgdXNlaXQ9bm8KKyAgICAgICAgIGlmIHRlc3QgIiVVTlNFVCUiICE9ICIke0xJTkdVQVMtJVVOU0VUJX0iOyB0aGVuCisgICAgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRMSU5HVUFTIgorICAgICAgICAgZWxzZQorICAgICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkQUxMX0xJTkdVQVMiCisgICAgICAgICBmaQorICAgICAgICAgZm9yIGRlc2lyZWRsYW5nIGluICRkZXNpcmVkbGFuZ3VhZ2VzOyBkbworIAkgICAjIFVzZSB0aGUgcHJlc2VudGxhbmcgY2F0YWxvZyBpZiBkZXNpcmVkbGFuZyBpcworICAgICAgICAgICAjICAgYS4gZXF1YWwgdG8gcHJlc2VudGxhbmcsIG9yCisgICAgICAgICAgICMgICBiLiBhIHZhcmlhbnQgb2YgcHJlc2VudGxhbmcgKGJlY2F1c2UgaW4gdGhpcyBjYXNlLAorICAgICAgICAgICAjICAgICAgcHJlc2VudGxhbmcgY2FuIGJlIHVzZWQgYXMgYSBmYWxsYmFjayBmb3IgbWVzc2FnZXMKKyAgICAgICAgICAgIyAgICAgIHdoaWNoIGFyZSBub3QgdHJhbnNsYXRlZCBpbiB0aGUgZGVzaXJlZGxhbmcgY2F0YWxvZykuCisgICAgICAgICAgIGNhc2UgIiRkZXNpcmVkbGFuZyIgaW4KKyAgICAgICAgICAgICAiJHByZXNlbnRsYW5nIiopIHVzZWl0PXllczs7CisgICAgICAgICAgIGVzYWMKKyAgICAgICAgIGRvbmUKKyAgICAgICAgIGlmIHRlc3QgJHVzZWl0ID0geWVzOyB0aGVuCisgICAgICAgICAgIE5FV19MSU5HVUFTPSIkTkVXX0xJTkdVQVMgJHByZXNlbnRsYW5nIgorICAgICAgICAgZmkKKyAgICAgICBkb25lCisgICAgICAgTElOR1VBUz0kTkVXX0xJTkdVQVMKKyAgICAgICBBQ19NU0dfUkVTVUxUKCRMSU5HVUFTKQorICAgICBmaQorCisgICAgIGRubCBDb25zdHJ1Y3QgbGlzdCBvZiBuYW1lcyBvZiBjYXRhbG9nIGZpbGVzIHRvIGJlIGNvbnN0cnVjdGVkLgorICAgICBpZiB0ZXN0IC1uICIkTElOR1VBUyI7IHRoZW4KKyAgICAgICBmb3IgbGFuZyBpbiAkTElOR1VBUzsgZG8gQ0FUQUxPR1M9IiRDQVRBTE9HUyAkbGFuZyRDQVRPQkpFWFQiOyBkb25lCisgICAgIGZpCisgICBmaQorCisgICBkbmwgSWYgdGhlIEFDX0NPTkZJR19BVVhfRElSIG1hY3JvIGZvciBhdXRvY29uZiBpcyB1c2VkIHdlIHBvc3NpYmx5CisgICBkbmwgZmluZCB0aGUgbWtpbnN0YWxsZGlycyBzY3JpcHQgaW4gYW5vdGhlciBzdWJkaXIgYnV0ICgkdG9wX3NyY2RpcikuCisgICBkbmwgVHJ5IHRvIGxvY2F0ZSBpcy4KKyAgIE1LSU5TVEFMTERJUlM9CisgICBpZiB0ZXN0IC1uICIkYWNfYXV4X2RpciI7IHRoZW4KKyAgICAgTUtJTlNUQUxMRElSUz0iJGFjX2F1eF9kaXIvbWtpbnN0YWxsZGlycyIKKyAgIGZpCisgICBpZiB0ZXN0IC16ICIkTUtJTlNUQUxMRElSUyI7IHRoZW4KKyAgICAgTUtJTlNUQUxMRElSUz0iXCQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyIKKyAgIGZpCisgICBBQ19TVUJTVChNS0lOU1RBTExESVJTKQorCisgICBkbmwgR2VuZXJhdGUgbGlzdCBvZiBmaWxlcyB0byBiZSBwcm9jZXNzZWQgYnkgeGdldHRleHQgd2hpY2ggd2lsbAorICAgZG5sIGJlIGluY2x1ZGVkIGluIHBvL01ha2VmaWxlLgorICAgdGVzdCAtZCBwbyB8fCBta2RpciBwbworICAgaWYgdGVzdCAieCRzcmNkaXIiICE9ICJ4LiI7IHRoZW4KKyAgICAgaWYgdGVzdCAieGBlY2hvICRzcmNkaXIgfCBzZWQgJ3NALy4qQEAnYCIgPSAieCI7IHRoZW4KKyAgICAgICBwb3NyY3ByZWZpeD0iJHNyY2Rpci8iCisgICAgIGVsc2UKKyAgICAgICBwb3NyY3ByZWZpeD0iLi4vJHNyY2Rpci8iCisgICAgIGZpCisgICBlbHNlCisgICAgIHBvc3JjcHJlZml4PSIuLi8iCisgICBmaQorICAgcm0gLWYgcG8vUE9URklMRVMKKyAgIHNlZCAtZSAiL14jL2QiIC1lICIvXlwkL2QiIC1lICJzLC4qLAkkcG9zcmNwcmVmaXgmIFxcXFwsIiAtZSAiXCRzL1woLipcKSBcXFxcL1wxLyIgXAorCTwgJHNyY2Rpci9wby9QT1RGSUxFUy5pbiA+IHBvL1BPVEZJTEVTCisgIF0pCisKKyMgQU1fR0xJQl9ERUZJTkVfTE9DQUxFRElSKFZBUklBQkxFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBWQVJJQUJMRSB0byB0aGUgbG9jYXRpb24gd2hlcmUgY2F0YWxvZyBmaWxlcyB3aWxsCisjIGJlIGluc3RhbGxlZCBieSBwby9NYWtlZmlsZS4KK2dsaWJfREVGVU4oW0dMSUJfREVGSU5FX0xPQ0FMRURJUl0sCitbZ2xpYl9SRVFVSVJFKFtHTElCX0dOVV9HRVRURVhUXSlkbmwKK2dsaWJfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCitnbGliX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKK2dsaWJfc2F2ZV9kYXRhcm9vdGRpcj0iJGRhdGFyb290ZGlyIgordGVzdCAieCRwcmVmaXgiID0geE5PTkUgJiYgcHJlZml4PSRhY19kZWZhdWx0X3ByZWZpeAordGVzdCAieCRleGVjX3ByZWZpeCIgPSB4Tk9ORSAmJiBleGVjX3ByZWZpeD0kcHJlZml4CitkYXRhcm9vdGRpcj1gZXZhbCBlY2hvICIke2RhdGFyb290ZGlyfSJgCitpZiB0ZXN0ICJ4JENBVE9CSkVYVCIgPSAieC5tbyIgOyB0aGVuCisgIGxvY2FsZWRpcj1gZXZhbCBlY2hvICIke2xpYmRpcn0vbG9jYWxlImAKK2Vsc2UKKyAgbG9jYWxlZGlyPWBldmFsIGVjaG8gIiR7ZGF0YWRpcn0vbG9jYWxlImAKK2ZpCitwcmVmaXg9IiRnbGliX3NhdmVfcHJlZml4IgorZXhlY19wcmVmaXg9IiRnbGliX3NhdmVfZXhlY19wcmVmaXgiCitkYXRhcm9vdGRpcj0iJGdsaWJfc2F2ZV9kYXRhcm9vdGRpciIKK0FDX0RFRklORV9VTlFVT1RFRCgkMSwgIiRsb2NhbGVkaXIiLAorICBbRGVmaW5lIHRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgY2F0YWxvZ3Mgd2lsbCBiZSBpbnN0YWxsZWRdKQorXSkKKworZG5sCitkbmwgTm93IHRoZSBkZWZpbml0aW9ucyB0aGF0IGFjbG9jYWwgd2lsbCBmaW5kCitkbmwKK2lmZGVmKGdsaWJfY29uZmlndXJlX2luLFtdLFsKK0FDX0RFRlVOKFtBTV9HTElCX0dOVV9HRVRURVhUXSxbR0xJQl9HTlVfR0VUVEVYVCgkQCldKQorQUNfREVGVU4oW0FNX0dMSUJfREVGSU5FX0xPQ0FMRURJUl0sW0dMSUJfREVGSU5FX0xPQ0FMRURJUigkQCldKQorXSlkbmwKKworIyBHTElCX1JVTl9QUk9HKFBST0dSQU0sIFRFU1QtRklMRSwgW0FDVElPTi1JRi1QQVNTXSwgW0FDVElPTi1JRi1GQUlMXSkKKyMKKyMgQ3JlYXRlIGEgdGVtcG9yYXJ5IGZpbGUgd2l0aCBURVNULUZJTEUgYXMgaXRzIGNvbnRlbnRzIGFuZCBwYXNzIHRoZQorIyBmaWxlIG5hbWUgdG8gUFJPR1JBTS4gIFBlcmZvcm0gQUNUSU9OLUlGLVBBU1MgaWYgUFJPR1JBTSBleGl0cyB3aXRoCisjIDAgYW5kIHBlcmZvcm0gQUNUSU9OLUlGLUZBSUwgZm9yIGFueSBvdGhlciBleGl0IHN0YXR1cy4KK0FDX0RFRlVOKFtHTElCX1JVTl9QUk9HXSwKK1tjYXQgPmNvbmZ0ZXN0LmZvbyA8PF9BQ0VPRgorJDIKK19BQ0VPRgoraWYgQUNfUlVOX0xPRyhbJDEgY29uZnRlc3QuZm9vXSk7IHRoZW4KKyAgbTRfaWZ2YWwoWyQzXSwgWyQzXSwgWzpdKQorbTRfaWZ2YWxuKFskNF0sIFtlbHNlICQ0XSlkbmwKK2VjaG8gIiRhc19tZTogZmFpbGVkIGlucHV0IHdhczoiID4mQVNfTUVTU0FHRV9MT0dfRkQKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuZm9vID4mQVNfTUVTU0FHRV9MT0dfRkQKK2ZpXSkKKwpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2dzdC1hcmNoLm00IGIvY29tbW9uL200L2dzdC1hcmNoLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlOTM1ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vbTQvZ3N0LWFyY2gubTQKQEAgLTAsMCArMSwxNDEgQEAKK2RubCBBR19HU1RfQVJDSAorZG5sIHNldHMgdXAgZGVmaW5lcyBhbmQgYXV0b21ha2UgY29uZGl0aW9uYWxzIGZvciBob3N0IGFyY2hpdGVjdHVyZQorZG5sIGNoZWNrcyBlbmRpYW5uZXNzCitkbmwgZGVmaW5lcyBIT1NUX0NQVQorCitBQ19ERUZVTihbQUdfR1NUX0FSQ0hdLAorWworICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pIGRubCB3ZSB1c2UgaG9zdF8gdmFyaWFibGVzCisKKyAgZG5sIERldGVybWluZSBDUFUKKyAgY2FzZSAieCR7aG9zdF9jcHV9IiBpbgorICAgIHhpPzg2IHwgeGs/IHwgeGk/ODZfNjQpCisgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICAgICBzb2xhcmlzKikKKyAgICAgICAgICAgIEFDX0NIRUNLX0RFQ0woW19faTM4Nl0sCVtJMzg2X0FCST0ieWVzIl0sIFtJMzg2X0FCST0ibm8iXSkKKyAgICAgICAgICAgIEFDX0NIRUNLX0RFQ0woW19fYW1kNjRdLCBbQU1ENjRfQUJJPSJ5ZXMiXSwgW0FNRDY0X0FCST0ibm8iXSkKKworICAgICAgICAgICAgaWYgdGVzdCAieCRJMzg2X0FCSSIgPSAieHllcyIgOyB0aGVuCisgICAgICAgICAgICAgICBIQVZFX0NQVV9JMzg2PXllcworICAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfQ1BVX0kzODYsIDEsIFtEZWZpbmUgaWYgdGhlIGhvc3QgQ1BVIGlzIGFuIHg4Nl0pCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgaWYgdGVzdCAieCRBTUQ2NF9BQkkiID0gInh5ZXMiIDsgdGhlbgorICAgICAgICAgICAgICAgIEhBVkVfQ1BVX1g4Nl82ND15ZXMKKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9DUFVfWDg2XzY0LCAxLCBbRGVmaW5lIGlmIHRoZSBob3N0IENQVSBpcyBhIHg4Nl82NF0pCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKyAgICAgICAgICopCisgICAgICAgICAgICBIQVZFX0NQVV9JMzg2PXllcworICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfQ1BVX0kzODYsIDEsIFtEZWZpbmUgaWYgdGhlIGhvc3QgQ1BVIGlzIGFuIHg4Nl0pCisKKyAgICAgICAgICAgIGRubCBGSVhNRSBjb3VsZCB1c2Ugc29tZSBiZXR0ZXIgZGV0ZWN0aW9uCisgICAgICAgICAgICBkbmwgKGllIENQVUlEKQorICAgICAgICAgICAgY2FzZSAieCR7aG9zdF9jcHV9IiBpbgorICAgICAgICAgICAgICB4aTM4NiB8IHhpNDg2KSA7OworICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfUkRUU0MsIDEsIFtEZWZpbmUgaWYgUkRUU0MgaXMgYXZhaWxhYmxlXSkgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIHhwb3dlcnBjKQorICAgICAgSEFWRV9DUFVfUFBDPXllcworICAgICAgQUNfREVGSU5FKEhBVkVfQ1BVX1BQQywgMSwgW0RlZmluZSBpZiB0aGUgaG9zdCBDUFUgaXMgYSBQb3dlclBDXSkgOzsKKyAgICB4cG93ZXJwYzY0KQorICAgICAgSEFWRV9DUFVfUFBDNjQ9eWVzCisgICAgICBBQ19ERUZJTkUoSEFWRV9DUFVfUFBDNjQsIDEsIFtEZWZpbmUgaWYgdGhlIGhvc3QgQ1BVIGlzIGEgNjQgYml0IFBvd2VyUENdKSA7OworICAgIHhhbHBoYSopCisgICAgICBIQVZFX0NQVV9BTFBIQT15ZXMKKyAgICAgIEFDX0RFRklORShIQVZFX0NQVV9BTFBIQSwgMSwgW0RlZmluZSBpZiB0aGUgaG9zdCBDUFUgaXMgYW4gQWxwaGFdKSA7OworICAgIHhhcm0qKQorICAgICAgSEFWRV9DUFVfQVJNPXllcworICAgICAgQUNfREVGSU5FKEhBVkVfQ1BVX0FSTSwgMSwgW0RlZmluZSBpZiB0aGUgaG9zdCBDUFUgaXMgYW4gQVJNXSkgOzsKKyAgICB4c3BhcmMqKQorICAgICAgSEFWRV9DUFVfU1BBUkM9eWVzCisgICAgICBBQ19ERUZJTkUoSEFWRV9DUFVfU1BBUkMsIDEsIFtEZWZpbmUgaWYgdGhlIGhvc3QgQ1BVIGlzIGEgU1BBUkNdKSA7OworICAgIHhtaXBzKikKKyAgICAgIEhBVkVfQ1BVX01JUFM9eWVzCisgICAgICBBQ19ERUZJTkUoSEFWRV9DUFVfTUlQUywgMSwgW0RlZmluZSBpZiB0aGUgaG9zdCBDUFUgaXMgYSBNSVBTXSkgOzsKKyAgICB4aHBwYSopCisgICAgICBIQVZFX0NQVV9IUFBBPXllcworICAgICAgQUNfREVGSU5FKEhBVkVfQ1BVX0hQUEEsIDEsIFtEZWZpbmUgaWYgdGhlIGhvc3QgQ1BVIGlzIGEgSFBQQV0pIDs7CisgICAgeHMzOTAqKQorICAgICAgSEFWRV9DUFVfUzM5MD15ZXMKKyAgICAgIEFDX0RFRklORShIQVZFX0NQVV9TMzkwLCAxLCBbRGVmaW5lIGlmIHRoZSBob3N0IENQVSBpcyBhIFMzOTBdKSA7OworICAgIHhpYTY0KikKKyAgICAgIEhBVkVfQ1BVX0lBNjQ9eWVzCisgICAgICBBQ19ERUZJTkUoSEFWRV9DUFVfSUE2NCwgMSwgW0RlZmluZSBpZiB0aGUgaG9zdCBDUFUgaXMgYSBJQTY0XSkgOzsKKyAgICB4bTY4ayopCisgICAgICBIQVZFX0NQVV9NNjhLPXllcworICAgICAgQUNfREVGSU5FKEhBVkVfQ1BVX002OEssIDEsIFtEZWZpbmUgaWYgdGhlIGhvc3QgQ1BVIGlzIGEgTTY4S10pIDs7CisgICAgeHg4Nl82NCkKKyAgICAgIEhBVkVfQ1BVX1g4Nl82ND15ZXMKKyAgICAgIEFDX0RFRklORShIQVZFX0NQVV9YODZfNjQsIDEsIFtEZWZpbmUgaWYgdGhlIGhvc3QgQ1BVIGlzIGEgeDg2XzY0XSkgOzsKKyAgICB4Y3JpcykKKyAgICAgIEhBVkVfQ1BVX0NSSVM9eWVzCisgICAgICBBQ19ERUZJTkUoSEFWRV9DUFVfQ1JJUywgMSwgW0RlZmluZSBpZiB0aGUgaG9zdCBDUFUgaXMgYSBDUklTXSkgOzsKKyAgICB4Y3Jpc3YzMikKKyAgICAgIEhBVkVfQ1BVX0NSSVNWMzI9eWVzCisgICAgICBBQ19ERUZJTkUoSEFWRV9DUFVfQ1JJU1YzMiwgMSwgW0RlZmluZSBpZiB0aGUgaG9zdCBDUFUgaXMgYSBDUklTdjMyXSkgOzsKKyAgZXNhYworCisgIGRubCBEZXRlcm1pbmUgZW5kaWFubmVzcworICBBQ19DX0JJR0VORElBTgorCisgIEFNX0NPTkRJVElPTkFMKEhBVkVfQ1BVX0kzODYsICAgICAgIHRlc3QgIngkSEFWRV9DUFVfSTM4NiIgPSAieHllcyIpCisgIEFNX0NPTkRJVElPTkFMKEhBVkVfQ1BVX1BQQywgICAgICAgIHRlc3QgIngkSEFWRV9DUFVfUFBDIiA9ICJ4eWVzIikKKyAgQU1fQ09ORElUSU9OQUwoSEFWRV9DUFVfUFBDNjQsICAgICAgdGVzdCAieCRIQVZFX0NQVV9QUEM2NCIgPSAieHllcyIpCisgIEFNX0NPTkRJVElPTkFMKEhBVkVfQ1BVX0FMUEhBLCAgICAgIHRlc3QgIngkSEFWRV9DUFVfQUxQSEEiID0gInh5ZXMiKQorICBBTV9DT05ESVRJT05BTChIQVZFX0NQVV9BUk0sICAgICAgICB0ZXN0ICJ4JEhBVkVfQ1BVX0FSTSIgPSAieHllcyIpCisgIEFNX0NPTkRJVElPTkFMKEhBVkVfQ1BVX1NQQVJDLCAgICAgIHRlc3QgIngkSEFWRV9DUFVfU1BBUkMiID0gInh5ZXMiKQorICBBTV9DT05ESVRJT05BTChIQVZFX0NQVV9IUFBBLCAgICAgICB0ZXN0ICJ4JEhBVkVfQ1BVX0hQUEEiID0gInh5ZXMiKQorICBBTV9DT05ESVRJT05BTChIQVZFX0NQVV9NSVBTLCAgICAgICB0ZXN0ICJ4JEhBVkVfQ1BVX01JUFMiID0gInh5ZXMiKQorICBBTV9DT05ESVRJT05BTChIQVZFX0NQVV9TMzkwLCAgICAgICB0ZXN0ICJ4JEhBVkVfQ1BVX1MzOTAiID0gInh5ZXMiKQorICBBTV9DT05ESVRJT05BTChIQVZFX0NQVV9JQTY0LCAgICAgICB0ZXN0ICJ4JEhBVkVfQ1BVX0lBNjQiID0gInh5ZXMiKQorICBBTV9DT05ESVRJT05BTChIQVZFX0NQVV9NNjhLLCAgICAgICB0ZXN0ICJ4JEhBVkVfQ1BVX002OEsiID0gInh5ZXMiKQorICBBTV9DT05ESVRJT05BTChIQVZFX0NQVV9YODZfNjQsICAgICB0ZXN0ICJ4JEhBVkVfQ1BVX1g4Nl82NCIgPSAieHllcyIpCisgIEFNX0NPTkRJVElPTkFMKEhBVkVfQ1BVX0NSSVMsICAgICAgIHRlc3QgIngkSEFWRV9DUFVfQ1JJUyIgPSAieHllcyIpCisgIEFNX0NPTkRJVElPTkFMKEhBVkVfQ1BVX0NSSVNWMzIsICAgIHRlc3QgIngkSEFWRV9DUFVfQ1JJU1YzMiIgPSAieHllcyIpCisKKyAgQUNfREVGSU5FX1VOUVVPVEVEKEhPU1RfQ1BVLCAiJGhvc3RfY3B1IiwgW3RoZSBob3N0IENQVV0pCitdKQorCitkbmwgY2hlY2sgaWYgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3Mgd29ya3MgY29ycmVjdGx5CitBQ19ERUZVTihbQUdfR1NUX1VOQUxJR05FRF9BQ0NFU1NdLCBbCisgIEFDX01TR19DSEVDS0lORyhbaWYgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3Mgd29ya3MgY29ycmVjdGx5XSkKKyAgaWYgdGVzdCB4IiRhc19jdl91bmFsaWduZWRfYWNjZXNzIiA9IHggOyB0aGVuCisgICAgY2FzZSAkaG9zdCBpbgorICAgICAgYWxwaGEqfGFybSp8aHAqfG1pcHMqfHNoKnxzcGFyYyp8aWE2NCopCisgICAgICAgIF9BU19FQ0hPX04oWyhibGFja2xpc3RlZCkgXSkKKyAgICAgICAgYXNfY3ZfdW5hbGlnbmVkX2FjY2Vzcz1ubworCTs7CisgICAgICBpPzg2Knx4ODZfNjQqfGFtZDY0Knxwb3dlcnBjKnxtNjhrKnxjcmlzKikKKyAgICAgICAgX0FTX0VDSE9fTihbKHdoaXRlbGlzdGVkKSBdKQorICAgICAgICBhc19jdl91bmFsaWduZWRfYWNjZXNzPXllcworCTs7CisgICAgZXNhYworICBlbHNlCisgICAgX0FTX0VDSE9fTihbKGNhY2hlZCkgXSkKKyAgZmkKKyAgaWYgdGVzdCB4IiRhc19jdl91bmFsaWduZWRfYWNjZXNzIiA9IHggOyB0aGVuCisgICAgQUNfVFJZX1JVTihbCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGNoYXIgYXJyYXlbXSA9ICJBQkNERUZHSCI7CisgIHVuc2lnbmVkIGludCBpYXJyYXlbMl07CisgIG1lbWNweShpYXJyYXksYXJyYXksOCk7CisjZGVmaW5lIEdFVCh4KSAoKih1bnNpZ25lZCBpbnQgKikoKGNoYXIgKilpYXJyYXkgKyAoeCkpKQorICBpZihHRVQoMCkgIT0gMHg0MTQyNDM0NCAmJiBHRVQoMCkgIT0gMHg0NDQzNDI0MSkgcmV0dXJuIDE7CisgIGlmKEdFVCgxKSAhPSAweDQyNDM0NDQ1ICYmIEdFVCgxKSAhPSAweDQ1NDQ0MzQyKSByZXR1cm4gMTsKKyAgaWYoR0VUKDIpICE9IDB4NDM0NDQ1NDYgJiYgR0VUKDIpICE9IDB4NDY0NTQ0NDMpIHJldHVybiAxOworICBpZihHRVQoMykgIT0gMHg0NDQ1NDY0NyAmJiBHRVQoMykgIT0gMHg0NzQ2NDU0NCkgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorICAgIF0sIGFzX2N2X3VuYWxpZ25lZF9hY2Nlc3M9InllcyIsIGFzX2N2X3VuYWxpZ25lZF9hY2Nlc3M9Im5vIikKKyAgZmkKKyAgQUNfTVNHX1JFU1VMVCgkYXNfY3ZfdW5hbGlnbmVkX2FjY2VzcykKKyAgaWYgdGVzdCAiJGFzX2N2X3VuYWxpZ25lZF9hY2Nlc3MiID0gInllcyI7IHRoZW4KKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9VTkFMSUdORURfQUNDRVNTLCAxLAorICAgICAgW2RlZmluZWQgaWYgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3Mgd29ya3MgY29ycmVjdGx5XSkKKyAgZmkKK10pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgYi9jb21tb24vbTQvZ3N0LWFyZ3MubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE2ZmE3OQotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9tNC9nc3QtYXJncy5tNApAQCAtMCwwICsxLDMzNSBAQAorZG5sIGNvbmZpZ3VyZS10aW1lIG9wdGlvbnMgc2hhcmVkIGFtb25nIGdzdHJlYW1lciBtb2R1bGVzCisKK2RubCBBR19HU1RfQVJHX0RFQlVHCitkbmwgQUdfR1NUX0FSR19QUk9GSUxJTkcKK2RubCBBR19HU1RfQVJHX1ZBTEdSSU5ECitkbmwgQUdfR1NUX0FSR19HQ09WCisKK2RubCBBR19HU1RfQVJHX0VYQU1QTEVTCisKK2RubCBBR19HU1RfQVJHX1dJVEhfUEtHX0NPTkZJR19QQVRICitkbmwgQUdfR1NUX0FSR19XSVRIX1BBQ0tBR0VfTkFNRQorZG5sIEFHX0dTVF9BUkdfV0lUSF9QQUNLQUdFX09SSUdJTgorCitkbmwgQUdfR1NUX0FSR19XSVRIX1BMVUdJTlMKK2RubCBBR19HU1RfQ0hFQ0tfUExVR0lOCitkbmwgQUdfR1NUX0RJU0FCTEVfUExVR0lOCisKK2RubCBBR19HU1RfQVJHX0VOQUJMRV9FWFRFUk5BTAorZG5sIEFHX0dTVF9BUkdfRU5BQkxFX0VYUEVSSU1FTlRBTAorZG5sIEFHX0dTVF9BUkdfRU5BQkxFX0JST0tFTgorCitBQ19ERUZVTihbQUdfR1NUX0FSR19ERUJVR10sCitbCisgIGRubCBkZWJ1Z2dpbmcgc3R1ZmYKKyAgQUNfQVJHX0VOQUJMRShkZWJ1ZywKKyAgICBBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWRlYnVnXSxbZGlzYWJsZSBhZGRpdGlvbiBvZiAtZyBkZWJ1Z2dpbmcgaW5mb10pLAorICAgIFsKKyAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgeWVzKSBVU0VfREVCVUc9eWVzIDs7CisgICAgICAgIG5vKSAgVVNFX0RFQlVHPW5vIDs7CisgICAgICAgICopICAgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWRlYnVnKSA7OworICAgICAgZXNhYworICAgIF0sCisgICAgW1VTRV9ERUJVRz15ZXNdKSBkbmwgRGVmYXVsdCB2YWx1ZQorXSkKKworQUNfREVGVU4oW0FHX0dTVF9BUkdfUFJPRklMSU5HXSwKK1sKKyAgQUNfQVJHX0VOQUJMRShwcm9maWxpbmcsCisgICAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXByb2ZpbGluZ10sCisgICAgICBbYWRkcyAtcGcgdG8gY29tcGlsZXIgY29tbWFuZGxpbmUsIGZvciBwcm9maWxpbmddKSwKKyAgICBbCisgICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgIHllcykgVVNFX1BST0ZJTElORz15ZXMgOzsKKyAgICAgICAgbm8pICBVU0VfUFJPRklMSU5HPW5vIDs7CisgICAgICAgICopICAgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXByb2ZpbGluZykgOzsKKyAgICAgIGVzYWMKKyAgICBdLAorICAgIFtVU0VfUFJPRklMSU5HPW5vXSkgZG5sIERlZmF1bHQgdmFsdWUKK10pCisKK0FDX0RFRlVOKFtBR19HU1RfQVJHX1ZBTEdSSU5EXSwKK1sKKyAgZG5sIHZhbGdyaW5kIGluY2x1c2lvbgorICBBQ19BUkdfRU5BQkxFKHZhbGdyaW5kLAorICAgIEFDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtdmFsZ3JpbmRdLFtkaXNhYmxlIHJ1bi10aW1lIHZhbGdyaW5kIGRldGVjdGlvbl0pLAorICAgIFsKKyAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgeWVzKSBVU0VfVkFMR1JJTkQ9IiRVU0VfREVCVUciIDs7CisgICAgICAgIG5vKSAgVVNFX1ZBTEdSSU5EPW5vIDs7CisgICAgICAgICopICAgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXZhbGdyaW5kKSA7OworICAgICAgZXNhYworICAgIF0sCisgICAgW1VTRV9WQUxHUklORD0iJFVTRV9ERUJVRyJdKSBkbmwgRGVmYXVsdCB2YWx1ZQorICBWQUxHUklORF9SRVE9IjMuMCIKKyAgaWYgdGVzdCAieCRVU0VfVkFMR1JJTkQiID0geHllczsgdGhlbgorICAgIFBLR19DSEVDS19NT0RVTEVTKFZBTEdSSU5ELCB2YWxncmluZCA+PSAkVkFMR1JJTkRfUkVRLAorICAgICAgVVNFX1ZBTEdSSU5EPSJ5ZXMiLAorICAgICAgVVNFX1ZBTEdSSU5EPSJubyIpCisgIGZpCisgIGlmIHRlc3QgIngkVVNFX1ZBTEdSSU5EIiA9IHh5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9WQUxHUklORCwgMSwgW0RlZmluZSBpZiB2YWxncmluZCBzaG91bGQgYmUgdXNlZF0pCisgICAgQUNfTVNHX05PVElDRShVc2luZyBleHRyYSBjb2RlIHBhdGhzIGZvciB2YWxncmluZCkKKyAgZmkKK10pCisKK0FDX0RFRlVOKFtBR19HU1RfQVJHX0dDT1ZdLAorWworICBBQ19BUkdfRU5BQkxFKGdjb3YsCisgICAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWdjb3ZdLAorICAgICAgW2NvbXBpbGUgd2l0aCBjb3ZlcmFnZSBwcm9maWxpbmcgaW5zdHJ1bWVudGF0aW9uIChnY2Mgb25seSldKSwKKyAgICBlbmFibGVfZ2Nvdj0kZW5hYmxldmFsLAorICAgIGVuYWJsZV9nY292PW5vKQorICBpZiB0ZXN0IHgkZW5hYmxlX2djb3YgPSB4eWVzIDsgdGhlbgorICAgIGlmIHRlc3QgIngkR0NDIiAhPSAieHllcyIKKyAgICB0aGVuCisgICAgICBBQ19NU0dfRVJST1IoW2djb3Ygb25seSB3b3JrcyBpZiBnY2MgaXMgdXNlZF0pCisgICAgZmkKKworICAgIEFTX0NPTVBJTEVSX0ZMQUcoWyItZnByb2ZpbGUtYXJjcyJdLAorICAgICAgW0dDT1ZfQ0ZMQUdTPSIkR0NPVl9DRkxBR1MgLWZwcm9maWxlLWFyY3MiXSwKKyAgICAgIHRydWUpCisgICAgQVNfQ09NUElMRVJfRkxBRyhbIi1mdGVzdC1jb3ZlcmFnZSJdLAorICAgICAgW0dDT1ZfQ0ZMQUdTPSIkR0NPVl9DRkxBR1MgLWZ0ZXN0LWNvdmVyYWdlIl0sCisgICAgICB0cnVlKQorICAgIGRubCByZW1vdmUgYW55IC1PIGZsYWdzIC0gRklYTUU6IGlzIHRoaXMgbmVlZGVkID8KKyAgICBHQ09WX0NGTEFHUz1gZWNobyAiJEdDT1ZfQ0ZMQUdTIiB8IHNlZCAtZSAncy8tT1tbMC05XV0qLy9nJ2AKKyAgICBkbmwgbGlidG9vbCAxLjUuMjIgYW5kIGxvd2VyIHN0cmlwIC1mcHJvZmlsZS1hcmNzIGZyb20gdGhlIGZsYWdzCisgICAgZG5sIHBhc3NlZCB0byB0aGUgbGlua2VyLCB3aGljaCBpcyBhIGJ1ZzsgLWZwcm9maWxlLWFyY3MgaW1wbGljaXRseQorICAgIGRubCBsaW5rcyBpbiAtbGdjb3YsIHNvIHdlIGRvIGl0IGV4cGxpY2l0bHkgaGVyZSBmb3IgdGhlIHNhbWUgZWZmZWN0CisgICAgR0NPVl9MSUJTPS1sZ2NvdgorICAgIEFDX1NVQlNUKEdDT1ZfQ0ZMQUdTKQorICAgIEFDX1NVQlNUKEdDT1ZfTElCUykKKyAgICBHQ09WPWBlY2hvICRDQyB8IHNlZCBzL2djYy9nY292L2dgCisgICAgQUNfU1VCU1QoR0NPVikKKworICAgIEdTVF9HQ09WX0VOQUJMRUQ9eWVzCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKEdTVF9HQ09WX0VOQUJMRUQsIDEsCisgICAgICBbRGVmaW5lZCBpZiBnY292IGlzIGVuYWJsZWQgdG8gZm9yY2UgYSByZWJ1aWxkIGR1ZSB0byBjb25maWcuaCBjaGFuZ2luZ10pCisgICAgZG5sIGlmIGdjb3YgaXMgdXNlZCwgd2UgZG8gbm90IHdhbnQgZGVmYXVsdCAtTzIgQ0ZMQUdTCisgICAgaWYgdGVzdCAieCRHU1RfR0NPVl9FTkFCTEVEIiA9ICJ4eWVzIgorICAgIHRoZW4KKyAgICAgIENGTEFHUz0iLU8wIgorICAgICAgQUNfU1VCU1QoQ0ZMQUdTKQorICAgICAgQ1hYRkxBR1M9Ii1PMCIKKyAgICAgIEFDX1NVQlNUKENYWEZMQUdTKQorICAgICAgRkZMQUdTPSItTzAiCisgICAgICBBQ19TVUJTVChGRkxBR1MpCisgICAgICBDQ0FTRkxBR1M9Ii1PMCIKKyAgICAgIEFDX1NVQlNUKENDQVNGTEFHUykKKyAgICAgIEFDX01TR19OT1RJQ0UoW2djb3YgZW5hYmxlZCwgc2V0dGluZyBDRkxBR1MgYW5kIGZyaWVuZHMgdG8gJENGTEFHU10pCisgICAgZmkKKyAgZmkKKyAgQU1fQ09ORElUSU9OQUwoR1NUX0dDT1ZfRU5BQkxFRCwgdGVzdCB4JGVuYWJsZV9nY292ID0geHllcykKK10pCisKK0FDX0RFRlVOKFtBR19HU1RfQVJHX0VYQU1QTEVTXSwKK1sKKyAgQUNfQVJHX0VOQUJMRShleGFtcGxlcywKKyAgICBBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWV4YW1wbGVzXSwgW2Rpc2FibGUgYnVpbGRpbmcgZXhhbXBsZXNdKSwKKyAgICAgIFsKKyAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICAgIHllcykgQlVJTERfRVhBTVBMRVM9eWVzIDs7CisgICAgICAgICAgbm8pICBCVUlMRF9FWEFNUExFUz1ubyA7OworICAgICAgICAgICopICAgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZGlzYWJsZS1leGFtcGxlcykgOzsKKyAgICAgICAgZXNhYworICAgICAgXSwKKyAgICAgIFtCVUlMRF9FWEFNUExFUz15ZXNdKSBkbmwgRGVmYXVsdCB2YWx1ZQorICBBTV9DT05ESVRJT05BTChCVUlMRF9FWEFNUExFUywgICAgICB0ZXN0ICJ4JEJVSUxEX0VYQU1QTEVTIiA9ICJ4eWVzIikKK10pCisKK0FDX0RFRlVOKFtBR19HU1RfQVJHX1dJVEhfUEtHX0NPTkZJR19QQVRIXSwKK1sKKyAgZG5sIHBvc3NpYmx5IG1vZGlmeSBwa2ctY29uZmlnIHBhdGgKKyAgQUNfQVJHX1dJVEgocGtnLWNvbmZpZy1wYXRoLAorICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLXBrZy1jb25maWctcGF0aF0sCisgICAgICAgICAgICAgICAgICAgIFtjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBwa2ctY29uZmlnKDEpIGRpcnNdKSwKKyAgICAgWworICAgICAgIGV4cG9ydCBQS0dfQ09ORklHX1BBVEg9JHt3aXRodmFsfQorICAgICAgIEFDX01TR19OT1RJQ0UoU2V0IFBLR19DT05GSUdfUEFUSCB0byAkUEtHX0NPTkZJR19QQVRIKQorICAgICBdKQorXSkKKworCitkbmwgVGhpcyBtYWNybyByZXF1aXJlcyB0aGF0IEdTVF9HSVQgb3IgR1NUX0NWUyBpcyBzZXQgdG8geWVzIG9yIG5vIChyZWxlYXNlKQorQUNfREVGVU4oW0FHX0dTVF9BUkdfV0lUSF9QQUNLQUdFX05BTUVdLAorWworICBkbmwgcGFja2FnZSBuYW1lIGluIHBsdWdpbnMKKyAgQUNfQVJHX1dJVEgocGFja2FnZS1uYW1lLAorICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtcGFja2FnZS1uYW1lXSwKKyAgICAgIFtzcGVjaWZ5IHBhY2thZ2UgbmFtZSB0byB1c2UgaW4gcGx1Z2luc10pLAorICAgIFsKKyAgICAgIGNhc2UgIiR7d2l0aHZhbH0iIGluCisgICAgICAgIHllcykgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke3dpdGh2YWx9IGZvciAtLXdpdGgtcGFja2FnZS1uYW1lKSA7OworICAgICAgICBubykgIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLXBhY2thZ2UtbmFtZSkgOzsKKyAgICAgICAgKikgICBHU1RfUEFDS0FHRV9OQU1FPSIke3dpdGh2YWx9IiA7OworICAgICAgZXNhYworICAgIF0sCisgICAgWworICAgICAgUD0kMQorICAgICAgaWYgdGVzdCAieCRQIiA9ICJ4IgorICAgICAgdGhlbgorICAgICAgICBQPSRQQUNLQUdFX05BTUUKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIngkUEFDS0FHRV9WRVJTSU9OX05BTk8iID0gIngwIgorICAgICAgdGhlbgorICAgICAgICBHU1RfUEFDS0FHRV9OQU1FPSIkUCBzb3VyY2UgcmVsZWFzZSIKKyAgICAgIGVsc2UKKyAgICAgICAgaWYgdGVzdCAieCRQQUNLQUdFX1ZFUlNJT05fTkFOTyIgPSAieDEiCisgICAgICAgIHRoZW4KKyAgICAgICAgICBHU1RfUEFDS0FHRV9OQU1FPSIkUCBnaXQiCisgICAgICAgIGVsc2UKKyAgICAgICAgICBHU1RfUEFDS0FHRV9OQU1FPSIkUCBwcmVyZWxlYXNlIgorICAgICAgICBmaQorICAgICAgZmkKKyAgICBdCisgICkKKyAgQUNfTVNHX05PVElDRShVc2luZyAkR1NUX1BBQ0tBR0VfTkFNRSBhcyBwYWNrYWdlIG5hbWUpCisgIEFDX0RFRklORV9VTlFVT1RFRChHU1RfUEFDS0FHRV9OQU1FLCAiJEdTVF9QQUNLQUdFX05BTUUiLAorICAgICAgW3BhY2thZ2UgbmFtZSBpbiBwbHVnaW5zXSkKKyAgQUNfU1VCU1QoR1NUX1BBQ0tBR0VfTkFNRSkKK10pCisKK0FDX0RFRlVOKFtBR19HU1RfQVJHX1dJVEhfUEFDS0FHRV9PUklHSU5dLAorWworICBkbmwgcGFja2FnZSBvcmlnaW4gVVJMCisgIEFDX0FSR19XSVRIKHBhY2thZ2Utb3JpZ2luLAorICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtcGFja2FnZS1vcmlnaW5dLAorICAgICAgW3NwZWNpZnkgcGFja2FnZSBvcmlnaW4gVVJMIHRvIHVzZSBpbiBwbHVnaW5zXSksCisgICAgWworICAgICAgY2FzZSAiJHt3aXRodmFsfSIgaW4KKyAgICAgICAgeWVzKSBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1wYWNrYWdlLW9yaWdpbikgOzsKKyAgICAgICAgbm8pICBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1wYWNrYWdlLW9yaWdpbikgOzsKKyAgICAgICAgKikgICBHU1RfUEFDS0FHRV9PUklHSU49IiR7d2l0aHZhbH0iIDs7CisgICAgICBlc2FjCisgICAgXSwKKyAgICBbR1NUX1BBQ0tBR0VfT1JJR0lOPSJbVW5rbm93biBwYWNrYWdlIG9yaWdpbl0iXSBkbmwgRGVmYXVsdCB2YWx1ZQorICApCisgIEFDX01TR19OT1RJQ0UoVXNpbmcgJEdTVF9QQUNLQUdFX09SSUdJTiBhcyBwYWNrYWdlIG9yaWdpbikKKyAgQUNfREVGSU5FX1VOUVVPVEVEKEdTVF9QQUNLQUdFX09SSUdJTiwgIiRHU1RfUEFDS0FHRV9PUklHSU4iLAorICAgICAgW3BhY2thZ2Ugb3JpZ2luXSkKKyAgQUNfU1VCU1QoR1NUX1BBQ0tBR0VfT1JJR0lOKQorXSkKKworZG5sIHNldHMgV0lUSF9QTFVHSU5TIHRvIHRoZSBsaXN0IG9mIHBsdWctaW5zIGdpdmVuIGFzIGFuIGFyZ3VtZW50CitkbmwgYWxzbyBjbGVhcnMgR1NUX1BMVUdJTlNfQUxMIGFuZCBHU1RfUExVR0lOU19TRUxFQ1RFRAorQUNfREVGVU4oW0FHX0dTVF9BUkdfV0lUSF9QTFVHSU5TXSwKK1sKKyAgQUNfQVJHX1dJVEgocGx1Z2lucywKKyAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLXBsdWdpbnNdLAorICAgICAgW2NvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGRlcGVuZGVuY3lsZXNzIHBsdWctaW5zIHRvIGNvbXBpbGVdKSwKKyAgICBbV0lUSF9QTFVHSU5TPSR3aXRodmFsXSwKKyAgICBbV0lUSF9QTFVHSU5TPV0pCisKKyAgR1NUX1BMVUdJTlNfQUxMPSIiCisgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPSIiCisgIEdTVF9QTFVHSU5TX05PTlBPUlRFRD0iIgorCisgIEFDX1NVQlNUKEdTVF9QTFVHSU5TX0FMTCkKKyAgQUNfU1VCU1QoR1NUX1BMVUdJTlNfU0VMRUNURUQpCisgIEFDX1NVQlNUKEdTVF9QTFVHSU5TX05PTlBPUlRFRCkKK10pCisKK2RubCBBR19HU1RfQ0hFQ0tfUExVR0lOKFBMVUdJTi1OQU1FKQorZG5sCitkbmwgVGhpcyBtYWNybyBhZGRzIHRoZSBwbHVnLWluIDxQTFVHSU4tTkFNRT4gdG8gR1NUX1BMVUdJTlNfQUxMLiBUaGVuIGl0CitkbmwgY2hlY2tzIGlmIFdJVEhfUExVR0lOUyBpcyBlbXB0eSBvciB0aGUgcGx1Z2luIGlzIHByZXNlbnQgaW4gV0lUSF9QTFVHSU5TLAorZG5sIGFuZCBpZiBzbyBhZGRzIGl0IHRvIEdTVF9QTFVHSU5TX1NFTEVDVEVELiBUaGVuIGl0IGNoZWNrcyBpZiB0aGUgcGx1Z2luCitkbmwgaXMgcHJlc2VudCBpbiBXSVRIT1VUX1BMVUdJTlMgKGllLiB3YXMgZGlzYWJsZWQgc3BlY2lmaWNhbGx5KSBhbmQgaWYgc28KK2RubCByZW1vdmVzIGl0IGZyb20gR1NUX1BMVUdJTlNfU0VMRUNURUQuCitkbmwKK2RubCBUaGUgbWFjcm8gd2lsbCBjYWxsIEFNX0NPTkRJVElPTkFMKFVTRV9QTFVHSU5fPFBMVUdJTi1OQU1FPiwgLi4uKSB0byBhbGxvdworZG5sIGNvbnRyb2wgb2Ygd2hhdCBpcyBidWlsdCBpbiBNYWtlZmlsZS5hbXMuCitBQ19ERUZVTihbQUdfR1NUX0NIRUNLX1BMVUdJTl0sCitbCisgIEdTVF9QTFVHSU5TX0FMTD0iJEdTVF9QTFVHSU5TX0FMTCBbJDFdIgorCisgIGRlZmluZShbcG5hbWVfZGVmXSx0cmFuc2xpdChbJDFdLCAtYS16LCBfYS16KSkKKworICBBQ19BUkdfRU5BQkxFKFskMV0sCisgICAgQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1bJDFdXSwgW2Rpc2FibGUgZGVwZW5kZW5jeS1sZXNzICQxIHBsdWdpbl0pLAorICAgIFsKKyAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgeWVzKSBbZ3N0X3VzZV9dcG5hbWVfZGVmPXllcyA7OworICAgICAgICBubykgW2dzdF91c2VfXXBuYW1lX2RlZj1ubyA7OworICAgICAgICAqKSBBQ19NU0dfRVJST1IoW2JhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLSQxXSkgOzsKKyAgICAgICBlc2FjCisgICAgXSwKKyAgICBbW2dzdF91c2VfXXBuYW1lX2RlZj15ZXNdKSBkbmwgRGVmYXVsdCB2YWx1ZQorCisgIGlmIHRlc3QgeCRbZ3N0X3VzZV9dcG5hbWVfZGVmID0geG5vOyB0aGVuCisgICAgQUNfTVNHX05PVElDRShkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiAkMSkKKyAgICBXSVRIT1VUX1BMVUdJTlM9IiRXSVRIT1VUX1BMVUdJTlMgWyQxXSIKKyAgZmkKKyAgdW5kZWZpbmUoW3BuYW1lX2RlZl0pCisKKyAgZG5sIEZpcnN0IGNoZWNrIGluY2x1c2lvbgorICBpZiBbWyAteiAiJFdJVEhfUExVR0lOUyIgXV0gfHwgZWNobyAiIFskV0lUSF9QTFVHSU5TXSAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgWyQxXSAiID4gL2Rldi9udWxsOyB0aGVuCisgICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9IiRHU1RfUExVR0lOU19TRUxFQ1RFRCBbJDFdIgorICBmaQorICBkbmwgVGhlbiBjaGVjayBleGNsdXNpb24KKyAgaWYgZWNobyAiIFskV0lUSE9VVF9QTFVHSU5TXSAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgWyQxXSAiID4gL2Rldi9udWxsOyB0aGVuCisgICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIFskMV0gLyAvJ2AKKyAgZmkKKyAgZG5sIEZpbmFsbHkgY2hlY2sgaWYgdGhlIHBsdWdpbiBpcyBwb3J0ZWQgb3Igbm90CisgIGlmIGVjaG8gIiBbJEdTVF9QTFVHSU5TX05PTlBPUlRFRF0gIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIFskMV0gIiA+IC9kZXYvbnVsbDsgdGhlbgorICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyBbJDFdIC8gLydgCisgIGZpCisgIEFNX0NPTkRJVElPTkFMKFtVU0VfUExVR0lOX110cmFuc2xpdChbJDFdLCBhLXosIEEtWiksIGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8IGdyZXAgLWkgIiBbJDFdICIgPiAvZGV2L251bGwpCitdKQorCitkbmwgQUdfR1NUX0RJU0FCTEVfUExVR0lOKFBMVUdJTi1OQU1FKQorZG5sCitkbmwgVGhpcyBtYWNybyBkaXNhYmxlcyB0aGUgcGx1Zy1pbiA8UExVR0lOLU5BTUU+IGJ5IHJlbW92aW5nIGl0IGZyb20KK2RubCBHU1RfUExVR0lOU19TRUxFQ1RFRC4KK0FDX0RFRlVOKFtBR19HU1RfRElTQUJMRV9QTFVHSU5dLAorWworICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gWyQxXSAvIC8nYAorICBBTV9DT05ESVRJT05BTChbVVNFX1BMVUdJTl9ddHJhbnNsaXQoWyQxXSwgYS16LCBBLVopLCBmYWxzZSkKK10pCisKK0FDX0RFRlVOKFtBR19HU1RfQVJHX0VOQUJMRV9FWFRFUk5BTF0sCitbCisgIEFHX0dTVF9DSEVDS19GRUFUVVJFKEVYVEVSTkFMLCBbYnVpbGRpbmcgb2YgcGx1Zy1pbnMgd2l0aCBleHRlcm5hbCBkZXBzXSwsCisgICAgSEFWRV9FWFRFUk5BTD15ZXMsIGVuYWJsZWQsCisgICAgWworICAgICAgQUNfTVNHX05PVElDRShidWlsZGluZyBleHRlcm5hbCBwbHVnLWlucykKKyAgICAgIEJVSUxEX0VYVEVSTkFMPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfV0FSTihhbGwgcGx1Zy1pbnMgd2l0aCBleHRlcm5hbCBkZXBlbmRlbmNpZXMgd2lsbCBub3QgYmUgYnVpbHQpCisgICAgICBCVUlMRF9FWFRFUk5BTD0ibm8iCisgICAgXSkKKyAgIyBtYWtlIEJVSUxEX0VYVEVSTkFMIGF2YWlsYWJsZSB0byBNYWtlZmlsZS5hbQorICBBTV9DT05ESVRJT05BTChCVUlMRF9FWFRFUk5BTCwgdGVzdCAieCRCVUlMRF9FWFRFUk5BTCIgPSAieHllcyIpCitdKQorCitkbmwgZXhwZXJpbWVudGFsIHBsdWctaW5zOyBzdHVmZiB0aGF0IGhhc24ndCBoYWQgdGhlIGR1c3Qgc2V0dGxlIHlldAorZG5sIHJlYWQgJ2J1aWxkcywgYnV0IG1pZ2h0IG5vdCB3b3JrJworQUNfREVGVU4oW0FHX0dTVF9BUkdfRU5BQkxFX0VYUEVSSU1FTlRBTF0sCitbCisgIEFHX0dTVF9DSEVDS19GRUFUVVJFKEVYUEVSSU1FTlRBTCwgW2J1aWxkaW5nIG9mIGV4cGVyaW1lbnRhbCBwbHVnLWluc10sLAorICAgIEhBVkVfRVhQRVJJTUVOVEFMPXllcywgZGlzYWJsZWQsCisgICAgWworICAgICAgQUNfTVNHX1dBUk4oYnVpbGRpbmcgZXhwZXJpbWVudGFsIHBsdWctaW5zKQorICAgICAgQlVJTERfRVhQRVJJTUVOVEFMPSJ5ZXMiCisgICAgXSxbCisgICAgICBBQ19NU0dfTk9USUNFKG5vdCBidWlsZGluZyBleHBlcmltZW50YWwgcGx1Zy1pbnMpCisgICAgICBCVUlMRF9FWFBFUklNRU5UQUw9Im5vIgorICAgIF0pCisgICMgbWFrZSBCVUlMRF9FWFBFUklNRU5UQUwgYXZhaWxhYmxlIHRvIE1ha2VmaWxlLmFtCisgIEFNX0NPTkRJVElPTkFMKEJVSUxEX0VYUEVSSU1FTlRBTCwgdGVzdCAieCRCVUlMRF9FWFBFUklNRU5UQUwiID0gInh5ZXMiKQorXSkKKworZG5sIGJyb2tlbiBwbHVnLWluczsgc3R1ZmYgdGhhdCBkb2Vzbid0IHNlZW0gdG8gYnVpbGQgYXQgdGhlIG1vbWVudAorQUNfREVGVU4oW0FHX0dTVF9BUkdfRU5BQkxFX0JST0tFTl0sCitbCisgIEFHX0dTVF9DSEVDS19GRUFUVVJFKEJST0tFTiwgW2J1aWxkaW5nIG9mIGJyb2tlbiBwbHVnLWluc10sLAorICAgIEhBVkVfQlJPS0VOPXllcywgZGlzYWJsZWQsCisgICAgWworICAgICAgQUNfTVNHX1dBUk4oW2J1aWxkaW5nIGJyb2tlbiBwbHVnLWlucyAtLSBubyBidWcgcmVwb3J0cyBvbiB0aGVzZSwgb25seSBwYXRjaGVzIC4uLl0pCisgICAgXSxbCisgICAgICBBQ19NU0dfTk9USUNFKFtub3QgYnVpbGRpbmcgYnJva2VuIHBsdWctaW5zXSkKKyAgICBdKQorXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgYi9jb21tb24vbTQvZ3N0LWNoZWNrLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZDNhY2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vbTQvZ3N0LWNoZWNrLm00CkBAIC0wLDAgKzEsMjYyIEBACitkbmwgcGtnLWNvbmZpZy1iYXNlZCBjaGVja3MgZm9yIEdTdHJlYW1lciBtb2R1bGVzIGFuZCBkZXBlbmRlbmN5IG1vZHVsZXMKKworZG5sIGdlbmVyaWM6CitkbmwgQUdfR1NUX1BLR19DSEVDS19NT0RVTEVTKFtQUkVGSVhdLCBbV0hJQ0hdLCBbUkVRVUlSRURdKQorZG5sIHNldHMgSEFWRV9bJFBSRUZJWF0sIFskUFJFRklYXV8qCitkbmwgQUdfR1NUX0NIRUNLX01PRFVMRVMoW1BSRUZJWF0sIFtNT0RVTEVdLCBbTUlOVkVSXSwgW05BTUVdLCBbUkVRVUlSRURdKQorZG5sIHNldHMgSEFWRV9bJFBSRUZJWF0sIFskUFJFRklYXV8qCisKK2RubCBzcGVjaWZpYzoKK2RubCBBR19HU1RfQ0hFQ0tfR1NUKFtNQUpNSU5dLCBbTUlOVkVSXSwgW1JFUVVJUkVEXSkKK2RubCAgIGFsc28gc2V0cy9BQ1NVQlNUcyBHU1RfVE9PTFNfRElSIGFuZCBHU1RfUExVR0lOU19ESVIKK2RubCBBR19HU1RfQ0hFQ0tfR1NUX0JBU0UoW01BSk1JTl0sIFtNSU5WRVJdLCBbUkVRVUlSRURdKQorZG5sIEFHX0dTVF9DSEVDS19HU1RfR0RQKFtNQUpNSU5dLCBbTUlOVkVSXSwgW1JFUVVJUkVEXSkKK2RubCBBR19HU1RfQ0hFQ0tfR1NUX0NPTlRST0xMRVIoW01BSk1JTl0sIFtNSU5WRVJdLCBbUkVRVUlSRURdKQorZG5sIEFHX0dTVF9DSEVDS19HU1RfQ0hFQ0soW01BSk1JTl0sIFtNSU5WRVJdLCBbUkVRVUlSRURdKQorZG5sIEFHX0dTVF9DSEVDS19HU1RfUExVR0lOU19CQVNFKFtNQUpNSU5dLCBbTUlOVkVSXSwgW1JFUVVJUkVEXSkKK2RubCAgIGFsc28gc2V0cy9BQ1NVQlNUcyBHU1RQQl9QTFVHSU5TX0RJUgorCitBQ19ERUZVTihbQUdfR1NUX1BLR19DSEVDS19NT0RVTEVTXSwKK1sKKyAgd2hpY2g9IlskMl0iCisgIGRubCBub3QgcmVxdWlyZWQgYnkgZGVmYXVsdCwgc2luY2Ugd2UgdXNlIHRoaXMgbW9zdGx5IGZvciBwbHVnaW4gZGVwcworICByZXF1aXJlZD1pZmVsc2UoWyQzXSwgLCAibm8iLCBbJDNdKQorCisgIFBLR19DSEVDS19NT0RVTEVTKFskMV0sICR3aGljaCwKKyAgICBbCisgICAgICBIQVZFX1skMV09InllcyIKKyAgICBdLAorICAgIFsKKyAgICAgIEhBVkVfWyQxXT0ibm8iCisgICAgICBpZiB0ZXN0ICJ4JHJlcXVpcmVkIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgICBBQ19NU0dfRVJST1IoJFskMV1fUEtHX0VSUk9SUykKKyAgICAgIGVsc2UKKyAgICAgICAgQUNfTVNHX05PVElDRSgkWyQxXV9QS0dfRVJST1JTKQorICAgICAgZmkKKyAgICBdKQorCisgIGRubCBBQ19TVUJTVCBvZiBDRkxBR1MgYW5kIExJQlMgd2FzIG5vdCBkb25lIGJlZm9yZSBhdXRvbWFrZSAxLjcKKyAgZG5sIEl0IGdldHMgZG9uZSBhdXRvbWF0aWNhbGx5IGluIGF1dG9tYWtlID49IDEuNywgd2hpY2ggd2Ugbm93IHJlcXVpcmUKK10pKQorCitBQ19ERUZVTihbQUdfR1NUX0NIRUNLX01PRFVMRVNdLAorWworICBtb2R1bGU9WyQyXQorICBtaW52ZXI9WyQzXQorICBuYW1lPSJbJDRdIgorICByZXF1aXJlZD1pZmVsc2UoWyQ1XSwgLCAieWVzIiwgWyQ1XSkgZG5sIHJlcXVpcmVkIGJ5IGRlZmF1bHQKKworICBQS0dfQ0hFQ0tfTU9EVUxFUyhbJDFdLCAkbW9kdWxlID49ICRtaW52ZXIsCisgICAgWworICAgICAgSEFWRV9bJDFdPSJ5ZXMiCisgICAgXSwKKyAgICBbCisgICAgICBIQVZFX1skMV09Im5vIgorICAgICAgQUNfTVNHX05PVElDRSgkWyQxXV9QS0dfRVJST1JTKQorICAgICAgaWYgdGVzdCAieCRyZXF1aXJlZCIgPSAieHllcyI7IHRoZW4KKyAgICAgICAgQUNfTVNHX0VSUk9SKFtubyAkbW9kdWxlID49ICRtaW52ZXIgKCRuYW1lKSBmb3VuZF0pCisgICAgICBlbHNlCisgICAgICAgIEFDX01TR19OT1RJQ0UoW25vICRtb2R1bGUgPj0gJG1pbnZlciAoJG5hbWUpIGZvdW5kXSkKKyAgICAgIGZpCisgICAgXSkKKworICBkbmwgQUNfU1VCU1Qgb2YgQ0ZMQUdTIGFuZCBMSUJTIHdhcyBub3QgZG9uZSBiZWZvcmUgYXV0b21ha2UgMS43CisgIGRubCBJdCBnZXRzIGRvbmUgYXV0b21hdGljYWxseSBpbiBhdXRvbWFrZSA+PSAxLjcsIHdoaWNoIHdlIG5vdyByZXF1aXJlCitdKSkKKworQUNfREVGVU4oW0FHX0dTVF9DSEVDS19HU1RdLAorWworICBBR19HU1RfQ0hFQ0tfTU9EVUxFUyhHU1QsIGdzdHJlYW1lci1bJDFdLCBbJDJdLCBbR1N0cmVhbWVyXSwgWyQzXSkKKyAgZG5sIGFsbG93IHNldHRpbmcgYmVmb3JlIGNhbGxpbmcgdGhpcyBtYWNybyB0byBvdmVycmlkZQorICBpZiB0ZXN0IC16ICRHU1RfVE9PTFNfRElSOyB0aGVuCisgICAgR1NUX1RPT0xTX0RJUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT10b29sc2RpciBnc3RyZWFtZXItWyQxXWAKKyAgICBpZiB0ZXN0IC16ICRHU1RfVE9PTFNfRElSOyB0aGVuCisgICAgICBBQ19NU0dfRVJST1IoCisgICAgICAgIFtubyB0b29scyBkaXIgc2V0IGluIEdTdHJlYW1lciBwa2ctY29uZmlnIGZpbGUsIGNvcmUgdXBncmFkZSBuZWVkZWQuXSkKKyAgICBmaQorICBmaQorICBBQ19NU0dfTk9USUNFKFt1c2luZyBHU3RyZWFtZXIgdG9vbHMgaW4gJEdTVF9UT09MU19ESVJdKQorICBBQ19TVUJTVChHU1RfVE9PTFNfRElSKQorCisgIGRubCBjaGVjayBmb3Igd2hlcmUgY29yZSBwbHVnLWlucyBnb3QgaW5zdGFsbGVkCisgIGRubCB0aGlzIGlzIHVzZWQgZm9yIHVuaXQgdGVzdHMKKyAgZG5sIGFsbG93IHNldHRpbmcgYmVmb3JlIGNhbGxpbmcgdGhpcyBtYWNybyB0byBvdmVycmlkZQorICBpZiB0ZXN0IC16ICRHU1RfUExVR0lOU19ESVI7IHRoZW4KKyAgICBHU1RfUExVR0lOU19ESVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cGx1Z2luc2RpciBnc3RyZWFtZXItWyQxXWAKKyAgICBpZiB0ZXN0IC16ICRHU1RfUExVR0lOU19ESVI7IHRoZW4KKyAgICAgIEFDX01TR19FUlJPUigKKyAgICAgICAgW25vIHBsdWdpbnNkaXIgc2V0IGluIEdTdHJlYW1lciBwa2ctY29uZmlnIGZpbGUsIGNvcmUgdXBncmFkZSBuZWVkZWQuXSkKKyAgICBmaQorICBmaQorICBBQ19NU0dfTk9USUNFKFt1c2luZyBHU3RyZWFtZXIgcGx1Zy1pbnMgaW4gJEdTVF9QTFVHSU5TX0RJUl0pCisgIEFDX1NVQlNUKEdTVF9QTFVHSU5TX0RJUikKK10pCisKK0FDX0RFRlVOKFtBR19HU1RfQ0hFQ0tfR1NUX0JBU0VdLAorWworICBBR19HU1RfQ0hFQ0tfTU9EVUxFUyhHU1RfQkFTRSwgZ3N0cmVhbWVyLWJhc2UtWyQxXSwgWyQyXSwKKyAgICBbR1N0cmVhbWVyIEJhc2UgTGlicmFyaWVzXSwgWyQzXSkKK10pCisKK0FDX0RFRlVOKFtBR19HU1RfQ0hFQ0tfR1NUX0dEUF0sCitbCisgIEFHX0dTVF9DSEVDS19NT0RVTEVTKEdTVF9HRFAsIGdzdHJlYW1lci1kYXRhcHJvdG9jb2wtWyQxXSwgWyQyXSwKKyAgICBbR1N0cmVhbWVyIERhdGEgUHJvdG9jb2wgTGlicmFyeV0sIFskM10pCitdKQorCitBQ19ERUZVTihbQUdfR1NUX0NIRUNLX0dTVF9DT05UUk9MTEVSXSwKK1sKKyAgQUdfR1NUX0NIRUNLX01PRFVMRVMoR1NUX0NPTlRST0xMRVIsIGdzdHJlYW1lci1jb250cm9sbGVyLVskMV0sIFskMl0sCisgICAgW0dTdHJlYW1lciBDb250cm9sbGVyIExpYnJhcnldLCBbJDNdKQorXSkKKworQUNfREVGVU4oW0FHX0dTVF9DSEVDS19HU1RfQ0hFQ0tdLAorWworICBBR19HU1RfQ0hFQ0tfTU9EVUxFUyhHU1RfQ0hFQ0ssIGdzdHJlYW1lci1jaGVjay1bJDFdLCBbJDJdLAorICAgIFtHU3RyZWFtZXIgQ2hlY2sgdW5pdHRlc3QgTGlicmFyeV0sIFskM10pCitdKQorCitkbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkbmwgQUdfR1NUX0NIRUNLX0dTVF9QTFVHSU5TX0JBU0UoW0dTVC1NQUpPUk1JTk9SXSwgW01JTi1WRVJTSU9OXSwgW1JFUVVJUkVEXSkKK2RubAorZG5sIFNldHMgR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgYW5kIEdTVF9QTFVHSU5TX0JBU0VfTElCUy4KK2RubAorZG5sIEFsc28gc2V0cyBHU1RQQl9QTFVHSU5TX0RJUiAoYW5kIGZvciBjb25zaXN0ZW5jeSBhbHNvIEdTVF9QTFVHSU5TX0JBU0VfRElSKQorZG5sIGZvciB1c2UgaW4gTWFrZWZpbGUuYW0uIFRoaXMgaXMgb25seSByZWFsbHkgbmVlZGVkL3VzZWZ1bCBpbiB1bmluc3RhbGxlZAorZG5sIHNldHVwcywgc2luY2UgaW4gYW4gaW5zdGFsbGVkIHNldHVwIGFsbCBwbHVnaW5zIHdpbGwgYmUgZm91bmQgaW4KK2RubCBHU1RfUExVR0lOU19ESVIgYW55d2F5LgorZG5sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQUNfREVGVU4oW0FHX0dTVF9DSEVDS19HU1RfUExVR0lOU19CQVNFXSwKK1sKKyAgQUdfR1NUX0NIRUNLX01PRFVMRVMoR1NUX1BMVUdJTlNfQkFTRSwgZ3N0cmVhbWVyLXBsdWdpbnMtYmFzZS1bJDFdLCBbJDJdLAorICAgIFtHU3RyZWFtZXIgQmFzZSBQbHVnaW5zXSwgWyQzXSkKKworICBpZiB0ZXN0ICJ4JEhBVkVfR1NUX1BMVUdJTlNfQkFTRSIgPSAieHllcyI7IHRoZW4KKyAgICBkbmwgY2hlY2sgZm9yIHdoZXJlIGJhc2UgcGx1Z2lucyBnb3QgaW5zdGFsbGVkCisgICAgZG5sIHRoaXMgaXMgdXNlZCBmb3IgdW5pdCB0ZXN0cworICAgIGRubCBhbGxvdyBzZXR0aW5nIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWFjcm8gdG8gb3ZlcnJpZGUKKyAgICBpZiB0ZXN0IC16ICRHU1RQQl9QTFVHSU5TX0RJUjsgdGhlbgorICAgICAgR1NUUEJfUExVR0lOU19ESVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cGx1Z2luc2RpciBnc3RyZWFtZXItcGx1Z2lucy1iYXNlLVskMV1gCisgICAgICBpZiB0ZXN0IC16ICRHU1RQQl9QTFVHSU5TX0RJUjsgdGhlbgorICAgICAgICBBQ19NU0dfRVJST1IoCisgICAgICAgICAgW25vIHBsdWdpbnNkaXIgc2V0IGluIEdTdHJlYW1lciBCYXNlIFBsdWdpbnMgcGtnLWNvbmZpZyBmaWxlXSkKKyAgICAgIGZpCisgICAgZmkKKyAgICBBQ19NU0dfTk9USUNFKFt1c2luZyBHU3RyZWFtZXIgQmFzZSBQbHVnaW5zIGluICRHU1RQQl9QTFVHSU5TX0RJUl0pCisgICAgR1NUX1BMVUdJTlNfQkFTRV9ESVI9IiRHU1RQQl9QTFVHSU5TX0RJUi9nc3Q6JEdTVFBCX1BMVUdJTlNfRElSL3N5czokR1NUUEJfUExVR0lOU19ESVIvZXh0IgorICAgIEFDX1NVQlNUKEdTVF9QTFVHSU5TX0JBU0VfRElSKQorICAgIEFDX1NVQlNUKEdTVFBCX1BMVUdJTlNfRElSKQorICBmaQorXSkKKworZG5sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorZG5sIEFHX0dTVF9DSEVDS19HU1RfUExVR0lOU19HT09EKFtHU1QtTUFKT1JNSU5PUl0sIFtNSU4tVkVSU0lPTl0pCitkbmwKK2RubCBXaWxsIHNldCBHU1RfUExVR0lOU19HT09EX0RJUiBmb3IgdXNlIGluIE1ha2VmaWxlLmFtLiBOb3RlIHRoYXQgdGhpcyB3aWxsCitkbmwgb25seSBiZSBzZXQgaW4gYW4gdW5pbnN0YWxsZWQgc2V0dXAsIHNpbmNlIC1nb29kIHNoaXBzIG5vIC5wYyBmaWxlIGFuZCBpbgorZG5sIGFuIGluc3RhbGxlZCBzZXR1cCBhbGwgcGx1Z2lucyB3aWxsIGJlIGZvdW5kIGluIEdTVF9QTFVHSU5TX0RJUiBhbnl3YXkuCitkbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitBQ19ERUZVTihbQUdfR1NUX0NIRUNLX0dTVF9QTFVHSU5TX0dPT0RdLAorWworICBBR19HU1RfQ0hFQ0tfTU9EVUxFUyhHU1RfUExVR0lOU19HT09ELCBnc3RyZWFtZXItcGx1Z2lucy1nb29kLVskMV0sIFskMl0sCisgICAgW0dTdHJlYW1lciBHb29kIFBsdWdpbnNdLCBbbm9dKQorCisgIGlmIHRlc3QgIngkSEFWRV9HU1RfUExVR0lOU19HT09EIiA9ICJ4eWVzIjsgdGhlbgorICAgIGRubCBjaGVjayBmb3Igd2hlcmUgZ29vZCBwbHVnaW5zIGdvdCBpbnN0YWxsZWQKKyAgICBkbmwgdGhpcyBpcyB1c2VkIGZvciB1bml0IHRlc3RzCisgICAgZG5sIGFsbG93IHNldHRpbmcgYmVmb3JlIGNhbGxpbmcgdGhpcyBtYWNybyB0byBvdmVycmlkZQorICAgIGlmIHRlc3QgLXogJEdTVF9QTFVHSU5TX0dPT0RfRElSOyB0aGVuCisgICAgICBHU1RfUExVR0lOU19HT09EX0RJUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1wbHVnaW5zZGlyIGdzdHJlYW1lci1wbHVnaW5zLWdvb2QtWyQxXWAKKyAgICAgIGlmIHRlc3QgLXogJEdTVF9QTFVHSU5TX0dPT0RfRElSOyB0aGVuCisgICAgICAgIEFDX01TR19FUlJPUihbbm8gcGx1Z2luc2RpciBzZXQgaW4gR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyBwa2ctY29uZmlnIGZpbGVdKQorICAgICAgZmkKKyAgICBmaQorICAgIEFDX01TR19OT1RJQ0UoW3VzaW5nIEdTdHJlYW1lciBHb29kIFBsdWdpbnMgaW4gJEdTVF9QTFVHSU5TX0dPT0RfRElSXSkKKyAgICBHU1RfUExVR0lOU19HT09EX0RJUj0iJEdTVF9QTFVHSU5TX0dPT0RfRElSL2dzdDokR1NUX1BMVUdJTlNfR09PRF9ESVIvc3lzOiRHU1RfUExVR0lOU19HT09EX0RJUi9leHQiCisgICAgQUNfU1VCU1QoR1NUX1BMVUdJTlNfR09PRF9ESVIpCisgIGZpCitdKQorCitkbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkbmwgQUdfR1NUX0NIRUNLX0dTVF9QTFVHSU5TX1VHTFkoW0dTVC1NQUpPUk1JTk9SXSwgW01JTi1WRVJTSU9OXSkKK2RubAorZG5sIFdpbGwgc2V0IEdTVF9QTFVHSU5TX1VHTFlfRElSIGZvciB1c2UgaW4gTWFrZWZpbGUuYW0uIE5vdGUgdGhhdCB0aGlzIHdpbGwKK2RubCBvbmx5IGJlIHNldCBpbiBhbiB1bmluc3RhbGxlZCBzZXR1cCwgc2luY2UgLWJhZCBzaGlwcyBubyAucGMgZmlsZSBhbmQgaW4KK2RubCBhbiBpbnN0YWxsZWQgc2V0dXAgYWxsIHBsdWdpbnMgd2lsbCBiZSBmb3VuZCBpbiBHU1RfUExVR0lOU19ESVIgYW55d2F5LgorZG5sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQUNfREVGVU4oW0FHX0dTVF9DSEVDS19HU1RfUExVR0lOU19VR0xZXSwKK1sKKyAgQUdfR1NUX0NIRUNLX01PRFVMRVMoR1NUX1BMVUdJTlNfVUdMWSwgZ3N0cmVhbWVyLXBsdWdpbnMtdWdseS1bJDFdLCBbJDJdLAorICAgIFtHU3RyZWFtZXIgVWdseSBQbHVnaW5zXSwgW25vXSkKKworICBpZiB0ZXN0ICJ4JEhBVkVfR1NUX1BMVUdJTlNfVUdMWSIgPSAieHllcyI7IHRoZW4KKyAgICBkbmwgY2hlY2sgZm9yIHdoZXJlIHVnbHkgcGx1Z2lucyBnb3QgaW5zdGFsbGVkCisgICAgZG5sIHRoaXMgaXMgdXNlZCBmb3IgdW5pdCB0ZXN0cworICAgIGRubCBhbGxvdyBzZXR0aW5nIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWFjcm8gdG8gb3ZlcnJpZGUKKyAgICBpZiB0ZXN0IC16ICRHU1RfUExVR0lOU19VR0xZX0RJUjsgdGhlbgorICAgICAgR1NUX1BMVUdJTlNfVUdMWV9ESVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cGx1Z2luc2RpciBnc3RyZWFtZXItcGx1Z2lucy11Z2x5LVskMV1gCisgICAgICBpZiB0ZXN0IC16ICRHU1RfUExVR0lOU19VR0xZX0RJUjsgdGhlbgorICAgICAgICBBQ19NU0dfRVJST1IoW25vIHBsdWdpbnNkaXIgc2V0IGluIEdTdHJlYW1lciBVZ2x5IFBsdWdpbnMgcGtnLWNvbmZpZyBmaWxlXSkKKyAgICAgIGZpCisgICAgZmkKKyAgICBBQ19NU0dfTk9USUNFKFt1c2luZyBHU3RyZWFtZXIgVWdseSBQbHVnaW5zIGluICRHU1RfUExVR0lOU19VR0xZX0RJUl0pCisgICAgR1NUX1BMVUdJTlNfVUdMWV9ESVI9IiRHU1RfUExVR0lOU19VR0xZX0RJUi9nc3Q6JEdTVF9QTFVHSU5TX1VHTFlfRElSL3N5czokR1NUX1BMVUdJTlNfVUdMWV9ESVIvZXh0IgorICAgIEFDX1NVQlNUKEdTVF9QTFVHSU5TX1VHTFlfRElSKQorICBmaQorXSkKKworZG5sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorZG5sIEFHX0dTVF9DSEVDS19HU1RfUExVR0lOU19CQUQoW0dTVC1NQUpPUk1JTk9SXSwgW01JTi1WRVJTSU9OXSkKK2RubAorZG5sIFdpbGwgc2V0IEdTVF9QTFVHSU5TX0JBRF9ESVIgZm9yIHVzZSBpbiBNYWtlZmlsZS5hbS4gTm90ZSB0aGF0IHRoaXMgd2lsbAorZG5sIG9ubHkgYmUgc2V0IGluIGFuIHVuaW5zdGFsbGVkIHNldHVwLCBzaW5jZSAtdWdseSBzaGlwcyBubyAucGMgZmlsZSBhbmQgaW4KK2RubCBhbiBpbnN0YWxsZWQgc2V0dXAgYWxsIHBsdWdpbnMgd2lsbCBiZSBmb3VuZCBpbiBHU1RfUExVR0lOU19ESVIgYW55d2F5LgorZG5sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQUNfREVGVU4oW0FHX0dTVF9DSEVDS19HU1RfUExVR0lOU19CQURdLAorWworICBBR19HU1RfQ0hFQ0tfTU9EVUxFUyhHU1RfUExVR0lOU19CQUQsIGdzdHJlYW1lci1wbHVnaW5zLWJhZC1bJDFdLCBbJDJdLAorICAgIFtHU3RyZWFtZXIgQmFkIFBsdWdpbnNdLCBbbm9dKQorCisgIGlmIHRlc3QgIngkSEFWRV9HU1RfUExVR0lOU19CQUQiID0gInh5ZXMiOyB0aGVuCisgICAgZG5sIGNoZWNrIGZvciB3aGVyZSBiYWQgcGx1Z2lucyBnb3QgaW5zdGFsbGVkCisgICAgZG5sIHRoaXMgaXMgdXNlZCBmb3IgdW5pdCB0ZXN0cworICAgIGRubCBhbGxvdyBzZXR0aW5nIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWFjcm8gdG8gb3ZlcnJpZGUKKyAgICBpZiB0ZXN0IC16ICRHU1RfUExVR0lOU19CQURfRElSOyB0aGVuCisgICAgICBHU1RfUExVR0lOU19CQURfRElSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXBsdWdpbnNkaXIgZ3N0cmVhbWVyLXBsdWdpbnMtYmFkLVskMV1gCisgICAgICBpZiB0ZXN0IC16ICRHU1RfUExVR0lOU19CQURfRElSOyB0aGVuCisgICAgICAgIEFDX01TR19FUlJPUihbbm8gcGx1Z2luc2RpciBzZXQgaW4gR1N0cmVhbWVyIEJhZCBQbHVnaW5zIHBrZy1jb25maWcgZmlsZV0pCisgICAgICBmaQorICAgIGZpCisgICAgQUNfTVNHX05PVElDRShbdXNpbmcgR1N0cmVhbWVyIEJhZCBQbHVnaW5zIGluICRHU1RfUExVR0lOU19CQURfRElSXSkKKyAgICBHU1RfUExVR0lOU19CQURfRElSPSIkR1NUX1BMVUdJTlNfQkFEX0RJUi9nc3Q6JEdTVF9QTFVHSU5TX0JBRF9ESVIvc3lzOiRHU1RfUExVR0lOU19CQURfRElSL2V4dCIKKyAgICBBQ19TVUJTVChHU1RfUExVR0lOU19CQURfRElSKQorICBmaQorXSkKKworZG5sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorZG5sIEFHX0dTVF9DSEVDS19HU1RfUExVR0lOU19GRk1QRUcoW0dTVC1NQUpPUk1JTk9SXSwgW01JTi1WRVJTSU9OXSkKK2RubAorZG5sIFdpbGwgc2V0IEdTVF9QTFVHSU5TX0ZGTVBFR19ESVIgZm9yIHVzZSBpbiBNYWtlZmlsZS5hbS4gTm90ZSB0aGF0IHRoaXMgd2lsbAorZG5sIG9ubHkgYmUgc2V0IGluIGFuIHVuaW5zdGFsbGVkIHNldHVwLCBzaW5jZSAtZmZtcGVnIHNoaXBzIG5vIC5wYyBmaWxlIGFuZCBpbgorZG5sIGFuIGluc3RhbGxlZCBzZXR1cCBhbGwgcGx1Z2lucyB3aWxsIGJlIGZvdW5kIGluIEdTVF9QTFVHSU5TX0RJUiBhbnl3YXkuCitkbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitBQ19ERUZVTihbQUdfR1NUX0NIRUNLX0dTVF9QTFVHSU5TX0ZGTVBFR10sCitbCisgIEFHX0dTVF9DSEVDS19NT0RVTEVTKEdTVF9QTFVHSU5TX0ZGTVBFRywgZ3N0cmVhbWVyLXBsdWdpbnMtZmZtcGVnLVskMV0sIFskMl0sCisgICAgW0dTdHJlYW1lciBGRm1wZWcgUGx1Z2luc10sIFtub10pCisKKyAgaWYgdGVzdCAieCRIQVZFX0dTVF9QTFVHSU5TX0ZGTVBFRyIgPSAieHllcyI7IHRoZW4KKyAgICBkbmwgY2hlY2sgZm9yIHdoZXJlIGZmbXBlZyBwbHVnaW5zIGdvdCBpbnN0YWxsZWQKKyAgICBkbmwgdGhpcyBpcyB1c2VkIGZvciB1bml0IHRlc3RzCisgICAgZG5sIGFsbG93IHNldHRpbmcgYmVmb3JlIGNhbGxpbmcgdGhpcyBtYWNybyB0byBvdmVycmlkZQorICAgIGlmIHRlc3QgLXogJEdTVF9QTFVHSU5TX0ZGTVBFR19ESVI7IHRoZW4KKyAgICAgIEdTVF9QTFVHSU5TX0ZGTVBFR19ESVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cGx1Z2luc2RpciBnc3RyZWFtZXItcGx1Z2lucy1mZm1wZWctWyQxXWAKKyAgICAgIGlmIHRlc3QgLXogJEdTVF9QTFVHSU5TX0ZGTVBFR19ESVI7IHRoZW4KKyAgICAgICAgQUNfTVNHX0VSUk9SKFtubyBwbHVnaW5zZGlyIHNldCBpbiBHU3RyZWFtZXIgRkZtcGVnIFBsdWdpbnMgcGtnLWNvbmZpZyBmaWxlXSkKKyAgICAgIGZpCisgICAgZmkKKyAgICBHU1RfUExVR0lOU19GRk1QRUdfRElSPSIkR1NUX1BMVUdJTlNfRkZNUEVHX0RJUi9leHQvZmZtcGVnIgorICAgIEFDX01TR19OT1RJQ0UoW3VzaW5nIEdTdHJlYW1lciBGRm1wZWcgUGx1Z2lucyBpbiAkR1NUX1BMVUdJTlNfRkZNUEVHX0RJUl0pCisgICAgQUNfU1VCU1QoR1NUX1BMVUdJTlNfRkZNUEVHX0RJUikKKyAgZmkKK10pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ3N0LWRlYnVnaW5mby5tNCBiL2NvbW1vbi9tNC9nc3QtZGVidWdpbmZvLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ODg1NGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vbTQvZ3N0LWRlYnVnaW5mby5tNApAQCAtMCwwICsxLDQ2IEBACitBQ19ERUZVTihbQUdfR1NUX0RFQlVHSU5GT10sIFsKK0FDX0FSR19FTkFCTEUoZGVidWcsCitBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWRlYnVnXSxbZGlzYWJsZSBhZGRpdGlvbiBvZiAtZyBkZWJ1Z2dpbmcgaW5mb10pLAorW2Nhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgeWVzKSBVU0VfREVCVUc9eWVzIDs7CisgIG5vKSAgVVNFX0RFQlVHPW5vIDs7CisgICopIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1kZWJ1ZykgOzsKK2VzYWNdLAorW1VTRV9ERUJVRz15ZXNdKSBkbmwgRGVmYXVsdCB2YWx1ZQorCitBQ19BUkdfRU5BQkxFKERFQlVHLAorQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1ERUJVR10sW2Rpc2FibGVzIGNvbXBpbGF0aW9uIG9mIGRlYnVnZ2luZyBtZXNzYWdlc10pLAorW2Nhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgeWVzKSBFTkFCTEVfREVCVUc9eWVzIDs7CisgIG5vKSAgRU5BQkxFX0RFQlVHPW5vIDs7CisgICopIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1ERUJVRykgOzsKK2VzYWNdLAorW0VOQUJMRV9ERUJVRz15ZXNdKSBkbmwgRGVmYXVsdCB2YWx1ZQoraWYgdGVzdCB4JEVOQUJMRV9ERUJVRyA9IHh5ZXM7IHRoZW4KKyAgQUNfREVGSU5FKEdTVF9ERUJVR19FTkFCTEVELCAxLCBbRGVmaW5lIGlmIERFQlVHIHN0YXRlbWVudHMgc2hvdWxkIGJlIGNvbXBpbGVkIGluXSkKK2ZpCisKK0FDX0FSR19FTkFCTEUoSU5GTywKK0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtSU5GT10sW2Rpc2FibGVzIGNvbXBpbGF0aW9uIG9mIGluZm9ybWF0aW9uYWwgbWVzc2FnZXNdKSwKK1tjYXNlICIke2VuYWJsZXZhbH0iIGluCisgIHllcykgRU5BQkxFX0lORk89eWVzIDs7CisgIG5vKSAgRU5BQkxFX0lORk89bm8gOzsKKyAgKikgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLUlORk8pIDs7Citlc2FjXSwKK1tFTkFCTEVfSU5GTz15ZXNdKSBkbmwgRGVmYXVsdCB2YWx1ZQoraWYgdGVzdCB4JEVOQUJMRV9JTkZPID0geHllczsgdGhlbgorICBBQ19ERUZJTkUoR1NUX0lORk9fRU5BQkxFRCwgMSwgW0RlZmluZSBpZiBJTkZPIHN0YXRlbWVudHMgc2hvdWxkIGJlIGNvbXBpbGVkIGluXSkKK2ZpCisKK0FDX0FSR19FTkFCTEUoZGVidWctY29sb3IsCitBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWRlYnVnLWNvbG9yXSxbZGlzYWJsZXMgY29sb3Igb3V0cHV0IG9mIERFQlVHIGFuZCBJTkZPIG91dHB1dF0pLAorW2Nhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgeWVzKSBFTkFCTEVfREVCVUdfQ09MT1I9eWVzIDs7CisgIG5vKSAgRU5BQkxFX0RFQlVHX0NPTE9SPW5vIDs7CisgICopIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1kZWJ1Zy1jb2xvcikgOzsKK2VzYWNdLAorW0VOQUJMRV9ERUJVR19DT0xPUj15ZXNdKSBkbmwgRGVmYXVsdCB2YWx1ZQoraWYgdGVzdCAieCRFTkFCTEVfREVCVUdfQ09MT1IiID0geHllczsgdGhlbgorICBBQ19ERUZJTkUoR1NUX0RFQlVHX0NPTE9SLCAxLCBbRGVmaW5lIGlmIGRlYnVnZ2luZyBtZXNzYWdlcyBzaG91bGQgYmUgY29sb3JpemVkXSkKK2ZpCitdKQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IGIvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZTk3NTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQKQEAgLTAsMCArMSwxMjAgQEAKK2RubCBkZWZhdWx0IGVsZW1lbnRzIHVzZWQgZm9yIHRlc3RzIGFuZCBzdWNoCisKK2RubCBBR19HU1RfREVGQVVMVF9FTEVNRU5UUworCitBQ19ERUZVTihbQUdfR1NUX0RFRkFVTFRfRUxFTUVOVFNdLAorWworICBkbmwgZGVjaWRlIG9uIGRlZmF1bHQgZWxlbWVudHMKKyAgZG5sIEZJWE1FOiBkZXNjcmliZSB3aGVyZSBleGFjdGx5IHRoaXMgZ2V0cyB1c2VkCisgIGRubCBGSVhNRTogZGVjaWRlIGlmIGl0J3MgYSBwcm9ibGVtIHRoYXQgdGhpcyBjb3VsZCBwb2ludCB0byBzaW5rcyBmcm9tCisgIGRubCAgICAgICAgZGVwZW5kaW5nIHBsdWdpbiBtb2R1bGVzCisgIGRubCBGSVhNRTogd2hlbiBjYW4gd2UganVzdCB1c2UgYXV0b2F1ZGlvc3JjIGFuZCBhdXRvdmlkZW9zcmM/CisgIERFRkFVTFRfQVVESU9TSU5LPSJhdXRvYXVkaW9zaW5rIgorICBERUZBVUxUX1ZJREVPU0lOSz0iYXV0b3ZpZGVvc2luayIKKyAgREVGQVVMVF9BVURJT1NSQz0iYWxzYXNyYyIKKyAgREVGQVVMVF9WSURFT1NSQz0idjRsMnNyYyIKKyAgREVGQVVMVF9WSVNVQUxJWkVSPSJnb29tIgorICBjYXNlICIkaG9zdCIgaW4KKyAgICAqLXN1bi0qIHwgKnBjLXNvbGFyaXMqICkKKyAgICAgIERFRkFVTFRfQVVESU9TUkM9InN1bmF1ZGlvc3JjIgorICAgICAgOzsKKyAgICAqLWRhcndpbiogKQorICAgICAgREVGQVVMVF9BVURJT1NSQz0ib3N4YXVkaW9zcmMiCisgICAgICA7OworICBlc2FjCisKKyAgZG5sIERlZmF1bHQgYXVkaW8gc2luaworICBBQ19BUkdfV0lUSChkZWZhdWx0LWF1ZGlvc2luaywKKyAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWRlZmF1bHQtYXVkaW9zaW5rXSwgW3NwZWNpZnkgZGVmYXVsdCBhdWRpbyBzaW5rXSksCisgICAgWworICAgICAgY2FzZSAiJHt3aXRodmFsfSIgaW4KKyAgICAgICAgeWVzKSBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1kZWZhdWx0LWF1ZGlvc2luaykgOzsKKyAgICAgICAgbm8pICBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1kZWZhdWx0LWF1ZGlvc2luaykgOzsKKyAgICAgICAgKikgICBERUZBVUxUX0FVRElPU0lOSz0iJHt3aXRodmFsfSIgOzsKKyAgICAgIGVzYWMKKyAgICBdLAorICAgIFsKKyAgICAgIERFRkFVTFRfQVVESU9TSU5LPSIkREVGQVVMVF9BVURJT1NJTksiCisgICAgXSBkbmwgRGVmYXVsdCB2YWx1ZSBhcyBkZXRlcm1pbmVkIGFib3ZlCisgICkKKyAgQUNfTVNHX05PVElDRShVc2luZyAkREVGQVVMVF9BVURJT1NJTksgYXMgZGVmYXVsdCBhdWRpbyBzaW5rKQorICBBQ19TVUJTVChERUZBVUxUX0FVRElPU0lOSykKKyAgQUNfREVGSU5FX1VOUVVPVEVEKERFRkFVTFRfQVVESU9TSU5LLCAiJERFRkFVTFRfQVVESU9TSU5LIiwKKyAgICBbRGVmYXVsdCBhdWRpbyBzaW5rXSkKKworICBkbmwgRGVmYXVsdCBhdWRpbyBzb3VyY2UKKyAgQUNfQVJHX1dJVEgoZGVmYXVsdC1hdWRpb3NyYywKKyAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWRlZmF1bHQtYXVkaW9zcmNdLCBbc3BlY2lmeSBkZWZhdWx0IGF1ZGlvIHNvdXJjZV0pLAorICAgIFsKKyAgICAgIGNhc2UgIiR7d2l0aHZhbH0iIGluCisgICAgICAgIHllcykgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke3dpdGh2YWx9IGZvciAtLXdpdGgtZGVmYXVsdC1hdWRpb3NyYykgOzsKKyAgICAgICAgbm8pICBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1kZWZhdWx0LWF1ZGlvc3JjKSA7OworICAgICAgICAqKSAgIERFRkFVTFRfQVVESU9TUkM9IiR7d2l0aHZhbH0iIDs7CisgICAgICBlc2FjCisgICAgXSwKKyAgICBbCisgICAgICBERUZBVUxUX0FVRElPU1JDPSIkREVGQVVMVF9BVURJT1NSQyIKKyAgICBdIGRubCBEZWZhdWx0IHZhbHVlIGFzIGRldGVybWluZWQgYWJvdmUKKyAgKQorICBBQ19NU0dfTk9USUNFKFVzaW5nICRERUZBVUxUX0FVRElPU1JDIGFzIGRlZmF1bHQgYXVkaW8gc291cmNlKQorICBBQ19TVUJTVChERUZBVUxUX0FVRElPU1JDKQorICBBQ19ERUZJTkVfVU5RVU9URUQoREVGQVVMVF9BVURJT1NSQywgIiRERUZBVUxUX0FVRElPU1JDIiwKKyAgICBbRGVmYXVsdCBhdWRpbyBzb3VyY2VdKQorCisgIGRubCBEZWZhdWx0IHZpZGVvIHNpbmsKKyAgQUNfQVJHX1dJVEgoZGVmYXVsdC12aWRlb3NpbmssCisgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1kZWZhdWx0LXZpZGVvc2lua10sIFtzcGVjaWZ5IGRlZmF1bHQgdmlkZW8gc2lua10pLAorICAgIFsKKyAgICAgIGNhc2UgIiR7d2l0aHZhbH0iIGluCisgICAgICAgIHllcykgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke3dpdGh2YWx9IGZvciAtLXdpdGgtZGVmYXVsdC12aWRlb3NpbmspIDs7CisgICAgICAgIG5vKSAgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke3dpdGh2YWx9IGZvciAtLXdpdGgtZGVmYXVsdC12aWRlb3NpbmspIDs7CisgICAgICAgICopICAgREVGQVVMVF9WSURFT1NJTks9IiR7d2l0aHZhbH0iIDs7CisgICAgICBlc2FjCisgICAgXSwKKyAgICBbCisgICAgICBERUZBVUxUX1ZJREVPU0lOSz0iJERFRkFVTFRfVklERU9TSU5LIgorICAgIF0gZG5sIERlZmF1bHQgdmFsdWUgYXMgZGV0ZXJtaW5lZCBhYm92ZQorICApCisgIEFDX01TR19OT1RJQ0UoVXNpbmcgJERFRkFVTFRfVklERU9TSU5LIGFzIGRlZmF1bHQgdmlkZW8gc2luaykKKyAgQUNfU1VCU1QoREVGQVVMVF9WSURFT1NJTkspCisgIEFDX0RFRklORV9VTlFVT1RFRChERUZBVUxUX1ZJREVPU0lOSywgIiRERUZBVUxUX1ZJREVPU0lOSyIsCisgICAgW0RlZmF1bHQgdmlkZW8gc2lua10pCisKKyAgZG5sIERlZmF1bHQgdmlkZW8gc291cmNlCisgIEFDX0FSR19XSVRIKGRlZmF1bHQtdmlkZW9zcmMsCisgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1kZWZhdWx0LXZpZGVvc3JjXSwgW3NwZWNpZnkgZGVmYXVsdCB2aWRlbyBzb3VyY2VdKSwKKyAgICBbCisgICAgICBjYXNlICIke3dpdGh2YWx9IiBpbgorICAgICAgICB5ZXMpIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLWRlZmF1bHQtdmlkZW9zcmMpIDs7CisgICAgICAgIG5vKSAgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke3dpdGh2YWx9IGZvciAtLXdpdGgtZGVmYXVsdC12aWRlb3NyYykgOzsKKyAgICAgICAgKikgICBERUZBVUxUX1ZJREVPU1JDPSIke3dpdGh2YWx9IiA7OworICAgICAgZXNhYworICAgIF0sCisgICAgWworICAgICAgREVGQVVMVF9WSURFT1NSQz0iJERFRkFVTFRfVklERU9TUkMiCisgICAgXSBkbmwgRGVmYXVsdCB2YWx1ZSBhcyBkZXRlcm1pbmVkIGFib3ZlCisgICkKKyAgQUNfTVNHX05PVElDRShVc2luZyAkREVGQVVMVF9WSURFT1NSQyBhcyBkZWZhdWx0IHZpZGVvIHNvdXJjZSkKKyAgQUNfU1VCU1QoREVGQVVMVF9WSURFT1NSQykKKyAgQUNfREVGSU5FX1VOUVVPVEVEKERFRkFVTFRfVklERU9TUkMsICIkREVGQVVMVF9WSURFT1NSQyIsCisgICAgW0RlZmF1bHQgdmlkZW8gc291cmNlXSkKKworICAgIGRubCBEZWZhdWx0IHZpc3VhbGl6ZXIKKyAgQUNfQVJHX1dJVEgoZGVmYXVsdC12aXN1YWxpemVyLAorICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtZGVmYXVsdC12aXN1YWxpemVyXSwgW3NwZWNpZnkgZGVmYXVsdCB2aXN1YWxpemVyXSksCisgICAgWworICAgICAgY2FzZSAiJHt3aXRodmFsfSIgaW4KKyAgICAgICAgeWVzKSBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1kZWZhdWx0LXZpc3VhbGl6ZXIpIDs7CisgICAgICAgIG5vKSAgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke3dpdGh2YWx9IGZvciAtLXdpdGgtZGVmYXVsdC12aXN1YWxpemVyKSA7OworICAgICAgICAqKSAgIERFRkFVTFRfVklTVUFMSVpFUj0iJHt3aXRodmFsfSIgOzsKKyAgICAgIGVzYWMKKyAgICBdLAorICAgIFsKKyAgICAgIERFRkFVTFRfVklTVUFMSVpFUj0iJERFRkFVTFRfVklTVUFMSVpFUiIKKyAgICBdIGRubCBEZWZhdWx0IHZhbHVlIGFzIGRldGVybWluZWQgYWJvdmUKKyAgKQorICBBQ19NU0dfTk9USUNFKFVzaW5nICRERUZBVUxUX1ZJU1VBTElaRVIgYXMgZGVmYXVsdCB2aXN1YWxpemVyKQorICBBQ19TVUJTVChERUZBVUxUX1ZJU1VBTElaRVIpCisgIEFDX0RFRklORV9VTlFVT1RFRChERUZBVUxUX1ZJU1VBTElaRVIsICIkREVGQVVMVF9WSVNVQUxJWkVSIiwKKyAgICBbRGVmYXVsdCB2aXN1YWxpemVyXSkKK10pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ3N0LWRvYy5tNCBiL2NvbW1vbi9tNC9nc3QtZG9jLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MjEwOTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vbTQvZ3N0LWRvYy5tNApAQCAtMCwwICsxLDE0OCBAQAorQUNfREVGVU4oW0FHX0dTVF9ET0NCT09LX0NIRUNLXSwKK1sKKyAgZG5sIGNob29zZSBhIGxvY2F0aW9uIHRvIGluc3RhbGwgZG9jYm9vayBkb2NzIGluCisgIGlmIHRlc3QgIngkUEFDS0FHRV9UQVJOQU1FIiA9ICJ4IgorICB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFtJbnRlcm5hbCBlcnJvciAtIFBBQ0tBR0VfVEFSTkFNRSBub3Qgc2V0XSkKKyAgZmkKKyAgZG9jZGlyPSJcJChkYXRhZGlyKS9kb2MvJFBBQ0tBR0VfVEFSTkFNRS0kR1NUX01BSk9STUlOT1IiCisKKyAgZG5sIGVuYWJsZS9kaXNhYmxlIGRvY2Jvb2sgZG9jdW1lbnRhdGlvbiBidWlsZGluZworICBBQ19BUkdfRU5BQkxFKGRvY2Jvb2ssCisgIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1kb2Nib29rXSwKKyAgICAgICAgICAgICAgICAgW3VzZSBkb2Nib29rIHRvIGJ1aWxkIGRvY3VtZW50YXRpb24gW2RlZmF1bHQ9bm9dXSksLAorICAgICAgICAgICAgICAgICBlbmFibGVfZG9jYm9vaz1ubykKKworICBoYXZlX2RvY2Jvb2s9bm8KKworICBpZiB0ZXN0IHgkZW5hYmxlX2RvY2Jvb2sgPSB4eWVzOyB0aGVuCisgICAgZG5sIGNoZWNrIGlmIHdlIGFjdHVhbGx5IGhhdmUgZXZlcnl0aGluZyB3ZSBuZWVkCisKKyAgICBkbmwgY2hlY2sgZm9yIGRvY2Jvb2sgdG9vbHMKKyAgICBBQ19DSEVDS19QUk9HKEhBVkVfRE9DQk9PSzJQUywgZG9jYm9vazJwcywgeWVzLCBubykKKyAgICBBQ19DSEVDS19QUk9HKEhBVkVfRE9DQk9PSzJIVE1MLCBkb2Nib29rMmh0bWwsIHllcywgbm8pCisgICAgQUNfQ0hFQ0tfUFJPRyhIQVZFX0pBREVURVgsIGphZGV0ZXgsIHllcywgbm8pCisgICAgQUNfQ0hFQ0tfUFJPRyhIQVZFX1BTMlBERiwgcHMycGRmLCB5ZXMsIG5vKQorCisgICAgIyAtViBvcHRpb24gYXBwZWFyZWQgaW4gMC42LjEwCisgICAgZG9jYm9vazJodG1sX21pbl92ZXJzaW9uPTAuNi4xMAorICAgIGlmIHRlc3QgIngkSEFWRV9ET0NCT09LMkhUTUwiICE9ICJ4bm8iOyB0aGVuCisgICAgICBkb2Nib29rMmh0bWxfdmVyc2lvbj1gZG9jYm9vazJodG1sIC0tdmVyc2lvbmAKKyAgICAgIEFDX01TR19DSEVDS0lORyhbZG9jYm9vazJodG1sIHZlcnNpb24gKCRkb2Nib29rMmh0bWxfdmVyc2lvbikgPj0gJGRvY2Jvb2syaHRtbF9taW5fdmVyc2lvbl0pCisgICAgICBpZiBwZXJsIC13IDw8RU9GCisgICAgICAgIChcJG1pbl92ZXJzaW9uX21ham9yLCBcJG1pbl92ZXJzaW9uX21pbm9yLCBcJG1pbl92ZXJzaW9uX21pY3JvICkgPSAiJGRvY2Jvb2syaHRtbF9taW5fdmVyc2lvbiIgPX4gLyhcZCspXC4oXGQrKVwuKFxkKykvOworICAgICAgICAoXCRkb2Nib29rMmh0bWxfdmVyc2lvbl9tYWpvciwgXCRkb2Nib29rMmh0bWxfdmVyc2lvbl9taW5vciwgXCRkb2Nib29rMmh0bWxfdmVyc2lvbl9taWNybyApID0gIiRkb2Nib29rMmh0bWxfdmVyc2lvbiIgPX4gLyhcZCspXC4oXGQrKVwuKFxkKykvOworICAgICAgICBleGl0ICgoKFwkZG9jYm9vazJodG1sX3ZlcnNpb25fbWFqb3IgPiBcJG1pbl92ZXJzaW9uX21ham9yKSB8fAorICAJICAgICAoKFwkZG9jYm9vazJodG1sX3ZlcnNpb25fbWFqb3IgPT0gXCRtaW5fdmVyc2lvbl9tYWpvcikgJiYKKyAgCSAgICAgIChcJGRvY2Jvb2syaHRtbF92ZXJzaW9uX21pbm9yID49IFwkbWluX3ZlcnNpb25fbWlub3IpKSB8fAorICAJICAgICAoKFwkZG9jYm9vazJodG1sX3ZlcnNpb25fbWFqb3IgPT0gXCRtaW5fdmVyc2lvbl9tYWpvcikgJiYKKyAgCSAgICAgIChcJGRvY2Jvb2syaHRtbF92ZXJzaW9uX21pbm9yID49IFwkbWluX3ZlcnNpb25fbWlub3IpICYmCisgIAkgICAgICAoXCRkb2Nib29rMmh0bWxfdmVyc2lvbl9taWNybyA+PSBcJG1pbl92ZXJzaW9uX21pY3JvKSkpCisgIAkgICAgID8gMCA6IDEpOworRU9GCisgICAgICB0aGVuCisgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICAgZWxzZQorICAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICAgICBIQVZFX0RPQ0JPT0sySFRNTD1ubworICAgICAgZmkKKyAgICBmaQorCisgICAgZG5sIGNoZWNrIGlmIHdlIGNhbiBwcm9jZXNzIGRvY2Jvb2sgc3R1ZmYKKyAgICBBU19ET0NCT09LKGhhdmVfZG9jYm9vaz15ZXMsIGhhdmVfZG9jYm9vaz1ubykKKworICAgIGRubCBjaGVjayBmb3IgZXh0cmEgdG9vbHMKKyAgICBBQ19DSEVDS19QUk9HKEhBVkVfRFZJUFMsIGR2aXBzLCB5ZXMsIG5vKQorICAgIEFDX0NIRUNLX1BST0coSEFWRV9YTUxMSU5ULCB4bWxsaW50LCB5ZXMsIG5vKQorCisgICAgZG5sIGNoZWNrIGZvciBpbWFnZSBjb252ZXJzaW9uIHRvb2xzCisgICAgQUNfQ0hFQ0tfUFJPRyhIQVZFX0ZJRzJERVYsIGZpZzJkZXYsIHllcywgbm8pCisgICAgaWYgdGVzdCAieCRIQVZFX0ZJRzJERVYiID0gInhubyIgOyB0aGVuCisgICAgICBBQ19NU0dfV0FSTihbRGlkIG5vdCBmaW5kIGZpZzJkZXYgKGZyb20geGZpZyksIGltYWdlcyB3aWxsIG5vdCBiZSBnZW5lcmF0ZWQuXSkKKyAgICBmaQorCisgICAgZG5sIFRoZSBmb2xsb3dpbmcgaXMgYSBoYWNrOiBpZiBmaWcyZGV2IGRvZXNuJ3QgZGlzcGxheSBhbiBlcnJvciBtZXNzYWdlCisgICAgZG5sIGZvciB0aGUgZGVzaXJlZCB0eXBlLCB3ZSBhc3N1bWUgaXQgc3VwcG9ydHMgaXQuCisgICAgSEFWRV9GSUcyREVWX0VQUz1ubworICAgIGlmIHRlc3QgIngkSEFWRV9GSUcyREVWIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICAgIGZpZzJkZXZfcXVpZXQ9YGZpZzJkZXYgLUwgZXBzIDwvZGV2L251bGwgMj4mMSA+L2Rldi9udWxsYAorICAgICAgaWYgdGVzdCAieCRmaWcyZGV2X3F1aWV0IiA9ICJ4IiA7IHRoZW4KKyAgICAgICAgSEFWRV9GSUcyREVWX0VQUz15ZXMKKyAgICAgIGZpCisgICAgZmkKKyAgICBIQVZFX0ZJRzJERVZfUE5HPW5vCisgICAgaWYgdGVzdCAieCRIQVZFX0ZJRzJERVYiID0gInh5ZXMiIDsgdGhlbgorICAgICAgZmlnMmRldl9xdWlldD1gZmlnMmRldiAtTCBwbmcgPC9kZXYvbnVsbCAyPiYxID4vZGV2L251bGxgCisgICAgICBpZiB0ZXN0ICJ4JGZpZzJkZXZfcXVpZXQiID0gIngiIDsgdGhlbgorICAgICAgICBIQVZFX0ZJRzJERVZfUE5HPXllcworICAgICAgZmkKKyAgICBmaQorICAgIEhBVkVfRklHMkRFVl9QREY9bm8KKyAgICBpZiB0ZXN0ICJ4JEhBVkVfRklHMkRFViIgPSAieHllcyIgOyB0aGVuCisgICAgICBmaWcyZGV2X3F1aWV0PWBmaWcyZGV2IC1MIHBkZiA8L2Rldi9udWxsIDI+JjEgPi9kZXYvbnVsbGAKKyAgICAgIGlmIHRlc3QgIngkZmlnMmRldl9xdWlldCIgPSAieCIgOyB0aGVuCisgICAgICAgIEhBVkVfRklHMkRFVl9QREY9eWVzCisgICAgICBmaQorICAgIGZpCisKKyAgICBBQ19DSEVDS19QUk9HKEhBVkVfUE5HVE9QTk0sIHBuZ3RvcG5tLCB5ZXMsIG5vKQorICAgIEFDX0NIRUNLX1BST0coSEFWRV9QTk1UT1BTLCAgcG5tdG9wcywgIHllcywgbm8pCisgICAgQUNfQ0hFQ0tfUFJPRyhIQVZFX0VQU1RPUERGLCBlcHN0b3BkZiwgeWVzLCBubykKKworICAgIGRubCBjaGVjayBpZiB3ZSBjYW4gZ2VuZXJhdGUgSFRNTAorICAgIGlmIHRlc3QgIngkSEFWRV9ET0NCT09LMkhUTUwiID0gInh5ZXMiICYmIFwKKyAgICAgICB0ZXN0ICJ4JGVuYWJsZV9kb2Nib29rIiA9ICJ4eWVzIiAmJiBcCisgICAgICAgdGVzdCAieCRIQVZFX1hNTExJTlQiID0gInh5ZXMiICYmIFwKKyAgICAgICB0ZXN0ICJ4JEhBVkVfRklHMkRFVl9QTkciID0gInh5ZXMiOyB0aGVuCisgICAgICBET0NfSFRNTD15ZXMKKyAgICAgIEFDX01TR19OT1RJQ0UoV2lsbCBvdXRwdXQgSFRNTCBkb2N1bWVudGF0aW9uKQorICAgICBlbHNlCisgICAgICBET0NfSFRNTD1ubworICAgICAgQUNfTVNHX05PVElDRShXaWxsIG5vdCBvdXRwdXQgSFRNTCBkb2N1bWVudGF0aW9uKQorICAgIGZpCisKKyAgICBkbmwgY2hlY2sgaWYgd2UgY2FuIGdlbmVyYXRlIFBTCisgICAgaWYgdGVzdCAieCRIQVZFX0RPQ0JPT0syUFMiID0gInh5ZXMiICYmIFwKKyAgICAgICB0ZXN0ICJ4JGVuYWJsZV9kb2Nib29rIiA9ICJ4eWVzIiAmJiBcCisgICAgICAgdGVzdCAieCRIQVZFX1hNTExJTlQiID0gInh5ZXMiICYmIFwKKyAgICAgICB0ZXN0ICJ4JEhBVkVfSkFERVRFWCIgPSAieHllcyIgJiYgXAorICAgICAgIHRlc3QgIngkSEFWRV9GSUcyREVWX0VQUyIgPSAieHllcyIgJiYgXAorICAgICAgIHRlc3QgIngkSEFWRV9EVklQUyIgPSAieHllcyIgJiYgXAorICAgICAgIHRlc3QgIngkSEFWRV9QTkdUT1BOTSIgPSAieHllcyIgJiYgXAorICAgICAgIHRlc3QgIngkSEFWRV9QTk1UT1BTIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgRE9DX1BTPXllcworICAgICAgQUNfTVNHX05PVElDRShXaWxsIG91dHB1dCBQUyBkb2N1bWVudGF0aW9uKQorICAgIGVsc2UKKyAgICAgIERPQ19QUz1ubworICAgICAgQUNfTVNHX05PVElDRShXaWxsIG5vdCBvdXRwdXQgUFMgZG9jdW1lbnRhdGlvbikKKyAgICBmaQorCisgICAgZG5sIGNoZWNrIGlmIHdlIGNhbiBnZW5lcmF0ZSBQREYgLSB1c2luZyBvbmx5IHBzMnBkZgorICAgIGlmIHRlc3QgIngkRE9DX1BTIiA9ICJ4eWVzIiAmJiBcCisgICAgICAgdGVzdCAieCRlbmFibGVfZG9jYm9vayIgPSAieHllcyIgJiYgXAorICAgICAgIHRlc3QgIngkSEFWRV9YTUxMSU5UIiA9ICJ4eWVzIiAmJiBcCisgICAgICAgdGVzdCAieCRIQVZFX1BTMlBERiIgPSAieHllcyI7IHRoZW4KKyAgICAgIERPQ19QREY9eWVzCisgICAgICBBQ19NU0dfTk9USUNFKFdpbGwgb3V0cHV0IFBERiBkb2N1bWVudGF0aW9uKQorICAgIGVsc2UKKyAgICAgIERPQ19QREY9bm8KKyAgICAgIEFDX01TR19OT1RJQ0UoV2lsbCBub3Qgb3V0cHV0IFBERiBkb2N1bWVudGF0aW9uKQorICAgIGZpCisKKyAgICBkbmwgaWYgd2UgZG9uJ3QgaGF2ZSBldmVyeXRoaW5nLCB3ZSBzaG91bGQgZGlzYWJsZQorICAgIGlmIHRlc3QgIngkaGF2ZV9kb2Nib29rIiAhPSAieHllcyI7IHRoZW4KKyAgICAgIGVuYWJsZV9kb2Nib29rPW5vCisgICAgZmkKKyAgZmkKKworICBkbmwgaWYgd2UncmUgZ29pbmcgdG8gaW5zdGFsbCBkb2N1bWVudGF0aW9uLCB0ZWxsIHVzIHdoZXJlCisgIGlmIHRlc3QgIngkaGF2ZV9kb2Nib29rIiA9ICJ4eWVzIjsgdGhlbgorICAgIEFDX01TR19OT1RJQ0UoSW5zdGFsbGluZyBkb2N1bWVudGF0aW9uIGluICRkb2NkaXIpCisgICAgQUNfU1VCU1QoZG9jZGlyKQorICBmaQorCisgIEFNX0NPTkRJVElPTkFMKEVOQUJMRV9ET0NCT09LLCAgICAgIHRlc3QgeCRlbmFibGVfZG9jYm9vayA9IHh5ZXMpCisgIEFNX0NPTkRJVElPTkFMKERPQ19IVE1MLCAgICAgICAgICAgIHRlc3QgeCRET0NfSFRNTCA9IHh5ZXMpCisgIEFNX0NPTkRJVElPTkFMKERPQ19QREYsICAgICAgICAgICAgIHRlc3QgeCRET0NfUERGID0geHllcykKKyAgQU1fQ09ORElUSU9OQUwoRE9DX1BTLCAgICAgICAgICAgICAgdGVzdCB4JERPQ19QUyA9IHh5ZXMpCitdKQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2dzdC1kb3doaWxlLm00IGIvY29tbW9uL200L2dzdC1kb3doaWxlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2OTgwOGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQKQEAgLTAsMCArMSwyNCBAQAorZG5sCitkbmwgQ2hlY2sgZm9yIHdvcmtpbmcgZG8gd2hpbGUoMCkgbWFjcm9zLiBUaGlzIGlzIHVzZWQgYnkgR19TVE1UX1NUQVJUCitkbmwgYW5kIEdfU1RNVF9FTkQgaW4gZ2xpYi9nbWFjcm9zLmguIFdpdGhvdXQgaGF2aW5nIHRoaXMgZGVmaW5lZCB3ZQorZG5sIGdldCAiYW1iaWdpb3VzIGlmLWVsc2UiIGNvbXBpbGVyIHdhcm5pbmdzIHdoZW4gY29tcGxpbmcgQysrIGNvZGUuCitkbmwKK2RubCBDb3BpZWQgZnJvbSBHTGliJ3MgY29uZmlndXJlLmluCitkbmwKK0FDX0RFRlVOKFtBR19HU1RfQ0hFQ0tfRE9XSElMRV9NQUNST1NdLFsKKworZG5sICoqKiBjaGVjayBmb3Igd29ya2luZyBkbyB3aGlsZSgwKSBtYWNyb3MgKioqCitBQ19DQUNIRV9DSEVDSyhbZm9yIHdvcmtpbmcgZG8gd2hpbGUoMCkgbWFjcm9zXSwgX2N2X2dfc3VwcG9ydF9kb3doaWxlX21hY3JvcywgWworCUFDX1RSWV9DT01QSUxFKFtdLFsKKwkjZGVmaW5lIFNUTVRfU1RBUlQgZG8KKwkjZGVmaW5lIFNUTVRfRU5EIHdoaWxlKDApCisJI2RlZmluZSBTVE1UX1RFU1QgU1RNVF9TVEFSVCB7IGkgPSAwOyB9IFNUTVRfRU5ECisJaW50IG1haW4odm9pZCkgeyBpbnQgaSA9IDE7IFNUTVRfVEVTVDsgcmV0dXJuIGk7IH1dLAorCVtfY3ZfZ19zdXBwb3J0X2Rvd2hpbGVfbWFjcm9zPXllc10sCisJW19jdl9nX3N1cHBvcnRfZG93aGlsZV9tYWNyb3M9bm9dLAorCVtfY3ZfZ19zdXBwb3J0X2Rvd2hpbGVfbWFjcm9zPXllc10pCitdKQoraWYgdGVzdCB4JF9jdl9nX3N1cHBvcnRfZG93aGlsZV9tYWNyb3MgPSB4eWVzOyB0aGVuCisgIEFDX0RFRklORShIQVZFX0RPV0hJTEVfTUFDUk9TLCAxLCBbZGVmaW5lIGZvciB3b3JraW5nIGRvIHdoaWxlKDApIG1hY3Jvc10pCitmaQorXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgYi9jb21tb24vbTQvZ3N0LWVycm9yLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZjIzNjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vbTQvZ3N0LWVycm9yLm00CkBAIC0wLDAgKzEsMjEzIEBACitkbmwgaGFuZGxlIHZhcmlvdXMgZXJyb3ItcmVsYXRlZCB0aGluZ3MKKworZG5sIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorZG5sIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+CisKK2RubCBMYXN0IG1vZGlmaWNhdGlvbjogMjAwOC0wMi0xOAorCitkbmwgQUdfR1NUX1NFVF9FUlJPUl9DRkxBR1MoW0FERC1XRVJST1JdLCBbTU9SRV9GTEFHU10pCitkbmwgQUdfR1NUX1NFVF9FUlJPUl9DWFhGTEFHUyhbQURELVdFUlJPUl0sIFtNT1JFX0ZMQUdTXSkKK2RubCBBR19HU1RfU0VUX0xFVkVMX0RFRkFVTFQoW0lTLUdJVC1WRVJTSU9OXSkKKworCitkbmwgU2V0cyBXQVJOSU5HX0NGTEFHUyBhbmQgRVJST1JfQ0ZMQUdTIHRvIHNvbWV0aGluZyB0aGUgY29tcGlsZXIgCitkbmwgd2lsbCBhY2NlcHQgYW5kIEFDX1NVQlNUIHRoZW0gc28gdGhleSBhcmUgYXZhaWxhYmxlIGluIE1ha2VmaWxlCitkbmwKK2RubCBXQVJOSU5HX0NGTEFHUyB3aWxsIGNvbnRhaW4gZmxhZ3MgdG8gbWFrZSB0aGUgY29tcGlsZXIgZW1pdCBtb3JlCitkbmwgICB3YXJuaW5ncy4KK2RubCBFUlJPUl9DRkxBR1Mgd2lsbCBjb250YWluIGZsYWdzIHRvIG1ha2UgdGhvc2Ugd2FybmluZ3MgZmF0YWwsCitkbmwgICB1bmxlc3MgQURELVdFUlJPUiBpcyBzZXQgdG8gIm5vIgorZG5sIAorZG5sIElmIE1PUkVfRkxBR1MgaXMgc2V0LCB0cmllcyB0byBhZGQgZWFjaCBvZiB0aGUgZ2l2ZW4gZmxhZ3MKK2RubCB0byBXQVJOSU5HX0NGTEFHUyBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlbS4gRWFjaCBmbGFnIGlzIAorZG5sIHRlc3RlZCBzZXBhcmF0ZWx5LgorZG5sCitkbmwgVGhlc2UgZmxhZ3MgY2FuIGJlIG92ZXJyaWRkZW4gYXQgbWFrZSB0aW1lOgorZG5sIG1ha2UgRVJST1JfQ0ZMQUdTPQorQUNfREVGVU4oW0FHX0dTVF9TRVRfRVJST1JfQ0ZMQUdTXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCisgIEFDX1JFUVVJUkUoW0FTX0NPTVBJTEVSX0ZMQUddKQorCisgIFdBUk5JTkdfQ0ZMQUdTPSIiCisgIEVSUk9SX0NGTEFHUz0iIgorCisgIGRubCBpZiB3ZSBzdXBwb3J0IC1XYWxsLCBzZXQgaXQgdW5jb25kaXRpb25hbGx5CisgIEFTX0NPTVBJTEVSX0ZMQUcoLVdhbGwsCisgICAgICAgICAgICAgICAgICAgV0FSTklOR19DRkxBR1M9IiRXQVJOSU5HX0NGTEFHUyAtV2FsbCIpCisKKyAgZG5sIFdhcm4gaWYgZGVjbGFyYXRpb25zIGFmdGVyIHN0YXRlbWVudHMgYXJlIHVzZWQgKEM5OSBleHRlbnNpb24pCisgIEFTX0NPTVBJTEVSX0ZMQUcoLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQsCisgICAgICAgIFdBUk5JTkdfQ0ZMQUdTPSIkV0FSTklOR19DRkxBR1MgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQiKQorCisgIGRubCBXYXJuIGlmIHZhcmlhYmxlIGxlbmd0aCBhcnJheXMgYXJlIHVzZWQgKEM5OSBleHRlbnNpb24pCisgIEFTX0NPTVBJTEVSX0ZMQUcoLVd2bGEsCisgICAgICAgIFdBUk5JTkdfQ0ZMQUdTPSIkV0FSTklOR19DRkxBR1MgLVd2bGEiKQorCisgIGRubCBXYXJuIGZvciBpbnZhbGlkIHBvaW50ZXIgYXJpdGhtZXRpYworICBBU19DT01QSUxFUl9GTEFHKC1XcG9pbnRlci1hcml0aCwKKyAgICAgICAgV0FSTklOR19DRkxBR1M9IiRXQVJOSU5HX0NGTEFHUyAtV3BvaW50ZXItYXJpdGgiKQorCisgIGRubCBpZiBhc2tlZCBmb3IsIGFkZCAtV2Vycm9yIGlmIHN1cHBvcnRlZAorICBpZiB0ZXN0ICJ4JDEiICE9ICJ4bm8iCisgIHRoZW4KKyAgICBBU19DT01QSUxFUl9GTEFHKC1XZXJyb3IsIEVSUk9SX0NGTEFHUz0iJEVSUk9SX0NGTEFHUyAtV2Vycm9yIikKKworICAgIGRubCBpZiAtV2Vycm9yIGlzbid0IHN1cG9ydGVkLCB0cnkgLWVycndhcm49JWFsbCAoU3VuIEZvcnRlIGNhc2UpCisgICAgaWYgdGVzdCAieCRFUlJPUl9DRkxBR1MiID0gIngiCisgICAgdGhlbgorICAgICAgQVNfQ09NUElMRVJfRkxBRyhbLWVycndhcm49JWFsbF0sIFsKKyAgICAgICAgICBFUlJPUl9DRkxBR1M9Ii1lcnJ3YXJuPSVhbGwiCisgICAgICAgICAgZG5sIHRyeSAtZXJyd2Fybj0lYWxsLG5vJUVfRU1QVFlfREVDTEFSQVRJT04sCisgICAgICAgICAgZG5sIG5vJUVfU1RBVEVNRU5UX05PVF9SRUFDSEVELG5vJUVfQVJHVUVNRU5UX01JU01BVENILAorICAgICAgICAgIGRubCBubyVFX01BQ1JPX1JFREVGSU5FRCAoU3VuIEZvcnRlIGNhc2UpCisgICAgICAgICAgZG5sIEZvciBGb3J0ZSB3ZSBuZWVkIGRpc2FibGUgImVtcHR5IGRlY2xhcmF0aW9uIiB3YXJuaW5nIHByb2R1Y2VkIGJ5IHVuLW5lZWRlZCBzZW1pY29sb24KKyAgICAgICAgICBkbmwgInN0YXRlbWVudCBub3QgcmVhY2hlZCIgZGlzYWJsZWQgYmVjYXVzZSB0aGVyZSBpcyBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKSBpbiBzb21lIHBsYWNlcworICAgICAgICAgIGRubCAibWFjcm8gcmVkZWZpbmVkIiBiZWNhdXNlIG9mIGdzdC9nZXR0ZXh0LmgKKyAgICAgICAgICBkbmwgRklYTUU6IGlzIGl0IHJlYWxseSBzdXBwb3NlZCB0byBiZSAnQVJHVUVNRU5UJyBhbmQgbm90ICdBUkdVTUVOVCc/CisgICAgICAgICAgZm9yIGYgaW4gJ25vJUVfRU1QVFlfREVDTEFSQVRJT04nIFwKKyAgICAgICAgICAgICAgICAgICAnbm8lRV9TVEFURU1FTlRfTk9UX1JFQUNIRUQnIFwKKyAgICAgICAgICAgICAgICAgICAnbm8lRV9BUkdVRU1FTlRfTUlTTUFUQ0gnIFwKKyAgICAgICAgICAgICAgICAgICAnbm8lRV9NQUNST19SRURFRklORUQnIFwKKyAgICAgICAgICAgICAgICAgICAnbm8lRV9MT09QX05PVF9FTlRFUkVEX0FUX1RPUCcKKyAgICAgICAgICBkbworICAgICAgICAgICAgQVNfQ09NUElMRVJfRkxBRyhbLWVycndhcm49JWFsbCwkZl0sIFsKKyAgICAgICAgICAgICAgRVJST1JfQ0ZMQUdTPSIkRVJST1JfQ0ZMQUdTLCRmIgorICAgICAgICAgICAgXSkKKyAgICAgICAgICBkb25lCisgICAgICBdKQorICAgIGVsc2UKKyAgICAgIGRubCBBZGQgLWZuby1zdHJpY3QtYWxpYXNpbmcgZm9yIEdMaWIgdmVyc2lvbnMgYmVmb3JlIDIuMTkuOAorICAgICAgZG5sIGFzIGJlZm9yZSBHX0xPQ0sgYW5kIGZyaWVuZHMgY2F1c2VkIHN0cmljdCBhbGlhc2luZyBjb21waWxlcgorICAgICAgZG5sIHdhcm5pbmdzLgorICAgICAgUEtHX0NIRUNLX0VYSVNUUyhbZ2xpYi0yLjAgPCAyLjE5LjhdLCBbCisgICAgICAgIEFTX0NPTVBJTEVSX0ZMQUcoLWZuby1zdHJpY3QtYWxpYXNpbmcsCisgICAgICAgICAgICBFUlJPUl9DRkxBR1M9IiRFUlJPUl9DRkxBR1MgLWZuby1zdHJpY3QtYWxpYXNpbmciKQorCV0pCisgICAgZmkKKyAgZmkKKworICBpZiB0ZXN0ICJ4JDIiICE9ICJ4IgorICB0aGVuCisgICAgVU5TVVBQT1JURUQ9IiIKKyAgICBsaXN0PSIkMiIKKyAgICBmb3IgZWFjaCBpbiAkbGlzdAorICAgIGRvCisgICAgICBBU19DT01QSUxFUl9GTEFHKCRlYWNoLAorICAgICAgICAgIFdBUk5JTkdfQ0ZMQUdTPSIkV0FSTklOR19DRkxBR1MgJGVhY2giLAorICAgICAgICAgIFVOU1VQUE9SVEVEPSIkVU5TVVBQT1JURUQgJGVhY2giKQorICAgIGRvbmUKKyAgICBpZiB0ZXN0ICJYJFVOU1VQUE9SVEVEIiAhPSBYIDsgdGhlbgorICAgICAgQUNfTVNHX05PVElDRShbdW5zdXBwb3J0ZWQgY29tcGlsZXIgZmxhZ3M6ICRVTlNVUFBPUlRFRF0pCisgICAgZmkKKyAgZmkKKworICBBQ19TVUJTVChXQVJOSU5HX0NGTEFHUykKKyAgQUNfU1VCU1QoRVJST1JfQ0ZMQUdTKQorICBBQ19NU0dfTk9USUNFKFtzZXQgV0FSTklOR19DRkxBR1MgdG8gJFdBUk5JTkdfQ0ZMQUdTXSkKKyAgQUNfTVNHX05PVElDRShbc2V0IEVSUk9SX0NGTEFHUyB0byAkRVJST1JfQ0ZMQUdTXSkKK10pCisKK2RubCBTZXRzIFdBUk5JTkdfQ1hYRkxBR1MgYW5kIEVSUk9SX0NYWEZMQUdTIHRvIHNvbWV0aGluZyB0aGUgY29tcGlsZXIgCitkbmwgd2lsbCBhY2NlcHQgYW5kIEFDX1NVQlNUIHRoZW0gc28gdGhleSBhcmUgYXZhaWxhYmxlIGluIE1ha2VmaWxlCitkbmwKK2RubCBXQVJOSU5HX0NYWEZMQUdTIHdpbGwgY29udGFpbiBmbGFncyB0byBtYWtlIHRoZSBjb21waWxlciBlbWl0IG1vcmUKK2RubCAgIHdhcm5pbmdzLgorZG5sIEVSUk9SX0NYWEZMQUdTIHdpbGwgY29udGFpbiBmbGFncyB0byBtYWtlIHRob3NlIHdhcm5pbmdzIGZhdGFsLAorZG5sICAgdW5sZXNzIEFERC1XRVJST1IgaXMgc2V0IHRvICJubyIKK2RubCAKK2RubCBJZiBNT1JFX0ZMQUdTIGlzIHNldCwgdHJpZXMgdG8gYWRkIGVhY2ggb2YgdGhlIGdpdmVuIGZsYWdzCitkbmwgdG8gV0FSTklOR19DRkxBR1MgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZW0uIEVhY2ggZmxhZyBpcyAKK2RubCB0ZXN0ZWQgc2VwYXJhdGVseS4KK2RubAorZG5sIFRoZXNlIGZsYWdzIGNhbiBiZSBvdmVycmlkZGVuIGF0IG1ha2UgdGltZToKK2RubCBtYWtlIEVSUk9SX0NYWEZMQUdTPQorQUNfREVGVU4oW0FHX0dTVF9TRVRfRVJST1JfQ1hYRkxBR1NdLAorWworICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NYWF0pCisgIEFDX1JFUVVJUkUoW0FTX0NYWF9DT01QSUxFUl9GTEFHXSkKKworICBFUlJPUl9DWFhGTEFHUz0iIgorICBXQVJOSU5HX0NYWEZMQUdTPSIiCisKKyAgZG5sIGlmIHdlIHN1cHBvcnQgLVdhbGwsIHNldCBpdCB1bmNvbmRpdGlvbmFsbHkKKyAgQVNfQ1hYX0NPTVBJTEVSX0ZMQUcoLVdhbGwsIFdBUk5JTkdfQ1hYRkxBR1M9IiRXQVJOSU5HX0NYWEZMQUdTIC1XYWxsIikKKworICBkbmwgaWYgYXNrZWQgZm9yLCBhZGQgLVdlcnJvciBpZiBzdXBwb3J0ZWQKKyAgaWYgdGVzdCAieCQxIiAhPSAieG5vIgorICB0aGVuCisgICAgQVNfQ1hYX0NPTVBJTEVSX0ZMQUcoLVdlcnJvciwgRVJST1JfQ1hYRkxBR1M9IiRFUlJPUl9DWFhGTEFHUyAtV2Vycm9yIikKKworICAgIGlmIHRlc3QgIngkRVJST1JfQ1hYRkxBR1MiICE9ICJ4IgorICAgIHRoZW4KKyAgICAgICAgZG5sIGFkZCBleGNlcHRpb25zCisgICAgICAgIEFTX0NYWF9DT01QSUxFUl9GTEFHKFstV25vLW5vbi12aXJ0dWFsLWR0b3JdLCBFUlJPUl9DWFhGTEFHUz0iJEVSUk9SX0NYWEZMQUdTIC1Xbm8tbm9uLXZpcnR1YWwtZHRvciIpCisKKwlkbmwgQWRkIC1mbm8tc3RyaWN0LWFsaWFzaW5nIGZvciBHTGliIHZlcnNpb25zIGJlZm9yZSAyLjE5LjgKKwlkbmwgYXMgYmVmb3JlIEdfTE9DSyBhbmQgZnJpZW5kcyBjYXVzZWQgc3RyaWN0IGFsaWFzaW5nIGNvbXBpbGVyCisJZG5sIHdhcm5pbmdzLgorCVBLR19DSEVDS19FWElTVFMoW2dsaWItMi4wIDwgMi4xOS44XSwgWworCSAgQVNfQ1hYX0NPTVBJTEVSX0ZMQUcoWy1mbm8tc3RyaWN0LWFsaWFzaW5nXSwKKwkgICAgRVJST1JfQ1hYRkxBR1M9IiRFUlJPUl9DWFhGTEFHUyAtZm5vLXN0cmljdC1hbGlhc2luZyIpCisJICBdKQorICAgIGVsc2UKKyAgICAgIGRubCBpZiAtV2Vycm9yIGlzbid0IHN1cG9ydGVkLCB0cnkgLWVycndhcm49JWFsbAorICAgICAgQVNfQ1hYX0NPTVBJTEVSX0ZMQUcoWy1lcnJ3YXJuPSVhbGxdLCBFUlJPUl9DWFhGTEFHUz0iJEVSUk9SX0NYWEZMQUdTIC1lcnJ3YXJuPSVhbGwiKQorICAgICAgaWYgdGVzdCAieCRFUlJPUl9DWFhGTEFHUyIgIT0gIngiOyB0aGVuCisgICAgICAgIGRubCB0cnkgLWVycndhcm49JWFsbCxubyVFX0VNUFRZX0RFQ0xBUkFUSU9OLAorICAgICAgICBkbmwgbm8lRV9TVEFURU1FTlRfTk9UX1JFQUNIRUQsbm8lRV9BUkdVRU1FTlRfTUlTTUFUQ0gsCisgICAgICAgIGRubCBubyVFX01BQ1JPX1JFREVGSU5FRCAoU3VuIEZvcnRlIGNhc2UpCisgICAgICAgIGRubCBGb3IgRm9ydGUgd2UgbmVlZCBkaXNhYmxlICJlbXB0eSBkZWNsYXJhdGlvbiIgd2FybmluZyBwcm9kdWNlZCBieSB1bi1uZWVkZWQgc2VtaWNvbG9uCisgICAgICAgIGRubCAic3RhdGVtZW50IG5vdCByZWFjaGVkIiBkaXNhYmxlZCBiZWNhdXNlIHRoZXJlIGlzIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpIGluIHNvbWUgcGxhY2VzCisgICAgICAgIGRubCAibWFjcm8gcmVkZWZpbmVkIiBiZWNhdXNlIG9mIGdzdC9nZXR0ZXh0LmgKKyAgICAgICAgZG5sIEZJWE1FOiBpcyBpdCByZWFsbHkgc3VwcG9zZWQgdG8gYmUgJ0FSR1VFTUVOVCcgYW5kIG5vdCAnQVJHVU1FTlQnPworICAgICAgICBkbmwgRklYTUU6IGRvIGFueSBvZiB0aGVzZSB3b3JrIHdpdGggdGhlIGMrKyBjb21waWxlcj8gaWYgbm90LCB3aHkKKyAgICAgICAgZG5sIGRvIHdlIGNoZWNrIGF0IGFsbD8KKyAgICAgICAgZm9yIGYgaW4gJ25vJUVfRU1QVFlfREVDTEFSQVRJT04nIFwKKyAgICAgICAgICAgICAgICAgJ25vJUVfU1RBVEVNRU5UX05PVF9SRUFDSEVEJyBcCisgICAgICAgICAgICAgICAgICdubyVFX0FSR1VFTUVOVF9NSVNNQVRDSCcgXAorICAgICAgICAgICAgICAgICAnbm8lRV9NQUNST19SRURFRklORUQnIFwKKyAgICAgICAgICAgICAgICAgJ25vJUVfTE9PUF9OT1RfRU5URVJFRF9BVF9UT1AnCisgICAgICAgIGRvCisgICAgICAgICAgQVNfQ1hYX0NPTVBJTEVSX0ZMQUcoWy1lcnJ3YXJuPSVhbGwsJGZdLCBFUlJPUl9DWFhGTEFHUz0iJEVSUk9SX0NYWEZMQUdTLCRmIikKKyAgICAgICAgZG9uZQorICAgICAgZmkKKyAgICBmaQorICBmaQorCisgIGlmIHRlc3QgIngkMiIgIT0gIngiCisgIHRoZW4KKyAgICBVTlNVUFBPUlRFRD0iIgorICAgIGxpc3Q9IiQyIgorICAgIGZvciBlYWNoIGluICRsaXN0CisgICAgZG8KKyAgICAgIEFTX0NYWF9DT01QSUxFUl9GTEFHKCRlYWNoLAorICAgICAgICAgIFdBUk5JTkdfQ1hYRkxBR1M9IiRXQVJOSU5HX0NYWEZMQUdTICRlYWNoIiwKKyAgICAgICAgICBVTlNVUFBPUlRFRD0iJFVOU1VQUE9SVEVEICRlYWNoIikKKyAgICBkb25lCisgICAgaWYgdGVzdCAiWCRVTlNVUFBPUlRFRCIgIT0gWCA7IHRoZW4KKyAgICAgIEFDX01TR19OT1RJQ0UoW3Vuc3VwcG9ydGVkIGNvbXBpbGVyIGZsYWdzOiAkVU5TVVBQT1JURURdKQorICAgIGZpCisgIGZpCisKKyAgQUNfU1VCU1QoV0FSTklOR19DWFhGTEFHUykKKyAgQUNfU1VCU1QoRVJST1JfQ1hYRkxBR1MpCisgIEFDX01TR19OT1RJQ0UoW3NldCBXQVJOSU5HX0NYWEZMQUdTIHRvICRXQVJOSU5HX0NYWEZMQUdTXSkKKyAgQUNfTVNHX05PVElDRShbc2V0IEVSUk9SX0NYWEZMQUdTIHRvICRFUlJPUl9DWFhGTEFHU10pCitdKQorCitkbmwgU2V0cyB0aGUgZGVmYXVsdCBlcnJvciBsZXZlbCBmb3IgZGVidWdnaW5nIG1lc3NhZ2VzCitBQ19ERUZVTihbQUdfR1NUX1NFVF9MRVZFTF9ERUZBVUxUXSwKK1sKKyAgZG5sIGRlZmluZSBjb3JyZWN0IGVycm9ybGV2ZWwgZm9yIGRlYnVnZ2luZyBtZXNzYWdlcy4gV2Ugd2FudCB0byBoYXZlCisgIGRubCBHU1RfRVJST1IgbWVzc2FnZXMgcHJpbnRlZCB3aGVuIHJ1bm5pbmcgY3ZzIGJ1aWxkcworICBpZiB0ZXN0ICJ4WyQxXSIgPSAieHllcyI7IHRoZW4KKyAgICBHU1RfTEVWRUxfREVGQVVMVD1HU1RfTEVWRUxfRVJST1IKKyAgZWxzZQorICAgIEdTVF9MRVZFTF9ERUZBVUxUPUdTVF9MRVZFTF9OT05FCisgIGZpCisgIEFDX0RFRklORV9VTlFVT1RFRChHU1RfTEVWRUxfREVGQVVMVCwgJEdTVF9MRVZFTF9ERUZBVUxULAorICAgIFtEZWZhdWx0IGVycm9ybGV2ZWwgdG8gdXNlXSkKKyAgZG5sIEFDX1NVQlNUIHNvIHdlIGNhbiB1c2UgaXQgZm9yIHdpbjMyL2NvbW1vbi9jb25maWcuaAorICBBQ19TVUJTVChHU1RfTEVWRUxfREVGQVVMVCkKK10pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgYi9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y2ODRiMAotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNApAQCAtMCwwICsxLDI2NiBAQAorZG5sIFBlcmZvcm0gYSBjaGVjayBmb3IgYSBmZWF0dXJlIGZvciBHU3RyZWFtZXIKK2RubCBSaWNoYXJkIEJvdWx0b24gPHJpY2hhcmQtYWxzYUB0YXJ0YXJ1cy5vcmc+CitkbmwgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+IGFkZGVkIHVzZWZ1bCBzdHVmZgorZG5sIExhc3QgbW9kaWZpY2F0aW9uOiAyNS8wNi8yMDAxCitkbmwKK2RubCBBR19HU1RfQ0hFQ0tfRkVBVFVSRShGRUFUVVJFLU5BTUUsIEZFQVRVUkUtREVTQ1JJUFRJT04sCitkbmwgICAgICAgICAgICAgICAgICAgREVQRU5ERU5ULVBMVUdJTlMsIFRFU1QtRk9SLUZFQVRVUkUsCitkbmwgICAgICAgICAgICAgICAgICAgRElTQUJMRS1CWS1ERUZBVUxULCBBQ1RJT04tSUYtVVNFLCBBQ1RJT04tSUYtTk9UVVNFKQorZG5sCitkbmwgVGhpcyBtYWNybyBhZGRzIGEgY29tbWFuZCBsaW5lIGFyZ3VtZW50IHRvIGFsbG93IHRoZSB1c2VyIHRvIGVuYWJsZQorZG5sIG9yIGRpc2FibGUgYSBmZWF0dXJlLCBhbmQgaWYgdGhlIGZlYXR1cmUgaXMgZW5hYmxlZCwgcGVyZm9ybXMgYSBzdXBwbGllZAorZG5sIHRlc3QgdG8gY2hlY2sgaWYgdGhlIGZlYXR1cmUgaXMgYXZhaWxhYmxlLgorZG5sCitkbmwgVGhlIHRlc3Qgc2hvdWxkIGRlZmluZSBIQVZFXzxGRUFUVVJFLU5BTUU+IHRvICJ5ZXMiIG9yICJubyIgZGVwZW5kaW5nCitkbmwgb24gd2hldGhlciB0aGUgZmVhdHVyZSBpcyBhdmFpbGFibGUuCitkbmwKK2RubCBUaGUgbWFjcm8gd2lsbCBzZXQgVVNFXzxGRUFUVVJFLU5BTUU+IHRvICJ5ZXMiIG9yICJubyIgZGVwZW5kaW5nIG9uCitkbmwgd2hldGhlciB0aGUgZmVhdHVyZSBpcyB0byBiZSB1c2VkLgorZG5sIFRob21hcyBjaGFuZ2VkIHRoaXMsIHNvIHRoYXQgd2hlbiBVU0VfPEZFQVRVUkUtTkFNRT4gd2FzIGFscmVhZHkgc2V0CitkbmwgdG8gbm8sIHRoZW4gaXQgc3RheXMgdGhhdCB3YXkuCitkbmwKK2RubCBUaGUgbWFjcm8gd2lsbCBjYWxsIEFNX0NPTkRJVElPTkFMKFVTRV88RkVBVFVSRS1OQU1FPiwgLi4uKSB0byBhbGxvdworZG5sIHRoZSBmZWF0dXJlIHRvIGNvbnRyb2wgd2hhdCBpcyBidWlsdCBpbiBNYWtlZmlsZS5hbXMuICBJZiB5b3Ugd2FudAorZG5sIGFkZGl0aW9uYWwgYWN0aW9ucyByZXN1bHRpbmcgZnJvbSB0aGUgdGVzdCwgeW91IGNhbiBhZGQgdGhlbSB3aXRoIHRoZQorZG5sIEFDVElPTi1JRi1VU0UgYW5kIEFDVElPTi1JRi1OT1RVU0UgcGFyYW1ldGVycy4KK2RubAorZG5sIEZFQVRVUkUtTkFNRSAgICAgICAgaXMgdGhlIG5hbWUgb2YgdGhlIGZlYXR1cmUsIGFuZCBzaG91bGQgYmUgaW4KK2RubCAgICAgICAgICAgICAgICAgICAgIHB1cmVseSB1cHBlciBjYXNlIGNoYXJhY3RlcnMuCitkbmwgRkVBVFVSRS1ERVNDUklQVElPTiBpcyB1c2VkIHRvIGRlc2NyaWJlIHRoZSBmZWF0dXJlIGluIGhlbHAgdGV4dCBmb3IKK2RubCAgICAgICAgICAgICAgICAgICAgIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnQuCitkbmwgREVQRU5ERU5ULVBMVUdJTlMgICBsaXN0cyBhbnkgcGx1Zy1pbnMgd2hpY2ggZGVwZW5kIG9uIHRoaXMgZmVhdHVyZS4KK2RubCBURVNULUZPUi1GRUFUVVJFICAgIGlzIGEgdGVzdCB3aGljaCBzZXRzIEhBVkVfPEZFQVRVUkUtTkFNRT4gdG8gInllcyIKK2RubCAgICAgICAgICAgICAgICAgICAgIG9yICJubyIgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGZlYXR1cmUgaXMKK2RubCAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZS4KK2RubCBESVNBQkxFLUJZLURFRkFVTFQgIGlmICJkaXNhYmxlZCIsIHRoZSBmZWF0dXJlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsCitkbmwgICAgICAgICAgICAgICAgICAgICBpZiBhbnkgb3RoZXIgdmFsdWUsIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KK2RubCBBQ1RJT04tSUYtVVNFICAgICAgIGFueSBleHRyYSBhY3Rpb25zIHRvIHBlcmZvcm0gaWYgdGhlIGZlYXR1cmUgaXMgdG8gYmUKK2RubCAgICAgICAgICAgICAgICAgICAgIHVzZWQuCitkbmwgQUNUSU9OLUlGLU5PVFVTRSAgICBhbnkgZXh0cmEgYWN0aW9ucyB0byBwZXJmb3JtIGlmIHRoZSBmZWF0dXJlIGlzIG5vdCB0bworZG5sICAgICAgICAgICAgICAgICAgICAgYmUgdXNlZC4KK2RubAorZG5sCitkbmwgdGhvbWFzIDoKK2RubCB3ZSBhbHNvIGFkZGVkIGEgaGlzdG9yeS4KK2RubCBHU1RfUExVR0lOU19ZRVMgd2lsbCBjb250YWluIGFsbCBwbHVnaW5zIHRvIGJlIGJ1aWx0CitkbmwgICAgICAgICAgICAgICAgIHRoYXQgd2VyZSBjaGVja2VkIHRocm91Z2ggQUdfR1NUX0NIRUNLX0ZFQVRVUkUKK2RubCBHU1RfUExVR0lOU19OTyB3aWxsIGNvbnRhaW4gdGhvc2UgdGhhdCB3b24ndCBiZSBidWlsdAorCitBQ19ERUZVTihbQUdfR1NUX0NIRUNLX0ZFQVRVUkVdLAorW2VjaG8KK0FDX01TR19OT1RJQ0UoKioqIGNoZWNraW5nIGZlYXR1cmU6IFskMl0gKioqKQoraWYgdGVzdCAieFskM10iICE9ICJ4IgordGhlbgorICBBQ19NU0dfTk9USUNFKCoqKiBmb3IgcGx1Zy1pbnM6IFskM10gKioqKQorZmkKK2RubAorYnVpbHRpbihkZWZpbmUsIFtnc3RfZW5kaXNhYmxlXSwgaWZlbHNlKCQ1LCBbZGlzYWJsZWRdLCBbZW5hYmxlXSwgW2Rpc2FibGVdKSlkbmwKK2RubCBpZiBpdCBpcyBzZXQgdG8gTk8sIHRoZW4gZG9uJ3QgZXZlbiBjb25zaWRlciBpdCBmb3IgYnVpbGRpbmcKK05PVVNFPQoraWYgdGVzdCAieCRVU0VfWyQxXSIgPSAieG5vIjsgdGhlbgorICBOT1VTRT0ieWVzIgorZmkKK0FDX0FSR19FTkFCTEUodHJhbnNsaXQoWyQxXSwgQS1aLCBhLXopLAorICBbICBdYnVpbHRpbihmb3JtYXQsIC0tJS0yNnMgZ3N0X2VuZGlzYWJsZSAlcywgZ3N0X2VuZGlzYWJsZS10cmFuc2xpdChbJDFdLCBBLVosIGEteiksIFskMl1pZmVsc2UoWyQzXSwsLDogWyQzXSkpLAorICBbIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgIHllcykgVVNFX1skMV09eWVzOzsKKyAgICAgIG5vKSBVU0VfWyQxXT1ubzs7CisgICAgICAqKSBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtdHJhbnNsaXQoWyQxXSwgQS1aLCBhLXopKSA7OworICAgIGVzYWNdLAorICBbIFVTRV8kMT1daWZlbHNlKCQ1LCBbZGlzYWJsZWRdLCBbbm9dLCBbeWVzXSkpICAgICAgICAgICBkbmwgREVGQVVMVAorCitkbmwgKioqIHNldCBpdCBiYWNrIHRvIG5vIGlmIGl0IHdhcyBwcmVzZXQgdG8gbm8KK2lmIHRlc3QgIngkTk9VU0UiID0gInh5ZXMiOyB0aGVuCisgIFVTRV9bJDFdPSJubyIKKyAgQUNfTVNHX1dBUk4oKioqICQzIHByZS1jb25maWd1cmVkIG5vdCB0byBiZSBidWlsdCkKK2ZpCitOT1VTRT0KKworZG5sICoqKiBDaGVjayBpZiBpdCBpcyBwb3J0ZWQgb3Igbm90CitpZiBlY2hvICIgWyRHU1RfUExVR0lOU19OT05QT1JURURdICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBbJDFdICIgPiAvZGV2L251bGw7IHRoZW4KKyAgVVNFX1skMV09Im5vIgorICBBQ19NU0dfV0FSTigqKiogJDMgbm90IHBvcnRlZCkKK2ZpCisKK2RubCAqKiogSWYgaXQncyBlbmFibGVkCisKK2lmIHRlc3QgeCRVU0VfWyQxXSA9IHh5ZXM7IHRoZW4KKyAgZG5sIHNhdmUgY29tcGlsZSB2YXJpYWJsZXMgYmVmb3JlIHRoZSB0ZXN0CisKKyAgZ3N0X2NoZWNrX3NhdmVfTElCUz0kTElCUworICBnc3RfY2hlY2tfc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgIGdzdF9jaGVja19zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgIGdzdF9jaGVja19zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworICBnc3RfY2hlY2tfc2F2ZV9DWFhGTEFHUz0kQ1hYRkxBR1MKKworICBIQVZFX1skMV09bm8KKyAgZG5sIFRFU1RfRk9SX0ZFQVRVUkUKKyAgJDQKKworICBMSUJTPSRnc3RfY2hlY2tfc2F2ZV9MSUJTCisgIExERkxBR1M9JGdzdF9jaGVja19zYXZlX0xERkxBR1MKKyAgQ0ZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DRkxBR1MKKyAgQ1BQRkxBR1M9JGdzdF9jaGVja19zYXZlX0NQUEZMQUdTCisgIENYWEZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DWFhGTEFHUworCisgIGRubCBJZiBpdCBpc24ndCBmb3VuZCwgdW5zZXQgVVNFX1skMV0KKyAgaWYgdGVzdCB4JEhBVkVfWyQxXSA9IHhubzsgdGhlbgorICAgIFVTRV9bJDFdPW5vCisgIGVsc2UKKyAgICBpZmVsc2UoWyQzXSwgLCA6LCBbQUNfTVNHX05PVElDRSgqKiogVGhlc2UgcGx1Z2lucyB3aWxsIGJlIGJ1aWx0OiBbJDNdKV0pCisgIGZpCitmaQorZG5sICoqKiBXYXJuIGlmIGl0J3MgZGlzYWJsZWQgb3Igbm90IGZvdW5kCitpZiB0ZXN0IHgkVVNFX1skMV0gPSB4eWVzOyB0aGVuCisgIGlmZWxzZShbJDZdLCAsIDosIFskNl0pCisgIGlmIHRlc3QgIngkMyIgIT0gIngiOyB0aGVuCisgICAgR1NUX1BMVUdJTlNfWUVTPSJcdFskM11cbiRHU1RfUExVR0lOU19ZRVMiCisgIGZpCisgIEFDX0RFRklORShIQVZFX1skMV0sICwgW0RlZmluZSB0byBlbmFibGUgJDJdaWZlbHNlKCQzLCwsIFsgKHVzZWQgYnkgJDMpXSkuKQorZWxzZQorICBpZmVsc2UoWyQzXSwgLCA6LCBbQUNfTVNHX05PVElDRSgqKiogVGhlc2UgcGx1Z2lucyB3aWxsIG5vdCBiZSBidWlsdDogWyQzXSldKQorICBpZiB0ZXN0ICJ4JDMiICE9ICJ4IjsgdGhlbgorICAgIEdTVF9QTFVHSU5TX05PPSJcdFskM11cbiRHU1RfUExVR0lOU19OTyIKKyAgZmkKKyAgaWZlbHNlKFskN10sICwgOiwgWyQ3XSkKK2ZpCitkbmwgKioqIERlZmluZSB0aGUgY29uZGl0aW9uYWwgYXMgYXBwcm9wcmlhdGUKK0FNX0NPTkRJVElPTkFMKFVTRV9bJDFdLCB0ZXN0IHgkVVNFX1skMV0gPSB4eWVzKQorXSkKKworZG5sIFVzZSBBQ19DSEVDS19MSUIgYW5kIEFDX0NIRUNLX0hFQURFUiB0byBkbyBib3RoIHRlc3RzIGF0IG9uY2UKK2RubCBzZXRzIEhBVkVfbW9kdWxlIGlmIHdlIGhhdmUgaXQKK2RubCBSaWNoYXJkIEJvdWx0b24gPHJpY2hhcmQtYWxzYUB0YXJ0YXJ1cy5vcmc+CitkbmwgTGFzdCBtb2RpZmljYXRpb246IDI2LzA2LzIwMDEKK2RubCBBR19HU1RfQ0hFQ0tfTElCSEVBREVSKEZFQVRVUkUtTkFNRSwgTElCIE5BTUUsIExJQiBGVU5DVElPTiwgRVhUUkEgTEQgRkxBR1MsCitkbmwgICAgICAgICAgICAgICAgICAgICBIRUFERVIgTkFNRSwgQUNUSU9OLUlGLUZPVU5ELCBBQ1RJT04tSUYtTk9ULUZPVU5EKQorZG5sCitkbmwgVGhpcyBjaGVjayB3YXMgd3JpdHRlbiBmb3IgR1N0cmVhbWVyOiBpdCBzaG91bGQgYmUgcmVuYW1lZCBhbmQgY2hlY2tlZAorZG5sIGZvciBwb3J0YWJpbGl0eSBpZiB5b3UgZGVjaWRlIHRvIHVzZSBpdCBlbHNld2hlcmUuCitkbmwKK0FDX0RFRlVOKFtBR19HU1RfQ0hFQ0tfTElCSEVBREVSXSwKK1sKKyAgQUNfQ0hFQ0tfTElCKFskMl0sIFskM10sIEhBVkVfWyQxXT15ZXMsIEhBVkVfWyQxXT1ubyxbJDRdKQorICBpZiB0ZXN0ICJ4JEhBVkVfWyQxXSIgPSAieHllcyI7IHRoZW4KKyAgICBBQ19DSEVDS19IRUFERVIoWyQ1XSwgOiwgSEFWRV9bJDFdPW5vKQorICAgIGlmIHRlc3QgIngkSEFWRV9bJDFdIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgZG5sIGV4ZWN1dGUgd2hhdCBuZWVkcyB0byBiZQorICAgICAgaWZlbHNlKFskNl0sICwgOiwgWyQ2XSkKKyAgICBlbHNlCisgICAgICBpZmVsc2UoWyQ3XSwgLCA6LCBbJDddKQorICAgIGZpCisgIGVsc2UKKyAgICBpZmVsc2UoWyQ3XSwgLCA6LCBbJDddKQorICBmaQorICBBQ19TVUJTVChIQVZFX1skMV0pCitdCispCisKK2RubCAyMDA0LTAyLTE0IFRob21hcyAtIGNoYW5nZWQgdG8gZ2V0IHNldCBwcm9wZXJseSBhbmQgdXNlIHByb3BlciBvdXRwdXQKK2RubCAyMDAzLTA2LTI3IEJlbmphbWluIE90dGUgLSBjaGFuZ2VkIHRvIG1ha2UgdGhpcyB3b3JrIHdpdGggZ3N0Y29uZmlnLmgKK2RubAorZG5sIEFkZCBhIHN1YnN5c3RlbSAtLWRpc2FibGUgZmxhZyBhbmQgYWxsIHRoZSBuZWNlc3Nhcnkgc3ltYm9scyBhbmQgc3Vic3RpdGlvbnMKK2RubAorZG5sIEFHX0dTVF9DSEVDS19TVUJTWVNURU1fRElTQUJMRShTWVNOQU1FLCBbc3Vic3lzdGVtIG5hbWVdKQorZG5sCitBQ19ERUZVTihbQUdfR1NUX0NIRUNLX1NVQlNZU1RFTV9ESVNBQkxFXSwKK1sKKyAgZG5sIHRoaXMgZGVmaW5lIHdpbGwgcmVwbGFjZSBlYWNoIGxpdGVyYWwgc3Vic3lzX2RlZiBvY2N1cnJlbmNlIHdpdGgKKyAgZG5sIHRoZSBsb3dlcmNhc2UgaHlwaGVuLXNlcGFyYXRlZCBzdWJzeXN0ZW0KKyAgZG5sIGUuZy4gaWYgJDEgaXMgR1NUX0RFQlVHIHRoZW4gc3Vic3lzX2RlZiB3aWxsIGJlIGEgbWFjcm8gd2l0aCBnc3QtZGVidWcKKyAgZGVmaW5lKFtzdWJzeXNfZGVmXSx0cmFuc2xpdChbJDFdLCBfQS1aLCAtYS16KSkKKworICBBQ19BUkdfRU5BQkxFKHN1YnN5c19kZWYsCisgICAgQUNfSEVMUF9TVFJJTkcoLS1kaXNhYmxlLXN1YnN5c19kZWYsIFtkaXNhYmxlICQyXSksCisgICAgWworICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICB5ZXMpIEdTVF9ESVNBQkxFX1skMV09bm8gOzsKKyAgICAgICAgbm8pIEdTVF9ESVNBQkxFX1skMV09eWVzIDs7CisgICAgICAgICopIEFDX01TR19FUlJPUihbYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtc3Vic3lzX2RlZl0pIDs7CisgICAgICAgZXNhYworICAgIF0sCisgICAgW0dTVF9ESVNBQkxFX1skMV09bm9dKSBkbmwgRGVmYXVsdCB2YWx1ZQorCisgIGlmIHRlc3QgeCRHU1RfRElTQUJMRV9bJDFdID0geHllczsgdGhlbgorICAgIEFDX01TR19OT1RJQ0UoW2Rpc2FibGVkIHN1YnN5c3RlbSBbJDJdXSkKKyAgICBHU1RfRElTQUJMRV9bJDFdX0RFRklORT0iI2RlZmluZSBHU1RfRElTQUJMRV8kMSAxIgorICBlbHNlCisgICAgR1NUX0RJU0FCTEVfWyQxXV9ERUZJTkU9Ii8qICN1bmRlZiBHU1RfRElTQUJMRV8kMSAqLyIKKyAgZmkKKyAgQUNfU1VCU1QoR1NUX0RJU0FCTEVfWyQxXV9ERUZJTkUpCisgIHVuZGVmaW5lKFtzdWJzeXNfZGVmXSkKK10pCisKKworZG5sIFBhcnNlIGdzdGNvbmZpZy5oIGZvciBmZWF0dXJlIGFuZCBkZWZpbmVzIGFkZCB0aGUgc3ltYm9scyBhbmQgc3Vic3RpdGlvbnMKK2RubAorZG5sIEFHX0dTVF9QQVJTRV9TVUJTWVNURU1fRElTQUJMRShHU1RfQ09ORklHUEFUSCwgRkVBVFVSRSkKK2RubAorQUNfREVGVU4oW0FHX0dTVF9QQVJTRV9TVUJTWVNURU1fRElTQUJMRV0sCitbCisgIGdyZXAgPi9kZXYvbnVsbCAiI3VuZGVmIEdTVF9ESVNBQkxFXyQyIiAkMQorICBpZiB0ZXN0ICQ/ID0gMDsgdGhlbgorICAgIEdTVF9ESVNBQkxFX1skMl09MAorICBlbHNlCisgICAgR1NUX0RJU0FCTEVfWyQyXT0xCisgIGZpCisgIEFDX1NVQlNUKEdTVF9ESVNBQkxFX1skMl0pCitdKQorCitkbmwgUGFyc2UgZ3N0Y29uZmlnLmggYW5kIGRlZmluZXMgYWRkIHRoZSBzeW1ib2xzIGFuZCBzdWJzdGl0aW9ucworZG5sCitkbmwgR1NUX0NPTkZJR1BBVEg9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9aW5jbHVkZWRpciBnc3RyZWFtZXItMC4xMGAiL2dzdC9nc3Rjb25maWcuaCIKK2RubCBBR19HU1RfUEFSU0VfU1VCU1lTVEVNX0RJU0FCTEVTKEdTVF9DT05GSUdQQVRIKQorZG5sCitBQ19ERUZVTihbQUdfR1NUX1BBUlNFX1NVQlNZU1RFTV9ESVNBQkxFU10sCitbCisgIEFHX0dTVF9QQVJTRV9TVUJTWVNURU1fRElTQUJMRSgkMSxHU1RfREVCVUcpCisgIEFHX0dTVF9QQVJTRV9TVUJTWVNURU1fRElTQUJMRSgkMSxMT0FEU0FWRSkKKyAgQUdfR1NUX1BBUlNFX1NVQlNZU1RFTV9ESVNBQkxFKCQxLFBBUlNFKQorICBBR19HU1RfUEFSU0VfU1VCU1lTVEVNX0RJU0FCTEUoJDEsVFJBQ0UpCisgIEFHX0dTVF9QQVJTRV9TVUJTWVNURU1fRElTQUJMRSgkMSxBTExPQ19UUkFDRSkKKyAgQUdfR1NUX1BBUlNFX1NVQlNZU1RFTV9ESVNBQkxFKCQxLFJFR0lTVFJZKQorICBBR19HU1RfUEFSU0VfU1VCU1lTVEVNX0RJU0FCTEUoJDEsUExVR0lOKQorICBBR19HU1RfUEFSU0VfU1VCU1lTVEVNX0RJU0FCTEUoJDEsWE1MKQorXSkKKworCisKK2RubCByZWxpZXMgb24gR1NUX1BMVUdJTlNfQUxMLCBHU1RfUExVR0lOU19TRUxFQ1RFRCwgR1NUX1BMVUdJTlNfWUVTLAorZG5sIEdTVF9QTFVHSU5TX05PLCBhbmQgQlVJTERfRVhURVJOQUwKK0FDX0RFRlVOKFtBR19HU1RfT1VUUFVUX1BMVUdJTlNdLCBbCisKK3ByaW50ZiAiY29uZmlndXJlOiAqKiogUGx1Zy1pbnMgd2l0aG91dCBleHRlcm5hbCBkZXBlbmRlbmNpZXMgdGhhdCB3aWxsIGJlIGJ1aWx0OlxuIgorKCBmb3IgaSBpbiAkR1NUX1BMVUdJTlNfU0VMRUNURUQ7IGRvIHByaW50ZiAnXHQnJGknXG4nOyBkb25lICkgfCBzb3J0CitwcmludGYgIlxuIgorCitwcmludGYgImNvbmZpZ3VyZTogKioqIFBsdWctaW5zIHdpdGhvdXQgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIHRoYXQgd2lsbCBOT1QgYmUgYnVpbHQ6XG4iCisoIGZvciBpIGluICRHU1RfUExVR0lOU19BTEw7IGRvCisgICAgY2FzZSAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIGluCisgICAgICAqXCAkaVwgKikKKwk7OworICAgICAgKikKKwlwcmludGYgJ1x0JyRpJ1xuJworCTs7CisgICAgZXNhYworICBkb25lICkgfCBzb3J0CitwcmludGYgIlxuIgorCitwcmludGYgImNvbmZpZ3VyZTogKioqIFBsdWctaW5zIHRoYXQgaGF2ZSBOT1QgYmVlbiBwb3J0ZWQ6XG4iCisoIGZvciBpIGluICRHU1RfUExVR0lOU19OT05QT1JURUQ7IGRvCisJcHJpbnRmICdcdCckaSdcbicKKyAgZG9uZSApIHwgc29ydAorcHJpbnRmICJcbiIKKworaWYgdGVzdCAieCRCVUlMRF9FWFRFUk5BTCIgPSAieG5vIjsgdGhlbgorICBwcmludGYgImNvbmZpZ3VyZTogKioqIE5vIHBsdWctaW5zIHdpdGggZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIHdpbGwgYmUgYnVpbHRcbiIKK2Vsc2UKKyAgcHJpbnRmICJjb25maWd1cmU6ICoqKiBQbHVnLWlucyB3aXRoIGRlcGVuZGVuY2llcyB0aGF0IHdpbGwgYmUgYnVpbHQ6IgorICBwcmludGYgIiRHU1RfUExVR0lOU19ZRVNcbiIgfCBzb3J0CisgIHByaW50ZiAiXG4iCisgIHByaW50ZiAiY29uZmlndXJlOiAqKiogUGx1Zy1pbnMgd2l0aCBkZXBlbmRlbmNpZXMgdGhhdCB3aWxsIE5PVCBiZSBidWlsdDoiCisgIHByaW50ZiAiJEdTVF9QTFVHSU5TX05PXG4iIHwgc29ydAorICBwcmludGYgIlxuIgorZmkKK10pCisKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9nc3QtZnVuY3Rpb24ubTQgYi9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYWRmZDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00CkBAIC0wLDAgKzEsNjMgQEAKK2RubAorZG5sIENoZWNrIGZvciBjb21waWxlciBtZWNoYW5pc20gdG8gc2hvdyBmdW5jdGlvbnMgaW4gZGVidWdnaW5nCitkbmwgY29waWVkIGZyb20gYW4gQWxpIHBhdGNoIGZsb2F0aW5nIG9uIHRoZSBpbnRlcm5ldAorZG5sCitBQ19ERUZVTihbQUdfR1NUX0NIRUNLX0ZVTkNUSU9OXSxbCisgIGRubCAjMTogX19QUkVUVFlfRlVOQ1RJT05fXworICBBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciAkQ0MgaW1wbGVtZW50cyBfX1BSRVRUWV9GVU5DVElPTl9fKQorICBBQ19DQUNIRV9WQUwoZ3N0X2N2X2hhdmVfcHJldHR5X2Z1bmN0aW9uLFsKKyAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPHN0ZGlvLmg+XSwKKyAgICAgICAgICAgICAgICBbcHJpbnRmKCIlcyIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pO10sCisgICAgICAgICAgICAgICAgZ3N0X2N2X2hhdmVfcHJldHR5X2Z1bmN0aW9uPXllcywKKyAgICAgICAgICAgICAgICBnc3RfY3ZfaGF2ZV9wcmV0dHlfZnVuY3Rpb249bm8pCisgIF0pCisgIEFDX01TR19SRVNVTFQoJGdzdF9jdl9oYXZlX3ByZXR0eV9mdW5jdGlvbikKKyAgaWYgdGVzdCAiJGdzdF9jdl9oYXZlX3ByZXR0eV9mdW5jdGlvbiIgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9QUkVUVFlfRlVOQ1RJT04sIDEsCisgICAgICAgICAgICAgIFtkZWZpbmVkIGlmIHRoZSBjb21waWxlciBpbXBsZW1lbnRzIF9fUFJFVFRZX0ZVTkNUSU9OX19dKQorICBmaQorCitkbmwgIzI6IF9fRlVOQ1RJT05fXworICBBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciAkQ0MgaW1wbGVtZW50cyBfX0ZVTkNUSU9OX18pCisgIEFDX0NBQ0hFX1ZBTChnc3RfY3ZfaGF2ZV9mdW5jdGlvbixbCisgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxzdGRpby5oPl0sCisgICAgICAgICAgICAgICAgW3ByaW50ZigiJXMiLCBfX0ZVTkNUSU9OX18pO10sCisgICAgICAgICAgICAgICAgZ3N0X2N2X2hhdmVfZnVuY3Rpb249eWVzLAorICAgICAgICAgICAgICAgIGdzdF9jdl9oYXZlX2Z1bmN0aW9uPW5vKQorICBdKQorICBBQ19NU0dfUkVTVUxUKCRnc3RfY3ZfaGF2ZV9mdW5jdGlvbikKKyAgaWYgdGVzdCAiJGdzdF9jdl9oYXZlX2Z1bmN0aW9uIiA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShIQVZFX0ZVTkNUSU9OLCAxLAorICAgICAgICAgICAgICBbZGVmaW5lZCBpZiB0aGUgY29tcGlsZXIgaW1wbGVtZW50cyBfX0ZVTkNUSU9OX19dKQorICBmaQorCitkbmwgIzM6IF9fZnVuY19fCisgIEFDX01TR19DSEVDS0lORyh3aGV0aGVyICRDQyBpbXBsZW1lbnRzIF9fZnVuY19fKQorICBBQ19DQUNIRV9WQUwoZ3N0X2N2X2hhdmVfZnVuYyxbCisgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxzdGRpby5oPl0sCisgICAgICAgICAgICAgICAgW3ByaW50ZigiJXMiLCBfX2Z1bmNfXyk7XSwKKyAgICAgICAgICAgICAgICBnc3RfY3ZfaGF2ZV9mdW5jPXllcywKKyAgICAgICAgICAgICAgICBnc3RfY3ZfaGF2ZV9mdW5jPW5vKQorICBdKQorICBBQ19NU0dfUkVTVUxUKCRnc3RfY3ZfaGF2ZV9mdW5jKQorICBpZiB0ZXN0ICIkZ3N0X2N2X2hhdmVfZnVuYyIgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9GVU5DLCAxLAorICAgICAgICAgICAgICBbZGVmaW5lZCBpZiB0aGUgY29tcGlsZXIgaW1wbGVtZW50cyBfX2Z1bmNfX10pCisgIGZpCisKK2RubCBub3cgZGVmaW5lIEZVTkNUSU9OIHRvIHdoYXRldmVyIHdvcmtzLCBhbmQgZmFsbGJhY2sgdG8gIiIKKyAgaWYgdGVzdCAiJGdzdF9jdl9oYXZlX3ByZXR0eV9mdW5jdGlvbiIgPSB5ZXM7IHRoZW4KKyAgICBmdW5jdGlvbj1fX1BSRVRUWV9GVU5DVElPTl9fCisgIGVsc2UKKyAgICBpZiB0ZXN0ICIkZ3N0X2N2X2hhdmVfZnVuY3Rpb24iID0geWVzOyB0aGVuCisgICAgICBmdW5jdGlvbj1fX0ZVTkNUSU9OX18KKyAgICBlbHNlCisgICAgICBpZiB0ZXN0ICIkZ3N0X2N2X2hhdmVfZnVuYyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgZnVuY3Rpb249X19mdW5jX18KKyAgICAgIGVsc2UKKyAgICAgICAgZnVuY3Rpb249XCJcIgorICAgICAgZmkKKyAgICBmaQorICBmaQorICBBQ19ERUZJTkVfVU5RVU9URUQoR1NUX0ZVTkNUSU9OLCAkZnVuY3Rpb24sIFttYWNybyB0byB1c2UgdG8gc2hvdyBmdW5jdGlvbiBuYW1lXSkKK10pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgYi9jb21tb24vbTQvZ3N0LWdldHRleHQubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYzNjUxYgotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNApAQCAtMCwwICsxLDIxIEBACitkbmwgZ2V0dGV4dCBzZXR1cAorCitkbmwgQUdfR1NUX0dFVFRFWFQoW2dldHRleHQtcGFja2FnZV0pCitkbmwgZGVmaW5lcyBHRVRURVhUX1BBQ0tBR0UgYW5kIExPQ0FMRURJUgorCitBQ19ERUZVTihbQUdfR1NUX0dFVFRFWFRdLAorWworICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsgdGhlbgorICAgIEdFVFRFWFRfUEFDS0FHRT1bJDFdCisgIGVsc2UKKyAgICBHRVRURVhUX1BBQ0tBR0U9W05VTExdCisgIGZpCisgIEFDX1NVQlNUKEdFVFRFWFRfUEFDS0FHRSkKKyAgQUNfREVGSU5FX1VOUVVPVEVEKFtHRVRURVhUX1BBQ0tBR0VdLCAiJEdFVFRFWFRfUEFDS0FHRSIsCisgICAgICAgICAgICAgICAgICAgICBbZ2V0dGV4dCBwYWNrYWdlIG5hbWVdKQorCisgIGRubCBkZWZpbmUgTE9DQUxFRElSIGluIGNvbmZpZy5oCisgIEFTX0FDX0VYUEFORChMT0NBTEVESVIsICRkYXRhZGlyL2xvY2FsZSkKKyAgQUNfREVGSU5FX1VOUVVPVEVEKFtMT0NBTEVESVJdLCAiJExPQ0FMRURJUiIsCisgICAgICAgICAgICAgICAgICAgICBbZ2V0dGV4dCBsb2NhbGUgZGlyXSkKK10pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IGIvY29tbW9uL200L2dzdC1nbGliMi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWZiYTQxCi0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uL200L2dzdC1nbGliMi5tNApAQCAtMCwwICsxLDczIEBACitkbmwgY2hlY2sgZm9yIGEgbWluaW11bSB2ZXJzaW9uIG9mIEdMaWIKKworZG5sIEFHX0dTVF9HTElCX0NIRUNLKFttaW5pbXVtLXZlcnNpb24tcmVxdWlyZWRdKQorCitBQ19ERUZVTihbQUdfR1NUX0dMSUJfQ0hFQ0tdLAorWworICBBQ19SRVFVSVJFKFtBU19OQU5PXSkKKworICBkbmwgTWluaW11bSByZXF1aXJlZCB2ZXJzaW9uIG9mIEdMaWIKKyAgR0xJQl9SRVE9WyQxXQorICBpZiB0ZXN0ICJ4JEdMSUJfUkVRIiA9ICJ4IgorICB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFtQbGVhc2Ugc3BlY2lmeSBhIHJlcXVpcmVkIHZlcnNpb24gZm9yIEdMaWIgMi4wXSkKKyAgZmkKKyAgQUNfU1VCU1QoR0xJQl9SRVEpCisKKyAgZG5sIENoZWNrIGZvciBnbGliIHdpdGggZXZlcnl0aGluZworICBBR19HU1RfUEtHX0NIRUNLX01PRFVMRVMoR0xJQiwKKyAgICBnbGliLTIuMCA+PSAkR0xJQl9SRVEgZ29iamVjdC0yLjAgZ3RocmVhZC0yLjAgZ21vZHVsZS1uby1leHBvcnQtMi4wKQorCisgIGlmIHRlc3QgIngkSEFWRV9HTElCIiA9ICJ4bm8iOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFtUaGlzIHBhY2thZ2UgcmVxdWlyZXMgR0xpYiA+PSAkR0xJQl9SRVEgdG8gY29tcGlsZS5dKQorICBmaQorCisgIGRubCBBZGQgZGVmaW5lIHRvIHRlbGwgR0xpYiB0aGF0IHRocmVhZGluZyBpcyBhbHdheXMgZW5hYmxlZCB3aXRoaW4gR1N0cmVhbWVyCisgIGRubCBjb2RlIChvcHRpbWlzYXRpb24sIGJ5cGFzc2VzIGNoZWNrcyBpZiB0aGUgdGhyZWFkaW5nIHN5c3RlbSBpcyBlbmFibGVkCisgIGRubCB3aGVuIHVzaW5nIHRocmVhZGluZyBwcmltaXRpdmVzKQorICBHTElCX0VYVFJBX0NGTEFHUz0iJEdMSUJfRVhUUkFfQ0ZMQUdTIC1ER19USFJFQURTX01BTkRBVE9SWSIKKworICBkbmwgRGVmaW5lIEdfRElTQUJMRV9ERVBSRUNBVEVEIGZvciBHSVQgdmVyc2lvbnMKKyAgaWYgdGVzdCAieCRQQUNLQUdFX1ZFUlNJT05fTkFOTyIgPSAieDEiOyB0aGVuCisgICAgR0xJQl9FWFRSQV9DRkxBR1M9IiRHTElCX0VYVFJBX0NGTEFHUyAtREdfRElTQUJMRV9ERVBSRUNBVEVEIgorICBmaQorCisgIEFDX0FSR19FTkFCTEUoZ29iamVjdC1jYXN0LWNoZWNrcywKKyAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZ29iamVjdC1jYXN0LWNoZWNrc1s9QDw6QG5vL2F1dG8veWVzQDo+QF1dLAorICAgICAgW0VuYWJsZSBHT2JqZWN0IGNhc3QgY2hlY2tzXSksLCAKKyAgICBbZW5hYmxlX2dvYmplY3RfY2FzdF9jaGVja3M9YXV0b10pCisKKyAgaWYgdGVzdCAieCRlbmFibGVfZ29iamVjdF9jYXN0X2NoZWNrcyIgPSAieGF1dG8iOyB0aGVuCisgICAgZG5sIEZvciByZWxlYXNlcywgdHVybiBvZmYgdGhlIGNhc3QgY2hlY2tzCisgICAgaWYgdGVzdCAieCRQQUNLQUdFX1ZFUlNJT05fTkFOTyIgPSAieDEiOyB0aGVuCisgICAgICBlbmFibGVfZ29iamVjdF9jYXN0X2NoZWNrcz15ZXMKKyAgICBlbHNlCisgICAgICBlbmFibGVfZ29iamVjdF9jYXN0X2NoZWNrcz1ubworICAgIGZpCisgIGZpCisKKyAgaWYgdGVzdCAieCRlbmFibGVfZ29iamVjdF9jYXN0X2NoZWNrcyIgPSAieG5vIjsgdGhlbgorICAgIEdMSUJfRVhUUkFfQ0ZMQUdTPSIkR0xJQl9FWFRSQV9DRkxBR1MgLURHX0RJU0FCTEVfQ0FTVF9DSEVDS1MiCisgIGZpCisKKyAgQUNfQVJHX0VOQUJMRShnbGliLWFzc2VydHMsCisgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWdsaWItYXNzZXJ0c1s9QDw6QG5vL2F1dG8veWVzQDo+QF1dLAorICAgICAgW0VuYWJsZSBHTGliIGFzc2VydGlvbl0pLCwgCisgICAgW2VuYWJsZV9nbGliX2Fzc2VydGlvbnM9YXV0b10pCisKKyAgaWYgdGVzdCAieCRlbmFibGVfZ2xpYl9hc3NlcnRpb25zIiA9ICJ4YXV0byI7IHRoZW4KKyAgICBkbmwgRm9yIHJlbGVhc2VzLCB0dXJuIG9mZiB0aGUgYXNzZXJ0aW9ucworICAgIGlmIHRlc3QgIngkUEFDS0FHRV9WRVJTSU9OX05BTk8iID0gIngxIjsgdGhlbgorICAgICAgZW5hYmxlX2dsaWJfYXNzZXJ0aW9ucz15ZXMKKyAgICBlbHNlCisgICAgICBlbmFibGVfZ2xpYl9hc3NlcnRpb25zPW5vCisgICAgZmkKKyAgZmkKKworICBpZiB0ZXN0ICJ4JGVuYWJsZV9nbGliX2Fzc2VydGlvbnMiID0gInhubyI7IHRoZW4KKyAgICBHTElCX0VYVFJBX0NGTEFHUz0iJEdMSUJfRVhUUkFfQ0ZMQUdTIC1ER19ESVNBQkxFX0FTU0VSVCIKKyAgZmkKKworICBkbmwgZm9yIHRoZSBwb29yIHNvdWxzIHdobyBmb3IgZXhhbXBsZSBoYXZlIGdsaWIgaW4gL3Vzci9sb2NhbAorICBBU19TQ1JVQl9JTkNMVURFKEdMSUJfQ0ZMQUdTKQorXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9nc3QtbGlieG1sMi5tNCBiL2NvbW1vbi9tNC9nc3QtbGlieG1sMi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTg0M2YwCi0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uL200L2dzdC1saWJ4bWwyLm00CkBAIC0wLDAgKzEsNTIgQEAKK2RubCBjYWxsIHRoaXMgbWFjcm8gd2l0aCB0aGUgbWluaW11bSByZXF1aXJlZCB2ZXJzaW9uIGFzIGFuIGFyZ3VtZW50CitkbmwgdGhpcyBtYWNybyBzZXRzIGFuZCBBQ19TVUJTVHMgWE1MX0NGTEFHUyBhbmQgWE1MX0xJQlMKK2RubCBpdCBhbHNvIHNldHMgTElCWE1MX1BLRywgdXNlZCBmb3IgdGhlIHBrZy1jb25maWcgZmlsZQorCitBQ19ERUZVTihbQUdfR1NUX0xJQlhNTDJfQ0hFQ0tdLAorWworICBkbmwgTWluaW11bSByZXF1aXJlZCB2ZXJzaW9uIG9mIGxpYnhtbDIKKyAgZG5sIGRlZmF1bHQgdG8gMi40LjkgaWYgbm90IHNwZWNpZmllZAorICBMSUJYTUwyX1JFUT1pZmVsc2UoWyQxXSwsMi40LjksWyQxXSkKKyAgQUNfU1VCU1QoTElCWE1MMl9SRVEpCisKKyAgZG5sIGNoZWNrIGZvciBsaWJ4bWwyCisgIFBLR19DSEVDS19NT0RVTEVTKFhNTCwgbGlieG1sLTIuMCA+PSAkTElCWE1MMl9SRVEsCisgICAgICAgICAgICAgICAgICAgIEhBVkVfTElCWE1MMj15ZXMsIFsKKyAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICAgICAgICAgICAgICAgICAgIEhBVkVfTElCWE1MMj1ubworICAgICAgICAgICAgICAgICAgICBdKQorICBpZiB0ZXN0ICJ4JEhBVkVfTElCWE1MMiIgPSAieHllcyI7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9MSUJYTUwyLCAxLCBbRGVmaW5lIGlmIGxpYnhtbDIgaXMgYXZhaWxhYmxlXSkKKyAgZWxzZQorICAgIEFDX01TR19FUlJPUihbCisgICAgICAgIE5lZWQgbGlieG1sMiBhbmQgZGV2ZWxvcG1lbnQgaGVhZGVycy9maWxlcyB0byBidWlsZCBHU3RyZWFtZXIuCisKKyAgICAgICAgWW91IGNhbiBkbyB3aXRob3V0IGxpYnhtbDIgaWYgeW91IHBhc3MgLS1kaXNhYmxlLWxvYWRzYXZlIHRvCisgICAgICAgIGNvbmZpZ3VyZSwgYnV0IHRoYXQgYnJlYWtzIEFCSSwgc28gZG9uJ3QgZG8gdGhhdCB1bmxlc3MgeW91CisgICAgICAgIGFyZSBidWlsZGluZyBmb3IgYW4gZW1iZWRkZWQgc2V0dXAgYW5kIGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgorICAgIF0pCisgIGZpCisgIGRubCB0aGlzIGlzIGZvciB0aGUgLnBjIGZpbGUKKyAgTElCWE1MX1BLRz0nLCBsaWJ4bWwtMi4wJworICBBQ19TVUJTVChMSUJYTUxfUEtHKQorICBBQ19TVUJTVChYTUxfTElCUykKKyAgQUNfU1VCU1QoWE1MX0NGTEFHUykKKworICBkbmwgWE1MX0xJQlMgbWlnaHQgcHVsbCBpbiAtbHogd2l0aG91dCB6bGliIGFjdHVhbGx5IGJlaW5nIG9uIHRoZSBzeXN0ZW0sIHNvCisgIGRubCB0cnkgbGlua2luZyB3aXRoIHRoZXNlIExJQlMgYW5kIENGTEFHUworICBhY19zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgIGFjX3NhdmVfTElCUz0kTElCUworICBDRkxBR1M9IiRDRkxBR1MgJFhNTF9DRkxBR1MiCisgIExJQlM9IiRMSUJTICRYTUxfTElCUyIKKyAgQUNfVFJZX0xJTksoWworI2luY2x1ZGUgPGxpYnhtbC90cmVlLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KK10sWworLyogZnVuY3Rpb24gYm9keSAqLworXSwKKyAgICBBQ19NU0dfTk9USUNFKFtUZXN0IHhtbDIgcHJvZ3JhbSBsaW5rZWRdKSwKKyAgICBBQ19NU0dfRVJST1IoW0NvdWxkIG5vdCBsaW5rIGxpYnhtbDIgdGVzdCBwcm9ncmFtLiAgQ2hlY2sgaWYgeW91IGhhdmUgdGhlIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMuXSkKKyAgKQorICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKKyAgTElCUz0iJGFjX3NhdmVfTElCUyIKK10pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBiL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNjkxOWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNApAQCAtMCwwICsxLDg5IEBACitkbmwgbWFjcm9zIHRvIHNldCBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FCisKK2RubCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2RubCBBR19HU1RfU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRQorZG5sCitkbmwgVXNhZ2U6CitkbmwKK2RubCBBR19HU1RfU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRSgpCitkbmwgQUdfR1NUX1NFVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUoW25vXS4uLikKK2RubCBzZXRzIHRoZSByZWxlYXNlIGRhdGV0aW1lIHRvIHRoZSBjdXJyZW50IGRhdGUKK2RubCAobm8gPSB0aGlzIGlzIG5vdCBhIHJlbGVhc2UsIGJ1dCBnaXQgb3IgcHJlcmVsZWFzZSkKK2RubAorZG5sIEFHX0dTVF9TRVRfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FKFtZWVlZLU1NLUREXSkKK2RubCBBR19HU1RfU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRShbeWVzXSwgW1lZWVktTU0tRERdKQorZG5sIHNldHMgdGhlIHJlbGVhc2UgZGF0ZXRpbWUgdG8gdGhlIHNwZWNpZmllZCBkYXRlIChhbmQgdGltZSwgaWYgZ2l2ZW4pCitkbmwgKHllcyA9IHRoaXMgaXMgYSByZWxlYXNlLCBub3QgZ2l0IG9yIHByZXJlbGVhc2UpCitkbmwKK2RubCBBR19HU1RfU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRShbeWVzXSwgW0RPQVAtRklMRV0sIFtSRUxFQVNFLVZFUlNJT05dKQorZG5sIHNldHMgdGhlIHJlbGVhc2UgZGF0ZSB0byB0aGUgcmVsZWFzZSBkYXRlIGFzc29jaWF0ZWQgd2l0aCB2ZXJzaW9uCitkbmwgUkVMRUFTRS1WRVJTSU9OIGluIHRoZSAuZG9hcCBmaWxlIERPQVAtRklMRQorZG5sICh5ZXMgPSB0aGlzIGlzIGEgcmVsZWFzZSwgbm90IGdpdCBvciBwcmVyZWxlYXNlKQorZG5sCitkbmwgV2UgbmVlZCB0byB0cmVhdCBwcmUtcmVsZWFzZXMgbGlrZSBnaXQgYmVjYXVzZSB0aGVyZSB3b24ndCBiZSBhbiBlbnRyeQorZG5sIGluIHRoZSAuZG9hcCBmaWxlIGZvciBwcmUtcmVsZWFzZXMgeWV0LCBhbmQgd2UgZG9uJ3Qgd2FudCB0byB1c2UgdGhlCitkbmwgZGF0ZSBvZiB0aGUgbGFzdCByZWxlYXNlIGVpdGhlci4KK2RubCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0FDX0RFRlVOKFtBR19HU1RfU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRV0sCitbCisgIGRubCBBR19HU1RfU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRSgpCisgIGRubCBBR19HU1RfU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRShbeWVzXS4uLikKKyAgaWYgdGVzdCAieCQxIiA9ICJ4bm8iIC1vICJ4JDEiID0gIngiOyB0aGVuCisgICAgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRT1gZGF0ZSAtdSAiKyVZLSVtLSVkVCVIOiVNWiJgCisgIGVsaWYgdGVzdCAieCQxIiA9ICJ4eWVzIjsgdGhlbgorICAgIGRubCBBR19HU1RfU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRShbbm9dLCBbIllZWVktTU0tREQiXSkKKyAgICBkbmwgQUdfR1NUX1NFVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUoW25vXSwgW0RPQVAtRklMRV0sIFtSRUxFQVNFLVZFUlNJT05dKQorICAgIGlmICggZWNobyAkMSB8IGdyZXAgLWUgJ14yMFsxLTldWzAtOV0tWzAtMV1bMC05XS1bMC0zXVswLTldJyA+L2Rldi9udWxsICkgOyB0aGVuCisgICAgICBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FPSQxCisgICAgZWxzZQorICAgICAgZG5sIHdlIGFzc3VtZSB0aGUgLmRvYXAgZmlsZSBjb250YWlucyB0aGUgZGF0ZSBhcyBZWVlZLU1NLURECisgICAgICBZWVlZX01NX0REPWBzaCAiJHtzcmNkaXJ9L2NvbW1vbi9leHRyYWN0LXJlbGVhc2UtZGF0ZS1mcm9tLWRvYXAtZmlsZSIgJDMgJDJgOworICAgICAgaWYgdGVzdCAieCRZWVlZX01NX0REIiAhPSAieCI7IHRoZW4KKyAgICAgICAgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRT0kWVlZWV9NTV9ERAorICAgICAgZWxzZQorICAgICAgICBBQ19NU0dfRVJST1IoW1NFVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUU6IGNvdWxkIG5vdCBleHRyYWN0CisgICAgICAgICAgICByZWxlYXNlIGRhdGUgZm9yIHJlbGVhc2UgdmVyc2lvbiAkMyBmcm9tICQyXSkKKyAgICAgICAgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRT0iIgorICAgICAgZmkKKyAgICBmaQorICBkbmwgQUdfR1NUX1NFVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUoW1lZWVktTU0tRERdKQorICBlbGlmICggZWNobyAkMSB8IGdyZXAgLWUgJ14yMFsxLTldWzAtOV0tWzAtMV1bMC05XS1bMC0zXVswLTldJyA+L2Rldi9udWxsICkgOyB0aGVuCisgICAgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRT0kMQorICBlbHNlCisgICAgQUNfTVNHX1dBUk4oW1NFVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUU6IGludmFsaWQgZmlyc3QgYXJndW1lbnRdKQorICAgIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUU9IiIKKyAgZmkKKworICBpZiB0ZXN0ICJ4JEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUiID0gIngiOyB0aGVuCisgICAgQUNfTVNHX1dBUk4oW0ludmFsaWQgcGFja2FnZSByZWxlYXNlIGRhdGUgdGltZTogJEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUVdKQorICBlbHNlCisgICAgQUNfTVNHX05PVElDRShbU2V0dGluZyBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FIHRvICRHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FXSkKKworICAgIEFDX0RFRklORV9VTlFVT1RFRChbR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRV0sCisgICAgICAgIFsiJEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUiXSwKKyAgICAgICAgW0dTdHJlYW1lciBwYWNrYWdlIHJlbGVhc2UgZGF0ZS90aW1lIGZvciBwbHVnaW5zIGFzIFlZWVktTU0tRERdKQorICBmaQorXSkKKworZG5sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorZG5sIEFHX0dTVF9TRVRfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FX1dJVEhfTkFOTworZG5sCitkbmwgVXNhZ2U6CitkbmwKK2RubCBBR19HU1RfU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRShbTkFOTy1WRVJTSU9OXSwgW0RPQVAtRklMRV0sIFtSRUxFQVNFLVZFUlNJT05dKQorZG5sIGlmIE5BTk8tVkVSU0lPTiBpcyAwLCBzZXRzIHRoZSByZWxlYXNlIGRhdGUgdG8gdGhlIHJlbGVhc2UgZGF0ZSBhc3NvY2lhdGVkCitkbmwgd2l0aCB2ZXJzaW9uIFJFTEVBU0UtVkVSU0lPTiBpbiB0aGUgLmRvYXAgZmlsZSBET0FQLUZJTEUsIG90aGVyd2lzZSBzZXRzCitkbmwgdGhlIHJlbGVhc2UgZGF0ZSBhbmQgdGltZSB0byB0aGUgY3VycmVudCBkYXRlL3RpbWUuCitkbmwKK2RubCBXZSBuZWVkIHRvIHRyZWF0IHByZS1yZWxlYXNlcyBsaWtlIGdpdCBiZWNhdXNlIHRoZXJlIHdvbid0IGJlIGFuIGVudHJ5CitkbmwgaW4gdGhlIC5kb2FwIGZpbGUgZm9yIHByZS1yZWxlYXNlcyB5ZXQsIGFuZCB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUKK2RubCBkYXRlIG9mIHRoZSBsYXN0IHJlbGVhc2UgZWl0aGVyLgorZG5sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQUNfREVGVU4oW0FHX0dTVF9TRVRfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FX1dJVEhfTkFOT10sCitbCisgIGlmIHRlc3QgIngkMSIgPSAieDAiOyB0aGVuCisgICAgQUdfR1NUX1NFVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUoW3llc10sIFsgJDIgXSwgWyAkMyBdKQorICBlbHNlCisgICAgQUdfR1NUX1NFVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUoW25vXSkKKyAgZmkKK10pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBiL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYWU0NWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vbTQvZ3N0LXBhcnNlci5tNApAQCAtMCwwICsxLDU1IEBACitBQ19ERUZVTihbQUdfR1NUX0JJU09OX0NIRUNLXSwKK1sKKyAgZG5sIEZJWE1FOiBjaGVjayBpZiBBQ19QUk9HX1lBQ0MgaXMgc3VpdGFibGUgaGVyZQorICBkbmwgRklYTUU6IG1ha2UgcHJlY2lvdXMKKyAgQUNfUEFUSF9QUk9HKEJJU09OX1BBVEgsIGJpc29uLCBubykKKyAgaWYgdGVzdCB4JEJJU09OX1BBVEggPSB4bm87IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoQ291bGQgbm90IGZpbmQgYmlzb24pCisgIGZpCisKKyAgZG5sIGNoZWNrIGJpc29uIHZlcnNpb24KKyAgZG5sIHdlIG5lZWQgdmVyc2lvbiA+PSAxLjg3NSBmb3IgdGhlIHJlZW50cmFuY3kgc3VwcG9ydAorICBkbmwgaW4gdGhlIHBhcnNlci4KKyAgZG5sIEZpcnN0IGxpbmVzIG9ic2VydmVkOiAnYmlzb24gKEdOVSBCaXNvbikgMi4zJyBvciAnR05VIEJpc29uIHZlcnNpb24gMS4yOCcKKyAgYmlzb25fbWluX3ZlcnNpb249MS44NzUKKyAgYmlzb25fdmVyc2lvbj1gJEJJU09OX1BBVEggLS12ZXJzaW9uIHwgaGVhZCAtbiAxIHwgIHNlZCAncy9eW1teMC05XV0qLy8nIHwgc2VkICdzL1tbXjAtOV1dKiQvLycgfCBjdXQgLWQnICcgLWYxYAorICBBQ19NU0dfQ0hFQ0tJTkcoW2Jpc29uIHZlcnNpb24gJGJpc29uX3ZlcnNpb24gPj0gJGJpc29uX21pbl92ZXJzaW9uXSkKKworICBpZiBwZXJsIC13ZSAiZXhpdCAoKHYkYmlzb25fdmVyc2lvbiBnZSB2JGJpc29uX21pbl92ZXJzaW9uKSA/IDAgOiAxKSI7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICBlbHNlCisgICAgQUNfTVNHX0VSUk9SKFtub10pCisgIGZpCitdKQorCitBQ19ERUZVTihbQUdfR1NUX0ZMRVhfQ0hFQ0tdLAorWworICBkbmwgd2UgcmVxdWlyZSBmbGV4IGZvciBidWlsZGluZyB0aGUgcGFyc2VyCisgIEFDX1BBVEhfUFJPRyhGTEVYX1BBVEgsIGZsZXgsIG5vKQorICBpZiB0ZXN0IHgkRkxFWF9QQVRIID0geG5vOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKENvdWxkIG5vdCBmaW5kIGZsZXgpCisgIGZpCisKKyAgZG5sIGNoZWNrIGZsZXggdmVyc2lvbgorICBkbmwgd2UgbmVlZCB2ZXJzaW9uID49IDIuNS4zMSBmb3IgdGhlIHJlZW50cmFuY3kgc3VwcG9ydAorICBkbmwgaW4gdGhlIHBhcnNlci4KKyAgZmxleF9taW5fdmVyc2lvbj0yLjUuMzEKKyAgZmxleF92ZXJzaW9uPWAkRkxFWF9QQVRIIC0tdmVyc2lvbiB8IGhlYWQgLW4gMSB8IHNlZCAncy9eLiogLy8nIHwgc2VkICdzL1tbYS16QS1aXV0qJC8vJyB8IGN1dCAtZCcgJyAtZjFgCisgIEFDX01TR19DSEVDS0lORyhbZmxleCB2ZXJzaW9uICRmbGV4X3ZlcnNpb24gPj0gJGZsZXhfbWluX3ZlcnNpb25dKQorICBpZiBwZXJsIC13IDw8RU9GCisgICAgKFwkbWluX3ZlcnNpb25fbWFqb3IsIFwkbWluX3ZlcnNpb25fbWlub3IsIFwkbWluX3ZlcnNpb25fbWljcm8gKSA9ICIkZmxleF9taW5fdmVyc2lvbiIgPX4gLyhcZCspXC4oXGQrKVwuKFxkKykvOworICAgIChcJGZsZXhfdmVyc2lvbl9tYWpvciwgXCRmbGV4X3ZlcnNpb25fbWlub3IsIFwkZmxleF92ZXJzaW9uX21pY3JvICkgPSAiJGZsZXhfdmVyc2lvbiIgPX4gLyhcZCspXC4oXGQrKVwuKFxkKykvOworICAgIGV4aXQgKCgoXCRmbGV4X3ZlcnNpb25fbWFqb3IgPiBcJG1pbl92ZXJzaW9uX21ham9yKSB8fAorICAgICAoKFwkZmxleF92ZXJzaW9uX21ham9yID09IFwkbWluX3ZlcnNpb25fbWFqb3IpICYmCisgICAgICAoXCRmbGV4X3ZlcnNpb25fbWlub3IgPiBcJG1pbl92ZXJzaW9uX21pbm9yKSkgfHwKKyAgICAgKChcJGZsZXhfdmVyc2lvbl9tYWpvciA9PSBcJG1pbl92ZXJzaW9uX21ham9yKSAmJgorICAgICAgKFwkZmxleF92ZXJzaW9uX21pbm9yID09IFwkbWluX3ZlcnNpb25fbWlub3IpICYmCisgICAgICAoXCRmbGV4X3ZlcnNpb25fbWljcm8gPj0gXCRtaW5fdmVyc2lvbl9taWNybykpKQorICAgICA/IDAgOiAxKTsKK0VPRgorICB0aGVuCisgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgIGVsc2UKKyAgICBBQ19NU0dfRVJST1IoW25vXSkKKyAgZmkKK10pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IGIvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGQ2ZmFmCi0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNApAQCAtMCwwICsxLDY3IEBACitkbmwgQUdfR1NUX1BMQVRGT1JNCitkbmwgQ2hlY2sgZm9yIHBsYXRmb3JtIHNwZWNpZmljIGZlYXR1cmVzIGFuZCBkZWZpbmUgc29tZSB2YXJpYWJsZXMKK2RubAorZG5sIEdTVF9FWFRSQV9NT0RVTEVfU1VGRklYOiBjb250YWlucyBhIHBsYXRmb3JtIHNwZWNpZmljCitkbmwgICBleHRyYSBtb2R1bGUgc3VmZml4IGFkZGl0aW9uYWwgdG8gR19NT0RVTEVfU1VGRklYCitkbmwKK2RubCBIQVZFX09TWDogRGVmaW5lZCBpZiBjb21waWxpbmcgZm9yIE9TIFgKK2RubAorZG5sIEdTVF9IQVZFX1VOU0FGRV9GT1JLOiBEZWZpbmVkIGlmIGZvcmsgaXMgdW5zYWZlIChXaW5kb3dzKQorZG5sCitkbmwgSEFWRV9XSU4zMjogRGVmaW5lZCBpZiBjb21waWxpbmcgb24gV2luMzIKK2RubAorCitBQ19ERUZVTihbQUdfR1NUX1BMQVRGT1JNXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICByaGFwc29keSopCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoR1NUX0VYVFJBX01PRFVMRV9TVUZGSVgsIFsiLmR5bGliIl0sIFtFeHRyYSBwbGF0Zm9ybSBzcGVjaWZpYyBwbHVnaW4gc3VmZml4XSkKKyAgICAgIDs7CisgICAgZGFyd2luKikKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChHU1RfRVhUUkFfTU9EVUxFX1NVRkZJWCwgWyIuZHlsaWIiXSwgW0V4dHJhIHBsYXRmb3JtIHNwZWNpZmljIHBsdWdpbiBzdWZmaXhdKQorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfT1NYLCAxLCBbRGVmaW5lZCBpZiBjb21waWxpbmcgZm9yIE9TWF0pCisgICAgICA7OworICAgIGN5Z3dpbiopCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoR1NUX0hBVkVfVU5TQUZFX0ZPUkssIDEsIFtEZWZpbmVkIHdoZW4gcmVnaXN0cnkgc2Nhbm5pbmcgdGhyb3VnaCBmb3JrIGlzIHVuc2FmZV0pCisgICAgICA7OworICAgIG1pbmd3KiB8IG1zdmMqIHwgbWtzKikKKyAgICAgIGRubCBIQVZFX1dJTjMyIGN1cnJlbnRseSBtZWFucyAiZGlzYWJsZSBQT1NJWGlzbXMiLgorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfV0lOMzIsIDEsIFtEZWZpbmVkIGlmIGNvbXBpbGluZyBmb3IgV2luZG93c10pCisKKyAgICAgIGRubCBkZWZpbmUgX19NU1ZDUlRfVkVSU0lPTl9fIHZlcnNpb24gaWYgbm90IHNldCBhbHJlYWR5IGJ5IHRoZQorICAgICAgZG5sIGNvbXBpbGVyIChpZS4gbW9zdGx5IGZvciBtaW5ndykuIFRoaXMgaXMgbmVlZGVkIGZvciB0aGluZ3MgbGlrZQorICAgICAgZG5sIF9fc3RhdDY0IHRvIGJlIGF2YWlsYWJsZS4gSWYgc2V0IGJ5IHRoZSBjb21waWxlciwgZW5zdXJlIGl0J3MKKyAgICAgIGRubCBuZXcgZW5vdWdoIC0gd2UgbmVlZCBhdCBsZWFzdCBXaW5YUCBTUDIuCisgICAgICBBQ19UUllfQ09NUElMRShbIF0sIFsgcmV0dXJuIF9fTVNWQ1JUX1ZFUlNJT05fXzsgXSwgWworICAgICAgICAgIEFDX1RSWV9DT01QSUxFKFsgXSwgWworICAgICAgICAgICAgI2lmIF9fTVNWQ1JUX1ZFUlNJT05fXyA8IDB4MDYwMQorICAgICAgICAgICAgI2Vycm9yICJNU1ZDUlQgdG9vIG9sZCIKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgIF0sIFsKKyAgICAgICAgICAgIEFDX01TR19OT1RJQ0UoW01TVkNSVCB2ZXJzaW9uIGxvb2tzIG9rXSkKKyAgICAgICAgICBdLCBbCisgICAgICAgICAgICBBQ19NU0dfRVJST1IoW01TVkNSVCB2ZXJzaW9uIHRvbyBvbGQsIG5lZWQgYXQgbGVhc3QgV2luWFAgU1AyXSkKKyAgICAgICAgICBdKQorICAgICAgXSwgWworICAgICAgICBBQ19NU0dfTk9USUNFKFtTZXR0aW5nIE1TVkNSVCB2ZXJzaW9uIHRvIDB4MDYwMV0pCisgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChfX01TVkNSVF9WRVJTSU9OX18sIDB4MDYwMSwgW1dlIG5lZWQgYXQgbGVhc3QgV2luWFAgU1AyIGZvciBfX3N0YXQ2NF0pCisgICAgICBdKQorICAgICAgOzsKKyAgICAgKikKKyAgICAgIDs7CisgIGVzYWMKK10pCisKK0FDX0RFRlVOKFtBR19HU1RfTElCVE9PTF9QUkVQQVJFXSwKK1sKKyAgZG5sIFBlcnN1YWRlIGxpYnRvb2wgdG8gYWxzbyBsaW5rICgtbCkgYSAncHVyZScgKERpcmVjdFgpIHN0YXRpYyBsaWIsCisgIGRubCBpLmUuIGFzIG9wcG9zZWQgdG8gb25seSBpbXBvcnQgbGliIHdpdGggZGxsIGNvdW50ZXJwYXJ0LgorICBkbmwgTmVlZHMgdG8gYmUgdHdlYWtlZCBiZWZvcmUgbGlidG9vbCdzIGNoZWNrcy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBjeWd3aW4qIHwgbWluZ3cqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgZXNhYworXSkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IGIvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2ZkNjFkCi0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNApAQCAtMCwwICsxLDIxIEBACitkbmwgQUdfR1NUX1BMVUdJTl9ET0NTKFtNSU5JTVVNLUdUSy1ET0MtVkVSU0lPTl0sW01JTklNVU0tUFlUSE9OLVZFUlNJT05dKQorZG5sCitkbmwgY2hlY2tzIGZvciBwcmVyZXF1aXNpdGVzIGZvciB0aGUgY29tbW9uL21hbmdsZS10bXBsLnB5IHNjcmlwdAorZG5sIHVzZWQgd2hlbiBidWlsZGluZyB0aGUgcGx1Z2luIGRvY3VtZW50YXRpb24KKworQUNfREVGVU4oW0FHX0dTVF9QTFVHSU5fRE9DU10sCitbCisgIEFDX0JFRk9SRShbR1RLX0RPQ19DSEVDS10sWyQwXSlkbmwgY2hlY2sgZm9yIGd0ay1kb2MgZmlyc3QKKyAgQUNfQkVGT1JFKFtBU19QQVRIX1BZVEhPTl0sWyQxXSlkbmwgZmluZCBweXRob24gZmlyc3QKKworICBidWlsZF9wbHVnaW5fZG9jcz1ubworICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgcGx1Z2luIGRvY3VtZW50YXRpb25dKQorICBpZiB0ZXN0IHgkZW5hYmxlX2d0a19kb2MgPSB4eWVzOyB0aGVuCisgICAgYnVpbGRfcGx1Z2luX2RvY3M9eWVzCisgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW25vIChndGstZG9jIGRpc2FibGVkIG9yIG5vdCBhdmFpbGFibGUpXSkKKyAgZmkKKworICBBTV9DT05ESVRJT05BTChFTkFCTEVfUExVR0lOX0RPQ1MsIHRlc3QgeCRidWlsZF9wbHVnaW5fZG9jcyA9IHh5ZXMpCitdKQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgYi9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTk4OWQwCi0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQKQEAgLTAsMCArMSwxNyBAQAorZG5sIEFHX0dTVF9TRVRfUExVR0lORElSCisKK2RubCBBQ19ERUZJTkUgUExVR0lORElSIHRvIHRoZSBmdWxsIGxvY2F0aW9uIHdoZXJlIHBsdWctaW5zIHdpbGwgYmUgaW5zdGFsbGVkCitkbmwgQUNfU1VCU1QgcGx1Z2luZGlyLCB0byBiZSB1c2VkIGluIE1ha2VmaWxlLmFtJ3MKKworQUNfREVGVU4oW0FHX0dTVF9TRVRfUExVR0lORElSXSwKK1sKKyAgZG5sIGRlZmluZSBsb2NhdGlvbiBvZiBwbHVnaW4gZGlyZWN0b3J5CisgIEFTX0FDX0VYUEFORChQTFVHSU5ESVIsICR7bGliZGlyfS9nc3RyZWFtZXItJEdTVF9NQUpPUk1JTk9SKQorICBBQ19ERUZJTkVfVU5RVU9URUQoUExVR0lORElSLCAiJFBMVUdJTkRJUiIsCisgICAgW2RpcmVjdG9yeSB3aGVyZSBwbHVnaW5zIGFyZSBsb2NhdGVkXSkKKyAgQUNfTVNHX05PVElDRShbVXNpbmcgJFBMVUdJTkRJUiBhcyB0aGUgcGx1Z2luIGluc3RhbGwgbG9jYXRpb25dKQorCisgIGRubCBwbHVnaW4gZGlyZWN0b3J5IGNvbmZpZ3VyZS10aW1lIHZhcmlhYmxlIGZvciB1c2UgaW4gTWFrZWZpbGUuYW0KKyAgcGx1Z2luZGlyPSJcJChsaWJkaXIpL2dzdHJlYW1lci0kR1NUX01BSk9STUlOT1IiCisgIEFDX1NVQlNUKHBsdWdpbmRpcikKK10pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ3N0LXZhbGdyaW5kLm00IGIvY29tbW9uL200L2dzdC12YWxncmluZC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzBkNjA4Ci0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uL200L2dzdC12YWxncmluZC5tNApAQCAtMCwwICsxLDM1IEBACitBQ19ERUZVTihbQUdfR1NUX1ZBTEdSSU5EX0NIRUNLXSwKK1sKKyAgZG5sIHZhbGdyaW5kIGluY2x1c2lvbgorICBBQ19BUkdfRU5BQkxFKHZhbGdyaW5kLAorICAgIEFDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtdmFsZ3JpbmRdLCBbZGlzYWJsZSBydW4tdGltZSB2YWxncmluZCBkZXRlY3Rpb25dKSwKKyAgICBbCisgICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgIHllcykgVVNFX1ZBTEdSSU5EPSIkVVNFX0RFQlVHIiA7OworICAgICAgICBubykgIFVTRV9WQUxHUklORD1ubyA7OworICAgICAgICAqKSBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtdmFsZ3JpbmQpIDs7CisgICAgICBlc2FjXSwKKyAgICBbCisgICAgICBVU0VfVkFMR1JJTkQ9IiRVU0VfREVCVUciCisgICAgXSkgZG5sIERlZmF1bHQgdmFsdWUKKworICBWQUxHUklORF9SRVE9IjMuMCIKKyAgaWYgdGVzdCAieCRVU0VfVkFMR1JJTkQiID0geHllczsgdGhlbgorICAgIFBLR19DSEVDS19NT0RVTEVTKFZBTEdSSU5ELCB2YWxncmluZCA+PSAkVkFMR1JJTkRfUkVRLAorICAgICAgVVNFX1ZBTEdSSU5EPSJ5ZXMiLAorICAgICAgWworICAgICAgICBVU0VfVkFMR1JJTkQ9Im5vIgorICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICBdKQorICBmaQorCisgIGlmIHRlc3QgIngkVVNFX1ZBTEdSSU5EIiA9IHh5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9WQUxHUklORCwgMSwgW0RlZmluZSBpZiB2YWxncmluZCBzaG91bGQgYmUgdXNlZF0pCisgICAgQUNfTVNHX05PVElDRShVc2luZyBleHRyYSBjb2RlIHBhdGhzIGZvciB2YWxncmluZCkKKyAgZmkKKyAgQUNfU1VCU1QoVkFMR1JJTkRfQ0ZMQUdTKQorICBBQ19TVUJTVChWQUxHUklORF9MSUJTKQorCisgIEFDX1BBVEhfUFJPRyhWQUxHUklORF9QQVRILCB2YWxncmluZCwgbm8pCisgIEFNX0NPTkRJVElPTkFMKEhBVkVfVkFMR1JJTkQsIHRlc3QgISAieCRWQUxHUklORF9QQVRIIiA9ICJ4bm8iKQorXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9nc3QteDExLm00IGIvY29tbW9uL200L2dzdC14MTEubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNiYWYyZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9tNC9nc3QteDExLm00CkBAIC0wLDAgKzEsNzAgQEAKK2RubCBtYWNyb3MgZm9yIFgtcmVsYXRlZCBkZXRlY3Rpb25zCitkbmwgQUNfU1VCU1QncyBIQVZFX1gsIFhfQ0ZMQUdTLCBYX0xJQlMKK0FDX0RFRlVOKFtBR19HU1RfQ0hFQ0tfWF0sCitbCisgIEFDX1BBVEhfWFRSQQorICBhY19jZmxhZ3Nfc2F2ZT0iJENGTEFHUyIKKyAgYWNfY3BwZmxhZ3Nfc2F2ZT0iJENQUEZMQUdTIgorICBDRkxBR1M9IiRDRkxBR1MgJFhfQ0ZMQUdTIgorICBDUFBGTEFHUz0iJENQUEZMQUdTICRYX0NGTEFHUyIKKworICBkbmwgbm93IHRyeSB0byBmaW5kIHRoZSBIRUFERVIKKyAgQUNfQ0hFQ0tfSEVBREVSKFgxMS9YbGliLmgsIEhBVkVfWD0ieWVzIiwgSEFWRV9YPSJubyIpCisKKyAgaWYgdGVzdCAieCRIQVZFX1giID0gInhubyIKKyAgdGhlbgorICAgIEFDX01TR19OT1RJQ0UoW2Nhbm5vdCBmaW5kIFgxMSBkZXZlbG9wbWVudCBmaWxlc10pCisgIGVsc2UKKyAgICBkbmwgdGhpcyBpcyBtdWNoIG1vcmUgdGhhbiB3ZSB3YW50CisgICAgWF9MSUJTPSIkWF9MSUJTICRYX1BSRV9MSUJTICRYX0VYVFJBX0xJQlMiCisgICAgZG5sIEFDX1BBVEhfWFRSQSBvbmx5IGRlZmluZXMgdGhlIHBhdGggbmVlZGVkIHRvIGZpbmQgdGhlIFggbGlicywKKyAgICBkbmwgaXQgZG9lcyBub3QgYWRkIHRoZSBsaWJzOyB0aGVyZWZvcmUgd2UgYWRkIHRoZW0gaGVyZQorICAgIFhfTElCUz0iJFhfTElCUyAtbFgxMSIKKyAgICBBQ19TVUJTVChYX0NGTEFHUykKKyAgICBBQ19TVUJTVChYX0xJQlMpCisgIGZpCisgIEFDX1NVQlNUKEhBVkVfWCkKKworICBDRkxBR1M9IiRhY19jZmxhZ3Nfc2F2ZSIKKyAgQ1BQRkxBR1M9IiRhY19jcHBmbGFnc19zYXZlIgorXSkKKworZG5sICoqKiBYVmlkZW8gKioqCitkbmwgTG9vayBmb3IgdGhlIFBJQyBsaWJyYXJ5IGZpcnN0LCBEZWJpYW4gcmVxdWlyZXMgaXQuCitkbmwgQ2hlY2sgZGViaWFuLWRldmVsIGFyY2hpdmVzIGZvciBnb3J5IGRldGFpbHMuCitkbmwgMjAwMjAxMTA6CitkbmwgQXQgdGhlIG1vbWVudCBYRnJlZTg2IGRvZXNuJ3QgZGlzdHJpYnV0ZSBzaGFyZWQgbGliWHYgZHVlCitkbmwgdG8gdW5zdGFibGUgQVBJLiAgT24gbWFueSBwbGF0Zm9ybXMgeW91IENBTiBOT1QgbGluayBhIHNoYXJlZAorZG5sIGxpYiB0byBhIHN0YXRpYyBub24tUElDIGxpYi4gIFRoaXMgaXMgd2hhdCB0aGUgeHZpZGVvIEdTdHJlYW1lcgorZG5sIHBsdWctaW4gd2FudHMgdG8gZG8uICBTbyBEZWJpYW4gZGlzdHJpYnV0ZXMgYSBQSUMgY29tcGlsZWQKK2RubCB2ZXJzaW9uIG9mIHRoZSBzdGF0aWMgbGliIGZvciBwbHVnLWlucyB0byBsaW5rIHRvIHdoZW4gaXQgaXMKK2RubCBpbmFwcHJvcHJpYXRlIHRvIGxpbmsgdGhlIG1haW4gYXBwbGljYXRpb24gdG8gbGliWHYgZGlyZWN0bHkuCitkbmwgRklYTUU6IGFkZCBjaGVjayBpZiB0aGlzIHBsYXRmb3JtIGNhbiBzdXBwb3J0IGxpbmtpbmcgdG8gYQorZG5sICAgICAgICBub24tUElDIGxpYlh2LCBpZiBub3QgdGhlbiBkb24gbm90IHVzZSBYdi4KK2RubCBGSVhNRTogcGVyaGFwcyB3YXJuIHVzZXIgaWYgdGhleSBoYXZlIGEgc2hhcmVkIGxpYlh2IHNpbmNlCitkbmwgICAgICAgIHRoaXMgaXMgYW4gZXJyb3IgdW50aWwgWEZyZWU4NiBzdGFydHMgc2hpcHBpbmcgb25lCitBQ19ERUZVTihbQUdfR1NUX0NIRUNLX1hWXSwKK1sKKyAgaWYgdGVzdCB4JEhBVkVfWCA9IHh5ZXM7IHRoZW4KKyAgICBBQ19DSEVDS19MSUIoWHZfcGljLCBYdlF1ZXJ5RXh0ZW5zaW9uLAorICAgICAgICAgICAgICAgICBIQVZFX1hWSURFTz0ieWVzIiwgSEFWRV9YVklERU89Im5vIiwKKyAgICAgICAgICAgICAgICAgJFhfTElCUyAtbFhleHQpCisKKyAgICBpZiB0ZXN0IHgkSEFWRV9YVklERU8gPSB4eWVzOyB0aGVuCisgICAgICBYVklERU9fTElCUz0iLWxYdl9waWMgLWxYZXh0IgorICAgICAgQUNfU1VCU1QoWFZJREVPX0xJQlMpCisgICAgZWxzZQorICAgICAgZG5sIHRyeSBhZ2FpbiB1c2luZyBzb21ldGhpbmcgZWxzZSBpZiB3ZSBkaWRuJ3QgZmluZCBpdCBmaXJzdAorICAgICAgaWYgdGVzdCB4JEhBVkVfWFZJREVPID0geG5vOyB0aGVuCisgICAgICAgIEFDX0NIRUNLX0xJQihYdiwgWHZRdWVyeUV4dGVuc2lvbiwKKyAgICAgICAgICAgICAgICAgICBIQVZFX1hWSURFTz0ieWVzIiwgSEFWRV9YVklERU89Im5vIiwKKyAgICAgICAgICAgICAgICAgICAkWF9MSUJTIC1sWGV4dCkKKworICAgICAgICBpZiB0ZXN0IHgkSEFWRV9YVklERU8gPSB4eWVzOyB0aGVuCisgICAgICAgICAgWFZJREVPX0xJQlM9Ii1sWHYgLWxYZXh0IgorICAgICAgICAgIEFDX1NVQlNUKFhWSURFT19MSUJTKQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorICBmaQorXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9nc3QubTQgYi9jb21tb24vbTQvZ3N0Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZmRlNTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vbTQvZ3N0Lm00CkBAIC0wLDAgKzEsMzEgQEAKK2RubCBBR19HU1RfSU5JVAorZG5sIHNldHMgdXAgdXNlIG9mIEdTdHJlYW1lciBjb25maWd1cmUuYWMgbWFjcm9zCitkbmwgYWxsIEdTdHJlYW1lciBhdXRvY29uZiBtYWNyb3MgYXJlIHByZWZpeGVkCitkbmwgd2l0aCBBR19HU1RfIGZvciBwdWJsaWMgbWFjcm9zCitkbmwgd2l0aCBfQUdfR1NUXyBmb3IgcHJpdmF0ZSBtYWNyb3MKKworQUNfREVGVU4oW0FHX0dTVF9JTklUXSwKK1sKKyAgbTRfcGF0dGVybl9mb3JiaWQoXl8/QUdfR1NUXykKK10pCisKK2RubCBBR19HU1RfUEtHX0NPTkZJR19QQVRICitkbmwKK2RubCBzZXRzIHVwIGEgR1NUX1BLR19DT05GSUdfUEFUSCB2YXJpYWJsZSBmb3IgdXNlIGluIE1ha2VmaWxlLmFtCitkbmwgd2hpY2ggY29udGFpbnMgdGhlIHBhdGggb2YgdGhlIGluLXRyZWUgcGtnY29uZmlnIGRpcmVjdG9yeSBmaXJzdAorZG5sIGFuZCB0aGVuIGFueSBwYXRocyBzcGVjaWZpZWQgaW4gUEtHX0NPTkZJR19QQVRILgorZG5sCitkbmwgV2UgZG8gdGhpcyBtb3N0bHkgc28gd2UgZG9uJ3QgaGF2ZSB0byB1c2UgdW5wb3J0YWJsZSBzaGVsbCBjb25zdHJ1Y3RzCitkbmwgc3VjaCBhcyAke1BLR19DT05GSUdfUEFUSDorOiRQS0dfQ09ORklHX1BBVEh9IGluIE1ha2VmaWxlLmFtIHRvIGhhbmRsZQorZG5sIHRoZSBjYXNlIHdoZXJlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0LCBidXQgYWxzbyBpbiBvcmRlcgorZG5sIHRvIGF2b2lkIGEgdHJhaWxpbmcgJzonIGluIHRoZSBQS0dfQ09ORklHX1BBVEggd2hpY2ggYXBwYXJlbnRseSBjYXVzZXMKK2RubCBwcm9ibGVtcyB3aXRoIHBrZy1jb25maWcgb24gd2luZG93cyB3aXRoIG1zeXMvbWluZ3cuCitBQ19ERUZVTihbQUdfR1NUX1BLR19DT05GSUdfUEFUSF0sCitbCisgIEdTVF9QS0dfQ09ORklHX1BBVEg9IlwkKHRvcF9idWlsZGRpcikvcGtnY29uZmlnIgorICBpZiB0ZXN0ICJ4JFBLR19DT05GSUdfUEFUSCIgIT0gIngiOyB0aGVuCisgICAgR1NUX1BLR19DT05GSUdfUEFUSD0iJEdTVF9QS0dfQ09ORklHX1BBVEg6JFBLR19DT05GSUdfUEFUSCIKKyAgZmkKKyAgQUNfU1VCU1QoW0dTVF9QS0dfQ09ORklHX1BBVEhdKQorICBBQ19NU0dfTk9USUNFKFtVc2luZyBHU1RfUEtHX0NPTkZJR19QQVRIID0gJEdTVF9QS0dfQ09ORklHX1BBVEhdKQorXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9ndGstZG9jLm00IGIvY29tbW9uL200L2d0ay1kb2MubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlhNGU3ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9tNC9ndGstZG9jLm00CkBAIC0wLDAgKzEsNDIgQEAKK2RubCAtKi0gbW9kZTogYXV0b2NvbmYgLSotCisKKyMgc2VyaWFsIDEKKworZG5sIFVzYWdlOgorZG5sICAgR1RLX0RPQ19DSEVDSyhbbWluaW11bS1ndGstZG9jLXZlcnNpb25dKQorQUNfREVGVU4oW0dUS19ET0NfQ0hFQ0tdLAorWworICBBQ19CRUZPUkUoW0FDX1BST0dfTElCVE9PTF0sWyQwXSlkbmwgc2V0dXAgbGlidG9vbCBmaXJzdAorICBBQ19CRUZPUkUoW0FNX1BST0dfTElCVE9PTF0sWyQwXSlkbmwgc2V0dXAgbGlidG9vbCBmaXJzdAorICBkbmwgZm9yIG92ZXJyaWRpbmcgdGhlIGRvY3VtZW50YXRpb24gaW5zdGFsbGF0aW9uIGRpcmVjdG9yeQorICBBQ19BUkdfV0lUSChbaHRtbC1kaXJdLAorICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtaHRtbC1kaXI9UEFUSF0sIFtwYXRoIHRvIGluc3RhbGxlZCBkb2NzXSksLAorICAgIFt3aXRoX2h0bWxfZGlyPScke2RhdGFkaXJ9L2d0ay1kb2MvaHRtbCddKQorICBIVE1MX0RJUj0iJHdpdGhfaHRtbF9kaXIiCisgIEFDX1NVQlNUKFtIVE1MX0RJUl0pCisKKyAgZG5sIGVuYWJsZS9kaXNhYmxlIGRvY3VtZW50YXRpb24gYnVpbGRpbmcKKyAgQUNfQVJHX0VOQUJMRShbZ3RrLWRvY10sCisgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWd0ay1kb2NdLAorICAgICAgICAgICAgICAgICAgIFt1c2UgZ3RrLWRvYyB0byBidWlsZCBkb2N1bWVudGF0aW9uIFtbZGVmYXVsdD1ub11dXSksLAorICAgIFtlbmFibGVfZ3RrX2RvYz1ub10pCisKKyAgaWYgdGVzdCB4JGVuYWJsZV9ndGtfZG9jID0geHllczsgdGhlbgorICAgIGlmZWxzZShbJDFdLFtdLAorICAgICAgW1BLR19DSEVDS19FWElTVFMoW2d0ay1kb2NdLCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbZ3RrLWRvYyBub3QgaW5zdGFsbGVkIGFuZCAtLWVuYWJsZS1ndGstZG9jIHJlcXVlc3RlZF0pKV0sCisgICAgICBbUEtHX0NIRUNLX0VYSVNUUyhbZ3RrLWRvYyA+PSAkMV0sLAorICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtZb3UgbmVlZCB0byBoYXZlIGd0ay1kb2MgPj0gJDEgaW5zdGFsbGVkIHRvIGJ1aWxkIGd0ay1kb2NdKSldKQorICAgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgICAgICBBQ19QUk9HX1NFRAorICAgIGZpCisgIGZpCisKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIGd0ay1kb2MgZG9jdW1lbnRhdGlvbl0pCisgIEFDX01TR19SRVNVTFQoJGVuYWJsZV9ndGtfZG9jKQorCisgIEFDX1BBVEhfUFJPR1MoR1RLRE9DX0NIRUNLLGd0a2RvYy1jaGVjaywpCisKKyAgQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9HVEtfRE9DXSwgW3Rlc3QgeCRlbmFibGVfZ3RrX2RvYyA9IHh5ZXNdKQorICBBTV9DT05ESVRJT05BTChbR1RLX0RPQ19VU0VfTElCVE9PTF0sIFt0ZXN0IC1uICIkTElCVE9PTCJdKQorXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IGIvY29tbW9uL200L2ludHJvc3BlY3Rpb24ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg5NzIxYwotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00CkBAIC0wLDAgKzEsOTQgQEAKK2RubCAtKi0gbW9kZTogYXV0b2NvbmYgLSotCitkbmwgQ29weXJpZ2h0IDIwMDkgSm9oYW4gRGFobGluCitkbmwKK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIGF1dGhvcihzKSBnaXZlcyB1bmxpbWl0ZWQKK2RubCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorZG5sIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorZG5sCisKKyMgc2VyaWFsIDEKKworbTRfZGVmaW5lKFtfR09CSkVDVF9JTlRST1NQRUNUSU9OX0NIRUNLX0lOVEVSTkFMXSwKK1sKKyAgICBBQ19CRUZPUkUoW0FDX1BST0dfTElCVE9PTF0sWyQwXSlkbmwgc2V0dXAgbGlidG9vbCBmaXJzdAorICAgIEFDX0JFRk9SRShbQU1fUFJPR19MSUJUT09MXSxbJDBdKWRubCBzZXR1cCBsaWJ0b29sIGZpcnN0CisgICAgQUNfQkVGT1JFKFtMVF9JTklUXSxbJDBdKWRubCBzZXR1cCBsaWJ0b29sIGZpcnN0CisKKyAgICBkbmwgZW5hYmxlL2Rpc2FibGUgaW50cm9zcGVjdGlvbgorICAgIG00X2lmKFskMl0sIFtyZXF1aXJlXSwKKyAgICBbZG5sCisgICAgICAgIGVuYWJsZV9pbnRyb3NwZWN0aW9uPXllcworICAgIF0sW2RubAorICAgICAgICBBQ19BUkdfRU5BQkxFKGludHJvc3BlY3Rpb24sCisgICAgICAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtaW50cm9zcGVjdGlvbls9QDw6QG5vL2F1dG8veWVzQDo+QF1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0VuYWJsZSBpbnRyb3NwZWN0aW9uIGZvciB0aGlzIGJ1aWxkXSksLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbmFibGVfaW50cm9zcGVjdGlvbj1hdXRvXSkKKyAgICBdKWRubAorCisgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgZ29iamVjdC1pbnRyb3NwZWN0aW9uXSkKKworICAgIGRubCBwcmVzZW5jZS92ZXJzaW9uIGNoZWNraW5nCisgICAgQVNfQ0FTRShbJGVuYWJsZV9pbnRyb3NwZWN0aW9uXSwKKyAgICBbbm9dLCBbZG5sCisgICAgICAgIGZvdW5kX2ludHJvc3BlY3Rpb249Im5vIChkaXNhYmxlZCwgdXNlIC0tZW5hYmxlLWludHJvc3BlY3Rpb24gdG8gZW5hYmxlKSIKKyAgICBdLGRubAorICAgIFt5ZXNdLFtkbmwKKyAgICAgICAgUEtHX0NIRUNLX0VYSVNUUyhbZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMF0sLAorICAgICAgICAgICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMCBpcyBub3QgaW5zdGFsbGVkXSkpCisgICAgICAgIFBLR19DSEVDS19FWElTVFMoW2dvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAgPj0gJDFdLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2ludHJvc3BlY3Rpb249eWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbWW91IG5lZWQgdG8gaGF2ZSBnb2JqZWN0LWludHJvc3BlY3Rpb24gPj0gJDEgaW5zdGFsbGVkIHRvIGJ1aWxkIEFDX1BBQ0tBR0VfTkFNRV0pKQorICAgIF0sZG5sCisgICAgW2F1dG9dLFtkbmwKKyAgICAgICAgUEtHX0NIRUNLX0VYSVNUUyhbZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMCA+PSAkMV0sIGZvdW5kX2ludHJvc3BlY3Rpb249eWVzLCBmb3VuZF9pbnRyb3NwZWN0aW9uPW5vKQorICAgIF0sZG5sCisgICAgW2RubAkKKyAgICAgICAgQUNfTVNHX0VSUk9SKFtpbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byAtLWVuYWJsZS1pbnRyb3NwZWN0aW9uLCBzaG91bGQgYmUgb25lIG9mIEA8OkBuby9hdXRvL3llc0A6PkBdKQorICAgIF0pZG5sCisKKyAgICBBQ19NU0dfUkVTVUxUKFskZm91bmRfaW50cm9zcGVjdGlvbl0pCisKKyAgICBJTlRST1NQRUNUSU9OX1NDQU5ORVI9CisgICAgSU5UUk9TUEVDVElPTl9DT01QSUxFUj0KKyAgICBJTlRST1NQRUNUSU9OX0dFTkVSQVRFPQorICAgIElOVFJPU1BFQ1RJT05fR0lSRElSPQorICAgIElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUj0KKyAgICBpZiB0ZXN0ICJ4JGZvdW5kX2ludHJvc3BlY3Rpb24iID0gInh5ZXMiOyB0aGVuCisgICAgICAgSU5UUk9TUEVDVElPTl9TQ0FOTkVSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWdfaXJfc2Nhbm5lciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAorICAgICAgIElOVFJPU1BFQ1RJT05fQ09NUElMRVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z19pcl9jb21waWxlciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAorICAgICAgIElOVFJPU1BFQ1RJT05fR0VORVJBVEU9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z19pcl9nZW5lcmF0ZSBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAorICAgICAgIElOVFJPU1BFQ1RJT05fR0lSRElSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWdpcmRpciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAorICAgICAgIElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUj0iJCgkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXR5cGVsaWJkaXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMCkiCisgICAgICAgSU5UUk9TUEVDVElPTl9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCisgICAgICAgSU5UUk9TUEVDVElPTl9MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAKKyAgICAgICBJTlRST1NQRUNUSU9OX01BS0VGSUxFPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWRhdGFkaXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAvZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMC9NYWtlZmlsZS5pbnRyb3NwZWN0aW9uCisgICAgZmkKKyAgICBBQ19TVUJTVChJTlRST1NQRUNUSU9OX1NDQU5ORVIpCisgICAgQUNfU1VCU1QoSU5UUk9TUEVDVElPTl9DT01QSUxFUikKKyAgICBBQ19TVUJTVChJTlRST1NQRUNUSU9OX0dFTkVSQVRFKQorICAgIEFDX1NVQlNUKElOVFJPU1BFQ1RJT05fR0lSRElSKQorICAgIEFDX1NVQlNUKElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUikKKyAgICBBQ19TVUJTVChJTlRST1NQRUNUSU9OX0NGTEFHUykKKyAgICBBQ19TVUJTVChJTlRST1NQRUNUSU9OX0xJQlMpCisgICAgQUNfU1VCU1QoSU5UUk9TUEVDVElPTl9NQUtFRklMRSkKKworICAgIEFNX0NPTkRJVElPTkFMKEhBVkVfSU5UUk9TUEVDVElPTiwgdGVzdCAieCRmb3VuZF9pbnRyb3NwZWN0aW9uIiA9ICJ4eWVzIikKK10pCisKKworZG5sIFVzYWdlOgorZG5sICAgR09CSkVDVF9JTlRST1NQRUNUSU9OX0NIRUNLKFttaW5pbXVtLWctaS12ZXJzaW9uXSkKKworQUNfREVGVU4oW0dPQkpFQ1RfSU5UUk9TUEVDVElPTl9DSEVDS10sCitbCisgIF9HT0JKRUNUX0lOVFJPU1BFQ1RJT05fQ0hFQ0tfSU5URVJOQUwoWyQxXSkKK10pCisKK2RubCBVc2FnZToKK2RubCAgIEdPQkpFQ1RfSU5UUk9TUEVDVElPTl9SRVFVSVJFKFttaW5pbXVtLWctaS12ZXJzaW9uXSkKKworCitBQ19ERUZVTihbR09CSkVDVF9JTlRST1NQRUNUSU9OX1JFUVVJUkVdLAorWworICBfR09CSkVDVF9JTlRST1NQRUNUSU9OX0NIRUNLX0lOVEVSTkFMKFskMV0sIFtyZXF1aXJlXSkKK10pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvb3JjLm00IGIvY29tbW9uL200L29yYy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmIyNDU5Ci0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uL200L29yYy5tNApAQCAtMCwwICsxLDcwIEBACitkbmwgcGtnLWNvbmZpZy1iYXNlZCBjaGVja3MgZm9yIE9yYworCitkbmwgc3BlY2lmaWM6CitkbmwgT1JDX0NIRUNLKFtSRVFVSVJFRF9WRVJTSU9OXSkKKworQUNfREVGVU4oW09SQ19DSEVDS10sCitbCisgIE9SQ19SRVE9aWZlbHNlKFskMV0sICwgIjAuNC42IiwgWyQxXSkKKworICBBQ19BUkdfRU5BQkxFKG9yYywKKyAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW9yY10sW3VzZSBPcmMgaWYgaW5zdGFsbGVkXSksCisgIFtjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgYXV0bykgZW5hYmxlX29yYz1hdXRvIDs7CisgICAgeWVzKSBlbmFibGVfb3JjPXllcyA7OworICAgIG5vKSAgZW5hYmxlX29yYz1ubyA7OworICAgICopIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1vcmMpIDs7CisgIGVzYWMKKyAgXSwKKyAgW2VuYWJsZV9vcmM9YXV0b10pIGRubCBEZWZhdWx0IHZhbHVlCisKKyAgaWYgdGVzdCAieCRlbmFibGVfb3JjIiAhPSAieG5vIiA7IHRoZW4KKyAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhPUkMsIG9yYy0wLjQgPj0gJE9SQ19SRVEsIFsKKyAgICAgIEFDX0RFRklORShIQVZFX09SQywgMSwgW1VzZSBPcmNdKQorICAgICAgSEFWRV9PUkM9eWVzCisgICAgICBpZiB0ZXN0ICJ4JE9SQ0MiID0gIngiIDsgdGhlbgorICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHVzYWJsZSBvcmNjKQorICAgICAgICBPUkNDPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPW9yY2Mgb3JjLTAuNGAKKyAgICAgICAgZG5sIGNoZWNrIHdoZXRoZXIgdGhlIG9yY2MgZm91bmQgYnkgcGtnLWNvbmZpZyBjYW4gYmUgcnVuIGZyb20gdGhlIGJ1aWxkIGVudmlyb25tZW50CisgICAgICAgIGRubCBpZiB0aGlzIGlzIG5vdCB0aGUgY2FzZSAoZS5nLiB3aGVuIGNyb3NzLWNvbXBpbGluZykgZmFsbCBiYWNrIHRvIG9yY2MgZnJvbSBQQVRICisgICAgICAgIEFTX0lGKFskT1JDQyAtLXZlcnNpb24gMT4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbF0sIFtdLCBbT1JDQz1gd2hpY2ggb3JjY2BdKQorICAgICAgICBBQ19NU0dfUkVTVUxUKCRPUkNDKQorICAgICAgZmkKKyAgICAgIEFDX1NVQlNUKE9SQ0MpCisgICAgICBPUkNDX0ZMQUdTPSItLWNvbXBhdCAkT1JDX1JFUSIKKyAgICAgIEFDX1NVQlNUKE9SQ0NfRkxBR1MpCisgICAgICBBU19JRihbdGVzdCAieCRPUkNDIiA9ICJ4Il0sIFtIQVZFX09SQ0M9bm9dLCBbSEFWRV9PUkNDPXllc10pCisgICAgXSwgWworICAgICAgaWYgdGVzdCAieCRlbmFibGVfb3JjIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICAgICAgQUNfTVNHX0VSUk9SKFstLWVuYWJsZS1vcmMgc3BlY2lmaWVkLCBidXQgT3JjID49ICRPUkNfUkVRIG5vdCBmb3VuZF0pCisgICAgICBmaQorICAgICAgQUNfREVGSU5FKERJU0FCTEVfT1JDLCAxLCBbRGlzYWJsZSBPcmNdKQorICAgICAgSEFWRV9PUkM9bm8KKyAgICAgIEhBVkVfT1JDQz1ubworICAgIF0pCisgIGVsc2UKKyAgICBBQ19ERUZJTkUoRElTQUJMRV9PUkMsIDEsIFtEaXNhYmxlIE9yY10pCisgICAgSEFWRV9PUkM9bm8KKyAgICBIQVZFX09SQ0M9bm8KKyAgZmkKKyAgQU1fQ09ORElUSU9OQUwoSEFWRV9PUkMsIFt0ZXN0ICJ4JEhBVkVfT1JDIiA9ICJ4eWVzIl0pCisgIEFNX0NPTkRJVElPTkFMKEhBVkVfT1JDQywgW3Rlc3QgIngkSEFWRV9PUkNDIiA9ICJ4eWVzIl0pCisKK10pKQorCitBQ19ERUZVTihbT1JDX09VVFBVVF0sCitbCisgIGlmIHRlc3QgIiRIQVZFX09SQyIgPSB5ZXMgOyB0aGVuCisgICAgcHJpbnRmICJjb25maWd1cmU6ICoqKiBPcmMgYWNjZWxlcmF0aW9uIGVuYWJsZWQuXG4iCisgIGVsc2UKKyAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9vcmMiID0gInhubyIgOyB0aGVuCisgICAgICBwcmludGYgImNvbmZpZ3VyZTogKioqIE9yYyBhY2NlbGVyYXRpb24gZGlzYWJsZWQgYnkgLS1kaXNhYmxlLW9yYy4gIFNsb3dlciBjb2RlIHBhdGhzXG4iCisgICAgICBwcmludGYgIiAgICAgICAgICAgICAgIHdpbGwgYmUgdXNlZC5cbiIKKyAgICBlbHNlCisgICAgICBwcmludGYgImNvbmZpZ3VyZTogKioqIE9yYyBhY2NlbGVyYXRpb24gZGlzYWJsZWQuICBSZXF1aXJlcyBPcmMgPj0gJE9SQ19SRVEsIHdoaWNoIHdhc1xuIgorICAgICAgcHJpbnRmICIgICAgICAgICAgICAgICBub3QgZm91bmQuICBTbG93ZXIgY29kZSBwYXRocyB3aWxsIGJlIHVzZWQuXG4iCisgICAgZmkKKyAgZmkKKyAgcHJpbnRmICJcbiIKK10pCisKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9wa2cubTQgYi9jb21tb24vbTQvcGtnLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NmUyOTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vbTQvcGtnLm00CkBAIC0wLDAgKzEsMTU3IEBACisjIHBrZy5tNCAtIE1hY3JvcyB0byBsb2NhdGUgYW5kIHV0aWxpc2UgcGtnLWNvbmZpZy4gICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjCisjIENvcHlyaWdodCDCqSAyMDA0IFNjb3R0IEphbWVzIFJlbW5hbnQgPHNjb3R0QG5ldHNwbGl0LmNvbT4uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworIyBQS0dfUFJPR19QS0dfQ09ORklHKFtNSU4tVkVSU0lPTl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtQS0dfUFJPR19QS0dfQ09ORklHXSwKK1ttNF9wYXR0ZXJuX2ZvcmJpZChbXl8/UEtHX1tBLVpfXSskXSkKK200X3BhdHRlcm5fYWxsb3coW15QS0dfQ09ORklHKF9QQVRIKT8kXSkKK0FDX0FSR19WQVIoW1BLR19DT05GSUddLCBbcGF0aCB0byBwa2ctY29uZmlnIHV0aWxpdHldKWRubAoraWYgdGVzdCAieCRhY19jdl9lbnZfUEtHX0NPTkZJR19zZXQiICE9ICJ4c2V0IjsgdGhlbgorCUFDX1BBVEhfVE9PTChbUEtHX0NPTkZJR10sIFtwa2ctY29uZmlnXSkKK2ZpCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKwlfcGtnX21pbl92ZXJzaW9uPW00X2RlZmF1bHQoWyQxXSwgWzAuOS4wXSkKKwlBQ19NU0dfQ0hFQ0tJTkcoW3BrZy1jb25maWcgaXMgYXQgbGVhc3QgdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbl0pCisJaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uOyB0aGVuCisJCUFDX01TR19SRVNVTFQoW3llc10pCisJZWxzZQorCQlBQ19NU0dfUkVTVUxUKFtub10pCisJCVBLR19DT05GSUc9IiIKKwlmaQorCitmaVtdZG5sCitdKSMgUEtHX1BST0dfUEtHX0NPTkZJRworCisjIFBLR19DSEVDS19FWElTVFMoTU9EVUxFUywgW0FDVElPTi1JRi1GT1VORF0sIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKKyMKKyMgQ2hlY2sgdG8gc2VlIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIHNldCBvZiBtb2R1bGVzIGV4aXN0cy4gIFNpbWlsYXIKKyMgdG8gUEtHX0NIRUNLX01PRFVMRVMoKSwgYnV0IGRvZXMgbm90IHNldCB2YXJpYWJsZXMgb3IgcHJpbnQgZXJyb3JzLgorIworIworIyBTaW1pbGFyIHRvIFBLR19DSEVDS19NT0RVTEVTLCBtYWtlIHN1cmUgdGhhdCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YKKyMgdGhpcyBvciBQS0dfQ0hFQ0tfTU9EVUxFUyBpcyBjYWxsZWQsIG9yIG1ha2Ugc3VyZSB0byBjYWxsCisjIFBLR19DSEVDS19FWElTVFMgbWFudWFsbHkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtQS0dfQ0hFQ0tfRVhJU1RTXSwKK1tBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSlkbmwKK2lmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgQUNfUlVOX0xPRyhbJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiQxIl0pOyB0aGVuCisgIG00X2lmdmFsKFskMl0sIFskMl0sIFs6XSkKK200X2lmdmFsbihbJDNdLCBbZWxzZQorICAkM10pZG5sCitmaV0pCisKKworIyBfUEtHX0NPTkZJRyhbVkFSSUFCTEVdLCBbQ09NTUFORF0sIFtNT0RVTEVTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19QS0dfQ09ORklHXSwKK1tpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkJDEiOyB0aGVuCisgICAgICAgIHBrZ19jdl9bXSQxPSIkJDEiCisgICAgZWxzZQorICAgICAgICBQS0dfQ0hFQ0tfRVhJU1RTKFskM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgW3BrZ19jdl9bXSQxPWAkUEtHX0NPTkZJRyAtLVtdJDIgIiQzIiAyPi9kZXYvbnVsbGBdLAorCQkJIFtwa2dfZmFpbGVkPXllc10pCisgICAgZmkKK2Vsc2UKKwlwa2dfZmFpbGVkPXVudHJpZWQKK2ZpW11kbmwKK10pIyBfUEtHX0NPTkZJRworCisjIF9QS0dfU0hPUlRfRVJST1JTX1NVUFBPUlRFRAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19QS0dfU0hPUlRfRVJST1JTX1NVUFBPUlRFRF0sCitbQUNfUkVRVUlSRShbUEtHX1BST0dfUEtHX0NPTkZJR10pCitpZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCitlbHNlCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubworZmlbXWRubAorXSkjIF9QS0dfU0hPUlRfRVJST1JTX1NVUFBPUlRFRAorCisKKyMgUEtHX0NIRUNLX01PRFVMRVMoVkFSSUFCTEUtUFJFRklYLCBNT0RVTEVTLCBbQUNUSU9OLUlGLUZPVU5EXSwKKyMgW0FDVElPTi1JRi1OT1QtRk9VTkRdKQorIworIworIyBOb3RlIHRoYXQgaWYgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGUgZmlyc3QgY2FsbCB0bworIyBQS0dfQ0hFQ0tfTU9EVUxFUyBtaWdodCBub3QgaGFwcGVuLCB5b3Ugc2hvdWxkIGJlIHN1cmUgdG8gaW5jbHVkZSBhbgorIyBleHBsaWNpdCBjYWxsIHRvIFBLR19QUk9HX1BLR19DT05GSUcgaW4geW91ciBjb25maWd1cmUuYWMKKyMKKyMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtQS0dfQ0hFQ0tfTU9EVUxFU10sCitbQUNfUkVRVUlSRShbUEtHX1BST0dfUEtHX0NPTkZJR10pZG5sCitBQ19BUkdfVkFSKFskMV1bX0NGTEFHU10sIFtDIGNvbXBpbGVyIGZsYWdzIGZvciAkMSwgb3ZlcnJpZGluZyBwa2ctY29uZmlnXSlkbmwKK0FDX0FSR19WQVIoWyQxXVtfTElCU10sIFtsaW5rZXIgZmxhZ3MgZm9yICQxLCBvdmVycmlkaW5nIHBrZy1jb25maWddKWRubAorCitwa2dfZmFpbGVkPW5vCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkMV0pCisKK19QS0dfQ09ORklHKFskMV1bX0NGTEFHU10sIFtjZmxhZ3NdLCBbJDJdKQorX1BLR19DT05GSUcoWyQxXVtfTElCU10sIFtsaWJzXSwgWyQyXSkKKworbTRfZGVmaW5lKFtfUEtHX1RFWFRdLCBbQWx0ZXJuYXRpdmVseSwgeW91IG1heSBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyAkMVtdX0NGTEFHUworYW5kICQxW11fTElCUyB0byBhdm9pZCB0aGUgbmVlZCB0byBjYWxsIHBrZy1jb25maWcuCitTZWUgdGhlIHBrZy1jb25maWcgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy5dKQorCitpZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCisgICAgICAgIF9QS0dfU0hPUlRfRVJST1JTX1NVUFBPUlRFRAorICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KKwkgICAgICAgICQxW11fUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICIkMiJgCisgICAgICAgIGVsc2UKKwkgICAgICAgICQxW11fUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICIkMiJgCisgICAgICAgIGZpCisJIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCisJZWNobyAiJCQxW11fUEtHX0VSUk9SUyIgPiZBU19NRVNTQUdFX0xPR19GRAorCisJaWZlbHNlKFskNF0sICwgW0FDX01TR19FUlJPUihkbmwKK1tQYWNrYWdlIHJlcXVpcmVtZW50cyAoJDIpIHdlcmUgbm90IG1ldDoKKworJCQxX1BLR19FUlJPUlMKKworQ29uc2lkZXIgYWRqdXN0aW5nIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgeW91CitpbnN0YWxsZWQgc29mdHdhcmUgaW4gYSBub24tc3RhbmRhcmQgcHJlZml4LgorCitfUEtHX1RFWFQKK10pXSwKKwkJW0FDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgICAgICAgICAkNF0pCitlbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCisJaWZlbHNlKFskNF0sICwgW0FDX01TR19GQUlMVVJFKGRubAorW1RoZSBwa2ctY29uZmlnIHNjcmlwdCBjb3VsZCBub3QgYmUgZm91bmQgb3IgaXMgdG9vIG9sZC4gIE1ha2Ugc3VyZSBpdAoraXMgaW4geW91ciBQQVRIIG9yIHNldCB0aGUgUEtHX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgZnVsbAorcGF0aCB0byBwa2ctY29uZmlnLgorCitfUEtHX1RFWFQKKworVG8gZ2V0IHBrZy1jb25maWcsIHNlZSA8aHR0cDovL3BrZy1jb25maWcuZnJlZWRlc2t0b3Aub3JnLz4uXSldLAorCQlbJDRdKQorZWxzZQorCSQxW11fQ0ZMQUdTPSRwa2dfY3ZfW10kMVtdX0NGTEFHUworCSQxW11fTElCUz0kcGtnX2N2X1tdJDFbXV9MSUJTCisgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisJaWZlbHNlKFskM10sICwgOiwgWyQzXSkKK2ZpW11kbmwKK10pIyBQS0dfQ0hFQ0tfTU9EVUxFUwpkaWZmIC0tZ2l0IGEvY29tbW9uL21hbmdsZS10bXBsLnB5IGIvY29tbW9uL21hbmdsZS10bXBsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNGY5NDgKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vbWFuZ2xlLXRtcGwucHkKQEAgLTAsMCArMSwxNjMgQEAKKyMgLSotIE1vZGU6IFB5dGhvbiAtKi0KKyMgdmk6c2k6ZXQ6c3c9NDpzdHM9NDp0cz00CisKKyIiIgordXNlIHRoZSBvdXRwdXQgZnJvbSBnc3QteG1saW5zcGVjdC5weSB0byBtYW5nbGUgdG1wbC8qLnNnbWwgYW5kCitpbnNlcnQvb3ZlcndyaXRlIFNob3J0IERlc2NyaXB0aW9uIGFuZCBMb25nIERlc2NyaXB0aW9uCisiIiIKKworIyBGSVhNRTogcmlnaHQgbm93IGl0IHVzZXMgcHlnc3QgYW5kIHNjYW5zIG9uIGl0cyBvd247CisjIHdlIHJlYWxseSBzaG91bGQgdXNlIGluc3BlY3QvKi54bWwgaW5zdGVhZCBzaW5jZSB0aGUgcmVzdWx0IG9mCisjIGdzdC14bWxpbnNwZWN0LnB5IGlzIGNvbW1pdHRlZCBieSB0aGUgZG9jcyBtYWludGFpbmVyLCB3aG8gY2FuIGJlCisjIGV4cGVjdGVkIHRvIGhhdmUgcHlnc3QsIGJ1dCB0aGlzIHN0ZXAgc2hvdWxkIGJlIGRvbmUgZm9yIGV2ZXJ5IGRvY3MgYnVpbGQsCisjIHNvIG5vIHB5Z3N0IGFsbG93ZWQKKworIyByZWFkIGluIGluc3BlY3QvKi54bWwKKyMgZm9yIGV2ZXJ5IHRtcGwvZWxlbWVudC0obmFtZSkueG1sOiBtYW5nbGUgd2l0aCBkZXRhaWxzIGZyb20gZWxlbWVudAorCitpbXBvcnQgZ2xvYgoraW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKKworY2xhc3MgVG1wbDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKKyAgICAgICAgc2VsZi5fc2VjdGlvbmlkcyA9IFtdCisgICAgICAgIHNlbGYuX3NlY3Rpb25zID0ge30KKworICAgIGRlZiByZWFkKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVhZCBhbmQgcGFyc2UgdGhlIHNlY3Rpb25zIGZyb20gdGhlIGdpdmVuIGZpbGUuCisgICAgICAgICIiIgorICAgICAgICBsaW5lcyA9IG9wZW4oc2VsZi5maWxlbmFtZSkucmVhZGxpbmVzKCkKKyAgICAgICAgbWF0Y2hlciA9IHJlLmNvbXBpbGUoIjwhLS0gIyMjIyMgU0VDVElPTiAoXFMrKSAjIyMjIyAtLT5cbiIpCisgICAgICAgIGlkID0gTm9uZQorCisgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgbWF0Y2ggPSBtYXRjaGVyLnNlYXJjaChsaW5lKQorICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgaWQgPSBtYXRjaC5leHBhbmQoIlxcMSIpCisgICAgICAgICAgICAgICAgc2VsZi5fc2VjdGlvbmlkcy5hcHBlbmQoaWQpCisgICAgICAgICAgICAgICAgc2VsZi5fc2VjdGlvbnNbaWRdID0gW10KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbm90IGlkOgorICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgIldBUk5JTkc6IGxpbmUgYmVmb3JlIGEgU0VDVElPTiBoZWFkZXI6ICVzIiAlIGxpbmUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2VjdGlvbnNbaWRdLmFwcGVuZChsaW5lKQorCisgICAgZGVmIGdldF9zZWN0aW9uKHNlbGYsIGlkKToKKyAgICAgICAgIiIiCisgICAgICAgIEdldCB0aGUgY29udGVudCBmcm9tIHRoZSBnaXZlbiBzZWN0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NlY3Rpb25zW2lkXQorCisgICAgZGVmIHNldF9zZWN0aW9uKHNlbGYsIGlkLCBjb250ZW50KToKKyAgICAgICAgIiIiCisgICAgICAgIFJlcGxhY2UgdGhlIGdpdmVuIHNlY3Rpb24gaWQgd2l0aCB0aGUgZ2l2ZW4gY29udGVudC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3NlY3Rpb25zW2lkXSA9IGNvbnRlbnQKKworICAgIGRlZiBvdXRwdXQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIG91dHB1dCBvZiB0aGUgY3VycmVudCB0ZW1wbGF0ZSBpbiB0aGUgdG1wbC8qLnNnbWwgZm9ybWF0LgorICAgICAgICAiIiIKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBmb3IgaWQgaW4gc2VsZi5fc2VjdGlvbmlkczoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiPCEtLSAjIyMjIyBTRUNUSU9OICVzICMjIyMjIC0tPlxuIiAlIGlkKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5fc2VjdGlvbnNbaWRdOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChsaW5lKQorCisgICAgICAgIHJldHVybiAiIi5qb2luKGxpbmVzKQorCisgICAgZGVmIHdyaXRlKHNlbGYsIGJhY2t1cD1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBXcml0ZSBvdXQgdGhlIHRlbXBsYXRlIGZpbGUgYWdhaW4sIGJhY2tpbmcgdXAgdGhlIHByZXZpb3VzIG9uZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGJhY2t1cDoKKyAgICAgICAgICAgIHRhcmdldCA9IHNlbGYuZmlsZW5hbWUgKyAiLm1hbmdsZS5iYWsiCisgICAgICAgICAgICBvcy5yZW5hbWUoc2VsZi5maWxlbmFtZSwgdGFyZ2V0KQorCisgICAgICAgIGhhbmRsZSA9IG9wZW4oc2VsZi5maWxlbmFtZSwgInciKQorICAgICAgICBoYW5kbGUud3JpdGUoc2VsZi5vdXRwdXQoKSkKKyAgICAgICAgaGFuZGxlLmNsb3NlKCkKKworaW1wb3J0IHhtbC5kb20ubWluaWRvbQorCitkZWYgZ2V0X2VsZW1lbnRzKGZpbGUpOgorICAgIGVsZW1lbnRzID0ge30KKyAgICBkb2MgPSB4bWwuZG9tLm1pbmlkb20ucGFyc2UoZmlsZSkKKworICAgIGVsZW0gPSBOb25lCisgICAgZm9yIGUgaW4gZG9jLmNoaWxkTm9kZXM6CisgICAgICAgIGlmIGUubm9kZVR5cGUgPT0gZS5FTEVNRU5UX05PREUgYW5kIGUubG9jYWxOYW1lID09ICdwbHVnaW4nOgorICAgICAgICAgICAgZWxlbSA9IGUKKyAgICAgICAgICAgIGJyZWFrCisgICAgaWYgZWxlbSA9PSBOb25lOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZWxlbTIgPSBOb25lCisgICAgZm9yIGUgaW4gZWxlbS5jaGlsZE5vZGVzOgorICAgICAgICBpZiBlLm5vZGVUeXBlID09IGUuRUxFTUVOVF9OT0RFIGFuZCBlLmxvY2FsTmFtZSA9PSAnZWxlbWVudHMnOgorICAgICAgICAgICAgZWxlbTIgPSBlCisgICAgICAgICAgICBicmVhaworICAgIGlmIGVsZW0yID09IE5vbmU6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBlbGVtID0gZWxlbTIKKworICAgIGZvciBlIGluIGVsZW0uY2hpbGROb2RlczoKKyAgICAgICAgaWYgZS5ub2RlVHlwZSA9PSBlLkVMRU1FTlRfTk9ERSBhbmQgZS5sb2NhbE5hbWUgPT0gJ2VsZW1lbnQnOgorICAgICAgICAgICAgbmFtZSA9IE5vbmUKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gTm9uZQorCisgICAgICAgICAgICBmb3IgZTIgaW4gZS5jaGlsZE5vZGVzOgorICAgICAgICAgICAgICAgIGlmIGUyLm5vZGVUeXBlID09IGUyLkVMRU1FTlRfTk9ERSBhbmQgZTIubG9jYWxOYW1lID09ICduYW1lJzoKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGUyLmNoaWxkTm9kZXNbMF0ubm9kZVZhbHVlLmVuY29kZSgiVVRGLTgiKQorICAgICAgICAgICAgICAgIGVsaWYgZTIubm9kZVR5cGUgPT0gZTIuRUxFTUVOVF9OT0RFIGFuZCBlMi5sb2NhbE5hbWUgPT0gJ2Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICAgICAgICAgICAgaWYgZTIuY2hpbGROb2RlczoKKyAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGUyLmNoaWxkTm9kZXNbMF0ubm9kZVZhbHVlLmVuY29kZSgiVVRGLTgiKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gJ05vIGRlc2NyaXB0aW9uJworCisgICAgICAgICAgICBpZiBuYW1lICE9IE5vbmUgYW5kIGRlc2NyaXB0aW9uICE9IE5vbmU6CisgICAgICAgICAgICAgICAgZWxlbWVudHNbbmFtZV0gPSB7J2Rlc2NyaXB0aW9uJzogZGVzY3JpcHRpb259CisKKyAgICByZXR1cm4gZWxlbWVudHMKKworZGVmIG1haW4oKToKKyAgICBpZiBub3QgbGVuKHN5cy5hcmd2KSA9PSAzOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdQbGVhc2Ugc3BlY2lmeSB0aGUgaW5zcGVjdC8gZGlyIGFuZCB0aGUgdG1wbC8gZGlyJykKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGluc3BlY3RkaXIgPSBzeXMuYXJndlsxXQorICAgIHRtcGxkaXIgPSBzeXMuYXJndlsyXQorCisgICAgIyBwYXJzZSBhbGwgLnhtbCBmaWxlczsgYnVpbGQgbWFwIG9mIGVsZW1lbnQgbmFtZSAtPiBzaG9ydCBkZXNjCisgICAgI2ZvciBmaWxlIGluIGdsb2IuZ2xvYigiaW5zcGVjdC9wbHVnaW4tKi54bWwiKToKKyAgICBlbGVtZW50cyA9IHt9CisgICAgZm9yIGZpbGUgaW4gZ2xvYi5nbG9iKCIlcy9wbHVnaW4tKi54bWwiICUgaW5zcGVjdGRpcik6CisgICAgICAgIGVsZW1lbnRzLnVwZGF0ZShnZXRfZWxlbWVudHMoZmlsZSkpCisKKyAgICBmb3IgZmlsZSBpbiBnbG9iLmdsb2IoIiVzL2VsZW1lbnQtKi5zZ21sIiAlIHRtcGxkaXIpOgorICAgICAgICBiYXNlID0gb3MucGF0aC5iYXNlbmFtZShmaWxlKQorICAgICAgICBlbGVtZW50ID0gYmFzZVtsZW4oImVsZW1lbnQtIik6LWxlbigiLnNnbWwiKV0KKyAgICAgICAgdG1wbCA9IFRtcGwoZmlsZSkKKyAgICAgICAgdG1wbC5yZWFkKCkKKyAgICAgICAgaWYgZWxlbWVudCBpbiBlbGVtZW50cy5rZXlzKCk6CisgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGVsZW1lbnRzW2VsZW1lbnRdWydkZXNjcmlwdGlvbiddCisgICAgICAgICAgICB0bXBsLnNldF9zZWN0aW9uKCJTaG9ydF9EZXNjcmlwdGlvbiIsICIlc1xuXG4iICUgZGVzY3JpcHRpb24pCisKKyAgICAgICAgIyBwdXQgaW4gYW4gaW5jbHVkZSBpZiBub3QgeWV0IHRoZXJlCisgICAgICAgIGxpbmUgPSAnPGluY2x1ZGUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9IicgKyBcCisgICAgICAgICAgICAnZWxlbWVudC0nICsgZWxlbWVudCArICctZGV0YWlscy54bWwiPicgKyBcCisgICAgICAgICAgICAnPGZhbGxiYWNrIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiAvPicgKyBcCisgICAgICAgICAgICAnPC9pbmNsdWRlPlxuJworICAgICAgICBzZWN0aW9uID0gdG1wbC5nZXRfc2VjdGlvbigiTG9uZ19EZXNjcmlwdGlvbiIpCisgICAgICAgIGlmIG5vdCBzZWN0aW9uWzBdICA9PSBsaW5lOgorICAgICAgICAgICAgc2VjdGlvbi5pbnNlcnQoMCwgbGluZSkKKyAgICAgICAgdG1wbC5zZXRfc2VjdGlvbigiTG9uZ19EZXNjcmlwdGlvbiIsIHNlY3Rpb24pCisgICAgICAgIHRtcGwud3JpdGUoKQorCittYWluKCkKZGlmZiAtLWdpdCBhL2NvbW1vbi9vcmMubWFrIGIvY29tbW9uL29yYy5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIzMmI1ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9vcmMubWFrCkBAIC0wLDAgKzEsNzYgQEAKKyMKKyMgVGhpcyBpcyBhIG1ha2VmaWxlLmFtIGZyYWdtZW50IHRvIGJ1aWxkIE9yYyBjb2RlLgorIworIyBEZWZpbmUgT1JDX1NPVVJDRSBhbmQgdGhlbiBpbmNsdWRlIHRoaXMgZmlsZSwgc3VjaCBhczoKKyMKKyMgIE9SQ19TT1VSQ0U9Z3N0YWRkZXJvcmMKKyMgIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb21tb24vb3JjLm1haworIworIyBUaGlzIGZyYWdtZW50IHdpbGwgY3JlYXRlIHRtcC1vcmMuYyBhbmQgZ3N0YWRkZXJvcmMuaCBmcm9tCisjIGdzdGFkZGVyb3JjLm9yYy4KKyMKKyMgV2hlbiAnbWFrZSBkaXN0JyBpcyBydW4gYXQgdGhlIHRvcCBsZXZlbCwgb3IgJ21ha2Ugb3JjLXVwZGF0ZScKKyMgaW4gYSBkaXJlY3RvcnkgaW5jbHVkaW5nIHRoaXMgZnJhZ21lbnQsIHRoZSBnZW5lcmF0ZWQgc291cmNlIAorIyBmaWxlcyB3aWxsIGJlIGNvcGllZCB0byAkKE9SQ19TT1VSQ0UpLWRpc3QuW2NoXS4gIFRoZXNlIGZpbGVzCisjIHNob3VsZCBiZSBjaGVja2VkIGluIHRvIGdpdCwgc2luY2UgdGhleSBhcmUgdXNlZCBpZiBPcmMgaXMKKyMgZGlzYWJsZWQuCisjIAorIyBOb3RlIHRoYXQgdGhpcyBmaWxlIGRlZmluZXMgQlVJTFRfU09VUkNFUywgc28gYW55IGxhdGVyIHVzYWdlCisjIG9mIEJVSUxUX1NPVVJDRVMgaW4gdGhlIE1ha2VmaWxlLmFtIHRoYXQgaW5jbHVkZXMgdGhpcyBmaWxlCisjIG11c3QgdXNlICcrPScuCisjCisKKworRVhUUkFfRElTVCA9ICQoT1JDX1NPVVJDRSkub3JjCisKK09SQ19OT0RJU1RfU09VUkNFUyA9IHRtcC1vcmMuYyAkKE9SQ19TT1VSQ0UpLmgKK0JVSUxUX1NPVVJDRVMgPSB0bXAtb3JjLmMgJChPUkNfU09VUkNFKS5oCisKKworb3JjLXVwZGF0ZTogdG1wLW9yYy5jICQoT1JDX1NPVVJDRSkuaAorCSQodG9wX3NyY2RpcikvY29tbW9uL2dzdC1pbmRlbnQgdG1wLW9yYy5jCisJY3AgdG1wLW9yYy5jICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuYworCWNwICQoT1JDX1NPVVJDRSkuaCAkKHNyY2RpcikvJChPUkNfU09VUkNFKS1kaXN0LmgKKworb3JjY192X2dlbiA9ICQob3JjY192X2dlbl8kKFYpKQorb3JjY192X2dlbl8gPSAkKG9yY2Nfdl9nZW5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCitvcmNjX3ZfZ2VuXzAgPSBAZWNobyAiICBPUkNDICAgJEAiOworCitjcF92X2dlbiA9ICQoY3Bfdl9nZW5fJChWKSkKK2NwX3ZfZ2VuXyA9ICQoY3Bfdl9nZW5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCitjcF92X2dlbl8wID0gQGVjaG8gIiAgQ1AgICAgICRAIjsKKworaWYgSEFWRV9PUkNDCit0bXAtb3JjLmM6ICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLm9yYworCSQob3JjY192X2dlbikkKE9SQ0MpICQoT1JDQ19GTEFHUykgLS1pbXBsZW1lbnRhdGlvbiAtLWluY2x1ZGUgZ2xpYi5oIC1vIHRtcC1vcmMuYyAkKHNyY2RpcikvJChPUkNfU09VUkNFKS5vcmMKKworJChPUkNfU09VUkNFKS5oOiAkKHNyY2RpcikvJChPUkNfU09VUkNFKS5vcmMKKwkkKG9yY2Nfdl9nZW4pJChPUkNDKSAkKE9SQ0NfRkxBR1MpIC0taGVhZGVyIC0taW5jbHVkZSBnbGliLmggLW8gJChPUkNfU09VUkNFKS5oICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLm9yYworZWxzZQordG1wLW9yYy5jOiAkKHNyY2RpcikvJChPUkNfU09VUkNFKS5vcmMgJChzcmNkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5jCisJJChjcF92X2dlbiljcCAkKHNyY2RpcikvJChPUkNfU09VUkNFKS1kaXN0LmMgdG1wLW9yYy5jCisKKyQoT1JDX1NPVVJDRSkuaDogJChzcmNkaXIpLyQoT1JDX1NPVVJDRSkub3JjICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuYworCSQoY3Bfdl9nZW4pY3AgJChzcmNkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5oICQoT1JDX1NPVVJDRSkuaAorZW5kaWYKKworY2xlYW4tbG9jYWw6IGNsZWFuLW9yYworLlBIT05ZOiBjbGVhbi1vcmMKK2NsZWFuLW9yYzoKKwlybSAtZiB0bXAtb3JjLmMgJChPUkNfU09VUkNFKS5oCisKK2Rpc3QtaG9vazogZGlzdC1ob29rLW9yYworLlBIT05ZOiBkaXN0LWhvb2stb3JjCisKKyMgd2UgdHJ5IGFuZCBjb3B5IHVwZGF0ZWQgb3JjIC1kaXN0IGZpbGVzIGJlbG93LCBidXQgZG9uJ3QgZmFpbCBpZiBpdAorIyBkb2Vzbid0IHdvcmsgYXMgdGhlIHNyY2RpciBtaWdodCBub3QgYmUgd3JpdGFibGUKK2Rpc3QtaG9vay1vcmM6IHRtcC1vcmMuYyAkKE9SQ19TT1VSQ0UpLmgKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nc3QtaW5kZW50IHRtcC1vcmMuYworCXJtIC1mIHRtcC1vcmMuY34KKwljbXAgLXMgdG1wLW9yYy5jICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuYyB8fCBcCisJICBjcCB0bXAtb3JjLmMgJChzcmNkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5jIHx8IHRydWUKKwljbXAgLXMgJChPUkNfU09VUkNFKS5oICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuaCB8fCBcCisJICBjcCAkKE9SQ19TT1VSQ0UpLmggJChzcmNkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5oIHx8IHRydWUKKwljcCAtcCB0bXAtb3JjLmMgJChkaXN0ZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuYworCWNwIC1wICQoT1JDX1NPVVJDRSkuaCAkKGRpc3RkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5oCisKZGlmZiAtLWdpdCBhL2NvbW1vbi9wYXJhbGxlbC1zdWJkaXJzLm1hayBiL2NvbW1vbi9wYXJhbGxlbC1zdWJkaXJzLm1hawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjg4NWRmCi0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uL3BhcmFsbGVsLXN1YmRpcnMubWFrCkBAIC0wLDAgKzEsMTMgQEAKKyMgaW5jbHVkZSB0aGlzIGF0IHRoZSBlbmQgb2YgJE1PRFVMRS9leHQvTWFrZWZpbGUuYW0gdG8gZm9yY2UgbWFrZSB0bworIyBidWlsZCBzdWJkaXJlY3RvcmllcyBpbiBwYXJhbGxlbCB3aGVuIG1ha2UgLWpOIGlzIHVzZWQuIFdlIHdpbGwgZW5kIHVwCisjIGRlc2NlbmRpbmcgaW50byBhbGwgc3ViZGlyZWN0b3JpZXMgYSBzZWNvbmQgdGltZSwgYnV0IG9ubHkgYWZ0ZXIgdGhlIGZpcnN0CisjIChwYXJhbGxlbCkgcnVuIGhhcyBmaW5pc2hlZCwgc28gaXQgc2hvdWxkIGdvIHJpZ2h0IHRocm91Z2ggdGhlIHNlY29uZCB0aW1lLgorCisuUEhPTlk6IGluZGVwZW5kZW50LXN1YmRpcnMgJChTVUJESVJTKQorCitpbmRlcGVuZGVudC1zdWJkaXJzOiAkKFNVQkRJUlMpCisKKyQoU1VCRElSUyk6CisJJChNQUtFKSAtQyAkQAorCithbGwtcmVjdXJzaXZlOiBpbmRlcGVuZGVudC1zdWJkaXJzCmRpZmYgLS1naXQgYS9jb21tb24vcGx1Z2lucy54c2wgYi9jb21tb24vcGx1Z2lucy54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA1MTViNgotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9wbHVnaW5zLnhzbApAQCAtMCwwICsxLDIwOSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJz8+IDwhLS0qLSBtb2RlOiB4bWwgLSotLT4KKworPHhzbDpzdHlsZXNoZWV0CisgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorICB4bWxuczpleHNsPSJodHRwOi8vZXhzbHQub3JnL2NvbW1vbiIKKyAgeG1sbnM6c3RyPSJodHRwOi8vZXhzbHQub3JnL3N0cmluZ3MiCisgIGV4dGVuc2lvbi1lbGVtZW50LXByZWZpeGVzPSJleHNsIHN0ciIKKyAgdmVyc2lvbj0iMS4wIj4KKzx4c2w6b3V0cHV0IG1ldGhvZD0ieG1sIiBpbmRlbnQ9InllcyIKKyAgICAgICAgICAgIGRvY3R5cGUtcHVibGljID0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgorICAgICAgICAgICAgZG9jdHlwZS1zeXN0ZW0gPSAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiLz4KKworPHhzbDpwYXJhbSBuYW1lPSJtb2R1bGUiIC8+CisKKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWxlbWVudCI+CisgICAgPHhzbDplbGVtZW50IG5hbWU9InZhcmxpc3RlbnRyeSI+CisgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idGVybSI+CisgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJsaW5rIj4KKyAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJsaW5rZW5kIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJG1vZHVsZSIgLz4tcGx1Z2lucy08eHNsOnZhbHVlLW9mIHNlbGVjdD0ibmFtZSIvPjwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ibmFtZSIgLz4KKyAgICAgICAgPC94c2w6ZWxlbWVudD4KKyAgICAgIDwveHNsOmVsZW1lbnQ+CisgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0ibGlzdGl0ZW0iPgorICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0ic2ltcGFyYSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImRlc2NyaXB0aW9uIiAvPjwveHNsOmVsZW1lbnQ+CisgICAgICA8L3hzbDplbGVtZW50PgorICAgIDwveHNsOmVsZW1lbnQ+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJuYW1lIj48eHNsOmNvcHktb2Ygc2VsZWN0PSJuYW1lIi8+PC94c2w6dmFyaWFibGU+CisgICAgPCEtLSBoZXJlIHdlIHdyaXRlIGFuIGVsZW1lbnQtKG5hbWUpLWRldGFpbHMueG1sIGZpbGUgZm9yIHRoZSBlbGVtZW50IC0tPgorICAgIDxleHNsOmRvY3VtZW50IGhyZWY9Intjb25jYXQgKCd4bWwvZWxlbWVudC0nLCAkbmFtZSwgJy1kZXRhaWxzLnhtbCcpfSIgbWV0aG9kPSJ4bWwiIGluZGVudD0ieWVzIj4KKworICAgICAgPHhzbDplbGVtZW50IG5hbWU9InJlZnN5bm9wc2lzZGl2Ij4KKyAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InJlZnNlY3QyIj4KKyAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idGl0bGUiPkVsZW1lbnQgSW5mb3JtYXRpb248L3hzbDplbGVtZW50PgorICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ2YXJpYWJsZWxpc3QiPgorCisgICAgICAgICAgICA8IS0tIHBsdWdpbiBuYW1lIGFuZCBsaW5rIC0tPgorICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InZhcmxpc3RlbnRyeSI+CisgICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ0ZXJtIj5wbHVnaW48L3hzbDplbGVtZW50PgorICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0ibGlzdGl0ZW0iPgorICAgICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJzaW1wYXJhIj4KKyAgICAgICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJsaW5rIj4KKyAgICAgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0ibGlua2VuZCI+cGx1Z2luLTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLi8uLi9uYW1lIi8+PC94c2w6YXR0cmlidXRlPgorICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi4vLi4vbmFtZSIgLz4KKyAgICAgICAgICAgICAgICAgIDwveHNsOmVsZW1lbnQ+CisgICAgICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KKyAgICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KKyAgICAgICAgICAgIDwveHNsOmVsZW1lbnQ+CisKKyAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ2YXJsaXN0ZW50cnkiPgorICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idGVybSI+YXV0aG9yPC94c2w6ZWxlbWVudD4KKyAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9Imxpc3RpdGVtIj4KKyAgICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0ic2ltcGFyYSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImF1dGhvciIgLz48L3hzbDplbGVtZW50PgorICAgICAgICAgICAgICA8L3hzbDplbGVtZW50PgorICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KKworICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InZhcmxpc3RlbnRyeSI+CisgICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ0ZXJtIj5jbGFzczwveHNsOmVsZW1lbnQ+CisgICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJsaXN0aXRlbSI+CisgICAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InNpbXBhcmEiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjbGFzcyIgLz48L3hzbDplbGVtZW50PgorICAgICAgICAgICAgICA8L3hzbDplbGVtZW50PgorICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KKworICAgICAgICAgIDwveHNsOmVsZW1lbnQ+IDwhLS0gdmFyaWFibGVsaXN0IC0tPgorICAgICAgICA8L3hzbDplbGVtZW50PiA8IS0tIHJlZnNlY3QyIC0tPgorCisgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJyZWZzZWN0MiI+CisgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InRpdGxlIj5FbGVtZW50IFBhZHM8L3hzbDplbGVtZW50PgorICAgICAgICAgIDwhLS0gcHJvY2VzcyBhbGwgY2FwcyAtLT4KKyAgICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0icGFkcy9jYXBzIj4KKyAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ2YXJpYWJsZWxpc3QiPgorICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idmFybGlzdGVudHJ5Ij4KKyAgICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idGVybSI+bmFtZTwveHNsOmVsZW1lbnQ+CisgICAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9Imxpc3RpdGVtIj4KKyAgICAgICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJzaW1wYXJhIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0ibmFtZSIgLz48L3hzbDplbGVtZW50PgorICAgICAgICAgICAgICAgIDwveHNsOmVsZW1lbnQ+CisgICAgICAgICAgICAgIDwveHNsOmVsZW1lbnQ+CisKKyAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InZhcmxpc3RlbnRyeSI+CisgICAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InRlcm0iPmRpcmVjdGlvbjwveHNsOmVsZW1lbnQ+CisgICAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9Imxpc3RpdGVtIj4KKyAgICAgICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJzaW1wYXJhIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iZGlyZWN0aW9uIiAvPjwveHNsOmVsZW1lbnQ+CisgICAgICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KKyAgICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KKworICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idmFybGlzdGVudHJ5Ij4KKyAgICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idGVybSI+cHJlc2VuY2U8L3hzbDplbGVtZW50PgorICAgICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJsaXN0aXRlbSI+CisgICAgICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0ic2ltcGFyYSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InByZXNlbmNlIiAvPjwveHNsOmVsZW1lbnQ+CisgICAgICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KKyAgICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KKworICAgICAgICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0nc3RyOnRva2VuaXplKGRldGFpbHMsICI7IiknPgorICAgICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ2YXJsaXN0ZW50cnkiPgorICAgICAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3Q9InBvc2l0aW9uKCk9MSI+ZGV0YWlsczwveHNsOmlmPgorICAgICAgICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KKyAgICAgICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJsaXN0aXRlbSI+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJzaW1wYXJhIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0nLicvPjwveHNsOmVsZW1lbnQ+CisgICAgICAgICAgICAgICAgICA8L3hzbDplbGVtZW50PgorICAgICAgICAgICAgICAgIDwveHNsOmVsZW1lbnQ+CisgICAgICAgICAgICAgIDwveHNsOmZvci1lYWNoPgorCisgICAgICAgICAgICA8L3hzbDplbGVtZW50PiA8IS0tIHZhcmlhYmxlbGlzdCAtLT4KKworICAgICAgICAgICAgPCEtLXhzbDplbGVtZW50IG5hbWU9InByb2dyYW1saXN0aW5nIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iZGV0YWlscyIgLz48L3hzbDplbGVtZW50LS0+CisKKyAgICAgICAgICA8L3hzbDpmb3ItZWFjaD4KKyAgICAgICAgPC94c2w6ZWxlbWVudD4gPCEtLSByZWZzZWN0MiAtLT4KKyAgICAgIDwveHNsOmVsZW1lbnQ+IDwhLS0gcmVmc3lub3BzaXNkaXYgLS0+CisKKyAgICA8L2V4c2w6ZG9jdW1lbnQ+CisgIDwveHNsOnRlbXBsYXRlPgorCisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9InBsdWdpbiI+CisgICAgPHhzbDplbGVtZW50IG5hbWU9InJlZmVudHJ5Ij4KKyAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImlkIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJG1vZHVsZSIgLz4tcGx1Z2lucy1wbHVnaW4tPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Im5hbWUiLz48L3hzbDphdHRyaWJ1dGU+CisKKyAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJyZWZtZXRhIj4KKyAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InJlZmVudHJ5dGl0bGUiPgorICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJuYW1lIi8+CisgICAgICAgIDwveHNsOmVsZW1lbnQ+CisgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJtYW52b2xudW0iPjM8L3hzbDplbGVtZW50PgorICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0icmVmbWlzY2luZm8iPkZJWE1FIExpYnJhcnk8L3hzbDplbGVtZW50PgorICAgICAgPC94c2w6ZWxlbWVudD4gPCEtLSByZWZtZXRhIC0tPgorCisgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0icmVmbmFtZWRpdiI+CisgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJyZWZuYW1lIj4KKyAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ibmFtZSIvPgorICAgICAgICA8L3hzbDplbGVtZW50PgorCisgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJyZWZwdXJwb3NlIj4KKyAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0iYW5jaG9yIj4KKyAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImlkIj5wbHVnaW4tPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Im5hbWUiLz48L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgPC94c2w6ZWxlbWVudD4KKyAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iZGVzY3JpcHRpb24iLz4KKyAgICAgICAgPC94c2w6ZWxlbWVudD4KKyAgICAgIDwveHNsOmVsZW1lbnQ+CisKKyAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJyZWZzZWN0MSI+CisgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ0aXRsZSI+UGx1Z2luIEluZm9ybWF0aW9uPC94c2w6ZWxlbWVudD4KKyAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InZhcmlhYmxlbGlzdCI+CisKKyAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idmFybGlzdGVudHJ5Ij4KKyAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ0ZXJtIj5maWxlbmFtZTwveHNsOmVsZW1lbnQ+CisgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0ibGlzdGl0ZW0iPgorICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0ic2ltcGFyYSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImJhc2VuYW1lIiAvPjwveHNsOmVsZW1lbnQ+CisgICAgICAgICAgICA8L3hzbDplbGVtZW50PgorICAgICAgICAgIDwveHNsOmVsZW1lbnQ+CisKKyAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idmFybGlzdGVudHJ5Ij4KKyAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ0ZXJtIj52ZXJzaW9uPC94c2w6ZWxlbWVudD4KKyAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJsaXN0aXRlbSI+CisgICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJzaW1wYXJhIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0idmVyc2lvbiIgLz48L3hzbDplbGVtZW50PgorICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KKyAgICAgICAgICA8L3hzbDplbGVtZW50PgorCisgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InZhcmxpc3RlbnRyeSI+CisgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwveHNsOmVsZW1lbnQ+CisgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0ibGlzdGl0ZW0iPgorICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0ic2ltcGFyYSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImxpY2Vuc2UiIC8+PC94c2w6ZWxlbWVudD4KKyAgICAgICAgICAgIDwveHNsOmVsZW1lbnQ+CisgICAgICAgICAgPC94c2w6ZWxlbWVudD4KKworICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ2YXJsaXN0ZW50cnkiPgorICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InRlcm0iPnBhY2thZ2U8L3hzbDplbGVtZW50PgorICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9Imxpc3RpdGVtIj4KKyAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InNpbXBhcmEiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJwYWNrYWdlIiAvPjwveHNsOmVsZW1lbnQ+CisgICAgICAgICAgICA8L3hzbDplbGVtZW50PgorICAgICAgICAgIDwveHNsOmVsZW1lbnQ+CisKKyAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idmFybGlzdGVudHJ5Ij4KKyAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ0ZXJtIj5vcmlnaW48L3hzbDplbGVtZW50PgorICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9Imxpc3RpdGVtIj4KKyAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InNpbXBhcmEiPgorICAgICAgICAgICAgICAgIDwhLS0gb25seSBzaG93IG9yaWdpbiBhcyBsaW5rIGlmIGl0IHN0YXJ0cyB3aXRoIGh0dHAgLS0+CisgICAgICAgICAgICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0ic3Vic3RyaW5nKEBocmVmLCAxLCA0KSA9ICdodHRwJyI+CisgICAgICAgICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ1bGluayI+CisgICAgICAgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0idXJsIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0ib3JpZ2luIiAvPjwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ib3JpZ2luIiAvPgorICAgICAgICAgICAgICAgICAgICA8L3hzbDplbGVtZW50PgorICAgICAgICAgICAgICAgICAgPC94c2w6d2hlbj4KKyAgICAgICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPgorICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ib3JpZ2luIiAvPgorICAgICAgICAgICAgICAgICAgPC94c2w6b3RoZXJ3aXNlPgorICAgICAgICAgICAgICAgIDwveHNsOmNob29zZT4KKyAgICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KKyAgICAgICAgICAgIDwveHNsOmVsZW1lbnQ+CisgICAgICAgICAgPC94c2w6ZWxlbWVudD4KKworICAgICAgICA8L3hzbDplbGVtZW50PgorICAgICAgPC94c2w6ZWxlbWVudD4KKworICAgICAgPHhzbDplbGVtZW50IG5hbWU9InJlZnNlY3QxIj4KKyAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InRpdGxlIj5FbGVtZW50czwveHNsOmVsZW1lbnQ+CisgICAgICAgIDwhLS0gcHJvY2VzcyBhbGwgZWxlbWVudHMgLS0+CisgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ2YXJpYWJsZWxpc3QiPgorICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iZWxlbWVudHMiLz4KKyAgICAgICAgPC94c2w6ZWxlbWVudD4KKyAgICAgIDwveHNsOmVsZW1lbnQ+CisKKyAgICA8L3hzbDplbGVtZW50PgorCisgIDwveHNsOnRlbXBsYXRlPgorCisgIDwhLS0gaWdub3JlIC0tPgorICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJnc3QtcGx1Z2luLXBhdGhzIiAvPgorCis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvY29tbW9uL3BvLm1hayBiL2NvbW1vbi9wby5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAxOWZhYwotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9wby5tYWsKQEAgLTAsMCArMSw0IEBACisjIHJ1bGUgdG8gZG93bmxvYWQgdGhlIGxhdGVzdCAucG8gZmlsZXMKK2Rvd25sb2FkLXBvOiAkKHRvcF9zcmNkaXIpL2NvbW1vbi9kb3dubG9hZC10cmFuc2xhdGlvbnMKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9kb3dubG9hZC10cmFuc2xhdGlvbnMgJChQQUNLQUdFKQorCmRpZmYgLS1naXQgYS9jb21tb24vcmVsZWFzZS5tYWsgYi9jb21tb24vcmVsZWFzZS5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE5YjdkNQotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9yZWxlYXNlLm1hawpAQCAtMCwwICsxLDI1IEBACisjIGluY2x1ZGUgdGhpcyBzbmlwcGV0IHRvIGFkZCBhIGNvbW1vbiByZWxlYXNlOiB0YXJnZXQgYnkgdXNpbmcKKyMgaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9yZWxlYXNlLm1haworCisjIG1ha2UgYnoyIGFzIHdlbGwKK0FVVE9NQUtFX09QVElPTlMgPSBkaXN0LWJ6aXAyCisKK3JlbGVhc2U6IGRpc3QKKwkkKE1BS0UpICQoUEFDS0FHRSktJChWRVJTSU9OKS50YXIuZ3oubWQ1CisJJChNQUtFKSAkKFBBQ0tBR0UpLSQoVkVSU0lPTikudGFyLmJ6Mi5tZDUKKworIyBnZW5lcmF0ZSBtZDUgc3VtIGZpbGVzCislLm1kNTogJQorCW1kNXN1bSAkPCA+ICRACisKKyMgY2hlY2sgdGhhdCBubyBtYXJzaGFsIG9yIGVudW10eXBlcyBmaWxlcyBhcmUgaW5jbHVkZWQKKyMgdGhpcyBpbiB0dXJuIGVuc3VyZXMgdGhhdCBkaXN0Y2hlY2sgZmFpbHMgZm9yIG1pc3NpbmcgLmxpc3QgZmlsZXMgd2hpY2ggaXMgY3VycmVudGx5CisjIHNoYWRvd2VkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgLmMgYW5kIC5oIGZpbGVzIGFyZSBpbmNsdWRlZC4KK2Rpc3RjaGVjay1ob29rOgorCUB0ZXN0ICJ4IiA9ICJ4YGZpbmQgJChkaXN0ZGlyKSAtbmFtZSBcKi1lbnVtdHlwZXMuW2NoXSB8IGdyZXAgLXYgd2luMzJgIiAmJiBcCisJdGVzdCAieCIgPSAieGBmaW5kICQoZGlzdGRpcikgLW5hbWUgXCotbWFyc2hhbC5bY2hdYCIgfHwgXAorCSggJChFQ0hPKSAiKioqIExlZnRvdmVyIGVudW10eXBlcyBvciBtYXJzaGFsIGZpbGVzIGluIHRoZSB0YXJiYWxsLiIgJiYgXAorCSAgJChFQ0hPKSAiKioqIE1ha2Ugc3VyZSB0aGUgZm9sbG93aW5nIGZpbGVzIGFyZSBub3QgZGlzdGVkOiIgJiYgXAorCSAgZmluZCAkKGRpc3RkaXIpIC1uYW1lIFwqLWVudW10eXBlcy5bY2hdIHwgZ3JlcCAtdiB3aW4zMiAmJiBcCisJICBmaW5kICQoZGlzdGRpcikgLW5hbWUgXCotbWFyc2hhbC5bY2hdICYmIFwKKwkgIGZhbHNlICkKZGlmZiAtLWdpdCBhL2NvbW1vbi9zY2FuZ29iai1tZXJnZS5weSBiL2NvbW1vbi9zY2FuZ29iai1tZXJnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45YTFjYWM5Ci0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uL3NjYW5nb2JqLW1lcmdlLnB5CkBAIC0wLDAgKzEsMzA5IEBACisjIS91c3IvYmluL3B5dGhvbgorIyAtKi0gTW9kZTogUHl0aG9uIC0qLQorIyB2aTpzaTpldDpzdz00OnN0cz00OnRzPTQKKworIiIiCitwYXJzZSwgbWVyZ2UgYW5kIHdyaXRlIGdzdGRvYy1zY2Fub2JqIGZpbGVzCisiIiIKKworaW1wb3J0IHN5cworaW1wb3J0IG9zCisKK2RlZiBkZWJ1ZygqYXJncyk6CisgICAgcGFzcworCisjIE9yZGVyZWREaWN0IGNsYXNzIGJhc2VkIG9uCisjIGh0dHA6Ly9hc3BuLmFjdGl2ZXN0YXRlLmNvbS9BU1BOL0Nvb2tib29rL1B5dGhvbi9SZWNpcGUvMTA3NzQ3CisjIExpY2Vuc2VkIHVuZGVyIHRoZSBQeXRob24gTGljZW5zZQorY2xhc3MgT3JkZXJlZERpY3QoZGljdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9rZXlzID0gW10KKyAgICAgICAgZGljdC5fX2luaXRfXyhzZWxmKQorCisgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIGRpY3QuX19kZWxpdGVtX18oc2VsZiwga2V5KQorICAgICAgICBzZWxmLl9rZXlzLnJlbW92ZShrZXkpCisKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCBpdGVtKToKKyAgICAgICAgZGljdC5fX3NldGl0ZW1fXyhzZWxmLCBrZXksIGl0ZW0pCisgICAgICAgIGlmIGtleSBub3QgaW4gc2VsZi5fa2V5czogc2VsZi5fa2V5cy5hcHBlbmQoa2V5KQorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICBkaWN0LmNsZWFyKHNlbGYpCisgICAgICAgIHNlbGYuX2tleXMgPSBbXQorCisgICAgZGVmIGNvcHkoc2VsZik6CisgICAgICAgIGRpY3QgPSBkaWN0LmNvcHkoc2VsZikKKyAgICAgICAgZGljdC5fa2V5cyA9IHNlbGYuX2tleXNbOl0KKyAgICAgICAgcmV0dXJuIGRpY3QKKworICAgIGRlZiBpdGVtcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHppcChzZWxmLl9rZXlzLCBzZWxmLnZhbHVlcygpKQorCisgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9rZXlzCisKKyAgICBkZWYgcG9waXRlbShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5ID0gc2VsZi5fa2V5c1stMV0KKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcignZGljdGlvbmFyeSBpcyBlbXB0eScpCisKKyAgICAgICAgdmFsID0gc2VsZltrZXldCisgICAgICAgIGRlbCBzZWxmW2tleV0KKworICAgICAgICByZXR1cm4gKGtleSwgdmFsKQorCisgICAgZGVmIHNldGRlZmF1bHQoc2VsZiwga2V5LCBmYWlsb2JqID0gTm9uZSk6CisgICAgICAgIGRpY3Quc2V0ZGVmYXVsdChzZWxmLCBrZXksIGZhaWxvYmopCisgICAgICAgIGlmIGtleSBub3QgaW4gc2VsZi5fa2V5czogc2VsZi5fa2V5cy5hcHBlbmQoa2V5KQorCisgICAgZGVmIHVwZGF0ZShzZWxmLCBkaWN0KToKKyAgICAgICAgZGljdC51cGRhdGUoc2VsZiwgZGljdCkKKyAgICAgICAgZm9yIGtleSBpbiBkaWN0LmtleXMoKToKKyAgICAgICAgICAgIGlmIGtleSBub3QgaW4gc2VsZi5fa2V5czogc2VsZi5fa2V5cy5hcHBlbmQoa2V5KQorCisgICAgZGVmIHZhbHVlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIG1hcChzZWxmLmdldCwgc2VsZi5fa2V5cykKKworY2xhc3MgT2JqZWN0OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5fc2lnbmFscyA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgc2VsZi5fYXJncyA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjxPYmplY3QgJXM+IiAlIHNlbGYubmFtZQorCisgICAgZGVmIGFkZF9zaWduYWwoc2VsZiwgc2lnbmFsLCBvdmVyd3JpdGU9VHJ1ZSk6CisgICAgICAgIGlmIG5vdCBvdmVyd3JpdGUgYW5kIHNlbGYuX3NpZ25hbHMuaGFzX2tleShzaWduYWwubmFtZSk6CisgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yLCAic2lnbmFsICVzIGFscmVhZHkgaW4gJXIiICUgKHNpZ25hbC5uYW1lLCBzZWxmKQorICAgICAgICBzZWxmLl9zaWduYWxzW3NpZ25hbC5uYW1lXSA9IHNpZ25hbAorCisgICAgZGVmIGFkZF9hcmcoc2VsZiwgYXJnLCBvdmVyd3JpdGU9VHJ1ZSk6CisgICAgICAgIGlmIG5vdCBvdmVyd3JpdGUgYW5kIHNlbGYuX2FyZ3MuaGFzX2tleShhcmcubmFtZSk6CisgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yLCAiYXJnICVzIGFscmVhZHkgaW4gJXIiICUgKGFyZy5uYW1lLCBzZWxmKQorICAgICAgICBzZWxmLl9hcmdzW2FyZy5uYW1lXSA9IGFyZworCitjbGFzcyBEb2NhYmxlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIGZvciBrZXkgaW4gc2VsZi5hdHRyczoKKyAgICAgICAgICAgIHNldGF0dHIoc2VsZiwga2V5LCBrd2FyZ3Nba2V5XSkKKyAgICAgICAgc2VsZi5kaWN0ID0ga3dhcmdzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPCVyICVzPiIgJSAoc3RyKHNlbGYuX19jbGFzc19fKSwgc2VsZi5uYW1lKQorCitjbGFzcyBTaWduYWwoRG9jYWJsZSk6CisgICAgYXR0cnMgPSBbJ25hbWUnLCAncmV0dXJucycsICdhcmdzJ10KKworY2xhc3MgQXJnKERvY2FibGUpOgorICAgIGF0dHJzID0gWyduYW1lJywgJ3R5cGUnLCAncmFuZ2UnLCAnZmxhZ3MnLCAnbmljaycsICdibHVyYicsICdkZWZhdWx0J10KKworY2xhc3MgR0RvYzoKKyAgICBkZWYgbG9hZF9maWxlKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbGluZXMgPSBvcGVuKGZpbGVuYW1lKS5yZWFkbGluZXMoKQorICAgICAgICAgICAgc2VsZi5sb2FkX2RhdGEoIiIuam9pbihsaW5lcykpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgcHJpbnQgIldBUk5JTkcgLSBjb3VsZCBub3QgcmVhZCBmcm9tICVzIiAlIGZpbGVuYW1lCisKKyAgICBkZWYgc2F2ZV9maWxlKHNlbGYsIGZpbGVuYW1lLCBiYWNrdXA9RmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgU2F2ZSB0aGUgaW5mb3JtYXRpb24gdG8gdGhlIGdpdmVuIGZpbGUgaWYgdGhlIGZpbGUgY29udGVudCBjaGFuZ2VkLgorICAgICAgICAiIiIKKyAgICAgICAgb2xkZGF0YSA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbGluZXMgPSBvcGVuKGZpbGVuYW1lKS5yZWFkbGluZXMoKQorICAgICAgICAgICAgb2xkZGF0YSA9ICIiLmpvaW4obGluZXMpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgcHJpbnQgIldBUk5JTkcgLSBjb3VsZCBub3QgcmVhZCBmcm9tICVzIiAlIGZpbGVuYW1lCisgICAgICAgIG5ld2RhdGEgPSBzZWxmLmdldF9kYXRhKCkKKyAgICAgICAgaWYgb2xkZGF0YSBhbmQgb2xkZGF0YSA9PSBuZXdkYXRhOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgb2xkZGF0YToKKyAgICAgICAgICAgIGlmIGJhY2t1cDoKKyAgICAgICAgICAgICAgICBvcy5yZW5hbWUoZmlsZW5hbWUsIGZpbGVuYW1lICsgJy5iYWsnKQorCisgICAgICAgIGhhbmRsZSA9IG9wZW4oZmlsZW5hbWUsICJ3IikKKyAgICAgICAgaGFuZGxlLndyaXRlKG5ld2RhdGEpCisgICAgICAgIGhhbmRsZS5jbG9zZSgpCisKK2NsYXNzIFNpZ25hbHMoR0RvYyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9vYmplY3RzID0gT3JkZXJlZERpY3QoKQorCisgICAgZGVmIGxvYWRfZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiCisgICAgICAgIExvYWQgdGhlIC5zaWduYWxzIGxpbmVzLCBjcmVhdGluZyBvdXIgbGlzdCBvZiBvYmplY3RzIGFuZCBzaWduYWxzLgorICAgICAgICAiIiIKKyAgICAgICAgaW1wb3J0IHJlCisgICAgICAgIHNtYXRjaGVyID0gcmUuY29tcGlsZSgKKyAgICAgICAgICAgICcoP3MpJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtYWtlIC4gbWF0Y2ggXG4KKyAgICAgICAgICAgICc8U0lHTkFMPlxuKC4qPyk8L1NJR05BTD5cbicKKyAgICAgICAgICAgICkKKyAgICAgICAgbm1hdGNoZXIgPSByZS5jb21waWxlKAorICAgICAgICAgICAgJzxOQU1FPicKKyAgICAgICAgICAgICcoP1A8b2JqZWN0PlxTKiknICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzdG9yZSBvYmplY3QKKyAgICAgICAgICAgICc6OicKKyAgICAgICAgICAgICcoP1A8c2lnbmFsPlxTKiknICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzdG9yZSBzaWduYWwKKyAgICAgICAgICAgICc8L05BTUU+JworICAgICAgICApCisgICAgICAgIHJtYXRjaGVyID0gcmUuY29tcGlsZSgKKyAgICAgICAgICAgICcoP3MpJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtYWtlIC4gbWF0Y2ggXG4KKyAgICAgICAgICAgICc8UkVUVVJOUz4oP1A8cmV0dXJucz5cUyopPC9SRVRVUk5TPlxuJyAgICAgIyBzdG9yZSByZXR1cm5zCisgICAgICAgICAgICAnKD9QPGFyZ3M+LiopJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3RvcmUgYXJncworICAgICAgICApCisgICAgICAgIGZvciBibG9jayBpbiBzbWF0Y2hlci5maW5kYWxsKGRhdGEpOgorICAgICAgICAgICAgbm1hdGNoID0gbm1hdGNoZXIuc2VhcmNoKGJsb2NrKQorICAgICAgICAgICAgaWYgbm1hdGNoOgorICAgICAgICAgICAgICAgIG8gPSBubWF0Y2guZ3JvdXAoJ29iamVjdCcpCisgICAgICAgICAgICAgICAgZGVidWcoIkZvdW5kIG9iamVjdCIsIG8pCisgICAgICAgICAgICAgICAgZGVidWcoIkZvdW5kIHNpZ25hbCIsIG5tYXRjaC5ncm91cCgnc2lnbmFsJykpCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX29iamVjdHMuaGFzX2tleShvKToKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0ID0gT2JqZWN0KG8pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX29iamVjdHNbb10gPSBvYmplY3QKKworICAgICAgICAgICAgICAgIHJtYXRjaCA9IHJtYXRjaGVyLnNlYXJjaChibG9jaykKKyAgICAgICAgICAgICAgICBpZiBybWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIGRpY3QgPSBybWF0Y2guZ3JvdXBkaWN0KCkuY29weSgpCisgICAgICAgICAgICAgICAgICAgIGRpY3RbJ25hbWUnXSA9IG5tYXRjaC5ncm91cCgnc2lnbmFsJykKKyAgICAgICAgICAgICAgICAgICAgc2lnbmFsID0gU2lnbmFsKCoqZGljdCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fb2JqZWN0c1tvXS5hZGRfc2lnbmFsKHNpZ25hbCkKKworICAgIGRlZiBnZXRfZGF0YShzZWxmKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBmb3IgbyBpbiBzZWxmLl9vYmplY3RzLnZhbHVlcygpOgorICAgICAgICAgICAgZm9yIHMgaW4gby5fc2lnbmFscy52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICBibG9jayA9ICIiIjxTSUdOQUw+Cis8TkFNRT4lKG9iamVjdClzOjolKG5hbWUpczwvTkFNRT4KKzxSRVRVUk5TPiUocmV0dXJucylzPC9SRVRVUk5TPgorJShhcmdzKXM8L1NJR05BTD4KKyIiIgorICAgICAgICAgICAgICAgIGQgPSBzLmRpY3QuY29weSgpCisgICAgICAgICAgICAgICAgZFsnb2JqZWN0J10gPSBvLm5hbWUKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoYmxvY2sgJSBkKQorCisgICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpICsgJ1xuJworCitjbGFzcyBBcmdzKEdEb2MpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fb2JqZWN0cyA9IE9yZGVyZWREaWN0KCkKKworICAgIGRlZiBsb2FkX2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIgorICAgICAgICBMb2FkIHRoZSAuYXJncyBsaW5lcywgY3JlYXRpbmcgb3VyIGxpc3Qgb2Ygb2JqZWN0cyBhbmQgYXJncy4KKyAgICAgICAgIiIiCisgICAgICAgIGltcG9ydCByZQorICAgICAgICBhbWF0Y2hlciA9IHJlLmNvbXBpbGUoCisgICAgICAgICAgICAnKD9zKScgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbWFrZSAuIG1hdGNoIFxuCisgICAgICAgICAgICAnPEFSRz5cbiguKj8pPC9BUkc+XG4nCisgICAgICAgICAgICApCisgICAgICAgIG5tYXRjaGVyID0gcmUuY29tcGlsZSgKKyAgICAgICAgICAgICc8TkFNRT4nCisgICAgICAgICAgICAnKD9QPG9iamVjdD5cUyopJyAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3RvcmUgb2JqZWN0CisgICAgICAgICAgICAnOjonCisgICAgICAgICAgICAnKD9QPGFyZz5cUyopJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3RvcmUgYXJnCisgICAgICAgICAgICAnPC9OQU1FPicKKyAgICAgICAgKQorICAgICAgICBybWF0Y2hlciA9IHJlLmNvbXBpbGUoCisgICAgICAgICAgICAnKD9zKScgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbWFrZSAuIG1hdGNoIFxuCisgICAgICAgICAgICAnPFRZUEU+KD9QPHR5cGU+XFMqKTwvVFlQRT5cbicgICAgICAgICAgICAgICMgc3RvcmUgdHlwZQorICAgICAgICAgICAgJzxSQU5HRT4oP1A8cmFuZ2U+Lio/KTwvUkFOR0U+XG4nICAgICAgICAgICAjIHN0b3JlIHJhbmdlCisgICAgICAgICAgICAnPEZMQUdTPig/UDxmbGFncz5cUyopPC9GTEFHUz5cbicgICAgICAgICAgICMgc3RvcmUgZmxhZ3MKKyAgICAgICAgICAgICc8TklDSz4oP1A8bmljaz4uKj8pPC9OSUNLPlxuJyAgICAgICAgICAgICAgIyBzdG9yZSBuaWNrCisgICAgICAgICAgICAnPEJMVVJCPig/UDxibHVyYj4uKj8pPC9CTFVSQj5cbicgICAgICAgICAgICMgc3RvcmUgYmx1cmIKKyAgICAgICAgICAgICc8REVGQVVMVD4oP1A8ZGVmYXVsdD4uKj8pPC9ERUZBVUxUPlxuJyAgICAgIyBzdG9yZSBkZWZhdWx0CisgICAgICAgICkKKyAgICAgICAgZm9yIGJsb2NrIGluIGFtYXRjaGVyLmZpbmRhbGwoZGF0YSk6CisgICAgICAgICAgICBubWF0Y2ggPSBubWF0Y2hlci5zZWFyY2goYmxvY2spCisgICAgICAgICAgICBpZiBubWF0Y2g6CisgICAgICAgICAgICAgICAgbyA9IG5tYXRjaC5ncm91cCgnb2JqZWN0JykKKyAgICAgICAgICAgICAgICBkZWJ1ZygiRm91bmQgb2JqZWN0IiwgbykKKyAgICAgICAgICAgICAgICBkZWJ1ZygiRm91bmQgYXJnIiwgbm1hdGNoLmdyb3VwKCdhcmcnKSkKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fb2JqZWN0cy5oYXNfa2V5KG8pOgorICAgICAgICAgICAgICAgICAgICBvYmplY3QgPSBPYmplY3QobykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fb2JqZWN0c1tvXSA9IG9iamVjdAorCisgICAgICAgICAgICAgICAgcm1hdGNoID0gcm1hdGNoZXIuc2VhcmNoKGJsb2NrKQorICAgICAgICAgICAgICAgIGlmIHJtYXRjaDoKKyAgICAgICAgICAgICAgICAgICAgZGljdCA9IHJtYXRjaC5ncm91cGRpY3QoKS5jb3B5KCkKKyAgICAgICAgICAgICAgICAgICAgZGljdFsnbmFtZSddID0gbm1hdGNoLmdyb3VwKCdhcmcnKQorICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmcoKipkaWN0KQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9vYmplY3RzW29dLmFkZF9hcmcoYXJnKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJFUlJPUjogY291bGQgbm90IG1hdGNoIGFyZyBmcm9tIGJsb2NrICVzIiAlIGJsb2NrCisKKyAgICBkZWYgZ2V0X2RhdGEoc2VsZik6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgZm9yIG8gaW4gc2VsZi5fb2JqZWN0cy52YWx1ZXMoKToKKyAgICAgICAgICAgIGZvciBhIGluIG8uX2FyZ3MudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgYmxvY2sgPSAiIiI8QVJHPgorPE5BTUU+JShvYmplY3Qpczo6JShuYW1lKXM8L05BTUU+Cis8VFlQRT4lKHR5cGUpczwvVFlQRT4KKzxSQU5HRT4lKHJhbmdlKXM8L1JBTkdFPgorPEZMQUdTPiUoZmxhZ3MpczwvRkxBR1M+Cis8TklDSz4lKG5pY2spczwvTklDSz4KKzxCTFVSQj4lKGJsdXJiKXM8L0JMVVJCPgorPERFRkFVTFQ+JShkZWZhdWx0KXM8L0RFRkFVTFQ+Cis8L0FSRz4KKyIiIgorICAgICAgICAgICAgICAgIGQgPSBhLmRpY3QuY29weSgpCisgICAgICAgICAgICAgICAgZFsnb2JqZWN0J10gPSBvLm5hbWUKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoYmxvY2sgJSBkKQorCisgICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpICsgJ1xuJworCitjbGFzcyBTaW5nbGVMaW5lKEdEb2MpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fb2JqZWN0cyA9IFtdCisKKyAgICBkZWYgbG9hZF9kYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgTG9hZCB0aGUgLmludGVyZmFjZXMvLnByZXJlcXVpc2l0ZXMgbGluZXMsIG1lcmdlIGR1cGxpY2F0ZXMKKyAgICAgICAgIiIiCisgICAgICAgICMgc3BsaXQgZGF0YSBvbiAnXG4nCisgICAgICAgIGxpbmVzID0gZGF0YS5zcGxpdGxpbmVzKCk7CisgICAgICAgICMgbWVyZ2UgdGhlbSBpbnRvIHNlbGYuX29iamVjdHMKKyAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICBpZiBsaW5lIG5vdCBpbiBzZWxmLl9vYmplY3RzOgorICAgICAgICAgICAgICAgIHNlbGYuX29iamVjdHMuYXBwZW5kKGxpbmUpCisKKyAgICBkZWYgZ2V0X2RhdGEoc2VsZik6CisgICAgICAgIGxpbmVzID0gc29ydGVkKHNlbGYuX29iamVjdHMpCisgICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpICsgJ1xuJworCitkZWYgbWFpbihhcmd2KToKKyAgICBtb2R1bGVuYW1lID0gTm9uZQorICAgIHRyeToKKyAgICAgICAgbW9kdWxlbmFtZSA9IGFyZ3ZbMV0KKyAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnUGxlYXNlIHByb3ZpZGUgYSBkb2N1bWVudGF0aW9uIG1vZHVsZSBuYW1lXG4nKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgc2lnbmFscyA9IFNpZ25hbHMoKQorICAgIHNpZ25hbHMubG9hZF9maWxlKG1vZHVsZW5hbWUgKyAnLnNpZ25hbHMnKQorICAgIHNpZ25hbHMubG9hZF9maWxlKG1vZHVsZW5hbWUgKyAnLnNpZ25hbHMubmV3JykKKyAgICBzaWduYWxzLnNhdmVfZmlsZShtb2R1bGVuYW1lICsgJy5zaWduYWxzJywgYmFja3VwPVRydWUpCisgICAgb3MudW5saW5rKG1vZHVsZW5hbWUgKyAnLnNpZ25hbHMubmV3JykKKworICAgIGFyZ3MgPSBBcmdzKCkKKyAgICBhcmdzLmxvYWRfZmlsZShtb2R1bGVuYW1lICsgJy5hcmdzJykKKyAgICBhcmdzLmxvYWRfZmlsZShtb2R1bGVuYW1lICsgJy5hcmdzLm5ldycpCisgICAgYXJncy5zYXZlX2ZpbGUobW9kdWxlbmFtZSArICcuYXJncycsIGJhY2t1cD1UcnVlKQorICAgIG9zLnVubGluayhtb2R1bGVuYW1lICsgJy5hcmdzLm5ldycpCisKKyAgICBpZmFjZXMgPSBTaW5nbGVMaW5lKCkKKyAgICBpZmFjZXMubG9hZF9maWxlKG1vZHVsZW5hbWUgKyAnLmludGVyZmFjZXMnKQorICAgIGlmYWNlcy5sb2FkX2ZpbGUobW9kdWxlbmFtZSArICcuaW50ZXJmYWNlcy5uZXcnKQorICAgIGlmYWNlcy5zYXZlX2ZpbGUobW9kdWxlbmFtZSArICcuaW50ZXJmYWNlcycsIGJhY2t1cD1UcnVlKQorICAgIG9zLnVubGluayhtb2R1bGVuYW1lICsgJy5pbnRlcmZhY2VzLm5ldycpCisKKyAgICBwcmVyZXEgPSBTaW5nbGVMaW5lKCkKKyAgICBwcmVyZXEubG9hZF9maWxlKG1vZHVsZW5hbWUgKyAnLnByZXJlcXVpc2l0ZXMnKQorICAgIHByZXJlcS5sb2FkX2ZpbGUobW9kdWxlbmFtZSArICcucHJlcmVxdWlzaXRlcy5uZXcnKQorICAgIHByZXJlcS5zYXZlX2ZpbGUobW9kdWxlbmFtZSArICcucHJlcmVxdWlzaXRlcycsIGJhY2t1cD1UcnVlKQorICAgIG9zLnVubGluayhtb2R1bGVuYW1lICsgJy5wcmVyZXF1aXNpdGVzLm5ldycpCisKK21haW4oc3lzLmFyZ3YpCmRpZmYgLS1naXQgYS9jb21tb24vdXBsb2FkLWRvYy5tYWsgYi9jb21tb24vdXBsb2FkLWRvYy5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JmOTQ5NgotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi91cGxvYWQtZG9jLm1hawpAQCAtMCwwICsxLDY2IEBACisjIHRoaXMgc25pcHBldCBpcyB0byBiZSBpbmNsdWRlZCBieSBib3RoIG91ciBkb2Nib29rIG1hbnVhbHMKKyMgYW5kIGd0ay1kb2MgQVBJIHJlZmVyZW5jZXMKKworIyBpdCBhZGRzIGFuIHVwbG9hZCB0YXJnZXQgdG8gZWFjaCBvZiB0aGVzZSBkaXIncyBNYWtlZmlsZXMKKworIyBlYWNoIE1ha2VmaWxlLmFtIHNob3VsZCBkZWZpbmUgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CisjIC0gRE9DOiB0aGUgYmFzZSBuYW1lIG9mIHRoZSBkb2N1bWVudGF0aW9uCisjICAgICAgICAoZmFxLCBtYW51YWwsIHB3ZywgZ3N0cmVhbWVyLCBnc3RyZWFtZXItbGlicykKKyMgLSBGT1JNQVRTOiB0aGUgZm9ybWF0cyBpbiB3aGljaCBET0MgaXMgb3V0cHV0CisjICAgICAgICAgICAgKGh0bWwgcHMgcGRmKQorCisjIGlmIHlvdSB3YW50IHRvIHVzZSBpdCwgbWFrZSBzdXJlIHlvdXIgJEhPTUUvLnNzaC9jb25maWcgZmlsZSBjb250YWlucyB0aGUKKyMgY29ycmVjdCBVc2VyIGVudHJ5IGZvciB0aGUgSG9zdCBlbnRyeSBmb3IgdGhlIERPQ19TRVJWRVIKKworIyB0aGVzZSB2YXJpYWJsZXMgZGVmaW5lIHRoZSBsb2NhdGlvbiBvZiB0aGUgb25saW5lIGRvY3MKK0RPQ19TRVJWRVIgPSBnc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnCitET0NfQkFTRSA9IC9zcnYvZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy93d3cvZGF0YS9kb2MKK0RPQ19VUkwgPSAkKERPQ19TRVJWRVIpOiQoRE9DX0JBU0UpCisKK3VwbG9hZDogJChGT1JNQVRTKQorCUBpZiBlY2hvICQoRk9STUFUUykgfCBncmVwIGh0bWwgPiAvZGV2L251bGw7IHRoZW4gXAorCSAgZWNobyAiUHJlcGFyaW5nIGRvY3MgZm9yIHVwbG9hZCAocmViYXNpbmcgY3Jvc3MtcmVmZXJlbmNlcykgLi4uIiA7IFwKKwkgIGlmIHRlc3QgeCQoYnVpbGRkaXIpICE9IHgkKHNyY2Rpcik7IHRoZW4gXAorCSAgICBlY2hvICJtYWtlIHVwbG9hZCBjYW4gb25seSBiZSB1c2VkIGlmIHNyY2RpciA9PSBidWlsZGRpciI7IFwKKwkgICAgZXhpdCAxOyBcCisJICBmaTsgXAorCSAgIyBndGtkb2MtcmViYXNlIHNvbWV0aW1lcyBnZXRzIGNvbmZ1c2VkLCBzbyByZXNldCBldmVyeXRoaW5nIHRvIFwKKwkgICMgbG9jYWwgbGlua3MgYmVmb3JlIHJlYmFzaW5nIHRvIG9ubGluZSBsaW5rcyAgICAgICAgICAgICAgICAgICBcCisJICBndGtkb2MtcmViYXNlIC0taHRtbC1kaXI9JChidWlsZGRpcikvaHRtbCAyPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCA7IFwKKwkgIHJlYmFzZT1gZ3RrZG9jLXJlYmFzZSAtLXZlcmJvc2UgLS1vbmxpbmUgLS1odG1sLWRpcj0kKGJ1aWxkZGlyKS9odG1sYCA7IFwKKwkgIGVjaG8gIiQkcmViYXNlIiB8IGdyZXAgLWUgIk9uLSpsaW5lIjsgXAorCSAgZm9yIHJlcSBpbiBnbGliIGdvYmplY3QgZ3N0cmVhbWVyIGdzdHJlYW1lci1saWJzIGdzdC1wbHVnaW5zLWJhc2UtbGliczsgZG8gXAorCSAgICBpZiAhICggZWNobyAiJCRyZWJhc2UiIHwgZ3JlcCAtaSAtZSAiT24tKmxpbmUuKi8kJHJlcS8iICk7IHRoZW4gXAorCSAgICAgIGVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iIDsgXAorCSAgICAgIGVjaG8gIiBDb3VsZCBub3QgZGV0ZXJtaW5lIG9ubGluZSBsb2NhdGlvbiBmb3IgJCRyZXEgZG9jcy4gQ3Jvc3MtcmVmZXJlbmNpbmcgd2lsbCBiZSAiIDsgXAorCSAgICAgIGVjaG8gIiBicm9rZW4sIHNvIG5vdCB1cGxvYWRpbmcuIE1ha2Ugc3VyZSB0aGUgbGlicmFyeSdzIGd0ay1kb2MgZG9jdW1lbnRhdGlvbiBpcyAgICAiIDsgXAorCSAgICAgIGVjaG8gIiBpbnN0YWxsZWQgc29tZXdoZXJlIGluIC91c3Ivc2hhcmUvZ3RrLWRvYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDsgXAorCSAgICAgIGVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iIDsgXAorCSAgICAgIGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgZG9uZTsgXAorCSAgZXhwb3J0IFNSQz0iJCRTUkMgaHRtbCI7IFwKKwlmaTsgXAorCWlmIGVjaG8gJChGT1JNQVRTKSB8IGdyZXAgcHMgPiAvZGV2L251bGw7IHRoZW4gZXhwb3J0IFNSQz0iJCRTUkMgJChET0MpLnBzIjsgZmk7IFwKKwlpZiBlY2hvICQoRk9STUFUUykgfCBncmVwIHBkZiA+IC9kZXYvbnVsbDsgdGhlbiBleHBvcnQgU1JDPSIkJFNSQyAkKERPQykucGRmIjsgZmk7IFwKKwlcCisJIyB1cGxvYWQgcmVsZWFzZXMgdG8gYm90aCAwLjEwLlgvIGFuZCBoZWFkLyBzdWJkaXJlY3RvcmllcyBcCisJaWYgdGVzdCAieCQoUEFDS0FHRV9WRVJTSU9OX05BTk8pIiA9IHgwOyB0aGVuIFwKKwkgIGV4cG9ydCBESVI9JChET0NfQkFTRSkvZ3N0cmVhbWVyLyQoVkVSU0lPTikvJChET0MpOyBcCisJICBlY2hvIFVwbG9hZGluZyAkJFNSQyB0byAkKERPQ19TRVJWRVIpOiQkRElSOyBcCisJICBzc2ggJChET0NfU0VSVkVSKSBta2RpciAtcCAkJERJUjsgXAorCSAgcnN5bmMgLXJ2IC1lIHNzaCAtLWRlbGV0ZSAkJFNSQyAkKERPQ19TRVJWRVIpOiQkRElSOyBcCisJICBzc2ggJChET0NfU0VSVkVSKSBjaG1vZCAtUiBnK3cgJCRESVI7IFwKKwlmaTsgXAorCVwKKwlleHBvcnQgRElSPSQoRE9DX0JBU0UpL2dzdHJlYW1lci9oZWFkLyQoRE9DKTsgXAorCWVjaG8gVXBsb2FkaW5nICQkU1JDIHRvICQoRE9DX1NFUlZFUik6JCRESVI7IFwKKwlzc2ggJChET0NfU0VSVkVSKSBta2RpciAtcCAkJERJUjsgXAorCXJzeW5jIC1ydiAtZSBzc2ggLS1kZWxldGUgJCRTUkMgJChET0NfU0VSVkVSKTokJERJUjsgXAorCXNzaCAkKERPQ19TRVJWRVIpIGNobW9kIC1SIGcrdyAkJERJUjsgXAorCVwKKwlpZiBlY2hvICQoRk9STUFUUykgfCBncmVwIGh0bWwgPiAvZGV2L251bGw7IHRoZW4gXAorCSAgZWNobyAiVW4tcHJlcGFyaW5nIGRvY3MgZm9yIHVwbG9hZCAocmViYXNpbmcgY3Jvc3MtcmVmZXJlbmNlcykgLi4uIiA7IFwKKwkgIGd0a2RvYy1yZWJhc2UgLS1odG1sLWRpcj0kKGJ1aWxkZGlyKS9odG1sIDsgXAorCWZpOyBcCisJZWNobyBEb25lCmRpZmYgLS1naXQgYS9jb21tb24vd2luMzIubWFrIGIvY29tbW9uL3dpbjMyLm1hawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGFmYWVjCi0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uL3dpbjMyLm1hawpAQCAtMCwwICsxLDcyIEBACisjIHZhcmlvdXMgdGVzdHMgdG8gbWFrZSBzdXJlIHdlIGRpc3QgdGhlIHdpbjMyIHN0dWZmIChmb3IgTVNWQyBidWlsZHMpIHJpZ2h0CisKKyMgdGhlIE1BTklGRVNUIGNvbnRhaW5zIGFsbCB3aW4zMiByZWxhdGVkIGZpbGVzIHRoYXQgc2hvdWxkIGJlIGRpc3RlZAord2luMzIgPSAkKHNoZWxsIGNhdCAkKHRvcF9zcmNkaXIpL3dpbjMyL01BTklGRVNUKQorCisjIHdpbGRjYXJkIGlzIGFwcGFyZW50bHkgbm90IHBvcnRhYmxlIHRvIG90aGVyIG1ha2VzLCBoZW5jZSB0aGUgdXNlIG9mIGZpbmQKKyMgdGhlc2UgYXJlIGxpYnJhcnkgLmRlZiBmaWxlcyB3aXRoIHRoZSBzeW1ib2xzIHRvIGV4cG9ydAord2luMzJkZWZzID0gJChzaGVsbCBmaW5kICQodG9wX3NyY2Rpcikvd2luMzIvY29tbW9uIC1uYW1lICcqLmRlZicpCisKKyMgd2lsZGNhcmQgaXMgYXBwYXJlbnRseSBub3QgcG9ydGFibGUgdG8gb3RoZXIgbWFrZXMsIGhlbmNlIHRoZSB1c2Ugb2YgZmluZAorIyB0aGVzZSBhcmUgZmlsZXMgdGhhdCBuZWVkIHRvIGJlIGRpc3RlZCB3aXRoIENSTEYgbGluZSBlbmRpbmdzOgord2luMzJjcmxmID0gJChzaGVsbCBmaW5kICQodG9wX3NyY2Rpcikvd2luMzIgLW5hbWUgJyouZHN3JyAtbyAtbmFtZSAnKi5kc3AnKQorCit3aW4zMi1kZWJ1ZzoKKwlAZWNobzsgXAorCWVjaG8gd2luMzIgICAgID0gJCh3aW4zMik7IFwKKwllY2hvOyBcCisJZWNobyB3aW4zMmRlZnMgPSAkKHdpbjMyZGVmcyk7IFwKKwllY2hvOyBcCisJZWNobyB3aW4zMmNybGYgPSAkKHdpbjMyY3JsZik7IFwKKwllY2hvCisKK3dpbjMyLWNoZWNrLWNybGY6CisJQGVjaG8gQ2hlY2tpbmcgd2luMzIgZmlsZXMgZm9yIENSIExGIGxpbmUgZW5kaW5ncyAuLi47IFwKKwlmYWlsPTAgOyBcCisJZm9yIGVhY2ggaW4gJCh3aW4zMmNybGYpIDsgZG8gXAorCSAgcmVzdWx0PWBwZXJsIC1lICdwcmludCBncmVwKC9cclxuLyw8PiknICIkJGVhY2giIHwgd2MgLWxgOyBcCisJICBpZiB0ZXN0ICIkJHJlc3VsdCIgPSAwIDsgdGhlbiBcCisJICAgIGVjaG8gJCRlYWNoIG11c3QgYmUgZml4ZWQgdG8gaGF2ZSBDUkxGIGxpbmUgZW5kaW5ncyA7IFwKKwkgICAgZmFpbD0xOyBcCisJICBmaSA7IFwKKwlkb25lIDsgXAorCWV4aXQgJCRmYWlsCisKKyMgbWFrZSBzdXJlIGFsbCBzeW1ib2xzIHdlIGV4cG9ydCBvbiBsaW51eCBhcmUgZGVmaW5lZCBpbiB0aGUgd2luMzIgLmRlZiB0b28KKyMgKGRvbid0IGNhcmUgYWJvdXQgb3RoZXIgdW5peGVzIGZvciBub3csIGl0J3MgZW5vdWdoIGlmIGl0IHdvcmtzIG9uIG9uZSBvZgorIyB0aGUgbGludXggYnVpbGQgYm90czsgd2UgYXNzdW1lIC5zbyApCitjaGVjay1leHBvcnRzOgorCUBmYWlsPTAgOyBcCisJZm9yIGwgaW4gJCh3aW4zMmRlZnMpOyBkbyBcCisJICBsaWJiYXNlPWBiYXNlbmFtZSAiJCRsIiAiLmRlZiJgOyBcCisJICBsaWJzbz1gZmluZCAiJCh0b3BfYnVpbGRkaXIpIiAtbmFtZSAiJCRsaWJiYXNlLUBHU1RfTUFKT1JNSU5PUkAuc28iIHwgZ3JlcCAtdiAvX2J1aWxkLyB8IGhlYWQgLW4xYDsgXAorCSAgbGliZGVmPSIkKHRvcF9zcmNkaXIpL3dpbjMyL2NvbW1vbi8kJGxpYmJhc2UuZGVmIjsgXAorCSAgaWYgdGVzdCAieCQkbGlic28iICE9ICJ4IjsgdGhlbiBcCisJICAgIGVjaG8gQ2hlY2tpbmcgc3ltYm9scyBpbiAkJGxpYnNvOyBcCisJICAgIGlmICEgKCQodG9wX3NyY2RpcikvY29tbW9uL2NoZWNrLWV4cG9ydHMgJCRsaWJkZWYgJCRsaWJzbykgOyB0aGVuIFwKKwkgICAgICBmYWlsPTE7IFwKKwkgICAgZmk7IFwKKwkgIGZpOyBcCisJZG9uZSA7IFwKKwlpZiB0ZXN0ICQkZmFpbCAhPSAwOyB0aGVuIFwKKwkgIGVjaG8gJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJzsgXAorCSAgZWNobyAnUnVuIHRoaXMgdG8gdXBkYXRlIHRoZSAuZGVmIGZpbGVzOic7IFwKKwkgIGVjaG8gJ21ha2UgY2hlY2stZXhwb3J0cyAyPiYxIHwgcGF0Y2ggLXAxJzsgXAorCSAgZWNobyAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nOyBcCisJZmk7IFwKKwlleGl0ICQkZmFpbAorCisjIGNvbXBsYWluIGFib3V0IG5vbnBvcnRhYmxlIHByaW50ZiBmb3JtYXQgc3RyaW5ncyAoJWxsZCwgJWxsdSwgJXp1IGV0Yy4pCitjaGVjay1ub25wb3J0YWJsZS1wcmludC1mb3JtYXQ6CisJQGZhaWw9MCA7IFwKKwlsb2M9YGZpbmQgIiQodG9wX3NyY2RpcikiIC1uYW1lICcqLmMnIHwgeGFyZ3MgZ3JlcCAtbiAtZSAnJVswLTldKmxsW3VkeF0nIC1lICclWzAtOV0qelt1ZHhdJ2A7IFwKKwlpZiB0ZXN0ICJ4JCRsb2MiICE9ICJ4IjsgdGhlbiBcCisJICBlY2hvICJQbGVhc2UgZml4IHRoZSBmb2xsb3dpbmcgcHJpbnQgZm9ybWF0IHN0cmluZ3M6IiA7IFwKKwkgIGZpbmQgIiQodG9wX3NyY2RpcikiIC1uYW1lICcqLmMnIHwgeGFyZ3MgZ3JlcCAtbiAtZSAnJVswLTldKmxsW3VkeF0nIC1lICclWzAtOV0qelt1ZHhdJzsgXAorCSAgZmFpbD0xOyBcCisJZmk7IFwKKwlleGl0ICQkZmFpbAorCitkaXN0LWhvb2s6IGNoZWNrLWV4cG9ydHMgd2luMzItY2hlY2stY3JsZgorCisKZGlmZiAtLWdpdCBhL2NvbXBpbGUgYi9jb21waWxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMwMDk2YTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb21waWxlCkBAIC0wLDAgKzEsMTQzIEBACisjISAvYmluL3NoCisjIFdyYXBwZXIgZm9yIGNvbXBpbGVycyB3aGljaCBkbyBub3QgdW5kZXJzdGFuZCBgLWMgLW8nLgorCitzY3JpcHR2ZXJzaW9uPTIwMDktMTAtMDYuMjA7ICMgVVRDCisKKyMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA5ICBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMgV3JpdHRlbiBieSBUb20gVHJvbWV5IDx0cm9tZXlAY3lnbnVzLmNvbT4uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworIyBUaGlzIGZpbGUgaXMgbWFpbnRhaW5lZCBpbiBBdXRvbWFrZSwgcGxlYXNlIHJlcG9ydAorIyBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4gb3Igc2VuZCBwYXRjaGVzIHRvCisjIDxhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmc+LgorCitjYXNlICQxIGluCisgICcnKQorICAgICBlY2hvICIkMDogTm8gY29tbWFuZC4gIFRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCisgICAgIGV4aXQgMTsKKyAgICAgOzsKKyAgLWggfCAtLWgqKQorICAgIGNhdCA8PFxFT0YKK1VzYWdlOiBjb21waWxlIFstLWhlbHBdIFstLXZlcnNpb25dIFBST0dSQU0gW0FSR1NdCisKK1dyYXBwZXIgZm9yIGNvbXBpbGVycyB3aGljaCBkbyBub3QgdW5kZXJzdGFuZCBgLWMgLW8nLgorUmVtb3ZlIGAtbyBkZXN0Lm8nIGZyb20gQVJHUywgcnVuIFBST0dSQU0gd2l0aCB0aGUgcmVtYWluaW5nCithcmd1bWVudHMsIGFuZCByZW5hbWUgdGhlIG91dHB1dCBhcyBleHBlY3RlZC4KKworSWYgeW91IGFyZSB0cnlpbmcgdG8gYnVpbGQgYSB3aG9sZSBwYWNrYWdlIHRoaXMgaXMgbm90IHRoZQorcmlnaHQgc2NyaXB0IHRvIHJ1bjogcGxlYXNlIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGZpbGUgYElOU1RBTEwnLgorCitSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LgorRU9GCisgICAgZXhpdCAkPworICAgIDs7CisgIC12IHwgLS12KikKKyAgICBlY2hvICJjb21waWxlICRzY3JpcHR2ZXJzaW9uIgorICAgIGV4aXQgJD8KKyAgICA7OworZXNhYworCitvZmlsZT0KK2NmaWxlPQorZWF0PQorCitmb3IgYXJnCitkbworICBpZiB0ZXN0IC1uICIkZWF0IjsgdGhlbgorICAgIGVhdD0KKyAgZWxzZQorICAgIGNhc2UgJDEgaW4KKyAgICAgIC1vKQorCSMgY29uZmlndXJlIG1pZ2h0IGNob29zZSB0byBydW4gY29tcGlsZSBhcyBgY29tcGlsZSBjYyAtbyBmb28gZm9vLmMnLgorCSMgU28gd2Ugc3RyaXAgYC1vIGFyZycgb25seSBpZiBhcmcgaXMgYW4gb2JqZWN0LgorCWVhdD0xCisJY2FzZSAkMiBpbgorCSAgKi5vIHwgKi5vYmopCisJICAgIG9maWxlPSQyCisJICAgIDs7CisJICAqKQorCSAgICBzZXQgeCAiJEAiIC1vICIkMiIKKwkgICAgc2hpZnQKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgICouYykKKwljZmlsZT0kMQorCXNldCB4ICIkQCIgIiQxIgorCXNoaWZ0CisJOzsKKyAgICAgICopCisJc2V0IHggIiRAIiAiJDEiCisJc2hpZnQKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgc2hpZnQKK2RvbmUKKworaWYgdGVzdCAteiAiJG9maWxlIiB8fCB0ZXN0IC16ICIkY2ZpbGUiOyB0aGVuCisgICMgSWYgbm8gYC1vJyBvcHRpb24gd2FzIHNlZW4gdGhlbiB3ZSBtaWdodCBoYXZlIGJlZW4gaW52b2tlZCBmcm9tIGEKKyAgIyBwYXR0ZXJuIHJ1bGUgd2hlcmUgd2UgZG9uJ3QgbmVlZCBvbmUuICBUaGF0IGlzIG9rIC0tIHRoaXMgaXMgYQorICAjIG5vcm1hbCBjb21waWxhdGlvbiB0aGF0IHRoZSBsb3NpbmcgY29tcGlsZXIgY2FuIGhhbmRsZS4gIElmIG5vCisgICMgYC5jJyBmaWxlIHdhcyBzZWVuIHRoZW4gd2UgYXJlIHByb2JhYmx5IGxpbmtpbmcuICBUaGF0IGlzIGFsc28KKyAgIyBvay4KKyAgZXhlYyAiJEAiCitmaQorCisjIE5hbWUgb2YgZmlsZSB3ZSBleHBlY3QgY29tcGlsZXIgdG8gY3JlYXRlLgorY29maWxlPWBlY2hvICIkY2ZpbGUiIHwgc2VkICdzfF4uKltcXC9dfHw7IHN8XlthLXpBLVpdOnx8OyBzL1wuYyQvLm8vJ2AKKworIyBDcmVhdGUgdGhlIGxvY2sgZGlyZWN0b3J5LgorIyBOb3RlOiB1c2UgYFsvXFw6Li1dJyBoZXJlIHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0IHVzZSB0aGUgc2FtZSBuYW1lCisjIHRoYXQgd2UgYXJlIHVzaW5nIGZvciB0aGUgLm8gZmlsZS4gIEFsc28sIGJhc2UgdGhlIG5hbWUgb24gdGhlIGV4cGVjdGVkCisjIG9iamVjdCBmaWxlIG5hbWUsIHNpbmNlIHRoYXQgaXMgd2hhdCBtYXR0ZXJzIHdpdGggYSBwYXJhbGxlbCBidWlsZC4KK2xvY2tkaXI9YGVjaG8gIiRjb2ZpbGUiIHwgc2VkIC1lICdzfFsvXFw6Li1dfF98ZydgLmQKK3doaWxlIHRydWU7IGRvCisgIGlmIG1rZGlyICIkbG9ja2RpciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgYnJlYWsKKyAgZmkKKyAgc2xlZXAgMQorZG9uZQorIyBGSVhNRTogcmFjZSBjb25kaXRpb24gaGVyZSBpZiB1c2VyIGtpbGxzIGJldHdlZW4gbWtkaXIgYW5kIHRyYXAuCit0cmFwICJybWRpciAnJGxvY2tkaXInOyBleGl0IDEiIDEgMiAxNQorCisjIFJ1biB0aGUgY29tcGlsZS4KKyIkQCIKK3JldD0kPworCitpZiB0ZXN0IC1mICIkY29maWxlIjsgdGhlbgorICB0ZXN0ICIkY29maWxlIiA9ICIkb2ZpbGUiIHx8IG12ICIkY29maWxlIiAiJG9maWxlIgorZWxpZiB0ZXN0IC1mICIke2NvZmlsZX1iaiI7IHRoZW4KKyAgdGVzdCAiJHtjb2ZpbGV9YmoiID0gIiRvZmlsZSIgfHwgbXYgIiR7Y29maWxlfWJqIiAiJG9maWxlIgorZmkKKworcm1kaXIgIiRsb2NrZGlyIgorZXhpdCAkcmV0CisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9jb25maWcuZ3Vlc3MgYi9jb25maWcuZ3Vlc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzIyNDZhNAotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy5ndWVzcwpAQCAtMCwwICsxLDE1MDIgQEAKKyMhIC9iaW4vc2gKKyMgQXR0ZW1wdCB0byBndWVzcyBhIGNhbm9uaWNhbCBzeXN0ZW0gbmFtZS4KKyMgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisjICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMAorIyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCit0aW1lc3RhbXA9JzIwMDktMTItMzAnCisKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyMgMDIxMTAtMTMwMSwgVVNBLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKworIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuICBQbGVhc2Ugc2VuZCBwYXRjaGVzIChjb250ZXh0CisjIGRpZmYgZm9ybWF0KSB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4gYW5kIGluY2x1ZGUgYSBDaGFuZ2VMb2cKKyMgZW50cnkuCisjCisjIFRoaXMgc2NyaXB0IGF0dGVtcHRzIHRvIGd1ZXNzIGEgY2Fub25pY2FsIHN5c3RlbSBuYW1lIHNpbWlsYXIgdG8KKyMgY29uZmlnLnN1Yi4gIElmIGl0IHN1Y2NlZWRzLCBpdCBwcmludHMgdGhlIHN5c3RlbSBuYW1lIG9uIHN0ZG91dCwgYW5kCisjIGV4aXRzIHdpdGggMC4gIE90aGVyd2lzZSwgaXQgZXhpdHMgd2l0aCAxLgorIworIyBZb3UgY2FuIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBzY3JpcHQgZnJvbToKKyMgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcztoYj1IRUFECisKK21lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnYAorCit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dCisKK091dHB1dCB0aGUgY29uZmlndXJhdGlvbiBuYW1lIG9mIHRoZSBzeXN0ZW0gXGAkbWUnIGlzIHJ1biBvbi4KKworT3BlcmF0aW9uIG1vZGVzOgorICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLXQsIC0tdGltZS1zdGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24sIHRoZW4gZXhpdAorICAtdiwgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorCitSZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uIgorCit2ZXJzaW9uPSJcCitHTlUgY29uZmlnLmd1ZXNzICgkdGltZXN0YW1wKQorCitPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuCitDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KK3dhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKKworaGVscD0iCitUcnkgXGAkbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisKKyMgUGFyc2UgY29tbWFuZCBsaW5lCit3aGlsZSB0ZXN0ICQjIC1ndCAwIDsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC0tdGltZS1zdGFtcCB8IC0tdGltZSogfCAtdCApCisgICAgICAgZWNobyAiJHRpbWVzdGFtcCIgOyBleGl0IDs7CisgICAgLS12ZXJzaW9uIHwgLXYgKQorICAgICAgIGVjaG8gIiR2ZXJzaW9uIiA7IGV4aXQgOzsKKyAgICAtLWhlbHAgfCAtLWgqIHwgLWggKQorICAgICAgIGVjaG8gIiR1c2FnZSI7IGV4aXQgOzsKKyAgICAtLSApICAgICAjIFN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKKyAgICAgICBzaGlmdDsgYnJlYWsgOzsKKyAgICAtICkJIyBVc2Ugc3RkaW4gYXMgaW5wdXQuCisgICAgICAgYnJlYWsgOzsKKyAgICAtKiApCisgICAgICAgZWNobyAiJG1lOiBpbnZhbGlkIG9wdGlvbiAkMSRoZWxwIiA+JjIKKyAgICAgICBleGl0IDEgOzsKKyAgICAqICkKKyAgICAgICBicmVhayA7OworICBlc2FjCitkb25lCisKK2lmIHRlc3QgJCMgIT0gMDsgdGhlbgorICBlY2hvICIkbWU6IHRvbyBtYW55IGFyZ3VtZW50cyRoZWxwIiA+JjIKKyAgZXhpdCAxCitmaQorCit0cmFwICdleGl0IDEnIDEgMiAxNQorCisjIENDX0ZPUl9CVUlMRCAtLSBjb21waWxlciB1c2VkIGJ5IHRoaXMgc2NyaXB0LiBOb3RlIHRoYXQgdGhlIHVzZSBvZiBhCisjIGNvbXBpbGVyIHRvIGFpZCBpbiBzeXN0ZW0gZGV0ZWN0aW9uIGlzIGRpc2NvdXJhZ2VkIGFzIGl0IHJlcXVpcmVzCisjIHRlbXBvcmFyeSBmaWxlcyB0byBiZSBjcmVhdGVkIGFuZCwgYXMgeW91IGNhbiBzZWUgYmVsb3csIGl0IGlzIGEKKyMgaGVhZGFjaGUgdG8gZGVhbCB3aXRoIGluIGEgcG9ydGFibGUgZmFzaGlvbi4KKworIyBIaXN0b3JpY2FsbHksIGBDQ19GT1JfQlVJTEQnIHVzZWQgdG8gYmUgbmFtZWQgYEhPU1RfQ0MnLiBXZSBzdGlsbAorIyB1c2UgYEhPU1RfQ0MnIGlmIGRlZmluZWQsIGJ1dCBpdCBpcyBkZXByZWNhdGVkLgorCisjIFBvcnRhYmxlIHRtcCBkaXJlY3RvcnkgY3JlYXRpb24gaW5zcGlyZWQgYnkgdGhlIEF1dG9jb25mIHRlYW0uCisKK3NldF9jY19mb3JfYnVpbGQ9JwordHJhcCAiZXhpdGNvZGU9XCQ/OyAocm0gLWYgXCR0bXBmaWxlcyAyPi9kZXYvbnVsbDsgcm1kaXIgXCR0bXAgMj4vZGV2L251bGwpICYmIGV4aXQgXCRleGl0Y29kZSIgMCA7Cit0cmFwICJybSAtZiBcJHRtcGZpbGVzIDI+L2Rldi9udWxsOyBybWRpciBcJHRtcCAyPi9kZXYvbnVsbDsgZXhpdCAxIiAxIDIgMTMgMTUgOworOiAke1RNUERJUj0vdG1wfSA7CisgeyB0bXA9YCh1bWFzayAwNzcgJiYgbWt0ZW1wIC1kICIkVE1QRElSL2NnWFhYWFhYIikgMj4vZGV2L251bGxgICYmIHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiIDsgfSB8fAorIHsgdGVzdCAtbiAiJFJBTkRPTSIgJiYgdG1wPSRUTVBESVIvY2ckJC0kUkFORE9NICYmICh1bWFzayAwNzcgJiYgbWtkaXIgJHRtcCkgOyB9IHx8CisgeyB0bXA9JFRNUERJUi9jZy0kJCAmJiAodW1hc2sgMDc3ICYmIG1rZGlyICR0bXApICYmIGVjaG8gIldhcm5pbmc6IGNyZWF0aW5nIGluc2VjdXJlIHRlbXAgZGlyZWN0b3J5IiA+JjIgOyB9IHx8CisgeyBlY2hvICIkbWU6IGNhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluICRUTVBESVIiID4mMiA7IGV4aXQgMSA7IH0gOworZHVtbXk9JHRtcC9kdW1teSA7Cit0bXBmaWxlcz0iJGR1bW15LmMgJGR1bW15Lm8gJGR1bW15LnJlbCAkZHVtbXkiIDsKK2Nhc2UgJENDX0ZPUl9CVUlMRCwkSE9TVF9DQywkQ0MgaW4KKyAsLCkgICAgZWNobyAiaW50IHg7IiA+ICRkdW1teS5jIDsKKwlmb3IgYyBpbiBjYyBnY2MgYzg5IGM5OSA7IGRvCisJICBpZiAoJGMgLWMgLW8gJGR1bW15Lm8gJGR1bW15LmMpID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKwkgICAgIENDX0ZPUl9CVUlMRD0iJGMiOyBicmVhayA7CisJICBmaSA7CisJZG9uZSA7CisJaWYgdGVzdCB4IiRDQ19GT1JfQlVJTEQiID0geCA7IHRoZW4KKwkgIENDX0ZPUl9CVUlMRD1ub19jb21waWxlcl9mb3VuZCA7CisJZmkKKwk7OworICwsKikgICBDQ19GT1JfQlVJTEQ9JENDIDs7CisgLCosKikgIENDX0ZPUl9CVUlMRD0kSE9TVF9DQyA7OworZXNhYyA7IHNldF9jY19mb3JfYnVpbGQ9IDsnCisKKyMgVGhpcyBpcyBuZWVkZWQgdG8gZmluZCB1bmFtZSBvbiBhIFB5cmFtaWQgT1N4IHdoZW4gcnVuIGluIHRoZSBCU0QgdW5pdmVyc2UuCisjIChnaGF6aUBub2MucnV0Z2Vycy5lZHUgMTk5NC0wOC0yNCkKK2lmICh0ZXN0IC1mIC8uYXR0YmluL3VuYW1lKSA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisJUEFUSD0kUEFUSDovLmF0dGJpbiA7IGV4cG9ydCBQQVRICitmaQorCitVTkFNRV9NQUNISU5FPWAodW5hbWUgLW0pIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9NQUNISU5FPXVua25vd24KK1VOQU1FX1JFTEVBU0U9YCh1bmFtZSAtcikgMj4vZGV2L251bGxgIHx8IFVOQU1FX1JFTEVBU0U9dW5rbm93bgorVU5BTUVfU1lTVEVNPWAodW5hbWUgLXMpIDI+L2Rldi9udWxsYCAgfHwgVU5BTUVfU1lTVEVNPXVua25vd24KK1VOQU1FX1ZFUlNJT049YCh1bmFtZSAtdikgMj4vZGV2L251bGxgIHx8IFVOQU1FX1ZFUlNJT049dW5rbm93bgorCisjIE5vdGU6IG9yZGVyIGlzIHNpZ25pZmljYW50IC0gdGhlIGNhc2UgYnJhbmNoZXMgYXJlIG5vdCBleGNsdXNpdmUuCisKK2Nhc2UgIiR7VU5BTUVfTUFDSElORX06JHtVTkFNRV9TWVNURU19OiR7VU5BTUVfUkVMRUFTRX06JHtVTkFNRV9WRVJTSU9OfSIgaW4KKyAgICAqOk5ldEJTRDoqOiopCisJIyBOZXRCU0QgKG5ic2QpIHRhcmdldHMgc2hvdWxkICh3aGVyZSBhcHBsaWNhYmxlKSBtYXRjaCBvbmUgb3IKKwkjIG1vcmUgb2YgdGhlIHR1cHBsZXM6ICotKi1uZXRic2RlbGYqLCAqLSotbmV0YnNkYW91dCosCisJIyAqLSotbmV0YnNkZWNvZmYqIGFuZCAqLSotbmV0YnNkKi4gIEZvciB0YXJnZXRzIHRoYXQgcmVjZW50bHkKKwkjIHN3aXRjaGVkIHRvIEVMRiwgKi0qLW5ldGJzZCogd291bGQgc2VsZWN0IHRoZSBvbGQKKwkjIG9iamVjdCBmaWxlIGZvcm1hdC4gIFRoaXMgcHJvdmlkZXMgYm90aCBmb3J3YXJkCisJIyBjb21wYXRpYmlsaXR5IGFuZCBhIGNvbnNpc3RlbnQgbWVjaGFuaXNtIGZvciBzZWxlY3RpbmcgdGhlCisJIyBvYmplY3QgZmlsZSBmb3JtYXQuCisJIworCSMgTm90ZTogTmV0QlNEIGRvZXNuJ3QgcGFydGljdWxhcmx5IGNhcmUgYWJvdXQgdGhlIHZlbmRvcgorCSMgcG9ydGlvbiBvZiB0aGUgbmFtZS4gIFdlIGFsd2F5cyBzZXQgaXQgdG8gInVua25vd24iLgorCXN5c2N0bD0ic3lzY3RsIC1uIGh3Lm1hY2hpbmVfYXJjaCIKKwlVTkFNRV9NQUNISU5FX0FSQ0g9YCgvc2Jpbi8kc3lzY3RsIDI+L2Rldi9udWxsIHx8IFwKKwkgICAgL3Vzci9zYmluLyRzeXNjdGwgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duKWAKKwljYXNlICIke1VOQU1FX01BQ0hJTkVfQVJDSH0iIGluCisJICAgIGFybWViKSBtYWNoaW5lPWFybWViLXVua25vd24gOzsKKwkgICAgYXJtKikgbWFjaGluZT1hcm0tdW5rbm93biA7OworCSAgICBzaDNlbCkgbWFjaGluZT1zaGwtdW5rbm93biA7OworCSAgICBzaDNlYikgbWFjaGluZT1zaC11bmtub3duIDs7CisJICAgIHNoNWVsKSBtYWNoaW5lPXNoNWxlLXVua25vd24gOzsKKwkgICAgKikgbWFjaGluZT0ke1VOQU1FX01BQ0hJTkVfQVJDSH0tdW5rbm93biA7OworCWVzYWMKKwkjIFRoZSBPcGVyYXRpbmcgU3lzdGVtIGluY2x1ZGluZyBvYmplY3QgZm9ybWF0LCBpZiBpdCBoYXMgc3dpdGNoZWQKKwkjIHRvIEVMRiByZWNlbnRseSwgb3Igd2lsbCBpbiB0aGUgZnV0dXJlLgorCWNhc2UgIiR7VU5BTUVfTUFDSElORV9BUkNIfSIgaW4KKwkgICAgYXJtKnxpMzg2fG02OGt8bnMzMmt8c2gzKnxzcGFyY3x2YXgpCisJCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJaWYgZWNobyBfX0VMRl9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKKwkJCXwgZ3JlcCAtcSBfX0VMRl9fCisJCXRoZW4KKwkJICAgICMgT25jZSBhbGwgdXRpbGl0aWVzIGNhbiBiZSBFQ09GRiAobmV0YnNkZWNvZmYpIG9yIGEub3V0IChuZXRic2Rhb3V0KS4KKwkJICAgICMgUmV0dXJuIG5ldGJzZCBmb3IgZWl0aGVyLiAgRklYPworCQkgICAgb3M9bmV0YnNkCisJCWVsc2UKKwkJICAgIG9zPW5ldGJzZGVsZgorCQlmaQorCQk7OworCSAgICAqKQorCSAgICAgICAgb3M9bmV0YnNkCisJCTs7CisJZXNhYworCSMgVGhlIE9TIHJlbGVhc2UKKwkjIERlYmlhbiBHTlUvTmV0QlNEIG1hY2hpbmVzIGhhdmUgYSBkaWZmZXJlbnQgdXNlcmxhbmQsIGFuZAorCSMgdGh1cywgbmVlZCBhIGRpc3RpbmN0IHRyaXBsZXQuIEhvd2V2ZXIsIHRoZXkgZG8gbm90IG5lZWQKKwkjIGtlcm5lbCB2ZXJzaW9uIGluZm9ybWF0aW9uLCBzbyBpdCBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhCisJIyBzdWl0YWJsZSB0YWcsIGluIHRoZSBzdHlsZSBvZiBsaW51eC1nbnUuCisJY2FzZSAiJHtVTkFNRV9WRVJTSU9OfSIgaW4KKwkgICAgRGViaWFuKikKKwkJcmVsZWFzZT0nLWdudScKKwkJOzsKKwkgICAgKikKKwkJcmVsZWFzZT1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLV9dLiovXC4vJ2AKKwkJOzsKKwllc2FjCisJIyBTaW5jZSBDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU06CisJIyBjb250YWlucyByZWR1bmRhbnQgaW5mb3JtYXRpb24sIHRoZSBzaG9ydGVyIGZvcm06CisJIyBDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTSBpcyB1c2VkLgorCWVjaG8gIiR7bWFjaGluZX0tJHtvc30ke3JlbGVhc2V9IgorCWV4aXQgOzsKKyAgICAqOk9wZW5CU0Q6KjoqKQorCVVOQU1FX01BQ0hJTkVfQVJDSD1gYXJjaCB8IHNlZCAncy9PcGVuQlNELi8vJ2AKKwllY2hvICR7VU5BTUVfTUFDSElORV9BUkNIfS11bmtub3duLW9wZW5ic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6ZWtrb0JTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZWtrb2JzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpTb2xpZEJTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc29saWRic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1hY3BwYzpNaXJCU0Q6KjoqKQorCWVjaG8gcG93ZXJwYy11bmtub3duLW1pcmJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpNaXJCU0Q6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW1pcmJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgYWxwaGE6T1NGMToqOiopCisJY2FzZSAkVU5BTUVfUkVMRUFTRSBpbgorCSo0LjApCisJCVVOQU1FX1JFTEVBU0U9YC91c3Ivc2Jpbi9zaXplciAtdiB8IGF3ayAne3ByaW50ICQzfSdgCisJCTs7CisJKjUuKikKKwkgICAgICAgIFVOQU1FX1JFTEVBU0U9YC91c3Ivc2Jpbi9zaXplciAtdiB8IGF3ayAne3ByaW50ICQ0fSdgCisJCTs7CisJZXNhYworCSMgQWNjb3JkaW5nIHRvIENvbXBhcSwgL3Vzci9zYmluL3BzcmluZm8gaGFzIGJlZW4gYXZhaWxhYmxlIG9uCisJIyBPU0YvMSBhbmQgVHJ1NjQgc3lzdGVtcyBwcm9kdWNlZCBzaW5jZSAxOTk1LiAgSSBob3BlIHRoYXQKKwkjIGNvdmVycyBtb3N0IHN5c3RlbXMgcnVubmluZyB0b2RheS4gIFRoaXMgY29kZSBwaXBlcyB0aGUgQ1BVCisJIyB0eXBlcyB0aHJvdWdoIGhlYWQgLW4gMSwgc28gd2Ugb25seSBkZXRlY3QgdGhlIHR5cGUgb2YgQ1BVIDAuCisJQUxQSEFfQ1BVX1RZUEU9YC91c3Ivc2Jpbi9wc3JpbmZvIC12IHwgc2VkIC1uIC1lICdzL14gIFRoZSBhbHBoYSBcKC4qXCkgcHJvY2Vzc29yLiokL1wxL3AnIHwgaGVhZCAtbiAxYAorCWNhc2UgIiRBTFBIQV9DUFVfVFlQRSIgaW4KKwkgICAgIkVWNCAoMjEwNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGEiIDs7CisJICAgICJFVjQuNSAoMjEwNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGEiIDs7CisJICAgICJMQ0E0ICgyMTA2Ni8yMTA2OCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIgOzsKKwkgICAgIkVWNSAoMjExNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjUiIDs7CisJICAgICJFVjUuNiAoMjExNjRBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY1NiIgOzsKKwkgICAgIkVWNS42ICgyMTE2NFBDKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhcGNhNTYiIDs7CisJICAgICJFVjUuNyAoMjExNjRQQykiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYXBjYTU3IiA7OworCSAgICAiRVY2ICgyMTI2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NiIgOzsKKwkgICAgIkVWNi43ICgyMTI2NEEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY3IiA7OworCSAgICAiRVY2LjhDQiAoMjEyNjRDKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OCIgOzsKKwkgICAgIkVWNi44QUwgKDIxMjY0QikiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjgiIDs7CisJICAgICJFVjYuOENYICgyMTI2NEQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY4IiA7OworCSAgICAiRVY2LjlBICgyMTI2NC9FVjY5QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjkiIDs7CisJICAgICJFVjcgKDIxMzY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY3IiA7OworCSAgICAiRVY3LjkgKDIxMzY0QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NzkiIDs7CisJZXNhYworCSMgQSBQbi5uIHZlcnNpb24gaXMgYSBwYXRjaGVkIHZlcnNpb24uCisJIyBBIFZuLm4gdmVyc2lvbiBpcyBhIHJlbGVhc2VkIHZlcnNpb24uCisJIyBBIFRuLm4gdmVyc2lvbiBpcyBhIHJlbGVhc2VkIGZpZWxkIHRlc3QgdmVyc2lvbi4KKwkjIEEgWG4ubiB2ZXJzaW9uIGlzIGFuIHVucmVsZWFzZWQgZXhwZXJpbWVudGFsIGJhc2VsZXZlbC4KKwkjIDEuMiB1c2VzICIxLjIiIGZvciB1bmFtZSAtci4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLW9zZmBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXltQVlRYXS8vJyB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J2AKKwlleGl0IDs7CisgICAgQWxwaGFcICo6V2luZG93c19OVCo6KikKKwkjIEhvdyBkbyB3ZSBrbm93IGl0J3MgSW50ZXJpeCByYXRoZXIgdGhhbiB0aGUgZ2VuZXJpYyBQT1NJWCBzdWJzeXN0ZW0/CisJIyBTaG91bGQgd2UgY2hhbmdlIFVOQU1FX01BQ0hJTkUgYmFzZWQgb24gdGhlIG91dHB1dCBvZiB1bmFtZSBpbnN0ZWFkCisJIyBvZiB0aGUgc3BlY2lmaWMgQWxwaGEgbW9kZWw/CisJZWNobyBhbHBoYS1wYy1pbnRlcml4CisJZXhpdCA7OworICAgIDIxMDY0OldpbmRvd3NfTlQ6NTA6MykKKwllY2hvIGFscGhhLWRlYy13aW5udDMuNQorCWV4aXQgOzsKKyAgICBBbWlnYSo6VU5JWF9TeXN0ZW1fVjo0LjA6KikKKwllY2hvIG02OGstdW5rbm93bi1zeXN2NAorCWV4aXQgOzsKKyAgICAqOltBYV1taWdhW09vXVtTc106KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWFtaWdhb3MKKwlleGl0IDs7CisgICAgKjpbTW1db3JwaFtPb11bU3NdOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1tb3JwaG9zCisJZXhpdCA7OworICAgICo6T1MvMzkwOio6KikKKwllY2hvIGkzNzAtaWJtLW9wZW5lZGl0aW9uCisJZXhpdCA7OworICAgICo6ei9WTToqOiopCisJZWNobyBzMzkwLWlibS16dm1vZQorCWV4aXQgOzsKKyAgICAqOk9TNDAwOio6KikKKyAgICAgICAgZWNobyBwb3dlcnBjLWlibS1vczQwMAorCWV4aXQgOzsKKyAgICBhcm06UklTQyo6MS5bMDEyXSo6Knxhcm06cmlzY2l4OjEuWzAxMl0qOiopCisJZWNobyBhcm0tYWNvcm4tcmlzY2l4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBhcm06cmlzY29zOio6Knxhcm06UklTQ09TOio6KikKKwllY2hvIGFybS11bmtub3duLXJpc2NvcworCWV4aXQgOzsKKyAgICBTUjI/MDE6SEktVVgvTVBQOio6KiB8IFNSODAwMDpISS1VWC9NUFA6KjoqKQorCWVjaG8gaHBwYTEuMS1oaXRhY2hpLWhpdXhtcHAKKwlleGl0IDs7CisgICAgUHlyYW1pZCo6T1N4KjoqOiogfCBNSVMqOk9TeCo6KjoqIHwgTUlTKjpTTVBfREMtT1N4KjoqOiopCisJIyBha2VlQHdwZGlzMDMud3BhZmIuYWYubWlsIChFYXJsZSBGLiBBa2UpIGNvbnRyaWJ1dGVkIE1JUyBhbmQgTklMRS4KKwlpZiB0ZXN0ICJgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsYCIgPSBhdHQgOyB0aGVuCisJCWVjaG8gcHlyYW1pZC1weXJhbWlkLXN5c3YzCisJZWxzZQorCQllY2hvIHB5cmFtaWQtcHlyYW1pZC1ic2QKKwlmaQorCWV4aXQgOzsKKyAgICBOSUxFKjoqOio6ZGNvc3gpCisJZWNobyBweXJhbWlkLXB5cmFtaWQtc3ZyNAorCWV4aXQgOzsKKyAgICBEUlM/NjAwMDp1bml4OjQuMDo2KikKKwllY2hvIHNwYXJjLWljbC1ueDYKKwlleGl0IDs7CisgICAgRFJTPzYwMDA6VU5JWF9TVjo0LjIqOjcqIHwgRFJTPzYwMDA6aXNpczo0LjIqOjcqKQorCWNhc2UgYC91c3IvYmluL3VuYW1lIC1wYCBpbgorCSAgICBzcGFyYykgZWNobyBzcGFyYy1pY2wtbng3OyBleGl0IDs7CisJZXNhYyA7OworICAgIHMzOTB4OlN1bk9TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIHN1bjRIOlN1bk9TOjUuKjoqKQorCWVjaG8gc3BhcmMtaGFsLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIHN1bjQqOlN1bk9TOjUuKjoqIHwgdGFkcG9sZSo6U3VuT1M6NS4qOiopCisJZWNobyBzcGFyYy1zdW4tc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgaTg2cGM6QXVyb3JhVVg6NS4qOiogfCBpODZ4ZW46QXVyb3JhVVg6NS4qOiopCisJZWNobyBpMzg2LXBjLWF1cm9yYXV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBpODZwYzpTdW5PUzo1Lio6KiB8IGk4NnhlbjpTdW5PUzo1Lio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJU1VOX0FSQ0g9ImkzODYiCisJIyBJZiB0aGVyZSBpcyBhIGNvbXBpbGVyLCBzZWUgaWYgaXQgaXMgY29uZmlndXJlZCBmb3IgNjQtYml0IG9iamVjdHMuCisJIyBOb3RlIHRoYXQgdGhlIFN1biBjYyBkb2VzIG5vdCB0dXJuIF9fTFA2NF9fIGludG8gMSBsaWtlIGdjYyBkb2VzLgorCSMgVGhpcyB0ZXN0IHdvcmtzIGZvciBib3RoIGNvbXBpbGVycy4KKwlpZiBbICIkQ0NfRk9SX0JVSUxEIiAhPSAnbm9fY29tcGlsZXJfZm91bmQnIF07IHRoZW4KKwkgICAgaWYgKGVjaG8gJyNpZmRlZiBfX2FtZDY0JzsgZWNobyBJU182NEJJVF9BUkNIOyBlY2hvICcjZW5kaWYnKSB8IFwKKwkJKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKKwkJZ3JlcCBJU182NEJJVF9BUkNIID4vZGV2L251bGwKKwkgICAgdGhlbgorCQlTVU5fQVJDSD0ieDg2XzY0IgorCSAgICBmaQorCWZpCisJZWNobyAke1NVTl9BUkNIfS1wYy1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40KjpTdW5PUzo2KjoqKQorCSMgQWNjb3JkaW5nIHRvIGNvbmZpZy5zdWIsIHRoaXMgaXMgdGhlIHByb3BlciB3YXkgdG8gY2Fub25pY2FsaXplCisJIyBTdW5PUzYuICBIYXJkIHRvIGd1ZXNzIGV4YWN0bHkgd2hhdCBTdW5PUzYgd2lsbCBiZSBsaWtlLCBidXQKKwkjIGl0J3MgbGlrZWx5IHRvIGJlIG1vcmUgbGlrZSBTb2xhcmlzIHRoYW4gU3VuT1M0LgorCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMzYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIHN1bjQqOlN1bk9TOio6KikKKwljYXNlICJgL3Vzci9iaW4vYXJjaCAta2AiIGluCisJICAgIFNlcmllcyp8UzQqKQorCQlVTkFNRV9SRUxFQVNFPWB1bmFtZSAtdmAKKwkJOzsKKwllc2FjCisJIyBKYXBhbmVzZSBMYW5ndWFnZSB2ZXJzaW9ucyBoYXZlIGEgdmVyc2lvbiBudW1iZXIgbGlrZSBgNC4xLjMtSkwnLgorCWVjaG8gc3BhcmMtc3VuLXN1bm9zYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvLS9fLydgCisJZXhpdCA7OworICAgIHN1bjMqOlN1bk9TOio6KikKKwllY2hvIG02OGstc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBzdW4qOio6NC4yQlNEOiopCisJVU5BTUVfUkVMRUFTRT1gKHNlZCAxcSAvZXRjL21vdGQgfCBhd2sgJ3twcmludCBzdWJzdHIoJDUsMSwzKX0nKSAyPi9kZXYvbnVsbGAKKwl0ZXN0ICJ4JHtVTkFNRV9SRUxFQVNFfSIgPSAieCIgJiYgVU5BTUVfUkVMRUFTRT0zCisJY2FzZSAiYC9iaW4vYXJjaGAiIGluCisJICAgIHN1bjMpCisJCWVjaG8gbTY4ay1zdW4tc3Vub3Mke1VOQU1FX1JFTEVBU0V9CisJCTs7CisJICAgIHN1bjQpCisJCWVjaG8gc3BhcmMtc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCQk7OworCWVzYWMKKwlleGl0IDs7CisgICAgYXVzaHA6U3VuT1M6KjoqKQorCWVjaG8gc3BhcmMtYXVzcGV4LXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAjIFRoZSBzaXR1YXRpb24gZm9yIE1pTlQgaXMgYSBsaXR0bGUgY29uZnVzaW5nLiAgVGhlIG1hY2hpbmUgbmFtZQorICAgICMgY2FuIGJlIHZpcnR1YWxseSBldmVyeXRoaW5nIChldmVyeXRoaW5nIHdoaWNoIGlzIG5vdAorICAgICMgImF0YXJpc3QiIG9yICJhdGFyaXN0ZSIgYXQgbGVhc3Qgc2hvdWxkIGhhdmUgYSBwcm9jZXNzb3IKKyAgICAjID4gbTY4MDAwKS4gIFRoZSBzeXN0ZW0gbmFtZSByYW5nZXMgZnJvbSAiTWlOVCIgb3ZlciAiRnJlZU1pTlQiCisgICAgIyB0byB0aGUgbG93ZXJjYXNlIHZlcnNpb24gIm1pbnQiIChvciAiZnJlZW1pbnQiKS4gIEZpbmFsbHkKKyAgICAjIHRoZSBzeXN0ZW0gbmFtZSAiVE9TIiBkZW5vdGVzIGEgc3lzdGVtIHdoaWNoIGlzIGFjdHVhbGx5IG5vdAorICAgICMgTWlOVC4gIEJ1dCBNaU5UIGlzIGRvd253YXJkIGNvbXBhdGlibGUgdG8gVE9TLCBzbyB0aGlzIHNob3VsZAorICAgICMgYmUgbm8gcHJvYmxlbS4KKyAgICBhdGFyaXN0W2VdOipNaU5UOio6KiB8IGF0YXJpc3RbZV06Km1pbnQ6KjoqIHwgYXRhcmlzdFtlXToqVE9TOio6KikKKyAgICAgICAgZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGF0YXJpKjoqTWlOVDoqOiogfCBhdGFyaSo6Km1pbnQ6KjoqIHwgYXRhcmlzdFtlXToqVE9TOio6KikKKwllY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KKyAgICAgICAgZXhpdCA7OworICAgICpmYWxjb24qOipNaU5UOio6KiB8ICpmYWxjb24qOiptaW50Oio6KiB8ICpmYWxjb24qOipUT1M6KjoqKQorICAgICAgICBlY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWlsYW4qOipNaU5UOio6KiB8IG1pbGFuKjoqbWludDoqOiogfCAqbWlsYW4qOipUT1M6KjoqKQorICAgICAgICBlY2hvIG02OGstbWlsYW4tbWludCR7VU5BTUVfUkVMRUFTRX0KKyAgICAgICAgZXhpdCA7OworICAgIGhhZGVzKjoqTWlOVDoqOiogfCBoYWRlcyo6Km1pbnQ6KjoqIHwgKmhhZGVzKjoqVE9TOio6KikKKyAgICAgICAgZWNobyBtNjhrLWhhZGVzLW1pbnQke1VOQU1FX1JFTEVBU0V9CisgICAgICAgIGV4aXQgOzsKKyAgICAqOipNaU5UOio6KiB8ICo6Km1pbnQ6KjoqIHwgKjoqVE9TOio6KikKKyAgICAgICAgZWNobyBtNjhrLXVua25vd24tbWludCR7VU5BTUVfUkVMRUFTRX0KKyAgICAgICAgZXhpdCA7OworICAgIG02OGs6bWFjaHRlbjoqOiopCisJZWNobyBtNjhrLWFwcGxlLW1hY2h0ZW4ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHBvd2VycGM6bWFjaHRlbjoqOiopCisJZWNobyBwb3dlcnBjLWFwcGxlLW1hY2h0ZW4ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFJJU0MqOk1hY2g6KjoqKQorCWVjaG8gbWlwcy1kZWMtbWFjaF9ic2Q0LjMKKwlleGl0IDs7CisgICAgUklTQyo6VUxUUklYOio6KikKKwllY2hvIG1pcHMtZGVjLXVsdHJpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgVkFYKjpVTFRSSVgqOio6KikKKwllY2hvIHZheC1kZWMtdWx0cml4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAyMDIwOkNMSVg6KjoqIHwgMjQzMDpDTElYOio6KikKKwllY2hvIGNsaXBwZXItaW50ZXJncmFwaC1jbGl4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtaXBzOio6KjpVTUlQUyB8IG1pcHM6KjoqOlJJU0NvcykKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKyNpZmRlZiBfX2NwbHVzcGx1cworI2luY2x1ZGUgPHN0ZGlvLmg+ICAvKiBmb3IgcHJpbnRmKCkgcHJvdG90eXBlICovCisJaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyNlbHNlCisJaW50IG1haW4gKGFyZ2MsIGFyZ3YpIGludCBhcmdjOyBjaGFyICphcmd2W107IHsKKyNlbmRpZgorCSNpZiBkZWZpbmVkIChob3N0X21pcHMpICYmIGRlZmluZWQgKE1JUFNFQikKKwkjaWYgZGVmaW5lZCAoU1lTVFlQRV9TWVNWKQorCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzc3lzdlxuIiwgYXJndlsxXSk7IGV4aXQgKDApOworCSNlbmRpZgorCSNpZiBkZWZpbmVkIChTWVNUWVBFX1NWUjQpCisJICBwcmludGYgKCJtaXBzLW1pcHMtcmlzY29zJXNzdnI0XG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7CisJI2VuZGlmCisJI2lmIGRlZmluZWQgKFNZU1RZUEVfQlNENDMpIHx8IGRlZmluZWQoU1lTVFlQRV9CU0QpCisJICBwcmludGYgKCJtaXBzLW1pcHMtcmlzY29zJXNic2RcbiIsIGFyZ3ZbMV0pOyBleGl0ICgwKTsKKwkjZW5kaWYKKwkjZW5kaWYKKwkgIGV4aXQgKC0xKTsKKwl9CitFT0YKKwkkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJgorCSAgZHVtbXlhcmc9YGVjaG8gIiR7VU5BTUVfUkVMRUFTRX0iIHwgc2VkIC1uICdzL1woWzAtOV0qXCkuKi9cMS9wJ2AgJiYKKwkgIFNZU1RFTV9OQU1FPWAkZHVtbXkgJGR1bW15YXJnYCAmJgorCSAgICB7IGVjaG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7IH0KKwllY2hvIG1pcHMtbWlwcy1yaXNjb3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIE1vdG9yb2xhOlBvd2VyTUFYX09TOio6KikKKwllY2hvIHBvd2VycGMtbW90b3JvbGEtcG93ZXJtYXgKKwlleGl0IDs7CisgICAgTW90b3JvbGE6Kjo0LjM6UEw4LSopCisJZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcm1heAorCWV4aXQgOzsKKyAgICBOaWdodF9IYXdrOio6KjpQb3dlck1BWF9PUyB8IFN5bmVyZ3k6UG93ZXJNQVhfT1M6KjoqKQorCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJtYXgKKwlleGl0IDs7CisgICAgTmlnaHRfSGF3azpQb3dlcl9VTklYOio6KikKKwllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VydW5peAorCWV4aXQgOzsKKyAgICBtODhrOkNYL1VYOjcqOiopCisJZWNobyBtODhrLWhhcnJpcy1jeHV4NworCWV4aXQgOzsKKyAgICBtODhrOio6NCo6UjQqKQorCWVjaG8gbTg4ay1tb3Rvcm9sYS1zeXN2NAorCWV4aXQgOzsKKyAgICBtODhrOio6Myo6UjMqKQorCWVjaG8gbTg4ay1tb3Rvcm9sYS1zeXN2MworCWV4aXQgOzsKKyAgICBBVmlpT046ZGd1eDoqOiopCisgICAgICAgICMgREcvVVggcmV0dXJucyBBVmlpT04gZm9yIGFsbCBhcmNoaXRlY3R1cmVzCisgICAgICAgIFVOQU1FX1BST0NFU1NPUj1gL3Vzci9iaW4vdW5hbWUgLXBgCisJaWYgWyAkVU5BTUVfUFJPQ0VTU09SID0gbWM4ODEwMCBdIHx8IFsgJFVOQU1FX1BST0NFU1NPUiA9IG1jODgxMTAgXQorCXRoZW4KKwkgICAgaWYgWyAke1RBUkdFVF9CSU5BUllfSU5URVJGQUNFfXggPSBtODhrZGd1eGVsZnggXSB8fCBcCisJICAgICAgIFsgJHtUQVJHRVRfQklOQVJZX0lOVEVSRkFDRX14ID0geCBdCisJICAgIHRoZW4KKwkJZWNobyBtODhrLWRnLWRndXgke1VOQU1FX1JFTEVBU0V9CisJICAgIGVsc2UKKwkJZWNobyBtODhrLWRnLWRndXhiY3Mke1VOQU1FX1JFTEVBU0V9CisJICAgIGZpCisJZWxzZQorCSAgICBlY2hvIGk1ODYtZGctZGd1eCR7VU5BTUVfUkVMRUFTRX0KKwlmaQorIAlleGl0IDs7CisgICAgTTg4KjpEb2xwaGluT1M6KjoqKQkjIERvbHBoaW5PUyAoU1ZSMykKKwllY2hvIG04OGstZG9scGhpbi1zeXN2MworCWV4aXQgOzsKKyAgICBNODgqOio6UjMqOiopCisJIyBEZWx0YSA4OGsgc3lzdGVtIHJ1bm5pbmcgU1ZSMworCWVjaG8gbTg4ay1tb3Rvcm9sYS1zeXN2MworCWV4aXQgOzsKKyAgICBYRDg4KjoqOio6KikgIyBUZWt0cm9uaXggWEQ4OCBzeXN0ZW0gcnVubmluZyBVVGVrViAoU1ZSMykKKwllY2hvIG04OGstdGVrdHJvbml4LXN5c3YzCisJZXhpdCA7OworICAgIFRlazQzWzAtOV1bMC05XTpVVGVrOio6KikgIyBUZWt0cm9uaXggNDMwMCBzeXN0ZW0gcnVubmluZyBVVGVrIChCU0QpCisJZWNobyBtNjhrLXRla3Ryb25peC1ic2QKKwlleGl0IDs7CisgICAgKjpJUklYKjoqOiopCisJZWNobyBtaXBzLXNnaS1pcml4YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvLS9fL2cnYAorCWV4aXQgOzsKKyAgICA/Pz8/Pz8/PzpBSVg/OlsxMl0uMToyKSAgICMgQUlYIDIuMi4xIG9yIEFJWCAyLjEuMSBpcyBSVC9QQyBBSVguCisJZWNobyByb21wLWlibS1haXggICAgICMgdW5hbWUgLW0gZ2l2ZXMgYW4gOCBoZXgtY29kZSBDUFUgaWQKKwlleGl0IDs7ICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQ6IGVjaG8gIidgdW5hbWUgLXNgJyIgZ2l2ZXMgJ0FJWCAnCisgICAgaSo4NjpBSVg6KjoqKQorCWVjaG8gaTM4Ni1pYm0tYWl4CisJZXhpdCA7OworICAgIGlhNjQ6QUlYOio6KikKKwlpZiBbIC14IC91c3IvYmluL29zbGV2ZWwgXSA7IHRoZW4KKwkJSUJNX1JFVj1gL3Vzci9iaW4vb3NsZXZlbGAKKwllbHNlCisJCUlCTV9SRVY9JHtVTkFNRV9WRVJTSU9OfS4ke1VOQU1FX1JFTEVBU0V9CisJZmkKKwllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLWFpeCR7SUJNX1JFVn0KKwlleGl0IDs7CisgICAgKjpBSVg6MjozKQorCWlmIGdyZXAgYm9zMzI1IC91c3IvaW5jbHVkZS9zdGRpby5oID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJCXNlZCAncy9eCQkvLycgPDwgRU9GID4kZHVtbXkuYworCQkjaW5jbHVkZSA8c3lzL3N5c3RlbWNmZy5oPgorCisJCW1haW4oKQorCQkJeworCQkJaWYgKCFfX3Bvd2VyX3BjKCkpCisJCQkJZXhpdCgxKTsKKwkJCXB1dHMoInBvd2VycGMtaWJtLWFpeDMuMi41Iik7CisJCQlleGl0KDApOworCQkJfQorRU9GCisJCWlmICRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgCisJCXRoZW4KKwkJCWVjaG8gIiRTWVNURU1fTkFNRSIKKwkJZWxzZQorCQkJZWNobyByczYwMDAtaWJtLWFpeDMuMi41CisJCWZpCisJZWxpZiBncmVwIGJvczMyNCAvdXNyL2luY2x1ZGUvc3RkaW8uaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJZWNobyByczYwMDAtaWJtLWFpeDMuMi40CisJZWxzZQorCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yCisJZmkKKwlleGl0IDs7CisgICAgKjpBSVg6KjpbNDU2XSkKKwlJQk1fQ1BVX0lEPWAvdXNyL3NiaW4vbHNkZXYgLUMgLWMgcHJvY2Vzc29yIC1TIGF2YWlsYWJsZSB8IHNlZCAxcSB8IGF3ayAneyBwcmludCAkMSB9J2AKKwlpZiAvdXNyL3NiaW4vbHNhdHRyIC1FbCAke0lCTV9DUFVfSUR9IHwgZ3JlcCAnIFBPV0VSJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJSUJNX0FSQ0g9cnM2MDAwCisJZWxzZQorCQlJQk1fQVJDSD1wb3dlcnBjCisJZmkKKwlpZiBbIC14IC91c3IvYmluL29zbGV2ZWwgXSA7IHRoZW4KKwkJSUJNX1JFVj1gL3Vzci9iaW4vb3NsZXZlbGAKKwllbHNlCisJCUlCTV9SRVY9JHtVTkFNRV9WRVJTSU9OfS4ke1VOQU1FX1JFTEVBU0V9CisJZmkKKwllY2hvICR7SUJNX0FSQ0h9LWlibS1haXgke0lCTV9SRVZ9CisJZXhpdCA7OworICAgICo6QUlYOio6KikKKwllY2hvIHJzNjAwMC1pYm0tYWl4CisJZXhpdCA7OworICAgIGlibXJ0OjQuNEJTRDoqfHJvbXAtaWJtOkJTRDoqKQorCWVjaG8gcm9tcC1pYm0tYnNkNC40CisJZXhpdCA7OworICAgIGlibXJ0OipCU0Q6Knxyb21wLWlibTpCU0Q6KikgICAgICAgICAgICAjIGNvdmVycyBSVC9QQyBCU0QgYW5kCisJZWNobyByb21wLWlibS1ic2Qke1VOQU1FX1JFTEVBU0V9ICAgIyA0LjMgd2l0aCB1bmFtZSBhZGRlZCB0bworCWV4aXQgOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVwb3J0OiByb21wLWlibSBCU0QgNC4zCisgICAgKjpCT1NYOio6KikKKwllY2hvIHJzNjAwMC1idWxsLWJvc3gKKwlleGl0IDs7CisgICAgRFBYLzI/MDA6Qi5PLlMuOio6KikKKwllY2hvIG02OGstYnVsbC1zeXN2MworCWV4aXQgOzsKKyAgICA5MDAwL1szNF0/Pzo0LjNic2Q6MS4qOiopCisJZWNobyBtNjhrLWhwLWJzZAorCWV4aXQgOzsKKyAgICBocDMwMDo0LjRCU0Q6KjoqIHwgOTAwMC9bMzRdPz86NC4zYnNkOjIuKjoqKQorCWVjaG8gbTY4ay1ocC1ic2Q0LjQKKwlleGl0IDs7CisgICAgOTAwMC9bMzQ2NzhdPz86SFAtVVg6KjoqKQorCUhQVVhfUkVWPWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLlswQl0qLy8nYAorCWNhc2UgIiR7VU5BTUVfTUFDSElORX0iIGluCisJICAgIDkwMDAvMzE/ICkgICAgICAgICAgICBIUF9BUkNIPW02ODAwMCA7OworCSAgICA5MDAwL1szNF0/PyApICAgICAgICAgSFBfQVJDSD1tNjhrIDs7CisJICAgIDkwMDAvWzY3OF1bMC05XVswLTldKQorCQlpZiBbIC14IC91c3IvYmluL2dldGNvbmYgXTsgdGhlbgorCQkgICAgc2NfY3B1X3ZlcnNpb249YC91c3IvYmluL2dldGNvbmYgU0NfQ1BVX1ZFUlNJT04gMj4vZGV2L251bGxgCisgICAgICAgICAgICAgICAgICAgIHNjX2tlcm5lbF9iaXRzPWAvdXNyL2Jpbi9nZXRjb25mIFNDX0tFUk5FTF9CSVRTIDI+L2Rldi9udWxsYAorICAgICAgICAgICAgICAgICAgICBjYXNlICIke3NjX2NwdV92ZXJzaW9ufSIgaW4KKyAgICAgICAgICAgICAgICAgICAgICA1MjMpIEhQX0FSQ0g9ImhwcGExLjAiIDs7ICMgQ1BVX1BBX1JJU0MxXzAKKyAgICAgICAgICAgICAgICAgICAgICA1MjgpIEhQX0FSQ0g9ImhwcGExLjEiIDs7ICMgQ1BVX1BBX1JJU0MxXzEKKyAgICAgICAgICAgICAgICAgICAgICA1MzIpICAgICAgICAgICAgICAgICAgICAgICMgQ1BVX1BBX1JJU0MyXzAKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiR7c2Nfa2VybmVsX2JpdHN9IiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAzMikgSFBfQVJDSD0iaHBwYTIuMG4iIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIDY0KSBIUF9BUkNIPSJocHBhMi4wdyIgOzsKKwkJCSAgJycpIEhQX0FSQ0g9ImhwcGEyLjAiIDs7ICAgIyBIUC1VWCAxMC4yMAorICAgICAgICAgICAgICAgICAgICAgICAgZXNhYyA7OworICAgICAgICAgICAgICAgICAgICBlc2FjCisJCWZpCisJCWlmIFsgIiR7SFBfQVJDSH0iID0gIiIgXTsgdGhlbgorCQkgICAgZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQkgICAgc2VkICdzL14gICAgICAgICAgICAgIC8vJyA8PCBFT0YgPiRkdW1teS5jCisKKyAgICAgICAgICAgICAgI2RlZmluZSBfSFBVWF9TT1VSQ0UKKyAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAgICAgICAgICAgICAjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyAgICAgICAgICAgICAgaW50IG1haW4gKCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAjaWYgZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpCisgICAgICAgICAgICAgICAgICBsb25nIGJpdHMgPSBzeXNjb25mKF9TQ19LRVJORUxfQklUUyk7CisgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAgbG9uZyBjcHUgID0gc3lzY29uZiAoX1NDX0NQVV9WRVJTSU9OKTsKKworICAgICAgICAgICAgICAgICAgc3dpdGNoIChjcHUpCisgICAgICAgICAgICAgIAl7CisgICAgICAgICAgICAgIAljYXNlIENQVV9QQV9SSVNDMV8wOiBwdXRzICgiaHBwYTEuMCIpOyBicmVhazsKKyAgICAgICAgICAgICAgCWNhc2UgQ1BVX1BBX1JJU0MxXzE6IHB1dHMgKCJocHBhMS4xIik7IGJyZWFrOworICAgICAgICAgICAgICAJY2FzZSBDUFVfUEFfUklTQzJfMDoKKyAgICAgICAgICAgICAgI2lmIGRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKQorICAgICAgICAgICAgICAJICAgIHN3aXRjaCAoYml0cykKKyAgICAgICAgICAgICAgCQl7CisgICAgICAgICAgICAgIAkJY2FzZSA2NDogcHV0cyAoImhwcGEyLjB3Iik7IGJyZWFrOworICAgICAgICAgICAgICAJCWNhc2UgMzI6IHB1dHMgKCJocHBhMi4wbiIpOyBicmVhazsKKyAgICAgICAgICAgICAgCQlkZWZhdWx0OiBwdXRzICgiaHBwYTIuMCIpOyBicmVhazsKKyAgICAgICAgICAgICAgCQl9IGJyZWFrOworICAgICAgICAgICAgICAjZWxzZSAgLyogIWRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKSAqLworICAgICAgICAgICAgICAJICAgIHB1dHMgKCJocHBhMi4wIik7IGJyZWFrOworICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgCWRlZmF1bHQ6IHB1dHMgKCJocHBhMS4wIik7IGJyZWFrOworICAgICAgICAgICAgICAJfQorICAgICAgICAgICAgICAgICAgZXhpdCAoMCk7CisgICAgICAgICAgICAgIH0KK0VPRgorCQkgICAgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgMj4vZGV2L251bGwpICYmIEhQX0FSQ0g9YCRkdW1teWAKKwkJICAgIHRlc3QgLXogIiRIUF9BUkNIIiAmJiBIUF9BUkNIPWhwcGEKKwkJZmkgOzsKKwllc2FjCisJaWYgWyAke0hQX0FSQ0h9ID0gImhwcGEyLjB3IiBdCisJdGhlbgorCSAgICBldmFsICRzZXRfY2NfZm9yX2J1aWxkCisKKwkgICAgIyBocHBhMi4wdy1ocC1ocHV4KiBoYXMgYSA2NC1iaXQga2VybmVsIGFuZCBhIGNvbXBpbGVyIGdlbmVyYXRpbmcKKwkgICAgIyAzMi1iaXQgY29kZS4gIGhwcGE2NC1ocC1ocHV4KiBoYXMgdGhlIHNhbWUga2VybmVsIGFuZCBhIGNvbXBpbGVyCisJICAgICMgZ2VuZXJhdGluZyA2NC1iaXQgY29kZS4gIEdOVSBhbmQgSFAgdXNlIGRpZmZlcmVudCBub21lbmNsYXR1cmU6CisJICAgICMKKwkgICAgIyAkIENDX0ZPUl9CVUlMRD1jYyAuL2NvbmZpZy5ndWVzcworCSAgICAjID0+IGhwcGEyLjB3LWhwLWhwdXgxMS4yMworCSAgICAjICQgQ0NfRk9SX0JVSUxEPSJjYyArREEyLjB3IiAuL2NvbmZpZy5ndWVzcworCSAgICAjID0+IGhwcGE2NC1ocC1ocHV4MTEuMjMKKworCSAgICBpZiBlY2hvIF9fTFA2NF9fIHwgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8CisJCWdyZXAgLXEgX19MUDY0X18KKwkgICAgdGhlbgorCQlIUF9BUkNIPSJocHBhMi4wdyIKKwkgICAgZWxzZQorCQlIUF9BUkNIPSJocHBhNjQiCisJICAgIGZpCisJZmkKKwllY2hvICR7SFBfQVJDSH0taHAtaHB1eCR7SFBVWF9SRVZ9CisJZXhpdCA7OworICAgIGlhNjQ6SFAtVVg6KjoqKQorCUhQVVhfUkVWPWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLlswQl0qLy8nYAorCWVjaG8gaWE2NC1ocC1ocHV4JHtIUFVYX1JFVn0KKwlleGl0IDs7CisgICAgMzA1MCo6SEktVVg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworCSNpbmNsdWRlIDx1bmlzdGQuaD4KKwlpbnQKKwltYWluICgpCisJeworCSAgbG9uZyBjcHUgPSBzeXNjb25mIChfU0NfQ1BVX1ZFUlNJT04pOworCSAgLyogVGhlIG9yZGVyIG1hdHRlcnMsIGJlY2F1c2UgQ1BVX0lTX0hQX01DNjhLIGVycm9uZW91c2x5IHJldHVybnMKKwkgICAgIHRydWUgZm9yIENQVV9QQV9SSVNDMV8wLiAgQ1BVX0lTX1BBX1JJU0MgcmV0dXJucyBjb3JyZWN0CisJICAgICByZXN1bHRzLCBob3dldmVyLiAgKi8KKwkgIGlmIChDUFVfSVNfUEFfUklTQyAoY3B1KSkKKwkgICAgeworCSAgICAgIHN3aXRjaCAoY3B1KQorCQl7CisJCSAgY2FzZSBDUFVfUEFfUklTQzFfMDogcHV0cyAoImhwcGExLjAtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQkgIGNhc2UgQ1BVX1BBX1JJU0MxXzE6IHB1dHMgKCJocHBhMS4xLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJICBjYXNlIENQVV9QQV9SSVNDMl8wOiBwdXRzICgiaHBwYTIuMC1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCSAgZGVmYXVsdDogcHV0cyAoImhwcGEtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQl9CisJICAgIH0KKwkgIGVsc2UgaWYgKENQVV9JU19IUF9NQzY4SyAoY3B1KSkKKwkgICAgcHV0cyAoIm02OGstaGl0YWNoaS1oaXV4d2UyIik7CisJICBlbHNlIHB1dHMgKCJ1bmtub3duLWhpdGFjaGktaGl1eHdlMiIpOworCSAgZXhpdCAoMCk7CisJfQorRU9GCisJJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYgU1lTVEVNX05BTUU9YCRkdW1teWAgJiYKKwkJeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CisJZWNobyB1bmtub3duLWhpdGFjaGktaGl1eHdlMgorCWV4aXQgOzsKKyAgICA5MDAwLzc/Pzo0LjNic2Q6KjoqIHwgOTAwMC84P1s3OV06NC4zYnNkOio6KiApCisJZWNobyBocHBhMS4xLWhwLWJzZAorCWV4aXQgOzsKKyAgICA5MDAwLzg/Pzo0LjNic2Q6KjoqKQorCWVjaG8gaHBwYTEuMC1ocC1ic2QKKwlleGl0IDs7CisgICAgKjk/Pyo6TVBFL2lYOio6KiB8ICozMDAwKjpNUEUvaVg6KjoqKQorCWVjaG8gaHBwYTEuMC1ocC1tcGVpeAorCWV4aXQgOzsKKyAgICBocDc/PzpPU0YxOio6KiB8IGhwOD9bNzldOk9TRjE6KjoqICkKKwllY2hvIGhwcGExLjEtaHAtb3NmCisJZXhpdCA7OworICAgIGhwOD8/Ok9TRjE6KjoqKQorCWVjaG8gaHBwYTEuMC1ocC1vc2YKKwlleGl0IDs7CisgICAgaSo4NjpPU0YxOio6KikKKwlpZiBbIC14IC91c3Ivc2Jpbi9zeXN2ZXJzaW9uIF0gOyB0aGVuCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW9zZjFtaworCWVsc2UKKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tb3NmMQorCWZpCisJZXhpdCA7OworICAgIHBhcmlzYyo6TGl0ZXMqOio6KikKKwllY2hvIGhwcGExLjEtaHAtbGl0ZXMKKwlleGl0IDs7CisgICAgQzEqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMSo6KikKKwllY2hvIGMxLWNvbnZleC1ic2QKKyAgICAgICAgZXhpdCA7OworICAgIEMyKjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzIqOiopCisJaWYgZ2V0c3lzaW5mbyAtZiBzY2FsYXJfYWNjCisJdGhlbiBlY2hvIGMzMi1jb252ZXgtYnNkCisJZWxzZSBlY2hvIGMyLWNvbnZleC1ic2QKKwlmaQorICAgICAgICBleGl0IDs7CisgICAgQzM0KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzM0KjoqKQorCWVjaG8gYzM0LWNvbnZleC1ic2QKKyAgICAgICAgZXhpdCA7OworICAgIEMzOCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMzOCo6KikKKwllY2hvIGMzOC1jb252ZXgtYnNkCisgICAgICAgIGV4aXQgOzsKKyAgICBDNCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkM0KjoqKQorCWVjaG8gYzQtY29udmV4LWJzZAorICAgICAgICBleGl0IDs7CisgICAgQ1JBWSpZLU1QOio6KjoqKQorCWVjaG8geW1wLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqW0EtWl05MDoqOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IFwKKwl8IHNlZCAtZSAncy9DUkFZLipcKFtBLVpdOTBcKS9cMS8nIFwKKwkgICAgICAtZSB5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LyBcCisJICAgICAgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKlRTOio6KjoqKQorCWVjaG8gdDkwLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqVDNFOio6KjoqKQorCWVjaG8gYWxwaGFldjUtY3JheS11bmljb3NtayR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKlNWMToqOio6KikKKwllY2hvIHN2MS1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICAqOlVOSUNPUy9tcDoqOiopCisJZWNobyBjcmF5bnYtY3JheS11bmljb3NtcCR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBGMzBbMDFdOlVOSVhfU3lzdGVtX1Y6KjoqIHwgRjcwMDpVTklYX1N5c3RlbV9WOio6KikKKwlGVUpJVFNVX1BST0M9YHVuYW1lIC1tIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYAorICAgICAgICBGVUpJVFNVX1NZUz1gdW5hbWUgLXAgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvXC8vLydgCisgICAgICAgIEZVSklUU1VfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvIC9fLydgCisgICAgICAgIGVjaG8gIiR7RlVKSVRTVV9QUk9DfS1mdWppdHN1LSR7RlVKSVRTVV9TWVN9JHtGVUpJVFNVX1JFTH0iCisgICAgICAgIGV4aXQgOzsKKyAgICA1MDAwOlVOSVhfU3lzdGVtX1Y6NC4qOiopCisgICAgICAgIEZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy9cLy8vJ2AKKyAgICAgICAgRlVKSVRTVV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy8gL18vJ2AKKyAgICAgICAgZWNobyAic3BhcmMtZnVqaXRzdS0ke0ZVSklUU1VfU1lTfSR7RlVKSVRTVV9SRUx9IgorCWV4aXQgOzsKKyAgICBpKjg2OkJTRC8zODY6KjoqIHwgaSo4NjpCU0QvT1M6KjoqIHwgKjpBc2NlbmRcIEVtYmVkZGVkL09TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtYnNkaSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgc3BhcmMqOkJTRC9PUzoqOiopCisJZWNobyBzcGFyYy11bmtub3duLWJzZGkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6QlNEL09TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1ic2RpJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkZyZWVCU0Q6KjoqKQorCWNhc2UgJHtVTkFNRV9NQUNISU5FfSBpbgorCSAgICBwYzk4KQorCQllY2hvIGkzODYtdW5rbm93bi1mcmVlYnNkYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYCA7OworCSAgICBhbWQ2NCkKKwkJZWNobyB4ODZfNjQtdW5rbm93bi1mcmVlYnNkYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYCA7OworCSAgICAqKQorCQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1mcmVlYnNkYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYCA7OworCWVzYWMKKwlleGl0IDs7CisgICAgaSo6Q1lHV0lOKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1jeWd3aW4KKwlleGl0IDs7CisgICAgKjpNSU5HVyo6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbWluZ3czMgorCWV4aXQgOzsKKyAgICBpKjp3aW5kb3dzMzIqOiopCisgICAgCSMgdW5hbWUgLW0gaW5jbHVkZXMgIi1wYyIgb24gdGhpcyBzeXN0ZW0uCisgICAgCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1taW5ndzMyCisJZXhpdCA7OworICAgIGkqOlBXKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1wdzMyCisJZXhpdCA7OworICAgICo6SW50ZXJpeCo6KikKKyAgICAJY2FzZSAke1VOQU1FX01BQ0hJTkV9IGluCisJICAgIHg4NikKKwkJZWNobyBpNTg2LXBjLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CisJCWV4aXQgOzsKKwkgICAgYXV0aGVudGljYW1kIHwgZ2VudWluZWludGVsIHwgRU02NFQpCisJCWVjaG8geDg2XzY0LXVua25vd24taW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KKwkJZXhpdCA7OworCSAgICBJQTY0KQorCQllY2hvIGlhNjQtdW5rbm93bi1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQorCQlleGl0IDs7CisJZXNhYyA7OworICAgIFszNDVdODY6V2luZG93c185NToqIHwgWzM0NV04NjpXaW5kb3dzXzk4OiogfCBbMzQ1XTg2OldpbmRvd3NfTlQ6KikKKwllY2hvIGkke1VOQU1FX01BQ0hJTkV9LXBjLW1rcworCWV4aXQgOzsKKyAgICA4NjY0OldpbmRvd3NfTlQ6KikKKwllY2hvIHg4Nl82NC1wYy1ta3MKKwlleGl0IDs7CisgICAgaSo6V2luZG93c19OVCo6KiB8IFBlbnRpdW0qOldpbmRvd3NfTlQqOiopCisJIyBIb3cgZG8gd2Uga25vdyBpdCdzIEludGVyaXggcmF0aGVyIHRoYW4gdGhlIGdlbmVyaWMgUE9TSVggc3Vic3lzdGVtPworCSMgSXQgYWxzbyBjb25mbGljdHMgd2l0aCBwcmUtMi4wIHZlcnNpb25zIG9mIEFUJlQgVVdJTi4gU2hvdWxkIHdlCisJIyBVTkFNRV9NQUNISU5FIGJhc2VkIG9uIHRoZSBvdXRwdXQgb2YgdW5hbWUgaW5zdGVhZCBvZiBpMzg2PworCWVjaG8gaTU4Ni1wYy1pbnRlcml4CisJZXhpdCA7OworICAgIGkqOlVXSU4qOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXV3aW4KKwlleGl0IDs7CisgICAgYW1kNjQ6Q1lHV0lOKjoqOiogfCB4ODZfNjQ6Q1lHV0lOKjoqOiopCisJZWNobyB4ODZfNjQtdW5rbm93bi1jeWd3aW4KKwlleGl0IDs7CisgICAgcCo6Q1lHV0lOKjoqKQorCWVjaG8gcG93ZXJwY2xlLXVua25vd24tY3lnd2luCisJZXhpdCA7OworICAgIHByZXAqOlN1bk9TOjUuKjoqKQorCWVjaG8gcG93ZXJwY2xlLXVua25vd24tc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgKjpHTlU6KjoqKQorCSMgdGhlIEdOVSBzeXN0ZW0KKwllY2hvIGBlY2hvICR7VU5BTUVfTUFDSElORX18c2VkIC1lICdzLFstL10uKiQsLCdgLXVua25vd24tZ251YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MsLy4qJCwsJ2AKKwlleGl0IDs7CisgICAgKjpHTlUvKjoqOiopCisJIyBvdGhlciBzeXN0ZW1zIHdpdGggR05VIGxpYmMgYW5kIHVzZXJsYW5kCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYGVjaG8gJHtVTkFNRV9TWVNURU19IHwgc2VkICdzLF5bXi9dKi8sLCcgfCB0ciAnW0EtWl0nICdbYS16XSdgYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYC1nbnUKKwlleGl0IDs7CisgICAgaSo4NjpNaW5peDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbml4CisJZXhpdCA7OworICAgIGFscGhhOkxpbnV4Oio6KikKKwljYXNlIGBzZWQgLW4gJy9eY3B1IG1vZGVsL3MvXi4qOiBcKC4qXCkvXDEvcCcgPCAvcHJvYy9jcHVpbmZvYCBpbgorCSAgRVY1KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjUgOzsKKwkgIEVWNTYpICBVTkFNRV9NQUNISU5FPWFscGhhZXY1NiA7OworCSAgUENBNTYpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OworCSAgUENBNTcpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OworCSAgRVY2KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjYgOzsKKwkgIEVWNjcpICBVTkFNRV9NQUNISU5FPWFscGhhZXY2NyA7OworCSAgRVY2OCopIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY4IDs7CisgICAgICAgIGVzYWMKKwlvYmpkdW1wIC0tcHJpdmF0ZS1oZWFkZXJzIC9iaW4vc2ggfCBncmVwIC1xIGxkLnNvLjEKKwlpZiB0ZXN0ICIkPyIgPSAwIDsgdGhlbiBMSUJDPSJsaWJjMSIgOyBlbHNlIExJQkM9IiIgOyBmaQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudSR7TElCQ30KKwlleGl0IDs7CisgICAgYXJtKjpMaW51eDoqOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCWlmIGVjaG8gX19BUk1fRUFCSV9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKKwkgICAgfCBncmVwIC1xIF9fQVJNX0VBQklfXworCXRoZW4KKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZWxzZQorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnVlYWJpCisJZmkKKwlleGl0IDs7CisgICAgYXZyMzIqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgY3JpczpMaW51eDoqOiopCisJZWNobyBjcmlzLWF4aXMtbGludXgtZ251CisJZXhpdCA7OworICAgIGNyaXN2MzI6TGludXg6KjoqKQorCWVjaG8gY3Jpc3YzMi1heGlzLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBmcnY6TGludXg6KjoqKQorICAgIAllY2hvIGZydi11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBpKjg2OkxpbnV4Oio6KikKKwlMSUJDPWdudQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworCSNpZmRlZiBfX2RpZXRsaWJjX18KKwlMSUJDPWRpZXRsaWJjCisJI2VuZGlmCitFT0YKKwlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkxJQkMnYAorCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtJHtMSUJDfSIKKwlleGl0IDs7CisgICAgaWE2NDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIG0zMnIqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgbTY4KjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIG1pcHM6TGludXg6KjoqIHwgbWlwczY0OkxpbnV4Oio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkjdW5kZWYgQ1BVCisJI3VuZGVmICR7VU5BTUVfTUFDSElORX0KKwkjdW5kZWYgJHtVTkFNRV9NQUNISU5FfWVsCisJI2lmIGRlZmluZWQoX19NSVBTRUxfXykgfHwgZGVmaW5lZChfX01JUFNFTCkgfHwgZGVmaW5lZChfTUlQU0VMKSB8fCBkZWZpbmVkKE1JUFNFTCkKKwlDUFU9JHtVTkFNRV9NQUNISU5FfWVsCisJI2Vsc2UKKwkjaWYgZGVmaW5lZChfX01JUFNFQl9fKSB8fCBkZWZpbmVkKF9fTUlQU0VCKSB8fCBkZWZpbmVkKF9NSVBTRUIpIHx8IGRlZmluZWQoTUlQU0VCKQorCUNQVT0ke1VOQU1FX01BQ0hJTkV9CisJI2Vsc2UKKwlDUFU9CisJI2VuZGlmCisJI2VuZGlmCitFT0YKKwlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkNQVSdgCisJdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LWdudSI7IGV4aXQ7IH0KKwk7OworICAgIG9yMzI6TGludXg6KjoqKQorCWVjaG8gb3IzMi11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBwYWRyZTpMaW51eDoqOiopCisJZWNobyBzcGFyYy11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBwYXJpc2M2NDpMaW51eDoqOiogfCBocHBhNjQ6TGludXg6KjoqKQorCWVjaG8gaHBwYTY0LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHBhcmlzYzpMaW51eDoqOiogfCBocHBhOkxpbnV4Oio6KikKKwkjIExvb2sgZm9yIENQVSBsZXZlbAorCWNhc2UgYGdyZXAgJ15jcHVbXmEtel0qOicgL3Byb2MvY3B1aW5mbyAyPi9kZXYvbnVsbCB8IGN1dCAtZCcgJyAtZjJgIGluCisJICBQQTcqKSBlY2hvIGhwcGExLjEtdW5rbm93bi1saW51eC1nbnUgOzsKKwkgIFBBOCopIGVjaG8gaHBwYTIuMC11bmtub3duLWxpbnV4LWdudSA7OworCSAgKikgICAgZWNobyBocHBhLXVua25vd24tbGludXgtZ251IDs7CisJZXNhYworCWV4aXQgOzsKKyAgICBwcGM2NDpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjNjQtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgcHBjOkxpbnV4Oio6KikKKwllY2hvIHBvd2VycGMtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgczM5MDpMaW51eDoqOiogfCBzMzkweDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1saW51eAorCWV4aXQgOzsKKyAgICBzaDY0KjpMaW51eDoqOiopCisgICAgCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBzaCo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBzcGFyYzpMaW51eDoqOiogfCBzcGFyYzY0OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgdmF4OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICB4ODZfNjQ6TGludXg6KjoqKQorCWVjaG8geDg2XzY0LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHh0ZW5zYSo6TGludXg6KjoqKQorICAgIAllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgaSo4NjpEWU5JWC9wdHg6NCo6KikKKwkjIHB0eCA0LjAgZG9lcyB1bmFtZSAtcyBjb3JyZWN0bHksIHdpdGggRFlOSVgvcHR4IGluIHRoZXJlLgorCSMgZWFybGllciB2ZXJzaW9ucyBhcmUgbWVzc2VkIHVwIGFuZCBwdXQgdGhlIG5vZGVuYW1lIGluIGJvdGgKKwkjIHN5c25hbWUgYW5kIG5vZGVuYW1lLgorCWVjaG8gaTM4Ni1zZXF1ZW50LXN5c3Y0CisJZXhpdCA7OworICAgIGkqODY6VU5JWF9TVjo0LjJNUDoyLiopCisgICAgICAgICMgVW5peHdhcmUgaXMgYW4gb2Zmc2hvb3Qgb2YgU1ZSNCwgYnV0IGl0IGhhcyBpdHMgb3duIHZlcnNpb24KKyAgICAgICAgIyBudW1iZXIgc2VyaWVzIHN0YXJ0aW5nIHdpdGggMi4uLgorICAgICAgICAjIEkgYW0gbm90IHBvc2l0aXZlIHRoYXQgb3RoZXIgU1ZSNCBzeXN0ZW1zIHdvbid0IG1hdGNoIHRoaXMsCisJIyBJIGp1c3QgaGF2ZSB0byBob3BlLiAgLS0gcm1zLgorICAgICAgICAjIFVzZSBzeXN2NC4ydXcuLi4gc28gdGhhdCBzeXN2NCogbWF0Y2hlcyBpdC4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdjQuMnV3JHtVTkFNRV9WRVJTSU9OfQorCWV4aXQgOzsKKyAgICBpKjg2Ok9TLzI6KjoqKQorCSMgSWYgd2Ugd2VyZSBhYmxlIHRvIGZpbmQgYHVuYW1lJywgdGhlbiBFTVggVW5peCBjb21wYXRpYmlsaXR5CisJIyBpcyBwcm9iYWJseSBpbnN0YWxsZWQuCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW9zMi1lbXgKKwlleGl0IDs7CisgICAgaSo4NjpYVFMtMzAwOio6U1RPUCkKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zdG9wCisJZXhpdCA7OworICAgIGkqODY6YXRoZW9zOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1hdGhlb3MKKwlleGl0IDs7CisgICAgaSo4NjpzeWxsYWJsZToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5bGxhYmxlCisJZXhpdCA7OworICAgIGkqODY6THlueE9TOjIuKjoqIHwgaSo4NjpMeW54T1M6My5bMDFdKjoqIHwgaSo4NjpMeW54T1M6NC5bMDJdKjoqKQorCWVjaG8gaTM4Ni11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgaSo4NjoqRE9TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbXNkb3NkamdwcAorCWV4aXQgOzsKKyAgICBpKjg2Oio6NC4qOiogfCBpKjg2OlNZU1RFTV9WOjQuKjoqKQorCVVOQU1FX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkICdzL1wvTVAkLy8nYAorCWlmIGdyZXAgTm92ZWxsIC91c3IvaW5jbHVkZS9saW5rLmggPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorCQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5pdmVsLXN5c3Yke1VOQU1FX1JFTH0KKwllbHNlCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2JHtVTkFNRV9SRUx9CisJZmkKKwlleGl0IDs7CisgICAgaSo4NjoqOjU6WzY3OF0qKQorICAgIAkjIFVuaXhXYXJlIDcueCwgT3BlblVOSVggYW5kIE9wZW5TZXJ2ZXIgNi4KKwljYXNlIGAvYmluL3VuYW1lIC1YIHwgZ3JlcCAiXk1hY2hpbmUiYCBpbgorCSAgICAqNDg2KikJICAgICBVTkFNRV9NQUNISU5FPWk0ODYgOzsKKwkgICAgKlBlbnRpdW0pCSAgICAgVU5BTUVfTUFDSElORT1pNTg2IDs7CisJICAgICpQZW50KnwqQ2VsZXJvbikgVU5BTUVfTUFDSElORT1pNjg2IDs7CisJZXNhYworCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9JHtVTkFNRV9TWVNURU19JHtVTkFNRV9WRVJTSU9OfQorCWV4aXQgOzsKKyAgICBpKjg2Oio6My4yOiopCisJaWYgdGVzdCAtZiAvdXNyL29wdGlvbnMvY2IubmFtZTsgdGhlbgorCQlVTkFNRV9SRUw9YHNlZCAtbiAncy8uKlZlcnNpb24gLy9wJyA8L3Vzci9vcHRpb25zL2NiLm5hbWVgCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1pc2MkVU5BTUVfUkVMCisJZWxpZiAvYmluL3VuYW1lIC1YIDI+L2Rldi9udWxsID4vZGV2L251bGwgOyB0aGVuCisJCVVOQU1FX1JFTD1gKC9iaW4vdW5hbWUgLVh8Z3JlcCBSZWxlYXNlfHNlZCAtZSAncy8uKj0gLy8nKWAKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCBpODA0ODYgPi9kZXYvbnVsbCkgJiYgVU5BTUVfTUFDSElORT1pNDg2CisJCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50aXVtJyA+L2Rldi9udWxsKSBcCisJCQkmJiBVTkFNRV9NQUNISU5FPWk1ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnQgKklJJyA+L2Rldi9udWxsKSBcCisJCQkmJiBVTkFNRV9NQUNISU5FPWk2ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0gUHJvJyA+L2Rldi9udWxsKSBcCisJCQkmJiBVTkFNRV9NQUNISU5FPWk2ODYKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXNjbyRVTkFNRV9SRUwKKwllbHNlCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2MzIKKwlmaQorCWV4aXQgOzsKKyAgICBwYzoqOio6KikKKwkjIExlZnQgaGVyZSBmb3IgY29tcGF0aWJpbGl0eToKKyAgICAgICAgIyB1bmFtZSAtbSBwcmludHMgZm9yIERKR1BQIGFsd2F5cyAncGMnLCBidXQgaXQgcHJpbnRzIG5vdGhpbmcgYWJvdXQKKyAgICAgICAgIyB0aGUgcHJvY2Vzc29yLCBzbyB3ZSBwbGF5IHNhZmUgYnkgYXNzdW1pbmcgaTU4Ni4KKwkjIE5vdGU6IHdoYXRldmVyIHRoaXMgaXMsIGl0IE1VU1QgYmUgdGhlIHNhbWUgYXMgd2hhdCBjb25maWcuc3ViCisJIyBwcmludHMgZm9yIHRoZSAiZGpncHAiIGhvc3QsIG9yIGVsc2UgR0RCIGNvbmZpZ3VyeSB3aWxsIGRlY2lkZSB0aGF0CisJIyB0aGlzIGlzIGEgY3Jvc3MtYnVpbGQuCisJZWNobyBpNTg2LXBjLW1zZG9zZGpncHAKKyAgICAgICAgZXhpdCA7OworICAgIEludGVsOk1hY2g6Myo6KikKKwllY2hvIGkzODYtcGMtbWFjaDMKKwlleGl0IDs7CisgICAgcGFyYWdvbjoqOio6KikKKwllY2hvIGk4NjAtaW50ZWwtb3NmMQorCWV4aXQgOzsKKyAgICBpODYwOio6NC4qOiopICMgaTg2MC1TVlI0CisJaWYgZ3JlcCBTdGFyZGVudCAvdXNyL2luY2x1ZGUvc3lzL3VhZG1pbi5oID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKwkgIGVjaG8gaTg2MC1zdGFyZGVudC1zeXN2JHtVTkFNRV9SRUxFQVNFfSAjIFN0YXJkZW50IFZpc3RyYSBpODYwLVNWUjQKKwllbHNlICMgQWRkIG90aGVyIGk4NjAtU1ZSNCB2ZW5kb3JzIGJlbG93IGFzIHRoZXkgYXJlIGRpc2NvdmVyZWQuCisJICBlY2hvIGk4NjAtdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfSAgIyBVbmtub3duIGk4NjAtU1ZSNAorCWZpCisJZXhpdCA7OworICAgIG1pbmkqOkNUSVg6U1lTKjU6KikKKwkjICJtaW5pZnJhbWUiCisJZWNobyBtNjgwMTAtY29udmVyZ2VudC1zeXN2CisJZXhpdCA7OworICAgIG1jNjhrOlVOSVg6U1lTVEVNNTozLjUxbSkKKwllY2hvIG02OGstY29udmVyZ2VudC1zeXN2CisJZXhpdCA7OworICAgIE02ODA/MDpELU5JWDo1LjM6KikKKwllY2hvIG02OGstZGlhYi1kbml4CisJZXhpdCA7OworICAgIE02OCo6KjpSM1ZbNTY3OF0qOiopCisJdGVzdCAtciAvc3lzVjY4ICYmIHsgZWNobyAnbTY4ay1tb3Rvcm9sYS1zeXN2JzsgZXhpdDsgfSA7OworICAgIDNbMzQ1XT8/Oio6NC4wOjMuMCB8IDNbMzRdPz9BOio6NC4wOjMuMCB8IDNbMzRdPz8sKjoqOjQuMDozLjAgfCAzWzM0XT8/Lyo6Kjo0LjA6My4wIHwgNDQwMDoqOjQuMDozLjAgfCA0ODUwOio6NC4wOjMuMCB8IFNLQTQwOio6NC4wOjMuMCB8IFNEUzI6Kjo0LjA6My4wIHwgU0hHMjoqOjQuMDozLjAgfCBTNzUwMSo6Kjo0LjA6My4wKQorCU9TX1JFTD0nJworCXRlc3QgLXIgL2V0Yy8ucmVsaWQgXAorCSYmIE9TX1JFTD0uYHNlZCAtbiAncy9bXiBdKiBbXiBdKiBcKFswLTldWzAtOV1cKS4qL1wxL3AnIDwgL2V0Yy8ucmVsaWRgCisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCisJICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgZW50aXVtID4vZGV2L251bGwgXAorCSAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0gOzsKKyAgICAzWzM0XT8/Oio6NC4wOiogfCAzWzM0XT8/LCo6Kjo0LjA6KikKKyAgICAgICAgL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCisgICAgICAgICAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0OyBleGl0OyB9IDs7CisgICAgTkNSKjoqOjQuMjoqIHwgTVBSQVMqOio6NC4yOiopCisJT1NfUkVMPScuMycKKwl0ZXN0IC1yIC9ldGMvLnJlbGlkIFwKKwkgICAgJiYgT1NfUkVMPS5gc2VkIC1uICdzL1teIF0qIFteIF0qIFwoWzAtOV1bMC05XVwpLiovXDEvcCcgPCAvZXRjLy5yZWxpZGAKKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKwkgICAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0KKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIGVudGl1bSA+L2Rldi9udWxsIFwKKwkgICAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0KKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIHB0ZXJvbiA+L2Rldi9udWxsIFwKKwkgICAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0gOzsKKyAgICBtNjgqOkx5bnhPUzoyLio6KiB8IG02OCo6THlueE9TOjMuMCo6KikKKwllY2hvIG02OGstdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1jNjgwMzA6VU5JWF9TeXN0ZW1fVjo0Lio6KikKKwllY2hvIG02OGstYXRhcmktc3lzdjQKKwlleGl0IDs7CisgICAgVFNVTkFNSTpMeW54T1M6Mi4qOiopCisJZWNobyBzcGFyYy11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgcnM2MDAwOkx5bnhPUzoyLio6KikKKwllY2hvIHJzNjAwMC11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUG93ZXJQQzpMeW54T1M6Mi4qOiogfCBQb3dlclBDOkx5bnhPUzozLlswMV0qOiogfCBQb3dlclBDOkx5bnhPUzo0LlswMl0qOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTTVtCRV1TOlVOSVhfU1Y6KjoqKQorCWVjaG8gbWlwcy1kZGUtc3lzdiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUk0qOlJlbGlhbnRVTklYLSo6KjoqKQorCWVjaG8gbWlwcy1zbmktc3lzdjQKKwlleGl0IDs7CisgICAgUk0qOlNJTklYLSo6KjoqKQorCWVjaG8gbWlwcy1zbmktc3lzdjQKKwlleGl0IDs7CisgICAgKjpTSU5JWC0qOio6KikKKwlpZiB1bmFtZSAtcCAyPi9kZXYvbnVsbCA+L2Rldi9udWxsIDsgdGhlbgorCQlVTkFNRV9NQUNISU5FPWAodW5hbWUgLXApIDI+L2Rldi9udWxsYAorCQllY2hvICR7VU5BTUVfTUFDSElORX0tc25pLXN5c3Y0CisJZWxzZQorCQllY2hvIG5zMzJrLXNuaS1zeXN2CisJZmkKKwlleGl0IDs7CisgICAgUEVOVElVTToqOjQuMCo6KikgIyBVbmlzeXMgYENsZWFyUGF0aCBITVAgSVggNDAwMCcgU1ZSNC9NUCBlZmZvcnQKKyAgICAgICAgICAgICAgICAgICAgICAjIHNheXMgPFJpY2hhcmQuTS5CYXJ0ZWxAY2NNYWlsLkNlbnN1cy5HT1Y+CisgICAgICAgIGVjaG8gaTU4Ni11bmlzeXMtc3lzdjQKKyAgICAgICAgZXhpdCA7OworICAgICo6VU5JWF9TeXN0ZW1fVjo0KjpGVFgqKQorCSMgRnJvbSBHZXJhbGQgSGV3ZXMgPGhld2VzQG9wZW5tYXJrZXQuY29tPi4KKwkjIEhvdyBhYm91dCBkaWZmZXJlbnRpYXRpbmcgYmV0d2VlbiBzdHJhdHVzIGFyY2hpdGVjdHVyZXM/IC1kam0KKwllY2hvIGhwcGExLjEtc3RyYXR1cy1zeXN2NAorCWV4aXQgOzsKKyAgICAqOio6KjpGVFgqKQorCSMgRnJvbSBzZWFuZkBzd2RjLnN0cmF0dXMuY29tLgorCWVjaG8gaTg2MC1zdHJhdHVzLXN5c3Y0CisJZXhpdCA7OworICAgIGkqODY6Vk9TOio6KikKKwkjIEZyb20gUGF1bC5HcmVlbkBzdHJhdHVzLmNvbS4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tc3RyYXR1cy12b3MKKwlleGl0IDs7CisgICAgKjpWT1M6KjoqKQorCSMgRnJvbSBQYXVsLkdyZWVuQHN0cmF0dXMuY29tLgorCWVjaG8gaHBwYTEuMS1zdHJhdHVzLXZvcworCWV4aXQgOzsKKyAgICBtYzY4KjpBL1VYOio6KikKKwllY2hvIG02OGstYXBwbGUtYXV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBuZXdzKjpORVdTLU9TOjYqOiopCisJZWNobyBtaXBzLXNvbnktbmV3c29zNgorCWV4aXQgOzsKKyAgICBSWzM0XTAwMDoqU3lzdGVtX1YqOio6KiB8IFI0MDAwOlVOSVhfU1lTVjoqOiogfCBSKjAwMDpVTklYX1NWOio6KikKKwlpZiBbIC1kIC91c3IvbmVjIF07IHRoZW4KKwkgICAgICAgIGVjaG8gbWlwcy1uZWMtc3lzdiR7VU5BTUVfUkVMRUFTRX0KKwllbHNlCisJICAgICAgICBlY2hvIG1pcHMtdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfQorCWZpCisgICAgICAgIGV4aXQgOzsKKyAgICBCZUJveDpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gaGFyZHdhcmUgbWFkZSBieSBCZSwgUFBDIG9ubHkuCisJZWNobyBwb3dlcnBjLWJlLWJlb3MKKwlleGl0IDs7CisgICAgQmVNYWM6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIE1hYyBvciBNYWMgY2xvbmUsIFBQQyBvbmx5LgorCWVjaG8gcG93ZXJwYy1hcHBsZS1iZW9zCisJZXhpdCA7OworICAgIEJlUEM6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIEludGVsIFBDIGNvbXBhdGlibGUuCisJZWNobyBpNTg2LXBjLWJlb3MKKwlleGl0IDs7CisgICAgQmVQQzpIYWlrdToqOiopCSMgSGFpa3UgcnVubmluZyBvbiBJbnRlbCBQQyBjb21wYXRpYmxlLgorCWVjaG8gaTU4Ni1wYy1oYWlrdQorCWV4aXQgOzsKKyAgICBTWC00OlNVUEVSLVVYOio6KikKKwllY2hvIHN4NC1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtNTpTVVBFUi1VWDoqOiopCisJZWNobyBzeDUtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTY6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g2LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC03OlNVUEVSLVVYOio6KikKKwllY2hvIHN4Ny1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtODpTVVBFUi1VWDoqOiopCisJZWNobyBzeDgtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLThSOlNVUEVSLVVYOio6KikKKwllY2hvIHN4OHItbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFBvd2VyKjpSaGFwc29keToqOiopCisJZWNobyBwb3dlcnBjLWFwcGxlLXJoYXBzb2R5JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlJoYXBzb2R5Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tYXBwbGUtcmhhcHNvZHkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6RGFyd2luOio6KikKKwlVTkFNRV9QUk9DRVNTT1I9YHVuYW1lIC1wYCB8fCBVTkFNRV9QUk9DRVNTT1I9dW5rbm93bgorCWNhc2UgJFVOQU1FX1BST0NFU1NPUiBpbgorCSAgICBpMzg2KQorCQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJCWlmIFsgIiRDQ19GT1JfQlVJTEQiICE9ICdub19jb21waWxlcl9mb3VuZCcgXTsgdGhlbgorCQkgIGlmIChlY2hvICcjaWZkZWYgX19MUDY0X18nOyBlY2hvIElTXzY0QklUX0FSQ0g7IGVjaG8gJyNlbmRpZicpIHwgXAorCQkgICAgICAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwgXAorCQkgICAgICBncmVwIElTXzY0QklUX0FSQ0ggPi9kZXYvbnVsbAorCQkgIHRoZW4KKwkJICAgICAgVU5BTUVfUFJPQ0VTU09SPSJ4ODZfNjQiCisJCSAgZmkKKwkJZmkgOzsKKwkgICAgdW5rbm93bikgVU5BTUVfUFJPQ0VTU09SPXBvd2VycGMgOzsKKwllc2FjCisJZWNobyAke1VOQU1FX1BST0NFU1NPUn0tYXBwbGUtZGFyd2luJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOnByb2NudG8qOio6KiB8ICo6UU5YOlswMTIzNDU2Nzg5XSo6KikKKwlVTkFNRV9QUk9DRVNTT1I9YHVuYW1lIC1wYAorCWlmIHRlc3QgIiRVTkFNRV9QUk9DRVNTT1IiID0gIng4NiI7IHRoZW4KKwkJVU5BTUVfUFJPQ0VTU09SPWkzODYKKwkJVU5BTUVfTUFDSElORT1wYworCWZpCisJZWNobyAke1VOQU1FX1BST0NFU1NPUn0tJHtVTkFNRV9NQUNISU5FfS1udG8tcW54JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlFOWDoqOjQqKQorCWVjaG8gaTM4Ni1wYy1xbngKKwlleGl0IDs7CisgICAgTlNFLT86Tk9OU1RPUF9LRVJORUw6KjoqKQorCWVjaG8gbnNlLXRhbmRlbS1uc2ske1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIE5TUi0/Ok5PTlNUT1BfS0VSTkVMOio6KikKKwllY2hvIG5zci10YW5kZW0tbnNrJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOk5vblN0b3AtVVg6KjoqKQorCWVjaG8gbWlwcy1jb21wYXEtbm9uc3RvcHV4CisJZXhpdCA7OworICAgIEJTMjAwMDpQT1NJWCo6KjoqKQorCWVjaG8gYnMyMDAwLXNpZW1lbnMtc3lzdgorCWV4aXQgOzsKKyAgICBEUy8qOlVOSVhfU3lzdGVtX1Y6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS0ke1VOQU1FX1NZU1RFTX0tJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlBsYW45Oio6KikKKwkjICJ1bmFtZSAtbSIgaXMgbm90IGNvbnNpc3RlbnQsIHNvIHVzZSAkY3B1dHlwZSBpbnN0ZWFkLiAzODYKKwkjIGlzIGNvbnZlcnRlZCB0byBpMzg2IGZvciBjb25zaXN0ZW5jeSB3aXRoIG90aGVyIHg4NgorCSMgb3BlcmF0aW5nIHN5c3RlbXMuCisJaWYgdGVzdCAiJGNwdXR5cGUiID0gIjM4NiI7IHRoZW4KKwkgICAgVU5BTUVfTUFDSElORT1pMzg2CisJZWxzZQorCSAgICBVTkFNRV9NQUNISU5FPSIkY3B1dHlwZSIKKwlmaQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXBsYW45CisJZXhpdCA7OworICAgICo6VE9QUy0xMDoqOiopCisJZWNobyBwZHAxMC11bmtub3duLXRvcHMxMAorCWV4aXQgOzsKKyAgICAqOlRFTkVYOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdGVuZXgKKwlleGl0IDs7CisgICAgS1MxMDpUT1BTLTIwOio6KiB8IEtMMTA6VE9QUy0yMDoqOiogfCBUWVBFNDpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLWRlYy10b3BzMjAKKwlleGl0IDs7CisgICAgWEtMLTE6VE9QUy0yMDoqOiogfCBUWVBFNTpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLXhrbC10b3BzMjAKKwlleGl0IDs7CisgICAgKjpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdG9wczIwCisJZXhpdCA7OworICAgICo6SVRTOio6KikKKwllY2hvIHBkcDEwLXVua25vd24taXRzCisJZXhpdCA7OworICAgIFNFSToqOio6U0VJVVgpCisgICAgICAgIGVjaG8gbWlwcy1zZWktc2VpdXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6RHJhZ29uRmx5Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1kcmFnb25mbHlgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgCisJZXhpdCA7OworICAgICo6KlZNUzoqOiopCisgICAgCVVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtcCkgMj4vZGV2L251bGxgCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FfSIgaW4KKwkgICAgQSopIGVjaG8gYWxwaGEtZGVjLXZtcyA7IGV4aXQgOzsKKwkgICAgSSopIGVjaG8gaWE2NC1kZWMtdm1zIDsgZXhpdCA7OworCSAgICBWKikgZWNobyB2YXgtZGVjLXZtcyA7IGV4aXQgOzsKKwllc2FjIDs7CisgICAgKjpYRU5JWDoqOlN5c1YpCisJZWNobyBpMzg2LXBjLXhlbml4CisJZXhpdCA7OworICAgIGkqODY6c2t5b3M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1za3lvc2BlY2hvICR7VU5BTUVfUkVMRUFTRX1gIHwgc2VkIC1lICdzLyAuKiQvLycKKwlleGl0IDs7CisgICAgaSo4NjpyZG9zOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtcmRvcworCWV4aXQgOzsKKyAgICBpKjg2OkFST1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1hcm9zCisJZXhpdCA7OworZXNhYworCisjZWNobyAnKE5vIHVuYW1lIGNvbW1hbmQgb3IgdW5hbWUgb3V0cHV0IG5vdCByZWNvZ25pemVkLiknIDE+JjIKKyNlY2hvICIke1VOQU1FX01BQ0hJTkV9OiR7VU5BTUVfU1lTVEVNfToke1VOQU1FX1JFTEVBU0V9OiR7VU5BTUVfVkVSU0lPTn0iIDE+JjIKKworZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorY2F0ID4kZHVtbXkuYyA8PEVPRgorI2lmZGVmIF9TRVFVRU5UXworIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyMgaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNlbmRpZgorbWFpbiAoKQoreworI2lmIGRlZmluZWQgKHNvbnkpCisjaWYgZGVmaW5lZCAoTUlQU0VCKQorICAvKiBCRkQgd2FudHMgImJzZCIgaW5zdGVhZCBvZiAibmV3c29zIi4gIFBlcmhhcHMgQkZEIHNob3VsZCBiZSBjaGFuZ2VkLAorICAgICBJIGRvbid0IGtub3cuLi4uICAqLworICBwcmludGYgKCJtaXBzLXNvbnktYnNkXG4iKTsgZXhpdCAoMCk7CisjZWxzZQorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorICBwcmludGYgKCJtNjhrLXNvbnktbmV3c29zJXNcbiIsCisjaWZkZWYgTkVXU09TNAorICAgICAgICAgICI0IgorI2Vsc2UKKwkgICIiCisjZW5kaWYKKyAgICAgICAgICk7IGV4aXQgKDApOworI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fYXJtKSAmJiBkZWZpbmVkIChfX2Fjb3JuKSAmJiBkZWZpbmVkIChfX3VuaXgpCisgIHByaW50ZiAoImFybS1hY29ybi1yaXNjaXhcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoaHAzMDApICYmICFkZWZpbmVkIChocHV4KQorICBwcmludGYgKCJtNjhrLWhwLWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChOZVhUKQorI2lmICFkZWZpbmVkIChfX0FSQ0hJVEVDVFVSRV9fKQorI2RlZmluZSBfX0FSQ0hJVEVDVFVSRV9fICJtNjhrIgorI2VuZGlmCisgIGludCB2ZXJzaW9uOworICB2ZXJzaW9uPWAoaG9zdGluZm8gfCBzZWQgLW4gJ3MvLipOZVhUIE1hY2ggXChbMC05XSpcKS4qL1wxL3AnKSAyPi9kZXYvbnVsbGA7CisgIGlmICh2ZXJzaW9uIDwgNCkKKyAgICBwcmludGYgKCIlcy1uZXh0LW5leHRzdGVwJWRcbiIsIF9fQVJDSElURUNUVVJFX18sIHZlcnNpb24pOworICBlbHNlCisgICAgcHJpbnRmICgiJXMtbmV4dC1vcGVuc3RlcCVkXG4iLCBfX0FSQ0hJVEVDVFVSRV9fLCB2ZXJzaW9uKTsKKyAgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKE1VTFRJTUFYKSB8fCBkZWZpbmVkIChuMTYpCisjaWYgZGVmaW5lZCAoVU1BWFYpCisgIHByaW50ZiAoIm5zMzJrLWVuY29yZS1zeXN2XG4iKTsgZXhpdCAoMCk7CisjZWxzZQorI2lmIGRlZmluZWQgKENNVSkKKyAgcHJpbnRmICgibnMzMmstZW5jb3JlLW1hY2hcbiIpOyBleGl0ICgwKTsKKyNlbHNlCisgIHByaW50ZiAoIm5zMzJrLWVuY29yZS1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fMzg2QlNEX18pCisgIHByaW50ZiAoImkzODYtcGMtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKHNlcXVlbnQpCisjaWYgZGVmaW5lZCAoaTM4NikKKyAgcHJpbnRmICgiaTM4Ni1zZXF1ZW50LWR5bml4XG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkIChuczMyMDAwKQorICBwcmludGYgKCJuczMyay1zZXF1ZW50LWR5bml4XG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX1NFUVVFTlRfKQorICAgIHN0cnVjdCB1dHNuYW1lIHVuOworCisgICAgdW5hbWUoJnVuKTsKKworICAgIGlmIChzdHJuY21wKHVuLnZlcnNpb24sICJWMiIsIDIpID09IDApIHsKKwlwcmludGYgKCJpMzg2LXNlcXVlbnQtcHR4MlxuIik7IGV4aXQgKDApOworICAgIH0KKyAgICBpZiAoc3RybmNtcCh1bi52ZXJzaW9uLCAiVjEiLCAyKSA9PSAwKSB7IC8qIFhYWCBpcyBWMSBjb3JyZWN0PyAqLworCXByaW50ZiAoImkzODYtc2VxdWVudC1wdHgxXG4iKTsgZXhpdCAoMCk7CisgICAgfQorICAgIHByaW50ZiAoImkzODYtc2VxdWVudC1wdHhcbiIpOyBleGl0ICgwKTsKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkICh2YXgpCisjIGlmICFkZWZpbmVkICh1bHRyaXgpCisjICBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyMgIGlmIGRlZmluZWQgKEJTRCkKKyMgICBpZiBCU0QgPT0gNDMKKyAgICAgIHByaW50ZiAoInZheC1kZWMtYnNkNC4zXG4iKTsgZXhpdCAoMCk7CisjICAgZWxzZQorIyAgICBpZiBCU0QgPT0gMTk5MDA2CisgICAgICBwcmludGYgKCJ2YXgtZGVjLWJzZDQuM3Jlbm9cbiIpOyBleGl0ICgwKTsKKyMgICAgZWxzZQorICAgICAgcHJpbnRmICgidmF4LWRlYy1ic2RcbiIpOyBleGl0ICgwKTsKKyMgICAgZW5kaWYKKyMgICBlbmRpZgorIyAgZWxzZQorICAgIHByaW50ZiAoInZheC1kZWMtYnNkXG4iKTsgZXhpdCAoMCk7CisjICBlbmRpZgorIyBlbHNlCisgICAgcHJpbnRmICgidmF4LWRlYy11bHRyaXhcbiIpOyBleGl0ICgwKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoYWxsaWFudCkgJiYgZGVmaW5lZCAoaTg2MCkKKyAgcHJpbnRmICgiaTg2MC1hbGxpYW50LWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyAgZXhpdCAoMSk7Cit9CitFT0YKKworJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgMj4vZGV2L251bGwgJiYgU1lTVEVNX05BTUU9YCRkdW1teWAgJiYKKwl7IGVjaG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7IH0KKworIyBBcG9sbG9zIHB1dCB0aGUgc3lzdGVtIHR5cGUgaW4gdGhlIGVudmlyb25tZW50LgorCit0ZXN0IC1kIC91c3IvYXBvbGxvICYmIHsgZWNobyAke0lTUH0tYXBvbGxvLSR7U1lTVFlQRX07IGV4aXQ7IH0KKworIyBDb252ZXggdmVyc2lvbnMgdGhhdCBwcmVkYXRlIHVuYW1lIGNhbiB1c2UgZ2V0c3lzaW5mbygxKQorCitpZiBbIC14IC91c3IvY29udmV4L2dldHN5c2luZm8gXQordGhlbgorICAgIGNhc2UgYGdldHN5c2luZm8gLWYgY3B1X3R5cGVgIGluCisgICAgYzEqKQorCWVjaG8gYzEtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBjMiopCisJaWYgZ2V0c3lzaW5mbyAtZiBzY2FsYXJfYWNjCisJdGhlbiBlY2hvIGMzMi1jb252ZXgtYnNkCisJZWxzZSBlY2hvIGMyLWNvbnZleC1ic2QKKwlmaQorCWV4aXQgOzsKKyAgICBjMzQqKQorCWVjaG8gYzM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgYzM4KikKKwllY2hvIGMzOC1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIGM0KikKKwllY2hvIGM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgZXNhYworZmkKKworY2F0ID4mMiA8PEVPRgorJDA6IHVuYWJsZSB0byBndWVzcyBzeXN0ZW0gdHlwZQorCitUaGlzIHNjcmlwdCwgbGFzdCBtb2RpZmllZCAkdGltZXN0YW1wLCBoYXMgZmFpbGVkIHRvIHJlY29nbml6ZQordGhlIG9wZXJhdGluZyBzeXN0ZW0geW91IGFyZSB1c2luZy4gSXQgaXMgYWR2aXNlZCB0aGF0IHlvdQorZG93bmxvYWQgdGhlIG1vc3QgdXAgdG8gZGF0ZSB2ZXJzaW9uIG9mIHRoZSBjb25maWcgc2NyaXB0cyBmcm9tCisKKyAgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcztoYj1IRUFECithbmQKKyAgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5zdWI7aGI9SEVBRAorCitJZiB0aGUgdmVyc2lvbiB5b3UgcnVuICgkMCkgaXMgYWxyZWFkeSB1cCB0byBkYXRlLCBwbGVhc2UKK3NlbmQgdGhlIGZvbGxvd2luZyBkYXRhIGFuZCBhbnkgaW5mb3JtYXRpb24geW91IHRoaW5rIG1pZ2h0IGJlCitwZXJ0aW5lbnQgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+IGluIG9yZGVyIHRvIHByb3ZpZGUgdGhlIG5lZWRlZAoraW5mb3JtYXRpb24gdG8gaGFuZGxlIHlvdXIgc3lzdGVtLgorCitjb25maWcuZ3Vlc3MgdGltZXN0YW1wID0gJHRpbWVzdGFtcAorCit1bmFtZSAtbSA9IGAodW5hbWUgLW0pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1yID0gYCh1bmFtZSAtcikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXMgPSBgKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtdiA9IGAodW5hbWUgLXYpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKworL3Vzci9iaW4vdW5hbWUgLXAgPSBgKC91c3IvYmluL3VuYW1lIC1wKSAyPi9kZXYvbnVsbGAKKy9iaW4vdW5hbWUgLVggICAgID0gYCgvYmluL3VuYW1lIC1YKSAyPi9kZXYvbnVsbGAKKworaG9zdGluZm8gICAgICAgICAgICAgICA9IGAoaG9zdGluZm8pIDI+L2Rldi9udWxsYAorL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGxgCisvdXNyL2Jpbi9hcmNoIC1rICAgICAgID0gYCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbGAKKy9iaW4vYXJjaCAgICAgICAgICAgICAgPSBgKC9iaW4vYXJjaCkgMj4vZGV2L251bGxgCisvdXNyL2Jpbi9vc2xldmVsICAgICAgID0gYCgvdXNyL2Jpbi9vc2xldmVsKSAyPi9kZXYvbnVsbGAKKy91c3IvY29udmV4L2dldHN5c2luZm8gPSBgKC91c3IvY29udmV4L2dldHN5c2luZm8pIDI+L2Rldi9udWxsYAorCitVTkFNRV9NQUNISU5FID0gJHtVTkFNRV9NQUNISU5FfQorVU5BTUVfUkVMRUFTRSA9ICR7VU5BTUVfUkVMRUFTRX0KK1VOQU1FX1NZU1RFTSAgPSAke1VOQU1FX1NZU1RFTX0KK1VOQU1FX1ZFUlNJT04gPSAke1VOQU1FX1ZFUlNJT059CitFT0YKKworZXhpdCAxCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJ0aW1lc3RhbXA9JyIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkIgorIyB0aW1lLXN0YW1wLWVuZDogIiciCisjIEVuZDoKZGlmZiAtLWdpdCBhL2NvbmZpZy5oLmluIGIvY29uZmlnLmguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM5NmRjNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy5oLmluCkBAIC0wLDAgKzEsMzkzIEBACisvKiBjb25maWcuaC5pbi4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZS5hYyBieSBhdXRvaGVhZGVyLiAgKi8KKworLyogRGVmaW5lIGlmIGJ1aWxkaW5nIHVuaXZlcnNhbCAoaW50ZXJuYWwgaGVscGVyIG1hY3JvKSAqLworI3VuZGVmIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRAorCisvKiBwb2xsIGRvZXNuJ3Qgd29yayBvbiBkZXZpY2VzICovCisjdW5kZWYgQlJPS0VOX1BPTEwKKworLyogRGVmaW5lIHRvIDEgaWYgdHJhbnNsYXRpb24gb2YgcHJvZ3JhbSBtZXNzYWdlcyB0byB0aGUgdXNlcidzIG5hdGl2ZQorICAgbGFuZ3VhZ2UgaXMgcmVxdWVzdGVkLiAqLworI3VuZGVmIEVOQUJMRV9OTFMKKworLyogU3VidW5pdCBwcm90b2NvbCByZXN1bHQgb3V0cHV0ICovCisjdW5kZWYgRU5BQkxFX1NVQlVOSVQKKworLyogZ2V0dGV4dCBwYWNrYWdlIG5hbWUgKi8KKyN1bmRlZiBHRVRURVhUX1BBQ0tBR0UKKworLyogZGF0YSBkaXIgKi8KKyN1bmRlZiBHU1RfREFUQURJUgorCisvKiBEZWZpbmUgaWYgb3B0aW9uIHBhcnNpbmcgaXMgZGlzYWJsZWQgKi8KKyN1bmRlZiBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lORworCisvKiBEZWZpbmUgaWYgcGlwZWxpbmUgcGFyc2luZyBjb2RlIGlzIGRpc2FibGVkICovCisjdW5kZWYgR1NUX0RJU0FCTEVfUEFSU0UKKworLyogRXh0cmEgcGxhdGZvcm0gc3BlY2lmaWMgcGx1Z2luIHN1ZmZpeCAqLworI3VuZGVmIEdTVF9FWFRSQV9NT0RVTEVfU1VGRklYCisKKy8qIG1hY3JvIHRvIHVzZSB0byBzaG93IGZ1bmN0aW9uIG5hbWUgKi8KKyN1bmRlZiBHU1RfRlVOQ1RJT04KKworLyogRGVmaW5lZCBpZiBnY292IGlzIGVuYWJsZWQgdG8gZm9yY2UgYSByZWJ1aWxkIGR1ZSB0byBjb25maWcuaCBjaGFuZ2luZyAqLworI3VuZGVmIEdTVF9HQ09WX0VOQUJMRUQKKworLyogRGVmaW5lZCB3aGVuIHJlZ2lzdHJ5IHNjYW5uaW5nIHRocm91Z2ggZm9yayBpcyB1bnNhZmUgKi8KKyN1bmRlZiBHU1RfSEFWRV9VTlNBRkVfRk9SSworCisvKiBEZWZhdWx0IGVycm9ybGV2ZWwgdG8gdXNlICovCisjdW5kZWYgR1NUX0xFVkVMX0RFRkFVTFQKKworLyogR1N0cmVhbWVyIGxpY2Vuc2UgKi8KKyN1bmRlZiBHU1RfTElDRU5TRQorCisvKiBsaWJyYXJ5IG1ham9yLm1pbm9yIHZlcnNpb24gKi8KKyN1bmRlZiBHU1RfTUFKT1JNSU5PUgorCisvKiBwYWNrYWdlIG5hbWUgaW4gcGx1Z2lucyAqLworI3VuZGVmIEdTVF9QQUNLQUdFX05BTUUKKworLyogcGFja2FnZSBvcmlnaW4gKi8KKyN1bmRlZiBHU1RfUEFDS0FHRV9PUklHSU4KKworLyogR1N0cmVhbWVyIHBhY2thZ2UgcmVsZWFzZSBkYXRlL3RpbWUgZm9yIHBsdWdpbnMgYXMgWVlZWS1NTS1ERCAqLworI3VuZGVmIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUKKworLyogbG9jYXRpb24gb2YgdGhlIGluc3RhbGxlZCBnc3QtcGx1Z2luLXNjYW5uZXIgKi8KKyN1bmRlZiBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBNYWNPUyBYIGZ1bmN0aW9uIENGTG9jYWxlQ29weUN1cnJlbnQgaW4gdGhlCisgICBDb3JlRm91bmRhdGlvbiBmcmFtZXdvcmsuICovCisjdW5kZWYgSEFWRV9DRkxPQ0FMRUNPUFlDVVJSRU5UCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBNYWNPUyBYIGZ1bmN0aW9uIENGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUgaW4KKyAgIHRoZSBDb3JlRm91bmRhdGlvbiBmcmFtZXdvcmsuICovCisjdW5kZWYgSEFWRV9DRlBSRUZFUkVOQ0VTQ09QWUFQUFZBTFVFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2xvY2tfZ2V0dGltZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9DTE9DS19HRVRUSU1FCisKKy8qIERlZmluZSBpZiB0aGUgaG9zdCBDUFUgaXMgYW4gQWxwaGEgKi8KKyN1bmRlZiBIQVZFX0NQVV9BTFBIQQorCisvKiBEZWZpbmUgaWYgdGhlIGhvc3QgQ1BVIGlzIGFuIEFSTSAqLworI3VuZGVmIEhBVkVfQ1BVX0FSTQorCisvKiBEZWZpbmUgaWYgdGhlIGhvc3QgQ1BVIGlzIGEgQ1JJUyAqLworI3VuZGVmIEhBVkVfQ1BVX0NSSVMKKworLyogRGVmaW5lIGlmIHRoZSBob3N0IENQVSBpcyBhIENSSVN2MzIgKi8KKyN1bmRlZiBIQVZFX0NQVV9DUklTVjMyCisKKy8qIERlZmluZSBpZiB0aGUgaG9zdCBDUFUgaXMgYSBIUFBBICovCisjdW5kZWYgSEFWRV9DUFVfSFBQQQorCisvKiBEZWZpbmUgaWYgdGhlIGhvc3QgQ1BVIGlzIGFuIHg4NiAqLworI3VuZGVmIEhBVkVfQ1BVX0kzODYKKworLyogRGVmaW5lIGlmIHRoZSBob3N0IENQVSBpcyBhIElBNjQgKi8KKyN1bmRlZiBIQVZFX0NQVV9JQTY0CisKKy8qIERlZmluZSBpZiB0aGUgaG9zdCBDUFUgaXMgYSBNNjhLICovCisjdW5kZWYgSEFWRV9DUFVfTTY4SworCisvKiBEZWZpbmUgaWYgdGhlIGhvc3QgQ1BVIGlzIGEgTUlQUyAqLworI3VuZGVmIEhBVkVfQ1BVX01JUFMKKworLyogRGVmaW5lIGlmIHRoZSBob3N0IENQVSBpcyBhIFBvd2VyUEMgKi8KKyN1bmRlZiBIQVZFX0NQVV9QUEMKKworLyogRGVmaW5lIGlmIHRoZSBob3N0IENQVSBpcyBhIDY0IGJpdCBQb3dlclBDICovCisjdW5kZWYgSEFWRV9DUFVfUFBDNjQKKworLyogRGVmaW5lIGlmIHRoZSBob3N0IENQVSBpcyBhIFMzOTAgKi8KKyN1bmRlZiBIQVZFX0NQVV9TMzkwCisKKy8qIERlZmluZSBpZiB0aGUgaG9zdCBDUFUgaXMgYSBTUEFSQyAqLworI3VuZGVmIEhBVkVfQ1BVX1NQQVJDCisKKy8qIERlZmluZSBpZiB0aGUgaG9zdCBDUFUgaXMgYSB4ODZfNjQgKi8KKyN1bmRlZiBIQVZFX0NQVV9YODZfNjQKKworLyogRGVmaW5lIGlmIHRoZSBHTlUgZGNnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC4KKyAgICovCisjdW5kZWYgSEFWRV9EQ0dFVFRFWFQKKworLyogRGVmaW5lZCBpZiB3ZSBoYXZlIGRsYWRkciAoKSAqLworI3VuZGVmIEhBVkVfRExBRERSCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGxmY24uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ETEZDTl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmdldHBvcycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9GR0VUUE9TCisKKy8qIERlZmluZSB0byAxIGlmIGZzZWVrbyAoYW5kIHByZXN1bWFibHkgZnRlbGxvKSBleGlzdHMgYW5kIGlzIGRlY2xhcmVkLiAqLworI3VuZGVmIEhBVkVfRlNFRUtPCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZnNldHBvcycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9GU0VUUE9TCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZnRlbGxvJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0ZURUxMTworCisvKiBkZWZpbmVkIGlmIHRoZSBjb21waWxlciBpbXBsZW1lbnRzIF9fZnVuY19fICovCisjdW5kZWYgSEFWRV9GVU5DCisKKy8qIGRlZmluZWQgaWYgdGhlIGNvbXBpbGVyIGltcGxlbWVudHMgX19GVU5DVElPTl9fICovCisjdW5kZWYgSEFWRV9GVU5DVElPTgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHBhZ2VzaXplJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFBBR0VTSVpFCisKKy8qIERlZmluZSBpZiB0aGUgR05VIGdldHRleHQoKSBmdW5jdGlvbiBpcyBhbHJlYWR5IHByZXNlbnQgb3IgcHJlaW5zdGFsbGVkLiAqLworI3VuZGVmIEhBVkVfR0VUVEVYVAorCisvKiBIYXZlIEdNUCBsaWJyYXJ5ICovCisjdW5kZWYgSEFWRV9HTVAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnbXRpbWVfcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HTVRJTUVfUgorCisvKiBIYXZlIEdTTCBsaWJyYXJ5ICovCisjdW5kZWYgSEFWRV9HU0wKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBpY29udigpIGZ1bmN0aW9uIGFuZCBpdCB3b3Jrcy4gKi8KKyN1bmRlZiBIQVZFX0lDT05WCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9JTlRUWVBFU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbnNsJyBsaWJyYXJ5ICgtbG5zbCkuICovCisjdW5kZWYgSEFWRV9MSUJOU0wKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZXNvbHYnIGxpYnJhcnkgKC1scmVzb2x2KS4gKi8KKyN1bmRlZiBIQVZFX0xJQlJFU09MVgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNvY2tldCcgbGlicmFyeSAoLWxzb2NrZXQpLiAqLworI3VuZGVmIEhBVkVfTElCU09DS0VUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbG9jYWx0aW1lX3InIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTE9DQUxUSU1FX1IKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtZW1vcnkuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9NRU1PUllfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgYG1tYXAnIHN5c3RlbSBjYWxsLiAqLworI3VuZGVmIEhBVkVfTU1BUAorCisvKiBIYXZlIGEgbW9ub3RvbmljIGNsb2NrICovCisjdW5kZWYgSEFWRV9NT05PVE9OSUNfQ0xPQ0sKKworLyogRGVmaW5lZCBpZiBjb21waWxpbmcgZm9yIE9TWCAqLworI3VuZGVmIEhBVkVfT1NYCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcG9sbCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9QT0xMCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcG9zaXhfbWVtYWxpZ24nIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUE9TSVhfTUVNQUxJR04KKworLyogSGF2ZSBwb3NpeCB0aW1lcnMgKi8KKyN1bmRlZiBIQVZFX1BPU0lYX1RJTUVSUworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBwb2xsJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1BQT0xMCisKKy8qIGRlZmluZWQgaWYgdGhlIGNvbXBpbGVyIGltcGxlbWVudHMgX19QUkVUVFlfRlVOQ1RJT05fXyAqLworI3VuZGVmIEhBVkVfUFJFVFRZX0ZVTkNUSU9OCisKKy8qIERlZmluZWQgaWYgd2UgaGF2ZSBwcmludGYgc3BlY2lmaWVyIGV4dGVuc2lvbnMgYXZhaWxhYmxlICovCisjdW5kZWYgSEFWRV9QUklOVEZfRVhURU5TSU9OCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cHJvY2Vzcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1BST0NFU1NfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBzZWxlY3QnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUFNFTEVDVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHB0aHJlYWQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9QVEhSRUFEX0gKKworLyogRGVmaW5lIGlmIFJEVFNDIGlzIGF2YWlsYWJsZSAqLworI3VuZGVmIEhBVkVfUkRUU0MKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZWdpc3Rlcl9wcmludGZfZnVuY3Rpb24nIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUkVHSVNURVJfUFJJTlRGX0ZVTkNUSU9OCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmVnaXN0ZXJfcHJpbnRmX3NwZWNpZmllcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9SRUdJU1RFUl9QUklOVEZfU1BFQ0lGSUVSCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2lnYWN0aW9uJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NJR0FDVElPTgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NURElOVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW9fZXh0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RESU9fRVhUX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVERMSUJfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVFJJTkdTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVFJJTkdfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9wYXJhbS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19QQVJBTV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3ByY3RsLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1BSQ1RMX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc29ja2V0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfU1RBVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWVzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1RJTUVTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19USU1FX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfVFlQRVNfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy91dHNuYW1lLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1VUU05BTUVfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy93YWl0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1dBSVRfSAorCisvKiBIYXZlIHRtX2dtdG9mZiBmaWVsZCBpbiBzdHJ1Y3QgdG0gKi8KKyN1bmRlZiBIQVZFX1RNX0dNVE9GRgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVjb250ZXh0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfVUNPTlRFWFRfSAorCisvKiBIYXZlIF9fdWludDEyOF90IHR5cGUgKi8KKyN1bmRlZiBIQVZFX1VJTlQxMjhfVAorCisvKiBkZWZpbmVkIGlmIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzIHdvcmtzIGNvcnJlY3RseSAqLworI3VuZGVmIEhBVkVfVU5BTElHTkVEX0FDQ0VTUworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1VOSVNURF9ICisKKy8qIERlZmluZSBpZiB2YWxncmluZCBzaG91bGQgYmUgdXNlZCAqLworI3VuZGVmIEhBVkVfVkFMR1JJTkQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx2YWxncmluZC92YWxncmluZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1ZBTEdSSU5EX1ZBTEdSSU5EX0gKKworLyogRGVmaW5lZCBpZiBjb21waWxpbmcgZm9yIFdpbmRvd3MgKi8KKyN1bmRlZiBIQVZFX1dJTjMyCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d2luc29jazIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9XSU5TT0NLMl9ICisKKy8qIHRoZSBob3N0IENQVSAqLworI3VuZGVmIEhPU1RfQ1BVCisKKy8qIGxpYnJhcnkgZGlyICovCisjdW5kZWYgTElCRElSCisKKy8qIGdldHRleHQgbG9jYWxlIGRpciAqLworI3VuZGVmIExPQ0FMRURJUgorCisvKiBEZWZpbmUgdG8gdGhlIHN1Yi1kaXJlY3RvcnkgaW4gd2hpY2ggbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLgorICAgKi8KKyN1bmRlZiBMVF9PQkpESVIKKworLyogTWVtb3J5IGFsaWdubWVudCB0byB1c2UgKi8KKyN1bmRlZiBNRU1PUllfQUxJR05NRU5UCisKKy8qIE1lbW9yeSBhbGlnbm1lbnQgYnkgbWFsbG9jIGRlZmF1bHQgKi8KKyN1bmRlZiBNRU1PUllfQUxJR05NRU5UX01BTExPQworCisvKiBNZW1vcnkgYWxpZ25tZW50IGJ5IHBhZ2VzaXplICovCisjdW5kZWYgTUVNT1JZX0FMSUdOTUVOVF9QQUdFU0laRQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgbm8gbmF0aXZlIGluZXRfYXRvbigpIGZ1bmN0aW9uLiAqLworI3VuZGVmIE5PX0lORVRfQVRPTgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3VyIEMgY29tcGlsZXIgZG9lc24ndCBhY2NlcHQgLWMgYW5kIC1vIHRvZ2V0aGVyLiAqLworI3VuZGVmIE5PX01JTlVTX0NfTUlOVVNfTworCisvKiBOYW1lIG9mIHBhY2thZ2UgKi8KKyN1bmRlZiBQQUNLQUdFCisKKy8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLworI3VuZGVmIFBBQ0tBR0VfQlVHUkVQT1JUCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX05BTUUKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfU1RSSU5HCisKKy8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1RBUk5BTUUKKworLyogRGVmaW5lIHRvIHRoZSBob21lIHBhZ2UgZm9yIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1VSTAorCisvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfVkVSU0lPTgorCisvKiBkaXJlY3Rvcnkgd2hlcmUgcGx1Z2lucyBhcmUgbG9jYXRlZCAqLworI3VuZGVmIFBMVUdJTkRJUgorCisvKiBUaGUgc2l6ZSBvZiBgY2hhcicsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyN1bmRlZiBTSVpFT0ZfQ0hBUgorCisvKiBUaGUgc2l6ZSBvZiBgaW50JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI3VuZGVmIFNJWkVPRl9JTlQKKworLyogVGhlIHNpemUgb2YgYGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX0xPTkcKKworLyogVGhlIHNpemUgb2YgYHNob3J0JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI3VuZGVmIFNJWkVPRl9TSE9SVAorCisvKiBUaGUgc2l6ZSBvZiBgdm9pZConLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX1ZPSURQCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLworI3VuZGVmIFNURENfSEVBREVSUworCisvKiBEZWZpbmUgaWYgd2Ugc2hvdWxkIHBvaXNvbiBkZWFsbG9jYXRlZCBtZW1vcnkgKi8KKyN1bmRlZiBVU0VfUE9JU09OSU5HCisKKy8qIFZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2UgKi8KKyN1bmRlZiBWRVJTSU9OCisKKy8qIERlZmluZSBXT1JEU19CSUdFTkRJQU4gdG8gMSBpZiB5b3VyIHByb2Nlc3NvciBzdG9yZXMgd29yZHMgd2l0aCB0aGUgbW9zdAorICAgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdCAobGlrZSBNb3Rvcm9sYSBhbmQgU1BBUkMsIHVubGlrZSBJbnRlbCkuICovCisjaWYgZGVmaW5lZCBBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQKKyMgaWYgZGVmaW5lZCBfX0JJR19FTkRJQU5fXworIyAgZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCisjIGVuZGlmCisjZWxzZQorIyBpZm5kZWYgV09SRFNfQklHRU5ESUFOCisjICB1bmRlZiBXT1JEU19CSUdFTkRJQU4KKyMgZW5kaWYKKyNlbmRpZgorCisvKiBOdW1iZXIgb2YgYml0cyBpbiBhIGZpbGUgb2Zmc2V0LCBvbiBob3N0cyB3aGVyZSB0aGlzIGlzIHNldHRhYmxlLiAqLworI3VuZGVmIF9GSUxFX09GRlNFVF9CSVRTCisKKy8qIERlZmluZSB0byAxIHRvIG1ha2UgZnNlZWtvIHZpc2libGUgb24gc29tZSBob3N0cyAoZS5nLiBnbGliYyAyLjIpLiAqLworI3VuZGVmIF9MQVJHRUZJTEVfU09VUkNFCisKKy8qIERlZmluZSBmb3IgbGFyZ2UgZmlsZXMsIG9uIEFJWC1zdHlsZSBob3N0cy4gKi8KKyN1bmRlZiBfTEFSR0VfRklMRVMKKworLyogV2UgbmVlZCBhdCBsZWFzdCBXaW5YUCBTUDIgZm9yIF9fc3RhdDY0ICovCisjdW5kZWYgX19NU1ZDUlRfVkVSU0lPTl9fCmRpZmYgLS1naXQgYS9jb25maWcucnBhdGggYi9jb25maWcucnBhdGgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzU0N2M2OAotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy5ycGF0aApAQCAtMCwwICsxLDY2NiBAQAorIyEgL2Jpbi9zaAorIyBPdXRwdXQgYSBzeXN0ZW0gZGVwZW5kZW50IHNldCBvZiB2YXJpYWJsZXMsIGRlc2NyaWJpbmcgaG93IHRvIHNldCB0aGUKKyMgcnVuIHRpbWUgc2VhcmNoIHBhdGggb2Ygc2hhcmVkIGxpYnJhcmllcyBpbiBhbiBleGVjdXRhYmxlLgorIworIyAgIENvcHlyaWdodCAxOTk2LTIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgVGFrZW4gZnJvbSBHTlUgbGlidG9vbCwgMjAwMQorIyAgIE9yaWdpbmFsbHkgYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2CisjCisjICAgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgICB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgICBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyMKKyMgVGhlIGZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0byB0aGlzIGZpbGUgaXMgdGhlIGNhbm9uaWNhbCBob3N0IHNwZWNpZmljYXRpb24sCisjICAgIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNCisjIG9yCisjICAgIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTQorIyBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIENDLCBHQ0MsIExERkxBR1MsIExELCB3aXRoX2dudV9sZAorIyBzaG91bGQgYmUgc2V0IGJ5IHRoZSBjYWxsZXIuCisjCisjIFRoZSBzZXQgb2YgZGVmaW5lZCB2YXJpYWJsZXMgaXMgYXQgdGhlIGVuZCBvZiB0aGlzIHNjcmlwdC4KKworIyBLbm93biBsaW1pdGF0aW9uczoKKyMgLSBPbiBJUklYIDYuNSB3aXRoIENDPSJjYyIsIHRoZSBydW4gdGltZSBzZWFyY2ggcGF0Y2ggbXVzdCBub3QgYmUgbG9uZ2VyCisjICAgdGhhbiAyNTYgYnl0ZXMsIG90aGVyd2lzZSB0aGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgZHVtcCBjb3JlLiBUaGUgb25seQorIyAgIGtub3duIHdvcmthcm91bmQgaXMgdG8gY2hvb3NlIHNob3J0ZXIgZGlyZWN0b3J5IG5hbWVzIGZvciB0aGUgYnVpbGQKKyMgICBkaXJlY3RvcnkgYW5kL29yIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgorCisjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKKyMgd2hpY2ggbmVlZHMgJy5saWInKS4KK2xpYmV4dD1hCitzaHJleHQ9LnNvCisKK2hvc3Q9IiQxIgoraG9zdF9jcHU9YGVjaG8gIiRob3N0IiB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCitob3N0X3ZlbmRvcj1gZWNobyAiJGhvc3QiIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDIvJ2AKK2hvc3Rfb3M9YGVjaG8gIiRob3N0IiB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisKKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBfTFRfQ0NfQkFTRU5BTUUuCisKK2ZvciBjY190ZW1wIGluICRDQyIiOyBkbworICBjYXNlICRjY190ZW1wIGluCisgICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OworICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7CisgICAgXC0qKSA7OworICAgICopIGJyZWFrOzsKKyAgZXNhYworZG9uZQorY2NfYmFzZW5hbWU9YGVjaG8gIiRjY190ZW1wIiB8IHNlZCAtZSAncyVeLiovJSUnYAorCisjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQy4KKword2w9CitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICB3bD0nLVdsLCcKK2Vsc2UKKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgYWl4KikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICBkYXJ3aW4qKQorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgeGxjKikKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqKQorICAgICAgOzsKKyAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIG5ld3NvczYpCisgICAgICA7OworICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICBpY2MqIHwgZWNjKikKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgICBwZ2NjIHwgcGdmNzcgfCBwZ2Y5MCkKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgICBjY2MqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICAgIGNvbW8pCisgICAgICAgICAgd2w9Jy1sb3B0PScKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorICAgICAgICAgICAgKlN1blwgQyopCisgICAgICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgcmRvcyopCisgICAgICA7OworICAgIHNvbGFyaXMqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIHN1bm9zNCopCisgICAgICB3bD0nLVFvcHRpb24gbGQgJworICAgICAgOzsKKyAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgc3lzdjQqTVAqKQorICAgICAgOzsKKyAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIHVuaWNvcyopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgdXRzNCopCisgICAgICA7OworICBlc2FjCitmaQorCisjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgQUNfTElCVE9PTF9QUk9HX0xEX1NITElCUy4KKworaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9CitoYXJkY29kZV9kaXJlY3Q9bm8KK2hhcmRjb2RlX21pbnVzX0w9bm8KKworY2FzZSAiJGhvc3Rfb3MiIGluCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCisgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICBmaQorICAgIDs7CisgIGludGVyaXgqKQorICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCisgICAgd2l0aF9nbnVfbGQ9eWVzCisgICAgOzsKKyAgb3BlbmJzZCopCisgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICA7OworZXNhYworCitsZF9zaGxpYnM9eWVzCitpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICMgU2V0IHNvbWUgZGVmYXVsdHMgZm9yIEdOVSBsZCB3aXRoIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIFRoZXNlCisgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQorICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCisgICMgVW5saWtlIGxpYnRvb2wsIHdlIHVzZSAtcnBhdGggaGVyZSwgbm90IC0tcnBhdGgsIHNpbmNlIHRoZSBkb2N1bWVudGVkCisgICMgb3B0aW9uIG9mIEdOVSBsZCBpcyBjYWxsZWQgLXJwYXRoLCBub3QgLS1ycGF0aC4KKyAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBhaXgzKiB8IGFpeDQqIHwgYWl4NSopCisgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBhbWlnYW9zKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAjIFNhbXVlbCBBLiBGYWx2byBJSSA8a2M1dGphQGRvbHBoaW4ub3BlbnByb2plY3RzLm5ldD4gcmVwb3J0cworICAgICAgIyB0aGF0IHRoZSBzZW1hbnRpY3Mgb2YgZHluYW1pYyBsaWJyYXJpZXMgb24gQW1pZ2FPUywgYXQgbGVhc3QgdXAKKyAgICAgICMgdG8gdmVyc2lvbiA0LCBpcyB0byBzaGFyZSBkYXRhIGFtb25nIG11bHRpcGxlIHByb2dyYW1zIGxpbmtlZAorICAgICAgIyB3aXRoIHRoZSBzYW1lIGR5bmFtaWMgbGlicmFyeS4gIFNpbmNlIHRoaXMgZG9lc24ndCBtYXRjaCB0aGUKKyAgICAgICMgYmVoYXZpb3Igb2Ygc2hhcmVkIGxpYnJhcmllcyBvbiBvdGhlciBwbGF0Zm9ybXMsIHdlIGNhbm5vdCB1c2UKKyAgICAgICMgdGhlbS4KKyAgICAgIGxkX3NobGlicz1ubworICAgICAgOzsKKyAgICBiZW9zKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgaW50ZXJpeFszLTldKikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgIDs7CisgICAgZ251KiB8IGxpbnV4KiB8IGsqYnNkKi1nbnUpCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgOgorICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIG5ldGJzZCopCisgICAgICA7OworICAgIHNvbGFyaXMqKQorICAgICAgaWYgJExEIC12IDI+JjEgfCBncmVwICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgorICAgICAgICAqXCBbMDFdLiogfCAqXCAyLlswLTldLiogfCAqXCAyLjFbMC01XS4qKQorICAgICAgICAgIGxkX3NobGlicz1ubworICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tcnBhdGgsJGxpYmRpcmAnCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICAgICAgZmkKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBzdW5vczQqKQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgOzsKKyAgICAqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgZXNhYworICBpZiB0ZXN0ICIkbGRfc2hsaWJzIiA9IG5vOyB0aGVuCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAgZmkKK2Vsc2UKKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgYWl4MyopCisgICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQorICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgorICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgICMgTmVpdGhlciBkaXJlY3QgaGFyZGNvZGluZyBub3Igc3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkIHdpdGggYQorICAgICAgICAjIGJyb2tlbiBjb2xsZWN0Mi4KKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisgICAgICBmaQorICAgICAgOzsKKyAgICBhaXg0KiB8IGFpeDUqKQorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorICAgICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KKyAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworICAgICAgZWxzZQorICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisgICAgICAgICMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorICAgICAgICAjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKyAgICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKyAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4NSopCisgICAgICAgICAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisgICAgICAgICAgICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgorICAgICAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZmkKKyAgICAgICAgICBkb25lCisgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQorICAgICAgICAgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKyAgICAgICAgICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJiBcCisgICAgICAgICAgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisgICAgICAgICAgdGhlbgorICAgICAgICAgICAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisgICAgICAgICAgICA6CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KKyAgICAgICAgICBmaQorICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgIGZpCisgICAgICAjIEJlZ2luIF9MVF9BQ19TWVNfTElCUEFUSF9BSVguCisgICAgICBlY2hvICdpbnQgbWFpbiAoKSB7IHJldHVybiAwOyB9JyA+IGNvbmZ0ZXN0LmMKKyAgICAgICR7Q0N9ICR7TERGTEFHU30gY29uZnRlc3QuYyAtbyBjb25mdGVzdAorICAgICAgYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QgMj4vZGV2L251bGwgfCBzZWQgLW4gLWUgJy9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsgL14wLyB7IHMvXjAgICpcKC4qXCkkL1wxLzsgcDsgfQorfSdgCisgICAgICBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCisgICAgICAgIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0IDI+L2Rldi9udWxsIHwgc2VkIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KK30nYAorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKyAgICAgICAgYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiCisgICAgICBmaQorICAgICAgcm0gLWYgY29uZnRlc3QuYyBjb25mdGVzdAorICAgICAgIyBFbmQgX0xUX0FDX1NZU19MSUJQQVRIX0FJWC4KKyAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgZWxzZQorICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworICAgICAgICBlbHNlCisgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgICA7OworICAgIGFtaWdhb3MqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgZGlmZmVyZW50IHNlbWFudGljcyBvbiB0aGUgR05VIGxkIHNlY3Rpb24KKyAgICAgIGxkX3NobGlicz1ubworICAgICAgOzsKKyAgICBic2RpWzQ1XSopCisgICAgICA7OworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisgICAgICBsaWJleHQ9bGliCisgICAgICA7OworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgeGxjKikKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgIGxkX3NobGlicz1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgZmkKKyAgICAgIDs7CisgICAgZGd1eCopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICA7OworICAgIGZyZWVic2QxKikKKyAgICAgIGxkX3NobGlicz1ubworICAgICAgOzsKKyAgICBmcmVlYnNkMi4yKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIDs7CisgICAgZnJlZWJzZDIqKQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIDs7CisgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgOzsKKyAgICBocHV4OSopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKyAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIDs7CisgICAgaHB1eDEwKikKKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKyAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBmaQorICAgICAgOzsKKyAgICBocHV4MTEqKQorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgICAgICBocHBhKjY0KnxpYTY0KikKKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKyAgICAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgIGZpCisgICAgICA7OworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisgICAgbmV0YnNkKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIDs7CisgICAgbmV3c29zNikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKyAgICBvcGVuYnNkKikKKyAgICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgICAgZWxzZQorICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgb3BlbmJzZFswMV0uKiB8IG9wZW5ic2QyLlswLTddIHwgb3BlbmJzZDIuWzAtN10uKikKKyAgICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgIGZpCisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgb3MyKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICA7OworICAgIG9zZjMqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICA7OworICAgIG9zZjQqIHwgb3NmNSopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBlbHNlCisgICAgICAgICMgQm90aCBjYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5CisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1ycGF0aCAkbGliZGlyJworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKyAgICBzb2xhcmlzKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIDs7CisgICAgc3Vub3M0KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICA7OworICAgIHN5c3Y0KQorICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgICAgICAgc25pKQorICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMgIyBpcyB0aGlzIHJlYWxseSB0cnVlPz8/CisgICAgICAgICAgOzsKKyAgICAgICAgc2llbWVucykKKyAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgICAgICA7OworICAgICAgICBtb3Rvcm9sYSkKKyAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8gI01vdG9yb2xhIG1hbnVhbCBzYXlzIHllcywgYnV0IG15IHRlc3RzIHNheSB0aGV5IGxpZQorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIHN5c3Y0LjMqKQorICAgICAgOzsKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisgICAgICAgIGxkX3NobGlicz15ZXMKKyAgICAgIGZpCisgICAgICA7OworICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bMDI0XSopCisgICAgICA7OworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tUiwkbGliZGlyYCcKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCisgICAgICA7OworICAgIHV0czQqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgOzsKKyAgICAqKQorICAgICAgbGRfc2hsaWJzPW5vCisgICAgICA7OworICBlc2FjCitmaQorCisjIENoZWNrIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcworIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIEFDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSLgorIyBVbmxpa2UgbGlidG9vbC5tNCwgaGVyZSB3ZSBkb24ndCBjYXJlIGFib3V0IF9hbGxfIG5hbWVzIG9mIHRoZSBsaWJyYXJ5LCBidXQKKyMgb25seSBhYm91dCB0aGUgb25lIHRoZSBsaW5rZXIgZmluZHMgd2hlbiBwYXNzZWQgLWxOQU1FLiBUaGlzIGlzIHRoZSBsYXN0CisjIGVsZW1lbnQgb2YgbGlicmFyeV9uYW1lc19zcGVjIGluIGxpYnRvb2wubTQsIG9yIHBvc3NpYmx5IHR3byBvZiB0aGVtIGlmIHRoZQorIyBsaW5rZXIgaGFzIHNwZWNpYWwgc2VhcmNoIHJ1bGVzLgorbGlicmFyeV9uYW1lc19zcGVjPSAgICAgICMgdGhlIGxhc3QgZWxlbWVudCBvZiBsaWJyYXJ5X25hbWVzX3NwZWMgaW4gbGlidG9vbC5tNAorbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKK2Nhc2UgIiRob3N0X29zIiBpbgorICBhaXgzKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnCisgICAgOzsKKyAgYWl4NCogfCBhaXg1KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBhbWlnYW9zKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnCisgICAgOzsKKyAgYmVvcyopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgYnNkaVs0NV0qKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICBzaHJleHQ9LmRsbAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEgJGxpYm5hbWUubGliJworICAgIDs7CisgIGRhcndpbiogfCByaGFwc29keSopCisgICAgc2hyZXh0PS5keWxpYgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGRndXgqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGZyZWVic2QxKikKKyAgICA7OworICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICBmcmVlYnNkWzEyM10qKQorICAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnIDs7CisgICAgICAqKQorICAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZ251KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaWE2NCopCisgICAgICAgIHNocmV4dD0uc28KKyAgICAgICAgOzsKKyAgICAgIGhwcGEqNjQqKQorICAgICAgICBzaHJleHQ9LnNsCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBzaHJleHQ9LnNsCisgICAgICAgIDs7CisgICAgZXNhYworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGludGVyaXhbMy05XSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgIGlyaXg1KiB8IG5vbnN0b3B1eCopCisgICAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGNhc2UgJExEIGluCisgICAgICAgICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikgbGlic3VmZj0gc2hsaWJzdWZmPSA7OworICAgICAgICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiA7OworICAgICAgICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKSBsaWJzdWZmPTY0IHNobGlic3VmZj02NCA7OworICAgICAgICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICBsaW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQorICAgIDs7CisgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAga25ldGJzZCotZ251KQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIG5ldGJzZCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgbmV3c29zNikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBudG8tcW54KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBvcGVuYnNkKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnCisgICAgOzsKKyAgb3MyKikKKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICAgIHNocmV4dD0uZGxsCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5hJworICAgIDs7CisgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICByZG9zKikKKyAgICA7OworICBzb2xhcmlzKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBzdW5vczQqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcKKyAgICA7OworICBzeXN2NCB8IHN5c3Y0LjMqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHN5c3Y0Kk1QKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICB1dHM0KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworZXNhYworCitzZWRfcXVvdGVfc3Vic3Q9J3MvXChbImAkXFxdXCkvXFxcMS9nJworZXNjYXBlZF93bD1gZWNobyAiWCR3bCIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorc2hsaWJleHQ9YGVjaG8gIiRzaHJleHQiIHwgc2VkIC1lICdzLF5cLiwsJ2AKK2VzY2FwZWRfbGlibmFtZV9zcGVjPWBlY2hvICJYJGxpYm5hbWVfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorZXNjYXBlZF9saWJyYXJ5X25hbWVzX3NwZWM9YGVjaG8gIlgkbGlicmFyeV9uYW1lc19zcGVjIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCitlc2NhcGVkX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9YGVjaG8gIlgkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorCitMQ19BTEw9QyBzZWQgLWUgJ3MvXlwoW2EtekEtWjAtOV9dKlwpPS9hY2xfY3ZfXDE9LycgPDxFT0YKKworIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgord2w9IiRlc2NhcGVkX3dsIgorCisjIFN0YXRpYyBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgImEiKS4KK2xpYmV4dD0iJGxpYmV4dCIKKworIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICJzbyIpLgorc2hsaWJleHQ9IiRzaGxpYmV4dCIKKworIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KK2xpYm5hbWVfc3BlYz0iJGVzY2FwZWRfbGlibmFtZV9zcGVjIgorCisjIExpYnJhcnkgbmFtZXMgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdoZW4gcGFzc2VkIC1sTkFNRS4KK2xpYnJhcnlfbmFtZXNfc3BlYz0iJGVzY2FwZWRfbGlicmFyeV9uYW1lc19zcGVjIgorCisjIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiRlc2NhcGVkX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiCisKKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIKKworIyBTZXQgdG8geWVzIGlmIHVzaW5nIERJUi9saWJOQU1FLnNvIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKyMgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX2RpcmVjdD0iJGhhcmRjb2RlX2RpcmVjdCIKKworIyBTZXQgdG8geWVzIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKyMgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX21pbnVzX0w9IiRoYXJkY29kZV9taW51c19MIgorCitFT0YKZGlmZiAtLWdpdCBhL2NvbmZpZy5zdWIgYi9jb25maWcuc3ViCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMyZDEyNTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWcuc3ViCkBAIC0wLDAgKzEsMTcxNCBAQAorIyEgL2Jpbi9zaAorIyBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gc3Vicm91dGluZSBzY3JpcHQuCisjICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorIyAgIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAKKyMgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwordGltZXN0YW1wPScyMDEwLTAxLTIyJworCisjIFRoaXMgZmlsZSBpcyAoaW4gcHJpbmNpcGxlKSBjb21tb24gdG8gQUxMIEdOVSBzb2Z0d2FyZS4KKyMgVGhlIHByZXNlbmNlIG9mIGEgbWFjaGluZSBpbiB0aGlzIGZpbGUgc3VnZ2VzdHMgdGhhdCBTT01FIEdOVSBzb2Z0d2FyZQorIyBjYW4gaGFuZGxlIHRoYXQgbWFjaGluZS4gIEl0IGRvZXMgbm90IGltcGx5IEFMTCBHTlUgc29mdHdhcmUgY2FuLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorIyAwMjExMC0xMzAxLCBVU0EuCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworCisjIFBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiAgU3VibWl0IGEgY29udGV4dAorIyBkaWZmIGFuZCBhIHByb3Blcmx5IGZvcm1hdHRlZCBHTlUgQ2hhbmdlTG9nIGVudHJ5LgorIworIyBDb25maWd1cmF0aW9uIHN1YnJvdXRpbmUgdG8gdmFsaWRhdGUgYW5kIGNhbm9uaWNhbGl6ZSBhIGNvbmZpZ3VyYXRpb24gdHlwZS4KKyMgU3VwcGx5IHRoZSBzcGVjaWZpZWQgY29uZmlndXJhdGlvbiB0eXBlIGFzIGFuIGFyZ3VtZW50LgorIyBJZiBpdCBpcyBpbnZhbGlkLCB3ZSBwcmludCBhbiBlcnJvciBtZXNzYWdlIG9uIHN0ZGVyciBhbmQgZXhpdCB3aXRoIGNvZGUgMS4KKyMgT3RoZXJ3aXNlLCB3ZSBwcmludCB0aGUgY2Fub25pY2FsIGNvbmZpZyB0eXBlIG9uIHN0ZG91dCBhbmQgc3VjY2VlZC4KKworIyBZb3UgY2FuIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBzY3JpcHQgZnJvbToKKyMgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5zdWI7aGI9SEVBRAorCisjIFRoaXMgZmlsZSBpcyBzdXBwb3NlZCB0byBiZSB0aGUgc2FtZSBmb3IgYWxsIEdOVSBwYWNrYWdlcworIyBhbmQgcmVjb2duaXplIGFsbCB0aGUgQ1BVIHR5cGVzLCBzeXN0ZW0gdHlwZXMgYW5kIGFsaWFzZXMKKyMgdGhhdCBhcmUgbWVhbmluZ2Z1bCB3aXRoICphbnkqIEdOVSBzb2Z0d2FyZS4KKyMgRWFjaCBwYWNrYWdlIGlzIHJlc3BvbnNpYmxlIGZvciByZXBvcnRpbmcgd2hpY2ggdmFsaWQgY29uZmlndXJhdGlvbnMKKyMgaXQgZG9lcyBub3Qgc3VwcG9ydC4gIFRoZSB1c2VyIHNob3VsZCBiZSBhYmxlIHRvIGRpc3Rpbmd1aXNoCisjIGEgZmFpbHVyZSB0byBzdXBwb3J0IGEgdmFsaWQgY29uZmlndXJhdGlvbiBmcm9tIGEgbWVhbmluZ2xlc3MKKyMgY29uZmlndXJhdGlvbi4KKworIyBUaGUgZ29hbCBvZiB0aGlzIGZpbGUgaXMgdG8gbWFwIGFsbCB0aGUgdmFyaW91cyB2YXJpYXRpb25zIG9mIGEgZ2l2ZW4KKyMgbWFjaGluZSBzcGVjaWZpY2F0aW9uIGludG8gYSBzaW5nbGUgc3BlY2lmaWNhdGlvbiBpbiB0aGUgZm9ybToKKyMJQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0KKyMgb3IgaW4gc29tZSBjYXNlcywgdGhlIG5ld2VyIGZvdXItcGFydCBmb3JtOgorIwlDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU0KKyMgSXQgaXMgd3JvbmcgdG8gZWNobyBhbnkgb3RoZXIgdHlwZSBvZiBzcGVjaWZpY2F0aW9uLgorCittZT1gZWNobyAiJDAiIHwgc2VkIC1lICdzLC4qLywsJ2AKKwordXNhZ2U9IlwKK1VzYWdlOiAkMCBbT1BUSU9OXSBDUFUtTUZSLU9QU1lTCisgICAgICAgJDAgW09QVElPTl0gQUxJQVMKKworQ2Fub25pY2FsaXplIGEgY29uZmlndXJhdGlvbiBuYW1lLgorCitPcGVyYXRpb24gbW9kZXM6CisgIC1oLCAtLWhlbHAgICAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtdCwgLS10aW1lLXN0YW1wICAgcHJpbnQgZGF0ZSBvZiBsYXN0IG1vZGlmaWNhdGlvbiwgdGhlbiBleGl0CisgIC12LCAtLXZlcnNpb24gICAgICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisKK1JlcG9ydCBidWdzIGFuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4iCisKK3ZlcnNpb249IlwKK0dOVSBjb25maWcuc3ViICgkdGltZXN0YW1wKQorCitDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KK3dhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKKworaGVscD0iCitUcnkgXGAkbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisKKyMgUGFyc2UgY29tbWFuZCBsaW5lCit3aGlsZSB0ZXN0ICQjIC1ndCAwIDsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC0tdGltZS1zdGFtcCB8IC0tdGltZSogfCAtdCApCisgICAgICAgZWNobyAiJHRpbWVzdGFtcCIgOyBleGl0IDs7CisgICAgLS12ZXJzaW9uIHwgLXYgKQorICAgICAgIGVjaG8gIiR2ZXJzaW9uIiA7IGV4aXQgOzsKKyAgICAtLWhlbHAgfCAtLWgqIHwgLWggKQorICAgICAgIGVjaG8gIiR1c2FnZSI7IGV4aXQgOzsKKyAgICAtLSApICAgICAjIFN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKKyAgICAgICBzaGlmdDsgYnJlYWsgOzsKKyAgICAtICkJIyBVc2Ugc3RkaW4gYXMgaW5wdXQuCisgICAgICAgYnJlYWsgOzsKKyAgICAtKiApCisgICAgICAgZWNobyAiJG1lOiBpbnZhbGlkIG9wdGlvbiAkMSRoZWxwIgorICAgICAgIGV4aXQgMSA7OworCisgICAgKmxvY2FsKikKKyAgICAgICAjIEZpcnN0IHBhc3MgdGhyb3VnaCBhbnkgbG9jYWwgbWFjaGluZSB0eXBlcy4KKyAgICAgICBlY2hvICQxCisgICAgICAgZXhpdCA7OworCisgICAgKiApCisgICAgICAgYnJlYWsgOzsKKyAgZXNhYworZG9uZQorCitjYXNlICQjIGluCisgMCkgZWNobyAiJG1lOiBtaXNzaW5nIGFyZ3VtZW50JGhlbHAiID4mMgorICAgIGV4aXQgMTs7CisgMSkgOzsKKyAqKSBlY2hvICIkbWU6IHRvbyBtYW55IGFyZ3VtZW50cyRoZWxwIiA+JjIKKyAgICBleGl0IDE7OworZXNhYworCisjIFNlcGFyYXRlIHdoYXQgdGhlIHVzZXIgZ2F2ZSBpbnRvIENQVS1DT01QQU5ZIGFuZCBPUyBvciBLRVJORUwtT1MgKGlmIGFueSkuCisjIEhlcmUgd2UgbXVzdCByZWNvZ25pemUgYWxsIHRoZSB2YWxpZCBLRVJORUwtT1MgY29tYmluYXRpb25zLgorbWF5YmVfb3M9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wyLydgCitjYXNlICRtYXliZV9vcyBpbgorICBudG8tcW54KiB8IGxpbnV4LWdudSogfCBsaW51eC1kaWV0bGliYyB8IGxpbnV4LW5ld2xpYiogfCBsaW51eC11Y2xpYmMqIHwgXAorICB1Y2xpbnV4LXVjbGliYyogfCB1Y2xpbnV4LWdudSogfCBrZnJlZWJzZCotZ251KiB8IGtuZXRic2QqLWdudSogfCBuZXRic2QqLWdudSogfCBcCisgIGtvcGVuc29sYXJpcyotZ251KiB8IFwKKyAgc3Rvcm0tY2hhb3MqIHwgb3MyLWVteCogfCBydG1rLW5vdmEqKQorICAgIG9zPS0kbWF5YmVfb3MKKyAgICBiYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMS8nYAorICAgIDs7CisgICopCisgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy8tW14tXSokLy8nYAorICAgIGlmIFsgJGJhc2ljX21hY2hpbmUgIT0gJDEgXQorICAgIHRoZW4gb3M9YGVjaG8gJDEgfCBzZWQgJ3MvLiotLy0vJ2AKKyAgICBlbHNlIG9zPTsgZmkKKyAgICA7OworZXNhYworCisjIyMgTGV0J3MgcmVjb2duaXplIGNvbW1vbiBtYWNoaW5lcyBhcyBub3QgYmVpbmcgb3BlcmF0aW5nIHN5c3RlbXMgc28KKyMjIyB0aGF0IHRoaW5ncyBsaWtlIGNvbmZpZy5zdWIgZGVjc3RhdGlvbi0zMTAwIHdvcmsuICBXZSBhbHNvCisjIyMgcmVjb2duaXplIHNvbWUgbWFudWZhY3R1cmVycyBhcyBub3QgYmVpbmcgb3BlcmF0aW5nIHN5c3RlbXMsIHNvIHdlCisjIyMgY2FuIHByb3ZpZGUgZGVmYXVsdCBvcGVyYXRpbmcgc3lzdGVtcyBiZWxvdy4KK2Nhc2UgJG9zIGluCisJLXN1bipvcyopCisJCSMgUHJldmVudCBmb2xsb3dpbmcgY2xhdXNlIGZyb20gaGFuZGxpbmcgdGhpcyBpbnZhbGlkIGlucHV0LgorCQk7OworCS1kZWMqIHwgLW1pcHMqIHwgLXNlcXVlbnQqIHwgLWVuY29yZSogfCAtcGM1MzIqIHwgLXNnaSogfCAtc29ueSogfCBcCisJLWF0dCogfCAtNzMwMCogfCAtMzMwMCogfCAtZGVsdGEqIHwgLW1vdG9yb2xhKiB8IC1zdW5bMjM0XSogfCBcCisJLXVuaWNvbSogfCAtaWJtKiB8IC1uZXh0IHwgLWhwIHwgLWlzaSogfCAtYXBvbGxvIHwgLWFsdG9zKiB8IFwKKwktY29udmVyZ2VudCogfCAtbmNyKiB8IC1uZXdzIHwgLTMyKiB8IC0zNjAwKiB8IC0zMTAwKiB8IC1oaXRhY2hpKiB8XAorCS1jWzEyM10qIHwgLWNvbnZleCogfCAtc3VuIHwgLWNyZHMgfCAtb21yb24qIHwgLWRnIHwgLXVsdHJhIHwgLXR0aSogfCBcCisJLWhhcnJpcyB8IC1kb2xwaGluIHwgLWhpZ2hsZXZlbCB8IC1nb3VsZCB8IC1jYm0gfCAtbnMgfCAtbWFzc2NvbXAgfCBcCisJLWFwcGxlIHwgLWF4aXMgfCAta251dGggfCAtY3JheSB8IC1taWNyb2JsYXplKQorCQlvcz0KKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworICAgICAgICAtYmx1ZWdlbmUqKQorCSAgICAgICAgb3M9LWNuaworCQk7OworCS1zaW0gfCAtY2lzY28gfCAtb2tpIHwgLXdlYyB8IC13aW5ib25kKQorCQlvcz0KKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1zY291dCkKKwkJOzsKKwktd3JzKQorCQlvcz0tdnh3b3JrcworCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisJLWNob3J1c29zKikKKwkJb3M9LWNob3J1c29zCisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKyAJLWNob3J1c3JkYikKKyAJCW9zPS1jaG9ydXNyZGIKKwkJYmFzaWNfbWFjaGluZT0kMQorIAkJOzsKKwktaGl1eCopCisJCW9zPS1oaXV4d2UyCisJCTs7CisJLXNjbzYpCisJCW9zPS1zY281djYKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY281KQorCQlvcz0tc2NvMy4ydjUKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY280KQorCQlvcz0tc2NvMy4ydjQKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY28zLjIuWzQtOV0qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3Mvc2NvMy4yLi9zY28zLjJ2LydgCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvMy4ydls0LTldKikKKwkJIyBEb24ndCBmb3JnZXQgdmVyc2lvbiBpZiBpdCBpcyAzLjJ2NCBvciBuZXdlci4KKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY281djYqKQorCQkjIERvbid0IGZvcmdldCB2ZXJzaW9uIGlmIGl0IGlzIDMuMnY0IG9yIG5ld2VyLgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbyopCisJCW9zPS1zY28zLjJ2MgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXVkayopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktaXNjKQorCQlvcz0taXNjMi4yCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktY2xpeCopCisJCWJhc2ljX21hY2hpbmU9Y2xpcHBlci1pbnRlcmdyYXBoCisJCTs7CisJLWlzYyopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktbHlueCopCisJCW9zPS1seW54b3MKKwkJOzsKKwktcHR4KikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1zZXF1ZW50LydgCisJCTs7CisJLXdpbmRvd3NudCopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAncy93aW5kb3dzbnQvd2lubnQvJ2AKKwkJOzsKKwktcHNvcyopCisJCW9zPS1wc29zCisJCTs7CisJLW1pbnQgfCAtbWludFswLTldKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWF0YXJpCisJCW9zPS1taW50CisJCTs7Citlc2FjCisKKyMgRGVjb2RlIGFsaWFzZXMgZm9yIGNlcnRhaW4gQ1BVLUNPTVBBTlkgY29tYmluYXRpb25zLgorY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aG91dCBjb21wYW55IG5hbWUuCisJIyBTb21lIGFyZSBvbWl0dGVkIGhlcmUgYmVjYXVzZSB0aGV5IGhhdmUgc3BlY2lhbCBtZWFuaW5ncyBiZWxvdy4KKwkxNzUwYSB8IDU4MCBcCisJfCBhMjlrIFwKKwl8IGFscGhhIHwgYWxwaGFldls0LThdIHwgYWxwaGFldjU2IHwgYWxwaGFldjZbNzhdIHwgYWxwaGFwY2E1WzY3XSBcCisJfCBhbHBoYTY0IHwgYWxwaGE2NGV2WzQtOF0gfCBhbHBoYTY0ZXY1NiB8IGFscGhhNjRldjZbNzhdIHwgYWxwaGE2NHBjYTVbNjddIFwKKwl8IGFtMzNfMi4wIFwKKwl8IGFyYyB8IGFybSB8IGFybVtibF1lIHwgYXJtZVtsYl0gfCBhcm12WzIzNDVdIHwgYXJtdlszNDVdW2xiXSB8IGF2ciB8IGF2cjMyIFwKKwl8IGJmaW4gXAorCXwgYzR4IHwgY2xpcHBlciBcCisJfCBkMTB2IHwgZDMwdiB8IGRseCB8IGRzcDE2eHggXAorCXwgZmlkbyB8IGZyMzAgfCBmcnYgXAorCXwgaDgzMDAgfCBoODUwMCB8IGhwcGEgfCBocHBhMS5bMDFdIHwgaHBwYTIuMCB8IGhwcGEyLjBbbnddIHwgaHBwYTY0IFwKKwl8IGkzNzAgfCBpODYwIHwgaTk2MCB8IGlhNjQgXAorCXwgaXAyayB8IGlxMjAwMCBcCisJfCBsbTMyIFwKKwl8IG0zMmMgfCBtMzJyIHwgbTMycmxlIHwgbTY4MDAwIHwgbTY4ayB8IG04OGsgXAorCXwgbWF4cSB8IG1iIHwgbWljcm9ibGF6ZSB8IG1jb3JlIHwgbWVwIHwgbWV0YWcgXAorCXwgbWlwcyB8IG1pcHNiZSB8IG1pcHNlYiB8IG1pcHNlbCB8IG1pcHNsZSBcCisJfCBtaXBzMTYgXAorCXwgbWlwczY0IHwgbWlwczY0ZWwgXAorCXwgbWlwczY0b2N0ZW9uIHwgbWlwczY0b2N0ZW9uZWwgXAorCXwgbWlwczY0b3Jpb24gfCBtaXBzNjRvcmlvbmVsIFwKKwl8IG1pcHM2NHI1OTAwIHwgbWlwczY0cjU5MDBlbCBcCisJfCBtaXBzNjR2ciB8IG1pcHM2NHZyZWwgXAorCXwgbWlwczY0dnI0MTAwIHwgbWlwczY0dnI0MTAwZWwgXAorCXwgbWlwczY0dnI0MzAwIHwgbWlwczY0dnI0MzAwZWwgXAorCXwgbWlwczY0dnI1MDAwIHwgbWlwczY0dnI1MDAwZWwgXAorCXwgbWlwczY0dnI1OTAwIHwgbWlwczY0dnI1OTAwZWwgXAorCXwgbWlwc2lzYTMyIHwgbWlwc2lzYTMyZWwgXAorCXwgbWlwc2lzYTMycjIgfCBtaXBzaXNhMzJyMmVsIFwKKwl8IG1pcHNpc2E2NCB8IG1pcHNpc2E2NGVsIFwKKwl8IG1pcHNpc2E2NHIyIHwgbWlwc2lzYTY0cjJlbCBcCisJfCBtaXBzaXNhNjRzYjEgfCBtaXBzaXNhNjRzYjFlbCBcCisJfCBtaXBzaXNhNjRzcjcxayB8IG1pcHNpc2E2NHNyNzFrZWwgXAorCXwgbWlwc3R4MzkgfCBtaXBzdHgzOWVsIFwKKwl8IG1uMTAyMDAgfCBtbjEwMzAwIFwKKwl8IG1veGllIFwKKwl8IG10IFwKKwl8IG1zcDQzMCBcCisJfCBuaW9zIHwgbmlvczIgXAorCXwgbnMxNmsgfCBuczMyayBcCisJfCBvcjMyIFwKKwl8IHBkcDEwIHwgcGRwMTEgfCBwaiB8IHBqbCBcCisJfCBwb3dlcnBjIHwgcG93ZXJwYzY0IHwgcG93ZXJwYzY0bGUgfCBwb3dlcnBjbGUgfCBwcGNiZSBcCisJfCBweXJhbWlkIFwKKwl8IHJ4IFwKKwl8IHNjb3JlIFwKKwl8IHNoIHwgc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMjRdYWViIHwgc2hbMjNdZSB8IHNoWzM0XWViIHwgc2hlYiB8IHNoYmUgfCBzaGxlIHwgc2hbMTIzNF1sZSB8IHNoM2VsZSBcCisJfCBzaDY0IHwgc2g2NGxlIFwKKwl8IHNwYXJjIHwgc3BhcmM2NCB8IHNwYXJjNjRiIHwgc3BhcmM2NHYgfCBzcGFyYzg2eCB8IHNwYXJjbGV0IHwgc3BhcmNsaXRlIFwKKwl8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIgfCBzcGFyY3Y5diBcCisJfCBzcHUgfCBzdHJvbmdhcm0gXAorCXwgdGFob2UgfCB0aHVtYiB8IHRpYzR4IHwgdGljODAgfCB0cm9uIFwKKwl8IHViaWNvbTMyIFwKKwl8IHY4NTAgfCB2ODUwZSBcCisJfCB3ZTMyayBcCisJfCB4ODYgfCB4YzE2eCB8IHhzY2FsZSB8IHhzY2FsZWVbYmxdIHwgeHN0b3JteTE2IHwgeHRlbnNhIFwKKwl8IHo4ayB8IHo4MCkKKwkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCisJCTs7CisJbTY4MTEgfCBtNjhoYzExIHwgbTY4MTIgfCBtNjhoYzEyIHwgcGljb2NoaXApCisJCSMgTW90b3JvbGEgNjhIQzExLzEyLgorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJb3M9LW5vbmUKKwkJOzsKKwltODgxMTAgfCBtNjgwWzEyMzQ2XTAgfCBtNjgzPzIgfCBtNjgzNjAgfCBtNTIwMCB8IHY3MCB8IHc2NSB8IHo4aykKKwkJOzsKKwltczEpCisJCWJhc2ljX21hY2hpbmU9bXQtdW5rbm93bgorCQk7OworCisJIyBXZSB1c2UgYHBjJyByYXRoZXIgdGhhbiBgdW5rbm93bicKKwkjIGJlY2F1c2UgKDEpIHRoYXQncyB3aGF0IHRoZXkgbm9ybWFsbHkgYXJlLCBhbmQKKwkjICgyKSB0aGUgd29yZCAidW5rbm93biIgdGVuZHMgdG8gY29uZnVzZSBiZWdpbm5pbmcgdXNlcnMuCisJaSo4NiB8IHg4Nl82NCkKKwkgIGJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtcGMKKwkgIDs7CisJIyBPYmplY3QgaWYgbW9yZSB0aGFuIG9uZSBjb21wYW55IG5hbWUgd29yZC4KKwkqLSotKikKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBtYWNoaW5lIFxgJGJhc2ljX21hY2hpbmVcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aCBjb21wYW55IG5hbWUuCisJNTgwLSogXAorCXwgYTI5ay0qIFwKKwl8IGFscGhhLSogfCBhbHBoYWV2WzQtOF0tKiB8IGFscGhhZXY1Ni0qIHwgYWxwaGFldjZbNzhdLSogXAorCXwgYWxwaGE2NC0qIHwgYWxwaGE2NGV2WzQtOF0tKiB8IGFscGhhNjRldjU2LSogfCBhbHBoYTY0ZXY2Wzc4XS0qIFwKKwl8IGFscGhhcGNhNVs2N10tKiB8IGFscGhhNjRwY2E1WzY3XS0qIHwgYXJjLSogXAorCXwgYXJtLSogIHwgYXJtYmUtKiB8IGFybWxlLSogfCBhcm1lYi0qIHwgYXJtdiotKiBcCisJfCBhdnItKiB8IGF2cjMyLSogXAorCXwgYmZpbi0qIHwgYnMyMDAwLSogXAorCXwgY1sxMjNdKiB8IGMzMC0qIHwgW2NqdF05MC0qIHwgYzR4LSogfCBjNTR4LSogfCBjNTV4LSogfCBjNngtKiBcCisJfCBjbGlwcGVyLSogfCBjcmF5bnYtKiB8IGN5ZHJhLSogXAorCXwgZDEwdi0qIHwgZDMwdi0qIHwgZGx4LSogXAorCXwgZWx4c2ktKiBcCisJfCBmMzBbMDFdLSogfCBmNzAwLSogfCBmaWRvLSogfCBmcjMwLSogfCBmcnYtKiB8IGZ4ODAtKiBcCisJfCBoODMwMC0qIHwgaDg1MDAtKiBcCisJfCBocHBhLSogfCBocHBhMS5bMDFdLSogfCBocHBhMi4wLSogfCBocHBhMi4wW253XS0qIHwgaHBwYTY0LSogXAorCXwgaSo4Ni0qIHwgaTg2MC0qIHwgaTk2MC0qIHwgaWE2NC0qIFwKKwl8IGlwMmstKiB8IGlxMjAwMC0qIFwKKwl8IGxtMzItKiBcCisJfCBtMzJjLSogfCBtMzJyLSogfCBtMzJybGUtKiBcCisJfCBtNjgwMDAtKiB8IG02ODBbMDEyMzQ2XTAtKiB8IG02ODM2MC0qIHwgbTY4Mz8yLSogfCBtNjhrLSogXAorCXwgbTg4MTEwLSogfCBtODhrLSogfCBtYXhxLSogfCBtY29yZS0qIHwgbWV0YWctKiB8IG1pY3JvYmxhemUtKiBcCisJfCBtaXBzLSogfCBtaXBzYmUtKiB8IG1pcHNlYi0qIHwgbWlwc2VsLSogfCBtaXBzbGUtKiBcCisJfCBtaXBzMTYtKiBcCisJfCBtaXBzNjQtKiB8IG1pcHM2NGVsLSogXAorCXwgbWlwczY0b2N0ZW9uLSogfCBtaXBzNjRvY3Rlb25lbC0qIFwKKwl8IG1pcHM2NG9yaW9uLSogfCBtaXBzNjRvcmlvbmVsLSogXAorCXwgbWlwczY0cjU5MDAtKiB8IG1pcHM2NHI1OTAwZWwtKiBcCisJfCBtaXBzNjR2ci0qIHwgbWlwczY0dnJlbC0qIFwKKwl8IG1pcHM2NHZyNDEwMC0qIHwgbWlwczY0dnI0MTAwZWwtKiBcCisJfCBtaXBzNjR2cjQzMDAtKiB8IG1pcHM2NHZyNDMwMGVsLSogXAorCXwgbWlwczY0dnI1MDAwLSogfCBtaXBzNjR2cjUwMDBlbC0qIFwKKwl8IG1pcHM2NHZyNTkwMC0qIHwgbWlwczY0dnI1OTAwZWwtKiBcCisJfCBtaXBzaXNhMzItKiB8IG1pcHNpc2EzMmVsLSogXAorCXwgbWlwc2lzYTMycjItKiB8IG1pcHNpc2EzMnIyZWwtKiBcCisJfCBtaXBzaXNhNjQtKiB8IG1pcHNpc2E2NGVsLSogXAorCXwgbWlwc2lzYTY0cjItKiB8IG1pcHNpc2E2NHIyZWwtKiBcCisJfCBtaXBzaXNhNjRzYjEtKiB8IG1pcHNpc2E2NHNiMWVsLSogXAorCXwgbWlwc2lzYTY0c3I3MWstKiB8IG1pcHNpc2E2NHNyNzFrZWwtKiBcCisJfCBtaXBzdHgzOS0qIHwgbWlwc3R4MzllbC0qIFwKKwl8IG1taXgtKiBcCisJfCBtdC0qIFwKKwl8IG1zcDQzMC0qIFwKKwl8IG5pb3MtKiB8IG5pb3MyLSogXAorCXwgbm9uZS0qIHwgbnAxLSogfCBuczE2ay0qIHwgbnMzMmstKiBcCisJfCBvcmlvbi0qIFwKKwl8IHBkcDEwLSogfCBwZHAxMS0qIHwgcGotKiB8IHBqbC0qIHwgcG4tKiB8IHBvd2VyLSogXAorCXwgcG93ZXJwYy0qIHwgcG93ZXJwYzY0LSogfCBwb3dlcnBjNjRsZS0qIHwgcG93ZXJwY2xlLSogfCBwcGNiZS0qIFwKKwl8IHB5cmFtaWQtKiBcCisJfCByb21wLSogfCByczYwMDAtKiB8IHJ4LSogXAorCXwgc2gtKiB8IHNoWzEyMzRdLSogfCBzaFsyNF1hLSogfCBzaFsyNF1hZWItKiB8IHNoWzIzXWUtKiB8IHNoWzM0XWViLSogfCBzaGViLSogfCBzaGJlLSogXAorCXwgc2hsZS0qIHwgc2hbMTIzNF1sZS0qIHwgc2gzZWxlLSogfCBzaDY0LSogfCBzaDY0bGUtKiBcCisJfCBzcGFyYy0qIHwgc3BhcmM2NC0qIHwgc3BhcmM2NGItKiB8IHNwYXJjNjR2LSogfCBzcGFyYzg2eC0qIHwgc3BhcmNsZXQtKiBcCisJfCBzcGFyY2xpdGUtKiBcCisJfCBzcGFyY3Y4LSogfCBzcGFyY3Y5LSogfCBzcGFyY3Y5Yi0qIHwgc3BhcmN2OXYtKiB8IHN0cm9uZ2FybS0qIHwgc3YxLSogfCBzeD8tKiBcCisJfCB0YWhvZS0qIHwgdGh1bWItKiBcCisJfCB0aWMzMC0qIHwgdGljNHgtKiB8IHRpYzU0eC0qIHwgdGljNTV4LSogfCB0aWM2eC0qIHwgdGljODAtKiBcCisJfCB0aWxlLSogfCB0aWxlZ3gtKiBcCisJfCB0cm9uLSogXAorCXwgdWJpY29tMzItKiBcCisJfCB2ODUwLSogfCB2ODUwZS0qIHwgdmF4LSogXAorCXwgd2UzMmstKiBcCisJfCB4ODYtKiB8IHg4Nl82NC0qIHwgeGMxNngtKiB8IHhwczEwMC0qIHwgeHNjYWxlLSogfCB4c2NhbGVlW2JsXS0qIFwKKwl8IHhzdG9ybXkxNi0qIHwgeHRlbnNhKi0qIFwKKwl8IHltcC0qIFwKKwl8IHo4ay0qIHwgejgwLSopCisJCTs7CisJIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRob3V0IGNvbXBhbnkgbmFtZSwgd2l0aCBnbG9iIG1hdGNoLgorCXh0ZW5zYSopCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQk7OworCSMgUmVjb2duaXplIHRoZSB2YXJpb3VzIG1hY2hpbmUgbmFtZXMgYW5kIGFsaWFzZXMgd2hpY2ggc3RhbmQKKwkjIGZvciBhIENQVSB0eXBlIGFuZCBhIGNvbXBhbnkgYW5kIHNvbWV0aW1lcyBldmVuIGFuIE9TLgorCTM4NmJzZCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LWJzZAorCQk7OworCTNiMSB8IDczMDAgfCA3MzAwLWF0dCB8IGF0dC03MzAwIHwgcGM3MzAwIHwgc2FmYXJpIHwgdW5peHBjKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1hdHQKKwkJOzsKKwkzYiopCisJCWJhc2ljX21hY2hpbmU9d2UzMmstYXR0CisJCTs7CisJYTI5a2hpZikKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tdWRpCisJCTs7CisgICAgCWFiYWN1cykKKwkJYmFzaWNfbWFjaGluZT1hYmFjdXMtdW5rbm93bgorCQk7OworCWFkb2JlNjhrKQorCQliYXNpY19tYWNoaW5lPW02ODAxMC1hZG9iZQorCQlvcz0tc2NvdXQKKwkJOzsKKwlhbGxpYW50IHwgZng4MCkKKwkJYmFzaWNfbWFjaGluZT1meDgwLWFsbGlhbnQKKwkJOzsKKwlhbHRvcyB8IGFsdG9zMzA2OCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFsdG9zCisJCTs7CisJYW0yOWspCisJCWJhc2ljX21hY2hpbmU9YTI5ay1ub25lCisJCW9zPS1ic2QKKwkJOzsKKwlhbWQ2NCkKKwkJYmFzaWNfbWFjaGluZT14ODZfNjQtcGMKKwkJOzsKKwlhbWQ2NC0qKQorCQliYXNpY19tYWNoaW5lPXg4Nl82NC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCWFtZGFobCkKKwkJYmFzaWNfbWFjaGluZT01ODAtYW1kYWhsCisJCW9zPS1zeXN2CisJCTs7CisJYW1pZ2EgfCBhbWlnYS0qKQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgorCQk7OworCWFtaWdhb3MgfCBhbWlnYWRvcykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJb3M9LWFtaWdhb3MKKwkJOzsKKwlhbWlnYXVuaXggfCBhbWl4KQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgorCQlvcz0tc3lzdjQKKwkJOzsKKwlhcG9sbG82OCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwb2xsbworCQlvcz0tc3lzdgorCQk7OworCWFwb2xsbzY4YnNkKQorCQliYXNpY19tYWNoaW5lPW02OGstYXBvbGxvCisJCW9zPS1ic2QKKwkJOzsKKwlhcm9zKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LWFyb3MKKwkJOzsKKwlhdXgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcHBsZQorCQlvcz0tYXV4CisJCTs7CisJYmFsYW5jZSkKKwkJYmFzaWNfbWFjaGluZT1uczMyay1zZXF1ZW50CisJCW9zPS1keW5peAorCQk7OworCWJsYWNrZmluKQorCQliYXNpY19tYWNoaW5lPWJmaW4tdW5rbm93bgorCQlvcz0tbGludXgKKwkJOzsKKwlibGFja2Zpbi0qKQorCQliYXNpY19tYWNoaW5lPWJmaW4tYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJb3M9LWxpbnV4CisJCTs7CisJYmx1ZWdlbmUqKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtaWJtCisJCW9zPS1jbmsKKwkJOzsKKwljOTApCisJCWJhc2ljX21hY2hpbmU9YzkwLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworICAgICAgICBjZWdjYykKKwkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgorCQlvcz0tY2VnY2MKKwkJOzsKKwljb252ZXgtYzEpCisJCWJhc2ljX21hY2hpbmU9YzEtY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljb252ZXgtYzIpCisJCWJhc2ljX21hY2hpbmU9YzItY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljb252ZXgtYzMyKQorCQliYXNpY19tYWNoaW5lPWMzMi1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMzQpCisJCWJhc2ljX21hY2hpbmU9YzM0LWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMzOCkKKwkJYmFzaWNfbWFjaGluZT1jMzgtY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljcmF5IHwgajkwKQorCQliYXNpY19tYWNoaW5lPWo5MC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwljcmF5bnYpCisJCWJhc2ljX21hY2hpbmU9Y3JheW52LWNyYXkKKwkJb3M9LXVuaWNvc21wCisJCTs7CisJY3IxNikKKwkJYmFzaWNfbWFjaGluZT1jcjE2LXVua25vd24KKwkJb3M9LWVsZgorCQk7OworCWNyZHMgfCB1bm9zKQorCQliYXNpY19tYWNoaW5lPW02OGstY3JkcworCQk7OworCWNyaXN2MzIgfCBjcmlzdjMyLSogfCBldHJheGZzKikKKwkJYmFzaWNfbWFjaGluZT1jcmlzdjMyLWF4aXMKKwkJOzsKKwljcmlzIHwgY3Jpcy0qIHwgZXRyYXgqKQorCQliYXNpY19tYWNoaW5lPWNyaXMtYXhpcworCQk7OworCWNyeCkKKwkJYmFzaWNfbWFjaGluZT1jcngtdW5rbm93bgorCQlvcz0tZWxmCisJCTs7CisJZGEzMCB8IGRhMzAtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWRhMzAKKwkJOzsKKwlkZWNzdGF0aW9uIHwgZGVjc3RhdGlvbi0zMTAwIHwgcG1heCB8IHBtYXgtKiB8IHBtaW4gfCBkZWMzMTAwIHwgZGVjc3RhdG4pCisJCWJhc2ljX21hY2hpbmU9bWlwcy1kZWMKKwkJOzsKKwlkZWNzeXN0ZW0xMCogfCBkZWMxMCopCisJCWJhc2ljX21hY2hpbmU9cGRwMTAtZGVjCisJCW9zPS10b3BzMTAKKwkJOzsKKwlkZWNzeXN0ZW0yMCogfCBkZWMyMCopCisJCWJhc2ljX21hY2hpbmU9cGRwMTAtZGVjCisJCW9zPS10b3BzMjAKKwkJOzsKKwlkZWx0YSB8IDMzMDAgfCBtb3Rvcm9sYS0zMzAwIHwgbW90b3JvbGEtZGVsdGEgXAorCSAgICAgIHwgMzMwMC1tb3Rvcm9sYSB8IGRlbHRhLW1vdG9yb2xhKQorCQliYXNpY19tYWNoaW5lPW02OGstbW90b3JvbGEKKwkJOzsKKwlkZWx0YTg4KQorCQliYXNpY19tYWNoaW5lPW04OGstbW90b3JvbGEKKwkJb3M9LXN5c3YzCisJCTs7CisJZGljb3MpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQlvcz0tZGljb3MKKwkJOzsKKwlkamdwcCkKKwkJYmFzaWNfbWFjaGluZT1pNTg2LXBjCisJCW9zPS1tc2Rvc2RqZ3BwCisJCTs7CisJZHB4MjAgfCBkcHgyMC0qKQorCQliYXNpY19tYWNoaW5lPXJzNjAwMC1idWxsCisJCW9zPS1ib3N4CisJCTs7CisJZHB4MiogfCBkcHgyKi1idWxsKQorCQliYXNpY19tYWNoaW5lPW02OGstYnVsbAorCQlvcz0tc3lzdjMKKwkJOzsKKwllYm1vbjI5aykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tZWJtb24KKwkJOzsKKwllbHhzaSkKKwkJYmFzaWNfbWFjaGluZT1lbHhzaS1lbHhzaQorCQlvcz0tYnNkCisJCTs7CisJZW5jb3JlIHwgdW1heCB8IG1tYXgpCisJCWJhc2ljX21hY2hpbmU9bnMzMmstZW5jb3JlCisJCTs7CisJZXMxODAwIHwgT1NFNjhrIHwgb3NlNjhrIHwgb3NlIHwgT1NFKQorCQliYXNpY19tYWNoaW5lPW02OGstZXJpY3Nzb24KKwkJb3M9LW9zZQorCQk7OworCWZ4MjgwMCkKKwkJYmFzaWNfbWFjaGluZT1pODYwLWFsbGlhbnQKKwkJOzsKKwlnZW5peCkKKwkJYmFzaWNfbWFjaGluZT1uczMyay1ucworCQk7OworCWdtaWNybykKKwkJYmFzaWNfbWFjaGluZT10cm9uLWdtaWNybworCQlvcz0tc3lzdgorCQk7OworCWdvMzIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tZ28zMgorCQk7OworCWgzMDUwciogfCBoaXV4KikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhpdGFjaGkKKwkJb3M9LWhpdXh3ZTIKKwkJOzsKKwloODMwMGhtcykKKwkJYmFzaWNfbWFjaGluZT1oODMwMC1oaXRhY2hpCisJCW9zPS1obXMKKwkJOzsKKwloODMwMHhyYXkpCisJCWJhc2ljX21hY2hpbmU9aDgzMDAtaGl0YWNoaQorCQlvcz0teHJheQorCQk7OworCWg4NTAwaG1zKQorCQliYXNpY19tYWNoaW5lPWg4NTAwLWhpdGFjaGkKKwkJb3M9LWhtcworCQk7OworCWhhcnJpcykKKwkJYmFzaWNfbWFjaGluZT1tODhrLWhhcnJpcworCQlvcz0tc3lzdjMKKwkJOzsKKwlocDMwMC0qKQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJOzsKKwlocDMwMGJzZCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCW9zPS1ic2QKKwkJOzsKKwlocDMwMGhwdXgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQlvcz0taHB1eAorCQk7OworCWhwM2s5WzAtOV1bMC05XSB8IGhwOVswLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMC1ocAorCQk7OworCWhwOWsyWzAtOV1bMC05XSB8IGhwOWszMVswLTldKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1ocAorCQk7OworCWhwOWszWzItOV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCTs7CisJaHA5azZbMC05XVswLTldIHwgaHA2WzAtOV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4wLWhwCisJCTs7CisJaHA5azdbMC03OV1bMC05XSB8IGhwN1swLTc5XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrNzhbMC05XSB8IGhwNzhbMC05XSkKKwkJIyBGSVhNRTogcmVhbGx5IGhwcGEyLjAtaHAKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azhbNjddMSB8IGhwOFs2N10xIHwgaHA5azgwWzI0XSB8IGhwODBbMjRdIHwgaHA5azhbNzhdOSB8IGhwOFs3OF05IHwgaHA5azg5MyB8IGhwODkzKQorCQkjIEZJWE1FOiByZWFsbHkgaHBwYTIuMC1ocAorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrOFswLTldWzEzNjc5XSB8IGhwOFswLTldWzEzNjc5XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azhbMC05XVswLTldIHwgaHA4WzAtOV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4wLWhwCisJCTs7CisJaHBwYS1uZXh0KQorCQlvcz0tbmV4dHN0ZXAzCisJCTs7CisJaHBwYW9zZikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCW9zPS1vc2YKKwkJOzsKKwlocHBybykKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCW9zPS1wcm9lbGYKKwkJOzsKKwlpMzcwLWlibSogfCBpYm0qKQorCQliYXNpY19tYWNoaW5lPWkzNzAtaWJtCisJCTs7CisjIEknbSBub3Qgc3VyZSB3aGF0ICJTeXN2MzIiIG1lYW5zLiAgU2hvdWxkIHRoaXMgYmUgc3lzdjMuMj8KKwlpKjg2djMyKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXN5c3YzMgorCQk7OworCWkqODZ2NCopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc3lzdjQKKwkJOzsKKwlpKjg2dikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zeXN2CisJCTs7CisJaSo4NnNvbDIpCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc29sYXJpczIKKwkJOzsKKwlpMzg2bWFjaCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LW1hY2gKKwkJb3M9LW1hY2gKKwkJOzsKKwlpMzg2LXZzdGEgfCB2c3RhKQorCQliYXNpY19tYWNoaW5lPWkzODYtdW5rbm93bgorCQlvcz0tdnN0YQorCQk7OworCWlyaXMgfCBpcmlzNGQpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zZ2kKKwkJY2FzZSAkb3MgaW4KKwkJICAgIC1pcml4KikKKwkJCTs7CisJCSAgICAqKQorCQkJb3M9LWlyaXg0CisJCQk7OworCQllc2FjCisJCTs7CisJaXNpNjggfCBpc2kpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1pc2kKKwkJb3M9LXN5c3YKKwkJOzsKKwltNjhrbm9tbXUpCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCW9zPS1saW51eAorCQk7OworCW02OGtub21tdS0qKQorCQliYXNpY19tYWNoaW5lPW02OGstYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJb3M9LWxpbnV4CisJCTs7CisJbTg4ay1vbXJvbiopCisJCWJhc2ljX21hY2hpbmU9bTg4ay1vbXJvbgorCQk7OworCW1hZ251bSB8IG0zMjMwKQorCQliYXNpY19tYWNoaW5lPW1pcHMtbWlwcworCQlvcz0tc3lzdgorCQk7OworCW1lcmxpbikKKwkJYmFzaWNfbWFjaGluZT1uczMyay11dGVrCisJCW9zPS1zeXN2CisJCTs7CisgICAgICAgIG1pY3JvYmxhemUpCisJCWJhc2ljX21hY2hpbmU9bWljcm9ibGF6ZS14aWxpbngKKwkJOzsKKwltaW5ndzMyKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LW1pbmd3MzIKKwkJOzsKKwltaW5ndzMyY2UpCisJCWJhc2ljX21hY2hpbmU9YXJtLXVua25vd24KKwkJb3M9LW1pbmd3MzJjZQorCQk7OworCW1pbmlmcmFtZSkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtY29udmVyZ2VudAorCQk7OworCSptaW50IHwgLW1pbnRbMC05XSogfCAqTWlOVCB8ICpNaU5UWzAtOV0qKQorCQliYXNpY19tYWNoaW5lPW02OGstYXRhcmkKKwkJb3M9LW1pbnQKKwkJOzsKKwltaXBzMyotKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9taXBzMy9taXBzNjQvJ2AKKwkJOzsKKwltaXBzMyopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgLWUgJ3MvbWlwczMvbWlwczY0LydgLXVua25vd24KKwkJOzsKKwltb25pdG9yKQorCQliYXNpY19tYWNoaW5lPW02OGstcm9tNjhrCisJCW9zPS1jb2ZmCisJCTs7CisJbW9ycGhvcykKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLXVua25vd24KKwkJb3M9LW1vcnBob3MKKwkJOzsKKwltc2RvcykKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1tc2RvcworCQk7OworCW1zMS0qKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21zMS0vbXQtLydgCisJCTs7CisJbXZzKQorCQliYXNpY19tYWNoaW5lPWkzNzAtaWJtCisJCW9zPS1tdnMKKwkJOzsKKwluY3IzMDAwKQorCQliYXNpY19tYWNoaW5lPWk0ODYtbmNyCisJCW9zPS1zeXN2NAorCQk7OworCW5ldGJzZDM4NikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LW5ldGJzZAorCQk7OworCW5ldHdpbmRlcikKKwkJYmFzaWNfbWFjaGluZT1hcm12NGwtcmViZWwKKwkJb3M9LWxpbnV4CisJCTs7CisJbmV3cyB8IG5ld3M3MDAgfCBuZXdzODAwIHwgbmV3czkwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXNvbnkKKwkJb3M9LW5ld3NvcworCQk7OworCW5ld3MxMDAwKQorCQliYXNpY19tYWNoaW5lPW02ODAzMC1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZXdzLTM2MDAgfCByaXNjLW5ld3MpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZWN2NzApCisJCWJhc2ljX21hY2hpbmU9djcwLW5lYworCQlvcz0tc3lzdgorCQk7OworCW5leHQgfCBtKi1uZXh0ICkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5leHQKKwkJY2FzZSAkb3MgaW4KKwkJICAgIC1uZXh0c3RlcCogKQorCQkJOzsKKwkJICAgIC1uczIqKQorCQkgICAgICBvcz0tbmV4dHN0ZXAyCisJCQk7OworCQkgICAgKikKKwkJICAgICAgb3M9LW5leHRzdGVwMworCQkJOzsKKwkJZXNhYworCQk7OworCW5oMzAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhhcnJpcworCQlvcz0tY3h1eAorCQk7OworCW5oWzQ1XTAwMCkKKwkJYmFzaWNfbWFjaGluZT1tODhrLWhhcnJpcworCQlvcz0tY3h1eAorCQk7OworCW5pbmR5OTYwKQorCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKKwkJb3M9LW5pbmR5CisJCTs7CisJbW9uOTYwKQorCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKKwkJb3M9LW1vbjk2MAorCQk7OworCW5vbnN0b3B1eCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLWNvbXBhcQorCQlvcz0tbm9uc3RvcHV4CisJCTs7CisJbnAxKQorCQliYXNpY19tYWNoaW5lPW5wMS1nb3VsZAorCQk7OworCW5zci10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bnNyLXRhbmRlbQorCQk7OworCW9wNTBuLSogfCBvcDYwYy0qKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwlvcGVucmlzYyB8IG9wZW5yaXNjLSopCisJCWJhc2ljX21hY2hpbmU9b3IzMi11bmtub3duCisJCTs7CisJb3M0MDApCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1pYm0KKwkJb3M9LW9zNDAwCisJCTs7CisJT1NFNjgwMDAgfCBvc2U2ODAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtZXJpY3Nzb24KKwkJb3M9LW9zZQorCQk7OworCW9zNjhrKQorCQliYXNpY19tYWNoaW5lPW02OGstbm9uZQorCQlvcz0tb3M2OGsKKwkJOzsKKwlwYS1oaXRhY2hpKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaGl0YWNoaQorCQlvcz0taGl1eHdlMgorCQk7OworCXBhcmFnb24pCisJCWJhc2ljX21hY2hpbmU9aTg2MC1pbnRlbAorCQlvcz0tb3NmCisJCTs7CisJcGFyaXNjKQorCQliYXNpY19tYWNoaW5lPWhwcGEtdW5rbm93bgorCQlvcz0tbGludXgKKwkJOzsKKwlwYXJpc2MtKikKKwkJYmFzaWNfbWFjaGluZT1ocHBhLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCW9zPS1saW51eAorCQk7OworCXBiZCkKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy10dGkKKwkJOzsKKwlwYmIpCisJCWJhc2ljX21hY2hpbmU9bTY4ay10dGkKKwkJOzsKKwlwYzUzMiB8IHBjNTMyLSopCisJCWJhc2ljX21hY2hpbmU9bnMzMmstcGM1MzIKKwkJOzsKKwlwYzk4KQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJOzsKKwlwYzk4LSopCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBlbnRpdW0gfCBwNSB8IGs1IHwgazYgfCBuZXhnZW4gfCB2aWFjMykKKwkJYmFzaWNfbWFjaGluZT1pNTg2LXBjCisJCTs7CisJcGVudGl1bXBybyB8IHA2IHwgNng4NiB8IGF0aGxvbiB8IGF0aGxvbl8qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJOzsKKwlwZW50aXVtaWkgfCBwZW50aXVtMiB8IHBlbnRpdW1paWkgfCBwZW50aXVtMykKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCTs7CisJcGVudGl1bTQpCisJCWJhc2ljX21hY2hpbmU9aTc4Ni1wYworCQk7OworCXBlbnRpdW0tKiB8IHA1LSogfCBrNS0qIHwgazYtKiB8IG5leGdlbi0qIHwgdmlhYzMtKikKKwkJYmFzaWNfbWFjaGluZT1pNTg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bXByby0qIHwgcDYtKiB8IDZ4ODYtKiB8IGF0aGxvbi0qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtaWktKiB8IHBlbnRpdW0yLSogfCBwZW50aXVtaWlpLSogfCBwZW50aXVtMy0qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtNC0qKQorCQliYXNpY19tYWNoaW5lPWk3ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwbikKKwkJYmFzaWNfbWFjaGluZT1wbi1nb3VsZAorCQk7OworCXBvd2VyKQliYXNpY19tYWNoaW5lPXBvd2VyLWlibQorCQk7OworCXBwYykJYmFzaWNfbWFjaGluZT1wb3dlcnBjLXVua25vd24KKwkJOzsKKwlwcGMtKikJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcHBjbGUgfCBwb3dlcnBjbGl0dGxlIHwgcHBjLWxlIHwgcG93ZXJwYy1saXR0bGUpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwY2xlLXVua25vd24KKwkJOzsKKwlwcGNsZS0qIHwgcG93ZXJwY2xpdHRsZS0qKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGNsZS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBwYzY0KQliYXNpY19tYWNoaW5lPXBvd2VycGM2NC11bmtub3duCisJCTs7CisJcHBjNjQtKikgYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwcGM2NGxlIHwgcG93ZXJwYzY0bGl0dGxlIHwgcHBjNjQtbGUgfCBwb3dlcnBjNjQtbGl0dGxlKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGM2NGxlLXVua25vd24KKwkJOzsKKwlwcGM2NGxlLSogfCBwb3dlcnBjNjRsaXR0bGUtKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjRsZS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBzMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LWlibQorCQk7OworCXB3MzIpCisJCWJhc2ljX21hY2hpbmU9aTU4Ni11bmtub3duCisJCW9zPS1wdzMyCisJCTs7CisJcmRvcykKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1yZG9zCisJCTs7CisJcm9tNjhrKQorCQliYXNpY19tYWNoaW5lPW02OGstcm9tNjhrCisJCW9zPS1jb2ZmCisJCTs7CisJcm1bNDZdMDApCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zaWVtZW5zCisJCTs7CisJcnRwYyB8IHJ0cGMtKikKKwkJYmFzaWNfbWFjaGluZT1yb21wLWlibQorCQk7OworCXMzOTAgfCBzMzkwLSopCisJCWJhc2ljX21hY2hpbmU9czM5MC1pYm0KKwkJOzsKKwlzMzkweCB8IHMzOTB4LSopCisJCWJhc2ljX21hY2hpbmU9czM5MHgtaWJtCisJCTs7CisJc2EyOTIwMCkKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tdWRpCisJCTs7CisJc2IxKQorCQliYXNpY19tYWNoaW5lPW1pcHNpc2E2NHNiMS11bmtub3duCisJCTs7CisJc2IxZWwpCisJCWJhc2ljX21hY2hpbmU9bWlwc2lzYTY0c2IxZWwtdW5rbm93bgorCQk7OworCXNkZSkKKwkJYmFzaWNfbWFjaGluZT1taXBzaXNhMzItc2RlCisJCW9zPS1lbGYKKwkJOzsKKwlzZWkpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zZWkKKwkJb3M9LXNlaXV4CisJCTs7CisJc2VxdWVudCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXNlcXVlbnQKKwkJOzsKKwlzaCkKKwkJYmFzaWNfbWFjaGluZT1zaC1oaXRhY2hpCisJCW9zPS1obXMKKwkJOzsKKwlzaDVlbCkKKwkJYmFzaWNfbWFjaGluZT1zaDVsZS11bmtub3duCisJCTs7CisJc2g2NCkKKwkJYmFzaWNfbWFjaGluZT1zaDY0LXVua25vd24KKwkJOzsKKwlzcGFyY2xpdGUtd3JzIHwgc2ltc28td3JzKQorCQliYXNpY19tYWNoaW5lPXNwYXJjbGl0ZS13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwlzcHM3KQorCQliYXNpY19tYWNoaW5lPW02OGstYnVsbAorCQlvcz0tc3lzdjIKKwkJOzsKKwlzcHVyKQorCQliYXNpY19tYWNoaW5lPXNwdXItdW5rbm93bgorCQk7OworCXN0MjAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXRhbmRlbQorCQk7OworCXN0cmF0dXMpCisJCWJhc2ljX21hY2hpbmU9aTg2MC1zdHJhdHVzCisJCW9zPS1zeXN2NAorCQk7OworCXN1bjIpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgorCQk7OworCXN1bjJvczMpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgorCQlvcz0tc3Vub3MzCisJCTs7CisJc3VuMm9zNCkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCisJCW9zPS1zdW5vczQKKwkJOzsKKwlzdW4zb3MzKQorCQliYXNpY19tYWNoaW5lPW02OGstc3VuCisJCW9zPS1zdW5vczMKKwkJOzsKKwlzdW4zb3M0KQorCQliYXNpY19tYWNoaW5lPW02OGstc3VuCisJCW9zPS1zdW5vczQKKwkJOzsKKwlzdW40b3MzKQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQlvcz0tc3Vub3MzCisJCTs7CisJc3VuNG9zNCkKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJb3M9LXN1bm9zNAorCQk7OworCXN1bjRzb2wyKQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQlvcz0tc29sYXJpczIKKwkJOzsKKwlzdW4zIHwgc3VuMy0qKQorCQliYXNpY19tYWNoaW5lPW02OGstc3VuCisJCTs7CisJc3VuNCkKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJOzsKKwlzdW4zODYgfCBzdW4zODZpIHwgcm9hZHJ1bm5lcikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXN1bgorCQk7OworCXN2MSkKKwkJYmFzaWNfbWFjaGluZT1zdjEtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJc3ltbWV0cnkpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1zZXF1ZW50CisJCW9zPS1keW5peAorCQk7OworCXQzZSkKKwkJYmFzaWNfbWFjaGluZT1hbHBoYWV2NS1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwl0OTApCisJCWJhc2ljX21hY2hpbmU9dDkwLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXRpYzU0eCB8IGM1NHgqKQorCQliYXNpY19tYWNoaW5lPXRpYzU0eC11bmtub3duCisJCW9zPS1jb2ZmCisJCTs7CisJdGljNTV4IHwgYzU1eCopCisJCWJhc2ljX21hY2hpbmU9dGljNTV4LXVua25vd24KKwkJb3M9LWNvZmYKKwkJOzsKKwl0aWM2eCB8IGM2eCopCisJCWJhc2ljX21hY2hpbmU9dGljNngtdW5rbm93bgorCQlvcz0tY29mZgorCQk7OworICAgICAgICAjIFRoaXMgbXVzdCBiZSBtYXRjaGVkIGJlZm9yZSB0aWxlKi4KKyAgICAgICAgdGlsZWd4KikKKwkJYmFzaWNfbWFjaGluZT10aWxlZ3gtdW5rbm93bgorCQlvcz0tbGludXgtZ251CisJCTs7CisJdGlsZSopCisJCWJhc2ljX21hY2hpbmU9dGlsZS11bmtub3duCisJCW9zPS1saW51eC1nbnUKKwkJOzsKKwl0eDM5KQorCQliYXNpY19tYWNoaW5lPW1pcHN0eDM5LXVua25vd24KKwkJOzsKKwl0eDM5ZWwpCisJCWJhc2ljX21hY2hpbmU9bWlwc3R4MzllbC11bmtub3duCisJCTs7CisJdG9hZDEpCisJCWJhc2ljX21hY2hpbmU9cGRwMTAteGtsCisJCW9zPS10b3BzMjAKKwkJOzsKKwl0b3dlciB8IHRvd2VyLTMyKQorCQliYXNpY19tYWNoaW5lPW02OGstbmNyCisJCTs7CisJdHBmKQorCQliYXNpY19tYWNoaW5lPXMzOTB4LWlibQorCQlvcz0tdHBmCisJCTs7CisJdWRpMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCisJCW9zPS11ZGkKKwkJOzsKKwl1bHRyYTMpCisJCWJhc2ljX21hY2hpbmU9YTI5ay1ueXUKKwkJb3M9LXN5bTEKKwkJOzsKKwl2ODEwIHwgbmVjdjgxMCkKKwkJYmFzaWNfbWFjaGluZT12ODEwLW5lYworCQlvcz0tbm9uZQorCQk7OworCXZheHYpCisJCWJhc2ljX21hY2hpbmU9dmF4LWRlYworCQlvcz0tc3lzdgorCQk7OworCXZtcykKKwkJYmFzaWNfbWFjaGluZT12YXgtZGVjCisJCW9zPS12bXMKKwkJOzsKKwl2cHAqfHZ4fHZ4LSopCisJCWJhc2ljX21hY2hpbmU9ZjMwMS1mdWppdHN1CisJCTs7CisJdnh3b3Jrczk2MCkKKwkJYmFzaWNfbWFjaGluZT1pOTYwLXdycworCQlvcz0tdnh3b3JrcworCQk7OworCXZ4d29ya3M2OCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXdycworCQlvcz0tdnh3b3JrcworCQk7OworCXZ4d29ya3MyOWspCisJCWJhc2ljX21hY2hpbmU9YTI5ay13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwl3NjUqKQorCQliYXNpY19tYWNoaW5lPXc2NS13ZGMKKwkJb3M9LW5vbmUKKwkJOzsKKwl3ODlrLSopCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS13aW5ib25kCisJCW9zPS1wcm9lbGYKKwkJOzsKKwl4Ym94KQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJb3M9LW1pbmd3MzIKKwkJOzsKKwl4cHMgfCB4cHMxMDApCisJCWJhc2ljX21hY2hpbmU9eHBzMTAwLWhvbmV5d2VsbAorCQk7OworCXltcCkKKwkJYmFzaWNfbWFjaGluZT15bXAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJejhrLSotY29mZikKKwkJYmFzaWNfbWFjaGluZT16OGstdW5rbm93bgorCQlvcz0tc2ltCisJCTs7CisJejgwLSotY29mZikKKwkJYmFzaWNfbWFjaGluZT16ODAtdW5rbm93bgorCQlvcz0tc2ltCisJCTs7CisJbm9uZSkKKwkJYmFzaWNfbWFjaGluZT1ub25lLW5vbmUKKwkJb3M9LW5vbmUKKwkJOzsKKworIyBIZXJlIHdlIGhhbmRsZSB0aGUgZGVmYXVsdCBtYW51ZmFjdHVyZXIgb2YgY2VydGFpbiBDUFUgdHlwZXMuICBJdCBpcyBpbgorIyBzb21lIGNhc2VzIHRoZSBvbmx5IG1hbnVmYWN0dXJlciwgaW4gb3RoZXJzLCBpdCBpcyB0aGUgbW9zdCBwb3B1bGFyLgorCXc4OWspCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS13aW5ib25kCisJCTs7CisJb3A1MG4pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKKwkJOzsKKwlvcDYwYykKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLW9raQorCQk7OworCXJvbXApCisJCWJhc2ljX21hY2hpbmU9cm9tcC1pYm0KKwkJOzsKKwltbWl4KQorCQliYXNpY19tYWNoaW5lPW1taXgta251dGgKKwkJOzsKKwlyczYwMDApCisJCWJhc2ljX21hY2hpbmU9cnM2MDAwLWlibQorCQk7OworCXZheCkKKwkJYmFzaWNfbWFjaGluZT12YXgtZGVjCisJCTs7CisJcGRwMTApCisJCSMgdGhlcmUgYXJlIG1hbnkgY2xvbmVzLCBzbyBERUMgaXMgbm90IGEgc2FmZSBiZXQKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC11bmtub3duCisJCTs7CisJcGRwMTEpCisJCWJhc2ljX21hY2hpbmU9cGRwMTEtZGVjCisJCTs7CisJd2UzMmspCisJCWJhc2ljX21hY2hpbmU9d2UzMmstYXR0CisJCTs7CisJc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMjRdYWViIHwgc2hbMzRdZWIgfCBzaFsxMjM0XWxlIHwgc2hbMjNdZWxlKQorCQliYXNpY19tYWNoaW5lPXNoLXVua25vd24KKwkJOzsKKwlzcGFyYyB8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIgfCBzcGFyY3Y5dikKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJOzsKKwljeWRyYSkKKwkJYmFzaWNfbWFjaGluZT1jeWRyYS1jeWRyb21lCisJCTs7CisJb3Jpb24pCisJCWJhc2ljX21hY2hpbmU9b3Jpb24taGlnaGxldmVsCisJCTs7CisJb3Jpb24xMDUpCisJCWJhc2ljX21hY2hpbmU9Y2xpcHBlci1oaWdobGV2ZWwKKwkJOzsKKwltYWMgfCBtcHcgfCBtYWMtbXB3KQorCQliYXNpY19tYWNoaW5lPW02OGstYXBwbGUKKwkJOzsKKwlwbWFjIHwgcG1hYy1tcHcpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1hcHBsZQorCQk7OworCSotdW5rbm93bikKKwkJIyBNYWtlIHN1cmUgdG8gbWF0Y2ggYW4gYWxyZWFkeS1jYW5vbmljYWxpemVkIG1hY2hpbmUgbmFtZS4KKwkJOzsKKwkqKQorCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBcYCQxXCc6IG1hY2hpbmUgXGAkYmFzaWNfbWFjaGluZVwnIG5vdCByZWNvZ25pemVkIDE+JjIKKwkJZXhpdCAxCisJCTs7Citlc2FjCisKKyMgSGVyZSB3ZSBjYW5vbmljYWxpemUgY2VydGFpbiBhbGlhc2VzIGZvciBtYW51ZmFjdHVyZXJzLgorY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCSotZGlnaXRhbCopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvZGlnaXRhbC4qL2RlYy8nYAorCQk7OworCSotY29tbW9kb3JlKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9jb21tb2RvcmUuKi9jYm0vJ2AKKwkJOzsKKwkqKQorCQk7OworZXNhYworCisjIERlY29kZSBtYW51ZmFjdHVyZXItc3BlY2lmaWMgYWxpYXNlcyBmb3IgY2VydGFpbiBvcGVyYXRpbmcgc3lzdGVtcy4KKworaWYgWyB4IiRvcyIgIT0geCIiIF0KK3RoZW4KK2Nhc2UgJG9zIGluCisgICAgICAgICMgRmlyc3QgbWF0Y2ggc29tZSBzeXN0ZW0gdHlwZSBhbGlhc2VzCisgICAgICAgICMgdGhhdCBtaWdodCBnZXQgY29uZnVzZWQgd2l0aCB2YWxpZCBzeXN0ZW0gdHlwZXMuCisJIyAtc29sYXJpcyogaXMgYSBiYXNpYyBzeXN0ZW0gdHlwZSwgd2l0aCB0aGlzIG9uZSBleGNlcHRpb24uCisgICAgICAgIC1hdXJvcmF1eCkKKwkgICAgICAgIG9zPS1hdXJvcmF1eAorCQk7OworCS1zb2xhcmlzMSB8IC1zb2xhcmlzMS4qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c29sYXJpczF8c3Vub3M0fCdgCisJCTs7CisJLXNvbGFyaXMpCisJCW9zPS1zb2xhcmlzMgorCQk7OworCS1zdnI0KikKKwkJb3M9LXN5c3Y0CisJCTs7CisJLXVuaXh3YXJlKikKKwkJb3M9LXN5c3Y0LjJ1dworCQk7OworCS1nbnUvbGludXgqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8Z251L2xpbnV4fGxpbnV4LWdudXwnYAorCQk7OworCSMgRmlyc3QgYWNjZXB0IHRoZSBiYXNpYyBzeXN0ZW0gdHlwZXMuCisJIyBUaGUgcG9ydGFibGUgc3lzdGVtcyBjb21lcyBmaXJzdC4KKwkjIEVhY2ggYWx0ZXJuYXRpdmUgTVVTVCBFTkQgSU4gQSAqLCB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgorCSMgLXN5c3YqIGlzIG5vdCBoZXJlIGJlY2F1c2UgaXQgY29tZXMgbGF0ZXIsIGFmdGVyIHN5c3ZyNC4KKwktZ251KiB8IC1ic2QqIHwgLW1hY2gqIHwgLW1pbml4KiB8IC1nZW5peCogfCAtdWx0cml4KiB8IC1pcml4KiBcCisJICAgICAgfCAtKnZtcyogfCAtc2NvKiB8IC1lc2l4KiB8IC1pc2MqIHwgLWFpeCogfCAtY25rKiB8IC1zdW5vcyB8IC1zdW5vc1szNF0qXAorCSAgICAgIHwgLWhwdXgqIHwgLXVub3MqIHwgLW9zZiogfCAtbHVuYSogfCAtZGd1eCogfCAtYXVyb3JhdXgqIHwgLXNvbGFyaXMqIFwKKwkgICAgICB8IC1zeW0qIHwgLWtvcGVuc29sYXJpcyogXAorCSAgICAgIHwgLWFtaWdhb3MqIHwgLWFtaWdhZG9zKiB8IC1tc2RvcyogfCAtbmV3c29zKiB8IC11bmljb3MqIHwgLWFvZiogXAorCSAgICAgIHwgLWFvcyogfCAtYXJvcyogXAorCSAgICAgIHwgLW5pbmR5KiB8IC12eHNpbSogfCAtdnh3b3JrcyogfCAtZWJtb24qIHwgLWhtcyogfCAtbXZzKiBcCisJICAgICAgfCAtY2xpeCogfCAtcmlzY29zKiB8IC11bmlwbHVzKiB8IC1pcmlzKiB8IC1ydHUqIHwgLXhlbml4KiBcCisJICAgICAgfCAtaGl1eCogfCAtMzg2YnNkKiB8IC1rbmV0YnNkKiB8IC1taXJic2QqIHwgLW5ldGJzZCogXAorCSAgICAgIHwgLW9wZW5ic2QqIHwgLXNvbGlkYnNkKiBcCisJICAgICAgfCAtZWtrb2JzZCogfCAta2ZyZWVic2QqIHwgLWZyZWVic2QqIHwgLXJpc2NpeCogfCAtbHlueG9zKiBcCisJICAgICAgfCAtYm9zeCogfCAtbmV4dHN0ZXAqIHwgLWN4dXgqIHwgLWFvdXQqIHwgLWVsZiogfCAtb2FiaSogXAorCSAgICAgIHwgLXB0eCogfCAtY29mZiogfCAtZWNvZmYqIHwgLXdpbm50KiB8IC1kb21haW4qIHwgLXZzdGEqIFwKKwkgICAgICB8IC11ZGkqIHwgLWVhYmkqIHwgLWxpdGVzKiB8IC1pZWVlKiB8IC1nbzMyKiB8IC1hdXgqIFwKKwkgICAgICB8IC1jaG9ydXNvcyogfCAtY2hvcnVzcmRiKiB8IC1jZWdjYyogXAorCSAgICAgIHwgLWN5Z3dpbiogfCAtcGUqIHwgLXBzb3MqIHwgLW1vc3MqIHwgLXByb2VsZiogfCAtcnRlbXMqIFwKKwkgICAgICB8IC1taW5ndzMyKiB8IC1saW51eC1nbnUqIHwgLWxpbnV4LW5ld2xpYiogfCAtbGludXgtdWNsaWJjKiBcCisJICAgICAgfCAtdXhwdiogfCAtYmVvcyogfCAtbXBlaXgqIHwgLXVkayogXAorCSAgICAgIHwgLWludGVyaXgqIHwgLXV3aW4qIHwgLW1rcyogfCAtcmhhcHNvZHkqIHwgLWRhcndpbiogfCAtb3BlbmVkKiBcCisJICAgICAgfCAtb3BlbnN0ZXAqIHwgLW9za2l0KiB8IC1jb25peCogfCAtcHczMiogfCAtbm9uc3RvcHV4KiBcCisJICAgICAgfCAtc3Rvcm0tY2hhb3MqIHwgLXRvcHMxMCogfCAtdGVuZXgqIHwgLXRvcHMyMCogfCAtaXRzKiBcCisJICAgICAgfCAtb3MyKiB8IC12b3MqIHwgLXBhbG1vcyogfCAtdWNsaW51eCogfCAtbnVjbGV1cyogXAorCSAgICAgIHwgLW1vcnBob3MqIHwgLXN1cGVydXgqIHwgLXJ0bWsqIHwgLXJ0bWstbm92YSogfCAtd2luZGlzcyogXAorCSAgICAgIHwgLXBvd2VybWF4KiB8IC1kbml4KiB8IC1ueDYgfCAtbng3IHwgLXNlaSogfCAtZHJhZ29uZmx5KiBcCisJICAgICAgfCAtc2t5b3MqIHwgLWhhaWt1KiB8IC1yZG9zKiB8IC10b3BwZXJzKiB8IC1kcm9wcyogfCAtZXMqKQorCSMgUmVtZW1iZXIsIGVhY2ggYWx0ZXJuYXRpdmUgTVVTVCBFTkQgSU4gKiwgdG8gbWF0Y2ggYSB2ZXJzaW9uIG51bWJlci4KKwkJOzsKKwktcW54KikKKwkJY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCQkgICAgeDg2LSogfCBpKjg2LSopCisJCQk7OworCQkgICAgKikKKwkJCW9zPS1udG8kb3MKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwktbnRvLXFueCopCisJCTs7CisJLW50byopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xudG98bnRvLXFueHwnYAorCQk7OworCS1zaW0gfCAtZXMxODAwKiB8IC1obXMqIHwgLXhyYXkgfCAtb3M2OGsqIHwgLW5vbmUqIHwgLXY4OHIqIFwKKwkgICAgICB8IC13aW5kb3dzKiB8IC1vc3ggfCAtYWJ1ZyB8IC1uZXR3YXJlKiB8IC1vczkqIHwgLWJlb3MqIHwgLWhhaWt1KiBcCisJICAgICAgfCAtbWFjb3MqIHwgLW1wdyogfCAtbWFnaWMqIHwgLW1taXh3YXJlKiB8IC1tb245NjAqIHwgLWxuZXdzKikKKwkJOzsKKwktbWFjKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfG1hY3xtYWNvc3wnYAorCQk7OworCS1saW51eC1kaWV0bGliYykKKwkJb3M9LWxpbnV4LWRpZXRsaWJjCisJCTs7CisJLWxpbnV4KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfGxpbnV4fGxpbnV4LWdudXwnYAorCQk7OworCS1zdW5vczUqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c3Vub3M1fHNvbGFyaXMyfCdgCisJCTs7CisJLXN1bm9zNiopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzdW5vczZ8c29sYXJpczN8J2AKKwkJOzsKKwktb3BlbmVkKikKKwkJb3M9LW9wZW5lZGl0aW9uCisJCTs7CisgICAgICAgIC1vczQwMCopCisJCW9zPS1vczQwMAorCQk7OworCS13aW5jZSopCisJCW9zPS13aW5jZQorCQk7OworCS1vc2Zyb3NlKikKKwkJb3M9LW9zZnJvc2UKKwkJOzsKKwktb3NmKikKKwkJb3M9LW9zZgorCQk7OworCS11dGVrKikKKwkJb3M9LWJzZAorCQk7OworCS1keW5peCopCisJCW9zPS1ic2QKKwkJOzsKKwktYWNpcyopCisJCW9zPS1hb3MKKwkJOzsKKwktYXRoZW9zKikKKwkJb3M9LWF0aGVvcworCQk7OworCS1zeWxsYWJsZSopCisJCW9zPS1zeWxsYWJsZQorCQk7OworCS0zODZic2QpCisJCW9zPS1ic2QKKwkJOzsKKwktY3RpeCogfCAtdXRzKikKKwkJb3M9LXN5c3YKKwkJOzsKKwktbm92YSopCisJCW9zPS1ydG1rLW5vdmEKKwkJOzsKKwktbnMyICkKKwkJb3M9LW5leHRzdGVwMgorCQk7OworCS1uc2sqKQorCQlvcz0tbnNrCisJCTs7CisJIyBQcmVzZXJ2ZSB0aGUgdmVyc2lvbiBudW1iZXIgb2Ygc2luaXg1LgorCS1zaW5peDUuKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHNpbml4fHN5c3Z8J2AKKwkJOzsKKwktc2luaXgqKQorCQlvcz0tc3lzdjQKKwkJOzsKKyAgICAgICAgLXRwZiopCisJCW9zPS10cGYKKwkJOzsKKwktdHJpdG9uKikKKwkJb3M9LXN5c3YzCisJCTs7CisJLW9zcyopCisJCW9zPS1zeXN2MworCQk7OworCS1zdnI0KQorCQlvcz0tc3lzdjQKKwkJOzsKKwktc3ZyMykKKwkJb3M9LXN5c3YzCisJCTs7CisJLXN5c3ZyNCkKKwkJb3M9LXN5c3Y0CisJCTs7CisJIyBUaGlzIG11c3QgY29tZSBhZnRlciAtc3lzdnI0LgorCS1zeXN2KikKKwkJOzsKKwktb3NlKikKKwkJb3M9LW9zZQorCQk7OworCS1lczE4MDAqKQorCQlvcz0tb3NlCisJCTs7CisJLXhlbml4KQorCQlvcz0teGVuaXgKKwkJOzsKKwktKm1pbnQgfCAtbWludFswLTldKiB8IC0qTWlOVCB8IC1NaU5UWzAtOV0qKQorCQlvcz0tbWludAorCQk7OworCS1hcm9zKikKKwkJb3M9LWFyb3MKKwkJOzsKKwkta2FvcyopCisJCW9zPS1rYW9zCisJCTs7CisJLXp2bW9lKQorCQlvcz0tenZtb2UKKwkJOzsKKwktZGljb3MqKQorCQlvcz0tZGljb3MKKwkJOzsKKyAgICAgICAgLW5hY2wqKQorCSAgICAgICAgOzsKKwktbm9uZSkKKwkJOzsKKwkqKQorCQkjIEdldCByaWQgb2YgdGhlIGAtJyBhdCB0aGUgYmVnaW5uaW5nIG9mICRvcy4KKwkJb3M9YGVjaG8gJG9zIHwgc2VkICdzL1teLV0qLS8vJ2AKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBzeXN0ZW0gXGAkb3NcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworZXNhYworZWxzZQorCisjIEhlcmUgd2UgaGFuZGxlIHRoZSBkZWZhdWx0IG9wZXJhdGluZyBzeXN0ZW1zIHRoYXQgY29tZSB3aXRoIHZhcmlvdXMgbWFjaGluZXMuCisjIFRoZSB2YWx1ZSBzaG91bGQgYmUgd2hhdCB0aGUgdmVuZG9yIGN1cnJlbnRseSBzaGlwcyBvdXQgdGhlIGRvb3Igd2l0aCB0aGVpcgorIyBtYWNoaW5lIG9yIHB1dCBhbm90aGVyIHdheSwgdGhlIG1vc3QgcG9wdWxhciBvcyBwcm92aWRlZCB3aXRoIHRoZSBtYWNoaW5lLgorCisjIE5vdGUgdGhhdCBpZiB5b3UncmUgZ29pbmcgdG8gdHJ5IHRvIG1hdGNoICItTUFOVUZBQ1RVUkVSIiBoZXJlIChzYXksCisjICItc3VuIiksIHRoZW4geW91IGhhdmUgdG8gdGVsbCB0aGUgY2FzZSBzdGF0ZW1lbnQgdXAgdG93YXJkcyB0aGUgdG9wCisjIHRoYXQgTUFOVUZBQ1RVUkVSIGlzbid0IGFuIG9wZXJhdGluZyBzeXN0ZW0uICBPdGhlcndpc2UsIGNvZGUgYWJvdmUKKyMgd2lsbCBzaWduYWwgYW4gZXJyb3Igc2F5aW5nIHRoYXQgTUFOVUZBQ1RVUkVSIGlzbid0IGFuIG9wZXJhdGluZworIyBzeXN0ZW0sIGFuZCB3ZSdsbCBuZXZlciBnZXQgdG8gdGhpcyBwb2ludC4KKworY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorICAgICAgICBzY29yZS0qKQorCQlvcz0tZWxmCisJCTs7CisgICAgICAgIHNwdS0qKQorCQlvcz0tZWxmCisJCTs7CisJKi1hY29ybikKKwkJb3M9LXJpc2NpeDEuMgorCQk7OworCWFybSotcmViZWwpCisJCW9zPS1saW51eAorCQk7OworCWFybSotc2VtaSkKKwkJb3M9LWFvdXQKKwkJOzsKKyAgICAgICAgYzR4LSogfCB0aWM0eC0qKQorICAgICAgICAJb3M9LWNvZmYKKwkJOzsKKwkjIFRoaXMgbXVzdCBjb21lIGJlZm9yZSB0aGUgKi1kZWMgZW50cnkuCisJcGRwMTAtKikKKwkJb3M9LXRvcHMyMAorCQk7OworCXBkcDExLSopCisJCW9zPS1ub25lCisJCTs7CisJKi1kZWMgfCB2YXgtKikKKwkJb3M9LXVsdHJpeDQuMgorCQk7OworCW02OCotYXBvbGxvKQorCQlvcz0tZG9tYWluCisJCTs7CisJaTM4Ni1zdW4pCisJCW9zPS1zdW5vczQuMC4yCisJCTs7CisJbTY4MDAwLXN1bikKKwkJb3M9LXN1bm9zMworCQkjIFRoaXMgYWxzbyBleGlzdHMgaW4gdGhlIGNvbmZpZ3VyZSBwcm9ncmFtLCBidXQgd2FzIG5vdCB0aGUKKwkJIyBkZWZhdWx0LgorCQkjIG9zPS1zdW5vczQKKwkJOzsKKwltNjgqLWNpc2NvKQorCQlvcz0tYW91dAorCQk7OworICAgICAgICBtZXAtKikKKwkJb3M9LWVsZgorCQk7OworCW1pcHMqLWNpc2NvKQorCQlvcz0tZWxmCisJCTs7CisJbWlwcyotKikKKwkJb3M9LWVsZgorCQk7OworCW9yMzItKikKKwkJb3M9LWNvZmYKKwkJOzsKKwkqLXR0aSkJIyBtdXN0IGJlIGJlZm9yZSBzcGFyYyBlbnRyeSBvciB3ZSBnZXQgdGhlIHdyb25nIG9zLgorCQlvcz0tc3lzdjMKKwkJOzsKKwlzcGFyYy0qIHwgKi1zdW4pCisJCW9zPS1zdW5vczQuMS4xCisJCTs7CisJKi1iZSkKKwkJb3M9LWJlb3MKKwkJOzsKKwkqLWhhaWt1KQorCQlvcz0taGFpa3UKKwkJOzsKKwkqLWlibSkKKwkJb3M9LWFpeAorCQk7OworICAgIAkqLWtudXRoKQorCQlvcz0tbW1peHdhcmUKKwkJOzsKKwkqLXdlYykKKwkJb3M9LXByb2VsZgorCQk7OworCSotd2luYm9uZCkKKwkJb3M9LXByb2VsZgorCQk7OworCSotb2tpKQorCQlvcz0tcHJvZWxmCisJCTs7CisJKi1ocCkKKwkJb3M9LWhwdXgKKwkJOzsKKwkqLWhpdGFjaGkpCisJCW9zPS1oaXV4CisJCTs7CisJaTg2MC0qIHwgKi1hdHQgfCAqLW5jciB8ICotYWx0b3MgfCAqLW1vdG9yb2xhIHwgKi1jb252ZXJnZW50KQorCQlvcz0tc3lzdgorCQk7OworCSotY2JtKQorCQlvcz0tYW1pZ2FvcworCQk7OworCSotZGcpCisJCW9zPS1kZ3V4CisJCTs7CisJKi1kb2xwaGluKQorCQlvcz0tc3lzdjMKKwkJOzsKKwltNjhrLWNjdXIpCisJCW9zPS1ydHUKKwkJOzsKKwltODhrLW9tcm9uKikKKwkJb3M9LWx1bmEKKwkJOzsKKwkqLW5leHQgKQorCQlvcz0tbmV4dHN0ZXAKKwkJOzsKKwkqLXNlcXVlbnQpCisJCW9zPS1wdHgKKwkJOzsKKwkqLWNyZHMpCisJCW9zPS11bm9zCisJCTs7CisJKi1ucykKKwkJb3M9LWdlbml4CisJCTs7CisJaTM3MC0qKQorCQlvcz0tbXZzCisJCTs7CisJKi1uZXh0KQorCQlvcz0tbmV4dHN0ZXAzCisJCTs7CisJKi1nb3VsZCkKKwkJb3M9LXN5c3YKKwkJOzsKKwkqLWhpZ2hsZXZlbCkKKwkJb3M9LWJzZAorCQk7OworCSotZW5jb3JlKQorCQlvcz0tYnNkCisJCTs7CisJKi1zZ2kpCisJCW9zPS1pcml4CisJCTs7CisJKi1zaWVtZW5zKQorCQlvcz0tc3lzdjQKKwkJOzsKKwkqLW1hc3Njb21wKQorCQlvcz0tcnR1CisJCTs7CisJZjMwWzAxXS1mdWppdHN1IHwgZjcwMC1mdWppdHN1KQorCQlvcz0tdXhwdgorCQk7OworCSotcm9tNjhrKQorCQlvcz0tY29mZgorCQk7OworCSotKmJ1ZykKKwkJb3M9LWNvZmYKKwkJOzsKKwkqLWFwcGxlKQorCQlvcz0tbWFjb3MKKwkJOzsKKwkqLWF0YXJpKikKKwkJb3M9LW1pbnQKKwkJOzsKKwkqKQorCQlvcz0tbm9uZQorCQk7OworZXNhYworZmkKKworIyBIZXJlIHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBrbm93IHRoZSBvcywgYW5kIHRoZSBDUFUgdHlwZSwgYnV0IG5vdCB0aGUKKyMgbWFudWZhY3R1cmVyLiAgV2UgcGljayB0aGUgbG9naWNhbCBtYW51ZmFjdHVyZXIuCit2ZW5kb3I9dW5rbm93bgorY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCSotdW5rbm93bikKKwkJY2FzZSAkb3MgaW4KKwkJCS1yaXNjaXgqKQorCQkJCXZlbmRvcj1hY29ybgorCQkJCTs7CisJCQktc3Vub3MqKQorCQkJCXZlbmRvcj1zdW4KKwkJCQk7OworCQkJLWNuayp8LWFpeCopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktYmVvcyopCisJCQkJdmVuZG9yPWJlCisJCQkJOzsKKwkJCS1ocHV4KikKKwkJCQl2ZW5kb3I9aHAKKwkJCQk7OworCQkJLW1wZWl4KikKKwkJCQl2ZW5kb3I9aHAKKwkJCQk7OworCQkJLWhpdXgqKQorCQkJCXZlbmRvcj1oaXRhY2hpCisJCQkJOzsKKwkJCS11bm9zKikKKwkJCQl2ZW5kb3I9Y3JkcworCQkJCTs7CisJCQktZGd1eCopCisJCQkJdmVuZG9yPWRnCisJCQkJOzsKKwkJCS1sdW5hKikKKwkJCQl2ZW5kb3I9b21yb24KKwkJCQk7OworCQkJLWdlbml4KikKKwkJCQl2ZW5kb3I9bnMKKwkJCQk7OworCQkJLW12cyogfCAtb3BlbmVkKikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCS1vczQwMCopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktcHR4KikKKwkJCQl2ZW5kb3I9c2VxdWVudAorCQkJCTs7CisJCQktdHBmKikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCS12eHNpbSogfCAtdnh3b3JrcyogfCAtd2luZGlzcyopCisJCQkJdmVuZG9yPXdycworCQkJCTs7CisJCQktYXV4KikKKwkJCQl2ZW5kb3I9YXBwbGUKKwkJCQk7OworCQkJLWhtcyopCisJCQkJdmVuZG9yPWhpdGFjaGkKKwkJCQk7OworCQkJLW1wdyogfCAtbWFjb3MqKQorCQkJCXZlbmRvcj1hcHBsZQorCQkJCTs7CisJCQktKm1pbnQgfCAtbWludFswLTldKiB8IC0qTWlOVCB8IC1NaU5UWzAtOV0qKQorCQkJCXZlbmRvcj1hdGFyaQorCQkJCTs7CisJCQktdm9zKikKKwkJCQl2ZW5kb3I9c3RyYXR1cworCQkJCTs7CisJCWVzYWMKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAicy91bmtub3duLyR2ZW5kb3IvImAKKwkJOzsKK2VzYWMKKworZWNobyAkYmFzaWNfbWFjaGluZSRvcworZXhpdAorCisjIExvY2FsIHZhcmlhYmxlczoKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAidGltZXN0YW1wPSciCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZCIKKyMgdGltZS1zdGFtcC1lbmQ6ICInIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjg4NjU5NQotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ3VyZQpAQCAtMCwwICsxLDI4NDI4IEBACisjISAvYmluL3NoCisjIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCisjIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42NyBmb3IgR1N0cmVhbWVyIDAuMTEuMS4KKyMKKyMgUmVwb3J0IGJ1Z3MgdG8gPGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PUdTdHJlYW1lcj4uCisjCisjCisjIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKKyMgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMKKyMKKyMgVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggSW5pdGlhbGl6YXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYworZmkKKworCithc19ubD0nCisnCitleHBvcnQgYXNfbmwKKyMgUHJpbnRpbmcgYSBsb25nIHN0cmluZyBjcmFzaGVzIFNvbGFyaXMgNyAvdXNyL2Jpbi9wcmludGYuCithc19lY2hvPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworIyBQcmVmZXIgYSBrc2ggc2hlbGwgYnVpbHRpbiBvdmVyIGFuIGV4dGVybmFsIHByaW50ZiBwcm9ncmFtIG9uIFNvbGFyaXMsCisjIGJ1dCB3aXRob3V0IHdhc3RpbmcgZm9ya3MgZm9yIGJhc2ggb3IgenNoLgoraWYgdGVzdCAteiAiJEJBU0hfVkVSU0lPTiRaU0hfVkVSU0lPTiIgXAorICAgICYmICh0ZXN0ICJYYHByaW50IC1yIC0tICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnQgLXIgLS0nCisgIGFzX2VjaG9fbj0ncHJpbnQgLXJuIC0tJworZWxpZiAodGVzdCAiWGBwcmludGYgJXMgJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludGYgJXNcbicKKyAgYXNfZWNob19uPSdwcmludGYgJXMnCitlbHNlCisgIGlmIHRlc3QgIlhgKC91c3IvdWNiL2VjaG8gLW4gLW4gJGFzX2VjaG8pIDI+L2Rldi9udWxsYCIgPSAiWC1uICRhc19lY2hvIjsgdGhlbgorICAgIGFzX2VjaG9fYm9keT0nZXZhbCAvdXNyL3VjYi9lY2hvIC1uICIkMSRhc19ubCInCisgICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJworICBlbHNlCisgICAgYXNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkMSIgOiAiWFxcKC4qXFwpIicKKyAgICBhc19lY2hvX25fYm9keT0nZXZhbAorICAgICAgYXJnPSQxOworICAgICAgY2FzZSAkYXJnIGluICMoCisgICAgICAqIiRhc19ubCIqKQorCWV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkkYXNfbmwiOworCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJGFzX25sXFwoLipcXCkiYDs7CisgICAgICBlc2FjOworICAgICAgZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSIgfCB0ciAtZCAiJGFzX25sIgorICAgICcKKyAgICBleHBvcnQgYXNfZWNob19uX2JvZHkKKyAgICBhc19lY2hvX249J3NoIC1jICRhc19lY2hvX25fYm9keSBhc19lY2hvJworICBmaQorICBleHBvcnQgYXNfZWNob19ib2R5CisgIGFzX2VjaG89J3NoIC1jICRhc19lY2hvX2JvZHkgYXNfZWNobycKK2ZpCisKKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgUEFUSF9TRVBBUkFUT1I9OgorICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSAmJiB7CisgICAgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwKKyAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICB9CitmaQorCisKKyMgSUZTCisjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCisjIChJZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNhYmxlIHdvcmQKKyMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKK0lGUz0iICIiCSRhc19ubCIKKworIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KK2Nhc2UgJDAgaW4gIygoCisgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKyAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICAgICA7OworZXNhYworIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJworIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCitpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCisgIGFzX215c2VsZj0kMAorZmkKK2lmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKKyAgZXhpdCAxCitmaQorCisjIFVuc2V0IHZhcmlhYmxlcyB0aGF0IHdlIGRvIG5vdCBuZWVkIGFuZCB3aGljaCBjYXVzZSBidWdzIChlLmcuIGluCisjIHByZS0zLjAgVVdJTiBrc2gpLiAgQnV0IGRvIG5vdCBjYXVzZSBidWdzIGluIGJhc2ggMi4wMTsgdGhlICJ8fCBleGl0IDEiCisjIHN1cHByZXNzZXMgYW55ICJTZWdtZW50YXRpb24gZmF1bHQiIG1lc3NhZ2UgdGhlcmUuICAnKCgnIGNvdWxkCisjIHRyaWdnZXIgYSBidWcgaW4gcGRrc2ggNS4yLjE0LgorZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYgTUFJTCBNQUlMUEFUSAorZG8gZXZhbCB0ZXN0IHhcJHskYXNfdmFyK3NldH0gPSB4c2V0IFwKKyAgJiYgKCAodW5zZXQgJGFzX3ZhcikgfHwgZXhpdCAxKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgJGFzX3ZhciB8fCA6Citkb25lCitQUzE9JyQgJworUFMyPSc+ICcKK1BTND0nKyAnCisKKyMgTkxTIG51aXNhbmNlcy4KK0xDX0FMTD1DCitleHBvcnQgTENfQUxMCitMQU5HVUFHRT1DCitleHBvcnQgTEFOR1VBR0UKKworIyBDRFBBVEguCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKK2lmIHRlc3QgIngkQ09ORklHX1NIRUxMIiA9IHg7IHRoZW4KKyAgYXNfYm91cm5lX2NvbXBhdGlibGU9ImlmIHRlc3QgLW4gXCJcJHtaU0hfVkVSU0lPTitzZXR9XCIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gXCR7MStcIlwkQFwifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJ1wkezErXCJcJEBcIn0nPSdcIlwkQFwiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIFxgKHNldCAtbykgMj4vZGV2L251bGxcYCBpbiAjKAorICAqcG9zaXgqKSA6CisgICAgc2V0IC1vIHBvc2l4IDs7ICMoCisgICopIDoKKyAgICAgOzsKK2VzYWMKK2ZpCisiCisgIGFzX3JlcXVpcmVkPSJhc19mbl9yZXR1cm4gKCkgeyAoZXhpdCBcJDEpOyB9Cithc19mbl9zdWNjZXNzICgpIHsgYXNfZm5fcmV0dXJuIDA7IH0KK2FzX2ZuX2ZhaWx1cmUgKCkgeyBhc19mbl9yZXR1cm4gMTsgfQorYXNfZm5fcmV0X3N1Y2Nlc3MgKCkgeyByZXR1cm4gMDsgfQorYXNfZm5fcmV0X2ZhaWx1cmUgKCkgeyByZXR1cm4gMTsgfQorCitleGl0Y29kZT0wCithc19mbl9zdWNjZXNzIHx8IHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9zdWNjZXNzIGZhaWxlZC47IH0KK2FzX2ZuX2ZhaWx1cmUgJiYgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX2ZhaWx1cmUgc3VjY2VlZGVkLjsgfQorYXNfZm5fcmV0X3N1Y2Nlc3MgfHwgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3JldF9zdWNjZXNzIGZhaWxlZC47IH0KK2FzX2ZuX3JldF9mYWlsdXJlICYmIHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9yZXRfZmFpbHVyZSBzdWNjZWVkZWQuOyB9CitpZiAoIHNldCB4OyBhc19mbl9yZXRfc3VjY2VzcyB5ICYmIHRlc3QgeCA9IFwiXCQxXCIgKTsgdGhlbiA6CisKK2Vsc2UKKyAgZXhpdGNvZGU9MTsgZWNobyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgd2VyZSBub3Qgc2F2ZWQuCitmaQordGVzdCB4XCRleGl0Y29kZSA9IHgwIHx8IGV4aXQgMSIKKyAgYXNfc3VnZ2VzdGVkPSIgIGFzX2xpbmVub18xPSI7YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQkTElORU5PO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkIiBhc19saW5lbm9fMWE9XCRMSU5FTk8KKyAgYXNfbGluZW5vXzI9Ijthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCRMSU5FTk87YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQiIGFzX2xpbmVub18yYT1cJExJTkVOTworICBldmFsICd0ZXN0IFwieFwkYXNfbGluZW5vXzEnXCRhc19ydW4nXCIgIT0gXCJ4XCRhc19saW5lbm9fMidcJGFzX3J1bidcIiAmJgorICB0ZXN0IFwieFxgZXhwciBcJGFzX2xpbmVub18xJ1wkYXNfcnVuJyArIDFcYFwiID0gXCJ4XCRhc19saW5lbm9fMidcJGFzX3J1bidcIicgfHwgZXhpdCAxCit0ZXN0IFwkKCggMSArIDEgKSkgPSAyIHx8IGV4aXQgMSIKKyAgaWYgKGV2YWwgIiRhc19yZXF1aXJlZCIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKK2Vsc2UKKyAgYXNfaGF2ZV9yZXF1aXJlZD1ubworZmkKKyAgaWYgdGVzdCB4JGFzX2hhdmVfcmVxdWlyZWQgPSB4eWVzICYmIChldmFsICIkYXNfc3VnZ2VzdGVkIikgMj4vZGV2L251bGw7IHRoZW4gOgorCitlbHNlCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2FzX2ZvdW5kPWZhbHNlCitmb3IgYXNfZGlyIGluIC9iaW4kUEFUSF9TRVBBUkFUT1IvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGFzX2ZvdW5kPToKKyAgY2FzZSAkYXNfZGlyIGluICMoCisJIC8qKQorCSAgIGZvciBhc19iYXNlIGluIHNoIGJhc2gga3NoIHNoNTsgZG8KKwkgICAgICMgVHJ5IG9ubHkgc2hlbGxzIHRoYXQgZXhpc3QsIHRvIHNhdmUgc2V2ZXJhbCBmb3Jrcy4KKwkgICAgIGFzX3NoZWxsPSRhc19kaXIvJGFzX2Jhc2UKKwkgICAgIGlmIHsgdGVzdCAtZiAiJGFzX3NoZWxsIiB8fCB0ZXN0IC1mICIkYXNfc2hlbGwuZXhlIjsgfSAmJgorCQkgICAgeyAkYXNfZWNobyAiJGFzX2JvdXJuZV9jb21wYXRpYmxlIiIkYXNfcmVxdWlyZWQiIHwgYXNfcnVuPWEgIiRhc19zaGVsbCI7IH0gMj4vZGV2L251bGw7IHRoZW4gOgorICBDT05GSUdfU0hFTEw9JGFzX3NoZWxsIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCisJCSAgIGlmIHsgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIiJGFzX3N1Z2dlc3RlZCIgfCBhc19ydW49YSAiJGFzX3NoZWxsIjsgfSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGJyZWFrIDIKK2ZpCitmaQorCSAgIGRvbmU7OworICAgICAgIGVzYWMKKyAgYXNfZm91bmQ9ZmFsc2UKK2RvbmUKKyRhc19mb3VuZCB8fCB7IGlmIHsgdGVzdCAtZiAiJFNIRUxMIiB8fCB0ZXN0IC1mICIkU0hFTEwuZXhlIjsgfSAmJgorCSAgICAgIHsgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIiJGFzX3JlcXVpcmVkIiB8IGFzX3J1bj1hICIkU0hFTEwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgQ09ORklHX1NIRUxMPSRTSEVMTCBhc19oYXZlX3JlcXVpcmVkPXllcworZmk7IH0KK0lGUz0kYXNfc2F2ZV9JRlMKKworCisgICAgICBpZiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgIT0geDsgdGhlbiA6CisgICMgV2UgY2Fubm90IHlldCBhc3N1bWUgYSBkZWNlbnQgc2hlbGwsIHNvIHdlIGhhdmUgdG8gcHJvdmlkZSBhCisJIyBuZXV0cmFsaXphdGlvbiB2YWx1ZSBmb3Igc2hlbGxzIHdpdGhvdXQgdW5zZXQ7IGFuZCB0aGlzIGFsc28KKwkjIHdvcmtzIGFyb3VuZCBzaGVsbHMgdGhhdCBjYW5ub3QgdW5zZXQgbm9uZXhpc3RlbnQgdmFyaWFibGVzLgorCUJBU0hfRU5WPS9kZXYvbnVsbAorCUVOVj0vZGV2L251bGwKKwkodW5zZXQgQkFTSF9FTlYpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBCQVNIX0VOViBFTlYKKwlleHBvcnQgQ09ORklHX1NIRUxMCisJZXhlYyAiJENPTkZJR19TSEVMTCIgIiRhc19teXNlbGYiICR7MSsiJEAifQorZmkKKworICAgIGlmIHRlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geG5vOyB0aGVuIDoKKyAgJGFzX2VjaG8gIiQwOiBUaGlzIHNjcmlwdCByZXF1aXJlcyBhIHNoZWxsIG1vcmUgbW9kZXJuIHRoYW4gYWxsIgorICAkYXNfZWNobyAiJDA6IHRoZSBzaGVsbHMgdGhhdCBJIGZvdW5kIG9uIHlvdXIgc3lzdGVtLiIKKyAgaWYgdGVzdCB4JHtaU0hfVkVSU0lPTitzZXR9ID0geHNldCA7IHRoZW4KKyAgICAkYXNfZWNobyAiJDA6IEluIHBhcnRpY3VsYXIsIHpzaCAkWlNIX1ZFUlNJT04gaGFzIGJ1Z3MgYW5kIHNob3VsZCIKKyAgICAkYXNfZWNobyAiJDA6IGJlIHVwZ3JhZGVkIHRvIHpzaCA0LjMuNCBvciBsYXRlci4iCisgIGVsc2UKKyAgICAkYXNfZWNobyAiJDA6IFBsZWFzZSB0ZWxsIGJ1Zy1hdXRvY29uZkBnbnUub3JnIGFuZAorJDA6IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PUdTdHJlYW1lcgorJDA6IGFib3V0IHlvdXIgc3lzdGVtLCBpbmNsdWRpbmcgYW55IGVycm9yIHBvc3NpYmx5IG91dHB1dAorJDA6IGJlZm9yZSB0aGlzIG1lc3NhZ2UuIFRoZW4gaW5zdGFsbCBhIG1vZGVybiBzaGVsbCwgb3IKKyQwOiBtYW51YWxseSBydW4gdGhlIHNjcmlwdCB1bmRlciBzdWNoIGEgc2hlbGwgaWYgeW91IGRvCiskMDogaGF2ZSBvbmUuIgorICBmaQorICBleGl0IDEKK2ZpCitmaQorZmkKK1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CitleHBvcnQgU0hFTEwKKyMgVW5zZXQgbW9yZSB2YXJpYWJsZXMga25vd24gdG8gaW50ZXJmZXJlIHdpdGggYmVoYXZpb3Igb2YgY29tbW9uIHRvb2xzLgorQ0xJQ09MT1JfRk9SQ0U9IEdSRVBfT1BUSU9OUz0KK3Vuc2V0IENMSUNPTE9SX0ZPUkNFIEdSRVBfT1BUSU9OUworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggU2hlbGwgRnVuY3Rpb25zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIGFzX2ZuX3Vuc2V0IFZBUgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgUG9ydGFibHkgdW5zZXQgVkFSLgorYXNfZm5fdW5zZXQgKCkKK3sKKyAgeyBldmFsICQxPTsgdW5zZXQgJDE7fQorfQorYXNfdW5zZXQ9YXNfZm5fdW5zZXQKKworIyBhc19mbl9zZXRfc3RhdHVzIFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgJD8gdG8gU1RBVFVTLCB3aXRob3V0IGZvcmtpbmcuCithc19mbl9zZXRfc3RhdHVzICgpCit7CisgIHJldHVybiAkMQorfSAjIGFzX2ZuX3NldF9zdGF0dXMKKworIyBhc19mbl9leGl0IFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBFeGl0IHRoZSBzaGVsbCB3aXRoIFNUQVRVUywgZXZlbiBpbiBhICJ0cmFwIDAiIG9yICJzZXQgLWUiIGNvbnRleHQuCithc19mbl9leGl0ICgpCit7CisgIHNldCArZQorICBhc19mbl9zZXRfc3RhdHVzICQxCisgIGV4aXQgJDEKK30gIyBhc19mbl9leGl0CisKKyMgYXNfZm5fbWtkaXJfcAorIyAtLS0tLS0tLS0tLS0tCisjIENyZWF0ZSAiJGFzX2RpciIgYXMgYSBkaXJlY3RvcnksIGluY2x1ZGluZyBwYXJlbnRzIGlmIG5lY2Vzc2FyeS4KK2FzX2ZuX21rZGlyX3AgKCkKK3sKKworICBjYXNlICRhc19kaXIgaW4gIygKKyAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OworICBlc2FjCisgIHRlc3QgLWQgIiRhc19kaXIiIHx8IGV2YWwgJGFzX21rZGlyX3AgfHwgeworICAgIGFzX2RpcnM9CisgICAgd2hpbGUgOjsgZG8KKyAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAorICAgICAgKlwnKikgYXNfcWRpcj1gJGFzX2VjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIycoCisgICAgICAqKSBhc19xZGlyPSRhc19kaXI7OworICAgICAgZXNhYworICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19kaXIiIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCisgICAgZG9uZQorICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKKyAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIKKworCit9ICMgYXNfZm5fbWtkaXJfcAorIyBhc19mbl9hcHBlbmQgVkFSIFZBTFVFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXBwZW5kIHRoZSB0ZXh0IGluIFZBTFVFIHRvIHRoZSBlbmQgb2YgdGhlIGRlZmluaXRpb24gY29udGFpbmVkIGluIFZBUi4gVGFrZQorIyBhZHZhbnRhZ2Ugb2YgYW55IHNoZWxsIG9wdGltaXphdGlvbnMgdGhhdCBhbGxvdyBhbW9ydGl6ZWQgbGluZWFyIGdyb3d0aCBvdmVyCisjIHJlcGVhdGVkIGFwcGVuZHMsIGluc3RlYWQgb2YgdGhlIHR5cGljYWwgcXVhZHJhdGljIGdyb3d0aCBwcmVzZW50IGluIG5haXZlCisjIGltcGxlbWVudGF0aW9ucy4KK2lmIChldmFsICJhc192YXI9MTsgYXNfdmFyKz0yOyB0ZXN0IHhcJGFzX3ZhciA9IHgxMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxKz1cJDIKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxPVwkJDFcJDIKKyAgfQorZmkgIyBhc19mbl9hcHBlbmQKKworIyBhc19mbl9hcml0aCBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gYXJpdGhtZXRpYyBldmFsdWF0aW9uIG9uIHRoZSBBUkdzLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUKKyMgZ2xvYmFsICRhc192YWwuIFRha2UgYWR2YW50YWdlIG9mIHNoZWxscyB0aGF0IGNhbiBhdm9pZCBmb3Jrcy4gVGhlIGFyZ3VtZW50cworIyBtdXN0IGJlIHBvcnRhYmxlIGFjcm9zcyAkKCgpKSBhbmQgZXhwci4KK2lmIChldmFsICJ0ZXN0IFwkKCggMSArIDEgKSkgPSAyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPSQoKCAkKiApKQorICB9JworZWxzZQorICBhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPWBleHByICIkQCIgfHwgdGVzdCAkPyAtZXEgMWAKKyAgfQorZmkgIyBhc19mbl9hcml0aAorCisKKyMgYXNfZm5fZXJyb3IgU1RBVFVTIEVSUk9SIFtMSU5FTk8gTE9HX0ZEXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCAiYGJhc2VuYW1lICQwYDogZXJyb3I6IEVSUk9SIiB0byBzdGRlcnIuIElmIExJTkVOTyBhbmQgTE9HX0ZEIGFyZQorIyBwcm92aWRlZCwgYWxzbyBvdXRwdXQgdGhlIGVycm9yIHRvIExPR19GRCwgcmVmZXJlbmNpbmcgTElORU5PLiBUaGVuIGV4aXQgdGhlCisjIHNjcmlwdCB3aXRoIFNUQVRVUywgdXNpbmcgMSBpZiB0aGF0IHdhcyAwLgorYXNfZm5fZXJyb3IgKCkKK3sKKyAgYXNfc3RhdHVzPSQxOyB0ZXN0ICRhc19zdGF0dXMgLWVxIDAgJiYgYXNfc3RhdHVzPTEKKyAgaWYgdGVzdCAiJDQiOyB0aGVuCisgICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMyJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiAkMiIgPiYkNAorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJDIiID4mMgorICBhc19mbl9leGl0ICRhc19zdGF0dXMKK30gIyBhc19mbl9lcnJvcgorCitpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KKyAgYXNfZXhwcj1leHByCitlbHNlCisgIGFzX2V4cHI9ZmFsc2UKK2ZpCisKK2lmIChiYXNlbmFtZSAtLSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAtLSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KKyAgYXNfYmFzZW5hbWU9YmFzZW5hbWUKK2Vsc2UKKyAgYXNfYmFzZW5hbWU9ZmFsc2UKK2ZpCisKK2lmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc19kaXJuYW1lPWRpcm5hbWUKK2Vsc2UKKyAgYXNfZGlybmFtZT1mYWxzZQorZmkKKworYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8CiskYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8qJCcgXHwgXAorCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgvIiQwIiB8CisgICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcL1woXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcL1woXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorCisjIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCithc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKK2FzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJworYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCithc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCithc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKKworCisgIGFzX2xpbmVub18xPSRMSU5FTk8gYXNfbGluZW5vXzFhPSRMSU5FTk8KKyAgYXNfbGluZW5vXzI9JExJTkVOTyBhc19saW5lbm9fMmE9JExJTkVOTworICBldmFsICd0ZXN0ICJ4JGFzX2xpbmVub18xJyRhc19ydW4nIiAhPSAieCRhc19saW5lbm9fMickYXNfcnVuJyIgJiYKKyAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSckYXNfcnVuJyArIDFgIiA9ICJ4JGFzX2xpbmVub18yJyRhc19ydW4nIicgfHwgeworICAjIEJsYW1lIExlZSBFLiBNY01haG9uICgxOTMxLTE5ODkpIGZvciBzZWQncyBzeW50YXguICA6LSkKKyAgc2VkIC1uICcKKyAgICBwCisgICAgL1skXUxJTkVOTy89CisgICcgPCRhc19teXNlbGYgfAorICAgIHNlZCAnCisgICAgICBzL1skXUxJTkVOTy4qLyYtLworICAgICAgdCBsaW5lbm8KKyAgICAgIGIKKyAgICAgIDpsaW5lbm8KKyAgICAgIE4KKyAgICAgIDpsb29wCisgICAgICBzL1skXUxJTkVOT1woW14nJGFzX2NyX2FsbnVtJ19dLipcblwpXCguKlwpL1wyXDFcMi8KKyAgICAgIHQgbG9vcAorICAgICAgcy8tXG4uKi8vCisgICAgJyA+JGFzX21lLmxpbmVubyAmJgorICBjaG1vZCAreCAiJGFzX21lLmxpbmVubyIgfHwKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyOyBhc19mbl9leGl0IDE7IH0KKworICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcworICAjICh0aGUgZGlybmFtZSBvZiAkWzBdIGlzIG5vdCB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgZmluZCB0aGUKKyAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpdGl2ZSB0byB0aGlzKS4KKyAgLiAiLi8kYXNfbWUubGluZW5vIgorICAjIEV4aXQgc3RhdHVzIGlzIHRoYXQgb2YgdGhlIGxhc3QgY29tbWFuZC4KKyAgZXhpdAorfQorCitFQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQorY2FzZSBgZWNobyAtbiB4YCBpbiAjKCgoKCgKKy1uKikKKyAgY2FzZSBgZWNobyAneHlcYydgIGluCisgICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFjdGVyLgorICB4eSkgIEVDSE9fQz0nXGMnOzsKKyAgKikgICBlY2hvIGBlY2hvIGtzaDg4IGJ1ZyBvbiBBSVggNi4xYCA+IC9kZXYvbnVsbAorICAgICAgIEVDSE9fVD0nCSc7OworICBlc2FjOzsKKyopCisgIEVDSE9fTj0nLW4nOzsKK2VzYWMKKworcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKK2lmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgorICBybSAtZiBjb25mJCQuZGlyL2NvbmYkJC5maWxlCitlbHNlCisgIHJtIC1mIGNvbmYkJC5kaXIKKyAgbWtkaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorZmkKK2lmIChlY2hvID5jb25mJCQuZmlsZSkgMj4vZGV2L251bGw7IHRoZW4KKyAgaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICAgYXNfbG5fcz0nbG4gLXMnCisgICAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKKyAgICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgorICAgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgorICAgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcCcuCisgICAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9kZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fAorICAgICAgYXNfbG5fcz0nY3AgLXAnCisgIGVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICAgYXNfbG5fcz1sbgorICBlbHNlCisgICAgYXNfbG5fcz0nY3AgLXAnCisgIGZpCitlbHNlCisgIGFzX2xuX3M9J2NwIC1wJworZmkKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKK3JtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKworaWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19ta2Rpcl9wPSdta2RpciAtcCAiJGFzX2RpciInCitlbHNlCisgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCisgIGFzX21rZGlyX3A9ZmFsc2UKK2ZpCisKK2lmIHRlc3QgLXggLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfdGVzdF94PSd0ZXN0IC14JworZWxzZQorICBpZiBscyAtZEwgLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBhc19sc19MX29wdGlvbj1MCisgIGVsc2UKKyAgICBhc19sc19MX29wdGlvbj0KKyAgZmkKKyAgYXNfdGVzdF94PScKKyAgICBldmFsIHNoIC1jICdcJycKKyAgICAgIGlmIHRlc3QgLWQgIiQxIjsgdGhlbgorCXRlc3QgLWQgIiQxLy4iOworICAgICAgZWxzZQorCWNhc2UgJDEgaW4gIygKKwktKilzZXQgIi4vJDEiOzsKKwllc2FjOworCWNhc2UgYGxzIC1sZCckYXNfbHNfTF9vcHRpb24nICIkMSIgMj4vZGV2L251bGxgIGluICMoKAorCT8/P1tzeF0qKTo7OyopZmFsc2U7O2VzYWM7ZmkKKyAgICAnXCcnIHNoCisgICcKK2ZpCithc19leGVjdXRhYmxlX3A9JGFzX3Rlc3RfeAorCisjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCithc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorCisjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KK2FzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisKKworCisjIENoZWNrIHRoYXQgd2UgYXJlIHJ1bm5pbmcgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwuCitTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorCitjYXNlIFgkbHRfRUNITyBpbgorWCotLWZhbGxiYWNrLWVjaG8pCisgICMgUmVtb3ZlIG9uZSBsZXZlbCBvZiBxdW90YXRpb24gKHdoaWNoIHdhcyByZXF1aXJlZCBmb3IgTWFrZSkuCisgIEVDSE89YGVjaG8gIiRsdF9FQ0hPIiB8IHNlZCAncyxcXFxcXCRcXCQwLCckMCcsJ2AKKyAgOzsKK2VzYWMKKworRUNITz0ke2x0X0VDSE8tZWNob30KK2lmIHRlc3QgIlgkMSIgPSBYLS1uby1yZWV4ZWM7IHRoZW4KKyAgIyBEaXNjYXJkIHRoZSAtLW5vLXJlZXhlYyBmbGFnLCBhbmQgY29udGludWUuCisgIHNoaWZ0CitlbGlmIHRlc3QgIlgkMSIgPSBYLS1mYWxsYmFjay1lY2hvOyB0aGVuCisgICMgQXZvaWQgaW5saW5lIGRvY3VtZW50IGhlcmUsIGl0IG1heSBiZSBsZWZ0IG92ZXIKKyAgOgorZWxpZiB0ZXN0ICJYYHsgJEVDSE8gJ1x0JzsgfSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgOyB0aGVuCisgICMgWWlwcGVlLCAkRUNITyB3b3JrcyEKKyAgOgorZWxzZQorICAjIFJlc3RhcnQgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwuCisgIGV4ZWMgJFNIRUxMICIkMCIgLS1uby1yZWV4ZWMgJHsxKyIkQCJ9CitmaQorCitpZiB0ZXN0ICJYJDEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgorICAjIHVzZWQgYXMgZmFsbGJhY2sgZWNobworICBzaGlmdAorICBjYXQgPDxfTFRfRU9GCiskKgorX0xUX0VPRgorICBleGl0IDAKK2ZpCisKKyMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0CisjIGlmIENEUEFUSCBpcyBzZXQuCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKK2lmIHRlc3QgLXogIiRsdF9FQ0hPIjsgdGhlbgorICBpZiB0ZXN0ICJYJHtlY2hvX3Rlc3Rfc3RyaW5nK3NldH0iICE9IFhzZXQ7IHRoZW4KKyAgICAjIGZpbmQgYSBzdHJpbmcgYXMgbGFyZ2UgYXMgcG9zc2libGUsIGFzIGxvbmcgYXMgdGhlIHNoZWxsIGNhbiBjb3BlIHdpdGggaXQKKyAgICBmb3IgY21kIGluICdzZWQgNTBxICIkMCInICdzZWQgMjBxICIkMCInICdzZWQgMTBxICIkMCInICdzZWQgMnEgIiQwIicgJ2VjaG8gdGVzdCc7IGRvCisgICAgICAjIGV4cGVjdGVkIHNpemVzOiBsZXNzIHRoYW4gMktiLCAxS2IsIDUxMiBieXRlcywgMTYgYnl0ZXMsIC4uLgorICAgICAgaWYgeyBlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRjbWRgOyB9IDI+L2Rldi9udWxsICYmCisJIHsgdGVzdCAiWCRlY2hvX3Rlc3Rfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB9IDI+L2Rldi9udWxsCisgICAgICB0aGVuCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGRvbmUKKyAgZmkKKworICBpZiB0ZXN0ICJYYHsgJEVDSE8gJ1x0JzsgfSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKKyAgICAgZWNob190ZXN0aW5nX3N0cmluZz1geyAkRUNITyAiJGVjaG9fdGVzdF9zdHJpbmciOyB9IDI+L2Rldi9udWxsYCAmJgorICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKyAgICA6CisgIGVsc2UKKyAgICAjIFRoZSBTb2xhcmlzLCBBSVgsIGFuZCBEaWdpdGFsIFVuaXggZGVmYXVsdCBlY2hvIHByb2dyYW1zIHVucXVvdGUKKyAgICAjIGJhY2tzbGFzaGVzLiAgVGhpcyBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIHF1b3RlIGJhY2tzbGFzaGVzIHVzaW5nCisgICAgIyAgIGVjaG8gIiRzb21ldGhpbmciIHwgc2VkICdzL1xcL1xcXFwvZycKKyAgICAjCisgICAgIyBTbywgZmlyc3Qgd2UgbG9vayBmb3IgYSB3b3JraW5nIGVjaG8gaW4gdGhlIHVzZXIncyBQQVRILgorCisgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgICAgZm9yIGRpciBpbiAkUEFUSCAvdXNyL3VjYjsgZG8KKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgaWYgKHRlc3QgLWYgJGRpci9lY2hvIHx8IHRlc3QgLWYgJGRpci9lY2hvJGFjX2V4ZWV4dCkgJiYKKyAgICAgICAgIHRlc3QgIlhgKCRkaXIvZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKKyAgICAgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkZGlyL2VjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCisgICAgICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKyAgICAgICAgRUNITz0iJGRpci9lY2hvIgorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBkb25lCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisKKyAgICBpZiB0ZXN0ICJYJEVDSE8iID0gWGVjaG87IHRoZW4KKyAgICAgICMgV2UgZGlkbid0IGZpbmQgYSBiZXR0ZXIgZWNobywgc28gbG9vayBmb3IgYWx0ZXJuYXRpdmVzLgorICAgICAgaWYgdGVzdCAiWGB7IHByaW50IC1yICdcdCc7IH0gMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCisgICAgICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWB7IHByaW50IC1yICIkZWNob190ZXN0X3N0cmluZyI7IH0gMj4vZGV2L251bGxgICYmCisgICAgICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKyAgICAgICAgIyBUaGlzIHNoZWxsIGhhcyBhIGJ1aWx0aW4gcHJpbnQgLXIgdGhhdCBkb2VzIHRoZSB0cmljay4KKyAgICAgICAgRUNITz0ncHJpbnQgLXInCisgICAgICBlbGlmIHsgdGVzdCAtZiAvYmluL2tzaCB8fCB0ZXN0IC1mIC9iaW4va3NoJGFjX2V4ZWV4dDsgfSAmJgorCSAgIHRlc3QgIlgkQ09ORklHX1NIRUxMIiAhPSBYL2Jpbi9rc2g7IHRoZW4KKyAgICAgICAgIyBJZiB3ZSBoYXZlIGtzaCwgdHJ5IHJ1bm5pbmcgY29uZmlndXJlIGFnYWluIHdpdGggaXQuCisgICAgICAgIE9SSUdJTkFMX0NPTkZJR19TSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorICAgICAgICBleHBvcnQgT1JJR0lOQUxfQ09ORklHX1NIRUxMCisgICAgICAgIENPTkZJR19TSEVMTD0vYmluL2tzaAorICAgICAgICBleHBvcnQgQ09ORklHX1NIRUxMCisgICAgICAgIGV4ZWMgJENPTkZJR19TSEVMTCAiJDAiIC0tbm8tcmVleGVjICR7MSsiJEAifQorICAgICAgZWxzZQorICAgICAgICAjIFRyeSB1c2luZyBwcmludGYuCisgICAgICAgIEVDSE89J3ByaW50ZiAlc1xuJworICAgICAgICBpZiB0ZXN0ICJYYHsgJEVDSE8gJ1x0JzsgfSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKKwkgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWB7ICRFQ0hPICIkZWNob190ZXN0X3N0cmluZyI7IH0gMj4vZGV2L251bGxgICYmCisJICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisJICAjIENvb2wsIHByaW50ZiB3b3JrcworCSAgOgorICAgICAgICBlbGlmIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkT1JJR0lOQUxfQ09ORklHX1NIRUxMICIkMCIgLS1mYWxsYmFjay1lY2hvICdcdCcpIDI+L2Rldi9udWxsYCAmJgorCSAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICdYXHQnICYmCisJICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJE9SSUdJTkFMX0NPTkZJR19TSEVMTCAiJDAiIC0tZmFsbGJhY2stZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKKwkgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorCSAgQ09ORklHX1NIRUxMPSRPUklHSU5BTF9DT05GSUdfU0hFTEwKKwkgIGV4cG9ydCBDT05GSUdfU0hFTEwKKwkgIFNIRUxMPSIkQ09ORklHX1NIRUxMIgorCSAgZXhwb3J0IFNIRUxMCisJICBFQ0hPPSIkQ09ORklHX1NIRUxMICQwIC0tZmFsbGJhY2stZWNobyIKKyAgICAgICAgZWxpZiBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJENPTkZJR19TSEVMTCAiJDAiIC0tZmFsbGJhY2stZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAgJiYKKwkgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAnWFx0JyAmJgorCSAgICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRDT05GSUdfU0hFTEwgIiQwIiAtLWZhbGxiYWNrLWVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCisJICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKwkgIEVDSE89IiRDT05GSUdfU0hFTEwgJDAgLS1mYWxsYmFjay1lY2hvIgorICAgICAgICBlbHNlCisJICAjIG1heWJlIHdpdGggYSBzbWFsbGVyIHN0cmluZy4uLgorCSAgcHJldj06CisKKwkgIGZvciBjbWQgaW4gJ2VjaG8gdGVzdCcgJ3NlZCAycSAiJDAiJyAnc2VkIDEwcSAiJDAiJyAnc2VkIDIwcSAiJDAiJyAnc2VkIDUwcSAiJDAiJzsgZG8KKwkgICAgaWYgeyB0ZXN0ICJYJGVjaG9fdGVzdF9zdHJpbmciID0gIlhgZXZhbCAkY21kYCI7IH0gMj4vZGV2L251bGwKKwkgICAgdGhlbgorCSAgICAgIGJyZWFrCisJICAgIGZpCisJICAgIHByZXY9IiRjbWQiCisJICBkb25lCisKKwkgIGlmIHRlc3QgIiRwcmV2IiAhPSAnc2VkIDUwcSAiJDAiJzsgdGhlbgorCSAgICBlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRwcmV2YAorCSAgICBleHBvcnQgZWNob190ZXN0X3N0cmluZworCSAgICBleGVjICR7T1JJR0lOQUxfQ09ORklHX1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fSAiJDAiICR7MSsiJEAifQorCSAgZWxzZQorCSAgICAjIE9vcHMuICBXZSBsb3N0IGNvbXBsZXRlbHksIHNvIGp1c3Qgc3RpY2sgd2l0aCBlY2hvLgorCSAgICBFQ0hPPWVjaG8KKwkgIGZpCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGZpCisgIGZpCitmaQorCisjIENvcHkgZWNobyBhbmQgcXVvdGUgdGhlIGNvcHkgc3VpdGFibHkgZm9yIHBhc3NpbmcgdG8gbGlidG9vbCBmcm9tCisjIHRoZSBNYWtlZmlsZSwgaW5zdGVhZCBvZiBxdW90aW5nIHRoZSBvcmlnaW5hbCwgd2hpY2ggaXMgdXNlZCBsYXRlci4KK2x0X0VDSE89JEVDSE8KK2lmIHRlc3QgIlgkbHRfRUNITyIgPSAiWCRDT05GSUdfU0hFTEwgJDAgLS1mYWxsYmFjay1lY2hvIjsgdGhlbgorICAgbHRfRUNITz0iJENPTkZJR19TSEVMTCBcXFwkXCQwIC0tZmFsbGJhY2stZWNobyIKK2ZpCisKKworCisKK3Rlc3QgLW4gIiRESkRJUiIgfHwgZXhlYyA3PCYwIDwvZGV2L251bGwKK2V4ZWMgNj4mMQorCisjIE5hbWUgb2YgdGhlIGhvc3QuCisjIGhvc3RuYW1lIG9uIHNvbWUgc3lzdGVtcyAoU1ZSMy4yLCBvbGQgR05VL0xpbnV4KSByZXR1cm5zIGEgYm9ndXMgZXhpdCBzdGF0dXMsCisjIHNvIHVuYW1lIGdldHMgcnVuIHRvby4KK2FjX2hvc3RuYW1lPWAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAorCisjCisjIEluaXRpYWxpemF0aW9ucy4KKyMKK2FjX2RlZmF1bHRfcHJlZml4PS91c3IvbG9jYWwKK2FjX2NsZWFuX2ZpbGVzPQorYWNfY29uZmlnX2xpYm9ial9kaXI9LgorTElCT0JKUz0KK2Nyb3NzX2NvbXBpbGluZz1ubworc3ViZGlycz0KK01GTEFHUz0KK01BS0VGTEFHUz0KKworIyBJZGVudGl0eSBvZiB0aGlzIHBhY2thZ2UuCitQQUNLQUdFX05BTUU9J0dTdHJlYW1lcicKK1BBQ0tBR0VfVEFSTkFNRT0nZ3N0cmVhbWVyJworUEFDS0FHRV9WRVJTSU9OPScwLjExLjEnCitQQUNLQUdFX1NUUklORz0nR1N0cmVhbWVyIDAuMTEuMScKK1BBQ0tBR0VfQlVHUkVQT1JUPSdodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1HU3RyZWFtZXInCitQQUNLQUdFX1VSTD0nJworCithY191bmlxdWVfZmlsZT0iZ3N0L2dzdC5jIgorIyBGYWN0b3JpbmcgZGVmYXVsdCBoZWFkZXJzIGZvciBtb3N0IHRlc3RzLgorYWNfaW5jbHVkZXNfZGVmYXVsdD0iXAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAorIyBpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWZkZWYgU1REQ19IRUFERVJTCisjIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyBpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbHNlCisjIGlmZGVmIEhBVkVfU1RETElCX0gKKyMgIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJJTkdfSAorIyBpZiAhZGVmaW5lZCBTVERDX0hFQURFUlMgJiYgZGVmaW5lZCBIQVZFX01FTU9SWV9ICisjICBpbmNsdWRlIDxtZW1vcnkuaD4KKyMgZW5kaWYKKyMgaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NUUklOR1NfSAorIyBpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0lOVFRZUEVTX0gKKyMgaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RESU5UX0gKKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmIgorCitndF9uZWVkcz0KK2FjX2hlYWRlcl9saXN0PQorYWNfc3Vic3RfdmFycz0nYW1fX0VYRUVYVF9GQUxTRQorYW1fX0VYRUVYVF9UUlVFCitMVExJQk9CSlMKK0xJQk9CSlMKK1NVQlVOSVRfRkFMU0UKK1NVQlVOSVRfVFJVRQorRU5BQkxFX1NVQlVOSVQKK0NIRUNLX1ZFUlNJT04KK0NIRUNLX01JQ1JPX1ZFUlNJT04KK0NIRUNLX01JTk9SX1ZFUlNJT04KK0NIRUNLX01BSk9SX1ZFUlNJT04KK0dTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQKK0dTVF9QTFVHSU5fTERGTEFHUworR1NUX09CSl9MSUJTCitHU1RfT0JKX0NYWEZMQUdTCitHU1RfT0JKX0NGTEFHUworR1NUX0xJQl9MREZMQUdTCitHU1RfQUxMX0xERkxBR1MKK0dTVF9BTExfTElCUworR1NUX0FMTF9DWFhGTEFHUworR1NUX0FMTF9DRkxBR1MKK0dTVF9PUFRJT05fQ1hYRkxBR1MKK0dTVF9PUFRJT05fQ0ZMQUdTCitERVBSRUNBVEVEX0NGTEFHUworUFJPRklMRV9DRkxBR1MKK0dTVF9MRVZFTF9ERUZBVUxUCitFUlJPUl9DRkxBR1MKK1dBUk5JTkdfQ0ZMQUdTCitHU1RfUEtHX0RFUFMKK3BsdWdpbmRpcgorUExVR0lORElSCitEQVRBRElSCitMSUJESVIKK0dTVF9MSUNFTlNFCitIQVZFX0NIRUNLX0ZBTFNFCitIQVZFX0NIRUNLX1RSVUUKK0dMSUJfUFJFRklYCitHTElCX09OTFlfTElCUworR0xJQl9PTkxZX0NGTEFHUworR0xJQl9MSUJTCitHTElCX0NGTEFHUworR0xJQl9SRVEKK0lORVRfQVRPTl9MSUJTCitHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkUKK0dTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORQorR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FCitHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfRkFMU0UKK0dTVF9IQVZFX01PTk9UT05JQ19DTE9DS19UUlVFCitHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FCitHU1RfSEFWRV9QT1NJWF9USU1FUlNfRkFMU0UKK0dTVF9IQVZFX1BPU0lYX1RJTUVSU19UUlVFCitHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FCitIQVZFX01NQVBfRkFMU0UKK0hBVkVfTU1BUF9UUlVFCitIQVZFX0dTTAorR1NMX0xJQlMKK0hBVkVfR01QCitHTVBfTElCUworV0lOMzJfTElCUworSEFWRV9XSU5TT0NLMl9IX0ZBTFNFCitIQVZFX1dJTlNPQ0syX0hfVFJVRQorSEFWRV9QVEhSRUFEX0hfRkFMU0UKK0hBVkVfUFRIUkVBRF9IX1RSVUUKK0hBVkVfU1lTX1RJTUVTX0hfQU5EX1VOSVNURF9IX0ZBTFNFCitIQVZFX1NZU19USU1FU19IX0FORF9VTklTVERfSF9UUlVFCitIQVZFX1NZU19TT0NLRVRfSF9GQUxTRQorSEFWRV9TWVNfU09DS0VUX0hfVFJVRQorTElCTQorRU5BQkxFX1BMVUdJTl9ET0NTX0ZBTFNFCitFTkFCTEVfUExVR0lOX0RPQ1NfVFJVRQorcGtncHlleGVjZGlyCitweWV4ZWNkaXIKK3BrZ3B5dGhvbmRpcgorcHl0aG9uZGlyCitQWVRIT05fUExBVEZPUk0KK1BZVEhPTl9FWEVDX1BSRUZJWAorUFlUSE9OX1BSRUZJWAorUFlUSE9OX1ZFUlNJT04KK1BZVEhPTgorR1RLX0RPQ19VU0VfTElCVE9PTF9GQUxTRQorR1RLX0RPQ19VU0VfTElCVE9PTF9UUlVFCitFTkFCTEVfR1RLX0RPQ19GQUxTRQorRU5BQkxFX0dUS19ET0NfVFJVRQorR1RLRE9DX0NIRUNLCitIVE1MX0RJUgorRE9DX1BTX0ZBTFNFCitET0NfUFNfVFJVRQorRE9DX1BERl9GQUxTRQorRE9DX1BERl9UUlVFCitET0NfSFRNTF9GQUxTRQorRE9DX0hUTUxfVFJVRQorRU5BQkxFX0RPQ0JPT0tfRkFMU0UKK0VOQUJMRV9ET0NCT09LX1RSVUUKK0hBVkVfRVBTVE9QREYKK0hBVkVfUE5NVE9QUworSEFWRV9QTkdUT1BOTQorSEFWRV9GSUcyREVWCitIQVZFX1hNTExJTlQKK0hBVkVfRFZJUFMKK0NBVF9FTlRSWV9FTkQKK0NBVF9FTlRSWV9TVEFSVAorRE9DQk9PS19ST09UCitYU0xUUFJPQ19GTEFHUworWE1MX0NBVEFMT0cKK1hTTFRQUk9DCitIQVZFX1BTMlBERgorSEFWRV9KQURFVEVYCitIQVZFX0RPQ0JPT0sySFRNTAorSEFWRV9ET0NCT09LMlBTCitIQVZFX0lOVFJPU1BFQ1RJT05fRkFMU0UKK0hBVkVfSU5UUk9TUEVDVElPTl9UUlVFCitJTlRST1NQRUNUSU9OX01BS0VGSUxFCitJTlRST1NQRUNUSU9OX0xJQlMKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTCitJTlRST1NQRUNUSU9OX1RZUEVMSUJESVIKK0lOVFJPU1BFQ1RJT05fR0lSRElSCitJTlRST1NQRUNUSU9OX0dFTkVSQVRFCitJTlRST1NQRUNUSU9OX0NPTVBJTEVSCitJTlRST1NQRUNUSU9OX1NDQU5ORVIKK0hBVkVfVkFMR1JJTkRfRkFMU0UKK0hBVkVfVkFMR1JJTkRfVFJVRQorVkFMR1JJTkRfUEFUSAorRkxFWF9QQVRICitCSVNPTl9QQVRICitQRVJMX1BBVEgKK0hBVkVfQ1hYX0ZBTFNFCitIQVZFX0NYWF9UUlVFCitDWFhDUFAKK2FtX19mYXN0ZGVwQ1hYX0ZBTFNFCithbV9fZmFzdGRlcENYWF9UUlVFCitDWFhERVBNT0RFCithY19jdF9DWFgKK0NYWAorYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFCithbV9fZmFzdGRlcENDQVNfVFJVRQorQ0NBU0RFUE1PREUKK0NDQVMKK0dTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FCitIT1NUX0NQVQorSEFWRV9DUFVfQ1JJU1YzMl9GQUxTRQorSEFWRV9DUFVfQ1JJU1YzMl9UUlVFCitIQVZFX0NQVV9DUklTX0ZBTFNFCitIQVZFX0NQVV9DUklTX1RSVUUKK0hBVkVfQ1BVX1g4Nl82NF9GQUxTRQorSEFWRV9DUFVfWDg2XzY0X1RSVUUKK0hBVkVfQ1BVX002OEtfRkFMU0UKK0hBVkVfQ1BVX002OEtfVFJVRQorSEFWRV9DUFVfSUE2NF9GQUxTRQorSEFWRV9DUFVfSUE2NF9UUlVFCitIQVZFX0NQVV9TMzkwX0ZBTFNFCitIQVZFX0NQVV9TMzkwX1RSVUUKK0hBVkVfQ1BVX01JUFNfRkFMU0UKK0hBVkVfQ1BVX01JUFNfVFJVRQorSEFWRV9DUFVfSFBQQV9GQUxTRQorSEFWRV9DUFVfSFBQQV9UUlVFCitIQVZFX0NQVV9TUEFSQ19GQUxTRQorSEFWRV9DUFVfU1BBUkNfVFJVRQorSEFWRV9DUFVfQVJNX0ZBTFNFCitIQVZFX0NQVV9BUk1fVFJVRQorSEFWRV9DUFVfQUxQSEFfRkFMU0UKK0hBVkVfQ1BVX0FMUEhBX1RSVUUKK0hBVkVfQ1BVX1BQQzY0X0ZBTFNFCitIQVZFX0NQVV9QUEM2NF9UUlVFCitIQVZFX0NQVV9QUENfRkFMU0UKK0hBVkVfQ1BVX1BQQ19UUlVFCitIQVZFX0NQVV9JMzg2X0ZBTFNFCitIQVZFX0NQVV9JMzg2X1RSVUUKK0JVSUxEX0ZBSUxJTkdfVEVTVFNfRkFMU0UKK0JVSUxEX0ZBSUxJTkdfVEVTVFNfVFJVRQorQlVJTERfVEVTVFNfRkFMU0UKK0JVSUxEX1RFU1RTX1RSVUUKK0dTVF9QS0dfQ09ORklHX1BBVEgKK0dTVF9QQUNLQUdFX09SSUdJTgorR1NUX1BBQ0tBR0VfTkFNRQorQlVJTERfRVhBTVBMRVNfRkFMU0UKK0JVSUxEX0VYQU1QTEVTX1RSVUUKK0dTVF9HQ09WX0VOQUJMRURfRkFMU0UKK0dTVF9HQ09WX0VOQUJMRURfVFJVRQorQ0NBU0ZMQUdTCitGRkxBR1MKK0NYWEZMQUdTCitHQ09WCitHQ09WX0xJQlMKK0dDT1ZfQ0ZMQUdTCitWQUxHUklORF9MSUJTCitWQUxHUklORF9DRkxBR1MKK1BLR19DT05GSUcKK0dTVF9ESVNBQkxFX1BMVUdJTl9GQUxTRQorR1NUX0RJU0FCTEVfUExVR0lOX1RSVUUKK0dTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUKK0dTVF9ESVNBQkxFX05FVF9GQUxTRQorR1NUX0RJU0FCTEVfTkVUX1RSVUUKK0dTVF9ESVNBQkxFX05FVF9ERUZJTkUKK0dTVF9SRUdJU1RSWV9ET0NfVFlQRVMKK0dTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFCitHU1RfRElTQUJMRV9SRUdJU1RSWV9UUlVFCitHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUKK0dTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0ZBTFNFCitHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9UUlVFCitHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9ERUZJTkUKK0dTVF9ESVNBQkxFX1RSQUNFX0ZBTFNFCitHU1RfRElTQUJMRV9UUkFDRV9UUlVFCitHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkUKK0dTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0ZBTFNFCitHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19UUlVFCitHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUKK0dTVF9ESVNBQkxFX1BBUlNFX0ZBTFNFCitHU1RfRElTQUJMRV9QQVJTRV9UUlVFCitHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUKK0dTVF9ESVNBQkxFX0dTVF9ERUJVR19GQUxTRQorR1NUX0RJU0FCTEVfR1NUX0RFQlVHX1RSVUUKK0dTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUKK0xPQ0FMRURJUgorR0VUVEVYVF9QQUNLQUdFCitQT1NVQgorTFRMSUJJTlRMCitMSUJJTlRMCitJTlRMTElCUworTFRMSUJJQ09OVgorTElCSUNPTlYKK0lOVExfTUFDT1NYX0xJQlMKK1hHRVRURVhUX0VYVFJBX09QVElPTlMKK01TR01FUkdFCitYR0VUVEVYVF8wMTUKK1hHRVRURVhUCitHTVNHRk1UXzAxNQorTVNHRk1UXzAxNQorR01TR0ZNVAorTVNHRk1UCitHRVRURVhUX01BQ1JPX1ZFUlNJT04KK1VTRV9OTFMKK0FDTE9DQUxfQU1GTEFHUworQ1BQCitPVE9PTDY0CitPVE9PTAorTElQTworTk1FRElUCitEU1lNVVRJTAorbHRfRUNITworUkFOTElCCitBUgorTE5fUworTk0KK2FjX2N0X0RVTVBCSU4KK0RVTVBCSU4KK0xECitGR1JFUAorRUdSRVAKK0dSRVAKK1NFRAorYW1fX2Zhc3RkZXBDQ19GQUxTRQorYW1fX2Zhc3RkZXBDQ19UUlVFCitDQ0RFUE1PREUKK0FNREVQQkFDS1NMQVNICitBTURFUF9GQUxTRQorQU1ERVBfVFJVRQorYW1fX3F1b3RlCithbV9faW5jbHVkZQorREVQRElSCitPQkpFWFQKK0VYRUVYVAorYWNfY3RfQ0MKK0NQUEZMQUdTCitMREZMQUdTCitDRkxBR1MKK0NDCitMSUJUT09MCitPQkpEVU1QCitETExUT09MCitBUworR1NUX0xUX0xERkxBR1MKK0dTVF9MSUJWRVJTSU9OCitHU1RfQUdFCitHU1RfUkVWSVNJT04KK0dTVF9DVVJSRU5UCitHU1RfTUFKT1JNSU5PUgorQU1fQkFDS1NMQVNICitBTV9ERUZBVUxUX1ZFUkJPU0lUWQoraG9zdF9vcworaG9zdF92ZW5kb3IKK2hvc3RfY3B1Citob3N0CitidWlsZF9vcworYnVpbGRfdmVuZG9yCitidWlsZF9jcHUKK2J1aWxkCitNQUlOVAorTUFJTlRBSU5FUl9NT0RFX0ZBTFNFCitNQUlOVEFJTkVSX01PREVfVFJVRQorUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UKK1BBQ0tBR0VfVkVSU0lPTl9OQU5PCitQQUNLQUdFX1ZFUlNJT05fTUlDUk8KK1BBQ0tBR0VfVkVSU0lPTl9NSU5PUgorUEFDS0FHRV9WRVJTSU9OX01BSk9SCithbV9fdW50YXIKK2FtX190YXIKK0FNVEFSCithbV9fbGVhZGluZ19kb3QKK1NFVF9NQUtFCitBV0sKK21rZGlyX3AKK01LRElSX1AKK0lOU1RBTExfU1RSSVBfUFJPR1JBTQorU1RSSVAKK2luc3RhbGxfc2gKK01BS0VJTkZPCitBVVRPSEVBREVSCitBVVRPTUFLRQorQVVUT0NPTkYKK0FDTE9DQUwKK1ZFUlNJT04KK1BBQ0tBR0UKK0NZR1BBVEhfVworYW1fX2lzcmMKK0lOU1RBTExfREFUQQorSU5TVEFMTF9TQ1JJUFQKK0lOU1RBTExfUFJPR1JBTQordGFyZ2V0X2FsaWFzCitob3N0X2FsaWFzCitidWlsZF9hbGlhcworTElCUworRUNIT19UCitFQ0hPX04KK0VDSE9fQworREVGUworbWFuZGlyCitsb2NhbGVkaXIKK2xpYmRpcgorcHNkaXIKK3BkZmRpcgorZHZpZGlyCitodG1sZGlyCitpbmZvZGlyCitkb2NkaXIKK29sZGluY2x1ZGVkaXIKK2luY2x1ZGVkaXIKK2xvY2Fsc3RhdGVkaXIKK3NoYXJlZHN0YXRlZGlyCitzeXNjb25mZGlyCitkYXRhZGlyCitkYXRhcm9vdGRpcgorbGliZXhlY2Rpcgorc2JpbmRpcgorYmluZGlyCitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lCitwcmVmaXgKK2V4ZWNfcHJlZml4CitQQUNLQUdFX1VSTAorUEFDS0FHRV9CVUdSRVBPUlQKK1BBQ0tBR0VfU1RSSU5HCitQQUNLQUdFX1ZFUlNJT04KK1BBQ0tBR0VfVEFSTkFNRQorUEFDS0FHRV9OQU1FCitQQVRIX1NFUEFSQVRPUgorU0hFTEwnCithY19zdWJzdF9maWxlcz0nJworYWNfdXNlcl9vcHRzPScKK2VuYWJsZV9vcHRpb25fY2hlY2tpbmcKK2VuYWJsZV9tYWludGFpbmVyX21vZGUKK2VuYWJsZV9zaWxlbnRfcnVsZXMKK2VuYWJsZV9zaGFyZWQKK2VuYWJsZV9zdGF0aWMKK3dpdGhfcGljCitlbmFibGVfZmFzdF9pbnN0YWxsCitlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZword2l0aF9nbnVfbGQKK2VuYWJsZV9saWJ0b29sX2xvY2sKK3dpdGhfYXV0b2NvbmYKK3dpdGhfYXV0b2hlYWRlcgord2l0aF9hdXRvbWFrZQord2l0aF9hY2xvY2FsCitlbmFibGVfbmxzCitlbmFibGVfcnBhdGgKK3dpdGhfbGliaWNvbnZfcHJlZml4Cit3aXRoX2xpYmludGxfcHJlZml4CitlbmFibGVfZ3N0X2RlYnVnCitlbmFibGVfcGFyc2UKK2VuYWJsZV9vcHRpb25fcGFyc2luZworZW5hYmxlX3RyYWNlCitlbmFibGVfYWxsb2NfdHJhY2UKK2VuYWJsZV9yZWdpc3RyeQorZW5hYmxlX25ldAorZW5hYmxlX3BsdWdpbgorZW5hYmxlX2RlYnVnCitlbmFibGVfcHJvZmlsaW5nCitlbmFibGVfdmFsZ3JpbmQKK2VuYWJsZV9nY292CitlbmFibGVfZXhhbXBsZXMKK3dpdGhfcGtnX2NvbmZpZ19wYXRoCit3aXRoX3BhY2thZ2VfbmFtZQord2l0aF9wYWNrYWdlX29yaWdpbgorZW5hYmxlX3Rlc3RzCitlbmFibGVfZmFpbGluZ190ZXN0cworZW5hYmxlX3BvaXNvbmluZworZW5hYmxlX2xhcmdlZmlsZQorZW5hYmxlX2ludHJvc3BlY3Rpb24KK2VuYWJsZV9kb2Nib29rCit3aXRoX2h0bWxfZGlyCitlbmFibGVfZ3RrX2RvYworZW5hYmxlX2dvYmplY3RfY2FzdF9jaGVja3MKK2VuYWJsZV9nbGliX2Fzc2VydHMKK2VuYWJsZV9jaGVjaword2l0aF9tZW1vcnlfYWxpZ25tZW50CitlbmFibGVfQnN5bWJvbGljCisnCisgICAgICBhY19wcmVjaW91c192YXJzPSdidWlsZF9hbGlhcworaG9zdF9hbGlhcwordGFyZ2V0X2FsaWFzCitDQworQ0ZMQUdTCitMREZMQUdTCitMSUJTCitDUFBGTEFHUworQ1BQCitQS0dfQ09ORklHCitWQUxHUklORF9DRkxBR1MKK1ZBTEdSSU5EX0xJQlMKK0NDQVMKK0NDQVNGTEFHUworQ1hYCitDWFhGTEFHUworQ0NDCitDWFhDUFAKK0dMSUJfQ0ZMQUdTCitHTElCX0xJQlMKK0dMSUJfT05MWV9DRkxBR1MKK0dMSUJfT05MWV9MSUJTJworCisKKyMgSW5pdGlhbGl6ZSBzb21lIHZhcmlhYmxlcyBzZXQgYnkgb3B0aW9ucy4KK2FjX2luaXRfaGVscD0KK2FjX2luaXRfdmVyc2lvbj1mYWxzZQorYWNfdW5yZWNvZ25pemVkX29wdHM9CithY191bnJlY29nbml6ZWRfc2VwPQorIyBUaGUgdmFyaWFibGVzIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgdGhlIG9wdGlvbnMsIHdpdGgKKyMgZGFzaGVzIGNoYW5nZWQgdG8gdW5kZXJsaW5lcy4KK2NhY2hlX2ZpbGU9L2Rldi9udWxsCitleGVjX3ByZWZpeD1OT05FCitub19jcmVhdGU9Citub19yZWN1cnNpb249CitwcmVmaXg9Tk9ORQorcHJvZ3JhbV9wcmVmaXg9Tk9ORQorcHJvZ3JhbV9zdWZmaXg9Tk9ORQorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT1zLHgseCwKK3NpbGVudD0KK3NpdGU9CitzcmNkaXI9Cit2ZXJib3NlPQoreF9pbmNsdWRlcz1OT05FCit4X2xpYnJhcmllcz1OT05FCisKKyMgSW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBvcHRpb25zLgorIyBUaGVzZSBhcmUgbGVmdCB1bmV4cGFuZGVkIHNvIHVzZXJzIGNhbiAibWFrZSBpbnN0YWxsIGV4ZWNfcHJlZml4PS9mb28iCisjIGFuZCBhbGwgdGhlIHZhcmlhYmxlcyB0aGF0IGFyZSBzdXBwb3NlZCB0byBiZSBiYXNlZCBvbiBleGVjX3ByZWZpeAorIyBieSBkZWZhdWx0IHdpbGwgYWN0dWFsbHkgY2hhbmdlLgorIyBVc2UgYnJhY2VzIGluc3RlYWQgb2YgcGFyZW5zIGJlY2F1c2Ugc2gsIHBlcmwsIGV0Yy4gYWxzbyBhY2NlcHQgdGhlbS4KKyMgKFRoZSBsaXN0IGZvbGxvd3MgdGhlIHNhbWUgb3JkZXIgYXMgdGhlIEdOVSBDb2RpbmcgU3RhbmRhcmRzLikKK2JpbmRpcj0nJHtleGVjX3ByZWZpeH0vYmluJworc2JpbmRpcj0nJHtleGVjX3ByZWZpeH0vc2JpbicKK2xpYmV4ZWNkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMnCitkYXRhcm9vdGRpcj0nJHtwcmVmaXh9L3NoYXJlJworZGF0YWRpcj0nJHtkYXRhcm9vdGRpcn0nCitzeXNjb25mZGlyPScke3ByZWZpeH0vZXRjJworc2hhcmVkc3RhdGVkaXI9JyR7cHJlZml4fS9jb20nCitsb2NhbHN0YXRlZGlyPScke3ByZWZpeH0vdmFyJworaW5jbHVkZWRpcj0nJHtwcmVmaXh9L2luY2x1ZGUnCitvbGRpbmNsdWRlZGlyPScvdXNyL2luY2x1ZGUnCitkb2NkaXI9JyR7ZGF0YXJvb3RkaXJ9L2RvYy8ke1BBQ0tBR0VfVEFSTkFNRX0nCitpbmZvZGlyPScke2RhdGFyb290ZGlyfS9pbmZvJworaHRtbGRpcj0nJHtkb2NkaXJ9JworZHZpZGlyPScke2RvY2Rpcn0nCitwZGZkaXI9JyR7ZG9jZGlyfScKK3BzZGlyPScke2RvY2Rpcn0nCitsaWJkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYicKK2xvY2FsZWRpcj0nJHtkYXRhcm9vdGRpcn0vbG9jYWxlJworbWFuZGlyPScke2RhdGFyb290ZGlyfS9tYW4nCisKK2FjX3ByZXY9CithY19kYXNoZGFzaD0KK2ZvciBhY19vcHRpb24KK2RvCisgICMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkcyBhbiBhcmd1bWVudCwgYXNzaWduIGl0LgorICBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKyAgICBldmFsICRhY19wcmV2PVwkYWNfb3B0aW9uCisgICAgYWNfcHJldj0KKyAgICBjb250aW51ZQorICBmaQorCisgIGNhc2UgJGFjX29wdGlvbiBpbgorICAqPT8qKSBhY19vcHRhcmc9YGV4cHIgIlgkYWNfb3B0aW9uIiA6ICdbXj1dKj1cKC4qXCknYCA7OworICAqPSkgICBhY19vcHRhcmc9IDs7CisgICopICAgIGFjX29wdGFyZz15ZXMgOzsKKyAgZXNhYworCisgICMgQWNjZXB0IHRoZSBpbXBvcnRhbnQgQ3lnbnVzIGNvbmZpZ3VyZSBvcHRpb25zLCBzbyB3ZSBjYW4gZGlhZ25vc2UgdHlwb3MuCisKKyAgY2FzZSAkYWNfZGFzaGRhc2gkYWNfb3B0aW9uIGluCisgIC0tKQorICAgIGFjX2Rhc2hkYXNoPXllcyA7OworCisgIC1iaW5kaXIgfCAtLWJpbmRpciB8IC0tYmluZGkgfCAtLWJpbmQgfCAtLWJpbiB8IC0tYmkpCisgICAgYWNfcHJldj1iaW5kaXIgOzsKKyAgLWJpbmRpcj0qIHwgLS1iaW5kaXI9KiB8IC0tYmluZGk9KiB8IC0tYmluZD0qIHwgLS1iaW49KiB8IC0tYmk9KikKKyAgICBiaW5kaXI9JGFjX29wdGFyZyA7OworCisgIC1idWlsZCB8IC0tYnVpbGQgfCAtLWJ1aWwgfCAtLWJ1aSB8IC0tYnUpCisgICAgYWNfcHJldj1idWlsZF9hbGlhcyA7OworICAtYnVpbGQ9KiB8IC0tYnVpbGQ9KiB8IC0tYnVpbD0qIHwgLS1idWk9KiB8IC0tYnU9KikKKyAgICBidWlsZF9hbGlhcz0kYWNfb3B0YXJnIDs7CisKKyAgLWNhY2hlLWZpbGUgfCAtLWNhY2hlLWZpbGUgfCAtLWNhY2hlLWZpbCB8IC0tY2FjaGUtZmkgXAorICB8IC0tY2FjaGUtZiB8IC0tY2FjaGUtIHwgLS1jYWNoZSB8IC0tY2FjaCB8IC0tY2FjIHwgLS1jYSB8IC0tYykKKyAgICBhY19wcmV2PWNhY2hlX2ZpbGUgOzsKKyAgLWNhY2hlLWZpbGU9KiB8IC0tY2FjaGUtZmlsZT0qIHwgLS1jYWNoZS1maWw9KiB8IC0tY2FjaGUtZmk9KiBcCisgIHwgLS1jYWNoZS1mPSogfCAtLWNhY2hlLT0qIHwgLS1jYWNoZT0qIHwgLS1jYWNoPSogfCAtLWNhYz0qIHwgLS1jYT0qIHwgLS1jPSopCisgICAgY2FjaGVfZmlsZT0kYWNfb3B0YXJnIDs7CisKKyAgLS1jb25maWctY2FjaGUgfCAtQykKKyAgICBjYWNoZV9maWxlPWNvbmZpZy5jYWNoZSA7OworCisgIC1kYXRhZGlyIHwgLS1kYXRhZGlyIHwgLS1kYXRhZGkgfCAtLWRhdGFkKQorICAgIGFjX3ByZXY9ZGF0YWRpciA7OworICAtZGF0YWRpcj0qIHwgLS1kYXRhZGlyPSogfCAtLWRhdGFkaT0qIHwgLS1kYXRhZD0qKQorICAgIGRhdGFkaXI9JGFjX29wdGFyZyA7OworCisgIC1kYXRhcm9vdGRpciB8IC0tZGF0YXJvb3RkaXIgfCAtLWRhdGFyb290ZGkgfCAtLWRhdGFyb290ZCB8IC0tZGF0YXJvb3QgXAorICB8IC0tZGF0YXJvbyB8IC0tZGF0YXJvIHwgLS1kYXRhcikKKyAgICBhY19wcmV2PWRhdGFyb290ZGlyIDs7CisgIC1kYXRhcm9vdGRpcj0qIHwgLS1kYXRhcm9vdGRpcj0qIHwgLS1kYXRhcm9vdGRpPSogfCAtLWRhdGFyb290ZD0qIFwKKyAgfCAtLWRhdGFyb290PSogfCAtLWRhdGFyb289KiB8IC0tZGF0YXJvPSogfCAtLWRhdGFyPSopCisgICAgZGF0YXJvb3RkaXI9JGFjX29wdGFyZyA7OworCisgIC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKikKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZGlzYWJsZS1cKC4qXCknYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfdXNlcm9wdCIKKyAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisgICAgICAqIgorImVuYWJsZV8kYWNfdXNlcm9wdCIKKyIqKSA7OworICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS1kaXNhYmxlLSRhY191c2Vyb3B0X29yaWciCisJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisgICAgZXNhYworICAgIGV2YWwgZW5hYmxlXyRhY191c2Vyb3B0PW5vIDs7CisKKyAgLWRvY2RpciB8IC0tZG9jZGlyIHwgLS1kb2NkaSB8IC0tZG9jIHwgLS1kbykKKyAgICBhY19wcmV2PWRvY2RpciA7OworICAtZG9jZGlyPSogfCAtLWRvY2Rpcj0qIHwgLS1kb2NkaT0qIHwgLS1kb2M9KiB8IC0tZG89KikKKyAgICBkb2NkaXI9JGFjX29wdGFyZyA7OworCisgIC1kdmlkaXIgfCAtLWR2aWRpciB8IC0tZHZpZGkgfCAtLWR2aWQgfCAtLWR2aSB8IC0tZHYpCisgICAgYWNfcHJldj1kdmlkaXIgOzsKKyAgLWR2aWRpcj0qIHwgLS1kdmlkaXI9KiB8IC0tZHZpZGk9KiB8IC0tZHZpZD0qIHwgLS1kdmk9KiB8IC0tZHY9KikKKyAgICBkdmlkaXI9JGFjX29wdGFyZyA7OworCisgIC1lbmFibGUtKiB8IC0tZW5hYmxlLSopCisgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmVuYWJsZS1cKFtePV0qXCknYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfdXNlcm9wdCIKKyAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisgICAgICAqIgorImVuYWJsZV8kYWNfdXNlcm9wdCIKKyIqKSA7OworICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS1lbmFibGUtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKyAgICBlc2FjCisgICAgZXZhbCBlbmFibGVfJGFjX3VzZXJvcHQ9XCRhY19vcHRhcmcgOzsKKworICAtZXhlYy1wcmVmaXggfCAtLWV4ZWNfcHJlZml4IHwgLS1leGVjLXByZWZpeCB8IC0tZXhlYy1wcmVmaSBcCisgIHwgLS1leGVjLXByZWYgfCAtLWV4ZWMtcHJlIHwgLS1leGVjLXByIHwgLS1leGVjLXAgfCAtLWV4ZWMtIFwKKyAgfCAtLWV4ZWMgfCAtLWV4ZSB8IC0tZXgpCisgICAgYWNfcHJldj1leGVjX3ByZWZpeCA7OworICAtZXhlYy1wcmVmaXg9KiB8IC0tZXhlY19wcmVmaXg9KiB8IC0tZXhlYy1wcmVmaXg9KiB8IC0tZXhlYy1wcmVmaT0qIFwKKyAgfCAtLWV4ZWMtcHJlZj0qIHwgLS1leGVjLXByZT0qIHwgLS1leGVjLXByPSogfCAtLWV4ZWMtcD0qIHwgLS1leGVjLT0qIFwKKyAgfCAtLWV4ZWM9KiB8IC0tZXhlPSogfCAtLWV4PSopCisgICAgZXhlY19wcmVmaXg9JGFjX29wdGFyZyA7OworCisgIC1nYXMgfCAtLWdhcyB8IC0tZ2EgfCAtLWcpCisgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aC1nYXMuCisgICAgd2l0aF9nYXM9eWVzIDs7CisKKyAgLWhlbHAgfCAtLWhlbHAgfCAtLWhlbCB8IC0taGUgfCAtaCkKKyAgICBhY19pbml0X2hlbHA9bG9uZyA7OworICAtaGVscD1yKiB8IC0taGVscD1yKiB8IC0taGVsPXIqIHwgLS1oZT1yKiB8IC1ociopCisgICAgYWNfaW5pdF9oZWxwPXJlY3Vyc2l2ZSA7OworICAtaGVscD1zKiB8IC0taGVscD1zKiB8IC0taGVsPXMqIHwgLS1oZT1zKiB8IC1ocyopCisgICAgYWNfaW5pdF9oZWxwPXNob3J0IDs7CisKKyAgLWhvc3QgfCAtLWhvc3QgfCAtLWhvcyB8IC0taG8pCisgICAgYWNfcHJldj1ob3N0X2FsaWFzIDs7CisgIC1ob3N0PSogfCAtLWhvc3Q9KiB8IC0taG9zPSogfCAtLWhvPSopCisgICAgaG9zdF9hbGlhcz0kYWNfb3B0YXJnIDs7CisKKyAgLWh0bWxkaXIgfCAtLWh0bWxkaXIgfCAtLWh0bWxkaSB8IC0taHRtbGQgfCAtLWh0bWwgfCAtLWh0bSB8IC0taHQpCisgICAgYWNfcHJldj1odG1sZGlyIDs7CisgIC1odG1sZGlyPSogfCAtLWh0bWxkaXI9KiB8IC0taHRtbGRpPSogfCAtLWh0bWxkPSogfCAtLWh0bWw9KiB8IC0taHRtPSogXAorICB8IC0taHQ9KikKKyAgICBodG1sZGlyPSRhY19vcHRhcmcgOzsKKworICAtaW5jbHVkZWRpciB8IC0taW5jbHVkZWRpciB8IC0taW5jbHVkZWRpIHwgLS1pbmNsdWRlZCB8IC0taW5jbHVkZSBcCisgIHwgLS1pbmNsdWQgfCAtLWluY2x1IHwgLS1pbmNsIHwgLS1pbmMpCisgICAgYWNfcHJldj1pbmNsdWRlZGlyIDs7CisgIC1pbmNsdWRlZGlyPSogfCAtLWluY2x1ZGVkaXI9KiB8IC0taW5jbHVkZWRpPSogfCAtLWluY2x1ZGVkPSogfCAtLWluY2x1ZGU9KiBcCisgIHwgLS1pbmNsdWQ9KiB8IC0taW5jbHU9KiB8IC0taW5jbD0qIHwgLS1pbmM9KikKKyAgICBpbmNsdWRlZGlyPSRhY19vcHRhcmcgOzsKKworICAtaW5mb2RpciB8IC0taW5mb2RpciB8IC0taW5mb2RpIHwgLS1pbmZvZCB8IC0taW5mbyB8IC0taW5mKQorICAgIGFjX3ByZXY9aW5mb2RpciA7OworICAtaW5mb2Rpcj0qIHwgLS1pbmZvZGlyPSogfCAtLWluZm9kaT0qIHwgLS1pbmZvZD0qIHwgLS1pbmZvPSogfCAtLWluZj0qKQorICAgIGluZm9kaXI9JGFjX29wdGFyZyA7OworCisgIC1saWJkaXIgfCAtLWxpYmRpciB8IC0tbGliZGkgfCAtLWxpYmQpCisgICAgYWNfcHJldj1saWJkaXIgOzsKKyAgLWxpYmRpcj0qIHwgLS1saWJkaXI9KiB8IC0tbGliZGk9KiB8IC0tbGliZD0qKQorICAgIGxpYmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWxpYmV4ZWNkaXIgfCAtLWxpYmV4ZWNkaXIgfCAtLWxpYmV4ZWNkaSB8IC0tbGliZXhlY2QgfCAtLWxpYmV4ZWMgXAorICB8IC0tbGliZXhlIHwgLS1saWJleCB8IC0tbGliZSkKKyAgICBhY19wcmV2PWxpYmV4ZWNkaXIgOzsKKyAgLWxpYmV4ZWNkaXI9KiB8IC0tbGliZXhlY2Rpcj0qIHwgLS1saWJleGVjZGk9KiB8IC0tbGliZXhlY2Q9KiB8IC0tbGliZXhlYz0qIFwKKyAgfCAtLWxpYmV4ZT0qIHwgLS1saWJleD0qIHwgLS1saWJlPSopCisgICAgbGliZXhlY2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWxvY2FsZWRpciB8IC0tbG9jYWxlZGlyIHwgLS1sb2NhbGVkaSB8IC0tbG9jYWxlZCB8IC0tbG9jYWxlKQorICAgIGFjX3ByZXY9bG9jYWxlZGlyIDs7CisgIC1sb2NhbGVkaXI9KiB8IC0tbG9jYWxlZGlyPSogfCAtLWxvY2FsZWRpPSogfCAtLWxvY2FsZWQ9KiB8IC0tbG9jYWxlPSopCisgICAgbG9jYWxlZGlyPSRhY19vcHRhcmcgOzsKKworICAtbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxzdGF0ZWRpIHwgLS1sb2NhbHN0YXRlZCBcCisgIHwgLS1sb2NhbHN0YXRlIHwgLS1sb2NhbHN0YXQgfCAtLWxvY2Fsc3RhIHwgLS1sb2NhbHN0IHwgLS1sb2NhbHMpCisgICAgYWNfcHJldj1sb2NhbHN0YXRlZGlyIDs7CisgIC1sb2NhbHN0YXRlZGlyPSogfCAtLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpPSogfCAtLWxvY2Fsc3RhdGVkPSogXAorICB8IC0tbG9jYWxzdGF0ZT0qIHwgLS1sb2NhbHN0YXQ9KiB8IC0tbG9jYWxzdGE9KiB8IC0tbG9jYWxzdD0qIHwgLS1sb2NhbHM9KikKKyAgICBsb2NhbHN0YXRlZGlyPSRhY19vcHRhcmcgOzsKKworICAtbWFuZGlyIHwgLS1tYW5kaXIgfCAtLW1hbmRpIHwgLS1tYW5kIHwgLS1tYW4gfCAtLW1hIHwgLS1tKQorICAgIGFjX3ByZXY9bWFuZGlyIDs7CisgIC1tYW5kaXI9KiB8IC0tbWFuZGlyPSogfCAtLW1hbmRpPSogfCAtLW1hbmQ9KiB8IC0tbWFuPSogfCAtLW1hPSogfCAtLW09KikKKyAgICBtYW5kaXI9JGFjX29wdGFyZyA7OworCisgIC1uZnAgfCAtLW5mcCB8IC0tbmYpCisgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aG91dC1mcC4KKyAgICB3aXRoX2ZwPW5vIDs7CisKKyAgLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXRlIHwgLS1uby1jcmVhdCB8IC0tbm8tY3JlYSB8IC0tbm8tY3JlIFwKKyAgfCAtLW5vLWNyIHwgLS1uby1jIHwgLW4pCisgICAgbm9fY3JlYXRlPXllcyA7OworCisgIC1uby1yZWN1cnNpb24gfCAtLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW8gfCAtLW5vLXJlY3Vyc2kgXAorICB8IC0tbm8tcmVjdXJzIHwgLS1uby1yZWN1ciB8IC0tbm8tcmVjdSB8IC0tbm8tcmVjIHwgLS1uby1yZSB8IC0tbm8tcikKKyAgICBub19yZWN1cnNpb249eWVzIDs7CisKKyAgLW9sZGluY2x1ZGVkaXIgfCAtLW9sZGluY2x1ZGVkaXIgfCAtLW9sZGluY2x1ZGVkaSB8IC0tb2xkaW5jbHVkZWQgXAorICB8IC0tb2xkaW5jbHVkZSB8IC0tb2xkaW5jbHVkIHwgLS1vbGRpbmNsdSB8IC0tb2xkaW5jbCB8IC0tb2xkaW5jIFwKKyAgfCAtLW9sZGluIHwgLS1vbGRpIHwgLS1vbGQgfCAtLW9sIHwgLS1vKQorICAgIGFjX3ByZXY9b2xkaW5jbHVkZWRpciA7OworICAtb2xkaW5jbHVkZWRpcj0qIHwgLS1vbGRpbmNsdWRlZGlyPSogfCAtLW9sZGluY2x1ZGVkaT0qIHwgLS1vbGRpbmNsdWRlZD0qIFwKKyAgfCAtLW9sZGluY2x1ZGU9KiB8IC0tb2xkaW5jbHVkPSogfCAtLW9sZGluY2x1PSogfCAtLW9sZGluY2w9KiB8IC0tb2xkaW5jPSogXAorICB8IC0tb2xkaW49KiB8IC0tb2xkaT0qIHwgLS1vbGQ9KiB8IC0tb2w9KiB8IC0tbz0qKQorICAgIG9sZGluY2x1ZGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1wcmVmaXggfCAtLXByZWZpeCB8IC0tcHJlZmkgfCAtLXByZWYgfCAtLXByZSB8IC0tcHIgfCAtLXApCisgICAgYWNfcHJldj1wcmVmaXggOzsKKyAgLXByZWZpeD0qIHwgLS1wcmVmaXg9KiB8IC0tcHJlZmk9KiB8IC0tcHJlZj0qIHwgLS1wcmU9KiB8IC0tcHI9KiB8IC0tcD0qKQorICAgIHByZWZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLXByb2dyYW0tcHJlZml4IHwgLS1wcm9ncmFtLXByZWZpeCB8IC0tcHJvZ3JhbS1wcmVmaSB8IC0tcHJvZ3JhbS1wcmVmIFwKKyAgfCAtLXByb2dyYW0tcHJlIHwgLS1wcm9ncmFtLXByIHwgLS1wcm9ncmFtLXApCisgICAgYWNfcHJldj1wcm9ncmFtX3ByZWZpeCA7OworICAtcHJvZ3JhbS1wcmVmaXg9KiB8IC0tcHJvZ3JhbS1wcmVmaXg9KiB8IC0tcHJvZ3JhbS1wcmVmaT0qIFwKKyAgfCAtLXByb2dyYW0tcHJlZj0qIHwgLS1wcm9ncmFtLXByZT0qIHwgLS1wcm9ncmFtLXByPSogfCAtLXByb2dyYW0tcD0qKQorICAgIHByb2dyYW1fcHJlZml4PSRhY19vcHRhcmcgOzsKKworICAtcHJvZ3JhbS1zdWZmaXggfCAtLXByb2dyYW0tc3VmZml4IHwgLS1wcm9ncmFtLXN1ZmZpIHwgLS1wcm9ncmFtLXN1ZmYgXAorICB8IC0tcHJvZ3JhbS1zdWYgfCAtLXByb2dyYW0tc3UgfCAtLXByb2dyYW0tcykKKyAgICBhY19wcmV2PXByb2dyYW1fc3VmZml4IDs7CisgIC1wcm9ncmFtLXN1ZmZpeD0qIHwgLS1wcm9ncmFtLXN1ZmZpeD0qIHwgLS1wcm9ncmFtLXN1ZmZpPSogXAorICB8IC0tcHJvZ3JhbS1zdWZmPSogfCAtLXByb2dyYW0tc3VmPSogfCAtLXByb2dyYW0tc3U9KiB8IC0tcHJvZ3JhbS1zPSopCisgICAgcHJvZ3JhbV9zdWZmaXg9JGFjX29wdGFyZyA7OworCisgIC1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbSB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmEgXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtIHwgLS1wcm9ncmFtLXRyYW5zZm9yIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmbyB8IC0tcHJvZ3JhbS10cmFuc2YgXAorICB8IC0tcHJvZ3JhbS10cmFucyB8IC0tcHJvZ3JhbS10cmFuIFwKKyAgfCAtLXByb2dyLXRyYSB8IC0tcHJvZ3JhbS10ciB8IC0tcHJvZ3JhbS10KQorICAgIGFjX3ByZXY9cHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA7OworICAtcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT0qIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPSogXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hPSogXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbj0qIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS09KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybT0qIHwgLS1wcm9ncmFtLXRyYW5zZm9yPSogXAorICB8IC0tcHJvZ3JhbS10cmFuc2ZvPSogfCAtLXByb2dyYW0tdHJhbnNmPSogXAorICB8IC0tcHJvZ3JhbS10cmFucz0qIHwgLS1wcm9ncmFtLXRyYW49KiBcCisgIHwgLS1wcm9nci10cmE9KiB8IC0tcHJvZ3JhbS10cj0qIHwgLS1wcm9ncmFtLXQ9KikKKyAgICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSRhY19vcHRhcmcgOzsKKworICAtcGRmZGlyIHwgLS1wZGZkaXIgfCAtLXBkZmRpIHwgLS1wZGZkIHwgLS1wZGYgfCAtLXBkKQorICAgIGFjX3ByZXY9cGRmZGlyIDs7CisgIC1wZGZkaXI9KiB8IC0tcGRmZGlyPSogfCAtLXBkZmRpPSogfCAtLXBkZmQ9KiB8IC0tcGRmPSogfCAtLXBkPSopCisgICAgcGRmZGlyPSRhY19vcHRhcmcgOzsKKworICAtcHNkaXIgfCAtLXBzZGlyIHwgLS1wc2RpIHwgLS1wc2QgfCAtLXBzKQorICAgIGFjX3ByZXY9cHNkaXIgOzsKKyAgLXBzZGlyPSogfCAtLXBzZGlyPSogfCAtLXBzZGk9KiB8IC0tcHNkPSogfCAtLXBzPSopCisgICAgcHNkaXI9JGFjX29wdGFyZyA7OworCisgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCisgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQorICAgIHNpbGVudD15ZXMgOzsKKworICAtc2JpbmRpciB8IC0tc2JpbmRpciB8IC0tc2JpbmRpIHwgLS1zYmluZCB8IC0tc2JpbiB8IC0tc2JpIHwgLS1zYikKKyAgICBhY19wcmV2PXNiaW5kaXIgOzsKKyAgLXNiaW5kaXI9KiB8IC0tc2JpbmRpcj0qIHwgLS1zYmluZGk9KiB8IC0tc2JpbmQ9KiB8IC0tc2Jpbj0qIFwKKyAgfCAtLXNiaT0qIHwgLS1zYj0qKQorICAgIHNiaW5kaXI9JGFjX29wdGFyZyA7OworCisgIC1zaGFyZWRzdGF0ZWRpciB8IC0tc2hhcmVkc3RhdGVkaXIgfCAtLXNoYXJlZHN0YXRlZGkgXAorICB8IC0tc2hhcmVkc3RhdGVkIHwgLS1zaGFyZWRzdGF0ZSB8IC0tc2hhcmVkc3RhdCB8IC0tc2hhcmVkc3RhIFwKKyAgfCAtLXNoYXJlZHN0IHwgLS1zaGFyZWRzIHwgLS1zaGFyZWQgfCAtLXNoYXJlIHwgLS1zaGFyIFwKKyAgfCAtLXNoYSB8IC0tc2gpCisgICAgYWNfcHJldj1zaGFyZWRzdGF0ZWRpciA7OworICAtc2hhcmVkc3RhdGVkaXI9KiB8IC0tc2hhcmVkc3RhdGVkaXI9KiB8IC0tc2hhcmVkc3RhdGVkaT0qIFwKKyAgfCAtLXNoYXJlZHN0YXRlZD0qIHwgLS1zaGFyZWRzdGF0ZT0qIHwgLS1zaGFyZWRzdGF0PSogfCAtLXNoYXJlZHN0YT0qIFwKKyAgfCAtLXNoYXJlZHN0PSogfCAtLXNoYXJlZHM9KiB8IC0tc2hhcmVkPSogfCAtLXNoYXJlPSogfCAtLXNoYXI9KiBcCisgIHwgLS1zaGE9KiB8IC0tc2g9KikKKyAgICBzaGFyZWRzdGF0ZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXNpdGUgfCAtLXNpdGUgfCAtLXNpdCkKKyAgICBhY19wcmV2PXNpdGUgOzsKKyAgLXNpdGU9KiB8IC0tc2l0ZT0qIHwgLS1zaXQ9KikKKyAgICBzaXRlPSRhY19vcHRhcmcgOzsKKworICAtc3JjZGlyIHwgLS1zcmNkaXIgfCAtLXNyY2RpIHwgLS1zcmNkIHwgLS1zcmMgfCAtLXNyKQorICAgIGFjX3ByZXY9c3JjZGlyIDs7CisgIC1zcmNkaXI9KiB8IC0tc3JjZGlyPSogfCAtLXNyY2RpPSogfCAtLXNyY2Q9KiB8IC0tc3JjPSogfCAtLXNyPSopCisgICAgc3JjZGlyPSRhY19vcHRhcmcgOzsKKworICAtc3lzY29uZmRpciB8IC0tc3lzY29uZmRpciB8IC0tc3lzY29uZmRpIHwgLS1zeXNjb25mZCB8IC0tc3lzY29uZiBcCisgIHwgLS1zeXNjb24gfCAtLXN5c2NvIHwgLS1zeXNjIHwgLS1zeXMgfCAtLXN5KQorICAgIGFjX3ByZXY9c3lzY29uZmRpciA7OworICAtc3lzY29uZmRpcj0qIHwgLS1zeXNjb25mZGlyPSogfCAtLXN5c2NvbmZkaT0qIHwgLS1zeXNjb25mZD0qIHwgLS1zeXNjb25mPSogXAorICB8IC0tc3lzY29uPSogfCAtLXN5c2NvPSogfCAtLXN5c2M9KiB8IC0tc3lzPSogfCAtLXN5PSopCisgICAgc3lzY29uZmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXRhcmdldCB8IC0tdGFyZ2V0IHwgLS10YXJnZSB8IC0tdGFyZyB8IC0tdGFyIHwgLS10YSB8IC0tdCkKKyAgICBhY19wcmV2PXRhcmdldF9hbGlhcyA7OworICAtdGFyZ2V0PSogfCAtLXRhcmdldD0qIHwgLS10YXJnZT0qIHwgLS10YXJnPSogfCAtLXRhcj0qIHwgLS10YT0qIHwgLS10PSopCisgICAgdGFyZ2V0X2FsaWFzPSRhY19vcHRhcmcgOzsKKworICAtdiB8IC12ZXJib3NlIHwgLS12ZXJib3NlIHwgLS12ZXJib3MgfCAtLXZlcmJvIHwgLS12ZXJiKQorICAgIHZlcmJvc2U9eWVzIDs7CisKKyAgLXZlcnNpb24gfCAtLXZlcnNpb24gfCAtLXZlcnNpbyB8IC0tdmVyc2kgfCAtLXZlcnMgfCAtVikKKyAgICBhY19pbml0X3ZlcnNpb249OiA7OworCisgIC13aXRoLSogfCAtLXdpdGgtKikKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aC1cKFtePV0qXCknYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfdXNlcm9wdCIKKyAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisgICAgICAqIgorIndpdGhfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0td2l0aC0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgIGVzYWMKKyAgICBldmFsIHdpdGhfJGFjX3VzZXJvcHQ9XCRhY19vcHRhcmcgOzsKKworICAtd2l0aG91dC0qIHwgLS13aXRob3V0LSopCisgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGhvdXQtXCguKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHBhY2thZ2UgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJ3aXRoXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLXdpdGhvdXQtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKyAgICBlc2FjCisgICAgZXZhbCB3aXRoXyRhY191c2Vyb3B0PW5vIDs7CisKKyAgLS14KQorICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGgteC4KKyAgICB3aXRoX3g9eWVzIDs7CisKKyAgLXgtaW5jbHVkZXMgfCAtLXgtaW5jbHVkZXMgfCAtLXgtaW5jbHVkZSB8IC0teC1pbmNsdWQgfCAtLXgtaW5jbHUgXAorICB8IC0teC1pbmNsIHwgLS14LWluYyB8IC0teC1pbiB8IC0teC1pKQorICAgIGFjX3ByZXY9eF9pbmNsdWRlcyA7OworICAteC1pbmNsdWRlcz0qIHwgLS14LWluY2x1ZGVzPSogfCAtLXgtaW5jbHVkZT0qIHwgLS14LWluY2x1ZD0qIHwgLS14LWluY2x1PSogXAorICB8IC0teC1pbmNsPSogfCAtLXgtaW5jPSogfCAtLXgtaW49KiB8IC0teC1pPSopCisgICAgeF9pbmNsdWRlcz0kYWNfb3B0YXJnIDs7CisKKyAgLXgtbGlicmFyaWVzIHwgLS14LWxpYnJhcmllcyB8IC0teC1saWJyYXJpZSB8IC0teC1saWJyYXJpIFwKKyAgfCAtLXgtbGlicmFyIHwgLS14LWxpYnJhIHwgLS14LWxpYnIgfCAtLXgtbGliIHwgLS14LWxpIHwgLS14LWwpCisgICAgYWNfcHJldj14X2xpYnJhcmllcyA7OworICAteC1saWJyYXJpZXM9KiB8IC0teC1saWJyYXJpZXM9KiB8IC0teC1saWJyYXJpZT0qIHwgLS14LWxpYnJhcmk9KiBcCisgIHwgLS14LWxpYnJhcj0qIHwgLS14LWxpYnJhPSogfCAtLXgtbGlicj0qIHwgLS14LWxpYj0qIHwgLS14LWxpPSogfCAtLXgtbD0qKQorICAgIHhfbGlicmFyaWVzPSRhY19vcHRhcmcgOzsKKworICAtKikgYXNfZm5fZXJyb3IgJD8gInVucmVjb2duaXplZCBvcHRpb246IFxgJGFjX29wdGlvbicKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCisgICAgOzsKKworICAqPSopCisgICAgYWNfZW52dmFyPWBleHByICJ4JGFjX29wdGlvbiIgOiAneFwoW149XSpcKT0nYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBjYXNlICRhY19lbnZ2YXIgaW4gIygKKyAgICAgICcnIHwgWzAtOV0qIHwgKlshXyRhc19jcl9hbG51bV0qICkKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhcmlhYmxlIG5hbWU6IFxgJGFjX2VudnZhciciIDs7CisgICAgZXNhYworICAgIGV2YWwgJGFjX2VudnZhcj1cJGFjX29wdGFyZworICAgIGV4cG9ydCAkYWNfZW52dmFyIDs7CisKKyAgKikKKyAgICAjIEZJWE1FOiBzaG91bGQgYmUgcmVtb3ZlZCBpbiBhdXRvY29uZiAzLjAuCisgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogeW91IHNob3VsZCB1c2UgLS1idWlsZCwgLS1ob3N0LCAtLXRhcmdldCIgPiYyCisgICAgZXhwciAieCRhY19vcHRpb24iIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpbnZhbGlkIGhvc3QgdHlwZTogJGFjX29wdGlvbiIgPiYyCisgICAgOiAke2J1aWxkX2FsaWFzPSRhY19vcHRpb259ICR7aG9zdF9hbGlhcz0kYWNfb3B0aW9ufSAke3RhcmdldF9hbGlhcz0kYWNfb3B0aW9ufQorICAgIDs7CisKKyAgZXNhYworZG9uZQorCitpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKyAgYWNfb3B0aW9uPS0tYGVjaG8gJGFjX3ByZXYgfCBzZWQgJ3MvXy8tL2cnYAorICBhc19mbl9lcnJvciAkPyAibWlzc2luZyBhcmd1bWVudCB0byAkYWNfb3B0aW9uIgorZmkKKworaWYgdGVzdCAtbiAiJGFjX3VucmVjb2duaXplZF9vcHRzIjsgdGhlbgorICBjYXNlICRlbmFibGVfb3B0aW9uX2NoZWNraW5nIGluCisgICAgbm8pIDs7CisgICAgZmF0YWwpIGFzX2ZuX2Vycm9yICQ/ICJ1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA7OworICAgICopICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjIgOzsKKyAgZXNhYworZmkKKworIyBDaGVjayBhbGwgZGlyZWN0b3J5IGFyZ3VtZW50cyBmb3IgY29uc2lzdGVuY3kuCitmb3IgYWNfdmFyIGluCWV4ZWNfcHJlZml4IHByZWZpeCBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFyb290ZGlyIFwKKwkJZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgaW5jbHVkZWRpciBcCisJCW9sZGluY2x1ZGVkaXIgZG9jZGlyIGluZm9kaXIgaHRtbGRpciBkdmlkaXIgcGRmZGlyIHBzZGlyIFwKKwkJbGliZGlyIGxvY2FsZWRpciBtYW5kaXIKK2RvCisgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAjIFJlbW92ZSB0cmFpbGluZyBzbGFzaGVzLgorICBjYXNlICRhY192YWwgaW4KKyAgICAqLyApCisgICAgICBhY192YWw9YGV4cHIgIlgkYWNfdmFsIiA6ICdYXCguKlteL11cKScgXHwgIlgkYWNfdmFsIiA6ICdYXCguKlwpJ2AKKyAgICAgIGV2YWwgJGFjX3Zhcj1cJGFjX3ZhbDs7CisgIGVzYWMKKyAgIyBCZSBzdXJlIHRvIGhhdmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWVzLgorICBjYXNlICRhY192YWwgaW4KKyAgICBbXFwvJF0qIHwgPzpbXFwvXSogKSAgY29udGludWU7OworICAgIE5PTkUgfCAnJyApIGNhc2UgJGFjX3ZhciBpbiAqcHJlZml4ICkgY29udGludWU7OyBlc2FjOzsKKyAgZXNhYworICBhc19mbl9lcnJvciAkPyAiZXhwZWN0ZWQgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgZm9yIC0tJGFjX3ZhcjogJGFjX3ZhbCIKK2RvbmUKKworIyBUaGVyZSBtaWdodCBiZSBwZW9wbGUgd2hvIGRlcGVuZCBvbiB0aGUgb2xkIGJyb2tlbiBiZWhhdmlvcjogYCRob3N0JworIyB1c2VkIHRvIGhvbGQgdGhlIGFyZ3VtZW50IG9mIC0taG9zdCBldGMuCisjIEZJWE1FOiBUbyByZW1vdmUgc29tZSBkYXkuCitidWlsZD0kYnVpbGRfYWxpYXMKK2hvc3Q9JGhvc3RfYWxpYXMKK3RhcmdldD0kdGFyZ2V0X2FsaWFzCisKKyMgRklYTUU6IFRvIHJlbW92ZSBzb21lIGRheS4KK2lmIHRlc3QgIngkaG9zdF9hbGlhcyIgIT0geDsgdGhlbgorICBpZiB0ZXN0ICJ4JGJ1aWxkX2FsaWFzIiA9IHg7IHRoZW4KKyAgICBjcm9zc19jb21waWxpbmc9bWF5YmUKKyAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpZiB5b3Ugd2FudGVkIHRvIHNldCB0aGUgLS1idWlsZCB0eXBlLCBkb24ndCB1c2UgLS1ob3N0LgorICAgIElmIGEgY3Jvc3MgY29tcGlsZXIgaXMgZGV0ZWN0ZWQgdGhlbiBjcm9zcyBjb21waWxlIG1vZGUgd2lsbCBiZSB1c2VkIiA+JjIKKyAgZWxpZiB0ZXN0ICJ4JGJ1aWxkX2FsaWFzIiAhPSAieCRob3N0X2FsaWFzIjsgdGhlbgorICAgIGNyb3NzX2NvbXBpbGluZz15ZXMKKyAgZmkKK2ZpCisKK2FjX3Rvb2xfcHJlZml4PQordGVzdCAtbiAiJGhvc3RfYWxpYXMiICYmIGFjX3Rvb2xfcHJlZml4PSRob3N0X2FsaWFzLQorCit0ZXN0ICIkc2lsZW50IiA9IHllcyAmJiBleGVjIDY+L2Rldi9udWxsCisKKworYWNfcHdkPWBwd2RgICYmIHRlc3QgLW4gIiRhY19wd2QiICYmCithY19sc19kaT1gbHMgLWRpIC5gICYmCithY19wd2RfbHNfZGk9YGNkICIkYWNfcHdkIiAmJiBscyAtZGkgLmAgfHwKKyAgYXNfZm5fZXJyb3IgJD8gIndvcmtpbmcgZGlyZWN0b3J5IGNhbm5vdCBiZSBkZXRlcm1pbmVkIgordGVzdCAiWCRhY19sc19kaSIgPSAiWCRhY19wd2RfbHNfZGkiIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJwd2QgZG9lcyBub3QgcmVwb3J0IG5hbWUgb2Ygd29ya2luZyBkaXJlY3RvcnkiCisKKworIyBGaW5kIHRoZSBzb3VyY2UgZmlsZXMsIGlmIGxvY2F0aW9uIHdhcyBub3Qgc3BlY2lmaWVkLgoraWYgdGVzdCAteiAiJHNyY2RpciI7IHRoZW4KKyAgYWNfc3JjZGlyX2RlZmF1bHRlZD15ZXMKKyAgIyBUcnkgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgc2NyaXB0LCB0aGVuIHRoZSBwYXJlbnQgZGlyZWN0b3J5LgorICBhY19jb25mZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX215c2VsZiIgfHwKKyRhc19leHByIFgiJGFzX215c2VsZiIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfbXlzZWxmIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19teXNlbGYiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX215c2VsZiIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhc19teXNlbGYiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICBzcmNkaXI9JGFjX2NvbmZkaXIKKyAgaWYgdGVzdCAhIC1yICIkc3JjZGlyLyRhY191bmlxdWVfZmlsZSI7IHRoZW4KKyAgICBzcmNkaXI9Li4KKyAgZmkKK2Vsc2UKKyAgYWNfc3JjZGlyX2RlZmF1bHRlZD1ubworZmkKK2lmIHRlc3QgISAtciAiJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGUiOyB0aGVuCisgIHRlc3QgIiRhY19zcmNkaXJfZGVmYXVsdGVkIiA9IHllcyAmJiBzcmNkaXI9IiRhY19jb25mZGlyIG9yIC4uIgorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGZpbmQgc291cmNlcyAoJGFjX3VuaXF1ZV9maWxlKSBpbiAkc3JjZGlyIgorZmkKK2FjX21zZz0ic291cmNlcyBhcmUgaW4gJHNyY2RpciwgYnV0IFxgY2QgJHNyY2RpcicgZG9lcyBub3Qgd29yayIKK2FjX2Fic19jb25mZGlyPWAoCisJY2QgIiRzcmNkaXIiICYmIHRlc3QgLXIgIi4vJGFjX3VuaXF1ZV9maWxlIiB8fCBhc19mbl9lcnJvciAkPyAiJGFjX21zZyIKKwlwd2QpYAorIyBXaGVuIGJ1aWxkaW5nIGluIHBsYWNlLCBzZXQgc3JjZGlyPS4KK2lmIHRlc3QgIiRhY19hYnNfY29uZmRpciIgPSAiJGFjX3B3ZCI7IHRoZW4KKyAgc3JjZGlyPS4KK2ZpCisjIFJlbW92ZSB1bm5lY2Vzc2FyeSB0cmFpbGluZyBzbGFzaGVzIGZyb20gc3JjZGlyLgorIyBEb3VibGUgc2xhc2hlcyBpbiBmaWxlIG5hbWVzIGluIG9iamVjdCBmaWxlIGRlYnVnZ2luZyBpbmZvCisjIG1lc3MgdXAgTS14IGdkYiBpbiBFbWFjcy4KK2Nhc2UgJHNyY2RpciBpbgorKi8pIHNyY2Rpcj1gZXhwciAiWCRzcmNkaXIiIDogJ1hcKC4qW14vXVwpJyBcfCAiWCRzcmNkaXIiIDogJ1hcKC4qXCknYDs7Citlc2FjCitmb3IgYWNfdmFyIGluICRhY19wcmVjaW91c192YXJzOyBkbworICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fc2V0PVwkeyR7YWNfdmFyfStzZXR9CisgIGV2YWwgYWNfZW52XyR7YWNfdmFyfV92YWx1ZT1cJCR7YWNfdmFyfQorICBldmFsIGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0PVwkeyR7YWNfdmFyfStzZXR9CisgIGV2YWwgYWNfY3ZfZW52XyR7YWNfdmFyfV92YWx1ZT1cJCR7YWNfdmFyfQorZG9uZQorCisjCisjIFJlcG9ydCB0aGUgLS1oZWxwIG1lc3NhZ2UuCisjCitpZiB0ZXN0ICIkYWNfaW5pdF9oZWxwIiA9ICJsb25nIjsgdGhlbgorICAjIE9taXQgc29tZSBpbnRlcm5hbCBvciBvYnNvbGV0ZSBvcHRpb25zIHRvIG1ha2UgdGhlIGxpc3QgbGVzcyBpbXBvc2luZy4KKyAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgorICBjYXQgPDxfQUNFT0YKK1xgY29uZmlndXJlJyBjb25maWd1cmVzIEdTdHJlYW1lciAwLjExLjEgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgorCitVc2FnZTogJDAgW09QVElPTl0uLi4gW1ZBUj1WQUxVRV0uLi4KKworVG8gYXNzaWduIGVudmlyb25tZW50IHZhcmlhYmxlcyAoZS5nLiwgQ0MsIENGTEFHUy4uLiksIHNwZWNpZnkgdGhlbSBhcworVkFSPVZBTFVFLiAgU2VlIGJlbG93IGZvciBkZXNjcmlwdGlvbnMgb2Ygc29tZSBvZiB0aGUgdXNlZnVsIHZhcmlhYmxlcy4KKworRGVmYXVsdHMgZm9yIHRoZSBvcHRpb25zIGFyZSBzcGVjaWZpZWQgaW4gYnJhY2tldHMuCisKK0NvbmZpZ3VyYXRpb246CisgIC1oLCAtLWhlbHAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0CisgICAgICAtLWhlbHA9c2hvcnQgICAgICAgIGRpc3BsYXkgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGlzIHBhY2thZ2UKKyAgICAgIC0taGVscD1yZWN1cnNpdmUgICAgZGlzcGxheSB0aGUgc2hvcnQgaGVscCBvZiBhbGwgdGhlIGluY2x1ZGVkIHBhY2thZ2VzCisgIC1WLCAtLXZlcnNpb24gICAgICAgICAgIGRpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorICAtcSwgLS1xdWlldCwgLS1zaWxlbnQgICBkbyBub3QgcHJpbnQgXGBjaGVja2luZyAuLi4nIG1lc3NhZ2VzCisgICAgICAtLWNhY2hlLWZpbGU9RklMRSAgIGNhY2hlIHRlc3QgcmVzdWx0cyBpbiBGSUxFIFtkaXNhYmxlZF0KKyAgLUMsIC0tY29uZmlnLWNhY2hlICAgICAgYWxpYXMgZm9yIFxgLS1jYWNoZS1maWxlPWNvbmZpZy5jYWNoZScKKyAgLW4sIC0tbm8tY3JlYXRlICAgICAgICAgZG8gbm90IGNyZWF0ZSBvdXRwdXQgZmlsZXMKKyAgICAgIC0tc3JjZGlyPURJUiAgICAgICAgZmluZCB0aGUgc291cmNlcyBpbiBESVIgW2NvbmZpZ3VyZSBkaXIgb3IgXGAuLiddCisKK0luc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKyAgLS1wcmVmaXg9UFJFRklYICAgICAgICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMgaW4gUFJFRklYCisgICAgICAgICAgICAgICAgICAgICAgICAgIFskYWNfZGVmYXVsdF9wcmVmaXhdCisgIC0tZXhlYy1wcmVmaXg9RVBSRUZJWCAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBmaWxlcyBpbiBFUFJFRklYCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtQUkVGSVhdCisKK0J5IGRlZmF1bHQsIFxgbWFrZSBpbnN0YWxsJyB3aWxsIGluc3RhbGwgYWxsIHRoZSBmaWxlcyBpbgorXGAkYWNfZGVmYXVsdF9wcmVmaXgvYmluJywgXGAkYWNfZGVmYXVsdF9wcmVmaXgvbGliJyBldGMuICBZb3UgY2FuIHNwZWNpZnkKK2FuIGluc3RhbGxhdGlvbiBwcmVmaXggb3RoZXIgdGhhbiBcYCRhY19kZWZhdWx0X3ByZWZpeCcgdXNpbmcgXGAtLXByZWZpeCcsCitmb3IgaW5zdGFuY2UgXGAtLXByZWZpeD1cJEhPTUUnLgorCitGb3IgYmV0dGVyIGNvbnRyb2wsIHVzZSB0aGUgb3B0aW9ucyBiZWxvdy4KKworRmluZSB0dW5pbmcgb2YgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKyAgLS1iaW5kaXI9RElSICAgICAgICAgICAgdXNlciBleGVjdXRhYmxlcyBbRVBSRUZJWC9iaW5dCisgIC0tc2JpbmRpcj1ESVIgICAgICAgICAgIHN5c3RlbSBhZG1pbiBleGVjdXRhYmxlcyBbRVBSRUZJWC9zYmluXQorICAtLWxpYmV4ZWNkaXI9RElSICAgICAgICBwcm9ncmFtIGV4ZWN1dGFibGVzIFtFUFJFRklYL2xpYmV4ZWNdCisgIC0tc3lzY29uZmRpcj1ESVIgICAgICAgIHJlYWQtb25seSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvZXRjXQorICAtLXNoYXJlZHN0YXRlZGlyPURJUiAgICBtb2RpZmlhYmxlIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtQUkVGSVgvY29tXQorICAtLWxvY2Fsc3RhdGVkaXI9RElSICAgICBtb2RpZmlhYmxlIHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC92YXJdCisgIC0tbGliZGlyPURJUiAgICAgICAgICAgIG9iamVjdCBjb2RlIGxpYnJhcmllcyBbRVBSRUZJWC9saWJdCisgIC0taW5jbHVkZWRpcj1ESVIgICAgICAgIEMgaGVhZGVyIGZpbGVzIFtQUkVGSVgvaW5jbHVkZV0KKyAgLS1vbGRpbmNsdWRlZGlyPURJUiAgICAgQyBoZWFkZXIgZmlsZXMgZm9yIG5vbi1nY2MgWy91c3IvaW5jbHVkZV0KKyAgLS1kYXRhcm9vdGRpcj1ESVIgICAgICAgcmVhZC1vbmx5IGFyY2guLWluZGVwZW5kZW50IGRhdGEgcm9vdCBbUFJFRklYL3NoYXJlXQorICAtLWRhdGFkaXI9RElSICAgICAgICAgICByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSXQorICAtLWluZm9kaXI9RElSICAgICAgICAgICBpbmZvIGRvY3VtZW50YXRpb24gW0RBVEFST09URElSL2luZm9dCisgIC0tbG9jYWxlZGlyPURJUiAgICAgICAgIGxvY2FsZS1kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVIvbG9jYWxlXQorICAtLW1hbmRpcj1ESVIgICAgICAgICAgICBtYW4gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIvbWFuXQorICAtLWRvY2Rpcj1ESVIgICAgICAgICAgICBkb2N1bWVudGF0aW9uIHJvb3QgW0RBVEFST09URElSL2RvYy9nc3RyZWFtZXJdCisgIC0taHRtbGRpcj1ESVIgICAgICAgICAgIGh0bWwgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorICAtLWR2aWRpcj1ESVIgICAgICAgICAgICBkdmkgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorICAtLXBkZmRpcj1ESVIgICAgICAgICAgICBwZGYgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorICAtLXBzZGlyPURJUiAgICAgICAgICAgICBwcyBkb2N1bWVudGF0aW9uIFtET0NESVJdCitfQUNFT0YKKworICBjYXQgPDxcX0FDRU9GCisKK1Byb2dyYW0gbmFtZXM6CisgIC0tcHJvZ3JhbS1wcmVmaXg9UFJFRklYICAgICAgICAgICAgcHJlcGVuZCBQUkVGSVggdG8gaW5zdGFsbGVkIHByb2dyYW0gbmFtZXMKKyAgLS1wcm9ncmFtLXN1ZmZpeD1TVUZGSVggICAgICAgICAgICBhcHBlbmQgU1VGRklYIHRvIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCisgIC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT1QUk9HUkFNICAgcnVuIHNlZCBQUk9HUkFNIG9uIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCisKK1N5c3RlbSB0eXBlczoKKyAgLS1idWlsZD1CVUlMRCAgICAgY29uZmlndXJlIGZvciBidWlsZGluZyBvbiBCVUlMRCBbZ3Vlc3NlZF0KKyAgLS1ob3N0PUhPU1QgICAgICAgY3Jvc3MtY29tcGlsZSB0byBidWlsZCBwcm9ncmFtcyB0byBydW4gb24gSE9TVCBbQlVJTERdCitfQUNFT0YKK2ZpCisKK2lmIHRlc3QgLW4gIiRhY19pbml0X2hlbHAiOyB0aGVuCisgIGNhc2UgJGFjX2luaXRfaGVscCBpbgorICAgICBzaG9ydCB8IHJlY3Vyc2l2ZSApIGVjaG8gIkNvbmZpZ3VyYXRpb24gb2YgR1N0cmVhbWVyIDAuMTEuMToiOzsKKyAgIGVzYWMKKyAgY2F0IDw8XF9BQ0VPRgorCitPcHRpb25hbCBGZWF0dXJlczoKKyAgLS1kaXNhYmxlLW9wdGlvbi1jaGVja2luZyAgaWdub3JlIHVucmVjb2duaXplZCAtLWVuYWJsZS8tLXdpdGggb3B0aW9ucworICAtLWRpc2FibGUtRkVBVFVSRSAgICAgICBkbyBub3QgaW5jbHVkZSBGRUFUVVJFIChzYW1lIGFzIC0tZW5hYmxlLUZFQVRVUkU9bm8pCisgIC0tZW5hYmxlLUZFQVRVUkVbPUFSR10gIGluY2x1ZGUgRkVBVFVSRSBbQVJHPXllc10KKyAgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlICBlbmFibGUgbWFrZSBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIG5vdCB1c2VmdWwKKwkJCSAgKGFuZCBzb21ldGltZXMgY29uZnVzaW5nKSB0byB0aGUgY2FzdWFsIGluc3RhbGxlcgorICAtLWVuYWJsZS1zaWxlbnQtcnVsZXMgICAgICAgICAgbGVzcyB2ZXJib3NlIGJ1aWxkIG91dHB1dCAodW5kbzogYG1ha2UgVj0xJykKKyAgLS1kaXNhYmxlLXNpbGVudC1ydWxlcyAgICAgICAgIHZlcmJvc2UgYnVpbGQgb3V0cHV0ICh1bmRvOiBgbWFrZSBWPTAnKQorICAtLWVuYWJsZS1zaGFyZWRbPVBLR1NdICBidWlsZCBzaGFyZWQgbGlicmFyaWVzIFtkZWZhdWx0PXllc10KKyAgLS1lbmFibGUtc3RhdGljWz1QS0dTXSAgYnVpbGQgc3RhdGljIGxpYnJhcmllcyBbZGVmYXVsdD15ZXNdCisgIC0tZW5hYmxlLWZhc3QtaW5zdGFsbFs9UEtHU10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uIFtkZWZhdWx0PXllc10KKyAgLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgIHNwZWVkcyB1cCBvbmUtdGltZSBidWlsZAorICAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nICAgZG8gbm90IHJlamVjdCBzbG93IGRlcGVuZGVuY3kgZXh0cmFjdG9ycworICAtLWRpc2FibGUtbGlidG9vbC1sb2NrICBhdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpCisgIC0tZGlzYWJsZS1ubHMgICAgICAgICAgIGRvIG5vdCB1c2UgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyAgLS1kaXNhYmxlLXJwYXRoICAgICAgICAgZG8gbm90IGhhcmRjb2RlIHJ1bnRpbWUgbGlicmFyeSBwYXRocworICAtLWRpc2FibGUtZ3N0LWRlYnVnICAgICBkaXNhYmxlIGRlYnVnZ2luZyBzdWJzeXN0ZW0KKyAgLS1kaXNhYmxlLXBhcnNlICAgICAgICAgZGlzYWJsZSBjb21tYW5kLWxpbmUgcGFyc2VyCisgIC0tZGlzYWJsZS1vcHRpb24tcGFyc2luZworICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlIG9wdGlvbiBwYXJzaW5nIHdoZW4gZ3N0X2luaXQKKyAgLS1kaXNhYmxlLXRyYWNlICAgICAgICAgZGlzYWJsZSB0cmFjaW5nIHN1YnN5c3RlbQorICAtLWRpc2FibGUtYWxsb2MtdHJhY2UgICBkaXNhYmxlIGFsbG9jYXRpb24gdHJhY2luZworICAtLWRpc2FibGUtcmVnaXN0cnkgICAgICBkaXNhYmxlIHBsdWdpbiByZWdpc3RyeQorICAtLWRpc2FibGUtbmV0ICAgICAgICAgICBkaXNhYmxlIG5ldHdvcmsgZGlzdHJpYnV0aW9uCisgIC0tZGlzYWJsZS1wbHVnaW4gICAgICAgIGRpc2FibGUgcGx1Z2luCisgIC0tZGlzYWJsZS1kZWJ1ZyAgICAgICAgIGRpc2FibGUgYWRkaXRpb24gb2YgLWcgZGVidWdnaW5nIGluZm8KKyAgLS1lbmFibGUtcHJvZmlsaW5nICAgICAgYWRkcyAtcGcgdG8gY29tcGlsZXIgY29tbWFuZGxpbmUsIGZvciBwcm9maWxpbmcKKyAgLS1kaXNhYmxlLXZhbGdyaW5kICAgICAgZGlzYWJsZSBydW4tdGltZSB2YWxncmluZCBkZXRlY3Rpb24KKyAgLS1lbmFibGUtZ2NvdiAgICAgICAgICAgY29tcGlsZSB3aXRoIGNvdmVyYWdlIHByb2ZpbGluZyBpbnN0cnVtZW50YXRpb24gKGdjYworICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5KQorICAtLWRpc2FibGUtZXhhbXBsZXMgICAgICBkaXNhYmxlIGJ1aWxkaW5nIGV4YW1wbGVzCisgIC0tZGlzYWJsZS10ZXN0cyAgICAgICAgIGRpc2FibGUgYnVpbGRpbmcgdGVzdCBhcHBzCisgIC0tZGlzYWJsZS1mYWlsaW5nLXRlc3RzIGRpc2FibGUgYnVpbGRpbmcgdGVzdHMga25vd24gdG8gZmFpbAorICAtLWVuYWJsZS1wb2lzb25pbmcgICAgICBlbmFibGUgcG9pc29uaW5nIG9mIGRlYWxsb2NhdGVkIG9iamVjdHMKKyAgLS1kaXNhYmxlLWxhcmdlZmlsZSAgICAgb21pdCBzdXBwb3J0IGZvciBsYXJnZSBmaWxlcworICAtLWVuYWJsZS1pbnRyb3NwZWN0aW9uPVtuby9hdXRvL3llc10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIGludHJvc3BlY3Rpb24gZm9yIHRoaXMgYnVpbGQKKyAgLS1lbmFibGUtZG9jYm9vayAgICAgICAgdXNlIGRvY2Jvb2sgdG8gYnVpbGQgZG9jdW1lbnRhdGlvbiBbZGVmYXVsdD1ub10KKyAgLS1lbmFibGUtZ3RrLWRvYyAgICAgICAgdXNlIGd0ay1kb2MgdG8gYnVpbGQgZG9jdW1lbnRhdGlvbiBbW2RlZmF1bHQ9bm9dXQorICAtLWVuYWJsZS1nb2JqZWN0LWNhc3QtY2hlY2tzPVtuby9hdXRvL3llc10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIEdPYmplY3QgY2FzdCBjaGVja3MKKyAgLS1lbmFibGUtZ2xpYi1hc3NlcnRzPVtuby9hdXRvL3llc10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIEdMaWIgYXNzZXJ0aW9uCisgIC0tZGlzYWJsZS1jaGVjayAgICAgICAgIGRpc2FibGUgYnVpbGRpbmcgdW5pdCB0ZXN0IGxpYnJhcmllcworICAtLWRpc2FibGUtQnN5bWJvbGljICAgICBhdm9pZCBsaW5raW5nIHdpdGggLUJzeW1ib2xpYworCitPcHRpb25hbCBQYWNrYWdlczoKKyAgLS13aXRoLVBBQ0tBR0VbPUFSR10gICAgdXNlIFBBQ0tBR0UgW0FSRz15ZXNdCisgIC0td2l0aG91dC1QQUNLQUdFICAgICAgIGRvIG5vdCB1c2UgUEFDS0FHRSAoc2FtZSBhcyAtLXdpdGgtUEFDS0FHRT1ubykKKyAgLS13aXRoLXBpYyAgICAgICAgICAgICAgdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgW2RlZmF1bHQ9dXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCisgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKyAgLS13aXRoLWF1dG9jb25mICAgICAgICAgdXNlIGEgZGlmZmVyZW50IGF1dG9jb25mIGZvciByZWdlbmVyYXRpb24gb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZWZpbGVzCisgIC0td2l0aC1hdXRvaGVhZGVyICAgICAgIHVzZSBhIGRpZmZlcmVudCBhdXRvaGVhZGVyIGZvciByZWdlbmVyYXRpb24gb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZWZpbGVzCisgIC0td2l0aC1hdXRvbWFrZSAgICAgICAgIHVzZSBhIGRpZmZlcmVudCBhdXRvbWFrZSBmb3IgcmVnZW5lcmF0aW9uIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VmaWxlcworICAtLXdpdGgtYWNsb2NhbCAgICAgICAgICB1c2UgYSBkaWZmZXJlbnQgYWNsb2NhbCBmb3IgcmVnZW5lcmF0aW9uIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2VmaWxlcworICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgZGVmYXVsdD1ubworICAtLXdpdGgtbGliaWNvbnYtcHJlZml4Wz1ESVJdICBzZWFyY2ggZm9yIGxpYmljb252IGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCisgIC0td2l0aG91dC1saWJpY29udi1wcmVmaXggICAgIGRvbid0IHNlYXJjaCBmb3IgbGliaWNvbnYgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyCisgIC0td2l0aC1saWJpbnRsLXByZWZpeFs9RElSXSAgc2VhcmNoIGZvciBsaWJpbnRsIGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCisgIC0td2l0aG91dC1saWJpbnRsLXByZWZpeCAgICAgZG9uJ3Qgc2VhcmNoIGZvciBsaWJpbnRsIGluIGluY2x1ZGVkaXIgYW5kIGxpYmRpcgorICAtLXdpdGgtcGtnLWNvbmZpZy1wYXRoICBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBwa2ctY29uZmlnKDEpIGRpcnMKKyAgLS13aXRoLXBhY2thZ2UtbmFtZSAgICAgc3BlY2lmeSBwYWNrYWdlIG5hbWUgdG8gdXNlIGluIHBsdWdpbnMKKyAgLS13aXRoLXBhY2thZ2Utb3JpZ2luICAgc3BlY2lmeSBwYWNrYWdlIG9yaWdpbiBVUkwgdG8gdXNlIGluIHBsdWdpbnMKKyAgLS13aXRoLWh0bWwtZGlyPVBBVEggICAgcGF0aCB0byBpbnN0YWxsZWQgZG9jcworICAtLXdpdGgtbWVtb3J5LWFsaWdubWVudCA4LE4sbWFsbG9jLHBhZ2VzaXplIChkZWZhdWx0IGlzIDMyKQorCitTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKKyAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCisgIENGTEFHUyAgICAgIEMgY29tcGlsZXIgZmxhZ3MKKyAgTERGTEFHUyAgICAgbGlua2VyIGZsYWdzLCBlLmcuIC1MPGxpYiBkaXI+IGlmIHlvdSBoYXZlIGxpYnJhcmllcyBpbiBhCisgICAgICAgICAgICAgIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8bGliIGRpcj4KKyAgTElCUyAgICAgICAgbGlicmFyaWVzIHRvIHBhc3MgdG8gdGhlIGxpbmtlciwgZS5nLiAtbDxsaWJyYXJ5PgorICBDUFBGTEFHUyAgICAoT2JqZWN0aXZlKSBDL0MrKyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGUuZy4gLUk8aW5jbHVkZSBkaXI+IGlmCisgICAgICAgICAgICAgIHlvdSBoYXZlIGhlYWRlcnMgaW4gYSBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGluY2x1ZGUgZGlyPgorICBDUFAgICAgICAgICBDIHByZXByb2Nlc3NvcgorICBQS0dfQ09ORklHICBwYXRoIHRvIHBrZy1jb25maWcgdXRpbGl0eQorICBWQUxHUklORF9DRkxBR1MKKyAgICAgICAgICAgICAgQyBjb21waWxlciBmbGFncyBmb3IgVkFMR1JJTkQsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZworICBWQUxHUklORF9MSUJTCisgICAgICAgICAgICAgIGxpbmtlciBmbGFncyBmb3IgVkFMR1JJTkQsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZworICBDQ0FTICAgICAgICBhc3NlbWJsZXIgY29tcGlsZXIgY29tbWFuZCAoZGVmYXVsdHMgdG8gQ0MpCisgIENDQVNGTEFHUyAgIGFzc2VtYmxlciBjb21waWxlciBmbGFncyAoZGVmYXVsdHMgdG8gQ0ZMQUdTKQorICBDWFggICAgICAgICBDKysgY29tcGlsZXIgY29tbWFuZAorICBDWFhGTEFHUyAgICBDKysgY29tcGlsZXIgZmxhZ3MKKyAgQ1hYQ1BQICAgICAgQysrIHByZXByb2Nlc3NvcgorICBHTElCX0NGTEFHUyBDIGNvbXBpbGVyIGZsYWdzIGZvciBHTElCLCBvdmVycmlkaW5nIHBrZy1jb25maWcKKyAgR0xJQl9MSUJTICAgbGlua2VyIGZsYWdzIGZvciBHTElCLCBvdmVycmlkaW5nIHBrZy1jb25maWcKKyAgR0xJQl9PTkxZX0NGTEFHUworICAgICAgICAgICAgICBDIGNvbXBpbGVyIGZsYWdzIGZvciBHTElCX09OTFksIG92ZXJyaWRpbmcgcGtnLWNvbmZpZworICBHTElCX09OTFlfTElCUworICAgICAgICAgICAgICBsaW5rZXIgZmxhZ3MgZm9yIEdMSUJfT05MWSwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCisKK1VzZSB0aGVzZSB2YXJpYWJsZXMgdG8gb3ZlcnJpZGUgdGhlIGNob2ljZXMgbWFkZSBieSBgY29uZmlndXJlJyBvciB0byBoZWxwCitpdCB0byBmaW5kIGxpYnJhcmllcyBhbmQgcHJvZ3JhbXMgd2l0aCBub25zdGFuZGFyZCBuYW1lcy9sb2NhdGlvbnMuCisKK1JlcG9ydCBidWdzIHRvIDxodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1HU3RyZWFtZXI+LgorX0FDRU9GCithY19zdGF0dXM9JD8KK2ZpCisKK2lmIHRlc3QgIiRhY19pbml0X2hlbHAiID0gInJlY3Vyc2l2ZSI7IHRoZW4KKyAgIyBJZiB0aGVyZSBhcmUgc3ViZGlycywgcmVwb3J0IHRoZWlyIHNwZWNpZmljIC0taGVscC4KKyAgZm9yIGFjX2RpciBpbiA6ICRhY19zdWJkaXJzX2FsbDsgZG8gdGVzdCAieCRhY19kaXIiID0geDogJiYgY29udGludWUKKyAgICB0ZXN0IC1kICIkYWNfZGlyIiB8fAorICAgICAgeyBjZCAiJHNyY2RpciIgJiYgYWNfcHdkPWBwd2RgICYmIHNyY2Rpcj0uICYmIHRlc3QgLWQgIiRhY19kaXIiOyB9IHx8CisgICAgICBjb250aW51ZQorICAgIGFjX2J1aWxkZGlyPS4KKworY2FzZSAiJGFjX2RpciIgaW4KKy4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworKikKKyAgYWNfZGlyX3N1ZmZpeD0vYCRhc19lY2hvICIkYWNfZGlyIiB8IHNlZCAnc3xeXC5bXFwvXXx8J2AKKyAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorICBhY190b3BfYnVpbGRkaXJfc3ViPWAkYXNfZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzfC9bXlxcL10qfC8uLnxnO3N8L3x8J2AKKyAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgorICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisgICopICBhY190b3BfYnVpbGRfcHJlZml4PSRhY190b3BfYnVpbGRkaXJfc3ViLyA7OworICBlc2FjIDs7Citlc2FjCithY19hYnNfdG9wX2J1aWxkZGlyPSRhY19wd2QKK2FjX2Fic19idWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKKyMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6CithY190b3BfYnVpbGRkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgKKworY2FzZSAkc3JjZGlyIGluCisgIC4pICAjIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KKyAgICBhY19zcmNkaXI9LgorICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpcl9zdWIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkIDs7CisgIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgbmFtZS4KKyAgICBhY19zcmNkaXI9JHNyY2RpciRhY19kaXJfc3VmZml4OworICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKyAgKikgIyBSZWxhdGl2ZSBuYW1lLgorICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZC8kc3JjZGlyIDs7Citlc2FjCithY19hYnNfc3JjZGlyPSRhY19hYnNfdG9wX3NyY2RpciRhY19kaXJfc3VmZml4CisKKyAgICBjZCAiJGFjX2RpciIgfHwgeyBhY19zdGF0dXM9JD87IGNvbnRpbnVlOyB9CisgICAgIyBDaGVjayBmb3IgZ3Vlc3RlZCBjb25maWd1cmUuCisgICAgaWYgdGVzdCAtZiAiJGFjX3NyY2Rpci9jb25maWd1cmUuZ251IjsgdGhlbgorICAgICAgZWNobyAmJgorICAgICAgJFNIRUxMICIkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUiIC0taGVscD1yZWN1cnNpdmUKKyAgICBlbGlmIHRlc3QgLWYgIiRhY19zcmNkaXIvY29uZmlndXJlIjsgdGhlbgorICAgICAgZWNobyAmJgorICAgICAgJFNIRUxMICIkYWNfc3JjZGlyL2NvbmZpZ3VyZSIgLS1oZWxwPXJlY3Vyc2l2ZQorICAgIGVsc2UKKyAgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG5vIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaXMgaW4gJGFjX2RpciIgPiYyCisgICAgZmkgfHwgYWNfc3RhdHVzPSQ/CisgICAgY2QgIiRhY19wd2QiIHx8IHsgYWNfc3RhdHVzPSQ/OyBicmVhazsgfQorICBkb25lCitmaQorCit0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIiAmJiBleGl0ICRhY19zdGF0dXMKK2lmICRhY19pbml0X3ZlcnNpb247IHRoZW4KKyAgY2F0IDw8XF9BQ0VPRgorR1N0cmVhbWVyIGNvbmZpZ3VyZSAwLjExLjEKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42NworCitDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorX0FDRU9GCisgIGV4aXQKK2ZpCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQXV0b2NvbmYgaW5pdGlhbGl6YXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBhY19mbl9jX3RyeV9jb21waWxlIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gY29tcGlsZSBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jX3RyeV9jb21waWxlICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorICBpZiB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX3JldHZhbD0xCitmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQorICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X2NvbXBpbGUKKworIyBhY19mbl9jX3RyeV9saW5rIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gbGluayBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jX3RyeV9saW5rICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICAgICAgIH07IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX3JldHZhbD0xCitmaQorICAjIERlbGV0ZSB0aGUgSVBBL0lQTyAoSW50ZXIgUHJvY2VkdXJhbCBBbmFseXNpcy9PcHRpbWl6YXRpb24pIGluZm9ybWF0aW9uCisgICMgY3JlYXRlZCBieSB0aGUgUEdJIGNvbXBpbGVyIChjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vKSwgYXMgaXQgd291bGQKKyAgIyBpbnRlcmZlcmUgd2l0aCB0aGUgbmV4dCBsaW5rIGNvbW1hbmQ7IGFsc28gZGVsZXRlIGEgZGlyZWN0b3J5IHRoYXQgaXMKKyAgIyBsZWZ0IGJlaGluZCBieSBBcHBsZSdzIGNvbXBpbGVyLiAgV2UgZG8gdGhpcyBiZWZvcmUgZXhlY3V0aW5nIHRoZSBhY3Rpb25zLgorICBybSAtcmYgY29uZnRlc3QuZFNZTSBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9CisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY190cnlfbGluaworCisjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgTElORU5PIEhFQURFUiBWQVIgSU5DTFVERVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIEhFQURFUiBleGlzdHMgYW5kIGNhbiBiZSBjb21waWxlZCB1c2luZyB0aGUgaW5jbHVkZSBmaWxlcyBpbgorIyBJTkNMVURFUywgc2V0dGluZyB0aGUgY2FjaGUgdmFyaWFibGUgVkFSIGFjY29yZGluZ2x5LgorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgZXZhbCAidGVzdCBcIlwkeyQzK3NldH1cIiIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAorI2luY2x1ZGUgPCQyPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiQzPXllcyIKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9CisKK30gIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlCisKKyMgYWNfZm5fY190cnlfY3BwIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBwcmVwcm9jZXNzIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2NfdHJ5X2NwcCAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIGlmIHsgeyBhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gPiBjb25mdGVzdC5pICYmIHsKKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICAgIGFjX3JldHZhbD0xCitmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQorICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X2NwcAorCisjIGFjX2ZuX2NfdHJ5X3J1biBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gbGluayBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuIEFzc3VtZXMKKyMgdGhhdCBleGVjdXRhYmxlcyAqY2FuKiBiZSBydW4uCithY19mbl9jX3RyeV9ydW4gKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgeyBjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorICAgICAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICAgICAgYWNfcmV0dmFsPSRhY19zdGF0dXMKK2ZpCisgIHJtIC1yZiBjb25mdGVzdC5kU1lNIGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9ydW4KKworIyBhY19mbl9jX2NoZWNrX2Z1bmMgTElORU5PIEZVTkMgVkFSCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBGVU5DIGV4aXN0cywgc2V0dGluZyB0aGUgY2FjaGUgdmFyaWFibGUgVkFSIGFjY29yZGluZ2x5CithY19mbl9jX2NoZWNrX2Z1bmMgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgInRlc3QgXCJcJHskMytzZXR9XCIiID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworLyogRGVmaW5lICQyIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJDIuCisgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKyNkZWZpbmUgJDIgaW5ub2N1b3VzXyQyCisKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICQyICgpOyBiZWxvdy4KKyAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKworI3VuZGVmICQyCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgJDIgKCk7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIF9fc3R1Yl8kMiB8fCBkZWZpbmVkIF9fc3R1Yl9fXyQyCitjaG9rZSBtZQorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuICQyICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiQzPXllcyIKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKworfSAjIGFjX2ZuX2NfY2hlY2tfZnVuYworCisjIGFjX2ZuX2NfY2hlY2tfZGVjbCBMSU5FTk8gU1lNQk9MIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBTWU1CT0wgaXMgZGVjbGFyZWQgaW4gSU5DTFVERVMsIHNldHRpbmcgY2FjaGUgdmFyaWFibGUgVkFSCisjIGFjY29yZGluZ2x5LgorYWNfZm5fY19jaGVja19kZWNsICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgYXNfZGVjbF9uYW1lPWBlY2hvICQyfHNlZCAncy8gKiguKi8vJ2AKKyAgYXNfZGVjbF91c2U9YGVjaG8gJDJ8c2VkIC1lICdzLygvKCgvJyAtZSAncy8pLykgMCYvJyAtZSAncy8sLykgMCYgKC9nJ2AKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRhc19kZWNsX25hbWUgaXMgZGVjbGFyZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkYXNfZGVjbF9uYW1lIGlzIGRlY2xhcmVkLi4uICIgPiY2OyB9CitpZiBldmFsICJ0ZXN0IFwiXCR7JDMrc2V0fVwiIiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgJGFzX2RlY2xfbmFtZQorI2lmZGVmIF9fY3BsdXNwbHVzCisgICh2b2lkKSAkYXNfZGVjbF91c2U7CisjZWxzZQorICAodm9pZCkgJGFzX2RlY2xfbmFtZTsKKyNlbmRpZgorI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkMz15ZXMiCitlbHNlCisgIGV2YWwgIiQzPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQorCit9ICMgYWNfZm5fY19jaGVja19kZWNsCisKKyMgYWNfZm5fY3h4X3RyeV9jb21waWxlIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBjb21waWxlIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2N4eF90cnlfY29tcGlsZSAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX3JldHZhbD0xCitmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQorICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2N4eF90cnlfY29tcGlsZQorCisjIGFjX2ZuX2N4eF90cnlfY3BwIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIHByZXByb2Nlc3MgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY3h4X3RyeV9jcHAgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiB7IHsgYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ID4gY29uZnRlc3QuaSAmJiB7CisJIHRlc3QgLXogIiRhY19jeHhfcHJlcHJvY193YXJuX2ZsYWckYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICAgYWNfcmV0dmFsPTEKK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9CisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY3h4X3RyeV9jcHAKKworIyBhY19mbl9jeHhfdHJ5X2xpbmsgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGxpbmsgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY3h4X3RyeV9saW5rICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7CisJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0CisgICAgICAgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfcmV0dmFsPTEKK2ZpCisgICMgRGVsZXRlIHRoZSBJUEEvSVBPIChJbnRlciBQcm9jZWR1cmFsIEFuYWx5c2lzL09wdGltaXphdGlvbikgaW5mb3JtYXRpb24KKyAgIyBjcmVhdGVkIGJ5IHRoZSBQR0kgY29tcGlsZXIgKGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28pLCBhcyBpdCB3b3VsZAorICAjIGludGVyZmVyZSB3aXRoIHRoZSBuZXh0IGxpbmsgY29tbWFuZDsgYWxzbyBkZWxldGUgYSBkaXJlY3RvcnkgdGhhdCBpcworICAjIGxlZnQgYmVoaW5kIGJ5IEFwcGxlJ3MgY29tcGlsZXIuICBXZSBkbyB0aGlzIGJlZm9yZSBleGVjdXRpbmcgdGhlIGFjdGlvbnMuCisgIHJtIC1yZiBjb25mdGVzdC5kU1lNIGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jeHhfdHJ5X2xpbmsKKworIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsIExJTkVOTyBIRUFERVIgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBIRUFERVIgZXhpc3RzLCBnaXZpbmcgYSB3YXJuaW5nIGlmIGl0IGNhbm5vdCBiZSBjb21waWxlZCB1c2luZworIyB0aGUgaW5jbHVkZSBmaWxlcyBpbiBJTkNMVURFUyBhbmQgc2V0dGluZyB0aGUgY2FjaGUgdmFyaWFibGUgVkFSCisjIGFjY29yZGluZ2x5LgorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIGlmIGV2YWwgInRlc3QgXCJcJHskMytzZXR9XCIiID0gc2V0OyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiBldmFsICJ0ZXN0IFwiXCR7JDMrc2V0fVwiIiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CitlbHNlCisgICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyAkMiB1c2FiaWxpdHkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgJDIgdXNhYmlsaXR5Li4uICIgPiY2OyB9CitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAorI2luY2x1ZGUgPCQyPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKK2Vsc2UKKyAgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CiskYXNfZWNobyAiJGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CisKKyMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyAkMiBwcmVzZW5jZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyAkMiBwcmVzZW5jZS4uLiAiID4mNjsgfQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPCQyPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCitlbHNlCisgIGFjX2hlYWRlcl9wcmVwcm9jPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CiskYXNfZWNobyAiJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKworIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CitjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICMoKAorICB5ZXM6bm86ICkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisgICAgOzsKKyAgbm86eWVzOiogKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKCAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBSZXBvcnQgdGhpcyB0byBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1HU3RyZWFtZXIgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIyIKKyAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorICAgIDs7Citlc2FjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgZXZhbCAidGVzdCBcIlwkeyQzK3NldH1cIiIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBldmFsICIkMz1cJGFjX2hlYWRlcl9jb21waWxlciIKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9CisKK30gIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsCisKKyMgYWNfZm5fY19jaGVja190eXBlIExJTkVOTyBUWVBFIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHdoZXRoZXIgVFlQRSBleGlzdHMgYWZ0ZXIgaGF2aW5nIGluY2x1ZGVkIElOQ0xVREVTLCBzZXR0aW5nIGNhY2hlCisjIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseS4KK2FjX2ZuX2NfY2hlY2tfdHlwZSAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgZXZhbCAidGVzdCBcIlwkeyQzK3NldH1cIiIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBldmFsICIkMz1ubyIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworaWYgKHNpemVvZiAoJDIpKQorCSByZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitpZiAoc2l6ZW9mICgoJDIpKSkKKwkgICAgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBldmFsICIkMz15ZXMiCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9CisKK30gIyBhY19mbl9jX2NoZWNrX3R5cGUKKworIyBhY19mbl9jX2NvbXB1dGVfaW50IExJTkVOTyBFWFBSIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcmllcyB0byBmaW5kIHRoZSBjb21waWxlLXRpbWUgdmFsdWUgb2YgRVhQUiBpbiBhIHByb2dyYW0gdGhhdCBpbmNsdWRlcworIyBJTkNMVURFUywgc2V0dGluZyBWQVIgYWNjb3JkaW5nbHkuIFJldHVybnMgd2hldGhlciB0aGUgdmFsdWUgY291bGQgYmUKKyMgY29tcHV0ZWQKK2FjX2ZuX2NfY29tcHV0ZV9pbnQgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAgICMgRGVwZW5kaW5nIHVwb24gdGhlIHNpemUsIGNvbXB1dGUgdGhlIGxvIGFuZCBoaSBib3VuZHMuCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpID49IDApXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfbG89MCBhY19taWQ9MAorICB3aGlsZSA6OyBkbworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkMikgPD0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oaT0kYWNfbWlkOyBicmVhaworZWxzZQorICBhc19mbl9hcml0aCAkYWNfbWlkICsgMSAmJiBhY19sbz0kYXNfdmFsCisJCQlpZiB0ZXN0ICRhY19sbyAtbGUgJGFjX21pZDsgdGhlbgorCQkJICBhY19sbz0gYWNfaGk9CisJCQkgIGJyZWFrCisJCQlmaQorCQkJYXNfZm5fYXJpdGggMiAnKicgJGFjX21pZCArIDEgJiYgYWNfbWlkPSRhc192YWwKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpIDwgMCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oaT0tMSBhY19taWQ9LTEKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpID49ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfbG89JGFjX21pZDsgYnJlYWsKK2Vsc2UKKyAgYXNfZm5fYXJpdGggJygnICRhY19taWQgJyknIC0gMSAmJiBhY19oaT0kYXNfdmFsCisJCQlpZiB0ZXN0ICRhY19taWQgLWxlICRhY19oaTsgdGhlbgorCQkJICBhY19sbz0gYWNfaGk9CisJCQkgIGJyZWFrCisJCQlmaQorCQkJYXNfZm5fYXJpdGggMiAnKicgJGFjX21pZCAmJiBhY19taWQ9JGFzX3ZhbAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGFjX2xvPSBhY19oaT0KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyMgQmluYXJ5IHNlYXJjaCBiZXR3ZWVuIGxvIGFuZCBoaSBib3VuZHMuCit3aGlsZSB0ZXN0ICJ4JGFjX2xvIiAhPSAieCRhY19oaSI7IGRvCisgIGFzX2ZuX2FyaXRoICcoJyAkYWNfaGkgLSAkYWNfbG8gJyknIC8gMiArICRhY19sbyAmJiBhY19taWQ9JGFzX3ZhbAorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpIDw9ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfaGk9JGFjX21pZAorZWxzZQorICBhc19mbl9hcml0aCAnKCcgJGFjX21pZCAnKScgKyAxICYmIGFjX2xvPSRhc192YWwKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2RvbmUKK2Nhc2UgJGFjX2xvIGluICMoKAorPyopIGV2YWwgIiQzPVwkYWNfbG8iOyBhY19yZXR2YWw9MCA7OworJycpIGFjX3JldHZhbD0xIDs7Citlc2FjCisgIGVsc2UKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAorc3RhdGljIGxvbmcgaW50IGxvbmd2YWwgKCkgeyByZXR1cm4gJDI7IH0KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGludCB1bG9uZ3ZhbCAoKSB7IHJldHVybiAkMjsgfQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CitpbnQKK21haW4gKCkKK3sKKworICBGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC52YWwiLCAidyIpOworICBpZiAoISBmKQorICAgIHJldHVybiAxOworICBpZiAoKCQyKSA8IDApCisgICAgeworICAgICAgbG9uZyBpbnQgaSA9IGxvbmd2YWwgKCk7CisgICAgICBpZiAoaSAhPSAoJDIpKQorCXJldHVybiAxOworICAgICAgZnByaW50ZiAoZiwgIiVsZCIsIGkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgaW50IGkgPSB1bG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgkMikpCisJcmV0dXJuIDE7CisgICAgICBmcHJpbnRmIChmLCAiJWx1IiwgaSk7CisgICAgfQorICAvKiBEbyBub3Qgb3V0cHV0IGEgdHJhaWxpbmcgbmV3bGluZSwgYXMgdGhpcyBjYXVzZXMgXHJcbiBjb25mdXNpb24KKyAgICAgb24gc29tZSBwbGF0Zm9ybXMuICAqLworICByZXR1cm4gZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDA7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGVjaG8gPj5jb25mdGVzdC52YWw7IHJlYWQgJDMgPGNvbmZ0ZXN0LnZhbDsgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgYWNfcmV0dmFsPTEKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb25mdGVzdC52YWwKKworICBmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQorICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfY29tcHV0ZV9pbnQKK2NhdCA+Y29uZmlnLmxvZyA8PF9BQ0VPRgorVGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21waWxlcnMgd2hpbGUKK3J1bm5pbmcgY29uZmlndXJlLCB0byBhaWQgZGVidWdnaW5nIGlmIGNvbmZpZ3VyZSBtYWtlcyBhIG1pc3Rha2UuCisKK0l0IHdhcyBjcmVhdGVkIGJ5IEdTdHJlYW1lciAkYXNfbWUgMC4xMS4xLCB3aGljaCB3YXMKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42Ny4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworCisgICQgJDAgJEAKKworX0FDRU9GCitleGVjIDU+PmNvbmZpZy5sb2cKK3sKK2NhdCA8PF9BU1VOQU1FCisjIyAtLS0tLS0tLS0gIyMKKyMjIFBsYXRmb3JtLiAjIworIyMgLS0tLS0tLS0tICMjCisKK2hvc3RuYW1lID0gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCit1bmFtZSAtbSA9IGAodW5hbWUgLW0pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1yID0gYCh1bmFtZSAtcikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXMgPSBgKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtdiA9IGAodW5hbWUgLXYpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKworL3Vzci9iaW4vdW5hbWUgLXAgPSBgKC91c3IvYmluL3VuYW1lIC1wKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisvYmluL3VuYW1lIC1YICAgICA9IGAoL2Jpbi91bmFtZSAtWCkgMj4vZGV2L251bGwgICAgIHx8IGVjaG8gdW5rbm93bmAKKworL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbCAgICAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vYXJjaCAtayAgICAgICA9IGAoL3Vzci9iaW4vYXJjaCAtaykgMj4vZGV2L251bGwgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyA9IGAoL3Vzci9jb252ZXgvZ2V0c3lzaW5mbykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vaG9zdGluZm8gICAgICA9IGAoL3Vzci9iaW4vaG9zdGluZm8pIDI+L2Rldi9udWxsICAgICAgfHwgZWNobyB1bmtub3duYAorL2Jpbi9tYWNoaW5lICAgICAgICAgICA9IGAoL2Jpbi9tYWNoaW5lKSAyPi9kZXYvbnVsbCAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vb3NsZXZlbCAgICAgICA9IGAoL3Vzci9iaW4vb3NsZXZlbCkgMj4vZGV2L251bGwgICAgICAgfHwgZWNobyB1bmtub3duYAorL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGwgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorCitfQVNVTkFNRQorCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgJGFzX2VjaG8gIlBBVEg6ICRhc19kaXIiCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworfSA+JjUKKworY2F0ID4mNSA8PF9BQ0VPRgorCisKKyMjIC0tLS0tLS0tLS0tICMjCisjIyBDb3JlIHRlc3RzLiAjIworIyMgLS0tLS0tLS0tLS0gIyMKKworX0FDRU9GCisKKworIyBLZWVwIGEgdHJhY2Ugb2YgdGhlIGNvbW1hbmQgbGluZS4KKyMgU3RyaXAgb3V0IC0tbm8tY3JlYXRlIGFuZCAtLW5vLXJlY3Vyc2lvbiBzbyB0aGV5IGRvIG5vdCBwaWxlIHVwLgorIyBTdHJpcCBvdXQgLS1zaWxlbnQgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHJlY29yZCBpdCBmb3IgZnV0dXJlIHJ1bnMuCisjIEFsc28gcXVvdGUgYW55IGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhLWNoYXJhY3RlcnMuCisjIE1ha2UgdHdvIHBhc3NlcyB0byBhbGxvdyBmb3IgcHJvcGVyIGR1cGxpY2F0ZS1hcmd1bWVudCBzdXBwcmVzc2lvbi4KK2FjX2NvbmZpZ3VyZV9hcmdzPQorYWNfY29uZmlndXJlX2FyZ3MwPQorYWNfY29uZmlndXJlX2FyZ3MxPQorYWNfbXVzdF9rZWVwX25leHQ9ZmFsc2UKK2ZvciBhY19wYXNzIGluIDEgMgorZG8KKyAgZm9yIGFjX2FyZworICBkbworICAgIGNhc2UgJGFjX2FyZyBpbgorICAgIC1uby1jcmVhdGUgfCAtLW5vLWMqIHwgLW4gfCAtbm8tcmVjdXJzaW9uIHwgLS1uby1yKikgY29udGludWUgOzsKKyAgICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorICAgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQorICAgICAgY29udGludWUgOzsKKyAgICAqXCcqKQorICAgICAgYWNfYXJnPWAkYXNfZWNobyAiJGFjX2FyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICBlc2FjCisgICAgY2FzZSAkYWNfcGFzcyBpbgorICAgIDEpIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJnczAgIiAnJGFjX2FyZyciIDs7CisgICAgMikKKyAgICAgIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJnczEgIiAnJGFjX2FyZyciCisgICAgICBpZiB0ZXN0ICRhY19tdXN0X2tlZXBfbmV4dCA9IHRydWU7IHRoZW4KKwlhY19tdXN0X2tlZXBfbmV4dD1mYWxzZSAjIEdvdCB2YWx1ZSwgYmFjayB0byBub3JtYWwuCisgICAgICBlbHNlCisJY2FzZSAkYWNfYXJnIGluCisJICAqPSogfCAtLWNvbmZpZy1jYWNoZSB8IC1DIHwgLWRpc2FibGUtKiB8IC0tZGlzYWJsZS0qIFwKKwkgIHwgLWVuYWJsZS0qIHwgLS1lbmFibGUtKiB8IC1nYXMgfCAtLWcqIHwgLW5mcCB8IC0tbmYqIFwKKwkgIHwgLXEgfCAtcXVpZXQgfCAtLXEqIHwgLXNpbGVudCB8IC0tc2lsKiB8IC12IHwgLXZlcmIqIFwKKwkgIHwgLXdpdGgtKiB8IC0td2l0aC0qIHwgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qIHwgLS14KQorCSAgICBjYXNlICIkYWNfY29uZmlndXJlX2FyZ3MwICIgaW4KKwkgICAgICAiJGFjX2NvbmZpZ3VyZV9hcmdzMSIqIiAnJGFjX2FyZycgIiogKSBjb250aW51ZSA7OworCSAgICBlc2FjCisJICAgIDs7CisJICAtKiApIGFjX211c3Rfa2VlcF9uZXh0PXRydWUgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzICIgJyRhY19hcmcnIgorICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKK2RvbmUKK3sgYWNfY29uZmlndXJlX2FyZ3MwPTsgdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MwO30KK3sgYWNfY29uZmlndXJlX2FyZ3MxPTsgdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MxO30KKworIyBXaGVuIGludGVycnVwdGVkIG9yIGV4aXQnZCwgY2xlYW51cCB0ZW1wb3JhcnkgZmlsZXMsIGFuZCBjb21wbGV0ZQorIyBjb25maWcubG9nLiAgV2UgcmVtb3ZlIGNvbW1lbnRzIGJlY2F1c2UgYW55d2F5IHRoZSBxdW90ZXMgaW4gdGhlcmUKKyMgd291bGQgY2F1c2UgcHJvYmxlbXMgb3IgbG9vayB1Z2x5LgorIyBXQVJOSU5HOiBVc2UgJ1wnJyB0byByZXByZXNlbnQgYW4gYXBvc3Ryb3BoZSB3aXRoaW4gdGhlIHRyYXAuCisjIFdBUk5JTkc6IERvIG5vdCBzdGFydCB0aGUgdHJhcCBjb2RlIHdpdGggYSBuZXdsaW5lLCBkdWUgdG8gYSBGcmVlQlNEIDQuMCBidWcuCit0cmFwICdleGl0X3N0YXR1cz0kPworICAjIFNhdmUgaW50byBjb25maWcubG9nIHNvbWUgaW5mb3JtYXRpb24gdGhhdCBtaWdodCBoZWxwIGluIGRlYnVnZ2luZy4KKyAgeworICAgIGVjaG8KKworICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tICMjCisjIyBDYWNoZSB2YXJpYWJsZXMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tICMjIgorICAgIGVjaG8KKyAgICAjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAorKAorICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdcJydzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ1wnJ2A7IGRvCisgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgY2FzZSAkYWNfdmFsIGluICMoCisgICAgKiR7YXNfbmx9KikKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCisgICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAorICAgICAgKikgeyBldmFsICRhY192YXI9OyB1bnNldCAkYWNfdmFyO30gOzsKKyAgICAgIGVzYWMgOzsKKyAgICBlc2FjCisgIGRvbmUKKyAgKHNldCkgMj4mMSB8CisgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPSdcJycgJ1wnJzsgc2V0KSAyPiYxYCBpbiAjKAorICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKKyAgICAgIHNlZCAtbiBcCisJInMvJ1wnJy8nXCcnXFxcXCdcJycnXCcnL2c7CisJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcJydcXDInXCcnL3AiCisgICAgICA7OyAjKAorICAgICopCisgICAgICBzZWQgLW4gIi9eW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qPS9wIgorICAgICAgOzsKKyAgICBlc2FjIHwKKyAgICBzb3J0CispCisgICAgZWNobworCisgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBPdXRwdXQgdmFyaWFibGVzLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMiCisgICAgZWNobworICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X3ZhcnMKKyAgICBkbworICAgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgICBjYXNlICRhY192YWwgaW4KKyAgICAgICpcJ1wnJyopIGFjX3ZhbD1gJGFzX2VjaG8gIiRhY192YWwiIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKKyAgICAgIGVzYWMKKyAgICAgICRhc19lY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKKyAgICBkb25lIHwgc29ydAorICAgIGVjaG8KKworICAgIGlmIHRlc3QgLW4gIiRhY19zdWJzdF9maWxlcyI7IHRoZW4KKyAgICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBGaWxlIHN1YnN0aXR1dGlvbnMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjIgorICAgICAgZWNobworICAgICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfZmlsZXMKKyAgICAgIGRvCisJZXZhbCBhY192YWw9XCQkYWNfdmFyCisJY2FzZSAkYWNfdmFsIGluCisJKlwnXCcnKikgYWNfdmFsPWAkYXNfZWNobyAiJGFjX3ZhbCIgfCBzZWQgInMvJ1wnJy8nXCcnXFxcXFxcXFwnXCcnJ1wnJy9nImA7OworCWVzYWMKKwkkYXNfZWNobyAiJGFjX3Zhcj0nXCcnJGFjX3ZhbCdcJyciCisgICAgICBkb25lIHwgc29ydAorICAgICAgZWNobworICAgIGZpCisKKyAgICBpZiB0ZXN0IC1zIGNvbmZkZWZzLmg7IHRoZW4KKyAgICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLSAjIworIyMgY29uZmRlZnMuaC4gIyMKKyMjIC0tLS0tLS0tLS0tICMjIgorICAgICAgZWNobworICAgICAgY2F0IGNvbmZkZWZzLmgKKyAgICAgIGVjaG8KKyAgICBmaQorICAgIHRlc3QgIiRhY19zaWduYWwiICE9IDAgJiYKKyAgICAgICRhc19lY2hvICIkYXNfbWU6IGNhdWdodCBzaWduYWwgJGFjX3NpZ25hbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiBleGl0ICRleGl0X3N0YXR1cyIKKyAgfSA+JjUKKyAgcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qICYmCisgICAgcm0gLWYgLXIgY29uZnRlc3QqIGNvbmZkZWZzKiBjb25mJCQqICRhY19jbGVhbl9maWxlcyAmJgorICAgIGV4aXQgJGV4aXRfc3RhdHVzCisnIDAKK2ZvciBhY19zaWduYWwgaW4gMSAyIDEzIDE1OyBkbworICB0cmFwICdhY19zaWduYWw9JyRhY19zaWduYWwnOyBhc19mbl9leGl0IDEnICRhY19zaWduYWwKK2RvbmUKK2FjX3NpZ25hbD0wCisKKyMgY29uZmRlZnMuaCBhdm9pZHMgT1MgY29tbWFuZCBsaW5lIGxlbmd0aCBsaW1pdHMgdGhhdCBERUZTIGNhbiBleGNlZWQuCitybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMuaAorCiskYXNfZWNobyAiLyogY29uZmRlZnMuaCAqLyIgPiBjb25mZGVmcy5oCisKKyMgUHJlZGVmaW5lZCBwcmVwcm9jZXNzb3IgdmFyaWFibGVzLgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfTkFNRSAiJFBBQ0tBR0VfTkFNRSIKK19BQ0VPRgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiJFBBQ0tBR0VfVEFSTkFNRSIKK19BQ0VPRgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiJFBBQ0tBR0VfVkVSU0lPTiIKK19BQ0VPRgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICIkUEFDS0FHRV9TVFJJTkciCitfQUNFT0YKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiJFBBQ0tBR0VfQlVHUkVQT1JUIgorX0FDRU9GCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9VUkwgIiRQQUNLQUdFX1VSTCIKK19BQ0VPRgorCisKKyMgTGV0IHRoZSBzaXRlIGZpbGUgc2VsZWN0IGFuIGFsdGVybmF0ZSBjYWNoZSBmaWxlIGlmIGl0IHdhbnRzIHRvLgorIyBQcmVmZXIgYW4gZXhwbGljaXRseSBzZWxlY3RlZCBmaWxlIHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgb25lcy4KK2FjX3NpdGVfZmlsZTE9Tk9ORQorYWNfc2l0ZV9maWxlMj1OT05FCitpZiB0ZXN0IC1uICIkQ09ORklHX1NJVEUiOyB0aGVuCisgICMgV2UgZG8gbm90IHdhbnQgYSBQQVRIIHNlYXJjaCBmb3IgY29uZmlnLnNpdGUuCisgIGNhc2UgJENPTkZJR19TSVRFIGluICMoKAorICAgIC0qKSAgYWNfc2l0ZV9maWxlMT0uLyRDT05GSUdfU0lURTs7CisgICAgKi8qKSBhY19zaXRlX2ZpbGUxPSRDT05GSUdfU0lURTs7CisgICAgKikgICBhY19zaXRlX2ZpbGUxPS4vJENPTkZJR19TSVRFOzsKKyAgZXNhYworZWxpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKyAgYWNfc2l0ZV9maWxlMT0kcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlCisgIGFjX3NpdGVfZmlsZTI9JHByZWZpeC9ldGMvY29uZmlnLnNpdGUKK2Vsc2UKKyAgYWNfc2l0ZV9maWxlMT0kYWNfZGVmYXVsdF9wcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKKyAgYWNfc2l0ZV9maWxlMj0kYWNfZGVmYXVsdF9wcmVmaXgvZXRjL2NvbmZpZy5zaXRlCitmaQorZm9yIGFjX3NpdGVfZmlsZSBpbiAiJGFjX3NpdGVfZmlsZTEiICIkYWNfc2l0ZV9maWxlMiIKK2RvCisgIHRlc3QgIngkYWNfc2l0ZV9maWxlIiA9IHhOT05FICYmIGNvbnRpbnVlCisgIGlmIHRlc3QgL2Rldi9udWxsICE9ICIkYWNfc2l0ZV9maWxlIiAmJiB0ZXN0IC1yICIkYWNfc2l0ZV9maWxlIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY2O30KKyAgICBzZWQgJ3MvXi98IC8nICIkYWNfc2l0ZV9maWxlIiA+JjUKKyAgICAuICIkYWNfc2l0ZV9maWxlIiBcCisgICAgICB8fCB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJmYWlsZWQgdG8gbG9hZCBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNSA7IH0KKyAgZmkKK2RvbmUKKworaWYgdGVzdCAtciAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICMgU29tZSB2ZXJzaW9ucyBvZiBiYXNoIHdpbGwgZmFpbCB0byBzb3VyY2UgL2Rldi9udWxsIChzcGVjaWFsIGZpbGVzCisgICMgYWN0dWFsbHkpLCBzbyB3ZSBhdm9pZCBkb2luZyB0aGF0LiAgREpHUFAgZW11bGF0ZXMgaXQgYXMgYSByZWd1bGFyIGZpbGUuCisgIGlmIHRlc3QgL2Rldi9udWxsICE9ICIkY2FjaGVfZmlsZSIgJiYgdGVzdCAtZiAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgICAgY2FzZSAkY2FjaGVfZmlsZSBpbgorICAgICAgW1xcL10qIHwgPzpbXFwvXSogKSAuICIkY2FjaGVfZmlsZSI7OworICAgICAgKikgICAgICAgICAgICAgICAgICAgICAgLiAiLi8kY2FjaGVfZmlsZSI7OworICAgIGVzYWMKKyAgZmkKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgPiRjYWNoZV9maWxlCitmaQorCitndF9uZWVkcz0iJGd0X25lZWRzICIKK2FzX2ZuX2FwcGVuZCBhY19oZWFkZXJfbGlzdCAiIHN0ZGxpYi5oIgorYXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgdW5pc3RkLmgiCithc19mbl9hcHBlbmQgYWNfaGVhZGVyX2xpc3QgIiBzeXMvcGFyYW0uaCIKKyMgQ2hlY2sgdGhhdCB0aGUgcHJlY2lvdXMgdmFyaWFibGVzIHNhdmVkIGluIHRoZSBjYWNoZSBoYXZlIGtlcHQgdGhlIHNhbWUKKyMgdmFsdWUuCithY19jYWNoZV9jb3JydXB0ZWQ9ZmFsc2UKK2ZvciBhY192YXIgaW4gJGFjX3ByZWNpb3VzX3ZhcnM7IGRvCisgIGV2YWwgYWNfb2xkX3NldD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0CisgIGV2YWwgYWNfbmV3X3NldD1cJGFjX2Vudl8ke2FjX3Zhcn1fc2V0CisgIGV2YWwgYWNfb2xkX3ZhbD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fdmFsdWUKKyAgZXZhbCBhY19uZXdfdmFsPVwkYWNfZW52XyR7YWNfdmFyfV92YWx1ZQorICBjYXNlICRhY19vbGRfc2V0LCRhY19uZXdfc2V0IGluCisgICAgc2V0LCkKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KKyAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CisgICAgLHNldCkKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQorICAgICAgYWNfY2FjaGVfY29ycnVwdGVkPTogOzsKKyAgICAsKTs7CisgICAgKikKKyAgICAgIGlmIHRlc3QgIngkYWNfb2xkX3ZhbCIgIT0gIngkYWNfbmV3X3ZhbCI7IHRoZW4KKwkjIGRpZmZlcmVuY2VzIGluIHdoaXRlc3BhY2UgZG8gbm90IGxlYWQgdG8gZmFpbHVyZS4KKwlhY19vbGRfdmFsX3c9YGVjaG8geCAkYWNfb2xkX3ZhbGAKKwlhY19uZXdfdmFsX3c9YGVjaG8geCAkYWNfbmV3X3ZhbGAKKwlpZiB0ZXN0ICIkYWNfb2xkX3ZhbF93IiAhPSAiJGFjX25ld192YWxfdyI7IHRoZW4KKwkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9CisJICBhY19jYWNoZV9jb3JydXB0ZWQ9OgorCWVsc2UKKwkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogd2FybmluZzogaWdub3Jpbmcgd2hpdGVzcGFjZSBjaGFuZ2VzIGluIFxgJGFjX3Zhcicgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogd2FybmluZzogaWdub3Jpbmcgd2hpdGVzcGFjZSBjaGFuZ2VzIGluIFxgJGFjX3Zhcicgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9CisJICBldmFsICRhY192YXI9XCRhY19vbGRfdmFsCisJZmkKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICAgZm9ybWVyIHZhbHVlOiAgXGAkYWNfb2xkX3ZhbCciID4mNQorJGFzX2VjaG8gIiRhc19tZTogICBmb3JtZXIgdmFsdWU6ICBcYCRhY19vbGRfdmFsJyIgPiYyO30KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICAgY3VycmVudCB2YWx1ZTogXGAkYWNfbmV3X3ZhbCciID4mNQorJGFzX2VjaG8gIiRhc19tZTogICBjdXJyZW50IHZhbHVlOiBcYCRhY19uZXdfdmFsJyIgPiYyO30KKyAgICAgIGZpOzsKKyAgZXNhYworICAjIFBhc3MgcHJlY2lvdXMgdmFyaWFibGVzIHRvIGNvbmZpZy5zdGF0dXMuCisgIGlmIHRlc3QgIiRhY19uZXdfc2V0IiA9IHNldDsgdGhlbgorICAgIGNhc2UgJGFjX25ld192YWwgaW4KKyAgICAqXCcqKSBhY19hcmc9JGFjX3Zhcj1gJGFzX2VjaG8gIiRhY19uZXdfdmFsIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgICopIGFjX2FyZz0kYWNfdmFyPSRhY19uZXdfdmFsIDs7CisgICAgZXNhYworICAgIGNhc2UgIiAkYWNfY29uZmlndXJlX2FyZ3MgIiBpbgorICAgICAgKiIgJyRhY19hcmcnICIqKSA7OyAjIEF2b2lkIGR1cHMuICBVc2Ugb2YgcXVvdGVzIGVuc3VyZXMgYWNjdXJhY3kuCisgICAgICAqKSBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MgIiAnJGFjX2FyZyciIDs7CisgICAgZXNhYworICBmaQorZG9uZQoraWYgJGFjX2NhY2hlX2NvcnJ1cHRlZDsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjI7fQorICBhc19mbl9lcnJvciAkPyAicnVuIFxgbWFrZSBkaXN0Y2xlYW4nIGFuZC9vciBcYHJtICRjYWNoZV9maWxlJyBhbmQgc3RhcnQgb3ZlciIgIiRMSU5FTk8iIDUKK2ZpCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTWFpbiBib2R5IG9mIHNjcmlwdC4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCisKKworCisKK2FtX19hcGlfdmVyc2lvbj0nMS4xMScKKworYWNfYXV4X2Rpcj0KK2ZvciBhY19kaXIgaW4gIiRzcmNkaXIiICIkc3JjZGlyLy4uIiAiJHNyY2Rpci8uLi8uLiI7IGRvCisgIGlmIHRlc3QgLWYgIiRhY19kaXIvaW5zdGFsbC1zaCI7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLXNoIC1jIgorICAgIGJyZWFrCisgIGVsaWYgdGVzdCAtZiAiJGFjX2Rpci9pbnN0YWxsLnNoIjsgdGhlbgorICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwuc2ggLWMiCisgICAgYnJlYWsKKyAgZWxpZiB0ZXN0IC1mICIkYWNfZGlyL3NodG9vbCI7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9zaHRvb2wgaW5zdGFsbCAtYyIKKyAgICBicmVhaworICBmaQorZG9uZQoraWYgdGVzdCAteiAiJGFjX2F1eF9kaXIiOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgZmluZCBpbnN0YWxsLXNoLCBpbnN0YWxsLnNoLCBvciBzaHRvb2wgaW4gXCIkc3JjZGlyXCIgXCIkc3JjZGlyLy4uXCIgXCIkc3JjZGlyLy4uLy4uXCIiICIkTElORU5PIiA1CitmaQorCisjIFRoZXNlIHRocmVlIHZhcmlhYmxlcyBhcmUgdW5kb2N1bWVudGVkIGFuZCB1bnN1cHBvcnRlZCwKKyMgYW5kIGFyZSBpbnRlbmRlZCB0byBiZSB3aXRoZHJhd24gaW4gYSBmdXR1cmUgQXV0b2NvbmYgcmVsZWFzZS4KKyMgVGhleSBjYW4gY2F1c2Ugc2VyaW91cyBwcm9ibGVtcyBpZiBhIGJ1aWxkZXIncyBzb3VyY2UgdHJlZSBpcyBpbiBhIGRpcmVjdG9yeQorIyB3aG9zZSBmdWxsIG5hbWUgY29udGFpbnMgdW51c3VhbCBjaGFyYWN0ZXJzLgorYWNfY29uZmlnX2d1ZXNzPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorYWNfY29uZmlnX3N1Yj0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCithY19jb25maWd1cmU9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWd1cmUiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCisKKworIyBGaW5kIGEgZ29vZCBpbnN0YWxsIHByb2dyYW0uICBXZSBwcmVmZXIgYSBDIHByb2dyYW0gKGZhc3RlciksCisjIHNvIG9uZSBzY3JpcHQgaXMgYXMgZ29vZCBhcyBhbm90aGVyLiAgQnV0IGF2b2lkIHRoZSBicm9rZW4gb3IKKyMgaW5jb21wYXRpYmxlIHZlcnNpb25zOgorIyBTeXNWIC9ldGMvaW5zdGFsbCwgL3Vzci9zYmluL2luc3RhbGwKKyMgU3VuT1MgL3Vzci9ldGMvaW5zdGFsbAorIyBJUklYIC9zYmluL2luc3RhbGwKKyMgQUlYIC9iaW4vaW5zdGFsbAorIyBBbWlnYU9TIC9DL2luc3RhbGwsIHdoaWNoIGluc3RhbGxzIGJvb3RibG9ja3Mgb24gZmxvcHB5IGRpc2NzCisjIEFJWCA0IC91c3IvYmluL2luc3RhbGxic2QsIHdoaWNoIGRvZXNuJ3Qgd29yayB3aXRob3V0IGEgLWcgZmxhZworIyBBRlMgL3Vzci9hZnN3cy9iaW4vaW5zdGFsbCwgd2hpY2ggbWlzaGFuZGxlcyBub25leGlzdGVudCBhcmdzCisjIFNWUjQgL3Vzci91Y2IvaW5zdGFsbCwgd2hpY2ggdHJpZXMgdG8gdXNlIHRoZSBub25leGlzdGVudCBncm91cCAic3RhZmYiCisjIE9TLzIncyBzeXN0ZW0gaW5zdGFsbCwgd2hpY2ggaGFzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc2VtYW50aWMKKyMgLi9pbnN0YWxsLCB3aGljaCBjYW4gYmUgZXJyb25lb3VzbHkgY3JlYXRlZCBieSBtYWtlIGZyb20gLi9pbnN0YWxsLnNoLgorIyBSZWplY3QgaW5zdGFsbCBwcm9ncmFtcyB0aGF0IGNhbm5vdCBpbnN0YWxsIG11bHRpcGxlIGZpbGVzLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwuLi4gIiA+JjY7IH0KK2lmIHRlc3QgLXogIiRJTlNUQUxMIjsgdGhlbgoraWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIyBBY2NvdW50IGZvciBwZW9wbGUgd2hvIHB1dCB0cmFpbGluZyBzbGFzaGVzIGluIFBBVEggZWxlbWVudHMuCitjYXNlICRhc19kaXIvIGluICMoKAorICAuLyB8IC4vLyB8IC9bY0NdLyogfCBcCisgIC9ldGMvKiB8IC91c3Ivc2Jpbi8qIHwgL3Vzci9ldGMvKiB8IC9zYmluLyogfCAvdXNyL2Fmc3dzL2Jpbi8qIHwgXAorICA/OltcXC9db3MyW1xcL11pbnN0YWxsW1xcL10qIHwgPzpbXFwvXU9TMltcXC9dSU5TVEFMTFtcXC9dKiB8IFwKKyAgL3Vzci91Y2IvKiApIDs7CisgICopCisgICAgIyBPU0YxIGFuZCBTQ08gT0RUIDMuMCBoYXZlIHRoZWlyIG93biBuYW1lcyBmb3IgaW5zdGFsbC4KKyAgICAjIERvbid0IHVzZSBpbnN0YWxsYnNkIGZyb20gT1NGIHNpbmNlIGl0IGluc3RhbGxzIHN0dWZmIGFzIHJvb3QKKyAgICAjIGJ5IGRlZmF1bHQuCisgICAgZm9yIGFjX3Byb2cgaW4gZ2luc3RhbGwgc2NvaW5zdCBpbnN0YWxsOyBkbworICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisJaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorCSAgaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKwkgICAgZ3JlcCBkc3Btc2cgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgICAjIEFJWCBpbnN0YWxsLiAgSXQgaGFzIGFuIGluY29tcGF0aWJsZSBjYWxsaW5nIGNvbnZlbnRpb24uCisJICAgIDoKKwkgIGVsaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKwkgICAgZ3JlcCBwd3BsdXMgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgICAjIHByb2dyYW0tc3BlY2lmaWMgaW5zdGFsbCBzY3JpcHQgdXNlZCBieSBIUCBwd3BsdXMtLWRvbid0IHVzZS4KKwkgICAgOgorCSAgZWxzZQorCSAgICBybSAtcmYgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byBjb25mdGVzdC5kaXIKKwkgICAgZWNobyBvbmUgPiBjb25mdGVzdC5vbmUKKwkgICAgZWNobyB0d28gPiBjb25mdGVzdC50d28KKwkgICAgbWtkaXIgY29uZnRlc3QuZGlyCisJICAgIGlmICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAtYyBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvICJgcHdkYC9jb25mdGVzdC5kaXIiICYmCisJICAgICAgdGVzdCAtcyBjb25mdGVzdC5vbmUgJiYgdGVzdCAtcyBjb25mdGVzdC50d28gJiYKKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0LmRpci9jb25mdGVzdC5vbmUgJiYKKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0LmRpci9jb25mdGVzdC50d28KKwkgICAgdGhlbgorCSAgICAgIGFjX2N2X3BhdGhfaW5zdGFsbD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCAtYyIKKwkgICAgICBicmVhayAzCisJICAgIGZpCisJICBmaQorCWZpCisgICAgICBkb25lCisgICAgZG9uZQorICAgIDs7Citlc2FjCisKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitybSAtcmYgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byBjb25mdGVzdC5kaXIKKworZmkKKyAgaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgICBJTlNUQUxMPSRhY19jdl9wYXRoX2luc3RhbGwKKyAgZWxzZQorICAgICMgQXMgYSBsYXN0IHJlc29ydCwgdXNlIHRoZSBzbG93IHNoZWxsIHNjcmlwdC4gIERvbid0IGNhY2hlIGEKKyAgICAjIHZhbHVlIGZvciBJTlNUQUxMIHdpdGhpbiBhIHNvdXJjZSBkaXJlY3RvcnksIGJlY2F1c2UgdGhhdCB3aWxsCisgICAgIyBicmVhayBvdGhlciBwYWNrYWdlcyB1c2luZyB0aGUgY2FjaGUgaWYgdGhhdCBkaXJlY3RvcnkgaXMKKyAgICAjIHJlbW92ZWQsIG9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlbGF0aXZlIG5hbWUuCisgICAgSU5TVEFMTD0kYWNfaW5zdGFsbF9zaAorICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSU5TVEFMTCIgPiY1CiskYXNfZWNobyAiJElOU1RBTEwiID4mNjsgfQorCisjIFVzZSB0ZXN0IC16IGJlY2F1c2UgU3VuT1M0IHNoIG1pc2hhbmRsZXMgYnJhY2VzIGluICR7dmFyLXZhbH0uCisjIEl0IHRoaW5rcyB0aGUgZmlyc3QgY2xvc2UgYnJhY2UgZW5kcyB0aGUgdmFyaWFibGUgc3Vic3RpdHV0aW9uLgordGVzdCAteiAiJElOU1RBTExfUFJPR1JBTSIgJiYgSU5TVEFMTF9QUk9HUkFNPScke0lOU1RBTEx9JworCit0ZXN0IC16ICIkSU5TVEFMTF9TQ1JJUFQiICYmIElOU1RBTExfU0NSSVBUPScke0lOU1RBTEx9JworCit0ZXN0IC16ICIkSU5TVEFMTF9EQVRBIiAmJiBJTlNUQUxMX0RBVEE9JyR7SU5TVEFMTH0gLW0gNjQ0JworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUuLi4gIiA+JjY7IH0KKyMgSnVzdCBpbiBjYXNlCitzbGVlcCAxCitlY2hvIHRpbWVzdGFtcCA+IGNvbmZ0ZXN0LmZpbGUKKyMgUmVqZWN0IHVuc2FmZSBjaGFyYWN0ZXJzIGluICRzcmNkaXIgb3IgdGhlIGFic29sdXRlIHdvcmtpbmcgZGlyZWN0b3J5CisjIG5hbWUuICBBY2NlcHQgc3BhY2UgYW5kIHRhYiBvbmx5IGluIHRoZSBsYXR0ZXIuCithbV9sZj0nCisnCitjYXNlIGBwd2RgIGluCisgICpbXFxcIlwjXCRcJlwnXGAkYW1fbGZdKikKKyAgICBhc19mbl9lcnJvciAkPyAidW5zYWZlIGFic29sdXRlIHdvcmtpbmcgZGlyZWN0b3J5IG5hbWUiICIkTElORU5PIiA1IDs7Citlc2FjCitjYXNlICRzcmNkaXIgaW4KKyAgKltcXFwiXCNcJFwmXCdcYCRhbV9sZlwgXAldKikKKyAgICBhc19mbl9lcnJvciAkPyAidW5zYWZlIHNyY2RpciB2YWx1ZTogXGAkc3JjZGlyJyIgIiRMSU5FTk8iIDUgOzsKK2VzYWMKKworIyBEbyBgc2V0JyBpbiBhIHN1YnNoZWxsIHNvIHdlIGRvbid0IGNsb2JiZXIgdGhlIGN1cnJlbnQgc2hlbGwncworIyBhcmd1bWVudHMuICBNdXN0IHRyeSAtTCBmaXJzdCBpbiBjYXNlIGNvbmZpZ3VyZSBpcyBhY3R1YWxseSBhCisjIHN5bWxpbms7IHNvbWUgc3lzdGVtcyBwbGF5IHdlaXJkIGdhbWVzIHdpdGggdGhlIG1vZCB0aW1lIG9mIHN5bWxpbmtzCisjIChlZyBGcmVlQlNEIHJldHVybnMgdGhlIG1vZCB0aW1lIG9mIHRoZSBzeW1saW5rJ3MgY29udGFpbmluZworIyBkaXJlY3RvcnkpLgoraWYgKAorICAgc2V0IFggYGxzIC1MdCAiJHNyY2Rpci9jb25maWd1cmUiIGNvbmZ0ZXN0LmZpbGUgMj4gL2Rldi9udWxsYAorICAgaWYgdGVzdCAiJCoiID0gIlgiOyB0aGVuCisgICAgICAjIC1MIGRpZG4ndCB3b3JrLgorICAgICAgc2V0IFggYGxzIC10ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZWAKKyAgIGZpCisgICBybSAtZiBjb25mdGVzdC5maWxlCisgICBpZiB0ZXN0ICIkKiIgIT0gIlggJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZSIgXAorICAgICAgJiYgdGVzdCAiJCoiICE9ICJYIGNvbmZ0ZXN0LmZpbGUgJHNyY2Rpci9jb25maWd1cmUiOyB0aGVuCisKKyAgICAgICMgSWYgbmVpdGhlciBtYXRjaGVkLCB0aGVuIHdlIGhhdmUgYSBicm9rZW4gbHMuICBUaGlzIGNhbiBoYXBwZW4KKyAgICAgICMgaWYsIGZvciBpbnN0YW5jZSwgQ09ORklHX1NIRUxMIGlzIGJhc2ggYW5kIGl0IGluaGVyaXRzIGEKKyAgICAgICMgYnJva2VuIGxzIGFsaWFzIGZyb20gdGhlIGVudmlyb25tZW50LiAgVGhpcyBoYXMgYWN0dWFsbHkKKyAgICAgICMgaGFwcGVuZWQuICBTdWNoIGEgc3lzdGVtIGNvdWxkIG5vdCBiZSBjb25zaWRlcmVkICJzYW5lIi4KKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJscyAtdCBhcHBlYXJzIHRvIGZhaWwuICBNYWtlIHN1cmUgdGhlcmUgaXMgbm90IGEgYnJva2VuCithbGlhcyBpbiB5b3VyIGVudmlyb25tZW50IiAiJExJTkVOTyIgNQorICAgZmkKKworICAgdGVzdCAiJDIiID0gY29uZnRlc3QuZmlsZQorICAgKQordGhlbgorICAgIyBPay4KKyAgIDoKK2Vsc2UKKyAgIGFzX2ZuX2Vycm9yICQ/ICJuZXdseSBjcmVhdGVkIGZpbGUgaXMgb2xkZXIgdGhhbiBkaXN0cmlidXRlZCBmaWxlcyEKK0NoZWNrIHlvdXIgc3lzdGVtIGNsb2NrIiAiJExJTkVOTyIgNQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9Cit0ZXN0ICIkcHJvZ3JhbV9wcmVmaXgiICE9IE5PTkUgJiYKKyAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0icyZeJiRwcm9ncmFtX3ByZWZpeCY7JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiCisjIFVzZSBhIGRvdWJsZSAkIHNvIG1ha2UgaWdub3JlcyBpdC4KK3Rlc3QgIiRwcm9ncmFtX3N1ZmZpeCIgIT0gTk9ORSAmJgorICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSJzJlwkJiRwcm9ncmFtX3N1ZmZpeCY7JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiCisjIERvdWJsZSBhbnkgXCBvciAkLgorIyBCeSBkZWZhdWx0IHdhcyBgcyx4LHgnLCByZW1vdmUgaXQgaWYgdXNlbGVzcy4KK2FjX3NjcmlwdD0ncy9bXFwkXS8mJi9nO3MvO3MseCx4LCQvLycKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWU9YCRhc19lY2hvICIkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIgfCBzZWQgIiRhY19zY3JpcHQiYAorCisjIGV4cGFuZCAkYWNfYXV4X2RpciB0byBhbiBhYnNvbHV0ZSBwYXRoCithbV9hdXhfZGlyPWBjZCAkYWNfYXV4X2RpciAmJiBwd2RgCisKK2lmIHRlc3QgeCIke01JU1NJTkcrc2V0fSIgIT0geHNldDsgdGhlbgorICBjYXNlICRhbV9hdXhfZGlyIGluCisgICpcICogfCAqXAkqKQorICAgIE1JU1NJTkc9Ilwke1NIRUxMfSBcIiRhbV9hdXhfZGlyL21pc3NpbmdcIiIgOzsKKyAgKikKKyAgICBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIgOzsKKyAgZXNhYworZmkKKyMgVXNlIGV2YWwgdG8gZXhwYW5kICRTSEVMTAoraWYgZXZhbCAiJE1JU1NJTkcgLS1ydW4gdHJ1ZSI7IHRoZW4KKyAgYW1fbWlzc2luZ19ydW49IiRNSVNTSU5HIC0tcnVuICIKK2Vsc2UKKyAgYW1fbWlzc2luZ19ydW49CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogXGBtaXNzaW5nJyBzY3JpcHQgaXMgdG9vIG9sZCBvciBtaXNzaW5nIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZyIgPiYyO30KK2ZpCisKK2lmIHRlc3QgeCIke2luc3RhbGxfc2h9IiAhPSB4c2V0OyB0aGVuCisgIGNhc2UgJGFtX2F1eF9kaXIgaW4KKyAgKlwgKiB8ICpcCSopCisgICAgaW5zdGFsbF9zaD0iXCR7U0hFTEx9ICckYW1fYXV4X2Rpci9pbnN0YWxsLXNoJyIgOzsKKyAgKikKKyAgICBpbnN0YWxsX3NoPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCIKKyAgZXNhYworZmkKKworIyBJbnN0YWxsZWQgYmluYXJpZXMgYXJlIHVzdWFsbHkgc3RyaXBwZWQgdXNpbmcgYHN0cmlwJyB3aGVuIHRoZSB1c2VyCisjIHJ1biBgbWFrZSBpbnN0YWxsLXN0cmlwJy4gIEhvd2V2ZXIgYHN0cmlwJyBtaWdodCBub3QgYmUgdGhlIHJpZ2h0CisjIHRvb2wgdG8gdXNlIGluIGNyb3NzLWNvbXBpbGF0aW9uIGVudmlyb25tZW50cywgdGhlcmVmb3JlIEF1dG9tYWtlCisjIHdpbGwgaG9ub3IgdGhlIGBTVFJJUCcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gb3ZlcnJ1bGUgdGhpcyBwcm9ncmFtLgoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0gbm87IHRoZW4KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX1NUUklQK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgorICBhY19jdl9wcm9nX1NUUklQPSIkU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19TVFJJUD0iJHthY190b29sX3ByZWZpeH1zdHJpcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitTVFJJUD0kYWNfY3ZfcHJvZ19TVFJJUAoraWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFNUUklQIiA+JjUKKyRhc19lY2hvICIkU1RSSVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX1NUUklQIjsgdGhlbgorICBhY19jdF9TVFJJUD0kU1RSSVAKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJzdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgc3RyaXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X1NUUklQK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSIkYWNfY3RfU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0ic3RyaXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfU1RSSVA9JGFjX2N2X3Byb2dfYWNfY3RfU1RSSVAKK2lmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9TVFJJUCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X1NUUklQIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfU1RSSVAiID0geDsgdGhlbgorICAgIFNUUklQPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIFNUUklQPSRhY19jdF9TVFJJUAorICBmaQorZWxzZQorICBTVFJJUD0iJGFjX2N2X3Byb2dfU1RSSVAiCitmaQorCitmaQorSU5TVEFMTF9TVFJJUF9QUk9HUkFNPSJcJChpbnN0YWxsX3NoKSAtYyAtcyIKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSB0aHJlYWQtc2FmZSBta2RpciAtcCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYSB0aHJlYWQtc2FmZSBta2RpciAtcC4uLiAiID4mNjsgfQoraWYgdGVzdCAteiAiJE1LRElSX1AiOyB0aGVuCisgIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9ta2RpcitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1Ivb3B0L3Nmdy9iaW4KK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBta2RpciBnbWtkaXI7IGRvCisJIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworCSAgIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCI7IH0gfHwgY29udGludWUKKwkgICBjYXNlIGAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgLS12ZXJzaW9uIDI+JjFgIGluICMoCisJICAgICAnbWtkaXIgKEdOVSBjb3JldXRpbHMpICcqIHwgXAorCSAgICAgJ21rZGlyIChjb3JldXRpbHMpICcqIHwgXAorCSAgICAgJ21rZGlyIChmaWxldXRpbHMpICc0LjEqKQorCSAgICAgICBhY19jdl9wYXRoX21rZGlyPSRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQKKwkgICAgICAgYnJlYWsgMzs7CisJICAgZXNhYworCSBkb25lCisgICAgICAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCisKKyAgdGVzdCAtZCAuLy0tdmVyc2lvbiAmJiBybWRpciAuLy0tdmVyc2lvbgorICBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfbWtkaXIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgICBNS0RJUl9QPSIkYWNfY3ZfcGF0aF9ta2RpciAtcCIKKyAgZWxzZQorICAgICMgQXMgYSBsYXN0IHJlc29ydCwgdXNlIHRoZSBzbG93IHNoZWxsIHNjcmlwdC4gIERvbid0IGNhY2hlIGEKKyAgICAjIHZhbHVlIGZvciBNS0RJUl9QIHdpdGhpbiBhIHNvdXJjZSBkaXJlY3RvcnksIGJlY2F1c2UgdGhhdCB3aWxsCisgICAgIyBicmVhayBvdGhlciBwYWNrYWdlcyB1c2luZyB0aGUgY2FjaGUgaWYgdGhhdCBkaXJlY3RvcnkgaXMKKyAgICAjIHJlbW92ZWQsIG9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlbGF0aXZlIG5hbWUuCisgICAgTUtESVJfUD0iJGFjX2luc3RhbGxfc2ggLWQiCisgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNS0RJUl9QIiA+JjUKKyRhc19lY2hvICIkTUtESVJfUCIgPiY2OyB9CisKK21rZGlyX3A9IiRNS0RJUl9QIgorY2FzZSAkbWtkaXJfcCBpbgorICBbXFwvJF0qIHwgPzpbXFwvXSopIDs7CisgICovKikgbWtkaXJfcD0iXCQodG9wX2J1aWxkZGlyKS8kbWtkaXJfcCIgOzsKK2VzYWMKKworZm9yIGFjX3Byb2cgaW4gZ2F3ayBtYXdrIG5hd2sgYXdrCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVdLK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19BV0s9IiRBV0siICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19BV0s9IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0FXSz0kYWNfY3ZfcHJvZ19BV0sKK2lmIHRlc3QgLW4gIiRBV0siOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQVdLIiA+JjUKKyRhc19lY2hvICIkQVdLIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJEFXSyIgJiYgYnJlYWsKK2RvbmUKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkuLi4gIiA+JjY7IH0KK3NldCB4ICR7TUFLRS1tYWtlfQorYWNfbWFrZT1gJGFzX2VjaG8gIiQyIiB8IHNlZCAncy8rL3AvZzsgcy9bXmEtekEtWjAtOV9dL18vZydgCitpZiBldmFsICJ0ZXN0IFwiXCR7YWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0K3NldH1cIiIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0Lm1ha2UgPDxcX0FDRU9GCitTSEVMTCA9IC9iaW4vc2gKK2FsbDoKKwlAZWNobyAnQEBAJSUlPSQoTUFLRSk9QEBAJSUlJworX0FDRU9GCisjIEdOVSBtYWtlIHNvbWV0aW1lcyBwcmludHMgIm1ha2VbMV06IEVudGVyaW5nIC4uLiIsIHdoaWNoIHdvdWxkIGNvbmZ1c2UgdXMuCitjYXNlIGAke01BS0UtbWFrZX0gLWYgY29uZnRlc3QubWFrZSAyPi9kZXYvbnVsbGAgaW4KKyAgKkBAQCUlJT0/Kj1AQEAlJSUqKQorICAgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PXllczs7CisgICopCisgICAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9bm87OworZXNhYworcm0gLWYgY29uZnRlc3QubWFrZQorZmkKK2lmIGV2YWwgdGVzdCBcJGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldCA9IHllczsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICBTRVRfTUFLRT0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgIFNFVF9NQUtFPSJNQUtFPSR7TUFLRS1tYWtlfSIKK2ZpCisKK3JtIC1yZiAudHN0IDI+L2Rldi9udWxsCitta2RpciAudHN0IDI+L2Rldi9udWxsCitpZiB0ZXN0IC1kIC50c3Q7IHRoZW4KKyAgYW1fX2xlYWRpbmdfZG90PS4KK2Vsc2UKKyAgYW1fX2xlYWRpbmdfZG90PV8KK2ZpCitybWRpciAudHN0IDI+L2Rldi9udWxsCisKK2lmIHRlc3QgImBjZCAkc3JjZGlyICYmIHB3ZGAiICE9ICJgcHdkYCI7IHRoZW4KKyAgIyBVc2UgLUkkKHNyY2Rpcikgb25seSB3aGVuICQoc3JjZGlyKSAhPSAuLCBzbyB0aGF0IG1ha2UncyBvdXRwdXQKKyAgIyBpcyBub3QgcG9sbHV0ZWQgd2l0aCByZXBlYXRlZCAiLUkuIgorICBhbV9faXNyYz0nIC1JJChzcmNkaXIpJworICAjIHRlc3QgdG8gc2VlIGlmIHNyY2RpciBhbHJlYWR5IGNvbmZpZ3VyZWQKKyAgaWYgdGVzdCAtZiAkc3JjZGlyL2NvbmZpZy5zdGF0dXM7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAic291cmNlIGRpcmVjdG9yeSBhbHJlYWR5IGNvbmZpZ3VyZWQ7IHJ1biBcIm1ha2UgZGlzdGNsZWFuXCIgdGhlcmUgZmlyc3QiICIkTElORU5PIiA1CisgIGZpCitmaQorCisjIHRlc3Qgd2hldGhlciB3ZSBoYXZlIGN5Z3BhdGgKK2lmIHRlc3QgLXogIiRDWUdQQVRIX1ciOyB0aGVuCisgIGlmIChjeWdwYXRoIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIENZR1BBVEhfVz0nY3lncGF0aCAtdycKKyAgZWxzZQorICAgIENZR1BBVEhfVz1lY2hvCisgIGZpCitmaQorCisKKyMgRGVmaW5lIHRoZSBpZGVudGl0eSBvZiB0aGUgcGFja2FnZS4KKyBQQUNLQUdFPSdnc3RyZWFtZXInCisgVkVSU0lPTj0nMC4xMS4xJworCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRSAiJFBBQ0tBR0UiCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFZFUlNJT04gIiRWRVJTSU9OIgorX0FDRU9GCisKKyMgU29tZSB0b29scyBBdXRvbWFrZSBuZWVkcy4KKworQUNMT0NBTD0ke0FDTE9DQUwtIiR7YW1fbWlzc2luZ19ydW59YWNsb2NhbC0ke2FtX19hcGlfdmVyc2lvbn0ifQorCisKK0FVVE9DT05GPSR7QVVUT0NPTkYtIiR7YW1fbWlzc2luZ19ydW59YXV0b2NvbmYifQorCisKK0FVVE9NQUtFPSR7QVVUT01BS0UtIiR7YW1fbWlzc2luZ19ydW59YXV0b21ha2UtJHthbV9fYXBpX3ZlcnNpb259In0KKworCitBVVRPSEVBREVSPSR7QVVUT0hFQURFUi0iJHthbV9taXNzaW5nX3J1bn1hdXRvaGVhZGVyIn0KKworCitNQUtFSU5GTz0ke01BS0VJTkZPLSIke2FtX21pc3NpbmdfcnVufW1ha2VpbmZvIn0KKworIyBXZSBuZWVkIGF3ayBmb3IgdGhlICJjaGVjayIgdGFyZ2V0LiAgVGhlIHN5c3RlbSAiYXdrIiBpcyBiYWQgb24KKyMgc29tZSBwbGF0Zm9ybXMuCisjIEFsd2F5cyBkZWZpbmUgQU1UQVIgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisKK0FNVEFSPSR7QU1UQVItIiR7YW1fbWlzc2luZ19ydW59dGFyIn0KKworYW1fX3Rhcj0nJHtBTVRBUn0gY2hvZiAtICIkJHRhcmRpciInOyBhbV9fdW50YXI9JyR7QU1UQVJ9IHhmIC0nCisKKworCisKKworCisKKyAgUEFDS0FHRV9WRVJTSU9OX01BSk9SPSQoZWNobyAwLjExLjEgfCBjdXQgLWQnLicgLWYxKQorICBQQUNLQUdFX1ZFUlNJT05fTUlOT1I9JChlY2hvIDAuMTEuMSB8IGN1dCAtZCcuJyAtZjIpCisgIFBBQ0tBR0VfVkVSU0lPTl9NSUNSTz0kKGVjaG8gMC4xMS4xIHwgY3V0IC1kJy4nIC1mMykKKworCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIG5hbm8gdmVyc2lvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBuYW5vIHZlcnNpb24uLi4gIiA+JjY7IH0KKworICBOQU5PPSQoZWNobyAwLjExLjEgfCBjdXQgLWQnLicgLWY0KQorCisgIGlmIHRlc3QgeCIkTkFOTyIgPSB4IHx8IHRlc3QgIngkTkFOTyIgPSAieDAiIDsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAwIChyZWxlYXNlKSIgPiY1CiskYXNfZWNobyAiMCAocmVsZWFzZSkiID4mNjsgfQorICAgIE5BTk89MAorICAgIFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFPTEKKyAgICBHU1RfR0lUPSJubyIKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTkFOTyIgPiY1CiskYXNfZWNobyAiJE5BTk8iID4mNjsgfQorICAgIFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFPTAuYGRhdGUgKyVZJW0lZC4lSCVNJVNgCisgICAgaWYgdGVzdCAieCROQU5PIiAhPSAieDEiIDsgdGhlbgorICAgICAgIEdTVF9HSVQ9Im5vIgorICAgIGVsc2UKKyAgICAgICBHU1RfR0lUPSJ5ZXMiCisgICAgZmkKKyAgZmkKKyAgUEFDS0FHRV9WRVJTSU9OX05BTk89JE5BTk8KKworCisKKworCisKK2FjX2NvbmZpZ19oZWFkZXJzPSIkYWNfY29uZmlnX2hlYWRlcnMgY29uZmlnLmgiCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzLi4uICIgPiY2OyB9CisgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9tYWludGFpbmVyX21vZGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9tYWludGFpbmVyX21vZGU7IFVTRV9NQUlOVEFJTkVSX01PREU9JGVuYWJsZXZhbAorZWxzZQorICBVU0VfTUFJTlRBSU5FUl9NT0RFPW5vCitmaQorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkVVNFX01BSU5UQUlORVJfTU9ERSIgPiY1CiskYXNfZWNobyAiJFVTRV9NQUlOVEFJTkVSX01PREUiID4mNjsgfQorICAgaWYgdGVzdCAkVVNFX01BSU5UQUlORVJfTU9ERSA9IHllczsgdGhlbgorICBNQUlOVEFJTkVSX01PREVfVFJVRT0KKyAgTUFJTlRBSU5FUl9NT0RFX0ZBTFNFPScjJworZWxzZQorICBNQUlOVEFJTkVSX01PREVfVFJVRT0nIycKKyAgTUFJTlRBSU5FUl9NT0RFX0ZBTFNFPQorZmkKKworICBNQUlOVD0kTUFJTlRBSU5FUl9NT0RFX1RSVUUKKworCisKKyMgTWFrZSBzdXJlIHdlIGNhbiBydW4gY29uZmlnLnN1Yi4KKyRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgc3VuNCA+L2Rldi9udWxsIDI+JjEgfHwKKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBydW4gJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICIkTElORU5PIiA1CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfYnVpbGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKK3Rlc3QgIngkYWNfYnVpbGRfYWxpYXMiID0geCAmJgorICBhY19idWlsZF9hbGlhcz1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiYAordGVzdCAieCRhY19idWlsZF9hbGlhcyIgPSB4ICYmCisgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgZ3Vlc3MgYnVpbGQgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiICIkTElORU5PIiA1CithY19jdl9idWlsZD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkYWNfYnVpbGRfYWxpYXNgIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkYWNfYnVpbGRfYWxpYXMgZmFpbGVkIiAiJExJTkVOTyIgNQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9idWlsZCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2J1aWxkIiA+JjY7IH0KK2Nhc2UgJGFjX2N2X2J1aWxkIGluCisqLSotKikgOzsKKyopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBidWlsZCIgIiRMSU5FTk8iIDUgOzsKK2VzYWMKK2J1aWxkPSRhY19jdl9idWlsZAorYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSctJworc2V0IHggJGFjX2N2X2J1aWxkCitzaGlmdAorYnVpbGRfY3B1PSQxCitidWlsZF92ZW5kb3I9JDIKK3NoaWZ0OyBzaGlmdAorIyBSZW1lbWJlciwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBJRlMgaXMgdXNlZCB0byBjcmVhdGUgJCosCisjIGV4Y2VwdCB3aXRoIG9sZCBzaGVsbHM6CitidWlsZF9vcz0kKgorSUZTPSRhY19zYXZlX0lGUworY2FzZSAkYnVpbGRfb3MgaW4gKlwgKikgYnVpbGRfb3M9YGVjaG8gIiRidWlsZF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9ob3N0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAieCRob3N0X2FsaWFzIiA9IHg7IHRoZW4KKyAgYWNfY3ZfaG9zdD0kYWNfY3ZfYnVpbGQKK2Vsc2UKKyAgYWNfY3ZfaG9zdD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkaG9zdF9hbGlhc2AgfHwKKyAgICBhc19mbl9lcnJvciAkPyAiJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGhvc3RfYWxpYXMgZmFpbGVkIiAiJExJTkVOTyIgNQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaG9zdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hvc3QiID4mNjsgfQorY2FzZSAkYWNfY3ZfaG9zdCBpbgorKi0qLSopIDs7CisqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgaG9zdCIgIiRMSU5FTk8iIDUgOzsKK2VzYWMKK2hvc3Q9JGFjX2N2X2hvc3QKK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKK3NldCB4ICRhY19jdl9ob3N0CitzaGlmdAoraG9zdF9jcHU9JDEKK2hvc3RfdmVuZG9yPSQyCitzaGlmdDsgc2hpZnQKKyMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAorIyBleGNlcHQgd2l0aCBvbGQgc2hlbGxzOgoraG9zdF9vcz0kKgorSUZTPSRhY19zYXZlX0lGUworY2FzZSAkaG9zdF9vcyBpbiAqXCAqKSBob3N0X29zPWBlY2hvICIkaG9zdF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaWxlbnQtcnVsZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc2lsZW50X3J1bGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc2lsZW50X3J1bGVzOworZmkKKworY2FzZSAkZW5hYmxlX3NpbGVudF9ydWxlcyBpbgoreWVzKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0wOzsKK25vKSAgQU1fREVGQVVMVF9WRVJCT1NJVFk9MTs7CisqKSAgIEFNX0RFRkFVTFRfVkVSQk9TSVRZPTA7OworZXNhYworQU1fQkFDS1NMQVNIPSdcJworCisKK0dTVF9NQUpPUk1JTk9SPSRQQUNLQUdFX1ZFUlNJT05fTUFKT1IuJFBBQ0tBR0VfVkVSU0lPTl9NSU5PUgorR1NUX01BSk9STUlOT1I9MC4xMQorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgR1NUX01BSk9STUlOT1IgIiRHU1RfTUFKT1JNSU5PUiIKK19BQ0VPRgorCisKKworICBHU1RfQ1VSUkVOVD0zMQorICBHU1RfUkVWSVNJT049MAorICBHU1RfQUdFPTAKKyAgR1NUX0xJQlZFUlNJT049MzE6MDowCisKKworCisKKworICBHU1RfTFRfTERGTEFHUz0iJEdTVF9MVF9MREZMQUdTIC12ZXJzaW9uLWluZm8gJEdTVF9MSUJWRVJTSU9OIgorICBpZiB0ZXN0ICEgLXogIiIKKyAgdGhlbgorICAgIEdTVF9MVF9MREZMQUdTPSIkR1NUX0xUX0xERkxBR1MgLXJlbGVhc2UgIgorICBmaQorCisKKyAgZW5hYmxlX2Rsb3Blbj15ZXMKKworCisKKworCisKK2VuYWJsZV93aW4zMl9kbGw9eWVzCisKK2Nhc2UgJGhvc3QgaW4KKyotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotY2VnY2MqKQorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hcyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hczsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQVMiOyB0aGVuCisgIGFjX2N2X3Byb2dfQVM9IiRBUyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0FTPSIke2FjX3Rvb2xfcHJlZml4fWFzIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0FTPSRhY19jdl9wcm9nX0FTCitpZiB0ZXN0IC1uICIkQVMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQVMiID4mNQorJGFzX2VjaG8gIiRBUyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVMiOyB0aGVuCisgIGFjX2N0X0FTPSRBUworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFzIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBhczsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQVMiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQVM9IiRhY19jdF9BUyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0FTPSJhcyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9BUz0kYWNfY3ZfcHJvZ19hY19jdF9BUworaWYgdGVzdCAtbiAiJGFjX2N0X0FTIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0FTIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQVMiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9BUyIgPSB4OyB0aGVuCisgICAgQVM9ImZhbHNlIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIEFTPSRhY19jdF9BUworICBmaQorZWxzZQorICBBUz0iJGFjX2N2X3Byb2dfQVMiCitmaQorCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iJHthY190b29sX3ByZWZpeH1kbGx0b29sIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0RMTFRPT0w9JGFjX2N2X3Byb2dfRExMVE9PTAoraWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRExMVE9PTCIgPiY1CiskYXNfZWNobyAiJERMTFRPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCisgIGFjX2N0X0RMTFRPT0w9JERMTFRPT0wKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iJGFjX2N0X0RMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSJkbGx0b29sIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0RMTFRPT0w9JGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTAoraWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRExMVE9PTCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0RMTFRPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9ETExUT09MIiA9IHg7IHRoZW4KKyAgICBETExUT09MPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBETExUT09MPSRhY19jdF9ETExUT09MCisgIGZpCitlbHNlCisgIERMTFRPT0w9IiRhY19jdl9wcm9nX0RMTFRPT0wiCitmaQorCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfT0JKRFVNUCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRPQkpEVU1QIjsgdGhlbgorICBhY19jdl9wcm9nX09CSkRVTVA9IiRPQkpEVU1QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfT0JKRFVNUD0iJHthY190b29sX3ByZWZpeH1vYmpkdW1wIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK09CSkRVTVA9JGFjX2N2X3Byb2dfT0JKRFVNUAoraWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT0JKRFVNUCIgPiY1CiskYXNfZWNobyAiJE9CSkRVTVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX09CSkRVTVAiOyB0aGVuCisgIGFjX2N0X09CSkRVTVA9JE9CSkRVTVAKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBvYmpkdW1wOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X09CSkRVTVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUD0iJGFjX2N0X09CSkRVTVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSJvYmpkdW1wIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X09CSkRVTVA9JGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUAoraWYgdGVzdCAtbiAiJGFjX2N0X09CSkRVTVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT0JKRFVNUCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X09CSkRVTVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9PQkpEVU1QIiA9IHg7IHRoZW4KKyAgICBPQkpEVU1QPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBPQkpEVU1QPSRhY19jdF9PQkpEVU1QCisgIGZpCitlbHNlCisgIE9CSkRVTVA9IiRhY19jdl9wcm9nX09CSkRVTVAiCitmaQorCisgIDs7Citlc2FjCisKK3Rlc3QgLXogIiRBUyIgJiYgQVM9YXMKKworCisKKworCit0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCisKKworCisKKwordGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAorCisKKworCisKKworCitjYXNlIGBwd2RgIGluCisgICpcICogfCAqXAkqKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogTGlidG9vbCBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCB3aGl0ZXNwYWNlIGluIFxgcHdkXGAiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogTGlidG9vbCBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCB3aGl0ZXNwYWNlIGluIFxgcHdkXGAiID4mMjt9IDs7Citlc2FjCisKKworCittYWNyb192ZXJzaW9uPScyLjIuNmInCittYWNyb19yZXZpc2lvbj0nMS4zMDE3JworCisKKworCisKKworCisKKworCisKKworCitsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKKworREVQRElSPSIke2FtX19sZWFkaW5nX2RvdH1kZXBzIgorCithY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgZGVwZmlsZXMiCisKKworYW1fbWFrZT0ke01BS0UtbWFrZX0KK2NhdCA+IGNvbmZpbmMgPDwgJ0VORCcKK2FtX19kb2l0OgorCUBlY2hvIHRoaXMgaXMgdGhlIGFtX19kb2l0IHRhcmdldAorLlBIT05ZOiBhbV9fZG9pdAorRU5ECisjIElmIHdlIGRvbid0IGZpbmQgYW4gaW5jbHVkZSBkaXJlY3RpdmUsIGp1c3QgY29tbWVudCBvdXQgdGhlIGNvZGUuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdHlsZSBvZiBpbmNsdWRlIHVzZWQgYnkgJGFtX21ha2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZS4uLiAiID4mNjsgfQorYW1fX2luY2x1ZGU9IiMiCithbV9fcXVvdGU9CitfYW1fcmVzdWx0PW5vbmUKKyMgRmlyc3QgdHJ5IEdOVSBtYWtlIHN0eWxlIGluY2x1ZGUuCitlY2hvICJpbmNsdWRlIGNvbmZpbmMiID4gY29uZm1mCisjIElnbm9yZSBhbGwga2luZHMgb2YgYWRkaXRpb25hbCBvdXRwdXQgZnJvbSBgbWFrZScuCitjYXNlIGAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCBpbiAjKAorKnRoZVwgYW1fX2RvaXRcIHRhcmdldCopCisgIGFtX19pbmNsdWRlPWluY2x1ZGUKKyAgYW1fX3F1b3RlPQorICBfYW1fcmVzdWx0PUdOVQorICA7OworZXNhYworIyBOb3cgdHJ5IEJTRCBtYWtlIHN0eWxlIGluY2x1ZGUuCitpZiB0ZXN0ICIkYW1fX2luY2x1ZGUiID0gIiMiOyB0aGVuCisgICBlY2hvICcuaW5jbHVkZSAiY29uZmluYyInID4gY29uZm1mCisgICBjYXNlIGAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCBpbiAjKAorICAgKnRoZVwgYW1fX2RvaXRcIHRhcmdldCopCisgICAgIGFtX19pbmNsdWRlPS5pbmNsdWRlCisgICAgIGFtX19xdW90ZT0iXCIiCisgICAgIF9hbV9yZXN1bHQ9QlNECisgICAgIDs7CisgICBlc2FjCitmaQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkX2FtX3Jlc3VsdCIgPiY1CiskYXNfZWNobyAiJF9hbV9yZXN1bHQiID4mNjsgfQorcm0gLWYgY29uZmluYyBjb25mbWYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmc7CitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm87IHRoZW4KKyAgYW1fZGVwY29tcD0iJGFjX2F1eF9kaXIvZGVwY29tcCIKKyAgQU1ERVBCQUNLU0xBU0g9J1wnCitmaQorIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgorICBBTURFUF9UUlVFPQorICBBTURFUF9GQUxTRT0nIycKK2Vsc2UKKyAgQU1ERVBfVFJVRT0nIycKKyAgQU1ERVBfRkFMU0U9CitmaQorCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1nY2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1nY2MiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQ0M9JGFjX2N2X3Byb2dfQ0MKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19DQyI7IHRoZW4KKyAgYWNfY3RfQ0M9JENDCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBnY2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iZ2NjIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCitpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0NDIiA9IHg7IHRoZW4KKyAgICBDQz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIENDPSRhY19jdF9DQworICBmaQorZWxzZQorICBDQz0iJGFjX2N2X3Byb2dfQ0MiCitmaQorCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1jYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1jYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWNjIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIGZpCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBjYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3Byb2dfcmVqZWN0ZWQ9bm8KK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGlmIHRlc3QgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID0gIi91c3IvdWNiL2NjIjsgdGhlbgorICAgICAgIGFjX3Byb2dfcmVqZWN0ZWQ9eWVzCisgICAgICAgY29udGludWUKKyAgICAgZmkKKyAgICBhY19jdl9wcm9nX0NDPSJjYyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworaWYgdGVzdCAkYWNfcHJvZ19yZWplY3RlZCA9IHllczsgdGhlbgorICAjIFdlIGZvdW5kIGEgYm9nb24gaW4gdGhlIHBhdGgsIHNvIG1ha2Ugc3VyZSB3ZSBuZXZlciB1c2UgaXQuCisgIHNldCBkdW1teSAkYWNfY3ZfcHJvZ19DQworICBzaGlmdAorICBpZiB0ZXN0ICQjICE9IDA7IHRoZW4KKyAgICAjIFdlIGNob3NlIGEgZGlmZmVyZW50IGNvbXBpbGVyIGZyb20gdGhlIGJvZ3VzIG9uZS4KKyAgICAjIEhvd2V2ZXIsIGl0IGhhcyB0aGUgc2FtZSBiYXNlbmFtZSwgc28gdGhlIGJvZ29uIHdpbGwgYmUgY2hvc2VuCisgICAgIyBmaXJzdCBpZiB3ZSBzZXQgQ0MgdG8ganVzdCB0aGUgYmFzZW5hbWU7IHVzZSB0aGUgZnVsbCBmaWxlIG5hbWUuCisgICAgc2hpZnQKKyAgICBhY19jdl9wcm9nX0NDPSIkYXNfZGlyLyRhY193b3JkJHsxKycgJ30kQCIKKyAgZmkKK2ZpCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGNsLmV4ZQorICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ0M9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgdGVzdCAtbiAiJENDIiAmJiBicmVhaworICBkb25lCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBhY19jdF9DQz0kQ0MKKyAgZm9yIGFjX3Byb2cgaW4gY2wuZXhlCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQworaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkYWNfY3RfQ0MiICYmIGJyZWFrCitkb25lCisKKyAgaWYgdGVzdCAieCRhY19jdF9DQyIgPSB4OyB0aGVuCisgICAgQ0M9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBDQz0kYWNfY3RfQ0MKKyAgZmkKK2ZpCisKK2ZpCisKKwordGVzdCAteiAiJENDIiAmJiB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNSA7IH0KKworIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgorJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgdmVyc2lvbiIgPiY1CitzZXQgWCAkYWNfY29tcGlsZQorYWNfY29tcGlsZXI9JDIKK2ZvciBhY19vcHRpb24gaW4gLS12ZXJzaW9uIC12IC1WIC1xdmVyc2lvbjsgZG8KKyAgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBzZWQgJzEwYVwKKy4uLiByZXN0IG9mIHN0ZGVyciBvdXRwdXQgZGVsZXRlZCAuLi4KKyAgICAgICAgIDEwcScgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICBmaQorICBybSAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9Citkb25lCisKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorYWNfY2xlYW5fZmlsZXNfc2F2ZT0kYWNfY2xlYW5fZmlsZXMKK2FjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgYS5vdXQgYS5vdXQuZFNZTSBhLmV4ZSBiLm91dCIKKyMgVHJ5IHRvIGNyZWF0ZSBhbiBleGVjdXRhYmxlIHdpdGhvdXQgLW8gZmlyc3QsIGRpc3JlZ2FyZCBhLm91dC4KKyMgSXQgd2lsbCBoZWxwIHVzIGRpYWdub3NlIGJyb2tlbiBjb21waWxlcnMsIGFuZCBmaW5kaW5nIG91dCBhbiBpbnR1aXRpb24KKyMgb2YgZXhlZXh0LgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MuLi4gIiA+JjY7IH0KK2FjX2xpbmtfZGVmYXVsdD1gJGFzX2VjaG8gIiRhY19saW5rIiB8IHNlZCAncy8gLW8gKmNvbmZ0ZXN0W14gXSovLydgCisKKyMgVGhlIHBvc3NpYmxlIG91dHB1dCBmaWxlczoKK2FjX2ZpbGVzPSJhLm91dCBjb25mdGVzdC5leGUgY29uZnRlc3QgYS5leGUgYV9vdXQuZXhlIGIub3V0IGNvbmZ0ZXN0LioiCisKK2FjX3JtZmlsZXM9Citmb3IgYWNfZmlsZSBpbiAkYWNfZmlsZXMKK2RvCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApIDs7CisgICAgKiApIGFjX3JtZmlsZXM9IiRhY19ybWZpbGVzICRhY19maWxlIjs7CisgIGVzYWMKK2RvbmUKK3JtIC1mICRhY19ybWZpbGVzCisKK2lmIHsgeyBhY190cnk9IiRhY19saW5rX2RlZmF1bHQiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rX2RlZmF1bHQiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6CisgICMgQXV0b2NvbmYtMi4xMyBjb3VsZCBzZXQgdGhlIGFjX2N2X2V4ZWV4dCB2YXJpYWJsZSB0byBgbm8nLgorIyBTbyBpZ25vcmUgYSB2YWx1ZSBvZiBgbm8nLCBvdGhlcndpc2UgdGhpcyB3b3VsZCBsZWFkIHRvIGBFWEVFWFQgPSBubycKKyMgaW4gYSBNYWtlZmlsZS4gIFdlIHNob3VsZCBub3Qgb3ZlcnJpZGUgYWNfY3ZfZXhlZXh0IGlmIGl0IHdhcyBjYWNoZWQsCisjIHNvIHRoYXQgdGhlIHVzZXIgY2FuIHNob3J0LWNpcmN1aXQgdGhpcyB0ZXN0IGZvciBjb21waWxlcnMgdW5rbm93biB0bworIyBBdXRvY29uZi4KK2ZvciBhY19maWxlIGluICRhY19maWxlcyAnJworZG8KKyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApCisJOzsKKyAgICBbYWJdLm91dCApCisJIyBXZSBmb3VuZCB0aGUgZGVmYXVsdCBleGVjdXRhYmxlLCBidXQgZXhlZXh0PScnIGlzIG1vc3QKKwkjIGNlcnRhaW5seSByaWdodC4KKwlicmVhazs7CisgICAgKi4qICkKKwlpZiB0ZXN0ICIke2FjX2N2X2V4ZWV4dCtzZXR9IiA9IHNldCAmJiB0ZXN0ICIkYWNfY3ZfZXhlZXh0IiAhPSBubzsKKwl0aGVuIDo7IGVsc2UKKwkgICBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKKwlmaQorCSMgV2Ugc2V0IGFjX2N2X2V4ZWV4dCBoZXJlIGJlY2F1c2UgdGhlIGxhdGVyIHRlc3QgZm9yIGl0IGlzIG5vdAorCSMgc2FmZTogY3Jvc3MgY29tcGlsZXJzIG1heSBub3QgYWRkIHRoZSBzdWZmaXggaWYgZ2l2ZW4gYW4gYC1vJworCSMgYXJndW1lbnQsIHNvIHdlIG1heSBuZWVkIHRvIGtub3cgaXQgYXQgdGhhdCBwb2ludCBhbHJlYWR5LgorCSMgRXZlbiBpZiB0aGlzIHNlY3Rpb24gbG9va3MgY3J1ZnR5OiBpdCBoYXMgdGhlIGFkdmFudGFnZSBvZgorCSMgYWN0dWFsbHkgd29ya2luZy4KKwlicmVhazs7CisgICAgKiApCisJYnJlYWs7OworICBlc2FjCitkb25lCit0ZXN0ICIkYWNfY3ZfZXhlZXh0IiA9IG5vICYmIGFjX2N2X2V4ZWV4dD0KKworZWxzZQorICBhY19maWxlPScnCitmaQoraWYgdGVzdCAteiAiJGFjX2ZpbGUiOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiskYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciA3NyAiQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNSA7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUuLi4gIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFjX2ZpbGUiID4mNjsgfQorYWNfZXhlZXh0PSRhY19jdl9leGVleHQKKworcm0gLWYgLXIgYS5vdXQgYS5vdXQuZFNZTSBhLmV4ZSBjb25mdGVzdCRhY19jdl9leGVleHQgYi5vdXQKK2FjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBleGVjdXRhYmxlcy4uLiAiID4mNjsgfQoraWYgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4gOgorICAjIElmIGJvdGggYGNvbmZ0ZXN0LmV4ZScgYW5kIGBjb25mdGVzdCcgYXJlIGBwcmVzZW50JyAod2VsbCwgb2JzZXJ2YWJsZSkKKyMgY2F0Y2ggYGNvbmZ0ZXN0LmV4ZScuICBGb3IgaW5zdGFuY2Ugd2l0aCBDeWd3aW4sIGBscyBjb25mdGVzdCcgd2lsbAorIyB3b3JrIHByb3Blcmx5IChpLmUuLCByZWZlciB0byBgY29uZnRlc3QuZXhlJyksIHdoaWxlIGl0IHdvbid0IHdpdGgKKyMgYHJtJy4KK2ZvciBhY19maWxlIGluIGNvbmZ0ZXN0LmV4ZSBjb25mdGVzdCBjb25mdGVzdC4qOyBkbworICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWUKKyAgY2FzZSAkYWNfZmlsZSBpbgorICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkgOzsKKyAgICAqLiogKSBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKKwkgIGJyZWFrOzsKKyAgICAqICkgYnJlYWs7OworICBlc2FjCitkb25lCitlbHNlCisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBleGVjdXRhYmxlczogY2Fubm90IGNvbXBpbGUgYW5kIGxpbmsKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1IDsgfQorZmkKK3JtIC1mIGNvbmZ0ZXN0IGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9leGVleHQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9leGVleHQiID4mNjsgfQorCitybSAtZiBjb25mdGVzdC4kYWNfZXh0CitFWEVFWFQ9JGFjX2N2X2V4ZWV4dAorYWNfZXhlZXh0PSRFWEVFWFQKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgoraW50CittYWluICgpCit7CitGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC5vdXQiLCAidyIpOworIHJldHVybiBmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMDsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCithY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzIGNvbmZ0ZXN0Lm91dCIKKyMgQ2hlY2sgdGhhdCB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCisjIHRoZSBjb21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmcuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IHllczsgdGhlbgorICB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorICBpZiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19jdl9leGVleHQnCisgIHsgeyBjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbgorICAgIGNyb3NzX2NvbXBpbGluZz1ubworICBlbHNlCisgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBtYXliZTsgdGhlbgorCWNyb3NzX2NvbXBpbGluZz15ZXMKKyAgICBlbHNlCisJeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiY2Fubm90IHJ1biBDIGNvbXBpbGVkIHByb2dyYW1zLgorSWYgeW91IG1lYW50IHRvIGNyb3NzIGNvbXBpbGUsIHVzZSBcYC0taG9zdCcuCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNSA7IH0KKyAgICBmaQorICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY3Jvc3NfY29tcGlsaW5nIiA+JjUKKyRhc19lY2hvICIkY3Jvc3NfY29tcGlsaW5nIiA+JjY7IH0KKworcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdCRhY19jdl9leGVleHQgY29uZnRlc3Qub3V0CithY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9vYmpleHQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqCitpZiB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6CisgIGZvciBhY19maWxlIGluIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqIGNvbmZ0ZXN0Lio7IGRvCisgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZTsKKyAgY2FzZSAkYWNfZmlsZSBpbgorICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSApIDs7CisgICAgKikgYWNfY3Zfb2JqZXh0PWBleHByICIkYWNfZmlsZSIgOiAnLipcLlwoLipcKSdgCisgICAgICAgYnJlYWs7OworICBlc2FjCitkb25lCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCit7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDUgOyB9CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX2N2X29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9vYmpleHQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9vYmpleHQiID4mNjsgfQorT0JKRVhUPSRhY19jdl9vYmpleHQKK2FjX29iamV4dD0kT0JKRVhUCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfY19jb21waWxlcl9nbnUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworI2lmbmRlZiBfX0dOVUNfXworICAgICAgIGNob2tlIG1lCisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2NvbXBpbGVyX2dudT15ZXMKK2Vsc2UKKyAgYWNfY29tcGlsZXJfZ251PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CithY19jdl9jX2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNjsgfQoraWYgdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCisgIEdDQz15ZXMKK2Vsc2UKKyAgR0NDPQorZmkKK2FjX3Rlc3RfQ0ZMQUdTPSR7Q0ZMQUdTK3NldH0KK2FjX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfZytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX3NhdmVfY193ZXJyb3JfZmxhZz0kYWNfY193ZXJyb3JfZmxhZworICAgYWNfY193ZXJyb3JfZmxhZz15ZXMKKyAgIGFjX2N2X3Byb2dfY2NfZz1ubworICAgQ0ZMQUdTPSItZyIKKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2NjX2c9eWVzCitlbHNlCisgIENGTEFHUz0iIgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCisJIENGTEFHUz0iLWciCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2NjX2c9eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBhY19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfZyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfZyIgPiY2OyB9CitpZiB0ZXN0ICIkYWNfdGVzdF9DRkxBR1MiID0gc2V0OyB0aGVuCisgIENGTEFHUz0kYWNfc2F2ZV9DRkxBR1MKK2VsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jY19nID0geWVzOyB0aGVuCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgQ0ZMQUdTPSItZyAtTzIiCisgIGVsc2UKKyAgICBDRkxBR1M9Ii1nIgorICBmaQorZWxzZQorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIENGTEFHUz0iLU8yIgorICBlbHNlCisgICAgQ0ZMQUdTPQorICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19jODkrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jdl9wcm9nX2NjX2M4OT1ubworYWNfc2F2ZV9DQz0kQ0MKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisvKiBNb3N0IG9mIHRoZSBmb2xsb3dpbmcgdGVzdHMgYXJlIHN0b2xlbiBmcm9tIFJDUyA1LjcncyBzcmMvY29uZi5zaC4gICovCitzdHJ1Y3QgYnVmIHsgaW50IHg7IH07CitGSUxFICogKCpyY3NvcGVuKSAoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpOworc3RhdGljIGNoYXIgKmUgKHAsIGkpCisgICAgIGNoYXIgKipwOworICAgICBpbnQgaTsKK3sKKyAgcmV0dXJuIHBbaV07Cit9CitzdGF0aWMgY2hhciAqZiAoY2hhciAqICgqZykgKGNoYXIgKiosIGludCksIGNoYXIgKipwLCAuLi4pCit7CisgIGNoYXIgKnM7CisgIHZhX2xpc3QgdjsKKyAgdmFfc3RhcnQgKHYscCk7CisgIHMgPSBnIChwLCB2YV9hcmcgKHYsaW50KSk7CisgIHZhX2VuZCAodik7CisgIHJldHVybiBzOworfQorCisvKiBPU0YgNC4wIENvbXBhcSBjYyBpcyBzb21lIHNvcnQgb2YgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdC4gIEl0IGhhcworICAgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgc3R1ZmYsIGJ1dCBub3QgJ1x4SEgnIGhleCBjaGFyYWN0ZXIgY29uc3RhbnRzLgorICAgVGhlc2UgZG9uJ3QgcHJvdm9rZSBhbiBlcnJvciB1bmZvcnR1bmF0ZWx5LCBpbnN0ZWFkIGFyZSBzaWxlbnRseSB0cmVhdGVkCisgICBhcyAneCcuICBUaGUgZm9sbG93aW5nIGluZHVjZXMgYW4gZXJyb3IsIHVudGlsIC1zdGQgaXMgYWRkZWQgdG8gZ2V0CisgICBwcm9wZXIgQU5TSSBtb2RlLiAgQ3VyaW91c2x5ICdceDAwJyE9J3gnIGFsd2F5cyBjb21lcyBvdXQgdHJ1ZSwgZm9yIGFuCisgICBhcnJheSBzaXplIGF0IGxlYXN0LiAgSXQncyBuZWNlc3NhcnkgdG8gd3JpdGUgJ1x4MDAnPT0wIHRvIGdldCBzb21ldGhpbmcKKyAgIHRoYXQncyB0cnVlIG9ubHkgd2l0aCAtc3RkLiAgKi8KK2ludCBvc2Y0X2NjX2FycmF5IFsnXHgwMCcgPT0gMCA/IDEgOiAtMV07CisKKy8qIElCTSBDIDYgZm9yIEFJWCBpcyBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LCBidXQgaXQgcmVwbGFjZXMgbWFjcm8gcGFyYW1ldGVycworICAgaW5zaWRlIHN0cmluZ3MgYW5kIGNoYXJhY3RlciBjb25zdGFudHMuICAqLworI2RlZmluZSBGT08oeCkgJ3gnCitpbnQgeGxjNl9jY19hcnJheVtGT08oYSkgPT0gJ3gnID8gMSA6IC0xXTsKKworaW50IHRlc3QgKGludCBpLCBkb3VibGUgeCk7CitzdHJ1Y3QgczEge2ludCAoKmYpIChpbnQgYSk7fTsKK3N0cnVjdCBzMiB7aW50ICgqZikgKGRvdWJsZSBhKTt9OworaW50IHBhaXJuYW1lcyAoaW50LCBjaGFyICoqLCBGSUxFICooKikoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpLCBpbnQsIGludCk7CitpbnQgYXJnYzsKK2NoYXIgKiphcmd2OworaW50CittYWluICgpCit7CityZXR1cm4gZiAoZSwgYXJndiwgMCkgIT0gYXJndlswXSAgfHwgIGYgKGUsIGFyZ3YsIDEpICE9IGFyZ3ZbMV07CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2ZvciBhY19hcmcgaW4gJycgLXFsYW5nbHZsPWV4dGM4OSAtcWxhbmdsdmw9YW5zaSAtc3RkIFwKKwktQWUgIi1BYSAtRF9IUFVYX1NPVVJDRSIgIi1YYyAtRF9fRVhURU5TSU9OU19fIgorZG8KKyAgQ0M9IiRhY19zYXZlX0NDICRhY19hcmciCisgIGlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19jODk9JGFjX2FyZworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0gInhubyIgJiYgYnJlYWsKK2RvbmUKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQKK0NDPSRhY19zYXZlX0NDCisKK2ZpCisjIEFDX0NBQ0hFX1ZBTAorY2FzZSAieCRhY19jdl9wcm9nX2NjX2M4OSIgaW4KKyAgeCkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm9uZSBuZWVkZWQiID4mNQorJGFzX2VjaG8gIm5vbmUgbmVlZGVkIiA+JjY7IH0gOzsKKyAgeG5vKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1bnN1cHBvcnRlZCIgPiY1CiskYXNfZWNobyAidW5zdXBwb3J0ZWQiID4mNjsgfSA7OworICAqKQorICAgIENDPSIkQ0MgJGFjX2N2X3Byb2dfY2NfYzg5IgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19jODkiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX2M4OSIgPiY2OyB9IDs7Citlc2FjCitpZiB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSB4bm87IHRoZW4gOgorCitmaQorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK2RlcGNjPSIkQ0MiICAgYW1fY29tcGlsZXJfbGlzdD0KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KKyAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAorICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgorICAjIGluc3RhbmNlIGl0IHdhcyByZXBvcnRlZCB0aGF0IG9uIEhQLVVYIHRoZSBnY2MgdGVzdCB3aWxsIGVuZCB1cAorICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgYEQnIC0tIGJlY2F1c2UgYC1NRCcgbWVhbnMgYHB1dCB0aGUgb3V0cHV0CisgICMgaW4gRCcuCisgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorICAjIENvcHkgZGVwY29tcCB0byBzdWJkaXIgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd29uJ3QgZmluZCBpdCBpZiB3ZSdyZQorICAjIHVzaW5nIGEgcmVsYXRpdmUgZGlyZWN0b3J5LgorICBjcCAiJGFtX2RlcGNvbXAiIGNvbmZ0ZXN0LmRpcgorICBjZCBjb25mdGVzdC5kaXIKKyAgIyBXZSB3aWxsIGJ1aWxkIG9iamVjdHMgYW5kIGRlcGVuZGVuY2llcyBpbiBhIHN1YmRpcmVjdG9yeSBiZWNhdXNlCisgICMgaXQgaGVscHMgdG8gZGV0ZWN0IGluYXBwbGljYWJsZSBkZXBlbmRlbmN5IG1vZGVzLiAgRm9yIGluc3RhbmNlCisgICMgYm90aCBUcnU2NCdzIGNjIGFuZCBJQ0Mgc3VwcG9ydCAtTUQgdG8gb3V0cHV0IGRlcGVuZGVuY2llcyBhcyBhCisgICMgc2lkZSBlZmZlY3Qgb2YgY29tcGlsYXRpb24sIGJ1dCBJQ0Mgd2lsbCBwdXQgdGhlIGRlcGVuZGVuY2llcyBpbgorICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGlsZSBUcnU2NCB3aWxsIHB1dCB0aGVtIGluIHRoZSBvYmplY3QKKyAgIyBkaXJlY3RvcnkuCisgIG1rZGlyIHN1YgorCisgIGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKKyAgaWYgdGVzdCAiJGFtX2NvbXBpbGVyX2xpc3QiID0gIiI7IHRoZW4KKyAgICAgYW1fY29tcGlsZXJfbGlzdD1gc2VkIC1uICdzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJyA8IC4vZGVwY29tcGAKKyAgZmkKKyAgYW1fX3VuaXZlcnNhbD1mYWxzZQorICBjYXNlICIgJGRlcGNjICIgaW4gIygKKyAgICAgKlwgLWFyY2hcICpcIC1hcmNoXCAqKSBhbV9fdW5pdmVyc2FsPXRydWUgOzsKKyAgICAgZXNhYworCisgIGZvciBkZXBtb2RlIGluICRhbV9jb21waWxlcl9saXN0OyBkbworICAgICMgU2V0dXAgYSBzb3VyY2Ugd2l0aCBtYW55IGRlcGVuZGVuY2llcywgYmVjYXVzZSBzb21lIGNvbXBpbGVycworICAgICMgbGlrZSB0byB3cmFwIGxhcmdlIGRlcGVuZGVuY3kgbGlzdHMgb24gY29sdW1uIDgwICh3aXRoIFwpLCBhbmQKKyAgICAjIHdlIHNob3VsZCBub3QgY2hvb3NlIGEgZGVwY29tcCBtb2RlIHdoaWNoIGlzIGNvbmZ1c2VkIGJ5IHRoaXMuCisgICAgIworICAgICMgV2UgbmVlZCB0byByZWNyZWF0ZSB0aGVzZSBmaWxlcyBmb3IgZWFjaCB0ZXN0LCBhcyB0aGUgY29tcGlsZXIgbWF5CisgICAgIyBvdmVyd3JpdGUgc29tZSBvZiB0aGVtIHdoZW4gdGVzdGluZyB3aXRoIG9ic2N1cmUgY29tbWFuZCBsaW5lcy4KKyAgICAjIFRoaXMgaGFwcGVucyBhdCBsZWFzdCB3aXRoIHRoZSBBSVggQyBjb21waWxlci4KKyAgICA6ID4gc3ViL2NvbmZ0ZXN0LmMKKyAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNjsgZG8KKyAgICAgIGVjaG8gJyNpbmNsdWRlICJjb25mdHN0JyRpJy5oIicgPj4gc3ViL2NvbmZ0ZXN0LmMKKyAgICAgICMgVXNpbmcgYDogPiBzdWIvY29uZnRzdCRpLmgnIGNyZWF0ZXMgb25seSBzdWIvY29uZnRzdDEuaCB3aXRoCisgICAgICAjIFNvbGFyaXMgOCdzIHsvdXNyLH0vYmluL3NoLgorICAgICAgdG91Y2ggc3ViL2NvbmZ0c3QkaS5oCisgICAgZG9uZQorICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKKworICAgICMgV2UgY2hlY2sgd2l0aCBgLWMnIGFuZCBgLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgorICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5CisgICAgIyBoYW5kbGUgYC1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuICBBbHNvLCBzb21lIEludGVsCisgICAgIyB2ZXJzaW9ucyBoYWQgdHJvdWJsZSB3aXRoIG91dHB1dCBpbiBzdWJkaXJzCisgICAgYW1fX29iaj1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICBhbV9fbWludXNfb2JqPSItbyAkYW1fX29iaiIKKyAgICBjYXNlICRkZXBtb2RlIGluCisgICAgZ2NjKQorICAgICAgIyBUaGlzIGRlcG1vZGUgY2F1c2VzIGEgY29tcGlsZXIgcmFjZSBpbiB1bml2ZXJzYWwgbW9kZS4KKyAgICAgIHRlc3QgIiRhbV9fdW5pdmVyc2FsIiA9IGZhbHNlIHx8IGNvbnRpbnVlCisgICAgICA7OworICAgIG5vc2lkZWVmZmVjdCkKKyAgICAgICMgYWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAorICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZAorICAgICAgaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgPSB4eWVzOyB0aGVuCisJY29udGludWUKKyAgICAgIGVsc2UKKwlicmVhaworICAgICAgZmkKKyAgICAgIDs7CisgICAgbXN2aXN1YWxjcHAgfCBtc3ZjbXN5cykKKyAgICAgICMgVGhpcyBjb21waWxlciB3b24ndCBncm9rIGAtYyAtbycsIGJ1dCBhbHNvLCB0aGUgbWludXNvIHRlc3QgaGFzCisgICAgICAjIG5vdCBydW4geWV0LiAgVGhlc2UgZGVwbW9kZXMgYXJlIGxhdGUgZW5vdWdoIGluIHRoZSBnYW1lLCBhbmQKKyAgICAgICMgc28gd2VhayB0aGF0IHRoZWlyIGZ1bmN0aW9uaW5nIHNob3VsZCBub3QgYmUgaW1wYWN0ZWQuCisgICAgICBhbV9fb2JqPWNvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgICBhbV9fbWludXNfb2JqPQorICAgICAgOzsKKyAgICBub25lKSBicmVhayA7OworICAgIGVzYWMKKyAgICBpZiBkZXBtb2RlPSRkZXBtb2RlIFwKKyAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PSRhbV9fb2JqIFwKKyAgICAgICBkZXBmaWxlPXN1Yi9jb25mdGVzdC5QbyB0bXBkZXBmaWxlPXN1Yi9jb25mdGVzdC5UUG8gXAorICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jICRhbV9fbWludXNfb2JqIHN1Yi9jb25mdGVzdC5jIFwKKyAgICAgICAgID4vZGV2L251bGwgMj5jb25mdGVzdC5lcnIgJiYKKyAgICAgICBncmVwIHN1Yi9jb25mdHN0MS5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDYuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgJGFtX19vYmogc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKKyAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCisgICAgICAjIHRoYXQgc2F5cyBhbiBvcHRpb24gd2FzIGlnbm9yZWQgb3Igbm90IHN1cHBvcnRlZC4KKyAgICAgICMgV2hlbiBnaXZlbiAtTVAsIGljYyA3LjAgYW5kIDcuMSBjb21wbGFpbiB0aHVzbHk6CisgICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgd2FybmluZzogaWdub3Jpbmcgb3B0aW9uICctTSc7IG5vIGFyZ3VtZW50IHJlcXVpcmVkCisgICAgICAjIFRoZSBkaWFnbm9zaXMgY2hhbmdlZCBpbiBpY2MgOC4wOgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHJlbWFyazogb3B0aW9uICctTVAnIG5vdCBzdXBwb3J0ZWQKKyAgICAgIGlmIChncmVwICdpZ25vcmluZyBvcHRpb24nIGNvbmZ0ZXN0LmVyciB8fAorICAgICAgICAgIGdyZXAgJ25vdCBzdXBwb3J0ZWQnIGNvbmZ0ZXN0LmVycikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgICAgICAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9JGRlcG1vZGUKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorCisgIGNkIC4uCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKK2Vsc2UKKyAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNQorJGFzX2VjaG8gIiRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2OyB9CitDQ0RFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUKKworIGlmCisgIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCisgICYmIHRlc3QgIiRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzOyB0aGVuCisgIGFtX19mYXN0ZGVwQ0NfVFJVRT0KKyAgYW1fX2Zhc3RkZXBDQ19GQUxTRT0nIycKK2Vsc2UKKyAgYW1fX2Zhc3RkZXBDQ19UUlVFPScjJworICBhbV9fZmFzdGRlcENDX0ZBTFNFPQorZmkKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9TRUQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAgICAgICAgICAgYWNfc2NyaXB0PXMvYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEvYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiLworICAgICBmb3IgYWNfaSBpbiAxIDIgMyA0IDUgNiA3OyBkbworICAgICAgIGFjX3NjcmlwdD0iJGFjX3NjcmlwdCRhc19ubCRhY19zY3JpcHQiCisgICAgIGRvbmUKKyAgICAgZWNobyAiJGFjX3NjcmlwdCIgMj4vZGV2L251bGwgfCBzZWQgOTlxID5jb25mdGVzdC5zZWQKKyAgICAgeyBhY19zY3JpcHQ9OyB1bnNldCBhY19zY3JpcHQ7fQorICAgICBpZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgorICBhY19wYXRoX1NFRF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gc2VkIGdzZWQ7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX1NFRD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfU0VEIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9TRUQiOyB9IHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9TRUQgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX1NFRAorY2FzZSBgIiRhY19wYXRoX1NFRCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9TRUQ9IiRhY19wYXRoX1NFRCIgYWNfcGF0aF9TRURfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJycgPj4gImNvbmZ0ZXN0Lm5sIgorICAgICIkYWNfcGF0aF9TRUQiIC1mIGNvbmZ0ZXN0LnNlZCA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfU0VEX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX1NFRD0iJGFjX3BhdGhfU0VEIgorICAgICAgYWNfcGF0aF9TRURfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisgICAgICAkYWNfcGF0aF9TRURfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKKyAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX1NFRCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBzZWQgY291bGQgYmUgZm91bmQgaW4gXCRQQVRIIiAiJExJTkVOTyIgNQorICBmaQorZWxzZQorICBhY19jdl9wYXRoX1NFRD0kU0VECitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX1NFRCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfU0VEIiA+JjY7IH0KKyBTRUQ9IiRhY19jdl9wYXRoX1NFRCIKKyAgcm0gLWYgY29uZnRlc3Quc2VkCisKK3Rlc3QgLXogIiRTRUQiICYmIFNFRD1zZWQKK1hzZWQ9IiRTRUQgLWUgMXMvXlgvLyIKKworCisKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9HUkVQK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgIGFjX3BhdGhfR1JFUF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIGdyZXAgZ2dyZXA7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX0dSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICB7IHRlc3QgLWYgIiRhY19wYXRoX0dSRVAiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX0dSRVAiOyB9IHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9HUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9HUkVQCitjYXNlIGAiJGFjX3BhdGhfR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIiBhY19wYXRoX0dSRVBfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0dSRVAnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfR1JFUCIgLWUgJ0dSRVAkJyAtZSAnLShjYW5ub3QgbWF0Y2gpLScgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0dSRVBfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIKKyAgICAgIGFjX3BhdGhfR1JFUF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX0dSRVBfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKKyAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0dSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfR1JFUD0kR1JFUAorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9HUkVQIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9HUkVQIiA+JjY7IH0KKyBHUkVQPSIkYWNfY3ZfcGF0aF9HUkVQIgorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGVncmVwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX0VHUkVQK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgZWNobyBhIHwgJEdSRVAgLUUgJyhhfGIpJyA+L2Rldi9udWxsIDI+JjEKKyAgIHRoZW4gYWNfY3ZfcGF0aF9FR1JFUD0iJEdSRVAgLUUiCisgICBlbHNlCisgICAgIGlmIHRlc3QgLXogIiRFR1JFUCI7IHRoZW4KKyAgYWNfcGF0aF9FR1JFUF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIGVncmVwOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9FR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfRUdSRVAiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX0VHUkVQIjsgfSB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfRUdSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0VHUkVQCitjYXNlIGAiJGFjX3BhdGhfRUdSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIiBhY19wYXRoX0VHUkVQX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICdFR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgorICAgICIkYWNfcGF0aF9FR1JFUCIgJ0VHUkVQJCcgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0VHUkVQX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX0VHUkVQPSIkYWNfcGF0aF9FR1JFUCIKKyAgICAgIGFjX3BhdGhfRUdSRVBfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisgICAgICAkYWNfcGF0aF9FR1JFUF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQorICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfRUdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgZWdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQorICBmaQorZWxzZQorICBhY19jdl9wYXRoX0VHUkVQPSRFR1JFUAorZmkKKworICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfRUdSRVAiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wYXRoX0VHUkVQIiA+JjY7IH0KKyBFR1JFUD0iJGFjX2N2X3BhdGhfRUdSRVAiCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZmdyZXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGZncmVwLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfRkdSRVArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiBlY2hvICdhYipjJyB8ICRHUkVQIC1GICdhYipjJyA+L2Rldi9udWxsIDI+JjEKKyAgIHRoZW4gYWNfY3ZfcGF0aF9GR1JFUD0iJEdSRVAgLUYiCisgICBlbHNlCisgICAgIGlmIHRlc3QgLXogIiRGR1JFUCI7IHRoZW4KKyAgYWNfcGF0aF9GR1JFUF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIGZncmVwOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9GR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfRkdSRVAiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX0ZHUkVQIjsgfSB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfRkdSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0ZHUkVQCitjYXNlIGAiJGFjX3BhdGhfRkdSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfRkdSRVA9IiRhY19wYXRoX0ZHUkVQIiBhY19wYXRoX0ZHUkVQX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICdGR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgorICAgICIkYWNfcGF0aF9GR1JFUCIgRkdSRVAgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0ZHUkVQX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX0ZHUkVQPSIkYWNfcGF0aF9GR1JFUCIKKyAgICAgIGFjX3BhdGhfRkdSRVBfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisgICAgICAkYWNfcGF0aF9GR1JFUF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQorICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfRkdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgZmdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQorICBmaQorZWxzZQorICBhY19jdl9wYXRoX0ZHUkVQPSRGR1JFUAorZmkKKworICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfRkdSRVAiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wYXRoX0ZHUkVQIiA+JjY7IH0KKyBGR1JFUD0iJGFjX2N2X3BhdGhfRkdSRVAiCisKKwordGVzdCAteiAiJEdSRVAiICYmIEdSRVA9Z3JlcAorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWdudS1sZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9nbnVfbGQ7IHRlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllcworZWxzZQorICB3aXRoX2dudV9sZD1ubworZmkKKworYWNfcHJvZz1sZAoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQy4uLiAiID4mNjsgfQorICBjYXNlICRob3N0IGluCisgICotKi1taW5ndyopCisgICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuIHdoaWNoIHVwc2V0cyBtaW5ndworICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKKyAgKikKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7CisgIGVzYWMKKyAgY2FzZSAkYWNfcHJvZyBpbgorICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgorICAgIFtcXC9dKiB8ID86W1xcL10qKQorICAgICAgcmVfZGlyZWx0PScvW14vXVteL10qL1wuXC4vJworICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCisgICAgICBhY19wcm9nPWAkRUNITyAiJGFjX3Byb2cifCAkU0VEICdzJVxcXFwlLyVnJ2AKKyAgICAgIHdoaWxlICRFQ0hPICIkYWNfcHJvZyIgfCAkR1JFUCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKwlhY19wcm9nPWAkRUNITyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKKyAgICAgIGRvbmUKKyAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgorICAgICAgOzsKKyAgIiIpCisgICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCisgICAgYWNfcHJvZz1sZAorICAgIDs7CisgICopCisgICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgorICAgIHdpdGhfZ251X2xkPXVua25vd24KKyAgICA7OworICBlc2FjCitlbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBHTlUgbGQuLi4gIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igbm9uLUdOVSBsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igbm9uLUdOVSBsZC4uLiAiID4mNjsgfQorZmkKK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9MRCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRMRCI7IHRoZW4KKyAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTEQ9IiRhY19kaXIvJGFjX3Byb2ciCisgICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCisgICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgdmFyaWFudHMgb2YgR05VIGxkIG9ubHkgYWNjZXB0IC12LgorICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCisgICAgICBjYXNlIGAiJGx0X2N2X3BhdGhfTEQiIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKyAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsKKwk7OworICAgICAgKikKKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhaworCTs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRsdF9zYXZlX2lmcyIKK2Vsc2UKKyAgbHRfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KK2ZpCitmaQorCitMRD0iJGx0X2N2X3BhdGhfTEQiCitpZiB0ZXN0IC1uICIkTEQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTEQiID4mNQorJGFzX2VjaG8gIiRMRCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKK3Rlc3QgLXogIiRMRCIgJiYgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIIiAiJExJTkVOTyIgNQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2dudV9sZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkcyBvbmx5IGFjY2VwdCAtdi4KK2Nhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9eWVzCisgIDs7CisqKQorICBsdF9jdl9wcm9nX2dudV9sZD1ubworICA7OworZXNhYworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2dudV9sZCIgPiY2OyB9Cit3aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlciAobm0pIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIgKG5tKS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wYXRoX05NK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE5NIjsgdGhlbgorICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgbHRfY3ZfcGF0aF9OTT0iJE5NIgorZWxzZQorICBsdF9ubV90b19jaGVjaz0iJHthY190b29sX3ByZWZpeH1ubSIKKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IiAmJiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorICAgIGx0X25tX3RvX2NoZWNrPSIkbHRfbm1fdG9fY2hlY2sgbm0iCisgIGZpCisgIGZvciBsdF90bXBfbm0gaW4gJGx0X25tX3RvX2NoZWNrOyBkbworICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAgIGZvciBhY19kaXIgaW4gJFBBVEggL3Vzci9jY3MvYmluL2VsZiAvdXNyL2Njcy9iaW4gL3Vzci91Y2IgL2JpbjsgZG8KKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICAgIHRtcF9ubT0iJGFjX2Rpci8kbHRfdG1wX25tIgorICAgICAgaWYgdGVzdCAtZiAiJHRtcF9ubSIgfHwgdGVzdCAtZiAiJHRtcF9ubSRhY19leGVleHQiIDsgdGhlbgorCSMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBubSBhY2NlcHRzIGEgQlNELWNvbXBhdCBmbGFnLgorCSMgQWRkaW5nIHRoZSBgc2VkIDFxJyBwcmV2ZW50cyBmYWxzZSBwb3NpdGl2ZXMgb24gSFAtVVgsIHdoaWNoIHNheXM6CisJIyAgIG5tOiB1bmtub3duIG9wdGlvbiAiQiIgaWdub3JlZAorCSMgVHJ1NjQncyBubSBjb21wbGFpbnMgdGhhdCAvZGV2L251bGwgaXMgYW4gaW52YWxpZCBvYmplY3QgZmlsZQorCWNhc2UgYCIkdG1wX25tIiAtQiAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorCSovZGV2L251bGwqIHwgKidJbnZhbGlkIGZpbGUgb3Igb2JqZWN0IHR5cGUnKikKKwkgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLUIiCisJICBicmVhaworCSAgOzsKKwkqKQorCSAgY2FzZSBgIiR0bXBfbm0iIC1wIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisJICAqL2Rldi9udWxsKikKKwkgICAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtcCIKKwkgICAgYnJlYWsKKwkgICAgOzsKKwkgICopCisJICAgIGx0X2N2X3BhdGhfTk09JHtsdF9jdl9wYXRoX05NPSIkdG1wX25tIn0gIyBrZWVwIHRoZSBmaXJzdCBtYXRjaCwgYnV0CisJICAgIGNvbnRpbnVlICMgc28gdGhhdCB3ZSBjYW4gdHJ5IHRvIGZpbmQgb25lIHRoYXQgc3VwcG9ydHMgQlNEIGZsYWdzCisJICAgIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgZG9uZQorICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICBkb25lCisgIDogJHtsdF9jdl9wYXRoX05NPW5vfQorZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfTk0iID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wYXRoX05NIiA+JjY7IH0KK2lmIHRlc3QgIiRsdF9jdl9wYXRoX05NIiAhPSAibm8iOyB0aGVuCisgIE5NPSIkbHRfY3ZfcGF0aF9OTSIKK2Vsc2UKKyAgIyBEaWRuJ3QgZmluZCBhbnkgQlNEIGNvbXBhdGlibGUgbmFtZSBsaXN0ZXIsIGxvb2sgZm9yIGR1bXBiaW4uCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgZm9yIGFjX3Byb2cgaW4gImR1bXBiaW4gLXN5bWJvbHMiICJsaW5rIC1kdW1wIC1zeW1ib2xzIgorICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19EVU1QQklOK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuCisgIGFjX2N2X3Byb2dfRFVNUEJJTj0iJERVTVBCSU4iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19EVU1QQklOPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitEVU1QQklOPSRhY19jdl9wcm9nX0RVTVBCSU4KK2lmIHRlc3QgLW4gIiREVU1QQklOIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERVTVBCSU4iID4mNQorJGFzX2VjaG8gIiREVU1QQklOIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICB0ZXN0IC1uICIkRFVNUEJJTiIgJiYgYnJlYWsKKyAgZG9uZQorZmkKK2lmIHRlc3QgLXogIiREVU1QQklOIjsgdGhlbgorICBhY19jdF9EVU1QQklOPSREVU1QQklOCisgIGZvciBhY19wcm9nIGluICJkdW1wYmluIC1zeW1ib2xzIiAibGluayAtZHVtcCAtc3ltYm9scyIKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RVTVBCSU4iOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTj0iJGFjX2N0X0RVTVBCSU4iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9EVU1QQklOPSRhY19jdl9wcm9nX2FjX2N0X0RVTVBCSU4KK2lmIHRlc3QgLW4gIiRhY19jdF9EVU1QQklOIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RVTVBCSU4iID4mNQorJGFzX2VjaG8gIiRhY19jdF9EVU1QQklOIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJGFjX2N0X0RVTVBCSU4iICYmIGJyZWFrCitkb25lCisKKyAgaWYgdGVzdCAieCRhY19jdF9EVU1QQklOIiA9IHg7IHRoZW4KKyAgICBEVU1QQklOPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIERVTVBCSU49JGFjX2N0X0RVTVBCSU4KKyAgZmkKK2ZpCisKKworICBpZiB0ZXN0ICIkRFVNUEJJTiIgIT0gIjoiOyB0aGVuCisgICAgTk09IiREVU1QQklOIgorICBmaQorZmkKK3Rlc3QgLXogIiROTSIgJiYgTk09bm0KKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdGhlIG5hbWUgbGlzdGVyICgkTk0pIGludGVyZmFjZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB0aGUgbmFtZSBsaXN0ZXIgKCROTSkgaW50ZXJmYWNlLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X25tX2ludGVyZmFjZStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X25tX2ludGVyZmFjZT0iQlNEIG5tIgorICBlY2hvICJpbnQgc29tZV92YXJpYWJsZSA9IDA7IiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjU2NjM6ICRhY19jb21waWxlXCIiID4mNSkKKyAgKGV2YWwgIiRhY19jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjU2NjY6ICROTSBcXFwiY29uZnRlc3QuJGFjX29iamV4dFxcXCJcIiIgPiY1KQorICAoZXZhbCAiJE5NIFwiY29uZnRlc3QuJGFjX29iamV4dFwiIiAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dCkKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjU2Njk6IG91dHB1dFwiIiA+JjUpCisgIGNhdCBjb25mdGVzdC5vdXQgPiY1CisgIGlmICRHUkVQICdFeHRlcm5hbC4qc29tZV92YXJpYWJsZScgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3Zfbm1faW50ZXJmYWNlPSJNUyBkdW1wYmluIgorICBmaQorICBybSAtZiBjb25mdGVzdCoKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X25tX2ludGVyZmFjZSIgPiY1CiskYXNfZWNobyAiJGx0X2N2X25tX2ludGVyZmFjZSIgPiY2OyB9CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzLi4uICIgPiY2OyB9CitMTl9TPSRhc19sbl9zCitpZiB0ZXN0ICIkTE5fUyIgPSAibG4gLXMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubywgdXNpbmcgJExOX1MiID4mNQorJGFzX2VjaG8gIm5vLCB1c2luZyAkTE5fUyIgPiY2OyB9CitmaQorCisjIGZpbmQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX21heF9jbWRfbGVuK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgICBpPTAKKyAgdGVzdHN0cmluZz0iQUJDRCIKKworICBjYXNlICRidWlsZF9vcyBpbgorICBtc2Rvc2RqZ3BwKikKKyAgICAjIE9uIERKR1BQLCB0aGlzIHRlc3QgY2FuIGJsb3cgdXAgcHJldHR5IGJhZGx5IGR1ZSB0byBwcm9ibGVtcyBpbiBsaWJjCisgICAgIyAoYW55IHNpbmdsZSBhcmd1bWVudCBleGNlZWRpbmcgMjAwMCBieXRlcyBjYXVzZXMgYSBidWZmZXIgb3ZlcnJ1bgorICAgICMgZHVyaW5nIGdsb2IgZXhwYW5zaW9uKS4gIEV2ZW4gaWYgaXQgd2VyZSBmaXhlZCwgdGhlIHJlc3VsdCBvZiB0aGlzCisgICAgIyBjaGVjayB3b3VsZCBiZSBsYXJnZXIgdGhhbiBpdCBzaG91bGQgYmUuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEyMjg4OyAgICAjIDEySyBpcyBhYm91dCByaWdodAorICAgIDs7CisKKyAgZ251KikKKyAgICAjIFVuZGVyIEdOVSBIdXJkLCB0aGlzIHRlc3QgaXMgbm90IHJlcXVpcmVkIGJlY2F1c2UgdGhlcmUgaXMKKyAgICAjIG5vIGxpbWl0IHRvIHRoZSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KKyAgICAjIExpYnRvb2wgd2lsbCBpbnRlcnByZXQgLTEgYXMgbm8gbGltaXQgd2hhdHNvZXZlcgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMTsKKyAgICA7OworCisgIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCisgICAgIyBPbiBXaW45eC9NRSwgdGhpcyB0ZXN0IGJsb3dzIHVwIC0tIGl0IHN1Y2NlZWRzLCBidXQgdGFrZXMKKyAgICAjIGFib3V0IDUgbWludXRlcyBhcyB0aGUgdGVzdHN0cmluZyBncm93cyBleHBvbmVudGlhbGx5LgorICAgICMgV29yc2UsIHNpbmNlIDl4L01FIGFyZSBub3QgcHJlLWVtcHRpdmVseSBtdWx0aXRhc2tpbmcsCisgICAgIyB5b3UgZW5kIHVwIHdpdGggYSAiZnJvemVuIiBjb21wdXRlciwgZXZlbiB0aG91Z2ggd2l0aCBwYXRpZW5jZQorICAgICMgdGhlIHRlc3QgZXZlbnR1YWxseSBzdWNjZWVkcyAod2l0aCBhIG1heCBsaW5lIGxlbmd0aCBvZiAyNTZrKS4KKyAgICAjIEluc3RlYWQsIGxldCdzIGp1c3QgcHVudDogdXNlIHRoZSBtaW5pbXVtIGxpbmVsZW5ndGggcmVwb3J0ZWQgYnkKKyAgICAjIGFsbCBvZiB0aGUgc3VwcG9ydGVkIHBsYXRmb3JtczogODE5MiAob24gTlQvMksvWFApLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgYW1pZ2FvcyopCisgICAgIyBPbiBBbWlnYU9TIHdpdGggcGRrc2gsIHRoaXMgdGVzdCB0YWtlcyBob3VycywgbGl0ZXJhbGx5LgorICAgICMgU28gd2UganVzdCBwdW50IGFuZCB1c2UgYSBtaW5pbXVtIGxpbmUgbGVuZ3RoIG9mIDgxOTIuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBuZXRic2QqIHwgZnJlZWJzZCogfCBvcGVuYnNkKiB8IGRhcndpbiogfCBkcmFnb25mbHkqKQorICAgICMgVGhpcyBoYXMgYmVlbiBhcm91bmQgc2luY2UgMzg2QlNELCBhdCBsZWFzdC4gIExpa2VseSBmdXJ0aGVyLgorICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY3RsOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKKyAgICBlbGlmIHRlc3QgLXggL3Vzci9zYmluL3N5c2N0bDsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvdXNyL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAorICAgIGVsc2UKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj02NTUzNgkjIHVzYWJsZSBkZWZhdWx0IGZvciBhbGwgQlNEcworICAgIGZpCisgICAgIyBBbmQgYWRkIGEgc2FmZXR5IHpvbmUKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCisgICAgOzsKKworICBpbnRlcml4KikKKyAgICAjIFdlIGtub3cgdGhlIHZhbHVlIDI2MjE0NCBhbmQgaGFyZGNvZGUgaXQgd2l0aCBhIHNhZmV0eSB6b25lIChsaWtlIEJTRCkKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTk2NjA4CisgICAgOzsKKworICBvc2YqKQorICAgICMgRHIuIEhhbnMgRWtrZWhhcmQgUGxlc3NlciByZXBvcnRzIHNlZWluZyBhIGtlcm5lbCBwYW5pYyBydW5uaW5nIGNvbmZpZ3VyZQorICAgICMgZHVlIHRvIHRoaXMgdGVzdCB3aGVuIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXQgaXMgMSBvbiBUcnU2NC4gSXQgaXMgbm90CisgICAgIyBuaWNlIHRvIGNhdXNlIGtlcm5lbCBwYW5pY3Mgc28gbGV0cyBhdm9pZCB0aGUgbG9vcCBiZWxvdy4KKyAgICAjIEZpcnN0IHNldCBhIHJlYXNvbmFibGUgZGVmYXVsdC4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTYzODQKKyAgICAjCisgICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjb25maWc7IHRoZW4KKyAgICAgIGNhc2UgYC9zYmluL3N5c2NvbmZpZyAtcSBwcm9jIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXRgIGluCisgICAgICAgICoxKikgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICA7OworICBzY28zLjJ2NSopCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEwMjQwMAorICAgIDs7CisgIHN5c3Y1KiB8IHNjbzV2NiogfCBzeXN2NC4ydXcyKikKKyAgICBrYXJnbWF4PWBncmVwIEFSR19NQVggL2V0Yy9jb25mL2NmLmQvc3R1bmUgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAtbiAiJGthcmdtYXgiOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGVjaG8gJGthcmdtYXggfCBzZWQgJ3MvLipbCSBdLy8nYAorICAgIGVsc2UKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0zMjc2OAorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YChnZXRjb25mIEFSR19NQVgpIDI+IC9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCisgICAgZWxzZQorICAgICAgIyBNYWtlIHRlc3RzdHJpbmcgYSBsaXR0bGUgYmlnZ2VyIGJlZm9yZSB3ZSBkbyBhbnl0aGluZyB3aXRoIGl0LgorICAgICAgIyBhIDFLIHN0cmluZyBzaG91bGQgYmUgYSByZWFzb25hYmxlIHN0YXJ0LgorICAgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDsgZG8KKyAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCisgICAgICBkb25lCisgICAgICBTSEVMTD0ke1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fQorICAgICAgIyBJZiB0ZXN0IGlzIG5vdCBhIHNoZWxsIGJ1aWx0LWluLCB3ZSdsbCBwcm9iYWJseSBlbmQgdXAgY29tcHV0aW5nIGEKKyAgICAgICMgbWF4aW11bSBsZW5ndGggdGhhdCBpcyBvbmx5IGhhbGYgb2YgdGhlIGFjdHVhbCBtYXhpbXVtIGxlbmd0aCwgYnV0CisgICAgICAjIHdlIGNhbid0IHRlbGwuCisgICAgICB3aGlsZSB7IHRlc3QgIlgiYCRTSEVMTCAkMCAtLWZhbGxiYWNrLWVjaG8gIlgkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIiAyPi9kZXYvbnVsbGAgXAorCSAgICAgICAgID0gIlhYJHRlc3RzdHJpbmckdGVzdHN0cmluZyI7IH0gPi9kZXYvbnVsbCAyPiYxICYmCisJICAgICAgdGVzdCAkaSAhPSAxNyAjIDEvMiBNQiBzaG91bGQgYmUgZW5vdWdoCisgICAgICBkbworICAgICAgICBpPWBleHByICRpICsgMWAKKyAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCisgICAgICBkb25lCisgICAgICAjIE9ubHkgY2hlY2sgdGhlIHN0cmluZyBsZW5ndGggb3V0c2lkZSB0aGUgbG9vcC4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAiWCR0ZXN0c3RyaW5nIiA6ICIuKiIgMj4mMWAKKyAgICAgIHRlc3RzdHJpbmc9CisgICAgICAjIEFkZCBhIHNpZ25pZmljYW50IHNhZmV0eSBmYWN0b3IgYmVjYXVzZSBDKysgY29tcGlsZXJzIGNhbiB0YWNrIG9uCisgICAgICAjIG1hc3NpdmUgYW1vdW50cyBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoZQorICAgICAgIyBsaW5rZXIuICBJdCBhcHBlYXJzIGFzIHRob3VnaCAxLzIgaXMgYSB1c2FibGUgdmFsdWUuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyAyYAorICAgIGZpCisgICAgOzsKKyAgZXNhYworCitmaQorCitpZiB0ZXN0IC1uICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIiA+JjUKKyRhc19lY2hvICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUiID4mNQorJGFzX2VjaG8gIm5vbmUiID4mNjsgfQorZmkKK21heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KKworCisKKworCisKKzogJHtDUD0iY3AgLWYifQorOiAke01WPSJtdiAtZiJ9Cis6ICR7Uk09InJtIC1mIn0KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMuLi4gIiA+JjY7IH0KKyMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCit4c2lfc2hlbGw9bm8KKyggX2x0X2R1bW15PSJhL2IvYyIKKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKyAgICAgID0gYyxhL2IsLCBcCisgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICYmIHhzaV9zaGVsbD15ZXMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkeHNpX3NoZWxsIiA+JjUKKyRhc19lY2hvICIkeHNpX3NoZWxsIiA+JjY7IH0KKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIFwiKz1cIiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBcIis9XCIuLi4gIiA+JjY7IH0KK2x0X3NoZWxsX2FwcGVuZD1ubworKCBmb289YmFyOyBzZXQgZm9vIGJhejsgZXZhbCAiJDErPVwkMiIgJiYgdGVzdCAiJGZvbyIgPSBiYXJiYXogKSBcCisgICAgPi9kZXYvbnVsbCAyPiYxIFwKKyAgJiYgbHRfc2hlbGxfYXBwZW5kPXllcworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9zaGVsbF9hcHBlbmQiID4mNQorJGFzX2VjaG8gIiRsdF9zaGVsbF9hcHBlbmQiID4mNjsgfQorCisKK2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBsdF91bnNldD11bnNldAorZWxzZQorICBsdF91bnNldD1mYWxzZQorZmkKKworCisKKworCisjIHRlc3QgRUJDRElDIG9yIEFTQ0lJCitjYXNlIGBlY2hvIFh8dHIgWCAnXDEwMSdgIGluCisgQSkgIyBBU0NJSSBiYXNlZCBzeXN0ZW0KKyAgICAjIFxuIGlzIG5vdCBpbnRlcnByZXRlZCBjb3JyZWN0bHkgYnkgU29sYXJpcyA4IC91c3IvdWNiL3RyCisgIGx0X1NQMk5MPSd0ciBcMDQwIFwwMTInCisgIGx0X05MMlNQPSd0ciBcMDE1XDAxMiBcMDQwXDA0MCcKKyAgOzsKKyAqKSAjIEVCQ0RJQyBiYXNlZCBzeXN0ZW0KKyAgbHRfU1AyTkw9J3RyIFwxMDAgXG4nCisgIGx0X05MMlNQPSd0ciBcclxuIFwxMDBcMTAwJworICA7OworZXNhYworCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfbGRfcmVsb2FkX2ZsYWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9sZF9yZWxvYWRfZmxhZz0nLXInCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9sZF9yZWxvYWRfZmxhZyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2xkX3JlbG9hZF9mbGFnIiA+JjY7IH0KK3JlbG9hZF9mbGFnPSRsdF9jdl9sZF9yZWxvYWRfZmxhZworY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyIiIHwgIiAiKikgOzsKKyopIHJlbG9hZF9mbGFnPSIgJHJlbG9hZF9mbGFnIiA7OworZXNhYworcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZWxzZQorICAgICAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGZpCisgICAgOzsKK2VzYWMKKworCisKKworCisKKworCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfT0JKRFVNUCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRPQkpEVU1QIjsgdGhlbgorICBhY19jdl9wcm9nX09CSkRVTVA9IiRPQkpEVU1QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfT0JKRFVNUD0iJHthY190b29sX3ByZWZpeH1vYmpkdW1wIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK09CSkRVTVA9JGFjX2N2X3Byb2dfT0JKRFVNUAoraWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT0JKRFVNUCIgPiY1CiskYXNfZWNobyAiJE9CSkRVTVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX09CSkRVTVAiOyB0aGVuCisgIGFjX2N0X09CSkRVTVA9JE9CSkRVTVAKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBvYmpkdW1wOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X09CSkRVTVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUD0iJGFjX2N0X09CSkRVTVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSJvYmpkdW1wIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X09CSkRVTVA9JGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUAoraWYgdGVzdCAtbiAiJGFjX2N0X09CSkRVTVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT0JKRFVNUCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X09CSkRVTVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9PQkpEVU1QIiA9IHg7IHRoZW4KKyAgICBPQkpEVU1QPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBPQkpEVU1QPSRhY19jdF9PQkpEVU1QCisgIGZpCitlbHNlCisgIE9CSkRVTVA9IiRhY19jdl9wcm9nX09CSkRVTVAiCitmaQorCit0ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byByZWNvZ25pemUgZGVwZW5kZW50IGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE1BR0lDX0NNRCcKK2x0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPQorbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J3Vua25vd24nCisjIE5lZWQgdG8gc2V0IHRoZSBwcmVjZWRpbmcgdmFyaWFibGUgb24gYWxsIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQKKyMgaW50ZXJsaWJyYXJ5IGRlcGVuZGVuY2llcy4KKyMgJ25vbmUnIC0tIGRlcGVuZGVuY2llcyBub3Qgc3VwcG9ydGVkLgorIyBgdW5rbm93bicgLS0gc2FtZSBhcyBub25lLCBidXQgZG9jdW1lbnRzIHRoYXQgd2UgcmVhbGx5IGRvbid0IGtub3cuCisjICdwYXNzX2FsbCcgLS0gYWxsIGRlcGVuZGVuY2llcyBwYXNzZWQgd2l0aCBubyBjaGVja3MuCisjICd0ZXN0X2NvbXBpbGUnIC0tIGNoZWNrIGJ5IG1ha2luZyB0ZXN0IHByb2dyYW0uCisjICdmaWxlX21hZ2ljIFtbcmVnZXhdXScgLS0gY2hlY2sgYnkgbG9va2luZyBmb3IgZmlsZXMgaW4gbGlicmFyeSBwYXRoCisjIHdoaWNoIHJlc3BvbmRzIHRvIHRoZSAkZmlsZV9tYWdpY19jbWQgd2l0aCBhIGdpdmVuIGV4dGVuZGVkIHJlZ2V4LgorIyBJZiB5b3UgaGF2ZSBgZmlsZScgb3IgZXF1aXZhbGVudCBvbiB5b3VyIHN5c3RlbSBhbmQgeW91J3JlIG5vdCBzdXJlCisjIHdoZXRoZXIgYHBhc3NfYWxsJyB3aWxsICphbHdheXMqIHdvcmssIHlvdSBwcm9iYWJseSB3YW50IHRoaXMgb25lLgorCitjYXNlICRob3N0X29zIGluCithaXhbNC05XSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2Jlb3MqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitic2RpWzQ1XSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKScKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy91c3IvYmluL2ZpbGUgLUwnCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9zaGxpYi9saWJjLnNvCisgIDs7CisKK2N5Z3dpbiopCisgICMgZnVuY193aW4zMl9saWJpZCBpcyBhIHNoZWxsIGZ1bmN0aW9uIGRlZmluZWQgaW4gbHRtYWluLnNoCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICA7OworCittaW5ndyogfCBwdzMyKikKKyAgIyBCYXNlIE1TWVMvTWluR1cgZG8gbm90IHByb3ZpZGUgdGhlICdmaWxlJyBjb21tYW5kIG5lZWRlZCBieQorICAjIGZ1bmNfd2luMzJfbGliaWQgc2hlbGwgZnVuY3Rpb24sIHNvIHVzZSBhIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJywKKyAgIyB1bmxlc3Mgd2UgZmluZCAnZmlsZScsIGZvciBleGFtcGxlIGJlY2F1c2Ugd2UgYXJlIGNyb3NzLWNvbXBpbGluZy4KKyAgaWYgKCBmaWxlIC8gKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICBmaQorICA7OworCitjZWdjYykKKyAgIyB1c2UgdGhlIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJy4gU2VlIG1pbmd3Ki4KKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGUtYXJtLS4qbGl0dGxlKC4qYXJjaGl0ZWN0dXJlOiBhcm0pPycKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgaSo4NiApCisgICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgdGhlIHByZXNlbmNlIG9mIE9wZW5CU0QgaGVyZSB3YXMgYSBtaXN0YWtlLgorICAgICAgIyBMZXQncyBhY2NlcHQgYm90aCBvZiB0aGVtIHVudGlsIHRoaXMgaXMgY2xlYXJlZCB1cC4KKyAgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChGcmVlQlNEfE9wZW5CU0R8RHJhZ29uRmx5KS9pWzMtOV04NiAoY29tcGFjdCApP2RlbWFuZCBwYWdlZCBzaGFyZWQgbGlicmFyeScKKyAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28uKmAKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgZmkKKyAgOzsKKworZ251KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworaHB1eDEwLjIwKiB8IGhwdXgxMSopCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgaWE2NCopCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18RUxGLVswLTldWzAtOV0pIHNoYXJlZCBvYmplY3QgZmlsZSAtIElBNjQnCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvaHB1eDMyL2xpYmMuc28KKyAgICA7OworICBocHBhKjY0KikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxFTEYtWzAtOV1bMC05XSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gUEEtUklTQyBbMC05XS5bMC05XScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9wYTIwXzY0L2xpYmMuc2wKKyAgICA7OworICAqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfFBBLVJJU0NbMC05XS5bMC05XSkgc2hhcmVkIGxpYnJhcnknCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGliYy5zbAorICAgIDs7CisgIGVzYWMKKyAgOzsKKworaW50ZXJpeFszLTldKikKKyAgIyBQSUMgY29kZSBpcyBicm9rZW4gb24gSW50ZXJpeCAzLngsIHRoYXQncyB3aHkgfFwuYSBub3QgfF9waWNcLmEgaGVyZQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb3xcLmEpJCcKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkTEQgaW4KKyAgKi0zMnwqIi0zMiAiKSBsaWJtYWdpYz0zMi1iaXQ7OworICAqLW4zMnwqIi1uMzIgIikgbGlibWFnaWM9TjMyOzsKKyAgKi02NHwqIi02NCAiKSBsaWJtYWdpYz02NC1iaXQ7OworICAqKSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgIGVzYWMKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCituZXRic2QqIHwgbmV0YnNkZWxmKi1nbnUpCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xfcGljXC5hKSQnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb3xfcGljXC5hKSQnCisgIGZpCisgIDs7CisKK25ld29zNiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChleGVjdXRhYmxlfGR5bmFtaWMgbGliKScKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJubHMuc28KKyAgOzsKKworKm50byogfCAqcW54KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworb3BlbmJzZCopCisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8XC5zb3xfcGljXC5hKSQnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8X3BpY1wuYSkkJworICBmaQorICA7OworCitvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3Jkb3MqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzb2xhcmlzKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3N5c3Y0IHwgc3lzdjQuMyopCisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgIG1vdG9yb2xhKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKSBNWzAtOV1bMC05XSogVmVyc2lvbiBbMC05XScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvKmAKKyAgICA7OworICBuY3IpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBzZXF1ZW50KQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTE1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIgKScKKyAgICA7OworICBzbmkpCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0iZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtMTV1TQiBkeW5hbWljIGxpYiIKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vbGliL2xpYmMuc28KKyAgICA7OworICBzaWVtZW5zKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgcGMpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBlc2FjCisgIDs7CisKK3RwZiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7Citlc2FjCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQorZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCitkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKK3Rlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorCisKKworCisKKworCisKKworCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEFSIjsgdGhlbgorICBhY19jdl9wcm9nX0FSPSIkQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitBUj0kYWNfY3ZfcHJvZ19BUgoraWYgdGVzdCAtbiAiJEFSIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEFSIiA+JjUKKyRhc19lY2hvICIkQVIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FSIjsgdGhlbgorICBhY19jdF9BUj0kQVIKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgYXI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FSK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfY3RfQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQVI9JGFjX2N2X3Byb2dfYWNfY3RfQVIKK2lmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9BUiIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0FSIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorICAgIEFSPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBBUj0kYWNfY3RfQVIKKyAgZmkKK2Vsc2UKKyAgQVI9IiRhY19jdl9wcm9nX0FSIgorZmkKKwordGVzdCAteiAiJEFSIiAmJiBBUj1hcgordGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKworCisKKworCisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfU1RSSVA9IiRTVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX1NUUklQPSIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1NUUklQPSRhY19jdl9wcm9nX1NUUklQCitpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkU1RSSVAiID4mNQorJGFzX2VjaG8gIiRTVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiOyB0aGVuCisgIGFjX2N0X1NUUklQPSRTVFJJUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBzdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9IiRhY19jdF9TVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSJzdHJpcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9TVFJJUD0kYWNfY3ZfcHJvZ19hY19jdF9TVFJJUAoraWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X1NUUklQIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfU1RSSVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9TVFJJUCIgPSB4OyB0aGVuCisgICAgU1RSSVA9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgU1RSSVA9JGFjX2N0X1NUUklQCisgIGZpCitlbHNlCisgIFNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKK2ZpCisKK3Rlc3QgLXogIiRTVFJJUCIgJiYgU1RSSVA9OgorCisKKworCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXJhbmxpYjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19SQU5MSUI9IiRSQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19SQU5MSUI9IiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1JBTkxJQj0kYWNfY3ZfcHJvZ19SQU5MSUIKK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUkFOTElCIiA+JjUKKyRhc19lY2hvICIkUkFOTElCIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19SQU5MSUIiOyB0aGVuCisgIGFjX2N0X1JBTkxJQj0kUkFOTElCCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSByYW5saWI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X1JBTkxJQitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSIkYWNfY3RfUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSJyYW5saWIiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfUkFOTElCPSRhY19jdl9wcm9nX2FjX2N0X1JBTkxJQgoraWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9SQU5MSUIiID4mNQorJGFzX2VjaG8gIiRhY19jdF9SQU5MSUIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9SQU5MSUIiID0geDsgdGhlbgorICAgIFJBTkxJQj0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBSQU5MSUI9JGFjX2N0X1JBTkxJQgorICBmaQorZWxzZQorICBSQU5MSUI9IiRhY19jdl9wcm9nX1JBTkxJQiIKK2ZpCisKK3Rlc3QgLXogIiRSQU5MSUIiICYmIFJBTkxJQj06CisKKworCisKKworCisjIERldGVybWluZSBjb21tYW5kcyB0byBjcmVhdGUgb2xkLXN0eWxlIHN0YXRpYyBhcmNoaXZlcy4KK29sZF9hcmNoaXZlX2NtZHM9JyRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJworb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0KKworaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBvcGVuYnNkKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIC10IFwkb2xkbGliIgorICAgIDs7CisgICopCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKKyAgICA7OworICBlc2FjCisgIG9sZF9hcmNoaXZlX2NtZHM9IiRvbGRfYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkb2xkbGliIgorZmkKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworCisKKyMgQ2hlY2sgZm9yIGNvbW1hbmQgdG8gZ3JhYiB0aGUgcmF3IHN5bWJvbCBuYW1lIGZvbGxvd2VkIGJ5IEMgc3ltYm9sIGZyb20gbm0uCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGNvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworIyBUaGVzZSBhcmUgc2FuZSBkZWZhdWx0cyB0aGF0IHdvcmsgb24gYXQgbGVhc3QgYSBmZXcgb2xkIHN5c3RlbXMuCisjIFtUaGV5IGNvbWUgZnJvbSBVbHRyaXguICBXaGF0IGNvdWxkIGJlIG9sZGVyIHRoYW4gVWx0cml4PyEhIDspXQorCisjIENoYXJhY3RlciBjbGFzcyBkZXNjcmliaW5nIE5NIGdsb2JhbCBzeW1ib2wgY29kZXMuCitzeW1jb2RlPSdbQkNERUdSU1RdJworCisjIFJlZ2V4cCB0byBtYXRjaCBzeW1ib2xzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gQy4KK3N5bXBhdD0nXChbX0EtWmEtel1bX0EtWmEtejAtOV0qXCknCisKKyMgRGVmaW5lIHN5c3RlbS1zcGVjaWZpYyB2YXJpYWJsZXMuCitjYXNlICRob3N0X29zIGluCithaXgqKQorICBzeW1jb2RlPSdbQkNEVF0nCisgIDs7CitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgIHN5bWNvZGU9J1tBQkNER0lTVFddJworICA7OworaHB1eCopCisgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgc3ltY29kZT0nW0FCQ0RFR1JTVF0nCisgIGZpCisgIDs7Citpcml4KiB8IG5vbnN0b3B1eCopCisgIHN5bWNvZGU9J1tCQ0RFR1JTVF0nCisgIDs7Citvc2YqKQorICBzeW1jb2RlPSdbQkNERUdRUlNUXScKKyAgOzsKK3NvbGFyaXMqKQorICBzeW1jb2RlPSdbQkRSVF0nCisgIDs7CitzY28zLjJ2NSopCisgIHN5bWNvZGU9J1tEVF0nCisgIDs7CitzeXN2NC4ydXcyKikKKyAgc3ltY29kZT0nW0RUXScKKyAgOzsKK3N5c3Y1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgIHN5bWNvZGU9J1tBQkRUXScKKyAgOzsKK3N5c3Y0KQorICBzeW1jb2RlPSdbREZOU1RVXScKKyAgOzsKK2VzYWMKKworIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gdXNlIGl0cyBzdGFuZGFyZCBzeW1ib2wgY29kZXMuCitjYXNlIGAkTk0gLVYgMj4mMWAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBzeW1jb2RlPSdbQUJDREdJUlNUV10nIDs7Citlc2FjCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24uCisjIFNvbWUgc3lzdGVtcyAoZXNwLiBvbiBpYTY0KSBsaW5rIGRhdGEgYW5kIGNvZGUgc3ltYm9scyBkaWZmZXJlbnRseSwKKyMgc28gdXNlIHRoaXMgZ2VuZXJhbCBhcHByb2FjaC4KK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorCisjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KK29wdF9jcj0KK2Nhc2UgJGJ1aWxkX29zIGluCittaW5ndyopCisgIG9wdF9jcj1gJEVDSE8gJ3hcezAsMVx9JyB8IHRyIHggJ1wwMTUnYCAjIG9wdGlvbiBjciBpbiByZWdleHAKKyAgOzsKK2VzYWMKKworIyBUcnkgd2l0aG91dCBhIHByZWZpeCB1bmRlcnNjb3JlLCB0aGVuIHdpdGggaXQuCitmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCisKKyAgIyBUcmFuc2Zvcm0gc3ltY29kZSwgc3ltcGF0LCBhbmQgc3ltcHJmeCBpbnRvIGEgcmF3IHN5bWJvbCBhbmQgYSBDIHN5bWJvbC4KKyAgc3lteGZybT0iXFwxICRhY19zeW1wcmZ4XFwyIFxcMiIKKworICAjIFdyaXRlIHRoZSByYXcgYW5kIEMgaWRlbnRpZmllcnMuCisgIGlmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisgICAgIyBGYWtlIGl0IGZvciBkdW1wYmluIGFuZCBzYXkgVCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24KKyAgICAjIGFuZCBEIGZvciBhbnkgZ2xvYmFsIHZhcmlhYmxlLgorICAgICMgQWxzbyBmaW5kIEMrKyBhbmQgX19mYXN0Y2FsbCBzeW1ib2xzIGZyb20gTVNWQysrLAorICAgICMgd2hpY2ggc3RhcnQgd2l0aCBAIG9yID8uCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJEFXSyAnIlwKKyIgICAgIHtsYXN0X3NlY3Rpb249c2VjdGlvbjsgc2VjdGlvbj1cJCAzfTsiXAorIiAgICAgL1NlY3Rpb24gbGVuZ3RoIC4qI3JlbG9jcy4qKHBpY2sgYW55KS97aGlkZVtsYXN0X3NlY3Rpb25dPTF9OyJcCisiICAgICBcJCAwIX4vRXh0ZXJuYWwgKlx8L3tuZXh0fTsiXAorIiAgICAgLyAwKyBVTkRFRiAve25leHR9OyAvIFVOREVGIFwoW158XVwpKigpL3tuZXh0fTsiXAorIiAgICAge2lmKGhpZGVbc2VjdGlvbl0pIG5leHR9OyJcCisiICAgICB7Zj0wfTsgXCQgMH4vXChcKS4qXHwve2Y9MX07IHtwcmludGYgZiA/IFwiVCBcIiA6IFwiRCBcIn07IlwKKyIgICAgIHtzcGxpdChcJCAwLCBhLCAvXHx8XHIvKTsgc3BsaXQoYVsyXSwgcyl9OyJcCisiICAgICBzWzFdfi9eW0A/XS97cHJpbnQgc1sxXSwgc1sxXTsgbmV4dH07IlwKKyIgICAgIHNbMV1+cHJmeCB7c3BsaXQoc1sxXSx0LFwiQFwiKTsgcHJpbnQgdFsxXSwgc3Vic3RyKHRbMV0sbGVuZ3RoKHByZngpKX0iXAorIiAgICAgJyBwcmZ4PV4kYWNfc3ltcHJmeCIKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgIGZpCisKKyAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgIHBpcGVfd29ya3M9bm8KKworICBybSAtZiBjb25mdGVzdCoKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKK2NoYXIgbm1fdGVzdF92YXI7Cit2b2lkIG5tX3Rlc3RfZnVuYyh2b2lkKTsKK3ZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpe30KKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCitpbnQgbWFpbigpe25tX3Rlc3RfdmFyPSdhJztubV90ZXN0X2Z1bmMoKTtyZXR1cm4oMCk7fQorX0xUX0VPRgorCisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICAjIE5vdyB0cnkgdG8gZ3JhYiB0aGUgc3ltYm9scy4KKyAgICBubGlzdD1jb25mdGVzdC5ubQorICAgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiROTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFw+ICRubGlzdFwiIjsgfSA+JjUKKyAgKGV2YWwgJE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXD4gJG5saXN0KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zICIkbmxpc3QiOyB0aGVuCisgICAgICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgorICAgICAgaWYgc29ydCAiJG5saXN0IiB8IHVuaXEgPiAiJG5saXN0IlQ7IHRoZW4KKwltdiAtZiAiJG5saXN0IlQgIiRubGlzdCIKKyAgICAgIGVsc2UKKwlybSAtZiAiJG5saXN0IlQKKyAgICAgIGZpCisKKyAgICAgICMgTWFrZSBzdXJlIHRoYXQgd2Ugc25hZ2dlZCBhbGwgdGhlIHN5bWJvbHMgd2UgbmVlZC4KKyAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitfTFRfRU9GCisJICAjIE5vdyBnZW5lcmF0ZSB0aGUgc3ltYm9sIGZpbGUuCisJICBldmFsICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0JworCisJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKworLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworY29uc3Qgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgdm9pZCAgICAgICAqYWRkcmVzczsKK30KK2x0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXSA9Cit7CisgIHsgIkBQUk9HUkFNQCIsICh2b2lkICopIDAgfSwKK19MVF9FT0YKKwkgICRTRUQgInMvXiRzeW1jb2RlJHN5bWNvZGUqIFwoLipcKSBcKC4qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sLyIgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dAorCSAgY2F0IDw8XF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorICB7MCwgKHZvaWQgKikgMH0KK307CisKKy8qIFRoaXMgd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBGcmVlQlNEIGxpbmtlciAqLworI2lmZGVmIEZSRUVCU0RfV09SS0FST1VORAorc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyAgcmV0dXJuIGx0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHM7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK19MVF9FT0YKKwkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKwkgIGx0X3NhdmVfTElCUz0iJExJQlMiCisJICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKwkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisJICBDRkxBR1M9IiRDRkxBR1MkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciCisJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKwkgICAgcGlwZV93b3Jrcz15ZXMKKwkgIGZpCisJICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCisJZWxzZQorCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1CisJZmkKKyAgICAgIGVsc2UKKwllY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X3ZhciBpbiAkbmxpc3QiID4mNQorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBlY2hvICJjYW5ub3QgcnVuICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiA+JjUKKyAgICBmaQorICBlbHNlCisgICAgZWNobyAiJHByb2duYW1lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mdHN0KgorCisgICMgRG8gbm90IHVzZSB0aGUgZ2xvYmFsX3N5bWJvbF9waXBlIHVubGVzcyBpdCB3b3Jrcy4KKyAgaWYgdGVzdCAiJHBpcGVfd29ya3MiID0geWVzOyB0aGVuCisgICAgYnJlYWsKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9CisgIGZpCitkb25lCisKK2ZpCisKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0KK2ZpCitpZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGZhaWxlZCIgPiY1CiskYXNfZWNobyAiZmFpbGVkIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG9rIiA+JjUKKyRhc19lY2hvICJvayIgPiY2OyB9CitmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ0b29sLWxvY2sgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbGlidG9vbF9sb2NrK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbGlidG9vbF9sb2NrOworZmkKKwordGVzdCAieCRlbmFibGVfbGlidG9vbF9sb2NrIiAhPSB4bm8gJiYgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKKworIyBTb21lIGZsYWdzIG5lZWQgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY29tcGlsZXIgb3IgbGlua2VyIGZvciBnb29kCisjIGxpYnRvb2wgc3VwcG9ydC4KK2Nhc2UgJGhvc3QgaW4KK2lhNjQtKi1ocHV4KikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorICAgICAgKkVMRi0zMiopCisJSFBVWF9JQTY0X01PREU9IjMyIgorCTs7CisgICAgICAqRUxGLTY0KikKKwlIUFVYX0lBNjRfTU9ERT0iNjQiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKyotKi1pcml4NiopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnI2xpbmUgNjg3MiAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICBpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisJKjMyLWJpdCopCisJICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJzbWlwIgorCSAgOzsKKwkqTjMyKikKKwkgIExEPSIke0xELWxkfSAtbWVsZjMyYm1pcG4zMiIKKwkgIDs7CisJKjY0LWJpdCopCisJICBMRD0iJHtMRC1sZH0gLW1lbGY2NGJtaXAiCisJOzsKKyAgICAgIGVzYWMKKyAgICBlbHNlCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisJKjMyLWJpdCopCisJICBMRD0iJHtMRC1sZH0gLTMyIgorCSAgOzsKKwkqTjMyKikKKwkgIExEPSIke0xELWxkfSAtbjMyIgorCSAgOzsKKwkqNjQtYml0KikKKwkgIExEPSIke0xELWxkfSAtNjQiCisJICA7OworICAgICAgZXNhYworICAgIGZpCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKworeDg2XzY0LSprZnJlZWJzZCotZ251fHg4Nl82NC0qbGludXgqfHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqfCBcCitzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqfHNwYXJjKi0qbGludXgqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgICAqMzItYml0KikKKwljYXNlICRob3N0IGluCisJICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4Nl9mYnNkIgorCSAgICA7OworCSAgeDg2XzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKKwkgICAgOzsKKwkgIHBwYzY0LSpsaW51eCp8cG93ZXJwYzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMnBwY2xpbnV4IgorCSAgICA7OworCSAgczM5MHgtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9zMzkwIgorCSAgICA7OworCSAgc3BhcmM2NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJfc3BhcmMiCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICAqNjQtYml0KikKKwljYXNlICRob3N0IGluCisJICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0X2Zic2QiCisJICAgIDs7CisJICB4ODZfNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCisJICAgIDs7CisJICBwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0cHBjIgorCSAgICA7OworCSAgczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3MzOTAiCisJICAgIDs7CisJICBzcGFyYyotKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgorCSAgICA7OworCWVzYWMKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCisqLSotc2NvMy4ydjUqKQorICAjIE9uIFNDTyBPcGVuU2VydmVyIDUsIHdlIG5lZWQgLWJlbGYgdG8gZ2V0IGZ1bGwtZmVhdHVyZWQgYmluYXJpZXMuCisgIFNBVkVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBDRkxBR1M9IiRDRkxBR1MgLWJlbGYiCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X2NjX25lZWRzX2JlbGYrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGx0X2N2X2NjX25lZWRzX2JlbGY9eWVzCitlbHNlCisgIGx0X2N2X2NjX25lZWRzX2JlbGY9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2NjX25lZWRzX2JlbGYiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9jY19uZWVkc19iZWxmIiA+JjY7IH0KKyAgaWYgdGVzdCB4IiRsdF9jdl9jY19uZWVkc19iZWxmIiAhPSB4InllcyI7IHRoZW4KKyAgICAjIHRoaXMgaXMgcHJvYmFibHkgZ2NjIDIuOC4wLCBlZ2NzIDEuMCBvciBuZXdlcjsgbm8gbmVlZCBmb3IgLWJlbGYKKyAgICBDRkxBR1M9IiRTQVZFX0NGTEFHUyIKKyAgZmkKKyAgOzsKK3NwYXJjKi0qc29sYXJpcyopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKyAgICAqNjQtYml0KikKKyAgICAgIGNhc2UgJGx0X2N2X3Byb2dfZ251X2xkIGluCisgICAgICB5ZXMqKSBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiIDs7CisgICAgICAqKQorCWlmICR7TEQtbGR9IC02NCAtciAtbyBjb25mdGVzdDIubyBjb25mdGVzdC5vID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgTEQ9IiR7TEQtbGR9IC02NCIKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworZXNhYworCituZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKKworCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICByaGFwc29keSogfCBkYXJ3aW4qKQorICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19EU1lNVVRJTCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiREU1lNVVRJTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19EU1lNVVRJTD0iJERTWU1VVElMIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfRFNZTVVUSUw9IiR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWwiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorRFNZTVVUSUw9JGFjX2N2X3Byb2dfRFNZTVVUSUwKK2lmIHRlc3QgLW4gIiREU1lNVVRJTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICREU1lNVVRJTCIgPiY1CiskYXNfZWNobyAiJERTWU1VVElMIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19EU1lNVVRJTCI7IHRoZW4KKyAgYWNfY3RfRFNZTVVUSUw9JERTWU1VVElMCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZHN5bXV0aWwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGRzeW11dGlsOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9EU1lNVVRJTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTD0iJGFjX2N0X0RTWU1VVElMIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUw9ImRzeW11dGlsIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0RTWU1VVElMPSRhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMCitpZiB0ZXN0IC1uICIkYWNfY3RfRFNZTVVUSUwiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRFNZTVVUSUwiID4mNQorJGFzX2VjaG8gIiRhY19jdF9EU1lNVVRJTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0RTWU1VVElMIiA9IHg7IHRoZW4KKyAgICBEU1lNVVRJTD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBEU1lNVVRJTD0kYWNfY3RfRFNZTVVUSUwKKyAgZmkKK2Vsc2UKKyAgRFNZTVVUSUw9IiRhY19jdl9wcm9nX0RTWU1VVElMIgorZmkKKworICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW5tZWRpdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1ubWVkaXQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX05NRURJVCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiROTUVESVQiOyB0aGVuCisgIGFjX2N2X3Byb2dfTk1FRElUPSIkTk1FRElUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfTk1FRElUPSIke2FjX3Rvb2xfcHJlZml4fW5tZWRpdCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitOTUVESVQ9JGFjX2N2X3Byb2dfTk1FRElUCitpZiB0ZXN0IC1uICIkTk1FRElUIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE5NRURJVCIgPiY1CiskYXNfZWNobyAiJE5NRURJVCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTk1FRElUIjsgdGhlbgorICBhY19jdF9OTUVESVQ9JE5NRURJVAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm5tZWRpdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbm1lZGl0OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9OTUVESVQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfTk1FRElUIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X05NRURJVD0iJGFjX2N0X05NRURJVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X05NRURJVD0ibm1lZGl0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X05NRURJVD0kYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQKK2lmIHRlc3QgLW4gIiRhY19jdF9OTUVESVQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTk1FRElUIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfTk1FRElUIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfTk1FRElUIiA9IHg7IHRoZW4KKyAgICBOTUVESVQ9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgTk1FRElUPSRhY19jdF9OTUVESVQKKyAgZmkKK2Vsc2UKKyAgTk1FRElUPSIkYWNfY3ZfcHJvZ19OTUVESVQiCitmaQorCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bGlwbyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1saXBvOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19MSVBPK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJExJUE8iOyB0aGVuCisgIGFjX2N2X3Byb2dfTElQTz0iJExJUE8iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19MSVBPPSIke2FjX3Rvb2xfcHJlZml4fWxpcG8iCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorTElQTz0kYWNfY3ZfcHJvZ19MSVBPCitpZiB0ZXN0IC1uICIkTElQTyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMSVBPIiA+JjUKKyRhc19lY2hvICIkTElQTyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTElQTyI7IHRoZW4KKyAgYWNfY3RfTElQTz0kTElQTworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImxpcG8iLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGxpcG87IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0xJUE8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfTElQTyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9MSVBPPSIkYWNfY3RfTElQTyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0xJUE89ImxpcG8iCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfTElQTz0kYWNfY3ZfcHJvZ19hY19jdF9MSVBPCitpZiB0ZXN0IC1uICIkYWNfY3RfTElQTyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9MSVBPIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfTElQTyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0xJUE8iID0geDsgdGhlbgorICAgIExJUE89IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgTElQTz0kYWNfY3RfTElQTworICBmaQorZWxzZQorICBMSVBPPSIkYWNfY3ZfcHJvZ19MSVBPIgorZmkKKworICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW90b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW90b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19PVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRPVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19PVE9PTD0iJE9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfT1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorT1RPT0w9JGFjX2N2X3Byb2dfT1RPT0wKK2lmIHRlc3QgLW4gIiRPVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPVE9PTCIgPiY1CiskYXNfZWNobyAiJE9UT09MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PVE9PTCI7IHRoZW4KKyAgYWNfY3RfT1RPT0w9JE9UT09MCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib3Rvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG90b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9PVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9PVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTD0iJGFjX2N0X09UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w9Im90b29sIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X09UT09MPSRhY19jdl9wcm9nX2FjX2N0X09UT09MCitpZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT1RPT0wiID4mNQorJGFzX2VjaG8gIiRhY19jdF9PVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X09UT09MIiA9IHg7IHRoZW4KKyAgICBPVE9PTD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBPVE9PTD0kYWNfY3RfT1RPT0wKKyAgZmkKK2Vsc2UKKyAgT1RPT0w9IiRhY19jdl9wcm9nX09UT09MIgorZmkKKworICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW90b29sNjQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w2NDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfT1RPT0w2NCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRPVE9PTDY0IjsgdGhlbgorICBhY19jdl9wcm9nX09UT09MNjQ9IiRPVE9PTDY0IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfT1RPT0w2ND0iJHthY190b29sX3ByZWZpeH1vdG9vbDY0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK09UT09MNjQ9JGFjX2N2X3Byb2dfT1RPT0w2NAoraWYgdGVzdCAtbiAiJE9UT09MNjQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT1RPT0w2NCIgPiY1CiskYXNfZWNobyAiJE9UT09MNjQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX09UT09MNjQiOyB0aGVuCisgIGFjX2N0X09UT09MNjQ9JE9UT09MNjQKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvdG9vbDY0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBvdG9vbDY0OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X09UT09MNjQiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w2ND0iJGFjX2N0X09UT09MNjQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0PSJvdG9vbDY0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X09UT09MNjQ9JGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w2NAoraWYgdGVzdCAtbiAiJGFjX2N0X09UT09MNjQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT1RPT0w2NCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X09UT09MNjQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9PVE9PTDY0IiA9IHg7IHRoZW4KKyAgICBPVE9PTDY0PSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE9UT09MNjQ9JGFjX2N0X09UT09MNjQKKyAgZmkKK2Vsc2UKKyAgT1RPT0w2ND0iJGFjX2N2X3Byb2dfT1RPT0w2NCIKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPW5vCisgICAgICBpZiB0ZXN0IC16ICIke0xUX01VTFRJX01PRFVMRX0iOyB0aGVuCisJIyBCeSBkZWZhdWx0IHdlIHdpbGwgYWRkIHRoZSAtc2luZ2xlX21vZHVsZSBmbGFnLiBZb3UgY2FuIG92ZXJyaWRlCisJIyBieSBlaXRoZXIgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTFRfTVVMVElfTU9EVUxFCisJIyBub24tZW1wdHkgYXQgY29uZmlndXJlIHRpbWUsIG9yIGJ5IGFkZGluZyAtbXVsdGlfbW9kdWxlIHRvIHRoZQorCSMgbGluayBmbGFncy4KKwlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCisJZWNobyAiaW50IGZvbyh2b2lkKXtyZXR1cm4gMTt9IiA+IGNvbmZ0ZXN0LmMKKwllY2hvICIkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAorLWR5bmFtaWNsaWIgLVdsLC1zaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmMiID4mNQorCSRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBsaWJjb25mdGVzdC5keWxpYiBcCisJICAtZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYyAyPmNvbmZ0ZXN0LmVycgorICAgICAgICBfbHRfcmVzdWx0PSQ/CisJaWYgdGVzdCAtZiBsaWJjb25mdGVzdC5keWxpYiAmJiB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyICYmIHRlc3QgJF9sdF9yZXN1bHQgPSAwOyB0aGVuCisJICBsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPXllcworCWVsc2UKKwkgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisJZmkKKwlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCisJcm0gLWYgY29uZnRlc3QuKgorICAgICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA+JjY7IH0KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubworICAgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgICAgICBlY2hvICJfbWFpbiIgPiBjb25mdGVzdC5zeW0KKyAgICAgIExERkxBR1M9IiRMREZMQUdTIC1XbCwtZXhwb3J0ZWRfc3ltYm9sc19saXN0LGNvbmZ0ZXN0LnN5bSIKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9eWVzCitlbHNlCisgIGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisJTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA+JjY7IH0KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bMDEyXSkKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKyAgICBkYXJ3aW4xLiopCisgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisgICAgZGFyd2luKikgIyBkYXJ3aW4gNS54IG9uCisgICAgICAjIGlmIHJ1bm5pbmcgb24gMTAuNSBvciBsYXRlciwgdGhlIGRlcGxveW1lbnQgdGFyZ2V0IGRlZmF1bHRzCisgICAgICAjIHRvIHRoZSBPUyB2ZXJzaW9uLCBpZiBvbiB4ODYsIGFuZCAxMC40LCB0aGUgZGVwbG95bWVudAorICAgICAgIyB0YXJnZXQgZGVmYXVsdHMgdG8gMTAuNC4gRG9uJ3QgeW91IGxvdmUgaXQ/CisgICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9LCRob3N0IGluCisJMTAuMCwqODYqLWRhcndpbjgqfDEwLjAsKi1kYXJ3aW5bOTFdKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKwkxMC5bMDEyXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisJMTAuKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKyAgICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgICAgaWYgdGVzdCAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID0gInllcyI7IHRoZW4KKyAgICAgIF9sdF9kYXJfc2luZ2xlX21vZD0nJHNpbmdsZV9tb2R1bGUnCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPScgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sc19saXN0LCRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0nCisgICAgZWxzZQorICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nfiROTUVESVQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkRFNZTVVUSUwiICE9ICI6IjsgdGhlbgorICAgICAgX2x0X2RzeW11dGlsPSd+JERTWU1VVElMICRsaWIgfHwgOicKKyAgICBlbHNlCisgICAgICBfbHRfZHN5bXV0aWw9CisgICAgZmkKKyAgICA7OworICBlc2FjCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IuLi4gIiA+JjY7IH0KKyMgT24gU3Vucywgc29tZXRpbWVzICRDUFAgbmFtZXMgYSBkaXJlY3RvcnkuCitpZiB0ZXN0IC1uICIkQ1BQIiAmJiB0ZXN0IC1kICIkQ1BQIjsgdGhlbgorICBDUFA9CitmaQoraWYgdGVzdCAteiAiJENQUCI7IHRoZW4KKyAgaWYgdGVzdCAiJHthY19jdl9wcm9nX0NQUCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICAgICAjIERvdWJsZSBxdW90ZXMgYmVjYXVzZSBDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKKyAgICBmb3IgQ1BQIGluICIkQ0MgLUUiICIkQ0MgLUUgLXRyYWRpdGlvbmFsLWNwcCIgIi9saWIvY3BwIgorICAgIGRvCisgICAgICBhY19wcmVwcm9jX29rPWZhbHNlCitmb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisJCSAgICAgU3ludGF4IGVycm9yCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCisgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitlbHNlCisgICMgUGFzc2VzIGJvdGggdGVzdHMuCithY19wcmVwcm9jX29rPToKK2JyZWFrCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKKyAgYnJlYWsKK2ZpCisKKyAgICBkb25lCisgICAgYWNfY3ZfcHJvZ19DUFA9JENQUAorCitmaQorICBDUFA9JGFjX2N2X3Byb2dfQ1BQCitlbHNlCisgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENQUCIgPiY1CiskYXNfZWNobyAiJENQUCIgPiY2OyB9CithY19wcmVwcm9jX29rPWZhbHNlCitmb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisJCSAgICAgU3ludGF4IGVycm9yCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCisgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitlbHNlCisgICMgUGFzc2VzIGJvdGggdGVzdHMuCithY19wcmVwcm9jX29rPToKK2JyZWFrCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKKworZWxzZQorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJDIHByZXByb2Nlc3NvciBcIiRDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1IDsgfQorZmkKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N0ZGMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmxvYXQuaD4KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9oZWFkZXJfc3RkYz15ZXMKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBTdW5PUyA0Lnggc3RyaW5nLmggZG9lcyBub3QgZGVjbGFyZSBtZW0qLCBjb250cmFyeSB0byBBTlNJLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIElTQyAyLjAuMiBzdGRsaWIuaCBkb2VzIG5vdCBkZWNsYXJlIGZyZWUsIGNvbnRyYXJ5IHRvIEFOU0kuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiZnJlZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIC9iaW4vY2MgaW4gSXJpeC00LjAuNSBnZXRzIG5vbi1BTlNJIGN0eXBlIG1hY3JvcyB1bmxlc3MgdXNpbmcgLWFuc2kuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgOgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZiAoKCcgJyAmIDB4MEZGKSA9PSAweDAyMCkKKyMgZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICd6JykKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKKyNlbHNlCisjIGRlZmluZSBJU0xPV0VSKGMpIFwKKwkJICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKKwkJICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCisJCSAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6JykpCisjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gKChjKSB8IDB4NDApIDogKGMpKQorI2VuZGlmCisKKyNkZWZpbmUgWE9SKGUsIGYpICgoKGUpICYmICEoZikpIHx8ICghKGUpICYmIChmKSkpCitpbnQKK21haW4gKCkKK3sKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICBpZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpCisJfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCisgICAgICByZXR1cm4gMjsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgU1REQ19IRUFERVJTIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisjIE9uIElSSVggNS4zLCBzeXMvdHlwZXMgYW5kIGludHR5cGVzLmggYXJlIGNvbmZsaWN0aW5nLgorZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzeXMvc3RhdC5oIHN0ZGxpYi5oIHN0cmluZy5oIG1lbW9yeS5oIHN0cmluZ3MuaCBcCisJCSAgaW50dHlwZXMuaCBzdGRpbnQuaCB1bmlzdGQuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdAorIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworZm9yIGFjX2hlYWRlciBpbiBkbGZjbi5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJkbGZjbi5oIiAiYWNfY3ZfaGVhZGVyX2RsZmNuX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdAorIgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfZGxmY25faCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfRExGQ05fSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKworIyBTZXQgb3B0aW9ucworCisKKworCisKKyAgICAgICAgICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaGFyZWQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc2hhcmVkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc2hhcmVkOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX3NoYXJlZD15ZXMgOzsKKyAgICBubykgZW5hYmxlX3NoYXJlZD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfc2hhcmVkPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3NoYXJlZD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWMKK2Vsc2UKKyAgZW5hYmxlX3NoYXJlZD15ZXMKK2ZpCisKKworCisKKworCisKKworCisgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zdGF0aWMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc3RhdGljK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc3RhdGljOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX3N0YXRpYz15ZXMgOzsKKyAgICBubykgZW5hYmxlX3N0YXRpYz1ubyA7OworICAgICopCisgICAgIGVuYWJsZV9zdGF0aWM9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfc3RhdGljPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhYworZWxzZQorICBlbmFibGVfc3RhdGljPXllcworZmkKKworCisKKworCisKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1waWMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3BpYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcGljOyBwaWNfbW9kZT0iJHdpdGh2YWwiCitlbHNlCisgIHBpY19tb2RlPWRlZmF1bHQKK2ZpCisKKwordGVzdCAteiAiJHBpY19tb2RlIiAmJiBwaWNfbW9kZT1kZWZhdWx0CisKKworCisKKworCisKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWZhc3QtaW5zdGFsbCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9mYXN0X2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9mYXN0X2luc3RhbGw7IHA9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfZmFzdF9pbnN0YWxsPXllcyA7OworICAgIG5vKSBlbmFibGVfZmFzdF9pbnN0YWxsPW5vIDs7CisgICAgKikKKyAgICAgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhYworZWxzZQorICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcworZmkKKworCisKKworCisKKworCisKKworCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVidWlsZCBsaWJ0b29sIHdoZW4gbmVlZGVkCitMSUJUT09MX0RFUFM9IiRsdG1haW4iCisKKyMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCitMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKwordGVzdCAteiAiJExOX1MiICYmIExOX1M9ImxuIC1zIgorCisKKworCisKKworCisKKworCisKKworCisKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igb2JqZGlyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBvYmpkaXIuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3Zfb2JqZGlyK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgcm0gLWYgLmxpYnMgMj4vZGV2L251bGwKK21rZGlyIC5saWJzIDI+L2Rldi9udWxsCitpZiB0ZXN0IC1kIC5saWJzOyB0aGVuCisgIGx0X2N2X29iamRpcj0ubGlicworZWxzZQorICAjIE1TLURPUyBkb2VzIG5vdCBhbGxvdyBmaWxlbmFtZXMgdGhhdCBiZWdpbiB3aXRoIGEgZG90LgorICBsdF9jdl9vYmpkaXI9X2xpYnMKK2ZpCitybWRpciAubGlicyAyPi9kZXYvbnVsbAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfb2JqZGlyIiA+JjUKKyRhc19lY2hvICIkbHRfY3Zfb2JqZGlyIiA+JjY7IH0KK29iamRpcj0kbHRfY3Zfb2JqZGlyCisKKworCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBMVF9PQkpESVIgIiRsdF9jdl9vYmpkaXIvIgorX0FDRU9GCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgICMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorICAjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKyAgIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgorICBpZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KKyAgICBDT0xMRUNUX05BTUVTPQorICAgIGV4cG9ydCBDT0xMRUNUX05BTUVTCisgIGZpCisgIDs7Citlc2FjCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKKyMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitzZWRfcXVvdGVfc3Vic3Q9J3MvXChbImAkXFxdXCkvXFxcMS9nJworCisjIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KK2RvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFsiYFxcXVwpL1xcXDEvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNoZWxsIHZhcmlhYmxlIGluIGEKKyMgZG91YmxlX3F1b3RlX3N1YnN0J2VkIHN0cmluZy4KK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSdzL1xcXFxcXFxcXFxcJC9cXFxcXFwkL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaW5nbGUgcXVvdGUuCitkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3Q9J3MvJ1wnJy8nXCdcXFxcXFxcJ1wnJy9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gYXZvaWQgYWNjaWRlbnRhbCBnbG9iYmluZyBpbiBldmFsZWQgZXhwcmVzc2lvbnMKK25vX2dsb2Jfc3Vic3Q9J3MvXCovXFxcKi9nJworCisjIEdsb2JhbCB2YXJpYWJsZXM6CitvZmlsZT1saWJ0b29sCitjYW5fYnVpbGRfc2hhcmVkPXllcworCisjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKKyMgd2hpY2ggbmVlZHMgJy5saWInKS4KK2xpYmV4dD1hCisKK3dpdGhfZ251X2xkPSIkbHRfY3ZfcHJvZ19nbnVfbGQiCisKK29sZF9DQz0iJENDIgorb2xkX0NGTEFHUz0iJENGTEFHUyIKKworIyBTZXQgc2FuZSBkZWZhdWx0cyBmb3IgdmFyaW91cyB2YXJpYWJsZXMKK3Rlc3QgLXogIiRDQyIgJiYgQ0M9Y2MKK3Rlc3QgLXogIiRMVENDIiAmJiBMVENDPSRDQwordGVzdCAteiAiJExUQ0ZMQUdTIiAmJiBMVENGTEFHUz0kQ0ZMQUdTCit0ZXN0IC16ICIkTEQiICYmIExEPWxkCit0ZXN0IC16ICIkYWNfb2JqZXh0IiAmJiBhY19vYmpleHQ9bworCitmb3IgY2NfdGVtcCBpbiAkY29tcGlsZXIiIjsgZG8KKyAgY2FzZSAkY2NfdGVtcCBpbgorICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKKyAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OworICAgIFwtKikgOzsKKyAgICAqKSBicmVhazs7CisgIGVzYWMKK2RvbmUKK2NjX2Jhc2VuYW1lPWAkRUNITyAiWCRjY190ZW1wIiB8ICRYc2VkIC1lICdzJS4qLyUlJyAtZSAicyVeJGhvc3RfYWxpYXMtJSUiYAorCisKKyMgT25seSBwZXJmb3JtIHRoZSBjaGVjayBmb3IgZmlsZSwgaWYgdGhlIGNoZWNrIG1ldGhvZCByZXF1aXJlcyBpdAordGVzdCAteiAiJE1BR0lDX0NNRCIgJiYgTUFHSUNfQ01EPWZpbGUKK2Nhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCitmaWxlX21hZ2ljKikKKyAgaWYgdGVzdCAiJGZpbGVfbWFnaWNfY21kIiA9ICckTUFHSUNfQ01EJzsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJHthY190b29sX3ByZWZpeH1maWxlLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3BhdGhfTUFHSUNfQ01EK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkTUFHSUNfQ01EIGluCitbXFwvKl0gfCAgPzpbXFwvXSopCisgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyopCisgIGx0X3NhdmVfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIgorICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgYWNfZHVtbXk9Ii91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyR7YWNfdG9vbF9wcmVmaXh9ZmlsZTsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRhY19kaXIvJHthY190b29sX3ByZWZpeH1maWxlIgorICAgICAgaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfdGVzdF9maWxlIjsgdGhlbgorCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisJImZpbGVfbWFnaWMgIiopCisJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogImZpbGVfbWFnaWMgXCguKlwpImAKKwkgIE1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgorCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAorCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgIGNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAorKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgorKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCisqKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKKyoqKiBkZXBlbmQgb24gc2hhcmVkIGxpYnJhcmllcywgYnV0IHByb2dyYW1zIGxpbmtlZCB3aXRoIHN1Y2ggbGlidG9vbAorKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQorKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bworKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKKworX0xUX0VPRgorCSAgZmkgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorICBNQUdJQ19DTUQ9IiRsdF9zYXZlX01BR0lDX0NNRCIKKyAgOzsKK2VzYWMKK2ZpCisKK01BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgoraWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQorJGFzX2VjaG8gIiRNQUdJQ19DTUQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworCisKKworaWYgdGVzdCAteiAiJGx0X2N2X3BhdGhfTUFHSUNfQ01EIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZmlsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZmlsZS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wYXRoX01BR0lDX0NNRCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJE1BR0lDX0NNRCBpbgorW1xcLypdIHwgID86W1xcL10qKQorICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisqKQorICBsdF9zYXZlX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIKKyAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGFjX2R1bW15PSIvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci9maWxlOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJGFjX2Rpci9maWxlIgorICAgICAgaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfdGVzdF9maWxlIjsgdGhlbgorCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisJImZpbGVfbWFnaWMgIiopCisJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogImZpbGVfbWFnaWMgXCguKlwpImAKKwkgIE1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgorCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAorCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgIGNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAorKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgorKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCisqKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKKyoqKiBkZXBlbmQgb24gc2hhcmVkIGxpYnJhcmllcywgYnV0IHByb2dyYW1zIGxpbmtlZCB3aXRoIHN1Y2ggbGlidG9vbAorKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQorKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bworKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKKworX0xUX0VPRgorCSAgZmkgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorICBNQUdJQ19DTUQ9IiRsdF9zYXZlX01BR0lDX0NNRCIKKyAgOzsKK2VzYWMKK2ZpCisKK01BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgoraWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQorJGFzX2VjaG8gIiRNQUdJQ19DTUQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICBlbHNlCisgICAgTUFHSUNfQ01EPToKKyAgZmkKK2ZpCisKKyAgZmkKKyAgOzsKK2VzYWMKKworIyBVc2UgQyBmb3IgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiB0aGUgbGlidG9vbCBzY3JpcHQKKworbHRfc2F2ZV9DQz0iJENDIgorYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1jCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitvYmpleHQ9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7IgorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbigpe3JldHVybigwKTt9JworCisKKworCisKKworCisjIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgorTFRDQz0ke0xUQ0MtIiRDQyJ9CisKKyMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KK0xUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorY29tcGlsZXI9JENDCisKKyMgU2F2ZSB0aGUgZGVmYXVsdCBjb21waWxlciwgc2luY2UgaXQgZ2V0cyBvdmVyd3JpdHRlbiB3aGVuIHRoZSBvdGhlcgorIyB0YWdzIGFyZSBiZWluZyB0ZXN0ZWQsIGFuZCBfTFRfVEFHVkFSKGNvbXBpbGVyLCBbXSkgaXMgYSBOT1AuCitjb21waWxlcl9ERUZBVUxUPSRDQworCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskUk0gY29uZnRlc3QqCisKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRSTSAtciBjb25mdGVzdCoKKworCisjIyBDQVZFQVQgRU1QVE9SOgorIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KK2lmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKworbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9CisKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPScgLWZuby1idWlsdGluJworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucz1ubworICAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjgzOTc6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6ODQwMTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KKyAgICAgJEVDSE8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPiY2OyB9CisKK2lmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID0geHllczsgdGhlbgorICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIKK2Vsc2UKKyAgICA6CitmaQorCitmaQorCisKKworCisKKworICBsdF9wcm9nX2NvbXBpbGVyX3dsPQorbHRfcHJvZ19jb21waWxlcl9waWM9CitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeCopCisgICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKyAgICAgICAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KKyAgICAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCisgICAgICA7OworCisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCisgICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1ERExMX0VYUE9SVCcKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKworICAgIGhwdXgqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIDY0LWJpdCBQQSBIUC1VWCwgYnV0IG5vdCBmb3IgMzItYml0CisgICAgICAjIFBBIEhQLVVYLiAgT24gSUE2NCBIUC1VWCwgUElDIGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGUgcGljIGZsYWcKKyAgICAgICMgc2V0cyB0aGUgZGVmYXVsdCBUTFMgbW9kZWwgYW5kIGFmZmVjdHMgaW5saW5pbmcuCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGludGVyaXhbMy05XSopCisgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgorICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCisgICAgICA7OworCisgICAgbXNkb3NkamdwcCopCisgICAgICAjIEp1c3QgYmVjYXVzZSB3ZSB1c2UgR0NDIGRvZXNuJ3QgbWVhbiB3ZSBzdWRkZW5seSBnZXQgc2hhcmVkIGxpYnJhcmllcworICAgICAgIyBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGVtLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICBlbmFibGVfc2hhcmVkPW5vCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJbHRfcHJvZ19jb21waWxlcl9waWM9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICAjIFBPUlRNRSBDaGVjayBmb3IgZmxhZyB0byBwYXNzIGxpbmtlciBmbGFncyB0aHJvdWdoIHRoZSBzeXN0ZW0gY29tcGlsZXIuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIGVsc2UKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctRERMTF9FWFBPUlQnCisgICAgICA7OworCisgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0CisgICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCp8aWE2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfcGljPScrWicKKwk7OworICAgICAgZXNhYworICAgICAgIyBJcyB0aGVyZSBhIGJldHRlciBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyB0aGF0IHdvcmtzIHdpdGggdGhlIGJ1bmRsZWQgQ0M/CisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCisgICAgICA7OworCisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICAjIFBJQyAod2l0aCAtS1BJQykgaXMgdGhlIGRlZmF1bHQuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICMgb2xkIEludGVsIGZvciB4ODZfNjQgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgorICAgICAgZWNjKikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgICMgaWNjIHVzZWQgdG8gYmUgaW5jb21wYXRpYmxlIHdpdGggR0NDLgorICAgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCisgICAgICBpY2MqIHwgaWZvcnQqKQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctc3RhdGljJworICAgICAgICA7OworICAgICAgIyBMYWhleSBGb3J0cmFuIDguMS4KKyAgICAgIGxmOTUqKQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy0tc2hhcmVkJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKKwk7OworICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSopCisgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCisJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctZnBpYycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICAgIDs7CisgICAgICBjY2MqKQorICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KKyAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ub25fc2hhcmVkJworICAgICAgICA7OworICAgICAgeGwqKQorCSMgSUJNIFhMIEMgOC4wL0ZvcnRyYW4gMTAuMSBvbiBQUEMKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctcXBpYycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXFzdGF0aWNsaW5rJworCTs7CisgICAgICAqKQorCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSpTdW5cIEMqKQorCSAgIyBTdW4gQyA1LjkKKwkgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKwkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKwkgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJICA7OworCSpTdW5cIEYqKQorCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgorCSAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworCSAgbHRfcHJvZ19jb21waWxlcl93bD0nJworCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworCisgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIHJkb3MqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICopCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCc7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtjb25mb3JtX3BpYycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHVuaWNvcyopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICA7OworCisgICAgdXRzNCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLXBpYycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKworY2FzZSAkaG9zdF9vcyBpbgorICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKKyAgKmRqZ3BwKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyAgICA7OworICAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAgOzsKK2VzYWMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNQorJGFzX2VjaG8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CisKKworCisKKworCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCitpZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpYyB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljIHdvcmtzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3M9bm8KKyAgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBsdF9jb21waWxlcl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjg3MzY6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6ODc0MDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KKyAgICAgJEVDSE8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPiY2OyB9CisKK2lmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID0geHllczsgdGhlbgorICAgIGNhc2UgJGx0X3Byb2dfY29tcGlsZXJfcGljIGluCisgICAgICIiIHwgIiAiKikgOzsKKyAgICAgKikgbHRfcHJvZ19jb21waWxlcl9waWM9IiAkbHRfcHJvZ19jb21waWxlcl9waWMiIDs7CisgICAgIGVzYWMKK2Vsc2UKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkPW5vCitmaQorCitmaQorCisKKworCisKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIword2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNcIgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzPW5vCisgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgTERGTEFHUz0iJExERkxBR1MgJGx0X3RtcF9zdGF0aWNfZmxhZyIKKyAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgorICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorICAgICAgICRFQ0hPICJYJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAorICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz15ZXMKKyAgICAgICBmaQorICAgICBlbHNlCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIC1yIGNvbmZ0ZXN0KgorICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPiY2OyB9CisKK2lmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID0geHllczsgdGhlbgorICAgIDoKK2Vsc2UKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KK2ZpCisKKworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX28rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz1ubworICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTo4ODQxOiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6ODg0NTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJEVDSE8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz15ZXMKKyAgICAgZmkKKyAgIGZpCisgICBjaG1vZCB1K3cgLiAyPiY1CisgICAkUk0gY29uZnRlc3QqCisgICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCisgICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KKyAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRSTSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKKyAgICRSTSBvdXQvKiAmJiBybWRpciBvdXQKKyAgIGNkIC4uCisgICAkUk0gLXIgY29uZnRlc3QKKyAgICRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY2OyB9CisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289bm8KKyAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAorICAgbWtkaXIgY29uZnRlc3QKKyAgIGNkIGNvbmZ0ZXN0CisgICBta2RpciBvdXQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6ODg5NjogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOjg5MDA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKKyAgIHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgICRFQ0hPICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mNQorICAgJFJNIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgJFJNIC1yIGNvbmZ0ZXN0CisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNjsgfQorCisKKworCitoYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCitpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCisgICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MuLi4gIiA+JjY7IH0KKyAgaGFyZF9saW5rcz15ZXMKKyAgJFJNIGNvbmZ0ZXN0KgorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICB0b3VjaCBjb25mdGVzdC5hCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkX2xpbmtzIiA+JjUKKyRhc19lY2hvICIkaGFyZF9saW5rcyIgPiY2OyB9CisgIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mMjt9CisgICAgbmVlZF9sb2Nrcz13YXJuCisgIGZpCitlbHNlCisgIG5lZWRfbG9ja3M9bm8KK2ZpCisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorCisgIHJ1bnBhdGhfdmFyPQorICBhbGxvd191bmRlZmluZWRfZmxhZz0KKyAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCisgIGFyY2hpdmVfY21kcz0KKyAgYXJjaGl2ZV9leHBzeW1fY21kcz0KKyAgY29tcGlsZXJfbmVlZHNfb2JqZWN0PW5vCisgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9bm8KKyAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPQorICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIGhhcmRjb2RlX2F1dG9tYXRpYz1ubworICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPW5vCisgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9CisgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9CisgIGhhcmRjb2RlX21pbnVzX0w9bm8KKyAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj11bnN1cHBvcnRlZAorICBpbmhlcml0X3JwYXRoPW5vCisgIGxpbmtfYWxsX2RlcGxpYnM9dW5rbm93bgorICBtb2R1bGVfY21kcz0KKyAgbW9kdWxlX2V4cHN5bV9jbWRzPQorICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPQorICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0KKyAgdGhyZWFkX3NhZmVfZmxhZ19zcGVjPQorICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKyAgIyBpbmNsdWRlX2V4cHN5bXMgc2hvdWxkIGJlIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3ltYm9scyB0byBiZSAqYWx3YXlzKgorICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAorICBpbmNsdWRlX2V4cHN5bXM9CisgICMgZXhjbHVkZV9leHBzeW1zIGNhbiBiZSBhbiBleHRlbmRlZCByZWdleHAgb2Ygc3ltYm9scyB0byBleGNsdWRlCisgICMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5IGAgKCcgYW5kIGApJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKKyAgIyBlbmQgb2YgbGluZS4gIEV4YW1wbGU6IGBhfGJjfC4qZC4qJyB3aWxsIGV4Y2x1ZGUgdGhlIHN5bWJvbHMgYGEnIGFuZCBgYmMnLAorICAjIGFzIHdlbGwgYXMgYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zIGBkJy4KKyAgZXhjbHVkZV9leHBzeW1zPSdfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionCisgICMgQWx0aG91Z2ggX0dMT0JBTF9PRkZTRVRfVEFCTEVfIGlzIGEgdmFsaWQgc3ltYm9sIEMgbmFtZSwgbW9zdCBhLm91dAorICAjIHBsYXRmb3JtcyAoYWIpdXNlIGl0IGluIFBJQyBjb2RlLCBidXQgdGhlaXIgbGlua2VycyBnZXQgY29uZnVzZWQgaWYKKyAgIyB0aGUgc3ltYm9sIGlzIGV4cGxpY2l0bHkgcmVmZXJlbmNlZC4gIFNpbmNlIHBvcnRhYmxlIGNvZGUgY2Fubm90CisgICMgcmVseSBvbiB0aGlzIHN5bWJvbCBuYW1lLCBpdCdzIHByb2JhYmx5IGZpbmUgdG8gbmV2ZXIgaW5jbHVkZSBpdCBpbgorICAjIHByZWxvYWRlZCBzeW1ib2wgdGFibGVzLgorICAjIEV4Y2x1ZGUgc2hhcmVkIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24vZmluYWxpemF0aW9uIHN5bWJvbHMuCisgIGV4dHJhY3RfZXhwc3ltc19jbWRzPQorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKKyAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgICB3aXRoX2dudV9sZD1ubworICAgIGZpCisgICAgOzsKKyAgaW50ZXJpeCopCisgICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKKyAgICB3aXRoX2dudV9sZD15ZXMKKyAgICA7OworICBvcGVuYnNkKikKKyAgICB3aXRoX2dudV9sZD1ubworICAgIDs7CisgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCisgICAgbGlua19hbGxfZGVwbGlicz1ubworICAgIDs7CisgIGVzYWMKKworICBsZF9zaGxpYnM9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQorICAgIHdsYXJjPScke3dsfScKKworICAgICMgU2V0IHNvbWUgZGVmYXVsdHMgZm9yIEdOVSBsZCB3aXRoIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIFRoZXNlCisgICAgIyBhcmUgcmVzZXQgbGF0ZXIgaWYgc2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZC4gUHV0dGluZyB0aGVtCisgICAgIyBoZXJlIGFsbG93cyB0aGVtIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVjZXNzYXJ5LgorICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworICAgIGVsc2UKKyAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorICAgIGZpCisgICAgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPW5vCisgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAqR05VXCBnb2xkKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xMC4qKSA7OyAjIGNhdGNoIHZlcnNpb25zIDwgMi4xMQorICAgICAgKlwgMi4xMS45My4wLjJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBSSDcuMyAuLi4KKyAgICAgICpcIDIuMTEuOTIuMC4xMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIE1hbmRyYWtlIDguMiAuLi4KKyAgICAgICpcIDIuMTEuKikgOzsgIyBvdGhlciAyLjExIHZlcnNpb25zCisgICAgICAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7CisgICAgZXNhYworCisgICAgIyBTZWUgaWYgR05VIGxkIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeFszLTldKikKKyAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorCWxkX3NobGlicz1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIEdOVSBsaW5rZXIsIGF0IGxlYXN0IHVwIHRvIHJlbGVhc2UgMi45LjEsIGlzIHJlcG9ydGVkCisqKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KKyoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQorKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gbW9kaWZ5IHlvdXIgUEFUSAorKioqIHNvIHRoYXQgYSBub24tR05VIGxpbmtlciBpcyBmb3VuZCwgYW5kIHRoZW4gcmVzdGFydC4KKworX0xUX0VPRgorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICBhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJlb3MqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisJIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYworCSMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKKwlhcmNoaXZlX2NtZHM9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubworICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKworICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworCSMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKwkjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisJICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJZWxzZQorCSAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCWZpfgorCSRDQyAtc2hhcmVkICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworICAgICAgZWxzZQorCWxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBpbnRlcml4WzMtOV0qKQorICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1FJworICAgICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgorICAgICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQorICAgICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorICAgICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAorICAgICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluaworICAgICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgICAgOzsKKworICAgIGdudSogfCBsaW51eCogfCB0cGYqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgICAgdG1wX2RpZXQ9bm8KKyAgICAgIGlmIHRlc3QgIiRob3N0X29zIiA9IGxpbnV4LWRpZXRsaWJjOyB0aGVuCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGRpZXRcICopIHRtcF9kaWV0PXllczs7CSMgbGludXgtZGlldGxpYmMgd2l0aCBzdGF0aWMgbGlua2luZyAoIWRpZXQtZHluKQorCWVzYWMKKyAgICAgIGZpCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkRUdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbCBcCisJICYmIHRlc3QgIiR0bXBfZGlldCIgPSBubworICAgICAgdGhlbgorCXRtcF9hZGRmbGFnPQorCXRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJworCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgorICAgICAgICBwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJEVDSE8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJICA7OworCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkRUNITyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKKwllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJIyBJbnRlbCBDIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYycgOzsKKwllZmMqLGlhNjQqIHwgaWZvcnQqLGlhNjQqKQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIgb24gaWE2NAorCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljIC1ub2Zvcl9tYWluJyA7OworCWlmYyogfCBpZm9ydCopCQkJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyCisJICB0bXBfYWRkZmxhZz0nIC1ub2Zvcl9tYWluJyA7OworCWxmOTUqKQkJCQkjIExhaGV5IEZvcnRyYW4gOC4xCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKwkgIHRtcF9zaGFyZWRmbGFnPSctLXNoYXJlZCcgOzsKKwl4bFtjQ10qKQkJCSMgSUJNIFhMIEMgOC4wIG9uIFBQQyAoZGVhbCB3aXRoIHhsZiBiZWxvdykKKwkgIHRtcF9zaGFyZWRmbGFnPSctcW1rc2hyb2JqJworCSAgdG1wX2FkZGZsYWc9IDs7CisJZXNhYworCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45CisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkRUNITyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICBjb21waWxlcl9uZWVkc19vYmplY3Q9eWVzCisJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CisJKlN1blwgRiopCQkJIyBTdW4gRm9ydHJhbiA4LjMKKwkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKKwllc2FjCisJYXJjaGl2ZV9jbWRzPSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCisgICAgICAgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAkQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworICAgICAgICBmaQorCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwl4bGYqKQorCSAgIyBJQk0gWEwgRm9ydHJhbiAxMC4xIG9uIFBQQyBjYW5ub3QgY3JlYXRlIHNoYXJlZCBsaWJzIGl0c2VsZgorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nLXJwYXRoICRsaWJkaXInCisJICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKwkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJICBmaQorCSAgOzsKKwllc2FjCisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBuZXRic2QqIHwgbmV0YnNkZWxmKi1nbnUpCisgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKwl3bGFyYz0KKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIGlmICRMRCAtdiAyPiYxIHwgJEdSRVAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgorCWxkX3NobGlicz1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogVGhlIHJlbGVhc2VzIDIuOC4qIG9mIHRoZSBHTlUgbGlua2VyIGNhbm5vdCByZWxpYWJseQorKioqIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMgc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAorKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQorKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi45LjEgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKKyoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCisqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KKworX0xUX0VPRgorICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgorICAgICAgICAqXCBbMDFdLiogfCAqXCAyLlswLTldLiogfCAqXCAyLjFbMC01XS4qKQorCWxkX3NobGlicz1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogUmVsZWFzZXMgb2YgdGhlIEdOVSBsaW5rZXIgcHJpb3IgdG8gMi4xNi45MS4wLjMgY2FuIG5vdAorKioqIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNDTyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjE2LjkxLjAuMyBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitfTFRfRU9GCisJOzsKKwkqKQorCSAgIyBGb3Igc2VjdXJpdHkgcmVhc29ucywgaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IGFsd2F5cworCSAgIyB1c2UgYWJzb2x1dGUgcGF0aHMgZm9yIG5hbWluZyBzaGFyZWQgbGlicmFyaWVzLCBhbmQgZXhjbHVkZSB0aGUKKwkgICMgRFRfUlVOUEFUSCB0YWcgZnJvbSBleGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzLiAgQnV0IGRvaW5nIHNvCisJICAjIHJlcXVpcmVzIHRoYXQgeW91IGNvbXBpbGUgZXZlcnl0aGluZyB0d2ljZSwgd2hpY2ggaXMgYSBwYWluLgorCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgZWxzZQorCSAgICBsZF9zaGxpYnM9bm8KKwkgIGZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgd2xhcmM9CisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZWxzZQorCWxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCAiJGxkX3NobGlicyIgPSBubzsgdGhlbgorICAgICAgcnVucGF0aF92YXI9CisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPQorICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CisgICAgZmkKKyAgZWxzZQorICAgICMgUE9SVE1FIGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIGxpbmtlciAobm90IEdOVSBsZCkKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4MyopCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJExEIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtYkU6JGV4cG9ydF9zeW1ib2xzIC1UNTEyIC1INTEyIC1iTTpTUkV+JEFSICRBUl9GTEFHUyAkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisgICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQorICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgorICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KKwkjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKKwkjIGJyb2tlbiBjb2xsZWN0Mi4KKwloYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYWl4WzQtOV0qKQorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisJIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCWV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCisJbm9fZW50cnlfZmxhZz0iIgorICAgICAgZWxzZQorCSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorCSMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KKwlpZiAkTk0gLVYgMj4mMSB8ICRHUkVQICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisJICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworCWVsc2UKKwkgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworCWZpCisJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCisJIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisJIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisJIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKwljYXNlICRob3N0X29zIGluIGFpeDQuWzIzXXxhaXg0LlsyM10uKnxhaXhbNS05XSopCisJICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKwkgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCisJICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisJICAgIGJyZWFrCisJICBmaQorCSAgZG9uZQorCSAgOzsKKwllc2FjCisKKwlleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKKyAgICAgIGZpCisKKyAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KKyAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQorICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KKyAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90CisgICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KKworICAgICAgYXJjaGl2ZV9jbWRzPScnCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JworICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgICAgIGZpbGVfbGlzdF9zcGVjPScke3dsfS1mLCcKKworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwljYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQorCSMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjaworCSMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKworCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKKwkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8ICRHUkVQIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorCSAgdGhlbgorCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisJICA6CisJICBlbHNlCisJICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisJICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKwkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKKwkgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisJICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKKwkgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisJICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQorCSAgZmkKKwkgIDs7CisJZXNhYworCXNoYXJlZF9mbGFnPSctc2hhcmVkJworCWlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCisJZmkKKwlsaW5rX2FsbF9kZXBsaWJzPW5vCisgICAgICBlbHNlCisJIyBub3QgdXNpbmcgZ2NjCisJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQorCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CisJICBzaGFyZWRfZmxhZz0nLUcnCisJZWxzZQorCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJworCSAgZWxzZQorCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJworCSAgZmkKKwlmaQorICAgICAgZmkKKworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1iZXhwYWxsJworICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCisgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgorICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCisJIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCWFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCisgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCisgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCitsdF9haXhfbGlicGF0aF9zZWQ9JworICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKwkvXjAvIHsKKwkgICAgcy9eMCAgKlwoLipcKSQvXDEvCisJICAgIHAKKwl9CisgICAgfScKK2FpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgoraWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKK2ZpCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2lmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuICRFQ0hPICJYJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgfCAkWHNlZDsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorICAgICAgZWxzZQorCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSIteiBub2RlZnMiCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgorCWVsc2UKKwkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisJICMgZW1wdHkgZXhlY3V0YWJsZS4KKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKK2x0X2FpeF9saWJwYXRoX3NlZD0nCisgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworCS9eMC8geworCSAgICBzL14wICAqXCguKlwpJC9cMS8KKwkgICAgcAorCX0KKyAgICB9JworYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCisgIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorZmkKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAoraWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisKKwkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisJICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICBub191bmRlZmluZWRfZmxhZz0nICR7d2x9LWJlcm5vdG9rJworCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1iZXJvaycKKwkgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcworCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyRjb252ZW5pZW5jZScKKwkgIGFyY2hpdmVfY21kc19uZWVkX2xjPXllcworCSAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKwlmaQorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICBhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJzZGlbNDVdKikKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0tcmR5bmFtaWMKKyAgICAgIDs7CisKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisgICAgICBsaWJleHQ9bGliCisgICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKyAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYCRFQ0hPICJYJGRlcGxpYnMiIHwgJFhzZWQgLWUgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKyAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisgICAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKyAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKyAgICAgIGZpeF9zcmNmaWxlX3BhdGg9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorCisKKyAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KKyAgaGFyZGNvZGVfZGlyZWN0PW5vCisgIGhhcmRjb2RlX2F1dG9tYXRpYz15ZXMKKyAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj11bnN1cHBvcnRlZAorICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJworICBsaW5rX2FsbF9kZXBsaWJzPXllcworICBhbGxvd191bmRlZmluZWRfZmxhZz0iJF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkIgorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICBpZm9ydCopIF9sdF9kYXJfY2FuX3NoYXJlZD15ZXMgOzsKKyAgICAgKikgX2x0X2Rhcl9jYW5fc2hhcmVkPSRHQ0MgOzsKKyAgZXNhYworICBpZiB0ZXN0ICIkX2x0X2Rhcl9jYW5fc2hhcmVkIiA9ICJ5ZXMiOyB0aGVuCisgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZWNobworICAgIGFyY2hpdmVfY21kcz0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCR7X2x0X2RzeW11dGlsfSIKKyAgICBtb2R1bGVfY21kcz0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZHN5bXV0aWx9IgorICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9InNlZCAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJHtfbHRfZGFyX3NpbmdsZV9tb2R9JHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBtb2R1bGVfZXhwc3ltX2NtZHM9InNlZCAtZSAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKworICBlbHNlCisgIGxkX3NobGlicz1ubworICBmaQorCisgICAgICA7OworCisgICAgZGd1eCopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICBmcmVlYnNkMSopCisgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIDs7CisKKyAgICAjIEZyZWVCU0QgMi4yLlswMTJdIGFsbG93cyB1cyB0byBpbmNsdWRlIGMrK3J0MC5vIHRvIGdldCBDKysgY29uc3RydWN0b3IKKyAgICAjIHN1cHBvcnQuICBGdXR1cmUgdmVyc2lvbnMgZG8gdGhpcyBhdXRvbWF0aWNhbGx5LCBidXQgYW4gZXhwbGljaXQgYysrcnQwLm8KKyAgICAjIGRvZXMgbm90IGJyZWFrIGFueXRoaW5nLCBhbmQgaGVscHMgc2lnbmlmaWNhbnRseSAoYXQgdGhlIGNvc3Qgb2YgYSBsaXR0bGUKKyAgICAjIGV4dHJhIHNwYWNlKS4KKyAgICBmcmVlYnNkMi4yKikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAvdXNyL2xpYi9jKytydDAubycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCisgICAgZnJlZWJzZDIqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICBocHV4OSopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisKKyAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUUnCisgICAgICA7OworCisgICAgaHB1eDEwKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIC1hICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JytiICRsaWJkaXInCisJaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisJaGFyZGNvZGVfZGlyZWN0PXllcworCWhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKKwlleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUUnCisJIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKwloYXJkY29kZV9taW51c19MPXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBocHV4MTEqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgLWEgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCopCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwlpYTY0KikKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWVzYWMKKyAgICAgIGVsc2UKKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqKQorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWlhNjQqKQorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisJaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisKKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqfGlhNjQqKQorCSAgaGFyZGNvZGVfZGlyZWN0PW5vCisJICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisJICA7OworCSopCisJICBoYXJkY29kZV9kaXJlY3Q9eWVzCisJICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCisJICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUUnCisKKwkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKwkgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKwkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCisJIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KKyAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgICAgICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCitpbnQgZm9vKHZvaWQpIHt9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSdubycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgaW5oZXJpdF9ycGF0aD15ZXMKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgICAgICA7OworCisgICAgbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAjIGEub3V0CisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAgICAgIyBFTEYKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgbmV3c29zNikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgIDs7CisKKyAgICBvcGVuYnNkKikKKyAgICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCisJaGFyZGNvZGVfZGlyZWN0PXllcworCWhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKwloYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCisJaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMnCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1FJworCWVsc2UKKwkgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQorCSAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworCSAgICAgOzsKKwkgICAqKQorCSAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICAgOzsKKwkgIGVzYWMKKwlmaQorICAgICAgZWxzZQorCWxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBvczIqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgICBhcmNoaXZlX2NtZHM9JyRFQ0hPICJMSUJSQVJZICRsaWJuYW1lIElOSVRJTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRFQ0hPIERBVEEgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRFQ0hPICIgU0lOR0xFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRFQ0hPIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVteGV4cCAkbGlib2JqcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JENDIC1aZGxsIC1aY3J0ZGxsIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIDs7CisKKyAgICBvc2YzKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgICBlbHNlCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0nbm8nCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisKKyAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBlbHNlCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmU7IHByaW50ZiAiJXNcXG4iICItaGlkZGVuIj4+ICRsaWIuZXhwfgorCSRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHt3bH0taW5wdXQgJHt3bH0kbGliLmV4cCAkY29tcGlsZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+JFJNICRsaWIuZXhwJworCisJIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1ycGF0aCAkbGliZGlyJworICAgICAgZmkKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSdubycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiBkZWZzJworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwl3bGFyYz0nJHt3bH0nCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgZWxzZQorCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorCSoiQ29tcGlsZXJzIDUuMCIqKQorCSAgd2xhcmM9JycKKwkgIGFyY2hpdmVfY21kcz0nJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCSopCisJICB3bGFyYz0nJHt3bH0nCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikgOzsKKyAgICAgICopCisJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKKwkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLiAgR0NDIGRpc2NhcmRzIGl0IHdpdGhvdXQgYCR3bCcsCisJIyBidXQgaXMgY2FyZWZ1bCBlbm91Z2ggbm90IHRvIHJlb3JkZXIuCisJIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKKwlpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKKwllbHNlCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBpZiB0ZXN0ICJ4JGhvc3RfdmVuZG9yIiA9IHhzZXF1ZW50OyB0aGVuCisJIyBVc2UgJENDIHRvIGxpbmsgdW5kZXIgc2VxdWVudCwgYmVjYXVzZSBpdCB0aHJvd3MgaW4gc29tZSBleHRyYSAubworCSMgZmlsZXMgdGhhdCBtYWtlIC5pbml0IGFuZCAuZmluaSBzZWN0aW9ucyB3b3JrLgorCWFyY2hpdmVfY21kcz0nJENDIC1HICR7d2x9LWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NCkKKyAgICAgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisJc25pKQorCSAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBoYXJkY29kZV9kaXJlY3Q9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PworCTs7CisJc2llbWVucykKKwkgICMjIExEIGlzIGxkIGl0IG1ha2VzIGEgUExBTUxJQgorCSAgIyMgQ0MganVzdCBtYWtlcyBhIEdyb3NzTW9kdWxlLgorCSAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgcmVsb2FkX2NtZHM9JyRDQyAtciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworCSAgaGFyZGNvZGVfZGlyZWN0PW5vCisgICAgICAgIDs7CisJbW90b3JvbGEpCisJICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIGhhcmRjb2RlX2RpcmVjdD1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NC4zKikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSctQmV4cG9ydCcKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworCXJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisJaGFyZGNvZGVfcnVucGF0aF92YXI9eWVzCisJbGRfc2hsaWJzPXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuWzAyNF0qKQorICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LXosdGV4dCcKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQorICAgICAgIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKKyAgICAgICMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KKyAgICAgICMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAorICAgICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAorICAgICAgIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCisgICAgICAjIGFzIC16IGRlZnMuCisgICAgICBub191bmRlZmluZWRfZmxhZz0nJHt3bH0teix0ZXh0JworICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LXosbm9kZWZzJworICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LVIsJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCisgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1CZXhwb3J0JworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgdXRzNCopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgbGRfc2hsaWJzPW5vCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3QgeCRob3N0X3ZlbmRvciA9IHhzbmk7IHRoZW4KKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKwlleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJsYXJnZWR5bnN5bScKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbGRfc2hsaWJzIiA+JjUKKyRhc19lY2hvICIkbGRfc2hsaWJzIiA+JjY7IH0KK3Rlc3QgIiRsZF9zaGxpYnMiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCit3aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKKworCisKKworCisKKworCisKKworCisKKworCisKKyMKKyMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KKyMKK2Nhc2UgIngkYXJjaGl2ZV9jbWRzX25lZWRfbGMiIGluCit4fHh5ZXMpCisgICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKKyAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9eWVzCisKKyAgaWYgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgY2FzZSAkYXJjaGl2ZV9jbWRzIGluCisgICAgKid+JyopCisgICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCisgICAgICA7OworICAgICckQ0MgJyopCisgICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCisgICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKKyAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluLi4uICIgPiY2OyB9CisgICAgICAkUk0gY29uZnRlc3QqCisgICAgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICBzb25hbWU9Y29uZnRlc3QKKyAgICAgICAgbGliPWNvbmZ0ZXN0CisgICAgICAgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAorICAgICAgICBkZXBsaWJzPQorICAgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bAorCXBpY19mbGFnPSRsdF9wcm9nX2NvbXBpbGVyX3BpYworICAgICAgICBjb21waWxlcl9mbGFncz0tdgorICAgICAgICBsaW5rZXJfZmxhZ3M9LXYKKyAgICAgICAgdmVyc3RyaW5nPQorICAgICAgICBvdXRwdXRfb2JqZGlyPS4KKyAgICAgICAgbGlibmFtZT1jb25mdGVzdAorICAgICAgICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRhbGxvd191bmRlZmluZWRfZmxhZworICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0KKyAgICAgICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFyY2hpdmVfY21kcyAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFyY2hpdmVfY21kcyAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKyAgICAgICAgdGhlbgorCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KKyAgICAgICAgZWxzZQorCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9eWVzCisgICAgICAgIGZpCisgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCisgICAgICBlbHNlCisgICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorICAgICAgZmkKKyAgICAgICRSTSBjb25mdGVzdCoKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYXJjaGl2ZV9jbWRzX25lZWRfbGMiID4mNQorJGFzX2VjaG8gIiRhcmNoaXZlX2NtZHNfbmVlZF9sYyIgPiY2OyB9CisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgOzsKK2VzYWMKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MuLi4gIiA+JjY7IH0KKworaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGRhcndpbiopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8sL0xSLyIgOzsKKyAgICAqKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovIiA7OworICBlc2FjCisgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBhd2sgJGx0X2F3a19hcmcgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLD0vLC8sZyJgCisgIGlmICRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnOycgPi9kZXYvbnVsbCA7IHRoZW4KKyAgICAjIGlmIHRoZSBwYXRoIGNvbnRhaW5zICI7IiB0aGVuIHdlIGFzc3VtZSBpdCB0byBiZSB0aGUgc2VwYXJhdG9yCisgICAgIyBvdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgc3RhbmRhcmQgcGF0aCBzZXBhcmF0b3IgKGkuZS4gIjoiKSAtIGl0IGlzCisgICAgIyBhc3N1bWVkIHRoYXQgbm8gcGFydCBvZiBhIG5vcm1hbCBwYXRobmFtZSBjb250YWlucyAiOyIgYnV0IHRoYXQgc2hvdWxkCisgICAgIyBva2F5IGluIHRoZSByZWFsIHdvcmxkIHdoZXJlICI7IiBpbiBkaXJwYXRocyBpcyBpdHNlbGYgcHJvYmxlbWF0aWMuCisgICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorICBlbHNlCisgICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICBmaQorICAjIE9rLCBub3cgd2UgaGF2ZSB0aGUgcGF0aCwgc2VwYXJhdGVkIGJ5IHNwYWNlcywgd2UgY2FuIHN0ZXAgdGhyb3VnaCBpdAorICAjIGFuZCBhZGQgbXVsdGlsaWIgZGlyIGlmIG5lY2Vzc2FyeS4KKyAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9CisgIGx0X211bHRpX29zX2Rpcj1gJENDICRDUFBGTEFHUyAkQ0ZMQUdTICRMREZMQUdTIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnkgMj4vZGV2L251bGxgCisgIGZvciBsdF9zeXNfcGF0aCBpbiAkbHRfc2VhcmNoX3BhdGhfc3BlYzsgZG8KKyAgICBpZiB0ZXN0IC1kICIkbHRfc3lzX3BhdGgvJGx0X211bHRpX29zX2RpciI7IHRoZW4KKyAgICAgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoLyRsdF9tdWx0aV9vc19kaXIiCisgICAgZWxzZQorICAgICAgdGVzdCAtZCAiJGx0X3N5c19wYXRoIiAmJiBcCisJbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgiCisgICAgZmkKKyAgZG9uZQorICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgfCBhd2sgJworQkVHSU4ge1JTPSIgIjsgRlM9Ii98XG4iO30geworICBsdF9mb289IiI7CisgIGx0X2NvdW50PTA7CisgIGZvciAobHRfaSA9IE5GOyBsdF9pID4gMDsgbHRfaS0tKSB7CisgICAgaWYgKCRsdF9pICE9ICIiICYmICRsdF9pICE9ICIuIikgeworICAgICAgaWYgKCRsdF9pID09ICIuLiIpIHsKKyAgICAgICAgbHRfY291bnQrKzsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChsdF9jb3VudCA9PSAwKSB7CisgICAgICAgICAgbHRfZm9vPSIvIiAkbHRfaSBsdF9mb287CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbHRfY291bnQtLTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICBpZiAobHRfZm9vICE9ICIiKSB7IGx0X2ZyZXFbbHRfZm9vXSsrOyB9CisgIGlmIChsdF9mcmVxW2x0X2Zvb10gPT0gMSkgeyBwcmludCBsdF9mb287IH0KK30nYAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICRsdF9zZWFyY2hfcGF0aF9zcGVjYAorZWxzZQorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCitmaQorbGlicmFyeV9uYW1lc19zcGVjPQorbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKK3NvbmFtZV9zcGVjPQorc2hyZXh0X2NtZHM9Ii5zbyIKK3Bvc3RpbnN0YWxsX2NtZHM9Citwb3N0dW5pbnN0YWxsX2NtZHM9CitmaW5pc2hfY21kcz0KK2ZpbmlzaF9ldmFsPQorc2hsaWJwYXRoX3Zhcj0KK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD11bmtub3duCit2ZXJzaW9uX3R5cGU9bm9uZQorZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCituZWVkX2xpYl9wcmVmaXg9dW5rbm93bgoraGFyZGNvZGVfaW50b19saWJzPW5vCisKKyMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgorIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCituZWVkX3ZlcnNpb249dW5rbm93bgorCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJworICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKworICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIDs7CisKK2FpeFs0LTldKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICMgQUlYIDUgc3VwcG9ydHMgSUE2NAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGVsc2UKKyAgICAjIFdpdGggR0NDIHVwIHRvIDIuOTUueCwgY29sbGVjdDIgd291bGQgY3JlYXRlIGFuIGltcG9ydCBmaWxlCisgICAgIyBmb3IgZGVwZW5kZW5jZSBsaWJyYXJpZXMuICBUaGUgaW1wb3J0IGZpbGUgd291bGQgc3RhcnQgd2l0aAorICAgICMgdGhlIGxpbmUgYCMhIC4nLiAgVGhpcyB3b3VsZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGxpYnJhcnkgdG8KKyAgICAjIGRlcGVuZCBvbiBgLicsIGFsd2F5cyBhbiBpbnZhbGlkIGxpYnJhcnkuICBUaGlzIHdhcyBmaXhlZCBpbgorICAgICMgZGV2ZWxvcG1lbnQgc25hcHNob3RzIG9mIEdDQyBwcmlvciB0byAzLjAuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4NCB8IGFpeDQuWzAxXSB8IGFpeDQuWzAxXS4qKQorICAgICAgaWYgeyBlY2hvICcjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk3KScKKwkgICBlY2hvICcgeWVzICcKKwkgICBlY2hvICcjZW5kaWYnOyB9IHwgJHtDQ30gLUUgLSB8ICRHUkVQIHllcyA+IC9kZXYvbnVsbDsgdGhlbgorCToKKyAgICAgIGVsc2UKKwljYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisgICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbiBub3QgaGFyZGNvZGUgY29ycmVjdAorICAgICMgc29uYW1lIGludG8gZXhlY3V0YWJsZS4gUHJvYmFibHkgd2UgY2FuIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8KKyAgICAjIGNvbGxlY3QyLCBzbyBhZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSB1c2VmdWwgaW4gZnV0dXJlLgorICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCisgICAgICAjIGluc3RlYWQgb2YgbGliPG5hbWU+LmEgdG8gbGV0IHBlb3BsZSBrbm93IHRoYXQgdGhlc2UgYXJlIG5vdAorICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgZWxzZQorICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKKyAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5hICRsaWJuYW1lLmEnCisgICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGZpCisgICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIGZpCisgIDs7CisKK2FtaWdhb3MqKQorICBjYXNlICRob3N0X2NwdSBpbgorICBwb3dlcnBjKQorICAgICMgU2luY2UgSnVseSAyMDA3IEFtaWdhT1M0IG9mZmljaWFsbHkgc3VwcG9ydHMgLnNvIGxpYnJhcmllcy4KKyAgICAjIFdoZW4gY29tcGlsaW5nIHRoZSBleGVjdXRhYmxlLCBhZGQgLXVzZS1keW5sZCAtTHNvYmpzOiB0byB0aGUgY29tcGlsZWxpbmUuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgOzsKKyAgbTY4aykKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJworICAgICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCisgICAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWAkRUNITyAiWCRsaWIiIHwgJFhzZWQgLWUgJ1wnJ3MlXi4qL1woW14vXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgdGVzdCAkUk0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCisgICAgOzsKKyAgZXNhYworICA7OworCitiZW9zKikKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICA7OworCitic2RpWzQ1XSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCisgICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCisgICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdworICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKKyAgOzsKKworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICB2ZXJzaW9uX3R5cGU9d2luZG93cworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF92ZXJzaW9uPW5vCisgIG5lZWRfbGliX3ByZWZpeD1ubworCisgIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgorICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGlmIHRlc3QgLW4gJ1wnJyRzdHJpcG1lJ1wnJyAmJiB0ZXN0IC1uICdcJyckc3RyaXBsaWInXCcnOyB0aGVuCisgICAgICAgIGV2YWwgJ1wnJyRzdHJpcGxpYiBcJGRsZGlyLyRkbG5hbWUnXCcnIHx8IGV4aXQgXCQ/OworICAgICAgZmknCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJFJNIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBjeWd3aW4qKQorICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIC9saWIvdzMyYXBpIC9saWIgL3Vzci9sb2NhbC9saWIiCisgICAgICA7OworICAgIG1pbmd3KiB8IGNlZ2NjKikKKyAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4CisgICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCAkR1JFUCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAorICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEggcHJpbnRlZCBieQorICAgICAgICAjIG1pbmd3IGdjYywgYnV0IHdlIGFyZSBydW5uaW5nIG9uIEN5Z3dpbi4gR2NjIHByaW50cyBpdHMgc2VhcmNoCisgICAgICAgICMgcGF0aCB3aXRoIDsgc2VwYXJhdG9ycywgYW5kIHdpdGggZHJpdmUgbGV0dGVycy4gV2UgY2FuIGhhbmRsZSB0aGUKKyAgICAgICAgIyBkcml2ZSBsZXR0ZXJzIChjeWd3aW4gZmlsZXV0aWxzIHVuZGVyc3RhbmRzIHRoZW0pLCBzbyBsZWF2ZSB0aGVtLAorICAgICAgICAjIGVzcGVjaWFsbHkgYXMgd2UgbWlnaHQgcGFzcyBmaWxlcyBmb3VuZCB0aGVyZSB0byBhIG1pbmd3IG9iamR1bXAsCisgICAgICAgICMgd2hpY2ggd291bGRuJ3QgdW5kZXJzdGFuZCBhIGN5Z3dpbmlmaWVkIHBhdGguIEFoaC4KKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKyAgICAgIGVsc2UKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICAgIGZpCisgICAgICA7OworICAgIHB3MzIqKQorICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICA7OworICAgIGVzYWMKKyAgICA7OworCisgICopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisgICAgOzsKKyAgZXNhYworICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgc2hsaWJwYXRoX3Zhcj1QQVRICisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgorICB2ZXJzaW9uX3R5cGU9ZGFyd2luCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKKyAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCisKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC91c3IvbG9jYWwvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYicKKyAgOzsKKworZGd1eCopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworZnJlZWJzZDEqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCitmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICMgRHJhZ29uRmx5IGRvZXMgbm90IGhhdmUgYW91dC4gIFdoZW4vaWYgdGhleSBpbXBsZW1lbnQgYSBuZXcKKyAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCisgIGlmIHRlc3QgLXggL3Vzci9iaW4vb2JqZm9ybWF0OyB0aGVuCisgICAgb2JqZm9ybWF0PWAvdXNyL2Jpbi9vYmpmb3JtYXRgCisgIGVsc2UKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgZnJlZWJzZFsxMjNdKikgb2JqZm9ybWF0PWFvdXQgOzsKKyAgICAqKSBvYmpmb3JtYXQ9ZWxmIDs7CisgICAgZXNhYworICBmaQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0CisgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorICAgIGZyZWVic2QtZWxmKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgZnJlZWJzZC0qKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgICBuZWVkX3ZlcnNpb249eWVzCisgICAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZnJlZWJzZDIqKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bMDFdKiB8IGZyZWVic2RlbGYzLlswMV0qKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuWzItOV0qIHwgZnJlZWJzZGVsZjMuWzItOV0qIHwgXAorICBmcmVlYnNkNC5bMC01XSB8IGZyZWVic2RlbGY0LlswLTVdIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5CisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBlc2FjCisgIDs7CisKK2dudSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bworICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgaWE2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbycKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGlmIHRlc3QgIlgkSFBVWF9JQTY0X01PREUiID0gWDMyOyB0aGVuCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCisgICAgZWxzZQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgorICAgIGZpCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgIGhwcGEqNjQqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICA7OworICAqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgOzsKKyAgZXNhYworICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NS4KKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCisgIDs7CisKK2ludGVyaXhbMy05XSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGR5bmFtaWNfbGlua2VyPSdJbnRlcml4IDMueCBsZC5zby4xIChQRSwgbGlrZSBFTEYpJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICBjYXNlICRob3N0X29zIGluCisgICAgbm9uc3RvcHV4KikgdmVyc2lvbl90eXBlPW5vbnN0b3B1eCA7OworICAgICopCisJaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorCQl2ZXJzaW9uX3R5cGU9bGludXgKKwllbHNlCisJCXZlcnNpb25fdHlwZT1pcml4CisJZmkgOzsKKyAgZXNhYworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBpcml4NSogfCBub25zdG9wdXgqKQorICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KKyAgICA7OworICAqKQorICAgIGNhc2UgJExEIGluICMgbGlidG9vbC5tNCB3aWxsIGFkZCBvbmUgb2YgdGhlc2Ugc3dpdGNoZXMgdG8gTEQKKyAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKQorICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz0zMi1iaXQ7OworICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpCisgICAgICBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgbGlibWFnaWM9TjMyOzsKKyAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikKKyAgICAgIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IGxpYm1hZ2ljPTY0LWJpdDs7CisgICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZJHtzaGxpYnN1ZmZ9X1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSIKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCisjIE5vIHNoYXJlZCBsaWIgc3VwcG9ydCBmb3IgTGludXggb2xkbGQsIGFvdXQsIG9yIGNvZmYuCitsaW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCisjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCitsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgIyBTb21lIGJpbnV0aWxzIGxkIGFyZSBwYXRjaGVkIHRvIHNldCBEVF9SVU5QQVRICisgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICBzYXZlX2xpYmRpcj0kbGliZGlyCisgIGV2YWwgImxpYmRpcj0vZm9vOyB3bD1cIiRsdF9wcm9nX2NvbXBpbGVyX3dsXCI7IFwKKyAgICAgICBMREZMQUdTPVwiXCRMREZMQUdTICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBpZiAgKCRPQkpEVU1QIC1wIGNvbmZ0ZXN0JGFjX2V4ZWV4dCkgMj4vZGV2L251bGwgfCBncmVwICJSVU5QQVRILiokbGliZGlyIiA+L2Rldi9udWxsOyB0aGVuIDoKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworZmkKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKyAgbGliZGlyPSRzYXZlX2xpYmRpcgorCisgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKyAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworCisgICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCisgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisgICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bCSBdKmh3Y2FwWwkgXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliICRsdF9sZF9leHRyYSIKKyAgZmkKKworICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KKyAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQorICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKKyAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKKyAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCisgICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgorICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJworICA7OworCituZXRic2RlbGYqLWdudSkKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCisgIDs7CisKK25ldGJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKKyAgZWxzZQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKKyAgZmkKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK25ld3NvczYpCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICA7OworCisqbnRvKiB8ICpxbngqKQorICB2ZXJzaW9uX3R5cGU9cW54CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdsZHFueC5zbycKKyAgOzsKKworb3BlbmJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIiCisgIG5lZWRfbGliX3ByZWZpeD1ubworICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKQluZWVkX3ZlcnNpb249eWVzIDs7CisgICAgKikJCQkJbmVlZF92ZXJzaW9uPW5vICA7OworICBlc2FjCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBvcGVuYnNkMi5bODldIHwgb3BlbmJzZDIuWzg5XS4qKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCTs7CisgICAgICAqKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKwk7OworICAgICAgZXNhYworICBlbHNlCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBmaQorICA7OworCitvczIqKQorICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCisgIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgdmVyc2lvbl90eXBlPW9zZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKKyAgOzsKKworcmRvcyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK3NvbGFyaXMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCisgIDs7CisKK3N1bm9zNCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgZmkKKyAgbmVlZF92ZXJzaW9uPXllcworICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgICAgc25pKQorICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisgICAgICA7OworICAgIHNpZW1lbnMpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgbW90b3JvbGEpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJworICAgICAgOzsKKyAgZXNhYworICA7OworCitzeXN2NCpNUCopCisgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KKyAgICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGZpCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNjbzMuMnY1KikKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKKyAgOzsKKwordHBmKikKKyAgIyBUUEYgaXMgYSBjcm9zcy10YXJnZXQgb25seS4gIFByZWZlcnJlZCBjcm9zcy1ob3N0ID0gR05VL0xpbnV4LgorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKwordXRzNCopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKK2VzYWMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQorJGFzX2VjaG8gIiRkeW5hbWljX2xpbmtlciIgPiY2OyB9Cit0ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKK2ZpCisKK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKK2ZpCitpZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiCitmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcy4uLiAiID4mNjsgfQoraGFyZGNvZGVfYWN0aW9uPQoraWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHx8CisgICB0ZXN0IC1uICIkcnVucGF0aF92YXIiIHx8CisgICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSAiWHllcyIgOyB0aGVuCisKKyAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgorICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiAhPSBubyAmJgorICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCisgICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKKyAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQorICAgICAjIyB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCApIiAhPSBubyAmJgorICAgICB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KKyAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgorICAgIGhhcmRjb2RlX2FjdGlvbj1yZWxpbmsKKyAgZWxzZQorICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCisgICAgaGFyZGNvZGVfYWN0aW9uPWltbWVkaWF0ZQorICBmaQorZWxzZQorICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZworICAjIGRpcmVjdG9yaWVzLgorICBoYXJkY29kZV9hY3Rpb249dW5zdXBwb3J0ZWQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhcmRjb2RlX2FjdGlvbiIgPiY1CiskYXNfZWNobyAiJGhhcmRjb2RlX2FjdGlvbiIgPiY2OyB9CisKK2lmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb24iID0gcmVsaW5rIHx8CisgICB0ZXN0ICIkaW5oZXJpdF9ycGF0aCIgPSB5ZXM7IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KK2VsaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgfHwKKyAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gbm87IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5CisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKK2ZpCisKKworCisKKworCisgIGlmIHRlc3QgIngkZW5hYmxlX2Rsb3BlbiIgIT0geHllczsgdGhlbgorICBlbmFibGVfZGxvcGVuPXVua25vd24KKyAgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24KKyAgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duCitlbHNlCisgIGx0X2N2X2Rsb3Blbj1ubworICBsdF9jdl9kbG9wZW5fbGlicz0KKworICBjYXNlICRob3N0X29zIGluCisgIGJlb3MqKQorICAgIGx0X2N2X2Rsb3Blbj0ibG9hZF9hZGRfb24iCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCisgICAgOzsKKworICBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICBsdF9jdl9kbG9wZW49IkxvYWRMaWJyYXJ5IgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIDs7CisKKyAgY3lnd2luKikKKyAgICBsdF9jdl9kbG9wZW49ImRsb3BlbiIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICA7OworCisgIGRhcndpbiopCisgICMgaWYgbGliZGwgaXMgaW5zdGFsbGVkIHdlIG5lZWQgdG8gbGluayBhZ2FpbnN0IGl0CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9kbF9kbG9wZW4rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRsICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBkbG9wZW4gKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBkbG9wZW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2RsX2Rsb3Blbj15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2RsX2Rsb3Blbj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbF9kbG9wZW4iID0geCIieWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIgorZWxzZQorCisgICAgbHRfY3ZfZGxvcGVuPSJkeWxkIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcworCitmaQorCisgICAgOzsKKworICAqKQorICAgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInNobF9sb2FkIiAiYWNfY3ZfZnVuY19zaGxfbG9hZCIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19zaGxfbG9hZCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49InNobF9sb2FkIgorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2RsZF9zaGxfbG9hZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sZGxkICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBzaGxfbG9hZCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHNobF9sb2FkICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQ9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA9IHgiInllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCIKK2Vsc2UKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZGxvcGVuIiAiYWNfY3ZfZnVuY19kbG9wZW4iCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZGxvcGVuIiA9IHgiInllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIgorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2RsX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sZGwgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGRsb3BlbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGRsb3BlbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfZGxfZGxvcGVuPXllcworZWxzZQorICBhY19jdl9saWJfZGxfZGxvcGVuPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPSB4IiJ5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX3N2bGRfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxzdmxkICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBkbG9wZW4gKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBkbG9wZW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX3N2bGRfZGxvcGVuPXllcworZWxzZQorICBhY19jdl9saWJfc3ZsZF9kbG9wZW49bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA9IHgiInllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxzdmxkIgorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbGRfbGluayBpbiAtbGRsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxkX2xpbmsgaW4gLWxkbGQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2RsZF9kbGRfbGluaytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sZGxkICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBkbGRfbGluayAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGRsZF9saW5rICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9kbGRfZGxkX2xpbms9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9kbGRfZGxkX2xpbms9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA9IHgiInllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj0iZGxkX2xpbmsiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCIKK2ZpCisKKworZmkKKworCitmaQorCisKK2ZpCisKKworZmkKKworCitmaQorCisgICAgOzsKKyAgZXNhYworCisgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuIiAhPSB4bm87IHRoZW4KKyAgICBlbmFibGVfZGxvcGVuPXllcworICBlbHNlCisgICAgZW5hYmxlX2Rsb3Blbj1ubworICBmaQorCisgIGNhc2UgJGx0X2N2X2Rsb3BlbiBpbgorICBkbG9wZW4pCisgICAgc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICAgIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2RsZmNuX2giID0geHllcyAmJiBDUFBGTEFHUz0iJENQUEZMQUdTIC1ESEFWRV9ETEZDTl9IIgorCisgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiCisKKyAgICBzYXZlX0xJQlM9IiRMSUJTIgorICAgIExJQlM9IiRsdF9jdl9kbG9wZW5fbGlicyAkTElCUyIKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfZGxvcGVuX3NlbGYrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAJICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbl9zZWxmPWNyb3NzCitlbHNlCisgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNsaW5lIDExMjgwICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2lmIEhBVkVfRExGQ05fSAorI2luY2x1ZGUgPGRsZmNuLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZmRlZiBSVExEX0dMT0JBTAorIyAgZGVmaW5lIExUX0RMR0xPQkFMCQlSVExEX0dMT0JBTAorI2Vsc2UKKyMgIGlmZGVmIERMX0dMT0JBTAorIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCURMX0dMT0JBTAorIyAgZWxzZQorIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCTAKKyMgIGVuZGlmCisjZW5kaWYKKworLyogV2UgbWF5IGhhdmUgdG8gZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cgaW4gdGhlIGNvbW1hbmQgbGluZSBpZiB3ZQorICAgZmluZCBvdXQgaXQgZG9lcyBub3Qgd29yayBpbiBzb21lIHBsYXRmb3JtLiAqLworI2lmbmRlZiBMVF9ETExBWllfT1JfTk9XCisjICBpZmRlZiBSVExEX0xBWlkKKyMgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCVJUTERfTEFaWQorIyAgZWxzZQorIyAgICBpZmRlZiBETF9MQVpZCisjICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCURMX0xBWlkKKyMgICAgZWxzZQorIyAgICAgIGlmZGVmIFJUTERfTk9XCisjICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlSVExEX05PVworIyAgICAgIGVsc2UKKyMgICAgICAgIGlmZGVmIERMX05PVworIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlETF9OT1cKKyMgICAgICAgIGVsc2UKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJMAorIyAgICAgICAgZW5kaWYKKyMgICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCit2b2lkIGZub3JkKCkgeyBpbnQgaT00Mjt9CitpbnQgbWFpbiAoKQoreworICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKKyAgaW50IHN0YXR1cyA9ICRsdF9kbHVua25vd247CisKKyAgaWYgKHNlbGYpCisgICAgeworICAgICAgaWYgKGRsc3ltIChzZWxmLCJmbm9yZCIpKSAgICAgICBzdGF0dXMgPSAkbHRfZGxub191c2NvcmU7CisgICAgICBlbHNlIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpIHN0YXR1cyA9ICRsdF9kbG5lZWRfdXNjb3JlOworICAgICAgLyogZGxjbG9zZSAoc2VsZik7ICovCisgICAgfQorICBlbHNlCisgICAgcHV0cyAoZGxlcnJvciAoKSk7CisKKyAgcmV0dXJuIHN0YXR1czsKK30KK19MVF9FT0YKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9IDI+L2Rldi9udWxsOyB0aGVuCisgICAgKC4vY29uZnRlc3Q7IGV4aXQ7ICkgPiY1IDI+L2Rldi9udWxsCisgICAgbHRfc3RhdHVzPSQ/CisgICAgY2FzZSB4JGx0X3N0YXR1cyBpbgorICAgICAgeCRsdF9kbG5vX3VzY29yZSkgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzIDs7CisgICAgICB4JGx0X2RsbmVlZF91c2NvcmUpIGx0X2N2X2Rsb3Blbl9zZWxmPXllcyA7OworICAgICAgeCRsdF9kbHVua25vd258eCopIGx0X2N2X2Rsb3Blbl9zZWxmPW5vIDs7CisgICAgZXNhYworICBlbHNlIDoKKyAgICAjIGNvbXBpbGF0aW9uIGZhaWxlZAorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPW5vCisgIGZpCitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2Rsb3Blbl9zZWxmIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfZGxvcGVuX3NlbGYiID4mNjsgfQorCisgICAgaWYgdGVzdCAieCRsdF9jdl9kbG9wZW5fc2VsZiIgPSB4eWVzOyB0aGVuCisgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljXCIKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgCSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9Y3Jvc3MKK2Vsc2UKKyAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorI2xpbmUgMTEzNzYgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWYgSEFWRV9ETEZDTl9ICisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIFJUTERfR0xPQkFMCisjICBkZWZpbmUgTFRfRExHTE9CQUwJCVJUTERfR0xPQkFMCisjZWxzZQorIyAgaWZkZWYgRExfR0xPQkFMCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJRExfR0xPQkFMCisjICBlbHNlCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJMAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXZSBtYXkgaGF2ZSB0byBkZWZpbmUgTFRfRExMQVpZX09SX05PVyBpbiB0aGUgY29tbWFuZCBsaW5lIGlmIHdlCisgICBmaW5kIG91dCBpdCBkb2VzIG5vdCB3b3JrIGluIHNvbWUgcGxhdGZvcm0uICovCisjaWZuZGVmIExUX0RMTEFaWV9PUl9OT1cKKyMgIGlmZGVmIFJUTERfTEFaWQorIyAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJUlRMRF9MQVpZCisjICBlbHNlCisjICAgIGlmZGVmIERMX0xBWlkKKyMgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJRExfTEFaWQorIyAgICBlbHNlCisjICAgICAgaWZkZWYgUlRMRF9OT1cKKyMgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCVJUTERfTk9XCisjICAgICAgZWxzZQorIyAgICAgICAgaWZkZWYgRExfTk9XCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCURMX05PVworIyAgICAgICAgZWxzZQorIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkwCisjICAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKK3ZvaWQgZm5vcmQoKSB7IGludCBpPTQyO30KK2ludCBtYWluICgpCit7CisgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworICBpbnQgc3RhdHVzID0gJGx0X2RsdW5rbm93bjsKKworICBpZiAoc2VsZikKKyAgICB7CisgICAgICBpZiAoZGxzeW0gKHNlbGYsImZub3JkIikpICAgICAgIHN0YXR1cyA9ICRsdF9kbG5vX3VzY29yZTsKKyAgICAgIGVsc2UgaWYgKGRsc3ltKCBzZWxmLCJfZm5vcmQiKSkgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7CisgICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KKyAgICB9CisgIGVsc2UKKyAgICBwdXRzIChkbGVycm9yICgpKTsKKworICByZXR1cm4gc3RhdHVzOworfQorX0xUX0VPRgorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KKyAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JjUgMj4vZGV2L251bGwKKyAgICBsdF9zdGF0dXM9JD8KKyAgICBjYXNlIHgkbHRfc3RhdHVzIGluCisgICAgICB4JGx0X2Rsbm9fdXNjb3JlKSBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9eWVzIDs7CisgICAgICB4JGx0X2RsbmVlZF91c2NvcmUpIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMgOzsKKyAgICAgIHgkbHRfZGx1bmtub3dufHgqKSBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9bm8gOzsKKyAgICBlc2FjCisgIGVsc2UgOgorICAgICMgY29tcGlsYXRpb24gZmFpbGVkCisgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPW5vCisgIGZpCitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyIgPiY2OyB9CisgICAgZmkKKworICAgIENQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyIKKyAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorICAgIExJQlM9IiRzYXZlX0xJQlMiCisgICAgOzsKKyAgZXNhYworCisgIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmIGluCisgIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmPSRsdF9jdl9kbG9wZW5fc2VsZiA7OworICAqKSBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93biA7OworICBlc2FjCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIGluCisgIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz0kbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIDs7CisgICopIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93biA7OworICBlc2FjCitmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKK3N0cmlwbGliPQorb2xkX3N0cmlwbGliPQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlLi4uICIgPiY2OyB9CitpZiB0ZXN0IC1uICIkU1RSSVAiICYmICRTVFJJUCAtViAyPiYxIHwgJEdSRVAgIkdOVSBzdHJpcCIgPi9kZXYvbnVsbDsgdGhlbgorICB0ZXN0IC16ICIkb2xkX3N0cmlwbGliIiAmJiBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLWRlYnVnIgorICB0ZXN0IC16ICIkc3RyaXBsaWIiICYmIHN0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC11bm5lZWRlZCIKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KK2Vsc2UKKyMgRklYTUUgLSBpbnNlcnQgc29tZSByZWFsIHRlc3RzLCBob3N0X29zIGlzbid0IHJlYWxseSBnb29kIGVub3VnaAorICBjYXNlICRob3N0X29zIGluCisgIGRhcndpbiopCisgICAgaWYgdGVzdCAtbiAiJFNUUklQIiA7IHRoZW4KKyAgICAgIHN0cmlwbGliPSIkU1RSSVAgLXgiCisgICAgICBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtUyIKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgZmkKKyAgICA7OworICAqKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIDs7CisgIGVzYWMKK2ZpCisKKworCisKKworCisKKworCisKKworCisgICMgUmVwb3J0IHdoaWNoIGxpYnJhcnkgdHlwZXMgd2lsbCBhY3R1YWxseSBiZSBidWlsdAorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjYW5fYnVpbGRfc2hhcmVkIiA+JjUKKyRhc19lY2hvICIkY2FuX2J1aWxkX3NoYXJlZCIgPiY2OyB9CisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CisgIHRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubworCisgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgorICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJworICAgIGZpCisgICAgOzsKKworICBhaXhbNC05XSopCisgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgorICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVfc2hhcmVkIiA+JjUKKyRhc19lY2hvICIkZW5hYmxlX3NoYXJlZCIgPiY2OyB9CisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLi4uICIgPiY2OyB9CisgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVfc3RhdGljIiA+JjUKKyRhc19lY2hvICIkZW5hYmxlX3N0YXRpYyIgPiY2OyB9CisKKworCisKK2ZpCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK0NDPSIkbHRfc2F2ZV9DQyIKKworCisKKworCisKKworCisKKworCisKKworICAgICAgICBhY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgbGlidG9vbCIKKworCisKKworIyBPbmx5IGV4cGFuZCBvbmNlOgorCisKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1hdXRvY29uZiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfYXV0b2NvbmYrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2F1dG9jb25mOworICAgICAgdW5zZXQgQVVUT0NPTkYKKworQVVUT0NPTkY9JHtBVVRPQ09ORi0iJHthbV9taXNzaW5nX3J1bn0ke3dpdGh2YWx9In0KKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBVc2luZyAkQVVUT0NPTkYgYXMgYXV0b2NvbmYiID4mNQorJGFzX2VjaG8gIiRhc19tZTogVXNpbmcgJEFVVE9DT05GIGFzIGF1dG9jb25mIiA+JjY7fQorCitmaQorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1hdXRvaGVhZGVyIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9hdXRvaGVhZGVyK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9hdXRvaGVhZGVyOworICAgICAgdW5zZXQgQVVUT0hFQURFUgorCitBVVRPSEVBREVSPSR7QVVUT0hFQURFUi0iJHthbV9taXNzaW5nX3J1bn0ke3dpdGh2YWx9In0KKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBVc2luZyAkQVVUT0hFQURFUiBhcyBhdXRvaGVhZGVyIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFVzaW5nICRBVVRPSEVBREVSIGFzIGF1dG9oZWFkZXIiID4mNjt9CisKK2ZpCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWF1dG9tYWtlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9hdXRvbWFrZStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfYXV0b21ha2U7CisgICAgICB1bnNldCBBVVRPTUFLRQorCitBVVRPTUFLRT0ke0FVVE9NQUtFLSIke2FtX21pc3NpbmdfcnVufSR7d2l0aHZhbH0ifQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFVzaW5nICRBVVRPTUFLRSBhcyBhdXRvbWFrZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBVc2luZyAkQVVUT01BS0UgYXMgYXV0b21ha2UiID4mNjt9CisKK2ZpCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWFjbG9jYWwgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2FjbG9jYWwrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2FjbG9jYWw7CisgICAgICB1bnNldCBBQ0xPQ0FMCisKK0FDTE9DQUw9JHtBQ0xPQ0FMLSIke2FtX21pc3NpbmdfcnVufSR7d2l0aHZhbH0ifQorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFVzaW5nICRBQ0xPQ0FMIGFzIGFjbG9jYWwiID4mNQorJGFzX2VjaG8gIiRhc19tZTogVXNpbmcgJEFDTE9DQUwgYXMgYWNsb2NhbCIgPiY2O30KKworZmkKKworCisKK0FDTE9DQUxfQU1GTEFHUz0iLUkgbTQgLUkgY29tbW9uL200IgorCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBOTFMgaXMgcmVxdWVzdGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgTkxTIGlzIHJlcXVlc3RlZC4uLiAiID4mNjsgfQorICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ubHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbmxzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbmxzOyBVU0VfTkxTPSRlbmFibGV2YWwKK2Vsc2UKKyAgVVNFX05MUz15ZXMKK2ZpCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRVU0VfTkxTIiA+JjUKKyRhc19lY2hvICIkVVNFX05MUyIgPiY2OyB9CisKKworCisKKyAgICAgIEdFVFRFWFRfTUFDUk9fVkVSU0lPTj0wLjE3CisKKworCisKKyMgUHJlcGFyZSBQQVRIX1NFUEFSQVRPUi4KKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAorICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCisgIGNobW9kICt4IGNvbmYkJC5zaAorICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICBlbHNlCisgICAgUEFUSF9TRVBBUkFUT1I9OgorICBmaQorICBybSAtZiBjb25mJCQuc2gKK2ZpCisKKyMgRmluZCBvdXQgaG93IHRvIHRlc3QgZm9yIGV4ZWN1dGFibGUgZmlsZXMuIERvbid0IHVzZSBhIHplcm8tYnl0ZSBmaWxlLAorIyBhcyBzeXN0ZW1zIG1heSB1c2UgbWV0aG9kcyBvdGhlciB0aGFuIG1vZGUgYml0cyB0byBkZXRlcm1pbmUgZXhlY3V0YWJpbGl0eS4KK2NhdCA+Y29uZiQkLmZpbGUgPDxfQVNFT0YKKyMhIC9iaW4vc2gKK2V4aXQgMAorX0FTRU9GCitjaG1vZCAreCBjb25mJCQuZmlsZQoraWYgdGVzdCAteCBjb25mJCQuZmlsZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC14IgorZWxzZQorICBhY19leGVjdXRhYmxlX3A9InRlc3QgLWYiCitmaQorcm0gLWYgY29uZiQkLmZpbGUKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtc2dmbXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG1zZ2ZtdDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfTVNHRk1UK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAiJE1TR0ZNVCIgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgICAgYWNfY3ZfcGF0aF9NU0dGTVQ9IiRNU0dGTVQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICAgIDs7CisgICopCisgICAgYWNfc2F2ZV9JRlM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgICAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICAgIElGUz0iJGFjX3NhdmVfSUZTIgorICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgICBpZiAkYWNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgICAgICAgIGVjaG8gIiRhc19tZTogdHJ5aW5nICRhY19kaXIvJGFjX3dvcmQuLi4iID4mNQorICAgICAgICAgIGlmICRhY19kaXIvJGFjX3dvcmQgLS1zdGF0aXN0aWNzIC9kZXYvbnVsbCA+JjUgMj4mMSAmJgorICAgICAoaWYgJGFjX2Rpci8kYWNfd29yZCAtLXN0YXRpc3RpY3MgL2Rldi9udWxsIDI+JjEgPi9kZXYvbnVsbCB8IGdyZXAgdXNhZ2UgPi9kZXYvbnVsbDsgdGhlbiBleGl0IDE7IGVsc2UgZXhpdCAwOyBmaSk7IHRoZW4KKyAgICAgICAgICAgIGFjX2N2X3BhdGhfTVNHRk1UPSIkYWNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICAgICAgICAgYnJlYWsgMgorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgZG9uZQorICAgIElGUz0iJGFjX3NhdmVfSUZTIgorICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9NU0dGTVQiICYmIGFjX2N2X3BhdGhfTVNHRk1UPSI6IgorICAgIDs7Citlc2FjCitmaQorTVNHRk1UPSIkYWNfY3ZfcGF0aF9NU0dGTVQiCitpZiB0ZXN0ICIkTVNHRk1UIiAhPSAiOiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNU0dGTVQiID4mNQorJGFzX2VjaG8gIiRNU0dGTVQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnbXNnZm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBnbXNnZm10OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9HTVNHRk1UK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkR01TR0ZNVCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9HTVNHRk1UPSIkR01TR0ZNVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfR01TR0ZNVD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9HTVNHRk1UIiAmJiBhY19jdl9wYXRoX0dNU0dGTVQ9IiRNU0dGTVQiCisgIDs7Citlc2FjCitmaQorR01TR0ZNVD0kYWNfY3ZfcGF0aF9HTVNHRk1UCitpZiB0ZXN0IC1uICIkR01TR0ZNVCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRHTVNHRk1UIiA+JjUKKyRhc19lY2hvICIkR01TR0ZNVCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisKKyAgICBjYXNlIGAkTVNHRk1UIC0tdmVyc2lvbiB8IHNlZCAxcSB8IHNlZCAtZSAncyxeW14wLTldKiwsJ2AgaW4KKyAgICAnJyB8IDAuWzAtOV0gfCAwLlswLTldLiogfCAwLjFbMC00XSB8IDAuMVswLTRdLiopIE1TR0ZNVF8wMTU9OiA7OworICAgICopIE1TR0ZNVF8wMTU9JE1TR0ZNVCA7OworICBlc2FjCisKKyAgY2FzZSBgJEdNU0dGTVQgLS12ZXJzaW9uIHwgc2VkIDFxIHwgc2VkIC1lICdzLF5bXjAtOV0qLCwnYCBpbgorICAgICcnIHwgMC5bMC05XSB8IDAuWzAtOV0uKiB8IDAuMVswLTRdIHwgMC4xWzAtNF0uKikgR01TR0ZNVF8wMTU9OiA7OworICAgICopIEdNU0dGTVRfMDE1PSRHTVNHRk1UIDs7CisgIGVzYWMKKworCisKKyMgUHJlcGFyZSBQQVRIX1NFUEFSQVRPUi4KKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAorICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCisgIGNobW9kICt4IGNvbmYkJC5zaAorICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICBlbHNlCisgICAgUEFUSF9TRVBBUkFUT1I9OgorICBmaQorICBybSAtZiBjb25mJCQuc2gKK2ZpCisKKyMgRmluZCBvdXQgaG93IHRvIHRlc3QgZm9yIGV4ZWN1dGFibGUgZmlsZXMuIERvbid0IHVzZSBhIHplcm8tYnl0ZSBmaWxlLAorIyBhcyBzeXN0ZW1zIG1heSB1c2UgbWV0aG9kcyBvdGhlciB0aGFuIG1vZGUgYml0cyB0byBkZXRlcm1pbmUgZXhlY3V0YWJpbGl0eS4KK2NhdCA+Y29uZiQkLmZpbGUgPDxfQVNFT0YKKyMhIC9iaW4vc2gKK2V4aXQgMAorX0FTRU9GCitjaG1vZCAreCBjb25mJCQuZmlsZQoraWYgdGVzdCAteCBjb25mJCQuZmlsZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC14IgorZWxzZQorICBhY19leGVjdXRhYmxlX3A9InRlc3QgLWYiCitmaQorcm0gLWYgY29uZiQkLmZpbGUKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJ4Z2V0dGV4dCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgeGdldHRleHQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX1hHRVRURVhUK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAiJFhHRVRURVhUIiBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgICBhY19jdl9wYXRoX1hHRVRURVhUPSIkWEdFVFRFWFQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICAgIDs7CisgICopCisgICAgYWNfc2F2ZV9JRlM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgICAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICAgIElGUz0iJGFjX3NhdmVfSUZTIgorICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgICBpZiAkYWNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgICAgICAgIGVjaG8gIiRhc19tZTogdHJ5aW5nICRhY19kaXIvJGFjX3dvcmQuLi4iID4mNQorICAgICAgICAgIGlmICRhY19kaXIvJGFjX3dvcmQgLS1vbWl0LWhlYWRlciAtLWNvcHlyaWdodC1ob2xkZXI9IC0tbXNnaWQtYnVncy1hZGRyZXNzPSAvZGV2L251bGwgPiY1IDI+JjEgJiYKKyAgICAgKGlmICRhY19kaXIvJGFjX3dvcmQgLS1vbWl0LWhlYWRlciAtLWNvcHlyaWdodC1ob2xkZXI9IC0tbXNnaWQtYnVncy1hZGRyZXNzPSAvZGV2L251bGwgMj4mMSA+L2Rldi9udWxsIHwgZ3JlcCB1c2FnZSA+L2Rldi9udWxsOyB0aGVuIGV4aXQgMTsgZWxzZSBleGl0IDA7IGZpKTsgdGhlbgorICAgICAgICAgICAgYWNfY3ZfcGF0aF9YR0VUVEVYVD0iJGFjX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAgICAgICAgIGJyZWFrIDIKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZG9uZQorICAgIGRvbmUKKyAgICBJRlM9IiRhY19zYXZlX0lGUyIKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfWEdFVFRFWFQiICYmIGFjX2N2X3BhdGhfWEdFVFRFWFQ9IjoiCisgICAgOzsKK2VzYWMKK2ZpCitYR0VUVEVYVD0iJGFjX2N2X3BhdGhfWEdFVFRFWFQiCitpZiB0ZXN0ICIkWEdFVFRFWFQiICE9ICI6IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFhHRVRURVhUIiA+JjUKKyRhc19lY2hvICIkWEdFVFRFWFQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgICBybSAtZiBtZXNzYWdlcy5wbworCisgICAgY2FzZSBgJFhHRVRURVhUIC0tdmVyc2lvbiB8IHNlZCAxcSB8IHNlZCAtZSAncyxeW14wLTldKiwsJ2AgaW4KKyAgICAnJyB8IDAuWzAtOV0gfCAwLlswLTldLiogfCAwLjFbMC00XSB8IDAuMVswLTRdLiopIFhHRVRURVhUXzAxNT06IDs7CisgICAgKikgWEdFVFRFWFRfMDE1PSRYR0VUVEVYVCA7OworICBlc2FjCisKKworCisjIFByZXBhcmUgUEFUSF9TRVBBUkFUT1IuCisjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKKyAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAorICBjaG1vZCAreCBjb25mJCQuc2gKKyAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBQQVRIX1NFUEFSQVRPUj0nOycKKyAgZWxzZQorICAgIFBBVEhfU0VQQVJBVE9SPToKKyAgZmkKKyAgcm0gLWYgY29uZiQkLnNoCitmaQorCisjIEZpbmQgb3V0IGhvdyB0byB0ZXN0IGZvciBleGVjdXRhYmxlIGZpbGVzLiBEb24ndCB1c2UgYSB6ZXJvLWJ5dGUgZmlsZSwKKyMgYXMgc3lzdGVtcyBtYXkgdXNlIG1ldGhvZHMgb3RoZXIgdGhhbiBtb2RlIGJpdHMgdG8gZGV0ZXJtaW5lIGV4ZWN1dGFiaWxpdHkuCitjYXQgPmNvbmYkJC5maWxlIDw8X0FTRU9GCisjISAvYmluL3NoCitleGl0IDAKK19BU0VPRgorY2htb2QgK3ggY29uZiQkLmZpbGUKK2lmIHRlc3QgLXggY29uZiQkLmZpbGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFjX2V4ZWN1dGFibGVfcD0idGVzdCAteCIKK2Vsc2UKKyAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIgorZmkKK3JtIC1mIGNvbmYkJC5maWxlCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXNnbWVyZ2UiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG1zZ21lcmdlOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9NU0dNRVJHRStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgIiRNU0dNRVJHRSIgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgICAgYWNfY3ZfcGF0aF9NU0dNRVJHRT0iJE1TR01FUkdFIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgICA7OworICAqKQorICAgIGFjX3NhdmVfSUZTPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgICBJRlM9IiRhY19zYXZlX0lGUyIKKyAgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgICAgaWYgJGFjX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICAgICAgICBlY2hvICIkYXNfbWU6IHRyeWluZyAkYWNfZGlyLyRhY193b3JkLi4uIiA+JjUKKyAgICAgICAgICBpZiAkYWNfZGlyLyRhY193b3JkIC0tdXBkYXRlIC1xIC9kZXYvbnVsbCAvZGV2L251bGwgPiY1IDI+JjE7IHRoZW4KKyAgICAgICAgICAgIGFjX2N2X3BhdGhfTVNHTUVSR0U9IiRhY19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgICAgICAgICBicmVhayAyCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICBkb25lCisgICAgSUZTPSIkYWNfc2F2ZV9JRlMiCisgIHRlc3QgLXogIiRhY19jdl9wYXRoX01TR01FUkdFIiAmJiBhY19jdl9wYXRoX01TR01FUkdFPSI6IgorICAgIDs7Citlc2FjCitmaQorTVNHTUVSR0U9IiRhY19jdl9wYXRoX01TR01FUkdFIgoraWYgdGVzdCAiJE1TR01FUkdFIiAhPSAiOiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNU0dNRVJHRSIgPiY1CiskYXNfZWNobyAiJE1TR01FUkdFIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICAgICAgdGVzdCAtbiAiJGxvY2FsZWRpciIgfHwgbG9jYWxlZGlyPScke2RhdGFkaXJ9L2xvY2FsZScKKworCisgICAgdGVzdCAtbiAiJHtYR0VUVEVYVF9FWFRSQV9PUFRJT05TK3NldH0iIHx8IFhHRVRURVhUX0VYVFJBX09QVElPTlM9CisKKworICBhY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgcG8tZGlyZWN0b3JpZXMiCisKKworCisgICAgICBpZiB0ZXN0ICJYJHByZWZpeCIgPSAiWE5PTkUiOyB0aGVuCisgICAgYWNsX2ZpbmFsX3ByZWZpeD0iJGFjX2RlZmF1bHRfcHJlZml4IgorICBlbHNlCisgICAgYWNsX2ZpbmFsX3ByZWZpeD0iJHByZWZpeCIKKyAgZmkKKyAgaWYgdGVzdCAiWCRleGVjX3ByZWZpeCIgPSAiWE5PTkUiOyB0aGVuCisgICAgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PScke3ByZWZpeH0nCisgIGVsc2UKKyAgICBhY2xfZmluYWxfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZmkKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBldmFsIGFjbF9maW5hbF9leGVjX3ByZWZpeD1cIiRhY2xfZmluYWxfZXhlY19wcmVmaXhcIgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1nbnUtbGQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2dudV9sZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZ251X2xkOyB0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMKK2Vsc2UKKyAgd2l0aF9nbnVfbGQ9bm8KK2ZpCisKKyMgUHJlcGFyZSBQQVRIX1NFUEFSQVRPUi4KKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAorICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCisgIGNobW9kICt4IGNvbmYkJC5zaAorICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICBlbHNlCisgICAgUEFUSF9TRVBBUkFUT1I9OgorICBmaQorICBybSAtZiBjb25mJCQuc2gKK2ZpCithY19wcm9nPWxkCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSBHQ0MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgR0NDLi4uICIgPiY2OyB9CisgIGNhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KikKKyAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3CisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OworICAqKQorICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKKyAgZXNhYworICBjYXNlICRhY19wcm9nIGluCisgICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCisgICAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKQorICAgICAgcmVfZGlyZWx0PScvW14vXVteL10qL1wuXC4vJworICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGggb2YgbGQKKyAgICAgIGFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8IHNlZCAncyVcXFxcJS8lZydgCisgICAgICB3aGlsZSBlY2hvICRhY19wcm9nIHwgZ3JlcCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKwlhY19wcm9nPWBlY2hvICRhY19wcm9nfCBzZWQgInMlJHJlX2RpcmVsdCUvJSJgCisgICAgICBkb25lCisgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKKyAgICAgIDs7CisgICIiKQorICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorICAgIGFjX3Byb2c9bGQKKyAgICA7OworICAqKQorICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KKyAgICB3aXRoX2dudV9sZD11bmtub3duCisgICAgOzsKKyAgZXNhYworZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgR05VIGxkLi4uICIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQuLi4gIiA+JjY7IH0KK2ZpCitpZiB0ZXN0ICIke2FjbF9jdl9wYXRoX0xEK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJExEIjsgdGhlbgorICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30ke1BBVEhfU0VQQVJBVE9SLTp9IgorICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCisgICAgICBhY2xfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKyAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGQncyBvbmx5IGFjY2VwdCAtdi4KKyAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgorICAgICAgY2FzZSBgIiRhY2xfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8IC9kZXYvbnVsbGAgaW4KKyAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsgOzsKKyAgICAgICopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSB5ZXMgJiYgYnJlYWsgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBkb25lCisgIElGUz0iJGFjX3NhdmVfaWZzIgorZWxzZQorICBhY2xfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KK2ZpCitmaQorCitMRD0iJGFjbF9jdl9wYXRoX0xEIgoraWYgdGVzdCAtbiAiJExEIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExEIiA+JjUKKyRhc19lY2hvICIkTEQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCit0ZXN0IC16ICIkTEQiICYmIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgIiRMSU5FTk8iIDUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNsX2N2X3Byb2dfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGQncyBvbmx5IGFjY2VwdCAtdi4KK2Nhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgYWNsX2N2X3Byb2dfZ251X2xkPXllcyA7OworKikKKyAgYWNsX2N2X3Byb2dfZ251X2xkPW5vIDs7Citlc2FjCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY2xfY3ZfcHJvZ19nbnVfbGQiID4mNQorJGFzX2VjaG8gIiRhY2xfY3ZfcHJvZ19nbnVfbGQiID4mNjsgfQord2l0aF9nbnVfbGQ9JGFjbF9jdl9wcm9nX2dudV9sZAorCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzaGFyZWQgbGlicmFyeSBydW4gcGF0aCBvcmlnaW4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHNoYXJlZCBsaWJyYXJ5IHJ1biBwYXRoIG9yaWdpbi4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY2xfY3ZfcnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgQ0M9IiRDQyIgR0NDPSIkR0NDIiBMREZMQUdTPSIkTERGTEFHUyIgTEQ9IiRMRCIgd2l0aF9nbnVfbGQ9IiR3aXRoX2dudV9sZCIgXAorICAgICR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICIkYWNfYXV4X2Rpci9jb25maWcucnBhdGgiICIkaG9zdCIgPiBjb25mdGVzdC5zaAorICAgIC4gLi9jb25mdGVzdC5zaAorICAgIHJtIC1mIC4vY29uZnRlc3Quc2gKKyAgICBhY2xfY3ZfcnBhdGg9ZG9uZQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY2xfY3ZfcnBhdGgiID4mNQorJGFzX2VjaG8gIiRhY2xfY3ZfcnBhdGgiID4mNjsgfQorICB3bD0iJGFjbF9jdl93bCIKKyAgYWNsX2xpYmV4dD0iJGFjbF9jdl9saWJleHQiCisgIGFjbF9zaGxpYmV4dD0iJGFjbF9jdl9zaGxpYmV4dCIKKyAgYWNsX2xpYm5hbWVfc3BlYz0iJGFjbF9jdl9saWJuYW1lX3NwZWMiCisgIGFjbF9saWJyYXJ5X25hbWVzX3NwZWM9IiRhY2xfY3ZfbGlicmFyeV9uYW1lc19zcGVjIgorICBhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iJGFjbF9jdl9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgorICBhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0iJGFjbF9jdl9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIgorICBhY2xfaGFyZGNvZGVfZGlyZWN0PSIkYWNsX2N2X2hhcmRjb2RlX2RpcmVjdCIKKyAgYWNsX2hhcmRjb2RlX21pbnVzX0w9IiRhY2xfY3ZfaGFyZGNvZGVfbWludXNfTCIKKyAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcnBhdGggd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9ycGF0aDsgOgorZWxzZQorICBlbmFibGVfcnBhdGg9eWVzCitmaQorCisKKworICAgICAgICAgICAgICAgICAgYWNsX2xpYmRpcnN0ZW09bGliCisgIHNlYXJjaHBhdGg9YChMQ19BTEw9QyAkQ0MgLXByaW50LXNlYXJjaC1kaXJzKSAyPi9kZXYvbnVsbCB8IHNlZCAtbiAtZSAncyxebGlicmFyaWVzOiAsLHAnIHwgc2VkIC1lICdzLF49LCwnYAorICBpZiB0ZXN0IC1uICIkc2VhcmNocGF0aCI7IHRoZW4KKyAgICBhY2xfc2F2ZV9JRlM9IiR7SUZTPSAJfSI7IElGUz0iOiIKKyAgICBmb3Igc2VhcmNoZGlyIGluICRzZWFyY2hwYXRoOyBkbworICAgICAgaWYgdGVzdCAtZCAiJHNlYXJjaGRpciI7IHRoZW4KKyAgICAgICAgY2FzZSAiJHNlYXJjaGRpciIgaW4KKyAgICAgICAgICAqL2xpYjY0LyB8ICovbGliNjQgKSBhY2xfbGliZGlyc3RlbT1saWI2NCA7OworICAgICAgICAgICopIHNlYXJjaGRpcj1gY2QgIiRzZWFyY2hkaXIiICYmIHB3ZGAKKyAgICAgICAgICAgICBjYXNlICIkc2VhcmNoZGlyIiBpbgorICAgICAgICAgICAgICAgKi9saWI2NCApIGFjbF9saWJkaXJzdGVtPWxpYjY0IDs7CisgICAgICAgICAgICAgZXNhYyA7OworICAgICAgICBlc2FjCisgICAgICBmaQorICAgIGRvbmUKKyAgICBJRlM9IiRhY2xfc2F2ZV9JRlMiCisgIGZpCisKKworCisKKworCisKKworCisgICAgdXNlX2FkZGl0aW9uYWw9eWVzCisKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKworICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKworICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJpY29udi1wcmVmaXggd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2xpYmljb252X3ByZWZpeCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbGliaWNvbnZfcHJlZml4OworICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWG5vIjsgdGhlbgorICAgICAgdXNlX2FkZGl0aW9uYWw9bm8KKyAgICBlbHNlCisgICAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlgiOyB0aGVuCisKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKworICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKworICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisKKyAgICAgIGVsc2UKKyAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkd2l0aHZhbC9pbmNsdWRlIgorICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvJGFjbF9saWJkaXJzdGVtIgorICAgICAgZmkKKyAgICBmaQorCitmaQorCisgICAgICBMSUJJQ09OVj0KKyAgTFRMSUJJQ09OVj0KKyAgSU5DSUNPTlY9CisgIExJQklDT05WX1BSRUZJWD0KKyAgcnBhdGhkaXJzPQorICBsdHJwYXRoZGlycz0KKyAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPQorICBuYW1lc19uZXh0X3JvdW5kPSdpY29udiAnCisgIHdoaWxlIHRlc3QgLW4gIiRuYW1lc19uZXh0X3JvdW5kIjsgZG8KKyAgICBuYW1lc190aGlzX3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCIKKyAgICBuYW1lc19uZXh0X3JvdW5kPQorICAgIGZvciBuYW1lIGluICRuYW1lc190aGlzX3JvdW5kOyBkbworICAgICAgYWxyZWFkeV9oYW5kbGVkPQorICAgICAgZm9yIG4gaW4gJG5hbWVzX2FscmVhZHlfaGFuZGxlZDsgZG8KKyAgICAgICAgaWYgdGVzdCAiJG4iID0gIiRuYW1lIjsgdGhlbgorICAgICAgICAgIGFscmVhZHlfaGFuZGxlZD15ZXMKKyAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgICAgZG9uZQorICAgICAgaWYgdGVzdCAteiAiJGFscmVhZHlfaGFuZGxlZCI7IHRoZW4KKyAgICAgICAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPSIkbmFtZXNfYWxyZWFkeV9oYW5kbGVkICRuYW1lIgorICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJuYW1lPWBlY2hvICIkbmFtZSIgfCBzZWQgLWUgJ3l8YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy18QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX198J2AKKyAgICAgICAgZXZhbCB2YWx1ZT1cIlwkSEFWRV9MSUIkdXBwZXJuYW1lXCIKKyAgICAgICAgaWYgdGVzdCAtbiAiJHZhbHVlIjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgIiR2YWx1ZSIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExJQiR1cHBlcm5hbWVcIgorICAgICAgICAgICAgdGVzdCAteiAiJHZhbHVlIiB8fCBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSR2YWx1ZSIKKyAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExUTElCJHVwcGVybmFtZVwiCisgICAgICAgICAgICB0ZXN0IC16ICIkdmFsdWUiIHx8IExUTElCSUNPTlY9IiR7TFRMSUJJQ09OVn0ke0xUTElCSUNPTlY6KyB9JHZhbHVlIgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICBmaQorICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9CisgICAgICAgICAgZm91bmRfbGE9CisgICAgICAgICAgZm91bmRfc289CisgICAgICAgICAgZm91bmRfYT0KKyAgICAgICAgICBldmFsIGxpYm5hbWU9XCIkYWNsX2xpYm5hbWVfc3BlY1wiICAgICMgdHlwaWNhbGx5OiBsaWJuYW1lPWxpYiRuYW1lCisgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9zaGxpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgIHNocmV4dD0iLiRhY2xfc2hsaWJleHQiICAgICAgICAgICAgICMgdHlwaWNhbGx5OiBzaHJleHQ9LnNvCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgc2hyZXh0PQorICAgICAgICAgIGZpCisgICAgICAgICAgaWYgdGVzdCAkdXNlX2FkZGl0aW9uYWwgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgIGRpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9zaGxpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dCIKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjIiA9ICckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JzsgdGhlbgorICAgICAgICAgICAgICAgICAgdmVyPWAoY2QgIiRkaXIiICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICIkbGlibmFtZSRzaHJleHQiLio7IGRvIGVjaG8gIiRmIjsgZG9uZSBcCisgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAicyxeJGxpYm5hbWUkc2hyZXh0XFxcXC4sLCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgfCBzb3J0IC10ICcuJyAtbiAtciAtazEsMSAtazIsMiAtazMsMyAtazQsNCAtazUsNSBcCisgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAxcSApIDI+L2Rldi9udWxsYAorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHZlciIgJiYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciIKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWNcIgorICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gJGxpYnJhcnlfbmFtZXM7IGRvCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGYiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRmIgorICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCIKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUubGEiOyB0aGVuCisgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvJGxpYm5hbWUubGEiCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCisgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJJQ09OVjsgZG8KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICBldmFsIHg9XCIkeFwiCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgICAgICAgICBjYXNlICIkeCIgaW4KKyAgICAgICAgICAgICAgICAtTCopCisgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkeCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQiCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlYyIgPSAnJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCc7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcj1gKGNkICIkZGlyIiAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAiJGxpYm5hbWUkc2hyZXh0Ii4qOyBkbyBlY2hvICIkZiI7IGRvbmUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgInMsXiRsaWJuYW1lJHNocmV4dFxcXFwuLCwiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc29ydCAtdCAnLicgLW4gLXIgLWsxLDEgLWsyLDIgLWszLDMgLWs0LDQgLWs1LDUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgMXEgKSAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiR2ZXIiICYmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwgbGlicmFyeV9uYW1lcz1cIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjXCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICRsaWJyYXJ5X25hbWVzOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRmIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kZiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLmxhIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyLyRsaWJuYW1lLmxhIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgZmkKKyAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBMVExJQklDT05WPSIke0xUTElCSUNPTlZ9JHtMVExJQklDT05WOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgorICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9zbyIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiID0gbm8gfHwgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgIGZvciB4IGluICRsdHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRmb3VuZF9kaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRmb3VuZF9kaXIiCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9oYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiICYmIHRlc3QgIiRhY2xfaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRycGF0aGRpcnM7IGRvCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGZvdW5kX2RpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZm91bmRfZGlyIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMSUJJQ09OVjsgZG8KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICBldmFsIHg9XCIkeFwiCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGZvdW5kX2RpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIExJQklDT05WPSIke0xJQklDT05WfSR7TElCSUNPTlY6KyB9LUwkZm91bmRfZGlyIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2hhcmRjb2RlX21pbnVzX0wiICE9IG5vOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0tbCRuYW1lIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2EiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSRmb3VuZF9hIgorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0KKyAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9kaXIiIGluCisgICAgICAgICAgICAgICovJGFjbF9saWJkaXJzdGVtIHwgKi8kYWNsX2xpYmRpcnN0ZW0vKQorICAgICAgICAgICAgICAgIGJhc2VkaXI9YGVjaG8gIlgkZm91bmRfZGlyIiB8IHNlZCAtZSAncyxeWCwsJyAtZSAicywvJGFjbF9saWJkaXJzdGVtLyInKiQsLCdgCisgICAgICAgICAgICAgICAgTElCSUNPTlZfUFJFRklYPSIkYmFzZWRpciIKKyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiRiYXNlZGlyL2luY2x1ZGUiCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgvdXNyL2luY2x1ZGUiOyB0aGVuCisgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiA9ICJYL3Vzci9sb2NhbC9pbmNsdWRlIjsgdGhlbgorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICAgICAgICAgICAgICAgIGxpbnV4KiB8IGdudSogfCBrKmJzZCotZ251KSBoYXZlaXQ9eWVzOzsKKyAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkQ1BQRkxBR1MgJElOQ0lDT05WOyBkbworCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisgIGV2YWwgeD1cIiR4XCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOQ0lDT05WPSIke0lOQ0lDT05WfSR7SU5DSUNPTlY6KyB9LUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRmb3VuZF9sYSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9sYSIgaW4KKyAgICAgICAgICAgICAgICAqLyogfCAqXFwqKSAuICIkZm91bmRfbGEiIDs7CisgICAgICAgICAgICAgICAgKikgLiAiLi8kZm91bmRfbGEiIDs7CisgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgbGliZGlyPSIkc2F2ZV9saWJkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworICAgICAgICAgICAgICAgIGNhc2UgIiRkZXAiIGluCisgICAgICAgICAgICAgICAgICAtTCopCisgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPWBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGludXgqIHwgZ251KiB8IGsqYnNkKi1nbnUpIGhhdmVpdD15ZXM7OworICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMSUJJQ09OVjsgZG8KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICBldmFsIHg9XCIkeFwiCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJJQ09OVjsgZG8KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICBldmFsIHg9XCIkeFwiCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRMSUJJQ09OVj0iJHtMVExJQklDT05WfSR7TFRMSUJJQ09OVjorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgIC1SKikKKyAgICAgICAgICAgICAgICAgICAgZGlyPWBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtUi8vJ2AKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGVuYWJsZV9ycGF0aCIgIT0gbm87IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZGlyIgorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJGx0cnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGx0cnBhdGhkaXJzPSIkbHRycGF0aGRpcnMgJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgLWwqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzX25leHRfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kICJgZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLWwvLydgCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAqLmxhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncyxeWC4qLywsJyAtZSAncyxebGliLCwnIC1lICdzLFwubGEkLCwnYAorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSRkZXAiCisgICAgICAgICAgICAgICAgICAgIExUTElCSUNPTlY9IiR7TFRMSUJJQ09OVn0ke0xUTElCSUNPTlY6KyB9JGRlcCIKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0tbCRuYW1lIgorICAgICAgICAgICAgTFRMSUJJQ09OVj0iJHtMVExJQklDT05WfSR7TFRMSUJJQ09OVjorIH0tbCRuYW1lIgorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGRvbmUKKyAgZG9uZQorICBpZiB0ZXN0ICJYJHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgYWxsZGlycz0KKyAgICAgIGZvciBmb3VuZF9kaXIgaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgYWxsZGlycz0iJHthbGxkaXJzfSR7YWxsZGlyczorJGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yfSRmb3VuZF9kaXIiCisgICAgICBkb25lCisgICAgICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICBsaWJkaXI9IiRhbGxkaXJzIgorICAgICAgZXZhbCBmbGFnPVwiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKyAgICAgIExJQklDT05WPSIke0xJQklDT05WfSR7TElCSUNPTlY6KyB9JGZsYWciCisgICAgZWxzZQorICAgICAgICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICAgIGxpYmRpcj0iJGZvdW5kX2RpciIKKyAgICAgICAgZXZhbCBmbGFnPVwiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSRmbGFnIgorICAgICAgZG9uZQorICAgIGZpCisgIGZpCisgIGlmIHRlc3QgIlgkbHRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgZm9yIGZvdW5kX2RpciBpbiAkbHRycGF0aGRpcnM7IGRvCisgICAgICBMVExJQklDT05WPSIke0xUTElCSUNPTlZ9JHtMVExJQklDT05WOisgfS1SJGZvdW5kX2RpciIKKyAgICBkb25lCisgIGZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2d0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGd0X3NhdmVfTElCUz0iJExJQlMiCisgICAgIExJQlM9IiRMSUJTIC1XbCwtZnJhbWV3b3JrIC1XbCxDb3JlRm91bmRhdGlvbiIKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGUHJlZmVyZW5jZXMuaD4KK2ludAorbWFpbiAoKQoreworQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZShOVUxMLCBOVUxMKQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZT15ZXMKK2Vsc2UKKyAgZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgTElCUz0iJGd0X3NhdmVfTElCUyIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSIgPiY1CiskYXNfZWNobyAiJGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSIgPiY2OyB9CisgIGlmIHRlc3QgJGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0NGUFJFRkVSRU5DRVNDT1BZQVBQVkFMVUUgMSIgPj5jb25mZGVmcy5oCisKKyAgZmkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDRkxvY2FsZUNvcHlDdXJyZW50IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBDRkxvY2FsZUNvcHlDdXJyZW50Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2d0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGd0X3NhdmVfTElCUz0iJExJQlMiCisgICAgIExJQlM9IiRMSUJTIC1XbCwtZnJhbWV3b3JrIC1XbCxDb3JlRm91bmRhdGlvbiIKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGTG9jYWxlLmg+CitpbnQKK21haW4gKCkKK3sKK0NGTG9jYWxlQ29weUN1cnJlbnQoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQ9eWVzCitlbHNlCisgIGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIExJQlM9IiRndF9zYXZlX0xJQlMiCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQiID4mNQorJGFzX2VjaG8gIiRndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQiID4mNjsgfQorICBpZiB0ZXN0ICRndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DRkxPQ0FMRUNPUFlDVVJSRU5UIDEiID4+Y29uZmRlZnMuaAorCisgIGZpCisgIElOVExfTUFDT1NYX0xJQlM9CisgIGlmIHRlc3QgJGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSA9IHllcyB8fCB0ZXN0ICRndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQgPSB5ZXM7IHRoZW4KKyAgICBJTlRMX01BQ09TWF9MSUJTPSItV2wsLWZyYW1ld29yayAtV2wsQ29yZUZvdW5kYXRpb24iCisgIGZpCisKKworCisKKworCisgIExJQklOVEw9CisgIExUTElCSU5UTD0KKyAgUE9TVUI9CisKKyAgICBjYXNlICIgJGd0X25lZWRzICIgaW4KKyAgICAqIiBuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3MgIiopIGd0X2FwaV92ZXJzaW9uPTMgOzsKKyAgICAqIiBuZWVkLW5nZXR0ZXh0ICIqKSBndF9hcGlfdmVyc2lvbj0yIDs7CisgICAgKikgZ3RfYXBpX3ZlcnNpb249MSA7OworICBlc2FjCisgIGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjPSJndF9jdl9mdW5jX2dudWdldHRleHQke2d0X2FwaV92ZXJzaW9ufV9saWJjIgorICBndF9mdW5jX2dudWdldHRleHRfbGliaW50bD0iZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0JHtndF9hcGlfdmVyc2lvbn1fbGliaW50bCIKKworICAgIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCisgICAgZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0PW5vCisKKworICAgICAgICBpZiB0ZXN0ICRndF9hcGlfdmVyc2lvbiAtZ2UgMzsgdGhlbgorICAgICAgICAgIGd0X3JldmlzaW9uX3Rlc3RfY29kZT0nCisjaWZuZGVmIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OCisjZGVmaW5lIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKG1ham9yKSAoKG1ham9yKSA9PSAwID8gMCA6IC0xKQorI2VuZGlmCit0eXBlZGVmIGludCBhcnJheSBbMiAqIChfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTigwKSA+PSAxKSAtIDFdOworJworICAgICAgICBlbHNlCisgICAgICAgICAgZ3RfcmV2aXNpb25fdGVzdF9jb2RlPQorICAgICAgICBmaQorICAgICAgICBpZiB0ZXN0ICRndF9hcGlfdmVyc2lvbiAtZ2UgMjsgdGhlbgorICAgICAgICAgIGd0X2V4cHJlc3Npb25fdGVzdF9jb2RlPScgKyAqIG5nZXR0ZXh0ICgiIiwgIiIsIDApJworICAgICAgICBlbHNlCisgICAgICAgICAgZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGU9CisgICAgICAgIGZpCisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR05VIGdldHRleHQgaW4gbGliYyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgR05VIGdldHRleHQgaW4gbGliYy4uLiAiID4mNjsgfQoraWYgZXZhbCAidGVzdCBcIlwkeyRndF9mdW5jX2dudWdldHRleHRfbGliYytzZXR9XCIiID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGxpYmludGwuaD4KKyRndF9yZXZpc2lvbl90ZXN0X2NvZGUKK2V4dGVybiBpbnQgX25sX21zZ19jYXRfY250cjsKK2V4dGVybiBpbnQgKl9ubF9kb21haW5fYmluZGluZ3M7CitpbnQKK21haW4gKCkKK3sKK2JpbmR0ZXh0ZG9tYWluICgiIiwgIiIpOworcmV0dXJuICogZ2V0dGV4dCAoIiIpJGd0X2V4cHJlc3Npb25fdGVzdF9jb2RlICsgX25sX21zZ19jYXRfY250ciArICpfbmxfZG9tYWluX2JpbmRpbmdzCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjPXllcyIKK2Vsc2UKKyAgZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorCisgICAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjIjsgdGVzdCAiJGd0X3ZhbCIgIT0gInllcyI7IH07IHRoZW4KKworCisKKworCisgICAgICAgICAgYW1fc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorCisgIGZvciBlbGVtZW50IGluICRJTkNJQ09OVjsgZG8KKyAgICBoYXZlaXQ9CisgICAgZm9yIHggaW4gJENQUEZMQUdTOyBkbworCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisgIGV2YWwgeD1cIiR4XCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorCisgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZWxlbWVudCI7IHRoZW4KKyAgICAgICAgaGF2ZWl0PXllcworICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBkb25lCisgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSR7Q1BQRkxBR1M6KyB9JGVsZW1lbnQiCisgICAgZmkKKyAgZG9uZQorCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgaWNvbnYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGljb252Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FtX2N2X2Z1bmNfaWNvbnYrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgYW1fY3ZfZnVuY19pY29udj0ibm8sIGNvbnNpZGVyIGluc3RhbGxpbmcgR05VIGxpYmljb252IgorICAgIGFtX2N2X2xpYl9pY29udj1ubworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxpY29udi5oPgoraW50CittYWluICgpCit7CitpY29udl90IGNkID0gaWNvbnZfb3BlbigiIiwiIik7CisgICAgICAgaWNvbnYoY2QsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgICAgaWNvbnZfY2xvc2UoY2QpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFtX2N2X2Z1bmNfaWNvbnY9eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBpZiB0ZXN0ICIkYW1fY3ZfZnVuY19pY29udiIgIT0geWVzOyB0aGVuCisgICAgICBhbV9zYXZlX0xJQlM9IiRMSUJTIgorICAgICAgTElCUz0iJExJQlMgJExJQklDT05WIgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGljb252Lmg+CitpbnQKK21haW4gKCkKK3sKK2ljb252X3QgY2QgPSBpY29udl9vcGVuKCIiLCIiKTsKKyAgICAgICAgIGljb252KGNkLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgICAgaWNvbnZfY2xvc2UoY2QpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFtX2N2X2xpYl9pY29udj15ZXMKKyAgICAgICAgYW1fY3ZfZnVuY19pY29udj15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgTElCUz0iJGFtX3NhdmVfTElCUyIKKyAgICBmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9mdW5jX2ljb252IiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfZnVuY19pY29udiIgPiY2OyB9CisgIGlmIHRlc3QgIiRhbV9jdl9mdW5jX2ljb252IiA9IHllczsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdvcmtpbmcgaWNvbnYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgaWNvbnYuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YW1fY3ZfZnVuY19pY29udl93b3JrcytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgICAgICAgIGFtX3NhdmVfTElCUz0iJExJQlMiCisgICAgICBpZiB0ZXN0ICRhbV9jdl9saWJfaWNvbnYgPSB5ZXM7IHRoZW4KKyAgICAgICAgTElCUz0iJExJQlMgJExJQklDT05WIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgIGFpeCogfCBocHV4KikgYW1fY3ZfZnVuY19pY29udl93b3Jrcz0iZ3Vlc3Npbmcgbm8iIDs7CisgICAgICAgICAgICopICAgICAgICAgICAgYW1fY3ZfZnVuY19pY29udl93b3Jrcz0iZ3Vlc3NpbmcgeWVzIiA7OworICAgICAgICAgZXNhYworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxpY29udi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgoraW50IG1haW4gKCkKK3sKKyAgLyogVGVzdCBhZ2FpbnN0IEFJWCA1LjEgYnVnOiBGYWlsdXJlcyBhcmUgbm90IGRpc3Rpbmd1aXNoYWJsZSBmcm9tIHN1Y2Nlc3NmdWwKKyAgICAgcmV0dXJucy4gICovCisgIHsKKyAgICBpY29udl90IGNkX3V0ZjhfdG9fODg1OTEgPSBpY29udl9vcGVuICgiSVNPODg1OS0xIiwgIlVURi04Iik7CisgICAgaWYgKGNkX3V0ZjhfdG9fODg1OTEgIT0gKGljb252X3QpKC0xKSkKKyAgICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgaW5wdXRbXSA9ICJcMzQyXDIwMlwyNTQiOyAvKiBFVVJPIFNJR04gKi8KKyAgICAgICAgY2hhciBidWZbMTBdOworICAgICAgICBjb25zdCBjaGFyICppbnB0ciA9IGlucHV0OworICAgICAgICBzaXplX3QgaW5ieXRlc2xlZnQgPSBzdHJsZW4gKGlucHV0KTsKKyAgICAgICAgY2hhciAqb3V0cHRyID0gYnVmOworICAgICAgICBzaXplX3Qgb3V0Ynl0ZXNsZWZ0ID0gc2l6ZW9mIChidWYpOworICAgICAgICBzaXplX3QgcmVzID0gaWNvbnYgKGNkX3V0ZjhfdG9fODg1OTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiopICZpbnB0ciwgJmluYnl0ZXNsZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRwdHIsICZvdXRieXRlc2xlZnQpOworICAgICAgICBpZiAocmVzID09IDApCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgIH0KKyNpZiAwIC8qIFRoaXMgYnVnIGNvdWxkIGJlIHdvcmtlZCBhcm91bmQgYnkgdGhlIGNhbGxlci4gICovCisgIC8qIFRlc3QgYWdhaW5zdCBIUC1VWCAxMS4xMSBidWc6IFBvc2l0aXZlIHJldHVybiB2YWx1ZSBpbnN0ZWFkIG9mIDAuICAqLworICB7CisgICAgaWNvbnZfdCBjZF84ODU5MV90b191dGY4ID0gaWNvbnZfb3BlbiAoInV0ZjgiLCAiaXNvODg1OTEiKTsKKyAgICBpZiAoY2RfODg1OTFfdG9fdXRmOCAhPSAoaWNvbnZfdCkoLTEpKQorICAgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBpbnB1dFtdID0gIlwzMDRyZ2VyIG1pdCBiXDM2NnNlbiBCXDM3NGJjaGVuIG9obmUgQXVnZW5tYVwzMzciOworICAgICAgICBjaGFyIGJ1Zls1MF07CisgICAgICAgIGNvbnN0IGNoYXIgKmlucHRyID0gaW5wdXQ7CisgICAgICAgIHNpemVfdCBpbmJ5dGVzbGVmdCA9IHN0cmxlbiAoaW5wdXQpOworICAgICAgICBjaGFyICpvdXRwdHIgPSBidWY7CisgICAgICAgIHNpemVfdCBvdXRieXRlc2xlZnQgPSBzaXplb2YgKGJ1Zik7CisgICAgICAgIHNpemVfdCByZXMgPSBpY29udiAoY2RfODg1OTFfdG9fdXRmOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKikgJmlucHRyLCAmaW5ieXRlc2xlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dHB0ciwgJm91dGJ5dGVzbGVmdCk7CisgICAgICAgIGlmICgoaW50KXJlcyA+IDApCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgIH0KKyNlbmRpZgorICAvKiBUZXN0IGFnYWluc3QgSFAtVVggMTEuMTEgYnVnOiBObyBjb252ZXJ0ZXIgZnJvbSBFVUMtSlAgdG8gVVRGLTggaXMKKyAgICAgcHJvdmlkZWQuICAqLworICBpZiAoLyogVHJ5IHN0YW5kYXJkaXplZCBuYW1lcy4gICovCisgICAgICBpY29udl9vcGVuICgiVVRGLTgiLCAiRVVDLUpQIikgPT0gKGljb252X3QpKC0xKQorICAgICAgLyogVHJ5IElSSVgsIE9TRi8xIG5hbWVzLiAgKi8KKyAgICAgICYmIGljb252X29wZW4gKCJVVEYtOCIsICJldWNKUCIpID09IChpY29udl90KSgtMSkKKyAgICAgIC8qIFRyeSBBSVggbmFtZXMuICAqLworICAgICAgJiYgaWNvbnZfb3BlbiAoIlVURi04IiwgIklCTS1ldWNKUCIpID09IChpY29udl90KSgtMSkKKyAgICAgIC8qIFRyeSBIUC1VWCBuYW1lcy4gICovCisgICAgICAmJiBpY29udl9vcGVuICgidXRmOCIsICJldWNKUCIpID09IChpY29udl90KSgtMSkpCisgICAgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgYW1fY3ZfZnVuY19pY29udl93b3Jrcz15ZXMKK2Vsc2UKKyAgYW1fY3ZfZnVuY19pY29udl93b3Jrcz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgICAgIExJQlM9IiRhbV9zYXZlX0xJQlMiCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X2Z1bmNfaWNvbnZfd29ya3MiID4mNQorJGFzX2VjaG8gIiRhbV9jdl9mdW5jX2ljb252X3dvcmtzIiA+JjY7IH0KKyAgICBjYXNlICIkYW1fY3ZfZnVuY19pY29udl93b3JrcyIgaW4KKyAgICAgICpubykgYW1fZnVuY19pY29udj1ubyBhbV9jdl9saWJfaWNvbnY9bm8gOzsKKyAgICAgICopICAgYW1fZnVuY19pY29udj15ZXMgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBhbV9mdW5jX2ljb252PW5vIGFtX2N2X2xpYl9pY29udj1ubworICBmaQorICBpZiB0ZXN0ICIkYW1fZnVuY19pY29udiIgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9JQ09OViAxIiA+PmNvbmZkZWZzLmgKKworICBmaQorICBpZiB0ZXN0ICIkYW1fY3ZfbGliX2ljb252IiA9IHllczsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGxpbmsgd2l0aCBsaWJpY29udiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gbGluayB3aXRoIGxpYmljb252Li4uICIgPiY2OyB9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMSUJJQ09OViIgPiY1CiskYXNfZWNobyAiJExJQklDT05WIiA+JjY7IH0KKyAgZWxzZQorICAgICAgICAgICAgQ1BQRkxBR1M9IiRhbV9zYXZlX0NQUEZMQUdTIgorICAgIExJQklDT05WPQorICAgIExUTElCSUNPTlY9CisgIGZpCisKKworCisKKworCisKKworICAgIHVzZV9hZGRpdGlvbmFsPXllcworCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisKKyAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKyAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGliaW50bC1wcmVmaXggd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2xpYmludGxfcHJlZml4K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9saWJpbnRsX3ByZWZpeDsKKyAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlhubyI7IHRoZW4KKyAgICAgIHVzZV9hZGRpdGlvbmFsPW5vCisgICAgZWxzZQorICAgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYIjsgdGhlbgorCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisKKyAgICAgICAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKyAgICAgICAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorCisgICAgICBlbHNlCisgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJHdpdGh2YWwvaW5jbHVkZSIKKyAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9IiR3aXRodmFsLyRhY2xfbGliZGlyc3RlbSIKKyAgICAgIGZpCisgICAgZmkKKworZmkKKworICAgICAgTElCSU5UTD0KKyAgTFRMSUJJTlRMPQorICBJTkNJTlRMPQorICBMSUJJTlRMX1BSRUZJWD0KKyAgcnBhdGhkaXJzPQorICBsdHJwYXRoZGlycz0KKyAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPQorICBuYW1lc19uZXh0X3JvdW5kPSdpbnRsICcKKyAgd2hpbGUgdGVzdCAtbiAiJG5hbWVzX25leHRfcm91bmQiOyBkbworICAgIG5hbWVzX3RoaXNfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kIgorICAgIG5hbWVzX25leHRfcm91bmQ9CisgICAgZm9yIG5hbWUgaW4gJG5hbWVzX3RoaXNfcm91bmQ7IGRvCisgICAgICBhbHJlYWR5X2hhbmRsZWQ9CisgICAgICBmb3IgbiBpbiAkbmFtZXNfYWxyZWFkeV9oYW5kbGVkOyBkbworICAgICAgICBpZiB0ZXN0ICIkbiIgPSAiJG5hbWUiOyB0aGVuCisgICAgICAgICAgYWxyZWFkeV9oYW5kbGVkPXllcworICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgICBpZiB0ZXN0IC16ICIkYWxyZWFkeV9oYW5kbGVkIjsgdGhlbgorICAgICAgICBuYW1lc19hbHJlYWR5X2hhbmRsZWQ9IiRuYW1lc19hbHJlYWR5X2hhbmRsZWQgJG5hbWUiCisgICAgICAgICAgICAgICAgICAgICAgICB1cHBlcm5hbWU9YGVjaG8gIiRuYW1lIiB8IHNlZCAtZSAneXxhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLXxBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX3wnYAorICAgICAgICBldmFsIHZhbHVlPVwiXCRIQVZFX0xJQiR1cHBlcm5hbWVcIgorICAgICAgICBpZiB0ZXN0IC1uICIkdmFsdWUiOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAiJHZhbHVlIiA9IHllczsgdGhlbgorICAgICAgICAgICAgZXZhbCB2YWx1ZT1cIlwkTElCJHVwcGVybmFtZVwiCisgICAgICAgICAgICB0ZXN0IC16ICIkdmFsdWUiIHx8IExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9JHZhbHVlIgorICAgICAgICAgICAgZXZhbCB2YWx1ZT1cIlwkTFRMSUIkdXBwZXJuYW1lXCIKKyAgICAgICAgICAgIHRlc3QgLXogIiR2YWx1ZSIgfHwgTFRMSUJJTlRMPSIke0xUTElCSU5UTH0ke0xUTElCSU5UTDorIH0kdmFsdWUiCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOgorICAgICAgICAgIGZpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0KKyAgICAgICAgICBmb3VuZF9sYT0KKyAgICAgICAgICBmb3VuZF9zbz0KKyAgICAgICAgICBmb3VuZF9hPQorICAgICAgICAgIGV2YWwgbGlibmFtZT1cIiRhY2xfbGlibmFtZV9zcGVjXCIgICAgIyB0eXBpY2FsbHk6IGxpYm5hbWU9bGliJG5hbWUKKyAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgorICAgICAgICAgICAgc2hyZXh0PSIuJGFjbF9zaGxpYmV4dCIgICAgICAgICAgICAgIyB0eXBpY2FsbHk6IHNocmV4dD0uc28KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBzaHJleHQ9CisgICAgICAgICAgZmkKKyAgICAgICAgICBpZiB0ZXN0ICR1c2VfYWRkaXRpb25hbCA9IHllczsgdGhlbgorICAgICAgICAgICAgZGlyPSIkYWRkaXRpb25hbF9saWJkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgorICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0IgorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWMiID0gJyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnOyB0aGVuCisgICAgICAgICAgICAgICAgICB2ZXI9YChjZCAiJGRpciIgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gIiRsaWJuYW1lJHNocmV4dCIuKjsgZG8gZWNobyAiJGYiOyBkb25lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICJzLF4kbGlibmFtZSRzaHJleHRcXFxcLiwsIiBcCisgICAgICAgICAgICAgICAgICAgICAgICB8IHNvcnQgLXQgJy4nIC1uIC1yIC1rMSwxIC1rMiwyIC1rMywzIC1rNCw0IC1rNSw1IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIDFxICkgMj4vZGV2L251bGxgCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkdmVyIiAmJiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIgorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBldmFsIGxpYnJhcnlfbmFtZXM9XCIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlY1wiCisgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAkbGlicmFyeV9uYW1lczsgZG8KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kZiI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGYiCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYIjsgdGhlbgorICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS5sYSI7IHRoZW4KKyAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci8kbGlibmFtZS5sYSIKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKyAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMVExJQklOVEw7IGRvCisKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKyAgZXZhbCB4PVwiJHhcIgorICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisKKyAgICAgICAgICAgICAgY2FzZSAiJHgiIGluCisgICAgICAgICAgICAgICAgLUwqKQorICAgICAgICAgICAgICAgICAgZGlyPWBlY2hvICJYJHgiIHwgc2VkIC1lICdzL15YLUwvLydgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0IgorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWMiID0gJyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICB2ZXI9YChjZCAiJGRpciIgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gIiRsaWJuYW1lJHNocmV4dCIuKjsgZG8gZWNobyAiJGYiOyBkb25lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICJzLF4kbGlibmFtZSRzaHJleHRcXFxcLiwsIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNvcnQgLXQgJy4nIC1uIC1yIC1rMSwxIC1rMiwyIC1rMywzIC1rNCw0IC1rNSw1IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIDFxICkgMj4vZGV2L251bGxgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkdmVyIiAmJiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIgorICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBldmFsIGxpYnJhcnlfbmFtZXM9XCIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlY1wiCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAkbGlicmFyeV9uYW1lczsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kZiI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS5sYSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci8kbGlibmFtZS5sYSIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZG9uZQorICAgICAgICAgIGZpCisgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgTFRMSUJJTlRMPSIke0xUTElCSU5UTH0ke0xUTElCSU5UTDorIH0tTCRmb3VuZF9kaXIgLWwkbmFtZSIKKyAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfc28iICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiA9IG5vIHx8IHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9JGZvdW5kX3NvIgorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICBmb3IgeCBpbiAkbHRycGF0aGRpcnM7IGRvCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZm91bmRfZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgbHRycGF0aGRpcnM9IiRsdHJwYXRoZGlycyAkZm91bmRfZGlyIgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfaGFyZGNvZGVfZGlyZWN0IiA9IHllczsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiAmJiB0ZXN0ICIkYWNsX2hhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9JGZvdW5kX3NvIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRmb3VuZF9kaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGZvdW5kX2RpciIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTElCSU5UTDsgZG8KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICBldmFsIHg9XCIkeFwiCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGZvdW5kX2RpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9LUwkZm91bmRfZGlyIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2hhcmRjb2RlX21pbnVzX0wiICE9IG5vOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0tbCRuYW1lIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2EiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfSRmb3VuZF9hIgorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0KKyAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9kaXIiIGluCisgICAgICAgICAgICAgICovJGFjbF9saWJkaXJzdGVtIHwgKi8kYWNsX2xpYmRpcnN0ZW0vKQorICAgICAgICAgICAgICAgIGJhc2VkaXI9YGVjaG8gIlgkZm91bmRfZGlyIiB8IHNlZCAtZSAncyxeWCwsJyAtZSAicywvJGFjbF9saWJkaXJzdGVtLyInKiQsLCdgCisgICAgICAgICAgICAgICAgTElCSU5UTF9QUkVGSVg9IiRiYXNlZGlyIgorICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJGJhc2VkaXIvaW5jbHVkZSIKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWC91c3IvaW5jbHVkZSI7IHRoZW4KKyAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiID0gIlgvdXNyL2xvY2FsL2luY2x1ZGUiOyB0aGVuCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICAgICAgICAgICAgICAgICAgbGludXgqIHwgZ251KiB8IGsqYnNkKi1nbnUpIGhhdmVpdD15ZXM7OworICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgIGZvciB4IGluICRDUFBGTEFHUyAkSU5DSU5UTDsgZG8KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICBldmFsIHg9XCIkeFwiCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkNJTlRMPSIke0lOQ0lOVEx9JHtJTkNJTlRMOisgfS1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkZm91bmRfbGEiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVfbGliZGlyPSIkbGliZGlyIgorICAgICAgICAgICAgICBjYXNlICIkZm91bmRfbGEiIGluCisgICAgICAgICAgICAgICAgKi8qIHwgKlxcKikgLiAiJGZvdW5kX2xhIiA7OworICAgICAgICAgICAgICAgICopIC4gIi4vJGZvdW5kX2xhIiA7OworICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgIGxpYmRpcj0iJHNhdmVfbGliZGlyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKyAgICAgICAgICAgICAgICBjYXNlICIkZGVwIiBpbgorICAgICAgICAgICAgICAgICAgLUwqKQorICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj1gZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLUwvLydgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgIT0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgPSAiWC91c3IvbG9jYWwvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbnV4KiB8IGdudSogfCBrKmJzZCotZ251KSBoYXZlaXQ9eWVzOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTElCSU5UTDsgZG8KKworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICBldmFsIHg9XCIkeFwiCisgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJJTlRMOyBkbworCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisgIGV2YWwgeD1cIiR4XCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVExJQklOVEw9IiR7TFRMSUJJTlRMfSR7TFRMSUJJTlRMOisgfS1MJGFkZGl0aW9uYWxfbGliZGlyIgorICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgLVIqKQorICAgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1SLy8nYAorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiAhPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRycGF0aGRpcnM7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgcnBhdGhkaXJzPSIkcnBhdGhkaXJzICRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkbHRycGF0aGRpcnM7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgbHRycGF0aGRpcnM9IiRsdHJwYXRoZGlycyAkZGlyIgorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAtbCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNfbmV4dF9yb3VuZD0iJG5hbWVzX25leHRfcm91bmQgImBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtbC8vJ2AKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICoubGEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzX25leHRfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kICJgZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzLF5YLiovLCwnIC1lICdzLF5saWIsLCcgLWUgJ3MsXC5sYSQsLCdgCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9JGRlcCIKKyAgICAgICAgICAgICAgICAgICAgTFRMSUJJTlRMPSIke0xUTElCSU5UTH0ke0xUTElCSU5UTDorIH0kZGVwIgorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgZmkKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfS1sJG5hbWUiCisgICAgICAgICAgICBMVExJQklOVEw9IiR7TFRMSUJJTlRMfSR7TFRMSUJJTlRMOisgfS1sJG5hbWUiCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZG9uZQorICBkb25lCisgIGlmIHRlc3QgIlgkcnBhdGhkaXJzIiAhPSAiWCI7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBhbGxkaXJzPQorICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICBhbGxkaXJzPSIke2FsbGRpcnN9JHthbGxkaXJzOiskYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3J9JGZvdW5kX2RpciIKKyAgICAgIGRvbmUKKyAgICAgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKyAgICAgIGxpYmRpcj0iJGFsbGRpcnMiCisgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0kZmxhZyIKKyAgICBlbHNlCisgICAgICAgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCisgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKyAgICAgICAgbGliZGlyPSIkZm91bmRfZGlyIgorICAgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCisgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9JGZsYWciCisgICAgICBkb25lCisgICAgZmkKKyAgZmkKKyAgaWYgdGVzdCAiWCRsdHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICBmb3IgZm91bmRfZGlyIGluICRsdHJwYXRoZGlyczsgZG8KKyAgICAgIExUTElCSU5UTD0iJHtMVExJQklOVEx9JHtMVExJQklOVEw6KyB9LVIkZm91bmRfZGlyIgorICAgIGRvbmUKKyAgZmkKKworICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdOVSBnZXR0ZXh0IGluIGxpYmludGwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdOVSBnZXR0ZXh0IGluIGxpYmludGwuLi4gIiA+JjY7IH0KK2lmIGV2YWwgInRlc3QgXCJcJHskZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwrc2V0fVwiIiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGd0X3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICAgICAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJElOQ0lOVEwiCisgICAgICAgICAgICBndF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICAgICAgICAgTElCUz0iJExJQlMgJExJQklOVEwiCisgICAgICAgICAgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bGliaW50bC5oPgorJGd0X3JldmlzaW9uX3Rlc3RfY29kZQorZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOworZXh0ZXJuCisjaWZkZWYgX19jcGx1c3BsdXMKKyJDIgorI2VuZGlmCitjb25zdCBjaGFyICpfbmxfZXhwYW5kX2FsaWFzIChjb25zdCBjaGFyICopOworaW50CittYWluICgpCit7CitiaW5kdGV4dGRvbWFpbiAoIiIsICIiKTsKK3JldHVybiAqIGdldHRleHQgKCIiKSRndF9leHByZXNzaW9uX3Rlc3RfY29kZSArIF9ubF9tc2dfY2F0X2NudHIgKyAqX25sX2V4cGFuZF9hbGlhcyAoIiIpCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsPXllcyIKK2Vsc2UKKyAgZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgICAgICAgICAgICAgICBpZiB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliaW50bCI7IHRlc3QgIiRndF92YWwiICE9IHllczsgfSAmJiB0ZXN0IC1uICIkTElCSUNPTlYiOyB0aGVuCisgICAgICAgICAgICAgIExJQlM9IiRMSUJTICRMSUJJQ09OViIKKyAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGxpYmludGwuaD4KKyRndF9yZXZpc2lvbl90ZXN0X2NvZGUKK2V4dGVybiBpbnQgX25sX21zZ19jYXRfY250cjsKK2V4dGVybgorI2lmZGVmIF9fY3BsdXNwbHVzCisiQyIKKyNlbmRpZgorY29uc3QgY2hhciAqX25sX2V4cGFuZF9hbGlhcyAoY29uc3QgY2hhciAqKTsKK2ludAorbWFpbiAoKQoreworYmluZHRleHRkb21haW4gKCIiLCAiIik7CityZXR1cm4gKiBnZXR0ZXh0ICgiIikkZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGUgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9leHBhbmRfYWxpYXMgKCIiKQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIExJQklOVEw9IiRMSUJJTlRMICRMSUJJQ09OViIKKyAgICAgICAgICAgICAgICBMVExJQklOVEw9IiRMVExJQklOVEwgJExUTElCSUNPTlYiCisgICAgICAgICAgICAgICAgZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsPXllcyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgICBmaQorICAgICAgICAgICAgQ1BQRkxBR1M9IiRndF9zYXZlX0NQUEZMQUdTIgorICAgICAgICAgICAgTElCUz0iJGd0X3NhdmVfTElCUyIKK2ZpCitldmFsIGFjX3Jlcz1cJCRndF9mdW5jX2dudWdldHRleHRfbGliaW50bAorCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgICAgICAgIGZpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliYyI7IHRlc3QgIiRndF92YWwiID0gInllcyI7IH0gXAorICAgICAgICAgICB8fCB7IHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsIjsgdGVzdCAiJGd0X3ZhbCIgPSAieWVzIjsgfSBcCisgICAgICAgICAgICAgICAgJiYgdGVzdCAiJFBBQ0tBR0UiICE9IGdldHRleHQtcnVudGltZSBcCisgICAgICAgICAgICAgICAgJiYgdGVzdCAiJFBBQ0tBR0UiICE9IGdldHRleHQtdG9vbHM7IH07IHRoZW4KKyAgICAgICAgICBndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQ9eWVzCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0KKyAgICAgICAgICBMVExJQklOVEw9CisgICAgICAgICAgSU5DSU5UTD0KKyAgICAgICAgZmkKKworCisKKyAgICBpZiB0ZXN0IC1uICIkSU5UTF9NQUNPU1hfTElCUyI7IHRoZW4KKyAgICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyIgXAorICAgICAgICAgfHwgdGVzdCAiJG5sc19jdl91c2VfZ251X2dldHRleHQiID0gInllcyI7IHRoZW4KKyAgICAgICAgICAgICAgICBMSUJJTlRMPSIkTElCSU5UTCAkSU5UTF9NQUNPU1hfTElCUyIKKyAgICAgICAgTFRMSUJJTlRMPSIkTFRMSUJJTlRMICRJTlRMX01BQ09TWF9MSUJTIgorICAgICAgZmkKKyAgICBmaQorCisgICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgPSAieWVzIiBcCisgICAgICAgfHwgdGVzdCAiJG5sc19jdl91c2VfZ251X2dldHRleHQiID0gInllcyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgRU5BQkxFX05MUyAxIiA+PmNvbmZkZWZzLmgKKworICAgIGVsc2UKKyAgICAgIFVTRV9OTFM9bm8KKyAgICBmaQorICBmaQorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byB1c2UgTkxTIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIE5MUy4uLiAiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFVTRV9OTFMiID4mNQorJGFzX2VjaG8gIiRVU0VfTkxTIiA+JjY7IH0KKyAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXJlIHRoZSBnZXR0ZXh0IGZ1bmN0aW9uIGNvbWVzIGZyb20iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hlcmUgdGhlIGdldHRleHQgZnVuY3Rpb24gY29tZXMgZnJvbS4uLiAiID4mNjsgfQorICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyI7IHRoZW4KKyAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsIjsgdGVzdCAiJGd0X3ZhbCIgPSAieWVzIjsgfTsgdGhlbgorICAgICAgICBndF9zb3VyY2U9ImV4dGVybmFsIGxpYmludGwiCisgICAgICBlbHNlCisgICAgICAgIGd0X3NvdXJjZT0ibGliYyIKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgZ3Rfc291cmNlPSJpbmNsdWRlZCBpbnRsIGRpcmVjdG9yeSIKKyAgICBmaQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3Rfc291cmNlIiA+JjUKKyRhc19lY2hvICIkZ3Rfc291cmNlIiA+JjY7IH0KKyAgZmkKKworICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsgdGhlbgorCisgICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgPSAieWVzIjsgdGhlbgorICAgICAgaWYgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiOyB0ZXN0ICIkZ3RfdmFsIiA9ICJ5ZXMiOyB9OyB0aGVuCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGxpbmsgd2l0aCBsaWJpbnRsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBsaW5rIHdpdGggbGliaW50bC4uLiAiID4mNjsgfQorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExJQklOVEwiID4mNQorJGFzX2VjaG8gIiRMSUJJTlRMIiA+JjY7IH0KKworICBmb3IgZWxlbWVudCBpbiAkSU5DSU5UTDsgZG8KKyAgICBoYXZlaXQ9CisgICAgZm9yIHggaW4gJENQUEZMQUdTOyBkbworCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisgIGV2YWwgeD1cIiR4XCIKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorCisgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZWxlbWVudCI7IHRoZW4KKyAgICAgICAgaGF2ZWl0PXllcworICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBkb25lCisgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSR7Q1BQRkxBR1M6KyB9JGVsZW1lbnQiCisgICAgZmkKKyAgZG9uZQorCisgICAgICBmaQorCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUVEVYVCAxIiA+PmNvbmZkZWZzLmgKKworCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0RDR0VUVEVYVCAxIiA+PmNvbmZkZWZzLmgKKworICAgIGZpCisKKyAgICAgICAgUE9TVUI9cG8KKyAgZmkKKworCisKKyAgICBJTlRMTElCUz0iJExJQklOVEwiCisKKworCisKKworCisKKyAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KKyAgICBHRVRURVhUX1BBQ0tBR0U9Z3N0cmVhbWVyLSRHU1RfTUFKT1JNSU5PUgorICBlbHNlCisgICAgR0VUVEVYVF9QQUNLQUdFPU5VTEwKKyAgZmkKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEdFVFRFWFRfUEFDS0FHRSAiJEdFVFRFWFRfUEFDS0FHRSIKK19BQ0VPRgorCisKKworICBFWFBfVkFSPUxPQ0FMRURJUgorICBGUk9NX1ZBUj0kZGF0YWRpci9sb2NhbGUKKworICAgIHByZWZpeF9zYXZlPSRwcmVmaXgKKyAgZXhlY19wcmVmaXhfc2F2ZT0kZXhlY19wcmVmaXgKKworICAgIGlmIHRlc3QgIngkcHJlZml4IiA9ICJ4Tk9ORSI7IHRoZW4KKyAgICBwcmVmaXg9IiRhY19kZWZhdWx0X3ByZWZpeCIKKyAgZmkKKyAgICBpZiB0ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9ICJ4Tk9ORSI7IHRoZW4KKyAgICBleGVjX3ByZWZpeD0kcHJlZml4CisgIGZpCisKKyAgZnVsbF92YXI9IiRGUk9NX1ZBUiIKKyAgICB3aGlsZSB0cnVlOyBkbworICAgIG5ld19mdWxsX3Zhcj0iYGV2YWwgZWNobyAkZnVsbF92YXJgIgorICAgIGlmIHRlc3QgIngkbmV3X2Z1bGxfdmFyIiA9ICJ4JGZ1bGxfdmFyIjsgdGhlbiBicmVhazsgZmkKKyAgICBmdWxsX3Zhcj0kbmV3X2Z1bGxfdmFyCisgIGRvbmUKKworICAgIGZ1bGxfdmFyPSRuZXdfZnVsbF92YXIKKyAgTE9DQUxFRElSPSIkZnVsbF92YXIiCisKKworICAgIHByZWZpeD0kcHJlZml4X3NhdmUKKyAgZXhlY19wcmVmaXg9JGV4ZWNfcHJlZml4X3NhdmUKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIExPQ0FMRURJUiAiJExPQ0FMRURJUiIKK19BQ0VPRgorCisKKworCisKKworCisgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1nc3QtZGVidWcgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZ3N0X2RlYnVnK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZ3N0X2RlYnVnOworICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICB5ZXMpIEdTVF9ESVNBQkxFX0dTVF9ERUJVRz1ubyA7OworICAgICAgICBubykgR1NUX0RJU0FCTEVfR1NUX0RFQlVHPXllcyA7OworICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtZ3N0LWRlYnVnIiAiJExJTkVOTyIgNSAgOzsKKyAgICAgICBlc2FjCisKK2Vsc2UKKyAgR1NUX0RJU0FCTEVfR1NUX0RFQlVHPW5vCitmaQorCisgIGlmIHRlc3QgeCRHU1RfRElTQUJMRV9HU1RfREVCVUcgPSB4eWVzOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBkaXNhYmxlZCBzdWJzeXN0ZW0gZGVidWdnaW5nIHN1YnN5c3RlbSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBkaXNhYmxlZCBzdWJzeXN0ZW0gZGVidWdnaW5nIHN1YnN5c3RlbSIgPiY2O30KKyAgICBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FPSIjZGVmaW5lIEdTVF9ESVNBQkxFX0dTVF9ERUJVRyAxIgorICBlbHNlCisgICAgR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORT0iLyogI3VuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRyAqLyIKKyAgZmkKKworCisKKyBpZiB0ZXN0ICJ4JEdTVF9ESVNBQkxFX0dTVF9ERUJVRyIgPSAieHllcyI7IHRoZW4KKyAgR1NUX0RJU0FCTEVfR1NUX0RFQlVHX1RSVUU9CisgIEdTVF9ESVNBQkxFX0dTVF9ERUJVR19GQUxTRT0nIycKK2Vsc2UKKyAgR1NUX0RJU0FCTEVfR1NUX0RFQlVHX1RSVUU9JyMnCisgIEdTVF9ESVNBQkxFX0dTVF9ERUJVR19GQUxTRT0KK2ZpCisKKworCisKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBhcnNlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3BhcnNlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcGFyc2U7CisgICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgIHllcykgR1NUX0RJU0FCTEVfUEFSU0U9bm8gOzsKKyAgICAgICAgbm8pIEdTVF9ESVNBQkxFX1BBUlNFPXllcyA7OworICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtcGFyc2UiICIkTElORU5PIiA1ICA7OworICAgICAgIGVzYWMKKworZWxzZQorICBHU1RfRElTQUJMRV9QQVJTRT1ubworZmkKKworICBpZiB0ZXN0IHgkR1NUX0RJU0FCTEVfUEFSU0UgPSB4eWVzOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBkaXNhYmxlZCBzdWJzeXN0ZW0gY29tbWFuZC1saW5lIHBhcnNlciIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBkaXNhYmxlZCBzdWJzeXN0ZW0gY29tbWFuZC1saW5lIHBhcnNlciIgPiY2O30KKyAgICBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkU9IiNkZWZpbmUgR1NUX0RJU0FCTEVfUEFSU0UgMSIKKyAgZWxzZQorICAgIEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORT0iLyogI3VuZGVmIEdTVF9ESVNBQkxFX1BBUlNFICovIgorICBmaQorCisKKworIGlmIHRlc3QgIngkR1NUX0RJU0FCTEVfUEFSU0UiID0gInh5ZXMiOyB0aGVuCisgIEdTVF9ESVNBQkxFX1BBUlNFX1RSVUU9CisgIEdTVF9ESVNBQkxFX1BBUlNFX0ZBTFNFPScjJworZWxzZQorICBHU1RfRElTQUJMRV9QQVJTRV9UUlVFPScjJworICBHU1RfRElTQUJMRV9QQVJTRV9GQUxTRT0KK2ZpCisKK2lmIHRlc3QgIngkR1NUX0RJU0FCTEVfUEFSU0UiID0geHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBHU1RfRElTQUJMRV9QQVJTRSAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW9wdGlvbi1wYXJzaW5nIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX29wdGlvbl9wYXJzaW5nK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfb3B0aW9uX3BhcnNpbmc7CisgICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgIHllcykgR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkc9bm8gOzsKKyAgICAgICAgbm8pIEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HPXllcyA7OworICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtb3B0aW9uLXBhcnNpbmciICIkTElORU5PIiA1ICA7OworICAgICAgIGVzYWMKKworZWxzZQorICBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lORz1ubworZmkKKworICBpZiB0ZXN0IHgkR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkcgPSB4eWVzOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBkaXNhYmxlZCBzdWJzeXN0ZW0gb3B0aW9uIHBhcnNpbmcgd2hlbiBnc3RfaW5pdCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBkaXNhYmxlZCBzdWJzeXN0ZW0gb3B0aW9uIHBhcnNpbmcgd2hlbiBnc3RfaW5pdCIgPiY2O30KKyAgICBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkU9IiNkZWZpbmUgR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkcgMSIKKyAgZWxzZQorICAgIEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORT0iLyogI3VuZGVmIEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HICovIgorICBmaQorCisKKworIGlmIHRlc3QgIngkR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkciID0gInh5ZXMiOyB0aGVuCisgIEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX1RSVUU9CisgIEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0ZBTFNFPScjJworZWxzZQorICBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19UUlVFPScjJworICBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19GQUxTRT0KK2ZpCisKK2lmIHRlc3QgIngkR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkciID0geHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lORyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXRyYWNlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3RyYWNlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfdHJhY2U7CisgICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgIHllcykgR1NUX0RJU0FCTEVfVFJBQ0U9bm8gOzsKKyAgICAgICAgbm8pIEdTVF9ESVNBQkxFX1RSQUNFPXllcyA7OworICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtdHJhY2UiICIkTElORU5PIiA1ICA7OworICAgICAgIGVzYWMKKworZWxzZQorICBHU1RfRElTQUJMRV9UUkFDRT1ubworZmkKKworICBpZiB0ZXN0IHgkR1NUX0RJU0FCTEVfVFJBQ0UgPSB4eWVzOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBkaXNhYmxlZCBzdWJzeXN0ZW0gdHJhY2luZyBzdWJzeXN0ZW0iID4mNQorJGFzX2VjaG8gIiRhc19tZTogZGlzYWJsZWQgc3Vic3lzdGVtIHRyYWNpbmcgc3Vic3lzdGVtIiA+JjY7fQorICAgIEdTVF9ESVNBQkxFX1RSQUNFX0RFRklORT0iI2RlZmluZSBHU1RfRElTQUJMRV9UUkFDRSAxIgorICBlbHNlCisgICAgR1NUX0RJU0FCTEVfVFJBQ0VfREVGSU5FPSIvKiAjdW5kZWYgR1NUX0RJU0FCTEVfVFJBQ0UgKi8iCisgIGZpCisKKworCisgaWYgdGVzdCAieCRHU1RfRElTQUJMRV9UUkFDRSIgPSAieHllcyI7IHRoZW4KKyAgR1NUX0RJU0FCTEVfVFJBQ0VfVFJVRT0KKyAgR1NUX0RJU0FCTEVfVFJBQ0VfRkFMU0U9JyMnCitlbHNlCisgIEdTVF9ESVNBQkxFX1RSQUNFX1RSVUU9JyMnCisgIEdTVF9ESVNBQkxFX1RSQUNFX0ZBTFNFPQorZmkKKworCisKKworICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYWxsb2MtdHJhY2Ugd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfYWxsb2NfdHJhY2Urc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9hbGxvY190cmFjZTsKKyAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgeWVzKSBHU1RfRElTQUJMRV9BTExPQ19UUkFDRT1ubyA7OworICAgICAgICBubykgR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0U9eWVzIDs7CisgICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1hbGxvYy10cmFjZSIgIiRMSU5FTk8iIDUgIDs7CisgICAgICAgZXNhYworCitlbHNlCisgIEdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFPW5vCitmaQorCisgIGlmIHRlc3QgeCRHU1RfRElTQUJMRV9BTExPQ19UUkFDRSA9IHh5ZXM7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGRpc2FibGVkIHN1YnN5c3RlbSBhbGxvY2F0aW9uIHRyYWNpbmciID4mNQorJGFzX2VjaG8gIiRhc19tZTogZGlzYWJsZWQgc3Vic3lzdGVtIGFsbG9jYXRpb24gdHJhY2luZyIgPiY2O30KKyAgICBHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9ERUZJTkU9IiNkZWZpbmUgR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0UgMSIKKyAgZWxzZQorICAgIEdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORT0iLyogI3VuZGVmIEdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFICovIgorICBmaQorCisKKworIGlmIHRlc3QgIngkR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0UiID0gInh5ZXMiOyB0aGVuCisgIEdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX1RSVUU9CisgIEdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0ZBTFNFPScjJworZWxzZQorICBHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9UUlVFPScjJworICBHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9GQUxTRT0KK2ZpCisKKworCisKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJlZ2lzdHJ5IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3JlZ2lzdHJ5K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcmVnaXN0cnk7CisgICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgIHllcykgR1NUX0RJU0FCTEVfUkVHSVNUUlk9bm8gOzsKKyAgICAgICAgbm8pIEdTVF9ESVNBQkxFX1JFR0lTVFJZPXllcyA7OworICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtcmVnaXN0cnkiICIkTElORU5PIiA1ICA7OworICAgICAgIGVzYWMKKworZWxzZQorICBHU1RfRElTQUJMRV9SRUdJU1RSWT1ubworZmkKKworICBpZiB0ZXN0IHgkR1NUX0RJU0FCTEVfUkVHSVNUUlkgPSB4eWVzOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBkaXNhYmxlZCBzdWJzeXN0ZW0gcGx1Z2luIHJlZ2lzdHJ5IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGRpc2FibGVkIHN1YnN5c3RlbSBwbHVnaW4gcmVnaXN0cnkiID4mNjt9CisgICAgR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FPSIjZGVmaW5lIEdTVF9ESVNBQkxFX1JFR0lTVFJZIDEiCisgIGVsc2UKKyAgICBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkU9Ii8qICN1bmRlZiBHU1RfRElTQUJMRV9SRUdJU1RSWSAqLyIKKyAgZmkKKworCisKKyBpZiB0ZXN0ICJ4JEdTVF9ESVNBQkxFX1JFR0lTVFJZIiA9ICJ4eWVzIjsgdGhlbgorICBHU1RfRElTQUJMRV9SRUdJU1RSWV9UUlVFPQorICBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRT0nIycKK2Vsc2UKKyAgR1NUX0RJU0FCTEVfUkVHSVNUUllfVFJVRT0nIycKKyAgR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0U9CitmaQorCitpZiB0ZXN0ICJ4JEdTVF9ESVNBQkxFX1JFR0lTVFJZIiA9ICJ4eWVzIgordGhlbgorICBHU1RfUkVHSVNUUllfRE9DX1RZUEVTPSIlIgorZWxzZQorICBHU1RfUkVHSVNUUllfRE9DX1RZUEVTPQorZmkKKworCisKKworICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbmV0IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX25ldCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX25ldDsKKyAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgeWVzKSBHU1RfRElTQUJMRV9ORVQ9bm8gOzsKKyAgICAgICAgbm8pIEdTVF9ESVNBQkxFX05FVD15ZXMgOzsKKyAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLW5ldCIgIiRMSU5FTk8iIDUgIDs7CisgICAgICAgZXNhYworCitlbHNlCisgIEdTVF9ESVNBQkxFX05FVD1ubworZmkKKworICBpZiB0ZXN0IHgkR1NUX0RJU0FCTEVfTkVUID0geHllczsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZGlzYWJsZWQgc3Vic3lzdGVtIG5ldHdvcmsgZGlzdHJpYnV0aW9uIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGRpc2FibGVkIHN1YnN5c3RlbSBuZXR3b3JrIGRpc3RyaWJ1dGlvbiIgPiY2O30KKyAgICBHU1RfRElTQUJMRV9ORVRfREVGSU5FPSIjZGVmaW5lIEdTVF9ESVNBQkxFX05FVCAxIgorICBlbHNlCisgICAgR1NUX0RJU0FCTEVfTkVUX0RFRklORT0iLyogI3VuZGVmIEdTVF9ESVNBQkxFX05FVCAqLyIKKyAgZmkKKworCisKKyBpZiB0ZXN0ICJ4JEdTVF9ESVNBQkxFX05FVCIgPSAieHllcyI7IHRoZW4KKyAgR1NUX0RJU0FCTEVfTkVUX1RSVUU9CisgIEdTVF9ESVNBQkxFX05FVF9GQUxTRT0nIycKK2Vsc2UKKyAgR1NUX0RJU0FCTEVfTkVUX1RSVUU9JyMnCisgIEdTVF9ESVNBQkxFX05FVF9GQUxTRT0KK2ZpCisKKworCisKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBsdWdpbiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9wbHVnaW4rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9wbHVnaW47CisgICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgIHllcykgR1NUX0RJU0FCTEVfUExVR0lOPW5vIDs7CisgICAgICAgIG5vKSBHU1RfRElTQUJMRV9QTFVHSU49eWVzIDs7CisgICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1wbHVnaW4iICIkTElORU5PIiA1ICA7OworICAgICAgIGVzYWMKKworZWxzZQorICBHU1RfRElTQUJMRV9QTFVHSU49bm8KK2ZpCisKKyAgaWYgdGVzdCB4JEdTVF9ESVNBQkxFX1BMVUdJTiA9IHh5ZXM7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGRpc2FibGVkIHN1YnN5c3RlbSBwbHVnaW4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogZGlzYWJsZWQgc3Vic3lzdGVtIHBsdWdpbiIgPiY2O30KKyAgICBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FPSIjZGVmaW5lIEdTVF9ESVNBQkxFX1BMVUdJTiAxIgorICBlbHNlCisgICAgR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORT0iLyogI3VuZGVmIEdTVF9ESVNBQkxFX1BMVUdJTiAqLyIKKyAgZmkKKworCisKKyBpZiB0ZXN0ICJ4JEdTVF9ESVNBQkxFX1BMVUdJTiIgPSAieHllcyI7IHRoZW4KKyAgR1NUX0RJU0FCTEVfUExVR0lOX1RSVUU9CisgIEdTVF9ESVNBQkxFX1BMVUdJTl9GQUxTRT0nIycKK2Vsc2UKKyAgR1NUX0RJU0FCTEVfUExVR0lOX1RSVUU9JyMnCisgIEdTVF9ESVNBQkxFX1BMVUdJTl9GQUxTRT0KK2ZpCisKKworCisgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlYnVnIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RlYnVnK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZGVidWc7CisgICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgIHllcykgVVNFX0RFQlVHPXllcyA7OworICAgICAgICBubykgIFVTRV9ERUJVRz1ubyA7OworICAgICAgICAqKSAgIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1kZWJ1ZyIgIiRMSU5FTk8iIDUgIDs7CisgICAgICBlc2FjCisKK2Vsc2UKKyAgVVNFX0RFQlVHPXllcworZmkKKworCisgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wcm9maWxpbmcgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcHJvZmlsaW5nK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcHJvZmlsaW5nOworICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICB5ZXMpIFVTRV9QUk9GSUxJTkc9eWVzIDs7CisgICAgICAgIG5vKSAgVVNFX1BST0ZJTElORz1ubyA7OworICAgICAgICAqKSAgIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1wcm9maWxpbmciICIkTElORU5PIiA1ICA7OworICAgICAgZXNhYworCitlbHNlCisgIFVTRV9QUk9GSUxJTkc9bm8KK2ZpCisKKworCitpZiB0ZXN0ICJ4JGFjX2N2X2Vudl9QS0dfQ09ORklHX3NldCIgIT0gInhzZXQiOyB0aGVuCisJaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cGtnLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1wa2ctY29uZmlnOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9QS0dfQ09ORklHK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkUEtHX0NPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9QS0dfQ09ORklHPSIkUEtHX0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfUEtHX0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK1BLR19DT05GSUc9JGFjX2N2X3BhdGhfUEtHX0NPTkZJRworaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUEtHX0NPTkZJRyIgPiY1CiskYXNfZWNobyAiJFBLR19DT05GSUciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wYXRoX1BLR19DT05GSUciOyB0aGVuCisgIGFjX3B0X1BLR19DT05GSUc9JFBLR19DT05GSUcKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwa2ctY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBwa2ctY29uZmlnOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkYWNfcHRfUEtHX0NPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHPSIkYWNfcHRfUEtHX0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfYWNfcHRfUEtHX0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK2FjX3B0X1BLR19DT05GSUc9JGFjX2N2X3BhdGhfYWNfcHRfUEtHX0NPTkZJRworaWYgdGVzdCAtbiAiJGFjX3B0X1BLR19DT05GSUciOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcHRfUEtHX0NPTkZJRyIgPiY1CiskYXNfZWNobyAiJGFjX3B0X1BLR19DT05GSUciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19wdF9QS0dfQ09ORklHIiA9IHg7IHRoZW4KKyAgICBQS0dfQ09ORklHPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgUEtHX0NPTkZJRz0kYWNfcHRfUEtHX0NPTkZJRworICBmaQorZWxzZQorICBQS0dfQ09ORklHPSIkYWNfY3ZfcGF0aF9QS0dfQ09ORklHIgorZmkKKworZmkKK2lmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorCV9wa2dfbWluX3ZlcnNpb249MC45LjAKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHBrZy1jb25maWcgaXMgYXQgbGVhc3QgdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBwa2ctY29uZmlnIGlzIGF0IGxlYXN0IHZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb24uLi4gIiA+JjY7IH0KKwlpZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb247IHRoZW4KKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKwllbHNlCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCQlQS0dfQ09ORklHPSIiCisJZmkKKworZmkKKworICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS12YWxncmluZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV92YWxncmluZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3ZhbGdyaW5kOworICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICB5ZXMpIFVTRV9WQUxHUklORD0iJFVTRV9ERUJVRyIgOzsKKyAgICAgICAgbm8pICBVU0VfVkFMR1JJTkQ9bm8gOzsKKyAgICAgICAgKikgICBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtdmFsZ3JpbmQiICIkTElORU5PIiA1ICA7OworICAgICAgZXNhYworCitlbHNlCisgIFVTRV9WQUxHUklORD0iJFVTRV9ERUJVRyIKK2ZpCisgICBWQUxHUklORF9SRVE9IjMuMCIKKyAgaWYgdGVzdCAieCRVU0VfVkFMR1JJTkQiID0geHllczsgdGhlbgorCitwa2dfZmFpbGVkPW5vCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBWQUxHUklORCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgVkFMR1JJTkQuLi4gIiA+JjY7IH0KKworaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJFZBTEdSSU5EX0NGTEFHUyI7IHRoZW4KKyAgICAgICAgcGtnX2N2X1ZBTEdSSU5EX0NGTEFHUz0iJFZBTEdSSU5EX0NGTEFHUyIKKyAgICBlbHNlCisgICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcInZhbGdyaW5kID49IFwkVkFMR1JJTkRfUkVRXCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgInZhbGdyaW5kID49ICRWQUxHUklORF9SRVEiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICBwa2dfY3ZfVkFMR1JJTkRfQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyAidmFsZ3JpbmQgPj0gJFZBTEdSSU5EX1JFUSIgMj4vZGV2L251bGxgCitlbHNlCisgIHBrZ19mYWlsZWQ9eWVzCitmaQorICAgIGZpCitlbHNlCisJcGtnX2ZhaWxlZD11bnRyaWVkCitmaQoraWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJFZBTEdSSU5EX0xJQlMiOyB0aGVuCisgICAgICAgIHBrZ19jdl9WQUxHUklORF9MSUJTPSIkVkFMR1JJTkRfTElCUyIKKyAgICBlbHNlCisgICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcInZhbGdyaW5kID49IFwkVkFMR1JJTkRfUkVRXCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgInZhbGdyaW5kID49ICRWQUxHUklORF9SRVEiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICBwa2dfY3ZfVkFMR1JJTkRfTElCUz1gJFBLR19DT05GSUcgLS1saWJzICJ2YWxncmluZCA+PSAkVkFMR1JJTkRfUkVRIiAyPi9kZXYvbnVsbGAKK2Vsc2UKKyAgcGtnX2ZhaWxlZD15ZXMKK2ZpCisgICAgZmkKK2Vsc2UKKwlwa2dfZmFpbGVkPXVudHJpZWQKK2ZpCisKKworCitpZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCisKK2lmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKK2Vsc2UKKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCitmaQorICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KKwkgICAgICAgIFZBTEdSSU5EX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAidmFsZ3JpbmQgPj0gJFZBTEdSSU5EX1JFUSJgCisgICAgICAgIGVsc2UKKwkgICAgICAgIFZBTEdSSU5EX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAidmFsZ3JpbmQgPj0gJFZBTEdSSU5EX1JFUSJgCisgICAgICAgIGZpCisJIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCisJZWNobyAiJFZBTEdSSU5EX1BLR19FUlJPUlMiID4mNQorCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICAgICAgICAgICAgVVNFX1ZBTEdSSU5EPSJubyIKK2VsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KKwlVU0VfVkFMR1JJTkQ9Im5vIgorZWxzZQorCVZBTEdSSU5EX0NGTEFHUz0kcGtnX2N2X1ZBTEdSSU5EX0NGTEFHUworCVZBTEdSSU5EX0xJQlM9JHBrZ19jdl9WQUxHUklORF9MSUJTCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisJVVNFX1ZBTEdSSU5EPSJ5ZXMiCitmaQorICBmaQorICBpZiB0ZXN0ICJ4JFVTRV9WQUxHUklORCIgPSB4eWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfVkFMR1JJTkQgMSIgPj5jb25mZGVmcy5oCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFVzaW5nIGV4dHJhIGNvZGUgcGF0aHMgZm9yIHZhbGdyaW5kIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFVzaW5nIGV4dHJhIGNvZGUgcGF0aHMgZm9yIHZhbGdyaW5kIiA+JjY7fQorICBmaQorCisKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWdjb3Ygd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZ2NvditzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2djb3Y7IGVuYWJsZV9nY292PSRlbmFibGV2YWwKK2Vsc2UKKyAgZW5hYmxlX2djb3Y9bm8KK2ZpCisKKyAgaWYgdGVzdCB4JGVuYWJsZV9nY292ID0geHllcyA7IHRoZW4KKyAgICBpZiB0ZXN0ICJ4JEdDQyIgIT0gInh5ZXMiCisgICAgdGhlbgorICAgICAgYXNfZm5fZXJyb3IgJD8gImdjb3Ygb25seSB3b3JrcyBpZiBnY2MgaXMgdXNlZCIgIiRMSU5FTk8iIDUKKyAgICBmaQorCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0byBzZWUgaWYgY29tcGlsZXIgdW5kZXJzdGFuZHMgXCItZnByb2ZpbGUtYXJjc1wiIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHRvIHNlZSBpZiBjb21waWxlciB1bmRlcnN0YW5kcyBcIi1mcHJvZmlsZS1hcmNzXCIuLi4gIiA+JjY7IH0KKworICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgQ0ZMQUdTPSIkQ0ZMQUdTICItZnByb2ZpbGUtYXJjcyIiCisKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGZsYWdfb2s9eWVzCitlbHNlCisgIGZsYWdfb2s9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisKKyAgaWYgdGVzdCAiWCRmbGFnX29rIiA9IFh5ZXMgOyB0aGVuCisgICAgR0NPVl9DRkxBR1M9IiRHQ09WX0NGTEFHUyAtZnByb2ZpbGUtYXJjcyIKKyAgICB0cnVlCisgIGVsc2UKKyAgICB0cnVlCisgICAgdHJ1ZQorICBmaQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGZsYWdfb2siID4mNQorJGFzX2VjaG8gIiRmbGFnX29rIiA+JjY7IH0KKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdG8gc2VlIGlmIGNvbXBpbGVyIHVuZGVyc3RhbmRzIFwiLWZ0ZXN0LWNvdmVyYWdlXCIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdG8gc2VlIGlmIGNvbXBpbGVyIHVuZGVyc3RhbmRzIFwiLWZ0ZXN0LWNvdmVyYWdlXCIuLi4gIiA+JjY7IH0KKworICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgQ0ZMQUdTPSIkQ0ZMQUdTICItZnRlc3QtY292ZXJhZ2UiIgorCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBmbGFnX29rPXllcworZWxzZQorICBmbGFnX29rPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorCisgIGlmIHRlc3QgIlgkZmxhZ19vayIgPSBYeWVzIDsgdGhlbgorICAgIEdDT1ZfQ0ZMQUdTPSIkR0NPVl9DRkxBR1MgLWZ0ZXN0LWNvdmVyYWdlIgorICAgIHRydWUKKyAgZWxzZQorICAgIHRydWUKKyAgICB0cnVlCisgIGZpCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZmxhZ19vayIgPiY1CiskYXNfZWNobyAiJGZsYWdfb2siID4mNjsgfQorCisgICAgICAgIEdDT1ZfQ0ZMQUdTPWBlY2hvICIkR0NPVl9DRkxBR1MiIHwgc2VkIC1lICdzLy1PWzAtOV0qLy9nJ2AKKyAgICAgICAgICAgICAgICBHQ09WX0xJQlM9LWxnY292CisKKworICAgIEdDT1Y9YGVjaG8gJENDIHwgc2VkIHMvZ2NjL2djb3YvZ2AKKworCisgICAgR1NUX0dDT1ZfRU5BQkxFRD15ZXMKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBHU1RfR0NPVl9FTkFCTEVEIDEKK19BQ0VPRgorCisgICAgICAgIGlmIHRlc3QgIngkR1NUX0dDT1ZfRU5BQkxFRCIgPSAieHllcyIKKyAgICB0aGVuCisgICAgICBDRkxBR1M9Ii1PMCIKKworICAgICAgQ1hYRkxBR1M9Ii1PMCIKKworICAgICAgRkZMQUdTPSItTzAiCisKKyAgICAgIENDQVNGTEFHUz0iLU8wIgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGdjb3YgZW5hYmxlZCwgc2V0dGluZyBDRkxBR1MgYW5kIGZyaWVuZHMgdG8gJENGTEFHUyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBnY292IGVuYWJsZWQsIHNldHRpbmcgQ0ZMQUdTIGFuZCBmcmllbmRzIHRvICRDRkxBR1MiID4mNjt9CisgICAgZmkKKyAgZmkKKyAgIGlmIHRlc3QgeCRlbmFibGVfZ2NvdiA9IHh5ZXM7IHRoZW4KKyAgR1NUX0dDT1ZfRU5BQkxFRF9UUlVFPQorICBHU1RfR0NPVl9FTkFCTEVEX0ZBTFNFPScjJworZWxzZQorICBHU1RfR0NPVl9FTkFCTEVEX1RSVUU9JyMnCisgIEdTVF9HQ09WX0VOQUJMRURfRkFMU0U9CitmaQorCisKKworCisgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1leGFtcGxlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9leGFtcGxlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2V4YW1wbGVzOworICAgICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgICAgeWVzKSBCVUlMRF9FWEFNUExFUz15ZXMgOzsKKyAgICAgICAgICBubykgIEJVSUxEX0VYQU1QTEVTPW5vIDs7CisgICAgICAgICAgKikgICBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1kaXNhYmxlLWV4YW1wbGVzIiAiJExJTkVOTyIgNSAgOzsKKyAgICAgICAgZXNhYworCitlbHNlCisgIEJVSUxEX0VYQU1QTEVTPXllcworZmkKKyAgICBpZiB0ZXN0ICJ4JEJVSUxEX0VYQU1QTEVTIiA9ICJ4eWVzIjsgdGhlbgorICBCVUlMRF9FWEFNUExFU19UUlVFPQorICBCVUlMRF9FWEFNUExFU19GQUxTRT0nIycKK2Vsc2UKKyAgQlVJTERfRVhBTVBMRVNfVFJVRT0nIycKKyAgQlVJTERfRVhBTVBMRVNfRkFMU0U9CitmaQorCisKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcGtnLWNvbmZpZy1wYXRoIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9wa2dfY29uZmlnX3BhdGgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3BrZ19jb25maWdfcGF0aDsKKyAgICAgICBleHBvcnQgUEtHX0NPTkZJR19QQVRIPSR7d2l0aHZhbH0KKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFNldCBQS0dfQ09ORklHX1BBVEggdG8gJFBLR19DT05GSUdfUEFUSCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBTZXQgUEtHX0NPTkZJR19QQVRIIHRvICRQS0dfQ09ORklHX1BBVEgiID4mNjt9CisKK2ZpCisKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcGFja2FnZS1uYW1lIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9wYWNrYWdlX25hbWUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3BhY2thZ2VfbmFtZTsKKyAgICAgIGNhc2UgIiR7d2l0aHZhbH0iIGluCisgICAgICAgIHllcykgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke3dpdGh2YWx9IGZvciAtLXdpdGgtcGFja2FnZS1uYW1lIiAiJExJTkVOTyIgNSAgOzsKKyAgICAgICAgbm8pICBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1wYWNrYWdlLW5hbWUiICIkTElORU5PIiA1ICA7OworICAgICAgICAqKSAgIEdTVF9QQUNLQUdFX05BTUU9IiR7d2l0aHZhbH0iIDs7CisgICAgICBlc2FjCisKK2Vsc2UKKworICAgICAgUD0KKyAgICAgIGlmIHRlc3QgIngkUCIgPSAieCIKKyAgICAgIHRoZW4KKyAgICAgICAgUD0kUEFDS0FHRV9OQU1FCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICJ4JFBBQ0tBR0VfVkVSU0lPTl9OQU5PIiA9ICJ4MCIKKyAgICAgIHRoZW4KKyAgICAgICAgR1NUX1BBQ0tBR0VfTkFNRT0iJFAgc291cmNlIHJlbGVhc2UiCisgICAgICBlbHNlCisgICAgICAgIGlmIHRlc3QgIngkUEFDS0FHRV9WRVJTSU9OX05BTk8iID0gIngxIgorICAgICAgICB0aGVuCisgICAgICAgICAgR1NUX1BBQ0tBR0VfTkFNRT0iJFAgZ2l0IgorICAgICAgICBlbHNlCisgICAgICAgICAgR1NUX1BBQ0tBR0VfTkFNRT0iJFAgcHJlcmVsZWFzZSIKKyAgICAgICAgZmkKKyAgICAgIGZpCisKKworZmkKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFVzaW5nICRHU1RfUEFDS0FHRV9OQU1FIGFzIHBhY2thZ2UgbmFtZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBVc2luZyAkR1NUX1BBQ0tBR0VfTkFNRSBhcyBwYWNrYWdlIG5hbWUiID4mNjt9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgR1NUX1BBQ0tBR0VfTkFNRSAiJEdTVF9QQUNLQUdFX05BTUUiCitfQUNFT0YKKworCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXBhY2thZ2Utb3JpZ2luIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9wYWNrYWdlX29yaWdpbitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcGFja2FnZV9vcmlnaW47CisgICAgICBjYXNlICIke3dpdGh2YWx9IiBpbgorICAgICAgICB5ZXMpIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLXBhY2thZ2Utb3JpZ2luIiAiJExJTkVOTyIgNSAgOzsKKyAgICAgICAgbm8pICBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1wYWNrYWdlLW9yaWdpbiIgIiRMSU5FTk8iIDUgIDs7CisgICAgICAgICopICAgR1NUX1BBQ0tBR0VfT1JJR0lOPSIke3dpdGh2YWx9IiA7OworICAgICAgZXNhYworCitlbHNlCisgIEdTVF9QQUNLQUdFX09SSUdJTj0iVW5rbm93biBwYWNrYWdlIG9yaWdpbiIKK2ZpCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBVc2luZyAkR1NUX1BBQ0tBR0VfT1JJR0lOIGFzIHBhY2thZ2Ugb3JpZ2luIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFVzaW5nICRHU1RfUEFDS0FHRV9PUklHSU4gYXMgcGFja2FnZSBvcmlnaW4iID4mNjt9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgR1NUX1BBQ0tBR0VfT1JJR0lOICIkR1NUX1BBQ0tBR0VfT1JJR0lOIgorX0FDRU9GCisKKworCisKKworICBHU1RfUEtHX0NPTkZJR19QQVRIPSJcJCh0b3BfYnVpbGRkaXIpL3BrZ2NvbmZpZyIKKyAgaWYgdGVzdCAieCRQS0dfQ09ORklHX1BBVEgiICE9ICJ4IjsgdGhlbgorICAgIEdTVF9QS0dfQ09ORklHX1BBVEg9IiRHU1RfUEtHX0NPTkZJR19QQVRIOiRQS0dfQ09ORklHX1BBVEgiCisgIGZpCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBVc2luZyBHU1RfUEtHX0NPTkZJR19QQVRIID0gJEdTVF9QS0dfQ09ORklHX1BBVEgiID4mNQorJGFzX2VjaG8gIiRhc19tZTogVXNpbmcgR1NUX1BLR19DT05GSUdfUEFUSCA9ICRHU1RfUEtHX0NPTkZJR19QQVRIIiA+JjY7fQorCisKKworICBpZiB0ZXN0ICJ4JFBBQ0tBR0VfVkVSU0lPTl9OQU5PIiA9ICJ4MCI7IHRoZW4KKworICAgICAgaWYgdGVzdCAieHllcyIgPSAieG5vIiAtbyAieHllcyIgPSAieCI7IHRoZW4KKyAgICBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FPWBkYXRlIC11ICIrJVktJW0tJWRUJUg6JU1aImAKKyAgZWxpZiB0ZXN0ICJ4eWVzIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgICAgICAgaWYgKCBlY2hvIHllcyB8IGdyZXAgLWUgJ14yMDEtOTAtOS0wLTEwLTktMC0zMC05JyA+L2Rldi9udWxsICkgOyB0aGVuCisgICAgICBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FPXllcworICAgIGVsc2UKKyAgICAgICAgICAgIFlZWVlfTU1fREQ9YHNoICIke3NyY2Rpcn0vY29tbW9uL2V4dHJhY3QtcmVsZWFzZS1kYXRlLWZyb20tZG9hcC1maWxlIiAgJFBBQ0tBR0VfVkVSU0lPTl9NQUpPUi4kUEFDS0FHRV9WRVJTSU9OX01JTk9SLiRQQUNLQUdFX1ZFUlNJT05fTUlDUk8gICAiJHtzcmNkaXJ9L2dzdHJlYW1lci5kb2FwIiBgOworICAgICAgaWYgdGVzdCAieCRZWVlZX01NX0REIiAhPSAieCI7IHRoZW4KKyAgICAgICAgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRT0kWVlZWV9NTV9ERAorICAgICAgZWxzZQorICAgICAgICBhc19mbl9lcnJvciAkPyAiU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRTogY291bGQgbm90IGV4dHJhY3QKKyAgICAgICAgICAgIHJlbGVhc2UgZGF0ZSBmb3IgcmVsZWFzZSB2ZXJzaW9uICAkUEFDS0FHRV9WRVJTSU9OX01BSk9SLiRQQUNLQUdFX1ZFUlNJT05fTUlOT1IuJFBBQ0tBR0VfVkVSU0lPTl9NSUNSTyAgZnJvbSAgXCIke3NyY2Rpcn0vZ3N0cmVhbWVyLmRvYXBcIiAiICIkTElORU5PIiA1CisgICAgICAgIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUU9IiIKKyAgICAgIGZpCisgICAgZmkKKyAgICBlbGlmICggZWNobyB5ZXMgfCBncmVwIC1lICdeMjAxLTkwLTktMC0xMC05LTAtMzAtOScgPi9kZXYvbnVsbCApIDsgdGhlbgorICAgIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUU9eWVzCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFNFVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUU6IGludmFsaWQgZmlyc3QgYXJndW1lbnQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRTogaW52YWxpZCBmaXJzdCBhcmd1bWVudCIgPiYyO30KKyAgICBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FPSIiCisgIGZpCisKKyAgaWYgdGVzdCAieCRHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FIiA9ICJ4IjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogSW52YWxpZCBwYWNrYWdlIHJlbGVhc2UgZGF0ZSB0aW1lOiAkR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbnZhbGlkIHBhY2thZ2UgcmVsZWFzZSBkYXRlIHRpbWU6ICRHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FIiA+JjI7fQorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBTZXR0aW5nIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUgdG8gJEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogU2V0dGluZyBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FIHRvICRHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FIiA+JjY7fQorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRSAiJEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUiCitfQUNFT0YKKworICBmaQorCisgIGVsc2UKKworICAgICAgaWYgdGVzdCAieG5vIiA9ICJ4bm8iIC1vICJ4bm8iID0gIngiOyB0aGVuCisgICAgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRT1gZGF0ZSAtdSAiKyVZLSVtLSVkVCVIOiVNWiJgCisgIGVsaWYgdGVzdCAieG5vIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgICAgICAgaWYgKCBlY2hvIG5vIHwgZ3JlcCAtZSAnXjIwMS05MC05LTAtMTAtOS0wLTMwLTknID4vZGV2L251bGwgKSA7IHRoZW4KKyAgICAgIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUU9bm8KKyAgICBlbHNlCisgICAgICAgICAgICBZWVlZX01NX0REPWBzaCAiJHtzcmNkaXJ9L2NvbW1vbi9leHRyYWN0LXJlbGVhc2UtZGF0ZS1mcm9tLWRvYXAtZmlsZSIgIGA7CisgICAgICBpZiB0ZXN0ICJ4JFlZWVlfTU1fREQiICE9ICJ4IjsgdGhlbgorICAgICAgICBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FPSRZWVlZX01NX0RECisgICAgICBlbHNlCisgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJTRVRfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FOiBjb3VsZCBub3QgZXh0cmFjdAorICAgICAgICAgICAgcmVsZWFzZSBkYXRlIGZvciByZWxlYXNlIHZlcnNpb24gIGZyb20gIiAiJExJTkVOTyIgNQorICAgICAgICBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FPSIiCisgICAgICBmaQorICAgIGZpCisgICAgZWxpZiAoIGVjaG8gbm8gfCBncmVwIC1lICdeMjAxLTkwLTktMC0xMC05LTAtMzAtOScgPi9kZXYvbnVsbCApIDsgdGhlbgorICAgIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUU9bm8KKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRTogaW52YWxpZCBmaXJzdCBhcmd1bWVudCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBTRVRfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FOiBpbnZhbGlkIGZpcnN0IGFyZ3VtZW50IiA+JjI7fQorICAgIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUU9IiIKKyAgZmkKKworICBpZiB0ZXN0ICJ4JEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUiID0gIngiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBJbnZhbGlkIHBhY2thZ2UgcmVsZWFzZSBkYXRlIHRpbWU6ICRHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IEludmFsaWQgcGFja2FnZSByZWxlYXNlIGRhdGUgdGltZTogJEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUiID4mMjt9CisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFNldHRpbmcgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRSB0byAkR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBTZXR0aW5nIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUgdG8gJEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUiID4mNjt9CisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FICIkR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRSIKK19BQ0VPRgorCisgIGZpCisKKyAgZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdGVzdHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfdGVzdHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV90ZXN0czsKKyAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICB5ZXMpIEJVSUxEX1RFU1RTPXllcyA7OworICAgICAgbm8pICBCVUlMRF9URVNUUz1ubyA7OworICAgICAgKikgICBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1kaXNhYmxlLXRlc3RzIiAiJExJTkVOTyIgNSAgOzsKKyAgICBlc2FjCisKK2Vsc2UKKyAgQlVJTERfVEVTVFM9eWVzCitmaQorICBpZiB0ZXN0ICJ4JEJVSUxEX1RFU1RTIiA9ICJ4eWVzIjsgdGhlbgorICBCVUlMRF9URVNUU19UUlVFPQorICBCVUlMRF9URVNUU19GQUxTRT0nIycKK2Vsc2UKKyAgQlVJTERfVEVTVFNfVFJVRT0nIycKKyAgQlVJTERfVEVTVFNfRkFMU0U9CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1mYWlsaW5nLXRlc3RzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2ZhaWxpbmdfdGVzdHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9mYWlsaW5nX3Rlc3RzOworICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgIHllcykgQlVJTERfRkFJTElOR19URVNUUz15ZXMgOzsKKyAgICAgIG5vKSAgQlVJTERfRkFJTElOR19URVNUUz1ubyA7OworICAgICAgKikgICBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1kaXNhYmxlLWZhaWxpbmctdGVzdHMiICIkTElORU5PIiA1ICA7OworICAgIGVzYWMKKworZWxzZQorICBCVUlMRF9GQUlMSU5HX1RFU1RTPW5vCitmaQorICBpZiB0ZXN0ICJ4JEJVSUxEX0ZBSUxJTkdfVEVTVFMiID0gInh5ZXMiOyB0aGVuCisgIEJVSUxEX0ZBSUxJTkdfVEVTVFNfVFJVRT0KKyAgQlVJTERfRkFJTElOR19URVNUU19GQUxTRT0nIycKK2Vsc2UKKyAgQlVJTERfRkFJTElOR19URVNUU19UUlVFPScjJworICBCVUlMRF9GQUlMSU5HX1RFU1RTX0ZBTFNFPQorZmkKKworaWYgdGVzdCB4JEJVSUxEX0ZBSUxJTkdfVEVTVFMgPSB4eWVzOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogYnVpbGRpbmcgdGVzdHMga25vd24gdG8gZmFpbCwgdXNlIC0tZGlzYWJsZS1mYWlsaW5nLXRlc3RzIHRvIGRpc2FibGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogYnVpbGRpbmcgdGVzdHMga25vd24gdG8gZmFpbCwgdXNlIC0tZGlzYWJsZS1mYWlsaW5nLXRlc3RzIHRvIGRpc2FibGUiID4mMjt9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogU2lzc3kgISBCeSBhc2tpbmcgdG8gbm90IGJ1aWxkIHRoZSB0ZXN0cyBrbm93biB0byBmYWlsLCB5b3UgaGVyZWJ5IHdhaXZlIHlvdXIgcmlnaHQgdG8gY3VzdG9tZXIgc3VwcG9ydC4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGlzIEVVTEEsIHBsZWFzZSBwcmVzcyBDdHJsLUMgYmVmb3JlIHRoZSBuZXh0IGxpbmUgaXMgcHJpbnRlZC4gIEJ5IGFsbG93aW5nIHRoZSBuZXh0IGxpbmUgdG8gYmUgcHJpbnRlZCwgeW91IGV4cHJlc3NseSBhY2tub3dsZWRnZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBFVUxBLiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBTaXNzeSAhIEJ5IGFza2luZyB0byBub3QgYnVpbGQgdGhlIHRlc3RzIGtub3duIHRvIGZhaWwsIHlvdSBoZXJlYnkgd2FpdmUgeW91ciByaWdodCB0byBjdXN0b21lciBzdXBwb3J0LiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoaXMgRVVMQSwgcGxlYXNlIHByZXNzIEN0cmwtQyBiZWZvcmUgdGhlIG5leHQgbGluZSBpcyBwcmludGVkLiAgQnkgYWxsb3dpbmcgdGhlIG5leHQgbGluZSB0byBiZSBwcmludGVkLCB5b3UgZXhwcmVzc2x5IGFja25vd2xlZGdlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIEVVTEEuIiA+JjI7fQorZmkKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBvaXNvbmluZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9wb2lzb25pbmcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9wb2lzb25pbmc7CisgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgeWVzKSBVU0VfUE9JU09OSU5HPXllcyA7OworICAgICAgbm8pICBVU0VfUE9JU09OSU5HPW5vIDs7CisgICAgICAqKSAgIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1wb2lzb25pbmciICIkTElORU5PIiA1ICA7OworICAgIGVzYWMKKworZWxzZQorICBVU0VfUE9JU09OSU5HPW5vCitmaQorIGlmIHRlc3QgIngkVVNFX1BPSVNPTklORyIgPSB4eWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9QT0lTT05JTkcgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworCisKKworICAgIGNhc2UgIngke2hvc3RfY3B1fSIgaW4KKyAgICB4aT84NiB8IHhrPyB8IHhpPzg2XzY0KQorICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICAgc29sYXJpcyopCisgICAgICAgICAgICBhY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJfX2kzODYiICJhY19jdl9oYXZlX2RlY2xfX19pMzg2IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9fX2kzODYiID0geCIieWVzOyB0aGVuIDoKKyAgSTM4Nl9BQkk9InllcyIKK2Vsc2UKKyAgSTM4Nl9BQkk9Im5vIgorZmkKKworICAgICAgICAgICAgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiX19hbWQ2NCIgImFjX2N2X2hhdmVfZGVjbF9fX2FtZDY0IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9fX2FtZDY0IiA9IHgiInllczsgdGhlbiA6CisgIEFNRDY0X0FCST0ieWVzIgorZWxzZQorICBBTUQ2NF9BQkk9Im5vIgorZmkKKworCisgICAgICAgICAgICBpZiB0ZXN0ICJ4JEkzODZfQUJJIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICAgICAgICAgICAgIEhBVkVfQ1BVX0kzODY9eWVzCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ1BVX0kzODYgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBpZiB0ZXN0ICJ4JEFNRDY0X0FCSSIgPSAieHllcyIgOyB0aGVuCisgICAgICAgICAgICAgICAgSEFWRV9DUFVfWDg2XzY0PXllcworCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0NQVV9YODZfNjQgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OworICAgICAgICAgKikKKyAgICAgICAgICAgIEhBVkVfQ1BVX0kzODY9eWVzCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ1BVX0kzODYgMSIgPj5jb25mZGVmcy5oCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAieCR7aG9zdF9jcHV9IiBpbgorICAgICAgICAgICAgICB4aTM4NiB8IHhpNDg2KSA7OworICAgICAgICAgICAgKikKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9SRFRTQyAxIiA+PmNvbmZkZWZzLmgKKyA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgeHBvd2VycGMpCisgICAgICBIQVZFX0NQVV9QUEM9eWVzCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ1BVX1BQQyAxIiA+PmNvbmZkZWZzLmgKKyA7OworICAgIHhwb3dlcnBjNjQpCisgICAgICBIQVZFX0NQVV9QUEM2ND15ZXMKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DUFVfUFBDNjQgMSIgPj5jb25mZGVmcy5oCisgOzsKKyAgICB4YWxwaGEqKQorICAgICAgSEFWRV9DUFVfQUxQSEE9eWVzCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ1BVX0FMUEhBIDEiID4+Y29uZmRlZnMuaAorIDs7CisgICAgeGFybSopCisgICAgICBIQVZFX0NQVV9BUk09eWVzCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ1BVX0FSTSAxIiA+PmNvbmZkZWZzLmgKKyA7OworICAgIHhzcGFyYyopCisgICAgICBIQVZFX0NQVV9TUEFSQz15ZXMKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DUFVfU1BBUkMgMSIgPj5jb25mZGVmcy5oCisgOzsKKyAgICB4bWlwcyopCisgICAgICBIQVZFX0NQVV9NSVBTPXllcworCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0NQVV9NSVBTIDEiID4+Y29uZmRlZnMuaAorIDs7CisgICAgeGhwcGEqKQorICAgICAgSEFWRV9DUFVfSFBQQT15ZXMKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DUFVfSFBQQSAxIiA+PmNvbmZkZWZzLmgKKyA7OworICAgIHhzMzkwKikKKyAgICAgIEhBVkVfQ1BVX1MzOTA9eWVzCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ1BVX1MzOTAgMSIgPj5jb25mZGVmcy5oCisgOzsKKyAgICB4aWE2NCopCisgICAgICBIQVZFX0NQVV9JQTY0PXllcworCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0NQVV9JQTY0IDEiID4+Y29uZmRlZnMuaAorIDs7CisgICAgeG02OGsqKQorICAgICAgSEFWRV9DUFVfTTY4Sz15ZXMKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DUFVfTTY4SyAxIiA+PmNvbmZkZWZzLmgKKyA7OworICAgIHh4ODZfNjQpCisgICAgICBIQVZFX0NQVV9YODZfNjQ9eWVzCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ1BVX1g4Nl82NCAxIiA+PmNvbmZkZWZzLmgKKyA7OworICAgIHhjcmlzKQorICAgICAgSEFWRV9DUFVfQ1JJUz15ZXMKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DUFVfQ1JJUyAxIiA+PmNvbmZkZWZzLmgKKyA7OworICAgIHhjcmlzdjMyKQorICAgICAgSEFWRV9DUFVfQ1JJU1YzMj15ZXMKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DUFVfQ1JJU1YzMiAxIiA+PmNvbmZkZWZzLmgKKyA7OworICBlc2FjCisKKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGJ5dGUgb3JkZXJpbmcgaXMgYmlnZW5kaWFuIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYnl0ZSBvcmRlcmluZyBpcyBiaWdlbmRpYW4uLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfY19iaWdlbmRpYW4rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jdl9jX2JpZ2VuZGlhbj11bmtub3duCisgICAgIyBTZWUgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgdW5pdmVyc2FsIGNvbXBpbGVyLgorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZm5kZWYgX19BUFBMRV9DQ19fCisJICAgICAgIG5vdCBhIHVuaXZlcnNhbCBjYXBhYmxlIGNvbXBpbGVyCisJICAgICAjZW5kaWYKKwkgICAgIHR5cGVkZWYgaW50IGR1bW15OworCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworCSMgQ2hlY2sgZm9yIHBvdGVudGlhbCAtYXJjaCBmbGFncy4gIEl0IGlzIG5vdCB1bml2ZXJzYWwgdW5sZXNzCisJIyB0aGVyZSBhcmUgYXQgbGVhc3QgdHdvIC1hcmNoIGZsYWdzIHdpdGggZGlmZmVyZW50IHZhbHVlcy4KKwlhY19hcmNoPQorCWFjX3ByZXY9CisJZm9yIGFjX3dvcmQgaW4gJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTOyBkbworCSBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKwkgICBjYXNlICRhY193b3JkIGluCisJICAgICBpPzg2IHwgeDg2XzY0IHwgcHBjIHwgcHBjNjQpCisJICAgICAgIGlmIHRlc3QgLXogIiRhY19hcmNoIiB8fCB0ZXN0ICIkYWNfYXJjaCIgPSAiJGFjX3dvcmQiOyB0aGVuCisJCSBhY19hcmNoPSRhY193b3JkCisJICAgICAgIGVsc2UKKwkJIGFjX2N2X2NfYmlnZW5kaWFuPXVuaXZlcnNhbAorCQkgYnJlYWsKKwkgICAgICAgZmkKKwkgICAgICAgOzsKKwkgICBlc2FjCisJICAgYWNfcHJldj0KKwkgZWxpZiB0ZXN0ICJ4JGFjX3dvcmQiID0gIngtYXJjaCI7IHRoZW4KKwkgICBhY19wcmV2PWFyY2gKKwkgZmkKKyAgICAgICBkb25lCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuCisgICAgICAjIFNlZSBpZiBzeXMvcGFyYW0uaCBkZWZpbmVzIHRoZSBCWVRFX09SREVSIG1hY3JvLgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCSAgICAgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorCitpbnQKK21haW4gKCkKK3sKKyNpZiAhIChkZWZpbmVkIEJZVEVfT1JERVIgJiYgZGVmaW5lZCBCSUdfRU5ESUFOIFwKKwkJICAgICAmJiBkZWZpbmVkIExJVFRMRV9FTkRJQU4gJiYgQllURV9PUkRFUiAmJiBCSUdfRU5ESUFOIFwKKwkJICAgICAmJiBMSVRUTEVfRU5ESUFOKQorCSAgICAgIGJvZ3VzIGVuZGlhbiBtYWNyb3MKKwkgICAgICNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIyBJdCBkb2VzOyBub3cgc2VlIHdoZXRoZXIgaXQgZGVmaW5lZCB0byBCSUdfRU5ESUFOIG9yIG5vdC4KKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCQkjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisKK2ludAorbWFpbiAoKQoreworI2lmIEJZVEVfT1JERVIgIT0gQklHX0VORElBTgorCQkgbm90IGJpZyBlbmRpYW4KKwkJI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKK2Vsc2UKKyAgYWNfY3ZfY19iaWdlbmRpYW49bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBmaQorICAgIGlmIHRlc3QgJGFjX2N2X2NfYmlnZW5kaWFuID0gdW5rbm93bjsgdGhlbgorICAgICAgIyBTZWUgaWYgPGxpbWl0cy5oPiBkZWZpbmVzIF9MSVRUTEVfRU5ESUFOIG9yIF9CSUdfRU5ESUFOIChlLmcuLCBTb2xhcmlzKS4KKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworaW50CittYWluICgpCit7CisjaWYgISAoZGVmaW5lZCBfTElUVExFX0VORElBTiB8fCBkZWZpbmVkIF9CSUdfRU5ESUFOKQorCSAgICAgIGJvZ3VzIGVuZGlhbiBtYWNyb3MKKwkgICAgICNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIyBJdCBkb2VzOyBub3cgc2VlIHdoZXRoZXIgaXQgZGVmaW5lZCB0byBfQklHX0VORElBTiBvciBub3QuCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworaW50CittYWluICgpCit7CisjaWZuZGVmIF9CSUdfRU5ESUFOCisJCSBub3QgYmlnIGVuZGlhbgorCQkjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2NfYmlnZW5kaWFuPXllcworZWxzZQorICBhY19jdl9jX2JpZ2VuZGlhbj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGZpCisgICAgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuCisgICAgICAjIENvbXBpbGUgYSB0ZXN0IHByb2dyYW0uCisgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgICMgVHJ5IHRvIGd1ZXNzIGJ5IGdyZXBwaW5nIHZhbHVlcyBmcm9tIGFuIG9iamVjdCBmaWxlLgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCitzaG9ydCBpbnQgYXNjaWlfbW1bXSA9CisJCSAgeyAweDQyNDksIDB4NDc2NSwgMHg2RTQ0LCAweDY5NjEsIDB4NkU1MywgMHg3OTUzLCAwIH07CisJCXNob3J0IGludCBhc2NpaV9paVtdID0KKwkJICB7IDB4Njk0QywgMHg1NDU0LCAweDY1NkMsIDB4NkU0NSwgMHg2OTQ0LCAweDZFNjEsIDAgfTsKKwkJaW50IHVzZV9hc2NpaSAoaW50IGkpIHsKKwkJICByZXR1cm4gYXNjaWlfbW1baV0gKyBhc2NpaV9paVtpXTsKKwkJfQorCQlzaG9ydCBpbnQgZWJjZGljX2lpW10gPQorCQkgIHsgMHg4OUQzLCAweEUzRTMsIDB4ODU5MywgMHg5NUM1LCAweDg5QzQsIDB4OTU4MSwgMCB9OworCQlzaG9ydCBpbnQgZWJjZGljX21tW10gPQorCQkgIHsgMHhDMkM5LCAweEM3ODUsIDB4OTVDNCwgMHg4OTgxLCAweDk1RTIsIDB4QThFMiwgMCB9OworCQlpbnQgdXNlX2ViY2RpYyAoaW50IGkpIHsKKwkJICByZXR1cm4gZWJjZGljX21tW2ldICsgZWJjZGljX2lpW2ldOworCQl9CisJCWV4dGVybiBpbnQgZm9vOworCitpbnQKK21haW4gKCkKK3sKK3JldHVybiB1c2VfYXNjaWkgKGZvbykgPT0gdXNlX2ViY2RpYyAoZm9vKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBpZiBncmVwIEJJR2VuRGlhblN5UyBjb25mdGVzdC4kYWNfb2JqZXh0ID4vZGV2L251bGw7IHRoZW4KKwkgICAgICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKKwkgICAgZmkKKwkgICAgaWYgZ3JlcCBMaVRUbGVFbkRpYW4gY29uZnRlc3QuJGFjX29iamV4dCA+L2Rldi9udWxsIDsgdGhlbgorCSAgICAgIGlmIHRlc3QgIiRhY19jdl9jX2JpZ2VuZGlhbiIgPSB1bmtub3duOyB0aGVuCisJCWFjX2N2X2NfYmlnZW5kaWFuPW5vCisJICAgICAgZWxzZQorCQkjIGZpbmRpbmcgYm90aCBzdHJpbmdzIGlzIHVubGlrZWx5IHRvIGhhcHBlbiwgYnV0IHdobyBrbm93cz8KKwkJYWNfY3ZfY19iaWdlbmRpYW49dW5rbm93bgorCSAgICAgIGZpCisJICAgIGZpCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKKworCSAgICAgLyogQXJlIHdlIGxpdHRsZSBvciBiaWcgZW5kaWFuPyAgRnJvbSBIYXJiaXNvbiZTdGVlbGUuICAqLworCSAgICAgdW5pb24KKwkgICAgIHsKKwkgICAgICAgbG9uZyBpbnQgbDsKKwkgICAgICAgY2hhciBjW3NpemVvZiAobG9uZyBpbnQpXTsKKwkgICAgIH0gdTsKKwkgICAgIHUubCA9IDE7CisJICAgICByZXR1cm4gdS5jW3NpemVvZiAobG9uZyBpbnQpIC0gMV0gPT0gMTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfY19iaWdlbmRpYW49bm8KK2Vsc2UKKyAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworICAgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX2JpZ2VuZGlhbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2NfYmlnZW5kaWFuIiA+JjY7IH0KKyBjYXNlICRhY19jdl9jX2JpZ2VuZGlhbiBpbiAjKAorICAgeWVzKQorICAgICAkYXNfZWNobyAiI2RlZmluZSBXT1JEU19CSUdFTkRJQU4gMSIgPj5jb25mZGVmcy5oCis7OyAjKAorICAgbm8pCisgICAgICA7OyAjKAorICAgdW5pdmVyc2FsKQorCiskYXNfZWNobyAiI2RlZmluZSBBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgOzsgIygKKyAgICopCisgICAgIGFzX2ZuX2Vycm9yICQ/ICJ1bmtub3duIGVuZGlhbm5lc3MKKyBwcmVzZXR0aW5nIGFjX2N2X2NfYmlnZW5kaWFuPW5vIChvciB5ZXMpIHdpbGwgaGVscCIgIiRMSU5FTk8iIDUgIDs7CisgZXNhYworCisKKyAgIGlmIHRlc3QgIngkSEFWRV9DUFVfSTM4NiIgPSAieHllcyI7IHRoZW4KKyAgSEFWRV9DUFVfSTM4Nl9UUlVFPQorICBIQVZFX0NQVV9JMzg2X0ZBTFNFPScjJworZWxzZQorICBIQVZFX0NQVV9JMzg2X1RSVUU9JyMnCisgIEhBVkVfQ1BVX0kzODZfRkFMU0U9CitmaQorCisgICBpZiB0ZXN0ICJ4JEhBVkVfQ1BVX1BQQyIgPSAieHllcyI7IHRoZW4KKyAgSEFWRV9DUFVfUFBDX1RSVUU9CisgIEhBVkVfQ1BVX1BQQ19GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9DUFVfUFBDX1RSVUU9JyMnCisgIEhBVkVfQ1BVX1BQQ19GQUxTRT0KK2ZpCisKKyAgIGlmIHRlc3QgIngkSEFWRV9DUFVfUFBDNjQiID0gInh5ZXMiOyB0aGVuCisgIEhBVkVfQ1BVX1BQQzY0X1RSVUU9CisgIEhBVkVfQ1BVX1BQQzY0X0ZBTFNFPScjJworZWxzZQorICBIQVZFX0NQVV9QUEM2NF9UUlVFPScjJworICBIQVZFX0NQVV9QUEM2NF9GQUxTRT0KK2ZpCisKKyAgIGlmIHRlc3QgIngkSEFWRV9DUFVfQUxQSEEiID0gInh5ZXMiOyB0aGVuCisgIEhBVkVfQ1BVX0FMUEhBX1RSVUU9CisgIEhBVkVfQ1BVX0FMUEhBX0ZBTFNFPScjJworZWxzZQorICBIQVZFX0NQVV9BTFBIQV9UUlVFPScjJworICBIQVZFX0NQVV9BTFBIQV9GQUxTRT0KK2ZpCisKKyAgIGlmIHRlc3QgIngkSEFWRV9DUFVfQVJNIiA9ICJ4eWVzIjsgdGhlbgorICBIQVZFX0NQVV9BUk1fVFJVRT0KKyAgSEFWRV9DUFVfQVJNX0ZBTFNFPScjJworZWxzZQorICBIQVZFX0NQVV9BUk1fVFJVRT0nIycKKyAgSEFWRV9DUFVfQVJNX0ZBTFNFPQorZmkKKworICAgaWYgdGVzdCAieCRIQVZFX0NQVV9TUEFSQyIgPSAieHllcyI7IHRoZW4KKyAgSEFWRV9DUFVfU1BBUkNfVFJVRT0KKyAgSEFWRV9DUFVfU1BBUkNfRkFMU0U9JyMnCitlbHNlCisgIEhBVkVfQ1BVX1NQQVJDX1RSVUU9JyMnCisgIEhBVkVfQ1BVX1NQQVJDX0ZBTFNFPQorZmkKKworICAgaWYgdGVzdCAieCRIQVZFX0NQVV9IUFBBIiA9ICJ4eWVzIjsgdGhlbgorICBIQVZFX0NQVV9IUFBBX1RSVUU9CisgIEhBVkVfQ1BVX0hQUEFfRkFMU0U9JyMnCitlbHNlCisgIEhBVkVfQ1BVX0hQUEFfVFJVRT0nIycKKyAgSEFWRV9DUFVfSFBQQV9GQUxTRT0KK2ZpCisKKyAgIGlmIHRlc3QgIngkSEFWRV9DUFVfTUlQUyIgPSAieHllcyI7IHRoZW4KKyAgSEFWRV9DUFVfTUlQU19UUlVFPQorICBIQVZFX0NQVV9NSVBTX0ZBTFNFPScjJworZWxzZQorICBIQVZFX0NQVV9NSVBTX1RSVUU9JyMnCisgIEhBVkVfQ1BVX01JUFNfRkFMU0U9CitmaQorCisgICBpZiB0ZXN0ICJ4JEhBVkVfQ1BVX1MzOTAiID0gInh5ZXMiOyB0aGVuCisgIEhBVkVfQ1BVX1MzOTBfVFJVRT0KKyAgSEFWRV9DUFVfUzM5MF9GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9DUFVfUzM5MF9UUlVFPScjJworICBIQVZFX0NQVV9TMzkwX0ZBTFNFPQorZmkKKworICAgaWYgdGVzdCAieCRIQVZFX0NQVV9JQTY0IiA9ICJ4eWVzIjsgdGhlbgorICBIQVZFX0NQVV9JQTY0X1RSVUU9CisgIEhBVkVfQ1BVX0lBNjRfRkFMU0U9JyMnCitlbHNlCisgIEhBVkVfQ1BVX0lBNjRfVFJVRT0nIycKKyAgSEFWRV9DUFVfSUE2NF9GQUxTRT0KK2ZpCisKKyAgIGlmIHRlc3QgIngkSEFWRV9DUFVfTTY4SyIgPSAieHllcyI7IHRoZW4KKyAgSEFWRV9DUFVfTTY4S19UUlVFPQorICBIQVZFX0NQVV9NNjhLX0ZBTFNFPScjJworZWxzZQorICBIQVZFX0NQVV9NNjhLX1RSVUU9JyMnCisgIEhBVkVfQ1BVX002OEtfRkFMU0U9CitmaQorCisgICBpZiB0ZXN0ICJ4JEhBVkVfQ1BVX1g4Nl82NCIgPSAieHllcyI7IHRoZW4KKyAgSEFWRV9DUFVfWDg2XzY0X1RSVUU9CisgIEhBVkVfQ1BVX1g4Nl82NF9GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9DUFVfWDg2XzY0X1RSVUU9JyMnCisgIEhBVkVfQ1BVX1g4Nl82NF9GQUxTRT0KK2ZpCisKKyAgIGlmIHRlc3QgIngkSEFWRV9DUFVfQ1JJUyIgPSAieHllcyI7IHRoZW4KKyAgSEFWRV9DUFVfQ1JJU19UUlVFPQorICBIQVZFX0NQVV9DUklTX0ZBTFNFPScjJworZWxzZQorICBIQVZFX0NQVV9DUklTX1RSVUU9JyMnCisgIEhBVkVfQ1BVX0NSSVNfRkFMU0U9CitmaQorCisgICBpZiB0ZXN0ICJ4JEhBVkVfQ1BVX0NSSVNWMzIiID0gInh5ZXMiOyB0aGVuCisgIEhBVkVfQ1BVX0NSSVNWMzJfVFJVRT0KKyAgSEFWRV9DUFVfQ1JJU1YzMl9GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9DUFVfQ1JJU1YzMl9UUlVFPScjJworICBIQVZFX0NQVV9DUklTVjMyX0ZBTFNFPQorZmkKKworCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSE9TVF9DUFUgIiRob3N0X2NwdSIKK19BQ0VPRgorCisKK0hPU1RfQ1BVPSRob3N0X2NwdQorCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzIHdvcmtzIGNvcnJlY3RseSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiB1bmFsaWduZWQgbWVtb3J5IGFjY2VzcyB3b3JrcyBjb3JyZWN0bHkuLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCB4IiRhc19jdl91bmFsaWduZWRfYWNjZXNzIiA9IHggOyB0aGVuCisgICAgY2FzZSAkaG9zdCBpbgorICAgICAgYWxwaGEqfGFybSp8aHAqfG1pcHMqfHNoKnxzcGFyYyp8aWE2NCopCisgICAgICAgICRhc19lY2hvX24gIihibGFja2xpc3RlZCkgIiA+JjYKKyAgICAgICAgYXNfY3ZfdW5hbGlnbmVkX2FjY2Vzcz1ubworCTs7CisgICAgICBpPzg2Knx4ODZfNjQqfGFtZDY0Knxwb3dlcnBjKnxtNjhrKnxjcmlzKikKKyAgICAgICAgJGFzX2VjaG9fbiAiKHdoaXRlbGlzdGVkKSAiID4mNgorICAgICAgICBhc19jdl91bmFsaWduZWRfYWNjZXNzPXllcworCTs7CisgICAgZXNhYworICBlbHNlCisgICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKyAgZmkKKyAgaWYgdGVzdCB4IiRhc19jdl91bmFsaWduZWRfYWNjZXNzIiA9IHggOyB0aGVuCisgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgcnVuIHRlc3QgcHJvZ3JhbSB3aGlsZSBjcm9zcyBjb21waWxpbmcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1IDsgfQorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgY2hhciBhcnJheVtdID0gIkFCQ0RFRkdIIjsKKyAgdW5zaWduZWQgaW50IGlhcnJheVsyXTsKKyAgbWVtY3B5KGlhcnJheSxhcnJheSw4KTsKKyNkZWZpbmUgR0VUKHgpICgqKHVuc2lnbmVkIGludCAqKSgoY2hhciAqKWlhcnJheSArICh4KSkpCisgIGlmKEdFVCgwKSAhPSAweDQxNDI0MzQ0ICYmIEdFVCgwKSAhPSAweDQ0NDM0MjQxKSByZXR1cm4gMTsKKyAgaWYoR0VUKDEpICE9IDB4NDI0MzQ0NDUgJiYgR0VUKDEpICE9IDB4NDU0NDQzNDIpIHJldHVybiAxOworICBpZihHRVQoMikgIT0gMHg0MzQ0NDU0NiAmJiBHRVQoMikgIT0gMHg0NjQ1NDQ0MykgcmV0dXJuIDE7CisgIGlmKEdFVCgzKSAhPSAweDQ0NDU0NjQ3ICYmIEdFVCgzKSAhPSAweDQ3NDY0NTQ0KSByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGFzX2N2X3VuYWxpZ25lZF9hY2Nlc3M9InllcyIKK2Vsc2UKKyAgYXNfY3ZfdW5hbGlnbmVkX2FjY2Vzcz0ibm8iCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworICBmaQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFzX2N2X3VuYWxpZ25lZF9hY2Nlc3MiID4mNQorJGFzX2VjaG8gIiRhc19jdl91bmFsaWduZWRfYWNjZXNzIiA+JjY7IH0KKyAgaWYgdGVzdCAiJGFzX2N2X3VuYWxpZ25lZF9hY2Nlc3MiID0gInllcyI7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1VOQUxJR05FRF9BQ0NFU1MgMQorX0FDRU9GCisKKyAgZmkKKworaWYgdGVzdCB4JHthc19jdl91bmFsaWduZWRfYWNjZXNzfSA9IHh5ZXMgOyB0aGVuCisgIEdTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FPSIjZGVmaW5lIEdTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1MgMSIKK2Vsc2UKKyAgR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTU19ERUZJTkU9IiNkZWZpbmUgR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTUyAwIgorZmkKKworCisKKworCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICByaGFwc29keSopCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgR1NUX0VYVFJBX01PRFVMRV9TVUZGSVggIi5keWxpYiIKK19BQ0VPRgorCisgICAgICA7OworICAgIGRhcndpbiopCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgR1NUX0VYVFJBX01PRFVMRV9TVUZGSVggIi5keWxpYiIKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9PU1ggMQorX0FDRU9GCisKKyAgICAgIDs7CisgICAgY3lnd2luKikKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBHU1RfSEFWRV9VTlNBRkVfRk9SSyAxCitfQUNFT0YKKworICAgICAgOzsKKyAgICBtaW5ndyogfCBtc3ZjKiB8IG1rcyopCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9XSU4zMiAxCitfQUNFT0YKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworIHJldHVybiBfX01TVkNSVF9WRVJTSU9OX187CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgICAgICAgICAgICNpZiBfX01TVkNSVF9WRVJTSU9OX18gPCAweDA2MDEKKyAgICAgICAgICAgICNlcnJvciAiTVNWQ1JUIHRvbyBvbGQiCisgICAgICAgICAgICAjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogTVNWQ1JUIHZlcnNpb24gbG9va3Mgb2siID4mNQorJGFzX2VjaG8gIiRhc19tZTogTVNWQ1JUIHZlcnNpb24gbG9va3Mgb2siID4mNjt9CisKK2Vsc2UKKworICAgICAgICAgICAgYXNfZm5fZXJyb3IgJD8gIk1TVkNSVCB2ZXJzaW9uIHRvbyBvbGQsIG5lZWQgYXQgbGVhc3QgV2luWFAgU1AyIiAiJExJTkVOTyIgNQorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2Vsc2UKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFNldHRpbmcgTVNWQ1JUIHZlcnNpb24gdG8gMHgwNjAxIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFNldHRpbmcgTVNWQ1JUIHZlcnNpb24gdG8gMHgwNjAxIiA+JjY7fQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIF9fTVNWQ1JUX1ZFUlNJT05fXyAweDA2MDEKK19BQ0VPRgorCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgIDs7CisgICAgICopCisgICAgICA7OworICBlc2FjCisKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGFyZ2VmaWxlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2xhcmdlZmlsZStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2xhcmdlZmlsZTsKK2ZpCisKK2lmIHRlc3QgIiRlbmFibGVfbGFyZ2VmaWxlIiAhPSBubzsgdGhlbgorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNwZWNpYWwgQyBjb21waWxlciBvcHRpb25zIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHNwZWNpYWwgQyBjb21waWxlciBvcHRpb25zIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3Zfc3lzX2xhcmdlZmlsZV9DQytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2N2X3N5c19sYXJnZWZpbGVfQ0M9bm8KKyAgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgICAgYWNfc2F2ZV9DQz0kQ0MKKyAgICAgICB3aGlsZSA6OyBkbworCSAjIElSSVggNi4yIGFuZCBsYXRlciBkbyBub3Qgc3VwcG9ydCBsYXJnZSBmaWxlcyBieSBkZWZhdWx0LAorCSAjIHNvIHVzZSB0aGUgQyBjb21waWxlcidzIC1uMzIgb3B0aW9uIGlmIHRoYXQgaGVscHMuCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAvKiBDaGVjayB0aGF0IG9mZl90IGNhbiByZXByZXNlbnQgMioqNjMgLSAxIGNvcnJlY3RseS4KKyAgICBXZSBjYW4ndCBzaW1wbHkgZGVmaW5lIExBUkdFX09GRl9UIHRvIGJlIDkyMjMzNzIwMzY4NTQ3NzU4MDcsCisgICAgc2luY2Ugc29tZSBDKysgY29tcGlsZXJzIG1hc3F1ZXJhZGluZyBhcyBDIGNvbXBpbGVycworICAgIGluY29ycmVjdGx5IHJlamVjdCA5MjIzMzcyMDM2ODU0Nzc1ODA3LiAgKi8KKyNkZWZpbmUgTEFSR0VfT0ZGX1QgKCgob2ZmX3QpIDEgPDwgNjIpIC0gMSArICgob2ZmX3QpIDEgPDwgNjIpKQorICBpbnQgb2ZmX3RfaXNfbGFyZ2VbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEKKwkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQorCQkgICAgICA/IDEgOiAtMV07CitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCisJIGlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisJIENDPSIkQ0MgLW4zMiIKKwkgaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9zeXNfbGFyZ2VmaWxlX0NDPScgLW4zMic7IGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAorCSBicmVhaworICAgICAgIGRvbmUKKyAgICAgICBDQz0kYWNfc2F2ZV9DQworICAgICAgIHJtIC1mIGNvbmZ0ZXN0LiRhY19leHQKKyAgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3N5c19sYXJnZWZpbGVfQ0MiID4mNjsgfQorICBpZiB0ZXN0ICIkYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQyIgIT0gbm87IHRoZW4KKyAgICBDQz0kQ0MkYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQworICBmaQorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIF9GSUxFX09GRlNFVF9CSVRTIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIF9GSUxFX09GRlNFVF9CSVRTIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICB3aGlsZSA6OyBkbworICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgLyogQ2hlY2sgdGhhdCBvZmZfdCBjYW4gcmVwcmVzZW50IDIqKjYzIC0gMSBjb3JyZWN0bHkuCisgICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcyMDM2ODU0Nzc1ODA3LAorICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMKKyAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3NTgwNy4gICovCisjZGVmaW5lIExBUkdFX09GRl9UICgoKG9mZl90KSAxIDw8IDYyKSAtIDEgKyAoKG9mZl90KSAxIDw8IDYyKSkKKyAgaW50IG9mZl90X2lzX2xhcmdlWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCisJCSAgICAgICAmJiBMQVJHRV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0gMSkKKwkJICAgICAgPyAxIDogLTFdOworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cz1ubzsgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyA2NAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2VudCAyKio2MyAtIDEgY29ycmVjdGx5LgorICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKKyAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCisgICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLworI2RlZmluZSBMQVJHRV9PRkZfVCAoKChvZmZfdCkgMSA8PCA2MikgLSAxICsgKChvZmZfdCkgMSA8PCA2MikpCisgIGludCBvZmZfdF9pc19sYXJnZVsoTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQorCQkgICAgICAgJiYgTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjQ3ID09IDEpCisJCSAgICAgID8gMSA6IC0xXTsKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHM9NjQ7IGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzPXVua25vd24KKyAgYnJlYWsKK2RvbmUKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMiID4mNjsgfQorY2FzZSAkYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMgaW4gIygKKyAgbm8gfCB1bmtub3duKSA7OworICAqKQorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyAkYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMKK19BQ0VPRgorOzsKK2VzYWMKK3JtIC1yZiBjb25mdGVzdCoKKyAgaWYgdGVzdCAkYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMgPSB1bmtub3duOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgX0xBUkdFX0ZJTEVTIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIF9MQVJHRV9GSUxFUyB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3N5c19sYXJnZV9maWxlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIHdoaWxlIDo7IGRvCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAvKiBDaGVjayB0aGF0IG9mZl90IGNhbiByZXByZXNlbnQgMioqNjMgLSAxIGNvcnJlY3RseS4KKyAgICBXZSBjYW4ndCBzaW1wbHkgZGVmaW5lIExBUkdFX09GRl9UIHRvIGJlIDkyMjMzNzIwMzY4NTQ3NzU4MDcsCisgICAgc2luY2Ugc29tZSBDKysgY29tcGlsZXJzIG1hc3F1ZXJhZGluZyBhcyBDIGNvbXBpbGVycworICAgIGluY29ycmVjdGx5IHJlamVjdCA5MjIzMzcyMDM2ODU0Nzc1ODA3LiAgKi8KKyNkZWZpbmUgTEFSR0VfT0ZGX1QgKCgob2ZmX3QpIDEgPDwgNjIpIC0gMSArICgob2ZmX3QpIDEgPDwgNjIpKQorICBpbnQgb2ZmX3RfaXNfbGFyZ2VbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEKKwkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQorCQkgICAgICA/IDEgOiAtMV07CitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3N5c19sYXJnZV9maWxlcz1ubzsgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2RlZmluZSBfTEFSR0VfRklMRVMgMQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2VudCAyKio2MyAtIDEgY29ycmVjdGx5LgorICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKKyAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCisgICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLworI2RlZmluZSBMQVJHRV9PRkZfVCAoKChvZmZfdCkgMSA8PCA2MikgLSAxICsgKChvZmZfdCkgMSA8PCA2MikpCisgIGludCBvZmZfdF9pc19sYXJnZVsoTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQorCQkgICAgICAgJiYgTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjQ3ID09IDEpCisJCSAgICAgID8gMSA6IC0xXTsKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzPTE7IGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGFjX2N2X3N5c19sYXJnZV9maWxlcz11bmtub3duCisgIGJyZWFrCitkb25lCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zeXNfbGFyZ2VfZmlsZXMiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zeXNfbGFyZ2VfZmlsZXMiID4mNjsgfQorY2FzZSAkYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzIGluICMoCisgIG5vIHwgdW5rbm93bikgOzsKKyAgKikKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgX0xBUkdFX0ZJTEVTICRhY19jdl9zeXNfbGFyZ2VfZmlsZXMKK19BQ0VPRgorOzsKK2VzYWMKK3JtIC1yZiBjb25mdGVzdCoKKyAgZmkKK2ZpCisKKworCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1nY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Z2NjOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Z2NjIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQ0MiOyB0aGVuCisgIGFjX2N0X0NDPSRDQworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZ2NjOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9ImdjYyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQworaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9DQyIgPSB4OyB0aGVuCisgICAgQ0M9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBDQz0kYWNfY3RfQ0MKKyAgZmkKK2Vsc2UKKyAgQ0M9IiRhY19jdl9wcm9nX0NDIgorZmkKKworaWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Y2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Y2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1jYyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICBmaQorZmkKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgY2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBhY19wcm9nX3JlamVjdGVkPW5vCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBpZiB0ZXN0ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA9ICIvdXNyL3VjYi9jYyI7IHRoZW4KKyAgICAgICBhY19wcm9nX3JlamVjdGVkPXllcworICAgICAgIGNvbnRpbnVlCisgICAgIGZpCisgICAgYWNfY3ZfcHJvZ19DQz0iY2MiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2lmIHRlc3QgJGFjX3Byb2dfcmVqZWN0ZWQgPSB5ZXM7IHRoZW4KKyAgIyBXZSBmb3VuZCBhIGJvZ29uIGluIHRoZSBwYXRoLCBzbyBtYWtlIHN1cmUgd2UgbmV2ZXIgdXNlIGl0LgorICBzZXQgZHVtbXkgJGFjX2N2X3Byb2dfQ0MKKyAgc2hpZnQKKyAgaWYgdGVzdCAkIyAhPSAwOyB0aGVuCisgICAgIyBXZSBjaG9zZSBhIGRpZmZlcmVudCBjb21waWxlciBmcm9tIHRoZSBib2d1cyBvbmUuCisgICAgIyBIb3dldmVyLCBpdCBoYXMgdGhlIHNhbWUgYmFzZW5hbWUsIHNvIHRoZSBib2dvbiB3aWxsIGJlIGNob3NlbgorICAgICMgZmlyc3QgaWYgd2Ugc2V0IENDIHRvIGp1c3QgdGhlIGJhc2VuYW1lOyB1c2UgdGhlIGZ1bGwgZmlsZSBuYW1lLgorICAgIHNoaWZ0CisgICAgYWNfY3ZfcHJvZ19DQz0iJGFzX2Rpci8kYWNfd29yZCR7MSsnICd9JEAiCisgIGZpCitmaQorZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICBmb3IgYWNfcHJvZyBpbiBjbC5leGUKKyAgZG8KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0NDPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgIHRlc3QgLW4gIiRDQyIgJiYgYnJlYWsKKyAgZG9uZQorZmkKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgYWNfY3RfQ0M9JENDCisgIGZvciBhY19wcm9nIGluIGNsLmV4ZQorZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKK2lmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0NDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJGFjX2N0X0NDIiAmJiBicmVhaworZG9uZQorCisgIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgorICAgIENDPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQ0M9JGFjX2N0X0NDCisgIGZpCitmaQorCitmaQorCisKK3Rlc3QgLXogIiRDQyIgJiYgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDUgOyB9CisKKyMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KKyRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIHZlcnNpb24iID4mNQorc2V0IFggJGFjX2NvbXBpbGUKK2FjX2NvbXBpbGVyPSQyCitmb3IgYWNfb3B0aW9uIGluIC0tdmVyc2lvbiAtdiAtViAtcXZlcnNpb247IGRvCisgIHsgeyBhY190cnk9IiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgc2VkICcxMGFcCisuLi4gcmVzdCBvZiBzdGRlcnIgb3V0cHV0IGRlbGV0ZWQgLi4uCisgICAgICAgICAxMHEnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorZG9uZQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfY19jb21waWxlcl9nbnUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworI2lmbmRlZiBfX0dOVUNfXworICAgICAgIGNob2tlIG1lCisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2NvbXBpbGVyX2dudT15ZXMKK2Vsc2UKKyAgYWNfY29tcGlsZXJfZ251PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CithY19jdl9jX2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNjsgfQoraWYgdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCisgIEdDQz15ZXMKK2Vsc2UKKyAgR0NDPQorZmkKK2FjX3Rlc3RfQ0ZMQUdTPSR7Q0ZMQUdTK3NldH0KK2FjX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfZytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX3NhdmVfY193ZXJyb3JfZmxhZz0kYWNfY193ZXJyb3JfZmxhZworICAgYWNfY193ZXJyb3JfZmxhZz15ZXMKKyAgIGFjX2N2X3Byb2dfY2NfZz1ubworICAgQ0ZMQUdTPSItZyIKKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2NjX2c9eWVzCitlbHNlCisgIENGTEFHUz0iIgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCisJIENGTEFHUz0iLWciCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2NjX2c9eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBhY19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfZyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfZyIgPiY2OyB9CitpZiB0ZXN0ICIkYWNfdGVzdF9DRkxBR1MiID0gc2V0OyB0aGVuCisgIENGTEFHUz0kYWNfc2F2ZV9DRkxBR1MKK2VsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jY19nID0geWVzOyB0aGVuCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgQ0ZMQUdTPSItZyAtTzIiCisgIGVsc2UKKyAgICBDRkxBR1M9Ii1nIgorICBmaQorZWxzZQorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIENGTEFHUz0iLU8yIgorICBlbHNlCisgICAgQ0ZMQUdTPQorICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19jODkrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jdl9wcm9nX2NjX2M4OT1ubworYWNfc2F2ZV9DQz0kQ0MKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisvKiBNb3N0IG9mIHRoZSBmb2xsb3dpbmcgdGVzdHMgYXJlIHN0b2xlbiBmcm9tIFJDUyA1LjcncyBzcmMvY29uZi5zaC4gICovCitzdHJ1Y3QgYnVmIHsgaW50IHg7IH07CitGSUxFICogKCpyY3NvcGVuKSAoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpOworc3RhdGljIGNoYXIgKmUgKHAsIGkpCisgICAgIGNoYXIgKipwOworICAgICBpbnQgaTsKK3sKKyAgcmV0dXJuIHBbaV07Cit9CitzdGF0aWMgY2hhciAqZiAoY2hhciAqICgqZykgKGNoYXIgKiosIGludCksIGNoYXIgKipwLCAuLi4pCit7CisgIGNoYXIgKnM7CisgIHZhX2xpc3QgdjsKKyAgdmFfc3RhcnQgKHYscCk7CisgIHMgPSBnIChwLCB2YV9hcmcgKHYsaW50KSk7CisgIHZhX2VuZCAodik7CisgIHJldHVybiBzOworfQorCisvKiBPU0YgNC4wIENvbXBhcSBjYyBpcyBzb21lIHNvcnQgb2YgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdC4gIEl0IGhhcworICAgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgc3R1ZmYsIGJ1dCBub3QgJ1x4SEgnIGhleCBjaGFyYWN0ZXIgY29uc3RhbnRzLgorICAgVGhlc2UgZG9uJ3QgcHJvdm9rZSBhbiBlcnJvciB1bmZvcnR1bmF0ZWx5LCBpbnN0ZWFkIGFyZSBzaWxlbnRseSB0cmVhdGVkCisgICBhcyAneCcuICBUaGUgZm9sbG93aW5nIGluZHVjZXMgYW4gZXJyb3IsIHVudGlsIC1zdGQgaXMgYWRkZWQgdG8gZ2V0CisgICBwcm9wZXIgQU5TSSBtb2RlLiAgQ3VyaW91c2x5ICdceDAwJyE9J3gnIGFsd2F5cyBjb21lcyBvdXQgdHJ1ZSwgZm9yIGFuCisgICBhcnJheSBzaXplIGF0IGxlYXN0LiAgSXQncyBuZWNlc3NhcnkgdG8gd3JpdGUgJ1x4MDAnPT0wIHRvIGdldCBzb21ldGhpbmcKKyAgIHRoYXQncyB0cnVlIG9ubHkgd2l0aCAtc3RkLiAgKi8KK2ludCBvc2Y0X2NjX2FycmF5IFsnXHgwMCcgPT0gMCA/IDEgOiAtMV07CisKKy8qIElCTSBDIDYgZm9yIEFJWCBpcyBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LCBidXQgaXQgcmVwbGFjZXMgbWFjcm8gcGFyYW1ldGVycworICAgaW5zaWRlIHN0cmluZ3MgYW5kIGNoYXJhY3RlciBjb25zdGFudHMuICAqLworI2RlZmluZSBGT08oeCkgJ3gnCitpbnQgeGxjNl9jY19hcnJheVtGT08oYSkgPT0gJ3gnID8gMSA6IC0xXTsKKworaW50IHRlc3QgKGludCBpLCBkb3VibGUgeCk7CitzdHJ1Y3QgczEge2ludCAoKmYpIChpbnQgYSk7fTsKK3N0cnVjdCBzMiB7aW50ICgqZikgKGRvdWJsZSBhKTt9OworaW50IHBhaXJuYW1lcyAoaW50LCBjaGFyICoqLCBGSUxFICooKikoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpLCBpbnQsIGludCk7CitpbnQgYXJnYzsKK2NoYXIgKiphcmd2OworaW50CittYWluICgpCit7CityZXR1cm4gZiAoZSwgYXJndiwgMCkgIT0gYXJndlswXSAgfHwgIGYgKGUsIGFyZ3YsIDEpICE9IGFyZ3ZbMV07CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2ZvciBhY19hcmcgaW4gJycgLXFsYW5nbHZsPWV4dGM4OSAtcWxhbmdsdmw9YW5zaSAtc3RkIFwKKwktQWUgIi1BYSAtRF9IUFVYX1NPVVJDRSIgIi1YYyAtRF9fRVhURU5TSU9OU19fIgorZG8KKyAgQ0M9IiRhY19zYXZlX0NDICRhY19hcmciCisgIGlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19jODk9JGFjX2FyZworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0gInhubyIgJiYgYnJlYWsKK2RvbmUKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQKK0NDPSRhY19zYXZlX0NDCisKK2ZpCisjIEFDX0NBQ0hFX1ZBTAorY2FzZSAieCRhY19jdl9wcm9nX2NjX2M4OSIgaW4KKyAgeCkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm9uZSBuZWVkZWQiID4mNQorJGFzX2VjaG8gIm5vbmUgbmVlZGVkIiA+JjY7IH0gOzsKKyAgeG5vKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1bnN1cHBvcnRlZCIgPiY1CiskYXNfZWNobyAidW5zdXBwb3J0ZWQiID4mNjsgfSA7OworICAqKQorICAgIENDPSIkQ0MgJGFjX2N2X3Byb2dfY2NfYzg5IgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19jODkiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX2M4OSIgPiY2OyB9IDs7Citlc2FjCitpZiB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSB4bm87IHRoZW4gOgorCitmaQorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK2RlcGNjPSIkQ0MiICAgYW1fY29tcGlsZXJfbGlzdD0KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KKyAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAorICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgorICAjIGluc3RhbmNlIGl0IHdhcyByZXBvcnRlZCB0aGF0IG9uIEhQLVVYIHRoZSBnY2MgdGVzdCB3aWxsIGVuZCB1cAorICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgYEQnIC0tIGJlY2F1c2UgYC1NRCcgbWVhbnMgYHB1dCB0aGUgb3V0cHV0CisgICMgaW4gRCcuCisgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorICAjIENvcHkgZGVwY29tcCB0byBzdWJkaXIgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd29uJ3QgZmluZCBpdCBpZiB3ZSdyZQorICAjIHVzaW5nIGEgcmVsYXRpdmUgZGlyZWN0b3J5LgorICBjcCAiJGFtX2RlcGNvbXAiIGNvbmZ0ZXN0LmRpcgorICBjZCBjb25mdGVzdC5kaXIKKyAgIyBXZSB3aWxsIGJ1aWxkIG9iamVjdHMgYW5kIGRlcGVuZGVuY2llcyBpbiBhIHN1YmRpcmVjdG9yeSBiZWNhdXNlCisgICMgaXQgaGVscHMgdG8gZGV0ZWN0IGluYXBwbGljYWJsZSBkZXBlbmRlbmN5IG1vZGVzLiAgRm9yIGluc3RhbmNlCisgICMgYm90aCBUcnU2NCdzIGNjIGFuZCBJQ0Mgc3VwcG9ydCAtTUQgdG8gb3V0cHV0IGRlcGVuZGVuY2llcyBhcyBhCisgICMgc2lkZSBlZmZlY3Qgb2YgY29tcGlsYXRpb24sIGJ1dCBJQ0Mgd2lsbCBwdXQgdGhlIGRlcGVuZGVuY2llcyBpbgorICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGlsZSBUcnU2NCB3aWxsIHB1dCB0aGVtIGluIHRoZSBvYmplY3QKKyAgIyBkaXJlY3RvcnkuCisgIG1rZGlyIHN1YgorCisgIGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKKyAgaWYgdGVzdCAiJGFtX2NvbXBpbGVyX2xpc3QiID0gIiI7IHRoZW4KKyAgICAgYW1fY29tcGlsZXJfbGlzdD1gc2VkIC1uICdzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJyA8IC4vZGVwY29tcGAKKyAgZmkKKyAgYW1fX3VuaXZlcnNhbD1mYWxzZQorICBjYXNlICIgJGRlcGNjICIgaW4gIygKKyAgICAgKlwgLWFyY2hcICpcIC1hcmNoXCAqKSBhbV9fdW5pdmVyc2FsPXRydWUgOzsKKyAgICAgZXNhYworCisgIGZvciBkZXBtb2RlIGluICRhbV9jb21waWxlcl9saXN0OyBkbworICAgICMgU2V0dXAgYSBzb3VyY2Ugd2l0aCBtYW55IGRlcGVuZGVuY2llcywgYmVjYXVzZSBzb21lIGNvbXBpbGVycworICAgICMgbGlrZSB0byB3cmFwIGxhcmdlIGRlcGVuZGVuY3kgbGlzdHMgb24gY29sdW1uIDgwICh3aXRoIFwpLCBhbmQKKyAgICAjIHdlIHNob3VsZCBub3QgY2hvb3NlIGEgZGVwY29tcCBtb2RlIHdoaWNoIGlzIGNvbmZ1c2VkIGJ5IHRoaXMuCisgICAgIworICAgICMgV2UgbmVlZCB0byByZWNyZWF0ZSB0aGVzZSBmaWxlcyBmb3IgZWFjaCB0ZXN0LCBhcyB0aGUgY29tcGlsZXIgbWF5CisgICAgIyBvdmVyd3JpdGUgc29tZSBvZiB0aGVtIHdoZW4gdGVzdGluZyB3aXRoIG9ic2N1cmUgY29tbWFuZCBsaW5lcy4KKyAgICAjIFRoaXMgaGFwcGVucyBhdCBsZWFzdCB3aXRoIHRoZSBBSVggQyBjb21waWxlci4KKyAgICA6ID4gc3ViL2NvbmZ0ZXN0LmMKKyAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNjsgZG8KKyAgICAgIGVjaG8gJyNpbmNsdWRlICJjb25mdHN0JyRpJy5oIicgPj4gc3ViL2NvbmZ0ZXN0LmMKKyAgICAgICMgVXNpbmcgYDogPiBzdWIvY29uZnRzdCRpLmgnIGNyZWF0ZXMgb25seSBzdWIvY29uZnRzdDEuaCB3aXRoCisgICAgICAjIFNvbGFyaXMgOCdzIHsvdXNyLH0vYmluL3NoLgorICAgICAgdG91Y2ggc3ViL2NvbmZ0c3QkaS5oCisgICAgZG9uZQorICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKKworICAgICMgV2UgY2hlY2sgd2l0aCBgLWMnIGFuZCBgLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgorICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5CisgICAgIyBoYW5kbGUgYC1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuICBBbHNvLCBzb21lIEludGVsCisgICAgIyB2ZXJzaW9ucyBoYWQgdHJvdWJsZSB3aXRoIG91dHB1dCBpbiBzdWJkaXJzCisgICAgYW1fX29iaj1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICBhbV9fbWludXNfb2JqPSItbyAkYW1fX29iaiIKKyAgICBjYXNlICRkZXBtb2RlIGluCisgICAgZ2NjKQorICAgICAgIyBUaGlzIGRlcG1vZGUgY2F1c2VzIGEgY29tcGlsZXIgcmFjZSBpbiB1bml2ZXJzYWwgbW9kZS4KKyAgICAgIHRlc3QgIiRhbV9fdW5pdmVyc2FsIiA9IGZhbHNlIHx8IGNvbnRpbnVlCisgICAgICA7OworICAgIG5vc2lkZWVmZmVjdCkKKyAgICAgICMgYWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAorICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZAorICAgICAgaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgPSB4eWVzOyB0aGVuCisJY29udGludWUKKyAgICAgIGVsc2UKKwlicmVhaworICAgICAgZmkKKyAgICAgIDs7CisgICAgbXN2aXN1YWxjcHAgfCBtc3ZjbXN5cykKKyAgICAgICMgVGhpcyBjb21waWxlciB3b24ndCBncm9rIGAtYyAtbycsIGJ1dCBhbHNvLCB0aGUgbWludXNvIHRlc3QgaGFzCisgICAgICAjIG5vdCBydW4geWV0LiAgVGhlc2UgZGVwbW9kZXMgYXJlIGxhdGUgZW5vdWdoIGluIHRoZSBnYW1lLCBhbmQKKyAgICAgICMgc28gd2VhayB0aGF0IHRoZWlyIGZ1bmN0aW9uaW5nIHNob3VsZCBub3QgYmUgaW1wYWN0ZWQuCisgICAgICBhbV9fb2JqPWNvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgICBhbV9fbWludXNfb2JqPQorICAgICAgOzsKKyAgICBub25lKSBicmVhayA7OworICAgIGVzYWMKKyAgICBpZiBkZXBtb2RlPSRkZXBtb2RlIFwKKyAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PSRhbV9fb2JqIFwKKyAgICAgICBkZXBmaWxlPXN1Yi9jb25mdGVzdC5QbyB0bXBkZXBmaWxlPXN1Yi9jb25mdGVzdC5UUG8gXAorICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jICRhbV9fbWludXNfb2JqIHN1Yi9jb25mdGVzdC5jIFwKKyAgICAgICAgID4vZGV2L251bGwgMj5jb25mdGVzdC5lcnIgJiYKKyAgICAgICBncmVwIHN1Yi9jb25mdHN0MS5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDYuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgJGFtX19vYmogc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKKyAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCisgICAgICAjIHRoYXQgc2F5cyBhbiBvcHRpb24gd2FzIGlnbm9yZWQgb3Igbm90IHN1cHBvcnRlZC4KKyAgICAgICMgV2hlbiBnaXZlbiAtTVAsIGljYyA3LjAgYW5kIDcuMSBjb21wbGFpbiB0aHVzbHk6CisgICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgd2FybmluZzogaWdub3Jpbmcgb3B0aW9uICctTSc7IG5vIGFyZ3VtZW50IHJlcXVpcmVkCisgICAgICAjIFRoZSBkaWFnbm9zaXMgY2hhbmdlZCBpbiBpY2MgOC4wOgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHJlbWFyazogb3B0aW9uICctTVAnIG5vdCBzdXBwb3J0ZWQKKyAgICAgIGlmIChncmVwICdpZ25vcmluZyBvcHRpb24nIGNvbmZ0ZXN0LmVyciB8fAorICAgICAgICAgIGdyZXAgJ25vdCBzdXBwb3J0ZWQnIGNvbmZ0ZXN0LmVycikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgICAgICAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9JGRlcG1vZGUKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorCisgIGNkIC4uCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKK2Vsc2UKKyAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNQorJGFzX2VjaG8gIiRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2OyB9CitDQ0RFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUKKworIGlmCisgIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCisgICYmIHRlc3QgIiRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzOyB0aGVuCisgIGFtX19mYXN0ZGVwQ0NfVFJVRT0KKyAgYW1fX2Zhc3RkZXBDQ19GQUxTRT0nIycKK2Vsc2UKKyAgYW1fX2Zhc3RkZXBDQ19UUlVFPScjJworICBhbV9fZmFzdGRlcENDX0ZBTFNFPQorZmkKKworCisgICBjYXNlICRhY19jdl9wcm9nX2NjX3N0ZGMgaW4gIygKKyAgbm8pIDoKKyAgICBhY19jdl9wcm9nX2NjX2M5OT1ubzsgYWNfY3ZfcHJvZ19jY19jODk9bm8gOzsgIygKKyAgKikgOgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDOTkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDOTkuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19jOTkrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jdl9wcm9nX2NjX2M5OT1ubworYWNfc2F2ZV9DQz0kQ0MKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisvLyBDaGVjayB2YXJhcmdzIG1hY3Jvcy4gIFRoZXNlIGV4YW1wbGVzIGFyZSB0YWtlbiBmcm9tIEM5OSA2LjEwLjMuNS4KKyNkZWZpbmUgZGVidWcoLi4uKSBmcHJpbnRmIChzdGRlcnIsIF9fVkFfQVJHU19fKQorI2RlZmluZSBzaG93bGlzdCguLi4pIHB1dHMgKCNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgcmVwb3J0KHRlc3QsLi4uKSAoKHRlc3QpID8gcHV0cyAoI3Rlc3QpIDogcHJpbnRmIChfX1ZBX0FSR1NfXykpCitzdGF0aWMgdm9pZAordGVzdF92YXJhcmdzX21hY3JvcyAodm9pZCkKK3sKKyAgaW50IHggPSAxMjM0OworICBpbnQgeSA9IDU2Nzg7CisgIGRlYnVnICgiRmxhZyIpOworICBkZWJ1ZyAoIlggPSAlZFxuIiwgeCk7CisgIHNob3dsaXN0IChUaGUgZmlyc3QsIHNlY29uZCwgYW5kIHRoaXJkIGl0ZW1zLik7CisgIHJlcG9ydCAoeD55LCAieCBpcyAlZCBidXQgeSBpcyAlZCIsIHgsIHkpOworfQorCisvLyBDaGVjayBsb25nIGxvbmcgdHlwZXMuCisjZGVmaW5lIEJJRzY0IDE4NDQ2NzQ0MDczNzA5NTUxNjE1dWxsCisjZGVmaW5lIEJJRzMyIDQyOTQ5NjcyOTV1bAorI2RlZmluZSBCSUdfT0sgKEJJRzY0IC8gQklHMzIgPT0gNDI5NDk2NzI5N3VsbCAmJiBCSUc2NCAlIEJJRzMyID09IDApCisjaWYgIUJJR19PSworICB5b3VyIHByZXByb2Nlc3NvciBpcyBicm9rZW47CisjZW5kaWYKKyNpZiBCSUdfT0sKKyNlbHNlCisgIHlvdXIgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbjsKKyNlbmRpZgorc3RhdGljIGxvbmcgbG9uZyBpbnQgYmlnbnVtID0gLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHViaWdudW0gPSBCSUc2NDsKKworc3RydWN0IGluY29tcGxldGVfYXJyYXkKK3sKKyAgaW50IGRhdGFzaXplOworICBkb3VibGUgZGF0YVtdOworfTsKKworc3RydWN0IG5hbWVkX2luaXQgeworICBpbnQgbnVtYmVyOworICBjb25zdCB3Y2hhcl90ICpuYW1lOworICBkb3VibGUgYXZlcmFnZTsKK307CisKK3R5cGVkZWYgY29uc3QgY2hhciAqY2NwOworCitzdGF0aWMgaW5saW5lIGludAordGVzdF9yZXN0cmljdCAoY2NwIHJlc3RyaWN0IHRleHQpCit7CisgIC8vIFNlZSBpZiBDKystc3R5bGUgY29tbWVudHMgd29yay4KKyAgLy8gSXRlcmF0ZSB0aHJvdWdoIGl0ZW1zIHZpYSB0aGUgcmVzdHJpY3RlZCBwb2ludGVyLgorICAvLyBBbHNvIGNoZWNrIGZvciBkZWNsYXJhdGlvbnMgaW4gZm9yIGxvb3BzLgorICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgKih0ZXh0K2kpICE9ICdcMCc7ICsraSkKKyAgICBjb250aW51ZTsKKyAgcmV0dXJuIDA7Cit9CisKKy8vIENoZWNrIHZhcmFyZ3MgYW5kIHZhX2NvcHkuCitzdGF0aWMgdm9pZAordGVzdF92YXJhcmdzIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdzOworICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKyAgdmFfbGlzdCBhcmdzX2NvcHk7CisgIHZhX2NvcHkgKGFyZ3NfY29weSwgYXJncyk7CisKKyAgY29uc3QgY2hhciAqc3RyOworICBpbnQgbnVtYmVyOworICBmbG9hdCBmbnVtYmVyOworCisgIHdoaWxlICgqZm9ybWF0KQorICAgIHsKKyAgICAgIHN3aXRjaCAoKmZvcm1hdCsrKQorCXsKKwljYXNlICdzJzogLy8gc3RyaW5nCisJICBzdHIgPSB2YV9hcmcgKGFyZ3NfY29weSwgY29uc3QgY2hhciAqKTsKKwkgIGJyZWFrOworCWNhc2UgJ2QnOiAvLyBpbnQKKwkgIG51bWJlciA9IHZhX2FyZyAoYXJnc19jb3B5LCBpbnQpOworCSAgYnJlYWs7CisJY2FzZSAnZic6IC8vIGZsb2F0CisJICBmbnVtYmVyID0gdmFfYXJnIChhcmdzX2NvcHksIGRvdWJsZSk7CisJICBicmVhazsKKwlkZWZhdWx0OgorCSAgYnJlYWs7CisJfQorICAgIH0KKyAgdmFfZW5kIChhcmdzX2NvcHkpOworICB2YV9lbmQgKGFyZ3MpOworfQorCitpbnQKK21haW4gKCkKK3sKKworICAvLyBDaGVjayBib29sLgorICBfQm9vbCBzdWNjZXNzID0gZmFsc2U7CisKKyAgLy8gQ2hlY2sgcmVzdHJpY3QuCisgIGlmICh0ZXN0X3Jlc3RyaWN0ICgiU3RyaW5nIGxpdGVyYWwiKSA9PSAwKQorICAgIHN1Y2Nlc3MgPSB0cnVlOworICBjaGFyICpyZXN0cmljdCBuZXd2YXIgPSAiQW5vdGhlciBzdHJpbmciOworCisgIC8vIENoZWNrIHZhcmFyZ3MuCisgIHRlc3RfdmFyYXJncyAoInMsIGQnIGYgLiIsICJzdHJpbmciLCA2NSwgMzQuMjM0KTsKKyAgdGVzdF92YXJhcmdzX21hY3JvcyAoKTsKKworICAvLyBDaGVjayBmbGV4aWJsZSBhcnJheSBtZW1iZXJzLgorICBzdHJ1Y3QgaW5jb21wbGV0ZV9hcnJheSAqaWEgPQorICAgIG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgaW5jb21wbGV0ZV9hcnJheSkgKyAoc2l6ZW9mIChkb3VibGUpICogMTApKTsKKyAgaWEtPmRhdGFzaXplID0gMTA7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgaWEtPmRhdGFzaXplOyArK2kpCisgICAgaWEtPmRhdGFbaV0gPSBpICogMS4yMzQ7CisKKyAgLy8gQ2hlY2sgbmFtZWQgaW5pdGlhbGl6ZXJzLgorICBzdHJ1Y3QgbmFtZWRfaW5pdCBuaSA9IHsKKyAgICAubnVtYmVyID0gMzQsCisgICAgLm5hbWUgPSBMIlRlc3Qgd2lkZSBzdHJpbmciLAorICAgIC5hdmVyYWdlID0gNTQzLjM0MzQzLAorICB9OworCisgIG5pLm51bWJlciA9IDU4OworCisgIGludCBkeW5hbWljX2FycmF5W25pLm51bWJlcl07CisgIGR5bmFtaWNfYXJyYXlbbmkubnVtYmVyIC0gMV0gPSA1NDM7CisKKyAgLy8gd29yayBhcm91bmQgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmdzCisgIHJldHVybiAoIXN1Y2Nlc3MgfHwgYmlnbnVtID09IDBMTCB8fCB1YmlnbnVtID09IDB1TEwgfHwgbmV3dmFyWzBdID09ICd4JworCSAgfHwgZHluYW1pY19hcnJheVtuaS5udW1iZXIgLSAxXSAhPSA1NDMpOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2ZvciBhY19hcmcgaW4gJycgLXN0ZD1nbnU5OSAtc3RkPWM5OSAtYzk5IC1BQzk5IC14Yzk5PWFsbCAtcWxhbmdsdmw9ZXh0Yzk5CitkbworICBDQz0iJGFjX3NhdmVfQ0MgJGFjX2FyZyIKKyAgaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2NjX2M5OT0kYWNfYXJnCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAorICB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzk5IiAhPSAieG5vIiAmJiBicmVhaworZG9uZQorcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorQ0M9JGFjX3NhdmVfQ0MKKworZmkKKyMgQUNfQ0FDSEVfVkFMCitjYXNlICJ4JGFjX2N2X3Byb2dfY2NfYzk5IiBpbgorICB4KQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1CiskYXNfZWNobyAibm9uZSBuZWVkZWQiID4mNjsgfSA7OworICB4bm8pCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVuc3VwcG9ydGVkIiA+JjUKKyRhc19lY2hvICJ1bnN1cHBvcnRlZCIgPiY2OyB9IDs7CisgICopCisgICAgQ0M9IiRDQyAkYWNfY3ZfcHJvZ19jY19jOTkiCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2M5OSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfYzk5IiA+JjY7IH0gOzsKK2VzYWMKK2lmIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jOTkiICE9IHhubzsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY2Nfc3RkYz0kYWNfY3ZfcHJvZ19jY19jOTkKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX2M4OStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2N2X3Byb2dfY2NfYzg5PW5vCithY19zYXZlX0NDPSRDQworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKy8qIE1vc3Qgb2YgdGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgc3RvbGVuIGZyb20gUkNTIDUuNydzIHNyYy9jb25mLnNoLiAgKi8KK3N0cnVjdCBidWYgeyBpbnQgeDsgfTsKK0ZJTEUgKiAoKnJjc29wZW4pIChzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCk7CitzdGF0aWMgY2hhciAqZSAocCwgaSkKKyAgICAgY2hhciAqKnA7CisgICAgIGludCBpOworeworICByZXR1cm4gcFtpXTsKK30KK3N0YXRpYyBjaGFyICpmIChjaGFyICogKCpnKSAoY2hhciAqKiwgaW50KSwgY2hhciAqKnAsIC4uLikKK3sKKyAgY2hhciAqczsKKyAgdmFfbGlzdCB2OworICB2YV9zdGFydCAodixwKTsKKyAgcyA9IGcgKHAsIHZhX2FyZyAodixpbnQpKTsKKyAgdmFfZW5kICh2KTsKKyAgcmV0dXJuIHM7Cit9CisKKy8qIE9TRiA0LjAgQ29tcGFxIGNjIGlzIHNvbWUgc29ydCBvZiBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LiAgSXQgaGFzCisgICBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBzdHVmZiwgYnV0IG5vdCAnXHhISCcgaGV4IGNoYXJhY3RlciBjb25zdGFudHMuCisgICBUaGVzZSBkb24ndCBwcm92b2tlIGFuIGVycm9yIHVuZm9ydHVuYXRlbHksIGluc3RlYWQgYXJlIHNpbGVudGx5IHRyZWF0ZWQKKyAgIGFzICd4Jy4gIFRoZSBmb2xsb3dpbmcgaW5kdWNlcyBhbiBlcnJvciwgdW50aWwgLXN0ZCBpcyBhZGRlZCB0byBnZXQKKyAgIHByb3BlciBBTlNJIG1vZGUuICBDdXJpb3VzbHkgJ1x4MDAnIT0neCcgYWx3YXlzIGNvbWVzIG91dCB0cnVlLCBmb3IgYW4KKyAgIGFycmF5IHNpemUgYXQgbGVhc3QuICBJdCdzIG5lY2Vzc2FyeSB0byB3cml0ZSAnXHgwMCc9PTAgdG8gZ2V0IHNvbWV0aGluZworICAgdGhhdCdzIHRydWUgb25seSB3aXRoIC1zdGQuICAqLworaW50IG9zZjRfY2NfYXJyYXkgWydceDAwJyA9PSAwID8gMSA6IC0xXTsKKworLyogSUJNIEMgNiBmb3IgQUlYIGlzIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQsIGJ1dCBpdCByZXBsYWNlcyBtYWNybyBwYXJhbWV0ZXJzCisgICBpbnNpZGUgc3RyaW5ncyBhbmQgY2hhcmFjdGVyIGNvbnN0YW50cy4gICovCisjZGVmaW5lIEZPTyh4KSAneCcKK2ludCB4bGM2X2NjX2FycmF5W0ZPTyhhKSA9PSAneCcgPyAxIDogLTFdOworCitpbnQgdGVzdCAoaW50IGksIGRvdWJsZSB4KTsKK3N0cnVjdCBzMSB7aW50ICgqZikgKGludCBhKTt9Oworc3RydWN0IHMyIHtpbnQgKCpmKSAoZG91YmxlIGEpO307CitpbnQgcGFpcm5hbWVzIChpbnQsIGNoYXIgKiosIEZJTEUgKigqKShzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCksIGludCwgaW50KTsKK2ludCBhcmdjOworY2hhciAqKmFyZ3Y7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBmIChlLCBhcmd2LCAwKSAhPSBhcmd2WzBdICB8fCAgZiAoZSwgYXJndiwgMSkgIT0gYXJndlsxXTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorZm9yIGFjX2FyZyBpbiAnJyAtcWxhbmdsdmw9ZXh0Yzg5IC1xbGFuZ2x2bD1hbnNpIC1zdGQgXAorCS1BZSAiLUFhIC1EX0hQVVhfU09VUkNFIiAiLVhjIC1EX19FWFRFTlNJT05TX18iCitkbworICBDQz0iJGFjX3NhdmVfQ0MgJGFjX2FyZyIKKyAgaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2NjX2M4OT0kYWNfYXJnCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAorICB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSAieG5vIiAmJiBicmVhaworZG9uZQorcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorQ0M9JGFjX3NhdmVfQ0MKKworZmkKKyMgQUNfQ0FDSEVfVkFMCitjYXNlICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiBpbgorICB4KQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1CiskYXNfZWNobyAibm9uZSBuZWVkZWQiID4mNjsgfSA7OworICB4bm8pCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVuc3VwcG9ydGVkIiA+JjUKKyRhc19lY2hvICJ1bnN1cHBvcnRlZCIgPiY2OyB9IDs7CisgICopCisgICAgQ0M9IiRDQyAkYWNfY3ZfcHJvZ19jY19jODkiCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2M4OSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjY7IH0gOzsKK2VzYWMKK2lmIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jODkiICE9IHhubzsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY2Nfc3RkYz0kYWNfY3ZfcHJvZ19jY19jODkKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19jY19zdGRjPW5vCitmaQorCitmaQorIDs7Citlc2FjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBTdGFuZGFyZCBDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gU3RhbmRhcmQgQy4uLiAiID4mNjsgfQorICBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2Nfc3RkYytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitmaQorCisgIGNhc2UgJGFjX2N2X3Byb2dfY2Nfc3RkYyBpbiAjKAorICBubykgOgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1bnN1cHBvcnRlZCIgPiY1CiskYXNfZWNobyAidW5zdXBwb3J0ZWQiID4mNjsgfSA7OyAjKAorICAnJykgOgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1CiskYXNfZWNobyAibm9uZSBuZWVkZWQiID4mNjsgfSA7OyAjKAorICAqKSA6CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX3N0ZGMiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX3N0ZGMiID4mNjsgfSA7OworZXNhYworCisKK2lmIHRlc3QgIngkQ0MiICE9IHhjYzsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIGFuZCBjYyB1bmRlcnN0YW5kIC1jIGFuZCAtbyB0b2dldGhlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBhbmQgY2MgdW5kZXJzdGFuZCAtYyBhbmQgLW8gdG9nZXRoZXIuLi4gIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGNjIHVuZGVyc3RhbmRzIC1jIGFuZCAtbyB0b2dldGhlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGNjIHVuZGVyc3RhbmRzIC1jIGFuZCAtbyB0b2dldGhlci4uLiAiID4mNjsgfQorZmkKK3NldCBkdW1teSAkQ0M7IGFjX2NjPWAkYXNfZWNobyAiJDIiIHwKKwkJICAgICAgc2VkICdzL1teYS16QS1aMC05X10vXy9nO3MvXlswLTldL18vJ2AKK2lmIGV2YWwgInRlc3QgXCJcJHthY19jdl9wcm9nX2NjXyR7YWNfY2N9X2NfbytzZXR9XCIiID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCisjIE1ha2Ugc3VyZSBpdCB3b3JrcyBib3RoIHdpdGggJENDIGFuZCB3aXRoIHNpbXBsZSBjYy4KKyMgV2UgZG8gdGhlIHRlc3QgdHdpY2UgYmVjYXVzZSBzb21lIGNvbXBpbGVycyByZWZ1c2UgdG8gb3ZlcndyaXRlIGFuCisjIGV4aXN0aW5nIC5vIGZpbGUgd2l0aCAtbywgdGhvdWdoIHRoZXkgd2lsbCBjcmVhdGUgb25lLgorYWNfdHJ5PSckQ0MgLWMgY29uZnRlc3QuJGFjX2V4dCAtbyBjb25mdGVzdDIuJGFjX29iamV4dCA+JjUnCitybSAtZiBjb25mdGVzdDIuKgoraWYgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmCisgICB0ZXN0IC1mIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ICYmIHsgeyBjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsKK3RoZW4KKyAgZXZhbCBhY19jdl9wcm9nX2NjXyR7YWNfY2N9X2Nfbz15ZXMKKyAgaWYgdGVzdCAieCRDQyIgIT0geGNjOyB0aGVuCisgICAgIyBUZXN0IGZpcnN0IHRoYXQgY2MgZXhpc3RzIGF0IGFsbC4KKyAgICBpZiB7IGFjX3RyeT0nY2MgLWMgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisgIHsgeyBjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbgorICAgICAgYWNfdHJ5PSdjYyAtYyBjb25mdGVzdC4kYWNfZXh0IC1vIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ID4mNScKKyAgICAgIHJtIC1mIGNvbmZ0ZXN0Mi4qCisgICAgICBpZiB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYKKwkgdGVzdCAtZiBjb25mdGVzdDIuJGFjX29iamV4dCAmJiB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07CisgICAgICB0aGVuCisJIyBjYyB3b3JrcyB0b28uCisJOgorICAgICAgZWxzZQorCSMgY2MgZXhpc3RzIGJ1dCBkb2Vzbid0IGxpa2UgLW8uCisJZXZhbCBhY19jdl9wcm9nX2NjXyR7YWNfY2N9X2Nfbz1ubworICAgICAgZmkKKyAgICBmaQorICBmaQorZWxzZQorICBldmFsIGFjX2N2X3Byb2dfY2NfJHthY19jY31fY19vPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdCoKKworZmkKK2lmIGV2YWwgdGVzdCBcJGFjX2N2X3Byb2dfY2NfJHthY19jY31fY19vID0geWVzOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCiskYXNfZWNobyAiI2RlZmluZSBOT19NSU5VU19DX01JTlVTX08gMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgRklYTUU6IHdlIHJlbHkgb24gdGhlIGNhY2hlIHZhcmlhYmxlIG5hbWUgYmVjYXVzZQorIyB0aGVyZSBpcyBubyBvdGhlciB3YXkuCitzZXQgZHVtbXkgJENDCithbV9jYz1gZWNobyAkMiB8IHNlZCAncy9bXmEtekEtWjAtOV9dL18vZztzL15bMC05XS9fLydgCitldmFsIGFtX3Q9XCRhY19jdl9wcm9nX2NjXyR7YW1fY2N9X2NfbworaWYgdGVzdCAiJGFtX3QiICE9IHllczsgdGhlbgorICAgIyBMb3NpbmcgY29tcGlsZXIsIHNvIG92ZXJyaWRlIHdpdGggdGhlIHNjcmlwdC4KKyAgICMgRklYTUU6IEl0IGlzIHdyb25nIHRvIHJld3JpdGUgQ0MuCisgICAjIEJ1dCBpZiB3ZSBkb24ndCB0aGVuIHdlIGdldCBpbnRvIHRyb3VibGUgb2Ygb25lIHNvcnQgb3IgYW5vdGhlci4KKyAgICMgQSBsb25nZXItdGVybSBmaXggd291bGQgYmUgdG8gaGF2ZSBhdXRvbWFrZSB1c2UgYW1fX0NDIGluIHRoaXMgY2FzZSwKKyAgICMgYW5kIHRoZW4gd2UgY291bGQgc2V0IGFtX19DQz0iXCQodG9wX3NyY2RpcikvY29tcGlsZSBcJChDQykiCisgICBDQz0iJGFtX2F1eF9kaXIvY29tcGlsZSAkQ0MiCitmaQorCisKKworIyBCeSBkZWZhdWx0IHdlIHNpbXBseSB1c2UgdGhlIEMgY29tcGlsZXIgdG8gYnVpbGQgYXNzZW1ibHkgY29kZS4KKwordGVzdCAiJHtDQ0FTK3NldH0iID0gc2V0IHx8IENDQVM9JENDCit0ZXN0ICIke0NDQVNGTEFHUytzZXR9IiA9IHNldCB8fCBDQ0FTRkxBR1M9JENGTEFHUworCisKKworZGVwY2M9IiRDQ0FTIiAgIGFtX2NvbXBpbGVyX2xpc3Q9CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YW1fY3ZfQ0NBU19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KKyAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAorICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgorICAjIGluc3RhbmNlIGl0IHdhcyByZXBvcnRlZCB0aGF0IG9uIEhQLVVYIHRoZSBnY2MgdGVzdCB3aWxsIGVuZCB1cAorICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgYEQnIC0tIGJlY2F1c2UgYC1NRCcgbWVhbnMgYHB1dCB0aGUgb3V0cHV0CisgICMgaW4gRCcuCisgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorICAjIENvcHkgZGVwY29tcCB0byBzdWJkaXIgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd29uJ3QgZmluZCBpdCBpZiB3ZSdyZQorICAjIHVzaW5nIGEgcmVsYXRpdmUgZGlyZWN0b3J5LgorICBjcCAiJGFtX2RlcGNvbXAiIGNvbmZ0ZXN0LmRpcgorICBjZCBjb25mdGVzdC5kaXIKKyAgIyBXZSB3aWxsIGJ1aWxkIG9iamVjdHMgYW5kIGRlcGVuZGVuY2llcyBpbiBhIHN1YmRpcmVjdG9yeSBiZWNhdXNlCisgICMgaXQgaGVscHMgdG8gZGV0ZWN0IGluYXBwbGljYWJsZSBkZXBlbmRlbmN5IG1vZGVzLiAgRm9yIGluc3RhbmNlCisgICMgYm90aCBUcnU2NCdzIGNjIGFuZCBJQ0Mgc3VwcG9ydCAtTUQgdG8gb3V0cHV0IGRlcGVuZGVuY2llcyBhcyBhCisgICMgc2lkZSBlZmZlY3Qgb2YgY29tcGlsYXRpb24sIGJ1dCBJQ0Mgd2lsbCBwdXQgdGhlIGRlcGVuZGVuY2llcyBpbgorICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGlsZSBUcnU2NCB3aWxsIHB1dCB0aGVtIGluIHRoZSBvYmplY3QKKyAgIyBkaXJlY3RvcnkuCisgIG1rZGlyIHN1YgorCisgIGFtX2N2X0NDQVNfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgorICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnIDwgLi9kZXBjb21wYAorICBmaQorICBhbV9fdW5pdmVyc2FsPWZhbHNlCisKKworICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KKyAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKKyAgICAjIGxpa2UgdG8gd3JhcCBsYXJnZSBkZXBlbmRlbmN5IGxpc3RzIG9uIGNvbHVtbiA4MCAod2l0aCBcKSwgYW5kCisgICAgIyB3ZSBzaG91bGQgbm90IGNob29zZSBhIGRlcGNvbXAgbW9kZSB3aGljaCBpcyBjb25mdXNlZCBieSB0aGlzLgorICAgICMKKyAgICAjIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlc2UgZmlsZXMgZm9yIGVhY2ggdGVzdCwgYXMgdGhlIGNvbXBpbGVyIG1heQorICAgICMgb3ZlcndyaXRlIHNvbWUgb2YgdGhlbSB3aGVuIHRlc3Rpbmcgd2l0aCBvYnNjdXJlIGNvbW1hbmQgbGluZXMuCisgICAgIyBUaGlzIGhhcHBlbnMgYXQgbGVhc3Qgd2l0aCB0aGUgQUlYIEMgY29tcGlsZXIuCisgICAgOiA+IHN1Yi9jb25mdGVzdC5jCisgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDY7IGRvCisgICAgICBlY2hvICcjaW5jbHVkZSAiY29uZnRzdCckaScuaCInID4+IHN1Yi9jb25mdGVzdC5jCisgICAgICAjIFVzaW5nIGA6ID4gc3ViL2NvbmZ0c3QkaS5oJyBjcmVhdGVzIG9ubHkgc3ViL2NvbmZ0c3QxLmggd2l0aAorICAgICAgIyBTb2xhcmlzIDgncyB7L3Vzcix9L2Jpbi9zaC4KKyAgICAgIHRvdWNoIHN1Yi9jb25mdHN0JGkuaAorICAgIGRvbmUKKyAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCisKKyAgICAjIFdlIGNoZWNrIHdpdGggYC1jJyBhbmQgYC1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKKyAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQorICAgICMgaGFuZGxlIGAtTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLiAgQWxzbywgc29tZSBJbnRlbAorICAgICMgdmVyc2lvbnMgaGFkIHRyb3VibGUgd2l0aCBvdXRwdXQgaW4gc3ViZGlycworICAgIGFtX19vYmo9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgYW1fX21pbnVzX29iaj0iLW8gJGFtX19vYmoiCisgICAgY2FzZSAkZGVwbW9kZSBpbgorICAgIGdjYykKKyAgICAgICMgVGhpcyBkZXBtb2RlIGNhdXNlcyBhIGNvbXBpbGVyIHJhY2UgaW4gdW5pdmVyc2FsIG1vZGUuCisgICAgICB0ZXN0ICIkYW1fX3VuaXZlcnNhbCIgPSBmYWxzZSB8fCBjb250aW51ZQorICAgICAgOzsKKyAgICBub3NpZGVlZmZlY3QpCisgICAgICAjIGFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKKyAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQKKyAgICAgIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciID0geHllczsgdGhlbgorCWNvbnRpbnVlCisgICAgICBlbHNlCisJYnJlYWsKKyAgICAgIGZpCisgICAgICA7OworICAgIG1zdmlzdWFsY3BwIHwgbXN2Y21zeXMpCisgICAgICAjIFRoaXMgY29tcGlsZXIgd29uJ3QgZ3JvayBgLWMgLW8nLCBidXQgYWxzbywgdGhlIG1pbnVzbyB0ZXN0IGhhcworICAgICAgIyBub3QgcnVuIHlldC4gIFRoZXNlIGRlcG1vZGVzIGFyZSBsYXRlIGVub3VnaCBpbiB0aGUgZ2FtZSwgYW5kCisgICAgICAjIHNvIHdlYWsgdGhhdCB0aGVpciBmdW5jdGlvbmluZyBzaG91bGQgbm90IGJlIGltcGFjdGVkLgorICAgICAgYW1fX29iaj1jb25mdGVzdC4ke09CSkVYVC1vfQorICAgICAgYW1fX21pbnVzX29iaj0KKyAgICAgIDs7CisgICAgbm9uZSkgYnJlYWsgOzsKKyAgICBlc2FjCisgICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCisgICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD0kYW1fX29iaiBcCisgICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwICRhbV9fb2JqIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCisgICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQorICAgICAgIyB0aGF0IHNheXMgYW4gb3B0aW9uIHdhcyBpZ25vcmVkIG9yIG5vdCBzdXBwb3J0ZWQuCisgICAgICAjIFdoZW4gZ2l2ZW4gLU1QLCBpY2MgNy4wIGFuZCA3LjEgY29tcGxhaW4gdGh1c2x5OgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHdhcm5pbmc6IGlnbm9yaW5nIG9wdGlvbiAnLU0nOyBubyBhcmd1bWVudCByZXF1aXJlZAorICAgICAgIyBUaGUgZGlhZ25vc2lzIGNoYW5nZWQgaW4gaWNjIDguMDoKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSByZW1hcms6IG9wdGlvbiAnLU1QJyBub3Qgc3VwcG9ydGVkCisgICAgICBpZiAoZ3JlcCAnaWdub3Jpbmcgb3B0aW9uJyBjb25mdGVzdC5lcnIgfHwKKyAgICAgICAgICBncmVwICdub3Qgc3VwcG9ydGVkJyBjb25mdGVzdC5lcnIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgICAgICAgIGFtX2N2X0NDQVNfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9JGRlcG1vZGUKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorCisgIGNkIC4uCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKK2Vsc2UKKyAgYW1fY3ZfQ0NBU19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9DQ0FTX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfQ0NBU19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2OyB9CitDQ0FTREVQTU9ERT1kZXBtb2RlPSRhbV9jdl9DQ0FTX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlCisKKyBpZgorICB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm8gXAorICAmJiB0ZXN0ICIkYW1fY3ZfQ0NBU19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzOyB0aGVuCisgIGFtX19mYXN0ZGVwQ0NBU19UUlVFPQorICBhbV9fZmFzdGRlcENDQVNfRkFMU0U9JyMnCitlbHNlCisgIGFtX19mYXN0ZGVwQ0NBU19UUlVFPScjJworICBhbV9fZmFzdGRlcENDQVNfRkFMU0U9CitmaQorCisKKworYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKK2lmIHRlc3QgLXogIiRDWFgiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRDQ0MiOyB0aGVuCisgICAgQ1hYPSRDQ0MKKyAgZWxzZQorICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgZm9yIGFjX3Byb2cgaW4gZysrIGMrKyBncHAgYUNDIENDIGN4eCBjYysrIGNsLmV4ZSBGQ0MgS0NDIFJDQyB4bENfciB4bEMKKyAgZG8KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1hYK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENYWCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DWFg9IiRDWFgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DWFg9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NYWD0kYWNfY3ZfcHJvZ19DWFgKK2lmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ1hYIiA+JjUKKyRhc19lY2hvICIkQ1hYIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICB0ZXN0IC1uICIkQ1hYIiAmJiBicmVhaworICBkb25lCitmaQoraWYgdGVzdCAteiAiJENYWCI7IHRoZW4KKyAgYWNfY3RfQ1hYPSRDWFgKKyAgZm9yIGFjX3Byb2cgaW4gZysrIGMrKyBncHAgYUNDIENDIGN4eCBjYysrIGNsLmV4ZSBGQ0MgS0NDIFJDQyB4bENfciB4bEMKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DWFgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQ1hYIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NYWD0iJGFjX2N0X0NYWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0NYWD0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQ1hYPSRhY19jdl9wcm9nX2FjX2N0X0NYWAoraWYgdGVzdCAtbiAiJGFjX2N0X0NYWCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DWFgiID4mNQorJGFzX2VjaG8gIiRhY19jdF9DWFgiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkYWNfY3RfQ1hYIiAmJiBicmVhaworZG9uZQorCisgIGlmIHRlc3QgIngkYWNfY3RfQ1hYIiA9IHg7IHRoZW4KKyAgICBDWFg9ImcrKyIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBDWFg9JGFjX2N0X0NYWAorICBmaQorZmkKKworICBmaQorZmkKKyMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KKyRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDKysgY29tcGlsZXIgdmVyc2lvbiIgPiY1CitzZXQgWCAkYWNfY29tcGlsZQorYWNfY29tcGlsZXI9JDIKK2ZvciBhY19vcHRpb24gaW4gLS12ZXJzaW9uIC12IC1WIC1xdmVyc2lvbjsgZG8KKyAgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBzZWQgJzEwYVwKKy4uLiByZXN0IG9mIHN0ZGVyciBvdXRwdXQgZGVsZXRlZCAuLi4KKyAgICAgICAgIDEwcScgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICBmaQorICBybSAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9Citkb25lCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDKysgY29tcGlsZXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDKysgY29tcGlsZXIuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfY3h4X2NvbXBpbGVyX2dudStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisjaWZuZGVmIF9fR05VQ19fCisgICAgICAgY2hva2UgbWUKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jb21waWxlcl9nbnU9eWVzCitlbHNlCisgIGFjX2NvbXBpbGVyX2dudT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorYWNfY3ZfY3h4X2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2N4eF9jb21waWxlcl9nbnUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9jeHhfY29tcGlsZXJfZ251IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbgorICBHWFg9eWVzCitlbHNlCisgIEdYWD0KK2ZpCithY190ZXN0X0NYWEZMQUdTPSR7Q1hYRkxBR1Mrc2V0fQorYWNfc2F2ZV9DWFhGTEFHUz0kQ1hYRkxBR1MKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ1hYIGFjY2VwdHMgLWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ1hYIGFjY2VwdHMgLWcuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jeHhfZytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX3NhdmVfY3h4X3dlcnJvcl9mbGFnPSRhY19jeHhfd2Vycm9yX2ZsYWcKKyAgIGFjX2N4eF93ZXJyb3JfZmxhZz15ZXMKKyAgIGFjX2N2X3Byb2dfY3h4X2c9bm8KKyAgIENYWEZMQUdTPSItZyIKKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY3h4X2c9eWVzCitlbHNlCisgIENYWEZMQUdTPSIiCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGFjX2N4eF93ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jeHhfd2Vycm9yX2ZsYWcKKwkgQ1hYRkxBR1M9Ii1nIgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2N4eF9nPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgYWNfY3h4X3dlcnJvcl9mbGFnPSRhY19zYXZlX2N4eF93ZXJyb3JfZmxhZworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jeHhfZyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfY3h4X2ciID4mNjsgfQoraWYgdGVzdCAiJGFjX3Rlc3RfQ1hYRkxBR1MiID0gc2V0OyB0aGVuCisgIENYWEZMQUdTPSRhY19zYXZlX0NYWEZMQUdTCitlbGlmIHRlc3QgJGFjX2N2X3Byb2dfY3h4X2cgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICBDWFhGTEFHUz0iLWcgLU8yIgorICBlbHNlCisgICAgQ1hYRkxBR1M9Ii1nIgorICBmaQorZWxzZQorICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgIENYWEZMQUdTPSItTzIiCisgIGVsc2UKKyAgICBDWFhGTEFHUz0KKyAgZmkKK2ZpCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK2RlcGNjPSIkQ1hYIiAgYW1fY29tcGlsZXJfbGlzdD0KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC16ICIkQU1ERVBfVFJVRSIgJiYgdGVzdCAtZiAiJGFtX2RlcGNvbXAiOyB0aGVuCisgICMgV2UgbWFrZSBhIHN1YmRpciBhbmQgZG8gdGhlIHRlc3RzIHRoZXJlLiAgT3RoZXJ3aXNlIHdlIGNhbiBlbmQgdXAKKyAgIyBtYWtpbmcgYm9ndXMgZmlsZXMgdGhhdCB3ZSBkb24ndCBrbm93IGFib3V0IGFuZCBuZXZlciByZW1vdmUuICBGb3IKKyAgIyBpbnN0YW5jZSBpdCB3YXMgcmVwb3J0ZWQgdGhhdCBvbiBIUC1VWCB0aGUgZ2NjIHRlc3Qgd2lsbCBlbmQgdXAKKyAgIyBtYWtpbmcgYSBkdW1teSBmaWxlIG5hbWVkIGBEJyAtLSBiZWNhdXNlIGAtTUQnIG1lYW5zIGBwdXQgdGhlIG91dHB1dAorICAjIGluIEQnLgorICBta2RpciBjb25mdGVzdC5kaXIKKyAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKKyAgIyB1c2luZyBhIHJlbGF0aXZlIGRpcmVjdG9yeS4KKyAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKKyAgY2QgY29uZnRlc3QuZGlyCisgICMgV2Ugd2lsbCBidWlsZCBvYmplY3RzIGFuZCBkZXBlbmRlbmNpZXMgaW4gYSBzdWJkaXJlY3RvcnkgYmVjYXVzZQorICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQorICAjIGJvdGggVHJ1NjQncyBjYyBhbmQgSUNDIHN1cHBvcnQgLU1EIHRvIG91dHB1dCBkZXBlbmRlbmNpZXMgYXMgYQorICAjIHNpZGUgZWZmZWN0IG9mIGNvbXBpbGF0aW9uLCBidXQgSUNDIHdpbGwgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4KKyAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0CisgICMgZGlyZWN0b3J5LgorICBta2RpciBzdWIKKworICBhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgorICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnIDwgLi9kZXBjb21wYAorICBmaQorICBhbV9fdW5pdmVyc2FsPWZhbHNlCisgIGNhc2UgIiAkZGVwY2MgIiBpbiAjKAorICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OworICAgICBlc2FjCisKKyAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCisgICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCisgICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAorICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KKyAgICAjCisgICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKKyAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgorICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgorICAgIDogPiBzdWIvY29uZnRlc3QuYworICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbworICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYworICAgICAgIyBVc2luZyBgOiA+IHN1Yi9jb25mdHN0JGkuaCcgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKKyAgICAgICMgU29sYXJpcyA4J3Mgey91c3IsfS9iaW4vc2guCisgICAgICB0b3VjaCBzdWIvY29uZnRzdCRpLmgKKyAgICBkb25lCisgICAgZWNobyAiJHthbV9faW5jbHVkZX0gJHthbV9fcXVvdGV9c3ViL2NvbmZ0ZXN0LlBvJHthbV9fcXVvdGV9IiA+IGNvbmZtZgorCisgICAgIyBXZSBjaGVjayB3aXRoIGAtYycgYW5kIGAtbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCisgICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKKyAgICAjIGhhbmRsZSBgLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4gIEFsc28sIHNvbWUgSW50ZWwKKyAgICAjIHZlcnNpb25zIGhhZCB0cm91YmxlIHdpdGggb3V0cHV0IGluIHN1YmRpcnMKKyAgICBhbV9fb2JqPXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfQorICAgIGFtX19taW51c19vYmo9Ii1vICRhbV9fb2JqIgorICAgIGNhc2UgJGRlcG1vZGUgaW4KKyAgICBnY2MpCisgICAgICAjIFRoaXMgZGVwbW9kZSBjYXVzZXMgYSBjb21waWxlciByYWNlIGluIHVuaXZlcnNhbCBtb2RlLgorICAgICAgdGVzdCAiJGFtX191bml2ZXJzYWwiID0gZmFsc2UgfHwgY29udGludWUKKyAgICAgIDs7CisgICAgbm9zaWRlZWZmZWN0KQorICAgICAgIyBhZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCisgICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkCisgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZWxzZQorCWJyZWFrCisgICAgICBmaQorICAgICAgOzsKKyAgICBtc3Zpc3VhbGNwcCB8IG1zdmNtc3lzKQorICAgICAgIyBUaGlzIGNvbXBpbGVyIHdvbid0IGdyb2sgYC1jIC1vJywgYnV0IGFsc28sIHRoZSBtaW51c28gdGVzdCBoYXMKKyAgICAgICMgbm90IHJ1biB5ZXQuICBUaGVzZSBkZXBtb2RlcyBhcmUgbGF0ZSBlbm91Z2ggaW4gdGhlIGdhbWUsIGFuZAorICAgICAgIyBzbyB3ZWFrIHRoYXQgdGhlaXIgZnVuY3Rpb25pbmcgc2hvdWxkIG5vdCBiZSBpbXBhY3RlZC4KKyAgICAgIGFtX19vYmo9Y29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICAgIGFtX19taW51c19vYmo9CisgICAgICA7OworICAgIG5vbmUpIGJyZWFrIDs7CisgICAgZXNhYworICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAorICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9JGFtX19vYmogXAorICAgICAgIGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlBvIHRtcGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlRQbyBcCisgICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgJGFtX19taW51c19vYmogc3ViL2NvbmZ0ZXN0LmMgXAorICAgICAgICAgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0LmVyciAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3QxLmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwIHN1Yi9jb25mdHN0Ni5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgZ3JlcCAkYW1fX29iaiBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgICR7TUFLRS1tYWtlfSAtcyAtZiBjb25mbWYgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgIyBpY2MgZG9lc24ndCBjaG9rZSBvbiB1bmtub3duIG9wdGlvbnMsIGl0IHdpbGwganVzdCBpc3N1ZSB3YXJuaW5ncworICAgICAgIyBvciByZW1hcmtzIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKKyAgICAgICMgdGhhdCBzYXlzIGFuIG9wdGlvbiB3YXMgaWdub3JlZCBvciBub3Qgc3VwcG9ydGVkLgorICAgICAgIyBXaGVuIGdpdmVuIC1NUCwgaWNjIDcuMCBhbmQgNy4xIGNvbXBsYWluIHRodXNseToKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSB3YXJuaW5nOiBpZ25vcmluZyBvcHRpb24gJy1NJzsgbm8gYXJndW1lbnQgcmVxdWlyZWQKKyAgICAgICMgVGhlIGRpYWdub3NpcyBjaGFuZ2VkIGluIGljYyA4LjA6CisgICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgcmVtYXJrOiBvcHRpb24gJy1NUCcgbm90IHN1cHBvcnRlZAorICAgICAgaWYgKGdyZXAgJ2lnbm9yaW5nIG9wdGlvbicgY29uZnRlc3QuZXJyIHx8CisgICAgICAgICAgZ3JlcCAnbm90IHN1cHBvcnRlZCcgY29uZnRlc3QuZXJyKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICAgICAgICBhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9JGRlcG1vZGUKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorCisgIGNkIC4uCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKK2Vsc2UKKyAgYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY1CiskYXNfZWNobyAiJGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2OyB9CitDWFhERVBNT0RFPWRlcG1vZGU9JGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZQorCisgaWYKKyAgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vIFwKKyAgJiYgdGVzdCAiJGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzOyB0aGVuCisgIGFtX19mYXN0ZGVwQ1hYX1RSVUU9CisgIGFtX19mYXN0ZGVwQ1hYX0ZBTFNFPScjJworZWxzZQorICBhbV9fZmFzdGRlcENYWF9UUlVFPScjJworICBhbV9fZmFzdGRlcENYWF9GQUxTRT0KK2ZpCisKKworCithY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQoraWYgdGVzdCAteiAiJENYWCI7IHRoZW4KKyAgaWYgdGVzdCAtbiAiJENDQyI7IHRoZW4KKyAgICBDWFg9JENDQworICBlbHNlCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICBmb3IgYWNfcHJvZyBpbiBnKysgYysrIGdwcCBhQ0MgQ0MgY3h4IGNjKysgY2wuZXhlIEZDQyBLQ0MgUkNDIHhsQ19yIHhsQworICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DWFgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ1hYIjsgdGhlbgorICBhY19jdl9wcm9nX0NYWD0iJENYWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0NYWD0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQ1hYPSRhY19jdl9wcm9nX0NYWAoraWYgdGVzdCAtbiAiJENYWCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDWFgiID4mNQorJGFzX2VjaG8gIiRDWFgiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgIHRlc3QgLW4gIiRDWFgiICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkQ1hYIjsgdGhlbgorICBhY19jdF9DWFg9JENYWAorICBmb3IgYWNfcHJvZyBpbiBnKysgYysrIGdwcCBhQ0MgQ0MgY3h4IGNjKysgY2wuZXhlIEZDQyBLQ0MgUkNDIHhsQ19yIHhsQworZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NYWCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9DWFgiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQ1hYPSIkYWNfY3RfQ1hYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQ1hYPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9DWFg9JGFjX2N2X3Byb2dfYWNfY3RfQ1hYCitpZiB0ZXN0IC1uICIkYWNfY3RfQ1hYIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NYWCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0NYWCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRhY19jdF9DWFgiICYmIGJyZWFrCitkb25lCisKKyAgaWYgdGVzdCAieCRhY19jdF9DWFgiID0geDsgdGhlbgorICAgIENYWD0iZysrIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIENYWD0kYWNfY3RfQ1hYCisgIGZpCitmaQorCisgIGZpCitmaQorIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgorJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEMrKyBjb21waWxlciB2ZXJzaW9uIiA+JjUKK3NldCBYICRhY19jb21waWxlCithY19jb21waWxlcj0kMgorZm9yIGFjX29wdGlvbiBpbiAtLXZlcnNpb24gLXYgLVYgLXF2ZXJzaW9uOyBkbworICB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIHNlZCAnMTBhXAorLi4uIHJlc3Qgb2Ygc3RkZXJyIG91dHB1dCBkZWxldGVkIC4uLgorICAgICAgICAgMTBxJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KK2RvbmUKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMrKyBjb21waWxlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMrKyBjb21waWxlci4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9jeHhfY29tcGlsZXJfZ251K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgX19HTlVDX18KKyAgICAgICBjaG9rZSBtZQorI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2NvbXBpbGVyX2dudT15ZXMKK2Vsc2UKKyAgYWNfY29tcGlsZXJfZ251PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CithY19jdl9jeHhfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY3h4X2NvbXBpbGVyX2dudSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2N4eF9jb21waWxlcl9nbnUiID4mNjsgfQoraWYgdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCisgIEdYWD15ZXMKK2Vsc2UKKyAgR1hYPQorZmkKK2FjX3Rlc3RfQ1hYRkxBR1M9JHtDWFhGTEFHUytzZXR9CithY19zYXZlX0NYWEZMQUdTPSRDWFhGTEFHUworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDWFggYWNjZXB0cyAtZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDWFggYWNjZXB0cyAtZy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2N4eF9nK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9jeHhfd2Vycm9yX2ZsYWc9JGFjX2N4eF93ZXJyb3JfZmxhZworICAgYWNfY3h4X3dlcnJvcl9mbGFnPXllcworICAgYWNfY3ZfcHJvZ19jeHhfZz1ubworICAgQ1hYRkxBR1M9Ii1nIgorICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jeHhfZz15ZXMKK2Vsc2UKKyAgQ1hYRkxBR1M9IiIKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3h4X3dlcnJvcl9mbGFnPSRhY19zYXZlX2N4eF93ZXJyb3JfZmxhZworCSBDWFhGTEFHUz0iLWciCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY3h4X2c9eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBhY19jeHhfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY3h4X3dlcnJvcl9mbGFnCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2N4eF9nIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jeHhfZyIgPiY2OyB9CitpZiB0ZXN0ICIkYWNfdGVzdF9DWFhGTEFHUyIgPSBzZXQ7IHRoZW4KKyAgQ1hYRkxBR1M9JGFjX3NhdmVfQ1hYRkxBR1MKK2VsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jeHhfZyA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgIENYWEZMQUdTPSItZyAtTzIiCisgIGVsc2UKKyAgICBDWFhGTEFHUz0iLWciCisgIGZpCitlbHNlCisgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgQ1hYRkxBR1M9Ii1PMiIKKyAgZWxzZQorICAgIENYWEZMQUdTPQorICBmaQorZmkKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworZGVwY2M9IiRDWFgiICBhbV9jb21waWxlcl9saXN0PQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KKyAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAorICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgorICAjIGluc3RhbmNlIGl0IHdhcyByZXBvcnRlZCB0aGF0IG9uIEhQLVVYIHRoZSBnY2MgdGVzdCB3aWxsIGVuZCB1cAorICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgYEQnIC0tIGJlY2F1c2UgYC1NRCcgbWVhbnMgYHB1dCB0aGUgb3V0cHV0CisgICMgaW4gRCcuCisgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorICAjIENvcHkgZGVwY29tcCB0byBzdWJkaXIgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd29uJ3QgZmluZCBpdCBpZiB3ZSdyZQorICAjIHVzaW5nIGEgcmVsYXRpdmUgZGlyZWN0b3J5LgorICBjcCAiJGFtX2RlcGNvbXAiIGNvbmZ0ZXN0LmRpcgorICBjZCBjb25mdGVzdC5kaXIKKyAgIyBXZSB3aWxsIGJ1aWxkIG9iamVjdHMgYW5kIGRlcGVuZGVuY2llcyBpbiBhIHN1YmRpcmVjdG9yeSBiZWNhdXNlCisgICMgaXQgaGVscHMgdG8gZGV0ZWN0IGluYXBwbGljYWJsZSBkZXBlbmRlbmN5IG1vZGVzLiAgRm9yIGluc3RhbmNlCisgICMgYm90aCBUcnU2NCdzIGNjIGFuZCBJQ0Mgc3VwcG9ydCAtTUQgdG8gb3V0cHV0IGRlcGVuZGVuY2llcyBhcyBhCisgICMgc2lkZSBlZmZlY3Qgb2YgY29tcGlsYXRpb24sIGJ1dCBJQ0Mgd2lsbCBwdXQgdGhlIGRlcGVuZGVuY2llcyBpbgorICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGlsZSBUcnU2NCB3aWxsIHB1dCB0aGVtIGluIHRoZSBvYmplY3QKKyAgIyBkaXJlY3RvcnkuCisgIG1rZGlyIHN1YgorCisgIGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCisgIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCisgICAgIGFtX2NvbXBpbGVyX2xpc3Q9YHNlZCAtbiAncy9eIypcKFthLXpBLVowLTldKlwpKSQvXDEvcCcgPCAuL2RlcGNvbXBgCisgIGZpCisgIGFtX191bml2ZXJzYWw9ZmFsc2UKKyAgY2FzZSAiICRkZXBjYyAiIGluICMoCisgICAgICpcIC1hcmNoXCAqXCAtYXJjaFwgKikgYW1fX3VuaXZlcnNhbD10cnVlIDs7CisgICAgIGVzYWMKKworICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KKyAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKKyAgICAjIGxpa2UgdG8gd3JhcCBsYXJnZSBkZXBlbmRlbmN5IGxpc3RzIG9uIGNvbHVtbiA4MCAod2l0aCBcKSwgYW5kCisgICAgIyB3ZSBzaG91bGQgbm90IGNob29zZSBhIGRlcGNvbXAgbW9kZSB3aGljaCBpcyBjb25mdXNlZCBieSB0aGlzLgorICAgICMKKyAgICAjIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlc2UgZmlsZXMgZm9yIGVhY2ggdGVzdCwgYXMgdGhlIGNvbXBpbGVyIG1heQorICAgICMgb3ZlcndyaXRlIHNvbWUgb2YgdGhlbSB3aGVuIHRlc3Rpbmcgd2l0aCBvYnNjdXJlIGNvbW1hbmQgbGluZXMuCisgICAgIyBUaGlzIGhhcHBlbnMgYXQgbGVhc3Qgd2l0aCB0aGUgQUlYIEMgY29tcGlsZXIuCisgICAgOiA+IHN1Yi9jb25mdGVzdC5jCisgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDY7IGRvCisgICAgICBlY2hvICcjaW5jbHVkZSAiY29uZnRzdCckaScuaCInID4+IHN1Yi9jb25mdGVzdC5jCisgICAgICAjIFVzaW5nIGA6ID4gc3ViL2NvbmZ0c3QkaS5oJyBjcmVhdGVzIG9ubHkgc3ViL2NvbmZ0c3QxLmggd2l0aAorICAgICAgIyBTb2xhcmlzIDgncyB7L3Vzcix9L2Jpbi9zaC4KKyAgICAgIHRvdWNoIHN1Yi9jb25mdHN0JGkuaAorICAgIGRvbmUKKyAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCisKKyAgICAjIFdlIGNoZWNrIHdpdGggYC1jJyBhbmQgYC1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKKyAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQorICAgICMgaGFuZGxlIGAtTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLiAgQWxzbywgc29tZSBJbnRlbAorICAgICMgdmVyc2lvbnMgaGFkIHRyb3VibGUgd2l0aCBvdXRwdXQgaW4gc3ViZGlycworICAgIGFtX19vYmo9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgYW1fX21pbnVzX29iaj0iLW8gJGFtX19vYmoiCisgICAgY2FzZSAkZGVwbW9kZSBpbgorICAgIGdjYykKKyAgICAgICMgVGhpcyBkZXBtb2RlIGNhdXNlcyBhIGNvbXBpbGVyIHJhY2UgaW4gdW5pdmVyc2FsIG1vZGUuCisgICAgICB0ZXN0ICIkYW1fX3VuaXZlcnNhbCIgPSBmYWxzZSB8fCBjb250aW51ZQorICAgICAgOzsKKyAgICBub3NpZGVlZmZlY3QpCisgICAgICAjIGFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKKyAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQKKyAgICAgIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciID0geHllczsgdGhlbgorCWNvbnRpbnVlCisgICAgICBlbHNlCisJYnJlYWsKKyAgICAgIGZpCisgICAgICA7OworICAgIG1zdmlzdWFsY3BwIHwgbXN2Y21zeXMpCisgICAgICAjIFRoaXMgY29tcGlsZXIgd29uJ3QgZ3JvayBgLWMgLW8nLCBidXQgYWxzbywgdGhlIG1pbnVzbyB0ZXN0IGhhcworICAgICAgIyBub3QgcnVuIHlldC4gIFRoZXNlIGRlcG1vZGVzIGFyZSBsYXRlIGVub3VnaCBpbiB0aGUgZ2FtZSwgYW5kCisgICAgICAjIHNvIHdlYWsgdGhhdCB0aGVpciBmdW5jdGlvbmluZyBzaG91bGQgbm90IGJlIGltcGFjdGVkLgorICAgICAgYW1fX29iaj1jb25mdGVzdC4ke09CSkVYVC1vfQorICAgICAgYW1fX21pbnVzX29iaj0KKyAgICAgIDs7CisgICAgbm9uZSkgYnJlYWsgOzsKKyAgICBlc2FjCisgICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCisgICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD0kYW1fX29iaiBcCisgICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwICRhbV9fb2JqIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCisgICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQorICAgICAgIyB0aGF0IHNheXMgYW4gb3B0aW9uIHdhcyBpZ25vcmVkIG9yIG5vdCBzdXBwb3J0ZWQuCisgICAgICAjIFdoZW4gZ2l2ZW4gLU1QLCBpY2MgNy4wIGFuZCA3LjEgY29tcGxhaW4gdGh1c2x5OgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHdhcm5pbmc6IGlnbm9yaW5nIG9wdGlvbiAnLU0nOyBubyBhcmd1bWVudCByZXF1aXJlZAorICAgICAgIyBUaGUgZGlhZ25vc2lzIGNoYW5nZWQgaW4gaWNjIDguMDoKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSByZW1hcms6IG9wdGlvbiAnLU1QJyBub3Qgc3VwcG9ydGVkCisgICAgICBpZiAoZ3JlcCAnaWdub3Jpbmcgb3B0aW9uJyBjb25mdGVzdC5lcnIgfHwKKyAgICAgICAgICBncmVwICdub3Qgc3VwcG9ydGVkJyBjb25mdGVzdC5lcnIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgICAgICAgIGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT0kZGVwbW9kZQorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBmaQorICBkb25lCisKKyAgY2QgLi4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorZWxzZQorICBhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjY7IH0KK0NYWERFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlCisKKyBpZgorICB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm8gXAorICAmJiB0ZXN0ICIkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA9IGdjYzM7IHRoZW4KKyAgYW1fX2Zhc3RkZXBDWFhfVFJVRT0KKyAgYW1fX2Zhc3RkZXBDWFhfRkFMU0U9JyMnCitlbHNlCisgIGFtX19mYXN0ZGVwQ1hYX1RSVUU9JyMnCisgIGFtX19mYXN0ZGVwQ1hYX0ZBTFNFPQorZmkKKworCitpZiB0ZXN0IC1uICIkQ1hYIiAmJiAoIHRlc3QgIlgkQ1hYIiAhPSAiWG5vIiAmJgorICAgICggKHRlc3QgIlgkQ1hYIiA9ICJYZysrIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAorICAgICh0ZXN0ICJYJENYWCIgIT0gIlhnKysiKSkpIDsgdGhlbgorICBhY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDKysgcHJlcHJvY2Vzc29yIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMrKyBwcmVwcm9jZXNzb3IuLi4gIiA+JjY7IH0KK2lmIHRlc3QgLXogIiRDWFhDUFAiOyB0aGVuCisgIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DWFhDUFArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAgICAgIyBEb3VibGUgcXVvdGVzIGJlY2F1c2UgQ1hYQ1BQIG5lZWRzIHRvIGJlIGV4cGFuZGVkCisgICAgZm9yIENYWENQUCBpbiAiJENYWCAtRSIgIi9saWIvY3BwIgorICAgIGRvCisgICAgICBhY19wcmVwcm9jX29rPWZhbHNlCitmb3IgYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcworZG8KKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KKyAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKwkJICAgICBTeW50YXggZXJyb3IKK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCitjb250aW51ZQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycworICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitlbHNlCisgICMgUGFzc2VzIGJvdGggdGVzdHMuCithY19wcmVwcm9jX29rPToKK2JyZWFrCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKKyAgYnJlYWsKK2ZpCisKKyAgICBkb25lCisgICAgYWNfY3ZfcHJvZ19DWFhDUFA9JENYWENQUAorCitmaQorICBDWFhDUFA9JGFjX2N2X3Byb2dfQ1hYQ1BQCitlbHNlCisgIGFjX2N2X3Byb2dfQ1hYQ1BQPSRDWFhDUFAKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENYWENQUCIgPiY1CiskYXNfZWNobyAiJENYWENQUCIgPiY2OyB9CithY19wcmVwcm9jX29rPWZhbHNlCitmb3IgYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcworZG8KKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KKyAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKwkJICAgICBTeW50YXggZXJyb3IKK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCitjb250aW51ZQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycworICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitlbHNlCisgICMgUGFzc2VzIGJvdGggdGVzdHMuCithY19wcmVwcm9jX29rPToKK2JyZWFrCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKKworZWxzZQorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK19sdF9jYXVnaHRfQ1hYX2Vycm9yPXllczsgfQorZmkKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitlbHNlCisgIF9sdF9jYXVnaHRfQ1hYX2Vycm9yPXllcworZmkKKworCisKKworYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKKworYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCithbGxvd191bmRlZmluZWRfZmxhZ19DWFg9CithbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPW5vCithcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0KK2NvbXBpbGVyX25lZWRzX29iamVjdF9DWFg9bm8KK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9CitoYXJkY29kZV9kaXJlY3RfQ1hYPW5vCitoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYPW5vCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0KK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfQ1hYPQoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9CitoYXJkY29kZV9taW51c19MX0NYWD1ubworaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9dW5zdXBwb3J0ZWQKK2hhcmRjb2RlX2F1dG9tYXRpY19DWFg9bm8KK2luaGVyaXRfcnBhdGhfQ1hYPW5vCittb2R1bGVfY21kc19DWFg9Cittb2R1bGVfZXhwc3ltX2NtZHNfQ1hYPQorbGlua19hbGxfZGVwbGlic19DWFg9dW5rbm93bgorb2xkX2FyY2hpdmVfY21kc19DWFg9JG9sZF9hcmNoaXZlX2NtZHMKK25vX3VuZGVmaW5lZF9mbGFnX0NYWD0KK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0KK2VuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPW5vCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDKysgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWNwcAorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQysrIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitvYmpleHRfQ1hYPSRvYmpleHQKKworIyBObyBzZW5zZSBpbiBydW5uaW5nIGFsbCB0aGVzZSB0ZXN0cyBpZiB3ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdAorIyB0aGUgQ1hYIGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQorIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAorIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCitpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCisKKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKKyAgbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbihpbnQsIGNoYXIgKltdKSB7IHJldHVybigwKTsgfScKKworICAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCisKKworCisKKworCisjIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgorTFRDQz0ke0xUQ0MtIiRDQyJ9CisKKyMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KK0xUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorY29tcGlsZXI9JENDCisKKworICAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9jb21waWxlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRSTSBjb25mdGVzdCoKKworICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskUk0gLXIgY29uZnRlc3QqCisKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSRDQworICBsdF9zYXZlX0xEPSRMRAorICBsdF9zYXZlX0dDQz0kR0NDCisgIEdDQz0kR1hYCisgIGx0X3NhdmVfd2l0aF9nbnVfbGQ9JHdpdGhfZ251X2xkCisgIGx0X3NhdmVfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRAorICBpZiB0ZXN0IC1uICIke2x0X2N2X3Byb2dfZ251X2xkY3h4K3NldH0iOyB0aGVuCisgICAgbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkY3h4CisgIGVsc2UKKyAgICAkYXNfdW5zZXQgbHRfY3ZfcHJvZ19nbnVfbGQKKyAgZmkKKyAgaWYgdGVzdCAtbiAiJHtsdF9jdl9wYXRoX0xEQ1hYK3NldH0iOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRENYWAorICBlbHNlCisgICAgJGFzX3Vuc2V0IGx0X2N2X3BhdGhfTEQKKyAgZmkKKyAgdGVzdCAteiAiJHtMRENYWCtzZXR9IiB8fCBMRD0kTERDWFgKKyAgQ0M9JHtDWFgtImMrKyJ9CisgIGNvbXBpbGVyPSRDQworICBjb21waWxlcl9DWFg9JENDCisgIGZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbworICBjYXNlICRjY190ZW1wIGluCisgICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OworICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7CisgICAgXC0qKSA7OworICAgICopIGJyZWFrOzsKKyAgZXNhYworZG9uZQorY2NfYmFzZW5hbWU9YCRFQ0hPICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCisKKworICBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgICAgIyBXZSBkb24ndCB3YW50IC1mbm8tZXhjZXB0aW9uIHdoZW4gY29tcGlsaW5nIEMrKyBjb2RlLCBzbyBzZXQgdGhlCisgICAgIyBub19idWlsdGluX2ZsYWcgc2VwYXJhdGVseQorICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFg9JyAtZm5vLWJ1aWx0aW4nCisgICAgZWxzZQorICAgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYPQorICAgIGZpCisKKyAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgIyBTZXQgdXAgZGVmYXVsdCBHTlUgQysrIGNvbmZpZ3VyYXRpb24KKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ251LWxkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2dudV9sZDsgdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzCitlbHNlCisgIHdpdGhfZ251X2xkPW5vCitmaQorCithY19wcm9nPWxkCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDLi4uICIgPiY2OyB9CisgIGNhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KikKKyAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3CisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OworICAqKQorICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKKyAgZXNhYworICBjYXNlICRhY19wcm9nIGluCisgICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCisgICAgW1xcL10qIHwgPzpbXFwvXSopCisgICAgICByZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nCisgICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUgb2YgbGQKKyAgICAgIGFjX3Byb2c9YCRFQ0hPICIkYWNfcHJvZyJ8ICRTRUQgJ3MlXFxcXCUvJWcnYAorICAgICAgd2hpbGUgJEVDSE8gIiRhY19wcm9nIiB8ICRHUkVQICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbworCWFjX3Byb2c9YCRFQ0hPICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAorICAgICAgZG9uZQorICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCisgICAgICA7OworICAiIikKKyAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKyAgICBhY19wcm9nPWxkCisgICAgOzsKKyAgKikKKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorICAgIDs7CisgIGVzYWMKK2VsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdOVSBsZC4uLiAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBub24tR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBub24tR05VIGxkLi4uICIgPiY2OyB9CitmaQoraWYgdGVzdCAiJHtsdF9jdl9wYXRoX0xEK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJExEIjsgdGhlbgorICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKyAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCisgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KKyAgICAgIGNhc2UgYCIkbHRfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhaworCTs7CisgICAgICAqKQorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorZWxzZQorICBsdF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorZmkKK2ZpCisKK0xEPSIkbHRfY3ZfcGF0aF9MRCIKK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMRCIgPiY1CiskYXNfZWNobyAiJExEIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQordGVzdCAteiAiJExEIiAmJiBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiICIkTElORU5PIiA1Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3Byb2dfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgorY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBsdF9jdl9wcm9nX2dudV9sZD15ZXMKKyAgOzsKKyopCisgIGx0X2N2X3Byb2dfZ251X2xkPW5vCisgIDs7Citlc2FjCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2dudV9sZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfZ251X2xkIiA+JjY7IH0KK3dpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAorCisKKworCisKKworCisgICAgICAjIENoZWNrIGlmIEdOVSBDKysgdXNlcyBHTlUgbGQgYXMgdGhlIHVuZGVybHlpbmcgbGlua2VyLCBzaW5jZSB0aGUKKyAgICAgICMgYXJjaGl2aW5nIGNvbW1hbmRzIGJlbG93IGFzc3VtZSB0aGF0IEdOVSBsZCBpcyBiZWluZyB1c2VkLgorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCisgICAgICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5CisgICAgICAgICMgWFhYIEkgdGhpbmsgd2xhcmMgY2FuIGJlIGVsaW1pbmF0ZWQgaW4gbHRjZi1jeHgsIGJ1dCBJIG5lZWQgdG8KKyAgICAgICAgIyAgICAgaW52ZXN0aWdhdGUgaXQgYSBsaXR0bGUgYml0IG1vcmUuIChNTSkKKyAgICAgICAgd2xhcmM9JyR7d2x9JworCisgICAgICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICAgICAgaWYgZXZhbCAiYCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkYCAtLWhlbHAgMj4mMSIgfAorCSAgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworICAgICAgICBlbHNlCisgICAgICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPQorICAgICAgICBmaQorICAgICAgZWxzZQorICAgICAgICB3aXRoX2dudV9sZD1ubworICAgICAgICB3bGFyYz0KKworICAgICAgICAjIEEgZ2VuZXJpYyBhbmQgdmVyeSBzaW1wbGUgZGVmYXVsdCBzaGFyZWQgbGlicmFyeSBjcmVhdGlvbgorICAgICAgICAjIGNvbW1hbmQgZm9yIEdOVSBDKysgZm9yIHRoZSBjYXNlIHdoZXJlIGl0IHVzZXMgdGhlIG5hdGl2ZQorICAgICAgICAjIGxpbmtlciwgaW5zdGVhZCBvZiBHTlUgbGQuICBJZiBwb3NzaWJsZSwgdGhpcyBzZXR0aW5nIHNob3VsZAorICAgICAgICAjIG92ZXJyaWRkZW4gdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIG5hdGl2ZSBsaW5rZXIgZmVhdHVyZXMgb24KKyAgICAgICAgIyB0aGUgcGxhdGZvcm0gaXQgaXMgYmVpbmcgdXNlZCBvbi4KKyAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJworICAgICAgZmkKKworICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJcLUwiJworCisgICAgZWxzZQorICAgICAgR1hYPW5vCisgICAgICB3aXRoX2dudV9sZD1ubworICAgICAgd2xhcmM9CisgICAgZmkKKworICAgICMgUE9SVE1FOiBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBDKysgbGluayBjaGFyYWN0ZXJpc3RpY3MKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKyAgICBsZF9zaGxpYnNfQ1hYPXllcworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDMqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgICA7OworICAgICAgYWl4WzQtOV0qKQorICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICAgICAgICMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKKyAgICAgICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KKyAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisgICAgICAgICAgZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKKyAgICAgICAgICBub19lbnRyeV9mbGFnPSIiCisgICAgICAgIGVsc2UKKyAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisKKyAgICAgICAgICAjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKKyAgICAgICAgICAjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKyAgICAgICAgICAjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgorICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeFs1LTldKikKKwkgICAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisJICAgICAgY2FzZSAkbGRfZmxhZyBpbgorCSAgICAgICotYnJ0bCopCisJICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICAgICAgYnJlYWsKKwkgICAgICAgIDs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIDs7CisgICAgICAgICAgZXNhYworCisgICAgICAgICAgZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKKyAgICAgICAgICBub19lbnRyeV9mbGFnPSctYm5vZW50cnknCisgICAgICAgIGZpCisKKyAgICAgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgorICAgICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKKyAgICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KKyAgICAgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKKyAgICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCisKKyAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJworICAgICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcworICAgICAgICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYPXllcworICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD0nOicKKyAgICAgICAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCisgICAgICAgIGZpbGVfbGlzdF9zcGVjX0NYWD0nJHt3bH0tZiwnCisKKyAgICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQorICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjaworICAgICAgICAgICMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKworCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKKwkgICAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJICB0aGVuCisJICAgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorCSAgICA6CisJICBlbHNlCisJICAgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKwkgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD11bnN1cHBvcnRlZAorCSAgICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisJICAgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisJICAgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworCSAgICBoYXJkY29kZV9taW51c19MX0NYWD15ZXMKKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKKwkgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9CisJICBmaQorICAgICAgICAgIGVzYWMKKyAgICAgICAgICBzaGFyZWRfZmxhZz0nLXNoYXJlZCcKKwkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKKwkgIGZpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAjIG5vdCB1c2luZyBnY2MKKyAgICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKwkgICMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CisJICBzaGFyZWRfZmxhZz0nLUcnCisgICAgICAgICAgZWxzZQorCSAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgICAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKKwkgICAgZWxzZQorCSAgICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCisJICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKworICAgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS1iZXhwYWxsJworICAgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKKyAgICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvCisJIyBleHBvcnQuCisgICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9eWVzCisgICAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgICAgICAgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAorICAgICAgICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKyAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9Jy1iZXJvaycKKyAgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkKKyAgICAgICAgICAjIGV4ZWN1dGFibGUuCisgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworbHRfYWl4X2xpYnBhdGhfc2VkPScKKyAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJL14wLyB7CisJICAgIHMvXjAgICpcKC4qXCkkL1wxLworCSAgICBwCisJfQorICAgIH0nCithaXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KK2lmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKyAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCitmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKworICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCisgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuICRFQ0hPICJYJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgfCAkWHNlZDsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorICAgICAgICBlbHNlCisgICAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworCSAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9Ii16IG5vZGVmcyIKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisgICAgICAgICAgZWxzZQorCSAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKwkgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorCSAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCitsdF9haXhfbGlicGF0aF9zZWQ9JworICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKwkvXjAvIHsKKwkgICAgcy9eMCAgKlwoLipcKSQvXDEvCisJICAgIHAKKwl9CisgICAgfScKK2FpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgoraWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKK2ZpCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2lmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCSAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LWJlcm5vdG9rJworCSAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAke3dsfS1iZXJvaycKKwkgICAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCisJICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJGNvbnZlbmllbmNlJworCSAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9eWVzCisJICAgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZAorCSAgICAjIGxpYnJhcmllcy4KKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICA7OworCisgICAgICBiZW9zKikKKwlpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9dW5zdXBwb3J0ZWQKKwkgICMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKwkgICMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKKwkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwllbHNlCisJICBsZF9zaGxpYnNfQ1hYPW5vCisJZmkKKwk7OworCisgICAgICBjaG9ydXMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgICopCisJICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgIGxkX3NobGlic19DWFg9bm8KKwkgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgQ1hYKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKyAgICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKKyAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPXVuc3VwcG9ydGVkCisgICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KKyAgICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFg9eWVzCisKKyAgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKyAgICAgICAgICAjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCisgICAgICAgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKwkgICAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICAgIGVsc2UKKwkgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgICAgZml+CisgICAgICAgICAgJENDIC1zaGFyZWQgLW5vc3RkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworICAgICAgICBlbHNlCisgICAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKworCisgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubworICBoYXJkY29kZV9kaXJlY3RfQ1hYPW5vCisgIGhhcmRjb2RlX2F1dG9tYXRpY19DWFg9eWVzCisgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPXVuc3VwcG9ydGVkCisgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJworICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKKyAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSIkX2x0X2Rhcl9hbGxvd191bmRlZmluZWQiCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgIGlmb3J0KikgX2x0X2Rhcl9jYW5fc2hhcmVkPXllcyA7OworICAgICAqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9JEdDQyA7OworICBlc2FjCisgIGlmIHRlc3QgIiRfbHRfZGFyX2Nhbl9zaGFyZWQiID0gInllcyI7IHRoZW4KKyAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1lY2hvCisgICAgYXJjaGl2ZV9jbWRzX0NYWD0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCR7X2x0X2RzeW11dGlsfSIKKyAgICBtb2R1bGVfY21kc19DWFg9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2RzeW11dGlsfSIKKyAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAke19sdF9kYXJfc2luZ2xlX21vZH0ke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorICAgIG1vZHVsZV9leHBzeW1fY21kc19DWFg9InNlZCAtZSAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICAgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgIT0gInllcyI7IHRoZW4KKyAgICAgIGFyY2hpdmVfY21kc19DWFg9IlwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJHtsaWJ9LW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCR7bGlifS1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcke19sdF9kc3ltdXRpbH0iCisgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCR7bGlifS1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwke2xpYn0tbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBmaQorCisgIGVsc2UKKyAgbGRfc2hsaWJzX0NYWD1ubworICBmaQorCisJOzsKKworICAgICAgZGd1eCopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgZWMrKyopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgICAgZ2hjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBmcmVlYnNkWzEyXSopCisgICAgICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgcmVwb3J0ZWQgdG8gYmUgZmFpcmx5IGJyb2tlbiBiZWZvcmUKKwkjIHN3aXRjaCB0byBFTEYKKyAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgICA7OworCisgICAgICBmcmVlYnNkLWVsZiopCisgICAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubworICAgICAgICA7OworCisgICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICAgICMgRnJlZUJTRCAzIGFuZCBsYXRlciB1c2UgR05VIEMrKyBhbmQgR05VIGxkIHdpdGggc3RhbmRhcmQgRUxGCisgICAgICAgICMgY29udmVudGlvbnMKKyAgICAgICAgbGRfc2hsaWJzX0NYWD15ZXMKKyAgICAgICAgOzsKKworICAgICAgZ251KikKKyAgICAgICAgOzsKKworICAgICAgaHB1eDkqKQorICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKyAgICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tRScKKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKKyAgICAgICAgaGFyZGNvZGVfbWludXNfTF9DWFg9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkJCQkgICAgICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKKwkJCQkgICAgICAgICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKworICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKyAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgICBhQ0MqKQorICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1iICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisgICAgICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKyAgICAgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorICAgICAgICAgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKyAgICAgICAgICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKyAgICAgICAgICAgICMgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRFR1JFUCAiXC1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyAkRUNITyAiWCRsaXN0IiB8ICRYc2VkJworICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBocHV4MTAqfGhwdXgxMSopCisgICAgICAgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfStiICR7d2x9JGxpYmRpcicKKwkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKworICAgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICAgICAgICBocHBhKjY0KnxpYTY0KikKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisJICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tRScKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgIGZpCisgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCisgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPW5vCisgICAgICAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV9DWFg9eWVzCisgICAgICAgICAgICBoYXJkY29kZV9taW51c19MX0NYWD15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAorCQkJCQkgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdAorCQkJCQkgICAgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICAgIGFDQyopCisJICAgIGNhc2UgJGhvc3RfY3B1IGluCisJICAgICAgaHBwYSo2NCopCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICA7OworCSAgICAgIGlhNjQqKQorCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgICAqKQorCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICA7OworCSAgICBlc2FjCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRHUkVQICJcLUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7ICRFQ0hPICJYJGxpc3QiIHwgJFhzZWQnCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCisJICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICAgICAgICBocHBhKjY0KikKKwkgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgICAgaWE2NCopCisJICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIDs7CisJICAgICAgICAgICopCisJICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgIGVzYWMKKwkgICAgICBmaQorCSAgICBlbHNlCisJICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGludGVyaXhbMy05XSopCisJaGFyZGNvZGVfZGlyZWN0X0NYWD1ubworCWhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tRScKKwkjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCisJIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQorCSMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKKwkjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCisJIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluaworCSMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgorCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisJOzsKKyAgICAgIGlyaXg1KiB8IGlyaXg2KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgU0dJIEMrKworCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtYWxsIC1tdWx0aWdvdCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC1hciIsIHdoZXJlICJDQyIgaXMgdGhlIElSSVggQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtYXIgLVdSLC11IC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgZWxzZQorCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgLW8gJGxpYicKKwkgICAgICBmaQorCSAgICBmaQorCSAgICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06CisgICAgICAgIGluaGVyaXRfcnBhdGhfQ1hYPXllcworICAgICAgICA7OworCisgICAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgS0NDKikKKwkgICAgIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgorCisJICAgICMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKKwkgICAgIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQorCSAgICAjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgorCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFteKCkwLTlBLVphLXp7fV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJworCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbXigpMC05QS1aYS16e31dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzOyBtdiBcJHRlbXBsaWIgJGxpYicKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxIHwgJEdSRVAgImxkImA7IHJtIC1mIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQ7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyAkRUNITyAiWCRsaXN0IiB8ICRYc2VkJworCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC1Cc3RhdGljIiwgd2hlcmUgIkNDIiBpcyB0aGUgS0FJIEMrKyBjb21waWxlci4KKwkgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworCSAgaWNwYyogfCBlY3BjKiApCisJICAgICMgSW50ZWwgQysrCisJICAgIHdpdGhfZ251X2xkPXllcworCSAgICAjIHZlcnNpb24gOC4wIGFuZCBhYm92ZSBvZiBpY3BjIGNob2tlIG9uIG11bHRpcGx5IGRlZmluZWQgc3ltYm9scworCSAgICAjIGlmIHdlIGFkZCAkcHJlZGVwX29iamVjdHMgYW5kICRwb3N0ZGVwX29iamVjdHMsIGhvd2V2ZXIgNy4xIGFuZAorCSAgICAjIGVhcmxpZXIgZG8gbm90IGFkZCB0aGUgb2JqZWN0cyB0aGVtc2VsdmVzLgorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKwkgICAgICAqIlZlcnNpb24gNy4iKikKKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJCTs7CisJICAgICAgKikgICMgVmVyc2lvbiA4LjAgb3IgbmV3ZXIKKwkgICAgICAgIHRtcF9pZHluPQorCSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkJICBpYTY0KikgdG1wX2lkeW49JyAtaV9keW5hbWljJzs7CisJCWVzYWMKKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkJYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkJOzsKKwkgICAgZXNhYworCSAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgOzsKKyAgICAgICAgICBwZ0NDKiB8IHBnY3BwKikKKyAgICAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCisJICAgIGNhc2UgYCRDQyAtVmAgaW4KKwkgICAgKnBnQ0NcIFsxLTVdKiB8ICpwZ2NwcFwgWzEtNV0qKQorCSAgICAgIHByZWxpbmtfY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisJCXJtIC1yZiAkdHBsZGlyfgorCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvYmpzICRsaWJvYmpzICRjb21waWxlX2RlcGxpYnN+CisJCWNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgIicKKwkgICAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9sZG9ianMkb2xkX2RlcGxpYnN+CisJCSRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGB+CisJCSRSQU5MSUIgJG9sZGxpYicKKwkgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorCQlybSAtcmYgJHRwbGRpcn4KKwkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CisJCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCisJICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisJCXJtIC1yZiAkdHBsZGlyfgorCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKwkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICAgIDs7CisJICAgICopICMgVmVyc2lvbiA2IHdpbGwgdXNlIHdlYWsgc3ltYm9scworCSAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworCSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICAgIDs7CisJICAgIGVzYWMKKworCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRFQ0hPIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICAgICAgICAgIDs7CisJICBjeHgqKQorCSAgICAjIENvbXBhcSBDKysKKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgIC1vICRsaWIgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMnCisKKwkgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1ycGF0aCAkbGliZGlyJworCSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06CisKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkImA7IHRlbXBsaXN0PWAkRUNITyAiWCR0ZW1wbGlzdCIgfCAkWHNlZCAtZSAicy9cKF4uKmxkLipcKVwoIC4qbGQgLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyAkRUNITyAiWCRsaXN0IiB8ICRYc2VkJworCSAgICA7OworCSAgeGwqKQorCSAgICAjIElCTSBYTCA4LjAgb24gUFBDLCB3aXRoIEdOVSBsZAorCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtcW1rc2hyb2JqICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisJICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJCWNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkJZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJCSRDQyAtcW1rc2hyb2JqICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworCSAgICBmaQorCSAgICA7OworCSAgKikKKwkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJICAgICpTdW5cIEMqKQorCSAgICAgICMgU3VuIEMrKyA1LjkKKwkgICAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyAtemRlZnMnCisJICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scycKKwkgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLVIkbGliZGlyJworCSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkRUNITyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICAgICAgY29tcGlsZXJfbmVlZHNfb2JqZWN0X0NYWD15ZXMKKworCSAgICAgICMgTm90IHN1cmUgd2hldGhlciBzb21ldGhpbmcgYmFzZWQgb24KKwkgICAgICAjICRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxCisJICAgICAgIyB3b3VsZCBiZSBiZXR0ZXIuCisJICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCisKKwkgICAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgICAjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkgICAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwllc2FjCisJOzsKKworICAgICAgbHlueG9zKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJbGRfc2hsaWJzX0NYWD1ubworCTs7CisKKyAgICAgIG04OGsqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworCTs7CisKKyAgICAgIG12cyopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgY3h4KikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKwkgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisJZXNhYworCTs7CisKKyAgICAgIG5ldGJzZCopCisgICAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJICBhcmNoaXZlX2NtZHNfQ1hYPSckTEQgLUJzaGFyZWFibGUgIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGxpbmtlcl9mbGFncycKKwkgIHdsYXJjPQorCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1SJGxpYmRpcicKKwkgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCisJICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubworCWZpCisJIyBXb3JrYXJvdW5kIHNvbWUgYnJva2VuIHByZS0xLjUgdG9vbGNoYWlucworCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIGNvbmZ0ZXN0LiRvYmpleHQgfCAkU0VEIC1lICJzOi1sZ2NjIC1sYyAtbGdjYzo6IicKKwk7OworCisgICAgICAqbnRvKiB8ICpxbngqKQorICAgICAgICBsZF9zaGxpYnNfQ1hYPXllcworCTs7CisKKyAgICAgIG9wZW5ic2QyKikKKyAgICAgICAgIyBDKysgc2hhcmVkIGxpYnJhcmllcyBhcmUgZmFpcmx5IGJyb2tlbgorCWxkX3NobGlic19DWFg9bm8KKwk7OworCisgICAgICBvcGVuYnNkKikKKwlpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorCSAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKKwkgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCisJICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYPXllcworCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tRScKKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworCSAgZmkKKwkgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWVjaG8KKwllbHNlCisJICBsZF9zaGxpYnNfQ1hYPW5vCisJZmkKKwk7OworCisgICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgS0NDKikKKwkgICAgIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgorCisJICAgICMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKKwkgICAgIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQorCSAgICAjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgorCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFteKCkwLTlBLVphLXp7fV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICIkbGliIiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCisKKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyB0aGUgS0FJIEMrKyBjb21waWxlci4KKwkgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgIG9zZjMqKSBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnIDs7CisJICAgICAgKikgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtbyAkb2xkbGliICRvbGRvYmpzJyA7OworCSAgICBlc2FjCisJICAgIDs7CisgICAgICAgICAgUkNDKikKKwkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgICBjeHgqKQorCSAgICBjYXNlICRob3N0IGluCisJICAgICAgb3NmMyopCisJICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkJOzsKKwkgICAgICAqKQorCSAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lfgorCSAgICAgICAgICBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgorCSAgICAgICAgICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lICR7d2x9LWlucHV0ICR7d2x9JGxpYi5leHAgIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+CisJICAgICAgICAgICRSTSAkbGliLmV4cCcKKwkgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctcnBhdGggJGxpYmRpcicKKwkJOzsKKwkgICAgZXNhYworCisJICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiIHwgJEdSRVAgLXYgImxkOiJgOyB0ZW1wbGlzdD1gJEVDSE8gIlgkdGVtcGxpc3QiIHwgJFhzZWQgLWUgInMvXCheLipsZC4qXClcKCAuKmxkLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyAkRUNITyAiWCRsaXN0IiB8ICRYc2VkJworCSAgICA7OworCSAgKikKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgICBvc2YzKikKKwkgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkJICA7OworCSAgICAgICAgKikKKwkgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJCSAgOzsKKwkgICAgICBlc2FjCisKKwkgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKworCSAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAiXC1MIicKKworCSAgICBlbHNlCisJICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHBzb3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgICA7OworCisgICAgICBzdW5vczQqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBTdW4gQysrIDQueAorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICAgIGxjYyopCisJICAgICMgTHVjaWQKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHNvbGFyaXMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcworCSAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyAtemRlZnMnCisJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAgICAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHt3bH0tTSAke3dsfSRsaWIuZXhwIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1SJGxpYmRpcicKKwkgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKwkgICAgY2FzZSAkaG9zdF9vcyBpbgorCSAgICAgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikgOzsKKwkgICAgICAqKQorCQkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAorCQkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLgorCSAgICAgICAgIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKKwkJd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JworCSAgICAgICAgOzsKKwkgICAgZXNhYworCSAgICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKKworCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICBnY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisKKwkgICAgIyBUaGUgQysrIGNvbXBpbGVyIG11c3QgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGFyY2hpdmUuCisJICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgJExERkxBR1MgLWFyY2hpdmUgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEdOVSBDKysgY29tcGlsZXIgd2l0aCBTb2xhcmlzIGxpbmtlcgorCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwkgICAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyAke3dsfS16ICR7d2x9ZGVmcycKKwkgICAgICBpZiAkQ0MgLS12ZXJzaW9uIHwgJEdSRVAgLXYgJ14yXC43JyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJCSAgJENDIC1zaGFyZWQgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCisJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgIlwtTCInCisJICAgICAgZWxzZQorCSAgICAgICAgIyBnKysgMi43IGFwcGVhcnMgdG8gcmVxdWlyZSBgLUcnIE5PVCBgLXNoYXJlZCcgb24gdGhpcworCSAgICAgICAgIyBwbGF0Zm9ybS4KKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkJICAkQ0MgLUcgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCisJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtRyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJcLUwiJworCSAgICAgIGZpCisKKwkgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tUiAkd2wkbGliZGlyJworCSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkJc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKSA7OworCQkqKQorCQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JworCQkgIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuWzAyNF0qKQorICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScke3dsfS16LHRleHQnCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgIENDKikKKwkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKwkjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAorCSMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KKwkjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKwkjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0CisJIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCisJIyBhcyAteiBkZWZzLgorCW5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nJHt3bH0teix0ZXh0JworCWFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nJHt3bH0teixub2RlZnMnCisJYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCisJaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tUiwkbGliZGlyJworCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPSc6JworCWxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LUJleHBvcnQnCisJcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICA7OworCSAgKikKKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICA7OworCWVzYWMKKyAgICAgIDs7CisKKyAgICAgIHRhbmRlbSopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgTkNDKikKKwkgICAgIyBOb25TdG9wLVVYIE5DQyAzLjIwCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICB2eHdvcmtzKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIGxkX3NobGlic19DWFg9bm8KKyAgICAgICAgOzsKKworICAgICAgKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIGxkX3NobGlic19DWFg9bm8KKyAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxkX3NobGlic19DWFgiID4mNQorJGFzX2VjaG8gIiRsZF9zaGxpYnNfQ1hYIiA+JjY7IH0KKyAgICB0ZXN0ICIkbGRfc2hsaWJzX0NYWCIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKKyAgICBHQ0NfQ1hYPSIkR1hYIgorICAgIExEX0NYWD0iJExEIgorCisgICAgIyMgQ0FWRUFUIEVNUFRPUjoKKyAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorICAgICMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisgICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCisgICAgIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0IGJlaW5nIGxpbmtlZDoKK3ByZWRlcF9vYmplY3RzX0NYWD0KK3Bvc3RkZXBfb2JqZWN0c19DWFg9CitwcmVkZXBzX0NYWD0KK3Bvc3RkZXBzX0NYWD0KK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9CisKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitjbGFzcyBGb28KK3sKK3B1YmxpYzoKKyAgRm9vICh2b2lkKSB7IGEgPSAwOyB9Citwcml2YXRlOgorICBpbnQgYTsKK307CitfTFRfRU9GCisKK2lmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKKyAgIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCisKKyAgIyBTZW50aW5lbCB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBvciBub3Qgd2UgYXJlIGJlZm9yZQorICAjIHRoZSBjb25mdGVzdCBvYmplY3QgZmlsZS4KKyAgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT1ubworCisgIGZvciBwIGluIGBldmFsICIkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQiYDsgZG8KKyAgICBjYXNlICRwIGluCisKKyAgICAtTCogfCAtUiogfCAtbCopCisgICAgICAgIyBTb21lIGNvbXBpbGVycyBwbGFjZSBzcGFjZSBiZXR3ZWVuICIte0wsUn0iIGFuZCB0aGUgcGF0aC4KKyAgICAgICAjIFJlbW92ZSB0aGUgc3BhY2UuCisgICAgICAgaWYgdGVzdCAkcCA9ICItTCIgfHwKKyAgICAgICAgICB0ZXN0ICRwID0gIi1SIjsgdGhlbgorCSBwcmV2PSRwCisJIGNvbnRpbnVlCisgICAgICAgZWxzZQorCSBwcmV2PQorICAgICAgIGZpCisKKyAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgorCSBjYXNlICRwIGluCisJIC1MKiB8IC1SKikKKwkgICAjIEludGVybmFsIGNvbXBpbGVyIGxpYnJhcnkgcGF0aHMgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhvc2UKKwkgICAjIHByb3ZpZGVkIHRoZSB1c2VyLiAgVGhlIHBvc3RkZXBzIGFscmVhZHkgY29tZSBhZnRlciB0aGUKKwkgICAjIHVzZXIgc3VwcGxpZWQgbGlicyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgdGhlbS4KKwkgICBpZiB0ZXN0IC16ICIkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWCI7IHRoZW4KKwkgICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9IiR7cHJldn0ke3B9IgorCSAgIGVsc2UKKwkgICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9IiR7Y29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWH0gJHtwcmV2fSR7cH0iCisJICAgZmkKKwkgICA7OworCSAjIFRoZSAiLWwiIGNhc2Ugd291bGQgbmV2ZXIgY29tZSBiZWZvcmUgdGhlIG9iamVjdCBiZWluZworCSAjIGxpbmtlZCwgc28gZG9uJ3QgYm90aGVyIGhhbmRsaW5nIHRoaXMgY2FzZS4KKwkgZXNhYworICAgICAgIGVsc2UKKwkgaWYgdGVzdCAteiAiJHBvc3RkZXBzX0NYWCI7IHRoZW4KKwkgICBwb3N0ZGVwc19DWFg9IiR7cHJldn0ke3B9IgorCSBlbHNlCisJICAgcG9zdGRlcHNfQ1hYPSIke3Bvc3RkZXBzX0NYWH0gJHtwcmV2fSR7cH0iCisJIGZpCisgICAgICAgZmkKKyAgICAgICA7OworCisgICAgKi4kb2JqZXh0KQorICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3Qgb2JqZWN0IGZpbGUgb25seSBzaG93cyB1cAorICAgICAgICMgb25jZSBpbiB0aGUgY29tcGlsZXIgb3V0cHV0LgorICAgICAgIGlmIHRlc3QgIiRwIiA9ICJjb25mdGVzdC4kb2JqZXh0IjsgdGhlbgorCSBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPXllcworCSBjb250aW51ZQorICAgICAgIGZpCisKKyAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgorCSBpZiB0ZXN0IC16ICIkcHJlZGVwX29iamVjdHNfQ1hYIjsgdGhlbgorCSAgIHByZWRlcF9vYmplY3RzX0NYWD0iJHAiCisJIGVsc2UKKwkgICBwcmVkZXBfb2JqZWN0c19DWFg9IiRwcmVkZXBfb2JqZWN0c19DWFggJHAiCisJIGZpCisgICAgICAgZWxzZQorCSBpZiB0ZXN0IC16ICIkcG9zdGRlcF9vYmplY3RzX0NYWCI7IHRoZW4KKwkgICBwb3N0ZGVwX29iamVjdHNfQ1hYPSIkcCIKKwkgZWxzZQorCSAgIHBvc3RkZXBfb2JqZWN0c19DWFg9IiRwb3N0ZGVwX29iamVjdHNfQ1hYICRwIgorCSBmaQorICAgICAgIGZpCisgICAgICAgOzsKKworICAgICopIDs7ICMgSWdub3JlIHRoZSByZXN0LgorCisgICAgZXNhYworICBkb25lCisKKyAgIyBDbGVhbiB1cC4KKyAgcm0gLWYgYS5vdXQgYS5leGUKK2Vsc2UKKyAgZWNobyAibGlidG9vbC5tNDogZXJyb3I6IHByb2JsZW0gY29tcGlsaW5nIENYWCB0ZXN0IHByb2dyYW0iCitmaQorCiskUk0gLWYgY29uZmVzdC4kb2JqZXh0CisKKyMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCitjYXNlICRob3N0X29zIGluCitpbnRlcml4WzMtOV0qKQorICAjIEludGVyaXggMy41IGluc3RhbGxzIGNvbXBsZXRlbHkgaG9zZWQgLmxhIGZpbGVzIGZvciBDKyssIHNvIHJhdGhlciB0aGFuCisgICMgaGFjayBhbGwgYXJvdW5kIGl0LCBsZXQncyBqdXN0IHRydXN0ICJnKysiIHRvIERUUlQuCisgIHByZWRlcF9vYmplY3RzX0NYWD0KKyAgcG9zdGRlcF9vYmplY3RzX0NYWD0KKyAgcG9zdGRlcHNfQ1hYPQorICA7OworCitsaW51eCopCisgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorICAqU3VuXCBDKikKKyAgICAjIFN1biBDKysgNS45CisKKyAgICAjIFRoZSBtb3JlIHN0YW5kYXJkcy1jb25mb3JtaW5nIHN0bHBvcnQ0IGxpYnJhcnkgaXMKKyAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKKyAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCisgICAgIyAtbGlicmFyeT1zdGxwb3J0NCBkZXBlbmRzIG9uIGl0LgorICAgIGNhc2UgIiAkQ1hYICRDWFhGTEFHUyAiIGluCisgICAgKiIgLWxpYnJhcnk9c3RscG9ydDQgIiopCisgICAgICBzb2xhcmlzX3VzZV9zdGxwb3J0ND15ZXMKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KKyAgICAgIHBvc3RkZXBzX0NYWD0nLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJworICAgIGZpCisgICAgOzsKKyAgZXNhYworICA7OworCitzb2xhcmlzKikKKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgQ0MqKQorICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcworICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZworICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKKyAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCisgICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KKyAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKKyAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIEFkZGluZyB0aGlzIHJlcXVpcmVzIGEga25vd24tZ29vZCBzZXR1cCBvZiBzaGFyZWQgbGlicmFyaWVzIGZvcgorICAgICMgU3VuIGNvbXBpbGVyIHZlcnNpb25zIGJlZm9yZSA1LjYsIGVsc2UgUElDIG9iamVjdHMgZnJvbSBhbiBvbGQKKyAgICAjIGFyY2hpdmUgd2lsbCBiZSBsaW5rZWQgaW50byB0aGUgb3V0cHV0LCBsZWFkaW5nIHRvIHN1YnRsZSBidWdzLgorICAgIGlmIHRlc3QgIiRzb2xhcmlzX3VzZV9zdGxwb3J0NCIgIT0geWVzOyB0aGVuCisgICAgICBwb3N0ZGVwc19DWFg9Jy1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgOzsKK2VzYWMKKworCitjYXNlICIgJHBvc3RkZXBzX0NYWCAiIGluCisqIiAtbGMgIiopIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubyA7OworZXNhYworIGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFg9CitpZiB0ZXN0IC1uICIke2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFh9IjsgdGhlbgorIGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFg9YGVjaG8gIiAke2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFh9IiB8ICR7U0VEfSAtZSAncyEgLUwhICFnJyAtZSAncyFeICEhJ2AKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0KK2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorCisgICMgQysrIHNwZWNpZmljIGNhc2VzIGZvciBwaWMsIHN0YXRpYywgd2wsIGV0Yy4KKyAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1zdGF0aWMnCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0CisgICAgICAgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICAgICAgICMgbGlrZSBgLW02ODA0MCcuCisgICAgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisgICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCisgICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctRERMTF9FWFBPUlQnCisgICAgICA7OworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKyAgICAqZGpncHAqKQorICAgICAgIyBESkdQUCBkb2VzIG5vdCBzdXBwb3J0IHNoYXJlZCBsaWJyYXJpZXMgYXQgYWxsCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CisgICAgICA7OworICAgIGludGVyaXhbMy05XSopCisgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgorICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCisgICAgICA7OworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKKyAgICAgICMgUEEgSFAtVVguICBPbiBJQTY0IEhQLVVYLCBQSUMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBwaWMgZmxhZworICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KikKKwk7OworICAgICAgKikKKwlsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworICAgICpxbngqIHwgKm50byopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKyAgICAqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4WzQtOV0qKQorCSMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKwlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCisJZWxzZQorCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCisJZmkKKwk7OworICAgICAgY2hvcnVzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCWN4Y2g2OCopCisJICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgIyBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCBDWFgpPSItLW5vX2F1dG9faW5zdGFudGlhdGlvbiAtdSBfX21haW4gLXUgX19wcmVtYWluIC11IF9hYm9ydCAtciAkQ09PTF9ESVIvbGliL2xpYk9yYi5hICRNVk1FX0RJUi9saWIvQ0MvbGliQy5hICRNVk1FX0RJUi9saWIvY2xhc3NpeC9saWJjeC5zLmEiCisJICA7OworCWVzYWMKKwk7OworICAgICAgZGd1eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGVjKysqKQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJworCSAgICA7OworCSAgZ2hjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXBpYycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisJIyBGcmVlQlNEIHVzZXMgR05VIEMrKworCTs7CisgICAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKwkgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisJICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPScrWicKKwkgICAgZmkKKwkgICAgOzsKKwkgIGFDQyopCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJworCSAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICBocHBhKjY0KnxpYTY0KikKKwkgICAgICAjICtaIHRoZSBkZWZhdWx0CisJICAgICAgOzsKKwkgICAgKikKKwkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9JytaJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBpbnRlcml4KikKKwkjIFRoaXMgaXMgYzg5LCB3aGljaCBpcyBNUyBWaXN1YWwgQysrIChubyBzaGFyZWQgbGlicykKKwkjIEFueW9uZSB3YW50cyB0byBkbyBhIHBvcnQ/CisJOzsKKyAgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLW5vbl9zaGFyZWQnCisJICAgICMgQ0MgcGljIGZsYWcgLUtQSUMgaXMgdGhlIGRlZmF1bHQuCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBLQ0MqKQorCSAgICAjIEtBSSBDKysgQ29tcGlsZXIKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy0tYmFja2VuZCAtV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJworCSAgICA7OworCSAgZWNwYyogKQorCSAgICAjIG9sZCBJbnRlbCBDKysgZm9yIHg4Nl82NCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1zdGF0aWMnCisJICAgIDs7CisJICBpY3BjKiApCisJICAgICMgSW50ZWwgQysrLCB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KKwkgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1zdGF0aWMnCisJICAgIDs7CisJICBwZ0NDKiB8IHBnY3BwKikKKwkgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZwaWMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCisJICAgIDs7CisJICBjeHgqKQorCSAgICAjIENvbXBhcSBDKysKKwkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQorCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctbm9uX3NoYXJlZCcKKwkgICAgOzsKKwkgIHhsYyogfCB4bEMqKQorCSAgICAjIElCTSBYTCA4LjAgb24gUFBDCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1xcGljJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1xc3RhdGljbGluaycKKwkgICAgOzsKKwkgICopCisJICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSAgICAqU3VuXCBDKikKKwkgICAgICAjIFN1biBDKysgNS45CisJICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKKwkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJworCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctUW9wdGlvbiBsZCAnCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbHlueG9zKikKKwk7OworICAgICAgbTg4ayopCisJOzsKKyAgICAgIG12cyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGN4eCopCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLVcgYyxleHBvcnRhbGwnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQorCTs7CisgICAgICAqcW54KiB8ICpudG8qKQorICAgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMgLXNoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgS0NDKikKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy0tYmFja2VuZCAtV2wsJworCSAgICA7OworCSAgUkNDKikKKwkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJworCSAgICA7OworCSAgY3h4KikKKwkgICAgIyBEaWdpdGFsL0NvbXBhcSBDKysKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKKwkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLW5vbl9zaGFyZWQnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgcHNvcyopCisJOzsKKyAgICAgIHNvbGFyaXMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1Rb3B0aW9uIGxkICcKKwkgICAgOzsKKwkgIGdjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLVBJQycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBzdW5vczQqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgICMgU3VuIEMrKyA0LngKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJworCSAgICA7OworCSAgbGNjKikKKwkgICAgIyBMdWNpZAorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1waWMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHRhbmRlbSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIE5DQyopCisJICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHZ4d29ya3MqKQorCTs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9DWFg9bm8KKwk7OworICAgIGVzYWMKKyAgZmkKKworY2FzZSAkaG9zdF9vcyBpbgorICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKKyAgKmRqZ3BwKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CisgICAgOzsKKyAgKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggLURQSUMiCisgICAgOzsKK2VzYWMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA+JjUKKyRhc19lY2hvICIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA+JjY7IH0KKworCisKKyMKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyMKK2lmIHRlc3QgLW4gIiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggd29ya3MuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYPW5vCisgICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgbHRfY29tcGlsZXJfZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCAtRFBJQyIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTkyNDM6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6MTkyNDc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCisgICAgICRFQ0hPICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFg9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgiID4mNjsgfQorCitpZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWCIgPSB4eWVzOyB0aGVuCisgICAgY2FzZSAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIGluCisgICAgICIiIHwgIiAiKikgOzsKKyAgICAgKikgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSIgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgOzsKKyAgICAgZXNhYworZWxzZQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KKyAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0NYWD1ubworZmkKKworZmkKKworCisKKyMKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyMKK3dsPSRsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWCBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFhcIgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFg9bm8KKyAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICBMREZMQUdTPSIkTERGTEFHUyAkbHRfdG1wX3N0YXRpY19mbGFnIgorICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCisgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisgICAgICAgJEVDSE8gIlgkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gY29uZnRlc3QuZXhwCisgICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWD15ZXMKKyAgICAgICBmaQorICAgICBlbHNlCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSAtciBjb25mdGVzdCoKKyAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCIgPiY2OyB9CisKK2lmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYIiA9IHh5ZXM7IHRoZW4KKyAgICA6CitlbHNlCisgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPQorZmkKKworCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD1ubworICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxOTM0MjogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOjE5MzQ2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICAkRUNITyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD15ZXMKKyAgICAgZmkKKyAgIGZpCisgICBjaG1vZCB1K3cgLiAyPiY1CisgICAkUk0gY29uZnRlc3QqCisgICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCisgICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KKyAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRSTSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKKyAgICRSTSBvdXQvKiAmJiBybWRpciBvdXQKKyAgIGNkIC4uCisgICAkUk0gLXIgY29uZnRlc3QKKyAgICRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiA+JjY7IH0KKworCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9bm8KKyAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAorICAgbWtkaXIgY29uZnRlc3QKKyAgIGNkIGNvbmZ0ZXN0CisgICBta2RpciBvdXQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTkzOTQ6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZToxOTM5ODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJEVDSE8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mNQorICAgJFJNIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgJFJNIC1yIGNvbmZ0ZXN0CisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY2OyB9CisKKworCisKK2hhcmRfbGlua3M9Im5vdHRlc3RlZCIKK2lmIHRlc3QgIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCisgICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MuLi4gIiA+JjY7IH0KKyAgaGFyZF9saW5rcz15ZXMKKyAgJFJNIGNvbmZ0ZXN0KgorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICB0b3VjaCBjb25mdGVzdC5hCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkX2xpbmtzIiA+JjUKKyRhc19lY2hvICIkaGFyZF9saW5rcyIgPiY2OyB9CisgIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mMjt9CisgICAgbmVlZF9sb2Nrcz13YXJuCisgIGZpCitlbHNlCisgIG5lZWRfbG9ja3M9bm8KK2ZpCisKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CisKKyAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXhbNC05XSopCisgICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCisgICAgIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQorICAgIGlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworICAgIGVsc2UKKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChzdWJzdHIoXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKyAgICBmaQorICAgIDs7CisgIHB3MzIqKQorICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSIkbHRkbGxfY21kcyIKKyAgOzsKKyAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKyAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87L14uKlsgXV9fbm1fXy9zL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIDs7CisgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCisgICAgbGlua19hbGxfZGVwbGlic19DWFg9bm8KKyAgOzsKKyAgKikKKyAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICA7OworICBlc2FjCisgIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsZF9zaGxpYnNfQ1hYIiA+JjUKKyRhc19lY2hvICIkbGRfc2hsaWJzX0NYWCIgPiY2OyB9Cit0ZXN0ICIkbGRfc2hsaWJzX0NYWCIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKK3dpdGhfZ251X2xkX0NYWD0kd2l0aF9nbnVfbGQKKworCisKKworCisKKyMKKyMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KKyMKK2Nhc2UgIngkYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiBpbgoreHx4eWVzKQorICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCisgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKKworICBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBjYXNlICRhcmNoaXZlX2NtZHNfQ1hYIGluCisgICAgKid+JyopCisgICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCisgICAgICA7OworICAgICckQ0MgJyopCisgICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCisgICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKKyAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluLi4uICIgPiY2OyB9CisgICAgICAkUk0gY29uZnRlc3QqCisgICAgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICBzb25hbWU9Y29uZnRlc3QKKyAgICAgICAgbGliPWNvbmZ0ZXN0CisgICAgICAgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAorICAgICAgICBkZXBsaWJzPQorICAgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bF9DWFgKKwlwaWNfZmxhZz0kbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCisgICAgICAgIGNvbXBpbGVyX2ZsYWdzPS12CisgICAgICAgIGxpbmtlcl9mbGFncz0tdgorICAgICAgICB2ZXJzdHJpbmc9CisgICAgICAgIG91dHB1dF9vYmpkaXI9LgorICAgICAgICBsaWJuYW1lPWNvbmZ0ZXN0CisgICAgICAgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWAorICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9CisgICAgICAgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhcmNoaXZlX2NtZHNfQ1hYIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiOyB9ID4mNQorICAoZXZhbCAkYXJjaGl2ZV9jbWRzX0NYWCAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKyAgICAgICAgdGhlbgorCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCisgICAgICAgIGVsc2UKKwkgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKKyAgICAgICAgZmkKKyAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCisgICAgICBlbHNlCisgICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorICAgICAgZmkKKyAgICAgICRSTSBjb25mdGVzdCoKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiA+JjUKKyRhc19lY2hvICIkYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiA+JjY7IH0KKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICA7OworZXNhYworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzLi4uICIgPiY2OyB9CisKK2xpYnJhcnlfbmFtZXNfc3BlYz0KK2xpYm5hbWVfc3BlYz0nbGliJG5hbWUnCitzb25hbWVfc3BlYz0KK3NocmV4dF9jbWRzPSIuc28iCitwb3N0aW5zdGFsbF9jbWRzPQorcG9zdHVuaW5zdGFsbF9jbWRzPQorZmluaXNoX2NtZHM9CitmaW5pc2hfZXZhbD0KK3NobGlicGF0aF92YXI9CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgordmVyc2lvbl90eXBlPW5vbmUKK2R5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgorbmVlZF9saWJfcHJlZml4PXVua25vd24KK2hhcmRjb2RlX2ludG9fbGlicz1ubworCisjIHdoZW4geW91IHNldCBuZWVkX3ZlcnNpb24gdG8gbm8sIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBjYXVzZSAtc2V0X3ZlcnNpb24KKyMgZmxhZ3MgdG8gYmUgbGVmdCB3aXRob3V0IGFyZ3VtZW50cworbmVlZF92ZXJzaW9uPXVua25vd24KKworY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUuYScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisKKyAgIyBBSVggMyBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyB3ZSBhcHBlbmQgYSBtYWpvciB2ZXJzaW9uIHRvIHRoZSBuYW1lLgorICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICA7OworCithaXhbNC05XSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBlbHNlCisgICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQorICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKKyAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCisgICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KKyAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDQgfCBhaXg0LlswMV0gfCBhaXg0LlswMV0uKikKKyAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCisJICAgZWNobyAnIHllcyAnCisJICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCAkR1JFUCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKwk6CisgICAgICBlbHNlCisJY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW4gbm90IGhhcmRjb2RlIGNvcnJlY3QKKyAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCisgICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KKyAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbworICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKKyAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIGVsc2UKKyAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCisgICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJworICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBmaQorICAgIHNobGlicGF0aF92YXI9TElCUEFUSAorICBmaQorICA7OworCithbWlnYW9zKikKKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgcG93ZXJwYykKKyAgICAjIFNpbmNlIEp1bHkgMjAwNyBBbWlnYU9TNCBvZmZpY2lhbGx5IHN1cHBvcnRzIC5zbyBsaWJyYXJpZXMuCisgICAgIyBXaGVuIGNvbXBpbGluZyB0aGUgZXhlY3V0YWJsZSwgYWRkIC11c2UtZHlubGQgLUxzb2JqczogdG8gdGhlIGNvbXBpbGVsaW5lLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIDs7CisgIG02OGspCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKKyAgICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgorICAgIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gJEVDSE8gIlgkbGliIiB8ICRYc2VkIC1lICdcJydzJV4uKi9cKFteL10qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJFJNIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworICAgIDs7CisgIGVzYWMKKyAgOzsKKworYmVvcyopCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgOzsKKworYnNkaVs0NV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAorICAjIC91c3IvWDExUjYvbGliICgvdXNyL1gxMSBpcyBhIGxpbmsgdG8gL3Vzci9YMTFSNiksIGJ1dCBsZXQgdXMgYWxsb3cKKyAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCisgIDs7CisKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgdmVyc2lvbl90eXBlPXdpbmRvd3MKKyAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIG5lZWRfdmVyc2lvbj1ubworICBuZWVkX2xpYl9wcmVmaXg9bm8KKworICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KKyAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBpZiB0ZXN0IC1uICdcJyckc3RyaXBtZSdcJycgJiYgdGVzdCAtbiAnXCcnJHN0cmlwbGliJ1wnJzsgdGhlbgorICAgICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKKyAgICAgIGZpJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICAgICRSTSBcJGRscGF0aCcKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgY3lnd2luKikKKyAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiAvbGliL3czMmFwaSAvbGliIC91c3IvbG9jYWwvbGliIgorICAgICAgOzsKKyAgICBtaW5ndyogfCBjZWdjYyopCisgICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAorICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgJEdSRVAgIl5saWJyYXJpZXM6IiB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRIIHByaW50ZWQgYnkKKyAgICAgICAgIyBtaW5ndyBnY2MsIGJ1dCB3ZSBhcmUgcnVubmluZyBvbiBDeWd3aW4uIEdjYyBwcmludHMgaXRzIHNlYXJjaAorICAgICAgICAjIHBhdGggd2l0aCA7IHNlcGFyYXRvcnMsIGFuZCB3aXRoIGRyaXZlIGxldHRlcnMuIFdlIGNhbiBoYW5kbGUgdGhlCisgICAgICAgICMgZHJpdmUgbGV0dGVycyAoY3lnd2luIGZpbGV1dGlscyB1bmRlcnN0YW5kcyB0aGVtKSwgc28gbGVhdmUgdGhlbSwKKyAgICAgICAgIyBlc3BlY2lhbGx5IGFzIHdlIG1pZ2h0IHBhc3MgZmlsZXMgZm91bmQgdGhlcmUgdG8gYSBtaW5ndyBvYmpkdW1wLAorICAgICAgICAjIHdoaWNoIHdvdWxkbid0IHVuZGVyc3RhbmQgYSBjeWd3aW5pZmllZCBwYXRoLiBBaGguCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisgICAgICBlbHNlCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICBmaQorICAgICAgOzsKKyAgICBwdzMyKikKKyAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKworICAqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworICAgIDs7CisgIGVzYWMKKyAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgIHNobGlicGF0aF92YXI9UEFUSAorICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZHlsZCIKKyAgdmVyc2lvbl90eXBlPWRhcndpbgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICisgIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJworCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJworICA7OworCitkZ3V4KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCitmcmVlYnNkMSopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldworICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KKyAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KKyAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKKyAgZWxzZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBmcmVlYnNkWzEyM10qKSBvYmpmb3JtYXQ9YW91dCA7OworICAgICopIG9iamZvcm1hdD1lbGYgOzsKKyAgICBlc2FjCisgIGZpCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKKyAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisgICAgZnJlZWJzZC1lbGYqKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBmcmVlYnNkLSopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgICAgIG5lZWRfdmVyc2lvbj15ZXMKKyAgICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBmcmVlYnNkMiopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIDs7CisgIGZyZWVic2QzLlswMV0qIHwgZnJlZWJzZGVsZjMuWzAxXSopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bMi05XSogfCBmcmVlYnNkZWxmMy5bMi05XSogfCBcCisgIGZyZWVic2Q0LlswLTVdIHwgZnJlZWJzZGVsZjQuWzAtNV0gfCBmcmVlYnNkNC4xLjEgfCBmcmVlYnNkZWxmNC4xLjEpCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgICopICMgZnJvbSA0LjYgb24sIGFuZCBEcmFnb25GbHkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGVzYWMKKyAgOzsKKworZ251KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2hwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCisgICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBzaHJleHRfY21kcz0nLnNvJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKKyAgICBlbHNlCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCisgICAgZmkKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgaHBwYSo2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgICopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICA7OworICBlc2FjCisgICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LgorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKKyAgOzsKKworaW50ZXJpeFszLTldKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7CisgICAgKikKKwlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisJCXZlcnNpb25fdHlwZT1saW51eAorCWVsc2UKKwkJdmVyc2lvbl90eXBlPWlyaXgKKwlmaSA7OworICBlc2FjCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBjYXNlICRob3N0X29zIGluCisgIGlyaXg1KiB8IG5vbnN0b3B1eCopCisgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorICAgIDs7CisgICopCisgICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAorICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCisgICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7CisgICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKKyAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OworICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQorICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKKyAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKKyMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KK2xpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAjIFNvbWUgYmludXRpbHMgbGQgYXJlIHBhdGNoZWQgdG8gc2V0IERUX1JVTlBBVEgKKyAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgIHNhdmVfbGliZGlyPSRsaWJkaXIKKyAgZXZhbCAibGliZGlyPS9mb287IHdsPVwiJGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYXCI7IFwKKyAgICAgICBMREZMQUdTPVwiXCRMREZMQUdTICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWFwiIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBpZiAgKCRPQkpEVU1QIC1wIGNvbmZ0ZXN0JGFjX2V4ZWV4dCkgMj4vZGV2L251bGwgfCBncmVwICJSVU5QQVRILiokbGliZGlyIiA+L2Rldi9udWxsOyB0aGVuIDoKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworZmkKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKyAgbGliZGlyPSRzYXZlX2xpYmRpcgorCisgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKyAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworCisgICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCisgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisgICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bCSBdKmh3Y2FwWwkgXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliICRsdF9sZF9leHRyYSIKKyAgZmkKKworICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KKyAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQorICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKKyAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKKyAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCisgICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgorICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJworICA7OworCituZXRic2RlbGYqLWdudSkKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCisgIDs7CisKK25ldGJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKKyAgZWxzZQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKKyAgZmkKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK25ld3NvczYpCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICA7OworCisqbnRvKiB8ICpxbngqKQorICB2ZXJzaW9uX3R5cGU9cW54CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdsZHFueC5zbycKKyAgOzsKKworb3BlbmJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIiCisgIG5lZWRfbGliX3ByZWZpeD1ubworICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKQluZWVkX3ZlcnNpb249eWVzIDs7CisgICAgKikJCQkJbmVlZF92ZXJzaW9uPW5vICA7OworICBlc2FjCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBvcGVuYnNkMi5bODldIHwgb3BlbmJzZDIuWzg5XS4qKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCTs7CisgICAgICAqKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKwk7OworICAgICAgZXNhYworICBlbHNlCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBmaQorICA7OworCitvczIqKQorICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCisgIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgdmVyc2lvbl90eXBlPW9zZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKKyAgOzsKKworcmRvcyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK3NvbGFyaXMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCisgIDs7CisKK3N1bm9zNCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgZmkKKyAgbmVlZF92ZXJzaW9uPXllcworICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgICAgc25pKQorICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisgICAgICA7OworICAgIHNpZW1lbnMpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgbW90b3JvbGEpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJworICAgICAgOzsKKyAgZXNhYworICA7OworCitzeXN2NCpNUCopCisgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KKyAgICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGZpCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNjbzMuMnY1KikKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKKyAgOzsKKwordHBmKikKKyAgIyBUUEYgaXMgYSBjcm9zcy10YXJnZXQgb25seS4gIFByZWZlcnJlZCBjcm9zcy1ob3N0ID0gR05VL0xpbnV4LgorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKwordXRzNCopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKK2VzYWMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQorJGFzX2VjaG8gIiRkeW5hbWljX2xpbmtlciIgPiY2OyB9Cit0ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKK2ZpCisKK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKK2ZpCitpZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiCitmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICIgPiY2OyB9CitoYXJkY29kZV9hY3Rpb25fQ1hYPQoraWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYIiB8fAorICAgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyX0NYWCIgfHwKKyAgIHRlc3QgIlgkaGFyZGNvZGVfYXV0b21hdGljX0NYWCIgPSAiWHllcyIgOyB0aGVuCisKKyAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgorICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0X0NYWCIgIT0gbm8gJiYKKyAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQorICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5CisgICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKKyAgICAgIyMgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgQ1hYKSIgIT0gbm8gJiYKKyAgICAgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0xfQ1hYIiAhPSBubzsgdGhlbgorICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCisgICAgaGFyZGNvZGVfYWN0aW9uX0NYWD1yZWxpbmsKKyAgZWxzZQorICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCisgICAgaGFyZGNvZGVfYWN0aW9uX0NYWD1pbW1lZGlhdGUKKyAgZmkKK2Vsc2UKKyAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKKyAgIyBkaXJlY3Rvcmllcy4KKyAgaGFyZGNvZGVfYWN0aW9uX0NYWD11bnN1cHBvcnRlZAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGFyZGNvZGVfYWN0aW9uX0NYWCIgPiY1CiskYXNfZWNobyAiJGhhcmRjb2RlX2FjdGlvbl9DWFgiID4mNjsgfQorCitpZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uX0NYWCIgPSByZWxpbmsgfHwKKyAgIHRlc3QgIiRpbmhlcml0X3JwYXRoX0NYWCIgPSB5ZXM7IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KK2VsaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgfHwKKyAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gbm87IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5CisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKK2ZpCisKKworCisKKworCisKKyAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisKKyAgQ0M9JGx0X3NhdmVfQ0MKKyAgTERDWFg9JExECisgIExEPSRsdF9zYXZlX0xECisgIEdDQz0kbHRfc2F2ZV9HQ0MKKyAgd2l0aF9nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKKyAgbHRfY3ZfcGF0aF9MRENYWD0kbHRfY3ZfcGF0aF9MRAorICBsdF9jdl9wYXRoX0xEPSRsdF9zYXZlX3BhdGhfTEQKKyAgbHRfY3ZfcHJvZ19nbnVfbGRjeHg9JGx0X2N2X3Byb2dfZ251X2xkCisgIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCitmaSAjIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCithY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisgY2xhc3MgRm9vIHsgaW50IGJhcjsgfTsKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICB3b3JraW5nX2N4eD15ZXMKK2Vsc2UKKyAgd29ya2luZ19jeHg9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB3b3JraW5nIGMrKyBjb21waWxlciBmb3VuZDogJHdvcmtpbmdfY3h4IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHdvcmtpbmcgYysrIGNvbXBpbGVyIGZvdW5kOiAkd29ya2luZ19jeHgiID4mNjt9CisgaWYgdGVzdCAieCR3b3JraW5nX2N4eCIgPSAieHllcyI7IHRoZW4KKyAgSEFWRV9DWFhfVFJVRT0KKyAgSEFWRV9DWFhfRkFMU0U9JyMnCitlbHNlCisgIEhBVkVfQ1hYX1RSVUU9JyMnCisgIEhBVkVfQ1hYX0ZBTFNFPQorZmkKKworCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInBlcmwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHBlcmw7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX1BFUkxfUEFUSCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJFBFUkxfUEFUSCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9QRVJMX1BBVEg9IiRQRVJMX1BBVEgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX1BFUkxfUEFUSD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9QRVJMX1BBVEgiICYmIGFjX2N2X3BhdGhfUEVSTF9QQVRIPSJubyIKKyAgOzsKK2VzYWMKK2ZpCitQRVJMX1BBVEg9JGFjX2N2X3BhdGhfUEVSTF9QQVRICitpZiB0ZXN0IC1uICIkUEVSTF9QQVRIIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFBFUkxfUEFUSCIgPiY1CiskYXNfZWNobyAiJFBFUkxfUEFUSCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitpZiB0ZXN0IHgkUEVSTF9QQVRIID0geG5vOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJDb3VsZCBub3QgZmluZCBwZXJsIiAiJExJTkVOTyIgNQorZmkKKworaWYgdGVzdCAieCRHU1RfRElTQUJMRV9QQVJTRSIgIT0geHllczsgdGhlbgorCisgICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImJpc29uIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBiaXNvbjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfQklTT05fUEFUSCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJEJJU09OX1BBVEggaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfQklTT05fUEFUSD0iJEJJU09OX1BBVEgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX0JJU09OX1BBVEg9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfQklTT05fUEFUSCIgJiYgYWNfY3ZfcGF0aF9CSVNPTl9QQVRIPSJubyIKKyAgOzsKK2VzYWMKK2ZpCitCSVNPTl9QQVRIPSRhY19jdl9wYXRoX0JJU09OX1BBVEgKK2lmIHRlc3QgLW4gIiRCSVNPTl9QQVRIIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEJJU09OX1BBVEgiID4mNQorJGFzX2VjaG8gIiRCSVNPTl9QQVRIIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgaWYgdGVzdCB4JEJJU09OX1BBVEggPSB4bm87IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiQ291bGQgbm90IGZpbmQgYmlzb24iICIkTElORU5PIiA1CisgIGZpCisKKyAgICAgICAgICBiaXNvbl9taW5fdmVyc2lvbj0xLjg3NQorICBiaXNvbl92ZXJzaW9uPWAkQklTT05fUEFUSCAtLXZlcnNpb24gfCBoZWFkIC1uIDEgfCAgc2VkICdzL15bXjAtOV0qLy8nIHwgc2VkICdzL1teMC05XSokLy8nIHwgY3V0IC1kJyAnIC1mMWAKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBiaXNvbiB2ZXJzaW9uICRiaXNvbl92ZXJzaW9uID49ICRiaXNvbl9taW5fdmVyc2lvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBiaXNvbiB2ZXJzaW9uICRiaXNvbl92ZXJzaW9uID49ICRiaXNvbl9taW5fdmVyc2lvbi4uLiAiID4mNjsgfQorCisgIGlmIHBlcmwgLXdlICJleGl0ICgodiRiaXNvbl92ZXJzaW9uIGdlIHYkYmlzb25fbWluX3ZlcnNpb24pID8gMCA6IDEpIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgIGVsc2UKKyAgICBhc19mbl9lcnJvciAkPyAibm8iICIkTElORU5PIiA1CisgIGZpCisKKworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZmxleCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZmxleDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfRkxFWF9QQVRIK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkRkxFWF9QQVRIIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX0ZMRVhfUEFUSD0iJEZMRVhfUEFUSCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfRkxFWF9QQVRIPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIHRlc3QgLXogIiRhY19jdl9wYXRoX0ZMRVhfUEFUSCIgJiYgYWNfY3ZfcGF0aF9GTEVYX1BBVEg9Im5vIgorICA7OworZXNhYworZmkKK0ZMRVhfUEFUSD0kYWNfY3ZfcGF0aF9GTEVYX1BBVEgKK2lmIHRlc3QgLW4gIiRGTEVYX1BBVEgiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRkxFWF9QQVRIIiA+JjUKKyRhc19lY2hvICIkRkxFWF9QQVRIIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgaWYgdGVzdCB4JEZMRVhfUEFUSCA9IHhubzsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJDb3VsZCBub3QgZmluZCBmbGV4IiAiJExJTkVOTyIgNQorICBmaQorCisgICAgICAgIGZsZXhfbWluX3ZlcnNpb249Mi41LjMxCisgIGZsZXhfdmVyc2lvbj1gJEZMRVhfUEFUSCAtLXZlcnNpb24gfCBoZWFkIC1uIDEgfCBzZWQgJ3MvXi4qIC8vJyB8IHNlZCAncy9bYS16QS1aXSokLy8nIHwgY3V0IC1kJyAnIC1mMWAKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmbGV4IHZlcnNpb24gJGZsZXhfdmVyc2lvbiA+PSAkZmxleF9taW5fdmVyc2lvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmbGV4IHZlcnNpb24gJGZsZXhfdmVyc2lvbiA+PSAkZmxleF9taW5fdmVyc2lvbi4uLiAiID4mNjsgfQorICBpZiBwZXJsIC13IDw8RU9GCisgICAgKFwkbWluX3ZlcnNpb25fbWFqb3IsIFwkbWluX3ZlcnNpb25fbWlub3IsIFwkbWluX3ZlcnNpb25fbWljcm8gKSA9ICIkZmxleF9taW5fdmVyc2lvbiIgPX4gLyhcZCspXC4oXGQrKVwuKFxkKykvOworICAgIChcJGZsZXhfdmVyc2lvbl9tYWpvciwgXCRmbGV4X3ZlcnNpb25fbWlub3IsIFwkZmxleF92ZXJzaW9uX21pY3JvICkgPSAiJGZsZXhfdmVyc2lvbiIgPX4gLyhcZCspXC4oXGQrKVwuKFxkKykvOworICAgIGV4aXQgKCgoXCRmbGV4X3ZlcnNpb25fbWFqb3IgPiBcJG1pbl92ZXJzaW9uX21ham9yKSB8fAorICAgICAoKFwkZmxleF92ZXJzaW9uX21ham9yID09IFwkbWluX3ZlcnNpb25fbWFqb3IpICYmCisgICAgICAoXCRmbGV4X3ZlcnNpb25fbWlub3IgPiBcJG1pbl92ZXJzaW9uX21pbm9yKSkgfHwKKyAgICAgKChcJGZsZXhfdmVyc2lvbl9tYWpvciA9PSBcJG1pbl92ZXJzaW9uX21ham9yKSAmJgorICAgICAgKFwkZmxleF92ZXJzaW9uX21pbm9yID09IFwkbWluX3ZlcnNpb25fbWlub3IpICYmCisgICAgICAoXCRmbGV4X3ZlcnNpb25fbWljcm8gPj0gXCRtaW5fdmVyc2lvbl9taWNybykpKQorICAgICA/IDAgOiAxKTsKK0VPRgorICB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgZWxzZQorICAgIGFzX2ZuX2Vycm9yICQ/ICJubyIgIiRMSU5FTk8iIDUKKyAgZmkKKworZmkKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJ2YWxncmluZCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgdmFsZ3JpbmQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX1ZBTEdSSU5EX1BBVEgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRWQUxHUklORF9QQVRIIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX1ZBTEdSSU5EX1BBVEg9IiRWQUxHUklORF9QQVRIIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9WQUxHUklORF9QQVRIPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIHRlc3QgLXogIiRhY19jdl9wYXRoX1ZBTEdSSU5EX1BBVEgiICYmIGFjX2N2X3BhdGhfVkFMR1JJTkRfUEFUSD0ibm8iCisgIDs7Citlc2FjCitmaQorVkFMR1JJTkRfUEFUSD0kYWNfY3ZfcGF0aF9WQUxHUklORF9QQVRICitpZiB0ZXN0IC1uICIkVkFMR1JJTkRfUEFUSCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRWQUxHUklORF9QQVRIIiA+JjUKKyRhc19lY2hvICIkVkFMR1JJTkRfUEFUSCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgaWYgdGVzdCAhICJ4JFZBTEdSSU5EX1BBVEgiID0gInhubyI7IHRoZW4KKyAgSEFWRV9WQUxHUklORF9UUlVFPQorICBIQVZFX1ZBTEdSSU5EX0ZBTFNFPScjJworZWxzZQorICBIQVZFX1ZBTEdSSU5EX1RSVUU9JyMnCisgIEhBVkVfVkFMR1JJTkRfRkFMU0U9CitmaQorCisKKworCisKKyAgICAgICAgICAgICAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtaW50cm9zcGVjdGlvbiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9pbnRyb3NwZWN0aW9uK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfaW50cm9zcGVjdGlvbjsKK2Vsc2UKKyAgZW5hYmxlX2ludHJvc3BlY3Rpb249YXV0bworZmkKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ29iamVjdC1pbnRyb3NwZWN0aW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBnb2JqZWN0LWludHJvc3BlY3Rpb24uLi4gIiA+JjY7IH0KKworICAgICAgICBjYXNlICRlbmFibGVfaW50cm9zcGVjdGlvbiBpbiAjKAorICBubykgOgorICAgICAgICAgICAgZm91bmRfaW50cm9zcGVjdGlvbj0ibm8gKGRpc2FibGVkLCB1c2UgLS1lbmFibGUtaW50cm9zcGVjdGlvbiB0byBlbmFibGUpIgorICAgICA7OyAjKAorICAgICAgeWVzKSA6CisgICAgICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wXCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgImdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICA6CitlbHNlCisgIGFzX2ZuX2Vycm9yICQ/ICJnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wIGlzIG5vdCBpbnN0YWxsZWQiICIkTElORU5PIiA1CitmaQorICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wID49IDAuNi44XCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgImdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAgPj0gMC42LjgiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICBmb3VuZF9pbnRyb3NwZWN0aW9uPXllcworZWxzZQorICBhc19mbl9lcnJvciAkPyAiWW91IG5lZWQgdG8gaGF2ZSBnb2JqZWN0LWludHJvc3BlY3Rpb24gPj0gMC42LjggaW5zdGFsbGVkIHRvIGJ1aWxkIEdTdHJlYW1lciIgIiRMSU5FTk8iIDUKK2ZpCisgICAgIDs7ICMoCisgICAgICBhdXRvKSA6CisgICAgICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wID49IDAuNi44XCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgImdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAgPj0gMC42LjgiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICBmb3VuZF9pbnRyb3NwZWN0aW9uPXllcworZWxzZQorICBmb3VuZF9pbnRyb3NwZWN0aW9uPW5vCitmaQorICAgICA7OyAjKAorICAqKSA6CisgICAgICAgICAgICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIC0tZW5hYmxlLWludHJvc3BlY3Rpb24sIHNob3VsZCBiZSBvbmUgb2YgW25vL2F1dG8veWVzXSIgIiRMSU5FTk8iIDUKKyAgICAgOzsKK2VzYWMKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGZvdW5kX2ludHJvc3BlY3Rpb24iID4mNQorJGFzX2VjaG8gIiRmb3VuZF9pbnRyb3NwZWN0aW9uIiA+JjY7IH0KKworICAgIElOVFJPU1BFQ1RJT05fU0NBTk5FUj0KKyAgICBJTlRST1NQRUNUSU9OX0NPTVBJTEVSPQorICAgIElOVFJPU1BFQ1RJT05fR0VORVJBVEU9CisgICAgSU5UUk9TUEVDVElPTl9HSVJESVI9CisgICAgSU5UUk9TUEVDVElPTl9UWVBFTElCRElSPQorICAgIGlmIHRlc3QgIngkZm91bmRfaW50cm9zcGVjdGlvbiIgPSAieHllcyI7IHRoZW4KKyAgICAgICBJTlRST1NQRUNUSU9OX1NDQU5ORVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z19pcl9zY2FubmVyIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCisgICAgICAgSU5UUk9TUEVDVElPTl9DT01QSUxFUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1nX2lyX2NvbXBpbGVyIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCisgICAgICAgSU5UUk9TUEVDVElPTl9HRU5FUkFURT1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1nX2lyX2dlbmVyYXRlIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCisgICAgICAgSU5UUk9TUEVDVElPTl9HSVJESVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z2lyZGlyIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCisgICAgICAgSU5UUk9TUEVDVElPTl9UWVBFTElCRElSPSIkKCRQS0dfQ09ORklHIC0tdmFyaWFibGU9dHlwZWxpYmRpciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wKSIKKyAgICAgICBJTlRST1NQRUNUSU9OX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAKKyAgICAgICBJTlRST1NQRUNUSU9OX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAorICAgICAgIElOVFJPU1BFQ1RJT05fTUFLRUZJTEU9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9ZGF0YWRpciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYC9nb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wL01ha2VmaWxlLmludHJvc3BlY3Rpb24KKyAgICBmaQorCisKKworCisKKworCisKKworICAgICBpZiB0ZXN0ICJ4JGZvdW5kX2ludHJvc3BlY3Rpb24iID0gInh5ZXMiOyB0aGVuCisgIEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFPQorICBIQVZFX0lOVFJPU1BFQ1RJT05fRkFMU0U9JyMnCitlbHNlCisgIEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFPScjJworICBIQVZFX0lOVFJPU1BFQ1RJT05fRkFMU0U9CitmaQorCisKKworCisKKyAgICBpZiB0ZXN0ICJ4JFBBQ0tBR0VfVEFSTkFNRSIgPSAieCIKKyAgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJJbnRlcm5hbCBlcnJvciAtIFBBQ0tBR0VfVEFSTkFNRSBub3Qgc2V0IiAiJExJTkVOTyIgNQorICBmaQorICBkb2NkaXI9IlwkKGRhdGFkaXIpL2RvYy8kUEFDS0FHRV9UQVJOQU1FLSRHU1RfTUFKT1JNSU5PUiIKKworICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kb2Nib29rIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RvY2Jvb2src2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9kb2Nib29rOworZWxzZQorICBlbmFibGVfZG9jYm9vaz1ubworZmkKKworCisgIGhhdmVfZG9jYm9vaz1ubworCisgIGlmIHRlc3QgeCRlbmFibGVfZG9jYm9vayA9IHh5ZXM7IHRoZW4KKworICAgICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRvY2Jvb2sycHMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGRvY2Jvb2sycHM7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0hBVkVfRE9DQk9PSzJQUytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRIQVZFX0RPQ0JPT0syUFMiOyB0aGVuCisgIGFjX2N2X3Byb2dfSEFWRV9ET0NCT09LMlBTPSIkSEFWRV9ET0NCT09LMlBTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfSEFWRV9ET0NCT09LMlBTPSJ5ZXMiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfSEFWRV9ET0NCT09LMlBTIiAmJiBhY19jdl9wcm9nX0hBVkVfRE9DQk9PSzJQUz0ibm8iCitmaQorZmkKK0hBVkVfRE9DQk9PSzJQUz0kYWNfY3ZfcHJvZ19IQVZFX0RPQ0JPT0syUFMKK2lmIHRlc3QgLW4gIiRIQVZFX0RPQ0JPT0syUFMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSEFWRV9ET0NCT09LMlBTIiA+JjUKKyRhc19lY2hvICIkSEFWRV9ET0NCT09LMlBTIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRvY2Jvb2syaHRtbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZG9jYm9vazJodG1sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19IQVZFX0RPQ0JPT0sySFRNTCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRIQVZFX0RPQ0JPT0sySFRNTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19IQVZFX0RPQ0JPT0sySFRNTD0iJEhBVkVfRE9DQk9PSzJIVE1MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfSEFWRV9ET0NCT09LMkhUTUw9InllcyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19IQVZFX0RPQ0JPT0sySFRNTCIgJiYgYWNfY3ZfcHJvZ19IQVZFX0RPQ0JPT0sySFRNTD0ibm8iCitmaQorZmkKK0hBVkVfRE9DQk9PSzJIVE1MPSRhY19jdl9wcm9nX0hBVkVfRE9DQk9PSzJIVE1MCitpZiB0ZXN0IC1uICIkSEFWRV9ET0NCT09LMkhUTUwiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSEFWRV9ET0NCT09LMkhUTUwiID4mNQorJGFzX2VjaG8gIiRIQVZFX0RPQ0JPT0sySFRNTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJqYWRldGV4Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBqYWRldGV4OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19IQVZFX0pBREVURVgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkSEFWRV9KQURFVEVYIjsgdGhlbgorICBhY19jdl9wcm9nX0hBVkVfSkFERVRFWD0iJEhBVkVfSkFERVRFWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0hBVkVfSkFERVRFWD0ieWVzIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIHRlc3QgLXogIiRhY19jdl9wcm9nX0hBVkVfSkFERVRFWCIgJiYgYWNfY3ZfcHJvZ19IQVZFX0pBREVURVg9Im5vIgorZmkKK2ZpCitIQVZFX0pBREVURVg9JGFjX2N2X3Byb2dfSEFWRV9KQURFVEVYCitpZiB0ZXN0IC1uICIkSEFWRV9KQURFVEVYIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEhBVkVfSkFERVRFWCIgPiY1CiskYXNfZWNobyAiJEhBVkVfSkFERVRFWCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwczJwZGYiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHBzMnBkZjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfSEFWRV9QUzJQREYrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkSEFWRV9QUzJQREYiOyB0aGVuCisgIGFjX2N2X3Byb2dfSEFWRV9QUzJQREY9IiRIQVZFX1BTMlBERiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0hBVkVfUFMyUERGPSJ5ZXMiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfSEFWRV9QUzJQREYiICYmIGFjX2N2X3Byb2dfSEFWRV9QUzJQREY9Im5vIgorZmkKK2ZpCitIQVZFX1BTMlBERj0kYWNfY3ZfcHJvZ19IQVZFX1BTMlBERgoraWYgdGVzdCAtbiAiJEhBVkVfUFMyUERGIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEhBVkVfUFMyUERGIiA+JjUKKyRhc19lY2hvICIkSEFWRV9QUzJQREYiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworCisgICAgIyAtViBvcHRpb24gYXBwZWFyZWQgaW4gMC42LjEwCisgICAgZG9jYm9vazJodG1sX21pbl92ZXJzaW9uPTAuNi4xMAorICAgIGlmIHRlc3QgIngkSEFWRV9ET0NCT09LMkhUTUwiICE9ICJ4bm8iOyB0aGVuCisgICAgICBkb2Nib29rMmh0bWxfdmVyc2lvbj1gZG9jYm9vazJodG1sIC0tdmVyc2lvbmAKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZG9jYm9vazJodG1sIHZlcnNpb24gKCRkb2Nib29rMmh0bWxfdmVyc2lvbikgPj0gJGRvY2Jvb2syaHRtbF9taW5fdmVyc2lvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBkb2Nib29rMmh0bWwgdmVyc2lvbiAoJGRvY2Jvb2syaHRtbF92ZXJzaW9uKSA+PSAkZG9jYm9vazJodG1sX21pbl92ZXJzaW9uLi4uICIgPiY2OyB9CisgICAgICBpZiBwZXJsIC13IDw8RU9GCisgICAgICAgIChcJG1pbl92ZXJzaW9uX21ham9yLCBcJG1pbl92ZXJzaW9uX21pbm9yLCBcJG1pbl92ZXJzaW9uX21pY3JvICkgPSAiJGRvY2Jvb2syaHRtbF9taW5fdmVyc2lvbiIgPX4gLyhcZCspXC4oXGQrKVwuKFxkKykvOworICAgICAgICAoXCRkb2Nib29rMmh0bWxfdmVyc2lvbl9tYWpvciwgXCRkb2Nib29rMmh0bWxfdmVyc2lvbl9taW5vciwgXCRkb2Nib29rMmh0bWxfdmVyc2lvbl9taWNybyApID0gIiRkb2Nib29rMmh0bWxfdmVyc2lvbiIgPX4gLyhcZCspXC4oXGQrKVwuKFxkKykvOworICAgICAgICBleGl0ICgoKFwkZG9jYm9vazJodG1sX3ZlcnNpb25fbWFqb3IgPiBcJG1pbl92ZXJzaW9uX21ham9yKSB8fAorICAJICAgICAoKFwkZG9jYm9vazJodG1sX3ZlcnNpb25fbWFqb3IgPT0gXCRtaW5fdmVyc2lvbl9tYWpvcikgJiYKKyAgCSAgICAgIChcJGRvY2Jvb2syaHRtbF92ZXJzaW9uX21pbm9yID49IFwkbWluX3ZlcnNpb25fbWlub3IpKSB8fAorICAJICAgICAoKFwkZG9jYm9vazJodG1sX3ZlcnNpb25fbWFqb3IgPT0gXCRtaW5fdmVyc2lvbl9tYWpvcikgJiYKKyAgCSAgICAgIChcJGRvY2Jvb2syaHRtbF92ZXJzaW9uX21pbm9yID49IFwkbWluX3ZlcnNpb25fbWlub3IpICYmCisgIAkgICAgICAoXCRkb2Nib29rMmh0bWxfdmVyc2lvbl9taWNybyA+PSBcJG1pbl92ZXJzaW9uX21pY3JvKSkpCisgIAkgICAgID8gMCA6IDEpOworRU9GCisgICAgICB0aGVuCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICBlbHNlCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgICBIQVZFX0RPQ0JPT0sySFRNTD1ubworICAgICAgZmkKKyAgICBmaQorCisKKyAgWFNMVFBST0NfRkxBR1M9LS1ub25ldAorICBET0NCT09LX1JPT1Q9CisgIFRZUEVfTEM9eG1sCisgIFRZUEVfVUM9WE1MCisgIERPQ0JPT0tfVkVSU0lPTj00LjEuMgorCisgIGlmIHRlc3QgISAtZiAvZXRjL3htbC9jYXRhbG9nOyB0aGVuCisgICAgZm9yIGkgaW4gL3Vzci9zaGFyZS9zZ21sL2RvY2Jvb2svc3R5bGVzaGVldC94c2wvbndhbHNoIC91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3hzbC1zdHlsZXNoZWV0cy8gL3Vzci9sb2NhbC9zaGFyZS94c2wvZG9jYm9vayA7CisgICAgZG8KKyAgICAgIGlmIHRlc3QgLWQgIiRpIjsgdGhlbgorICAgICAgICBET0NCT09LX1JPT1Q9JGkKKyAgICAgIGZpCisgICAgZG9uZQorICBlbHNlCisgICAgWE1MX0NBVEFMT0c9L2V0Yy94bWwvY2F0YWxvZworICAgIENBVF9FTlRSWV9TVEFSVD0nPCEtLScKKyAgICBDQVRfRU5UUllfRU5EPSctLT4nCisgIGZpCisKKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInhzbHRwcm9jIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSB4c2x0cHJvYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfWFNMVFBST0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkWFNMVFBST0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfWFNMVFBST0M9IiRYU0xUUFJPQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX1hTTFRQUk9DPSJ4c2x0cHJvYyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitYU0xUUFJPQz0kYWNfY3ZfcHJvZ19YU0xUUFJPQworaWYgdGVzdCAtbiAiJFhTTFRQUk9DIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFhTTFRQUk9DIiA+JjUKKyRhc19lY2hvICIkWFNMVFBST0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICBYU0xUUFJPQ19XT1JLUz1ubworICBpZiB0ZXN0IC1uICIkWFNMVFBST0MiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHhzbHRwcm9jIGRvY2Jvb2sgcHJvY2Vzc2luZyB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHhzbHRwcm9jIGRvY2Jvb2sgcHJvY2Vzc2luZyB3b3Jrcy4uLiAiID4mNjsgfQorCisgICAgaWYgdGVzdCAtbiAiJFhNTF9DQVRBTE9HIjsgdGhlbgorICAgICAgREJfRklMRT0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsL2N1cnJlbnQveGh0bWwvZG9jYm9vay54c2wiCisgICAgZWxzZQorICAgICAgREJfRklMRT0iJERPQ0JPT0tfUk9PVC94aHRtbC9kb2Nib29rLnhzbCIKKyAgICBmaQorICAgICRYU0xUUFJPQyAkWFNMVFBST0NfRkxBR1MgJERCX0ZJTEUgPi9kZXYvbnVsbCAyPiYxIDw8IEVORAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0nSVNPLTg4NTktMSc/PgorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgJFRZUEVfVUMgViRET0NCT09LX1ZFUlNJT04vL0VOIiAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rLyRUWVBFX0xDLyRET0NCT09LX1ZFUlNJT04vZG9jYm9va3guZHRkIj4KKzxib29rIGlkPSJ0ZXN0Ij4KKzwvYm9vaz4KK0VORAorICAgIGlmIHRlc3QgIiQ/IiA9IDA7IHRoZW4KKyAgICAgIFhTTFRQUk9DX1dPUktTPXllcworICAgIGZpCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRYU0xUUFJPQ19XT1JLUyIgPiY1CiskYXNfZWNobyAiJFhTTFRQUk9DX1dPUktTIiA+JjY7IH0KKyAgZmkKKworICBpZiB0ZXN0ICJ4JFhTTFRQUk9DX1dPUktTIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgICBoYXZlX2RvY2Jvb2s9eWVzCisgIGVsc2UKKyAgICAgICAgaGF2ZV9kb2Nib29rPW5vCisgIGZpCisKKworCisKKworCisKKworICAgICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImR2aXBzIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBkdmlwczsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfSEFWRV9EVklQUytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRIQVZFX0RWSVBTIjsgdGhlbgorICBhY19jdl9wcm9nX0hBVkVfRFZJUFM9IiRIQVZFX0RWSVBTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfSEFWRV9EVklQUz0ieWVzIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIHRlc3QgLXogIiRhY19jdl9wcm9nX0hBVkVfRFZJUFMiICYmIGFjX2N2X3Byb2dfSEFWRV9EVklQUz0ibm8iCitmaQorZmkKK0hBVkVfRFZJUFM9JGFjX2N2X3Byb2dfSEFWRV9EVklQUworaWYgdGVzdCAtbiAiJEhBVkVfRFZJUFMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSEFWRV9EVklQUyIgPiY1CiskYXNfZWNobyAiJEhBVkVfRFZJUFMiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAieG1sbGludCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgeG1sbGludDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfSEFWRV9YTUxMSU5UK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEhBVkVfWE1MTElOVCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19IQVZFX1hNTExJTlQ9IiRIQVZFX1hNTExJTlQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19IQVZFX1hNTExJTlQ9InllcyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19IQVZFX1hNTExJTlQiICYmIGFjX2N2X3Byb2dfSEFWRV9YTUxMSU5UPSJubyIKK2ZpCitmaQorSEFWRV9YTUxMSU5UPSRhY19jdl9wcm9nX0hBVkVfWE1MTElOVAoraWYgdGVzdCAtbiAiJEhBVkVfWE1MTElOVCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRIQVZFX1hNTExJTlQiID4mNQorJGFzX2VjaG8gIiRIQVZFX1hNTExJTlQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworCisgICAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZmlnMmRldiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZmlnMmRldjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfSEFWRV9GSUcyREVWK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEhBVkVfRklHMkRFViI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19IQVZFX0ZJRzJERVY9IiRIQVZFX0ZJRzJERVYiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19IQVZFX0ZJRzJERVY9InllcyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19IQVZFX0ZJRzJERVYiICYmIGFjX2N2X3Byb2dfSEFWRV9GSUcyREVWPSJubyIKK2ZpCitmaQorSEFWRV9GSUcyREVWPSRhY19jdl9wcm9nX0hBVkVfRklHMkRFVgoraWYgdGVzdCAtbiAiJEhBVkVfRklHMkRFViI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRIQVZFX0ZJRzJERVYiID4mNQorJGFzX2VjaG8gIiRIQVZFX0ZJRzJERVYiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgIGlmIHRlc3QgIngkSEFWRV9GSUcyREVWIiA9ICJ4bm8iIDsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBEaWQgbm90IGZpbmQgZmlnMmRldiAoZnJvbSB4ZmlnKSwgaW1hZ2VzIHdpbGwgbm90IGJlIGdlbmVyYXRlZC4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogRGlkIG5vdCBmaW5kIGZpZzJkZXYgKGZyb20geGZpZyksIGltYWdlcyB3aWxsIG5vdCBiZSBnZW5lcmF0ZWQuIiA+JjI7fQorICAgIGZpCisKKyAgICAgICAgICAgIEhBVkVfRklHMkRFVl9FUFM9bm8KKyAgICBpZiB0ZXN0ICJ4JEhBVkVfRklHMkRFViIgPSAieHllcyIgOyB0aGVuCisgICAgICBmaWcyZGV2X3F1aWV0PWBmaWcyZGV2IC1MIGVwcyA8L2Rldi9udWxsIDI+JjEgPi9kZXYvbnVsbGAKKyAgICAgIGlmIHRlc3QgIngkZmlnMmRldl9xdWlldCIgPSAieCIgOyB0aGVuCisgICAgICAgIEhBVkVfRklHMkRFVl9FUFM9eWVzCisgICAgICBmaQorICAgIGZpCisgICAgSEFWRV9GSUcyREVWX1BORz1ubworICAgIGlmIHRlc3QgIngkSEFWRV9GSUcyREVWIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICAgIGZpZzJkZXZfcXVpZXQ9YGZpZzJkZXYgLUwgcG5nIDwvZGV2L251bGwgMj4mMSA+L2Rldi9udWxsYAorICAgICAgaWYgdGVzdCAieCRmaWcyZGV2X3F1aWV0IiA9ICJ4IiA7IHRoZW4KKyAgICAgICAgSEFWRV9GSUcyREVWX1BORz15ZXMKKyAgICAgIGZpCisgICAgZmkKKyAgICBIQVZFX0ZJRzJERVZfUERGPW5vCisgICAgaWYgdGVzdCAieCRIQVZFX0ZJRzJERVYiID0gInh5ZXMiIDsgdGhlbgorICAgICAgZmlnMmRldl9xdWlldD1gZmlnMmRldiAtTCBwZGYgPC9kZXYvbnVsbCAyPiYxID4vZGV2L251bGxgCisgICAgICBpZiB0ZXN0ICJ4JGZpZzJkZXZfcXVpZXQiID0gIngiIDsgdGhlbgorICAgICAgICBIQVZFX0ZJRzJERVZfUERGPXllcworICAgICAgZmkKKyAgICBmaQorCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwbmd0b3BubSIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcG5ndG9wbm07IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0hBVkVfUE5HVE9QTk0rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkSEFWRV9QTkdUT1BOTSI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19IQVZFX1BOR1RPUE5NPSIkSEFWRV9QTkdUT1BOTSIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0hBVkVfUE5HVE9QTk09InllcyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19IQVZFX1BOR1RPUE5NIiAmJiBhY19jdl9wcm9nX0hBVkVfUE5HVE9QTk09Im5vIgorZmkKK2ZpCitIQVZFX1BOR1RPUE5NPSRhY19jdl9wcm9nX0hBVkVfUE5HVE9QTk0KK2lmIHRlc3QgLW4gIiRIQVZFX1BOR1RPUE5NIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEhBVkVfUE5HVE9QTk0iID4mNQorJGFzX2VjaG8gIiRIQVZFX1BOR1RPUE5NIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInBubXRvcHMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHBubXRvcHM7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0hBVkVfUE5NVE9QUytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRIQVZFX1BOTVRPUFMiOyB0aGVuCisgIGFjX2N2X3Byb2dfSEFWRV9QTk1UT1BTPSIkSEFWRV9QTk1UT1BTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfSEFWRV9QTk1UT1BTPSJ5ZXMiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfSEFWRV9QTk1UT1BTIiAmJiBhY19jdl9wcm9nX0hBVkVfUE5NVE9QUz0ibm8iCitmaQorZmkKK0hBVkVfUE5NVE9QUz0kYWNfY3ZfcHJvZ19IQVZFX1BOTVRPUFMKK2lmIHRlc3QgLW4gIiRIQVZFX1BOTVRPUFMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSEFWRV9QTk1UT1BTIiA+JjUKKyRhc19lY2hvICIkSEFWRV9QTk1UT1BTIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImVwc3RvcGRmIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBlcHN0b3BkZjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfSEFWRV9FUFNUT1BERitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRIQVZFX0VQU1RPUERGIjsgdGhlbgorICBhY19jdl9wcm9nX0hBVkVfRVBTVE9QREY9IiRIQVZFX0VQU1RPUERGIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfSEFWRV9FUFNUT1BERj0ieWVzIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIHRlc3QgLXogIiRhY19jdl9wcm9nX0hBVkVfRVBTVE9QREYiICYmIGFjX2N2X3Byb2dfSEFWRV9FUFNUT1BERj0ibm8iCitmaQorZmkKK0hBVkVfRVBTVE9QREY9JGFjX2N2X3Byb2dfSEFWRV9FUFNUT1BERgoraWYgdGVzdCAtbiAiJEhBVkVfRVBTVE9QREYiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSEFWRV9FUFNUT1BERiIgPiY1CiskYXNfZWNobyAiJEhBVkVfRVBTVE9QREYiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworCisgICAgICAgIGlmIHRlc3QgIngkSEFWRV9ET0NCT09LMkhUTUwiID0gInh5ZXMiICYmIFwKKyAgICAgICB0ZXN0ICJ4JGVuYWJsZV9kb2Nib29rIiA9ICJ4eWVzIiAmJiBcCisgICAgICAgdGVzdCAieCRIQVZFX1hNTExJTlQiID0gInh5ZXMiICYmIFwKKyAgICAgICB0ZXN0ICJ4JEhBVkVfRklHMkRFVl9QTkciID0gInh5ZXMiOyB0aGVuCisgICAgICBET0NfSFRNTD15ZXMKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV2lsbCBvdXRwdXQgSFRNTCBkb2N1bWVudGF0aW9uIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdpbGwgb3V0cHV0IEhUTUwgZG9jdW1lbnRhdGlvbiIgPiY2O30KKyAgICAgZWxzZQorICAgICAgRE9DX0hUTUw9bm8KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV2lsbCBub3Qgb3V0cHV0IEhUTUwgZG9jdW1lbnRhdGlvbiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXaWxsIG5vdCBvdXRwdXQgSFRNTCBkb2N1bWVudGF0aW9uIiA+JjY7fQorICAgIGZpCisKKyAgICAgICAgaWYgdGVzdCAieCRIQVZFX0RPQ0JPT0syUFMiID0gInh5ZXMiICYmIFwKKyAgICAgICB0ZXN0ICJ4JGVuYWJsZV9kb2Nib29rIiA9ICJ4eWVzIiAmJiBcCisgICAgICAgdGVzdCAieCRIQVZFX1hNTExJTlQiID0gInh5ZXMiICYmIFwKKyAgICAgICB0ZXN0ICJ4JEhBVkVfSkFERVRFWCIgPSAieHllcyIgJiYgXAorICAgICAgIHRlc3QgIngkSEFWRV9GSUcyREVWX0VQUyIgPSAieHllcyIgJiYgXAorICAgICAgIHRlc3QgIngkSEFWRV9EVklQUyIgPSAieHllcyIgJiYgXAorICAgICAgIHRlc3QgIngkSEFWRV9QTkdUT1BOTSIgPSAieHllcyIgJiYgXAorICAgICAgIHRlc3QgIngkSEFWRV9QTk1UT1BTIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgRE9DX1BTPXllcworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXaWxsIG91dHB1dCBQUyBkb2N1bWVudGF0aW9uIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdpbGwgb3V0cHV0IFBTIGRvY3VtZW50YXRpb24iID4mNjt9CisgICAgZWxzZQorICAgICAgRE9DX1BTPW5vCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdpbGwgbm90IG91dHB1dCBQUyBkb2N1bWVudGF0aW9uIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdpbGwgbm90IG91dHB1dCBQUyBkb2N1bWVudGF0aW9uIiA+JjY7fQorICAgIGZpCisKKyAgICAgICAgaWYgdGVzdCAieCRET0NfUFMiID0gInh5ZXMiICYmIFwKKyAgICAgICB0ZXN0ICJ4JGVuYWJsZV9kb2Nib29rIiA9ICJ4eWVzIiAmJiBcCisgICAgICAgdGVzdCAieCRIQVZFX1hNTExJTlQiID0gInh5ZXMiICYmIFwKKyAgICAgICB0ZXN0ICJ4JEhBVkVfUFMyUERGIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgRE9DX1BERj15ZXMKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV2lsbCBvdXRwdXQgUERGIGRvY3VtZW50YXRpb24iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV2lsbCBvdXRwdXQgUERGIGRvY3VtZW50YXRpb24iID4mNjt9CisgICAgZWxzZQorICAgICAgRE9DX1BERj1ubworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXaWxsIG5vdCBvdXRwdXQgUERGIGRvY3VtZW50YXRpb24iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV2lsbCBub3Qgb3V0cHV0IFBERiBkb2N1bWVudGF0aW9uIiA+JjY7fQorICAgIGZpCisKKyAgICAgICAgaWYgdGVzdCAieCRoYXZlX2RvY2Jvb2siICE9ICJ4eWVzIjsgdGhlbgorICAgICAgZW5hYmxlX2RvY2Jvb2s9bm8KKyAgICBmaQorICBmaQorCisgICAgaWYgdGVzdCAieCRoYXZlX2RvY2Jvb2siID0gInh5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBJbnN0YWxsaW5nIGRvY3VtZW50YXRpb24gaW4gJGRvY2RpciIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBJbnN0YWxsaW5nIGRvY3VtZW50YXRpb24gaW4gJGRvY2RpciIgPiY2O30KKworICBmaQorCisgICBpZiB0ZXN0IHgkZW5hYmxlX2RvY2Jvb2sgPSB4eWVzOyB0aGVuCisgIEVOQUJMRV9ET0NCT09LX1RSVUU9CisgIEVOQUJMRV9ET0NCT09LX0ZBTFNFPScjJworZWxzZQorICBFTkFCTEVfRE9DQk9PS19UUlVFPScjJworICBFTkFCTEVfRE9DQk9PS19GQUxTRT0KK2ZpCisKKyAgIGlmIHRlc3QgeCRET0NfSFRNTCA9IHh5ZXM7IHRoZW4KKyAgRE9DX0hUTUxfVFJVRT0KKyAgRE9DX0hUTUxfRkFMU0U9JyMnCitlbHNlCisgIERPQ19IVE1MX1RSVUU9JyMnCisgIERPQ19IVE1MX0ZBTFNFPQorZmkKKworICAgaWYgdGVzdCB4JERPQ19QREYgPSB4eWVzOyB0aGVuCisgIERPQ19QREZfVFJVRT0KKyAgRE9DX1BERl9GQUxTRT0nIycKK2Vsc2UKKyAgRE9DX1BERl9UUlVFPScjJworICBET0NfUERGX0ZBTFNFPQorZmkKKworICAgaWYgdGVzdCB4JERPQ19QUyA9IHh5ZXM7IHRoZW4KKyAgRE9DX1BTX1RSVUU9CisgIERPQ19QU19GQUxTRT0nIycKK2Vsc2UKKyAgRE9DX1BTX1RSVUU9JyMnCisgIERPQ19QU19GQUxTRT0KK2ZpCisKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtaHRtbC1kaXIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2h0bWxfZGlyK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9odG1sX2RpcjsKK2Vsc2UKKyAgd2l0aF9odG1sX2Rpcj0nJHtkYXRhZGlyfS9ndGstZG9jL2h0bWwnCitmaQorCisgIEhUTUxfRElSPSIkd2l0aF9odG1sX2RpciIKKworCisgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWd0ay1kb2Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZ3RrX2RvYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2d0a19kb2M7CitlbHNlCisgIGVuYWJsZV9ndGtfZG9jPW5vCitmaQorCisKKyAgaWYgdGVzdCB4JGVuYWJsZV9ndGtfZG9jID0geHllczsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcImd0ay1kb2MgPj0gMS4zXCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgImd0ay1kb2MgPj0gMS4zIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgOgorZWxzZQorICBhc19mbl9lcnJvciAkPyAiWW91IG5lZWQgdG8gaGF2ZSBndGstZG9jID49IDEuMyBpbnN0YWxsZWQgdG8gYnVpbGQgZ3RrLWRvYyIgIiRMSU5FTk8iIDUKK2ZpCisgICAgaWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX1NFRCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICAgICAgICAgICBhY19zY3JpcHQ9cy9hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYS9iYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIvCisgICAgIGZvciBhY19pIGluIDEgMiAzIDQgNSA2IDc7IGRvCisgICAgICAgYWNfc2NyaXB0PSIkYWNfc2NyaXB0JGFzX25sJGFjX3NjcmlwdCIKKyAgICAgZG9uZQorICAgICBlY2hvICIkYWNfc2NyaXB0IiAyPi9kZXYvbnVsbCB8IHNlZCA5OXEgPmNvbmZ0ZXN0LnNlZAorICAgICB7IGFjX3NjcmlwdD07IHVuc2V0IGFjX3NjcmlwdDt9CisgICAgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgIGFjX3BhdGhfU0VEX2ZvdW5kPWZhbHNlCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBzZWQgZ3NlZDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGFjX3BhdGhfU0VEPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9TRUQiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX1NFRCI7IH0gfHwgY29udGludWUKKyMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX1NFRCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfU0VECitjYXNlIGAiJGFjX3BhdGhfU0VEIiAtLXZlcnNpb24gMj4mMWAgaW4KKypHTlUqKQorICBhY19jdl9wYXRoX1NFRD0iJGFjX3BhdGhfU0VEIiBhY19wYXRoX1NFRF9mb3VuZD06OzsKKyopCisgIGFjX2NvdW50PTAKKyAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCisgIHdoaWxlIDoKKyAgZG8KKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKyAgICAkYXNfZWNobyAnJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX1NFRCIgLWYgY29uZnRlc3Quc2VkIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9TRURfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiCisgICAgICBhY19wYXRoX1NFRF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX1NFRF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQorICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfU0VEIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIHNlZCBjb3VsZCBiZSBmb3VuZCBpbiBcJFBBVEgiICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfU0VEPSRTRUQKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfU0VEIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9TRUQiID4mNjsgfQorIFNFRD0iJGFjX2N2X3BhdGhfU0VEIgorICBybSAtZiBjb25mdGVzdC5zZWQKKworICAgIGZpCisgIGZpCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIGd0ay1kb2MgZG9jdW1lbnRhdGlvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIGd0ay1kb2MgZG9jdW1lbnRhdGlvbi4uLiAiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGVuYWJsZV9ndGtfZG9jIiA+JjUKKyRhc19lY2hvICIkZW5hYmxlX2d0a19kb2MiID4mNjsgfQorCisgIGZvciBhY19wcm9nIGluIGd0a2RvYy1jaGVjaworZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX0dUS0RPQ19DSEVDSytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJEdUS0RPQ19DSEVDSyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9HVEtET0NfQ0hFQ0s9IiRHVEtET0NfQ0hFQ0siICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX0dUS0RPQ19DSEVDSz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK0dUS0RPQ19DSEVDSz0kYWNfY3ZfcGF0aF9HVEtET0NfQ0hFQ0sKK2lmIHRlc3QgLW4gIiRHVEtET0NfQ0hFQ0siOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkR1RLRE9DX0NIRUNLIiA+JjUKKyRhc19lY2hvICIkR1RLRE9DX0NIRUNLIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJEdUS0RPQ19DSEVDSyIgJiYgYnJlYWsKK2RvbmUKKworCisgICBpZiB0ZXN0IHgkZW5hYmxlX2d0a19kb2MgPSB4eWVzOyB0aGVuCisgIEVOQUJMRV9HVEtfRE9DX1RSVUU9CisgIEVOQUJMRV9HVEtfRE9DX0ZBTFNFPScjJworZWxzZQorICBFTkFCTEVfR1RLX0RPQ19UUlVFPScjJworICBFTkFCTEVfR1RLX0RPQ19GQUxTRT0KK2ZpCisKKyAgIGlmIHRlc3QgLW4gIiRMSUJUT09MIjsgdGhlbgorICBHVEtfRE9DX1VTRV9MSUJUT09MX1RSVUU9CisgIEdUS19ET0NfVVNFX0xJQlRPT0xfRkFMU0U9JyMnCitlbHNlCisgIEdUS19ET0NfVVNFX0xJQlRPT0xfVFJVRT0nIycKKyAgR1RLX0RPQ19VU0VfTElCVE9PTF9GQUxTRT0KK2ZpCisKKworCisKKyAgICBQWVRIT05fQ0FORElEQVRFUz0icHl0aG9uIHB5dGhvbjIuMiBweXRob24yLjEgcHl0aG9uMi4wIHB5dGhvbjIgXAorICAgICAgICAgICAgICAgICAgICAgcHl0aG9uMS42IHB5dGhvbjEuNSIKKworICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IExvb2tpbmcgZm9yIFB5dGhvbiB2ZXJzaW9uID49IDIuMSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBMb29raW5nIGZvciBQeXRob24gdmVyc2lvbiA+PSAyLjEiID4mNjt9CisgICAgICAgIHByb2c9IgoraW1wb3J0IHN5cywgc3RyaW5nCittaW52ZXIgPSAnMi4xJworIyBzcGxpdCBzdHJpbmcgYnkgJy4nIGFuZCBjb252ZXJ0IHRvIG51bWVyaWMKK21pbnZlcl9pbmZvID0gbWFwKHN0cmluZy5hdG9pLCBzdHJpbmcuc3BsaXQobWludmVyLCAnLicpKQorIyB3ZSBjYW4gbm93IGRvIGNvbXBhcmlzb25zIG9uIHRoZSB0d28gbGlzdHM6CitpZiBzeXMudmVyc2lvbl9pbmZvID49IHR1cGxlKG1pbnZlcl9pbmZvKToKKwlzeXMuZXhpdCgwKQorZWxzZToKKwlzeXMuZXhpdCgxKSIKKworICAgIHB5dGhvbl9nb29kPWZhbHNlCisgICAgZm9yIHB5dGhvbl9jYW5kaWRhdGUgaW4gJFBZVEhPTl9DQU5ESURBVEVTOyBkbworICAgICAgdW5zZXQgUFlUSE9OCisgICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRweXRob25fY2FuZGlkYXRlIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkcHl0aG9uX2NhbmRpZGF0ZTsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfUFlUSE9OK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkUFlUSE9OIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX1BZVEhPTj0iJFBZVEhPTiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfUFlUSE9OPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorUFlUSE9OPSRhY19jdl9wYXRoX1BZVEhPTgoraWYgdGVzdCAtbiAiJFBZVEhPTiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQWVRIT04iID4mNQorJGFzX2VjaG8gIiRQWVRIT04iID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAxPiAvZGV2L251bGwgMj4gL2Rldi9udWxsCisKKyAgICAgIGlmIHRlc3QgIngkUFlUSE9OIiA9ICJ4IjsgdGhlbiBjb250aW51ZTsgZmkKKworICAgICAgaWYgJFBZVEhPTiAtYyAiJHByb2ciIDE+JjUgMj4mNTsgdGhlbgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIFwiJFBZVEhPTlwiOiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBcIiRQWVRIT05cIjouLi4gIiA+JjY7IH0KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogb2theSIgPiY1CiskYXNfZWNobyAib2theSIgPiY2OyB9CisgICAgICAgIHB5dGhvbl9nb29kPXRydWUKKyAgICAgICAgYnJlYWs7CisgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdW5zZXQgYWNfY3ZfcGF0aF9QWVRIT04KKyAgICAgIGZpCisgICAgZG9uZQorCisKKyAgaWYgdGVzdCAiJHB5dGhvbl9nb29kIiAhPSAidHJ1ZSI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IE5vIHN1aXRhYmxlIHZlcnNpb24gb2YgcHl0aG9uIGZvdW5kIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IE5vIHN1aXRhYmxlIHZlcnNpb24gb2YgcHl0aG9uIGZvdW5kIiA+JjI7fQorICAgIFBZVEhPTj0KKyAgZWxzZQorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgbG9jYWwgUHl0aG9uIGNvbmZpZ3VyYXRpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgbG9jYWwgUHl0aG9uIGNvbmZpZ3VyYXRpb24uLi4gIiA+JjY7IH0KKworCisKKyAgICBQWVRIT05fVkVSU0lPTj1gJFBZVEhPTiAtYyAiaW1wb3J0IHN5czsgcHJpbnQgc3lzLnZlcnNpb25bOjNdImAKKworCisKKworICBQWVRIT05fUFJFRklYPScke3ByZWZpeH0nCisKKworICBQWVRIT05fRVhFQ19QUkVGSVg9JyR7ZXhlY19wcmVmaXh9JworCisKKworICBQWVRIT05fUExBVEZPUk09YCRQWVRIT04gLWMgImltcG9ydCBzeXM7IHByaW50IHN5cy5wbGF0Zm9ybSJgCisKKworCisKKworICBweXRob25kaXI9JFBZVEhPTl9QUkVGSVgiL2xpYi9weXRob24iJFBZVEhPTl9WRVJTSU9OL3NpdGUtcGFja2FnZXMKKworCisKKyAgcGtncHl0aG9uZGlyPVwke3B5dGhvbmRpcn0vJFBBQ0tBR0UKKworCisKKyAgcHlleGVjZGlyPSRQWVRIT05fRVhFQ19QUkVGSVgiL2xpYi9weXRob24iJFBZVEhPTl9WRVJTSU9OL3NpdGUtcGFja2FnZXMKKworCisKKyAgcGtncHlleGVjZGlyPVwke3B5ZXhlY2Rpcn0vJFBBQ0tBR0UKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbG9va3MgZ29vZCIgPiY1CiskYXNfZWNobyAibG9va3MgZ29vZCIgPiY2OyB9CisKKyAgZmkKKworCisKKyAgYnVpbGRfcGx1Z2luX2RvY3M9bm8KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHBsdWdpbiBkb2N1bWVudGF0aW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgcGx1Z2luIGRvY3VtZW50YXRpb24uLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCB4JGVuYWJsZV9ndGtfZG9jID0geHllczsgdGhlbgorICAgIGJ1aWxkX3BsdWdpbl9kb2NzPXllcworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8gKGd0ay1kb2MgZGlzYWJsZWQgb3Igbm90IGF2YWlsYWJsZSkiID4mNQorJGFzX2VjaG8gIm5vIChndGstZG9jIGRpc2FibGVkIG9yIG5vdCBhdmFpbGFibGUpIiA+JjY7IH0KKyAgZmkKKworICAgaWYgdGVzdCB4JGJ1aWxkX3BsdWdpbl9kb2NzID0geHllczsgdGhlbgorICBFTkFCTEVfUExVR0lOX0RPQ1NfVFJVRT0KKyAgRU5BQkxFX1BMVUdJTl9ET0NTX0ZBTFNFPScjJworZWxzZQorICBFTkFCTEVfUExVR0lOX0RPQ1NfVFJVRT0nIycKKyAgRU5BQkxFX1BMVUdJTl9ET0NTX0ZBTFNFPQorZmkKKworCisKKworTElCTT0KK2Nhc2UgJGhvc3QgaW4KKyotKi1iZW9zKiB8ICotKi1jeWd3aW4qIHwgKi0qLXB3MzIqIHwgKi0qLWRhcndpbiopCisgICMgVGhlc2Ugc3lzdGVtIGRvbid0IGhhdmUgbGlibSwgb3IgZG9uJ3QgbmVlZCBpdAorICA7OworKi1uY3Itc3lzdjQuMyopCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIF9td3ZhbGlkY2hlY2tsIGluIC1sbXciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIF9td3ZhbGlkY2hlY2tsIGluIC1sbXcuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX213X19td3ZhbGlkY2hlY2tsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxtdyAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgX213dmFsaWRjaGVja2wgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBfbXd2YWxpZGNoZWNrbCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfbXdfX213dmFsaWRjaGVja2w9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9td19fbXd2YWxpZGNoZWNrbD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfbXdfX213dmFsaWRjaGVja2wiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfbXdfX213dmFsaWRjaGVja2wiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfbXdfX213dmFsaWRjaGVja2wiID0geCIieWVzOyB0aGVuIDoKKyAgTElCTT0iLWxtdyIKK2ZpCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgY29zIGluIC1sbSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgY29zIGluIC1sbS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfbV9jb3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbG0gICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGNvcyAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGNvcyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfbV9jb3M9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9tX2Nvcz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfbV9jb3MiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfbV9jb3MiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfbV9jb3MiID0geCIieWVzOyB0aGVuIDoKKyAgTElCTT0iJExJQk0gLWxtIgorZmkKKworICA7OworKikKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgY29zIGluIC1sbSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgY29zIGluIC1sbS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfbV9jb3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbG0gICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGNvcyAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGNvcyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfbV9jb3M9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9tX2Nvcz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfbV9jb3MiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfbV9jb3MiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfbV9jb3MiID0geCIieWVzOyB0aGVuIDoKKyAgTElCTT0iLWxtIgorZmkKKworICA7OworZXNhYworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N0ZGMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmxvYXQuaD4KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9oZWFkZXJfc3RkYz15ZXMKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBTdW5PUyA0Lnggc3RyaW5nLmggZG9lcyBub3QgZGVjbGFyZSBtZW0qLCBjb250cmFyeSB0byBBTlNJLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIElTQyAyLjAuMiBzdGRsaWIuaCBkb2VzIG5vdCBkZWNsYXJlIGZyZWUsIGNvbnRyYXJ5IHRvIEFOU0kuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiZnJlZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIC9iaW4vY2MgaW4gSXJpeC00LjAuNSBnZXRzIG5vbi1BTlNJIGN0eXBlIG1hY3JvcyB1bmxlc3MgdXNpbmcgLWFuc2kuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgOgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZiAoKCcgJyAmIDB4MEZGKSA9PSAweDAyMCkKKyMgZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICd6JykKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKKyNlbHNlCisjIGRlZmluZSBJU0xPV0VSKGMpIFwKKwkJICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKKwkJICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCisJCSAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6JykpCisjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gKChjKSB8IDB4NDApIDogKGMpKQorI2VuZGlmCisKKyNkZWZpbmUgWE9SKGUsIGYpICgoKGUpICYmICEoZikpIHx8ICghKGUpICYmIChmKSkpCitpbnQKK21haW4gKCkKK3sKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICBpZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpCisJfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCisgICAgICByZXR1cm4gMjsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgU1REQ19IRUFERVJTIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKK2ZvciBhY19oZWFkZXIgaW4gdWNvbnRleHQuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAidWNvbnRleHQuaCIgImFjX2N2X2hlYWRlcl91Y29udGV4dF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl91Y29udGV4dF9oIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9VQ09OVEVYVF9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworZm9yIGFjX2hlYWRlciBpbiBzeXMvc29ja2V0LmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN5cy9zb2NrZXQuaCIgImFjX2N2X2hlYWRlcl9zeXNfc29ja2V0X2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1lTX1NPQ0tFVF9IIDEKK19BQ0VPRgorIEhBVkVfU1lTX1NPQ0tFVF9IPXllcworZmkKKworZG9uZQorCisgaWYgdGVzdCAieCRIQVZFX1NZU19TT0NLRVRfSCIgPSAieHllcyI7IHRoZW4KKyAgSEFWRV9TWVNfU09DS0VUX0hfVFJVRT0KKyAgSEFWRV9TWVNfU09DS0VUX0hfRkFMU0U9JyMnCitlbHNlCisgIEhBVkVfU1lTX1NPQ0tFVF9IX1RSVUU9JyMnCisgIEhBVkVfU1lTX1NPQ0tFVF9IX0ZBTFNFPQorZmkKKworCitmb3IgYWNfaGVhZGVyIGluIHN5cy90aW1lcy5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJzeXMvdGltZXMuaCIgImFjX2N2X2hlYWRlcl9zeXNfdGltZXNfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX3RpbWVzX2giID0geCIieWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NZU19USU1FU19IIDEKK19BQ0VPRgorIEhBVkVfU1lTX1RJTUVTX0g9eWVzCitmaQorCitkb25lCisKK2ZvciBhY19oZWFkZXIgaW4gdW5pc3RkLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInVuaXN0ZC5oIiAiYWNfY3ZfaGVhZGVyX3VuaXN0ZF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl91bmlzdGRfaCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQorX0FDRU9GCisgSEFWRV9VTklTVERfSD15ZXMKK2ZpCisKK2RvbmUKKworIGlmIHRlc3QgIngkSEFWRV9TWVNfVElNRVNfSCIgPSAieHllcyIgLWEgIngkSEFWRV9VTklTVERfSCIgPSAieHllcyI7IHRoZW4KKyAgSEFWRV9TWVNfVElNRVNfSF9BTkRfVU5JU1REX0hfVFJVRT0KKyAgSEFWRV9TWVNfVElNRVNfSF9BTkRfVU5JU1REX0hfRkFMU0U9JyMnCitlbHNlCisgIEhBVkVfU1lTX1RJTUVTX0hfQU5EX1VOSVNURF9IX1RSVUU9JyMnCisgIEhBVkVfU1lTX1RJTUVTX0hfQU5EX1VOSVNURF9IX0ZBTFNFPQorZmkKKworCitmb3IgYWNfaGVhZGVyIGluIHByb2Nlc3MuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAicHJvY2Vzcy5oIiAiYWNfY3ZfaGVhZGVyX3Byb2Nlc3NfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfcHJvY2Vzc19oIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9QUk9DRVNTX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCitmb3IgYWNfaGVhZGVyIGluIHN5cy91dHNuYW1lLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN5cy91dHNuYW1lLmgiICJhY19jdl9oZWFkZXJfc3lzX3V0c25hbWVfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX3V0c25hbWVfaCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1lTX1VUU05BTUVfSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKK2ZvciBhY19oZWFkZXIgaW4gc3RkaW9fZXh0LmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN0ZGlvX2V4dC5oIiAiYWNfY3ZfaGVhZGVyX3N0ZGlvX2V4dF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zdGRpb19leHRfaCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RESU9fRVhUX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCitmb3IgYWNfaGVhZGVyIGluIHB0aHJlYWQuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAicHRocmVhZC5oIiAiYWNfY3ZfaGVhZGVyX3B0aHJlYWRfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfcHRocmVhZF9oIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9QVEhSRUFEX0ggMQorX0FDRU9GCisgSEFWRV9QVEhSRUFEX0g9eWVzCitmaQorCitkb25lCisKKyBpZiB0ZXN0ICJ4JEhBVkVfUFRIUkVBRF9IIiA9ICJ4eWVzIjsgdGhlbgorICBIQVZFX1BUSFJFQURfSF9UUlVFPQorICBIQVZFX1BUSFJFQURfSF9GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9QVEhSRUFEX0hfVFJVRT0nIycKKyAgSEFWRV9QVEhSRUFEX0hfRkFMU0U9CitmaQorCisKK2ZvciBhY19oZWFkZXIgaW4gc3lzL3ByY3RsLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN5cy9wcmN0bC5oIiAiYWNfY3ZfaGVhZGVyX3N5c19wcmN0bF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNfcHJjdGxfaCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1lTX1BSQ1RMX0ggMQorX0FDRU9GCisgSEFWRV9TWVNfUFJDVExfSD15ZXMKK2ZpCisKK2RvbmUKKworCitmb3IgYWNfaGVhZGVyIGluIHZhbGdyaW5kL3ZhbGdyaW5kLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInZhbGdyaW5kL3ZhbGdyaW5kLmgiICJhY19jdl9oZWFkZXJfdmFsZ3JpbmRfdmFsZ3JpbmRfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfdmFsZ3JpbmRfdmFsZ3JpbmRfaCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfVkFMR1JJTkRfVkFMR1JJTkRfSCAxCitfQUNFT0YKKyBIQVZFX1ZBTEdSSU5EX0g9eWVzCitmaQorCitkb25lCisKKworZm9yIGFjX2hlYWRlciBpbiB3aW5zb2NrMi5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJ3aW5zb2NrMi5oIiAiYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2giID0geCIieWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1dJTlNPQ0syX0ggMQorX0FDRU9GCisgSEFWRV9XSU5TT0NLMl9IPXllcworZmkKKworZG9uZQorCisgaWYgdGVzdCAieCRIQVZFX1dJTlNPQ0syX0giID0gInh5ZXMiOyB0aGVuCisgIEhBVkVfV0lOU09DSzJfSF9UUlVFPQorICBIQVZFX1dJTlNPQ0syX0hfRkFMU0U9JyMnCitlbHNlCisgIEhBVkVfV0lOU09DSzJfSF9UUlVFPScjJworICBIQVZFX1dJTlNPQ0syX0hfRkFMU0U9CitmaQorCitpZiB0ZXN0ICJ4JEhBVkVfV0lOU09DSzJfSCIgPSAieHllcyI7IHRoZW4KKyAgV0lOMzJfTElCUz0iLWx3czJfMzIiCisKK2ZpCisKK2lmIHRlc3QgIngkQlVJTERfVEVTVFMiID0gInh5ZXMiOyB0aGVuCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgX19nbXB6X2luaXRfc2V0X2QgaW4gLWxnbXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIF9fZ21wel9pbml0X3NldF9kIGluIC1sZ21wLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9nbXBfX19nbXB6X2luaXRfc2V0X2Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGdtcCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgX19nbXB6X2luaXRfc2V0X2QgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBfX2dtcHpfaW5pdF9zZXRfZCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfZ21wX19fZ21wel9pbml0X3NldF9kPXllcworZWxzZQorICBhY19jdl9saWJfZ21wX19fZ21wel9pbml0X3NldF9kPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9nbXBfX19nbXB6X2luaXRfc2V0X2QiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZ21wX19fZ21wel9pbml0X3NldF9kIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2dtcF9fX2dtcHpfaW5pdF9zZXRfZCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBIQVZFX0dNUD15ZXMKK2Vsc2UKKyAgSEFWRV9HTVA9bm8KK2ZpCisKKyAgaWYgdGVzdCAieCRIQVZFX0dNUCIgPSAieHllcyI7IHRoZW4KKyAgICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiZ21wLmgiICJhY19jdl9oZWFkZXJfZ21wX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2dtcF9oIiA9IHgiInllczsgdGhlbiA6CisgIDoKK2Vsc2UKKyAgSEFWRV9HTVA9bm8KK2ZpCisKKworICAgIGlmIHRlc3QgIngkSEFWRV9HTVAiID0gInh5ZXMiOyB0aGVuCisgICAgICAgICAgICBHTVBfTElCUz0iLWxnbXAiCisKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9HTVAgMSIgPj5jb25mZGVmcy5oCisKKyAgICBlbHNlCisgICAgICA6CisgICAgZmkKKyAgZWxzZQorICAgIDoKKyAgZmkKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBnc2xfcm5nX3VuaWZvcm1faW50IGluIC1sZ3NsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBnc2xfcm5nX3VuaWZvcm1faW50IGluIC1sZ3NsLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9nc2xfZ3NsX3JuZ191bmlmb3JtX2ludCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sZ3NsIC1sZ3NsY2JsYXMgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZ3NsX3JuZ191bmlmb3JtX2ludCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGdzbF9ybmdfdW5pZm9ybV9pbnQgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2dzbF9nc2xfcm5nX3VuaWZvcm1faW50PXllcworZWxzZQorICBhY19jdl9saWJfZ3NsX2dzbF9ybmdfdW5pZm9ybV9pbnQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2dzbF9nc2xfcm5nX3VuaWZvcm1faW50IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2dzbF9nc2xfcm5nX3VuaWZvcm1faW50IiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2dzbF9nc2xfcm5nX3VuaWZvcm1faW50IiA9IHgiInllczsgdGhlbiA6CisgIEhBVkVfR1NMPXllcworZWxzZQorICBIQVZFX0dTTD1ubworZmkKKworICBpZiB0ZXN0ICJ4JEhBVkVfR1NMIiA9ICJ4eWVzIjsgdGhlbgorICAgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJnc2wvZ3NsX3JuZy5oIiAiYWNfY3ZfaGVhZGVyX2dzbF9nc2xfcm5nX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2dzbF9nc2xfcm5nX2giID0geCIieWVzOyB0aGVuIDoKKyAgOgorZWxzZQorICBIQVZFX0dTTD1ubworZmkKKworCisgICAgaWYgdGVzdCAieCRIQVZFX0dTTCIgPSAieHllcyI7IHRoZW4KKyAgICAgICAgICAgIEdTTF9MSUJTPSItbGdzbCAtbGdzbGNibGFzIgorCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfR1NMIDEiID4+Y29uZmRlZnMuaAorCisgICAgZWxzZQorICAgICAgOgorICAgIGZpCisgIGVsc2UKKyAgICA6CisgIGZpCisKKworCitmaQorCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBfX3VpbnQxMjhfdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgX191aW50MTI4X3QuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7Z3N0X2N2X3VpbnQxMjhfdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgICAgIHN0YXRpYyBfX3VpbnQxMjhfdCB2MSA9IDEwMDsKKyAgICAgIHN0YXRpYyBfX3VpbnQxMjhfdCB2MiA9IDEwOworICAgICAgc3RhdGljIF9fdWludDEyOF90IHU7CisgICAgICB1ID0gdjEgLyB2MjsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgIGdzdF9jdl91aW50MTI4X3Q9eWVzCisKK2Vsc2UKKworICAgICAgZ3N0X2N2X3VpbnQxMjhfdD1ubworCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3N0X2N2X3VpbnQxMjhfdCIgPiY1CiskYXNfZWNobyAiJGdzdF9jdl91aW50MTI4X3QiID4mNjsgfQoraWYgdGVzdCB4JGdzdF9jdl91aW50MTI4X3QgPSB4eWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfVUlOVDEyOF9UIDEiID4+Y29uZmRlZnMuaAorCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB0bV9nbXRvZmYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRtX2dtdG9mZi4uLiAiID4mNjsgfQoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBoYXZlX3RtX2dtdG9mZj0ibm8gKGNyb3NzIGNvbXBpbGluZykiCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCSNpbmNsdWRlIDx0aW1lLmg+CisJaW50IG1haW4odm9pZCkgeworCSAgc3RydWN0IHRtIHQ7CisJICB0LnRtX2dtdG9mZiA9IDA7CisJICBleGl0KDApOworCX0KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGhhdmVfdG1fZ210b2ZmPXllcworCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1RNX0dNVE9GRiAxIiA+PmNvbmZkZWZzLmgKKworZWxzZQorICBoYXZlX3RtX2dtdG9mZj1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGF2ZV90bV9nbXRvZmYiID4mNQorJGFzX2VjaG8gIiRoYXZlX3RtX2dtdG9mZiIgPiY2OyB9CisKKworCitmb3IgYWNfZnVuYyBpbiBnbXRpbWVfcgorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJnbXRpbWVfciIgImFjX2N2X2Z1bmNfZ210aW1lX3IiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZ210aW1lX3IiID0geCIieWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0dNVElNRV9SIDEKK19BQ0VPRgorCitmaQorZG9uZQorCitmb3IgYWNfZnVuYyBpbiBsb2NhbHRpbWVfcgorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJsb2NhbHRpbWVfciIgImFjX2N2X2Z1bmNfbG9jYWx0aW1lX3IiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfbG9jYWx0aW1lX3IiID0geCIieWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0xPQ0FMVElNRV9SIDEKK19BQ0VPRgorCitmaQorZG9uZQorCitmb3IgYWNfZnVuYyBpbiBzaWdhY3Rpb24KK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic2lnYWN0aW9uIiAiYWNfY3ZfZnVuY19zaWdhY3Rpb24iCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc2lnYWN0aW9uIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TSUdBQ1RJT04gMQorX0FDRU9GCisKK2ZpCitkb25lCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgX0xBUkdFRklMRV9TT1VSQ0UgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgX0xBUkdFRklMRV9TT1VSQ0UgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIHdoaWxlIDo7IGRvCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gLyogZm9yIG9mZl90ICovCisgICAgICNpbmNsdWRlIDxzdGRpby5oPgoraW50CittYWluICgpCit7CitpbnQgKCpmcCkgKEZJTEUgKiwgb2ZmX3QsIGludCkgPSBmc2Vla287CisgICAgIHJldHVybiBmc2Vla28gKHN0ZGluLCAwLCAwKSAmJiBmcCAoc3RkaW4sIDAsIDApOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlPW5vOyBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UgMQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPiAvKiBmb3Igb2ZmX3QgKi8KKyAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQKK21haW4gKCkKK3sKK2ludCAoKmZwKSAoRklMRSAqLCBvZmZfdCwgaW50KSA9IGZzZWVrbzsKKyAgICAgcmV0dXJuIGZzZWVrbyAoc3RkaW4sIDAsIDApICYmIGZwIChzdGRpbiwgMCwgMCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc3lzX2xhcmdlZmlsZV9zb3VyY2U9MTsgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBhY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZT11bmtub3duCisgIGJyZWFrCitkb25lCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlIiA+JjY7IH0KK2Nhc2UgJGFjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlIGluICMoCisgIG5vIHwgdW5rbm93bikgOzsKKyAgKikKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UgJGFjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlCitfQUNFT0YKKzs7Citlc2FjCitybSAtcmYgY29uZnRlc3QqCisKKyMgV2UgdXNlZCB0byB0cnkgZGVmaW5pbmcgX1hPUEVOX1NPVVJDRT01MDAgdG9vLCB0byB3b3JrIGFyb3VuZCBhIGJ1ZworIyBpbiBnbGliYyAyLjEuMywgYnV0IHRoYXQgYnJlYWtzIHRvbyBtYW55IG90aGVyIHRoaW5ncy4KKyMgSWYgeW91IHdhbnQgZnNlZWtvIGFuZCBmdGVsbG8gd2l0aCBnbGliYywgdXBncmFkZSB0byBhIGZpeGVkIGdsaWJjLgoraWYgdGVzdCAkYWNfY3Zfc3lzX2xhcmdlZmlsZV9zb3VyY2UgIT0gdW5rbm93bjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0ZTRUVLTyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworZm9yIGFjX2Z1bmMgaW4gZnRlbGxvCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImZ0ZWxsbyIgImFjX2N2X2Z1bmNfZnRlbGxvIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2Z0ZWxsbyIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfRlRFTExPIDEKK19BQ0VPRgorCitmaQorZG9uZQorCisKK2ZvciBhY19mdW5jIGluIGZnZXRwb3MKK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZmdldHBvcyIgImFjX2N2X2Z1bmNfZmdldHBvcyIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19mZ2V0cG9zIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9GR0VUUE9TIDEKK19BQ0VPRgorCitmaQorZG9uZQorCitmb3IgYWNfZnVuYyBpbiBmc2V0cG9zCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImZzZXRwb3MiICJhY19jdl9mdW5jX2ZzZXRwb3MiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZnNldHBvcyIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfRlNFVFBPUyAxCitfQUNFT0YKKworZmkKK2RvbmUKKworCitmb3IgYWNfZnVuYyBpbiBwb2xsCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInBvbGwiICJhY19jdl9mdW5jX3BvbGwiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfcG9sbCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfUE9MTCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworZm9yIGFjX2Z1bmMgaW4gcHBvbGwKK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAicHBvbGwiICJhY19jdl9mdW5jX3Bwb2xsIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3Bwb2xsIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9QUE9MTCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworZm9yIGFjX2Z1bmMgaW4gcHNlbGVjdAorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJwc2VsZWN0IiAiYWNfY3ZfZnVuY19wc2VsZWN0IgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3BzZWxlY3QiID0geCIieWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1BTRUxFQ1QgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBicm9rZW4gcG9sbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYnJva2VuIHBvbGwuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgYnJva2VuX3BvbGw9Im5vIChjcm9zcyBjb21waWxpbmcpIgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKwkjaW5jbHVkZSA8c3RkbGliLmg+CisJI2luY2x1ZGUgPGZjbnRsLmg+CisJI2luY2x1ZGUgPHBvbGwuaD4KKwkjaWZkZWYgSEFWRV9TWVNfUE9MTF9ICisJI2luY2x1ZGUgPHN5cy9wb2xsLmg+CisJI2VuZGlmCisJaW50IG1haW4odm9pZCkgeworCSAgc3RydWN0IHBvbGxmZCBmZHNbMV07CisJICBpbnQgZmQ7CisJICBmZCA9IG9wZW4oIi9kZXYvbnVsbCIsIDEpOworCSAgZmRzWzBdLmZkID0gZmQ7CisJICBmZHNbMF0uZXZlbnRzID0gUE9MTElOOworCSAgZmRzWzBdLnJldmVudHMgPSAwOworCSAgaWYgKHBvbGwoZmRzLCAxLCAwKSA8IDAgfHwgKGZkc1swXS5yZXZlbnRzICYgUE9MTE5WQUwpICE9IDApIHsKKwkJZXhpdCgxKTsgIC8qIERvZXMgbm90IHdvcmsgZm9yIGRldmljZXMgLS0gZmFpbCAqLworCSAgfQorCSAgZXhpdCgwKTsKKwl9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBicm9rZW5fcG9sbD1ubworZWxzZQorICBicm9rZW5fcG9sbD15ZXMKKworJGFzX2VjaG8gIiNkZWZpbmUgQlJPS0VOX1BPTEwgMSIgPj5jb25mZGVmcy5oCisKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGJyb2tlbl9wb2xsIiA+JjUKKyRhc19lY2hvICIkYnJva2VuX3BvbGwiID4mNjsgfQorCisKKworCisgIGZvciBhY19oZWFkZXIgaW4gJGFjX2hlYWRlcl9saXN0CitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0CisiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisKKworCisKKworCitmb3IgYWNfZnVuYyBpbiBnZXRwYWdlc2l6ZQorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJnZXRwYWdlc2l6ZSIgImFjX2N2X2Z1bmNfZ2V0cGFnZXNpemUiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZ2V0cGFnZXNpemUiID0geCIieWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0dFVFBBR0VTSVpFIDEKK19BQ0VPRgorCitmaQorZG9uZQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3b3JraW5nIG1tYXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgbW1hcC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBhY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkPW5vCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CisvKiBtYWxsb2MgbWlnaHQgaGF2ZSBiZWVuIHJlbmFtZWQgYXMgcnBsX21hbGxvYy4gKi8KKyN1bmRlZiBtYWxsb2MKKworLyogVGhhbmtzIHRvIE1pa2UgSGFlcnRlbCBhbmQgSmltIEF2ZXJhIGZvciB0aGlzIHRlc3QuCisgICBIZXJlIGlzIGEgbWF0cml4IG9mIG1tYXAgcG9zc2liaWxpdGllczoKKwltbWFwIHByaXZhdGUgbm90IGZpeGVkCisJbW1hcCBwcml2YXRlIGZpeGVkIGF0IHNvbWV3aGVyZSBjdXJyZW50bHkgdW5tYXBwZWQKKwltbWFwIHByaXZhdGUgZml4ZWQgYXQgc29tZXdoZXJlIGFscmVhZHkgbWFwcGVkCisJbW1hcCBzaGFyZWQgbm90IGZpeGVkCisJbW1hcCBzaGFyZWQgZml4ZWQgYXQgc29tZXdoZXJlIGN1cnJlbnRseSB1bm1hcHBlZAorCW1tYXAgc2hhcmVkIGZpeGVkIGF0IHNvbWV3aGVyZSBhbHJlYWR5IG1hcHBlZAorICAgRm9yIHByaXZhdGUgbWFwcGluZ3MsIHdlIHNob3VsZCB2ZXJpZnkgdGhhdCBjaGFuZ2VzIGNhbm5vdCBiZSByZWFkKCkKKyAgIGJhY2sgZnJvbSB0aGUgZmlsZSwgbm9yIG1tYXAncyBiYWNrIGZyb20gdGhlIGZpbGUgYXQgYSBkaWZmZXJlbnQKKyAgIGFkZHJlc3MuICAoVGhlcmUgaGF2ZSBiZWVuIHN5c3RlbXMgd2hlcmUgcHJpdmF0ZSB3YXMgbm90IGNvcnJlY3RseQorICAgaW1wbGVtZW50ZWQgbGlrZSB0aGUgaW5mYW1vdXMgaTM4NiBzdnI0LjAsIGFuZCBzeXN0ZW1zIHdoZXJlIHRoZQorICAgVk0gcGFnZSBjYWNoZSB3YXMgbm90IGNvaGVyZW50IHdpdGggdGhlIGZpbGUgc3lzdGVtIGJ1ZmZlciBjYWNoZQorICAgbGlrZSBlYXJseSB2ZXJzaW9ucyBvZiBGcmVlQlNEIGFuZCBwb3NzaWJseSBjb250ZW1wb3JhcnkgTmV0QlNELikKKyAgIEZvciBzaGFyZWQgbWFwcGluZ3MsIHdlIHNob3VsZCBjb252ZXJzZWx5IHZlcmlmeSB0aGF0IGNoYW5nZXMgZ2V0CisgICBwcm9wYWdhdGVkIGJhY2sgdG8gYWxsIHRoZSBwbGFjZXMgdGhleSdyZSBzdXBwb3NlZCB0byBiZS4KKworICAgR3JlcCB3YW50cyBwcml2YXRlIGZpeGVkIGFscmVhZHkgbWFwcGVkLgorICAgVGhlIG1haW4gdGhpbmdzIGdyZXAgbmVlZHMgdG8ga25vdyBhYm91dCBtbWFwIGFyZToKKyAgICogZG9lcyBpdCBleGlzdCBhbmQgaXMgaXQgc2FmZSB0byB3cml0ZSBpbnRvIHRoZSBtbWFwJ2QgYXJlYQorICAgKiBob3cgdG8gdXNlIGl0IChCU0QgdmFyaWFudHMpICAqLworCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorCisjaWYgIWRlZmluZWQgU1REQ19IRUFERVJTICYmICFkZWZpbmVkIEhBVkVfU1RETElCX0gKK2NoYXIgKm1hbGxvYyAoKTsKKyNlbmRpZgorCisvKiBUaGlzIG1lc3Mgd2FzIGNvcGllZCBmcm9tIHRoZSBHTlUgZ2V0cGFnZXNpemUuaC4gICovCisjaWZuZGVmIEhBVkVfR0VUUEFHRVNJWkUKKyMgaWZkZWYgX1NDX1BBR0VTSVpFCisjICBkZWZpbmUgZ2V0cGFnZXNpemUoKSBzeXNjb25mKF9TQ19QQUdFU0laRSkKKyMgZWxzZSAvKiBubyBfU0NfUEFHRVNJWkUgKi8KKyMgIGlmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyMgICBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyMgICBpZmRlZiBFWEVDX1BBR0VTSVpFCisjICAgIGRlZmluZSBnZXRwYWdlc2l6ZSgpIEVYRUNfUEFHRVNJWkUKKyMgICBlbHNlIC8qIG5vIEVYRUNfUEFHRVNJWkUgKi8KKyMgICAgaWZkZWYgTkJQRworIyAgICAgZGVmaW5lIGdldHBhZ2VzaXplKCkgTkJQRyAqIENMU0laRQorIyAgICAgaWZuZGVmIENMU0laRQorIyAgICAgIGRlZmluZSBDTFNJWkUgMQorIyAgICAgZW5kaWYgLyogbm8gQ0xTSVpFICovCisjICAgIGVsc2UgLyogbm8gTkJQRyAqLworIyAgICAgaWZkZWYgTkJQQworIyAgICAgIGRlZmluZSBnZXRwYWdlc2l6ZSgpIE5CUEMKKyMgICAgIGVsc2UgLyogbm8gTkJQQyAqLworIyAgICAgIGlmZGVmIFBBR0VTSVpFCisjICAgICAgIGRlZmluZSBnZXRwYWdlc2l6ZSgpIFBBR0VTSVpFCisjICAgICAgZW5kaWYgLyogUEFHRVNJWkUgKi8KKyMgICAgIGVuZGlmIC8qIG5vIE5CUEMgKi8KKyMgICAgZW5kaWYgLyogbm8gTkJQRyAqLworIyAgIGVuZGlmIC8qIG5vIEVYRUNfUEFHRVNJWkUgKi8KKyMgIGVsc2UgLyogbm8gSEFWRV9TWVNfUEFSQU1fSCAqLworIyAgIGRlZmluZSBnZXRwYWdlc2l6ZSgpIDgxOTIJLyogcHVudCB0b3RhbGx5ICovCisjICBlbmRpZiAvKiBubyBIQVZFX1NZU19QQVJBTV9IICovCisjIGVuZGlmIC8qIG5vIF9TQ19QQUdFU0laRSAqLworCisjZW5kaWYgLyogbm8gSEFWRV9HRVRQQUdFU0laRSAqLworCitpbnQKK21haW4gKCkKK3sKKyAgY2hhciAqZGF0YSwgKmRhdGEyLCAqZGF0YTM7CisgIGNvbnN0IGNoYXIgKmNkYXRhMjsKKyAgaW50IGksIHBhZ2VzaXplOworICBpbnQgZmQsIGZkMjsKKworICBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplICgpOworCisgIC8qIEZpcnN0LCBtYWtlIGEgZmlsZSB3aXRoIHNvbWUga25vd24gZ2FyYmFnZSBpbiBpdC4gKi8KKyAgZGF0YSA9IChjaGFyICopIG1hbGxvYyAocGFnZXNpemUpOworICBpZiAoIWRhdGEpCisgICAgcmV0dXJuIDE7CisgIGZvciAoaSA9IDA7IGkgPCBwYWdlc2l6ZTsgKytpKQorICAgICooZGF0YSArIGkpID0gcmFuZCAoKTsKKyAgdW1hc2sgKDApOworICBmZCA9IGNyZWF0ICgiY29uZnRlc3QubW1hcCIsIDA2MDApOworICBpZiAoZmQgPCAwKQorICAgIHJldHVybiAyOworICBpZiAod3JpdGUgKGZkLCBkYXRhLCBwYWdlc2l6ZSkgIT0gcGFnZXNpemUpCisgICAgcmV0dXJuIDM7CisgIGNsb3NlIChmZCk7CisKKyAgLyogTmV4dCwgY2hlY2sgdGhhdCB0aGUgdGFpbCBvZiBhIHBhZ2UgaXMgemVyby1maWxsZWQuICBGaWxlIG11c3QgaGF2ZQorICAgICBub24temVybyBsZW5ndGgsIG90aGVyd2lzZSB3ZSByaXNrIFNJR0JVUyBmb3IgZW50aXJlIHBhZ2UuICAqLworICBmZDIgPSBvcGVuICgiY29uZnRlc3QudHh0IiwgT19SRFdSIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2MDApOworICBpZiAoZmQyIDwgMCkKKyAgICByZXR1cm4gNDsKKyAgY2RhdGEyID0gIiI7CisgIGlmICh3cml0ZSAoZmQyLCBjZGF0YTIsIDEpICE9IDEpCisgICAgcmV0dXJuIDU7CisgIGRhdGEyID0gKGNoYXIgKikgbW1hcCAoMCwgcGFnZXNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkMiwgMEwpOworICBpZiAoZGF0YTIgPT0gTUFQX0ZBSUxFRCkKKyAgICByZXR1cm4gNjsKKyAgZm9yIChpID0gMDsgaSA8IHBhZ2VzaXplOyArK2kpCisgICAgaWYgKCooZGF0YTIgKyBpKSkKKyAgICAgIHJldHVybiA3OworICBjbG9zZSAoZmQyKTsKKyAgaWYgKG11bm1hcCAoZGF0YTIsIHBhZ2VzaXplKSkKKyAgICByZXR1cm4gODsKKworICAvKiBOZXh0LCB0cnkgdG8gbW1hcCB0aGUgZmlsZSBhdCBhIGZpeGVkIGFkZHJlc3Mgd2hpY2ggYWxyZWFkeSBoYXMKKyAgICAgc29tZXRoaW5nIGVsc2UgYWxsb2NhdGVkIGF0IGl0LiAgSWYgd2UgY2FuLCBhbHNvIG1ha2Ugc3VyZSB0aGF0CisgICAgIHdlIHNlZSB0aGUgc2FtZSBnYXJiYWdlLiAgKi8KKyAgZmQgPSBvcGVuICgiY29uZnRlc3QubW1hcCIsIE9fUkRXUik7CisgIGlmIChmZCA8IDApCisgICAgcmV0dXJuIDk7CisgIGlmIChkYXRhMiAhPSBtbWFwIChkYXRhMiwgcGFnZXNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCisJCSAgICAgTUFQX1BSSVZBVEUgfCBNQVBfRklYRUQsIGZkLCAwTCkpCisgICAgcmV0dXJuIDEwOworICBmb3IgKGkgPSAwOyBpIDwgcGFnZXNpemU7ICsraSkKKyAgICBpZiAoKihkYXRhICsgaSkgIT0gKihkYXRhMiArIGkpKQorICAgICAgcmV0dXJuIDExOworCisgIC8qIEZpbmFsbHksIG1ha2Ugc3VyZSB0aGF0IGNoYW5nZXMgdG8gdGhlIG1hcHBlZCBhcmVhIGRvIG5vdAorICAgICBwZXJjb2xhdGUgYmFjayB0byB0aGUgZmlsZSBhcyBzZWVuIGJ5IHJlYWQoKS4gIChUaGlzIGlzIGEgYnVnIG9uCisgICAgIHNvbWUgdmFyaWFudHMgb2YgaTM4NiBzdnI0LjAuKSAgKi8KKyAgZm9yIChpID0gMDsgaSA8IHBhZ2VzaXplOyArK2kpCisgICAgKihkYXRhMiArIGkpID0gKihkYXRhMiArIGkpICsgMTsKKyAgZGF0YTMgPSAoY2hhciAqKSBtYWxsb2MgKHBhZ2VzaXplKTsKKyAgaWYgKCFkYXRhMykKKyAgICByZXR1cm4gMTI7CisgIGlmIChyZWFkIChmZCwgZGF0YTMsIHBhZ2VzaXplKSAhPSBwYWdlc2l6ZSkKKyAgICByZXR1cm4gMTM7CisgIGZvciAoaSA9IDA7IGkgPCBwYWdlc2l6ZTsgKytpKQorICAgIGlmICgqKGRhdGEgKyBpKSAhPSAqKGRhdGEzICsgaSkpCisgICAgICByZXR1cm4gMTQ7CisgIGNsb3NlIChmZCk7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZD15ZXMKK2Vsc2UKKyAgYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZD1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9NTUFQIDEiID4+Y29uZmRlZnMuaAorCitmaQorcm0gLWYgY29uZnRlc3QubW1hcCBjb25mdGVzdC50eHQKKworIGlmIHRlc3QgIngkYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZCIgPSAieHllcyI7IHRoZW4KKyAgSEFWRV9NTUFQX1RSVUU9CisgIEhBVkVfTU1BUF9GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9NTUFQX1RSVUU9JyMnCisgIEhBVkVfTU1BUF9GQUxTRT0KK2ZpCisKKworZm9yIGFjX2Z1bmMgaW4gcG9zaXhfbWVtYWxpZ24KK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAicG9zaXhfbWVtYWxpZ24iICJhY19jdl9mdW5jX3Bvc2l4X21lbWFsaWduIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3Bvc2l4X21lbWFsaWduIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9QT1NJWF9NRU1BTElHTiAxCitfQUNFT0YKKworZmkKK2RvbmUKKworZm9yIGFjX2Z1bmMgaW4gZ2V0cGFnZXNpemUKK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZ2V0cGFnZXNpemUiICJhY19jdl9mdW5jX2dldHBhZ2VzaXplIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2dldHBhZ2VzaXplIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9HRVRQQUdFU0laRSAxCitfQUNFT0YKKworZmkKK2RvbmUKKworCitmb3IgYWNfZnVuYyBpbiBjbG9ja19nZXR0aW1lCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImNsb2NrX2dldHRpbWUiICJhY19jdl9mdW5jX2Nsb2NrX2dldHRpbWUiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfY2xvY2tfZ2V0dGltZSIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfQ0xPQ0tfR0VUVElNRSAxCitfQUNFT0YKKworZWxzZQorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGNsb2NrX2dldHRpbWUgaW4gLWxydCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgY2xvY2tfZ2V0dGltZSBpbiAtbHJ0Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9ydF9jbG9ja19nZXR0aW1lK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxydCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgY2xvY2tfZ2V0dGltZSAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGNsb2NrX2dldHRpbWUgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX3J0X2Nsb2NrX2dldHRpbWU9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9ydF9jbG9ja19nZXR0aW1lPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9ydF9jbG9ja19nZXR0aW1lIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3J0X2Nsb2NrX2dldHRpbWUiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfcnRfY2xvY2tfZ2V0dGltZSIgPSB4IiJ5ZXM7IHRoZW4gOgorCisgICAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DTE9DS19HRVRUSU1FIDEiID4+Y29uZmRlZnMuaAorCisgICAgTElCUz0iJExJQlMgLWxydCIKKworZmkKKworCitmaQorZG9uZQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHBvc2l4IHRpbWVycyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcG9zaXggdGltZXJzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2dzdF9jdl9wb3NpeF90aW1lcnMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDx0aW1lLmg+CisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworCisjaWYgIWRlZmluZWQoX1BPU0lYX1RJTUVSUykgfHwgX1BPU0lYX1RJTUVSUyA8IDAgfHwgIWRlZmluZWQoQ0xPQ0tfUkVBTFRJTUUpCisjZXJyb3IgRWl0aGVyIF9QT1NJWF9USU1FUlMgb3IgQ0xPQ0tfUkVBTFRJTUUgbm90IGRlZmluZWQKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgZ3N0X2N2X3Bvc2l4X3RpbWVycz15ZXMKKworZWxzZQorCisgICAgICBnc3RfY3ZfcG9zaXhfdGltZXJzPW5vCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3N0X2N2X3Bvc2l4X3RpbWVycyIgPiY1CiskYXNfZWNobyAiJGdzdF9jdl9wb3NpeF90aW1lcnMiID4mNjsgfQorCitpZiB0ZXN0ICIkZ3N0X2N2X3Bvc2l4X3RpbWVycyIgPSAieWVzIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1BPU0lYX1RJTUVSUyAxIiA+PmNvbmZkZWZzLmgKKworICBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FPSIjZGVmaW5lIEdTVF9IQVZFX1BPU0lYX1RJTUVSUyAxIgorZWxzZQorICBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FPSIjZGVmaW5lIEdTVF9IQVZFX1BPU0lYX1RJTUVSUyAwIgorZmkKKworIGlmIHRlc3QgIiRnc3RfY3ZfcG9zaXhfdGltZXJzIiA9ICJ5ZXMiOyB0aGVuCisgIEdTVF9IQVZFX1BPU0lYX1RJTUVSU19UUlVFPQorICBHU1RfSEFWRV9QT1NJWF9USU1FUlNfRkFMU0U9JyMnCitlbHNlCisgIEdTVF9IQVZFX1BPU0lYX1RJTUVSU19UUlVFPScjJworICBHU1RfSEFWRV9QT1NJWF9USU1FUlNfRkFMU0U9CitmaQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG1vbm90b25pYyBjbG9jayIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbW9ub3RvbmljIGNsb2NrLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2dzdF9jdl9tb25vdG9uaWNfY2xvY2src2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDx0aW1lLmg+CisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworCisjaWYgIWRlZmluZWQoX1BPU0lYX01PTk9UT05JQ19DTE9DSykgfHwgX1BPU0lYX01PTk9UT05JQ19DTE9DSyA8IDAgfHwgIWRlZmluZWQoQ0xPQ0tfTU9OT1RPTklDKQorI2Vycm9yIEVpdGhlciBfUE9TSVhfTU9OT1RPTklDX0NMT0NLIG9yIENMT0NLX01PTk9UT05JQyBub3QgZGVmaW5lZAorI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICBnc3RfY3ZfbW9ub3RvbmljX2Nsb2NrPXllcworCitlbHNlCisKKyAgICAgIGdzdF9jdl9tb25vdG9uaWNfY2xvY2s9bm8KKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnc3RfY3ZfbW9ub3RvbmljX2Nsb2NrIiA+JjUKKyRhc19lY2hvICIkZ3N0X2N2X21vbm90b25pY19jbG9jayIgPiY2OyB9CisKK2lmIHRlc3QgIiRnc3RfY3ZfbW9ub3RvbmljX2Nsb2NrIiA9ICJ5ZXMiOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTU9OT1RPTklDX0NMT0NLIDEiID4+Y29uZmRlZnMuaAorCisgIEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkU9IiNkZWZpbmUgR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLIDEiCitlbHNlCisgIEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkU9IiNkZWZpbmUgR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLIDAiCitmaQorCisgaWYgdGVzdCAiJGdzdF9jdl9tb25vdG9uaWNfY2xvY2siID0gInllcyI7IHRoZW4KKyAgR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX1RSVUU9CisgIEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19GQUxTRT0nIycKK2Vsc2UKKyAgR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX1RSVUU9JyMnCisgIEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19GQUxTRT0KK2ZpCisKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDQyBpbXBsZW1lbnRzIF9fUFJFVFRZX0ZVTkNUSU9OX18iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgaW1wbGVtZW50cyBfX1BSRVRUWV9GVU5DVElPTl9fLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR7Z3N0X2N2X2hhdmVfcHJldHR5X2Z1bmN0aW9uK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgoraW50CittYWluICgpCit7CitwcmludGYoIiVzIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ3N0X2N2X2hhdmVfcHJldHR5X2Z1bmN0aW9uPXllcworZWxzZQorICBnc3RfY3ZfaGF2ZV9wcmV0dHlfZnVuY3Rpb249bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3N0X2N2X2hhdmVfcHJldHR5X2Z1bmN0aW9uIiA+JjUKKyRhc19lY2hvICIkZ3N0X2N2X2hhdmVfcHJldHR5X2Z1bmN0aW9uIiA+JjY7IH0KKyAgaWYgdGVzdCAiJGdzdF9jdl9oYXZlX3ByZXR0eV9mdW5jdGlvbiIgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9QUkVUVFlfRlVOQ1RJT04gMSIgPj5jb25mZGVmcy5oCisKKyAgZmkKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIGltcGxlbWVudHMgX19GVU5DVElPTl9fIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIGltcGxlbWVudHMgX19GVU5DVElPTl9fLi4uICIgPiY2OyB9CisgIGlmIHRlc3QgIiR7Z3N0X2N2X2hhdmVfZnVuY3Rpb24rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQKK21haW4gKCkKK3sKK3ByaW50ZigiJXMiLCBfX0ZVTkNUSU9OX18pOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGdzdF9jdl9oYXZlX2Z1bmN0aW9uPXllcworZWxzZQorICBnc3RfY3ZfaGF2ZV9mdW5jdGlvbj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnc3RfY3ZfaGF2ZV9mdW5jdGlvbiIgPiY1CiskYXNfZWNobyAiJGdzdF9jdl9oYXZlX2Z1bmN0aW9uIiA+JjY7IH0KKyAgaWYgdGVzdCAiJGdzdF9jdl9oYXZlX2Z1bmN0aW9uIiA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0ZVTkNUSU9OIDEiID4+Y29uZmRlZnMuaAorCisgIGZpCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDQyBpbXBsZW1lbnRzIF9fZnVuY19fIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIGltcGxlbWVudHMgX19mdW5jX18uLi4gIiA+JjY7IH0KKyAgaWYgdGVzdCAiJHtnc3RfY3ZfaGF2ZV9mdW5jK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgoraW50CittYWluICgpCit7CitwcmludGYoIiVzIiwgX19mdW5jX18pOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGdzdF9jdl9oYXZlX2Z1bmM9eWVzCitlbHNlCisgIGdzdF9jdl9oYXZlX2Z1bmM9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3N0X2N2X2hhdmVfZnVuYyIgPiY1CiskYXNfZWNobyAiJGdzdF9jdl9oYXZlX2Z1bmMiID4mNjsgfQorICBpZiB0ZXN0ICIkZ3N0X2N2X2hhdmVfZnVuYyIgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9GVU5DIDEiID4+Y29uZmRlZnMuaAorCisgIGZpCisKKyAgaWYgdGVzdCAiJGdzdF9jdl9oYXZlX3ByZXR0eV9mdW5jdGlvbiIgPSB5ZXM7IHRoZW4KKyAgICBmdW5jdGlvbj1fX1BSRVRUWV9GVU5DVElPTl9fCisgIGVsc2UKKyAgICBpZiB0ZXN0ICIkZ3N0X2N2X2hhdmVfZnVuY3Rpb24iID0geWVzOyB0aGVuCisgICAgICBmdW5jdGlvbj1fX0ZVTkNUSU9OX18KKyAgICBlbHNlCisgICAgICBpZiB0ZXN0ICIkZ3N0X2N2X2hhdmVfZnVuYyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgZnVuY3Rpb249X19mdW5jX18KKyAgICAgIGVsc2UKKyAgICAgICAgZnVuY3Rpb249XCJcIgorICAgICAgZmkKKyAgICBmaQorICBmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEdTVF9GVU5DVElPTiAkZnVuY3Rpb24KK19BQ0VPRgorCisKKworZm9yIGFjX2Z1bmMgaW4gcmVnaXN0ZXJfcHJpbnRmX3NwZWNpZmllciByZWdpc3Rlcl9wcmludGZfZnVuY3Rpb24KK2RvIDoKKyAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorIEhBVkVfUFJJTlRGX0VYVEVOU0lPTj15ZXMKK2ZpCitkb25lCisKKworaWYgdGVzdCAiJEhBVkVfUFJJTlRGX0VYVEVOU0lPTiIgPSB5ZXM7IHRoZW4KKyAgR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FPSIjZGVmaW5lIEdTVF9QVFJfRk9STUFUIFwiUFwiIgorICBHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkU9IiNkZWZpbmUgR1NUX1NFR01FTlRfRk9STUFUIFwiUVwiIgorICBHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkU9IiNkZWZpbmUgR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT04iCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfUFJJTlRGX0VYVEVOU0lPTiAxIiA+PmNvbmZkZWZzLmgKKworZWxzZQorICAgIEdTVF9QUklOVEZfRVhURU5TSU9OX1BPSU5URVJfRk9STUFUX0RFRklORT0iI2RlZmluZSBHU1RfUFRSX0ZPUk1BVCBcInBcIiIKKyAgICBHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkU9IiNkZWZpbmUgR1NUX1NFR01FTlRfRk9STUFUIFwicFwiIgorICAgIEdTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OX0RFRklORT0iI3VuZGVmIEdTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OIgorZmkKKworCisKKworc2F2ZV9jZmxhZ3M9IiRDRkxBR1MiCitDRkxBR1M9IiRDRkxBR1MgLURfR05VX1NPVVJDRSIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsYWRkciBpbiAtbGRsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbGFkZHIgaW4gLWxkbC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfZGxfZGxhZGRyK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxkbCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGxhZGRyICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZGxhZGRyICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9kbF9kbGFkZHI9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9kbF9kbGFkZHI9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2RsYWRkciIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbF9kbGFkZHIiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxhZGRyIiA9IHgiInllczsgdGhlbiA6CisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfRExBRERSIDEiID4+Y29uZmRlZnMuaAorCisgICBMSUJTPSIkTElCUyAtbGRsIgorZmkKKworQ0ZMQUdTPSIkc2F2ZV9jZmxhZ3MiCisKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInNvY2tldCIgImFjX2N2X2Z1bmNfc29ja2V0IgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3NvY2tldCIgPSB4IiJ5ZXM7IHRoZW4gOgorCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNvY2tldCBpbiAtbHNvY2tldCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc29ja2V0IGluIC1sc29ja2V0Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9zb2NrZXRfc29ja2V0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxzb2NrZXQgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHNvY2tldCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHNvY2tldCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfc29ja2V0X3NvY2tldD15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3NvY2tldF9zb2NrZXQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3NvY2tldF9zb2NrZXQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfc29ja2V0X3NvY2tldCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9zb2NrZXRfc29ja2V0IiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9MSUJTT0NLRVQgMQorX0FDRU9GCisKKyAgTElCUz0iLWxzb2NrZXQgJExJQlMiCisKK2ZpCisKK2ZpCisKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImdldGhvc3RieW5hbWUiICJhY19jdl9mdW5jX2dldGhvc3RieW5hbWUiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZSIgPSB4IiJ5ZXM7IHRoZW4gOgorCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUgaW4gLWxuc2wiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUgaW4gLWxuc2wuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX25zbF9nZXRob3N0YnluYW1lK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxuc2wgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGdldGhvc3RieW5hbWUgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBnZXRob3N0YnluYW1lICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9uc2xfZ2V0aG9zdGJ5bmFtZT15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX25zbF9nZXRob3N0YnluYW1lPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9uc2xfZ2V0aG9zdGJ5bmFtZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9uc2xfZ2V0aG9zdGJ5bmFtZSIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9uc2xfZ2V0aG9zdGJ5bmFtZSIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTElCTlNMIDEKK19BQ0VPRgorCisgIExJQlM9Ii1sbnNsICRMSUJTIgorCitmaQorCitmaQorCisKK3NhdmVfbGlicz0iJExJQlMiCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJpbmV0X2F0b24iICJhY19jdl9mdW5jX2luZXRfYXRvbiIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19pbmV0X2F0b24iID0geCIieWVzOyB0aGVuIDoKKworZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBpbmV0X2F0b24gaW4gLWxuc2wiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGluZXRfYXRvbiBpbiAtbG5zbC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfbnNsX2luZXRfYXRvbitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sbnNsICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBpbmV0X2F0b24gKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBpbmV0X2F0b24gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX25zbF9pbmV0X2F0b249eWVzCitlbHNlCisgIGFjX2N2X2xpYl9uc2xfaW5ldF9hdG9uPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9uc2xfaW5ldF9hdG9uIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX25zbF9pbmV0X2F0b24iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfbnNsX2luZXRfYXRvbiIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTElCTlNMIDEKK19BQ0VPRgorCisgIExJQlM9Ii1sbnNsICRMSUJTIgorCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGluZXRfYXRvbiBpbiAtbHNvY2tldCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgaW5ldF9hdG9uIGluIC1sc29ja2V0Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9zb2NrZXRfaW5ldF9hdG9uK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxzb2NrZXQgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGluZXRfYXRvbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGluZXRfYXRvbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfc29ja2V0X2luZXRfYXRvbj15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3NvY2tldF9pbmV0X2F0b249bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3NvY2tldF9pbmV0X2F0b24iID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfc29ja2V0X2luZXRfYXRvbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9zb2NrZXRfaW5ldF9hdG9uIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9MSUJTT0NLRVQgMQorX0FDRU9GCisKKyAgTElCUz0iLWxzb2NrZXQgJExJQlMiCisKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgaW5ldF9hdG9uIGluIC1scmVzb2x2IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBpbmV0X2F0b24gaW4gLWxyZXNvbHYuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX3Jlc29sdl9pbmV0X2F0b24rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHJlc29sdiAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgaW5ldF9hdG9uICgpOworaW50CittYWluICgpCit7CityZXR1cm4gaW5ldF9hdG9uICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9yZXNvbHZfaW5ldF9hdG9uPXllcworZWxzZQorICBhY19jdl9saWJfcmVzb2x2X2luZXRfYXRvbj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfcmVzb2x2X2luZXRfYXRvbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9yZXNvbHZfaW5ldF9hdG9uIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3Jlc29sdl9pbmV0X2F0b24iID0geCIieWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0xJQlJFU09MViAxCitfQUNFT0YKKworICBMSUJTPSItbHJlc29sdiAkTElCUyIKKworZWxzZQorCiskYXNfZWNobyAiI2RlZmluZSBOT19JTkVUX0FUT04gMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKK2ZpCisKK2ZpCisKK2ZpCisKK0lORVRfQVRPTl9MSUJTPSRMSUJTCisKK0xJQlM9IiRzYXZlX2xpYnMiCisKKworR0xJQl9SRVE9Mi4yNgorCisKKworCisgICAgR0xJQl9SRVE9JEdMSUJfUkVRCisgIGlmIHRlc3QgIngkR0xJQl9SRVEiID0gIngiCisgIHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiUGxlYXNlIHNwZWNpZnkgYSByZXF1aXJlZCB2ZXJzaW9uIGZvciBHTGliIDIuMCIgIiRMSU5FTk8iIDUKKyAgZmkKKworCisKKyAgd2hpY2g9ImdsaWItMi4wID49ICRHTElCX1JFUSBnb2JqZWN0LTIuMCBndGhyZWFkLTIuMCBnbW9kdWxlLW5vLWV4cG9ydC0yLjAiCisgICAgcmVxdWlyZWQ9Im5vIgorCisKK3BrZ19mYWlsZWQ9bm8KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdMSUIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdMSUIuLi4gIiA+JjY7IH0KKworaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJEdMSUJfQ0ZMQUdTIjsgdGhlbgorICAgICAgICBwa2dfY3ZfR0xJQl9DRkxBR1M9IiRHTElCX0NGTEFHUyIKKyAgICBlbHNlCisgICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIlwkd2hpY2hcIiI7IH0gPiY1CisgICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiJHdoaWNoIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgcGtnX2N2X0dMSUJfQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyAiJHdoaWNoIiAyPi9kZXYvbnVsbGAKK2Vsc2UKKyAgcGtnX2ZhaWxlZD15ZXMKK2ZpCisgICAgZmkKK2Vsc2UKKwlwa2dfZmFpbGVkPXVudHJpZWQKK2ZpCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkR0xJQl9MSUJTIjsgdGhlbgorICAgICAgICBwa2dfY3ZfR0xJQl9MSUJTPSIkR0xJQl9MSUJTIgorICAgIGVsc2UKKyAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiXCR3aGljaFwiIjsgfSA+JjUKKyAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkd2hpY2giKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICBwa2dfY3ZfR0xJQl9MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgIiR3aGljaCIgMj4vZGV2L251bGxgCitlbHNlCisgIHBrZ19mYWlsZWQ9eWVzCitmaQorICAgIGZpCitlbHNlCisJcGtnX2ZhaWxlZD11bnRyaWVkCitmaQorCisKKworaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgorCitpZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCitlbHNlCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubworZmkKKyAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCisJICAgICAgICBHTElCX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAiJHdoaWNoImAKKyAgICAgICAgZWxzZQorCSAgICAgICAgR0xJQl9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgIiR3aGljaCJgCisgICAgICAgIGZpCisJIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCisJZWNobyAiJEdMSUJfUEtHX0VSUk9SUyIgPiY1CisKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworICAgICAgSEFWRV9HTElCPSJubyIKKyAgICAgIGlmIHRlc3QgIngkcmVxdWlyZWQiID0gInh5ZXMiOyB0aGVuCisgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICIkR0xJQl9QS0dfRVJST1JTIiAiJExJTkVOTyIgNQorICAgICAgZWxzZQorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRHTElCX1BLR19FUlJPUlMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogJEdMSUJfUEtHX0VSUk9SUyIgPiY2O30KKyAgICAgIGZpCisKK2VsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KKworICAgICAgSEFWRV9HTElCPSJubyIKKyAgICAgIGlmIHRlc3QgIngkcmVxdWlyZWQiID0gInh5ZXMiOyB0aGVuCisgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICIkR0xJQl9QS0dfRVJST1JTIiAiJExJTkVOTyIgNQorICAgICAgZWxzZQorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRHTElCX1BLR19FUlJPUlMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogJEdMSUJfUEtHX0VSUk9SUyIgPiY2O30KKyAgICAgIGZpCisKK2Vsc2UKKwlHTElCX0NGTEFHUz0kcGtnX2N2X0dMSUJfQ0ZMQUdTCisJR0xJQl9MSUJTPSRwa2dfY3ZfR0xJQl9MSUJTCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKKyAgICAgIEhBVkVfR0xJQj0ieWVzIgorCitmaQorCisKKworICBpZiB0ZXN0ICJ4JEhBVkVfR0xJQiIgPSAieG5vIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJUaGlzIHBhY2thZ2UgcmVxdWlyZXMgR0xpYiA+PSAkR0xJQl9SRVEgdG8gY29tcGlsZS4iICIkTElORU5PIiA1CisgIGZpCisKKyAgICAgICAgR0xJQl9FWFRSQV9DRkxBR1M9IiRHTElCX0VYVFJBX0NGTEFHUyAtREdfVEhSRUFEU19NQU5EQVRPUlkiCisKKyAgICBpZiB0ZXN0ICJ4JFBBQ0tBR0VfVkVSU0lPTl9OQU5PIiA9ICJ4MSI7IHRoZW4KKyAgICBHTElCX0VYVFJBX0NGTEFHUz0iJEdMSUJfRVhUUkFfQ0ZMQUdTIC1ER19ESVNBQkxFX0RFUFJFQ0FURUQiCisgIGZpCisKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWdvYmplY3QtY2FzdC1jaGVja3Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZ29iamVjdF9jYXN0X2NoZWNrcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2dvYmplY3RfY2FzdF9jaGVja3M7CitlbHNlCisgIGVuYWJsZV9nb2JqZWN0X2Nhc3RfY2hlY2tzPWF1dG8KK2ZpCisKKworICBpZiB0ZXN0ICJ4JGVuYWJsZV9nb2JqZWN0X2Nhc3RfY2hlY2tzIiA9ICJ4YXV0byI7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAieCRQQUNLQUdFX1ZFUlNJT05fTkFOTyIgPSAieDEiOyB0aGVuCisgICAgICBlbmFibGVfZ29iamVjdF9jYXN0X2NoZWNrcz15ZXMKKyAgICBlbHNlCisgICAgICBlbmFibGVfZ29iamVjdF9jYXN0X2NoZWNrcz1ubworICAgIGZpCisgIGZpCisKKyAgaWYgdGVzdCAieCRlbmFibGVfZ29iamVjdF9jYXN0X2NoZWNrcyIgPSAieG5vIjsgdGhlbgorICAgIEdMSUJfRVhUUkFfQ0ZMQUdTPSIkR0xJQl9FWFRSQV9DRkxBR1MgLURHX0RJU0FCTEVfQ0FTVF9DSEVDS1MiCisgIGZpCisKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWdsaWItYXNzZXJ0cyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9nbGliX2Fzc2VydHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9nbGliX2Fzc2VydHM7CitlbHNlCisgIGVuYWJsZV9nbGliX2Fzc2VydGlvbnM9YXV0bworZmkKKworCisgIGlmIHRlc3QgIngkZW5hYmxlX2dsaWJfYXNzZXJ0aW9ucyIgPSAieGF1dG8iOyB0aGVuCisgICAgICAgIGlmIHRlc3QgIngkUEFDS0FHRV9WRVJTSU9OX05BTk8iID0gIngxIjsgdGhlbgorICAgICAgZW5hYmxlX2dsaWJfYXNzZXJ0aW9ucz15ZXMKKyAgICBlbHNlCisgICAgICBlbmFibGVfZ2xpYl9hc3NlcnRpb25zPW5vCisgICAgZmkKKyAgZmkKKworICBpZiB0ZXN0ICJ4JGVuYWJsZV9nbGliX2Fzc2VydGlvbnMiID0gInhubyI7IHRoZW4KKyAgICBHTElCX0VYVFJBX0NGTEFHUz0iJEdMSUJfRVhUUkFfQ0ZMQUdTIC1ER19ESVNBQkxFX0FTU0VSVCIKKyAgZmkKKworCisgIEdJVkVOX0NGTEFHUz0kR0xJQl9DRkxBR1MKKyAgSU5DTFVERV9ESVJTPWBlY2hvIHwgY3BwIC12IDI+JjFgCisKKyAgICAgIElOQ0xVREVfRElSUz1gZWNobyAkSU5DTFVERV9ESVJTIHwgc2VkIC1lICdzLy4qPC4uLj4gc2VhcmNoIHN0YXJ0cyBoZXJlOi8vJyB8IHNlZCAtZSAncy9FbmQgb2Ygc2VhcmNoIGxpc3QuKi8vJ2AKKyAgZm9yIGRpciBpbiAkSU5DTFVERV9ESVJTOyBkbworICAgICAgICBHSVZFTl9DRkxBR1M9YGVjaG8gJEdJVkVOX0NGTEFHUyB8IHNlZCAtZSAicyMtSSRkaXIgIyMiYAorICBkb25lCisgIEdMSUJfQ0ZMQUdTPSRHSVZFTl9DRkxBR1MKKworCisKKworcGtnX2ZhaWxlZD1ubworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR0xJQl9PTkxZIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBHTElCX09OTFkuLi4gIiA+JjY7IH0KKworaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJEdMSUJfT05MWV9DRkxBR1MiOyB0aGVuCisgICAgICAgIHBrZ19jdl9HTElCX09OTFlfQ0ZMQUdTPSIkR0xJQl9PTkxZX0NGTEFHUyIKKyAgICBlbHNlCisgICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcImdsaWItMi4wID49IFwkR0xJQl9SRVFcIiI7IH0gPiY1CisgICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiZ2xpYi0yLjAgPj0gJEdMSUJfUkVRIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgcGtnX2N2X0dMSUJfT05MWV9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICJnbGliLTIuMCA+PSAkR0xJQl9SRVEiIDI+L2Rldi9udWxsYAorZWxzZQorICBwa2dfZmFpbGVkPXllcworZmkKKyAgICBmaQorZWxzZQorCXBrZ19mYWlsZWQ9dW50cmllZAorZmkKK2lmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRHTElCX09OTFlfTElCUyI7IHRoZW4KKyAgICAgICAgcGtnX2N2X0dMSUJfT05MWV9MSUJTPSIkR0xJQl9PTkxZX0xJQlMiCisgICAgZWxzZQorICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJnbGliLTIuMCA+PSBcJEdMSUJfUkVRXCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgImdsaWItMi4wID49ICRHTElCX1JFUSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgIHBrZ19jdl9HTElCX09OTFlfTElCUz1gJFBLR19DT05GSUcgLS1saWJzICJnbGliLTIuMCA+PSAkR0xJQl9SRVEiIDI+L2Rldi9udWxsYAorZWxzZQorICBwa2dfZmFpbGVkPXllcworZmkKKyAgICBmaQorZWxzZQorCXBrZ19mYWlsZWQ9dW50cmllZAorZmkKKworCisKK2lmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KKworaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcworZWxzZQorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KK2ZpCisgICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgorCSAgICAgICAgR0xJQl9PTkxZX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAiZ2xpYi0yLjAgPj0gJEdMSUJfUkVRImAKKyAgICAgICAgZWxzZQorCSAgICAgICAgR0xJQl9PTkxZX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAiZ2xpYi0yLjAgPj0gJEdMSUJfUkVRImAKKyAgICAgICAgZmkKKwkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKKwllY2hvICIkR0xJQl9PTkxZX1BLR19FUlJPUlMiID4mNQorCisJYXNfZm5fZXJyb3IgJD8gIlBhY2thZ2UgcmVxdWlyZW1lbnRzIChnbGliLTIuMCA+PSAkR0xJQl9SRVEpIHdlcmUgbm90IG1ldDoKKworJEdMSUJfT05MWV9QS0dfRVJST1JTCisKK0NvbnNpZGVyIGFkanVzdGluZyB0aGUgUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHlvdQoraW5zdGFsbGVkIHNvZnR3YXJlIGluIGEgbm9uLXN0YW5kYXJkIHByZWZpeC4KKworQWx0ZXJuYXRpdmVseSwgeW91IG1heSBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBHTElCX09OTFlfQ0ZMQUdTCithbmQgR0xJQl9PTkxZX0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29uZmlnLgorU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuCisiICIkTElORU5PIiA1CitlbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCisJeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiVGhlIHBrZy1jb25maWcgc2NyaXB0IGNvdWxkIG5vdCBiZSBmb3VuZCBvciBpcyB0b28gb2xkLiAgTWFrZSBzdXJlIGl0CitpcyBpbiB5b3VyIFBBVEggb3Igc2V0IHRoZSBQS0dfQ09ORklHIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBmdWxsCitwYXRoIHRvIHBrZy1jb25maWcuCisKK0FsdGVybmF0aXZlbHksIHlvdSBtYXkgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgR0xJQl9PTkxZX0NGTEFHUworYW5kIEdMSUJfT05MWV9MSUJTIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGNhbGwgcGtnLWNvbmZpZy4KK1NlZSB0aGUgcGtnLWNvbmZpZyBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLgorCitUbyBnZXQgcGtnLWNvbmZpZywgc2VlIDxodHRwOi8vcGtnLWNvbmZpZy5mcmVlZGVza3RvcC5vcmcvPi4KK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1IDsgfQorZWxzZQorCUdMSUJfT05MWV9DRkxBR1M9JHBrZ19jdl9HTElCX09OTFlfQ0ZMQUdTCisJR0xJQl9PTkxZX0xJQlM9JHBrZ19jdl9HTElCX09OTFlfTElCUworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCToKK2ZpCisKK0dMSUJfUFJFRklYPSJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1wcmVmaXggZ2xpYi0yLjBgIgorCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1jaGVjayB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9jaGVjaytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2NoZWNrOworICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgIHllcykgQlVJTERfQ0hFQ0s9eWVzIDs7CisgICAgICBubykgIEJVSUxEX0NIRUNLPW5vIDs7CisgICAgICAqKSAgIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWRpc2FibGUtY2hlY2siICIkTElORU5PIiA1ICA7OworICAgIGVzYWMKKworZWxzZQorCisgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIG1pbmd3KiB8IG1zdmMqIHwgbWtzKikgQlVJTERfQ0hFQ0s9bm8gOzsKKyAgICAgICopIEJVSUxEX0NIRUNLPXllcyA7OworICAgIGVzYWMKKworZmkKKworIGlmIHRlc3QgIngkQlVJTERfQ0hFQ0siID0gInh5ZXMiOyB0aGVuCisgIEhBVkVfQ0hFQ0tfVFJVRT0KKyAgSEFWRV9DSEVDS19GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9DSEVDS19UUlVFPScjJworICBIQVZFX0NIRUNLX0ZBTFNFPQorZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWVtb3J5LWFsaWdubWVudCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbWVtb3J5X2FsaWdubWVudCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbWVtb3J5X2FsaWdubWVudDsKKyAgICBpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInh5ZXMiCisgICAgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBNRU1PUllfQUxJR05NRU5UIDMyIiA+PmNvbmZkZWZzLmgKKworICAgIGVsc2UKKyAgICAgIGNhc2UgIiR7d2l0aHZhbH0iIGluCisgICAgICAgIG1hbGxvYykKKyRhc19lY2hvICIjZGVmaW5lIE1FTU9SWV9BTElHTk1FTlRfTUFMTE9DIDEiID4+Y29uZmRlZnMuaAorIDs7CisgICAgICAgIHBhZ2VzaXplKQorJGFzX2VjaG8gIiNkZWZpbmUgTUVNT1JZX0FMSUdOTUVOVF9QQUdFU0laRSAxIiA+PmNvbmZkZWZzLmgKKyA7OworICAgICAgICAqKQorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBNRU1PUllfQUxJR05NRU5UICR7d2l0aHZhbH0KK19BQ0VPRgorIDs7CisgICAgICBlc2FjCisgICAgZmkKKworZWxzZQorCisKKyRhc19lY2hvICIjZGVmaW5lIE1FTU9SWV9BTElHTk1FTlRfTUFMTE9DIDEiID4+Y29uZmRlZnMuaAorCisKKworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtQnN5bWJvbGljIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX0JzeW1ib2xpYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX0JzeW1ib2xpYzsKK2Vsc2UKKyAgU0FWRURfTERGTEFHUz0iJHtMREZMQUdTfSIKKyAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC1Cc3ltYm9saWMtZnVuY3Rpb25zIGxpbmtlciBmbGFnIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAtQnN5bWJvbGljLWZ1bmN0aW9ucyBsaW5rZXIgZmxhZy4uLiAiID4mNjsgfQorICAgICAgICAgICAgICAgTERGTEFHUz0tV2wsLUJzeW1ib2xpYy1mdW5jdGlvbnMKKyAgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CitpbnQgbWFpbiAodm9pZCkgeyByZXR1cm4gMDsgfQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVfQnN5bWJvbGljPXllcworZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9Cc3ltYm9saWM9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgICAgICAgTERGTEFHUz0iJHtTQVZFRF9MREZMQUdTfSIKK2ZpCisKKworCisKK0dTVF9MSUNFTlNFPSJMR1BMIgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEdTVF9MSUNFTlNFICIkR1NUX0xJQ0VOU0UiCitfQUNFT0YKKworCisKKworICBFWFBfVkFSPUxJQkRJUgorICBGUk9NX1ZBUj0kbGliZGlyCisKKyAgICBwcmVmaXhfc2F2ZT0kcHJlZml4CisgIGV4ZWNfcHJlZml4X3NhdmU9JGV4ZWNfcHJlZml4CisKKyAgICBpZiB0ZXN0ICJ4JHByZWZpeCIgPSAieE5PTkUiOyB0aGVuCisgICAgcHJlZml4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCisgIGZpCisgICAgaWYgdGVzdCAieCRleGVjX3ByZWZpeCIgPSAieE5PTkUiOyB0aGVuCisgICAgZXhlY19wcmVmaXg9JHByZWZpeAorICBmaQorCisgIGZ1bGxfdmFyPSIkRlJPTV9WQVIiCisgICAgd2hpbGUgdHJ1ZTsgZG8KKyAgICBuZXdfZnVsbF92YXI9ImBldmFsIGVjaG8gJGZ1bGxfdmFyYCIKKyAgICBpZiB0ZXN0ICJ4JG5ld19mdWxsX3ZhciIgPSAieCRmdWxsX3ZhciI7IHRoZW4gYnJlYWs7IGZpCisgICAgZnVsbF92YXI9JG5ld19mdWxsX3ZhcgorICBkb25lCisKKyAgICBmdWxsX3Zhcj0kbmV3X2Z1bGxfdmFyCisgIExJQkRJUj0iJGZ1bGxfdmFyIgorCisKKyAgICBwcmVmaXg9JHByZWZpeF9zYXZlCisgIGV4ZWNfcHJlZml4PSRleGVjX3ByZWZpeF9zYXZlCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBMSUJESVIgIiRMSUJESVIiCitfQUNFT0YKKworCisgIEVYUF9WQVI9REFUQURJUgorICBGUk9NX1ZBUj0kZGF0YWRpcgorCisgICAgcHJlZml4X3NhdmU9JHByZWZpeAorICBleGVjX3ByZWZpeF9zYXZlPSRleGVjX3ByZWZpeAorCisgICAgaWYgdGVzdCAieCRwcmVmaXgiID0gInhOT05FIjsgdGhlbgorICAgIHByZWZpeD0iJGFjX2RlZmF1bHRfcHJlZml4IgorICBmaQorICAgIGlmIHRlc3QgIngkZXhlY19wcmVmaXgiID0gInhOT05FIjsgdGhlbgorICAgIGV4ZWNfcHJlZml4PSRwcmVmaXgKKyAgZmkKKworICBmdWxsX3Zhcj0iJEZST01fVkFSIgorICAgIHdoaWxlIHRydWU7IGRvCisgICAgbmV3X2Z1bGxfdmFyPSJgZXZhbCBlY2hvICRmdWxsX3ZhcmAiCisgICAgaWYgdGVzdCAieCRuZXdfZnVsbF92YXIiID0gIngkZnVsbF92YXIiOyB0aGVuIGJyZWFrOyBmaQorICAgIGZ1bGxfdmFyPSRuZXdfZnVsbF92YXIKKyAgZG9uZQorCisgICAgZnVsbF92YXI9JG5ld19mdWxsX3ZhcgorICBEQVRBRElSPSIkZnVsbF92YXIiCisKKworICAgIHByZWZpeD0kcHJlZml4X3NhdmUKKyAgZXhlY19wcmVmaXg9JGV4ZWNfcHJlZml4X3NhdmUKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEdTVF9EQVRBRElSICIkREFUQURJUiIKK19BQ0VPRgorCisKKworCisgIEVYUF9WQVI9UExVR0lORElSCisgIEZST01fVkFSPSR7bGliZGlyfS9nc3RyZWFtZXItJEdTVF9NQUpPUk1JTk9SCisKKyAgICBwcmVmaXhfc2F2ZT0kcHJlZml4CisgIGV4ZWNfcHJlZml4X3NhdmU9JGV4ZWNfcHJlZml4CisKKyAgICBpZiB0ZXN0ICJ4JHByZWZpeCIgPSAieE5PTkUiOyB0aGVuCisgICAgcHJlZml4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCisgIGZpCisgICAgaWYgdGVzdCAieCRleGVjX3ByZWZpeCIgPSAieE5PTkUiOyB0aGVuCisgICAgZXhlY19wcmVmaXg9JHByZWZpeAorICBmaQorCisgIGZ1bGxfdmFyPSIkRlJPTV9WQVIiCisgICAgd2hpbGUgdHJ1ZTsgZG8KKyAgICBuZXdfZnVsbF92YXI9ImBldmFsIGVjaG8gJGZ1bGxfdmFyYCIKKyAgICBpZiB0ZXN0ICJ4JG5ld19mdWxsX3ZhciIgPSAieCRmdWxsX3ZhciI7IHRoZW4gYnJlYWs7IGZpCisgICAgZnVsbF92YXI9JG5ld19mdWxsX3ZhcgorICBkb25lCisKKyAgICBmdWxsX3Zhcj0kbmV3X2Z1bGxfdmFyCisgIFBMVUdJTkRJUj0iJGZ1bGxfdmFyIgorCisKKyAgICBwcmVmaXg9JHByZWZpeF9zYXZlCisgIGV4ZWNfcHJlZml4PSRleGVjX3ByZWZpeF9zYXZlCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQTFVHSU5ESVIgIiRQTFVHSU5ESVIiCitfQUNFT0YKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFVzaW5nICRQTFVHSU5ESVIgYXMgdGhlIHBsdWdpbiBpbnN0YWxsIGxvY2F0aW9uIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFVzaW5nICRQTFVHSU5ESVIgYXMgdGhlIHBsdWdpbiBpbnN0YWxsIGxvY2F0aW9uIiA+JjY7fQorCisgICAgcGx1Z2luZGlyPSJcJChsaWJkaXIpL2dzdHJlYW1lci0kR1NUX01BSk9STUlOT1IiCisKKworCitHU1RfUEtHX0RFUFM9ImdsaWItMi4wLCBnb2JqZWN0LTIuMCwgZ21vZHVsZS1uby1leHBvcnQtMi4wLCBndGhyZWFkLTIuMCIKKworCisKKworCisKKyAgV0FSTklOR19DRkxBR1M9IiIKKyAgRVJST1JfQ0ZMQUdTPSIiCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRvIHNlZSBpZiBjb21waWxlciB1bmRlcnN0YW5kcyAtV2FsbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB0byBzZWUgaWYgY29tcGlsZXIgdW5kZXJzdGFuZHMgLVdhbGwuLi4gIiA+JjY7IH0KKworICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XYWxsIgorCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBmbGFnX29rPXllcworZWxzZQorICBmbGFnX29rPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorCisgIGlmIHRlc3QgIlgkZmxhZ19vayIgPSBYeWVzIDsgdGhlbgorICAgIFdBUk5JTkdfQ0ZMQUdTPSIkV0FSTklOR19DRkxBR1MgLVdhbGwiCisgICAgdHJ1ZQorICBlbHNlCisKKyAgICB0cnVlCisgIGZpCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZmxhZ19vayIgPiY1CiskYXNfZWNobyAiJGZsYWdfb2siID4mNjsgfQorCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRvIHNlZSBpZiBjb21waWxlciB1bmRlcnN0YW5kcyAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB0byBzZWUgaWYgY29tcGlsZXIgdW5kZXJzdGFuZHMgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQuLi4gIiA+JjY7IH0KKworICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IgorCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBmbGFnX29rPXllcworZWxzZQorICBmbGFnX29rPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorCisgIGlmIHRlc3QgIlgkZmxhZ19vayIgPSBYeWVzIDsgdGhlbgorICAgIFdBUk5JTkdfQ0ZMQUdTPSIkV0FSTklOR19DRkxBR1MgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQiCisgICAgdHJ1ZQorICBlbHNlCisKKyAgICB0cnVlCisgIGZpCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZmxhZ19vayIgPiY1CiskYXNfZWNobyAiJGZsYWdfb2siID4mNjsgfQorCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRvIHNlZSBpZiBjb21waWxlciB1bmRlcnN0YW5kcyAtV3ZsYSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB0byBzZWUgaWYgY29tcGlsZXIgdW5kZXJzdGFuZHMgLVd2bGEuLi4gIiA+JjY7IH0KKworICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XdmxhIgorCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBmbGFnX29rPXllcworZWxzZQorICBmbGFnX29rPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorCisgIGlmIHRlc3QgIlgkZmxhZ19vayIgPSBYeWVzIDsgdGhlbgorICAgIFdBUk5JTkdfQ0ZMQUdTPSIkV0FSTklOR19DRkxBR1MgLVd2bGEiCisgICAgdHJ1ZQorICBlbHNlCisKKyAgICB0cnVlCisgIGZpCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZmxhZ19vayIgPiY1CiskYXNfZWNobyAiJGZsYWdfb2siID4mNjsgfQorCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRvIHNlZSBpZiBjb21waWxlciB1bmRlcnN0YW5kcyAtV3BvaW50ZXItYXJpdGgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdG8gc2VlIGlmIGNvbXBpbGVyIHVuZGVyc3RhbmRzIC1XcG9pbnRlci1hcml0aC4uLiAiID4mNjsgfQorCisgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBDRkxBR1M9IiRDRkxBR1MgLVdwb2ludGVyLWFyaXRoIgorCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBmbGFnX29rPXllcworZWxzZQorICBmbGFnX29rPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorCisgIGlmIHRlc3QgIlgkZmxhZ19vayIgPSBYeWVzIDsgdGhlbgorICAgIFdBUk5JTkdfQ0ZMQUdTPSIkV0FSTklOR19DRkxBR1MgLVdwb2ludGVyLWFyaXRoIgorICAgIHRydWUKKyAgZWxzZQorCisgICAgdHJ1ZQorICBmaQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGZsYWdfb2siID4mNQorJGFzX2VjaG8gIiRmbGFnX29rIiA+JjY7IH0KKworCisgICAgaWYgdGVzdCAieCRHU1RfR0lUIiAhPSAieG5vIgorICB0aGVuCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0byBzZWUgaWYgY29tcGlsZXIgdW5kZXJzdGFuZHMgLVdlcnJvciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB0byBzZWUgaWYgY29tcGlsZXIgdW5kZXJzdGFuZHMgLVdlcnJvci4uLiAiID4mNjsgfQorCisgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciIKKworICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZmxhZ19vaz15ZXMKK2Vsc2UKKyAgZmxhZ19vaz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKworICBpZiB0ZXN0ICJYJGZsYWdfb2siID0gWHllcyA7IHRoZW4KKyAgICBFUlJPUl9DRkxBR1M9IiRFUlJPUl9DRkxBR1MgLVdlcnJvciIKKyAgICB0cnVlCisgIGVsc2UKKworICAgIHRydWUKKyAgZmkKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRmbGFnX29rIiA+JjUKKyRhc19lY2hvICIkZmxhZ19vayIgPiY2OyB9CisKKworICAgICAgICBpZiB0ZXN0ICJ4JEVSUk9SX0NGTEFHUyIgPSAieCIKKyAgICB0aGVuCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0byBzZWUgaWYgY29tcGlsZXIgdW5kZXJzdGFuZHMgLWVycndhcm49JWFsbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB0byBzZWUgaWYgY29tcGlsZXIgdW5kZXJzdGFuZHMgLWVycndhcm49JWFsbC4uLiAiID4mNjsgfQorCisgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBDRkxBR1M9IiRDRkxBR1MgLWVycndhcm49JWFsbCIKKworICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZmxhZ19vaz15ZXMKK2Vsc2UKKyAgZmxhZ19vaz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKworICBpZiB0ZXN0ICJYJGZsYWdfb2siID0gWHllcyA7IHRoZW4KKworICAgICAgICAgIEVSUk9SX0NGTEFHUz0iLWVycndhcm49JWFsbCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gJ25vJUVfRU1QVFlfREVDTEFSQVRJT04nIFwKKyAgICAgICAgICAgICAgICAgICAnbm8lRV9TVEFURU1FTlRfTk9UX1JFQUNIRUQnIFwKKyAgICAgICAgICAgICAgICAgICAnbm8lRV9BUkdVRU1FTlRfTUlTTUFUQ0gnIFwKKyAgICAgICAgICAgICAgICAgICAnbm8lRV9NQUNST19SRURFRklORUQnIFwKKyAgICAgICAgICAgICAgICAgICAnbm8lRV9MT09QX05PVF9FTlRFUkVEX0FUX1RPUCcKKyAgICAgICAgICBkbworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdG8gc2VlIGlmIGNvbXBpbGVyIHVuZGVyc3RhbmRzIC1lcnJ3YXJuPSVhbGwsJGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdG8gc2VlIGlmIGNvbXBpbGVyIHVuZGVyc3RhbmRzIC1lcnJ3YXJuPSVhbGwsJGYuLi4gIiA+JjY7IH0KKworICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1lcnJ3YXJuPSVhbGwsJGYiCisKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGZsYWdfb2s9eWVzCitlbHNlCisgIGZsYWdfb2s9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisKKyAgaWYgdGVzdCAiWCRmbGFnX29rIiA9IFh5ZXMgOyB0aGVuCisKKyAgICAgICAgICAgICAgRVJST1JfQ0ZMQUdTPSIkRVJST1JfQ0ZMQUdTLCRmIgorCisgICAgdHJ1ZQorICBlbHNlCisKKyAgICB0cnVlCisgIGZpCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZmxhZ19vayIgPiY1CiskYXNfZWNobyAiJGZsYWdfb2siID4mNjsgfQorCisgICAgICAgICAgZG9uZQorCisgICAgdHJ1ZQorICBlbHNlCisKKyAgICB0cnVlCisgIGZpCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZmxhZ19vayIgPiY1CiskYXNfZWNobyAiJGZsYWdfb2siID4mNjsgfQorCisgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiZ2xpYi0yLjAgPCAyLjE5LjhcIiI7IH0gPiY1CisgICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiZ2xpYi0yLjAgPCAyLjE5LjgiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0byBzZWUgaWYgY29tcGlsZXIgdW5kZXJzdGFuZHMgLWZuby1zdHJpY3QtYWxpYXNpbmciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdG8gc2VlIGlmIGNvbXBpbGVyIHVuZGVyc3RhbmRzIC1mbm8tc3RyaWN0LWFsaWFzaW5nLi4uICIgPiY2OyB9CisKKyAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgIENGTEFHUz0iJENGTEFHUyAtZm5vLXN0cmljdC1hbGlhc2luZyIKKworICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZmxhZ19vaz15ZXMKK2Vsc2UKKyAgZmxhZ19vaz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKworICBpZiB0ZXN0ICJYJGZsYWdfb2siID0gWHllcyA7IHRoZW4KKyAgICBFUlJPUl9DRkxBR1M9IiRFUlJPUl9DRkxBR1MgLWZuby1zdHJpY3QtYWxpYXNpbmciCisgICAgdHJ1ZQorICBlbHNlCisKKyAgICB0cnVlCisgIGZpCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZmxhZ19vayIgPiY1CiskYXNfZWNobyAiJGZsYWdfb2siID4mNjsgfQorCisKK2ZpCisgICAgZmkKKyAgZmkKKworICBpZiB0ZXN0ICJ4LVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV21pc3NpbmctcHJvdG90eXBlcyAtV3JlZHVuZGFudC1kZWNscyAtV3VuZGVmIC1Xd3JpdGUtc3RyaW5ncyAtV2Zvcm1hdC1ub25saXRlcmFsIC1XZm9ybWF0LXNlY3VyaXR5IC1Xb2xkLXN0eWxlLWRlZmluaXRpb24gLVdpbml0LXNlbGYgLVdtaXNzaW5nLWluY2x1ZGUtZGlycyAtV2FkZHJlc3MgLVdhZ2dyZWdhdGUtcmV0dXJuIC1Xbm8tbXVsdGljaGFyIC1XbmVzdGVkLWV4dGVybnMiICE9ICJ4IgorICB0aGVuCisgICAgVU5TVVBQT1JURUQ9IiIKKyAgICBsaXN0PSItV21pc3NpbmctZGVjbGFyYXRpb25zIC1XbWlzc2luZy1wcm90b3R5cGVzIC1XcmVkdW5kYW50LWRlY2xzIC1XdW5kZWYgLVd3cml0ZS1zdHJpbmdzIC1XZm9ybWF0LW5vbmxpdGVyYWwgLVdmb3JtYXQtc2VjdXJpdHkgLVdvbGQtc3R5bGUtZGVmaW5pdGlvbiAtV2luaXQtc2VsZiAtV21pc3NpbmctaW5jbHVkZS1kaXJzIC1XYWRkcmVzcyAtV2FnZ3JlZ2F0ZS1yZXR1cm4gLVduby1tdWx0aWNoYXIgLVduZXN0ZWQtZXh0ZXJucyIKKyAgICBmb3IgZWFjaCBpbiAkbGlzdAorICAgIGRvCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0byBzZWUgaWYgY29tcGlsZXIgdW5kZXJzdGFuZHMgJGVhY2giID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdG8gc2VlIGlmIGNvbXBpbGVyIHVuZGVyc3RhbmRzICRlYWNoLi4uICIgPiY2OyB9CisKKyAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgIENGTEFHUz0iJENGTEFHUyAkZWFjaCIKKworICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZmxhZ19vaz15ZXMKK2Vsc2UKKyAgZmxhZ19vaz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKworICBpZiB0ZXN0ICJYJGZsYWdfb2siID0gWHllcyA7IHRoZW4KKyAgICBXQVJOSU5HX0NGTEFHUz0iJFdBUk5JTkdfQ0ZMQUdTICRlYWNoIgorICAgIHRydWUKKyAgZWxzZQorICAgIFVOU1VQUE9SVEVEPSIkVU5TVVBQT1JURUQgJGVhY2giCisgICAgdHJ1ZQorICBmaQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGZsYWdfb2siID4mNQorJGFzX2VjaG8gIiRmbGFnX29rIiA+JjY7IH0KKworICAgIGRvbmUKKyAgICBpZiB0ZXN0ICJYJFVOU1VQUE9SVEVEIiAhPSBYIDsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB1bnN1cHBvcnRlZCBjb21waWxlciBmbGFnczogJFVOU1VQUE9SVEVEIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHVuc3VwcG9ydGVkIGNvbXBpbGVyIGZsYWdzOiAkVU5TVVBQT1JURUQiID4mNjt9CisgICAgZmkKKyAgZmkKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBzZXQgV0FSTklOR19DRkxBR1MgdG8gJFdBUk5JTkdfQ0ZMQUdTIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHNldCBXQVJOSU5HX0NGTEFHUyB0byAkV0FSTklOR19DRkxBR1MiID4mNjt9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogc2V0IEVSUk9SX0NGTEFHUyB0byAkRVJST1JfQ0ZMQUdTIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHNldCBFUlJPUl9DRkxBR1MgdG8gJEVSUk9SX0NGTEFHUyIgPiY2O30KKworCisKKyAgICAgIGlmIHRlc3QgIngkR1NUX0dJVCIgPSAieHllcyI7IHRoZW4KKyAgICBHU1RfTEVWRUxfREVGQVVMVD1HU1RfTEVWRUxfRVJST1IKKyAgZWxzZQorICAgIEdTVF9MRVZFTF9ERUZBVUxUPUdTVF9MRVZFTF9OT05FCisgIGZpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgR1NUX0xFVkVMX0RFRkFVTFQgJEdTVF9MRVZFTF9ERUZBVUxUCitfQUNFT0YKKworCisKKworCisKK2lmIHRlc3QgIngkVVNFX0RFQlVHIiA9IHh5ZXM7IHRoZW4KKyAgIFBST0ZJTEVfQ0ZMQUdTPSItZyIKK2ZpCisKKworIyBHU1RfRElTQUJMRV9ERVBSRUNBVEVEOiBoaWRlIHRoZSB2aXNpYmlsaXR5IG9mIGRlcHJlY2F0ZWQKKyMgZnVuY3Rpb25hbGl0eSBmcm9tIHRoZSBBUEkgdGhhdCBnc3RyZWFtZXIgdXNlcworIyBHU1RfUkVNT1ZFX0RFUFJFQ0FURUQ6IGRvbid0IGNvbXBpbGUgZGVwcmVjYXRlZCBmdW5jdGlvbmFsaXR5IChicmVha3MgQUJJKQoraWYgdGVzdCAieCRQQUNLQUdFX1ZFUlNJT05fTkFOTyIgPSAieDEiOyB0aGVuCisgICAgREVQUkVDQVRFRF9DRkxBR1M9Ii1ER1NUX0RJU0FCTEVfREVQUkVDQVRFRCIKK2Vsc2UKKyAgREVQUkVDQVRFRF9DRkxBR1M9IiIKK2ZpCisKKworR1NUX09QVElPTl9DRkxBR1M9IlwkKFdBUk5JTkdfQ0ZMQUdTKSBcJChERUJVR19DRkxBR1MpIFwkKFBST0ZJTEVfQ0ZMQUdTKSBcJChHQ09WX0NGTEFHUykgXCQoT1BUX0NGTEFHUykgXCQoREVQUkVDQVRFRF9DRkxBR1MpIgorR1NUX09QVElPTl9DWFhGTEFHUz0iXCQoV0FSTklOR19DWFhGTEFHUykgXCQoRVJST1JfQ1hYRkxBR1MpIFwkKERFQlVHX0NGTEFHUykgXCQoUFJPRklMRV9DRkxBR1MpIFwkKEdDT1ZfQ0ZMQUdTKSBcJChPUFRfQ0ZMQUdTKSBcJChERVBSRUNBVEVEX0NGTEFHUykiCitHU1RfT1BUSU9OX0NGTEFHUz0iJEdTVF9PUFRJT05fQ0ZMQUdTIC1ER1NUX1VTRV9VTlNUQUJMRV9BUEkiCitHU1RfT1BUSU9OX0NYWEZMQUdTPSIkR1NUX09QVElPTl9DWFhGTEFHUyAtREdTVF9VU0VfVU5TVEFCTEVfQVBJIgorCisKKworR1NUX0FMTF9DWFhGTEFHUz0iLUlcJCh0b3Bfc3JjZGlyKS9saWJzIC1JXCQodG9wX3NyY2RpcikgLUlcJCh0b3BfYnVpbGRkaXIpL2xpYnMgLUlcJCh0b3BfYnVpbGRkaXIpICRHTElCX0NGTEFHUyAkR0xJQl9FWFRSQV9DRkxBR1MgXCQoR1NUX09QVElPTl9DWFhGTEFHUykgXCQoRVJST1JfQ1hYRkxBR1MpIgorR1NUX0FMTF9DRkxBR1M9Ii1JXCQodG9wX3NyY2RpcikvbGlicyAtSVwkKHRvcF9zcmNkaXIpIC1JXCQodG9wX2J1aWxkZGlyKS9saWJzIC1JXCQodG9wX2J1aWxkZGlyKSAkR0xJQl9DRkxBR1MgJEdMSUJfRVhUUkFfQ0ZMQUdTIFwkKEdTVF9PUFRJT05fQ0ZMQUdTKSBcJChFUlJPUl9DRkxBR1MpIgorCitHU1RfQUxMX0xJQlM9IiRHTElCX0xJQlMgJExUTElCSU5UTCBcJChHQ09WX0xJQlMpIgorCitHU1RfQUxMX0xERkxBR1M9Ii1uby11bmRlZmluZWQiCitpZiB0ZXN0ICJ4JHtlbmFibGVfQnN5bWJvbGljfSIgPSAieHllcyI7IHRoZW4KKyAgR1NUX0FMTF9MREZMQUdTPSIkR1NUX0FMTF9MREZMQUdTIC1XbCwtQnN5bWJvbGljLWZ1bmN0aW9ucyIKK2ZpCisKKworCisKKworCitHU1RfTElCX0xERkxBR1M9Ii1leHBvcnQtc3ltYm9scy1yZWdleCBcXl8qXChnc3RfXHxHc3RcfEdTVF9cKS4qIgorCisKK0dTVF9PQkpfQ0ZMQUdTPSJcJChHU1RfQUxMX0NGTEFHUykiCitHU1RfT0JKX0NYWEZMQUdTPSJcJChHU1RfQUxMX0NYWEZMQUdTKSIKK0dTVF9PQkpfTElCUz0iXCQodG9wX2J1aWxkZGlyKS9nc3QvbGliZ3N0cmVhbWVyLSRHU1RfTUFKT1JNSU5PUi5sYSBcJChHU1RfQUxMX0xJQlMpIgorCisKKworCitHU1RfUExVR0lOX0xERkxBR1M9Ii1tb2R1bGUgLWF2b2lkLXZlcnNpb24gLWV4cG9ydC1zeW1ib2xzLXJlZ2V4ICdeXypnc3RfcGx1Z2luX2Rlc2MuKicgJEdTVF9BTExfTERGTEFHUyIKK0dTVF9QTFVHSU5fTERGTEFHUz0iJEdTVF9QTFVHSU5fTERGTEFHUyIKKworCisKKyAgRVhQX1ZBUj1HU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVECisgIEZST01fVkFSPSR7bGliZXhlY2Rpcn0vZ3N0cmVhbWVyLSRHU1RfTUFKT1JNSU5PUi9nc3QtcGx1Z2luLXNjYW5uZXIKKworICAgIHByZWZpeF9zYXZlPSRwcmVmaXgKKyAgZXhlY19wcmVmaXhfc2F2ZT0kZXhlY19wcmVmaXgKKworICAgIGlmIHRlc3QgIngkcHJlZml4IiA9ICJ4Tk9ORSI7IHRoZW4KKyAgICBwcmVmaXg9IiRhY19kZWZhdWx0X3ByZWZpeCIKKyAgZmkKKyAgICBpZiB0ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9ICJ4Tk9ORSI7IHRoZW4KKyAgICBleGVjX3ByZWZpeD0kcHJlZml4CisgIGZpCisKKyAgZnVsbF92YXI9IiRGUk9NX1ZBUiIKKyAgICB3aGlsZSB0cnVlOyBkbworICAgIG5ld19mdWxsX3Zhcj0iYGV2YWwgZWNobyAkZnVsbF92YXJgIgorICAgIGlmIHRlc3QgIngkbmV3X2Z1bGxfdmFyIiA9ICJ4JGZ1bGxfdmFyIjsgdGhlbiBicmVhazsgZmkKKyAgICBmdWxsX3Zhcj0kbmV3X2Z1bGxfdmFyCisgIGRvbmUKKworICAgIGZ1bGxfdmFyPSRuZXdfZnVsbF92YXIKKyAgR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRD0iJGZ1bGxfdmFyIgorCisKKyAgICBwcmVmaXg9JHByZWZpeF9zYXZlCisgIGV4ZWNfcHJlZml4PSRleGVjX3ByZWZpeF9zYXZlCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEICIkR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCIKK19BQ0VPRgorCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFJ1bm5pbmcgY2hlY2sgdW5pdCB0ZXN0IGZyYW1ld29yayBjaGVja3Mgbm93Li4uIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFJ1bm5pbmcgY2hlY2sgdW5pdCB0ZXN0IGZyYW1ld29yayBjaGVja3Mgbm93Li4uIiA+JjY7fQorCitDSEVDS19NQUpPUl9WRVJTSU9OPTAKK0NIRUNLX01JTk9SX1ZFUlNJT049OQorQ0hFQ0tfTUlDUk9fVkVSU0lPTj04CitDSEVDS19WRVJTSU9OPSRDSEVDS19NQUpPUl9WRVJTSU9OLiRDSEVDS19NSU5PUl9WRVJTSU9OLiRDSEVDS19NSUNST19WRVJTSU9OCisKKworCisKKworCitmb3IgYWNfaGVhZGVyIGluIHVuaXN0ZC5oIHN5cy93YWl0Lmggc3lzL3RpbWUuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKK2ZvciBhY19mdW5jIGluIGxvY2FsdGltZV9yCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImxvY2FsdGltZV9yIiAiYWNfY3ZfZnVuY19sb2NhbHRpbWVfciIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19sb2NhbHRpbWVfciIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTE9DQUxUSU1FX1IgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKworCisjIC0tLS0tLSBBWCBDUkVBVEUgU1RESU5UIEggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3RkaW50IHR5cGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdGRpbnQgdHlwZXMuLi4gIiA+JjY7IH0KK2FjX3N0ZGludF9oPWBlY2hvIF9zdGRpbnQuaGAKKyMgdHJ5IHRvIHNob3J0Y2lyY3VpdCAtIGlmIHRoZSBkZWZhdWx0IGluY2x1ZGUgcGF0aCBvZiB0aGUgY29tcGlsZXIKKyMgY2FuIGZpbmQgYSAic3RkaW50LmgiIGhlYWRlciB0aGVuIHdlIGFzc3VtZSB0aGF0IGFsbCBjb21waWxlcnMgY2FuLgoraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3RkaW50X3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCitvbGRfQ1hYRkxBR1M9IiRDWFhGTEFHUyIgOyBDWFhGTEFHUz0iIgorb2xkX0NQUEZMQUdTPSIkQ1BQRkxBR1MiIDsgQ1BQRkxBR1M9IiIKK29sZF9DRkxBR1M9IiRDRkxBR1MiICAgICA7IENGTEFHUz0iIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGludC5oPgoraW50CittYWluICgpCit7CitpbnRfbGVhc3QzMl90IHYgPSAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3N0ZGludF9yZXN1bHQ9Iihhc3N1bWluZyBDOTkgY29tcGF0aWJsZSBzeXN0ZW0pIgorIGFjX2N2X2hlYWRlcl9zdGRpbnRfdD0ic3RkaW50LmgiOworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkaW50X3Q9IiIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2lmIHRlc3QgIiRHQ0MiID0gInllcyIgJiYgdGVzdCAiLiRhY19jdl9oZWFkZXJfc3RkaW50X3QiID0gIi4iOyB0aGVuCitDRkxBR1M9Ii1zdGQ9Yzk5IgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGludC5oPgoraW50CittYWluICgpCit7CitpbnRfbGVhc3QzMl90IHYgPSAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogeW91ciBHQ0MgY29tcGlsZXIgaGFzIGEgZGVmdW5jdCBzdGRpbnQuaCBmb3IgaXRzIGRlZmF1bHQtbW9kZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB5b3VyIEdDQyBjb21waWxlciBoYXMgYSBkZWZ1bmN0IHN0ZGludC5oIGZvciBpdHMgZGVmYXVsdC1tb2RlIiA+JjI7fQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK0NYWEZMQUdTPSIkb2xkX0NYWEZMQUdTIgorQ1BQRkxBR1M9IiRvbGRfQ1BQRkxBR1MiCitDRkxBR1M9IiRvbGRfQ0ZMQUdTIgorZmkKKworCit2PSIuLi4gJGFjX2N2X2hlYWRlcl9zdGRpbnRfaCIKK2lmIHRlc3QgIiRhY19zdGRpbnRfaCIgPSAic3RkaW50LmgiIDsgdGhlbgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAoYXJlIHlvdSBzdXJlIHlvdSB3YW50IHRoZW0gaW4gLi9zdGRpbnQuaD8pIiA+JjUKKyRhc19lY2hvICIoYXJlIHlvdSBzdXJlIHlvdSB3YW50IHRoZW0gaW4gLi9zdGRpbnQuaD8pIiA+JjY7IH0KK2VsaWYgdGVzdCAiJGFjX3N0ZGludF9oIiA9ICJpbnR0eXBlcy5oIiA7IHRoZW4KKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogKGFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0aGVtIGluIC4vaW50dHlwZXMuaD8pIiA+JjUKKyRhc19lY2hvICIoYXJlIHlvdSBzdXJlIHlvdSB3YW50IHRoZW0gaW4gLi9pbnR0eXBlcy5oPykiID4mNjsgfQorZWxpZiB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfdCIgPSAiXyIgOyB0aGVuCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IChwdXR0aW5nIHRoZW0gaW50byAkYWNfc3RkaW50X2gpJHYiID4mNQorJGFzX2VjaG8gIihwdXR0aW5nIHRoZW0gaW50byAkYWNfc3RkaW50X2gpJHYiID4mNjsgfQorZWxzZQorIGFjX2N2X2hlYWRlcl9zdGRpbnQ9IiRhY19jdl9oZWFkZXJfc3RkaW50X3QiCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkaW50IChzaG9ydGNpcmN1aXQpIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3N0ZGludCAoc2hvcnRjaXJjdWl0KSIgPiY2OyB9CitmaQorCitpZiB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfdCIgPSAiXyIgOyB0aGVuICMgY2FuIG5vdCBzaG9ydGNpcmN1aXQuLgorCisKK2ludHR5cGVfaGVhZGVycz1gZWNobyAgfCBzZWQgLWUgJ3MvLC8gL2cnYAorCithY19jdl9zdGRpbnRfcmVzdWx0PSIobm8gaGVscGZ1bCBzeXN0ZW0gdHlwZWRlZnMgc2VlbikiCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0ZGludCB1aW50cHRyX3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN0ZGludCB1aW50cHRyX3QuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N0ZGludF94K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworIGFjX2N2X2hlYWRlcl9zdGRpbnRfeD0iIiAjIHRoZSAxOTk3IHR5cGVkZWZzIChpbnR0eXBlcy5oKQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogKC4uKSIgPiY1CiskYXNfZWNobyAiKC4uKSIgPiY2OyB9CisgIGZvciBpIGluICAgIHN0ZGludC5oIGludHR5cGVzLmggc3lzL2ludHR5cGVzLmggJGludHR5cGVfaGVhZGVycworICBkbworICAgdW5zZXQgYWNfY3ZfdHlwZV91aW50cHRyX3QKKyAgIHVuc2V0IGFjX2N2X3R5cGVfdWludDY0X3QKKyAgIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInVpbnRwdHJfdCIgImFjX2N2X3R5cGVfdWludHB0cl90IiAiI2luY2x1ZGUgPCRpPgorIgoraWYgdGVzdCAieCRhY19jdl90eXBlX3VpbnRwdHJfdCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBhY19jdl9oZWFkZXJfc3RkaW50X3g9JGkKK2Vsc2UKKyAgY29udGludWUKK2ZpCisKKyAgIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInVpbnQ2NF90IiAiYWNfY3ZfdHlwZV91aW50NjRfdCIgIiNpbmNsdWRlPCRpPgorIgoraWYgdGVzdCAieCRhY19jdl90eXBlX3VpbnQ2NF90IiA9IHgiInllczsgdGhlbiA6CisgIGFuZDY0PSIvdWludDY0X3QiCitlbHNlCisgIGFuZDY0PSIiCitmaQorCisgICBhY19jdl9zdGRpbnRfcmVzdWx0PSIoc2VlbiB1aW50cHRyX3QkYW5kNjQgaW4gJGkpIgorIGJyZWFrCisgIGRvbmUKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3RkaW50IHVpbnRwdHJfdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3RkaW50IHVpbnRwdHJfdC4uLiAiID4mNjsgfQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkaW50X3giID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfc3RkaW50X3giID4mNjsgfQorCisKK2lmIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF94IiA9ICJfIiA7IHRoZW4KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3RkaW50IHVpbnQzMl90IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdGRpbnQgdWludDMyX3QuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N0ZGludF9vK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworIGFjX2N2X2hlYWRlcl9zdGRpbnRfbz0iIiAjIHRoZSAxOTk1IHR5cGVkZWZzIChzeXMvaW50dHlwZXMuaCkKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICguLikiID4mNQorJGFzX2VjaG8gIiguLikiID4mNjsgfQorICBmb3IgaSBpbiAgICBpbnR0eXBlcy5oIHN5cy9pbnR0eXBlcy5oIHN0ZGludC5oICRpbnR0eXBlX2hlYWRlcnMKKyAgZG8KKyAgIHVuc2V0IGFjX2N2X3R5cGVfdWludDMyX3QKKyAgIHVuc2V0IGFjX2N2X3R5cGVfdWludDY0X3QKKyAgIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInVpbnQzMl90IiAiYWNfY3ZfdHlwZV91aW50MzJfdCIgIiNpbmNsdWRlIDwkaT4KKyIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV91aW50MzJfdCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBhY19jdl9oZWFkZXJfc3RkaW50X289JGkKK2Vsc2UKKyAgY29udGludWUKK2ZpCisKKyAgIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInVpbnQ2NF90IiAiYWNfY3ZfdHlwZV91aW50NjRfdCIgIiNpbmNsdWRlPCRpPgorIgoraWYgdGVzdCAieCRhY19jdl90eXBlX3VpbnQ2NF90IiA9IHgiInllczsgdGhlbiA6CisgIGFuZDY0PSIvdWludDY0X3QiCitlbHNlCisgIGFuZDY0PSIiCitmaQorCisgICBhY19jdl9zdGRpbnRfcmVzdWx0PSIoc2VlbiB1aW50MzJfdCRhbmQ2NCBpbiAkaSkiCisgYnJlYWsKKyAgIGJyZWFrOworICBkb25lCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0ZGludCB1aW50MzJfdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3RkaW50IHVpbnQzMl90Li4uICIgPiY2OyB9CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRpbnRfbyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zdGRpbnRfbyIgPiY2OyB9CisKK2ZpCisKK2lmIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF94IiA9ICJfIiA7IHRoZW4KK2lmIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF9vIiA9ICJfIiA7IHRoZW4KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3RkaW50IHVfaW50MzJfdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3RkaW50IHVfaW50MzJfdC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3RkaW50X3Urc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgYWNfY3ZfaGVhZGVyX3N0ZGludF91PSIiICMgdGhlIEJTRCB0eXBlZGVmcyAoc3lzL3R5cGVzLmgpCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAoLi4pIiA+JjUKKyRhc19lY2hvICIoLi4pIiA+JjY7IH0KKyAgZm9yIGkgaW4gICAgc3lzL3R5cGVzLmggaW50dHlwZXMuaCBzeXMvaW50dHlwZXMuaCAkaW50dHlwZV9oZWFkZXJzIDsgZG8KKyAgIHVuc2V0IGFjX2N2X3R5cGVfdV9pbnQzMl90CisgICB1bnNldCBhY19jdl90eXBlX3VfaW50NjRfdAorICAgYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAidV9pbnQzMl90IiAiYWNfY3ZfdHlwZV91X2ludDMyX3QiICIjaW5jbHVkZSA8JGk+CisiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfdV9pbnQzMl90IiA9IHgiInllczsgdGhlbiA6CisgIGFjX2N2X2hlYWRlcl9zdGRpbnRfdT0kaQorZWxzZQorICBjb250aW51ZQorZmkKKworICAgYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAidV9pbnQ2NF90IiAiYWNfY3ZfdHlwZV91X2ludDY0X3QiICIjaW5jbHVkZTwkaT4KKyIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV91X2ludDY0X3QiID0geCIieWVzOyB0aGVuIDoKKyAgYW5kNjQ9Ii91X2ludDY0X3QiCitlbHNlCisgIGFuZDY0PSIiCitmaQorCisgICBhY19jdl9zdGRpbnRfcmVzdWx0PSIoc2VlbiB1X2ludDMyX3QkYW5kNjQgaW4gJGkpIgorIGJyZWFrCisgICBicmVhazsKKyAgZG9uZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdGRpbnQgdV9pbnQzMl90IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdGRpbnQgdV9pbnQzMl90Li4uICIgPiY2OyB9CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRpbnRfdSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zdGRpbnRfdSIgPiY2OyB9CisKK2ZpIGZpCisKK2lmIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF94IiA9ICJfIiA7IHRoZW4KKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0ZGludCBkYXRhdHlwZSBtb2RlbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3RkaW50IGRhdGF0eXBlIG1vZGVsLi4uICIgPiY2OyB9CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogKC4uKSIgPiY1CiskYXNfZWNobyAiKC4uKSIgPiY2OyB9CisKKyAgICMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgY2hhciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIGNoYXIuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX2NoYXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChjaGFyKSkiICJhY19jdl9zaXplb2ZfY2hhciIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgorCitlbHNlCisgIGlmIHRlc3QgIiRhY19jdl90eXBlX2NoYXIiID0geWVzOyB0aGVuCisgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAoY2hhcikKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1IDsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2ZfY2hhcj0wCisgICBmaQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX2NoYXIiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zaXplb2ZfY2hhciIgPiY2OyB9CisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNJWkVPRl9DSEFSICRhY19jdl9zaXplb2ZfY2hhcgorX0FDRU9GCisKKworICAgIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKKyMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiBzaG9ydCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIHNob3J0Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9zaG9ydCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKHNob3J0KSkiICJhY19jdl9zaXplb2Zfc2hvcnQiICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKKworZWxzZQorICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9zaG9ydCIgPSB5ZXM7IHRoZW4KKyAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChzaG9ydCkKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1IDsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2Zfc2hvcnQ9MAorICAgZmkKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NpemVvZl9zaG9ydCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NpemVvZl9zaG9ydCIgPiY2OyB9CisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNJWkVPRl9TSE9SVCAkYWNfY3Zfc2l6ZW9mX3Nob3J0CitfQUNFT0YKKworCisgICAjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIGludCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIGludC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9zaXplb2ZfaW50K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAoaW50KSkiICJhY19jdl9zaXplb2ZfaW50IiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CisKK2Vsc2UKKyAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfaW50IiA9IHllczsgdGhlbgorICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGludCkKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1IDsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2ZfaW50PTAKKyAgIGZpCitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfaW50IiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2l6ZW9mX2ludCIgPiY2OyB9CisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNJWkVPRl9JTlQgJGFjX2N2X3NpemVvZl9pbnQKK19BQ0VPRgorCisKKyAgICMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgbG9uZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIGxvbmcuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX2xvbmcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChsb25nKSkiICJhY19jdl9zaXplb2ZfbG9uZyIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgorCitlbHNlCisgIGlmIHRlc3QgIiRhY19jdl90eXBlX2xvbmciID0geWVzOyB0aGVuCisgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZykKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1IDsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2ZfbG9uZz0wCisgICBmaQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX2xvbmciID4mNQorJGFzX2VjaG8gIiRhY19jdl9zaXplb2ZfbG9uZyIgPiY2OyB9CisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNJWkVPRl9MT05HICRhY19jdl9zaXplb2ZfbG9uZworX0FDRU9GCisKKworICAgIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKKyMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiB2b2lkKiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIHZvaWQqLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3NpemVvZl92b2lkcCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKHZvaWQqKSkiICJhY19jdl9zaXplb2Zfdm9pZHAiICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKKworZWxzZQorICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV92b2lkcCIgPSB5ZXM7IHRoZW4KKyAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mICh2b2lkKikKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1IDsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2Zfdm9pZHA9MAorICAgZmkKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NpemVvZl92b2lkcCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NpemVvZl92b2lkcCIgPiY2OyB9CisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNJWkVPRl9WT0lEUCAkYWNfY3Zfc2l6ZW9mX3ZvaWRwCitfQUNFT0YKKworCisgICBhY19jdl9jaGFyX2RhdGFfbW9kZWw9IiIKKyAgIGFjX2N2X2NoYXJfZGF0YV9tb2RlbD0iJGFjX2N2X2NoYXJfZGF0YV9tb2RlbCRhY19jdl9zaXplb2ZfY2hhciIKKyAgIGFjX2N2X2NoYXJfZGF0YV9tb2RlbD0iJGFjX2N2X2NoYXJfZGF0YV9tb2RlbCRhY19jdl9zaXplb2Zfc2hvcnQiCisgICBhY19jdl9jaGFyX2RhdGFfbW9kZWw9IiRhY19jdl9jaGFyX2RhdGFfbW9kZWwkYWNfY3Zfc2l6ZW9mX2ludCIKKyAgIGFjX2N2X2xvbmdfZGF0YV9tb2RlbD0iIgorICAgYWNfY3ZfbG9uZ19kYXRhX21vZGVsPSIkYWNfY3ZfbG9uZ19kYXRhX21vZGVsJGFjX2N2X3NpemVvZl9pbnQiCisgICBhY19jdl9sb25nX2RhdGFfbW9kZWw9IiRhY19jdl9sb25nX2RhdGFfbW9kZWwkYWNfY3Zfc2l6ZW9mX2xvbmciCisgICBhY19jdl9sb25nX2RhdGFfbW9kZWw9IiRhY19jdl9sb25nX2RhdGFfbW9kZWwkYWNfY3Zfc2l6ZW9mX3ZvaWRwIgorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkYXRhIG1vZGVsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGRhdGEgbW9kZWwuLi4gIiA+JjY7IH0KKyAgIGNhc2UgIiRhY19jdl9jaGFyX2RhdGFfbW9kZWwvJGFjX2N2X2xvbmdfZGF0YV9tb2RlbCIgaW4KKyAgICAxMjIvMjQyKSAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iSVAxNiIgIDsgbj0ic3RhbmRhcmQgMTZiaXQgbWFjaGluZSIgOzsKKyAgICAxMjIvMjQ0KSAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iTFAzMiIgIDsgbj0ic3RhbmRhcmQgMzJiaXQgbWFjaGluZSIgOzsKKyAgICAxMjIvKikgICAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iaTE2IiAgIDsgbj0idW51c3VhbCBpbnQxNiBtb2RlbCIgOzsKKyAgICAxMjQvNDQ0KSAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iSUxQMzIiIDsgbj0ic3RhbmRhcmQgMzJiaXQgdW5peGlzaCIgOzsKKyAgICAxMjQvNDg4KSAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iTFA2NCIgIDsgbj0ic3RhbmRhcmQgNjRiaXQgdW5peGlzaCIgOzsKKyAgICAxMjQvNDQ4KSAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iTExQNjQiIDsgbj0idW51c3VhbCA2NGJpdCB1bml4aXNoIiA7OworICAgIDEyNC8qKSAgICAgICBhY19jdl9kYXRhX21vZGVsPSJpMzIiICAgOyBuPSJ1bnVzdWFsIGludDMyIG1vZGVsIiA7OworICAgIDEyOC84ODgpICAgICBhY19jdl9kYXRhX21vZGVsPSJJTFA2NCIgOyBuPSJ1bnVzdWFsIDY0Yml0IG51bWVyaWMiIDs7CisgICAgMTI4LyopICAgICAgIGFjX2N2X2RhdGFfbW9kZWw9Imk2NCIgICA7IG49InVudXN1YWwgaW50NjQgbW9kZWwiIDs7CisgICAgMjIyLyoyKSAgICAgIGFjX2N2X2RhdGFfbW9kZWw9IkRTUDE2IiA7IG49InN0cmljdCAxNmJpdCBkc3B0eXBlIiA7OworICAgIDMzMy8qMykgICAgICBhY19jdl9kYXRhX21vZGVsPSJEU1AyNCIgOyBuPSJzdHJpY3QgMjRiaXQgZHNwdHlwZSIgOzsKKyAgICA0NDQvKjQpICAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iRFNQMzIiIDsgbj0ic3RyaWN0IDMyYml0IGRzcHR5cGUiIDs7CisgICAgNjY2Lyo2KSAgICAgIGFjX2N2X2RhdGFfbW9kZWw9IkRTUDQ4IiA7IG49InN0cmljdCA0OGJpdCBkc3B0eXBlIiA7OworICAgIDg4OC8qOCkgICAgICBhY19jdl9kYXRhX21vZGVsPSJEU1A2NCIgOyBuPSJzdHJpY3QgNjRiaXQgZHNwdHlwZSIgOzsKKyAgICAyMjIvKnwzMzMvKnw0NDQvKnw2NjYvKnw4ODgvKikgOgorICAgICAgICAgICAgICAgICBhY19jdl9kYXRhX21vZGVsPSJpRFNQIiAgOyBuPSJ1bnVzdWFsIGRzcHR5cGUiIDs7CisgICAgICopICAgICAgICAgIGFjX2N2X2RhdGFfbW9kZWw9Im5vbmUiICA7IG49InZlcnkgdW51c3VhbCBtb2RlbCIgOzsKKyAgIGVzYWMKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZGF0YV9tb2RlbCAoJGFjX2N2X2xvbmdfZGF0YV9tb2RlbCwgJG4pIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZGF0YV9tb2RlbCAoJGFjX2N2X2xvbmdfZGF0YV9tb2RlbCwgJG4pIiA+JjY7IH0KKworZmkKKworaWYgdGVzdCAiXyRhY19jdl9oZWFkZXJfc3RkaW50X3giICE9ICJfIiA7IHRoZW4KKyAgIGFjX2N2X2hlYWRlcl9zdGRpbnQ9IiRhY19jdl9oZWFkZXJfc3RkaW50X3giCitlbGlmICB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfbyIgIT0gIl8iIDsgdGhlbgorICAgYWNfY3ZfaGVhZGVyX3N0ZGludD0iJGFjX2N2X2hlYWRlcl9zdGRpbnRfbyIKK2VsaWYgIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF91IiAhPSAiXyIgOyB0aGVuCisgICBhY19jdl9oZWFkZXJfc3RkaW50PSIkYWNfY3ZfaGVhZGVyX3N0ZGludF91IgorZWxzZQorICAgYWNfY3ZfaGVhZGVyX3N0ZGludD0ic3RkZGVmLmgiCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBleHRyYSBpbnR0eXBlcyBpbiBjaG9zZW4gaGVhZGVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBleHRyYSBpbnR0eXBlcyBpbiBjaG9zZW4gaGVhZGVyLi4uICIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogKCRhY19jdl9oZWFkZXJfc3RkaW50KSIgPiY1CiskYXNfZWNobyAiKCRhY19jdl9oZWFkZXJfc3RkaW50KSIgPiY2OyB9Cit1bnNldCBhY19jdl90eXBlX2ludF9sZWFzdDMyX3QKK3Vuc2V0IGFjX2N2X3R5cGVfaW50X2Zhc3QzMl90CithY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJpbnRfbGVhc3QzMl90IiAiYWNfY3ZfdHlwZV9pbnRfbGVhc3QzMl90IiAiI2luY2x1ZGUgPCRhY19jdl9oZWFkZXJfc3RkaW50PgorIgoraWYgdGVzdCAieCRhY19jdl90eXBlX2ludF9sZWFzdDMyX3QiID0geCIieWVzOyB0aGVuIDoKKworZmkKKworYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAiaW50X2Zhc3QzMl90IiAiYWNfY3ZfdHlwZV9pbnRfZmFzdDMyX3QiICIjaW5jbHVkZTwkYWNfY3ZfaGVhZGVyX3N0ZGludD4KKyIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9pbnRfZmFzdDMyX3QiID0geCIieWVzOyB0aGVuIDoKKworZmkKKworYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAiaW50bWF4X3QiICJhY19jdl90eXBlX2ludG1heF90IiAiI2luY2x1ZGUgPCRhY19jdl9oZWFkZXJfc3RkaW50PgorIgoraWYgdGVzdCAieCRhY19jdl90eXBlX2ludG1heF90IiA9IHgiInllczsgdGhlbiA6CisKK2ZpCisKKworZmkgIyBzaG9ydGNpcmN1dCB0byBzeXN0ZW0gInN0ZGludC5oIgorIyAtLS0tLS0tLS0tLS0tLS0tLS0gUFJFUEFSRSBWQVJJQUJMRVMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiIDsgdGhlbgorYWNfY3Zfc3RkaW50X21lc3NhZ2U9InVzaW5nIGdudSBjb21waWxlciAiYCRDQyAtLXZlcnNpb24gfCBoZWFkIC0xYAorZWxzZQorYWNfY3Zfc3RkaW50X21lc3NhZ2U9InVzaW5nICRDQyIKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBtYWtlIHVzZSBvZiAkYWNfY3ZfaGVhZGVyX3N0ZGludCBpbiAkYWNfc3RkaW50X2ggJGFjX2N2X3N0ZGludF9yZXN1bHQiID4mNQorJGFzX2VjaG8gIm1ha2UgdXNlIG9mICRhY19jdl9oZWFkZXJfc3RkaW50IGluICRhY19zdGRpbnRfaCAkYWNfY3Zfc3RkaW50X3Jlc3VsdCIgPiY2OyB9CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0gRE9ORSBpbnR0eXBlcy5oIGNoZWNrcyBTVEFSVCBoZWFkZXIgLS0tLS0tLS0tLS0tLQorYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzICRhY19zdGRpbnRfaCIKKworCisKK2VuYWJsZV9zdWJ1bml0PWZhbHNlCisKK2lmIHRlc3QgeGZhbHNlID0geCIkZW5hYmxlX3N1YnVuaXQiOyB0aGVuCitFTkFCTEVfU1VCVU5JVD0iMCIKK2Vsc2UKK0VOQUJMRV9TVUJVTklUPSIxIgorZmkKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEVOQUJMRV9TVUJVTklUICRFTkFCTEVfU1VCVU5JVAorX0FDRU9GCisKKworIGlmIHRlc3QgeCIkZW5hYmxlX3N1YnVuaXQiICE9ICJ4ZmFsc2UiOyB0aGVuCisgIFNVQlVOSVRfVFJVRT0KKyAgU1VCVU5JVF9GQUxTRT0nIycKK2Vsc2UKKyAgU1VCVU5JVF9UUlVFPScjJworICBTVUJVTklUX0ZBTFNFPQorZmkKKworCisKKworYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIE1ha2VmaWxlIGdzdC9NYWtlZmlsZSBnc3QvZ3N0Y29uZmlnLmggZ3N0L2dzdHZlcnNpb24uaCBnc3QvcGFyc2UvTWFrZWZpbGUgbGlicy9NYWtlZmlsZSBsaWJzL2dzdC9NYWtlZmlsZSBsaWJzL2dzdC9iYXNlL01ha2VmaWxlIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL01ha2VmaWxlIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrLmggbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZSBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvTWFrZWZpbGUgbGlicy9nc3QvaGVscGVycy9NYWtlZmlsZSBsaWJzL2dzdC9uZXQvTWFrZWZpbGUgcGx1Z2lucy9NYWtlZmlsZSBwbHVnaW5zL2luZGV4ZXJzL01ha2VmaWxlIHBsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUgcG8vTWFrZWZpbGUuaW4gdGVzdHMvTWFrZWZpbGUgdGVzdHMvYmVuY2htYXJrcy9NYWtlZmlsZSB0ZXN0cy9jaGVjay9NYWtlZmlsZSB0ZXN0cy9taXNjL01ha2VmaWxlIHRlc3RzL2V4YW1wbGVzL01ha2VmaWxlIHRlc3RzL2V4YW1wbGVzL2FkYXB0ZXIvTWFrZWZpbGUgdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci9NYWtlZmlsZSB0ZXN0cy9leGFtcGxlcy9zdGVwcGluZy9NYWtlZmlsZSB0ZXN0cy9leGFtcGxlcy9oZWxsb3dvcmxkL01ha2VmaWxlIHRlc3RzL2V4YW1wbGVzL2xhdW5jaC9NYWtlZmlsZSB0ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUgdGVzdHMvZXhhbXBsZXMvbWV0YWRhdGEvTWFrZWZpbGUgdGVzdHMvZXhhbXBsZXMvcXVldWUvTWFrZWZpbGUgdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy9NYWtlZmlsZSB0ZXN0cy9leGFtcGxlcy90eXBlZmluZC9NYWtlZmlsZSB0b29scy9NYWtlZmlsZSBjb21tb24vTWFrZWZpbGUgY29tbW9uL200L01ha2VmaWxlIGRvY3MvTWFrZWZpbGUgZG9jcy9kZXNpZ24vTWFrZWZpbGUgZG9jcy9mYXEvTWFrZWZpbGUgZG9jcy9nc3QvTWFrZWZpbGUgZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzIGRvY3MvbGlicy9NYWtlZmlsZSBkb2NzL3BsdWdpbnMvTWFrZWZpbGUgZG9jcy9tYW51YWwvTWFrZWZpbGUgZG9jcy9wd2cvTWFrZWZpbGUgZG9jcy9zbGlkZXMvTWFrZWZpbGUgZG9jcy94c2wvTWFrZWZpbGUgZG9jcy92ZXJzaW9uLmVudGl0aWVzIG00L01ha2VmaWxlIHBrZ2NvbmZpZy9NYWtlZmlsZSBzdGFtcC5oIHBrZ2NvbmZpZy9nc3RyZWFtZXIucGMgcGtnY29uZmlnL2dzdHJlYW1lci11bmluc3RhbGxlZC5wYyBwa2djb25maWcvZ3N0cmVhbWVyLWJhc2UucGMgcGtnY29uZmlnL2dzdHJlYW1lci1iYXNlLXVuaW5zdGFsbGVkLnBjIHBrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2sucGMgcGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay11bmluc3RhbGxlZC5wYyBwa2djb25maWcvZ3N0cmVhbWVyLWNvbnRyb2xsZXIucGMgcGtnY29uZmlnL2dzdHJlYW1lci1jb250cm9sbGVyLXVuaW5zdGFsbGVkLnBjIHBrZ2NvbmZpZy9nc3RyZWFtZXItZGF0YXByb3RvY29sLnBjIHBrZ2NvbmZpZy9nc3RyZWFtZXItZGF0YXByb3RvY29sLXVuaW5zdGFsbGVkLnBjIHBrZ2NvbmZpZy9nc3RyZWFtZXItbmV0LnBjIHBrZ2NvbmZpZy9nc3RyZWFtZXItbmV0LXVuaW5zdGFsbGVkLnBjIGdzdC1lbGVtZW50LWNoZWNrLm00IGdzdHJlYW1lci5zcGVjIgorCisKK3NlZCBcCisgICAgLWUgJ3MvLipjb25maWcuaC5pbi4qYXV0b2hlYWRlci4qL1wvKiBBdXRvZ2VuZXJhdGVkIGNvbmZpZy5oIGNyZWF0ZWQgZm9yIHdpbjMyIFZpc3VhbCBTdHVkaW8gYnVpbGRzICpcL1xuXG5cLyogUFJFRklYIC0tIHNwZWNpZmljYWxseSBhZGRlZCBmb3IgV2luZG93cyBmb3IgZWFzaWVyIG1vdmluZyAqXC9cbiNkZWZpbmUgUFJFRklYICJDOlxcXFxnc3RyZWFtZXIiLycgXAorICAgIC1lICdzLy4qIEdFVFRFWFRfUEFDS0FHRSQvI2RlZmluZSBHRVRURVhUX1BBQ0tBR0UgIickR0VUVEVYVF9QQUNLQUdFJyIvJyBcCisgICAgLWUgJ3MvLiogR1NUX0RBVEFESVIkLyNkZWZpbmUgR1NUX0RBVEFESVIgUFJFRklYICJcXFxcc2hhcmUiLycgXAorICAgIC1lICdzLy4qIEdTVF9MRVZFTF9ERUZBVUxUJC8jZGVmaW5lIEdTVF9MRVZFTF9ERUZBVUxUIEdTVF9MRVZFTF9FUlJPUi8nIFwKKyAgICAtZSAncy8uKiBHU1RfTElDRU5TRSQvI2RlZmluZSBHU1RfTElDRU5TRSAiJyRHU1RfTElDRU5TRSciLycgXAorICAgIC1lICdzLy4qIEdTVF9NQUpPUk1JTk9SJC8jZGVmaW5lIEdTVF9NQUpPUk1JTk9SICInJEdTVF9NQUpPUk1JTk9SJyIvJyBcCisgICAgLWUgInMsLiogR1NUX1BBQ0tBR0VfTkFNRSQsI2RlZmluZSBHU1RfUEFDS0FHRV9OQU1FIFwiJHtHU1RfUEFDS0FHRV9OQU1FfVwiLCIgXAorICAgIC1lICdzLy4qIEdTVF9QQUNLQUdFX09SSUdJTiQvI2RlZmluZSBHU1RfUEFDS0FHRV9PUklHSU4gIlVua25vd24gcGFja2FnZSBvcmlnaW4iLycgXAorICAgIC1lICJzLC4qIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUkLCNkZWZpbmUgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRSBcIiR7R1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRX1cIiwiIFwKKyAgICAtZSAncy8uKiBIQVZFX0NQVV9JMzg2JC8jZGVmaW5lIEhBVkVfQ1BVX0kzODYgMS8nIFwKKyAgICAtZSAncy8uKiBIQVZFX0ZHRVRQT1MkLyNkZWZpbmUgSEFWRV9GR0VUUE9TIDEvJyBcCisgICAgLWUgJ3MvLiogSEFWRV9GU0VUUE9TJC8jZGVmaW5lIEhBVkVfRlNFVFBPUyAxLycgXAorICAgIC1lICdzLy4qIEhBVkVfUFJPQ0VTU19IJC8jZGVmaW5lIEhBVkVfUFJPQ0VTU19IIDEvJyBcCisgICAgLWUgJ3MvLiogSEFWRV9TVERMSUJfSCQvI2RlZmluZSBIQVZFX1NURExJQl9IIDEvJyBcCisgICAgLWUgJ3MvLiogSEFWRV9TVFJJTkdfSCQvI2RlZmluZSBIQVZFX1NUUklOR19IIDEvJyBcCisgICAgLWUgJ3MvLiogSEFWRV9TWVNfU1RBVF9IJC8jZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxLycgXAorICAgIC1lICdzLy4qIEhBVkVfU1lTX1RZUEVTX0gkLyNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAxLycgXAorICAgIC1lICdzLy4qIEhBVkVfV0lOMzIkLyNkZWZpbmUgSEFWRV9XSU4zMiAxLycgXAorICAgIC1lICdzLy4qIEhBVkVfV0lOU09DSzJfSCQvI2RlZmluZSBIQVZFX1dJTlNPQ0syX0ggMS8nIFwKKyAgICAtZSAncy8uKiBIT1NUX0NQVSQvI2RlZmluZSBIT1NUX0NQVSAiaTY4NiIvJyBcCisgICAgLWUgJ3MvLiogTUVNT1JZX0FMSUdOTUVOVF9NQUxMT0MvI2RlZmluZSBNRU1PUllfQUxJR05NRU5UX01BTExPQyAxLycgXAorICAgIC1lICdzLy4qIExJQkRJUiQvI2lmZGVmIF9ERUJVR1xuIyAgZGVmaW5lIExJQkRJUiBQUkVGSVggIlxcXFxkZWJ1Z1xcXFxsaWIiXG4jZWxzZVxuIyAgZGVmaW5lIExJQkRJUiBQUkVGSVggIlxcXFxsaWIiXG4jZW5kaWYvJyBcCisgICAgLWUgJ3MvLiogTE9DQUxFRElSJC8jZGVmaW5lIExPQ0FMRURJUiBQUkVGSVggIlxcXFxzaGFyZVxcXFxsb2NhbGUiLycgXAorICAgIC1lICdzLy4qIFBBQ0tBR0UkLyNkZWZpbmUgUEFDS0FHRSAiZ3N0cmVhbWVyIi8nIFwKKyAgICAtZSAncy8uKiBQQUNLQUdFX0JVR1JFUE9SVCQvI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiaHR0cDpcL1wvYnVnemlsbGEuZ25vbWUub3JnXC9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9R1N0cmVhbWVyIi8nIFwKKyAgICAtZSAncy8uKiBQQUNLQUdFX05BTUUkLyNkZWZpbmUgUEFDS0FHRV9OQU1FICInJFBBQ0tBR0VfTkFNRSciLycgXAorICAgIC1lICJzLy4qIFBBQ0tBR0VfU1RSSU5HJC8jZGVmaW5lIFBBQ0tBR0VfU1RSSU5HIFwiJFBBQ0tBR0VfU1RSSU5HXCIvIiBcCisgICAgLWUgJ3MvLiogUEFDS0FHRV9UQVJOQU1FJC8jZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiJyRQQUNLQUdFX1RBUk5BTUUnIi8nIFwKKyAgICAtZSAncy8uKiBQQUNLQUdFX1ZFUlNJT04kLyNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICInJFBBQ0tBR0VfVkVSU0lPTiciLycgXAorICAgIC1lICdzLy4qIFBMVUdJTkRJUiQvI2lmZGVmIF9ERUJVR1xuIyAgZGVmaW5lIFBMVUdJTkRJUiBQUkVGSVggIlxcXFxkZWJ1Z1xcXFxsaWJcXFxcZ3N0cmVhbWVyLTAuMTEiXG4jZWxzZVxuIyAgZGVmaW5lIFBMVUdJTkRJUiBQUkVGSVggIlxcXFxsaWJcXFxcZ3N0cmVhbWVyLTAuMTEiXG4jZW5kaWYvJyBcCisgICAgLWUgJ3MvLiogR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCQvI2RlZmluZSBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEIExJQkRJUiAiXFxcXGdzdC1wbHVnaW4tc2Nhbm5lciIvJyBcCisgICAgLWUgJ3MvLiogVkVSU0lPTiQvI2RlZmluZSBWRVJTSU9OICInJFZFUlNJT04nIi8nIFwKKyAgICBjb25maWcuaC5pbiA+d2luMzIvY29tbW9uL2NvbmZpZy5oLW5ldworCitjYXQgPmNvbmZjYWNoZSA8PFxfQUNFT0YKKyMgVGhpcyBmaWxlIGlzIGEgc2hlbGwgc2NyaXB0IHRoYXQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGNvbmZpZ3VyZQorIyB0ZXN0cyBydW4gb24gdGhpcyBzeXN0ZW0gc28gdGhleSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gY29uZmlndXJlCisjIHNjcmlwdHMgYW5kIGNvbmZpZ3VyZSBydW5zLCBzZWUgY29uZmlndXJlJ3Mgb3B0aW9uIC0tY29uZmlnLWNhY2hlLgorIyBJdCBpcyBub3QgdXNlZnVsIG9uIG90aGVyIHN5c3RlbXMuICBJZiBpdCBjb250YWlucyByZXN1bHRzIHlvdSBkb24ndAorIyB3YW50IHRvIGtlZXAsIHlvdSBtYXkgcmVtb3ZlIG9yIGVkaXQgaXQuCisjCisjIGNvbmZpZy5zdGF0dXMgb25seSBwYXlzIGF0dGVudGlvbiB0byB0aGUgY2FjaGUgZmlsZSBpZiB5b3UgZ2l2ZSBpdAorIyB0aGUgLS1yZWNoZWNrIG9wdGlvbiB0byByZXJ1biBjb25maWd1cmUuCisjCisjIGBhY19jdl9lbnZfZm9vJyB2YXJpYWJsZXMgKHNldCBvciB1bnNldCkgd2lsbCBiZSBvdmVycmlkZGVuIHdoZW4KKyMgbG9hZGluZyB0aGlzIGZpbGUsIG90aGVyICp1bnNldCogYGFjX2N2X2Zvbycgd2lsbCBiZSBhc3NpZ25lZCB0aGUKKyMgZm9sbG93aW5nIHZhbHVlcy4KKworX0FDRU9GCisKKyMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCisjIGJ1dCB3ZSBrbm93IG9mIG5vIHdvcmthcm91bmQgdGhhdCBpcyBzaW1wbGUsIHBvcnRhYmxlLCBhbmQgZWZmaWNpZW50LgorIyBTbywgd2Uga2lsbCB2YXJpYWJsZXMgY29udGFpbmluZyBuZXdsaW5lcy4KKyMgVWx0cml4IHNoIHNldCB3cml0ZXMgdG8gc3RkZXJyIGFuZCBjYW4ndCBiZSByZWRpcmVjdGVkIGRpcmVjdGx5LAorIyBhbmQgc2V0cyB0aGUgaGlnaCBiaXQgaW4gdGhlIGNhY2hlIGZpbGUgdW5sZXNzIHdlIGFzc2lnbiB0byB0aGUgdmFycy4KKygKKyAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdgOyBkbworICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAorICAgICoke2FzX25sfSopCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgICpfY3ZfKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiYyO30gOzsKKyAgICAgIGVzYWMKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgXyB8IElGUyB8IGFzX25sKSA7OyAjKAorICAgICAgQkFTSF9BUkdWIHwgQkFTSF9TT1VSQ0UpIGV2YWwgJGFjX3Zhcj0gOzsgIygKKyAgICAgICopIHsgZXZhbCAkYWNfdmFyPTsgdW5zZXQgJGFjX3Zhcjt9IDs7CisgICAgICBlc2FjIDs7CisgICAgZXNhYworICBkb25lCisKKyAgKHNldCkgMj4mMSB8CisgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPScgJzsgc2V0KSAyPiYxYCBpbiAjKAorICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKKyAgICAgICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzOiBkb3VibGUtcXVvdGUKKyAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwuCisgICAgICBzZWQgLW4gXAorCSJzLycvJ1xcXFwnJy9nOworCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIgorICAgICAgOzsgIygKKyAgICAqKQorICAgICAgIyBgc2V0JyBxdW90ZXMgY29ycmVjdGx5IGFzIHJlcXVpcmVkIGJ5IFBPU0lYLCBzbyBkbyBub3QgYWRkIHF1b3Rlcy4KKyAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiCisgICAgICA7OworICAgIGVzYWMgfAorICAgIHNvcnQKKykgfAorICBzZWQgJworICAgICAvXmFjX2N2X2Vudl8vYiBlbmQKKyAgICAgdCBjbGVhcgorICAgICA6Y2xlYXIKKyAgICAgcy9eXChbXj1dKlwpPVwoLipbe31dLipcKSQvdGVzdCAiJHtcMStzZXR9IiA9IHNldCB8fCAmLworICAgICB0IGVuZAorICAgICBzL15cKFtePV0qXCk9XCguKlwpJC9cMT0ke1wxPVwyfS8KKyAgICAgOmVuZCcgPj5jb25mY2FjaGUKK2lmIGRpZmYgIiRjYWNoZV9maWxlIiBjb25mY2FjaGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgaWYgdGVzdCAtdyAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICAgdGVzdCAieCRjYWNoZV9maWxlIiAhPSAieC9kZXYvbnVsbCIgJiYKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgICAgY2F0IGNvbmZjYWNoZSA+JGNhY2hlX2ZpbGUKKyAgZWxzZQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgIGZpCitmaQorcm0gLWYgY29uZmNhY2hlCisKK3Rlc3QgIngkcHJlZml4IiA9IHhOT05FICYmIHByZWZpeD0kYWNfZGVmYXVsdF9wcmVmaXgKKyMgTGV0IG1ha2UgZXhwYW5kIGV4ZWNfcHJlZml4LgordGVzdCAieCRleGVjX3ByZWZpeCIgPSB4Tk9ORSAmJiBleGVjX3ByZWZpeD0nJHtwcmVmaXh9JworCitERUZTPS1ESEFWRV9DT05GSUdfSAorCithY19saWJvYmpzPQorYWNfbHRsaWJvYmpzPQorVT0KK2ZvciBhY19pIGluIDogJExJQk9CSlM7IGRvIHRlc3QgIngkYWNfaSIgPSB4OiAmJiBjb250aW51ZQorICAjIDEuIFJlbW92ZSB0aGUgZXh0ZW5zaW9uLCBhbmQgJFUgaWYgYWxyZWFkeSBpbnN0YWxsZWQuCisgIGFjX3NjcmlwdD0ncy9cJFVcLi8uLztzL1wubyQvLztzL1wub2JqJC8vJworICBhY19pPWAkYXNfZWNobyAiJGFjX2kiIHwgc2VkICIkYWNfc2NyaXB0ImAKKyAgIyAyLiBQcmVwZW5kIExJQk9CSkRJUi4gIFdoZW4gdXNlZCB3aXRoIGF1dG9tYWtlPj0xLjEwIExJQk9CSkRJUgorICAjICAgIHdpbGwgYmUgc2V0IHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgTElCT0JKUyBvYmplY3RzIGFyZSBidWlsdC4KKyAgYXNfZm5fYXBwZW5kIGFjX2xpYm9ianMgIiBcJHtMSUJPQkpESVJ9JGFjX2lcJFUuJGFjX29iamV4dCIKKyAgYXNfZm5fYXBwZW5kIGFjX2x0bGlib2JqcyAiIFwke0xJQk9CSkRJUn0kYWNfaSInJFUubG8nCitkb25lCitMSUJPQkpTPSRhY19saWJvYmpzCisKK0xUTElCT0JKUz0kYWNfbHRsaWJvYmpzCisKKworIGlmIHRlc3QgLW4gIiRFWEVFWFQiOyB0aGVuCisgIGFtX19FWEVFWFRfVFJVRT0KKyAgYW1fX0VYRUVYVF9GQUxTRT0nIycKK2Vsc2UKKyAgYW1fX0VYRUVYVF9UUlVFPScjJworICBhbV9fRVhFRVhUX0ZBTFNFPQorZmkKKworaWYgdGVzdCAteiAiJHtNQUlOVEFJTkVSX01PREVfVFJVRX0iICYmIHRlc3QgLXogIiR7TUFJTlRBSU5FUl9NT0RFX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiTUFJTlRBSU5FUl9NT0RFXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtBTURFUF9UUlVFfSIgJiYgdGVzdCAteiAiJHtBTURFUF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkFNREVQXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDX1RSVUV9IiAmJiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENDXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtHU1RfRElTQUJMRV9HU1RfREVCVUdfVFJVRX0iICYmIHRlc3QgLXogIiR7R1NUX0RJU0FCTEVfR1NUX0RFQlVHX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiR1NUX0RJU0FCTEVfR1NUX0RFQlVHXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtHU1RfRElTQUJMRV9QQVJTRV9UUlVFfSIgJiYgdGVzdCAteiAiJHtHU1RfRElTQUJMRV9QQVJTRV9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkdTVF9ESVNBQkxFX1BBUlNFXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19UUlVFfSIgJiYgdGVzdCAteiAiJHtHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtHU1RfRElTQUJMRV9UUkFDRV9UUlVFfSIgJiYgdGVzdCAteiAiJHtHU1RfRElTQUJMRV9UUkFDRV9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkdTVF9ESVNBQkxFX1RSQUNFXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9UUlVFfSIgJiYgdGVzdCAteiAiJHtHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtHU1RfRElTQUJMRV9SRUdJU1RSWV9UUlVFfSIgJiYgdGVzdCAteiAiJHtHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkdTVF9ESVNBQkxFX1JFR0lTVFJZXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtHU1RfRElTQUJMRV9ORVRfVFJVRX0iICYmIHRlc3QgLXogIiR7R1NUX0RJU0FCTEVfTkVUX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiR1NUX0RJU0FCTEVfTkVUXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtHU1RfRElTQUJMRV9QTFVHSU5fVFJVRX0iICYmIHRlc3QgLXogIiR7R1NUX0RJU0FCTEVfUExVR0lOX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiR1NUX0RJU0FCTEVfUExVR0lOXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtHU1RfR0NPVl9FTkFCTEVEX1RSVUV9IiAmJiB0ZXN0IC16ICIke0dTVF9HQ09WX0VOQUJMRURfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJHU1RfR0NPVl9FTkFCTEVEXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtCVUlMRF9FWEFNUExFU19UUlVFfSIgJiYgdGVzdCAteiAiJHtCVUlMRF9FWEFNUExFU19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkJVSUxEX0VYQU1QTEVTXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtCVUlMRF9URVNUU19UUlVFfSIgJiYgdGVzdCAteiAiJHtCVUlMRF9URVNUU19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkJVSUxEX1RFU1RTXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtCVUlMRF9GQUlMSU5HX1RFU1RTX1RSVUV9IiAmJiB0ZXN0IC16ICIke0JVSUxEX0ZBSUxJTkdfVEVTVFNfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJCVUlMRF9GQUlMSU5HX1RFU1RTXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQorCitpZiB0ZXN0IC16ICIke0hBVkVfQ1BVX0kzODZfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9DUFVfSTM4Nl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfQ1BVX0kzODZcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfQ1BVX1BQQ19UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX0NQVV9QUENfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX0NQVV9QUENcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfQ1BVX1BQQzY0X1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfQ1BVX1BQQzY0X0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9DUFVfUFBDNjRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfQ1BVX0FMUEhBX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfQ1BVX0FMUEhBX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9DUFVfQUxQSEFcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfQ1BVX0FSTV9UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX0NQVV9BUk1fRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX0NQVV9BUk1cIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfQ1BVX1NQQVJDX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfQ1BVX1NQQVJDX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9DUFVfU1BBUkNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfQ1BVX0hQUEFfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9DUFVfSFBQQV9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfQ1BVX0hQUEFcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfQ1BVX01JUFNfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9DUFVfTUlQU19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfQ1BVX01JUFNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfQ1BVX1MzOTBfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9DUFVfUzM5MF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfQ1BVX1MzOTBcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfQ1BVX0lBNjRfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9DUFVfSUE2NF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfQ1BVX0lBNjRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfQ1BVX002OEtfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9DUFVfTTY4S19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfQ1BVX002OEtcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfQ1BVX1g4Nl82NF9UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX0NQVV9YODZfNjRfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX0NQVV9YODZfNjRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfQ1BVX0NSSVNfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9DUFVfQ1JJU19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfQ1BVX0NSSVNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfQ1BVX0NSSVNWMzJfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9DUFVfQ1JJU1YzMl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfQ1BVX0NSSVNWMzJcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NfVFJVRX0iICYmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ0NcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NBU19UUlVFfSIgJiYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDQVNfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENDQVNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ1hYX1RSVUV9IiAmJiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ1hYX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDWFhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ1hYX1RSVUV9IiAmJiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ1hYX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDWFhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfQ1hYX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfQ1hYX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9DWFhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfVkFMR1JJTkRfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9WQUxHUklORF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfVkFMR1JJTkRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfSU5UUk9TUEVDVElPTl9UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX0lOVFJPU1BFQ1RJT05fRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX0lOVFJPU1BFQ1RJT05cIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0VOQUJMRV9ET0NCT09LX1RSVUV9IiAmJiB0ZXN0IC16ICIke0VOQUJMRV9ET0NCT09LX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiRU5BQkxFX0RPQ0JPT0tcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0RPQ19IVE1MX1RSVUV9IiAmJiB0ZXN0IC16ICIke0RPQ19IVE1MX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiRE9DX0hUTUxcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0RPQ19QREZfVFJVRX0iICYmIHRlc3QgLXogIiR7RE9DX1BERl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkRPQ19QREZcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0RPQ19QU19UUlVFfSIgJiYgdGVzdCAteiAiJHtET0NfUFNfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJET0NfUFNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0VOQUJMRV9HVEtfRE9DX1RSVUV9IiAmJiB0ZXN0IC16ICIke0VOQUJMRV9HVEtfRE9DX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiRU5BQkxFX0dUS19ET0NcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0dUS19ET0NfVVNFX0xJQlRPT0xfVFJVRX0iICYmIHRlc3QgLXogIiR7R1RLX0RPQ19VU0VfTElCVE9PTF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkdUS19ET0NfVVNFX0xJQlRPT0xcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0VOQUJMRV9QTFVHSU5fRE9DU19UUlVFfSIgJiYgdGVzdCAteiAiJHtFTkFCTEVfUExVR0lOX0RPQ1NfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJFTkFCTEVfUExVR0lOX0RPQ1NcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfU1lTX1NPQ0tFVF9IX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfU1lTX1NPQ0tFVF9IX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9TWVNfU09DS0VUX0hcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfU1lTX1RJTUVTX0hfQU5EX1VOSVNURF9IX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfU1lTX1RJTUVTX0hfQU5EX1VOSVNURF9IX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9TWVNfVElNRVNfSF9BTkRfVU5JU1REX0hcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfUFRIUkVBRF9IX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfUFRIUkVBRF9IX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9QVEhSRUFEX0hcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfV0lOU09DSzJfSF9UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX1dJTlNPQ0syX0hfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX1dJTlNPQ0syX0hcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfTU1BUF9UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX01NQVBfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX01NQVBcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0dTVF9IQVZFX1BPU0lYX1RJTUVSU19UUlVFfSIgJiYgdGVzdCAteiAiJHtHU1RfSEFWRV9QT1NJWF9USU1FUlNfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJHU1RfSEFWRV9QT1NJWF9USU1FUlNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0dTVF9IQVZFX01PTk9UT05JQ19DTE9DS19UUlVFfSIgJiYgdGVzdCAteiAiJHtHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfQ0hFQ0tfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9DSEVDS19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfQ0hFQ0tcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1NVQlVOSVRfVFJVRX0iICYmIHRlc3QgLXogIiR7U1VCVU5JVF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlNVQlVOSVRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCisKKzogJHtDT05GSUdfU1RBVFVTPS4vY29uZmlnLnN0YXR1c30KK2FjX3dyaXRlX2ZhaWw9MAorYWNfY2xlYW5fZmlsZXNfc2F2ZT0kYWNfY2xlYW5fZmlsZXMKK2FjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgJENPTkZJR19TVEFUVVMiCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjY7fQorYXNfd3JpdGVfZmFpbD0wCitjYXQgPiRDT05GSUdfU1RBVFVTIDw8X0FTRU9GIHx8IGFzX3dyaXRlX2ZhaWw9MQorIyEgJFNIRUxMCisjIEdlbmVyYXRlZCBieSAkYXNfbWUuCisjIFJ1biB0aGlzIGZpbGUgdG8gcmVjcmVhdGUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyMgQ29tcGlsZXIgb3V0cHV0IHByb2R1Y2VkIGJ5IGNvbmZpZ3VyZSwgdXNlZnVsIGZvciBkZWJ1Z2dpbmcKKyMgY29uZmlndXJlLCBpcyBpbiBjb25maWcubG9nIGlmIGl0IGV4aXN0cy4KKworZGVidWc9ZmFsc2UKK2FjX2NzX3JlY2hlY2s9ZmFsc2UKK2FjX2NzX3NpbGVudD1mYWxzZQorCitTSEVMTD1cJHtDT05GSUdfU0hFTEwtJFNIRUxMfQorZXhwb3J0IFNIRUxMCitfQVNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BU0VPRiB8fCBhc193cml0ZV9mYWlsPTEKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNNHNoIEluaXRpYWxpemF0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBCZSBtb3JlIEJvdXJuZSBjb21wYXRpYmxlCitEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAjKAorICAqcG9zaXgqKSA6CisgICAgc2V0IC1vIHBvc2l4IDs7ICMoCisgICopIDoKKyAgICAgOzsKK2VzYWMKK2ZpCisKKworYXNfbmw9JworJworZXhwb3J0IGFzX25sCisjIFByaW50aW5nIGEgbG9uZyBzdHJpbmcgY3Jhc2hlcyBTb2xhcmlzIDcgL3Vzci9iaW4vcHJpbnRmLgorYXNfZWNobz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KKyMgUHJlZmVyIGEga3NoIHNoZWxsIGJ1aWx0aW4gb3ZlciBhbiBleHRlcm5hbCBwcmludGYgcHJvZ3JhbSBvbiBTb2xhcmlzLAorIyBidXQgd2l0aG91dCB3YXN0aW5nIGZvcmtzIGZvciBiYXNoIG9yIHpzaC4KK2lmIHRlc3QgLXogIiRCQVNIX1ZFUlNJT04kWlNIX1ZFUlNJT04iIFwKKyAgICAmJiAodGVzdCAiWGBwcmludCAtciAtLSAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50IC1yIC0tJworICBhc19lY2hvX249J3ByaW50IC1ybiAtLScKK2VsaWYgKHRlc3QgIlhgcHJpbnRmICVzICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnRmICVzXG4nCisgIGFzX2VjaG9fbj0ncHJpbnRmICVzJworZWxzZQorICBpZiB0ZXN0ICJYYCgvdXNyL3VjYi9lY2hvIC1uIC1uICRhc19lY2hvKSAyPi9kZXYvbnVsbGAiID0gIlgtbiAkYXNfZWNobyI7IHRoZW4KKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgL3Vzci91Y2IvZWNobyAtbiAiJDEkYXNfbmwiJworICAgIGFzX2VjaG9fbj0nL3Vzci91Y2IvZWNobyAtbicKKyAgZWxzZQorICAgIGFzX2VjaG9fYm9keT0nZXZhbCBleHByICJYJDEiIDogIlhcXCguKlxcKSInCisgICAgYXNfZWNob19uX2JvZHk9J2V2YWwKKyAgICAgIGFyZz0kMTsKKyAgICAgIGNhc2UgJGFyZyBpbiAjKAorICAgICAgKiIkYXNfbmwiKikKKwlleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpJGFzX25sIjsKKwlhcmc9YGV4cHIgIlgkYXJnIiA6ICIuKiRhc19ubFxcKC4qXFwpImA7OworICAgICAgZXNhYzsKKyAgICAgIGV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkiIHwgdHIgLWQgIiRhc19ubCIKKyAgICAnCisgICAgZXhwb3J0IGFzX2VjaG9fbl9ib2R5CisgICAgYXNfZWNob19uPSdzaCAtYyAkYXNfZWNob19uX2JvZHkgYXNfZWNobycKKyAgZmkKKyAgZXhwb3J0IGFzX2VjaG9fYm9keQorICBhc19lY2hvPSdzaCAtYyAkYXNfZWNob19ib2R5IGFzX2VjaG8nCitmaQorCisjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgIFBBVEhfU0VQQVJBVE9SPToKKyAgKFBBVEg9Jy9iaW47L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgJiYgeworICAgIChQQVRIPScvYmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIHx8CisgICAgICBQQVRIX1NFUEFSQVRPUj0nOycKKyAgfQorZmkKKworCisjIElGUworIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4gIFF1b3RpbmcgaXMKKyMgdGhlcmUgdG8gcHJldmVudCBlZGl0b3JzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgc3BhY2UtdGFiLgorIyAoSWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlzYWJsZSB3b3JkCisjIHNwbGl0dGluZyBieSBzZXR0aW5nIElGUyB0byBlbXB0eSB2YWx1ZS4pCitJRlM9IiAiIgkkYXNfbmwiCisKKyMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIGRpcmVjdG9yeSBzZXBhcmF0b3IuCitjYXNlICQwIGluICMoKAorICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7CisgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhaworICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgICAgOzsKK2VzYWMKKyMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKKyMgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbm90IHRvIGJlIGZvdW5kIGluIHRoZSBwYXRoLgoraWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgorICBhc19teXNlbGY9JDAKK2ZpCitpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCisgICRhc19lY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCisgIGV4aXQgMQorZmkKKworIyBVbnNldCB2YXJpYWJsZXMgdGhhdCB3ZSBkbyBub3QgbmVlZCBhbmQgd2hpY2ggY2F1c2UgYnVncyAoZS5nLiBpbgorIyBwcmUtMy4wIFVXSU4ga3NoKS4gIEJ1dCBkbyBub3QgY2F1c2UgYnVncyBpbiBiYXNoIDIuMDE7IHRoZSAifHwgZXhpdCAxIgorIyBzdXBwcmVzc2VzIGFueSAiU2VnbWVudGF0aW9uIGZhdWx0IiBtZXNzYWdlIHRoZXJlLiAgJygoJyBjb3VsZAorIyB0cmlnZ2VyIGEgYnVnIGluIHBka3NoIDUuMi4xNC4KK2ZvciBhc192YXIgaW4gQkFTSF9FTlYgRU5WIE1BSUwgTUFJTFBBVEgKK2RvIGV2YWwgdGVzdCB4XCR7JGFzX3ZhcitzZXR9ID0geHNldCBcCisgICYmICggKHVuc2V0ICRhc192YXIpIHx8IGV4aXQgMSkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0ICRhc192YXIgfHwgOgorZG9uZQorUFMxPSckICcKK1BTMj0nPiAnCitQUzQ9JysgJworCisjIE5MUyBudWlzYW5jZXMuCitMQ19BTEw9QworZXhwb3J0IExDX0FMTAorTEFOR1VBR0U9QworZXhwb3J0IExBTkdVQUdFCisKKyMgQ0RQQVRILgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCisKKyMgYXNfZm5fZXJyb3IgU1RBVFVTIEVSUk9SIFtMSU5FTk8gTE9HX0ZEXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCAiYGJhc2VuYW1lICQwYDogZXJyb3I6IEVSUk9SIiB0byBzdGRlcnIuIElmIExJTkVOTyBhbmQgTE9HX0ZEIGFyZQorIyBwcm92aWRlZCwgYWxzbyBvdXRwdXQgdGhlIGVycm9yIHRvIExPR19GRCwgcmVmZXJlbmNpbmcgTElORU5PLiBUaGVuIGV4aXQgdGhlCisjIHNjcmlwdCB3aXRoIFNUQVRVUywgdXNpbmcgMSBpZiB0aGF0IHdhcyAwLgorYXNfZm5fZXJyb3IgKCkKK3sKKyAgYXNfc3RhdHVzPSQxOyB0ZXN0ICRhc19zdGF0dXMgLWVxIDAgJiYgYXNfc3RhdHVzPTEKKyAgaWYgdGVzdCAiJDQiOyB0aGVuCisgICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMyJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiAkMiIgPiYkNAorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJDIiID4mMgorICBhc19mbl9leGl0ICRhc19zdGF0dXMKK30gIyBhc19mbl9lcnJvcgorCisKKyMgYXNfZm5fc2V0X3N0YXR1cyBTVEFUVVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0ICQ/IHRvIFNUQVRVUywgd2l0aG91dCBmb3JraW5nLgorYXNfZm5fc2V0X3N0YXR1cyAoKQoreworICByZXR1cm4gJDEKK30gIyBhc19mbl9zZXRfc3RhdHVzCisKKyMgYXNfZm5fZXhpdCBTVEFUVVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhpdCB0aGUgc2hlbGwgd2l0aCBTVEFUVVMsIGV2ZW4gaW4gYSAidHJhcCAwIiBvciAic2V0IC1lIiBjb250ZXh0LgorYXNfZm5fZXhpdCAoKQoreworICBzZXQgK2UKKyAgYXNfZm5fc2V0X3N0YXR1cyAkMQorICBleGl0ICQxCit9ICMgYXNfZm5fZXhpdAorCisjIGFzX2ZuX3Vuc2V0IFZBUgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgUG9ydGFibHkgdW5zZXQgVkFSLgorYXNfZm5fdW5zZXQgKCkKK3sKKyAgeyBldmFsICQxPTsgdW5zZXQgJDE7fQorfQorYXNfdW5zZXQ9YXNfZm5fdW5zZXQKKyMgYXNfZm5fYXBwZW5kIFZBUiBWQUxVRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFwcGVuZCB0aGUgdGV4dCBpbiBWQUxVRSB0byB0aGUgZW5kIG9mIHRoZSBkZWZpbml0aW9uIGNvbnRhaW5lZCBpbiBWQVIuIFRha2UKKyMgYWR2YW50YWdlIG9mIGFueSBzaGVsbCBvcHRpbWl6YXRpb25zIHRoYXQgYWxsb3cgYW1vcnRpemVkIGxpbmVhciBncm93dGggb3ZlcgorIyByZXBlYXRlZCBhcHBlbmRzLCBpbnN0ZWFkIG9mIHRoZSB0eXBpY2FsIHF1YWRyYXRpYyBncm93dGggcHJlc2VudCBpbiBuYWl2ZQorIyBpbXBsZW1lbnRhdGlvbnMuCitpZiAoZXZhbCAiYXNfdmFyPTE7IGFzX3Zhcis9MjsgdGVzdCB4XCRhc192YXIgPSB4MTIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGV2YWwgJ2FzX2ZuX2FwcGVuZCAoKQorICB7CisgICAgZXZhbCAkMSs9XCQyCisgIH0nCitlbHNlCisgIGFzX2ZuX2FwcGVuZCAoKQorICB7CisgICAgZXZhbCAkMT1cJCQxXCQyCisgIH0KK2ZpICMgYXNfZm5fYXBwZW5kCisKKyMgYXNfZm5fYXJpdGggQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBQZXJmb3JtIGFyaXRobWV0aWMgZXZhbHVhdGlvbiBvbiB0aGUgQVJHcywgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gdGhlCisjIGdsb2JhbCAkYXNfdmFsLiBUYWtlIGFkdmFudGFnZSBvZiBzaGVsbHMgdGhhdCBjYW4gYXZvaWQgZm9ya3MuIFRoZSBhcmd1bWVudHMKKyMgbXVzdCBiZSBwb3J0YWJsZSBhY3Jvc3MgJCgoKSkgYW5kIGV4cHIuCitpZiAoZXZhbCAidGVzdCBcJCgoIDEgKyAxICkpID0gMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXJpdGggKCkKKyAgeworICAgIGFzX3ZhbD0kKCggJCogKSkKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXJpdGggKCkKKyAgeworICAgIGFzX3ZhbD1gZXhwciAiJEAiIHx8IHRlc3QgJD8gLWVxIDFgCisgIH0KK2ZpICMgYXNfZm5fYXJpdGgKKworCitpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KKyAgYXNfZXhwcj1leHByCitlbHNlCisgIGFzX2V4cHI9ZmFsc2UKK2ZpCisKK2lmIChiYXNlbmFtZSAtLSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAtLSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KKyAgYXNfYmFzZW5hbWU9YmFzZW5hbWUKK2Vsc2UKKyAgYXNfYmFzZW5hbWU9ZmFsc2UKK2ZpCisKK2lmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc19kaXJuYW1lPWRpcm5hbWUKK2Vsc2UKKyAgYXNfZGlybmFtZT1mYWxzZQorZmkKKworYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8CiskYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8qJCcgXHwgXAorCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgvIiQwIiB8CisgICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcL1woXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcL1woXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorCisjIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCithc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKK2FzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJworYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCithc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCithc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKKworRUNIT19DPSBFQ0hPX049IEVDSE9fVD0KK2Nhc2UgYGVjaG8gLW4geGAgaW4gIygoKCgoCistbiopCisgIGNhc2UgYGVjaG8gJ3h5XGMnYCBpbgorICAqYyopIEVDSE9fVD0nCSc7OwkjIEVDSE9fVCBpcyBzaW5nbGUgdGFiIGNoYXJhY3Rlci4KKyAgeHkpICBFQ0hPX0M9J1xjJzs7CisgICopICAgZWNobyBgZWNobyBrc2g4OCBidWcgb24gQUlYIDYuMWAgPiAvZGV2L251bGwKKyAgICAgICBFQ0hPX1Q9JwknOzsKKyAgZXNhYzs7CisqKQorICBFQ0hPX049Jy1uJzs7Citlc2FjCisKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCitpZiB0ZXN0IC1kIGNvbmYkJC5kaXI7IHRoZW4KKyAgcm0gLWYgY29uZiQkLmRpci9jb25mJCQuZmlsZQorZWxzZQorICBybSAtZiBjb25mJCQuZGlyCisgIG1rZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKK2ZpCitpZiAoZWNobyA+Y29uZiQkLmZpbGUpIDI+L2Rldi9udWxsOyB0aGVuCisgIGlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGFzX2xuX3M9J2xuIC1zJworICAgICMgLi4uIGJ1dCB0aGVyZSBhcmUgdHdvIGdvdGNoYXM6CisgICAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KKyAgICAjIDIpIERKR1BQIDwgMi4wNCBoYXMgbm8gc3ltbGlua3M7IGBsbiAtcycgY3JlYXRlcyBhIHdyYXBwZXIgZXhlY3V0YWJsZS4KKyAgICAjIEluIGJvdGggY2FzZXMsIHdlIGhhdmUgdG8gZGVmYXVsdCB0byBgY3AgLXAnLgorICAgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKyAgICAgIGFzX2xuX3M9J2NwIC1wJworICBlbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGFzX2xuX3M9bG4KKyAgZWxzZQorICAgIGFzX2xuX3M9J2NwIC1wJworICBmaQorZWxzZQorICBhc19sbl9zPSdjcCAtcCcKK2ZpCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZGlyL2NvbmYkJC5maWxlIGNvbmYkJC5maWxlCitybWRpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCisKKworIyBhc19mbl9ta2Rpcl9wCisjIC0tLS0tLS0tLS0tLS0KKyMgQ3JlYXRlICIkYXNfZGlyIiBhcyBhIGRpcmVjdG9yeSwgaW5jbHVkaW5nIHBhcmVudHMgaWYgbmVjZXNzYXJ5LgorYXNfZm5fbWtkaXJfcCAoKQoreworCisgIGNhc2UgJGFzX2RpciBpbiAjKAorICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7CisgIGVzYWMKKyAgdGVzdCAtZCAiJGFzX2RpciIgfHwgZXZhbCAkYXNfbWtkaXJfcCB8fCB7CisgICAgYXNfZGlycz0KKyAgICB3aGlsZSA6OyBkbworICAgICAgY2FzZSAkYXNfZGlyIGluICMoCisgICAgICAqXCcqKSBhc19xZGlyPWAkYXNfZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjJygKKyAgICAgICopIGFzX3FkaXI9JGFzX2Rpcjs7CisgICAgICBlc2FjCisgICAgICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX2RpciIgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICAgICAgdGVzdCAtZCAiJGFzX2RpciIgJiYgYnJlYWsKKyAgICBkb25lCisgICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgorICB9IHx8IHRlc3QgLWQgIiRhc19kaXIiIHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIgorCisKK30gIyBhc19mbl9ta2Rpcl9wCitpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX21rZGlyX3A9J21rZGlyIC1wICIkYXNfZGlyIicKK2Vsc2UKKyAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKyAgYXNfbWtkaXJfcD1mYWxzZQorZmkKKworaWYgdGVzdCAteCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc190ZXN0X3g9J3Rlc3QgLXgnCitlbHNlCisgIGlmIGxzIC1kTCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIGFzX2xzX0xfb3B0aW9uPUwKKyAgZWxzZQorICAgIGFzX2xzX0xfb3B0aW9uPQorICBmaQorICBhc190ZXN0X3g9JworICAgIGV2YWwgc2ggLWMgJ1wnJworICAgICAgaWYgdGVzdCAtZCAiJDEiOyB0aGVuCisJdGVzdCAtZCAiJDEvLiI7CisgICAgICBlbHNlCisJY2FzZSAkMSBpbiAjKAorCS0qKXNldCAiLi8kMSI7OworCWVzYWM7CisJY2FzZSBgbHMgLWxkJyRhc19sc19MX29wdGlvbicgIiQxIiAyPi9kZXYvbnVsbGAgaW4gIygoCisJPz8/W3N4XSopOjs7KilmYWxzZTs7ZXNhYztmaQorICAgICdcJycgc2gKKyAgJworZmkKK2FzX2V4ZWN1dGFibGVfcD0kYXNfdGVzdF94CisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KK2FzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgorYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKworCitleGVjIDY+JjEKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNYWluIGJvZHkgb2YgJENPTkZJR19TVEFUVVMgc2NyaXB0LiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK19BU0VPRgordGVzdCAkYXNfd3JpdGVfZmFpbCA9IDAgJiYgY2htb2QgK3ggJENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyMgU2F2ZSB0aGUgbG9nIG1lc3NhZ2UsIHRvIGtlZXAgJDAgYW5kIHNvIG9uIG1lYW5pbmdmdWwsIGFuZCB0bworIyByZXBvcnQgYWN0dWFsIGlucHV0IHZhbHVlcyBvZiBDT05GSUdfRklMRVMgZXRjLiBpbnN0ZWFkIG9mIHRoZWlyCisjIHZhbHVlcyBhZnRlciBvcHRpb25zIGhhbmRsaW5nLgorYWNfbG9nPSIKK1RoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgR1N0cmVhbWVyICRhc19tZSAwLjExLjEsIHdoaWNoIHdhcworZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY3LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCisKKyAgQ09ORklHX0ZJTEVTICAgID0gJENPTkZJR19GSUxFUworICBDT05GSUdfSEVBREVSUyAgPSAkQ09ORklHX0hFQURFUlMKKyAgQ09ORklHX0xJTktTICAgID0gJENPTkZJR19MSU5LUworICBDT05GSUdfQ09NTUFORFMgPSAkQ09ORklHX0NPTU1BTkRTCisgICQgJDAgJEAKKworb24gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCisiCisKK19BQ0VPRgorCitjYXNlICRhY19jb25maWdfZmlsZXMgaW4gKiIKKyIqKSBzZXQgeCAkYWNfY29uZmlnX2ZpbGVzOyBzaGlmdDsgYWNfY29uZmlnX2ZpbGVzPSQqOzsKK2VzYWMKKworY2FzZSAkYWNfY29uZmlnX2hlYWRlcnMgaW4gKiIKKyIqKSBzZXQgeCAkYWNfY29uZmlnX2hlYWRlcnM7IHNoaWZ0OyBhY19jb25maWdfaGVhZGVycz0kKjs7Citlc2FjCisKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIEZpbGVzIHRoYXQgY29uZmlnLnN0YXR1cyB3YXMgbWFkZSBmb3IuCitjb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMiCitjb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIgorY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIgorCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorYWNfY3NfdXNhZ2U9IlwKK1xgJGFzX21lJyBpbnN0YW50aWF0ZXMgZmlsZXMgYW5kIG90aGVyIGNvbmZpZ3VyYXRpb24gYWN0aW9ucworZnJvbSB0ZW1wbGF0ZXMgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uICBVbmxlc3MgdGhlIGZpbGVzCithbmQgYWN0aW9ucyBhcmUgc3BlY2lmaWVkIGFzIFRBR3MsIGFsbCBhcmUgaW5zdGFudGlhdGVkIGJ5IGRlZmF1bHQuCisKK1VzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVEFHXS4uLgorCisgIC1oLCAtLWhlbHAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLVYsIC0tdmVyc2lvbiAgICBwcmludCB2ZXJzaW9uIG51bWJlciBhbmQgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgdGhlbiBleGl0CisgICAgICAtLWNvbmZpZyAgICAgcHJpbnQgY29uZmlndXJhdGlvbiwgdGhlbiBleGl0CisgIC1xLCAtLXF1aWV0LCAtLXNpbGVudAorICAgICAgICAgICAgICAgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcworICAtZCwgLS1kZWJ1ZyAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKyAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucworICAgICAgLS1maWxlPUZJTEVbOlRFTVBMQVRFXQorICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQorICAgICAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCisgICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIEZJTEUKKworQ29uZmlndXJhdGlvbiBmaWxlczoKKyRjb25maWdfZmlsZXMKKworQ29uZmlndXJhdGlvbiBoZWFkZXJzOgorJGNvbmZpZ19oZWFkZXJzCisKK0NvbmZpZ3VyYXRpb24gY29tbWFuZHM6CiskY29uZmlnX2NvbW1hbmRzCisKK1JlcG9ydCBidWdzIHRvIDxodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1HU3RyZWFtZXI+LiIKKworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2FjX2NzX2NvbmZpZz0iYCRhc19lY2hvICIkYWNfY29uZmlndXJlX2FyZ3MiIHwgc2VkICdzL14gLy87IHMvW1xcIiJcYFwkXS9cXFxcJi9nJ2AiCithY19jc192ZXJzaW9uPSJcXAorR1N0cmVhbWVyIGNvbmZpZy5zdGF0dXMgMC4xMS4xCitjb25maWd1cmVkIGJ5ICQwLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjcsCisgIHdpdGggb3B0aW9ucyBcXCJcJGFjX2NzX2NvbmZpZ1xcIgorCitDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitUaGlzIGNvbmZpZy5zdGF0dXMgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2dpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCisKK2FjX3B3ZD0nJGFjX3B3ZCcKK3NyY2Rpcj0nJHNyY2RpcicKK0lOU1RBTEw9JyRJTlNUQUxMJworTUtESVJfUD0nJE1LRElSX1AnCitBV0s9JyRBV0snCit0ZXN0IC1uICJcJEFXSyIgfHwgQVdLPWF3aworX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyMgVGhlIGRlZmF1bHQgbGlzdHMgYXBwbHkgaWYgdGhlIHVzZXIgZG9lcyBub3Qgc3BlY2lmeSBhbnkgZmlsZS4KK2FjX25lZWRfZGVmYXVsdHM9Ogord2hpbGUgdGVzdCAkIyAhPSAwCitkbworICBjYXNlICQxIGluCisgIC0tKj0/KikKKyAgICBhY19vcHRpb249YGV4cHIgIlgkMSIgOiAnWFwoW149XSpcKT0nYAorICAgIGFjX29wdGFyZz1gZXhwciAiWCQxIiA6ICdYW149XSo9XCguKlwpJ2AKKyAgICBhY19zaGlmdD06CisgICAgOzsKKyAgLS0qPSkKKyAgICBhY19vcHRpb249YGV4cHIgIlgkMSIgOiAnWFwoW149XSpcKT0nYAorICAgIGFjX29wdGFyZz0KKyAgICBhY19zaGlmdD06CisgICAgOzsKKyAgKikKKyAgICBhY19vcHRpb249JDEKKyAgICBhY19vcHRhcmc9JDIKKyAgICBhY19zaGlmdD1zaGlmdAorICAgIDs7CisgIGVzYWMKKworICBjYXNlICRhY19vcHRpb24gaW4KKyAgIyBIYW5kbGluZyBvZiB0aGUgb3B0aW9ucy4KKyAgLXJlY2hlY2sgfCAtLXJlY2hlY2sgfCAtLXJlY2hlYyB8IC0tcmVjaGUgfCAtLXJlY2ggfCAtLXJlYyB8IC0tcmUgfCAtLXIpCisgICAgYWNfY3NfcmVjaGVjaz06IDs7CisgIC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC0tdmVyIHwgLS12ZSB8IC0tdiB8IC1WICkKKyAgICAkYXNfZWNobyAiJGFjX2NzX3ZlcnNpb24iOyBleGl0IDs7CisgIC0tY29uZmlnIHwgLS1jb25maSB8IC0tY29uZiB8IC0tY29uIHwgLS1jbyB8IC0tYyApCisgICAgJGFzX2VjaG8gIiRhY19jc19jb25maWciOyBleGl0IDs7CisgIC0tZGVidWcgfCAtLWRlYnUgfCAtLWRlYiB8IC0tZGUgfCAtLWQgfCAtZCApCisgICAgZGVidWc9OiA7OworICAtLWZpbGUgfCAtLWZpbCB8IC0tZmkgfCAtLWYgKQorICAgICRhY19zaGlmdAorICAgIGNhc2UgJGFjX29wdGFyZyBpbgorICAgICpcJyopIGFjX29wdGFyZz1gJGFzX2VjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgJycpIGFzX2ZuX2Vycm9yICQ/ICJtaXNzaW5nIGZpbGUgYXJndW1lbnQiIDs7CisgICAgZXNhYworICAgIGFzX2ZuX2FwcGVuZCBDT05GSUdfRklMRVMgIiAnJGFjX29wdGFyZyciCisgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7CisgIC0taGVhZGVyIHwgLS1oZWFkZSB8IC0taGVhZCB8IC0taGVhICkKKyAgICAkYWNfc2hpZnQKKyAgICBjYXNlICRhY19vcHRhcmcgaW4KKyAgICAqXCcqKSBhY19vcHRhcmc9YCRhc19lY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgIGVzYWMKKyAgICBhc19mbl9hcHBlbmQgQ09ORklHX0hFQURFUlMgIiAnJGFjX29wdGFyZyciCisgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7CisgIC0taGUgfCAtLWgpCisgICAgIyBDb25mbGljdCBiZXR3ZWVuIC0taGVscCBhbmQgLS1oZWFkZXIKKyAgICBhc19mbl9lcnJvciAkPyAiYW1iaWd1b3VzIG9wdGlvbjogXGAkMScKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIjs7CisgIC0taGVscCB8IC0taGVsIHwgLWggKQorICAgICRhc19lY2hvICIkYWNfY3NfdXNhZ2UiOyBleGl0IDs7CisgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCisgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsIHwgLS1zaSB8IC0tcykKKyAgICBhY19jc19zaWxlbnQ9OiA7OworCisgICMgVGhpcyBpcyBhbiBlcnJvci4KKyAgLSopIGFzX2ZuX2Vycm9yICQ/ICJ1bnJlY29nbml6ZWQgb3B0aW9uOiBcYCQxJworVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDs7CisKKyAgKikgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ190YXJnZXRzICIgJDEiCisgICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2UgOzsKKworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK2FjX2NvbmZpZ3VyZV9leHRyYV9hcmdzPQorCitpZiAkYWNfY3Nfc2lsZW50OyB0aGVuCisgIGV4ZWMgNj4vZGV2L251bGwKKyAgYWNfY29uZmlndXJlX2V4dHJhX2FyZ3M9IiRhY19jb25maWd1cmVfZXh0cmFfYXJncyAtLXNpbGVudCIKK2ZpCisKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitpZiBcJGFjX2NzX3JlY2hlY2s7IHRoZW4KKyAgc2V0IFggJyRTSEVMTCcgJyQwJyAkYWNfY29uZmlndXJlX2FyZ3MgXCRhY19jb25maWd1cmVfZXh0cmFfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbgorICBzaGlmdAorICBcJGFzX2VjaG8gInJ1bm5pbmcgQ09ORklHX1NIRUxMPSRTSEVMTCBcJCoiID4mNgorICBDT05GSUdfU0hFTEw9JyRTSEVMTCcKKyAgZXhwb3J0IENPTkZJR19TSEVMTAorICBleGVjICJcJEAiCitmaQorCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2V4ZWMgNT4+Y29uZmlnLmxvZworeworICBlY2hvCisgIHNlZCAnaDtzLy4vLS9nO3MvXi4uLi8jIyAvO3MvLi4uJC8gIyMvO3A7eDtwO3gnIDw8X0FTQk9YCisjIyBSdW5uaW5nICRhc19tZS4gIyMKK19BU0JPWAorICAkYXNfZWNobyAiJGFjX2xvZyIKK30gPiY1CisKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjCisjIElOSVQtQ09NTUFORFMKKyMKK0FNREVQX1RSVUU9IiRBTURFUF9UUlVFIiBhY19hdXhfZGlyPSIkYWNfYXV4X2RpciIKKworCisjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorIyBpZiBDRFBBVEggaXMgc2V0LgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCitzZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCitkb3VibGVfcXVvdGVfc3Vic3Q9JyRkb3VibGVfcXVvdGVfc3Vic3QnCitkZWxheV92YXJpYWJsZV9zdWJzdD0nJGRlbGF5X3ZhcmlhYmxlX3N1YnN0JworQVM9J2AkRUNITyAiWCRBUyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworRExMVE9PTD0nYCRFQ0hPICJYJERMTFRPT0wiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK09CSkRVTVA9J2AkRUNITyAiWCRPQkpEVU1QIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittYWNyb192ZXJzaW9uPSdgJEVDSE8gIlgkbWFjcm9fdmVyc2lvbiIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbWFjcm9fcmV2aXNpb249J2AkRUNITyAiWCRtYWNyb19yZXZpc2lvbiIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX3NoYXJlZD0nYCRFQ0hPICJYJGVuYWJsZV9zaGFyZWQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9zdGF0aWM9J2AkRUNITyAiWCRlbmFibGVfc3RhdGljIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwaWNfbW9kZT0nYCRFQ0hPICJYJHBpY19tb2RlIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfZmFzdF9pbnN0YWxsPSdgJEVDSE8gIlgkZW5hYmxlX2Zhc3RfaW5zdGFsbCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaG9zdF9hbGlhcz0nYCRFQ0hPICJYJGhvc3RfYWxpYXMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hvc3Q9J2AkRUNITyAiWCRob3N0IiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitob3N0X29zPSdgJEVDSE8gIlgkaG9zdF9vcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYnVpbGRfYWxpYXM9J2AkRUNITyAiWCRidWlsZF9hbGlhcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYnVpbGQ9J2AkRUNITyAiWCRidWlsZCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYnVpbGRfb3M9J2AkRUNITyAiWCRidWlsZF9vcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworU0VEPSdgJEVDSE8gIlgkU0VEIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitYc2VkPSdgJEVDSE8gIlgkWHNlZCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworR1JFUD0nYCRFQ0hPICJYJEdSRVAiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0VHUkVQPSdgJEVDSE8gIlgkRUdSRVAiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0ZHUkVQPSdgJEVDSE8gIlgkRkdSRVAiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0xEPSdgJEVDSE8gIlgkTEQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK05NPSdgJEVDSE8gIlgkTk0iIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0xOX1M9J2AkRUNITyAiWCRMTl9TIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittYXhfY21kX2xlbj0nYCRFQ0hPICJYJG1heF9jbWRfbGVuIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithY19vYmpleHQ9J2AkRUNITyAiWCRhY19vYmpleHQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4ZWV4dD0nYCRFQ0hPICJYJGV4ZWV4dCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfdW5zZXQ9J2AkRUNITyAiWCRsdF91bnNldCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfU1AyTkw9J2AkRUNITyAiWCRsdF9TUDJOTCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfTkwyU1A9J2AkRUNITyAiWCRsdF9OTDJTUCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcmVsb2FkX2ZsYWc9J2AkRUNITyAiWCRyZWxvYWRfZmxhZyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcmVsb2FkX2NtZHM9J2AkRUNITyAiWCRyZWxvYWRfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiWCRkZXBsaWJzX2NoZWNrX21ldGhvZCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmlsZV9tYWdpY19jbWQ9J2AkRUNITyAiWCRmaWxlX21hZ2ljX2NtZCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQVI9J2AkRUNITyAiWCRBUiIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQVJfRkxBR1M9J2AkRUNITyAiWCRBUl9GTEFHUyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworU1RSSVA9J2AkRUNITyAiWCRTVFJJUCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworUkFOTElCPSdgJEVDSE8gIlgkUkFOTElCIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICJYJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSdgJEVDSE8gIlgkb2xkX3Bvc3R1bmluc3RhbGxfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX2FyY2hpdmVfY21kcz0nYCRFQ0hPICJYJG9sZF9hcmNoaXZlX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0NDPSdgJEVDSE8gIlgkQ0MiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0NGTEFHUz0nYCRFQ0hPICJYJENGTEFHUyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29tcGlsZXI9J2AkRUNITyAiWCRjb21waWxlciIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworR0NDPSdgJEVDSE8gIlgkR0NDIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSdgJEVDSE8gIlgkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiWCRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiWCRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0nYCRFQ0hPICJYJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29iamRpcj0nYCRFQ0hPICJYJG9iamRpciIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworU0hFTEw9J2AkRUNITyAiWCRTSEVMTCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworRUNITz0nYCRFQ0hPICJYJEVDSE8iIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK01BR0lDX0NNRD0nYCRFQ0hPICJYJE1BR0lDX0NNRCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9J2AkRUNITyAiWCRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICJYJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIlgkbHRfcHJvZ19jb21waWxlcl9waWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljPSdgJEVDSE8gIlgkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3Byb2dfY29tcGlsZXJfY19vPSdgJEVDSE8gIlgkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25lZWRfbG9ja3M9J2AkRUNITyAiWCRuZWVkX2xvY2tzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitEU1lNVVRJTD0nYCRFQ0hPICJYJERTWU1VVElMIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitOTUVESVQ9J2AkRUNITyAiWCROTUVESVQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0xJUE89J2AkRUNITyAiWCRMSVBPIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitPVE9PTD0nYCRFQ0hPICJYJE9UT09MIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitPVE9PTDY0PSdgJEVDSE8gIlgkT1RPT0w2NCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGliZXh0PSdgJEVDSE8gIlgkbGliZXh0IiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzaHJleHRfY21kcz0nYCRFQ0hPICJYJHNocmV4dF9jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleHRyYWN0X2V4cHN5bXNfY21kcz0nYCRFQ0hPICJYJGV4dHJhY3RfZXhwc3ltc19jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2NtZHNfbmVlZF9sYz0nYCRFQ0hPICJYJGFyY2hpdmVfY21kc19uZWVkX2xjIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPSdgJEVDSE8gIlgkZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSdgJEVDSE8gIlgkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nYCRFQ0hPICJYJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcl9uZWVkc19vYmplY3Q9J2AkRUNITyAiWCRjb21waWxlcl9uZWVkc19vYmplY3QiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J2AkRUNITyAiWCRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0nYCRFQ0hPICJYJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2NtZHM9J2AkRUNITyAiWCRhcmNoaXZlX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVfZXhwc3ltX2NtZHM9J2AkRUNITyAiWCRhcmNoaXZlX2V4cHN5bV9jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittb2R1bGVfY21kcz0nYCRFQ0hPICJYJG1vZHVsZV9jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittb2R1bGVfZXhwc3ltX2NtZHM9J2AkRUNITyAiWCRtb2R1bGVfZXhwc3ltX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3dpdGhfZ251X2xkPSdgJEVDSE8gIlgkd2l0aF9nbnVfbGQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FsbG93X3VuZGVmaW5lZF9mbGFnPSdgJEVDSE8gIlgkYWxsb3dfdW5kZWZpbmVkX2ZsYWciIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25vX3VuZGVmaW5lZF9mbGFnPSdgJEVDSE8gIlgkbm9fdW5kZWZpbmVkX2ZsYWciIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2AkRUNITyAiWCRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSdgJEVDSE8gIlgkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nYCRFQ0hPICJYJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2RpcmVjdD0nYCRFQ0hPICJYJGhhcmRjb2RlX2RpcmVjdCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPSdgJEVDSE8gIlgkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9taW51c19MPSdgJEVDSE8gIlgkaGFyZGNvZGVfbWludXNfTCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICJYJGhhcmRjb2RlX3NobGlicGF0aF92YXIiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICJYJGhhcmRjb2RlX2F1dG9tYXRpYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaW5oZXJpdF9ycGF0aD0nYCRFQ0hPICJYJGluaGVyaXRfcnBhdGgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xpbmtfYWxsX2RlcGxpYnM9J2AkRUNITyAiWCRsaW5rX2FsbF9kZXBsaWJzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaXhfc3JjZmlsZV9wYXRoPSdgJEVDSE8gIlgkZml4X3NyY2ZpbGVfcGF0aCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSdgJEVDSE8gIlgkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleHBvcnRfc3ltYm9sc19jbWRzPSdgJEVDSE8gIlgkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXhjbHVkZV9leHBzeW1zPSdgJEVDSE8gIlgkZXhjbHVkZV9leHBzeW1zIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitpbmNsdWRlX2V4cHN5bXM9J2AkRUNITyAiWCRpbmNsdWRlX2V4cHN5bXMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ByZWxpbmtfY21kcz0nYCRFQ0hPICJYJHByZWxpbmtfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiWCRmaWxlX2xpc3Rfc3BlYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9J2AkRUNITyAiWCR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIlgkbmVlZF9saWJfcHJlZml4IiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCituZWVkX3ZlcnNpb249J2AkRUNITyAiWCRuZWVkX3ZlcnNpb24iIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ZlcnNpb25fdHlwZT0nYCRFQ0hPICJYJHZlcnNpb25fdHlwZSIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcnVucGF0aF92YXI9J2AkRUNITyAiWCRydW5wYXRoX3ZhciIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICJYJHNobGlicGF0aF92YXIiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0nYCRFQ0hPICJYJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGlibmFtZV9zcGVjPSdgJEVDSE8gIlgkbGlibmFtZV9zcGVjIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsaWJyYXJ5X25hbWVzX3NwZWM9J2AkRUNITyAiWCRsaWJyYXJ5X25hbWVzX3NwZWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NvbmFtZV9zcGVjPSdgJEVDSE8gIlgkc29uYW1lX3NwZWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiWCRwb3N0aW5zdGFsbF9jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwb3N0dW5pbnN0YWxsX2NtZHM9J2AkRUNITyAiWCRwb3N0dW5pbnN0YWxsX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbmlzaF9jbWRzPSdgJEVDSE8gIlgkZmluaXNoX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbmlzaF9ldmFsPSdgJEVDSE8gIlgkZmluaXNoX2V2YWwiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2ludG9fbGlicz0nYCRFQ0hPICJYJGhhcmRjb2RlX2ludG9fbGlicyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSdgJEVDSE8gIlgkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nYCRFQ0hPICJYJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9hY3Rpb249J2AkRUNITyAiWCRoYXJkY29kZV9hY3Rpb24iIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9kbG9wZW49J2AkRUNITyAiWCRlbmFibGVfZGxvcGVuIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfZGxvcGVuX3NlbGY9J2AkRUNITyAiWCRlbmFibGVfZGxvcGVuX3NlbGYiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9J2AkRUNITyAiWCRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfc3RyaXBsaWI9J2AkRUNITyAiWCRvbGRfc3RyaXBsaWIiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3N0cmlwbGliPSdgJEVDSE8gIlgkc3RyaXBsaWIiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlycz0nYCRFQ0hPICJYJGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcHJlZGVwX29iamVjdHM9J2AkRUNITyAiWCRwcmVkZXBfb2JqZWN0cyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcG9zdGRlcF9vYmplY3RzPSdgJEVDSE8gIlgkcG9zdGRlcF9vYmplY3RzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwcmVkZXBzPSdgJEVDSE8gIlgkcHJlZGVwcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcG9zdGRlcHM9J2AkRUNITyAiWCRwb3N0ZGVwcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSdgJEVDSE8gIlgkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitMRF9DWFg9J2AkRUNITyAiWCRMRF9DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9hcmNoaXZlX2NtZHNfQ1hYPSdgJEVDSE8gIlgkb2xkX2FyY2hpdmVfY21kc19DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX0NYWD0nYCRFQ0hPICJYJGNvbXBpbGVyX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworR0NDX0NYWD0nYCRFQ0hPICJYJEdDQ19DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWD0nYCRFQ0hPICJYJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl93bF9DWFg9J2AkRUNITyAiWCRsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSdgJEVDSE8gIlgkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9J2AkRUNITyAiWCRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD0nYCRFQ0hPICJYJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPSdgJEVDSE8gIlgkYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD0nYCRFQ0hPICJYJGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSdgJEVDSE8gIlgkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJword2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSdgJEVDSE8gIlgkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcl9uZWVkc19vYmplY3RfQ1hYPSdgJEVDSE8gIlgkY29tcGlsZXJfbmVlZHNfb2JqZWN0X0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19DWFg9J2AkRUNITyAiWCRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfQ1hYPSdgJEVDSE8gIlgkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2NtZHNfQ1hYPSdgJEVDSE8gIlgkYXJjaGl2ZV9jbWRzX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2AkRUNITyAiWCRhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbW9kdWxlX2NtZHNfQ1hYPSdgJEVDSE8gIlgkbW9kdWxlX2NtZHNfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittb2R1bGVfZXhwc3ltX2NtZHNfQ1hYPSdgJEVDSE8gIlgkbW9kdWxlX2V4cHN5bV9jbWRzX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJword2l0aF9nbnVfbGRfQ1hYPSdgJEVDSE8gIlgkd2l0aF9nbnVfbGRfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithbGxvd191bmRlZmluZWRfZmxhZ19DWFg9J2AkRUNITyAiWCRhbGxvd191bmRlZmluZWRfZmxhZ19DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25vX3VuZGVmaW5lZF9mbGFnX0NYWD0nYCRFQ0hPICJYJG5vX3VuZGVmaW5lZF9mbGFnX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9J2AkRUNITyAiWCRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9DWFg9J2AkRUNITyAiWCRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9J2AkRUNITyAiWCRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfZGlyZWN0X0NYWD0nYCRFQ0hPICJYJGhhcmRjb2RlX2RpcmVjdF9DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV9DWFg9J2AkRUNITyAiWCRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9taW51c19MX0NYWD0nYCRFQ0hPICJYJGhhcmRjb2RlX21pbnVzX0xfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD0nYCRFQ0hPICJYJGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9hdXRvbWF0aWNfQ1hYPSdgJEVDSE8gIlgkaGFyZGNvZGVfYXV0b21hdGljX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaW5oZXJpdF9ycGF0aF9DWFg9J2AkRUNITyAiWCRpbmhlcml0X3JwYXRoX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGlua19hbGxfZGVwbGlic19DWFg9J2AkRUNITyAiWCRsaW5rX2FsbF9kZXBsaWJzX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZml4X3NyY2ZpbGVfcGF0aF9DWFg9J2AkRUNITyAiWCRmaXhfc3JjZmlsZV9wYXRoX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD0nYCRFQ0hPICJYJGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSdgJEVDSE8gIlgkZXhwb3J0X3N5bWJvbHNfY21kc19DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4Y2x1ZGVfZXhwc3ltc19DWFg9J2AkRUNITyAiWCRleGNsdWRlX2V4cHN5bXNfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitpbmNsdWRlX2V4cHN5bXNfQ1hYPSdgJEVDSE8gIlgkaW5jbHVkZV9leHBzeW1zX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcHJlbGlua19jbWRzX0NYWD0nYCRFQ0hPICJYJHByZWxpbmtfY21kc19DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbGVfbGlzdF9zcGVjX0NYWD0nYCRFQ0hPICJYJGZpbGVfbGlzdF9zcGVjX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfYWN0aW9uX0NYWD0nYCRFQ0hPICJYJGhhcmRjb2RlX2FjdGlvbl9DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFg9J2AkRUNITyAiWCRjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwcmVkZXBfb2JqZWN0c19DWFg9J2AkRUNITyAiWCRwcmVkZXBfb2JqZWN0c19DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RkZXBfb2JqZWN0c19DWFg9J2AkRUNITyAiWCRwb3N0ZGVwX29iamVjdHNfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwcmVkZXBzX0NYWD0nYCRFQ0hPICJYJHByZWRlcHNfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwb3N0ZGVwc19DWFg9J2AkRUNITyAiWCRwb3N0ZGVwc19DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9J2AkRUNITyAiWCRjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisKK0xUQ0M9JyRMVENDJworTFRDRkxBR1M9JyRMVENGTEFHUycKK2NvbXBpbGVyPSckY29tcGlsZXJfREVGQVVMVCcKKworIyBRdW90ZSBldmFsZWQgc3RyaW5ncy4KK2ZvciB2YXIgaW4gU0VEIFwKK0dSRVAgXAorRUdSRVAgXAorRkdSRVAgXAorTEQgXAorTk0gXAorTE5fUyBcCitsdF9TUDJOTCBcCitsdF9OTDJTUCBcCityZWxvYWRfZmxhZyBcCitkZXBsaWJzX2NoZWNrX21ldGhvZCBcCitmaWxlX21hZ2ljX2NtZCBcCitBUiBcCitBUl9GTEFHUyBcCitTVFJJUCBcCitSQU5MSUIgXAorQ0MgXAorQ0ZMQUdTIFwKK2NvbXBpbGVyIFwKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCBcCitTSEVMTCBcCitFQ0hPIFwKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKK2x0X3Byb2dfY29tcGlsZXJfd2wgXAorbHRfcHJvZ19jb21waWxlcl9waWMgXAorbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAorbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAorbmVlZF9sb2NrcyBcCitEU1lNVVRJTCBcCitOTUVESVQgXAorTElQTyBcCitPVE9PTCBcCitPVE9PTDY0IFwKK3NocmV4dF9jbWRzIFwKK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyBcCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyBcCitjb21waWxlcl9uZWVkc19vYmplY3QgXAord2l0aF9nbnVfbGQgXAorYWxsb3dfdW5kZWZpbmVkX2ZsYWcgXAorbm9fdW5kZWZpbmVkX2ZsYWcgXAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIFwKK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAorZml4X3NyY2ZpbGVfcGF0aCBcCitleGNsdWRlX2V4cHN5bXMgXAoraW5jbHVkZV9leHBzeW1zIFwKK2ZpbGVfbGlzdF9zcGVjIFwKK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIFwKK2xpYm5hbWVfc3BlYyBcCitsaWJyYXJ5X25hbWVzX3NwZWMgXAorc29uYW1lX3NwZWMgXAorZmluaXNoX2V2YWwgXAorb2xkX3N0cmlwbGliIFwKK3N0cmlwbGliIFwKK2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlycyBcCitwcmVkZXBfb2JqZWN0cyBcCitwb3N0ZGVwX29iamVjdHMgXAorcHJlZGVwcyBcCitwb3N0ZGVwcyBcCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGggXAorTERfQ1hYIFwKK2NvbXBpbGVyX0NYWCBcCitsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFggXAorbHRfcHJvZ19jb21waWxlcl93bF9DWFggXAorbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIFwKK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWCBcCitsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFggXAorZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWCBcCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFggXAorY29tcGlsZXJfbmVlZHNfb2JqZWN0X0NYWCBcCit3aXRoX2dudV9sZF9DWFggXAorYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYIFwKK25vX3VuZGVmaW5lZF9mbGFnX0NYWCBcCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWCBcCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0NYWCBcCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWCBcCitmaXhfc3JjZmlsZV9wYXRoX0NYWCBcCitleGNsdWRlX2V4cHN5bXNfQ1hYIFwKK2luY2x1ZGVfZXhwc3ltc19DWFggXAorZmlsZV9saXN0X3NwZWNfQ1hYIFwKK2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFggXAorcHJlZGVwX29iamVjdHNfQ1hYIFwKK3Bvc3RkZXBfb2JqZWN0c19DWFggXAorcHJlZGVwc19DWFggXAorcG9zdGRlcHNfQ1hYIFwKK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg7IGRvCisgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyAiWFxcXFxcJFwkdmFyIlxgIGluCisgICAgKltcXFxcXFxcYFxcIlxcXCRdKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiWFxcXCRcJHZhclxcIiB8IFxcXCRYc2VkIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgorICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKKyMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KK2ZvciB2YXIgaW4gcmVsb2FkX2NtZHMgXAorb2xkX3Bvc3RpbnN0YWxsX2NtZHMgXAorb2xkX3Bvc3R1bmluc3RhbGxfY21kcyBcCitvbGRfYXJjaGl2ZV9jbWRzIFwKK2V4dHJhY3RfZXhwc3ltc19jbWRzIFwKK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMgXAorb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMgXAorYXJjaGl2ZV9jbWRzIFwKK2FyY2hpdmVfZXhwc3ltX2NtZHMgXAorbW9kdWxlX2NtZHMgXAorbW9kdWxlX2V4cHN5bV9jbWRzIFwKK2V4cG9ydF9zeW1ib2xzX2NtZHMgXAorcHJlbGlua19jbWRzIFwKK3Bvc3RpbnN0YWxsX2NtZHMgXAorcG9zdHVuaW5zdGFsbF9jbWRzIFwKK2ZpbmlzaF9jbWRzIFwKK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyBcCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyBcCitvbGRfYXJjaGl2ZV9jbWRzX0NYWCBcCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWCBcCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19DWFggXAorYXJjaGl2ZV9jbWRzX0NYWCBcCithcmNoaXZlX2V4cHN5bV9jbWRzX0NYWCBcCittb2R1bGVfY21kc19DWFggXAorbW9kdWxlX2V4cHN5bV9jbWRzX0NYWCBcCitleHBvcnRfc3ltYm9sc19jbWRzX0NYWCBcCitwcmVsaW5rX2NtZHNfQ1hYOyBkbworICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gIlhcXFxcXCRcJHZhciJcYCBpbgorICAgICpbXFxcXFxcXGBcXCJcXFwkXSopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlhcXFwkXCR2YXJcXCIgfCBcXFwkWHNlZCAtZSBcXCJcXFwkZG91YmxlX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCisjIEZpeC11cCBmYWxsYmFjayBlY2hvIGlmIGl0IHdhcyBtYW5nbGVkIGJ5IHRoZSBhYm92ZSBxdW90aW5nIHJ1bGVzLgorY2FzZSBcJGx0X0VDSE8gaW4KKyonXFxcJDAgLS1mYWxsYmFjay1lY2hvIicpICBsdF9FQ0hPPVxgXCRFQ0hPICJYXCRsdF9FQ0hPIiB8IFwkWHNlZCAtZSAncy9cXFxcXFxcXFxcXFxcXFwkMCAtLWZhbGxiYWNrLWVjaG8iXCQvXCQwIC0tZmFsbGJhY2stZWNobyIvJ1xgCisgIDs7Citlc2FjCisKK2FjX2F1eF9kaXI9JyRhY19hdXhfZGlyJworeHNpX3NoZWxsPSckeHNpX3NoZWxsJworbHRfc2hlbGxfYXBwZW5kPSckbHRfc2hlbGxfYXBwZW5kJworCisjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyCisjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcyBJTklULgoraWYgdGVzdCAtbiAiXCR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZmkKKworCisgICAgUEFDS0FHRT0nJFBBQ0tBR0UnCisgICAgVkVSU0lPTj0nJFZFUlNJT04nCisgICAgVElNRVNUQU1QPSckVElNRVNUQU1QJworICAgIFJNPSckUk0nCisgICAgb2ZpbGU9JyRvZmlsZScKKworCisKKworCisjIENhcHR1cmUgdGhlIHZhbHVlIG9mIG9ic29sZXRlIEFMTF9MSU5HVUFTIGJlY2F1c2Ugd2UgbmVlZCBpdCB0byBjb21wdXRlCisgICAgIyBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklMRVMsIEdNT0ZJTEVTLCBDQVRBTE9HUy4gQnV0IGhpZGUgaXQKKyAgICAjIGZyb20gYXV0b21ha2UgPCAxLjUuCisgICAgZXZhbCAnT0JTT0xFVEVfQUxMX0xJTkdVQVMnJz0iJEFMTF9MSU5HVUFTIicKKyAgICAjIENhcHR1cmUgdGhlIHZhbHVlIG9mIExJTkdVQVMgYmVjYXVzZSB3ZSBuZWVkIGl0IHRvIGNvbXB1dGUgQ0FUQUxPR1MuCisgICAgTElOR1VBUz0iJHtMSU5HVUFTLSVVTlNFVCV9IgorCisjIHZhcmlhYmxlcyBmb3IgY3JlYXRlIHN0ZGludC5oIHJlcGxhY2VtZW50CitQQUNLQUdFPSIkUEFDS0FHRSIKK1ZFUlNJT049IiRWRVJTSU9OIgorYWNfc3RkaW50X2g9IiRhY19zdGRpbnRfaCIKK19hY19zdGRpbnRfaD1gJGFzX2VjaG8gIl8kUEFDS0FHRS0kYWNfc3RkaW50X2giIHwgJGFzX3RyX2NwcGAKK2FjX2N2X3N0ZGludF9tZXNzYWdlPSIkYWNfY3Zfc3RkaW50X21lc3NhZ2UiCithY19jdl9oZWFkZXJfc3RkaW50X3Q9IiRhY19jdl9oZWFkZXJfc3RkaW50X3QiCithY19jdl9oZWFkZXJfc3RkaW50X3g9IiRhY19jdl9oZWFkZXJfc3RkaW50X3giCithY19jdl9oZWFkZXJfc3RkaW50X289IiRhY19jdl9oZWFkZXJfc3RkaW50X28iCithY19jdl9oZWFkZXJfc3RkaW50X3U9IiRhY19jdl9oZWFkZXJfc3RkaW50X3UiCithY19jdl90eXBlX3VpbnQ2NF90PSIkYWNfY3ZfdHlwZV91aW50NjRfdCIKK2FjX2N2X3R5cGVfdV9pbnQ2NF90PSIkYWNfY3ZfdHlwZV91X2ludDY0X3QiCithY19jdl9jaGFyX2RhdGFfbW9kZWw9IiRhY19jdl9jaGFyX2RhdGFfbW9kZWwiCithY19jdl9sb25nX2RhdGFfbW9kZWw9IiRhY19jdl9sb25nX2RhdGFfbW9kZWwiCithY19jdl90eXBlX2ludF9sZWFzdDMyX3Q9IiRhY19jdl90eXBlX2ludF9sZWFzdDMyX3QiCithY19jdl90eXBlX2ludF9mYXN0MzJfdD0iJGFjX2N2X3R5cGVfaW50X2Zhc3QzMl90IgorYWNfY3ZfdHlwZV9pbnRtYXhfdD0iJGFjX2N2X3R5cGVfaW50bWF4X3QiCisKKworX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKworIyBIYW5kbGluZyBvZiBhcmd1bWVudHMuCitmb3IgYWNfY29uZmlnX3RhcmdldCBpbiAkYWNfY29uZmlnX3RhcmdldHMKK2RvCisgIGNhc2UgJGFjX2NvbmZpZ190YXJnZXQgaW4KKyAgICAiY29uZmlnLmgiKSBDT05GSUdfSEVBREVSUz0iJENPTkZJR19IRUFERVJTIGNvbmZpZy5oIiA7OworICAgICJkZXBmaWxlcyIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBkZXBmaWxlcyIgOzsKKyAgICAibGlidG9vbCIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBsaWJ0b29sIiA7OworICAgICJwby1kaXJlY3RvcmllcyIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBwby1kaXJlY3RvcmllcyIgOzsKKyAgICAiJGFjX3N0ZGludF9oIikgQ09ORklHX0NPTU1BTkRTPSIkQ09ORklHX0NPTU1BTkRTICRhY19zdGRpbnRfaCIgOzsKKyAgICAiTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWFrZWZpbGUiIDs7CisgICAgImdzdC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBnc3QvTWFrZWZpbGUiIDs7CisgICAgImdzdC9nc3Rjb25maWcuaCIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBnc3QvZ3N0Y29uZmlnLmgiIDs7CisgICAgImdzdC9nc3R2ZXJzaW9uLmgiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZ3N0L2dzdHZlcnNpb24uaCIgOzsKKyAgICAiZ3N0L3BhcnNlL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGdzdC9wYXJzZS9NYWtlZmlsZSIgOzsKKyAgICAibGlicy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJzL01ha2VmaWxlIiA7OworICAgICJsaWJzL2dzdC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJzL2dzdC9NYWtlZmlsZSIgOzsKKyAgICAibGlicy9nc3QvYmFzZS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJzL2dzdC9iYXNlL01ha2VmaWxlIiA7OworICAgICJsaWJzL2dzdC9jaGVjay9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZSIgOzsKKyAgICAibGlicy9nc3QvY2hlY2svbGliY2hlY2svTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbGlicy9nc3QvY2hlY2svbGliY2hlY2svTWFrZWZpbGUiIDs7CisgICAgImxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrLmgiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2suaCIgOzsKKyAgICAibGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlIiA7OworICAgICJsaWJzL2dzdC9kYXRhcHJvdG9jb2wvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbGlicy9nc3QvZGF0YXByb3RvY29sL01ha2VmaWxlIiA7OworICAgICJsaWJzL2dzdC9oZWxwZXJzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxpYnMvZ3N0L2hlbHBlcnMvTWFrZWZpbGUiIDs7CisgICAgImxpYnMvZ3N0L25ldC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJzL2dzdC9uZXQvTWFrZWZpbGUiIDs7CisgICAgInBsdWdpbnMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcGx1Z2lucy9NYWtlZmlsZSIgOzsKKyAgICAicGx1Z2lucy9pbmRleGVycy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBwbHVnaW5zL2luZGV4ZXJzL01ha2VmaWxlIiA7OworICAgICJwbHVnaW5zL2VsZW1lbnRzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHBsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUiIDs7CisgICAgInBvL01ha2VmaWxlLmluIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHBvL01ha2VmaWxlLmluIiA7OworICAgICJ0ZXN0cy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0cy9NYWtlZmlsZSIgOzsKKyAgICAidGVzdHMvYmVuY2htYXJrcy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0cy9iZW5jaG1hcmtzL01ha2VmaWxlIiA7OworICAgICJ0ZXN0cy9jaGVjay9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0cy9jaGVjay9NYWtlZmlsZSIgOzsKKyAgICAidGVzdHMvbWlzYy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0cy9taXNjL01ha2VmaWxlIiA7OworICAgICJ0ZXN0cy9leGFtcGxlcy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0cy9leGFtcGxlcy9NYWtlZmlsZSIgOzsKKyAgICAidGVzdHMvZXhhbXBsZXMvYWRhcHRlci9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0cy9leGFtcGxlcy9hZGFwdGVyL01ha2VmaWxlIiA7OworICAgICJ0ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvTWFrZWZpbGUiIDs7CisgICAgInRlc3RzL2V4YW1wbGVzL3N0ZXBwaW5nL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3RzL2V4YW1wbGVzL3N0ZXBwaW5nL01ha2VmaWxlIiA7OworICAgICJ0ZXN0cy9leGFtcGxlcy9oZWxsb3dvcmxkL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3RzL2V4YW1wbGVzL2hlbGxvd29ybGQvTWFrZWZpbGUiIDs7CisgICAgInRlc3RzL2V4YW1wbGVzL2xhdW5jaC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0cy9leGFtcGxlcy9sYXVuY2gvTWFrZWZpbGUiIDs7CisgICAgInRlc3RzL2V4YW1wbGVzL21hbnVhbC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUiIDs7CisgICAgInRlc3RzL2V4YW1wbGVzL21ldGFkYXRhL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3RzL2V4YW1wbGVzL21ldGFkYXRhL01ha2VmaWxlIiA7OworICAgICJ0ZXN0cy9leGFtcGxlcy9xdWV1ZS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0cy9leGFtcGxlcy9xdWV1ZS9NYWtlZmlsZSIgOzsKKyAgICAidGVzdHMvZXhhbXBsZXMvc3RyZWFtcy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0cy9leGFtcGxlcy9zdHJlYW1zL01ha2VmaWxlIiA7OworICAgICJ0ZXN0cy9leGFtcGxlcy90eXBlZmluZC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0cy9leGFtcGxlcy90eXBlZmluZC9NYWtlZmlsZSIgOzsKKyAgICAidG9vbHMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdG9vbHMvTWFrZWZpbGUiIDs7CisgICAgImNvbW1vbi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBjb21tb24vTWFrZWZpbGUiIDs7CisgICAgImNvbW1vbi9tNC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBjb21tb24vbTQvTWFrZWZpbGUiIDs7CisgICAgImRvY3MvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZG9jcy9NYWtlZmlsZSIgOzsKKyAgICAiZG9jcy9kZXNpZ24vTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZG9jcy9kZXNpZ24vTWFrZWZpbGUiIDs7CisgICAgImRvY3MvZmFxL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRvY3MvZmFxL01ha2VmaWxlIiA7OworICAgICJkb2NzL2dzdC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBkb2NzL2dzdC9NYWtlZmlsZSIgOzsKKyAgICAiZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlcyIgOzsKKyAgICAiZG9jcy9saWJzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRvY3MvbGlicy9NYWtlZmlsZSIgOzsKKyAgICAiZG9jcy9wbHVnaW5zL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRvY3MvcGx1Z2lucy9NYWtlZmlsZSIgOzsKKyAgICAiZG9jcy9tYW51YWwvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZG9jcy9tYW51YWwvTWFrZWZpbGUiIDs7CisgICAgImRvY3MvcHdnL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRvY3MvcHdnL01ha2VmaWxlIiA7OworICAgICJkb2NzL3NsaWRlcy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBkb2NzL3NsaWRlcy9NYWtlZmlsZSIgOzsKKyAgICAiZG9jcy94c2wvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZG9jcy94c2wvTWFrZWZpbGUiIDs7CisgICAgImRvY3MvdmVyc2lvbi5lbnRpdGllcyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBkb2NzL3ZlcnNpb24uZW50aXRpZXMiIDs7CisgICAgIm00L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIG00L01ha2VmaWxlIiA7OworICAgICJwa2djb25maWcvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcGtnY29uZmlnL01ha2VmaWxlIiA7OworICAgICJzdGFtcC5oIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHN0YW1wLmgiIDs7CisgICAgInBrZ2NvbmZpZy9nc3RyZWFtZXIucGMiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcGtnY29uZmlnL2dzdHJlYW1lci5wYyIgOzsKKyAgICAicGtnY29uZmlnL2dzdHJlYW1lci11bmluc3RhbGxlZC5wYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBwa2djb25maWcvZ3N0cmVhbWVyLXVuaW5zdGFsbGVkLnBjIiA7OworICAgICJwa2djb25maWcvZ3N0cmVhbWVyLWJhc2UucGMiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcGtnY29uZmlnL2dzdHJlYW1lci1iYXNlLnBjIiA7OworICAgICJwa2djb25maWcvZ3N0cmVhbWVyLWJhc2UtdW5pbnN0YWxsZWQucGMiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcGtnY29uZmlnL2dzdHJlYW1lci1iYXNlLXVuaW5zdGFsbGVkLnBjIiA7OworICAgICJwa2djb25maWcvZ3N0cmVhbWVyLWNoZWNrLnBjIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHBrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2sucGMiIDs7CisgICAgInBrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2stdW5pbnN0YWxsZWQucGMiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay11bmluc3RhbGxlZC5wYyIgOzsKKyAgICAicGtnY29uZmlnL2dzdHJlYW1lci1jb250cm9sbGVyLnBjIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHBrZ2NvbmZpZy9nc3RyZWFtZXItY29udHJvbGxlci5wYyIgOzsKKyAgICAicGtnY29uZmlnL2dzdHJlYW1lci1jb250cm9sbGVyLXVuaW5zdGFsbGVkLnBjIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHBrZ2NvbmZpZy9nc3RyZWFtZXItY29udHJvbGxlci11bmluc3RhbGxlZC5wYyIgOzsKKyAgICAicGtnY29uZmlnL2dzdHJlYW1lci1kYXRhcHJvdG9jb2wucGMiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcGtnY29uZmlnL2dzdHJlYW1lci1kYXRhcHJvdG9jb2wucGMiIDs7CisgICAgInBrZ2NvbmZpZy9nc3RyZWFtZXItZGF0YXByb3RvY29sLXVuaW5zdGFsbGVkLnBjIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHBrZ2NvbmZpZy9nc3RyZWFtZXItZGF0YXByb3RvY29sLXVuaW5zdGFsbGVkLnBjIiA7OworICAgICJwa2djb25maWcvZ3N0cmVhbWVyLW5ldC5wYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBwa2djb25maWcvZ3N0cmVhbWVyLW5ldC5wYyIgOzsKKyAgICAicGtnY29uZmlnL2dzdHJlYW1lci1uZXQtdW5pbnN0YWxsZWQucGMiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcGtnY29uZmlnL2dzdHJlYW1lci1uZXQtdW5pbnN0YWxsZWQucGMiIDs7CisgICAgImdzdC1lbGVtZW50LWNoZWNrLm00IikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGdzdC1lbGVtZW50LWNoZWNrLm00IiA7OworICAgICJnc3RyZWFtZXIuc3BlYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBnc3RyZWFtZXIuc3BlYyIgOzsKKworICAqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBhcmd1bWVudDogXGAkYWNfY29uZmlnX3RhcmdldCciICIkTElORU5PIiA1IDs7CisgIGVzYWMKK2RvbmUKKworCisjIElmIHRoZSB1c2VyIGRpZCBub3QgdXNlIHRoZSBhcmd1bWVudHMgdG8gc3BlY2lmeSB0aGUgaXRlbXMgdG8gaW5zdGFudGlhdGUsCisjIHRoZW4gdGhlIGVudnZhciBpbnRlcmZhY2UgaXMgdXNlZC4gIFNldCBvbmx5IHRob3NlIHRoYXQgYXJlIG5vdC4KKyMgV2UgdXNlIHRoZSBsb25nIGZvcm0gZm9yIHRoZSBkZWZhdWx0IGFzc2lnbm1lbnQgYmVjYXVzZSBvZiBhbiBleHRyZW1lbHkKKyMgYml6YXJyZSBidWcgb24gU3VuT1MgNC4xLjMuCitpZiAkYWNfbmVlZF9kZWZhdWx0czsgdGhlbgorICB0ZXN0ICIke0NPTkZJR19GSUxFUytzZXR9IiA9IHNldCB8fCBDT05GSUdfRklMRVM9JGNvbmZpZ19maWxlcworICB0ZXN0ICIke0NPTkZJR19IRUFERVJTK3NldH0iID0gc2V0IHx8IENPTkZJR19IRUFERVJTPSRjb25maWdfaGVhZGVycworICB0ZXN0ICIke0NPTkZJR19DT01NQU5EUytzZXR9IiA9IHNldCB8fCBDT05GSUdfQ09NTUFORFM9JGNvbmZpZ19jb21tYW5kcworZmkKKworIyBIYXZlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmb3IgY29udmVuaWVuY2UuICBNYWtlIGl0IGluIHRoZSBidWlsZCB0cmVlCisjIHNpbXBseSBiZWNhdXNlIHRoZXJlIGlzIG5vIHJlYXNvbiBhZ2FpbnN0IGhhdmluZyBpdCBoZXJlLCBhbmQgaW4gYWRkaXRpb24sCisjIGNyZWF0aW5nIGFuZCBtb3ZpbmcgZmlsZXMgZnJvbSAvdG1wIGNhbiBzb21ldGltZXMgY2F1c2UgcHJvYmxlbXMuCisjIEhvb2sgZm9yIGl0cyByZW1vdmFsIHVubGVzcyBkZWJ1Z2dpbmcuCisjIE5vdGUgdGhhdCB0aGVyZSBpcyBhIHNtYWxsIHdpbmRvdyBpbiB3aGljaCB0aGUgZGlyZWN0b3J5IHdpbGwgbm90IGJlIGNsZWFuZWQ6CisjIGFmdGVyIGl0cyBjcmVhdGlvbiBidXQgYmVmb3JlIGl0cyBuYW1lIGhhcyBiZWVuIGFzc2lnbmVkIHRvIGAkdG1wJy4KKyRkZWJ1ZyB8fAoreworICB0bXA9CisgIHRyYXAgJ2V4aXRfc3RhdHVzPSQ/CisgIHsgdGVzdCAteiAiJHRtcCIgfHwgdGVzdCAhIC1kICIkdG1wIiB8fCBybSAtZnIgIiR0bXAiOyB9ICYmIGV4aXQgJGV4aXRfc3RhdHVzCisnIDAKKyAgdHJhcCAnYXNfZm5fZXhpdCAxJyAxIDIgMTMgMTUKK30KKyMgQ3JlYXRlIGEgKHNlY3VyZSkgdG1wIGRpcmVjdG9yeSBmb3IgdG1wIGZpbGVzLgorCit7CisgIHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIi4vY29uZlhYWFhYWCIpIDI+L2Rldi9udWxsYCAmJgorICB0ZXN0IC1uICIkdG1wIiAmJiB0ZXN0IC1kICIkdG1wIgorfSAgfHwKK3sKKyAgdG1wPS4vY29uZiQkLSRSQU5ET00KKyAgKHVtYXNrIDA3NyAmJiBta2RpciAiJHRtcCIpCit9IHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAuIiAiJExJTkVOTyIgNQorCisjIFNldCB1cCB0aGUgc2NyaXB0cyBmb3IgQ09ORklHX0ZJTEVTIHNlY3Rpb24uCisjIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0ZJTEVTLgorIyBUaGlzIGhhcHBlbnMgZm9yIGluc3RhbmNlIHdpdGggYC4vY29uZmlnLnN0YXR1cyBjb25maWcuaCcuCitpZiB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIjsgdGhlbgorCisKK2FjX2NyPWBlY2hvIFggfCB0ciBYICdcMDE1J2AKKyMgT24gY3lnd2luLCBiYXNoIGNhbiBlYXQgXHIgaW5zaWRlIGBgIGlmIHRoZSB1c2VyIHJlcXVlc3RlZCBpZ25jci4KKyMgQnV0IHdlIGtub3cgb2Ygbm8gb3RoZXIgc2hlbGwgd2hlcmUgYWNfY3Igd291bGQgYmUgZW1wdHkgYXQgdGhpcworIyBwb2ludCwgc28gd2UgY2FuIHVzZSBhIGJhc2hpc20gYXMgYSBmYWxsYmFjay4KK2lmIHRlc3QgIngkYWNfY3IiID0geDsgdGhlbgorICBldmFsIGFjX2NyPVwkXCdcXHJcJworZmkKK2FjX2NzX2F3a19jcj1gJEFXSyAnQkVHSU4geyBwcmludCAiYVxyYiIgfScgPC9kZXYvbnVsbCAyPi9kZXYvbnVsbGAKK2lmIHRlc3QgIiRhY19jc19hd2tfY3IiID0gImEke2FjX2NyfWIiOyB0aGVuCisgIGFjX2NzX2F3a19jcj0nXFxyJworZWxzZQorICBhY19jc19hd2tfY3I9JGFjX2NyCitmaQorCitlY2hvICdCRUdJTiB7JyA+IiR0bXAvc3ViczEuYXdrIiAmJgorX0FDRU9GCisKKworeworICBlY2hvICJjYXQgPmNvbmYkJHN1YnMuYXdrIDw8X0FDRU9GIiAmJgorICBlY2hvICIkYWNfc3Vic3RfdmFycyIgfCBzZWQgJ3MvLiovJiEkJiRhY19kZWxpbS8nICYmCisgIGVjaG8gIl9BQ0VPRiIKK30gPmNvbmYkJHN1YnMuc2ggfHwKKyAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorYWNfZGVsaW1fbnVtPWBlY2hvICIkYWNfc3Vic3RfdmFycyIgfCBncmVwIC1jICdeJ2AKK2FjX2RlbGltPSclIV8hIyAnCitmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgOjsgZG8KKyAgLiAuL2NvbmYkJHN1YnMuc2ggfHwKKyAgICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CisKKyAgYWNfZGVsaW1fbj1gc2VkIC1uICJzLy4qJGFjX2RlbGltXCQvWC9wIiBjb25mJCRzdWJzLmF3ayB8IGdyZXAgLWMgWGAKKyAgaWYgdGVzdCAkYWNfZGVsaW1fbiA9ICRhY19kZWxpbV9udW07IHRoZW4KKyAgICBicmVhaworICBlbGlmICRhY19sYXN0X3RyeTsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKKyAgZWxzZQorICAgIGFjX2RlbGltPSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiCisgIGZpCitkb25lCitybSAtZiBjb25mJCRzdWJzLnNoCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorY2F0ID4+IlwkdG1wL3N1YnMxLmF3ayIgPDxcXF9BQ0FXSyAmJgorX0FDRU9GCitzZWQgLW4gJworaAorcy9eL1NbIi87IHMvIS4qLyJdPS8KK3AKK2cKK3MvXlteIV0qIS8vCis6cmVwbAordCByZXBsCitzLyciJGFjX2RlbGltIickLy8KK3QgZGVsaW0KKzpubAoraAorcy9cKC5cezE0OFx9XCkuLiovXDEvCit0IG1vcmUxCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC9cXG4iXFwvCitwCituCitiIHJlcGwKKzptb3JlMQorcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIlxcLworcAorZworcy8uXHsxNDhcfS8vCit0IG5sCis6ZGVsaW0KK2gKK3MvXCguXHsxNDhcfVwpLi4qL1wxLwordCBtb3JlMgorcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIi8KK3AKK2IKKzptb3JlMgorcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIlxcLworcAorZworcy8uXHsxNDhcfS8vCit0IGRlbGltCisnIDxjb25mJCRzdWJzLmF3ayB8IHNlZCAnCisvXlteIiJdL3sKKyAgTgorICBzL1xuLy8KK30KKycgPj4kQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKK3JtIC1mIGNvbmYkJHN1YnMuYXdrCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK19BQ0FXSworY2F0ID4+IlwkdG1wL3N1YnMxLmF3ayIgPDxfQUNBV0sgJiYKKyAgZm9yIChrZXkgaW4gUykgU19pc19zZXRba2V5XSA9IDEKKyAgRlMgPSAiByIKKworfQoreworICBsaW5lID0gJCAwCisgIG5maWVsZHMgPSBzcGxpdChsaW5lLCBmaWVsZCwgIkAiKQorICBzdWJzdGVkID0gMAorICBsZW4gPSBsZW5ndGgoZmllbGRbMV0pCisgIGZvciAoaSA9IDI7IGkgPCBuZmllbGRzOyBpKyspIHsKKyAgICBrZXkgPSBmaWVsZFtpXQorICAgIGtleWxlbiA9IGxlbmd0aChrZXkpCisgICAgaWYgKFNfaXNfc2V0W2tleV0pIHsKKyAgICAgIHZhbHVlID0gU1trZXldCisgICAgICBsaW5lID0gc3Vic3RyKGxpbmUsIDEsIGxlbikgIiIgdmFsdWUgIiIgc3Vic3RyKGxpbmUsIGxlbiArIGtleWxlbiArIDMpCisgICAgICBsZW4gKz0gbGVuZ3RoKHZhbHVlKSArIGxlbmd0aChmaWVsZFsrK2ldKQorICAgICAgc3Vic3RlZCA9IDEKKyAgICB9IGVsc2UKKyAgICAgIGxlbiArPSAxICsga2V5bGVuCisgIH0KKworICBwcmludCBsaW5lCit9CisKK19BQ0FXSworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitpZiBzZWQgInMvJGFjX2NyLy8iIDwgL2Rldi9udWxsID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgc2VkICJzLyRhY19jclwkLy87IHMvJGFjX2NyLyRhY19jc19hd2tfY3IvZyIKK2Vsc2UKKyAgY2F0CitmaSA8ICIkdG1wL3N1YnMxLmF3ayIgPiAiJHRtcC9zdWJzLmF3ayIgXAorICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IHNldHVwIGNvbmZpZyBmaWxlcyBtYWNoaW5lcnkiICIkTElORU5PIiA1CitfQUNFT0YKKworIyBWUEFUSCBtYXkgY2F1c2UgdHJvdWJsZSB3aXRoIHNvbWUgbWFrZXMsIHNvIHdlIHJlbW92ZSBzb2xlICQoc3JjZGlyKSwKKyMgJHtzcmNkaXJ9IGFuZCBAc3JjZGlyQCBlbnRyaWVzIGZyb20gVlBBVEggaWYgc3JjZGlyIGlzICIuIiwgc3RyaXAgbGVhZGluZyBhbmQKKyMgdHJhaWxpbmcgY29sb25zIGFuZCB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgbGluZSBpZiBWUEFUSCBiZWNvbWVzIGVtcHR5CisjIChhY3R1YWxseSB3ZSBsZWF2ZSBhbiBlbXB0eSBsaW5lIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVycykuCitpZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgorICBhY192cHN1Yj0nL15bCSBdKlZQQVRIWwkgXSo9WwkgXSoveworaAorcy8vLworcy9eLzovCitzL1sJIF0qJC86Lworcy86XCQoc3JjZGlyKTovOi9nCitzLzpcJHtzcmNkaXJ9Oi86L2cKK3MvOkBzcmNkaXJAOi86L2cKK3MvXjoqLy8KK3MvOiokLy8KK3gKK3MvXCg9WwkgXSpcKS4qL1wxLworRworcy9cbi8vCitzL15bXj1dKj1bCSBdKiQvLworfScKK2ZpCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2ZpICMgdGVzdCAtbiAiJENPTkZJR19GSUxFUyIKKworIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19IRUFERVJTIHNlY3Rpb24uCisjIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0hFQURFUlMuCisjIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugd2l0aCBgLi9jb25maWcuc3RhdHVzIE1ha2VmaWxlJy4KK2lmIHRlc3QgLW4gIiRDT05GSUdfSEVBREVSUyI7IHRoZW4KK2NhdCA+IiR0bXAvZGVmaW5lcy5hd2siIDw8XF9BQ0FXSyB8fAorQkVHSU4geworX0FDRU9GCisKKyMgVHJhbnNmb3JtIGNvbmZkZWZzLmggaW50byBhbiBhd2sgc2NyaXB0IGBkZWZpbmVzLmF3aycsIGVtYmVkZGVkIGFzCisjIGhlcmUtZG9jdW1lbnQgaW4gY29uZmlnLnN0YXR1cywgdGhhdCBzdWJzdGl0dXRlcyB0aGUgcHJvcGVyIHZhbHVlcyBpbnRvCisjIGNvbmZpZy5oLmluIHRvIHByb2R1Y2UgY29uZmlnLmguCisKKyMgQ3JlYXRlIGEgZGVsaW1pdGVyIHN0cmluZyB0aGF0IGRvZXMgbm90IGV4aXN0IGluIGNvbmZkZWZzLmgsIHRvIGVhc2UKKyMgaGFuZGxpbmcgb2YgbG9uZyBsaW5lcy4KK2FjX2RlbGltPSclIV8hIyAnCitmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgOjsgZG8KKyAgYWNfdD1gc2VkIC1uICIvJGFjX2RlbGltL3AiIGNvbmZkZWZzLmhgCisgIGlmIHRlc3QgLXogIiRhY190IjsgdGhlbgorICAgIGJyZWFrCisgIGVsaWYgJGFjX2xhc3RfdHJ5OyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfSEVBREVSUyIgIiRMSU5FTk8iIDUKKyAgZWxzZQorICAgIGFjX2RlbGltPSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiCisgIGZpCitkb25lCisKKyMgRm9yIHRoZSBhd2sgc2NyaXB0LCBEIGlzIGFuIGFycmF5IG9mIG1hY3JvIHZhbHVlcyBrZXllZCBieSBuYW1lLAorIyBsaWtld2lzZSBQIGNvbnRhaW5zIG1hY3JvIHBhcmFtZXRlcnMgaWYgYW55LiAgUHJlc2VydmUgYmFja3NsYXNoCisjIG5ld2xpbmUgc2VxdWVuY2VzLgorCithY193b3JkX3JlPVtfJGFzX2NyX0xldHRlcnNdW18kYXNfY3JfYWxudW1dKgorc2VkIC1uICcKK3MvLlx7MTQ4XH0vJiciJGFjX2RlbGltIicvZwordCByc2V0Cis6cnNldAorcy9eWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSovIC8KK3QgZGVmCitkCis6ZGVmCitzL1xcJC8vCit0IGJzbmwKK3MvWyJcXF0vXFwmL2cKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpXCgoW14oKV0qKVwpWwkgXSpcKC4qXCkvUFsiXDEiXT0iXDIiXAorRFsiXDEiXT0iIFwzIi9wCitzL14gXCgnIiRhY193b3JkX3JlIidcKVsJIF0qXCguKlwpL0RbIlwxIl09IiBcMiIvcAorZAorOmJzbmwKK3MvWyJcXF0vXFwmL2cKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpXCgoW14oKV0qKVwpWwkgXSpcKC4qXCkvUFsiXDEiXT0iXDIiXAorRFsiXDEiXT0iIFwzXFxcXFxcbiJcXC9wCit0IGNvbnQKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpWwkgXSpcKC4qXCkvRFsiXDEiXT0iIFwyXFxcXFxcbiJcXC9wCit0IGNvbnQKK2QKKzpjb250CituCitzLy5cezE0OFx9LyYnIiRhY19kZWxpbSInL2cKK3QgY2xlYXIKKzpjbGVhcgorcy9cXCQvLwordCBic25sYworcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIi9wCitkCis6YnNubGMKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kL1xcXFxcXG4iXFwvcAorYiBjb250CisnIDxjb25mZGVmcy5oIHwgc2VkICcKK3MvJyIkYWNfZGVsaW0iJy8iXFxcCisiL2cnID4+JENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorICBmb3IgKGtleSBpbiBEKSBEX2lzX3NldFtrZXldID0gMQorICBGUyA9ICIHIgorfQorL15bXHQgXSojW1x0IF0qKGRlZmluZXx1bmRlZilbXHQgXSskYWNfd29yZF9yZShbXHQgKF18XCQpLyB7CisgIGxpbmUgPSBcJCAwCisgIHNwbGl0KGxpbmUsIGFyZywgIiAiKQorICBpZiAoYXJnWzFdID09ICIjIikgeworICAgIGRlZnVuZGVmID0gYXJnWzJdCisgICAgbWFjMSA9IGFyZ1szXQorICB9IGVsc2UgeworICAgIGRlZnVuZGVmID0gc3Vic3RyKGFyZ1sxXSwgMikKKyAgICBtYWMxID0gYXJnWzJdCisgIH0KKyAgc3BsaXQobWFjMSwgbWFjMiwgIigiKSAjKQorICBtYWNybyA9IG1hYzJbMV0KKyAgcHJlZml4ID0gc3Vic3RyKGxpbmUsIDEsIGluZGV4KGxpbmUsIGRlZnVuZGVmKSAtIDEpCisgIGlmIChEX2lzX3NldFttYWNyb10pIHsKKyAgICAjIFByZXNlcnZlIHRoZSB3aGl0ZSBzcGFjZSBzdXJyb3VuZGluZyB0aGUgIiMiLgorICAgIHByaW50IHByZWZpeCAiZGVmaW5lIiwgbWFjcm8gUFttYWNyb10gRFttYWNyb10KKyAgICBuZXh0CisgIH0gZWxzZSB7CisgICAgIyBSZXBsYWNlICN1bmRlZiB3aXRoIGNvbW1lbnRzLiAgVGhpcyBpcyBuZWNlc3NhcnksIGZvciBleGFtcGxlLAorICAgICMgaW4gdGhlIGNhc2Ugb2YgX1BPU0lYX1NPVVJDRSwgd2hpY2ggaXMgcHJlZGVmaW5lZCBhbmQgcmVxdWlyZWQKKyAgICAjIG9uIHNvbWUgc3lzdGVtcyB3aGVyZSBjb25maWd1cmUgd2lsbCBub3QgZGVjaWRlIHRvIGRlZmluZSBpdC4KKyAgICBpZiAoZGVmdW5kZWYgPT0gInVuZGVmIikgeworICAgICAgcHJpbnQgIi8qIiwgcHJlZml4IGRlZnVuZGVmLCBtYWNybywgIiovIgorICAgICAgbmV4dAorICAgIH0KKyAgfQorfQoreyBwcmludCB9CitfQUNBV0sKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IHNldHVwIGNvbmZpZyBoZWFkZXJzIG1hY2hpbmVyeSIgIiRMSU5FTk8iIDUKK2ZpICMgdGVzdCAtbiAiJENPTkZJR19IRUFERVJTIgorCisKK2V2YWwgc2V0IFggIiAgOkYgJENPTkZJR19GSUxFUyAgOkggJENPTkZJR19IRUFERVJTICAgIDpDICRDT05GSUdfQ09NTUFORFMiCitzaGlmdAorZm9yIGFjX3RhZworZG8KKyAgY2FzZSAkYWNfdGFnIGluCisgIDpbRkhMQ10pIGFjX21vZGU9JGFjX3RhZzsgY29udGludWU7OworICBlc2FjCisgIGNhc2UgJGFjX21vZGUkYWNfdGFnIGluCisgIDpbRkhMXSo6Kik7OworICA6TCogfCA6Qyo6KikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdGFnIFxgJGFjX3RhZyciICIkTElORU5PIiA1IDs7CisgIDpbRkhdLSkgYWNfdGFnPS06LTs7CisgIDpbRkhdKikgYWNfdGFnPSRhY190YWc6JGFjX3RhZy5pbjs7CisgIGVzYWMKKyAgYWNfc2F2ZV9JRlM9JElGUworICBJRlM9OgorICBzZXQgeCAkYWNfdGFnCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgc2hpZnQKKyAgYWNfZmlsZT0kMQorICBzaGlmdAorCisgIGNhc2UgJGFjX21vZGUgaW4KKyAgOkwpIGFjX3NvdXJjZT0kMTs7CisgIDpbRkhdKQorICAgIGFjX2ZpbGVfaW5wdXRzPQorICAgIGZvciBhY19mCisgICAgZG8KKyAgICAgIGNhc2UgJGFjX2YgaW4KKyAgICAgIC0pIGFjX2Y9IiR0bXAvc3RkaW4iOzsKKyAgICAgICopICMgTG9vayBmb3IgdGhlIGZpbGUgZmlyc3QgaW4gdGhlIGJ1aWxkIHRyZWUsIHRoZW4gaW4gdGhlIHNvdXJjZSB0cmVlCisJICMgKGlmIHRoZSBwYXRoIGlzIG5vdCBhYnNvbHV0ZSkuICBUaGUgYWJzb2x1dGUgcGF0aCBjYW5ub3QgYmUgRE9TLXN0eWxlLAorCSAjIGJlY2F1c2UgJGFjX2YgY2Fubm90IGNvbnRhaW4gYDonLgorCSB0ZXN0IC1mICIkYWNfZiIgfHwKKwkgICBjYXNlICRhY19mIGluCisJICAgW1xcLyRdKikgZmFsc2U7OworCSAgICopIHRlc3QgLWYgIiRzcmNkaXIvJGFjX2YiICYmIGFjX2Y9IiRzcmNkaXIvJGFjX2YiOzsKKwkgICBlc2FjIHx8CisJICAgYXNfZm5fZXJyb3IgMSAiY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogXGAkYWNfZiciICIkTElORU5PIiA1IDs7CisgICAgICBlc2FjCisgICAgICBjYXNlICRhY19mIGluICpcJyopIGFjX2Y9YCRhc19lY2hvICIkYWNfZiIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyBlc2FjCisgICAgICBhc19mbl9hcHBlbmQgYWNfZmlsZV9pbnB1dHMgIiAnJGFjX2YnIgorICAgIGRvbmUKKworICAgICMgTGV0J3Mgc3RpbGwgcHJldGVuZCBpdCBpcyBgY29uZmlndXJlJyB3aGljaCBpbnN0YW50aWF0ZXMgKGkuZS4sIGRvbid0CisgICAgIyB1c2UgJGFzX21lKSwgcGVvcGxlIHdvdWxkIGJlIHN1cnByaXNlZCB0byByZWFkOgorICAgICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlnLnN0YXR1cy4gICovCisgICAgY29uZmlndXJlX2lucHV0PSdHZW5lcmF0ZWQgZnJvbSAnYAorCSAgJGFzX2VjaG8gIiQqIiB8IHNlZCAnc3xeW146XSovfHw7c3w6W146XSovfCwgfGcnCisJYCcgYnkgY29uZmlndXJlLicKKyAgICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisgICAgICBjb25maWd1cmVfaW5wdXQ9IiRhY19maWxlLiAgJGNvbmZpZ3VyZV9pbnB1dCIKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9CisgICAgZmkKKyAgICAjIE5ldXRyYWxpemUgc3BlY2lhbCBjaGFyYWN0ZXJzIGludGVycHJldGVkIGJ5IHNlZCBpbiByZXBsYWNlbWVudCBzdHJpbmdzLgorICAgIGNhc2UgJGNvbmZpZ3VyZV9pbnB1dCBpbiAjKAorICAgICpcJiogfCAqXHwqIHwgKlxcKiApCisgICAgICAgYWNfc2VkX2NvbmZfaW5wdXQ9YCRhc19lY2hvICIkY29uZmlndXJlX2lucHV0IiB8CisgICAgICAgc2VkICdzL1tcXFxcJnxdL1xcXFwmL2cnYDs7ICMoCisgICAgKikgYWNfc2VkX2NvbmZfaW5wdXQ9JGNvbmZpZ3VyZV9pbnB1dDs7CisgICAgZXNhYworCisgICAgY2FzZSAkYWNfdGFnIGluCisgICAgKjotOiogfCAqOi0pIGNhdCA+IiR0bXAvc3RkaW4iIFwKKyAgICAgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNSAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworCisgIGFjX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhY19maWxlIiB8fAorJGFzX2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhY19maWxlIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgYXNfZGlyPSIkYWNfZGlyIjsgYXNfZm5fbWtkaXJfcAorICBhY19idWlsZGRpcj0uCisKK2Nhc2UgIiRhY19kaXIiIGluCisuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyopCisgIGFjX2Rpcl9zdWZmaXg9L2AkYXNfZWNobyAiJGFjX2RpciIgfCBzZWQgJ3N8XlwuW1xcL118fCdgCisgICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKyAgYWNfdG9wX2J1aWxkZGlyX3N1Yj1gJGFzX2VjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAnc3wvW15cXC9dKnwvLi58ZztzfC98fCdgCisgIGNhc2UgJGFjX3RvcF9idWlsZGRpcl9zdWIgaW4KKyAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworICAqKSAgYWNfdG9wX2J1aWxkX3ByZWZpeD0kYWNfdG9wX2J1aWxkZGlyX3N1Yi8gOzsKKyAgZXNhYyA7OworZXNhYworYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfcHdkCithY19hYnNfYnVpbGRkaXI9JGFjX3B3ZCRhY19kaXJfc3VmZml4CisjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorYWNfdG9wX2J1aWxkZGlyPSRhY190b3BfYnVpbGRfcHJlZml4CisKK2Nhc2UgJHNyY2RpciBpbgorICAuKSAgIyBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisgICAgYWNfc3JjZGlyPS4KKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZCA7OworICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIG5hbWUuCisgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKKyAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7CisgICopICMgUmVsYXRpdmUgbmFtZS4KKyAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QvJHNyY2RpciA7OworZXNhYworYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeAorCisKKyAgY2FzZSAkYWNfbW9kZSBpbgorICA6RikKKyAgIworICAjIENPTkZJR19GSUxFCisgICMKKworICBjYXNlICRJTlNUQUxMIGluCisgIFtcXC8kXSogfCA/OltcXC9dKiApIGFjX0lOU1RBTEw9JElOU1RBTEwgOzsKKyAgKikgYWNfSU5TVEFMTD0kYWNfdG9wX2J1aWxkX3ByZWZpeCRJTlNUQUxMIDs7CisgIGVzYWMKKyAgYWNfTUtESVJfUD0kTUtESVJfUAorICBjYXNlICRNS0RJUl9QIGluCisgIFtcXC8kXSogfCA/OltcXC9dKiApIDs7CisgICovKikgYWNfTUtESVJfUD0kYWNfdG9wX2J1aWxkX3ByZWZpeCRNS0RJUl9QIDs7CisgIGVzYWMKK19BQ0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIElmIHRoZSB0ZW1wbGF0ZSBkb2VzIG5vdCBrbm93IGFib3V0IGRhdGFyb290ZGlyLCBleHBhbmQgaXQuCisjIEZJWE1FOiBUaGlzIGhhY2sgc2hvdWxkIGJlIHJlbW92ZWQgYSBmZXcgeWVhcnMgYWZ0ZXIgMi42MC4KK2FjX2RhdGFyb290ZGlyX2hhY2s9OyBhY19kYXRhcm9vdGRpcl9zZWVuPQorYWNfc2VkX2RhdGFyb290PScKKy9kYXRhcm9vdGRpci8geworICBwCisgIHEKK30KKy9AZGF0YWRpckAvcAorL0Bkb2NkaXJAL3AKKy9AaW5mb2RpckAvcAorL0Bsb2NhbGVkaXJAL3AKKy9AbWFuZGlyQC9wJworY2FzZSBgZXZhbCAic2VkIC1uIFwiXCRhY19zZWRfZGF0YXJvb3RcIiAkYWNfZmlsZV9pbnB1dHMiYCBpbgorKmRhdGFyb290ZGlyKikgYWNfZGF0YXJvb3RkaXJfc2Vlbj15ZXM7OworKkBkYXRhZGlyQCp8KkBkb2NkaXJAKnwqQGluZm9kaXJAKnwqQGxvY2FsZWRpckAqfCpAbWFuZGlyQCopCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlX2lucHV0cyBzZWVtcyB0byBpZ25vcmUgdGhlIC0tZGF0YXJvb3RkaXIgc2V0dGluZyIgPiYyO30KK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGFjX2RhdGFyb290ZGlyX2hhY2s9JworICBzJkBkYXRhZGlyQCYkZGF0YWRpciZnCisgIHMmQGRvY2RpckAmJGRvY2RpciZnCisgIHMmQGluZm9kaXJAJiRpbmZvZGlyJmcKKyAgcyZAbG9jYWxlZGlyQCYkbG9jYWxlZGlyJmcKKyAgcyZAbWFuZGlyQCYkbWFuZGlyJmcKKyAgcyZcXFwke2RhdGFyb290ZGlyfSYkZGF0YXJvb3RkaXImZycgOzsKK2VzYWMKK19BQ0VPRgorCisjIE5ldXRyYWxpemUgVlBBVEggd2hlbiBgJHNyY2RpcicgPSBgLicuCisjIFNoZWxsIGNvZGUgaW4gY29uZmlndXJlLmFjIG1pZ2h0IHNldCBleHRyYXN1Yi4KKyMgRklYTUU6IGRvIHdlIHJlYWxseSB3YW50IHRvIG1haW50YWluIHRoaXMgZmVhdHVyZT8KK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorYWNfc2VkX2V4dHJhPSIkYWNfdnBzdWIKKyRleHRyYXN1YgorX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCis6dAorL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYgorc3xAY29uZmlndXJlX2lucHV0QHwkYWNfc2VkX2NvbmZfaW5wdXR8O3QgdAorcyZAdG9wX2J1aWxkZGlyQCYkYWNfdG9wX2J1aWxkZGlyX3N1YiY7dCB0CitzJkB0b3BfYnVpbGRfcHJlZml4QCYkYWNfdG9wX2J1aWxkX3ByZWZpeCY7dCB0CitzJkBzcmNkaXJAJiRhY19zcmNkaXImO3QgdAorcyZAYWJzX3NyY2RpckAmJGFjX2Fic19zcmNkaXImO3QgdAorcyZAdG9wX3NyY2RpckAmJGFjX3RvcF9zcmNkaXImO3QgdAorcyZAYWJzX3RvcF9zcmNkaXJAJiRhY19hYnNfdG9wX3NyY2RpciY7dCB0CitzJkBidWlsZGRpckAmJGFjX2J1aWxkZGlyJjt0IHQKK3MmQGFic19idWlsZGRpckAmJGFjX2Fic19idWlsZGRpciY7dCB0CitzJkBhYnNfdG9wX2J1aWxkZGlyQCYkYWNfYWJzX3RvcF9idWlsZGRpciY7dCB0CitzJkBJTlNUQUxMQCYkYWNfSU5TVEFMTCY7dCB0CitzJkBNS0RJUl9QQCYkYWNfTUtESVJfUCY7dCB0CiskYWNfZGF0YXJvb3RkaXJfaGFjaworIgorZXZhbCBzZWQgXCJcJGFjX3NlZF9leHRyYVwiICIkYWNfZmlsZV9pbnB1dHMiIHwgJEFXSyAtZiAiJHRtcC9zdWJzLmF3ayIgPiR0bXAvb3V0IFwKKyAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisKK3Rlc3QgLXogIiRhY19kYXRhcm9vdGRpcl9oYWNrJGFjX2RhdGFyb290ZGlyX3NlZW4iICYmCisgIHsgYWNfb3V0PWBzZWQgLW4gJy9cJHtkYXRhcm9vdGRpcn0vcCcgIiR0bXAvb3V0ImA7IHRlc3QgLW4gIiRhY19vdXQiOyB9ICYmCisgIHsgYWNfb3V0PWBzZWQgLW4gJy9eWwkgXSpkYXRhcm9vdGRpclsJIF0qOio9L3AnICIkdG1wL291dCJgOyB0ZXN0IC16ICIkYWNfb3V0IjsgfSAmJgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJword2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJword2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkIiA+JjI7fQorCisgIHJtIC1mICIkdG1wL3N0ZGluIgorICBjYXNlICRhY19maWxlIGluCisgIC0pIGNhdCAiJHRtcC9vdXQiICYmIHJtIC1mICIkdG1wL291dCI7OworICAqKSBybSAtZiAiJGFjX2ZpbGUiICYmIG12ICIkdG1wL291dCIgIiRhY19maWxlIjs7CisgIGVzYWMgXAorICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKyA7OworICA6SCkKKyAgIworICAjIENPTkZJR19IRUFERVIKKyAgIworICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisgICAgeworICAgICAgJGFzX2VjaG8gIi8qICRjb25maWd1cmVfaW5wdXQgICovIiBcCisgICAgICAmJiBldmFsICckQVdLIC1mICIkdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIKKyAgICB9ID4iJHRtcC9jb25maWcuaCIgXAorICAgICAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisgICAgaWYgZGlmZiAiJGFjX2ZpbGUiICIkdG1wL2NvbmZpZy5oIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY2O30KKyAgICBlbHNlCisgICAgICBybSAtZiAiJGFjX2ZpbGUiCisgICAgICBtdiAiJHRtcC9jb25maWcuaCIgIiRhY19maWxlIiBcCisJfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisgICAgZmkKKyAgZWxzZQorICAgICRhc19lY2hvICIvKiAkY29uZmlndXJlX2lucHV0ICAqLyIgXAorICAgICAgJiYgZXZhbCAnJEFXSyAtZiAiJHRtcC9kZWZpbmVzLmF3ayInICIkYWNfZmlsZV9pbnB1dHMiIFwKKyAgICAgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlIC0iICIkTElORU5PIiA1CisgIGZpCisjIENvbXB1dGUgIiRhY19maWxlIidzIGluZGV4IGluICRjb25maWdfaGVhZGVycy4KK19hbV9hcmc9IiRhY19maWxlIgorX2FtX3N0YW1wX2NvdW50PTEKK2ZvciBfYW1faGVhZGVyIGluICRjb25maWdfaGVhZGVycyA6OyBkbworICBjYXNlICRfYW1faGVhZGVyIGluCisgICAgJF9hbV9hcmcgfCAkX2FtX2FyZzoqICkKKyAgICAgIGJyZWFrIDs7CisgICAgKiApCisgICAgICBfYW1fc3RhbXBfY291bnQ9YGV4cHIgJF9hbV9zdGFtcF9jb3VudCArIDFgIDs7CisgIGVzYWMKK2RvbmUKK2VjaG8gInRpbWVzdGFtcCBmb3IgJF9hbV9hcmciID5gJGFzX2Rpcm5hbWUgLS0gIiRfYW1fYXJnIiB8fAorJGFzX2V4cHIgWCIkX2FtX2FyZyIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkX2FtX2FyZyIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkX2FtX2FyZyIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkX2FtX2FyZyIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRfYW1fYXJnIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2Avc3RhbXAtaCRfYW1fc3RhbXBfY291bnQKKyA7OworCisgIDpDKSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBleGVjdXRpbmcgJGFjX2ZpbGUgY29tbWFuZHMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXhlY3V0aW5nICRhY19maWxlIGNvbW1hbmRzIiA+JjY7fQorIDs7CisgIGVzYWMKKworCisgIGNhc2UgJGFjX2ZpbGUkYWNfbW9kZSBpbgorICAgICJkZXBmaWxlcyI6QykgdGVzdCB4IiRBTURFUF9UUlVFIiAhPSB4IiIgfHwgeworICAjIEF1dG9jb25mIDIuNjIgcXVvdGVzIC0tZmlsZSBhcmd1bWVudHMgZm9yIGV2YWwsIGJ1dCBub3Qgd2hlbiBmaWxlcworICAjIGFyZSBsaXN0ZWQgd2l0aG91dCAtLWZpbGUuICBMZXQncyBwbGF5IHNhZmUgYW5kIG9ubHkgZW5hYmxlIHRoZSBldmFsCisgICMgaWYgd2UgZGV0ZWN0IHRoZSBxdW90aW5nLgorICBjYXNlICRDT05GSUdfRklMRVMgaW4KKyAgKlwnKikgZXZhbCBzZXQgeCAiJENPTkZJR19GSUxFUyIgOzsKKyAgKikgICBzZXQgeCAkQ09ORklHX0ZJTEVTIDs7CisgIGVzYWMKKyAgc2hpZnQKKyAgZm9yIG1mCisgIGRvCisgICAgIyBTdHJpcCBNRiBzbyB3ZSBlbmQgdXAgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KKyAgICBtZj1gZWNobyAiJG1mIiB8IHNlZCAtZSAncy86LiokLy8nYAorICAgICMgQ2hlY2sgd2hldGhlciB0aGlzIGlzIGFuIEF1dG9tYWtlIGdlbmVyYXRlZCBNYWtlZmlsZSBvciBub3QuCisgICAgIyBXZSB1c2VkIHRvIG1hdGNoIG9ubHkgdGhlIGZpbGVzIG5hbWVkIGBNYWtlZmlsZS5pbicsIGJ1dAorICAgICMgc29tZSBwZW9wbGUgcmVuYW1lIHRoZW07IHNvIGluc3RlYWQgd2UgbG9vayBhdCB0aGUgZmlsZSBjb250ZW50LgorICAgICMgR3JlcCdpbmcgdGhlIGZpcnN0IGxpbmUgaXMgbm90IGVub3VnaDogc29tZSBwZW9wbGUgcG9zdC1wcm9jZXNzCisgICAgIyBlYWNoIE1ha2VmaWxlLmluIGFuZCBhZGQgYSBuZXcgbGluZSBvbiB0b3Agb2YgZWFjaCBmaWxlIHRvIHNheSBzby4KKyAgICAjIEdyZXAnaW5nIHRoZSB3aG9sZSBmaWxlIGlzIG5vdCBnb29kIGVpdGhlcjogQUlYIGdyZXAgaGFzIGEgbGluZQorICAgICMgbGltaXQgb2YgMjA0OCwgYnV0IGFsbCBzZWQncyB3ZSBrbm93IGhhdmUgdW5kZXJzdGFuZCBhdCBsZWFzdCA0MDAwLgorICAgIGlmIHNlZCAtbiAncyxeIy4qZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlLiosWCxwJyAiJG1mIiB8IGdyZXAgWCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIGRpcnBhcnQ9YCRhc19kaXJuYW1lIC0tICIkbWYiIHx8CiskYXNfZXhwciBYIiRtZiIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkbWYiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJG1mIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRtZiIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRtZiIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgICAgZWxzZQorICAgICAgY29udGludWUKKyAgICBmaQorICAgICMgRXh0cmFjdCB0aGUgZGVmaW5pdGlvbiBvZiBERVBESVIsIGFtX19pbmNsdWRlLCBhbmQgYW1fX3F1b3RlCisgICAgIyBmcm9tIHRoZSBNYWtlZmlsZSB3aXRob3V0IHJ1bm5pbmcgYG1ha2UnLgorICAgIERFUERJUj1gc2VkIC1uICdzL15ERVBESVIgPSAvL3AnIDwgIiRtZiJgCisgICAgdGVzdCAteiAiJERFUERJUiIgJiYgY29udGludWUKKyAgICBhbV9faW5jbHVkZT1gc2VkIC1uICdzL15hbV9faW5jbHVkZSA9IC8vcCcgPCAiJG1mImAKKyAgICB0ZXN0IC16ICJhbV9faW5jbHVkZSIgJiYgY29udGludWUKKyAgICBhbV9fcXVvdGU9YHNlZCAtbiAncy9eYW1fX3F1b3RlID0gLy9wJyA8ICIkbWYiYAorICAgICMgV2hlbiB1c2luZyBhbnNpMmtuciwgVSBtYXkgYmUgZW1wdHkgb3IgYW4gdW5kZXJzY29yZTsgZXhwYW5kIGl0CisgICAgVT1gc2VkIC1uICdzL15VID0gLy9wJyA8ICIkbWYiYAorICAgICMgRmluZCBhbGwgZGVwZW5kZW5jeSBvdXRwdXQgZmlsZXMsIHRoZXkgYXJlIGluY2x1ZGVkIGZpbGVzIHdpdGgKKyAgICAjICQoREVQRElSKSBpbiB0aGVpciBuYW1lcy4gIFdlIGludm9rZSBzZWQgdHdpY2UgYmVjYXVzZSBpdCBpcyB0aGUKKyAgICAjIHNpbXBsZXN0IGFwcHJvYWNoIHRvIGNoYW5naW5nICQoREVQRElSKSB0byBpdHMgYWN0dWFsIHZhbHVlIGluIHRoZQorICAgICMgZXhwYW5zaW9uLgorICAgIGZvciBmaWxlIGluIGBzZWQgLW4gIgorICAgICAgcy9eJGFtX19pbmNsdWRlICRhbV9fcXVvdGVcKC4qKERFUERJUikuKlwpJGFtX19xdW90ZSInJC9cMS9wJyA8IiRtZiIgfCBcCisJIHNlZCAtZSAncy9cJChERVBESVIpLyciJERFUERJUiInL2cnIC1lICdzL1wkVS8nIiRVIicvZydgOyBkbworICAgICAgIyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBleGlzdHMuCisgICAgICB0ZXN0IC1mICIkZGlycGFydC8kZmlsZSIgJiYgY29udGludWUKKyAgICAgIGZkaXI9YCRhc19kaXJuYW1lIC0tICIkZmlsZSIgfHwKKyRhc19leHByIFgiJGZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGZpbGUiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkZmlsZSIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgICAgICBhc19kaXI9JGRpcnBhcnQvJGZkaXI7IGFzX2ZuX21rZGlyX3AKKyAgICAgICMgZWNobyAiY3JlYXRpbmcgJGRpcnBhcnQvJGZpbGUiCisgICAgICBlY2hvICcjIGR1bW15JyA+ICIkZGlycGFydC8kZmlsZSIKKyAgICBkb25lCisgIGRvbmUKK30KKyA7OworICAgICJsaWJ0b29sIjpDKQorCisgICAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91cgorICAgICMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgorICAgIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorICAgIGZpCisKKyAgICBjZmdmaWxlPSIke29maWxlfVQiCisgICAgdHJhcCAiJFJNIFwiJGNmZ2ZpbGVcIjsgZXhpdCAxIiAxIDIgMTUKKyAgICAkUk0gIiRjZmdmaWxlIgorCisgICAgY2F0IDw8X0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisjISAkU0hFTEwKKworIyBgJEVDSE8gIiRvZmlsZSIgfCBzZWQgJ3MlXi4qLyUlJ2AgLSBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KKyMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgJGFzX21lICgkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6CisjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKyMKKyMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCisjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyMKKyMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KKyMKKyMgR05VIExpYnRvb2wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMgaWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAorIyBpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKKyMgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjCisjIEdOVSBMaWJ0b29sIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCBHTlUgTGlidG9vbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIGEgY29weQorIyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbCwgb3IKKyMgb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworCisjIFRoZSBuYW1lcyBvZiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4KK2F2YWlsYWJsZV90YWdzPSJDWFggIgorCisjICMjIyBCRUdJTiBMSUJUT09MIENPTkZJRworCisjIEFzc2VtYmxlciBwcm9ncmFtLgorQVM9JEFTCisKKyMgRExMIGNyZWF0aW9uIHByb2dyYW0uCitETExUT09MPSRETExUT09MCisKKyMgT2JqZWN0IGR1bXBlciBwcm9ncmFtLgorT0JKRFVNUD0kT0JKRFVNUAorCisjIFdoaWNoIHJlbGVhc2Ugb2YgbGlidG9vbC5tNCB3YXMgdXNlZD8KK21hY3JvX3ZlcnNpb249JG1hY3JvX3ZlcnNpb24KK21hY3JvX3JldmlzaW9uPSRtYWNyb19yZXZpc2lvbgorCisjIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKKworIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgorYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKKworIyBXaGF0IHR5cGUgb2Ygb2JqZWN0cyB0byBidWlsZC4KK3BpY19tb2RlPSRwaWNfbW9kZQorCisjIFdoZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbi4KK2Zhc3RfaW5zdGFsbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbAorCisjIFRoZSBob3N0IHN5c3RlbS4KK2hvc3RfYWxpYXM9JGhvc3RfYWxpYXMKK2hvc3Q9JGhvc3QKK2hvc3Rfb3M9JGhvc3Rfb3MKKworIyBUaGUgYnVpbGQgc3lzdGVtLgorYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCitidWlsZD0kYnVpbGQKK2J1aWxkX29zPSRidWlsZF9vcworCisjIEEgc2VkIHByb2dyYW0gdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuCitTRUQ9JGx0X1NFRAorCisjIFNlZCB0aGF0IGhlbHBzIHVzIGF2b2lkIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIGVjaG8oMSkgb3B0aW9ucyBsaWtlIC1uLgorWHNlZD0iXCRTRUQgLWUgMXMvXlgvLyIKKworIyBBIGdyZXAgcHJvZ3JhbSB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcy4KK0dSRVA9JGx0X0dSRVAKKworIyBBbiBFUkUgbWF0Y2hlci4KK0VHUkVQPSRsdF9FR1JFUAorCisjIEEgbGl0ZXJhbCBzdHJpbmcgbWF0Y2hlci4KK0ZHUkVQPSRsdF9GR1JFUAorCisjIEEgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyLgorTk09JGx0X05NCisKKyMgV2hldGhlciB3ZSBuZWVkIHNvZnQgb3IgaGFyZCBsaW5rcy4KK0xOX1M9JGx0X0xOX1MKKworIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/CittYXhfY21kX2xlbj0kbWF4X2NtZF9sZW4KKworIyBPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIikuCitvYmpleHQ9JGFjX29iamV4dAorCisjIEV4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKS4KK2V4ZWV4dD0kZXhlZXh0CisKKyMgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgInVuc2V0Ii4KK2x0X3Vuc2V0PSRsdF91bnNldAorCisjIHR1cm4gc3BhY2VzIGludG8gbmV3bGluZXMuCitTUDJOTD0kbHRfbHRfU1AyTkwKKworIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgorTkwyU1A9JGx0X2x0X05MMlNQCisKKyMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KK3JlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZworcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzCisKKyMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCitkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKworIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIi4KK2ZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAorCisjIFRoZSBhcmNoaXZlci4KK0FSPSRsdF9BUgorQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisKKyMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCitTVFJJUD0kbHRfU1RSSVAKKworIyBDb21tYW5kcyB1c2VkIHRvIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitSQU5MSUI9JGx0X1JBTkxJQgorb2xkX3Bvc3RpbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0aW5zdGFsbF9jbWRzCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgQSBDIGNvbXBpbGVyLgorTFRDQz0kbHRfQ0MKKworIyBMVENDIGNvbXBpbGVyIGZsYWdzLgorTFRDRkxBR1M9JGx0X0NGTEFHUworCisjIFRha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXMuCitnbG9iYWxfc3ltYm9sX3BpcGU9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUKKworIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uLgorZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wKKworIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIuCitnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcworCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgorZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4CisKKyMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgorb2JqZGlyPSRvYmpkaXIKKworIyBTaGVsbCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzLgorU0hFTEw9JGx0X1NIRUxMCisKKyMgQW4gZWNobyBwcm9ncmFtIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgorRUNITz0kbHRfRUNITworCisjIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgd2l0aCAiZmlsZSIuCitNQUdJQ19DTUQ9JE1BR0lDX0NNRAorCisjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworCisjIFRvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFguCitEU1lNVVRJTD0kbHRfRFNZTVVUSUwKKworIyBUb29sIHRvIGNoYW5nZSBnbG9iYWwgdG8gbG9jYWwgc3ltYm9scyBvbiBNYWMgT1MgWC4KK05NRURJVD0kbHRfTk1FRElUCisKKyMgVG9vbCB0byBtYW5pcHVsYXRlIGZhdCBvYmplY3RzIGFuZCBhcmNoaXZlcyBvbiBNYWMgT1MgWC4KK0xJUE89JGx0X0xJUE8KKworIyBsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWC4KK09UT09MPSRsdF9PVE9PTAorCisjIGxkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgNjQgYml0IE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWCAxMC40LgorT1RPT0w2ND0kbHRfT1RPT0w2NAorCisjIE9sZCBhcmNoaXZlIHN1ZmZpeCAobm9ybWFsbHkgImEiKS4KK2xpYmV4dD0kbGliZXh0CisKKyMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIikuCitzaHJleHRfY21kcz0kbHRfc2hyZXh0X2NtZHMKKworIyBUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgorZXh0cmFjdF9leHBzeW1zX2NtZHM9JGx0X2V4dHJhY3RfZXhwc3ltc19jbWRzCisKKyMgVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCisjIHJlc3RvcmVkIGF0IGxpbmsgdGltZS4KK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSRsdF92YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaworCisjIERvIHdlIG5lZWQgdGhlICJsaWIiIHByZWZpeCBmb3IgbW9kdWxlcz8KK25lZWRfbGliX3ByZWZpeD0kbmVlZF9saWJfcHJlZml4CisKKyMgRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz8KK25lZWRfdmVyc2lvbj0kbmVlZF92ZXJzaW9uCisKKyMgTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGUuCit2ZXJzaW9uX3R5cGU9JHZlcnNpb25fdHlwZQorCisjIFNoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZS4KK3J1bnBhdGhfdmFyPSRydW5wYXRoX3ZhcgorCisjIFNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCitzaGxpYnBhdGhfdmFyPSRzaGxpYnBhdGhfdmFyCisKKyMgSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoPworc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKKworIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KK2xpYm5hbWVfc3BlYz0kbHRfbGlibmFtZV9zcGVjCisKKyMgTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KKyMgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRQorbGlicmFyeV9uYW1lc19zcGVjPSRsdF9saWJyYXJ5X25hbWVzX3NwZWMKKworIyBUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZS4KK3NvbmFtZV9zcGVjPSRsdF9zb25hbWVfc3BlYworCisjIENvbW1hbmQgdG8gdXNlIGFmdGVyIGluc3RhbGxhdGlvbiBvZiBhIHNoYXJlZCBhcmNoaXZlLgorcG9zdGluc3RhbGxfY21kcz0kbHRfcG9zdGluc3RhbGxfY21kcworCisjIENvbW1hbmQgdG8gdXNlIGFmdGVyIHVuaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitwb3N0dW5pbnN0YWxsX2NtZHM9JGx0X3Bvc3R1bmluc3RhbGxfY21kcworCisjIENvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeS4KK2ZpbmlzaF9jbWRzPSRsdF9maW5pc2hfY21kcworCisjIEFzICJmaW5pc2hfY21kcyIsIGV4Y2VwdCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dAorIyBub3Qgc2hvd24uCitmaW5pc2hfZXZhbD0kbHRfZmluaXNoX2V2YWwKKworIyBXaGV0aGVyIHdlIHNob3VsZCBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gbGlicmFyaWVzLgoraGFyZGNvZGVfaW50b19saWJzPSRoYXJkY29kZV9pbnRvX2xpYnMKKworIyBDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMuCitzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYworCisjIFJ1bi10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzLgorc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCisKKyMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgorZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KKworIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCisKKyMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgorZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCisKKyMgQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzLgorb2xkX3N0cmlwbGliPSRsdF9vbGRfc3RyaXBsaWIKK3N0cmlwbGliPSRsdF9zdHJpcGxpYgorCisKKyMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KK0xEPSRsdF9MRAorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzCisKKyMgQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxlci4KK0NDPSRsdF9jb21waWxlcgorCisjIElzIHRoZSBjb21waWxlciB0aGUgR05VIGNvbXBpbGVyPword2l0aF9nY2M9JEdDQworCisjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCitub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCisKKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCisKKyMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljCisKKyMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KK2xpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCisKKyMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPworY29tcGlsZXJfY19vPSRsdF9sdF9jdl9wcm9nX2NvbXBpbGVyX2NfbworCisjIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX25lZWRfbGM9JGFyY2hpdmVfY21kc19uZWVkX2xjCisKKyMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYy4KK2FsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0kZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcworCisjIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYworCisjIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF93aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYworCisjIFdoZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5LgorY29tcGlsZXJfbmVlZHNfb2JqZWN0PSRsdF9jb21waWxlcl9uZWVkc19vYmplY3QKKworIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcworCisjIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBzaGFyZWQgYXJjaGl2ZS4KK2FyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzCithcmNoaXZlX2V4cHN5bV9jbWRzPSRsdF9hcmNoaXZlX2V4cHN5bV9jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSBpZiBkaWZmZXJlbnQgZnJvbSBidWlsZGluZworIyBhIHNoYXJlZCBhcmNoaXZlLgorbW9kdWxlX2NtZHM9JGx0X21vZHVsZV9jbWRzCittb2R1bGVfZXhwc3ltX2NtZHM9JGx0X21vZHVsZV9leHBzeW1fY21kcworCisjIFdoZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIHdpdGggR05VIGxkIG9yIG5vdC4KK3dpdGhfZ251X2xkPSRsdF93aXRoX2dudV9sZAorCisjIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgorYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X2FsbG93X3VuZGVmaW5lZF9mbGFnCisKKyMgRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgorbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnCisKKyMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0CitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjCisKKyMgSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeQorIyBkdXJpbmcgbGlua2luZy4gIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkCisKKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyMgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9kaXJlY3Q9JGhhcmRjb2RlX2RpcmVjdAorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRVwke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMKKyMgImFic29sdXRlIixpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyBcJHtzaGxpYnBhdGhfdmFyfSBpZiB0aGUKKyMgbGlicmFyeSBpcyByZWxvY2F0ZWQuCitoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9JGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZQorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXIKKworIyBTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgbGlicmFyeSBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQKKyMgYWdhaW5zdCBpdC4KK2hhcmRjb2RlX2F1dG9tYXRpYz0kaGFyZGNvZGVfYXV0b21hdGljCisKKyMgU2V0IHRvIHllcyBpZiBsaW5rZXIgYWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMKKyMgdG8gcnVudGltZSBwYXRoIGxpc3QuCitpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCisKKyMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicworCisjIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCitmaXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCisKKyMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKworIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgorZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kcworCisjIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCitleGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltcworCisjIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KK2luY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCisKKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCitwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcworCisjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KK2ZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYworCisjIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgoraGFyZGNvZGVfYWN0aW9uPSRoYXJkY29kZV9hY3Rpb24KKworIyBUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkIGxpYnJhcnkuCitjb21waWxlcl9saWJfc2VhcmNoX2RpcnM9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlycworCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0bworIyBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeS4KK3ByZWRlcF9vYmplY3RzPSRsdF9wcmVkZXBfb2JqZWN0cworcG9zdGRlcF9vYmplY3RzPSRsdF9wb3N0ZGVwX29iamVjdHMKK3ByZWRlcHM9JGx0X3ByZWRlcHMKK3Bvc3RkZXBzPSRsdF9wb3N0ZGVwcworCisjIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCisjIGEgc2hhcmVkIGxpYnJhcnkuCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGg9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aAorCisjICMjIyBFTkQgTElCVE9PTCBDT05GSUcKKworX0xUX0VPRgorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgY2F0IDw8XF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKyMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KK2lmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgorICBDT0xMRUNUX05BTUVTPQorICBleHBvcnQgQ09MTEVDVF9OQU1FUworZmkKK19MVF9FT0YKKyAgICA7OworICBlc2FjCisKKworbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisKKworICAjIFdlIHVzZSBzZWQgaW5zdGVhZCBvZiBjYXQgYmVjYXVzZSBiYXNoIG9uIERKR1BQIGdldHMgY29uZnVzZWQgaWYKKyAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworICBzZWQgJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisKKyAgY2FzZSAkeHNpX3NoZWxsIGluCisgIHllcykKKyAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorCisjIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKyMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKyMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorZnVuY19kaXJuYW1lICgpCit7CisgIGNhc2UgJHsxfSBpbgorICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CisgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworICBlc2FjCit9CisKKyMgZnVuY19iYXNlbmFtZSBmaWxlCitmdW5jX2Jhc2VuYW1lICgpCit7CisgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKK30KKworIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorIyBjYWxsOgorIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKyMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisjIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKyMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKyMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQoreworICBjYXNlICR7MX0gaW4KKyAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKyAgZXNhYworICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCit9CisKKyMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCisjIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorZnVuY19zdHJpcG5hbWUgKCkKK3sKKyAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCisgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CisgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CisgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9Cit9CisKKyMgZnVuY19vcHRfc3BsaXQKK2Z1bmNfb3B0X3NwbGl0ICgpCit7CisgIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQorICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQorfQorCisjIGZ1bmNfbG8ybyBvYmplY3QKK2Z1bmNfbG8ybyAoKQoreworICBjYXNlICR7MX0gaW4KKyAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworICBlc2FjCit9CisKKyMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCitmdW5jX3hmb3JtICgpCit7CisgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KK30KKworIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorZnVuY19hcml0aCAoKQoreworICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSkKK30KKworIyBmdW5jX2xlbiBzdHJpbmcKKyMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KK2Z1bmNfbGVuICgpCit7CisgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQorfQorCitfTFRfRU9GCisgICAgOzsKKyAgKikgIyBCb3VybmUgY29tcGF0aWJsZSBmdW5jdGlvbnMuCisgICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKworIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CisjIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCisjIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KK2Z1bmNfZGlybmFtZSAoKQoreworICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiWCR7MX0iIHwgJFhzZWQgLWUgIiRkaXJuYW1lImAKKyAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKyAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorICBlbHNlCisgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorICBmaQorfQorCisjIGZ1bmNfYmFzZW5hbWUgZmlsZQorZnVuY19iYXNlbmFtZSAoKQoreworICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICIkYmFzZW5hbWUiYAorfQorCisKKyMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCisjIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQorZnVuY19zdHJpcG5hbWUgKCkKK3sKKyAgY2FzZSAkezJ9IGluCisgICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIlgkezN9IiBcCisgICAgICAgICAgIHwgJFhzZWQgLWUgInMlXiR7MX0lJSIgLWUgInMlXFxcXCR7Mn1cJCUlImA7OworICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICJYJHszfSIgXAorICAgICAgICAgICB8ICRYc2VkIC1lICJzJV4kezF9JSUiIC1lICJzJSR7Mn1cJCUlImA7OworICBlc2FjCit9CisKKyMgc2VkIHNjcmlwdHM6CitteV9zZWRfbG9uZ19vcHQ9JzFzL15cKC1bXj1dKlwpPS4qL1wxLztxJworbXlfc2VkX2xvbmdfYXJnPScxcy9eLVtePV0qPS8vJworCisjIGZ1bmNfb3B0X3NwbGl0CitmdW5jX29wdF9zcGxpdCAoKQoreworICBmdW5jX29wdF9zcGxpdF9vcHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJG15X3NlZF9sb25nX29wdCJgCisgIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICIkbXlfc2VkX2xvbmdfYXJnImAKK30KKworIyBmdW5jX2xvMm8gb2JqZWN0CitmdW5jX2xvMm8gKCkKK3sKKyAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICIkbG8ybyJgCit9CisKKyMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCitmdW5jX3hmb3JtICgpCit7CisgIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiWCR7MX0iIHwgJFhzZWQgLWUgJ3MvXC5bXi5dKiQvLmxvLydgCit9CisKKyMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KK2Z1bmNfYXJpdGggKCkKK3sKKyAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRAImAKK30KKworIyBmdW5jX2xlbiBzdHJpbmcKKyMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KK2Z1bmNfbGVuICgpCit7CisgIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJDEiIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKK30KKworX0xUX0VPRgorZXNhYworCitjYXNlICRsdF9zaGVsbF9hcHBlbmQgaW4KKyAgeWVzKQorICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisKKyMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCisjIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KK2Z1bmNfYXBwZW5kICgpCit7CisgIGV2YWwgIiQxKz1cJDIiCit9CitfTFRfRU9GCisgICAgOzsKKyAgKikKKyAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorCisjIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCitmdW5jX2FwcGVuZCAoKQoreworICBldmFsICIkMT1cJCQxXCQyIgorfQorCitfTFRfRU9GCisgICAgOzsKKyAgZXNhYworCisKKyAgc2VkIC1uICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLywkcCcgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisKKyAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCisgIGNobW9kICt4ICIkb2ZpbGUiCisKKworICAgIGNhdCA8PF9MVF9FT0YgPj4gIiRvZmlsZSIKKworIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiBDWFgKKworIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgorTEQ9JGx0X0xEX0NYWAorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzX0NYWAorCisjIEEgbGFuZ3VhZ2Ugc3BlY2lmaWMgY29tcGlsZXIuCitDQz0kbHRfY29tcGlsZXJfQ1hYCisKKyMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgY29tcGlsZXI/Cit3aXRoX2djYz0kR0NDX0NYWAorCisjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCitub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWAorCisjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCit3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bF9DWFgKKworIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCitwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCisKKyMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KK2xpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWAorCisjIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KK2NvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYCisKKyMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KK2J1aWxkX2xpYnRvb2xfbmVlZF9sYz0kYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYCisKKyMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYy4KK2FsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0kZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFgKKworIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgorZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSRsdF9leHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYCisKKyMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgord2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JGx0X3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWAorCisjIFdoZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5LgorY29tcGlsZXJfbmVlZHNfb2JqZWN0PSRsdF9jb21waWxlcl9uZWVkc19vYmplY3RfQ1hYCisKKyMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfQ1hYCisKKyMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWAorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBzaGFyZWQgYXJjaGl2ZS4KK2FyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzX0NYWAorYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kc19DWFgKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIGlmIGRpZmZlcmVudCBmcm9tIGJ1aWxkaW5nCisjIGEgc2hhcmVkIGFyY2hpdmUuCittb2R1bGVfY21kcz0kbHRfbW9kdWxlX2NtZHNfQ1hYCittb2R1bGVfZXhwc3ltX2NtZHM9JGx0X21vZHVsZV9leHBzeW1fY21kc19DWFgKKworIyBXaGV0aGVyIHdlIGFyZSBidWlsZGluZyB3aXRoIEdOVSBsZCBvciBub3QuCit3aXRoX2dudV9sZD0kbHRfd2l0aF9nbnVfbGRfQ1hYCisKKyMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCithbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYCisKKyMgRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgorbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnX0NYWAorCisjIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFgKKworIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5CisjIGR1cmluZyBsaW5raW5nLiAgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfQ1hYCisKKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3RfQ1hYCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcworIyAiYWJzb2x1dGUiLGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nIFwke3NobGlicGF0aF92YXJ9IGlmIHRoZQorIyBsaWJyYXJ5IGlzIHJlbG9jYXRlZC4KK2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT0kaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX0NYWAorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MX0NYWAorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSRoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWAorCisjIFNldCB0byAieWVzIiBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSBsaWJyYXJ5IGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZAorIyBhZ2FpbnN0IGl0LgoraGFyZGNvZGVfYXV0b21hdGljPSRoYXJkY29kZV9hdXRvbWF0aWNfQ1hYCisKKyMgU2V0IHRvIHllcyBpZiBsaW5rZXIgYWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMKKyMgdG8gcnVudGltZSBwYXRoIGxpc3QuCitpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoX0NYWAorCisjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KK2xpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnNfQ1hYCisKKyMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KK2ZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGhfQ1hYCisKKyMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYCisKKyMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KK2V4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X2V4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYCisKKyMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KK2V4Y2x1ZGVfZXhwc3ltcz0kbHRfZXhjbHVkZV9leHBzeW1zX0NYWAorCisjIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KK2luY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zX0NYWAorCisjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHNfQ1hYCisKKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjX0NYWAorCisjIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgoraGFyZGNvZGVfYWN0aW9uPSRoYXJkY29kZV9hY3Rpb25fQ1hYCisKKyMgVGhlIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGJ5IHRoaXMgY29tcGlsZXIgd2hlbiBjcmVhdGluZyBhIHNoYXJlZCBsaWJyYXJ5LgorY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYCisKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvCisjIGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5LgorcHJlZGVwX29iamVjdHM9JGx0X3ByZWRlcF9vYmplY3RzX0NYWAorcG9zdGRlcF9vYmplY3RzPSRsdF9wb3N0ZGVwX29iamVjdHNfQ1hYCitwcmVkZXBzPSRsdF9wcmVkZXBzX0NYWAorcG9zdGRlcHM9JGx0X3Bvc3RkZXBzX0NYWAorCisjIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCisjIGEgc2hhcmVkIGxpYnJhcnkuCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGg9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFgKKworIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogQ1hYCitfTFRfRU9GCisKKyA7OworICAgICJwby1kaXJlY3RvcmllcyI6QykKKyAgICBmb3IgYWNfZmlsZSBpbiAkQ09ORklHX0ZJTEVTOyBkbworICAgICAgIyBTdXBwb3J0ICJvdXRmaWxlWzppbmZpbGVbOmluZmlsZS4uLl1dIgorICAgICAgY2FzZSAiJGFjX2ZpbGUiIGluCisgICAgICAgICo6KikgYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyU6LiolJSdgIDs7CisgICAgICBlc2FjCisgICAgICAjIFBPIGRpcmVjdG9yaWVzIGhhdmUgYSBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgZnJvbSBNYWtlZmlsZS5pbi5pbi4KKyAgICAgIGNhc2UgIiRhY19maWxlIiBpbiAqL01ha2VmaWxlLmluKQorICAgICAgICAjIEFkanVzdCBhIHJlbGF0aXZlIHNyY2Rpci4KKyAgICAgICAgYWNfZGlyPWBlY2hvICIkYWNfZmlsZSJ8c2VkICdzJS9bXi9dW14vXSokJSUnYAorICAgICAgICBhY19kaXJfc3VmZml4PSIvYGVjaG8gIiRhY19kaXIifHNlZCAncyVeXC4vJSUnYCIKKyAgICAgICAgYWNfZG90cz1gZWNobyAiJGFjX2Rpcl9zdWZmaXgifHNlZCAncyUvW14vXSolLi4vJWcnYAorICAgICAgICAjIEluIGF1dG9jb25mLTIuMTMgaXQgaXMgY2FsbGVkICRhY19naXZlbl9zcmNkaXIuCisgICAgICAgICMgSW4gYXV0b2NvbmYtMi41MCBpdCBpcyBjYWxsZWQgJHNyY2Rpci4KKyAgICAgICAgdGVzdCAtbiAiJGFjX2dpdmVuX3NyY2RpciIgfHwgYWNfZ2l2ZW5fc3JjZGlyPSIkc3JjZGlyIgorICAgICAgICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgorICAgICAgICAgIC4pICB0b3Bfc3JjZGlyPWBlY2hvICRhY19kb3RzfHNlZCAncyUvJCUlJ2AgOzsKKyAgICAgICAgICAvKikgdG9wX3NyY2Rpcj0iJGFjX2dpdmVuX3NyY2RpciIgOzsKKyAgICAgICAgICAqKSAgdG9wX3NyY2Rpcj0iJGFjX2RvdHMkYWNfZ2l2ZW5fc3JjZGlyIiA7OworICAgICAgICBlc2FjCisgICAgICAgICMgVHJlYXQgYSBkaXJlY3RvcnkgYXMgYSBQTyBkaXJlY3RvcnkgaWYgYW5kIG9ubHkgaWYgaXQgaGFzIGEKKyAgICAgICAgIyBQT1RGSUxFUy5pbiBmaWxlLiBUaGlzIGFsbG93cyBwYWNrYWdlcyB0byBoYXZlIG11bHRpcGxlIFBPCisgICAgICAgICMgZGlyZWN0b3JpZXMgdW5kZXIgZGlmZmVyZW50IG5hbWVzIG9yIGluIGRpZmZlcmVudCBsb2NhdGlvbnMuCisgICAgICAgIGlmIHRlc3QgLWYgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9QT1RGSUxFUy5pbiI7IHRoZW4KKyAgICAgICAgICBybSAtZiAiJGFjX2Rpci9QT1RGSUxFUyIKKyAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2Rpci9QT1RGSUxFUyIgfHwgZWNobyAiY3JlYXRpbmcgJGFjX2Rpci9QT1RGSUxFUyIKKyAgICAgICAgICBjYXQgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9QT1RGSUxFUy5pbiIgfCBzZWQgLWUgIi9eIy9kIiAtZSAiL15bIAldKlwkL2QiIC1lICJzLC4qLCAgICAgJHRvcF9zcmNkaXIvJiBcXFxcLCIgfCBzZWQgLWUgIlwkcy9cKC4qXCkgXFxcXC9cMS8iID4gIiRhY19kaXIvUE9URklMRVMiCisgICAgICAgICAgUE9NQUtFRklMRURFUFM9IlBPVEZJTEVTLmluIgorICAgICAgICAgICMgQUxMX0xJTkdVQVMsIFBPRklMRVMsIFVQREFURVBPRklMRVMsIERVTU1ZUE9GSUxFUywgR01PRklMRVMgZGVwZW5kCisgICAgICAgICAgIyBvbiAkYWNfZGlyIGJ1dCBkb24ndCBkZXBlbmQgb24gdXNlci1zcGVjaWZpZWQgY29uZmlndXJhdGlvbgorICAgICAgICAgICMgcGFyYW1ldGVycy4KKyAgICAgICAgICBpZiB0ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyI7IHRoZW4KKyAgICAgICAgICAgICMgVGhlIExJTkdVQVMgZmlsZSBjb250YWlucyB0aGUgc2V0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMuCisgICAgICAgICAgICBpZiB0ZXN0IC1uICIkT0JTT0xFVEVfQUxMX0xJTkdVQVMiOyB0aGVuCisgICAgICAgICAgICAgIHRlc3QgLW4gIiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBzZXR0aW5nIEFMTF9MSU5HVUFTIGluIGNvbmZpZ3VyZS5pbiBpcyBvYnNvbGV0ZSIgfHwgZWNobyAic2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgQUxMX0xJTkdVQVNfPWBzZWQgLWUgIi9eIy9kIiAtZSAicy8jLiovLyIgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9MSU5HVUFTImAKKyAgICAgICAgICAgICMgSGlkZSB0aGUgQUxMX0xJTkdVQVMgYXNzaWdtZW50IGZyb20gYXV0b21ha2UgPCAxLjUuCisgICAgICAgICAgICBldmFsICdBTExfTElOR1VBUycnPSRBTExfTElOR1VBU18nCisgICAgICAgICAgICBQT01BS0VGSUxFREVQUz0iJFBPTUFLRUZJTEVERVBTIExJTkdVQVMiCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgIyBUaGUgc2V0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMgd2FzIGdpdmVuIGluIGNvbmZpZ3VyZS5pbi4KKyAgICAgICAgICAgICMgSGlkZSB0aGUgQUxMX0xJTkdVQVMgYXNzaWdtZW50IGZyb20gYXV0b21ha2UgPCAxLjUuCisgICAgICAgICAgICBldmFsICdBTExfTElOR1VBUycnPSRPQlNPTEVURV9BTExfTElOR1VBUycKKyAgICAgICAgICBmaQorICAgICAgICAgICMgQ29tcHV0ZSBQT0ZJTEVTCisgICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQobGFuZykucG8pCisgICAgICAgICAgIyBDb21wdXRlIFVQREFURVBPRklMRVMKKyAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLnBvLXVwZGF0ZSkKKyAgICAgICAgICAjIENvbXB1dGUgRFVNTVlQT0ZJTEVTCisgICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5ub3ApCisgICAgICAgICAgIyBDb21wdXRlIEdNT0ZJTEVTCisgICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQobGFuZykuZ21vKQorICAgICAgICAgIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCisgICAgICAgICAgICAuKSBzcmNkaXJwcmU9IDs7CisgICAgICAgICAgICAqKSBzcmNkaXJwcmU9JyQoc3JjZGlyKS8nIDs7CisgICAgICAgICAgZXNhYworICAgICAgICAgIFBPRklMRVM9CisgICAgICAgICAgVVBEQVRFUE9GSUxFUz0KKyAgICAgICAgICBEVU1NWVBPRklMRVM9CisgICAgICAgICAgR01PRklMRVM9CisgICAgICAgICAgZm9yIGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworICAgICAgICAgICAgUE9GSUxFUz0iJFBPRklMRVMgJHNyY2RpcnByZSRsYW5nLnBvIgorICAgICAgICAgICAgVVBEQVRFUE9GSUxFUz0iJFVQREFURVBPRklMRVMgJGxhbmcucG8tdXBkYXRlIgorICAgICAgICAgICAgRFVNTVlQT0ZJTEVTPSIkRFVNTVlQT0ZJTEVTICRsYW5nLm5vcCIKKyAgICAgICAgICAgIEdNT0ZJTEVTPSIkR01PRklMRVMgJHNyY2RpcnByZSRsYW5nLmdtbyIKKyAgICAgICAgICBkb25lCisgICAgICAgICAgIyBDQVRBTE9HUyBkZXBlbmRzIG9uIGJvdGggJGFjX2RpciBhbmQgdGhlIHVzZXIncyBMSU5HVUFTCisgICAgICAgICAgIyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICAgICAgICBJTlNUX0xJTkdVQVM9CisgICAgICAgICAgaWYgdGVzdCAtbiAiJEFMTF9MSU5HVUFTIjsgdGhlbgorICAgICAgICAgICAgZm9yIHByZXNlbnRsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKyAgICAgICAgICAgICAgdXNlaXQ9bm8KKyAgICAgICAgICAgICAgaWYgdGVzdCAiJVVOU0VUJSIgIT0gIiRMSU5HVUFTIjsgdGhlbgorICAgICAgICAgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRMSU5HVUFTIgorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJEFMTF9MSU5HVUFTIgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmb3IgZGVzaXJlZGxhbmcgaW4gJGRlc2lyZWRsYW5ndWFnZXM7IGRvCisgICAgICAgICAgICAgICAgIyBVc2UgdGhlIHByZXNlbnRsYW5nIGNhdGFsb2cgaWYgZGVzaXJlZGxhbmcgaXMKKyAgICAgICAgICAgICAgICAjICAgYS4gZXF1YWwgdG8gcHJlc2VudGxhbmcsIG9yCisgICAgICAgICAgICAgICAgIyAgIGIuIGEgdmFyaWFudCBvZiBwcmVzZW50bGFuZyAoYmVjYXVzZSBpbiB0aGlzIGNhc2UsCisgICAgICAgICAgICAgICAgIyAgICAgIHByZXNlbnRsYW5nIGNhbiBiZSB1c2VkIGFzIGEgZmFsbGJhY2sgZm9yIG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgIyAgICAgIHdoaWNoIGFyZSBub3QgdHJhbnNsYXRlZCBpbiB0aGUgZGVzaXJlZGxhbmcgY2F0YWxvZykuCisgICAgICAgICAgICAgICAgY2FzZSAiJGRlc2lyZWRsYW5nIiBpbgorICAgICAgICAgICAgICAgICAgIiRwcmVzZW50bGFuZyIqKSB1c2VpdD15ZXM7OworICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICBpZiB0ZXN0ICR1c2VpdCA9IHllczsgdGhlbgorICAgICAgICAgICAgICAgIElOU1RfTElOR1VBUz0iJElOU1RfTElOR1VBUyAkcHJlc2VudGxhbmciCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgZmkKKyAgICAgICAgICBDQVRBTE9HUz0KKyAgICAgICAgICBpZiB0ZXN0IC1uICIkSU5TVF9MSU5HVUFTIjsgdGhlbgorICAgICAgICAgICAgZm9yIGxhbmcgaW4gJElOU1RfTElOR1VBUzsgZG8KKyAgICAgICAgICAgICAgQ0FUQUxPR1M9IiRDQVRBTE9HUyAkbGFuZy5nbW8iCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgZmkKKyAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2Rpci9NYWtlZmlsZSIgfHwgZWNobyAiY3JlYXRpbmcgJGFjX2Rpci9NYWtlZmlsZSIKKyAgICAgICAgICBzZWQgLWUgIi9eUE9URklMRVMgPS9yICRhY19kaXIvUE9URklMRVMiIC1lICIvXiMgTWFrZXZhcnMvciAkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTWFrZXZhcnMiIC1lICJzfEBQT0ZJTEVTQHwkUE9GSUxFU3xnIiAtZSAic3xAVVBEQVRFUE9GSUxFU0B8JFVQREFURVBPRklMRVN8ZyIgLWUgInN8QERVTU1ZUE9GSUxFU0B8JERVTU1ZUE9GSUxFU3xnIiAtZSAic3xAR01PRklMRVNAfCRHTU9GSUxFU3xnIiAtZSAic3xAQ0FUQUxPR1NAfCRDQVRBTE9HU3xnIiAtZSAic3xAUE9NQUtFRklMRURFUFNAfCRQT01BS0VGSUxFREVQU3xnIiAiJGFjX2Rpci9NYWtlZmlsZS5pbiIgPiAiJGFjX2Rpci9NYWtlZmlsZSIKKyAgICAgICAgICBmb3IgZiBpbiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyIi9SdWxlcy0qOyBkbworICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGYiOyB0aGVuCisgICAgICAgICAgICAgIGNhc2UgIiRmIiBpbgorICAgICAgICAgICAgICAgICoub3JpZyB8ICouYmFrIHwgKn4pIDs7CisgICAgICAgICAgICAgICAgKikgY2F0ICIkZiIgPj4gIiRhY19kaXIvTWFrZWZpbGUiIDs7CisgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZG9uZQorICAgICAgICBmaQorICAgICAgICA7OworICAgICAgZXNhYworICAgIGRvbmUgOzsKKyAgICAiJGFjX3N0ZGludF9oIjpDKQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjcmVhdGluZyAkYWNfc3RkaW50X2ggOiAkX2FjX3N0ZGludF9oIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19zdGRpbnRfaCA6ICRfYWNfc3RkaW50X2giID4mNjt9CithY19zdGRpbnQ9JHRtcC9fc3RkaW50LmgKKworZWNobyAiI2lmbmRlZiIgJF9hY19zdGRpbnRfaCA+JGFjX3N0ZGludAorZWNobyAiI2RlZmluZSIgJF9hY19zdGRpbnRfaCAiMSIgPj4kYWNfc3RkaW50CitlY2hvICIjaWZuZGVmIiBfR0VORVJBVEVEX1NURElOVF9IID4+JGFjX3N0ZGludAorZWNobyAiI2RlZmluZSIgX0dFTkVSQVRFRF9TVERJTlRfSCAnIickUEFDS0FHRSAkVkVSU0lPTiciJyA+PiRhY19zdGRpbnQKK2VjaG8gIi8qIGdlbmVyYXRlZCAkYWNfY3Zfc3RkaW50X21lc3NhZ2UgKi8iID4+JGFjX3N0ZGludAoraWYgdGVzdCAiXyRhY19jdl9oZWFkZXJfc3RkaW50X3QiICE9ICJfIiA7IHRoZW4KK2VjaG8gIiNkZWZpbmUgX1NURElOVF9IQVZFX1NURElOVF9IIiAiMSIgPj4kYWNfc3RkaW50CitlY2hvICIjaW5jbHVkZSA8c3RkaW50Lmg+IiA+PiRhY19zdGRpbnQKK2VjaG8gIiNlbmRpZiIgPj4kYWNfc3RkaW50CitlY2hvICIjZW5kaWYiID4+JGFjX3N0ZGludAorZWxzZQorCitjYXQgPj4kYWNfc3RkaW50IDw8U1RESU5UX0VPRgorCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uIHNob3J0Y2lyY3VpdCBwYXJ0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAqLworCisjaWYgZGVmaW5lZCBIQVZFX1NURElOVF9IIHx8IGRlZmluZWQgX1NURElOVF9IQVZFX1NURElOVF9ICisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZWxzZQorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLiBjb25maWd1cmVkIHBhcnQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAqLworCitTVERJTlRfRU9GCisKK2VjaG8gIi8qIHdoZXRoZXIgd2UgaGF2ZSBhIEM5OSBjb21wYXRpYmxlIHN0ZGludCBoZWFkZXIgZmlsZSAqLyIgPj4kYWNfc3RkaW50CitpZiB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfeCIgIT0gIl8iIDsgdGhlbgorICBhY19oZWFkZXI9IiRhY19jdl9oZWFkZXJfc3RkaW50X3giCisgIGVjaG8gIiNkZWZpbmUgX1NURElOVF9IRUFERVJfSU5UUFRSIiAnIiciJGFjX2hlYWRlciInIicgPj4kYWNfc3RkaW50CitlbHNlCisgIGVjaG8gIi8qICN1bmRlZiBfU1RESU5UX0hFQURFUl9JTlRQVFIgKi8iID4+JGFjX3N0ZGludAorZmkKKworZWNobyAiLyogd2hldGhlciB3ZSBoYXZlIGEgQzk2IGNvbXBhdGlibGUgaW50dHlwZXMgaGVhZGVyIGZpbGUgKi8iID4+JGFjX3N0ZGludAoraWYgIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF9vIiAhPSAiXyIgOyB0aGVuCisgIGFjX2hlYWRlcj0iJGFjX2N2X2hlYWRlcl9zdGRpbnRfbyIKKyAgZWNobyAiI2RlZmluZSBfU1RESU5UX0hFQURFUl9VSU5UMzIiICciJyIkYWNfaGVhZGVyIiciJyA+PiRhY19zdGRpbnQKK2Vsc2UKKyAgZWNobyAiLyogI3VuZGVmIF9TVERJTlRfSEVBREVSX1VJTlQzMiAqLyIgPj4kYWNfc3RkaW50CitmaQorCitlY2hvICIvKiB3aGV0aGVyIHdlIGhhdmUgYSBCU0QgY29tcGF0aWJsZSBpbmV0IHR5cGVzIGhlYWRlciAqLyIgPj4kYWNfc3RkaW50CitpZiAgdGVzdCAiXyRhY19jdl9oZWFkZXJfc3RkaW50X3UiICE9ICJfIiA7IHRoZW4KKyAgYWNfaGVhZGVyPSIkYWNfY3ZfaGVhZGVyX3N0ZGludF91IgorICBlY2hvICIjZGVmaW5lIF9TVERJTlRfSEVBREVSX1VfSU5UMzIiICciJyIkYWNfaGVhZGVyIiciJyA+PiRhY19zdGRpbnQKK2Vsc2UKKyAgZWNobyAiLyogI3VuZGVmIF9TVERJTlRfSEVBREVSX1VfSU5UMzIgKi8iID4+JGFjX3N0ZGludAorZmkKKworZWNobyAiIiA+PiRhY19zdGRpbnQKKworaWYgdGVzdCAiXyRhY19oZWFkZXIiICE9ICJfIiA7IHRoZW4gaWYgdGVzdCAiJGFjX2hlYWRlciIgIT0gInN0ZGRlZi5oIiA7IHRoZW4KKyAgZWNobyAiI2luY2x1ZGUgPCRhY19oZWFkZXI+IiA+PiRhY19zdGRpbnQKKyAgZWNobyAiIiA+PiRhY19zdGRpbnQKK2ZpIGZpCisKK2VjaG8gIi8qIHdoaWNoIDY0Yml0IHR5cGVkZWYgaGFzIGJlZW4gZm91bmQgKi8iID4+JGFjX3N0ZGludAoraWYgdGVzdCAiJGFjX2N2X3R5cGVfdWludDY0X3QiID0gInllcyIgOyB0aGVuCitlY2hvICIjZGVmaW5lICAgX1NURElOVF9IQVZFX1VJTlQ2NF9UIiAiMSIgID4+JGFjX3N0ZGludAorZWxzZQorZWNobyAiLyogI3VuZGVmIF9TVERJTlRfSEFWRV9VSU5UNjRfVCAqLyIgPj4kYWNfc3RkaW50CitmaQoraWYgdGVzdCAiJGFjX2N2X3R5cGVfdV9pbnQ2NF90IiA9ICJ5ZXMiIDsgdGhlbgorZWNobyAiI2RlZmluZSAgIF9TVERJTlRfSEFWRV9VX0lOVDY0X1QiICIxIiAgPj4kYWNfc3RkaW50CitlbHNlCitlY2hvICIvKiAjdW5kZWYgX1NURElOVF9IQVZFX1VfSU5UNjRfVCAqLyIgPj4kYWNfc3RkaW50CitmaQorZWNobyAiIiA+PiRhY19zdGRpbnQKKworZWNobyAiLyogd2hpY2ggdHlwZSBtb2RlbCBoYXMgYmVlbiBkZXRlY3RlZCAqLyIgPj4kYWNfc3RkaW50CitpZiB0ZXN0ICJfJGFjX2N2X2NoYXJfZGF0YV9tb2RlbCIgIT0gIl8iIDsgdGhlbgorZWNobyAiI2RlZmluZSAgIF9TVERJTlRfQ0hBUl9NT0RFTCIgIiRhY19jdl9jaGFyX2RhdGFfbW9kZWwiID4+JGFjX3N0ZGludAorZWNobyAiI2RlZmluZSAgIF9TVERJTlRfTE9OR19NT0RFTCIgIiRhY19jdl9sb25nX2RhdGFfbW9kZWwiID4+JGFjX3N0ZGludAorZWxzZQorZWNobyAiLyogI3VuZGVmIF9TVERJTlRfQ0hBUl9NT0RFTCAvLyBza2lwcGVkICovIiA+PiRhY19zdGRpbnQKK2VjaG8gIi8qICN1bmRlZiBfU1RESU5UX0xPTkdfTU9ERUwgLy8gc2tpcHBlZCAqLyIgPj4kYWNfc3RkaW50CitmaQorZWNobyAiIiA+PiRhY19zdGRpbnQKKworZWNobyAiLyogd2hldGhlciBpbnRfbGVhc3QgdHlwZXMgd2VyZSBkZXRlY3RlZCAqLyIgPj4kYWNfc3RkaW50CitpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9pbnRfbGVhc3QzMl90IiA9ICJ5ZXMiOyB0aGVuCitlY2hvICIjZGVmaW5lICAgX1NURElOVF9IQVZFX0lOVF9MRUFTVDMyX1QiICIxIiAgPj4kYWNfc3RkaW50CitlbHNlCitlY2hvICIvKiAjdW5kZWYgX1NURElOVF9IQVZFX0lOVF9MRUFTVDMyX1QgKi8iID4+JGFjX3N0ZGludAorZmkKK2VjaG8gIi8qIHdoZXRoZXIgaW50X2Zhc3QgdHlwZXMgd2VyZSBkZXRlY3RlZCAqLyIgPj4kYWNfc3RkaW50CitpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9pbnRfZmFzdDMyX3QiID0gInllcyI7IHRoZW4KK2VjaG8gIiNkZWZpbmUgICBfU1RESU5UX0hBVkVfSU5UX0ZBU1QzMl9UIiAiMSIgPj4kYWNfc3RkaW50CitlbHNlCitlY2hvICIvKiAjdW5kZWYgX1NURElOVF9IQVZFX0lOVF9GQVNUMzJfVCAqLyIgPj4kYWNfc3RkaW50CitmaQorZWNobyAiLyogd2hldGhlciBpbnRtYXhfdCB0eXBlIHdhcyBkZXRlY3RlZCAqLyIgPj4kYWNfc3RkaW50CitpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9pbnRtYXhfdCIgPSAieWVzIjsgdGhlbgorZWNobyAiI2RlZmluZSAgIF9TVERJTlRfSEFWRV9JTlRNQVhfVCIgIjEiID4+JGFjX3N0ZGludAorZWxzZQorZWNobyAiLyogI3VuZGVmIF9TVERJTlRfSEFWRV9JTlRNQVhfVCAqLyIgPj4kYWNfc3RkaW50CitmaQorZWNobyAiIiA+PiRhY19zdGRpbnQKKworICBjYXQgPj4kYWNfc3RkaW50IDw8U1RESU5UX0VPRgorLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4gZGV0ZWN0aW9ucyBwYXJ0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KKworLyogd2hldGhlciB3ZSBuZWVkIHRvIGRlZmluZSBiaXRzcGVjaWZpYyB0eXBlcyBmcm9tIGNvbXBpbGVyIGJhc2UgdHlwZXMgKi8KKyNpZm5kZWYgX1NURElOVF9IRUFERVJfSU5UUFRSCisjaWZuZGVmIF9TVERJTlRfSEVBREVSX1VJTlQzMgorI2lmbmRlZiBfU1RESU5UX0hFQURFUl9VX0lOVDMyCisjZGVmaW5lIF9TVERJTlRfTkVFRF9JTlRfTU9ERUxfVAorI2Vsc2UKKyNkZWZpbmUgX1NURElOVF9IQVZFX1VfSU5UX1RZUEVTCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfU1RESU5UX0hBVkVfVV9JTlRfVFlQRVMKKyN1bmRlZiBfU1RESU5UX05FRURfSU5UX01PREVMX1QKKyNlbmRpZgorCisjaWZkZWYgIF9TVERJTlRfQ0hBUl9NT0RFTAorI2lmICAgICBfU1RESU5UX0NIQVJfTU9ERUwrMCA9PSAxMjIgfHwgX1NURElOVF9DSEFSX01PREVMKzAgPT0gMTI0CisjaWZuZGVmIF9TVERJTlRfQllURV9NT0RFTAorI2RlZmluZSBfU1RESU5UX0JZVEVfTU9ERUwgMTIKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBfU1RESU5UX0hBVkVfSU5UX0xFQVNUMzJfVAorI2RlZmluZSBfU1RESU5UX05FRURfSU5UX0xFQVNUX1QKKyNlbmRpZgorCisjaWZuZGVmIF9TVERJTlRfSEFWRV9JTlRfRkFTVDMyX1QKKyNkZWZpbmUgX1NURElOVF9ORUVEX0lOVF9GQVNUX1QKKyNlbmRpZgorCisjaWZuZGVmIF9TVERJTlRfSEVBREVSX0lOVFBUUgorI2RlZmluZSBfU1RESU5UX05FRURfSU5UUFRSX1QKKyNpZm5kZWYgX1NURElOVF9IQVZFX0lOVE1BWF9UCisjZGVmaW5lIF9TVERJTlRfTkVFRF9JTlRNQVhfVAorI2VuZGlmCisjZW5kaWYKKworCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLiBkZWZpbml0aW9uIHBhcnQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAqLworCisvKiBzb21lIHN5c3RlbSBoZWFkZXJzIGhhdmUgZ29vZCB1aW50NjRfdCAqLworI2lmbmRlZiBfSEFWRV9VSU5UNjRfVAorI2lmICAgICBkZWZpbmVkIF9TVERJTlRfSEFWRV9VSU5UNjRfVCAgfHwgZGVmaW5lZCBIQVZFX1VJTlQ2NF9UCisjZGVmaW5lIF9IQVZFX1VJTlQ2NF9UCisjZWxpZiAgIGRlZmluZWQgX1NURElOVF9IQVZFX1VfSU5UNjRfVCB8fCBkZWZpbmVkIEhBVkVfVV9JTlQ2NF9UCisjZGVmaW5lIF9IQVZFX1VJTlQ2NF9UCit0eXBlZGVmIHVfaW50NjRfdCB1aW50NjRfdDsKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgX0hBVkVfVUlOVDY0X1QKKy8qIC4uIGhlcmUgYXJlIHNvbWUgY29tbW9uIGhldXJpc3RpY3MgdXNpbmcgY29tcGlsZXIgcnVudGltZSBzcGVjaWZpY3MgKi8KKyNpZiBkZWZpbmVkIF9fU1REQ19WRVJTSU9OX18gJiYgZGVmaW5lZCBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKyNkZWZpbmUgX0hBVkVfVUlOVDY0X1QKKyNkZWZpbmUgX0hBVkVfTE9OR0xPTkdfVUlOVDY0X1QKK3R5cGVkZWYgbG9uZyBsb25nIGludDY0X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1aW50NjRfdDsKKworI2VsaWYgIWRlZmluZWQgX19TVFJJQ1RfQU5TSV9fCisjaWYgZGVmaW5lZCBfTVNDX1ZFUiB8fCBkZWZpbmVkIF9fV0FUQ09NQ19fIHx8IGRlZmluZWQgX19CT1JMQU5EQ19fCisjZGVmaW5lIF9IQVZFX1VJTlQ2NF9UCit0eXBlZGVmIF9faW50NjQgaW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCB1aW50NjRfdDsKKworI2VsaWYgZGVmaW5lZCBfX0dOVUNfXyB8fCBkZWZpbmVkIF9fTVdFUktTX18gfHwgZGVmaW5lZCBfX0VMRl9fCisvKiBub3RlOiBhbGwgRUxGLXN5c3RlbXMgc2VlbSB0byBoYXZlIGxvZmYtc3VwcG9ydCB3aGljaCBuZWVkcyA2NC1iaXQgKi8KKyNpZiAhZGVmaW5lZCBfTk9fTE9OR0xPTkcKKyNkZWZpbmUgX0hBVkVfVUlOVDY0X1QKKyNkZWZpbmUgX0hBVkVfTE9OR0xPTkdfVUlOVDY0X1QKK3R5cGVkZWYgbG9uZyBsb25nIGludDY0X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1aW50NjRfdDsKKyNlbmRpZgorCisjZWxpZiBkZWZpbmVkIF9fYWxwaGEgfHwgKGRlZmluZWQgX19taXBzICYmIGRlZmluZWQgX0FCSU4zMikKKyNpZiAhZGVmaW5lZCBfTk9fTE9OR0xPTkcKK3R5cGVkZWYgbG9uZyBpbnQ2NF90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHVpbnQ2NF90OworI2VuZGlmCisgIC8qIGNvbXBpbGVyL2NwdSB0eXBlIHRvIGRlZmluZSBpbnQ2NF90ICovCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIF9TVERJTlRfSEFWRV9VX0lOVF9UWVBFUworLyogaW50OF90IGludDE2X3QgaW50MzJfdCBkZWZpbmVkIGJ5IGluZXQgY29kZSwgcmVkZWNsYXJlIHRoZSB1X2ludFhYIHR5cGVzICovCit0eXBlZGVmIHVfaW50OF90IHVpbnQ4X3Q7Cit0eXBlZGVmIHVfaW50MTZfdCB1aW50MTZfdDsKK3R5cGVkZWYgdV9pbnQzMl90IHVpbnQzMl90OworCisvKiBnbGliYyBjb21wYXRpYmlsaXR5ICovCisjaWZuZGVmIF9faW50OF90X2RlZmluZWQKKyNkZWZpbmUgX19pbnQ4X3RfZGVmaW5lZAorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIF9TVERJTlRfTkVFRF9JTlRfTU9ERUxfVAorLyogd2UgbXVzdCBndWVzcyBhbGwgdGhlIGJhc2ljIHR5cGVzLiBBcGFydCBmcm9tIGJ5dGUtYWRyZXNzYWJsZSBzeXN0ZW0sICovCisvKiB0aGVyZSBhIGZldyAzMi1iaXQtb25seSBkc3Atc3lzdGVtcyB0aGF0IHdlIGd1YXJkIHdpdGggQllURV9NT0RFTCA4LX0gKi8KKy8qIChidHcsIHRob3NlIG5pYmJsZS1hZGRyZXNzYWJsZSBzeXN0ZW1zIGFyZSB3YXkgb2ZmLCBvciBzbyB3ZSBhc3N1bWUpICovCisKKworI2lmIGRlZmluZWQgX1NURElOVF9CWVRFX01PREVMCisjaWYgX1NURElOVF9MT05HX01PREVMKzAgPT0gMjQyCisvKiAyOjQ6MiA9ICBJUDE2ID0gYSBub3JtYWwgMTYtYml0IHN5c3RlbSAgICAgICAgICAgICAgICAqLwordHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgdWludDhfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgIHVpbnQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nICAgdWludDMyX3Q7CisjaWZuZGVmIF9faW50OF90X2RlZmluZWQKKyNkZWZpbmUgX19pbnQ4X3RfZGVmaW5lZAordHlwZWRlZiAgICAgICAgICBjaGFyICAgIGludDhfdDsKK3R5cGVkZWYgICAgICAgICAgc2hvcnQgICBpbnQxNl90OwordHlwZWRlZiAgICAgICAgICBsb25nICAgIGludDMyX3Q7CisjZW5kaWYKKyNlbGlmIF9TVERJTlRfTE9OR19NT0RFTCswID09IDI0NCB8fCBfU1RESU5UX0xPTkdfTU9ERUwgPT0gNDQ0CisvKiAyOjQ6NCA9ICBMUDMyID0gYSAzMi1iaXQgc3lzdGVtIGRlcml2ZWQgZnJvbSBhIDE2LWJpdCAqLworLyogNDo0OjQgPSBJTFAzMiA9IGEgbm9ybWFsIDMyLWJpdCBzeXN0ZW0gICAgICAgICAgICAgICAgKi8KK3R5cGVkZWYgdW5zaWduZWQgY2hhciAgIHVpbnQ4X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICB1aW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgIHVpbnQzMl90OworI2lmbmRlZiBfX2ludDhfdF9kZWZpbmVkCisjZGVmaW5lIF9faW50OF90X2RlZmluZWQKK3R5cGVkZWYgICAgICAgICAgY2hhciAgICBpbnQ4X3Q7Cit0eXBlZGVmICAgICAgICAgIHNob3J0ICAgaW50MTZfdDsKK3R5cGVkZWYgICAgICAgICAgaW50ICAgICBpbnQzMl90OworI2VuZGlmCisjZWxpZiBfU1RESU5UX0xPTkdfTU9ERUwrMCA9PSA0ODQgfHwgX1NURElOVF9MT05HX01PREVMKzAgPT0gNDg4CisvKiA0Ojg6NCA9ICBJUDMyID0gYSAzMi1iaXQgc3lzdGVtIHByZXBhcmVkIGZvciA2NC1iaXQgICAgKi8KKy8qIDQ6ODo4ID0gIExQNjQgPSBhIG5vcm1hbCA2NC1iaXQgc3lzdGVtICAgICAgICAgICAgICAgICAqLwordHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgdWludDhfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgIHVpbnQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgdWludDMyX3Q7CisjaWZuZGVmIF9faW50OF90X2RlZmluZWQKKyNkZWZpbmUgX19pbnQ4X3RfZGVmaW5lZAordHlwZWRlZiAgICAgICAgICBjaGFyICAgIGludDhfdDsKK3R5cGVkZWYgICAgICAgICAgc2hvcnQgICBpbnQxNl90OwordHlwZWRlZiAgICAgICAgICBpbnQgICAgIGludDMyX3Q7CisjZW5kaWYKKy8qIHRoaXMgc3lzdGVtIGhhcyBhICJsb25nIiBvZiA2NGJpdCAqLworI2lmbmRlZiBfSEFWRV9VSU5UNjRfVAorI2RlZmluZSBfSEFWRV9VSU5UNjRfVAordHlwZWRlZiB1bnNpZ25lZCBsb25nICAgdWludDY0X3Q7Cit0eXBlZGVmICAgICAgICAgIGxvbmcgICAgaW50NjRfdDsKKyNlbmRpZgorI2VsaWYgX1NURElOVF9MT05HX01PREVMKzAgPT0gNDQ4CisvKiAgICAgIExMUDY0ICAgYSA2NC1iaXQgc3lzdGVtIGRlcml2ZWQgZnJvbSBhIDMyLWJpdCBzeXN0ZW0gKi8KK3R5cGVkZWYgdW5zaWduZWQgY2hhciAgIHVpbnQ4X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICB1aW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgIHVpbnQzMl90OworI2lmbmRlZiBfX2ludDhfdF9kZWZpbmVkCisjZGVmaW5lIF9faW50OF90X2RlZmluZWQKK3R5cGVkZWYgICAgICAgICAgY2hhciAgICBpbnQ4X3Q7Cit0eXBlZGVmICAgICAgICAgIHNob3J0ICAgaW50MTZfdDsKK3R5cGVkZWYgICAgICAgICAgaW50ICAgICBpbnQzMl90OworI2VuZGlmCisvKiBhc3N1bWluZyB0aGUgc3lzdGVtIGhhcyBhICJsb25nIGxvbmciICovCisjaWZuZGVmIF9IQVZFX1VJTlQ2NF9UCisjZGVmaW5lIF9IQVZFX1VJTlQ2NF9UCisjZGVmaW5lIF9IQVZFX0xPTkdMT05HX1VJTlQ2NF9UCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1aW50NjRfdDsKK3R5cGVkZWYgICAgICAgICAgbG9uZyBsb25nICBpbnQ2NF90OworI2VuZGlmCisjZWxzZQorI2RlZmluZSBfU1RESU5UX05PX0lOVDMyX1QKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgX1NURElOVF9OT19JTlQ4X1QKKyNkZWZpbmUgX1NURElOVF9OT19JTlQzMl9UCisjZW5kaWYKKyNlbmRpZgorCisvKgorICogcXVvdGUgZnJvbSBTdW5PUy01Ljggc3lzL2ludHR5cGVzLmg6CisgKiBVc2UgYXQgeW91ciBvd24gcmlzay4gIEFzIG9mIEZlYnJ1YXJ5IDE5OTYsIHRoZSBjb21taXR0ZWUgaXMgc3F1YXJlbHkKKyAqIGJlaGluZCB0aGUgZml4ZWQgc2l6ZWQgdHlwZXM7IHRoZSAibGVhc3QiIGFuZCAiZmFzdCIgdHlwZXMgYXJlIHN0aWxsIGJlaW5nCisgKiBkaXNjdXNzZWQuICBUaGUgcHJvYmFiaWxpdHkgdGhhdCB0aGUgImZhc3QiIHR5cGVzIG1heSBiZSByZW1vdmVkIGJlZm9yZQorICogdGhlIHN0YW5kYXJkIGlzIGZpbmFsaXplZCBpcyBoaWdoIGVub3VnaCB0aGF0IHRoZXkgYXJlIG5vdCBjdXJyZW50bHkKKyAqIGltcGxlbWVudGVkLgorICovCisKKyNpZiBkZWZpbmVkIF9TVERJTlRfTkVFRF9JTlRfTEVBU1RfVAordHlwZWRlZiAgaW50OF90ICAgIGludF9sZWFzdDhfdDsKK3R5cGVkZWYgIGludDE2X3QgICBpbnRfbGVhc3QxNl90OwordHlwZWRlZiAgaW50MzJfdCAgIGludF9sZWFzdDMyX3Q7CisjaWZkZWYgX0hBVkVfVUlOVDY0X1QKK3R5cGVkZWYgIGludDY0X3QgICBpbnRfbGVhc3Q2NF90OworI2VuZGlmCisKK3R5cGVkZWYgdWludDhfdCAgIHVpbnRfbGVhc3Q4X3Q7Cit0eXBlZGVmIHVpbnQxNl90ICB1aW50X2xlYXN0MTZfdDsKK3R5cGVkZWYgdWludDMyX3QgIHVpbnRfbGVhc3QzMl90OworI2lmZGVmIF9IQVZFX1VJTlQ2NF9UCit0eXBlZGVmIHVpbnQ2NF90ICB1aW50X2xlYXN0NjRfdDsKKyNlbmRpZgorICAvKiBsZWFzdCB0eXBlcyAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkIF9TVERJTlRfTkVFRF9JTlRfRkFTVF9UCit0eXBlZGVmICBpbnQ4X3QgICAgaW50X2Zhc3Q4X3Q7Cit0eXBlZGVmICBpbnQgICAgICAgaW50X2Zhc3QxNl90OwordHlwZWRlZiAgaW50MzJfdCAgIGludF9mYXN0MzJfdDsKKyNpZmRlZiBfSEFWRV9VSU5UNjRfVAordHlwZWRlZiAgaW50NjRfdCAgIGludF9mYXN0NjRfdDsKKyNlbmRpZgorCit0eXBlZGVmIHVpbnQ4X3QgICB1aW50X2Zhc3Q4X3Q7Cit0eXBlZGVmIHVuc2lnbmVkICB1aW50X2Zhc3QxNl90OwordHlwZWRlZiB1aW50MzJfdCAgdWludF9mYXN0MzJfdDsKKyNpZmRlZiBfSEFWRV9VSU5UNjRfVAordHlwZWRlZiB1aW50NjRfdCAgdWludF9mYXN0NjRfdDsKKyNlbmRpZgorICAvKiBmYXN0IHR5cGVzICovCisjZW5kaWYKKworI2lmZGVmIF9TVERJTlRfTkVFRF9JTlRNQVhfVAorI2lmZGVmIF9IQVZFX1VJTlQ2NF9UCit0eXBlZGVmICBpbnQ2NF90ICAgICAgIGludG1heF90OwordHlwZWRlZiB1aW50NjRfdCAgICAgIHVpbnRtYXhfdDsKKyNlbHNlCit0eXBlZGVmICAgICAgICAgIGxvbmcgIGludG1heF90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHVpbnRtYXhfdDsKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfU1RESU5UX05FRURfSU5UUFRSX1QKKyNpZm5kZWYgX19pbnRwdHJfdF9kZWZpbmVkCisjZGVmaW5lIF9faW50cHRyX3RfZGVmaW5lZAorLyogd2UgZW5jb3VyYWdlIHVzaW5nICJsb25nIiB0byBzdG9yZSBwb2ludGVyIHZhbHVlcywgbmV2ZXIgdXNlICJpbnQiICEgKi8KKyNpZiAgIF9TVERJTlRfTE9OR19NT0RFTCswID09IDI0MiB8fCBfU1RESU5UX0xPTkdfTU9ERUwrMCA9PSA0ODQKK3R5cGVkZWYgIHVuc2lnbmVkIGludCAgIHVpbnRwdHJfdDsKK3R5cGVkZWYgICAgICAgICAgIGludCAgICBpbnRwdHJfdDsKKyNlbGlmIF9TVERJTlRfTE9OR19NT0RFTCswID09IDI0NCB8fCBfU1RESU5UX0xPTkdfTU9ERUwrMCA9PSA0NDQKK3R5cGVkZWYgIHVuc2lnbmVkIGxvbmcgIHVpbnRwdHJfdDsKK3R5cGVkZWYgICAgICAgICAgIGxvbmcgICBpbnRwdHJfdDsKKyNlbGlmIF9TVERJTlRfTE9OR19NT0RFTCswID09IDQ0OCAmJiBkZWZpbmVkIF9IQVZFX1VJTlQ2NF9UCit0eXBlZGVmICAgICAgICB1aW50NjRfdCB1aW50cHRyX3Q7Cit0eXBlZGVmICAgICAgICAgaW50NjRfdCAgaW50cHRyX3Q7CisjZWxzZSAvKiBtYXRjaGVzIHR5cGljYWwgc3lzdGVtIHR5cGVzIElMUDMyIGFuZCBMUDY0IC0gYnV0IG5vdCBJUDE2IG9yIExMUDY0ICovCit0eXBlZGVmICB1bnNpZ25lZCBsb25nICB1aW50cHRyX3Q7Cit0eXBlZGVmICAgICAgICAgICBsb25nICAgaW50cHRyX3Q7CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKKy8qIFRoZSBJU08gQzk5IHN0YW5kYXJkIHNwZWNpZmllcyB0aGF0IGluIEMrKyBpbXBsZW1lbnRhdGlvbnMgdGhlc2UKKyAgIHNob3VsZCBvbmx5IGJlIGRlZmluZWQgaWYgZXhwbGljaXRseSByZXF1ZXN0ZWQuICAqLworI2lmICFkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX19TVERDX0NPTlNUQU5UX01BQ1JPUworI2lmbmRlZiBVSU5UMzJfQworCisvKiBTaWduZWQuICAqLworIyBkZWZpbmUgSU5UOF9DKGMpICAgICAgYworIyBkZWZpbmUgSU5UMTZfQyhjKSAgICAgYworIyBkZWZpbmUgSU5UMzJfQyhjKSAgICAgYworIyBpZmRlZiBfSEFWRV9MT05HTE9OR19VSU5UNjRfVAorIyAgZGVmaW5lIElOVDY0X0MoYykgICAgYyAjIyBMCisjIGVsc2UKKyMgIGRlZmluZSBJTlQ2NF9DKGMpICAgIGMgIyMgTEwKKyMgZW5kaWYKKworLyogVW5zaWduZWQuICAqLworIyBkZWZpbmUgVUlOVDhfQyhjKSAgICAgYyAjIyBVCisjIGRlZmluZSBVSU5UMTZfQyhjKSAgICBjICMjIFUKKyMgZGVmaW5lIFVJTlQzMl9DKGMpICAgIGMgIyMgVQorIyBpZmRlZiBfSEFWRV9MT05HTE9OR19VSU5UNjRfVAorIyAgZGVmaW5lIFVJTlQ2NF9DKGMpICAgYyAjIyBVTAorIyBlbHNlCisjICBkZWZpbmUgVUlOVDY0X0MoYykgICBjICMjIFVMTAorIyBlbmRpZgorCisvKiBNYXhpbWFsIHR5cGUuICAqLworIyBpZmRlZiBfSEFWRV9MT05HTE9OR19VSU5UNjRfVAorIyAgZGVmaW5lIElOVE1BWF9DKGMpICAgYyAjIyBMCisjICBkZWZpbmUgVUlOVE1BWF9DKGMpICBjICMjIFVMCisjIGVsc2UKKyMgIGRlZmluZSBJTlRNQVhfQyhjKSAgIGMgIyMgTEwKKyMgIGRlZmluZSBVSU5UTUFYX0MoYykgIGMgIyMgVUxMCisjIGVuZGlmCisKKyAgLyogbGl0ZXJhbG51bWJlcnMgKi8KKyNlbmRpZgorI2VuZGlmCisKKy8qIFRoZXNlIGxpbWl0cyBhcmUgbWVyaWx5IHRob3NlIG9mIGEgdHdvIGNvbXBsZW1lbnQgYnl0ZS1vcmllbnRlZCBzeXN0ZW0gKi8KKworLyogTWluaW11bSBvZiBzaWduZWQgaW50ZWdyYWwgdHlwZXMuICAqLworIyBkZWZpbmUgSU5UOF9NSU4gICAgICAgICAgICAgICAoLTEyOCkKKyMgZGVmaW5lIElOVDE2X01JTiAgICAgICAgICAgICAgKC0zMjc2Ny0xKQorIyBkZWZpbmUgSU5UMzJfTUlOICAgICAgICAgICAgICAoLTIxNDc0ODM2NDctMSkKKyMgZGVmaW5lIElOVDY0X01JTiAgICAgICAgICAgICAgKC1fX0lOVDY0X0MoOTIyMzM3MjAzNjg1NDc3NTgwNyktMSkKKy8qIE1heGltdW0gb2Ygc2lnbmVkIGludGVncmFsIHR5cGVzLiAgKi8KKyMgZGVmaW5lIElOVDhfTUFYICAgICAgICAgICAgICAgKDEyNykKKyMgZGVmaW5lIElOVDE2X01BWCAgICAgICAgICAgICAgKDMyNzY3KQorIyBkZWZpbmUgSU5UMzJfTUFYICAgICAgICAgICAgICAoMjE0NzQ4MzY0NykKKyMgZGVmaW5lIElOVDY0X01BWCAgICAgICAgICAgICAgKF9fSU5UNjRfQyg5MjIzMzcyMDM2ODU0Nzc1ODA3KSkKKworLyogTWF4aW11bSBvZiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlcy4gICovCisjIGRlZmluZSBVSU5UOF9NQVggICAgICAgICAgICAgICgyNTUpCisjIGRlZmluZSBVSU5UMTZfTUFYICAgICAgICAgICAgICg2NTUzNSkKKyMgZGVmaW5lIFVJTlQzMl9NQVggICAgICAgICAgICAgKDQyOTQ5NjcyOTVVKQorIyBkZWZpbmUgVUlOVDY0X01BWCAgICAgICAgICAgICAoX19VSU5UNjRfQygxODQ0Njc0NDA3MzcwOTU1MTYxNSkpCisKKy8qIE1pbmltdW0gb2Ygc2lnbmVkIGludGVncmFsIHR5cGVzIGhhdmluZyBhIG1pbmltdW0gc2l6ZS4gICovCisjIGRlZmluZSBJTlRfTEVBU1Q4X01JTiAgICAgICAgIElOVDhfTUlOCisjIGRlZmluZSBJTlRfTEVBU1QxNl9NSU4gICAgICAgIElOVDE2X01JTgorIyBkZWZpbmUgSU5UX0xFQVNUMzJfTUlOICAgICAgICBJTlQzMl9NSU4KKyMgZGVmaW5lIElOVF9MRUFTVDY0X01JTiAgICAgICAgSU5UNjRfTUlOCisvKiBNYXhpbXVtIG9mIHNpZ25lZCBpbnRlZ3JhbCB0eXBlcyBoYXZpbmcgYSBtaW5pbXVtIHNpemUuICAqLworIyBkZWZpbmUgSU5UX0xFQVNUOF9NQVggICAgICAgICBJTlQ4X01BWAorIyBkZWZpbmUgSU5UX0xFQVNUMTZfTUFYICAgICAgICBJTlQxNl9NQVgKKyMgZGVmaW5lIElOVF9MRUFTVDMyX01BWCAgICAgICAgSU5UMzJfTUFYCisjIGRlZmluZSBJTlRfTEVBU1Q2NF9NQVggICAgICAgIElOVDY0X01BWAorCisvKiBNYXhpbXVtIG9mIHVuc2lnbmVkIGludGVncmFsIHR5cGVzIGhhdmluZyBhIG1pbmltdW0gc2l6ZS4gICovCisjIGRlZmluZSBVSU5UX0xFQVNUOF9NQVggICAgICAgIFVJTlQ4X01BWAorIyBkZWZpbmUgVUlOVF9MRUFTVDE2X01BWCAgICAgICBVSU5UMTZfTUFYCisjIGRlZmluZSBVSU5UX0xFQVNUMzJfTUFYICAgICAgIFVJTlQzMl9NQVgKKyMgZGVmaW5lIFVJTlRfTEVBU1Q2NF9NQVggICAgICAgVUlOVDY0X01BWAorCisgIC8qIHNob3J0Y2lyY3VpdCovCisjZW5kaWYKKyAgLyogb25jZSAqLworI2VuZGlmCisjZW5kaWYKK1NURElOVF9FT0YKK2ZpCisgICAgaWYgY21wIC1zICRhY19zdGRpbnRfaCAkYWNfc3RkaW50IDI+L2Rldi9udWxsOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY19zdGRpbnRfaCBpcyB1bmNoYW5nZWQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogJGFjX3N0ZGludF9oIGlzIHVuY2hhbmdlZCIgPiY2O30KKyAgICBlbHNlCisgICAgICBhY19kaXI9YCRhc19kaXJuYW1lIC0tICIkYWNfc3RkaW50X2giIHx8CiskYXNfZXhwciBYIiRhY19zdGRpbnRfaCIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYWNfc3RkaW50X2giIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFjX3N0ZGludF9oIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhY19zdGRpbnRfaCIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhY19zdGRpbnRfaCIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgICAgICBhc19kaXI9IiRhY19kaXIiOyBhc19mbl9ta2Rpcl9wCisgICAgICBybSAtZiAkYWNfc3RkaW50X2gKKyAgICAgIG12ICRhY19zdGRpbnQgJGFjX3N0ZGludF9oCisgICAgZmkKKyA7OworCisgIGVzYWMKK2RvbmUgIyBmb3IgYWNfdGFnCisKKworYXNfZm5fZXhpdCAwCitfQUNFT0YKK2FjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCisKK3Rlc3QgJGFjX3dyaXRlX2ZhaWwgPSAwIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJ3cml0ZSBmYWlsdXJlIGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorCisKKyMgY29uZmlndXJlIGlzIHdyaXRpbmcgdG8gY29uZmlnLmxvZywgYW5kIHRoZW4gY2FsbHMgY29uZmlnLnN0YXR1cy4KKyMgY29uZmlnLnN0YXR1cyBkb2VzIGl0cyBvd24gcmVkaXJlY3Rpb24sIGFwcGVuZGluZyB0byBjb25maWcubG9nLgorIyBVbmZvcnR1bmF0ZWx5LCBvbiBET1MgdGhpcyBmYWlscywgYXMgY29uZmlnLmxvZyBpcyBzdGlsbCBrZXB0IG9wZW4KKyMgYnkgY29uZmlndXJlLCBzbyBjb25maWcuc3RhdHVzIHdvbid0IGJlIGFibGUgdG8gd3JpdGUgdG8gaXQ7IGl0cworIyBvdXRwdXQgaXMgc2ltcGx5IGRpc2NhcmRlZC4gIFNvIHdlIGV4ZWMgdGhlIEZEIHRvIC9kZXYvbnVsbCwKKyMgZWZmZWN0aXZlbHkgY2xvc2luZyBjb25maWcubG9nLCBzbyBpdCBjYW4gYmUgcHJvcGVybHkgKHJlKW9wZW5lZCBhbmQKKyMgYXBwZW5kZWQgdG8gYnkgY29uZmlnLnN0YXR1cy4gIFdoZW4gY29taW5nIGJhY2sgdG8gY29uZmlndXJlLCB3ZQorIyBuZWVkIHRvIG1ha2UgdGhlIEZEIGF2YWlsYWJsZSBhZ2Fpbi4KK2lmIHRlc3QgIiRub19jcmVhdGUiICE9IHllczsgdGhlbgorICBhY19jc19zdWNjZXNzPToKKyAgYWNfY29uZmlnX3N0YXR1c19hcmdzPQorICB0ZXN0ICIkc2lsZW50IiA9IHllcyAmJgorICAgIGFjX2NvbmZpZ19zdGF0dXNfYXJncz0iJGFjX2NvbmZpZ19zdGF0dXNfYXJncyAtLXF1aWV0IgorICBleGVjIDU+L2Rldi9udWxsCisgICRTSEVMTCAkQ09ORklHX1NUQVRVUyAkYWNfY29uZmlnX3N0YXR1c19hcmdzIHx8IGFjX2NzX3N1Y2Nlc3M9ZmFsc2UKKyAgZXhlYyA1Pj5jb25maWcubG9nCisgICMgVXNlIHx8LCBub3QgJiYsIHRvIGF2b2lkIGV4aXRpbmcgZnJvbSB0aGUgaWYgd2l0aCAkPyA9IDEsIHdoaWNoCisgICMgd291bGQgbWFrZSBjb25maWd1cmUgZmFpbCBpZiB0aGlzIGlzIHRoZSBsYXN0IGluc3RydWN0aW9uLgorICAkYWNfY3Nfc3VjY2VzcyB8fCBhc19mbl9leGl0IDEKK2ZpCitpZiB0ZXN0IC1uICIkYWNfdW5yZWNvZ25pemVkX29wdHMiICYmIHRlc3QgIiRlbmFibGVfb3B0aW9uX2NoZWNraW5nIiAhPSBubzsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiYyO30KK2ZpCisKKworaWYgdGVzdCAieCR7R1NUX0RJU0FCTEVfR1NUX0RFQlVHfSIgPSAieG5vIjsgdGhlbiBlbmFibGVfZ3N0X2RlYnVnPSJ5ZXMiOyBmaQoraWYgdGVzdCAieCR7R1NUX0RJU0FCTEVfUEFSU0V9IiA9ICJ4bm8iOyB0aGVuIGVuYWJsZV9wYXJzZT0ieWVzIjsgZmkKK2lmIHRlc3QgIngke0dTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HfSIgPSAieG5vIjsgdGhlbiBlbmFibGVfb3B0aW9uX3BhcnNpbmc9InllcyI7IGZpCitpZiB0ZXN0ICJ4JHtHU1RfRElTQUJMRV9UUkFDRX0iID0gInhubyI7IHRoZW4gZW5hYmxlX3RyYWNlPSJ5ZXMiOyBmaQoraWYgdGVzdCAieCR7R1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0V9IiA9ICJ4bm8iOyB0aGVuIGVuYWJsZV9hbGxvY190cmFjZT0ieWVzIjsgZmkKK2lmIHRlc3QgIngke0dTVF9ESVNBQkxFX1BMVUdJTn0iID0gInhubyI7IHRoZW4gZW5hYmxlX3BsdWdpbj0ieWVzIjsgZmkKK2lmIHRlc3QgIngke0dTVF9ESVNBQkxFX1JFR0lTVFJZfSIgPSAieG5vIjsgdGhlbiBlbmFibGVfcmVnaXN0cnk9InllcyI7IGZpCitpZiB0ZXN0ICJ4JHtHU1RfRElTQUJMRV9ORVR9IiA9ICJ4bm8iOyB0aGVuIGVuYWJsZV9uZXQ9InllcyI7IGZpCisKK2VjaG8gIgorCitDb25maWd1cmF0aW9uCisJVmVyc2lvbiAgICAgICAgICAgICAgICAgICAgOiAke1ZFUlNJT059CisJU291cmNlIGNvZGUgbG9jYXRpb24gICAgICAgOiAke3NyY2Rpcn0KKwlQcmVmaXggICAgICAgICAgICAgICAgICAgICA6ICR7cHJlZml4fQorCUNvbXBpbGVyICAgICAgICAgICAgICAgICAgIDogJHtDQ30KKwlQYWNrYWdlIG5hbWUgICAgICAgICAgICAgICA6ICR7R1NUX1BBQ0tBR0VfTkFNRX0KKwlQYWNrYWdlIG9yaWdpbiAgICAgICAgICAgICA6ICR7R1NUX1BBQ0tBR0VfT1JJR0lOfQorCisJRG9jdW1lbnRhdGlvbiAobWFudWFscykgICAgOiAke2VuYWJsZV9kb2Nib29rfQorCURvY3VtZW50YXRpb24gKEFQSSkgICAgICAgIDogJHtlbmFibGVfZ3RrX2RvY30KKworCURlYnVnIExvZ2dpbmcgICAgICAgICAgICAgIDogJHtlbmFibGVfZ3N0X2RlYnVnfQorCUNvbW1hbmQtbGluZSBwYXJzZXIgICAgICAgIDogJHtlbmFibGVfcGFyc2V9CisJT3B0aW9uIHBhcnNpbmcgaW4gZ3N0X2luaXQgOiAke2VuYWJsZV9vcHRpb25fcGFyc2luZ30KKwlUcmFjaW5nIHN1YnN5c3RlbSAgICAgICAgICA6ICR7ZW5hYmxlX3RyYWNlfQorCUFsbG9jYXRpb24gdHJhY2luZyAgICAgICAgIDogJHtlbmFibGVfYWxsb2NfdHJhY2V9CisJUGx1Z2luIHJlZ2lzdHJ5ICAgICAgICAgICAgOiAke2VuYWJsZV9yZWdpc3RyeX0KKwlQbHVnaW4gc3VwcG9ydAkgICAgICAgICAgIDogJHtlbmFibGVfcGx1Z2lufQorCU5ldHdvcmsgc3VwcG9ydCAgICAgICAgICAgIDogJHtlbmFibGVfbmV0fQorCVVuaXQgdGVzdGluZyBzdXBwb3J0ICAgICAgIDogJHtCVUlMRF9DSEVDS30KKworCURlYnVnICAgICAgICAgICAgICAgICAgICAgIDogJHtVU0VfREVCVUd9CisJUHJvZmlsaW5nICAgICAgICAgICAgICAgICAgOiAke1VTRV9QUk9GSUxJTkd9CisKKwlCdWlsZGluZyBleGFtcGxlcyAgICAgICAgICA6ICR7QlVJTERfRVhBTVBMRVN9CisJQnVpbGRpbmcgdGVzdCBhcHBzICAgICAgICAgOiAke0JVSUxEX1RFU1RTfQorCUJ1aWxkaW5nIHRlc3RzIHRoYXQgZmFpbCAgIDogJHtCVUlMRF9GQUlMSU5HX1RFU1RTfQorIgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYjY2MDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUuYWMKQEAgLTAsMCArMSw4NTggQEAKK0FDX1BSRVJFUSgyLjYwKQorCitkbmwgaW5pdGlhbGl6ZSBhdXRvY29uZgorZG5sIHdoZW4gZ29pbmcgdG8vZnJvbSByZWxlYXNlIHBsZWFzZSBzZXQgdGhlIG5hbm8gKGZvdXJ0aCBudW1iZXIpIHJpZ2h0ICEKK2RubCByZWxlYXNlcyBvbmx5IGRvIFdhbGwsIGdpdCBhbmQgcHJlcmVsZWFzZSBkb2VzIFdlcnJvciB0b28KK0FDX0lOSVQoR1N0cmVhbWVyLCAwLjExLjEsCisgICAgaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9R1N0cmVhbWVyLAorICAgIGdzdHJlYW1lcikKK0FHX0dTVF9JTklUCisKK2RubCBpbml0aWFsaXplIGF1dG9tYWtlICh3ZSByZXF1aXJlIEdOVSBtYWtlKQorQU1fSU5JVF9BVVRPTUFLRShbLVduby1wb3J0YWJpbGl0eSAxLjEwXSkKKworZG5sIGRlZmluZSBQQUNLQUdFX1ZFUlNJT05fKiB2YXJpYWJsZXMKK0FTX1ZFUlNJT04KKworZG5sIGNoZWNrIGlmIHRoaXMgaXMgYSByZWxlYXNlIHZlcnNpb24KK0FTX05BTk8oR1NUX0dJVD0ibm8iLCBHU1RfR0lUPSJ5ZXMiKQorCitkbmwgY2FuIGF1dG9jb25mIGZpbmQgdGhlIHNvdXJjZSA/CitBQ19DT05GSUdfU1JDRElSKFtnc3QvZ3N0LmNdKQorCitkbmwgZGVmaW5lIHRoZSBvdXRwdXQgaGVhZGVyIGZvciBjb25maWcKK0FNX0NPTkZJR19IRUFERVIoW2NvbmZpZy5oXSkKKworZG5sIEFNX01BSU5UQUlORVJfTU9ERSBvbmx5IHByb3ZpZGVzIHRoZSBvcHRpb24gdG8gY29uZmlndXJlIHRvIGVuYWJsZSBpdAorQU1fTUFJTlRBSU5FUl9NT0RFCisKK2RubCBzZXRzIGhvc3RfKiB2YXJpYWJsZXMKK0FDX0NBTk9OSUNBTF9IT1NUCisKK2RubCB1c2UgcHJldHR5IGJ1aWxkIG91dHB1dCB3aXRoIGF1dG9tYWtlID49IDEuMTEKK200X2lmZGVmKFtBTV9TSUxFTlRfUlVMRVNdLFtBTV9TSUxFTlRfUlVMRVMoW3llc10pXSwKKyAgW0FNX0RFRkFVTFRfVkVSQk9TSVRZPTEKKyAgIEFDX1NVQlNUKEFNX0RFRkFVTFRfVkVSQk9TSVRZKV0pCisKK2RubCBvdXIgbGlicmFyaWVzIGFuZCBpbnN0YWxsIGRpcnMgdXNlIG1ham9yLm1pbm9yIGFzIGEgdmVyc2lvbgorR1NUX01BSk9STUlOT1I9JFBBQ0tBR0VfVkVSU0lPTl9NQUpPUi4kUEFDS0FHRV9WRVJTSU9OX01JTk9SCitkbmwgd2Ugb3ZlcnJpZGUgaXQgaGVyZSBmb3IgcmVsZWFzZSBjYW5kaWRhdGVzIGZvciBhIG5ldyBzZXJpZXMKK0dTVF9NQUpPUk1JTk9SPTAuMTEKK0FDX1NVQlNUKEdTVF9NQUpPUk1JTk9SKQorQUNfREVGSU5FX1VOUVVPVEVEKEdTVF9NQUpPUk1JTk9SLCAiJEdTVF9NQUpPUk1JTk9SIiwKKyAgW2xpYnJhcnkgbWFqb3IubWlub3IgdmVyc2lvbl0pCisKK2RubCBDVVJSRU5ULCBSRVZJU0lPTiwgQUdFCitkbmwgLSBsaWJyYXJ5IHNvdXJjZSBjaGFuZ2VkIC0+IGluY3JlbWVudCBSRVZJU0lPTgorZG5sIC0gaW50ZXJmYWNlcyBhZGRlZC9yZW1vdmVkL2NoYW5nZWQgLT4gaW5jcmVtZW50IENVUlJFTlQsIFJFVklTSU9OID0gMAorZG5sIC0gaW50ZXJmYWNlcyBhZGRlZCAtPiBpbmNyZW1lbnQgQUdFCitkbmwgLSBpbnRlcmZhY2VzIHJlbW92ZWQgLT4gQUdFID0gMAorZG5sIHNldHMgR1NUX0xUX0xERkxBR1MKK0FTX0xJQlRPT0woR1NULCAzMSwgMCwgMCkKKworZG5sIEZJWE1FOiB0aGlzIG1hY3JvIGRvZXNuJ3QgYWN0dWFsbHkgd29yazsKK2RubCB0aGUgZ2VuZXJhdGVkIGxpYnRvb2wgc2NyaXB0IGhhcyBubyBzdXBwb3J0IGZvciB0aGUgbGlzdGVkIHRhZ3MuCitkbmwgU28gdGhpcyBuZWVkcyB0byBiZSBmaXhlZCBmaXJzdCBpZiB3ZSB3YW50IHRvIHVzZSB0aGlzCitkbmwgQVNfTElCVE9PTF9UQUdTCisKK0FDX0xJQlRPT0xfV0lOMzJfRExMCitBTV9QUk9HX0xJQlRPT0wKKworZG5sICoqKiBhdXRvdG9vbHMgc3R1ZmYgKioqKgorCitkbmwgYWxsb3cgZm9yIGRpZmZlcmVudCBhdXRvdG9vbHMKK0FTX0FVVE9UT09MU19BTFRFUk5BVEUKKworZG5sIEFkZCBwYXJhbWV0ZXJzIGZvciBhY2xvY2FsIChrZWVwIGluIHN5bmMgd2l0aCBNYWtlZmlsZS5hbSkKK0FDX1NVQlNUKEFDTE9DQUxfQU1GTEFHUywgIi1JIG00IC1JIGNvbW1vbi9tNCIpCisKK2RubCBzZXQgdXAgZ2V0dGV4dAorZG5sIHRoZSB2ZXJzaW9uIGNoZWNrIG5lZWRzIHRvIHN0YXkgaGVyZSBiZWNhdXNlIGF1dG9wb2ludCBncmVwcyBmb3IgaXQKK0FNX0dOVV9HRVRURVhUX1ZFUlNJT04oWzAuMTddKQorQU1fR05VX0dFVFRFWFQoW2V4dGVybmFsXSkKK0FHX0dTVF9HRVRURVhUKFtnc3RyZWFtZXItJEdTVF9NQUpPUk1JTk9SXSkKKworZG5sICoqKiBjaGVjayBmb3IgYXJndW1lbnRzIHRvIGNvbmZpZ3VyZSAqKioKKworZG5sIHN1YnN5c3RlbXMgLSBjYW4gaW5mbHVlbmNlIG90aGVyIGRlY2lzaW9ucyBzbyBuZWVkcyB0byBiZSBoaWdoIHVwCitkbmwgd2UgbmVlZCB0byBBTV9DT05ESVRJT05BTCB0aGVtIGhlcmUgZm9yIGF1dG9tYWtlIDEuNi54IGNvbXBhdGliaWxpdHkKK0FHX0dTVF9DSEVDS19TVUJTWVNURU1fRElTQUJMRShHU1RfREVCVUcsW2RlYnVnZ2luZyBzdWJzeXN0ZW1dKQorQU1fQ09ORElUSU9OQUwoR1NUX0RJU0FCTEVfR1NUX0RFQlVHLCB0ZXN0ICJ4JEdTVF9ESVNBQkxFX0dTVF9ERUJVRyIgPSAieHllcyIpCitBR19HU1RfQ0hFQ0tfU1VCU1lTVEVNX0RJU0FCTEUoUEFSU0UsW2NvbW1hbmQtbGluZSBwYXJzZXJdKQorQU1fQ09ORElUSU9OQUwoR1NUX0RJU0FCTEVfUEFSU0UsIHRlc3QgIngkR1NUX0RJU0FCTEVfUEFSU0UiID0gInh5ZXMiKQoraWYgdGVzdCAieCRHU1RfRElTQUJMRV9QQVJTRSIgPSB4eWVzOyB0aGVuCisgIEFDX0RFRklORShHU1RfRElTQUJMRV9QQVJTRSwgMSwKKyAgICBbRGVmaW5lIGlmIHBpcGVsaW5lIHBhcnNpbmcgY29kZSBpcyBkaXNhYmxlZF0pCitmaQorQUdfR1NUX0NIRUNLX1NVQlNZU1RFTV9ESVNBQkxFKE9QVElPTl9QQVJTSU5HLFtvcHRpb24gcGFyc2luZyB3aGVuIGdzdF9pbml0XSkKK0FNX0NPTkRJVElPTkFMKEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HLCB0ZXN0ICJ4JEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HIiA9ICJ4eWVzIikKK2lmIHRlc3QgIngkR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkciID0geHllczsgdGhlbgorICBBQ19ERUZJTkUoR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkcsIDEsCisgICAgW0RlZmluZSBpZiBvcHRpb24gcGFyc2luZyBpcyBkaXNhYmxlZF0pCitmaQorQUdfR1NUX0NIRUNLX1NVQlNZU1RFTV9ESVNBQkxFKFRSQUNFLFt0cmFjaW5nIHN1YnN5c3RlbV0pCitBTV9DT05ESVRJT05BTChHU1RfRElTQUJMRV9UUkFDRSwgdGVzdCAieCRHU1RfRElTQUJMRV9UUkFDRSIgPSAieHllcyIpCitBR19HU1RfQ0hFQ0tfU1VCU1lTVEVNX0RJU0FCTEUoQUxMT0NfVFJBQ0UsW2FsbG9jYXRpb24gdHJhY2luZ10pCitBTV9DT05ESVRJT05BTChHU1RfRElTQUJMRV9BTExPQ19UUkFDRSwgdGVzdCAieCRHU1RfRElTQUJMRV9BTExPQ19UUkFDRSIgPSAieHllcyIpCitBR19HU1RfQ0hFQ0tfU1VCU1lTVEVNX0RJU0FCTEUoUkVHSVNUUlksW3BsdWdpbiByZWdpc3RyeV0pCitBTV9DT05ESVRJT05BTChHU1RfRElTQUJMRV9SRUdJU1RSWSwgdGVzdCAieCRHU1RfRElTQUJMRV9SRUdJU1RSWSIgPSAieHllcyIpCitkbmwgZGVmaW5lIGEgc3Vic3RpdHV0aW9uIHRvIHVzZSBpbiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXMKK2lmIHRlc3QgIngkR1NUX0RJU0FCTEVfUkVHSVNUUlkiID0gInh5ZXMiCit0aGVuCisgIEdTVF9SRUdJU1RSWV9ET0NfVFlQRVM9IiUiCitlbHNlCisgIEdTVF9SRUdJU1RSWV9ET0NfVFlQRVM9CitmaQorQUNfU1VCU1QoR1NUX1JFR0lTVFJZX0RPQ19UWVBFUykKK0FHX0dTVF9DSEVDS19TVUJTWVNURU1fRElTQUJMRShORVQsW25ldHdvcmsgZGlzdHJpYnV0aW9uXSkKK0FNX0NPTkRJVElPTkFMKEdTVF9ESVNBQkxFX05FVCwgdGVzdCAieCRHU1RfRElTQUJMRV9ORVQiID0gInh5ZXMiKQorQUdfR1NUX0NIRUNLX1NVQlNZU1RFTV9ESVNBQkxFKFBMVUdJTixbcGx1Z2luXSkKK0FNX0NPTkRJVElPTkFMKEdTVF9ESVNBQkxFX1BMVUdJTiwgdGVzdCAieCRHU1RfRElTQUJMRV9QTFVHSU4iID0gInh5ZXMiKQorCitBR19HU1RfQVJHX0RFQlVHCitBR19HU1RfQVJHX1BST0ZJTElORworQUdfR1NUX0FSR19WQUxHUklORAorQUdfR1NUX0FSR19HQ09WCisKK0FHX0dTVF9BUkdfRVhBTVBMRVMKKworQUdfR1NUX0FSR19XSVRIX1BLR19DT05GSUdfUEFUSAorQUdfR1NUX0FSR19XSVRIX1BBQ0tBR0VfTkFNRQorQUdfR1NUX0FSR19XSVRIX1BBQ0tBR0VfT1JJR0lOCisKK0FHX0dTVF9QS0dfQ09ORklHX1BBVEgKKworQUdfR1NUX1NFVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUVfV0lUSF9OQU5PKFskUEFDS0FHRV9WRVJTSU9OX05BTk9dLAorICBbIiR7c3JjZGlyfS9nc3RyZWFtZXIuZG9hcCJdLAorICBbJFBBQ0tBR0VfVkVSU0lPTl9NQUpPUi4kUEFDS0FHRV9WRVJTSU9OX01JTk9SLiRQQUNLQUdFX1ZFUlNJT05fTUlDUk9dKQorCitkbmwgYnVpbGRpbmcgb2YgdGVzdHMKK0FDX0FSR19FTkFCTEUodGVzdHMsCisgIEFDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtdGVzdHNdLCBbZGlzYWJsZSBidWlsZGluZyB0ZXN0IGFwcHNdKSwKKyAgWworICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgIHllcykgQlVJTERfVEVTVFM9eWVzIDs7CisgICAgICBubykgIEJVSUxEX1RFU1RTPW5vIDs7CisgICAgICAqKSAgIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWRpc2FibGUtdGVzdHMpIDs7CisgICAgZXNhYworICBdLAorW0JVSUxEX1RFU1RTPXllc10pIGRubCBEZWZhdWx0IHZhbHVlCitBTV9DT05ESVRJT05BTChCVUlMRF9URVNUUywgICAgICAgICB0ZXN0ICJ4JEJVSUxEX1RFU1RTIiA9ICJ4eWVzIikKKworZG5sIHRlc3RzIGtub3duIHRvIGZhaWwKK0FDX0FSR19FTkFCTEUoZmFpbGluZy10ZXN0cywKKyAgQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1mYWlsaW5nLXRlc3RzXSwKKyAgICBbZGlzYWJsZSBidWlsZGluZyB0ZXN0cyBrbm93biB0byBmYWlsXSksCisgIFsKKyAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICB5ZXMpIEJVSUxEX0ZBSUxJTkdfVEVTVFM9eWVzIDs7CisgICAgICBubykgIEJVSUxEX0ZBSUxJTkdfVEVTVFM9bm8gOzsKKyAgICAgICopICAgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZGlzYWJsZS1mYWlsaW5nLXRlc3RzKSA7OworICAgIGVzYWMKKyAgXSwKKyAgW0JVSUxEX0ZBSUxJTkdfVEVTVFM9bm9dKSBkbmwgRGVmYXVsdCB2YWx1ZQorQU1fQ09ORElUSU9OQUwoQlVJTERfRkFJTElOR19URVNUUywgdGVzdCAieCRCVUlMRF9GQUlMSU5HX1RFU1RTIiA9ICJ4eWVzIikKK2lmIHRlc3QgeCRCVUlMRF9GQUlMSU5HX1RFU1RTID0geHllczsgdGhlbgorICBBQ19NU0dfV0FSTihbYnVpbGRpbmcgdGVzdHMga25vd24gdG8gZmFpbCwgdXNlIC0tZGlzYWJsZS1mYWlsaW5nLXRlc3RzIHRvIGRpc2FibGVdKQorZWxzZQorICBBQ19NU0dfV0FSTihbU2lzc3kgISBCeSBhc2tpbmcgdG8gbm90IGJ1aWxkIHRoZSB0ZXN0cyBrbm93biB0byBmYWlsLCB5b3UgaGVyZWJ5IHdhaXZlIHlvdXIgcmlnaHQgdG8gY3VzdG9tZXIgc3VwcG9ydC4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGlzIEVVTEEsIHBsZWFzZSBwcmVzcyBDdHJsLUMgYmVmb3JlIHRoZSBuZXh0IGxpbmUgaXMgcHJpbnRlZC4gIEJ5IGFsbG93aW5nIHRoZSBuZXh0IGxpbmUgdG8gYmUgcHJpbnRlZCwgeW91IGV4cHJlc3NseSBhY2tub3dsZWRnZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBFVUxBLl0pCitmaQorCitkbmwgcG9pc29uIGRlc3Ryb3llZCBvYmplY3RzCitBQ19BUkdfRU5BQkxFKHBvaXNvbmluZywKKyAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXBvaXNvbmluZ10sCisgICAgW2VuYWJsZSBwb2lzb25pbmcgb2YgZGVhbGxvY2F0ZWQgb2JqZWN0c10pLAorICBbCisgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgeWVzKSBVU0VfUE9JU09OSU5HPXllcyA7OworICAgICAgbm8pICBVU0VfUE9JU09OSU5HPW5vIDs7CisgICAgICAqKSAgIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1wb2lzb25pbmcpIDs7CisgICAgZXNhYworICBdLAorICBbVVNFX1BPSVNPTklORz1ub10pIGRubCBEZWZhdWx0IHZhbHVlCitpZiB0ZXN0ICJ4JFVTRV9QT0lTT05JTkciID0geHllczsgdGhlbgorICBBQ19ERUZJTkUoVVNFX1BPSVNPTklORywgMSwKKyAgICBbRGVmaW5lIGlmIHdlIHNob3VsZCBwb2lzb24gZGVhbGxvY2F0ZWQgbWVtb3J5XSkKK2ZpCisKK2RubCAqKiogY2hlY2tzIGZvciBwbGF0Zm9ybSAqKioKKworZG5sICogaGFyZHdhcmUvYXJjaGl0ZWN0dXJlICoKKworZG5sIGNvbW1vbi9tNC9nc3QtYXJjaC5tNAorZG5sIGNoZWNrIENQVSB0eXBlCitBR19HU1RfQVJDSAorZG5sIHN1YnN0aXR1dGlvbiBmb3Igd2luMzIvY29tbW9uL2NvbmZpZy5oCitIT1NUX0NQVT0kaG9zdF9jcHUKK0FDX1NVQlNUKEhPU1RfQ1BVKQorCitkbmwgY29tbW9uL200L2dzdC1hcmNoLm00CitkbmwgY2hlY2sgZm9yIHVuYWxpZ25lZCBhY2Nlc3MKK0FHX0dTVF9VTkFMSUdORURfQUNDRVNTCitkbmwgY3JlYXRlIGEgY29uZmlndXJlIHZhcmlhYmxlIGZvciBnc3QvZ3N0Y29uZmlnLmgKK2lmIHRlc3QgeCR7YXNfY3ZfdW5hbGlnbmVkX2FjY2Vzc30gPSB4eWVzIDsgdGhlbgorICBHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORT0iI2RlZmluZSBHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTIDEiCitlbHNlCisgIEdTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FPSIjZGVmaW5lIEdTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1MgMCIKK2ZpCitBQ19TVUJTVChHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORSkKKworZG5sIGNoZWNrIGZvciBwbGF0Zm9ybSBzcGVjaWZpYyBzZXR0aW5ncworQUdfR1NUX1BMQVRGT1JNCisKK2RubCAqIHNvZnR3YXJlICoKKworZG5sIGNoZWNrIGZvciBsYXJnZSBmaWxlIHN1cHBvcnQKK2RubCBhZmZlY3RlZCBwbHVnaW5zIG11c3QgaW5jbHVkZSBjb25maWcuaAorQUNfU1lTX0xBUkdFRklMRQorCitkbmwgKioqIGNoZWNrcyBmb3IgcHJvZ3JhbXMgKioqCisKK2RubCBmaW5kIGEgY29tcGlsZXIKK0FDX1BST0dfQ0MKK0FDX1BST0dfQ0NfU1REQworCitkbmwgY2hlY2sgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzICctYycgYW5kICctbycgb3B0aW9ucworQU1fUFJPR19DQ19DX08KKworZG5sIGZpbmQgYW4gYXNzZW1ibGVyCitBTV9QUk9HX0FTCisKK2RubCBkZXRlcm1pbmUgaWYgYysrIGlzIGF2YWlsYWJsZSBvbiB0aGlzIHN5c3RlbQorQUNfUFJPR19DWFgKK2RubCBDWFggbWF5IGJlIHNldCB0byBzb21lIGRlZmF1bHQgZXZlbiBpZiBubyBjKysgY29tcGlsZXIgaXMgYXZhaWxhYmxlCitkbmwgKHRoYW5rcyBhdXRvdG9vbHMhKSwgc28ganVzdCB0cnkgdG8gY29tcGlsZSBzb21lIGMrKyBjb2RlIHRvIG1ha2Ugc3VyZQorQUNfTEFOR19QVVNIKFtDKytdKQorQUNfVFJZX0NPTVBJTEUoWyBjbGFzcyBGb28geyBpbnQgYmFyOyB9O10sICwgd29ya2luZ19jeHg9eWVzLCB3b3JraW5nX2N4eD1ubykKK0FDX0xBTkdfUE9QKFtDKytdKQorQUNfTVNHX05PVElDRShbd29ya2luZyBjKysgY29tcGlsZXIgZm91bmQ6ICR3b3JraW5nX2N4eF0pCitBTV9DT05ESVRJT05BTChIQVZFX0NYWCwgdGVzdCAieCR3b3JraW5nX2N4eCIgPSAieHllcyIpCisKK2RubCBQZXJsIGlzIHVzZWQgaW4gYnVpbGRpbmcgZG9jdW1lbnRhdGlvbiBhbmQgaW4gdGhlIHZlcnNpb24gY2hlY2tzCitBQ19QQVRIX1BST0coUEVSTF9QQVRILCBwZXJsLCBubykKK2lmIHRlc3QgeCRQRVJMX1BBVEggPSB4bm87IHRoZW4KKyAgQUNfTVNHX0VSUk9SKENvdWxkIG5vdCBmaW5kIHBlcmwpCitmaQorCitkbmwgd2UgcmVxdWlyZSBmbGV4IGFuZCBiaXNvbiBmb3IgYnVpbGRpbmcgdGhlIHBhcnNlcgoraWYgdGVzdCAieCRHU1RfRElTQUJMRV9QQVJTRSIgIT0geHllczsgdGhlbgorICBBR19HU1RfQklTT05fQ0hFQ0sKKyAgQUdfR1NUX0ZMRVhfQ0hFQ0sKK2ZpCisKK0FDX1BBVEhfUFJPRyhWQUxHUklORF9QQVRILCB2YWxncmluZCwgbm8pCitBTV9DT05ESVRJT05BTChIQVZFX1ZBTEdSSU5ELCB0ZXN0ICEgIngkVkFMR1JJTkRfUEFUSCIgPSAieG5vIikKKworZG5sIGNoZWNrIGZvciBnb2JqZWN0LWludHJvc3BlY3Rpb24KK0dPQkpFQ1RfSU5UUk9TUEVDVElPTl9DSEVDSyhbMC42LjhdKQorCitkbmwgY2hlY2sgZm9yIGRvY3VtZW50YXRpb24gdG9vbHMKK0FHX0dTVF9ET0NCT09LX0NIRUNLCitHVEtfRE9DX0NIRUNLKFsxLjNdKQorQVNfUEFUSF9QWVRIT04oWzIuMV0pCitBR19HU1RfUExVR0lOX0RPQ1MoWzEuM10sWzIuMV0pCisKK2RubCAqKiogY2hlY2tzIGZvciBsaWJyYXJpZXMgKioqCisKK2RubCBjaGVjayBmb3IgbGlibSwgZm9yIHNpbigpCitBQ19DSEVDS19MSUJNCitBQ19TVUJTVChMSUJNKQorCitkbmwgKioqIGNoZWNrcyBmb3IgaGVhZGVyIGZpbGVzICoqKgorCitkbmwgY2hlY2sgaWYgd2UgaGF2ZSBBTlNJIEMgaGVhZGVyIGZpbGVzCitBQ19IRUFERVJfU1REQworCitkbmwgQ2hlY2sgZm9yIHVjb250ZXh0LmgKK0FDX0NIRUNLX0hFQURFUlMoW3Vjb250ZXh0LmhdKQorCitkbmwgQ2hlY2sgZm9yIHN5cy9zb2NrZXQuaAorQUNfQ0hFQ0tfSEVBREVSUyhbc3lzL3NvY2tldC5oXSwgSEFWRV9TWVNfU09DS0VUX0g9eWVzKQorQU1fQ09ORElUSU9OQUwoSEFWRV9TWVNfU09DS0VUX0gsIHRlc3QgIngkSEFWRV9TWVNfU09DS0VUX0giID0gInh5ZXMiKQorCitkbmwgY2hlY2sgZm9yIHN5cy90aW1lcy5oIGZvciB0ZXN0cy9leGFtcGxlcy9hZGFwdGVyLworQUNfQ0hFQ0tfSEVBREVSUyhbc3lzL3RpbWVzLmhdLCBIQVZFX1NZU19USU1FU19IPXllcykKK0FDX0NIRUNLX0hFQURFUlMoW3VuaXN0ZC5oXSwgSEFWRV9VTklTVERfSD15ZXMpCitBTV9DT05ESVRJT05BTChIQVZFX1NZU19USU1FU19IX0FORF9VTklTVERfSCwgdGVzdCAieCRIQVZFX1NZU19USU1FU19IIiA9ICJ4eWVzIiAtYSAieCRIQVZFX1VOSVNURF9IIiA9ICJ4eWVzIikKKworZG5sIENoZWNrIGZvciBwcm9jZXNzLmggZm9yIGdldHBpZCgpIG9uIHdpbjMyCitBQ19DSEVDS19IRUFERVJTKFtwcm9jZXNzLmhdKQorCitkbmwgQ2hlY2sgZm9yIHN5cy91dHNuYW1lLmggZm9yIHVuYW1lCitBQ19DSEVDS19IRUFERVJTKFtzeXMvdXRzbmFtZS5oXSkKKworZG5sIENoZWNrIGZvciBzdGRpb19leHQuZiBmb3IgX19mYnVmc2l6ZQorQUNfQ0hFQ0tfSEVBREVSUyhbc3RkaW9fZXh0LmhdKQorCitkbmwgY2hlY2sgZm9yIHB0aHJlYWRzCitBQ19DSEVDS19IRUFERVJTKFtwdGhyZWFkLmhdLCBIQVZFX1BUSFJFQURfSD15ZXMpCitBTV9DT05ESVRJT05BTChIQVZFX1BUSFJFQURfSCwgdGVzdCAieCRIQVZFX1BUSFJFQURfSCIgPSAieHllcyIpCisKK2RubCBjaGVjayBmb3Igc3lzL3ByY3RsIGZvciBzZXR0aW5nIHRocmVhZCBuYW1lIG9uIExpbnV4CitBQ19DSEVDS19IRUFERVJTKFtzeXMvcHJjdGwuaF0sIEhBVkVfU1lTX1BSQ1RMX0g9eWVzKQorCitkbmwgQ2hlY2sgZm9yIHZhbGdyaW5kLmgKK2RubCBzZXBhcmF0ZSBmcm9tIEhBVkVfVkFMR1JJTkQgYmVjYXVzZSB5b3UgY2FuIGhhdmUgdGhlIHByb2dyYW0sIGJ1dCBub3QKK2RubCB0aGUgZGV2IHBhY2thZ2UKK0FDX0NIRUNLX0hFQURFUlMoW3ZhbGdyaW5kL3ZhbGdyaW5kLmhdLCBIQVZFX1ZBTEdSSU5EX0g9eWVzKQorCitkbmwgdXNlZCBpbiBnc3QvZ3N0cG9sbC5jCitBQ19DSEVDS19IRUFERVJTKFt3aW5zb2NrMi5oXSwgSEFWRV9XSU5TT0NLMl9IPXllcykKK0FNX0NPTkRJVElPTkFMKEhBVkVfV0lOU09DSzJfSCwgdGVzdCAieCRIQVZFX1dJTlNPQ0syX0giID0gInh5ZXMiKQoraWYgdGVzdCAieCRIQVZFX1dJTlNPQ0syX0giID0gInh5ZXMiOyB0aGVuCisgIFdJTjMyX0xJQlM9Ii1sd3MyXzMyIgorICBBQ19TVUJTVChXSU4zMl9MSUJTKQorZmkKKworZG5sIGNoZWNrIGZvciBHTVAvR1NMLCB1c2VkIGJ5IHRoZSBnc3RfdXRpbF91aW50NjRfc2NhbGUgdW5pdCB0ZXN0IG9ubHkKK2lmIHRlc3QgIngkQlVJTERfVEVTVFMiID0gInh5ZXMiOyB0aGVuCisgIEFHX0dTVF9DSEVDS19MSUJIRUFERVIoR01QLCBnbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgX19nbXB6X2luaXRfc2V0X2QsICwKKyAgICAgICAgICAgICAgICAgICAgICAgICBnbXAuaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHTVBfTElCUz0iLWxnbXAiCisgICAgICAgICAgICAgICAgICAgICAgICAgQUNfU1VCU1QoR01QX0xJQlMpCisgICAgICAgICAgICAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfR01QLCBbMV0sW0hhdmUgR01QIGxpYnJhcnldKSkKKyAgQUdfR1NUX0NIRUNLX0xJQkhFQURFUihHU0wsIGdzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBnc2xfcm5nX3VuaWZvcm1faW50LCAtbGdzbGNibGFzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdzbC9nc2xfcm5nLmgsCisgICAgICAgICAgICAgICAgICAgICAgICAgR1NMX0xJQlM9Ii1sZ3NsIC1sZ3NsY2JsYXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgQUNfU1VCU1QoR1NMX0xJQlMpCisgICAgICAgICAgICAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfR1NMLCBbMV0sW0hhdmUgR1NMIGxpYnJhcnldKSkKK2ZpCisKK2RubCAqKiogY2hlY2tzIGZvciB0eXBlcy9kZWZpbmVzICoqKgorCitkbmwgKioqIGNoZWNrcyBmb3Igc3RydWN0dXJlcyAqKioKKworZG5sICoqKiBjaGVja3MgZm9yIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcyAqKioKKworZG5sIGNoZWNrIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyBfX3VpbnQxMjhfdCAoZ2NjKQorZG5sIEFjdHVhbGx5IGNoZWNrIGZvciAxMjgtYml0IGRpdmlzaW9uLCBzaW5jZSB0aGF0J3Mgd2hhdCB3ZSB1c2UKK2RubCB1aW50MTI4X3QgZm9yLgorQUNfQ0FDSEVfQ0hFQ0soZm9yIF9fdWludDEyOF90LCBnc3RfY3ZfdWludDEyOF90LAorICAgIEFDX1RSWV9MSU5LKFsgXSwgWworICAgICAgc3RhdGljIF9fdWludDEyOF90IHYxID0gMTAwOworICAgICAgc3RhdGljIF9fdWludDEyOF90IHYyID0gMTA7CisgICAgICBzdGF0aWMgX191aW50MTI4X3QgdTsKKyAgICAgIHUgPSB2MSAvIHYyOworICAgIF0sIFsKKyAgICAgIGdzdF9jdl91aW50MTI4X3Q9eWVzCisgICAgXSwgWworICAgICAgZ3N0X2N2X3VpbnQxMjhfdD1ubworICAgIF0pCispCitpZiB0ZXN0IHgkZ3N0X2N2X3VpbnQxMjhfdCA9IHh5ZXM7IHRoZW4KKyAgQUNfREVGSU5FKEhBVkVfVUlOVDEyOF9ULCAxLCBbSGF2ZSBfX3VpbnQxMjhfdCB0eXBlXSkKK2ZpCisKK2RubCAqKiogY2hlY2tpbmcgZm9yIHRtX2dtdG9mZiAqKioKK0FDX01TR19DSEVDS0lORyhbZm9yIHRtX2dtdG9mZl0pCitBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWworCSNpbmNsdWRlIDx0aW1lLmg+CisJaW50IG1haW4odm9pZCkgeworCSAgc3RydWN0IHRtIHQ7CisJICB0LnRtX2dtdG9mZiA9IDA7CisJICBleGl0KDApOworCX1dXSldLAorICBbaGF2ZV90bV9nbXRvZmY9eWVzCisgICBBQ19ERUZJTkUoSEFWRV9UTV9HTVRPRkYsMSxbSGF2ZSB0bV9nbXRvZmYgZmllbGQgaW4gc3RydWN0IHRtXSldLAorICBbaGF2ZV90bV9nbXRvZmY9bm9dLAorICBbaGF2ZV90bV9nbXRvZmY9Im5vIChjcm9zcyBjb21waWxpbmcpIl0pCitBQ19NU0dfUkVTVUxUKCRoYXZlX3RtX2dtdG9mZikKKworCitkbmwgKioqIGNoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMgKioqCisKK0FDX0NIRUNLX0ZVTkNTKFtnbXRpbWVfcl0pCitBQ19DSEVDS19GVU5DUyhbbG9jYWx0aW1lX3JdKQorQUNfQ0hFQ0tfRlVOQ1MoW3NpZ2FjdGlvbl0pCisKK2RubCBjaGVjayBmb3IgZnNlZWtvKCkKK0FDX0ZVTkNfRlNFRUtPCitkbmwgY2hlY2sgZm9yIGZ0ZWxsbygpCitBQ19DSEVDS19GVU5DUyhbZnRlbGxvXSkKKworQUNfQ0hFQ0tfRlVOQ1MoW2ZnZXRwb3NdKQorQUNfQ0hFQ0tfRlVOQ1MoW2ZzZXRwb3NdKQorCitkbmwgY2hlY2sgZm9yIHBvbGwoKSwgcHBvbGwoKSBhbmQgcHNlbGVjdCgpCitBQ19DSEVDS19GVU5DUyhbcG9sbF0pCitBQ19DSEVDS19GVU5DUyhbcHBvbGxdKQorQUNfQ0hFQ0tfRlVOQ1MoW3BzZWxlY3RdKQorCitkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZG5sICoqKiBHTGliIFBPTEwqIGNvbXBhdGliaWxpdHkgZGVmaW5lcyAqKioKK2RubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0FDX01TR19DSEVDS0lORyhbZm9yIGJyb2tlbiBwb2xsXSkKK0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCisJI2luY2x1ZGUgPHN0ZGxpYi5oPgorCSNpbmNsdWRlIDxmY250bC5oPgorCSNpbmNsdWRlIDxwb2xsLmg+CisJI2lmZGVmIEhBVkVfU1lTX1BPTExfSAorCSNpbmNsdWRlIDxzeXMvcG9sbC5oPgorCSNlbmRpZgorCWludCBtYWluKHZvaWQpIHsKKwkgIHN0cnVjdCBwb2xsZmQgZmRzWzFdOworCSAgaW50IGZkOworCSAgZmQgPSBvcGVuKCIvZGV2L251bGwiLCAxKTsKKwkgIGZkc1swXS5mZCA9IGZkOworCSAgZmRzWzBdLmV2ZW50cyA9IFBPTExJTjsKKwkgIGZkc1swXS5yZXZlbnRzID0gMDsKKwkgIGlmIChwb2xsKGZkcywgMSwgMCkgPCAwIHx8IChmZHNbMF0ucmV2ZW50cyAmIFBPTExOVkFMKSAhPSAwKSB7CisJCWV4aXQoMSk7ICAvKiBEb2VzIG5vdCB3b3JrIGZvciBkZXZpY2VzIC0tIGZhaWwgKi8KKwkgIH0KKwkgIGV4aXQoMCk7CisJfV1dKV0sCisgIFticm9rZW5fcG9sbD1ub10sCisgIFticm9rZW5fcG9sbD15ZXMKKyAgIEFDX0RFRklORShCUk9LRU5fUE9MTCwxLFtwb2xsIGRvZXNuJ3Qgd29yayBvbiBkZXZpY2VzXSldLAorICBbYnJva2VuX3BvbGw9Im5vIChjcm9zcyBjb21waWxpbmcpIl0pCitBQ19NU0dfUkVTVUxUKCRicm9rZW5fcG9sbCkKKworZG5sIGNoZWNrIGZvciBtbWFwKCkKK0FDX0ZVTkNfTU1BUAorQU1fQ09ORElUSU9OQUwoSEFWRV9NTUFQLCB0ZXN0ICJ4JGFjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQiID0gInh5ZXMiKQorCitkbmwgY2hlY2sgZm9yIHBvc2l4X21lbWFsaWduKCksIGdldHBhZ2VzaXplKCkKK0FDX0NIRUNLX0ZVTkNTKFtwb3NpeF9tZW1hbGlnbl0pCitBQ19DSEVDS19GVU5DUyhbZ2V0cGFnZXNpemVdKQorCitkbmwgQ2hlY2sgZm9yIFBPU0lYIHRpbWVycworQUNfQ0hFQ0tfRlVOQ1MoY2xvY2tfZ2V0dGltZSwgW10sIFsKKyAgQUNfQ0hFQ0tfTElCKHJ0LCBjbG9ja19nZXR0aW1lLCBbCisgICAgQUNfREVGSU5FKEhBVkVfQ0xPQ0tfR0VUVElNRSwgMSkKKyAgICBMSUJTPSIkTElCUyAtbHJ0IgorICBdKQorXSkKKworQUNfQ0FDSEVfQ0hFQ0soZm9yIHBvc2l4IHRpbWVycywgZ3N0X2N2X3Bvc2l4X3RpbWVycywKKyAgICBBQ19UUllfQ09NUElMRShbCisjaW5jbHVkZSA8dGltZS5oPgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorICAgIF0sIFsKKyNpZiAhZGVmaW5lZChfUE9TSVhfVElNRVJTKSB8fCBfUE9TSVhfVElNRVJTIDwgMCB8fCAhZGVmaW5lZChDTE9DS19SRUFMVElNRSkKKyNlcnJvciBFaXRoZXIgX1BPU0lYX1RJTUVSUyBvciBDTE9DS19SRUFMVElNRSBub3QgZGVmaW5lZAorI2VuZGlmCisgICAgXSwgWworICAgICAgZ3N0X2N2X3Bvc2l4X3RpbWVycz15ZXMKKyAgICBdLCBbCisgICAgICBnc3RfY3ZfcG9zaXhfdGltZXJzPW5vCisgICAgXSkKKykKKworaWYgdGVzdCAiJGdzdF9jdl9wb3NpeF90aW1lcnMiID0gInllcyI7IHRoZW4KKyAgQUNfREVGSU5FKEhBVkVfUE9TSVhfVElNRVJTLDEsW0hhdmUgcG9zaXggdGltZXJzXSkKKyAgR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORT0iI2RlZmluZSBHU1RfSEFWRV9QT1NJWF9USU1FUlMgMSIKK2Vsc2UKKyAgR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORT0iI2RlZmluZSBHU1RfSEFWRV9QT1NJWF9USU1FUlMgMCIKK2ZpCitBQ19TVUJTVChHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FKQorQU1fQ09ORElUSU9OQUwoR1NUX0hBVkVfUE9TSVhfVElNRVJTLCB0ZXN0ICIkZ3N0X2N2X3Bvc2l4X3RpbWVycyIgPSAieWVzIikKKworQUNfQ0FDSEVfQ0hFQ0soZm9yIG1vbm90b25pYyBjbG9jaywgZ3N0X2N2X21vbm90b25pY19jbG9jaywKKyAgICBBQ19UUllfQ09NUElMRShbCisjaW5jbHVkZSA8dGltZS5oPgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorICAgIF0sIFsKKyNpZiAhZGVmaW5lZChfUE9TSVhfTU9OT1RPTklDX0NMT0NLKSB8fCBfUE9TSVhfTU9OT1RPTklDX0NMT0NLIDwgMCB8fCAhZGVmaW5lZChDTE9DS19NT05PVE9OSUMpCisjZXJyb3IgRWl0aGVyIF9QT1NJWF9NT05PVE9OSUNfQ0xPQ0sgb3IgQ0xPQ0tfTU9OT1RPTklDIG5vdCBkZWZpbmVkCisjZW5kaWYKKyAgICBdLCBbCisgICAgICBnc3RfY3ZfbW9ub3RvbmljX2Nsb2NrPXllcworICAgIF0sIFsKKyAgICAgIGdzdF9jdl9tb25vdG9uaWNfY2xvY2s9bm8KKyAgICBdKQorKQorCitpZiB0ZXN0ICIkZ3N0X2N2X21vbm90b25pY19jbG9jayIgPSAieWVzIjsgdGhlbgorICBBQ19ERUZJTkUoSEFWRV9NT05PVE9OSUNfQ0xPQ0ssMSxbSGF2ZSBhIG1vbm90b25pYyBjbG9ja10pCisgIEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkU9IiNkZWZpbmUgR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLIDEiCitlbHNlCisgIEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkU9IiNkZWZpbmUgR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLIDAiCitmaQorQUNfU1VCU1QoR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSkKK0FNX0NPTkRJVElPTkFMKEdTVF9IQVZFX01PTk9UT05JQ19DTE9DSywgdGVzdCAiJGdzdF9jdl9tb25vdG9uaWNfY2xvY2siID0gInllcyIpCisKK2RubCBDaGVjayBmb3IgYSB3YXkgdG8gZGlzcGxheSB0aGUgZnVuY3Rpb24gbmFtZSBpbiBkZWJ1ZyBvdXRwdXQKK0FHX0dTVF9DSEVDS19GVU5DVElPTgorCitkbmwgdGVzdCBmb3IgcmVnaXN0ZXJfcHJpbnRmX3NwZWNpZmllciBvciByZWdpc3Rlcl9wcmludGZfZnVuY3Rpb24KK0FDX0NIRUNLX0ZVTkNTKFtyZWdpc3Rlcl9wcmludGZfc3BlY2lmaWVyIHJlZ2lzdGVyX3ByaW50Zl9mdW5jdGlvbl0sCisgICAgW0hBVkVfUFJJTlRGX0VYVEVOU0lPTj15ZXNdKQorCitpZiB0ZXN0ICIkSEFWRV9QUklOVEZfRVhURU5TSU9OIiA9IHllczsgdGhlbgorICBHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkU9IiNkZWZpbmUgR1NUX1BUUl9GT1JNQVQgXCJQXCIiCisgIEdTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORT0iI2RlZmluZSBHU1RfU0VHTUVOVF9GT1JNQVQgXCJRXCIiCisgIEdTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OX0RFRklORT0iI2RlZmluZSBHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTiIKKyAgQUNfREVGSU5FKEhBVkVfUFJJTlRGX0VYVEVOU0lPTiwgMSwKKyAgICAgIFtEZWZpbmVkIGlmIHdlIGhhdmUgcHJpbnRmIHNwZWNpZmllciBleHRlbnNpb25zIGF2YWlsYWJsZV0pCitlbHNlCisgICAgR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FPSIjZGVmaW5lIEdTVF9QVFJfRk9STUFUIFwicFwiIgorICAgIEdTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORT0iI2RlZmluZSBHU1RfU0VHTUVOVF9GT1JNQVQgXCJwXCIiCisgICAgR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FPSIjdW5kZWYgR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT04iCitmaQorQUNfU1VCU1QoR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FKQorQUNfU1VCU1QoR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FKQorQUNfU1VCU1QoR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FKQorCitkbmwgdGVzdCBpZiB3ZSBoYXZlIGRsYWRkcigpOyB3ZSB1c2UgaXQgZm9yIGRlYnVnZ2luZzsgc2VlIGdzdC9nc3RpbmZvLmMKK3NhdmVfY2ZsYWdzPSIkQ0ZMQUdTIgorQ0ZMQUdTPSIkQ0ZMQUdTIC1EX0dOVV9TT1VSQ0UiCitBQ19DSEVDS19MSUIoZGwsIGRsYWRkciwKKyAgIEFDX0RFRklORShIQVZFX0RMQUREUiwgMSwgW0RlZmluZWQgaWYgd2UgaGF2ZSBkbGFkZHIgKCldKQorICAgTElCUz0iJExJQlMgLWxkbCIpCitDRkxBR1M9IiRzYXZlX2NmbGFncyIKKworZG5sICoqKiBjaGVja3MgZm9yIHNvY2tldCBhbmQgbnNsIGxpYnJhcmllcyAqKioKK0FDX0NIRUNLX0ZVTkMoc29ja2V0LCxbQUNfQ0hFQ0tfTElCKHNvY2tldCxzb2NrZXQpXSkKK0FDX0NIRUNLX0ZVTkMoZ2V0aG9zdGJ5bmFtZSwsW0FDX0NIRUNLX0xJQihuc2wsZ2V0aG9zdGJ5bmFtZSldKQorCitkbmwgY2hlY2sgZm9yIGluZXRfYXRvbigpCitzYXZlX2xpYnM9IiRMSUJTIgorQUNfQ0hFQ0tfRlVOQyhpbmV0X2F0b24sICwKKyAgIEFDX0NIRUNLX0xJQihuc2wsIGluZXRfYXRvbiwgLAorICAgICAgQUNfQ0hFQ0tfTElCKHNvY2tldCwgaW5ldF9hdG9uLCAsCisgICAgICAgICBBQ19DSEVDS19MSUIocmVzb2x2LCBpbmV0X2F0b24sICxbQUNfREVGSU5FKE5PX0lORVRfQVRPTiwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSBubyBuYXRpdmUgaW5ldF9hdG9uKCkgZnVuY3Rpb24uXSldKSkpKQorSU5FVF9BVE9OX0xJQlM9JExJQlMKK0FDX1NVQlNUKElORVRfQVRPTl9MSUJTKQorTElCUz0iJHNhdmVfbGlicyIKKworZG5sICoqKiBjaGVja3MgZm9yIGRlcGVuZGVuY3kgbGlicmFyaWVzICoqKgorCitkbmwgR0xpYgorR0xJQl9SRVE9Mi4yNgorCitBR19HU1RfR0xJQl9DSEVDSyhbJEdMSUJfUkVRXSkKKworZG5sIENoZWNrIGZvciBnbGliMiB3aXRob3V0IGV4dHJhIGZhdCwgdXNlZnVsIGZvciB0aGUgdW52ZXJzaW9uZWQgdG9vbCBmcm9udGVuZHMKK1BLR19DSEVDS19NT0RVTEVTKEdMSUJfT05MWSwgZ2xpYi0yLjAgPj0gJEdMSUJfUkVRKQorCitkbmwgQ2hlY2sgZm9yIGRvY3VtZW50YXRpb24geHJlZnMKK0dMSUJfUFJFRklYPSJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1wcmVmaXggZ2xpYi0yLjBgIgorQUNfU1VCU1QoR0xJQl9QUkVGSVgpCisKK2RubCBidWlsZGluZyBvZiB1bml0IHRlc3QgbGlicmFyaWVzCitBQ19BUkdfRU5BQkxFKGNoZWNrLAorICBBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWNoZWNrXSwgW2Rpc2FibGUgYnVpbGRpbmcgdW5pdCB0ZXN0IGxpYnJhcmllc10pLAorICBbCisgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgeWVzKSBCVUlMRF9DSEVDSz15ZXMgOzsKKyAgICAgIG5vKSAgQlVJTERfQ0hFQ0s9bm8gOzsKKyAgICAgICopICAgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZGlzYWJsZS1jaGVjaykgOzsKKyAgICBlc2FjCisgIF0sIFsKKyAgICBkbmwgRGVmYXVsdCB2YWx1ZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIG1pbmd3KiB8IG1zdmMqIHwgbWtzKikgQlVJTERfQ0hFQ0s9bm8gOzsKKyAgICAgICopIEJVSUxEX0NIRUNLPXllcyA7OworICAgIGVzYWMKK10pCitkbmwgYml0IG9mIGEgbWlzbm9tZXIsIGJ1dCBrZWVwIHRoZSBjb25kaXRpb25hbCBuYW1lZCBsaWtlIHRoaXMgc28gd2UgZG9uJ3QKK2RubCBoYXZlIHRvIGNoYW5nZSB0b28gbXVjaCBlbHNld2hlcmUKK0FNX0NPTkRJVElPTkFMKEhBVkVfQ0hFQ0ssIHRlc3QgIngkQlVJTERfQ0hFQ0siID0gInh5ZXMiKQorCitkbmwgY29uZmlndXJlIHRoZSBkZXNpcmVkIG1lbW9yeSBhbGlnbm1lbnQKK0FDX0FSR19XSVRIKFttZW1vcnktYWxpZ25tZW50XSwKKyAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1tZW1vcnktYWxpZ25tZW50XSxbOCxOLG1hbGxvYyxwYWdlc2l6ZSAoZGVmYXVsdCBpcyAzMildKSwKKyAgWworICAgIGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieHllcyIKKyAgICB0aGVuCisgICAgICBBQ19ERUZJTkUoTUVNT1JZX0FMSUdOTUVOVCwgMzIsIFtNZW1vcnkgYWxpZ25tZW50IHRvIHVzZV0pCisgICAgZWxzZQorICAgICAgY2FzZSAiJHt3aXRodmFsfSIgaW4KKyAgICAgICAgbWFsbG9jKSBBQ19ERUZJTkUoTUVNT1JZX0FMSUdOTUVOVF9NQUxMT0MsIDEsIFtNZW1vcnkgYWxpZ25tZW50IGJ5IG1hbGxvYyBkZWZhdWx0XSkgOzsKKyAgICAgICAgcGFnZXNpemUpICBBQ19ERUZJTkUoTUVNT1JZX0FMSUdOTUVOVF9QQUdFU0laRSwgMSwgW01lbW9yeSBhbGlnbm1lbnQgYnkgcGFnZXNpemVdKSA7OworICAgICAgICAqKSAgIEFDX0RFRklORV9VTlFVT1RFRChNRU1PUllfQUxJR05NRU5ULCAke3dpdGh2YWx9LCBbTWVtb3J5IGFsaWdubWVudCB0byB1c2VdKSA7OworICAgICAgZXNhYworICAgIGZpCisgIF0sIFsKKyAgICBBQ19ERUZJTkUoTUVNT1JZX0FMSUdOTUVOVF9NQUxMT0MsIDEsIFtNZW1vcnkgYWxpZ25tZW50IGJ5IG1hbGxvYyBkZWZhdWx0XSkgCisgIF0KKykKKworZG5sIENoZWNrIGZvciAtQnN5bWJvbGljLWZ1bmN0aW9ucyBsaW5rZXIgZmxhZyB1c2VkIHRvIGF2b2lkCitkbmwgaW50cmEtbGlicmFyeSBQTFQganVtcHMsIGlmIGF2YWlsYWJsZS4KK0FDX0FSR19FTkFCTEUoQnN5bWJvbGljLAorICAgICAgICAgICAgICBbQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1Cc3ltYm9saWNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F2b2lkIGxpbmtpbmcgd2l0aCAtQnN5bWJvbGljXSldLCwKKyAgICAgICAgICAgICAgW1NBVkVEX0xERkxBR1M9IiR7TERGTEFHU30iCisgICAgICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAtQnN5bWJvbGljLWZ1bmN0aW9ucyBsaW5rZXIgZmxhZ10pCisgICAgICAgICAgICAgICBMREZMQUdTPS1XbCwtQnN5bWJvbGljLWZ1bmN0aW9ucworICAgICAgICAgICAgICAgQUNfVFJZX0xJTksoW10sIFtpbnQgbWFpbiAodm9pZCkgeyByZXR1cm4gMDsgfV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9Cc3ltYm9saWM9eWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChubykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9Cc3ltYm9saWM9bm8pCisgICAgICAgICAgICAgICBMREZMQUdTPSIke1NBVkVEX0xERkxBR1N9Il0pCisKKworZG5sICoqKiBzZXQgdmFyaWFibGVzIGJhc2VkIG9uIGNvbmZpZ3VyZSBhcmd1bWVudHMKKworZG5sIHNldCBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlCitHU1RfTElDRU5TRT0iTEdQTCIKK0FDX0RFRklORV9VTlFVT1RFRChHU1RfTElDRU5TRSwgIiRHU1RfTElDRU5TRSIsIFtHU3RyZWFtZXIgbGljZW5zZV0pCitBQ19TVUJTVChHU1RfTElDRU5TRSkKKworZG5sIGRlZmluZSBMSUJESVIsIEdTVF9EQVRBRElSIHNvIHdlIGNhbiBpbmZvcm0gcGVvcGxlIHdoZXJlIHdlIGxpdmUKK0FTX0FDX0VYUEFORChMSUJESVIsICRsaWJkaXIpCitBQ19ERUZJTkVfVU5RVU9URUQoTElCRElSLCAiJExJQkRJUiIsIFtsaWJyYXJ5IGRpcl0pCitBU19BQ19FWFBBTkQoREFUQURJUiwgJGRhdGFkaXIpCitBQ19ERUZJTkVfVU5RVU9URUQoR1NUX0RBVEFESVIsICIkREFUQURJUiIsIFtkYXRhIGRpcl0pCisKK2RubCBzZXQgbG9jYXRpb24gb2YgcGx1Z2luIGRpcmVjdG9yeQorQUdfR1NUX1NFVF9QTFVHSU5ESVIKKworR1NUX1BLR19ERVBTPSJnbGliLTIuMCwgZ29iamVjdC0yLjAsIGdtb2R1bGUtbm8tZXhwb3J0LTIuMCwgZ3RocmVhZC0yLjAiCitBQ19TVUJTVChHU1RfUEtHX0RFUFMpCisKK2RubCBkZWZpbmUgYW4gRVJST1JfQ0ZMQUdTIE1ha2VmaWxlIHZhcmlhYmxlCitBR19HU1RfU0VUX0VSUk9SX0NGTEFHUygkR1NUX0dJVCwgWy1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdyZWR1bmRhbnQtZGVjbHMgLVd1bmRlZiAtV3dyaXRlLXN0cmluZ3MgLVdmb3JtYXQtbm9ubGl0ZXJhbCAtV2Zvcm1hdC1zZWN1cml0eSAtV29sZC1zdHlsZS1kZWZpbml0aW9uIC1XaW5pdC1zZWxmIC1XbWlzc2luZy1pbmNsdWRlLWRpcnMgLVdhZGRyZXNzIC1XYWdncmVnYXRlLXJldHVybiAtV25vLW11bHRpY2hhciAtV25lc3RlZC1leHRlcm5zXSkKKworZG5sIGRlZmluZSBjb3JyZWN0IGxldmVsIGZvciBkZWJ1Z2dpbmcgbWVzc2FnZXMKK0FHX0dTVF9TRVRfTEVWRUxfREVGQVVMVCgkR1NUX0dJVCkKKworZG5sICoqKiBmaW5hbGl6ZSBDRkxBR1MsIExERkxBR1MsIExJQlMKKworZG5sIE92ZXJ2aWV3OgorZG5sIEdTVF9PUFRJT05fQ0ZMQUdTOiAgY29tbW9uIGNmbGFncyBmb3IgcHJvZmlsaW5nLCBkZWJ1Z2dpbmcsIGVycm9ycywgLi4uCitkbmwgR1NUX0FMTF8qOiAgICAgICAgICB2YXJzIHNoYXJlZCBieSBhbGwgYnVpbHQgb2JqZWN0cworZG5sIEdTVF9MSUJfTERGTEFHUzogICAgYWRkaXRpb25hbCBsaW5rZXIgZmxhZ3MgZm9yIGFsbCBsaWJhcmllcworZG5sIEdTVF9PQkpfKjogICAgICAgICAgYWRkaXRpb25hbCB2YXJzIHRvIGxpbmsgdG8gdGhlIGNvcmUgbGlicmFyeQorZG5sCQkJaW5jbHVkZSBHU1RfQUxMXyoKK2RubCBHU1RfTFRfTERGTEFHUzoJbGlicmFyeSB2ZXJzaW9uaW5nIG9mIG91ciBsaWJyYXJpZXMKK2RubCBHU1RfUExVR0lOX0xERkxBR1M6IGZsYWdzIHRvIGJlIHVzZWQgZm9yIGFsbCBwbHVnaW5zCisKK2RubCBHU1RfT1BUSU9OX0NGTEFHUworaWYgdGVzdCAieCRVU0VfREVCVUciID0geHllczsgdGhlbgorICAgUFJPRklMRV9DRkxBR1M9Ii1nIgorZmkKK0FDX1NVQlNUKFBST0ZJTEVfQ0ZMQUdTKQorCisjIEdTVF9ESVNBQkxFX0RFUFJFQ0FURUQ6IGhpZGUgdGhlIHZpc2liaWxpdHkgb2YgZGVwcmVjYXRlZAorIyBmdW5jdGlvbmFsaXR5IGZyb20gdGhlIEFQSSB0aGF0IGdzdHJlYW1lciB1c2VzCisjIEdTVF9SRU1PVkVfREVQUkVDQVRFRDogZG9uJ3QgY29tcGlsZSBkZXByZWNhdGVkIGZ1bmN0aW9uYWxpdHkgKGJyZWFrcyBBQkkpCitpZiB0ZXN0ICJ4JFBBQ0tBR0VfVkVSU0lPTl9OQU5PIiA9ICJ4MSI7IHRoZW4KKyAgZG5sIERlZmluZSBfb25seV8gd2hlbiBjb21waWxpbmcgZnJvbSBnaXQgKG5vdCBmb3IgcHJlLXJlbGVhc2VzIG9yIHJlbGVhc2VzKQorICBERVBSRUNBVEVEX0NGTEFHUz0iLURHU1RfRElTQUJMRV9ERVBSRUNBVEVEIgorZWxzZQorICBERVBSRUNBVEVEX0NGTEFHUz0iIgorZmkKK0FDX1NVQlNUKERFUFJFQ0FURURfQ0ZMQUdTKQorCitkbmwgZXZlcnkgZmxhZyBpbiBHU1RfT1BUSU9OX0NGTEFHUyBjYW4gYmUgb3ZlcnJpZGRlbiBhdCBtYWtlIHRpbWUgdmlhIGUuZy4KK2RubCBtYWtlIERFUFJFQ0FURURfQ0ZMQUdTPScnCitHU1RfT1BUSU9OX0NGTEFHUz0iXCQoV0FSTklOR19DRkxBR1MpIFwkKERFQlVHX0NGTEFHUykgXCQoUFJPRklMRV9DRkxBR1MpIFwkKEdDT1ZfQ0ZMQUdTKSBcJChPUFRfQ0ZMQUdTKSBcJChERVBSRUNBVEVEX0NGTEFHUykiCitHU1RfT1BUSU9OX0NYWEZMQUdTPSJcJChXQVJOSU5HX0NYWEZMQUdTKSBcJChFUlJPUl9DWFhGTEFHUykgXCQoREVCVUdfQ0ZMQUdTKSBcJChQUk9GSUxFX0NGTEFHUykgXCQoR0NPVl9DRkxBR1MpIFwkKE9QVF9DRkxBR1MpIFwkKERFUFJFQ0FURURfQ0ZMQUdTKSIKK0dTVF9PUFRJT05fQ0ZMQUdTPSIkR1NUX09QVElPTl9DRkxBR1MgLURHU1RfVVNFX1VOU1RBQkxFX0FQSSIKK0dTVF9PUFRJT05fQ1hYRkxBR1M9IiRHU1RfT1BUSU9OX0NYWEZMQUdTIC1ER1NUX1VTRV9VTlNUQUJMRV9BUEkiCitBQ19TVUJTVChHU1RfT1BUSU9OX0NGTEFHUykKK0FDX1NVQlNUKEdTVF9PUFRJT05fQ1hYRkxBR1MpCisKK2RubCBHU1RfQUxMXyoKK2RubCB2YXJzIGNvbW1vbiB0byBmb3IgYWxsIGludGVybmFsIG9iamVjdHMgKGNvcmUgbGlicywgZWxlbWVudHMsIGFwcGxpY2F0aW9ucykKK2RubCBDRkxBR1M6CitkbmwgLSBzcmMgYW5kIGJ1aWxkIGRpcnMgbmVlZCB0byBiZSBhZGRlZCBiZWNhdXNlIGV2ZXJ5IHBpZWNlIHRoYXQgZ2V0cyBidWlsdAorZG5sICAgd2lsbCBuZWVkIHRoZSBHU3RyZWFtZXIgc291cmNlIGFuZCBnZW5lcmF0ZWQgaGVhZGVycworR1NUX0FMTF9DWFhGTEFHUz0iLUlcJCh0b3Bfc3JjZGlyKS9saWJzIC1JXCQodG9wX3NyY2RpcikgLUlcJCh0b3BfYnVpbGRkaXIpL2xpYnMgLUlcJCh0b3BfYnVpbGRkaXIpICRHTElCX0NGTEFHUyAkR0xJQl9FWFRSQV9DRkxBR1MgXCQoR1NUX09QVElPTl9DWFhGTEFHUykgXCQoRVJST1JfQ1hYRkxBR1MpIgorR1NUX0FMTF9DRkxBR1M9Ii1JXCQodG9wX3NyY2RpcikvbGlicyAtSVwkKHRvcF9zcmNkaXIpIC1JXCQodG9wX2J1aWxkZGlyKS9saWJzIC1JXCQodG9wX2J1aWxkZGlyKSAkR0xJQl9DRkxBR1MgJEdMSUJfRVhUUkFfQ0ZMQUdTIFwkKEdTVF9PUFRJT05fQ0ZMQUdTKSBcJChFUlJPUl9DRkxBR1MpIgorCitkbmwgRklYTUU6IGNoZWNrIGlmIExUTElCSU5UTCBpcyBuZWVkZWQgZXZlcnl3aGVyZQorZG5sIEkgcHJlc3VtZSBpdCBpcyBnaXZlbiB0aGF0IGl0IGNvbnRhaW5zIHRoZSBzeW1ib2xzIHRoYXQgXygpIHN0dWZmIG1hcHMgdG8KK0dTVF9BTExfTElCUz0iJEdMSUJfTElCUyAkTFRMSUJJTlRMIFwkKEdDT1ZfTElCUykiCisKK2RubCBMREZMQUdTIHJlYWxseSBzaG91bGQgb25seSBjb250YWluIGZsYWdzLCBub3QgbGlicyAtIHRoZXkgZ2V0IGFkZGVkIGJlZm9yZQorZG5sIHdoYXRldmVydGFyZ2V0X0xJQlMgYW5kIC1MIGZsYWdzIGhlcmUgYWZmZWN0IHRoZSByZXN0IG9mIHRoZSBsaW5raW5nCitHU1RfQUxMX0xERkxBR1M9Ii1uby11bmRlZmluZWQiCitpZiB0ZXN0ICJ4JHtlbmFibGVfQnN5bWJvbGljfSIgPSAieHllcyI7IHRoZW4KKyAgR1NUX0FMTF9MREZMQUdTPSIkR1NUX0FMTF9MREZMQUdTIC1XbCwtQnN5bWJvbGljLWZ1bmN0aW9ucyIKK2ZpCisKK0FDX1NVQlNUKEdTVF9BTExfQ0ZMQUdTKQorQUNfU1VCU1QoR1NUX0FMTF9DWFhGTEFHUykKK0FDX1NVQlNUKEdTVF9BTExfTElCUykKK0FDX1NVQlNUKEdTVF9BTExfTERGTEFHUykKKworZG5sIEdTVF9MSUJfTERGTEFHUworZG5sIGxpbmtlciBmbGFncyBzaGFyZWQgYnkgYWxsIGxpYnJhcmllcworZG5sIExERkxBR1MgbW9kaWZpZXIgZGVmaW5pbmcgZXhwb3J0ZWQgc3ltYm9scyBmcm9tIGJ1aWx0IGxpYnJhcmllcworR1NUX0xJQl9MREZMQUdTPSItZXhwb3J0LXN5bWJvbHMtcmVnZXggXF5bX10qXChnc3RfXHxHc3RcfEdTVF9cKS4qIgorQUNfU1VCU1QoR1NUX0xJQl9MREZMQUdTKQorCitkbmwgR1NUX09CSl8qCitkbmwgZGVmYXVsdCB2YXJzIGZvciBhbGwgaW50ZXJuYWwgb2JqZWN0cyBidWlsdCBvbiBsaWJnc3RyZWFtZXIKK2RubCBpbmNsdWRlcyBHU1RfQUxMXyoKK0dTVF9PQkpfQ0ZMQUdTPSJcJChHU1RfQUxMX0NGTEFHUykiCitHU1RfT0JKX0NYWEZMQUdTPSJcJChHU1RfQUxMX0NYWEZMQUdTKSIKK0dTVF9PQkpfTElCUz0iXCQodG9wX2J1aWxkZGlyKS9nc3QvbGliZ3N0cmVhbWVyLSRHU1RfTUFKT1JNSU5PUi5sYSBcJChHU1RfQUxMX0xJQlMpIgorQUNfU1VCU1QoR1NUX09CSl9DRkxBR1MpCitBQ19TVUJTVChHU1RfT0JKX0NYWEZMQUdTKQorQUNfU1VCU1QoR1NUX09CSl9MSUJTKQorCitkbmwgR1NUX1BMVUdJTl9MREZMQUdTCitkbmwgTERGTEFHUyBmb3IgcGx1Z2luczsgaW5jbHVkZXMgR1NUX0FMTF9MREZMQUdTCitHU1RfUExVR0lOX0xERkxBR1M9Ii1tb2R1bGUgLWF2b2lkLXZlcnNpb24gLWV4cG9ydC1zeW1ib2xzLXJlZ2V4ICdeW19dKmdzdF9wbHVnaW5fZGVzYy4qJyAkR1NUX0FMTF9MREZMQUdTIgorQUNfU1VCU1QoR1NUX1BMVUdJTl9MREZMQUdTLCAiJEdTVF9QTFVHSU5fTERGTEFHUyIpCisKK2RubCBwbHVnaW4gc2Nhbm5lciBsb2NhdGlvbnMKK0FTX0FDX0VYUEFORChHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVELCR7bGliZXhlY2Rpcn0vZ3N0cmVhbWVyLSRHU1RfTUFKT1JNSU5PUi9nc3QtcGx1Z2luLXNjYW5uZXIpCitBQ19ERUZJTkVfVU5RVU9URUQoR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCwKKyAgICAiJEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQiLCBbbG9jYXRpb24gb2YgdGhlIGluc3RhbGxlZCBnc3QtcGx1Z2luLXNjYW5uZXJdKQorQUNfU1VCU1QoR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCkKKworZG5sIHRoaW5ncyBmb3Igb3VyIGludGVybmFsIGxpYmNoZWNrIChtdXN0IGJlIGNhbGxlZCBldmVuIGlmIGJ1aWxkaW5nCitkbmwgbGliY2hlY2sgaXMgZGlzYWJsZWQgYmVjYXVzZSBpdCBkZWZpbmVzIGNvbmRpdGlvbmFscykKK0FHX0dTVF9DSEVDS19DSEVDS1MoKQorCitBQ19DT05GSUdfRklMRVMoCitNYWtlZmlsZQorZ3N0L01ha2VmaWxlCitnc3QvZ3N0Y29uZmlnLmgKK2dzdC9nc3R2ZXJzaW9uLmgKK2dzdC9wYXJzZS9NYWtlZmlsZQorbGlicy9NYWtlZmlsZQorbGlicy9nc3QvTWFrZWZpbGUKK2xpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUKK2xpYnMvZ3N0L2NoZWNrL01ha2VmaWxlCitsaWJzL2dzdC9jaGVjay9saWJjaGVjay9NYWtlZmlsZQorbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2suaAorbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZQorbGlicy9nc3QvZGF0YXByb3RvY29sL01ha2VmaWxlCitsaWJzL2dzdC9oZWxwZXJzL01ha2VmaWxlCitsaWJzL2dzdC9uZXQvTWFrZWZpbGUKK3BsdWdpbnMvTWFrZWZpbGUKK3BsdWdpbnMvaW5kZXhlcnMvTWFrZWZpbGUKK3BsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUKK3BvL01ha2VmaWxlLmluCit0ZXN0cy9NYWtlZmlsZQordGVzdHMvYmVuY2htYXJrcy9NYWtlZmlsZQordGVzdHMvY2hlY2svTWFrZWZpbGUKK3Rlc3RzL21pc2MvTWFrZWZpbGUKK3Rlc3RzL2V4YW1wbGVzL01ha2VmaWxlCit0ZXN0cy9leGFtcGxlcy9hZGFwdGVyL01ha2VmaWxlCit0ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL01ha2VmaWxlCit0ZXN0cy9leGFtcGxlcy9zdGVwcGluZy9NYWtlZmlsZQordGVzdHMvZXhhbXBsZXMvaGVsbG93b3JsZC9NYWtlZmlsZQordGVzdHMvZXhhbXBsZXMvbGF1bmNoL01ha2VmaWxlCit0ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUKK3Rlc3RzL2V4YW1wbGVzL21ldGFkYXRhL01ha2VmaWxlCit0ZXN0cy9leGFtcGxlcy9xdWV1ZS9NYWtlZmlsZQordGVzdHMvZXhhbXBsZXMvc3RyZWFtcy9NYWtlZmlsZQordGVzdHMvZXhhbXBsZXMvdHlwZWZpbmQvTWFrZWZpbGUKK3Rvb2xzL01ha2VmaWxlCitjb21tb24vTWFrZWZpbGUKK2NvbW1vbi9tNC9NYWtlZmlsZQorZG9jcy9NYWtlZmlsZQorZG9jcy9kZXNpZ24vTWFrZWZpbGUKK2RvY3MvZmFxL01ha2VmaWxlCitkb2NzL2dzdC9NYWtlZmlsZQorZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzCitkb2NzL2xpYnMvTWFrZWZpbGUKK2RvY3MvcGx1Z2lucy9NYWtlZmlsZQorZG9jcy9tYW51YWwvTWFrZWZpbGUKK2RvY3MvcHdnL01ha2VmaWxlCitkb2NzL3NsaWRlcy9NYWtlZmlsZQorZG9jcy94c2wvTWFrZWZpbGUKK2RvY3MvdmVyc2lvbi5lbnRpdGllcworbTQvTWFrZWZpbGUKK3BrZ2NvbmZpZy9NYWtlZmlsZQorc3RhbXAuaAorcGtnY29uZmlnL2dzdHJlYW1lci5wYworcGtnY29uZmlnL2dzdHJlYW1lci11bmluc3RhbGxlZC5wYworcGtnY29uZmlnL2dzdHJlYW1lci1iYXNlLnBjCitwa2djb25maWcvZ3N0cmVhbWVyLWJhc2UtdW5pbnN0YWxsZWQucGMKK3BrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2sucGMKK3BrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2stdW5pbnN0YWxsZWQucGMKK3BrZ2NvbmZpZy9nc3RyZWFtZXItY29udHJvbGxlci5wYworcGtnY29uZmlnL2dzdHJlYW1lci1jb250cm9sbGVyLXVuaW5zdGFsbGVkLnBjCitwa2djb25maWcvZ3N0cmVhbWVyLWRhdGFwcm90b2NvbC5wYworcGtnY29uZmlnL2dzdHJlYW1lci1kYXRhcHJvdG9jb2wtdW5pbnN0YWxsZWQucGMKK3BrZ2NvbmZpZy9nc3RyZWFtZXItbmV0LnBjCitwa2djb25maWcvZ3N0cmVhbWVyLW5ldC11bmluc3RhbGxlZC5wYworZ3N0LWVsZW1lbnQtY2hlY2subTQKK2dzdHJlYW1lci5zcGVjCispCisKK2RubCBDcmVhdGUgdGhlIGNvbmZpZy5oIGZpbGUgZm9yIFZpc3VhbCBTdHVkaW8gYnVpbGRzCitkbmwgQmV3YXJlIG9mIHNwYWNlcyBhbmQgLydzIGluIHNvbWUgb2YgdGhlIHNoZWxsIHZhcmlhYmxlIGNvbnRlbnRzLgorc2VkIFwKKyAgICAtZSAncy8uKmNvbmZpZy5oLmluLiphdXRvaGVhZGVyLiovXC8qIEF1dG9nZW5lcmF0ZWQgY29uZmlnLmggY3JlYXRlZCBmb3Igd2luMzIgVmlzdWFsIFN0dWRpbyBidWlsZHMgKlwvXG5cblwvKiBQUkVGSVggLS0gc3BlY2lmaWNhbGx5IGFkZGVkIGZvciBXaW5kb3dzIGZvciBlYXNpZXIgbW92aW5nICpcL1xuI2RlZmluZSBQUkVGSVggIkM6XFxcXGdzdHJlYW1lciIvJyBcCisgICAgLWUgJ3MvLiogR0VUVEVYVF9QQUNLQUdFJC8jZGVmaW5lIEdFVFRFWFRfUEFDS0FHRSAiJyRHRVRURVhUX1BBQ0tBR0UnIi8nIFwKKyAgICAtZSAncy8uKiBHU1RfREFUQURJUiQvI2RlZmluZSBHU1RfREFUQURJUiBQUkVGSVggIlxcXFxzaGFyZSIvJyBcCisgICAgLWUgJ3MvLiogR1NUX0xFVkVMX0RFRkFVTFQkLyNkZWZpbmUgR1NUX0xFVkVMX0RFRkFVTFQgR1NUX0xFVkVMX0VSUk9SLycgXAorICAgIC1lICdzLy4qIEdTVF9MSUNFTlNFJC8jZGVmaW5lIEdTVF9MSUNFTlNFICInJEdTVF9MSUNFTlNFJyIvJyBcCisgICAgLWUgJ3MvLiogR1NUX01BSk9STUlOT1IkLyNkZWZpbmUgR1NUX01BSk9STUlOT1IgIickR1NUX01BSk9STUlOT1InIi8nIFwKKyAgICAtZSAicywuKiBHU1RfUEFDS0FHRV9OQU1FJCwjZGVmaW5lIEdTVF9QQUNLQUdFX05BTUUgXCIke0dTVF9QQUNLQUdFX05BTUV9XCIsIiBcCisgICAgLWUgJ3MvLiogR1NUX1BBQ0tBR0VfT1JJR0lOJC8jZGVmaW5lIEdTVF9QQUNLQUdFX09SSUdJTiAiVW5rbm93biBwYWNrYWdlIG9yaWdpbiIvJyBcCisgICAgLWUgInMsLiogR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRSQsI2RlZmluZSBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FIFwiJHtHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FfVwiLCIgXAorICAgIC1lICdzLy4qIEhBVkVfQ1BVX0kzODYkLyNkZWZpbmUgSEFWRV9DUFVfSTM4NiAxLycgXAorICAgIC1lICdzLy4qIEhBVkVfRkdFVFBPUyQvI2RlZmluZSBIQVZFX0ZHRVRQT1MgMS8nIFwKKyAgICAtZSAncy8uKiBIQVZFX0ZTRVRQT1MkLyNkZWZpbmUgSEFWRV9GU0VUUE9TIDEvJyBcCisgICAgLWUgJ3MvLiogSEFWRV9QUk9DRVNTX0gkLyNkZWZpbmUgSEFWRV9QUk9DRVNTX0ggMS8nIFwKKyAgICAtZSAncy8uKiBIQVZFX1NURExJQl9IJC8jZGVmaW5lIEhBVkVfU1RETElCX0ggMS8nIFwKKyAgICAtZSAncy8uKiBIQVZFX1NUUklOR19IJC8jZGVmaW5lIEhBVkVfU1RSSU5HX0ggMS8nIFwKKyAgICAtZSAncy8uKiBIQVZFX1NZU19TVEFUX0gkLyNkZWZpbmUgSEFWRV9TWVNfU1RBVF9IIDEvJyBcCisgICAgLWUgJ3MvLiogSEFWRV9TWVNfVFlQRVNfSCQvI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEvJyBcCisgICAgLWUgJ3MvLiogSEFWRV9XSU4zMiQvI2RlZmluZSBIQVZFX1dJTjMyIDEvJyBcCisgICAgLWUgJ3MvLiogSEFWRV9XSU5TT0NLMl9IJC8jZGVmaW5lIEhBVkVfV0lOU09DSzJfSCAxLycgXAorICAgIC1lICdzLy4qIEhPU1RfQ1BVJC8jZGVmaW5lIEhPU1RfQ1BVICJpNjg2Ii8nIFwKKyAgICAtZSAncy8uKiBNRU1PUllfQUxJR05NRU5UX01BTExPQy8jZGVmaW5lIE1FTU9SWV9BTElHTk1FTlRfTUFMTE9DIDEvJyBcCisgICAgLWUgJ3MvLiogTElCRElSJC8jaWZkZWYgX0RFQlVHXG4jICBkZWZpbmUgTElCRElSIFBSRUZJWCAiXFxcXGRlYnVnXFxcXGxpYiJcbiNlbHNlXG4jICBkZWZpbmUgTElCRElSIFBSRUZJWCAiXFxcXGxpYiJcbiNlbmRpZi8nIFwKKyAgICAtZSAncy8uKiBMT0NBTEVESVIkLyNkZWZpbmUgTE9DQUxFRElSIFBSRUZJWCAiXFxcXHNoYXJlXFxcXGxvY2FsZSIvJyBcCisgICAgLWUgJ3MvLiogUEFDS0FHRSQvI2RlZmluZSBQQUNLQUdFICJnc3RyZWFtZXIiLycgXAorICAgIC1lICdzLy4qIFBBQ0tBR0VfQlVHUkVQT1JUJC8jZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICJodHRwOlwvXC9idWd6aWxsYS5nbm9tZS5vcmdcL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1HU3RyZWFtZXIiLycgXAorICAgIC1lICdzLy4qIFBBQ0tBR0VfTkFNRSQvI2RlZmluZSBQQUNLQUdFX05BTUUgIickUEFDS0FHRV9OQU1FJyIvJyBcCisgICAgLWUgInMvLiogUEFDS0FHRV9TVFJJTkckLyNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgXCIkUEFDS0FHRV9TVFJJTkdcIi8iIFwKKyAgICAtZSAncy8uKiBQQUNLQUdFX1RBUk5BTUUkLyNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICInJFBBQ0tBR0VfVEFSTkFNRSciLycgXAorICAgIC1lICdzLy4qIFBBQ0tBR0VfVkVSU0lPTiQvI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIickUEFDS0FHRV9WRVJTSU9OJyIvJyBcCisgICAgLWUgJ3MvLiogUExVR0lORElSJC8jaWZkZWYgX0RFQlVHXG4jICBkZWZpbmUgUExVR0lORElSIFBSRUZJWCAiXFxcXGRlYnVnXFxcXGxpYlxcXFxnc3RyZWFtZXItMC4xMSJcbiNlbHNlXG4jICBkZWZpbmUgUExVR0lORElSIFBSRUZJWCAiXFxcXGxpYlxcXFxnc3RyZWFtZXItMC4xMSJcbiNlbmRpZi8nIFwKKyAgICAtZSAncy8uKiBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEJC8jZGVmaW5lIEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgTElCRElSICJcXFxcZ3N0LXBsdWdpbi1zY2FubmVyIi8nIFwKKyAgICAtZSAncy8uKiBWRVJTSU9OJC8jZGVmaW5lIFZFUlNJT04gIickVkVSU0lPTiciLycgXAorICAgIGNvbmZpZy5oLmluID53aW4zMi9jb21tb24vY29uZmlnLmgtbmV3CisKK0FDX09VVFBVVAorCitkbmwgbmVnYXRlIGZvciBvdXRwdXQKK2lmIHRlc3QgIngke0dTVF9ESVNBQkxFX0dTVF9ERUJVR30iID0gInhubyI7IHRoZW4gZW5hYmxlX2dzdF9kZWJ1Zz0ieWVzIjsgZmkKK2lmIHRlc3QgIngke0dTVF9ESVNBQkxFX1BBUlNFfSIgPSAieG5vIjsgdGhlbiBlbmFibGVfcGFyc2U9InllcyI7IGZpCitpZiB0ZXN0ICJ4JHtHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR30iID0gInhubyI7IHRoZW4gZW5hYmxlX29wdGlvbl9wYXJzaW5nPSJ5ZXMiOyBmaQoraWYgdGVzdCAieCR7R1NUX0RJU0FCTEVfVFJBQ0V9IiA9ICJ4bm8iOyB0aGVuIGVuYWJsZV90cmFjZT0ieWVzIjsgZmkKK2lmIHRlc3QgIngke0dTVF9ESVNBQkxFX0FMTE9DX1RSQUNFfSIgPSAieG5vIjsgdGhlbiBlbmFibGVfYWxsb2NfdHJhY2U9InllcyI7IGZpCitpZiB0ZXN0ICJ4JHtHU1RfRElTQUJMRV9QTFVHSU59IiA9ICJ4bm8iOyB0aGVuIGVuYWJsZV9wbHVnaW49InllcyI7IGZpCitpZiB0ZXN0ICJ4JHtHU1RfRElTQUJMRV9SRUdJU1RSWX0iID0gInhubyI7IHRoZW4gZW5hYmxlX3JlZ2lzdHJ5PSJ5ZXMiOyBmaQoraWYgdGVzdCAieCR7R1NUX0RJU0FCTEVfTkVUfSIgPSAieG5vIjsgdGhlbiBlbmFibGVfbmV0PSJ5ZXMiOyBmaQorCitlY2hvICIKKworQ29uZmlndXJhdGlvbgorCVZlcnNpb24gICAgICAgICAgICAgICAgICAgIDogJHtWRVJTSU9OfQorCVNvdXJjZSBjb2RlIGxvY2F0aW9uICAgICAgIDogJHtzcmNkaXJ9CisJUHJlZml4ICAgICAgICAgICAgICAgICAgICAgOiAke3ByZWZpeH0KKwlDb21waWxlciAgICAgICAgICAgICAgICAgICA6ICR7Q0N9CisJUGFja2FnZSBuYW1lICAgICAgICAgICAgICAgOiAke0dTVF9QQUNLQUdFX05BTUV9CisJUGFja2FnZSBvcmlnaW4gICAgICAgICAgICAgOiAke0dTVF9QQUNLQUdFX09SSUdJTn0KKworCURvY3VtZW50YXRpb24gKG1hbnVhbHMpICAgIDogJHtlbmFibGVfZG9jYm9va30KKwlEb2N1bWVudGF0aW9uIChBUEkpICAgICAgICA6ICR7ZW5hYmxlX2d0a19kb2N9CisKKwlEZWJ1ZyBMb2dnaW5nICAgICAgICAgICAgICA6ICR7ZW5hYmxlX2dzdF9kZWJ1Z30KKwlDb21tYW5kLWxpbmUgcGFyc2VyICAgICAgICA6ICR7ZW5hYmxlX3BhcnNlfQorCU9wdGlvbiBwYXJzaW5nIGluIGdzdF9pbml0IDogJHtlbmFibGVfb3B0aW9uX3BhcnNpbmd9CisJVHJhY2luZyBzdWJzeXN0ZW0gICAgICAgICAgOiAke2VuYWJsZV90cmFjZX0KKwlBbGxvY2F0aW9uIHRyYWNpbmcgICAgICAgICA6ICR7ZW5hYmxlX2FsbG9jX3RyYWNlfQorCVBsdWdpbiByZWdpc3RyeSAgICAgICAgICAgIDogJHtlbmFibGVfcmVnaXN0cnl9CisJUGx1Z2luIHN1cHBvcnQJICAgICAgICAgICA6ICR7ZW5hYmxlX3BsdWdpbn0KKwlOZXR3b3JrIHN1cHBvcnQgICAgICAgICAgICA6ICR7ZW5hYmxlX25ldH0KKwlVbml0IHRlc3Rpbmcgc3VwcG9ydCAgICAgICA6ICR7QlVJTERfQ0hFQ0t9CisKKwlEZWJ1ZyAgICAgICAgICAgICAgICAgICAgICA6ICR7VVNFX0RFQlVHfQorCVByb2ZpbGluZyAgICAgICAgICAgICAgICAgIDogJHtVU0VfUFJPRklMSU5HfQorCisJQnVpbGRpbmcgZXhhbXBsZXMgICAgICAgICAgOiAke0JVSUxEX0VYQU1QTEVTfQorCUJ1aWxkaW5nIHRlc3QgYXBwcyAgICAgICAgIDogJHtCVUlMRF9URVNUU30KKwlCdWlsZGluZyB0ZXN0cyB0aGF0IGZhaWwgICA6ICR7QlVJTERfRkFJTElOR19URVNUU30KKyIKZGlmZiAtLWdpdCBhL2RlcGNvbXAgYi9kZXBjb21wCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRmOGVlYTcKLS0tIC9kZXYvbnVsbAorKysgYi9kZXBjb21wCkBAIC0wLDAgKzEsNjMwIEBACisjISAvYmluL3NoCisjIGRlcGNvbXAgLSBjb21waWxlIGEgcHJvZ3JhbSBnZW5lcmF0aW5nIGRlcGVuZGVuY2llcyBhcyBzaWRlLWVmZmVjdHMKKworc2NyaXB0dmVyc2lvbj0yMDA5LTA0LTI4LjIxOyAjIFVUQworCisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOSBGcmVlCisjIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisjIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBBbGV4YW5kcmUgT2xpdmEgPG9saXZhQGRjYy51bmljYW1wLmJyPi4KKworY2FzZSAkMSBpbgorICAnJykKKyAgICAgZWNobyAiJDA6IE5vIGNvbW1hbmQuICBUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgorICAgICBleGl0IDE7CisgICAgIDs7CisgIC1oIHwgLS1oKikKKyAgICBjYXQgPDxcRU9GCitVc2FnZTogZGVwY29tcCBbLS1oZWxwXSBbLS12ZXJzaW9uXSBQUk9HUkFNIFtBUkdTXQorCitSdW4gUFJPR1JBTVMgQVJHUyB0byBjb21waWxlIGEgZmlsZSwgZ2VuZXJhdGluZyBkZXBlbmRlbmNpZXMKK2FzIHNpZGUtZWZmZWN0cy4KKworRW52aXJvbm1lbnQgdmFyaWFibGVzOgorICBkZXBtb2RlICAgICBEZXBlbmRlbmN5IHRyYWNraW5nIG1vZGUuCisgIHNvdXJjZSAgICAgIFNvdXJjZSBmaWxlIHJlYWQgYnkgYFBST0dSQU1TIEFSR1MnLgorICBvYmplY3QgICAgICBPYmplY3QgZmlsZSBvdXRwdXQgYnkgYFBST0dSQU1TIEFSR1MnLgorICBERVBESVIgICAgICBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgZGVwZW5kZW5jaWVzLgorICBkZXBmaWxlICAgICBEZXBlbmRlbmN5IGZpbGUgdG8gb3V0cHV0LgorICB0bXBkZXBmaWxlICBUZW1wb3JhcnkgZmlsZSB0byB1c2Ugd2hlbiBvdXRwdXRpbmcgZGVwZW5kZW5jaWVzLgorICBsaWJ0b29sICAgICBXaGV0aGVyIGxpYnRvb2wgaXMgdXNlZCAoeWVzL25vKS4KKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4KK0VPRgorICAgIGV4aXQgJD8KKyAgICA7OworICAtdiB8IC0tdiopCisgICAgZWNobyAiZGVwY29tcCAkc2NyaXB0dmVyc2lvbiIKKyAgICBleGl0ICQ/CisgICAgOzsKK2VzYWMKKworaWYgdGVzdCAteiAiJGRlcG1vZGUiIHx8IHRlc3QgLXogIiRzb3VyY2UiIHx8IHRlc3QgLXogIiRvYmplY3QiOyB0aGVuCisgIGVjaG8gImRlcGNvbXA6IFZhcmlhYmxlcyBzb3VyY2UsIG9iamVjdCBhbmQgZGVwbW9kZSBtdXN0IGJlIHNldCIgMT4mMgorICBleGl0IDEKK2ZpCisKKyMgRGVwZW5kZW5jaWVzIGZvciBzdWIvYmFyLm8gb3Igc3ViL2Jhci5vYmogZ28gaW50byBzdWIvLmRlcHMvYmFyLlBvLgorZGVwZmlsZT0ke2RlcGZpbGUtYGVjaG8gIiRvYmplY3QiIHwKKyAgc2VkICdzfFteXFwvXSokfCcke0RFUERJUi0uZGVwc30nLyZ8O3N8XC5cKFteLl0qXCkkfC5QXDF8O3N8UG9iaiR8UG98J2B9Cit0bXBkZXBmaWxlPSR7dG1wZGVwZmlsZS1gZWNobyAiJGRlcGZpbGUiIHwgc2VkICdzL1wuXChbXi5dKlwpJC8uVFwxLydgfQorCitybSAtZiAiJHRtcGRlcGZpbGUiCisKKyMgU29tZSBtb2RlcyB3b3JrIGp1c3QgbGlrZSBvdGhlciBtb2RlcywgYnV0IHVzZSBkaWZmZXJlbnQgZmxhZ3MuICBXZQorIyBwYXJhbWV0ZXJpemUgaGVyZSwgYnV0IHN0aWxsIGxpc3QgdGhlIG1vZGVzIGluIHRoZSBiaWcgY2FzZSBiZWxvdywKKyMgdG8gbWFrZSBkZXBlbmQubTQgZWFzaWVyIHRvIHdyaXRlLiAgTm90ZSB0aGF0IHdlICpjYW5ub3QqIHVzZSBhIGNhc2UKKyMgaGVyZSwgYmVjYXVzZSB0aGlzIGZpbGUgY2FuIG9ubHkgY29udGFpbiBvbmUgY2FzZSBzdGF0ZW1lbnQuCitpZiB0ZXN0ICIkZGVwbW9kZSIgPSBocDsgdGhlbgorICAjIEhQIGNvbXBpbGVyIHVzZXMgLU0gYW5kIG5vIGV4dHJhIGFyZy4KKyAgZ2NjZmxhZz0tTQorICBkZXBtb2RlPWdjYworZmkKKworaWYgdGVzdCAiJGRlcG1vZGUiID0gZGFzaFhtc3Rkb3V0OyB0aGVuCisgICAjIFRoaXMgaXMganVzdCBsaWtlIGRhc2htc3Rkb3V0IHdpdGggYSBkaWZmZXJlbnQgYXJndW1lbnQuCisgICBkYXNobWZsYWc9LXhNCisgICBkZXBtb2RlPWRhc2htc3Rkb3V0CitmaQorCitjeWdwYXRoX3U9ImN5Z3BhdGggLXUgLWYgLSIKK2lmIHRlc3QgIiRkZXBtb2RlIiA9IG1zdmNtc3lzOyB0aGVuCisgICAjIFRoaXMgaXMganVzdCBsaWtlIG1zdmlzdWFsY3BwIGJ1dCB3L28gY3lncGF0aCB0cmFuc2xhdGlvbi4KKyAgICMgSnVzdCBjb252ZXJ0IHRoZSBiYWNrc2xhc2gtZXNjYXBlZCBiYWNrc2xhc2hlcyB0byBzaW5nbGUgZm9yd2FyZAorICAgIyBzbGFzaGVzIHRvIHNhdGlzZnkgZGVwZW5kLm00CisgICBjeWdwYXRoX3U9InNlZCBzLFxcXFxcXFxcLC8sZyIKKyAgIGRlcG1vZGU9bXN2aXN1YWxjcHAKK2ZpCisKK2Nhc2UgIiRkZXBtb2RlIiBpbgorZ2NjMykKKyMjIGdjYyAzIGltcGxlbWVudHMgZGVwZW5kZW5jeSB0cmFja2luZyB0aGF0IGRvZXMgZXhhY3RseSB3aGF0CisjIyB3ZSB3YW50LiAgWWF5ISAgTm90ZTogZm9yIHNvbWUgcmVhc29uIGxpYnRvb2wgMS40IGRvZXNuJ3QgbGlrZQorIyMgaXQgaWYgLU1EIC1NUCBjb21lcyBhZnRlciB0aGUgLU1GIHN0dWZmLiAgSG1tLgorIyMgVW5mb3J0dW5hdGVseSwgRnJlZUJTRCBjODkgYWNjZXB0YW5jZSBvZiBmbGFncyBkZXBlbmRzIHVwb24KKyMjIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgb3JkZXI7IHNvIGFkZCB0aGUgZmxhZ3Mgd2hlcmUgdGhleQorIyMgYXBwZWFyIGluIGRlcGVuZDIuYW0uICBOb3RlIHRoYXQgdGhlIHNsb3dkb3duIGluY3VycmVkIGhlcmUKKyMjIGFmZmVjdHMgb25seSBjb25maWd1cmU6IGluIG1ha2VmaWxlcywgJUZBU1RERVAlIHNob3J0Y3V0cyB0aGlzLgorICBmb3IgYXJnCisgIGRvCisgICAgY2FzZSAkYXJnIGluCisgICAgLWMpIHNldCBmbm9yZCAiJEAiIC1NVCAiJG9iamVjdCIgLU1EIC1NUCAtTUYgIiR0bXBkZXBmaWxlIiAiJGFyZyIgOzsKKyAgICAqKSAgc2V0IGZub3JkICIkQCIgIiRhcmciIDs7CisgICAgZXNhYworICAgIHNoaWZ0ICMgZm5vcmQKKyAgICBzaGlmdCAjICRhcmcKKyAgZG9uZQorICAiJEAiCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgIGVsc2UKKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBtdiAiJHRtcGRlcGZpbGUiICIkZGVwZmlsZSIKKyAgOzsKKworZ2NjKQorIyMgVGhlcmUgYXJlIHZhcmlvdXMgd2F5cyB0byBnZXQgZGVwZW5kZW5jeSBvdXRwdXQgZnJvbSBnY2MuICBIZXJlJ3MKKyMjIHdoeSB3ZSBwaWNrIHRoaXMgcmF0aGVyIG9ic2N1cmUgbWV0aG9kOgorIyMgLSBEb24ndCB3YW50IHRvIHVzZSAtTUQgYmVjYXVzZSB3ZSdkIGxpa2UgdGhlIGRlcGVuZGVuY2llcyB0byBlbmQKKyMjICAgdXAgaW4gYSBzdWJkaXIuICBIYXZpbmcgdG8gcmVuYW1lIGJ5IGhhbmQgaXMgdWdseS4KKyMjICAgKFdlIG1pZ2h0IGVuZCB1cCBkb2luZyB0aGlzIGFueXdheSB0byBzdXBwb3J0IG90aGVyIGNvbXBpbGVycy4pCisjIyAtIFRoZSBERVBFTkRFTkNJRVNfT1VUUFVUIGVudmlyb25tZW50IHZhcmlhYmxlIG1ha2VzIGdjYyBhY3QgbGlrZQorIyMgICAtTU0sIG5vdCAtTSAoZGVzcGl0ZSB3aGF0IHRoZSBkb2NzIHNheSkuCisjIyAtIFVzaW5nIC1NIGRpcmVjdGx5IG1lYW5zIHJ1bm5pbmcgdGhlIGNvbXBpbGVyIHR3aWNlIChldmVuIHdvcnNlCisjIyAgIHRoYW4gcmVuYW1pbmcpLgorICBpZiB0ZXN0IC16ICIkZ2NjZmxhZyI7IHRoZW4KKyAgICBnY2NmbGFnPS1NRCwKKyAgZmkKKyAgIiRAIiAtV3AsIiRnY2NmbGFnJHRtcGRlcGZpbGUiCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgIGVsc2UKKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBybSAtZiAiJGRlcGZpbGUiCisgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisgIGFscGhhPUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKKyMjIFRoZSBzZWNvbmQgLWUgZXhwcmVzc2lvbiBoYW5kbGVzIERPUy1zdHlsZSBmaWxlIG5hbWVzIHdpdGggZHJpdmUgbGV0dGVycy4KKyAgc2VkIC1lICdzL15bXjpdKjogLyAvJyBcCisgICAgICAtZSAncy9eWyckYWxwaGEnXTpcL1teOl0qOiAvIC8nIDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisjIyBUaGlzIG5leHQgcGllY2Ugb2YgbWFnaWMgYXZvaWRzIHRoZSBgZGVsZXRlZCBoZWFkZXIgZmlsZScgcHJvYmxlbS4KKyMjIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2hlbiBhIGhlYWRlciBmaWxlIHdoaWNoIGFwcGVhcnMgaW4gYSAuUCBmaWxlCisjIyBpcyBkZWxldGVkLCB0aGUgZGVwZW5kZW5jeSBjYXVzZXMgbWFrZSB0byBkaWUgKGJlY2F1c2UgdGhlcmUgaXMKKyMjIHR5cGljYWxseSBubyB3YXkgdG8gcmVidWlsZCB0aGUgaGVhZGVyKS4gIFdlIGF2b2lkIHRoaXMgYnkgYWRkaW5nCisjIyBkdW1teSBkZXBlbmRlbmNpZXMgZm9yIGVhY2ggaGVhZGVyIGZpbGUuICBUb28gYmFkIGdjYyBkb2Vzbid0IGRvCisjIyB0aGlzIGZvciB1cyBkaXJlY3RseS4KKyAgdHIgJyAnICcKKycgPCAiJHRtcGRlcGZpbGUiIHwKKyMjIFNvbWUgdmVyc2lvbnMgb2YgZ2NjIHB1dCBhIHNwYWNlIGJlZm9yZSB0aGUgYDonLiAgT24gdGhlIHRoZW9yeQorIyMgdGhhdCB0aGUgc3BhY2UgbWVhbnMgc29tZXRoaW5nLCB3ZSBhZGQgYSBzcGFjZSB0byB0aGUgb3V0cHV0IGFzCisjIyB3ZWxsLgorIyMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KKyMjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCisgICAgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworaHApCisgICMgVGhpcyBjYXNlIGV4aXN0cyBvbmx5IHRvIGxldCBkZXBlbmQubTQgZG8gaXRzIHdvcmsuICBJdCB3b3JrcyBieQorICAjIGxvb2tpbmcgYXQgdGhlIHRleHQgb2YgdGhpcyBzY3JpcHQuICBUaGlzIGNhc2Ugd2lsbCBuZXZlciBiZSBydW4sCisgICMgc2luY2UgaXQgaXMgY2hlY2tlZCBmb3IgYWJvdmUuCisgIGV4aXQgMQorICA7OworCitzZ2kpCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgICIkQCIgIi1XcCwtTUR1cGRhdGUsJHRtcGRlcGZpbGUiCisgIGVsc2UKKyAgICAiJEAiIC1NRHVwZGF0ZSAiJHRtcGRlcGZpbGUiCisgIGZpCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgIGVsc2UKKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBybSAtZiAiJGRlcGZpbGUiCisKKyAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuICAjIHllcywgdGhlIHNvdXJjZWZpbGUgZGVwZW5kIG9uIG90aGVyIGZpbGVzCisgICAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKworICAgICMgQ2xpcCBvZmYgdGhlIGluaXRpYWwgZWxlbWVudCAodGhlIGRlcGVuZGVudCkuICBEb24ndCB0cnkgdG8gYmUKKyAgICAjIGNsZXZlciBhbmQgcmVwbGFjZSB0aGlzIHdpdGggc2VkIGNvZGUsIGFzIElSSVggc2VkIHdvbid0IGhhbmRsZQorICAgICMgbGluZXMgd2l0aCBtb3JlIHRoYW4gYSBmaXhlZCBudW1iZXIgb2YgY2hhcmFjdGVycyAoNDA5NiBpbgorICAgICMgSVJJWCA2LjIgc2VkLCA4MTkyIGluIElSSVggNi41KS4gIFdlIGFsc28gcmVtb3ZlIGNvbW1lbnQgbGluZXM7CisgICAgIyB0aGUgSVJJWCBjYyBhZGRzIGNvbW1lbnRzIGxpa2UgYCM6ZmVjJyB0byB0aGUgZW5kIG9mIHRoZQorICAgICMgZGVwZW5kZW5jeSBsaW5lLgorICAgIHRyICcgJyAnCisnIDwgIiR0bXBkZXBmaWxlIiBcCisgICAgfCBzZWQgLWUgJ3MvXi4qXC5vOi8vJyAtZSAncy8jLiokLy8nIC1lICcvXiQvIGQnIHwgXAorICAgIHRyICcKKycgJyAnID4+ICIkZGVwZmlsZSIKKyAgICBlY2hvID4+ICIkZGVwZmlsZSIKKworICAgICMgVGhlIHNlY29uZCBwYXNzIGdlbmVyYXRlcyBhIGR1bW15IGVudHJ5IGZvciBlYWNoIGhlYWRlciBmaWxlLgorICAgIHRyICcgJyAnCisnIDwgIiR0bXBkZXBmaWxlIiBcCisgICB8IHNlZCAtZSAncy9eLipcLm86Ly8nIC1lICdzLyMuKiQvLycgLWUgJy9eJC8gZCcgLWUgJ3MvJC86LycgXAorICAgPj4gIiRkZXBmaWxlIgorICBlbHNlCisgICAgIyBUaGUgc291cmNlZmlsZSBkb2VzIG5vdCBjb250YWluIGFueSBkZXBlbmRlbmNpZXMsIHNvIGp1c3QKKyAgICAjIHN0b3JlIGEgZHVtbXkgY29tbWVudCBsaW5lLCB0byBhdm9pZCBlcnJvcnMgd2l0aCB0aGUgTWFrZWZpbGUKKyAgICAjICJpbmNsdWRlIGJhc2VuYW1lLlBsbyIgc2NoZW1lLgorICAgIGVjaG8gIiNkdW1teSIgPiAiJGRlcGZpbGUiCisgIGZpCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworYWl4KQorICAjIFRoZSBDIGZvciBBSVggQ29tcGlsZXIgdXNlcyAtTSBhbmQgb3V0cHV0cyB0aGUgZGVwZW5kZW5jaWVzCisgICMgaW4gYSAudSBmaWxlLiAgSW4gb2xkZXIgdmVyc2lvbnMsIHRoaXMgZmlsZSBhbHdheXMgbGl2ZXMgaW4gdGhlCisgICMgY3VycmVudCBkaXJlY3RvcnkuICBBbHNvLCB0aGUgQUlYIGNvbXBpbGVyIHB1dHMgYCRvYmplY3Q6JyBhdCB0aGUKKyAgIyBzdGFydCBvZiBlYWNoIGxpbmU7ICRvYmplY3QgZG9lc24ndCBoYXZlIGRpcmVjdG9yeSBpbmZvcm1hdGlvbi4KKyAgIyBWZXJzaW9uIDYgdXNlcyB0aGUgZGlyZWN0b3J5IGluIGJvdGggY2FzZXMuCisgIGRpcj1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8L1teL10qJHwvfCdgCisgIHRlc3QgIngkZGlyIiA9ICJ4JG9iamVjdCIgJiYgZGlyPQorICBiYXNlPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3xeLiovfHwnIC1lICdzL1wubyQvLycgLWUgJ3MvXC5sbyQvLydgCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS51CisgICAgdG1wZGVwZmlsZTI9JGJhc2UudQorICAgIHRtcGRlcGZpbGUzPSRkaXIubGlicy8kYmFzZS51CisgICAgIiRAIiAtV2MsLU0KKyAgZWxzZQorICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS51CisgICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLnUKKyAgICB0bXBkZXBmaWxlMz0kZGlyJGJhc2UudQorICAgICIkQCIgLU0KKyAgZmkKKyAgc3RhdD0kPworCisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIKKyAgICBleGl0ICRzdGF0CisgIGZpCisKKyAgZm9yIHRtcGRlcGZpbGUgaW4gIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIKKyAgZG8KKyAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKKyAgZG9uZQorICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4KKyAgICAjIEVhY2ggbGluZSBpcyBvZiB0aGUgZm9ybSBgZm9vLm86IGRlcGVuZGVudC5oJy4KKyAgICAjIERvIHR3byBwYXNzZXMsIG9uZSB0byBqdXN0IGNoYW5nZSB0aGVzZSB0bworICAgICMgYCRvYmplY3Q6IGRlcGVuZGVudC5oJyBhbmQgb25lIHRvIHNpbXBseSBgZGVwZW5kZW50Lmg6Jy4KKyAgICBzZWQgLWUgInMsXi4qXC5bYS16XSo6LCRvYmplY3Q6LCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICAgICMgVGhhdCdzIGEgdGFiIGFuZCBhIHNwYWNlIGluIHRoZSBbXS4KKyAgICBzZWQgLWUgJ3MsXi4qXC5bYS16XSo6WwkgXSosLCcgLWUgJ3MsJCw6LCcgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKyAgZWxzZQorICAgICMgVGhlIHNvdXJjZWZpbGUgZG9lcyBub3QgY29udGFpbiBhbnkgZGVwZW5kZW5jaWVzLCBzbyBqdXN0CisgICAgIyBzdG9yZSBhIGR1bW15IGNvbW1lbnQgbGluZSwgdG8gYXZvaWQgZXJyb3JzIHdpdGggdGhlIE1ha2VmaWxlCisgICAgIyAiaW5jbHVkZSBiYXNlbmFtZS5QbG8iIHNjaGVtZS4KKyAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgorICBmaQorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2ljYykKKyAgIyBJbnRlbCdzIEMgY29tcGlsZXIgdW5kZXJzdGFuZHMgYC1NRCAtTUYgZmlsZScuICBIb3dldmVyIG9uCisgICMgICAgaWNjIC1NRCAtTUYgZm9vLmQgLWMgLW8gc3ViL2Zvby5vIHN1Yi9mb28uYworICAjIElDQyA3LjAgd2lsbCBmaWxsIGZvby5kIHdpdGggc29tZXRoaW5nIGxpa2UKKyAgIyAgICBmb28ubzogc3ViL2Zvby5jCisgICMgICAgZm9vLm86IHN1Yi9mb28uaAorICAjIHdoaWNoIGlzIHdyb25nLiAgV2Ugd2FudDoKKyAgIyAgICBzdWIvZm9vLm86IHN1Yi9mb28uYworICAjICAgIHN1Yi9mb28ubzogc3ViL2Zvby5oCisgICMgICAgc3ViL2Zvby5jOgorICAjICAgIHN1Yi9mb28uaDoKKyAgIyBJQ0MgNy4xIHdpbGwgb3V0cHV0CisgICMgICAgZm9vLm86IHN1Yi9mb28uYyBzdWIvZm9vLmgKKyAgIyBhbmQgd2lsbCB3cmFwIGxvbmcgbGluZXMgdXNpbmcgXCA6CisgICMgICAgZm9vLm86IHN1Yi9mb28uYyAuLi4gXAorICAjICAgICBzdWIvZm9vLmggLi4uIFwKKyAgIyAgICAgLi4uCisKKyAgIiRAIiAtTUQgLU1GICIkdG1wZGVwZmlsZSIKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgIyBFYWNoIGxpbmUgaXMgb2YgdGhlIGZvcm0gYGZvby5vOiBkZXBlbmRlbnQuaCcsCisgICMgb3IgYGZvby5vOiBkZXAxLmggZGVwMi5oIFwnLCBvciBgIGRlcDMuaCBkZXA0LmggXCcuCisgICMgRG8gdHdvIHBhc3Nlcywgb25lIHRvIGp1c3QgY2hhbmdlIHRoZXNlIHRvCisgICMgYCRvYmplY3Q6IGRlcGVuZGVudC5oJyBhbmQgb25lIHRvIHNpbXBseSBgZGVwZW5kZW50Lmg6Jy4KKyAgc2VkICJzLF5bXjpdKjosJG9iamVjdCA6LCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICAjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCisgICMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KKyAgc2VkICdzLF5bXjpdKjogXCguKlwpJCxcMSw7cy9eXFwkLy87L14kL2Q7LzokL2QnIDwgIiR0bXBkZXBmaWxlIiB8CisgICAgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworaHAyKQorICAjIFRoZSAiaHAiIHN0YW56YSBhYm92ZSBkb2VzIG5vdCB3b3JrIHdpdGggYUNDIChDKyspIGFuZCBIUCdzIGlhNjQKKyAgIyBjb21waWxlcnMsIHdoaWNoIGhhdmUgaW50ZWdyYXRlZCBwcmVwcm9jZXNzb3JzLiAgVGhlIGNvcnJlY3Qgb3B0aW9uCisgICMgdG8gdXNlIHdpdGggdGhlc2UgaXMgK01ha2VkOyBpdCB3cml0ZXMgZGVwZW5kZW5jaWVzIHRvIGEgZmlsZSBuYW1lZAorICAjICdmb28uZCcsIHdoaWNoIGxhbmRzIG5leHQgdG8gdGhlIG9iamVjdCBmaWxlLCB3aGVyZXZlciB0aGF0CisgICMgaGFwcGVucyB0byBiZS4KKyAgIyBNdWNoIG9mIHRoaXMgaXMgc2ltaWxhciB0byB0aGUgdHJ1NjQgY2FzZTsgc2VlIGNvbW1lbnRzIHRoZXJlLgorICBkaXI9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfC9bXi9dKiR8L3wnYAorICB0ZXN0ICJ4JGRpciIgPSAieCRvYmplY3QiICYmIGRpcj0KKyAgYmFzZT1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8Xi4qL3x8JyAtZSAncy9cLm8kLy8nIC1lICdzL1wubG8kLy8nYAorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2UuZAorICAgIHRtcGRlcGZpbGUyPSRkaXIubGlicy8kYmFzZS5kCisgICAgIiRAIiAtV2MsK01ha2VkCisgIGVsc2UKKyAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2UuZAorICAgIHRtcGRlcGZpbGUyPSRkaXIkYmFzZS5kCisgICAgIiRAIiArTWFrZWQKKyAgZmkKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIgorICAgICBleGl0ICRzdGF0CisgIGZpCisKKyAgZm9yIHRtcGRlcGZpbGUgaW4gIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIKKyAgZG8KKyAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKKyAgZG9uZQorICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4KKyAgICBzZWQgLWUgInMsXi4qXC5bYS16XSo6LCRvYmplY3Q6LCIgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgICAjIEFkZCBgZGVwZW5kZW50Lmg6JyBsaW5lcy4KKyAgICBzZWQgLW5lICcyLCR7CisJICAgICAgIHMvXiAqLy8KKwkgICAgICAgcy8gXFwqJC8vCisJICAgICAgIHMvJC86LworCSAgICAgICBwCisJICAgICB9JyAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKyAgZWxzZQorICAgIGVjaG8gIiNkdW1teSIgPiAiJGRlcGZpbGUiCisgIGZpCisgIHJtIC1mICIkdG1wZGVwZmlsZSIgIiR0bXBkZXBmaWxlMiIKKyAgOzsKKwordHJ1NjQpCisgICAjIFRoZSBUcnU2NCBjb21waWxlciB1c2VzIC1NRCB0byBnZW5lcmF0ZSBkZXBlbmRlbmNpZXMgYXMgYSBzaWRlCisgICAjIGVmZmVjdC4gIGBjYyAtTUQgLW8gZm9vLm8gLi4uJyBwdXRzIHRoZSBkZXBlbmRlbmNpZXMgaW50byBgZm9vLm8uZCcuCisgICAjIEF0IGxlYXN0IG9uIEFscGhhL1JlZGhhdCA2LjEsIENvbXBhcSBDQ0MgVjYuMi01MDQgc2VlbXMgdG8gcHV0CisgICAjIGRlcGVuZGVuY2llcyBpbiBgZm9vLmQnIGluc3RlYWQsIHNvIHdlIGNoZWNrIGZvciB0aGF0IHRvby4KKyAgICMgU3ViZGlyZWN0b3JpZXMgYXJlIHJlc3BlY3RlZC4KKyAgIGRpcj1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8L1teL10qJHwvfCdgCisgICB0ZXN0ICJ4JGRpciIgPSAieCRvYmplY3QiICYmIGRpcj0KKyAgIGJhc2U9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfF4uKi98fCcgLWUgJ3MvXC5vJC8vJyAtZSAncy9cLmxvJC8vJ2AKKworICAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgICAjIFdpdGggVHJ1NjQgY2MsIHNoYXJlZCBvYmplY3RzIGNhbiBhbHNvIGJlIHVzZWQgdG8gbWFrZSBhCisgICAgICAjIHN0YXRpYyBsaWJyYXJ5LiAgVGhpcyBtZWNoYW5pc20gaXMgdXNlZCBpbiBsaWJ0b29sIDEuNCBzZXJpZXMgdG8KKyAgICAgICMgaGFuZGxlIGJvdGggc2hhcmVkIGFuZCBzdGF0aWMgbGlicmFyaWVzIGluIGEgc2luZ2xlIGNvbXBpbGF0aW9uLgorICAgICAgIyBXaXRoIGxpYnRvb2wgMS40LCBkZXBlbmRlbmNpZXMgd2VyZSBvdXRwdXQgaW4gJGRpci5saWJzLyRiYXNlLmxvLmQuCisgICAgICAjCisgICAgICAjIFdpdGggbGlidG9vbCAxLjUgdGhpcyBleGNlcHRpb24gd2FzIHJlbW92ZWQsIGFuZCBsaWJ0b29sIG5vdworICAgICAgIyBnZW5lcmF0ZXMgMiBzZXBhcmF0ZSBvYmplY3RzIGZvciB0aGUgMiBsaWJyYXJpZXMuICBUaGVzZSB0d28KKyAgICAgICMgY29tcGlsYXRpb25zIG91dHB1dCBkZXBlbmRlbmNpZXMgaW4gJGRpci5saWJzLyRiYXNlLm8uZCBhbmQKKyAgICAgICMgaW4gJGRpciRiYXNlLm8uZC4gIFdlIGhhdmUgdG8gY2hlY2sgZm9yIGJvdGggZmlsZXMsIGJlY2F1c2UKKyAgICAgICMgb25lIG9mIHRoZSB0d28gY29tcGlsYXRpb25zIGNhbiBiZSBkaXNhYmxlZC4gIFdlIHNob3VsZCBwcmVmZXIKKyAgICAgICMgJGRpciRiYXNlLm8uZCBvdmVyICRkaXIubGlicy8kYmFzZS5vLmQgYmVjYXVzZSB0aGUgbGF0dGVyIGlzCisgICAgICAjIGF1dG9tYXRpY2FsbHkgY2xlYW5lZCB3aGVuIC5saWJzLyBpcyBkZWxldGVkLCB3aGlsZSBpZ25vcmluZworICAgICAgIyB0aGUgZm9ybWVyIHdvdWxkIGNhdXNlIGEgZGlzdGNsZWFuY2hlY2sgcGFuaWMuCisgICAgICB0bXBkZXBmaWxlMT0kZGlyLmxpYnMvJGJhc2UubG8uZCAgICMgbGlidG9vbCAxLjQKKyAgICAgIHRtcGRlcGZpbGUyPSRkaXIkYmFzZS5vLmQgICAgICAgICAgIyBsaWJ0b29sIDEuNQorICAgICAgdG1wZGVwZmlsZTM9JGRpci5saWJzLyRiYXNlLm8uZCAgICAjIGxpYnRvb2wgMS41CisgICAgICB0bXBkZXBmaWxlND0kZGlyLmxpYnMvJGJhc2UuZCAgICAgICMgQ29tcGFxIENDQyBWNi4yLTUwNAorICAgICAgIiRAIiAtV2MsLU1ECisgICBlbHNlCisgICAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2Uuby5kCisgICAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2UuZAorICAgICAgdG1wZGVwZmlsZTM9JGRpciRiYXNlLmQKKyAgICAgIHRtcGRlcGZpbGU0PSRkaXIkYmFzZS5kCisgICAgICAiJEAiIC1NRAorICAgZmkKKworICAgc3RhdD0kPworICAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgICBlbHNlCisgICAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIiAiJHRtcGRlcGZpbGU0IgorICAgICAgZXhpdCAkc3RhdAorICAgZmkKKworICAgZm9yIHRtcGRlcGZpbGUgaW4gIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIgIiR0bXBkZXBmaWxlNCIKKyAgIGRvCisgICAgIHRlc3QgLWYgIiR0bXBkZXBmaWxlIiAmJiBicmVhaworICAgZG9uZQorICAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuCisgICAgICBzZWQgLWUgInMsXi4qXC5bYS16XSo6LCRvYmplY3Q6LCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICAgICAgIyBUaGF0J3MgYSB0YWIgYW5kIGEgc3BhY2UgaW4gdGhlIFtdLgorICAgICAgc2VkIC1lICdzLF4uKlwuW2Etel0qOlsJIF0qLCwnIC1lICdzLCQsOiwnIDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisgICBlbHNlCisgICAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgorICAgZmkKKyAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgIDs7CisKKyNub3NpZGVlZmZlY3QpCisgICMgVGhpcyBjb21tZW50IGFib3ZlIGlzIHVzZWQgYnkgYXV0b21ha2UgdG8gdGVsbCBzaWRlLWVmZmVjdAorICAjIGRlcGVuZGVuY3kgdHJhY2tpbmcgbWVjaGFuaXNtcyBmcm9tIHNsb3dlciBvbmVzLgorCitkYXNobXN0ZG91dCkKKyAgIyBJbXBvcnRhbnQgbm90ZTogaW4gb3JkZXIgdG8gc3VwcG9ydCB0aGlzIG1vZGUsIGEgY29tcGlsZXIgKm11c3QqCisgICMgYWx3YXlzIHdyaXRlIHRoZSBwcmVwcm9jZXNzZWQgZmlsZSB0byBzdGRvdXQsIHJlZ2FyZGxlc3Mgb2YgLW8uCisgICIkQCIgfHwgZXhpdCAkPworCisgICMgUmVtb3ZlIHRoZSBjYWxsIHRvIExpYnRvb2wuCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHdoaWxlIHRlc3QgIlgkMSIgIT0gJ1gtLW1vZGU9Y29tcGlsZSc7IGRvCisgICAgICBzaGlmdAorICAgIGRvbmUKKyAgICBzaGlmdAorICBmaQorCisgICMgUmVtb3ZlIGAtbyAkb2JqZWN0Jy4KKyAgSUZTPSIgIgorICBmb3IgYXJnCisgIGRvCisgICAgY2FzZSAkYXJnIGluCisgICAgLW8pCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAkb2JqZWN0KQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIgorICAgICAgc2hpZnQgIyBmbm9yZAorICAgICAgc2hpZnQgIyAkYXJnCisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorCisgIHRlc3QgLXogIiRkYXNobWZsYWciICYmIGRhc2htZmxhZz0tTQorICAjIFJlcXVpcmUgYXQgbGVhc3QgdHdvIGNoYXJhY3RlcnMgYmVmb3JlIHNlYXJjaGluZyBmb3IgYDonCisgICMgaW4gdGhlIHRhcmdldCBuYW1lLiAgVGhpcyBpcyB0byBjb3BlIHdpdGggRE9TLXN0eWxlIGZpbGVuYW1lczoKKyAgIyBhIGRlcGVuZGVuY3kgc3VjaCBhcyBgYzovZm9vL2JhcicgY291bGQgYmUgc2VlbiBhcyB0YXJnZXQgYGMnIG90aGVyd2lzZS4KKyAgIiRAIiAkZGFzaG1mbGFnIHwKKyAgICBzZWQgJ3M6XlsgIF0qW146IF1bXjpdW146XSpcOlsgICAgXSo6JyIkb2JqZWN0IidcOiA6JyA+ICIkdG1wZGVwZmlsZSIKKyAgcm0gLWYgIiRkZXBmaWxlIgorICBjYXQgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICB0ciAnICcgJworJyA8ICIkdG1wZGVwZmlsZSIgfCBcCisjIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgorIyMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KKyAgICBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICcvOiQvZCcgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCitkYXNoWG1zdGRvdXQpCisgICMgVGhpcyBjYXNlIG9ubHkgZXhpc3RzIHRvIHNhdGlzZnkgZGVwZW5kLm00LiAgSXQgaXMgbmV2ZXIgYWN0dWFsbHkKKyAgIyBydW4sIGFzIHRoaXMgbW9kZSBpcyBzcGVjaWFsbHkgcmVjb2duaXplZCBpbiB0aGUgcHJlYW1ibGUuCisgIGV4aXQgMQorICA7OworCittYWtlZGVwZW5kKQorICAiJEAiIHx8IGV4aXQgJD8KKyAgIyBSZW1vdmUgYW55IExpYnRvb2wgY2FsbAorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB3aGlsZSB0ZXN0ICJYJDEiICE9ICdYLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKyAgIyBYIG1ha2VkZXBlbmQKKyAgc2hpZnQKKyAgY2xlYXJlZD1ubyBlYXQ9bm8KKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgJGNsZWFyZWQgaW4KKyAgICBubykKKyAgICAgIHNldCAiIjsgc2hpZnQKKyAgICAgIGNsZWFyZWQ9eWVzIDs7CisgICAgZXNhYworICAgIGlmIHRlc3QgJGVhdCA9IHllczsgdGhlbgorICAgICAgZWF0PW5vCisgICAgICBjb250aW51ZQorICAgIGZpCisgICAgY2FzZSAiJGFyZyIgaW4KKyAgICAtRCp8LUkqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciOyBzaGlmdCA7OworICAgICMgU3RyaXAgYW55IG9wdGlvbiB0aGF0IG1ha2VkZXBlbmQgbWF5IG5vdCB1bmRlcnN0YW5kLiAgUmVtb3ZlCisgICAgIyB0aGUgb2JqZWN0IHRvbywgb3RoZXJ3aXNlIG1ha2VkZXBlbmQgd2lsbCBwYXJzZSBpdCBhcyBhIHNvdXJjZSBmaWxlLgorICAgIC1hcmNoKQorICAgICAgZWF0PXllcyA7OworICAgIC0qfCRvYmplY3QpCisgICAgICA7OworICAgICopCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyI7IHNoaWZ0IDs7CisgICAgZXNhYworICBkb25lCisgIG9ial9zdWZmaXg9YGVjaG8gIiRvYmplY3QiIHwgc2VkICdzL14uKlwuLy4vJ2AKKyAgdG91Y2ggIiR0bXBkZXBmaWxlIgorICAke01BS0VERVBFTkQtbWFrZWRlcGVuZH0gLW8iJG9ial9zdWZmaXgiIC1mIiR0bXBkZXBmaWxlIiAiJEAiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgc2VkICcxLDJkJyAiJHRtcGRlcGZpbGUiIHwgdHIgJyAnICcKKycgfCBcCisjIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgorIyMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KKyAgICBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICcvOiQvZCcgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIiAiJHRtcGRlcGZpbGUiLmJhaworICA7OworCitjcHApCisgICMgSW1wb3J0YW50IG5vdGU6IGluIG9yZGVyIHRvIHN1cHBvcnQgdGhpcyBtb2RlLCBhIGNvbXBpbGVyICptdXN0KgorICAjIGFsd2F5cyB3cml0ZSB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUgdG8gc3Rkb3V0LgorICAiJEAiIHx8IGV4aXQgJD8KKworICAjIFJlbW92ZSB0aGUgY2FsbCB0byBMaWJ0b29sLgorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB3aGlsZSB0ZXN0ICJYJDEiICE9ICdYLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKworICAjIFJlbW92ZSBgLW8gJG9iamVjdCcuCisgIElGUz0iICIKKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgJGFyZyBpbgorICAgIC1vKQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgJG9iamVjdCkKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICopCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIKKyAgICAgIHNoaWZ0ICMgZm5vcmQKKyAgICAgIHNoaWZ0ICMgJGFyZworICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAiJEAiIC1FIHwKKyAgICBzZWQgLW4gLWUgJy9eIyBbMC05XVswLTldKiAiXChbXiJdKlwpIi4qLyBzOjogXDEgXFw6cCcgXAorICAgICAgIC1lICcvXiNsaW5lIFswLTldWzAtOV0qICJcKFteIl0qXCkiLiovIHM6OiBcMSBcXDpwJyB8CisgICAgc2VkICckIHM6IFxcJDo6JyA+ICIkdG1wZGVwZmlsZSIKKyAgcm0gLWYgIiRkZXBmaWxlIgorICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgorICBjYXQgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKyAgc2VkIDwgIiR0bXBkZXBmaWxlIiAnL14kL2Q7cy9eIC8vO3MvIFxcJC8vO3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCittc3Zpc3VhbGNwcCkKKyAgIyBJbXBvcnRhbnQgbm90ZTogaW4gb3JkZXIgdG8gc3VwcG9ydCB0aGlzIG1vZGUsIGEgY29tcGlsZXIgKm11c3QqCisgICMgYWx3YXlzIHdyaXRlIHRoZSBwcmVwcm9jZXNzZWQgZmlsZSB0byBzdGRvdXQuCisgICIkQCIgfHwgZXhpdCAkPworCisgICMgUmVtb3ZlIHRoZSBjYWxsIHRvIExpYnRvb2wuCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHdoaWxlIHRlc3QgIlgkMSIgIT0gJ1gtLW1vZGU9Y29tcGlsZSc7IGRvCisgICAgICBzaGlmdAorICAgIGRvbmUKKyAgICBzaGlmdAorICBmaQorCisgIElGUz0iICIKKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgIiRhcmciIGluCisgICAgLW8pCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAkb2JqZWN0KQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgIi1HbSJ8Ii9HbSJ8Ii1HaSJ8Ii9HaSJ8Ii1aSSJ8Ii9aSSIpCisJc2V0IGZub3JkICIkQCIKKwlzaGlmdAorCXNoaWZ0CisJOzsKKyAgICAqKQorCXNldCBmbm9yZCAiJEAiICIkYXJnIgorCXNoaWZ0CisJc2hpZnQKKwk7OworICAgIGVzYWMKKyAgZG9uZQorICAiJEAiIC1FIDI+L2Rldi9udWxsIHwKKyAgc2VkIC1uICcvXiNsaW5lIFswLTldWzAtOV0qICJcKFteIl0qXCkiLyBzOjpcMTpwJyB8ICRjeWdwYXRoX3UgfCBzb3J0IC11ID4gIiR0bXBkZXBmaWxlIgorICBybSAtZiAiJGRlcGZpbGUiCisgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisgIHNlZCA8ICIkdG1wZGVwZmlsZSIgLW4gLWUgJ3MlICVcXCAlZycgLWUgJy9eXCguKlwpJC8gczo6CVwxIFxcOnAnID4+ICIkZGVwZmlsZSIKKyAgZWNobyAiCSIgPj4gIiRkZXBmaWxlIgorICBzZWQgPCAiJHRtcGRlcGZpbGUiIC1uIC1lICdzJSAlXFwgJWcnIC1lICcvXlwoLipcKSQvIHM6OlwxXDo6cCcgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK21zdmNtc3lzKQorICAjIFRoaXMgY2FzZSBleGlzdHMgb25seSB0byBsZXQgZGVwZW5kLm00IGRvIGl0cyB3b3JrLiAgSXQgd29ya3MgYnkKKyAgIyBsb29raW5nIGF0IHRoZSB0ZXh0IG9mIHRoaXMgc2NyaXB0LiAgVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgcnVuLAorICAjIHNpbmNlIGl0IGlzIGNoZWNrZWQgZm9yIGFib3ZlLgorICBleGl0IDEKKyAgOzsKKworbm9uZSkKKyAgZXhlYyAiJEAiCisgIDs7CisKKyopCisgIGVjaG8gIlVua25vd24gZGVwbW9kZSAkZGVwbW9kZSIgMT4mMgorICBleGl0IDEKKyAgOzsKK2VzYWMKKworZXhpdCAwCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9kb2NzL01ha2VmaWxlLmFtIGIvZG9jcy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzU4M2FkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDI4IEBACitpZiBFTkFCTEVfRE9DQk9PSworU1VCRElSU19ET0NCT09LID0gZmFxIG1hbnVhbCBwd2cKK2Vsc2UKK1NVQkRJUlNfRE9DQk9PSyA9CitlbmRpZgorCitpZiBFTkFCTEVfR1RLX0RPQworaWYgRU5BQkxFX1BMVUdJTl9ET0NTCitQTFVHSU5fRE9DU19ESVJTID0gcGx1Z2lucworZWxzZQorUExVR0lOX0RPQ1NfRElSUyA9CitlbmRpZgorZWxzZQorUExVR0lOX0RPQ1NfRElSUyA9IHBsdWdpbnMKK2VuZGlmCisKK0JVSUxUX1NPVVJDRVMgPSB2ZXJzaW9uLmVudGl0aWVzCisKK1NVQkRJUlMgPSBkZXNpZ24gZ3N0IGxpYnMgJChQTFVHSU5fRE9DU19ESVJTKSAkKFNVQkRJUlNfRE9DQk9PSykKK0RJU1RfU1VCRElSUyA9IGRlc2lnbiBnc3QgbGlicyBwbHVnaW5zIGZhcSBtYW51YWwgcHdnIHNsaWRlcyB4c2wKKworRVhUUkFfRElTVCA9IFwKKwltYW51YWxzLm1hayBodG1saW5zdGFsbC5tYWsgXAorCWltYWdlLXBuZyBpbWFnZS1wZGYgaW1hZ2UtZXBzIHVybC5lbnRpdGllcyB2ZXJzaW9uLmVudGl0aWVzLmluCisKK3VwbG9hZDoKKwlAaWYgdGVzdCAieCQoU1VCRElSUykiICE9IHg7IHRoZW4gZm9yIGEgaW4gJChTVUJESVJTKTsgZG8gY2QgJCRhOyBtYWtlIHVwbG9hZDsgY2QgLi47IGRvbmU7IGZpCisKZGlmZiAtLWdpdCBhL2RvY3MvTWFrZWZpbGUuaW4gYi9kb2NzL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNTc3MzMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNzYwIEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gZG9jcworRElTVF9DT01NT04gPSBSRUFETUUgJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbiBcCisJJChzcmNkaXIpL3ZlcnNpb24uZW50aXRpZXMuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1weXRob24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXNjcnViLWluY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9IHZlcnNpb24uZW50aXRpZXMKK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOXyQoVikpCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF8kKFYpKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X2F0XzAgPSBACitTT1VSQ0VTID0KK0RJU1RfU09VUkNFUyA9CitSRUNVUlNJVkVfVEFSR0VUUyA9IGFsbC1yZWN1cnNpdmUgY2hlY2stcmVjdXJzaXZlIGR2aS1yZWN1cnNpdmUgXAorCWh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIGluc3RhbGwtZGF0YS1yZWN1cnNpdmUgXAorCWluc3RhbGwtZHZpLXJlY3Vyc2l2ZSBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWh0bWwtcmVjdXJzaXZlIGluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAorCWluc3RhbGwtcGRmLXJlY3Vyc2l2ZSBpbnN0YWxsLXBzLXJlY3Vyc2l2ZSBpbnN0YWxsLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBpbnN0YWxsZGlycy1yZWN1cnNpdmUgcGRmLXJlY3Vyc2l2ZSBcCisJcHMtcmVjdXJzaXZlIHVuaW5zdGFsbC1yZWN1cnNpdmUKK1JFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTID0gbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZQlcCisgIGRpc3RjbGVhbi1yZWN1cnNpdmUgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKK0FNX1JFQ1VSU0lWRV9UQVJHRVRTID0gJChSRUNVUlNJVkVfVEFSR0VUUzotcmVjdXJzaXZlPSkgXAorCSQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFM6LXJlY3Vyc2l2ZT0pIHRhZ3MgVEFHUyBjdGFncyBDVEFHUyBcCisJZGlzdGRpcgorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK2FtX19yZWxhdGl2aXplID0gXAorICBkaXIwPWBwd2RgOyBcCisgIHNlZF9maXJzdD0ncyxeXChbXi9dKlwpLy4qJCQsXDEsJzsgXAorICBzZWRfcmVzdD0ncyxeW14vXSovKiwsJzsgXAorICBzZWRfbGFzdD0ncyxeLiovXChbXi9dKlwpJCQsXDEsJzsgXAorICBzZWRfYnV0bGFzdD0ncywvKlteL10qJCQsLCc7IFwKKyAgd2hpbGUgdGVzdCAtbiAiJCRkaXIxIjsgZG8gXAorICAgIGZpcnN0PWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCisgICAgaWYgdGVzdCAiJCRmaXJzdCIgIT0gIi4iOyB0aGVuIFwKKyAgICAgIGlmIHRlc3QgIiQkZmlyc3QiID0gIi4uIjsgdGhlbiBcCisgICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2xhc3QiYC8iJCRkaXIyIjsgXAorICAgICAgICBkaXIwPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9idXRsYXN0ImA7IFwKKyAgICAgIGVsc2UgXAorICAgICAgICBmaXJzdDI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKKyAgICAgICAgaWYgdGVzdCAiJCRmaXJzdDIiID0gIiQkZmlyc3QiOyB0aGVuIFwKKyAgICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKKyAgICAgICAgZWxzZSBcCisgICAgICAgICAgZGlyMj0iLi4vJCRkaXIyIjsgXAorICAgICAgICBmaTsgXAorICAgICAgICBkaXIwPSIkJGRpcjAiLyIkJGZpcnN0IjsgXAorICAgICAgZmk7IFwKKyAgICBmaTsgXAorICAgIGRpcjE9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAorICBkb25lOyBcCisgIHJlbGRpcj0iJCRkaXIyIgorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKK0NDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKK0NIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKK0NIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKK0NIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUiA9IEBEQVRBRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAorRExMVE9PTCA9IEBETExUT09MQAorRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKK0VSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACitFWEVFWFQgPSBARVhFRVhUQAorRkZMQUdTID0gQEZGTEFHU0AKK0ZHUkVQID0gQEZHUkVQQAorRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKK0dDT1YgPSBAR0NPVkAKK0dDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAorR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACitHTElCX0xJQlMgPSBAR0xJQl9MSUJTQAorR0xJQl9PTkxZX0NGTEFHUyA9IEBHTElCX09OTFlfQ0ZMQUdTQAorR0xJQl9PTkxZX0xJQlMgPSBAR0xJQl9PTkxZX0xJQlNACitHTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKK0dMSUJfUkVRID0gQEdMSUJfUkVRQAorR01QX0xJQlMgPSBAR01QX0xJQlNACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dSRVAgPSBAR1JFUEAKK0dTTF9MSUJTID0gQEdTTF9MSUJTQAorR1NUX0FHRSA9IEBHU1RfQUdFQAorR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACitHU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACitHU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAorR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKK0dTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAorR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORUAKK0dTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKK0dTVF9ESVNBQkxFX05FVF9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfTkVUX0RFRklORUAKK0dTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACitHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAorR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAorR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKK0dTVF9ESVNBQkxFX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkVACitHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACitHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACitHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORSA9IEBHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORUAKK0dTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAorR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACitHU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAorR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACitHU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKK0dTVF9NQUpPUk1JTk9SID0gQEdTVF9NQUpPUk1JTk9SQAorR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACitHU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACitHU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAorR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACitHU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACitHU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACitHU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAorR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAorR1NUX1BLR19ERVBTID0gQEdTVF9QS0dfREVQU0AKK0dTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACitHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FQAorR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORUAKK0dTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKK0dTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACitHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkUgPSBAR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FQAorR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKK0hBVkVfRE9DQk9PSzJIVE1MID0gQEhBVkVfRE9DQk9PSzJIVE1MQAorSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKK0hBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKK0hBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKK0hBVkVfRklHMkRFViA9IEBIQVZFX0ZJRzJERVZACitIQVZFX0dNUCA9IEBIQVZFX0dNUEAKK0hBVkVfR1NMID0gQEhBVkVfR1NMQAorSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKK0hBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKK0hBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACitIQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKK0hBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACitIT1NUX0NQVSA9IEBIT1NUX0NQVUAKK0hUTUxfRElSID0gQEhUTUxfRElSQAorSU5FVF9BVE9OX0xJQlMgPSBASU5FVF9BVE9OX0xJQlNACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCRElSID0gQExJQkRJUkAKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCTSA9IEBMSUJNQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTE9DQUxFRElSID0gQExPQ0FMRURJUkAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACitQQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAorUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKK1BBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAorUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BFUkxfUEFUSCA9IEBQRVJMX1BBVEhACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQTFVHSU5ESVIgPSBAUExVR0lORElSQAorUE9TVUIgPSBAUE9TVUJACitQUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAorVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAorVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACitXSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACitYTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKK1hTTFRQUk9DID0gQFhTTFRQUk9DQAorWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3BsdWdpbmRpciA9IEBwbHVnaW5kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorQEVOQUJMRV9ET0NCT09LX0ZBTFNFQFNVQkRJUlNfRE9DQk9PSyA9IAorQEVOQUJMRV9ET0NCT09LX1RSVUVAU1VCRElSU19ET0NCT09LID0gZmFxIG1hbnVhbCBwd2cKK0BFTkFCTEVfR1RLX0RPQ19GQUxTRUBQTFVHSU5fRE9DU19ESVJTID0gcGx1Z2lucworQEVOQUJMRV9HVEtfRE9DX1RSVUVAQEVOQUJMRV9QTFVHSU5fRE9DU19GQUxTRUBQTFVHSU5fRE9DU19ESVJTID0gCitARU5BQkxFX0dUS19ET0NfVFJVRUBARU5BQkxFX1BMVUdJTl9ET0NTX1RSVUVAUExVR0lOX0RPQ1NfRElSUyA9IHBsdWdpbnMKK0JVSUxUX1NPVVJDRVMgPSB2ZXJzaW9uLmVudGl0aWVzCitTVUJESVJTID0gZGVzaWduIGdzdCBsaWJzICQoUExVR0lOX0RPQ1NfRElSUykgJChTVUJESVJTX0RPQ0JPT0spCitESVNUX1NVQkRJUlMgPSBkZXNpZ24gZ3N0IGxpYnMgcGx1Z2lucyBmYXEgbWFudWFsIHB3ZyBzbGlkZXMgeHNsCitFWFRSQV9ESVNUID0gXAorCW1hbnVhbHMubWFrIGh0bWxpbnN0YWxsLm1hayBcCisJaW1hZ2UtcG5nIGltYWdlLXBkZiBpbWFnZS1lcHMgdXJsLmVudGl0aWVzIHZlcnNpb24uZW50aXRpZXMuaW4KKworYWxsOiAkKEJVSUxUX1NPVVJDRVMpCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYWxsLXJlY3Vyc2l2ZQorCisuU1VGRklYRVM6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBkb2NzL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251IGRvY3MvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Cit2ZXJzaW9uLmVudGl0aWVzOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHNyY2RpcikvdmVyc2lvbi5lbnRpdGllcy5pbgorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRACisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKKyMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCisjIGludG8gdGhlbSBhbmQgcnVuIGBtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KKyMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgYG1ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKKyMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gYGNvbmZpZy5zdGF0dXMnLCBlZGl0IGBjb25maWcuc3RhdHVzJworIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gYG1ha2UnKTsKKyMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlIGBtYWtlJyBjb21tYW5kIGxpbmUuCiskKFJFQ1VSU0lWRV9UQVJHRVRTKToKKwlAZmFpbD0gZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKwkgIGNhc2UgJCRmIGluIFwKKwkgICAgKj0qIHwgLS1bIWtdKik7OyBcCisJICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGRvdF9zZWVuPXllczsgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKKwlkb25lOyBcCisJaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCisJZmk7IHRlc3QgLXogIiQkZmFpbCIKKworJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyk6CisJQGZhaWw9IGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwljYXNlICIkQCIgaW4gXAorCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAorCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAorCWVzYWM7IFwKKwlyZXY9Jyc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gOjsgZWxzZSBcCisJICAgIHJldj0iJCRzdWJkaXIgJCRyZXYiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlyZXY9IiQkcmV2IC4iOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWZvciBzdWJkaXIgaW4gJCRyZXY7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmUgJiYgdGVzdCAteiAiJCRmYWlsIgordGFncy1yZWN1cnNpdmU6CisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8ICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdGFncyk7IFwKKwlkb25lCitjdGFncy1yZWN1cnNpdmU6CisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8ICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcCisJZG9uZQorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiB0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJc2V0IHg7IFwKKwloZXJlPWBwd2RgOyBcCisJaWYgKCQoRVRBR1MpIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD0uOyBcCisJZWxzZSBcCisJICBpbmNsdWRlX29wdGlvbj0tLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD07IFwKKwlmaTsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAhIC1mICQkc3ViZGlyL1RBR1MgfHwgXAorCSAgICAgIHNldCAiJCRAIiAiJCRpbmNsdWRlX29wdGlvbj0kJGhlcmUvJCRzdWJkaXIvVEFHUyI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogY3RhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgfHwgJChNS0RJUl9QKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJChkaXN0ZGlyKS8kJHN1YmRpciI7IFwKKwkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKKwkgICAgbmV3X2Rpc3RkaXI9JCRyZWxkaXI7IFwKKwkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJCh0b3BfZGlzdGRpcikiOyBcCisJICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCisJICAgIG5ld190b3BfZGlzdGRpcj0kJHJlbGRpcjsgXAorCSAgICBlY2hvICIgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXFwiOyBcCisJICAgIGVjaG8gIiAgICAgYW1fX3JlbW92ZV9kaXN0ZGlyPTogYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogYW1fX3NraXBfbW9kZV9maXg9OiBkaXN0ZGlyKSI7IFwKKwkgICAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiBcCisJICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBcCisJICAgICAgICBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcCisJCWFtX19yZW1vdmVfZGlzdGRpcj06IFwKKwkJYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogXAorCQlhbV9fc2tpcF9tb2RlX2ZpeD06IFwKKwkgICAgICAgIGRpc3RkaXIpIFwKKwkgICAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6ICQoQlVJTFRfU09VUkNFUykKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjaGVjay1yZWN1cnNpdmUKK2FsbC1hbTogTWFrZWZpbGUKK2luc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1yZWN1cnNpdmUKK2luc3RhbGxkaXJzLWFtOgoraW5zdGFsbDogJChCVUlMVF9TT1VSQ0VTKQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtcmVjdXJzaXZlCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQordW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKKwktdGVzdCAteiAiJChCVUlMVF9TT1VSQ0VTKSIgfHwgcm0gLWYgJChCVUlMVF9TT1VSQ0VTKQorY2xlYW46IGNsZWFuLXJlY3Vyc2l2ZQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1yZWN1cnNpdmUKKworZHZpLWFtOgorCitodG1sOiBodG1sLXJlY3Vyc2l2ZQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLXJlY3Vyc2l2ZQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1yZWN1cnNpdmUKKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1yZWN1cnNpdmUKKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtcmVjdXJzaXZlCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLXJlY3Vyc2l2ZQorCitwZGYtYW06CisKK3BzOiBwcy1yZWN1cnNpdmUKKworcHMtYW06CisKK3VuaW5zdGFsbC1hbToKKworLk1BS0U6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIGFsbCBjaGVjayBcCisJY3RhZ3MtcmVjdXJzaXZlIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwIFwKKwl0YWdzLXJlY3Vyc2l2ZQorCisuUEhPTlk6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIFwKKwlhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisJY3RhZ3MgY3RhZ3MtcmVjdXJzaXZlIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAorCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAorCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAorCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCisJaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKKwlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBpbnN0YWxsZGlycy1hbSBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1yZWN1cnNpdmUgXAorCXVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworCit1cGxvYWQ6CisJQGlmIHRlc3QgIngkKFNVQkRJUlMpIiAhPSB4OyB0aGVuIGZvciBhIGluICQoU1VCRElSUyk7IGRvIGNkICQkYTsgbWFrZSB1cGxvYWQ7IGNkIC4uOyBkb25lOyBmaQorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9kb2NzL1JFQURNRSBiL2RvY3MvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYjdmN2QKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL1JFQURNRQpAQCAtMCwwICsxLDQwNSBAQAorR1N0cmVhbWVyIGRvY3VtZW50YXRpb24gbm90ZXMKKworSU1QT1JUQU5UCis9PT09PT09PT0KKworUGxlYXNlIG1ha2Ugc3VyZSB5b3UndmUgcmVhZCBhbmQgdW5kZXJzdG9vZCBldmVyeXRoaW5nIGluIHRoaXMgZmlsZQorYmVmb3JlIHlvdSB0cnkgY2hhbmdpbmcgZG9jdW1lbnRhdGlvbi4KKworT1ZFUlZJRVcKKz09PT09PT09CisKK0dTdHJlYW1lciBoYXMgdHdvIHNldHMgb2YgZG9jdW1lbnRhdGlvbiB0aGF0IHdlIG1haW50YWluOgorKiBBUEkgcmVmZXJlbmNlcywgdXNpbmcgZ3RrLWRvYyAoZ3N0cmVhbWVyLCBnc3RyZWFtZXItbGlicykKKyogImJvb2tzIiwgdXNpbmcgRG9jQm9vay9YTUwgKGZhcSwgbWFudWFsLCBwd2cpCisKK0RPQ0JPT0sgTk9URVMKKz09PT09PT09PT09PT0KKworT0ssIEkndmUgZ3Jvd24gc28gdGlyZWQgb2YgaGF2aW5nIHRvIGNvYXggdGhlIGRvY3MgdG8gYnVpbGQgZXZlcnkgdGltZSBJCitnZXQgcm91bmQgdG8gaXQgdGhhdCBJJ3ZlIGRlY2lkZWQgdG8gbm90ZSBkb3duIHNvbWUgb2YgdGhlIHRoaW5ncyB0aGF0CithcmUgaW1wb3J0YW50IHRvIGtub3cuCisKK09WRVJWSUVXCistLS0tLS0tLQorKiBPdXIgZG9jdW1lbnRhdGlvbiBzaG91bGQgYWxsIGJlIERvY2Jvb2svWE1MLiAgTm8gU0dNTC4KKyogVGhlIHNvdXJjZSBmb3IgdGhlIGRvY3VtZW50YXRpb24gaXM6CisgIC0gb25lIG9yIG1vcmUgLnhtbCBmaWxlcywgd2l0aCB0aGUgbWFpbiBvbmUgYmVpbmcgZ3N0cmVhbWVyLSh3aGF0ZXZlcikueG1sCisgIC0gaW1hZ2UgZmlsZXMKKyAgICAtIGluIC5maWcKKyAgICAtIGluIC5wbmcgKGFuZCBtYXliZSBvdGhlcnMpCisqIFdlIHdhbnQgdG8gZ2VuZXJhdGUgZG9jcyBpbiBIVE1MLCBQUyBhbmQgUERGCisqIFdlIHdhbnQgdG8gdXNlIHhtbCB0byB0byBnZW5lcmF0ZSB0aGVzZQorCitDT05WRU5USU9OUworLS0tLS0tLS0tLS0KK1dlIHN0aWNrIHRvIHNvbWUgc2ltcGxlIGNvbnZlbnRpb25zIGZvciB3cml0aW5nIGRvY2Jvb2sgZG9jdW1lbnRhdGlvbi4KKyogaWQgbmFtZXM6CisgIC0gYWxsIGlkJ3Mgc3RhcnQgd2l0aCBjaGFwdGVyLSwgcGFydC0sIHNlY3Rpb24tLCBvciBtaXNjLQorICAtIHZlcmlmeSB0aGlzIGlzIHRoZSBjYXNlIGJ5IGxvb2tpbmcgYXQgdGhlIGdlbmVyYXRlZCBmaWxlIG5hbWVzIGluIGh0bWwvCisgIC0gc2VjdGlvbnMgc2hvdWxkIGFsc28gaW5jbHVkZSB0aGUgY2hhcHRlciBuYW1lOworICAgIGZvciBleGFtcGxlIGluIGEgY2hhcHRlciBjYWxsZWQgY2hhcHRlci1leGFtcGxlLCBhIHNlY3Rpb24gd291bGQgYmUKKyAgICBjYWxsZWQgc2VjdGlvbi1leGFtcGxlLWhlbGxvLXdvcmxkCisqIHRoZXJlIGFyZSBjdXJyZW50bHkgY29tbWVudHMgb2YgdGhlIGZvcm0gPCEtLSBzeW5jaHJvbml6ZSB3aXRoIFBXRyAtLT4KKyAgaW4gdGhlIGRvY2Jvb2sgZmlsZS4gUGxlYXNlIGNoZWNrIHRoZSByZWxldmFudCBzZWN0aW9uIG9mIHRoZSBvdGhlciBtYW51YWwKKyAgd2hlbiB1cGRhdGluZy4KKworSE9XIElNQUdFUyBBUkUgSEFORExFRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiB0aGUgZm9ybWF0IG9mIGltYWdlcyB1c2VkIGlzOgorICAtIFBORyBmb3IgaHRtbAorICAtIEVQUyBmb3IgcHMKKyAgLSBQREYgZm9yIHBkZgorCisqIGltYWdlcyBtYXkgbmVlZCB0byBiZSBjb252ZXJ0ZWQgZnJvbSB0aGVpciBzb3VyY2UgZm9ybWF0IHRvIHRoZSBlbmQgZm9ybWF0CisKKyogYSBmaWxlIGNhbGxlZCBpbWFnZS5lbnRpdGllcyBpcyBnZW5lcmF0ZWQgdGhhdCBwcm92aWRlcyB0d28gZW50aXRpZXM6CisgICZpbWFnZTsgYW5kICZJTUFHRTsKKyAgJmltYWdlOyBpcyB0aGUgZmlsZSBleHRlbnNpb24gKHBuZywgcHMsIHBkZikKKyogYWxsIGdlbmVyYXRlZCBpbWFnZXMgd2lsbCBiZSBwdXQgaW4gaW1hZ2VzLworCitIT1cgVEhFIEJVSUxEIFdPUktTIEZPUiBFQUNIIEZPUk1BVAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogSFRNTDoKKyAgLSB4bWx0byBodG1sIGdzdHJlYW1lci13aGF0ZXZlci54bWwgc2hvdWxkIHByb2R1Y2UgdGhlIGh0bWwgZG9jcy4KKyAgLSBXZSBkbyB0aGlzIGluIHRoZSBodG1sIHN1YmRpciBvZiB0aGUgZG9jIGJ1aWxkZGlyLgorICAtIGltYWdlcyBhcmUgY29waWVkIHRvIChidWlsZGRpcikvaHRtbC9pbWFnZXMKKyAgLSBQTkdTIHNob3VsZCBiZSBzZXQgdG8gYWxsIG9mIHRoZSBwbmcncyByZWZlcmVuY2VkIGZvciBodG1sLCBib3RoCisgICAgYWxyZWFkeSB0aGVyZSBhbmQgYXV0by1nZW5lcmF0ZWQKKworKiBQUyA6CisgIC0gaW1hZ2VzIGFyZSBjb252ZXJ0ZWQgdG8gLnBzIGZpbGVzIGluIEVQUyBmb3JtYXQuICBHZW5lcmF0ZWQgaW1hZ2VzIGFyZQorICAgIHB1dCBpbiBpbWFnZXMvCisgIC0geG1sdG8gcHMgZ3N0cmVhbWVyLXdoYXRldmVyLnhtbCBnZW5lcmF0ZXMgdGhlIHBzIGZpbGUKKworKiBQREYgOgorICBUaGVyZSBhcmUgdHdvIHdheXM6CisgIC0gcHMycGRmIGlzIHRoZSBlYXNpZXN0CisgIC0gd2Ugc3BlY2lmeSBwcywgUFMgYXMgdGhlIGltYWdlIHR5cGUsIGJ1dCB1c2luZyB4bWx0byB0aGUgYnVpbGQgd2lsbCBmYWlsCisgICAgYmVjYXVzZSBpdCB1c2VzIHBzMnBkZiBpbnRlcm5hbGx5IGFuZCBpdCBmYWlscyB0byBnZW5lcmF0ZSB0aGUgaW1hZ2VzCisgICAgQnkgaGFuZC1nZW5lcmF0aW5nIC5wZGYgaW1hZ2VzIGJlZm9yZSB4bWx0byB3ZSBjYW4gbWFrZSB0aGUgYnVpbGQgc3VjY2VlZC4KKyAgICAoVGhpcyBpcyB3aHkgaW1hZ2UtcGRmIGhhcyBmaWxlIGV4dCBwZGYgYnV0IHR5cGUgRVBTOyB0aGlzIHRyaWNrcyB4bWx0byBpbgorICAgICBkb2luZyB0aGUgcmlnaHQgdGhpbmcpCisgICAgeG1sdG8gcGRmIGdzdHJlYW1lci13aGF0ZXZlci54bWwgZ2VuZXJhdGVzIHBkZiAoYnV0IHNlZW1zIHRvIGZhaWwgb24gdGhlCisgICAgRkFRLCBzbyBmb3Igbm93IHdlIHVzZSBwczJwZGYpCisKK0hPVyBUSEUgQlVJTEQgU1lTVEVNIElTIFNFVCBVUAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIG1ha2UgYWxsIHNob3VsZCBidWlsZCBodG1sLCBwcywgYW5kIHBkZgorKiBodG1sIGlzIGJ1aWx0IGluIGEgc3ViZGlyLCB3aXRoIHRoZSBwbmcvcHMgaW1hZ2VzIGNvcGllZCB0aGVyZQorKiBwcyBhbmQgcGRmIGFyZSBidWlsdCBpbiB0aGUgY3VycmVudCBkaXIsIGluIG9uZSBmaWxlCisKK1NQRUxMIENIRUNLSU5HCistLS0tLS0tLS0tLS0tLQorKiB3aXRoIGFzcGVsbAorICAqIGFzcGVsbCAtYiAtYyAtLW1vZGU9c2dtbCAtLWxhbmc9ZW4gPGZpbGU+LnhtbAorICAgIHVuZm9ydHVuYXRlbHkgdGhlIGN1cnNlcy11aSBvZiBhc3BlbGwgKDAuNTAuNSkgaGFzIHByb2JsZW1zIHdpdGggdGhlIHhtbCB0YWdzCisKKworR1RLLURPQyBOT1RFUworPT09PT09PT09PT09PQorCisqIGZpbGVzIHVuZGVyIENWUyBjb250cm9sOgorICAtIE1ha2VmaWxlLmFtCisgIC0gZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dAorICAgIGRlc2NyaWJlcyB3aGljaCBzeW1ib2xzIGxhdGVyIGFwcGVhciBvbiBvbmUgYXBpLWRvYyBwYWdlCisgICAgY29uZmlndXJlIHdoaWNoIHN5bWJvbHMgYXJlIHNob3duL2ludmlzaWJsZS9wcml2YXRlCisgIC0gZ3N0cmVhbWVyLnR5cGVzCisgICAgdGhlIHR5cGVzIGZpbGUgbGlzdHMgYWxsIGdldF90eXBlKCkgZnVuY3Rpb25zIHRoYXQgcmVnaXN0ZXIgdGhlIEdPYmplY3QgdHlwZXMKKyAgLSBnc3RyZWFtZXItZG9jcy5zZ21sCisgICAgZGVmaW5lcyB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgb2YgdGhlIGFwaSBkb2N1bWVudGF0aW9uCisgIC0gdG1wbC8KKyAgICAtIG9ubHkgYWRkIHRoZSBmaWxlIHRvIENWUyBpZiB5b3UgaGF2ZSBhdCBsZWFzdCBmaWxsZWQgdGhlIHNob3J0IGRlc2NyaXB0aW9uCisgICAgICAoZmlsZW5hbWUgY29ycmVzcG9uZHMgdG8gdGhlIDxGSUxFPiB0YWcgaW4gdGhlIHNlY3Rpb25zIGZpbGUpCisgICAgLSBkb2N1bWVudCBhcyBtdWNoIGFzIHBvc3NpYmxlIGluIHRoZSBzb3VyY2UgKCouYyBmaWxlcykKKworKiB3aGF0IHRvIGRvIHdoZW4gYWRkaW5nIGEgbmV3IHBpZWNlIG9mIEFQSToKKyAgLSBhZGQgYm90aCBhbiBlbnRpdHkgYW5kIHVzZSB0aGUgZW50aXR5IGluIGdzdHJlYW1lci1kb2NzLnNnbWwKKyAgLSBhZGQgYSBuZXcgPFNFQ1RJT04+IHRvIGdzdHJlYW1lci1zZWN0aW9ucy50eHQgaW4gdGhlIGNvcnJlY3QgYWxwaGFiZXRpY2FsCisgICAgcG9zaXRpb24gcmVsYXRlZCB0byB0aGUgb3RoZXIgc2VjdGlvbnMgKHNvIHRoYXQgaXQgaXMgZWFzaWVyIHRvIGxvY2F0ZSkKKyAgLSBhZGQgYWxsIGRvY3VtZW50ZWQgc3ltYm9scyB0byBnc3RyZWFtZXItc2VjdGlvbnMudHh0IGluIHRoZSBwcm9wZXIgc2VjdGlvbgorICAgIChkZWZhdWx0KSw8U1VCU0VDVElPTiBTdGFuZGFyZD4sPFNVQlNFQ1RJT04gUHJpdmF0ZT4KKyAgLSBkb2N1bWVudCBhdCBsZWFzdCB0aGUgU2hvcnRfRGVzY3JpcHRpb24gaW4gdG1wbC8uc2dtbAorICAtIGRvY3VtZW50IHN5bWJvbHMgd2hlcmUgdGhleSBhcmUgZGVmaW5lZCwgc28gdGhhdCB3aGVuIG9uZSBjaGFuZ2VzIHRoZQorICAgIGRlZmluaXRpb24sIHRoZSBjaGFjZXMgYXJlIGdvb2QgdGhhdCBkb2NzIGFyZSB1cGRhdGVkLgorICAgIC0gZG9jdW1lbnQgZnVuY3Rpb25zLCBzaWduYWxzIGluIHRoZSAuYyBmaWxlcworICAgIC0gZG9jdW1lbnQgc3RydWN0cywgdHlwZWRlZnMsIGVudW1zIGluIHRoZSAuaCBmaWxlcworCisqIGNoZWNrbGlzdDoKKyAgLSBtYWtlIHN1cmUgKi1zZWN0aW9ucy50eHQgaGFzIGEgPFRJVExFPiBzZXQgZm9yIGVhY2ggPEZJTEU+CisgIC0gYWRkIG9ubHkgKm9uZSogPFRJVExFPiB0byBlYWNoIGZpbGUsIHdoZW4geW91IGhhdmUgbXVsdGlwbGUgY2xhc3NlcyBpbiBvbmUKKyAgICBzb3VyY2UtZmlsZSwgY3JlYXRlIG9uZSA8RklMRT4gc2VjdGlvbiBmb3IgZWFjaCBjbGFzcworICAtIHRoZSA8VElUTEU+ICptdXN0KiBiZSBuYW1lZCBsaWtlIHRoZSB0eXBlIG9mIHRoZSBHVHlwZSwgd2hlbiBpdCBnZXRzCisgICAgcmVnaXN0ZXJlZCAob3RoZXJ3aXNlIGd0a2RvYyBpbnRyb3NwZWN0aW9uIGZhaWxzKQorICAtIGZvciBjbGFyaXR5IG5hbWUgdGhlIDxGSUxFPiBsaWtlIHRoZSA8VElUTEU+LCBidXQgYWxsIGxvd2VyY2FzZQorCisqIHdoYXQgdG8gZG8gd2hlbiB0cnlpbmcgdG8gaW1wcm92ZSB0aGUgZG9jcworICAtIGNvbXBhcmUgdGhlIG91dHB1dCBvZgorICAgIGdyZXAgIl9nZXRfdHlwZSIgZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dCB8IHNvcnQKKyAgICB3aXRoIHRoZSB0eXBlcyBpbiBYWFgudHlwZXMgdG8gZGV0ZWN0IGVudHJpZXMgdGhhdAorICAgIGFyZSBtYXliZSBtaXNzaW5nCisgIC0gZ3RrIGRvY3MgZG9lcyBub3Qgd2FybnMgYWJvdXQgZW1wdHkgbWVtYmVyIGRvY3MhLCBydW4KKyAgICBmaW5kIC4gLW5hbWUgIiouW2MsaF0iIC1leGVjIGVncmVwIC1IbiAiXiArXCogK0AuKjogKiQiIHt9IFw7CisgICAgaW4gdGhlIHByb2plY3Qgcm9vdCB0byBmaW5kIHRoZW0KKyAgLSBndGsgZG9jcyBkb2VzIG5vdCB3YXJucyBhYm91dCBlbXB0eSBSZXR1cm5zOiBkb2NzISwgcnVuCisgICAgZmluZCAuIC1uYW1lICIqLltjLGhdIiAtZXhlYyBlZ3JlcCAtSG4gIl4gK1wqICtAUmV0dXJuczogKiQiIHt9IFw7CisgICAgaW4gdGhlIHByb2plY3Qgcm9vdCB0byBmaW5kIHRoZW0KKworKiB3aGF0IGhhcHBlbnMgZHVyaW5nIGEgZ3RrLWRvYyBidWlsZCA/CisgIC0gU2NhbiBzdGVwOgorICAgIC0gYmFzZWQgb24gYSAkKE1PRFVMRSkudHlwZXMgZmlsZToKKyAgICAgIC0gZ3RrZG9jLXNjYW5nb2JqIGNyZWF0ZXMgYSBndGtkb2Mtc2NhbiBiaW5hcnkKKyAgICAgICAgLSB1c2luZyBDQywgTEQsIENGTEFHUywgTERGTEFHUyBlbnYgdmFyCisgICAgICAgIC0gdXNpbmcgLS10eXBlLWluaXQtZnVuYyBhbmQgLS1tb2R1bGUgcGFyYW1ldGVycworICAgICAgICAtIGd0a2RvYy1zY2FuIGNyZWF0ZXMKKyAgICAgICAgICAtICRNT0RVTEUuc2lnbmFscy5uZXcKKyAgICAgICAgICAtICRNT0RVTEUuaGllcmFyY2h5Lm5ldworICAgICAgICAgIC0gJE1PRFVMRS5pbnRlcmZhY2VzLm5ldworICAgICAgICAgIC0gJE1PRFVMRS5wcmVyZXF1aXNpdGVzLm5ldworICAgICAgICAgIC0gJE1PRFVMRS5hcmdzLm5ldworICAgICAgICAtIGdlbmVyYXRlZCBzb3VyY2UgYW5kIG9iamVjdHMgZ2V0IGRlbGV0ZWQKKyAgICAgICAgLSBndGtkb2Mtc2NhbmdvYmogbWVyZ2VzIGNoYW5nZXMgaW50byB0aGUgb3JpZ2luYWwgZmlsZXMKKyAgICAtIGd0a2RvYy1zY2FuCisgICAgICAtIGV4dHJhY3RzIGRlY2xzIG9mIGZ1bmN0aW9ucywgbWFjcm9zLCBlbnVtcywgc3RydWN0cywgdW5pb25zIGZyb20gaGVhZGVycworICAgICAgLSBnZW5lcmF0ZXMKKyAgICAgICAgLSAkTU9EVUxFLWRlY2wudHh0CisgICAgICAgIC0gJE1PRFVMRS1kZWNsLWxpc3QudHh0CisgICAgICAtICRNT0RVTEUtZGVjbC1saXN0LnR4dCB0aGVuIHNob3VsZCBnZXQgY29waWVkIHRvICRNT0RVTEUtc2VjdGlvbnMudHh0CisgICAgLSBzY2FuLWJ1aWxkLnN0YW1wIGdldHMgY3JlYXRlZAorICAKKyAgLSBUZW1wbGF0ZSBnZW5lcmF0aW9uIHN0ZXA6CisgICAgLSBndGtkb2MtbWt0bXBsIC0tbW9kdWxlPSRNT0RVTEUKKyAgICAgIC0gcmVhZHMgaW4gdG1wbC8qLnNnbWwKKyAgICAgIC0gbW92ZXMgdGhlbSB0byB0bXBsLyouc2dtbC5iYWsKKyAgICAgIC0gcmVjcmVhdGVzIHRtcGwvKi5zZ21sIGFjY29yZGluZyB0byAkTU9EVUxFLXNlY3Rpb25zLnR4dAorICAgICAgLSBtb3ZlcyB1bnVzZWQgc3R1ZmYgdG8gJE1PRFVMRS11bnVzZWQudHh0CisgICAgLSB0bXBsLWJ1aWxkLnN0YW1wIGdldHMgZ2VuZXJhdGVkCisKKyogUG9zc2libGUgZXJyb3JzIGFuZCBob3cgdG8gZml4IHRoZW0KKyAgLSBXYXJuaW5nOiBtdWx0aXBsZSAiSURzIiBmb3IgY29uc3RyYWludCBsaW5rZW5kOiBnc3QtdGFnLXJlZ2lzdGVyLgorICAgIC0gY2hlY2sgaWYgZ3N0X3RhZ19yZWdpc3RlciBpcyBsaXN0ZWQgbW9yZSB0aGFuIG9uY2UgaW4gLXNlY3Rpb25zLnR4dAorCitTVFlMRSBHVUlERSBGT1IgR1RLLURPQworPT09PT09PT09PT09PT09PT09PT09PT0KKy0gdGhpcyBpcyBpbiBhZGRpdGlvbiB0byBndGstZG9jJ3Mgc3R5bGUtZ3VpZGUudHh0CisKKy0gd2hlbiBkb2N1bWVudGluZyBzaWduYWxzLCB1c2UgInRoZSAjR3N0Li4uIiBmb3IgdGhlIG9iamVjdCByZWNlaXZpbmcgdGhlCisgIHNpZ25hbDsgbm8gdHJhaWxpbmcgZG90LCBhbmQgbm8gInRoYXQgcmVjZWl2ZWQgdGhlIHNpZ25hbCIKKy0gZnVuY3Rpb24vbWFjcm8gZGVzY3JpcHRpb25zIGFyZSBkZXNjcmlwdGl2ZSwgbm90IGltcGVyYXRpdmUKKyAgaWUsIGl0IHVzZXMgdGhlIHRoaXJkIHBlcnNvbiB2ZXJiCistIHN5bm9wc2lzIGFuZCBkZXNjcmlwdGlvbiBzaG91bGQgaGF2ZSBtb3N0LXVzZWQvYXBwbGljYXRpb24gZnVuY3Rpb25zIGF0IHRoZQorICB0b3AKKy0gZnVuY3Rpb25zIHRoYXQgY2FuIHJldHVybiBGQUxTRS9OVUxMIG9yIGZhaWwgc2hvdWxkIGRlc2NyaWJlIHRoZWlyIGZhaWx1cmUKKyAgY29uZGl0aW9ucyBsaWtlIHRoaXM6CisgICogUmV0dXJucyBOVUxMIGlmIG5vIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpcyBmb3VuZCBpbiB0aGUgYmluLCBpZgorICAqIHRoZSBmcm9iYmxlIHdhcyBzdHVjayBpbiB0aGUgZnJvb2IsIG9yIHRoZSBmcml6emxlIHdhcyBmcmF6emVkLgorLSBhIGxpbmUgd2l0aCBmdW5jdGlvbiBhdHRyaWJ1dGVzIHNob3VsZCBiZSBhZGRlZCBiZWZvcmUgUmV0dXJuczoKKyAgLSBjYW4gY29udGFpbjoKKyAgICAiTVQgc2FmZS4iIC0gdGhlIGZ1bmN0aW9uIGlzIHZlcmlmaWVkIHRvIGJlIG11bHRpdGhyZWFkaW5nc2FmZQorICAgICJDYWxsZXIgb3ducyByZXR1cm5lZCByZWZlcmVuY2UiIGZvciByZWZjb3VudGVkIGNsYXNzZXMKKyAgICAiQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUiIGZvciBvdGhlciB0eXBlcyAoaXRlcmF0b3JzLCAuLikKKyAgLSB3ZSBkbyB0aGlzIGJlY2F1c2UsIGluIGNvbnRyYXN0IHdpdGggR0xpYi9HVEssIHdlIGFyZSBtb3JlIGV4cGxpY2l0CisgICAgYWJvdXQgdGhyZWFkc2FmZXR5IGFuZCByZWxhdGVkIGlzc3VlcworLSBsaW5rIHRvIHNpZ25hbHMgZnJvbSB0aGUgZGVzY3JpcHRpb24gbGlrZSB0aGlzOgorICAqIFRoZSA8bGluayBsaW5rZW5kPSJHc3RCaW4tZWxlbWVudC1hZGRlZCI+ZWxlbWVudC1hZGRlZDwvbGluaz4gc2lnbmFsCistIHRoZSBib3R0b20gb2YgdGhlIGRlc2NyaXB0aW9uIHNob3VsZCBzYXkgd2hlbiB0aGUgZG9jIHdhcyBsYXN0IHJldmlld2VkCisgICh2ZXJzaW9uIGFuZCBkYXRlKQorICAgKiBMYXN0IHJldmlld2VkIG9uIDIwMDUtMTAtMjggKDAuOS40KQorCitXRUJTSVRFIERPQ1VNRU5UQVRJT04KKz09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGluZyB0aGUgb25saW5lIGRvY3VtZW50YXRpb24gaXMgcHJldHR5IHNpbXBsZS4KK01ha2Ugc3VyZSB0aGF0IHlvdQorYSkgaGF2ZSBhIHdvcmtpbmcgZnJlZWRlc2t0b3Aub3JnIGFjY291bnQKK2IpICRIT01FLy5zc2gvY29uZmlnIHNldCB1cCBzbyB0aGF0IGl0IGhhcyB0aGUgcmlnaHQgVXNlciBmb3IgdGhlIEhvc3QKKyAgIChmb3IgZXhhbXBsZSwgSSBoYXZlOgorSG9zdCBmcmVlZGVza3RvcC5vcmcKKyAgVXNlciB0aG9tYXN2cworYykgdmVyaWZ5IHRoaXMgd29ya3MgYnkgZG9pbmcgc3NoIGZyZWVkZXNrdG9wLm9yZyBhbmQgYmVpbmcgbG9nZ2VkIGluIHdpdGhvdXQKKyAgIGEgcGFzc3dvcmQgcHJvbXB0CitkKSBoYXZlIHZlcmlmaWVkIHlvdXIgY2hhbmdlcyBidWlsZCBkb2N1bWVudGF0aW9uIGxvY2FsbHkuCisKK1RoZW4sIGFmdGVyIHVwZGF0aW5nIGFueSBvZiB0aGUgZG9jcywgcnVuICJtYWtlIHVwbG9hZCIgZnJvbSB0aGF0IGRpcmVjdG9yeS4KK09yLCBydW4gIm1ha2UgdXBsb2FkIiBmcm9tIHRoaXMgKGRvY3MpIGRpcmVjdG9yeS4KKworRE9DVU1FTlRJTkcgRUxFTUVOVFMKKz09PT09PT09PT09PT09PT09PT09CitBcyBvZiBzZXB0ZW1iZXIgMjAwNSB3ZSBoYXZlIHNvbWUgc3lzdGVtIHRvIGRvY3VtZW50IHBsdWdpbnMgYW5kIGVsZW1lbnRzCitpbiB0aGUgdmFyaW91cyBwbHVnaW4gcGFja2FnZXMuCisKKy0gaW4gYSBzdWJtb2R1bGUsIGRvY3MgZ28gaW4gZG9jcy9wbHVnaW5zCistIHRlbXBsYXRlIGNhbiBiZSBjb3BpZWQgZnJvbSBnc3QtcGx1Z2lucy1iYXNlCistIHRvIGFkZCBwbHVnaW5zIGRvY3VtZW50YXRpb246CisgIC0gY3JlYXRlIGRvY3MvcGx1Z2lucworICAtIGNyZWF0ZSBNYWtlZmlsZS5hbSBhbmQgZnJpZW5kcywgYWRkIHRvIGNvbmZpZ3VyZS5hYworICAtIGNyZWF0ZSBkb2NzL3ZlcnNpb24uZW50aXRpZXMuaW4sIGFkZCB0byBjb25maWd1cmUuYWMKKyAgLSBpbiBkb2NzL3BsdWdpbnM6CisgICAgLSBjcmVhdGUgJChtb2R1bGUpLXBsdWdpbnMudHlwZXMgd2l0aCAjaW5jbHVkZSA8Z3N0L2dzdC5oPgorICAgIC0gcnVuIG1ha2UKKyAgICAtIGVkaXQgdGhlIC1kb2NzLnNnbWwKKyAgICAtIGFkZCB0byBjdnM6CisgICAgICBjdnMgYWRkICotcGx1Z2lucy1kb2NzLnNnbWwgKi1wbHVnaW5zLmFyZ3MgKi1wbHVnaW5zLmhpZXJhcmNoeSAqLXBsdWdpbnMuaW50ZXJmYWNlcyAqLXBsdWdpbnMucHJlcmVxdWlzaXRlcyAqLXBsdWdpbnMuc2lnbmFscyAqLXBsdWdpbnMudHlwZXMgaW5zcGVjdC1idWlsZC5zdGFtcCBpbnNwZWN0LnN0YW1wIHNjYW5vYmotYnVpbGQuc3RhbXAKKyAgICAgIGN2cyBhZGQgaW5zcGVjdAorICAgICAgY3ZzIGFkZCBpbnNwZWN0LyoueG1sCisgICAgLSBBZGRpdGlvbmFsIHR5cGVzIGNhbiBiZSBhZGRlZCB0byB0aGUgZG9jdW1lbnRhdGlvbiBieSBwbGFjaW5nIHRoZW0gaW4KKyAgICAgIHRoZSAudHlwZXMgZmlsZSBsaWtlIHRoaXM6CisgICAgICAgIHR5cGU6R3N0UGxheUJhc2VCaW4KKyAgICAgIFRoaXMgaXMgdXNlZnVsIGZvciBkb2N1bWVudGluZyBwbHVnaW4tcHJpdmF0ZSB0eXBlcyB0aGF0IGltcGxlbWVudAorICAgICAgc2lnbmFscyBvciBwcm9wZXJ0aWVzLiBUaGUgR1R5cGUgaXMgbG9va2VkIHVwIGJ5IG5hbWUgYWZ0ZXIgYWxsIHRoZQorICAgICAgZWxlbWVudCBjbGFzc2VzIGhhdmUgYmVlbiBwcmludGVkIC0gc28gdGhpcyBpcyBvbmx5IHVzZWZ1bCBmb3IgdHlwZXMKKyAgICAgIHRoYXQgYXJlIGNyZWF0ZWQgYXMgYSBjb25zZXF1ZW5jZSBvZiBsb2FkaW5nIHBsdWdpbnMgYW5kIHJlZ2lzdGVyaW5nCisgICAgICB0aGUgZWxlbWVudChzKS4KKworLSB0byBhZGQgYSBwbHVnaW4gdG8gYmUgZG9jdW1lbnRlZDoKKyAgLSBtYWtlIHN1cmUgaW5zcGVjdC8gaGFzIGdlbmVyYXRlZCBhIGluc3BlY3QvcGx1Z2luLXh4eC54bWwgZmlsZSBmb3IgaXQuCisgICAgLSBpZiBpdCBoYXMgbm90LCBtYWtlIHN1cmUgeW91IGhhdmUgcHlnc3QgaW5zdGFsbGVkIGFuZCBydW4gJ21ha2UgdXBkYXRlJy4KKyAgICAgIGFuZCBhZGQgaXQgdG8gQ1ZTLgorICAtIGFkZCBhbiB4aTppbmNsdWRlIGluIC1kb2NzLnNnbWwgaW4gdGhlIFBsdWdpbnMgY2hhcHRlciBmb3IgdGhhdCBwbHVnaW4KKworLSB0byBhZGQgYW4gZWxlbWVudCB0byBiZSBkb2N1bWVudGVkOgorICAtIGFkZCBhbiB4aTppbmNsdWRlIGluIHRoZSBFbGVtZW50cyBjaGFwdGVyIGZvciB0aGUgZWxlbWVudAorICAgIGluIHRoZSBtYWluIC1kb2NzLnNnbWwKKyAgLSBhZGQgYSBzZWN0aW9uIGZvciBpdCBpbiAtc2VjdGlvbnMudHh0IHdpdGgKKyAgICAgIDxTRUNUSU9OPgorICAgICAgPEZJTEU+ZWxlbWVudC0oZWxlbWVudCk8L0ZJTEU+CisgICAgICA8VElUTEU+KGVsZW1lbnQpPC9USVRMRT4KKyAgICAgIEdzdFh4eAorICAgICAgPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CisgICAgICBHc3RYeHhDbGFzcworICAgICAgR1NUX1hYWAorICAgICAgR1NUX1hYWF9DTEFTUworICAgICAgR1NUX0lTX1hYWAorICAgICAgR1NUX0lTX1hYWF9DTEFTUworICAgICAgR1NUX1RZUEVfWFhYCisgICAgICBnc3RfeHh4X2dldF90eXBlCisgICAgICA8L1NFQ1RJT04+CisgIC0gYWRkIGEgZ3RrLWRvYyBzZWN0aW9uIHRvIHRoZSBzb3VyY2UgY29kZSBsaWtlOgorLyoqCisgKiBTRUNUSU9OOmVsZW1lbnQtbXVsdGlmZHNpbmsKKworICBhbmQgZmlsbCBpdCB3aXRoIGRvY3VtZW50YXRpb24gYWJvdXQgdGhlIGVsZW1lbnQsIHByZWZlcmFibHkgaW5zaWRlCisgIGEgPHJlZnNlY3QyPiBkb2Nib29rIGNvbnRhaW5lci4KKyAgLSBhZGQgYW4gZXhhbXBsZToKKyAgICAtIGVpdGhlciBhIGZldyBwaXBlbGluZXMsIGluc2lkZSA8cHJvZ3JhbWxpc3Rpbmc+CisgICAgLSBvciBhIHBpZWNlIG9mIGNvZGU6CisgICAgICAtIGNyZWF0ZSBhbiBleGFtcGxlIHByb2dyYW0gKGVsZW1lbnQpLWV4YW1wbGUuYyBpbiB0aGUgcGx1Z2luIGRpcgorICAgICAgLSBhZGQgdGhlIGZ1bGwgcGF0aCAoc3RhcnRpbmcgd2l0aCAkKHRvcF9zcmNkaXIpKSBmb3IgdGhpcyBleGFtcGxlCisgICAgICAgIHRvIHRoZSBFWEFNUExFX0NGSUxFUyB2YXJpYWJsZSBpbiBNYWtlZmlsZS5hbQorICAgICAgLSBhZGQgYW4geGluY2x1ZGUgb2YgYSBmaWxlIG5hbWVkICJlbGVtZW50LShlbGVtZW50KS1leGFtcGxlLnhtbCIKKyAgICAgICAgdG8gdGhlIGRvY2Jvb2sgZG9jdW1lbnRhdGlvbiBwaWVjZSBpbiB0aGUgZWxlbWVudCBzb3VyY2UgY29kZQorICAtIGFkZCB0aGUgaGVhZGVyIHRvIEVYVFJBX0hGSUxFUyBpbiBNYWtlZmlsZS5hbSB0byBiZSBhYmxlIHRvIGRvY3VtZW50CisgICAgc2lnbmFscyBhbmQgYXJnczsgaW4gdGhhdCBjYXNlLCB0aGUgb2JqZWN0IHN0cnVjdCBuZWVkcyB0byBiZSBpbgorICAgIC1zZWN0aW9ucy50eHQgb3V0c2lkZSBvZiB0aGUgU3RhbmRhcmQgU3Vic2VjdGlvbiAod2hpY2ggaXMgYW5ub3lpbmcsCisgICAgYnV0IC4uLikKKyAgICAoRklYTUU6IGFyZSB3ZSBzdXJlIHdlIGNhbiBib3RoIGRvIHRoZSB4aW5jbHVkZSBmcm9tIHRoZSB0bXBsLyBzZ21sLAorICAgICBhcyB3ZWxsIGFzIGFuIG92ZXJyaWRlIGZyb20gdGhlIHNvdXJjZSBpdHNlbGYgPyBtYXliZSB3ZSBzaG91bGQganVzdAorICAgICBtYWtlIHN1cmUgdGhlIHhpbmNsdWRlIGlzIGluIHRoZSBzb3VyY2UgaXRzZWxmIGluc3RlYWQgPykKKyAgLSBpZiB0aGUgcGx1Z2luIGhhcyBubyBwdWJsaWMgaGVhZGVyLCBkb24ndCBhZGQgdGhlIGMtZmlsZSwgYWRkIGVudHJpZXMgdG8gdGhlCisgICAgLW92ZXJyaWRlcy50eHQgZmlsZSAoc2VlIHBsYXliaW4gZG9jcyBpbiBwbHVnaW5zLWJhc2UpLgorICAtIHRvIHJlYnVpbGQgdGhlIGRvY3MsIGRvOgorICAgIG1ha2UgY2xlYW4KKyAgICBtYWtlIHVwZGF0ZQorICAgIG1ha2UKKyAgLSBleGFtcGxlcyB3aWxsIG9ubHkgc2hvdyB1cCB1c2luZyBndGstZG9jIDEuNCBvciBsYXRlciAtIGl0IHJlbGllcyBvbgorICAgIG1lcmdpbmcgc3R1ZmYgZnJvbSAuc2dtbCB3aXRoIGlubGluZSBkb2NzLiAgV2UgbWlnaHQgd2FudCB0byBjaGFuZ2UKKyAgICB0aGlzIHRvIG9ubHkgZ2V0IHN0dWZmIGZyb20gdGhlIHNvdXJjZS4KKyAgLSB5b3UgbmVlZCB0byBjb21taXQgcmVzdWx0aW5nIGZpbGVzIHRvIGdpdDoKKyAgICAtIGNoYW5nZXMgdG8gKi5zaWduYWxzIGFuZCAqLmFyZ3MKKyAgICAtIG5ldyBmaWxlcyBmb3IgeW91ciBwbHVnaW4gY3JlYXRlZCBpbiBpbnNwZWN0LworICAtIGlmIHlvdSBnZXQgdGhpcyB3YXJuaW5nOgorICAgICIgRG9jdW1lbnRhdGlvbiBpbiB0ZW1wbGF0ZSB4eHggZm9yIC4vdG1wbC9lbGVtZW50LXl5eTpTaG9ydF9EZXNjcmlwdGlvbgorICAgICAgYmVpbmcgb3ZlcnJpZGRlbiBieSBpbmxpbmUgY29tbWVudHMiCisgICAgcGVyLWRlZmF1bHQgdGhlIGRlc2NyaXB0aW9uIGZyb20gdGhlIEdTVF9FTEVNRU5UX0RFVEFJTFMgaXMgcHV0IHRvIHRoZQorICAgIFNob3J0X0Rlc2NyaXB0aW9uLiBUaGlzIHdhcm5pbmcgbWVhbiB5b3UgaGF2ZSBhIGRpZmZlcmVudCBvbmUgaW4gdGhlIHNlY3Rpb24KKyAgICBkb2NzIGFzICJAc2hvcnRfZGVzY3JpcHRpb246Ii4KKworLSB0aGUgcGx1Z2luLWRvYy1saXN0IG9uIHRoZSBnc3RyZWFtZXIgaG9tZXBhZ2UgaXMgdXBkYXRlZCBhbG9uZyB3aXRoIG90aGVyCisgIHdlYiBzaXRlIHVwZGF0ZXMuCisKKy0gbWFpbnRhaW5lciB0cmlja3M6CisgIC0gaW4gZ3N0LXBsdWdpbnMtZm9vL2RvY3MvcGx1Z2lucy8sIHJ1bgorICAgICAgICBtYWtlIGNoZWNrLWluc3BlY3RlZC12ZXJzaW9ucworICAgIHRvIHNob3cgcGx1Z2lucyB3aG9zZSBpbnNwZWN0IGluZm9ybWF0aW9uIGlzIG5vdCB1cC10by1kYXRlICh3aGljaCBpcworICAgIHVzdWFsbHkgZWl0aGVyIGJlY2F1c2UgdGhleSBoYXZlIGJlZW4gbW92ZWQgdG8gYSBkaWZmZXJlbnQgbW9kdWxlIG9yCisgICAgYmVjYXVzZSB0aGV5IGFyZSBub3QgYnVpbHQgb24gdGhlIG1haW50YWluZXIncyBtYWNoaW5lIGZvciBzb21lIHJlYXNvbikuCisgICAgV2hldGhlciBpdCByZWFsbHkgbWFrZXMgc2Vuc2UgdG8gdXBkYXRlIHRoZSB2ZXJzaW9uIG51bWJlciBpcyBkZWJhdGFibGUKKyAgICAoYWZ0ZXIgYWxsLCB0aGUgaW5zcGVjdGVkIGluZm9ybWF0aW9uIG1heSBiZSBvdXRkYXRlZCBhbmQgdGhpbmdzIG1heSBoYXZlCisgICAgY2hhbmdlZCwgaW4gd2hpY2ggY2FzZSBpdCB3b3VsZCBiZSBiYWQgdG8gY2hhbmdlIHRoZSB2ZXJzaW9uIG51bWJlcikKKyAgLSBmaW5kIGZpbGVzIHRoYXQgaGF2ZSBkb2NzCisgICAgZm9yIGZpbGUgaW4gYGZpbmQgLiAtbmFtZSAiKi5jIiAtZXhlYyBncmVwIC1sICIgKiBTRUNUSU9OOmVsZW1lbnQtIiB7fSBcOyB8IHNvcnRgOyBkbyBpZiBbIC1lICR7ZmlsZS8uYy8uaH0gXTsgdGhlbiBlY2hvICR7ZmlsZS8uYy8uaH07IGVsc2UgZWNobyAibm8gaGVhZGVyIGZvciAkZmlsZSI7IGZpOyBkb25lCisgICAgZm9yIGZpbGUgaW4gYGZpbmQgLiAtbmFtZSAiKi5jYyIgLWV4ZWMgZ3JlcCAtbCAiICogU0VDVElPTjplbGVtZW50LSIge30gXDsgfCBzb3J0YDsgZG8gaWYgWyAtZSAke2ZpbGUvLmNjLy5ofSBdOyB0aGVuIGVjaG8gJHtmaWxlLy5jYy8uaH07IGVsc2UgZWNobyAibm8gaGVhZGVyIGZvciAkZmlsZSI7IGZpOyBkb25lCisgICAgLSBhZGQgdGhvc2UgLmggZmlsZXMgdG8gRVhUUkFfSEZJTEVTIGluIE1ha2VmaWxlLmFtCisgIC0gdXBkYXRlIGdzdC1wbHVnaW5zLXh4eC1kb2NzLnNnbWwKKyAgICBjZCBkb2NzL3BsdWdpbnMKKyAgICBscyAtMSB4bWwvcGx1Z2luLSoueG1sIHwgc29ydCB8IHNlZCAtZSAicy9cKC4qXCkvICAgIFw8eGk6aW5jbHVkZSBocmVmPVwiXDFcIiBcL1w+LyIKKyAgICBscyAtMSB4bWwvZWxlbWVudC0qLnhtbCB8IGdyZXAgLXYgLS0gIi1kZXRhaWxzLnhtbCIgfCBzb3J0IHwgc2VkIC1lICJzL1woLipcKS8gICAgXDx4aTppbmNsdWRlIGhyZWY9XCJcMVwiIFwvXD4vIgorICAgIC0gbWF5YmUgd2UgY2FuIGdlbmVyYXRlIHRoZXNlIGxpc3RzIGFmdGVyICJtYWtlIHVwZGF0ZSIgYW5kIGp1c3QgeGk6aW5jbHVkZQorICAgICAgdGhlbSBpbiBnc3QtcGx1Z2lucy14eHgtZG9jcy5zZ21sLiBUaGV5IHNob3VsZCBiZSBjb21taXR0ZWQgdG8gdGhlIHZjcy4KKworLSBwb3NzaWJsZSBlcnJvcnM6CisgIC0gIm11bHRpcGxlIGNvbnN0cmFpbnRzIGZvciBsaW5rZW5kIElEIjoKKyAgICBjaGVjayBpZiBlYWNoIHNlY3Rpb24gaW4gLXNlY3Rpb25zLnR4dCBhY3R1YWxseSBzdGFydHMgYW5kIGVuZHMgd2l0aAorICAgIDxTRUNUSU9OPiBhbmQgPC9TRUNUSU9OPgorICAtIGlmIGEgcGx1Z2luIGRvZXMgbm90IHNob3cgdXA6CisgICAgLSBjaGVjayBpbnNwZWN0L3BsdWdpbi14eHgueG1sIGFuZCB0bXBsL2VsZW1lbnRzLQorCitSQU5ET00gVEhJTkdTIEknVkUgTEVBUk5FRAorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKiBmb3IgY2xlYW4gYnVpbGRkaXIgIT0gc3JjZGlyIHNlcGFyYXRpb24sIEkgd2FudGVkIHRvIHVzZSB4bWx0byAtLXNlYXJjaHBhdGgKKyAgc28gdGhlIHNvdXJjZSB4bWwgY291bGQgZmluZCB0aGUgYnVpbHQgZW50aXR5IGZpbGUuCisgIEJ1dCB4bWx0byAtLXNlYXJjaHBhdGggaXMgKHJpZ2h0IG5vdykgZm9yIFRlWCBpbnB1dCwgbm90IHhtbCBpbnB1dC4KKyAgeHNsdHByb2MgaGFzIGEgLS1wYXRoIG9wdGlvbiAodGhhdCB4bWx0byBkb2Vzbid0IHVzZSB5ZXQpLCBidXQgaXQKKyAgcmVzb2x2ZXMgc2luZ2xlIGZpbGVzIHRvICQoc3BlY2lmaWVkX3BhdGgpLyQoc3JjZGlyKS8kKGZpbGUpCisgIEZvciBub3csIHdlIG5lZWQgdG8gaGFjayBhcm91bmQgaXQgYnkgY29weWluZyB4bWwgdG8gdGhlIGJ1aWxkIGRpci4KKworCisob2xkKSBET0NVTUVOVEFUSU9OIEJVSUxESU5HIE5PVEVTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIGJ1aWxkIHRoZSBHU3RyZWFtZXIgZG9jdW1lbnRhdGlvbiB5b3UgbmVlZCB0aGUgZm9sbG93aW5nIGluc3RhbGxlZCAoYmFzZWQgb24KK1JlZCBIYXQgcGFja2FnZXMpLiAgVGhlc2UgcGFja2FnZXMgY29tZXMgZnJvbSByYXdoaWRlIGFuZCBhcmUgdGhlIG9uZXMgdGhhdAord2lsbCBiZSBpbiBSZWQgSGF0IDcuMy84LjAKKworRG9jYm9vayBzdHVmZjoKK3NnbWwtY29tbW9uIAoreG1sLWNvbW1vbiAKK29wZW5qYWRlIChuZWVkcyB0byBiZSByZWJ1aWx0IGZyb20gU1JQTSBmb3IgUmVkIEhhdCA3LjIpCit0ZXRleC1kdmlwcworamFkZXRleAorZG9jYm9vay1kdGRzICAgICAgCitkb2Nib29rLXN0eWxlLWRzc3NsIAorZG9jYm9vay1zdHlsZS14c2wKK2RvY2Jvb2stdXRpbHMKKworWE1MIHN0dWZmOgorbGlieG1sMgorbGlieG1sMi1weXRob24KK2xpYnhtbDItZGV2ZWwKK2xpYnhzbHQKK2xpYnhzbHQtZGV2ZWwKK2xpYnhzbHQtcHl0aG9uCisKKworCitHdGtkb2M6CitndGstZG9jCisKK090aGVyIHN0dWZmOgordHJhbnNmaWcKK3BkZnRvcHMKKworREVWSEVMUCBJTlRFR1JBVElPTgorLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2hlY2sgaHR0cDovL3d3dy5pbWVuZGlvLmNvbS9wcm9qZWN0cy9kZXZoZWxwLworSXQncyBhIHJlYWxseSBuaWNlIGRldmVsb3BtZW50IGFwcCBhbGxvd2luZyB5b3UgdG8gbG9vayB1cCBBUEkgc3R1ZmYKK2Zyb20gdmFyaW91cyBndGstZG9jJ2QgbGlicmFyaWVzLiAgR1N0cmVhbWVyIGlzIG9uZSBvZiB0aGVzZSA7KQorCitndGstZG9jIGdlbmVyYXRlcyBib3RoIGh0bWwgQVBJIGRvY3MgYW5kIHRoZSBtYXRjaGluZyAuZGV2aGVscCgyKSBib29rcy4KKworSU1BR0VTCistLS0tLS0KK0l0J3MgaW1wb3J0YW50IHRvIGtlZXAgdGhlIG9yaWdpbmFsIHNvdXJjZSBmb3JtYXQgZm9yIGltYWdlcywgdG8gYmUgYWJsZQordG8gY2hhbmdlIGFuZCByZWdlbmVyYXRlIGxhdGVyIG9uLiAgT3JpZ2luYWwgZmlsZXMgZ28gaW4KK2RvY3MvaW1hZ2VzCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9NYWtlZmlsZS5hbSBiL2RvY3MvZGVzaWduL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ODc1YzkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2Rlc2lnbi9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDY2IEBACisKK0VYVFJBX0RJU1QgPSBcCisJZHJhZnQta2xhc3MudHh0IFwKKwlkcmFmdC1wdXNoLXB1bGwudHh0IFwKKwlkcmFmdC10YWdyZWFkaW5nLnR4dCBcCisJcGFydC1hY3RpdmF0aW9uLnR4dCBcCisJcGFydC1ibG9jay50eHQgXAorCXBhcnQtYnVmZmVyaW5nLnR4dCBcCisJcGFydC1jYXBzLnR4dCBcCisJcGFydC1jbG9ja3MudHh0IFwKKwlwYXJ0LWNvbnZlbnRpb25zLnR4dCBcCisJcGFydC1keW5hbWljLnR4dCBcCisJcGFydC1lbGVtZW50LXNpbmsudHh0IFwKKwlwYXJ0LWVsZW1lbnQtc291cmNlLnR4dCBcCisJcGFydC1lbGVtZW50LXRyYW5zZm9ybS50eHQgXAorCXBhcnQtZXZlbnRzLnR4dCBcCisJcGFydC1mcmFtZXN0ZXAudHh0IFwKKwlwYXJ0LWdzdGJpbi50eHQgXAorCXBhcnQtZ3N0YnVzLnR4dCBcCisJcGFydC1nc3RlbGVtZW50LnR4dCBcCisJcGFydC1nc3RnaG9zdHBhZC50eHQgXAorCXBhcnQtZ3N0b2JqZWN0LnR4dCBcCisJcGFydC1nc3RwaXBlbGluZS50eHQgXAorCXBhcnQtbGF0ZW5jeS50eHQgXAorCXBhcnQtbGl2ZS1zb3VyY2UudHh0IFwKKwlwYXJ0LW1lc3NhZ2VzLnR4dCBcCisJcGFydC1taXNzaW5nLXBsdWdpbnMudHh0IFwKKwlwYXJ0LU1ULXJlZmNvdW50aW5nLnR4dCBcCisJcGFydC1uZWdvdGlhdGlvbi50eHQgXAorCXBhcnQtb3ZlcnZpZXcudHh0IFwKKwlwYXJ0LXByZXJvbGwudHh0IFwKKwlwYXJ0LXB1c2gtcHVsbC50eHQgXAorCXBhcnQtcW9zLnR4dCBcCisJcGFydC1xdWVyeS50eHQgXAorCXBhcnQtcmVsYXRpb25zLnR4dCBcCisJcGFydC1zY2hlZHVsaW5nLnR4dCBcCisJcGFydC1zZWVraW5nLnR4dCBcCisJcGFydC1zZWdtZW50cy50eHQgXAorCXBhcnQtc3BhcnNlc3RyZWFtcy50eHQgXAorCXBhcnQtc3RhbmRhcmRzLnR4dCBcCisJcGFydC1zdGF0ZXMudHh0IFwKKwlwYXJ0LXN0cmVhbS1zdGF0dXMudHh0IFwKKwlwYXJ0LXN0cmVhbXMudHh0IFwKKwlwYXJ0LXN5bmNocm9uaXNhdGlvbi50eHQgXAorCXBhcnQtVE9ETy50eHQgXAorCXBhcnQtdHJpY2ttb2Rlcy50eHQKKworQ0xFQU5GSUxFUyA9IGluZGV4Lmh0bWwgaW5kZXgudHh0CisKK2h0bWw6CisJaWYgISB0ZXN0IC16IGB3aGljaCBhc2NpaWRvY2A7IHRoZW4gXAorCSAgZWNobyA+aW5kZXgudHh0ICAiR1N0cmVhbWVyIGRlc2lnbiI7IFwKKwkgIGVjaG8gPj5pbmRleC50eHQgIj09PT09PT09PT09PT09PT0iOyBcCisJICBlY2hvID4+aW5kZXgudHh0ICJUaGUgR3N0cmVhbWVyIGRldmVsb3BlcnMiOyBcCisJICBlY2hvID4+aW5kZXgudHh0ICJWZXJzaW9uICQoUEFDS0FHRV9WRVJTSU9OKSI7IFwKKwkgIGVjaG8gPj5pbmRleC50eHQgIiI7IFwKKwkgICggY2QgJChzcmNkaXIpICYmIFwKKwkgIGNhdCA+PiQoYWJzX2J1aWxkZGlyKS9pbmRleC50eHQgJChFWFRSQV9ESVNUKSApOyBcCisJICBhc2NpaWRvYyAtbyBpbmRleC5odG1sIGluZGV4LnR4dDsgXAorCWVsc2UgXAorCSAgZWNobyAibmVlZCBhc2NpaWRvYyB0byBnZW5lcmF0ZSBodG1sIjsgXAorICAgICAgICBmaTsKKwordXBsb2FkOgorCUBlY2hvIG5vdGhpbmcgdG8gdXBsb2FkCisKZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL01ha2VmaWxlLmluIGIvZG9jcy9kZXNpZ24vTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM4MzU1MQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZGVzaWduL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNTk5IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gZG9jcy9kZXNpZ24KK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXB5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtc2NydWItaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOXyQoVikpCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF8kKFYpKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X2F0XzAgPSBACitTT1VSQ0VTID0KK0RJU1RfU09VUkNFUyA9CitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKK0NDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKK0NIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKK0NIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKK0NIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUiA9IEBEQVRBRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAorRExMVE9PTCA9IEBETExUT09MQAorRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKK0VSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACitFWEVFWFQgPSBARVhFRVhUQAorRkZMQUdTID0gQEZGTEFHU0AKK0ZHUkVQID0gQEZHUkVQQAorRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKK0dDT1YgPSBAR0NPVkAKK0dDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAorR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACitHTElCX0xJQlMgPSBAR0xJQl9MSUJTQAorR0xJQl9PTkxZX0NGTEFHUyA9IEBHTElCX09OTFlfQ0ZMQUdTQAorR0xJQl9PTkxZX0xJQlMgPSBAR0xJQl9PTkxZX0xJQlNACitHTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKK0dMSUJfUkVRID0gQEdMSUJfUkVRQAorR01QX0xJQlMgPSBAR01QX0xJQlNACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dSRVAgPSBAR1JFUEAKK0dTTF9MSUJTID0gQEdTTF9MSUJTQAorR1NUX0FHRSA9IEBHU1RfQUdFQAorR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACitHU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACitHU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAorR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKK0dTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAorR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORUAKK0dTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKK0dTVF9ESVNBQkxFX05FVF9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfTkVUX0RFRklORUAKK0dTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACitHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAorR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAorR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKK0dTVF9ESVNBQkxFX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkVACitHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACitHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACitHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORSA9IEBHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORUAKK0dTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAorR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACitHU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAorR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACitHU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKK0dTVF9NQUpPUk1JTk9SID0gQEdTVF9NQUpPUk1JTk9SQAorR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACitHU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACitHU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAorR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACitHU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACitHU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACitHU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAorR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAorR1NUX1BLR19ERVBTID0gQEdTVF9QS0dfREVQU0AKK0dTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACitHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FQAorR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORUAKK0dTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKK0dTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACitHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkUgPSBAR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FQAorR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKK0hBVkVfRE9DQk9PSzJIVE1MID0gQEhBVkVfRE9DQk9PSzJIVE1MQAorSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKK0hBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKK0hBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKK0hBVkVfRklHMkRFViA9IEBIQVZFX0ZJRzJERVZACitIQVZFX0dNUCA9IEBIQVZFX0dNUEAKK0hBVkVfR1NMID0gQEhBVkVfR1NMQAorSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKK0hBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKK0hBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACitIQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKK0hBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACitIT1NUX0NQVSA9IEBIT1NUX0NQVUAKK0hUTUxfRElSID0gQEhUTUxfRElSQAorSU5FVF9BVE9OX0xJQlMgPSBASU5FVF9BVE9OX0xJQlNACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCRElSID0gQExJQkRJUkAKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCTSA9IEBMSUJNQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTE9DQUxFRElSID0gQExPQ0FMRURJUkAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACitQQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAorUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKK1BBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAorUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BFUkxfUEFUSCA9IEBQRVJMX1BBVEhACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQTFVHSU5ESVIgPSBAUExVR0lORElSQAorUE9TVUIgPSBAUE9TVUJACitQUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAorVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAorVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACitXSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACitYTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKK1hTTFRQUk9DID0gQFhTTFRQUk9DQAorWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3BsdWdpbmRpciA9IEBwbHVnaW5kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorRVhUUkFfRElTVCA9IFwKKwlkcmFmdC1rbGFzcy50eHQgXAorCWRyYWZ0LXB1c2gtcHVsbC50eHQgXAorCWRyYWZ0LXRhZ3JlYWRpbmcudHh0IFwKKwlwYXJ0LWFjdGl2YXRpb24udHh0IFwKKwlwYXJ0LWJsb2NrLnR4dCBcCisJcGFydC1idWZmZXJpbmcudHh0IFwKKwlwYXJ0LWNhcHMudHh0IFwKKwlwYXJ0LWNsb2Nrcy50eHQgXAorCXBhcnQtY29udmVudGlvbnMudHh0IFwKKwlwYXJ0LWR5bmFtaWMudHh0IFwKKwlwYXJ0LWVsZW1lbnQtc2luay50eHQgXAorCXBhcnQtZWxlbWVudC1zb3VyY2UudHh0IFwKKwlwYXJ0LWVsZW1lbnQtdHJhbnNmb3JtLnR4dCBcCisJcGFydC1ldmVudHMudHh0IFwKKwlwYXJ0LWZyYW1lc3RlcC50eHQgXAorCXBhcnQtZ3N0YmluLnR4dCBcCisJcGFydC1nc3RidXMudHh0IFwKKwlwYXJ0LWdzdGVsZW1lbnQudHh0IFwKKwlwYXJ0LWdzdGdob3N0cGFkLnR4dCBcCisJcGFydC1nc3RvYmplY3QudHh0IFwKKwlwYXJ0LWdzdHBpcGVsaW5lLnR4dCBcCisJcGFydC1sYXRlbmN5LnR4dCBcCisJcGFydC1saXZlLXNvdXJjZS50eHQgXAorCXBhcnQtbWVzc2FnZXMudHh0IFwKKwlwYXJ0LW1pc3NpbmctcGx1Z2lucy50eHQgXAorCXBhcnQtTVQtcmVmY291bnRpbmcudHh0IFwKKwlwYXJ0LW5lZ290aWF0aW9uLnR4dCBcCisJcGFydC1vdmVydmlldy50eHQgXAorCXBhcnQtcHJlcm9sbC50eHQgXAorCXBhcnQtcHVzaC1wdWxsLnR4dCBcCisJcGFydC1xb3MudHh0IFwKKwlwYXJ0LXF1ZXJ5LnR4dCBcCisJcGFydC1yZWxhdGlvbnMudHh0IFwKKwlwYXJ0LXNjaGVkdWxpbmcudHh0IFwKKwlwYXJ0LXNlZWtpbmcudHh0IFwKKwlwYXJ0LXNlZ21lbnRzLnR4dCBcCisJcGFydC1zcGFyc2VzdHJlYW1zLnR4dCBcCisJcGFydC1zdGFuZGFyZHMudHh0IFwKKwlwYXJ0LXN0YXRlcy50eHQgXAorCXBhcnQtc3RyZWFtLXN0YXR1cy50eHQgXAorCXBhcnQtc3RyZWFtcy50eHQgXAorCXBhcnQtc3luY2hyb25pc2F0aW9uLnR4dCBcCisJcGFydC1UT0RPLnR4dCBcCisJcGFydC10cmlja21vZGVzLnR4dAorCitDTEVBTkZJTEVTID0gaW5kZXguaHRtbCBpbmRleC50eHQKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGRvY3MvZGVzaWduL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251IGRvY3MvZGVzaWduL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicwordGFnczogVEFHUworVEFHUzoKKworY3RhZ3M6IENUQUdTCitDVEFHUzoKKworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChDTEVBTkZJTEVTKQorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RkaXIgZHZpIFwKKwlkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gXAorCWluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBcCisJaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBcCisJaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgXAorCWluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisKKworaHRtbDoKKwlpZiAhIHRlc3QgLXogYHdoaWNoIGFzY2lpZG9jYDsgdGhlbiBcCisJICBlY2hvID5pbmRleC50eHQgICJHU3RyZWFtZXIgZGVzaWduIjsgXAorCSAgZWNobyA+PmluZGV4LnR4dCAiPT09PT09PT09PT09PT09PSI7IFwKKwkgIGVjaG8gPj5pbmRleC50eHQgIlRoZSBHc3RyZWFtZXIgZGV2ZWxvcGVycyI7IFwKKwkgIGVjaG8gPj5pbmRleC50eHQgIlZlcnNpb24gJChQQUNLQUdFX1ZFUlNJT04pIjsgXAorCSAgZWNobyA+PmluZGV4LnR4dCAiIjsgXAorCSAgKCBjZCAkKHNyY2RpcikgJiYgXAorCSAgY2F0ID4+JChhYnNfYnVpbGRkaXIpL2luZGV4LnR4dCAkKEVYVFJBX0RJU1QpICk7IFwKKwkgIGFzY2lpZG9jIC1vIGluZGV4Lmh0bWwgaW5kZXgudHh0OyBcCisJZWxzZSBcCisJICBlY2hvICJuZWVkIGFzY2lpZG9jIHRvIGdlbmVyYXRlIGh0bWwiOyBcCisgICAgICAgIGZpOworCit1cGxvYWQ6CisJQGVjaG8gbm90aGluZyB0byB1cGxvYWQKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vZHJhZnQta2xhc3MudHh0IGIvZG9jcy9kZXNpZ24vZHJhZnQta2xhc3MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMWQ4ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2Rlc2lnbi9kcmFmdC1rbGFzcy50eHQKQEAgLTAsMCArMSwxODcgQEAKK0VsZW1lbnQgS2xhc3MgZGVmaW5pdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1B1cnBvc2UKK35+fn5+fn4KKworQXBwbGljYXRpb25zIHNob3VsZCBiZSBhYmxlIHRvIHJldHJpZXZlIGVsZW1lbnRzIGZyb20gdGhlIHJlZ2lzdHJ5IG9mIGV4aXN0aW5nCitlbGVtZW50cyBiYXNlZCBvbiBzcGVjaWZpYyBjYXBhYmlsaXRpZXMgb3IgZmVhdHVyZXMgb2YgdGhlIGVsZW1lbnQuCisKK0EgcGxheWJhY2sgYXBwbGljYXRpb24gbWlnaHQgd2FudCB0byByZXRyaWV2ZSBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgY2FuIGJlCit1c2VkIGZvciB2aXN1YWxpc2F0aW9uLCBmb3IgZXhhbXBsZSwgb3IgYSB2aWRlbyBlZGl0b3IgbWlnaHQgd2FudCB0byBzZWxlY3QKK2FsbCB2aWRlbyBlZmZlY3QgZmlsdGVycy4KKworVGhlIHRvcGljIG9mIGRlZmluaW5nIHRoZSBrbGFzcyBvZiBlbGVtZW50cyBzaG91bGQgYmUgYmFzZWQgb24gdXNlIGNhc2VzLgorCitBIGxpc3Qgb2YgY2xhc3NlcyB0aGF0IGFyZSB1c2VkIGluIGEgaW5zdGFsbGF0aW9uIGNhbiBiZSBnZW5lcmF0ZWQgdXNpbmc6Citnc3QtaW5zcGVjdC0wLjEwIC1hIHwgZ3JlcCAtaG8gQ2xhc3M6LiogfCBjdXQgLWM4LSB8IHNlZCAicy9cLy9cXG4vZyIgfCBzb3J0IHwgdW5pcQorCitQcm9wb3NhbAorfn5+fn5+fn4KKworVGhlIEdzdEVsZW1lbnREZXRhaWxzIGNvbnRhaW5zIGEgZmllbGQgbmFtZWQga2xhc3MgdGhhdCBpcyBhIHBvaW50ZXIgdG8gYQorc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGVsZW1lbnQgdHlwZS4KKworSW4gdGhpcyBkb2N1bWVudCB3ZSBkZXNjcmliZSB0aGUgZm9ybWF0IGFuZCBjb250ZW50cyBvZiB0aGUgc3RyaW5nLiBFbGVtZW50cworc2hvdWxkIGFkaGVyZSB0byB0aGlzIHNwZWNpZmljYXRpb24gYWx0aG91Z2ggdGhhdCBpcyBub3QgZW5mb3JjZWQgdG8gYWxsb3cKK2ZvciB3aWxkIChhcHBsaWNhdGlvbiBzcGVjaWZpYykgY3VzdG9taXNhdGlvbi4KKworMSkgc3RyaW5nIGZvcm1hdAorCisgICAgPGtleXdvcmQ+WycvJzxrZXl3b3JkXSoKKworICBUaGUgc3RyaW5nIGNvbnNpc3RzIG9mIGFuIF91bm9yZGVyZWRfIGxpc3Qgb2Yga2V5d29yZHMgc2VwYXJhdGVkIHdpdGggYSAnLycKKyAgY2hhcmFjdGVyLiBXaGlsZSB0aGUgLyBzdWdnZXN0cyBhIGhpZXJhcmNoeSwgdGhpcyBpcyBfbm90XyB0aGUgY2FzZS4KKworMikga2V5d29yZCBjYXRlZ29yaWVzCisKKyAtIGZ1bmN0aW9uYWwKKworICAgQ2F0ZWdvcmllcyBhcmUgYmFzZSBvbiBfaW50ZW5kZWQgdXNhZ2VfIG9mIHRoZSBlbGVtZW50LiBTb21lIGVsZW1lbnRzCisgICBtaWdodCBoYXZlIG90aGVyIHNpZGUtZWZmZWN0cyAoZXNwZWNpYWxseSBmb3IgZmlsZXJzL2VmZmVjdHMpLiBUaGUgcHVycG9zZQorICAgaXMgdG8gbGlzdCBlbm91Z2gga2V5d29yZHMgc28gdGhhdCBhcHBsaWNhdGlvbnMgY2FuIGRvIG1lYW5pbmdmdWwgZmlsdGVyaW5nLAorICAgbm90IHRvIGNvbXBsZXRlbHkgZGVzY3JpYmUgdGhlIGZ1bmN0aW9uYWxpdHksIHRoYXQgaXMgZXhwcmVzc2VkIGluIGNhcHMgZXRjLi4KKworICAgKiBTb3VyY2UgICAgICAgIDogcHJvZHVjZXMgZGF0YQorICAgKiBTaW5rICAgICAgICAgIDogY29uc3VtZXMgZGF0YQorICAgKiBGaWx0ZXIgICAgICAgIDogZmlsdGVycy90cmFuc2Zvcm1zIGRhdGEsIG5vIG1vZGlmaWNhdGlvbiBvbiB0aGUgZGF0YSBpcworICAgICAgICAgICAgICAgICAgICAgaW50ZW5kZWQgKGFsdGhvdWdoIGl0IG1pZ2h0IGJlIHVuYXZvaWRhYmxlKS4gVGhlCisgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgY2FuIGRlY2lkZSBvbiBpbnB1dCBhbmQgb3V0cHV0IGNhcHMgaW5kZXBlbmRlbnRseQorICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHN0cmVhbSBjb250ZW50cyAoR3N0QmFzZVRyYW5zZm9ybSkuCisgICAqIEVmZmVjdCAgICAgICAgOiBhcHBsaWVzIGFuIGVmZmVjdCB0byBzb21lIGRhdGEsIGNoYW5nZXMgdG8gZGF0YSBhcmUKKyAgICAgICAgICAgICAgICAgICAgIGludGVuZGVkLiBFeGFtcGxlcyBhcmUgY29sb3JiYWxhbmNlLCB2b2x1bWUuIFRoZXNlCisgICAgICAgICAgICAgICAgICAgICBlbGVtZW50cyBjYW4gYWxzbyBiZSBpbXBsZW1lbnRlZCB3aXRoIEdzdEJhc2VUcmFuc2Zvcm0uCisgICAqIERlbXV4ZXIgICAgICAgOiBzcGxpdHMgYXVkaW8sIHZpZGVvLCAuLi4gZnJvbSBhIHN0cmVhbQorICAgKiBNdXhlciAgICAgICAgIDogaW50ZXJsZWF2ZSBhdWRpbywgdmlkZW8sIC4uLiBpbnRvIG9uZSBzdHJlYW0sIHRoaXMgaXMKKyAgICAgICAgICAgICAgICAgICAgIGxpa2UgbWl4aW5nIGJ1dCB3aXRob3V0IGxvc2luZyBvciBkZWdyYWRpbmcgZWFjaCBzZXBhcmF0ZQorICAgICAgICAgICAgICAgICAgICAgaW5wdXQgc3RyZWFtLiBUaGUgcmV2ZXJzZSBvcGVyYXRpb24gaXMgcG9zc2libGUgd2l0aCBhCisgICAgICAgICAgICAgICAgICAgICBEZW11eGVyIHRoYXQgcmVwcm9kdWNlcyB0aGUgZXhhY3Qgc2FtZSBpbnB1dCBzdHJlYW1zLgorICAgKiBEZWNvZGVyICAgICAgIDogZGVjb2RlcyBlbmNvZGVkIGRhdGEgaW50byBhIHJhdyBmb3JtYXQsIHRoZXJlIGlzIHR5cGljYWxseQorICAgICAgICAgICAgICAgICAgICAgbm8gcmVsYXRpb24gYmV0d2VlbiBpbnB1dCBjYXBzIGFuZCBvdXRwdXQgY2Fwcy4gVGhlIG91dHB1dAorICAgICAgICAgICAgICAgICAgICAgY2FwcyBhcmUgZGVmaW5lZCBpbiB0aGUgc3RyZWFtIGRhdGEuIFRoaXMgc2VwYXJhdGVzIHRoZQorICAgICAgICAgICAgICAgICAgICAgRGVjb2RlciBmcm9tIHRoZSBGaWx0ZXIgYW5kIEVmZmVjdC4KKyAgICogRW5jb2RlciAgICAgICA6IGVuY29kZXMgcmF3IGRhdGEgaW50byBhbiBlbmNvZGVkIGZvcm1hdC4KKyAgICogTWl4ZXIgICAgICAgICA6IGNvbWJpbmUgYXVkaW8sIHZpZGVvLCAuLiB0aGlzIGlzIGxpa2UgbXV4aW5nIGJ1dCB3aXRoCisgICAgICAgICAgICAgICAgICAgICBhcHBseWluZyBzb21lIGFsZ29yaXRobSBzbyB0aGF0IHRoZSBpbmRpdmlkdWFsIHN0cmVhbXMKKyAgICAgICAgICAgICAgICAgICAgIGFyZSBub3QgZXh0cmFjdGFibGUgYW55bW9yZSwgdGhlcmUgaXMgdGhlcmVmb3JlIG5vCisgICAgICAgICAgICAgICAgICAgICByZXZlcnNlIG9wZXJhdGlvbiB0byBtaXhpbmcuIChhdWRpbyBtaXhlciwgdmlkZW8gbWl4ZXIsIC4uLikKKyAgICogQ29udmVydGVyICAgICA6IGNvbnZlcnQgYXVkaW8gaW50byB2aWRlbywgdGV4dCB0byBhdWRpbywgLi4uIFRoZSBjb252ZXJ0ZXIKKyAgICAgICAgICAgICAgICAgICAgIHR5cGljYWxseSB3b3JrcyBvbiByYXcgdHlwZXMgb25seS4gVGhlIHNvdXJjZSBtZWRpYSB0eXBlCisgICAgICAgICAgICAgICAgICAgICBpcyBsaXN0ZWQgZmlyc3QuCisgICAqIEFuYWx5emVyICAgICAgOiByZXBvcnRzIGFib3V0IHRoZSBzdHJlYW0gY29udGVudHMuCisgICAqIENvbnRyb2wgICAgICAgOiBjb250cm9scyBzb21lIGFzcGVjdCBvZiBhIGhhcmR3YXJlIGRldmljZQorICAgKiBFeHRyYWN0ZXIgICAgIDogZXh0cmFjdHMgdGFncy9oZWFkZXJzIGZyb20gYSBzdHJlYW0KKyAgICogRm9ybWF0dGVyICAgICA6IGFkZHMgdGFncy9oZWFkZXJzIHRvIGEgc3RyZWFtCisgICAqIENvbm5lY3RvciAgICAgOiBhbGxvd3MgZm9yIG5ldyBjb25uZWN0aW9ucyBpbiB0aGUgcGlwZWxpbmUuICh0ZWUsIC4uLikKKyAgICogLi4uCisKKyAtIEJhc2VkIG9uIG1lZGlhIHR5cGUKKworICAgUHVycG9zZSBpcyB0byBtYWtlIGEgc2VsZWN0aW9uIGZvciBlbGVtZW50cyBvcGVyYXRpbmcgb24gdGhlIGRpZmZlcmVudAorICAgdHlwZXMgb2YgbWVkaWEuIEFuIGF1ZGlvIGFwcGxpY2F0aW9uIG11c3QgYmUgYWJsZSB0byBmaWx0ZXIgb3V0IHRoZQorICAgZWxlbWVudHMgb3BlcmF0aW5nIG9uIGF1ZGlvLCBmb3IgZXhhbXBsZS4KKworICAgKiBBdWRpbyAgICAgICAgIDogb3BlcmF0ZXMgb24gYXVkaW8gZGF0YQorICAgKiBWaWRlbyAgICAgICAgIDogb3BlcmF0ZXMgb24gdmlkZW8gZGF0YQorICAgKiBJbWFnZSAgICAgICAgIDogb3BlcmF0ZXMgb24gaW1hZ2UgZGF0YS4gVXN1YWxseSB0aGlzIG1lZGlhIHR5cGUgY2FuIGFsc28KKyAgICAgICAgICAgICAgICAgICAgIGJlIHVzZWQgdG8gbWFrZSBhIHZpZGVvIHN0cmVhbSBpbiB3aGljaCBjYXNlIGl0IGlzIGFkZGVkCisgICAgICAgICAgICAgICAgICAgICB0b2dldGhlciB3aXRoIHRoZSBWaWRlbyBtZWRpYSB0eXBlLgorICAgKiBUZXh0ICAgICAgICAgIDogb3BlcmF0ZXMgb24gdGV4dCBkYXRhCisgICAqIE1ldGFkYXRhICAgICAgOiBvcGVyYXRlcyBvbiBtZXRhZGF0YQorICAgKiAuLi4KKworIC0gRXh0cmEgZmVhdHVyZXMKKworICAgVGhlIHB1cnBvc2UgaXMgdG8gZnVydGhlciBzcGVjaWFsaXplIHRoZSBlbGVtZW50LCBtb3N0bHkgZm9yCisgICBhcHBsaWNhdGlvbiBzcGVjaWZpYyBuZWVkcy4KKworICAgKiBOZXR3b3JrICAgICAgIDogZWxlbWVudCBpcyB1c2VkIGluIG5ldHdvcmtlZCBzaXR1YXRpb25zCisgICAqIFByb3RvY29sICAgICAgOiBpbXBsZW1lbnRzIHNvbWUgcHJvdG9jb2wgKFJUU1AsIEhUVFAsIC4uLikKKyAgICogUGF5bG9hZGVyICAgICA6IGVuY2Fwc3VsYXRlIGFzIHBheWxvYWQgKFJUUCwgUkRULC4uICkKKyAgICogRGVwYXlsb2FkZXIgICA6IHN0cmlwIGEgcGF5bG9hZCAoUlRQLCBSRFQsLi4gKQorICAgKiBSVFAgICAgICAgICAgIDogaW50ZW5kZWQgdG8gYmUgdXNlZCBpbiBSVFAgYXBwbGljYXRpb25zCisgICAqIERldmljZSAgICAgICAgOiBvcGVyYXRlcyBvbiBzb21lIGhhcmR3YXJlIGRldmljZSAoZGlzaywgbmV0d29yaywKKyAgICAgICAgICAgICAgICAgICAgIGF1ZGlvIGNhcmQsIHZpZGVvIGNhcmQsIHVzYiwgLi4uKQorICAgKiBWaXN1YWxpc2F0aW9uIDogaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgYXVkaW8gdmlzdWFsaXNhdGlvbgorICAgKiBEZWJ1ZyAgICAgICAgIDogaW50ZW5kZWQgdXNhZ2UgaXMgbW9yZSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorCisgLSBDYXRlZ29yaWVzIGZvdW5kLCBidXQgbm90IHlldCBpbiBvbmUgb2YgdGhlIGFib3ZlIGxpc3RzCisKKyAgICogQmluICAgICAgICAgICA6IHBsYXliaW4sIGRlY29kZWJpbiwgYmluLCBwaXBlbGluZQorICAgKiBDb2RlYyAgICAgICAgIDogbG90cyBvZiBkZWNvZGVycywgZW5jb2RlciwgZGVtdXhlcnMKKyAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSByZW1vdmVkPworICAgKiBHZW5lcmljICAgICAgIDogc2hvdWxkIGJlIHJlbW92ZWQ/CisgICAqIEZpbGUgICAgICAgICAgOiBsaWtlIG5ldHdvcmssIHNob3VsZCBnbyB0byBFeHRyYT8KKyAgICogRWRpdG9yICAgICAgICA6IGdub25saW4sIHRleHRvdmVybGF5cworICAgKiBEVkQsIEdEUCwgTEFEU1BBLCBQYXJzZXIsIFBsYXllciwgU3VidGl0bGUsIFRlc3RpbmcsIC4uLgorCiszKSBzdWdnZXN0ZWQgb3JkZXI6CisKKyAgIDxmdW5jdGlvbmFsPlsvPG1lZGlhIHR5cGU+XSpbLzxleHRyYS4uLj5dKgorCis0KSBleGFtcGxlczoKKworICAgYXBlZGVtdXggICAgICAgICA6IEV4dHJhY3Rlci9NZXRhZGF0YQorICAgYXVkaW90ZXN0c3JjICAgICA6IFNvdXJjZS9BdWRpbworICAgYXV0b2F1ZGlvc2luayAgICA6IFNpbmsvQXVkaW8vRGV2aWNlCisgICBjYWlyb3RpbWVvdmVybGF5IDogTWl4ZXIvVmlkZW8vVGV4dAorICAgZHZkZWMgICAgICAgICAgICA6IERlY29kZXIvVmlkZW8KKyAgIGR2ZGVtdXggICAgICAgICAgOiBEZW11eGVyCisgICBnb29tICAgICAgICAgICAgIDogQ29udmVydGVyL0F1ZGlvL1ZpZGVvCisgICBpZDNkZW11eCAgICAgICAgIDogRXh0cmFjdGVyL01ldGFkYXRhCisgICB1ZHBzcmMgICAgICAgICAgIDogU291cmNlL05ldHdvcmsvUHJvdG9jb2wvRGV2aWNlCisgICB2aWRlb21peGVyICAgICAgIDogTWl4ZXIvVmlkZW8KKyAgIGZmbXBlZ2NvbG9yc3BhY2UgOiBGaWx0ZXIvVmlkZW8gICAgICAgICAgICAgKGludGVuZGVkIHVzZSB0byBjb252ZXJ0IHZpZGVvIHdpdGggYXMgbGl0dGxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlIGNoYW5nZSBhcyBwb3NzaWJsZSkKKyAgIHZlcnRpZ290diAgICAgICAgOiBFZmZlY3QvVmlkZW8gICAgICAgICAgICAgKGludGVuZGVkIHVzZSBpcyB0byBjaGFuZ2UgdGhlIHZpZGVvKQorICAgdm9sdW1lICAgICAgICAgICA6IEVmZmVjdC9BdWRpbyAgICAgICAgICAgICAoaW50ZW5kZWQgdXNlIGlzIHRvIGNoYW5nZSB0aGUgYXVkaW8gZGF0YSkKKyAgIHZvcmJpc2RlYyAgICAgICAgOiBEZWNvZGVyL0F1ZGlvCisgICB2b3JiaXNlbmMgICAgICAgIDogRW5jb2Rlci9BdWRpbworICAgb2dnbXV4ICAgICAgICAgICA6IE11eGVyCisgICBhZGRlciAgICAgICAgICAgIDogTWl4ZXIvQXVkaW8KKyAgIHZpZGVvYm94ICAgICAgICAgOiBFZmZlY3QvVmlkZW8KKyAgIGFsc2FtaXhlciAgICAgICAgOiBDb250cm9sL0F1ZGlvL0RldmljZQorICAgYXVkaW9jb252ZXJ0ICAgICA6IEZpbHRlci9BdWRpbworICAgYXVkaW9yZXNhbXBsZSAgICA6IEZpbHRlci9BdWRpbworICAgeHZpbWFnZXNpbmsgICAgICA6IFNpbmsvVmlkZW8vRGV2aWNlCisgICBuYXZzZWVrICAgICAgICAgIDogRmlsdGVyL0RlYnVnCisgICBkZWNvZGViaW4gICAgICAgIDogRGVjb2Rlci9EZW11eGVyCisgICBsZXZlbCAgICAgICAgICAgIDogRmlsdGVyL0FuYWx5emVyL0F1ZGlvCisgICB0ZWUgICAgICAgICAgICAgIDogQ29ubmVjdG9yL0RlYnVnCisKKyA1KSBvcGVuIGlzc3VlczoKKworICAgLSBob3cgdG8gZGlmZmVyZW5jaWFsIHBoeXNpY2FsIGRldmljZXMgZnJvbSBsb2dpY2FsIG9uZXM/CisgICAgIGF1dG9hdWRpb3NpbmsgICAgOiBTaW5rL0F1ZGlvL0RldmljZQorICAgICBhbHNhc2luayAgICAgICAgIDogU2luay9BdWRpby9EZXZpY2UKKworVXNlIGNhc2VzCit+fn5+fn5+fn4KKworLSBnZXQgYSBsaXN0IG9mIGFsbCBlbGVtZW50cyBpbXBsZW1lbnRpbmcgYSB2aWRlbyBlZmZlY3QgKHBpdGl2aSk6CisKKyAgIGtsYXNzLmNvbnRhaW5zIChFZmZlY3QgJiBWaWRlbykKKworLSBnZXQgbGlzdCBvZiBtdXhlcnMgKHBpdGl2aSk6CisKKyAgIGtsYXNzLmNvbnRhaW5zIChNdXhlcikKKworLSBnZXQgbGlzdCBvZiB2aWRlbyBlbmNvZGVycyAocGl0aXZpKToKKworICAga2xhc3MuY29udGFpbnMgKEVuY29kZXIgJiB2aWRlbykKKworLSBHZXQgYSBsaXN0IG9mIGFsbCBhdWRpby92aWRlbyB2aXN1YWxpc2F0aW9ucyAodG90ZW0pOgorCisgICBrbGFzcy5jb250YWlucyAoVmlzdWFsaXNhdGlvbikKKworLSBHZXQgYSBsaXN0IG9mIGFsbCBkZWNvZGVycy9kZW11eGVyL21ldGFkYXRhIHBhcnNlcnMvdmlzIChwbGF5YmluKToKKworICAga2xhc3MuY29udGFpbnMgKFZpc3VhbGlzYXRpb24gfCBEZW11eGVyIHwgRGVjb2RlciB8IChFeHRyYWN0b3IgJiBNZXRhZGF0YSkpCisKKy0gR2V0IGEgbGlzdCBvZiBlbGVtZW50cyB0aGF0IGNhbiBjYXB0dXJlIGZyb20gYW4gYXVkaW8gZGV2aWNlIChnc3QtcHJvcGVydGllcyk6CisKKyAgIGtsYXNzLmNvbnRhaW5zIChTb3VyY2UgJiBBdWRpbyAmIERldmljZSkKKworICAgICogZmlsdGVycyBvdXQgYXVkaW90ZXN0c3JjLCBzaW5jZSBpdCBpcyBub3QgYSBkZXZpY2UKKworCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9kcmFmdC1wdXNoLXB1bGwudHh0IGIvZG9jcy9kZXNpZ24vZHJhZnQtcHVzaC1wdWxsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjMzYmM3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9kZXNpZ24vZHJhZnQtcHVzaC1wdWxsLnR4dApAQCAtMCwwICsxLDExOSBAQAorRFJBRlQgcHVzaC1wdWxsIHNjaGVkdWxpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N0YXR1cworCisgIERSQUZULiBERVBSRUNBVEVEIGJ5IGJldHRlciBjdXJyZW50IGltcGxlbWVudGF0aW9uLgorCitPYnNlcnZhdGlvbnM6CisKKyAgLSBUaGUgbWFpbiBzY2hlZHVsaW5nIG1vZGUgaXMgY2hhaW4gYmFzZWQgc2NoZWR1bGluZyB3aGVyZSB0aGUgc291cmNlCisgICAgZWxlbWVudCBwdXNoZXMgYnVmZmVycyB0aHJvdWdoIHRoZSBwaXBlbGluZSB0byB0aGUgc2lua3MuIHRoaXMgaXMKKyAgICBjYWxsZWQgdGhlIHB1c2ggbW9kZWwKKworICAtIEluIHRoZSBwdWxsIG1vZGVsLCBzb21lIHBsdWdpbiBwdWxscyBidWZmZXJzIGZyb20gYW4gdXBzdHJlYW0gcGVlcgorICAgIGVsZW1lbnQgYmVmb3JlIGNvbnN1bWluZyBhbmQvb3IgcHVzaGluZyB0aGVtIGZ1cnRoZXIgZG93bnN0cmVhbS4KKworCitVc2FnZXMgb2YgcHVsbCBiYXNlZCBzY2hlZHVsaW5nOgorCisgIC0gc2lua3MgdGhhdCBwdWxsIGluIGRhdGEsIHBvc3NpYmx5IGF0IGZpeGVkIGludGVydmFscyBkcml2ZW4gYnkgc29tZQorICAgIGhhcmR3YXJlIGRldmljZSAoYXVkaW9jYXJkLCB2aWRlb2RldmljZSwgLi4uKS4KKworICAtIEVmZmljaWVudCByYW5kb20gYWNjZXNzIHRvIHJlc291cmNlcy4gRXNwZWNpYWxseSB1c2VmdWwgZm9yIGNlcnRhaW4KKyAgICB0eXBlcyBvZiBkZW11eGVycy4KKworCitBUEkgZm9yIHB1bGwtYmFzZWQgc2NoZWR1bGluZzoKKworICAtIGFuIGVsZW1lbnQgdGhhdCB3YW50cyB0byBwdWxsIGRhdGEgZnJvbSBhIHBlZXIgZWxlbWVudCBuZWVkcyB0byBjYWxsCisgICAgdGhlIHB1bGxfcmFuZ2UoKSBtZXRob2QuIFRoaXMgbWV0aG9kcyByZXF1aXJlcyBhbiBvZmZzZXQgYW5kIGEgc2l6ZS4KKyAgICBJdCBpcyBwb3NzaWJsZSB0byBsZWF2ZSB0aGUgb2Zmc2V0IGFuZCBzaXplIGF0IC0xLCBpbmRpY2F0aW5nIHRoYXQKKyAgICBhbnkgb2Zmc2V0IG9yIHNpemUgaXMgYWNjZXB0YWJsZSwgdGhpcyBvZiBjb3Vyc2UgcmVtb3ZlcyB0aGUgYWR2YW50YWdlcworICAgIG9mIGdldHJhbmdlIGJhc2VkIHNjaGVkdWxpbmcuCisKKworVHlwZXMgb2YgcHVsbCBiYXNlZCBzY2hlZHVsaW5nOgorCisgIC0gc29tZSBzb3VyY2VzIGNhbiBkbyByYW5kb20gYWNjZXNzIChmaWxlIHNvdXJjZSwgLi4uKQorCisgIC0gc29tZSBzb3VyY2VzIGNhbiByZWFkIGEgcmFuZG9tIG51bWJlciBvZiBieXRlcyBidXQgbm90IGF0IGEgcmFuZG9tCisgICAgb2Zmc2V0LiAoYXVkaW8gY2FyZHMsIC4uLikgQXVkaW8gY2FyZHMgdXNpbmcgYSByaW5nYnVmZmVyIGNhbgorICAgIGhvd2V2ZXIgZG8gcmFuZG9tIGFjY2VzcyBpbiB0aGUgcmluZ2J1ZmZlci4KKworICAtIHNvbWUgc291cmNlcyBjYW4gZG8gcmFuZG9tIGFjY2VzcyBpbiBhIHJhbmdlIG9mIGJ5dGVzIGJ1dCBub3QgaW4KKyAgICBhbm90aGVyIHJhbmdlLiAoYSBjYWNoaW5nIG5ldHdvcmsgc291cmNlKS4KKworICAtIHNvbWUgc291cmNlcyBjYW4gZG8gYSBmaXhlZCBzaXplIGRhdGEgYW5kIHdpdGhvdXQgYW4gb2Zmc2V0LiAKKyAgICAodmlkZW8gc291cmNlcywgLi4uKQorICAKKyAgICAgIAorQ3VycmVudCBzY2hlZHVsaW5nIGRlY2lzaW9uOgorCisgIC0gY29yZSBzZWxlY3RzIHNjaGVkdWxpbmcgdHlwZSBzdGFydGluZyBvbiBzaW5rcyBieSBsb29raW5nIGF0IGV4aXN0ZW5jZQorICAgIG9mIGxvb3AgZnVuY3Rpb24gb24gc2lua3BhZCBhbmQgY2FsbGluZyBfY2hlY2tfcHVsbF9yYW5nZSgpIG9uIHRoZQorICAgIHNvdXJjZSBwYWQgdG8gYWN0aXZhdGUgdGhlIHBhZHMgaW4gcHVzaC9wdWxsIG1vZGUuCisKKyAgLSBlbGVtZW50IHByb3hpZXMgcHVsbCBtb2RlIHBhZCBhY3RpdmF0aW9uIHRvIHBlZXIgcGFkLgorCitQcm9ibGVtczoKKworICAtIGNvcmUgbWFrZXMgYSB0b3VnaCBkZXNpY2lvbiB3aXRob3V0IGtub3dpbmcgYW55dGhpbmcgYWJvdXQgdGhlIAorICAgIGVsZW1lbnQuIFNvbWUgZWxlbWVudHMgYXJlIGFibGUgdG8gZGVhbCB3aXRoIGEgcHVsbF9yYW5nZSgpCisgICAgd2l0aG91dCBvZmZzZXQgd2hpbGUgb3RoZXJzIG5lZWQgZnVsbCByYW5kb20gIGFjY2Vzcy4KKyAgICAKKworUmVxdWlyZW1lbnRzOgorCisgIC0gZWxlbWVudCBzaG91bGQgYmUgYWJsZSB0byBzZWxlY3Qgc2NoZWR1bGluZyBtZXRob2QgaXRzZWxmIGJhc2VkIG9uCisgICAgaG93IGl0IGNhbiB1c2UgdGhlIHBlZXIgZWxlbWVudCBwdWxsX3JhbmdlLiBUaGlzIGluY2x1ZGVzIGlmIHRoZQorICAgIHBlZXIgY2FuIG9wZXJhdGUgd2l0aCBvciB3aXRob3V0IG9mZnNldC9zaXplLiBUaGlzIGFsc28gbWVhbnMgdGhhdAorICAgIHRoZSBjb3JlIGRvZXMgbm90IG5lZWQgdG8gc2VsZWN0IHRoZSBzY2hlZHVsaW5nIG1ldGhvZCBhbnltb3JlIGFuZAorICAgIGFsbG93cyBmb3IgbW9yZSBlZmZpY2llbnQgc2NoZWR1bGluZyBtZXRob2RzIGFkanVzdGVkIGZvciB0aGUgCisgICAgcGFydGljdWxhciBlbGVtZW50LgorCisKK1Byb3Bvc2l0aW9uOgorCisgIC0gcGFkcyBhcmUgYWN0aXZhdGVkIHdpdGhvdXQgdGhlIGNvcmUgc2VsZWN0aW5nIGEgbWV0aG9kLgorCisgIC0gcGFkcyBxdWVyaWVzIHNjaGVkdWxpbmcgbW9kZSBvZiBwZWVyIHBhZC4gVGhpcyBxdWVyeSBpcyByYXRoZXIKKyAgICBmaW5lZ3JhaW5lZCBhbmQgYWxsb3dzIHRoZSBlbGVtZW50IHRvIGtub3cgaWYgdGhlIHBlZXIgc3VwcG9ydHMKKyAgICBvZmZzZXRzIGFuZCBzaXplcyBpbiB0aGUgZ2V0X3JhbmdlIGZ1bmN0aW9uLiBBIHByb3Bvc2l0aW9uIGZvcgorICAgIHRoZSBxdWVyeSBpcyBvdXRsaW5lZCBpbiBkcmFmdC1xdWVyeS50eHQuCisgIAorICAtIHBhZCBzZWxlY3RzIHNjaGVkdWxpbmcgbW9kZSBhbmQgaW5mb3JtcyB0aGUgcGVlciBwYWQgb2YgdGhpcworICAgIGRlY2lzaW9uLgorCisKK1RoaW5ncyB0byBxdWVyeToKKworICAtIHBhZCBjYW4gZG8gcmVhbCByYW5kb20gYWNjZXNzIChkb3duc3RyZWFtIHBlZXIgY2FuIGFzayBmb3Igb2Zmc2V0ICE9IC0xKQorICAgICAtIG1pbiBvZmZzZXQKKyAgICAgLSBzdWdnZXN0IHNlcXVlbnRpYWwgYWNjZXNzCisgICAgIC0gbWF4IG9mZnNldAorICAgICAtIGFsaWduOiBhbGwgb2Zmc2V0cyBzaG91bGQgYmUgYWxpZ25lZCB3aXRoIHRoaXMgdmFsdWUuCisgIC0gcGFkIGNhbiBnaXZlIHJhbmdlcyBmcm9tIEEgdG8gQiBsZW5ndGggKHBlZXIgY2FuIGFzayBmb3IgQSA8PSBsZW5ndGggPD0gQikKKyAgICAgLSBtaW4gbGVuZ3RoCisgICAgIC0gc3VnZ2VzdGVkIGxlbmd0aAorICAgICAtIG1heCBsZW5ndGgKKworVXNlIGNhc2VzOgorCisgIC0gQW4gYXVkaW8gc291cmNlIGNhbiBwcm92aWRlIHJhbmRvbSBhY2Nlc3MgdG8gdGhlIHNhbXBsZXMgcXVldWVkIGluIGl0cworICAgIERNQSBidWZmZXIsIGl0IGhvd2V2ZXIgc3VnZ2VzdHMgc2VxdWVudGlhbCBhY2Nlc3MgbWV0aG9kLgorICAgIEFuIGF1ZGlvIHNvdXJjZSBjYW4gcHJvdmlkZSBhIHJhbmRvbSBudW1iZXIgb2Ygc2FtcGxlcyBidXQgcHJlZmVycyAKKyAgICByZWFkaW5nIGZyb20gdGhlIGhhcmR3YXJlIHVzaW5nIGEgZml4ZWQgc2VnbWVudCBzaXplLgorCisgIC0gQSBjYWNoaW5nIG5ldHdvcmsgc291cmNlIHdvdWxkIHN1Z2dlc3Qgc2VxdWVudGlhbCBhY2Nlc3MgYnV0IGlzIHNlZWthYmxlCisgICAgaW4gdGhlIGNhY2hlZCByZWdpb24uIEFwcGxpY2F0aW9ucyBjYW4gcXVlcnkgZm9yIHRoZSBhbHJlYWR5IGRvd25sb2FkZWQKKyAgICBwb3J0aW9uIGFuZCB1cGRhdGUgdGhlIEdVSSwgYSBzZWVrIGNhbiBiZSBkb25lIGluIHRoYXQgYXJlYS4KKyAgICAKKyAgLSBhIGxpdmUgdmlkZW8gc291cmNlIGNhbiBvbmx5IHByb3ZpZGUgYnVmZmVycyBzZXF1ZW50aWFseS4gSXQgZXhwb3NlcworICAgIG9mZnNldHMgYXMgLTEuIGxlbmd0aHMgYXJlIGFsc28gLTEuIAorCisgIAorCisKKyAgICAKKyAgICAgCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9kcmFmdC10YWdyZWFkaW5nLnR4dCBiL2RvY3MvZGVzaWduL2RyYWZ0LXRhZ3JlYWRpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMDI2MjkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2Rlc2lnbi9kcmFmdC10YWdyZWFkaW5nLnR4dApAQCAtMCwwICsxLDk5IEBACitUYWdyZWFkaW5nCistLS0tLS0tLS0tCisKK1RoZSB0YWdyZWFkaW5nIChtZXRhZGF0YSByZWFkaW5nKSB1c2UgY2FzZSBmb3IgbWVkaWFjZW50ZXIgYXBwbGljYXRpb25zIGlzIG5vdAordG8gd2VsbCBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgR1N0cmVhbWVyIGFyY2hpdGVjdHVyZS4gSXQgdXNlcyBkZW11eGVycyBvbiB0aGUKK2ZpbGVzLCB3aGljaCBnZW5lcmVsbHkgc2FpZCB0YWtlcyB0b28gbG9uZyAoYnVpbGRpbmcgc2Vlay1pbmRleCwgcHJlcm9sbGluZykuCitXaGF0IHdlIHdhbnQgaXMgc3BlY2lhbGl6ZWQgZWxlbWVudHMgLyBwYXJzaW5nIG1vZGVzIHRoYXQganVzdCBkbyB0aGUKK3RhZy1yZWFkaW5nLgorCitUaGUgaWRlYSBpcyB0byBkZWZpbmUgYSBUYWdSZWFkSUZhY2UuIFRhZy1kZW11eGVycywgY2xhc3NpYyBkZW11eGVycyBhbmQgZGVjb2RlcgorcGx1Z2lucyBjYW4ganVzdCBpbXBsZW1lbnQgdGhlIGludGVyZmFjZSBvciBwcm92aWRlIGEgc2VwYXJhdGUgZWxlbWVudCB0aGF0CitpbXBsZW1lbnRzIHRoZSBpbnRlcmZhY2UuCisKK0luIGFkZGl0aW9uIHdlIG5lZWQgYSB0YWdyZWFkYmluLCB0aGF0IHNpbWlsYXIgdG8gZGVjb2RlYmluIGRvZXMgYSB0eXBlZmluZCBhbmQKK3RoZW4gcGx1Z3MgdGhlIHJpZ2h0IHRhZ3JlYWQgZWxlbWVudChzKS4gSWYgd2lsbCBvbmx5IGxvb2sgYXQgZWxlbWVudHMgdGhhdAoraW1wbGVtZW50IHRoZSBpbnRlcmZhY2UuIEl0IGNhbiBwbHVnIHNlcnZhbCBpZiBwb3NzaWJsZS4KKworRm9yIG9wdGltYWwgcGVyZm9ybWFuY2UgdHlwZWZpbmQgYW5kIHRhZ3JlYWQgY291bGQgc2hhcmUgdGhlIGxpc3Qgb2YgYWxyZWFkeQorcGVla2VkIGJ1ZmZlcnMgKGEgcXVldWUgZWxlbWVudCBhZnRlciBzaW5rLCBidXQgdGhhdCB3b3VsZCBjaGFuZ2UgcHVsbCB0byBwdXNoKS4KKworCitEZXNpZ24KK35+fn5+fgorCitUaGUgcGxhbiBpcyB0aGF0IGFwcGxpY2F0aW9ucyBjYW4gZG8gdGhlIGZvbGxvd2luZzoKKyAgcGlwZWxpbmUgPSAiZmlsZXNyYyAhIHRhZ2JpbiIKKyAgZm9yIChmaWxlX3BhdGggaW4gbGlzdF9vZl9maWxlcykgeworICAgIGZpbGVzcmMubG9jYXRpb249ZmlsZV9wYXRoCisgICAgcGlwZWxpbmUuc2V0X3N0YXRlKFBBVVNFRCkKKyAgICAvLyB3YWl0IGZvciBUQUdTICYgRU9TCisgICAgcGlwZWxpbmUuc2V0X3N0YXRlKFJFQURZKQorICB9CisKKyogaXQgc2hvdWxkIGhhdmUgb25lIHNpbmtwYWQgb2YgdHlwZSBBTlkKKyogaXQgc2hvdWxkIHNlbmQgRU9TIHdoZW4gYWxsIG1ldGFkYXRhIGhhcyBiZWVuIHJlYWQKKyAgImRvbmUiLXNpZ25hbCBmcm9tIGFsbCB0YWdyZWFkLWVsZW1lbnRzCisqIHNwZWNpYWwgdGFncmVhZC1lbGVtZW50cyBzaG91bGQgaGF2ZSBSQU5LX05PTkUgdG8gYmUgbm90IGF1dG9wbHVnZ2VkIGJ5CisgIGRlY29kZWJpbgorCitJbnRlcmZhY2UKK35+fn5+fn5+fgorCisqIGdib29sZWFuIGlmYWNlIHByb3BlcnR5ICJ0YWctcmVhZGluZyIKKyAgU3dpdGNoZXMgdGhlIGVsZW1lbnQgdG8gdGFncmVhZGluZyBtb2RlLiBOZWVkZWQgaWYgbm9ybWFsIGVsZW1lbnQgaW1wbGVtZW50CisgIHRoYXQgYmVoYXZpb3VyLiBFbGVtZW50cyB3aWxsIHNraXAgcGFyc2luZyB1bm5lZWRlZCBkYXRhLCBkb24ndCBidWlsZCBhCisgIHNlZWtpbmcgaW5kZXgsIGV0Yy4KKyogc2lnbmFsICJkb25lIgorICBFcXVpdmFsZW50IG9mIEVPUy4KKworVXNlIENhc2VzCit+fn5+fn5+fn4KKworKiBtcDMgd2l0aCBpZDMtIGFuZCBhcGV0YWdzCisgICogcGx1ZyBpZDNkZW11eCAhIGFwZWRlbXV4CisqIGF2aSB3aXRoIHZvcmJpcyBhdWRpbworICAqIHBsdWcgYXZpZGVtdXgKKyAgKiBuZXcgcGFkIC0+IGF1ZGlvL3ZvcmJpcworICAqIHBsdWcgdm9yYmlzZGVjIG9yIHNwZWNpYWwgdm9yYmlzY29tbWVudCByZWFkZXIKKworQWRkaXRpb25hbCBUaG91Z2h0cworfn5+fn5+fn5+fn5+fn5+fn5+fgorCisqIHdvdWxkIGl0IG1ha2Ugc2Vuc2UgdG8gaGF2ZSAyLXBoYXNlIHRhZy1yZWFkaW5nIChwcm9wZXJ0eSBvbiB0YWdiaW4gYW5kL29yCisgIHRhZ3JlYWQgZWxlbWVudHMpCisgICogMXN0IHBoYXNlOiBnZXQgdGFnLWRhdGEgdGhhdCBhcmUgZGlyZWN0bHkgZW1iZWRkZWQgaW4gdGhlIGRhdGEKKyAgKiAybmQgcGhhc2U6IGdldCB0YWctZGF0YSB0aGF0IGhhcyB0byBiZSBnZW5lcmF0ZWQKKyAgICAqIGUuZy4gYWxidW0tYXJ0IHZpYSB3ZWIsIHZpZGVvLXRodW1ibmFpbHMKKyogd2hhdCBhYm91dCBjYWNoaW5nIGJhY2tlbmRzCisgICogaXQgd291bGQgYmUgZ29vZCB0byBhbGxvdyBhcHBsaWNhdGlvbnMgdG8gc3VwcGx5IHRhZ2JpbiB3aXRoIGEgdGFnY2FjaGUtCisgICAgb2JqZWN0IGluc3RhbmNlLiBXaGVuZXZlciB0YWdiaW4gZ2V0cyBhICdsb2NhdGlvbicgdG8gdGFncmVhZCwgaXQgY29uc3VsdHMKKyAgICB0aGUgY2FjaGUgZmlyc3QuIHdoZW5ldmVyIHRoZXJlIGlzIGEgY2FjaGUtbWlzcyBpdCB3aWxsIHRhZy1yZWFkIGFuZCB0aGVuCisgICAgc3RvcmUgaW4gdGhlIGNhY2hlCisKKyAgICBHc3RUYWdMaXN0ICpnc3RfdGFnX2NhY2hlX2xvYWRfdGFnX2RhdGEgKEdzdFRhZ0NhY2hlICpzZWxmLCBjb25zdCBnY2hhciAqdXJpKTsKKyAgICBnc3RfdGFnX2NhY2hlX3N0b3JlX3RhZ19kYXRhIChHc3RUYWdDYWNoZSAqc2VsZiwgY29uc3QgZ2NoYXIgKnVyaSwgR3N0VGFnTGlzdCAqdGFncyk7CisKK1Rlc3RzCit+fn5+fgorCisqIHdyaXRlIGEgZ2VuZXJpYyB0ZXN0IGZvciBwYXJzZXJzL2RlbXV4ZXJzIHRvIGVuc3VyZSB0aGV5IHNlbmQgdGFncyB1bnRpbCB0aGV5CisgIHJlYWNoZWQgUEFVU0VEIChlbGVtZW50cyBuZWVkIHRvIHBhcnNlIGZpbGUgZm9yIHByZXJvbGxpbmcgYW55d2F5KToKKyAgc2V0IHBpcGVsaW5lIHRvIHBhdXNlZCwgY2hlY2sgZm9yIHRhZ3MsIHNldCB0byBwbGF5aW5nLCBlcnJvciBvdXQgaWYgdGFncyBjb21lCisgIGFmdGVyIHBhdXNlZAorCitDb2RlIExvY2F0aW9ucworfn5+fn5+fn5+fn5+fn4KKworKiB0YWdyZWFkYmluIC0+IGdzdC1wbHVnaW5zLWJhc2UvZ3N0L3RhZ3JlYWQKKyogdGFncmVhZGVyaWZhY2UgLT4gZ3N0LXBsdWdpbnMtYmFzZS9nc3QtbGlicy9nc3QvdGFnCisKK1JldXNlCit+fn5+fgorCisqIG9nZyA6IGdzdC1wbHVnaW5zLWJhc2UvZXh0L29nZworKiBhdmkgOiBnc3QtcGx1Z2lucy1nb29kL2dzdC9hdmkKKyogbXAzIDogZ3N0LXBsdWdpbnMtZ29vZC9nc3QvaWQzZGVtdXgKKyogd2F2IDogZ3N0LXBsdWdpbnMtZ29vZC9nc3Qvd2F2cGFyc2UKKyogcXQgIDogZ3N0LXBsdWdpbnMtYmFkL2dzdC9xdGRlbXV4CisKZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtTVQtcmVmY291bnRpbmcudHh0IGIvZG9jcy9kZXNpZ24vcGFydC1NVC1yZWZjb3VudGluZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZmMzg0MwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZGVzaWduL3BhcnQtTVQtcmVmY291bnRpbmcudHh0CkBAIC0wLDAgKzEsNDE3IEBACitDb252ZW50aW9ucyBmb3IgdGhyZWFkIGEgc2FmZSBBUEkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgR1N0cmVhbWVyIEFQSSBpcyBkZXNpZ25lZCB0byBiZSB0aHJlYWQgc2FmZS4gVGhpcyBtZWFucyB0aGF0IEFQSSBmdW5jdGlvbnMKK2NhbiBiZSBjYWxsZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIGF0IHRoZSBzYW1lIHRpbWUuIEdTdHJlYW1lciBpbnRlcm5hbGx5IHVzZXMKK3RocmVhZHMgdG8gcGVyZm9ybSB0aGUgZGF0YSBwYXNzaW5nIGFuZCB2YXJpb3VzIGFzeW5jaHJvbm91cyBzZXJ2aWNlcyBzdWNoIGFzCit0aGUgY2xvY2sgY2FuIGFsc28gdXNlIHRocmVhZHMuCisKK1RoaXMgZGVzaWduIGRlY2lzaW9uIGhhcyBpbXBsaWNhdGlvbnMgZm9yIHRoZSB1c2FnZSBvZiB0aGUgQVBJIGFuZCB0aGUgb2JqZWN0cword2hpY2ggdGhpcyBkb2N1bWVudCBleHBsYWlucy4KKworTVQgc2FmZXR5IHRlY2huaXF1ZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1NldmVyYWwgZGVzaWduIHBhdHRlcm5zIGFyZSB1c2VkIHRvIGd1YXJhbnRlZSBvYmplY3QgY29uc2lzdGVuY3kgaW4gR1N0cmVhbWVyLgorVGhpcyBpcyBhbiBvdmVydmlldyBvZiB0aGUgbWV0aG9kcyB1c2VkIGluIHZhcmlvdXMgR1N0cmVhbWVyIHN1YnN5c3RlbXMuCisKK1JlZmNvdW50aW5nOgorCisgIEFsbCBzaGFyZWQgb2JqZWN0cyBoYXZlIGEgcmVmY291bnQgYXNzb2NpYXRlZCB3aXRoIHRoZW0uIEVhY2ggcmVmZXJlbmNlCisgIG9idGFpbmVkIHRvIHRoZSBvYmplY3Qgc2hvdWxkIGluY3JlYXNlIHRoZSByZWZjb3VudCBhbmQgZWFjaCByZWZlcmVuY2UgbG9zdAorICBzaG91bGQgZGVjcmVhc2UgdGhlIHJlZmNvdW50LgorCisgIFRoZSByZWZjb3VudGluZyBpcyB1c2VkIHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW4gYW5vdGhlciB0aHJlYWQgZGVzdHJveXMgdGhlCisgIG9iamVjdCwgdGhlIG9uZXMgd2hpY2ggc3RpbGwgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IGRvIG5vdCByZWFkIGZyb20KKyAgaW52YWxpZCBtZW1vcnkgd2hlbiBhY2Nlc3NpbmcgdGhlIG9iamVjdC4KKworICBSZWZjb3VudGluZyBpcyBhbHNvIHVzZWQgdG8gZW5zdXJlIHRoYXQgbXV0YWJsZSBkYXRhIHN0cnVjdHVyZXMgYXJlIG9ubHkKKyAgbW9kaWZpZWQgd2hlbiB0aGV5IGFyZSBvd25lZCBieSB0aGUgY2FsbGluZyBjb2RlLgorCisgIEl0IGlzIGEgcmVxdWlyZW1lbnQgdGhhdCB3aGVuIHR3byB0aHJlYWRzIGhhdmUgYSBoYW5kbGUgb24gYW4gb2JqZWN0LCB0aGUKKyAgcmVmY291bnQgbXVzdCBiZSBtb3JlIHRoYW4gb25lLiBUaGlzIG1lYW5zIHRoYXQgd2hlbiBvbmUgdGhyZWFkIHBhc3NlcyBhbgorICBvYmplY3QgdG8gYW5vdGhlciB0aHJlYWQgaXQgbXVzdCBpbmNyZWFzZSB0aGUgcmVmY291bnQuIFRoaXMgcmVxdWlyZW1lbnQgbWFrZXMKKyAgc3VyZSB0aGF0IG9uZSB0aHJlYWQgY2Fubm90IHN1ZGRlbmx5IGRpc3Bvc2UgdGhlIG9iamVjdCBtYWtpbmcgdGhlIG90aGVyCisgIHRocmVhZCBjcmFzaCB3aGVuIGl0IHRyaWVzIHRvIGFjY2VzcyB0aGUgcG9pbnRlciB0byBpbnZhbGlkIG1lbW9yeS4KKworU2hhcmVkIGRhdGEgc3RydWN0dXJlcyBhbmQgd3JpdGFiaWxpdHk6CisKKyAgQWxsIG9iamVjdHMgaGF2ZSBhIHJlZmNvdW50IGFzc29jaWF0ZWQgd2l0aCB0aGVtLiBFYWNoIHJlZmVyZW5jZSBvYnRhaW5lZCB0bworICB0aGUgb2JqZWN0IHNob3VsZCBpbmNyZWFzZSB0aGUgcmVmY291bnQgYW5kIGVhY2ggcmVmZXJlbmNlIGxvc3Qgc2hvdWxkCisgIGRlY3JlYXNlIHRoZSByZWZjb3VudC4KKworICBFYWNoIHRocmVhZCBoYXZpbmcgYSByZWZjb3VudCB0byB0aGUgb2JqZWN0IGNhbiBzYWZlbHkgcmVhZCBmcm9tIHRoZSBvYmplY3QuCisgIGJ1dCBtb2RpZmljYXRpb25zIG1hZGUgdG8gdGhlIG9iamVjdCBzaG91bGQgYmUgcHJlY2VlZGVkIHdpdGggYQorICBfZ2V0X3dyaXRhYmxlKCkgZnVuY3Rpb24gY2FsbC4gVGhpcyBmdW5jdGlvbiB3aWxsIGNoZWNrIHRoZSByZWZjb3VudCBvZiB0aGUKKyAgb2JqZWN0IGFuZCBpZiB0aGUgb2JqZWN0IGlzIHJlZmVyZW5jZWQgYnkgbW9yZSB0aGFuIG9uZSBpbnN0YW5jZSwgYSBjb3B5IGlzCisgIG1hZGUgb2YgdGhlIG9iamVjdCB0aGF0IGlzIHRoZW4gYnkgZGVmaW5pdGlvbiBvbmx5IHJlZmVyZW5jZWQgZnJvbSB0aGUgY2FsbGluZworICB0aHJlYWQuIFRoaXMgbmV3IGNvcHkgaXMgdGhlbiBtb2RpZmlhYmxlIHdpdGhvdXQgYmVpbmcgdmlzaWJsZSB0byBvdGhlcgorICByZWZjb3VudCBob2xkZXJzLgorCisgIFRoaXMgdGVjaG5pcXVlIGlzIHVzZWQgZm9yIGluZm9ybWF0aW9uIG9iamVjdHMgdGhhdCwgb25jZSBjcmVhdGVkLCBuZXZlcgorICBjaGFuZ2UgdGhlaXIgdmFsdWVzLiBUaGUgbGlmZXRpbWUgb2YgdGhlc2Ugb2JqZWN0cyBpcyBnZW5lcmFsbHkgc2hvcnQsIHRoZQorICBvYmplY3RzIGFyZSB1c3VhbGx5IHNpbXBsZSBhbmQgY2hlYXAgdG8gY29weS9jcmVhdGUuCisKKyAgVGhlIGFkdmFudGFnZSBvZiB0aGlzIG1ldGhvZCBpcyB0aGF0IG5vIHJlYWRlci93cml0ZXJzIGxvY2tzIGFyZSBuZWVkZWQuIGFsbAorICB0aHJlYWRzIGNhbiBjb25jdXJyZW50bHkgcmVhZCBidXQgd3JpdGVzIGhhcHBlbiBsb2NhbGx5IG9uIGEgbmV3IGNvcHkuIEluIG1vc3QKKyAgY2FzZXMgX2dldF93cml0YWJsZSgpIGNhbiBhdm9pZCBhIHJlYWwgY29weSBiZWNhdXNlIHRoZSBjYWxsaW5nIG1ldGhvZCBpcyB0aGUKKyAgb25seSBvbmUgaG9sZGluZyBhIHJlZmVyZW5jZSwgd2hpY2ggbWFrZXMgcmVhZC93cml0ZSB2ZXJ5IGNoZWFwLgorCisgIFRoZSBkcmF3YmFjayBpcyB0aGF0IHNvbWV0aW1lcyAxIG5lZWRsZXNzIGNvcHkgY2FuIGJlIGRvbmUuIFRoaXMgd291bGQgaGFwcGVuCisgIHdoZW4gTiB0aHJlYWRzIGNhbGwgX2dldF93cml0YWJsZSgpIGF0IHRoZSBzYW1lIHRpbWUsIGFsbCBzZWVpbmcgdGhhdCBOCisgIHJlZmVyZW5jZXMgYXJlIGhlbGQgb24gdGhlIG9iamVjdC4gSW4gdGhpcyBjYXNlIDEgY29weSB0b28gbWFueSB3aWxsIGJlIGRvbmUuCisgIFRoaXMgaXMgbm90IGEgcHJvYmxlbSBpbiBhbnkgcHJhY3RpY2FsIHNpdHVhdGlvbiBiZWNhdXNlIHRoZSBjb3B5IG9wZXJhdGlvbiBpcworICBmYXN0LgorIAorTXV0YWJsZSBzdWJzdHJ1Y3R1cmVzOgorCisgIFNwZWNpYWwgdGVjaG5pcXVlcyBhcmUgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgY29uc2lzdGVuY3kgb2YgY29tcG91bmQgc2hhcmVkCisgIG9iamVjdHMuIEFzIG1lbnRpb25lZCBhYm92ZSwgc2hhcmVkIG9iamVjdHMgbmVlZCB0byBoYXZlIGEgcmVmZXJlbmNlIGNvdW50IG9mCisgIDEgaWYgdGhleSBhcmUgdG8gYmUgbW9kaWZpZWQuIEltcGxpY2l0IGluIHRoaXMgYXNzdW1wdGlvbiBpcyB0aGF0IGFsbCBwYXJ0cyBvZgorICB0aGUgc2hhcmVkIG9iamVjdCBiZWxvbmcgb25seSB0byB0aGUgb2JqZWN0LiBGb3IgZXhhbXBsZSwgYSBHc3RTdHJ1Y3R1cmUgaW4KKyAgb25lIEdzdENhcHMgb2JqZWN0IHNob3VsZCBub3QgYmVsb25nIHRvIGFueSBvdGhlciBHc3RDYXBzIG9iamVjdC4gVGhpcworICBjb25kaXRpb24gc3VnZ2VzdHMgYSBwYXJlbnQtY2hpbGQgcmVsYXRpb25zaGlwOiBzdHJ1Y3R1cmVzIGNhbiBvbmx5IGJlIGFkZGVkCisgIHRvIHBhcmVudCBvYmplY3QgaWYgdGhleSBkbyBub3QgYWxyZWFkeSBoYXZlIGEgcGFyZW50IG9iamVjdC4KKworICBJbiBhZGRpdGlvbiwgdGhlc2Ugc3Vic3RydWN0dXJlcyBtdXN0IG5vdCBiZSBtb2RpZmllZCB3aGlsZSBtb3JlIHRoYW4gb25lIGNvZGUKKyAgc2VnbWVudCBoYXMgYSByZWZlcmVuY2Ugb24gdGhlIHBhcmVudCBvYmplY3QuIEZvciBleGFtcGxlLCBpZiB0aGUgdXNlciBjcmVhdGVzCisgIGEgR3N0U3RydWN0dXJlLCBhZGRzIGl0IHRvIGEgR3N0Q2FwcywgYW5kIHRoZSBHc3RDYXBzIGlzIHRoZW4gcmVmZXJlbmNlZCBieQorICBvdGhlciBjb2RlIHNlZ21lbnRzLCB0aGUgR3N0U3RydWN0dXJlIHNob3VsZCB0aGVuIGJlY29tZSBpbW11dGFibGUsIHNvIHRoYXQKKyAgY2hhbmdlcyB0byB0aGF0IGRhdGEgc3RydWN0dXJlIGRvIG5vdCBhZmZlY3Qgb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUuIFRoaXMKKyAgbWVhbnMgdGhhdCB0aGUgY2hpbGQgaXMgb25seSBtdXRhYmxlIHdoZW4gdGhlIHBhcmVudCdzIHJlZmVyZW5jZSBjb3VudCBpcyAxLAorICBhcyB3ZWxsIGFzIHdoZW4gdGhlIGNoaWxkIHN0cnVjdHVyZSBoYXMgbm8gcGFyZW50LgorCisgIFRoZSBnZW5lcmFsIHNvbHV0aW9uIHRvIHRoaXMgcHJvYmxlbSBpcyB0byBpbmNsdWRlIGEgZmllbGQgaW4gY2hpbGQgc3RydWN0dXJlcworICBwb2ludGluZyB0byB0aGUgcGFyZW50J3MgYXRvbWljIHJlZmVyZW5jZSBjb3VudC4gV2hlbiBzZXQgdG8gTlVMTCwgdGhpcworICBpbmRpY2F0ZXMgdGhhdCB0aGUgY2hpbGQgaGFzIG5vIHBhcmVudC4gT3RoZXJ3aXNlLCBwcm9jZWR1cmVzIHRoYXQgbW9kaWZ5IHRoZQorICBjaGlsZCBzdHJ1Y3R1cmUgbXVzdCBjaGVjayBpZiB0aGUgcGFyZW50J3MgcmVmY291bnQgaXMgMSwgYW5kIG90aGVyd2lzZSBtdXN0CisgIGNhdXNlIGFuIGVycm9yIHRvIGJlIHNpZ25hbGVkLgorCisgIE5vdGUgdGhhdCB0aGlzIGlzIGFuIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbDsgYXBwbGljYXRpb24gb3IgcGx1Z2luCisgIGNvZGUgdGhhdCBjYWxscyBfZ2V0X3dyaXRhYmxlKCkgb24gYW4gb2JqZWN0IGlzIGd1YXJhbnRlZWQgdG8gcmVjZWl2ZSBhbgorICBvYmplY3Qgb2YgcmVmY291bnQgMSwgd2hpY2ggbXVzdCB0aGVuIGJlIHdyaXRhYmxlLiBUaGUgb25seSB0cmljayBpcyB0aGF0IGEKKyAgcG9pbnRlciB0byBhIGNoaWxkIHN0cnVjdHVyZSBvZiBhbiBvYmplY3QgaXMgb25seSB2YWxpZCB3aGlsZSB0aGUgY2FsbGluZyBjb2RlCisgIGhhcyBhIHJlZmVyZW5jZSBvbiB0aGUgcGFyZW50IG9iamVjdCwgYmVjYXVzZSB0aGUgcGFyZW50IGlzIHRoZSBvd25lciBvZiB0aGUKKyAgY2hpbGQuCisKK09iamVjdCBsb2NraW5nOgorCisgIEZvciBvYmplY3RzIHRoYXQgY29udGFpbiBzdGF0ZSBpbmZvcm1hdGlvbiBhbmQgZ2VuZXJhbGx5IGhhdmUgYSBsb25nZXIKKyAgbGlmZXRpbWUsIG9iamVjdCBsb2NraW5nIGlzIHVzZWQgdG8gdXBkYXRlIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlCisgIG9iamVjdC4KKworICBBbGwgcmVhZGVycyBhbmQgd3JpdGVycyBhY3F1aXJlIHRoZSBsb2NrIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIG9iamVjdC4gT25seSBvbmUKKyAgdGhyZWFkIGlzIGFsbG93ZWQgYWNjZXNzIHRoZSBwcm90ZWN0ZWQgc3RydWN0dXJlcyBhdCBhIHRpbWUuCisKKyAgT2JqZWN0IGxvY2tpbmcgaXMgdXNlZCBmb3IgYWxsIG9iamVjdHMgZXh0ZW5kaW5nIGZyb20gR3N0T2JqZWN0IHN1Y2ggYXMKKyAgR3N0RWxlbWVudCwgR3N0UGFkLgorCisgIE9iamVjdCBsb2NraW5nIGNhbiBiZSBkb25lIHdpdGggcmVjdXJzaXZlIGxvY2tzIG9yIHJlZ3VsYXIgbXV0ZXhlcy4gT2JqZWN0CisgIGxvY2tzIGluIEdTdHJlYW1lciBhcmUgaW1wbGVtZW50ZWQgd2l0aCBtdXRleGVzIHdoaWNoIGNhdXNlIGRlYWRsb2NrcyB3aGVuCisgIGxvY2tlZCByZWN1cnNpdmVseSBmcm9tIHRoZSBzYW1lIHRocmVhZC4gVGhpcyBpcyBkb25lIGJlY2F1c2UgcmVndWxhciBtdXRleGVzCisgIGFyZSBjaGVhcGVyLgorCitBdG9taWMgb3BlcmF0aW9ucworCisgIEF0b21pYyBvcGVyYXRpb25zIGFyZSBvcGVyYXRpb25zIHRoYXQgYXJlIHBlcmZvcm1lZCBhcyBvbmUgY29uc2lzdGVudAorICBvcGVyYXRpb24gZXZlbiB3aGVuIGV4ZWN1dGVkIGJ5IG11bHRpcGxlIHRocmVhZHMuIFRoZXkgZG8gaG93ZXZlciBub3QgdXNlIHRoZQorICBjb252ZW50aW9uYWwgYXByb2FjaCBvZiB1c2luZyBtdXRleGVzIHRvIHByb3RlY3QgdGhlIGNyaXRpY2FsIHNlY3Rpb24gYnV0IHJlbHkKKyAgb24gQ1BVIGZlYXR1cmVzIGFuZCBpbnN0cnVjdGlvbnMuCisKKyAgVGhlIGFkdmFudGFnZXMgYXJlIG1vc3RseSBzcGVlZCByZWxhdGVkIHNpbmNlIHRoZXJlIGFyZSBubyBoZWF2eXdlaWdodCBsb2NrcworICBpbnZvbHZlZC4gTW9zdCBvZiB0aGVzZSBpbnN0cnVjdGlvbnMgYWxzbyBkbyBub3QgY2F1c2UgYSBjb250ZXh0IHN3aXRjaCBpbiBjYXNlCisgIG9mIGNvbmN1cnJlbnQgYWNjZXNzIGJ1dCB1c2UgYSByZXRyeSBtZWNoYW5pc20gb3Igc3BpbmxvY2tpbmcuCisKKyAgRGlzYWR2YW50YWdlcyBhcmUgdGhhdCBlYWNoIG9mIHRoZXNlIGluc3RydWN0aW9ucyB1c3VhbGx5IGNhdXNlIGEgY2FjaGUgZmx1c2gKKyAgb24gbXVsdGktQ1BVIG1hY2hpbmVzIHdoZW4gdHdvIHByb2Nlc3NvcnMgcGVyZm9ybSBjb25jdXJyZW50IGFjY2Vzcy4KKworICBBdG9taWMgb3BlcmF0aW9ucyBhcmUgZ2VuZXJhbGx5IHVzZWQgZm9yIHJlZmNvdW50aW5nIGFuZCBmb3IgdGhlIGFsbG9jYXRpb24gb2YKKyAgc21hbGwgZml4ZWQgc2l6ZSBvYmplY3RzIGluIGEgbWVtY2h1bmsuIFRoZXkgY2FuIGFsc28gYmUgdXNlZCB0byBpbXBsZW1lbnQgYQorICBsb2NrZnJlZSBsaXN0IG9yIHN0YWNrLgorCitDb21wYXJlIGFuZCBzd2FwCisKKyAgQXMgcGFydCBvZiB0aGUgYXRvbWljIG9wZXJhdGlvbnMsIGNvbXBhcmUtYW5kLXN3YXAgKENBUykgY2FuIGJlIHVzZWQgdG8gYWNjZXNzCisgIG9yIHVwZGF0ZSBhIHNpbmdsZSBwcm9wZXJ0eSBvciBwb2ludGVyIGluIGFuIG9iamVjdCB3aXRob3V0IGhhdmluZyB0byB0YWtlIGEKKyAgbG9jay4KKworICBUaGlzIHRlY2huaXF1ZSBpcyBjdXJyZW50bHkgbm90IHVzZWQgaW4gR1N0cmVhbWVyIGJ1dCBtaWdodCBiZSBhZGRlZCBpbiB0aGUKKyAgZnV0dXJlIGluIHBlcmZvcm1hbmNlIGNyaXRpY2FsIHBsYWNlcy4KKyAKKworT2JqZWN0cworfn5+fn5+fgorCisqIExvY2tpbmcgaW52b2x2ZWQ6CisKKyAgICAtIGF0b21pYyBvcGVyYXRpb25zIGZvciByZWZjb3VudGluZworICAgIC0gb2JqZWN0IGxvY2tpbmcKKworICBBbGwgb2JqZWN0cyBzaG91bGQgaGF2ZSBhIGxvY2sgYXNzb2NpYXRlZCB3aXRoIHRoZW0uIFRoaXMgbG9jayBpcyB1c2VkIHRvIGtlZXAKKyAgaW50ZXJuYWwgY29uc2lzdGVuY3kgd2hlbiBtdWx0aXBsZSB0aHJlYWRzIGNhbGwgQVBJIGZ1bmN0aW9uIG9uIHRoZSBvYmplY3QuCisKKyAgRm9yIG9iamVjdHMgdGhhdCBleHRlbmQgdGhlIEdTdHJlYW1lciBiYXNlIG9iamVjdCBjbGFzcyB0aGlzIGxvY2sgY2FuIGJlCisgIG9idGFpbmVkIHdpdGggdGhlIG1hY3JvcyBHU1RfT0JKRUNUX0xPQ0soKSBhbmQgR1NUX09CSkVDVF9VTkxPQ0soKS4gRm9yIG90aGVyIG9iamVjdCB0aGF0IGRvCisgIG5vdCBleHRlbmQgZnJvbSB0aGUgYmFzZSBHc3RPYmplY3QgY2xhc3MgdGhlc2UgbWFjcm9zIGNhbiBiZSBkaWZmZXJlbnQuCisKKyogcmVmY291bnRpbmcKKworICBBbGwgbmV3IG9iamVjdHMgY3JlYXRlZCBoYXZlIHRoZSBGTE9BVElORyBmbGFnIHNldC4gVGhpcyBtZWFucyB0aGF0IHRoZSBvYmplY3QKKyAgaXMgbm90IG93bmVkIG9yIG1hbmFnZWQgeWV0IGJ5IGFueWJvZHkgb3RoZXIgdGhhbiB0aGUgb25lIGhvbGRpbmcgYSByZWZlcmVuY2UKKyAgdG8gdGhlIG9iamVjdC4gVGhlIG9iamVjdCBpbiB0aGlzIHN0YXRlIGhhcyBhIHJlZmVyZW5jZSBjb3VudCBvZiAxLgorCisgIFZhcmlvdXMgb2JqZWN0IG1ldGhvZHMgY2FuIHRha2Ugb3duZXJzaGlwIG9mIGFub3RoZXIgb2JqZWN0LCB0aGlzIG1lYW5zIHRoYXQKKyAgYWZ0ZXIgY2FsbGluZyBhIG1ldGhvZCBvbiBvYmplY3QgQSB3aXRoIGFuIG9iamVjdCBCIGFzIGFuIGFyZ3VtZW50LCB0aGUgb2JqZWN0CisgIEIgaXMgbWFkZSBzb2xlIHByb3BlcnR5IG9mIG9iamVjdCBBLiBUaGlzIG1lYW5zIHRoYXQgYWZ0ZXIgdGhlIG1ldGhvZCBjYWxsIHlvdQorICBhcmUgbm90IGFsbG93ZWQgdG8gYWNjZXNzIHRoZSBvYmplY3QgYW55bW9yZSB1bmxlc3MgeW91IGtlZXAgYW4gZXh0cmEKKyAgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QuIEFuIGV4YW1wbGUgb2Ygc3VjaCBhIG1ldGhvZCBpcyB0aGUgX2Jpbl9hZGQoKSBtZXRob2QuCisgIEFzIHNvb24gYXMgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gYSBCaW4sIHRoZSBlbGVtZW50IHBhc3NlZCBhcyBhbiBhcmd1bWVudAorICBpcyBvd25lZCBieSB0aGUgYmluIGFuZCB5b3UgYXJlIG5vdCBhbGxvd2VkIHRvIGFjY2VzcyBpdCBhbnltb3JlIHdpdGhvdXQKKyAgdGFraW5nIGEgX3JlZigpIGJlZm9yZSBhZGRpbmcgaXQgdG8gdGhlIGJpbi4gVGhlIHJlYXNvbiBiZWluZyB0aGF0IGFmdGVyIHRoZQorICBfYmluX2FkZCgpIGNhbGwgZGlzcG9zaW5nIHRoZSBiaW4gYWxzbyBkZXN0cm95cyB0aGUgZWxlbWVudC4KKworICBUYWtpbmcgb3duZXJzaGlwIG9mIGFuIG9iamVjdCBoYXBwZW5zIHRocm91Z2ggdGhlIHByb2Nlc3Mgb2YgInNpbmtpbmciIHRoZQorICBvYmplY3QuIHRoZSBfc2luaygpIG1ldGhvZCBvbiBhbiBvYmplY3Qgd2lsbCBkZWNyZWFzZSB0aGUgcmVmY291bnQgb2YgdGhlCisgIG9iamVjdCBpZiB0aGUgRkxPQVRJTkcgZmxhZyBpcyBzZXQuIFRoZSBhY3Qgb2YgdGFraW5nIG93bmVyc2hpcCBvZiBhbiBvYmplY3QKKyAgaXMgdGhlbiBwZXJmb3JtZWQgYXMgYSBfcmVmKCkgZm9sbG93ZWQgYnkgYSBfc2luaygpIGNhbGwgb24gdGhlIG9iamVjdC4KKworICBUaGUgZmxvYXQvc2luayBwcm9jZXNzIGlzIHZlcnkgdXNlZnVsIHdoZW4gaW5pdGlhbGl6aW5nIGVsZW1lbnRzIHRoYXQgd2lsbAorICB0aGVuIGJlIHBsYWNlZCB1bmRlciBjb250cm9sIG9mIGEgcGFyZW50LiBUaGUgZmxvYXRpbmcgcmVmIGtlZXBzIHRoZSBvYmplY3QKKyAgYWxpdmUgdW50aWwgaXQgaXMgcGFyZW50ZWQsIGFuZCBvbmNlIHRoZSBvYmplY3QgaXMgcGFyZW50ZWQgeW91IGNhbiBmb3JnZXQKKyAgYWJvdXQgaXQuCisKKyAgYWxzbyBzZWUgcGFydC1yZWxhdGlvbnMudHh0CisgIAorKiBwYXJlbnQtY2hpbGQgcmVsYXRpb25zCisKKyAgT25lIGNhbiBjcmVhdGUgcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcHMgd2l0aCB0aGUgX29iamVjdF9zZXRfcGFyZW50KCkKKyAgbWV0aG9kLiBUaGlzIG1ldGhvZCByZWZzIGFuZCBzaW5rcyB0aGUgb2JqZWN0IGFuZCBhc3NpZ25zIGl0cyBwYXJlbnQgcHJvcGVydHkKKyAgdG8gdGhhdCBvZiB0aGUgbWFuYWdpbmcgcGFyZW50LgorCisgIFRoZSBjaGlsZCBpcyBzYWlkIHRvIGhhdmUgYSB3ZWFrIGxpbmsgdG8gdGhlIHBhcmVudCBzaW5jZSB0aGUgcmVmY291bnQgb2YgdGhlCisgIHBhcmVudCBpcyBub3QgaW5jcmVhc2VkIGluIHRoaXMgcHJvY2Vzcy4gVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBwYXJlbnQgaXMKKyAgZGlzcG9zZWQgaXQgaGFzIHRvIHVuc2V0IGl0c2VsZiBhcyB0aGUgcGFyZW50IG9mIHRoZSBvYmplY3QgYmVmb3JlIGRpc3Bvc2luZworICBpdHNlbGYsIGVsc2UgdGhlIGNoaWxkIG9iamVjdCBob2xkcyBhIHBhcmVudCBwb2ludGVyIHRvIGludmFsaWQgbWVtb3J5LgorICAKKyAgVGhlIHJlc3BvbnNpYmlsaXRpZXMgZm9yIGFuIG9iamVjdCB0aGF0IHNpbmtzIG90aGVyIG9iamVjdHMgYXJlIHN1bW1hcmlzZWQgYXM6CisKKyAgIC0gdGFraW5nIG93bmVyc2hpcCBvZiB0aGUgb2JqZWN0CisgICAgIC0gY2FsbCBfb2JqZWN0X3NldF9wYXJlbnQoKSB0byBzZXQgaXRzZWxmIGFzIHRoZSBvYmplY3QgcGFyZW50LCB0aGlzIGNhbGwKKyAgICAgICB3aWxsIF9yZWYoKSBhbmQgX3NpbmsoKSB0aGUgb2JqZWN0LgorICAgICAtIGtlZXAgcmVmZXJlbmNlIHRvIG9iamVjdCBpbiBhIGRhdGFzdHJ1Y3R1cmUgc3VjaCBhcyBhIGxpc3Qgb3IgYXJyYXkuCisKKyAgIC0gb24gZGlzcG9zZQorICAgICAtIGNhbGwgX29iamVjdF91bnBhcmVudCgpIHRvIHJlc2V0IHRoZSBwYXJlbnQgcHJvcGVydHkgYW5kIHVucmVmIHRoZQorICAgICAgIG9iamVjdC4KKyAgICAgLSByZW1vdmUgdGhlIG9iamVjdCBmcm9tIHRoZSBsaXN0LgorCisgIGFsc28gc2VlIHBhcnQtcmVsYXRpb25zLnR4dAorCisqIFByb3BlcnRpZXMKKyAgCisgIE1vc3Qgb2JqZWN0cyBhbHNvIGV4cG9zZSBzdGF0ZSBpbmZvcm1hdGlvbiB3aXRoIHB1YmxpYyBwcm9wZXJ0aWVzIGluIHRoZQorICBvYmplY3QuIFR3byB0eXBlcyBvZiBwcm9wZXJ0aWVzIG1pZ2h0IGV4aXN0OiBhY2Nlc3NpYmxlIHdpdGggb3Igd2l0aG91dAorICBob2xkaW5nIHRoZSBvYmplY3QgbG9jay4gQWxsIHByb3BlcnRpZXMgc2hvdWxkIG9ubHkgYmUgYWNjZXNzZWQgd2l0aCB0aGVpcgorICBjb3JyZXNwb25kaW5nIG1hY3Jvcy4gVGhlIHB1YmxpYyBvYmplY3QgcHJvcGVydGllcyBhcmUgbWFya2VkIGluIHRoZSAuaCBmaWxlcworICB3aXRoIC8qPCBwdWJsaWMgPiovLiBUaGUgcHVibGljIHByb3BlcnRpZXMgdGhhdCByZXF1aXJlIGEgbG9jayB0byBiZSBoZWxkIGFyZQorICBtYXJrZWQgd2l0aCAvKjwgcHVibGljID4qLyAvKiB3aXRoIDxsb2NrX3R5cGU+ICovLCB3aGVyZSA8bG9ja190eXBlPiBjYW4gYmUKKyAgIkxPQ0siIG9yICJTVEFURV9MT0NLIiBvciBhbnkgb3RoZXIgbG9jayB0byBtYXJrIHRoZSB0eXBlKHMpIG9mIGxvY2sgdG8gYmUgCisgIGhlbGQuCisKKyAgRXhhbXBsZToKKworICAgIGluIEdzdFBhZCB0aGVyZSBpcyBhIHB1YmxpYyBwcm9wZXJ0eSAiZGlyZWN0aW9uIi4gSXQgY2FuIGJlIGZvdW5kIGluIHRoZQorICAgIHNlY3Rpb24gbWFya2VkIGFzIHB1YmxpYyBhbmQgcmVxdWlyaW5nIHRoZSBMT0NLIHRvIGJlIGhlbGQuIFRoZXJlIGV4aXN0cworICAgIGFsc28gYSBtYWNybyB0byBhY2Nlc3MgdGhlIHByb3BlcnR5LgorCisgICAgICBzdHJ1Y3QgX0dzdFJlYWxQYWQgeworICAgICAgICAuLi4KKyAgICAgICAgLyo8IHB1YmxpYyA+Ki8gLyogd2l0aCBMT0NLICovCisgICAgICAgIC4uLgorICAgICAgICBHc3RQYWREaXJlY3Rpb24gICAgICAgICAgICAgICAgZGlyZWN0aW9uOworICAgICAgICAuLi4KKyAgICAgIH07CisKKyAgICAgICNkZWZpbmUgR1NUX1JQQURfRElSRUNUSU9OKHBhZCkgICAgICAoR1NUX1JFQUxfUEFEX0NBU1QocGFkKS0+ZGlyZWN0aW9uKQorICAKKyAgICBBY2Nlc3NpbmcgdGhlIHByb3BlcnR5IGlzIHRoZXJlZm9yZSBhbGxvd2VkIHdpdGggdGhlIGZvbGxvd2luZyBjb2RlIGV4YW1wbGU6CisKKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKKyAgICAgIGRpcmVjdGlvbiA9IEdTVF9SUEFEX0RJUkVDVElPTiAocGFkKTsKKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworCisqIFByb3BlcnR5IGxpZmV0aW1lCisKKyAgQWxsIHByb3BlcnRpZXMgcmVxdWlyaW5nIGEgbG9jayBjYW4gY2hhbmdlIGFmdGVyIHJlbGVhc2luZyB0aGUgYXNzb2NpYXRlZAorICBsb2NrLiBUaGlzIG1lYW5zIHRoYXQgYXMgbG9uZyBhcyB5b3UgaG9sZCB0aGUgbG9jaywgdGhlIHN0YXRlIG9mIHRoZQorICBvYmplY3QgcmVnYXJkaW5nIHRoZSBsb2NrZWQgcHJvcGVydGllcyBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGluZm9ybWF0aW9uCisgIG9idGFpbmVkLiBBcyBzb29uIGFzIHRoZSBsb2NrIGlzIHJlbGVhc2VkLCBhbnkgdmFsdWVzIGFjcXVpcmVkIGZyb20gdGhlCisgIHByb3BlcnRpZXMgbWlnaHQgbm90IGJlIHZhbGlkIGFueW1vcmUgYW5kIGNhbiBhcyBiZXN0IGJlIGRlc2NyaWJlZCBhcyBhCisgIHNuYXBzaG90IG9mIHRoZSBzdGF0ZSB3aGVuIHRoZSBsb2NrIHdhcyBoZWxkLgorCisgIFRoaXMgbWVhbnMgdGhhdCBhbGwgcHJvcGVydGllcyB0aGF0IHJlcXVpcmUgYWNjZXNzIGJleW9uZCB0aGUgc2NvcGUgb2YgdGhlCisgIGNyaXRpYWwgc2VjdGlvbiBzaG91bGQgYmUgY29waWVkIG9yIHJlZmNvdW50ZWQgYmVmb3JlIHJlbGVhc2luZyB0aGUgbG9jay4KKworICBNb3N0IG9iamVjdCBwcm92aWRlIGEgX2dldF88cHJvcGVydHk+KCkgbWV0aG9kIHRvIGdldCBhIGNvcHkgb3IgcmVmY291bnRlZAorICBpbnN0YW5jZSBvZiB0aGUgcHJvcGVydHkgdmFsdWUuIFRoZSBjYWxsZXIgc2hvdWxkIG5vdCB3b3J5IGFib3V0IGFueSBsb2NrcworICBidXQgc2hvdWxkIHVucmVmL2ZyZWUgdGhlIG9iamVjdCBhZnRlciB1c2FnZS4KKworICBFeGFtcGxlOgorCisgICAgdGhlIGZvbGxvd2luZyBleGFtcGxlIGNvcnJlY3RseSBnZXRzIHRoZSBwZWVyIHBhZCBvZiBhbiBlbGVtZW50LiBJdCBpcworICAgIHJlcXVpcmVkIHRvIGluY3JlYXNlIHRoZSByZWZjb3VudCBvZiB0aGUgcGVlciBwYWQgYmVjYXVzZSBhcyBzb29uIGFzIHRoZQorICAgIGxvY2sgaXMgcmVsZWFzZWQsIHRoZSBwZWVyIGNvdWxkIGJlIHVucmVmZmVkIGFuZCBkaXNwb3NlZCwgbWFraW5nIHRoZQorICAgIHBvaW50ZXIgb2J0YWluZWQgaW4gdGhlIGNyaXRpY2FsIHNlY3Rpb24gcG9pbnQgdG8gaW52YWxpZCBtZW1vcnkuCisKKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKKyAgICAgIHBlZXIgPSBHU1RfUlBBRF9QRUVSIChwYWQpOworICAgICAgaWYgKHBlZXIpCisgICAgICAgIGdzdF9vYmplY3RfcmVmIChHU1RfT0JKRUNUIChwZWVyKSk7CisgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKyAgICAgIC4uLiB1c2UgcGVlciAuLi4KKworICAgICAgaWYgKHBlZXIpCisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKHBlZXIpKTsKKworICAgIE5vdGUgdGhhdCBhZnRlciByZWxlYXNpbmcgdGhlIGxvY2sgdGhlIHBlZXIgbWlnaHQgbm90IGFjdHVhbGx5IGJlIHRoZSBwZWVyCisgICAgYW55bW9yZSBvZiB0aGUgcGFkLiBJZiB5b3UgbmVlZCB0byBiZSBzdXJlIGl0IGlzLCB5b3UgbmVlZCB0byBleHRlbmQgdGhlCisgICAgY3JpdGljYWwgc2VjdGlvbiB0byBpbmNsdWRlIHRoZSBvcGVyYXRpb25zIG9uIHRoZSBwZWVyLgorCisgICAgVGhlIGZvbGxvd2luZyBjb2RlIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGFib3ZlIGJ1dCB3aXRoIHVzaW5nIHRoZSBmdW5jdGlvbnMKKyAgICB0byBhY2Nlc3Mgb2JqZWN0IHByb3BlcnRpZXMuCisKKyAgICAgIHBlZXIgPSBnc3RfcGFkX2dldF9wZWVyIChwYWQpOworICAgICAgaWYgKHBlZXIpIHsKKyAgICAgICAgLi4uIHVzZSBwZWVyIC4uLgorCisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKHBlZXIpKTsKKyAgICAgIH0KKworICBFeGFtcGxlOgorCisgICAgQWNjZXNzaW5nIHRoZSBuYW1lIG9mIGFuIG9iamVjdCBtYWtlcyBhIGNvcHkgb2YgdGhlIG5hbWUuIFRoZSBjYWxsZXIgb2YgdGhlCisgICAgZnVuY3Rpb24gc2hvdWxkIGdfZnJlZSgpIHRoZSBuYW1lIGFmdGVyIHVzYWdlLgorCisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKG9iamVjdCkKKyAgICAgIG5hbWUgPSBnX3N0cmR1cCAoR1NUX09CSkVDVF9OQU1FIChvYmplY3QpKTsKKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChvYmplY3QpCisgICAgICAuLi4gdXNlIG5hbWUgLi4uCisKKyAgICAgIGdfZnJlZSAobmFtZSk7CisKKyAgICBvcjoKKworICAgICAgbmFtZSA9IGdzdF9vYmplY3RfZ2V0X25hbWUgKG9iamVjdCk7CisKKyAgICAgIC4uLiB1c2UgbmFtZSAuLi4KKworICAgICAgZ19mcmVlIChuYW1lKTsKKyAgICAKKworKiBBY2Nlc3NvciBtZXRob2RzCisKKyAgRm9yIGFwbGljYXRpb25zIGl0IGlzIGVuY291cmFnZWQgdG8gdXNlIHRoZSBwdWJsaWMgbWV0aG9kcyBvZiB0aGUgb2JqZWN0LiBNb3N0CisgIHVzZWZ1bCBvcGVyYXRpb25zIGNhbiBiZSBwZXJmb3JtZWQgd2l0aCB0aGUgbWV0aG9kcyBzbyBpdCBpcyBzZWxkb20gcmVxdWlyZWQKKyAgdG8gYWNjZXNzIHRoZSBwdWJsaWMgZmllbGRzIG1hbnVhbGx5LgorCisgIEFsbCBhY2Nlc3NvciBtZXRob2RzIHRoYXQgcmV0dXJuIGFuIG9iamVjdCBzaG91bGQgaW5jcmVhc2UgdGhlIHJlZmNvdW50IG9mIHRoZQorICByZXR1cm5lZCBvYmplY3QuIFRoZSBjYWxsZXIgc2hvdWxkIF91bnJlZigpIHRoZSBvYmplY3QgYWZ0ZXIgdXNhZ2UuIEVhY2gKKyAgbWV0aG9kIHNob3VsZCBzdGF0ZSB0aGlzIHJlZmNvdW50aW5nIHBvbGljeSBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworKiBBY2Nlc3NpbmcgbGlzdHMKKworICBJZiB0aGUgb2JqZWN0IHByb3BlcnR5IGlzIGEgbGlzdCwgY29uY3VycmVudCBsaXN0IGl0ZXJhdGlvbiBpcyBuZWVkZWQgdG8gZ2V0CisgIHRoZSBjb250ZW50cyBvZiB0aGUgbGlzdC4gR1N0cmVhbWVyIHVzZXMgdGhlIGNvb2tpZSBtZWNoYW5pc20gdG8gbWFyayB0aGUgbGFzdAorICB1cGRhdGUgb2YgYSBsaXN0LiBUaGUgbGlzdCBhbmQgdGhlIGNvb2tpZSBhcmUgcHJvdGVjdGVkIGJ5IHRoZSBzYW1lIGxvY2suIEVhY2gKKyAgdXBkYXRlIHRvIGEgbGlzdCByZXF1aXJlcyB0aGUgZm9sbG93aW5nIGFjdGlvbnM6CisKKyAgIC0gYWNxdWlyZSBsb2NrCisgICAtIHVwZGF0ZSBsaXN0CisgICAtIHVwZGF0ZSBjb29raWUKKyAgIC0gcmVsZWFzZSBsb2NrCisKKyAgVXBkYXRpbmcgdGhlIGNvb2tpZSBpcyB1c3VhbGx5IGRvbmUgYnkgaW5jcmVtZW50aW5nIGl0cyB2YWx1ZSBieSBvbmUuIFNpbmNlCisgIGNvb2tpZXMgdXNlIGd1aW50MzIgaXRzIHdyYXBhcm91bmQgaXMgZm9yIGFsbCBwcmFjdGljYWwgcmVhc29ucyBpcyBub3QgYQorICBwcm9ibGVtLgorCisgIEl0ZXJhdGluZyBhIGxpc3QgY2FuIHNhZmVseSBiZSBkb25lIGJ5IHN1cnJvdW5kaW5nIHRoZSBsaXN0IGl0ZXJhdGlvbiB3aXRoIGEKKyAgbG9jay91bmxvY2sgb2YgdGhlIGxvY2suCisKKyAgSW4gc29tZSBjYXNlcyBpdCBpcyBub3QgYSBnb29kIGlkZWEgdG8gaG9sZCB0aGUgbG9jayBmb3IgYSBsb25nIHRpbWUgd2hpbGUKKyAgaXRlcmF0aW5nIHRoZSBsaXN0LiBUaGUgc3RhdGUgY2hhbmdlIGNvZGUgZm9yIGEgYmluIGluIEdTdHJlYW1lciwgZm9yIGV4YW1wbGUsCisgIGhhcyB0byBpdGVyYXRlIG92ZXIgZWFjaCBlbGVtZW50IGFuZCBwZXJmb3JtIGEgYmxvY2tpbmcgY2FsbCBvbiBlYWNoIG9mIHRoZW0KKyAgcG90ZW50aWFsbHkgY2F1c2luZyBpbmZpbml0ZSBiaW4gbG9ja2luZy4gSW4gdGhpcyBjYXNlIHRoZSBjb29raWUgY2FuIGJlIHVzZWQgCisgIHRvIGl0ZXJhdGUgYSBsaXN0LgorCisgIEV4YW1wbGU6CisKKyAgICAgVGhlIGZvbGxvd2luZyBhbGdvcml0aG0gaXRlcmF0ZXMgYSBsaXN0IGFuZCByZXZlcnNlcyB0aGUgdXBkYXRlcyBpbiB0aGUKKyAgICAgY2FzZSBhIGNvbmN1cnJlbnQgdXBkYXRlIHdhcyBkb25lIHRvIHRoZSBsaXN0IHdoaWxlIGl0ZXJhdGluZy4gVGhlIGlkZWEgaXMKKyAgICAgdGhhdCB3aGVuZXZlciB3ZSByZWFjcXVpcmUgdGhlIGxvY2ssIHdlIGNoZWNrIGZvciB1cGRhdGVzIHRvIHRoZSBjb29raWUgdG8KKyAgICAgZGVjaWRlIGlmIHdlIGFyZSBzdGlsbCBpdGVyYXRpbmcgdGhlIHJpZ2h0IGxpc3QuCisKKyAgICAgR1NUX09CSkVDVF9MT0NLIChsb2NrKTsKKyAgICAgLyogZ3JhYiBsaXN0IGFuZCBjb29raWUgKi8KKyAgICAgY29va2llID0gb2JqZWN0LT5saXN0X2Nvb2tpZTsKKyAgICAgbGlzdCA9IG9iamVjdC1saXN0OworICAgICB3aGlsZSAobGlzdCkgeworICAgICAgIEdzdE9iamVjdCAqaXRlbSA9IEdTVF9PQkpFQ1QgKGxpc3QtPmRhdGEpOworICAgICAgIC8qIG5lZWQgdG8gcmVmIHRoZSBpdGVtIGJlZm9yZSByZWxlYXNpbmcgdGhlIGxvY2sgKi8KKyAgICAgICBnc3Rfb2JqZWN0X3JlZiAoaXRlbSk7CisgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGxvY2spOworCisgICAgICAgLi4uIHVzZS9jaGFuZ2UgaXRlbSBoZXJlLi4uCisKKyAgICAgICAvKiByZWxlYXNlIGl0ZW0gaGVyZSAqLworICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGl0ZW0pOworICAKKyAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGxvY2spOworICAgICAgIGlmIChjb29raWUgIT0gb2JqZWN0LT5saXN0X2Nvb2tpZSkgeworICAgICAgICAgLyogaGFuZGxlIHJvbGxiYWNrIGNhdXNlZCBieSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiAKKwkgICogb2YgdGhlIGxpc3QgaGVyZSAqLworCisJIC4uLnJvbGxiYWNrIGNoYW5nZXMgdG8gaXRlbXMuLi4KKworCSAvKiBncmFiIG5ldyBjb29raWUgYW5kIGxpc3QgKi8KKwkgY29va2llID0gb2JqZWN0LT5saXN0X2Nvb2tpZTsKKwkgbGlzdCA9IG9iamVjdC0+bGlzdDsKKyAgICAgICB9CisgICAgICAgZWxzZSB7CisgICAgICAgICBsaXN0ID0gZ19saXN0X25leHQgKGxpc3QpOworICAgICAgIH0KKyAgICAgfQorICAgICBHU1RfT0JKRUNUX1VOTE9DSyAobG9jayk7CisKKyogR3N0SXRlcmF0b3IKKworICBHc3RJdGVyYXRvciBwcm92aWRlcyBhbiBlYXNpZXIgd2F5IG9mIHJldHJpZXZpbmcgZWxlbWVudHMgaW4gYSBjb25jdXJyZW50CisgIGxpc3QuIFRoZSBmb2xsb3dpbmcgY29kZSBleGFtcGxlIGlzIGVxdWl2YWxlbnQgdG8gdGhlIHByZXZpb3VzIGV4YW1wbGUuCisgIAorICBFeGFtcGxlOgorICAgIAorICAgIGl0ID0gX2dldF9pdGVyYXRvcihvYmplY3QpOworICAgIHdoaWxlICghZG9uZSkgeworICAgICAgc3dpdGNoIChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZpdGVtKSkgeworICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9PSzoKKworICAgICAgICAgIC4uLiB1c2UvY2hhbmdlIGl0ZW0gaGVyZS4uLgorCisgICAgICAgICAgLyogcmVsZWFzZSBpdGVtIGhlcmUgKi8KKyAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChpdGVtKTsKKwkgIGJyZWFrOworICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6CisgICAgICAgICAgLyogaGFuZGxlIHJvbGxiYWNrIGNhdXNlZCBieSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiAKKwkgICAqIG9mIHRoZSBsaXN0IGhlcmUgKi8KKworCSAgLi4ucm9sbGJhY2sgY2hhbmdlcyB0byBpdGVtcy4uLgorCisJICAvKiByZXN5bmMgaXRlcmF0b3IgdG8gc3RhcnQgYWdhaW4gKi8KKwkgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0KTsKKwkgIGJyZWFrOworICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgorCSAgZG9uZSA9IFRSVUU7CisJICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKKwpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dCBiL2RvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNiOGYwYwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQKQEAgLTAsMCArMSw4NiBAQAorVE9ETyAtIEZ1dHVyZSBEZXZlbG9wbWVudAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBUEkvQUJJCit+fn5+fn5+CisKKy0gaW1wbGVtZW50IHJldHVybiB2YWx1ZXMgZnJvbSBldmVudHMgaW4gYWRkaXRpb24gdG8gdGhlIGdib29sZWFuLiBUaGlzIHNob3VsZAorICBiZSBkb25lIGJ5IG1ha2luZyB0aGUgZXZlbnQgY29udGFpbiBhIEdzdFN0cnVjdHVyZSB3aXRoIGlucHV0L291dHB1dCB2YWx1ZXMsCisgIHNpbWlsYXIgdG8gR3N0UXVlcnkuIEEgdHlwaWNhbCB1c2UgY2FzZSBpcyBwZXJmb3JtaW5nIGEgbm9uLWFjY3VyYXRlIHNlZWsgdG8gYQorICBrZXlmcmFtZSwgYWZ0ZXIgdGhlIHNlZWsgeW91IHdhbnQgdG8gZ2V0IHRoZSBuZXcgc3RyZWFtIHRpbWUgdGhhdCB3aWxsCisgIGFjdHVhbGx5IGJlIHVzZWQgdG8gdXBkYXRlIHRoZSBzbGlkZXIgYmFyLgorCistIG1ha2UgZ3N0X3BhZF9wdXNoX2V2ZW50KCkgcmV0dXJuIGEgR3N0Rmxvd1JldHVybgorCistIEdzdEV2ZW50LCBHc3RNZXNzYWdlIHJlZ2lzdGVyIGxpa2UgR3N0Rm9ybWF0IG9yIEdzdFF1ZXJ5LgorCistIHF1ZXJ5IFBPU0lUSU9OL0RVUkFUSU9OIHJldHVybiBhY2N1cmFjeS4gSnVzdCBhIGZsYWcgb3IgYWNjdXJhY3kgcGVyY2VudGFnZS4KKworLSB1c2UgfCBpbnN0ZWFkIG9mICsgYXMgZGl2aWRlciBpbiBzZXJpYWxpemF0aW9uIG9mIEZsYWdzCisgIChnc3R2YWx1ZS9nc3RzdHJ1Y3R1cmUpCisKKy0gcmV0aGluayBob3cgd2UgaGFuZGxlIGR5bmFtaWMgcmVwbHVnZ2luZyB3cnQgc2VnbWVudHMgYW5kIG90aGVyIGV2ZW50cyB0aGF0CisgIGFscmVhZHkgZ290IHB1c2hlZCBhbmQgbmVlZCB0byBiZSBwdXNoZWQgYWdhaW4uIE1pZ2h0IG5lZWQgR3N0Rmxvd1JldHVybiBmcm9tCisgIGdzdF9wYWRfcHVzaF9ldmVudCgpLiBGSVhFRCBpbiAwLjExIHdpdGggc3RpY2t5IGV2ZW50cy4KKworLSBPcHRpbWl6ZSBuZWdvdGlhdGlvbi4gV2UgY3VycmVudGx5IGRvIGEgZ2V0X2NhcHMoKSBjYWxsIHdoZW4gd2UgbGluayBwYWRzLAorICB3aGljaCBjb3VsZCBwb3RlbnRpYWxseSBnZW5lcmF0ZSBhIGh1Z2UgbGlzdCBvZiBjYXBzIGFuZCBhbGwgdGhlaXIKKyAgY29tYmluYXRpb25zLCB3ZSBuZWVkIHRvIGF2b2lkIGdlbmVyYXRpbmcgdGhlc2UgaHVnZSBsaXN0cyBieSBnZW5lcmF0aW5nIHRoZW0KKyAgV2UgYWxzbyBuZWVkIHRvIGluY3JlbWVudGFsbHkgcmV0dXJuIGludGVyc2VjdGlvbnMgZXRjLCBmb3IgdGhpcy4gc29tZXdoYXQKKyAgaW5jcmVtZW50YWxseSB3aGVuIG5lZWRlZC4gV2UgY2FuIGRvIHRoaXMgd2l0aCBhIGdzdF9wYWRfaXRlcmF0ZV9jYXBzKCkgY2FsbC4KKyAgV2UgYWxzbyBuZWVkIHRvIGluY3JlbWVudGFsbHkgcmV0dXJuIGludGVyc2VjdGlvbnMgZXRjLCBmb3IgdGhpcy4KKyAgRklYRUQgaW4gMC4xMSB3aXRoIGEgZmlsdGVyIG9uIGdldGNhcHMgZnVuY3Rpb25zLgorCistIEVsZW1lbnRzIGluIGEgYmluIGhhdmUgbm8gY2x1ZSBhYm91dCB0aGUgZmluYWwgc3RhdGUgb2YgdGhlIHBhcmVudCBlbGVtZW50CisgIHNpbmNlIHRoZSBiaW4gc2V0cyB0aGUgdGFyZ2V0IHN0YXRlIG9uIGl0cyBjaGlsZHJlbiBpbiBzbWFsbCBzdGVwcy4gVGhpcworICBjYXVzZXMgcHJvYmxlbXMgZm9yIGVsZW1lbnRzIHRoYXQgbGlrZSB0byBrbm93IHRoZSBmaW5hbCBzdGF0ZSAocnRzcHNyYyBnb2luZworICB0byBQQVVTRUQgb3IgUkVBRFkgaXMgZGlmZmVyZW50IGluIHRoYXQgd2UgY2FuIGF2b2lkIHNlbmRpbmcgdGhlIHVzZWxlc3MKKyAgUEFVU0VEIHJlcXVlc3QpLgorCistIE1ha2Ugc2VyaWFsaXNhdGlvbiBvZiBzdHJ1Y3R1cmVzIG1vcmUgY29uc2lzdGVudCwgcmVhZGFibGUgYW5kIG5pY2VyIGNvZGUtd2lzZS4KKworLSBwYWQgYmxvY2sgaGFzIHNldmVyYWwgaXNzdWVzOiAKKyAgKiBjYW4ndCBibG9jayBvbiBzZWxlY3RlZCB0aGluZ3MsIGxpa2UgcHVzaCwgcHVsbCwgcGFkX2FsbG9jLCBldmVudHMsIC4uLgorICAqIGNhbid0IGNoZWNrIHdoeSB0aGUgYmxvY2sgaGFwcGVuZWQuIFdlIHNob3VsZCBhbHNvIGJlIGFibGUgdG8gZ2V0IHRoZSBpdGVtLworICAgIHJlYXNvbiB0aGF0IGJsb2NrZWQgdGhlIHBhZC4gCisgICogaXQgb25seSBibG9ja3Mgb24gZGF0YXBhc3NpbmcuIFdoZW4gRU9TLCB0aGUgYmxvY2sgbmV2ZXIgaGFwcGVucyBidXQgaWRlYWxseQorICAgIHNob3VsZCBiZWNhdXNlIHBhZCBibG9jayBzaG91bGQgaW5mb3JtIHRoZSBhcHAgd2hlbiB0aGVyZSBpcyBubyBkYXRhZmxvdy4KKyAgKiB0aGUgc2FtZSBnb2VzIGZvciBzZWdtZW50IHNlZWtzIHRoYXQgZG9uJ3QgcHVzaCBpbi1iYW5kIEVPUyBldmVudHMuIE1heWJlCisgICAgc2VnbWVudCBzZWVrcyBzaG91bGQgYWxzbyBzZW5kIGFuIEVPUyBldmVudCB3aGVuIHRoZXkncmUgZG9uZS4KKyAgKiBibG9ja2luZyBzaG91bGQgb25seSBoYXBwZW4gZnJvbSBvbmUgdGhyZWFkLiBJZiBvbmUgdGhyZWFkIGRvZXMgcGFkX2FsbG9jCisgICAgYW5kIGFub3RoZXIgYSBwdXNoLCB0aGUgcHVzaCBtaWdodCBiZSBidXN5IHdoaWxlIHRoZSBibG9jayBjYWxsYmFjayBpcyBkb25lLgorICAqIG1heWJlIHRoaXMgbmFtZSBpcyBvdmVybG9hZGVkLiBXZSBuZWVkIHRvIGxvb2sgYXQgc29tZSBtb3JlIHVzZSBjYXNlcyBiZWZvcmUKKyAgICB0cnlpbmcgdG8gZml4IHRoaXMuCisgIEZJWEVEIGluIDAuMTEgd2l0aCBCTE9DS0lORyBwcm9iZXMuIE5vdCBldmVyeXRoaW5nIGlzIGltcGxlbWVudGVkIHlldCwgdGhvdWdoLgorCistIHJldGhpbmsgdGhlIHdheSB3ZSBkbyB1cHN0cmVhbSByZW5lZ290aWF0aW9uLiBDdXJyZW50bHkgaXQncyBkb25lIHdpdGgKKyAgcGFkX2FsbG9jIGJ1dCB0aGlzIGhhcyBtYW55IGlzc3VlcyBzdWNoIGFzIG9ubHkgYmVpbmcgYWJsZSB0byBzdWdnZXN0IDEgZm9ybWF0CisgIGFuZCB0aGUgbmVlZCB0byBhbGxvY2F0ZSBhIGJ1ZmZlciBvZiB0aGlzIHN1Z2dlc3RlZCBmb3JtYXQgKHNvbWUgZWxlbWVudHMgc3VjaAorICBhcyBjYXBzZmlsdGVyIG9ubHkga25vdyBhYm91dCB0aGUgZm9ybWF0LCBub3QgdGhlIHNpemUpLiBXZSB3b3VsZCBpZGVhbGx5IGxpa2UKKyAgdG8gbGV0IHVwc3RyZWFtIHJlbmVnb3RpYXRlIGEgbmV3IGZvcm1hdCBqdXN0IGxpa2UgaXQgZGlkIHdoZW4gaXQgc3RhcnRlZC4KKyAgVGhpcyBjb3VsZCwgZm9yIGV4YW1wbGUsIGVhc2lseSBiZSB0cmlnZ2VyZWQgd2l0aCBhIFJFTkVHT1RJQVRFIGV2ZW50LgorICBGSVhFRCBpbiAwLjExIHdpdGggUkVDT05GSUdVUkUgZXZlbnRzLgorCistIFJlbW92ZSB0aGUgcmVzdWx0IGZvcm1hdCB2YWx1ZSBpbiBxdWVyaWVzLgorCistIFRyeSB0byBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIGFjY2VwdGNhcHMgY2FsbHMgd2hlbiBwdXNoaW5nIGJ1ZmZlcnMgYXJvdW5kLgorICBUaGUgZWxlbWVudCBwdXNoaW5nIHRoZSBidWZmZXIgdXN1YWxseSBuZWdvdGlhdGVkIGFscmVhZHkgYW5kIGRlY2lkZWQgb24gdGhlCisgIGZvcm1hdC4KKyAgVGhlIGVsZW1lbnQgcmVjZWl2aW5nIHRoZSBidWZmZXIgdXN1YWxseSBoYXMgdG8gYWNjZXB0IHRoZSBjYXBzIGFueXdheS4KKworCitJTVBMRU1FTlRBVElPTgorfn5+fn5+fn5+fn5+fn4KKworLSBpbXBsZW1lbnQgbW9yZSBRT1MsIHNlZSBwYXJ0LXFvcy50eHQuCisKKy0gaW1wbGVtZW50IEJVRkZFUlNJWkUuCisKKworREVTSUdOCit+fn5+fn4KKworLSB1bmxpbmtpbmcgcGFkcyBpbiB0aGUgUEFVU0VEIHN0YXRlIG5lZWRzIHRvIG1ha2Ugc3VyZSB0aGUgc3RyZWFtIHRocmVhZCBpcyBub3QKKyAgZXhlY3V0aW5nIGNvZGUuIENhbiB0aGlzIGJlIGRvbmUgd2l0aCBhIGZsdXNoIHRvIHVubG9jayBhbGwgZG93bnN0cmVhbSBjaGFpbgorICBmdW5jdGlvbnM/IERvIHdlIGRvIHRoaXMgYXV0b21hdGljYWxseSBvciBsZXQgdGhlIGFwcCBoYW5kbGUgdGhpcz8KKwpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1hY3RpdmF0aW9uLnR4dCBiL2RvY3MvZGVzaWduL3BhcnQtYWN0aXZhdGlvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdmMDMzYQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZGVzaWduL3BhcnQtYWN0aXZhdGlvbi50eHQKQEAgLTAsMCArMSw5MiBAQAorUGFkIChkZSlhY3RpdmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0KKworQWN0aXZhdGlvbgorfn5+fn5+fn5+fgorCitXaGVuIGNoYW5naW5nIHN0YXRlcywgYSBiaW4gd2lsbCBzZXQgdGhlIHN0YXRlIG9uIGFsbCBvZiBpdHMgY2hpbGRyZW4gaW4KK3NpbmstdG8tc291cmNlIG9yZGVyLiBBcyBlbGVtZW50cyB1bmRlcmdvIHRoZSBSRUFEWS0+UEFVU0VEIHRyYW5zaXRpb24sCit0aGVpciBwYWRzIGFyZSBhY3RpdmF0ZWQgc28gYXMgdG8gcHJlcGFyZSBmb3IgZGF0YSBmbG93LiBTb21lIHBhZHMgd2lsbAorc3RhcnQgdGFza3MgdG8gZHJpdmUgdGhlIGRhdGEgZmxvdy4KKworQW4gZWxlbWVudCBhY3RpdmF0ZXMgaXRzIHBhZHMgZnJvbSBzb3VyY2VwYWRzIHRvIHNpbmtwYWRzLiBUaGlzIHRvIG1ha2UKK3N1cmUgdGhhdCB3aGVuIHRoZSBzaW5rcGFkcyBhcmUgYWN0aXZhdGVkIGFuZCByZWFkeSB0byBhY2NlcHQgZGF0YSwgdGhlCitzb3VyY2VwYWRzIGFyZSBhbHJlYWR5IGFjdGl2ZSB0byBwYXNzIHRoZSBkYXRhIGRvd25zdHJlYW0uCisKK1BhZHMgY2FuIGJlIGFjdGl2YXRlZCBpbiBvbmUgb2YgdHdvIG1vZGVzLCBQVVNIIGFuZCBQVUxMLiBQVVNIIHBhZHMgYXJlCit0aGUgbm9ybWFsIGNhc2UsIHdoZXJlIHRoZSBzb3VyY2UgcGFkIGluIGEgbGluayBzZW5kcyBkYXRhIHRvIHRoZSBzaW5rCitwYWQgdmlhIGdzdF9wYWRfcHVzaCgpLiBQVUxMIHBhZHMgaW5zdGVhZCBoYXZlIHNpbmsgcGFkcyByZXF1ZXN0IGRhdGEKK2Zyb20gdGhlIHNvdXJjZSBwYWRzIHZpYSBnc3RfcGFkX3B1bGxfcmFuZ2UoKS4KKworVG8gYWN0aXZhdGUgYSBwYWQsIHRoZSBjb3JlIHdpbGwgY2FsbCBnc3RfcGFkX3NldF9hY3RpdmUoKSB3aXRoIGEgVFJVRQorYXJndW1lbnQsIGluZGljYXRpbmcgdGhhdCB0aGUgcGFkIHNob3VsZCBiZSBhY3RpdmUuIElmIHRoZSBwYWQgaXMKK2FscmVhZHkgYWN0aXZlLCBiZSBpdCBpbiBhIFBVU0ggb3IgUFVMTCBtb2RlLCBnc3RfcGFkX3NldF9hY3RpdmUoKSB3aWxsCityZXR1cm4gd2l0aG91dCBkb2luZyBhbnl0aGluZy4gT3RoZXJ3aXNlIGl0IHdpbGwgY2FsbCB0aGUgYWN0aXZhdGlvbgorZnVuY3Rpb24gb2YgdGhlIHBhZC4KKworQmVjYXVzZSB0aGUgY29yZSBkb2VzIG5vdCBrbm93IGluIHdoaWNoIG1vZGUgdG8gYWN0aXZhdGUgYSBwYWQgKFBVU0ggb3IKK1BVTEwpLCBpdCBkZWxlZ2F0ZXMgdGhhdCBjaG9pY2UgdG8gYSBtZXRob2Qgb24gdGhlIHBhZCwgYWN0aXZhdGUoKS4gVGhlCithY3RpdmF0ZSgpIGZ1bmN0aW9uIG9mIGEgcGFkIHNob3VsZCBjaG9vc2Ugd2hldGhlciB0byBvcGVyYXRlIGluIFBVU0ggb3IKK1BVTEwgbW9kZS4gT25jZSB0aGUgY2hvaWNlIGlzIG1hZGUsIGl0IHNob3VsZCBjYWxsIG9uZSBvZiB0aGUgdHdvCittb2RlLXNwZWNpZmljIGFjdGl2YXRpb24gZnVuY3Rpb25zLCBhY3RpdmF0ZV9wdXNoKCkgb3IgYWN0aXZhdGVfcHVsbCgpLgorVGhlIGRlZmF1bHQgYWN0aXZhdGUoKSBmdW5jdGlvbiB3aWxsIGNhbGwgYWN0aXZhdGVfcHVzaCgpLCBhcyBpdCBpcyB0aGUKK2RlZmF1bHQgbWVjaGFuaXNtIGZvciBkYXRhIGZsb3cuIEEgc2luayBwYWQgdGhhdCBzdXBwb3J0cyBlaXRoZXIgbW9kZSBvZgorb3BlcmF0aW9uIG1pZ2h0IGNhbGwgYWN0aXZhdGVfcHVsbCgpIGlmIGNhbGxpbmcgY2hlY2tfZ2V0X3JhbmdlKCkKK3JldHVybnMgVFJVRSwgYW5kIGFjdGl2YXRlX3B1c2goKSBvdGhlcndpc2UuCisKK0NvbnNpZGVyIHRoZSBjYXNlIGZha2VzcmMgISBmYWtlc2luaywgd2hlcmUgZmFrZXNpbmsgaXMgY29uZmlndXJlZCB0bworb3BlcmF0ZSBpbiBQVUxMIG1vZGUuIFN0YXRlIGNoYW5nZXMgaW4gdGhlIHBpcGVsaW5lIHdpbGwgc3RhcnQgd2l0aAorZmFrZXNpbmssIHdoaWNoIGlzIHRoZSBtb3N0IGRvd25zdHJlYW0gZWxlbWVudC4gVGhlIGNvcmUgd2lsbCBjYWxsCithY3RpdmF0ZSgpIG9uIGZha2VzaW5rJ3Mgc2luayBwYWQuIEZvciBmYWtlc2luayB0byBnbyBpbnRvIFBVTEwgbW9kZSwgaXQKK25lZWRzIHRvIGltcGxlbWVudCBhIGN1c3RvbSBhY3RpdmF0ZSgpIGZ1bmN0aW9uIHRoYXQgd2lsbCBjYWxsCithY3RpdmF0ZV9wdWxsKCkgb24gaXRzIHNpbmsgcGFkIChiZWNhdXNlIHRoZSBkZWZhdWx0IGlzIHRvIHVzZSBQVVNICittb2RlKS4gYWN0aXZhdGVfcHVsbCgpIGlzIHRoZW4gcmVzcG9uc2libGUgZm9yIHN0YXJ0aW5nIHRoZSB0YXNrIHRoYXQKK3B1bGxzIGZyb20gZmFrZXNyYzpzcmMuIENsZWFybHksIGZha2VzcmMgbmVlZHMgdG8gYmUgbm90aWZpZWQgdGhhdAorZmFrZXNyYyBpcyBhYm91dCB0byBwdWxsIG9uIGl0cyBzcmMgcGFkLCBldmVuIHRob3VnaCB0aGUgcGlwZWxpbmUgaGFzCitub3QgeWV0IGNoYW5nZWQgZmFrZXNyYydzIHN0YXRlLiBGb3IgdGhpcyByZWFzb24sIGFjdGl2YXRlX3B1bGwoKSBtdXN0CitmaXJzdCBjYWxsIGFjdGl2YXRlX3B1bGwoKSBvbiBmYWtlc2luazpzaW5rJ3MgcGVlciBiZWZvcmUgc3RhcnRpbmcKK2Zha2VzaW5rJ3MgdGFzay4KKworSW4gc2hvcnQsIHVwc3RyZWFtIGVsZW1lbnRzIG9wZXJhdGluZyBpbiBQVUxMIG1vZGUgbXVzdCBiZSByZWFkeSB0bworcHJvZHVjZSBkYXRhIGluIFJFQURZLCBhZnRlciBoYXZpbmcgYWN0aXZhdGVfcHVsbCgpIGNhbGxlZCBvbiB0aGVpcgorc291cmNlIHBhZC4gQWxzbywgYSBjYWxsIHRvIGFjdGl2YXRlX3B1bGwoKSBuZWVkcyB0byBwcm9wYWdhdGUgdGhyb3VnaAordGhlIHBpcGVsaW5lIHRvIGV2ZXJ5IHBhZCB0aGF0IGEgZ3N0X3BhZF9wdWxsKCkgd2lsbCByZWFjaC4gSW4gdGhlIGNhc2UKK2Zha2VzcmMgISBpZGVudGl0eSAhIGZha2VzaW5rLCBjYWxsaW5nIGFjdGl2YXRlX3B1bGwoKSBvbiBpZGVudGl0eSdzCitzb3VyY2UgcGFkIHdvdWxkIG5lZWQgdG8gYWN0aXZhdGUgaXRzIHNpbmsgcGFkIGluIHB1bGwgbW9kZSBhcyB3ZWxsLAord2hpY2ggc2hvdWxkIHByb3BhZ2F0ZSBhbGwgdGhlIHdheSB0byBmYWtlc3JjLgorCitJZiwgb24gdGhlIG90aGVyIGhhbmQsIGZha2VzcmMgISBmYWtlc2luayBpcyBvcGVyYXRpbmcgaW4gUFVTSCBtb2RlLCB0aGUKK2FjdGl2YXRpb24gc2VxdWVuY2UgaXMgZGlmZmVyZW50LiBGaXJzdCwgYWN0aXZhdGUoKSBvbiBmYWtlc2luazpzaW5rCitjYWxscyBhY3RpdmF0ZV9wdXNoKCkgb24gZmFrZXNpbms6c2luay4gVGhlbiBmYWtlc3JjJ3MgcGFkcyBhcmUKK2FjdGl2YXRlZDogc291cmNlcyBmaXJzdCwgdGhlbiBzaW5rcyAob2Ygd2hpY2ggZmFrZXNyYyBoYXMgbm9uZSkuCitmYWtlc3JjOnNyYydzIGFjdGl2YXRpb24gZnVuY3Rpb24gaXMgdGhlbiBjYWxsZWQuCisKK05vdGUgdGhhdCBpdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIHNldCBhbiBhY3RpdmF0aW9uIGZ1bmN0aW9uIG9uIGEKK3NvdXJjZSBwYWQuIFRoZSBwZWVyIG9mIGEgc291cmNlIHBhZCBpcyBkb3duc3RyZWFtLCBtZWFuaW5nIGl0IHNob3VsZAoraGF2ZSBiZWVuIGFjdGl2YXRlZCBmaXJzdC4gSWYgaXQgd2FzIGFjdGl2YXRlZCBpbiBQVUxMIG1vZGUsIHRoZQorc291cmNlIHBhZCBzaG91bGQgaGF2ZSBhbHJlYWR5IGhhZCBhY3RpdmF0ZV9wdWxsKCkgY2FsbGVkIG9uIGl0LCBhbmQKK3RodXMgbmVlZHMgbm8gZnVydGhlciBhY3RpdmF0aW9uLiBPdGhlcndpc2UgaXQgc2hvdWxkIGJlIGluIFBVU0ggbW9kZSwKK3doaWNoIGlzIHRoZSBjaG9pY2Ugb2YgdGhlIGRlZmF1bHQgYWN0aXZhdGlvbiBmdW5jdGlvbi4KKworU28sIGluIHRoZSBQVVNIIGNhc2UsIHRoZSBkZWZhdWx0IGFjdGl2YXRpb24gZnVuY3Rpb24gY2hvb3NlcyBQVVNIIG1vZGUsCit3aGljaCBjYWxscyBhY3RpdmF0ZV9wdXNoKCksIHdoaWNoIHdpbGwgdGhlbiBzdGFydCBhIHRhc2sgb24gdGhlIHNvdXJjZQorcGFkIGFuZCBiZWdpbiBwdXNoaW5nLiBJbiB0aGlzIHdheSBQVVNIIHNjaGVkdWxpbmcgaXMgYSBiaXQgZWFzaWVyLAorYmVjYXVzZSBpdCBmb2xsb3dzIHRoZSBvcmRlciBvZiBzdGF0ZSBjaGFuZ2VzIGluIGEgcGlwZWxpbmUuIGZha2VzaW5rIGlzCithbHJlYWR5IGluIFBBVVNFRCB3aXRoIGFuIGFjdGl2ZSBzaW5rIHBhZCBieSB0aGUgdGltZSBmYWtlc3JjIHN0YXJ0cworcHVzaGluZyBkYXRhLgorCitEZWFjdGl2YXRpb24KK35+fn5+fn5+fn5+fgorCitQYWQgZGVhY3RpdmF0aW9uIG9jY3VycyB3aGVuIGl0cyBwYXJlbnQgZ29lcyBpbnRvIHRoZSBSRUFEWSBzdGF0ZSBvciB3aGVuIHRoZSAKK3BhZCBpcyBkZWFjdGl2YXRlZCBleHBsaWNpdGx5IGJ5IHRoZSBhcHBsaWNhdGlvbiBvciBlbGVtZW50LiAKK2dzdF9wYWRfc2V0X2FjdGl2ZSgpIGlzIGNhbGxlZCB3aXRoIGEgRkFMU0UgYXJndW1lbnQsIHdoaWNoIHRoZW4gY2FsbHMKK2FjdGl2YXRlX3B1c2goKSBvciBhY3RpdmF0ZV9wdWxsKCkgd2l0aCBhIEZBTFNFIGFyZ3VtZW50LCBkZXBlbmRpbmcgb24gdGhlCithY3RpdmF0aW9uIG1vZGUgb2YgdGhlIHBhZC4KKworTW9kZSBzd2l0Y2hpbmcKK35+fn5+fn5+fn5+fn5+CisKK0NoYW5naW5nIGZyb20gcHVzaCB0byBwdWxsIG1vZGVzIG5lZWRzIGEgYml0IG9mIHRob3VnaHQuIFRoaXMgaXMgYWN0dWFsbHkKK3Bvc3NpYmxlIGFuZCBpbXBsZW1lbnRlZCBidXQgbm90IHlldCBkb2N1bWVudGVkIGhlcmUuCisKZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtYmxvY2sudHh0IGIvZG9jcy9kZXNpZ24vcGFydC1ibG9jay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVhZWRiZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZGVzaWduL3BhcnQtYmxvY2sudHh0CkBAIC0wLDAgKzEsMTU5IEBACitQYWQgYmxvY2sKKy0tLS0tLS0tLQorCitUaGUgcHVycG9zZSBvZiBibG9ja2luZyBhIHBhZCBpcyB0byBiZSBub3RpZmllZCBvZiBkb3duc3RyZWFtIGRhdGFmbG93CithbmQgZXZlbnRzLiBUaGUgbm90aWZpY2F0aW9uIGNhbiBiZSB1c2VkIGZvcgorCisgLSAoUmUpY29ubmVjdGluZy9kaXNjb25uZWN0aW5nIHRoZSBwYWQuCisgLSBwZXJmb3JtaW5nIGEgc2VlayAKKyAtIGluc3BlY3RpbmcgdGhlIGRhdGEvZXZlbnRzIG9uIHRoZSBwYWQKKworVGhlIHBhZCBibG9jayBpcyBwZXJmb3JtZWQgb24gYSBzb3VyY2UgcGFkIChwdXNoIGJhc2VkKSBvciBzaW5rIHBhZCAocHVsbCBiYXNlZCkKK2FuZCB3aWxsIHN1Y2NlZWQgd2hlbiB0aGUgZm9sbG93aW5nIGV2ZW50cyBoYXBwZW4gb24gdGhlIHBhZDoKKworIC0gZ3N0X3BhZF9wdXNoKCkKKyAtIGdzdF9wYWRfYWxsb2NfYnVmZmVyKCkKKyAtIGdzdF9wYWRfcHVzaF9ldmVudCgpIGV4Y2VwdCBmb3IgRkxVU0hfU1RBUlQgYW5kIEZMVVNIX1NUT1AgZXZlbnRzLgorIC0gZ3N0X3BhZF9wdWxsX3JhbmdlICgpIChvbiBhIHNpbmtwYWQpCisKKworRmx1c2hpbmcKK35+fn5+fn5+CisKK1RoZSBmbHVzaGluZyBldmVudCBpcyB1c2VkIHRvIGNsZWFyIGFueSBkYXRhIG91dCBvZiB0aGUKK2Rvd25zdHJlYW0gZWxlbWVudHMuCisKK0dlbmVyaWMgY2FzZQorXl5eXl5eXl5eXl5eCisKK0NvbnNpZGVyIHRoZSBmb2xsb3dpbmcgcGlwZWxpbmU6IAorCisgLi0tLS0tLiAgICAgIC4tLS0tLS0tLiAgICAgIC4tLS0tLS0tLgorIHwgc3JjIHwgICAgICB8IGVsZW0xIHxcLyAgICB8IGVsZW0yIHwKKyB8ICAgIHNyYyAtPiBzaW5rICAgIHNyYyAtPiBzaW5rICAgIHNyYyAuLi4uCisgJy0tLS0tJyAgICAgICctLS0tLS0tJy9cICAgICctLS0tLS0tJyAgICAgICAgICAgICAgCisKK1doZXJlIGVsZW0xLnNyYyBpcyBibG9ja2VkLiBJZiB0aGUgcGFkIGJsb2NrIGlzIHRha2VuICh0aGUgY2FsbGJhY2sKK2lzIGNhbGxlZCBvciB0aGUgc3luYyBibG9jayByZXR1cm5lZCkgbm8gZGF0YSBpcyBmbG93aW5nIGluIGVsZW0yLnNpbmsuCitJbiB0aGlzIHNpdHVhdGlvbiwgdGhlIHN0cmVhbWluZyB0aHJlYWQgaXMgYmxvY2tlZCBvbiBhIEdDb25kIGFuZCBpcword2FpdGluZyB0byBiZSB1bmJsb2NrZWQuCisKK1doZW4gc2VuZGluZyBhIGZsdXNoaW5nIHNlZWsgdXBzdHJlYW0gb24gZWxlbTEuc3JjLCB0aGUgRkxVU0hfU1RBUlQgZXZlbnQKK3dpbGwgdGVtcG9yYXJ5IHVuYmxvY2sgdGhlIHN0cmVhbWluZyB0aHJlYWQgYW5kIG1ha2UgYWxsIHBhZCBmdW5jdGlvbnMgdGhhdAordHJpZ2dlcnMgYSBibG9jayAoX3B1c2gvX2FsbG9jX2J1ZmZlci9fcHVzaF9ldmVudC9fcHVsbF9yYW5nZSkgcmV0dXJuCitHU1RfRkxPV19XUk9OR19TVEFURS4gVGhpcyB3aWxsIHRoZW4gZXZlbnR1YWxseSBwYXVzZSB0aGUgc3RyZWFtaW5nIHRocmVhZAorYW5kIHJlbGVhc2UgdGhlIFNUUkVBTV9MT0NLLiAKKworU2luY2Ugbm8gU1RSRUFNIGxvY2sgaXMgdGFrZW4gYWZ0ZXIgdGhlIHBhZCBibG9jayBpdCBpcyBub3QgbmVlZGVkIHRvIHNlbmQKK3RoZSBGTFVTSF9TVEFSVCBldmVudCBmdXJ0aGVyIGRvd25zdHJlYW0uCisKK1RoZSBGTFVTSF9TVE9QIHdpbGwgc2V0IHRoZSBzcmNwYWQgdG8gbm9uLWZsdXNoaW5nIGFnYWluIGFuZCBpcyBkcm9wcGVkIAorZm9yIHRoZSBzYW1lIHJlYXNvbi4gRnJvbSB0aGVuIG9uLCB0aGUgbmV3IGRhdGEgYWZ0ZXIgdGhlIGZsdXNoaW5nIHNlZWsgCit3aWxsIGJlIHF1ZXVlZCB3aGVuIHRoZSBwYWQgYmxvY2sgaXMgdGFrZW4gYWdhaW4uCisKK0Nhc2Ugd2hlcmUgdGhlIHN0cmVhbSBpcyBibG9ja2luZyBkb3duc3RyZWFtCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitUaGUgZXhhbXBsZSBhYm92ZSBpcyBvbmx5IHZhbGlkIGlmIHRoZSBlbGVtMS5zcmMgcGFkIGlzIHJlYWxseSBibG9ja2luZworKGNhbGxiYWNrIGNhbGxlZCBvciBzeW5jIGJsb2NrIHJldHVybmVkKS4KKworSW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHN0cmVhbSBpcyBibG9ja2luZyBmdXJ0aGVyIGRvd25zdHJlYW0gKG9uIGVsZW0yLnNyYworZm9yIGV4YW1wbGUsIG9yIG9uIGEgYmxvY2tpbmcgcXVldWUpLCBleHRyYSBjYXJlIGhhcyB0byBiZSB0YWtlbi4KKworQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBwaXBlbGluZToKKworIC4tLS0tLS4gICAgICAuLS0tLS0tLS4gICAgICAuLS0tLS0tLS4KKyB8IHNyYyB8ICAgICAgfCBlbGVtMSB8XC8gICAgfCBlbGVtMiB8CisgfCAgICBzcmMgLT4gc2luayAgICBzcmMgLT4gc2luayAgICBzcmMgLi4uLiBCbG9ja2luZyBzb21ld2hlcmUgZG93bnN0cmVhbQorICctLS0tLScgICAgICAnLS0tLS0tLScvXCAgICAnLS0tLS0tLScgICAgICAgICAgICAgIAorCitBIHBhZCBibG9jayBoYXMgYmVlbiByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIgb24gZWxlbTEuc3JjICwgYnV0IHNpbmNlIHRoZSBzdHJlYW0KK2lzIGJsb2NraW5nIHNvbWV3aGVyZSBkb3duc3RyZWFtLCB0aGUgY2FsbGJhY2sgaXMgbm90IGNhbGxlZCBvciB0aGUgc3luYyBibG9jaworZG9lcyBub3QgcmV0dXJuLgorCitJbiBvcmRlciBmb3IgdGhlIGJsb2NrIHRvIGhhcHBlbiwgYSBGTFVTSF9TVEFSVCBuZWVkcyB0byBiZSBzZW50IGRpcmVjdGx5IG9uCit0aGUgZG93bnN0cmVhbSBibG9ja2luZyBlbGVtZW50L3BhZCBzbyB0aGF0IGl0IHJlbGVhc2VzIHRoZSBzdHJlYW0gbG9jaywgYW5kIGl0CitnaXZlcyBhIGNoYW5jZSBmb3IgdGhlIGVsZW0xLnNyYyBwYWQgdG8gYmxvY2suCisKKworVXNlIGNhc2VzCit+fn5+fn5+fn4KKworUHJlcm9sbGluZyBhIHBhcnRpYWwgcGlwZWxpbmUKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKKyAuLS0tLS0tLS0tLiAgICAgIC4tLS0tLS0tLS0uICAgICAgICAgICAgICAgIC4tLS0tLS0tLS0tLgorIHwgZmlsZXNyYyB8ICAgICAgfCBkZW11eGVyIHwgICAgIC4tLS0tLS4gICAgfCBkZWNvZGVyMSB8CisgfCAgICAgICAgc3JjIC0+IHNpbmsgICAgICBzcmMxIC0+fHF1ZXVlfC0+IHNpbmsgICAgICAgc3JjIAorICctLS0tLS0tLS0nICAgICAgfCAgICAgICAgIHwgICAgICctLS0tLScgICAgJy0tLS0tLS0tLS0nIFgKKyAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgIC4tLS0tLS0tLS0tLgorICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgICAgIC4tLS0tLS4gICAgfCBkZWNvZGVyMiB8CisgICAgICAgICAgICAgICAgICB8ICAgICAgICBzcmMyIC0+fHF1ZXVlfC0+IHNpbmsgICAgICAgc3JjCisgICAgICAgICAgICAgICAgICAnLS0tLS0tLS0tJyAgICAgJy0tLS0tJyAgICAnLS0tLS0tLS0tLScgWAorCisKK1RoZSBwdXJwb3NlIGlzIHRvIGNyZWF0ZSB0aGUgcGlwZWxpbmUgZHluYW1pY2FsbHkgdXAgdG8gdGhlCitkZWNvZGVycyBidXQgbm90IHlldCBjb25uZWN0IHRoZW0gdG8gYSBzaW5rIGFuZCB3aXRob3V0IGxvc2luZworYW55IGRhdGEuCisKK1RvIGRvIHRoaXMsIHRoZSBzb3VyY2UgcGFkcyBvZiB0aGUgZGVjb2RlcnMgaXMgYmxvY2tlZCBzbyB0aGF0IG5vCitldmVudHMgb3IgYnVmZmVycyBjYW4gZXNjYXBlIGFuZCB3ZSBkb24ndCBpbnRlcnJ1cHQgdGhlIHN0cmVhbS4KKworV2hlbiBhbGwgb2YgdGhlIGR5bmFtaWMgcGFkIGFyZSBjcmVhdGVkIChuby1tb3JlLXBhZHMgZW1pdGVkIGJ5IHRoZQorYnJhbmNoaW5nIHBvaW50LCBpZSwgdGhlIGRlbXV4ZXIgb3IgdGhlIHF1ZXVlcyBmaWxsZWQpIGFuZCB0aGUgcGFkcworYXJlIGJsb2NrZWQgKGJsb2NrZWQgY2FsbGJhY2sgcmVjZWl2ZWQpIHRoZSBwaXBlbGluZSBpcyBjb21wbGV0ZWx5CitwcmVyb2xsZWQuCisKK0l0IHNob3VsZCB0aGVuIGJlIHBvc3NpYmxlIHRvIHBlcmZvcm0gdGhlIGZvbGxvd2luZyBhY3Rpb25zIG9uIHRoZQorcHJlcm9sbGVkIHBpcGVsaW5lOgorCistIHF1ZXJ5IGR1cmF0aW9uL3Bvc2l0aW9uCistIHBlcmZvcm0gYSBmbHVzaGluZyBzZWVrIHRvIHByZXJvbGwgYSBuZXcgcG9zaXRpb24KKy0gY29ubmVjdCBvdGhlciBlbGVtZW50cyBhbmQgdW5ibG9jayB0aGUgYmxvY2tlZCBwYWRzLgorCisKK2R5bmFtaWNhbGx5IHN3aXRjaGluZyBhbiBlbGVtZW50IGluIGEgUExBWUlORyBwaXBlbGluZQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKKworICAuLS0tLS0tLS0tLS4gICAgICAuLS0tLS0tLS0tLS4gICAgICAuLS0tLS0tLS0tLS4KKyAgfCBlbGVtZW50MSB8ICAgICAgfCBlbGVtZW50MiB8ICAgICAgfCBlbGVtZW50MyB8CisgLi4uICAgICAgICBzcmMgLT4gc2luayAgICAgICBzcmMgLT4gc2luayAgICAgICAuLi4KKyAgJy0tLS0tLS0tLS0nICAgICAgJy0tLS0tLS0tLS0nICAgICAgJy0tLS0tLS0tLS0nCisgICAgICAgICAgICAgICAgICAgIC4tLS0tLS0tLS0tLgorICAgICAgICAgICAgICAgICAgICB8IGVsZW1lbnQ0IHwKKyAgICAgICAgICAgICAgICAgICBzaW5rICAgICAgIHNyYyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAnLS0tLS0tLS0tLScgICAgICAgICAgICAgICAgICAgICAKKworVGhlIHB1cnBvc2UgaXMgdG8gcmVwbGFjZSBlbGVtZW50MiB3aXRoIGVsZW1lbnQ0IGluIHRoZSBQTEFZSU5HIAorcGlwZWxpbmUuIAorCisgIDEpIGJsb2NrIGVsZW1lbnQxIHNyYyBwYWQuIFRoaXMgY2FuIGJlIGRvbmUgYXN5bmMuCisgIDIpIHdhaXQgZm9yIGJsb2NrIHRvIGhhcHBlbi4gYXQgdGhhdCBwb2ludCBub3RoaW5nIGlzIGZsb3dpbmcgYmV0d2VlbgorICAgICBlbGVtZW50MSBhbmQgZWxlbWVudDIgYW5kIG5vdGhpbmcgd2lsbCBmbG93IHVudGlsIHVuYmxvY2tlZC4KKyAgMykgdW5saW5rIGVsZW1lbnQxIGFuZCBlbGVtZW50MgorICA0KSBvcHRpb25hbCBzdGVwOiBtYWtlIHN1cmUgZGF0YSBpcyBmbHVzaGVkIG91dCBvZiBlbGVtZW50MjoKKyAgICAgNGEpIHBhZCBldmVudCBwcm9iZSBvbiBlbGVtZW50MiBzcmMKKyAgICAgNGIpIHNlbmQgRU9TIHRvIGVsZW1lbnQyLCB0aGlzIG1ha2VzIHN1cmUgdGhhdCBlbGVtZW50MiBmbHVzaGVzCisgICAgICAgICBvdXQgdGhlIGxhc3QgYml0cyBvZiBkYXRhIGl0IGhvbGRzLgorICAgICA0Yykgd2FpdCBmb3IgRU9TIHRvIGFwcGVhciBpbiB0aGUgcHJvYmUsIGRyb3AgdGhlIEVPUy4KKyAgICAgNGQpIHJlbW92ZSB0aGUgRU9TIHBhZCBldmVudCBwcm9iZS4KKyAgNSkgdW5saW5rIGVsZW1lbnQyIGFuZCBlbGVtZW50MworICAgICA1YSkgb3B0aW9uYWxseSBlbGVtZW50MiBjYW4gbm93IGJlIHNldCB0byBOVUxMIGFuZC9vciByZW1vdmVkIGZyb20gdGhlCisgICAgICAgICBwaXBlbGluZS4KKyAgNikgbGluayBlbGVtZW50NCBhbmQgZWxlbWVudDMKKyAgNykgbGluayBlbGVtZW50MSBhbmQgZWxlbWVudDQgKEZJWE1FLCBob3cgYWJvdXQgbGV0dGluZyBlbGVtZW50NCBrbm93CisgICAgIGFib3V0IHRoZSBjdXJyZW50bHkgcnVubmluZyBzZWdtZW50Pywgc2VlIGlzc3Vlcy4pCisgIDgpIG1ha2Ugc3VyZSBlbGVtZW50NCBpcyBpbiB0aGUgc2FtZSBzdGF0ZSBhcyB0aGUgcmVzdCBvZiB0aGUgZWxlbWVudHMuIFRoZQorICAgICBlbGVtZW50IHNob3VsZCBhdCBsZWFzdCBiZSBQQVVTRUQuCisgIDkpIHVuYmxvY2sgZWxlbWVudDEgc3JjCisKK1RoZSBzYW1lIGZsb3cgY2FuIGJlIHVzZWQgdG8gcmVwbGFjZSBhbiBlbGVtZW50IGluIGEgUEFVU0VEIHBpcGVsaW5lLiBPbmx5CitzcGVjaWFsIGNhcmUgaGFzIHRvIGJlIHRha2VuIHdoZW4gcGVyZm9ybWluZyBzdGVwIDIpIHdoaWNoIGhhcyB0byBiZSBkb25lCithc3luYyBvciBpdCBtaWdodCBkZWFkbG9jay4gSW4gdGhlIGFzeW5jIGNhbGxiYWNrIG9uZSBjYW4gdGhlbiBwZXJmb3JtIHRoZQorc3RlcHMgZnJvbSAzKS4gSW4gYSBwbGF5aW5nIHBpcGVsaW5lIG9uZSBjYW4gb2YgY291cnNlIHVzZSB0aGUgYXN5bmMgYmxvY2sKK2FzIHdlbGwsIHNvIHRoYXQgdGhlcmUgaXMgYSBnZW5lcmljIG1ldGhvZCBmb3IgYm90aCBQQVVTRUQgYW5kIFBMQVlJTkcuCisKK1RoZSBzYW1lIGZsb3cgd29ya3MgYXMgd2VsbCBmb3IgYW55IGNoYWluIG9mIG11bHRpcGxlIGVsZW1lbnRzIGFuZCBtaWdodCAKK2JlIGltcGxlbWVudGVkIHdpdGggYSBoZWxwZXIgZnVuY3Rpb24gaW4gdGhlIGZ1dHVyZS4KKwpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1idWZmZXJpbmcudHh0IGIvZG9jcy9kZXNpZ24vcGFydC1idWZmZXJpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2Y2I1MTYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlcmluZy50eHQKQEAgLTAsMCArMSwzMDggQEAKK0J1ZmZlcmluZworLS0tLS0tLS0tCisKK1RoaXMgZG9jdW1lbnQgb3V0bGluZXMgdGhlIGJ1ZmZlcmluZyBwb2xpY3kgdXNlZCBpbiB0aGUgR1N0cmVhbWVyCitjb3JlIHRoYXQgY2FuIGJlIHVzZWQgYnkgcGx1Z2lucyBhbmQgYXBwbGljYXRpb25zLgorCitUaGUgcHVycG9zZSBvZiBidWZmZXJpbmcgaXMgdG8gYWNjdW11bGF0ZSBlbm91Z2ggZGF0YSBpbiBhIHBpcGVsaW5lIHNvIHRoYXQKK3BsYXliYWNrIGNhbiBvY2N1ciBzbW9vdGhseSBhbmQgd2l0aG91dCBpbnRlcnJ1cHRpb25zLiBJdCBpcyB0eXBpY2FsbHkgZG9uZQord2hlbiByZWFkaW5nIGZyb20gYSAoc2xvdykgYW5kIG5vbi1saXZlIG5ldHdvcmsgc291cmNlIGJ1dCBjYW4gYWxzbyBiZSB1c2VkIGZvcgorbGl2ZSBzb3VyY2VzLgorCitXZSB3YW50IHRvIGJlIGFibGUgdG8gaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgZmVhdHVyZXM6CisKKyAtIGJ1ZmZlcmluZyB1cCB0byBhIHNwZWNpZmljIGFtb3VudCBvZiBkYXRhLCBpbiBtZW1vcnksIGJlZm9yZSBzdGFydGluZyBwbGF5YmFjaworICAgc28gdGhhdCBuZXR3b3JrIGZsdWN0dWF0aW9ucyBhcmUgbWluaW1pemVkLgorIC0gZG93bmxvYWQgb2YgdGhlIG5ldHdvcmsgZmlsZSB0byBhIGxvY2FsIGRpc2sgd2l0aCBmYXN0IHNlZWtpbmcgaW4gdGhlCisgICBkb3dubG9hZGVkIGRhdGEuIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgcXVpY2t0aW1lL3lvdXR1YmUgcGxheWVycy4KKyAtIGNhY2hpbmcgb2Ygc2VtaS1saXZlIHN0cmVhbXMgdG8gYSBsb2NhbCwgb24gZGlzaywgcmluZ2J1ZmZlciB3aXRoIHNlZWtpbmcgaW4KKyAgIHRoZSBjYWNoZWQgYXJlYS4gVGhpcyBpcyBzaW1pbGFyIHRvIHRpdm8tbGlrZSB0aW1lc2hpZnRpbmcuCisgLSBwcm9ncmVzcyByZXBvcnQgYWJvdXQgdGhlIGJ1ZmZlcmluZyBvcGVyYXRpb25zCisgLSBlYXN5IChiYWNrd2FyZCBjb21wYXRpYmxlKSBhcHBsaWNhdGlvbiBub3RpZmljYXRpb24gb2YgYnVmZmVyaW5nCisgLSB0aGUgcG9zc2liaWxpdHkgZm9yIHRoZSBhcHBsaWNhdGlvbiB0byBkbyBtb3JlIGNvbXBsZXggYnVmZmVyaW5nCisKK1NvbWUgdXNlIGNhc2VzOgorCisgKiBTdHJlYW0gYnVmZmVyaW5nOgorCisgICArLS0tLS0tLS0tKyAgICAgKy0tLS0tLS0tLSsgICAgICstLS0tLS0tKworICAgfCBodHRwc3JjIHwgICAgIHwgYnVmZmVyICB8ICAgICB8IGRlbXV4IHwKKyAgIHwgICAgICAgIHNyYyAtIHNpbmsgICAgICBzcmMgLSBzaW5rICAgICAuLi4uCisgICArLS0tLS0tLS0tKyAgICAgKy0tLS0tLS0tLSsgICAgICstLS0tLS0tKworCisgIEluIHRoaXMgY2FzZSB3ZSBhcmUgcmVhZGluZyBmcm9tIGEgc2xvdyBuZXR3b3JrIHNvdXJjZSBpbnRvIGEgYnVmZmVyIGVsZW1lbnQKKyAgKHN1Y2ggYXMgcXVldWUyKS4gCisgIAorICBUaGUgYnVmZmVyIGVsZW1lbnQgaGFzIGEgbG93IGFuZCBoaWdoIHdhdGVybWFyayBleHByZXNzZWQgaW4gYnl0ZXMuIFRoZQorICBidWZmZXIgdXNlcyB0aGUgd2F0ZXJtYXJrcyBhcyBmb2xsb3dzOgorICAKKyAgIC0gVGhlIGJ1ZmZlciBlbGVtZW50IHdpbGwgcG9zdCBCVUZGRVJJTkcgbWVzc2FnZXMgdW50aWwgdGhlIGhpZ2ggd2F0ZXJtYXJrCisgICAgIGlzIGhpdC4gVGhpcyBpbnN0cnVjdHMgdGhlIGFwcGxpY2F0aW9uIHRvIGtlZXAgdGhlIHBpcGVsaW5lIFBBVVNFRCwgd2hpY2gKKyAgICAgd2lsbCBldmVudHVhbGx5IGJsb2NrIHRoZSBzcmNwYWQgZnJvbSBwdXNoaW5nIHdoaWxlIGRhdGEgaXMgcHJlcm9sbGVkIGluCisgICAgIHRoZSBzaW5rcy4KKyAgIC0gV2hlbiB0aGUgaGlnaCB3YXRlcm1hcmsgaXMgaGl0LCBhIEJVRkZFUklORyBtZXNzYWdlIHdpdGggMTAwJSB3aWxsIGJlCisgICAgIHBvc3RlZCwgd2hpY2ggaW5zdHJ1Y3RzIHRoZSBhcHBsaWNhdGlvbiB0byBjb250aW51ZSBwbGF5YmFjay4KKyAgIC0gV2hlbiBkdXJpbmcgcGxheWJhY2ssIHRoZSBsb3cgd2F0ZXJtYXJrIGlzIGhpdCwgdGhlIHF1ZXVlIHdpbGwgc3RhcnQgcG9zdGluZworICAgICBCVUZGRVJJTkcgbWVzc2FnZXMgYWdhaW4sIG1ha2luZyB0aGUgYXBwbGljYXRpb24gUEFVU0UgdGhlIHBpcGVsaW5lIGFnYWluCisgICAgIHVudGlsIHRoZSBoaWdoIHdhdGVybWFyayBpcyBoaXQgYWdhaW4uIFRoaXMgaXMgY2FsbGVkIHRoZSByZWJ1ZmZlcmluZworICAgICBzdGFnZS4KKyAgIC0gZHVyaW5nIHBsYXliYWNrLCB0aGUgcXVldWUgbGV2ZWwgd2lsbCBmbHVjdHVhdGUgYmV0d2VlbiB0aGUgaGlnaCBhbmQgdGhlCisgICAgIGxvdyB3YXRlcm1hcmsgYXMgYSB3YXkgdG8gY29tcGVuc2F0ZSBmb3IgbmV0d29yayBpcnJlZ3VsYXJpdGllcy4KKworICBUaGlzIGJ1ZmZlcmluZyBtZXRob2QgaXMgdXNhYmxlIHdoZW4gdGhlIGRlbXV4ZXIgb3BlcmF0ZXMgaW4gcHVzaCBtb2RlLgorICBTZWVraW5nIGluIHRoZSBzdHJlYW0gcmVxdWlyZXMgdGhlIHNlZWsgdG8gaGFwcGVuIGluIHRoZSBuZXR3b3JrIHNvdXJjZS4KKyAgSXQgaXMgbW9zdGx5IGRlc2lyYWJsZSB3aGVuIHRoZSB0b3RhbCBkdXJhdGlvbiBvZiB0aGUgZmlsZSBpcyBub3Qga25vdywgc3VjaAorICBhcyBpbiBsaXZlIHN0cmVhbWluZyBvciB3aGVuIGVmZmljaWVudCBzZWVraW5nIGlzIG5vdCBwb3NzaWJsZS9yZXF1aXJlZC4KKworICogSW5jcmVtZW50YWwgZG93bmxvYWQKKworICAgKy0tLS0tLS0tLSsgICAgICstLS0tLS0tLS0rICAgICArLS0tLS0tLSsKKyAgIHwgaHR0cHNyYyB8ICAgICB8IGJ1ZmZlciAgfCAgICAgfCBkZW11eCB8CisgICB8ICAgICAgICBzcmMgLSBzaW5rICAgICAgc3JjIC0gc2luayAgICAgLi4uLgorICAgKy0tLS0tLS0tLSsgICAgICstLS0tfC0tLS0rICAgICArLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgIFYKKyAgICAgICAgICAgICAgICAgICAgICAgZmlsZQorICAKKyAgSW4gdGhpcyBjYXNlLCB3ZSBrbm93IHRoZSBzZXJ2ZXIgaXMgc3RyZWFtaW5nIGEgZml4ZWQgbGVuZ3RoIGZpbGUgdG8gdGhlCisgIGNsaWVudC4gVGhlIGFwcGxpY2F0aW9uIGNhbiBjaG9vc2UgdG8gZG93bmxvYWQgdGhlIGZpbGUgb24gZGlzay4gVGhlIGJ1ZmZlcgorICBlbGVtZW50IHdpbGwgcHJvdmlkZSBhIHB1c2ggb3IgcHVsbCBiYXNlZCBzcmNwYWQgdG8gdGhlIGRlbXV4ZXIgdG8gbmF2aWdhdGUgaW4KKyAgdGhlIGRvd25sb2FkZWQgZmlsZS4KKworICBUaGlzIG1vZGUgaXMgb25seSBzdWl0YWJsZSB3aGVuIHRoZSBjbGllbnQgY2FuIGRldGVybWluZSB0aGUgbGVuZ3RoIG9mIHRoZQorICBmaWxlIG9uIHRoZSBzZXJ2ZXIuCisKKyAgSW4gdGhpcyBjYXNlLCBidWZmZXJpbmcgbWVzc2FnZXMgd2lsbCBiZSBlbWl0ZWQgYXMgdXN1YWwgd2hlbiB0aGUgcmVxdWVzdGVkCisgIHJhbmdlIGlzIG5vdCB3aXRoaW4gdGhlIGRvd25sb2FkZWQgYXJlYSArIGJ1ZmZlcnNpemUuIFRoZSBidWZmZXJpbmcgbWVzc2FnZQorICB3aWxsIGFsc28gY29udGFpbiBhbiBpbmRpY2F0aW9uIHRoYXQgaW5jcmVtZW50YWwgZG93bmxvYWQgaXMgYmVpbmcgcGVyZm9ybWVkLgorICBUaGlzIGZsYWcgY2FuIGJlIHVzZWQgdG8gbGV0IHRoZSBhcHBsaWNhdGlvbiBjb250cm9sIHRoZSBidWZmZXJpbmcgaW4gYSBtb3JlCisgIGludGVsbGlnZW50IHdheSwgdXNpbmcgdGhlIEJVRkZFUklORyBxdWVyeSwgZm9yIGV4YW1wbGUuCisKKyAgVGhlIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlIEJVRkZFUklORyBxdWVyeSB0byBnZXQgdGhlIGVzdGltYXRlZCBkb3dubG9hZCB0aW1lCisgIGFuZCBtYXRjaCB0aGlzIHRpbWUgdG8gdGhlIGN1cnJlbnQvcmVtYWluaW5nIHBsYXliYWNrIHRpbWUgdG8gY29udHJvbCB3aGVuCisgIHBsYXliYWNrIHNob3VsZCBzdGFydCB0byBoYXZlIGEgbm9uLWludGVycnVwdGVkIHBsYXliYWNrIGV4cGVyaWVuY2UuCisKKworICogVGltZXNoaWZ0aW5nCisKKyAgICstLS0tLS0tLS0rICAgICArLS0tLS0tLS0tKyAgICAgKy0tLS0tLS0rCisgICB8IGh0dHBzcmMgfCAgICAgfCBidWZmZXIgIHwgICAgIHwgZGVtdXggfAorICAgfCAgICAgICAgc3JjIC0gc2luayAgICAgIHNyYyAtIHNpbmsgICAgIC4uLi4KKyAgICstLS0tLS0tLS0rICAgICArLS0tLXwtLS0tKyAgICAgKy0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICBWCisgICAgICAgICAgICAgICAgICAgIGZpbGUtcmluZ2J1ZmZlcgorCisgIEluIHRoaXMgbW9kZSwgYSBmaXhlZCBzaXplIHJpbmdidWZmZXIgaXMga2VwdCB0byBkb3dubG9hZCB0aGUgc2VydmVyIGNvbnRlbnQuCisgIFRoaXMgYWxsb3dzIGZvciBzZWVraW5nIGluIHRoZSBidWZmZXJlZCBkYXRhLiBEZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlCisgIGJ1ZmZlciBvbmUgY2FuIHNlZWsgZnVydGhlciBiYWNrIGluIHRpbWUuCisKKyAgVGhpcyBtb2RlIGlzIHN1aXRhYmxlIGZvciBhbGwgbGl2ZSBzdHJlYW1zLgorCisgIEFzIHdpdGggdGhlIGluY3JlbWVudGFsIGRvd25sb2FkIG1vZGUsIGJ1ZmZlcmluZyBtZXNzYWdlcyBhcmUgZW1pdGVkIGFsb25nCisgIHdpdGggYW4gaW5kaWNhdGlvbiB0aGF0IHRpbWVzaGlmdGluZyBkb3dubG9hZCBpcyBpbiBwcm9ncmVzcy4gCisKKworICogTGl2ZSBidWZmZXJpbmcKKworICBJbiBsaXZlIHBpcGVsaW5lcyB3ZSB1c3VhbGx5IGludHJvZHVjZSBzb21lIGxhdGVuY3kgYmV0d2VlbiB0aGUgY2FwdHVyZSBhbmQKKyAgdGhlIHBsYXliYWNrIGVsZW1lbnRzLiBUaGlzIGxhdGVuY3kgY2FuIGJlIGludHJvZHVjZWQgYnkgYSBxdWV1ZSAoc3VjaCBhcyBhCisgIGppdHRlcmJ1ZmZlcikgb3IgYnkgb3RoZXIgbWVhbnMgKGluIHRoZSBhdWRpb3NpbmspLgorCisgIEJ1ZmZlcmluZyBtZXNzYWdlcyBjYW4gYmUgZW1pdGVkIGluIHRob3NlIGxpdmUgcGlwZWxpbmVzIGFzIHdlbGwgYW5kIHNlcnZlIGFzCisgIGFuIGluZGljYXRpb24gdG8gdGhlIHVzZXIgb2YgdGhlIGxhdGVuY3kgYnVmZmVyaW5nLiBUaGUgYXBwbGljYXRpb24gdXN1YWxseQorICBkb2VzIG5vdCByZWFjdCB0byB0aGVzZSBidWZmZXJpbmcgbWVzc2FnZXMgd2l0aCBhIHN0YXRlIGNoYW5nZS4KKworCitNZXNzYWdlcworfn5+fn5+fn4KKworQSBHU1RfTUVTU0FHRV9CVUZGRVJJTkcgbXVzdCBiZSBwb3N0ZWQgb24gdGhlIGJ1cyB3aGVuIHBsYXliYWNrIHRlbXBvcmFyaWx5CitzdG9wcyB0byBidWZmZXIgYW5kIHdoZW4gYnVmZmVyaW5nIGZpbmlzaGVzLiBXaGVuIHBlcmNlbnRhZ2UgZmllbGQgaW4gdGhlCitCVUZGRVJJTkcgbWVzc2FnZSBpcyAxMDAsIGJ1ZmZlcmluZyBpcyBkb25lLiBWYWx1ZXMgbGVzcyB0aGFuIDEwMCBtZWFuIHRoYXQKK2J1ZmZlcmluZyBpcyBpbiBwcm9ncmVzcy4gCisKK1RoZSBCVUZGRVJJTkcgbWVzc2FnZSBzaG91bGQgYmUgaW50ZXJjZXB0ZWQgYW5kIGFjdGVkIHVwb24gYnkgdGhlIGFwcGxpY2F0aW9uLgorVGhlIG1lc3NhZ2UgY29udGFpbnMgYXQgbGVhc3Qgb25lIGZpZWxkIHRoYXQgaXMgc3VmZmljaWVudCBmb3IgYmFzaWMKK2Z1bmN0aW9uYWxpdHk6CisKKyAgImJ1ZmZlci1wZXJjZW50IiwgR19UWVBFX0lOVCwgYmV0d2VlbiAwIGFuZCAxMDAKKworU2V2ZXJhbCBtb3JlIGNsZXZlciB3YXlzIG9mIGRlYWxpbmcgd2l0aCB0aGUgYnVmZmVyaW5nIG1lc3NhZ2VzIGNhbiBiZSB1c2VkIHdoZW4KK2luIGluY3JlbWVudGFsIG9yIHRpbWVzaGlmdGluZyBkb3dubG9hZCBtb2RlLiBGb3IgdGhpcyBwdXJwb3NlIGFkZGl0aW9uYWwgZmllbGRzCithcmUgYWRkZWQgdG8gdGhlIGJ1ZmZlcmluZyBtZXNzYWdlOgorCisgICJidWZmZXJpbmctbW9kZSIsIEdTVF9UWVBFX0JVRkZFUklOR19NT0RFLCAKKyAgICAgICAgICAgICAgICAgICBlbnVtIHsgInN0cmVhbSIsICJkb3dubG9hZCIsICJ0aW1lc2hpZnQiLCAibGl2ZSIgfQorICAgICAgLSBnaXZlcyB0aGUgYnVmZmVyaW5nIG1vZGUgaW4gdXNlLiBTZWUgYWJvdmUgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZQorICAgICAgICBkaWZmZXJlbnQgbW9kZXMgb2YgYnVmZmVyaW5nLiBUaGlzIGZpZWxkIGNhbiBiZSB1c2VkIHRvIGxldCB0aGUKKwlhcHBsaWNhdGlvbiBoYXZlIG1vcmUgY29udHJvbCBvdmVyIHRoZSBidWZmZXJpbmcgcHJvY2Vzcy4KKworICAiYXZnLWluLXJhdGUiLCBHX1RZUEVfSU5UCisgICAgICAtIGdpdmVzIHRoZSBhdmVyYWdlIGlucHV0IGJ1ZmZlcmluZyBzcGVlZCBpbiBieXRlcy9zZWNvbmQuIC0xIGlzIHVua25vd24uCisgICAgICAgIFRoaXMgaXMgdGhlIGF2ZXJhZ2UgbnVtYmVyIG9mIGJ5dGVzIHBlciBzZWNvbmQgdGhhdCBpcyByZWNlaXZlZCBvbiB0aGUKKwlidWZmZXJpbmcgZWxlbWVudCBpbnB1dCAoc2luaykgcGFkcy4gSXQgaXMgYSBtZWFzdXJlbWVudCBvZiB0aGUgbmV0d29yaworCXNwZWVkIGluIG1vc3QgY2FzZXMuCisKKyAgImF2Zy1vdXQtcmF0ZSIsIEdfVFlQRV9JTlQKKyAgICAgIC0gZ2l2ZXMgdGhlIGF2ZXJhZ2UgY29uc3VtcHRpb24gc3BlZWQgaW4gYnl0ZXMvc2Vjb25kLiAtMSBpcyB1bmtub3duLgorICAgICAgICBUaGlzIGlzIHRoZSBhdmVyYWdlIG51bWJlciBvZiBieXRlcyBwZXIgc2Vjb25kIHRoYXQgaXMgY29uc3VtZWQgYnkgdGhlCisJZG93bnN0cmVhbSBlbGVtZW50IG9mIHRoZSBidWZmZXJpbmcgZWxlbWVudC4gCisKKyAgImJ1ZmZlcmluZy1sZWZ0IiwgR19UWVBFX0lOVDY0CisgICAgICAtIGdpdmVzIHRoZSBlc3RpbWF0ZWQgdGltZSB0aGF0IGJ1ZmZlcnJpbmcgd2lsbCB0YWtlIGluIG1pbGxpc2Vjb25kcy4KKyAgICAgICAgLTEgdW5rbm93bi4KKyAgICAgICAgVGhpcyBpcyBtZWFzdXJlZCBiYXNlZCBvbiB0aGUgYXZnLWluLXJhdGUgYW5kIHRoZSBmaWxsZWQgbGV2ZWwgb2YgdGhlCisgICAgICAgIHF1ZXVlLiBUaGUgYXBwbGljYXRpb24gY2FuIHVzZSB0aGlzIGhpbnQgdG8gdXBkYXRlIHRoZSBHVUkgYWJvdXQgdGhlCisgICAgICAgIGVzdGltYXRlZCByZW1haW5pbmcgdGltZSB0aGF0IGJ1ZmZlcmluZyB3aWxsIHRha2UuCisKK0FwcGxpY2F0aW9uCit+fn5+fn5+fn5+fgorCitXaGlsZSBkYXRhIGlzIGJ1ZmZlcmVkLCB0aGUgcGlwZWxpbmUgc2hvdWxkIHJlbWFpbiBpbiB0aGUgUEFVU0VEIHN0YXRlLiBJdCBpcworYWxzbyBwb3NzaWJsZSB0aGF0IG1vcmUgZGF0YSBzaG91bGQgYmUgYnVmZmVyZWQgd2hpbGUgdGhlIHBpcGVsaW5lIGlzIFBMQVlJTkcsCitpbiB3aGljaCBjYXNlIHRoZSBwaXBlbGluZSBzaG91bGQgYmUgUEFVU0VEIHVudGlsIHRoZSBidWZmZXJpbmcgZmluaXNoZWQuCisKK0JVRkZFUklORyBtZXNzYWdlcyBjYW4gYmUgcG9zdGVkIHdoaWxlIHRoZSBwaXBlbGluZSBpcyBwcmVyb2xsaW5nLiBUaGUKK2FwcGxpY2F0aW9uIHNob3VsZCBub3Qgc2V0IHRoZSBwaXBlbGluZSB0byBQTEFZSU5HIGJlZm9yZSBhIEJVRkZFUklORyBtZXNzYWdlCit3aXRoIDEwMCBwZXJjZW50IHZhbHVlIGlzIHJlY2VpdmVkLCB3aGljaCBtaWdodCBvbmx5IGhhcHBlbiBhZnRlciB0aGUgcGlwZWxpbmUKK3ByZXJvbGxlZC4KKworQW4gZXhjZXB0aW9uIGlzIG1hZGUgZm9yIGxpdmUgcGlwZWxpbmVzLiBUaGUgYXBwbGljYXRpb24gbWF5IG5vdCBjaGFuZ2UKK3RoZSBzdGF0ZSBvZiBhIGxpdmUgcGlwZWxpbmUgd2hlbiBhIGJ1ZmZlcmluZyBtZXNzYWdlIGlzIHJlY2VpdmVkLiBVc3VhbGx5IHRoZXNlCitidWZmZXJpbmcgbWVzc2FnZXMgY29udGFpbiB0aGUgImJ1ZmZlcmluZy1tb2RlIiA9ICJsaXZlIi4KKworVGhlIGJ1ZmZlcmluZyBtZXNzYWdlIGNhbiBhbHNvIGluc3RydWN0IHRoZSBhcHBsaWNhdGlvbiB0byBzd2l0Y2ggdG8gYSBwZXJpb2RpY2FsCitCVUZGRVJJTkcgcXVlcnkgaW5zdGVhZCB0byBtb3JlIHByZWNpc2VseSBjb250cm9sIHRoZSBidWZmZXJpbmcgcHJvY2Vzcy4gVGhlCithcHBsaWNhdGlvbiBjYW4sIGZvciBleGFtcGxlLCBjaG9vc2UgdG8gbm90IGFjdCBvbiB0aGUgQlVGRkVSSU5HIG1lc3NhZ2Ugd2l0aAorMTAwIHBlcmNlbnQgZmlsbCBsZXZlbCB0byByZXN1bWUgcGxheWJhY2sgYnV0IGluc3RlYWQgdXNlIHRoZSBlc3RpbWF0ZWQgZG93bmxvYWQKK3RpbWUgdG8gcmVzdW1lIHBsYXliYWNrIHRvIGdldCB1bmludGVycnVwdGVkIHBsYXliYWNrLgorCisKK0J1ZmZlcmluZyBRdWVyeQorfn5+fn5+fn5+fn5+fn5+CisKK0luIGFkZGl0aW9uIHRvIHRoZSBCVUZGRVJJTkcgbWVzc2FnZXMgcG9zdGVkIGJ5IHRoZSBidWZmZXJpbmcgZWxlbWVudHMgd2Ugd2FudAordG8gYmUgYWJsZSB0byBxdWVyeSB0aGUgc2FtZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBhcHBsaWNhdGlvbi4gV2UgYWxzbyB3YW50IHRvCitiZSBhYmxlIHRvIHByZXNlbnQgdGhlIHVzZXIgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZG93bmxvYWRlZCByYW5nZSBpbiB0aGUKK2ZpbGUgc28gdGhhdCB0aGUgR1VJIGNhbiByZWFjdCBvbiBpdC4KKworSW4gYWRkaXRpb24gdG8gYWxsIHRoZSBmaWVsZHMgcHJlc2VudCBpbiB0aGUgYnVmZmVyaW5nIG1lc3NhZ2UsIHRoZSBCVUZGRVJJTkcKK3F1ZXJ5IGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZmllbGQsIHdoaWNoIGluZGljYXRlIHRoZSBhdmFpbGFibGUgZG93bmxvYWRlZAorcmFuZ2UgaW4gYSBzcGVjaWZpYyBmb3JtYXQgYW5kIHRoZSBlc3RpbWF0ZWQgdGltZSB0byBjb21wbGV0ZToKKworICAiYnVzeSIsIEdfVFlQRV9CT09MRUFOCisgICAgLSBpZiBidWZmZXJpbmcgd2FzIGJ1c3kuIFRoaXMgZmxhZyBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uIHRvIHBhdXNlIHRoZQorICAgICAgcGlwZWxpbmUgYnkgdXNpbmcgdGhlIHF1ZXJ5IG9ubHkuCisKKyAgImZvcm1hdCIsIEdTVF9UWVBFX0ZPUk1BVAorICAgIC0gdGhlIGZvcm1hdCBvZiB0aGUgInN0YXJ0IiBhbmQgInN0b3AiIHZhbHVlcyBiZWxvdyAgCisgICAKKyAgInN0YXJ0IiwgR19UWVBFX0lOVDY0LCAtMSB1bmtub3duCisgICAgLSB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIGF2YWlsYWJsZSBkYXRhCisKKyAgInN0b3AiLCBHX1RZUEVfSU5UNjQsIC0xIHVua25vd24KKyAgICAtIHRoZSBzdG9wIHBvc2l0aW9uIG9mIHRoZSBhdmFpbGFibGUgZGF0YQorCisgICJlc3RpbWF0ZWQtdG90YWwiLCBHX1RZUEVfSU5UNjQKKyAgICAtIGdpdmVzIHRoZSBlc3RpbWF0ZWQgZG93bmxvYWQgdGltZSBpbiBtaWxsaXNlY29uZHMuIC0xIHVua25vd24uCisKKyAgICBXaGVuIHRoZSBzaXplIG9mIHRoZSBkb3dubG9hZGVkIGZpbGUgaXMga25vd24sIHRoaXMgdmFsdWUgd2lsbCBjb250YWluCisgICAgdGhlIGxhdGVzdCBlc3RpbWF0ZSBvZiB0aGUgcmVtYWluaW5nIGRvd25sb2FkIHRpbWUuIFRoaXMgdmFsdWUgaXMgdXN1YWx5CisgICAgb25seSBmaWxsZWQgZm9yIHRoZSAiZG93bmxvYWQiIGJ1ZmZlcmluZyBtb2RlLiBUaGUgYXBwbGljYXRpb24gY2FuIHVzZQorICAgIHRoaXMgaW5mb3JtYXRpb24gdG8gZXN0aW1hdGUgdGhlIGFtb3VudCBvZiByZW1haW5pbmcgdGltZSB0byBkb3dubG9hZCB0aGUKKyAgICBjb21wbGV0ZSBmaWxlLgorCitGb3IgdGhlICJkb3dubG9hZCIgYW5kICJ0aW1lc2hpZnQiIGJ1ZmZlcmluZy1tb2RlcywgdGhlIHN0YXJ0IGFuZCBzdG9wIHBvc2l0aW9ucworc3BlY2lmeSB0aGUgcmFuZ2VzIHdoZXJlIGVmZmljaWVudCBzZWVraW5nIGluIHRoZSBkb3dubG9hZGVkIG1lZGlhIGlzIHBvc3NpYmxlLgorU2Vla2luZyBvdXRzaWRlIG9mIHRoZXNlIHJhbmdlcyBtaWdodCBiZSBzbG93IG9yIG5vdCBhdCBhbGwgcG9zc2libGUuCisKK0ZvciB0aGUgInN0cmVhbSIgYW5kICJsaXZlIiBtb2RlIHRoZSBzdGFydCBhbmQgc3RvcCB2YWx1ZXMgZGVzY3JpYmUgdGhlIG9sZGVzdAorYW5kIG5ld2VzdCBpdGVtIChleHByZXNzZWQgaW4gImZvcm1hdCIpIGluIHRoZSBidWZmZXIuIAorCisKK0RlZmF1bHRzCit+fn5+fn5+fgorCitTb21lIGRlZmF1bHRzIGZvciBjb21tb24gZWxlbWVudHM6CisKK0EgR3N0QmFzZVNyYyB3aXRoIHJhbmRvbSBhY2Nlc3MgcmVwbGllcyB0byB0aGUgQlVGRkVSSU5HIHF1ZXJ5IHdpdGg6CisKKyAgImJ1ZmZlci1wZXJjZW50IiA9IDEwMAorICAiYnVmZmVyaW5nLW1vZGUiID0gInN0cmVhbSIKKyAgImF2Zy1pbi1yYXRlIiA9IC0xCisgICJhdmctb3V0LXJhdGUiID0gLTEKKyAgImJ1ZmZlcmluZy1sZWZ0IiA9IDAKKyAgImZvcm1hdCIgPSBHU1RfRk9STUFUX0JZVEVTCisgICJzdGFydCIgPSAwCisgICJzdG9wIiA9IHRoZSB0b3RhbCBmaWxlc2l6ZQorICAiZXN0aW1hdGVkLXRvdGFsIiA9IDAKKworQSBHc3RCYXNlU3JjIGluIHB1c2ggbW9kZSByZXBsaWVzIHRvIHRoZSBCVUZGRVJJTkcgcXVlcnkgd2l0aDoKKworICAiYnVmZmVyLXBlcmNlbnQiID0gMTAwCisgICJidWZmZXJpbmctbW9kZSIgPSAic3RyZWFtIgorICAiYXZnLWluLXJhdGUiID0gLTEKKyAgImF2Zy1vdXQtcmF0ZSIgPSAtMQorICAiYnVmZmVyaW5nLWxlZnQiID0gMAorICAiZm9ybWF0IiA9IGEgdmFsaWQgR1NUX1RZUEVfRk9STUFUCisgICJzdGFydCIgPSBjdXJyZW50IHBvc2l0aW9uCisgICJzdG9wIiA9IGN1cnJlbnQgcG9zaXRpb24KKyAgImVzdGltYXRlZC10b3RhbCIgPSAtMQorCisKK0J1ZmZlcmluZyBzdHJhdGVnaWVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisgQnVmZmVyaW5nIHN0cmF0ZWdpZXMgYXJlIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBiYXNlZCBvbiB0aGUgYnVmZmVyaW5nCisgbWVzc2FnZSBhbmQgcXVlcnkgZGVzY3JpYmVkIGFib3ZlLgorCisgTW9zdCBzdHJhdGVnaWVzIGhhdmUgdG8gYmFsYW5jZSBidWZmZXJpbmcgdGltZSB2ZXJzdXMgbWF4aW1hbCBwbGF5YmFjaworIGV4cGVyaWVuY2UuCisKKyAqIHNpbXBsZSBidWZmZXJpbmcKKworICAgTk9OLWxpdmUgcGlwZWxpbmVzIGFyZSBrZXB0IGluIHRoZSBwYXVzZWQgc3RhdGUgd2hpbGUgYnVmZmVyaW5nIG1lc3NhZ2VzIHdpdGgKKyAgIGEgcGVyY2VudCA8IDEwMCUgYXJlIHJlY2VpdmVkLgorCisgICBUaGlzIGJ1ZmZlcmluZyBzdHJhdGVneSByZWxpZXMgb24gdGhlIGJ1ZmZlciBzaXplIGFuZCBsb3cvaGlnaCB3YXRlcm1hcmtzIG9mCisgICB0aGUgZWxlbWVudC4gSXQgY2FuIHdvcmsgd2l0aCBhIGZpeGVkIHNpemUgYnVmZmVyIGluIG1lbW9yeSBvciBvbiBkaXNrLgorCisgICBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGlzIHVzdWFsbHkgZXhwcmVzc2VkIGluIGEgZml4ZWQgYW1vdW50IG9mIHRpbWUgdW5pdHMKKyAgIGFuZCB0aGUgZXN0aW1hdGVkIGJpdHJhdGUgb2YgdGhlIHVwc3RyZWFtIHNvdXJjZSBpcyB1c2VkIHRvIGNvbnZlcnQgdGhpcyB0aW1lCisgICB0byBieXRlcy4KKworICAgQWxsIEdTdHJlYW1lciBhcHBsaWNhdGlvbnMgbXVzdCBpbXBsZW1lbnQgdGhpcyBzdHJhdGVneS4gRmFpbHVyZSB0byBkbyBzbworICAgd2lsbCByZXN1bHQgaW4gc3RhcnZhdGlvbiBhdCB0aGUgc2luay4KKworICogbm8tcmVidWZmZXIgc3RyYXRlZ3kKKworICAgVGhpcyBzdHJhdGVneSB0cmllcyB0byBidWZmZXIgYXMgbXVjaCBkYXRhIGFzIHBvc3NpYmxlIHNvIHRoYXQgcGxheWJhY2sgY2FuCisgICBjb250aW51ZSB3aXRob3V0IGFueSBmdXJ0aGVyIHJlYnVmZmVyaW5nLgorCisgICBUaGlzIHN0cmF0ZWd5IGlzIGluaXRpYWxseSBzaW1pbGFyIHRvIHNpbXBsZSBidWZmZXJpbmcsIHRoZSBkaWZmZXJlbmNlIGlzIGluCisgICBkZWNpZGluZyBvbiB0aGUgY29uZGl0aW9uIHRvIGNvbnRpbnVlIHBsYXliYWNrLiBXaGVuIGEgMTAwJSBidWZmZXJpbmcgbWVzc2FnZQorICAgaGFzIGJlZW4gcmVjZWl2ZWQsIHRoZSBhcHBsaWNhdGlvbiB3aWxsIG5vdCB5ZXQgc3RhcnQgdGhlIHBsYXliYWNrIGJ1dCBpdCB3aWxsCisgICBzdGFydCBhIHBlcmlvZGljIGJ1ZmZlcmluZyBxdWVyeSwgd2hpY2ggd2lsbCByZXR1cm4gdGhlIGVzdGltYXRlZCBhbW91bnQgb2YKKyAgIGJ1ZmZlcmluZyB0aW1lIGxlZnQuIFdoZW4gdGhlIGVzdGltYXRlZCB0aW1lIGxlZnQgaXMgbGVzcyB0aGFuIHRoZSByZW1haW5pbmcKKyAgIHBsYXliYWNrIHRpbWUsIHBsYXliYWNrIGNhbiBjb250aW51ZS4KKworICAgVGhpcyBzdHJhdGVneSByZXF1aXJlcyBhIHVubGltaXRlZCBidWZmZXIgc2l6ZSBpbiBtZW1vcnkgb3Igb24gZGlzaywgc3VjaCBhcworICAgcHJvdmlkZWQgYnkgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlIGluY3JlbWVudGFsIGRvd25sb2FkIGJ1ZmZlcmluZyBtb2RlLgorCisgICBVc3VhbGx5LCB0aGUgYXBwbGljYXRpb24gY2FuIGNob29zZSB0byBzdGFydCBwbGF5YmFjayBldmVuIGJlZm9yZSB0aGUKKyAgIHJlbWFpbmluZyBidWZmZXIgdGltZSBlbGFwc2VkIGluIG9yZGVyIHRvIG1vcmUgcXVpY2tseSBzdGFydCB0aGUgcGxheWJhY2sgYXQKKyAgIHRoZSBleHBlbnNlIG9mIGEgcG9zc2libGUgcmVidWZmZXJpbmcgcGhhc2UuCisKKyAqIEluY3JlbWVudGFsIHJlYnVmZmVyaW5nCisKKyAgIFRoZSBhcHBsaWNhdGlvbiBpbXBsZW1lbnRzIHRoZSBzaW1wbGUgYnVmZmVyaW5nIHN0cmF0ZWd5IGJ1dCB3aXRoIGVhY2gKKyAgIHJlYnVmZmVyaW5nIHBoYXNlLCBpdCBpbmNyZWFzZXMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlci4gCisKKyAgIFRoaXMgc3RyYXRlZ3kgaGFzIHF1aWNrLCBmaXhlZCB0aW1lIHN0YXJ0dXAgdGltZXMgYnV0IGluY3JlbWVudGFsbHkgbG9uZ2VyCisgICByZWJ1ZmZlcmluZyB0aW1lcyBpZiB0aGUgbmV0d29yayBpcyBzbG93ZXIgdGhhbiB0aGUgbWVkaWEgYml0cmF0ZS4KKworICAgCisKKworCisKKwpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1jYXBzLnR4dCBiL2RvY3MvZGVzaWduL3BhcnQtY2Fwcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMwNGI3NQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZGVzaWduL3BhcnQtY2Fwcy50eHQKQEAgLTAsMCArMSwxNyBAQAorQ2FwcworLS0tLQorCitDYXBzIGFyZSBsaWdod2VpZ2h0IHJlZmNvdW50ZWQgb2JqZWN0cyBkZXNjcmliaW5nIG1lZGlhIHR5cGVzLgorVGhleSBhcmUgY29tcG9zZWQgb2YgYW4gYXJyYXkgb2YgR3N0U3RydWN0dXJlcy4KKworQ2FwcyBhcmUgZXhwb3NlZCBvbiBHc3RQYWRUZW1wbGF0ZXMgdG8gZGVzY3JpYmUgYWxsIHBvc3NpYmxlIHR5cGVzIGEKK2dpdmVuIHBhZCBjYW4gaGFuZGxlLiBUaGV5IGFyZSBhbHNvIHN0b3JlZCBpbiB0aGUgcmVnaXN0cnkgYWxvbmcgd2l0aAorYSBkZXNjcmlwdGlvbiBvZiB0aGUgZWxlbWVudC4KKworQ2FwcyBhcmUgZXhwb3NlZCBvbiB0aGUgZWxlbWVudCBwYWRzIHVzaW5nIHRoZSBfZ2V0X2NhcHMoKSBwYWQgZnVuY3Rpb24uCitUaGlzIGZ1bmN0aW9uIGRlc2NyaWJlcyB0aGUgcG9zc2libGUgdHlwZXMgdGhhdCB0aGUgcGFkIGNhbiBoYW5kbGUgb3IKK3Byb2R1Y2UgKHNlZSBwYXJ0LXBhZHMudHh0IGFuZCBwYXJ0LW5lZ290aWF0aW9uLnR4dCkuCisKK1ZhcmlvdXMgbWV0aG9kcyBleGlzdCB0byB3b3JrIHdpdGggdGhlIG1lZGlhIHR5cGVzIHN1Y2ggYXMgc3VidHJhY3RpbmcKK29yIGludGVyc2VjdGluZy4KKwpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1jbG9ja3MudHh0IGIvZG9jcy9kZXNpZ24vcGFydC1jbG9ja3MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNTUzMWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2Rlc2lnbi9wYXJ0LWNsb2Nrcy50eHQKQEAgLTAsMCArMSw4OCBAQAorQ2xvY2tzCistLS0tLS0KKworVGhlIEdzdENsb2NrIHJldHVybnMgYSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgdGltZSB3aXRoIHRoZSBtZXRob2QgCitfZ2V0X3RpbWUoKS4gSXRzIGFjY3VyYWN5IGFuZCBiYXNlIHRpbWUgZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWMgY2xvY2sgCitpbXBsZW1lbnRhdGlvbiBidXQgdGltZSBpcyBhbHdheXMgZXhwcmVzc2VkIGluIG5hbm9zZWNvbmRzLiBTaW5jZSB0aGUKK2Jhc2VsaW5lIG9mIHRoZSBjbG9jayBpcyB1bmRlZmluZWQsIHRoZSBjbG9jayB0aW1lIHJldHVybmVkIGlzIG5vdAorbWVhbmluZ2Z1bCBpbiBpdHNlbGYsIHdoYXQgbWF0dGVycyBhcmUgdGhlIGRlbHRhcyBiZXR3ZWVuIHR3byBjbG9jawordGltZXMuCitUaGUgdGltZSByZXBvcnRlZCBieSB0aGUgY2xvY2sgaXMgY2FsbGVkIHRoZSBhYnNvbHV0ZV90aW1lLgorCisKK0Nsb2NrIFNlbGVjdGlvbgorfn5+fn5+fn5+fn5+fn5+CisKK1RvIHN5bmNocm9uaXplIHRoZSBkaWZmZXJlbnQgZWxlbWVudHMsIHRoZSBHc3RQaXBlbGluZSBpcyByZXNwb25zaWJsZSBmb3IKK3NlbGVjdGluZyBhbmQgZGlzdHJpYnV0aW5nIGEgZ2xvYmFsIEdzdENsb2NrIGZvciBhbGwgdGhlIGVsZW1lbnRzIGluIGl0LgorCitUaGlzIHNlbGVjdGlvbiBoYXBwZW5zIHdoZW5ldmVyIHRoZSBwaXBlbGluZSBnb2VzIHRvIFBMQVlJTkcuIFdoZW5ldmVyIGFuCitlbGVtZW50IGlzIGFkZGVkL3JlbW92ZWQgZnJvbSB0aGUgcGlwZWxpbmUsIHRoaXMgc2VsZWN0aW9uIHdpbGwgYmUgcmVkb25lIGluIHRoZQorbmV4dCBzdGF0ZSBjaGFuZ2UgdG8gUExBWUlORy4gQWRkaW5nIGFuIGVsZW1lbnQgdGhhdCBjYW4gcHJvdmlkZSBhIGNsb2NrIHdpbGwKK3Bvc3QgYSBHU1RfTUVTU0FHRV9DTE9DS19QUk9WSURFIG1lc3NhZ2Ugb24gdGhlIGJ1cyB0byBpbmZvcm0gcGFyZW50IGJpbnMgb2YgdGhlCitmYWN0IHRoYXQgYSBjbG9jayByZWNhbGN1bGF0aW9uIGlzIG5lZWRlZC4gCisKK1doZW4gYSBjbG9jayBpcyBzZWxlY3RlZCwgYSBORVdfQ0xPQ0sgbWVzc2FnZSBpcyBwb3N0ZWQgb24gdGhlIGJ1cyBzaWduYWxpbmcgdGhlCitjbG9jayB0byB0aGUgYXBwbGljYXRpb24uCisKK1doZW4gdGhlIGVsZW1lbnQgdGhhdCBwcm92aWRlZCB0aGUgY2xvY2sgaXMgcmVtb3ZlZCBmcm9tIHRoZSBwaXBlbGluZSwgYQorQ0xPQ0tfTE9TVCBtZXNzYWdlIGlzIHBvc3RlZC4gVGhlIGFwcGxpY2F0aW9uIG11c3QgdGhlbiBzZXQgdGhlIHBpcGVsaW5lIHRvCitQQVVTRUQgYW5kIFBMQVlJTkcgYWdhaW4gaW4gb3JkZXIgdG8gbGV0IHRoZSBwaXBlbGluZSBzZWxlY3QgYSBuZXcgY2xvY2sKK2FuZCBkaXN0cmlidXRlIGEgbmV3IGJhc2UgdGltZS4KKworVGhlIGNsb2NrIHNlbGVjdGlvbiBpcyBwZXJmb3JtZWQgYXMgcGFydCBvZiB0aGUgc3RhdGUgY2hhbmdlIGZyb20gUEFVU0VEIHRvCitQTEFZSU5HIGFuZCBpcyBkZXNjcmliZWQgaW4gcGFydC1zdGF0ZXMudHh0LgorCisKK0Nsb2NrIGZlYXR1cmVzCit+fn5+fn5+fn5+fn5+fgorCitUaGUgY2xvY2sgc3VwcG9ydHMgcGVyaW9kaWMgYW5kIHNpbmdsZSBzaG90IGNsb2NrIG5vdGlmaWNhdGlvbnMgYm90aAorc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91cy4KKworT25lIGZpcnN0IG5lZWRzIHRvIGNyZWF0ZSBhIEdzdENsb2NrSUQgZm9yIHRoZSBwZXJpb2RpYyBvciBzaW5nbGUgc2hvdAorbm90aWZpY2F0aW9uIHVzaW5nIF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQoKSBvciBfY2xvY2tfbmV3X3BlcmlvZGljX2lkKCkuCisKK1RvIHBlcmZvcm0gYSBibG9ja2luZyB3YWl0IGZvciB0aGUgc3BlY2lmaWMgdGltZSBvZiB0aGUgR3N0Q2xvY2tJRCB1c2UgdGhlCitnc3RfY2xvY2tfaWRfd2FpdCgpLiBUbyByZWNlaXZlIGEgY2FsbGJhY2sgd2hlbiB0aGUgc3BlY2lmaWMgdGltZSBpcyByZWFjaGVkCitpbiB0aGUgY2xvY2sgdXNlIGdzdF9jbG9ja19pZF93YWl0X2FzeW5jKCkuIEJvdGggdGhlc2UgY2FsbHMgY2FuIGJlIGludGVycnVwdGVkCit3aXRoIHRoZSBnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSgpIGNhbGwuIElmIHRoZSBibG9ja2luZyB3YWl0IGlzIHVuc2NoZWR1bGVkCithIHJldHVybiB2YWx1ZSBvZiBHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQgaXMgcmV0dXJuZWQuCisKK1RoZSBhc3luYyBjYWxsYmFja3MgY2FuIGhhcHBlbiBmcm9tIGFueSB0aHJlYWQsIGVpdGhlciBwcm92aWRlZCBieSB0aGUKK2NvcmUgb3IgZnJvbSBhIHN0cmVhbWluZyB0aHJlYWQuIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQgYmUgcHJlcGFyZWQgZm9yIHRoaXMuCisKK0EgR3N0Q2xvY2tJRCB0aGF0IGhhcyBiZWVuIHVuc2NoZWR1bGVkIGNhbm5vdCBiZSB1c2VkIGFnYWluIGZvciBhbnkgd2FpdAorb3BlcmF0aW9uLiAKKworSXQgaXMgcG9zc2libGUgdG8gcGVyZm9ybSBhIGJsb2NraW5nIHdhaXQgb24gdGhlIHNhbWUgSUQgZnJvbSBtdWx0aXBsZSAKK3RocmVhZHMuIEhvd2V2ZXIsIHJlZ2lzdGVyaW5nIHRoZSBzYW1lIElEIGZvciBtdWx0aXBsZSBhc3luYyBub3RpZmljYXRpb25zIGlzIAorbm90IHBvc3NpYmxlLCB0aGUgY2FsbGJhY2sgd2lsbCBvbmx5IGJlIGNhbGxlZCBvbmNlLgorCitOb25lIG9mIHRoZSB3YWl0IG9wZXJhdGlvbnMgdW5yZWYgdGhlIEdzdENsb2NrSUQsIHRoZSBvd25lciBpcyAKK3Jlc3BvbnNpYmxlIGZvciB1bnJlZmZpbmcgdGhlIGlkcyBpdHNlbGYuIFRoaXMgaG9sZHMgZm9yIGJvdGggcGVyaW9kaWMgYW5kCitzaW5nbGUgc2hvdCBub3RpZmljYXRpb25zLiBUaGUgcmVhc29uIGJlaW5nIHRoYXQgdGhlIG93bmVyIG9mIHRoZSBDbG9ja0lECitoYXMgdG8ga2VlcCBhIGhhbmRsZSB0byB0aGUgSUQgdG8gdW5ibG9jayB0aGUgd2FpdCBvbiBGTFVTSElORyBldmVudHMKK29yIHN0YXRlIGNoYW5nZXMgYW5kIGlmIHdlIHVucmVmIGl0IGF1dG9tYXRpY2FsbHksIHRoZSBoYW5kbGUgbWlnaHQgYmUKK2ludmFsaWQuCisKK1RoZXNlIGNsb2NrIG9wZXJhdGlvbnMgZG8gbm90IG9wZXJhdGUgb24gdGhlIHN0cmVhbSB0aW1lLCBzbyB0aGUgY2FsbGJhY2tzCit3aWxsIGFsc28gb2NjdXIgd2hlbiBub3QgaW4gUExBWUlORyBzdGF0ZSBhcyBpZiB0aGUgY2xvY2sganVzdCBrZWVwcyBvbiAKK3J1bm5pbmcuIFNvbWUgY2xvY2tzIGhvd2V2ZXIgZG8gbm90IHByb2dyZXNzIHdoZW4gdGhlIGVsZW1lbnQgdGhhdCBwcm92aWRlZAordGhlIGNsb2NrIGlzIG5vdCBQTEFZSU5HLgorCisKK0Nsb2NrIGltcGxlbWVudGF0aW9ucworfn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBHU3RyZWFtZXIgY29yZSBwcm92aWRlcyBhIEdzdFN5c3RlbUNsb2NrIGJhc2VkIG9uIHRoZSBzeXN0ZW0gdGltZS4gCitBc3luY2hyb25vdXMgY2FsbGJhY2tzIGFyZSBzY2hlZHVsZWQgZnJvbSBhbiBpbnRlcm5hbCB0aHJlYWQuCisKK0Nsb2NrIGltcGxlbWVudG9ycyBhcmUgZW5jb3VyYWdlZCB0byBzdWJjbGFzcyB0aGlzIHN5c3RlbWNsb2NrIGFzIGl0CitpbXBsZW1lbnRzIHRoZSBhc3luYyBub3RpZmljYXRpb24uCisKK1N1YmNsYXNzZXMgY2FuIGhvd2V2ZXIgb3ZlcnJpZGUgYWxsIG9mIHRoZSBpbXBvcnRhbnQgbWV0aG9kcyBmb3Igc3luYyBhbmQKK2FzeW5jIG5vdGlmaWNhdGlvbnMgdG8gaW1wbGVtZW50IHRoZWlyIG93biBjYWxsYmFjayBtZXRob2RzIG9yIGJsb2NraW5nCit3YWl0IG9wZXJhdGlvbnMuIAorCisKZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtY29udmVudGlvbnMudHh0IGIvZG9jcy9kZXNpZ24vcGFydC1jb252ZW50aW9ucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlMzMzZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZGVzaWduL3BhcnQtY29udmVudGlvbnMudHh0CkBAIC0wLDAgKzEsNzcgQEAKK0RvY3VtZW50YXRpb24gY29udmVudGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHVlIHRvIHRoZSBwb3RlbnRpYWwgZm9yIGV4cG9uZW50aWFsIGdyb3d0aCwgc2V2ZXJhbCBhYmJyZXZpYXRpbmcgY29udmVudGlvbnMgd2lsbCBiZSB1c2VkIHRocm91Z2hvdXQgdGhpcyAKK2RvY3VtZW50YXRpb24uICBUaGVzZSBjb252ZW50aW9ucyBoYXZlIGdyb3duIHByaW1hcmlseSBmcm9tIGV4dHJlbWVseSBpbi1kZXB0aCBkaXNjdXNzaW9ucyBvZiB0aGUgYXJjaGl0ZWN1cmUgaW4gSVJDLiAgCitUaGlzIGhhcyB2ZXJpZmllZCB0aGUgc2FmZXR5IG9mIHRoZXNlIGNvbnZlbnRpb25zLCBpZiB1c2VkIHByb3Blcmx5LiAgVGhlcmUgYXJlIG5vIGtub3duIG5hbWVzcGFjZSBjb25mbGljdHMgYXMgbG9uZyBhcyAKK2NvbnRleHQgaXMgcmlnb3JvdXNseSBvYnNlcnZlZC4KKworT2JqZWN0IGNsYXNzZXMKK35+fn5+fn5+fn5+fn5+CisKK1NpbmNlIGV2ZXJ5dGhpbmcgc3RhcnRzIHdpdGggR3N0LCB3ZSB3aWxsIGdlbmVyYWxseSByZWZlciB0byBvYmplY3RzIGJ5IHRoZSBzaG9ydGVyIG5hbWUsIGkuZS4gRWxlbWVudCBvciBQYWQuICBUaGVzZSAKK25hbWVzIHdpbGwgYWx3YXlzIGhhdmUgdGhlaXIgZmlyc3QgbGV0dGVyIGNhcGl0YWxpemVkLgorCitGdW5jdGlvbiBuYW1lcworfn5+fn5+fn5+fn5+fn4KKworV2l0aGluIHRoZSBjb250ZXh0IG9mIGEgZ2l2ZW4gb2JqZWN0LCBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGF0IG9iamVjdCdzIGhlYWRlciBhbmQvb3Igc291cmNlIGZpbGUgd2lsbCBoYXZlIHRoZWlyIAorb2JqZWN0LXNwZWNpZmljIHByZWZpeCBzdHJpcHBlZC4gIEZvciBpbnN0YW5jZSwgZ3N0X2VsZW1lbnRfYWRkX3BhZCgpIHdvdWxkIGJlIHJlZmVycmVkIHRvIGFzIHNpbXBseSBfYWRkX3BhZCgpLiAgTm90ZSAKK3RoYXQgdGhlIHRyYWlsaW5nIHBhcmVudGhlc2VzIHNob3VsZCBhbHdheXMgYmUgcHJlc2VudCwgYnV0IHNvbWV0aW1lcyBtYXkgbm90IGJlLiAgQSBwcmVmaXhpbmcgdW5kZXJzY29yZSAoXykgd2lsbCAKK2Fsd2F5cyB0ZWxsIHlvdSBpdCdzIGEgZnVuY3Rpb24sIGhvd2V2ZXIsIHJlZ2FyZGxlc3Mgb2YgdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhlIHRyYWlsaW5nIHBhcmVudGhlc2VzLgorCitkZWZpbmVzIGFuZCBlbnVtcworfn5+fn5+fn5+fn5+fn5+fn4KKworVmFsdWVzIGFuZCBtYWNyb3MgZGVmaW5lZCBhcyBlbnVtcyBhbmQgcHJlcHJvY2Vzc29yIG1hY3JvcyB3aWxsIGJlIHJlZmVycmVkIHRvIGluIGFsbCBjYXBpdGFscywgYXMgcGVyIHRoZWlyIAorZGVmaW5pdGlvbi4gIFRoaXMgaW5jbHVkZXMgb2JqZWN0IGZsYWdzIGFuZCBlbGVtZW50IHN0YXRlcywgYXMgd2VsbCBhcyBnZW5lcmFsIGVudW1zLiAgRXhhbXBsZXMgYXJlIHRoZSBzdGF0ZXMgTlVMTCwgCitSRUFEWSwgUExBWUlORywgYW5kIFBBVVNFRDsgdGhlIGVsZW1lbnQgZmxhZ3MgTE9DS0VEX1NUQVRFICwgYW5kIHN0YXRlIHJldHVybiB2YWx1ZXMgU1VDQ0VTUywgRkFJTFVSRSwgYW5kIAorQVNZTkMuICBXaGVyZSB0aGVyZSBpcyBhIHByZWZpeCwgYXMgaW4gdGhlIGVsZW1lbnQgZmxhZ3MsIHRoaXMgaXMgdXN1YWxseSBkcm9wcGVkLCBhbmQgaW1wbGllZC4gIE5vdCBob3dldmVyIHRoYXQgCitlbGVtZW50IGZsYWdzIHNob3VsZCBiZSBjcm9zcy1jaGVja2VkIHdpdGggdGhlIGhlYWRlciwgYXMgdGhlcmUgYXJlIGN1cnJlbnRseSB0d28gY29udmVudGlvbnMgaW4gdXNlOiB3aXRoIGFuZCB3aXRob3V0IAorX0ZMQUdTXyBpbiB0aGUgbWlkZGxlLgorCitEcmF3aW5nIGNvbnZlbnRpb25zCit+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1doZW4gZHJhd2luZyBwaWN0dXJlcyB0aGUgZm9sb3dpbmcgY29udmVudGlvbnMgYXBwbHk6CisKK29iamVjdHMKK15eXl5eXl4KKworT2JqZWN0cyBhcmUgZHJhd24gd2l0aCBhIGJveCBsaWtlOgorCisgICstLS0tLS0rCisgIHwgICAgICB8CisgICstLS0tLS0rCisgIAorCitwb2ludGVycworXl5eXl5eXl4KKworYSBwb2ludGVyIHRvIGFuIG9iamVjdC4KKworICAgICAgKy0tLS0tKworICotLS0+fCAgICAgfAorICAgICAgKy0tLS0tKworCithbiBpbnZhbGlkIHBvaW50ZXIsIHRoaXMgaXMgYSBwb2ludGVyIHRoYXQgc2hvdWxkIG5vdCBiZSB1c2VkLgorCisgKi0vLy0+CisKKworZWxlbWVudHMKK15eXl5eXl5eCisKKyAgKy0tLS0tLS0tLS0rCisgIHwgbmFtZSAgICAgfAorIHNpbmsgICAgICAgc3JjCisgICstLS0tLS0tLS0tKworCitwYWQgbGlua3MKK15eXl5eXl5eXgorCisgIC0tLS0tKyAgICArLS0tCisgICAgICAgfCAgICB8CisgICAgICBzcmMtLXNpbmsKKyAgLS0tLS0rICAgICstLS0KKwpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1keW5hbWljLnR4dCBiL2RvY3MvZGVzaWduL3BhcnQtZHluYW1pYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE4NTkyNAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZGVzaWduL3BhcnQtZHluYW1pYy50eHQKQEAgLTAsMCArMSwxNCBAQAorRHluYW1pYyBwaXBlbGluZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIG1hbnkgdXNlIGNhc2VzIGZvciBkeW5hbWljYWxseSBjb25zdHJ1Y3RpbmcgYW5kCittYW5pcHVsYXRpbmcgYSBydW5uaW5nIG9yIHBhdXNlZCBwaXBlbGluZSBhbmQgdGhlIGZlYXR1cmVzIHByb3ZpZGVkIGJ5CitHU3RyZWFtZXIuCisKK1doZW4gY29uc3RydWN0aW5nIGR5bmFtaWMgcGlwZWxpbmVzIGl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZQorZm9sbG93aW5nIGZlYXR1cmVzIG9mIGdzdHJlYW1lcjoKKworIC0gcGFkIGJsb2NraW5nIChwYXJ0LWJsb2NrLnR4dCkKKyAtIHBsYXliYWNrIHNlZ21lbnRzLgorIC0gc3RyZWFtaW5nIHZzIGFwcGxpY2F0aW9uIHRocmVhZHMuCisKZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtZWxlbWVudC1zaW5rLnR4dCBiL2RvY3MvZGVzaWduL3BhcnQtZWxlbWVudC1zaW5rLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDAyZGE1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9kZXNpZ24vcGFydC1lbGVtZW50LXNpbmsudHh0CkBAIC0wLDAgKzEsMjkyIEBACitTaW5rIGVsZW1lbnRzCistLS0tLS0tLS0tLS0tCisKK1NpbmsgZWxlbWVudHMgY29uc3VtZSBkYXRhLiBUaGV5IG5vcm1hbGx5IGhhdmUgbm8gc291cmNlIHBhZHMuCisKK1R5cGljYWwgc2luayBlbGVtZW50cyBpbmNsdWRlOgorCisgLSBhdWRpby92aWRlbyByZW5kZXJlcnMKKyAtIG5ldHdvcmsgc2lua3MKKyAtIGZpbGVzaW5rcworCitTaW5rcyBhcmUgaGFyZGVyIHRvIGNvbnN0cnVjdCB0aGFuIG90aGVyIGVsZW1lbnQgdHlwZXMgYXMgdGhleSBhcmUgCit0cmVhdGVkIHNwZWNpYWxseSBieSB0aGUgR1N0cmVhbWVyIGNvcmUuCisKK3N0YXRlIGNoYW5nZXMKK35+fn5+fn5+fn5+fn4KKworQSBzaW5rIGFsd2F5cyByZXR1cm5zIEFTWU5DIGZyb20gdGhlIHN0YXRlIGNoYW5nZSB0byBQQVVTRUQsIHRoaXMgCitpbmNsdWRlcyBhIHN0YXRlIGNoYW5nZSBmcm9tIFJFQURZLT5QQVVTRUQgYW5kIFBMQVlJTkctPlBBVVNFRC4gVGhlCityZWFzb24gZm9yIHRoaXMgaXMgdGhhdCB0aGlzIHdheSB3ZSBjYW4gZGV0ZWN0IHdoZW4gdGhlIGZpcnN0IGJ1ZmZlcgorb3IgZXZlbnQgYXJyaXZlcyBpbiB0aGUgc2luayB3aGVuIHRoZSBzdGF0ZSBjaGFuZ2UgY29tcGxldGVzLgorCitBIHNpbmsgc2hvdWxkIGJsb2NrIG9uIHRoZSBmaXJzdCBFT1MgZXZlbnQgb3IgYnVmZmVyIHJlY2VpdmVkIGluIHRoZQorUkVBRFktPlBBVVNFRCBzdGF0ZSBiZWZvcmUgY29tbWl0aW5nIHRoZSBzdGF0ZSB0byBQQVVTRUQuCisKK0ZMVVNISU5HIGV2ZW50cyBoYXZlIHRvIGJlIGhhbmRsZWQgb3V0IG9mIHN5bmMgd2l0aCB0aGUgYnVmZmVyIGZsb3cKK2FuZCB0YWtlIG5vIHBhcnQgaW4gdGhlIHByZXJvbGwgcHJvY2VkdXJlLgorCitFdmVudHMgb3RoZXIgdGhhbiBFT1MgZG8gbm90IGNvbXBsZXRlIHRoZSBwcmVyb2xsIHN0YWdlLgorCitzaW5rIG92ZXJ2aWV3Cit+fn5+fn5+fn5+fn5+CisKKyAtIFRPRE86IFBSRVJPTExfTE9DSyBjYW4gYmUgcmVtb3ZlZCBhbmQgd2UgY2FuIHNhZmVseSB1c2UgdGhlIFNUUkVBTV9MT0NLLgorCisKKworICAjIGNvbW1pdCB0aGUgc3RhdGUuIFdlIHJldHVybiBUUlVFIGlmIHdlIGNhbiBjb250aW51ZQorICAjIHN0cmVhbWluZywgRkFMU0UgaW4gdGhlIGNhc2Ugd2UgZ28gdG8gYSBSRUFEWSBvciBOVUxMIHN0YXRlLgorICAjIGlmIHdlIGdvIHRvIFBMQVlJTkcsIHdlIGRvbid0IG5lZWQgdG8gYmxvY2sgb24gcHJlcm9sbC4KKyAgY29tbWl0CisgIHsKKyAgICBMT0NLCisgICAgc3dpdGNoIChwZW5kaW5nKQorICAgICAgY2FzZSBQTEFZSU5HOgorICAgICAgICBuZWVkX3ByZXJvbGwgPSBGQUxTRQorCWJyZWFrCisgICAgICBjYXNlIFBBVVNFRDoKKwlicmVhaworICAgICAgY2FzZSBSRUFEWToKKyAgICAgIGNhc2UgTlVMTDoKKyAgICAgICAgcmV0dXJuIEZBTFNFCisgICAgICBjYXNlIFZPSUQ6CisgICAgICAgIHJldHVybiBUUlVFCisKKyAgICAjIHVwZGF0ZSBzdGF0ZQorICAgIHN0YXRlID0gcGVuZGluZworICAgIG5leHQgPSBWT0lECisgICAgcGVuZGluZyA9IFZPSUQKKyAgICBVTkxPQ0sKKyAgICByZXR1cm4gVFJVRQorICB9CisKKyAgIyBzeW5jIGFuIG9iamVjdC4gV2UgaGF2ZSB0byB3YWl0IGZvciB0aGUgZWxlbWVudCB0byByZWFjaAorICAjIHRoZSBQTEFZSU5HIHN0YXRlIGJlZm9yZSB3ZSBjYW4gd2FpdCBvbiB0aGUgY2xvY2suCisgICMgc29tZSBpdGVtcyBkbyBub3QgbmVlZCBzeW5jaHJvbmlzYXRpb24gKG1vc3QgZXZlbnRzKSBzbyB0aGUKKyAgIyBnZXRfdGltZXMgbWV0aG9kIHJldHVybnMgRkFMU0UgKG5vdCBzeW5jYWJsZSkKKyAgIyBuZWVkX3ByZXJvbGwgaW5kaWNhdGVzIHRoYXQgd2UgYXJlIG5vdCBpbiB0aGUgUExBWUlORyBzdGF0ZQorICAjIGFuZCB0aGVyZWZvcmUgbmVlZCB0byBjb21taXQgYW5kIHBvdGVudGlhbGx5IGJsb2NrIG9uIHByZXJvbGwKKyAgIyBpZiBvdXIgY2xvY2tfd2FpdCBnb3QgaW50ZXJydXB0ZWQgd2UgY29tbWl0IGFuZCBibG9jayBhZ2Fpbi4KKyAgIyBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgdGhlIGN1cnJlbnQgaXRlbSBiZWluZyByZW5kZXJlZCBpcworICAjIG5vdCB5ZXQgZmluaXNoZWQgYW5kIHdlIGNhbiB1c2UgdGhhdCBpdGVtIHRvIGZpbmlzaCBwcmVyb2xsLgorICBkb19zeW5jIChvYmopCisgIHsKKyAgICAjIGdldCB0aW1pbmcgaW5mb3JtYXRpb24gZm9yIHRoaXMgb2JqZWN0CisgICAgc3luY2FibGUgPSBnZXRfdGltZXMgKG9iaiwgJnN0YXJ0LCAmc3RvcCkKKyAgICBpZiAoIXN5bmNhYmxlKQorICAgICAgcmV0dXJuIE9LOworIGFnYWluOgorICAgIHdoaWxlIChuZWVkX3ByZXJvbGwpCisgICAgICBpZiAobmVlZF9jb21taXQpCisgICAgICAgIG5lZWRfY29tbWl0ID0gRkFMU0UKKyAgICAgICAgaWYgKCFjb21taXQpCisgICAgICAgICAgcmV0dXJuIFdST05HX1NUQVRFCisKKyAgICAgIGlmIChuZWVkX3ByZXJvbGwpCisgICAgICAgICMgcmVsZWFzZSBQUkVST0xMX0xPQ0sgYW5kIHdhaXQuIHByZXJvbGxlZCBjYW4gYmUgb2JzZXJ2ZWQKKyAgICAgICAgIyBhbmQgd2lsbCBiZSBUUlVFCisgICAgICAgIHByZXJvbGxlZCA9IFRSVUUKKyAgICAgICAgUFJFUk9MTF9XQUlUIChyZWxlYXNpbmcgUFJFUk9MTF9MT0NLKQorICAgICAgICBwcmVyb2xsZWQgPSBGQUxTRQorICAgICAgICBpZiAoZmx1c2hpbmcpCisgICAgICAgICAgcmV0dXJuIFdST05HX1NUQVRFCisKKyAgICBpZiAodmFsaWQgKHN0YXJ0IHx8IHN0b3ApKQorICAgICAgUFJFUk9MTF9VTkxPQ0sKKyAgICAgIGVuZF90aW1lID0gc3RvcAorICAgICAgcmV0ID0gd2FpdF9jbG9jayAob2JqLHN0YXJ0KQorICAgICAgUFJFUk9MTF9MT0NLCisgICAgICBpZiAoZmx1c2hpbmcpCisgICAgICAgIHJldHVybiBXUk9OR19TVEFURSAKKyAgICAgICMgaWYgdGhlIGNsb2NrIHdhcyB1bnNjaGVkdWxlZCwgd2UgcmVkbyB0aGUKKyAgICAgICMgcHJlcm9sbAorICAgICAgaWYgKHJldCA9PSBVTlNDSEVEVUxFRCkKKyAgICAgICAgZ290byBhZ2FpbiAgICAgICAgICAKKyAgfQorCisgICMgcmVuZGVyIGEgcHJlcm9sbGFibGUgaXRlbSAoRU9TIG9yIGJ1ZmZlcikuIEl0IGlzCisgICMgYWx3YXlzIGNhbGxlZCB3aXRoIHRoZSBQUkVST0xMX0xPQ0sgaGVsdC4KKyAgcmVuZGVyX29iamVjdCAob2JqKQorICB7CisgICAgcmV0ID0gZG9fc3luYyAob2JqKQorICAgIGlmIChyZXQgIT0gT0spCisgICAgICByZXR1cm4gcmV0OworCisgICAgIyBwcmVyb2xsIGFuZCBzeW5jaW5nIGRvbmUsIG5vdyB3ZSBjYW4gcmVuZGVyCisgICAgcmVuZGVyKG9iaikKKyAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICMgc2lua3MgdGhhdCBzeW5jIG9uIGJ1ZmZlciBjb250ZW50cyBkbyBsaWtlIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3aGlsZSAobW9yZV90b19yZW5kZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICByZXQgPSByZW5kZXIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBpZiAocmV0ID09IGludGVycnVwdGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICBwcmVyb2xsZWQgPSBUUlVFCisgICAgcmVuZGVyIChidWZmZXIpICAgICAgICAgIC0tLS0tPnwgICAgIFBSRVJPTExfV0FJVCAocmVsZWFzaW5nIFBSRVJPTExfTE9DSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgcHJlcm9sbGVkID0gRkFMU0UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgaWYgKGZsdXNoaW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHJldHVybiBXUk9OR19TVEFURQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAorCisgICMgcXVldWUgYSBwcmVyb2xsYWJsZSBpdGVtIChFT1Mgb3IgYnVmZmVyKS4gSXQgaXMKKyAgIyBhbHdheXMgY2FsbGVkIHdpdGggdGhlIFBSRVJPTExfTE9DSyBoZWx0LgorICAjIFRoaXMgZnVuY3Rpb24gd2lsbCBjb21taXQgdGhlIHN0YXRlIHdoZW4gcmVjZWl2aW5nIHRoZQorICAjIGZpcnN0IHByZXJvbGxhYmxlIGl0ZW0uCisgICMgaXRlbXMgYXJlIHRoZW4gYWRkZWQgdG8gdGhlIHJlbmRlcmluZyBxdWV1ZSBvciByZW5kZXJlZAorICAjIHJpZ2h0IGF3YXkgaWYgbm8gcHJlcm9sbCBpcyBuZWVkZWQuCisgIHF1ZXVlIChvYmosIHByZXJvbGxhYmxlKSAKKyAgeworICAgIGlmIChuZWVkX3ByZXJvbGwpCisgICAgICBpZiAocHJlcm9sbGFibGUpCisgICAgICAgIHF1ZXVlbGVuKysKKworICAgICAgIyBmaXJzdCBpdGVtIGluIHRoZSBxdWV1ZSB3aGlsZSB3ZSBuZWVkIHByZXJvbGwKKyAgICAgICMgd2lsbCBjb21wbGV0ZSBzdGF0ZSBjaGFuZ2UgYW5kIGNhbGwgcHJlcm9sbAorICAgICAgaWYgKHF1ZXVlbGVuID09IDEpCisgICAgICAgIHByZXJvbGwgKG9iaikKKyAgICAgICAgaWYgKG5lZWRfY29tbWl0KQorICAgICAgICAgIG5lZWRfY29tbWl0ID0gRkFMU0UKKyAgICAgICAgICBpZiAoIWNvbW1pdCkKKyAgICAgICAgICAgIHJldHVybiBXUk9OR19TVEFURQorCisgICAgICAjIHRoZW4gc2VlIGlmIHdlIG5lZWQgbW9yZSBwcmVyb2xsIGl0ZW1zIGJlZm9yZSB3ZQorICAgICAgIyBjYW4gYmxvY2sKKyAgICAgIGlmIChuZWVkX3ByZXJvbGwpCisgICAgICAgIGlmIChxdWV1ZWxlbiA8PSBtYXhxdWV1ZSkKKyAgICAgICAgICBxdWV1ZS5hZGQgKG9iaikKKyAgICAgICAgICByZXR1cm4gT0sKKworICAgICMgbm93IGNsZWFyIHRoZSBxdWV1ZSBhbmQgcmVuZGVyIGVhY2ggaXRlbSBiZWZvcmUKKyAgICAjIHJlbmRlcmluZyB0aGUgY3VycmVudCBpdGVtLgorICAgIHdoaWxlIChxdWV1ZS5oYXNJdGVtKQorICAgICAgcmVuZGVyX29iamVjdCAocXVldWUucmVtb3ZlKCkpCisKKyAgICByZW5kZXJfb2JqZWN0IChvYmopCisgICAgcXVldWVsZW4gPSAwCisgIH0KKworICAjIHZhcmlvdXMgZXZlbnQgZnVuY3Rpb25zCisgIGV2ZW50CisgICAgRU9TOgorICAgICAgIyBldmVudHMgbXVzdCBjb21wbGV0ZSBwcmVyb2xsIHRvbworICAgICAgU1RSRUFNX0xPQ0sKKyAgICAgIFBSRVJPTExfTE9DSworICAgICAgaWYgKGZsdXNoaW5nKQorICAgICAgICByZXR1cm4gRkFMU0UKKyAgICAgIHJldCA9IHF1ZXVlIChldmVudCwgVFJVRSkKKyAgICAgIGlmIChyZXQgPT0gV1JPTkdfU1RBVEUpCisgICAgICAgIHJldHVybiBGQUxTRQorICAgICAgUFJFUk9MTF9VTkxPQ0sKKyAgICAgIFNUUkVBTV9VTkxPQ0sKKyAgICAgIGJyZWFrCisgICAgTkVXU0VHTUVOVDoKKyAgICAgICMgdGhlIG5ld3NlZ21lbnQgbXVzdCBiZSB1c2VkIHRvIGNsaXAgaW5jb21pbmcKKyAgICAgICMgYnVmZmVycy4gVGhlbiB0aGVuIGdvIGludG8gdGhlIHF1ZXVlIGFzIG5vbi1wcmVyb2xsYWJsZQorICAgICAgIyBpdGVtcyB1c2VkIGZvciBzeW5jaW5nIHRoZSBidWZmZXJzCisgICAgICBTVFJFQU1fTE9DSworICAgICAgUFJFUk9MTF9MT0NLCisgICAgICBpZiAoZmx1c2hpbmcpCisgICAgICAgIHJldHVybiBGQUxTRQorICAgICAgc2V0X2NsaXAKKyAgICAgIHJldCA9IHF1ZXVlIChldmVudCwgRkFMU0UpCisgICAgICBpZiAocmV0ID09IFdST05HX1NUQVRFKQorICAgICAgICByZXR1cm4gRkFMU0UKKyAgICAgIFBSRVJPTExfVU5MT0NLCisgICAgICBTVFJFQU1fVU5MT0NLCisgICAgICBicmVhaworICAgIEZMVVNIX1NUQVJUOgorICAgICAgIyBzZXQgZmx1c2hpbmcgYW5kIHVuYmxvY2sgYWxsIHRoYXQgaXMgd2FpdGluZworICAgICAgZXZlbnQgICAgICAgICAgICAgICAgICAgLS0tLT4gc3ViY2xhc3NlcyBjYW4gaW50ZXJydXB0IHJlbmRlcgorICAgICAgUFJFUk9MTF9MT0NLCisgICAgICBmbHVzaGluZyA9IFRSVUUKKyAgICAgIHVubG9ja19jbG9jaworICAgICAgUFJFUk9MTF9TSUdOQUwKKyAgICAgIFBSRVJPTExfVU5MT0NLCisgICAgICBTVFJFQU1fTE9DSworICAgICAgbG9zdF9zdGF0ZQorICAgICAgU1RSRUFNX1VOTE9DSworICAgICAgYnJlYWsKKyAgICBGTFVTSF9FTkQ6CisgICAgICAjIHVuc2V0IGZsdXNoaW5nIGFuZCBjbGVhciBhbGwgZGF0YSBhbmQgZW9zCisgICAgICBTVFJFQU1fTE9DSworICAgICAgZXZlbnQgCisgICAgICBQUkVST0xMX0xPQ0sKKyAgICAgIHF1ZXVlLmNsZWFyCisgICAgICBxdWV1ZWxlbiA9IDAKKyAgICAgIGZsdXNoaW5nID0gRkFMU0UKKyAgICAgIGVvcyA9IEZBTFNFCisgICAgICBQUkVST0xMX1VOTE9DSworICAgICAgU1RSRUFNX1VOTE9DSworICAgICAgYnJlYWsKKworICAjIHRoZSBjaGFpbiBmdW5jdGlvbiBjaGVja3MgdGhlIGJ1ZmZlciBmYWxscyB3aXRoaW4gdGhlCisgICMgY29uZmlndXJlZCBzZWdtZW50IGFuZCBxdWV1ZXMgdGhlIGJ1ZmZlciBmb3IgcHJlcm9sbCBhbmQKKyAgIyByZW5kZXJpbmcKKyAgY2hhaW4KKyAgICBTVFJFQU1fTE9DSworICAgIFBSRVJPTExfTE9DSworICAgIGlmIChmbHVzaGluZykKKyAgICAgIHJldHVybiBXUk9OR19TVEFURQorICAgIGlmIChjbGlwKQorICAgICAgcXVldWUgKGJ1ZmZlciwgVFJVRSkKKyAgICBQUkVST0xMX1VOTE9DSworICAgIFNUUkVBTV9VTkxPQ0sKKworICBzdGF0ZQorICAgIHN3aXRjaCAodHJhbnNpdGlvbikKKyAgICAgIFJFQURZX1BBVVNFRDoKKyAgICAgICAgIyBubyBkYXRhcGFzc2luZyBpcyBnb2luZyBvbiBzbyB3ZSBhbHdheXMgcmV0dXJuIEFTWU5DCisgICAgICAgIHJldCA9IEFTWU5DCisJbmVlZF9jb21taXQgPSBUUlVFCisgICAgICAgIGVvcyA9IEZBTFNFCisgICAgICAgIGZsdXNoaW5nID0gRkFMU0UKKwluZWVkX3ByZXJvbGwgPSBUUlVFCisJcHJlcm9sbGVkID0gRkFMU0UKKyAgICAgICAgYnJlYWsKKyAgICAgIFBBVVNFRF9QTEFZSU5HOgorICAgICAgICAjIHdlIGdyYWIgdGhlIHByZXJvbGwgbG9jay4gVGhpcyB3ZSBjYW4gb25seSBkbyBpZiB0aGUKKwkjIGNoYWluIGZ1bmN0aW9uIGlzIGVpdGhlciBkb2luZyBzb21lIGNsb2NrIHN5bmMsIHdlIGFyZQorCSMgd2FpdGluZyBmb3IgcHJlcm9sbCBvciB0aGUgY2hhaW4gZnVuY3Rpb24gaXMgbm90IGJlaW5nIGNhbGxlZC4KKyAgICAgICAgUFJFUk9MTF9MT0NLCisJaWYgKHByZXJvbGxlZCB8fCBlb3MpCisgICAgICAgICAgcmV0ID0gT0sKKwkgIG5lZWRfY29tbWl0ID0gRkFMU0UKKwkgIG5lZWRfcHJlcm9sbCA9IEZBTFNFCisJICBpZiAoZW9zKQorCSAgICBwb3N0X2VvcworCSAgZWxzZQorICAgICAgICAgICAgUFJFUk9MTF9TSUdOQUwKKwllbHNlCisJICBuZWVkX3ByZXJvbGwgPSBUUlVFCisJICBuZWVkX2NvbW1pdCA9IFRSVUUKKyAgICAgICAgICByZXQgPSBBU1lOQworICAgICAgICBQUkVST0xMX1VOTE9DSworICAgICAgICBicmVhaworICAgICAgUExBWUlOR19QQVVTRUQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0+IHN1YmNsYXNzIGNhbiBpbnRlcnJ1cHQgcmVuZGVyCisgICAgICAgICMgd2UgZ3JhYiB0aGUgcHJlcm9sbCBsb2NrLiBUaGlzIHdlIGNhbiBvbmx5IGRvIGlmIHRoZQorCSMgY2hhaW4gZnVuY3Rpb24gaXMgZWl0aGVyIGRvaW5nIHNvbWUgY2xvY2sgc3luYworCSMgb3IgdGhlIGNoYWluIGZ1bmN0aW9uIGlzIG5vdCBiZWluZyBjYWxsZWQuIAorICAgICAgICBQUkVST0xMX0xPQ0sKKwluZWVkX3ByZXJvbGwgPSBUUlVFCisgICAgICAgIHVubG9ja19jbG9jaworCWlmIChwcmVyb2xsZWQgfHwgZW9zKQorICAgICAgICAgIHJldCA9IE9LCisJZWxzZQorICAgICAgICAgIHJldCA9IEFTWU5DCisgICAgICAgIFBSRVJPTExfVU5MT0NLCisgICAgICAgIGJyZWFrCisgICAgICBQQVVTRURfUkVBRFk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0+IHN1YmNsYXNzIGNhbiBpbnRlcnJ1cHQgcmVuZGVyCisgICAgICAgICMgd2UgZ3JhYiB0aGUgcHJlcm9sbCBsb2NrLiBTZXQgdG8gZmx1c2hpbmcgYW5kIHVubG9jaworCSMgZXZlcnl0aGluZy4gVGhpcyBzaG91bGQgZXhpdCB0aGUgY2hhaW4gZnVuY3Rpb25zIGFuZCBzdG9wCisJIyBzdHJlYW1pbmcuCisgICAgICAgIFBSRVJPTExfTE9DSworICAgICAgICBmbHVzaGluZyA9IFRSVUUKKyAgICAgICAgdW5sb2NrX2Nsb2NrCisgICAgICAgIHF1ZXVlLmNsZWFyCisgICAgICAgIHF1ZXVlbGVuID0gMAorICAgICAgICBQUkVST0xMX1NJR05BTAorICAgICAgICByZXQgPSBPSworICAgICAgICBQUkVST0xMX1VOTE9DSworICAgICAgICBicmVhaworCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtc291cmNlLnR4dCBiL2RvY3MvZGVzaWduL3BhcnQtZWxlbWVudC1zb3VyY2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjN2YxM2QKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtc291cmNlLnR4dApAQCAtMCwwICsxLDEzNyBAQAorU291cmNlIGVsZW1lbnRzCistLS0tLS0tLS0tLS0tLS0KKworQSBzb3VyY2UgZWxlbWVudCBpcyBhbiBlbGVtZW50IHRoYXQgcHJvdmlkZXMgZGF0YSB0byB0aGUgcGlwZWxpbmUuIEl0Citkb2VzIHR5cGljYWxseSBub3QgaGF2ZSBhbnkgc2luayAoaW5wdXQpIHBhZHMuCisKK1R5cGljYWwgc291cmNlIGVsZW1lbnRzIGluY2x1ZGU6CisKKyAtIGZpbGUgcmVhZGVycworIC0gbmV0d29yayBlbGVtZW50cyAobGl2ZSBvciBub3QpCisgLSBjYXB0dXJlIGVsZW1lbnRzICh2aWRlby9hdWRpby8uLi4pCisgLSBnZW5lcmF0b3JzIChzaWduYWxzL3ZpZGVvL2F1ZGlvLy4uLikKKworCitMaXZlIHNvdXJjZXMKK35+fn5+fn5+fn5+fgorCitBIHNvdXJjZSBpcyBzYWlkIHRvIGJlIGEgbGl2ZSBzb3VyY2Ugd2hlbiBpdCBoYXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eToKKworICogdGVtcG9yYXJpbHkgc3RvcHBpbmcgcmVhZGluZyBmcm9tIHRoZSBzb3VyY2UgY2F1c2VzIGRhdGEgdG8gYmUgbG9zdC4gCisKK0luIGdlbmVyYWwgd2hlbiB0aGlzIHByb3BlcnR5IGhvbGRzLCB0aGUgc291cmNlIGFsc28gcHJvZHVjZXMgZGF0YSBhdCBhIGZpeGVkCityYXRlLiBNb3N0IHNvdXJjZXMgaGF2ZSBhIGxpbWl0IHRvIHRoZSByYXRlIGF0IHdoaWNoIHRoZXkgY2FuIGRlbGl2ZXIgZGF0YSwgd2hpY2gKK21pZ2h0IGJlIGZhc3RlciBvciBzbG93ZXIgdGhhbiB0aGUgY29uc3VtcHRpb24gcmF0ZS4gdGhpcyBwcm9wZXJ0eSBob3dldmVyIGRvZXMKK25vdCBtYWtlIHRoZW0gYSBsaXZlIHNvdXJjZS4KKworTGV0J3MgbG9vayBhdCBzb21lIGV4YW1wbGUgc291cmNlcy4KKworIC0gZmlsZSByZWFkZXJzOiB5b3UgY2FuIFBBVVNFIHdpdGhvdXQgbG9zaW5nIGRhdGEuIFRoZXJlIGlzIGhvd2V2ZXIgYSBsaW1pdCB0bworICAgaG93IGZhc3QgeW91IGNhbiByZWFkIGZyb20gdGhpcyBzb3VyY2UuIFRoaXMgbGltaXQgaXMgdXN1YWxseSBtdWNoIGhpZ2hlcgorICAgdGhhbiB0aGUgY29uc3VtcHRpb24gcmF0ZS4gSW4gc29tZSBjYXNlcyBpdCBtaWdodCBiZSBzbG93ZXIgKGFuIE5GUyBzaGFyZSwKKyAgIGZvciBleGFtcGxlKSBpbiB3aGljaCBjYXNlIHlvdSBtaWdodCBuZWVkIHRvIHVzZSBzb21lIGJ1ZmZlcmluZworICAgKHNlZSBwYXJ0LWJ1ZmZlcmluZy50eHQpLgorCisgLSBodHRwIG5ldHdvcmsgZWxlbWVudDogeW91IGNhbiBQQVVTRSB3aXRob3V0IGRhdGEgbG9zcy4gRGVwZW5kaW5nIG9uIHRoZQorICAgYXZhaWxhYmxlIG5ldHdvcmsgYmFuZHdpZHRoLCBjb25zdW1wdGlvbiByYXRlIG1pZ2h0IGJlIGhpZ2hlciB0aGFuIHByb2R1Y3Rpb24KKyAgIHJhdGUgaW4gd2hpY2ggY2FzZSBidWZmZXJpbmcgc2hvdWxkIGJlIHVzZWQgKHNlZSBwYXJ0LWJ1ZmZlcmluZy50eHQpLgorICAKKyAtIGF1ZGlvIHNvdXJjZTogcGF1c2luZyB0aGUgYXVkaW8gY2FwdHVyZSB3aWxsIGxlYWQgdG8gbG9zdCBkYXRhLiB0aGlzIHNvdXJjZQorICAgaXMgdGhlcmVmb3JlIGRlZmluYXRseSBsaXZlLiBJbiBhZGRpdGlvbiwgYW4gYXVkaW8gc291cmNlIHdpbGwgcHJvZHVjZSBkYXRhCisgICBhdCBhIGZpeGVkIHJhdGUgKHRoZSBzYW1wbGVyYXRlKS4gQWxzbyBkZXBlbmRpbmcgb24gdGhlIGJ1ZmZlcnNpemUsIHRoaXMKKyAgIHNvdXJjZSB3aWxsIGludHJvZHVjZSBhIGxhdGVuY3kgKHNlZSBwYXJ0LWxhdGVuY3kudHh0KS4KKworIC0gdWRwIG5ldHdvcmsgc291cmNlOiBQYXVzaW5nIHRoZSByZWNlaXZpbmcgcGFydCB3aWxsIGxlYWQgdG8gbG9zdCBkYXRhLiBUaGlzCisgICBzb3VyY2UgaXMgdGhlcmVmb3JlIGEgbGl2ZSBzb3VyY2UuIEFsc28gaW4gYSB0eXBpY2FsIGNhc2UgdGhlIHVkcCBwYWNrZXRzCisgICB3aWxsIGJlIHJlY2VpdmVkIGF0IGEgY2VydGFpbiByYXRlLCB3aGljaCBtaWdodCBiZSBkaWZmaWN1bHQgdG8gZ3Vlc3MgYmVjYXVzZQorICAgb2YgbmV0d29yayBqaXR0ZXIuIFRoaXMgc291cmNlIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGludHJvZHVjZSBsYXRlbmN5IG9uIGl0cworICAgb3duLgorCisgLSBkdmIgc291cmNlOiBQQVVTSU5HIHRoaXMgZWxlbWVudCB3aWxsIGxlYWQgdG8gZGF0YSBsb3NzLCBpdCdzIGEgbGl2ZSBzb3VyY2UKKyAgIHNpbWlsYXIgdG8gYSBVRFAgc291cmNlLiAKKworCitTb3VyY2UgdHlwZXMKK35+fn5+fn5+fn5+fgorCitBIHNvdXJjZSBlbGVtZW50IGNhbiBvcGVyYXRlIGluIHRocmVlIHdheXM6CisKKyAgLSBpdCBpcyBmdWxseSBzZWVrYWJsZSwgdGhpcyBtZWFucyB0aGF0IHJhbmRvbSBhY2Nlc3MgY2FuIGJlIHBlcmZvcm1lZAorICAgIG9uIGl0IGluIGFuIGVmZmljaWVudCB3YXkuIChhIGZpbGUgcmVhZGVyLC4uLikuIFRoaXMgYWxzbyB0eXBpY2FsbHkKKyAgICBtZWFucyB0aGF0IHRoZSBzb3VyY2UgaXMgbm90IGxpdmUuCisKKyAgLSBkYXRhIGNhbiBiZSBvYnRhaW5lZCBmcm9tIGl0IHdpdGggYSB2YXJpYWJsZSBzaXplLiBUaGlzIG1lYW5zIHRoYXQKKyAgICB0aGUgc291cmNlIGNhbiBnaXZlIE4gYnl0ZXMgb2YgZGF0YS4gQW4gZXhhbXBsZSBpcyBhbiBhdWRpbyBzb3VyY2UuCisgICAgQSB2aWRlbyBzb3VyY2UgYWx3YXlzIHByb3ZpZGVzIHRoZSBzYW1lIGFtb3VudCBvZiBkYXRhIChvbmUgdmlkZW8gCisgICAgZnJhbWUpLiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgYSBmdWxseSBzZWVrYWJsZSBzb3VyY2UuCisKKyAgLSBpdCBpcyBhIGxpdmUgc291cmNlLCBzZWUgYWJvdmUuCisKK1doZW4gd3JpdGluZyBhIHNvdXJjZSwgb25lIGhhcyB0byBsb29rIGF0IGhvdyB0aGUgc291cmNlIGNhbiBvcGVyYXRlIHRvCitkZWNpZGUgb24gdGhlIHNjaGVkdWxpbmcgbWV0aG9kcyB0byBpbXBsZW1lbnQgb24gdGhlIHNvdXJjZS4KKworICAtIGZ1bGx5IHNlZWthYmxlIHNvdXJjZXMgaW1wbGVtZW50IGEgZ2V0cmFuZ2UgZnVuY3Rpb24gb24gdGhlIHNvdXJjZSBwYWQuCisKKyAgLSBzb3VyY2VzIHRoYXQgY2FuIGdpdmUgTiBieXRlcyBidXQgY2Fubm90IGRvIHNlZWtpbmcgYWxzbyBpbXBsZW1lbnQgYQorICAgIGdldHJhbmdlIGZ1bmN0aW9uIGJ1dCBzdGF0ZSB0aGF0IHRoZXkgY2Fubm90IGRvIHJhbmRvbSBhY2Nlc3MuCisKKyAgLSBzb3VyY2VzIHRoYXQgYXJlIHB1cmVseSBsaXZlIHNvdXJjZXMgaW1wbGVtZW50IGEgdGFzayB0byBwdXNoIG91dAorICAgIGRhdGEuCisKK0FueSBzb3VyY2UgdGhhdCBoYXMgYSBnZXRyYW5nZSBmdW5jdGlvbiBtdXN0IGFsc28gaW1wbGVtZW50IGEgcHVzaCBiYXNlZAorc2NoZWR1bGluZyBtb2RlLiBJbiB0aGlzIG1vZGUgdGhlIHNvdXJjZSBzdGFydHMgYSB0YXNrIHRoYXQgZ2V0cyBOIGJ5dGVzCithbmQgcHVzaGVzIHRoZW0gb3V0LiBXaGVuZXZlciBwb3NzaWJsZSwgdGhlIHBlZXIgZWxlbWVudCB3aWxsIHNlbGVjdCB0aGUKK2dldHJhbmdlIGJhc2VkIHNjaGVkdWxpbmcgbWV0aG9kIG9mIHRoZSBzb3VyY2UsIHRob3VnaC4KKworQSBzb3VyY2Ugd2l0aCBhIGdldHJhbmdlIGZ1bmN0aW9uIG11c3QgYWN0aXZhdGUgaXRzZWxmIGluIHRoZSBwYWQgYWN0aXZhdGUKK2Z1bmN0aW9uLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBkb3duc3RyZWFtIHBlZXIgZWxlbWVudCB3aWxsIGRlY2lkZQorYW5kIGFjdGl2YXRlIHRoZSBzb3VyY2UgZWxlbWVudCBpbiBpdHMgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIGJlZm9yZSB0aGUKK3NvdXJjZSdzIHN0YXRlIGNoYW5nZSBmdW5jdGlvbiBpcyBjYWxsZWQuCisKKworU291cmNlIGJhc2UgY2xhc3Nlcworfn5+fn5+fn5+fn5+fn5+fn5+fgorCitHc3RCYXNlU3JjOgorCitUaGlzIGJhc2UgY2xhc3MgcHJvdmlkZXMgYW4gaW1wbGVtZW50YXRpb24gb2YgYSByYW5kb20gYWNjZXNzIHNvdXJjZSBhbmQKK2lzIHZlcnkgd2VsbCBzdWl0ZWQgZm9yIGZpbGUgcmVhZGVyIGxpa2Ugc291cmNlcy4KKworCitHc3RQdXNoU3JjOgorCitCYXNlIGNsYXNzIGZvciBibG9jay1iYXNlZCBzb3VyY2VzLiBUaGlzIGNsYXNzIGlzIG1vc3RseSB1c2VmdWwgZm9yIAorZWxlbWVudHMgdGhhdCBjYW5ub3QgZG8gcmFuZG9tIGFjY2Vzcywgb3IgYXQgbGVhc3QgdmVyeSBzbG93bHkuIFRoZQorc291cmNlIHVzdWFsbHkgcHJlZmVycyB0byBwdXNoIG91dCBhIGZpeGVkIHNpemUgYnVmZmVyLgorCitDbGFzc2VzIGV4dGVuZGluZyB0aGlzIGJhc2UgY2xhc3Mgd2lsbCB1c3VhbGx5IGJlIHNjaGVkdWxlZCBpbiBhIHB1c2gKK2Jhc2VkIG1vZGUuIEl0IHRoZSBwZWVyIGFjY2VwdHMgdG8gb3BlcmF0ZSB3aXRob3V0IG9mZnNldHMgYW5kIHdpdGhpbmcKK3RoZSBsaW1pdHMgb2YgdGhlIGFsbG93ZWQgYmxvY2sgc2l6ZSwgdGhpcyBjbGFzcyBjYW4gb3BlcmF0ZSBpbiBnZXRyYW5nZQorYmFzZWQgbW9kZSBhdXRvbWF0aWNhbGx5LgorCitUaGUgc3ViY2xhc3Mgc2hvdWxkIGV4dGVuZCB0aGUgbWV0aG9kcyBmcm9tIHRoZSBiYXNlY2xhc3MgaW4KK2FkZGl0aW9uIHRvIHRoZSBjcmVhdGUgbWV0aG9kLiBJZiB0aGUgc291cmNlIGlzIHNlZWthYmxlLCBpdAorbmVlZHMgdG8gb3ZlcnJpZGUgR3N0QmFzZVNyYzo6ZXZlbnQoKSBpbiBhZGRpdGlvbiB0byAKK0dzdEJhc2VTcmM6OmlzX3NlZWthYmxlKCkgaW4gb3JkZXIgdG8gcmV0cmlldmUgdGhlIHNlZWsgb2Zmc2V0LAord2hpY2ggaXMgdGhlIG9mZnNldCBvZiB0aGUgbmV4dCBidWZmZXIgdG8gYmUgcmVxdWVzdGVkLgorCitGbHVzaGluZywgc2NoZWR1bGluZyBhbmQgc3luYyBpcyBhbGwgaGFuZGxlZCBieSB0aGlzIGJhc2UgY2xhc3MuCisKKworVGltZXN0YW1wcworfn5+fn5+fn5+fgorCitBIG5vbi1saXZlIHNvdXJjZSBzaG91bGQgdGltZXN0YW1wIHRoZSBidWZmZXJzIGl0IHByb2R1Y2VzIHN0YXJ0aW5nIGZyb20gMC4gSWYKK2l0IGlzIG5vdCBwb3NzaWJsZSB0byB0aW1lc3RhbXAgZXZlcnkgYnVmZmVyIChmaWxlc3JjKSwgdGhlIHNvdXJjZSBpcyBhbGxvd2VkIHRvCitvbmx5IHRpbWVzdGFtcCB0aGUgZmlyc3QgYnVmZmVyIChhcyAwKS4KKworTGl2ZSBzb3VyY2VzIG9ubHkgcHJvZHVjZSBkYXRhIGluIHRoZSBQTEFZSU5HIHN0YXRlLCB3aGVuIHRoZSBjbG9jayBpcyBydW5uaW5nLgorVGhleSBzaG91bGQgdGltZXN0YW1wIGVhY2ggYnVmZmVyIHRoZXkgcHJvZHVjZSB3aXRoIHRoZSBjdXJyZW50IHJ1bm5pbmdfdGltZSBvZgordGhlIHBpcGVsaW5lLCB3aGljaCBpcyBleHByZXNzZWQgYXM6CisKKyAgICBhYnNvbHV0ZV90aW1lIC0gYmFzZV90aW1lCisKK1dpdGggYWJzb2x1dGVfdGltZSB0aGUgdGltZSBvYnRhaW5lZCBmcm9tIHRoZSBnbG9iYWwgcGlwZWxpbmUgd2l0aAorZ3N0X2Nsb2NrX2dldF90aW1lKCkgYW5kIGJhc2VfdGltZSBiZWluZyB0aGUgdGltZSBvZiB0aGF0IGNsb2NrIHdoZW4gdGhlCitwaXBlbGluZSB3YXMgbGFzdCBzZXQgdG8gUExBWUlORy4KKwpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1lbGVtZW50LXRyYW5zZm9ybS50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtdHJhbnNmb3JtLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2MxMWI4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9kZXNpZ24vcGFydC1lbGVtZW50LXRyYW5zZm9ybS50eHQKQEAgLTAsMCArMSwzMDggQEAKK1RyYW5zZm9ybSBlbGVtZW50cworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RyYW5zZm9ybSBlbGVtZW50cyB0cmFuc2Zvcm0gaW5wdXQgYnVmZmVycyB0byBvdXRwdXQgYnVmZmVycyBiYXNlZAorb24gdGhlIHNpbmsgYW5kIHNvdXJjZSBjYXBzLiAKKworQW4gaW1wb3J0YW50IHJlcXVpcmVtZW50IGZvciBhIHRyYW5zZm9ybSBpcyB0aGF0IHRoZSBvdXB1dCBjYXBzIGFyZSBjb21wbGV0ZWx5CitkZWZpbmVkIGJ5IHRoZSBpbnB1dCBjYXBzIGFuZCB2aWNlIHZlcnNhLiBUaGlzIG1lYW5zIHRoYXQgYSB0eXBpY2FsIGRlY29kZXIKK2VsZW1lbnQgY2FuIE5PVCBiZSBpbXBsZW1lbnRlZCB3aXRoIGEgdHJhbnNmb3JtIGVsZW1lbnQsIHRoaXMgaXMgYmVjYXVzZSB0aGUKK291dHB1dCBjYXBzIGxpa2Ugd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgZGVjb21wZXNzZWQgdmlkZW8gZnJhbWUsIGZvciBleGFtcGxlLAorYXJlIGVuZGNvZGVkIGluIHRoZSBzdHJlYW0gYW5kIHRodXMgbm90IGRlZmluZWQgYnkgdGhlIGlucHV0IGNhcHMuCisKK1R5cGljYWwgdHJhbnNmb3JtIGVsZW1lbnRzIGluY2x1ZGU6CisKKyAtIGF1ZGlvIGNvbnZlcnRvcnMgKGF1ZGlvY29udmVydCwgYXVkaW9yZXNhbXBsZSwuLi4pCisgLSB2aWRlbyBjb252ZXJ0b3JzIChjb2xvcnNwYWNlLCB2aWRlb3NjYWxlLCAuLi4pCisgLSBmaWx0ZXJzIChjYXBmaWx0ZXIsIHZvbHVtZSwgY29sb3JiYWxhbmNlLCAuLi4pCisKK1RoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgdHJhbnNmb3JtIGVsZW1lbnQgaGFzIHRvIHRha2UgY2FyZSBvZgordGhlIGZvbGxvd2luZyB0aGluZ3M6CisKKyAtIGVmZmljaWVudCBuZWdvdGlhdGlvbiBib3RoIHVwIGFuZCBkb3duc3RyZWFtCisgLSBlZmZpY2llbnQgYnVmZmVyIGFsbG9jIGFuZCBvdGhlciBidWZmZXIgbWFuYWdlbWVudAorCitTb21lIHRyYW5zZm9ybSBlbGVtZW50cyBjYW4gb3BlcmF0ZSBpbiBkaWZmZXJlbnQgbW9kZXM6CisKKyAtIHBhc3N0aHJvdWdoIChubyBjaGFuZ2VzIGFyZSBkb25lIG9uIHRoZSBpbnB1dCBidWZmZXJzKQorIC0gaW4tcGxhY2UgKGNoYW5nZXMgbWFkZSBkaXJlY3RseSB0byB0aGUgaW5jb21pbmcgYnVmZmVycyB3aXRob3V0IHJlcXVpcmluZyBhCisgICBjb3B5IG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbikKKyAtIG1ldGFkYXRhIGNoYW5nZXMgb25seSAKKyAKK0RlcGVuZGluZyBvbiB0aGUgbW9kZSBvZiBvcGVyYXRpb24gdGhlIGJ1ZmZlciBhbGxvY2F0aW9uIHN0cmF0ZWd5IG1pZ2h0IGNoYW5nZS4KKworVGhlIHRyYW5zZm9ybSBlbGVtZW50IHNob3VsZCBhdCBhbnkgcG9pbnQgYmUgYWJsZSB0byByZW5lZ290aWF0ZSBzaW5rIGFuZCBzcmMKK2NhcHMgYXMgd2VsbCBhcyBjaGFuZ2UgdGhlIG9wZXJhdGlvbiBtb2RlLgorCitJbiBhZGRpdGlvbiwgdGhlIHRyYW5zZm9ybSBlbGVtZW50IHdpbGwgdHlwaWNhbGx5IHRha2UgY2FyZSBvZiB0aGUgZm9sbG93aW5nCit0aGluZ3MgYXMgd2VsbDoKKworIC0gZmx1c2hpbmcsIHNlZWtpbmcKKyAtIHN0YXRlIGNoYW5nZXMKKyAtIHRpbWVzdGFtcGluZywgdGhpcyBpcyB0eXBpY2FsbHkgZG9uZSBieSBjb3B5aW5nIHRoZSBpbnB1dCB0aW1lc3RhbXBzIHRvIHRoZQorICAgb3V0cHV0IGJ1ZmZlcnMgYnV0IHN1YmNsYXNzZXMgc2hvdWxkIGJlIGFibGUgdG8gb3ZlcnJpZGUgdGhpcy4KKyAtIFFvUywgYXZvaWRpbmcgY2FsbHMgdG8gdGhlIHN1YmNsYXNzIHRyYW5zZm9ybSBmdW5jdGlvbgorIC0gaGFuZGxlIHNjaGVkdWxpbmcgaXNzdWVzIHN1Y2ggYXMgcHVzaCBhbmQgcHVsbCBiYXNlZCBvcGVyYXRpb24uCisKK0luIHRoZSBuZXh0IHNlY3Rpb25zLCB3ZSB3aWxsIGRlc2NyaWJlIHRoZSBiZWhhdmlvdXIgb2YgdGhlIHRyYW5zZm9ybSBlbGVtZW50IGluCitlYWNoIG9mIHRoZSBhYm92ZSB1c2UgY2FzZXMuIFdlIGZvY3VzIG1vc3RseSBvbiB0aGUgYnVmZmVyIGFsbG9jYXRpb24gc3RyYXRlZ2llcworYW5kIGNhcHMgbmVnb3RpYXRpb24uCisKK1Byb2Nlc3NpbmcKK35+fn5+fn5+fn4KKworQSB0cmFuc2Zvcm0gaGFzIDIgbWFpbiBwcm9jZXNzaW5nIGZ1bmN0aW9uczoKKworIC0gdHJhbnNmb3JtKCk6CisKKyAgIFRyYW5zZm9ybSB0aGUgaW5wdXQgYnVmZmVyIHRvIHRoZSBvdXRwdXQgYnVmZmVyLiBUaGUgb3V0cHV0IGJ1ZmZlciBpcworICAgZ3VhcmFudGVlZCB0byBiZSB3cml0YWJsZSBhbmQgZGlmZmVyZW50IGZyb20gdGhlIGlucHV0IGJ1ZmZlci4KKworIC0gdHJhbnNmb3JtX2lwKCk6CisKKyAgIFRyYW5zZm9ybSB0aGUgaW5wdXQgYnVmZmVyIGluLXBsYWNlLiBUaGUgaW5wdXQgYnVmZmVyIGlzIHdyaXRhYmxlIGFuZCBvZgorICAgYmlnZ2VyIG9yIGVxdWFsIHNpemUgdGhhbiB0aGUgb3V0cHV0IGJ1ZmZlci4gCisKK0EgdHJhbnNmb3JtIGNhbiBvcGVyYXRlIGluIHRoZSBmb2xsb3dpbmcgbW9kZXM6CisKKyAtIHBhc3N0aHJvdWdoOgorCisgICBUaGUgZWxlbWVudCB3aWxsIG5vdCBtYWtlIGNoYW5nZXMgdG8gdGhlIGJ1ZmZlcnMsIGJ1ZmZlcnMgYXJlIHB1c2hlZCBzdHJhaWdodAorICAgdGhyb3VnaCwgY2FwcyBvbiBib3RoIHNpZGVzIG5lZWQgdG8gYmUgdGhlIHNhbWUuIFRoZSBlbGVtZW50IGNhbiBvcHRpb25hbGx5CisgICBpbXBsZW1lbnQgYSB0cmFuc2Zvcm1faXAoKSBmdW5jdGlvbiB0byB0YWtlIGEgbG9vayBhdCB0aGUgZGF0YSwgdGhlIGJ1ZmZlcgorICAgZG9lcyBub3QgaGF2ZSB0byBiZSB3cml0YWJsZS4KKworIC0gaW4tcGxhY2U6CisKKyAgIENoYW5nZXMgY2FuIGJlIG1hZGUgdG8gdGhlIGlucHV0IGJ1ZmZlciBkaXJlY3RseSB0byBvYnRhaW4gdGhlIG91dHB1dCBidWZmZXIuCisgICBUaGUgdHJhbnNmb3JtIG11c3QgaW1wbGVtZW50IGEgdHJhbnNmb3JtX2lwKCkgZnVuY3Rpb24uCisKKyAtIGNvcHktdHJhbnNmb3JtCisKKyAgIFRoZSB0cmFuc2Zvcm0gaXMgcGVyZm9ybWVkIGJ5IGNvcHlpbmcgYW5kIHRyYW5zZm9ybWluZyB0aGUgaW5wdXQgYnVmZmVyIHRvIGEKKyAgIG5ldyBvdXRwdXQgYnVmZmVyLiBUaGUgdHJhbnNmb3JtIG11c3QgaW1wbGVtZW50IGEgdHJhbnNmb3JtKCkgZnVuY3Rpb24uCisKK1doZW4gbm8gdHJhbnNmb3JtKCkgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIG9ubHkgaW4tcGxhY2UgYW5kIHBhc3N0aHJvdWdoCitvcGVyYXRpb24gaXMgYWxsb3dlZCwgdGhpcyBtZWFucyB0aGF0IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gY2FwcyBtdXN0IGJlIGVxdWFsCitvciB0aGF0IHRoZSBzb3VyY2UgYnVmZmVyIHNpemUgaXMgYmlnZ2VyIG9yIGVxdWFsIHRoYW4gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4KKworV2hlbiBubyB0cmFuc2Zvcm1faXAoKSBmdW5jdGlvbiBpcyBwcm92aWRlZCwgb25seSBwYXNzdGhyb3VnaCBhbmQKK2NvcHktdHJhbnNmb3JtcyBhcmUgc3VwcG9ydGVkLiBQcm92aWRpbmcgdGhpcyBmdW5jdGlvbiBpcyBhbiBvcHRpbWlzYXRpb24gdGhhdAorY2FuIGF2b2lkIGEgYnVmZmVyIGNvcHkuCisKK1doZW4gbm8gZnVuY3Rpb25zIGFyZSBwcm92aWRlZCwgd2UgY2FuIG9ubHkgcHJvY2VzcyBpbiBwYXNzdGhyb3VnaCBtb2RlLgorCisKK05lZ290aWF0aW9uCit+fn5+fn5+fn5+fgorCitUeXBpY2FsIChyZSluZWdvdGlhdGlvbiBvZiB0aGUgdHJhbnNmb3JtIGVsZW1lbnQgaW4gcHVzaCBtb2RlIGFsd2F5cyBnb2VzIGZyb20KK3NpbmsgdG8gc3JjLCB0aGlzIG1lYW5zIHRyaWdnZXJzIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2U6CisgCisgIC0gdGhlIHNpbmtwYWQgcmVjZWl2ZXMgYSBuZXcgY2FwcyBldmVudC4KKyAgLSB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uIGZpZ3VyZXMgb3V0IHdoYXQgaXQgY2FuIGNvbnZlcnQgdGhlc2UgY2FwcyB0by4KKyAgLSB0cnkgdG8gc2VlIGlmIHdlIGNhbiBjb25maWd1cmUgdGhlIGNhcHMgdW5tb2RpZmllZCBvbiB0aGUgcGVlci4gV2UgbmVlZCB0bworICAgIGRvIHRoaXMgYmVjYXVzZSB3ZSBwcmVmZXIgdG8gbm90IGRvIGFueXRoaW5nLgorICAtIHRoZSB0cmFuc2Zvcm0gY29uZmlndXJlcyBpdHNlbGYgdG8gdHJhbnNmb3JtIGZyb20gdGhlIG5ldyBzaW5rIGNhcHMgdG8gdGhlCisgICAgdGFyZ2V0IHNyYyBjYXBzCisgIC0gdGhlIHRyYW5zZm9ybSBwcm9jZXNzZXMgYW5kIHNldHMgdGhlIG91dHB1dCBjYXBzIG9uIHRoZSBzcmMgcGFkCisKK1dlIGNhbGwgdGhpcyBkb3duc3RyZWFtIG5lZ290aWF0aW9uIChETikgYW5kIGl0IGdvZXMgcm91Z2hseSBsaWtlIHRoaXM6CisKKyAgICAgICAgICAgICAgIHNpbmtwYWQgICAgICAgICAgICAgIHRyYW5zZm9ybSAgICAgICAgICAgICAgIHNyY3BhZAorICAgICBDQVBTIGV2ZW50ICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIC0tLS0tLS0tLS0tLT58ICBmaW5kX3RyYW5zZm9ybSgpICB8ICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tPnwgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICBDQVBTIGV2ZW50ICAgICB8CisgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tPnwKKyAgICAgICAgICAgICAgICAgIHwgPGNvbmZpZ3VyZSBjYXBzPiA8LXwgICAgICAgICAgICAgICAgICAgICAgfAorCisKK1RoZXNlIHN0ZXBzIGNvbmZpZ3VyZSB0aGUgZWxlbWVudCBmb3IgYSB0cmFuc2Zvcm1hdGlvbiBmcm9tIHRoZSBpbnB1dCBjYXBzIHRvCit0aGUgb3V0cHV0IGNhcHMuCisKK1RoZSB0cmFuc2Zvcm0gaGFzIDMgZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUgbmVnb3RpYXRpb246CisKKyAgIC0gdHJhbnNmb3JtX2NhcHMoKToKKyAgICAgCisgICAgIFRyYW5zZm9ybSB0aGUgY2FwcyBvbiBhIGNlcnRhaW4gcGFkIHRvIGFsbCB0aGUgcG9zc2libGUgc3VwcG9ydGVkIGNhcHMgb24KKyAgICAgdGhlIG90aGVyIHBhZC4gVGhlIGlucHV0IGNhcHMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgYSBzaW1wbGUgY2FwcyB3aXRoIGp1c3QKKyAgICAgb25lIHN0cnVjdHVyZS4gVGhlIGNhcHMgZG8gbm90IGhhdmUgdG8gYmUgZml4ZWQuCisgICAgICAKKyAgIC0gZml4YXRlX2NhcHMoKToKKworICAgICBHaXZlbiBhIGNhcHMgb24gb25lIHBhZCwgZml4YXRlIHRoZSBjYXBzIG9uIHRoZSBvdGhlciBwYWQuIFRoZSB0YXJnZXQgY2FwcworICAgICBhcmUgd3JpdGFibGUuCisKKyAgIC0gc2V0X2NhcHMoKToKKworICAgICBDb25maWd1cmUgdGhlIHRyYW5zZm9ybSBmb3IgYSB0cmFuc2Zvcm1hdGlvbiBiZXR3ZWVuIHNyYyBjYXBzIGFuZCBkZXN0CisgICAgIGNhcHMuIEJvdGggY2FwcyBhcmUgZ3VhcmFudGVlZCB0byBiZSBmaXhlZCBjYXBzLgorCitJZiBubyB0cmFuc2Zvcm1fY2FwcygpIGlzIGRlZmluZWQsIHdlIGNhbiBvbmx5IHBlcmZvcm0gdGhlIGlkZW50aXR5IHRyYW5zZm9ybSwKK2J5IGRlZmF1bHQuIAorCitJZiBubyBzZXRfY2FwcygpIGlzIGRlZmluZWQsIHdlIGRvbid0IGNhcmUgYWJvdXQgY2Fwcy4gSW4gdGhhdCBjYXNlIHdlIGFsc28KK2Fzc3VtZSBub3RoaW5nIGlzIGdvaW5nIHRvIHdyaXRlIHRvIHRoZSBidWZmZXIgYW5kIHdlIGRvbid0IGVuZm9yY2UgYSB3cml0YWJsZQorYnVmZmVyIGZvciB0aGUgdHJhbnNmb3JtX2lwIGZ1bmN0aW9uLCB3aGVuIHByZXNlbnQuCisKK09uZSBjb21tb24gZnVuY3Rpb24gdGhhdCB3ZSBuZWVkIGZvciB0aGUgdHJhbnNmb3JtIGVsZW1lbnQgaXMgdG8gZmluZCB0aGUgYmVzdAordHJhbnNmb3JtIGZyb20gb25lIGZvcm1hdCAoc3JjKSB0byBhbm90aGVyIChkZXN0KS4gU29tZSByZXF1aXJlbWVudHMgb2YgdGhpcworZnVuY3Rpb24gYXJlOgorCisgICAtIGhhcyBhIGZpeGVkIHNyYyBjYXBzCisgICAtIGZpbmRzIGEgZml4ZWQgZGVzdCBjYXBzIHRoYXQgdGhlIHRyYW5zZm9ybSBlbGVtZW50IGNhbiB0cmFuc2Zvcm0gdG8KKyAgIC0gdGhlIGRlc3QgY2FwcyBhcmUgY29tcGF0aWJsZSBhbmQgY2FuIGJlIGFjY2VwdGVkIGJ5IHBlZXIgZWxlbWVudHMKKyAgIC0gdGhlIHRyYW5zZm9ybSBmdW5jdGlvbiBwcmVmZXJzIHRvIG1ha2Ugc3JjIGNhcHMgPT0gZGVzdCBjYXBzCisgICAtIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gY2FuIG9wdGlvbmFsbHkgZml4YXRlIGRlc3QgY2Fwcy4KKworVGhlIGZpbmRfdHJhbnNmb3JtKCkgZnVuY3Rpb24gZ29lcyBsaWtlIHRoaXM6CisKKyAgIC0gc3RhcnQgZnJvbSBzcmMgYXBzLCB0aGVzZSBjYXBzIGFyZSBmaXhlZC4KKyAgIC0gY2hlY2sgaWYgdGhlIGNhcHMgYXJlIGFjY2VwdGFibGUgZm9yIHVzIGFzIHNyYyBjYXBzLiBUaGlzIGlzIHVzdWFsbHkKKyAgICAgZW5mb3JjZWQgYnkgdGhlIHBhZHRlbXBsYXRlIG9mIHRoZSBlbGVtZW50LgorICAgLSBjYWxjdWxhdGUgYWxsIGNhcHMgd2UgY2FuIHRyYW5zZm9ybSB0b28gd2l0aCB0cmFuc2Zvcm1fY2FwcygpCisgICAtIGlmIHRoZSBvcmlnaW5hbCBjYXBzIGFyZSBhIHN1YnNldCBvZiB0aGUgdHJhbnNmb3JtcywgdHJ5IHRvIHNlZSBpZiB0aGUKKyAgICAgdGhlIGNhcHMgYXJlIGFjY2VwdGFibGUgZm9yIHRoZSBwZWVyLiBJZiB0aGlzIGlzIHBvc3NpYmxlLCB3ZSBjYW4KKyAgICAgcGVyZm9ybSBwYXNzdGhyb3VnaCBhbmQgbWFrZSBzcmMgPT0gZGVzdC4gIFRoaXMgaXMgcGVyZm9ybWVkIGJ5IHNpbXBseQorICAgICBjYWxsaW5nIGdzdF9wYWRfcGVlcl9hY2NlcHRfY2FwcygpLgorICAgLSBpZiB0aGUgY2FwcyBhcmUgbm90IGZpeGVkLCB3ZSBuZWVkIHRvIGZpeGF0ZSBpdCwgc3RhcnQgYnkgdGFraW5nIHRoZSBwZWVyCisgICAgIGNhcHMgYW5kIGludGVyc2VjdCB3aXRoIHRoZW0uCisgICAtIGZvciBlYWNoIG9mIHRoZSB0cmFuc2Zvcm1lZCBjYXBzIHJldHJpZXZlZCB3aXRoIHRyYW5zZm9ybV9jYXBzKCk6CisgICAgICAtIHRyeSB0byBmaXhhdGUgdGhlIGNhcHMgd2l0aCBmaXhhdGVfY2FwcygpCisgICAgICAtIGlmIHRoZSBjYXBzIGFyZSBmaXhhdGVkLCBjaGVjayBpZiB0aGUgcGVlciBhY2NlcHRzIHRoZW0gd2l0aAorCV9wZWVyX2FjY2VwdF9jYXBzKCksIGlmIHRoZSBwZWVyIGFjY2VwdHMsIHdlIGhhdmUgZm91bmQgYSBkZXN0IGNhcHMuCisgICAtIGlmIHdlIHJ1biBvdXQgb2YgY2Fwcywgd2UgZmFpbCB0byBmaW5kIGEgdHJhbnNmb3JtLgorICAgLSBpZiB3ZSBmb3VuZCBhIGRlc3RpbmF0aW9uIGNhcHMsIGNvbmZpZ3VyZSB0aGUgdHJhbnNmb3JtIHdpdGggc2V0X2NhcHMoKS4KKworQWZ0ZXIgdGhpcyBuZWdvdGlhdGlvbiBwcm9jZXNzLCB0aGUgdHJhbnNmb3JtIGVsZW1lbnQgaXMgdXN1YWxseSBpbiBhIHN0ZWFkeQorc3RhdGUuIFdlIGNhbiBpZGVudGlmeSB0aGVzZSBzdGVhZHkgc3RhdGVzOgorCisgIC0gc3JjIGFuZCBzaW5rIHBhZHMgYm90aCBoYXZlIHRoZSBzYW1lIGNhcHMuIE5vdGUgdGhhdCB3aGVuIHRoZSBjYXBzIGFyZSBlcXVhbAorICAgIG9uIGJvdGggcGFkcywgdGhlIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycyBhdXRvbWF0aWNhbGx5IGhhdmUgdGhlIHNhbWUgc2l6ZS4KKyAgICBUaGUgZWxlbWVudCBjYW4gb3BlcmF0ZSBvbiB0aGUgYnVmZmVycyBpbiB0aGUgZm9sbG93aW5nIHdheXM6IChTYW1lIGNhcHMsIFNDKQorCisgICAgICAtIHBhc3N0aHJvdWdoOiBidWZmZXJzIGFyZSBpbnNwZWN0ZWQgYnV0IG5vIG1ldGFkYXRhIG9yIGJ1ZmZlciBkYXRhCisJaXMgY2hhbmdlZC4gVGhlIGlucHV0IGJ1ZmZlcnMgZG9uJ3QgbmVlZCB0byBiZSB3cml0YWJsZS4gVGhlIGlucHV0CisJYnVmZmVyIGlzIHNpbXBseSBwdXNoZWQgb3V0IGFnYWluIHdpdGhvdXQgbW9kaWZpY2F0aW9ucy4gKFNDUCkKKworICAgICAgICAgICAgICAgc2lua3BhZCAgICAgICAgICAgICAgdHJhbnNmb3JtICAgICAgICAgICAgICAgc3JjcGFkCisgICAgICAgY2hhaW4oKSAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgLS0tLS0tLS0tLS0tPnwgICBoYW5kbGVfYnVmZmVyKCkgIHwgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0+fCAgICAgIHBhZF9wdXNoKCkgICAgICB8CisgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tPnwKKyAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgfAorCisgICAgICAtIGluLXBsYWNlOiBidWZmZXJzIGFyZSBtb2RpZmllZCBpbi1wbGFjZSwgdGhpcyBtZWFucyB0aGF0IHRoZSBpbnB1dAorCWJ1ZmZlciBpcyBtb2RpZmllZCB0byBwcm9kdWNlIGEgbmV3IG91dHB1dCBidWZmZXIuIFRoaXMgcmVxdWlyZXMgdGhlCisJaW5wdXQgYnVmZmVyIHRvIGJlIHdyaXRhYmxlLiBJZiB0aGUgaW5wdXQgYnVmZmVyIGlzIG5vdCB3cml0YWJsZSwgYSBuZXcKKwlidWZmZXIgaGFzIHRvIGJlIGFsbG9jYXRlZCBmcm9tIHRoZSBidWZmZXJwb29sLiAoU0NJKQorCisgICAgICAgICAgICAgICBzaW5rcGFkICAgICAgICAgICAgICB0cmFuc2Zvcm0gICAgICAgICAgICAgICBzcmNwYWQKKyAgICAgICBjaGFpbigpICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAtLS0tLS0tLS0tLS0+fCAgIGhhbmRsZV9idWZmZXIoKSAgfCAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLT58ICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICBbIXdyaXRhYmxlXSAgICAgICAgfAorICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgIGFsbG9jIGJ1ZmZlciAgICAgICB8CisgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgLi18ICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgIHwgIDx0cmFuc2Zvcm1faXA+ICB8IHwgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICc+fCAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgcGFkX3B1c2goKSAgICAgIHwKKyAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0+fAorICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICB8CisKKyAgICAgIC0gY29weSB0cmFuc2Zvcm06IGEgbmV3IG91dHB1dCBidWZmZXIgaXMgYWxsb2NhdGUgZnJvbSB0aGUgYnVmZmVycG9vbAorICAgICAgICBhbmQgZGF0YSBmcm9tIHRoZSBpbnB1dCBidWZmZXIgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgb3V0cHV0IGJ1ZmZlci4KKyAgICAgICAgKFNDQykKKworICAgICAgICAgICAgICAgc2lua3BhZCAgICAgICAgICAgICAgdHJhbnNmb3JtICAgICAgICAgICAgICAgc3JjcGFkCisgICAgICAgY2hhaW4oKSAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgLS0tLS0tLS0tLS0tPnwgICBoYW5kbGVfYnVmZmVyKCkgIHwgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0+fCAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICBhbGxvYyBidWZmZXIgICAgIHwKKyAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAuLXwgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgfCAgICAgPHRyYW5zZm9ybT4gIHwgfCAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgJz58ICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICBwYWRfcHVzaCgpICAgICAgfAorICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLT58CisgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwKKworICAtIHNyYyBhbmQgc2luayBwYWRzIGhhdmUgZGlmZmVyZW50IGNhcHMuIFRoZSBlbGVtZW50IGNhbiBvcGVyYXRlIG9uIHRoZQorICAgIGJ1ZmZlcnMgaW4gdGhlIGZvbGxvd2luZyB3YXk6IChEaWZmZXJlbnQgQ2FwcywgREMpCisKKyAgICAgIC0gaW4tcGxhY2U6IGlucHV0IGJ1ZmZlcnMgYXJlIG1vZGlmaWVkIGluLXBsYWNlLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGlucHV0CisJYnVmZmVyIGhhcyBhIHNpemUgdGhhdCBpcyBsYXJnZXIgb3IgZXF1YWwgdG8gdGhlIG91dHB1dCBzaXplLiBUaGUgaW5wdXQKKwlidWZmZXIgd2lsbCBiZSByZXNpemVkIHRvIHRoZSBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyLiBJZiB0aGUgaW5wdXQKKwlidWZmZXIgaXMgbm90IHdyaXRhYmxlIG9yIHRoZSBvdXRwdXQgc2l6ZSBpcyBiaWdnZXIgdGhhbiB0aGUgaW5wdXQgc2l6ZSwKKwl3ZSBuZWVkIHRvIHBhZC1hbGxvYyBhIG5ldyBidWZmZXIuIChEQ0kpCisKKyAgICAgICAgICAgICAgIHNpbmtwYWQgICAgICAgICAgICAgIHRyYW5zZm9ybSAgICAgICAgICAgICAgIHNyY3BhZAorICAgICAgIGNoYWluKCkgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIC0tLS0tLS0tLS0tLT58ICAgaGFuZGxlX2J1ZmZlcigpICB8ICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tPnwgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCBbIXdyaXRhYmxlIHx8ICFzaXplXSB8CisgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICBhbGxvYyBidWZmZXIgICAgIHwKKyAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAuLXwgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgfCAgPHRyYW5zZm9ybV9pcD4gIHwgfCAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgJz58ICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICBwYWRfcHVzaCgpICAgICAgfAorICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLT58CisgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwKKworICAgICAgLSBjb3B5IHRyYW5zZm9ybTogYSBuZXcgb3V0cHV0IGJ1ZmZlciBpcyBhbGxvY2F0ZWQgYW5kIHRoZSBkYXRhIGZyb20gdGhlCisJaW5wdXQgYnVmZmVyIGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIG91dHB1dCBidWZmZXIuIFRoZSBmbG93IGlzIGV4YWN0bHkKKwl0aGUgc2FtZSBhcyB0aGUgY2FzZSB3aXRoIHRoZSBzYW1lLWNhcHMgbmVnb3RpYXRpb24uIChEQ0MpCisgCitXZSBjYW4gaW1tZWRpYXRlbHkgb2JzZXJ2ZSB0aGF0IHRoZSBjb3B5IHRyYW5zZm9ybSBzdGF0ZXMgd2lsbCBuZWVkIHRvCithbGxvY2F0ZSBhIG5ldyBidWZmZXIgZnJvbSB0aGUgYnVmZmVycG9vbC4gV2hlbiB0aGUgdHJhbnNmb3JtIGVsZW1lbnQgaXMKK3JlY2VpdmluZyBhIG5vbi13cml0YWJsZSBidWZmZXIgaW4gdGhlIGluLXBsYWNlIHN0YXRlLCBpdCB3aWxsIGFsc28KK25lZWQgdG8gcGVyZm9ybSBhbiBhbGxvY2F0aW9uLiBUaGVyZSBpcyBubyByZWFzb24gd2h5IHRoZSBwYXNzdGhyb3VnaCBzdGF0ZSB3b3VsZAorcGVyZm9ybSBhbiBhbGxvY2F0aW9uLgorCitUaGlzIHN0ZWFkeSBzdGF0ZSBjaGFuZ2VzIHdoZW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyBvY2N1cjoKKworICAtIHRoZSBzaW5rIHBhZCByZWNlaXZlcyBuZXcgY2FwcywgdGhpcyB0cmlnZ2VycyB0aGUgYWJvdmUgZG93bnN0cmVhbQorICAgIHJlbmVnb3RhdGlvbiBwcm9jZXNzLCBzZWUgYWJvdmUgZm9yIHRoZSBmbG93LgorICAtIHRoZSB0cmFuc2Zvcm0gZWxlbWVudCB3YW50cyB0byByZW5lZ290aWF0ZSAoYmVjYXVzZSBvZiBjaGFuZ2VkIHByb3BlcnRpZXMsCisgICAgZm9yIGV4YW1wbGUpLiBUaGlzIGVzc2VudGlhbGx5IGNsZWFycyB0aGUgY3VycmVudCBzdGVhZHkgc3RhdGUgYW5kCisgICAgdHJpZ2dlcnMgdGhlIGRvd25zdHJlYW0gYW5kIHVwc3RyZWFtIHJlbmVnb3RpYXRpb24gcHJvY2Vzcy4gVGhpcyBzaXR1YXRpb24KKyAgICBhbHNvIGhhcHBlbnMgd2hlbiBhIFJFQ09ORklHVVJFIGV2ZW50IHdhcyByZWNlaXZlZCBvbiB0aGUgdHJhbnNmb3JtIHNyY3BhZC4KKworCitBbGxvY2F0aW9uCit+fn5+fn5+fn5+CisKK0FmdGVyIHRoZSB0cmFuc2Zvcm0gZWxlbWVudCBpcyBjb25maWd1cmVkIHdpdGggY2FwcywgYSBidWZmZXJwb29sIG5lZWRzIHRvIGJlCituZWdvdGlhdGVkIHRvIHBlcmZvcm0gdGhlIGFsbG9jYXRpb24gb2YgYnVmZmVycy4gV2UgaGFiZSAyIGNhc2VzOgorCisgIC0gVGhlIGVsZW1lbnQgaXMgb3BlcmF0aW5nIGluIHBhc3N0aHJvdWdoIHdlIGRvbid0IG5lZWQgdG8gYWxsb2NhdGUgYSBidWZmZXIKKyAgICBpbiB0aGUgdHJhbnNmb3JtIGVsZW1lbnQuCisgIC0gVGhlIGVsZW1lbnQgaXMgbm90IG9wZXJhdGluZyBpbiBwYXNzdGhyb3VnaCBhbmQgbmVlZHMgdG8gYWxsb2NhdGlvbiBhbgorICAgIG91dHB1dCBidWZmZXIuCisKK0luIGNhc2UgMSwgd2UgZG9uJ3QgcXVlcnkgYW5kIGNvbmZpZ3VyZSBhIHBvb2wuIFdlIGxldCB1cHN0cmVhbSBkZWNpZGUgaWYgaXQKK3dhbnRzIHRvIHVzZSBhIGJ1ZmZlcnBvb2wgYW5kIHRoZW4gd2Ugd2lsbCBwcm94eSB0aGUgYnVmZmVycG9vbCBmcm9tIGRvd25zdHJlYW0KK3RvIHVwc3RyZWFtLgorCitJbiBjYXNlIDIsIHdlIHF1ZXJ5IGFuZCBzZXQgYSBidWZmZXJwb29sIG9uIHRoZSBzcmNwYWQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yCitkb2luZyB0aGUgYWxsb2NhdGlvbnMuCisKK0luIG9yZGVyIHRvIHBlcmZvcm0gYWxsb2NhdGlvbiwgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGdldCB0aGUgc2l6ZSBvZiB0aGUKK291dHB1dCBidWZmZXIgYWZ0ZXIgdGhlIHRyYW5zZm9ybS4gIFdlIG5lZWQgYWRkaXRpb25hbCBmdW5jdGlvbiB0bworcmV0cmlldmUgdGhlIHNpemUuIFRoZXJlIGFyZSB0d28gZnVuY3Rpb25zOgorCisgIC0gdHJhbnNmb3JtX3NpemUoKQorICAgIAorICAgIEdpdmVuIGEgY2FwcyBhbmQgYSBzaXplIG9uIG9uZSBwYWQsIGFuZCBhIGNhcHMgb24gdGhlIG90aGVyIHBhZCwgY2FsY3VsYXRlCisgICAgdGhlIHNpemUgb2YgdGhlIG90aGVyIGJ1ZmZlci4gVGhpcyBmdW5jdGlvbiBpcyBhYmxlIHRvIHBlcmZvcm0gYWxsIHNpemUKKyAgICB0cmFuc2Zvcm1zIGFuZCBpcyB0aGUgcHJlZmVycmVkIG1ldGhvZCBvZiB0cmFuc2Zvcm1pbmcgYSBzaXplLgorCisgIC0gZ2V0X3VuaXRfc2l6ZSgpCisKKyAgICBXaGVuIHRoZSBpbnB1dCBzaXplIGFuZCBvdXRwdXQgc2l6ZSBhcmUgYWx3YXlzIGEgbXVsdGlwbGUgb2YgZWFjaG90aGVyCisgICAgKGF1ZGlvIGNvbnZlcnNpb24sIC4uKSB3ZSBjYW4gZGVmaW5lIGEgbW9yZSBzaW1wbGUgZ2V0X3VuaXRfc2l6ZSgpIGZ1bmN0aW9uLgorICAgIFRoZSB0cmFuc2Zvcm0gd2lsbCB1c2UgdGhpcyBmdW5jdGlvbiB0byBnZXQgdGhlIHNhbWUgYW1vdW50IG9mIHVuaXRzIGluIHRoZQorICAgIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYnVmZmVycy4KKworIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCB0aGUgbWFwcGluZyBiZXR3ZWVuIGNhcHMgYW5kIHNpemUgaXMga2VwdCBpbiBhIGNhY2hlLgorCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE5MzY5OAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZGVzaWduL3BhcnQtZXZlbnRzLnR4dApAQCAtMCwwICsxLDMwMSBAQAorRXZlbnRzCistLS0tLS0KKworRXZlbnRzIGFyZSBvYmplY3RzIHBhc3NlZCBhcm91bmQgaW4gcGFyYWxsZWwgdG8gdGhlIGJ1ZmZlciBkYXRhZmxvdyB0bworbm90aWZ5IGVsZW1lbnRzIG9mIHZhcmlvdXMgZXZlbnRzLgorCitFdmVudHMgYXJlIHJlY2VpdmVkIG9uIHBhZHMgdXNpbmcgdGhlIGV2ZW50IGZ1bmN0aW9uLiBTb21lIGV2ZW50cyBzaG91bGQKK2JlIGludGVybGVhdmVkIHdpdGggdGhlIGRhdGEgc3RyZWFtIHNvIHRoZXkgcmVxdWlyZSB0YWtpbmcgdGhlIFNUUkVBTV9MT0NLLAorb3RoZXJzIGRvbid0LgorCitEaWZmZXJlbnQgdHlwZXMgb2YgZXZlbnRzIGV4aXN0IHRvIGltcGxlbWVudCB2YXJpb3VzIGZ1bmN0aW9uYWxpdGllcy4KKworICBHU1RfRVZFTlRfRkxVU0hfU1RBUlQ6ICAgZGF0YSBpcyB0byBiZSBkaXNjYXJkZWQKKyAgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6ICAgIGRhdGEgaXMgYWxsb3dlZCBhZ2FpbgorICBHU1RfRVZFTlRfQ0FQUzogICAgICAgICAgRm9ybWF0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBmb2xsb3dpbmcgYnVmZmVycworICBHU1RfRVZFTlRfU0VHTUVOVDogICAgICAgVGltaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgZm9sbG93aW5nIGJ1ZmZlcnMKKyAgR1NUX0VWRU5UX1RBRzogICAgICAgICAgIFN0cmVhbSBtZXRhZGF0YS4KKyAgR1NUX0VWRU5UX0JVRkZFUlNJWkU6ICAgIEJ1ZmZlciBzaXplIHJlcXVpcmVtZW50cworICBHU1RfRVZFTlRfU0lOS19NRVNTQUdFOiAgQW4gZXZlbnQgdHVybmVkIGludG8gYSBtZXNzYWdlIGJ5IHNpbmtzCisgIEdTVF9FVkVOVF9FT1M6IAkgICBubyBtb3JlIGRhdGEgaXMgdG8gYmUgZXhwZWN0ZWQgb24gYSBwYWQuCisgIEdTVF9FVkVOVF9RT1M6ICAgICAgICAgICBBIG5vdGlmaWNhdGlvbiBvZiB0aGUgcXVhbGl0eSBvZiBzZXJ2aWNlIG9mIHRoZSBzdHJlYW0KKyAgR1NUX0VWRU5UX1NFRUs6ICAgICAgICAgIEEgc2VlayBzaG91bGQgYmUgcGVyZm9ybWVkIHRvIGEgbmV3IHBvc2l0aW9uIGluIHRoZSBzdHJlYW0KKyAgR1NUX0VWRU5UX05BVklHQVRJT046ICAgIEEgbmF2aWdhdGlvbiBldmVudC4KKyAgR1NUX0VWRU5UX0xBVEVOQ1k6ICAgICAgIENvbmZpZ3VyZSB0aGUgbGF0ZW5jeSBpbiBhIHBpcGVsaW5lCisgIEdTVF9FVkVOVF9TVEVQOiAgICAgICAgICBTdGVwcGluZyBldmVudAorICBHU1RfRVZFTlRfUkVDT05GSUdVUkU6ICAgc3RyZWFtIHJlY29uZmlndXJlIGV2ZW50CisKKyAgKiBHU1RfRVZFTlRfRFJBSU46ICAgICAgIFBsYXkgYWxsIGRhdGEgZG93bnN0cmVhbSBiZWZvcmUgcmV0dXJuaW5nLgorCisqIG5vdCB5ZXQgaW1wbGVtZW50ZWQsIHVuZGVyIGludmVzdGlnYXRpb24sIG1pZ2h0IGJlIG5lZWRlZCB0byBkbyBzdGlsbCBmcmFtZXMKKyAgaW4gRFZELgorCisKK3NyYyBwYWRzCistLS0tLS0tLQorCitBIGdzdF9wYWRfcHVzaF9ldmVudCgpIG9uIGEgc3JjcGFkIHdpbGwgZmlyc3Qgc3RvcmUgdGhlIGV2ZW50IGluIHRoZSBzdGlja3kKK2FycmF5IGJlZm9yZSBzZW5kaW5nIHRoZSBldmVudCB0byB0aGUgcGVlciBwYWQuIElmIHRoZXJlIGlzIG5vIHBlZXIgcGFkLCB0aGUKK2dzdF9wYWRfcHVzaF9ldmVudCgpIGZ1bmN0aW9uIHJldHVybnMgTk9UX0xJTktFRC4KKworTm90ZSB0aGF0IHRoZSBiZWhhdmlvdXIgaXMgbm90IGluZmx1ZW5jZWQgYnkgYSBmbHVzaGluZyBwYWQuCisKK0ZMVVNIX1NUQVJUIGFuZCBGTFVTSF9TVE9QIGV2ZW50cyBhcmUgZHJvcHBlZCBvbiBibG9ja2VkIHBhZHMuCisKK3NpbmsgcGFkcworLS0tLS0tLS0tCisKK0EgZ3N0X3BhZF9zZW5kX2V2ZW50KCkgb24gYSBzaW5rcGFkIHdpbGwgY2hlY2sgdGhlIG5ldyBldmVudCBhZ2FpbnN0IHRoZQorZXhpc3RpbmcgZXZlbnQuIElmIHRoZXkgYXJlIGRpZmZlcmVudCwgdGhlIG5ldyBldmVudCBpcyBzdG9yZWQgYXMgYSBwZW5kaW5nCitldmVudC4gSWYgdGhlIGV2ZW50cyBhcmUgdGhlIHNhbWUsIG5vdGhpbmcgY2hhbmdlcy4KKworV2hlbiB0aGUgcGFkIGlzIGZsdXNoaW5nLCB0aGUgX3NlbmRfZXZlbnQoKSBmdW5jdGlvbiByZXR1cm5zIFdST05HX1NUQVRFCitpbW1lZGlhdGVseS4KKworVGhlIGV2ZW50IGZ1bmN0aW9uIGlzIHRoZW4gY2FsbGVkIGZvciBhbGwgcGVuZGluZyBldmVudHMuIElmIHRoZSBmdW5jdGlvbgorcmV0dXJucyBzdWNjZXNzLCB0aGUgcGVuZGluZyBldmVudCBpcyBjb3BpZWQgdG8gdGhlIGFjdGl2ZSBldmVudHMsIGVsc2UgdGhlCitwZW5kaW5nIGV2ZW50IGlzIHJlbW92ZWQgYW5kIHRoZSBjdXJyZW50IGFjdGl2ZSBldmVudCBpcyB1bmNoYW5nZWQuCisKK1RoaXMgZW5zdXJlcyB0aGF0IHRoZSBldmVudCBmdW5jdGlvbiBpcyBuZXZlciBjYWxsZWQgZm9yIGZsdXNoaW5nIHBhZHMgYW5kIHRoYXQKK3RoZSBzdGlja3kgYXJyYXkgb25seSBjb250YWlucyBldmVudHMgZm9yIHdoaWNoIHRoZSBldmVudCBmdW5jdGlvbiByZXR1cm5lZAorc3VjY2Vzcy4KKworCitwYWQgbGluaworLS0tLS0tLS0KKworV2hlbiBsaW5raW5nIHBhZHMsIGFsbCB0aGUgc3RpY2t5IGV2ZW50cyBmcm9tIHRoZSBzcmNwYWQgYXJlIGNvcGllZCB0byB0aGUKK3BlbmRpbmcgYXJyYXkgb24gdGhlIHNpbmtwYWQuIFRoZSBwZW5kaW5nIGV2ZW50cyB3aWxsIGJlIHNlbnQgdG8gdGhlIGV2ZW50CitmdW5jdGlvbiBvZiB0aGUgc2lua3BhZCBvbiB0aGUgbmV4dCBldmVudCBvciBidWZmZXIuCisKKworRkxVU0hfU1RBUlQvU1RPUAorfn5+fn5+fn5+fn5+fn5+fgorCitBIGZsdXNoIGV2ZW50IGlzIHNlbnQgYm90aCBkb3duc3RyZWFtIGFuZCB1cHN0cmVhbSB0byBjbGVhciBhbnkgcGVuZGluZyBkYXRhIAorZnJvbSB0aGUgcGlwZWxpbmUuIFRoaXMgbWlnaHQgYmUgbmVlZGVkIHRvIG1ha2UgdGhlIGdyYXBoIG1vcmUgcmVzcG9uc2l2ZSAKK3doZW4gdGhlIG5vcm1hbCBkYXRhZmxvdyBnZXRzIGludGVycnVwdGVkIGJ5IGZvciBleGFtcGxlIGEgc2VlayBldmVudC4KKworRmx1c2hpbmcgaGFwcGVucyBpbiB0d28gc3RhZ2VzLgorCisgMSkgYSBzb3VyY2UgZWxlbWVudCBzZW5kcyB0aGUgRkxVU0hfU1RBUlQgZXZlbnQgdG8gdGhlIGRvd25zdHJlYW0gcGVlciBlbGVtZW50LgorICAgIFRoZSBkb3duc3RyZWFtIGVsZW1lbnQgc3RhcnRzIHJlamVjdGluZyBidWZmZXJzIGZyb20gdGhlIHVwc3RyZWFtIGVsZW1lbnRzLiBJdAorICAgIHNlbmRzIHRoZSBmbHVzaCBldmVudCBmdXJ0aGVyIGRvd25zdHJlYW0gYW5kIGRpc2NhcmRzIGFueSBidWZmZXJzIGl0IGlzIAorICAgIGhvbGRpbmcgYXMgd2VsbCBhcyByZXR1cm4gZnJvbSB0aGUgY2hhaW4gZnVuY3Rpb24gYXMgc29vbiBhcyBwb3NzaWJsZS4KKyAgICBUaGlzIG1ha2VzIHN1cmUgdGhhdCBhbGwgdXBzdHJlYW0gZWxlbWVudHMgZ2V0IHVuYmxvY2tlZC4KKyAgICBUaGlzIGV2ZW50IGlzIG5vdCBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgU1RSRUFNX0xPQ0sgYW5kIGNhbiBiZSBkb25lIGluIHRoZSAKKyAgICBhcHBsaWNhdGlvbiB0aHJlYWQuCisKKyAyKSBhIHNvdXJjZSBlbGVtZW50IHNlbmRzIHRoZSBGTFVTSF9TVE9QIGV2ZW50IHRvIGluZGljYXRlCisgICAgdGhhdCB0aGUgZG93bnN0cmVhbSBlbGVtZW50IGNhbiBhY2NlcHQgYnVmZmVycyBhZ2Fpbi4gVGhlIGRvd25zdHJlYW0gCisgICAgZWxlbWVudCBzZW5kcyB0aGUgZmx1c2ggZXZlbnQgdG8gaXRzIHBlZXIgZWxlbWVudHMuIEFmdGVyIHRoaXMgc3RlcCBkYXRhZmxvdworICAgIGNvbnRpbnVlcy4gVGhlIEZMVVNIX1NUT1AgY2FsbCBpcyBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgU1RSRUFNX0xPQ0sgc28gYW55CisgICAgZGF0YSB1c2VkIGJ5IHRoZSBjaGFpbiBmdW5jdGlvbiBjYW4gc2FmZWx5IGZyZWVkIGhlcmUgaWYgbmVlZGVkLiBBbnkgCisgICAgcGVuZGluZyBFT1MgZXZlbnRzIHNob3VsZCBiZSBkaXNjYXJkZWQgdG9vLgorCitBZnRlciB0aGUgZmx1c2ggY29tcGxldGVzIHRoZSBzZWNvbmQgc3RhZ2UsIGRhdGEgaXMgZmxvd2luZyBhZ2FpbiBpbiB0aGUgcGlwZWxpbmUKK2FuZCBhbGwgYnVmZmVycyBhcmUgbW9yZSByZWNlbnQgdGhhbiB0aG9zZSBiZWZvcmUgdGhlIGZsdXNoLgorCitGb3IgZWxlbWVudHMgdGhhdCB1c2UgdGhlIHB1bGxyYW5nZSBmdW5jdGlvbiwgdGhleSBzZW5kIGJvdGggZmx1c2ggZXZlbnRzIHRvCit0aGUgdXBzdHJlYW0gcGFkcyBpbiB0aGUgc2FtZSB3YXkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHB1bGxyYW5nZSBmdW5jdGlvbgordW5sb2NrcyBhbmQgYW55IHBlbmRpbmcgYnVmZmVycyBhcmUgY2xlYXJlZCBpbiB0aGUgdXBzdHJlYW0gZWxlbWVudHMuCisKK0EgRkxVU0hfU1RBUlQgbWF5IGluc3RydWN0IHRoZSBwaXBlbGluZSB0byBkaXN0cmlidXRlIGEgbmV3IGJhc2VfdGltZSB0bworZWxlbWVudHMgc28gdGhhdCB0aGUgcnVubmluZ190aW1lIGlzIHJlc2V0IHRvIDAuIAorKHNlZSBwYXJ0LWNsb2Nrcy50eHQgYW5kIHBhcnQtc3luY2hyb25pc2F0aW9uLnR4dCkuCisKKworRU9TCit+fn4KKworVGhlIEVPUyBldmVudCBjYW4gb25seSBiZSBzZW50IG9uIGEgc2lua3BhZC4gSXQgaXMgdHlwaWNhbGx5IGVtaXRlZCBieSB0aGUKK3NvdXJjZSBlbGVtZW50IHdoZW4gaXQgaGFzIGZpbmlzaGVkIHNlbmRpbmcgZGF0YS4gVGhpcyBldmVudCBpcyBtYWlubHkgc2VudAoraW4gdGhlIHN0cmVhbWluZyB0aHJlYWQgYnV0IGNhbiBhbHNvIGJlIHNlbnQgZnJvbSB0aGUgYXBwbGljYXRpb24gdGhyZWFkLgorCitBbiBFT1MgZXZlbnQgc2VudCBvbiBhIHNyY3BhZCByZXR1cm5zIEdTVF9GTE9XX1VORVhQRUNURUQuCisKK1RoZSBkb3duc3RyZWFtIGVsZW1lbnQgc2hvdWxkIGZvcndhcmQgdGhlIEVPUyBldmVudCB0byBpdHMgZG93bnN0cmVhbSBwZWVyCitlbGVtZW50cy4gVGhpcyB3YXkgdGhlIGV2ZW50IHdpbGwgZXZlbnR1YWxseSByZWFjaCB0aGUgc2lua3Mgd2hpY2ggc2hvdWxkCit0aGVuIHBvc3QgYW4gRU9TIG1lc3NhZ2Ugb24gdGhlIGJ1cyB3aGVuIGluIFBMQVlJTkcuCisKK0FuIGVsZW1lbnQgbWlnaHQgd2FudCB0byBmbHVzaCBpdHMgaW50ZXJuYWxseSBxdWV1ZWQgZGF0YSBiZWZvcmUgZm9yd2FyZGluZwordGhlIEVPUyBldmVudCBkb3duc3RyZWFtLiBUaGlzIGZsdXNoaW5nIGNhbiBiZSBkb25lIGluIHRoZSBzYW1lIHRocmVhZCBhcwordGhlIG9uZSBoYW5kbGluZyB0aGUgRU9TIGV2ZW50LgorCitGb3IgZWxlbWVudHMgd2l0aCBtdWx0aXBsZSBzaW5rIHBhZHMgaXQgbWlnaHQgYmUgcG9zc2libGUgdG8gd2FpdCBmb3IgRU9TIG9uCithbGwgdGhlIHBhZHMgYmVmb3JlIGZvcndhcmRpbmcgdGhlIGV2ZW50LgorCitUaGUgRU9TIGV2ZW50IHNob3VsZCBhbHdheXMgYmUgaW50ZXJsZWF2ZWQgd2l0aCB0aGUgZGF0YSBmbG93LCB0aGVyZWZvcmUgdGhlCitHU3RyZWFtZXIgY29yZSB3aWxsIHRha2UgdGhlIFNUUkVBTV9MT0NLLgorCitTb21ldGltZXMgdGhlIEVPUyBldmVudCBpcyBnZW5lcmF0ZWQgYnkgYW5vdGhlciBlbGVtZW50IHRoYW4gdGhlIHNvdXJjZSwgZm9yIAorZXhhbXBsZSBhIGRlbXV4ZXIgZWxlbWVudCBjYW4gZ2VuZXJhdGUgYW4gRU9TIGV2ZW50IGJlZm9yZSB0aGUgc291cmNlIGVsZW1lbnQuCitUaGlzIGlzIG5vdCBhIHByb2JsZW0sIHRoZSBkZW11eGVyIGRvZXMgbm90IHNlbmQgYW4gRU9TIGV2ZW50IHRvIHRoZSB1cHN0cmVhbQorZWxlbWVudCBidXQgcmV0dXJucyBHU1RfRkxPV19VTkVYUEVDVEVELCBjYXVzaW5nIHRoZSBzb3VyY2UgZWxlbWVudCB0byBzdG9wCitzZW5kaW5nIGRhdGEuCisKK0FuIGVsZW1lbnQgdGhhdCBzZW5kcyBFT1Mgb24gYSBwYWQgc2hvdWxkIHN0b3Agc2VuZGluZyBkYXRhIG9uIHRoYXQgcGFkLiBTb3VyY2UKK2VsZW1lbnRzIHR5cGljYWxseSBwYXVzZSgpIHRoZWlyIHRhc2sgZm9yIHRoYXQgcHVycG9zZS4KKworQnkgZGVmYXVsdCwgYSBHc3RCaW4gY29sbGVjdHMgYWxsIEVPUyBtZXNzYWdlcyBmcm9tIGFsbCBpdHMgc2lua3MgYmVmb3JlIAorcG9zdGluZyB0aGUgRU9TIG1lc3NhZ2UgdG8gaXRzIHBhcmVudC4KKworVGhlIEVPUyBpcyBvbmx5IHBvc3RlZCBvbiB0aGUgYnVzIGJ5IHRoZSBzaW5rIGVsZW1lbnRzIGluIHRoZSBQTEFZSU5HIHN0YXRlLiBJZgordGhlIEVPUyBldmVudCBpcyByZWNlaXZlZCBpbiB0aGUgUEFVU0VEIHN0YXRlLCBpdCBpcyBxdWV1ZWQgdW50aWwgdGhlIGVsZW1lbnQKK2dvZXMgdG8gUExBWUlORy4KKworQSBGTFVTSF9TVE9QIGV2ZW50IG9uIGFuIGVsZW1lbnQgZmx1c2hlcyB0aGUgRU9TIHN0YXRlIGFuZCBhbGwgcGVuZGluZyBFT1MgbWVzc2FnZXMuCisKKworU0VHTUVOVAorfn5+fn5+fgorCitBIHNlZ21lbnQgZXZlbnQgaXMgc2VudCBkb3duc3RyZWFtIGJ5IGFuIGVsZW1lbnQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZm9sbG93aW5nCitncm91cCBvZiBidWZmZXJzIHN0YXJ0IGFuZCBlbmQgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbnMuIFRoZSBuZXdzZWdtZW50IGV2ZW50CithbHNvIGNvbnRhaW5zIHRoZSBwbGF5YmFjayBzcGVlZCBhbmQgdGhlIGFwcGxpZWQgcmF0ZSBvZiB0aGUgc3RyZWFtLgorCitTaW5jZSB0aGUgc3RyZWFtIHRpbWUgaXMgYWx3YXlzIHNldCB0byAwIGF0IHN0YXJ0IGFuZCBhZnRlciBhIHNlZWssIGEgMAorcG9pbnQgZm9yIGFsbCBuZXh0IGJ1ZmZlcidzIHRpbWVzdGFtcHMgaGFzIHRvIGJlIHByb3BhZ2F0ZWQgdGhyb3VnaCB0aGUKK3BpcGVsaW5lIHVzaW5nIHRoZSBTRUdNRU5UIGV2ZW50LgorCitCZWZvcmUgc2VuZGluZyBidWZmZXJzLCBhbiBlbGVtZW50IG11c3Qgc2VuZCBhIFNFR01FTlQgZXZlbnQuIEFuIGVsZW1lbnQgaXMKK2ZyZWUgdG8gcmVmdXNlIGJ1ZmZlcnMgaWYgdGhleSB3ZXJlIG5vdCBwcmVjZWVkZWQgYnkgYSBTRUdNRU5UIGV2ZW50LgorCitFbGVtZW50cyB0aGF0IHN5bmMgdG8gdGhlIGNsb2NrIHNob3VsZCBzdG9yZSB0aGUgU0VHTUVOVCBzdGFydCBhbmQgZW5kIHZhbHVlcworYW5kIHN1YnRyYWN0IHRoZSBzdGFydCB2YWx1ZSBmcm9tIHRoZSBidWZmZXIgdGltZXN0YW1wIGJlZm9yZSBjb21wYXJpbmcKK2l0IGFnYWluc3QgdGhlIHN0cmVhbSB0aW1lIChzZWUgcGFydC1jbG9ja3MudHh0KS4KKworQW4gZWxlbWVudCBpcyBhbGxvd2VkIHRvIHNlbmQgb3V0IGJ1ZmZlcnMgd2l0aCB0aGUgU0VHTUVOVCBzdGFydCB0aW1lIGFscmVhZHkKK3N1YnRyYWN0ZWQgZnJvbSB0aGUgdGltZXN0YW1wLiBJZiBpdCBkb2VzIHNvLCBpdCBuZWVkcyB0byBzZW5kIGEgY29ycmVjdGVkCitTRUdNRU5UIGRvd25zdHJlYW0sIGllLCBvbmUgd2l0aCBzdGFydCB0aW1lIDAuCisKK0EgU0VHTUVOVCBldmVudCBzaG91bGQgYmUgZ2VuZXJhdGVkIGFzIHNvb24gYXMgcG9zc2libGUgaW4gdGhlIHBpcGVsaW5lIGFuZAoraXMgdXN1YWxseSBnZW5lcmF0ZWQgYnkgYSBkZW11eGVyIG9yIHNvdXJjZS4gVGhlIGV2ZW50IGlzIGdlbmVyYXRlZCBiZWZvcmUgCitwdXNoaW5nIHRoZSBmaXJzdCBidWZmZXIgYW5kIGFmdGVyIGEgc2VlaywgcmlnaHQgYmVmb3JlIHB1c2hpbmcgdGhlIG5ldyBidWZmZXIuCisKK1RoZSBTRUdNRU5UIGV2ZW50IHNob3VsZCBiZSBzZW50IGZyb20gdGhlIHN0cmVhbWluZyB0aHJlYWQgYW5kIHNob3VsZCBiZQorc2VyaWFsaXplZCB3aXRoIHRoZSBidWZmZXJzLgorCitCdWZmZXJzIHNob3VsZCBiZSBjbGlwcGVkIHdpdGhpbiB0aGUgcmFuZ2UgaW5kaWNhdGVkIGJ5IHRoZSBuZXdzZWdtZW50IGV2ZW50CitzdGFydCBhbmQgc3RvcCB2YWx1ZXMuIFNpbmtzIG11c3QgZHJvcCBidWZmZXJzIHdpdGggdGltZXN0YW1wcyBvdXQgb2YgdGhlCitpbmRpY2F0ZWQgc2VnbWVudCByYW5nZS4KKworCitUQUcKK35+fgorICAKK1RoZSB0YWcgZXZlbnQgaXMgc2VudCBkb3duc3RyZWFtIHdoZW4gYW4gZWxlbWVudCBoYXMgZGlzY292ZXJlZCBtZXRhZGF0YQordGFncyBpbiBhIG1lZGlhIGZpbGUuIEVuY29kZXJzIGNhbiB1c2UgdGhpcyBldmVudCB0byBhZGp1c3QgdGhlaXIgdGFnZ2luZworc3lzdGVtLiBBIHRhZyBpcyBzZXJpYWxpemVkIHdpdGggYnVmZmVycy4KKworCitCVUZGRVJTSVpFCit+fn5+fn5+fn5+CisKK05PVEU6IFRoaXMgZXZlbnQgaXMgbm90IHlldCBpbXBsZW1lbnRlZC4KKworQW4gZWxlbWVudCBjYW4gc3VnZ2VzdCBhIGJ1ZmZlcnNpemUgZm9yIGRvd25zdHJlYW0gZWxlbWVudHMuIFRoaXMgaXMKK3R5cGljYWxseSBkb25lIGJ5IGVsZW1lbnRzIHRoYXQgcHJvZHVjZSBkYXRhIG9uIG11bHRpcGxlIHNvdXJjZSBwYWRzCitzdWNoIGFzIGRlbXV4ZXJzLgorCisKK1FPUworfn5+CisKK0EgUU9TLCBvciBxdWFsaXR5IG9mIHNlcnZpY2UgbWVzc2FnZSwgaXMgZ2VuZXJhdGVkIGluIGFuIGVsZW1lbnQgdG8gcmVwb3J0Cit0byB0aGUgdXBzdHJlYW0gZWxlbWVudHMgYWJvdXQgdGhlIGN1cnJlbnQgcXVhbGl0eSBvZiByZWFsLXRpbWUgcGVyZm9ybWFuY2UKK29mIHRoZSBzdHJlYW0uIFRoaXMgaXMgdHlwaWNhbGx5IGRvbmUgYnkgdGhlIHNpbmtzIHRoYXQgbWVhc3VyZSB0aGUgYW1vdW50CitvZiBmcmFtZWRyb3BzIHRoZXkgaGF2ZS4gKHNlZSBwYXJ0LXFvcy50eHQpCisKKworU0VFSworfn5+fgorCitBIHNlZWsgZXZlbnQgaXMgaXNzdWVkIGJ5IHRoZSBhcHBsaWNhdGlvbiB0byBjb25maWd1cmUgdGhlIHBsYXliYWNrIHJhbmdlCitvZiBhIHN0cmVhbS4gSXQgaXMgY2FsbGVkIGZvcm0gdGhlIGFwcGxpY2F0aW9uIHRocmVhZCBhbmQgdHJhdmVscyB1cHN0cmVhbS4KKworVGhlIHNlZWsgZXZlbnQgY29udGFpbnMgdGhlIG5ldyBzdGFydCBhbmQgc3RvcCBwb3NpdGlvbiBvZiBwbGF5YmFjaworYWZ0ZXIgdGhlIHNlZWsgaXMgcGVyZm9ybWVkLiBPcHRpb25hbGx5IHRoZSBzdG9wIHBvc2l0aW9uIGNhbiBiZSBsZWZ0CithdCAtMSB0byBjb250aW51ZSBwbGF5YmFjayB0byB0aGUgZW5kIG9mIHRoZSBzdHJlYW0uIFRoZSBzZWVrIGV2ZW50CithbHNvIGNvbnRhaW5zIHRoZSBuZXcgcGxheWJhY2sgcmF0ZSBvZiB0aGUgc3RyZWFtLCAxLjAgaXMgbm9ybWFsIHBsYXliYWNrLAorMi4wIGRvdWJsZSBzcGVlZCBhbmQgbmVnYXRpdmUgdmFsdWVzIG1lYW4gYmFja3dhcmRzIHBsYXliYWNrLgorCitBIHNlZWsgdXN1YWxseSBmbHVzaGVzIHRoZSBncmFwaCB0byBtaW5pbWl6ZSBsYXRlbmN5IGFmdGVyIHRoZSBzZWVrLiBUaGlzCitiZWhhdmlvdXIgaXMgdHJpZ2dlcmVkIGJ5IHVzaW5nIHRoZSBTRUVLX0ZMVVNIIGZsYWcgb24gdGhlIHNlZWsgZXZlbnQuIAorCitUaGUgc2VlayBldmVudCB1c3VhbGx5IHN0YXJ0cyBmcm9tIHRoZSBzaW5rIGVsZW1lbnRzIGFuZCB0cmF2ZWxzIHVwc3RyZWFtCitmcm9tIGVsZW1lbnQgdG8gZWxlbWVudCB1bnRpbCBpdCByZWFjaGVzIGFuIGVsZW1lbnQgdGhhdCBjYW4gcGVyZm9ybSB0aGUKK3NlZWsuIE5vIGludGVybWVkaWF0ZSBlbGVtZW50IGlzIGFsbG93ZWQgdG8gYXNzdW1lIHRoYXQgYSBzZWVrIHRvIHRoaXMKK2xvY2F0aW9uIHdpbGwgaGFwcGVuLiBJdCBpcyBhbGxvd2VkIHRvIG1vZGlmeSB0aGUgc3RhcnQgYW5kIHN0b3AgdGltZXMgaWYgaXQKK25lZWRzIHRvIGRvIHNvLiB0aGlzIGlzIHR5cGljYWxseSB0aGUgY2FzZSBpZiBhIHNlZWsgaXMgcmVxdWVzdGVkIGZvciBhCitub24tdGltZSBwb3NpdGlvbi4KKworVGhlIGFjdHVhbCBzZWVrIGlzIHBlcmZvcm1lZCBpbiB0aGUgYXBwbGljYXRpb24gdGhyZWFkIHNvIHRoYXQgc3VjY2Vzcworb3IgZmFpbHVyZSBjYW4gYmUgcmVwb3J0ZWQgYXMgYSByZXR1cm4gdmFsdWUgb2YgdGhlIHNlZWsgZXZlbnQuIEl0IGlzCit0aGVyZWZvcmUgaW1wb3J0YW50IHRoYXQgYmVmb3JlIGV4ZWN1dGluZyB0aGUgc2VlaywgdGhlIGVsZW1lbnQgYWNxdWlyZXMKK3RoZSBTVFJFQU1fTE9DSyBzbyB0aGF0IHRoZSBzdHJlYW1pbmcgdGhyZWFkIGFuZCB0aGUgc2VlayBnZXQgc2VyaWFsaXplZC4KKworVGhlIGdlbmVyYWwgZmxvdyBvZiBleGVjdXRpbmcgdGhlIHNlZWsgd2l0aCBGTFVTSCBpcyBhcyBmb2xsb3dzOgorCisgMSkgdW5ibG9jayB0aGUgc3RyZWFtaW5nIHRocmVhZHMsIHRoZXkgY291bGQgYmUgYmxvY2tlZCBpbiBhIGNoYWluIAorICAgIGZ1bmN0aW9uLiBUaGlzIGlzIGRvbmUgYnkgc2VuZGluZyBhIEZMVVNIX1NUQVJUIG9uIGFsbCBzcmNwYWRzIG9yIGJ5IHBhdXNpbmcKKyAgICB0aGUgc3RyZWFtaW5nIHRhc2ssIGRlcGVuZGluZyBvbiB0aGUgc2VlayBGTFVTSCBmbGFnLgorICAgIFRoZSBmbHVzaCB3aWxsIG1ha2Ugc3VyZSB0aGF0IGFsbCBkb3duc3RyZWFtIGVsZW1lbnRzIHVubG9jayBhbmQKKyAgICB0aGF0IGNvbnRyb2wgd2lsbCByZXR1cm4gdG8gdGhpcyBlbGVtZW50IGNoYWluL2xvb3AgZnVuY3Rpb24uCisgICAgV2UgY2Fubm90IGxvY2sgdGhlIFNUUkVBTV9MT0NLIGJlZm9yZSBkb2luZyB0aGlzIHNpbmNlIGl0IG1pZ2h0CisgICAgY2F1c2UgYSBkZWFkbG9jay4KKworIDIpIGFjcXVpcmUgdGhlIFNUUkVBTV9MT0NLLiBUaGlzIHdpbGwgd29yayBzaW5jZSB0aGUgY2hhaW4vbG9vcCBmdW5jdGlvbgorICAgIHdhcyB1bmxvY2tlZC9wYXVzZWQgaW4gc3RlcCAxKS4KKworIDMpIHBlcmZvcm0gdGhlIHNlZWsuIHNpbmNlIHRoZSBTVFJFQU1fTE9DSyBpcyBoZWxkLCB0aGUgc3RyZWFtaW5nIHRocmVhZAorICAgIHdpbGwgd2FpdCBmb3IgdGhlIHNlZWsgdG8gY29tcGxldGUuIE1vc3QgbGlrZWx5LCB0aGUgc3RyZWFtIHRocmVhZAorICAgIHdpbGwgcGF1c2UgYmVjYXVzZSB0aGUgcGVlciBlbGVtZW50cyBhcmUgZmx1c2hpbmcuCisKKyA0KSBzZW5kIGEgRkxVU0hfU1RPUCBldmVudCB0byBhbGwgcGVlciBlbGVtZW50cyB0byBhbGxvdyBzdHJlYW1pbmcgYWdhaW4uCisKKyA1KSBjcmVhdGUgYSBORVdTRUdNRU5UIGV2ZW50IHRvIHNpZ25hbCB0aGUgbmV3IGJ1ZmZlciB0aW1lc3RhbXAgYmFzZSB0aW1lLgorICAgIFRoaXMgZXZlbnQgbXVzdCBiZSBxdWV1ZWQgdG8gYmUgc2VudCBieSB0aGUgc3RyZWFtaW5nIHRocmVhZC4KKworIDYpIHN0YXJ0IHN0b3BwZWQgdGFza3MgYW5kIHVubG9jayB0aGUgU1RSRUFNX0xPQ0ssIGRhdGFmbG93IHdpbGwgY29udGludWUKKyAgICBub3cgZnJvbSB0aGUgbmV3IHBvc2l0aW9uLgorCitNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkaWZmZXJlbnQgc2VlayB0eXBlcyBjYW4gYmUgZm91bmQgaW4gCitwYXJ0LXNlZWtpbmcudHh0LgorCisKK05BVklHQVRJT04KK35+fn5+fn5+fn5+CisKK0EgbmF2aWdhdGlvbiBldmVudCBpcyBnZW5lcmF0ZWQgYnkgYSBzaW5rIGVsZW1lbnQgdG8gc2lnbmFsIHRoZSBlbGVtZW50cworb2YgYSBuYXZpZ2F0aW9uIGV2ZW50IHN1Y2ggYXMgYSBtb3VzZSBtb3ZlbWVudCBvciBidXR0b24gY2xpY2suCitOYXZpZ2F0aW9uIGV2ZW50cyB0cmF2ZWwgdXBzdHJlYW0uCisKKworTEFURU5DWQorfn5+fn5+fgorCitBIGxhdGVuY3kgZXZlbnQgaXMgdXNlZCB0byBjb25maWd1cmUgYSBjZXJ0YWluIGxhdGVuY3kgaW4gdGhlIHBpcGVsaW5lLiBJdAorY29udGFpbnMgYSBzaW5nbGUgR3N0Q2xvY2tUaW1lIHdpdGggdGhlIHJlcXVpcmVkIGxhdGVuY3kuIFRoZSBsYXRlbmN5IHZhbHVlIGlzCitjYWxjdWxhdGVkIGJ5IHRoZSBwaXBlbGluZSBhbmQgZGlzdHJpYnV0ZWQgdG8gYWxsIHNpbmsgZWxlbWVudHMgYmVmb3JlIHRoZXkgYXJlCitzZXQgdG8gUExBWUlORy4gVGhlIHNpbmtzIHdpbGwgYWRkIHRoZSBjb25maWd1cmVkIGxhdGVuY3kgdmFsdWUgdG8gdGhlCit0aW1lc3RhbXBzIG9mIHRoZSBidWZmZXIgaW4gb3JkZXIgdG8gZGVsYXkgdGhlaXIgcHJlc2VudGF0aW9uLgorKFNlZSBhbHNvIHBhcnQtbGF0ZW5jeS50eHQpLgorCisKK0RSQUlOCit+fn5+fgorCitOT1RFOiBUaGlzIGV2ZW50IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisKK0RyYWluIGV2ZW50IGluZGljYXRlcyB0aGF0IHVwc3RyZWFtIGlzIGFib3V0IHRvIHBlcmZvcm0gYSByZWFsLXRpbWUgZXZlbnQsIHN1Y2gKK2FzIHBhdXNpbmcgdG8gcHJlc2VudCBhbiBpbnRlcmFjdGl2ZSBtZW51IG9yIHN1Y2gsIGFuZCBuZWVkcyB0byB3YWl0IGZvciBhbGwKK2RhdGEgaXQgaGFzIHNlbnQgdG8gYmUgcGxheWVkLW91dCBpbiB0aGUgc2luay4KKworRHJhaW4gc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBsaXZlIGVsZW1lbnRzLCBhcyBpdCBtYXkgb3RoZXJ3aXNlIG9jY3VyIGR1cmluZworcHJlcm9sbGluZy4KKworVXN1YWxseSBhZnRlciBkcmFpbmluZyB0aGUgcGlwZWxpbmUsIGFuIGVsZW1lbnQgZWl0aGVyIG5lZWRzIHRvIG1vZGlmeSB0aW1lc3RhbXBzLAorb3IgRkxVU0ggdG8gcHJldmVudCBzdWJzZXF1ZW50IGRhdGEgYmVpbmcgZGlzY2FyZGVkIGF0IHRoZSBzaW5rcyBmb3IgYXJyaXZpbmcKK2xhdGUgKG9ubHkgYXBwbGllcyBkdXJpbmcgcGxheWJhY2sgc2NlbmFyaW9zKS4gCisKZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtZnJhbWVzdGVwLnR4dCBiL2RvY3MvZGVzaWduL3BhcnQtZnJhbWVzdGVwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmQ4ODk1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9kZXNpZ24vcGFydC1mcmFtZXN0ZXAudHh0CkBAIC0wLDAgKzEsMjQ4IEBACitGcmFtZSBzdGVwCistLS0tLS0tLS0tCisKK1RoaXMgZG9jdW1lbnQgb3V0bGluZXMgdGhlIGRldGFpbHMgb2YgdGhlIGZyYW1lIHN0ZXBwaW5nIGZ1bmN0aW9uYWxpdHkgaW4KK0dTdHJlYW1lci4KKworVGhlIHN0ZXBwaW5nIGZ1bmN0aW9uYWxpdHkgb3BlcmF0ZXMgb24gdGhlIGN1cnJlbnQgcGxheWJhY2sgc2VnbWVudCwgcG9zaXRpb24KK2FuZCByYXRlIGFzIGl0IHdhcyBjb25maWd1cmVkIHdpdGggYSByZWd1bGFyIHNlZWsgZXZlbnQuIEluIGNvbnRyYXN0IHRvIHRoZSBzZWVrCitldmVudCwgaXQgb3BlcmF0ZXMgdmVyeSBjbG9zZWx5IHRvIHRoZSBzaW5rIGFuZCB0aHVzIGhhcyBhIHZlcnkgbG93IGxhdGVuY3kgYW5kCitpcyBub3Qgc2xvd2VkIGRvd24gYnkgcXVldWVzIGFuZCBkb2VzIG5vdCBhY3R1YWxseSBwZXJmb3JtIGFueSBzZWVraW5nIGxvZ2ljLgorRm9yIHRoaXMgcmVhc29uIHdlIHdhbnQgdG8gaW5jbHVkZSBhIG5ldyBBUEkgaW5zdGVhZCBvZiByZXVzaW5nIHRoZSBzZWVrIEFQSS4KKworVGhlIGZvbGxvd2luZyByZXF1aXJlbWVudHMgYXJlIG5lZWRlZDoKKworIC0gVGhlIGFiaWxpdHkgdG8gd2FsayBmb3J3YXJkcyBhbmQgYmFja3dhcmRzIGluIHRoZSBzdHJlYW0uCisgLSBBcmJpdHJhcnkgaW5jcmVtZW50cyBpbiBhbnkgc3VwcG9ydGVkIGZvcm1hdCAodGltZSwgZnJhbWVzLCBieXRlcyAuLi4pCisgLSBIaWdoIHNwZWVkLCBtaW5pbWFsIG92ZXJoZWFkLiBUaGlzIG1lY2hhbmlzbSBpcyBub3QgbW9yZSBleHBlbnNpdmUgdGhhbgorICAgc2ltcGxlIHBsYXliYWNrLiAKKyAtIHN3aXRjaGluZyBiZXR3ZWVuIGZvcndhcmRzIGFuZCBiYWNrd2FyZHMgc3RlcHBpbmcgc2hvdWxkIGJlIGZhc3QuCisgLSBNYWludGFpbiBzeW5jaHJvbmlzYXRpb24gYmV0d2VlbiBzdHJlYW1zLgorIC0gR2V0IGZlZWRiYWNrIG9mIHRoZSBhbW91bnQgb2Ygc2tpcHBlZCBkYXRhLgorIC0gQWJpbGl0eSB0byBwbGF5IGEgY2VydGFpbiBhbW91bnQgb2YgZGF0YSBhdCBhbiBhcmJpdHJhcnkgc3BlZWQuCisKK1dlIHdhbnQgYSBzeXN0ZW0gd2hlcmUgd2UgY2FuIHN0ZXAgZnJhbWVzIGluIFBBVVNFRCBhcyB3ZWxsIGFzIHBsYXkgc2hvcnQKK3NlZ21lbnRzIG9mIGRhdGEgaW4gUExBWUlORy4KKworCitVc2UgQ2FzZXMKK35+fn5+fn5+fgorCisgKiBmcmFtZSBzdGVwcGluZyBpbiB2aWRlbyBvbmx5IHBpcGVsaW5lIGluIFBBVVNFRAorCisgICAgLi0tLS0tLiAgICAuLS0tLS0tLS4gICAgICAgICAgICAgIC4tLS0tLS0uICAgIC4tLS0tLS0tLgorICAgIHwgc3JjIHwgICAgfCBkZW11eCB8ICAgIC4tLS0tLS4gICB8IHZkZWMgfCAgICB8IHZzaW5rIHwKKyAgICB8ICAgIHNyYy0+c2luayAgICBzcmMxLT58cXVldWV8LT5zaW5rICAgc3JjLT5zaW5rICAgICB8CisgICAgJy0tLS0tJyAgICAnLS0tLS0tLScgICAgJy0tLS0tJyAgICctLS0tLS0nICAgICctLS0tLS0tJworCisgICAgLSBhcHAgc2V0cyB0aGUgcGlwZWxpbmUgdG8gUEFVU0VEIHRvIGJsb2NrIG9uIHRoZSBwcmVyb2xsIHBpY3R1cmUKKyAgICAtIGFwcCBzZWVrcyB0byByZXF1aXJlZCBwb3NpdGlvbiBpbiB0aGUgc3RyZWFtLiBUaGlzIGNhbiBiZSBkb25lIHdpdGggYQorICAgICAgcG9zaXRpdmUgb3IgbmVnYXRpdmUgcmF0ZSBkZXBlbmRpbmcgb24gdGhlIHJlcXVpcmVkIGZyYW1lIHN0ZXBwaW5nCisgICAgICBkaXJlY3Rpb24uCisgICAgLSBhcHAgc3RlcHMgZnJhbWVzIChpbiBHU1RfRk9STUFUX0RFRkFVTFQgb3IgR1NUX0ZPUk1BVF9CVUZGRVIpLiBUaGUKKyAgICAgIHBpcGVsaW5lIGxvc2VzIGl0cyBQQVVTRUQgc3RhdGUgdW50aWwgdGhlIHJlcXVpcmVkIG51bWJlciBvZiBmcmFtZXMgaGF2ZQorICAgICAgYmVlbiBza2lwcGVkLCBpdCB0aGVuIHByZXJvbGxzIGFnYWluLiBUaGlzIHNraXBwaW5nIGlzIHB1cmVseSBkb25lIGluCisgICAgICB0aGUgc2luay4KKyAgICAtIHNpbmsgcG9zdHMgU1RFUF9ET05FIHdpdGggYW1vdW50IG9mIGZyYW1lcyBzdGVwcGVkIGFuZCBjb3JyZXNwb25kaW5nIHRpbWUKKyAgICAgIGludGVydmFsLgorCisgKiBmcmFtZSBzdGVwcGluZyBpbiBhdWRpby92aWRlbyBwaXBlbGluZSBpbiBQQVVTRUQKKworICAgIC4tLS0tLS4gICAgLi0tLS0tLS0uICAgICAgICAgICAgICAuLS0tLS0tLiAgICAuLS0tLS0tLS4KKyAgICB8IHNyYyB8ICAgIHwgZGVtdXggfCAgICAuLS0tLS0uICAgfCB2ZGVjIHwgICAgfCB2c2luayB8CisgICAgfCAgICBzcmMtPnNpbmsgICAgc3JjMS0+fHF1ZXVlfC0+c2luayAgIHNyYy0+c2luayAgICAgfAorICAgICctLS0tLScgICAgfCAgICAgICB8ICAgICctLS0tLScgICAnLS0tLS0tJyAgICAnLS0tLS0tLScKKyAgICAgICAgICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICAgLi0tLS0tLS4gICAgLi0tLS0tLS0uCisgICAgICAgICAgICAgICB8ICAgICAgIHwgICAgLi0tLS0tLiAgIHwgYWRlYyB8ICAgIHwgYXNpbmsgfAorICAgICAgICAgICAgICAgfCAgICAgIHNyYzItPnxxdWV1ZXwtPnNpbmsgICBzcmMtPnNpbmsgICAgIHwKKyAgICAgICAgICAgICAgICctLS0tLS0tJyAgICAnLS0tLS0nICAgJy0tLS0tLScgICAgJy0tLS0tLS0nCisKKworICAgIC0gYXBwIHNldHMgdGhlIHBpcGVsaW5lIHRvIFBBVVNFRCB0byBibG9jayBvbiB0aGUgcHJlcm9sbCBwaWN0dXJlCisgICAgLSBhcHAgc2Vla3MgdG8gcmVxdWlyZWQgcG9zaXRpb24gaW4gdGhlIHN0cmVhbS4gVGhpcyBjYW4gYmUgZG9uZSB3aXRoIGEKKyAgICAgIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIHJhdGUgZGVwZW5kaW5nIG9uIHRoZSByZXF1aXJlZCBmcmFtZSBzdGVwcGluZworICAgICAgZGlyZWN0aW9uLgorICAgIC0gYXBwIHN0ZXBzIGZyYW1lcyAoaW4gR1NUX0ZPUk1BVF9ERUZBVUxUIG9yIEdTVF9GT1JNQVRfQlVGRkVSKSBvciBhbiBhbW91bnQKKyAgICAgIG9mIHRpbWUgb24gdGhlIHZpZGVvIHNpbmsuIFRoZSBwaXBlbGluZSBsb3NlcyBpdHMgUEFVU0VEIHN0YXRlIHVudGlsIHRoZQorICAgICAgcmVxdWlyZWQgbnVtYmVyIG9mIGZyYW1lcyBoYXZlIGJlZW4gc2tpcHBlZCwgaXQgdGhlbiBwcmVyb2xscyBhZ2Fpbi4KKyAgICAgIFRoaXMgc2tpcHBpbmcgaXMgcHVyZWx5IGRvbmUgaW4gdGhlIHNpbmsuCisgICAgLSBzaW5rIHBvc3RzIFNURVBfRE9ORSB3aXRoIGFtb3VudCBvZiBmcmFtZXMgc3RlcHBlZCBhbmQgY29ycmVzcG9uZGluZyB0aW1lCisgICAgICBpbnRlcnZhbC4KKyAgICAtIHRoZSBhcHAgc2tpcHMgdGhlIHNhbWUgYW1vdW50IG9mIHRpbWUgb24gdGhlIGF1ZGlvc2luayB0byBhbGlnbiB0aGUKKyAgICAgIHN0cmVhbXMgYWdhaW4uIFdoZW4gaHVnZSBhbW91bnQgb2YgdmlkZW8gZnJhbWVzIGFyZSBza2lwcGVkLCB0aGVyZSBuZWVkcworICAgICAgdG8gYmUgZW5vdWdoIHF1ZXVlaW5nIGluIHRoZSBwaXBlbGluZSB0byBjb21wZW5zYXRlIGZvciB0aGUgYWNjdW11bGF0ZWQKKyAgICAgIGF1ZGlvLgorCisgKiBmcmFtZSBzdGVwcGluZyBpbiBhdWRpby92aWRlbyBwaXBlbGluZSBpbiBQTEFZSU5HCisKKyAgICAtIGFwcCBzZXRzIHRoZSBwaXBlbGluZSB0byBQQVVTRUQgdG8gYmxvY2sgb24gdGhlIHByZXJvbGwgcGljdHVyZQorICAgIC0gYXBwIHNlZWtzIHRvIHJlcXVpcmVkIHBvc2l0aW9uIGluIHRoZSBzdHJlYW0uIFRoaXMgY2FuIGJlIGRvbmUgd2l0aCBhCisgICAgICBwb3NpdGl2ZSBvciBuZWdhdGl2ZSByYXRlIGRlcGVuZGluZyBvbiB0aGUgcmVxdWlyZWQgZnJhbWUgc3RlcHBpbmcKKyAgICAgIGRpcmVjdGlvbi4KKyAgICAtIGFwcCBjb25maWd1cmVzIGZyYW1lcyBzdGVwcyAoaW4gR1NUX0ZPUk1BVF9ERUZBVUxUIG9yIEdTVF9GT1JNQVRfQlVGRkVSKSBvcgorICAgICAgYW4gYW1vdW50IG9mIHRpbWUgb24gdGhlIHNpbmsuIFRoZSBzdGVwIGV2ZW50IGhhcyBhIGZsYWcgaW5kaWNhdGluZyBsaXZlCisgICAgICBzdGVwcGluZyBzbyB0aGF0IHRoZSBzdGVwcGluZyB3aWxsIG9ubHkgaGFwcGVucyBpbiBQTEFZSU5HLiAKKyAgICAtIGFwcCBzZXRzIHBpcGVsaW5lIHRvIFBMQVlJTkcuIFRoZSBwaXBlbGluZSBjb250aW51ZXMgUExBWUlORyB1bnRpbCBpdAorICAgICAgY29uc3VtZWQgdGhlIGFtb3VudCBvZiB0aW1lLgorICAgIC0gc2luayBwb3N0cyBTVEVQX0RPTkUgd2l0aCBhbW91bnQgb2YgZnJhbWVzIHN0ZXBwZWQgYW5kIGNvcnJlc3BvbmRpbmcgdGltZQorICAgICAgaW50ZXJ2YWwuIFRoZSBzaW5rIHdpbGwgdGhlbiB3YWl0IGZvciBhbm90aGVyIHN0ZXAgZXZlbnQuIFNpbmNlIHRoZQorICAgICAgU1RFUF9ET05FIG1lc3NhZ2Ugd2FzIGVtaXRlZCBieSB0aGUgc2luayB3aGVuIGl0IGhhbmRlZCBvZmYgdGhlIGJ1ZmZlciB0bworICAgICAgdGhlIGRldmljZSwgdGhlcmUgaXMgdXN1YWxseSBzdWZmaWNpZW50IHRpbWUgdG8gcXVldWUgYSBuZXcgU1RFUCBldmVudCBzbworICAgICAgdGhhdCBvbmUgY2FuIHNlYW1sZXNzbHkgY29udGludWUgc3RlcHBpbmcuCisKKworZXZlbnRzCit+fn5+fn4KKworQSBuZXcgR1NUX0VWRU5UX1NURVAgZXZlbnQgaXMgaW50cm9kdWNlZCB0byBzdGFydCB0aGUgc3RlcCBvcGVyYXRpb24uICAKK1RoZSBzdGVwIGV2ZW50IGlzIGNyZWF0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGZpZWxkcyBpbiB0aGUgc3RydWN0dXJlOgorCisgICJmb3JtYXQiLCBHU1RfVFlQRV9GT1JNQVQKKyAgICAgVGhlIGZvcm1hdCBvZiB0aGUgc3RlcCB1bml0cworCisgICJhbW91bnQiLCBHX1RZUEVfVUlOVDY0CisgICAgIFRoZSBhbW91bnQgb2YgdW5pdHMgdG8gc3RlcC4gLTEgcmVzdW1lcyBub3JtYWwgbm9uLXN0ZXBwaW5nIGJlaGF2aW91ciB0bworICAgICB0aGUgZW5kIG9mIHRoZSBzZWdtZW50LgorCisgICJyYXRlIiwgR19UWVBFX0RPVUJMRQorICAgICBUaGUgcmF0ZSBhdCB3aGljaCB0aGUgZnJhbWVzIHNob3VsZCBiZSBzdGVwcGVkIGluIFBMQVlJTkcgbW9kZS4gMS4wIGlzCisgICAgIHRoZSBub3JtYWwgcGxheWJhY2sgc3BlZWQgYW5kIGRpcmVjdGlvbiBvZiB0aGUgc2VnbWVudCwgMi4wCisgICAgIGlzIGRvdWJsZSBzcGVlZC4gQSBzcGVlZCBvZiAwLjAgaXMgbm90IGFsbG93ZWQuIFdoZW4gcGVyZm9ybWluZyBhCisgICAgIGZsdXNoaW5nIHN0ZXAsIHRoZSBzcGVlZCBpcyBub3QgcmVsZXZhbnQuIE5vdGUgdGhhdCB3ZSBkb24ndCBhbGxvdyBuZWdhdGl2ZQorICAgICByYXRlcyBoZXJlLCB1c2UgYSBzZWVrIHdpdGggYSBuZWdhdGl2ZSByYXRlIGZpcnN0IHRvIHJldmVyc2UgdGhlIHBsYXliYWNrCisgICAgIGRpcmVjdGlvbi4KKworICAiZmx1c2giLCBHX1RZUEVfQk9PTEVBTgorICAgICB3aGVuIGZsdXNoaW5nIGlzIFRSVUUsIHRoZSBzdGVwIGlzIHBlcmZvcm1lZCBpbW1lZGlhdGVseToKKworICAgICAgLSBJbiB0aGUgUEFVU0VEIHN0YXRlIHRoZSBwaXBlbGluZSBsb3NlcyB0aGUgUEFVU0VEIHN0YXRlLCB0aGUgcmVxdWVzdGVkCisgICAgICAgIGFtb3VudCBvZiBkYXRhIGlzIHNraXBwZWQgYW5kIHRoZSBwaXBlbGluZSBwcmVyb2xscyBhZ2FpbiB3aGVuIGEKKwlub24taW50ZXJtZWRpYXRlIHN0ZXAgY29tcGxldGVzLgorCVdoZW4gdGhlIHBpcGVsaW5lIHdhcyBzdGVwcGluZyB3aGlsZSB0aGUgZXZlbnQgaXMgc2VudCwgdGhlIGN1cnJlbnQgc3RlcAorCW9wZXJhdGlvbiBpcyB1cGRhdGVkIHdpdGggdGhlIG5ldyBhbW91bnQgYW5kIGZvcm1hdC4gVGhlIHNpbmsgd2lsbCBkbyBhCisJYmVzdCBlZmZvcnQgdG8gY29tcGx5IHdpdGggdGhlIG5ldyBhbW91bnQuCisgICAgICAtIEluIHRoZSBQTEFZSU5HIHN0YXRlLCB0aGUgcGlwZWxpbmUgbG9zZXMgdGhlIFBMQVlJTkcgc3RhdGUsIHRoZQorICAgICAgICByZXF1ZXN0ZWQgYW1vdW50IG9mIGRhdGEgaXMgc2tpcHBlZCAobm90IHJlbmRlcmVkKSBmcm9tIHRoZSBwcmV2aW91cyBTVEVQCisJcmVxdWVzdCBvciBmcm9tIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGFzdCBQQVVTRUQgaWYgbm8gcHJldmlvdXMgU1RFUAorCW9wZXJhdGlvbiB3YXMgcGVyZm9ybWVkLiBUaGUgcGlwZWxpbmUgZ29lcyBiYWNrIHRvIHRoZSBQTEFZSU5HIHN0YXRlCisJd2hlbiBhIG5vbi1pbnRlcm1lZGlhdGUgc3RlcCBjb21wbGV0ZXMuCisKKyAgICAgV2hlbiBmbHVzaGluZyBpcyBGQUxTRSwgdGhlIHN0ZXAgd2lsbCBiZSBwZXJmb3JtZWQgbGF0ZXIuCisKKyAgICAgIC0gSW4gdGhlIFBBVVNFRCBzdGF0ZSB0aGUgc3RlcCB3aWxsIGJlIGRvbmUgd2hlbiBnb2luZyB0byBQTEFZSU5HLiBBbnkKKwlwcmV2aW91cyBzdGVwIG9wZXJhdGlvbiB3aWxsIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgbmV3IFNURVAgZXZlbnQuCisgICAgICAtIEluIHRoZSBQTEFZSU5HIHN0YXRlIHRoZSBzdGVwIG9wZXJhdGlvbiB3aWxsIGJlIHBlcmZvcm1lZCBhZnRlciB0aGUKKwljdXJyZW50IHN0ZXAgb3BlcmF0aW9uIGNvbXBsZXRlcy4gSWYgdGhlcmUgd2FzIG5vIHByZXZpb3VzIHN0ZXAKKwlvcGVyYXRpb24sIHRoZSBzdGVwIG9wZXJhdGlvbiB3aWxsIGJlIHBlcmZvcm1lZCBmcm9tIHRoZSBwb3NpdGlvbiBvZiB0aGUKKwlsYXN0IFBBVVNFRCBzdGF0ZS4gCisKKyAgImludGVybWVkaWF0ZSIsIEdfVFlQRV9CT09MRUFOCisgICAgIFNpZ25hbCB0aGF0IHRoaXMgc3RlcCBvcGVyYXRpb24gaXMgYW4gaW50ZXJtZWRpYXRlIHN0ZXAsIHBhcnQgb2YgYSBzZXJpZXMKKyAgICAgb2Ygc3RlcCBvcGVyYXRpb25zLiBJdCBpcyBtb3N0bHkgaW50ZXJlc3RpbmcgZm9yIHN0ZXBwaW5nIGluIHRoZSBQQVVTRUQgc3RhdGUKKyAgICAgYmVjYXVzZSB0aGUgc2luayB3aWxsIG9ubHkgcGVyZm9ybSBhIHByZXJvbGwgYWZ0ZXIgYSBub24taW50ZXJtZWRpYXRlIHN0ZXAKKyAgICAgb3BlcmF0aW9uIGNvbXBsZXRlcy4gSW50ZXJtZWRpYXRlIHN0ZXBzIGFyZSB1c2VmdWwgdG8gZmx1c2ggb3V0IGRhdGEgZnJvbQorICAgICBvdGhlciBzaW5rcyBpbiBvcmRlciB0byBub3QgY2F1c2UgZXhjZXNzaXZlIHF1ZXVlaW5nLiBJbiB0aGUgUExBWUlORyBzdGF0ZQorICAgICB0aGUgaW50ZXJtZWRpYXRlIGZsYWcgaGFzIG5vIHZpc3VhbCBlZmZlY3QuIEluIGFsbCBzdGF0ZXMsIHRoZSBpbnRlcm1lZGlhdGUKKyAgICAgZmxhZyBpcyBwYXNzZWQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgR1NUX01FU1NBR0VfU1RFUF9ET05FLgorCisKK1RoZSBhcHBsaWNhdGlvbiB3aWxsIGNyZWF0ZSBhIFNURVAgZXZlbnQgdG8gc3RhcnQgb3Igc3RvcCB0aGUgc3RlcHBpbmcKK29wZXJhdGlvbi4gQm90aCBzdGVwcGluZyBpbiBQQVVTRUQgYW5kIFBMQVlJTkcgY2FuIGJlIHBlcmZvcm1lZCBieSBtZWFucyBvZiAKK3RoZSBmbHVzaCBmbGFnLgorCitUaGUgZXZlbnQgaXMgdXN1YWxseSBzZW50IHRvIHRoZSBwaXBlbGluZSwgd2hpY2ggd2lsbCB0eXBpY2FsbHkgZGlzdHJpYnV0ZSB0aGUKK2V2ZW50IHRvIGFsbCBvZiBpdHMgc2lua3MuIEZvciBzb21lIHVzZSBjYXNlcywgbGlrZSBmcmFtZSBzdGVwcGluZyBvbiB2aWRlbworZnJhbWVzIG9ubHksIHRoZSBldmVudCBzaG91bGQgb25seSBiZSBzZW50IHRvIHRoZSB2aWRlbyBzaW5rIGFuZCB1cG9uIHJlY2VwdGlvbgorb2YgdGhlIFNURVBfRE9ORSBtZXNzYWdlLCBvbmUgY2FuIHN0ZXAgdGhlIG90aGVyIHNpbmtzIHRvIGFsaWduIHRoZSBzdHJlYW1zCithZ2Fpbi4KKworRm9yIGxhcmdlIHN0ZXBwaW5nIGFtb3VudHMsIHRoZXJlIG5lZWRzIHRvIGJlIGVub3VnaCBxdWV1ZWluZyBpbiBmcm9udCBvZiBhbGwKK3RoZSBzaW5rcy4gSWYgbGFyZ2Ugc3RlcHMgbmVlZCB0byBiZSBwZXJmb3JtZWQsIHRoZXkgY2FuIGJlIHNwbGl0IHVwIGludG8KK3NtYWxsZXIgc3RlcCBvcGVyYXRpb25zIHVzaW5nIHRoZSAiaW50ZXJtZWRpYXRlIiBmbGFnIG9uIHRoZSBzdGVwLiAKKworU2luY2UgdGhlIHN0ZXAgZXZlbnQgZG9lcyBub3QgdXBkYXRlIHRoZSBiYXNlX3RpbWUgb2YgYW55IG9mIHRoZSBlbGVtZW50cywgdGhlCitzaW5rcyBzaG91bGQga2VlcCB0cmFjayBvZiB0aGUgYW1vdW50IG9mIHN0ZXBwZWQgZGF0YSBpbiBvcmRlciB0byByZW1haW4KK3N5bmNocm9uaXplZCBhZ2FpbnN0IHRoZSBjbG9jay4KKworCittZXNzYWdlcworfn5+fn5+fn4KKworQSBHU1RfTUVTU0FHRV9TVEVQX1NUQVJUIGlzIGNyZWF0ZWQuIEl0IGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZmllbGRzLgorCisgICJhY3RpdmUiCisgICAgIElmIHRoZSBzdGVwIHdhcyBxdWV1ZWQgb3IgYWN0aXZhdGVkLgorCisgICJmb3JtYXQiLCBHU1RfVFlQRV9GT1JNQVQKKyAgICAgVGhlIGZvcm1hdCBvZiB0aGUgc3RlcCB1bml0cyB0aGF0IHF1ZXVlZC9hY3RpdmF0ZWQuCisKKyAgImFtb3VudCIsIEdfVFlQRV9VSU5UNjQKKyAgICAgVGhlIGFtb3VudCBvZiB1bml0cyB0aGF0IHdlcmUgcXVldWVkL2FjdGl2YXRlZC4KKworICAicmF0ZSIsIEdfVFlQRV9ET1VCTEUKKyAgICAgVGhlIHJhdGUgYW5kIGRpcmVjdGlvbiBhdCB3aGljaCB0aGUgZnJhbWVzIHdlcmUgcXVldWVkL2FjdGl2YXRlZC4KKworICAiZmx1c2giLCBHX1RZUEVfQk9PTEVBTgorICAgICBJZiB0aGUgcXVldWVkL2FjdGl2YXRlZCBmcmFtZXMgd2lsbCBiZSBmbHVzaGVkLgorCisgICJpbnRlcm1lZGlhdGUiLCBHX1RZUEVfQk9PTEVBTgorICAgICBJZiB0aGlzIGlzIGFuIGludGVybWVkaWF0ZSBzdGVwIG9wZXJhdGlvbiB0aGF0IHF1ZXVlZC9hY3RpdmF0ZWQuCisKK1RoZSBTVEVQX1NUQVJUIG1lc3NhZ2UgaXMgZW1pdGVkIDIgdGltZXM6CisgCisgICogZmlyc3Qgd2hlbiBhbiBlbGVtZW50IHJlY2VpdmVkIHRoZSBTVEVQIGV2ZW50IGFuZCBxdWV1ZWQgaXQuIFRoZSAiYWN0aXZlIgorICAgIGZpZWxkIHdpbGwgYmUgRkFMU0UgaW4gdGhpcyBjYXNlLgorCisgICogc2Vjb25kIHdoZW4gdGhlIHN0ZXAgb3BlcmF0aW9uIHN0YXJ0ZWQgaW4gdGhlIHN0cmVhbWluZyB0aHJlYWQuIFRoZSAiYWN0aXZlIgorICAgIGZpZWxkIGlzIFRSVUUgaW4gdGhpcyBjYXNlLiBBZnRlciB0aGlzIG1lc3NhZ2UgaXMgZW1pdGVkLCB0aGUgYXBwbGljYXRpb24KKyAgICBjYW4gcXVldWUgYSBuZXcgc3RlcCBvcGVyYXRpb24uCisKK1RoZSBwdXJwb3NlIG9mIHRoaXMgbWVzc2FnZSBpcyB0byBmaW5kIG91dCBob3cgbWFueSBlbGVtZW50cyBwYXJ0aWNpcGF0ZSBpbiB0aGUKK3N0ZXAgb3BlcmF0aW9uIGFuZCB0byBxdWV1ZSBuZXcgc3RlcCBvcGVyYXRpb25zIGF0IHRoZSBlYXJsaWVzdCBwb3NzaWJsZQorbW9tZW50LgorCitBIG5ldyBHU1RfTUVTU0FHRV9TVEVQX0RPTkUgbWVzc2FnZSBpcyBjcmVhdGVkLiBJdCBjb250YWlucyB0aGUgZm9sbG93aW5nCitmaWVsZHM6CisKKyAgImZvcm1hdCIsIEdTVF9UWVBFX0ZPUk1BVAorICAgICBUaGUgZm9ybWF0IG9mIHRoZSBzdGVwIHVuaXRzIHRoYXQgY29tcGxldGVkLgorCisgICJhbW91bnQiLCBHX1RZUEVfVUlOVDY0CisgICAgIFRoZSBhbW91bnQgb2YgdW5pdHMgdGhhdCB3ZXJlIHN0ZXBwZWQuCisKKyAgInJhdGUiLCBHX1RZUEVfRE9VQkxFCisgICAgIFRoZSByYXRlIGFuZCBkaXJlY3Rpb24gYXQgd2hpY2ggdGhlIGZyYW1lcyB3ZXJlIHN0ZXBwZWQuCisKKyAgImZsdXNoIiwgR19UWVBFX0JPT0xFQU4KKyAgICAgSWYgdGhlIHN0ZXBwZWQgZnJhbWVzIHdlcmUgZmx1c2hlZC4KKworICAiaW50ZXJtZWRpYXRlIiwgR19UWVBFX0JPT0xFQU4KKyAgICAgSWYgdGhpcyBpcyBhbiBpbnRlcm1lZGlhdGUgc3RlcCBvcGVyYXRpb24gdGhhdCBjb21wbGV0ZWQuCisKKyAgImR1cmF0aW9uIiwgR19UWVBFX1VJTlQ2NAorICAgICBUaGUgdG90YWwgZHVyYXRpb24gb2YgdGhlIHN0ZXBwZWQgdW5pdHMgaW4gR1NUX0ZPUk1BVF9USU1FLgorCisgICJlb3MiLCBHX1RZUEVfQk9PTEVBTgorICAgICBUaGUgc3RlcCBlbmRlZCBiZWNhdXNlIG9mIEVPUy4KKworVGhlIG1lc3NhZ2UgaXMgZW1pdGVkIGJ5IHRoZSBlbGVtZW50IHRoYXQgcGVyZm9ybXMgdGhlIHN0ZXAgb3BlcmF0aW9uLiBUaGUKK3B1cnBvc2UgaXMgdG8gcmV0dXJuIHRoZSBkdXJhdGlvbiBpbiBHU1RfRk9STUFUX1RJTUUgb2YgdGhlIHN0ZXBwZWQgbWVkaWEuIFRoaXMKK2VzcGVjaWFsbHkgaW50ZXJlc3RpbmcgdG8gYWxpZ24gb3RoZXIgc3RyZWFtIGluIGNhc2Ugb2Ygc3RlcHBpbmcgZnJhbWVzIG9uIHRoZQordmlkZW8gc2luayBlbGVtZW50LgorCisKK0RpcmVjdGlvbiBzd2l0Y2gKK35+fn5+fn5+fn5+fn5+fn4KKworV2hlbiBxdWlja2x5IHN3aXRjaGluZyBiZXR3ZWVuIGEgZm9yd2FyZHMgYW5kIGEgYmFja3dhcmRzIHN0ZXAgb2YsIGZvciBleGFtcGxlLAorb25lIHZpZGVvIGZyYW1lLCB3ZSBuZWVkIGVpdGhlcjoKKworICBhKSBpc3N1ZSBhIG5ldyBzZWVrIHRvIGNoYW5nZSB0aGUgZGlyZWN0aW9uIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgIGIpIGNhY2hlIGEgY2VydGFpbiBudW1iZXIgb2Ygc3RlcHBlZCBmcmFtZXMgYW5kIHdhbGsgdGhlIGNhY2hlLgorCitvcHRpb24gYSkgbWlnaHQgYmUgdmVyeSBzbG93LgorRm9yIG9wdGlvbiBiKSB3ZSB3b3VsZCBpZGVhbGx5IGxpa2UgdG8gb2ZmbG9hZCB0aGlzIGNhY2hpbmcgZnVuY3Rpb25hbGl0eSB0byBhCitzZXBhcmF0ZSBlbGVtZW50LCB3aGljaCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gZm9yd2FyZCB0aGUgU1RFUCBldmVudCB1cHN0cmVhbS4KK0l0J3MgdW5jbGVhciBob3cgdGhpcyBjb3VsZCB3b3JrIGluIGEgZ2VuZXJpYyB3YXkuIFdoYXQgaXMgYSBkZW11eGVyIHN1cHBvc2VkCit0byBkbyB3aGVuIGl0IHJlY2VpdmVkIGEgc3RlcCBldmVudD8gYSBmbHVzaGluZyBzZWVrIHRvIHdoYXQgc3RyZWFtIHBvc2l0aW9uPworCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LWdzdGJpbi50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LWdzdGJpbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY0ODZmOAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZGVzaWduL3BhcnQtZ3N0YmluLnR4dApAQCAtMCwwICsxLDExNCBAQAorR3N0QmluCistLS0tLS0KKworR3N0QmluIGlzIGEgY29udGFpbmVyIGVsZW1lbnQgZm9yIG90aGVyIEdzdEVsZW1lbnRzLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlCit0byBncm91cCBlbGVtZW50cyB0b2dldGhlciBzbyB0aGF0IHRoZXkgY2FuIGJlIHRyZWF0ZWQgYXMgb25lIHNpbmdsZSAKK0dzdEVsZW1lbnQuIEEgR3N0QmluIHByb3ZpZGVzIGEgR3N0QnVzIGZvciB0aGUgY2hpbGRyZW4gYW5kIGNvbGxhdGVzIG1lc3NhZ2VzCitmcm9tIHRoZW0uCisKK0FkZC9yZW1vdmluZyBlbGVtZW50cworfn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBiYXNpYyBmdW5jdGlvbmFsaXR5IG9mIGEgYmluIGlzIHRvIGFkZCBhbmQgcmVtb3ZlIEdzdEVsZW1lbnRzIHRvL2Zyb20gaXQuCitnc3RfYmluX2FkZCgpIGFuZCBnc3RfYmluX3JlbW92ZSgpIHBlcmZvcm0gdGhlc2Ugb3BlcmF0aW9ucyByZXNwZWN0aXZlbHkuCisKK1RoZSBiaW4gbWFpbnRhaW5zIGEgcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcCB3aXRoIGl0cyBlbGVtZW50cyAoc2VlIHBhcnQtCityZWxhdGlvbnMudHh0KS4KKworCitSZXRyaWV2aW5nIGVsZW1lbnRzCit+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0dzdEJpbiBwcm92aWRlcyBhIG51bWJlciBvZiBmdW5jdGlvbnMgdG8gcmV0cmlldmUgb25lIG9yIG1vcmUgY2hpbGRyZW4gZnJvbQoraXRzZWxmLiBBIGZldyBleGFtcGxlcyBvZiB0aGUgcHJvdmlkZWQgZnVuY3Rpb25zOgorCitnc3RfYmluX2dldF9ieV9uYW1lKCkgcmV0cmlldmVzIGFuIGVsZW1lbnQgYnkgbmFtZS4KKworZ3N0X2Jpbl9pdGVyYXRlX2VsZW1lbnRzKCkgcmV0dXJucyBhbiBpdGVyYXRvciB0byBhbGwgdGhlIGNoaWxkcmVuLgorCisKK2VsZW1lbnQgbWFuYWdlbWVudAorfn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBtb3N0IGltcG9ydGFudCBmdW5jdGlvbiBvZiB0aGUgR3N0QmluIGlzIHRvIGRpc3RyaWJ1dGUgYWxsIEdzdEVsZW1lbnQKK29wZXJhdGlvbnMgb24gaXRzZWxmIHRvIGFsbCBvZiBpdHMgY2hpbGRyZW4uIFRoaXMgaW5jbHVkZXM6CisKKyAtIHN0YXRlIGNoYW5nZXMKKyAtIGluZGV4IGdldC9zZXQKKyAtIGNsb2NrIGdldC9zZXQKKworVGhlIHN0YXRlIGNoYW5nZSBkaXN0cmlidXRpb24gaXMgdGhlIG1vc3QgY29tcGxleCBhbmQgaXMgZXhwbGFpbmVkIGluIAorcGFydC1zdGF0ZXMudHh0LgorCitHc3RCdXMKK35+fn5+fgorCitUaGUgR3N0QmluIGNyZWF0ZXMgYSBHc3RCdXMgZm9yIGl0cyBjaGlsZHJlbiBhbmQgZGlzdHJpYnV0ZXMgaXQgd2hlbiBjaGlsZAorZWxlbWVudHMgYXJlIGFkZGVkIHRvIHRoZSBiaW4uIFRoZSBiaW4gYXR0YWNoZXMgYSBzeW5jIGhhbmRsZXIgdG8gcmVjZWl2ZQorbWVzc2FnZXMgZnJvbSBjaGlsZHJlbi4gVGhlIGJ1cyBmb3IgcmVjZWl2aW5nIG1lc3NhZ2VzIGZyb20gY2hpbGRyZW4gaXMgCitkaXN0aW5jdCBmcm9tIHRoZSBiaW4ncyBvd24gZXh0ZXJuYWxseS12aXNpYmxlIEdzdEJ1cy4gCisKK01lc3NhZ2VzIHJlY2VpdmVkIGZyb20gY2hpbGRyZW4gYXJlIGZvcndhcmRlZCBpbnRhY3Qgb250byB0aGUgYmluJ3MgCitleHRlcm5hbCBtZXNzYWdlIGJ1cywgZXhjZXB0IGZvciBFT1MgYW5kIFNFR01FTlRfU1RBUlQvRE9ORSB3aGljaCBhcmUgCitoYW5kbGVkIHNwZWNpYWxseS4KKworQVNZTkNfU1RBUlQvQVNZTkNfU1RPUCBtZXNzYWdlcyByZWNlaXZlZCBmcm9tIHRoZSBjaGlsZHJlbiBhcmUgdXNlZCB0bwordHJpZ2dlciBhIHJlY2FsY3VsYXRpb24gb2YgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGJpbiwgYXMgZGVzY3JpYmVkIGluIAorcGFydC1zdGF0ZXMudHh0LgorCitUaGUgYXBwbGljYXRpb24gY2FuIHJldHJpZXZlIHRoZSBleHRlcm5hbCBHc3RCdXMgYW5kIGludGVncmF0ZSBpdCBpbiB0aGUKK21haW5sb29wIG9yIGl0IGNhbiBqdXN0IF9wb3AoKSBtZXNzYWdlcyBvZmYgaW4gaXRzIG93biB0aHJlYWQuCisKK1doZW4gYSBiaW4gZ29lcyB0byBSRUFEWSBpdCB3aWxsIGNsZWFyIGFsbCBjYWNoZWQgbWVzc2FnZXMuCisKKworRU9TCit+fn4KKworVGhlIHNpbmsgZWxlbWVudHMgd2lsbCBwb3N0IGFuIEVPUyBtZXNzYWdlIG9uIHRoZSBidXMgd2hlbiB0aGV5IHJlYWNoIEVPUy4gVGhlCitFT1MgbWVzc2FnZSBpcyBvbmx5IHBvc3RlZCB0byB0aGUgYnVzIHdoZW4gdGhlIHNpbmsgZWxlbWVudCBpcyBpbiBQTEFZSU5HLgorCitUaGUgYmluIGNvbGxlY3RzIGFsbCBFT1MgbWVzc2FnZXMgYW5kIGZvcndhcmRzIGl0IHRvIHRoZSBhcHBsaWNhdGlvbiBhcworc29vbiBhcyBhbGwgdGhlIHNpbmtzIGhhdmUgcG9zdGVkIGFuIEVPUy4KKworVGhlIGxpc3Qgb2YgcXVldWVkIEVPUyBtZXNzYWdlcyBpcyBjbGVhcmVkIHdoZW4gdGhlIGJpbiBnb2VzIHRvIFBBVVNFRAorYWdhaW4uIFRoaXMgbWVhbnMgdGhhdCBhbGwgZWxlbWVudHMgc2hvdWxkIHJlcG9zdCB0aGUgRU9TIG1lc3NhZ2Ugd2hlbiBnb2luZwordG8gUExBWUlORyBhZ2Fpbi4KKworCitTRUdNRU5UX1NUQVJUL0RPTkUKK35+fn5+fn5+fn5+fn5+fn5+fgorCitBIGJpbiBjb2xsZWN0cyBTRUdNRU5UX1NUQVJUIG1lc3NhZ2VzIGJ1dCBkb2VzIG5vdCBwb3N0IHRoZW0gdG8gdGhlIGFwcGxpY2F0aW9uLgorSXQgY291bnRzIHRoZSBudW1iZXIgb2YgU0VHTUVOVF9TVEFSVCBtZXNzYWdlcyBhbmQgcG9zdHMgYSBTRUdNRU5UX1NUT1AgbWVzc2FnZQordG8gdGhlIGFwcGxpY2F0aW9uIHdoZW4gYW4gZXF1YWwgbnVtYmVyIG9mIFNFR01FTlRfU1RPUCBtZXNzYWdlcyB3aGVyZSByZWNlaXZlZC4KKworVGhlIGNhY2hlZCBTRUdNRU5UX1NUQVJUL1NUT1AgbWVzc2FnZXMgYXJlIGNsZWFyZWQgd2hlbiBnb2luZyB0byBSRUFEWS4KKworCitEVVJBVElPTgorfn5+fn5+fn4KKworV2hlbiBhIERVUkFUSU9OIHF1ZXJ5IGlzIHBlcmZvcm1lZCBvbiBhIGJpbiwgaXQgd2lsbCBmb3J3YXJkIHRoZSBxdWVyeSB0byBhbGwKK2l0cyBzaW5rIGVsZW1lbnRzLiBUaGUgYmluIHdpbGwgY2FsY3VsYXRlIHRoZSB0b3RhbCBkdXJhdGlvbiBhcyB0aGUgTUFYIG9mIGFsbAorcmV0dXJuZWQgZHVyYXRpb25zIGFuZCB3aWxsIHRoZW4gY2FjaGUgdGhlIHJlc3VsdCBzbyB0aGF0IGFueSBmdXJ0aGVyIHF1ZXJ5IGNhbgordXNlIHRoZSBjYWNoZWQgdmVyc2lvbi4gVGhlIHJlYXNvbiBmb3IgY2FjaGluZyB0aGUgcmVzdWx0IGlzIGJlY2F1c2UgdGhlCitkdXJhdGlvbiBvZiBhIHN0cmVhbSB0eXBpY2FsbHkgZG9lcyBub3QgY2hhbmdlIHRoYXQgb2Z0ZW4uCisKK0EgR1NUX01FU1NBR0VfRFVSQVRJT04gcG9zdGVkIGJ5IGFuIGVsZW1lbnQgd2lsbCBjbGVhciB0aGUgY2FjaGVkIGR1cmF0aW9uIHZhbHVlCitzbyB0aGF0IHRoZSBiaW4gd2lsbCBxdWVyeSB0aGUgc2lua3MgYWdhaW4uIFRoaXMgbWVzc2FnZSBpcyB0eXBpY2FsbHkgcG9zdGVkIGJ5CitlbGVtZW50cyB0aGF0IGNhbGN1bGF0ZSB0aGUgZHVyYXRpb24gb2YgdGhlIHN0cmVhbSBiYXNlZCBvbiBzb21lIGF2ZXJhZ2UKK2JpdHJhdGUsIHdoaWNoIG1pZ2h0IGNoYW5nZSB3aGlsZSBwbGF5aW5nIHRoZSBzdHJlYW0uIFRoZSBEVVJBVElPTiBtZXNzYWdlIGlzCitwb3N0ZWQgdG8gdGhlIGFwcGxpY2F0aW9uLCB3aGljaCBjYW4gdGhlbiBmZXRjaCB0aGUgdXBkYXRlZCBEVVJBVElPTi4KKworCitTdWJjbGFzc2luZworfn5+fn5+fn5+fn4KKworU3ViY2xhc3NlcyBvZiBHc3RCaW4gYXJlIGZyZWUgdG8gaW1wbGVtZW50IHRoZWlyIG93biBhZGQvcmVtb3ZlIGltcGxlbWVudGF0aW9ucy4KK0l0IGlzIGEgZ29vZCBpZGVhIHRvIHVwZGF0ZSB0aGUgR0xpc3Qgb2YgY2hpbGRyZW4gc28gdGhhdCB0aGUgX2l0ZXJhdGUoKSBmdW5jdGlvbnMKK2NhbiBzdGlsbCBiZSB1c2VkIGlmIHRoZSBjdXN0b20gYmluIGFsbG93cyBhY2Nlc3MgdG8gaXRzIGNoaWxkcmVuLgorCitBbnkgYmluIHN1YmNsYXNzIGNhbiBhbHNvIGltcGxlbWVudCBhIGN1c3RvbSBtZXNzYWdlIGhhbmRsZXIgYnkgb3ZlcnJpZGluZyB0aGUKK2RlZmF1bHQgbWVzc2FnZSBoYW5kbGVyLgorCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LWdzdGJ1cy50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LWdzdGJ1cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU4MDY0ZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZGVzaWduL3BhcnQtZ3N0YnVzLnR4dApAQCAtMCwwICsxLDQxIEBACitHc3RCdXMKKy0tLS0tLQorCitUaGUgR3N0QnVzIGlzIGFuIG9iamVjdCByZXNwb25zaWJsZSBmb3IgZGVsaXZlcmluZyBHc3RNZXNzYWdlcyBpbgorYSBmaXJzdC1pbiBmaXJzdC1vdXQgd2F5IGZyb20gdGhlIHN0cmVhbWluZyB0aHJlYWRzIHRvIHRoZSBhcHBsaWNhdGlvbi4KKworU2luY2UgdGhlIGFwcGxpY2F0aW9uIHR5cGljYWxseSBvbmx5IHdhbnRzIHRvIGRlYWwgd2l0aCBkZWxpdmVyeSBvZiB0aGVzZQorbWVzc2FnZXMgZnJvbSBvbmUgdGhyZWFkLCB0aGUgR3N0QnVzIHdpbGwgbWFyc2hhbGwgdGhlIG1lc3NhZ2VzIGJldHdlZW4KK2RpZmZlcmVudCB0aHJlYWRzLiBUaGlzIGlzIGltcG9ydGFudCBzaW5jZSB0aGUgYWN0dWFsIHN0cmVhbWluZyBvZiBtZWRpYQoraXMgZG9uZSBpbiBhbm90aGVyIHRocmVhZHMgKHN0cmVhbWluZyB0aHJlYWRzKSB0aGFuIHRoZSBhcHBsaWNhdGlvbi4gSXQgaXMKK2Fsc28gaW1wb3J0YW50IHRvIG5vdCBibG9jayB0aGUgc3RyZWFtaW5nIHRocmVhZHMgd2hpbGUgdGhlIGFwcGxpY2F0aW9uIGRlYWxzCit3aXRoIHRoZSBtZXNzYWdlLgorCitUaGUgR3N0QnVzIHByb3ZpZGVzIHN1cHBvcnQgZm9yIEdTb3VyY2UgYmFzZWQgbm90aWZpY2F0aW9ucy4gVGhpcyBtYWtlcyBpdAorcG9zc2libGUgdG8gaGFuZGxlIHRoZSBkZWxpdmVyeSBpbiB0aGUgZ2xpYiBtYWlubG9vcC4gRGlmZmVyZW50IEdTb3VyY2VzIAorY2FuIGJlIGFkZGVkIHRvIHRoZSBzYW1lIGJpbiBwcm92aWRlZCB0aGV5IGxpc3RlbiB0byBkaWZmZXJlbnQgbWVzc2FnZSB0eXBlcy4KKworQSBtZXNzYWdlIGlzIHBvc3RlZCBvbiB0aGUgYnVzIHdpdGggdGhlIGdzdF9idXNfcG9zdCgpIG1ldGhvZC4gV2l0aCB0aGUKK2dzdF9idXNfcGVlaygpIGFuZCBfcG9wKCkgbWV0aG9kcyBvbmUgY2FuIGxvb2sgYXQgb3IgcmV0cmlldmUgYSBwcmV2aW91c2x5Citwb3N0ZWQgbWVzc2FnZS4KKworVGhlIGJ1cyBjYW4gYmUgcG9sbGVkIHdpdGggdGhlIGdzdF9idXNfcG9sbCgpIG1ldGhvZC4gVGhpcyBtZXRob2RzIGJsb2NrcwordXAgdG8gdGhlIHNwZWNpZmllZCB0aW1lb3V0IHZhbHVlIHVudGlsIG9uZSBvZiB0aGUgc3BlY2lmaWVkIG1lc3NhZ2VzIHR5cGVzCitpcyBwb3N0ZWQgb24gdGhlIGJ1cy4gVGhlIGFwcGxpY2F0aW9uIGNhbiB0aGVuIF9wb3AoKSB0aGUgbWVzc2FnZXMgZnJvbSB0aGUKK2J1cyB0byBoYW5kbGUgdGhlbS4gCisKK0l0IGlzIGFsc28gcG9zc2libGUgdG8gZ2V0IG1lc3NhZ2VzIGZyb20gdGhlIGJ1cyB3aXRob3V0IGFueSB0aHJlYWQgCittYXJzaGFsbGluZyB3aXRoIHRoZSBnc3RfYnVzX3NldF9zeW5jX2hhbmRsZXIoKSBtZXRob2QuIFRoaXMgbWFrZXMgaXQKK3Bvc3NpYmxlIHRvIHJlYWN0IHRvIGEgbWVzc2FnZSBpbiB0aGUgc2FtZSB0aHJlYWQgdGhhdCBwb3N0ZWQgdGhlCittZXNzYWdlIG9uIHRoZSBidXMuIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB0aGUgYXBwbGljYXRpb24gaXMgYWJsZQordG8gZGVhbCB3aXRoIG1lc3NhZ2VzIGZyb20gZGlmZmVyZW50IHRocmVhZHMuCisKK0lmIG5vIG1lc3NhZ2VzIGFyZSBwb3BwZWQgZnJvbSB0aGUgYnVzIHdpdGggZWl0aGVyIGEgR1NvdXJjZSBvciBnc3RfYnVzX3BvcCgpLAordGhleSByZW1haW4gb24gdGhlIGJ1cy4KKworV2hlbiBhIHBpcGVsaW5lIG9yIGJpbiBnb2VzIGZyb20gUkVBRFkgaW50byBOVUxMIHN0YXRlLCBpdCB3aWxsIHNldCBpdHMgYnVzCit0byBmbHVzaGluZywgaWUuIHRoZSBidXMgd2lsbCBkcm9wIGFsbCBleGlzdGluZyBhbmQgbmV3IG1lc3NhZ2VzIG9uIHRoZSBidXMsCitUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGJ1cyBtZXNzYWdlcyBob2xkIHJlZmVyZW5jZXMgdG8gdGhlIGJpbi9waXBlbGluZQorb3IgaXRzIGVsZW1lbnRzLCBzbyB0aGVyZSBhcmUgY2lyY3VsYXIgcmVmZXJlbmNlcyB0aGF0IG5lZWQgdG8gYmUgYnJva2VuIGlmCitvbmUgZXZlciB3YW50cyB0byBiZSBhYmxlIHRvIGRlc3Ryb3kgYSBiaW4gb3IgcGlwZWxpbmUgcHJvcGVybHkuCisKZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtZ3N0ZWxlbWVudC50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LWdzdGVsZW1lbnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMWZmYzYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2Rlc2lnbi9wYXJ0LWdzdGVsZW1lbnQudHh0CkBAIC0wLDAgKzEsNjkgQEAKK0dzdEVsZW1lbnQKKy0tLS0tLS0tLS0KKworVGhlIEVsZW1lbnQgaXMgdGhlIG1vc3QgaW1wb3J0YW50IG9iamVjdCBpbiB0aGUgZW50aXJlIEdTdHJlYW1lciBzeXN0ZW0sIGFzIGl0CitkZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHBpcGVsaW5lLiAgRWxlbWVudHMgaW5jbHVkZSBzb3VyY2VzLCBmaWx0ZXJzLAorc2lua3MsIGFuZCBjb250YWluZXJzIChCaW5zKS4gIFRoZXkgbWF5IGJlIGFuIGludHJpbnNpYyBwYXJ0IG9mIHRoZSBjb3JlCitHU3RyZWFtZXIgbGlicmFyeSwgb3IgbWF5IGJlIGxvYWRlZCBmcm9tIGEgcGx1Z2luLiAgSW4gc29tZSBjYXNlcyB0aGV5J3JlIGV2ZW4KK2ZhYnJpY2F0ZWQgZnJvbSBjb21wbGV0ZWx5IGRpZmZlcmVudCBzeXN0ZW1zIChzZWUgdGhlIExBRFNQQSBwbHVnaW4pLiAgVGhleQorYXJlIGdlbmVyYWxseSBjcmVhdGVkIGZyb20gYSBHc3RFbGVtZW50RmFjdG9yeSwgd2hpY2ggd2lsbCBiZSBjb3ZlcmVkIGluCithbm90aGVyIGNoYXB0ZXIsIGJ1dCBmb3IgdGhlIGludHJpbnNpYyB0eXBlcyB0aGV5IGNhbiBiZSBjcmVhdGVkIHdpdGggc3BlY2lmaWMKK2Z1bmN0aW9ucy4KKworRWxlbWVudHMgY29udGFpbnMgR3N0UGFkcyAoYWxzbyBjb3ZlcmVkIGluIGFub3RoZXIgY2hhcHRlciksIHdoaWNoIGFyZQorc3Vic2VxdWVudGx5IHVzZWQgdG8gY29ubmVjdCB0aGUgRWxlbWVudHMgdG9nZXRoZXIgdG8gZm9ybSBhIHBpcGVsaW5lIGNhcGFibGUKK29mIHBhc3NpbmcgYW5kIHByb2Nlc3NpbmcgZGF0YS4gIFRoZXkgaGF2ZSBhIHBhcmVudCwgd2hpY2ggbXVzdCBiZSBhbm90aGVyCitFbGVtZW50LiAgVGhpcyBhbGxvd3MgZGVlcGx5IG5lc3RlZCBwaXBlbGluZXMsIGFuZCB0aGUgcG9zc2liaWxpdHkgb2YKKyJibGFjay1ib3giIG1ldGEtZWxlbWVudHMuCisKK05hbWUKK35+fn4KKworQWxsIGVsZW1lbnRzIGFyZSBuYW1lZCwgYW5kIHdoaWxlIHRoZXkgc2hvdWxkIGlkZWFsbHkgYmUgdW5pcXVlIGluIGFueSBnaXZlbgorcGlwZWxpbmUsIHRoZXkgZG8gbm90IGhhdmUgdG8gYmUuICBUaGUgb25seSBndWFyYW50ZWVkIHVuaXF1ZSBuYW1lIGZvciBhbgorZWxlbWVudCBpcyBpdHMgY29tcGxldGUgcGF0aCBpbiB0aGUgb2JqZWN0IGhpZXJhcmNoeS4gIEluIG90aGVyIHdvcmRzLCBhbgorZWxlbWVudCdzIG5hbWUgaXMgdW5pcXVlIGluc2lkZSBpdHMgcGFyZW50LiAgKFRoaXMgZm9sbG93cyBmcm9tIEdzdE9iamVjdCdzCituYW1lIGV4cGxhbmF0aW9uKQorCitUaGlzIHVuaXF1ZW5lc3MgaXMgZ3VhcmFudGVlZCB0aHJvdWdoIGFsbCBmdW5jdGlvbnMgd2hlcmUgZWl0aGVyIHBhcmVudGFnZQorb3IgbmFtZSBvZiBhbiBlbGVtZW50IGlzIGNoYW5nZWQuCisKKworUGFkcworfn5+fgorCitHc3RQYWRzIGFyZSB0aGUgcHJvcGVydHkgb2YgYSBnaXZlbiBHc3RFbGVtZW50LiAgVGhleSBwcm92aWRlIHRoZSBjb25uZWN0aW9uCitjYXBhYmlsaXR5LCB3aXRoIGFsbG93aW5nIGFyYml0cmFyeSBzdHJ1Y3R1cmUgaW4gdGhlIGdyYXBoLiAgRm9yIGFueSBFbGVtZW50CitidXQgYSBzb3VyY2Ugb3Igc2luaywgdGhlcmUgd2lsbCBiZSBhdCBsZWFzdCAyIFBhZHMgb3duZWQgYnkgdGhlIEVsZW1lbnQuICAKK1RoZXNlIHBhZHMgYXJlIHN0b3JlZCBpbiBhIHNpbmdsZSBHTGlzdCB3aXRoaW4gdGhlIEVsZW1lbnQuICBTZXZlcmFsIGNvdW50ZXJzCithcmUga2VwdCBpbiBvcmRlciB0byBhbGxvdyBxdWlja2VyIGRldGVybWluYXRpb24gb2YgdGhlIHR5cGUgYW5kIHByb3BlcnRpZXMgb2YKK2EgZ2l2ZW4gRWxlbWVudC4KKworUGFkcyBtYXkgYmUgYWRkZWQgdG8gYW4gZWxlbWVudCB3aXRoIF9hZGRfcGFkLiAgUmV0cmlldmFsIGlzIHZpYSBfZ2V0X3N0YXRpY19wYWQoKSwKK3doaWNoIG9wZXJhdGVzIG9uIHRoZSBuYW1lIG9mIHRoZSBQYWQgKHRoZSB1bmlxdWUga2V5KS4gIFRoaXMgbWVhbnMgdGhhdCBhbGwKK1BhZHMgb3duZWQgYnkgYSBnaXZlbiBFbGVtZW50IG11c3QgaGF2ZSB1bmlxdWUgbmFtZXMuCitBIHBvaW50ZXIgdG8gdGhlIEdMaXN0IG9mIHBhZHMgbWF5IGJlIG9idGFpbmVkIHdpdGggX2l0ZXJhdGVfcGFkcy4gCisKK2dzdF9lbGVtZW50X2FkZF9wYWQoZWxlbWVudCxwYWRzKToKKwlTZXRzIHRoZSBlbGVtZW50IGFzIHRoZSBwYXJlbnQgb2YgdGhlIHBhZCwgdGhlbiBhZGRzIHRoZSBwYWQgdG8gdGhlCisJZWxlbWVudCdzIGxpc3Qgb2YgcGFkcywga2VlcGluZyB0aGUgY291bnRzIG9mIHRvdGFsLCBzcmMsIGFuZCBzaW5rIHBhZHMKKwl1cCB0byBkYXRlLiAgRW1pdHMgdGhlICJuZXdfcGFkIiBzaWduYWwgd2l0aCB0aGUgcGFkIGFzIGFyZ3VtZW50LiAKKwlGYWlscyBpZiBlaXRoZXIgdGhlIGVsZW1lbnQgb3IgcGFkIGFyZSBlaXRoZXIgTlVMTCBvciBub3Qgd2hhdCB0aGV5CisJY2xhaW0gdG8gYmUuICBTaG91bGQgZmFpbCBpZiB0aGUgcGFkIGFscmVhZHkgaGFzIGEgcGFyZW50LiBTaG91bGQgZmFpbAorCWlmIHRoZSBwYWQgaXMgYWxyZWFkeSBvd25lZCBieSB0aGUgZWxlbWVudC4gIFNob3VsZCBmYWlsIGlmIHRoZXJlJ3MKKwlhbHJlYWR5IGEgcGFkIGJ5IHRoYXQgbmFtZSBpbiB0aGUgbGlzdCBvZiBwYWRzLgorCitwYWQgPSBnc3RfZWxlbWVudF9nZXRfcGFkKGVsZW1lbnQsInBhZG5hbWUiKToKKwlTZWFyY2hlcyB0aHJvdWdoIHRoZSBsaXN0IG9mIHBhZHMgCisKKworR2hvc3QgUGFkcworfn5+fn5+fn5+fgorCitNb3JlIGluZm8gaW4gcGFydC1nc3RnaG9zdHBhZC50eHQuCisKK1N0YXRlCit+fn5+fgorCitBbiBlbGVtZW50IGhhcyBhIHN0YXRlLiBNb3JlIGluZm8gaW4gcGFydC1zdGF0ZXMudHh0LgorCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LWdzdGdob3N0cGFkLnR4dCBiL2RvY3MvZGVzaWduL3BhcnQtZ3N0Z2hvc3RwYWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0M2Y2ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2Rlc2lnbi9wYXJ0LWdzdGdob3N0cGFkLnR4dApAQCAtMCwwICsxLDQ1MSBAQAorR2hvc3RwYWRzCistLS0tLS0tLS0KKworR2hvc3RQYWRzIGFyZSB1c2VkIHRvIGJ1aWxkIGNvbXBsZXggY29tcG91bmQgZWxlbWVudHMgb3V0IG9mCitleGlzdGluZyBlbGVtZW50cy4gVGhleSBhcmUgdXNlZCB0byBleHBvc2UgaW50ZXJuYWwgZWxlbWVudCBwYWRzCitvbiB0aGUgY29tcGxleCBlbGVtZW50LgorCitTb21lIGRlc2lnbiByZXF1aXJlbWVudHMKKworICAtIE11c3QgbG9vayBsaWtlIGEgcmVhbCBHc3RQYWQgb24gYm90aCBzaWRlcy4KKyAgLSB0YXJnZXQgb2YgR2hvc3RwYWQgbXVzdCBiZSBjaGFuZ2VhYmxlCisgIC0gdGFyZ2V0IGNhbiBiZSBpbml0aWFsbHkgTlVMTAorCisqIGEgR2hvc3RQYWQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgYSBwcml2YXRlIEdzdFByb3h5UGFkIGNsYXNzOgorCisKKyAgIEdzdFByb3h5UGFkCisgICAoLS0tLS0tLS0tLS0tLS0tLS0tKQorICAgfCBHc3RQYWQgICAgICAgICAgIHwKKyAgIHwtLS0tLS0tLS0tLS0tLS0tLS18CisgICB8IEdzdFBhZCAqdGFyZ2V0ICAgfAorICAgKC0tLS0tLS0tLS0tLS0tLS0tLSkKKyAgIHwgR3N0UGFkICppbnRlcm5hbCB8CisgICAoLS0tLS0tLS0tLS0tLS0tLS0tKQorCisKKyAgIEdzdEdob3N0UGFkCisgICAoLS0tLS0tLS0tLS0tLS0tLS0tKSAgIC1cCisgICB8IEdzdFBhZCAgICAgICAgICAgfCAgICB8CisgICB8LS0tLS0tLS0tLS0tLS0tLS0tfCAgICB8ICAgICAgICAgICAgICAKKyAgIHwgR3N0UGFkICp0YXJnZXQgICB8ICAgICA+IEdzdFByb3h5UGFkCisgICB8LS0tLS0tLS0tLS0tLS0tLS0tfCAgICB8CisgICB8IEdzdFBhZCAqaW50ZXJuYWwgfCAgICB8CisgICB8LS0tLS0tLS0tLS0tLS0tLS0tfCAgIC0vCisgICB8IDxwcml2YXRlIGRhdGE+ICAgfCAgICAgCisgICAoLS0tLS0tLS0tLS0tLS0tLS0tKSAgICAgCisKKyAgQSBHc3RHaG9zdFBhZCAoWCkgaXMgX2Fsd2F5c18gY3JlYXRlZCB0b2dldGhlciB3aXRoIGEgR3N0UHJveHlQYWQgKFkpLiAKKyAgVGhlIGludGVybmFsIHBhZCBwb2ludGVycyBhcmUgc2V0IHRvIHBvaW50IHRvIHRoZSBlYWNob3RoZXIuIFRoZSAKKyAgR3N0UHJveHlQYWQgcGFpcnMgaGF2ZSBvcHBvc2l0ZSBkaXJlY3Rpb25zLCB0aGUgR3N0R2hvc3RQYWQgaGFzIHRoZSBzYW1lCisgIGRpcmVjdGlvbiBhcyB0aGUgKGZ1dHVyZSkgZ2hvc3RlZCBwYWQgKHRhcmdldCkuCisKKworCSgtIFggLS0tLS0tLS0pCisJfCAgICAgICAgICAgIHwKKwl8IHRhcmdldCAqICAgfAorCXwtLS0tLS0tLS0tLS18CisgICAgICAgIHwgaW50ZXJuYWwgKi0tLS0rICAgCisJKC0tLS0tLS0tLS0tLSkgIHwKKyAgICAgICAgICBeICAgICAgICAgICAgIFYKKwkgIHwgICgtIFkgLS0tLS0tLS0pCisJICB8ICB8ICAgICAgICAgICAgfAorCSAgfCAgfCB0YXJnZXQgKiAgIHwKKwkgIHwgIHwtLS0tLS0tLS0tLS18CisgICAgICAgICAgKy0tLS0qIGludGVybmFsIHwgICAgIAorCSAgICAgKC0tLS0tLS0tLS0tLSkKKworICBXaGljaCB3ZSB3aWxsIGFiYnJldmlhdGUgdG86CisKKwkoLSBYIC0tLS0tLS0tKSAgICAgIAorCXwgICAgICAgICAgICB8ICAgICAKKwl8IHRhcmdldCAqLS0tLS0tLS0tPi8vCisJKC0tLS0tLS0tLS0tLSkgICAgIAorICAgICAgICAgICAgIHwgICAgICAgICAgICAKKyAJICAgICgtIFkgLS0tLS0tLS0pIAorICAJICAgIHwgdGFyZ2V0ICotLS0tLT4vLworCSAgICAoLS0tLS0tLS0tLS0tKQorCisgIFRoZSBHc3RHaG9zdFBhZCAoWCkgaXMgYWxzbyBzZXQgYXMgdGhlIHBhcmVudCBvZiB0aGUgR3N0UHJveHlQYWQgKFkpLgorCisgIFRoZSB0YXJnZXQgaXMgYSBwb2ludGVyIHRvIHRoZSBpbnRlcm5hbCBwYWRzIHBlZXIuIEl0IGlzIGFuIG9wdGltaXNhdGlvbiB0bworICBxdWlja2x5IGdldCB0byB0aGUgcGVlciBvZiBhIGdob3N0cGFkIHdpdGhvdXQgaGF2aW5nIHRvIGRlcmVmZXJlbmNlIHRoZQorICBpbnRlcm5hbC0+cGVlci4KKworICBTb21lIHVzZSBjYXNlIGZvbGxvdyB3aXRoIGEgZGVzY3JpcHRpb24gb2YgaG93IHRoZSBkYXRhc3RydWN0dXJlCisgIGlzIG1vZGlmaWVkLgorCisKKyogQ3JlYXRpbmcgYSBnaG9zdHBhZCB3aXRoIGEgdGFyZ2V0OgorCisgICBnc3RfZ2hvc3RfcGFkX25ldyAoY2hhciAqbmFtZSwgR3N0UGFkICp0YXJnZXQpCisKKyAgIDEpIGNyZWF0ZSBuZXcgR3N0R2hvc3RQYWQgWCArIEdzdFByb3h5UGFkIFkKKyAgIDIpIFggbmFtZSBzZXQgdG8gQG5hbWUKKyAgIDMpIFggZGlyZWN0aW9uIGlzIHRoZSBzYW1lIGFzIHRoZSB0YXJnZXQsIFkgaXMgb3Bwb3NpdGUuCisgICA0KSB0aGUgdGFyZ2V0IG9mIFggaXMgc2V0IHRvIEB0YXJnZXQKKyAgIDUpIFkgaXMgbGlua2VkIHRvIEB0YXJnZXQKKyAgIDYpIGxpbmsvdW5saW5rIGFuZCBhY3RpdmF0ZSBmdW5jdGlvbnMgYXJlIHNldCB1cAorICAgICAgb24gR3N0R2hvc3RQYWQuCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLS0tLS0tLS0tLS0tLS0KKwkoLSBYIC0tLS0tLS0tKSAgICAgICAgICAgICAgICB8CisJfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfC0tLS0tLSkKKwl8IHRhcmdldCAqLS0tLS0tLS0tLS0tLS0tLS0tPiB8IHNpbmsgfAorCSgtLS0tLS0tLS0tLS0pICAgICAgIC0tLS0tLS0+IHwtLS0tLS0pCisgICAgICAgICAgICAgfCAgICAgICAgICAgICAgLyAgICAgICAgICgtLS0tLS0tLS0tLS0tLQorIAkgICAgKC0gWSAtLS0tLS0tLSkgLyAocGFkIGxpbmspCisgICAgICAvLzwtLS0tLSogdGFyZ2V0ICAgfC8gICAgICAKKwkgICAgKC0tLS0tLS0tLS0tLSkKKwkKKyAgIC0gQXV0b21hdGljYWxseSB0YWtlcyBzYW1lIGRpcmVjdGlvbiBhcyB0YXJnZXQuCisgICAtIHRhcmdldCBpcyBmaWxsZWQgaW4gYXV0b21hdGljYWxseS4KKworCisqIENyZWF0aW5nIGEgZ2hvc3RwYWQgd2l0aG91dCBhIHRhcmdldAorCisgICBnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXQgKGNoYXIgKm5hbWUsIEdzdFBhZERpcmVjdGlvbiBkaXIpCisKKyAgIDEpIGNyZWF0ZSBuZXcgR3N0R2hvc3RQYWQgWCArIEdzdFByb3h5UGFkIFkKKyAgIDIpIFggbmFtZSBzZXQgdG8gQG5hbWUKKyAgIDMpIFggZGlyZWN0aW9uIGlzIEBkaXIKKyAgIDUpIGxpbmsvdW5saW5rIGFuZCBhY3RpdmF0ZSBmdW5jdGlvbnMgYXJlIHNldCB1cAorICAgICAgb24gR3N0R2hvc3RQYWQuCisKKwkoLSBYIC0tLS0tLS0tKSAgICAgIAorCXwgICAgICAgICAgICB8ICAgICAKKwl8IHRhcmdldCAqLS0tLS0tLS0tPi8vCisJKC0tLS0tLS0tLS0tLSkgICAgIAorICAgICAgICAgICAgIHwgICAgICAgICAgICAKKyAJICAgICgtIFkgLS0tLS0tLS0pIAorICAJICAgIHwgdGFyZ2V0ICotLS0tLT4vLworCSAgICAoLS0tLS0tLS0tLS0tKQorCisgICAtIGFsbG93cyBmb3Igc2V0dGluZyB0aGUgdGFyZ2V0IGxhdGVyCisKKworKiBTZXR0aW5nIHRhcmdldCBvbiBhbiB1bnRhcmdldHRlZCB1bmxpbmtlZCBnaG9zdHBhZAorCisgICBnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQgKGNoYXIgKm5hbWUsIEdzdFBhZCAqbmV3dGFyZ2V0KQorCisJKC0gWCAtLS0tLS0tLSkgICAgICAKKwl8ICAgICAgICAgICAgfCAgICAgCisJfCB0YXJnZXQgKi0tLS0tLS0tLT4vLworCSgtLS0tLS0tLS0tLS0pICAgICAKKyAgICAgICAgICAgICB8ICAgICAgICAgICAgCisgCSAgICAoLSBZIC0tLS0tLS0tKSAKKyAgCSAgICB8IHRhcmdldCAqLS0tLS0+Ly8KKwkgICAgKC0tLS0tLS0tLS0tLSkKKworICAgMSkgYXNzZXJ0IGRpcmVjdGlvbiBvZiBuZXd0YXJnZXQgPT0gWCBkaXJlY3Rpb24KKyAgIDIpIHRhcmdldCBpcyBzZXQgdG8gbmV3dGFyZ2V0CisgICAzKSBpbnRlcm5hbCBwYWQgWSBpcyBsaW5rZWQgdG8gbmV3dGFyZ2V0CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0tLS0tLS0tLS0tLS0tCisJKC0gWCAtLS0tLS0tLSkgICAgICAgICAgICAgICAgfAorCXwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIHwtLS0tLS0pCisJfCB0YXJnZXQgKi0tLS0tLS0tLS0tLS0tLS0tLT4gfCBzaW5rIHwKKwkoLS0tLS0tLS0tLS0tKSAgICAgICAtLS0tLS0tPiB8LS0tLS0tKQorICAgICAgICAgICAgIHwgICAgICAgICAgICAgIC8gICAgICAgICAoLS0tLS0tLS0tLS0tLS0KKyAJICAgICgtIFkgLS0tLS0tLS0pIC8gKHBhZCBsaW5rKQorICAgICAgLy88LS0tLS0qIHRhcmdldCAgIHwvICAgICAgCisJICAgICgtLS0tLS0tLS0tLS0pCisKKyogU2V0dGluZyB0YXJnZXQgb24gYSB0YXJnZXR0ZWQgdW5saW5rZWQgZ2hvc3RwYWQKKworICAgZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0IChjaGFyICpuYW1lLCBHc3RQYWQgKm5ld3RhcmdldCkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLS0tLS0tLS0tLS0tLS0KKwkoLSBYIC0tLS0tLS0tKSAgICAgICAgICAgICAgICB8CisJfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfC0tLS0tLS0pCisJfCB0YXJnZXQgKi0tLS0tLS0tLS0tLS0tLS0tLT4gfCBzaW5rMSB8CisJKC0tLS0tLS0tLS0tLSkgICAgICAgLS0tLS0tLT4gfC0tLS0tLS0pCisgICAgICAgICAgICAgfCAgICAgICAgICAgICAgLyAgICAgICAgICgtLS0tLS0tLS0tLS0tLQorIAkgICAgKC0gWSAtLS0tLS0tLSkgLyAocGFkIGxpbmspCisgICAgICAvLzwtLS0tLSogdGFyZ2V0ICAgfC8gICAgICAKKwkgICAgKC0tLS0tLS0tLS0tLSkKKworICAgMSkgYXNzZXJ0IGRpcmVjdGlvbiBvZiBuZXd0YXJnZXQgKHNpbmsyKSA9PSBYIGRpcmVjdGlvbgorICAgMikgdW5saW5rIGludGVybmFsIHBhZCBZIGFuZCBvbGR0YXJnZXQKKyAgIDMpIHRhcmdldCBpcyBzZXQgdG8gbmV3dGFyZ2V0IChzaW5rMikKKyAgIDQpIGludGVybmFsIHBhZCBZIGlzIGxpbmtlZCB0byBuZXd0YXJnZXQKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLS0tLS0tLS0tLS0tLS0KKwkoLSBYIC0tLS0tLS0tKSAgICAgICAgICAgICAgICB8CisJfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfC0tLS0tLS0pCisJfCB0YXJnZXQgKi0tLS0tLS0tLS0tLS0tLS0tLT4gfCBzaW5rMiB8CisJKC0tLS0tLS0tLS0tLSkgICAgICAgLS0tLS0tLT4gfC0tLS0tLS0pCisgICAgICAgICAgICAgfCAgICAgICAgICAgICAgLyAgICAgICAgICgtLS0tLS0tLS0tLS0tLQorIAkgICAgKC0gWSAtLS0tLS0tLSkgLyAocGFkIGxpbmspCisgICAgICAvLzwtLS0tLSogdGFyZ2V0ICAgfC8gICAgICAKKwkgICAgKC0tLS0tLS0tLS0tLSkKKworKiBMaW5raW5nIGEgcGFkIHRvIGFuIHVudGFyZ2V0dGVkIGdob3N0cGFkOgorCisgIGdzdF9wYWRfbGluayAoc3JjLCBYKQorCisJICAgICAgKC0gWCAtLS0tLS0tLSkgICAgICAKKwkgICAgICB8ICAgICAgICAgICAgfCAgICAgCisJICAgICAgfCB0YXJnZXQgKi0tLS0tLS0tLT4vLworCSAgICAgICgtLS0tLS0tLS0tLS0pICAgICAKKyAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgCisgCSAgICAgICAgICAoLSBZIC0tLS0tLS0tKSAKKyAgCSAgICAgICAgICB8IHRhcmdldCAqLS0tLS0+Ly8KKwkgICAgICAgICAgKC0tLS0tLS0tLS0tLSkKKyAgICAgLS0tLS0tLSkKKyAgICAgICAgICAgIHwKKyAgICAgICgtLS0tLXwKKyAgICAgIHwgc3JjIHwKKyAgICAgICgtLS0tLXwKKyAgICAgLS0tLS0tLSkKKworICAgICBYIGlzIGEgc2luayBHc3RHaG9zdFBhZCB3aXRob3V0IGEgdGFyZ2V0LiBUaGUgaW50ZXJuYWwgR3N0UHJveHlQYWQgWSBoYXMKKyAgICAgdGhlIHNhbWUgZGlyZWN0aW9uIGFzIHRoZSBzcmMgcGFkIChwZWVyKS4KKworICAgIDEpIGxpbmsgZnVuY3Rpb24gaXMgY2FsbGVkCisgICAgICBhKSBZIGRpcmVjdGlvbiBpcyBzYW1lIGFzIEBzcmMKKyAgICAgIGIpIFkgdGFyZ2V0IGlzIHNldCB0byBAc3JjCisgICAgICBjKSBZIGlzIGFjdGl2YXRlZCBpbiB0aGUgc2FtZSBtb2RlIGFzIFgKKyAgICAgIGQpIGNvcmUgbWFrZXMgbGluayBmcm9tIEBzcmMgdG8gWAorCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAoLSBYIC0tLS0tLS0tKQorICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgfCB0YXJnZXQgKi0tLS0tPi8vCisgICAgICAgICAgICAgICAgICAgICAgICA+KC0tLS0tLS0tLS0tLSkKKyAgICAgICAocmVhbCBwYWQgbGluaykgLyAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAvICAgICAgKC0gWSAtLS0tLS0pCisgICAgICAgICAgICAgICAgICAgICAvICAgIC0tLS0tKiB0YXJnZXQgfAorICAgICAgICAgIC0tLS0tLS0pICAvICAgIC8gICAoLS0tLS0tLS0tLSkKKyAgICAgICAgICAgICAgICAgfCAvICAgIC8gICAgICAgICAgICAgICAgIAorICAgICAgICAgICAoLS0tLS18LyAgICAvICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgIHwgc3JjIHw8LS0tLSAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICgtLS0tLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgLS0tLS0tLSkKKworCisqIExpbmtpbmcgYSBwYWQgdG8gYSB0YXJnZXR0ZWQgZ2hvc3RwYWQ6CisKKyAgICBnc3RfcGFkX2xpbmsgKHNyYywgWCkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICgtIFggLS0tLS0tLS0pICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICB8LS0tLS0tKQorICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGFyZ2V0ICotLS0tLS0tLS0tLS0tPnwgc2luayB8CisgICAgICAgICAgICAgICAgICAgICAgICAgKC0tLS0tLS0tLS0tLSkgICAgICAgICA+fC0tLS0tLSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgLyAoLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAvCisgICAgICAgICAgLS0tLS0tLSkgICAgICAgICAgICAgICAgICB8ICAgICAgIC8gKHJlYWwgcGFkIGxpbmspCisJCSB8ICAgICAgICAgICAgKC0gWSAtLS0tLS0pIC8KKyAgICAgICAgICAgKC0tLS0tfCAgICAgICAgICAgIHwgICAgICAgICAgfC8KKyAgICAgICAgICAgfCBzcmMgfCAgICAgICAvLzwtLS0tKiB0YXJnZXQgfAorICAgICAgICAgICAoLS0tLS18ICAgICAgICAgICAgKC0tLS0tLS0tLS0pCisgICAgICAgICAgLS0tLS0tLSkKKworCisgICAgMSkgbGluayBmdW5jdGlvbiBpcyBjYWxsZWQKKyAgICAgIGEpIFkgZGlyZWN0aW9uIGlzIHNhbWUgYXMgQHNyYworICAgICAgYikgWSB0YXJnZXQgaXMgc2V0IHRvIEBzcmMKKyAgICAgIGMpIFkgaXMgYWN0aXZhdGVkIGluIHRoZSBzYW1lIG1vZGUgYXMgWAorICAgICAgZCkgY29yZSBtYWtlcyBsaW5rIGZyb20gQHNyYyB0byBYCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAoLSBYIC0tLS0tLS0tKSAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgfC0tLS0tLSkKKyAgICAgICAgICAgICAgICAgICAgICAgICB8IHRhcmdldCAqLS0tLS0tLS0tLS0tLT58IHNpbmsgfAorICAgICAgICAgICAgICAgICAgICAgICAgPigtLS0tLS0tLS0tLS0pICAgICAgICAgPnwtLS0tLS0pCisgICAgICAgKHJlYWwgcGFkIGxpbmspIC8gICAgICAgICAgICB8ICAgICAgICAgIC8gKC0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgICB8ICAgICAgICAgLworICAgICAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgICAgfCAgICAgICAgLworICAgICAgICAgIC0tLS0tLS0pICAvICAgICAgICAgICAgICAgfCAgICAgICAvIChyZWFsIHBhZCBsaW5rKQorCQkgfCAvICAgICAgICAgICgtIFkgLS0tLS0tKSAvCisgICAgICAgICAgICgtLS0tLXwvICAgICAgICAgICB8ICAgICAgICAgIHwvCisgICAgICAgICAgIHwgc3JjIHw8LS0tLS0tLS0tLS0tLSogdGFyZ2V0IHwKKyAgICAgICAgICAgKC0tLS0tfCAgICAgICAgICAgICgtLS0tLS0tLS0tKQorICAgICAgICAgIC0tLS0tLS0pCisKKworKiBTZXR0aW5nIHRhcmdldCBvbiB1bnRhcmdldHRlZCBsaW5rZWQgZ2hvc3RwYWQ6CisKKyAgIGdzdF9naG9zdF9wYWRfc2V0X3RhcmdldCAoY2hhciAqbmFtZSwgR3N0UGFkICpuZXd0YXJnZXQpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgKC0gWCAtLS0tLS0tLSkKKyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKyAgICAgICAgICAgICAgICAgICAgICAgICB8IHRhcmdldCAqLS0tLS0tPi8vCisgICAgICAgICAgICAgICAgICAgICAgICA+KC0tLS0tLS0tLS0tLSkKKyAgICAgICAocmVhbCBwYWQgbGluaykgLyAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAvICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgIC8gICAgICAgICAgICAgIHwKKyAgICAgICAgICAtLS0tLS0tKSAgLyAgICAgICAgICAgICAgIHwKKwkJIHwgLyAgICAgICAgICAoLSBZIC0tLS0tLSkKKyAgICAgICAgICAgKC0tLS0tfC8gICAgICAgICAgIHwgICAgICAgICAgfAorICAgICAgICAgICB8IHNyYyB8PC0tLS0tLS0tLS0tLS0qIHRhcmdldCB8CisgICAgICAgICAgICgtLS0tLXwgICAgICAgICAgICAoLS0tLS0tLS0tLSkKKyAgICAgICAgICAtLS0tLS0tKQorCisgICAxKSBhc3NlcnQgZGlyZWN0aW9uIG9mIEBuZXd0YXJnZXQgPT0gWCBkaXJlY3Rpb24KKyAgIDIpIFggdGFyZ2V0IGlzIHNldCB0byBAbmV3dGFyZ2V0CisgICAzKSBZIGlzIGxpbmtlZCB0byBAbmV3dGFyZ2V0CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAoLSBYIC0tLS0tLS0tKSAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgfC0tLS0tLSkKKyAgICAgICAgICAgICAgICAgICAgICAgICB8IHRhcmdldCAqLS0tLS0tLS0tLS0tLT58IHNpbmsgfAorICAgICAgICAgICAgICAgICAgICAgICAgPigtLS0tLS0tLS0tLS0pICAgICAgICAgPnwtLS0tLS0pCisgICAgICAgKHJlYWwgcGFkIGxpbmspIC8gICAgICAgICAgICB8ICAgICAgICAgIC8gKC0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgICB8ICAgICAgICAgLworICAgICAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgICAgfCAgICAgICAgLworICAgICAgICAgIC0tLS0tLS0pICAvICAgICAgICAgICAgICAgfCAgICAgICAvIChyZWFsIHBhZCBsaW5rKQorCQkgfCAvICAgICAgICAgICgtIFkgLS0tLS0tKSAvCisgICAgICAgICAgICgtLS0tLXwvICAgICAgICAgICB8ICAgICAgICAgIHwvCisgICAgICAgICAgIHwgc3JjIHw8LS0tLS0tLS0tLS0tLSogdGFyZ2V0IHwKKyAgICAgICAgICAgKC0tLS0tfCAgICAgICAgICAgICgtLS0tLS0tLS0tKQorICAgICAgICAgIC0tLS0tLS0pCisKKyogU2V0dGluZyB0YXJnZXQgb24gdGFyZ2V0dGVkIGxpbmtlZCBnaG9zdHBhZDoKKworICAgZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0IChjaGFyICpuYW1lLCBHc3RQYWQgKm5ld3RhcmdldCkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICgtIFggLS0tLS0tLS0pICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICB8LS0tLS0tLSkKKyAgICAgICAgICAgICAgICAgICAgICAgICB8IHRhcmdldCAqLS0tLS0tLS0tLS0tLT58IHNpbmsxIHwKKyAgICAgICAgICAgICAgICAgICAgICAgID4oLS0tLS0tLS0tLS0tKSAgICAgICAgID58LS0tLS0tLSkKKyAgICAgICAocmVhbCBwYWQgbGluaykgLyAgICAgICAgICAgIHwgICAgICAgICAgLyAoLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAvICAgICAgICAgICAgIHwgICAgICAgICAvCisgICAgICAgICAgICAgICAgICAgICAvICAgICAgICAgICAgICB8ICAgICAgICAvCisgICAgICAgICAgLS0tLS0tLSkgIC8gICAgICAgICAgICAgICB8ICAgICAgIC8gKHJlYWwgcGFkIGxpbmspCisJCSB8IC8gICAgICAgICAgKC0gWSAtLS0tLS0pIC8KKyAgICAgICAgICAgKC0tLS0tfC8gICAgICAgICAgIHwgICAgICAgICAgfC8KKyAgICAgICAgICAgfCBzcmMgfDwtLS0tLS0tLS0tLS0tKiB0YXJnZXQgfAorICAgICAgICAgICAoLS0tLS18ICAgICAgICAgICAgKC0tLS0tLS0tLS0pCisgICAgICAgICAgLS0tLS0tLSkKKworICAgMSkgYXNzZXJ0IGRpcmVjdGlvbiBvZiBAbmV3dGFyZ2V0ID09IFggZGlyZWN0aW9uCisgICAyKSBZIGFuZCBYIHRhcmdldCBhcmUgdW5saW5rZWQKKyAgIDIpIFggdGFyZ2V0IGlzIHNldCB0byBAbmV3dGFyZ2V0CisgICAzKSBZIGlzIGxpbmtlZCB0byBAbmV3dGFyZ2V0CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAoLSBYIC0tLS0tLS0tKSAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgfC0tLS0tLS0pCisgICAgICAgICAgICAgICAgICAgICAgICAgfCB0YXJnZXQgKi0tLS0tLS0tLS0tLS0+fCBzaW5rMiB8CisgICAgICAgICAgICAgICAgICAgICAgICA+KC0tLS0tLS0tLS0tLSkgICAgICAgICA+fC0tLS0tLS0pCisgICAgICAgKHJlYWwgcGFkIGxpbmspIC8gICAgICAgICAgICB8ICAgICAgICAgIC8gKC0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgICB8ICAgICAgICAgLworICAgICAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgICAgfCAgICAgICAgLworICAgICAgICAgIC0tLS0tLS0pICAvICAgICAgICAgICAgICAgfCAgICAgICAvIChyZWFsIHBhZCBsaW5rKQorCQkgfCAvICAgICAgICAgICgtIFkgLS0tLS0tKSAvCisgICAgICAgICAgICgtLS0tLXwvICAgICAgICAgICB8ICAgICAgICAgIHwvCisgICAgICAgICAgIHwgc3JjIHw8LS0tLS0tLS0tLS0tLSogdGFyZ2V0IHwKKyAgICAgICAgICAgKC0tLS0tfCAgICAgICAgICAgICgtLS0tLS0tLS0tKQorICAgICAgICAgIC0tLS0tLS0pCisKKworQWN0aXZhdGlvbgorfn5+fn5+fn5+fgorCitTb21ldGltZXMgZ2hvc3QgcGFkcyBzaG91bGQgcHJveHkgYWN0aXZhdGlvbiBmdW5jdGlvbnMuIFRoaXMgdGhpbmdpZQorYXR0ZW1wdHMgdG8gZXhwbGFpbiBob3cgaXQgc2hvdWxkIHdvcmsgaW4gdGhlIGRpZmZlcmVudCBjYXNlcy4KKworICArLS0tKyAgICAgKy0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLSsgICAgICAgKy0tLS0rCisgIHwgQSArLS0tLS0rIEIgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQyAgfC0tLS0tLS0rIEQgIHwKKyAgKy0tLSsgICAgICstLS09KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0tLS0rICAgICAgICstLS0tKworICAgICAgICAgICAgICArLS09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09LSsKKyAgICAgICAgICAgICAgfCAgKz0tLS0rICAgKy0tLS0rICArLS0tLSsgICstLS09KyB8CisgICAgICAgICAgICAgIHwgIHwgYSAgKy0tLSsgYiAgPT09PSAgYyArLS0rIGQgIHwgfAorICAgICAgICAgICAgICB8ICArLS0tLSsgICArLS0tLSsgICstLS0tKyAgKy0tLS0rIHwKKyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICBzdGF0ZSBjaGFuZ2UgZ29lcyBmcm9tIHJpZ2h0IHRvIGxlZnQKKyAgICAgPC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgbGFiZWxlZCBib3hlcyBhcmUgcGFkcy4gVGhlIGRhc2hlcyAoLS0tKSBzaG93IHBhZCBsaW5rcywgYW5kCit0aGUgZG91YmxlLWxpbmVzICg9PT0pIGFyZSBpbnRlcm5hbCBjb25uZWN0aW9ucy4gVGhlIGJveCBhcm91bmQgYSwgYiwgYywKK2FuZCBkIGlzIGEgYmluLiBCIGFuZCBDIGFyZSBnaG9zdCBwYWRzLCBhbmQgYSBhbmQgZCBhcmUgcHJveHkgcGFkcy4gVGhlCithcnJvdyByZXByZXNlbnRzIHRoZSBkaXJlY3Rpb24gb2YgYSBzdGF0ZSBjaGFuZ2UgYWxnb3JpdGhtLiBOb3QgY291bnRpbmcKK3RoZSBiaW4sIHRoZXJlIGFyZSB0aHJlZSBlbGVtZW50cyBpbnZvbHZlZCBoZXJlIC0tIHRoZSBwYXJlbnQgb2YgRCwgdGhlCitwYXJlbnQgb2YgQSwgYW5kIHRoZSBwYXJlbnQgb2YgYiBhbmQgYy4KKworTm93LCBpbiB0aGUgc3RhdGUgY2hhbmdlIGZyb20gUkVBRFkgdG8gUEFVU0VELCBhc3N1bWluZyB0aGUgcGlwZWxpbmUKK2RvZXMgbm90IGhhdmUgYSBsaXZlIHNvdXJjZSwgYWxsIG9mIHRoZSBwYWRzIHdpbGwgZW5kIHVwIGFjdGl2YXRlZCBhdAordGhlIGVuZC4gVGhlcmUgYXJlIDQgcG9zc2libGUgYWN0aXZhdGlvbiBtb2RlczoKKworICAxKSBBRCBhbmQgYWIgaW4gUFVTSCwgY2QgYW5kIENEIGluIFBVU0gKKyAgMikgQUQgYW5kIGFiIGluIFBVU0gsIGNkIGFuZCBDRCBpbiBQVUxMCisgIDMpIEFEIGFuZCBhYiBpbiBQVUxMLCBjZCBhbmQgQ0QgaW4gUFVTSAorICA0KSBBRCBhbmQgYWIgaW4gUFVMTCwgY2QgYW5kIENEIGluIFBVTEwKKworV2hlbiBhY3RpdmF0aW5nICgxKSwgdGhlIHN0YXRlIGNoYW5nZSBhbGdvcml0aG0gd2lsbCBmaXJzdCB2aXNpdCB0aGUKK3BhcmVudCBvZiBEIGFuZCBhY3RpdmF0ZSBEIGluIHB1c2ggbW9kZS4gVGhlbiBpdCB2aXNpdHMgdGhlIGJpbi4gVGhlIGJpbgord2lsbCBmaXJzdCBjaGFuZ2UgdGhlIHN0YXRlIG9mIGl0cyBjaGlsZCBiZWZvcmUgYWN0aXZhdGluZyBpdHMgcGFkcy4KK1RoYXQgbWVhbnMgYyB3aWxsIGJlIGFjdGl2YXRlZCBpbiBwdXNoIG1vZGUuIFsqXSBBdCB0aGlzIHBvaW50LCBkIGFuZCBDCitzaG91bGQgYWxzbyBiZSBhY3RpdmUgaW4gcHVzaCBtb2RlLCBiZWNhdXNlIGl0IGNvdWxkIGJlIHRoYXQgYWN0aXZhdGluZworYyBpbiBwdXNoIG1vZGUgc3RhcnRzIGEgdGhyZWFkLCB3aGljaCBzdGFydHMgcHVzaGluZyB0byBwYWRzIHdoaWNoCithcmVuJ3QgcmVhZHkgeWV0LiBUaGVuIGIgaXMgYWN0aXZhdGVkIGluIHB1c2ggbW9kZS4gVGhlbiwgdGhlIGJpbgorYWN0aXZhdGVzIEMgaW4gcHVzaCBtb2RlLCB3aGljaCBzaG91bGQgYWxyZWFkeSBiZSBpbiBwdXNoIG1vZGUsIHNvCitub3RoaW5nIGlzIGRvbmUuIEl0IHRoZW4gYWN0aXZhdGVzIEIgaW4gcHVzaCBtb2RlLCB3aGljaCBhY3RpdmF0ZXMgYiBpbgorcHVzaCBtb2RlLCBidXQgaXQncyBhbHJlYWR5IHRoZXJlLCB0aGVuIGFjdGl2YXRlcyBhIGluIHB1c2ggbW9kZSBhcword2VsbC4gVGhlIG9yZGVyIG9mIGFjdGl2YXRpbmcgYSBhbmQgYiBkb2VzIG5vdCBtYXR0ZXIgaW4gdGhpcyBjYXNlLgorVGhlbiwgZmluYWxseSwgdGhlIHN0YXRlIGNoYW5nZSBhbGdvcml0aG0gbW92ZXMgdG8gdGhlIHBhcmVudCBvZiBBLAorYWN0aXZhdGVzIEEgaW4gcHVzaCBtb2RlLCBhbmQgZGF0YWZsb3cgYmVnaW5zLgorCitbKl0gTm90IHlldCBpbXBsZW1lbnRlZC4KKworQWN0aXZhdGlvbiBtb2RlICgyKSBpcyBpbXBsYXVzaWJsZSwgc28gd2UgY2FuIGlnbm9yZSBpdCBmb3Igbm93LiBUaGF0CitsZWF2ZXMgdXMgd2l0aCB0aGUgcmVzdC4KKworKDMpIGlzIHRoZSBzYW1lIGFzICgxKSB1bnRpbCB5b3UgZ2V0IHRvIGFjdGl2YXRpbmcgYi4gQWN0aXZhdGluZyBiIHdpbGwKK3Byb3h5IGRpcmVjdGx5IHRvIGFjdGl2YXRpbmcgYSwgd2hpY2ggd2lsbCBhY3RpdmF0ZSBCIGFuZCBBIGFzIHdlbGwuCitUaGVuIHdoZW4gdGhlIHN0YXRlIGNoYW5nZSBhbGdvcml0aG0gZ2V0cyB0byBCIGFuZCBBIGl0IHNlZXMgdGhhdCB0aGV5CithcmUgYWxyZWFkeSBhY3RpdmUsIHNvIGl0IGlnbm9yZXMgdGhlbS4KKworU2ltaWxhcmx5IGluICg0KSwgYWN0aXZhdGluZyBEIHdpbGwgY2F1c2UgdGhlIGFjdGl2YXRpb24gb2YgYWxsIG9mIHRoZQorcmVzdCBvZiB0aGUgcGFkcywgaW4gdGhpcyBvcmRlcjogQyBkIGMgYiBhIEIgQS4gVGhlbiB3aGVuIHRoZSBzdGF0ZQorY2hhbmdlIGdldHMgdG8gdGhlIG90aGVyIGVsZW1lbnRzIHRoZXkgYXJlIGFscmVhZHkgYWN0aXZlLCBhbmQgaW4gZmFjdAorZGF0YSBmbG93IGlzIGFscmVhZHkgb2NjdXJyaW5nLgorCitTbywgZnJvbSB0aGVzZSBzY2VuYXJpb3MsIHdlIGNhbiBkaXN0aWxsIGhvdyBnaG9zdCBwYWQgYWN0aXZhdGlvbgorZnVuY3Rpb25zIHNob3VsZCB3b3JrOgorCitHaG9zdCBzb3VyY2UgcGFkcyAoZS5nLiBDKToKKyAgcHVzaDoKKyAgICBjYWxsZWQgYnk6IGVsZW1lbnQgc3RhdGUgY2hhbmdlIGhhbmRsZXIKKyAgICBiZWhhdmlvcjoganVzdCByZXR1cm4gVFJVRQorICBwdWxsOgorICAgIGNhbGxlZCBieTogcGVlcidzIGFjdGl2YXRlcHVsbAorICAgIGJlaGF2aW9yOiBjaGFuZ2UgdGhlIGludGVybmFsIHBhZCwgd2hpY2ggcHJveGllcyB0byBpdHMgcGVlciBlLmcuIEMKKyAgICAgICAgY2hhbmdlcyBkIHdoaWNoIGNoYW5nZXMgYy4KKworSW50ZXJuYWwgc2luayBwYWRzIChlLmcuIGQpOgorICBwdXNoOiAKKyAgICBjYWxsZWQgYnk6IG5vYm9keSAoZG9lc24ndCBzZWVtIHBvc3NpYmxlKQorICAgIGJlaGF2aW9yOiBuL2EKKyAgcHVsbDoKKyAgICBjYWxsZWQgYnk6IGdob3N0IHBhZAorICAgIGJlaGF2aW9yOiBwcm94eSB0byBwZWVyIGZpcnN0CisKK0ludGVybmFsIHNyYyBwYWRzIChlLmcuIGEpOgorICBwdXNoOgorICAgIGNhbGxlZCBieTogZ2hvc3QgcGFkCisgICAgYmVoYXZpb3I6IGFjdGl2YXRlIHBlZXIgaW4gcHVzaCBtb2RlCisgIHB1bGw6CisgICAgY2FsbGVkIGJ5OiBwZWVyJ3MgYWN0aXZhdGVwdWxsCisgICAgYmVoYXZpb3I6IHByb3h5IHRvIGdob3N0IHBhZCwgd2hpY2ggcHJveGllcyB0byBpdHMgcGVlciAoZS5nLiBhCisgICAgICAgIGNhbGxzIEIgd2hpY2ggY2FsbHMgQSkKKworR2hvc3Qgc2luayBwYWRzIChlLmcuIEIpOgorICBwdXNoOgorICAgIGNhbGxlZCBieTogZWxlbWVudCBzdGF0ZSBjaGFuZ2UgaGFuZGxlcgorICAgIGJlaGF2aW9yOiBjaGFuZ2UgdGhlIGludGVybmFsIHBhZCwgd2hpY2ggcHJveGllcyB0byBwZWVyIChlLmcuIEIKKyAgICAgICAgY2hhbmdlcyBhIHdoaWNoIGNoYW5nZXMgYikKKyAgcHVsbDoKKyAgICBjYWxsZWQgYnk6IGludGVybmFsIHBhZAorICAgIGJlaGF2aW9yOiBwcm94eSB0byBwZWVyCisKKworSXQgZG9lc24ndCByZWFsbHkgbWFrZSBzZW5zZSB0byBoYXZlIGFjdGl2YXRpb24gZnVuY3Rpb25zIG9uIHByb3h5IHBhZHMKK3RoYXQgYXJlbid0IHBhcnQgb2YgYSBnaG9zdCBwYWQgYXJyYW5nZW1lbnQuCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LWdzdG9iamVjdC50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LWdzdG9iamVjdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDczZGM3ZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZGVzaWduL3BhcnQtZ3N0b2JqZWN0LnR4dApAQCAtMCwwICsxLDkxIEBACitHc3RPYmplY3QKKy0tLS0tLS0tLQorCitUaGUgYmFzZSBjbGFzcyBmb3IgdGhlIGVudGlyZSBHU3RyZWFtZXIgaGllcmFyY2h5IGlzIHRoZSBHc3RPYmplY3QuCisKK1BhcmVudGFnZQorfn5+fn5+fn5+CisKK0EgcG9pbnRlciBpcyBhdmFpbGFibGUgdG8gc3RvcmUgdGhlIGN1cnJlbnQgcGFyZW50IG9mIHRoZSBvYmplY3QuICBUaGlzIGlzIG9uZQorb2YgdGhlIHR3byBmdW5kYW1lbnRhbCByZXF1aXJlbWVudHMgZm9yIGEgaGllcmFyY2hpY2FsIHN5c3RlbSBzdWNoIGFzIEdTdHJlYW1lcgorKGZvciB0aGUgb3RoZXIsIHJlYWQgdXAgb24gR3N0QmluKS4gIFRocmVlIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQ6Citfc2V0X3BhcmVudCgpLCBfZ2V0X3BhcmVudCgpLCBhbmQgX3VucGFyZW50KCkuICBUaGUgdGhpcmQgaXMgcmVxdWlyZWQgYmVjYXVzZQordGhlcmUgaXMgYW4gZXhwbGljaXQgY2hlY2sgaW4gX3NldF9wYXJlbnQoKTogYW4gb2JqZWN0IG11c3Qgbm90IGFscmVhZHkgaGF2ZSBhCitwYXJlbnQgaWYgeW91IHdpc2ggdG8gc2V0IG9uZS4gIFlvdSBtdXN0IHVucGFyZW50IHRoZSBvYmplY3QgZmlyc3QuICBUaGlzCithbGxvd3MgZm9yIG5ldyBhZGRpdGlvbnMgbGF0ZXIuCisKKy0gR3N0T2JqZWN0J3MgdGhhdCBjYW4gYmUgcGFyZW50ZWQ6CisgIEdzdEVsZW1lbnQgKGluc2lkZSBhIGJpbikKKyAgR3N0UGFkIChpbnNpZGUgYW4gZWxlbWVudCkKKworCitOYW1pbmcKK35+fn5+fgorCistIG5hbWVzIG9mIG9iamVjdHMgY2Fubm90IGJlIGNoYW5nZWQgd2hlbiB0aGV5IGFyZSBwYXJlbnRlZCAKKy0gbmFtZXMgb2Ygb2JqZWN0cyBzaG91bGQgYmUgdW5pcXVlIGFjcm9zcyBwYXJlbnQKKy0gc2V0X25hbWUoKSBjYW4gZmFpbCBiZWNhdXNlIG9mIHRoaXMKKy0gYXMgY2FuIGdzdF9lbGVtZW50X2FkZF9wYWQoKS9nc3RfYmluX2FkZF9lbGVtZW50KCkKKy0gZ3N0X29iamVjdF9zZXRfbmFtZSgpIG9ubHkgY2hhbmdlcyB0aGUgb2JqZWN0J3MgbmFtZQorCistIG9iamVjdHMgYWxzbyBoYXZlIGEgbmFtZV9wcmVmaXggdGhhdCBpcyB1c2VkIHRvIHByZWZpeCB0aGUgb2JqZWN0IG5hbWUKKyAgZHVyaW5nIGRlYnVnZ2luZyBhbmQgaWRlbnRpZmljYXRpb24KKy0gdGhlcmUgYXJlIG9iamVjdC1zcGVjaWZpYyBzZXRfbmFtZSdzKCkgd2hpY2ggYWxzbyBzZXQgdGhlIG5hbWVfcHJlZml4CisgIG9uIHRoZSBvYmplY3QuICBUaGlzIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIHRvIGdpdmUgdGhlIG9iamVjdAorICBhIG1vcmUgaWRlbnRpZmlhYmxlIG5hbWUuICBUeXBpY2FsbHkgYSBwYXJlbnQgd2lsbCBjYWxsIF9zZXRfbmFtZV9wcmVmaXgKKyAgb24gY2hpbGRyZW4sIHRha2luZyBhIGxvY2sgb24gdGhlbSB0byBkbyBzby4KKworCitMb2NraW5nCit+fn5+fn5+CisKK1RoZSBHc3RPYmplY3QgY29udGFpbnMgdGhlIG5lY2Vzc2FyeSBwcmltaXRpdmVzIHRvIGxvY2sgdGhlIG9iamVjdCBpbiBhCit0aHJlYWQtc2FmZSBtYW5uZXIuICBUaGlzIHdpbGwgYmUgdXNlZCB0byBwcm92aWRlIGdlbmVyYWwgdGhyZWFkLXNhZmV0eSBhcworbmVlZGVkLiAgSG93ZXZlciwgdGhpcyBsb2NrIGlzIGdlbmVyaWMsIGkuZS4gaXQgY292ZXJzIHRoZSB3aG9sZSBvYmplY3QuCisKK1RoZSBvYmplY3QgTE9DSyBpcyBhIHZlcnkgbG93bGV2ZWwgbG9jayB0aGF0IHNob3VsZCBvbmx5IGJlIGhlbGQgdG8gYWNjZXNzCit0aGUgb2JqZWN0IHByb3BlcnRpZXMgZm9yIHNob3J0IHBlcmlvZHMgb2YgY29kZS4KKworQWxsIG1lbWJlcnMgb2YgdGhlIEdzdE9iamVjdCBzdHJ1Y3R1cmUgbWFya2VkIGFzCisvKjwgcHVibGljID4qLyAvKiB3aXRoIExPQ0sgKi8KK2FyZSBwcm90ZWN0ZWQgYnkgdGhpcyBsb2NrLiAgVGhlc2UgbWVtYmVycyBjYW4gb25seSBiZSBhY2Nlc3NlZCBmb3IgcmVhZGluZworb3Igd3JpdGluZyB3aGlsZSB0aGUgbG9jayBpcyBoZWxkLiBBbGwgbWVtYmVycyBzaG91bGQgYmUgY29waWVkIG9yIHJlZmZlZAoraWYgdGhleSBhcmUgdXNlZCBhZnRlciByZWxlYXNpbmcgdGhlIExPQ0suCisKK05vdGUgdGhhdCB0aGlzIGRvZXMgKm5vdCogbWVhbiB0aGF0IG5vIG90aGVyIHRocmVhZCBjYW4gbW9kaWZ5IHRoZSBvYmplY3QgYXQKK3RoZSBzYW1lIHRpbWUgdGhhdCB0aGUgbG9jayBpcyBoZWxkLiAgSXQgb25seSBtZWFucyB0aGF0IGFueSB0d28gc2VjdGlvbnMgb2YKK2NvZGUgdGhhdCBvYmV5IHRoZSBsb2NrIGFyZSBndWFyYW50ZWVkIHRvIG5vdCBiZSBydW5uaW5nIHNpbXVsdGFuZW91c2x5LiAgIlRoZQorbG9jayBpcyB2b2x1bnRhcnkgYW5kIGNvb3BlcmF0aXZlIi4KKworVGhpcyBsb2NrIHdpbGwgaWRlYWxseSBiZSB1c2VkIGZvciBwYXJlbnRhZ2UsIGZsYWdzIGFuZCBuYW1pbmcsIHdoaWNoIGlzCityZWFzb25hYmxlLCBzaW5jZSB0aGV5IGFyZSB0aGUgb25seSBwb3NzaWJsZSB0aGluZ3MgdG8gcHJvdGVjdCBpbiB0aGUKK0dzdE9iamVjdC4KKworCitMb2NraW5nIG9yZGVyCit+fn5+fn5+fn5+fn5+CisKK0luIHBhcmVudC1jaGlsZCBzaXR1YXRpb25zIHRoZSBsb2NrIG9mIHRoZSBwYXJlbnQgbXVzdCBhbHdheXMgYmUgdGFrZW4gZmlyc3QKK2JlZm9yZSB0YWtpbmcgdGhlIGxvY2sgb2YgdGhlIGNoaWxkLiBJdCBpcyBOT1QgYWxsb3dlZCB0byBob2xkIHRoZSBjaGlsZAorbG9jayBiZWZvcmUgdGFraW5nIHRoZSBwYXJlbnQgbG9jay4KKworVGhpcyBwb2xpY3kgYWxsb3dzIGZvciBwYXJlbnRzIHRvIGl0ZXJhdGUgdGhlaXIgY2hpbGRyZW4gYW5kIHNldHRpbmcgcHJvcGVydGllcworb24gdGhlbS4KKworV2hlbmV2ZXIgYSBuZXN0ZWQgbG9jayBuZWVkcyB0byBiZSB0YWtlbiBvbiBvYmplY3RzIG5vdCBpbnZvbHZlZCBpbiBhIAorcGFyZW50LWNoaWxkIHJlbGF0aW9uIChlZy4gcGFkcyksIGFuIGV4cGxpY3RpYyBsb2NraW5nIG9yZGVyIGhhcyB0byBiZSBkZWZpbmVkLgorCisKK1BhdGggR2VuZXJhdGlvbgorfn5+fn5+fn5+fn5+fn5+CisKK0R1ZSB0byB0aGUgYmFzZSBuYXR1cmUgb2YgdGhlIEdzdE9iamVjdCwgaXQgYmVjb21lcyB0aGUgb25seSByZWFzb25hYmxlIHBsYWNlCit0byBwdXQgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIChfZ2V0X3BhdGhfc3RyaW5nKS4gIEl0IHdpbGwgZ2VuZXJhdGUgYSBzdHJpbmcKK2Rlc2NyaWJpbmcgdGhlIHBhcmVudCBoaWVyYXJjaHkgb2YgYSBnaXZlbiBHc3RPYmplY3QuICAKKworCitGbGFncworfn5+fn4KKworRWFjaCBvYmplY3QgaW4gdGhlIEdTdHJlYW1lciBvYmplY3QgaGllcmFyY2h5IGNhbiBoYXZlIGZsYWdzIGFzc29jaWF0ZWQgd2l0aCBpdCwKK3doaWNoIGFyZSB1c2VkIHRvIGRlc2NyaWJlIGEgc3RhdGUgb3IgYSBmZWF0dXJlIG9mIHRoZSBvYmplY3QuCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LWdzdHBpcGVsaW5lLnR4dCBiL2RvY3MvZGVzaWduL3BhcnQtZ3N0cGlwZWxpbmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NGE0NmIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2Rlc2lnbi9wYXJ0LWdzdHBpcGVsaW5lLnR4dApAQCAtMCwwICsxLDg4IEBACitHc3RQaXBlbGluZQorLS0tLS0tLS0tLS0KKworQSBHc3RQaXBlbGluZSBpcyB1c3VhbGx5IGEgdG9wbGV2ZWwgYmluIGFuZCBwcm92aWRlcyBhbGwgb2YgaXRzIAorY2hpbGRyZW4gd2l0aCBhIGNsb2NrLgorCitBIEdzdFBpcGVsaW5lIGFsc28gcHJvdmlkZXMgYSB0b3BsZXZlbCBHc3RCdXMgKHNlZSBwYXJ0LWdzdGJ1cy50eHQpCisKK1RoZSBwaXBlbGluZSBhbHNvIGNhbGN1bGF0ZXMgdGhlIHJ1bm5pbmdfdGltZSBiYXNlZCBvbiB0aGUgc2VsZWN0ZWQKK2Nsb2NrIChzZWUgYWxzbyBjbG9ja3MudHh0IGFuZCBwYXJ0LXN5bmNocm9uaXNhdGlvbi50eHQpLgorCitUaGUgcGlwZWxpbmUgd2lsbCBjYWxjdWxhdGUgYSBnbG9iYWwgbGF0ZW5jeSBmb3IgdGhlIGVsZW1lbnRzIGluIHRoZSBwaXBlbGluZS4KKyhTZWUgYWxzbyBwYXJ0LWxhdGVuY3kudHh0KS4KKworU3RhdGUgY2hhbmdlcworfn5+fn5+fn5+fn5+fgorCitJbiBhZGRpdGlvbiB0byB0aGUgbm9ybWFsIHN0YXRlIGNoYW5nZSBwcm9jZWR1cmUgb2YgaXRzIHBhcmVudCBjbGFzcworR3N0QmluLCB0aGUgcGlwZWxpbmUgcGVyZm9ybXMgdGhlIGZvbGxvd2luZyBhY3Rpb25zIGR1cmluZyBhIHN0YXRlIGNoYW5nZToKKworIC0gTlVMTCAtPiBSRUFEWToKKyAgICAtIHNldCB0aGUgYnVzIHRvIG5vbi1mbHVzaGluZworCisgLSBSRUFEWSAtPiBQQVVTRUQ6CisgICAgLSByZXNldCB0aGUgcnVubmluZ190aW1lIHRvIDAKKworIC0gUEFVU0VEIC0+IFBMQVlJTkc6CisgICAgLSBTZWxlY3QgYW5kIGEgY2xvY2suCisgICAgLSBjYWxjdWxhdGUgYmFzZV90aW1lIHVzaW5nIHRoZSBydW5uaW5nX3RpbWUuCisgICAgLSBjYWxjdWxhdGUgYW5kIGRpc3RyaWJ1dGUgbGF0ZW5jeS4KKyAgICAtIHNldCBjbG9jayBhbmQgYmFzZV90aW1lIG9uIGFsbCBlbGVtZW50cyBiZWZvcmUgcGVyZm9ybWluZyB0aGUKKyAgICAgIHN0YXRlIGNoYW5nZS4KKworIC0gUEFVU0VEIC0+IFBMQVlJTkc6CisgICAgLSBjYWxjdWxhdGUgdGhlIHJ1bm5pbmdfdGltZSB3aGVuIHRoZSBwaXBlbGluZSB3YXMgUEFVU0VELgorCisgLSBSRUFEWSAtPiBOVUxMOgorICAgIC0gc2V0IHRoZSBidXMgdG8gZmx1c2hpbmcgKHdoZW4gYXV0by1mbHVzaGluZyBpcyBlbmFibGVkKQorCitUaGUgcnVubmluZ190aW1lIHJlcHJlc2VudHMgdGhlIHRvdGFsIGVsYXBzZWQgdGltZSwgbWVhc3VyZWQgaW4gY2xvY2sgdW5pdHMsCit0aGF0IHRoZSBwaXBlbGluZSBzcGVudCBpbiB0aGUgUExBWUlORyBzdGF0ZSAoc2VlIHBhcnQtc3luY2hyb25pc2F0aW9uLnR4dCkuCitUaGUgcnVubmluZ190aW1lIGlzIHNldCB0byAwIGFmdGVyIGEgZmx1c2hpbmcgc2Vlay4KKworCitDbG9jayBzZWxlY3Rpb24KK35+fn5+fn5+fn5+fn5+fgorCitTaW5jZSBhbGwgb2YgdGhlIGNoaWxkcmVuIG9mIGEgR3N0UGlwZWxpbmUgbXVzdCB1c2UgdGhlIHNhbWUgY2xvY2ssIHRoZQorcGlwZWxpbmUgbXVzdCBzZWxlY3QgYSBjbG9jay4gVGhpcyBjbG9jayBzZWxlY3Rpb24gaGFwcGVucyB3aGVuIHRoZSBwaXBlbGluZQorZ29lcyB0byB0aGUgUExBWUlORyBzdGF0ZS4KKworVGhlIGRlZmF1bHQgY2xvY2sgc2VsZWN0aW9uIGFsZ29yaXRobSB3b3JrcyBhcyBmb2xsb3dzOgorCisgLSBJZiB0aGUgYXBwbGljYXRpb24gc2VsZWN0ZWQgYSBjbG9jaywgdXNlIHRoYXQgY2xvY2suIChzZWUgYmVsb3cpCisKKyAtIFVzZSB0aGUgY2xvY2sgb2YgbW9zdCB1cHN0cmVhbSBlbGVtZW50IHRoYXQgY2FuIHByb3ZpZGUgYSBjbG9jay4gVGhpcyAKKyAgIHNlbGVjdGlvbiBpcyBwZXJmb3JtZWQgYnkgaXRlcmF0aW5nIHRoZSBlbGVtZW50IHN0YXJ0aW5nIGZyb20gdGhlIAorICAgc2lua3MgZ29pbmcgdXBzdHJlYW0uIAorCisgICAgKiBzaW5jZSB0aGlzIHNlbGVjdGlvbiBwcm9jZWR1cmUgaGFwcGVucyBpbiB0aGUgUEFVU0VELT5QTEFZSU5HCisgICAgICBzdGF0ZSBjaGFuZ2UsIGFsbCB0aGUgc2lua3MgYXJlIHByZXJvbGxlZCBhbmQgd2UgY2FuIHRodXMgYmUgc3VyZQorICAgICAgdGhhdCBlYWNoIHNpbmsgaXMgbGlua2VkIHRvIHNvbWUgdXBzdHJlYW0gZWxlbWVudC4KKyAgICAqIGluIHRoZSBjYXNlIG9mIGEgbGl2ZSBwaXBlbGluZSAoTk9fUFJFUk9MTCksIHRoZSBzaW5rIHdpbGwgbm90IHlldAorICAgICAgYmUgcHJlcm9sbGVkIGFuZCB0aGUgc2VsZWN0aW9uIHByb2Nlc3Mgd2lsbCBzZWxlY3QgdGhlIGNsb2NrIG9mCisgICAgICBhIG1vcmUgdXBzdHJlYW0gZWxlbWVudC4KKyAgICAgIAorIC0gdXNlIEdzdFN5c3RlbUNsb2NrLCB0aGlzIG9ubHkgaGFwcGVucyB3aGVuIG5vIGVsZW1lbnQgcHJvdmlkZXMgYQorICAgdXNhYmxlIGNsb2NrLgorCitUaGUgYXBwbGljYXRpb24gY2FuIGluZmx1ZW5jZSB0aGlzIGNsb2NrIHNlbGVjdGlvbiB3aXRoIHR3byBtZXRob2RzOgorZ3N0X3BpcGVsaW5lX3VzZV9jbG9jaygpIGFuZCBnc3RfcGlwZWxpbmVfYXV0b19jbG9jaygpLiAKKworVGhlIF91c2VfY2xvY2soKSBtZXRob2QgZm9yY2VzIHRoZSB1c2Ugb2YgYSBzcGVjaWZpYyBjbG9jayBvbiB0aGUgcGlwZWxpbmUgCityZWdhcmRsZXNzIG9mIHdoYXQgY2xvY2sgcHJvdmlkZXJzIGFyZSBjaGlsZHJlbiBvZiB0aGUgcGlwZWxpbmUuIFNldHRpbmcgCitOVUxMIGRpc2FibGVzIHRoZSBjbG9jayBjb21wbGV0ZWx5IGFuZCBtYWtlcyB0aGUgcGlwZWxpbmUgcnVuIGFzIGZhc3QgYXMgCitwb3NzaWJsZS4KKworVGhlIF9hdXRvX2Nsb2NrKCkgbWV0aG9kIHJlbW92ZXMgdGhlIGZpeGVkIGNsb2NrIGFuZCByZWFjdGl2YXRlcyB0aGUgYXV0by0KK21hdGljIGNsb2NrIHNlbGVjdGlvbiBhbGdvcml0aG0gZGVzY3JpYmVkIGFib3ZlLgorCisKK0dzdEJ1cworfn5+fn5+CisKK0EgR3N0UGlwZWxpbmUgcHJvdmlkZXMgYSBHc3RCdXMgdG8gdGhlIGFwcGxpY2F0aW9uLiBUaGUgYnVzIGNhbiBiZSByZXRyaWV2ZWQKK3dpdGggZ3N0X3BpcGVsaW5lX2dldF9idXMoKSBhbmQgY2FuIHRoZW4gYmUgdXNlZCB0byByZXRyaWV2ZSBtZXNzYWdlcyBwb3N0ZWQgYnkKK3RoZSBlbGVtZW50cyBpbiB0aGUgcGlwZWxpbmUgKHNlZSBwYXJ0LWdzdGJ1cy50eHQpLgorCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LWxhdGVuY3kudHh0IGIvZG9jcy9kZXNpZ24vcGFydC1sYXRlbmN5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjU4YjEwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9kZXNpZ24vcGFydC1sYXRlbmN5LnR4dApAQCAtMCwwICsxLDMyMCBAQAorTGF0ZW5jeQorLS0tLS0tLQorCitUaGUgbGF0ZW5jeSBpcyB0aGUgdGltZSBpdCB0YWtlcyBmb3IgYSBzYW1wbGUgY2FwdHVyZWQgYXQgdGltZXN0YW1wIDAgdG8gcmVhY2ggdGhlCitzaW5rLiBUaGlzIHRpbWUgaXMgbWVhc3VyZWQgYWdhaW5zdCB0aGUgY2xvY2sgaW4gdGhlIHBpcGVsaW5lLiBGb3IgcGlwZWxpbmVzCit3aGVyZSB0aGUgb25seSBlbGVtZW50cyB0aGF0IHN5bmNocm9uaXplIGFnYWluc3QgdGhlIGNsb2NrIGFyZSB0aGUgc2lua3MsIHRoZQorbGF0ZW5jeSBpcyBhbHdheXMgMCBzaW5jZSBubyBvdGhlciBlbGVtZW50IGlzIGRlbGF5aW5nIHRoZSBidWZmZXIuCisKK0ZvciBwaXBlbGluZXMgd2l0aCBsaXZlIHNvdXJjZXMsIGEgbGF0ZW5jeSBpcyBpbnRyb2R1Y2VkLCBtb3N0bHkgYmVjYXVzZSBvZiB0aGUKK3dheSBhIGxpdmUgc291cmNlIHdvcmtzLiBDb25zaWRlciBhbiBhdWRpbyBzb3VyY2UsIGl0IHdpbGwgc3RhcnQgY2FwdHVyaW5nIHRoZQorZmlyc3Qgc2FtcGxlIGF0IHRpbWUgMC4gSWYgdGhlIHNvdXJjZSBwdXNoZXMgYnVmZmVycyB3aXRoIDQ0MTAwIHNhbXBsZXMgYXQgYQordGltZSBhdCA0NDEwMEh6IGl0IHdpbGwgaGF2ZSBjb2xsZWN0ZWQgdGhlIGJ1ZmZlciBhdCBzZWNvbmQgMS4KK1NpbmNlIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGJ1ZmZlciBpcyAwIGFuZCB0aGUgdGltZSBvZiB0aGUgY2xvY2sgaXMgbm93ID49IDEKK3NlY29uZCwgdGhlIHNpbmsgd2lsbCBkcm9wIHRoaXMgYnVmZmVyIGJlY2F1c2UgaXQgaXMgdG9vIGxhdGUuCitXaXRob3V0IGFueSBsYXRlbmN5IGNvbXBlbnNhdGlvbiBpbiB0aGUgc2luaywgYWxsIGJ1ZmZlcnMgd2lsbCBiZSBkcm9wcGVkLgorCitUaGUgc2l0dWF0aW9uIGJlY29tZXMgbW9yZSBjb21wbGV4IGluIHRoZSBwcmVzZW5jZSBvZjoKKworIC0gMiBsaXZlIHNvdXJjZXMgY29ubmVjdGVkIHRvIDIgbGl2ZSBzaW5rcyB3aXRoIGRpZmZlcmVudCBsYXRlbmNpZXMKKyAgICAqIGF1ZGlvL3ZpZGVvIGNhcHR1cmUgd2l0aCBzeW5jaHJvbml6ZWQgbGl2ZSBwcmV2aWV3LgorICAgICogYWRkZWQgbGF0ZW5jaWVzIGR1ZSB0byBlZmZlY3RzIChkZWxheXMsIHJlc2FtcGxlcnMuLi4pCisgLSAxIGxpdmUgc291cmNlIGNvbm5lY3RlZCB0byAyIGxpdmUgc2lua3MKKyAgICAqIGZpcmV3aXJlIERWCisgICAgKiBSVFAsIHdpdGggYWRkZWQgbGF0ZW5jaWVzIGJlY2F1c2Ugb2Ygaml0dGVyIGJ1ZmZlcnMuCisgLSBtaXhlZCBsaXZlIHNvdXJjZSBhbmQgbm9uLWxpdmUgc291cmNlIHNjZW5hcmlvcy4KKyAgICAqIHN5bmNocm9uaXplZCBhdWRpbyBjYXB0dXJlIHdpdGggbm9uLWxpdmUgcGxheWJhY2suIChvdmVyZHVicywuLikKKyAtIGNsb2NrIHNsYXZpbmcgaW4gdGhlIHNpbmtzIGR1ZSB0byB0aGUgbGl2ZSBzb3VyY2VzIHByb3ZpZGluZyB0aGVpciBvd24KKyAgIGNsb2Nrcy4KKworVG8gcGVyZm9ybSB0aGUgbmVlZGVkIGxhdGVuY3kgY29ycmVjdGlvbnMgaW4gdGhlIGFib3ZlIHNjZW5hcmlvcywgd2UgbXVzdAorZGV2ZWxvcCBhbiBhbGdvcml0aG0gdG8gY2FsY3VsYXRlIGEgZ2xvYmFsIGxhdGVuY3kgZm9yIHRoZSBwaXBlbGluZS4gVGhlCithbGdvcml0aG0gbXVzdCBiZSBleHRlbnNpYmxlIHNvIHRoYXQgaXQgY2FuIG9wdGltaXplIHRoZSBsYXRlbmN5IGF0IHJ1bnRpbWUuIAorSXQgbXVzdCBhbHNvIGJlIHBvc3NpYmxlIHRvIGRpc2FibGUgb3IgdHVuZSB0aGUgYWxnb3JpdGhtIGJhc2VkIG9uIHNwZWNpZmljCithcHBsaWNhdGlvbiBuZWVkcyAocmVxdWlyZWQgbWluaW1hbCBsYXRlbmN5KS4KKworCitQaXBlbGluZXMgd2l0aG91dCBsYXRlbmN5IGNvbXBlbnNhdGlvbgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworV2Ugc2hvdyBzb21lIGV4YW1wbGVzIHRvIGRlbW9uc3RyYXRlIHRoZSBwcm9ibGVtIG9mIGxhdGVuY3kgaW4gdHlwaWNhbAorY2FwdHVyZSBwaXBlbGluZXMuCisKKy0gRXhhbXBsZSAxCisKKyAgQW4gYXVkaW8gY2FwdHVyZS9wbGF5YmFjayBwaXBlbGluZS4KKworICAgYXNyYzogYXVkaW8gc291cmNlLCBwcm92aWRlcyBhIGNsb2NrCisgICBhc2luayBhdWRpbyBzaW5rLCBwcm92aWRlcyBhIGNsb2NrCisKKyAgIC4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyAgIHwgcGlwZWxpbmUgICAgICAgICAgICAgICAgIHwKKyAgIHwgLi0tLS0tLS4gICAgICAuLS0tLS0tLS4gIHwKKyAgIHwgfCBhc3JjIHwgICAgICB8IGFzaW5rIHwgIHwKKyAgIHwgfCAgICAgc3JjIC0+IHNpbmsgICAgIHwgIHwKKyAgIHwgJy0tLS0tLScgICAgICAnLS0tLS0tLScgIHwKKyAgICctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScKKworIE5VTEwtPlJFQURZOgorICBhc2luazogTlVMTC0+UkVBRFk6IHByb2JlcyBkZXZpY2UsIHJldHVybnMgU1VDQ0VTUyAKKyAgYXNyYzogTlVMTC0+UkVBRFk6ICBwcm9iZXMgZGV2aWNlLCByZXR1cm5zIFNVQ0NFU1MKKworIFJFQURZLT5QQVVTRUQ6CisgIGFzaW5rOiBSRUFEWTotPlBBVVNFRCBvcGVuIGRldmljZSwgcmV0dXJucyBBU1lOQyAKKyAgYXNyYzogUkVBRFktPlBBVVNFRDogIG9wZW4gZGV2aWNlLCByZXR1cm5zIE5PX1BSRVJPTEwKKworICAqIFNpbmNlIHRoZSBzb3VyY2UgaXMgYSBsaXZlIHNvdXJjZSwgaXQgd2lsbCBvbmx5IHByb2R1Y2UgZGF0YSBpbiB0aGUKKyAgICBQTEFZSU5HIHN0YXRlLiBUbyBub3RlIHRoaXMgZmFjdCwgaXQgcmV0dXJucyBOT19QUkVST0xMIGZyb20gdGhlIHN0YXRlIGNoYW5nZQorICAgIGZ1bmN0aW9uLgorICAqIFRoaXMgc2luayByZXR1cm5zIEFTWU5DIGJlY2F1c2UgaXQgY2FuIG9ubHkgY29tcGxldGUgdGhlIHN0YXRlIGNoYW5nZSB0bworICAgIFBBVVNFRCB3aGVuIGl0IHJlY2VpdmVzIHRoZSBmaXJzdCBidWZmZXIuCisKKyAgQXQgdGhpcyBwb2ludCB0aGUgcGlwZWxpbmUgaXMgbm90IHByb2Nlc3NpbmcgZGF0YSBhbmQgdGhlIGNsb2NrIGlzIG5vdAorICBydW5uaW5nLiBVbmxlc3MgYSBuZXcgYWN0aW9uIGlzIHBlcmZvcm1lZCBvbiB0aGUgcGlwZWxpbmUsIHRoaXMgc2l0dWF0aW9uIHdpbGwKKyAgbmV2ZXIgY2hhbmdlLgorCisgUEFVU0VELT5QTEFZSU5HOgorICBhc3JjIGNsb2NrIHNlbGVjdGVkIGJlY2F1c2UgaXQgaXMgdGhlIG1vc3QgdXBzdHJlYW0gY2xvY2sgcHJvdmlkZXIuIGFzaW5rIGNhbgorICBvbmx5IHByb3ZpZGUgYSBjbG9jayB3aGVuIGl0IHJlY2VpdmVkIHRoZSBmaXJzdCBidWZmZXIgYW5kIGNvbmZpZ3VyZWQgdGhlCisgIGRldmljZSB3aXRoIHRoZSBzYW1wbGVyYXRlIGluIHRoZSBjYXBzLgorCisgIGFzaW5rOiBQQVVTRUQ6LT5QTEFZSU5HLCBzZXRzIHBlbmRpbmcgc3RhdGUgdG8gUExBWUlORywgcmV0dXJucyBBU1lOQyBiZWNhdXMKKyAgICAgICAgICAgICAgICAgICAgICAgICBpdCBpcyBub3QgcHJlcm9sbGVkLiBUaGUgc2luayB3aWxsIGNvbW1pdCBzdGF0ZSB0bworCQkJIFBMQVlJTkcgd2hlbiBpdCBwcmVyb2xscy4KKyAgYXNyYzogUEFVU0VELT5QTEFZSU5HOiBzdGFydHMgcHVzaGluZyBidWZmZXJzLgorCisgICogc2luY2UgdGhlIHNpbmsgaXMgc3RpbGwgcGVyZm9ybWluZyBhIHN0YXRlIGNoYW5nZSBmcm9tIFJFQURZIC0+IFBBVVNFRCwgaXQKKyAgICByZW1haW5zIEFTWU5DLiBUaGUgcGVuZGluZyBzdGF0ZSB3aWxsIGJlIHNldCB0byBQTEFZSU5HLgorICAqIFRoZSBjbG9jayBzdGFydHMgcnVubmluZyBhcyBzb29uIGFzIGFsbCB0aGUgZWxlbWVudHMgaGF2ZSBiZWVuIHNldCB0bworICAgIFBMQVlJTkcuCisgICogdGhlIHNvdXJjZSBpcyBhIGxpdmUgc291cmNlIHdpdGggYSBsYXRlbmN5LiBTaW5jZSBpdCBpcyBzeW5jaHJvbml6ZWQgd2l0aAorICAgIHRoZSBjbG9jaywgaXQgd2lsbCBwcm9kdWNlIGEgYnVmZmVyIHdpdGggdGltZXN0YW1wIDAgYW5kIGR1cmF0aW9uIEQgYWZ0ZXIKKyAgICB0aW1lIEQsIGllLiBpdCB3aWxsIG9ubHkgYmUgYWJsZSB0byBwcm9kdWNlIHRoZSBsYXN0IHNhbXBsZSBvZiB0aGUgYnVmZmVyCisgICAgKHdpdGggdGltZXN0YW1wIEQpIGF0IHRpbWUgRC4gVGhpcyBsYXRlbmN5IGRlcGVuZHMgb24gdGhlIHNpemUgb2YgdGhlCisgICAgYnVmZmVyLgorICAqIHRoZSBzaW5rIHdpbGwgcmVjZWl2ZSB0aGUgYnVmZmVyIHdpdGggdGltZXN0YW1wIDAgYXQgdGltZSA+PSBELiBBdCB0aGlzCisgICAgcG9pbnQgdGhlIGJ1ZmZlciBpcyB0b28gbGF0ZSBhbHJlYWR5IGFuZCBtaWdodCBiZSBkcm9wcGVkLiBUaGlzIHN0YXRlIG9mCisgICAgY29uc3RhbnRseSBkcm9wcGluZyBkYXRhIHdpbGwgbm90IGNoYW5nZSB1bmxlc3MgYSBjb25zdGFudCBsYXRlbmN5CisgICAgY29ycmVjdGlvbiBpcyBhZGRlZCB0byB0aGUgaW5jb21pbmcgYnVmZmVyIHRpbWVzdGFtcHMuCisKKyAgVGhlIHByb2JsZW0gaXMgZHVlIHRvIHRoZSBmYWN0IHRoYXQgdGhlIHNpbmsgaXMgc2V0IHRvIChwZW5kaW5nKSBQTEFZSU5HCisgIHdpdGhvdXQgYmVpbmcgcHJlcm9sbGVkLCB3aGljaCBvbmx5IGhhcHBlbnMgaW4gbGl2ZSBwaXBlbGluZXMuIAorCistIEV4YW1wbGUgMgorCisgIEFuIGF1ZGlvL3ZpZGVvIGNhcHR1cmUvcGxheWJhY2sgcGlwZWxpbmUuIFdlIGNhcHR1cmUgYm90aCBhdWRpbyBhbmQgdmlkZW8gYW5kCisgIGhhdmUgdGhlbSBwbGF5ZWQgYmFjayBzeW5jaHJvbml6ZWQgYWdhaW4uCisKKyAgIGFzcmM6IGF1ZGlvIHNvdXJjZSwgcHJvdmlkZXMgYSBjbG9jaworICAgYXNpbmsgYXVkaW8gc2luaywgcHJvdmlkZXMgYSBjbG9jaworICAgdnNyYzogdmlkZW8gc291cmNlCisgICB2c2luayB2aWRlbyBzaW5rCisKKyAgIC4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyAgIHwgcGlwZWxpbmUgICAgICAgICAgICAgICAgIHwKKyAgIHwgLi0tLS0tLS4gICAgICAuLS0tLS0tLS4gIHwKKyAgIHwgfCBhc3JjIHwgICAgICB8IGFzaW5rIHwgIHwKKyAgIHwgfCAgICAgc3JjIC0+IHNpbmsgICAgIHwgIHwKKyAgIHwgJy0tLS0tLScgICAgICAnLS0tLS0tLScgIHwKKyAgIHwgLi0tLS0tLS4gICAgICAuLS0tLS0tLS4gIHwKKyAgIHwgfCB2c3JjIHwgICAgICB8IHZzaW5rIHwgIHwKKyAgIHwgfCAgICAgc3JjIC0+IHNpbmsgICAgIHwgIHwKKyAgIHwgJy0tLS0tLScgICAgICAnLS0tLS0tLScgIHwKKyAgICctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScKKworICBUaGUgc3RhdGUgY2hhbmdlcyBoYXBwZW4gaW4gdGhlIHNhbWUgd2F5IGFzIGV4YW1wbGUgMS4gQm90aCBzaW5rcyBlbmQgdXAgd2l0aAorICBwZW5kaW5nIHN0YXRlIG9mIFBMQVlJTkcgYW5kIGEgcmV0dXJuIHZhbHVlIG9mIEFTWU5DIHVudGlsIHRoZXkgcmVjZWl2ZSB0aGUKKyAgZmlyc3QgYnVmZmVyLgorCisgIEZvciBhdWRpbyBhbmQgdmlkZW8gdG8gYmUgcGxheWVkIGluIHN5bmMsIGJvdGggc2lua3MgbXVzdCBjb21wZW5zYXRlIGZvciB0aGUKKyAgbGF0ZW5jeSBvZiBpdHMgc291cmNlIGJ1dCBtdXN0IGFsc28gdXNlIGV4YWN0bHkgdGhlIHNhbWUgbGF0ZW5jeSBjb3JyZWN0aW9uLiAgCisKKyAgU3VwcG9zZSBhc3JjIGhhcyBhIGxhdGVuY3kgb2YgMjBtcyBhbmQgdnNyYyBhIGxhdGVuY3kgb2YgMzNtcywgdGhlIHRvdGFsCisgIGxhdGVuY3kgaW4gdGhlIHBpcGVsaW5lIGhhcyB0byBiZSBhdCBsZWFzdCAzM21zLiBUaGlzIGFsc28gbWVhbnMgdGhhdCB0aGUKKyAgcGlwZWxpbmUgbXVzdCBoYXZlIGF0IGxlYXN0IGEgMzMgLSAyMCA9IDEzbXMgYnVmZmVyaW5nIG9uIHRoZSBhdWRpbyBzdHJlYW0gb3IKKyAgZWxzZSB0aGUgYXVkaW8gc3JjIHdpbGwgdW5kZXJydW4gd2hpbGUgdGhlIGF1ZGlvc2luayB3YWl0cyBmb3IgdGhlIHByZXZpb3VzCisgIHNhbXBsZSB0byBwbGF5LgorCistIEV4YW1wbGUgMworCisgIEFuIGV4YW1wbGUgb2YgdGhlIGNvbWJpbmF0aW9uIG9mIGEgbm9uLWxpdmUgKGZpbGUpIGFuZCBhIGxpdmUgc291cmNlICh2c3JjKSAKKyAgY29ubmVjdGVkIHRvIGxpdmUgc2lua3MgKHZzaW5rLCBzaW5rKS4gCisKKyAgIC4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyAgIHwgcGlwZWxpbmUgICAgICAgICAgICAgICAgIHwKKyAgIHwgLi0tLS0tLS4gICAgICAuLS0tLS0tLS4gIHwKKyAgIHwgfCBmaWxlIHwgICAgICB8IHNpbmsgIHwgIHwKKyAgIHwgfCAgICAgc3JjIC0+IHNpbmsgICAgIHwgIHwKKyAgIHwgJy0tLS0tLScgICAgICAnLS0tLS0tLScgIHwKKyAgIHwgLi0tLS0tLS4gICAgICAuLS0tLS0tLS4gIHwKKyAgIHwgfCB2c3JjIHwgICAgICB8IHZzaW5rIHwgIHwKKyAgIHwgfCAgICAgc3JjIC0+IHNpbmsgICAgIHwgIHwKKyAgIHwgJy0tLS0tLScgICAgICAnLS0tLS0tLScgIHwKKyAgICctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScKKworICBUaGUgc3RhdGUgY2hhbmdlcyBoYXBwZW4gaW4gdGhlIHNhbWUgd2F5IGFzIGV4YW1wbGUgMS4gRXhjZXB0IHNpbmsgd2lsbCBiZQorICBhYmxlIHRvIHByZXJvbGwgKGNvbW1pdCBpdHMgc3RhdGUgdG8gUEFVU0VEKS4KKworICBJbiB0aGlzIGNhc2Ugc2luayB3aWxsIGhhdmUgbm8gbGF0ZW5jeSBidXQgdnNpbmsgd2lsbC4gVGhlIHRvdGFsIGxhdGVuY3kKKyAgc2hvdWxkIGJlIHRoYXQgb2YgdnNpbmsuCisKKyAgTm90ZSB0aGF0IGJlY2F1c2Ugb2YgdGhlIHByZXNlbmNlIG9mIGEgbGl2ZSBzb3VyY2UgKHZzcmMpLCB0aGUgcGlwZWxpbmUgY2FuIGJlCisgIHNldCB0byBwbGF5aW5nIGJlZm9yZSBzaW5rIGlzIGFibGUgdG8gcHJlcm9sbC4gV2l0aG91dCBjb21wZW5zYXRpb24gZm9yIHRoZQorICBsaXZlIHNvdXJjZSwgdGhpcyBtaWdodCBsZWFkIHRvIHN5bmNocm9uaXNhdGlvbiBwcm9ibGVtcyBiZWNhdXNlIHRoZSBsYXRlbmN5CisgIHNob3VsZCBiZSBjb25maWd1cmVkIGluIHRoZSBlbGVtZW50IGJlZm9yZSBpdCBjYW4gZ28gdG8gUExBWUlORy4KKworCistIEV4YW1wbGUgNAorCisgIEFuIGV4YW1wbGUgb2YgdGhlIGNvbWJpbmF0aW9uIG9mIGEgbm9uLWxpdmUgYW5kIGEgbGl2ZSBzb3VyY2UuIFRoZSBub24tbGl2ZQorICBzb3VyY2UgaXMgY29ubmVjdGVkIHRvIGEgbGl2ZSBzaW5rIGFuZCB0aGUgbGl2ZSBzb3VyY2UgdG8gYSBub24tbGl2ZSBzaW5rLgorCisgICAuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisgICB8IHBpcGVsaW5lICAgICAgICAgICAgICAgICB8CisgICB8IC4tLS0tLS0uICAgICAgLi0tLS0tLS0uICB8CisgICB8IHwgZmlsZSB8ICAgICAgfCBzaW5rICB8ICB8CisgICB8IHwgICAgIHNyYyAtPiBzaW5rICAgICB8ICB8CisgICB8ICctLS0tLS0nICAgICAgJy0tLS0tLS0nICB8CisgICB8IC4tLS0tLS0uICAgICAgLi0tLS0tLS0uICB8CisgICB8IHwgdnNyYyB8ICAgICAgfCBmaWxlcyB8ICB8CisgICB8IHwgICAgIHNyYyAtPiBzaW5rICAgICB8ICB8CisgICB8ICctLS0tLS0nICAgICAgJy0tLS0tLS0nICB8CisgICAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nCisKKyAgVGhlIHN0YXRlIGNoYW5nZXMgaGFwcGVuIGluIHRoZSBzYW1lIHdheSBhcyBleGFtcGxlIDMuIFNpbmsgd2lsbCBiZQorICBhYmxlIHRvIHByZXJvbGwgKGNvbW1pdCBpdHMgc3RhdGUgdG8gUEFVU0VEKS4gZmlsZXMgd2lsbCBub3QgYmUgYWJsZSB0bworICBwcmVyb2xsLgorCisgIHNpbmsgd2lsbCBoYXZlIG5vIGxhdGVuY3kgc2luY2UgaXQgaXMgbm90IGNvbm5lY3RlZCB0byBhIGxpdmUgc291cmNlLiBmaWxlcworICBkb2VzIG5vdCBkbyBzeW5jaHJvbmlzYXRpb24gc28gaXQgZG9lcyBub3QgY2FyZSBhYm91dCBsYXRlbmN5LgorCisgIFRoZSB0b3RhbCBsYXRlbmN5IGluIHRoZSBwaXBlbGluZSBpcyAwLiBUaGUgdnNyYyBjYXB0dXJlcyBpbiBzeW5jIHdpdGggdGhlCisgIHBsYXliYWNrIGluIHNpbmsuCisKKyAgQXMgaW4gZXhhbXBsZSAzLCBzaW5rIGNhbiBvbmx5IGJlIHNldCB0byBQTEFZSU5HIGFmdGVyIGl0IHN1Y2Nlc3NmdWxseQorICBwcmVyb2xsZWQuCisKKworU3RhdGUgQ2hhbmdlcworfn5+fn5+fn5+fn5+fgorCitBIFNpbmsgaXMgbmV2ZXIgc2V0IHRvIFBMQVlJTkcgYmVmb3JlIGl0IGlzIHByZXJvbGxlZC4gSW4gb3JkZXIgdG8gZG8gdGhpcywgdGhlCitwaXBlbGluZSAoYXQgdGhlIEdzdEJpbiBsZXZlbCkga2VlcHMgdHJhY2sgb2YgYWxsCitlbGVtZW50cyB0aGF0IHJlcXVpcmUgcHJlcm9sbCAodGhlIG9uZXMgdGhhdCByZXR1cm4gQVNZTkMgZnJvbSB0aGUgc3RhdGUKK2NoYW5nZSkuIFRoZXNlIGVsZW1lbnRzIHBvc3RlZCBhIEFTWU5DX1NUQVJUIG1lc3NhZ2Ugd2l0aG91dCBhIG1hdGNoaW5nCitBU1lOQ19ET05FIG1lc3NhZ2UuCisKK1RoZSBwaXBlbGluZSB3aWxsIG5vdCBjaGFuZ2UgdGhlIHN0YXRlIG9mIHRoZSBlbGVtZW50cyB0aGF0IGFyZSBzdGlsbCBkb2luZyBhbgorQVNZTkMgc3RhdGUgY2hhbmdlLgorCitXaGVuIGFuIEFTWU5DIGVsZW1lbnQgcHJlcm9sbHMsIGl0IGNvbW1pdHMgaXRzIHN0YXRlIHRvIFBBVVNFRCBhbmQgcG9zdHMgYW4KK0FTWU5DX0RPTkUgbWVzc2FnZS4gVGhlIHBpcGVsaW5lIG5vdGljZXMgdGhpcyBBU1lOQ19ET05FIG1lc3NhZ2UgYW5kIG1hdGNoZXMgaXQKK3dpdGggdGhlIEFTWU5DX1NUQVJUIG1lc3NhZ2UgaXQgY2FjaGVkIGZvciB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50LiAKKworV2hlbiBhbGwgQVNZTkNfU1RBUlQgbWVzc2FnZXMgYXJlIG1hdGNoZWQgd2l0aCBhbiBBU1lOQ19ET05FIG1lc3NhZ2UsIHRoZQorcGlwZWxpbmUgcHJvY2VlZHMgd2l0aCBzZXR0aW5nIHRoZSBlbGVtZW50cyB0byB0aGUgZmluYWwgc3RhdGUgYWdhaW4uCisKK1RoZSBiYXNlIHRpbWUgb2YgdGhlIGVsZW1lbnQgd2FzIGFscmVhZHkgc2V0IGJ5IHRoZSBwaXBlbGluZSB3aGVuIGl0IGNoYW5nZWQgdGhlCitOT19QUkVST0xMIGVsZW1lbnQgdG8gUExBWUlORy4gVGhpcyBvcGVyYXRpb24gaGFzIHRvIGJlIHBlcmZvcm1lZCBpbiB0aGUKK3NlcGFyYXRlIGFzeW5jIHN0YXRlIGNoYW5nZSB0aHJlYWQgKGxpa2UgdGhlIG9uZSBjdXJyZW50bHkgdXNlZCBmb3IgZ29pbmcgZnJvbQorUEFVU0VELT5QTEFZSU5HIGluIGEgbm9uLWxpdmUgcGlwZWxpbmUpLgorCisKK0xhdGVuY3kgY29tcGVuc2F0aW9uCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitMYXRlbmN5IGNhbGN1bGF0aW9uIGFuZCBjb21wZW5zYXRpb24gaXMgcGVyZm9ybWVkIGJlZm9yZSB0aGUgcGlwZWxpbmUgcHJvY2VlZHMgdG8KK3RoZSBQTEFZSU5HIHN0YXRlLiAKKworV2hlbiB0aGUgcGlwZWxpbmUgY29sbGVjdGVkIGFsbCBBU1lOQ19ET05FIG1lc3NhZ2VzIGl0IGNhbiBjYWxjdWxhdGUgdGhlIGdsb2JhbAorbGF0ZW5jeSBhcyBmb2xsb3dzOgorCisgIC0gcGVyZm9ybSBhIGxhdGVuY3kgcXVlcnkgb24gYWxsIHNpbmtzLgorICAtIGxhdGVuY3kgPSBNQVggKGFsbCBtaW4gbGF0ZW5jaWVzKSAKKyAgLSBpZiBNSU4gKGFsbCBtYXggbGF0ZW5jaWVzKSA8IGxhdGVuY3kgd2UgaGF2ZSBhbiBpbXBvc3NpYmxlIHNpdHVhdGlvbiBhbmQgd2UKKyAgICBtdXN0IGdlbmVyYXRlIGFuIGVycm9yIGluZGljYXRpbmcgdGhhdCB0aGlzIHBpcGVsaW5lIGNhbm5vdCBiZSBwbGF5ZWQuIFRoaXMKKyAgICB1c3VhbGx5IG1lYW5zIHRoYXQgdGhlcmUgaXMgbm90IGVub3VnaCBidWZmZXJpbmcgaW4gc29tZSBjaGFpbiBvZiB0aGUKKyAgICBwaXBlbGluZS4gQSBxdWV1ZSBjYW4gYmUgYWRkZWQgdG8gdGhvc2UgY2hhaW5zLgorCitUaGUgc2lua3MgZ2F0aGVyIHRoaXMgaW5mb3JtYXRpb24gd2l0aCBhIExBVEVOQ1kgcXVlcnkgdXBzdHJlYW0uIEludGVybWVkaWF0ZQorZWxlbWVudHMgcGFzcyB0aGUgcXVlcnkgdXBzdHJlYW0gYW5kIGFkZCB0aGUgYW1vdW50IG9mIGxhdGVuY3kgdGhleSBhZGQgdG8gdGhlCityZXN1bHQuCisKK2V4MToKKyAgc2luazE6IFsyMCAtIDIwXQorICBzaW5rMjogWzMzIC0gNDBdCisKKyAgTUFYICgyMCwgMzMpID0gMzMKKyAgTUlOICgyMCwgNDApID0gMjAgPCAzMyAtPiBpbXBvc3NpYmxlCisKK2V4MjoKKyAgc2luazE6IFsyMCAtIDUwXQorICBzaW5rMjogWzMzIC0gNDBdCisKKyAgTUFYICgyMCwgMzMpID0gMzMKKyAgTUlOICg1MCwgNDApID0gNDAgPj0gMzMgLT4gbGF0ZW5jeSA9IDMzCisKK1RoZSBsYXRlbmN5IGlzIHNldCBvbiB0aGUgcGlwZWxpbmUgYnkgc2VuZGluZyBhIExBVEVOQ1kgZXZlbnQgdG8gdGhlIHNpbmtzCitpbiB0aGUgcGlwZWxpbmUuIFRoaXMgZXZlbnQgY29uZmlndXJlcyB0aGUgdG90YWwgbGF0ZW5jeSBvbiB0aGUgc2lua3MuIFRoZQorc2luayBmb3J3YXJkcyB0aGlzIExBVEVOQ1kgZXZlbnQgdXBzdHJlYW0gc28gdGhhdCBpbnRlcm1lZGlhdGUgZWxlbWVudHMgY2FuCitjb25maWd1cmUgdGhlbXNlbHZlcyBhcyB3ZWxsLgorCitBZnRlciB0aGlzIHN0ZXAsIHRoZSBwaXBlbGluZSBjb250aW51ZXMgc2V0dGluZyB0aGUgcGVuZGluZyBzdGF0ZSBvbiBpdHMKK2VsZW1lbnRzLgorCitBIHNpbmsgYWRkcyB0aGUgbGF0ZW5jeSB2YWx1ZSwgcmVjZWl2ZWQgaW4gdGhlIExBVEVOQ1kgZXZlbnQsIHRvCit0aGUgdGltZXMgdXNlZCBmb3Igc3luY2hyb25pemluZyBhZ2FpbnN0IHRoZSBjbG9jay4gVGhpcyB3aWxsIGVmZmVjdGl2ZWx5CitkZWxheSB0aGUgcmVuZGVyaW5nIG9mIHRoZSBidWZmZXIgd2l0aCB0aGUgcmVxdWlyZWQgbGF0ZW5jeS4gU2luY2UgdGhpcyBkZWxheSBpcwordGhlIHNhbWUgZm9yIGFsbCBzaW5rcywgYWxsIHNpbmtzIHdpbGwgcmVuZGVyIGRhdGEgcmVsYXRpdmVseSBzeW5jaHJvbmlzZWQuCisKKworRmx1c2hpbmcgYSBwbGF5aW5nIHBpcGVsaW5lCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworV2UgY2FuIGltcGxlbWVudCByZXN5bmNocm9uaXNhdGlvbiBhZnRlciBhbiB1bmNvbnRyb2xsZWQgRkxVU0ggaW4gKHBhcnQgb2YpIGEKK3BpcGVsaW5lIGluIHRoZSBzYW1lIHdheS4gSW5kZWVkLCB3aGVuIGEgZmx1c2ggaXMgcGVyZm9ybWVkIG9uCithIFBMQVlJTkcgbGl2ZSBlbGVtZW50LCBhIG5ldyBiYXNlIHRpbWUgbXVzdCBiZSBkaXN0cmlidXRlZCB0byB0aGlzIGVsZW1lbnQuCisKK0EgZmx1c2ggaW4gYSBwaXBlbGluZSBjYW4gaGFwcGVuIGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6CisKKyAtIGZsdXNoaW5nIHNlZWsgaW4gdGhlIHBpcGVsaW5lCisgICAgLSBwZXJmb3JtZWQgYnkgdGhlIGFwcGxpY2F0aW9uIG9uIHRoZSBwaXBlbGluZQorICAgIC0gcGVyZm9ybWVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBvbiBhbiBlbGVtZW50CisgLSBmbHVzaCBwcmVmb3JtZWQgYnkgYW4gZWxlbWVudAorICAgIC0gYWZ0ZXIgcmVjZWl2aW5nIGEgbmF2aWdhdGlvbiBldmVudCAoRFZELCAuLi4pCisKK1doZW4gYSBwbGF5aW5nIHNpbmsgaXMgZmx1c2hlZCBieSBhIEZMVVNIX1NUQVJUIGV2ZW50LCBhbiBBU1lOQ19TVEFSVCAgbWVzc2FnZSBpcworcG9zdGVkIGJ5IHRoZSBlbGVtZW50LiBBcyBwYXJ0IG9mIHRoZSBtZXNzYWdlLCB0aGUgZmFjdCB0aGF0IHRoZSBlbGVtZW50IGdvdAorZmx1c2hlZCBpcyBpbmNsdWRlZC4gVGhlIGVsZW1lbnQgYWxzbyBnb2VzIHRvIGEgcGVuZGluZyBQQVVTRUQgc3RhdGUgYW5kIGhhcyB0bworYmUgc2V0IHRvIHRoZSBQTEFZSU5HIHN0YXRlIGFnYWluIGxhdGVyLgorCitUaGUgQVNZTkNfU1RBUlQgbWVzc2FnZSBpcyBrZXB0IGJ5IHRoZSBwYXJlbnQgYmluLiBXaGVuIHRoZSBlbGVtZW50IHByZXJvbGxzLAoraXQgcG9zdHMgYW4gQVNZTkNfRE9ORSBtZXNzYWdlLiAKKworV2hlbiBhbGwgQVNZTkNfU1RBUlQgbWVzc2FnZXMgYXJlIG1hdGNoZWQgd2l0aCBhbiBBU1lOQ19ET05FIG1lc3NhZ2UsIHRoZSBiaW4KK3dpbGwgY2FwdHVyZSBhIG5ldyBiYXNlX3RpbWUgZnJvbSB0aGUgY2xvY2sgYW5kIHdpbGwgYnJpbmcgYWxsIHRoZSBzaW5rcyBiYWNrIHRvCitQTEFZSU5HIGFmdGVyIHNldHRpbmcgdGhlIG5ldyBiYXNlIHRpbWUgb24gdGhlbS4gSXQncyBhbHNvIHBvc3NpYmxlCit0byBwZXJmb3JtIGFkZGl0aW9uYWwgbGF0ZW5jeSBjYWxjdWxhdGlvbnMgYW5kIGFkanVzdG1lbnRzIGJlZm9yZSBkb2luZyB0aGlzLiAKKworCitEeW5hbWljYWxseSBhZGp1c3RpbmcgbGF0ZW5jeQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQW4gZWxlbWVudCB0aGF0IHdhbnQgdG8gY2hhbmdlIHRoZSBsYXRlbmN5IGluIHRoZSBwaXBlbGluZSBjYW4gZG8gdGhpcyBieQorcG9zdGluZyBhIExBVEVOQ1kgbWVzc2FnZSBvbiB0aGUgYnVzLiBUaGlzIG1lc3NhZ2UgaW5zdHJ1Y3RzIHRoZSBwaXBlbGluZSB0bzoKKworIC0gcXVlcnkgdGhlIGxhdGVuY3kgaW4gdGhlIHBpcGVsaW5lICh3aGljaCBtaWdodCBub3cgaGF2ZSBjaGFuZ2VkKSB3aXRoIGEKKyAgIExBVEVOQ1kgcXVlcnkuCisgLSByZWRpc3RyaWJ1dGUgYSBuZXcgZ2xvYmFsIGxhdGVuY3kgdG8gYWxsIGVsZW1lbnRzIHdpdGggYSBMQVRFTkNZIGV2ZW50LgorCitBIHVzZSBjYXNlIHdoZXJlIHRoZSBsYXRlbmN5IGluIGEgcGlwZWxpbmUgY2FuIGNoYW5nZSBjb3VsZCBiZSBhIG5ldHdvcmsgZWxlbWVudAordGhhdCBvYnNlcnZlcyBhbiBpbmNyZWFzZWQgaW50ZXIgcGFja2V0IGFycml2YWwgaml0dGVyIG9yIGV4Y2Vzc2l2ZSBwYWNrZXQgbG9zcworYW5kIGRlY2lkZXMgdG8gaW5jcmVhc2UgaXRzIGludGVybmFsIGJ1ZmZlcmluZyAoYW5kIHRodXMgdGhlIGxhdGVuY3kpLiBUaGUKK2VsZW1lbnQgbXVzdCBwb3N0IGEgTEFURU5DWSBtZXNzYWdlIGFuZCBwZXJmb3JtIHRoZSBhZGRpdGlvbmFsIGxhdGVuY3kKK2FkanVzdG1lbnRzIHdoZW4gaXQgcmVjZWl2ZXMgdGhlIExBVEVOQ1kgZXZlbnQgZnJvbSB0aGUgZG93bnN0cmVhbSBwZWVyIGVsZW1lbnQuCisKK0luIGEgc2ltaWxhciB3YXkgY2FuIHRoZSBsYXRlbmN5IGJlIGRlY3JlYXNlZCB3aGVuIG5ldHdvcmsgY29uZGl0aW9ucyBhcmUKK2ltcHJvdmluZyBhZ2Fpbi4KKworTGF0ZW5jeSBhZGp1c3RtZW50cyB3aWxsIGludHJvZHVjZSBnbGl0Y2hlcyBpbiBwbGF5YmFjayBpbiB0aGUgc2lua3MgYW5kIG11c3QKK29ubHkgYmUgcGVyZm9ybWVkIGluIHNwZWNpYWwgY29uZGl0aW9ucy4KZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtbGl2ZS1zb3VyY2UudHh0IGIvZG9jcy9kZXNpZ24vcGFydC1saXZlLXNvdXJjZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcwNTVhNQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZGVzaWduL3BhcnQtbGl2ZS1zb3VyY2UudHh0CkBAIC0wLDAgKzEsNjAgQEAKK0xpdmUgc291cmNlcworLS0tLS0tLS0tLS0tCisKK0EgbGl2ZSBzb3VyY2UgaXMgYSBzb3VyY2UgdGhhdCBjYW5ub3QgYmUgYXJiaXRyYXJpbHkgUEFVU0VEIHdpdGhvdXQgbG9zaW5nCitkYXRhLgorCitBIGxpdmUgc291cmNlIHN1Y2ggYXMgYW4gZWxlbWVudCBjYXB0dXJpbmcgYXVkaW8gb3IgdmlkZW8gbmVlZCB0byBiZSBoYW5kbGVkCitpbiBhIHNwZWNpYWwgd2F5LiBJdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIHN0YXJ0IHRoZSBkYXRhZmxvdyBpbiB0aGUgUEFVU0VECitzdGF0ZSBmb3IgdGhvc2UgZGV2aWNlcyBhcyB0aGUgdXNlciBtaWdodCB3YWl0IGEgbG9uZyB0aW1lIGJldHdlZW4gZ29pbmcgZnJvbQorUEFVU0VEIHRvIFBMQVlJTkcsIG1ha2luZyB0aGUgcHJldmlvdXNseSBjYXB0dXJlZCBidWZmZXJzIGlycmVsZXZhbnQuCisKK0EgbGl2ZSBzb3VyY2UgdGhlcmVmb3JlIG9ubHkgcHJvZHVjZXMgYnVmZmVycyBpbiB0aGUgUExBWUlORyBzdGF0ZS4gVGhpcyBoYXMKK2ltcGxpY2F0aW9ucyBmb3Igc2lua3Mgd2FpdGluZyBmb3IgYSBidWZmZXIgdG8gY29tcGxldGUgdGhlIHByZXJvbGwgc3RhdGUKK3NpbmNlIHN1Y2ggYSBidWZmZXIgbWlnaHQgbmV2ZXIgYXJyaXZlLgorCitMaXZlIHNvdXJjZXMgcmV0dXJuIE5PX1BSRVJPTEwgd2hlbiBnb2luZyB0byB0aGUgUEFVU0VEIHN0YXRlIHRvIGluZm9ybSB0aGUKK2Jpbi9waXBlbGluZSB0aGF0IHRoaXMgZWxlbWVudCB3aWxsIG5vdCBiZSBhYmxlIHRvIHByb2R1Y2UgZGF0YSBpbiB0aGUKK1BBVVNFRCBzdGF0ZS4gTk9fUFJFUk9MTCBzaG91bGQgYmUgcmV0dXJuZWQgZm9yIGJvdGggUkVBRFktPlBBVVNFRCBhbmQKK1BMQVlJTkctPlBBVVNFRC4KKworV2hlbiBwZXJmb3JtaW5nIGEgZ2V0X3N0YXRlKCkgb24gYSBiaW4gd2l0aCBhIG5vbi16ZXJvIHRpbWVvdXQgdmFsdWUsIHRoZQorYmluIG11c3QgYmUgc3VyZSB0aGF0IHRoZXJlIGFyZSBubyBsaXZlIHNvdXJjZXMgaW4gdGhlIHBpcGVsaW5lIGJlY2F1c2UgZWxzZQordGhlIGdldF9zdGF0ZSgpIGZ1bmN0aW9uIHdvdWxkIGJsb2NrIG9uIHRoZSBzaW5rcy4KKworQSBnc3RiaW4gdGhlcmVmb3JlIGFsd2F5cyBwZXJmb3JtcyBhIHplcm8gdGltZW91dCBnZXRfc3RhdGUoKSBvbiBpdHMKK2VsZW1lbnRzIHRvIGRpc2NvdmVyIHRoZSBOT19QUkVST0xMIChhbmQgRVJST1IpIGVsZW1lbnRzIGJlZm9yZSBwZXJmb3JtaW5nCithIGJsb2NraW5nIHdhaXQuCisKKworU2NoZWR1bGluZworfn5+fn5+fn5+fgorCitMaXZlIHNvdXJjZXMgd2lsbCBub3QgcHJvZHVjZSBkYXRhIGluIHRoZSBwYXVzZWQgc3RhdGUuIFRoZXkgYmxvY2sgaW4gdGhlIAorZ2V0cmFuZ2UgZnVuY3Rpb24gb3IgaW4gdGhlIGxvb3AgZnVuY3Rpb24gdW50aWwgdGhleSBnbyB0byBQTEFZSU5HLgorCisKK0xhdGVuY3kKK35+fn5+fn4KKworVGhlIGxpdmUgc291cmNlIHRpbWVzdGFtcHMgaXRzIGRhdGEgd2l0aCB0aGUgdGltZSBvZiB0aGUgY2xvY2sgYXQgdGhlCit0aW1lIHRoZSBkYXRhIHdhcyBjYXB0dXJlZC4gTm9ybWFsbHkgaXQgd2lsbCB0YWtlIHNvbWUgdGltZSB0byBjYXB0dXJlCit0aGUgZmlyc3Qgc2FtcGxlIG9mIGRhdGEgYW5kIHRoZSBsYXN0IHNhbXBsZS4gVGhpcyBtZWFucyB0aGF0IHdoZW4gdGhlCitidWZmZXIgYXJyaXZlcyBhdCB0aGUgc2luaywgaXQgd2lsbCBhbHJlYWR5IGJlIGxhdGUgYW5kIHdpbGwgYmUgZHJvcHBlZC4KKworVGhlIGxhdGVuY3kgaXMgdGhlIHRpbWUgaXQgdGFrZXMgdG8gY29uc3RydWN0IG9uZSBidWZmZXIgb2YgZGF0YS4gVGhpcyBsYXRlbmN5CitpcyBleHBvc2VkIHdpdGggYSBMQVRFTkNZIHF1ZXJ5LgorCitTZWUgcGFydC1sYXRlbmN5LnR4dC4KKworCitUaW1lc3RhbXBzCit+fn5+fn5+fn5+CisKK0xpdmUgc291cmNlcyBhbHdheXMgdGltZXN0YW1wIHRoZWlyIGJ1ZmZlcnMgd2l0aCB0aGUgcnVubmluZ190aW1lIG9mIHRoZQorcGlwZWxpbmUuIFRoaXMgaXMgbmVlZGVkIHRvIGJlIGFibGUgdG8gbWF0Y2ggdGhlIHRpbWVzdGFtcHMgb2YgZGlmZmVyZW50IGxpdmUKK3NvdXJjZXMgaW4gb3JkZXIgdG8gc3luY2hyb25pemUgdGhlbS4KKworVGhpcyBpcyBpbiBjb250cmFzdCB0byBub24tbGl2ZSBzb3VyY2VzLCB3aGljaCB0aW1lc3RhbXAgdGhlaXIgYnVmZmVycyBzdGFydGluZworZnJvbSBydW5uaW5nX3RpbWUgMC4KKwpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1tZXNzYWdlcy50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LW1lc3NhZ2VzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTIzZDViCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9kZXNpZ24vcGFydC1tZXNzYWdlcy50eHQKQEAgLTAsMCArMSwxNDkgQEAKK01lc3NhZ2VzCistLS0tLS0tLQorCitNZXNzYWdlcyBhcmUgcmVmY291bnRlZCBsaWdodHdlaWdodCBvYmplY3RzIHRvIHNpZ25hbCB0aGUgYXBwbGljYXRpb24KK29mIHBpcGVsaW5lIGV2ZW50cy4gCisKK01lc3NhZ2VzIGFyZSBpbXBsZW1lbnRlZCBhcyBhIHN1YmNsYXNzIG9mIEdzdE1pbmlPYmplY3Qgd2l0aCBhIGdlbmVyaWMgCitHc3RTdHJ1Y3R1cmUgYXMgdGhlIGNvbnRlbnQuIFRoaXMgYWxsb3dzIGZvciB3cml0aW5nIGN1c3RvbSBtZXNzYWdlcyB3aXRob3V0CityZXF1aXJpbmcgYW4gQVBJIGNoYW5nZSB3aGlsZSBhbGxvd2luZyBhIHdpZGUgcmFuZ2Ugb2YgZGlmZmVyZW50IHR5cGVzCitvZiBtZXNzYWdlcy4KKworTWVzc2FnZXMgYXJlIHBvc3RlZCBieSBvYmplY3RzIGluIHRoZSBwaXBlbGluZSBhbmQgYXJlIHBhc3NlZCB0byB0aGUgCithcHBsaWNhdGlvbiB1c2luZyB0aGUgR3N0QnVzIChTZWUgYWxzbyBwYXJ0LWdzdGJ1cy50eHQgYW5kIHBhcnQtZ3N0cGlwZWxpbmUudHh0KS4gCisKKworTWVzc2FnZSB0eXBlcworfn5+fn5+fn5+fn5+fgorCitHU1RfTUVTU0FHRV9FT1M6CisKKyAgUG9zdGVkIGJ5IHNpbmsgZWxlbWVudHMuIFRoaXMgbWVzc2FnZSBpcyBwb3N0ZWQgdG8gdGhlIGFwcGxpY2F0aW9uIHdoZW4KKyAgYWxsIHRoZSBzaW5rcyBpbiBhIHBpcGVsaW5lIHBvc3RlZCBhbiBFT1MgbWVzc2FnZS4gV2hlbiBwZXJmb3JtaW5nIGEgc2VlaywKKyAgdGhlIEVPUyBzdGF0ZSBvZiB0aGUgcGlwZWxpbmUgYW5kIHNpbmtzIGlzIHVuZG9uZS4KKworR1NUX01FU1NBR0VfRVJST1I6CisKKyAgQW4gZWxlbWVudCBpbiB0aGUgcGlwZWxpbmUgZ290IGludG8gYW4gZXJyb3Igc3RhdGUuIFRoZSBtZXNzYWdlIGNhcnJpZXMKKyAgYSBHRXJyb3IgYW5kIGEgZGVidWcgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGVycm9yLiBUaGlzIHVzdWFsbHkgbWVhbnMgdGhhdAorICBwYXJ0IG9mIHRoZSBwaXBlbGluZSBpcyBub3Qgc3RyZWFtaW5nIGFueW1vcmUuCisKK0dTVF9NRVNTQUdFX1dBUk5JTkc6CisKKyAgQW4gZWxlbWVudCBpbiB0aGUgcGlwZWxpbmUgZW5jb3VudGVyZWQgYSBjb25kaXRpb24gdGhhdCBtYWRlIGl0IHByb2R1Y2UgYQorICB3YXJuaW5nLiBUaGlzIGNvdWxkIGJlIGEgcmVjb3ZlcmFibGUgZGVjb2RpbmcgZXJyb3Igb3Igc29tZSBvdGhlciBub24gZmF0YWwKKyAgZXZlbnQuIFRoZSBwaXBlbGluZSBjb250aW51ZXMgc3RyZWFtaW5nIGFmdGVyIGEgd2FybmluZy4KKworR1NUX01FU1NBR0VfSU5GTzoKKworICBBbiBlbGVtZW50IHByb2R1Y2VkIGFuIGluZm9ybWF0aW9uYWwgbWVzc2FnZS4KKworR1NUX01FU1NBR0VfVEFHOgorCisgIEFuIGVsZW1lbnQgZGVjb2RlZCBtZXRhZGF0YSBhYm91dCB0aGUgc3RyZWFtLiBUaGUgbWVzc2FnZSBjYXJyaWVzIGEgR3N0VGFnTGlzdAorICB3aXRoIHRoZSB0YWcgaW5mb3JtYXRpb24uCisKK0dTVF9NRVNTQUdFX0JVRkZFUklORzoKKworICBBbiBlbGVtZW50IGlzIGJ1ZmZlcmluZyBkYXRhIGFuZCB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IHRha2Ugc29tZSB0aW1lLiBUaGlzCisgIG1lc3NhZ2UgaXMgdHlwaWNhbGx5IGVtaXRlZCBieSBlbGVtZW50cyB0aGF0IHBlcmZvcm0gc29tZSBzb3J0IG9mIG5ldHdvcmsKKyAgYnVmZmVyaW5nLiBXaGlsZSB0aGUgcGlwZWxpbmUgaXMgYnVmZmVyaW5nIGl0IHNob3VsZCByZW1haW4gaW4gdGhlIFBBVVNFRAorICBzdGF0ZS4gV2hlbiB0aGUgYnVmZmVyaW5nIGlzIGZpbmlzaGVkLCBpdCBjYW4gcmVzdW1lIFBMQVlJTkcuCisKK0dTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQ6CisKKyAgQW4gZWxlbWVudCBjaGFuZ2VkIHN0YXRlIGluIHRoZSBwaXBlbGluZS4gVGhlIG1lc3NhZ2UgY2FycmllcyB0aGUgb2xkLCBuZXcKKyAgYW5kIHBlbmRpbmcgc3RhdGUgb2YgdGhlIGVsZW1lbnQuCisKK0dTVF9NRVNTQUdFX1NUQVRFX0RJUlRZOgorICAKKyAgQW4gaW50ZXJuYWwgbWVzc2FnZSB1c2VkIHRvIGluc3RydWN0IGEgcGlwZWxpbmUgaGllcmFyY2h5IHRoYXQgYSBzdGF0ZQorICByZWNhbGN1bGF0aW9uIG11c3QgYmUgcGVyZm9ybWVkIGJlY2F1c2Ugb2YgYW4gQVNZTkMgc3RhdGUgY2hhbmdlIGNvbXBsZXRlZC4KKyAgVGhpcyBtZXNzYWdlIGlzIG5vdCB1c2VkIGFueW1vcmUuCisKK0dTVF9NRVNTQUdFX1NURVBfRE9ORToKKworICBBbiBlbGVtZW50IHN0ZXBwaW5nIGZyYW1lcyBoYXMgZmluaXNoZWQuIFRoaXMgaXMgY3VycmVudGx5IG5vdCB1c2VkLgorCitHU1RfTUVTU0FHRV9DTE9DS19QUk9WSURFOgorCisgIEFuIGVsZW1lbnQgbm90aWZpZXMgaXQgY2FwYWJpbGl0eSBvZiBwcm92aWRpbmcgYSBjbG9jayBmb3IgdGhlIHBpcGVsaW5lLgorCitHU1RfTUVTU0FHRV9DTE9DS19MT1NUOgorCisgIFRoZSBjdXJyZW50IGNsb2NrIGFzIHNlbGVjdGVkIGJ5IHRoZSBwaXBlbGluZSBiZWNhbWUgdW51c2FibGUuIFRoZSBwaXBlbGluZSAKKyAgd2lsbCBzZWxlY3QgYSBuZXcgY2xvY2sgb24gdGhlIG5leHQgUExBWUlORyBzdGF0ZSBjaGFuZ2UuCisKK0dTVF9NRVNTQUdFX05FV19DTE9DSzoKKworICBBIG5ldyBjbG9jayB3YXMgc2VsZWN0ZWQgZm9yIHRoZSBwaXBlbGluZS4KKworR1NUX01FU1NBR0VfU1RSVUNUVVJFX0NIQU5HRToKKworICBUaGUgcGlwZWxpbmUgY2hhbmdlZCBvZiBzdHJ1Y3R1cmUsIFRoaXMgbWVhbnMgZWxlbWVudHMgd2VyZSBhZGRlZCBvciByZW1vdmVkIG9yCisgIHBhZHMgd2VyZSBsaW5rZWQgb3IgdW5saW5rZWQuIFRoaXMgbWVzc2FnZXMgaXMgbm90IHlldCB1c2VkLgorCitHU1RfTUVTU0FHRV9TVFJFQU1fU1RBVFVTOgorCisgIFBvc3RlZCBieSBhbiBlbGVtZW50IHdoZW4gaXQgc3RhcnQvc3RvcC9wYXVzZXMgYSBzdHJlYW1pbmcgdGFzay4gSXQKKyAgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlYXNvbiB3aHkgdGhlIHN0cmVhbSBzdGF0ZSBjaGFuZ2VkIGFsb25nCisgIHdpdGggdGhlIHRocmVhZCBpZC4gVGhlIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBkZXRlY3QKKyAgZmFpbHVyZXMgaW4gc3RyZWFtaW5nIHRocmVhZHMuIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gYWRqdXN0IHN0cmVhbWluZworICB0aHJlYWQgcHJpb3JpdGllcyBieSB0aGUgYXBwbGljYXRpb24uCisgIAorR1NUX01FU1NBR0VfQVBQTElDQVRJT046CisKKyAgVGhlIGFwcGxpY2F0aW9uIHBvc3RlZCBhIG1lc3NhZ2UuIFRoaXMgbWVzc2FnZSBtdXN0IGJlIHVzZWQgd2hlbiB0aGUKKyAgYXBwbGljYXRpb24gcG9zdHMgYSBtZXNzYWdlIG9uIHRoZSBidXMuCisKK0dTVF9NRVNTQUdFX0VMRU1FTlQ6CisKKyAgRWxlbWVudC1zcGVjaWZpYyBtZXNzYWdlLCBzZWUgdGhlIHNwZWNpZmljIGVsZW1lbnQncyBkb2N1bWVudGF0aW9uCisKK0dTVF9NRVNTQUdFX1NFR01FTlRfU1RBUlQ6CisKKyAgQW4gZWxlbWVudCBzdGFydGVkIHBsYXliYWNrIG9mIGEgbmV3IHNlZ21lbnQuIFRoaXMgbWVzc2FnZSBpcyBub3QgZm9yd2FyZGVkCisgIHRoZSBhcHBsaWNhdGlvbiBidXQgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIHNjaGVkdWxlIFNFR01FTlRfRE9ORSBtZXNzYWdlcy4KKworR1NUX01FU1NBR0VfU0VHTUVOVF9ET05FOgorCisgIEFuIGVsZW1lbnQgb3IgYmluIGNvbXBsZXRlZCBwbGF5YmFjayBvZiBhIHNlZ21lbnQuIFRoaXMgbWVzc2FnZSBpcyBvbmx5IHBvc3RlZAorICBvbiB0aGUgYnVzIGlmIGEgU0VHTUVOVCBzZWVrIGlzIHBlcmZvcm1lZCBvbiBhIHBpcGVsaW5lLgorCitHU1RfTUVTU0FHRV9EVVJBVElPTjoKKworICBBbiBlbGVtZW50IHBvc3RzIHRoaXMgbWVzc2FnZSB3aGVuIGl0IGhhcyBkZXRlY3RlZCBvciB1cGRhdGVkIHRoZSBzdHJlYW0gZHVyYXRpb24uCisKK0dTVF9NRVNTQUdFX0FTWU5DX1NUQVJUOgorCisgIFBvc3RlZCBieSBzaW5rcyB3aGVuIHRoZXkgc3RhcnQgYW4gYXN5bmNocm9ub3VzIHN0YXRlIGNoYW5nZS4KKworR1NUX01FU1NBR0VfQVNZTkNfRE9ORToKKworICBQb3N0ZWQgYnkgc2lua3Mgd2hlbiB0aGV5IHJlY2VpdmUgdGhlIGZpcnN0IGRhdGEgYnVmZmVyIGFuZCBjb21wbGV0ZSB0aGUKKyAgYXN5bmNocm9ub3VzIHN0YXRlIGNoYW5nZS4KKworR1NUX01FU1NBR0VfTEFURU5DWToKKworICBQb3N0ZWQgYnkgZWxlbWVudHMgd2hlbiB0aGUgbGF0ZW5jeSBpbiBhIHBpcGVsaW5lIGNoYW5nZWQgYW5kIGEgbmV3IGdsb2JhbAorICBsYXRlbmN5IHNob3VsZCBiZSBjYWxjdWxhdGVkIGJ5IHRoZSBwaXBlbGluZSBvciBhcHBsaWNhdGlvbi4KKworR1NUX01FU1NBR0VfUkVRVUVTVF9TVEFURToKKworICBQb3N0ZWQgYnkgZWxlbWVudHMgd2hlbiB0aGV5IHdhbnQgdG8gY2hhbmdlIHRoZSBzdGF0ZSBvZiB0aGUgcGlwZWxpbmUgdGhleQorICBhcmUgaW4uIEEgdHlwaWNhbCB1c2UgY2FzZSB3b3VsZCBiZSBhbiBhdWRpbyBzaW5rIHRoYXQgcmVxdWVzdHMgdGhlIHBpcGVsaW5lCisgIHRvIHBhdXNlIGluIG9yZGVyIHRvIHBsYXkgYSBoaWdoZXIgcHJpb3JpdHkgc3RyZWFtLgorCitHU1RfTUVTU0FHRV9TVEVQX1NUQVJUOgorCisgIEEgU3RlcHBpbmcgb3BlcmF0aW9uIGhhcyBzdGFydGVkLgorCitHU1RfTUVTU0FHRV9RT1M6CisKKyAgQSBidWZmZXIgd2FzIGRyb3BwZWQgb3IgYW4gZWxlbWVudCBjaGFuZ2VkIGl0cyBwcm9jZXNzaW5nIHN0cmF0ZWd5IGZvcgorICBRdWFsaXR5IG9mIFNlcnZpY2UgcmVhc29ucy4KKworR1NUX01FU1NBR0VfUFJPR1JFU1M6CisKKyAgQSBwcm9ncmVzcyBtZXNzYWdlIHdhcyBwb3N0ZWQuIFByb2dyZXNzIG1lc3NhZ2VzIGluZm9ybSB0aGUgYXBwbGljYXRpb24gYWJvdXQKKyAgdGhlIHN0YXRlIG9mIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zLgpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1taXNzaW5nLXBsdWdpbnMudHh0IGIvZG9jcy9kZXNpZ24vcGFydC1taXNzaW5nLXBsdWdpbnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MmQ3ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2Rlc2lnbi9wYXJ0LW1pc3NpbmctcGx1Z2lucy50eHQKQEAgLTAsMCArMSwyNjIgQEAKK1doYXQgdG8gZG8gd2hlbiBhIHBsdWdpbiBpcyBtaXNzaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbWVjaGFuaXNtIGFuZCBBUEkgZGVzY3JpYmVkIGluIHRoaXMgZG9jdW1lbnQgcmVxdWlyZXMgR1N0cmVhbWVyIGNvcmUgYW5kCitnc3QtcGx1Z2lucy1iYXNlIHZlcnNpb25zID49IDAuMTAuMTIuIEZ1cnRoZXIgaW5mb3JtYXRpb24gb24gc29tZSBhc3BlY3RzIG9mCit0aGlzIGRvY3VtZW50IGNhbiBiZSBmb3VuZCBpbiB0aGUgbGliZ3N0YmFzZXV0aWxzIEFQSSByZWZlcmVuY2UuCisKK1dlIG9ubHkgZGlzY3VzcyBwbGF5YmFjayBwaXBlbGluZXMgZm9yIG5vdy4KKworQSB0aHJlZSBzdGVwIHByb2Nlc3M6CisKKzEpIEdTdHJlYW1lciBsZXZlbAorCisgLSBlbGVtZW50cyB3aWxsIHVzZSBhICJtaXNzaW5nLXBsdWdpbiIgZWxlbWVudCBtZXNzYWdlIHRvIHJlcG9ydCBtaXNzaW5nCisgICBwbHVnaW5zLCB3aXRoIHRoZSBmb2xsb3dpbmcgZmllbGRzIHNldDoKKworICAgICAtIHR5cGU6IChzdHJpbmcpIHsgInVyaXNvdXJjZSIsICJ1cmlzaW5rIiwgImRlY29kZXIiLCAiZW5jb2RlciIsICJlbGVtZW50IiB9CisgICAgICAgICAod2UgZG8gbm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gZGVtdXhlci9kZWNvZGVycy9wYXJzZXJzIGV0Yy4pCisgICAgIC0gZGV0YWlsOiAoc3RyaW5nKSBvciAoY2FwcykgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIHsgQU5ZIH0KKyAgICAgICAgIGV4OiAibW1zLCAibW1zaCIsICJhdWRpby94LW1wMyxyYXRlPTQ4MDAwLC4uLiIKKyAgICAgLSBuYW1lOiAoc3RyaW5nKSB7IEFOWSB9CisgICAgICAgICBleDogIk1NUyBwcm90b2NvbCBoYW5kbGVyIiwuLgorCisgLSBtaXNzaW5nIHVyaSBoYW5kbGVyIAorICAKKyAgZXguIG1tczovL2Zvby5iYXIvZmlsZS5hc2YKKworICBXaGVuIG5vIHByb3RvY29sIGhhbmRsZXIgaXMgaW5zdGFsbGVkIGZvciBtbXM6Ly8sIHRoZSBhcHBsaWNhdGlvbiB3aWxsIG5vdCBiZQorICBhYmxlIHRvIGluc3RhbnRpYXRlIGFuIGVsZW1lbnQgZm9yIHRoYXQgdXJpIChnc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpKCkKKyAgcmV0dXJucyBOVUxMKS4KKworICBQbGF5YmluIHdpbGwgcG9zdCBhICJtaXNzaW5nLXBsdWdpbiIgZWxlbWVudCBtZXNzYWdlIHdpdGggdGhlIHR5cGUgc2V0IHRvIAorICAidXJpc291cmNlIiwgZGV0YWlsIHNldCB0byAibW1zIi4gT3B0aW9uYWxseSB0aGUgZnJpZW5kbHkgbmFtZSBjYW4gYmUgZmlsbGVkCisgIGluIGFzIHdlbGwuCisKKyAtIG1pc3NpbmcgdHlwZWZpbmQgZnVuY3Rpb24KKworICBXZSBkb24ndCByZWNvZ25pemUgdGhlIHR5cGUgb2YgdGhlIGZpbGUsIHRoaXMgc2hvdWxkIG5vcm1hbGx5IG5vdCBoYXBwZW4KKyAgYmVjYXVzZSBhbGwgdGhlIHR5cGVmaW5kZXJzIGFyZSBpbiB0aGUgYmFzaWMgR1N0cmVhbWVyIGluc3RhbGxhdGlvbi4KKyAgVGhlcmUgaXMgbm90IG11Y2ggdXNlZnVsIGluZm9ybWF0aW9uIHdlIGNhbiBnaXZlIGFib3V0IGhvdyB0byByZXNvbHZlIHRoaXMgCisgIGlzc3VlLiBJdCBpcyBwb3NzaWJsZSB0byB1c2UgdGhlIGZpcnN0IE4gYnl0ZXMgb2YgdGhlIGRhdGEgdG8gZGV0ZXJtaW5lIHRoZQorICB0eXBlIChhbmQgbmVlZGVkIHBsdWdpbikgb24gdGhlIHNlcnZlci4gV2UgZG9uJ3QgZXhwbG9yZSB0aGlzIG9wdGlvbiBpbiB0aGlzCisgIGRvY3VtZW50IHlldCwgYnV0IHRoZSBwcm9wb3NhbCBpcyBmbGV4aWJsZSBlbm91Z2ggdG8gYWNjb21tb2RhdGUgdGhpcyBpbiB0aGUKKyAgZnV0dXJlIHNob3VsZCB0aGUgbmVlZCBhcmlzZS4KKworIC0gbWlzc2luZyBkZW11eGVyCisKKyAgVHlwaWNhbGx5IGFmdGVyIHJ1bm5pbmcgdHlwZWZpbmQgb24gdGhlIGRhdGEgd2UgZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIHRoZSAKKyAgZmlsZS4gSWYgdGhlcmUgaXMgbm8gcGx1Z2luIGZvdW5kIGZvciB0aGUgdHlwZSwgYSAibWlzc2luZy1wbHVnaW4iIGVsZW1lbnQKKyAgbWVzc2FnZSBpcyBwb3N0ZWQgYnkgZGVjb2RlYmluIHdpdGggdGhlIGZvbGxvd2luZyBmaWVsZHM6IFR5cGUgc2V0IHRvCisgICJkZWNvZGVyIiwgZGV0YWlsIHNldCB0byB0aGUgY2FwcyBmb3Igd2l0Y2ggbm8gcGx1Z2luIHdhcyBmb3VuZC4gT3B0aW9uYWxseQorICB0aGUgZnJpZW5kbHkgbmFtZSBjYW4gYmUgZmlsbGVkIGluIGFzIHdlbGwuCisKKyAtIG1pc3NpbmcgZGVjb2RlciAKKworICBUaGUgZGVtdXhlciB3aWxsIGR5bmFtaWNhbGx5IGNyZWF0ZSBuZXcgcGFkcyB3aXRoIHNwZWNpZmljIGNhcHMgd2hpbGUgaXQgCisgIGZpZ3VyZXMgb3V0IHRoZSBjb250ZW50cyBvZiB0aGUgY29udGFpbmVyIGZvcm1hdC4gRGVjb2RlYmluIHRyaWVzIHRvIGZpbmQgdGhlCisgIGRlY29kZXJzIGZvciB0aGVzZSBmb3JtYXRzIGluIHRoZSByZWdpc3RyeS4gSWYgdGhlcmUgaXMgbm8gZGVjb2RlciBmb3VuZCwgYQorICAibWlzc2luZy1wbHVnaW4iIGVsZW1lbnQgbWVzc2FnZSBpcyBwb3N0ZWQgYnkgZGVjb2RlYmluIHdpdGggdGhlIGZvbGxvd2luZworICBmaWVsZHM6IFR5cGUgc2V0IHRvICJkZWNvZGVyIiwgZGV0YWlsIHNldCB0byB0aGUgY2FwcyBmb3Igd2hpY2ggbm8gcGx1Z2luCisgIHdhcyBmb3VuZC4gT3B0aW9uYWxseSB0aGUgZnJpZW5kbHkgbmFtZSBjYW4gYmUgZmlsbGVkIGluIGFzIHdlbGwuIFRoZXJlIGlzCisgIG5vIGRpc3RpbmN0aW9uIG1hZGUgYmV0d2VlbiB0aGUgbWlzc2luZyBkZW11eGVyIGFuZCBkZWNvZGVyIGF0IHRoZQorICBhcHBsaWNhdGlvbiBsZXZlbC4KKworIC0gbWlzc2luZyBlbGVtZW50CisKKyAgRGVjb2RlYmluIGFuZCBwbGF5YmluIHdpbGwgY3JlYXRlIGEgc2V0IG9mIGhlbHBlciBlbGVtZW50cyB3aGVuIHRoZXkgc2V0IHVwCisgIHRoZWlyIGRlY29kaW5nIHBpcGVsaW5lLiBUaGVzZSBlbGVtZW50cyBhcmUgdHlwaWNhbGx5IGNvbG9yc3BhY2UsIHNhbXBsZSByYXRlLAorICBhdWRpbyBzaW5rcywuLi4gVGhlaXIgcHJlc2VuY2Ugb24gdGhlIHN5c3RlbSBpcyByZXF1aXJlZCBmb3IgdGhlIGZ1bmN0aW9uYWxpdHkKKyAgb2YgZGVjb2RlYmluLiBJdCBpcyB0eXBpY2FsbHkgYSBwYWNrYWdlIGRlcGVuZGVuY3kgZXJyb3IgaWYgdGhleSBhcmUgbm90CisgIHByZXNlbnQgYnV0IGluIGNhc2Ugb2YgYSBjb3JydXB0ZWQgc3lzdGVtIHRoZSBmb2xsb3dpbmcgIm1pc3NpbmctcGx1Z2luIgorICBlbGVtZW50IG1lc3NhZ2Ugd2lsbCBiZSBlbWl0dGVkOiB0eXBlIHNldCB0byAiZWxlbWVudCIsIGRldGFpbCBzZXQgdG8gdGhlCisgIGVsZW1lbnQgZmFjdG9yeSBuYW1lIGFuZCB0aGUgZnJpZW5kbHkgbmFtZSBvcHRpb25hbGx5IHNldCB0byBhIGRlc2NyaXB0aW9uCisgIG9mIHRoZSBlbGVtZW50J3MgZnVuY3Rpb25hbGl0eSBpbiB0aGUgZGVjb2RpbmcgcGlwZWxpbmUuCisKKyBFeGNlcHQgZm9yIHJlcG9ydGluZyB0aGUgbWlzc2luZyBwbHVnaW5zLCBubyBmdXJ0aGVyIHBvbGljeSBpcyBlbmZvcmNlZCBhdCB0aGUKKyBHU3RyZWFtZXIgbGV2ZWwuIEl0IGlzIHVwIHRvIHRoZSBhcHBsaWNhdGlvbiB0byBkZWNpZGUgd2hldGhlciBhIG1pc3NpbmcKKyBwbHVnaW4gY29uc3RpdHV0ZXMgYSBwcm9ibGVtIG9yIG5vdC4KKworCisyKSBhcHBsaWNhdGlvbiBsZXZlbAorCisgVGhlIGFwcGxpY2F0aW9uJ3Mgam9iIGlzIHRvIGxpc3RlbiBmb3IgdGhlICJtaXNzaW5nLXBsdWdpbiIgZWxlbWVudCBtZXNzYWdlcworIGFuZCB0byBkZWNpZGUgb24gYSBwb2xpY3kgdG8gaGFuZGxlIHRoZW0uIEZvbGxvd2luZyBjYXNlcyBleGlzdDoKKworIC0gcGFydGlhbGx5IG1pc3NpbmcgcGx1Z2lucworCisgVGhlIGFwcGxpY2F0aW9uIHdpbGwgYmUgYWJsZSB0byBjb21wbGV0ZSBhIHN0YXRlIGNoYW5nZSB0byBQQVVTRUQgYnV0IHRoZXJlIAorIHdpbGwgYmUgYSAibWlzc2luZy1wbHVnaW4iIGVsZW1lbnQgbWVzc2FnZSBvbiB0aGUgR3N0QnVzLiAKKworIFRoaXMgbWVhbnMgdGhhdCBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHBsYXkgYmFjayBwYXJ0IG9mIHRoZSBtZWRpYSBmaWxlIGJ1dCBub3QKKyBhbGwgb2YgaXQuIAorCisgRm9yIGV4YW1wbGU6IHN1cHBvc2Ugd2UgaGF2ZSBhbiAuYXZpIGZpbGUgd2l0aCBtcDMgYXVkaW8gYW5kIGRpdnggdmlkZW8uIElmIHdlIAorIGhhdmUgdGhlIG1wMyBhdWRpbyBkZWNvZGVyIGJ1dCBub3QgdGhlIGRpdnggdmlkZW8gZGVjb2RlciwgaXQgd2lsbCBiZSBwb3NzaWJsZQorIHRvIHBsYXkgb25seSB0aGUgYXVkaW8gcGFydCBidXQgbm90IHRoZSB2aWRlbyBwYXJ0LiBGb3IgYW4gYXVkaW8gcGxheWJhY2sKKyBhcHBsaWNhdGlvbiwgdGhpcyBpcyBub3QgYSBwcm9ibGVtIGJ1dCBhIHZpZGVvIHBsYXllciBtaWdodCB3YW50IHRvIGRlY2lkZSBvbjoKKworICAgLSByZXF1aXJlIHRoZSB1c2UgdG8gaW5zdGFsbCB0aGUgYWRkaXRpb25hbGx5IHJlcXVpcmVkIHBsdWdpbnMuIAorICAgLSBpbmZvcm0gdGhlIHVzZXIgdGhhdCBvbmx5IHRoZSBhdWRpbyB3aWxsIGJlIHBsYXllZCBiYWNrCisgICAtIGFzayB0aGUgdXNlciBpZiBpdCBzaG91bGQgZG93bmxvYWQgdGhlIGFkZGl0aW9uYWwgY29kZWMgb3Igb25seSBwbGF5IHRoZSAKKyAgICAgYXVkaW8gcGFydC4KKyAgIC0gLi4uCisKKyAtIGNvbXBsZXRlbHkgdW5wbGF5YWJsZSBzdHJlYW0KKworIFRoZSBhcHBsaWNhdGlvbiB3aWxsIHJlY2VpdmUgYW4gRVJST1IgbWVzc2FnZSBmcm9tIEdTdHJlYW1lciBpbmZvcm1pbmcgaXQgdGhhdAorIHBsYXliYWNrIHN0b3BwZWQgKGJlZm9yZSBpdCBjb3VsZCByZWFjaCBQQVVTRUQpLiBUaGlzIGhhcHBlbnMgYmVjYXVzZSBub25lIG9mCisgdGhlIHN0cmVhbXMgaXMgY29ubmVjdGVkIHRvIGEgZGVjb2Rlci4gVGhlIGVycm9yIGNvZGUgYW5kIGRvbWFpbiBzaG91bGQgYmUgb25lCisgb2YgdGhlIGZvbGxvd2luZyBpbiB0aGlzIGNhc2U6CisgICAgLSBHU1RfQ09SRV9FUlJPUl9NSVNTSU5HX1BMVUdJTiAoZG9tYWluOiBHU1RfQ09SRV9FUlJPUikKKyAgICAtIEdTVF9TVFJFQU1fRVJST1JfQ09ERUNfTk9UX0ZPVU5EIChkb21haW46IEdTVF9TVFJFQU1fRVJST1IpCisKKyBUaGUgYXBwbGljYXRpb24gY2FuIHRoZW4gc2VlIHRoYXQgdGhlcmUgYXJlIGEgc2V0IG9mICJtaXNzaW5nLXBsdWdpbiIgZWxlbWVudAorIG1lc3NhZ2VzIG9uIHRoZSBHc3RCdXMgYW5kIGNhbiBkZWNpZGUgdG8gdHJpZ2dlciB0aGUgZG93bmxvYWQgcHJvY2VkdXJlLiBJdAorIGRvZXMgdGhhdCBhcyBkZXNjcmliZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9uLgorCisgIm1pc3NpbmctcGx1Z2luIiBlbGVtZW50IG1lc3NhZ2VzIGNhbiBiZSBpZGVudGlmaWVkIHVzaW5nIHRoZSBmdW5jdGlvbgorIGdzdF9pc19taXNzaW5nX3BsdWdpbl9tZXNzYWdlKCkuCisKKworMykgUGx1Z2luIGRvd25sb2FkIHN0YWdlCisKKyAgQXQgdGhpcyBwb2ludCB0aGUgYXBwbGljYXRpb24gaGFzCisgICAgLSBjb2xsZWN0ZWQgb25lIG9yIG1vcmUgIm1pc3NpbmctcGx1Z2luIiBlbGVtZW50IG1lc3NhZ2VzCisgICAgLSBtYWRlIGEgZGVjaXNpb24gdGhhdCBhZGRpdGlvbmFsIHBsdWdpbnMgc2hvdWxkIGJlIGluc3RhbGxlZAorCisgIEl0IHdpbGwgY2FsbCBhIEdTdHJlYW1lciB1dGlsaXR5IGZ1bmN0aW9uIHRvIGNvbnZlcnQgZWFjaCAibWlzc2luZy1wbHVnaW4iCisgIG1lc3NhZ2UgaW50byBhbiBpZGVudGlmaWVyIHN0cmluZyBkZXNjcmliaW5nIHRoZSBtaXNzaW5nIGNhcGFiaWxpdHkuIFRoaXMgaXMKKyAgZG9uZSB1c2luZyB0aGUgZnVuY3Rpb24gZ3N0X21pc3NpbmdfcGx1Z2luX21lc3NhZ2VfZ2V0X2luc3RhbGxlcl9kZXRhaWwoKS4KKworICBUaGUgYXBwbGljYXRpb24gd2lsbCB0aGVuIHBhc3MgdGhlc2Ugc3RyaW5ncyB0byBnc3RfaW5zdGFsbF9wbHVnaW5zX2FzeW5jKCkKKyAgb3IgZ3N0X2luc3RhbGxfcGx1Z2luc19zeW5jKCkgdG8gaW5pdGlhdGUgdGhlIGRvd25sb2FkLiBTZWUgdGhlIEFQSQorICBkb2N1bWVudGF0aW9uIHRoZXJlIChsaWJnc3RiYXNldXRpbHMsIHBhcnQgb2YgZ3N0LXBsdWdpbnMtYmFzZSkgZm9yIG1vcmUKKyAgZGV0YWlscy4KKworICBXaGVuIG5ldyBwbHVnaW5zIGhhdmUgYmVlbiBpbnN0YWxsZWQsIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGhhdmUgdG8gaW5pdGlhdGUKKyAgYSByZS1zY2FuIG9mIHRoZSBHU3RyZWFtZXIgcGx1Z2luIHJlZ2lzdHJ5IHVzaW5nIGdzdF91cGRhdGVfcmVnaXN0cnkoKS4KKworCis0KSBGb3JtYXQgb2YgdGhlIChVVEYtOCkgc3RyaW5nIElEIHBhc3NlZCB0byB0aGUgZXh0ZXJuYWwgaW5zdGFsbGVyIHN5c3RlbQorCisgIFRoZSBzdHJpbmcgaXMgbWFkZSB1cCBvZiBzZXZlcmFsIGZpZWxkcywgc2VwYXJhdGVkIGJ5ICd8JyBjaGFyYWN0ZXJzLgorICBUaGUgZmllbGRzIGFyZToKKworICAgIC0gcGx1Z2luIHN5c3RlbSBpZGVudGlmaWVyLCBpZS4gImdzdHJlYW1lciIKKyAgICAgIFRoaXMgaWRlbnRpZmllciBkZXRlcm1pbmVzIHRoZSBmb3JtYXQgb2YgdGhlIHJlc3Qgb2YgdGhlIGRldGFpbCBzdHJpbmcuCisgICAgICBBdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxlcnMgc2hvdWxkIG5vdCBwcm9jZXNzIGRldGFpbCBzdHJpbmdzIHdpdGgKKyAgICAgIHVua25vd24gaWRlbnRpZmllcnMuIFRoaXMgYWxsb3dzIG90aGVyIHBsdWdpbi1iYXNlZCBsaWJyYXJpZXMgdG8gdXNlCisgICAgICB0aGUgc2FtZSBtZWNoYW5pc20gZm9yIHRoZWlyIGF1dG9tYXRpYyBwbHVnaW4gaW5zdGFsbGF0aW9uIG5lZWRzLCBvcgorICAgICAgZm9yIHRoZSBmb3JtYXQgdG8gYmUgY2hhbmdlZCBzaG91bGQgaXQgdHVybiBvdXQgdG8gYmUgaW5zdWZmaWNpZW50LgorCisgICAgLSBwbHVnaW4gc3lzdGVtIHZlcnNpb24sIGUuZy4gIjAuMTAiCisgICAgICBUaGlzIGlzIHJlcXVpcmVkIHNvIHRoYXQgd2hlbiB0aGVyZSBpcyBhIEdTdHJlYW1lci0wLjEyIG9yIEdTdHJlYW1lci0xLjAKKyAgICAgIGF0IHNvbWVtIHBvaW50IGluIGZ1dHVyZSwgdGhlIGRpZmZlcmVudCBtYWpvciB2ZXJzaW9ucyBjYW4gc3RpbGwgY28tZXhpc3QKKyAgICAgIGFuZCB1c2UgdGhlIHNhbWUgcGx1Z2luIGluc3RhbGwgbWVjaGFuaXNtIGluIHRoZSBzYW1lIHdheS4KKworICAgIC0gYXBwbGljYXRpb24gaWRlbnRpZmllciwgZS5nLiAidG90ZW0iCisgICAgICBUaGlzIG1heSBhbHNvIGJlIGluIHRoZSBmb3JtIG9mICJwaWQvMTIzNDUiIGlmIHRoZSBwcm9ncmFtIG5hbWUgY2FuJ3QKKyAgICAgIGJlIG9idGFpbmVkIGZvciBzb21lIHJlYXNvbi4KKworICAgIC0gaHVtYW4tcmVhZGFibGUgbG9jYWxpc2VkIGRlc2NyaXB0aW9uIG9mIHRoZSByZXF1aXJlZCBjb21wb25lbnQsCisgICAgICBlLmcuICJWb3JiaXMgYXVkaW8gZGVjb2RlciIKKworICAgIC0gaWRlbnRpZmllciBzdHJpbmcgZm9yIHRoZSByZXF1aXJlZCBjb21wb25lbnQsIGUuZy4KKworICAgICAgICAgLSB1cmlzb3VyY2UtJChQUk9UT0NPTF9SRVFVSVJFRCkKKyAgICAgICAgICAgICBlLmcuIHVyaXNvdXJjZS1odHRwIG9yIHVyaXNvdXJjZS1tbXMKKworICAgICAgICAgLSBlbGVtZW50LSQoRUxFTUVOVF9SRVFVSVJFRCksCisgICAgICAgICAgICAgZS5nLiBlbGVtZW50LWZmbXBlZ2NvbG9yc3BhY2UKKworICAgICAgICAgLSBkZWNvZGVyLSQoQ0FQU19SRVFVSVJFRCkKKyAgICAgICAgICAgICBlLmcuIGRlY29kZXItYXVkaW8veC12b3JiaXMgb3IKKyAgICAgICAgICAgICAgICAgIGRlY29kZXItYXBwbGljYXRpb24vb2dnIG9yCisgICAgICAgICAgICAgICAgICBkZWNvZGVyLWF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpNCBvcgorICAgICAgICAgICAgICAgICAgZGVjb2Rlci12aWRlby9tcGVnLCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pdHJ1ZSwgbXBlZ3ZlcnNpb249KGludCkyCisKKyAgICAgICAgIC0gZW5jb2Rlci0kKENBUFNfUkVRVUlSRUQpCisgICAgICAgICAgICAgZS5nLiBlbmNvZGVyLWF1ZGlvL3gtdm9yYmlzCisKKyAgICAtIG9wdGlvbmFsIGZ1cnRoZXIgZmllbGRzIG5vdCB5ZXQgc3BlY2lmaWVkCisKKworICBBbiBlbnRpcmUgSUQgc3RyaW5nIG1pZ2h0IHRoZW4gbG9vayBsaWtlIHRoaXMsIGZvciBleGFtcGxlOgorCisgICAgZ3N0cmVhbWVyfDAuMTB8dG90ZW18Vm9yYmlzIGF1ZGlvIGRlY29kZXJ8ZGVjb2Rlci1hdWRpby94LXZvcmJpcworCisgIFBsdWdpbiBpbnN0YWxsZXJzIHBhcnNpbmcgdGhpcyBJRCBzdHJpbmcgc2hvdWxkIGV4cGVjdCBmdXJ0aGVyIGZpZWxkcyBhbHNvCisgIHNlcGFyYXRlZCBieSAnfCcgc3ltYm9scyBhbmQgZWl0aGVyIGlnbm9yZSB0aGVtLCB3YXJuIHRoZSB1c2VyLCBvciBlcnJvcgorICBvdXQgd2hlbiBlbmNvdW50ZXJpbmcgdGhlbS4KKyAKKyAgVGhlIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIHN0cmluZyBpcyBwcm92aWRlZCBieSB0aGUgbGliZ3N0YmFzZXV0aWxzCisgIGxpYnJhcnkgdGhhdCBjYW4gYmUgZm91bmQgaW4gZ3N0LXBsdWdpbnMtYmFzZSB2ZXJzaW9ucyA+PSAwLjEwLjEyIGFuZCBjYW4KKyAgYWxzbyBiZSB1c2VkIGJ5IGRlbXV4ZXJzIHRvIGZpbmQgb3V0IHRoZSBjb2RlYyBuYW1lcyBmb3IgdGFnbGlzdHMgZnJvbSBnaXZlbgorICBjYXBzIGluIGEgdW5pZmllZCBhbmQgY29uc2lzdGVudCB3YXkuCisKKyAgQXBwbGljYXRpb25zIGNhbiBjcmVhdGUgdGhlc2UgZGV0YWlsIHN0cmluZ3MgdXNpbmcgdGhlIGZ1bmN0aW9uCisgIGdzdF9taXNzaW5nX3BsdWdpbl9tZXNzYWdlX2dldF9pbnN0YWxsZXJfZGV0YWlsKCkgb24gYSBnaXZlbiBtaXNzaW5nLXBsdWdpbgorICBtZXNzYWdlLgorCisKKzUpIFVzaW5nIG1pc3NpbmctcGx1Z2luIG1lc3NhZ2VzIGZvciBlcnJvciByZXBvcnRpbmc6CisKKyAgTWlzc2luZy1wbHVnaW4gbWVzc2FnZXMgYXJlIGFsc28gdXNlZnVsIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMsIGVpdGhlcgorICBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcG9ydCBsaWJnaW1tZS1jb2RlYywgb3IgdGhlCisgIGV4dGVybmFsIGluc3RhbGxlciBpcyBub3QgYXZhaWxhYmxlIG9yIG5vdCBhYmxlIHRvIGluc3RhbGwgdGhlIHJlcXVpcmVkCisgIHBsdWdpbnMuCisKKyAgV2hlbiBjcmVhdGluZyBlcnJvciBtZXNzYWdlcywgYXBwbGljYXRpb25zIG1heSB1c2UgdGhlIGZ1bmN0aW9uCisgIGdzdF9taXNzaW5nX3BsdWdpbl9tZXNzYWdlX2dldF9kZXNjcmlwdGlvbigpIHRvIG9idGFpbiBhIHBvc3NpYmx5IHRyYW5zbGF0ZWQKKyAgZGVzY3JpcHRpb24gZnJvbSBlYWNoIG1pc3NpbmctcGx1Z2luIG1lc3NhZ2UgKGUuZy4gIk1hdHJvc2thIGRlbXV4ZXIiIG9yCisgICJUaGVvcmEgdmlkZW8gZGVwYXlsb2FkZXIiKS4gVGhpcyBjYW4gYmUgdXNlZCB0byByZXBvcnQgdG8gdGhlIHVzZXIgZXhhY3RseQorICB3aGF0IGl0IGlzIHRoYXQgaXMgbWlzc2luZy4KKworCis2KSBOb3RlcyBmb3IgcGFja2FnZXJzCisKKyAtIEFuIGVhc3kgd2F5IHRvIGludHJvc3BlY3QgcGx1Z2luIC5zbyBmaWxlcyBpczoKKworICAgICAkIGdzdC1pbnNwZWN0IC0tcHJpbnQtcGx1Z2luLWF1dG8taW5zdGFsbC1pbmZvIC9wYXRoL3RvL2xpYmdzdGZvby5zbworCisgICBUaGUgb3V0cHV0IHdpbGwgYmUgc29tZXRoaW5nIGxpa2U6CisKKyAgICAgZGVjb2Rlci1hdWRpby94LXZvcmJpcworICAgICBlbGVtZW50LXZvcmJpc2RlYworICAgICBlbGVtZW50LXZvcmJpc2VuYworICAgICBlbGVtZW50LXZvcmJpc3BhcnNlCisgICAgIGVsZW1lbnQtdm9yYmlzdGFnCisgICAgIGVuY29kZXItYXVkaW8veC12b3JiaXMKKworICAgQlVUIGNvdWxkIGFsc28gYmUgbGlrZSB0aGlzIChmcm9tIHRoZSBmYWFkIGVsZW1lbnQgaW4gdGhpcyBjYXNlKToKKworICAgICBkZWNvZGVyLWF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpeyAyLCA0IH0KKworICAgTk9URSB0aGF0IHRoaXMgZG9lcyBub3QgZXhhY3RseSBtYXRjaCB0aGUgY2FwcyBzdHJpbmcgdGhhdCB0aGUgaW5zdGFsbGVyCisgICB3aWxsIGdldCBmcm9tIHRoZSBhcHBsaWNhdGlvbi4gVGhlIGFwcGxpY2F0aW9uIHdpbGwgYWx3YXlzIGV2ZXIgYXNrIGZvcgorICAgb25lIG9mCisKKyAgICAgZGVjb2Rlci1hdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTIKKyAgICAgZGVjb2Rlci1hdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTQKKworCisgLSB3aGVuIGludHJvc3BlY3RpbmcsIGtlZXAgaW4gbWluZCB0aGF0IHRoZXJlIGFyZSBHU3RyZWFtZXIgcGx1Z2lucyB0aGF0CisgICBpbiB0dXJuIGxvYWQgZXh0ZXJuYWwgcGx1Z2lucy4gRXhhbXBsZXMgb2YgdGhlc2UgYXJlIHBpdGZkbGwsIGxhZHNwYSwgb3IKKyAgIHRoZSBHU3RyZWFtZXIgbGlidmlzdWFsIHBsdWdpbi4gVGhvc2UgcGx1Z2lucyB3aWxsIG9ubHkgYW5ub3VuY2UgZWxlbWVudHMKKyAgIGZvciB0aGUgY3VycmVudGx5IGluc3RhbGxlZCBleHRlcm5hbCBwbHVnaW5zIGF0IHRoZSB0aW1lIG9mIGludHJvc3BlY3Rpb24hCisgICBXaXRoIHRoZSBleGNlcHRpb24gb2YgcGl0ZmRsbCwgdGhpcyBpcyBub3QgcmVhbGx5IHJlbGV2YW50IHRvIHRoZSBwbGF5YmFjaworICAgY2FzZSwgYnV0IG1heSBiZWNvbWUgYW4gaXNzdWUgaW4gZnV0dXJlIHdoZW4gYXBwbGljYXRpb25zIGxpa2UgYnV6enRhcmQsCisgICBqb2tvc2hlciBvciBwaXRpdmkgc3RhcnQgcmVxdWVzdGlvbiBlbGVtZW50cyBieSBuYW1lLCBmb3IgZXhhbXBsZSBsYWRzcGEKKyAgIGVmZmVjdCBlbGVtZW50cyBvciBzby4KKyAgIAorICAgVGhpcyBjYXNlIGNvdWxkIGJlIGhhbmRsZWQgaWYgdGhvc2Ugd3JhcHBlciBwbHVnaW5zIHdvdWxkIGFsc28gcHJvdmlkZSBhCisgICBnc3QtaW5zdGFsbC14eHgtcGx1Z2lucy1oZWxwZXIsIHdoZXJlIHh4eD17bGFkc3BhfHZpc3VhbHwuLi59LiBUaHVzIGlmIHRoZQorICAgZGlzdHJvIHNwZWNpZmljIGdzdC1pbnN0YWxsLXBsdWdpbnMtaGVscGVyIGNhbid0IHJlc29sdmUgYSByZXF1ZXN0IGZvciBlLmcuCisgICBlbGVtZW50LWJtbC1zb25pY3ZlcmIgaXQgY2FuIGZvcndhcmQgdGhlIHJlcXVlc3QgdG8gCisgICBnc3QtaW5zdGFsbC1ibWwtcGx1Z2lucy1oZWxwZXIgKGJtbCBpcyB0aGUgYnV6eiBtYWNoaW5lIGxvYWRlcikuCisKKworNykgRnVydGhlciByZWZlcmVuY2VzOgorCitodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMvaHRtbC9nc3RyZWFtZXItYmFzZS11dGlscy5odG1sCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LW5lZ290aWF0aW9uLnR4dCBiL2RvY3MvZGVzaWduL3BhcnQtbmVnb3RpYXRpb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNWY0YmUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2Rlc2lnbi9wYXJ0LW5lZ290aWF0aW9uLnR4dApAQCAtMCwwICsxLDI1NyBAQAorTmVnb3RpYXRpb24KKy0tLS0tLS0tLS0tCisKK0NhcGFiaWxpdGllcyBuZWdvdGlhdGlvbiBpcyB0aGUgcHJvY2VzcyBvZiBkZWNpZGluZyBvbiBhbiBhZGVxdWF0ZQorZm9ybWF0IGZvciBkYXRhZmxvdyB3aXRoaW4gYSBHU3RyZWFtZXIgcGlwZWxpbmUuIElkZWFsbHksIG5lZ290aWF0aW9uCisoYWxzbyBrbm93biBhcyAiY2Fwc25lZ28iKSB0cmFuc2ZlcnMgaW5mb3JtYXRpb24gZnJvbSB0aG9zZSBwYXJ0cyBvZiB0aGUKK3BpcGVsaW5lIHRoYXQgaGF2ZSBpbmZvcm1hdGlvbiB0byB0aG9zZSBwYXJ0cyBvZiB0aGUgcGlwZWxpbmUgdGhhdCBhcmUKK2ZsZXhpYmxlLCBjb25zdHJhaW5lZCBieSB0aG9zZSBwYXJ0cyBvZiB0aGUgcGlwZWxpbmUgdGhhdCBhcmUgbm90CitmbGV4aWJsZS4KKworR1N0cmVhbWVyJ3MgdHdvIHNjaGVkdWxpbmcgbW9kZXMsIHB1c2ggbW9kZSBhbmQgcHVsbCBtb2RlLCBsZW5kCit0aGVtc2VsdmVzIHRvIGRpZmZlcmVudCBtZWNoYW5pc21zIHRvIGFjaGlldmUgdGhpcyBnb2FsLiBBcyBpdCBpcyBtb3JlCitjb21tb24gd2UgZGVzY3JpYmUgcHVzaCBtb2RlIG5lZ290aWF0aW9uIGZpcnN0LgorCitQdXNoLW1vZGUgbmVnb3RpYXRpb24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitQdXNoLW1vZGUgbmVnb3RpYXRpb24gaGFwcGVucyB3aGVuIGVsZW1lbnRzIHdhbnQgdG8gcHVzaCBidWZmZXJzIGFuZAorbmVlZCB0byBkZWNpZGUgb24gdGhlIGZvcm1hdC4gVGhpcyBpcyBjYWxsZWQgZG93bnN0cmVhbSBuZWdvdGlhdGlvbgorYmVjYXVzZSB0aGUgdXBzdHJlYW0gZWxlbWVudCBkZWNpZGVzIHRoZSBmb3JtYXQgZm9yIHRoZSBkb3duc3RyZWFtCitlbGVtZW50LiBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiBjYXNlLgorCitOZWdvdGlhdGlvbiBjYW4gYWxzbyBoYXBwZW4gd2hlbiBhIGRvd25zdHJlYW0gZWxlbWVudCB3YW50cyB0byByZWNlaXZlIAorYW5vdGhlciBkYXRhIGZvcm1hdCBmcm9tIGFuIHVwc3RyZWFtIGVsZW1lbnQuIFRoaXMgaXMgY2FsbGVkIHVwc3RyZWFtCituZWdvdGlhdGlvbi4KKworVGhlIGJhc2ljcyBvZiBuZWdvdGlhdGlvbiBhcmUgYXMgZm9sbG93czoKKworIC0gR3N0Q2FwcyAoc2VlIHBhcnQtY2Fwcy50eHQpIGFyZSByZWZjb3VudGVkIGJlZm9yZSB0aGV5IGFyZSBwdXNoZWQgYXMKKyAgIGFuIGV2ZW50IHRvIGRlc2NyaWJlIHRoZSBjb250ZW50cyBvZiB0aGUgZm9sbG93aW5nIGJ1ZmZlci4KKworIC0gQW4gZWxlbWVudCBzaG91bGQgcmVjb25maWd1cmUgaXRzZWxmIHRvIHRoZSBuZXcgZm9ybWF0IHJlY2VpdmVkIGFzIGEgQ0FQUworICAgZXZlbnQgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIGZvbGxvd2luZyBidWZmZXJzLiBJZiB0aGUgZGF0YSB0eXBlIGluIHRoZQorICAgY2FwcyBldmVudCBpcyBub3QgYWNjZXB0YWJsZSwgdGhlIGVsZW1lbnQgc2hvdWxkIHJlZnVzZSB0aGUgYnVmZmVyIGJ5IAorICAgcmV0dXJuaW5nIGFuIGFwcHJvcHJpYXRlIEdTVF9GTE9XX05PVF9ORUdPVElBVEVEIHJldHVybiB2YWx1ZSBmcm9tIHRoZQorICAgY2hhaW4gZnVuY3Rpb24uCisKKyAtIERvd25zdHJlYW0gZWxlbWVudHMgY2FuIHJlcXVlc3QgYSBmb3JtYXQgY2hhbmdlIG9mIHRoZSBzdHJlYW0gYnkgc2VuZGluZyBhCisgICBSRUNPTkZJR1VSRSBldmVudCB1cHN0cmVhbS4gVXBzdHJlYW0gZWxlbWVudHMgd2lsbCByZW5lZ290aWF0ZSBhIG5ldyBmb3JtYXQKKyAgIHdoZW4gdGhleSByZWNlaXZlIGEgUkVDT05GSUdVUkUgZXZlbnQuCisKK1RoZSBnZW5lcmFsIGZsb3cgZm9yIGEgc291cmNlIHBhZCBzdGFydGluZyB0aGUgbmVnb3RpYXRpb24uCisKKyAgICAgICAgICAgICBzcmMgICAgICAgICAgICAgIHNpbmsKKyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICB8ICBhY2NlcHRzPyAgICAgICB8CisgIHR5cGUgQSAgICAgIHwtLS0tLS0tLS0tLS0tLS0tPnwKKyAgICAgICAgICAgICAgfCAgICAgIHllcyAgICAgICAgfAorICAgICAgICAgICAgICB8PCAtIC0gLSAtIC0gLSAtIC18CisgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgfCAgc2VuZF9ldmVudCgpICAgfAorIHNlbmQgQ0FQUyAgICB8LS0tLS0tLS0tLS0tLS0tLT58IFJlY2VpdmUgdHlwZSBBLCByZWNvbmZpZ3VyZSB0bworIGV2ZW50IEEgICAgICB8ICAgICAgICAgICAgICAgICB8IHByb2Nlc3MgdHlwZSBBLgorICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgIHwgIHB1c2ggICAgICAgICAgIHwKKyBwdXNoIGJ1ZmZlciAgfC0tLS0tLS0tLS0tLS0tLS0+fCBQcm9jZXNzIGJ1ZmZlciBvZiB0eXBlIEEKKyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfAorCisgT25lIHBvc3NpYmxlIGltcGxlbWVudGF0aW9uIGluIHBzZXVkbyBjb2RlOgorCisgW2VsZW1lbnQgd2FudHMgdG8gY3JlYXRlIGEgYnVmZmVyXQorIGlmIG5vdCBmb3JtYXQKKyAgICMgc2VlIHdoYXQgd2UgY2FuIGRvCisgICBvdXJjYXBzID0gZ3N0X3BhZF9nZXRfY2FwcyAoc3JjcGFkKQorICAgIyBzZWUgd2hhdCB0aGUgcGVlciBjYW4gZG8gZmlsdGVyZWQgYWdhaW5zdCBvdXIgY2FwcworICAgY2FuZGlkYXRlcyA9IGdzdF9wYWRfcGVlcl9nZXRfY2FwcyAoc3JjcGFkLCBvdXJjYXBzKQorCisgICBmb3JlYWNoIGNhbmRpZGF0ZSBpbiBjYW5kaWRhdGVzCisgICAgICMgbWFrZSBzdXJlIHRoZSBjYXBzIGlzIGZpeGVkCisgICAgIGZpeGVkY2FwcyA9IGdzdF9wYWRfZml4YXRlX2NhcHMgKHNyY3BhZCwgY2FuZGlkYXRlKQorCisgICAgICMgc2VlIGlmIHRoZSBwZWVyIGFjY2VwdHMgaXQKKyAgICAgaWYgZ3N0X3BhZF9wZWVyX2FjY2VwdF9jYXBzIChzcmNwYWQsIGZpeGVkY2FwcykKKyAgICAgICAjIHN0b3JlIHRoZSBjYXBzIGFzIHRoZSBuZWdvdGlhdGVkIGNhcHMsIHRoaXMgd2lsbAorICAgICAgICMgY2FsbCB0aGUgc2V0Y2FwcyBmdW5jdGlvbiBvbiB0aGUgcGFkCisgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsIGdzdF9ldmVudF9uZXdfY2FwcyAoZml4ZWRjYXBzKSkKKyAgICAgICBicmVhaworICAgICBlbmRpZgorICAgZG9uZQorIGVuZGlmCisKKyAjbmVnb3RpYXRlIGFsbG9jYXRvci9idWZmZXJwb29sIHdpdGggdGhlIEFMTE9DQVRJT04gcXVlcnkKKworIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCBzaXplLCAwKTsKKyAjIGZpbGwgYnVmZmVyIGFuZCBwdXNoCisKKworVGhlIGdlbmVyYWwgZmxvdyBmb3IgYSBzaW5rIHBhZCBzdGFydGluZyBhIHJlbmVnb3RpYXRpb24uCisKKyAgICAgICAgICAgICBzcmMgICAgICAgICAgICAgIHNpbmsKKyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICB8ICBhY2NlcHRzPyAgICAgICB8CisgICAgICAgICAgICAgIHw8LS0tLS0tLS0tLS0tLS0tLXwgdHlwZSBCCisgICAgICAgICAgICAgIHwgICAgICB5ZXMgICAgICAgIHwKKyAgICAgICAgICAgICAgfC0gLSAtIC0gLSAtIC0gLSA+fC0uCisgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgfCBzdWdnZXN0IEIgY2FwcyBuZXh0CisgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHw8JworICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgIHwgICBwdXNoX2V2ZW50KCkgIHwKKyAgbWFyayAgICAgIC4tfDwtLS0tLS0tLS0tLS0tLS0tfCBzZW5kIFJFQ09ORklHVVJFIGV2ZW50CisgcmVuZWdvdGlhdGV8IHwgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICc+fCAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICB8ICAgZ2V0X2NhcHMoKSAgICB8CisgcmVuZWdvdGlhdGUgIHwtLS0tLS0tLS0tLS0tLS0tPnwgCisgICAgICAgICAgICAgIHwgIHN1Z2dlc3QgQiAgICAgIHwKKyAgICAgICAgICAgICAgfDwgLSAtIC0gLSAtIC0gLSAtfAorICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgIHwgIHNlbmRfZXZlbnQoKSAgIHwKKyBzZW5kIENBUFMgICAgfC0tLS0tLS0tLS0tLS0tLS0+fCBSZWNlaXZlIHR5cGUgQiwgcmVjb25maWd1cmUgdG8KKyBldmVudCBCICAgICAgfCAgICAgICAgICAgICAgICAgfCBwcm9jZXNzIHR5cGUgQi4KKyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICB8ICBwdXNoICAgICAgICAgICB8CisgcHVzaCBidWZmZXIgIHwtLS0tLS0tLS0tLS0tLS0tPnwgUHJvY2VzcyBidWZmZXIgb2YgdHlwZSBCCisgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwKKworCitVc2UgY2FzZToKKworCit2aWRlb3Rlc3RzcmMgISB4dmltYWdlc2luaworCisgIDEpIFdobyBkZWNpZGVzIHdoYXQgZm9ybWF0IHRvIHVzZT8KKyAgIC0gc3JjIHBhZCBhbHdheXMgZGVjaWRlcywgYnkgY29udmVudGlvbi4gc2lua3BhZCBjYW4gc3VnZ2VzdCBhIGZvcm1hdAorICAgICBieSBwdXR0aW5nIGl0IGhpZ2ggaW4gdGhlIGdldGNhcHMgZnVuY3Rpb24gR3N0Q2Fwcy4gCisgICAtIHNpbmNlIHRoZSBzcmMgZGVjaWRlcywgaXQgY2FuIGFsd2F5cyBjaG9vc2Ugc29tZXRoaW5nIHRoYXQgaXQgY2FuIGRvLAorICAgICBzbyB0aGlzIHN0ZXAgY2FuIG9ubHkgZmFpbCBpZiB0aGUgc2lua3BhZCBzdGF0ZWQgaXQgY291bGQgYWNjZXB0CisgICAgIHNvbWV0aGluZyB3aGlsZSBsYXRlciBvbiBpdCBjb3VsZG4ndC4KKworICAyKSBXaGVuIGRvZXMgbmVnb3RpYXRpb24gaGFwcGVuPworICAgLSBiZWZvcmUgc3JjcGFkIGRvZXMgYSBwdXNoLCBpdCBmaWd1cmVzIG91dCBhIHR5cGUgYXMgc3RhdGVkIGluIDEpLCB0aGVuIAorICAgICBpdCBwdXNoZXMgYSBjYXBzIGV2ZW50IHdpdGggdGhlIHR5cGUuIFRoZSBzaW5rIGNoZWNrcyB0aGUgbWVkaWEgdHlwZSBhbmQKKyAgICAgY29uZmlndXJlcyBpdHNlbGYgZm9yIHRoaXMgdHlwZS4KKyAgIC0gdGhlIHNvdXJjZSB0aGVuIHVzdWFsbHkgZG9lcyBhbiBBTExPQ0FUSU9OIHF1ZXJ5IHRvIG5lZ290aWF0ZSBhIGJ1ZmZlcnBvb2wKKyAgICAgd2l0aCB0aGUgc2luay4gSXQgdGhlbiBhbGxvY2F0ZXMgYSBidWZmZXIgZnJvbSB0aGUgcG9vbCBhbmQgcHVzaGVzIGl0IHRvCisgICAgIHRoZSBzaW5rLiBzaW5jZSB0aGUgc2luayBhY2NlcHRlZCB0aGUgY2FwcywgaXQgY2FuIGNyZWF0ZSBhIHBvb2wgZm9yIHRoZQorICAgICBmb3JtYXQuCisgICAtIHNpbmNlIHRoZSBzaW5rIHN0YXRlZCBpbiAxKSBpdCBjb3VsZCBhY2NlcHQgdGhlIHR5cGUsIGl0IHdpbGwgYmUgYWJsZSB0bworICAgICBoYW5kbGUgaXQuCisgICAgIAorICAzKSBIb3cgY2FuIHNpbmsgcmVxdWVzdCBhbm90aGVyIGZvcm1hdD8KKyAgIC0gc2luayBhc2tzIGlmIG5ldyBmb3JtYXQgaXMgcG9zc2libGUgZm9yIHRoZSBzb3VyY2UuCisgICAtIHNpbmsgcHVzaGVzIFJFQ09ORklHVVJFIGV2ZW50IHVwc3RyZWFtCisgICAtIHNyYyByZWNlaXZlcyB0aGUgUkVDT05GSUdVUkUgZXZlbnQgYW5kIG1hcmtzIHJlbmVnb3RpYXRpb24KKyAgIC0gT24gdGhlIG5leHQgYnVmZmVyIHB1c2gsIHRoZSBzb3VyY2UgcmVuZWdvdGlhdGVzIHRoZSBjYXBzIGFuZCB0aGUKKyAgICAgYnVmZmVycG9vbC4gVGhlIHNpbmsgd2lsbCBwdXQgdGhlIG5ldyBuZXcgcHJlZmVyZWQgZm9ybWF0IGhpZ2ggaW4gdGhlIGxpc3QKKyAgICAgb2YgY2FwcyBpdCByZXR1cm5zIGZyb20gaXRzIGdldGNhcHMgZnVuY3Rpb24uCisKK3ZpZGVvdGVzdHNyYyAhIHF1ZXVlICEgeHZpbWFnZXNpbmsKKworICAtIHF1ZXVlIHByb3hpZXMgYWxsIGFjY2VwdCBhbmQgZ2V0Y2FwcyB0byB0aGUgb3RoZXIgcGVlciBwYWQuCisgIC0gcXVldWUgcHJveGllcyB0aGUgYnVmZmVycG9vbAorICAtIHF1ZXVlIHByb3hpZXMgdGhlIFJFQ09ORklHVVJFIGV2ZW50CisgIC0gcXVldWUgc3RvcmVzIENBUFMgZXZlbnQgaW4gdGhlIHF1ZXVlLiBUaGlzIG1lYW5zIHRoYXQgdGhlIHF1ZXVlIGNhbiBjb250YWluCisgICAgYnVmZmVycyB3aXRoIGRpZmZlcmVudCB0eXBlcy4KKworICAgCitQdWxsLW1vZGUgbmVnb3RpYXRpb24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitSYXRpb25hbGUKK15eXl5eXl5eXgorCitBIHBpcGVsaW5lIGluIHB1bGwgbW9kZSBoYXMgZGlmZmVyZW50IG5lZ290aWF0aW9uIG5lZWRzIHRoYW4gb25lCithY3RpdmF0ZWQgaW4gcHVzaCBtb2RlLiBQdXNoIG1vZGUgaXMgb3B0aW1pemVkIGZvciB0d28gdXNlIGNhc2VzOgorCisgKiBQbGF5YmFjayBvZiBtZWRpYSBmaWxlcywgaW4gd2hpY2ggdGhlIGRlbXV4ZXJzIGFuZCB0aGUgZGVjb2RlcnMgYXJlCisgICB0aGUgcG9pbnRzIGZyb20gd2hpY2ggZm9ybWF0IGluZm9ybWF0aW9uIHNob3VsZCBkaXNzZW1pbmF0ZSB0byB0aGUKKyAgIHJlc3Qgb2YgdGhlIHBpcGVsaW5lOyBhbmQKKworICogUmVjb3JkaW5nIGZyb20gbGl2ZSBzb3VyY2VzLCBpbiB3aGljaCB1c2VycyBhcmUgYWNjdXN0b21lZCB0byBwdXR0aW5nCisgICBhIGNhcHNmaWx0ZXIgZGlyZWN0bHkgYWZ0ZXIgdGhlIHNvdXJjZSBlbGVtZW50OyB0aHVzIHRoZSBjYXBzCisgICBpbmZvcm1hdGlvbiBmbG93IHByb2NlZWRzIGZyb20gdGhlIHVzZXIsIHRocm91Z2ggdGhlIHBvdGVudGlhbCBjYXBzCisgICBvZiB0aGUgc291cmNlLCB0byB0aGUgc2lua3Mgb2YgdGhlIHBpcGVsaW5lLgorCitJbiBjb250cmFzdCwgcHVsbCBtb2RlIGhhcyBvdGhlciB0eXBpY2FsIHVzZSBjYXNlczoKKworICogUGxheWJhY2sgZnJvbSBhIGxvc3N5IHNvdXJjZSwgc3VjaCBhcyBSVFAsIGluIHdoaWNoIG1vcmUga25vd2xlZGdlCisgICBhYm91dCB0aGUgbGF0ZW5jeSBvZiB0aGUgcGlwZWxpbmUgY2FuIGluY3JlYXNlIHF1YWxpdHk7IG9yCisKKyAqIEF1ZGlvIHN5bnRoZXNpcywgaW4gd2hpY2ggYXVkaW8gQVBJcyBhcmUgdHVuZWQgdG8gcHJvZHVjaW5nIG9ubHkgdGhlCisgICBuZWNlc3NhcnkgbnVtYmVyIG9mIHNhbXBsZXMsIHR5cGljYWxseSBkcml2ZW4gYnkgYSBoYXJkd2FyZSBpbnRlcnJ1cHQKKyAgIHRvIGZpbGwgYSBETUEgYnVmZmVyIG9yIGEgSmFja1swXSBwb3J0IGJ1ZmZlci4KKworICogTG93LWxhdGVuY3kgZWZmZWN0cyBwcm9jZXNzaW5nLCB3aGVyZWJ5IGZpbHRlcnMgc2hvdWxkIGJlIGFwcGxpZWQgYXMKKyAgIGRhdGEgaXMgdHJhbnNmZXJyZWQgZnJvbSBhIHJpbmcgYnVmZmVyIHRvIGEgc2luayBpbnN0ZWFkIG9mCisgICBiZWZvcmVoYW5kLiBGb3IgZXhhbXBsZSwgaW5zdGVhZCBvZiB1c2luZyB0aGUgaW50ZXJuYWwgYWxzYXNpbmsKKyAgIHJpbmdidWZmZXIgdGhyZWFkIGluIHB1c2gtbW9kZSB3YXZzcmMgISB2b2x1bWUgISBhbHNhc2luaywgcGxhY2luZworICAgdGhlIHZvbHVtZSBpbnNpZGUgdGhlIHNvdW5kIGNhcmQgd3JpdGVyIHRocmVhZCB2aWEgd2F2c3JjICEKKyAgIGF1ZGlvcmluZ2J1ZmZlciAhIHZvbHVtZSAhIGFsc2FzaW5rLgorCitbMF0gaHR0cDovL2phY2tpdC5zZi5uZXQKKworVGhlIHByb2JsZW0gd2l0aCBwdWxsIG1vZGUgaXMgdGhhdCB0aGUgc2luayBoYXMgdG8ga25vdyB0aGUgZm9ybWF0IGluCitvcmRlciB0byBrbm93IGhvdyBtYW55IGJ5dGVzIHRvIHB1bGwgdmlhIGdzdF9wYWRfcHVsbF9yYW5nZSgpLiBUaGlzCittZWFucyB0aGF0IGJlZm9yZSBwdWxsaW5nLCB0aGUgc2luayBtdXN0IGluaXRpYXRlIG5lZ290YXRpb24gdG8gZGVjaWRlCitvbiBhIGZvcm1hdC4KKworUmVjYWxsaW5nIHRoZSBwcmluY2lwbGVzIG9mIGNhcHNuZWdvLCB3aGVyZWJ5IGluZm9ybWF0aW9uIG11c3QgZmxvdyBmcm9tCit0aG9zZSB0aGF0IGhhdmUgaXQgdG8gdGhvc2UgdGhhdCBkbyBub3QsIHdlIHNlZSB0aGF0IHRoZSB0d28gbmFtZWQgdXNlCitjYXNlcyBoYXZlIGRpZmZlcmVudCBuZWdvdGlhdGlvbiByZXF1aXJlbWVudHM6CisKKyAqIFJUUCBhbmQgbG93LWxhdGVuY3kgcGxheWJhY2sgYXJlIGJvdGggbGlrZSB0aGUgbm9ybWFsIHBsYXliYWNrIGNhc2UsCisgICBpbiB3aGljaCBpbmZvcm1hdGlvbiBmbG93cyBkb3duc3RyZWFtLgorCisgKiBJbiBhdWRpbyBzeW50aGVzaXMsIHRoZSBwYXJ0IG9mIHRoZSBwaXBlbGluZSB0aGF0IGhhcyB0aGUgbW9zdAorICAgaW5mb3JtYXRpb24gaXMgdGhlIHNpbmssIGNvbnN0cmFpbmVkIGJ5IHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGdyYXBoCisgICB0aGF0IGZlZWRzIGl0LiBIb3dldmVyIHRoZSBjYXBzIGFyZSBub3QgY29tcGxldGVseSBzcGVjaWZpZWQ7IGF0IHNvbWUKKyAgIHBvaW50IHRoZSB1c2VyIGhhcyB0byBpbnRlcnZlbmUgdG8gY2hvb3NlIHRoZSBzYW1wbGUgcmF0ZSwgYXQgbGVhc3QuCisgICBUaGlzIGNhbiBiZSBkb25lIGV4dGVybmFsbHkgdG8gZ3N0cmVhbWVyLCBhcyBpbiB0aGUgamFjayBlbGVtZW50cywgb3IKKyAgIGludGVybmFsbHkgdmlhIGEgY2Fwc2ZpbHRlciwgYXMgaXMgY3VzdG9tYXJ5IHdpdGggbGl2ZSBzb3VyY2VzLgorCitHaXZlbiB0aGF0IHNpbmtzIHBvdGVudGlhbGx5IG5lZWQgdGhlIGlucHV0IG9mIHNvdXJjZXMsIGFzIGluIHRoZSBSVFAKK2Nhc2UgYW5kIGF0IGxlYXN0IGFzIGEgZmlsdGVyIGluIHRoZSBzeW50aGVzaXMgY2FzZSwgdGhlcmUgbXVzdCBiZSBhCituZWdvdGlhdGlvbiBwaGFzZSBiZWZvcmUgdGhlIHB1bGwgdGhyZWFkIGlzIGFjdGl2YXRlZC4gQWxzbywgZ2l2ZW4gdGhlCitsb3cgbGF0ZW5jeSBvZmZlcmVkIGJ5IHB1bGwgbW9kZSwgd2Ugd2FudCB0byBhdm9pZCBjYXBzbmVnbyBmcm9tIHdpdGhpbgordGhlIHB1bGxpbmcgdGhyZWFkLCBpbiBjYXNlIGl0IGNhdXNlcyB1cyB0byBtaXNzIG91ciBzY2hlZHVsaW5nCitkZWFkbGluZXMuCisKK1RoZSBwdWxsIHRocmVhZCBpcyB1c3VhbGx5IHN0YXJ0ZWQgaW4gdGhlIFBBVVNFRC0+UExBWUlORyBzdGF0ZSBjaGFuZ2UuIFdlIG11c3QKK2JlIGFibGUgdG8gY29tcGxldGUgdGhlIG5lZ290aWF0aW9uIGJlZm9yZSB0aGlzIHN0YXRlIGNoYW5nZSBoYXBwZW5zLgorCitUaGUgdGltZSB0byBkbyBjYXBzbmVnbywgdGhlbiwgaXMgYWZ0ZXIgdGhlIFNDSEVEVUxJTkcgcXVlcnkgaGFzIHN1Y2NlZWRlZCwKK2J1dCBiZWZvcmUgdGhlIHNpbmsgaGFzIHNwYXduZWQgdGhlIHB1bGxpbmcgdGhyZWFkLgorCisKK01lY2hhbmlzbQorXl5eXl5eXl5eCisKK1RoZSBzaW5rIGRldGVybWluZXMgdGhhdCB0aGUgdXBzdHJlYW0gZWxlbWVudHMgc3VwcG9ydCBwdWxsIGJhc2VkIHNjaGVkdWxpbmcgYnkKK2RvaW5nIGEgU0NIRURVTElORyBxdWVyeS4KKworVGhlIHNpbmsgaW5pdGlhdGVzIHRoZSBuZWdvdGlhdGlvbiBwcm9jZXNzIGJ5IGludGVyc2VjdGluZyB0aGUgcmVzdWx0cworb2YgZ3N0X3BhZF9nZXRfY2FwcygpIG9uIGl0cyBzaW5rIHBhZCBhbmQgaXRzIHBlZXIgc3JjIHBhZC4gVGhpcyBpcyB0aGUKK29wZXJhdGlvbiBwZXJmb3JtZWQgYnkgZ3N0X3BhZF9nZXRfYWxsb3dlZF9jYXBzKCkuIEluIHRoZSBzaW1wbGUKK3Bhc3N0aHJvdWdoIGNhc2UsIHRoZSBwZWVyIHBhZCdzIGdldGNhcHMoKSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHRoZQoraW50ZXJzZWN0aW9uIG9mIGNhbGxpbmcgZ2V0X2FsbG93ZWRfY2FwcygpIG9uIGFsbCBvZiBpdHMgc2luayBwYWRzLiBJbgordGhpcyB3YXkgdGhlIHNpbmsgZWxlbWVudCBrbm93cyB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBlbnRpcmUgcGlwZWxpbmUuCisKK1RoZSBzaW5rIGVsZW1lbnQgdGhlbiBmaXhhdGVzIHRoZSByZXN1bHRpbmcgY2FwcywgaWYgbmVjZXNzYXJ5LAorcmVzdWx0aW5nIGluIHRoZSBmbG93IGNhcHMuICBGcm9tIG5vdyBvbiwgdGhlIGdldGNhcHMgZnVuY3Rpb24KK29mIHRoZSBzaW5rcGFkIHdpbGwgb25seSByZXR1cm4gdGhlc2UgZml4ZWQgY2FwcyBtZWFuaW5nIHRoYXQgdXBzdHJlYW0gZWxlbWVudHMKK3dpbGwgb25seSBiZSBhYmxlIHRvIHByb2R1Y2UgdGhpcyBmb3JtYXQuCisKK0lmIHRoZSBzaW5rIGVsZW1lbnQgY291bGQgbm90IHNldCBjYXBzIG9uIGl0cyBzaW5rIHBhZCwgaXQgc2hvdWxkIHBvc3QKK2FuIGVycm9yIG1lc3NhZ2Ugb24gdGhlIGJ1cyBpbmRpY2F0aW5nIHRoYXQgbmVnb3RpYXRpb24gd2FzIG5vdAorcG9zc2libGUuCisKK1doZW4gbmVnb3RpYXRpb24gc3VjY2VlZGVkLCB0aGUgc2lua3BhZCBhbmQgYWxsIHVwc3RyZWFtIGludGVybmFsbHkgbGlua2VkIHBhZHMKK2FyZSBhY3RpdmF0ZWQgaW4gcHVsbCBtb2RlLiBUeXBpY2FsbHksIHRoaXMgb3BlcmF0aW9uIHdpbGwgdHJpZ2dlciBuZWdvdGlhdGlvbgorb24gdGhlIGRvd25zdHJlYW0gZWxlbWVudHMsIHdoaWNoIHdpbGwgbm93IGJlIGZvcmNlZCB0byBuZWdvdGlhdGlvbiB0byB0aGUKK2ZpbmFsIGZpeGVkIGRlc2lyZWQgY2FwcyBvZiB0aGUgc2lua3BhZC4KKworQWZ0ZXIgdGhlc2Ugc3RlcHMsIHRoZSBzaW5rIGVsZW1lbnQgcmV0dXJucyBBU1lOQyBmcm9tIHRoZSBzdGF0ZSBjaGFuZ2UKK2Z1bmN0aW9uLiBUaGUgc3RhdGUgd2lsbCBjb21taXQgdG8gUEFVU0VEIHdoZW4gdGhlIGZpcnN0IGJ1ZmZlciBpcyByZWNlaXZlZCBpbgordGhlIHNpbmsuIFRoaXMgaXMgbmVlZGVkIHRvIHByb3ZpZGUgYSBjb25zaXN0ZW50IEFQSSB0byB0aGUgYXBwbGljYXRpb25zIHRoYXQKK2V4cGVjdCBBU1lOQyByZXR1cm4gdmFsdWVzIGZyb20gc2lua3MgYnV0IGl0IGFsc28gYWxsb3dzIHVzIHRvIHBlcmZvcm0gdGhlCityZW1haW5kZXIgb2YgdGhlIG5lZ290aWF0aW9uIG91dHNpZGUgb2YgdGhlIGNvbnRleHQgb2YgdGhlIHB1bGxpbmcgdGhyZWFkLgpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1vdmVydmlldy50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LW92ZXJ2aWV3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTE0NzFhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9kZXNpZ24vcGFydC1vdmVydmlldy50eHQKQEAgLTAsMCArMSw1NDIgQEAKK092ZXJ2aWV3CistLS0tLS0tLQorCitUaGlzIHBhcnQgZ2l2ZXMgYW4gb3ZlcnZpZXcgb2YgdGhlIGRlc2lnbiBvZiBHU3RyZWFtZXIgd2l0aCByZWZlcmVuY2VzIHRvCit0aGUgbW9yZSBkZXRhaWxlZCBleHBsYW5hdGlvbnMgb2YgdGhlIGRpZmZlcmVudCB0b3BpY3MuCisKK1RoaXMgZG9jdW1lbnQgaXMgaW50ZW50ZWQgZm9yIHBlb3BsZSB0aGF0IHdhbnQgdG8gaGF2ZSBhIGdsb2JhbCBvdmVydmlldyBvZgordGhlIGlubmVyIHdvcmtpbmdzIG9mIEdTdHJlYW1lci4KKworCitJbnRyb2R1Y3Rpb24KK35+fn5+fn5+fn5+fgorCitHU3RyZWFtZXIgaXMgYSBzZXQgb2YgbGlicmFyaWVzIGFuZCBwbHVnaW5zIHRoYXQgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IHZhcmlvdXMKK211bHRpbWVkaWEgYXBwbGljYXRpb25zIHJhbmdpbmcgZnJvbSBkZXNrdG9wIHBsYXllcnMsIGF1ZGlvL3ZpZGVvIHJlY29yZGVycywgCittdWx0aW1lZGlhIHNlcnZlcnMsIHRyYW5zY29kZXJzLCBldGMuIAorCitBcHBsaWNhdGlvbnMgYXJlIGJ1aWx0IGJ5IGNvbnN0cnVjdGluZyBhIHBpcGVsaW5lIGNvbXBvc2VkIG9mIGVsZW1lbnRzLiBBbiBlbGVtZW50CitpcyBhbiBvYmplY3QgdGhhdCBwZXJmb3JtcyBzb21lIGFjdGlvbiBvbiBhIG11bHRpbWVkaWEgc3RyZWFtIHN1Y2ggYXM6CisKKy0gcmVhZCBhIGZpbGUKKy0gZGVjb2RlIG9yIGVuY29kZSBiZXR3ZWVuIGZvcm1hdHMKKy0gY2FwdHVyZSBmcm9tIGEgaGFyZHdhcmUgZGV2aWNlCistIHJlbmRlciB0byBhIGhhcmR3YXJlIGRldmljZQorLSBtaXggb3IgbXVsdGlwbGV4IG11bHRpcGxlIHN0cmVhbXMKKworRWxlbWVudHMgaGF2ZSBpbnB1dCBhbmQgb3V0cHV0IHBhZHMgY2FsbGVkIHNpbmsgYW5kIHNvdXJjZSBwYWRzIGluIEdTdHJlYW1lci4gQW4KK2FwcGxpY2F0aW9uIGxpbmtzIGVsZW1lbnRzIHRvZ2V0aGVyIG9uIHBhZHMgdG8gY29uc3RydWN0IGEgcGlwZWxpbmUuIEJlbG93IGlzCithbiBleGFtcGxlIG9mIGFuIG9nZy92b3JiaXMgcGxheWJhY2sgcGlwZWxpbmUuCisKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgICAgLS0tLS0tLS0tLT4gZG93bnN0cmVhbSAtLS0tLS0tLS0tLS0tLS0tLS0tPiAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgcGlwZWxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgKy0tLS0tLS0tLSsgICArLS0tLS0tLS0tLSsgICArLS0tLS0tLS0tLS0rICAgKy0tLS0tLS0tLS0rIHwKKyAgIHwgfCBmaWxlc3JjIHwgICB8IG9nZ2RlbXV4IHwgICB8IHZvcmJpc2RlYyB8ICAgfCBhbHNhc2luayB8IHwKKyAgIHwgfCAgICAgICAgc3JjLXNpbmsgICAgICAgc3JjLXNpbmsgICAgICAgIHNyYy1zaW5rICAgICAgICB8IHwKKyAgIHwgKy0tLS0tLS0tLSsgICArLS0tLS0tLS0tLSsgICArLS0tLS0tLS0tLS0rICAgKy0tLS0tLS0tLS0rIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgPC0tLS0tLS0tLTwgdXBzdHJlYW0gPC0tLS0tLS0tLS0tLS0tLS0tLS08ICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworVGhlIGZpbGVzcmMgZWxlbWVudCByZWFkcyBkYXRhIGZyb20gYSBmaWxlIG9uIGRpc2suIFRoZSBvZ2dkZW11eCBlbGVtZW50IHBhcnNlcwordGhlIGRhdGEgYW5kIHNlbmRzIHRoZSBjb21wcmVzc2VkIGF1ZGlvIGRhdGEgdG8gdGhlIHZvcmJpc2RlYyBlbGVtZW50LiBUaGUKK3ZvcmJpc2RlYyBlbGVtZW50IGRlY29kZXMgdGhlIGNvbXByZXNzZWQgZGF0YSBhbmQgc2VuZHMgaXQgdG8gdGhlIGFsc2FzaW5rCitlbGVtZW50LiBUaGUgYWxzYXNpbmsgZWxlbWVudCBzZW5kcyB0aGUgc2FtcGxlcyB0byB0aGUgYXVkaW8gY2FyZCBmb3IgcGxheWJhY2suCisKK0Rvd25zdHJlYW0gYW5kIHVwc3RyZWFtIGFyZSB0aGUgdGVybXMgdXNlZCB0byBkZXNjcmliZSB0aGUgZGlyZWN0aW9uIGluIHRoZQorUGlwZWxpbmUuIEZyb20gc291cmNlIHRvIHNpbmsgaXMgY2FsbGVkICJkb3duc3RyZWFtIiBhbmQgInVwc3RyZWFtIiBpcyAKK2Zyb20gc2luayB0byBzb3VyY2UuIERhdGFmbG93IGFsd2F5cyBoYXBwZW5zIGRvd25zdHJlYW0uCisKK1RoZSB0YXNrIG9mIHRoZSBhcHBsaWNhdGlvbiBpcyB0byBjb25zdHJ1Y3QgYSBwaXBlbGluZSBhcyBhYm92ZSB1c2luZyBleGlzdGluZworZWxlbWVudHMuIFRoaXMgaXMgZnVydGhlciBleHBsYWluZWQgaW4gdGhlIHBpcGVsaW5lIGJ1aWxkaW5nIHRvcGljLgorCitUaGUgYXBwbGljYXRpb24gZG9lcyBub3QgaGF2ZSB0byBtYW5hZ2UgYW55IG9mIHRoZSBjb21wbGV4aXRpZXMgb2YgdGhlCithY3R1YWwgZGF0YWZsb3cvZGVjb2RpbmcvY29udmVyc2lvbnMvc3luY2hyb25pc2F0aW9uIGV0Yy4gYnV0IG9ubHkgY2FsbHMgaGlnaAorbGV2ZWwgZnVuY3Rpb25zIG9uIHRoZSBwaXBlbGluZSBvYmplY3Qgc3VjaCBhcyBQTEFZL1BBVVNFL1NUT1AuCisKK1RoZSBhcHBsaWNhdGlvbiBhbHNvIHJlY2VpdmVzIG1lc3NhZ2VzIGFuZCBub3RpZmljYXRpb25zIGZyb20gdGhlIHBpcGVsaW5lIHN1Y2gKK2FzIG1ldGFkYXRhLCB3YXJuaW5nLCBlcnJvciBhbmQgRU9TIG1lc3NhZ2VzLgorCitJZiB0aGUgYXBwbGljYXRpb24gbmVlZHMgbW9yZSBjb250cm9sIG92ZXIgdGhlIGdyYXBoIGl0IGlzIHBvc3NpYmxlIHRvIGRpcmVjdGx5CithY2Nlc3MgdGhlIGVsZW1lbnRzIGFuZCBwYWRzIGluIHRoZSBwaXBlbGluZS4KKworCitEZXNpZ24gb3ZlcnZpZXcKK35+fn5+fn5+fn5+fn5+fgorCitHU3RyZWFtZXIgZGVzaWduIGdvYWxzIGluY2x1ZGU6CisKKy0gUHJvY2VzcyBsYXJnZSBhbW91bnRzIG9mIGRhdGEgcXVpY2tseQorLSBBbGxvdyBmdWxseSBtdWx0aXRocmVhZGVkIHByb2Nlc3NpbmcKKy0gQWJpbGl0eSB0byBkZWFsIHdpdGggbXVsdGlwbGUgZm9ybWF0cworLSBTeW5jaHJvbml6ZSBkaWZmZXJlbnQgZGF0YWZsb3dzIAorLSBBYmlsaXR5IHRvIGRlYWwgd2l0aCBtdWx0aXBsZSBkZXZpY2VzCisKK1RoZSBjYXBhYmlsaXRpZXMgcHJlc2VudGVkIHRvIHRoZSBhcHBsaWNhdGlvbiBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2YgZWxlbWVudHMKK2luc3RhbGxlZCBvbiB0aGUgc3lzdGVtIGFuZCB0aGVpciBmdW5jdGlvbmFsaXR5LgorCitUaGUgR1N0cmVhbWVyIGNvcmUgaXMgZGVzaWduZWQgdG8gYmUgbWVkaWEgYWdub3N0aWMgYnV0IHByb3ZpZGVzIG1hbnkgZmVhdHVyZXMKK3RvIGVsZW1lbnRzIHRvIGRlc2NyaWJlIG1lZGlhIGZvcm1hdHMuCisKKworRWxlbWVudHMKK35+fn5+fn5+CisKK1RoZSBzbWFsbGVzdCBidWlsZGluZyBibG9ja3MgaW4gYSBwaXBlbGluZSBhcmUgZWxlbWVudHMuIEFuIGVsZW1lbnQgcHJvdmlkZXMgYQorbnVtYmVyIG9mIHBhZHMgd2hpY2ggY2FuIGJlIHNvdXJjZSBvciBzaW5rcGFkcy4gU291cmNlcGFkcyBwcm92aWRlIGRhdGEgYW5kCitzaW5rcGFkcyBjb25zdW1lIGRhdGEuIEJlbG93IGlzIGFuIGV4YW1wbGUgb2YgYW4gb2dnIGRlbXV4ZXIgZWxlbWVudCB0aGF0IGhhcworb25lIHBhZCB0aGF0IHRha2VzIChzaW5rcykgZGF0YSBhbmQgdHdvIHNvdXJjZSBwYWRzIHRoYXQgcHJvZHVjZSBkYXRhLgorCisgICAgKy0tLS0tLS0tLS0tKworICAgIHwgb2dnZGVtdXggIHwKKyAgICB8ICAgICAgICAgIHNyYzAKKyAgIHNpbmsgICAgICAgIHNyYzEKKyAgICArLS0tLS0tLS0tLS0rCisKK0FuIGVsZW1lbnQgY2FuIGJlIGluIGZvdXIgZGlmZmVyZW50IHN0YXRlczogTlVMTCwgUkVBRFksIFBBVVNFRCwgUExBWUlORy4gSW4gdGhlCitOVUxMIGFuZCBSRUFEWSBzdGF0ZSwgdGhlIGVsZW1lbnQgaXMgbm90IHByb2Nlc3NpbmcgYW55IGRhdGEuIEluIHRoZSBQTEFZSU5HIHN0YXRlCitpdCBpcyBwcm9jZXNzaW5nIGRhdGEuIFRoZSBpbnRlcm1lZGlhdGUgUEFVU0VEIHN0YXRlIGlzIHVzZWQgdG8gcHJlcm9sbCBkYXRhIGluCit0aGUgcGlwZWxpbmUuIEEgc3RhdGUgY2hhbmdlIGNhbiBiZSBwZXJmb3JtZWQgd2l0aCBnc3RfZWxlbWVudF9zZXRfc3RhdGUoKS4KKworQW4gZWxlbWVudCBhbHdheXMgZ29lcyB0aHJvdWdoIGFsbCB0aGUgaW50ZXJtZWRpYXRlIHN0YXRlIGNoYW5nZXMuIFRoaXMgbWVhbnMgdGhhdAord2hlbiBlbiBlbGVtZW50IGlzIGluIHRoZSBSRUFEWSBzdGF0ZSBhbmQgaXMgcHV0IHRvIFBMQVlJTkcsIGl0IHdpbGwgZmlyc3QgZ28KK3Rocm91Z2ggdGhlIGludGVybWVkaWF0ZSBQQVVTRUQgc3RhdGUuCisKK0FuIGVsZW1lbnQgc3RhdGUgY2hhbmdlIHRvIFBBVVNFRCB3aWxsIGFjdGl2YXRlIHRoZSBwYWRzIG9mIHRoZSBlbGVtZW50LiBGaXJzdCB0aGUKK3NvdXJjZSBwYWRzIGFyZSBhY3RpdmF0ZWQsIHRoZW4gdGhlIHNpbmtwYWRzLiBXaGVuIHRoZSBwYWRzIGFyZSBhY3RpdmF0ZWQsIHRoZQorcGFkIGFjdGl2YXRlIGZ1bmN0aW9uIGlzIGNhbGxlZC4gU29tZSBwYWRzIHdpbGwgc3RhcnQgYSB0aHJlYWQgKEdzdFRhc2spIG9yIHNvbWUgCitvdGhlciBtZWNoYW5pc20gdG8gc3RhcnQgcHJvZHVjaW5nIG9yIGNvbnN1bWluZyBkYXRhLgorCitUaGUgUEFVU0VEIHN0YXRlIGlzIHNwZWNpYWwgYXMgaXQgaXMgdXNlZCB0byBwcmVyb2xsIGRhdGEgaW4gdGhlIHBpcGVsaW5lLiBUaGUgcHVycG9zZQoraXMgdG8gZmlsbCBhbGwgY29ubmVjdGVkIGVsZW1lbnRzIGluIHRoZSBwaXBlbGluZSB3aXRoIGRhdGEgc28gdGhhdCB0aGUgc3Vic2VxdWVudAorUExBWUlORyBzdGF0ZSBjaGFuZ2UgaGFwcGVucyB2ZXJ5IHF1aWNrbHkuIFNvbWUgZWxlbWVudHMgd2lsbCB0aGVyZWZvcmUgbm90IGNvbXBsZXRlCit0aGUgc3RhdGUgY2hhbmdlIHRvIFBBVVNFRCBiZWZvcmUgdGhleSBoYXZlIHJlY2VpdmVkIGVub3VnaCBkYXRhLiBTaW5rIGVsZW1lbnRzIGFyZQorcmVxdWlyZWQgdG8gb25seSBjb21wbGV0ZSB0aGUgc3RhdGUgY2hhbmdlIHRvIFBBVVNFRCBhZnRlciByZWNlaXZpbmcgdGhlIGZpcnN0IGRhdGEuCisKK05vcm1hbGx5IHRoZSBzdGF0ZSBjaGFuZ2VzIG9mIGVsZW1lbnRzIGFyZSBjb29yZGluYXRlZCBieSB0aGUgcGlwZWxpbmUgYXMgZXhwbGFpbmVkCitpbiBbcGFydC1zdGF0ZXMudHh0XS4KKworRGlmZmVyZW50IGNhdGVnb3JpZXMgb2YgZWxlbWVudHMgZXhpc3Q6CisKKy0gc291cmNlIGVsZW1lbnRzLCB0aGVzZSBhcmUgZWxlbWVudHMgdGhhdCBkbyBub3QgY29uc3VtZSBkYXRhIGJ1dCBvbmx5IHByb3ZpZGUgZGF0YQorICAgIGZvciB0aGUgcGlwZWxpbmUuCistIHNpbmsgZWxlbWVudHMsIHRoZXNlIGFyZSBlbGVtZW50cyB0aGF0IGRvIG5vdCBwcm9kdWNlIGRhdGEgYnV0IHJlbmRlcnMgZGF0YSB0bworICAgIGFuIG91dHB1dCBkZXZpY2UuCistIHRyYW5zZm9ybSBlbGVtZW50cywgdGhlc2UgZWxlbWVudHMgdHJhbnNmb3JtIGFuIGlucHV0IHN0cmVhbSBpbiBhIGNlcnRhaW4gZm9ybWF0IAorICAgaW50byBhIHN0cmVhbSBvZiBhbm90aGVyIGZvcm1hdC4gRW5jb2Rlci9kZWNvZGVyL2NvbnZlcnRlcnMgYXJlIGV4YW1wbGVzLgorLSBkZW11eGVyIGVsZW1lbnRzLCB0aGVzZSBlbGVtZW50cyBwYXJzZSBhIHN0cmVhbSBhbmQgcHJvZHVjZSBzZXZlcmFsIG91dHB1dCBzdHJlYW1zLgorLSBtaXhlci9tdXhlciBlbGVtZW50cywgY29tYmluZSBzZXZlcmFsIGlucHV0IHN0cmVhbXMgaW50byBvbmUgb3V0cHV0IHN0cmVhbS4KKworT3RoZXIgY2F0ZWdvcmllcyBvZiBlbGVtZW50cyBjYW4gYmUgY29uc3RydWN0ZWQgKHNlZSBwYXJ0LWtsYXNzLnR4dCkuCisKKworQmlucworfn5+fgorCitBIGJpbiBpcyBhbiBlbGVtZW50IHN1YmNsYXNzIGFuZCBhY3RzIGFzIGEgY29udGFpbmVyIGZvciBvdGhlciBlbGVtZW50cyBzbyB0aGF0IG11bHRpcGxlIAorZWxlbWVudHMgY2FuIGJlIGNvbWJpbmVkIGludG8gb25lIGVsZW1lbnQuCisKK0EgYmluIGNvb3JkaW5hdGVzIGl0cyBjaGlsZHJlbidzIHN0YXRlIGNoYW5nZXMgYXMgZXhwbGFpbmVkIGxhdGVyLiBJdCBhbHNvIGRpc3RyaWJ1dGVzCitldmVudHMgYW5kIHZhcmlvdXMgb3RoZXIgZnVuY3Rpb25hbGl0eSB0byBlbGVtZW50cy4KKworQSBiaW4gY2FuIGhhdmUgaXRzIG93biBzb3VyY2UgYW5kIHNpbmtwYWRzIGJ5IGdob3N0cGFkZGluZyBvbmUgb3IgbW9yZSBvZiBpdHMgY2hpbGRyZW4ncworcGFkcyB0byBpdHNlbGYuCisKK0JlbG93IGlzIGEgcGljdHVyZSBvZiBhIGJpbiB3aXRoIHR3byBlbGVtZW50cy4gVGhlIHNpbmtwYWQgb2Ygb25lIGVsZW1lbnQgaXMgZ2hvc3RwYWRkZWQKK3RvIHRoZSBiaW4uCisKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAKKyAgICB8IGJpbiAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIHwgICAgKy0tLS0tLS0tKyAgICstLS0tLS0tKyB8CisgICAgfCAgICB8ICAgICAgICB8ICAgfCAgICAgICB8IHwKKyAgICB8ICAvc2luayAgICAgc3JjLXNpbmsgICAgIHwgfAorICAgc2luayAgKy0tLS0tLS0tKyAgICstLS0tLS0tKyB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworCitQaXBlbGluZQorfn5+fn5+fn4KKworQSBwaXBlbGluZSBpcyBhIHNwZWNpYWwgYmluIHN1YmNsYXNzIHRoYXQgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBmZWF0dXJlcyB0byBpdHMgCitjaGlsZHJlbjoKKworIC0gU2VsZWN0IGFuZCBtYW5hZ2UgYSBnbG9iYWwgY2xvY2sgZm9yIGFsbCBpdHMgY2hpbGRyZW4uCisgLSBNYW5hZ2UgcnVubmluZ190aW1lIGJhc2VkIG9uIHRoZSBzZWxlY3RlZCBjbG9jay4gUnVubmluZ190aW1lIGlzIHRoZSBlbGFwc2VkCisgICB0aW1lIHRoZSBwaXBlbGluZSBzcGVudCBpbiB0aGUgUExBWUlORyBzdGF0ZSBhbmQgaXMgdXNlZCBmb3IKKyAgIHN5bmNocm9uaXNhdGlvbi4KKyAtIE1hbmFnZSBsYXRlbmN5IGluIHRoZSBwaXBlbGluZS4KKyAtIFByb3ZpZGUgbWVhbnMgZm9yIGVsZW1lbnRzIHRvIGNvbXVuaWNhdGUgd2l0aCB0aGUgYXBwbGljYXRpb24gYnkgdGhlIEdzdEJ1cy4KKyAtIE1hbmFnZSB0aGUgZ2xvYmFsIHN0YXRlIG9mIHRoZSBlbGVtZW50cyBzdWNoIGFzIEVycm9ycyBhbmQgZW5kLW9mLXN0cmVhbS4KKworTm9ybWFsbHkgdGhlIGFwcGxpY2F0aW9uIGNyZWF0ZXMgb25lIHBpcGVsaW5lIHRoYXQgd2lsbCBtYW5hZ2UgYWxsIHRoZSBlbGVtZW50cworaW4gdGhlIGFwcGxpY2F0aW9uLgorCisKK0RhdGFmbG93IGFuZCBidWZmZXJzCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitHU3RyZWFtZXIgc3VwcG9ydHMgdHdvIHBvc3NpYmxlIHR5cGVzIG9mIGRhdGFmbG93LCB0aGUgcHVzaCBhbmQgcHVsbCBtb2RlbC4gSW4gdGhlCitwdXNoIG1vZGVsLCBhbiB1cHN0cmVhbSBlbGVtZW50IHNlbmRzIGRhdGEgdG8gYSBkb3duc3RyZWFtIGVsZW1lbnQgYnkgY2FsbGluZyBhCittZXRob2Qgb24gYSBzaW5rcGFkLiBJbiB0aGUgcHVsbCBtb2RlbCwgYSBkb3duc3RyZWFtIGVsZW1lbnQgcmVxdWVzdHMgZGF0YSBmcm9tCithbiB1cHN0cmVhbSBlbGVtZW50IGJ5IGNhbGxpbmcgYSBtZXRob2Qgb24gYSBzb3VyY2UgcGFkLgorCitUaGUgbW9zdCBjb21tb24gZGF0YWZsb3cgaXMgdGhlIHB1c2ggbW9kZWwuIFRoZSBwdWxsIG1vZGVsIGNhbiBiZSB1c2VkIGluIHNwZWNpZmljCitjaXJjdW1zdGFuY2VzIGJ5IGRlbXV4ZXIgZWxlbWVudHMuIFRoZSBwdWxsIG1vZGVsIGNhbiBhbHNvIGJlIHVzZWQgYnkgbG93IGxhdGVuY3kKK2F1ZGlvIGFwcGxpY2F0aW9ucy4KKworVGhlIGRhdGEgcGFzc2VkIGJldHdlZW4gcGFkcyBpcyBlbmNhcHN1bGF0ZWQgaW4gQnVmZmVycy4gVGhlIGJ1ZmZlciBjb250YWlucyBhCitwb2ludGVyIHRvIHRoZSBhY3R1YWwgZGF0YSBhbmQgYWxzbyBtZXRhZGF0YSBkZXNjcmliaW5nIHRoZSBkYXRhLiBUaGlzIG1ldGFkYXRhCitpbmNsdWRlczoKKyAKKyAgLSB0aW1lc3RhbXAgb2YgdGhlIGRhdGEsIHRoaXMgaXMgdGhlIHRpbWUgaW5zdGFuY2UgYXQgd2hpY2ggdGhlIGRhdGEgd2FzIGNhcHR1cmVkCisgICAgICBvciB0aGUgdGltZSBhdCB3aGljaCB0aGUgZGF0YSBzaG91bGQgYmUgcGxheWVkIGJhY2suCisgIC0gb2Zmc2V0IG9mIHRoZSBkYXRhOiBhIG1lZGlhIHNwZWNpZmljIG9mZnNldCwgdGhpcyBjb3VsZCBiZSBzYW1wbGVzIGZvciBhdWRpbyBvcgorICAgICAgZnJhbWVzIGZvciB2aWRlby4KKyAgLSB0aGUgZHVyYXRpb24gb2YgdGhlIGRhdGEgaW4gdGltZS4KKyAgLSBhZGRpdGlvbmFsIGZsYWdzIGRlc2NyaWJpbmcgc3BlY2lhbCBwcm9wZXJ0aWVzIG9mIHRoZSBkYXRhIHN1Y2ggYXMgCisgICAgZGlzY29udGludWl0aWVzIG9yIGRlbHRhIHVuaXRzLgorICAtIGFkZGl0aW9uYWwgYXJiaXRyYXJ5IG1ldGFkYXRhCisKK1doZW4gYW4gZWxlbWVudCB3aGlzaGVzIHRvIHNlbmQgYSBidWZmZXIgdG8gYW5vdGhlciBlbGVtZW50IGlzIGRvZXMgdGhpcyB1c2luZyBvbmUKK29mIHRoZSBwYWRzIHRoYXQgaXMgbGlua2VkIHRvIGEgcGFkIG9mIHRoZSBvdGhlciBlbGVtZW50LiBJbiB0aGUgcHVzaCBtb2RlbCwgYSAKK2J1ZmZlciBpcyBwdXNoZWQgdG8gdGhlIHBlZXIgcGFkIHdpdGggZ3N0X3BhZF9wdXNoKCkuIEluIHRoZSBwdWxsIG1vZGVsLCBhIGJ1ZmZlcgoraXMgcHVsbGVkIGZyb20gdGhlIHBlZXIgd2l0aCB0aGUgZ3N0X3BhZF9wdWxsX3JhbmdlKCkgZnVuY3Rpb24uCisKK0JlZm9yZSBhbiBlbGVtZW50IHB1c2hlcyBvdXQgYSBidWZmZXIsIGl0IHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGUgcGVlciBlbGVtZW50CitjYW4gdW5kZXJzdGFuZCB0aGUgYnVmZmVyIGNvbnRlbnRzLiAgSXQgZG9lcyB0aGlzIGJ5IHF1ZXJ5aW5nIHRoZSBwZWVyIGVsZW1lbnQKK2ZvciB0aGUgc3VwcG9ydGVkIGZvcm1hdHMgYW5kIGJ5IHNlbGVjdGluZyBhIHN1aXRhYmxlIGNvbW1vbiBmb3JtYXQuIFRoZSBzZWxlY3RlZAorZm9ybWF0IGlzIHRoZW4gZmlyc3Qgc2VudCB0byB0aGUgcGVlciBlbGVtZW50IHdpdGggYSBDQVBTIGV2ZW50IGJlZm9yZSBwdXNoaW5nCit0aGUgYnVmZmVyLgorCisKK1doZW4gYW4gZWxlbWVudCBwYWQgcmVjZWl2ZXMgYSBDQVBTIGV2ZW50LCBpdCBoYXMgdG8gY2hlY2sgaWYgaXQgdW5kZXJzdGFuZCB0aGUKK21lZGlhIHR5cGUuIFRoZSBlbGVtZW50IG11c3QgcmVmdXNlIGZvbGxvd2luZyBidWZmZXJzIGlmIHRoZSBtZWRpYSB0eXBlCitwcmVjZWVkaW5nIGl0IHdhcyBub3QgYWNjZXB0ZWQuCisKK0JvdGggZ3N0X3BhZF9wdXNoKCkgYW5kIGdzdF9wYWRfcHVsbF9yYW5nZSgpIGhhdmUgYSByZXR1cm4gdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyCit0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZC4gQW4gZXJyb3IgY29kZSBtZWFucyB0aGF0IG5vIG1vcmUgZGF0YSBzaG91bGQgYmUgc2VudAordG8gdGhhdCBwYWQuIEEgc291cmNlIGVsZW1lbnQgdGhhdCBpbml0aWF0ZXMgdGhlIGRhdGEgZmxvdyBpbiBhIHRocmVhZCB0eXBpY2FsbHkKK3BhdXNlcyB0aGUgcHJvZHVjaW5nIHRocmVhZCB3aGVuIHRoaXMgaGFwcGVucy4KKworQSBidWZmZXIgY2FuIGJlIGNyZWF0ZWQgd2l0aCBnc3RfYnVmZmVyX25ldygpIG9yIGJ5IHJlcXVlc3RpbmcgYSB1c2FibGUgYnVmZmVyCitmcm9tIGEgYnVmZmVyIHBvb2wgdXNpbmcgZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyKCkuIFVzaW5nIHRoZSBzZWNvbmQKK21ldGhvZCwgaXQgaXMgcG9zc2libGUgZm9yIHRoZSBwZWVyIGVsZW1lbnQgdG8gaW1wbGVtZW50IGEgY3VzdG9tIGJ1ZmZlcgorYWxsb2NhdGlvbiBhbGdvcml0aG0uCisKK1RoZSBwcm9jZXNzIG9mIHNlbGVjdGluZyBhIG1lZGlhIHR5cGUgaXMgY2FsbGVkIGNhcHMgbmVnb3RpYXRpb24uCisKKworQ2Fwcworfn5+fgorCitBIG1lZGlhIHR5cGUgKENhcHMpIGlzIGRlc2NyaWJlZCB1c2luZyBhIGdlbmVyaWMgbGlzdCBvZiBrZXkvdmFsdWUgcGFpcnMuIFRoZSBrZXkgaXMKK2Egc3RyaW5nIGFuZCB0aGUgdmFsdWUgY2FuIGJlIGEgc2luZ2xlL2xpc3QvcmFuZ2Ugb2YgaW50L2Zsb2F0L3N0cmluZy4gCisKK0NhcHMgdGhhdCBoYXZlIG5vIHJhbmdlcy9saXN0IG9yIG90aGVyIHZhcmlhYmxlIHBhcnRzIGFyZSBzYWlkIHRvIGJlIGZpeGVkIGFuZAorY2FuIGJlIHVzZWQgdG8gcHV0IG9uIGEgYnVmZmVyLgorCitDYXBzIHdpdGggdmFyaWFibGVzIGluIHRoZW0gYXJlIHVzZWQgdG8gZGVzY3JpYmUgcG9zc2libGUgbWVkaWEgdHlwZXMgdGhhdCBjYW4gYmUKK2hhbmRsZWQgYnkgYSBwYWQuCisKKworRGF0YWZsb3cgYW5kIGV2ZW50cworfn5+fn5+fn5+fn5+fn5+fn5+fgorCitQYXJhbGxlbCB0byB0aGUgZGF0YWZsb3cgaXMgYSBmbG93IG9mIGV2ZW50cy4gVW5saWtlIHRoZSBidWZmZXJzLCBldmVudHMgY2FuIHBhc3MKK2JvdGggdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0uIFNvbWUgZXZlbnRzIG9ubHkgdHJhdmVsIHVwc3RyZWFtIG90aGVycyBvbmx5IGRvd25zdHJlYW0uCisKK1RoZSBldmVudHMgYXJlIHVzZWQgdG8gZGVub3RlIHNwZWNpYWwgY29uZGl0aW9ucyBpbiB0aGUgZGF0YWZsb3cgc3VjaCBhcyBFT1Mgb3IgCit0byBpbmZvcm0gcGx1Z2lucyBvZiBzcGVjaWFsIGV2ZW50cyBzdWNoIGFzIGZsdXNoaW5nIG9yIHNlZWtpbmcuCisKK1NvbWUgZXZlbnRzIG11c3QgYmUgc2VyaWFsaXplZCB3aXRoIHRoZSBidWZmZXIgZmxvdywgb3RoZXJzIGRvbid0LiBTZXJpYWxpemVkIAorZXZlbnRzIGFyZSBpbnNlcnRlZCBiZXR3ZWVuIHRoZSBidWZmZXJzLiBOb24gc2VyaWFsaXplZCBldmVudHMganVtcCBpbiBmcm9udAorb2YgYW55IGJ1ZmZlcnMgY3VycmVudCBiZWluZyBwcm9jZXNzZWQuCisKK0FuIGV4YW1wbGUgb2YgYSBzZXJpYWxpemVkIGV2ZW50IGlzIGEgVEFHIGV2ZW50IHRoYXQgaXMgaW5zZXJ0ZWQgYmV0d2VlbiBidWZmZXJzCit0byBtYXJrIG1ldGFkYXRhIGZvciB0aG9zZSBidWZmZXJzLgorCitBbiBleGFtcGxlIG9mIGEgbm9uIHNlcmlhbGl6ZWQgZXZlbnQgaXMgdGhlIEZMVVNIIGV2ZW50LgorCisKK1BpcGVsaW5lIGNvbnN0cnVjdGlvbgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBhcHBsaWNhdGlvbiBzdGFydHMgYnkgY3JlYXRpbmcgYSBQaXBlbGluZSBlbGVtZW50IHVzaW5nIGdzdF9waXBlbGluZV9uZXcgKCkuCitFbGVtZW50cyBhcmUgYWRkZWQgdG8gYW5kIHJlbW92ZWQgZnJvbSB0aGUgcGlwZWxpbmUgd2l0aCBnc3RfYmluX2FkZCgpIGFuZAorZ3N0X2Jpbl9yZW1vdmUoKS4KKworQWZ0ZXIgYWRkaW5nIHRoZSBlbGVtZW50cywgdGhlIHBhZHMgb2YgYW4gZWxlbWVudCBjYW4gYmUgcmV0cmlldmVkIHdpdGgKK2dzdF9lbGVtZW50X2dldF9wYWQoKS4gUGFkcyBjYW4gdGhlbiBiZSBsaW5rZWQgdG9nZXRoZXIgd2l0aCBnc3RfcGFkX2xpbmsoKS4KKworU29tZSBlbGVtZW50cyBjcmVhdGUgbmV3IHBhZHMgd2hlbiBhY3R1YWwgZGF0YWZsb3cgaXMgaGFwcGVuaW5nIGluIHRoZSBwaXBlbGluZS4KK1dpdGggZ19zaWduYWxfY29ubmVjdCgpIG9uZSBjYW4gcmVjZWl2ZSBhIG5vdGlmaWNhdGlvbiB3aGVuIGFuIGVsZW1lbnQgaGFzIGNyZWF0ZWQKK2EgcGFkLiBUaGVzZSBuZXcgcGFkcyBjYW4gdGhlbiBiZSBsaW5rZWQgdG8gb3RoZXIgdW5saW5rZWQgcGFkcy4KKworU29tZSBlbGVtZW50cyBjYW5ub3QgYmUgbGlua2VkIHRvZ2V0aGVyIGJlY2F1c2UgdGhleSBvcGVyYXRlIG9uIGRpZmZlcmVudCAKK2luY29tcGF0aWJsZSBkYXRhIHR5cGVzLiBUaGUgcG9zc2libGUgZGF0YXR5cGVzIGEgcGFkIGNhbiBwcm92aWRlIG9yIGNvbnN1bWUgY2FuCitiZSByZXRyaWV2ZWQgd2l0aCBnc3RfcGFkX2dldF9jYXBzKCkuCisKK0JlbG93IGlzIGEgc2ltcGxlIG1wMyBwbGF5YmFjayBwaXBlbGluZSB0aGF0IHdlIGNvbnN0cnVjdGVkLiBXZSB3aWxsIHVzZSB0aGlzCitwaXBlbGluZSBpbiBmdXJ0aGVyIGV4YW1wbGVzLgorIAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IHBpcGVsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgKy0tLS0tLS0tLSsgICArLS0tLS0tLS0tLSsgICArLS0tLS0tLS0tLSsgfAorICAgfCB8IGZpbGVzcmMgfCAgIHwgbXAzZGVjICAgfCAgIHwgYWxzYXNpbmsgfCB8CisgICB8IHwgICAgICAgIHNyYy1zaW5rICAgICAgIHNyYy1zaW5rICAgICAgICB8IHwKKyAgIHwgKy0tLS0tLS0tLSsgICArLS0tLS0tLS0tLSsgICArLS0tLS0tLS0tLSsgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKworUGlwZWxpbmUgY2xvY2sKK35+fn5+fn5+fn5+fn5+CisKK09uZSBvZiB0aGUgaW1wb3J0YW50IGZ1bmN0aW9ucyBvZiB0aGUgcGlwZWxpbmUgaXMgdG8gc2VsZWN0IGEgZ2xvYmFsIGNsb2NrCitmb3IgYWxsIHRoZSBlbGVtZW50cyBpbiB0aGUgcGlwZWxpbmUuCisKK1RoZSBwdXJwb3NlIG9mIHRoZSBjbG9jayBpcyB0byBwcm92aWRlIGEgc3RyaWNseSBpbmNyZWFzaW5nIHZhbHVlIGF0IHRoZSByYXRlCitvZiBvbmUgR1NUX1NFQ09ORCBwZXIgc2Vjb25kLiBDbG9jayB2YWx1ZXMgYXJlIGV4cHJlc3NlZCBpbiBuYW5vc2Vjb25kcy4KK0VsZW1lbnRzIHVzZSB0aGUgY2xvY2sgdGltZSB0byBzeW5jaHJvbml6ZSB0aGUgcGxheWJhY2sgb2YgZGF0YS4KKworQmVmb3JlIHRoZSBwaXBlbGluZSBpcyBzZXQgdG8gUExBWUlORywgdGhlIHBpcGVsaW5lIGFza3MgZWFjaCBlbGVtZW50IGlmIHRoZXkgY2FuCitwcm92aWRlIGEgY2xvY2suIFRoZSBjbG9jayBpcyBzZWxlY3RlZCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgorCistIElmIHRoZSBhcHBsaWNhdGlvbiBzZWxlY3RlZCBhIGNsb2NrLCB1c2UgdGhhdCBvbmUuCistIElmIGEgc291cmNlIGVsZW1lbnQgcHJvdmlkZXMgYSBjbG9jaywgdXNlIHRoYXQgY2xvY2suCistIFNlbGVjdCBhIGNsb2NrIGZyb20gYW55IG90aGVyIGVsZW1lbnQgdGhhdCBwcm92aWRlcyBhIGNsb2NrLCBzdGFydCB3aXRoIHRoZQorICBzaW5rcy4KKy0gSWYgbm8gZWxlbWVudCBwcm92aWRlcyBhIGNsb2NrIGEgZGVmYXVsdCBzeXN0ZW0gY2xvY2sgaXMgdXNlZCBmb3IgdGhlIHBpcGVsaW5lLgorCitJbiBhIHR5cGljYWwgcGxheWJhY2sgcGlwZWxpbmUgdGhpcyBhbGdvcml0aG0gd2lsbCBzZWxlY3QgdGhlIGNsb2NrIHByb3ZpZGVkIGJ5IAorYSBzaW5rIGVsZW1lbnQgc3VjaCBhcyBhbiBhdWRpbyBzaW5rLgorCitJbiBjYXB0dXJlIHBpcGVsaW5lcywgdGhpcyB3aWxsIHR5cGljYWxseSBzZWxlY3QgdGhlIGNsb2NrIG9mIHRoZSBkYXRhIHByb2R1Y2VyLCB3aGljaAoraW4gbW9zdCBjYXNlcyBjYW4gbm90IGNvbnRyb2wgdGhlIHJhdGUgYXQgd2hpY2ggaXQgcHJvZHVjZXMgZGF0YS4KKworCitQaXBlbGluZSBzdGF0ZXMKK35+fn5+fn5+fn5+fn5+fgorCitXaGVuIGFsbCB0aGUgcGFkcyBhcmUgbGlua2VkIGFuZCBzaWduYWxzIGhhdmUgYmVlbiBjb25uZWN0ZWQsIHRoZSBwaXBlbGluZSBjYW4KK2JlIHB1dCBpbiB0aGUgUEFVU0VEIHN0YXRlIHRvIHN0YXJ0IGRhdGFmbG93LiAKKworV2hlbiBhIGJpbiAoYW5kIGhlbmNlIGEgcGlwZWxpbmUpIHBlcmZvcm1zIGEgc3RhdGUgY2hhbmdlLCBpdCB3aWxsIGNoYW5nZSB0aGUgc3RhdGUKK29mIGFsbCBpdHMgY2hpbGRyZW4uIFRoZSBwaXBlbGluZSB3aWxsIGNoYW5nZSB0aGUgc3RhdGUgb2YgaXRzIGNoaWxkcmVuIGZyb20gdGhlCitzaW5rIGVsZW1lbnRzIHRvIHRoZSBzb3VyY2UgZWxlbWVudHMsIHRoaXMgdG8gbWFrZSBzdXJlIHRoYXQgbm8gdXBzdHJlYW0gZWxlbWVudAorcHJvZHVjZXMgZGF0YSB0byBhbiBlbGVtZW50IHRoYXQgaXMgbm90IHlldCByZWFkeSB0byBhY2NlcHQgaXQuIAorCitJbiB0aGUgbXAzIHBsYXliYWNrIHBpcGVsaW5lLCB0aGUgc3RhdGUgb2YgdGhlIGVsZW1lbnRzIGlzIGNoYW5nZWQgaW4gdGhlIG9yZGVyCithbHNhc2luaywgbXAzZGVjLCBmaWxlc3JjLgorCitBbGwgaW50ZXJtZWRpYXRlIHN0YXRlcyBhcmUgdHJhdmVyc2VkIGZvciBlYWNoIGVsZW1lbnQgcmVzdWx0aW5nIGluIHRoZSBmb2xsb3dpbmcKK2NoYWluIG9mIHN0YXRlIGNoYW5nZXM6CisKKyBhbHNhc2luayB0byBSRUFEWTogIHRoZSBhdWRpbyBkZXZpY2UgaXMgcHJvYmVkCisgbXAzZGVjIHRvIFJFQURZOiAgICBub3RoaW5nIGhhcHBlbnMuCisgZmlsZXNyYyB0byBSRUFEWTogICB0aGUgZmlsZSBpcyBwcm9iZWQKKyBhbHNhc2luayB0byBQQVVTRUQ6IHRoZSBhdWRpbyBkZXZpY2UgaXMgb3BlbmVkLiBhbHNhc2luayBpcyBhIHNpbmsgYW5kIHJldHVybnMgCisgICAgICAgICAgICAgICAgICAgICBBU1lOQyBiZWNhdXNlIGl0IGRpZCBub3QgcmVjZWl2ZSBkYXRhIHlldC4KKyBtcDNkZWMgdG8gUEFVU0VEOiAgIHRoZSBkZWNvZGluZyBsaWJyYXJ5IGlzIGluaXRpYWxpemVkCisgZmlsZXNyYyB0byBQQVVTRUQ6ICB0aGUgZmlsZSBpcyBvcGVuZWQgYW5kIGEgdGhyZWFkIGlzIHN0YXJ0ZWQgdG8gcHVzaCBkYXRhIHRvIAorICAgICAgICAgICAgICAgICAgICAgbXAzZGVjCisKK0F0IHRoaXMgcG9pbnQgZGF0YSBmbG93cyBmcm9tIGZpbGVzcmMgdG8gbXAzZGVjIGFuZCBhbHNhc2luay4gU2luY2UgbXAzZGVjIGlzIFBBVVNFRCwKK2l0IGFjY2VwdHMgdGhlIGRhdGEgZnJvbSBmaWxlc3JjIG9uIHRoZSBzaW5rcGFkIGFuZCBzdGFydHMgZGVjb2RpbmcgdGhlIGNvbXByZXNzZWQKK2RhdGEgdG8gcmF3IGF1ZGlvIHNhbXBsZXMuCisKK1RoZSBtcDMgZGVjb2RlciBmaWd1cmVzIG91dCB0aGUgc2FtcGxlcmF0ZSwgdGhlIG51bWJlciBvZiBjaGFubmVscyBhbmQgb3RoZXIgYXVkaW8KK3Byb3BlcnRpZXMgb2YgdGhlIHJhdyBhdWRpbyBzYW1wbGVzIGFuZCBzZW5kcyBvdXQgYSBjYXBzIGV2ZW50IHdpdGggdGhlIG1lZGlhIHR5cGUuCisKK0Fsc2FzaW5rIHRoZW4gcmVjZWl2ZXMgdGhlIGNhcHMgZXZlbnQsIGluc3BlY3RzIHRoZSBjYXBzIGFuZCByZWNvbmZpZ3VyZXMKK2l0c2VsZiB0byBwcm9jZXNzIHRoZSBtZWRpYSB0eXBlLgorCittcDNkZWMgdGhlbiBwdXRzIHRoZSBkZWNvZGVkIHNhbXBsZXMgaW50byBhIEJ1ZmZlciBhbmQgcHVzaGVzIHRoaXMgYnVmZmVyIHRvIHRoZSBuZXh0CitlbGVtZW50LgorCitBbHNhc2luayByZWNlaXZlcyB0aGUgYnVmZmVyIHdpdGggc2FtcGxlcy4gU2luY2UgaXQgcmVjZWl2ZWQgdGhlIGZpcnN0IGJ1ZmZlciBvZgorc2FtcGxlcywgaXQgY29tcGxldGVzIHRoZSBzdGF0ZSBjaGFuZ2UgdG8gdGhlIFBBVVNFRCBzdGF0ZS4gQXQgdGhpcyBwb2ludCB0aGUKK3BpcGVsaW5lIGlzIHByZXJvbGxlZCBhbmQgYWxsIGVsZW1lbnRzIGhhdmUgc2FtcGxlcy4gQWxzYXNpbmsgaXMgbm93IGFsc28KK2NhcGFibGUgb2YgcHJvdmlkaW5nIGEgY2xvY2sgdG8gdGhlIHBpcGVsaW5lLgorCitTaW5jZSBhbHNhc2luayBpcyBub3cgaW4gdGhlIFBBVVNFRCBzdGF0ZSBpdCBibG9ja3Mgd2hpbGUgcmVjZWl2aW5nIHRoZSBmaXJzdCBidWZmZXIuIFRoaXMKK2VmZmVjdGl2ZWx5IGJsb2NrcyBib3RoIG1wM2RlYyBhbmQgZmlsZXNyYyBpbiB0aGVpciBnc3RfcGFkX3B1c2goKS4KKworU2luY2UgYWxsIGVsZW1lbnRzIG5vdyByZXR1cm4gU1VDQ0VTUyBmcm9tIHRoZSBnc3RfZWxlbWVudF9nZXRfc3RhdGUoKSBmdW5jdGlvbiwKK3RoZSBwaXBlbGluZSBjYW4gYmUgcHV0IGluIHRoZSBQTEFZSU5HIHN0YXRlLgorCitCZWZvcmUgZ29pbmcgdG8gUExBWUlORywgdGhlIHBpcGVsaW5lIHNlbGVjdCBhIGNsb2NrIGFuZCBzYW1wbGVzIHRoZSBjdXJyZW50IHRpbWUgb2YgCit0aGUgY2xvY2suIFRoaXMgaXMgdGhlIGJhc2VfdGltZS4gSXQgdGhlbiBkaXN0cmlidXRlcyB0aGlzIHRpbWUgdG8gYWxsIGVsZW1lbnRzLiAKK0VsZW1lbnRzIGNhbiB0aGVuIHN5bmNocm9uaXplIGFnYWluc3QgdGhlIGNsb2NrIHVzaW5nIHRoZSBidWZmZXIgcnVubmluZ190aW1lICsKK2Jhc2VfdGltZSAoU2VlIGFsc28gcGFydC1zeW5jaHJvbmlzYXRpb24udHh0KS4gCisKK1RoZSBmb2xsb3dpbmcgY2hhaW4gb2Ygc3RhdGUgY2hhbmdlcyB0aGVuIHRha2VzIHBsYWNlOgorCisgYWxzYXNpbmsgdG8gUExBWUlORzogIHRoZSBzYW1wbGVzIGFyZSBwbGF5ZWQgdG8gdGhlIGF1ZGlvIGRldmljZQorIG1wM2RlYyB0byBQTEFZSU5HOiAgICBub3RoaW5nIGhhcHBlbnMKKyBmaWxlc3JjIHRvIFBMQVlJTkc6ICAgbm90aGluZyBoYXBwZW5zCisKKworUGlwZWxpbmUgc3RhdHVzCit+fn5+fn5+fn5+fn5+fn4KKworVGhlIHBpcGVsaW5lIGluZm9ybXMgdGhlIGFwcGxpY2F0aW9uIG9mIGFueSBzcGVjaWFsIGV2ZW50cyB0aGF0IG9jY3VyIGluIHRoZQorcGlwZWxpbmUgd2l0aCB0aGUgYnVzLiBUaGUgYnVzIGlzIGFuIG9iamVjdCB0aGF0IHRoZSBwaXBlbGluZSBwcm92aWRlcyBhbmQgdGhhdAorY2FuIGJlIHJldHJpZXZlZCB3aXRoIGdzdF9waXBlbGluZV9nZXRfYnVzKCkuCisKK1RoZSBidXMgY2FuIGJlIHBvbGxlZCBvciBhZGRlZCB0byB0aGUgZ2xpYiBtYWlubG9vcC4KKworVGhlIGJ1cyBpcyBkaXN0cmlidXRlZCB0byBhbGwgZWxlbWVudHMgYWRkZWQgdG8gdGhlIHBpcGVsaW5lLiBUaGUgZWxlbWVudHMgdXNlIHRoZSBidXMKK3RvIHBvc3QgbWVzc2FnZXMgb24uIFZhcmlvdXMgbWVzc2FnZSB0eXBlcyBleGlzdCBzdWNoIGFzIEVSUk9SUywgV0FSTklOR1MsIEVPUywgCitTVEFURV9DSEFOR0VELCBldGMuLgorCitUaGUgcGlwZWxpbmUgaGFuZGxlcyBFT1MgbWVzc2FnZXMgcmVjZWl2ZWQgZnJvbSBlbGVtZW50cyBpbiBhIHNwZWNpYWwgd2F5LiBJdCB3aWxsCitvbmx5IGZvcndhcmQgdGhlIG1lc3NhZ2UgdG8gdGhlIGFwcGxpY2F0aW9uIHdoZW4gYWxsIHNpbmsgZWxlbWVudHMgaGF2ZSBwb3N0ZWQgYW4KK0VPUyBtZXNzYWdlLgorCitPdGhlciBtZXRob2RzIGZvciBvYnRhaW5pbmcgdGhlIHBpcGVsaW5lIHN0YXR1cyBpbmNsdWRlIHRoZSBRdWVyeSBmdW5jdGlvbmFsaXR5IHRoYXQKK2NhbiBiZSBwZXJmb3JtZWQgd2l0aCBnc3RfZWxlbWVudF9xdWVyeSgpIG9uIHRoZSBwaXBlbGluZS4gVGhpcyB0eXBlIG9mIHF1ZXJ5CitpcyB1c2VmdWwgZm9yIG9idGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBwb3NpdGlvbiBhbmQgdG90YWwgdGltZSBvZgordGhlIHBpcGVsaW5lLiBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIHF1ZXJ5IGZvciB0aGUgc3VwcG9ydGVkIHNlZWtpbmcgZm9ybWF0cyBhbmQKK3Jhbmdlcy4KKworCitQaXBlbGluZSBFT1MKK35+fn5+fn5+fn5+fgorCitXaGVuIHRoZSBzb3VyY2UgZmlsdGVyIGVuY291bnRlcnMgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLCBpdCBzZW5kcyBhbiBFT1MgZXZlbnQgdG8KK3RoZSBwZWVyIGVsZW1lbnQuIFRoaXMgZXZlbnQgd2lsbCB0aGVuIHRyYXZlbCBkb3duc3RyZWFtIHRvIGFsbCBvZiB0aGUgY29ubmVjdGVkCitlbGVtZW50cyB0byBpbmZvcm0gdGhlbSBvZiB0aGUgRU9TLiBUaGUgZWxlbWVudCBpcyBub3Qgc3VwcG9zZWQgdG8gYWNjZXB0IGFueSBtb3JlCitkYXRhIGFmdGVyIHJlY2VpdmluZyBhbiBFT1MgZXZlbnQgb24gYSBzaW5rcGFkLgorCitUaGUgZWxlbWVudCBwcm92aWRpbmcgdGhlIHN0cmVhbWluZyB0aHJlYWQgc3RvcHMgc2VuZGluZyBkYXRhIGFmdGVyIHNlbmRpbmcgdGhlIAorRU9TIGV2ZW50LgorCitUaGUgRU9TIGV2ZW50IHdpbGwgZXZlbnR1YWxseSBhcnJpdmUgaW4gdGhlIHNpbmsgZWxlbWVudC4gVGhlIHNpbmsgd2lsbCB0aGVuIHBvc3QKK2FuIEVPUyBtZXNzYWdlIG9uIHRoZSBidXMgdG8gaW5mb3JtIHRoZSBwaXBlbGluZSB0aGF0IGEgcGFydGljdWxhciBzdHJlYW0gaGFzCitmaW5pc2hlZC4gV2hlbiBhbGwgc2lua3MgaGF2ZSByZXBvcnRlZCBFT1MsIHRoZSBwaXBlbGluZSBmb3J3YXJkcyB0aGUgRU9TIG1lc3NhZ2UKK3RvIHRoZSBhcHBsaWNhdGlvbi4gVGhlIEVPUyBtZXNzYWdlIGlzIG9ubHkgZm9yd2FyZGVkIHRvIHRoZSBhcHBsaWNhdGlvbiBpbiB0aGUKK1BMQVlJTkcgc3RhdGUuCisKK1doZW4gaW4gRU9TLCB0aGUgcGlwZWxpbmUgcmVtYWlucyBpbiB0aGUgUExBWUlORyBzdGF0ZSwgaXQgaXMgdGhlIGFwcGxpY2F0aW9ucworcmVzcG9uc2FiaWxpdHkgdG8gUEFVU0Ugb3IgUkVBRFkgdGhlIHBpcGVsaW5lLiBUaGUgYXBwbGljYXRpb24gY2FuIGFsc28gaXNzdWUKK2Egc2VlaywgZm9yIGV4YW1wbGUuCisKKworUGlwZWxpbmUgUkVBRFkKK35+fn5+fn5+fn5+fn5+CisKK1doZW4gYSBydW5uaW5nIHBpcGVsaW5lIGlzIHNldCBmcm9tIHRoZSBQTEFZSU5HIHRvIFJFQURZIHN0YXRlLCB0aGUgZm9sbG93aW5nIAorYWN0aW9ucyBvY2N1ciBpbiB0aGUgcGlwZWxpbmU6CisKKyBhbHNhc2luayB0byBQQVVTRUQ6ICBhbHNhc2luayBibG9ja3MgYW5kIGNvbXBsZXRlcyB0aGUgc3RhdGUgY2hhbmdlIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAgIG5leHQgc2FtcGxlLiBJZiB0aGUgZWxlbWVudCB3YXMgRU9TLCBpdCBkb2VzIG5vdCB3YWl0IGZvcgorICAgICAgICAgICAgICAgICAgICAgIGEgc2FtcGxlIHRvIGNvbXBsZXRlIHRoZSBzdGF0ZSBjaGFuZ2UuCisgbXAzZGVjIHRvIFBBVVNFRDogICAgbm90aGluZyAKKyBmaWxlc3JjIHRvIFBBVVNFRDogICBub3RoaW5nCisKK0dvaW5nIHRvIHRoZSBpbnRlcm1lZGlhdGUgUEFVU0VEIHN0YXRlIHdpbGwgYmxvY2sgYWxsIGVsZW1lbnRzIGluIHRoZSBfcHVzaCgpCitmdW5jdGlvbnMuIFRoaXMgaGFwcGVucyBiZWNhdXNlIHRoZSBzaW5rIGVsZW1lbnQgYmxvY2tzIG9uIHRoZSBmaXJzdCBidWZmZXIKK2l0IHJlY2VpdmVzLgorCitTb21lIGVsZW1lbnRzIG1pZ2h0IGJlIHBlcmZvcm1pbmcgYmxvY2tpbmcgb3BlcmF0aW9ucyBpbiB0aGUgUExBWUlORyBzdGF0ZSB0aGF0CittdXN0IGJlIHVuYmxvY2tlZCB3aGVuIHRoZXkgZ28gaW50byB0aGUgUEFVU0VEIHN0YXRlLiBUaGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUKK3N0YXRlIGNoYW5nZSBoYXBwZW5zIHZlcnkgZmFzdC4KKworSW4gdGhlIG5leHQgUEFVU0VEIHRvIFJFQURZIHN0YXRlIGNoYW5nZSB0aGUgcGlwZWxpbmUgaGFzIHRvIHNodXQgZG93biBhbmQgYWxsCitzdHJlYW1pbmcgdGhyZWFkcyBtdXN0IHN0b3Agc2VuZGluZyBkYXRhLiBUaGlzIGhhcHBlbnMgaW4gdGhlIGZvbGxvd2luZyBzZXF1ZW5jZToKKworIGFsc2FzaW5rIHRvIFJFQURZOiAgIGFsc2FzaW5rIHVuYmxvY2tzIGZyb20gdGhlIF9jaGFpbigpIGZ1bmN0aW9uIGFuZCByZXR1cm5zIGEKKyAgICAgICAgICAgICAgICAgICAgICBXUk9OR19TVEFURSByZXR1cm4gdmFsdWUgdG8gdGhlIHBlZXIgZWxlbWVudC4gVGhlIHNpbmtwYWQgaXMKKyAgICAgICAgICAgICAgICAgICAgICBkZWFjdGl2YXRlZCBhbmQgYmVjb21lcyB1bnVzYWJsZSBmb3Igc2VuZGluZyBtb3JlIGRhdGEuIAorIG1wM2RlYyB0byBSRUFEWTogICAgIHRoZSBwYWRzIGFyZSBkZWFjdGl2YXRlZCBhbmQgdGhlIHN0YXRlIGNoYW5nZSBjb21wbGV0ZXMgd2hlbgorICAgICAgICAgICAgICAgICAgICAgIG1wM2RlYyBsZWF2ZXMgaXRzIF9jaGFpbigpIGZ1bmN0aW9uLiAKKyBmaWxlc3JjIHRvIFJFQURZOiAgICB0aGUgcGFkcyBhcmUgZGVhY3RpdmF0ZWQgYW5kIHRoZSB0aHJlYWQgaXMgcGF1c2VkLgorCitUaGUgdXBzdHJlYW0gZWxlbWVudHMgZmluaXNoIHRoZWlyIGNoYWluKCkgZnVuY3Rpb24gYmVjYXVzZSB0aGUgZG93bnN0cmVhbSBlbGVtZW50CityZXR1cm5lZCBhbiBlcnJvciBjb2RlIChXUk9OR19TVEFURSkgZnJvbSB0aGUgX3B1c2goKSBmdW5jdGlvbnMuIFRoZXNlIGVycm9yIGNvZGVzIAorYXJlIGV2ZW50dWFsbHkgcmV0dXJuZWQgdG8gdGhlIGVsZW1lbnQgdGhhdCBzdGFydGVkIHRoZSBzdHJlYW1pbmcgdGhyZWFkIChmaWxlc3JjKSwKK3doaWNoIHBhdXNlcyB0aGUgdGhyZWFkIGFuZCBjb21wbGV0ZXMgdGhlIHN0YXRlIGNoYW5nZS4KKworVGhpcyBzZXF1ZW5jZSBvZiBldmVudHMgZW5zdXJlIHRoYXQgYWxsIGVsZW1lbnRzIGFyZSB1bmJsb2NrZWQgYW5kIGFsbCBzdHJlYW1pbmcKK3RocmVhZHMgc3RvcHBlZC4KKworCitQaXBlbGluZSBzZWVraW5nCit+fn5+fn5+fn5+fn5+fn5+CisKK1NlZWtpbmcgaW4gdGhlIHBpcGVsaW5lIHJlcXVpcmVzIGEgdmVyeSBzcGVjaWZpYyBvcmRlciBvZiBvcGVyYXRpb25zIHRvIG1ha2UKK3N1cmUgdGhhdCB0aGUgZWxlbWVudHMgcmVtYWluIHN5bmNocm9uaXplZCBhbmQgdGhhdCB0aGUgc2VlayBpcyBwZXJmb3JtZWQgd2l0aAorYSBtaW5pbWFsIGFtb3VudCBvZiBsYXRlbmN5LgorCitBbiBhcHBsaWNhdGlvbiBpc3N1ZXMgYSBzZWVrIGV2ZW50IG9uIHRoZSBwaXBlbGluZSB1c2luZyBnc3RfZWxlbWVudF9zZW5kX2V2ZW50KCkKK29uIHRoZSBwaXBlbGluZSBlbGVtZW50LiBUaGUgZXZlbnQgY2FuIGJlIGEgc2VlayBldmVudCBpbiBhbnkgb2YgdGhlIGZvcm1hdHMKK3N1cHBvcnRlZCBieSB0aGUgZWxlbWVudHMuCisKK1RoZSBwaXBlbGluZSBmaXJzdCBwYXVzZXMgdGhlIHBpcGVsaW5lIHRvIHNwZWVkIHVwIHRoZSBzZWVrIG9wZXJhdGlvbnMuCisKK1RoZSBwaXBlbGluZSB0aGVuIGlzc3VlcyB0aGUgc2VlayBldmVudCB0byBhbGwgc2luayBlbGVtZW50cy4gVGhlIHNpbmsgdGhlbiBmb3J3YXJkcyAKK3RoZSBzZWVrIGV2ZW50IHVwc3RyZWFtIHVudGlsIHNvbWUgZWxlbWVudCBjYW4gcGVyZm9ybSB0aGUgc2VlayBvcGVyYXRpb24sIHdoaWNoIGlzCit0eXBpY2FsbHkgdGhlIHNvdXJjZSBvciBkZW11eGVyIGVsZW1lbnQuIEFsbCBpbnRlcm1lZGlhdGUgZWxlbWVudHMgY2FuIHRyYW5zZm9ybSB0aGUKK3JlcXVlc3RlZCBzZWVrIG9mZnNldCB0byBhbm90aGVyIGZvcm1hdCwgdGhpcyB3YXkgYSBkZWNvZGVyIGVsZW1lbnQgY2FuIHRyYW5zZm9ybSBhCitzZWVrIHRvIGEgZnJhbWUgbnVtYmVyIHRvIGEgdGltZXN0YW1wLCBmb3IgZXhhbXBsZS4KKworV2hlbiB0aGUgc2VlayBldmVudCByZWFjaGVzIGFuIGVsZW1lbnQgdGhhdCB3aWxsIHBlcmZvcm0gdGhlIHNlZWsgb3BlcmF0aW9uLCB0aGF0IAorZWxlbWVudCBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIHN0ZXBzLgorCisgIDEpIHNlbmQgYSBGTFVTSF9TVEFSVCBldmVudCB0byBhbGwgZG93bnN0cmVhbSBhbmQgdXBzdHJlYW0gcGVlciBlbGVtZW50cy4KKyAgMikgbWFrZSBzdXJlIHRoZSBzdHJlYW1pbmcgdGhyZWFkIGlzIG5vdCBydW5uaW5nLiBUaGUgc3RyZWFtaW5nIHRocmVhZCB3aWxsCisgICAgIGFsd2F5cyBzdG9wIGJlY2F1c2Ugb2Ygc3RlcCAxKS4KKyAgMykgcGVyZm9ybSB0aGUgc2VlayBvcGVyYXRpb24KKyAgNCkgc2VuZCBhIEZMVVNIIGRvbmUgZXZlbnQgdG8gYWxsIGRvd25zdHJlYW0gYW5kIHVwc3RyZWFtIHBlZXIgZWxlbWVudHMuCisgIDUpIHNlbmQgU0VHTUVOVCBldmVudCB0byBpbmZvcm0gYWxsIGVsZW1lbnRzIG9mIHRoZSBuZXcgcG9zaXRpb24gYW5kIHRvIGNvbXBsZXRlCisgICAgIHRoZSBzZWVrLgorCitJbiBzdGVwIDEpIGFsbCBkb3duc3RyZWFtIGVsZW1lbnRzIGhhdmUgdG8gcmV0dXJuIGZyb20gYW55IGJsb2NraW5nIG9wZXJhdGlvbnMKK2FuZCBoYXZlIHRvIHJlZnVzZSBhbnkgZnVydGhlciBidWZmZXJzIG9yIGV2ZW50cyBkaWZmZXJlbnQgZnJvbSBhIEZMVVNIIGRvbmUuCisKK1RoZSBmaXJzdCBzdGVwIGVuc3VyZXMgdGhhdCB0aGUgc3RyZWFtaW5nIHRocmVhZCBldmVudHVhbGx5IHVuYmxvY2tzIGFuZCB0aGF0CitzdGVwIDIpIGNhbiBiZSBwZXJmb3JtZWQuIEF0IHRoaXMgcG9pbnQsIGRhdGFmbG93IGlzIGNvbXBsZXRlbHkgc3RvcHBlZCBpbiB0aGUKK3BpcGVsaW5lLiAKKworSW4gc3RlcCAzKSB0aGUgZWxlbWVudCBwZXJmb3JtcyB0aGUgc2VlayB0byB0aGUgcmVxdWVzdGVkIHBvc2l0aW9uLiAKKworSW4gc3RlcCA0KSBhbGwgcGVlciBlbGVtZW50cyBhcmUgYWxsb3dlZCB0byBhY2NlcHQgZGF0YSBhZ2FpbiBhbmQgc3RyZWFtaW5nCitjYW4gY29udGludWUgZnJvbSB0aGUgbmV3IHBvc2l0aW9uLiBBIEZMVVNIIGRvbmUgZXZlbnQgaXMgc2VudCB0byBhbGwgdGhlIHBlZXIKK2VsZW1lbnRzIHNvIHRoYXQgdGhleSBhY2NlcHQgbmV3IGRhdGEgYWdhaW4gYW5kIHJlc3RhcnQgdGhlaXIgc3RyZWFtaW5nIHRocmVhZHMuCisKK1N0ZXAgNSkgaW5mb3JtcyBhbGwgZWxlbWVudHMgb2YgdGhlIG5ldyBwb3NpdGlvbiBpbiB0aGUgc3RyZWFtLiBBZnRlciB0aGF0IHRoZQorZXZlbnQgZnVuY3Rpb24gcmV0dXJucyBiYWNrIHRvIHRoZSBhcHBsaWNhdGlvbi4gYW5kIHRoZSBzdHJlYW1pbmcgdGhyZWFkcyBzdGFydAordG8gcHJvZHVjZSBuZXcgZGF0YS4KKworU2luY2UgdGhlIHBpcGVsaW5lIGlzIHN0aWxsIFBBVVNFRCwgdGhpcyB3aWxsIHByZXJvbGwgdGhlIG5leHQgbWVkaWEgc2FtcGxlIGluIHRoZQorc2lua3MuIFRoZSBhcHBsaWNhdGlvbiBjYW4gd2FpdCBmb3IgdGhpcyBwcmVyb2xsIHRvIGNvbXBsZXRlIGJ5IHBlcmZvcm1pbmcgYSAKK19nZXRfc3RhdGUoKSBvbiB0aGUgcGlwZWxpbmUuCisKK1RoZSBsYXN0IHN0ZXAgaW4gdGhlIHNlZWsgb3BlcmF0aW9uIGlzIHRoZW4gdG8gYWRqdXN0IHRoZSBzdHJlYW0gcnVubmluZ190aW1lIG9mCit0aGUgcGlwZWxpbmUgdG8gMCBhbmQgdG8gc2V0IHRoZSBwaXBlbGluZSBiYWNrIHRvIFBMQVlJTkcuCisKK1RoZSBzZXF1ZW5jZSBvZiBldmVudHMgaW4gb3VyIG1wMyBwbGF5YmFjayBleGFtcGxlLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYSkgc2VlayBvbiBwaXBlbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGIpIFBBVVNFIHBpcGVsaW5lCisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVYtLS0tLS0tLSsKKyAgIHwgcGlwZWxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgfCBjKSBzZWVrIG9uIHNpbmsKKyAgIHwgKy0tLS0tLS0tLSsgICArLS0tLS0tLS0tLSsgICArLS0tVi0tLS0tLSsgfAorICAgfCB8IGZpbGVzcmMgfCAgIHwgbXAzZGVjICAgfCAgIHwgYWxzYXNpbmsgfCB8CisgICB8IHwgICAgICAgIHNyYy1zaW5rICAgICAgIHNyYy1zaW5rICAgICAgICB8IHwKKyAgIHwgKy0tLS0tLS0tLSsgICArLS0tLS0tLS0tLSsgICArLS0tLXwtLS0tLSsgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0rCisgICAgICAgICAgICAgIDwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgIGQpIHNlZWsgdHJhdmVscyB1cHN0cmVhbQorCisgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiAxKSBGTFVTSCBldmVudAorCSAgICAgIHwgMikgc3RvcCBzdHJlYW1pbmcKKwkgICAgICB8IDMpIHBlcmZvcm0gc2VlaworICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gNCkgRkxVU0ggZG9uZSBldmVudAorICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gNSkgU0VHTUVOVCBldmVudAorICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlKSB1cGRhdGUgcnVubmluZ190aW1lIHRvIDAKKwkJCQkgICAgICB8IGYpIFBMQVkgcGlwZWxpbmUKKwpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1wcmVyb2xsLnR4dCBiL2RvY3MvZGVzaWduL3BhcnQtcHJlcm9sbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVjZDc4ZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZGVzaWduL3BhcnQtcHJlcm9sbC50eHQKQEAgLTAsMCArMSw1OCBAQAorUHJlcm9sbAorLS0tLS0tLQorCitBIHNpbmsgZWxlbWVudCBjYW4gb25seSBjb21wbGV0ZSB0aGUgc3RhdGUgY2hhbmdlIHRvIFBBVVNFRCBhZnRlciBhIGJ1ZmZlcgoraGFzIGJlZW4gcXVldWVkIG9uIHRoZSBpbnB1dCBwYWQgb3IgcGFkcy4gVGhpcyBwcm9jZXNzIGlzIGNhbGxlZCBwcmVyb2xsaW5nCithbmQgaXMgbmVlZGVkIHRvIGZpbGwgdGhlIHBpcGVsaW5lIHdpdGggYnVmZmVycyBzbyB0aGF0IHRoZSB0cmFuc2l0aW9uIHRvCitQTEFZSU5HIGdvZXMgYXMgZmFzdCBhcyBwb3NzaWJsZSB3aXRoIG5vIHZpc3VhbCBkZWxheSBmb3IgdGhlIHVzZXIuCisKK1ByZXJvbGwgaXMgYWxzbyBjcnVjaWFsIGluIG1haW50YWluaW5nIGNvcnJlY3QgYXVkaW8gYW5kIHZpZGVvIHN5bmNocm9uaXNhdGlvbgorYW5kIGVuc3VyaW5nIHRoYXQgbm8gYnVmZmVycyBhcmUgZHJvcHBlZCBpbiB0aGUgc2lua3MuCisKK0FmdGVyIHJlY2VpdmluZyBhIGJ1ZmZlciAob3IgRU9TKSBvbiBhIHBhZCB0aGUgY2hhaW4vZXZlbnQgZnVuY3Rpb24gc2hvdWxkCit3YWl0IHRvIHJlbmRlciB0aGUgYnVmZmVycyBvciBpbiB0aGUgRU9TIGNhc2UsIHdhaXQgdG8gcG9zdCB0aGUgRU9TCittZXNzYWdlLiBXaGlsZSB3YWl0aW5nLCB0aGUgc2luayB3aWxsIHdhaXQgZm9yIHRoZSBwcmVyb2xsIGNvbmQgdG8gYmUgc2lnbmFsbGVkLgorCitTZXZlcmFsIHRoaW5ncyBjYW4gaGFwcGVuIHRoYXQgcmVxdWlyZSB0aGUgcHJlcm9sbCBjb25kIHRvIGJlIHNpZ25hbGxlZC4gVGhpcworaW5jbHVkZSBzdGF0ZSBjaGFuZ2VzIG9yIGZsdXNoIGV2ZW50cy4gVGhlIHByZXJvbGxpbmcgaXMgaW1wbGVtZW50ZWQgaW4KK3NpbmtzIChzZWUgcGFydC1lbGVtZW50LXNpbmsudHh0KQorCisKK0NvbW1pdHRpbmcgdGhlIHN0YXRlCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitXaGVuIGdvaW5nIHRvIFBBVVNFRCBhbmQgUExBWUlORyBhIGJ1ZmZlciBzaG91bGQgYmUgcXVldWVkIGluIHRoZSBwYWQuIFdlIGFsc28KK21ha2UgdGhpcyByZXF1aXJlbWVudCBmb3IgZ29pbmcgdG8gUExBWUlORyBzaW5jZSBhIGZsdXNoIGV2ZW50IGluIHRoZSBQQVVTRUQKK3N0YXRlIGNvdWxkIHVucXVldWUgdGhlIGJ1ZmZlciBhZ2Fpbi4KKworVGhlIHN0YXRlIGlzIGNvbW1pdGVkIGluIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworIC0gYSBidWZmZXIgaXMgcmVjZWl2ZWQgb24gYSBzaW5rcGFkCisgLSBhbiBFT1MgaXMgcmVjZWl2ZWQgb24gYSBzaW5rcGFkLgorCitXZSByZXF1aXJlIHRoZSBzdGF0ZSBjaGFuZ2UgdG8gYmUgY29tbWl0ZWQgaW4gRU9TIGFzIHdlbGwgc2luY2UgYW4gRU9TIG1lYW5zCitieSBkZWZpbml0aW9uIHRoYXQgbm8gYnVmZmVyIGlzIGdvaW5nIHRvIGFycml2ZSBhbnltb3JlLgorCitBZnRlciB0aGUgc3RhdGUgaXMgY29tbWl0ZWQsIGEgYmxvY2tpbmcgd2FpdCBzaG91bGQgYmUgcGVyZm9ybWVkIGZvciB0aGUgCituZXh0IGV2ZW50LiBTb21lIHNpbmtzIG1pZ2h0IHJlbmRlciB0aGUgcHJlcm9sbCBidWZmZXIgYmVmb3JlIHN0YXJ0aW5nIHRoaXMKK2Jsb2NraW5nIHdhaXQuCisKKworVW5sb2NraW5nIHRoZSBwcmVyb2xsCit+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIGZvbGxvd2luZyBjb25kaXRpb25zIHVubG9jayB0aGUgcHJlcm9sbDoKKworIC0gYSBzdGF0ZSBjaGFuZ2UKKyAtIGEgZmx1c2ggZXZlbnQKKworV2hlbiB0aGUgcHJlcm9sbCBpcyB1bmxvY2tlZCBieSBhIGZsdXNoIGV2ZW50LCBhIHJldHVybiB2YWx1ZSBvZgorR1NUX0ZMT1dfV1JPTkdfU1RBVEUgaXMgdG8gYmUgcmV0dXJuZWQgdG8gdGhlIHBlZXIgcGFkLgorCitXaGVuIHByZXJvbGwgaXMgdW5sb2NrZWQgYnkgYSBzdGF0ZSBjaGFuZ2UgdG8gUExBWUlORywgcGxheWJhY2sgYW5kCityZW5kZXJpbmcgb2YgdGhlIGJ1ZmZlcnMgc2hhbGwgc3RhcnQuCisKK1doZW4gcHJlcm9sbCBpcyB1bmxvY2tlZCBieSBhIHN0YXRlIGNoYW5nZSB0byBSRUFEWSwgdGhlIGJ1ZmZlciBpcwordG8gYmUgZGlzY2FyZGVkIGFuZCBhIEdTVF9GTE9XX1dST05HX1NUQVRFIHNoYWxsIGJlIHJldHVybmVkIHRvIHRoZQorcGVlciBlbGVtZW50LgorCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LXB1c2gtcHVsbC50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LXB1c2gtcHVsbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ5ZjhkNwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZGVzaWduL3BhcnQtcHVzaC1wdWxsLnR4dApAQCAtMCwwICsxLDQ2IEBACitwdXNoLXB1bGwKKy0tLS0tLS0tLQorCitOb3JtYWxseSBhIHNvdXJjZSBlbGVtZW50IHdpbGwgcHVzaCBkYXRhIHRvIHRoZSBkb3duc3RyZWFtIGVsZW1lbnQgdXNpbmcKK3RoZSBnc3RfcGFkX3B1c2goKSBtZXRob2QuIFRoZSBkb3duc3RyZWFtIHBlZXIgcGFkIHdpbGwgcmVjZWl2ZSB0aGUKK2J1ZmZlciBpbiB0aGUgQ2hhaW4gZnVuY3Rpb24uIEluIHRoZSBwdXNoIG1vZGUsIHRoZSBzb3VyY2UgZWxlbWVudCBpcyB0aGUKK2RyaXZpbmcgZm9yY2UgaW4gdGhlIHBpcGVsaW5lIGFzIGl0IGluaXRpYXRlcyBkYXRhIHRyYW5zcG9ydC4KKworSXQgaXMgYWxzbyBwb3NzaWJsZSBmb3IgYW4gZWxlbWVudCB0byBwdWxsIGRhdGEgZnJvbSBhbiB1cHN0cmVhbSBlbGVtZW50LgorVGhlIGRvd25zdHJlYW0gZWxlbWVudCBkb2VzIHRoaXMgYnkgY2FsbGluZyBnc3RfcGFkX3B1bGxfcmFuZ2UoKSBvbiBvbmUKK29mIGl0cyBzaW5rcGFkcy4gSW4gdGhpcyBtb2RlLCB0aGUgZG93bnN0cmVhbSBlbGVtZW50IGlzIHRoZSBkcml2aW5nIGZvcmNlIAoraW4gdGhlIHBpcGVsaW5lIGFzIGl0IGluaXRpYXRlcyBkYXRhIHRyYW5zZmVyLgorCitJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgZWxlbWVudHMgYXJlIGluIHRoZSBjb3JyZWN0IHN0YXRlIHRvIGhhbmRsZSBhCitwdXNoKCkgb3IgYSBwdWxsX3JhbmdlKCkgZnJvbSB0aGUgcGVlciBlbGVtZW50LiBGb3IgcHVzaCgpIGJhc2VkIGVsZW1lbnRzCit0aGlzIG1lYW5zIHRoYXQgYWxsIGRvd25zdHJlYW0gZWxlbWVudHMgc2hvdWxkIGJlIGluIHRoZSBjb3JyZWN0IHN0YXRlIGFuZAorZm9yIHB1bGxfcmFuZ2UoKSBiYXNlZCBlbGVtZW50cyB0aGlzIG1lYW5zIHRoZSB1cHN0cmVhbSBlbGVtZW50cyBzaG91bGQKK2JlIGluIHRoZSBjb3JyZWN0IHN0YXRlLgorCitNb3N0IHNpbmtwYWRzIGltcGxlbWVudCBhIGNoYWluIGZ1bmN0aW9uLiBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiBjYXNlLgorc2lua3BhZHMgaW1wbGVtZW50aW5nIGEgbG9vcCBmdW5jdGlvbiB3aWxsIGJlIHRoZSBleGNlcHRpb24uIExpa2V3aXNlCitzcmNwYWRzIGltcGxlbWVudGluZyBhIGdldHJhbmdlIGZ1bmN0aW9uIHdpbGwgYmUgdGhlIGV4Y2VwdGlvbi4KKworCitzdGF0ZSBjaGFuZ2VzCit+fn5+fn5+fn5+fn5+CisKK1RoZSBHc3RCaW4gc2V0cyB0aGUgc3RhdGUgb2YgYWxsIHRoZSBzaW5rIGVsZW1lbnRzLiBUaGVzZSBhcmUgdGhlIGVsZW1lbnRzCit3aXRob3V0IHNvdXJjZSBwYWRzLgorCitTZXR0aW5nIHRoZSBzdGF0ZSBvbiBhbiBlbGVtZW50IHdpbGwgZmlyc3QgYWN0aXZhdGUgYWxsIHRoZSBzcmNwYWRzIGFuZCB0aGVuCit0aGUgc2lua3BhZHMuIEZvciBlYWNoIG9mIHRoZSBzaW5rcGFkcywgZ3N0X3BhZF9jaGVja19wdWxsX3JhbmdlKCkgaXMKK3BlcmZvcm1lZC4gSWYgdGhlIHNpbmtwYWQgc3VwcG9ydHMgYSBsb29wZnVuY3Rpb24gYW5kIHRoZSBwZWVyIHBhZCByZXR1cm5zIFRSVUUKK2Zyb20gdGhlIEdzdFBhZENoZWNrUHVsbFJhbmdlIGZ1bmN0aW9uLCB0aGVuIHRoZSBwZWVyIHBhZCBpcyBhY3RpdmF0ZWQgZmlyc3QgYXMKK2l0IG11c3QgYmUgaW4gdGhlIHJpZ2h0IHN0YXRlIHRvIGhhbmRsZSBhIF9wdWxsX3JhbmdlKCkuIE5vdGUgdGhhdCB0aGUKK3N0YXRlIGNoYW5nZSBvZiB0aGUgZWxlbWVudCBpcyBub3QgeWV0IHBlcmZvcm1lZCwganVzdCB0aGUgYWN0aXZhdGUgZnVuY3Rpb24KK2lzIGNhbGxlZCBvbiB0aGUgc291cmNlIHBhZC4gVGhpcyBtZWFucyB0aGF0IGVsZW1lbnRzIHRoYXQgaW1wbGVtZW50IGEKK2dldHJhbmdlIGZ1bmN0aW9uIG11c3QgYmUgcHJlcGFyZWQgdG8gZ2V0IHRoZWlyIGFjdGl2YXRlIGZ1bmN0aW9uIGNhbGxlZAorYmVmb3JlIHRoZWlyIHN0YXRlIGNoYW5nZSBmdW5jdGlvbi4KKworRWxlbWVudHMgdGhhdCBoYXZlIG11bHRpcGxlIHNpbmtwYWRzIHRoYXQgcmVxdWlyZSBhbGwgb2YgdGhlbSB0byBvcGVyYXRlCitpbiB0aGUgc2FtZSBtb2RlIChwdXNoL3B1bGwpIGNhbiB1c2UgdGhlIF9jaGVja19wdWxsX3JhbmdlKCkgb24gYWxsCit0aGVpciBwYWRzIGFuZCBjYW4gdGhlbiByZW1vdmUgdGhlIGxvb3AgZnVuY3Rpb25zIGlmIG9uZSBvZiB0aGUgcGFkcyBkb2VzCitub3Qgc3VwcG9ydCBwdWxsIGJhc2VkIG1vZGUuCisKKwpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1xb3MudHh0IGIvZG9jcy9kZXNpZ24vcGFydC1xb3MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZmZhMDEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2Rlc2lnbi9wYXJ0LXFvcy50eHQKQEAgLTAsMCArMSw0MzYgQEAKK1F1YWxpdHktb2YtU2VydmljZQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1F1YWxpdHkgb2Ygc2VydmljZSBpcyBhYm91dCBtZWFzdXJpbmcgYW5kIGFkanVzdGluZyB0aGUgcmVhbC10aW1lCitwZXJmb3JtYW5jZSBvZiBhIHBpcGVsaW5lLgorCitUaGUgcmVhbC10aW1lIHBlcmZvcm1hbmNlIGlzIGFsd2F5cyBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgcGlwZWxpbmUKK2Nsb2NrIGFuZCB0eXBpY2FsbHkgaGFwcGVucyBpbiB0aGUgc2lua3Mgd2hlbiB0aGV5IHN5bmNocm9uaXplIGJ1ZmZlcnMKK2FnYWluc3QgdGhlIGNsb2NrLgorCitUaGUgbWVhc3VyZW1lbnRzIHJlc3VsdCBpbiBRT1MgZXZlbnRzIHRoYXQgYWltIHRvIGFkanVzdCB0aGUgZGF0YXJhdGUKK2luIG9uZSBvciBtb3JlIHVwc3RyZWFtIGVsZW1lbnRzLiBUd28gdHlwZXMgb2YgYWRqdXN0bWVudHMgY2FuIGJlCittYWRlOgorCisgIC0gc2hvcnQgdGltZSAiZW1lcmdlbmN5IiBjb3JyZWN0aW9ucyBiYXNlZCBvbiBsYXRlc3Qgb2JzZXJ2YXRpb24KKyAgICBpbiB0aGUgc2lua3MuCisgIC0gbG9uZyB0ZXJtIHJhdGUgY29ycmVjdGlvbnMgYmFzZWQgb24gdHJlbmRzIG9ic2VydmVkIGluIHRoZSBzaW5rcy4KKworSXQgaXMgYWxzbyBwb3NzaWJsZSBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIGFydGlmaWNpYWxseSBpbnRyb2R1Y2UgZGVsYXkKK2JldHdlZW4gc3luY2hyb25pemVkIGJ1ZmZlcnMsIHRoaXMgaXMgY2FsbGVkIHRocm90dGxpbmcuIEl0IGNhbiBiZSB1c2VkCit0byByZWR1Y2UgdGhlIGZyYW1lcmF0ZSwgZm9yIGV4YW1wbGUuCisKKworU291cmNlcyBvZiBxdWFsaXR5IHByb2JsZW1zCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworIC0gSGlnaCBDUFUgbG9hZAorIC0gTmV0d29yayBwcm9ibGVtcworIC0gT3RoZXIgcmVzb3VyY2UgcHJvYmxlbXMgc3VjaCBhcyBkaXNrIGxvYWQsIG1lbW9yeSBib3R0bGVuZWNrcyBldGMuCisgLSBhcHBsaWNhdGlvbiBsZXZlbCB0aHJvdHRsaW5nCisKKworUW9TIGV2ZW50Cit+fn5+fn5+fn4KKworVGhlIFFvUyBldmVudCBpcyBnZW5lcmF0ZWQgYnkgYW4gZWxlbWVudCB0aGF0IHN5bmNocm9uaXplcyBhZ2FpbnN0IHRoZSBjbG9jay4gSXQKK3RyYXZlbHMgdXBzdHJlYW0gYW5kIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZmllbGRzOgorCisgLSB0eXBlLCBHU1RfVFlQRV9RT1NfVFlQRToKKyAgICAgIFRoZSB0eXBlIG9mIHRoZSBRb1MgZXZlbnQsIHdlIGhhdmUgdGhlIGZvbGxvd2luZyB0eXBlcyBhbmQgdGhlIGRlZmF1bHQgdHlwZQorICAgICAgaXMgR1NUX1FPU19UWVBFX1VOREVSRkxPVzoKKworICAgICAgR1NUX1FPU19UWVBFX09WRVJGTE9XOiAgYW4gZWxlbWVudCBpcyByZWNlaXZpbmcgYnVmZmVycyB0b28gZmFzdCBhbmQgY2FuJ3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlZXAgdXAgcHJvY2Vzc2luZyB0aGVtLiBVcHN0cmVhbSBzaG91bGQgcmVkdWNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF0ZS4KKyAgICAgIEdTVF9RT1NfVFlQRV9VTkRFUkZMT1c6IGFuIGVsZW1lbnQgaXMgcmVjZWl2aW5nIGJ1ZmZlcnMgdG9vIHNsb3dseSBhbmQgaGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkcm9wIHRoZW0gYmVjYXVzZSB0aGV5IGFyZSB0b28gbGF0ZS4gVXBzdHJlYW0gc2hvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNyZWFzZSB0aGUgcHJvY2Vzc2luZyByYXRlLgorICAgICAgR1NUX1FPU19UWVBFX1RIUk9UVExFOiAgdGhlIGFwcGxpY2F0aW9uIGlzIGFza2luZyB0byBhZGQgZXh0cmEgZGVsYXkgYmV0d2VlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVycywgdXBzdHJlYW0gaXMgYWxsb3dlZCB0byBkcm9wIGJ1ZmZlcnMKKworIC0gdGltZXN0YW1wLCBHX1RZUEVfVUlOVDY0OgorICAgICAgVGhlIHRpbWVzdGFtcCBvbiB0aGUgYnVmZmVyIHRoYXQgZ2VuZXJhdGVkIHRoZSBRb1MgZXZlbnQuIFRoZXNlIHRpbWVzdGFtcHMKKyAgICAgIGFyZSBleHByZXNzZWQgaW4gdG90YWwgcnVubmluZ190aW1lIGluIHRoZSBzaW5rIHNvIHRoYXQgdGhlIHZhbHVlIGlzIGV2ZXIKKyAgICAgIGluY3JlYXNpbmcuCisKKyAtIGppdHRlciwgR19UWVBFX0lOVDY0OgorICAgICAgVGhlIGRpZmZlcmVuY2Ugb2YgdGhhdCB0aW1lc3RhbXAgYWdhaW5zdCB0aGUgY3VycmVudCBjbG9jayB0aW1lLiAgTmVnYXRpdmUKKyAgICAgIHZhbHVlcyBtZWFuIHRoZSB0aW1lc3RhbXAgd2FzIG9uIHRpbWUuIFBvc2l0aXZlIHZhbHVlcyBpbmRpY2F0ZSB0aGUKKyAgICAgIHRpbWVzdGFtcCB3YXMgbGF0ZSBieSB0aGF0IGFtb3VudC4gV2hlbiBidWZmZXJzIGFyZSByZWNlaXZlZCBpbiB0aW1lIGFuZCAKKyAgICAgIHRocm90dGxpbmcgaXMgbm90IGVuYWJsZWQsIHRoZSBRb1MgdHlwZSBmaWVsZCBpcyBzZXQgdG8gT1ZFUkZMT1cuCisgICAgICBXaGVuIHRocm90dGxpbmcsIHRoZSBqaXR0ZXIgY29udGFpbnMgdGhlIHRocm90dGxpbmcgZGVsYXkgYWRkZWQgYnkgdGhlIAorICAgICAgYXBwbGljYXRpb24gYW5kIHRoZSB0eXBlIGlzIHNldCB0byBUSFJPVFRMRS4KKworIC0gcHJvcG9ydGlvbiwgR19UWVBFX0RPVUJMRToKKyAgICAgIExvbmcgdGVybSBwcmVkaWN0aW9uIG9mIHRoZSBpZGVhbCByYXRlIHJlbGF0aXZlIHRvIG5vcm1hbCByYXRlIHRvIGdldAorICAgICAgb3B0aW1hbCBxdWFsaXR5LgorCitUaGUgcmVzdCBvZiB0aGlzIGRvY3VtZW50IGRlYWxzIHdpdGggaG93IHRoZXNlIHZhbHVlcyBjYW4gYmUgY2FsY3VsYXRlZAoraW4gYSBzaW5rIGFuZCBob3cgdGhlIHZhbHVlcyBjYW4gYmUgdXNlZCBieSBvdGhlciBlbGVtZW50cyB0byBhZGp1c3QgdGhlaXIKK29wZXJhdGlvbnMuCisKKworUW9TIG1lc3NhZ2UKK35+fn5+fn5+fn5+CisKK0EgUU9TIG1lc3NhZ2UgaXMgcG9zdGVkIG9uIHRoZSBidXMgd2hlbmV2ZXIgYW4gZWxlbWVudCBkZWNpZGVzIHRvOgorCisgLSBkcm9wIGEgYnVmZmVyIGJlY2F1c2Ugb2YgUW9TIHJlYXNvbnMKKyAtIGNoYW5nZSBpdHMgcHJvY2Vzc2luZyBzdHJhdGVneSBiZWNhdXNlIG9mIFFvUyByZWFzb25zIChxdWFsaXR5KQorCitJdCBzaG91bGQgYmUgZXhwZWN0ZWQgdGhhdCBjcmVhdGluZyBhbmQgcG9zdGluZyB0aGUgUW9TIG1lc3NhZ2UgaXMgcmVhc29uYWJseQorZmFzdCBhbmQgZG9lcyBub3Qgc2lnbmlmaWNhbnRseSBjb250cmlidXRlIHRvIHRoZSBRb1MgcHJvYmxlbXMuIE9wdGlvbnMgdG8KK2Rpc2FibGUgdGhpcyBmZWF0dXJlIGNvdWxkIGFsc28gYmUgcHJlc2VudGVkIG9uIGVsZW1lbnRzLgorCitUaGlzIG1lc3NhZ2UgY2FuIGJlIHBvc3RlZCBieSBhIHNpbmsvc3JjIHRoYXQgcGVyZm9ybXMgc3luY2hyb25pc2F0aW9uIGFnYWluc3QgdGhlCitjbG9jayAobGl2ZSkgb3IgaXQgY291bGQgYmUgZHJvcHBlZCBieSBhbiB1cHN0cmVhbSBlbGVtZW50IHRoYXQgcGVyZm9ybXMgUW9TCitiZWNhdXNlIG9mIFFPUyBldmVudHMgcmVjZWl2ZWQgZnJvbSBhIGRvd25zdHJlYW0gZWxlbWVudCAoIWxpdmUpLgorCitUaGUgR1NUX01FU1NBR0VfUU9TIGNvbnRhaW5zIGF0IGxlYXN0IHRoZSBmb2xsb3dpbmcgaW5mbzoKKworIC0gbGl2ZTogR19UWVBFX0JPT0xFQU46CisgICAgICBJZiB0aGUgUW9TIG1lc3NhZ2Ugd2FzIGRyb3BwZWQgYnkgYSBsaXZlIGVsZW1lbnQgc3VjaCBhcyBhIHNpbmsgb3IgYSBsaXZlCisgICAgICBzb3VyY2UuIElmIHRoZSBsaXZlIHByb3BlcnR5IGlzIEZBTFNFLCB0aGUgUW9TIG1lc3NhZ2Ugd2FzIGdlbmVyYXRlZCBhcyBhCisgICAgICByZXNwb25zZSB0byBhIFFvUyBldmVudCBpbiBhIG5vbi1saXZlIGVsZW1lbnQuCisKKyAtIHJ1bm5pbmctdGltZSwgR19UWVBFX1VJTlQ2NDoKKyAgICAgIFRoZSBydW5uaW5nX3RpbWUgb2YgdGhlIGJ1ZmZlciB0aGF0IGdlbmVyYXRlZCB0aGUgUW9TIG1lc3NhZ2UuCisKKyAtIHN0cmVhbS10aW1lLCBHX1RZUEVfVUlOVDY0OgorICAgICAgVGhlIHN0cmVhbV90aW1lIG9mIHRoZSBidWZmZXIgdGhhdCBnZW5lcmF0ZWQgdGhlIFFvUyBtZXNzYWdlLgorCisgLSB0aW1lc3RhbXAsIEdfVFlQRV9VSU5UNjQ6CisgICAgICBUaGUgdGltZXN0YW1wIG9mIHRoZSBidWZmZXIgdGhhdCBnZW5lcmF0ZWQgdGhlIFFvUyBtZXNzYWdlLgorCisgLSBkdXJhdGlvbiwgR19UWVBFX1VJTlQ2NDoKKyAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aGUgYnVmZmVyIHRoYXQgZ2VuZXJhdGVkIHRoZSBRb1MgbWVzc2FnZS4KKworCisgLSBqaXR0ZXIsIEdfVFlQRV9JTlQ2NDoKKyAgICAgIFRoZSBkaWZmZXJlbmNlIG9mIHRoZSBydW5uaW5nLXRpbWUgYWdhaW5zdCB0aGUgZGVhZGxpbmUuICBOZWdhdGl2ZQorICAgICAgdmFsdWVzIG1lYW4gdGhlIHRpbWVzdGFtcCB3YXMgb24gdGltZS4gUG9zaXRpdmUgdmFsdWVzIGluZGljYXRlIHRoZQorICAgICAgdGltZXN0YW1wIHdhcyBsYXRlIChhbmQgZHJvcHBlZCkgYnkgdGhhdCBhbW91bnQuIFRoZSBkZWFkbGluZSBjYW4gYmUKKyAgICAgIGEgcmVhbHRpbWUgcnVubmluZ190aW1lIG9yIGFuIGVzdGltYXRlZCBydW5uaW5nX3RpbWUuCisKKyAtIHByb3BvcnRpb24sIEdfVFlQRV9ET1VCTEU6CisgICAgICBMb25nIHRlcm0gcHJlZGljdGlvbiBvZiB0aGUgaWRlYWwgcmF0ZSByZWxhdGl2ZSB0byBub3JtYWwgcmF0ZSB0byBnZXQKKyAgICAgIG9wdGltYWwgcXVhbGl0eS4KKworIC0gcXVhbGl0eSwgR19UWVBFX0lOVDoKKyAgICAgIEFuIGVsZW1lbnQgZGVwZW5kZW50IGludGVnZXIgdmFsdWUgdGhhdCBzcGVjaWZpZXMgdGhlIGN1cnJlbnQgcXVhbGl0eQorICAgICAgbGV2ZWwgb2YgdGhlIGVsZW1lbnQuIFRoZSBkZWZhdWx0IG1heGltdW0gcXVhbGl0eSBpcyAxMDAwMDAwLiAKKworCisgLSBmb3JtYXQsIEdTVF9UWVBFX0ZPUk1BVAorICAgICAgVW5pdHMgb2YgdGhlICdwcm9jZXNzZWQnIGFuZCAnZHJvcHBlZCcgZmllbGRzLiBWaWRlbyBzaW5rcyBhbmQgdmlkZW8KKyAgICAgIGZpbHRlcnMgd2lsbCB1c2UgR1NUX0ZPUk1BVF9CVUZGRVJTIChmcmFtZXMpLiBBdWRpbyBzaW5rcyBhbmQgYXVkaW8gZmlsdGVycworICAgICAgd2lsbCBsaWtlbHkgdXNlIEdTVF9GT1JNQVRfREVGQVVMVCAoc2FtcGxlcykuCisKKyAtIHByb2Nlc3NlZDogR19UWVBFX1VJTlQ2NDoKKyAgICAgIFRvdGFsIG51bWJlciBvZiB1bml0cyBjb3JyZWN0bHkgcHJvY2Vzc2VkIHNpbmNlIHRoZSBsYXN0IHN0YXRlIGNoYW5nZSB0bworICAgICAgUkVBRFkgb3IgYSBmbHVzaGluZyBvcGVyYXRpb24uCisKKyAtIGRyb3BwZWQ6IEdfVFlQRV9VSU5UNjQ6CisgICAgICBUb3RhbCBudW1iZXIgb2YgdW5pdHMgZHJvcHBlZCBzaW5jZSB0aGUgbGFzdCBzdGF0ZSBjaGFuZ2UgdG8gUkVBRFkgb3IgYQorICAgICAgZmx1c2hpbmcgb3BlcmF0aW9uLgorCitUaGUgJ3J1bm5pbmctdGltZScgYW5kICdwcm9jZXNzZWQnIGZpZWxkcyBjYW4gYmUgdXNlZCB0byBlc3RpbWF0ZSB0aGUgYXZlcmFnZQorcHJvY2Vzc2luZyByYXRlIChmcmFtZXJhdGUgZm9yIHZpZGVvKS4KKworRWxlbWVudHMgbWlnaHQgYWRkIGFkZGl0aW9uYWwgZmllbGRzIGluIHRoZSBtZXNzYWdlIHdoaWNoIGFyZSBkb2N1bWVudGVkIGluIHRoZQorcmVsZXZhbnQgZWxlbWVudHMgb3IgYmFzZWNsYXNzZXMuCisKKworQ29sbGVjdGluZyBzdGF0aXN0aWNzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQSBidWZmZXIgd2l0aCB0aW1lc3RhbXAgQjEgYXJyaXZlcyBpbiB0aGUgc2luayBhdCB0aW1lIFQxLiBUaGUgYnVmZmVyCit0aW1lc3RhbXAgaXMgdGhlbiBzeW5jaHJvbml6ZWQgYWdhaW5zdCB0aGUgY2xvY2sgd2hpY2ggeWllbGRzIGEgaml0dGVyIEoxCityZXR1cm4gdmFsdWUgZnJvbSB0aGUgY2xvY2suIFRoZSBqaXR0ZXIgSjEgaXMgc2ltcGx5IGNhbGN1bGF0ZWQgYXMKKworICBKMSA9IENUIC0gQjEKKworV2hlcmUgQ1QgaXMgdGhlIGNsb2NrIHRpbWUgd2hlbiB0aGUgZW50cnkgYXJyaXZlcyBpbiB0aGUgc2luay4gVGhpcyB2YWx1ZQoraXMgY2FsY3VsYXRlZCBpbnNpZGUgdGhlIGNsb2NrIHdoZW4gd2UgcGVyZm9ybSBnc3RfY2xvY2tfZW50cnlfd2FpdCgpLgorCitJZiB0aGUgaml0dGVyIGlzIG5lZ2F0aXZlLCB0aGUgZW50cnkgYXJyaXZlZCBpbiB0aW1lIGFuZCBjYW4gYmUgcmVuZGVyZWQKK2FmdGVyIHdhaXRpbmcgZm9yIHRoZSBjbG9jayB0byByZWFjaCB0aW1lIEIxICh3aGljaCBpcyBhbHNvIENUIC0gSjEpLgorCitJZiB0aGUgaml0dGVyIGlzIHBvc2l0aXZlIGhvd2V2ZXIsIHRoZSBlbnRyeSBhcnJpdmVkIHRvbyBsYXRlIGluIHRoZSBzaW5rIAorYW5kIHNob3VsZCB0aGVyZWZvcmUgYmUgZHJvcHBlZC4gSjEgaXMgdGhlIGFtb3VudCBvZiB0aW1lIHRoZSBlbnRyeSB3YXMgbGF0ZS4KKworQW55IGJ1ZmZlciB0aGF0IGFycml2ZXMgaW4gdGhlIHNpbmsgc2hvdWxkIGdlbmVyYXRlIGEgUW9TIGV2ZW50IHVwc3RyZWFtLgorCitVc2luZyB0aGUgaml0dGVyIHdlIGNhbiBjYWxjdWxhdGUgdGhlIHRpbWUgd2hlbiB0aGUgYnVmZmVyIGFycml2ZWQgaW4gdGhlCitzaW5rOiAKKyAgICAgCisgIFQxID0gQjEgKyBKMS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxKQorCitUaGUgdGltZSB0aGUgYnVmZmVyIGxlYXZlcyB0aGUgc2luayBhZnRlciBzeW5jaHJvbmlzYXRpb24gaXMgbWVhc3VyZWQgYXM6CisKKyAgVDIgPSBCMSArIChKMSA8IDAgPyAwIDogSjEpICAgICAgICAgICAgICAgICAgKDIpCisKK0ZvciBidWZmZXJzIHRoYXQgYXJyaXZlIGluIHRpbWUgKEoxIDwgMCkgdGhlIGJ1ZmZlciBsZWF2ZXMgYWZ0ZXIgc3luY2hyb25pc2F0aW9uCit3aGljaCBpcyBleGFjdGx5IEIxLiBMYXRlIGJ1ZmZlcnMgKEoxID49IDApIGxlYXZlIHRoZSBzaW5rIHdoZW4gdGhleSBhcnJpdmUsCit3aGl0aG91dCBhbnkgc3luY2hyb25pc2F0aW9uLCB3aGljaCBpcyBUMiA9IFQxID0gQjEgKyBKMS4KKworVXNpbmcgYSBwcmV2aW91cyBUMCBhbmQgYSBuZXcgVDEsIHdlIGNhbiBjYWxjdWxhdGUgdGhlIHRpbWUgaXQgdG9vayBmb3IKK3Vwc3RyZWFtIHRvIGdlbmVyYXRlIGEgYnVmZmVyIHdpdGggdGltZXN0YW1wIEIxLgorCisgIFBUMSA9IFQxIC0gVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzKQorCitXZSBjYWxsIFBUMSB0aGUgcHJvY2Vzc2luZyB0aW1lIG5lZWRlZCB0byBnZW5lcmF0ZSBidWZmZXIgd2l0aCB0aW1lc3RhbXAgQjEuCisKK01vcmVvdmVyLCBnaXZlbiB0aGUgZHVyYXRpb24gb2YgdGhlIGJ1ZmZlciBEMSwgdGhlIGN1cnJlbnQgZGF0YSByYXRlIChEUjEpIG9mIAordGhlIHVwc3RyZWFtIGVsZW1lbnQgaXMgZ2l2ZW4gYXM6CisKKyAgICAgICBQVDEgICBUMSAtIFQwCisgRFIxID0gLS0tID0gLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICg0KQorICAgICAgIEQxICAgICAgRDEKKworRm9yIHZhbHVlcyAwLjAgPCBEUjEgPD0gMS4wIHRoZSB1cHN0cmVhbSBlbGVtZW50IGlzIHByb2R1Y2luZyBmYXN0ZXIgdGhhbgorcmVhbC10aW1lLiBJZiBEUjEgaXMgZXhhY3RseSAxLjAsIHRoZSBlbGVtZW50IGlzIHJ1bm5pbmcgYXQgYSBwZXJmZWN0IHNwZWVkLgorCitWYWx1ZXMgRFIxID4gMS4wIG1lYW4gdGhhdCB0aGUgdXBzdHJlYW0gZWxlbWVudCBjYW5ub3QgcHJvZHVjZSBidWZmZXJzIG9mCitkdXJhdGlvbiBEMSBpbiByZWFsLXRpbWUuIEl0IGlzIGV4YWN0bHkgRFIxIHRoYXQgdGVsbHMgdGhlIGFtb3VudCBvZiBzcGVlZHVwCit3ZSByZXF1aXJlIGZyb20gdXBzdHJlYW0gdG8gcmVnYWluIHJlYWwtdGltZSBwZXJmb3JtYW5jZS4KKworQW4gZWxlbWVudCB0aGF0IGlzIG5vdCByZWNlaXZpbmcgZW5vdWdoIGRhdGEgaXMgc2FpZCB0byBiZSB1bmRlcmZsb3dlZC4KKworCitFbGVtZW50IG1lYXN1cmVtZW50cworfn5+fn5+fn5+fn5+fn5+fn5+fn4KKworSW4gYWRkaXRpb24gdG8gdGhlIG1lYXN1cmVtZW50cyBvZiB0aGUgZGF0YXJhdGUgb2YgdGhlIHVwc3RyZWFtIGVsZW1lbnQsIGEKK3R5cGljYWwgZWxlbWVudCBtdXN0IGFsc28gbWVhc3VyZSBpdHMgb3duIHBlcmZvcm1hbmNlLiBHbG9iYWwgcGlwZWxpbmUgCitwZXJmb3JtYW5jZSBwcm9ibGVtcyBjYW4gaW5kZWVkIGFsc28gYmUgY2F1c2VkIGJ5IHRoZSBlbGVtZW50IGl0c2VsZiB3aGVuIGl0CityZWNlaXZlcyB0b28gbXVjaCBkYXRhIGl0IGNhbm5vdCBwcm9jZXNzIGluIHRpbWUuIFRoZSBlbGVtZW50IGlzIHRoZW4gc2FpZCB0bworYmUgb3ZlcmZsb3dlZC4KKworCitTaG9ydCB0ZXJtIGNvcnJlY3Rpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgdGltZXN0YW1wIGFuZCBqaXR0ZXIgc2VydmUgYXMgc2hvcnQgdGVybSBjb3JyZWN0aW9uIGluZm9ybWF0aW9uCitmb3IgdXBzdHJlYW0gZWxlbWVudHMuIEluZGVlZCwgZ2l2ZW4gYXJyaXZhbCB0aW1lIFQxIGFzIGdpdmVuIGluICgxKQord2UgY2FuIGJlIGNlcnRhaW4gdGhhdCBidWZmZXJzIHdpdGggYSB0aW1lc3RhbXAgQjIgPCBUMSB3aWxsIGJlIHRvbyBsYXRlCitpbiB0aGUgc2luay4KKworSW4gY2FzZSBvZiBhIHBvc2l0aXZlIGppdHRlciB3ZSBjYW4gdGhlcmVmb3JlIHNlbmQgYSBRb1MgZXZlbnQgd2l0aAorYSB0aW1lc3RhbXAgQjEsIGppdHRlciBKMSBhbmQgcHJvcG9ydGlvbiBnaXZlbiBieSAoNCkuCisKK1RoaXMgYWxsb3dzIGFuIHVwc3RyZWFtIGVsZW1lbnQgdG8gbm90IGdlbmVyYXRlIGFueSBkYXRhIHdpdGggdGltZXN0YW1wcworQjIgPCBUMSwgd2hlcmUgdGhlIGVsZW1lbnQgY2FuIGRlcml2ZSBUMSBhcyBCMSArIEoxLgorCitUaGlzIHdpbGwgZWZmZWN0aXZlbHkgcmVzdWx0IGluIGZyYW1lIGRyb3BzLgorCitUaGUgZWxlbWVudCBjYW4gZXZlbiBkbyBhIGJldHRlciBlc3RpbWF0aW9uIG9mIHRoZSBuZXh0IHZhbGlkIHRpbWVzdGFtcCBpdAorc2hvdWxkIG91dHB1dC4KKworSW5kZWVkLCBnaXZlbiB0aGUgZWxlbWVudCBnZW5lcmF0ZWQgYSBidWZmZXIgd2l0aCB0aW1lc3RhbXAgQjAgdGhhdCBhcnJpdmVkCitpbiB0aW1lIGluIHRoZSBzaW5rIGJ1dCB0aGVuIHJlY2VpdmVkIGEgUW9TIGV2ZW50IHN0YXRpbmcgQjEgYXJyaXZlZCBKMQordG9vIGxhdGUuIFRoaXMgbWVhbnMgZ2VuZXJhdGluZyBCMSB0b29rIChCMSArIEoxKSAtIEIwID0gVDEgLSBUMCA9IFBUMSwgYXMgCitnaXZlbiBpbiAoMykuIEdpdmVuIHRoZSBidWZmZXIgQjEgaGFkIGEgZHVyYXRpb24gRDEgYW5kIGFzc3VtaW5nIHRoYXQKK2dlbmVyYXRpbmcgYSBuZXcgYnVmZmVyIEIyIHdpbGwgdGFrZSB0aGUgc2FtZSBhbW91bnQgb2YgcHJvY2Vzc2luZyB0aW1lLAorYSBiZXR0ZXIgZXN0aW1hdGlvbiBmb3IgQjIgd291bGQgdGhlbiBiZToKKworICBCMiA9IFQxICsgRDIgKiBEUjEKKworIGV4cGFuZGluZyBnaXZlczoKKworICBCMiA9IChCMSArIEoxKSArIEQyICogKEIxICsgSjEgLSBCMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tICAKKwkJICAgICAgICAgICAgIEQxCisKKyBhc3N1bWluZyB0aGUgZHVyYXRpb25zIG9mIHRoZSBmcmFtZXMgYXJlIGVxdWFsIGFuZCB0aHVzIEQxID0gRDI6CisKKyAgQjIgPSAoQjEgKyBKMSkgKyAoQjEgKyBKMSAtIEIwKQorCisgIEIyID0gIDIgKiAoQjEgKyBKMSkgLSBCMAorCisgYWxzbzoKKworICBCMCA9IEIxIC0gRDEKKworIHNvOgorCisgIEIyID0gIDIgKiAoQjEgKyBKMSkgLSAoQjEgLSBEMSkKKworV2hpY2ggeWllbGRzIGEgbW9yZSBhY2N1cmF0ZSBwcmVkaWN0aW9uIGZvciB0aGUgbmV4dCBidWZmZXIgZ2l2ZW4gYXM6CisKKyAgQjIgPSAgQjEgKyAyICogSjEgKyBEMSAgICAgICAgICAgICAgICAgICAgICAgICAgKDUpCisKKworTG9uZyB0ZXJtIGNvcnJlY3Rpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkYXRhcmF0ZSB1c2VkIHRvIGNhbGN1bGF0ZSAoNSkgZm9yIHRoZSBzaG9ydCB0ZXJtIHByZWRpY3Rpb24gaXMgYmFzZWQKK29uIGEgc2luZ2xlIG9ic2VydmF0aW9uLiBBIG1vcmUgYWNjdXJhdGUgZGF0YXJhdGUgY2FuIGJlIG9idGFpbmVkIGJ5CitjcmVhdGluZyBhIHJ1bm5pbmcgYXZlcmFnZSBvdmVyIG11bHRpcGxlIGRhdGFyYXRlIG9ic2VydmF0aW9ucy4KKworVGhpcyBhdmVyYWdlIGlzIGxlc3Mgc3VzY2VwdGlibGUgdG8gc3VkZGVuIGNoYW5nZXMgdGhhdCB3b3VsZCBvbmx5IGluZmx1ZW5jZQordGhlIGRhdGFyYXRlIGZvciBhIHZlcnkgc2hvcnQgcGVyaW9kLgorCitBIHJ1bm5pbmcgYXZlcmFnZSBpcyBjYWxjdWxhdGVkIG92ZXIgdGhlIG9ic2VydmF0aW9ucyBnaXZlbiBpbiAoNCkgYW5kIGlzCit1c2VkIGFzIHRoZSBwcm9wb3J0aW9uIG1lbWJlciBpbiB0aGUgUW9TIGV2ZW50IHRoYXQgaXMgc2VudCB1cHN0cmVhbS4KKworUmVjZWl2ZXJzIG9mIHRoZSBRb1MgZXZlbnQgc2hvdWxkIHBlcm1hbmVudGx5IHJlZHVjZSB0aGVpciBkYXRhcmF0ZSAKK2FzIGdpdmVuIGJ5IHRoZSBwcm9wb3J0aW9uIG1lbWJlci4gRmFpbHVyZSB0byBkbyBzbyB3aWxsIGNlcnRhaW5seSBsZWFkIHRvCittb3JlIGRyb3BwZWQgZnJhbWVzIGFuZCBhIGdlbmVyYWxseSB3b3JzZSBRb1MuCisKKworVGhyb3R0bGluZworLS0tLS0tLS0tLQorCitJbiB0aHJvdHRsZSBtb2RlLCB0aGUgdGltZSBkaXN0YW5jZSBiZXR3ZWVuIGJ1ZmZlcnMgaXMga2VwdCB0byBhIGNvbmZpZ3VyYWJsZQordGhyb3R0bGUgaW50ZXJ2YWwuIFRoaXMgbWVhbnMgdGhhdCBlZmZlY3RpdmVseSB0aGUgYnVmZmVyIHJhdGUgaXMgbGltaXRlZAordG8gMSBidWZmZXIgcGVyIHRocm90dGxlIGludGVydmFsLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGxpbWl0IHRoZSBmcmFtZXJhdGUsCitmb3IgZXhhbXBsZS4KKworV2hlbiBhbiBlbGVtZW50IGlzIGNvbmZpZ3VyZWQgaW4gdGhyb3R0bGluZyBtb2RlICh0aGlzIGlzIHVzdWFsbHkgb25seQoraW1wbGVtZW50ZWQgb24gc2lua3MpIGl0IHNob3VsZCBwcm9kdWNlIFFvUyBldmVudHMgdXBzdHJlYW0gd2l0aCB0aGUgaml0dGVyCitmaWVsZCBzZXQgdG8gdGhlIHRocm90dGxlIGludGVydmFsLiBUaGlzIHNob3VsZCBpbnN0cnVjdCB1cHN0cmVhbSBlbGVtZW50cyB0bworc2tpcCBvciBkcm9wIHRoZSByZW1haW5pbmcgYnVmZmVycyBpbiB0aGUgY29uZmlndXJlZCB0aHJvdHRsZSBpbnRlcnZhbC4KKworVGhlIHByb3BvcnRpb24gZmllbGQgaXMgc2V0IHRvIHRoZSBkZXNpcmVkIHNsb3dkb3duIG5lZWRlZCB0byBnZXQgdGhlCitkZXNpcmVkIHRocm90dGxlIGludGVydmFsLiBJbXBsZW1lbnRhdGlvbnMgY2FuIHVzZSB0aGUgUW9TIFRocm90dGxlIHR5cGUsCit0aGUgcHJvcG9ydGlvbiBhbmQgdGhlIGppdHRlciBtZW1iZXIgdG8gdHVuZSB0aGVpciBpbXBsZW1lbnRhdGlvbnMuIAorCisKK1FvUyBzdHJhdGVnaWVzCistLS0tLS0tLS0tLS0tLQorCitTZXZlcmFsIHN0cmF0ZWdpZXMgZXhpc3QgdG8gcmVkdWNlIHByb2Nlc3NpbmcgZGVsYXkgdGhhdCBtaWdodCBhZmZlY3QKK3JlYWwgdGltZSBwZXJmb3JtYW5jZS4KKworIC0gbG93ZXJpbmcgcXVhbGl0eQorICAgLSBkcm9wcGluZyBmcmFtZXMgKHJlZHVjZSBDUFUvYmFuZHdpZHRoIHVzYWdlKQorICAgLSBzd2l0Y2ggdG8gYSBsb3dlciBkZWNvZGluZy9lbmNvZGluZyBxdWFsaXR5IChyZWR1Y2UgYWxnb3JpdGhtaWMKKyAgICAgY29tcGxleGl0eSkKKyAgIC0gc3dpdGNoIHRvIGEgbG93ZXIgcXVhbGl0eSBzb3VyY2UgKHJlZHVjZSBuZXR3b3JrIHVzYWdlKQorIC0gaW5jcmVhc2luZyB0aHJlYWQgcHJpb3JpdGllcworICAgLSBzd2l0Y2ggdG8gcmVhbC10aW1lIHNjaGVkdWxpbmcKKyAgIC0gYXNzaWduIG1vcmUgQ1BVIGN5Y2xlcyB0byBjcml0aWFsIHBpcGVsaW5lIHBhcnRzCisgICAtIGFzc2lnbiBtb3JlIENQVShzKSB0byBjcml0aWNhbCBwaXBlbGluZSBwYXJ0cworCisKK1FvUyBpbXBsZW1lbnRhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworSGVyZSBmb2xsb3dzIGEgc21hbGwgb3ZlcnZpZXcgb2YgaG93IFFvUyBjYW4gYmUgaW1wbGVtZW50ZWQgaW4gYSByYW5nZSBvZgorZGlmZmVyZW50IHR5cGVzIG9mIGVsZW1lbnRzLgorCisKK0dzdEJhc2VTaW5rCistLS0tLS0tLS0tLQorCitUaGUgcHJpbWFyeSBpbXBsZW1lbnRvciBvZiBRb1MgaXMgR3N0QmFzZVNpbmsuIEl0IHdpbGwgY2FsY3VsYXRlIHRoZSBmb2xsb3dpbmcKK3ZhbHVlczoKKworIC0gdXBzdHJlYW0gcnVubmluZyBhdmVyYWdlIG9mIHByb2Nlc3NpbmcgdGltZSAoNSkgaW4gc3RyZWFtIHRpbWUuCisgLSBydW5uaW5nIGF2ZXJhZ2Ugb2YgYnVmZmVyIGR1cmF0aW9ucy4KKyAtIHJ1bm5pbmcgYXZlcmFnZSBvZiByZW5kZXIgdGltZSAoaW4gc3lzdGVtIHRpbWUpCisgLSByZW5kZXJlZC9kcm9wcGVkIGJ1ZmZlcnMKKworVGhlIHByb2Nlc3NpbmcgdGltZSBhbmQgdGhlIGF2ZXJhZ2UgYnVmZmVyIGR1cmF0aW9ucyB3aWxsIGJlIHVzZWQgdG8KK2NhbGN1bGF0ZSBhIHByb3BvcnRpb24uCisKK1RoZSBwcm9jZXNzaW5nIHRpbWUgaW4gc3lzdGVtIHRpbWUgaXMgY29tcGFyZWQgdG8gcmVuZGVyIHRpbWUgdG8gZGVjaWRlIGlmCit0aGUgbWFqb3JpdHkgb2YgdGhlIHRpbWUgaXMgc3BlbmQgdXBzdHJlYW0gb3IgaW4gdGhlIHNpbmsgaXRzZWxmLiBUaGlzIHZhbHVlCitpcyB1c2VkIHRvIGRlY2lkZSBvdmVyZmxvdyBvciB1bmRlcmZsb3cuCisKK1RoZSBudW1iZXIgb2YgcmVuZGVyZWQgYW5kIGRyb3BwZWQgYnVmZmVycyBpcyB1c2VkIHRvIHF1ZXJ5IHN0YXRzIG9uIHRoZSBzaW5rLgorCitBIFFvUyBldmVudCB3aXRoIHRoZSBtb3N0IGN1cnJlbnQgdmFsdWVzIGlzIHNlbnQgdXBzdHJlYW0gZm9yIGVhY2ggYnVmZmVyIAordGhhdCB3YXMgcmVjZWl2ZWQgYnkgdGhlIHNpbmsuCisKK05vcm1hbGx5IFFvUyBpcyBvbmx5IGVuYWJsZWQgZm9yIHZpZGVvIHBpcGVsaW5lcy4gVGhlIHJlYXNvbiBiZWluZyB0aGF0IGRyb3BzCitpbiBhdWRpbyBhcmUgbW9yZSBkaXN0dXJiaW5nIHRoYW4gZHJvcHBpbmcgdmlkZW8gZnJhbWVzLiBBbHNvIHZpZGVvIHJlcXVpcmVzIGluIAorZ2VuZXJhbCBtb3JlIHByb2Nlc3NpbmcgdGhhbiBhdWRpby4KKworTm9ybWFsbHkgdGhlcmUgaXMgYSB0aHJlc2hvbGQgZm9yIHdoZW4gYnVmZmVycyBnZXQgZHJvcHBlZCBpbiBhIHZpZGVvIHNpbmsuIEZyYW1lcwordGhhdCBhcnJpdmUgMjAgbWlsbGlzZWNvbmRzIGxhdGUgYXJlIHN0aWxsIHJlbmRlcmVkIGFzIGl0IGlzIG5vdCBub3RpY2VhYmxlIGZvcgordGhlIGh1bWFuIGV5ZS4KKworQSBRb1MgbWVzc2FnZSBpcyBwb3N0ZWQgd2hlbmV2ZXIgYSAocGFydCBvZiBhKSBidWZmZXIgaXMgZHJvcHBlZC4KKworSW4gdGhyb3R0bGUgbW9kZSwgdGhlIHNpbmsgc2VuZHMgUW9TIGV2ZW50IHVwc3RyZWFtIHdpdGggdGhlIHRpbWVzdGFtcCBzZXQgdG8KK3RoZSBydW5uaW5nX3RpbWUgb2YgdGhlIGxhdGVzdCBidWZmZXIgYW5kIHRoZSBqaXR0ZXIgc2V0IHRvIHRoZSB0aHJvdHRsZSBpbnRlcnZhbC4KK0lmIHRoZSB0aHJvdHRsZWQgYnVmZmVyIGlzIGxhdGUsIHRoZSBsYXRlbmVzcyBpcyBzdWJ0cmFjdGVkIGZyb20gdGhlIHRocm90dGxlCitpbnRlcnZhbCBpbiBvcmRlciB0byBrZWVwIHRoZSBkZXNpcmVkIHRocm90dGxlIGludGVydmFsLiAKKworCitHc3RCYXNlVHJhbnNmb3JtCistLS0tLS0tLS0tLS0tLS0tCisKK1RyYW5zZm9ybSBlbGVtZW50cyBjYW4gZW50aXJlbHkgc2tpcCB0aGUgdHJhbnNmb3JtIGJhc2VkIG9uIHRoZSB0aW1lc3RhbXAgYW5kCitqaXR0ZXIgdmFsdWVzIG9mIHJlY2VudCBRb1MgZXZlbnQgc2luY2UgdGhlc2UgYnVmZmVycyB3aWxsIGNlcnRhaW5seSBhcnJpdmUKK3RvbyBsYXRlLgorCitXaXRoIGFueSBpbnRlcm1lZGlhdGUgZWxlbWVudCwgdGhlIGVsZW1lbnQgc2hvdWxkIG1lYXN1cmUgaXRzIHBlcmZvcm1hbmNlIHRvCitkZWNpZGUgaWYgaXQgaXMgcmVzcG9uc2libGUgZm9yIHRoZSBxdWFsaXR5IHByb2JsZW1zIG9yIGFueSB1cHN0cmVhbS9kb3duc3RyZWFtCitlbGVtZW50LgorCitzb21lIHRyYW5zZm9ybXMgY2FuIHJlZHVjZSB0aGUgY29tcGxleGl0eSBvZiB0aGVpciBhbGdvcml0aG1zLiBEZXBlbmRpbmcgb24gdGhlCithbGdvcml0aG0sIHRoZSBjaGFuZ2VzIGluIHF1YWxpdHkgbWF5IGhhdmUgZGlzdHVyYmluZyB2aXN1YWwgb3IgYXVkaWJsZSBlZmZlY3QgCit0aGF0IHNob3VsZCBiZSBhdm9pZGVkLgorCitBIFFvUyBtZXNzYWdlIHNob3VsZCBiZSBwb3N0ZWQgd2hlbiBhIGZyYW1lIGlzIGRyb3BwZWQgb3Igd2hlbiB0aGUgcXVhbGl0eQorb2YgdGhlIGZpbHRlciBpcyByZWR1Y2VkLiBUaGUgcXVhbGl0eSBtZW1iZXIgaW4gdGhlIFFPUyBtZXNzYWdlIHNob3VsZCByZWZsZWN0Cit0aGUgcXVhbGl0eSBzZXR0aW5nIG9mIHRoZSBmaWx0ZXIuCisKKworVmlkZW8gRGVjb2RlcnMKKy0tLS0tLS0tLS0tLS0tCisKK0EgdmlkZW8gZGVjb2RlciBjYW4sIGJhc2VkIG9uIHRoZSBjb2RlYyBpbiB1c2UsIGRlY2lkZSB0byBub3QgZGVjb2RlIGludGVybWVkaWF0ZQorZnJhbWVzLiBBIHR5cGljYWwgY29kZWMgY2FuIGZvciBleGFtcGxlIHNraXAgdGhlIGRlY29kaW5nIG9mIEItZnJhbWVzIHRvIHJlZHVjZQordGhlIENQVSB1c2FnZSBhbmQgZnJhbWVyYXRlLgorCitJZiBlYWNoIGZyYW1lIGlzIGluZGVwZW5kYW50bHkgZGVjb2RhYmxlLCBhbnkgYXJiaXRyYXJ5IGZyYW1lIGNhbiBiZSBza2lwcGVkIGJhc2VkCitvbiB0aGUgdGltZXN0YW1wIGFuZCBqaXR0ZXIgdmFsdWVzIG9mIHRoZSBsYXRlc3QgUW9TIGV2ZW50LiBJbiBhZGRpdGlvbiBjYW4gdGhlCitwcm9wb3J0aW9uIG1lbWJlciBiZSB1c2VkIHRvIHBlcm1hbmVudGx5IHNraXAgZnJhbWVzLgorCitJdCBpcyBzdWdnZXN0ZWQgdG8gYWRqdXN0IHRoZSBxdWFsaXR5IGZpZWxkIG9mIHRoZSBRb1MgbWVzc2FnZSB3aXRoIHRoZSBleHBlY3RlZAorYW1vdW50IG9mIGRyb3BwZWQgZnJhbWVzIChza2lwcGluZyBCIGFuZC9vciBQIGZyYW1lcykuIFRoaXMgZGVwZW5kcyBvbiB0aGUKK3BhcnRpY3VsYXIgc3BhY2luZyBvZiBCIGFuZCBQIGZyYW1lcyBpbiB0aGUgc3RyZWFtLiBJZiB0aGUgcXVhbGl0eSBjb250cm9sIHdvdWxkCityZXN1bHQgaW4gaGFsZiBvZiB0aGUgZnJhbWVzIHRvIGJlIGRyb3BwZWQgKHR5cGljYWwgQiBmcmFtZSBza2lwcGluZyksIHRoZQorcXVhbGl0eSBmaWVsZCB3b3VsZCBiZSBzZXQgdG8gMTAwMDAwMCAqIDEvMiA9IDUwMDAwMC4gSWYgYSB0eXBpY2FsIEkgZnJhbWUgc3BhY2luZworb2YgMTggZnJhbWVzIGlzIHVzZWQsIHNraXBwaW5nIEIgYW5kIFAgZnJhbWVzIHdvdWxkIHJlc3VsdCBpbiAxNyBkcm9wcGVkIGZyYW1lcworb3IgMSBkZWNvZGVkIGZyYW1lIGV2ZXJ5IDE4IGZyYW1lcy4gVGhlIHF1YWxpdHkgbWVtYmVyIHNob3VsZCBiZSBzZXQgdG8KKzEwMDAwMDAgKiAxLzE4ID0gNTU1NTUuCisKKyAtIHNraXBwaW5nIEIgZnJhbWVzOiBxdWFsaXR5ID0gNTAwMDAwCisgLSBza2lwcGluZyBQL0IgZnJhbWVzOiBxdWFsaXR5ID0gNTU1NTUgKGZvciBJLWZyYW1lIHNwYWNpbmcgb2YgMTggZnJhbWVzKQorCisKK0RlbXV4ZXJzCistLS0tLS0tLQorCitEZW11eGVycyB1c3VhbGx5IGNhbm5vdCBkbyBhIGxvdCByZWdhcmRpbmcgUW9TIGV4Y2VwdCBmb3Igc2tpcHBpbmcgZnJhbWVzIHRvIHRoZSBuZXh0CitrZXlmcmFtZSB3aGVuIGEgbGF0ZW5lc3MgUW9TIGV2ZW50IGFycml2ZXMgb24gYSBzb3VyY2UgcGFkLgorCitBIGRlbXV4ZXIgY2FuIGhvd2V2ZXIgbWVhc3VyZSBpZiB0aGUgcGVyZm9ybWFuY2UgcHJvYmxlbXMgYXJlIHVwc3RyZWFtIG9yIGRvd25zdHJlYW0KK2FuZCBmb3J3YXJkIGFuIHVwZGF0ZWQgUW9TIGV2ZW50IHVwc3RyZWFtLgorCitNb3N0IGRlbXV4ZXJzIHRoYXQgaGF2ZSBtdWx0aXBsZSBvdXRwdXQgcGFkcyBtaWdodCBuZWVkIHRvIGNvbWJpbmUgdGhlIFFvUworZXZlbnRzIG9uIGFsbCB0aGUgcGFkcyBhbmQgZGVyaXZlIGFuIGFnZ3JlZ2F0ZWQgUW9TIGV2ZW50IGZvciB0aGUgdXBzdHJlYW0gZWxlbWVudC4KKworCitTb3VyY2VzCistLS0tLS0tCisKK1RoZSBRb1MgZXZlbnRzIG9ubHkgYXBwbHkgdG8gcHVzaCBiYXNlZCBzb3VyY2VzIHNpbmNlIHB1bGwgYmFzZWQgc291cmNlcyBhcmUgZW50aXJlbHkKK2NvbnRyb2xsZWQgYnkgYW5vdGhlciBkb3duc3RyZWFtIGVsZW1lbnQuCisKK1NvdXJjZXMgY2FuIHJlY2VpdmUgYSBvdmVyZmxvdyBvciB1bmRlcmZsb3cgZXZlbnQgdGhhdCBjYW4gYmUgdXNlZCB0byBzd2l0Y2ggdG8KK2xlc3MgZGVtYW5kaW5nIHNvdXJjZSBtYXRlcmlhbC4gSW4gY2FzZSBvZiBhIG5ldHdvcmsgc3RyZWFtLCBhIHN3aXRjaCBjb3VsZCBiZSBkb25lCit0byBhIGxvd2VyIG9yIGhpZ2hlciBxdWFsaXR5IHN0cmVhbSBvciBhZGRpdGlvbmFsIGVuaGFuY2VtZW50IGxheWVycyBjb3VsZCBiZSB1c2VkCitvciBpZ25vcmVkLgorCitMaXZlIHNvdXJjZXMgd2lsbCBhdXRvbWF0aWNhbGx5IGRyb3AgZGF0YSB3aGVuIGl0IHRha2VzIHRvbyBsb25nIHRvIHByb2Nlc3MgdGhlIGRhdGEgCit0aGF0IHRoZSBlbGVtZW50IHB1c2hlcyBvdXQuIAorCitMaXZlIHNvdXJjZXMgc2hvdWxkIHBvc3QgYSBRb1MgbWVzc2FnZSB3aGVuIGRhdGEgaXMgZHJvcHBlZC4KKwpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1xdWVyeS50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LXF1ZXJ5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTczYzIxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9kZXNpZ24vcGFydC1xdWVyeS50eHQKQEAgLTAsMCArMSw5NyBAQAorUXVlcnkKKy0tLS0tCisKK05PVEU6IHRoaXMgaXMgaW1wbGVtZW50ZWQgYXMgcHJvcG9zZWQKKworUHVycG9zZQorfn5+fn5+fgorCitRdWVyaWVzIGFyZSB1c2VkIHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RyZWFtLiAKK0EgcXVlcnkgaXMgc3RhcnRlZCBvbiBhIHNwZWNpZmljIHBhZCBhbmQgdHJhdmVscyB1cCBvciBkb3duc3RyZWFtLgorCitUeXBlcyBvZiBxdWVyaWVzCit+fn5+fn5+fn5+fn5+fn5+CisKKyAgLSBnZXQgbGVuZ3RoIG9mIHN0cmVhbQorICAtIGdldCBwb3NpdGlvbiBpbiBzdHJlYW0KKyAgLSBnZXQgc2Vla2luZyBjYXBhYmlsaXRpZXMKKyAgLSBnZXQgbGF0ZW5jeQorICAtIGNvbnZlcnQgb25lIHZhbHVlIHRvIGFub3RoZXIKKyAgLSBxdWVyeSBzdXBwb3J0ZWQgZm9ybWF0cworICAtIHF1ZXJ5IGludGVybmFsIGxpbmtzLgorCitDdXJyZW50IGltcGxlbWVudGF0aW9uCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKyAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgcXVlcnkgcmVxdWlyZXMgcGFkcyB0byBpbXBsZW1lbnQgdGhlIAorICBmb2xsb3dpbmcgZnVuY3Rpb25zOgorCisgICAgIGdib29sZWFuICAgICAgICAgICAgICAgICgqR3N0UGFkQ29udmVydEZ1bmN0aW9uKSAgICAgICAgKEdzdFBhZCAqcGFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RGb3JtYXQgc3JjX2Zvcm1hdCwgIGdpbnQ2NCAgc3JjX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RGb3JtYXQgKmRlc3RfZm9ybWF0LCBnaW50NjQgKmRlc3RfdmFsdWUpOworICAgICBnYm9vbGVhbiAgICAgICAgICAgICAgICAoKkdzdFBhZFF1ZXJ5RnVuY3Rpb24pICAgICAgICAgIChHc3RQYWQgKnBhZCwgR3N0UXVlcnlUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEZvcm1hdCAqZm9ybWF0LCBnaW50NjQgICp2YWx1ZSk7CisgICAgIEdMaXN0KiAgICAgICAgICAgICAgICAgICgqR3N0UGFkSW50TGlua0Z1bmN0aW9uKSAgICAgICAgKEdzdFBhZCAqcGFkKTsKKyAgICAgY29uc3QgR3N0Rm9ybWF0KiAgICAgICAgKCpHc3RQYWRGb3JtYXRzRnVuY3Rpb24pICAgICAgICAoR3N0UGFkICpwYWQpOworICAgICBjb25zdCBHc3RFdmVudE1hc2sqICAgICAoKkdzdFBhZEV2ZW50TWFza0Z1bmN0aW9uKSAgICAgIChHc3RQYWQgKnBhZCk7CisgICAgIGNvbnN0IEdzdFF1ZXJ5VHlwZSogICAgICgqR3N0UGFkUXVlcnlUeXBlRnVuY3Rpb24pICAgICAgKEdzdFBhZCAqcGFkKTsKKworICBNb3N0IG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHZlcnkgZXh0ZW5zaWJsZSBpbiBwYXJ0aWN1bGFyLAorICB0aGUgcXVlcnlmdW5jdGlvbiBjYW4gb25seSByZXR1cm4gb25lIHZhbHVlLgorCisKK1JlcXVpcmVtZW50cworfn5+fn5+fn5+fn5+CisKKyAgLSBtdWx0aXBsZSByZXR1cm4gdmFsdWVzLCBncm91cGVkIHRvZ2V0aGVyIHdoZW4gdGhleSBtYWtlIHNlbnNlLgorICAtIG9uZSBwYWQgZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUgcXVlcnkKKyAgLSBleHRlbnNpYmxlIHF1ZXJpZXMuCisKK1Byb3Bvc2l0aW9uCit+fn5+fn5+fn5+fgorCisgIC0gZGVmaW5lIEdzdFF1ZXJ5IGV4dGVuZGluZyBHc3RNaW5pT2JqZWN0IGFuZCBjb250YWluaW5nIGEgR3N0U3RydWN0dXJlIChzZWUgR3N0TWVzc2FnZSkKKyAgLSBkZWZpbmUgc3RhbmRhcmQgcXVlcnkgdHlwZXMgKHNlZSBwcm9wb3NlZCB0eXBlcykKKyAgLSBkZWZpbmUgbWV0aG9kcyB0byBjcmVhdGUgYSBwYXJzZSB0aGUgcmVzdWx0cyBpbiB0aGUgR3N0UXVlcnkuCisgIC0gZGVmaW5lIHBhZCBtZXRob2Q6CisKKyAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgKCpHc3RQYWRRdWVyeUZ1bmN0aW9uKSAgICAgICAgICAoR3N0UGFkICpwYWQsIEdzdFF1ZXJ5ICpxdWVyeSk7CisKKyAgICBwYWQgcmV0dXJucyByZXN1bHQgaW4gcXVlcnkgc3RydWN0dXJlIGFuZCBUUlVFIGFzIHJlc3VsdCBvciBGQUxTRSB3aGVuCisgICAgcXVlcnkgaXMgbm90IHN1cHBvcnRlZC4KKworUHJvcG9zZWQgdHlwZXMKK35+fn5+fn5+fn5+fn5+CisKKyAtIEdTVF9RVUVSWV9TRUVLSU5HOgorICAgCisgICAgIGdldCBpbmZvIG9uIGhvdyBzZWVraW5nIGNhbiBiZSBkb25lIAorICAgICAgIC0gZ2V0cmFuZ2UsIHdpdGgvd2l0aG91dCBvZmZzZXQvc2l6ZQorICAgICAgIC0gcmFuZ2VzIHdoZXJlIHNlZWtpbmcgaXMgZWZmaWNpZW50IChmb3IgY2FjaGluZyBuZXR3b3JrIHNvdXJjZXMpCisgICAgICAgLSBmbGFncyBkZXNjcmliaW5nIHNlZWtpbmcgYmVoYXZpb3VyIChmb3J3YXJkLCBiYWNrd2FyZCwgc2VnbWVudHMsCisJICAgICAgICAgICAgIHBsYXkgYmFja3dhcmRzLCAuLi4pCisKKyAtIEdTVF9RVUVSWV9QT1NJVElPTjoKKyAgCisgICAgIGdldCBpbmZvIG9uIGN1cnJlbnQgcG9zaXRpb24gb2YgdGhlIHN0cmVhbSBpbiBzdHJlYW1fdGltZS4KKworIC0gR1NUX1FVRVJZX0RVUkFUSU9OOgorCisgICAgIGdldCBpbmZvIG9uIHRoZSB0b3RhbCBkdXJhdGlvbiBvZiB0aGUgc3RyZWFtLgorIAorIC0gR1NUX1FVRVJZX0xBVEVOQ1k6CisKKyAgICAgZ2V0IGFtb3VudCBvZiBsYXRlbmN5IGludHJvZHVjZWQgaW4gdGhlIHBpcGVsaW5lLiAKKworIC0gR1NUX1FVRVJZX1NFR01FTlQ6CisKKyAgICAgZ2V0IGluZm8gYWJvdXQgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIHBsYXliYWNrIHNlZ21lbnQuCisKKyAtIEdTVF9RVUVSWV9DT05WRVJUOgorCisgICAgIGNvbnZlcnQgZm9ybWF0L3ZhbHVlIHRvIGFub3RoZXIgZm9ybWF0L3ZhbHVlIHBhaXIuCisKKyAtIEdTVF9RVUVSWV9GT1JNQVRTOgorCisgICAgIHJldHVybiBsaXN0IG9mIHN1cHBvcnRlZCBmb3JtYXRzIHRoYXQgY2FuIGJlIHVzZWQgZm9yIEdTVF9RVUVSWV9DT05WRVJULgorCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LXJlbGF0aW9ucy50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LXJlbGF0aW9ucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIzODI5NgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZGVzaWduL3BhcnQtcmVsYXRpb25zLnR4dApAQCAtMCwwICsxLDQ5MSBAQAorT2JqZWN0IHJlbGF0aW9uIHR5cGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIHJlbGF0aW9ucyBiZXR3ZWVuIG9iamVjdHMgdGhhdCBleGlzdCBpbiBHU3RyZWFtZXIuCitJdCB3aWxsIGFsc28gZGVzY3JpYmUgdGhlIHdheSBvZiBoYW5kbGluZyB0aGUgcmVsYXRpb24gd3J0IGxvY2tpbmcgYW5kIAorcmVmY291bnRpbmcuCisKK3BhcmVudC1jaGlsZCByZWxhdGlvbgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKyAgICAgICstLS0tLS0tLS0rICAgICstLS0tLS0tKworICAgICAgfCBwYXJlbnQgIHwgICAgfCBjaGlsZCB8CisgKi0tLT58ICAgICAgICotLS0tLT58ICAgICAgIHwKKyAgICAgIHwgICAgICAgRjF8PC0tLS0tKiAgICAxfAorICAgICAgKy0tLS0tLS0tLSsgICAgKy0tLS0tLS0rCisKKyAtIHByb3BlcnRpZXMKKworICAgLSBwYXJlbnQgaGFzIHJlZmVyZW5jZXMgdG8gbXVsdGlwbGUgY2hpbGRyZW4KKyAgIC0gY2hpbGQgaGFzIHJlZmVyZW5jZSB0byBwYXJlbnQKKyAgIC0gcmVmZXJlbmNlIGZpZWxkcyBwcm90ZWN0ZWQgd2l0aCBMT0NLCisgICAtIHRoZSByZWZlcmVuY2UgaGVsZCBieSBlYWNoIGNoaWxkIHRvIHRoZSBwYXJlbnQgaXMKKyAgICAgTk9UIHJlZmxlY3RlZCBpbiB0aGUgcmVmY291bnQgb2YgdGhlIHBhcmVudC4KKyAgIC0gdGhlIHBhcmVudCByZW1vdmVzIHRoZSBmbG9hdGluZyBmbGFnIG9mIHRoZSBjaGlsZCB3aGVuIHRha2luZworICAgICBvd25lcnNoaXAuCisgICAtIHRoZSBhcHBsaWNhdGlvbiBoYXMgdmFsaWQgcmVmZXJlbmNlIHRvIHBhcmVudAorICAgLSBjcmVhdGlvbi9kZXN0cnVjdGlvbiByZXF1aXJlcyB0d28gdW5uZXN0ZWQgbG9ja3MgYW5kIDEgcmVmY291bnQuCisKKyAtIHVzYWdlIGluIEdTdHJlYW1lcgorCisgICAgR3N0QmluIC0+IEdzdEVsZW1lbnQKKyAgICBHc3RFbGVtZW50IC0+IEdzdFJlYWxQYWQKKworIC0gbGlmZWN5Y2xlCisgCisgYSkgb2JqZWN0IGNyZWF0aW9uCisKKyAgICBUaGUgYXBwbGljYXRpb24gY3JlYXRlcyB0d28gb2JqZWN0IGFuZCBob2xkcyBhIHBvaW50ZXIKKyAgICB0byB0aGVtLiBUaGUgb2JqZWN0cyBhcmUgaW5pdGlhbGx5IEZMT0FUSU5HIHdpdGggYSByZWZjb3VudAorICAgIG9mIDEuCisKKyAgICAgICAgICstLS0tLS0tLS0rICAgICAgICAgICAgICArLS0tLS0tLSsKKyAgICAqLS0tPnwgcGFyZW50ICB8ICAgICAgICAgKi0tLT58IGNoaWxkIHwKKyAgICAgICAgIHwgICAgICAgKiB8ICAgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgIHwgICAgICAgRjF8ICAgICAgICAgICAgICB8ICogICBGMXwKKyAgICAgICAgICstLS0tLS0tLS0rICAgICAgICAgICAgICArLS0tLS0tLSsKKworIGIpIGVzdGFibGlzaGluZyB0aGUgcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcAorCisgICAgVGhlIGFwcGxpY2F0aW9uIHRoZW4gY2FsbHMgYSBtZXRob2Qgb24gdGhlIHBhcmVudCBvYmplY3QgdG8gdGFrZQorICAgIG93bmVyc2hpcCBvZiB0aGUgY2hpbGQgb2JqZWN0LiBUaGUgcGFyZW50IHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcKKyAgICBhY3Rpb25zOgorCisgICAgICByZXN1bHQgPSBfc2V0X3BhcmVudCAoY2hpbGQsIHBhcmVudCk7CisgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAgIExPQ0sgKHBhcmVudCk7CisgICAgICAgIHJlZl9wb2ludGVyID0gY2hpbGQ7CisKKyAgICAgICAgLi4gdXBkYXRlIG90aGVyIGRhdGEgc3RydWN0dXJlcyAuLgorICAgICAgICBVTkxPQ0sgKHBhcmVudCk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgLi4gY2hpbGQgaGFkIHBhcmVudCAuLgorICAgICAgfQorCisgICAgVGhlIF9zZXRfcGFyZW50KCkgbWV0aG9kIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgYWN0aW9uczoKKyAgICAKKyAgICAgIExPQ0sgKGNoaWxkKTsKKyAgICAgIGlmIChjaGlsZC0+cGFyZW50ICE9IE5VTEwpIHsKKyAgICAgICAgVU5MT0NLIChjaGlsZCk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgIH0KKyAgICAgIGlmIChJU19GTE9BVElORyAoY2hpbGQpKSB7CisgICAgICAgIFVOU0VUIChjaGlsZCwgRkxPQVRJTkcpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIF9yZWYgKGNoaWxkKTsKKyAgICAgIH0KKyAgICAgIGNoaWxkLT5wYXJlbnQgPSBwYXJlbnQ7CisgICAgICBVTkxPQ0sgKGNoaWxkKTsKKyAgICAgIF9zaWduYWwgKFBBUkVOVF9TRVQsIGNoaWxkLCBwYXJlbnQpOworICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAKKyAgICBUaGUgZnVuY3Rpb24gYXRvbWljYWxseSBjaGVja3MgaWYgdGhlIGNoaWxkIGhhcyBubyBwYXJlbnQgeWV0CisgICAgYW5kIHdpbGwgc2V0IHRoZSBwYXJlbnQgaWYgbm90LiBJdCB3aWxsIGFsc28gc2luayB0aGUgY2hpbGQsIG1lYW5pbmcKKyAgICBhbGwgZmxvYXRpbmcgcmVmZXJlbmNlcyB0byB0aGUgY2hpbGQgYXJlIGludmFsaWQgbm93IGFzIGl0IHRha2VzCisgICAgb3ZlciB0aGUgcmVmY291bnQgb2YgdGhlIG9iamVjdC4KKworICAgIFZpc3VhbGx5OgorCisgICAgICBhZnRlciBfc2V0X3BhcmVudCgpIHJldHVybnMgVFJVRToKKworICAgICAgICAgICstLS0tLS0tLS0rICAgICAgICAgICAgKy0tLS0tLS0rCisgICAgKi0tLS0+fCBwYXJlbnQgIHwgICAgICAqLS8vLT58IGNoaWxkIHwKKyAgICAgICAgICB8ICAgICAgICogfCAgICAgICAgICAgIHwgICAgICAgfAorICAgICAgICAgIHwgICAgICAgRjF8PC0tLS0tLS0tLS0tLS0qICAgIDF8CisgICAgICAgICAgKy0tLS0tLS0tLSsgICAgICAgICAgICArLS0tLS0tLSsKKworICAgICAgYWZ0ZXIgcGFyZW50IHVwZGF0ZXMgcmVmX3BvaW50ZXIgdG8gY2hpbGQuCisKKyAgICAgICAgICArLS0tLS0tLS0tKyAgICAgICAgKy0tLS0tLS0rCisgICAgKi0tLS0+fCBwYXJlbnQgIHwgICotLy8tPnwgY2hpbGQgfAorICAgICAgICAgIHwgICAgICAgKi0tLS0tLS0tLT58ICAgICAgIHwKKyAgICAgICAgICB8ICAgICAgIEYxfDwtLS0tLS0tLS0qICAgIDF8CisgICAgICAgICAgKy0tLS0tLS0tLSsgICAgICAgICstLS0tLS0tKworICAgICAKKyAgIC0gb25seSBvbmUgcGFyZW50IGlzIGFibGUgdG8gX3NpbmsgdGhlIHNhbWUgb2JqZWN0IGJlY2F1c2UgdGhlCisgICAgIF9zZXRfcGFyZW50KCkgbWV0aG9kIGlzIGF0b21pYy4KKyAgIC0gc2luY2Ugb25seSBvbmUgcGFyZW50IGlzIGFibGUgdG8gX3NldF9wYXJlbnQoKSB0aGUgb2JqZWN0LCBvbmx5CisgICAgIG9uZSB3aWxsIGFkZCBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0LgorICAgLSBzaW5jZSB0aGUgcGFyZW50IGNhbiBob2xkIG11bHRpcGxlIHJlZmVyZW5jZXMgdG8gY2hpbGRyZW4sIHdlIGRvbid0CisgICAgIG5lZWQgdG8gbG9jayB0aGUgcGFyZW50IHdoZW4gbG9ja2luZyB0aGUgY2hpbGQuIE1hbnkgdGhyZWFkcyBjYW4KKyAgICAgY2FsbCBfc2V0X3BhcmVudCgpIG9uIHRoZSBjaGlsZHJlbiB3aXRoIHRoZSBzYW1lIHBhcmVudCwgdGhlIHBhcmVudAorICAgICBjYW4gdGhlbiBhZGQgYWxsIHRob3NlIHRvIGl0cyBsaXN0cy4KKworICAgTm90ZTogdGhhdCB0aGUgc2lnbmFsIGlzIGVtaXRlZCBiZWZvcmUgdGhlIHBhcmVudCBoYXMgYWRkZWQgdGhlIAorICAgZWxlbWVudCB0byBpdHMgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIGlzIG5vdCBhIHByb2JsZW0KKyAgIHNpbmNlIHRoZSBwYXJlbnQgdXN1YWxseSBoYXMgaGlzIG93biBzaWduYWwgdG8gaW5mb3JtIHRoZSBhcHAgdGhhdAorICAgdGhlIGNoaWxkIHdhcyByZWZmZWQuIE9uZSBwb3NzaWJsZSBzb2x1dGlvbiB3b3VsZCBiZSB0byB1cGRhdGUgdGhlCisgICBpbnRlcm5hbCBzdHJ1Y3R1cmUgZmlyc3QgYW5kIHRoZW4gcGVyZm9ybSBhIHJvbGxiYWNrIGlmIHRoZSBfc2V0X3BhcmVudCgpCisgICBmYWlsZWQuIFRoaXMgaXMgbm90IGEgZ29vZCBzb2x1dGlvbiBhcyBpdGVyYXRvcnMgbWlnaHQgZ3JhYiB0aGUKKyAgICdoYWxmLWFkZGVkJyBjaGlsZCB0b28gc29vbi4KKyAgIAorIGMpIHVzaW5nIHRoZSBwYXJlbnQtY2hpbGQgcmVsYXRpb25zaGlwCisgICAKKyAgICAtIHNpbmNlIHRoZSBpbml0aWFsIGZsb2F0aW5nIHJlZmVyZW5jZSB0byB0aGUgY2hpbGQgb2JqZWN0IGJlY2FtZQorICAgICAgaW52YWxpZCBhZnRlciBnaXZpbmcgaXQgdG8gdGhlIHBhcmVudCwgYW55IHJlZmVyZW5jZSB0byBhIGNoaWxkCisgICAgICBoYXMgYXQgbGVhc3QgYSByZWZjb3VudCA+IDEuCisKKyAgICAtIHRoaXMgbWVhbnMgdGhhdCB1bnJlZmZpbmcgYSBjaGlsZCBvYmplY3QgY2Fubm90IGRlY3JlYXNlIHRoZSByZWZjb3VudAorICAgICAgdG8gMC4gSW4gZmFjdCwgb25seSB0aGUgcGFyZW50IGNhbiBkZXN0cm95IGFuZCBkaXNwb3NlIHRoZSBjaGlsZAorICAgICAgb2JqZWN0LgorCisgICAgLSBnaXZlbiBhIHJlZmVyZW5jZSB0byB0aGUgY2hpbGQgb2JqZWN0LCB0aGUgcGFyZW50IHBvaW50ZXIgaXMgb25seQorICAgICAgdmFsaWQgd2hlbiBob2xkaW5nIHRoZSBjaGlsZCBMT0NLLiBJbmRlZWQsIGFmdGVyIHVubG9ja2luZyB0aGUgY2hpbGQKKyAgICAgIExPQ0ssIHRoZSBwYXJlbnQgY2FuIHVucGFyZW50IHRoZSBjaGlsZCBvciB0aGUgcGFyZW50IGNvdWxkIGV2ZW4gYmVjb21lCisgICAgICBkaXNwb3NlZC4gVG8gYXZvaWQgdGhlIHBhcmVudCBkaXNwb3NlIHByb2JsZW0sIHdoZW4gb2J0YWluaW5nIHRoZSAKKyAgICAgIHBhcmVudCBwb2ludGVyLCBpZiBzaG91bGQgYmUgcmVmZmVkIGJlZm9yZSByZWxlYXNpbmcgdGhlIGNoaWxkIExPQ0suCisgICAgCisgICAgMSkgZ2V0dGluZyBhIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50LgorICAgICAgIAorICAgICAgIC0gYSByZWZlcmVjZSBpcyBoZWxkIHRvIHRoZSBjaGlsZCwgc28gaXQgY2Fubm90IGJlIGRpc3Bvc2VkLgorICAgICAgIAorICAgICAgIExPQ0sgKGNoaWxkKTsKKyAgICAgICBwYXJlbnQgPSBfcmVmIChjaGlsZC0+cGFyZW50KTsKKyAgICAgICBVTkxPQ0sgKGNoaWxkKTsKKworICAgICAgIC4uIHVzZSBwYXJlbnQgLi4KKworICAgICAgIF91bnJlZiAocGFyZW50KTsKKworICAgIDIpIGdldHRpbmcgYSByZWZlcmVuY2UgdG8gYSBjaGlsZAorICAgICAgIAorICAgICAgIC0gYSByZWZlcmVuY2UgdG8gYSBjaGlsZCBjYW4gYmUgb2J0YWluZWQgYnkgcmVmZmluZyBpdCBiZWZvcmUgCisgICAgICAgICBhZGRpbmcgaXQgdG8gdGhlIHBhcmVudCBvciBieSBxdWVyeWluZyB0aGUgcGFyZW50LgorCisgICAgICAgLSB3aGVuIHJlcXVlc3RpbmcgYSBjaGlsZCBmcm9tIHRoZSBwYXJlbnQsIGEgcmVmZXJlbmNlIGlzIGhlbGQgdG8gCisgICAgICAgICB0aGUgcGFyZW50IHNvIGl0IGNhbm5vdCBiZSBkaXNwb3NlZC4gVGhlIHBhcmVudCB3aWxsIHVzZSBpdHMKKyAgICAgICAgIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB0byBsb2NhdGUgdGhlIGNoaWxkIGVsZW1lbnQgYW5kIHdpbGwKKyAgICAgICAgIHJldHVybiBhIHJlZmVyZW5jZSB0byBpdCB3aXRoIGFuIGluY3JlbWVudGVkIHJlZmNvdW50LiBUaGUKKyAgICAgICAgIHJlcXVlc3RlciBzaG91bGQgX3VucmVmKCkgdGhlIGNoaWxkIGFmdGVyIHVzYWdlLgorICAgICAgIAorICAgCisgZCkgZGVzdHJveWluZyB0aGUgcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcAorCisgICAgLSBvbmx5IHRoZSBwYXJlbnQgY2FuIGFjdGl2ZWx5IGRlc3Ryb3kgdGhlIHBhcmVudC1jaGlsZCByZWxhdGlvbnNoaXAKKyAgICAgIHRoaXMgdHlwaWNhbGx5IGhhcHBlbnMgd2hlbiBhIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIHBhcmVudCB0byByZWxlYXNlCisgICAgICBvd25lcnNoaXAgb2YgdGhlIGNoaWxkLgorCisgICAgLSBhIGNoaWxkIHNoYWxsIG5ldmVyIHJlbW92ZSBpdHNlbGYgZnJvbSB0aGUgcGFyZW50LgorCisgICAgLSBzaW5jZSBjYWxsaW5nIGEgbWV0aG9kIG9uIHRoZSBwYXJlbnQgd2l0aCB0aGUgY2hpbGQgYXMgYW4gYXJndW1lbnQKKyAgICAgIHJlcXVpcmVzIHRoZSBjYWxsZXIgdG8gb2J0YWluIGEgdmFsaWQgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZCwgdGhlIGNoaWxkCisgICAgICByZWZjb3VudCBpcyBhdCBsZWFzdCA+IDEuCisKKyAgICAtIHRoZSBwYXJlbnQgd2lsbCBwZXJmb3JtIHRoZSBmb2xvd2luZyBhY3Rpb25zOgorCisgICAgICAgIExPQ0sgKHBhcmVudCk7CisgICAgICAgIGlmIChyZWZfcG9pbnRlciA9PSBjaGlsZCkgeworICAgICAgICAgIHJlZl9wb2ludGVyID0gTlVMTDsKKworICAgICAgICAgIC4uIHVwZGF0ZSBvdGhlciBkYXRhIHN0cnVjdHVyZXMgLi4KKyAgICAgICAgICBVTkxPQ0sgKHBhcmVudCk7CisKKyAgICAgICAgICBfdW5wYXJlbnQgKGNoaWxkKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBVTkxPQ0sgKHBhcmVudCk7CisgICAgICAgICAgLi4gbm90IG91ciBjaGlsZCAuLgorICAgICAgICB9CisKKyAgICBUaGUgX3VucGFyZW50KCkgbWV0aG9kIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgYWN0aW9uczoKKyAgICAKKyAgICAgIExPQ0sgKGNoaWxkKTsKKyAgICAgIGlmIChjaGlsZC0+cGFyZW50ICE9IE5VTEwpIHsKKyAgICAgICAgY2hpbGQtPnBhcmVudCA9IE5VTEw7CisgICAgICAgIFVOTE9DSyAoY2hpbGQpOworICAgICAgICBfc2lnbmFsIChQQVJFTlRfVU5TRVQsIGNoaWxkLCBwYXJlbnQpOworCisgICAgICAgIF91bnJlZiAoY2hpbGQpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIFVOTE9DSyAoY2hpbGQpOworICAgICAgfQorICAgICAgCisgICAgU2luY2UgdGhlIF91bnBhcmVudCgpIG1ldGhvZCB1bnJlZnMgdGhlIGNoaWxkIG9iamVjdCwgaXQgaXMgcG9zc2libGUgdGhhdAorICAgIHRoZSBjaGlsZCBwb2ludGVyIGlzIGludmFsaWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbi4gSWYgdGhlIHBhcmVudCB3YW50cyB0bworICAgIHBlcmZvcm0gb3RoZXIgYWN0aW9ucyBvbiB0aGUgY2hpbGQgKHN1Y2ggYXMgc2lnbmFsIGVtbWlzaW9uKSBpdCBzaG91bGQKKyAgICBfcmVmKCkgdGhlIGNoaWxkIGZpcnN0LgorCisKK3NpbmdsZS1yZWZmZWQgcmVsYXRpb24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworICAgICAgKy0tLS0tLS0tLSsgICAgICAgICstLS0tLS0tLS0rCisgKi0tLT58IG9iamVjdDEgfCAgICotLS0+fCBvYmplY3QyIHwKKyAgICAgIHwgICAgICAgKi0tLS0tLS0tLT58ICAgICAgICAgfAorICAgICAgfCAgICAgICAgMXwgICAgICAgIHwgICAgICAgIDJ8CisgICAgICArLS0tLS0tLS0tKyAgICAgICAgKy0tLS0tLS0tLSsKKworIC0gcHJvcGVydGllcworCisgICAtIG9uZSBvYmplY3QgaGFzIGEgcmVmZXJlbmNlIHRvIGFub3RoZXIKKyAgIC0gcmVmZXJlbmNlIGZpZWxkIHByb3RlY3RlZCB3aXRoIExPQ0sKKyAgIC0gdGhlIHJlZmVyZW5jZSBoZWxkIGJ5IHRoZSBvYmplY3QgaXMgcmVmbGVjdGVkIGluIHRoZQorICAgICByZWZjb3VudCBvZiB0aGUgb3RoZXIgb2JqZWN0LgorICAgLSB0eXBpY2FsbHkgdGhlIG90aGVyIG9iamVjdCBjYW4gYmUgc2hhcmVkIGFtb25nIG11bHRpcGxlCisgICAgIG90aGVyIG9iamVjdHMgd2hlcmUgZWFjaCByZWYgaXMgY291bnRlZCBmb3IgaW4gdGhlCisgICAgIHJlZmNvdW50LgorICAgLSBubyBvYmplY3QgaGFzIG93bmVyc2hpcCBvZiB0aGUgb3RoZXIuIAorICAgLSBlaXRoZXIgc2hhcmVkIHN0YXRlIG9yIGNvcHktb24td3JpdGUuCisgICAtIGNyZWF0aW9uL2Rlc3RydWN0aW9uIHJlcXVpcmVzIG9uZSBsb2NrIGFuZCBvbmUgcmVmY291bnQuCisKKyAtIHVzYWdlCisKKyAgICBHc3RSZWFsUGFkIC0+IEdzdENhcHMKKyAgICBHc3RCdWZmZXIgLT4gR3N0Q2FwcworICAgIEdzdEV2ZW50IC0+IEdzdENhcHMKKyAgICBHc3RFdmVudCAtPiBHc3RPYmplY3QKKyAgICBHc3RNZXNzYWdlIC0+IEdzdENhcHMKKyAgICBHc3RNZXNzYWdlIC0+IEdzdE9iamVjdAorCisgLSBsaWZlY3ljbGUKKworIGEpIFR3byBvYmplY3RzIGV4aXN0IHVubGlua2VkLgorICAgCisgICAgICArLS0tLS0tLS0tKyAgICAgICAgKy0tLS0tLS0tLSsKKyAqLS0tPnwgb2JqZWN0MSB8ICAgKi0tLT58IG9iamVjdDIgfAorICAgICAgfCAgICAgICogIHwgICAgICAgIHwgICAgICAgICB8CisgICAgICB8ICAgICAgICAxfCAgICAgICAgfCAgICAgICAgMXwKKyAgICAgICstLS0tLS0tLS0rICAgICAgICArLS0tLS0tLS0tKworCisgYikgZXN0YWJsaXNoaW5nIHRoZSBzaW5nbGUtcmVmZmVkIHJlbGF0aW9uc2hpcAorCisgICBUaGUgc2Vjb25kIG9iamVjdCBpcyBhdHRhY2hlZCB0byB0aGUgZmlyc3Qgb25lIHVzaW5nIGEgbWV0aG9kCisgICBvbiB0aGUgZmlyc3Qgb2JqZWN0LiBUaGUgc2Vjb25kIG9iamVjdCBpcyByZWZmZWQgYW5kIGEgcG9pbnRlcgorICAgaXMgdXBkYXRlZCBpbiB0aGUgZmlyc3Qgb2JqZWN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOgorCisgICAgIExPQ0sgKG9iamVjdDEpOworICAgICBpZiAob2JqZWN0MS0+cG9pbnRlcikKKyAgICAgICBfdW5yZWYgKG9iamVjdDEtPnBvaW50ZXIpOworICAgICBvYmplY3QxLT5wb2ludGVyID0gX3JlZiAob2JqZWN0Mik7CisgICAgIFVOTE9DSyAob2JqZWN0MSk7CisKKyAgIEFmdGVyIHJlbGVhc2luZyB0aGUgbG9jayBvbiB0aGUgZmlyc3Qgb2JqZWN0IGlzIGlzIG5vdCBzdXJlIHRoYXQKKyAgIG9iamVjdDIgaXMgc3RpbGwgcmVmZmVkIGZyb20gb2JqZWN0MS4KKworICAgICAgKy0tLS0tLS0tLSsgICAgICAgICstLS0tLS0tLS0rCisgKi0tLT58IG9iamVjdDEgfCAgICotLS0+fCBvYmplY3QyIHwKKyAgICAgIHwgICAgICAgKi0tLS0tLS0tLT58ICAgICAgICAgfAorICAgICAgfCAgICAgICAgMXwgICAgICAgIHwgICAgICAgIDJ8CisgICAgICArLS0tLS0tLS0tKyAgICAgICAgKy0tLS0tLS0tLSsKKworIGMpIHVzaW5nIHRoZSBzaW5nbGUtcmVmZmVkIHJlbGF0aW9uc2hpcAorCisgICBUaGUgb25seSB3YXkgdG8gYWNjZXNzIG9iamVjdDIgaXMgYnkgaG9sZGluZyBhIHJlZiB0byBpdCBvciBieQorICAgZ2V0dGluZyB0aGUgcmVmZXJlbmNlIGZyb20gb2JqZWN0MS4KKyAgIFJlYWRpbmcgdGhlIG9iamVjdCBwb2ludGVkIHRvIGJ5IG9iamVjdDEgY2FuIGJlIGRvbmUgbGlrZSB0aGlzOgorCisgICAgIExPQ0sgKG9iamVjdDEpOworICAgICBvYmplY3QyID0gb2JqZWN0MS0+cG9pbnRlcjsKKyAgICAgX3JlZiAob2JqZWN0Mik7CisgICAgIFVOTE9DSyAob2JqZWN0MSk7CisKKyAgICAgLi4gdXNlIG9iamVjdDIgLi4uCisgICAgIF91bnJlZiAob2JqZWN0Mik7CisKKyAgIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtb2RpZmljYXRpb25zIGNhbiBiZSBkb25lIGVpdGhlcgorICAgd2l0aCBjb3B5LW9uLXdyaXRlIG9yIGRpcmVjdGx5IGludG8gdGhlIG9iamVjdC4KKworICAgQ29weSBvbiB3cml0ZSBjYW4gcHJhY3RpY2FsbHkgb25seSBiZSBkb25lIGxpa2UgdGhpczoKKworICAgICBMT0NLIChvYmplY3QxKTsKKyAgICAgb2JqZWN0MiA9IG9iamVjdDEtPnBvaW50ZXI7CisgICAgIG9iamVjdDIgPSBfY29weV9vbl93cml0ZSAob2JqZWN0Mik7CisgICAgIC4uLiBtYWtlIG1vZGlmaWNhdGlvbnMgdG8gb2JqZWN0MiAuLi4KKyAgICAgVU5MT0NLIChvYmplY3QxKTsKKworICAgUmVsZWFzaW5nIHRoZSBsb2NrIGhhcyBvbmx5IGEgdmVyeSBzbWFsbCB3aW5kb3cgd2hlcmUgdGhlIGNvcHlfb25fd3JpdGUKKyAgIGFjdHVhbGx5IGRvZXMgbm90IHBlcmZvcm0gYSBjb3B5OgorCisgICAgIExPQ0sgKG9iamVjdDEpOworICAgICBvYmplY3QyID0gb2JqZWN0MS0+cG9pbnRlcjsKKyAgICAgX3JlZiAob2JqZWN0Mik7CisgICAgIFVOTE9DSyAob2JqZWN0MSk7CisKKyAgICAgLi4gb2JqZWN0MiBub3cgaGFzIGF0IGxlYXN0IDIgcmVmY291bnRzIG1ha2luZyB0aGUgbmV4dAorICAgICAgICBjb3B5LW9uLXdyaXRlIG1ha2UgYSByZWFsIGNvcHksIHVubGVzcyBzb21lIG90aGVyIHRocmVhZAorICAgICAgICB3cml0ZXMgYW5vdGhlciBvYmplY3QyIHRvIG9iamVjdDEgaGVyZSAuLi4KKworICAgICBvYmplY3QyID0gX2NvcHlfb25fd3JpdGUgKG9iamVjdDIpOworCisgICAgIC4uIG1ha2UgbW9kaWZpY2F0aW9ucyB0byBvYmplY3QyIC4uLgorCisgICAgIExPQ0sgKG9iamVjdDEpOworICAgICBpZiAob2JqZWN0MS0+cG9pbnRlciAhPSBvYmplY3QyKSB7CisgICAgICAgaWYgKG9iamVjdDEtPnBvaW50ZXIpCisgICAgICAgICBfdW5yZWYgKG9iamVjdDEtPnBvaW50ZXIpOworICAgICAgIG9iamVjdDEtPnBvaW50ZXIgPSBnc3Rfb2JqZWN0X3JlZiAob2JqZWN0Mik7CisgICAgIH0KKyAgICAgVU5MT0NLIChvYmplY3QxKTsKKworIGQpIGRlc3Ryb3lpbmcgdGhlIHNpbmdsZS1yZWZmZWQgcmVsYXRpb25zaGlwCisgIAorICAgVGhlIGZvbG93aW5nIGFsZ29yaXRobSByZW1vdmVzIHRoZSBzaW5nbGUtcmVmZmVkIGxpbmsgYmV0d2VlbgorICAgb2JqZWN0MSBhbmQgb2JqZWN0Mi4KKworICAgICBMT0NLIChvYmplY3QxKTsKKyAgICAgX3VucmVmIChvYmplY3QxLT5wb2ludGVyKTsKKyAgICAgb2JqZWN0MS0+cG9pbnRlciA9IE5VTEw7CisgICAgIFVOTE9DSyAob2JqZWN0MSk7CisgICAgIAorICAgV2hpY2ggeWllbGRzIHRoZSBmb2xsb3dpbmcgaW5pdGlhbCBzdGF0ZSBhZ2FpbjoKKworICAgICAgKy0tLS0tLS0tLSsgICAgICAgICstLS0tLS0tLS0rCisgKi0tLT58IG9iamVjdDEgfCAgICotLS0+fCBvYmplY3QyIHwKKyAgICAgIHwgICAgICAqICB8ICAgICAgICB8ICAgICAgICAgfAorICAgICAgfCAgICAgICAgMXwgICAgICAgIHwgICAgICAgIDF8CisgICAgICArLS0tLS0tLS0tKyAgICAgICAgKy0tLS0tLS0tLSsKKworCit1bnJlZmZlZCByZWxhdGlvbgorfn5+fn5+fn5+fn5+fn5+fn4KKyAKKyAgICAgICstLS0tLS0tLS0rICAgICAgICArLS0tLS0tLS0tKworICotLS0+fCBvYmplY3QxIHwgICAqLS0tPnwgb2JqZWN0MiB8CisgICAgICB8ICAgICAgICotLS0tLS0tLS0+fCAgICAgICAgIHwKKyAgICAgIHwgICAgICAgIDF8PC0tLS0tLS0tLSogICAgICAxfAorICAgICAgKy0tLS0tLS0tLSsgICAgICAgICstLS0tLS0tLS0rCisgICAgICAKKyAtIHByb3BlcnRpZXMKKworICAgLSB0d28gb2JqZWN0cyBoYXZlIHJlZmVyZW5jZXMgdG8gZWFjaG90aGVyCisgICAtIGJvdGggb2JqZWN0cyBjYW4gb25seSBoYXZlIDEgcmVmZXJlbmNlIHRvIGFub3RoZXIgb2JqZWN0LgorICAgLSByZWZlcmVuY2UgZmllbGRzIHByb3RlY3RlZCB3aXRoIExPQ0sKKyAgIC0gdGhlIHJlZmVyZW5jZXMgaGVsZCBieSBlYWNoIG9iamVjdCBhcmUgTk9UIHJlZmxlY3RlZCBpbiB0aGUKKyAgICAgcmVmY291bnQgb2YgdGhlIG90aGVyIG9iamVjdC4KKyAgIC0gbm8gb2JqZWN0IGhhcyBvd25lcnNoaXAgb2YgdGhlIG90aGVyLgorICAgLSB0eXBpY2FsbHkgZWFjaCBvYmplY3QgaXMgb3duZWQgYnkgYSBkaWZmZXJlbnQgcGFyZW50LgorICAgLSBjcmVhdGlvbi9kZXN0cnVjdGlvbiByZXF1aXJlcyB0d28gbmVzdGVkIGxvY2tzIGFuZCBubyByZWZjb3VudHMuCisKKyAtIHVzYWdlCisKKyAgIC0gVGhpcyB0eXBlIG9mIGxpbmsgaXMgdXNlZCB3aGVuIHRoZSBsaW5rIGlzIGxlc3MgaW1wb3J0YW50IHRoYW4gCisgICAgIHRoZSBleGlzdGFuY2Ugb2YgdGhlIG9iamVjdHMsIElmIG9uZSBvZiB0aGUgb2JqZWN0cyBpcyBkaXNwb3NlZCwgc28gCisgICAgIGlzIHRoZSBsaW5rLgorICAgCisgICBHc3RSZWFsUGFkIDwtPiBHc3RSZWFsUGFkIChzcmNwYWQgbG9jayB0YWtlbiBmaXJzdCkKKworIC0gbGlmZWN5Y2xlCisKKyBhKSBUd28gb2JqZWN0cyBleGlzdCB1bmxpbmtlZC4KKworICAgICAgKy0tLS0tLS0tLSsgICAgICAgICstLS0tLS0tLS0rCisgKi0tLT58IG9iamVjdDEgfCAgICotLS0+fCBvYmplY3QyIHwKKyAgICAgIHwgICAgICAgKiB8ICAgICAgICB8ICAgICAgICAgfAorICAgICAgfCAgICAgICAgMXwgICAgICAgIHwgKiAgICAgIDF8CisgICAgICArLS0tLS0tLS0tKyAgICAgICAgKy0tLS0tLS0tLSsKKworIGIpIGVzdGFibGlzaGluZyB0aGUgdW5yZWZmZWQgcmVsYXRpb25zaGlwCisgCisgICAgU2luY2Ugd2UgbmVlZCB0byB0YWtlIHR3byBsb2NrcywgdGhlIG9yZGVyIGluIHdoaWNoIHRoZXNlIGxvY2tzIGFyZQorICAgIHRha2VuIGlzIHZlcnkgaW1wb3J0YW50IG9yIHdlIG1pZ2h0IGNhdXNlIGRlYWRsb2Nrcy4gVGhpcyBsb2NrIG9yZGVyCisgICAgbXVzdCBiZSBkZWZpbmVkIGZvciBhbGwgdW5yZWZmZWQgcmVsYXRpb25zLiBJbiB0aGVzZSBleGFtcGxlcyB3ZSBhbHdheXMKKyAgICBsb2NrIG9iamVjdDEgZmlyc3QgYW5kIHRoZW4gb2JqZWN0Mi4KKworICAgICAgTE9DSyAob2JqZWN0MSk7CisgICAgICBMT0NLIChvYmplY3QyKTsKKyAgICAgIG9iamVjdDItPnJlZnBvaW50ZXIgPSBvYmplY3QxOworICAgICAgb2JqZWN0MS0+cmVmcG9pbnRlciA9IG9iamVjdDI7CisgICAgICBVTkxPQ0sgKG9iamVjdDIpOworICAgICAgVU5MT0NLIChvYmplY3QxKTsKKworIGMpIHVzaW5nIHRoZSB1bnJlZmZlZCByZWxhdGlvbnNoaXAKKworICAgIFJlYWRpbmcgcmVxdWlyZXMgdGFraW5nIG9uZSBvZiB0aGUgbG9ja3MgYW5kIHJlYWRpbmcgdGhlIGNvcnJlc3BvbmluZworICAgIG9iamVjdC4gQWdhaW4gd2UgbmVlZCB0byByZWYgdGhlIG9iamVjdCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBsb2NrLgorCisgICAgICBMT0NLIChvYmplY3QxKTsKKyAgICAgIG9iamVjdDIgPSBfcmVmIChvYmplY3QxLT5yZWZwb2ludGVyKTsKKyAgICAgIFVOTE9DSyAob2JqZWN0MSk7CisKKyAgICAgIC4uIHVzZSBvYmplY3QyIC4uCisgICAgICBfdW5yZWYgKG9iamVjdDIpOworICAgICAgCisgZCkgZGVzdHJveWluZyB0aGUgdW5yZWZmZWQgcmVsYXRpb25zaGlwCisgCisgICAgQmVjYXVzZSBvZiB0aGUgbG9jayBvcmRlciB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgd2hlbiBkZXN0cm95aW5nIHRoaXMKKyAgICBSZWxhdGlvbi4gCisgICAgCisgICAgV2hlbiBvbmx5IGEgcmVmZXJlbmNlIHRvIG9iamVjdDEgaXMgaGVsZDoKKworICAgICAgTE9DSyAob2JqZWN0MSk7CisgICAgICBMT0NLIChvYmplY3QyKTsKKyAgICAgIG9iamVjdDEtPnJlZnBvaW50ZXItPnJlZnBvaW50ZXIgPSBOVUxMOworICAgICAgb2JqZWN0MS0+cmVmcG9pbnRlciA9IE5VTEw7CisgICAgICBVTkxPQ0sgKG9iamVjdDIpOworICAgICAgVU5MT0NLIChvYmplY3QxKTsKKworICAgIFdoZW4gb25seSBhIHJlZmVyZW5jZSB0byBvYmplY3QyIGlzIGhlbGQgd2UgbmVlZCB0byBnZXQgYSBoYW5kbGUgdG8gdGhlCisgICAgb3RoZXIgb2JqZWN0IGZpc3Qgc28gdGhhdCB3ZSBjYW4gbG9jayBpdCBmaXJzdC4gVGhlcmUgaXMgYSB3aW5kb3cgd2hlcmUgCisgICAgd2UgbmVlZCB0byByZWxlYXNlIGFsbCBsb2NrcyBhbmQgdGhlIHJlbGF0aW9uIGNvdWxkIGJlIGludmFsaWQuIFRvIHNvbHZlCisgICAgdGhpcyB3ZSBjaGVjayB0aGUgcmVsYXRpb24gYWZ0ZXIgZ3JhYmJpbmcgYm90aCBsb2NrcyBhbmQgcmV0cnkgaWYgdGhlCisgICAgcmVsYXRpb24gY2hhbmdlZC4KKworICAgIHJldHJ5OgorICAgICAgTE9DSyAob2JqZWN0Mik7CisgICAgICBvYmplY3QxID0gX3JlZiAob2JqZWN0Mi0+cmVmcG9pbnRlcik7CisgICAgICBVTkxPQ0sgKG9iamVjdDIpOworICAgICAgLi4gdGhpbmdzIGNhbiBjaGFuZ2UgaGVyZSAuLgorICAgICAgTE9DSyAob2JqZWN0MSk7CisgICAgICBMT0NLIChvYmplY3QyKTsKKyAgICAgIGlmIChvYmplY3QxID09IG9iamVjdDItPnJlZnBvaW50ZXIpIHsKKyAgICAgICAgLyogcmVsYXRpb24gdW5jaGFuZ2VkICovCisgICAgICAgIG9iamVjdDEtPnJlZnBvaW50ZXItPnJlZnBvaW50ZXIgPSBOVUxMOworICAgICAgICBvYmplY3QxLT5yZWZwb2ludGVyID0gTlVMTDsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAvKiByZWxhdGlvbiBjaGFuZ2VkLi4gcmV0cnkgKi8KKyAgICAgICAgVU5MT0NLIChvYmplY3QyKTsKKyAgICAgICAgVU5MT0NLIChvYmplY3QxKTsKKyAgICAgICAgX3VucmVmIChvYmplY3QxKTsKKyAgICAgICAgZ290byByZXRyeTsKKyAgICAgIH0KKyAgICAgIFVOTE9DSyAob2JqZWN0Mik7CisgICAgICBVTkxPQ0sgKG9iamVjdDEpOworICAgICAgX3VucmVmIChvYmplY3QxKTsKKworICAgIFdoZW4gcmVmZXJlbmNlcyBhcmUgaGVsZCB0byBib3RoIG9iamVjdHMuIE5vdGUgdGhhdCBpdCBpcyBub3QgcG9zc2libGUgdG8KKyAgICBnZXQgcmVmZXJlbmNlcyB0byBib3RoIG9iamVjdHMgd2l0aCB0aGUgbG9ja3MgcmVsZWFzZWQgc2luY2Ugd2hlbiB0aGUgCisgICAgcmVmZXJlbmNlcyBhcmUgdGFrZW4gYW5kIHRoZSBsb2NrcyBhcmUgcmVsZWFzZWQsIGEgY29uY3VycmVudCB1cGRhdGUgbWlnaHQKKyAgICBoYXZlIGNoYW5nZWQgdGhlIGxpbmssIG1ha2luZyB0aGUgcmVmZXJlbmNlcyBub3QgcG9pbnQgdG8gbGlua2VkIG9iamVjdHMuCisKKyAgICAgIExPQ0sgKG9iamVjdDEpOworICAgICAgTE9DSyAob2JqZWN0Mik7CisgICAgICBpZiAob2JqZWN0MS0+cmVmcG9pbnRlciA9PSBvYmplY3QyKSB7CisgICAgICAgIG9iamVjdDItPnJlZnBvaW50ZXIgPSBOVUxMOworICAgICAgICBvYmplY3QxLT5yZWZwb2ludGVyID0gTlVMTDsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAuLiBvYmplY3RzIGFyZSBub3QgbGlua2VkIC4uCisgICAgICB9CisgICAgICBVTkxPQ0sgKG9iamVjdDIpOworICAgICAgVU5MT0NLIChvYmplY3QxKTsKKworCitkb3VibGUtcmVmZmVkIHJlbGF0aW9uCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKyAgICAgICstLS0tLS0tLS0rICAgICAgICArLS0tLS0tLS0tKworICotLS0+fCBvYmplY3QxIHwgICAqLS0tPnwgb2JqZWN0MiB8CisgICAgICB8ICAgICAgICotLS0tLS0tLS0+fCAgICAgICAgIHwKKyAgICAgIHwgICAgICAgIDJ8PC0tLS0tLS0tLSogICAgICAyfAorICAgICAgKy0tLS0tLS0tLSsgICAgICAgICstLS0tLS0tLS0rCisKKyAtIHByb3BlcnRpZXMKKworICAgLSB0d28gb2JqZWN0cyBoYXZlIHJlZmVyZW5jZXMgdG8gZWFjaG90aGVyCisgICAtIHJlZmVyZW5jZSBmaWVsZHMgcHJvdGVjdGVkIHdpdGggTE9DSworICAgLSB0aGUgcmVmZXJlbmNlcyBoZWxkIGJ5IGVhY2ggb2JqZWN0IGFyZSByZWZsZWN0ZWQgaW4gdGhlCisgICAgIHJlZmNvdW50IG9mIHRoZSBvdGhlciBvYmplY3QuCisgICAtIG5vIG9iamVjdCBoYXMgb3duZXJzaGlwIG9mIHRoZSBvdGhlci4KKyAgIC0gdHlwaWNhbGx5IGVhY2ggb2JqZWN0IGlzIG93bmVkIGJ5IGEgZGlmZmVyZW50IHBhcmVudC4KKyAgIC0gY3JlYXRpb24vZGVzdHJ1Y3Rpb24gcmVxdWlyZXMgdHdvIGxvY2tzIGFuZCB0d28gcmVmY291bnRzLgorCisgLSB1c2FnZQorICAgCisgICBOb3QgdXNlZCBpbiBHU3RyZWFtZXIuCisKKyAtIGxpZmVjeWNsZQorCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LXNjaGVkdWxpbmcudHh0IGIvZG9jcy9kZXNpZ24vcGFydC1zY2hlZHVsaW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2ZjOWVjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9kZXNpZ24vcGFydC1zY2hlZHVsaW5nLnR4dApAQCAtMCwwICsxLDIzNSBAQAorU2NoZWR1bGluZworLS0tLS0tLS0tLQorCitUaGUgc2NoZWR1bGluZyBpbiBHU3RyZWFtZXIgaXMgYmFzZWQgb24gcGFkcyBhY3RpdmVseSBwdXNoaW5nIChwcm9kdWNpbmcpIGRhdGEgb3IKK3BhZCBwdWxsaW5nIGluIGRhdGEgKGNvbnN1bWluZykgZnJvbSBvdGhlciBwYWRzLgorCitQdXNoaW5nCit+fn5+fn5+CisKK0EgcGFkIGNhbiBwcm9kdWNlIGRhdGEgYW5kIHB1c2ggaXQgdG8gdGhlIG5leHQgcGFkLiBBIHBhZCB0aGF0IGJlaGF2ZXMgdGhpcyB3YXkKK2V4cG9zZXMgYSBsb29wIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgcmVwZWF0ZWRseSB1bnRpbCBpdCByZXR1cm5zIGZhbHNlLgorVGhlIGxvb3AgZnVuY3Rpb24gaXMgYWxsb3dlZCB0byBibG9jayB3aGVuZXZlciBpdCB3YW50cy4gV2hlbiB0aGUgcGFkIGlzIGRlYWN0aXZhdGVkCit0aGUgbG9vcCBmdW5jdGlvbiBzaG91bGQgdW5ibG9jayB0aG91Z2guCisKK0EgcGFkIG9wZXJhdGluZyBpbiB0aGUgcHVzaCBtb2RlIGNhbiBvbmx5IHByb2R1Y2UgZGF0YSB0byBhIHBhZCB0aGF0IGV4cG9zZXMgYQorY2hhaW4gZnVuY3Rpb24uIFRoaXMgY2hhaW4gZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgYnVmZmVyIHByb2R1Y2VkIGJ5Cit0aGUgcHVzaGluZyBwYWQuIAorCitUaGlzIG1ldGhvZCBvZiBwcm9kdWNpbmcgZGF0YSBpcyBjYWxsZWQgdGhlIHN0cmVhbWluZyBtb2RlIHNpbmNlIHRoZSBwcm9kdWNlciAKK3Byb2R1Y2VzIGEgY29uc3RhbnQgc3RyZWFtIG9mIGRhdGEuIAorCitQdWxsaW5nCit+fn5+fn5+CisKK1BhZHMgdGhhdCBvcGVyYXRlIGluIHB1bGxpbmcgbW9kZSBjYW4gb25seSBwdWxsIGRhdGEgZnJvbSBhIHBhZCB0aGF0IGV4cG9zZXMgdGhlCitwdWxsX3JhbmdlIGZ1bmN0aW9uLiBJbiB0aGlzIGNhc2UsIHRoZSBzaW5rIHBhZCBleHBvc2VzIGEgbG9vcCBmdW5jdGlvbiB0aGF0IHdpbGwgYmUKK2NhbGxlZCByZXBlYXRlZGx5IHVudGlsIHRoZSB0YXNrIGlzIHN0b3BwZWQuCisKK0FmdGVyIHB1bGxpbmcgZGF0YSBmcm9tIHRoZSBwZWVyIHBhZCwgdGhlIGxvb3AgZnVuY3Rpb24gd2lsbCB0eXBpY2FsbHkgY2FsbCB0aGUKK3B1c2ggZnVuY3Rpb24gdG8gcHVzaCB0aGUgcmVzdWx0IHRvIHRoZSBwZWVyIHNpbmtwYWQuCisKKworRGVjaWRpbmcgdGhlIHNjaGVkdWxpbmcgbW9kZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitXaGVuIGEgcGFkIGlzIGFjdGl2YXRlZCwgdGhlIF9hY3RpdmF0ZSgpIGZ1bmN0aW9uIGlzIGNhbGxlZC4gVGhlIHBhZCBjYW4gdGhlbgorY2hvb3NlIHRvIGFjdGl2YXRlIGl0c2VsZiBpbiBwdXNoIG9yIHB1bGwgbW9kZSBkZXBlbmRpbmcgb24gdXBzdHJlYW0KK2NhcGFiaWxpdGllcy4KKworVGhlIEdTdHJlYW1lciBjb3JlIHdpbGwgYnkgZGVmYXVsdCBhY3RpdmF0ZSBwYWRzIGluIHB1c2ggbW9kZSB3aGVuIHRoZXJlIGlzIG5vCithY3RpdmF0ZSBmdW5jdGlvbiBmb3IgdGhlIHBhZC4KKworVGhlIGNoYWluIGZ1bmN0aW9uCit+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIGNoYWluIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW4gYSB1cHN0cmVhbSBlbGVtZW50IHBlcmZvcm1zIGEgX3B1c2goKSBvbiB0aGUgcGFkLgorVGhlIHVwc3RyZWFtIGVsZW1lbnQgY2FuIGJlIGFub3RoZXIgY2hhaW4gYmFzZWQgZWxlbWVudCBvciBhIHB1c2hpbmcgc291cmNlLgorCitUaGUgZ2V0cmFuZ2UgZnVuY3Rpb24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgZ2V0cmFuZ2UgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBwZWVyIHBhZCBwZXJmb3JtcyBhIF9wdWxsX3JhbmdlKCkgb24gdGhlIHBhZC4gVGhpcworZG93bnN0cmVhbSBwYWQgY2FuIGJlIGEgcHVsbGluZyBlbGVtZW50IG9yIGFub3RoZXIgX3B1bGxfcmFuZ2UoKSBiYXNlZCBlbGVtZW50LgorCisKK1NjaGVkdWxpbmcgUXVlcnkKK35+fn5+fn5+fn5+fn5+fn4KKworQSBzaW5rcGFkIGNhbiBhc2sgdGhlIHVwc3RyZWFtIHNyY3BhZCBmb3IgaXRzIHNjaGVkdWxpbmcgYXR0cmlidXRlcy4gSXQgZG9lcwordGhpcyB3aXRoIHRoZSBTQ0hFRFVMSU5HIHF1ZXJ5LgorCisKKyAob3V0KSAicHVsbC1tb2RlIiwgR19UWVBFX0JPT0xFQU4gKGRlZmF1bHQgRkFMU0UpCisgICAgICAgLSBpZiB0aGUgcGFkIGNhbiBvcGVyYXRlIGluIHB1bGwgbW9kZSwgaWYgdGhpcyBmbGFnIGlzIG5vdCBzZXQgdGhlIHBhZAorICAgICAgICAgd2lsbCBvcGVyYXRlIGluIHB1c2ggbW9kZS4KKworIChvdXQpICJyYW5kb20tYWNjZXNzIiwgR19UWVBFX0JPT0xFQU4gKGRlZmF1bHQgRkFMU0UpCisgICAgICAgLSB0aGUgb2Zmc2V0IG9mIGEgcHVsbCBvcGVyYXRpb24gY2FuIGJlIHNwZWNpZmllZCwgaWYgdGhpcyBmbGFnIGlzIGZhbHNlLAorICAgICAgICAgdGhlIG9mZnNldCBzaG91bGQgYmUgLTEsCisKKyAob3V0KSAic2VxdWVudGlhbCIsIEdfVFlQRV9CT09MRUFOIChkZWZhdWx0IFRSVUUpCisgICAgICAgLSBzdWdnZXN0IHNlcXVlbnRpYWwgYWNjZXNzIHRvIHRoZSBkYXRhLiBJZiByYW5kb20tYWNjZXNzIGlzIHNwZWNpZmllZCwKKyAgICAgICAgIHNlZWtzIGFyZSBhbGxvd2VkIGJ1dCBzaG91bGQgYmUgYXZvaWRlZC4gVGhpcyBpcyBjb21tb24gZm9yIG5ldHdvcmsKKyAgICAgICAgIHN0cmVhbXMuICgKKworIChvdXQpICJtaW5zaXplIiwgR19UWVBFX0lOVCAoZGVmYXVsdCAxKQorICAgICAgIC0gdGhlIHN1Z2dlc3RlZCBtaW5pbXVtIHNpemUgb2YgcHVsbCByZXF1ZXN0cworCisgKG91dCkgIm1heHNpemUiLCBHX1RZUEVfSU5UIChkZWZhdWx0IC0xLCB1bmxpbWl0ZWQpCisgICAgICAgLSB0aGUgc3VnZ2VzdGVkIG1heGltdW0gc2l6ZSBvZiBwdWxsIHJlcXVlc3RzCisKKyAob3V0KSAiYWxpZ24iLCBHX1RZUEVfSU5UIChkZWZhdWx0IDEpCisgICAgICAgLSB0aGUgc3VnZ2VzdGVkIGFsaWdubWVudCBmb3IgdGhlIHB1bGwgcmVxdWVzdHMuCisKKworCitQbHVnLWluIHRlY2huaXF1ZXMKK35+fn5+fn5+fn5+fn5+fn5+fgorCitNdWx0aS1zaW5rIGVsZW1lbnRzCiteXl5eXl5eXl5eXl5eXl5eXl5eCisKK0VsZW1lbnRzIHdpdGggbXVsdGlwbGUgc2lua3MgY2FuIGVpdGhlciBleHBvc2UgYSBsb29wIGZ1bmN0aW9uIG9uIGVhY2ggb2YgdGhlIHBhZHMgdG8KK2FjdGl2ZWx5IHB1bGxfcmFuZ2UgZGF0YSBvciB0aGV5IGNhbiBleHBvc2UgYSBjaGFpbiBmdW5jdGlvbiBvbiBlYWNoIHBhZC4KKworSW1wbGVtZW50aW5nIGEgY2hhaW4gZnVuY3Rpb24gaXMgdXN1YWxseSBlYXN5IGFuZCBhbGxvd3MgZm9yIGFsbCBwb3NzaWJsZSBzY2hlZHVsaW5nCittZXRob2RzLgorCitQYWQgc2VsZWN0CistLS0tLS0tLS0tCisKKyAgSWYgdGhlIGNoYWluIGJhc2VkIHNpbmsgd2FudHMgdG8gd2FpdCBmb3Igb25lIG9mIHRoZSBwYWRzIHRvIHJlY2VpdmUgYSBidWZmZXIsIGp1c3QKKyAgaW1wbGVtZW50IHRoZSBhY3Rpb24gdG8gcGVyZm9ybSBpbiB0aGUgY2hhaW4gZnVuY3Rpb24uIEJlIGF3YXJlIHRoYXQgdGhlIGFjdGlvbiBjb3VsZAorICBiZSBwZXJmb3JtZWQgaW4gZGlmZmVyZW50IHRocmVhZHMgYW5kIHBvc3NpYmx5IHNpbXVsdGFuZW91c2x5IHNvIGdyYWIgdGhlIFNUUkVBTV9MT0NLLgorCitDb2xsZWN0IHBhZHMKKy0tLS0tLS0tLS0tLQorCisgIElmIHRoZSBjaGFpbiBiYXNlZCBzaW5rIHBhZHMgYWxsIHJlcXVpcmUgb25lIGJ1ZmZlciBiZWZvcmUgdGhlIGVsZW1lbnQgY2FuIG9wZXJhdGUgb24KKyAgdGhlIGRhdGEsIGNvbGxlY3QgYWxsIHRoZSBidWZmZXJzIGluIHRoZSBjaGFpbiBmdW5jdGlvbiBhbmQgcGVyZm9ybSB0aGUgYWN0aW9uIHdoZW4KKyAgYWxsIGNoYWlucGFkcyByZWNlaXZlZCB0aGUgYnVmZmVyLgorCisgIEluIHRoaXMgY2FzZSB5b3UgcHJvYmFibHkgYWxzbyBkb24ndCB3YW50IHRvIGFjY2VwdCBtb3JlIGRhdGEgb24gYSBwYWQgdGhhdCBoYXMgYSBidWZmZXIKKyAgcXVldWVkLiBUaGlzIGNhbiBlYXNpbHkgYmUgZG9uZSB3aXRoIHRoZSBmb2xsb3dpbmcgY29kZSBzbmlwcGV0OgorCisgICAgc3RhdGljIEdzdEZsb3dSZXR1cm4gX2NoYWluIChHc3RQYWQgKnBhZCwgR3N0QnVmZmVyICpidWZmZXIpIAorICAgIHsKKyAgICAgIExPQ0sgKG15bG9jayk7CisgICAgICB3aGlsZSAocGFkLT5zdG9yZSAhPSBOVUxMKSB7CisgICAgICAgIFdBSVQgKG15Y29uZCwgbXlsb2NrKTsKKyAgICAgIH0KKyAgICAgIHBhZC0+c3RvcmUgPSBidWZmZXI7CisgICAgICBTSUdOQUwgKG15Y29uZCk7CisgICAgICBVTkxPQ0sgKG15bG9jayk7CisKKyAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBfcHVsbCAoR3N0UGFkICpwYWQsIEdzdEJ1ZmZlciAqKmJ1ZmZlcikgCisgICAgeworICAgICAgTE9DSyAobXlsb2NrKTsKKyAgICAgIHdoaWxlIChwYWQtPnN0b3JlID09IE5VTEwpIHsKKyAgICAgICAgV0FJVCAobXljb25kLCBteWxvY2spOworICAgICAgfQorICAgICAgKipidWZmZXIgPSBwYWQtPnN0b3JlOworICAgICAgcGFkLT5zdG9yZSA9IE5VTEw7CisgICAgICBTSUdOQUwgKG15Y29uZCk7CisgICAgICBVTkxPQ0sgKG15bG9jayk7CisgICAgfQorICAKKworQ2FzZXMKK35+fn5+CisKK0luc2lkZSB0aGUgYnJhY2VzIGJlbG93IHRoZSBwYWRzIGlzIHN0YXRlZCB3aGF0IGZ1bmN0aW9uIHRoZQorcGFkIHN1cHBvcnQ6CisKKyAgbDogZXhwb3NlcyBhIGxvb3AgZnVuY3Rpb24sIHNvIGl0IGNhbiBhY3QgYXMgYSBwdXNoaW5nIHNvdXJjZS4KKyAgZzogZXhwb3NlcyBhIGdldHJhbmdlIGZ1bmN0aW9uCisgIGM6IGV4cG9zZXMgYSBjaGFpbiBmdW5jdGlvbgorCisgIGZvbGxvd2luZyBzY2hlZHVsaW5nIGRlY2lzaW9ucyBhcmUgbWFkZSBiYXNlZCBvbiB0aGUgc2NoZWR1bGluZworICBtZXRob2RzIGV4cG9zZWQgYnkgdGhlIHBhZHM6CisKKyAgKGcpIC0gKGwpOiBzaW5rcGFkIHdpbGwgcHVsbCBkYXRhIGZyb20gc3JjCisgIChsKSAtIChjKTogc3JjcGFkIGFjdGl2ZWx5IHB1c2hlcyBkYXRhIHRvIHNpbmtwYWQKKyAgKCkgIC0gKGMpOiBzcmNwYWQgd2lsbCBwdXNoIGRhdGEgdG8gc2lua3BhZC4KKworICAoKSAgLSAoKSA6IG5vdCBzY2hlZHVsYWJsZS4KKyAgKCkgIC0gKGwpOiBub3Qgc2NoZWR1bGFibGUuCisgIChnKSAtICgpIDogbm90IHNjaGVkdWxhYmxlLiAKKyAgKGcpIC0gKGMpOiBub3Qgc2NoZWR1bGFibGUuCisgIChsKSAtICgpIDogbm90IHNjaGVkdWxhYmxlLgorICAobCkgLSAobCk6IG5vdCBzY2hlZHVsYWJsZQorCisgICgpICAtIChnKTogaW1wb3NzaWJsZQorICAoZykgLSAoZyk6IGltcG9zc2libGUuCisgIChsKSAtIChnKTogaW1wb3NzaWJsZQorICAoYykgLSAoKSA6IGltcG9zc2libGUKKyAgKGMpIC0gKGcpOiBpbXBvc3NpYmxlCisgIChjKSAtIChsKTogaW1wb3NzaWJsZQorICAoYykgLSAoYyk6IGltcG9zc2libGUKKworICstLS0tLS0tLS0rICAgICstLS0tLS0tLS0tLS0rICAgICstLS0tLS0tLS0tLSsKKyB8IGZpbGVzcmMgfCAgICB8IG1wM2RlY29kZXIgfCAgICB8IGF1ZGlvc2luayB8CisgfCAgICAgICAgc3JjLS1zaW5rICAgICAgICAgc3JjLS1zaW5rICAgICAgICAgfAorICstLS0tLS0tLS0rICAgICstLS0tLS0tLS0tLS0rICAgICstLS0tLS0tLS0tLSsKKyAgICAgICAgIChsLWcpIChjKSAgICAgICAgICAgKCkgICAoYykKKworIFdoZW4gYWN0aXZhdGluZyB0aGUgcGFkczoKKworICAgKiBhdWRpb3NpbmsgaGFzIGEgY2hhaW4gZnVuY3Rpb24gYW5kIHRoZSBwZWVyIHBhZCBoYXMgbm8KKyAgICAgbG9vcCBmdW5jdGlvbiwgbm8gc2NoZWR1bGluZyBpcyBkb25lLgorICAgKiBtcDNkZWNvZGVyIGFuZCBmaWxlc3JjIGV4cG9zZSBhbiAobCkgLSAoYykgY29ubmVjdGlvbiwKKyAgICAgYSB0aHJlYWQgaXMgY3JlYXRlZCB0byBjYWxsIHRoZSBzcmNwYWQgbG9vcCBmdW5jdGlvbi4KKworICstLS0tLS0tLS0rICAgICstLS0tLS0tLS0tLS0rICAgICstLS0tLS0tLS0tKworIHwgZmlsZXNyYyB8ICAgIHwgYXZpZGVtdXhlciB8ICAgIHwgZmFrZXNpbmsgfAorIHwgICAgICAgIHNyYy0tc2luayAgICAgICAgIHNyYy0tc2luayAgICAgICAgfAorICstLS0tLS0tLS0rICAgICstLS0tLS0tLS0tLS0rICAgICstLS0tLS0tLS0tKworICAgICAgICAgKGwtZykgKGwpICAgICAgICAgICgpICAgKGMpCisgICAgICAgICAKKyAgICogZmFrZXNpbmsgaGFzIGEgY2hhaW4gZnVuY3Rpb24gYW5kIHRoZSBwZWVyIHBhZCBoYXMgbm8KKyAgICAgbG9vcCBmdW5jdGlvbiwgbm8gc2NoZWR1bGluZyBpcyBkb25lLgorICAgKiBhdmlkZW11eGVyIGFuZCBmaWxlc3JjIGV4cG9zZSBhbiAoZykgLSAobCkgY29ubmVjdGlvbiwKKyAgICAgYSB0aHJlYWQgaXMgY3JlYXRlZCB0byBjYWxsIHRoZSBzaW5rcGFkIGxvb3AgZnVuY3Rpb24uCisKKyArLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLS0rCisgfCBmaWxlc3JjIHwgICAgfCBpZGVudGl0eSB8ICAgIHwgYXZpZGVtdXhlciB8ICAgIHwgZmFrZXNpbmsgfAorIHwgICAgICAgIHNyYy0tc2luayAgICAgICBzcmMtLXNpbmsgICAgICAgICBzcmMtLXNpbmsgICAgICAgIHwKKyArLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLS0rCisgICAgICAgICAobC1nKSAoYykgICAgICAgICgpICAgKGwpICAgICAgICAgICgpICAgKGMpCisKKyAgICogZmFrZXNpbmsgaGFzIGEgY2hhaW4gZnVuY3Rpb24gYW5kIHRoZSBwZWVyIHBhZCBoYXMgbm8KKyAgICAgbG9vcCBmdW5jdGlvbiwgbm8gc2NoZWR1bGluZyBpcyBkb25lLgorICAgKiBhdmlkZW11eGVyIGFuZCBpZGVudGl0eSBleHBvc2Ugbm8gc2NoZWR1bGFibGUgY29ubmVjdGlvbiBzbworICAgICB0aGlzIHBpcGVsaW5lIGlzIG5vdCBzY2hlZHVsYWJsZS4KKworICstLS0tLS0tLS0rICAgICstLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tLSsKKyB8IGZpbGVzcmMgfCAgICB8IGlkZW50aXR5IHwgICAgfCBhdmlkZW11eGVyIHwgICAgfCBmYWtlc2luayB8CisgfCAgICAgICAgc3JjLS1zaW5rICAgICAgIHNyYy0tc2luayAgICAgICAgIHNyYy0tc2luayAgICAgICAgfAorICstLS0tLS0tLS0rICAgICstLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tLSsKKyAgICAgICAgIChsLWcpIChjLWwpICAgICAgKGcpICAobCkgICAgICAgICAgKCkgICAoYykKKworICAgKiBmYWtlc2luayBoYXMgYSBjaGFpbiBmdW5jdGlvbiBhbmQgdGhlIHBlZXIgcGFkIGhhcyBubworICAgICBsb29wIGZ1bmN0aW9uLCBubyBzY2hlZHVsaW5nIGlzIGRvbmUuCisgICAqIGF2aWRlbXV4ZXIgYW5kIGlkZW50aXR5IGV4cG9zZSBhbiAoZykgLSAobCkgY29ubmVjdGlvbiwKKyAgICAgYSB0aHJlYWQgaXMgY3JlYXRlZCB0byBjYWxsIHRoZSBzaW5rcGFkIGxvb3AgZnVuY3Rpb24uCisgICAqIGlkZW50aXR5IGtub3dzIHRoZSBzcmNwYWQgaXMgZ2V0cmFuZ2UgYmFzZWQgYW5kIHVzZXMgdGhlCisgICAgIHRocmVhZCBmcm9tIGF2aWRlbXV4IHRvIGdldHJhbmdlIGRhdGEgZnJvbSBmaWxlc3JjLgorCisgKy0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLS0rICAgICstLS0tLS0tLS0tLS0rICAgICstLS0tLS0tLS0tKworIHwgZmlsZXNyYyB8ICAgIHwgaWRlbnRpdHkgfCAgICB8IG9nZ2RlbXV4ZXIgfCAgICB8IGZha2VzaW5rIHwKKyB8ICAgICAgICBzcmMtLXNpbmsgICAgICAgc3JjLS1zaW5rICAgICAgICAgc3JjLS1zaW5rICAgICAgICB8CisgKy0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLS0rICAgICstLS0tLS0tLS0tLS0rICAgICstLS0tLS0tLS0tKworICAgICAgICAgKGwtZykgKGMpICAgICAgICAoKSAgIChsLWMpICAgICAgICAoKSAgIChjKQorCisgICAqIGZha2VzaW5rIGhhcyBhIGNoYWluIGZ1bmN0aW9uIGFuZCB0aGUgcGVlciBwYWQgaGFzIG5vCisgICAgIGxvb3AgZnVuY3Rpb24sIG5vIHNjaGVkdWxpbmcgaXMgZG9uZS4KKyAgICogb2dnZGVtdXhlciBhbmQgaWRlbnRpdHkgZXhwb3NlIGFuICgpIC0gKGwtYykgY29ubmVjdGlvbiwKKyAgICAgb2dnZGVtdXggaGFzIHRvIG9wZXJhdGUgaW4gY2hhaW4gbW9kZS4KKyAgICogaWRlbnRpdHkgY2hhbiBvbmx5IHdvcmsgY2hhaW4gYmFzZWQgYW5kIHNvIGZpbGVzcmMgY3JlYXRlcworICAgICBhIHRocmVhZCB0byBwdXNoIGRhdGEgdG8gaWRlbnRpdHkuCisKKwpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1zZWVraW5nLnR4dCBiL2RvY3MvZGVzaWduL3BhcnQtc2Vla2luZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhiYjMzYwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZGVzaWduL3BhcnQtc2Vla2luZy50eHQKQEAgLTAsMCArMSwyNDUgQEAKK1NlZWtpbmcKKy0tLS0tLS0KKworU2Vla2luZyBpbiBHU3RyZWFtZXIgbWVhbnMgY29uZmlndXJpbmcgdGhlIHBpcGVsaW5lIGZvciBwbGF5YmFjayBvZiB0aGUKK21lZGlhIGJldHdlZW4gYSBjZXJ0YWluIHN0YXJ0IGFuZCBzdG9wIHRpbWUsIGNhbGxlZCB0aGUgcGxheWJhY2sgc2VnbWVudC4KK0J5IGRlZmF1bHQgYSBwaXBlbGluZSB3aWxsIHBsYXkgZnJvbSBwb3NpdGlvbiAwIHRvIHRoZSB0b3RhbCBkdXJhdGlvbiBvZiB0aGUKK21lZGlhIGF0IGEgcmF0ZSBvZiAxLjAuCisKK0Egc2VlayBpcyBwZXJmb3JtZWQgYnkgc2VuZGluZyBhIHNlZWsgZXZlbnQgdG8gdGhlIHNpbmsgZWxlbWVudHMgb2YgYQorcGlwZWxpbmUuIFNlbmRpbmcgdGhlIHNlZWsgZXZlbnQgdG8gYSBiaW4gd2lsbCBieSBkZWZhdWx0IGZvcndhcmQKK3RoZSBldmVudCB0byBhbGwgc2lua3MgaW4gdGhlIGJpbi4KKworV2hlbiBwZXJmb3JtaW5nIGEgc2VlaywgdGhlIHN0YXJ0IGFuZCBzdG9wIHZhbHVlcyBvZiB0aGUgc2VnbWVudCBjYW4gYmUKK3NwZWNpZmllZCBhcyBhYnNvbHV0ZSBwb3NpdGlvbnMgb3IgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnRseSBjb25maWd1cmVkCitwbGF5YmFjayBzZWdtZW50LiBOb3RlIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHNlZWsgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQKK3BsYXliYWNrIHBvc2l0aW9uLiBUbyBzZWVrIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uLCBvbmUgbXVzdAorcXVlcnkgdGhlIHBvc2l0aW9uIGZpcnN0IGFuZCB0aGVuIHBlcmZvcm0gYW4gYWJzb2x1dGUgc2VlayB0byB0aGUgZGVzaXJlZAorcG9zaXRpb24uCisKK0ZlZWRiYWNrIG9mIHRoZSBzZWVrIG9wZXJhdGlvbiBjYW4gYmUgaW1tZWRpYXRlbHkgdXNpbmcgdGhlIEdTVF9TRUVLX0ZMQUdfRkxVU0gKK2ZsYWcuIFdpdGggdGhpcyBmbGFnLCBhbGwgcGVuZGluZyBkYXRhIGluIHRoZSBwaXBlbGluZSBpcyBkaXNjYXJkZWQgYW5kIHBsYXliYWNrCitzdGFydHMgZnJvbSB0aGUgbmV3IHBvc2l0aW9uIGltbWVkaWF0ZWx5LgorCitXaGVuIHRoZSBGTFVTSCBmbGFnIGlzIG5vdCBzZXQsIHRoZSBzZWVrIHdpbGwgYmUgcXVldWVkIGFuZCBleGVjdXRlZCBhcworc29vbiBhcyBwb3NzaWJsZSwgd2hpY2ggbWlnaHQgYmUgYWZ0ZXIgYWxsIHF1ZXVlcyBhcmUgZW1wdGllZC4KKworU2Vla2luZyBjYW4gYmUgcGVyZm9ybWVkIGluIGRpZmZlcmVudCBmb3JtYXRzIHN1Y2ggYXMgdGltZSwgZnJhbWVzCitvciBzYW1wbGVzLgorCitUaGUgc2Vla2luZyBjYW4gYmUgcGVyZm9ybWVkIHRvIGEgbmVhcmJ5IGtleSB1bml0IG9yIHRvIHRoZSBleGFjdAorKGVzdGltYXRlZCkgdW5pdCBpbiB0aGUgbWVkaWEgKEdTVF9TRUVLX0ZMQUdfS0VZX1VOSVQpLiBTZWUgYmVsb3cgZm9yIG1vcmUKK2RldGFpbHMgb24gdGhpcy4KKworVGhlIHNlZWtpbmcgY2FuIGJlIHBlcmZvcm1lZCBieSB1c2luZyBhbiBlc3RpbWF0ZWQgdGFyZ2V0IHBvc2l0aW9uIG9yIGluIGFuCithY2N1cmF0ZSB3YXkgKEdTVF9TRUVLX0ZMQUdfQUNDVVJBVEUpLiBGb3Igc29tZSBmb3JtYXRzIHRoaXMgY2FuIHJlc3VsdCBpbgoraGF2aW5nIHRvIHNjYW4gdGhlIGNvbXBsZXRlIGZpbGUgaW4gb3JkZXIgdG8gYWNjdXJhdGVseSBmaW5kIHRoZSB0YXJnZXQgdW5pdC4KK1NlZSBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoaXMuCisKK05vbiBzZWdtZW50IHNlZWtpbmcgd2lsbCBtYWtlIHRoZSBwaXBlbGluZSBlbWl0IEVPUyB3aGVuIHRoZSBjb25maWd1cmVkIAorc2VnbWVudCBoYXMgYmVlbiBwbGF5ZWQuCisKK1NlZ21lbnQgc2Vla2luZyAodXNpbmcgdGhlIEdTVF9TRUVLX0ZMQUdfU0VHTUVOVCkgd2lsbCBub3QgZW1pdCBhbiBFT1MgYXQKK3RoZSBlbmQgb2YgdGhlIHBsYXliYWNrIHNlZ21lbnQgYnV0IHdpbGwgcG9zdCBhIFNFR01FTlRfRE9ORSBtZXNzYWdlIG9uIHRoZQorYnVzLiBUaGlzIG1lc3NhZ2UgaXMgcG9zdGVkIGJ5IHRoZSBlbGVtZW50IGRyaXZpbmcgdGhlIHBsYXliYWNrIGluIHRoZQorcGlwZWxpbmUsIHR5cGljYWxseSBhIGRlbXV4ZXIuICBBZnRlciByZWNlaXZpbmcgdGhlIG1lc3NhZ2UsIHRoZSBhcHBsaWNhdGlvbgorY2FuIHJlY29ubmVjdCB0aGUgcGlwZWxpbmUgb3IgaXNzdWUgb3RoZXIgc2VlayBldmVudHMgaW4gdGhlIHBpcGVsaW5lLgorU2luY2UgdGhlIG1lc3NhZ2UgaXMgcG9zdGVkIGFzIGVhcmx5IGFzIHBvc3NpYmxlIGluIHRoZSBwaXBlbGluZSwgdGhlCithcHBsaWNhdGlvbiBoYXMgc29tZSB0aW1lIHRvIGlzc3VlIGEgbmV3IHNlZWsgdG8gbWFrZSB0aGUgdHJhbnNpdGlvbiBzZWFtbGVzcy4KK1R5cGljYWxseSB0aGUgYWxsb3dlZCBkZWxheSBpcyBkZWZpbmVkIGJ5IHRoZSBidWZmZXIgc2l6ZXMgb2YgdGhlIHNpbmtzIGFzIHdlbGwKK2FzIHRoZSBzaXplIG9mIGFueSBxdWV1ZXMgaW4gdGhlIHBpcGVsaW5lLgorCitUaGUgc2VlayBjYW4gYWxzbyBjaGFuZ2UgdGhlIHBsYXliYWNrIHNwZWVkIG9mIHRoZSBjb25maWd1cmVkIHNlZ21lbnQuCitBIHNwZWVkIG9mIDEuMCBpcyBub3JtYWwgc3BlZWQsIDIuMCBpcyBkb3VibGUgc3BlZWQuIE5lZ2F0aXZlIHZhbHVlcworbWVhbiBiYWNrd2FyZCBwbGF5YmFjay4KKworV2hlbiBwZXJmb3JtaW5nIGEgc2VlayB3aXRoIGEgcGxheWJhY2sgcmF0ZSBkaWZmZXJlbnQgZnJvbSAxLjAsIHRoZQorR1NUX1NFRUtfRkxBR19TS0lQIGZsYWcgY2FuIGJlIHVzZWQgdG8gaW5zdHJ1Y3QgZGVjb2RlcnMgYW5kIGRlbXV4ZXJzIHRoYXQgdGhleQorYXJlIGFsbG93ZWQgdG8gc2tpcCBkZWNvZGluZy4gVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW4gcmVzb3VyY2UgY29uc3VtcHRpb24gaXMKK21vcmUgaW1wb3J0YW50IHRoYW4gYWNjdXJhdGVseSBwcm9kdWNpbmcgYWxsIGZyYW1lcy4KKworCitTZWVraW5nIGluIHB1c2ggYmFzZWQgZWxlbWVudHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisKKworCisKKworR2VuZXJhdGluZyBzZWVraW5nIGV2ZW50cworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitBIHNlZWsgZXZlbnQgaXMgY3JlYXRlZCB3aXRoIGdzdF9ldmVudF9uZXdfc2VlayAoKS4KKworCisKK1NlZWtpbmcgdmFyaWFudHMKK35+fn5+fn5+fn5+fn5+fn4KKworVGhlIGRpZmZlcmVudCBraW5kcyBvZiBzZWVraW5nIG1ldGhvZHMgYW5kIHRoZWlyIGludGVybmFsIHdvcmtpbmdzIGFyZQorZGVzY3JpYmVkIGJlbG93LgorCisKK0ZMVVNIIHNlZWtpbmcKK15eXl5eXl5eXl5eXl4KKworVGhpcyBpcyB0aGUgbW9zdCBjb21tb24gd2F5IG9mIHBlcmZvcm1pbmcgYSBzZWVrIGluIGEgcGxheWJhY2sgYXBwbGljYXRpb24uCitUaGUgYXBwbGljYXRpb24gaXNzdWVzIGEgc2VlayBvbiB0aGUgcGlwZWxpbmUgYW5kIHRoZSBuZXcgbWVkaWEgaXMgaW1tZWRpYXRlbHkKK3BsYXllZCBhZnRlciB0aGUgc2VlayBjYWxsIHJldHVybnMuCisKKworc2Vla2luZyB3aXRob3V0IEZMVVNICiteXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhpcyBzZWVrIHR5cGUgaXMgdHlwaWNhbGx5IHBlcmZvcm1lZCBhZnRlciBpc3N1aW5nIHNlZ21lbnQgc2Vla3MgdG8gZmluaXNoCit0aGUgcGxheWJhY2sgb2YgdGhlIHBpcGVsaW5lLgorCitQZXJmb3JtaW5nIGEgbm9uLWZsdXNoaW5nIHNlZWsgaW4gYSBQQVVTRUQgcGlwZWxpbmUgYmxvY2tzIHVudGlsIHRoZSBwaXBlbGluZQoraXMgc2V0IHRvIHBsYXlpbmcgYWdhaW4gc2luY2UgYWxsIGRhdGEgcGFzc2luZyBpcyBibG9ja2VkIGluIHRoZSBwcmVyb2xsZWQKK3NpbmtzLgorCisKK3NlZ21lbnQgc2Vla2luZyB3aXRoIEZMVVNICiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitUaGlzIHNlZWsgaXMgdHlwaWNhbGx5IHBlcmZvcm1lZCB3aGVuIHN0YXJ0aW5nIHNlYW1sZXNzIGxvb3BpbmcuCisKKworc2VnbWVudCBzZWVraW5nIHdpdGhvdXQgRkxVU0gKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1RoaXMgc2VlayBpcyB0eXBpY2FsbHkgcGVyZm9ybWVkIHdoZW4gY29udGludWluZyBzZWFtbGVzcyBsb29waW5nLgorCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgRGVtdXhlci9wYXJzZXIgYmVoYXZpb3VyIGFuZCBTRUVLX0ZMQUdfS0VZX1VOSVQgYW5kIFNFRUtfRkxBR19BQ0NVUkFURQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgc2VjdGlvbiBhaW1zIHRvIGV4cGxhaW4gdGhlIGJlaGF2aW91ciBleHBlY3RlZCBieSBhbiBlbGVtZW50IHdpdGggcmVnYXJkCit0byB0aGUgS0VZX1VOSVQgYW5kIEFDQ1VSQVRFIHNlZWsgZmxhZ3MgdXNpbmcgdGhlIGV4YW1wbGUgb2YgYSBwYXJzZXIgb3IKK2RlbXV4ZXIuCisKKzEuIERFRkFVTFQgQkVIQVZJT1VSOgorCitXaGVuIGEgc2VlayB0byBhIGNlcnRhaW4gcG9zaXRpb24gaXMgcmVxdWVzdGVkLCB0aGUgZGVtdXhlci9wYXJzZXIgd2lsbAorZG8gdHdvIHRoaW5ncyAoaWdub3JpbmcgZmx1c2hpbmcgYW5kIHNlZ21lbnQgc2Vla3MsIGFuZCBzaW1wbGlmaWVkIGZvcgoraWxsdXN0cmF0aW9uIHB1cnBvc2VzKToKKworIC0gc2VuZCBhIHNlZ21lbnQgZXZlbnQgd2l0aCBhIG5ldyBzdGFydCBwb3NpdGlvbgorCisgLSBzdGFydCBwdXNoaW5nIGRhdGEvYnVmZmVycyBhZ2FpbgorCitUbyBlbnN1cmUgdGhhdCB0aGUgZGF0YSBjb3JyZXNwb25kaW5nIHRvIHRoZSByZXF1ZXN0ZWQgc2VlayBwb3NpdGlvbgorY2FuIGFjdHVhbGx5IGJlIGRlY29kZWQsIGEgZGVtdXhlciBvciBwYXJzZXIgbmVlZHMgdG8gc3RhcnQgcHVzaGluZyBkYXRhCitmcm9tIGEga2V5ZnJhbWUva2V5dW5pdCBhdCBvciBiZWZvcmUgdGhlIHJlcXVlc3RlZCBzZWVrIHBvc2l0aW9uLgorCitVbmxlc3MgcmVxdWVzdGVkIGRpZmZlcmVudGx5ICh2aWEgdGhlIEtFWV9VTklUIGZsYWcpLCB0aGUgc3RhcnQgb2YgdGhlCitzZWdtZW50IGV2ZW50IHNob3VsZCBiZSB0aGUgcmVxdWVzdGVkIHNlZWsgcG9zaXRpb24uCisKK1NvIGJ5IGRlZmF1bHQgYSBkZW11eGVyL3BhcnNlciB3aWxsIHRoZW4gc3RhcnQgcHVzaGluZyBkYXRhIGZyb20KK3Bvc2l0aW9uIERBVEEgYW5kIHNlbmQgYSBzZWdtZW50IGV2ZW50IHdpdGggc3RhcnQgcG9zaXRpb24gU0VHX1NUQVJULAorYW5kIERBVEEgPD0gU0VHX1NUQVJULgorCitJZiBEQVRBIDwgU0VHX1NUQVJULCBhIHdlbGwtYmVoYXZlZCB2aWRlbyBkZWNvZGVyIHdpbGwgc3RhcnQgZGVjb2RpbmcgZnJhbWVzCitmcm9tIERBVEEsIGJ1dCB0YWtlIGludG8gYWNjb3VudCB0aGUgc2VnbWVudCBjb25maWd1cmVkIGJ5IHRoZSBkZW11eGVyIHZpYQordGhlIHNlZ21lbnQgZXZlbnQsIGFuZCBvbmx5IGFjdHVhbGx5IG91dHB1dCBkZWNvZGVkIHZpZGVvIGZyYW1lcyBmcm9tCitTRUdfU1RBUlQgb253YXJkcywgZHJvcHBpbmcgYWxsIGRlY29kZWQgZnJhbWVzIHRoYXQgYXJlIGJlZm9yZSB0aGUKK3NlZ21lbnQgc3RhcnQgYW5kIGFkanVzdGluZyB0aGUgdGltZXN0YW1wL2R1cmF0aW9uIG9mIHRoZSBidWZmZXIgdGhhdAorb3ZlcmxhcHMgdGhlIHNlZ21lbnQgc3RhcnQgKCJjbGlwcGluZyIpLiBBIG5vdC1zby13ZWxsLWJlaGF2ZWQgdmlkZW8gZGVjb2Rlcgord2lsbCBzdGFydCBkZWNvZGluZyBmcmFtZXMgZnJvbSBEQVRBIGFuZCBwdXNoIGRlY29kZWQgdmlkZW8gZnJhbWVzIG91dAorc3RhcnRpbmcgZnJvbSBwb3NpdGlvbiBEQVRBLCBpbiB3aGljaCBjYXNlIHRoZSBmcmFtZXMgdGhhdCBhcmUgYmVmb3JlCit0aGUgY29uZmlndXJlZCBzZWdtZW50IHN0YXJ0IHdpbGwgdXN1YWxseSBiZSBkcm9wcGVkL2NsaXBwZWQgZG93bnN0cmVhbQorKGUuZy4gYnkgdGhlIHZpZGVvIHNpbmspLgorCisKKzIuIEdTVF9TRUVLX0ZMQUdfS0VZX1VOSVQ6CisKK0lmIHRoZSBLRVlfVU5JVCBmbGFnIGlzIHNwZWNpZmllZCwgdGhlIGRlbXV4ZXIvcGFyc2VyIHNob3VsZCBhZGp1c3QgdGhlCitzZWdtZW50IHN0YXJ0IHRvIHRoZSBwb3NpdGlvbiBvZiB0aGUga2V5IGZyYW1lIGNsb3Nlc3QgdG8gdGhlIHJlcXVlc3RlZAorc2VlayBwb3NpdGlvbiBhbmQgdGhlbiBzdGFydCBwdXNoaW5nIG91dCBkYXRhIGZyb20gdGhlcmUuIFRoZSBuZWFyZXN0CitrZXkgZnJhbWUgbWF5IGJlIGJlZm9yZSBvciBhZnRlciB0aGUgcmVxdWVzdGVkIHNlZWsgcG9zaXRpb24sIGJ1dCBtYW55CitpbXBsZW1lbnRhdGlvbnMgd2lsbCBvbmx5IGxvb2sgZm9yIHRoZSBjbG9zZXN0IGtleWZyYW1lIGJlZm9yZSB0aGUKK3JlcXVlc3RlZCBwb3NpdGlvbi4KKworTW9zdCBtZWRpYSBwbGF5ZXJzIGFuZCB0aHVtYm5haWxlcnMgZG8gKGFuZCBzaG91bGQgYmUgZG9pbmcpIEtFWV9VTklUIHNlZWtzCitieSBkZWZhdWx0LCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgdG8gZW5zdXJlIGFsbW9zdC1pbnN0YW50IHJlc3BvbnNpdmVuZXNzCit3aGVuIHNjcnViYmluZyAoZHJhZ2dpbmcgdGhlIHNlZWsgc2xpZGVyIGluIFBBVVNFRCBvciBQTEFZSU5HIG1vZGUpLiBUaGlzCit3b3JrcyB3ZWxsIGZvciBtb3N0IG1lZGlhLCBidXQgcmVzdWx0cyBpbiBzdWJvcHRpbWFsIGJlaGF2aW91ciBmb3IgYSBzbWFsbAorbnVtYmVyIG9mICdvZGQnIGZpbGVzIChlLmcuIGZpbGVzIHRoYXQgb25seSBoYXZlIG9uZSBrZXlmcmFtZSBhdCB0aGUgdmVyeQorYmVnaW5uaW5nLCBvciBvbmx5IGEgZmV3IGtleWZyYW1lcyB0aHJvdWdob3V0IHRoZSBlbnRpcmUgc3RyZWFtKS4gQXQgdGhlCit0aW1lIG9mIHdyaXRpbmcsIGEgc29sdXRpb24gZm9yIHRoaXMgc3RpbGwgbmVlZHMgdG8gYmUgZm91bmQsIGJ1dCBjb3VsZCBiZQoraW1wbGVtZW50ZWQgZGVtdXhlci9wYXJzZXItc2lkZSwgZS5nLiBtYWtlIGRlbXV4ZXJzL3BhcnNlcnMgaWdub3JlIHRoZQorS0VZX1VOSVQgZmxhZyBpZiB0aGUgcG9zaXRpb24gYWRqdXN0bWVudCB3b3VsZCBiZSBsYXJnZXIgdGhhbiAxLzEwdGggb2YKK3RoZSBkdXJhdGlvbiBvciBzb21lc3VjaC4KKworU3VtbWFyeToKKworIC0gaWYgdGhlIEtFWV9VTklUIGZsYWcgaXMgKm5vdCogc3BlY2lmaWVkLCB0aGUgZGVtdXhlci9wYXJzZXIgc2hvdWxkCisgICBzdGFydCBwdXNoaW5nIGRhdGEgZnJvbSBhIGtleSB1bml0IHByZWNlZGluZyB0aGUgc2VlayBwb3NpdGlvbgorICAgKG9yIGZyb20gdGhlIHNlZWsgcG9zaXRpb24gaWYgdGhhdCBmYWxscyBvbiBhIGtleSB1bml0KSwgYW5kCisgICB0aGUgc3RhcnQgb2YgdGhlIG5ldyBzZWdtZW50IHNob3VsZCBiZSB0aGUgcmVxdWVzdGVkIHNlZWsgcG9zaXRpb24uCisKKyAtIGlmIHRoZSBLRVlfVU5JVCBmbGFnIGlzIHNwZWNpZmllZCwgdGhlIGRlbXV4ZXIvcGFyc2VyIHNob3VsZCBzdGFydAorICAgcHVzaGluZyBkYXRhIGZyb20gdGhlIGtleSB1bml0IG5lYXJlc3QgdGhlIHNlZWsgcG9zaXRpb24gKG9yIGZyb20KKyAgIHRoZSBzZWVrIHBvc2l0aW9uIGlmIHRoYXQgZmFsbHMgb24gYSBrZXkgdW5pdCksIGFuZAorICAgdGhlIHN0YXJ0IG9mIHRoZSBuZXcgc2VnbWVudCBzaG91bGQgYmUgYWRqdXN0ZWQgdG8gdGhlIHBvc2l0aW9uIG9mCisgICB0aGF0IGtleSB1bml0IHdoaWNoIHdhcyBuZWFyZXN0IHRoZSByZXF1ZXN0ZWQgc2VlayBwb3NpdGlvbiAoaWUuCisgICB0aGUgbmV3IHNlZ21lbnQgc3RhcnQgc2hvdWxkIGJlIHRoZSBwb3NpdGlvbiBmcm9tIHdoaWNoIGRhdGEgaXMKKyAgIHB1c2hlZCkuCisKKworMy4gR1NUX1NFRUtfRkxBR19BQ0NVUkFURToKKworSWYgdGhlIEFDQ1VSQVRFIGZsYWcgaXMgc3BlY2lmaWVkIGluIGEgc2VlayByZXF1ZXN0LCB0aGUgZGVtdXhlci9wYXJzZXIKK2lzIGFza2VkIHRvIGRvIHdoYXRldmVyIGl0IHRha2VzICghKSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcG9zaXRpb24gc2Vla2VkCit0byBpcyBhY2N1cmF0ZSBpbiByZWxhdGlvbiB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJlYW0uIFRoaXMgbWVhbnMgdGhhdAoraXQgaXMgbm90IGFjY2VwdGFibGUgdG8ganVzdCBhcHByb3hpbWF0ZSB0aGUgcG9zaXRpb24gKGUuZy4gdXNpbmcgYW4gYXZlcmFnZQorYml0cmF0ZSkuIFRoZSBhY2hpZXZlZCBwb3NpdGlvbiBtdXN0IGJlIGV4YWN0LiBJbiB0aGUgd29yc3QgY2FzZSwgdGhlIGRlbXV4ZXIKK29yIHBhcnNlciBuZWVkcyB0byBwdXNoIGRhdGEgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIGFuZCBsZXQgZG93bnN0cmVhbQorY2xpcCBldmVyeXRoaW5nIGJlZm9yZSB0aGUgcmVxdWVzdGVkIHNlZ21lbnQgc3RhcnQuCisKK1RoZSBBQ0NVUkFURSBmbGFnIGRvZXMgbm90IGFmZmVjdCB3aGF0IHRoZSBzZWdtZW50IHN0YXJ0IHNob3VsZCBiZSBpbgorcmVsYXRpb24gdG8gdGhlIHJlcXVlc3RlZCBzZWVrIHBvc2l0aW9uLiBPbmx5IHRoZSBLRVlfVU5JVCBmbGFnIChvciBpdHMKK2Fic2VuY2UpIGhhcyBhbnkgZWZmZWN0IG9uIHRoYXQuCisKK1ZpZGVvIGVkaXRvcnMgYW5kIGZyYW1lLXN0ZXBwaW5nIGFwcGxpY2F0aW9ucyB1c3VhbGx5IHVzZSB0aGUgQUNDVVJBVEUgZmxhZy4KKworU3VtbWFyeToKKworIC0gaWYgdGhlIEFDQ1VSQVRFIGZsYWcgaXMgKm5vdCogc3BlY2lmaWVkLCBpdCBpcyB1cCB0byB0aGUgZGVtdXhlci9wYXJzZXIKKyAgIHRvIGRlY2lkZSBob3cgZXhhY3QgdGhlIHNlZWsgc2hvdWxkIGJlLiBJZiB0aGUgZmxhZyBpcyBub3Qgc3BlY2lmaWVkLAorICAgdGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhlIGRlbXV4ZXIvcGFyc2VyIGRvZXMgYSByZXNvbmFibGUgYmVzdCBlZmZvcnQKKyAgIGF0dGVtcHQsIHRyYWRpbmcgc3BlZWQgZm9yIGFjY3VyYWN5LiBJbiB0aGUgYWJzZW5jZSBvZiBhbiBpbmRleCwgdGhlCisgICBzZWVrIHBvc2l0aW9uIG1heSBiZSBhcHByb3hpbWF0ZWQuCisKKyAtIGlmIHRoZSBBQ0NVUkFURSBmbGFnIGlzIHNwZWNpZmllZCwgYWJzb2x1dGUgYWNjdXJhY3kgaXMgcmVxdWlyZWQsIGFuZAorICAgc3BlZWQgaXMgb2Ygbm8gY29uY2Vybi4gSXQgaXMgbm90IGFjY2VwdGFibGUgdG8ganVzdCBhcHByb3hpbWF0ZSB0aGUKKyAgIHNlZWsgcG9zaXRpb24gaW4gdGhhdCBjYXNlLgorCisgLSB0aGUgQUNDVVJBVEUgZmxhZyBkb2VzIG5vdCBpbXBseSB0aGF0IHRoZSBzZWdtZW50IHN0YXJ0cyBhdCB0aGUKKyAgIHJlcXVlc3RlZCBzZWVrIHBvc2l0aW9uIG9yIHNob3VsZCBiZSBhZGp1c3RlZCB0byB0aGUgbmVhcmVzdCBrZXlmcmFtZSwKKyAgIG9ubHkgdGhlIEtFWV9VTklUIGZsYWcgZGV0ZXJtaW5lcyB0aGF0LgorCisKKzQuIEFDQ1VSQVRFIGFuZCBLRVlfVU5JVCBjb21iaW5hdGlvbnM6CisKK0FsbCBjb21iaW5hdGlvbnMgb2YgdGhlc2UgdHdvIGZsYWdzIGFyZSB2YWxpZDoKKworIC0gbmVpdGhlciBmbGFnIHNwZWNpZmllZDogc2VnbWVudCBzdGFydHMgYXQgc2VlayBwb3NpdGlvbiwgc2VuZCBkYXRhCisgICBmcm9tIHByZWNlZGluZyBrZXkgZnJhbWUgKG9yIGVhcmxpZXIpLCBmZWVsIGZyZWUgdG8gYXBwcm94aW1hdGUgdGhlCisgICBzZWVrIHBvc2l0aW9uCisKKyAtIG9ubHkgS0VZX1VOSVQgc3BlY2lmaWVkOiBzZWdtZW50IHN0YXJ0cyBmcm9tIHBvc2l0aW9uIG9mIG5lYXJlc3QKKyAgIGtleWZyYW1lLCBzZW5kIGRhdGEgZnJvbSBuZWFyZXN0IGtleWZyYW1lLCBmZWVsIGZyZWUgdG8gYXBwcm94aW1hdGUgdGhlCisgICBzZWVrIHBvc2l0aW9uCisKKyAtIG9ubHkgQUNDVVJBVEUgc3BlY2lmaWVkOiBzZWdtZW50IHN0YXJ0cyBhdCBzZWVrIHBvc2l0aW9uLCBzZW5kIGRhdGEKKyAgIGZyb20gcHJlY2VkaW5nIGtleSBmcmFtZSAob3IgZWFybGllciksIGRvIG5vdCBhcHByb3hpbWF0ZSB0aGUgc2VlaworICAgcG9zaXRpb24gdW5kZXIgYW55IGNpcmN1bXN0YW5jZXMKKworIC0gQUNDVVJBVEUgfCBLRVlfVU5JVCBzcGVjaWZpZWQ6IHNlZ21lbnQgc3RhcnRzIGZyb20gcG9zaXRpb24gb2YgbmVhcmVzdAorICAga2V5ZnJhbWUsIHNlbmQgZGF0YSBmcm9tIG5lYXJlc3Qga2V5IGZyYW1lLCBkbyBub3QgYXBwcm94aW1hdGUgdGhlIHNlZWsKKyAgIHBvc2l0aW9uIHVuZGVyIGFueSBjaXJjdW1zdGFuY2VzCisKZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtc2VnbWVudHMudHh0IGIvZG9jcy9kZXNpZ24vcGFydC1zZWdtZW50cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA1ZWM1YgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZGVzaWduL3BhcnQtc2VnbWVudHMudHh0CkBAIC0wLDAgKzEsMTA5IEBACitTZWdtZW50cworLS0tLS0tLS0KKworQSBzZWdtZW50IGluIEdTdHJlYW1lciBkZW5vdGVzIGEgc2V0IG9mIG1lZGlhIHNhbXBsZXMgdGhhdCBtdXN0IGJlCitwcm9jZXNzZWQuIEEgc2VnbWVudCBoYXMgYSBzdGFydCB0aW1lLCBhIHN0b3AgdGltZSBhbmQgYSBwcm9jZXNzaW5nCityYXRlLiAKKworQSBtZWRpYSBzdHJlYW0gaGFzIGEgc3RhcnQgYW5kIGEgc3RvcCB0aW1lLiBUaGUgc3RhcnQgdGltZSBpcworYWx3YXlzIDAgYW5kIHRoZSBzdG9wIHRpbWUgaXMgdGhlIHRvdGFsIGR1cmF0aW9uIChvciAtMSBpZiB1bmtub3duLCAKK2ZvciBleGFtcGxlIGEgbGl2ZSBzdHJlYW0pLiBXZSBjYWxsIHRoaXMgdGhlIGNvbXBsZXRlIG1lZGlhIHN0cmVhbS4KKworVGhlIHNlZ21lbnQgb2YgdGhlIGNvbXBsZXRlIG1lZGlhIHN0cmVhbSBjYW4gYmUgcGxheWVkIGJ5IGlzc3VpbmcgYSBzZWVrCitvbiB0aGUgc3RyZWFtLiBUaGUgc2VlayBoYXMgYSBzdGFydCB0aW1lLCBhIHN0b3AgdGltZSBhbmQgYSBwcm9jZXNzaW5nIHJhdGUuCisKKworICAgICAgICAgICAgICAgY29tcGxldGUgc3RyZWFtCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24KKyAgICAgICAgIHNlZ21lbnQKKyAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICAgc3RhcnQgICAgICAgICAgICAgICAgICAgICAgIHN0b3AKKworCitUaGUgcGxheWJhY2sgb2YgYSBzZWdtZW50IHN0YXJ0cyB3aXRoIGEgc291cmNlIG9yIGRlbXV4ZXIgZWxlbWVudCBwdXNoaW5nIGEKK3NlZ21lbnQgZXZlbnQgY29udGFpbmluZyB0aGUgc3RhcnQgdGltZSwgc3RvcCB0aW1lIGFuZCByYXRlIG9mIHRoZSBzZWdtZW50LgorVGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWdtZW50IGlzIHRvIGluZm9ybSBkb3duc3RyZWFtIGVsZW1lbnRzIG9mIHRoZSAKK3JlcXVlc3RlZCBzZWdtZW50IHBvc2l0aW9ucy4gU29tZSBlbGVtZW50cyBtaWdodCBwcm9kdWNlIGJ1ZmZlcnMgdGhhdCBmYWxsCitvdXRzaWRlIG9mIHRoZSBzZWdtZW50IGFuZCB0aGF0IG1pZ2h0IHRoZXJlZm9yZSBiZSBkaXNjYXJkZWQgb3IgY2xpcHBlZC4KKworCitVc2UgY2FzZTogRkxVU0hJTkcgc2Vlaworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworICBleC4KKworICAgIGZpbGVzcmMgISBhdmlkZW11eCAhIHZpZGVvZGVjb2RlciAhIHZpZGVvc2luaworCisgICAgV2hlbiBkb2luZyBhIHNlZWsgaW4gdGhpcyBwaXBlbGluZSBmb3IgYSBzZWdtZW50IDEgdG8gNSBzZWNvbmRzLCBhdmlkZW11eAorICAgIHdpbGwgcGVyZm9ybSB0aGUgc2Vlay4KKworICAgIEF2aWRlbXV4IHN0YXJ0cyBieSBzZW5kaW5nIGEgRkxVU0hfU1RBUlQgZXZlbnQgZG93bnN0cmVhbSBhbmQgdXBzdHJlYW0uIFRoaXMKKyAgICB3aWxsIGNhdXNlIGl0cyBzdHJlYW1pbmcgdGFzayB0byBQQVVTRUQgYmVjYXVzZSBfcGFkX3B1bGxfcmFuZ2UoKSBhbmQKKyAgICBfcGFkX3B1c2goKSB3aWxsIHJldHVybiBXUk9OR19TVEFURS4gSXQgdGhlbiB3YWl0cyBmb3IgdGhlIFNUUkVBTV9MT0NLLAorICAgIHdoaWNoIHdpbGwgYmUgdW5sb2NrZWQgd2hlbiB0aGUgc3RyZWFtaW5nIHRhc2sgcGF1c2VzLiBBdCB0aGlzIHBvaW50IG5vCisgICAgc3RyZWFtaW5nIGlzIGhhcHBlbmluZyBhbnltb3JlIGluIHRoZSBwaXBlbGluZSBhbmQgYSBGTFVTSF9TVE9QIGlzIHNlbnQKKyAgICB1cHN0cmVhbSBhbmQgZG93bnN0cmVhbS4KKworICAgIFdoZW4gYXZpZGVtdXggc3RhcnRzIHBsYXliYWNrIG9mIHRoZSBzZWdtZW50IGZyb20gc2Vjb25kIDEgdG8gNSwgaXQgcHVzaGVzCisgICAgb3V0IGEgc2VnbWVudCB3aXRoIDEgYW5kIDUgYXMgc3RhcnQgYW5kIHN0b3AgdGltZXMuIFRoZSBzdHJlYW1fdGltZSBpbgorICAgIHRoZSBzZWdtZW50IGlzIGFsc28gMSBhcyB0aGlzIGlzIHRoZSBwb3NpdGlvbiB3ZSBzZWVrIHRvLgorCisgICAgVGhlIHZpZGVvIGRlY29kZXIgc3RvcmVzIHRoZXNlIHZhbHVlcyBpbnRlcm5hbGx5IGFuZCBmb3J3YXJkcyB0aGVtIHRvIHRoZQorICAgIG5leHQgZG93bnN0cmVhbSBlbGVtZW50ICh2aWRlb3NpbmssIHdoaWNoIGFsc28gc3RvcmVzIHRoZSB2YWx1ZXMpCisKKyAgICBTaW5jZSBzZWNvbmQgMSBkb2VzIG5vdCBjb250YWluIGEga2V5ZnJhbWUsIHRoZSBhdmkgZGVtdXhlciBzdGFydHMgc2VuZGluZworICAgIGRhdGEgZnJvbSB0aGUgcHJldmlvdXMga2V5ZnJhbWUgd2hpY2ggaXMgYXQgdGltZXN0YW1wIDAuCisKKyAgICBUaGUgdmlkZW8gZGVjb2RlciBkZWNvZGVzIHRoZSBrZXlmcmFtZSBidXQga25vd3MgaXQgc2hvdWxkIG5vdCBwdXNoIHRoZSAKKyAgICB2aWRlbyBmcmFtZSB5ZXQgYXMgaXQgZmFsbHMgb3V0c2lkZSBvZiB0aGUgY29uZmlndXJlZCBzZWdtZW50LgorCisgICAgV2hlbiB0aGUgdmlkZW8gZGVjb2RlciByZWNlaXZlcyB0aGUgZnJhbWUgd2l0aCB0aW1lc3RhbXAgMSwgaXQgaXMgYWJsZSB0bworICAgIGRlY29kZSB0aGlzIGZyYW1lIGFzIGl0IHJlY2VpdmVkIGFuZCBkZWNvZGVkIHRoZSBkYXRhIHVwIHRvIHRoZSBwcmV2aW91cyAKKyAgICBrZXlmcmFtZS4gSXQgdGhlbiBjb250aW51ZXMgdG8gZGVjb2RlIGFuZCBwdXNoIGZyYW1lcyB3aXRoIHRpbWVzdGFtcHMgPj0gMS4KKyAgICBXaGVuIGl0IHJlYWNoZXMgdGltZXN0YW1wIDUsIGl0IGRvZXMgbm90IGRlY29kZSBhbmQgcHVzaCBmcmFtZXMgYW55bW9yZS4KKworICAgIFRoZSB2aWRlbyBzaW5rIHJlY2VpdmVzIGEgZnJhbWUgb2YgdGltZXN0YW1wIDEuIEl0IHRha2VzIHRoZSBzdGFydCB2YWx1ZSBvZiAKKyAgICB0aGUgcHJldmlvdXMgc2VnbWVudCBhbmQgYXBsaWVzIHRoZSBmb2xvd2luZyAoc2ltcGxpZmllZCkgZm9ybXVsYToKKworICAgICAgICByZW5kZXJfdGltZSA9IEJVRkZFUl9USU1FU1RBTVAgLSBzZWdtZW50X3N0YXJ0ICsgZWxlbWVudC0+YmFzZV90aW1lCisKKyAgICBJdCB0aGVuIHN5bmNzIGFnYWluc3QgdGhlIGNsb2NrIHdpdGggdGhpcyByZW5kZXJfdGltZS4gTm90ZSB0aGF0IAorICAgIEJVRkZFUl9USU1FU1RBTVAgaXMgYWx3YXlzID49IHNlZ21lbnRfc3RhcnQgb3IgZWxzZSBpdCB3b3VsZCBmYWxsIG91dHNpZGUgb2YKKyAgICB0aGUgY29uZmlndXJlIHNlZ21lbnQuCisKKyAgICBWaWRlb3NpbmsgcmVwb3J0cyBpdHMgY3VycmVudCBwb3NpdGlvbiBhcyAoc2ltcGxpZmllZCk6CisKKyAgICAgICAgY3VycmVudF9wb3NpdGlvbiA9IGNsb2NrX3RpbWUgLSBlbGVtZW50LT5iYXNlX3RpbWUgKyBzZWdtZW50X3RpbWUKKworICAgIFNlZSBwYXJ0LXN5bmNocm9uaXNhdGlvbi50eHQgZm9yIGEgbW9yZSBkZXRhaWxlZCBhbmQgYWNjdXJhdGUgZXhwbGFuYXRpb24gb2YKKyAgICBzeW5jaHJvbmlzYXRpb24gYW5kIHBvc2l0aW9uIHJlcG9ydGluZy4KKworICAgIFNpbmNlIGFmdGVyIGEgZmx1c2hpbmcgc2VlayB0aGUgc3RyZWFtX3RpbWUgaXMgcmVzZXQgdG8gMCwgdGhlIG5ldyBidWZmZXIKKyAgICB3aWxsIGJlIHJlbmRlcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBzZWVrIGFuZCB0aGUgY3VycmVudF9wb3NpdGlvbiB3aWxsIGJlCisgICAgdGhlIHN0cmVhbV90aW1lIG9mIHRoZSBzZWVrIHRoYXQgd2FzIHBlcmZvcm1lZC4KKworICAgIFRoZSBzdG9wIHRpbWUgaXMgaW1wb3J0YW50IHdoZW4gdGhlIHZpZGVvIGZvcm1hdCBjb250YWlucyBCIGZyYW1lcy4gVGhlCisgICAgdmlkZW8gZGVjb2RlciByZWNlaXZlcyBhIFAgZnJhbWUgZmlyc3QsIHdoaWNoIGlzIGNhbiBkZWNvZGUgYnV0IG5vdCBwdXNoIHlldC4KKyAgICBXaGVuIGl0IHJlY2VpdmVzIGEgQiBmcmFtZSwgaXQgY2FuIGRlY29kZSB0aGUgQiBmcmFtZSBhbmQgcHVzaCB0aGUgQiBmcmFtZQorICAgIGZvbGxvd2VkIGJ5IHRoZSBwcmV2aW91c2x5IGRlY29kZWQgUCBmcmFtZS4gSWYgdGhlIFAgZnJhbWUgaXMgb3V0c2lkZSBvZiB0aGUKKyAgICBzZWdtZW50LCB0aGUgZGVjb2RlciBrbm93cyBpdCBzaG91bGQgbm90IHNlbmQgdGhlIFAgZnJhbWUuCisKKyAgICBBdmlkZW11eCBzdG9wcyBzZW5kaW5nIGRhdGEgYWZ0ZXIgcHVzaGluZyBhIGZyYW1lIHdpdGggdGltZXN0YW1wIDUgYW5kCisgICAgcmV0dXJucyBHU1RfRkxPV19VTkVYUEVDVEVEIGZyb20gdGhlIGNoYWluIGZ1bmN0aW9uIHRvIG1ha2UgdGhlIHVwc3RyZWFtCisgICAgZWxlbWVudHMgcGVyZm9ybSB0aGUgRU9TIGxvZ2ljLgorCisKK1VzZSBjYXNlOiBsaXZlIHN0cmVhbQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKworCisKK1VzZSBjYXNlOiBzZWdtZW50IGxvb3BpbmcKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworICBDb25zaWRlciB0aGUgY2FzZSBvZiBhIHdhdiBmaWxlIHdpdGggcmF3IGF1ZGlvLgorCisgICAgZmlsZXNyYyAhIHdhdnBhcnNlICEgYWxzYXNpbmsKKwpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1zcGFyc2VzdHJlYW1zLnR4dCBiL2RvY3MvZGVzaWduL3BhcnQtc3BhcnNlc3RyZWFtcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY5ZmFhNQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZGVzaWduL3BhcnQtc3BhcnNlc3RyZWFtcy50eHQKQEAgLTAsMCArMSwxMDMgQEAKK0RSQUZUIFNwYXJzZSBTdHJlYW1zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbnRyb2R1Y3Rpb24KK35+fn5+fn5+fn5+fgorCitJbiAwLjgsIHRoZXJlIHdhcyBzb21lIHN1cHBvcnQgZm9yIFNwYXJzZSBTdHJlYW1zIHRocm91Z2ggdGhlIHVzZSBvZiAKK0ZJTExFUiBldmVudHMuIFRoZXNlIHdlcmUgdXNlZCB0byBtYXJrIGdhcHMgYmV0d2VlbiBidWZmZXJzIHNvIHRoYXQgZG93bnN0cmVhbQorZWxlbWVudHMgY291bGQga25vdyBub3QgdG8gZXhwZWN0IGFueSBtb3JlIGRhdGEgZm9yIHRoYXQgZ2FwLiAKKworSW4gMC4xMCwgc2VnbWVudCBpbmZvcm1hdGlvbiBjb252ZXllZCB0aHJvdWdoIFNFR01FTlQgZXZlbnRzIGNhbiBiZSB1c2VkCitmb3IgdGhlIHNhbWUgcHVycG9zZS4KKworVXNlIGNhc2VzCit+fn5+fn5+fn4KKworMSkgU3ViLXRpdGxlIHN0cmVhbXMKKyAgU3ViLXRpdGxlIGluZm9ybWF0aW9uIGZyb20gbXV4ZWQgZm9ybWF0cyBzdWNoIGFzIE1hdHJvc2thIG9yIE1QRUcgY29uc2lzdCBvZgorICBpcnJlZ3VsYXIgYnVmZmVycyBzcGFjZWQgZmFyIGFwYXJ0IGNvbXBhcmVkIHRvIHRoZSBvdGhlciBzdHJlYW1zIAorICAoYXVkaW8gYW5kIHZpZGVvKS4gU2luY2UgdGhlc2UgdXN1YWxseSBvbmx5IGFwcGVhciB3aGVuIHNvbWVvbmUgc3BlYWtzIG9yIAorICBzb21lIG90aGVyIGFjdGlvbiBpbiB0aGUgdmlkZW8vYXVkaW8gbmVlZHMgZGVzY3JpYmluZywgdGhleSBjYW4gYmUgYW55d2hlcmUKKyAgZnJvbSAxLTIgc2Vjb25kcyB0byBzZXZlcmFsIG1pbnV0ZXMgYXBhcnQuCisgIAorICBEb3duc3RyZWFtIGVsZW1lbnRzIHRoYXQgd2FudCB0byBtaXggc3ViLXRpdGxlcyBhbmQgdmlkZW8gKGFuZCBtdXhlcnMpCisgIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgd2hldGhlciB0byBwcm9jZXNzIGEgdmlkZW8gcGFja2V0IG9yIHdhaXQgYSBtb21lbnQgCisgIGZvciBhIGNvcnJlc3BvbmRpbmcgc3ViLXRpdGxlIHRvIGJlIGRlbGl2ZXJlZCBvbiBhbm90aGVyIHBhZC4KKworMikgU3RpbGwgZnJhbWUvbWVudSBzdXBwb3J0CisgIEluIERWRHMgKGFuZCBvdGhlciBmb3JtYXRzKSwgdGhlcmUgYXJlIHN0aWxsLWZyYW1lIHJlZ2lvbnMgd2hlcmUgdGhlIGN1cnJlbnQKKyAgdmlkZW8gZnJhbWUgc2hvdWxkIGJlIHJldGFpbmVkIGFuZCBubyBhdWRpbyBwbGF5ZWQgZm9yIGEgcGVyaW9kLiBJbiBEVkQsIAorICB0aGVzZSBhcmUgZGVzY3JpYmVkIGVpdGhlciBhcyBhIGZpeGVkIGR1cmF0aW9uLCBvciBpbmZpbml0ZSBkdXJhdGlvbiBzdGlsbAorICBmcmFtZS4gCisKKzMpIEF2b2lkaW5nIHByb2Nlc3Npbmcgc2lsZW5jZSBmcm9tIGF1ZGlvIGdlbmVyYXRvcnMKKyAgSW1hZ2luZSBhIHNvdXJjZSB0aGF0IGZyb20gdGltZSB0byB0aW1lIHByb2R1Y2VzIGVtcHR5IGJ1ZmZlcnMgKHNpbGVuY2UKKyAgb3IgYmxhbmsgaW1hZ2VzKS4gSWYgdGhlIHBpcGVsaW5lIGhhcyBtYW55IGVsZW1lbnRzIG5leHQsIGl0IGlzIGJldHRlciB0bworICBvcHRpbWlzZSB0aGUgb2Jzb2xldGUgZGF0YSBwcm9jZXNzaW5nIGluIHRoaXMgY2FzZS4gRXhhbXBsZXMgZm9yIHN1Y2ggc291cmNlcworICBhcmUgc291bmQtZ2VuZXJhdG9ycyAoc2ltc3luIGluIGdzdC1idXp6dGFyZCkgb3IgYSBzb3VyY2UgaW4gYSB2b2lwIAorICBhcHBsaWNhdGlvbiB0aGF0IHVzZXMgbm9pc2UtZ2F0aW5nICh0byBzYXZlIGJhbmR3aXRoKS4KKworRGV0YWlscworfn5+fn5+fgorCisxKSBTdWItdGl0bGUgc3RyZWFtcworICBUaGUgbWFpbiByZXF1aXJlbWVudCBoZXJlIGlzIHRvIGF2b2lkIHN0YWxsaW5nIHRoZSBwaXBlbGluZSBiZXR3ZWVuIHN1Yi10aXRsZQorICBwYWNrZXRzLCBhbmQgaXMgZWZmZWN0aXZlbHkgdXBkYXRpbmcgdGhlIG1pbmltdW0tdGltZXN0YW1wIGZvciB0aGF0IHN0cmVhbS4KKyAgCisgIEEgZGVtdXhlciBjYW4gZG8gdGhpcyBieSBzZW5kaW5nIGFuICd1cGRhdGUnIFNFR01FTlQgd2l0aCBhIG5ldyBzdGFydCB0aW1lCisgIHRvIHRoZSBzdWJ0aXRsZSBwYWQuIEZvciBleGFtcGxlLCBldmVyeSB0aW1lIHRoZSBTQ1IgaW4gTVBFRyBkYXRhIAorICBhZHZhbmNlcyBtb3JlIHRoYW4gMC41IHNlY29uZHMsIHRoZSBNUEVHIGRlbXV4ZXIgY2FuIGlzc3VlIGEgU0VHTUVOVCB3aXRoCisgICAodXBkYXRlPVRSVUUsIHN0YXJ0PVNDUiApLiBEb3duc3RyZWFtIGVsZW1lbnRzIGNhbiB0aGVuIGJlIGF3YXJlIG5vdCB0byAKKyAgIGV4cGVjdCBhbnkgZGF0YSBvbGRlciB0aGFuIHRoZSBuZXcgc3RhcnQgdGltZS4KKworICBUaGUgc2FtZSBob2xkcyB0cnVlIGZvciBhbnkgZWxlbWVudCB0aGF0IGtub3dzIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSAKKyAgc3RyZWFtIC0gb25jZSB0aGUgZWxlbWVudCBrbm93cyB0aGF0IHRoZXJlIGlzIG5vIG1vcmUgZGF0YSB0byBiZSBwcmVzZW50ZWQKKyAgdW50aWwgdGltZSAnbicgaXQgY2FuIGFkdmFuY2UgdGhlIHN0YXJ0IHRpbWUgb2YgdGhlIGN1cnJlbnQgc2VnbWVudCB0byAnbicuCisgICAKKyAgVGhpcyB0ZWNobmlxdWUgY2FuIGFsc28gYmUgdXNlZCwgZm9yIGV4YW1wbGUsIHRvIHJlcHJlc2VudCBhIHN0cmVhbSBvZiAKKyAgTUlESSBldmVudHMgc3BhY2VkIHRvIGEgY2xvY2sgcGVyaW9kLiBXaGVuIHRoZXJlIGlzIG5vIGV2ZW50IHByZXNlbnQgZm9yIAorICBhIGNsb2NrIHRpbWUsIGEgU0VHTUVOVCB1cGRhdGUgY2FuIGJlIHNlbnQgaW4gaXRzIHBsYWNlLgorICAKKzIpIFN0aWxsIGZyYW1lL21lbnUgc3VwcG9ydAorICBTdGlsbCBmcmFtZXMgaW4gRFZEIG1lbnVzIGFyZSBub3QgdGhlIHNhbWUsIGluIHRoYXQgdGhleSBkbyBub3QgaW50cm9kdWNlCisgIGEgZ2FwIGluIHRoZSB0aW1lc3RhbXBzIG9mIHRoZSBkYXRhLiBJbnN0ZWFkLCB0aGV5IHJlcHJlc2VudCBhIHBhdXNlIGluIHRoZQorICBwcmVzZW50YXRpb24gb2YgYSBzdHJlYW0uIENvcnJlY3RseSBwZXJmb3JtaW5nIHRoZSB3YWl0IHJlcXVpcmVzIHNvbWUKKyAgc3luY2hyb25pc2F0aW9uIHdpdGggZG93bnN0cmVhbSBlbGVtZW50cy4gCisgIAorICBJbiB0aGlzIHNjZW5hcmlvLCBhbiB1cHN0cmVhbSBlbGVtZW50IHRoYXQgd2FudHMgdG8gZXhlY3V0ZSBhIHN0aWxsIGZyYW1lCisgIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgc3RlcHM6CisgICAgCisgICAgKiBTZW5kIGFsbCBkYXRhIGJlZm9yZSB0aGUgc3RpbGwgZnJhbWUgd2FpdAorICAgICogU2VuZCBhIERSQUlOIGV2ZW50IHRvIGVuc3VyZSB0aGF0IGFsbCBkYXRhIGhhcyBiZWVuIHBsYXllZCBkb3duc3RyZWFtLgorICAgICogd2FpdCBvbiB0aGUgY2xvY2sgZm9yIHRoZSByZXF1aXJlZCBkdXJhdGlvbiwgcG9zc2libHkgaW50ZXJydXB0aW5nIAorICAgICAgaWYgbmVjZXNzYXJ5IGR1ZSB0byBhbiBpbnRlcnZlbmluZyBhY3Rpdml0eSAoc3VjaCBhcyBhIHVzZXIgbmF2aWdhdGlvbikKKyAgICAqIEZMVVNIIHRoZSBwaXBlbGluZSB1c2luZyBhIG5vcm1hbCBmbHVzaCBzZXF1ZW5jZSAoRkxVU0hfU1RBUlQsIAorICAgICAgY2hhaW4tbG9jaywgRkxVU0hfU1RPUCkKKyAgICAqIFNlbmQgYSBTRUdNRU5UIHRvIHJlc3RhcnQgcGxheWJhY2sgd2l0aCB0aGUgbmV4dCB0aW1lc3RhbXAgaW4gdGhlIAorICAgICAgc3RyZWFtLgorICAKKyAgVGhlIHVwc3RyZWFtIGVsZW1lbnQgcGVyZm9ybWluZyB0aGUgd2FpdCBtdXN0IG9ubHkgZG8gc28gd2hlbiBpbiB0aGUgUExBWUlORyAKKyAgc3RhdGUuIER1cmluZyBQQVVTRUQsIHRoZSBjbG9jayB3aWxsIG5vdCBiZSBydW5uaW5nLCBhbmQgbWF5IG5vdCBldmVuIGhhdmUgCisgIGJlZW4gZGlzdHJpYnV0ZWQgdG8gdGhlIGVsZW1lbnQgeWV0LgorICAKKyAgRFJBSU4gaXMgYSBuZXcgZXZlbnQgdGhhdCB3aWxsIGJsb2NrIG9uIGEgc3JjIHBhZCB1bnRpbCBhbGwgZGF0YSBkb3duc3RyZWFtIAorICBoYXMgYmVlbiBwbGF5ZWQgb3V0LiAKKyAgCisgIEZsdXNoaW5nIGFmdGVyIGNvbXBsZXRpbmcgdGhlIHN0aWxsIHdhaXQgaXMgdG8gZW5zdXJlIHRoYXQgZGF0YSBhZnRlciB0aGUgd2FpdAorICBpcyBwbGF5ZWQgY29ycmVjdGx5LiBXaXRob3V0IGl0LCBzaW5rcyB3aWxsIGNvbnNpZGVyIHRoZSBmaXJzdCBidWZmZXJzIAorICAoeCBzZWNvbmRzLCB3aGVyZSB4IGlzIHRoZSBkdXJhdGlvbiBvZiB0aGUgd2FpdCB0aGF0IG9jY3VycmVkKSB0byBiZQorICBhcnJpdmluZyBsYXRlIGF0IHRoZSBzaW5rLCBhbmQgdGhleSB3aWxsIGJlIGRpc2NhcmRlZCBpbnN0ZWFkIG9mIHBsYXllZC4KKworMykgRm9yIGF1ZGlvLCAzKSBpcyB0aGUgc2FtZSBjYXNlIGFzIDEpIC0gdGhlcmUgaXMgYSAnZ2FwJyBpbiB0aGUgYXVkaW8gZGF0YSAKKyAgIHRoYXQgbmVlZHMgdG8gYmUgcHJlc2VudGVkLCBhbmQgdGhpcyBjYW4gYmUgZG9uZSBieSBzZW5kaW5nIGEgU0VHTUVOVCAKKyAgIHVwZGF0ZSB0aGF0IG1vdmVzIHRoZSBzdGFydCB0aW1lIG9mIHRoZSBzZWdtZW50IHRvIHRoZSBuZXh0IHRpbWVzdGFtcCB3aGVuIAorICAgZGF0YSB3aWxsIGJlIHNlbnQuCisgICAKKyAgIEZvciB2aWRlbywgaG93ZXZlciBpdCBpcyBzbGlnaHRseSBkaWZmZXJlbnQuIFZpZGVvIGZyYW1lcyBhcmUgdHlwaWNhbGx5CisgICB0cmVhdGVkIGF0IHRoZSBtb21lbnQgYXMgY29udGludWluZyB0byBiZSBkaXNwbGF5ZWQgYWZ0ZXIgdGhlaXIgaW5kaWNhdGVkCisgICBkdXJhdGlvbiBpZiBubyBuZXcgZnJhbWUgYXJyaXZlcy4gSW4gMyksIGl0IGlzIGRlc2lyZWQgdG8gZGlzcGxheSBhIGJsYW5rCisgICBmcmFtZSBpbnN0ZWFkLCBpbiB3aGljaCBjYXNlIGF0IGxlYXN0IG9uZSBibGFuayBmcmFtZSBzaG91bGQgYmUgc2VudCBiZWZvcmUKKyAgIHVwZGF0aW5nIHRoZSBzdGFydCB0aW1lIG9mIHRoZSBzZWdtZW50LgorICAgIAorICAgCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LXN0YW5kYXJkcy50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LXN0YW5kYXJkcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQxNzE4NQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZGVzaWduL3BhcnQtc3RhbmRhcmRzLnR4dApAQCAtMCwwICsxLDU0IEBACitPd25lcnNoaXAgb2YgZHluYW1pYyBvYmplY3RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FueSBvYmplY3Qtb3JpZW50ZWQgc3lzdGVtIG9yIGxhbmd1YWdlIHRoYXQgZG9lc24ndCBoYXZlIGF1dG9tYXRpYyBnYXJiYWdlIAorY29sbGVjdGlvbiBoYXMgbWFueSBwb3RlbnRpYWwgcGl0ZmFsbHMgYXMgZmFyIGFzIHRoZSBwb2ludGVycyBnby4gVGhlcmVmb3JlLCAKK3NvbWUgc3RhbmRhcmRzIG11c3QgYmUgYWRoZXJlZCB0byBhcyBmYXIgYXMgd2hvIG93bnMgd2hhdC4KKworU3RyaW5ncworfn5+fn5+fgorCitBcmd1bWVudHMgcGFzc2VkIGludG8gYSBmdW5jdGlvbiBhcmUgb3duZWQgYnkgdGhlIGNhbGxlciwgYW5kIHRoZSBmdW5jdGlvbiAKK3dpbGwgbWFrZSBhIGNvcHkgb2YgdGhlIHN0cmluZyBmb3IgaXRzIG93biBpbnRlcm5hbCB1c2UuICBUaGUgc3RyaW5nIHNob3VsZCAKK2JlIGNvbnN0IGdjaGFyICouICBTdHJpbmdzIHJldHVybmVkIGZyb20gYSBmdW5jdGlvbiBhcmUgYWx3YXlzIGEgY29weSBvZiB0aGUKK29yaWdpbmFsIGFuZCBzaG91bGQgYmUgZnJlZWQgYWZ0ZXIgdXNhZ2UgYnkgdGhlIGNhbGxlci4KKworICBleDoKKworICAgICBuYW1lID0gZ3N0X2VsZW1lbnRfZ2V0X25hbWUgKGVsZW1lbnQpOyAgIC8qIGNvcHkgb2YgbmFtZSBpcyBtYWRlICovCisgICAgIC4uIHVzZSBuYW1lIC4uCisgICAgIGdfZnJlZSAobmFtZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZnJlZSBhZnRlciB1c2FnZSAqLworCisKK09iamVjdHMKK35+fn5+fn4KKworT2JqZWN0cyBwYXNzZWQgaW50byBhIGZ1bmN0aW9uIGFyZSBvd25lZCBieSB0aGUgY2FsbGVyLCBhbnkgYWRkaXRpb25hbCAKK3JlZmVyZW5jZSBoZWxkIHRvIHRoZSBvYmplY3QgYWZ0ZXIgbGVhdmluZyB0aGUgZnVuY3Rpb24gc2hvdWxkIGluY3JlYXNlIHRoZSAKK3JlZmNvdW50IG9mIHRoYXQgb2JqZWN0LiAKKworT2JqZWN0cyByZXR1cm5lZCBmcm9tIGEgZnVuY3Rpb24gYXJlIG93bmVkIGJ5IHRoZSBjYWxsZXIuIFRoaXMgbWVhbnMgdGhhdCB0aGUKK2NhbGxlZCBzaG91bGQgX2ZyZWUoKSBvciBfdW5yZWYoKSB0aGUgb2JqZWN0IGFmdGVyIHVzYWdlLgorCisgIGV4OgorCisgICAgIHBlZXIgPSBnc3RfcGFkX2dldF9wZWVyIChwYWQpOyAgICAgICAgICAvKiBwZWVyIHdpdGggaW5jcmVhc2VkIHJlZmNvdW50ICovCisgICAgIGlmIChwZWVyKSB7CisgICAgICAgLi4gdXNlIHBlZXIgLi4KKyAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChwZWVyKSk7IC8qIHVucmVmIHBlZXIgYWZ0ZXIgdXNhZ2UgKi8KKyAgICAgfQorCisKK0l0ZXJhdG9ycworfn5+fn5+fn5+CisKK1doZW4gcmV0cmlldmluZyBtdWx0aXBsZSBvYmplY3RzIGZyb20gYW4gb2JqZWN0IGFuIGl0ZXJhdG9yIHNob3VsZCBiZSB1c2VkLgorVGhlIGl0ZXJhdG9yIGFsbG93cyB5b3UgdG8gYWNjZXNzIHRoZSBvYmplY3RzIG9uZSBhZnRlciBhbm90aGVyIHdoaWxlIG1ha2luZworc3VyZSB0aGF0IHRoZSBzZXQgb2Ygb2JqZWN0cyByZXRyaWV2ZWQgcmVtYWlucyBjb25zaXN0ZW50LgorCitFYWNoIG9iamVjdCByZXRyaWV2ZWQgZnJvbSBhbiBpdGVyYXRvciBoYXMgaXRzIHJlZmNvdW50IGluY3JlYXNlZCBvciBpcyBhCitjb3B5IG9mIHRoZSBvcmlnaW5hbC4gSW4gYW55IGNhc2UgdGhlIG9iamVjdCBzaG91bGQgYmUgdW5yZWZmZWQgb3IgZnJlZWQKK2FmdGVyIHVzYWdlLgorCisKKwpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1zdGF0ZXMudHh0IGIvZG9jcy9kZXNpZ24vcGFydC1zdGF0ZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYjljOGIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2Rlc2lnbi9wYXJ0LXN0YXRlcy50eHQKQEAgLTAsMCArMSw0MDYgQEAKK1N0YXRlcworLS0tLS0tCisKK0JvdGggZWxlbWVudHMgYW5kIHBhZHMgY2FuIGJlIGluIGRpZmZlcmVudCBzdGF0ZXMuIFRoZSBzdGF0ZXMgb2YgdGhlIHBhZHMgYXJlIAorbGlua2VkIHRvIHRoZSBzdGF0ZSBvZiB0aGUgZWxlbWVudCBzbyB0aGUgZGVzaWduIG9mIHRoZSBzdGF0ZXMgaXMgbWFpbmx5Citmb2N1c2VkIGFyb3VuZCB0aGUgZWxlbWVudCBzdGF0ZXMuCisKK0FuIGVsZW1lbnQgY2FuIGJlIGluIDQgc3RhdGVzLiBOVUxMLCBSRUFEWSwgUEFVU0VEIGFuZCBQTEFZSU5HLiBXaGVuIGFuIGVsZW1lbnQKK2lzIGluaXRpYWxseSBpbnN0YW50aWF0ZWQsIGl0IGlzIGluIHRoZSBOVUxMIHN0YXRlLgorCisKK1N0YXRlIGRlZmluaXRpb25zCit+fn5+fn5+fn5+fn5+fn5+fgorCisgLSBOVUxMOiAgICBUaGlzIGlzIHRoZSBpbml0aWFsIHN0YXRlIG9mIGFuIGVsZW1lbnQuIAorIC0gUkVBRFk6ICAgVGhlIGVsZW1lbnQgc2hvdWxkIGJlIHByZXBhcmVkIHRvIGdvIHRvIFBBVVNFRC4KKyAtIFBBVVNFRDogIFRoZSBlbGVtZW50IHNob3VsZCBiZSByZWFkeSB0byBhY2NlcHQgYW5kIHByb2Nlc3MgZGF0YS4gU2luaworICAgICAgICAgICAgZWxlbWVudHMgaG93ZXZlciBvbmx5IGFjY2VwdCBvbmUgYnVmZmVyIGFuZCB0aGVuIGJsb2NrLgorIC0gUExBWUlORzogVGhlIHNhbWUgYXMgUEFVU0VEIGV4Y2VwdCBmb3IgbGl2ZSBzb3VyY2VzIGFuZCBzaW5rcy4gU2lua3MgYWNjZXB0CisgICAgICAgICAgICBhbmQgcmVuZGVyaW5nIGRhdGEuIExpdmUgc291cmNlcyBwcm9kdWNlIGRhdGEuCisKK1dlIGNhbGwgdGhlIHNlcXVlbmNlIE5VTEwtPlBMQVlJTkcgYW4gdXB3YXJkcyBzdGF0ZSBjaGFuZ2UgYW5kIFBMQVlJTkctPk5VTEwKK2EgZG93bndhcmRzIHN0YXRlIGNoYW5nZS4KKworCitTdGF0ZSB0cmFuc2l0aW9ucworfn5+fn5+fn5+fn5+fn5+fn4KKwordGhlIGZvbGxvd2luZyBzdGF0ZSBjaGFuZ2VzIGFyZSBwb3NzaWJsZToKKworIE5VTEwgLT4gUkVBRFkKKyAgIC0gVGhlIGVsZW1lbnQgbXVzdCBjaGVjayBpZiB0aGUgcmVzb3VyY2VzIGl0IG5lZWRzIGFyZSBhdmFpbGFibGUuCisgICAgIERldmljZSBzaW5rcyBhbmQgLXNvdXJjZXMgdHlwaWNhbGx5IHRyeSB0byBwcm9iZSB0aGUgZGV2aWNlIHRvIGNvbnN0cmFpbgorICAgICB0aGVpciBjYXBzLgorICAgLSBUaGUgZWxlbWVudCBvcGVucyB0aGUgZGV2aWNlLCB0aGlzIGlzIG5lZWRlZCBpZiB0aGUgcHJldmlvdXMgc3RlcCByZXF1aXJlcworICAgICB0aGUgZGV2aWNlIHRvIGJlIG9wZW5lZC4KKworIFJFQURZIC0+IFBBVVNFRAorICAgLSBUaGUgZWxlbWVudCBwYWRzIGFyZSBhY3RpdmF0ZWQgaW4gb3JkZXIgdG8gcmVjZWl2ZSBkYXRhIGluIFBBVVNFRC4KKyAgICAgU3RyZWFtaW5nIHRocmVhZHMgYXJlIHN0YXJ0ZWQuCisgICAtIFNvbWUgZWxlbWVudHMgbWlnaHQgbmVlZCB0byByZXR1cm4gQVNZTkMgYW5kIGNvbXBsZXRlIHRoZSBzdGF0ZSBjaGFuZ2UKKyAgICAgd2hlbiB0aGV5IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uLiBJdCBpcyBhIHJlcXVpcmVtZW50IGZvciBzaW5rcyB0bworICAgICByZXR1cm4gQVNZTkMgYW5kIGNvbXBsZXRlIHRoZSBzdGF0ZSBjaGFuZ2Ugd2hlbiB0aGV5IHJlY2VpdmUgdGhlIGZpcnN0CisgICAgIGJ1ZmZlciBvciBFT1MgZXZlbnQgKHByZXJvbGwpLiBTaW5rcyBhbHNvIGJsb2NrIHRoZSBkYXRhZmxvdyB3aGVuIGluIFBBVVNFRC4KKyAgIC0gQSBwaXBlbGluZSByZXNldHMgdGhlIHJ1bm5pbmdfdGltZSB0byAwLgorICAgLSBMaXZlIHNvdXJjZXMgcmV0dXJuIE5PX1BSRVJPTEwgYW5kIGRvbid0IGdlbmVyYXRlIGRhdGEuCisgCisgUEFVU0VEIC0+IFBMQVlJTkcKKyAgIC0gTW9zdCBlbGVtZW50cyBpZ25vcmUgdGhpcyBzdGF0ZSBjaGFuZ2UuCisgICAtIFRoZSBwaXBlbGluZSBzZWxlY3RzIGEgY2xvY2sgYW5kIGRpc3RyaWJ1dGVzIHRoaXMgdG8gYWxsIHRoZSBjaGlsZHJlbgorICAgICBiZWZvcmUgc2V0dGluZyB0aGVtIHRvIFBMQVlJTkcuIFRoaXMgbWVhbnMgdGhhdCBpdCBpcyBvbmx5IGFsbG93ZWQgdG8KKyAgICAgc3luY2hyb25pemUgb24gdGhlIGNsb2NrIGluIHRoZSBQTEFZSU5HIHN0YXRlLgorICAgLSBUaGUgcGlwZWxpbmUgdXNlcyB0aGUgY2xvY2sgYW5kIHRoZSBydW5uaW5nX3RpbWUgdG8gY2FsY3VsYXRlIHRoZSBiYXNlX3RpbWUuCisgICAgIFRoZSBiYXNlX3RpbWUgaXMgZGlzdHJpYnV0ZWQgdG8gYWxsIGNoaWxkcmVuIHdoZW4gcGVyZm9ybWluZyB0aGUgc3RhdGUKKyAgICAgY2hhbmdlLgorICAgLSBTaW5rIGVsZW1lbnRzIHN0b3AgYmxvY2tpbmcgb24gdGhlIHByZXJvbGwgYnVmZmVyIG9yIGV2ZW50IGFuZCBzdGFydAorICAgICByZW5kZXJpbmcgdGhlIGRhdGEuCisgICAtIFNpbmtzIGNhbiBwb3N0IHRoZSBFT1MgbWVzc2FnZSBpbiB0aGUgUExBWUlORyBzdGF0ZS4gSXQgaXMgbm90IGFsbG93ZWQgdG8KKyAgICAgcG9zdCBFT1Mgd2hlbiBub3QgaW4gdGhlIFBMQVlJTkcgc3RhdGUuCisgICAtIFdoaWxlIHN0cmVhbWluZyBpbiBQQVVTRUQgb3IgUExBWUlORyBlbGVtZW50cyBjYW4gY3JlYXRlIGFuZCByZW1vdmUKKyAgICAgc29tZXRpbWVzIHBhZHMuCisgICAtIExpdmUgc291cmNlcyBzdGFydCBnZW5lcmF0aW5nIGRhdGEgYW5kIHJldHVybiBTVUNDRVNTLgorCisgUExBWUlORyAtPiBQQVVTRUQKKyAgIC0gTW9zdCBlbGVtZW50cyBpZ25vcmUgdGhpcyBzdGF0ZSBjaGFuZ2UuCisgICAtIFRoZSBwaXBlbGluZSBjYWxjdWxhdGVzIHRoZSBydW5uaW5nX3RpbWUgYmFzZWQgb24gdGhlIGxhc3Qgc2VsZWN0ZWQgY2xvY2sKKyAgICAgYW5kIHRoZSBiYXNlX3RpbWUuIEl0IHN0b3JlcyB0aGlzIGluZm9ybWF0aW9uIHRvIGNvbnRpbnVlIHBsYXliYWNrIHdoZW4KKyAgICAgZ29pbmcgYmFjayB0byB0aGUgUExBWUlORyBzdGF0ZS4KKyAgIC0gU2lua3MgdW5ibG9jayBhbnkgY2xvY2sgd2FpdCBjYWxscy4KKyAgIC0gV2hlbiBhIHNpbmsgZG9lcyBub3QgaGF2ZSBhIHBlbmRpbmcgYnVmZmVyIHRvIHBsYXksIGl0IHJldHVybnMgQVNZTkMgZnJvbSAKKyAgICAgdGhpcyBzdGF0ZSBjaGFuZ2UgYW5kIGNvbXBsZXRlcyB0aGUgc3RhdGUgY2hhbmdlIHdoZW4gaXQgcmVjZWl2ZXMgYSBuZXcKKyAgICAgYnVmZmVyIG9yIGFuIEVPUyBldmVudC4KKyAgIC0gQW55IHF1ZXVlZCBFT1MgbWVzc2FnZXMgYXJlIHJlbW92ZWQgc2luY2UgdGhleSB3aWxsIGJlIHJlcG9zdGVkIHdoZW4gZ29pbmcKKyAgICAgYmFjayB0byB0aGUgUExBWUlORyBzdGF0ZS4gVGhlIEVPUyBtZXNzYWdlcyBhcmUgcXVldWVkIGluIEdzdEJpbnMuCisgICAtIExpdmUgc291cmNlcyBzdG9wIGdlbmVyYXRpbmcgZGF0YSBhbmQgcmV0dXJuIE5PX1BSRVJPTEwuCisKKyBQQVVTRUQgLT4gUkVBRFkKKyAgIC0gU2lua3MgdW5ibG9jayBhbnkgd2FpdHMgaW4gdGhlIHByZXJvbGwuCisgICAtIEVsZW1lbnRzIHVuYmxvY2sgYW55IHdhaXRzIG9uIGRldmljZXMKKyAgIC0gQ2hhaW4gb3IgZ2V0X3JhbmdlIGZ1bmN0aW9ucyByZXR1cm4gV1JPTkdfU1RBVEUuCisgICAtIFRoZSBlbGVtZW50IHBhZHMgYXJlIGRlYWN0aXZhdGVkIHNvIHRoYXQgc3RyZWFtaW5nIGJlY29tZXMgaW1wb3NzaWJsZSBhbmQKKyAgICAgYWxsIHN0cmVhbWluZyB0aHJlYWRzIGFyZSBzdG9wcGVkLgorICAgLSBUaGUgc2luayBmb3JnZXRzIGFsbCBuZWdvdGlhdGVkIGZvcm1hdHMKKyAgIC0gRWxlbWVudHMgcmVtb3ZlIGFsbCBzb21ldGltZXMgcGFkcworIAorIFJFQURZIC0+IE5VTEwKKyAgIC0gRWxlbWVudHMgY2xvc2UgZGV2aWNlcworICAgLSBFbGVtZW50cyByZXNldCBhbnkgaW50ZXJuYWwgc3RhdGUuCisKKworU3RhdGUgdmFyaWFibGVzCit+fn5+fn5+fn5+fn5+fn4KKworQW4gZWxlbWVudCBoYXMgNCBzdGF0ZSB2YXJpYWJsZXMgdGhhdCBhcmUgcHJvdGVjdGVkIHdpdGggdGhlIG9iamVjdCBMT0NLOgorCisgIC0gU1RBVEUKKyAgLSBTVEFURV9ORVhUCisgIC0gU1RBVEVfUEVORElORyAKKyAgLSBTVEFURV9SRVRVUk4KKworVGhlIFNUQVRFIGFsd2F5cyByZWZsZWN0cyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZWxlbWVudC4gCitUaGUgU1RBVEVfTkVYVCByZWZsZWN0cyB0aGUgbmV4dCBzdGF0ZSB0aGUgZWxlbWVudCB3aWxsIGdvIHRvLgorVGhlIFNUQVRFX1BFTkRJTkcgYWx3YXlzIHJlZmxlY3RzIHRoZSByZXF1aXJlZCBzdGF0ZSBvZiB0aGUgZWxlbWVudC4gCitUaGUgU1RBVEVfUkVUVVJOIHJlZmxlY3RzIHRoZSBsYXN0IHJldHVybiB2YWx1ZSBvZiBhIHN0YXRlIGNoYW5nZS4KKworVGhlIFNUQVRFX05FWFQgYW5kIFNUQVRFX1BFTkRJTkcgY2FuIGJlIFZPSURfUEVORElORyBpZiB0aGUgZWxlbWVudCBpcyBpbiAKK3RoZSByaWdodCBzdGF0ZS4gCisKK0FuIGVsZW1lbnQgaGFzIGEgc3BlY2lhbCBsb2NrIHRvIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IGludm9jYXRpb25zIG9mCitfc2V0X3N0YXRlKCksIGNhbGxlZCB0aGUgU1RBVEVfTE9DSy4gCisKKworU2V0dGluZyBzdGF0ZSBvbiBlbGVtZW50cworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgc3RhdGUgb2YgYW4gZWxlbWVudCBjYW4gYmUgY2hhbmdlZCB3aXRoIF9lbGVtZW50X3NldF9zdGF0ZSgpLiBXaGVuIGNoYW5naW5nCit0aGUgc3RhdGUgb2YgYW4gZWxlbWVudCBhbGwgaW50ZXJtZWRpYXRlIHN0YXRlcyB3aWxsIGFsc28gYmUgc2V0IG9uIHRoZSBlbGVtZW50Cit1bnRpbCB0aGUgZmluYWwgZGVzaXJlZCBzdGF0ZSBpcyBzZXQuCisKK1RoZSBfc2V0X3N0YXRlKCkgZnVuY3Rpb24gY2FuIHJldHVybiAzIHBvc3NpYmxlIHZhbHVlczoKKworICBHU1RfU1RBVEVfRkFJTFVSRTogVGhlIHN0YXRlIGNoYW5nZSBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLiBUaGUgcGx1Z2luIHNob3VsZAorICAgICAgICAgICAgICAgICAgICAgaGF2ZSBwb3N0ZWQgYW4gZXJyb3IgbWVzc2FnZSBvbiB0aGUgYnVzIHdpdGggaW5mb3JtYXRpb24uCisgIAorICBHU1RfU1RBVEVfU1VDQ0VTUzogVGhlIHN0YXRlIGNoYW5nZSBpcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LgorCisgIEdTVF9TVEFURV9BU1lOQzogICBUaGUgc3RhdGUgY2hhbmdlIHdpbGwgY29tcGxldGUgbGF0ZXIgb24uIFRoaXMgY2FuIGhhcHBlbiAKKyAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIGVsZW1lbnQgbmVlZHMgYSBsb25nIHRpbWUgdG8gcGVyZm9ybSB0aGUgc3RhdGUKKwkJICAgICBjaGFuZ2Ugb3IgZm9yIHNpbmtzIHRoYXQgbmVlZCB0byByZWNlaXZlIHRoZSBmaXJzdCBidWZmZXIKKwkJICAgICBiZWZvcmUgdGhleSBjYW4gY29tcGxldGUgdGhlIHN0YXRlIGNoYW5nZSAocHJlcm9sbCkuCisKKyAgR1NUX1NUQVRFX05PX1BSRVJPTEw6IFRoZSBzdGF0ZSBjaGFuZ2UgaXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBidXQgdGhlIGVsZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgIHdpbGwgbm90IGJlIGFibGUgdG8gcHJvZHVjZSBkYXRhIGluIHRoZSBQQVVTRUQgc3RhdGUuCisKK0luIHRoZSBjYXNlIG9mIGFuIEFTWU5DIHN0YXRlIGNoYW5nZSwgaXQgaXMgcG9zc2libGUgdG8gcHJvY2VlZCB0byB0aGUgbmV4dAorc3RhdGUgYmVmb3JlIHRoZSBjdXJyZW50IHN0YXRlIGNoYW5nZSBjb21wbGV0ZWQsIGhvd2V2ZXIsIHRoZSBlbGVtZW50IHdpbGwgb25seQorZ2V0IHRvIHRoaXMgbmV4dCBzdGF0ZSBiZWZvcmUgY29tcGxldGluZyB0aGUgcHJldmlvdXMgQVNZTkMgc3RhdGUgY2hhbmdlLiAKK0FmdGVyIHJlY2VpdmluZyBhbiBBU1lOQyByZXR1cm4gdmFsdWUsIHlvdSBjYW4gdXNlIF9lbGVtZW50X2dldF9zdGF0ZSgpIHRvIHBvbGwgCit0aGUgc3RhdHVzIG9mIHRoZSBlbGVtZW50LiBJZiB0aGUgcG9sbGluZyByZXR1cm5zIFNVQ0NFU1MsIHRoZSBlbGVtZW50IGNvbXBsZXRlZAordGhlIHN0YXRlIGNoYW5nZSB0byB0aGUgbGFzdCByZXF1ZXN0ZWQgc3RhdGUgd2l0aCBfc2V0X3N0YXRlKCkuCisKK1doZW4gc2V0dGluZyB0aGUgc3RhdGUgb2YgYW4gZWxlbWVudCwgdGhlIFNUQVRFX1BFTkRJTkcgaXMgc2V0IHRvIHRoZSByZXF1aXJlZCAKK3N0YXRlLiBUaGVuIHRoZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gb2YgdGhlIGVsZW1lbnQgaXMgY2FsbGVkIGFuZCB0aGUgcmVzdWx0IG9mIAordGhhdCBmdW5jdGlvbiBpcyB1c2VkIHRvIHVwZGF0ZSB0aGUgU1RBVEUgYW5kIFNUQVRFX1JFVFVSTiBmaWVsZHMsIFNUQVRFX05FWFQsCitTVEFURV9QRU5ESU5HIGFuZCBTVEFURV9SRVRVUk4gZmllbGRzLiBJZiB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgQVNZTkMsIHRoaXMgcmVzdWx0CitpcyBpbW1lZGlhdGVseSByZXR1cm5lZCB0byB0aGUgY2FsbGVyLgorCisKK0dldHRpbmcgc3RhdGUgb2YgZWxlbWVudHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIF9nZXRfc3RhdGUoKSBmdW5jdGlvbiB0YWtlcyAzIGFyZ3VtZW50cywgdHdvIHBvaW50ZXJzIHRoYXQgd2lsbCBob2xkIHRoZQorY3VycmVudCBhbmQgcGVuZGluZyBzdGF0ZSBhbmQgb25lIEdzdENsb2NrVGltZSB0aGF0IGhvbGRzIGEgdGltZW91dCB2YWx1ZS4gVGhlIAorZnVuY3Rpb24gcmV0dXJucyBhIEdzdEVsZW1lbnRTdGF0ZVJldHVybi4KKworIC0gSWYgdGhlIGVsZW1lbnQgcmV0dXJuZWQgU1VDQ0VTUyB0byB0aGUgcHJldmlvdXMgX3NldF9zdGF0ZSgpIGZ1bmN0aW9uLCB0aGlzCisgICBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgbGFzdCBzdGF0ZSBzZXQgb24gdGhlIGVsZW1lbnQgYW5kIFZPSURfUEVORElORyBpbgorICAgdGhlIHBlbmRpbmcgc3RhdGUgdmFsdWUuIFRoZSBmdW5jdGlvbiByZXR1cm5zIEdTVF9TVEFURV9TVUNDRVNTLgorCisgLSBJZiB0aGUgZWxlbWVudCByZXR1cm5lZCBOT19QUkVST0xMIHRvIHRoZSBwcmV2aW91cyBfc2V0X3N0YXRlKCkgZnVuY3Rpb24sIHRoaXMKKyAgIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBsYXN0IHN0YXRlIHNldCBvbiB0aGUgZWxlbWVudCBhbmQgVk9JRF9QRU5ESU5HIGluCisgICB0aGUgcGVuZGluZyBzdGF0ZSB2YWx1ZS4gVGhlIGZ1bmN0aW9uIHJldHVybnMgR1NUX1NUQVRFX05PX1BSRVJPTEwuCisKKyAtIElmIHRoZSBlbGVtZW50IHJldHVybmVkIEZBSUxVUkUgdG8gdGhlIHByZXZpb3VzIF9zZXRfc3RhdGUoKSBjYWxsLCB0aGlzIAorICAgZnVuY2l0b24gd2lsbCByZXR1cm4gRkFJTFVSRSB3aXRoIHRoZSBzdGF0ZSBzZXQgdG8gdGhlIGN1cnJlbnQgc3RhdGUgb2YKKyAgIHRoZSBlbGVtZW50IGFuZCB0aGUgcGVuZGluZyBzdGF0ZSBzZXQgdG8gdGhlIHZhbHVlIHVzZWQgaW4gdGhlIGxhc3QgY2FsbAorICAgb2YgX3NldF9zdGF0ZSgpLgorCisgLSBJZiB0aGUgZWxlbWVudCByZXR1cm5lZCBBU1lOQyB0byB0aGUgcHJldmlvdXMgX3NldF9zdGF0ZSgpIGNhbGwsIHRoaXMgZnVuY3Rpb24KKyAgIHdpbGwgd2FpdCBmb3IgdGhlIGVsZW1lbnQgdG8gY29tcGxldGUgaXRzIHN0YXRlIGNoYW5nZSB1cCB0byB0aGUgYW1vdW50IG9mIHRpbWUKKyAgIHNwZWNpZmllZCBpbiB0aGUgR3N0Q2xvY2tUaW1lLiAKKworICAgKiBJZiB0aGUgZWxlbWVudCBkb2VzIG5vdCBjb21wbGV0ZSB0aGUgc3RhdGUgY2hhbmdlIGluIHRoZSBzcGVjaWZpZWQgYW1vdW50IG9mIAorICAgICB0aW1lLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIEFTWU5DIHdpdGggdGhlIHN0YXRlIHNldCB0byB0aGUgY3VycmVudCBzdGF0ZQorICAgICBhbmQgdGhlIHBlbmRpbmcgc3RhdGUgc2V0IHRvIHRoZSBwZW5kaW5nIHN0YXRlLgorCisgICAqIElmIHRoZSBlbGVtZW50IGNvbXBsZXRlcyB0aGUgc3RhdGUgY2hhbmdlIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRpbWVvdXQsIHRoaXMgCisgICAgIGZ1bmN0aW9uIHJldHVybnMgdGhlIHVwZGF0ZWQgc3RhdGUgYW5kIFZPSURfUEVORElORyBhcyB0aGUgcGVuZGluZyBzdGF0ZS4KKworICAgKiBJZiB0aGUgZWxlbWVudCBhYm9ydHMgdGhlIEFTWU5DIHN0YXRlIGNoYW5nZSBkdWUgdG8gYW4gZXJyb3Igd2l0aGluIHRoZSAKKyAgICAgc3BlY2lmaWVkIHRpbWVvdXQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBGQUlMVVJFIHdpdGggdGhlIHN0YXRlIHNldCB0byBsYXN0CisgICAgIHN1Y2Nlc3NmdWwgc3RhdGUgYW5kIHBlbmRpbmcgc2V0IHRvIHRoZSBsYXN0IGF0dGVtcHQuIFRoZSBlbGVtZW50IHNob3VsZAorICAgICBhbHNvIHBvc3QgYW4gZXJyb3IgbWVzc2FnZSBvbiB0aGUgYnVzIHdpdGggbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvYmxlbS4KKworCitTdGF0ZXMgaW4gR3N0QmluCit+fn5+fn5+fn5+fn5+fn5+CisKK0EgR3N0QmluIG1hbmFnZXMgdGhlIHN0YXRlIG9mIGl0cyBjaGlsZHJlbi4gSXQgZG9lcyB0aGlzIGJ5IHByb3BhZ2F0aW5nIHRoZSBzdGF0ZQorY2hhbmdlcyBwZXJmb3JtZWQgb24gaXQgdG8gYWxsIG9mIGl0cyBjaGlsZHJlbi4gIFRoZSBfc2V0X3N0YXRlKCkgZnVuY3Rpb24gb24gYSAKK2JpbiB3aWxsIGNhbGwgdGhlIF9zZXRfc3RhdGUoKSBmdW5jdGlvbiBvbiBhbGwgb2YgaXRzIGNoaWxkcmVuLCB0aGF0IGFyZQorbm90IGFscmVhZHkgaW4gdGhlIHRhcmdldCBzdGF0ZSBvciBpbiBhIGNoYW5nZSBzdGF0ZSB0byB0aGUgdGFyZ2V0IHN0YXRlLiAKKworVGhlIGNoaWxkcmVuIGFyZSBpdGVyYXRlZCBmcm9tIHRoZSBzaW5rIGVsZW1lbnRzIHRvIHRoZSBzb3VyY2UgZWxlbWVudHMuIFRoaXMgbWFrZXMKK3N1cmUgdGhhdCB3aGVuIGNoYW5naW5nIHRoZSBzdGF0ZSBvZiBhbiBlbGVtZW50LCB0aGUgZG93bnN0cmVhbSBlbGVtZW50cyBhcmUgaW4KK3RoZSBjb3JyZWN0IHN0YXRlIHRvIHByb2Nlc3MgdGhlIGV2ZW50dWFsIGJ1ZmZlcnMuIEluIHRoZSBjYXNlIG9mIGEgZG93bndhcmRzCitzdGF0ZSBjaGFuZ2UsIHRoZSBzaW5rIGVsZW1lbnRzIHdpbGwgc2h1dCBkb3duIGZpcnN0IHdoaWNoIG1ha2VzIHRoZSB1cHN0cmVhbQorZWxlbWVudHMgc2h1dCBkb3duIGFzIHdlbGwgc2luY2UgdGhlIF9wdXNoKCkgZnVuY3Rpb24gcmV0dXJucyBhIEdTVF9GTE9XX1dST05HX1NUQVRFCitlcnJvci4KKworSWYgYWxsIHRoZSBjaGlsZHJlbiByZXR1cm4gU1VDQ0VTUywgdGhlIGZ1bmN0aW9uIHJldHVybnMgU1VDQ0VTUyBhcyB3ZWxsLiAKKworSWYgb25lIG9mIHRoZSBjaGlsZHJlbiByZXR1cm5zIEZBSUxVUkUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEZBSUxVUkUgYXMgd2VsbC4gSW4KK3RoaXMgc3RhdGUgaXQgaXMgcG9zc2libGUgdGhhdCBzb21lIGVsZW1lbnRzIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIHN0YXRlLiBUaGUKK2FwcGxpY2F0aW9uIGNhbiBjaGVjayB3aGljaCBlbGVtZW50cyBoYXZlIGEgY2hhbmdlZCBzdGF0ZSwgd2hpY2ggd2VyZSBpbiBlcnJvcgorYW5kIHdoaWNoIHdlcmUgbm90IGFmZmVjdGVkIGJ5IGl0ZXJhdGluZyB0aGUgZWxlbWVudHMgYW5kIGNhbGxpbmcgX2dldF9zdGF0ZSgpCitvbiB0aGUgZWxlbWVudHMuCisKK0lmIGFmdGVyIGNhbGxpbmcgdGhlIHN0YXRlIGZ1bmN0aW9uIG9uIGFsbCBjaGlsZHJlbiwgb25lIG9mIHRoZSBjaGlsZHJlbiByZXR1cm5lZAorQVNZTkMsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEFTWU5DIGFzIHdlbGwuCisKK0lmIGFmdGVyIGNhbGxpbmcgdGhlIHN0YXRlIGZ1bmN0aW9uIG9uIGFsbCBjaGlsZHJlbiwgb25lIG9mIHRoZSBjaGlsZHJlbiByZXR1cm5lZAorTk9fUFJFUk9MTCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgTk9fUFJFUk9MTCBhcyB3ZWxsLiAKKworSWYgYm90aCBOT19QUkVST0xMIGFuZCBBU1lOQyBjaGlsZHJlbiBhcmUgcHJlc2VudCwgTk9fUFJFUk9MTCBpcyByZXR1cm5lZC4KKworVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGJpbiBjYW4gYmUgcmV0cmlldmVkIHdpdGggX2dldF9zdGF0ZSgpLiAKKworSWYgdGhlIGJpbiBpcyBwZXJmb3JtaW5nIGFuIEFTWU5DIHN0YXRlIGNoYW5nZSwgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IHVwZGF0ZSBpdHMKK2N1cnJlbnQgc3RhdGUgZmllbGRzIHdoZW4gaXQgcmVjZWl2ZXMgc3RhdGUgbWVzc2FnZXMgZnJvbSB0aGUgY2hpbGRyZW4uCisKKworSW1wbGVtZW50aW5nIHN0YXRlcyBpbiBlbGVtZW50cworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitSRUFEWQorXl5eXl4KKworCisKK3Vwd2FyZCBzdGF0ZSBjaGFuZ2UKK35+fn5+fn5+fn5+fn5+fn5+fn4KKworVXB3YXJkIHN0YXRlIGNoYW5nZXMgYWx3YXlzIHJldHVybiBBU1lOQyBlaXRoZXIgaWYgdGhlIFNUQVRFX1BFTkRJTkcgaXMKK3JlYWNoZWQgb3Igbm90LgorCitFbGVtZW50OgorCisgIEEgLT4gQiA9PiBTVUNDRVNTIAorICAgIC0gY29tbWl0IHN0YXRlCisKKyAgQSAtPiBCID0+IEFTWU5DIAorICAgIC0gbm8gY29tbWl0IHN0YXRlCisgICAgLSBlbGVtZW50IGNvbW1pdHMgc3RhdGUgQVNZTkMKKworICBBIC0+IEIgd2hpbGUgQVNZTkMKKyAgICAtIHVwZGF0ZSBTVEFURV9QRU5ESU5HIHN0YXRlCisgICAgLSBubyBjb21taXQgc3RhdGUKKyAgICAtIG5vIGNoYW5nZV9zdGF0ZSBjYWxsZWQgb24gZWxlbWVudAorCitCaW46CisKKyAgQS0+QjogYWxsIGVsZW1lbnRzIFNVQ0NFU1MKKyAgICAtIGNvbW1pdCBzdGF0ZQorCisgIEEtPkI6IHNvbWUgZWxlbWVudHMgQVNZTkMKKyAgICAtIG5vIGNvbW1pdCBzdGF0ZQorICAgIC0gbGlzdGVuIGZvciBjb21taXQgbWVzc2FnZXMgb24gYnVzCisgICAgLSBmb3IgZWFjaCBjb21taXQgbWVzc2FnZSwgcG9sbCBlbGVtZW50cywgdGhpcyBoYXBwZW5zIGluIGFub3RoZXIKKyAgICAgIHRocmVhZC4KKyAgICAtIGlmIG5vIEFTWU5DIGVsZW1lbnRzLCBjb21taXQgc3RhdGUsIGNvbnRpbnVlIHN0YXRlIGNoYW5nZSAKKyAgICAgIHRvIFNUQVRFX1BFTkRJTkcKKworZG93bndhcmQgc3RhdGUgY2hhbmdlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworRG93bndhcmQgc3RhdGUgY2hhbmdlcyBvbmx5IHJldHVybiBBU1lOQyBpZiB0aGUgZmluYWwgc3RhdGUgaXMgQVNZTkMuCitUaGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IGl0J3Mgbm90IG5lZWRlZCB0byB3YWl0IGZvciBhbiBlbGVtZW50IHRvCitjb21wbGV0ZSB0aGUgcHJlcm9sbCBvciBvdGhlciBBU1lOQyBzdGF0ZSBjaGFuZ2VzIHdoZW4gb25lIG9ubHkgd2FudHMgdG8KK3NodXQgZG93biBhbiBlbGVtZW50LgorCitFbGVtZW50OgorCisgIEEgLT4gQiA9PiBTVUNDRVNTIAorICAgIC0gY29tbWl0IHN0YXRlCisKKyAgQSAtPiBCID0+IEFTWU5DIG5vdCBmaW5hbCBzdGF0ZQorICAgIC0gY29tbWl0IHN0YXRlIG9uIGJlaGFsZiBvZiBlbGVtZW50CisKKyAgQSAtPiBCID0+IEFTWU5DIGZpbmFsIHN0YXRlCisgICAgLSBlbGVtZW50IHdpbGwgY29tbWl0IEFTWU5DIAorCitCaW46CisgIAorICBBIC0+IEIgLT4gU1VDQ0VTUworICAgIC0gY29tbWl0IHN0YXRlCisKKyAgQSAtPiBCIC0+IEFTWU5DIG5vdCBmaW5hbCBzdGF0ZQorICAgIC0gY29tbWl0IHN0YXRlIG9uIGJlaGFsZiBvZiBlbGVtZW50LCBjb250aW51ZSBzdGF0ZSBjaGFuZ2UKKworICBBIC0+IEIgPT4gQVNZTkMgZmluYWwgc3RhdGUKKyAgICAtIG5vIGNvbW1pdCBzdGF0ZQorICAgIC0gbGlzdGVuIGZvciBjb21taXQgbWVzc2FnZXMgb24gYnVzCisgICAgLSBmb3IgZWFjaCBjb21taXQgbWVzc2FnZSwgcG9sbCBlbGVtZW50cworICAgIC0gaWYgbm8gQVNZTkMgZWxlbWVudHMsIGNvbW1pdCBzdGF0ZQorCisKK0xvY2tpbmcgb3ZlcnZpZXcgKGVsZW1lbnQpCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisqIEVsZW1lbnQgY29tbWl0aW5nIFNVQ0NFU1MKKworIC0gU1RBVEVfTE9DSyBpcyB0YWtlbiBpbiBzZXRfc3RhdGUKKyAtIGNoYW5nZSBzdGF0ZSBpcyBjYWxsZWQgaWYgU1VDQ0VTUywgY29tbWl0IHN0YXRlIGlzIGNhbGxlZAorIC0gY29tbWl0IHN0YXRlIGNhbGxzIGNoYW5nZV9zdGF0ZSB0byBuZXh0IHN0YXRlIGNoYW5nZS4KKyAtIGlmIGZpbmFsIHN0YXRlIGlzIHJlYWNoZWQsIHN0YWNrIHVud2luZHMgYW5kIHJlc3VsdCBpcyByZXR1cm5lZCB0byAKKyAgIHNldF9zdGF0ZSBhbmQgY2FsbGVyLgorCisKKyBzZXRfc3RhdGUoZWxlbWVudCkgICAgICAgY2hhbmdlX3N0YXRlIChlbGVtZW50KSAgIGNvbW1pdF9zdGF0ZQorCisgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfAorICBTVEFURV9MT0NLICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+fCAgICAgICAgICAgICAgICAgICAgICAgfCAKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAoZG8gc3RhdGUgY2hhbmdlKSAgICAgfAorICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBpZiBTVUNDRVNTICAgICAgICAgICAgfAorICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLT58CisgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgcG9zdCBtZXNzYWdlCisgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfDwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBpZiAoIWZpbmFsKSBjaGFuZ2Vfc3RhdGUgKG5leHQpCisgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgZWxzZSBTSUdOQUwKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgIHw8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgfCAgICAgU1VDQ0VTUyAgICAgICAgICAgICAgIAorICAgICAgfCAKKyAgU1RBVEVfVU5MT0NLCisgICAgICB8ICAgICAgCisgICAgU1VDQ0VTUyAgIAorICAgICAgICAgICAKKworCisqIEVsZW1lbnQgY29tbWl0aW5nIEFTWU5DCisKKyAtIFNUQVRFX0xPQ0sgaXMgdGFrZW4gaW4gc2V0X3N0YXRlCisgLSBjaGFuZ2Ugc3RhdGUgaXMgY2FsbGVkIGFuZCByZXR1cm5zIEFTWU5DCisgLSBBU1lOQyByZXR1cm5lZCB0byB0aGUgY2FsbGVyLgorIC0gZWxlbWVudCB0YWtlcyBMT0NLIGluIHN0cmVhbWluZyB0aHJlYWQuCisgLSBlbGVtZW50IGNhbGxzIGNvbW1pdF9zdGF0ZSBpbiBzdHJlYW1pbmcgdGhyZWFkLgorIC0gY29tbWl0IHN0YXRlIGNhbGxzIGNoYW5nZV9zdGF0ZSB0byBuZXh0IHN0YXRlIGNoYW5nZS4KKworCisgc2V0X3N0YXRlKGVsZW1lbnQpICAgICAgIGNoYW5nZV9zdGF0ZSAoZWxlbWVudCkgICAgIHN0cmVhbV90aHJlYWQgICAgICBjb21taXRfc3RhdGUgKGVsZW1lbnQpCisKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwKKyAgU1RBVEVfTE9DSyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwKKyAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+fCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAoc3RhcnRfdGFzaykgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIFNUUkVBTV9MT0NLICAgICAgICAgICAgIHwKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfC4uLiAgICAgICAgICAgICAgIHwKKyAgICAgIHw8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwKKyAgICAgIHwgICAgIEFTWU5DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUUkVBTV9VTkxPQ0sgICAgICAgICAgIHwKKyAgU1RBVEVfVU5MT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgICAgICAgCisgICAgICB8ICAgICAgICAgICAgICAgIC4uLi4uc3luYy4uLi4uLi4uICAgICAgICAgICAgICAgU1RBVEVfTE9DSyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgCisgICAgQVNZTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLT58CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8LS0tPiBwb3N0X21lc3NhZ2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfC0tLT4gaWYgKCFmaW5hbCkgY2hhbmdlX3N0YXRlIChuZXh0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCAgICAgZWxzZSBTSUdOQUwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfDwtLS0tLS0tLS0tLS0tLS0tLXwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVEFURV9VTkxPQ0sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RSRUFNX0xPQ0sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUUkVBTV9VTkxPQ0sKKworUmVtYXJrcworfn5+fn5+fgorCitzZXRfc3RhdGUgY2Fubm90IGJlIGNhbGxlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMgYXQgdGhlIHNhbWUgdGltZS4gVGhlIFNUQVRFX0xPQ0sKK3ByZXZlbnRzIHRoaXMuCisKK3N0YXRlIHZhcmlhYmxlcyBhcmUgcHJvdGVjdGVkIHdpdGggdGhlIExPQ0suCisKK2NhbGxpbmcgc2V0X3N0YXRlIHdoaWxlIGdzdF9zdGF0ZSBpcyBjYWxsZWQgc2hvdWxkIHVubG9jayB0aGUgZ2V0X3N0YXRlIHdpdGgKK2FuIGVycm9yLiBUaGUgY29va2llIHdpbGwgZG8gdGhhdC4KKworCisgc2V0X3N0YXRlKGVsZW1lbnQpCisKKyAgU1RBVEVfTE9DSworCisgIExPQ0sKKyAgdXBkYXRlIGN1cnJlbnQsIG5leHQsIHBlbmRpbmcgc3RhdGUKKyAgY29va2llKysKKyAgVU5MT0NLCisKKyAgY2hhbmdlX3N0YXRlCisKKyAgU1RBVEVfVU5MT0NLCisgCisgICAKKworCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LXN0cmVhbS1zdGF0dXMudHh0IGIvZG9jcy9kZXNpZ24vcGFydC1zdHJlYW0tc3RhdHVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDg1MzhmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9kZXNpZ24vcGFydC1zdHJlYW0tc3RhdHVzLnR4dApAQCAtMCwwICsxLDEwOSBAQAorU3RyZWFtIFN0YXR1cworLS0tLS0tLS0tLS0tLQorCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgZGVzaWduIGFuZCB1c2UgY2FzZXMgZm9yIHRoZSBzdHJlYW0gc3RhdHVzCittZXNzYWdlcy4KKworU1RSRUFNX1NUQVRVUyBtZXNzYWdlcyBhcmUgcG9zdGVkIG9uIHRoZSBidXMgd2hlbiB0aGUgc3RhdGUgb2YgYSBzdHJlYW1pbmcKK3RocmVhZCBjaGFuZ2VzLiBUaGUgcHVycG9zZSBvZiB0aGlzIG1lc3NhZ2UgaXMgdG8gYWxsb3cgdGhlIGFwcGxpY2F0aW9uIHRvCitpbnRlcmFjdCB3aXRoIHRoZSBzdHJlYW1pbmcgdGhyZWFkIHByb3BlcnRpZXMsIHN1Y2ggYXMgdGhlIHRocmVhZCBwcmlvcml0eSBvcgordGhlIHRocmVhZHBvb2wgdG8gdXNlLgorCitXZSBhY2NvbW1vZGF0ZSBmb3IgdGhlIGZvbGxvd2luZyByZXF1aXJlbWVudHM6CisKKyAtIEFwcGxpY2F0aW9uIGlzIGluZm9ybWVkIHdoZW4gYSBzdHJlYW1pbmcgdGhyZWFkIGlzIGFib3V0IHRvIGJlIGNyZWF0ZWQuIEl0CisgICBzaG91bGQgYmUgcG9zc2libGUgZm9yIHRoZSBhcHBsaWNhdGlvbiB0byBzdWdnZXN0IGEgY3VzdG9tIEdzdFRhc2suCisgLSBBcHBsaWNhdGlvbiBpcyBpbmZvcm1lZCB3aGVuIHRoZSBzdGF0dXMgb2YgYSBzdHJlYW1pbmcgdGhyZWFkIGlzIGNoYW5nZWQuCisgICBUaGlzIGNhbiBiZSBpbnRlcmVzdGluZyBmb3IgR1VJIGFwcGxpY2F0aW9uIHRoYXQgd2FudCB0byB2aXN1YWxpemUgdGhlIHN0YXR1cworICAgb2YgdGhlIHN0cmVhbWluZyB0aHJlYWRzIChwbGF5aW5nL3BhdXNlZC9zdG9wcGVkKQorIC0gQXBwbGljYXRpb24gaXMgaW5mb3JtZWQgd2hlbiBhIHN0cmVhbWluZyB0aHJlYWQgaXMgZGVzdHJveWVkLgorCitXZSBhbGxvdyBmb3IgdGhlIGZvbGxvd2luZyBzY2VuYXJpb3M6CisKKyAtIEVsZW1lbnRzIHJlcXVpcmUgYSBzcGVjaWZpYyAoaW50ZXJuYWwpIHN0cmVhbWluZyB0aHJlYWQgdG8gb3BlcmF0ZSBvciB0aGUKKyAgIGFwcGxpY2F0aW9uIGNhbiBjcmVhdGUvc3BlY2lmeSBhIHRocmVhZCBmb3IgdGhlIGVsZW1lbnQuCisgLSBFbGVtZW50cyBhbGxvdyB0aGUgYXBwbGljYXRpb24gdG8gY29uZmlndXJlIGEgcHJpb3JpdHkgb24gdGhlIHRocmVhZHMuCisKKworVXNlIGNhc2VzCit+fn5+fn5+fn4KKworICogYm9vc3QgdGhlIHByaW9yaXR5IG9mIHRoZSB1ZHAgcmVjZWl2ZXIgc3RyZWFtaW5nIHRocmVhZAorCisgICAgLi0tLS0tLS0tLiAgICAuLS0tLS0tLS4gICAgLi0tLS0tLS4gICAgLi0tLS0tLS0uCisgICAgfCB1ZHBzcmMgfCAgICB8IGRlcGF5IHwgICAgfCBhZGVjIHwgICAgfCBhc2luayB8CisgICAgfCAgICAgICBzcmMtPnNpbmsgICAgc3JjLT5zaW5rICAgc3JjLT5zaW5rICAgICB8CisgICAgJy0tLS0tLS0tJyAgICAnLS0tLS0tLScgICAgJy0tLS0tLScgICAgJy0tLS0tLS0nCisKKyAgLSB3aGVuIGdvaW5nIGZyb20gUkVBRFkgdG8gUEFVU0VEIHN0YXRlLCB1ZHBzcmMgd2lsbCByZXF1aXJlIGEgc3RyZWFtaW5nCisgICAgdGhyZWFkIGZvciBwdXNoaW5nIGRhdGEgaW50byB0aGUgZGVwYXlsb2FkZXIuIEl0IHdpbGwgcG9zdCBhIFNUUkVBTV9TVEFUVVMKKyAgICBtZXNzYWdlIGluZGljYXRpbmcgaXRzIHJlcXVpcmVtZW50IGZvciBhIHN0cmVhbWluZyB0aHJlYWQuCisKKyAgLSBUaGUgYXBwbGljYXRpb24gd2lsbCB1c3VhbGx5IHJlYWN0IHRvIHRoZSBTVFJFQU1fU1RBVFVTIG1lc3NhZ2VzIHdpdGggYSBzeW5jCisgICAgYnVzIGhhbmRsZXIuCisKKyAgLSBUaGUgYXBwbGljYXRpb24gY2FuIGNyZWF0ZSBhbmQgY29uZmlndXJlIGEgY3VzdG9tIEdzdFRhc2sgdG8gbWFuYWdlIHRoZQorICAgIHN0cmVhbWluZyB0aHJlYWQgb3IgaXQgY2FuIGlnbm9yZSB0aGUgbWVzc2FnZSB3aGljaCB3aWxsIG1ha2UgdGhlIGVsZW1lbnQKKyAgICB1c2UgaXRzIGRlZmF1bHQgR3N0VGFzay4KKworICAtIFRoZSBhcHBsaWNhdGlvbiBjYW4gcmVhY3QgdG8gdGhlIEVOVEVSL0xFQVZFIHN0cmVhbSBzdGF0dXMgbWVzc2FnZSB0bworICAgIGNvbmZpZ3VyZSB0aGUgdGhyZWFkIHJpZ2h0IGJlZm9yZSBpdCBpcyBzdGFydGVkL3N0b3BwZWQuIFRoaXMgY2FuIGJlIHVzZWQgdG8KKyAgICBjb25maWd1cmUgdGhlIHRocmVhZCBwcmlvcml0eS4KKworICAtIEJlZm9yZSB0aGUgR3N0VGFzayBpcyBjaGFuZ2VkIHN0YXRlIChzdGFydC9wYXVzZS9zdG9wKSBhIFNUUkVBTV9TVEFUVVMKKyAgICBtZXNzYWdlIGlzIHBvc3RlZCB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiB0byBrZWVwIHRyYWNrIG9mCisgICAgdGhlIHJ1bm5pbmcgc3RyZWFtaW5nIHRocmVhZHMuCisKKworTWVzc2FnZXMKK35+fn5+fn5+CisKKyBUaGUgZXhpc3RpbmcgU1RSRUFNX1NUQVRVUyBtZXNzYWdlIHdpbGwgYmUgZnVydGhlciBkZWZpbmVkIGFuZCBpbXBsZW1lbnRlZCBpbgorIChzZWxlY3RlZCkgZWxlbWVudHMuIFRoZSBmb2xsb3dpbmcgZmllbGRzIHdpbGwgYmUgY29udGFpbmVkIGluIHRoZSBtZXNzYWdlOgorCisgIC0gInR5cGUiLCBHU1RfVFlQRV9TVFJFQU1fU1RBVFVTX1RZUEUKKworICAgICAgLSBhIHNldCBvZiB0eXBlcyB0byBjb250cm9sIHRoZSBsaWZlY3ljbGUgb2YgdGhlIHRocmVhZDoKKyAgICAgICBHU1RfU1RSRUFNX1NUQVRVU19UWVBFX0NSRUFURTogYSBuZXcgc3RyZWFtaW5nIHRocmVhZCBpcyBnb2luZyB0byBiZQorICAgICAgICAgIGNyZWF0ZWQuIFRoZSBhcHBsaWNhdGlvbiBoYXMgdGhlIGNoYW5jZSB0byBjb25maWd1cmUgYSBjdXN0b20gdGhyZWFkLgorICAgICAgIEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfRU5URVI6IHRoZSBzdHJlYW1pbmcgdGhyZWFkIGlzIGFib3V0IHRvIGVudGVyIGl0cworICAgICAgICAgIGxvb3AgZnVuY3Rpb24gZm9yIHRoZSBmaXJzdCB0aW1lLgorICAgICAgIEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfTEVBVkU6IHRoZSBzdHJlYW1pbmcgdGhyZWFkIGlzIGFib3V0IHRvIGxlYXZlIGl0cworICAgICAgICAgIGxvb3AuCisgICAgICAgR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9ERVNUUk9ZOiBhIHN0cmVhbWluZyB0aHJlYWQgaXMgZGVzdHJveWVkCisKKyAgICAgIC0gQSBzZXQgb2YgdHlwZXMgdG8gY29udHJvbCB0aGUgc3RhdGUgb2YgdGhlIHRocmVhZHM6IAorICAgICAgIEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfU1RBUlQ6IGEgc3RyZWFtaW5nIHRocmVhZCBpcyBzdGFydGVkCisgICAgICAgR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9QQVVTRTogYSBzdHJlYW1pbmcgdGhyZWFkIGlzIHBhdXNlZAorICAgICAgIEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfU1RPUDogYSBzdHJlYW1pbmcgdGhyZWFkIGlzIHN0b3BwZWQKKworICAtICJvd25lciIsIEdTVF9UWVBFX0VMRU1FTlQKKyAgICAgIFRoZSBvd25lciBlbGVtZW50IG9mIHRoZSB0aHJlYWQuIFRoZSBtZXNzYWdlIHNvdXJjZSB3aWxsIGNvbnRhaW4gdGhlIHBhZAorICAgICAgKG9yIG9uZSBvZiB0aGUgcGFkcykgdGhhdCB3aWxsIHByb2R1Y2UgZGF0YSBieSB0aGlzIHRocmVhZC4gSWYgdGhpcyB0aHJlYWQKKyAgICAgIGRvZXMgbm90IHByb2R1Y2UgZGF0YSBvbiBhIHBhZCwgdGhlIG1lc3NhZ2Ugc291cmNlIHdpbGwgY29udGFpbiB0aGUgb3duZXIKKyAgICAgIGFzIHdlbGwuIFRoZSBpZGVhIGlzIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBiZSBhYmxlIHRvIHNlZSBmcm9tIHRoZQorICAgICAgZWxlbWVudC9wYWQgd2hhdCBmdW5jdGlvbiB0aGlzIHRocmVhZCBoYXMgaW4gdGhlIGNvbnRleHQgb2YgdGhlCisgICAgICBhcHBsaWNhdGlvbiBhbmQgY29uZmlndXJlIHRoZSB0aHJlYWQgYXBwcm9wcmlhdGx5LgorCisgIC0gIm9iamVjdCIsIEdfVFlQRSwgR3N0VGFzay9HVGhyZWFkCisgICAgICBBIEdzdFRhc2svR1RocmVhZCBjb250cm9sbGluZyB0aGlzIHN0cmVhbWluZyB0aHJlYWQuIFRoaXMgY2FuIGJlIE5VTEwgd2hlbgorICAgICAgdGhlIG9iamVjdCBjb250cm9sbGluZyB0aGUgc3RyZWFtaW5nIHRocmVhZCBpcyBub3QgeWV0IGNyZWF0ZWQuCisKKyAgLSAiZmxvdy1yZXR1cm4iLCBHc3RGbG93UmV0dXJuCisgICAgICBBIHN0YXR1cyBjb2RlIGZvciB3aHkgdGhlIHRocmVhZCBzdGF0ZSBjaGFuZ2VkLiB3aGVuIHRocmVhZHMgYXJlIGNyZWF0ZWQKKyAgICAgIGFuZCBzdGFydGVkLCB0aGlzIGlzIHVzdWFsbHkgR1NUX0ZMT1dfT0sgYnV0IHdoZW4gdGhleSBhcmUgc3RvcHBpbmcgaXQKKyAgICAgIGNvbnRhaW5zIHRoZSByZWFzb24gY29kZSB3aHkgaXQgc3RvcHBlZC4KKworICAtICJyZWFzb24iLCBHX1RZUEVfU1RSSU5HCisgICAgICBBIHN0cmluZyBkZXNjcmliaW5nIHRoZSByZWFzb24gd2h5IHRoZSB0aHJlYWQgc3RhcnRlZC9zdG9wcGVkL3BhdXNlZC4KKyAgICAgIENhbiBiZSBOVUxMIGlmIG5vIHJlYXNvbiBpcyBnaXZlbi4KKworCisKK0V2ZW50cworfn5+fn5+CisKKworCisKKwpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1zdHJlYW1zLnR4dCBiL2RvY3MvZGVzaWduL3BhcnQtc3RyZWFtcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE5OTIxZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZGVzaWduL3BhcnQtc3RyZWFtcy50eHQKQEAgLTAsMCArMSw3MCBAQAorU3RyZWFtcworLS0tLS0tLQorCisgIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBvYmplY3RzIHRoYXQgYXJlIHBhc3NlZCBmcm9tIGVsZW1lbnQgdG8KKyAgZWxlbWVudCBpbiB0aGUgc3RyZWFtaW5nIHRocmVhZC4KKworCitTdHJlYW0gb2JqZWN0cworfn5+fn5+fn5+fn5+fn4KKworVGhlIGZvbGxvd2luZyBvYmplY3RzIGFyZSB0byBiZSBleHBlY3RlZCBpbiB0aGUgc3RyZWFtaW5nIHRocmVhZDoKKworIC0gZXZlbnRzCisgICAgLSBTRUdNRU5UICAgICAgICAgICAoUykKKyAgICAtIEVPUwkJKEVPUykgICoKKyAgICAtIFRBRyAgICAgICAgICAgICAgIChUKQorIC0gYnVmZmVycyAgICAgICAgICAgICAgKEIpICAgICoKKworT2JqZWN0cyBtYXJrZWQgd2l0aCAqIG5lZWQgdG8gYmUgc3luY2hyb25pc2VkIHRvIHRoZSBjbG9jayBpbiBzaW5rcworYW5kIGxpdmUgc291cmNlcy4KKworCitUeXBpY2FsIHN0cmVhbQorfn5+fn5+fn5+fn5+fn4KKworIEEgdHlwaWNhbCBzdHJlYW0gc3RhcnRzIHdpdGggYSBzZWdtZW50IGV2ZW50IHRoYXQgbWFya3MgdGhlCisgYnVmZmVyIHRpbWVzdGFtcCByYW5nZS4gQWZ0ZXIgdGhhdCBidWZmZXJzIGFyZSBzZW50IG9uZSBhZnRlciB0aGUKKyBvdGhlci4gQWZ0ZXIgdGhlIGxhc3QgYnVmZmVyIGFuIEVPUyBtYXJrcyB0aGUgZW5kIG9mIHRoZSBzdHJlYW0uIE5vCisgbW9yZSBidWZmZXJzIGFyZSB0byBiZSBwcm9jZXNzZWQgYWZ0ZXIgdGhlIEVPUyBldmVudC4KKworICArLSsgKy0rKy0rICAgICArLSsgKy0tLSsKKyAgfFN8IHxCfHxCfCAuLi4gfEJ8IHxFT1N8CisgICstKyArLSsrLSsgICAgICstKyArLS0tKworCisgIDEpIFNFR01FTlQsIHJhdGUsIHN0YXJ0L3N0b3AsIHRpbWUKKyAgICAgLSBtYXJrcyB2YWxpZCBidWZmZXIgdGltZXN0YW1wIHJhbmdlIChzdGFydCwgc3RvcCkKKyAgICAgLSBtYXJrcyBzdHJlYW1fdGltZSBvZiBidWZmZXJzICh0aW1lKS4gVGhpcyBpcyB0aGUgc3RyZWFtIHRpbWUgb2YgYnVmZmVycworICAgICAgIHdpdGggYSB0aW1lc3RhbXAgb2YgTlMuc3RhcnQuCisgICAgIC0gbWFya3MgcGxheWJhY2sgcmF0ZSAocmF0ZSkuIFRoaXMgaXMgdGhlIHJlcXVpcmVkIHBsYXliYWNrIHJhdGUuCisgICAgIC0gbWFya3MgYXBwbGllZCByYXRlIChhcHBsaWVkX3JhdGUpLiBUaGlzIGlzIHRoZSBhbHJlYWR5IGFwcGxpZWQgcGxheWJhY2sKKyAgICAgICByYXRlLiAoU2VlIGFsc28gcGFydC10cmlja21vZGVzLnR4dCkKKyAgICAgLSBtYXJrcyBydW5uaW5nX3RpbWUgb2YgYnVmZmVycy4gVGhpcyBpcyB0aGUgdGltZSB1c2VkIHRvIHN5bmNocm9uaXplCisgICAgICAgYWdhaW5zdCB0aGUgY2xvY2suCisKKyAgMikgTiBidWZmZXJzCisgICAgIC0gZGlzcGxheWFibGUgYnVmZmVycyBhcmUgYmV0d2VlbiBzdGFydC9zdG9wIG9mIHRoZSBTRUdNRU5ULiBCdWZmZXJzCisgICAgICAgb3V0c2lkZSB0aGUgc2VnbWVudCByYW5nZSBzaG91bGQgYmUgZHJvcHBlZCBvciBjbGlwcGVkLgorCisgICAgIC0gcnVubmluZ190aW1lOiAKKyAgICAgCisgICAgICAgICBpZiAoTlMucmF0ZSA+IDAuMCkKKyAgICAgICAgICAgcnVubmluZ190aW1lID0gKEIudGltZXN0YW1wIC0gTlMuc3RhcnQpIC8gTlMuYWJzX3JhdGUgKyBOUy5hY2N1bQorICAgICAgICAgZWxzZQorICAgICAgICAgICBydW5uaW5nX3RpbWUgPSAoTlMuc3RvcCAtIEIudGltZXN0YW1wKSAvIE5TLmFic19yYXRlICsgTlMuYWNjdW0KKworICAgICAgICAqIGEgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIHZhbHVlIHRoYXQgY2FuIGJlIHVzZWQgdG8gc3luY2hyb25pemUgCisJICBhZ2FpbnN0IHRoZSBjbG9jayAoU2VlIGFsc28gcGFydC1zeW5jaHJvbmlzYXRpb24udHh0KS4KKworICAgICAtIHN0cmVhbV90aW1lOgorCisgICAgICAgICBzdHJlYW1fdGltZSA9IChCLnRpbWVzdGFtcCAtIE5TLnN0YXJ0KSAqIE5TLmFic19hcHBsaWVkX3JhdGUgKyBOUy50aW1lCisKKyAgICAgICAgKiBjdXJyZW50IHBvc2l0aW9uIGluIHN0cmVhbSBiZXR3ZWVuIDAgYW5kIGR1cmF0aW9uLgorCisgIDMpIEVPUworICAgICAtIG1hcmtzIHRoZSBlbmQgb2YgZGF0YSwgbm90aGluZyBpcyB0byBiZSBleHBlY3RlZCBhZnRlciBFT1MsIGVsZW1lbnRzCisgICAgICAgc2hvdWxkIHJlZnVzZSBtb3JlIGRhdGEgYW5kIHJldHVybiBHU1RfRkxPV19VTkVYUEVDVEVELiBBIEZMVVNIX1NUT1AKKyAgICAgICBldmVudCBjbGVhcnMgdGhlIEVPUyBzdGF0ZSBvZiBhbiBlbGVtZW50LgorCisKZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtc3luY2hyb25pc2F0aW9uLnR4dCBiL2RvY3MvZGVzaWduL3BhcnQtc3luY2hyb25pc2F0aW9uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGFjMGYwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9kZXNpZ24vcGFydC1zeW5jaHJvbmlzYXRpb24udHh0CkBAIC0wLDAgKzEsMjEwIEBACitTeW5jaHJvbmlzYXRpb24KKy0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRvY3VtZW50IG91dGxpbmVzIHRoZSB0ZWNobmlxdWVzIHVzZWQgZm9yIGRvaW5nIHN5bmNocm9uaXNlZCBwbGF5YmFjayBvZgorbXVsdGlwbGUgc3RyZWFtcy4KKworU3luY2hyb25pc2F0aW9uIGluIGEgR3N0UGlwZWxpbmUgaXMgYWNoaWV2ZWQgdXNpbmcgdGhlIGZvbGxvd2luZyAzIGNvbXBvbmVudHM6CisKKyAtIGEgR3N0Q2xvY2ssIHdoaWNoIGlzIGdsb2JhbCBmb3IgYWxsIGVsZW1lbnRzIGluIGEgR3N0UGlwZWxpbmUuCisgLSBUaW1lc3RhbXBzIG9uIGEgR3N0QnVmZmVyLgorIC0gdGhlIFNFR01FTlQgZXZlbnQgcHJlY2VkaW5nIHRoZSBidWZmZXJzLgorCisKK0EgR3N0Q2xvY2sKK35+fn5+fn5+fn4KKworVGhpcyBvYmplY3QgcHJvdmlkZXMgYSBjb3VudGVyIHRoYXQgcmVwcmVzZW50cyB0aGUgY3VycmVudCB0aW1lIGluIG5hbm9zZWNvbmRzLgorVGhpcyB2YWx1ZSBpcyBjYWxsZWQgdGhlIGFic29sdXRlX3RpbWUuCisKK0RpZmZlcmVudCBzb3VyY2VzIGV4aXN0IGZvciB0aGlzIGNvdW50ZXI6CisKKyAtIHRoZSBzeXN0ZW0gdGltZSAod2l0aCBnX2dldF9jdXJyZW50X3RpbWUoKSBhbmQgd2l0aCBtaWNyb3NlY29uZCBhY2N1cmFjeSkKKyAtIGFuIGF1ZGlvIGRldmljZSAoYmFzZWQgb24gbnVtYmVyIG9mIHNhbXBsZXMgcGxheWVkKQorIC0gYSBuZXR3b3JrIHNvdXJjZSBiYXNlZCBvbiBwYWNrZXRzIHJlY2VpdmVkICsgdGltZXN0YW1wcyBpbiB0aG9zZSBwYWNrZXRzIChhCisgICB0eXBpY2FsIGV4YW1wbGUgaXMgYW4gUlRQIHNvdXJjZSkKKyAtIC4uLgorCitJbiBHU3RyZWFtZXIgYW55IGVsZW1lbnQgY2FuIHByb3ZpZGUgYSBHc3RDbG9jayBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCBpbiB0aGUKK3BpcGVsaW5lLiBUaGUgR3N0UGlwZWxpbmUgb2JqZWN0IHdpbGwgc2VsZWN0IGEgY2xvY2sgZnJvbSBhbGwgdGhlIHByb3ZpZGVycyBhbmQKK3dpbGwgZGlzdHJpYnV0ZSBpdCB0byBhbGwgb3RoZXIgZWxlbWVudHMgKHNlZSBwYXJ0LWdzdHBpcGVsaW5lLnR4dCkuCisKK0EgR3N0Q2xvY2sgYWx3YXlzIGNvdW50cyB0aW1lIHVwd2FyZHMgYW5kIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHN0YXJ0IGF0IDAuCisKKworUnVubmluZyB0aW1lCit+fn5+fn5+fn5+fn4KKworQWZ0ZXIgYSBwaXBlbGluZSBzZWxlY3RlZCBhIGNsb2NrIGl0IHdpbGwgbWFpbnRhaW4gdGhlIHJ1bm5pbmdfdGltZSBiYXNlZCBvbiB0aGUKK3NlbGVjdGVkIGNsb2NrLiBUaGlzIHJ1bm5pbmdfdGltZSByZXByZXNlbnRzIHRoZSB0b3RhbCB0aW1lIHNwZW50IGluIHRoZSBQTEFZSU5HCitzdGF0ZSBhbmQgaXMgY2FsY3VsYXRlZCBhcyBmb2xsb3dzOgorCisgLSBJZiB0aGUgcGlwZWxpbmUgaXMgTlVMTC9SRUFEWSwgdGhlIHJ1bm5pbmdfdGltZSBpcyB1bmRlZmluZWQuCisgLSBJbiBQQVVTRUQsIHRoZSBydW5uaW5nX3RpbWUgcmVtYWlucyBhdCB0aGUgdGltZSB3aGVuIGl0IHdhcyBsYXN0CisgICBQQVVTRUQuIFdoZW4gdGhlIHN0cmVhbSBpcyBQQVVTRUQgZm9yIHRoZSBmaXJzdCB0aW1lLCB0aGUgcnVubmluZ190aW1lCisgICBpcyAwLgorIC0gSW4gUExBWUlORywgdGhlIHJ1bm5pbmdfdGltZSBpcyB0aGUgZGVsdGEgYmV0d2VlbiB0aGUgYWJzb2x1dGVfdGltZQorICAgYW5kIHRoZSBiYXNlIHRpbWUuIFRoZSBiYXNlIHRpbWUgaXMgZGVmaW5lZCBhcyB0aGUgYWJzb2x1dGVfdGltZSBtaW51cworICAgdGhlIHJ1bm5pbmdfdGltZSBhdCB0aGUgdGltZSB3aGVuIHRoZSBwaXBlbGluZSBpcyBzZXQgdG8gUExBWUlORy4KKyAtIGFmdGVyIGEgZmx1c2hpbmcgc2VlaywgdGhlIHJ1bm5pbmdfdGltZSBpcyBzZXQgdG8gMCAoc2VlIHBhcnQtc2Vla2luZy50eHQpLgorICAgVGhpcyBpcyBhY2NvbXBsaXNoZWQgYnkgcmVkaXN0cmlidXRpbmcgYSBuZXcgYmFzZV90aW1lIHRvIHRoZSBlbGVtZW50cyB0aGF0CisgICBnb3QgZmx1c2hlZC4KKworVGhpcyBhbGdvcml0aG0gY2FwdHVyZXMgdGhlIHJ1bm5pbmdfdGltZSB3aGVuIHRoZSBwaXBlbGluZSBpcyBzZXQgZnJvbSBQTEFZSU5HCit0byBQQVVTRUQgYW5kIHJlc3RvcmVzIHRoaXMgdGltZSBiYXNlZCBvbiB0aGUgY3VycmVudCBhYnNvbHV0ZV90aW1lIHdoZW4gZ29pbmcKK2JhY2sgdG8gUExBWUlORy4gVGhpcyBhbGxvd3MgZm9yIGJvdGggY2xvY2tzIHRoYXQgcHJvZ3Jlc3Mgd2hlbiBpbiB0aGUgUEFVU0VECitzdGF0ZSAoc3lzdGVtY2xvY2spIGFuZCBjbG9ja3MgdGhhdCBkb24ndCAoYXVkaW9jbG9jaykuCisKK1RoZSBjbG9jayBhbmQgcGlwZWxpbmUgbm93IHByb3ZpZGUgYSBydW5uaW5nX3RpbWUgdG8gYWxsIGVsZW1lbnRzIHRoYXQgd2FudCB0bworcGVyZm9ybSBzeW5jaHJvbmlzYXRpb24uIEluZGVlZCwgdGhlIHJ1bm5pbmcgdGltZSBjYW4gYmUgb2JzZXJ2ZWQgaW4gZWFjaAorZWxlbWVudCAoZHVyaW5nIHRoZSBQTEFZSU5HIHN0YXRlKSBhczoKKyAgCisgIEMucnVubmluZ190aW1lID0gYWJzb2x1dGVfdGltZSAtIGJhc2VfdGltZQorCitXZSBub3RlIEMucnVubmluZ190aW1lIGFzIHRoZSBydW5uaW5nX3RpbWUgb2J0YWluZWQgYnkgbG9va2luZyBhdCB0aGUgY2xvY2suCitUaGlzIHZhbHVlIGlzIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBhdCB0aGUgcmF0ZSBvZiB0aGUgY2xvY2suCisKKworVGltZXN0YW1wcworfn5+fn5+fn5+fgorIAorVGhlIEdzdEJ1ZmZlciB0aW1lc3RhbXBzIGFuZCB0aGUgcHJlY2VlZGluZyBTRUdNRU5UIGV2ZW50IChTZWUKK3BhcnQtc3RyZWFtcy50eHQpIGRlZmluZSBhIHRyYW5zZm9ybWF0aW9uIG9mIHRoZSBidWZmZXIgdGltZXN0YW1wcyB0bworcnVubmluZ190aW1lIGFzIGZvbGxvd3M6CisKK1RoZSBmb2xsb3dpbmcgbm90YXRpb24gaXMgdXNlZDoKKworIEI6IEdzdEJ1ZmZlciAKKyAgLSBCLnRpbWVzdGFtcCA9IGJ1ZmZlciB0aW1lc3RhbXAgKEdTVF9CVUZGRVJfVElNRVNUQU1QKQorCisgTlM6ICBTRUdNRU5UIGV2ZW50IHByZWNlZWRpbmcgdGhlIGJ1ZmZlcnMuCisgIC0gTlMuc3RhcnQ6IHN0YXJ0IGZpZWxkIGluIHRoZSBTRUdNRU5UIGV2ZW50CisgIC0gTlMuc3RvcDogc3RvcCBmaWVsZCBpbiB0aGUgU0VHTUVOVCBldmVudAorICAtIE5TLnJhdGU6IHJhdGUgZmllbGQgb2YgU0VHTUVOVCBldmVudAorICAtIE5TLmFic19yYXRlOiBhYnNvbHV0ZSB2YWx1ZSBvZiByYXRlIGZpZWxkIG9mIFNFR01FTlQgZXZlbnQKKyAgLSBOUy50aW1lOiB0aW1lIGZpZWxkIGluIHRoZSBTRUdNRU5UIGV2ZW50CisgIC0gTlMuYWNjdW06IHRvdGFsIGFjY3VtdWxhdGVkIHRpbWUgb2YgYWxsIHByZXZpb3VzIFNFR01FTlQgZXZlbnRzLiBUaGlzCisgICAgICAgICAgICAgIGZpZWxkIGlzIGtlcHQgaW4gdGhlIEdzdFNlZ21lbnQgc3RydWN0dXJlLgorCitWYWxpZCBidWZmZXJzIGZvciBzeW5jaHJvbmlzYXRpb24gYXJlIHRob3NlIHdpdGggQi50aW1lc3RhbXAgYmV0d2VlbiBOUy5zdGFydAorYW5kIE5TLnN0b3AuIEFsbCBvdGhlciBidWZmZXJzIG91dHNpZGUgdGhpcyByYW5nZSBzaG91bGQgYmUgZHJvcHBlZCBvciBjbGlwcGVkCit0byB0aGVzZSBib3VuZGFyaWVzIChzZWUgYWxzbyBwYXJ0LXNlZ21lbnRzLnR4dCkuCisKK1RoZSBmb2xsb3dpbmcgdHJhbnNmb3JtYXRpb24gdG8gcnVubmluZ190aW1lIGV4aXN0OgorCisgICAgaWYgKE5TLnJhdGUgPiAwLjApCisgICAgICBCLnJ1bm5pbmdfdGltZSA9IChCLnRpbWVzdGFtcCAtIE5TLnN0YXJ0KSAvIE5TLmFic19yYXRlICsgTlMuYWNjdW0KKyAgICBlbHNlCisgICAgICBCLnJ1bm5pbmdfdGltZSA9IChOUy5zdG9wIC0gQi50aW1lc3RhbXApIC8gTlMuYWJzX3JhdGUgKyBOUy5hY2N1bQorCitXZSB3cml0ZSBCLnJ1bm5pbmdfdGltZSBhcyB0aGUgcnVubmluZ190aW1lIG9idGFpbmVkIGZyb20gdGhlIFNFR01FTlQgZXZlbnQKK2FuZCB0aGUgYnVmZmVycyBvZiB0aGF0IHNlZ21lbnQuCisKK1RoZSBmaXJzdCBkaXNwbGF5YWJsZSBidWZmZXIgd2lsbCB5aWVsZCBhIHZhbHVlIG9mIDAgKHNpbmNlIEIudGltZXN0YW1wID09CitOUy5zdGFydCBhbmQgTlMuYWNjdW0gPT0gMCkuCisKK0ZvciBOUy5yYXRlID4gMS4wLCB0aGUgdGltZXN0YW1wcyB3aWxsIGJlIHNjYWxlZCBkb3duIHRvIGluY3JlYXNlIHRoZSBwbGF5YmFjaworcmF0ZS4gTGlrZXdpc2UsIGEgcmF0ZSBiZXR3ZWVuIDAuMCBhbmQgMS4wIHdpbGwgc2xvdyBkb3duIHBsYXliYWNrLgorCitGb3IgbmVnYXRpdmUgcmF0ZXMsIHRpbWVzdGFtcHMgYXJlIHJlY2VpdmVkIHN0b3AgTlMuc3RvcCB0byBOUy5zdGFydCBzbyB0aGF0IHRoZQorZmlyc3QgYnVmZmVyIHJlY2VpdmVkIHdpbGwgYmUgdHJhbnNmb3JtZWQgaW50byBCLnJ1bm5pbmdfdGltZSBvZiAwIChCLnRpbWVzdGFtcCA9PQorTlMuc3RvcCBhbmQgTlMuYWNjdW0gPT0gMCkuCisKKworU3luY2hyb25pc2F0aW9uCit+fn5+fn5+fn5+fn5+fn4KKworQXMgd2UgaGF2ZSBzZWVuLCB3ZSBjYW4gZ2V0IGEgcnVubmluZ190aW1lOgorCisgLSB1c2luZyB0aGUgY2xvY2sgYW5kIHRoZSBlbGVtZW50J3MgYmFzZV90aW1lIHdpdGg6CisKKyAgICBDLnJ1bm5pbmdfdGltZSA9IGFic29sdXRlX3RpbWUgLSBiYXNlX3RpbWUKKworIC0gdXNpbmcgdGhlIGJ1ZmZlciB0aW1lc3RhbXAgYW5kIHRoZSBwcmVjZWVkaW5nIFNFR01FTlQgZXZlbnQgYXMgKGFzc3VtaW5nCisgICBwb3NpdGl2ZSBwbGF5YmFjayByYXRlKToKKworICAgIEIucnVubmluZ190aW1lID0gKEIudGltZXN0YW1wIC0gTlMuc3RhcnQpIC8gTlMuYWJzX3JhdGUgKyBOUy5hY2N1bQorCitXZSBwcmVmaXggQy4gYW5kIEIuIGJlZm9yZSB0aGUgdHdvIHJ1bm5pbmcgdGltZXMgdG8gbm90ZSBob3cgdGhleSB3ZXJlCitjYWxjdWxhdGVkLgorCitUaGUgdGFzayBvZiBzeW5jaHJvbml6ZWQgcGxheWJhY2sgaXMgdG8gbWFrZSBzdXJlIHRoYXQgd2UgcGxheSBhIGJ1ZmZlciB3aXRoCitCLnJ1bm5pbmdfdGltZSBhdCB0aGUgbW9tZW50IHdoZW4gdGhlIGNsb2NrIHJlYWNoZXMgdGhlIHNhbWUgQy5ydW5uaW5nX3RpbWUuCisKK1RodXMgdGhlIGZvbGxvd2luZyBtdXN0IGhvbGQ6CisKKyAgIEIucnVubmluZ190aW1lID0gQy5ydW5uaW5nX3RpbWUKKworZXhwYW5pbmc6CisKKyAgIEIucnVubmluZ190aW1lID0gYWJzb2x1dGVfdGltZSAtIGJhc2VfdGltZQorCitvcjoKKworICAgYWJzb2x1dGVfdGltZSA9IEIucnVubmluZ190aW1lICsgYmFzZV90aW1lCisKK1RoZSBhYnNvbHV0ZV90aW1lIHdoZW4gYSBidWZmZXIgd2l0aCBCLnJ1bm5pbmdfdGltZSBzaG91bGQgYmUgcGxheWVkIGlzIG5vdGVkCit3aXRoIEIuc3luY190aW1lLiBUaHVzOgorCisgIEIuc3luY190aW1lID0gQi5ydW5uaW5nX3RpbWUgKyBiYXNlX3RpbWUKKworT25lIHRoZW4gd2FpdHMgZm9yIHRoZSBjbG9jayB0byByZWFjaCBCLnN5bmNfdGltZSBiZWZvcmUgcmVuZGVyaW5nIHRoZSBidWZmZXIgaW4KK3RoZSBzaW5rIChTZWUgYWxzbyBwYXJ0LWNsb2Nrcy50eHQpLgorCitGb3IgbXVsdGlwbGUgc3RyZWFtcyB0aGlzIG1lYW5zIHRoYXQgYnVmZmVycyB3aXRoIHRoZSBzYW1lIHJ1bm5pbmdfdGltZSBhcmUgdG8KK2JlIGRpc3BsYXllZCBhdCB0aGUgc2FtZSB0aW1lLiAKKworQSBkZW11eGVyIG11c3QgbWFrZSBzdXJlIHRoYXQgdGhlIFNFR01FTlQgaXQgZW1pdHMgb24gaXRzIG91dHB1dCBwYWRzIHlpZWxkCit0aGUgc2FtZSBydW5uaW5nX3RpbWUgZm9yIGJ1ZmZlcnMgdGhhdCBzaG91bGQgYmUgcGxheWVkIHN5bmNocm9uaXplZC4gVGhpcwordXN1YWxseSBtZWFucyBzZW5kaW5nIHRoZSBzYW1lIFNFR01FTlQgb24gYWxsIHBhZHMgYW5kIG1ha2luZyBzdXJlIHRoYXQgdGhlCitzeW5jaHJvbml6ZWQgYnVmZmVycyBoYXZlIHRoZSBzYW1lIHRpbWVzdGFtcHMuCisKKworU3RyZWFtIHRpbWUKK35+fn5+fn5+fn5+CisKK1RoZSBzdHJlYW0gdGltZSBpcyBhbHNvIGtub3duIGFzIHRoZSBwb3NpdGlvbiBpbiB0aGUgc3RyZWFtIGFuZCBpcyBhIHZhbHVlCitiZXR3ZWVuIDAgYW5kIHRoZSB0b3RhbCBkdXJhdGlvbiBvZiB0aGUgbWVkaWEgZmlsZS4KKworSXQgaXMgdGhlIHN0cmVhbSB0aW1lIHRoYXQgaXMgdXNlZCBmb3I6CisKKyAgLSByZXBvcnQgdGhlIFBPU0lUSU9OIHF1ZXJ5IGluIHRoZSBwaXBlbGluZQorICAtIHRoZSBwb3NpdGlvbiB1c2VkIGluIHNlZWsgZXZlbnRzL3F1ZXJpZXMKKyAgLSB0aGUgcG9zaXRpb24gdXNlZCB0byBzeW5jaHJvbml6ZSBjb250cm9sbGVyIHZhbHVlcworCitTdHJlYW0gdGltZSBpcyBjYWxjdWxhdGVkIHVzaW5nIHRoZSBidWZmZXIgdGltZXMgYW5kIHRoZSBwcmVjZWVkaW5nIFNFR01FTlQKK2V2ZW50IGFzIGZvbGxvd3M6CisKKyAgICBzdHJlYW1fdGltZSA9IChCLnRpbWVzdGFtcCAtIE5TLnN0YXJ0KSAqIE5TLmFic19hcHBsaWVkX3JhdGUgKyBOUy50aW1lCisgCitGb3IgbmVnYXRpdmUgcmF0ZXMsIEIudGltZXN0YW1wIHdpbGwgZ28gYmFja3dhcmRzIGZyb20gTlMuc3RvcCB0byBOUy5zdGFydCwKK21ha2luZyB0aGUgc3RyZWFtIHRpbWUgZ28gYmFja3dhcmRzLgorCitJbiB0aGUgUExBWUlORyBzdGF0ZSwgaXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgdGhlIHBpcGVsaW5lIGNsb2NrIHRvIGRlcml2ZQordGhlIGN1cnJlbnQgc3RyZWFtX3RpbWUuCisKK0dpdmUgdGhlIHR3byBmb3JtdWxhcyBhYm92ZSB0byBtYXRjaCB0aGUgY2xvY2sgdGltZXMgd2l0aCBidWZmZXIgdGltZXN0YW1wcworYWxsb3dzIHVzIHRvIHJld3JpdGUgdGhlIGFib3ZlIGZvcm11bGEgZm9yIHN0cmVhbV90aW1lIChhbmQgZm9yIHBvc2l0aXZlIHJhdGVzKS4KKworICAgIEMucnVubmluZ190aW1lID0gYWJzb2x1dGVfdGltZSAtIGJhc2VfdGltZQorICAgIEIucnVubmluZ190aW1lID0gKEIudGltZXN0YW1wIC0gTlMuc3RhcnQpIC8gTlMuYWJzX3JhdGUgKyBOUy5hY2N1bQorCisgID0+CisgICAgKEIudGltZXN0YW1wIC0gTlMuc3RhcnQpIC8gTlMuYWJzX3JhdGUgKyBOUy5hY2N1bSA9IGFic29sdXRlX3RpbWUgLSBiYXNlX3RpbWU7CisKKyAgPT4KKyAgICAoQi50aW1lc3RhbXAgLSBOUy5zdGFydCkgLyBOUy5hYnNfcmF0ZSA9IGFic29sdXRlX3RpbWUgLSBiYXNlX3RpbWUgLSBOUy5hY2N1bTsKKworICA9PgorICAgIChCLnRpbWVzdGFtcCAtIE5TLnN0YXJ0KSA9IChhYnNvbHV0ZV90aW1lIC0gYmFzZV90aW1lIC0gTlMuYWNjdW0pICogTlMuYWJzX3JhdGUKKworICBmaWxsaW5nIChCLnRpbWVzdGFtcCAtIE5TLnN0YXJ0KSBpbiB0aGUgYWJvdmUgZm9ybXVsZSBmb3Igc3RyZWFtIHRpbWUKKworICA9PgorICAgIHN0cmVhbV90aW1lID0gKGFic29sdXRlX3RpbWUgLSBiYXNlX3RpbWUgLSBOUy5hY2N1bSkgKiBOUy5hYnNfcmF0ZSAqIE5TLmFic19hcHBsaWVkX3JhdGUgKyBOUy50aW1lCisKK1RoaXMgbGFzdCBmb3JtdWxhIGlzIHR5cGljYWxseSB1c2VkIGluIHNpbmtzIHRvIHJlcG9ydCB0aGUgY3VycmVudCBwb3NpdGlvbiBpbgorYW4gYWNjdXJhdGUgYW5kIGVmZmljaWVudCB3YXkuCisKK05vdGUgdGhhdCB0aGUgc3RyZWFtIHRpbWUgaXMgbmV2ZXIgdXNlZCBmb3Igc3luY2hyb25pc2F0aW9uIGFnYWluc3QgdGhlIGNsb2NrLgorCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LXRyaWNrbW9kZXMudHh0IGIvZG9jcy9kZXNpZ24vcGFydC10cmlja21vZGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWJjNDBlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9kZXNpZ24vcGFydC10cmlja21vZGVzLnR4dApAQCAtMCwwICsxLDIxNiBAQAorVHJpY2ttb2RlcworLS0tLS0tLS0tLQorCitHU3RyZWFtZXIgcHJvdmlkZXMgQVBJIGZvciBwZXJmb3JtaW5nIHZhcmlvdXMgdHJpY2ttb2RlIHBsYXliYWNrLiBUaGlzIGluY2x1ZGVzOgorCisgLSBzZXJ2ZXIgc2lkZSB0cmlja21vZGVzCisgLSBjbGllbnQgc2lkZSBmYXN0L3Nsb3cgZm9yd2FyZCBwbGF5YmFjaworIC0gY2xpZW50IHNpZGUgZmFzdC9zbG93IGJhY2t3YXJkcyBwbGF5YmFjaworCitTZXJ2ZXIgc2lkZSB0cmlja21vZGVzIG1lYW4gdGhhdCBhIHNvdXJjZSAobmV0d29yayBzb3VyY2UpIGNhbiBwcm92aWRlIGEKK3N0cmVhbSB3aXRoIGRpZmZlcmVudCBwbGF5YmFjayBzcGVlZCBhbmQgZGlyZWN0aW9uLiBUaGUgY2xpZW50IGRvZXMgbm90IGhhdmUgdG8KK3BlcmZvcm0gYW55IHNwZWNpYWwgYWxnb3JpdGhtcyB0byBkZWNvZGUgdGhpcyBzdHJlYW0uCisKK0NsaWVudCBzaWRlIHRyaWNrbW9kZXMgbWVhbiB0aGF0IHRoZSBkZWNvZGluZyBjbGllbnQgKEdTdHJlYW1lcikgcGVyZm9ybXMgdGhlCituZWVkZWQgYWxnb3JpdGhtcyB0byBjaGFuZ2UgdGhlIGRpcmVjdGlvbiBhbmQgc3BlZWQgb2YgdGhlIG1lZGlhIGZpbGUuCisKK1NlZWtpbmcgY2FuIGJvdGggYmUgZG9uZSBpbiBhIHBsYXliYWNrIHBpcGVsaW5lIGFuZCBhIHRyYW5zY29kaW5nIHBpcGVsaW5lLgorCisKK0dlbmVyYWwgc2Vla2luZyBvdmVydmlldworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitDb25zaWRlciBhIHR5cGljYWwgcGxheWJhY2sgcGlwZWxpbmU6CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLi0tLS0tLS0tLS4gIC4tLS0tLS0uCisgICAgICAgICAgICAgIC4tLS0tLS0tLiAgIHwgZGVjb2RlciB8LT58IHNpbmsgfCAgCisgIC4tLS0tLS0tLS4gIHwgICAgICAgfC0tPictLS0tLS0tLS0nICAnLS0tLS0tJworICB8IHNvdXJjZSB8LT58IGRlbXV4IHwKKyAgJy0tLS0tLS0tJyAgfCAgICAgICB8LS0+Li0tLS0tLS0tLS4gIC4tLS0tLS0uCisgICAgICAgICAgICAgICctLS0tLS0tJyAgIHwgZGVjb2RlciB8LT58IHNpbmsgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAnLS0tLS0tLS0tJyAgJy0tLS0tLScKKworVGhlIHBpcGVsaW5lIGlzIGluaXRpYWxseSBjb25maWd1cmVkIHRvIHBsYXkgYmFjayBhdCBzcGVlZCAxLjAgc3RhcnRpbmcgZnJvbSAKK3Bvc2l0aW9uIDAgYW5kIHN0b3BwaW5nIGF0IHRoZSB0b3RhbCBkdXJhdGlvbiBvZiB0aGUgZmlsZS4gCisKK1doZW4gcGVyZm9ybWluZyBhIHNlZWssIHRoZSBmb2xsb3dpbmcgc3RlcHMgaGF2ZSB0byBiZSB0YWtlbiBieSB0aGUgYXBwbGljYXRpb246CisKK0NyZWF0ZSBhIHNlZWsgZXZlbnQKK15eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIHNlZWsgZXZlbnQgY29udGFpbnM6CisKKy0gdmFyaW91cyBmbGFncyBkZXNjcmliaW5nOgorICAtIHdoZXJlIHRvIHNlZWsgdG8gKEtFWV9VTklUKQorICAtIGhvdyBhY2N1cmF0ZSB0aGUgc2VlayBzaG91bGQgYmUgKEFDQ1VSQVRFKQorICAtIGhvdyB0byBwZXJmb3JtIHRoZSBzZWVrIChGTFVTSCkgCisgIC0gd2hhdCB0byBkbyB3aGVuIHRoZSBzdG9wIHBvc2l0aW9uIGlzIHJlYWNoZWQgKFNFR01FTlQpLgorICAtIGV4dHJhIHBsYXliYWNrIG9wdGlvbnMgKFNLSVApCistIGEgZm9ybWF0IHRvIHNlZWsgaW4sIHRoaXMgY2FuIGJlIHRpbWUsIGJ5dGVzLCB1bml0cyAoZnJhbWVzLCBzYW1wbGVzKSwgLi4uCistIGEgcGxheWJhY2sgcmF0ZSwgMS4wIGlzIG5vcm1hbCBwbGF5YmFjayBzcGVlZCwgcG9zaXRpdmUgdmFsdWVzIGJpZ2dlciB0aGFuIDEuMAorICBtZWFuIGZhc3QgcGxheWJhY2suIG5lZ2F0aXZlIHZhbHVlcyBtZWFuIHJldmVyc2UgcGxheWJhY2suIEEgcGxheWJhY2sgc3BlZWQgb2YKKyAgMC4wIGlzIG5vdCBhbGxvd2VkIChidXQgaXMgZXF1aXZhbGVudCB0byBQQVVTSU5HIHRoZSBwaXBlbGluZSkuCistIGEgc3RhcnQgcG9zaXRpb24sIHRoaXMgdmFsdWUgaGFzIHRvIGJlIGJldHdlZW4gMCBhbmQgdGhlIHRvdGFsIGR1cmF0aW9uIG9mIHRoZSAKKyAgZmlsZS4gSXQgY2FuIGFsc28gYmUgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzbHkgY29uZmlndXJlZCBzdGFydCB2YWx1ZS4KKy0gYSBzdG9wIHBvc2l0aW9uLCB0aGlzIHZhbHVlIGhhcyB0byBiZSBiZXR3ZWVuIDAgYW5kIHRoZSB0b3RhbCBkdXJhdGlvbi4gSXQgY2FuCisgIGFsc28gYmUgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzbHkgY29uZmlndXJlZCBzdG9wIHZhbHVlLgorCitTZWUgYWxzbyBnc3RfZXZlbnRfbmV3X3NlZWsoKS4KKworCitTZW5kIHRoZSBzZWVrIGV2ZW50CiteXl5eXl5eXl5eXl5eXl5eXl5eCisKK1NlbmQgdGhlIG5ldyBzZWVrIGV2ZW50IHRvIHRoZSBwaXBlbGluZSB3aXRoIGdzdF9lbGVtZW50X3NlbmRfZXZlbnQoKS4KKworQnkgZGVmYXVsdCB0aGUgcGlwZWxpbmUgd2lsbCBzZW5kIHRoZSBldmVudCB0byBhbGwgc2luayBlbGVtZW50cy4KK0J5IGRlZmF1bHQgYW4gZWxlbWVudCB3aWxsIGZvcndhcmQgdGhlIGV2ZW50IHVwc3RyZWFtIG9uIGFsbCBzaW5rcGFkcy4KK0VsZW1lbnRzIGNhbiBtb2RpZnkgdGhlIGZvcm1hdCBvZiB0aGUgc2VlayBldmVudC4gVGhlIG1vc3QgY29tbW9uIGZvcm1hdCBpcworR1NUX0ZPUk1BVF9USU1FLgorCitPbmUgZWxlbWVudCB3aWxsIGFjdHVhbGx5IHBlcmZvcm0gdGhlIHNlZWssIHRoaXMgaXMgdXN1YWxseSB0aGUgZGVtdXhlciBvcgorc291cmNlIGVsZW1lbnQuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBwZXJmb3JtIHRoZSBkaWZmZXJlbnQgc2VlawordHlwZXMgc2VlIHBhcnQtc2Vla2luZy50eHQuCisKK0ZvciBjbGllbnQgc2lkZSB0cmlja21vZGUgYSBTRUdNRU5UIGV2ZW50IHdpbGwgYmUgc2VudCBkb3duc3RyZWFtIHdpdGgKK3RoZSBuZXcgcmF0ZSBhbmQgc3RhcnQvc3RvcCBwb3NpdGlvbnMuIEFsbCBlbGVtZW50cyBwcmVwYXJlIHRoZW1zZWx2ZXMgdG8KK2hhbmRsZSB0aGUgcmF0ZSAoc2VlIGJlbG93KS4gVGhlIGFwcGxpZWQgcmF0ZSBvZiB0aGUgU0VHTUVOVCBldmVudCB3aWxsCitiZSBzZXQgdG8gMS4wIHRvIGluZGljYXRlIHRoYXQgbm8gcmF0ZSBhZGp1c3RtZW50IGhhcyBiZWVuIGRvbmUuCisKK2ZvciBzZXJ2ZXIgc2lkZSB0cmljayBtb2RlIGEgU0VHTUVOVCBldmVudCBpcyBzZW50IGRvd25zdHJlYW0gd2l0aCBhCityYXRlIG9mIDEuMCBhbmQgdGhlIHN0YXJ0L3N0b3AgcG9zaXRpb25zLiBUaGUgZWxlbWVudHMgd2lsbCBjb25maWd1cmUgdGhlbXNlbHZlcworZm9yIG5vcm1hbCBwbGF5YmFjayBzcGVlZCBzaW5jZSB0aGUgc2VydmVyIHdpbGwgcGVyZm9ybSB0aGUgcmF0ZSBjb252ZXJzaW9ucy4KK1RoZSBhcHBsaWVkIHJhdGUgd2lsbCBiZSBzZXQgdG8gdGhlIHJhdGUgdGhhdCB3aWxsIGJlIGFwcGxpZWQgYnkgdGhlIHNlcnZlci4gVGhpcworaXMgZG9uZSB0byBpbnN1cmUgdGhhdCB0aGUgcG9zaXRpb24gcmVwb3J0aW5nIHBlcmZvcm1lZCBpbiB0aGUgc2luayBpcyBhd2FyZSAKK29mIHRoZSB0cmljayBtb2RlLgorCitXaGVuIHRoZSBzZWVrIHN1Y2NlZWRzLCB0aGUgX3NlbmRfZXZlbnQoKSBmdW5jdGlvbiB3aWxsIHJldHVybiBUUlVFLgorCisKK1NlcnZlciBzaWRlIHRyaWNrbW9kZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBzb3VyY2UgZWxlbWVudCBvcGVyYXRlcyBpbiBwdXNoIG1vZGUuIEl0IGNhbiByZW9wZW4gYSBzZXJ2ZXIgY29ubmVjdGlvbiByZXF1ZXN0aW5nCithIG5ldyBieXRlIG9yIHRpbWUgcG9zaXRpb24gYW5kIGEgbmV3IHBsYXliYWNrIHNwZWVkLiBUaGUgY2FwYWJpbGl0aWVzIGNhbiBiZSBxdWVyaWVkCitmcm9tIHRoZSBzZXJ2ZXIgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBvcGVuZWQuCisKK1dlIGFzc3VtZSB0aGUgc291cmNlIGVsZW1lbnQgaXMgZGVyaXZlZCBmcm9tIHRoZSBHc3RQdXNoU3JjIGJhc2UgY2xhc3MuIFRoZSBiYXNlIHNvdXJjZQorc2hvdWxkIGJlIGNvbmZpZ3VyZWQgd2l0aCBnc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdCAoc3JjLCBHU1RfRk9STUFUX1RJTUUpLiAKKworVGhlIGRvX3NlZWsgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIG9uIHRoZSBwdXNoIHNyYyBzdWJjbGFzcyB3aXRoIHRoZSBzZWVrIGluZm9ybWF0aW9uCitwYXNzZWQgaW4gdGhlIEdzdFNlZ21lbnQgYXJndW1lbnQuCisKK1RoZSByYXRlIHZhbHVlIGluIHRoZSBzZWdtZW50IHNob3VsZCBiZSB1c2VkIHRvIHJlb3BlbiB0aGUgY29ubmVjdGlvbiB0byB0aGUgc2VydmVyCityZXF1ZXN0aW5nIGRhdGEgYXQgdGhlIG5ldyBzcGVlZCBhbmQgcG9zc2libHkgYSBuZXcgcGxheWJhY2sgcG9zaXRpb24uCisKK1doZW4gdGhlIHNlcnZlciBjb25uZWN0aW9uIHdhcyBzdWNjZXNzZnVsbHkgcmVvcGVuZWQsIHNldCB0aGUgcmF0ZSBvZiB0aGUgc2VnbWVudAordG8gMS4wIHNvIHRoYXQgdGhlIGNsaWVudCBzaWRlIHRyaWNrbW9kZSBpcyBub3QgZW5hYmxlZC4gVGhlIGFwcGxpZWQgcmF0ZSBpbiB0aGUgCitzZWdtZW50IGlzIHNldCB0byB0aGUgcmF0ZSB0cmFuc2Zvcm1hdGlvbiBkb25lIGJ5IHRoZSBzZXJ2ZXIuCisKK0FsdGVybmF0aXZlbHkgYSBjb21iaW5hdGlvbiBvZiBjbGllbnQgc2lkZSBhbmQgc2VydmVyc2lkZSB0cmlja21vZGUgY2FuIGJlIHVzZWQsIGZvciAKK2V4YW1wbGUgaWYgdGhlIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IGNlcnRhaW4gcmF0ZXMsIHRoZSBjbGllbnQgY2FuIHBlcmZvcm0gcmF0ZSAKK2NvbnZlcnNpb24gZm9yIHRoZSByZW1haW5kZXIuCisKKworICAgICAgICAgICAgICAgc291cmNlICAgICAgICAgICAgICAgc2VydmVyCisgICBkb19zZWVrICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8CisgICAgIC0tLS0tLS0tLS0tPnwgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgIHwgIHJlb3BlbiBjb25uZWN0aW9uICB8CisgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLT58CisgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAuCisgICAgICAgICAgICAgICAgIHwgICBzdWNjZXNzICAgICAgICAgICAuCisgICAgICAgICAgICAgICAgIHw8LS0tLS0tLS0tLS0tLS0tLS0tLS18CisgICAgICAgbW9kaWZ5ICAgIHwgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHJhdGUgdG8gMS4wIHwgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8CisgICAgICByZXR1cm4gICAgIHwgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgVFJVRSAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8CisgCitBZnRlciBwZXJmb3JtaW5nIHRoZSBzZWVrLCB0aGUgc291cmNlIHdpbGwgaW5mb3JtIHRoZSBkb3duc3RyZWFtIGVsZW1lbnRzIG9mIHRoZQorbmV3IHNlZ21lbnQgdGhhdCBpcyB0byBiZSBwbGF5ZWQgYmFjay4gU2luY2UgdGhlIHNlZ21lbnQgd2lsbCBoYXZlIGEgcmF0ZSBvZiAxLjAsCitubyBjbGllbnQgc2lkZSB0cmljayBtb2RlcyBhcmUgZW5hYmxlZC4gVGhlIHNlZ21lbnQgd2lsbCBoYXZlIGFuIGFwcGxpZWQgcmF0ZQorZGlmZmVyZW50IGZyb20gMS4wIHRvIGluZGljYXRlIHRoYXQgdGhlIG1lZGlhIGNvbnRhaW5zIGRhdGEgd2l0aCBub24tc3RhbmRhcmQKK3BsYXliYWNrIHNwZWVkIG9yIGRpcmVjdGlvbi4KKworCitjbGllbnQgc2lkZSBmb3J3YXJkIHRyaWNrbW9kZXMgCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIHNlZWsgaGFwcGVucyBhcyBzdGF0ZWQgYWJvdmUuIGEgU0VHTUVOVCBldmVudCBpcyBzZW50IGRvd25zdHJlYW0gd2l0aCBhIHJhdGUKK2RpZmZlcmVudCBmcm9tIDEuMC4gUGx1Z2lucyByZWNlaXZpbmcgdGhlIFNFR01FTlQgY2FuIGRlY2lkZSB0byBwZXJmb3JtIHRoZSAKK3JhdGUgY29udmVyc2lvbiBvZiB0aGUgbWVkaWEgZGF0YSAocmV0aW1lc3RhbXAgdmlkZW8gZnJhbWVzLCByZXNhbXBsZSBhdWRpbywgLi4uKS4KKworSWYgYSBwbHVnaW4gZGVjaWRlcyB0byByZXNhbXBsZSBvciByZXRpbWVzdGFtcCwgaXQgc2hvdWxkIG1vZGlmeSB0aGUgU0VHTUVOVCB3aXRoCithIHJhdGUgb2YgMS4wIGFuZCB1cGRhdGUgdGhlIGFwcGxpZWQgcmF0ZSBzbyB0aGF0IGRvd25zdHJlYW0gZWxlbWVudHMgZG9uJ3QgcmVzYW1wbGUKK2FnYWluIGJ1dCBhcmUgYXdhcmUgdGhhdCB0aGUgbWVkaWEgaGFzIGJlZW4gbW9kaWZpZWQuCisKK1RoZSBHU3RyZWFtZXIgYmFzZSBhdWRpbyBhbmQgdmlkZW8gc2lua3Mgd2lsbCByZXNhbXBsZSBhdXRvbWF0aWNhbGx5IGlmIHRoZXkgcmVjZWl2ZQorYSBTRUdNRU5UIGV2ZW50IHdpdGggYSByYXRlIGRpZmZlcmVudCBmcm9tIDEuMC4gVGhlIHBvc2l0aW9uIHJlcG9ydGluZyBpbiB0aGUKK2Jhc2UgYXVkaW8gYW5kIHZpZGVvIHNpbmtzIHdpbGwgYWxzbyBkZXBlbmQgb24gdGhlIGFwcGxpZWQgcmF0ZSBvZiB0aGUgc2VnbWVudAoraW5mb3JtYXRpb24uCisKK1doZW4gdGhlIFNLSVAgZmxhZyBpcyBzZXQsIGZyYW1lcyBjYW4gYmUgZHJvcHBlZCBpbiB0aGUgZWxlbWVudHMuIElmIFMgaXMgdGhlCitzcGVlZHVwIGZhY3RvciwgYSBnb29kIGFsZ29yaXRobSBmb3IgaW1wbGVtZW50aW5nIGZyYW1lIHNraXBwaW5nIGlzIHRvIHNlbmQgYXVkaW8gaW4KK2NodW5rcyBvZiBObXMgKHVzdWFseSAzMDBtcyBpcyBnb29kKSBhbmQgdGhlbiBza2lwICgoUy0xKSAqIE5ucykgb2YgYXVkaW8gZGF0YS4KK0ZvciB0aGUgdmlkZW8gd2Ugc2VuZCBvbmx5IHRoZSBrZXlmcmFtZXMgaW4gdGhlIChTICogTm5zKSBpbnRlcnZhbC4gSW4gdGhpcworY2FzZSwgdGhlIGRlbXV4ZXIgd291bGQgc2NhbGUgdGhlIHRpbWVzdGFtcHMgYW5kIHdvdWxkIHNldCBhbiBhcHBsaWVkIHJhdGUgb2YgUy4KKworCitjbGllbnQgc2lkZSBiYWNrd2FyZHMgdHJpY2ttb2RlIAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitGb3IgYmFja3dhcmRzIHBsYXliYWNrIHRoZSBmb2xsb3dpbmcgcnVsZXMgYXBwbHk6CisKKyAtIHRoZSByYXRlIGluIHRoZSBTRUdNRU5UIGlzIGxlc3MgdGhhbiAwLjAuCisgLSB0aGUgU0VHTUVOVCBzdGFydCBwb3NpdGlvbiBpcyBsZXNzIHRoYW4gdGhlIHN0b3AgcG9zaXRpb24sIHBsYXliYWNrIHdpbGwKKyAgIGhvd2V2ZXIgaGFwcGVuIGZyb20gc3RvcCB0byBzdGFydCBpbiByZXZlcnNlLgorIC0gdGhlIHRpbWUgbWVtYmVyIGluIHRoZSBTRUdNRU5UIGlzIHNldCB0byB0aGUgc3RyZWFtIHRpbWUgb2YgdGhlIHN0YXJ0CisgICBwb3NpdGlvbi4KKworRm9yIHBsdWdpbnMgdGhlIGZvbGxvd2luZyBydWxlcyBhcHBseToKKyAgIAorIC0gQSBzb3VyY2UgcGx1Z2luIHNlbmRzIGRhdGEgaW4gY2h1bmtzIHN0YXJ0aW5nIGZyb20gdGhlIGxhc3QgY2h1bmsgb2YgdGhlCisgICBmaWxlLiBUaGUgYWN0dWFsIGJ5dGVzIGFyZSBub3QgcmV2ZXJzZWQuIEVhY2ggY2h1bmsgdGhhdCBpcyBub3QgZm9yd2FyZAorICAgY29udGludW91cyB3aXRoIHRoZSBwcmV2aW91cyBjaHVuayBpcyBtYXJrZWQgd2l0aCBhIERJU0NPTlQgZmxhZy4KKworIC0gQSBkZW11eGVyIGFjY3VtdWxhdGVzIHRoZSBjaHVua3MuIEFzIHNvb24gYXMgYSBrZXlmcmFtZSBpcyBmb3VuZCwgZXZlcnl0aGluZworICAgc3RhcnRpbmcgZnJvbSB0aGUga2V5ZnJhbWUgdXAgdG8gdGhlIGFjY3VtdWxhdGVkIGRhdGEgaXMgc2VudCBkb3duc3RyZWFtLgorICAgVGltZXN0YW1wcyBvbiB0aGUgYnVmZmVycyBhcmUgc2V0IHN0YXJ0aW5nIGZyb20gdGhlIHN0b3AgcG9zaXRpb24gdG8gc3RhcnQsCisgICBlZmZlY3RpdmVseSBnb2luZyBiYWNrd2FyZHMuIENodW5rcyBhcmUgbWFya2VkIHdpdGggRElTQ09OVCB3aGVuIHRoZXkgYXJlIG5vdAorICAgZm9yd2FyZCBjb250aW51b3VzIHdpdGggdGhlIHByZXZpb3VzIGJ1ZmZlci4KKworIC0gQSB2aWRlbyBkZWNvZGVyIGRlY29kZXMgYW5kIGFjY3VtdWxhdGVzIGFsbCBkZWNvZGVkIGZyYW1lcy4gSWYgYSBidWZmZXIgd2l0aAorICAgYSBESVNDT05ULCBTRUdNRU5UIG9yIEVPUyBpcyByZWNlaXZlZCwgYWxsIGFjY3VtdWxhdGVkIGZyYW1lcyBhcmUgc2VudAorICAgZG93bnN0ZWFtIGluIHJldmVyc2UuCisKKyAtIEFuIGF1ZGlvIGRlY29kZXIgZGVjb2RlcyBhbmQgYWNjdW11bGF0ZXMgYWxsIGRlY29kZWQgYXVkaW8uIElmIGEgYnVmZmVyIHdpdGgKKyAgIGEgRElTQ09OVCwgU0VHTUVOVCBvciBFT1MgaXMgcmVjZWl2ZWQsIGFsbCBhY2N1bXVsYXRlZCBhdWRpbyBpcyBzZW50CisgICBkb3duc3RyZWFtIGluIHJldmVyc2Ugb3JkZXIuIFNvbWUgYXVkaW8gY29kZWNzIG5lZWQgdGhlIHByZXZpb3VzCisgICBkYXRhIGJ1ZmZlciB0byBkZWNvZGUgdGhlIGN1cnJlbnQgb25lLCBpbiB0aGF0IGNhc2UsIHRoZSBwcmV2aW91cyBESVNDT05UCisgICBidWZmZXIgbmVlZHMgdG8gYmUgY29tYmluZWQgd2l0aCB0aGUgbGFzdCBub24tRElTQ09OVCBidWZmZXIgdG8gZ2VuZXJhdGUgdGhlCisgICBsYXN0IGJpdCBvZiBvdXRwdXQuCisKKyAtIEEgc2luayByZXZlcnNlcyAoZm9yIGF1ZGlvKSBhbmQgcmV0aW1lc3RhbXBzIChhdWRpbywgdmlkZW8pIHRoZSBidWZmZXJzCisgICBiZWZvcmUgcGxheWluZyB0aGVtIGJhY2suIFJldGltZXN0YW1waW5nIG9jY3VycyByZWxhdGl2ZSB0byB0aGUgc3RvcAorICAgcG9zaXRpb24sIG1ha2luZyB0aGUgdGltZXN0YW1wcyBpbmNyZWFzZSBhZ2FpbiBhbmQgc3VpdGFibGUgZm9yIHN5bmNocm9uaXppbmcKKyAgIGFnYWluc3QgdGhlIGNsb2NrLgorICAgQXVkaW8gc2lua3MgYWxzbyBoYXZlIHRvIHBlcmZvcm0gc2ltcGxlIHJlc2FtcGxpbmcgYmVmb3JlIHBsYXlpbmcgdGhlCisgICBzYW1wbGVzLgorCisgLSBmb3IgdHJhbnNjb2RpbmcsIGF1ZGlvIGFuZCB2aWRlbyByZXNhbXBsZXJzIGNhbiBiZSB1c2VkIHRvIHJldmVyc2UsIHJlc2FtcGxlCisgICBhbmQgcmV0aW1lc3RhbXAgdGhlIGJ1ZmZlcnMuIEFueSByYXRlIGFkanVzdG1lbnRzIHBlcmZvcm1lZCBvbiB0aGUgbWVkaWEgbXVzdAorICAgYmUgYWRkZWQgdG8gdGhlIGFwcGxpZWRfcmF0ZSBhbmQgc3VidHJhY3RlZCBmcm9tIHRoZSByYXRlIG1lbWJlcnMgaW4gdGhlCisgICBTRUdNRU5UIGV2ZW50LgorCisgSW4gU0tJUCBtb2RlLCB0aGUgc2FtZSBhbGdvcml0aG0gYXMgZm9yIGZvcndhcmQgU0tJUCBtb2RlIGNhbiBiZSB1c2VkLgorCisKK05vdGVzCit+fn5+fgorCisgLSBUaGUgY2xvY2svcnVubmluZ190aW1lIGtlZXBzIHJ1bm5pbmcgZm9yd2FyZC4KKyAtIGJhY2t3YXJkcyBwbGF5YmFjayBwb3RlbnRpYWxseSB1c2VzIGEgbG90IG9mIG1lbW9yeSBhcyBmcmFtZXMgYW5kIHVuZGVjb2RlZAorICAgZGF0YSBnZXRzIGJ1ZmZlcmVkLgorCisKZGlmZiAtLWdpdCBhL2RvY3MvZmFxL01ha2VmaWxlLmFtIGIvZG9jcy9mYXEvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM1ZWJiOQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZmFxL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMzggQEAKKyMjIyB0aGlzIGlzIHRoZSBwYXJ0IHlvdSBjYW4gY3VzdG9taXplIGlmIHlvdSBuZWVkIHRvCisKKyMgYmFzZSBuYW1lIG9mIGRvYworRE9DID0gZmFxCisjIGZvcm1hdHMgZGVmaW5lZCBmb3IgdXBsb2FkLWRvYy5tYWsKK0ZPUk1BVFM9aHRtbCBwcyBwZGYKKworIyBtYWluIHhtbCBmaWxlCitNQUlOID0gJChET0MpLnhtbAorIyBhbGwgeG1sIHNvdXJjZXMKK1hNTCA9ICQobm90ZGlyICQod2lsZGNhcmQgJChzcmNkaXIpLyoueG1sKSkKKyMgYmFzZSBzdHlsZSBzaGVldAorQ1NTID0gYmFzZS5jc3MKKworIyBpbWFnZSBzb3VyY2VzCitQTkdfU1JDID0gCitGSUdfU1JDID0gJChub3RkaXIgJCh3aWxkY2FyZCAkKHNyY2RpcikvKi5maWcpKQorCisjIGV4dHJhIHNvdXJjZXMgdG8gY29weSBpbiBidWlsZCBkaXJlY3RvcnkKK0VYVFJBX1NSQyA9IAorCisjIyMgdGhpcyBpcyB0aGUgZ2VuZXJpYyBiaXQgYW5kIHlvdSBzaG91bGRuJ3QgbmVlZCB0byBjaGFuZ2UgdGhpcworCisjIGdldCB0aGUgZ2VuZXJpYyBkb2NidWlsZGluZyBNYWtlZmlsZSBzdHVmZgoraW5jbHVkZSAkKHNyY2RpcikvLi4vbWFudWFscy5tYWsKKyMgZ2V0IHRoZSBnZW5lcmljIHVwbG9hZCB0YXJnZXQKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb21tb24vdXBsb2FkLWRvYy5tYWsKKworIyMjIHRoaXMgaXMgc3RhbmRhcmQgYXV0b21ha2Ugc3R1ZmYKKworIyBwYWNrYWdlIHVwIGFsbCB0aGUgc291cmNlCitFWFRSQV9ESVNUID0gJChTUkMpCisKKyMgaW5zdGFsbCBkb2N1bWVudGF0aW9uCitmYXFkaXIgPSAkKGRvY2RpcikvJChET0MpCitmYXFfREFUQSA9ICQoUERGX0RBVCkgJChQU19EQVQpCisKK2luY2x1ZGUgJChzcmNkaXIpLy4uL2h0bWxpbnN0YWxsLm1hawpkaWZmIC0tZ2l0IGEvZG9jcy9mYXEvTWFrZWZpbGUuaW4gYi9kb2NzL2ZhcS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmMzYWE5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9mYXEvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw4NjkgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMjIyB0aGlzIGlzIHRoZSBwYXJ0IHlvdSBjYW4gY3VzdG9taXplIGlmIHlvdSBuZWVkIHRvCisKKyMjIyBUaGVzZSBhcmUgYWxsIGdlbmVyaWM7IHdlIHNldCBhbGwgdGhlIHZhcmlhYmxlcyB3ZSBuZWVkCisKKyMgdGhpcyBzbmlwcGV0IGlzIHRvIGJlIGluY2x1ZGVkIGJ5IGJvdGggb3VyIGRvY2Jvb2sgbWFudWFscworIyBhbmQgZ3RrLWRvYyBBUEkgcmVmZXJlbmNlcworCisjIGl0IGFkZHMgYW4gdXBsb2FkIHRhcmdldCB0byBlYWNoIG9mIHRoZXNlIGRpcidzIE1ha2VmaWxlcworCisjIGVhY2ggTWFrZWZpbGUuYW0gc2hvdWxkIGRlZmluZSB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKKyMgLSBET0M6IHRoZSBiYXNlIG5hbWUgb2YgdGhlIGRvY3VtZW50YXRpb24KKyMgICAgICAgIChmYXEsIG1hbnVhbCwgcHdnLCBnc3RyZWFtZXIsIGdzdHJlYW1lci1saWJzKQorIyAtIEZPUk1BVFM6IHRoZSBmb3JtYXRzIGluIHdoaWNoIERPQyBpcyBvdXRwdXQKKyMgICAgICAgICAgICAoaHRtbCBwcyBwZGYpCisKKyMgaWYgeW91IHdhbnQgdG8gdXNlIGl0LCBtYWtlIHN1cmUgeW91ciAkSE9NRS8uc3NoL2NvbmZpZyBmaWxlIGNvbnRhaW5zIHRoZQorIyBjb3JyZWN0IFVzZXIgZW50cnkgZm9yIHRoZSBIb3N0IGVudHJ5IGZvciB0aGUgRE9DX1NFUlZFUgorCisjIHRoaXMgZmlsZSBhZGRzIHJ1bGVzIGZvciBpbnN0YWxsaW5nIGh0bWwgc3VidHJlZXMKKyMgSSByZWFsbHkgZG9uJ3QgbGlrZSB0aGlzIGhhY2ssIGJ1dCBhdXRvbWFrZSBkb2Vzbid0IHNlZW0gdG8gd2FudCB0bworIyBpbnN0YWxsIGRpcmVjdG9yeSB0cmVlcyA6KAorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS8uLi9odG1saW5zdGFsbC5tYWsgJChzcmNkaXIpLy4uL21hbnVhbHMubWFrIFwKKwkkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluIFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi91cGxvYWQtZG9jLm1haworc3ViZGlyID0gZG9jcy9mYXEKK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1weXRob24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXNjcnViLWluY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorQU1fVl9HRU4gPSAkKGFtX192X0dFTl8kKFYpKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworQU1fVl9hdCA9ICQoYW1fX3ZfYXRfJChWKSkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9hdF8wID0gQAorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbF9tYXggPSA0MAorYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKKyAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorYW1fX25vYmFzZV9zdHJpcCA9IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCithbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisgIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCisgICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisgICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCisgICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworYW1fX2Jhc2VfbGlzdCA9IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGZhcWRpcikiCitEQVRBID0gJChmYXFfREFUQSkKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVMgPSBAQVNACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JJU09OX1BBVEggPSBAQklTT05fUEFUSEAKK0NBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKK0NBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACitDQyA9IEBDQ0AKK0NDQVMgPSBAQ0NBU0AKK0NDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAorQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAorQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAorQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAorQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRBRElSID0gQERBVEFESVJACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACitETExUT09MID0gQERMTFRPT0xACitET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAorRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKK0VYRUVYVCA9IEBFWEVFWFRACitGRkxBR1MgPSBARkZMQUdTQAorRkdSRVAgPSBARkdSRVBACitGTEVYX1BBVEggPSBARkxFWF9QQVRIQAorR0NPViA9IEBHQ09WQAorR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACitHQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAorR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACitHTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKK0dMSUJfTElCUyA9IEBHTElCX0xJQlNACitHTElCX09OTFlfQ0ZMQUdTID0gQEdMSUJfT05MWV9DRkxBR1NACitHTElCX09OTFlfTElCUyA9IEBHTElCX09OTFlfTElCU0AKK0dMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAorR0xJQl9SRVEgPSBAR0xJQl9SRVFACitHTVBfTElCUyA9IEBHTVBfTElCU0AKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAorR1JFUCA9IEBHUkVQQAorR1NMX0xJQlMgPSBAR1NMX0xJQlNACitHU1RfQUdFID0gQEdTVF9BR0VACitHU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKK0dTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKK0dTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACitHU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAorR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACitHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FQAorR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAorR1NUX0RJU0FCTEVfTkVUX0RFRklORSA9IEBHU1RfRElTQUJMRV9ORVRfREVGSU5FQAorR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKK0dTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACitHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACitHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAorR1NUX0RJU0FCTEVfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1RSQUNFX0RFRklORUAKK0dTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkUgPSBAR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORUAKK0dTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkUgPSBAR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORUAKK0dTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FID0gQEdTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FQAorR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACitHU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKK0dTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACitHU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKK0dTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAorR1NUX01BSk9STUlOT1IgPSBAR1NUX01BSk9STUlOT1JACitHU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKK0dTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKK0dTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACitHU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKK0dTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKK0dTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKK0dTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACitHU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACitHU1RfUEtHX0RFUFMgPSBAR1NUX1BLR19ERVBTQAorR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKK0dTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgPSBAR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFREAKK0dTVF9QUklOVEZfRVhURU5TSU9OX1BPSU5URVJfRk9STUFUX0RFRklORSA9IEBHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkVACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FQAorR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAorR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKK0dTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OX0RFRklORSA9IEBHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkVACitHVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAorSEFWRV9ET0NCT09LMkhUTUwgPSBASEFWRV9ET0NCT09LMkhUTUxACitIQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAorSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAorSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAorSEFWRV9GSUcyREVWID0gQEhBVkVfRklHMkRFVkAKK0hBVkVfR01QID0gQEhBVkVfR01QQAorSEFWRV9HU0wgPSBASEFWRV9HU0xACitIQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAorSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAorSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKK0hBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAorSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKK0hPU1RfQ1BVID0gQEhPU1RfQ1BVQAorSFRNTF9ESVIgPSBASFRNTF9ESVJACitJTkVUX0FUT05fTElCUyA9IEBJTkVUX0FUT05fTElCU0AKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACitJTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKK0lOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKK0lOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKK0lOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAorSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKK0lOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKK0lOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACitJTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJESVIgPSBATElCRElSQAorTElCSUNPTlYgPSBATElCSUNPTlZACitMSUJJTlRMID0gQExJQklOVExACitMSUJNID0gQExJQk1ACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMT0NBTEVESVIgPSBATE9DQUxFRElSQAorTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAorTFRMSUJJTlRMID0gQExUTElCSU5UTEAKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUlOVCA9IEBNQUlOVEAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKK01TR01FUkdFID0gQE1TR01FUkdFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKK1BBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACitQQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAorUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACitQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BMVUdJTkRJUiA9IEBQTFVHSU5ESVJACitQT1NVQiA9IEBQT1NVQkAKK1BST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAorUFlUSE9OID0gQFBZVEhPTkAKK1BZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACitQWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAorUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAorUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1ZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACitWQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACitWQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACitWRVJTSU9OID0gQFZFUlNJT05ACitXQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKK1dJTjMyX0xJQlMgPSBAV0lOMzJfTElCU0AKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKK1hHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKK1hNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAorWFNMVFBST0MgPSBAWFNMVFBST0NACitYU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3BrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACitwa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAorcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3B5ZXhlY2RpciA9IEBweWV4ZWNkaXJACitweXRob25kaXIgPSBAcHl0aG9uZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACisKKyMgYmFzZSBuYW1lIG9mIGRvYworRE9DID0gZmFxCisjIGZvcm1hdHMgZGVmaW5lZCBmb3IgdXBsb2FkLWRvYy5tYWsKK0ZPUk1BVFMgPSBodG1sIHBzIHBkZgorCisjIG1haW4geG1sIGZpbGUKK01BSU4gPSAkKERPQykueG1sCisjIGFsbCB4bWwgc291cmNlcworWE1MID0gJChub3RkaXIgJCh3aWxkY2FyZCAkKHNyY2RpcikvKi54bWwpKQorIyBiYXNlIHN0eWxlIHNoZWV0CitDU1MgPSBiYXNlLmNzcworCisjIGltYWdlIHNvdXJjZXMKK1BOR19TUkMgPSAKK0ZJR19TUkMgPSAkKG5vdGRpciAkKHdpbGRjYXJkICQoc3JjZGlyKS8qLmZpZykpCisKKyMgZXh0cmEgc291cmNlcyB0byBjb3B5IGluIGJ1aWxkIGRpcmVjdG9yeQorRVhUUkFfU1JDID0gCisKKyMgaW50ZXJtZWRpYXJ5IGJ1aWxkIHBhdGgKK0JVSUxERElSID0gYnVpbGQKKyMgc2FtZSBmb3IgaW1hZ2VzCitCVUlMRElNQUdFU0RJUiA9ICQoQlVJTERESVIpL2ltYWdlcworCisjIGltYWdlcworIyByaWdodCBub3csIHdlIG9ubHkgYWxsb3cgLnBuZyBhbmQgLmZpZyBhcyBzb3VyY2UKKyMgd2UgbWlnaHQgYWRkIG1vcmUgbGF0ZXIgaWYgd2UgZmVlbCB0aGUgbmVlZAorCisjIFBORydzIGNhbiBiZSBzb3VyY2Ugb3IgYnVpbHQgZnJvbSAuZmlnCitQTkcgPSAkKHN0cmlwICQoUE5HX1NSQykgJChGSUdfU1JDOi5maWc9LnBuZykpCisjIEVQUyAucHMgZmlsZXMgY2FuIGJlIGJ1aWx0IGZyb20gLnBuZyBvciAuZmlnCitFUFMgPSAkKHN0cmlwICQoRklHX1NSQzouZmlnPS5wcykgJChQTkdfU1JDOi5wbmc9LnBzKSkKKyMgUERGIC5wZGYgZmlsZXMgY2FuIGJlIGJ1aWx0IGZyb20gLnBuZyBvciAuZmlnCitQREYgPSAkKHN0cmlwICQoRklHX1NSQzouZmlnPS5wZGYpICQoUE5HX1NSQzoucG5nPS5wZGYpKQorCisjIHdoZXJlIHdlIGV4cGVjdCB0byBmaW5kIGltYWdlcyBkdXJpbmcgYnVpbGRpbmcsIHdoZXRoZXIgYnkgY29weWluZworIyBvciBieSBnZW5lcmF0aW5nIHRoZW0KK1BOR19CVUlMVCA9ICQoZm9yZWFjaCBmaWxlLCAkKFBORyksICQoQlVJTERJTUFHRVNESVIpLyQoZmlsZSkpCitFUFNfQlVJTFQgPSAkKGZvcmVhY2ggZmlsZSwgJChFUFMpLCAkKEJVSUxESU1BR0VTRElSKS8kKGZpbGUpKQorUERGX0JVSUxUID0gJChmb3JlYWNoIGZpbGUsICQoUERGKSwgJChCVUlMRElNQUdFU0RJUikvJChmaWxlKSkKK1NSQyA9ICQoWE1MKSAkKFBOR19TUkMpICQoRklHX1NSQykgJChDU1MpICQoRVhUUkFfU1JDKQorCisjIGdlbmVyYXRlIEE0IGRvY3MKK1BBUEVSX0xPQ0FMRSA9IG5sX05MCitARE9DX0hUTUxfRkFMU0VASFRNTF9EQVQgPSAKKworIyBjYW4gd2UgZ2VuZXJhdGUgSFRNTCA/CitARE9DX0hUTUxfVFJVRUBIVE1MX0RBVCA9IGh0bWwKK0BET0NfSFRNTF9GQUxTRUBIVE1MX1RBUkdFVCA9IAorQERPQ19IVE1MX1RSVUVASFRNTF9UQVJHRVQgPSBodG1sL2luZGV4Lmh0bWwKK0BET0NfUFNfRkFMU0VAUFNfREFUID0gCisKKyMgY2FuIHdlIGdlbmVyYXRlIFBTID8KK0BET0NfUFNfVFJVRUBQU19EQVQgPSAkKERPQykucHMKK0BET0NfUERGX0ZBTFNFQFBERl9EQVQgPSAKKworIyBjYW4gd2UgZ2VuZXJhdGUgUERGID8KK0BET0NfUERGX1RSVUVAUERGX0RBVCA9ICQoRE9DKS5wZGYKKworIyB0aGVzZSB2YXJpYWJsZXMgZGVmaW5lIHRoZSBsb2NhdGlvbiBvZiB0aGUgb25saW5lIGRvY3MKK0RPQ19TRVJWRVIgPSBnc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnCitET0NfQkFTRSA9IC9zcnYvZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy93d3cvZGF0YS9kb2MKK0RPQ19VUkwgPSAkKERPQ19TRVJWRVIpOiQoRE9DX0JBU0UpCisKKyMjIyB0aGlzIGlzIHRoZSBnZW5lcmljIGJpdCBhbmQgeW91IHNob3VsZG4ndCBuZWVkIHRvIGNoYW5nZSB0aGlzCisKKyMgZ2V0IHRoZSBnZW5lcmljIGRvY2J1aWxkaW5nIE1ha2VmaWxlIHN0dWZmCisjIGdldCB0aGUgZ2VuZXJpYyB1cGxvYWQgdGFyZ2V0CisKKyMjIyB0aGlzIGlzIHN0YW5kYXJkIGF1dG9tYWtlIHN0dWZmCisKKyMgcGFja2FnZSB1cCBhbGwgdGhlIHNvdXJjZQorRVhUUkFfRElTVCA9ICQoU1JDKQorCisjIGluc3RhbGwgZG9jdW1lbnRhdGlvbgorZmFxZGlyID0gJChkb2NkaXIpLyQoRE9DKQorZmFxX0RBVEEgPSAkKFBERl9EQVQpICQoUFNfREFUKQorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvLi4vbWFudWFscy5tYWsgJCh0b3Bfc3JjZGlyKS9jb21tb24vdXBsb2FkLWRvYy5tYWsgJChzcmNkaXIpLy4uL2h0bWxpbnN0YWxsLm1hayAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBkb2NzL2ZhcS9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSBkb2NzL2ZhcS9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKK2luc3RhbGwtZmFxREFUQTogJChmYXFfREFUQSkKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGZhcWRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGZhcWRpcikiCisJQGxpc3Q9JyQoZmFxX0RBVEEpJzsgdGVzdCAtbiAiJChmYXFkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKGZhcWRpciknIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKGZhcWRpcikiIHx8IGV4aXQgJCQ/OyBcCisJZG9uZQorCit1bmluc3RhbGwtZmFxREFUQToKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGZhcV9EQVRBKSc7IHRlc3QgLW4gIiQoZmFxZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAorCXRlc3QgLW4gIiQkZmlsZXMiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiAoIGNkICckKERFU1RESVIpJChmYXFkaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQoZmFxZGlyKSIgJiYgcm0gLWYgJCRmaWxlcwordGFnczogVEFHUworVEFHUzoKKworY3RhZ3M6IENUQUdTCitDVEFHUzoKKworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjaGVjay1sb2NhbAorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoREFUQSkgYWxsLWxvY2FsCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChmYXFkaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1sb2NhbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWRhdGEtbG9jYWwgaW5zdGFsbC1mYXFEQVRBCisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmLWFtOgorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtZmFxREFUQSB1bmluc3RhbGwtbG9jYWwKKworLk1BS0U6IGNoZWNrLWFtIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IGFsbCBhbGwtYW0gYWxsLWxvY2FsIGNoZWNrIGNoZWNrLWFtIGNoZWNrLWxvY2FsIGNsZWFuIFwKKwljbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbG9jYWwgZGlzdGNsZWFuIFwKKwlkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCisJaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCisJaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZGF0YS1sb2NhbCBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBcCisJaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWZhcURBVEEgaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisJdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtZmFxREFUQSB1bmluc3RhbGwtbG9jYWwKKworCisjIyMgZ2VuZXJhdGUgYWxsIGRvY3VtZW50YXRpb24gYnkgZGVmYXVsdAorIyBob29rIGluIGh0bWwgZ2VuZXJhdGlvbgorYWxsLWxvY2FsOiBodG1sCitodG1sOiAkKEhUTUxfVEFSR0VUKQorcHM6ICQoUFNfREFUKQorcGRmOiAkKFBERl9EQVQpCisKK2RlYnVnOgorCUBlY2hvICJvdXRwdXR0aW5nIHNvbWUgdXNlZnVsIGRlYnVnIGluZm9ybWF0aW9uIgorCUBlY2hvICJTb3VyY2UgWE1MOiIKKwlAZWNobyAiWE1MOiAnJChYTUwpJyIKKwlAZWNobyAiQ1NTOiAnJChDU1MpJyIKKwlAZWNobyAiU291cmNlIGltYWdlIGZpbGVzOiIKKwlAZWNobyAiUE5HX1NSQzogJyQoUE5HX1NSQyknIgorCUBlY2hvICJGSUdfU1JDOiAnJChGSUdfU1JDKSciCisJQGVjaG8gIkFsbCB1c2VkIGltYWdlIGZpbGVzOiIKKwlAZWNobyAiUE5HOiAnJChQTkcpJyIKKwlAZWNobyAiRVBTOiAnJChFUFMpJyIKKwlAZWNobyAiUERGOiAnJChQREYpJyIKKwlAZWNobyAiQWxsIHVzZWQgaW1hZ2UgZmlsZXMgaW4gdGhlaXIgYnVpbHQgcGF0aDoiCisJQGVjaG8gIlBOR19CVUlMVDogJyQoUE5HX0JVSUxUKSciCisJQGVjaG8gIkVQU19CVUlMVDogJyQoRVBTX0JVSUxUKSciCisJQGVjaG8gIlBERl9CVUlMVDogJyQoUERGX0JVSUxUKSciCisJQGVjaG8gIkVuZCByZXN1bHQgcHJvZHVjdHM6IgorCUBlY2hvICJIVE1MX0RBVDogJyQoSFRNTF9EQVQpJyIKKwlAZWNobyAiUFNfREFUOiAgICckKFBTX0RBVCknIgorCUBlY2hvICJQREZfREFUOiAgJyQoUERGX0RBVCknIgorCisjIGEgcnVsZSB0byBjb3B5IGFsbCBvZiB0aGUgc291cmNlIGZvciBkb2NzIGludG8gJChidWlsZGRpcikvYnVpbGQKKyQoQlVJTERESVIpLyQoTUFJTik6ICQoWE1MKSAkKENTUykgJChFWFRSQV9TUkMpCisJQC1ta2RpciAtcCAkKEJVSUxERElSKTsgXAorCWlmIHRlc3QgIngkKEVYVFJBX1NSQykiICE9ICJ4IjsgdGhlbiBmb3IgYSBpbiAkKEVYVFJBX1NSQyk7IGRvIGNwICQoc3JjZGlyKS8kJGEgJChCVUlMRERJUik7IGRvbmU7IGZpIDsgXAorCWZvciBhIGluICQoWE1MKTsgZG8gY3AgJChzcmNkaXIpLyQkYSAkKEJVSUxERElSKTsgZG9uZSA7IFwKKwlmb3IgYSBpbiAkKENTUyk7IGRvIGNwICQoc3JjZGlyKS8kJGEgJChCVUlMRERJUik7IGRvbmUgOyBcCisJY3AgLi4vdmVyc2lvbi5lbnRpdGllcyAkKEJVSUxERElSKSA7IFwKKwljcCAkKHRvcF9zcmNkaXIpL2RvY3MvdXJsLmVudGl0aWVzICQoQlVJTERESVIpCisKKyMgd2Ugc2hvdWxkIHN3aXRjaCB0byB4c2x0cHJvYworIyBkb2Nib29rMmh0bWwgYWthIGphZGUgY2FuJ3QgYWRkIHRoZSBlbmNvZGluZyBlYXNpbHkgdG8gdGhlIGh0bWwgbWV0YQorIyAoYnV0IHdlIGFyZSBsYXp5IGFuZCBqdXN0IGFidXNlIHNlZCB0byBhZGQgaXQpCisjIGp3IC1mIGRvY2Jvb2sgLWIgaHRtbCAtZCBwd2cuZHNsIC1vIC4uL2h0bWwgLVYgJyV1c2UtaWQtYXMtZmlsZW5hbWUlJyAkKE1BSU4pCisjIHRoaXMgaXMgYSBzdGFydGluZyBwb2ludAorIyB4c2x0cHJvYyAtLW5vbmV0IC91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc3R5bGVzaGVldC9ud2Fsc2gvaHRtbC9kb2Nib29rLnhzbCBwd2cueG1sCisjIAoraHRtbC9pbmRleC5odG1sOiAkKEJVSUxERElSKS8kKE1BSU4pICQoUE5HX0JVSUxUKSAkKEZJR19TUkMpCisJQCQoTUFLRSkgY2hlY2stbG9jYWwKKwlAZWNobyAiKioqIEdlbmVyYXRpbmcgSFRNTCBvdXRwdXQgKioqIgorCUAtbWtkaXIgLXAgaHRtbAorCUBjcCAtZiAkKHNyY2RpcikvLi4vaW1hZ2UtcG5nICQoQlVJTERESVIpL2ltYWdlLmVudGl0aWVzCisJQGNkICQoQlVJTERESVIpICYmIFNQX0VOQ09ESU5HPSJVVEYtOCIgZG9jYm9vazJodG1sIC1vIC4uL2h0bWwgLVYgJyV1c2UtaWQtYXMtZmlsZW5hbWUlJyAkKE1BSU4pCisJQCQoU0VEKSAtaSAtZSAncy9cKF5DT05URU5ULipcKVwoLj5cKS9cMTtjaGFyc2V0PVVURi04XDIvJyBodG1sLypodG1sCisJQHRlc3QgIngkKENTUykiICE9ICJ4IiAmJiBcCisgICAgICAgICAgZWNobyAiQ29weWluZyAuY3NzIGZpbGVzOiAkKENTUykiICYmIFwKKyAgICAgICAgICBjcCAkKHNyY2RpcikvJChDU1MpIGh0bWwKKwlAdGVzdCAieCQoUE5HKSIgIT0gIngiICYmIFwKKyAgICAgICAgICBlY2hvICJDb3B5aW5nIC5wbmcgaW1hZ2VzOiAkKFBOR19CVUlMVCkiICYmIFwKKwkgIG1rZGlyIC1wIGh0bWwvaW1hZ2VzICYmIFwKKyAgICAgICAgICBjcCAkKFBOR19CVUlMVCkgaHRtbC9pbWFnZXMgfHwgdHJ1ZQorCiskKERPQykucHM6ICQoQlVJTERESVIpLyQoTUFJTikgJChFUFNfQlVJTFQpICQoUE5HX1NSQykgJChGSUdfU1JDKQorCUAkKE1BS0UpIGNoZWNrLWxvY2FsCisJQGVjaG8gIioqKiBHZW5lcmF0aW5nIFBTIG91dHB1dCAqKioiCisJQGNwIC1mICQoc3JjZGlyKS8uLi9pbWFnZS1lcHMgJChCVUlMRERJUikvaW1hZ2UuZW50aXRpZXMKKwljZCAkKEJVSUxERElSKSAmJiBTUF9FTkNPRElORz0iVVRGLTgiIGRvY2Jvb2sycHMgLW8gLi4gJChNQUlOKQorIwlleHBvcnQgTENfUEFQRVI9JChQQVBFUl9MT0NBTEUpICYmIGNkICQoQlVJTERESVIpICYmIHhtbHRvIHBzIC1vIC4uICQoTUFJTikKKworJChET0MpLnBkZjogJChET0MpLnBzCisJQCQoTUFLRSkgY2hlY2stbG9jYWwKKwlAZWNobyAiKioqIEdlbmVyYXRpbmcgUERGIG91dHB1dCAqKioiCisJQHBzMnBkZiAkKERPQykucHMKKworIyQoRE9DKS5wZGY6ICQoTUFJTikgJChQREYpICQoRklHX1NSQykKKyMJQGVjaG8gIioqKiBHZW5lcmF0aW5nIFBERiBvdXRwdXQgKioqIgorIwlAY3AgLWYgJChzcmNkaXIpLy4uL2ltYWdlLXBkZiBpbWFnZS5lbnRpdGllcworIwlAZXhwb3J0IExDX1BBUEVSPSQoUEFQRVJfTE9DQUxFKSAmJiB4bWx0byBwZGYgJChNQUlOKQorIwlAcm0gaW1hZ2UuZW50aXRpZXMKKworY2xlYW4tbG9jYWw6CisJLSQoUk0pIC1yICQoQlVJTERESVIpCisJLSQoUk0pIC1yIGh0bWwKKwktJChSTSkgJChET0MpLnBzCisJLSQoUk0pICQoRE9DKS5wZGYKKwktJChSTSkgLXIgd3d3CisKKyMjIyBpbWFnZSBnZW5lcmF0aW9uCisKKyMgY29weSBwbmcgZnJvbSBzb3VyY2UgZGlyIHBuZworJChCVUlMRElNQUdFU0RJUikvJS5wbmc6ICQoc3JjZGlyKS8lLnBuZworCUBlY2hvICJDb3B5aW5nICQ8IHRvICRAIgorCUBta2RpciAtcCAkKEJVSUxESU1BR0VTRElSKQorCUBjcCAkPCAkQAorIyBtYWtlIHBuZyBmcm9tIGZpZworJChCVUlMRElNQUdFU0RJUikvJS5wbmc6ICUuZmlnCisJQGVjaG8gIkdlbmVyYXRpbmcgJEAgZnJvbSAkPCIKKwlAbWtkaXIgLXAgJChCVUlMRElNQUdFU0RJUikKKwlAZmlnMmRldiAtTHBuZyAkPCAkQAorCisjIG1ha2UgcHMoRVBTKSBmcm9tIGZpZworJChCVUlMRElNQUdFU0RJUikvJS5wczogJS5maWcKKwlAZWNobyAiR2VuZXJhdGluZyAkQCBmcm9tICQ8IgorCUBta2RpciAtcCAkKEJVSUxESU1BR0VTRElSKQorCUBmaWcyZGV2IC1MZXBzICQ8ICRACisKKyMgbWFrZSBwZGYgZnJvbSBmaWcKKyQoQlVJTERJTUFHRVNESVIpLyUucGRmOiAlLmZpZworCUBlY2hvICJHZW5lcmF0aW5nICRAIGZyb20gJDwiCisJQG1rZGlyIC1wICQoQlVJTERJTUFHRVNESVIpCisJQGZpZzJkZXYgLUxwZGYgJDwgJEAKKworIyBtYWtlIHBkZiBmcm9tIHBuZworJChCVUlMRElNQUdFU0RJUikvJS5wZGY6ICUucG5nCisJQGVjaG8gIkdlbmVyYXRpbmcgJEAgZnJvbSAkPCIKKwlAbWtkaXIgLXAgJChCVUlMRElNQUdFU0RJUikKKwlAY2F0ICQ8IHwgcG5ndG9wbm0gfCBwbm10b3BzIC1ub3R1cm4gMj4gL2Rldi9udWxsIHwgZXBzdG9wZGYgLS1maWx0ZXIgLS1vdXRmaWxlICRAIDI+IC9kZXYvbnVsbAorCisjIG1ha2UgcHMoRVBTKSBmcm9tIHBuZworJChCVUlMRElNQUdFU0RJUikvJS5wczogJS5wbmcKKwlAZWNobyAiR2VuZXJhdGluZyAkQCBmcm9tICQ8IgorCUBta2RpciAtcCAkKEJVSUxESU1BR0VTRElSKQorCUBjYXQgJDwgfCBwbmd0b3BubSB8IHBubXRvcHMgLW5vdHVybiA+ICRAIDI+IC9kZXYvbnVsbAorCisjIG1ha2Ugc3VyZSB4bWwgdmFsaWRhdGVzIHByb3Blcmx5CitjaGVjay1sb2NhbDogJChCVUlMRERJUikvJChNQUlOKQorCUBjcCAtZiAkKHNyY2RpcikvLi4vaW1hZ2UtcG5nICQoQlVJTERESVIpL2ltYWdlLmVudGl0aWVzCisJY2QgJChCVUlMRERJUikgJiYgeG1sbGludCAtbm9vdXQgLXZhbGlkICQoTUFJTikKKworIyBhdm9pZCAnY3A6IGNhbm5vdCBjcmVhdGUgcmVndWxhciBmaWxlIGBidWlsZC9pbWFnZS5lbnRpdGllcyc6IEZpbGUgZXhpc3RzJworIyBlcnJvcnMgZHVyaW5nICdtYWtlIGRpc3RjaGVjaycgYnkgZGlzYWJsaW5nIHBhcmFsbGVsIGJ1aWxkcworLk5PVFBBUkFMTEVMOgorCit1cGxvYWQ6ICQoRk9STUFUUykKKwlAaWYgZWNobyAkKEZPUk1BVFMpIHwgZ3JlcCBodG1sID4gL2Rldi9udWxsOyB0aGVuIFwKKwkgIGVjaG8gIlByZXBhcmluZyBkb2NzIGZvciB1cGxvYWQgKHJlYmFzaW5nIGNyb3NzLXJlZmVyZW5jZXMpIC4uLiIgOyBcCisJICBpZiB0ZXN0IHgkKGJ1aWxkZGlyKSAhPSB4JChzcmNkaXIpOyB0aGVuIFwKKwkgICAgZWNobyAibWFrZSB1cGxvYWQgY2FuIG9ubHkgYmUgdXNlZCBpZiBzcmNkaXIgPT0gYnVpbGRkaXIiOyBcCisJICAgIGV4aXQgMTsgXAorCSAgZmk7IFwKKwkgICMgZ3RrZG9jLXJlYmFzZSBzb21ldGltZXMgZ2V0cyBjb25mdXNlZCwgc28gcmVzZXQgZXZlcnl0aGluZyB0byBcCisJICAjIGxvY2FsIGxpbmtzIGJlZm9yZSByZWJhc2luZyB0byBvbmxpbmUgbGlua3MgICAgICAgICAgICAgICAgICAgXAorCSAgZ3RrZG9jLXJlYmFzZSAtLWh0bWwtZGlyPSQoYnVpbGRkaXIpL2h0bWwgMj4vZGV2L251bGwgMj4vZGV2L251bGwgOyBcCisJICByZWJhc2U9YGd0a2RvYy1yZWJhc2UgLS12ZXJib3NlIC0tb25saW5lIC0taHRtbC1kaXI9JChidWlsZGRpcikvaHRtbGAgOyBcCisJICBlY2hvICIkJHJlYmFzZSIgfCBncmVwIC1lICJPbi0qbGluZSI7IFwKKwkgIGZvciByZXEgaW4gZ2xpYiBnb2JqZWN0IGdzdHJlYW1lciBnc3RyZWFtZXItbGlicyBnc3QtcGx1Z2lucy1iYXNlLWxpYnM7IGRvIFwKKwkgICAgaWYgISAoIGVjaG8gIiQkcmViYXNlIiB8IGdyZXAgLWkgLWUgIk9uLSpsaW5lLiovJCRyZXEvIiApOyB0aGVuIFwKKwkgICAgICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiA7IFwKKwkgICAgICBlY2hvICIgQ291bGQgbm90IGRldGVybWluZSBvbmxpbmUgbG9jYXRpb24gZm9yICQkcmVxIGRvY3MuIENyb3NzLXJlZmVyZW5jaW5nIHdpbGwgYmUgIiA7IFwKKwkgICAgICBlY2hvICIgYnJva2VuLCBzbyBub3QgdXBsb2FkaW5nLiBNYWtlIHN1cmUgdGhlIGxpYnJhcnkncyBndGstZG9jIGRvY3VtZW50YXRpb24gaXMgICAgIiA7IFwKKwkgICAgICBlY2hvICIgaW5zdGFsbGVkIHNvbWV3aGVyZSBpbiAvdXNyL3NoYXJlL2d0ay1kb2MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiA7IFwKKwkgICAgICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiA7IFwKKwkgICAgICBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgIGRvbmU7IFwKKwkgIGV4cG9ydCBTUkM9IiQkU1JDIGh0bWwiOyBcCisJZmk7IFwKKwlpZiBlY2hvICQoRk9STUFUUykgfCBncmVwIHBzID4gL2Rldi9udWxsOyB0aGVuIGV4cG9ydCBTUkM9IiQkU1JDICQoRE9DKS5wcyI7IGZpOyBcCisJaWYgZWNobyAkKEZPUk1BVFMpIHwgZ3JlcCBwZGYgPiAvZGV2L251bGw7IHRoZW4gZXhwb3J0IFNSQz0iJCRTUkMgJChET0MpLnBkZiI7IGZpOyBcCisJXAorCSMgdXBsb2FkIHJlbGVhc2VzIHRvIGJvdGggMC4xMC5YLyBhbmQgaGVhZC8gc3ViZGlyZWN0b3JpZXMgXAorCWlmIHRlc3QgIngkKFBBQ0tBR0VfVkVSU0lPTl9OQU5PKSIgPSB4MDsgdGhlbiBcCisJICBleHBvcnQgRElSPSQoRE9DX0JBU0UpL2dzdHJlYW1lci8kKFZFUlNJT04pLyQoRE9DKTsgXAorCSAgZWNobyBVcGxvYWRpbmcgJCRTUkMgdG8gJChET0NfU0VSVkVSKTokJERJUjsgXAorCSAgc3NoICQoRE9DX1NFUlZFUikgbWtkaXIgLXAgJCRESVI7IFwKKwkgIHJzeW5jIC1ydiAtZSBzc2ggLS1kZWxldGUgJCRTUkMgJChET0NfU0VSVkVSKTokJERJUjsgXAorCSAgc3NoICQoRE9DX1NFUlZFUikgY2htb2QgLVIgZyt3ICQkRElSOyBcCisJZmk7IFwKKwlcCisJZXhwb3J0IERJUj0kKERPQ19CQVNFKS9nc3RyZWFtZXIvaGVhZC8kKERPQyk7IFwKKwllY2hvIFVwbG9hZGluZyAkJFNSQyB0byAkKERPQ19TRVJWRVIpOiQkRElSOyBcCisJc3NoICQoRE9DX1NFUlZFUikgbWtkaXIgLXAgJCRESVI7IFwKKwlyc3luYyAtcnYgLWUgc3NoIC0tZGVsZXRlICQkU1JDICQoRE9DX1NFUlZFUik6JCRESVI7IFwKKwlzc2ggJChET0NfU0VSVkVSKSBjaG1vZCAtUiBnK3cgJCRESVI7IFwKKwlcCisJaWYgZWNobyAkKEZPUk1BVFMpIHwgZ3JlcCBodG1sID4gL2Rldi9udWxsOyB0aGVuIFwKKwkgIGVjaG8gIlVuLXByZXBhcmluZyBkb2NzIGZvciB1cGxvYWQgKHJlYmFzaW5nIGNyb3NzLXJlZmVyZW5jZXMpIC4uLiIgOyBcCisJICBndGtkb2MtcmViYXNlIC0taHRtbC1kaXI9JChidWlsZGRpcikvaHRtbCA7IFwKKwlmaTsgXAorCWVjaG8gRG9uZQorCitARE9DX0hUTUxfVFJVRUBpbnN0YWxsLWRhdGEtbG9jYWw6IGh0bWwKK0BET0NfSFRNTF9UUlVFQAkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGRvY2RpcikvJChET0MpCitARE9DX0hUTUxfVFJVRUAJY3AgLXByICQoSFRNTF9EQVQpICQoREVTVERJUikkKGRvY2RpcikvJChET0MpCisKK0BET0NfSFRNTF9UUlVFQHVuaW5zdGFsbC1sb2NhbDoKK0BET0NfSFRNTF9UUlVFQAlmb3IgcGFydCBpbiAkKEhUTUxfREFUKTsgZG8gcm0gLXJmICQoREVTVERJUikkKGRvY2RpcikvJChET0MpLyQkcGFydDsgZG9uZQorQERPQ19IVE1MX0ZBTFNFQGluc3RhbGwtZGF0YS1sb2NhbDoKK0BET0NfSFRNTF9GQUxTRUB1bmluc3RhbGwtbG9jYWw6CisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2RvY3MvZmFxL2Jhc2UuY3NzIGIvZG9jcy9mYXEvYmFzZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI0YzA3OAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZmFxL2Jhc2UuY3NzCkBAIC0wLDAgKzEsMyBAQAorcHJlLnByb2dyYW1saXN0aW5nIHsgCisJIGJhY2tncm91bmQ6ICNFOEU4RkY7Cit9CmRpZmYgLS1naXQgYS9kb2NzL2ZhcS9kZXBlbmRlbmNpZXMueG1sIGIvZG9jcy9mYXEvZGVwZW5kZW5jaWVzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWMyZWZmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9mYXEvZGVwZW5kZW5jaWVzLnhtbApAQCAtMCwwICsxLDEzMCBAQAorPHNlY3QxIGlkPSJjaGFwdGVyLWRlcGVuZGVuY2llcyI+CisgIDx0aXRsZSBpZD0idGl0bGUtZGVwZW5kZW5jaWVzIj5EZXBlbmRlbmNpZXM8L3RpdGxlPgorICA8cWFuZGFzZXQgZGVmYXVsdGxhYmVsPSJxYW5kYSI+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgIDxxdWVzdGlvbiBpZD0iZGVwZW5kZW5jaWVzLXdoeS1zby1tYW55Ij4KKyAgICAgICAgPHBhcmE+V2h5IGFyZSB0aGVyZSBzbyBtYW55IGRlcGVuZGVuY2llcyA/PC9wYXJhPgorICAgICAgPC9xdWVzdGlvbj4KKworICAgICAgPGFuc3dlcj4KKyAgICAgICAgPHBhcmE+CitNYWtpbmcgYSBmdWxsLWZlYXR1cmVkIG1lZGlhIGZyYW1ld29yayBpcyBhIGh1Z2UgdW5kZXJ0YWtpbmcgaW4gaXRzZWxmLgorQnkgdXNpbmcgdGhlIHdvcmsgZG9uZSBieSBvdGhlcnMsIHdlIGJvdGggcmVkdWNlIHRoZSBhbW91bnQgb2YgcmVkdW5kYW50IHdvcmsgCitiZWluZyBkb25lIGFuZCBsZWF2ZSBvdXJzZWx2ZXMgZnJlZSB0byB3b3JrIG9uIHRoZSBhcmNoaXRlY3R1cmUgaXRzZWxmIAoraW5zdGVhZCBvZiB3b3JraW5nIG9uIHRoZSBsb3ctbGV2ZWwgc3R1ZmYuICBXZSB3b3VsZCBiZSBzdHVwaWQgbm90IHRvIHJldXNlCit0aGUgY29kZSBvdGhlcnMgaGF2ZSB3cml0dGVuLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorSG93ZXZlciwgZG8gcmVhbGl6ZSB0aGF0IGluIG5vIHdheSB5b3UgYXJlIGZvcmNlZCB0byBoYXZlIGFsbCBkZXBlbmRlbmNpZXMKK2luc3RhbGxlZC4gIE5vbmUgb2YgdGhlIGNvcmUgZGV2ZWxvcGVycyBoYXMgYWxsIG9mIHRoZW0gaW5zdGFsbGVkLiAgR1N0cmVhbWVyCitoYXMgb25seSBhIGZldyBvYmxpZ2F0ZSBkZXBlbmRlbmNpZXMgOiBHTGliIDIuMCwgbGlib2lsLCBhbmQgdmVyeQorY29tbW9uIHN0dWZmIGxpa2UgZ2xpYmMsIGEgQyBjb21waWxlciwgYW5kIHNvIG9uLiAgQWxsIG9mIHRoZSBvdGhlcgorZGVwZW5kZW5jaWVzIGFyZSBvcHRpb25hbC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KK1NvLCBpbiBjbG9zaW5nLCBsZXQncyByZXBocmFzZSB0aGUgcXVlc3Rpb24gdG8gCis8cXVvdGU+V2h5IGFyZSB5b3UgZ2l2aW5nIG1lIHNvIG1hbnkgY2hvaWNlcyBhbmQgc3VjaCBhIHJpY2ggZW52aXJvbm1lbnQgPworPC9xdW90ZT4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCis8cWFuZGFlbnRyeT4KKyAgICAgIDxxdWVzdGlvbiBpZD0iZGVwZW5kZW5jaWVzLWdsaWIiPgorICAgICAgICA8cGFyYT4KK0RvZXMgR1N0cmVhbWVyIHVzZSBHVEsrIDEuMi9HTGliIDEuMiBvciBHTGliIDIuMCA/CisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvcXVlc3Rpb24+CisKKyAgICAgIDxhbnN3ZXI+CisgICAgICAgIDxwYXJhPgorU2luY2UgdGhlIDAuMy4zIHJlbGVhc2Ugb2YgR1N0cmVhbWVyLCB3ZSB1c2UgR0xpYiAyLjAgYXMgdGhlIGNvcmUgbGlicmFyeSAKK2ZvciBHU3RyZWFtZXIsIHdoaWNoIGZlYXR1cmVzIGEgbW92ZSBvZiBHT2JqZWN0IGZyb20gR1RLKyAyLjAgdG8gR0xpYiAyLjAuCitJZiB5b3Ugd2FudCB0byBjb21waWxlIHVzaW5nIEdUSysgMS4yL0dMaWIgMS4yLCAgeW91IG5lZWQgdG8gZ2V0IHRoZSAKKzAuMy4xIG9yIGVhcmxpZXIgcmVsZWFzZS4gICBJdCBpcyBvZiBjb3Vyc2Ugbm90IHN1cHBvcnRlZC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICA8cXVlc3Rpb24gaWQ9ImRlcGVuZGVuY2llcy1keHIiPgorICAgICAgICA8cGFyYT4KK0RvZXMgR1N0cmVhbWVyIG9mZmVyIHN1cHBvcnQgZm9yIERWRCBkZWNvZGVyIGNhcmRzIGxpa2UgZHhyMi8zID8KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9xdWVzdGlvbj4KKworICAgICAgPGFuc3dlcj4KKyAgICAgICAgPHBhcmE+CitXZSBkbyBoYXZlIHN1cHBvcnQgZm9yIHRoZSBkeHIzLCBhbHRob3VnaCBkeHIyIHN1cHBvcnQgaXMgdW5rbm93bi4gCitHU3RyZWFtZXIgY2FuIGVhc2lseSBhY2NvbW1vZGF0ZSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gYnkgd3JpdGluZyBuZXcKK2RldmljZS1zcGVjaWZpYyBlbGVtZW50cy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICA8cXVlc3Rpb24gaWQ9ImRlcGVuZGVuY2llcy14Ij4KKyAgICAgICAgPHBhcmE+SXMgR1N0cmVhbWVyIFggaW5kZXBlbmRlbnQgPzwvcGFyYT4KKyAgICAgIDwvcXVlc3Rpb24+CisKKyAgICAgIDxhbnN3ZXI+CisgICAgICAgIDxwYXJhPgorWWVzLCB3ZSBoYXZlIG5vIFggZGVwZW5kZW5jeSBpbiBhbnkgb2Ygb3VyIGNvcmUgbW9kdWxlcy4gVGhlcmUgYXJlIEdTdHJlYW1lcgorYXBwbGljYXRpb25zIHRoYXQgcnVuIGZpbmUgd2l0aG91dCBhbnkgbmVlZCBmb3IgWC4gIEhvd2V2ZXIsIHVudGlsIG91ciBMaW51eCAKK0ZyYW1lYnVmZmVyIG9yIGxpYnN2Z2EgcGx1Z2luIGlzIHJlYWR5LCB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byBwbGF5IHZpZGVvcyAKK3dpdGhvdXQgWC4gSW4gdGhlIGZ1dHVyZSwgdGhlcmUgd2lsbCBwcm9iYWJseSBiZSBsb3RzIG9mIGRpZmZlcmVudCBvdXRwdXQgCitwbHVnaW5zIGZvciB2aWRlbyBhdmFpbGFibGUuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgPHF1ZXN0aW9uIGlkPSJkZXBlbmRlbmNpZXMtbGFkc3BhIj4KKyAgICAgICAgPHBhcmE+V2hhdCBpcyBHU3RyZWFtZXIncyBwb3NpdGlvbiBvbiBlZmZvcnRzIHN1Y2ggYXMgTEFEU1BBID88L3BhcmE+CisgICAgICA8L3F1ZXN0aW9uPgorCisgICAgICA8YW5zd2VyPgorICAgICAgICA8cGFyYT4KK0dTdHJlYW1lciBhY3RpdmVseSBzdXBwb3J0cyBzdWNoIGVmZm9ydHMsIGFuZCBpbiB0aGUgY2FzZSBvZiAKKzx1bGluayB1cmw9Imh0dHA6Ly9sYWRzcGEub3JnLyI+PGNpdGV0aXRsZT5MQURTUEE8L2NpdGV0aXRsZT48L3VsaW5rPiwKK3dlIGFscmVhZHkgaGF2ZSBhIHdyYXBwZXIgcGx1Z2luLiAgVGhpcyB3cmFwcGVyIHBsdWctaW4gZGV0ZWN0cyB0aGUgTEFEU1BBCitwbHVnaW5zIHByZXNlbnQgb24geW91ciBzeXN0ZW0gYXQgcmVnaXN0ZXIgdGltZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICA8cXVlc3Rpb24gaWQ9ImRlcGVuZGVuY2llcy1taWRpIj4KKyAgICAgICAgPHBhcmE+RG9lcyBHU3RyZWFtZXIgc3VwcG9ydCBNSURJID88L3BhcmE+CisgICAgICA8L3F1ZXN0aW9uPgorCisgICAgICA8YW5zd2VyPgorICAgICAgICA8cGFyYT4KK05vdCB5ZXQuIFRoZSBHU3RyZWFtZXIgYXJjaGl0ZWN0dXJlIHNob3VsZCBiZSBhYmxlIHRvIHN1cHBvcnQgdGhlIG5lZWRzIG9mIAorTUlESSBhcHBsaWNhdGlvbnMgdmVyeSB3ZWxsIGhvd2V2ZXIuIElmIHlvdSBhcmUgYSBkZXZlbG9wZXIgaW50ZXJlc3RlZCBpbiAKK2FkZGluZyBNSURJIHN1cHBvcnQgdG8gR1N0cmVhbWVyIHdlIGFyZSB2ZXJ5IGludGVyZXN0ZWQgaW4gZ2V0dGluZyBpbiB0b3VjaCAKK3dpdGggeW91LgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgIDxxdWVzdGlvbiBpZD0iZGVwZW5kZW5jaWVzLWdub21lIj4KKyAgICAgICAgPHBhcmE+RG9lcyBHU3RyZWFtZXIgZGVwZW5kIG9uIEdOT01FID88L3BhcmE+CisgICAgICA8L3F1ZXN0aW9uPgorCisgICAgICA8YW5zd2VyPgorICAgICAgICA8cGFyYT4KK05vLiBCdXQgbWFueSBvZiB0aGUgYXBwbGljYXRpb25zIGRldmVsb3BlZCBmb3IgR1N0cmVhbWVyIGRvLCBpbmNsdWRpbmcgb3VyIAorc2FtcGxlIGFwcGxpY2F0aW9ucy4gVGhlcmUgaXMgbm90aGluZyBoaW5kZXJpbmcgcGVvcGxlIGZyb20gZGV2ZWxvcGluZyAKK2FwcGxpY2F0aW9ucyB1c2luZyBvdGhlciB0b29sa2l0cyBob3dldmVyIGFuZCB3ZSB3b3VsZCBoYXBwaWx5IGhlbHAgcHJvbW90ZSAKK3N1Y2ggZWZmb3J0cy4gQSBnb29kIGV4YW1wbGUgb2YgYW4gYXBwbGljYXRpb24gdXNpbmcgR1N0cmVhbWVyLCBidXQgd2hpY2ggaXMgCitub3QgdXNpbmcgR05PTUUgaXMgdGhlIAorPHVsaW5rIHVybD0iaHR0cDovL21venN0cmVhbWVyLm1vemRldi5vcmciPjxjaXRldGl0bGU+CitNb3pzdHJlYW1lcjwvY2l0ZXRpdGxlPjwvdWxpbms+IHdoaWNoIHVzZXMgTW96aWxsYSBYVUwuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKyAgPC9xYW5kYXNldD4KKzwvc2VjdDE+CmRpZmYgLS1naXQgYS9kb2NzL2ZhcS9kZXZlbG9waW5nLnhtbCBiL2RvY3MvZmFxL2RldmVsb3BpbmcueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZmJjNGMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2ZhcS9kZXZlbG9waW5nLnhtbApAQCAtMCwwICsxLDIyMSBAQAorPHNlY3QxIGlkPSJjaGFwdGVyLWRldmVsb3BpbmciPgorICA8dGl0bGUgaWQ9InRpdGxlLWRldmVsb3BpbmciPkRldmVsb3BpbmcgYXBwbGljYXRpb25zIHdpdGggR1N0cmVhbWVyPC90aXRsZT4KKyAgPHFhbmRhc2V0IGRlZmF1bHRsYWJlbD0icWFuZGEiPgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICA8cXVlc3Rpb24gaWQ9ImRldmVsb3BpbmctY29tcGlsZS1wcm9ncmFtcyI+CisgICAgICAgIDxwYXJhPkhvdyBkbyBJIGNvbXBpbGUgcHJvZ3JhbXMgdGhhdCB1c2UgR1N0cmVhbWVyID88L3BhcmE+CisgICAgICA8L3F1ZXN0aW9uPgorCisgICAgICA8YW5zd2VyPgorICAgICAgICA8cGFyYT4KK0dTdHJlYW1lciB1c2VzIHBrZy1jb25maWcgdG8gYXNzaXN0IGFwcGxpY2F0aW9ucyB3aXRoIGNvbXBpbGF0aW9uIGFuZCAKK2xpbmtpbmcgZmxhZ3MuIAorcGtnLWNvbmZpZyBpcyBhbHJlYWR5IHVzZWQgYnkgR1RLKywgR05PTUUsIFNETCwgYW5kIG90aGVyczsgc28gaWYgeW91IGFyZSAKK2ZhbWlsaWFyIHdpdGggdXNpbmcgaXQgZm9yIGFueSBvZiB0aG9zZSwgeW91J3JlIHNldC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KK0lmIHlvdSdyZSBub3QgZmFtaWxpYXIgd2l0aCBwa2ctY29uZmlnIHRvIGNvbXBpbGUgYW5kIGxpbmsgYSBzbWFsbCAKK29uZS1maWxlIHByb2dyYW0sIHBhc3MgdGhlIC0tY2ZsYWdzIGFuZCAtLWxpYnMgYXJndW1lbnRzIHRvIHBrZy1jb25maWcuCitGb3IgZXhhbXBsZToKKzxwcm9ncmFtbGlzdGluZz4KKyQgbGlidG9vbCAtLW1vZGU9bGluayBnY2MgYHBrZy1jb25maWcgLS1jZmxhZ3MgLS1saWJzIGdzdHJlYW1lci0mR1NUX01BSk9STUlOT1I7YCAtbyBteXByb2cgbXlwcm9nLmMKKzwvcHJvZ3JhbWxpc3Rpbmc+Cit3b3VsZCBiZSBzdWZmaWNpZW50IGZvciBhIGdzdHJlYW1lci1vbmx5IHByb2dyYW0uIAorSWYgKGZvciBleGFtcGxlKSB5b3VyIGFwcCBhbHNvIHVzZWQgR1RLKyAyLjAsIHlvdSBjb3VsZCB1c2UKKzxwcm9ncmFtbGlzdGluZz4KKyQgbGlidG9vbCAtLW1vZGU9bGluayBnY2MgYHBrZy1jb25maWcgLS1jZmxhZ3MgLS1saWJzIGdzdHJlYW1lci0mR1NUX01BSk9STUlOT1I7IGd0aystMi4wYCAtbyBteXByb2cgbXlwcm9nLmMKKzwvcHJvZ3JhbWxpc3Rpbmc+CitUaG9zZSBhcmUgYmFjay10aWNrcyAob24gdGhlIHNhbWUga2V5IHdpdGggdGhlIHRpbGRlIG9uIFVTIGtleWJvYXJkcyksIAorbm90IHNpbmdsZSBxdW90ZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CitGb3IgYmlnZ2VyIHByb2plY3RzLCB5b3Ugc2hvdWxkIGludGVncmF0ZSBwa2ctY29uZmlnIHVzZSBpbiB5b3VyIE1ha2VmaWxlLAorb3IgaW50ZWdyYXRlIHdpdGggYXV0b2NvbmYgdXNpbmcgdGhlIHBrZy5tNCBtYWNybyAocHJvdmlkaW5nIFBLR19DT05GSUdfQ0hFQ0spLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgIDxxdWVzdGlvbiBpZD0iZGV2ZWxvcGluZy11bmluc3RhbGxlZC1nc3RyZWFtZXIiPgorICAgICAgICA8cGFyYT5Ib3cgZG8gSSBkZXZlbG9wIGFnYWluc3QgYW4gdW5pbnN0YWxsZWQgR1N0cmVhbWVyIGNvcHkgPzwvcGFyYT4KKyAgICAgIDwvcXVlc3Rpb24+CisKKyAgICAgIDxhbnN3ZXI+CisgICAgICAgIDxwYXJhPgorSXQgaXMgcG9zc2libGUgdG8gZGV2ZWxvcCBhbmQgY29tcGlsZSBhZ2FpbnN0IGFuIHVuaW5zdGFsbGVkIGNvcHkgb2YKK2dzdHJlYW1lciBhbmQgZ3N0LXBsdWdpbnMtKiAoZm9yIGV4YW1wbGUsIGFnYWluc3QgZ2l0cyBjaGVja291dHMpLgorVGhlIGVhc2llc3Qgd2F5IHRvIGRvIHRoaXMgaXMgdG8gdXNlIGEgYmFzaCBzY3JpcHQgbGlrZSAgdGhpczoKKzx1bGluayB1cmw9Imh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0cmVhbWVyL3RyZWUvc2NyaXB0cy9nc3QtdW5pbnN0YWxsZWQiPmxhdGVzdCB2ZXJzaW9uIG9mIGdzdC11bmluc3RhbGxlZDwvdWxpbms+LgorCitJZiB5b3UgcHV0IHRoaXMgc2NyaXB0IGluIHlvdXIgcGF0aCwgYW5kIHN5bWxpbmsgaXQgdG8gZ3N0LWdpdCAoaWYgeW91IHdhbnQKK3RvIGRldmVsb3AgYWdhaW5zdCBnaXQgbWFzdGVyKSBvciB0byBnc3QtcmVsZWFzZWQgKGlmIHlvdSB3YW50IHRvIGRldmVsb3AKK2FnYWluc3QgdGhlIGxhc3Rlc3QgcmVsZWFzZSBvZiBlYWNoIG1vZHVsZSksIGl0IHdpbGwgYXV0b21hdGljYWxseSB1c2UgdGhlCit1bmluc3RhbGxlZCB2ZXJzaW9uIGZyb20gdGhhdCBkaXJlY3RvcnkgKGllLiBnc3QtZ2l0IHdpbGwgbG9vayBmb3IgYSBkaXJlY3RvcnkKK2NhbGxlZCAnZ2l0JywgYW5kIGdzdC1yZWxlYXNlZCB3aWxsIGV4cGVjdCB0aGUgdW5pbnN0YWxsZWQgbW9kdWxlcyB0byBiZSBpbgordGhlICdyZWxlYXNlZCcgZGlyZWN0b3J5OyB5b3UgYXJlIGZyZWUgdG8gdXNlIGFueSBuYW1lIG9yIGlkZW50aWZpZXIgeW91IGxpa2UKK2hlcmUpLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorVGhpcyByZXF1aXJlcyB5b3UgdG8gaGF2ZSBwdXQgeW91ciBjaGVja291dHMgb2YgZ3N0cmVhbWVyIGFuZCBnc3QtcGx1Z2lucwordW5kZXIgfi9nc3QvZ2l0IChmb3IgdGhlIG1hc3RlciB2ZXJzaW9uKS4gIFRoZSBwcm9ncmFtIGlzIGVhc2lseSBtb2RpZmlhYmxlCitpZiB0aGlzIGlzbid0IHRoZSBjYXNlLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorQWZ0ZXIgcnVubmluZyB0aGlzIHNjcmlwdCwgeW91J2xsIGJlIGluIGFuIGVudmlyb25tZW50IHdoZXJlIHRoZSB1bmluc3RhbGxlZAordG9vbHMgYW5kIHBsdWdpbnMgd2lsbCBiZSB1c2VkIGJ5IGRlZmF1bHQuICBBbHNvLCBwa2ctY29uZmlnIHdpbGwgZGV0ZWN0IHRoZQordW5pbnN0YWxsZWQgY29waWVzIGJlZm9yZSAoYW5kIHByZWZlciB0aGVtIHRvKSBhbnkgaW5zdGFsbGVkIGNvcGllcy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICA8cXVlc3Rpb24gaWQ9ImRldmVsb3BpbmctZ2NvbmYiPgorICAgICAgICA8cGFyYT5Ib3cgY2FuIEkgdXNlIEdDb25mIHRvIGdldCB0aGUgc3lzdGVtLXdpZGUgZGVmYXVsdHMgPzwvcGFyYT4KKyAgICAgIDwvcXVlc3Rpb24+CisKKyAgICAgIDxhbnN3ZXI+CisgICAgICAgIDxwYXJhPgorRm9yIEdOT01FIGFwcGxpY2F0aW9ucyBpdCdzIGEgZ29vZCBpZGVhIHRvIHVzZSBHQ29uZiB0byBmaW5kIHRoZSBkZWZhdWx0IHdheXMKK29mIG91dHB1dHRpbmcgYXVkaW8gYW5kIHZpZGVvLiAgWW91IGNhbiBkbyB0aGlzIGJ5IHVzaW5nIHRoZSAnZ2NvbmZhdWRpb3NpbmsnCithbmQgJ2djb25mdmlkZW9zaW5rJyBlbGVtZW50cyBmb3IgYXVkaW8gYW5kIHZpZGVvIG91dHB1dC4gVGhleSB3aWxsIHRha2UKK2NhcmUgb2YgZXZlcnl0aGluZyBHQ29uZi1yZWxhdGVkIGZvciB5b3UgYW5kIGF1dG9tYXRpY2FsbHkgdXNlIHRoZSBvdXRwdXRzCit0aGF0IHRoZSB1c2VyIGNvbmZpZ3VyZWQuIElmIHlvdSBhcmUgdXNpbmcgZ2NvbmZhdWRpb3NpbmssIHlvdXIgYXBwbGljYXRpb24KK3Nob3VsZCBzZXQgdGhlICdwcm9maWxlJyBwcm9wZXJ0eS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICA8cXVlc3Rpb24gaWQ9ImRldmVsb3BpbmctbGlidG9vbC1zY3JpcHRzIj4KKyAgICAgICAgPHBhcmE+CitIb3cgZG8gSSBkZWJ1ZyB0aGVzZSBmdW5ueSBzaGVsbCBzY3JpcHRzIHRoYXQgbGlidG9vbCBtYWtlcyA/CisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvcXVlc3Rpb24+CisKKyAgICAgIDxhbnN3ZXI+CisgICAgICAgIDxwYXJhPgorV2hlbiB5b3UgbGluayBhIHByb2dyYW0gYWdhaW5zdCB1bmluc3RhbGxlZCBHU3RyZWFtZXIgdXNpbmcgbGlidG9vbCwgCitmdW5ueSBzaGVsbCBzY3JpcHRzIGFyZSBtYWRlIHRvIG1vZGlmeSB5b3VyIHNoYXJlZCBvYmplY3Qgc2VhcmNoIHBhdGggCithbmQgdGhlbiBydW4geW91ciBwcm9ncmFtLiBGb3IgaW5zdGFuY2UsIHRvIGRlYnVnIGdzdC1sYXVuY2gsIHRyeSAKKzxwcm9ncmFtbGlzdGluZz4KK2xpYnRvb2wgLS1tb2RlPWV4ZWN1dGUgZ2RiIC9wYXRoL3RvL2dzdC1sYXVuY2gKKzwvcHJvZ3JhbWxpc3Rpbmc+LiAKK0lmIHRoaXMgZG9lcyBub3Qgd29yaywgeW91J3JlIHByb2JhYmx5IHVzaW5nIGEgYnJva2VuIHZlcnNpb24gb2YgbGlidG9vbC4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgPHF1ZXN0aW9uIGlkPSJkZXZlbG9waW5nLW1haWwtZ3N0cmVhbWVyLWRldmVsIj4KKyAgICAgICAgPHBhcmE+V2h5IGlzIG1haWwgdHJhZmZpYyBzbyBsb3cgb24gZ3N0cmVhbWVyLWRldmVsID88L3BhcmE+CisgICAgICA8L3F1ZXN0aW9uPgorCisgICAgICA8YW5zd2VyPgorICAgICAgICA8cGFyYT4KK091ciBtYWluIGFyZW5hIGZvciBjb29yZGluYXRpb24gYW5kIGRpc2N1c3Npb24gaXMgSVJDLCBub3QgZW1haWwuIAorSm9pbiB1cyBpbiA8dWxpbmsgdXJsPSJpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNnc3RyZWFtZXIiPiNnc3RyZWFtZXIgb24gaXJjLmZyZWVub2RlLm5ldDwvdWxpbms+CitGb3IgbGFyZ2VyIHBpY3R1cmUgcXVlc3Rpb25zIG9yIGdldHRpbmcgbW9yZSBpbnB1dCBmcm9tIG1vcmUgcGVyc29ucywKK2EgbWFpbCB0byBnc3RyZWFtZXItZGV2ZWwgaXMgbmV2ZXIgYSBiYWQgaWRlYS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICA8cXVlc3Rpb24gaWQ9ImRldmVsb3BpbmctdmVyc2lvbmluZyI+CisgICAgICAgIDxwYXJhPldoYXQga2luZCBvZiB2ZXJzaW9uaW5nIHNjaGVtZSBkb2VzIEdTdHJlYW1lciB1c2UgPzwvcGFyYT4KKyAgICAgIDwvcXVlc3Rpb24+CisKKyAgICAgIDxhbnN3ZXI+CisgICAgICAgIDxwYXJhPgorRm9yIHB1YmxpYyByZWxlYXNlcywgR1N0cmVhbWVyIHVzZXMgYSBzdGFuZGFyZCBNQUpPUi5NSU5PUi5NSUNSTyB2ZXJzaW9uIAorc2NoZW1lLiAgSWYgdGhlIHJlbGVhc2UgY29uc2lzdHMgb2YgbW9zdGx5IGJ1ZyBmaXhlcyBvciBpbmNyZW1lbnRhbCBjaGFuZ2VzLCAKK3RoZSBNSUNSTyB2ZXJzaW9uIGlzIGluY3JlbWVudGVkLgorSWYgdGhlIHJlbGVhc2UgY29udGFpbnMgYmlnIGNoYW5nZXMsIHRoZSBNSU5PUiB2ZXJzaW9uIGlzIGluY3JlbWVudGVkLgorSWYgd2UncmUgcGFydGljdWxhcmx5IGdpZGR5LCB3ZSBtaWdodCBldmVuIGluY3JlYXNlIHRoZSBNQUpPUiBudW1iZXIuICAKK0Rvbid0IGhvbGQgeW91ciBicmVhdGggZm9yIHRoYXQgdGhvdWdoLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorRHVyaW5nIHRoZSBkZXZlbG9wbWVudCBjeWNsZSwgR1N0cmVhbWVyIGFsc28gdXNlcyBhIGZvdXJ0aCBvciBOQU5PIG51bWJlci4KK0lmIHRoaXMgbnVtYmVyIGlzIDEsIHRoZW4gaXQncyBhIGdpdCBkZXZlbG9wbWVudCB2ZXJzaW9uLiAgCitBbnkgdGFyYmFsbCBvciBwYWNrYWdlIHRoYXQgaGFzIGEgbmFubyBudW1iZXIgb2YgMSBpcyBtYWRlIGZyb20gZ2l0IGFuZCB0aHVzIAorbm90IHN1cHBvcnRlZC4gIEFkZGl0aW9uYWxseSwgaWYgeW91IGRpZG4ndCBnZXQgdGhpcyBwYWNrYWdlIG9yIHRhcmJhbGwgZnJvbQordGhlIEdTdHJlYW1lciB0ZWFtLCBkb24ndCBoYXZlIGhpZ2ggaG9wZXMgb24gaXQgZG9pbmcgd2hhdGV2ZXIgeW91IHdhbnQgaXQKK3RvIGRvLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorSWYgdGhlIG51bWJlciBpcyAyIG9yIGhpZ2hlciwgaXQncyBhbiBvZmZpY2lhbCBwcmUtcmVsZWFzZSBpbiBwcmVwYXJhdGlvbiAKK29mIGFuIGFjdHVhbCBjb21wbGV0ZSByZWxlYXNlLiAgWW91ciBoZWxwIGluIHRlc3RpbmcgdGhlc2UgdGFyYmFsbHMgYW5kCitwYWNrYWdlcyBpcyB2ZXJ5IG11Y2ggYXBwcmVjaWF0ZWQuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgPHF1ZXN0aW9uIGlkPSJkZXZlbG9waW5nLWNvZGluZy1zdHlsZSI+CisgICAgICAgIDxwYXJhPldoYXQgaXMgdGhlIGNvZGluZyBzdHlsZSBmb3IgR1N0cmVhbWVyIGNvZGU/PC9wYXJhPgorICAgICAgPC9xdWVzdGlvbj4KKworICAgICAgPGFuc3dlcj4KKyAgICAgICAgPHBhcmE+CitUaGUgY29yZSBhbmQgYWxtb3N0IGFsbCBwbHVnaW4gbW9kdWxlcyBhcmUgYmFzaWNhbGx5IGNvZGVkIGluIEsmYW1wO1Igd2l0aAorMi1zcGFjZSBpbmRlbnRpbmcuIEp1c3QgZm9sbG93IHdoYXQncyBhbHJlYWR5IHRoZXJlIGFuZCB5b3UnbGwgYmUgZmluZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KK0luZGl2aWR1YWwgcGx1Z2lucyBpbiBnc3QtcGx1Z2lucy0qIG9yIHBsdWdpbnMgdGhhdCB5b3Ugd2FudCBjb25zaWRlcmVkIGZvcgorYWRkaXRpb24gdG8gb25lIG9mIHRoZSBnc3QtcGx1Z2lucy0qIG1vZHVsZXMgc2hvdWxkIGJlIGNvZGVkIGluIHRoZSBzYW1lIHN0eWxlLgorSXQncyBlYXNpZXIgaWYgZXZlcnl0aGluZyBpcyBjb25zaXN0ZW50LiBDb25zaXN0ZW5jeSBpcywgb2YgY291cnNlLCB0aGUgZ29hbC4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CitTaW1wbHkgcnVuIHlvdXIgY29kZSAob25seSB0aGUgKi5jIGZpbGVzLCBub3QgdGhlIGhlYWRlciBmaWxlcykgdGhyb3VnaAorPHByb2dyYW1saXN0aW5nPgoraW5kZW50IFwKKyAgLS1icmFjZXMtb24taWYtbGluZSBcCisgIC0tY2FzZS1icmFjZS1pbmRlbnRhdGlvbjAgXAorICAtLWNhc2UtaW5kZW50YXRpb24yIFwKKyAgLS1icmFjZXMtYWZ0ZXItc3RydWN0LWRlY2wtbGluZSBcCisgIC0tbGluZS1sZW5ndGg4MCBcCisgIC0tbm8tdGFicyBcCisgIC0tY3VkZGxlLWVsc2UgXAorICAtLWRvbnQtbGluZS11cC1wYXJlbnRoZXNlcyBcCisgIC0tY29udGludWF0aW9uLWluZGVudGF0aW9uNCBcCisgIC0taG9ub3VyLW5ld2xpbmVzIFwKKyAgLS10YWItc2l6ZTggXAorICAtLWluZGVudC1sZXZlbDIKKzwvcHJvZ3JhbWxpc3Rpbmc+CitiZWZvcmUgc3VibWl0dGluZyBhIHBhdGNoLiAoVGhpcyBpcyB1c2luZyBHTlUgaW5kZW50LikgVGhlcmUgaXMgYWxzbyBhCitnc3QtaW5kZW50IHNjcmlwdCBpbiB0aGUgR1N0cmVhbWVyIGNvcmUgc291cmNlIHRyZWUgaW4gdGhlIHRvb2xzIGRpcmVjdG9yeQord2hpY2ggd3JhcHMgdGhpcyBhbmQgY29udGFpbnMgdGhlIGxhdGVzdCBvcHRpb24uIFRoZSBlYXNpZXN0IHdheSB0byBnZXQgdGhlCitpbmRlbnRpbmcgcmlnaHQgaXMgcHJvYmFibHkgdG8gZGV2ZWxvcCBhZ2FpbnN0IGEgZ2l0IGNoZWNrb3V0LiBUaGUgbG9jYWwKK2dpdCBjb21taXQgaG9vayB3aWxsIGVuc3VyZSBjb3JyZWN0IGluZGVudGF0aW9uLiBXZSBvbmx5IHJlcXVpcmUgY29kZSBmaWxlcyB0bworYmUgaW5kZW50ZWQsIGhlYWRlciBmaWxlcyBtYXkgYmUgaW5kZW50ZWQgbWFudWFsbHkgZm9yIGJldHRlciByZWFkYWJpbGl0eQorKGhvd2V2ZXIsIHBsZWFzZSB1c2Ugc3BhY2VzIGZvciBpbmRlbnRpbmcsIG5vdCB0YWJzLCBldmVuIGluIGhlYWRlciBmaWxlcykuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CitBcyBmb3IgdGhlIGNvZGUgaXRzZWxmLCB0aGUgCis8dWxpbmsgdXJsPSJodHRwOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9kb2MvZ3VpZGVzL3Byb2dyYW1taW5nLWd1aWRlbGluZXMvYm9vazEuaHRtbCI+R05PTUUgY29kaW5nIGd1aWRlbGluZXM8L3VsaW5rPiBpcyBhIGdvb2QgcmVhZC4KK1doZXJlIHBvc3NpYmxlLCB3ZSB0cnkgdG8gYWRoZXJlIHRvIHRoZSBzcGlyaXQgb2YgR09iamVjdCBhbmQgdXNlIHNpbWlsYXIKK2NvZGluZyBpZGlvbXMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CitQYXRjaGVzIHNob3VsZCBiZSBtYWRlIGFnYWluc3QgZ2l0IG1hc3RlciBvciB0aGUgbGF0ZXN0IHJlbGVhc2UgYW5kIHNob3VsZCBiZQoraW4gJ3VuaWZpZWQgY29udGV4dCcgZm9ybWF0ICh1c2UgZGlmZiAtdSAtcCkuIFRoZXkgc2hvdWxkIGJlIGF0dGFjaGVkIHRvCithIGJ1ZyByZXBvcnQgKG9yIGZlYXR1cmUgcmVxdWVzdCkgaW4KKzx1bGluayB1cmw9Imh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmciPmJ1Z3ppbGxhPC91bGluaz4gcmF0aGVyIHRoYW4KK3NlbnQgdG8gdGhlIG1haWxpbmcgbGlzdC4gQWxzbyBzZWUKKzx1bGluayB1cmw9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU3VibWl0dGluZ1BhdGNoZXMiPlN1Ym1pdHRpbmdQYXRjaGVzPC91bGluaz4KK2luIHRoZSBHU3RyZWFtZXIgd2lraS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorICAgIDxxYW5kYWVudHJ5PgorICAgIDxxdWVzdGlvbiBpZD0iZGV2ZWxvcGluZy10cmFuc2xhdGlvbnMiPgorICAgIDxwYXJhPkkgaGF2ZSB0cmFuc2xhdGVkIG9uZSBvZiB0aGUgbW9kdWxlIC5wbyBmaWxlcyBpbnRvIGEgbmV3IGxhbmd1YWdlLiBIb3cgZG8gSSBnZXQgaXQgaW5jbHVkZWQ/PC9wYXJhPgorICAgIDwvcXVlc3Rpb24+CisgICAgPGFuc3dlcj4KKyAgICA8cGFyYT5HU3RyZWFtZXIgdHJhbnNsYXRpb25zIGFyZSB1bmlmb3JtbHkgbWFuYWdlZCB0aHJvdWdoIHRoZSBUcmFuc2xhdGlvbiBQcm9qZWN0IChodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZykuIFRoZXJlIGFyZSBzb21lIGluc3RydWN0aW9ucyBvbiBob3cgdG8gam9pbiB0aGUgVHJhbnNsYXRpb24gUHJvamVjdCB0ZWFtIGFuZCBzdWJtaXQgbmV3IHRyYW5zbGF0aW9ucyBhdCBodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy9odG1sL3RyYW5zbGF0b3JzLmh0bWwuPC9wYXJhPgorICAgIDxwYXJhPk5ldyB0cmFuc2xhdGlvbnMgc3VibWl0dGVkIHZpYSB0aGUgVHJhbnNsYXRpb24gUHJvamVjdCBhcmUgbWVyZ2VkIHBlcmlvZGljYWxseSBpbnRvIGdpdCBieSB0aGUgbWFpbnRhaW5lcnMgYnkgcnVubmluZyAnbWFrZSBkb3dubG9hZC1wbycgaW4gdGhlIHZhcmlvdXMgbW9kdWxlcy48L3BhcmE+CisgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorICA8L3FhbmRhc2V0PgorPC9zZWN0MT4KZGlmZiAtLWdpdCBhL2RvY3MvZmFxL2ZhcS54bWwgYi9kb2NzL2ZhcS9mYXEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MWFiZDEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2ZhcS9mYXEueG1sCkBAIC0wLDAgKzEsNzggQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGFydGljbGUgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorICAgICAgICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiIFsKKworPCFFTlRJVFkgJSBpbWFnZS1lbnRpdGllcyBTWVNURU0gImltYWdlLmVudGl0aWVzIj4KKyVpbWFnZS1lbnRpdGllczsKKzwhRU5USVRZICUgdmVyc2lvbi1lbnRpdGllcyBTWVNURU0gInZlcnNpb24uZW50aXRpZXMiPgorJXZlcnNpb24tZW50aXRpZXM7CisKKzwhRU5USVRZIFNUQVJUIFNZU1RFTSAic3RhcnQueG1sIj4KKzwhRU5USVRZIEdFTkVSQUwgU1lTVEVNICJnZW5lcmFsLnhtbCI+Cis8IUVOVElUWSBERVBFTkRFTkNJRVMgU1lTVEVNICJkZXBlbmRlbmNpZXMueG1sIj4KKworPCFFTlRJVFkgR0VUVElORyBTWVNURU0gImdldHRpbmcueG1sIj4KKzwhRU5USVRZIFVTSU5HIFNZU1RFTSAidXNpbmcueG1sIj4KKzwhRU5USVRZIFRST1VCTEVTSE9PVElORyBTWVNURU0gInRyb3VibGVzaG9vdGluZy54bWwiPgorCis8IUVOVElUWSBHSVQgU1lTVEVNICJnaXQueG1sIj4KKzwhRU5USVRZIERFVkVMT1BJTkcgU1lTVEVNICJkZXZlbG9waW5nLnhtbCI+CisKKzwhRU5USVRZIExFR0FMIFNZU1RFTSAibGVnYWwueG1sIj4KK10+CisKKzxhcnRpY2xlIGNsYXNzPSJmYXEiIGlkPSJpbmRleCI+CisgIDxhcnRpY2xlaW5mbz4KKyAgICA8dGl0bGU+R1N0cmVhbWVyIEZBUSAoJkdTVF9WRVJTSU9OOyk8L3RpdGxlPgorICAgIDxhYnN0cmFjdD4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGlzIHRoZSBGQVEgZm9yIEdTdHJlYW1lciwgYSBtdWx0aW1lZGlhIGZyYW1ld29yay4KKyAgICAgICAgUXVlc3Rpb25zIGFuZCBhbnN3ZXJzIHJhbmdlIGZyb20gZ2VuZXJhbCBpbmZvcm1hdGlvbiB0bworICAgICAgICBkZWVwLWRvd24tYW5kLWRpcnR5IGNvbXBpbGF0aW9uIGlzc3Vlcy4KKyAgICAgIDwvcGFyYT4KKyAgICA8L2Fic3RyYWN0PgorCis8IS0tCisgICAgPHJldmhpc3Rvcnk+CisgICAgICA8cmV2aXNpb24+CisgICAgICAgIDxyZXZudW1iZXI+MC4yLjE8L3Jldm51bWJlcj4KKyAgICAgICAgPGRhdGU+MjAwNi0wNS0xOTwvZGF0ZT4KKyAgICAgICAgPHJldnJlbWFyaz5Tb21lIHVwZGF0ZXMgZm9yIEdTdHJlYW1lci0wLjEwPC9yZXZyZW1hcms+CisgICAgICA8L3JldmlzaW9uPgorCisgICAgICA8cmV2aXNpb24+CisgICAgICAgIDxyZXZudW1iZXI+MC4yLjA8L3Jldm51bWJlcj4KKyAgICAgICAgPGRhdGU+MjAwNi0wMy0xNjwvZGF0ZT4KKyAgICAgICAgPHJldnJlbWFyaz5SZXZpZXcgYW5kIHVwZGF0ZSB3aG9sZSBkb2N1bWVudC48L3JldnJlbWFyaz4KKyAgICAgIDwvcmV2aXNpb24+CisKKyAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgPHJldm51bWJlcj4wLjEuMTwvcmV2bnVtYmVyPgorICAgICAgICA8ZGF0ZT4yMDAzLTA0LTI0PC9kYXRlPgorICAgICAgICA8cmV2cmVtYXJrPkFkZGVkIFEmYW1wO0EgYWJvdXQgZGV2ZWxvcGluZyB3aXRoIHVuaW5zdGFsbGVkIGNvcHkuPC9yZXZyZW1hcms+CisgICAgICA8L3JldmlzaW9uPgorCisgICAgICA8cmV2aXNpb24+CisgICAgICAgIDxyZXZudW1iZXI+MC4xLjA8L3Jldm51bWJlcj4KKyAgICAgICAgPGRhdGU+MjAwMi0xMC0wMTwvZGF0ZT4KKyAgICAgICAgPHJldnJlbWFyaz5Jbml0aWFsIGNvbnZlcnNpb24gZnJvbSBGQVEgZGF0YWJhc2UuPC9yZXZyZW1hcms+CisgICAgICA8L3JldmlzaW9uPgorICAgIDwvcmV2aGlzdG9yeT4KKy0tPgorCisgIDwvYXJ0aWNsZWluZm8+CisKKyAgJlNUQVJUOworICAmR0VORVJBTDsKKyAgJkRFUEVOREVOQ0lFUzsKKworICAmR0VUVElORzsKKyAgJlVTSU5HOworICAmVFJPVUJMRVNIT09USU5HOworCisgICZHSVQ7CisgICZERVZFTE9QSU5HOworCisgICZMRUdBTDsKKworPC9hcnRpY2xlPgpkaWZmIC0tZ2l0IGEvZG9jcy9mYXEvZ2VuZXJhbC54bWwgYi9kb2NzL2ZhcS9nZW5lcmFsLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmNjYjZhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9mYXEvZ2VuZXJhbC54bWwKQEAgLTAsMCArMSwyMTMgQEAKKzxzZWN0MSBpZD0iY2hhcHRlci1nZW5lcmFsIj4KKyAgPHRpdGxlIGlkPSJ0aXRsZS1nZW5lcmFsIj5HZW5lcmFsPC90aXRsZT4KKyAgPHFhbmRhc2V0IGRlZmF1bHRsYWJlbD0icWFuZGEiPgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICA8cXVlc3Rpb24gaWQ9ImdlbmVyYWwtbWVkaWEtcGxheWVyIj4KKyAgICAgICAgPHBhcmE+SXMgR1N0cmVhbWVyIGEgbWVkaWEgcGxheWVyID88L3BhcmE+CisgICAgICA8L3F1ZXN0aW9uPgorCisgICAgICA8YW5zd2VyPgorICAgICAgICA8cGFyYT4KK05vLCBHU3RyZWFtZXIgaXMgYSBkZXZlbG9wbWVudCBmcmFtZXdvcmsgZm9yIGNyZWF0aW5nIGFwcGxpY2F0aW9ucyBsaWtlIAorbWVkaWEgcGxheWVycywgdmlkZW8gZWRpdG9ycywgc3RyZWFtaW5nIG1lZGlhIGJyb2FkY2FzdGVycyBhbmQgc28gb24uIAorVGhhdCBzYWlkLCB2ZXJ5IGdvb2QgbWVkaWEgcGxheWVycyBjYW4gZWFzaWx5IGJlIGJ1aWx0IG9uIHRvcAorb2YgR1N0cmVhbWVyIGVzcGVjaWFsbHkgd2hlbiB1c2luZyB0aGUgaGlnaC1sZXZlbCBvYmplY3QgY2FsbGVkIHBsYXliaW4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgPHF1ZXN0aW9uIGlkPSJnZW5lcmFsLXdoeS1jIj4KKyAgICAgICAgPHBhcmE+CitXaHkgaXMgR1N0cmVhbWVyIHdyaXR0ZW4gaW4gQyA/IFdoeSBub3QgQysrL09iamVjdGl2ZS1DLy4uLiA/CisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvcXVlc3Rpb24+CisKKyAgICAgIDxhbnN3ZXI+CisgICAgICAgIDxwYXJhPgorV2UgbGlrZSBDLiBBc2lkZSBmcm9tICJwZXJzb25hbCBwcmVmZXJlbmNlIiwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHRlY2huaWNhbCAKK3JlYXNvbnMgd2h5IEMgaXMgbmljZSBpbiB0aGlzIHByb2plY3Q6Cis8aXRlbWl6ZWRsaXN0PgorPGxpc3RpdGVtPjxwYXJhPkMgaXMgZXh0cmVtZWx5IHBvcnRhYmxlLjwvcGFyYT48L2xpc3RpdGVtPgorPGxpc3RpdGVtPjxwYXJhPkMgaXMgZmFzdC48L3BhcmE+PC9saXN0aXRlbT4KKzxsaXN0aXRlbT48cGFyYT5JdCBpcyBlYXN5IHRvIG1ha2UgbGFuZ3VhZ2UgYmluZGluZ3MgZm9yIGxpYnJhcmllcyB3cml0dGVuIGluIEMuCis8L3BhcmE+PC9saXN0aXRlbT4KKzxsaXN0aXRlbT48cGFyYT5UaGUgR09iamVjdCBvYmplY3Qgc3lzdGVtIHByb3ZpZGVkIGJ5IEdMaWIgaW1wbGVtZW50cyBvYmplY3RzIGluIEMsIAoraW4gYSBwb3J0YWJsZSwgcG93ZXJmdWwgd2F5LiBUaGlzIGxpYnJhcnkgcHJvdmlkZXMgZm9yIGludHJvc3BlY3Rpb24gYW5kIAorcnVudGltZSBkeW5hbWljIHR5cGluZy4gSXQgaXMgYSBmdWxsIE9PIHN5c3RlbSwgYnV0IHdpdGhvdXQgdGhlIHN5bnRhY3RpYyAKK3N1Z2FyLiBJZiB5b3Ugd2FudCBzdWdhciwgdGFrZSBhIGxvb2sgYXQgCis8dWxpbmsgdXJsPSJodHRwOi8vbGl2ZS5nbm9tZS5vcmcvVmFsYSI+VmFsYTwvdWxpbms+LjwvcGFyYT48L2xpc3RpdGVtPgorPGxpc3RpdGVtPjxwYXJhPlVzZSBvZiBDIGludGVncmF0ZXMgbmljZWx5IHdpdGggR3RrKyBhbmQgR05PTUUuIFNvbWUgcGVvcGxlIGxpa2UgCit0aGlzIGEgbG90LCBidXQgbmVpdGhlciBHdGsrIG5vciBHTk9NRSBhcmUgcmVxdWlyZWQgYnkgR1N0cmVhbWVyLjwvcGFyYT48L2xpc3RpdGVtPgorPC9pdGVtaXplZGxpc3Q+Cis8L3BhcmE+Cis8cGFyYT4KK1NvLCBpbiBjbG9zaW5nLCB3ZSBsaWtlIEMuIElmIHlvdSBkb24ndCwgdGhhdCdzIGZpbmU7IGlmIHlvdSBzdGlsbCB3YW50IHRvIAoraGVscCBvdXQgb24gR1N0cmVhbWVyLCB3ZSBhbHdheXMgbmVlZCBtb3JlIGxhbmd1YWdlIGJpbmRpbmcgcGVvcGxlLiBBbmQgaWYgCitub3QsIGRvbid0IGJvdGhlciB1czsgd2UncmUgd29ya2luZyA6LSkKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICA8cXVlc3Rpb24gaWQ9ImdlbmVyYWwtYXBwbGljYXRpb25zIj4KKyAgICAgICAgPHBhcmE+V2hhdCBhcHBsaWNhdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgR1N0cmVhbWVyID88L3BhcmE+CisgICAgICA8L3F1ZXN0aW9uPgorICAgICAgPGFuc3dlcj4KKyAgICAgICAgPHBhcmE+CitNYW55IG1lZGlhIHBsYXllciBhcHBsaWNhdGlvbnMgaGF2ZSBjaG9zZW4gR1N0cmVhbWVyIGZvciB0aGVpciBiYWNrZW5kLiAKK0Fsc28gYSBjb3VwbGUgb2YgbWVkaWEgZm9ybWF0IGNvbnZlcnNpb24gdG9vbHMgaGF2ZSBiZWVuIHdyaXR0ZW4gdXNpbmcgdGhlIHBvd2VycyBvZiBHU3RyZWFtZXIuCitXaXRoIHRoZSBhZHZlbnQgb2YgR1N0cmVhbWVyLTAuMTAgc2V2ZXJhbCBtZWRpYSBlZGl0aW5nIGFwcGxpY2F0aW9ucyBoYXZlIGJlZW4gc3RhcnRlZC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KK0ZvciBhIGxpc3Qgb2YgcHJvamVjdHMsIGxvb2sgYXQgdGhlCis8dWxpbmsgdXJsPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9hcHBzLyI+YXBwbGljYXRpb24gbGlzdDwvdWxpbms+CitvbiB0aGUgR1N0cmVhbWVyIHByb2plY3Qgd2Vic2l0ZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICA8cXVlc3Rpb24gaWQ9ImdlbmVyYWwtZm9ybWF0Ij4KKwk8cGFyYT5Eb2VzIEdTdHJlYW1lciBzdXBwb3J0IHRoZSBmb3JtYXQgb2YgbXkgbWVkaWEgZmlsZXM/PC9wYXJhPgorICAgICAgPC9xdWVzdGlvbj4KKyAgICAgIDxhbnN3ZXI+CisJPHBhcmE+CitHU3RyZWFtZXIgYWltcyB0byBzdXBwb3J0IGV2ZXJ5IGZvcm1hdCBpbWFnaW5hYmxlLCBidXQgdGhhdCBkb2Vzbid0IG1lYW4gdGhlIAorZGV2ZWxvcGVycyBoYXZlIG1hbmFnZWQgdG8gYWNoaWV2ZSB0aGF0IGFpbSB5ZXQuIElmIGEgR1N0cmVhbWVyIGVuYWJsZWQgCithcHBsaWNhdGlvbiBkb2Vzbid0IHBsYXkgYmFjayB5b3VyIGZpbGVzLCB5b3UgY2FuIGhlbHAgdXMgc29sdmUgdGhhdCBwcm9ibGVtCitieSA8dWxpbmsgdXJsPSJodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnIj5maWxpbmcgYW4gZW5oYW5jZW1lbnQgcmVxdWVzdAorYnVnPC91bGluaz4gZm9yIHRoYXQgZm9ybWF0LiBJZiB5b3UgaGF2ZSBpdCwgcGxlYXNlIHByb3ZpZGU6IAorPGl0ZW1pemVkbGlzdD4KKyAgPGxpc3RpdGVtPjxwYXJhPmxpbmtzIHRvIG90aGVyIHBsYXllcnMsIHByZWZlcmFibHkgT3BlbiBTb3VyY2UgYW5kIHdvcmtpbmcKKyAgb24gVW5peDwvcGFyYT48L2xpc3RpdGVtPgorICA8bGlzdGl0ZW0+PHBhcmE+bGlua3MgdG8gZXhwbGFuYXRpb25zIG9mIHRoZSBmb3JtYXQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgIDxsaXN0aXRlbT48cGFyYT53YXlzIHRvIG9idGFpbiBtZWRpYWZpbGVzIGluIHRoYXQgZm9ybWF0IHRvIHRlc3QuCisgIDwvcGFyYT48L2xpc3RpdGVtPgorPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgPHF1ZXN0aW9uIGlkPSJnZW5lcmFsLWxpY2Vuc2luZyI+CisgICAgICAgIDxwYXJhPgorV2hhdCBhcmUgdGhlIGV4YWN0IGxpY2Vuc2luZyB0ZXJtcyBmb3IgR1N0cmVhbWVyIGFuZCBpdHMgcGx1Z2lucyA/CisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvcXVlc3Rpb24+CisgICAgICA8YW5zd2VyPgorICAgICAgICA8cGFyYT4KK0FsbCBvZiBHU3RyZWFtZXIsIGluY2x1ZGluZyBvdXIgb3duIHBsdWdpbiBjb2RlLCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgCis8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGdwbC5odG1sIj5HTlUgTEdQTDwvdWxpbms+IGxpY2Vuc2UuCitTb21lIG9mIHRoZSBsaWJyYXJpZXMgd2UgdXNlIGZvciBzb21lIG9mIHRoZSBwbHVnaW5zIGFyZSBob3dldmVyIHVuZGVyIHRoZSAKK0dQTCwgd2hpY2ggbWVhbnMgdGhhdCB0aG9zZSBwbHVnaW5zIGNhbiBub3QgYmUgdXNlZCBieSBhIG5vbi1HUEwtY29tcGF0aWJsZSAKK2FwcGxpY2F0aW9uLiAKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KK0FzIHBhcnQgb2YgdGhlIEdTdHJlYW1lciBzb3VyY2UgZG93bmxvYWQgeW91IGZpbmQgYSBmaWxlIGNhbGxlZCAKK0xJQ0VOU0VfcmVhZG1lIGluIGdzdC1wbHVnaW5zIHBhY2thZ2UuIFRoYXQgZmlsZSBjb250YWlucyBpbmZvcm1hdGlvbiBpbiB0aGUgZXhhY3QgbGljZW5zaW5nIAordGVybXMgb2YgdGhlIGxpYnJhcmllcyB3ZSB1c2UuIEFzIGEgZ2VuZXJhbCBydWxlLCBHU3RyZWFtZXIgYWltcyBhdCB1c2luZyAKK29ubHkgTEdQTCBvciBCU0QgbGljZW5zZWQgbGlicmFyaWVzIGlmIGF2YWlsYWJsZSBhbmQgb25seSB1c2UgR1BMIG9yIAorcHJvcHJpZXRhcnkgbGlicmFyaWVzIHdoZXJlIG5vIGdvb2QgTEdQTCBvciBCU0QgYWx0ZXJuYXRpdmVzIGFyZSBhdmFpbGFibGUuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CitGcm9tIEdTdHJlYW1lciAwLjQuMiBvbiwgd2UgaW1wbGVtZW50ZWQgYSBsaWNlbnNlIGZpZWxkIGZvciBhbGwgb2YgdGhlIHBsdWdpbnMsCithbmQgaW4gdGhlIGZ1dHVyZSB3ZSBtaWdodCBoYXZlIHRoZSBhcHBsaWNhdGlvbiBlbmZvcmNlIGEgc3RyaWN0ZXIgcG9saWN5CisobXVjaCBsaWtlIHRhaW50aW5nIGluIHRoZSBrZXJuZWwpLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgIDxxdWVzdGlvbiBpZD0iZ2VuZXJhbC1zb3VuZC1zZXJ2ZXIiPgorICAgICAgICA8cGFyYT5JcyBHU3RyZWFtZXIgYSBzb3VuZCBzZXJ2ZXIgPzwvcGFyYT4KKyAgICAgIDwvcXVlc3Rpb24+CisgICAgICA8YW5zd2VyPgorICAgICAgICA8cGFyYT4KK05vLCBHU3RyZWFtZXIgaXMgbm90IGEgc291bmRzZXJ2ZXIuIEdTdHJlYW1lciBkb2VzIGhvd2V2ZXIgaGF2ZSBwbHVnaW5zCitzdXBwb3J0aW5nIG1vc3Qgb2YgdGhlIG1ham9yIHNvdW5kc2VydmVycyBhdmFpbGFibGUgdG9kYXksIGluY2x1ZGluZyAKK3B1bHNlYXVkaW8sIEVTRCwgYVJUU2QsIEphY2sgYW5kIG90aGVycy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICA8cXVlc3Rpb24gaWQ9ImdlbmVyYWwtcGxhdGZvcm1zIj4KKyAgICAgICAgPHBhcmE+CitXaWxsIEdTdHJlYW1lciBiZSBhdmFpbGFibGUgZm9yIHBsYXRmb3JtcyBvdGhlciB0aGFuIFVuaXggPworICAgICAgICA8L3BhcmE+CisgICAgICA8L3F1ZXN0aW9uPgorICAgICAgPGFuc3dlcj4KKyAgICAgICAgPHBhcmE+CitEZXBlbmRzLiBPdXIgbWFpbiB0YXJnZXQgaXMgdGhlIFVuaXggcGxhdGZvcm0uIEl0IGFsc28gd29ya3Mgb24gV2luMzIgYW5kIE1hYyBPUyBYLAorYnV0IGl0IG1heSBzdGlsbCBiZSBhIGJpdCBjaGFsbGVuZ2luZyB0byBnZXQgZXZlcnl0aGluZyB1cCBhbmQgcnVubmluZy4gIAorVGhhdCBzYWlkLCBpbnRlcmVzdCBoYXMgYmVlbiBleHByZXNzZWQgaW4gcG9ydGluZyBHU3RyZWFtZXIgdG8gb3RoZXIgcGxhdGZvcm1zIGFuZCB0aGUgR1N0cmVhbWVyIGNvcmUgCit0ZWFtIHdpbGwgZ2xhZGx5IGFjY2VwdCBwYXRjaGVzIHRvIGFjY29tcGxpc2ggdGhpcy4KKzwhLS0gUGxlYXNlIHJlZmVyIHRvIHRoZQorPHVsaW5rIHVybD0iaHR0cDovL2dzdHJlYW1lci5uZXQvc3RhdHVzLz9jYXRlZ29yeT03Ij4KK3BsYXRmb3JtIHN1cHBvcnQgc3RhdHVzIHRhYmxlPC91bGluaz4gLS0+CisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgPHF1ZXN0aW9uIGlkPSJnZW5lcmFsLWdub21lIj4KKyAgICAgICAgPHBhcmE+V2hhdCBpcyBHU3RyZWFtZXIncyByZWxhdGlvbnNoaXAgd2l0aCB0aGUgR05PTUUgY29tbXVuaXR5ID88L3BhcmE+CisgICAgICA8L3F1ZXN0aW9uPgorICAgICAgPGFuc3dlcj4KKyAgICAgICAgPHBhcmE+CitXaGlsZSBHU3RyZWFtZXIgaXMgb3BlcmF0ZWQgYXMgYW4gaW5kZXBlbmRlbnQgcHJvamVjdCwgd2UgZG8gaGF2ZSBhIGNsb3NlIAorcmVsYXRpb25zaGlwIHdpdGggdGhlIEdOT01FIGNvbW11bml0eS4gTWFueSBvZiBvdXIgaGFja2VycyBjb25zaWRlciAKK3RoZW1zZWx2ZXMgYWxzbyB0byBiZSBtZW1iZXJzIG9mIHRoZSBHTk9NRSBjb21tdW5pdHkuCitHU3RyZWFtZXIgaXMgb2ZmaWNpYWx5IGJ1bmRsZWQgd2l0aCB0aGUgR05PTUUgZGVza3RvcCwgYXMgbG90cyBvZiBwYWNrYWdlcworKGxpa2UgZ25vbWUtbWVkaWEsIHRvdGVtIGFuZCByaHl0aG1ib3gpIGFyZSB1c2luZyBpdC4KK1RoaXMgZG9lcyBub3QgZXhjbHVkZSB1c2Ugb2YgR1N0cmVhbWVyIGJ5IG90aGVyIGNvbW11bml0aWVzIGF0IGFsbCwgb2YgY291cnNlLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgIDxxdWVzdGlvbiBpZD0iZ2VuZXJhbC1rZGUiPgorICAgICAgICA8cGFyYT5XaGF0IGlzIEdTdHJlYW1lcidzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBLREUgY29tbXVuaXR5ID88L3BhcmE+CisgICAgICA8L3F1ZXN0aW9uPgorICAgICAgPGFuc3dlcj4KKyAgICAgICAgPHBhcmE+CitUaGUgR1N0cmVhbWVyIGNvbW11bml0eSB3YW50cyB0byBoYXZlIGFzIGdvb2QgYSByZWxhdGlvbnNoaXAgYXMgcG9zc2libGUgCit3aXRoIEtERSwgYW5kIHdlIGhvcGUgdGhhdCBzb21lZGF5IEtERSBkZWNpZGVzIHRvIGFkb3B0IEdTdHJlYW1lciBhcyB0aGVpciAKK211bHRpbWVkaWEgQVBJIChwbGFubmVkIGZvciBLREUgNCkuIAorVGhlcmUgaGF2ZSBiZWVuIGNvbnRhY3RzIGZyb20gdGltZSB0byB0aW1lIGJldHdlZW4gdGhlIEdTdHJlYW1lciBjb21tdW5pdHkgCithbmQgS0RFIGFuZCB3ZSBkbyBhbHJlYWR5IGhhdmUgc3VwcG9ydCBmb3IgdGhlIGFSVFNkIHNvdW5kIHNlcnZlciB1c2VkIGJ5IEtERS4KK0Fsc28sIHNvbWUgb2YgdGhlIEtERSBoYWNrZXJzIGhhdmUgY3JlYXRlZCBRdCBiaW5kaW5ncyBvZiBHU3RyZWFtZXIsIAorbWFkZSBhIHNpbXBsZSB2aWRlbyBwbGF5ZXIgYW5kIHVzaW5nIGl0IGluIHNvbWUgYXVkaW8gcGxheWVycyAoSnVLIGFuZCBBbWFyb0spLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgIDxxdWVzdGlvbiBpZD0iZ2VuZXJhbC1teS1hcHBsaWNhdGlvbiI+CisgICAgICAgIDxwYXJhPgorSSdtIGNvbnNpZGVyaW5nIGFkZGluZyBHU3RyZWFtZXIgb3V0cHV0IHRvIG15IGFwcGxpY2F0aW9uLi4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvcXVlc3Rpb24+CisKKyAgICAgIDxhbnN3ZXI+CisgICAgICAgIDxwYXJhPgorVGhhdCBkb2Vzbid0IHJlYWxseSBtYWtlIHNlbnNlLiBHU3RyZWFtZXIgaXMgbm90IGEgc291bmQgc2VydmVyLCBzbyB5b3UgZG9uJ3QgCitvdXRwdXQgZGlyZWN0bHkgdG8gR1N0cmVhbWVyLCBhbmQgaXQncyBub3QgYW4gaW50ZXJtZWRpYXRlIEFQSSBiZXR3ZWVuIAorYXVkaW8gZGF0YSBhbmQgZGlmZmVyZW50IGtpbmRzIG9mIGF1ZGlvIHNpbmtzLiBJdCBpcyBhIGZ1bmRhbWVudGFsIGRlc2lnbiAKK2RlY2lzaW9uIHRvIHVzZSBHU3RyZWFtZXIgaW4geW91ciBhcHA7IHRoZXJlIGFyZSBubyBlYXN5IHdheXMgb2Ygc29tZWhvdyAKKyd0cmFuc2ZlcmluZycgZGF0YSBmcm9tIHlvdXIgYXBwIHRvIEdTdHJlYW1lci4gSW5zdGVhZCwgeW91ciBhcHAgd291bGQgaGF2ZSAKK3RvIHVzZSBvciBpbXBsZW1lbnQgYSBudW1iZXIgb2YgR1N0cmVhbWVyIGVsZW1lbnRzLCBzdHJpbmcgdGhlbSB0b2dldGhlciwgYW5kIAordGVsbCB0aGVtIHRvIHJ1bi4gSW4gdGhhdCBtYW5uZXIgdGhlIGRhdGEgd291bGQgYWxsIGJlIGludGVybmFsIHRvIHRoZSAKK0dTdHJlYW1lciBwaXBlbGluZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KK1RoYXQgc2FpZCwgaXQgaXMgcG9zc2libGUgdG8gd3JpdGUgYSBwbHVnaW4gc3BlY2lmaWMgdG8geW91ciBhcHAgdGhhdCBjYW4gZ2V0CithdCB0aGUgYXVkaW8gZGF0YS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorICA8L3FhbmRhc2V0PgorCis8L3NlY3QxPgpkaWZmIC0tZ2l0IGEvZG9jcy9mYXEvZ2V0dGluZy54bWwgYi9kb2NzL2ZhcS9nZXR0aW5nLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTI0NmFhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9mYXEvZ2V0dGluZy54bWwKQEAgLTAsMCArMSwxNzAgQEAKKzxzZWN0MSBpZD0iY2hhcHRlci1nZXR0aW5nIj4KKyAgPHRpdGxlIGlkPSJ0aXRsZS1nZXR0aW5nIj5HZXR0aW5nIEdTdHJlYW1lcjwvdGl0bGU+CisgIDxxYW5kYXNldCBkZWZhdWx0bGFiZWw9InFhbmRhIj4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgPHF1ZXN0aW9uIGlkPSJnZXR0aW5nLWdzdHJlYW1lciI+CisgICAgICAgIDxwYXJhPkhvdyBkbyBJIGdldCBHU3RyZWFtZXIgPzwvcGFyYT4KKyAgICAgIDwvcXVlc3Rpb24+CisKKyAgICAgIDxhbnN3ZXI+CisgICAgICAgIDxwYXJhPgorR2VuZXJhbGx5IHNwZWFraW5nLCB5b3UgaGF2ZSB0aHJlZSBvcHRpb25zLCByYW5naW5nIGZyb20gZWFzeSB0byBoYXJkIDoKKzxpdGVtaXplZGxpc3Q+Cis8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iZ2V0dGluZy1nc3RyZWFtZXItcGFja2FnZXMiPgorZGlzdHJpYnV0aW9uLXNwZWNpZmljIHBhY2thZ2VzPC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9ImdldHRpbmctZ3N0cmVhbWVyLXNvdXJjZSI+Citzb3VyY2UgdGFyYmFsbHM8L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iZ2V0dGluZy1nc3RyZWFtZXItcGFja2FnZXMiPgorZ2l0PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgPHFhbmRhZW50cnk+CisgICAgICA8cXVlc3Rpb24gaWQ9ImdzdHJlYW1lci12ZXJzaW9ucy1leHBsYWluZWQiPgorICAgICAgICA8cGFyYT5UaGVyZSBzZWVtIHRvIGJlIGRpZmZlcmVudCBHU3RyZWFtZXIgdmVyc2lvbnMsIGxpa2UgMC44IGFuZCAwLjEwPworICAgICAgICAgICAgICBXaGF0J3MgdXAgd2l0aCB0aGF0PzwvcGFyYT4KKyAgICAgIDwvcXVlc3Rpb24+CisKKyAgICAgIDxhbnN3ZXI+CisgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgR1N0cmVhbWVyLTAuOCBhbmQgR1N0cmVhbWVyLTAuMTAgYXJlIHRoZSBtYWluIHZlcnNpb24KKyAgICAgICAgICAgJmFwb3M7c2VyaWVzJmFwb3M7IGN1cnJlbnRseSBpbiB1c2UuICBGb3IgYWxsIHByYWN0aWNhbCBwdXJwb3NlcworICAgICAgICAgICB5b3Ugc2hvdWxkIHRoaW5rIG9mIHRoZW0gYXMgdHdvIGNvbXBsZXRlbHkgZGlmZmVyZW50IGxpYnJhcmllcworICAgICAgICAgICB3aGljaCBqdXN0IGhhcHBlbiB0byBoYXZlIGEgc2ltaWxhciBuYW1lLiAgVGhleSBjYW4gYmUgaW5zdGFsbGVkCisgICAgICAgICAgIGluIHBhcmFsbGVsIGFuZCBhcmUgY29tcGxldGVseSBpbmRlcGVuZGVudC4KKyAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBGb3IgdGhlIDAuOCB2ZXJzaW9uIHlvdSB3aWxsIG5lZWQgdGhlIDAuOCBwbHVnaW5zIGFuZCBiaW5kaW5ncworICAgICAgICAgICAoZ3N0LXBsdWdpbnMgMC44LngsIGdzdC1mZm1wZWcgMC44LngsIGdzdC1weXRob24gMC44LnggZXRjLiksIHdoaWxlCisgICAgICAgICAgIGZvciB0aGUgMC4xMCB2ZXJzaW9uIHlvdSB3aWxsIG5lZWQgdGhlIDAuMTAgcGx1Z2lucyBhbmQgYmluZGluZ3MKKyAgICAgICAgICAgKGllLiBnc3QtcGx1Z2lucy1iYXNlIDAuMTAueCwgZ3N0LXBsdWdpbnMtZ29vZCAwLjEwLngsCisgICAgICAgICAgIGdzdC1wbHVnaW5zLXVnbHkgMC4xMC54LCBnc3QtcGx1Z2lucy1iYWQgMC4xMC54LCBnc3QtZmZtcGVnIDAuMTAueCwKKyAgICAgICAgICAgZ3N0LXB5dGhvbiAwLjEwLngpLiAgVGhlIG1pY3JvIHZlcnNpb24gZm9yIGVhY2ggbWFpbiB2ZXJzaW9uIGRvZXMKKyAgICAgICAgICAgbm90IGhhdmUgdG8gbWF0Y2ggZXhhY3RseSwgb25seSB0aGUgbWFqb3IgdmVyc2lvbnMgbmVlZHMgdG8gYmUgdGhlCisgICAgICAgICAgIHNhbWUgKGllLiBpdCBtYXkgYmUgdGhhdCB0aGUgY3VycmVudCBnc3QtcGx1Z2lucy1nb29kIHZlcnNpb24gaXMKKyAgICAgICAgICAgMC4xMC42IGFuZCB0aGUgY3VycmVudCBHU3RyZWFtZXIgY29yZSB2ZXJzaW9uIGlzIDAuMTAuMTMpLgorICAgICAgICAgICBHU3RyZWFtZXItMC4xMCB3aWxsIG5vdCBzZWUgb3IgdXNlIGFueSBvZiB0aGUgR1N0cmVhbWVyLTAuOCBwbHVnaW5zCisgICAgICAgICAgIGFuZCB2aWNlIHZlcnNhLgorICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIEFsbCBHU3RyZWFtZXIgY29tbWFuZCBsaW5lIHRvb2xzIGFyZSBzdWZmaXhlZCB3aXRoIHRoZWlyIG1haW4KKyAgICAgICAgICAgdmVyc2lvbiwgZS5nLiBnc3QtbGF1bmNoLTAuOCBhbmQgZ3N0LWxhdW5jaC0wLjEwLCBvciBnc3QtaW5zcGVjdC0wLjgKKyAgICAgICAgICAgYW5kIGdzdC1pbnNwZWN0LTAuMTAuICBUaGUgY29ycmVzcG9uZGluZyBHU3RyZWFtZXIgY29tbWFuZCBsaW5lCisgICAgICAgICAgIHRvb2xzIHdpdGhvdXQgYSBzdWZmaXggKGUuZy4gZ3N0LWxhdW5jaCkgd2lsbCBkZWZhdWx0IHRvIHRoZSBoaWdoZXN0CisgICAgICAgICAgIG1ham9yIHZlcnNpb24uCisgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgQXBwbGljYXRpb25zIHdpbGwgdXNlIGVpdGhlciBHU3RyZWFtZXItMC44IG9yIEdTdHJlYW1lci0wLjEwLCBzaW5jZQorICAgICAgICAgICB0aGUgMC44IGFuZCAwLjEwIEFQSS9BQkkgYXJlIG5vdCBjb21wYXRpYmxlLgorICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE9kZC1udW1iZXJlZCB2ZXJzaW9ucyBzdWNoIGFzIDAuOS54LCAwLjExLngsIGV0Yy4gYXJlIHVuc3RhYmxlCisgICAgICAgICAgIGRldmVsb3BlciByZWxlYXNlcyB0aGF0IHNob3VsZCBnZW5lcmFsbHkgbm90IGJlIHVzZWQuCisgICAgICAgICA8L3BhcmE+CisgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgIDxxYW5kYWVudHJ5PgorICAgICAgPHF1ZXN0aW9uIGlkPSJnc3RyZWFtZXItdmVyc2lvbnMtd2hpY2gtb25lLXRvLWdldCI+CisgICAgICAgIDxwYXJhPlNvIHdoaWNoIEdTdHJlYW1lciB2ZXJzaW9uIHNob3VsZCBJIGdldD88L3BhcmE+CisgICAgICA8L3F1ZXN0aW9uPgorCisgICAgICA8YW5zd2VyPgorICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIFlvdSBzaG91bGQgZG93bmxvYWQgR1N0cmVhbWVyLTAuMTAuICBHU3RyZWFtZXItMC44IGlzIG5vdCBkZXZlbG9wZWQKKyAgICAgICAgICAgYW55IGxvbmdlciBhbmQgaGFzIG5vdCBiZWVuIG1haW50YWluZWQgZm9yIGFsbW9zdCB0d28geWVhcnMgKHlvdQorICAgICAgICAgICBtYXkgc3RpbGwgZmluZCBpdCBwYWNrYWdlZCBmb3IgeW91ciBkaXN0byB0aG91Z2gsIGJ1dCB0aGF0J3MgbW9zdAorICAgICAgICAgICBsaWtlbHkgZm9yIGxlZ2FjeSBhcHBsaWNhdGlvbnMpLiAgICAgICAgICAgCisgICAgICAgICA8L3BhcmE+CisgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgIDxxdWVzdGlvbiBpZD0iZ2V0dGluZy1nc3RyZWFtZXItc291cmNlIj4KKyAgICAgICAgPHBhcmE+SG93IGNhbiBJIGluc3RhbGwgR1N0cmVhbWVyIGZyb20gc291cmNlID88L3BhcmE+CisgICAgICA8L3F1ZXN0aW9uPgorCisgICAgICA8YW5zd2VyPgorICAgICAgICAgPHBhcmE+CitXZSBwcm92aWRlIHRhcmJhbGxzIG9mIG91ciByZWxlYXNlcyBvbiBvdXIgCis8IS0tIDx1bGluayB1cmw9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTE5MzYiPgorU291cmNlZm9yZ2UgZmlsZXMgcGFnZS48L3VsaW5rPgorICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPHBhcmE+CitXZSBhbHNvIHB1dCBzb3VyY2UgdGFyYmFsbHMgb24gb3VyIC0tPm93biBzaXRlLCBhdAorPHVsaW5rIHVybD0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjLyI+CitodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvCis8L3VsaW5rPgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorV2hlbiBjb21waWxpbmcgZnJvbSBzb3VyY2UsIG1ha2Ugc3VyZSB5b3Ugc3BlY2lmeSBQS0dfQ09ORklHX1BBVEggY29ycmVjdGx5Cit3aGVuIGJ1aWxkaW5nIGFnYWluc3QgR1N0cmVhbWVyLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBjb25maWd1cmVkIEdTdHJlYW1lcgord2l0aCB0aGUgZGVmYXVsdCBwcmVmaXggKHdoaWNoIGlzIC91c3IvbG9jYWwpLCB0aGVuIHlvdSBuZWVkIHRvCis8cHJvZ3JhbWxpc3Rpbmc+CitleHBvcnQgUEtHX0NPTkZJR19QQVRIPS91c3IvbG9jYWwvbGliL3BrZ2NvbmZpZworPC9wcm9ncmFtbGlzdGluZz4KK2JlZm9yZSBidWlsZGluZyBnc3QtcGx1Z2lucy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICA8cXVlc3Rpb24gaWQ9ImdldHRpbmctZ3N0cmVhbWVyLXBhY2thZ2VzIj4KKyAgICAgICAgPHBhcmE+QXJlIHRoZXJlIHByZW1hZGUgYmluYXJpZXMgYXZhaWxhYmxlID88L3BhcmE+CisgICAgICA8L3F1ZXN0aW9uPgorCisgICAgICA8YW5zd2VyPgorICAgICAgICA8cGFyYT4KKwlZZXMsIHdlIGN1cnJlbnRseSBwcm92aWRlIHByZWNvbXBpbGVkIHBhY2thZ2VzIGZvciBSZWQgSGF0LCBEZWJpYW4gYW5kIExpbnV4IE1hbmRyYWtlLiA8L3BhcmE+CisKKzxwYXJhPldlIHByb3ZpZGUgUlBNUyBmb3IgUmVkIEhhdCBhbmQgRmVkb3JhIENvcmUgdGhyb3VnaCBvdXIgPHVsaW5rIHVybD0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvcGtnLyI+QXB0IGZvciBycG0gcGFnZS48L3VsaW5rPiBXZSB1c3VhbGx5IHN1cHBvcnQgdGhlIGxhc3QgMi0zIHJlbGVhc2VzIG9mIFJlZCBIYXQuIChSSDkgYW5kIEZDMSkKKyAgICAgICAgPC9wYXJhPgorCTxwYXJhPkdTdHJlYW1lciBpcyBhbHJlYWR5IGluIERlYmlhbiBleHBlcmltZW50YWwsIHNvIGlmIHlvdSBhcmUgYSBkZWJpYW4gdXNlciB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gZ2V0IHRoZSBEZWJpYW4gcGFja2FnZXMgZnJvbSB0aGVyZS48L3BhcmE+CisJPHBhcmE+R1N0cmVhbWVyIGlzIGFsc28gaW4gTWFuZHJha2UgQ29va2VyIHNvIGlmIHlvdSBhcmUgdXNpbmcgYSByZWNlbnQgcmVsZWFzZSBvZiBMaW51eCBNYW5kcmFrZSB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gZ2V0IEdTdHJlYW1lciBmcm9tIHRoZXJlLiBUbyBsZWFybiBob3d0byBnZXQgcGFja2FnZXMgZnJvbSBNYW5kcmFrZSBjb29rZXIgPHVsaW5rIHVybD0iaHR0cDovL3d3dy5tYW5kcmFrZWxpbnV4LmNvbS9lbi9jb29rZXJkZXZlbC5waHAzIj50aGUgTWFuZHJha2UgY29va2VyIHBhZ2UgaGFzIG1vcmUgaW5mbzwvdWxpbms+CisJPC9wYXJhPgorPHBhcmE+Rm9yIG90aGVyIFJQTSBiYXNlZCBkaXN0cmlidXRpb25zIHdlIHJlY29tbWVuZCBnZXR0aW5nIHRoZSBzb3VyY2UgdGFyYmFsbCBhbmQgZG9pbmcgJ3JwbSAtdGEgZ3N0cmVhbWVyLTAuWC5YJyB0byBjcmVhdGUgcnBtcy4gV2Uga2VlcCBvdXIgU1BFQyBmaWxlIGNvbnN0YW50bHkgdXAgdG8gZGF0ZSBzbyB5b3Ugc2hvdWxkIGFsd2F5cyBiZSBhYmxlIHRvIGJ1aWxkIEdTdHJlYW1lciBycG1zIGZyb20gYSB0YXJiYWxsLiBUaGUgU1BFQyBmaWxlIGlzIGFpbWVkIGF0IFJlZCBIYXQgaG93ZXZlciwgc28gdGhlcmUgbWlnaHQgYmUgc29tZSBuZWVkIGZvciB5b3UgdG8gZWRpdCB0aGUgUmVxdWlyZW1lbnRzIGxpc3QgaWYgeW91ciBkaXN0cmlidXRpb24gbmFtZSB0aGVzZSBwYWNrYWdlcyBkaWZmZXJlbnRseS48L3BhcmE+CisgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyA8cWFuZGFlbnRyeT4KKyAgICAgIDxxdWVzdGlvbiBpZD0iZ2V0dGluZy1nc3RyZWFtZXIzIj4KKyAgICAgICAgPHBhcmE+V2h5IGRvbid0IHlvdSBwcm92aWRlIHByZW1hZGUgYmluYXJpZXMgZm9yIGRpc3RyaWJ1dGlvbiBYWSA/PC9wYXJhPgorICAgICAgPC9xdWVzdGlvbj4KKworICAgICAgPGFuc3dlcj4KKyAgICAgICAgPHBhcmE+CisJR1N0cmVhbWVyIGlzIHJ1biBvbiBhIHZvbHVudGVlciBiYXNpcy4gVGhlIHBhY2thZ2UgdGhhdCBhcmUgcHJvdmlkZWQgYXJlIG1hZGUgYnkgbm9uLXBhaWQgcGVvcGxlIHdobyBkbyB0aGlzIG9uIHRoZWlyIG93biB0aW1lLiBUaGUgZGlzdHJpYnV0aW9ucyB3ZSBzdXBwb3J0IHdpdGggYmluYXJpZXMgYXJlIHRoZSBkaXN0cmlidXRpb25zIHRoYXQgd2UgaGF2ZSBwZW9wbGUgd2hvIGhhdmUgdm9sdW50ZWVyZWQgdG8gbWFrZSBiaW5hcmllcyBmb3IuIElmIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiBtYWludGFpbmluZyBHU3RyZWFtZXIgYmluYXJpZXMgZm9yIG90aGVyIGRpc3RyaWJ1dGlvbnMgb3IgVW5pY2VzIHdlIHdvdWxkIGJlIGhhcHB5IHRvIGhlYXIgZnJvbSB5b3UuIENvbnRhY3QgdXMgdGhyb3VnaCB0aGUgR1N0cmVhbWVyLWRldmVsIG1haWxpbmcgbGlzdC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCis8cWFuZGFlbnRyeT4KKyAgICAgIDxxdWVzdGlvbiBpZD0iZ2V0dGluZy1nc3RyZWFtZXI0Ij4KKyAgICAgICAgPHBhcmE+SSBhbSBoYXZpbmcgdHJvdWJsZSBjb21waWxpbmcgR1N0cmVhbWVyIG9uIG15IExGUyBpbnN0YWxsYXRpb24sIHdoeSA/PC9wYXJhPgorICAgICAgPC9xdWVzdGlvbj4KKworICAgICAgPGFuc3dlcj4KKyAgICAgICAgPHBhcmE+CisJSWYgeW91IGFyZSBydW5uaW5nIExGUyBvdXIgYmFzaWMgb3BpbmlvbiBpcyB0aGF0IHlvdSBzaG91bGQgYmUga25vd2xlZGdlYWJsZSBlbm91Z2ggdG8gc29sdmUgYW55IGJ1aWxkIGlzc3VlcyB5b3UgZ2V0IG9uIHlvdXIgb3duLiBCZWluZyB2b2x1bnRlZXJlZCBiYXNlZCB3ZSBjYW4ndCBwcm9taXNlIHN1cHBvcnQgdG8gYW55b25lIG9mIGNvdXJzZSwgYnV0IGFyZSB5b3UgdXNpbmcgTEZTIGNvbnNpZGVyIHlvdXJzZWxmIGV4dHJhIHVuc3VwcG9ydGVkLiBXZQorbmVpdGhlciBjYW4gb3Igd2FudCB0byBrbm93IGVub3VnaCwgYWJvdXQgaG93IHlvdXIgdW5pcXVlIHN5c3RlbSBpcyBjb25maWd1cmVkLCB0byBiZSBhYmxlIHRvIGhlbHAgeW91LiBUaGF0IHNhaWQsIGlmIHlvdSBjb21lIHRvIHRoZSAjZ3N0cmVhbWVyIGNoYW5uZWwgb24gaXJjLm9wZW5wcm9qZWN0cy5uZXQgd2UgbWlnaHQgb2YgY291cnNlIGJlIGFibGUgdG8gZ2l2ZSB5b3Ugc29tZSBnZW5lcmFsIGhpbnRzIGFuZCBwb2ludGVycy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICA8cXVlc3Rpb24gaWQ9ImdldHRpbmctZ3N0cmVhbWVyLWdpdCI+CisgICAgICAgIDxwYXJhPkhvdyBkbyBJIGdldCBHU3RyZWFtZXIgdGhyb3VnaCBnaXQgPzwvcGFyYT4KKyAgICAgIDwvcXVlc3Rpb24+CisKKyAgICAgIDxhbnN3ZXI+CisgICAgICAgIDxwYXJhPgorICAgICAgICBzZWUgdGhpcyBwYWdlIDogPHVsaW5rIHVybD0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGV2LyI+aHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGV2LzwvdWxpbms+IGZvciBnaXQgYWNjZXNzLiAoYW5vbnltb3VzIGFuZCBkZXZlbG9wZXIpCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKwkKKyAgPC9xYW5kYXNldD4KKzwvc2VjdDE+CmRpZmYgLS1naXQgYS9kb2NzL2ZhcS9naXQueG1sIGIvZG9jcy9mYXEvZ2l0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjI1ZTdiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9mYXEvZ2l0LnhtbApAQCAtMCwwICsxLDE2NCBAQAorPHNlY3QxIGlkPSJjaGFwdGVyLWdpdCI+CisgIDx0aXRsZSBpZD0idGl0bGUtZ2l0Ij5CdWlsZGluZyBHU3RyZWFtZXIgZnJvbSBnaXQ8L3RpdGxlPgorICA8cWFuZGFzZXQgZGVmYXVsdGxhYmVsPSJxYW5kYSI+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgIDxxdWVzdGlvbiBpZD0iZ2l0LXVuaW5zdGFsbGVkIj4KKyAgICAgICAgPHBhcmE+CitJcyB0aGVyZSBhIHdheSB0byB0ZXN0IG9yIGRldmVsb3AgYWdhaW5zdCBHU3RyZWFtZXIgZnJvbSBnaXQgd2l0aG91dAoraW50ZXJmZXJpbmcgd2l0aCBteSBzeXN0ZW0gR1N0cmVhbWVyIGluc3RhbGxlZCBmcm9tIHBhY2thZ2VzPworICAgICAgICA8L3BhcmE+CisgICAgICA8L3F1ZXN0aW9uPgorCisgICAgICA8YW5zd2VyPgorICAgICAgICA8cGFyYT4KK1llcyEgWW91IGhhdmUgdHdvIG9wdGlvbnM6IHlvdSBjYW4gZWl0aGVyIHJ1biBHU3RyZWFtZXIgaW4gYW4gdW5pbnN0YWxsZWQgc2V0dXAKKyhzZWUgPGxpbmsgbGlua2VuZD0iZGV2ZWxvcGluZy11bmluc3RhbGxlZC1nc3RyZWFtZXIiPkhvdyBkbyBJIGRldmVsb3AgYWdhaW5zdAorYW4gdW5pbnN0YWxsZWQgR1N0cmVhbWVyIGNvcHkgPzwvbGluaz4pLCBvciB5b3UgY2FuIHVzZSBHTk9NRSdzIGpoYnVpbGQuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgPHF1ZXN0aW9uIGlkPSJnaXQtYW5vbiI+CisgICAgICAgIDxwYXJhPgorSG93IGRvIEkgY2hlY2sgb3V0IEdTdHJlYW1lciBmcm9tIGdpdCA/CisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvcXVlc3Rpb24+CisKKyAgICAgIDxhbnN3ZXI+CisgICAgICAgIDxwYXJhPgorR1N0cmVhbWVyIGlzIGhvc3RlZCBvbiBGcmVlZGVza3RvcC5vcmcuICBHU3RyZWFtZXIgY29uc2lzdHMgb2YgdmFyaW91cyBwYXJ0cy4KK0luIHRoZSBiZWdpbm5pbmcsIHlvdSB3aWxsIGJlIGludGVyZXN0ZWQgaW4gdGhlICJnc3RyZWFtZXIiIG1vZHVsZSwgY29udGFpbmluZwordGhlIGNvcmUsIGFuZCAiZ3N0LXBsdWdpbnMtYmFzZSIgYW5kICJnc3QtcGx1Z2lucy1nb29kIiwgY29udGFpbmluZyB0aGUgYmFzaWMKK3NldCBvZiBwbHVnaW5zLiBGaW5hbGx5LCB5b3UgbWF5IGFsc28gYmUgaW50ZXJlc3RlZCBpbiAiZ3N0LXBsdWdpbnMtdWdseSIsCisiZ3N0LXBsdWdpbnMtYmFkIiBhbmQgImdzdC1mZm1wZWciIGZvciBtb3JlIGNvbXByZWhlbnNpdmUgbWVkaWEgZm9ybWF0IHN1cHBvcnQuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CitUbyBjaGVjayBvdXQgdGhlIGxhdGVzdCBnaXQgdmVyc2lvbiBvZiB0aGUgY29yZSBhbmQgdGhlIGJhc2ljIG1vZHVsZXMsIHVzZQorPHByb2dyYW1saXN0aW5nPgorIGZvciBtb2R1bGUgaW4gZ3N0cmVhbWVyIGdzdC1wbHVnaW5zLWJhc2UgZ3N0LXBsdWdpbnMtZ29vZDsgZG8KKyAgIGdpdCBjbG9uZSBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQvZ3N0cmVhbWVyLyRtb2R1bGUgOworIGRvbmUKKzwvcHJvZ3JhbWxpc3Rpbmc+CitUaGlzIHdpbGwgY3JlYXRlIHRocmVlIGRpcmVjdG9yaWVzIGluIHlvdXIgY3VycmVudCBkaXJlY3Rvcnk6ICJnc3RyZWFtZXIiLAorImdzdC1wbHVnaW5zLWJhc2UiLCBhbmQgImdzdC1wbHVnaW5zLWdvb2QiLiBJZiB5b3Ugd2FudCB0byBnZXQgYW5vdGhlciBtb2R1bGUsCit1c2UgdGhlIGFib3ZlIGdpdCBjbG9uZSBjb21tYW5kIGxpbmUgYW5kIHJlcGxhY2UgJG1vZHVsZSB3aXRoIHRoZSBuYW1lIG9mIHRoZQorbW9kdWxlLiBPbmNlIHlvdSBoYXZlIGNoZWNrZWQgb3V0IHRoZXNlIG1vZHVsZXMsIHlvdSB3aWxsIG5lZWQgdG8gY2hhbmdlIGludG8KK2VhY2ggZGlyZWN0b3J5IGFuZCBydW4gLi9hdXRvZ2VuLnNoLCB3aGljaCB3aWxsIGFtb25nIG90aGVyIHRoaW5ncyBjaGVja291dAordGhlIGNvbW1vbiBtb2R1bGUgdW5kZXJuZWF0aCBlYWNoIG1vZHVsZSBjaGVja291dC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KK1RoZSA8dWxpbmsgdXJsPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9tb2R1bGVzLyI+bW9kdWxlcyBwYWdlPC91bGluaz4KK2hhcyBhIGxpc3Qgb2YgYWN0aXZlIG9uZXMgdG9nZXRoZXIgd2l0aCBhIHNob3J0IGRlc2NyaXB0aW9uLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgIDxxdWVzdGlvbiBpZD0iZ2l0LWRldmVsb3BlciI+CisgICAgICAgIDxwYXJhPgorSG93IGRvIEkgZ2V0IGRldmVsb3BlciBhY2Nlc3MgdG8gR1N0cmVhbWVyIGdpdCA/CisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvcXVlc3Rpb24+CisKKyAgICAgIDxhbnN3ZXI+CisgICAgICAgIDxwYXJhPgorSWYgeW91IHdhbnQgdG8gZ2FpbiBkZXZlbG9wZXIgYWNjZXNzIHRvIEdTdHJlYW1lciBnaXQsIHlvdSBzaG91bGQgYXNrIGZvcgoraXQgb24gdGhlIGRldmVsb3BtZW50IGxpc3RzLCBvciBhc2sgb25lIG9mIHRoZSBtYWludGFpbmVycyBkaXJlY3RseS4gV2Ugd2lsbAordXN1YWxseSBvbmx5IGNvbnNpZGVyIHJlcXVlc3RzIGJ5IGRldmVsb3BlcnMgd2hvIGhhdmUgYmVlbiBhY3RpdmUgYW5kCitjb21wZXRlbnQgR1N0cmVhbWVyIGNvbnRyaWJ1dG9ycyBmb3Igc29tZSB0aW1lIGFscmVhZHkuIElmIHlvdSBhcmUgbm90CithbHJlYWR5IGEgcmVnaXN0ZXJlZCBkZXZlbG9wZXIgd2l0aCBhIHVzZXIgYWNjb3VudCBvbiBGcmVlZGVza3RvcC5vcmcsCit5b3Ugd2lsbCB0aGVuIGhhdmUgdG8gcHJvdmlkZSB0aGVtIHdpdGg6Cis8b3JkZXJlZGxpc3Q+Cis8bGlzdGl0ZW0+PHBhcmE+eW91ciBkZXNpcmVkIHVuaXggdXNlcm5hbWU8L3BhcmE+PC9saXN0aXRlbT4KKzxsaXN0aXRlbT48cGFyYT55b3VyIGZ1bGwgbmFtZTwvcGFyYT48L2xpc3RpdGVtPgorPGxpc3RpdGVtPjxwYXJhPnlvdXIgZS1tYWlsIGFkZHJlc3M8L3BhcmE+PC9saXN0aXRlbT4KKzxsaXN0aXRlbT48cGFyYT5hIGNvcHkgb2YgeW91ciBwdWJsaWMgc3NodjIgaWRlbnRpdHkuCitJZiB5b3UgZG8gbm90IGhhdmUgdGhpcyB5ZXQsIHlvdSBjYW4gZ2VuZXJhdGUgaXQgYnkgcnVubmluZworInNzaC1rZXlnZW4gLXQgcnNhIC1mIH4vLnNzaC9pZF9yc2EucHViLWZkbyIuICBUaGUgcmVzdWx0aW5nIHB1YmxpYyBrZXkKK3dpbGwgYmUgaW4gPGZpbGVuYW1lPn4vLnNzaC9pZF9yc2EucHViLWZkbzwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+eW91ciBHUEcgZmluZ2VycHJpbnQuICBUaGlzIHdvdWxkIGFsbG93IHlvdSB0bworYWRkIGFuZCByZW1vdmUgc3NoIGtleXMgdG8geW91ciBhY2NvdW50LgorPC9wYXJhPjwvbGlzdGl0ZW0+Cis8L29yZGVyZWRsaXN0PgorCitPbmNlIHlvdSBoYXZlIGFsbCB0aGVzZSBpdGVtcywgc2VlIDx1bGluayB1cmw9Imh0dHA6Ly9mcmVlZGVza3RvcC5vcmcvd2lraS9BY2NvdW50UmVxdWVzdHMiPmh0dHA6Ly9mcmVlZGVza3RvcC5vcmcvd2lraS9BY2NvdW50UmVxdWVzdHM8L3VsaW5rPiBmb3Igd2hhdCB0byBkbyB3aXRoIHRoZW0uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworCisgICAgPHFhbmRhZW50cnk+CisgICAgICA8cXVlc3Rpb24gaWQ9ImF1dG9nZW4tbGlidG9vbCI+CisgICAgICAgIDxsYWJlbD5JIHJhbiBhdXRvZ2VuLnNoLCBidXQgaXQgZmFpbHMgd2l0aCBhY2xvY2FsIGVycm9ycy4gV2hhdCdzIHdyb25nID88L2xhYmVsPgorICAgICAgICA8cGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KKysgcnVubmluZyBhY2xvY2FsIC1JIG00IC1JIGNvbW1vbi9tNCAuLi4KK2FjbG9jYWw6IGNvbmZpZ3VyZS5hYzogODogbWFjcm8gYEFNX0RJU0FCTEVfU1RBVElDJyBub3QgZm91bmQgaW4gbGlicmFyeQorYWNsb2NhbDogY29uZmlndXJlLmFjOiAxNzogbWFjcm8gYEFNX1BST0dfTElCVE9PTCcgbm90IGZvdW5kIGluIGxpYnJhcnkKK2FjbG9jYWwgZmFpbGVkCis8L3Byb2dyYW1saXN0aW5nPgorV2hhdCdzIHdyb25nID8KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9xdWVzdGlvbj4KKworICAgICAgPGFuc3dlcj4KKyAgICAgICAgPHBhcmE+CithY2xvY2FsIGlzIHVuYWJsZSB0byBmaW5kIHR3byBtYWNyb3MgaW5zdGFsbGVkIGJ5IGxpYnRvb2wgaW4gYSBmaWxlIGNhbGxlZAorbGlidG9vbC5tNC4gIE5vcm1hbGx5IHRoaXMgd291bGQgaW5kaWNhdGUgdGhhdCB5b3UgZG9uJ3QgaGF2ZSBsaWJ0b29sLCBidXQKK3RoYXQgd291bGQgbWVhbiBhdXRvZ2VuLnNoIHdvdWxkIGhhdmUgZmFpbGVkIG9uIG5vdCBmaW5kaW5nIGxpYnRvb2wuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CitJdCBpcyBtb3JlIGxpa2VseSB0aGF0IHlvdSBpbnN0YWxsZWQgYXV0b21ha2UgKHdoaWNoIHByb3ZpZGVzIGFjbG9jYWwpIGluCithIGRpZmZlcmVudCBwcmVmaXggdGhhbiBsaWJ0b29sLiAgWW91IGNhbiBjaGVjayB0aGlzIGJ5IGV4YW1pbmluZyBpbiB3aGF0CitwcmVmaXggYm90aCBhY2xvY2FsIGFuZCBsaWJ0b29sIGFyZSBpbnN0YWxsZWQuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CitZb3UgY2FuIGRvIHRocmVlIHRoaW5ncyB0byBmaXggdGhpcyA6Cis8b3JkZXJlZGxpc3Q+Cis8bGlzdGl0ZW0+PHBhcmE+aW5zdGFsbCBhdXRvbWFrZSBpbiB0aGUgc2FtZSBwcmVmaXggYXMgbGlidG9vbDwvcGFyYT48L2xpc3RpdGVtPgorPGxpc3RpdGVtPjxwYXJhPmZvcmNlIHVzZSBvZiB0aGUgYXV0b21ha2UgaW5zdGFsbGVkIGluIHRoZSBzYW1lIHByZWZpeCBhcyBsaWJ0b29sCitieSB1c2luZyB0aGUgLS13aXRoLWF1dG9tYWtlIG9wdGlvbjwvcGFyYT48L2xpc3RpdGVtPgorPGxpc3RpdGVtPjxwYXJhPmZpZ3VyZSBvdXQgd2hhdCBwcmVmaXggbGlidG9vbCBoYXMgYmVlbiBpbnN0YWxsZWQgdG8gYW5kIHBvaW50CithY2xvY2FsIHRvIHRoZSByaWdodCBsb2NhdGlvbiBieSBydW5uaW5nCis8cHJvZ3JhbWxpc3Rpbmc+CitleHBvcnQgQUNMT0NBTF9GTEFHUz0iLUkgJChwcmVmaXgpL3NoYXJlL2FjbG9jYWwiCis8L3Byb2dyYW1saXN0aW5nPgord2hlcmUgeW91IHJlcGxhY2UgcHJlZml4IHdpdGggdGhlIHByZWZpeCB3aGVyZSBsaWJ0b29sIHdhcyBpbnN0YWxsZWQuCis8L3BhcmE+PC9saXN0aXRlbT4KKzwvb3JkZXJlZGxpc3Q+CisgICAgICAgPC9wYXJhPgorICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICA8cXVlc3Rpb24gaWQ9IndlcnJvciI+CisgICAgICAgIDxwYXJhPgorV2h5IGlzICItV2FsbCAtV2Vycm9yIiBiZWluZyB1c2VkID8KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9xdWVzdGlvbj4KKworICAgICAgPGFuc3dlcj4KKyAgICAgICAgPHBhcmE+CisiLVdhbGwiIGlzIGJlaW5nIHVzZWQgYmVjYXVzZSBpdCBmaW5kcyBhIGxvdCBvZiBwb3NzaWJsZSBwcm9ibGVtcyB3aXRoIGNvZGUuCitOb3QgYWxsIG9mIHRoZW0gYXJlIG5lY2Vzc2FyaWx5IGEgcHJvYmxlbSwgYnV0IGl0J3MgYmV0dGVyIHRvIGhhdmUgdGhlIGNvbXBpbGVyCityZXBvcnQgc29tZSBmYWxzZSBwb3NpdGl2ZXMgYW5kIGZpbmQgYSB3b3JrLWFyb3VuZCB0aGFuIHRvIHNwZW5kIHRpbWUKK2NoYXNpbmcgYSBidWcgZm9yIGRheXMgdGhhdCB0aGUgY29tcGlsZXIgd2FzIGdpdmluZyB5b3UgaGludHMgYWJvdXQuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisiLVdlcnJvciIgaXMgdHVybmVkIG9mZiBmb3IgYWN0dWFsIHJlbGVhc2VzLiAgSXQncyB0dXJuZWQgb24gYnkgZGVmYXVsdCBmb3IKK2dpdCBhbmQgcHJlcmVsZWFzZXMgc28gdGhhdCBwZW9wbGUgYWN0dWFsbHkgbm90aWNlIGFuZCBmaXggcHJvYmxlbXMgZm91bmQgYnkKKyItV2FsbCIuICBXZSB3YW50IHBlb3BsZSB0byBhY3RpdmVseSBoaXQgYW5kIHJlcG9ydCBvciBmaXggdGhlbS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KK0lmIGZvciBhbnkgcmVhc29uIHlvdSB3YW50IHRvIGJ5cGFzcyB0aGVzZSBmbGFncyBhbmQgeW91IGFyZSBjZXJ0YWluIGl0J3MgdGhlCityaWdodCB0aGluZyB0byBkbywgeW91IGNhbiBydW4KKzxwcm9ncmFtbGlzdGluZz5tYWtlIEVSUk9SX0NGTEFHUz0iIjwvcHJvZ3JhbWxpc3Rpbmc+Cit0byBjbGVhciB0aGUgQ0ZMQUdTIGZvciBlcnJvciBjaGVja2luZy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgIDwvcWFuZGFzZXQ+Cis8L3NlY3QxPgpkaWZmIC0tZ2l0IGEvZG9jcy9mYXEvbGVnYWwueG1sIGIvZG9jcy9mYXEvbGVnYWwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYzU2ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2ZhcS9sZWdhbC54bWwKQEAgLTAsMCArMSwyMTUgQEAKKzxzZWN0MSBpZD0iY2hhcHRlci1sZWdhbCI+CisgIDx0aXRsZSBpZD0idGl0bGUtbGVnYWwiPkdTdHJlYW1lciBMZWdhbCBJc3N1ZXM8L3RpdGxlPgorICA8cGFyYT4KK1RoaXMgcGFydCBvZiB0aGUgRkFRIGlzIGJhc2VkIG9uIGEgc2VyaWVzIG9mIHF1ZXN0aW9ucyB3ZSBhc2tlZCB0aGUgRlNGCit0byB1bmRlcnN0YW5kIGhvdyB0aGUgR1BMIHdvcmtzIGFuZCBob3cgcGF0ZW50cyBhZmZlY3RzIHRoZSBHUEwuIFRoZXNlCitxdWVzdGlvbnMgd2VyZSBhbnN3ZXJlZCBieSB0aGUgPHVsaW5rIHVybD0iaHR0cDovL3d3dy5mc2Yub3JnLyI+CitGU0YgbGF3eWVyczwvdWxpbms+LCBzbyB3ZSB2aWV3IHRoZW0gYXMgdGhlCitmaW5hbCBpbnRlcnByZXRhdGlvbiBvbiBob3cgdGhlIEdQTCBhbmQgTEdQTCBpbnRlcmFjdCB3aXRoIHBhdGVudHMgaW4gb3VyIAorb3Bpbmlvbi4gVGhpcyBjb25zdWx0YW5jeSB3YXMgcGFpZCBmb3IgYnkKKzx1bGluayB1cmw9Imh0dHA6Ly93d3cuZmx1ZW5kby5jb20vIj5GbHVlbmRvPC91bGluaz4KK2luIG9yZGVyIHRvIG9idGFpbiBjbGVhciBhbmQgcXVvdGFibGUgYW5zd2Vycy4gIFRoZXNlIGFuc3dlcnMgd2VyZSBjZXJ0aWZpZWQKK2J5IHRoZSBGU0YgbGF3eWVyIHRlYW0gYW5kIHZlcmlmaWVkIGJ5IEZTRiBsYXd5ZXIgYW5kIGxhdyBwcm9mZXNzb3IgRWJlbiBNb2dsZW4uCisgIDwvcGFyYT4KKworICA8cWFuZGFzZXQgZGVmYXVsdGxhYmVsPSJxYW5kYSI+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgIDxxdWVzdGlvbiBpZD0ibGVnYWwtZGlzdHJpYnV0ZS10aHJlZSI+CisgICAgICAgIDxwYXJhPgorQ2FuIHNvbWVvbmUgZGlzdHJpYnV0ZSB0aGUgY29tYmluYXRpb24gb2YKKzxpdGVtaXplZGxpc3Q+CisgIDxsaXN0aXRlbT48cGFyYT5HU3RyZWFtZXIsIHRoZSBMR1BMIGxpYnJhcnk8L3BhcmE+PC9saXN0aXRlbT4KKyAgPGxpc3RpdGVtPjxwYXJhPk15UGxheWVyLCBhIEdQTCBwbGF5YmFjayBhcHBsaWNhdGlvbjwvcGFyYT48L2xpc3RpdGVtPgorICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGJpbmFyeS1vbmx5IFNvcmVuc29uIGRlY29kZXI8L3BhcmE+PC9saXN0aXRlbT4KKzwvaXRlbWl6ZWRsaXN0PgordG9nZXRoZXIgaW4gb25lIGRpc3RyaWJ1dGlvbi9vcGVyYXRpbmcgc3lzdGVtID8gSWYgbm90LCB3aGF0CituZWVkcyB0byBiZSBjaGFuZ2VkIHRvIG1ha2UgdGhpcyBwb3NzaWJsZSA/CisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvcXVlc3Rpb24+CisKKyAgICAgIDxhbnN3ZXI+CisgICAgICAgIDxwYXJhPgorVGhpcyB3b3VsZCBiZSBhIHByb2JsZW0sIGJlY2F1c2UgdGhlIEdTdHJlYW1lciBhbmQgTXlQbGF5ZXIgbGljZW5zZXMgd291bGQKK2ZvcmJpZCBpdC4gIEluIG9yZGVyIHRvIGxpbmsgR1N0cmVhbWVyIHRvIE15UGxheWVyLCB5b3UgbmVlZCB0byB1c2Ugc2VjdGlvbgorMyBvZiB0aGUgTEdQTCB0byBjb252ZXJ0IEdTdHJlYW1lciB0byBHUEwuICBUaGUgR1BMIHZlcnNpb24gb2YgR1N0cmVhbWVyCitmb3JiaWRzIGxpbmtpbmcgdG8gdGhlIFNvcmVuc29uIGRlY29kZXIuICBBbnl3YXksIHRoZSBNeVBsYXllciBHUEwKK2xpY2Vuc2UgZm9yYmlkcyB0aGlzLiAgCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KK0lmIHRoZSBhdXRob3JzIG9mIE15UGxheWVyIHdhbnQgdG8gcGVybWl0IHRoaXMsIHdlIGhhdmUgYW4KK2V4Y2VwdGlvbiBmb3IgdGhlbTogdGhlIGNvbnRyb2xsZWQgaW50ZXJmYWNlIGV4Y2VwdGlvbiBmcm9tIHRoZSBGQVEuCitUaGUgaWRlYSBvZiB0aGlzIGlzIHRoYXQgeW91IGNhbid0IGdldCBhcm91bmQgdGhlIEdQTCBqdXN0IGJ5IGluY2x1ZGluZworYSBMR1BMIGJpdCBpbiB0aGUgbWlkZGxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CitOb3RlOiBNeVBsYXllciBpcyBhIGNvbXBsZXRlbHkgZmljdGl0dW91cyBhcHBsaWNhdGlvbiBhdCB0aGUgdGltZSBvZiB3cml0aW5nLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgPHF1ZXN0aW9uIGlkPSJsZWdhbC1iaW5hcnktcGx1Z2luIj4KKyAgICAgICAgPHBhcmE+CitTdXBwb3NlIEFwcGxlIHdhbnRzIHRvIHdyaXRlIGEgYmluYXJ5LW9ubHkgcHJvcHJpZXRhcnkgCitwbHVnaW4gZm9yIEdTdHJlYW1lciB0byBkZWNvZGUgU29yZW5zb24gdmlkZW8sIHdoaWNoIHdpbGwgYmUgc2hpcHBlZCAKK3N0YW5kLWFsb25lLCBub3QgcGFydCBvZiBhIHBhY2thZ2UgbGlrZSBpbiB0aGUgcXVlc3Rpb24gYWJvdmUuIAorQ2FuIEFwcGxlIGRpc3RyaWJ1dGUgdGhpcyBiaW5hcnktb25seSBwbHVnaW4gPworICAgICAgICA8L3BhcmE+CisgICAgICA8L3F1ZXN0aW9uPgorCisgICAgICA8YW5zd2VyPgorICAgICAgICA8cGFyYT4KK1llcywgbW9kdWxvIGNlcnRhaW4gcmV2ZXJzZSBlbmdpbmVlcmluZyByZXF1aXJlbWVudHMgaW4gc2VjdGlvbiA2IG9mCit0aGUgTEdQTC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICA8cXVlc3Rpb24gaWQ9ImxlZ2FsLWdwbC1wcm9ncmFtIj4KKyAgICAgICAgPHBhcmE+CitJZiBhIHByb2dyYW0gcmVsZWFzZWQgdW5kZXIgdGhlIEdQTCB1c2VzIGEgbGlicmFyeSB0aGF0IAoraXMgTEdQTCwgYW5kIHRoaXMgbGlicmFyeSBjYW4gZGxvcGVuIHBsdWctaW5zIGF0IHJ1bnRpbWUsIHdoYXQgYXJlIHRoZQorcmVxdWlyZW1lbnRzIGZvciB0aGUgbGljZW5zZSBvZiB0aGUgcGx1Zy1pbiA/CisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvcXVlc3Rpb24+CisKKyAgICAgIDxhbnN3ZXI+CisgICAgICAgIDxwYXJhPgorWW91IG1heSBub3QgZGlzdHJpYnV0ZSB0aGUgcGx1Zy1pbiB3aXRoIHRoZSBHUEwgYXBwbGljYXRpb24uIAorRGlzdHJpYnV0aW5nIHRoZSBwbHVnLWluIGFsb25lLCB3aXRoIHRoZSBrbm93bGVkZ2UgdGhhdCBpdCB3aWxsIGJlIHVzZWQKK3ByaW1hcmlseSBieSBHUEwgc29mdHdhcmUgaXMgYSBiaXQgb2YgYW4gZWRnZSBjYXNlLiAgV2Ugd2lsbCBub3QgYWR2aXNlIHlvdQordGhhdCBpdCB3b3VsZCBiZSBzYWZlIHRvIGRvIHNvLCBidXQgd2UgYWxzbyB3aWxsIG5vdCBhZHZpc2UgeW91IHRoYXQgaXQKK3dvdWxkIGJlIGFic29sdXRlbHkgZm9yYmlkZGVuLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgIDxxdWVzdGlvbiBpZD0ibGVnYWwtc2FmZS1jb3VudHJpZXMiPgorICAgICAgICA8cGFyYT4KK0NhbiBzb21lb25lIGluIGEgY291bnRyeSB0aGF0IGRvZXMgbm90IGhhdmUgc29mdHdhcmUgcGF0ZW50cyBkaXN0cmlidXRlIAorY29kZSBjb3ZlcmVkIGJ5IFVTIHBhdGVudHMgdW5kZXIgdGhlIEdQTCB0byBwZW9wbGUgaW4sIGZvciBleGFtcGxlLCBOb3J3YXkgPyAKK0lmIGhlL3NoZSB2aXNpdHMgdGhlIFVTLCBjYW4gaGUvc2hlIGJlIGFycmVzdGVkID8KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9xdWVzdGlvbj4KKworICAgICAgPGFuc3dlcj4KKyAgICAgICAgPHBhcmE+CitZZXMsIGhlIGNhbi4KK05vLCAgdGhlcmUgYXJlIG5vIGNyaW1pbmFsIHBlbmFsdGllcyBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCBpbiB0aGUgVVMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgPHF1ZXN0aW9uIGlkPSJsZWdhbC11bnNhZmUtY291bnRyaWVzIj4KKyAgICAgICAgPHBhcmE+CitDYW4gc29tZW9uZSBmcm9tIHRoZSBVUyBkaXN0cmlidXRlIHNvZnR3YXJlIGNvdmVyZWQgYnkKK1VTIHBhdGVudHMgdW5kZXIgdGhlIEdQTCB0byBwZW9wbGUgaW4gTm9yd2F5ID8gVG8gcGVvcGxlIGluIHRoZSBVUyA/CisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvcXVlc3Rpb24+CisKKyAgICAgIDxhbnN3ZXI+CisgICAgICAgIDxwYXJhPgorVGhpcyBtaWdodCBpbmZyaW5nZSBzb21lIHBhdGVudHMsIGJ1dCB0aGUgR1BMIHdvdWxkIG5vdCBmb3JiaWQgaXQgCithYnNlbnQgc29tZSBhY3R1YWwgcmVzdHJpY3Rpb24sIHN1Y2ggYXMgYSBjb3VydCBqdWRnZW1lbnQgb3IgYWdyZWVtZW50LgorVGhlIFVTIGdvdmVybm1lbnQgaXMgZW1wb3dlcmVkIHRvIHJlZnVzZSBpbXBvcnRhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdpbmcgZGV2aWNlcywgaW5jbHVkaW5nIHNvZnR3YXJlLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgIDxxdWVzdGlvbiBpZD0ibGVnYWwtZ3BsLWxpYnJhcnktcGF0ZW50cyI+CisgICAgICAgIDxwYXJhPgorVGhlcmUgYXJlIGEgbG90IG9mIEdQTC0gb3IgTEdQTC1saWNlbnNlZCBsaWJyYXJpZXMgdGhhdCAKK2hhbmRsZSBtZWRpYSBjb2RlY3Mgd2hpY2ggaGF2ZSBwYXRlbnRzLiAgVGFrZSBtYWQsIGFuIG1wMyBkZWNvZGluZyBsaWJyYXJ5LAorYXMgYW4gZXhhbXBsZS4gIEl0IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwuIEluIGNvdW50cmllcyB3aGVyZSBwYXRlbnRzIAorYXJlIHZhbGlkLCBkb2VzIHRoaXMgaW52YWxpZGF0ZSB0aGUgR1BMIGxpY2Vuc2UgZm9yIHRoaXMgcHJvamVjdCA/CisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvcXVlc3Rpb24+CisKKyAgICAgIDxhbnN3ZXI+CisgICAgICAgIDxwYXJhPgorVGhlIG1lcmUgZXhpc3RlbmNlIG9mIGEgcGF0ZW50IHdoaWNoIG1pZ2h0IHJlYWQgb24gdGhlIHByb2dyYW0gZG9lcyBub3QKK2NoYW5nZSBhbnl0aGluZy4gSG93ZXZlciwgaWYgYSBjb3VydCBqdWRnZW1lbnQgb3Igb3RoZXIgYWdyZWVtZW50CitwcmV2ZW50cyB5b3UgZnJvbSBkaXN0cmlidXRpbmcgbGlibWFkIHVuZGVyIEdQTCB0ZXJtcywgeW91IGNhbiBub3QKK2Rpc3RyaWJ1dGUgaXQgYXQgYWxsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CitUaGUgR1BMIGFuZCBMR1BMIHNheSAoc2VjdGlvbnMgNyBhbmQgMTEpOgorPHF1b3RlPklmIHlvdSBjYW5ub3QgZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIKK29ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbgorYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC48L3F1b3RlPgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgIDxxdWVzdGlvbiBpZD0ibGVnYWwtZ3BsLWNvdXJ0LWp1ZGdtZW50Ij4KKyAgICAgICAgPHBhcmE+CitTbyBsZXQncyBzYXkgdGhlcmUgaXMgYSBjb3VydCBqdWRnZW1lbnQuIERvZXMgdGhpcyBtZWFuIHRoYXQgdGhlIEdQTCBsaWNlbnNlIGlzCitpbnZhbGlkIGZvciB0aGUgcHJvamVjdCBldmVyeXdoZXJlLCBvciBvbmx5IGluIHRoZSBjb3VudHJpZXMgd2hlcmUgaXQgY29uZmxpY3RzCit3aXRoIHRoZSBhcHBsaWNhYmxlIHBhdGVudHMgPworICAgICAgICA8L3BhcmE+CisgICAgICA8L3F1ZXN0aW9uPgorCisgICAgICA8YW5zd2VyPgorICAgICAgICA8cGFyYT4KK1RoZSBHUEwgb3BlcmF0ZXMgb24gYSBwZXItYWN0aW9uLCBub3QgcGVyLXByb2dyYW0gYmFzaXMuICBUaGF0IGlzLCBpZgoreW91IGFyZSBpbiBhIGNvdW50cnkgd2hpY2ggaGFzIHNvZnR3YXJlIHBhdGVudHMsIGFuZCBhIGNvdXJ0IHRlbGxzIHlvdQordGhhdCB5b3UgY2Fubm90IGRpc3RyaWJ1dGUgKHNheSkgbGlibWFkIGluIHNvdXJjZSBjb2RlIGZvcm0sIHRoZW4geW91CitjYW5ub3QgZGlzdHJpYnV0ZSBsaWJtYWQgYXQgYWxsLiAgVGhpcyBkb2Vzbid0IGFmZmVjdCBhbnlvbmUgZWxzZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICA8cXVlc3Rpb24gaWQ9ImxlZ2FsLWdwbC1hbmQtYmluYXJ5Ij4KKyAgICAgICAgPHBhcmE+CitQYXRlbnRlZCBkZWNvZGluZyBjYW4gYmUgaW1wbGVtZW50ZWQgaW4gR1N0cmVhbWVyIGVpdGhlciBieQoraGF2aW5nIGEgYmluYXJ5LW9ubHkgcGx1Z2luIGRvIHRoZSBkZWNvZGluZywgb3IgYnkgd3JpdGluZyBhIHBsdWdpbgorKHdpdGggYW55IGFwcGxpY2FibGUgbGljZW5zZSkgdGhhdCBsaW5rcyB0byBhIGJpbmFyeS1vbmx5IGxpYnJhcnkuCitEb2VzIHRoaXMgYWZmZWN0IHRoZSBsaWNlbnNpbmcgaXNzdWVzIGludm9sdmVkIGluIHJlZ2FyZHMgdG8gR1BML0xHUEw/CisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvcXVlc3Rpb24+CisKKyAgICAgIDxhbnN3ZXI+CisgICAgICAgIDxwYXJhPgorTm8uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgPHF1ZXN0aW9uIGlkPSJsZWdhbC1ncGwtcGF0ZW50LWRpc3RyaWJ1dGlvbiI+CisgICAgICAgIDxwYXJhPgorSXMgaXQgY29ycmVjdCB0aGF0IHlvdSBjYW5ub3QgZGlzdHJpYnV0ZSB0aGUgR1BMIG1hZCBsaWJyYXJ5IHRvCitkZWNvZGUgbXAzJ3MsICpldmVuKiBpbiB0aGUgY2FzZSB3aGVyZSB5b3UgaGF2ZSBvYnRhaW5lZCBhIHZhbGlkIGxpY2Vuc2UgCitmb3IgZGVjb2RpbmcgbXAzID8KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9xdWVzdGlvbj4KKworICAgICAgPGFuc3dlcj4KKyAgICAgICAgPHBhcmE+CitUaGUgb25seSBHUEwtY29tcGF0aWJsZSBwYXRlbnQgbGljZW5zZXMgYXJlIHRob3NlIHdoaWNoIGFyZSBvcGVuIHRvICAKK2FsbCBwYXJ0aWVzIHBvc2Vzc2luZyBjb3BpZXMgb2YgR1BMIHNvZnR3YXJlIHdoaWNoIHByYWN0aWNlcyB0aGUgCit0ZWFjaGluZ3Mgb2YgdGhlIHBhdGVudC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorSWYgeW91IHRha2UgYSBsaWNlbnNlIHdoaWNoIGRvZXNuJ3QgYWxsb3cgb3RoZXJzIHRvIGRpc3RyaWJ1dGUKK29yaWdpbmFsIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIGxpYm1hZCBwcmFjdGljaW5nIHRoZSBzYW1lIHBhdGVudAorY2xhaW1zIGFzIHRoZSB2ZXJzaW9uIHlvdSBkaXN0cmlidXRlLCB0aGVuIHlvdSBtYXkgbm90IGRpc3RyaWJ1dGUgYXQKK2FsbC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorICA8L3FhbmRhc2V0PgorPC9zZWN0MT4KZGlmZiAtLWdpdCBhL2RvY3MvZmFxL3N0YXJ0LnhtbCBiL2RvY3MvZmFxL3N0YXJ0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmVkYzkxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9mYXEvc3RhcnQueG1sCkBAIC0wLDAgKzEsMjcgQEAKKzxzZWN0MSBpZD0ic3RhcnQiPgorICA8dGl0bGUgaWQ9InN0YXJ0LXRpdGxlIj5HZXR0aW5nIFN0YXJ0ZWQ8L3RpdGxlPgorICA8cGFyYT4KK1NvIHlvdSdyZSBlYWdlciB0byBnZXQgc3RhcnRlZCBsZWFybmluZyBhYm91dCBHU3RyZWFtZXIuCitUaGVyZSdzIGEgZmV3IHdheXMgeW91IGNhbiBnZXQgc3RhcnRlZC4KKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KK0lmIHlvdSB3YW50IHRvIGxlYXJuIGJ5IHJlYWRpbmcgYWJvdXQgaXQsIHN0YXJ0IHdpdGgKKyAgICAgICAgICA8eHJlZiBsaW5rZW5kPSJ0aXRsZS1nZW5lcmFsIiBlbmR0ZXJtPSJ0aXRsZS1nZW5lcmFsIi8+CisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorSWYgeW91J2QgcmF0aGVyIGxlYXJuIGJ5IHRyeWluZyBpdCBvdXQsIHN0YXJ0IHdpdGgKKzx4cmVmIGxpbmtlbmQ9InRpdGxlLWdldHRpbmciIGVuZHRlcm09InRpdGxlLWdldHRpbmciLz4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CitJZiB5b3Ugd2FudCB0byBsaXZlIG9uIHRoZSBibGVlZGluZyBlZGdlIGFuZCBkZXZlbG9wIGFuZCB1c2UgZ2l0LCBzZWUKKzx4cmVmIGxpbmtlbmQ9InRpdGxlLWdpdCIgZW5kdGVybT0idGl0bGUtZ2l0Ii8+CisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisgIDwvcGFyYT4KKzwvc2VjdDE+CmRpZmYgLS1naXQgYS9kb2NzL2ZhcS90cm91Ymxlc2hvb3RpbmcueG1sIGIvZG9jcy9mYXEvdHJvdWJsZXNob290aW5nLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTIwNjdiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9mYXEvdHJvdWJsZXNob290aW5nLnhtbApAQCAtMCwwICsxLDE3MiBAQAorPHNlY3QxIGlkPSJjaGFwdGVyLXRyb3VibGVzaG9vdGluZyI+CisgIDx0aXRsZSBpZD0idGl0bGUtdHJvdWJsZXNob290aW5nIj5Ucm91Ymxlc2hvb3RpbmcgR1N0cmVhbWVyPC90aXRsZT4KKyAgPHFhbmRhc2V0IGRlZmF1bHRsYWJlbD0icWFuZGEiPgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICA8cXVlc3Rpb24gaWQ9InRyb3VibGVzaG9vdGluZy1taXNzaW5nLXBsdWctaW4iPgorICAgICAgICA8cGFyYT4KK1NvbWUgYXBwbGljYXRpb24gaXMgdGVsbGluZyBtZSB0aGF0IEkgYW0gbWlzc2luZyBhIHBsdWctaW4uICBXaGF0IGRvIEkgZG8gPworICAgICAgICA8L3BhcmE+CisgICAgICA8L3F1ZXN0aW9uPgorCisgICAgICA8YW5zd2VyPgorICAgICAgICA8cGFyYT4KK1dlbGwsIHN0YXJ0IGJ5IGNoZWNraW5nIGlmIHlvdSByZWFsbHkgYXJlIG1pc3NpbmcgdGhlIHBsdWctaW4uCisgIDxwcm9ncmFtbGlzdGluZz4KK2dzdC1pbnNwZWN0IChwbHVnLWluKQorICA8L3Byb2dyYW1saXN0aW5nPgorYW5kIHJlcGxhY2UgKHBsdWctaW4pIHdpdGggdGhlIHBsdWctaW4geW91IHRoaW5rIGlzIG1pc3NpbmcuCitJZiB0aGlzIGRvZXNuJ3QgcmV0dXJuIGFueSByZXN1bHQsIHRoZW4geW91IGVpdGhlciBkb24ndCBoYXZlIGl0IG9yIHlvdXIKK3JlZ2lzdHJ5IGNhbm5vdCBmaW5kIGl0LgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorSWYgeW91J3JlIG5vdCBzdXJlIGVpdGhlciB3YXksIHRoZW4gY2hhbmNlcyBhcmUgZ29vZCB0aGF0IHlvdSBkb24ndCBoYXZlCitpdC4gIFlvdSBzaG91bGQgZ2V0IHRoZSBwbHVnLWluIGFuZCBydW4gZ3N0LXJlZ2lzdGVyIHRvIHJlZ2lzdGVyIGl0LgorSG93IHRvIGdldCB0aGUgcGx1Zy1pbiBkZXBlbmRzIG9uIHlvdXIgZGlzdHJpYnV0aW9uLgorPGl0ZW1pemVkbGlzdD4KKzxsaXN0aXRlbT48cGFyYT5pZiB5b3UgcnVuIEdTdHJlYW1lciB1c2luZyBwYWNrYWdlcyBmb3IgeW91ciBkaXN0cmlidXRpb24sIHlvdQorc2hvdWxkIGNoZWNrIHdoYXQgcGFja2FnZXMgYXJlIGF2YWlsYWJsZSBmb3IgeW91ciBkaXN0cmlidXRpb24gYW5kIHNlZQoraWYgYW55IG9mIHRoZSBhdmFpbGFibGUgcGFja2FnZXMgY29udGFpbnMgdGhlIHBsdWctaW4uCis8L3BhcmE+PC9saXN0aXRlbT4KKzxsaXN0aXRlbT48cGFyYT5pZiB5b3UgcnVuIEdTdHJlYW1lciBmcm9tIGEgc291cmNlIGluc3RhbGwsIHRoZXJlJ3MgYSBnb29kIGNoYW5jZQordGhlIHBsdWctaW4gZGlkbid0IGdldCBidWlsdCBiZWNhdXNlIHlvdSBhcmUgbWlzc2luZyBhbiBleHRlcm5hbCBsaWJyYXJ5LgorV2hlbiB5b3UgcmFuIGNvbmZpZ3VyZSwgeW91IHNob3VsZCBoYXZlIGdvdHRlbiBvdXRwdXQgb2Ygd2hhdCBwbHVnLWlucyBhcmUKK2dvaW5nIHRvIGJlIGJ1aWx0LiAgWW91IGNhbiByZS1ydW4gY29uZmlndXJlIHRvIHNlZSBpZiBpdCdzIHRoZXJlLgorSWYgaXQgaXNuJ3QsIHRoZXJlIGlzIGEgZ29vZCByZWFzb24gd2h5IGl0IGlzIG5vdCBnZXR0aW5nIGJ1aWx0LgorVGhlIG1vc3QgbGlrZWx5IGlzIHRoYXQgeW91J3JlIG1pc3NpbmcgdGhlIGxpYnJhcnkgeW91IG5lZWQgZm9yIGl0LgorQ2hlY2sgdGhlIFJFQURNRSBmaWxlIGluIGdzdC1wbHVnaW5zIHRvIHNlZSB3aGF0IGxpYnJhcnkgeW91IG5lZWQuCitNYWtlIHN1cmUgdG8gcmVtZW1iZXIgdG8gcmUtcnVuIGNvbmZpZ3VyZSBhZnRlciBpbnN0YWxsaW5nIHRoZSBzdXBwb3J0aW5nCitsaWJyYXJ5ICEKKzwvcGFyYT48L2xpc3RpdGVtPgorPGxpc3RpdGVtPjxwYXJhPgoraWYgeW91IHJ1biBHU3RyZWFtZXIgZnJvbSBnaXQsIHRoZSBzYW1lIGxvZ2ljIGFwcGxpZXMgYXMgZm9yIGEgc291cmNlIGluc3RhbGwuCitHbyBvdmVyIHRoZSByZWFzb25zIHdoeSB0aGUgcGx1Zy1pbiBkaWRuJ3QgZ2V0IGNvbmZpZ3VyZWQgZm9yIGJ1aWxkLgorQ2hlY2sgb3V0cHV0IG9mIGNvbmZpZy5sb2cgZm9yIGEgY2x1ZSBhcyB0byB3aHkgaXQgZG9lc24ndCBnZXQgYnVpbHQgaWYKK3lvdSdyZSBzdXJlIHlvdSBoYXZlIHRoZSBsaWJyYXJ5IG5lZWRlZCBpbnN0YWxsZWQgaW4gYSBzYW5lIHBsYWNlLgorPC9wYXJhPjwvbGlzdGl0ZW0+Cis8L2l0ZW1pemVkbGlzdD4KKworICAgICAgICA8L3BhcmE+CisgICAgICA8L2Fuc3dlcj4KKyAgICAgPC9xYW5kYWVudHJ5PgorCisgICAgIDxxYW5kYWVudHJ5PgorICAgICAgPHF1ZXN0aW9uIGlkPSJ0cm91Ymxlc2hvb3Rpbmctb2xkLXBsdWctaW5zIj4KKyAgICAgICAgPHBhcmE+CitJIGdldCBhbiBlcnJvciB0aGF0IHNheXMgc29tZXRoaW5nIGxpa2UKKworKHByb2Nlc3M6MjY2MjYpOiBHTGliLUdPYmplY3QtV0FSTklORyAqKjogc3BlY2lmaWVkIGluc3RhbmNlIHNpemUgZm9yIHR5cGUgCitgRFZEUmVhZFNyYycgaXMgc21hbGxlciB0aGFuIHRoZSBwYXJlbnQgdHlwZSdzIGBHc3RFbGVtZW50JyBpbnN0YW5jZSBzaXplCitXaGF0J3MgIHdyb25nID8KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9xdWVzdGlvbj4KKworICAgICAgPGFuc3dlcj4KKyAgICAgICAgPHBhcmE+CitJZiB5b3UgcnVuIEdTdHJlYW1lciBmcm9tIGdpdCB1bmluc3RhbGxlZCwgaXQgbWVhbnMgdGhhdCBzb21ldGhpbmcgY2hhbmdlZCBpbgordGhlIGNvcmUgdGhhdCByZXF1aXJlcyBhIHJlY29tcGlsYXRpb24gaW4gdGhlIHBsdWdpbnMuIFJlY29tcGlsZSB0aGUKK3BsdWdpbnMgYnkgZG9pbmcgIm1ha2UgY2xlYW4gJmFtcDsmYW1wOyBtYWtlIi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KK0lmIHlvdSBydW4gR1N0cmVhbWVyIGluc3RhbGxlZCwgaXQgcHJvYmFibHkgbWVhbnMgdGhhdCB5b3UgcnVuIHRoZSBwbHVnaW5zCithZ2FpbnN0IGEgZGlmZmVyZW50IChpbmNvbXBhdGlibGUpIHZlcnNpb24gdGhhbiB0aGV5IHdlcmUgY29tcGlsZWQgYWdhaW5zdCwKK3doaWNoIHVzdXNhbGx5IG1lYW5zIHRoYXQgeW91IHJ1biBtdWx0aXBsZSBpbnN0YWxsYXRpb25zIG9mIEdTdHJlYW1lci4KK1JlbW92ZSB0aGUgb2xkIG9uZXMgYW5kIC0gaWYgbmVlZGVkIC0gcmVjb21waWxlIGFnYWluIHRvIGVuc3VyZSB0aGF0IGl0IGlzCit1c2luZyB0aGUgcmlnaHQgdmVyc2lvbi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KK05vdGUgdGhhdCB3ZSBzdHJvbmdseSByZWNvbW1lbmQgdXNpbmcgRGViaWFuIG9yIFJQTSBwYWNrYWdlcywgc2luY2UgeW91IHdpbGwKK25vdCBnZXQgc3VjaCBpc3N1ZXMgaWYgeW91IHVzZSBwcm92aWRlZCBwYWNrYWdlcy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICA8cXVlc3Rpb24gaWQ9InRyb3VibGVzaG9vdGluZy1zZWdmYXVsdCI+CisgICAgICAgIDxwYXJhPgorVGhlIEdTdHJlYW1lciBhcHBsaWNhdGlvbiBJIHVzZWQgc3RvcHMgd2l0aCBhIHNlZ21lbnRhdGlvbiBmYXVsdC4gIFdoYXQgY2FuCitJIGRvID8KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9xdWVzdGlvbj4KKworICAgICAgPGFuc3dlcj4KKyAgICAgICAgPHBhcmE+CitUaGVyZSBhcmUgdHdvIHRoaW5ncyB5b3UgY2FuIGRvLiAgSWYgeW91IGNvbXBpbGVkIEdTdHJlYW1lciB3aXRoIHNwZWNpZmljCitvcHRpbWl6YXRpb24gY29tcGlsYXRpb24gZmxhZ3MsIHlvdSBzaG91bGQgdHJ5IHJlY29tcGlsaW5nIEdTdHJlYW1lciwKK3RoZSBhcHBsaWNhdGlvbiBhbmQgdGhlIHBsdWctaW5zIHdpdGhvdXQgYW55IG9wdGltaXphdGlvbiBmbGFncy4gIFRoaXMgYWxsb3dzCit5b3UgdG8gdmVyaWZ5IGlmIHRoZSBwcm9ibGVtIGlzIGR1ZSB0byBvcHRpbWl6YXRpb24gb3IgZHVlIHRvIGJhZCBjb2RlLgorU2Vjb25kLCBpdCB3aWxsIGFsc28gYWxsb3cgeW91IHRvIHByb3ZpZGUgYSByZWFzb25hYmxlIGJhY2t0cmFjZSBpbiBjYXNlCit0aGUgc2VnbWVudGF0aW9uIGZhdWx0IHN0aWxsIG9jY3Vycy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KK1RoZSBzZWNvbmQgdGhpbmcgeW91IGNhbiBkbyBpcyBsb29rIGF0IHRoZSBiYWNrdHJhY2UgdG8gZ2V0IGFuIGlkZWEgb2Ygd2hlcmUKK3RoaW5ncyBhcmUgZ29pbmcgd3JvbmcsIG9yIGdpdmUgdXMgYW4gaWRlYSBvZiB3aGF0IGlzIGdvaW5nIHdyb25nLgorVG8gcHJvdmlkZSBhIGJhY2t0cmFjZSwgeW91IHNob3VsZAorPG9yZGVyZWRsaXN0PgorPGxpc3RpdGVtPjxwYXJhPgorICBydW4gdGhlIGFwcGxpY2F0aW9uIGluIGdkYiBieSBzdGFydGluZyBpdCB3aXRoCisgIDxwcm9ncmFtbGlzdGluZz4KKyAgICBnZGIgKGdzdC1hcHBsaWNhdGlvbikKKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgKElmIHRoZSBhcHBsaWNhdGlvbiBpcyBpbiBhIHNvdXJjZSB0cmVlIGluc3RlYWQgb2YgaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0sCisgIHlvdSBtaWdodCB3YW50IHRvIHB1dCAibGlidG9vbCIgYmVmb3JlICJnZGIiKQorPC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+CisgIFBhc3Mgb24gdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgdG8gdGhlIGFwcGxpY2F0aW9uIGJ5IHR5cGluZworICA8cHJvZ3JhbWxpc3Rpbmc+CisgICAgc2V0IGFyZ3MgKHRoZSBhcmd1bWVudHMgdG8gdGhlIGFwcGxpY2F0aW9uKQorICA8L3Byb2dyYW1saXN0aW5nPgorICBhdCB0aGUgKGdkYikgcHJvbXB0Cis8L3BhcmE+PC9saXN0aXRlbT4KKzxsaXN0aXRlbT48cGFyYT4KKyAgVHlwZSAicnVuIiBhdCB0aGUgKGdkYikgcHJvbXB0IGFuZCB3YWl0IGZvciB0aGUgYXBwbGljYXRpb24gdG8KKyAgc2VnZmF1bHQuICBUaGUgYXBwbGljYXRpb24gd2lsbCBydW4gYSBsb3Qgc2xvd2VyLCBob3dldmVyLgorPC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+CisgIEFmdGVyIHRoZSBzZWdmYXVsdCwgdHlwZSAiYnQiIHRvIGdldCBhIGJhY2t0cmFjZS4gIFRoaXMgaXMgYSBzdGFjayBvZgorICBmdW5jdGlvbiBjYWxscyBkZXRhaWxpbmcgdGhlIHBhdGggZnJvbSBtYWluICgpIHRvIHdoZXJlIHRoZSBjb2RlIGlzCisgIGN1cnJlbnRseSBhdC4KKzwvcGFyYT48L2xpc3RpdGVtPgorPGxpc3RpdGVtPjxwYXJhPgorICBJZiB0aGUgYXBwbGljYXRpb24geW91J3JlIHRyeWluZyB0byBkZWJ1ZyBjb250YWlucyB0aHJlYWRzLCBpdCBpcyBhbHNvCisgIHVzZWZ1bCB0byBkbworICA8cHJvZ3JhbWxpc3Rpbmc+CisgICAgaW5mbyB0aHJlYWRzCisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIGFuZCBnZXQgYmFja3RyYWNlcyBvZiBhbGwgb2YgdGhlIHRocmVhZHMgaW52b2x2ZWQsIGJ5IHN3aXRjaGluZyB0bworICBhIGRpZmZlcmVudCB0aHJlYWQgdXNpbmcgInRocmVhZCAobnVtYmVyKSIgYW5kIHRoZW4gYWdhaW4gcmVxdWVzdGluZworICBhIGJhY2t0cmFjZSB1c2luZyAiYnQiLgorPC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+CisgIElmIHlvdSBjYW4ndCBvciBkb24ndCB3YW50IHRvIHdvcmsgb3V0IHRoZSBwcm9ibGVtIHlvdXJzZWxmLCBhIGNvcHkgYW5kIHBhc3RlCisgIG9mIGFsbCB0aGlzIGluZm9ybWF0aW9uIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB5b3VyIAorICA8bGluayBsaW5rZW5kPSJ1c2luZy1idWdzLXdoZXJlIj5idWcgcmVwb3J0PC9saW5rPi4KKzwvcGFyYT48L2xpc3RpdGVtPgorPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICA8cXVlc3Rpb24gaWQ9InRyb3VibGVzaG9vdGluZy1nc3QtcmVnaXN0ZXIiPgorICAgICAgICA8cGFyYT4KK09uIG15IHN5c3RlbSB0aGVyZSBpcyBubyBnc3QtcmVnaXN0ZXIgY29tbWFuZC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9xdWVzdGlvbj4KKworICAgICAgPGFuc3dlcj4KKyAgICAgICAgPHBhcmE+CitHU3RyZWFtZXIgdmVyc2lvbiAwLjEwIGRvZXMgbm90IG5lZWQgdGhpcyBhbnltb3JlLiBUaGUgcmVnaXN0cnkgd2lsbAorYmUgcmVidWlsdCBhdXRvbWF0aWNhbGx5LiBJZiB5b3Ugc3VzcGVjdCB0aGUgcmVnaXN0cnkgaXMgYnJva2VuLCBqdXN0IGRlbGV0ZSB0aGUKKzxmaWxlbmFtZT5yZWdpc3RyeS4qLnhtbDwvZmlsZW5hbWU+IGZpbGVzIHVuZGVyIDxmaWxlbmFtZT4kSE9NRS8uZ3N0cmVhbWVyLTAuWC88L2ZpbGVuYW1lPgorYW5kIHJ1bgorPHByb2dyYW1saXN0aW5nPgorICBnc3QtaW5zcGVjdAorPC9wcm9ncmFtbGlzdGluZz4KK3RvIHJlYnVpbGQgdGhlIHJlZ2lzdHJ5LgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisgICAgCisgIDwvcWFuZGFzZXQ+Cis8L3NlY3QxPgpkaWZmIC0tZ2l0IGEvZG9jcy9mYXEvdXNpbmcueG1sIGIvZG9jcy9mYXEvdXNpbmcueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZTdlZWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2ZhcS91c2luZy54bWwKQEAgLTAsMCArMSwyMDggQEAKKzxzZWN0MSBpZD0iY2hhcHRlci11c2luZyI+CisgIDx0aXRsZSBpZD0idGl0bGUtdXNpbmciPlVzaW5nIEdTdHJlYW1lcjwvdGl0bGU+CisgIDxxYW5kYXNldCBkZWZhdWx0bGFiZWw9InFhbmRhIj4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgPHF1ZXN0aW9uIGlkPSJ1c2luZy1nZXR0aW5nLXN0YXJ0ZWQiPgorICAgICAgICA8cGFyYT5PaywgSSd2ZSBpbnN0YWxsZWQgR1N0cmVhbWVyLiAgV2hhdCBjYW4gSSBkbyBuZXh0ID88L3BhcmE+CisgICAgICA8L3F1ZXN0aW9uPgorCisgICAgICA8YW5zd2VyPgorICAgICAgICA8cGFyYT4KK0ZpcnN0IG9mIGFsbCwgdmVyaWZ5IHRoYXQgeW91IGhhdmUgYSB3b3JraW5nIHJlZ2lzdHJ5IGFuZCB0aGF0IHlvdSBjYW4KK2luc3BlY3QgdGhlbSBieSB0eXBpbmcKKzxwcm9ncmFtbGlzdGluZz4KKyQgZ3N0LWluc3BlY3QgZmFrZXNyYworPC9wcm9ncmFtbGlzdGluZz4KK1RoaXMgc2hvdWxkIHByaW50IG91dCBhIGJ1bmNoIG9mIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgcGFydGljdWxhciBlbGVtZW50LgorSWYgdGhpcyB0ZWxscyB5b3UgdGhhdCB0aGVyZSBpcyAibm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiIsIHlvdSBoYXZlbid0CitpbnN0YWxsZWQgR1N0cmVhbWVyIGNvcnJlY3RseS4gIFBsZWFzZSBjaGVjaworPGxpbmsgbGlua2VuZD0iY2hhcHRlci1nZXR0aW5nIj5ob3cgdG8gZ2V0IEdTdHJlYW1lcjwvbGluaz4KK0lmIHRoaXMgZmFpbHMgd2l0aCBhbnkgb3RoZXIgbWVzc2FnZSwgd2Ugd291bGQgYXBwcmVjaWF0ZSBhCis8bGluayBsaW5rZW5kPSJ1c2luZy1idWdzLXdoZXJlIj5idWcgcmVwb3J0PC9saW5rPi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KK0l0J3MgdGltZSB0byB0cnkgb3V0IGEgZmV3IHRoaW5ncy4gIFN0YXJ0IHdpdGggZ3N0LWxhdW5jaCBhbmQgdHdvIHBsdWctaW5zCit0aGF0IHlvdSByZWFsbHkgc2hvdWxkIGhhdmUgOiBmYWtlc3JjIGFuZCBmYWtlc2luay4gIFRoZXkgZG8gbm90aGluZyBleGNlcHQKK3Bhc3MgZW1wdHkgYnVmZmVycy4gVHlwZSB0aGlzIGF0IHRoZSBjb21tYW5kLWxpbmUgOgorPHByb2dyYW1saXN0aW5nPgorJCBnc3QtbGF1bmNoIC12IGZha2VzcmMgbnVtLWJ1ZmZlcnM9MyAhIGZha2VzaW5rCis8L3Byb2dyYW1saXN0aW5nPgorVGhpcyB3aWxsIHByaW50IG91dCBvdXRwdXQgdGhhdCBsb29rcyBzaW1pbGFyIHRvIHRoaXMgOgorPHByb2dyYW1saXN0aW5nPgorUlVOTklORyBwaXBlbGluZSAuLi4KK2Zha2VzcmMwOiBsYXN0LW1lc3NhZ2UgPSAiZ2V0ICAgICAgKioqKioqKiAoZmFrZXNyYzA6c3JjKWd0OyAoMCBieXRlcywgMCkgMHg4MDU3NTEwIgorZmFrZXNpbmswOiBsYXN0LW1lc3NhZ2UgPSAiY2hhaW4gICAqKioqKioqIChmYWtlc2luazA6c2luaylsdDsgKDAgYnl0ZXMsIDApIDB4ODA1NzUxMCIKK2Zha2VzcmMwOiBsYXN0LW1lc3NhZ2UgPSAiZ2V0ICAgICAgKioqKioqKiAoZmFrZXNyYzA6c3JjKWd0OyAoMCBieXRlcywgMSkgMHg4MDU3NTEwIgorZmFrZXNpbmswOiBsYXN0LW1lc3NhZ2UgPSAiY2hhaW4gICAqKioqKioqIChmYWtlc2luazA6c2luaylsdDsgKDAgYnl0ZXMsIDEpIDB4ODA1NzUxMCIKK2Zha2VzcmMwOiBsYXN0LW1lc3NhZ2UgPSAiZ2V0ICAgICAgKioqKioqKiAoZmFrZXNyYzA6c3JjKWd0OyAoMCBieXRlcywgMikgMHg4MDU3NTEwIgorZmFrZXNpbmswOiBsYXN0LW1lc3NhZ2UgPSAiY2hhaW4gICAqKioqKioqIChmYWtlc2luazA6c2luaylsdDsgKDAgYnl0ZXMsIDIpIDB4ODA1NzUxMCIKK2V4ZWN1dGlvbiBlbmRlZCBhZnRlciA1IGl0ZXJhdGlvbnMgKHN1bSAzMDE0NzkwMDAgbnMsIGF2ZXJhZ2UgNjAyOTU4MDAgbnMsIG1pbiAzMDAwIG5zLCBtYXggMTA1NDgyMDAwIG5zKQorPC9wcm9ncmFtbGlzdGluZz4KKyhTb21lIHBhcnRzIG9mIG91dHB1dCBoYXZlIGJlZW4gcmVtb3ZlZCBmb3IgY2xhcml0eSkgIElmIGl0IGxvb2tzIHNpbWlsYXIsIHRoZW4KK0dTdHJlYW1lciBpdHNlbGYgaXMgcnVubmluZyBjb3JyZWN0bHkuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgPHF1ZXN0aW9uIGlkPSJ1c2luZy1zb3VuZCI+CisgICAgICAgIDxwYXJhPkNhbiBteSBzeXN0ZW0gcGxheSBzb3VuZCB0aHJvdWdoIEdTdHJlYW1lciA/PC9wYXJhPgorICAgICAgPC9xdWVzdGlvbj4KKworICAgICAgPGFuc3dlcj4KKyAgICAgICAgPHBhcmE+CitZb3UgY2FuIHRlc3QgdGhpcyBieSB0cnlpbmcgdG8gcGxheSBhIHNpbmUgdG9uZS4gIEZvciB0aGlzLCB5b3UgbmVlZCB0bworbGluayB0aGUgYXVkaW90ZXN0c3JjIGVsZW1lbnQgdG8gYW4gb3V0cHV0IGVsZW1lbnQgdGhhdCBtYXRjaGVzIHlvdXIgaGFyZHdhcmUuCitBIChub24tY29tcGxldGUpIGxpc3Qgb2Ygb3V0cHV0IHBsdWctaW5zIGZvciBhdWRpbyBpcworPGl0ZW1pemVkbGlzdD4KKzxsaXN0aXRlbT48cGFyYT5vc3NzaW5rIGZvciBPU1Mgb3V0cHV0PC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+ZXNkc2luayBmb3IgRVNvdW5kIG91dHB1dDwvcGFyYT48L2xpc3RpdGVtPgorPGxpc3RpdGVtPjxwYXJhPmFydHNkc2luayBmb3IgYVJUcyBvdXRwdXQgKG5vdCBwb3J0ZWQgdG8gMC4xMCB5ZXQpPC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+YWxzYXNpbmsgZm9yIEFMU0Egb3V0cHV0PC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+YWxzYXNwZGlmc2luayBmb3IgQUxTQSBTL1BESUYgb3V0cHV0PC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+amFja2F1ZGlvc2luayBmb3IgSkFDSyBvdXRwdXQ8L3BhcmE+PC9saXN0aXRlbT4KKzwvaXRlbWl6ZWRsaXN0PgorRmlyc3Qgb2YgYWxsLCBydW4gZ3N0LWluc3BlY3Qgb24gdGhlIG91dHB1dCBwbHVnLWluIHlvdSB3YW50IHRvIHVzZSB0bworbWFrZSBzdXJlIHlvdSBoYXZlIGl0IGluc3RhbGxlZC4gIEZvciBleGFtcGxlLCBpZiB5b3UgdXNlIE9TUywgcnVuCis8cHJvZ3JhbWxpc3Rpbmc+CiskIGdzdC1pbnNwZWN0IG9zc3NpbmsKKzwvcHJvZ3JhbWxpc3Rpbmc+CithbmQgc2VlIGlmIHRoYXQgcHJpbnRzIG91dCBhIGJ1bmNoIG9mIHByb3BlcnRpZXMgZm9yIHRoZSBwbHVnLWluLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorVGhlbiB0cnkgdG8gcGxheSB0aGUgc2luZSB0b25lIGJ5IHJ1bm5pbmcKKzxwcm9ncmFtbGlzdGluZz4KKyQgZ3N0LWxhdW5jaCBhdWRpb3Rlc3RzcmMgISBhdWRpb2NvbnZlcnQgISBhdWRpb3Jlc2FtcGxlICEgb3Nzc2luaworPC9wcm9ncmFtbGlzdGluZz4KK2FuZCBzZWUgaWYgeW91IGhlYXIgc29tZXRoaW5nLiAgTWFrZSBzdXJlIHlvdXIgdm9sdW1lIGlzIHR1cm5lZCB1cCwKK2J1dCBhbHNvIG1ha2Ugc3VyZSBpdCBpcyBub3QgdG9vIGxvdWQgYW5kIHlvdSBhcmUgbm90IHdlYXJpbmcgeW91ciBoZWFkcGhvbmVzLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorSW4gR05PTUUsIHlvdSBjYW4gY29uZmlndXJlIGF1ZGlvIG91dHB1dCBmb3IgbW9zdCBhcHBsaWNhdGlvbnMgYnkgcnVubmluZworPHByb2dyYW1saXN0aW5nPgorJCBnc3RyZWFtZXItcHJvcGVydGllcworPC9wcm9ncmFtbGlzdGluZz4KK3doaWNoIGNhbiBhbHNvIGJlIGZvdW5kIGluIHRoZSBzdGFydCBtZW51IChBcHBsaWNhdGlvbnMgLT4gUHJlZmVyZW5jZXMgLT4KK011bHRpbWVkaWEgU3lzdGVtcyBTZWxlY3RvcikuIEluIEtERSwgdGhlcmUgaXMgbm90IHlldCBhIHNoYXJlZCB3YXkgb2YKK3NldHRpbmcgYXVkaW8gb3V0cHV0IGZvciBhbGwgYXBwbGljYXRpb25zOyBob3dldmVyLCBhcHBsaWNhdGlvbnMgc3VjaAorYXMgQW1hcm9rIGFsbG93IHlvdSB0byBzcGVjaWZ5IGFuIGF1ZGlvIG91dHB1dCBpbiB0aGVpciBwcmVmZXJlbmNlcyBkaWFsb2cuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgPHF1ZXN0aW9uIGlkPSJ1c2luZy1nc3QtaW5zcGVjdCI+CisgICAgICAgIDxwYXJhPkhvdyBjYW4gSSBzZWUgd2hhdCBHU3RyZWFtZXIgcGx1Z2lucyBJIGhhdmUgb24gbXkgc3lzdGVtID88L3BhcmE+CisgICAgICA8L3F1ZXN0aW9uPgorCisgICAgICA8YW5zd2VyPgorICAgICAgICA8cGFyYT4KK1RvIGRvIHRoaXMgeW91IHVzZSB0aGUgZ3N0LWluc3BlY3QKK2NvbW1hbmQtbGluZSB0b29sLCB3aGljaCBjb21lcyBzdGFuZGFyZCB3aXRoIEdTdHJlYW1lci4KK0ludm9rZWQgd2l0aG91dCBhbnkgYXJndW1lbnRzLAorPHByb2dyYW1saXN0aW5nPgorJCBnc3QtaW5zcGVjdAorPC9wcm9ncmFtbGlzdGluZz4KK3dpbGwgcHJpbnQgb3V0IGEgbGlzdGluZyBvZiBpbnN0YWxsZWQgcGx1Z2lucy4KK1RvIGxlYXJuIG1vcmUgYWJvdXQgYSBwYXJ0aWN1bGFyIHBsdWdpbiwgcGFzcyBpdHMgbmFtZSBvbiB0aGUgY29tbWFuZCBsaW5lLiAKK0ZvciBleGFtcGxlLAorPHByb2dyYW1saXN0aW5nPgorJCBnc3QtaW5zcGVjdCB2b2x1bWUKKzwvcHJvZ3JhbWxpc3Rpbmc+Cit3aWxsIGdpdmUgeW91IGluZm9ybWF0aW9uIGFib3V0IHRoZSB2b2x1bWUgcGx1Z2luLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorQWxzbywgaWYgeW91IGluc3RhbGwgdGhlIGdzdC1lZGl0b3IgcGFja2FnZSwgeW91IHdpbGwgaGF2ZSBhIGdyYXBoaWNhbCAKK3BsdWdpbiBicm93c2VyIGF2YWlsYWJsZSwgZ3N0LWluc3BlY3QtZ3VpLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgIDxxdWVzdGlvbiBpZD0idXNpbmctYnVncy13aGVyZSI+CisgICAgICAgIDxwYXJhPldoZXJlIHNob3VsZCBJIHJlcG9ydCBidWdzID88L3BhcmE+CisgICAgICA8L3F1ZXN0aW9uPgorCisgICAgICA8YW5zd2VyPgorICAgICAgICA8cGFyYT4KK0J1ZyBtYW5hZ2VtZW50IGlzIG5vdyBob3N0ZWQgb24gR05PTUUncyBCdWd6aWxsYSBhdAorPHVsaW5rIHVybD0iaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZyI+aHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZzwvdWxpbms+LAordW5kZXIgdGhlIHByb2R1Y3QgR1N0cmVhbWVyLiAKK1VzaW5nIGJ1Z3ppbGxhIHlvdSBjYW4gdmlldyBwYXN0IGJ1ZyBoaXN0b3J5LCByZXBvcnQgbmV3IGJ1Z3MsIGV0Yy4KK0J1Z3ppbGxhIHJlcXVpcmVzIHlvdSB0byBtYWtlIGFuIGFjY291bnQgaGVyZSwgd2hpY2ggbWlnaHQgc2VlbSBjdW1iZXJzb21lLAorYnV0IGFsbG93cyB1cyB0byBhdCBsZWFzdCBoYXZlIGEgY2hhbmNlIGF0IGNvbnRhY3RpbmcgeW91IGZvciBmdXJ0aGVyCitpbmZvcm1hdGlvbiwgYXMgd2Ugd2lsbCBtb3N0IGxpa2VseSBoYXZlIHRvLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgPHF1ZXN0aW9uIGlkPSJ1c2luZy1idWdzLWhvdyI+CisgICAgICAgIDxwYXJhPkhvdyBzaG91bGQgSSByZXBvcnQgYnVncyA/PC9wYXJhPgorICAgICAgPC9xdWVzdGlvbj4KKworICAgICAgPGFuc3dlcj4KKyAgICAgICAgPHBhcmE+CitXaGVuIGRvaW5nIGEgYnVnIHJlcG9ydCwgeW91IHNob3VsZCBhdCBsZWFzdCBkZXNjcmliZQorPGl0ZW1pemVkbGlzdD4KKzxsaXN0aXRlbT48cGFyYT55b3VyIGRpc3RyaWJ1dGlvbjwvcGFyYT48L2xpc3RpdGVtPgorPGxpc3RpdGVtPjxwYXJhPgoraG93IHlvdSBpbnN0YWxsZWQgR1N0cmVhbWVyIChmcm9tIGdpdCwgc291cmNlLCBwYWNrYWdlcywgd2hpY2ggPyk8L3BhcmE+PC9saXN0aXRlbT4KKzxsaXN0aXRlbT48cGFyYT5pZiB5b3UgaW5zdGFsbGVkIEdTdHJlYW1lciBiZWZvcmU8L3BhcmE+PC9saXN0aXRlbT4KKzwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorSWYgdGhlIGFwcGxpY2F0aW9uIHlvdSBhcmUgaGF2aW5nIHByb2JsZW1zIHdpdGggaXMgc2VnZmF1bHRpbmcsIHRoZW4KK3Byb3ZpZGUgdXMgd2l0aCB0aGUgbmVjZXNzYXJ5IGdkYiBvdXRwdXQuICBTZWUKKzx4cmVmIGxpbmtlbmQ9InRyb3VibGVzaG9vdGluZy1zZWdmYXVsdCIgZW5kdGVybT0idHJvdWJsZXNob290aW5nLXNlZ2ZhdWx0Ii8+CisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgPHF1ZXN0aW9uIGlkPSJ1c2luZy1nc3QtbGF1bmNoIj4KKyAgICAgICAgPHBhcmE+SG93IGRvIEkgdXNlIHRoZSBHU3RyZWFtZXIgY29tbWFuZCBsaW5lIGludGVyZmFjZSA/PC9wYXJhPgorICAgICAgPC9xdWVzdGlvbj4KKyAgICAgIDxhbnN3ZXI+CisgICAgICAgIDxwYXJhPgorWW91IGFjY2VzcyB0aGUgR1N0cmVhbWVyIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UgdXNpbmcgdGhlIGNvbW1hbmQgZ3N0LWxhdW5jaC4KK1RvIGRlY29kZSBhbiBtcDMgYW5kIHBsYXkgaXQgdGhyb3VnaCBPU1MsIHlvdSBjb3VsZCB1c2UKKzxwcm9ncmFtbGlzdGluZz4KK2dzdC1sYXVuY2ggZmlsZXNyYyBsb2NhdGlvbj10aGVzb25nLm1wMyAhIG1hZCAhIGF1ZGlvY29udmVydCAhCithdWRpb3Jlc2FtcGxlICEgb3Nzc2luaworPC9wcm9ncmFtbGlzdGluZz4uCitNb3JlIGV4YW1wbGVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgZ3N0LWxhdW5jaCBtYW4gcGFnZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KK1RvIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHRoZSByaWdodCBjb2RlYyBpbiBhIHBpcGVsaW5lLCB0cnkgCis8cHJvZ3JhbWxpc3Rpbmc+Citnc3QtbGF1bmNoIGZpbGVzcmMgbG9jYXRpb249bXktcmFuZG9tLW1lZGlhLWZpbGUubXBlZyAhIGRlY29kZWJpbiAhCisgYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSAhIG9zc3NpbmsKKzwvcHJvZ3JhbWxpc3Rpbmc+Lgorb3IKKzxwcm9ncmFtbGlzdGluZz4KK2dzdC1sYXVuY2ggZmlsZXNyYyBsb2NhdGlvbj1teS1yYW5kb20tbWVkaWEtZmlsZS5tcGVnICEgZGVjb2RlYmluICEKKyBmZm1wZWdjb2xvcnNwYWNlICEgeHZpbWFnZXNpbmsKKzwvcHJvZ3JhbWxpc3Rpbmc+CitTb21ldGhpbmcgbW9yZSBjb21wbGljYXRlZDoKKzxwcm9ncmFtbGlzdGluZz4KK2dzdC1sYXVuY2ggZmlsZXNyYyBsb2NhdGlvbj1teS1yYW5kb20tbWVkaWEtZmlsZS5tcGVnICEgZGVjb2RlYmluIG5hbWU9ZGVjb2RlcgorICAgZGVjb2Rlci4gISBmZm1wZWdjb2xvcnNwYWNlICEgeHZpbWFnZXNpbmsKKyAgIGRlY29kZXIuICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSAhIG9zc3NpbmsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CitXZSBhbHNvIGhhdmUgYSBiYXNpYyBtZWRpYSBwbGF5aW5nIHBsdWdpbiB0aGF0IHdpbGwgdGFrZSBjYXJlIG9mIG1vc3QgdGhpbmdzCitmb3IgeW91LiBUaGlzIHBsdWdpbiBpcyBjYWxsZWQgcGxheWJpbi4gVHJ5IHRoaXM6Cis8cHJvZ3JhbWxpc3Rpbmc+Citnc3QtbGF1bmNoIHBsYXliaW4gdXJpPWZpbGU6Ly8vaG9tZS9qb2UvbXktcmFuZG9tLW1lZGlhLWZpbGUubXBlZworPC9wcm9ncmFtbGlzdGluZz4KK1RoaXMgc2hvdWxkIHBsYXkgdGhlIGZpbGUgaWYgdGhlIGZvcm1hdCBpcyBzdXBwb3J0ZWQsIGllLiB5b3UgaGF2ZSBhbGwgdGhlCituZWNlc3NhcnkgZGVtdXhpbmcgYW5kIGRlY29kaW5nIGFuZCBzb21lIG91dHB1dCBwbHVnaW5zIGluc3RhbGxlZC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorICA8L3FhbmRhc2V0PgorPC9zZWN0MT4KZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L01ha2VmaWxlLmFtIGIvZG9jcy9nc3QvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNiZjU2MAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsODcgQEAKKyMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbgorCisjIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUsIGUuZy4gJ2dsaWInLgorIyBET0NfTU9EVUxFPWdzdHJlYW1lci1AR1NUX01BSk9STUlOT1JACitET0NfTU9EVUxFPWdzdHJlYW1lcgorCisjIGRvbid0IHdhbnQgJChET0NfTU9EVUxFKS1zY2FuLmMgdG8gYmUgYnVpbHQgd2l0aCAtV2Vycm9yCitFUlJPUl9DRkxBR1M9CisKK0JVSUxUX1NPVVJDRVM9Z3N0cmVhbWVyLnR5cGVzCisKKyMgZm9yIHVwbG9hZC1kb2MubWFrCitET0M9Z3N0cmVhbWVyCitGT1JNQVRTPWh0bWwKK2h0bWw6IGh0bWwtYnVpbGQuc3RhbXAKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb21tb24vdXBsb2FkLWRvYy5tYWsKKworIyBUaGUgdG9wLWxldmVsIFNHTUwgZmlsZS4gQ2hhbmdlIGl0IGlmIHlvdSB3YW50LgorRE9DX01BSU5fU0dNTF9GSUxFPSQoRE9DX01PRFVMRSktZG9jcy5zZ21sCisKKyMgVGhlIGZpbGVzIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBjb2RlLiBSZWxhdGl2ZSB0byAkKHRvcF9zcmNkaXIpLgorIyBndGstZG9jIHdpbGwgc2VhcmNoIGFsbCAuYyAmIC5oIGZpbGVzIGJlbmVhdGggaGVyZSBmb3IgaW5saW5lIGNvbW1lbnRzCisjIGRvY3VtZW50aW5nIGZ1bmN0aW9ucyBhbmQgbWFjcm9zLgorRE9DX1NPVVJDRV9ESVIgPSAkKHRvcF9zcmNkaXIpL2dzdAorCisjIEV4dHJhIG9wdGlvbnMgdG8gc3VwcGx5IHRvIGd0a2RvYy1zY2FuLgorU0NBTl9PUFRJT05TPS0tZGVwcmVjYXRlZC1ndWFyZHM9IkdTVF9ESVNBQkxFX0RFUFJFQ0FURUQiCisKKyMgRXh0cmEgb3B0aW9ucyB0byBzdXBwbHkgdG8gZ3RrZG9jLW1rZGIuCitNS0RCX09QVElPTlM9LS1zZ21sLW1vZGUgLS1vdXRwdXQtZm9ybWF0PXhtbCAtLWlnbm9yZS1maWxlcz1wYXJzZQorCisjIEV4dHJhIG9wdGlvbnMgdG8gc3VwcGx5IHRvIGd0a2RvYy1maXhyZWYuCitGSVhYUkVGX09QVElPTlM9LS1leHRyYS1kaXI9JChHTElCX1BSRUZJWCkvc2hhcmUvZ3RrLWRvYy9odG1sCisKKyMgVXNlZCBmb3IgZGVwZW5kZW5jaWVzLgorSEZJTEVfR0xPQj0kKHRvcF9zcmNkaXIpL2dzdC8qLmgKK0NGSUxFX0dMT0I9JCh0b3Bfc3JjZGlyKS9nc3QvKi5jCisKKyMgSGVhZGVyIGZpbGVzIHRvIGlnbm9yZSB3aGVuIHNjYW5uaW5nLiBVc2UgYmFzZSBmaWxlIG5hbWUsIG5vIHBhdGhzCitJR05PUkVfSEZJTEVTPSBcCisJZ2V0dGV4dC5oIFwKKwlnbGliLWNvbXBhdC1wcml2YXRlLmggXAorCWdsaWItY29tcGF0LmggXAorCWdzdC1pMThuLWFwcC5oIFwKKwlnc3QtaTE4bi1saWIuaCBcCisJZ3N0X3ByaXZhdGUuaCBcCisJZ3N0ZWxlbWVudGRldGFpbHMuaCBcCisJZ3N0bWFyc2hhbC5oIFwKKwlnc3RtYWNyb3MuaCBcCisJXAorCWdyYW1tYXIudGFiLmggXAorCWdyYW1tYXIudGFiLnByZS5oIFwKKwltYXRoLWNvbXBhdC5oIFwKKwl0eXBlcy5oCisKK2dzdC11bml2ZXJzZS5zdmc6IGdzdC11bml2ZXJzZS5kb3QKKwktZG90IC1Uc3ZnICQ8IHwgc2VkICdzL1woZm9udC1zaXplOlswLTldKlwuWzAtOV0qXCk7L1wxcHg7L2cnID4kQAorCisjIEltYWdlcyB0byBjb3B5IGludG8gSFRNTCBkaXJlY3RvcnkuCitIVE1MX0lNQUdFUyA9CisKKyMgRXh0cmEgU0dNTCBmaWxlcyB0aGF0IGFyZSBpbmNsdWRlZCBieSAkKERPQ19NQUlOX1NHTUxfRklMRSkuCitjb250ZW50X2ZpbGVzID0gYnVpbGRpbmcueG1sIHJ1bm5pbmcueG1sIGdzdC11bml2ZXJzZS5zdmcKKworIyBPdGhlciBmaWxlcyB0byBkaXN0cmlidXRlLgorZXh0cmFfZmlsZXMgPSBnc3QtdW5pdmVyc2UuZG90CisKKyMgQ0ZMQUdTIGFuZCBMREZMQUdTIGZvciBjb21waWxpbmcgc2NhbiBwcm9ncmFtLiBPbmx5IG5lZWRlZCBpZiB5b3VyIGFwcC9saWIKKyMgY29udGFpbnMgR3RrT2JqZWN0cy9HT2JqZWN0cyBhbmQgeW91IHdhbnQgdG8gZG9jdW1lbnQgc2lnbmFscyBhbmQgcHJvcGVydGllcy4KK0dUS0RPQ19DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQorR1RLRE9DX0xJQlMgPSAkKEdTVF9PQkpfTElCUykKKworR1RLRE9DX0NDPSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykKK0dUS0RPQ19MRD0kKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1saW5rICQoQ0MpCisKK0dUS0RPQ19FWFRSQV9FTlZJUk9OTUVOVD0gXAorICAgIEdTVF9QTFVHSU5fU0NBTk5FUj0kKHRvcF9idWlsZGRpcikvbGlicy9nc3QvaGVscGVycy9nc3QtcGx1Z2luLXNjYW5uZXIKKworIyBJZiB5b3UgbmVlZCB0byBvdmVycmlkZSBzb21lIG9mIHRoZSBkZWNsYXJhdGlvbnMsIHBsYWNlIHRoZW0gaW4gdGhpcyBmaWxlCisjIGFuZCB1bmNvbW1lbnQgdGhpcyBsaW5lLgorRE9DX09WRVJSSURFUyA9ICQoRE9DX01PRFVMRSktb3ZlcnJpZGVzLnR4dAorCitpbmNsdWRlICQodG9wX3NyY2RpcikvY29tbW9uL2d0ay1kb2MubWFrCisKKyMgZ3RrLWRvYy5tYWsgZGVmaW5lcyBDTEVBTkZJTEVTCitDTEVBTkZJTEVTICs9IGdzdC11bml2ZXJzZS5zdmcKKwpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvTWFrZWZpbGUuaW4gYi9kb2NzL2dzdC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmNhODNlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9nc3QvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw5MjEgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMgdGhpcyBzbmlwcGV0IGlzIHRvIGJlIGluY2x1ZGVkIGJ5IGJvdGggb3VyIGRvY2Jvb2sgbWFudWFscworIyBhbmQgZ3RrLWRvYyBBUEkgcmVmZXJlbmNlcworCisjIGl0IGFkZHMgYW4gdXBsb2FkIHRhcmdldCB0byBlYWNoIG9mIHRoZXNlIGRpcidzIE1ha2VmaWxlcworCisjIGVhY2ggTWFrZWZpbGUuYW0gc2hvdWxkIGRlZmluZSB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKKyMgLSBET0M6IHRoZSBiYXNlIG5hbWUgb2YgdGhlIGRvY3VtZW50YXRpb24KKyMgICAgICAgIChmYXEsIG1hbnVhbCwgcHdnLCBnc3RyZWFtZXIsIGdzdHJlYW1lci1saWJzKQorIyAtIEZPUk1BVFM6IHRoZSBmb3JtYXRzIGluIHdoaWNoIERPQyBpcyBvdXRwdXQKKyMgICAgICAgICAgICAoaHRtbCBwcyBwZGYpCisKKyMgaWYgeW91IHdhbnQgdG8gdXNlIGl0LCBtYWtlIHN1cmUgeW91ciAkSE9NRS8uc3NoL2NvbmZpZyBmaWxlIGNvbnRhaW5zIHRoZQorIyBjb3JyZWN0IFVzZXIgZW50cnkgZm9yIHRoZSBIb3N0IGVudHJ5IGZvciB0aGUgRE9DX1NFUlZFUgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRXZlcnl0aGluZyBiZWxvdyBoZXJlIGlzIGdlbmVyaWMgYW5kIHlvdSBzaG91bGRuJ3QgbmVlZCB0byBjaGFuZ2UgaXQuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgdGhvbWFzOiBleGNlcHQgb2YgY291cnNlIHRoYXQgd2UgZGlkCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gXAorCSQoc3JjZGlyKS9nc3RyZWFtZXIudHlwZXMuaW4gJCh0b3Bfc3JjZGlyKS9jb21tb24vZ3RrLWRvYy5tYWsgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL3VwbG9hZC1kb2MubWFrCitzdWJkaXIgPSBkb2NzL2dzdAorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXB5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtc2NydWItaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0gZ3N0cmVhbWVyLnR5cGVzCitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorQU1fVl9HRU4gPSAkKGFtX192X0dFTl8kKFYpKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworQU1fVl9hdCA9ICQoYW1fX3ZfYXRfJChWKSkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9hdF8wID0gQAorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBUyA9IEBBU0AKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAorQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAorQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKK0NDID0gQENDQAorQ0NBUyA9IEBDQ0FTQAorQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACitDQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDSEVDS19NQUpPUl9WRVJTSU9OID0gQENIRUNLX01BSk9SX1ZFUlNJT05ACitDSEVDS19NSUNST19WRVJTSU9OID0gQENIRUNLX01JQ1JPX1ZFUlNJT05ACitDSEVDS19NSU5PUl9WRVJTSU9OID0gQENIRUNLX01JTk9SX1ZFUlNJT05ACitDSEVDS19WRVJTSU9OID0gQENIRUNLX1ZFUlNJT05ACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEFESVIgPSBAREFUQURJUkAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRU5BQkxFX1NVQlVOSVQgPSBARU5BQkxFX1NVQlVOSVRACisKKyMgZG9uJ3Qgd2FudCAkKERPQ19NT0RVTEUpLXNjYW4uYyB0byBiZSBidWlsdCB3aXRoIC1XZXJyb3IKK0VSUk9SX0NGTEFHUyA9IAorRVhFRVhUID0gQEVYRUVYVEAKK0ZGTEFHUyA9IEBGRkxBR1NACitGR1JFUCA9IEBGR1JFUEAKK0ZMRVhfUEFUSCA9IEBGTEVYX1BBVEhACitHQ09WID0gQEdDT1ZACitHQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKK0dDT1ZfTElCUyA9IEBHQ09WX0xJQlNACitHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAorR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKK0dMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAorR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKK0dMSUJfT05MWV9DRkxBR1MgPSBAR0xJQl9PTkxZX0NGTEFHU0AKK0dMSUJfT05MWV9MSUJTID0gQEdMSUJfT05MWV9MSUJTQAorR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACitHTElCX1JFUSA9IEBHTElCX1JFUUAKK0dNUF9MSUJTID0gQEdNUF9MSUJTQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHUkVQID0gQEdSRVBACitHU0xfTElCUyA9IEBHU0xfTElCU0AKK0dTVF9BR0UgPSBAR1NUX0FHRUAKK0dTVF9BTExfQ0ZMQUdTID0gQEdTVF9BTExfQ0ZMQUdTQAorR1NUX0FMTF9DWFhGTEFHUyA9IEBHU1RfQUxMX0NYWEZMQUdTQAorR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKK0dTVF9BTExfTElCUyA9IEBHU1RfQUxMX0xJQlNACitHU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKK0dTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9ERUZJTkVACitHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkVACitHU1RfRElTQUJMRV9ORVRfREVGSU5FID0gQEdTVF9ESVNBQkxFX05FVF9ERUZJTkVACitHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAorR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKK0dTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKK0dTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACitHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfVFJBQ0VfREVGSU5FQAorR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAorR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAorR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTU19ERUZJTkUgPSBAR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTU19ERUZJTkVACitHU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKK0dTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAorR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKK0dTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAorR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACitHU1RfTUFKT1JNSU5PUiA9IEBHU1RfTUFKT1JNSU5PUkAKK0dTVF9PQkpfQ0ZMQUdTID0gQEdTVF9PQkpfQ0ZMQUdTQAorR1NUX09CSl9DWFhGTEFHUyA9IEBHU1RfT0JKX0NYWEZMQUdTQAorR1NUX09CSl9MSUJTID0gQEdTVF9PQkpfTElCU0AKK0dTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAorR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAorR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAorR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKK0dTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKK0dTVF9QS0dfREVQUyA9IEBHU1RfUEtHX0RFUFNACitHU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAorR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAorR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1BPSU5URVJfRk9STUFUX0RFRklORUAKK0dTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORSA9IEBHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkVACitHU1RfUkVHSVNUUllfRE9DX1RZUEVTID0gQEdTVF9SRUdJU1RSWV9ET0NfVFlQRVNACitHU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAorR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FID0gQEdTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OX0RFRklORUAKK0dUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACitIQVZFX0RPQ0JPT0sySFRNTCA9IEBIQVZFX0RPQ0JPT0sySFRNTEAKK0hBVkVfRE9DQk9PSzJQUyA9IEBIQVZFX0RPQ0JPT0syUFNACitIQVZFX0RWSVBTID0gQEhBVkVfRFZJUFNACitIQVZFX0VQU1RPUERGID0gQEhBVkVfRVBTVE9QREZACitIQVZFX0ZJRzJERVYgPSBASEFWRV9GSUcyREVWQAorSEFWRV9HTVAgPSBASEFWRV9HTVBACitIQVZFX0dTTCA9IEBIQVZFX0dTTEAKK0hBVkVfSkFERVRFWCA9IEBIQVZFX0pBREVURVhACitIQVZFX1BOR1RPUE5NID0gQEhBVkVfUE5HVE9QTk1ACitIQVZFX1BOTVRPUFMgPSBASEFWRV9QTk1UT1BTQAorSEFWRV9QUzJQREYgPSBASEFWRV9QUzJQREZACitIQVZFX1hNTExJTlQgPSBASEFWRV9YTUxMSU5UQAorSE9TVF9DUFUgPSBASE9TVF9DUFVACitIVE1MX0RJUiA9IEBIVE1MX0RJUkAKK0lORVRfQVRPTl9MSUJTID0gQElORVRfQVRPTl9MSUJTQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAorSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAorSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAorSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACitJTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAorSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAorSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkRJUiA9IEBMSUJESVJACitMSUJJQ09OViA9IEBMSUJJQ09OVkAKK0xJQklOVEwgPSBATElCSU5UTEAKK0xJQk0gPSBATElCTUAKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xPQ0FMRURJUiA9IEBMT0NBTEVESVJACitMVExJQklDT05WID0gQExUTElCSUNPTlZACitMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BSU5UID0gQE1BSU5UQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAorUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKK1BBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACitQQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKK1BBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMX1BBVEggPSBAUEVSTF9QQVRIQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUExVR0lORElSID0gQFBMVUdJTkRJUkAKK1BPU1VCID0gQFBPU1VCQAorUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACitQWVRIT04gPSBAUFlUSE9OQAorUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKK1BZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACitQWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACitQWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKK1ZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKK1ZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1dBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAorV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAorWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKK1hTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK2x0X0VDSE8gPSBAbHRfRUNIT0AKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKK3BrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACitwbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKK3B5dGhvbmRpciA9IEBweXRob25kaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKKworIyBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlLCBlLmcuICdnbGliJy4KKyMgRE9DX01PRFVMRT1nc3RyZWFtZXItQEdTVF9NQUpPUk1JTk9SQAorRE9DX01PRFVMRSA9IGdzdHJlYW1lcgorQlVJTFRfU09VUkNFUyA9IGdzdHJlYW1lci50eXBlcworCisjIGZvciB1cGxvYWQtZG9jLm1haworRE9DID0gZ3N0cmVhbWVyCitGT1JNQVRTID0gaHRtbAorCisjIHRoZXNlIHZhcmlhYmxlcyBkZWZpbmUgdGhlIGxvY2F0aW9uIG9mIHRoZSBvbmxpbmUgZG9jcworRE9DX1NFUlZFUiA9IGdzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcKK0RPQ19CQVNFID0gL3Nydi9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3d3dy9kYXRhL2RvYworRE9DX1VSTCA9ICQoRE9DX1NFUlZFUik6JChET0NfQkFTRSkKKworIyBUaGUgdG9wLWxldmVsIFNHTUwgZmlsZS4gQ2hhbmdlIGl0IGlmIHlvdSB3YW50LgorRE9DX01BSU5fU0dNTF9GSUxFID0gJChET0NfTU9EVUxFKS1kb2NzLnNnbWwKKworIyBUaGUgZmlsZXMgY29udGFpbmluZyB0aGUgc291cmNlIGNvZGUuIFJlbGF0aXZlIHRvICQodG9wX3NyY2RpcikuCisjIGd0ay1kb2Mgd2lsbCBzZWFyY2ggYWxsIC5jICYgLmggZmlsZXMgYmVuZWF0aCBoZXJlIGZvciBpbmxpbmUgY29tbWVudHMKKyMgZG9jdW1lbnRpbmcgZnVuY3Rpb25zIGFuZCBtYWNyb3MuCitET0NfU09VUkNFX0RJUiA9ICQodG9wX3NyY2RpcikvZ3N0CisKKyMgRXh0cmEgb3B0aW9ucyB0byBzdXBwbHkgdG8gZ3RrZG9jLXNjYW4uCitTQ0FOX09QVElPTlMgPSAtLWRlcHJlY2F0ZWQtZ3VhcmRzPSJHU1RfRElTQUJMRV9ERVBSRUNBVEVEIgorCisjIEV4dHJhIG9wdGlvbnMgdG8gc3VwcGx5IHRvIGd0a2RvYy1ta2RiLgorTUtEQl9PUFRJT05TID0gLS1zZ21sLW1vZGUgLS1vdXRwdXQtZm9ybWF0PXhtbCAtLWlnbm9yZS1maWxlcz1wYXJzZQorCisjIEV4dHJhIG9wdGlvbnMgdG8gc3VwcGx5IHRvIGd0a2RvYy1maXhyZWYuCitGSVhYUkVGX09QVElPTlMgPSAtLWV4dHJhLWRpcj0kKEdMSUJfUFJFRklYKS9zaGFyZS9ndGstZG9jL2h0bWwKKworIyBVc2VkIGZvciBkZXBlbmRlbmNpZXMuCitIRklMRV9HTE9CID0gJCh0b3Bfc3JjZGlyKS9nc3QvKi5oCitDRklMRV9HTE9CID0gJCh0b3Bfc3JjZGlyKS9nc3QvKi5jCisKKyMgSGVhZGVyIGZpbGVzIHRvIGlnbm9yZSB3aGVuIHNjYW5uaW5nLiBVc2UgYmFzZSBmaWxlIG5hbWUsIG5vIHBhdGhzCitJR05PUkVfSEZJTEVTID0gXAorCWdldHRleHQuaCBcCisJZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIFwKKwlnbGliLWNvbXBhdC5oIFwKKwlnc3QtaTE4bi1hcHAuaCBcCisJZ3N0LWkxOG4tbGliLmggXAorCWdzdF9wcml2YXRlLmggXAorCWdzdGVsZW1lbnRkZXRhaWxzLmggXAorCWdzdG1hcnNoYWwuaCBcCisJZ3N0bWFjcm9zLmggXAorCVwKKwlncmFtbWFyLnRhYi5oIFwKKwlncmFtbWFyLnRhYi5wcmUuaCBcCisJbWF0aC1jb21wYXQuaCBcCisJdHlwZXMuaAorCisKKyMgSW1hZ2VzIHRvIGNvcHkgaW50byBIVE1MIGRpcmVjdG9yeS4KK0hUTUxfSU1BR0VTID0gCisKKyMgRXh0cmEgU0dNTCBmaWxlcyB0aGF0IGFyZSBpbmNsdWRlZCBieSAkKERPQ19NQUlOX1NHTUxfRklMRSkuCitjb250ZW50X2ZpbGVzID0gYnVpbGRpbmcueG1sIHJ1bm5pbmcueG1sIGdzdC11bml2ZXJzZS5zdmcKKworIyBPdGhlciBmaWxlcyB0byBkaXN0cmlidXRlLgorZXh0cmFfZmlsZXMgPSBnc3QtdW5pdmVyc2UuZG90CisKKyMgQ0ZMQUdTIGFuZCBMREZMQUdTIGZvciBjb21waWxpbmcgc2NhbiBwcm9ncmFtLiBPbmx5IG5lZWRlZCBpZiB5b3VyIGFwcC9saWIKKyMgY29udGFpbnMgR3RrT2JqZWN0cy9HT2JqZWN0cyBhbmQgeW91IHdhbnQgdG8gZG9jdW1lbnQgc2lnbmFscyBhbmQgcHJvcGVydGllcy4KK0dUS0RPQ19DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQorR1RLRE9DX0xJQlMgPSAkKEdTVF9PQkpfTElCUykKK0dUS0RPQ19DQyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykKK0dUS0RPQ19MRCA9ICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWxpbmsgJChDQykKK0dUS0RPQ19FWFRSQV9FTlZJUk9OTUVOVCA9IFwKKyAgICBHU1RfUExVR0lOX1NDQU5ORVI9JCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2hlbHBlcnMvZ3N0LXBsdWdpbi1zY2FubmVyCisKKworIyBJZiB5b3UgbmVlZCB0byBvdmVycmlkZSBzb21lIG9mIHRoZSBkZWNsYXJhdGlvbnMsIHBsYWNlIHRoZW0gaW4gdGhpcyBmaWxlCisjIGFuZCB1bmNvbW1lbnQgdGhpcyBsaW5lLgorRE9DX09WRVJSSURFUyA9ICQoRE9DX01PRFVMRSktb3ZlcnJpZGVzLnR4dAorCisjIHRob21hczogY29waWVkIGZyb20gZ2xpYi0yCisjIFdlIHNldCBHUEFUSCBoZXJlOyB0aGlzIGdpdmVzIHVzIHNlbWFudGljcyBmb3IgR05VIG1ha2UKKyMgd2hpY2ggYXJlIG1vcmUgbGlrZSBvdGhlciBtYWtlJ3MgVlBBVEgsIHdoZW4gaXQgY29tZXMgdG8KKyMgd2hldGhlciBhIHNvdXJjZSB0aGF0IGlzIGEgdGFyZ2V0IG9mIG9uZSBydWxlIGlzIHRoZW4KKyMgc2VhcmNoZWQgZm9yIGluIFZQQVRIL0dQQVRILgorIworR1BBVEggPSAkKHNyY2RpcikKKworIyB0aG9tYXM6IG1ha2UgZG9jcyBwYXJhbGxlbCBpbnN0YWxsYWJsZQorVEFSR0VUX0RJUiA9ICQoSFRNTF9ESVIpLyQoRE9DX01PRFVMRSktQEdTVF9NQUpPUk1JTk9SQAorRVhUUkFfRElTVCA9IFwKKwkkKGNvbnRlbnRfZmlsZXMpCQlcCisJJChleHRyYV9maWxlcykJCQlcCisJJChIVE1MX0lNQUdFUykJCQlcCisJJChET0NfTUFJTl9TR01MX0ZJTEUpCQlcCisJJChET0NfTU9EVUxFKS50eXBlcwkJXAorCSQoRE9DX09WRVJSSURFUykJCVwKKwkkKERPQ19NT0RVTEUpLXNlY3Rpb25zLnR4dAorCitET0NfU1RBTVBTID0gXAorCXNldHVwLWJ1aWxkLnN0YW1wCQlcCisJc2Nhbi1idWlsZC5zdGFtcAkJXAorCXNnbWwtYnVpbGQuc3RhbXAJCVwKKwlodG1sLWJ1aWxkLnN0YW1wCQlcCisJc2dtbC5zdGFtcAkJXAorCWh0bWwuc3RhbXAKKworU0NBTk9CSl9GSUxFUyA9IFwKKwkkKERPQ19NT0RVTEUpLmFyZ3MJCVwKKwkkKERPQ19NT0RVTEUpLmhpZXJhcmNoeQkJXAorCSQoRE9DX01PRFVMRSkuaW50ZXJmYWNlcwkJXAorCSQoRE9DX01PRFVMRSkucHJlcmVxdWlzaXRlcwlcCisJJChET0NfTU9EVUxFKS5zaWduYWxzCQlcCisJLmxpYnMvJChET0NfTU9EVUxFKS1zY2FuLm8KKworUkVQT1JUX0ZJTEVTID0gXAorCSQoRE9DX01PRFVMRSktdW5kb2N1bWVudGVkLnR4dCBcCisJJChET0NfTU9EVUxFKS11bmRlY2xhcmVkLnR4dCBcCisJJChET0NfTU9EVUxFKS11bnVzZWQudHh0CisKKworIyBndGstZG9jLm1hayBkZWZpbmVzIENMRUFORklMRVMKK0NMRUFORklMRVMgPSAkKFNDQU5PQkpfRklMRVMpICQoUkVQT1JUX0ZJTEVTKSAkKERPQ19TVEFNUFMpIFwKKwlkb2MtcmVnaXN0cnkueG1sIGdzdC11bml2ZXJzZS5zdmcKK2FsbDogJChCVUlMVF9TT1VSQ0VTKQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFsbC1hbQorCisuU1VGRklYRVM6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICQodG9wX3NyY2RpcikvY29tbW9uL3VwbG9hZC1kb2MubWFrICQodG9wX3NyY2RpcikvY29tbW9uL2d0ay1kb2MubWFrICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGRvY3MvZ3N0L01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251IGRvY3MvZ3N0L01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorZ3N0cmVhbWVyLnR5cGVzOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHNyY2RpcikvZ3N0cmVhbWVyLnR5cGVzLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKK3RhZ3M6IFRBR1MKK1RBR1M6CisKK2N0YWdzOiBDVEFHUworQ1RBR1M6CisKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgdG9wX2Rpc3RkaXI9IiQodG9wX2Rpc3RkaXIpIiBkaXN0ZGlyPSIkKGRpc3RkaXIpIiBcCisJICBkaXN0LWhvb2sKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiAkKEJVSUxUX1NPVVJDRVMpCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgYWxsLWxvY2FsCitpbnN0YWxsZGlyczoKK2luc3RhbGw6ICQoQlVJTFRfU09VUkNFUykKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChDTEVBTkZJTEVTKQorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCisJLXRlc3QgLXogIiQoQlVJTFRfU09VUkNFUykiIHx8IHJtIC1mICQoQlVJTFRfU09VUkNFUykKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLWxvY2FsIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1sb2NhbAorCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWRhdGEtbG9jYWwKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCisJbWFpbnRhaW5lci1jbGVhbi1sb2NhbAorCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtbG9jYWwKKworLk1BS0U6IGFsbCBjaGVjayBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IGFsbCBhbGwtYW0gYWxsLWxvY2FsIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYnRvb2wgY2xlYW4tbG9jYWwgZGlzdC1ob29rIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLWxvY2FsIGRpc3RkaXIgXAorCWR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kYXRhLWxvY2FsIGluc3RhbGwtZHZpIFwKKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCisJaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCisJaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKKwltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCisJbWFpbnRhaW5lci1jbGVhbi1sb2NhbCBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCisJdW5pbnN0YWxsLWxvY2FsCisKK2h0bWw6IGh0bWwtYnVpbGQuc3RhbXAKKwordXBsb2FkOiAkKEZPUk1BVFMpCisJQGlmIGVjaG8gJChGT1JNQVRTKSB8IGdyZXAgaHRtbCA+IC9kZXYvbnVsbDsgdGhlbiBcCisJICBlY2hvICJQcmVwYXJpbmcgZG9jcyBmb3IgdXBsb2FkIChyZWJhc2luZyBjcm9zcy1yZWZlcmVuY2VzKSAuLi4iIDsgXAorCSAgaWYgdGVzdCB4JChidWlsZGRpcikgIT0geCQoc3JjZGlyKTsgdGhlbiBcCisJICAgIGVjaG8gIm1ha2UgdXBsb2FkIGNhbiBvbmx5IGJlIHVzZWQgaWYgc3JjZGlyID09IGJ1aWxkZGlyIjsgXAorCSAgICBleGl0IDE7IFwKKwkgIGZpOyBcCisJICAjIGd0a2RvYy1yZWJhc2Ugc29tZXRpbWVzIGdldHMgY29uZnVzZWQsIHNvIHJlc2V0IGV2ZXJ5dGhpbmcgdG8gXAorCSAgIyBsb2NhbCBsaW5rcyBiZWZvcmUgcmViYXNpbmcgdG8gb25saW5lIGxpbmtzICAgICAgICAgICAgICAgICAgIFwKKwkgIGd0a2RvYy1yZWJhc2UgLS1odG1sLWRpcj0kKGJ1aWxkZGlyKS9odG1sIDI+L2Rldi9udWxsIDI+L2Rldi9udWxsIDsgXAorCSAgcmViYXNlPWBndGtkb2MtcmViYXNlIC0tdmVyYm9zZSAtLW9ubGluZSAtLWh0bWwtZGlyPSQoYnVpbGRkaXIpL2h0bWxgIDsgXAorCSAgZWNobyAiJCRyZWJhc2UiIHwgZ3JlcCAtZSAiT24tKmxpbmUiOyBcCisJICBmb3IgcmVxIGluIGdsaWIgZ29iamVjdCBnc3RyZWFtZXIgZ3N0cmVhbWVyLWxpYnMgZ3N0LXBsdWdpbnMtYmFzZS1saWJzOyBkbyBcCisJICAgIGlmICEgKCBlY2hvICIkJHJlYmFzZSIgfCBncmVwIC1pIC1lICJPbi0qbGluZS4qLyQkcmVxLyIgKTsgdGhlbiBcCisJICAgICAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgOyBcCisJICAgICAgZWNobyAiIENvdWxkIG5vdCBkZXRlcm1pbmUgb25saW5lIGxvY2F0aW9uIGZvciAkJHJlcSBkb2NzLiBDcm9zcy1yZWZlcmVuY2luZyB3aWxsIGJlICIgOyBcCisJICAgICAgZWNobyAiIGJyb2tlbiwgc28gbm90IHVwbG9hZGluZy4gTWFrZSBzdXJlIHRoZSBsaWJyYXJ5J3MgZ3RrLWRvYyBkb2N1bWVudGF0aW9uIGlzICAgICIgOyBcCisJICAgICAgZWNobyAiIGluc3RhbGxlZCBzb21ld2hlcmUgaW4gL3Vzci9zaGFyZS9ndGstZG9jLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgOyBcCisJICAgICAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgOyBcCisJICAgICAgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICBkb25lOyBcCisJICBleHBvcnQgU1JDPSIkJFNSQyBodG1sIjsgXAorCWZpOyBcCisJaWYgZWNobyAkKEZPUk1BVFMpIHwgZ3JlcCBwcyA+IC9kZXYvbnVsbDsgdGhlbiBleHBvcnQgU1JDPSIkJFNSQyAkKERPQykucHMiOyBmaTsgXAorCWlmIGVjaG8gJChGT1JNQVRTKSB8IGdyZXAgcGRmID4gL2Rldi9udWxsOyB0aGVuIGV4cG9ydCBTUkM9IiQkU1JDICQoRE9DKS5wZGYiOyBmaTsgXAorCVwKKwkjIHVwbG9hZCByZWxlYXNlcyB0byBib3RoIDAuMTAuWC8gYW5kIGhlYWQvIHN1YmRpcmVjdG9yaWVzIFwKKwlpZiB0ZXN0ICJ4JChQQUNLQUdFX1ZFUlNJT05fTkFOTykiID0geDA7IHRoZW4gXAorCSAgZXhwb3J0IERJUj0kKERPQ19CQVNFKS9nc3RyZWFtZXIvJChWRVJTSU9OKS8kKERPQyk7IFwKKwkgIGVjaG8gVXBsb2FkaW5nICQkU1JDIHRvICQoRE9DX1NFUlZFUik6JCRESVI7IFwKKwkgIHNzaCAkKERPQ19TRVJWRVIpIG1rZGlyIC1wICQkRElSOyBcCisJICByc3luYyAtcnYgLWUgc3NoIC0tZGVsZXRlICQkU1JDICQoRE9DX1NFUlZFUik6JCRESVI7IFwKKwkgIHNzaCAkKERPQ19TRVJWRVIpIGNobW9kIC1SIGcrdyAkJERJUjsgXAorCWZpOyBcCisJXAorCWV4cG9ydCBESVI9JChET0NfQkFTRSkvZ3N0cmVhbWVyL2hlYWQvJChET0MpOyBcCisJZWNobyBVcGxvYWRpbmcgJCRTUkMgdG8gJChET0NfU0VSVkVSKTokJERJUjsgXAorCXNzaCAkKERPQ19TRVJWRVIpIG1rZGlyIC1wICQkRElSOyBcCisJcnN5bmMgLXJ2IC1lIHNzaCAtLWRlbGV0ZSAkJFNSQyAkKERPQ19TRVJWRVIpOiQkRElSOyBcCisJc3NoICQoRE9DX1NFUlZFUikgY2htb2QgLVIgZyt3ICQkRElSOyBcCisJXAorCWlmIGVjaG8gJChGT1JNQVRTKSB8IGdyZXAgaHRtbCA+IC9kZXYvbnVsbDsgdGhlbiBcCisJICBlY2hvICJVbi1wcmVwYXJpbmcgZG9jcyBmb3IgdXBsb2FkIChyZWJhc2luZyBjcm9zcy1yZWZlcmVuY2VzKSAuLi4iIDsgXAorCSAgZ3RrZG9jLXJlYmFzZSAtLWh0bWwtZGlyPSQoYnVpbGRkaXIpL2h0bWwgOyBcCisJZmk7IFwKKwllY2hvIERvbmUKKworZ3N0LXVuaXZlcnNlLnN2ZzogZ3N0LXVuaXZlcnNlLmRvdAorCS1kb3QgLVRzdmcgJDwgfCBzZWQgJ3MvXChmb250LXNpemU6WzAtOV0qXC5bMC05XSpcKTsvXDFweDsvZycgPiRACisKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQGFsbC1sb2NhbDogaHRtbC1idWlsZC5zdGFtcAorCisjIyMjIHNldHVwICMjIyMKKworQEVOQUJMRV9HVEtfRE9DX1RSVUVAc2V0dXAtYnVpbGQuc3RhbXA6ICQoY29udGVudF9maWxlcykKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAktQGlmIHRlc3QgIiQoYWJzX3NyY2RpcikiICE9ICIkKGFic19idWlsZGRpcikiIDsgdGhlbiBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGVjaG8gJyAgRE9DICAgUHJlcGFyaW5nIGJ1aWxkJzsgXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBmaWxlcz1gZWNobyAkKERPQ19NQUlOX1NHTUxfRklMRSkgJChET0NfT1ZFUlJJREVTKSAkKERPQ19NT0RVTEUpLXNlY3Rpb25zLnR4dCAkKERPQ19NT0RVTEUpLnR5cGVzICQoY29udGVudF9maWxlcylgOyBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGlmIHRlc3QgIngkJGZpbGVzIiAhPSAieCIgOyB0aGVuIFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgICAgIGZvciBmaWxlIGluICQkZmlsZXMgOyBkbyBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICAgICAgICAgdGVzdCAtZiAkKGFic19zcmNkaXIpLyQkZmlsZSAmJiBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICAgICAgICAgICAgIGNwIC1wdSAkKGFic19zcmNkaXIpLyQkZmlsZSAkKGFic19idWlsZGRpcikvIHx8IHRydWU7IFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgICAgIGRvbmU7IFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgZmk7IFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlmaQorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUB0b3VjaCBzZXR1cC1idWlsZC5zdGFtcAorCisjIyMjIHNjYW4gIyMjIworCisjIGluIHRoZSBjYXNlIG9mIG5vbi1zcmNkaXIgYnVpbGRzLCB0aGUgYnVpbHQgZ3N0IGRpcmVjdG9yeSBnZXRzIGFkZGVkCisjIHRvIGd0ay1kb2Mgc2Nhbm5pbmc7IGJ1dCBvbmx5IHRoZW4sIHRvIGF2b2lkIGR1cGxpY2F0ZXMKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQHNjYW4tYnVpbGQuc3RhbXA6ICQoSEZJTEVfR0xPQikgJChDRklMRV9HTE9CKQorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBlY2hvICcgIERPQyAgIFNjYW5uaW5nIGhlYWRlciBmaWxlcycKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAX3NvdXJjZV9kaXI9JycgOwkJCQkJCVwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlmb3IgaSBpbiAkKERPQ19TT1VSQ0VfRElSKSA7IGRvCQkJCQlcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIF9zb3VyY2VfZGlyPSIkJHtfc291cmNlX2Rpcn0gLS1zb3VyY2UtZGlyPSQkaSIgOwkgICAgICAgIFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlkb25lIDsJCQkJCQkJICAgICAgICBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJZ3RrZG9jLXNjYW4JCQkJCQkJXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACQkkKFNDQU5fT1BUSU9OUykgJChFWFRSQV9IRklMRVMpCQkJCVwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkJLS1tb2R1bGU9JChET0NfTU9EVUxFKQkJCQkJXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACQkkJHtfc291cmNlX2Rpcn0gICAgICAgICAJCQkJXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACQktLWlnbm9yZS1oZWFkZXJzPSIkKElHTk9SRV9IRklMRVMpIgorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBpZiBncmVwIC1sICdeLi4qJCQnICQoRE9DX01PRFVMRSkudHlwZXMgPiAvZGV2L251bGw7IHRoZW4JXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBlY2hvICIgIERPQyAgIEludHJvc3BlY3RpbmcgZ29iamVjdHMiOyBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIEdTVF9QTFVHSU5fU1lTVEVNX1BBVEg9YGNkICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgCQlcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIEdTVF9QTFVHSU5fUEFUSD0JCQkJCQlcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIEdTVF9SRUdJU1RSWT1kb2MtcmVnaXN0cnkueG1sCQkJCVwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgJChHVEtET0NfRVhUUkFfRU5WSVJPTk1FTlQpCQkJCQlcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIENDPSIkKEdUS0RPQ19DQykiIExEPSIkKEdUS0RPQ19MRCkiCQkJCVwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgQ0ZMQUdTPSIkKEdUS0RPQ19DRkxBR1MpICQoQ0ZMQUdTKSIJCQkJXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBMREZMQUdTPSIkKEdUS0RPQ19MSUJTKSAkKExERkxBR1MpIgkJCQlcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGd0a2RvYy1zY2FuZ29iaiAtLXR5cGUtaW5pdC1mdW5jPSJnc3RfaW5pdChOVUxMLE5VTEwpIglcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICAgICAtLW1vZHVsZT0kKERPQ19NT0RVTEUpIDsJCQkJXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACWVsc2UJCQkJCQkJCVwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgZm9yIGkgaW4gJChTQ0FOT0JKX0ZJTEVTKSA7IGRvCQkJCVwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgICAgdGVzdCAtZiAkJGkgfHwgdG91Y2ggJCRpIDsJCQkJXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBkb25lCQkJCQkJCVwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlmaQorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUB0b3VjaCBzY2FuLWJ1aWxkLnN0YW1wCisKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQCQoRE9DX01PRFVMRSktZGVjbC50eHQgJChTQ0FOT0JKX0ZJTEVTKSAkKERPQ19NT0RVTEUpLXNlY3Rpb25zLnR4dCAkKERPQ19NT0RVTEUpLW92ZXJyaWRlcy50eHQ6IHNjYW4tYnVpbGQuc3RhbXAKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAdHJ1ZQorCisjIyMjIHhtbCAjIyMjCisKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQHNnbWwtYnVpbGQuc3RhbXA6IHNldHVwLWJ1aWxkLnN0YW1wICQoRE9DX01PRFVMRSktZGVjbC50eHQgJChTQ0FOT0JKX0ZJTEVTKSAkKERPQ19NT0RVTEUpLXNlY3Rpb25zLnR4dCAkKGV4cGFuZF9jb250ZW50X2ZpbGVzKQorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBlY2hvICcgIERPQyAgIEJ1aWxkaW5nIFhNTCcKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAZ3RrZG9jLW1rZGIgLS1tb2R1bGU9JChET0NfTU9EVUxFKSAtLXNvdXJjZS1kaXI9JChET0NfU09VUkNFX0RJUikgIC0tZXhwYW5kLWNvbnRlbnQtZmlsZXM9IiQoZXhwYW5kX2NvbnRlbnRfZmlsZXMpIiAtLW1haW4tc2dtbC1maWxlPSQoRE9DX01BSU5fU0dNTF9GSUxFKSAtLW91dHB1dC1mb3JtYXQ9eG1sICQoTUtEQl9PUFRJT05TKQorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBjcCAuLi92ZXJzaW9uLmVudGl0aWVzIHhtbAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUB0b3VjaCBzZ21sLWJ1aWxkLnN0YW1wCisKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQHNnbWwuc3RhbXA6IHNnbWwtYnVpbGQuc3RhbXAKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAdHJ1ZQorCisjIyMjIGh0bWwgIyMjIworCitARU5BQkxFX0dUS19ET0NfVFJVRUBodG1sLWJ1aWxkLnN0YW1wOiBzZ21sLnN0YW1wICQoRE9DX01BSU5fU0dNTF9GSUxFKSAkKGNvbnRlbnRfZmlsZXMpCitARU5BQkxFX0dUS19ET0NfVFJVRUAJQGVjaG8gJyAgRE9DICAgQnVpbGRpbmcgSFRNTCcKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAcm0gLXJmIGh0bWwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAbWtkaXIgaHRtbAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBjcCAtcHIgeG1sIGh0bWwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAY3AgLi4vdmVyc2lvbi5lbnRpdGllcyAuLworQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBta2h0bWxfb3B0aW9ucz0iIjsgXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACWd0a2RvYy1ta2h0bWwgMj4mMSAtLWhlbHAgfCBncmVwICA+L2Rldi9udWxsICJcLVwtdmVyYm9zZSI7IFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlpZiB0ZXN0ICIkKD8pIiA9ICIwIjsgdGhlbiBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICBpZiB0ZXN0ICJ4JChWKSIgPSAieDEiOyB0aGVuIFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgbWtodG1sX29wdGlvbnM9IiQkbWtodG1sX29wdGlvbnMgLS12ZXJib3NlIjsgXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgZmk7IFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlmaTsgXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBndGtkb2MtbWtodG1sIDI+JjEgLS1oZWxwIHwgZ3JlcCAgPi9kZXYvbnVsbCAiXC1cLXBhdGgiOyBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJaWYgdGVzdCAiJCg/KSIgPSAiMCI7IHRoZW4gXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgbWtodG1sX29wdGlvbnM9LS1wYXRoPSIkKGFic19zcmNkaXIpIjsgXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACWZpOyBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJY2QgaHRtbCAmJiBndGtkb2MtbWtodG1sICQkbWtodG1sX29wdGlvbnMgJChNS0hUTUxfT1BUSU9OUykgJChET0NfTU9EVUxFKSAuLi8kKERPQ19NQUlOX1NHTUxfRklMRSkKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAbXYgaHRtbC9pbmRleC5zZ21sIGh0bWwvaW5kZXguc2dtbC5iYWsKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAJChTRUQpICJzLyBocmVmPVwiJChET0NfTU9EVUxFKVwvLyBocmVmPVwiJChET0NfTU9EVUxFKS1AR1NUX01BSk9STUlOT1JAXC8vZyIgaHRtbC9pbmRleC5zZ21sLmJhayA+aHRtbC9pbmRleC5zZ21sCitARU5BQkxFX0dUS19ET0NfVFJVRUAJQHJtIC1mIGh0bWwvaW5kZXguc2dtbC5iYWsKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAcm0gLXJmIGh0bWwveG1sCitARU5BQkxFX0dUS19ET0NfVFJVRUAJQHJtIC1mIHZlcnNpb24uZW50aXRpZXMKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAdGVzdCAieCQoSFRNTF9JTUFHRVMpIiA9ICJ4IiB8fCAgKCBjZCAkKHNyY2RpcikgJiYgY3AgJChIVE1MX0lNQUdFUykgJChhYnNfYnVpbGRkaXIpL2h0bWwgKQorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBlY2hvICcgIERPQyAgIEZpeGluZyBjcm9zcy1yZWZlcmVuY2VzJworQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBndGtkb2MtZml4eHJlZiAtLW1vZHVsZT0kKERPQ19NT0RVTEUpIC0tbW9kdWxlLWRpcj1odG1sIC0taHRtbC1kaXI9JChIVE1MX0RJUikgJChGSVhYUkVGX09QVElPTlMpCitARU5BQkxFX0dUS19ET0NfVFJVRUAJQHRvdWNoIGh0bWwtYnVpbGQuc3RhbXAKKworQEVOQUJMRV9HVEtfRE9DX1RSVUVAY2xlYW4tbG9jYWwtZ3RrZG9jOgorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBybSAtcmYgeG1sIHRtcGwgaHRtbAorIyBjbGVhbiBmaWxlcyBjb3BpZWQgZm9yIG5vbnNyY2RpciB0ZW1wbGF0ZXMgYnVpbGQKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAaWYgdGVzdCB4IiQoc3JjZGlyKSIgIT0geC4gOyB0aGVuIFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgICAgIHJtIC1yZiAkKERPQ19NT0RVTEUpLnR5cGVzOyBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJZmkKK0BFTkFCTEVfR1RLX0RPQ19GQUxTRUBhbGwtbG9jYWw6CitARU5BQkxFX0dUS19ET0NfRkFMU0VAY2xlYW4tbG9jYWwtZ3RrZG9jOgorCitjbGVhbi1sb2NhbDogY2xlYW4tbG9jYWwtZ3RrZG9jCisJQHJtIC1mICp+ICouYmFrCisJQHJtIC1yZiAubGlicworCitkaXN0Y2xlYW4tbG9jYWw6CisJQHJtIC1mICQoUkVQT1JUX0ZJTEVTKSBcCisJICAgICAgICAkKERPQ19NT0RVTEUpLWRlY2wtbGlzdC50eHQgJChET0NfTU9EVUxFKS1kZWNsLnR4dAorCUBybSAtcmYgdG1wbC8qLnNnbWwuYmFrCisJQHJtIC1mICQoRE9DX01PRFVMRSkuaGllcmFyY2h5CisJQHJtIC1mICouc3RhbXAgfHwgdHJ1ZQorCUBpZiB0ZXN0ICIkKGFic19zcmNkaXIpIiAhPSAiJChhYnNfYnVpbGRkaXIpIiA7IHRoZW4gXAorCSAgICBybSAtZiAkKERPQ19NQUlOX1NHTUxfRklMRSkgOyBcCisJICAgIHJtIC1mICQoRE9DX09WRVJSSURFUykgOyBcCisJICAgIHJtIC1mICQoRE9DX01PRFVMRSkudHlwZXMgOyBcCisJICAgIHJtIC1mICQoRE9DX01PRFVMRSkuaW50ZXJmYWNlcyA7IFwKKwkgICAgcm0gLWYgJChET0NfTU9EVUxFKS5wcmVyZXF1aXNpdGVzIDsgXAorCSAgICBybSAtZiAkKERPQ19NT0RVTEUpLXNlY3Rpb25zLnR4dCA7IFwKKwkgICAgcm0gLWYgJChjb250ZW50X2ZpbGVzKSA7IFwKKwkgICAgcm0gLXJmIHRtcGwvKi5zZ21sIDsgXAorCWZpCisJQHJtIC1yZiAqLm8KKworbWFpbnRhaW5lci1jbGVhbi1sb2NhbDogY2xlYW4KKwlAY2QgJChzcmNkaXIpICYmIHJtIC1yZiBodG1sIFwKKwkJeG1sICQoRE9DX01PRFVMRSktZGVjbC1saXN0LnR4dCAkKERPQ19NT0RVTEUpLWRlY2wudHh0CisKKyMgdGhvbWFzOiBtYWtlIGRvY3MgcGFyYWxsZWwgaW5zdGFsbGFibGU7IGRldmhlbHAgcmVxdWlyZXMgbWFqb3JtaW5vciB0b28KK2luc3RhbGwtZGF0YS1sb2NhbDoKKwkoaW5zdGFsbGZpbGVzPWBlY2hvICQoYnVpbGRkaXIpL2h0bWwvKi5zZ21sICQoYnVpbGRkaXIpL2h0bWwvKi5odG1sICQoYnVpbGRkaXIpL2h0bWwvKi5wbmcgJChidWlsZGRpcikvaHRtbC8qLmNzc2A7IFwKKwlpZiB0ZXN0ICIkJGluc3RhbGxmaWxlcyIgPSAnJChidWlsZGRpcikvaHRtbC8qLnNnbWwgJChidWlsZGRpcikvaHRtbC8qLmh0bWwgJChidWlsZGRpcikvaHRtbC8qLnBuZyAkKGJ1aWxkZGlyKS9odG1sLyouY3NzJzsgXAorCXRoZW4gZWNobyAnLS0gTm90aGluZyB0byBpbnN0YWxsJyA7IFwKKwllbHNlIFwKKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQoVEFSR0VUX0RJUik7IFwKKwkgIGZvciBpIGluICQkaW5zdGFsbGZpbGVzOyBkbyBcCisJICAgIGVjaG8gJy0tIEluc3RhbGxpbmcgJyQkaSA7IFwKKwkgICAgJChJTlNUQUxMX0RBVEEpICQkaSAkKERFU1RESVIpJChUQVJHRVRfRElSKTsgXAorCSAgZG9uZTsgXAorCSAgZWNobyAnLS0gSW5zdGFsbGluZyAkKGJ1aWxkZGlyKS9odG1sLyQoRE9DX01PRFVMRSkuZGV2aGVscDInIDsgXAorCSAgaWYgdGVzdCAtZSAkKGJ1aWxkZGlyKS9odG1sLyQoRE9DX01PRFVMRSkuZGV2aGVscDI7IHRoZW4gXAorCSAgICAgICAgICAgICQoSU5TVEFMTF9EQVRBKSAkKGJ1aWxkZGlyKS9odG1sLyQoRE9DX01PRFVMRSkuZGV2aGVscDIgXAorCSAgICAgICAgICAgICQoREVTVERJUikkKFRBUkdFVF9ESVIpLyQoRE9DX01PRFVMRSktQEdTVF9NQUpPUk1JTk9SQC5kZXZoZWxwMjsgXAorCSAgZmk7IFwKKwkgICh3aGljaCBndGtkb2MtcmViYXNlID4vZGV2L251bGwgJiYgXAorCSAgICBndGtkb2MtcmViYXNlIC0tcmVsYXRpdmUgLS1kZXN0LWRpcj0kKERFU1RESVIpIC0taHRtbC1kaXI9JChERVNURElSKSQoVEFSR0VUX0RJUikpIHx8IHRydWUgOyBcCisJZmkpCit1bmluc3RhbGwtbG9jYWw6CisJaWYgdGVzdCAtZCAkKERFU1RESVIpJChUQVJHRVRfRElSKTsgdGhlbiBcCisJICBybSAtcmYgJChERVNURElSKSQoVEFSR0VUX0RJUikvKjsgXAorCSAgcm1kaXIgLXAgJChERVNURElSKSQoVEFSR0VUX0RJUikgMj4vZGV2L251bGwgfHwgdHJ1ZTsgXAorCWVsc2UgXAorCSAgZWNobyAnLS0gTm90aGluZyB0byB1bmluc3RhbGwnIDsgXAorCWZpOworCisjCisjIFJlcXVpcmUgZ3RrLWRvYyB3aGVuIG1ha2luZyBkaXN0CisjCitARU5BQkxFX0dUS19ET0NfVFJVRUBkaXN0LWNoZWNrLWd0a2RvYzoKK0BFTkFCTEVfR1RLX0RPQ19GQUxTRUBkaXN0LWNoZWNrLWd0a2RvYzoKK0BFTkFCTEVfR1RLX0RPQ19GQUxTRUAJQGVjaG8gIioqKiBndGstZG9jIG11c3QgYmUgaW5zdGFsbGVkIGFuZCBlbmFibGVkIGluIG9yZGVyIHRvIG1ha2UgZGlzdCIKK0BFTkFCTEVfR1RLX0RPQ19GQUxTRUAJQGZhbHNlCisKK2Rpc3QtaG9vazogZGlzdC1jaGVjay1ndGtkb2MgZGlzdC1ob29rLWxvY2FsCisJbWtkaXIgJChkaXN0ZGlyKS9odG1sCisJY3AgaHRtbC8qICQoZGlzdGRpcikvaHRtbAorCS1jcCAkKHNyY2RpcikvJChET0NfTU9EVUxFKS50eXBlcyAkKGRpc3RkaXIpLworCS1jcCAkKHNyY2RpcikvJChET0NfTU9EVUxFKS1zZWN0aW9ucy50eHQgJChkaXN0ZGlyKS8KKwljZCAkKGRpc3RkaXIpICYmIHJtIC1mICQoRElTVENMRUFORklMRVMpCisJLWd0a2RvYy1yZWJhc2UgLS1vbmxpbmUgLS1yZWxhdGl2ZSAtLWh0bWwtZGlyPSQoZGlzdGRpcikvaHRtbAorCisuUEhPTlkgOiBkaXN0LWhvb2stbG9jYWwgZG9jcworCisjIGF2b2lkIHNwdXJpb3VzIGJ1aWxkIGVycm9ycyB3aGVuIGRpc3RjaGVja2luZyB3aXRoIC1qTgorLk5PVFBBUkFMTEVMOgorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9kb2NzL2dzdC9idWlsZGluZy54bWwgYi9kb2NzL2dzdC9idWlsZGluZy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdmOGZjNQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2J1aWxkaW5nLnhtbApAQCAtMCwwICsxLDEwMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgcmVmZW50cnkgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjMvL0VOIgorICAgICAgICAgICAgICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4zL2RvY2Jvb2t4LmR0ZCIgWworPCFFTlRJVFkgJSB2ZXJzaW9uLWVudGl0aWVzIFNZU1RFTSAidmVyc2lvbi5lbnRpdGllcyI+CisldmVyc2lvbi1lbnRpdGllczsKKzwhRU5USVRZICUgbG9jYWwuY29tbW9uLmF0dHJpYiAieG1sbnM6eGkgIENEQVRBICAjRklYRUQgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUnIj4KK10+Cis8cmVmZW50cnkgaWQ9ImdzdC1idWlsZGluZyIgcmV2aXNpb249IjI1IG1hciAyMDA5Ij4KKzxyZWZtZXRhPgorPHJlZmVudHJ5dGl0bGU+QnVpbGRpbmcgR1N0cmVhbWVyIGFuZCBHU3RyZWFtZXIgQXBwbGljYXRpb25zPC9yZWZlbnRyeXRpdGxlPgorPG1hbnZvbG51bT4zPC9tYW52b2xudW0+Cis8cmVmbWlzY2luZm8+R1N0cmVhbWVyIENvcmU8L3JlZm1pc2NpbmZvPgorPC9yZWZtZXRhPgorCis8cmVmbmFtZWRpdj4KKzxyZWZuYW1lPkJ1aWxkaW5nIEdTdHJlYW1lciBhbmQgR1N0cmVhbWVyIEFwcGxpY2F0aW9uczwvcmVmbmFtZT4KKzxyZWZwdXJwb3NlPgorSG93IHRvIGJ1aWxkIHRoZSBHU3RyZWFtZXIgZnJhbWV3b3JrIGFuZCBhcHBsaWNhdGlvbnMgdXNpbmcgaXQuCis8L3JlZnB1cnBvc2U+Cis8L3JlZm5hbWVkaXY+CisKKzxyZWZzZWN0MT4KKzx0aXRsZT5CdWlsZGluZyBHU3RyZWFtZXIgb24gVU5JWDwvdGl0bGU+CisKKyAgPCEtLSB0aGlzIGhhcyBiZWVuIGJvcnJvd2VkIGZyb20gdGhlIGdsaWIgZG9jcyAtLT4KKyAgPHBhcmE+CisgICAgT24gVU5JWCwgR1N0cmVhbWVyIHVzZXMgdGhlIHN0YW5kYXJkIEdOVSBidWlsZCBzeXN0ZW0sCisgICAgdXNpbmcgPGFwcGxpY2F0aW9uPmF1dG9jb25mPC9hcHBsaWNhdGlvbj4gZm9yIHBhY2thZ2UKKyAgICBjb25maWd1cmF0aW9uIGFuZCByZXNvbHZpbmcgcG9ydGFiaWxpdHkgaXNzdWVzLAorICAgIDxhcHBsaWNhdGlvbj5hdXRvbWFrZTwvYXBwbGljYXRpb24+IGZvciBidWlsZGluZyBtYWtlZmlsZXMKKyAgICB0aGF0IGNvbXBseSB3aXRoIHRoZSBHTlUgQ29kaW5nIFN0YW5kYXJkcywgYW5kCisgICAgPGFwcGxpY2F0aW9uPmxpYnRvb2w8L2FwcGxpY2F0aW9uPiBmb3IgYnVpbGRpbmcgc2hhcmVkCisgICAgbGlicmFyaWVzIG9uIG11bHRpcGxlIHBsYXRmb3Jtcy4gIFRoZSBub3JtYWwgc2VxdWVuY2UgZm9yCisgICAgY29tcGlsaW5nIGFuZCBpbnN0YWxsaW5nIHRoZSBHU3RyZWFtZXIgbGlicmFyeSBpcyB0aHVzOgorCisgICAgPGxpdGVyYWxsYXlvdXQ+CisgICAgICA8dXNlcmlucHV0Pi4vY29uZmlndXJlPC91c2VyaW5wdXQ+CisgICAgICA8dXNlcmlucHV0Pm1ha2U8L3VzZXJpbnB1dD4KKyAgICAgIDx1c2VyaW5wdXQ+bWFrZSBpbnN0YWxsPC91c2VyaW5wdXQ+CisgICAgPC9saXRlcmFsbGF5b3V0PgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICAgVGhlIHN0YW5kYXJkIG9wdGlvbnMgcHJvdmlkZWQgYnkgPGFwcGxpY2F0aW9uPkdOVQorICAgIGF1dG9jb25mPC9hcHBsaWNhdGlvbj4gbWF5IGJlIHBhc3NlZCB0byB0aGUKKyAgICA8Y29tbWFuZD5jb25maWd1cmU8L2NvbW1hbmQ+IHNjcmlwdC4gIFBsZWFzZSBzZWUgdGhlCisgICAgPGFwcGxpY2F0aW9uPmF1dG9jb25mPC9hcHBsaWNhdGlvbj4gZG9jdW1lbnRhdGlvbiBvciBydW4KKyAgICA8Y29tbWFuZD4uL2NvbmZpZ3VyZSAtLWhlbHA8L2NvbW1hbmQ+IGZvciBpbmZvcm1hdGlvbiBhYm91dAorICAgIHRoZSBzdGFuZGFyZCBvcHRpb25zLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICAgSW4gYWRkaXRpb24gdGhlcmUgYXJlIHNldmVyYWwgb3B0aW9ucyB0byBhY3RpdmF0ZSBvciBkZWFjdGl2YXRlIGZlYXR1cmVzLgorICAgIEUuZy4gcGFzc2luZyA8b3B0aW9uPi0tZGlzYWJsZS1nc3QtZGVidWc8L29wdGlvbj4gdG8gPGNvbW1hbmQ+Y29uZmlndXJlPC9jb21tYW5kPgorICAgIHdpbGwgdHVybiB0aGUgZGVidWdnaW5nIHN1YnN5c3RlbSBpbnRvIGEgbm9uLWZ1bmN0aW9uYWwgc3R1YiBhbmQgcmVtb3ZlIGFsbAorICAgIG1hY3JvIGJhc2VkIGludm9jYXRpb25zIGZyb20gd2l0aGluIHRoZSBsaWJyYXJ5IChhbmQgYW55dGhpbmcgY29tcGlsZWQKKyAgICBhZ2FpbnN0IHRoZSBsaWJyYXJ5IGFmdGVyd2FyZHMuKQorICA8L3BhcmE+CisgIDxwYXJhPgorICAgIElmIGxpYnJhcnkgc2l6ZSBtYXR0ZXJzIGFuZCBvbmUgYnVpbGRzIGluIGEgY29udHJvbGxlZCBlbnZpcm9ubWVudCwgaXQgaXMKKyAgICBhbHNvIHBvc3NpYmxlIHRvIHRvdGFsbHkgcmVtb3ZlIHN1YnN5c3RlbSBjb2RlLiBUaGlzIGlzIGludGVudGlvbmFsbHkgbm90CisgICAgb2ZmZXJlZCBhcyBhIGNvbmZpZ3VyZSBvcHRpb24gYXMgaXQgY2F1c2VzIGFuIEFCSSBicmVhay4gQ29kZSBidWlsdCBhZ2FpbnN0CisgICAgYSB2ZXJzaW9uIG9mIEdTdHJlYW1lciB3aXRob3V0IHRoZXNlIG1vZGlmaWNhdGlvbnMgbmVlZHMgdG8gYmUgcmVjb21waWxlZC4KKworICAgIDxsaXRlcmFsbGF5b3V0PgorICAgICAgPHVzZXJpbnB1dD5tYWtlIENGTEFHUz0iLURHU1RfUkVNT1ZFX0RFUFJFQ0FURUQgLURHU1RfUkVNT1ZFX0RJU0FCTEVEIjwvdXNlcmlucHV0PgorICAgIDwvbGl0ZXJhbGxheW91dD4KKworICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxzeW1ib2w+R1NUX1JFTU9WRV9ERVBSRUNBVEVEPC9zeW1ib2w+IC0gT21pdCBkZXByZWNhdGVkIGZ1bmN0aW9ucworICAgICAgICAgIGZyb20gdGhlIGxpYnJhcnkuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxzeW1ib2w+R1NUX1JFTU9WRV9ESVNBQkxFRDwvc3ltYm9sPiAtIE9taXQgc3R1YnMgZm9yIGRpc2FibGVkCisgICAgICAgICAgc3Vic3lzdGVtcyBmcm9tIHRoZSBsaWJyYXJ5LgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICA8L3BhcmE+CisKKzwvcmVmc2VjdDE+CisKKzxyZWZzZWN0MT4KKzx0aXRsZT5CdWlsZGluZyBHU3RyZWFtZXIgQXBwbGljYXRpb25zPC90aXRsZT4KKworPHBhcmE+CitBcHBsaWNhdGlvbnMgYW5kIGxpYnJhcmllcyBjYW4gdXNlIDxjb21tYW5kPnBrZy1jb25maWc8L2NvbW1hbmQ+IHRvIGdldCBhbGwgdGhlCituZWVkZWQgY29tcGlsZXIgYW5kIGxpbmtlciBmbGFncyB0byBidWlsZCBhZ2FpbnN0IEdTdHJlYW1lci4gUGxlYXNlIG5vdGUgdGhhdAorR1N0cmVhbWVyIGlzIHNwbGl0IGludG8gc2V2ZXJhbCBsaWJyYXJpZXMgaXRzZWxmLgorPGNvbW1hbmQ+cGtnLWNvbmZpZyAtLWxpc3QtYWxsIHwgZ3JlcCBnc3RyZWFtZXI8L2NvbW1hbmQ+IHdpbGwgbGlzdCB0aGUKK2F2YWlsYWJsZSBsaWJyYXJpZXMuCis8L3BhcmE+CisKKzwvcmVmc2VjdDE+CisKKzwvcmVmZW50cnk+CmRpZmYgLS1naXQgYS9kb2NzL2dzdC9nc3QtdW5pdmVyc2UuZG90IGIvZG9jcy9nc3QvZ3N0LXVuaXZlcnNlLmRvdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmY2YjVjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9nc3QvZ3N0LXVuaXZlcnNlLmRvdApAQCAtMCwwICsxLDc0IEBACisvKiBkb3QgLVRwbmcgZ3N0LXVuaXZlcnNlLmRvdCAtb2dzdC11bml2ZXJzZS5wbmcKKyAqCisgKiBvdGhlciBsYXlvdXRzOgorICogY2lyY28gLVRwbmcgZ3N0LXVuaXZlcnNlLmRvdCAtb2dzdC11bml2ZXJzZS5jaXJjby5wbmcKKyAqIG5lYXRvIC1UcG5nIGdzdC11bml2ZXJzZS5kb3QgLW9nc3QtdW5pdmVyc2UubmVhdG8ucG5nCisgKgorICogdG9kbzoKKyAqIC0gYWRkIHVybHMgdG8gYXBpIGRvY3MKKyAqIC0gdXNlIGNvbG9yCisgKi8KK2RpZ3JhcGggcGlwZWxpbmUgeworICBub2RlIFtzdHlsZT0iZmlsbGVkIiwgc2hhcGU9ImJveCIsIGZpbGxjb2xvcj0iI2VlZWVlZSIsIGZvbnRzaXplPSI5cHgiLCBmb250bmFtZT0iQml0c3RyZWFtIFZlcmEgU2FucyIsIHRhcmdldD0iX3RvcCJdOworICBlZGdlIFtsYWJlbGZvbnRzaXplPSI3cHgiLCBmb250c2l6ZT0iN3B4IiwgbGFiZWxmb250bmFtZT0iQml0c3RyZWFtIFZlcmEgU2FucyIsIGZvbnRuYW1lPSJCaXRzdHJlYW0gVmVyYSBTYW5zIl07CisgIGxhYmVsbG9jPXQ7CisgIG5vZGVzZXA9MC4yNTsKKworICAvKgorICBmb250bmFtZT0iQml0c3RyZWFtIFZlcmEgU2FucyI7CisgIGZvbnRzaXplPSIxMHB4IjsKKyAgbGFiZWw9IkdTdHJlYW1lciBVbml2ZXJzZSI7CisgICovCisgIAorICAvKiBvYmplY3RzICovCisgIGFwcGxpY2F0aW9uIFtjb2xvcj1ibGFjaywgZmlsbGNvbG9yPSIjZmZkZGRkIl07CisgIGJpbiBbaHJlZj0iR3N0QmluLmh0bWwiLCBjb2xvcj1ibGFjaywgZmlsbGNvbG9yPSIjY2NjY2ZmIl07CisgIGJ1cyBbaHJlZj0iR3N0QnVzLmh0bWwiXTsKKyAgYnVmZmVyIFtocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwiLCBjb2xvcj1ibGFjaywgZmlsbGNvbG9yPSIjZGRmZmRkIl07CisgIGNhcHMgW2hyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwiXTsKKyAgY2xvY2sgW2hyZWY9IkdzdENsb2NrLmh0bWwiXTsKKyAgZWxlbWVudCBbaHJlZj0iR3N0RWxlbWVudC5odG1sIiwgY29sb3I9YmxhY2ssIGZpbGxjb2xvcj0iI2NjY2NmZiJdOworICBlbGVtZW50X2ZhY3RvcnkgW2hyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiLCBsYWJlbD0iZWxlbWVudCBmYWN0b3J5Il07CisgIGV2ZW50IFtocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCIsIGNvbG9yPWJsYWNrLCBmaWxsY29sb3I9IiNkZGZmZGQiXTsKKyAgbWVzc2FnZSBbaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIsIGNvbG9yPWJsYWNrLCBmaWxsY29sb3I9IiNkZGZmZGQiXTsKKyAgcGFkIFtocmVmPSJHc3RQYWQuaHRtbCIsIGNvbG9yPWJsYWNrLCBmaWxsY29sb3I9IiNjY2NjZmYiXTsKKyAgcGFkX3RlbXBsYXRlIFtocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiwgbGFiZWw9InBhZCB0ZW1wbGF0ZSJdOworICBwaXBlbGluZSBbaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIsIGNvbG9yPWJsYWNrLCBmaWxsY29sb3I9IiNjY2NjZmYiXTsKKyAgcGx1Z2luIFtocmVmPSJHc3RQbHVnaW4uaHRtbCJdOworICBwbHVnaW5fZmVhdHVyZSBbaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiwgbGFiZWw9InBsdWdpbiBmZWF0dXJlIl07CisgIHF1ZXJ5IFtocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCIsIGNvbG9yPWJsYWNrLCBmaWxsY29sb3I9IiNkZGZmZGQiXTsKKyAgcmVnaXN0cnkgW2hyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiXTsKKyAgc3RydWN0dXJlIFtocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwiXTsKKyAgCisgIC8qIHJlbGF0aW9ucyAqLworICBiaW4gLT4gZWxlbWVudCBbbGFiZWw9ImlzLWEiXTsKKyAgcGlwZWxpbmUgLT4gYmluIFtsYWJlbD0iaXMtYSJdOworICBwaXBlbGluZSAtPiBidXMgW2xhYmVsPSJoYXMgMSJdOworICBwaXBlbGluZSAtPiBjbG9jayBbbGFiZWw9ImhhcyAxIl07CisgIGVsZW1lbnQgLT4gcGFkX3RlbXBsYXRlIFtsYWJlbD0iaGFzIG4iXTsKKyAgZWxlbWVudCAtPiBwYWQgW2xhYmVsPSJoYXMgbiJdOworICBlbGVtZW50IC0+IGNsb2NrIFtsYWJlbD0ibWF5IHByb3ZpZGUiXTsKKyAgcGFkIC0+IGNhcHMgW2xhYmVsPSJoYXMgbiJdOworICBwYWRfdGVtcGxhdGUgLT4gY2FwcyBbbGFiZWw9ImhhcyBuIl07CisgIGJ1ZmZlciAtPiBjYXBzIFtsYWJlbD0iaGFzIG4iXTsKKyAgY2FwcyAtPiBzdHJ1Y3R1cmUgW2xhYmVsPSJoYXMgbiJdOworICBiaW4gLT4gZWxlbWVudCBbbGFiZWw9ImhhcyBuIl07CisgICAgCisgIHBhZCAtPiBwYWRfdGVtcGxhdGUgW2xhYmVsPSJpcyBjcmVhdGVkIGZyb20iXTsKKyAgZWxlbWVudCAtPiBlbGVtZW50X2ZhY3RvcnkgW2xhYmVsPSJpcyBjcmVhdGVkIGZyb20iXTsKKyAgICAKKyAgZWxlbWVudCAtPiBxdWVyeSBbbGFiZWw9ImFuc3dlcnMiXTsKKyAgZWxlbWVudCAtPiBldmVudCBbbGFiZWw9InNlbmQgJiByZWNlaXZlIl07CisgIGVsZW1lbnQgLT4gYnVmZmVyIFtsYWJlbD0ic2VuZCAmIHJlY2VpdmUiXTsKKyAgZWxlbWVudCAtPiBtZXNzYWdlIFtsYWJlbD0ic2VuZCJdOworICBidXMgLT4gbWVzc2FnZSBbbGFiZWw9InJlY2VpdmUiXTsKKyAgICAKKyAgcmVnaXN0cnkgLT4gcGx1Z2luIFtsYWJlbD0iaGFzIG4iXTsKKyAgcGx1Z2luIC0+IHBsdWdpbl9mZWF0dXJlIFtsYWJlbD0iaGFzIG4iXTsKKyAgZWxlbWVudF9mYWN0b3J5IC0+IHBsdWdpbl9mZWF0dXJlIFtsYWJlbD0iaXMtYSJdOworICAgIAorICBhcHBsaWNhdGlvbiAtPiBwaXBlbGluZSBbbGFiZWw9ImhhcyJdOworICBhcHBsaWNhdGlvbiAtPiBidXMgW2xhYmVsPSJsaXN0ZW4gb24iXTsKKyAgYXBwbGljYXRpb24gLT4gcXVlcnkgW2xhYmVsPSJzZW5kIl07CisgIGFwcGxpY2F0aW9uIC0+IGV2ZW50IFtsYWJlbD0ic2VuZCJdOworfQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvZ3N0LXVuaXZlcnNlLnN2ZyBiL2RvY3MvZ3N0L2dzdC11bml2ZXJzZS5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ5MTQwZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2dzdC11bml2ZXJzZS5zdmcKQEAgLTAsMCArMSwyOTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIgorICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgorPCEtLSBHZW5lcmF0ZWQgYnkgZ3JhcGh2aXogdmVyc2lvbiAyLjI2LjMgKDIwMTAwMTI2LjE2MDApCisgLS0+Cis8IS0tIFRpdGxlOiBwaXBlbGluZSBQYWdlczogMSAtLT4KKzxzdmcgd2lkdGg9IjcxMHB0IiBoZWlnaHQ9IjY0NHB0IgorIHZpZXdCb3g9IjAuMDAgMC4wMCA3MTAuMDAgNjQ0LjAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KKzxnIGlkPSJncmFwaDEiIGNsYXNzPSJncmFwaCIgdHJhbnNmb3JtPSJzY2FsZSgxIDEpIHJvdGF0ZSgwKSB0cmFuc2xhdGUoNCA2NDApIj4KKzx0aXRsZT5waXBlbGluZTwvdGl0bGU+Cis8cG9seWdvbiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSJ3aGl0ZSIgcG9pbnRzPSItNCw1IC00LC02NDAgNzA3LC02NDAgNzA3LDUgLTQsNSIvPgorPCEtLSBhcHBsaWNhdGlvbiAtLT4KKzxnIGlkPSJub2RlMSIgY2xhc3M9Im5vZGUiPjx0aXRsZT5hcHBsaWNhdGlvbjwvdGl0bGU+Cis8cG9seWdvbiBmaWxsPSIjZmZkZGRkIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjU0OSwtNjM2IDQ4MSwtNjM2IDQ4MSwtNjAwIDU0OSwtNjAwIDU0OSwtNjM2Ii8+Cis8dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI1MTUiIHk9Ii02MTUuOSIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iOS4wMCI+YXBwbGljYXRpb248L3RleHQ+Cis8L2c+Cis8IS0tIGJ1cyAtLT4KKzxnIGlkPSJub2RlMyIgY2xhc3M9Im5vZGUiPjx0aXRsZT5idXM8L3RpdGxlPgorPGEgeGxpbms6aHJlZj0iR3N0QnVzLmh0bWwiIHhsaW5rOnRpdGxlPSJidXMiIHRhcmdldD0iX3RvcCI+Cis8cG9seWdvbiBmaWxsPSIjZWVlZWVlIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjEyMywtNDcyIDY5LC00NzIgNjksLTQzNiAxMjMsLTQzNiAxMjMsLTQ3MiIvPgorPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iOTYiIHk9Ii00NTEuOSIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iOS4wMCI+YnVzPC90ZXh0PgorPC9hPgorPC9nPgorPCEtLSBhcHBsaWNhdGlvbiYjNDU7Jmd0O2J1cyAtLT4KKzxnIGlkPSJlZGdlNDgiIGNsYXNzPSJlZGdlIj48dGl0bGU+YXBwbGljYXRpb24mIzQ1OyZndDtidXM8L3RpdGxlPgorPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTQ4MC44ODIsLTYxNS4wNjhDMzg3LjEwOSwtNjA2LjY4MyAxMzAuNzA2LC01ODEuNDM2IDEwNSwtNTU0IDg3LjMwMzQsLTUzNS4xMTIgODcuMTA3NywtNTA0LjQ5MyA5MC4wNjQ3LC00ODIuMTA1Ii8+Cis8cG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSI5My41MzA5LC00ODIuNTk0IDkxLjY0OTksLTQ3Mi4xNjcgODYuNjE4MywtNDgxLjQ5MSA5My41MzA5LC00ODIuNTk0Ii8+Cis8dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIxMjEiIHk9Ii01MzQuNyIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iNy4wMCI+bGlzdGVuIG9uPC90ZXh0PgorPC9nPgorPCEtLSBldmVudCAtLT4KKzxnIGlkPSJub2RlOSIgY2xhc3M9Im5vZGUiPjx0aXRsZT5ldmVudDwvdGl0bGU+Cis8YSB4bGluazpocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCIgeGxpbms6dGl0bGU9ImV2ZW50IiB0YXJnZXQ9Il90b3AiPgorPHBvbHlnb24gZmlsbD0iI2RkZmZkZCIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSI1OTMsLTMwOCA1MzksLTMwOCA1MzksLTI3MiA1OTMsLTI3MiA1OTMsLTMwOCIvPgorPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iNTY2IiB5PSItMjg3LjkiIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjkuMDAiPmV2ZW50PC90ZXh0PgorPC9hPgorPC9nPgorPCEtLSBhcHBsaWNhdGlvbiYjNDU7Jmd0O2V2ZW50IC0tPgorPGcgaWQ9ImVkZ2U1MiIgY2xhc3M9ImVkZ2UiPjx0aXRsZT5hcHBsaWNhdGlvbiYjNDU7Jmd0O2V2ZW50PC90aXRsZT4KKzxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik01NDkuMTkyLC02MDkuMzIyQzU4My4wOTEsLTU5OC40MjEgNjMwLC01NzYuMDkyIDYzMCwtNTM2IDYzMCwtNTM2IDYzMCwtNTM2IDYzMCwtMzcyIDYzMCwtMzUwLjYzIDYyOC40MzYsLTM0My4zNzkgNjE2LC0zMjYgNjExLjk4NSwtMzIwLjM4OSA2MDYuODE5LC0zMTUuMzIxIDYwMS4zMzcsLTMxMC44NzciLz4KKzxwb2x5Z29uIGZpbGw9ImJsYWNrIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjYwMy4yOTQsLTMwNy45NyA1OTMuMTc3LC0zMDQuODIzIDU5OS4xMjMsLTMxMy41OTIgNjAzLjI5NCwtMzA3Ljk3Ii8+Cis8dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI2MzkiIHk9Ii00NTIuNyIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iNy4wMCI+c2VuZDwvdGV4dD4KKzwvZz4KKzwhLS0gcGlwZWxpbmUgLS0+Cis8ZyBpZD0ibm9kZTEzIiBjbGFzcz0ibm9kZSI+PHRpdGxlPnBpcGVsaW5lPC90aXRsZT4KKzxhIHhsaW5rOmhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHhsaW5rOnRpdGxlPSJwaXBlbGluZSIgdGFyZ2V0PSJfdG9wIj4KKzxwb2x5Z29uIGZpbGw9IiNjY2NjZmYiIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMjAwLC01NTQgMTQ2LC01NTQgMTQ2LC01MTggMjAwLC01MTggMjAwLC01NTQiLz4KKzx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjE3MyIgeT0iLTUzMy45IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI5LjAwIj5waXBlbGluZTwvdGV4dD4KKzwvYT4KKzwvZz4KKzwhLS0gYXBwbGljYXRpb24mIzQ1OyZndDtwaXBlbGluZSAtLT4KKzxnIGlkPSJlZGdlNDYiIGNsYXNzPSJlZGdlIj48dGl0bGU+YXBwbGljYXRpb24mIzQ1OyZndDtwaXBlbGluZTwvdGl0bGU+Cis8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNNDgwLjk1NywtNjA5LjgzOEM0MTYuNDg3LC01OTQuMzggMjc3LjA1OSwtNTYwLjk1IDIxMC4yMTQsLTU0NC45MjMiLz4KKzxwb2x5Z29uIGZpbGw9ImJsYWNrIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjIxMC42NzEsLTU0MS40MzMgMjAwLjEzMSwtNTQyLjUwNSAyMDkuMDM5LC01NDguMjQgMjEwLjY3MSwtNTQxLjQzMyIvPgorPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMzcxLjUiIHk9Ii01NzUuNyIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iNy4wMCI+aGFzPC90ZXh0PgorPC9nPgorPCEtLSBxdWVyeSAtLT4KKzxnIGlkPSJub2RlMTYiIGNsYXNzPSJub2RlIj48dGl0bGU+cXVlcnk8L3RpdGxlPgorPGEgeGxpbms6aHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHhsaW5rOnRpdGxlPSJxdWVyeSIgdGFyZ2V0PSJfdG9wIj4KKzxwb2x5Z29uIGZpbGw9IiNkZGZmZGQiIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iNjg4LC0zMDggNjM0LC0zMDggNjM0LC0yNzIgNjg4LC0yNzIgNjg4LC0zMDgiLz4KKzx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjY2MSIgeT0iLTI4Ny45IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI5LjAwIj5xdWVyeTwvdGV4dD4KKzwvYT4KKzwvZz4KKzwhLS0gYXBwbGljYXRpb24mIzQ1OyZndDtxdWVyeSAtLT4KKzxnIGlkPSJlZGdlNTAiIGNsYXNzPSJlZGdlIj48dGl0bGU+YXBwbGljYXRpb24mIzQ1OyZndDtxdWVyeTwvdGl0bGU+Cis8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNNTQ5LjIsLTYwOC44NDVDNTk4LjU4MiwtNTk0LjYwMiA2ODQsLTU2NS42NzcgNjg0LC01MzYgNjg0LC01MzYgNjg0LC01MzYgNjg0LC0zNzIgNjg0LC0zNTMuNDQzIDY3OC40NzIsLTMzMy4zNzIgNjcyLjgzNiwtMzE3LjczMiIvPgorPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iNjc2LjAxNCwtMzE2LjI0NSA2NjkuMTc0LC0zMDguMTU1IDY2OS40NzYsLTMxOC43NDUgNjc2LjAxNCwtMzE2LjI0NSIvPgorPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iNjkzIiB5PSItNDUyLjciIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjcuMDAiPnNlbmQ8L3RleHQ+Cis8L2c+Cis8IS0tIGJpbiAtLT4KKzxnIGlkPSJub2RlMiIgY2xhc3M9Im5vZGUiPjx0aXRsZT5iaW48L3RpdGxlPgorPGEgeGxpbms6aHJlZj0iR3N0QmluLmh0bWwiIHhsaW5rOnRpdGxlPSJiaW4iIHRhcmdldD0iX3RvcCI+Cis8cG9seWdvbiBmaWxsPSIjY2NjY2ZmIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjM0NCwtNDcyIDI5MCwtNDcyIDI5MCwtNDM2IDM0NCwtNDM2IDM0NCwtNDcyIi8+Cis8dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIzMTciIHk9Ii00NTEuOSIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iOS4wMCI+YmluPC90ZXh0PgorPC9hPgorPC9nPgorPCEtLSBlbGVtZW50IC0tPgorPGcgaWQ9Im5vZGU3IiBjbGFzcz0ibm9kZSI+PHRpdGxlPmVsZW1lbnQ8L3RpdGxlPgorPGEgeGxpbms6aHJlZj0iR3N0RWxlbWVudC5odG1sIiB4bGluazp0aXRsZT0iZWxlbWVudCIgdGFyZ2V0PSJfdG9wIj4KKzxwb2x5Z29uIGZpbGw9IiNjY2NjZmYiIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMzgwLC0zOTAgMzI2LC0zOTAgMzI2LC0zNTQgMzgwLC0zNTQgMzgwLC0zOTAiLz4KKzx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjM1MyIgeT0iLTM2OS45IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI5LjAwIj5lbGVtZW50PC90ZXh0PgorPC9hPgorPC9nPgorPCEtLSBiaW4mIzQ1OyZndDtlbGVtZW50IC0tPgorPGcgaWQ9ImVkZ2UyIiBjbGFzcz0iZWRnZSI+PHRpdGxlPmJpbiYjNDU7Jmd0O2VsZW1lbnQ8L3RpdGxlPgorPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTMxNC4zODUsLTQzNS44OUMzMTMuODYzLC00MjcuMTQ3IDMxNC4zNiwtNDE2LjY5NCAzMTgsLTQwOCAzMTkuNDY3LC00MDQuNDk3IDMyMS40NDgsLTQwMS4xNDQgMzIzLjcyNSwtMzk3Ljk5MSIvPgorPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMzI2LjU1OCwtNDAwLjA2IDMzMC4yOTksLTM5MC4xNDggMzIxLjE5MywtMzk1LjU2NCAzMjYuNTU4LC00MDAuMDYiLz4KKzx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjMyNC41IiB5PSItNDExLjciIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjcuMDAiPmlzJiM0NTthPC90ZXh0PgorPC9nPgorPCEtLSBiaW4mIzQ1OyZndDtlbGVtZW50IC0tPgorPGcgaWQ9ImVkZ2UyNCIgY2xhc3M9ImVkZ2UiPjx0aXRsZT5iaW4mIzQ1OyZndDtlbGVtZW50PC90aXRsZT4KKzxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik0zMjQuOTksLTQzNS44MDJDMzI5LjY1LC00MjUuMTg1IDMzNS42MjQsLTQxMS41NzggMzQwLjg1NywtMzk5LjY2Ii8+Cis8cG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIzNDQuMjE4LC00MDAuNzExIDM0NS4wMzMsLTM5MC4xNDggMzM3LjgwOCwtMzk3Ljg5NyAzNDQuMjE4LC00MDAuNzExIi8+Cis8dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIzNDgiIHk9Ii00MTEuNyIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iNy4wMCI+aGFzIG48L3RleHQ+Cis8L2c+Cis8IS0tIG1lc3NhZ2UgLS0+Cis8ZyBpZD0ibm9kZTEwIiBjbGFzcz0ibm9kZSI+PHRpdGxlPm1lc3NhZ2U8L3RpdGxlPgorPGEgeGxpbms6aHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgeGxpbms6dGl0bGU9Im1lc3NhZ2UiIHRhcmdldD0iX3RvcCI+Cis8cG9seWdvbiBmaWxsPSIjZGRmZmRkIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjEzMCwtMzA4IDcyLC0zMDggNzIsLTI3MiAxMzAsLTI3MiAxMzAsLTMwOCIvPgorPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMTAxIiB5PSItMjg3LjkiIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjkuMDAiPm1lc3NhZ2U8L3RleHQ+Cis8L2E+Cis8L2c+Cis8IS0tIGJ1cyYjNDU7Jmd0O21lc3NhZ2UgLS0+Cis8ZyBpZD0iZWRnZTM4IiBjbGFzcz0iZWRnZSI+PHRpdGxlPmJ1cyYjNDU7Jmd0O21lc3NhZ2U8L3RpdGxlPgorPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTk2LjU1NDIsLTQzNS44MjNDOTcuNDIxNCwtNDA3LjM3NyA5OS4xMDYyLC0zNTIuMTE1IDEwMC4xMzQsLTMxOC4zOSIvPgorPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMTAzLjYzNywtMzE4LjM2MSAxMDAuNDQzLC0zMDguMjU5IDk2LjY0MDEsLTMxOC4xNDggMTAzLjYzNywtMzE4LjM2MSIvPgorPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMTEzIiB5PSItMzcwLjciIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjcuMDAiPnJlY2VpdmU8L3RleHQ+Cis8L2c+Cis8IS0tIGJ1ZmZlciAtLT4KKzxnIGlkPSJub2RlNCIgY2xhc3M9Im5vZGUiPjx0aXRsZT5idWZmZXI8L3RpdGxlPgorPGEgeGxpbms6aHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sIiB4bGluazp0aXRsZT0iYnVmZmVyIiB0YXJnZXQ9Il90b3AiPgorPHBvbHlnb24gZmlsbD0iI2RkZmZkZCIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSI1MjYsLTI1NCA0NzIsLTI1NCA0NzIsLTIxOCA1MjYsLTIxOCA1MjYsLTI1NCIvPgorPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iNDk5IiB5PSItMjMzLjkiIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjkuMDAiPmJ1ZmZlcjwvdGV4dD4KKzwvYT4KKzwvZz4KKzwhLS0gY2FwcyAtLT4KKzxnIGlkPSJub2RlNSIgY2xhc3M9Im5vZGUiPjx0aXRsZT5jYXBzPC90aXRsZT4KKzxhIHhsaW5rOmhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwiIHhsaW5rOnRpdGxlPSJjYXBzIiB0YXJnZXQ9Il90b3AiPgorPHBvbHlnb24gZmlsbD0iI2VlZWVlZSIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSI0NzcsLTExOCA0MjMsLTExOCA0MjMsLTgyIDQ3NywtODIgNDc3LC0xMTgiLz4KKzx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjQ1MCIgeT0iLTk3LjkiIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjkuMDAiPmNhcHM8L3RleHQ+Cis8L2E+Cis8L2c+Cis8IS0tIGJ1ZmZlciYjNDU7Jmd0O2NhcHMgLS0+Cis8ZyBpZD0iZWRnZTIwIiBjbGFzcz0iZWRnZSI+PHRpdGxlPmJ1ZmZlciYjNDU7Jmd0O2NhcHM8L3RpdGxlPgorPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTQ5Mi44OTcsLTIxNy44NTVDNDg2LjA3OSwtMTk3Ljc1OSA0NzQuNjA1LC0xNjQuNDM3IDQ2NCwtMTM2IDQ2Mi45ODksLTEzMy4yOSA0NjEuOTIyLC0xMzAuNDcyIDQ2MC44NDYsLTEyNy42NTkiLz4KKzxwb2x5Z29uIGZpbGw9ImJsYWNrIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjQ2NC4wOSwtMTI2LjM0MyA0NTcuMjIxLC0xMTguMjc2IDQ1Ny41NiwtMTI4Ljg2NiA0NjQuMDksLTEyNi4zNDMiLz4KKzx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjQ5NyIgeT0iLTE4MC43IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI3LjAwIj5oYXMgbjwvdGV4dD4KKzwvZz4KKzwhLS0gc3RydWN0dXJlIC0tPgorPGcgaWQ9Im5vZGUxOCIgY2xhc3M9Im5vZGUiPjx0aXRsZT5zdHJ1Y3R1cmU8L3RpdGxlPgorPGEgeGxpbms6aHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIiB4bGluazp0aXRsZT0ic3RydWN0dXJlIiB0YXJnZXQ9Il90b3AiPgorPHBvbHlnb24gZmlsbD0iI2VlZWVlZSIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSI0ODAsLTM2IDQyMCwtMzYgNDIwLC0xLjc3NjM2ZS0xNCA0ODAsLTMuNTUyNzFlLTE1IDQ4MCwtMzYiLz4KKzx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjQ1MCIgeT0iLTE1LjkiIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjkuMDAiPnN0cnVjdHVyZTwvdGV4dD4KKzwvYT4KKzwvZz4KKzwhLS0gY2FwcyYjNDU7Jmd0O3N0cnVjdHVyZSAtLT4KKzxnIGlkPSJlZGdlMjIiIGNsYXNzPSJlZGdlIj48dGl0bGU+Y2FwcyYjNDU7Jmd0O3N0cnVjdHVyZTwvdGl0bGU+Cis8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNNDUwLC04MS44MDE1QzQ1MCwtNzEuMzk3NiA0NTAsLTU4LjEyMTUgNDUwLC00Ni4zNzY4Ii8+Cis8cG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSI0NTMuNSwtNDYuMTQ3NiA0NTAsLTM2LjE0NzYgNDQ2LjUsLTQ2LjE0NzYgNDUzLjUsLTQ2LjE0NzYiLz4KKzx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjQ2MCIgeT0iLTU3LjciIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjcuMDAiPmhhcyBuPC90ZXh0PgorPC9nPgorPCEtLSBjbG9jayAtLT4KKzxnIGlkPSJub2RlNiIgY2xhc3M9Im5vZGUiPjx0aXRsZT5jbG9jazwvdGl0bGU+Cis8YSB4bGluazpocmVmPSJHc3RDbG9jay5odG1sIiB4bGluazp0aXRsZT0iY2xvY2siIHRhcmdldD0iX3RvcCI+Cis8cG9seWdvbiBmaWxsPSIjZWVlZWVlIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjIwMiwtMzA4IDE0OCwtMzA4IDE0OCwtMjcyIDIwMiwtMjcyIDIwMiwtMzA4Ii8+Cis8dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIxNzUiIHk9Ii0yODcuOSIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iOS4wMCI+Y2xvY2s8L3RleHQ+Cis8L2E+Cis8L2c+Cis8IS0tIGVsZW1lbnQmIzQ1OyZndDtidWZmZXIgLS0+Cis8ZyBpZD0iZWRnZTM0IiBjbGFzcz0iZWRnZSI+PHRpdGxlPmVsZW1lbnQmIzQ1OyZndDtidWZmZXI8L3RpdGxlPgorPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTM4MC4yNzUsLTM1My45OTFDMzg4Ljg1NSwtMzQ4LjI3OSAzOTguMzQ4LC0zNDEuOTExIDQwNywtMzM2IDQyNC45MTgsLTMyMy43NTggNDMxLjU0MywtMzIzLjIzMSA0NDcsLTMwOCA0NjAuNzM0LC0yOTQuNDY3IDQ3My40NTgsLTI3Ni45NzYgNDgyLjg4MiwtMjYyLjYyMiIvPgorPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iNDg1Ljg1OSwtMjY0LjQ2MyA0ODguMzAyLC0yNTQuMTU0IDQ3OS45NjMsLTI2MC42ODkgNDg1Ljg1OSwtMjY0LjQ2MyIvPgorPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iNDUwLjUiIHk9Ii0zMjkuNyIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iNy4wMCI+c2VuZCAmYW1wOyByZWNlaXZlPC90ZXh0PgorPC9nPgorPCEtLSBlbGVtZW50JiM0NTsmZ3Q7Y2xvY2sgLS0+Cis8ZyBpZD0iZWRnZTE0IiBjbGFzcz0iZWRnZSI+PHRpdGxlPmVsZW1lbnQmIzQ1OyZndDtjbG9jazwvdGl0bGU+Cis8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNMzI1Ljg1NSwtMzY3LjdDMjk5LjYyMSwtMzYyLjc1MyAyNTkuMzU1LC0zNTMuMDMyIDIyOCwtMzM2IDIxNy44MzYsLTMzMC40NzkgMjA3LjkyMSwtMzIyLjcyNiAxOTkuNDY5LC0zMTUuMTU3Ii8+Cis8cG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIyMDEuODUxLC0zMTIuNTkyIDE5Mi4xNTMsLTMwOC4zMjYgMTk3LjA3NCwtMzE3LjcwOSAyMDEuODUxLC0zMTIuNTkyIi8+Cis8dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIyNTAuNSIgeT0iLTMyOS43IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI3LjAwIj5tYXkgcHJvdmlkZTwvdGV4dD4KKzwvZz4KKzwhLS0gZWxlbWVudF9mYWN0b3J5IC0tPgorPGcgaWQ9Im5vZGU4IiBjbGFzcz0ibm9kZSI+PHRpdGxlPmVsZW1lbnRfZmFjdG9yeTwvdGl0bGU+Cis8YSB4bGluazpocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB4bGluazp0aXRsZT0iZWxlbWVudCBmYWN0b3J5IiB0YXJnZXQ9Il90b3AiPgorPHBvbHlnb24gZmlsbD0iI2VlZWVlZSIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIzMTAsLTMwOCAyMjAsLTMwOCAyMjAsLTI3MiAzMTAsLTI3MiAzMTAsLTMwOCIvPgorPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMjY1IiB5PSItMjg3LjkiIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjkuMDAiPmVsZW1lbnQgZmFjdG9yeTwvdGV4dD4KKzwvYT4KKzwvZz4KKzwhLS0gZWxlbWVudCYjNDU7Jmd0O2VsZW1lbnRfZmFjdG9yeSAtLT4KKzxnIGlkPSJlZGdlMjgiIGNsYXNzPSJlZGdlIj48dGl0bGU+ZWxlbWVudCYjNDU7Jmd0O2VsZW1lbnRfZmFjdG9yeTwvdGl0bGU+Cis8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNMzI1Ljc2MiwtMzYzLjMyOEMzMTEuNDA1LC0zNTcuNTU5IDI5NC40NDcsLTM0OC42NzkgMjgzLC0zMzYgMjc4LjM5OSwtMzMwLjkwNCAyNzQuOTE1LC0zMjQuNDk2IDI3Mi4zLC0zMTguMDk1Ii8+Cis8cG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIyNzUuNDYsLTMxNi41MjggMjY4Ljg2OSwtMzA4LjIzMyAyNjguODQ5LC0zMTguODI4IDI3NS40NiwtMzE2LjUyOCIvPgorPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMzExIiB5PSItMzI5LjciIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjcuMDAiPmlzIGNyZWF0ZWQgZnJvbTwvdGV4dD4KKzwvZz4KKzwhLS0gZWxlbWVudCYjNDU7Jmd0O2V2ZW50IC0tPgorPGcgaWQ9ImVkZ2UzMiIgY2xhc3M9ImVkZ2UiPjx0aXRsZT5lbGVtZW50JiM0NTsmZ3Q7ZXZlbnQ8L3RpdGxlPgorPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTM4MC4xOTksLTM2Ni42NzFDNDA3LjM1NiwtMzYwLjg3IDQ0OS45NzgsLTM1MC40NTIgNDg1LC0zMzYgNTAwLjMyOSwtMzI5LjY3NSA1MTYuMzczLC0zMjEuMDM2IDUzMC4xLC0zMTIuOTUzIi8+Cis8cG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSI1MzEuOTg4LC0zMTUuOTAyIDUzOC43NTYsLTMwNy43NTEgNTI4LjM4MiwtMzA5LjkwMiA1MzEuOTg4LC0zMTUuOTAyIi8+Cis8dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI1MzMuNSIgeT0iLTMyOS43IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI3LjAwIj5zZW5kICZhbXA7IHJlY2VpdmU8L3RleHQ+Cis8L2c+Cis8IS0tIGVsZW1lbnQmIzQ1OyZndDttZXNzYWdlIC0tPgorPGcgaWQ9ImVkZ2UzNiIgY2xhc3M9ImVkZ2UiPjx0aXRsZT5lbGVtZW50JiM0NTsmZ3Q7bWVzc2FnZTwvdGl0bGU+Cis8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNMzI1LjkzMSwtMzY4LjA1NUMyOTMuNDY2LC0zNjIuODQ3IDIzNy43MDMsLTM1Mi4zNzMgMTkyLC0zMzYgMTc0LjAyOSwtMzI5LjU2MiAxNTUuMDUxLC0zMjAuMzg1IDEzOS4xMDMsLTMxMS45MiIvPgorPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMTQwLjU1NSwtMzA4LjcyNiAxMzAuMDk0LC0zMDcuMDQ0IDEzNy4yMjMsLTMxNC44ODIgMTQwLjU1NSwtMzA4LjcyNiIvPgorPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMjAxIiB5PSItMzI5LjciIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjcuMDAiPnNlbmQ8L3RleHQ+Cis8L2c+Cis8IS0tIHBhZCAtLT4KKzxnIGlkPSJub2RlMTEiIGNsYXNzPSJub2RlIj48dGl0bGU+cGFkPC90aXRsZT4KKzxhIHhsaW5rOmhyZWY9IkdzdFBhZC5odG1sIiB4bGluazp0aXRsZT0icGFkIiB0YXJnZXQ9Il90b3AiPgorPHBvbHlnb24gZmlsbD0iI2NjY2NmZiIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSI0MzgsLTMwOCAzODQsLTMwOCAzODQsLTI3MiA0MzgsLTI3MiA0MzgsLTMwOCIvPgorPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iNDExIiB5PSItMjg3LjkiIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjkuMDAiPnBhZDwvdGV4dD4KKzwvYT4KKzwvZz4KKzwhLS0gZWxlbWVudCYjNDU7Jmd0O3BhZCAtLT4KKzxnIGlkPSJlZGdlMTIiIGNsYXNzPSJlZGdlIj48dGl0bGU+ZWxlbWVudCYjNDU7Jmd0O3BhZDwvdGl0bGU+Cis8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNMzY1Ljg3MiwtMzUzLjgwMkMzNzMuNjA2LC0zNDIuODY3IDM4My41ODUsLTMyOC43NTkgMzkyLjE5MSwtMzE2LjU5MiIvPgorPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMzk1LjI0NywtMzE4LjMzMyAzOTguMTY0LC0zMDguMTQ4IDM4OS41MzIsLTMxNC4yOTEgMzk1LjI0NywtMzE4LjMzMyIvPgorPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMzk2IiB5PSItMzI5LjciIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjcuMDAiPmhhcyBuPC90ZXh0PgorPC9nPgorPCEtLSBwYWRfdGVtcGxhdGUgLS0+Cis8ZyBpZD0ibm9kZTEyIiBjbGFzcz0ibm9kZSI+PHRpdGxlPnBhZF90ZW1wbGF0ZTwvdGl0bGU+Cis8YSB4bGluazpocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB4bGluazp0aXRsZT0icGFkIHRlbXBsYXRlIiB0YXJnZXQ9Il90b3AiPgorPHBvbHlnb24gZmlsbD0iI2VlZWVlZSIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSI0MTQsLTIwMCAzMzQsLTIwMCAzMzQsLTE2NCA0MTQsLTE2NCA0MTQsLTIwMCIvPgorPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMzc0IiB5PSItMTc5LjkiIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjkuMDAiPnBhZCB0ZW1wbGF0ZTwvdGV4dD4KKzwvYT4KKzwvZz4KKzwhLS0gZWxlbWVudCYjNDU7Jmd0O3BhZF90ZW1wbGF0ZSAtLT4KKzxnIGlkPSJlZGdlMTAiIGNsYXNzPSJlZGdlIj48dGl0bGU+ZWxlbWVudCYjNDU7Jmd0O3BhZF90ZW1wbGF0ZTwvdGl0bGU+Cis8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNMzUyLjM0MywtMzUzLjg2NkMzNTEuODUyLC0zMzMuNzc5IDM1MS43NCwtMzAwLjQ2NSAzNTUsLTI3MiAzNTcuMzkyLC0yNTEuMTA5IDM2Mi4zNSwtMjI3Ljg5OSAzNjYuNjAyLC0yMTAuMjgyIi8+Cis8cG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIzNzAuMTE1LC0yMTAuNjU1IDM2OS4xMjgsLTIwMC4xMDcgMzYzLjMyMSwtMjA4Ljk2OSAzNzAuMTE1LC0yMTAuNjU1Ii8+Cis8dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIzNjUiIHk9Ii0yODguNyIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iNy4wMCI+aGFzIG48L3RleHQ+Cis8L2c+Cis8IS0tIGVsZW1lbnQmIzQ1OyZndDtxdWVyeSAtLT4KKzxnIGlkPSJlZGdlMzAiIGNsYXNzPSJlZGdlIj48dGl0bGU+ZWxlbWVudCYjNDU7Jmd0O3F1ZXJ5PC90aXRsZT4KKzxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik0zODAuMDY1LC0zNjkuNzA3QzQyMC41OTUsLTM2NS43NTEgNDk5LjEyNCwtMzU2LjA2MiA1NjMsLTMzNiA1ODQuMjI1LC0zMjkuMzM0IDYwNi43NzMsLTMxOC45OTggNjI0Ljg4NCwtMzA5LjgxMSIvPgorPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iNjI2LjY0NSwtMzEyLjg0IDYzMy45MTksLTMwNS4xMzcgNjIzLjQyOSwtMzA2LjYyMyA2MjYuNjQ1LC0zMTIuODQiLz4KKzx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjYwNCIgeT0iLTMyOS43IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI3LjAwIj5hbnN3ZXJzPC90ZXh0PgorPC9nPgorPCEtLSBwbHVnaW5fZmVhdHVyZSAtLT4KKzxnIGlkPSJub2RlMTUiIGNsYXNzPSJub2RlIj48dGl0bGU+cGx1Z2luX2ZlYXR1cmU8L3RpdGxlPgorPGEgeGxpbms6aHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB4bGluazp0aXRsZT0icGx1Z2luIGZlYXR1cmUiIHRhcmdldD0iX3RvcCI+Cis8cG9seWdvbiBmaWxsPSIjZWVlZWVlIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjE2MywtMjAwIDgxLC0yMDAgODEsLTE2NCAxNjMsLTE2NCAxNjMsLTIwMCIvPgorPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMTIyIiB5PSItMTc5LjkiIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjkuMDAiPnBsdWdpbiBmZWF0dXJlPC90ZXh0PgorPC9hPgorPC9nPgorPCEtLSBlbGVtZW50X2ZhY3RvcnkmIzQ1OyZndDtwbHVnaW5fZmVhdHVyZSAtLT4KKzxnIGlkPSJlZGdlNDQiIGNsYXNzPSJlZGdlIj48dGl0bGU+ZWxlbWVudF9mYWN0b3J5JiM0NTsmZ3Q7cGx1Z2luX2ZlYXR1cmU8L3RpdGxlPgorPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTI0MS4wNjUsLTI3MS45MjNDMjE3LjI0NiwtMjUzLjkzNCAxODAuNTM4LC0yMjYuMjEgMTU0LjE3OCwtMjA2LjMwMiIvPgorPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMTU2LjEwMiwtMjAzLjM3IDE0Ni4wMTMsLTIwMC4xMzYgMTUxLjg4NCwtMjA4Ljk1NSAxNTYuMTAyLC0yMDMuMzciLz4KKzx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjIyMS41IiB5PSItMjM0LjciIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjcuMDAiPmlzJiM0NTthPC90ZXh0PgorPC9nPgorPCEtLSBwYWQmIzQ1OyZndDtjYXBzIC0tPgorPGcgaWQ9ImVkZ2UxNiIgY2xhc3M9ImVkZ2UiPjx0aXRsZT5wYWQmIzQ1OyZndDtjYXBzPC90aXRsZT4KKzxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik00MjYuMjEyLC0yNzEuOTY3QzQzMC4wNDIsLTI2Ni41MTMgNDMzLjcxMSwtMjYwLjI5MyA0MzYsLTI1NCA0NDQuMTIyLC0yMzEuNjY5IDQ0Ny43MDYsLTE2Ni41ODIgNDQ5LjE0NCwtMTI4LjU1Ii8+Cis8cG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSI0NTIuNjU2LC0xMjguMjYyIDQ0OS41MDksLTExOC4xNDUgNDQ1LjY2LC0xMjguMDE2IDQ1Mi42NTYsLTEyOC4yNjIiLz4KKzx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjQ1OCIgeT0iLTE4MC43IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI3LjAwIj5oYXMgbjwvdGV4dD4KKzwvZz4KKzwhLS0gcGFkJiM0NTsmZ3Q7cGFkX3RlbXBsYXRlIC0tPgorPGcgaWQ9ImVkZ2UyNiIgY2xhc3M9ImVkZ2UiPjx0aXRsZT5wYWQmIzQ1OyZndDtwYWRfdGVtcGxhdGU8L3RpdGxlPgorPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTM5MS40NTEsLTI3MS43MzdDMzg2LjkzOCwtMjY2LjQ2MiAzODIuNjc5LC0yNjAuMzg5IDM4MCwtMjU0IDM3NC4yOTgsLTI0MC40IDM3Mi41NjcsLTIyNC4xMDYgMzcyLjM2NCwtMjEwLjQ2Ii8+Cis8cG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIzNzUuODY2LC0yMTAuMjI2IDM3Mi40ODEsLTIwMC4xODcgMzY4Ljg2NywtMjEwLjE0NiAzNzUuODY2LC0yMTAuMjI2Ii8+Cis8dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI0MDgiIHk9Ii0yMzQuNyIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iNy4wMCI+aXMgY3JlYXRlZCBmcm9tPC90ZXh0PgorPC9nPgorPCEtLSBwYWRfdGVtcGxhdGUmIzQ1OyZndDtjYXBzIC0tPgorPGcgaWQ9ImVkZ2UxOCIgY2xhc3M9ImVkZ2UiPjx0aXRsZT5wYWRfdGVtcGxhdGUmIzQ1OyZndDtjYXBzPC90aXRsZT4KKzxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik0zOTAuNjg4LC0xNjMuNThDMzk4LjM2NSwtMTU1LjE0NCA0MDcuNjExLC0xNDUuMDM0IDQxNiwtMTM2IDQxOS4xMTEsLTEzMi42NDkgNDIyLjM5OCwtMTI5LjEzNyA0MjUuNjUyLC0xMjUuNjc1Ii8+Cis8cG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSI0MjguMzMxLC0xMjcuOTM1IDQzMi42NDMsLTExOC4yNTggNDIzLjIzNywtMTIzLjEzNCA0MjguMzMxLC0xMjcuOTM1Ii8+Cis8dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI0MjYiIHk9Ii0xMzkuNyIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iNy4wMCI+aGFzIG48L3RleHQ+Cis8L2c+Cis8IS0tIHBpcGVsaW5lJiM0NTsmZ3Q7YmluIC0tPgorPGcgaWQ9ImVkZ2U0IiBjbGFzcz0iZWRnZSI+PHRpdGxlPnBpcGVsaW5lJiM0NTsmZ3Q7YmluPC90aXRsZT4KKzxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik0yMDAuMDg1LC01MjAuNTc2QzIyMi44NjksLTUwNy42MDIgMjU1LjY0NCwtNDg4LjkzOSAyODAuNjk4LC00NzQuNjcyIi8+Cis8cG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIyODIuNTg5LC00NzcuNjIzIDI4OS41NDcsLTQ2OS42MzMgMjc5LjEyNSwtNDcxLjU0IDI4Mi41ODksLTQ3Ny42MjMiLz4KKzx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjI2MC41IiB5PSItNDkzLjciIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjcuMDAiPmlzJiM0NTthPC90ZXh0PgorPC9nPgorPCEtLSBwaXBlbGluZSYjNDU7Jmd0O2J1cyAtLT4KKzxnIGlkPSJlZGdlNiIgY2xhc3M9ImVkZ2UiPjx0aXRsZT5waXBlbGluZSYjNDU7Jmd0O2J1czwvdGl0bGU+Cis8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNMTQ1LjgzOSwtNTIyLjI3NEMxMzYuMTU0LC01MTYuNDAzIDEyNS43MzksLTUwOC44NDcgMTE4LC01MDAgMTEzLjMwMSwtNDk0LjYyOCAxMDkuMzgsLTQ4OC4wNzcgMTA2LjIxMiwtNDgxLjYyMiIvPgorPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMTA5LjM2NiwtNDgwLjEwMiAxMDIuMTA4LC00NzIuMzg0IDEwMi45NjksLTQ4Mi45NDMgMTA5LjM2NiwtNDgwLjEwMiIvPgorPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMTI4IiB5PSItNDkzLjciIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjcuMDAiPmhhcyAxPC90ZXh0PgorPC9nPgorPCEtLSBwaXBlbGluZSYjNDU7Jmd0O2Nsb2NrIC0tPgorPGcgaWQ9ImVkZ2U4IiBjbGFzcz0iZWRnZSI+PHRpdGxlPnBpcGVsaW5lJiM0NTsmZ3Q7Y2xvY2s8L3RpdGxlPgorPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTE3Mi4wMjksLTUxNy44MDdDMTcwLjIwNywtNDgyLjY3OCAxNjYuMzQxLC00MDMuMDU0IDE2NSwtMzM2IDE2NC45MTEsLTMzMS41NTYgMTY0LjQsLTMzMC40MDQgMTY1LC0zMjYgMTY1LjM2NSwtMzIzLjMyMSAxNjUuODc3LC0zMjAuNTU5IDE2Ni40NzcsLTMxNy44MTQiLz4KKzxwb2x5Z29uIGZpbGw9ImJsYWNrIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjE2OS44NzEsLTMxOC42NjcgMTY4LjkzOSwtMzA4LjExMyAxNjMuMDg2LC0zMTYuOTQ1IDE2OS44NzEsLTMxOC42NjciLz4KKzx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjE3OCIgeT0iLTQxMS43IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI3LjAwIj5oYXMgMTwvdGV4dD4KKzwvZz4KKzwhLS0gcGx1Z2luIC0tPgorPGcgaWQ9Im5vZGUxNCIgY2xhc3M9Im5vZGUiPjx0aXRsZT5wbHVnaW48L3RpdGxlPgorPGEgeGxpbms6aHJlZj0iR3N0UGx1Z2luLmh0bWwiIHhsaW5rOnRpdGxlPSJwbHVnaW4iIHRhcmdldD0iX3RvcCI+Cis8cG9seWdvbiBmaWxsPSIjZWVlZWVlIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjU0LC0zMDggMi4xMzE2M2UtMTQsLTMwOCAwLC0yNzIgNTQsLTI3MiA1NCwtMzA4Ii8+Cis8dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIyNyIgeT0iLTI4Ny45IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI5LjAwIj5wbHVnaW48L3RleHQ+Cis8L2E+Cis8L2c+Cis8IS0tIHBsdWdpbiYjNDU7Jmd0O3BsdWdpbl9mZWF0dXJlIC0tPgorPGcgaWQ9ImVkZ2U0MiIgY2xhc3M9ImVkZ2UiPjx0aXRsZT5wbHVnaW4mIzQ1OyZndDtwbHVnaW5fZmVhdHVyZTwvdGl0bGU+Cis8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNNDMuMTE1NSwtMjcxLjY3OUM1OC41NjI0LC0yNTQuMTE5IDgyLjAyNDUsLTIyNy40NDYgOTkuMzQ4NSwtMjA3Ljc1MSIvPgorPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMTAyLjE0NiwtMjA5Ljg3IDEwNi4xMjMsLTIwMC4wNSA5Ni44ODk4LC0yMDUuMjQ3IDEwMi4xNDYsLTIwOS44NyIvPgorPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iOTkiIHk9Ii0yMzQuNyIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iNy4wMCI+aGFzIG48L3RleHQ+Cis8L2c+Cis8IS0tIHJlZ2lzdHJ5IC0tPgorPGcgaWQ9Im5vZGUxNyIgY2xhc3M9Im5vZGUiPjx0aXRsZT5yZWdpc3RyeTwvdGl0bGU+Cis8YSB4bGluazpocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB4bGluazp0aXRsZT0icmVnaXN0cnkiIHRhcmdldD0iX3RvcCI+Cis8cG9seWdvbiBmaWxsPSIjZWVlZWVlIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjU0LC0zOTAgMi4xMzE2M2UtMTQsLTM5MCAwLC0zNTQgNTQsLTM1NCA1NCwtMzkwIi8+Cis8dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIyNyIgeT0iLTM2OS45IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI5LjAwIj5yZWdpc3RyeTwvdGV4dD4KKzwvYT4KKzwvZz4KKzwhLS0gcmVnaXN0cnkmIzQ1OyZndDtwbHVnaW4gLS0+Cis8ZyBpZD0iZWRnZTQwIiBjbGFzcz0iZWRnZSI+PHRpdGxlPnJlZ2lzdHJ5JiM0NTsmZ3Q7cGx1Z2luPC90aXRsZT4KKzxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik0yNywtMzUzLjgwMkMyNywtMzQzLjM5OCAyNywtMzMwLjEyMiAyNywtMzE4LjM3NyIvPgorPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMzAuNTAwMSwtMzE4LjE0OCAyNywtMzA4LjE0OCAyMy41MDAxLC0zMTguMTQ4IDMwLjUwMDEsLTMxOC4xNDgiLz4KKzx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjM3IiB5PSItMzI5LjciIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjcuMDAiPmhhcyBuPC90ZXh0PgorPC9nPgorPC9nPgorPC9zdmc+CmRpZmYgLS1naXQgYS9kb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sIGIvZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjY5MzI4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbApAQCAtMCwwICsxLDE0MSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMy8vRU4iCisgICAgICAgICAgICAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjMvZG9jYm9va3guZHRkIiBbCis8IUVOVElUWSAlIHZlcnNpb24tZW50aXRpZXMgU1lTVEVNICJ2ZXJzaW9uLmVudGl0aWVzIj4KKyV2ZXJzaW9uLWVudGl0aWVzOworPCFFTlRJVFkgJSBsb2NhbC5jb21tb24uYXR0cmliICJ4bWxuczp4aSAgQ0RBVEEgICNGSVhFRCAnaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSciPgorPCFFTlRJVFkgaGFzaCAiIyI+CitdPgorPGJvb2sgaWQ9ImluZGV4IiB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSI+CisgIDxib29raW5mbz4KKyAgICA8dGl0bGU+R1N0cmVhbWVyICZHU1RfTUFKT1JNSU5PUjsgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KKyAgICA8cmVsZWFzZWluZm8+CisgICAgICBmb3IgR1N0cmVhbWVyIENvcmUgJkdTVF9NQUpPUk1JTk9SOyAoJkdTVF9WRVJTSU9OOykKKyAgICAgIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50YXRpb24gY2FuIGJlIGZvdW5kIG9uLWxpbmUgYXQKKyAgICAgIDx1bGluayByb2xlPSJvbmxpbmUtbG9jYXRpb24iIHVybD0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyL2h0bWwvIj5odHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXIvaHRtbC88L3VsaW5rPi4KKyAgICA8L3JlbGVhc2VpbmZvPgorICA8L2Jvb2tpbmZvPgorCisgIDxjaGFwdGVyIGlkPSJnc3RyZWFtZXIiPgorCisgICAgPHRpdGxlPkdTdHJlYW1lciBPdmVydmlldzwvdGl0bGU+CisgICAgPHBhcmE+CitHU3RyZWFtZXIgaXMgYSBzdHJlYW1pbmcgbWVkaWEgZnJhbWV3b3JrLgorSXQgdXNlcyBncmFwaHMgb2YgZWxlbWVudHMgd2hpY2ggb3BlcmF0ZSBvbiBkYXRhLgorVGhlIGZ1bmN0aW9uYWxpdHkgdG8gcHJvY2VzcyBtZWRpYSBpcyBwcm92aWRlZCBieSBwbHVnLWlucyB3aGljaCBwcm92aWRlCitmZWF0dXJlcyBsaWtlIGVsZW1lbnRzLCB0eXBlZmluZGluZywgYW5kIHNvIG9uLgorVGhpcyBhbGxvd3MgbmV3IGZ1bmN0aW9uYWxpdHkgdG8gYmUgYWRkZWQgc2ltcGx5IGJ5IGluc3RhbGxpbmcgbmV3IHBsdWctaW5zLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorR1N0cmVhbWVyIGlzIGNyb3NzLXBsYXRmb3JtIGFuZCB3b3JrcyBvbiBtb3N0IFVOSVgtbGlrZSBwbGF0Zm9ybXMgYXMgd2VsbCBhcworV2luZG93cy4gIEl0IGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisoR05VIExHUEwpLgorICAgIDwvcGFyYT4KKyAgICAKKyAgICA8bWVkaWFvYmplY3Q+CisgICAgICA8aW1hZ2VvYmplY3Q+CisgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZ3N0LXVuaXZlcnNlLnN2ZyIgZm9ybWF0PSJTVkciLz4KKyAgICAgIDwvaW1hZ2VvYmplY3Q+CisgICAgICA8Y2FwdGlvbj4KKyAgICAgICAgPHBhcmE+UmVsYXRpb24gYmV0d2VlbiBnc3RyZWFtZXIgY29yZSBvYmplY3RzLjwvcGFyYT4KKyAgICAgIDwvY2FwdGlvbj4KKyAgICA8L21lZGlhb2JqZWN0PgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iYnVpbGRpbmcueG1sIiAvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InJ1bm5pbmcueG1sIiAvPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImxpYmdzdHJlYW1lciI+CisgICAgPHRpdGxlPkdTdHJlYW1lciBDb3JlIExpYnJhcnk8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBsaWJnc3RyZWFtZXItJkdTVF9NQUpPUk1JTk9SOy5zbyBwcm92aWRlcyBhbGwgdGhlIGNvcmUgR1N0cmVhbWVyIHNlcnZpY2VzLAorICAgICAgaW5jbHVkaW5nIGluaXRpYWxpemF0aW9uLCBwbHVnaW4gbWFuYWdlbWVudCBhbmQgdHlwZXMsCisgICAgICBhcyB3ZWxsIGFzIHRoZSBvYmplY3QgaGllcmFyY2h5IHRoYXQgZGVmaW5lcyBlbGVtZW50cyBhbmQgYmlucywKKyAgICAgIGFsb25nIHdpdGggc29tZSBtb3JlIHNwZWNpYWxpemVkIGVsZW1lbnRzLgorICAgIDwvcGFyYT4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3QueG1sIiAvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RhdG9taWNxdWV1ZS54bWwiIC8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGJpbi54bWwiIC8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGJ1ZmZlci54bWwiIC8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGJ1ZmZlcmxpc3QueG1sIiAvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RidWZmZXJwb29sLnhtbCIgLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0YnVzLnhtbCIgLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0Y2Fwcy54bWwiIC8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGNoaWxkcHJveHkueG1sIiAvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RjbG9jay54bWwiIC8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGNvbmZpZy54bWwiIC8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGRhdGV0aW1lLnhtbCIgLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0ZWxlbWVudC54bWwiIC8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGVsZW1lbnRmYWN0b3J5LnhtbCIgLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0ZXJyb3IueG1sIiAvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RldmVudC54bWwiIC8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGZpbHRlci54bWwiIC8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGZvcm1hdC54bWwiIC8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGdob3N0cGFkLnhtbCIgLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0aW5kZXgueG1sIiAvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RpbmRleGZhY3RvcnkueG1sIiAvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RpdGVyYXRvci54bWwiIC8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdG1lbW9yeS54bWwiIC8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdG1lc3NhZ2UueG1sIiAvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RtZXRhLnhtbCIgLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0bWluaW9iamVjdC54bWwiIC8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdG9iamVjdC54bWwiIC8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdHBhZC54bWwiIC8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdHBhZHRlbXBsYXRlLnhtbCIgLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0cGFyYW1zcGVjLnhtbCIgLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0cGFyc2UueG1sIiAvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RwaXBlbGluZS54bWwiIC8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdHBsdWdpbi54bWwiIC8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdHBsdWdpbmZlYXR1cmUueG1sIiAvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3Rwb2xsLnhtbCIgLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0cHJlc2V0LnhtbCIgLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0cXVlcnkueG1sIiAvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RyZWdpc3RyeS54bWwiIC8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdHNlZ21lbnQueG1sIiAvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RzdHJ1Y3R1cmUueG1sIiAvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RzeXN0ZW1jbG9jay54bWwiIC8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdHRhZ2xpc3QueG1sIiAvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3R0YWdzZXR0ZXIueG1sIiAvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3R0YXNrLnhtbCIgLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0dGFza3Bvb2wueG1sIiAvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3R0eXBlZmluZC54bWwiIC8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdHR5cGVmaW5kZmFjdG9yeS54bWwiIC8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdHVyaWhhbmRsZXIueG1sIiAvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3R1dGlscy54bWwiIC8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdHZhbHVlLnhtbCIgLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0dmVyc2lvbi54bWwiIC8+CisKKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJnc3RyZWFtZXItc3VwcG9ydCI+CisgICAgPHRpdGxlPkdTdHJlYW1lciBDb3JlIFN1cHBvcnQ8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgVGhlc2VzIG1vZHVsZXMgc3VwcG9ydCB0aGUgZ3N0cmVhbWVyIGNvcmUgYW5kIHBsdWdpbiBkZXZlbG9wbWVudC4KKyAgICAgIEFwcGxpY2F0aW9uIGRldmVsb3BlcnMgd2lsbCByYXJlbHkgbmVlZCB0byBrbm93IGFib3V0IGl0LgorICAgIDwvcGFyYT4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RpbmZvLnhtbCIgLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0dHJhY2UueG1sIiAvPgorCisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iZ3N0cmVhbWVyLWhpZXJhcmNoeSI+CisgICAgPHRpdGxlPk9iamVjdCBIaWVyYXJjaHk8L3RpdGxlPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC90cmVlX2luZGV4LnNnbWwiLz4KKyAgPC9jaGFwdGVyPgorCisgIDxpbmRleCBpZD0iYXBpLWluZGV4LWZ1bGwiPgorICAgIDx0aXRsZT5BUEkgSW5kZXg8L3RpdGxlPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9hcGktaW5kZXgtZnVsbC54bWwiPjx4aTpmYWxsYmFjayAvPjwveGk6aW5jbHVkZT4KKyAgPC9pbmRleD4KKyAgPGluZGV4IGlkPSJhcGktaW5kZXgtZGVwcmVjYXRlZCIgcm9sZT0iZGVwcmVjYXRlZCI+CisgICAgPHRpdGxlPkluZGV4IG9mIGRlcHJlY2F0ZWQgQVBJPC90aXRsZT4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvYXBpLWluZGV4LWRlcHJlY2F0ZWQueG1sIj48eGk6ZmFsbGJhY2sgLz48L3hpOmluY2x1ZGU+CisgIDwvaW5kZXg+CisKKyAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2Fubm90YXRpb24tZ2xvc3NhcnkueG1sIj48eGk6ZmFsbGJhY2sgLz48L3hpOmluY2x1ZGU+CisKKzwvYm9vaz4KZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2dzdHJlYW1lci1vdmVycmlkZXMudHh0IGIvZG9jcy9nc3QvZ3N0cmVhbWVyLW92ZXJyaWRlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2dzdHJlYW1lci1vdmVycmlkZXMudHh0CmRpZmYgLS1naXQgYS9kb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0IGIvZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjE2N2IzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dApAQCAtMCwwICsxLDI5NzUgQEAKKyMgR1N0cmVhbWVyIEFQSSByZWZlcmVuY2Ugc2VjdGlvbnMKKworIyBwbGVhc2UgYWRkIHNlY3Rpb25zIGluIGFscGhhYmV0aWNhbCBvcmRlciB1c2luZyB0aGUgZm9sbG93aW5nIHRlbXBsYXRlCisjIGxlYXZlIHR3byBlbXB0eSBsaW5lcyBiZXR3ZWVuIHNlY3Rpb25zCisjIDxTRUNUSU9OPgorIyA8RklMRT5nc3R4eHg8L0ZJTEU+CisjIDxUSVRMRT5Hc3RYeHg8L1RJVExFPgorIyB0eXBlZGVmcworIyBtYWNyb3MKKyMgY29uc3RydWN0b3IKKyMgbWV0aG9kcworIyA8U1VCU0VDVElPTiBTdGFuZGFyZD4KKyMgPFNVQlNFQ1RJT04gUHJpdmF0ZT4KKyMgPC9TRUNUSU9OPgorCis8SU5DTFVERT5nc3QvZ3N0Lmg8L0lOQ0xVREU+CisKKworPFNFQ1RJT04+Cis8RklMRT5nc3Q8L0ZJTEU+Cis8VElUTEU+R3N0PC9USVRMRT4KK2dzdF9pbml0Citnc3RfaW5pdF9jaGVjaworZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cAorZ3N0X2lzX2luaXRpYWxpemVkCitnc3RfZGVpbml0Citnc3RfdmVyc2lvbgorZ3N0X3ZlcnNpb25fc3RyaW5nCitnc3Rfc2VndHJhcF9pc19lbmFibGVkCitnc3Rfc2VndHJhcF9zZXRfZW5hYmxlZAorZ3N0X3JlZ2lzdHJ5X2ZvcmtfaXNfZW5hYmxlZAorZ3N0X3JlZ2lzdHJ5X2Zvcmtfc2V0X2VuYWJsZWQKK2dzdF91cGRhdGVfcmVnaXN0cnkKKzxTVUJTRUNUSU9OIFByaXZhdGU+CitHU1RfUVVBUksKK0dzdFF1YXJrSWQKK0dzdFBsdWdpbkxvYWRlcgorR3N0UGx1Z2luTG9hZGVyRnVuY3MKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5nc3RhdG9taWNxdWV1ZTwvRklMRT4KKzxUSVRMRT5Hc3RBdG9taWNRdWV1ZTwvVElUTEU+CitHc3RBdG9taWNRdWV1ZQorZ3N0X2F0b21pY19xdWV1ZV9uZXcKKworZ3N0X2F0b21pY19xdWV1ZV9yZWYKK2dzdF9hdG9taWNfcXVldWVfdW5yZWYKKworZ3N0X2F0b21pY19xdWV1ZV9wdXNoCitnc3RfYXRvbWljX3F1ZXVlX3BlZWsKK2dzdF9hdG9taWNfcXVldWVfcG9wCisKK2dzdF9hdG9taWNfcXVldWVfbGVuZ3RoCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0YmluPC9GSUxFPgorPFRJVExFPkdzdEJpbjwvVElUTEU+CitHc3RCaW4KK0dzdEJpbkNsYXNzCisKK2dzdF9iaW5fbmV3Citnc3RfYmluX2FkZAorZ3N0X2Jpbl9yZW1vdmUKKworZ3N0X2Jpbl9nZXRfYnlfbmFtZQorZ3N0X2Jpbl9nZXRfYnlfbmFtZV9yZWN1cnNlX3VwCitnc3RfYmluX2dldF9ieV9pbnRlcmZhY2UKKworZ3N0X2Jpbl9pdGVyYXRlX2VsZW1lbnRzCitnc3RfYmluX2l0ZXJhdGVfcmVjdXJzZQorZ3N0X2Jpbl9pdGVyYXRlX3NpbmtzCitnc3RfYmluX2l0ZXJhdGVfc29ydGVkCitnc3RfYmluX2l0ZXJhdGVfc291cmNlcworZ3N0X2Jpbl9pdGVyYXRlX2FsbF9ieV9pbnRlcmZhY2UKKworZ3N0X2Jpbl9yZWNhbGN1bGF0ZV9sYXRlbmN5CisKKzxTVUJTRUNUSU9OPgorZ3N0X2Jpbl9hZGRfbWFueQorZ3N0X2Jpbl9yZW1vdmVfbWFueQorZ3N0X2Jpbl9maW5kX3VubGlua2VkX3BhZAorCis8U1VCU0VDVElPTj4KK0dzdEJpbkZsYWdzCisKK0dTVF9CSU5fQ0hJTERSRU4KK0dTVF9CSU5fQ0hJTERSRU5fQ09PS0lFCitHU1RfQklOX05VTUNISUxEUkVOCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR1NUX0JJTgorR1NUX0lTX0JJTgorR1NUX1RZUEVfQklOCitHU1RfQklOX0NMQVNTCitHU1RfSVNfQklOX0NMQVNTCitHU1RfQklOX0dFVF9DTEFTUworR1NUX1RZUEVfQklOX0ZMQUdTCitHU1RfQklOX0NBU1QKKzxTVUJTRUNUSU9OIFByaXZhdGU+Citnc3RfYmluX2dldF90eXBlCitnc3RfYmluX2ZsYWdzX2dldF90eXBlCitHc3RCaW5Qcml2YXRlCis8L1NFQ1RJT04+CisKKworPFNFQ1RJT04+Cis8RklMRT5nc3RidXM8L0ZJTEU+Cis8VElUTEU+R3N0QnVzPC9USVRMRT4KK0dzdEJ1cworR3N0QnVzRmxhZ3MKK0dzdEJ1c1N5bmNSZXBseQorR3N0QnVzRnVuYworR3N0QnVzU3luY0hhbmRsZXIKK2dzdF9idXNfbmV3Citnc3RfYnVzX3Bvc3QKK2dzdF9idXNfaGF2ZV9wZW5kaW5nCitnc3RfYnVzX3BlZWsKK2dzdF9idXNfcG9wCitnc3RfYnVzX3BvcF9maWx0ZXJlZAorZ3N0X2J1c190aW1lZF9wb3AKK2dzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkCitnc3RfYnVzX3NldF9mbHVzaGluZworZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyCitnc3RfYnVzX3N5bmNfc2lnbmFsX2hhbmRsZXIKK2dzdF9idXNfY3JlYXRlX3dhdGNoCitnc3RfYnVzX2FkZF93YXRjaF9mdWxsCitnc3RfYnVzX2FkZF93YXRjaAorZ3N0X2J1c19kaXNhYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbgorZ3N0X2J1c19lbmFibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uCitnc3RfYnVzX2FzeW5jX3NpZ25hbF9mdW5jCitnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2gKK2dzdF9idXNfYWRkX3NpZ25hbF93YXRjaF9mdWxsCitnc3RfYnVzX3JlbW92ZV9zaWduYWxfd2F0Y2gKK2dzdF9idXNfcG9sbAorPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitHc3RCdXNDbGFzcworR1NUX0JVUworR1NUX0lTX0JVUworR1NUX1RZUEVfQlVTCitHU1RfQlVTX0NMQVNTCitHU1RfSVNfQlVTX0NMQVNTCitHU1RfQlVTX0dFVF9DTEFTUworR1NUX1RZUEVfQlVTX0ZMQUdTCitHU1RfVFlQRV9CVVNfU1lOQ19SRVBMWQorR1NUX0JVU19DQVNUCis8U1VCU0VDVElPTiBQcml2YXRlPgorZ3N0X2J1c19nZXRfdHlwZQorZ3N0X2J1c19mbGFnc19nZXRfdHlwZQorZ3N0X2J1c19zeW5jX3JlcGx5X2dldF90eXBlCitHc3RCdXNQcml2YXRlCis8L1NFQ1RJT04+CisKKworPFNFQ1RJT04+Cis8RklMRT5nc3RidWZmZXI8L0ZJTEU+Cis8VElUTEU+R3N0QnVmZmVyPC9USVRMRT4KK0dzdEJ1ZmZlcgorR3N0QnVmZmVyRmxhZ3MKK0dzdEJ1ZmZlckNvcHlGbGFncworR1NUX0JVRkZFUl9GTEFHUworR1NUX0JVRkZFUl9GTEFHX0lTX1NFVAorR1NUX0JVRkZFUl9GTEFHX1NFVAorR1NUX0JVRkZFUl9GTEFHX1VOU0VUCitHU1RfTUVUQV9USU1JTkdfSU5GTworR3N0TWV0YVRpbWluZworCitHU1RfQlVGRkVSX1RJTUVTVEFNUAorR1NUX0JVRkZFUl9EVVJBVElPTgorR1NUX0JVRkZFUl9PRkZTRVQKK0dTVF9CVUZGRVJfT0ZGU0VUX0VORAorR1NUX0JVRkZFUl9PRkZTRVRfTk9ORQorR1NUX0JVRkZFUl9EVVJBVElPTl9JU19WQUxJRAorR1NUX0JVRkZFUl9USU1FU1RBTVBfSVNfVkFMSUQKK0dTVF9CVUZGRVJfT0ZGU0VUX0lTX1ZBTElECitHU1RfQlVGRkVSX09GRlNFVF9FTkRfSVNfVkFMSUQKK0dTVF9CVUZGRVJfSVNfRElTQ09OVAorR1NUX0JVRkZFUl9UUkFDRV9OQU1FCisKK2dzdF9idWZmZXJfbmV3Citnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MKK2dzdF9idWZmZXJfbmV3X2FsbG9jYXRlCitnc3RfYnVmZmVyX25ld193cmFwcGVkCitnc3RfYnVmZmVyX25ld193cmFwcGVkX2Z1bGwKKworZ3N0X2J1ZmZlcl9yZWYKK2dzdF9idWZmZXJfdW5yZWYKKworZ3N0X2J1ZmZlcl9nZXRfc2l6ZXMKK2dzdF9idWZmZXJfZ2V0X3NpemUKK2dzdF9idWZmZXJfcmVzaXplCitnc3RfYnVmZmVyX3NldF9zaXplCisKK2dzdF9idWZmZXJfbl9tZW1vcnkKK2dzdF9idWZmZXJfdGFrZV9tZW1vcnkKK2dzdF9idWZmZXJfcGVla19tZW1vcnkKK2dzdF9idWZmZXJfcmVtb3ZlX21lbW9yeQorZ3N0X2J1ZmZlcl9yZW1vdmVfbWVtb3J5X3JhbmdlCisKK2dzdF9idWZmZXJfam9pbgorZ3N0X2J1ZmZlcl9tZXJnZQorCitnc3RfYnVmZmVyX21hcAorZ3N0X2J1ZmZlcl91bm1hcAorCitnc3RfYnVmZmVyX21lbWNtcAorZ3N0X2J1ZmZlcl9leHRyYWN0Citnc3RfYnVmZmVyX2ZpbGwKK2dzdF9idWZmZXJfbWVtc2V0CisKK0dTVF9CVUZGRVJfQ09QWV9NRVRBREFUQQorR1NUX0JVRkZFUl9DT1BZX0FMTAorZ3N0X2J1ZmZlcl9jb3B5Citnc3RfYnVmZmVyX2NvcHlfaW50bworZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbgorCitnc3RfYnVmZmVyX2lzX3dyaXRhYmxlCitnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUKK2dzdF9idWZmZXJfcmVwbGFjZQorCitnc3RfYnVmZmVyX2lzX3NwYW5fZmFzdAorZ3N0X2J1ZmZlcl9zcGFuCisKK2dzdF9idWZmZXJfZ2V0X21ldGEKK2dzdF9idWZmZXJfYWRkX21ldGEKK2dzdF9idWZmZXJfcmVtb3ZlX21ldGEKK2dzdF9idWZmZXJfaXRlcmF0ZV9tZXRhCisKK2dzdF9idWZmZXJfYWRkX21ldGFfdGltaW5nCitnc3RfYnVmZmVyX2dldF9tZXRhX3RpbWluZworZ3N0X21ldGFfdGltaW5nX2dldF9pbmZvCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK0dzdEJ1ZmZlckNsYXNzCitHU1RfQlVGRkVSCitHU1RfSVNfQlVGRkVSCitHU1RfVFlQRV9CVUZGRVIKK0dTVF9UWVBFX0JVRkZFUl9GTEFHUworR1NUX1RZUEVfQlVGRkVSX0NPUFlfRkxBR1MKK0dTVF9CVUZGRVJfQ0FTVAorPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK2dzdF9idWZmZXJfZ2V0X3R5cGUKK2dzdF9idWZmZXJfZmxhZ3NfZ2V0X3R5cGUKK2dzdF9idWZmZXJfY29weV9mbGFnc19nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPmdzdG1ldGE8L0ZJTEU+Cis8VElUTEU+R3N0TWV0YTwvVElUTEU+CitHc3RNZXRhCitHc3RNZXRhSW5mbworR1NUX01FVEFfVFJBQ0VfTkFNRQorR3N0TWV0YUluaXRGdW5jdGlvbgorR3N0TWV0YUZyZWVGdW5jdGlvbgorR3N0TWV0YUNvcHlGdW5jdGlvbgorR3N0TWV0YVRyYW5zZm9ybUZ1bmN0aW9uCitnc3RfbWV0YV9yZWdpc3RlcgorZ3N0X21ldGFfZ2V0X2luZm8KKzwvU0VDVElPTj4KKworCis8U0VDVElPTj4KKzxGSUxFPmdzdGJ1ZmZlcnBvb2w8L0ZJTEU+Cis8VElUTEU+R3N0QnVmZmVyUG9vbDwvVElUTEU+CitHc3RCdWZmZXJQb29sCitHc3RCdWZmZXJQb29sQ2xhc3MKK0dzdEJ1ZmZlclBvb2xGbGFncworR1NUX0JVRkZFUl9QT09MX0lTX0ZMVVNISU5HCitHc3RCdWZmZXJQb29sUGFyYW1zCitnc3RfYnVmZmVyX3Bvb2xfbmV3CisKK2dzdF9idWZmZXJfcG9vbF9jb25maWdfZ2V0Citnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldAorCitnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2FkZF9vcHRpb24KK2dzdF9idWZmZXJfcG9vbF9jb25maWdfZ2V0X29wdGlvbgorZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19oYXNfb3B0aW9uCitnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX25fb3B0aW9ucworZ3N0X2J1ZmZlcl9wb29sX2dldF9vcHRpb25zCitnc3RfYnVmZmVyX3Bvb2xfaGFzX29wdGlvbgorCitnc3RfYnVmZmVyX3Bvb2xfZ2V0X2NvbmZpZworZ3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWcKKworZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUKK2dzdF9idWZmZXJfcG9vbF9pc19hY3RpdmUKKworZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyCitnc3RfYnVmZmVyX3Bvb2xfcmVsZWFzZV9idWZmZXIKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR1NUX0JVRkZFUl9QT09MX0NMQVNTCitHU1RfQlVGRkVSX1BPT0xfQ0FTVAorR1NUX0JVRkZFUl9QT09MX1RSQUNFX05BTUUKK0dzdEJ1ZmZlclBvb2xQcml2YXRlCitHU1RfQlVGRkVSX1BPT0wKK0dTVF9JU19CVUZGRVJfUE9PTAorR1NUX1RZUEVfQlVGRkVSX1BPT0wKK2dzdF9idWZmZXJfcG9vbF9nZXRfdHlwZQorR1NUX1RZUEVfQlVGRkVSX1BPT0xfRkxBR1MKK2dzdF9idWZmZXJfcG9vbF9mbGFnc19nZXRfdHlwZQorR1NUX0lTX0JVRkZFUl9QT09MX0NMQVNTCitHU1RfQlVGRkVSX1BPT0xfR0VUX0NMQVNTCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0YnVmZmVybGlzdDwvRklMRT4KKzxUSVRMRT5Hc3RCdWZmZXJMaXN0PC9USVRMRT4KK0dzdEJ1ZmZlckxpc3QKKworZ3N0X2J1ZmZlcl9saXN0X25ldworZ3N0X2J1ZmZlcl9saXN0X3NpemVkX25ldworZ3N0X2J1ZmZlcl9saXN0X2xlbgorZ3N0X2J1ZmZlcl9saXN0X2FkZAorZ3N0X2J1ZmZlcl9saXN0X2luc2VydAorZ3N0X2J1ZmZlcl9saXN0X3JlbW92ZQorCitnc3RfYnVmZmVyX2xpc3RfcmVmCitnc3RfYnVmZmVyX2xpc3RfdW5yZWYKK2dzdF9idWZmZXJfbGlzdF9jb3B5Citnc3RfYnVmZmVyX2xpc3RfaXNfd3JpdGFibGUKK2dzdF9idWZmZXJfbGlzdF9tYWtlX3dyaXRhYmxlCisKK0dzdEJ1ZmZlckxpc3RGdW5jCitnc3RfYnVmZmVyX2xpc3RfZm9yZWFjaAorZ3N0X2J1ZmZlcl9saXN0X2dldAorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK0dTVF9CVUZGRVJfTElTVAorR1NUX0lTX0JVRkZFUl9MSVNUCitHU1RfVFlQRV9CVUZGRVJfTElTVAorR1NUX0JVRkZFUl9MSVNUX0NBU1QKKzxTVUJTRUNUSU9OIFByaXZhdGU+Citnc3RfYnVmZmVyX2xpc3RfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5nc3RjYXBzPC9GSUxFPgorPFRJVExFPkdzdENhcHM8L1RJVExFPgorR3N0Q2FwcworR3N0U3RhdGljQ2FwcworR3N0Q2Fwc0ludGVyc2VjdE1vZGUKKworR3N0Q2Fwc0ZsYWdzCitHU1RfQ0FQU19BTlkKK0dTVF9DQVBTX05PTkUKK0dTVF9DQVBTX1JFRkNPVU5UCitHU1RfQ0FQU19SRUZDT1VOVF9WQUxVRQorR1NUX1NUQVRJQ19DQVBTX0FOWQorR1NUX1NUQVRJQ19DQVBTX05PTkUKK0dTVF9DQVBTX0lTX1NJTVBMRQorR1NUX1NUQVRJQ19DQVBTCitHU1RfQ0FQU19GTEFHUworR1NUX0NBUFNfRkxBR19JU19TRVQKK0dTVF9DQVBTX0ZMQUdfU0VUCitHU1RfQ0FQU19GTEFHX1VOU0VUCisKK2dzdF9jYXBzX25ld19lbXB0eQorZ3N0X2NhcHNfbmV3X2FueQorZ3N0X2NhcHNfbmV3X3NpbXBsZQorZ3N0X2NhcHNfbmV3X2Z1bGwKK2dzdF9jYXBzX25ld19mdWxsX3ZhbGlzdAorZ3N0X2NhcHNfaXNfd3JpdGFibGUKK2dzdF9jYXBzX2NvcHkKK2dzdF9jYXBzX2NvcHlfbnRoCitnc3Rfc3RhdGljX2NhcHNfZ2V0Citnc3Rfc3RhdGljX2NhcHNfY2xlYW51cAorZ3N0X2NhcHNfYXBwZW5kCitnc3RfY2Fwc19tZXJnZQorZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZQorZ3N0X2NhcHNfcmVtb3ZlX3N0cnVjdHVyZQorZ3N0X2NhcHNfc3RlYWxfc3RydWN0dXJlCitnc3RfY2Fwc19tZXJnZV9zdHJ1Y3R1cmUKK2dzdF9jYXBzX2dldF9zaXplCitnc3RfY2Fwc19nZXRfc3RydWN0dXJlCitnc3RfY2Fwc19zZXRfdmFsdWUKK2dzdF9jYXBzX3NldF9zaW1wbGUKK2dzdF9jYXBzX3NldF9zaW1wbGVfdmFsaXN0Citnc3RfY2Fwc19pc19hbnkKK2dzdF9jYXBzX2lzX2VtcHR5Citnc3RfY2Fwc19pc19maXhlZAorZ3N0X2NhcHNfaXNfZXF1YWwKK2dzdF9jYXBzX2lzX2VxdWFsX2ZpeGVkCitnc3RfY2Fwc19pc19hbHdheXNfY29tcGF0aWJsZQorZ3N0X2NhcHNfaXNfc3Vic2V0Citnc3RfY2Fwc19pc19zdWJzZXRfc3RydWN0dXJlCitnc3RfY2Fwc19jYW5faW50ZXJzZWN0Citnc3RfY2Fwc19pbnRlcnNlY3QKK2dzdF9jYXBzX2ludGVyc2VjdF9mdWxsCitnc3RfY2Fwc191bmlvbgorZ3N0X2NhcHNfbm9ybWFsaXplCitnc3RfY2Fwc19kb19zaW1wbGlmeQorZ3N0X2NhcHNfcmVwbGFjZQorZ3N0X2NhcHNfdG9fc3RyaW5nCitnc3RfY2Fwc19mcm9tX3N0cmluZworZ3N0X2NhcHNfc3VidHJhY3QKK2dzdF9jYXBzX21ha2Vfd3JpdGFibGUKK2dzdF9jYXBzX3JlZgorZ3N0X2NhcHNfdHJ1bmNhdGUKK2dzdF9jYXBzX2ZpeGF0ZQorZ3N0X2NhcHNfdW5yZWYKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR1NUX0NBUFMKK0dTVF9JU19DQVBTCitHU1RfVFlQRV9DQVBTCitHU1RfVFlQRV9DQVBTX0ZMQUdTCitHU1RfVFlQRV9DQVBTX0lOVEVSU0VDVF9NT0RFCitHU1RfQ0FQU19DQVNUCis8U1VCU0VDVElPTiBQcml2YXRlPgorZ3N0X2NhcHNfZmxhZ3NfZ2V0X3R5cGUKK2dzdF9jYXBzX2dldF90eXBlCitnc3RfY2Fwc19pbnRlcnNlY3RfbW9kZV9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPmdzdGNoaWxkcHJveHk8L0ZJTEU+Cis8VElUTEU+R3N0Q2hpbGRQcm94eTwvVElUTEU+CitHc3RDaGlsZFByb3h5CitHc3RDaGlsZFByb3h5SW50ZXJmYWNlCitnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkcmVuX2NvdW50Citnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X25hbWUKK2dzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfaW5kZXgKK2dzdF9jaGlsZF9wcm94eV9sb29rdXAKK2dzdF9jaGlsZF9wcm94eV9nZXRfcHJvcGVydHkKK2dzdF9jaGlsZF9wcm94eV9nZXRfdmFsaXN0Citnc3RfY2hpbGRfcHJveHlfZ2V0Citnc3RfY2hpbGRfcHJveHlfc2V0X3Byb3BlcnR5Citnc3RfY2hpbGRfcHJveHlfc2V0X3ZhbGlzdAorZ3N0X2NoaWxkX3Byb3h5X3NldAorZ3N0X2NoaWxkX3Byb3h5X2NoaWxkX2FkZGVkCitnc3RfY2hpbGRfcHJveHlfY2hpbGRfcmVtb3ZlZAorPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitHU1RfQ0hJTERfUFJPWFkKK0dTVF9JU19DSElMRF9QUk9YWQorR1NUX0NISUxEX1BST1hZX0dFVF9JTlRFUkZBQ0UKK0dTVF9UWVBFX0NISUxEX1BST1hZCis8U1VCU0VDVElPTiBQcml2YXRlPgorZ3N0X2NoaWxkX3Byb3h5X2dldF90eXBlCis8L1NFQ1RJT04+CisKKworPFNFQ1RJT04+Cis8RklMRT5nc3RjbG9jazwvRklMRT4KKzxUSVRMRT5Hc3RDbG9jazwvVElUTEU+CitHc3RDbG9jaworR3N0Q2xvY2tDbGFzcworR3N0Q2xvY2tUaW1lCitHc3RDbG9ja1RpbWVEaWZmCitHc3RDbG9ja0lECitHU1RfQ0xPQ0tfVElNRV9OT05FCitHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRAorR1NUX1NFQ09ORAorR1NUX01TRUNPTkQKK0dTVF9VU0VDT05ECitHU1RfTlNFQ09ORAorR1NUX1RJTUVfQVNfU0VDT05EUworR1NUX1RJTUVfQVNfTVNFQ09ORFMKK0dTVF9USU1FX0FTX1VTRUNPTkRTCitHU1RfVElNRV9BU19OU0VDT05EUworR1NUX0NMT0NLX0RJRkYKK0dTVF9USU1FVkFMX1RPX1RJTUUKK0dTVF9USU1FX1RPX1RJTUVWQUwKK0dTVF9USU1FU1BFQ19UT19USU1FCitHU1RfVElNRV9UT19USU1FU1BFQworR1NUX0NMT0NLX0VOVFJZX1RSQUNFX05BTUUKK0dzdENsb2NrRW50cnkKK0dzdENsb2NrQ2FsbGJhY2sKK0dzdENsb2NrRW50cnlUeXBlCitHU1RfQ0xPQ0tfRU5UUlkKK0dTVF9DTE9DS19FTlRSWV9DTE9DSworR1NUX0NMT0NLX0VOVFJZX1RZUEUKK0dTVF9DTE9DS19FTlRSWV9USU1FCitHU1RfQ0xPQ0tfRU5UUllfSU5URVJWQUwKK0dTVF9DTE9DS19FTlRSWV9TVEFUVVMKK0dzdENsb2NrUmV0dXJuCitHc3RDbG9ja0ZsYWdzCitHU1RfQ0xPQ0tfRkxBR1MKK0dTVF9DTE9DS19CUk9BRENBU1QKK0dTVF9DTE9DS19DT05ECitHU1RfQ0xPQ0tfVElNRURfV0FJVAorR1NUX0NMT0NLX1dBSVQKK2dzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb24KK2dzdF9jbG9ja19zZXRfbWFzdGVyCitnc3RfY2xvY2tfZ2V0X21hc3RlcgorZ3N0X2Nsb2NrX3NldF9yZXNvbHV0aW9uCitnc3RfY2xvY2tfZ2V0X3Jlc29sdXRpb24KK2dzdF9jbG9ja19nZXRfdGltZQorZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZAorZ3N0X2Nsb2NrX25ld19wZXJpb2RpY19pZAorZ3N0X2Nsb2NrX3NpbmdsZV9zaG90X2lkX3JlaW5pdAorZ3N0X2Nsb2NrX3BlcmlvZGljX2lkX3JlaW5pdAorZ3N0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lCitnc3RfY2xvY2tfYWRqdXN0X3VubG9ja2VkCitnc3RfY2xvY2tfdW5hZGp1c3RfdW5sb2NrZWQKK2dzdF9jbG9ja19nZXRfY2FsaWJyYXRpb24KK2dzdF9jbG9ja19zZXRfY2FsaWJyYXRpb24KK2dzdF9jbG9ja19pZF9nZXRfdGltZQorZ3N0X2Nsb2NrX2lkX3dhaXQKK2dzdF9jbG9ja19pZF93YWl0X2FzeW5jCitnc3RfY2xvY2tfaWRfd2FpdF9hc3luY19mdWxsCitnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZQorZ3N0X2Nsb2NrX2lkX2NvbXBhcmVfZnVuYworZ3N0X2Nsb2NrX2lkX3JlZgorZ3N0X2Nsb2NrX2lkX3VucmVmCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK0dTVF9DTE9DSworR1NUX0lTX0NMT0NLCitHU1RfVFlQRV9DTE9DSworR1NUX0NMT0NLX0NMQVNTCitHU1RfSVNfQ0xPQ0tfQ0xBU1MKK0dTVF9DTE9DS19HRVRfQ0xBU1MKK0dTVF9DTE9DS19DQVNUCitHU1RfVFlQRV9DTE9DS19FTlRSWV9UWVBFCitHU1RfVFlQRV9DTE9DS19GTEFHUworR1NUX1RZUEVfQ0xPQ0tfUkVUVVJOCitHU1RfVFlQRV9DTE9DS19USU1FCis8U1VCU0VDVElPTiBQcml2YXRlPgorR3N0Q2xvY2tQcml2YXRlCitHU1RfQ0xPQ0tfU0xBVkVfTE9DSworR1NUX0NMT0NLX1NMQVZFX1VOTE9DSworZ3N0X2Nsb2NrX2dldF90eXBlCitnc3RfY2xvY2tfZW50cnlfdHlwZV9nZXRfdHlwZQorZ3N0X2Nsb2NrX2ZsYWdzX2dldF90eXBlCitnc3RfY2xvY2tfcmV0dXJuX2dldF90eXBlCis8L1NFQ1RJT04+CisKKworPFNFQ1RJT04+Cis8RklMRT5nc3Rjb21wYXQ8L0ZJTEU+Cis8VElUTEU+R3N0Q29tcGF0PC9USVRMRT4KKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2ltcGxlCitnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9hdXRob3IKK2dzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X2Rlc2NyaXB0aW9uCitnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9kb2N1bWVudGF0aW9uX3VyaQorZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfaWNvbl9uYW1lCitnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9rbGFzcworZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbG9uZ25hbWUKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0Y29uZmlnPC9GSUxFPgorR1NUX0RJU0FCTEVfR1NUX0RFQlVHCitHU1RfRElTQUJMRV9QQVJTRQorR1NUX0RJU0FCTEVfVFJBQ0UKK0dTVF9ESVNBQkxFX0FMTE9DX1RSQUNFCitHU1RfRElTQUJMRV9SRUdJU1RSWQorR1NUX0RJU0FCTEVfUExVR0lOCis8U1VCU0VDVElPTiBQcml2YXRlPgorR1NUX0hBVkVfR0xJQl8yXzgKK0dTVF9QVFJfRk9STUFUCitHU1RfU0VHTUVOVF9GT1JNQVQKK0dTVF9FWFBPUlQKK0dTVF9QTFVHSU5fRVhQT1JUCitHU1RfUEFERElORworR1NUX1BBRERJTkdfTEFSR0UKK0dTVF9QQURESU5HX0lOSVQKK0dTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0ZWxlbWVudDwvRklMRT4KKzxUSVRMRT5Hc3RFbGVtZW50PC9USVRMRT4KK0dzdEVsZW1lbnQKK0dzdEVsZW1lbnRDbGFzcworR3N0RWxlbWVudEZsYWdzCitHc3RTdGF0ZQorR3N0U3RhdGVDaGFuZ2UKK0dzdFN0YXRlQ2hhbmdlUmV0dXJuCisKK0dTVF9TVEFURQorR1NUX1NUQVRFX0dFVF9ORVhUCitHU1RfU1RBVEVfTkVYVAorR1NUX1NUQVRFX1BFTkRJTkcKK0dTVF9TVEFURV9SRVRVUk4KK0dTVF9TVEFURV9UQVJHRVQKK0dTVF9TVEFURV9UUkFOU0lUSU9OCitHU1RfU1RBVEVfVFJBTlNJVElPTl9DVVJSRU5UCitHU1RfU1RBVEVfVFJBTlNJVElPTl9ORVhUCisKK0dTVF9TVEFURV9HRVRfTE9DSworR1NUX1NUQVRFX0dFVF9DT05ECisKK0dTVF9FTEVNRU5UX05BTUUKK0dTVF9FTEVNRU5UX1BBUkVOVAorR1NUX0VMRU1FTlRfQlVTCitHU1RfRUxFTUVOVF9DTE9DSworR1NUX0VMRU1FTlRfUEFEUworR1NUX0VMRU1FTlRfU1RBUlRfVElNRQorR1NUX0VMRU1FTlRfRVJST1IKK0dTVF9FTEVNRU5UX1dBUk5JTkcKK0dTVF9FTEVNRU5UX0lORk8KK0dTVF9FTEVNRU5UX0lTX0xPQ0tFRF9TVEFURQorCitHU1RfRUxFTUVOVF9NRVRBREFUQV9BVVRIT1IKK0dTVF9FTEVNRU5UX01FVEFEQVRBX0RFU0NSSVBUSU9OCitHU1RfRUxFTUVOVF9NRVRBREFUQV9ET0NfVVJJCitHU1RfRUxFTUVOVF9NRVRBREFUQV9JQ09OX05BTUUKK0dTVF9FTEVNRU5UX01FVEFEQVRBX0tMQVNTCitHU1RfRUxFTUVOVF9NRVRBREFUQV9MT05HTkFNRQorCis8U1VCU0VDVElPTiBlbGVtZW50LWNvbnN0cnVjdGlvbj4KK2dzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUKK2dzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUKK2dzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGVfbGlzdAorZ3N0X2VsZW1lbnRfY2xhc3NfaW5zdGFsbF9zdGRfcHJvcHMKK2dzdF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YQorZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX21ldGFkYXRhCisKKzxTVUJTRUNUSU9OIGVsZW1lbnQtcGFkcz4KK2dzdF9lbGVtZW50X2FkZF9wYWQKK2dzdF9lbGVtZW50X2NyZWF0ZV9hbGxfcGFkcworZ3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkCitnc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWRfdGVtcGxhdGUKK2dzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZAorZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQKK2dzdF9lbGVtZW50X3JlcXVlc3RfcGFkCitnc3RfZWxlbWVudF9ub19tb3JlX3BhZHMKK2dzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQKK2dzdF9lbGVtZW50X3JlbW92ZV9wYWQKK2dzdF9lbGVtZW50X2l0ZXJhdGVfcGFkcworZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zaW5rX3BhZHMKK2dzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMKKworPFNVQlNFQ1RJT04gZWxlbWVudC1saW5raW5nPgorZ3N0X2VsZW1lbnRfbGluaworZ3N0X2VsZW1lbnRfdW5saW5rCitnc3RfZWxlbWVudF9saW5rX21hbnkKK2dzdF9lbGVtZW50X3VubGlua19tYW55Citnc3RfZWxlbWVudF9saW5rX3BhZHMKK2dzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsCitnc3RfZWxlbWVudF91bmxpbmtfcGFkcworZ3N0X2VsZW1lbnRfbGlua19wYWRzX2ZpbHRlcmVkCitnc3RfZWxlbWVudF9saW5rX2ZpbHRlcmVkCisKKzxTVUJTRUNUSU9OIGVsZW1lbnQtcHJvcGVydGllcz4KK2dzdF9lbGVtZW50X2NsYXNzX2dldF9tZXRhZGF0YQorZ3N0X2VsZW1lbnRfc2V0X2Jhc2VfdGltZQorZ3N0X2VsZW1lbnRfZ2V0X2Jhc2VfdGltZQorZ3N0X2VsZW1lbnRfc2V0X3N0YXJ0X3RpbWUKK2dzdF9lbGVtZW50X2dldF9zdGFydF90aW1lCitnc3RfZWxlbWVudF9zZXRfYnVzCitnc3RfZWxlbWVudF9nZXRfYnVzCitnc3RfZWxlbWVudF9nZXRfZmFjdG9yeQorZ3N0X2VsZW1lbnRfc2V0X2luZGV4Citnc3RfZWxlbWVudF9nZXRfaW5kZXgKK2dzdF9lbGVtZW50X2lzX2luZGV4YWJsZQorZ3N0X2VsZW1lbnRfc2V0X25hbWUKK2dzdF9lbGVtZW50X2dldF9uYW1lCitnc3RfZWxlbWVudF9zZXRfcGFyZW50Citnc3RfZWxlbWVudF9nZXRfcGFyZW50CisKKzxTVUJTRUNUSU9OIGVsZW1lbnQtY2xvY2tzPgorZ3N0X2VsZW1lbnRfcmVxdWlyZXNfY2xvY2sKK2dzdF9lbGVtZW50X3NldF9jbG9jaworZ3N0X2VsZW1lbnRfZ2V0X2Nsb2NrCitnc3RfZWxlbWVudF9wcm92aWRlc19jbG9jaworZ3N0X2VsZW1lbnRfcHJvdmlkZV9jbG9jaworCis8U1VCU0VDVElPTiBlbGVtZW50LXN0YXRlcz4KK2dzdF9lbGVtZW50X3NldF9zdGF0ZQorZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlCitnc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlCitnc3RfZWxlbWVudF9pc19sb2NrZWRfc3RhdGUKK2dzdF9lbGVtZW50X2Fib3J0X3N0YXRlCitnc3RfZWxlbWVudF9jb250aW51ZV9zdGF0ZQorZ3N0X2VsZW1lbnRfbG9zdF9zdGF0ZQorZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUKK2dzdF9lbGVtZW50X3N0YXRlX2NoYW5nZV9yZXR1cm5fZ2V0X25hbWUKK2dzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQKK2dzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZQorCis8U1VCU0VDVElPTiBlbGVtZW50LXRhZ3M+Citnc3RfZWxlbWVudF9mb3VuZF90YWdzCitnc3RfZWxlbWVudF9mb3VuZF90YWdzX2Zvcl9wYWQKKworPFNVQlNFQ1RJT04gZWxlbWVudC1tZXNzYWdlcz4KK2dzdF9lbGVtZW50X21lc3NhZ2VfZnVsbAorZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlCisKKzxTVUJTRUNUSU9OIGVsZW1lbnQtcXVlcnk+Citnc3RfZWxlbWVudF9nZXRfcXVlcnlfdHlwZXMKK2dzdF9lbGVtZW50X3F1ZXJ5Citnc3RfZWxlbWVudF9xdWVyeV9jb252ZXJ0Citnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbgorZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24KKworPFNVQlNFQ1RJT04gZWxlbWVudC1ldmVudD4KK2dzdF9lbGVtZW50X3NlbmRfZXZlbnQKK2dzdF9lbGVtZW50X3NlZWtfc2ltcGxlCitnc3RfZWxlbWVudF9zZWVrCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR1NUX0VMRU1FTlQKK0dTVF9JU19FTEVNRU5UCitHU1RfRUxFTUVOVF9DTEFTUworR1NUX0lTX0VMRU1FTlRfQ0xBU1MKK0dTVF9FTEVNRU5UX0dFVF9DTEFTUworR1NUX1RZUEVfRUxFTUVOVAorR1NUX1RZUEVfRUxFTUVOVF9GTEFHUworR1NUX0VMRU1FTlRfQ0FTVAorR1NUX1RZUEVfU1RBVEUKK0dTVF9UWVBFX1NUQVRFX0NIQU5HRQorR1NUX1RZUEVfU1RBVEVfQ0hBTkdFX1JFVFVSTgorPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK0dTVF9TVEFURV9MT0NLCitHU1RfU1RBVEVfVFJZTE9DSworR1NUX1NUQVRFX1VOTE9DSworR1NUX1NUQVRFX1VOTE9DS19GVUxMCitHU1RfU1RBVEVfTE9DS19GVUxMCitHU1RfU1RBVEVfV0FJVAorR1NUX1NUQVRFX1RJTUVEX1dBSVQKK0dTVF9TVEFURV9TSUdOQUwKK0dTVF9TVEFURV9CUk9BRENBU1QKKworZ3N0X2VsZW1lbnRfZ2V0X3R5cGUKK2dzdF9lbGVtZW50X2ZsYWdzX2dldF90eXBlCitnc3Rfc3RhdGVfZ2V0X3R5cGUKK2dzdF9zdGF0ZV9jaGFuZ2VfZ2V0X3R5cGUKK2dzdF9zdGF0ZV9jaGFuZ2VfcmV0dXJuX2dldF90eXBlCis8L1NFQ1RJT04+CisKKworPFNFQ1RJT04+Cis8RklMRT5nc3RlbGVtZW50ZmFjdG9yeTwvRklMRT4KKzxUSVRMRT5Hc3RFbGVtZW50RmFjdG9yeTwvVElUTEU+CitHc3RFbGVtZW50RmFjdG9yeQorZ3N0X2VsZW1lbnRfcmVnaXN0ZXIKK2dzdF9lbGVtZW50X2ZhY3RvcnlfZmluZAorZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfZWxlbWVudF90eXBlCitnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YQorZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbnVtX3BhZF90ZW1wbGF0ZXMKK2dzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3VyaV90eXBlCitnc3RfZWxlbWVudF9mYWN0b3J5X2dldF91cmlfcHJvdG9jb2xzCitnc3RfZWxlbWVudF9mYWN0b3J5X2hhc19pbnRlcmZhY2UKK2dzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlCitnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UKK2dzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NpbmtfYWxsX2NhcHMKK2dzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NyY19hbGxfY2FwcworZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc2lua19hbnlfY2FwcworZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc3JjX2FueV9jYXBzCitnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9zdGF0aWNfcGFkX3RlbXBsYXRlcworR3N0RWxlbWVudEZhY3RvcnlMaXN0VHlwZQorR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0FOWQorR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0FVRElPVklERU9fU0lOS1MKK0dTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9BVURJT19FTkNPREVSCitHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVDT0RBQkxFCitHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVDT0RFUgorR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFTVVYRVIKK0dTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERVBBWUxPQURFUgorR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0VOQ09ERVIKK0dTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9GT1JNQVRURVIKK0dTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NQVhfRUxFTUVOVFMKK0dTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9BVURJTworR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX0lNQUdFCitHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfTUVUQURBVEEKK0dTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9TVUJUSVRMRQorR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX1ZJREVPCitHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQU5ZCitHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTVVYRVIKK0dTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVJTRVIKK0dTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVlMT0FERVIKK0dTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9TSU5LCitHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfU1JDCitHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfVklERU9fRU5DT0RFUgorZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2ZpbHRlcgorZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2dldF9lbGVtZW50cworZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2lzX3R5cGUKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR3N0RWxlbWVudEZhY3RvcnlDbGFzcworR1NUX0VMRU1FTlRfRkFDVE9SWQorR1NUX0VMRU1FTlRfRkFDVE9SWV9DQVNUCitHU1RfSVNfRUxFTUVOVF9GQUNUT1JZCitHU1RfRUxFTUVOVF9GQUNUT1JZX0NMQVNTCitHU1RfSVNfRUxFTUVOVF9GQUNUT1JZX0NMQVNTCitHU1RfVFlQRV9FTEVNRU5UX0ZBQ1RPUlkKKzxTVUJTRUNUSU9OIFByaXZhdGU+Citnc3RfZWxlbWVudF9mYWN0b3J5X2dldF90eXBlCitHU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX0RFQ09ERVIKK0dTVF9FTEVNRU5UX0ZBQ1RPUllfS0xBU1NfREVNVVhFUgorR1NUX0VMRU1FTlRfRkFDVE9SWV9LTEFTU19ERVBBWUxPQURFUgorR1NUX0VMRU1FTlRfRkFDVE9SWV9LTEFTU19FTkNPREVSCitHU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX0ZPUk1BVFRFUgorR1NUX0VMRU1FTlRfRkFDVE9SWV9LTEFTU19NRURJQV9BVURJTworR1NUX0VMRU1FTlRfRkFDVE9SWV9LTEFTU19NRURJQV9JTUFHRQorR1NUX0VMRU1FTlRfRkFDVE9SWV9LTEFTU19NRURJQV9NRVRBREFUQQorR1NUX0VMRU1FTlRfRkFDVE9SWV9LTEFTU19NRURJQV9TVUJUSVRMRQorR1NUX0VMRU1FTlRfRkFDVE9SWV9LTEFTU19NRURJQV9WSURFTworR1NUX0VMRU1FTlRfRkFDVE9SWV9LTEFTU19NVVhFUgorR1NUX0VMRU1FTlRfRkFDVE9SWV9LTEFTU19QQVJTRVIKK0dTVF9FTEVNRU5UX0ZBQ1RPUllfS0xBU1NfUEFZTE9BREVSCitHU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX1NJTksKK0dTVF9FTEVNRU5UX0ZBQ1RPUllfS0xBU1NfU1JDCis8L1NFQ1RJT04+CisKKworPFNFQ1RJT04+Cis8RklMRT5nc3RlcnJvcjwvRklMRT4KKzxUSVRMRT5Hc3RHRXJyb3I8L1RJVExFPgorR3N0Q29yZUVycm9yCitHc3RMaWJyYXJ5RXJyb3IKK0dzdFJlc291cmNlRXJyb3IKK0dzdFN0cmVhbUVycm9yCitHU1RfQ09SRV9FUlJPUgorR1NUX0xJQlJBUllfRVJST1IKK0dTVF9SRVNPVVJDRV9FUlJPUgorR1NUX1NUUkVBTV9FUlJPUgorR1NUX0VSUk9SX1NZU1RFTQorZ3N0X2Vycm9yX2dldF9tZXNzYWdlCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK0dTVF9UWVBFX0dfRVJST1IKK0dTVF9UWVBFX0NPUkVfRVJST1IKK0dTVF9UWVBFX0xJQlJBUllfRVJST1IKK0dTVF9UWVBFX1JFU09VUkNFX0VSUk9SCitHU1RfVFlQRV9TVFJFQU1fRVJST1IKKzxTVUJTRUNUSU9OIFByaXZhdGU+Citnc3RfZ19lcnJvcl9nZXRfdHlwZQorZ3N0X2NvcmVfZXJyb3JfZ2V0X3R5cGUKK2dzdF9saWJyYXJ5X2Vycm9yX2dldF90eXBlCitnc3RfcmVzb3VyY2VfZXJyb3JfZ2V0X3R5cGUKK2dzdF9zdHJlYW1fZXJyb3JfZ2V0X3R5cGUKK2dzdF9jb3JlX2Vycm9yX3F1YXJrCitnc3RfbGlicmFyeV9lcnJvcl9xdWFyaworZ3N0X3Jlc291cmNlX2Vycm9yX3F1YXJrCitnc3Rfc3RyZWFtX2Vycm9yX3F1YXJrCis8L1NFQ1RJT04+CisKKworPFNFQ1RJT04+Cis8RklMRT5nc3RldmVudDwvRklMRT4KKzxUSVRMRT5Hc3RFdmVudDwvVElUTEU+CitHc3RFdmVudAorCitHc3RFdmVudFR5cGVGbGFncworR1NUX0VWRU5UX1RZUEVfQk9USAorR1NUX0VWRU5UX01BS0VfVFlQRQorCitHc3RFdmVudFR5cGUKKworR1NUX0VWRU5UX1RSQUNFX05BTUUKKworR1NUX0VWRU5UX1RZUEUKK0dTVF9FVkVOVF9UWVBFX05BTUUKK0dTVF9FVkVOVF9USU1FU1RBTVAKK0dTVF9FVkVOVF9TRVFOVU0KKworR1NUX0VWRU5UX0lTX1VQU1RSRUFNCitHU1RfRVZFTlRfSVNfRE9XTlNUUkVBTQorR1NUX0VWRU5UX0lTX1NFUklBTElaRUQKK0dTVF9FVkVOVF9JU19TVElDS1kKKworZ3N0X2V2ZW50X3R5cGVfZ2V0X2ZsYWdzCitnc3RfZXZlbnRfdHlwZV9nZXRfbmFtZQorZ3N0X2V2ZW50X3R5cGVfdG9fcXVhcmsKKworZ3N0X2V2ZW50X3JlZgorZ3N0X2V2ZW50X3VucmVmCitnc3RfZXZlbnRfcmVwbGFjZQorZ3N0X2V2ZW50X2NvcHkKK2dzdF9ldmVudF9zdGVhbAorZ3N0X2V2ZW50X3Rha2UKKworZ3N0X2V2ZW50X2lzX3dyaXRhYmxlCitnc3RfZXZlbnRfbWFrZV93cml0YWJsZQorZ3N0X2V2ZW50X3dyaXRhYmxlX3N0cnVjdHVyZQorCitnc3RfZXZlbnRfbmV3X2N1c3RvbQorZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUKK2dzdF9ldmVudF9oYXNfbmFtZQorCitnc3RfZXZlbnRfZ2V0X3NlcW51bQorZ3N0X2V2ZW50X3NldF9zZXFudW0KKworZ3N0X2V2ZW50X25ld19mbHVzaF9zdGFydAorZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wCitnc3RfZXZlbnRfcGFyc2VfZmx1c2hfc3RvcAorCitnc3RfZXZlbnRfbmV3X2VvcworCitnc3RfZXZlbnRfbmV3X3NlZ21lbnQKK2dzdF9ldmVudF9wYXJzZV9zZWdtZW50Citnc3RfZXZlbnRfY29weV9zZWdtZW50CisKK2dzdF9ldmVudF9uZXdfdGFnCitnc3RfZXZlbnRfcGFyc2VfdGFnCisKK2dzdF9ldmVudF9uZXdfYnVmZmVyX3NpemUKK2dzdF9ldmVudF9wYXJzZV9idWZmZXJfc2l6ZQorCitHc3RRT1NUeXBlCitnc3RfZXZlbnRfbmV3X3FvcworZ3N0X2V2ZW50X3BhcnNlX3FvcworCitHc3RTZWVrVHlwZQorR3N0U2Vla0ZsYWdzCitnc3RfZXZlbnRfbmV3X3NlZWsKK2dzdF9ldmVudF9wYXJzZV9zZWVrCisKK2dzdF9ldmVudF9uZXdfbmF2aWdhdGlvbgorCitnc3RfZXZlbnRfbmV3X2xhdGVuY3kKK2dzdF9ldmVudF9wYXJzZV9sYXRlbmN5CisKK2dzdF9ldmVudF9uZXdfc3RlcAorZ3N0X2V2ZW50X3BhcnNlX3N0ZXAKKworZ3N0X2V2ZW50X25ld19zaW5rX21lc3NhZ2UKK2dzdF9ldmVudF9wYXJzZV9zaW5rX21lc3NhZ2UKKworZ3N0X2V2ZW50X25ld19yZWNvbmZpZ3VyZQorCitnc3RfZXZlbnRfbmV3X2NhcHMKK2dzdF9ldmVudF9wYXJzZV9jYXBzCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK0dzdEV2ZW50Q2xhc3MKK0dTVF9FVkVOVAorR1NUX0VWRU5UX0NBU1QKK0dTVF9JU19FVkVOVAorR1NUX0lTX0VWRU5UX0NMQVNTCitHU1RfRVZFTlRfQ0xBU1MKK0dTVF9FVkVOVF9HRVRfQ0xBU1MKK0dTVF9UWVBFX0VWRU5UCitHU1RfVFlQRV9FVkVOVF9UWVBFCitHU1RfVFlQRV9TRUVLX1RZUEUKK0dTVF9UWVBFX1NFRUtfRkxBR1MKK0dTVF9UWVBFX1FPU19UWVBFCitHU1RfVFlQRV9FVkVOVF9UWVBFX0ZMQUdTCis8U1VCU0VDVElPTiBQcml2YXRlPgorR1NUX0VWRU5UX1RZUEVfU0hJRlQKK0dTVF9FVkVOVF9NQVhfU1RJQ0tZCitHU1RfRVZFTlRfTlVNX1NISUZUCitHU1RfRVZFTlRfU1RJQ0tZX0lEWAorR1NUX0VWRU5UX1NUSUNLWV9JRFhfVFlQRQorR1NUX0VWRU5UX1NUSUNLWV9TSElGVAorRkxBRworZ3N0X2V2ZW50X2dldF90eXBlCitnc3RfZXZlbnRfdHlwZV9nZXRfdHlwZQorZ3N0X3NlZWtfdHlwZV9nZXRfdHlwZQorZ3N0X3NlZWtfZmxhZ3NfZ2V0X3R5cGUKK2dzdF9xb3NfdHlwZV9nZXRfdHlwZQorZ3N0X2V2ZW50X3R5cGVfZmxhZ3NfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworCis8U0VDVElPTj4KKzxGSUxFPmdzdGZpbHRlcjwvRklMRT4KKzxUSVRMRT5Hc3RGaWx0ZXI8L1RJVExFPgorR3N0RmlsdGVyRnVuYworZ3N0X2ZpbHRlcl9ydW4KKzwvU0VDVElPTj4KKworCis8U0VDVElPTj4KKzxGSUxFPmdzdGZvcm1hdDwvRklMRT4KKzxUSVRMRT5Hc3RGb3JtYXQ8L1RJVExFPgorR3N0Rm9ybWF0CitHU1RfRk9STUFUX1BFUkNFTlRfTUFYCitHU1RfRk9STUFUX1BFUkNFTlRfU0NBTEUKK0dzdEZvcm1hdERlZmluaXRpb24KKworZ3N0X2Zvcm1hdF9nZXRfbmFtZQorZ3N0X2Zvcm1hdF90b19xdWFyaworZ3N0X2Zvcm1hdF9yZWdpc3RlcgorZ3N0X2Zvcm1hdF9nZXRfYnlfbmljaworZ3N0X2Zvcm1hdHNfY29udGFpbnMKK2dzdF9mb3JtYXRfZ2V0X2RldGFpbHMKK2dzdF9mb3JtYXRfaXRlcmF0ZV9kZWZpbml0aW9ucworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitHU1RfVFlQRV9GT1JNQVQKKzxTVUJTRUNUSU9OIFByaXZhdGU+Citnc3RfZm9ybWF0X2dldF90eXBlCis8L1NFQ1RJT04+CisKKworPFNFQ1RJT04+Cis8RklMRT5nc3RnaG9zdHBhZDwvRklMRT4KKzxUSVRMRT5Hc3RHaG9zdFBhZDwvVElUTEU+CitHc3RQcm94eVBhZAorR3N0R2hvc3RQYWQKKworZ3N0X2dob3N0X3BhZF9uZXcKK2dzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldAorZ3N0X2dob3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZQorZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0X2Zyb21fdGVtcGxhdGUKKworZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0Citnc3RfZ2hvc3RfcGFkX2dldF90YXJnZXQKKworZ3N0X2dob3N0X3BhZF9jb25zdHJ1Y3QKKworZ3N0X2dob3N0X3BhZF91bmxpbmtfZGVmYXVsdAorZ3N0X2dob3N0X3BhZF9saW5rX2RlZmF1bHQKK2dzdF9naG9zdF9wYWRfYWN0aXZhdGVfcHVsbF9kZWZhdWx0Citnc3RfZ2hvc3RfcGFkX2FjdGl2YXRlX3B1c2hfZGVmYXVsdAorCitnc3RfZ2hvc3RfcGFkX2ludGVybmFsX2FjdGl2YXRlX3B1c2hfZGVmYXVsdAorZ3N0X2dob3N0X3BhZF9pbnRlcm5hbF9hY3RpdmF0ZV9wdWxsX2RlZmF1bHQKKworZ3N0X3Byb3h5X3BhZF9nZXRfaW50ZXJuYWwKKworZ3N0X3Byb3h5X3BhZF9xdWVyeV90eXBlX2RlZmF1bHQKK2dzdF9wcm94eV9wYWRfZXZlbnRfZGVmYXVsdAorZ3N0X3Byb3h5X3BhZF9xdWVyeV9kZWZhdWx0Citnc3RfcHJveHlfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZGVmYXVsdAorZ3N0X3Byb3h5X3BhZF9jaGFpbl9kZWZhdWx0Citnc3RfcHJveHlfcGFkX2NoYWluX2xpc3RfZGVmYXVsdAorZ3N0X3Byb3h5X3BhZF9nZXRyYW5nZV9kZWZhdWx0Citnc3RfcHJveHlfcGFkX2dldGNhcHNfZGVmYXVsdAorZ3N0X3Byb3h5X3BhZF9hY2NlcHRjYXBzX2RlZmF1bHQKK2dzdF9wcm94eV9wYWRfZml4YXRlY2Fwc19kZWZhdWx0Citnc3RfcHJveHlfcGFkX3VubGlua19kZWZhdWx0Cis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK0dzdEdob3N0UGFkQ2xhc3MKK0dTVF9HSE9TVF9QQUQKK0dTVF9JU19HSE9TVF9QQUQKK0dTVF9HSE9TVF9QQURfQ0xBU1MKK0dTVF9JU19HSE9TVF9QQURfQ0xBU1MKK0dTVF9UWVBFX0dIT1NUX1BBRAorR1NUX0dIT1NUX1BBRF9DQVNUCis8U1VCU0VDVElPTiBQcml2YXRlPgorR1NUX0lTX1BST1hZX1BBRAorR1NUX0lTX1BST1hZX1BBRF9DTEFTUworR1NUX1BST1hZX1BBRAorR1NUX1BST1hZX1BBRF9DTEFTUworR1NUX1RZUEVfUFJPWFlfUEFECitHc3RHaG9zdFBhZFByaXZhdGUKK0dzdFByb3h5UGFkQ2xhc3MKK0dzdFByb3h5UGFkUHJpdmF0ZQorZ3N0X3Byb3h5X3BhZF9nZXRfdHlwZQorZ3N0X2dob3N0X3BhZF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0aW5kZXg8L0ZJTEU+Cis8VElUTEU+R3N0SW5kZXg8L1RJVExFPgorR3N0SW5kZXgKK0dzdEluZGV4RW50cnkKK0dzdEluZGV4R3JvdXAKK0dzdEluZGV4Q2VydGFpbnR5CitHc3RJbmRleEVudHJ5VHlwZQorR3N0SW5kZXhMb29rdXBNZXRob2QKK0dTVF9JTkRFWF9OQVNTT0NTCitHU1RfSU5ERVhfQVNTT0NfRkxBR1MKK0dTVF9JTkRFWF9BU1NPQ19GT1JNQVQKK0dTVF9JTkRFWF9BU1NPQ19WQUxVRQorR3N0SW5kZXhBc3NvY2lhdGlvbgorR3N0QXNzb2NGbGFncworR1NUX0lOREVYX0ZPUk1BVF9GT1JNQVQKK0dTVF9JTkRFWF9GT1JNQVRfS0VZCitHU1RfSU5ERVhfSURfSU5WQUxJRAorR1NUX0lOREVYX0lEX0RFU0NSSVBUSU9OCitHc3RJbmRleEZpbHRlcgorR3N0SW5kZXhSZXNvbHZlck1ldGhvZAorR3N0SW5kZXhSZXNvbHZlcgorR3N0SW5kZXhGbGFncworR1NUX0lOREVYX0lTX1JFQURBQkxFCitHU1RfSU5ERVhfSVNfV1JJVEFCTEUKK2dzdF9pbmRleF9uZXcKK2dzdF9pbmRleF9jb21taXQKK2dzdF9pbmRleF9nZXRfZ3JvdXAKK2dzdF9pbmRleF9uZXdfZ3JvdXAKK2dzdF9pbmRleF9zZXRfZ3JvdXAKK2dzdF9pbmRleF9zZXRfY2VydGFpbnR5Citnc3RfaW5kZXhfZ2V0X2NlcnRhaW50eQorZ3N0X2luZGV4X3NldF9maWx0ZXIKK2dzdF9pbmRleF9zZXRfZmlsdGVyX2Z1bGwKK2dzdF9pbmRleF9zZXRfcmVzb2x2ZXIKK2dzdF9pbmRleF9zZXRfcmVzb2x2ZXJfZnVsbAorZ3N0X2luZGV4X2dldF93cml0ZXJfaWQKK2dzdF9pbmRleF9hZGRfZm9ybWF0Citnc3RfaW5kZXhfYWRkX2Fzc29jaWF0aW9uCitnc3RfaW5kZXhfYWRkX2Fzc29jaWF0aW9udgorZ3N0X2luZGV4X2FkZF9vYmplY3QKK2dzdF9pbmRleF9hZGRfaWQKK2dzdF9pbmRleF9nZXRfYXNzb2NfZW50cnkKK2dzdF9pbmRleF9nZXRfYXNzb2NfZW50cnlfZnVsbAorZ3N0X2luZGV4X2VudHJ5X2NvcHkKK2dzdF9pbmRleF9lbnRyeV9mcmVlCitnc3RfaW5kZXhfZW50cnlfYXNzb2NfbWFwCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK0dzdEluZGV4Q2xhc3MKK0dTVF9JTkRFWAorR1NUX0lTX0lOREVYCitHU1RfVFlQRV9JTkRFWAorR1NUX0lOREVYX0NMQVNTCitHU1RfSVNfSU5ERVhfQ0xBU1MKK0dTVF9JTkRFWF9HRVRfQ0xBU1MKK0dTVF9UWVBFX0lOREVYX0VOVFJZCitHU1RfVFlQRV9BU1NPQ19GTEFHUworR1NUX1RZUEVfSU5ERVhfQ0VSVEFJTlRZCitHU1RfVFlQRV9JTkRFWF9FTlRSWV9UWVBFCitHU1RfVFlQRV9JTkRFWF9GTEFHUworR1NUX1RZUEVfSU5ERVhfTE9PS1VQX01FVEhPRAorR1NUX1RZUEVfSU5ERVhfUkVTT0xWRVJfTUVUSE9ECis8U1VCU0VDVElPTiBQcml2YXRlPgorZ3N0X2luZGV4X2dldF90eXBlCitnc3RfYXNzb2NfZmxhZ3NfZ2V0X3R5cGUKK2dzdF9pbmRleF9jZXJ0YWludHlfZ2V0X3R5cGUKK2dzdF9pbmRleF9lbnRyeV9nZXRfdHlwZQorZ3N0X2luZGV4X2VudHJ5X3R5cGVfZ2V0X3R5cGUKK2dzdF9pbmRleF9mbGFnc19nZXRfdHlwZQorZ3N0X2luZGV4X2xvb2t1cF9tZXRob2RfZ2V0X3R5cGUKK2dzdF9pbmRleF9yZXNvbHZlcl9tZXRob2RfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworCis8U0VDVElPTj4KKzxGSUxFPmdzdGluZGV4ZmFjdG9yeTwvRklMRT4KKzxUSVRMRT5Hc3RJbmRleEZhY3Rvcnk8L1RJVExFPgorR3N0SW5kZXhGYWN0b3J5Citnc3RfaW5kZXhfZmFjdG9yeV9uZXcKK2dzdF9pbmRleF9mYWN0b3J5X2Rlc3Ryb3kKK2dzdF9pbmRleF9mYWN0b3J5X2ZpbmQKK2dzdF9pbmRleF9mYWN0b3J5X2NyZWF0ZQorZ3N0X2luZGV4X2ZhY3RvcnlfbWFrZQorPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitHc3RJbmRleEZhY3RvcnlDbGFzcworR1NUX0lOREVYX0ZBQ1RPUlkKK0dTVF9JU19JTkRFWF9GQUNUT1JZCitHU1RfSU5ERVhfRkFDVE9SWV9DTEFTUworR1NUX0lTX0lOREVYX0ZBQ1RPUllfQ0xBU1MKK0dTVF9JTkRFWF9GQUNUT1JZX0dFVF9DTEFTUworR1NUX1RZUEVfSU5ERVhfRkFDVE9SWQorPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK2dzdF9pbmRleF9mYWN0b3J5X2dldF90eXBlCis8L1NFQ1RJT04+CisKKworPFNFQ1RJT04+Cis8RklMRT5nc3RpbmZvPC9GSUxFPgorPFRJVExFPkdzdEluZm88L1RJVExFPgorR3N0RGVidWdMZXZlbAorR1NUX0xFVkVMX0RFRkFVTFQKK0dzdERlYnVnQ29sb3JGbGFncworR3N0RGVidWdDYXRlZ29yeQorR3N0RGVidWdHcmFwaERldGFpbHMKK0dTVF9TVFJfTlVMTAorR1NUX0RFQlVHX1BBRF9OQU1FCitHU1RfRlVOQ1RJT04KK0dzdExvZ0Z1bmN0aW9uCitnc3RfZGVidWdfbG9nCitnc3RfZGVidWdfbG9nX3ZhbGlzdAorZ3N0X2RlYnVnX21lc3NhZ2VfZ2V0Citnc3RfZGVidWdfbG9nX2RlZmF1bHQKK2dzdF9kZWJ1Z19sZXZlbF9nZXRfbmFtZQorZ3N0X2RlYnVnX2FkZF9sb2dfZnVuY3Rpb24KK2dzdF9kZWJ1Z19yZW1vdmVfbG9nX2Z1bmN0aW9uCitnc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbl9ieV9kYXRhCitnc3RfZGVidWdfc2V0X2FjdGl2ZQorZ3N0X2RlYnVnX2lzX2FjdGl2ZQorZ3N0X2RlYnVnX3NldF9jb2xvcmVkCitnc3RfZGVidWdfaXNfY29sb3JlZAorZ3N0X2RlYnVnX3NldF9kZWZhdWx0X3RocmVzaG9sZAorZ3N0X2RlYnVnX2dldF9kZWZhdWx0X3RocmVzaG9sZAorZ3N0X2RlYnVnX3NldF90aHJlc2hvbGRfZm9yX25hbWUKK2dzdF9kZWJ1Z191bnNldF90aHJlc2hvbGRfZm9yX25hbWUKK0dTVF9ERUJVR19DQVRFR09SWQorR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTgorR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQworR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQKK0dTVF9ERUJVR19DQVRFR09SWV9HRVQKK2dzdF9kZWJ1Z19jYXRlZ29yeV9mcmVlCitnc3RfZGVidWdfY2F0ZWdvcnlfc2V0X3RocmVzaG9sZAorZ3N0X2RlYnVnX2NhdGVnb3J5X3Jlc2V0X3RocmVzaG9sZAorZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF90aHJlc2hvbGQKK2dzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfbmFtZQorZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9jb2xvcgorZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9kZXNjcmlwdGlvbgorZ3N0X2RlYnVnX2dldF9hbGxfY2F0ZWdvcmllcworZ3N0X2RlYnVnX2NvbnN0cnVjdF90ZXJtX2NvbG9yCitnc3RfZGVidWdfY29uc3RydWN0X3dpbl9jb2xvcgorR1NUX0NBVF9MRVZFTF9MT0cKK0dTVF9DQVRfRVJST1JfT0JKRUNUCitHU1RfQ0FUX1dBUk5JTkdfT0JKRUNUCitHU1RfQ0FUX0lORk9fT0JKRUNUCitHU1RfQ0FUX0RFQlVHX09CSkVDVAorR1NUX0NBVF9MT0dfT0JKRUNUCitHU1RfQ0FUX0ZJWE1FX09CSkVDVAorR1NUX0NBVF9UUkFDRV9PQkpFQ1QKK0dTVF9DQVRfTUVNRFVNUF9PQkpFQ1QKK0dTVF9DQVRfRVJST1IKK0dTVF9DQVRfV0FSTklORworR1NUX0NBVF9JTkZPCitHU1RfQ0FUX0RFQlVHCitHU1RfQ0FUX0xPRworR1NUX0NBVF9GSVhNRQorR1NUX0NBVF9UUkFDRQorR1NUX0NBVF9NRU1EVU1QCitHU1RfRVJST1JfT0JKRUNUCitHU1RfV0FSTklOR19PQkpFQ1QKK0dTVF9JTkZPX09CSkVDVAorR1NUX0RFQlVHX09CSkVDVAorR1NUX0xPR19PQkpFQ1QKK0dTVF9GSVhNRV9PQkpFQ1QKK0dTVF9UUkFDRV9PQkpFQ1QKK0dTVF9NRU1EVU1QX09CSkVDVAorR1NUX0VSUk9SCitHU1RfV0FSTklORworR1NUX0lORk8KK0dTVF9ERUJVRworR1NUX0xPRworR1NUX0ZJWE1FCitHU1RfVFJBQ0UKK0dTVF9NRU1EVU1QCitHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUgorR1NUX0RFQlVHX0ZVTkNQVFIKK0dTVF9ERUJVR19GVU5DUFRSX05BTUUKK0dTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEUKK0dTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUworZ3N0X2RlYnVnX3ByaW50X3N0YWNrX3RyYWNlCitHU1RfVElNRV9GT1JNQVQKK0dTVF9USU1FX0FSR1MKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR1NUX1RZUEVfREVCVUdfQ09MT1JfRkxBR1MKK0dTVF9UWVBFX0RFQlVHX0xFVkVMCitHU1RfVFlQRV9ERUJVR19HUkFQSF9ERVRBSUxTCis8U1VCU0VDVElPTiBQcml2YXRlPgorR1NUX0RFQlVHX0ZHX01BU0sKK0dTVF9ERUJVR19CR19NQVNLCitHU1RfREVCVUdfRk9STUFUX01BU0sKK0dzdERlYnVnRnVuY1B0cgorR3N0RGVidWdNZXNzYWdlCitnc3RfZGVidWdfY29sb3JfZmxhZ3NfZ2V0X3R5cGUKK2dzdF9kZWJ1Z19sZXZlbF9nZXRfdHlwZQorZ3N0X2RlYnVnX2dyYXBoX2RldGFpbHNfZ2V0X3R5cGUKK0dTVF9DQVRfTEVWRUxfTE9HX3ZhbGlzdAorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPmdzdGl0ZXJhdG9yPC9GSUxFPgorPFRJVExFPkdzdEl0ZXJhdG9yPC9USVRMRT4KK0dzdEl0ZXJhdG9yCisKK0dzdEl0ZXJhdG9ySXRlbQorR3N0SXRlcmF0b3JSZXN1bHQKKworR3N0SXRlcmF0b3JDb3B5RnVuY3Rpb24KK0dzdEl0ZXJhdG9yTmV4dEZ1bmN0aW9uCitHc3RJdGVyYXRvckl0ZW1GdW5jdGlvbgorR3N0SXRlcmF0b3JSZXN5bmNGdW5jdGlvbgorR3N0SXRlcmF0b3JGcmVlRnVuY3Rpb24KK0dzdEl0ZXJhdG9yRm9yZWFjaEZ1bmN0aW9uCitHc3RJdGVyYXRvckZvbGRGdW5jdGlvbgorCitHU1RfSVRFUkFUT1IKK0dTVF9JVEVSQVRPUl9MT0NLCitHU1RfSVRFUkFUT1JfQ09PS0lFCitHU1RfSVRFUkFUT1JfT1JJR19DT09LSUUKKworZ3N0X2l0ZXJhdG9yX25ldworZ3N0X2l0ZXJhdG9yX25ld19saXN0Citnc3RfaXRlcmF0b3JfbmV3X3NpbmdsZQorCitnc3RfaXRlcmF0b3JfY29weQorZ3N0X2l0ZXJhdG9yX2ZyZWUKKworZ3N0X2l0ZXJhdG9yX25leHQKK2dzdF9pdGVyYXRvcl9yZXN5bmMKK2dzdF9pdGVyYXRvcl9wdXNoCitnc3RfaXRlcmF0b3JfZmlsdGVyCitnc3RfaXRlcmF0b3JfZm9sZAorZ3N0X2l0ZXJhdG9yX2ZvcmVhY2gKK2dzdF9pdGVyYXRvcl9maW5kX2N1c3RvbQorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK0dTVF9UWVBFX0lURVJBVE9SCitHU1RfVFlQRV9JVEVSQVRPUl9JVEVNCitHU1RfVFlQRV9JVEVSQVRPUl9SRVNVTFQKKzxTVUJTRUNUSU9OIFByaXZhdGU+Citnc3RfaXRlcmF0b3JfZ2V0X3R5cGUKK2dzdF9pdGVyYXRvcl9pdGVtX2dldF90eXBlCitnc3RfaXRlcmF0b3JfcmVzdWx0X2dldF90eXBlCis8L1NFQ1RJT04+CisKKworPFNFQ1RJT04+Cis8RklMRT5nc3RtZW1vcnk8L0ZJTEU+Cis8VElUTEU+R3N0TWVtb3J5PC9USVRMRT4KK0dzdE1lbW9yeQorR3N0TWVtb3J5SW5mbworR3N0QWxsb2NhdG9yCitHU1RfTUVNT1JZX0lTX1dSSVRBQkxFCitHc3RNZW1vcnlGbGFncworR3N0TWFwRmxhZ3MKK0dTVF9NQVBfUkVBRFdSSVRFCitHc3RNZW1vcnlBbGxvY0Z1bmN0aW9uCitHc3RNZW1vcnlHZXRTaXplc0Z1bmN0aW9uCitHc3RNZW1vcnlSZXNpemVGdW5jdGlvbgorR3N0TWVtb3J5TWFwRnVuY3Rpb24KK0dzdE1lbW9yeVVubWFwRnVuY3Rpb24KK0dzdE1lbW9yeUZyZWVGdW5jdGlvbgorR3N0TWVtb3J5Q29weUZ1bmN0aW9uCitHc3RNZW1vcnlTaGFyZUZ1bmN0aW9uCitHc3RNZW1vcnlJc1NwYW5GdW5jdGlvbgorCitnc3RfbWVtb3J5X2FsaWdubWVudAorCitnc3RfYWxsb2NhdG9yX2FsbG9jCitnc3RfbWVtb3J5X25ld193cmFwcGVkCisKK2dzdF9tZW1vcnlfcmVmCitnc3RfbWVtb3J5X3VucmVmCisKK2dzdF9tZW1vcnlfZ2V0X3NpemVzCitnc3RfbWVtb3J5X3Jlc2l6ZQorCitnc3RfbWVtb3J5X21hcAorZ3N0X21lbW9yeV91bm1hcAorCitnc3RfbWVtb3J5X2NvcHkKK2dzdF9tZW1vcnlfc2hhcmUKKworZ3N0X21lbW9yeV9pc19zcGFuCisKK0dTVF9BTExPQ0FUT1JfU1lTTUVNCitnc3RfYWxsb2NhdG9yX2ZpbmQKK2dzdF9hbGxvY2F0b3JfcmVnaXN0ZXIKK2dzdF9hbGxvY2F0b3Jfc2V0X2RlZmF1bHQKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR1NUX01FTU9SWV9UUkFDRV9OQU1FCitHU1RfVFlQRV9NQVBfRkxBR1MKK0dTVF9UWVBFX01FTU9SWV9GTEFHUworZ3N0X21hcF9mbGFnc19nZXRfdHlwZQorZ3N0X21lbW9yeV9mbGFnc19nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPmdzdG1lc3NhZ2U8L0ZJTEU+Cis8VElUTEU+R3N0TWVzc2FnZTwvVElUTEU+CitHc3RNZXNzYWdlCitHc3RNZXNzYWdlVHlwZQorR1NUX01FU1NBR0VfU1JDCitHU1RfTUVTU0FHRV9TUkNfTkFNRQorR1NUX01FU1NBR0VfVElNRVNUQU1QCitHU1RfTUVTU0FHRV9TRVFOVU0KK0dTVF9NRVNTQUdFX1RZUEUKK0dTVF9NRVNTQUdFX1RZUEVfTkFNRQorR1NUX01FU1NBR0VfVFJBQ0VfTkFNRQorZ3N0X21lc3NhZ2VfdHlwZV90b19xdWFyaworZ3N0X21lc3NhZ2VfdHlwZV9nZXRfbmFtZQorZ3N0X21lc3NhZ2VfcmVmCitnc3RfbWVzc2FnZV91bnJlZgorZ3N0X21lc3NhZ2VfY29weQorZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZQorZ3N0X21lc3NhZ2VfbWFrZV93cml0YWJsZQorZ3N0X21lc3NhZ2VfZ2V0X3NlcW51bQorZ3N0X21lc3NhZ2Vfc2V0X3NlcW51bQorZ3N0X21lc3NhZ2VfaGFzX25hbWUKK2dzdF9tZXNzYWdlX2lzX3dyaXRhYmxlCitnc3RfbWVzc2FnZV9yZXBsYWNlCisKK2dzdF9tZXNzYWdlX25ld19lb3MKK2dzdF9tZXNzYWdlX25ld19lcnJvcgorZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IKK2dzdF9tZXNzYWdlX25ld193YXJuaW5nCitnc3RfbWVzc2FnZV9wYXJzZV93YXJuaW5nCitnc3RfbWVzc2FnZV9uZXdfaW5mbworZ3N0X21lc3NhZ2VfcGFyc2VfaW5mbworZ3N0X21lc3NhZ2VfbmV3X3RhZworZ3N0X21lc3NhZ2VfcGFyc2VfdGFnCitnc3RfbWVzc2FnZV9uZXdfYnVmZmVyaW5nCitnc3RfbWVzc2FnZV9wYXJzZV9idWZmZXJpbmcKK2dzdF9tZXNzYWdlX3NldF9idWZmZXJpbmdfc3RhdHMKK2dzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZ19zdGF0cworZ3N0X21lc3NhZ2VfbmV3X3N0YXRlX2NoYW5nZWQKK2dzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQKK2dzdF9tZXNzYWdlX25ld19zdGF0ZV9kaXJ0eQorZ3N0X21lc3NhZ2VfbmV3X3N0ZXBfZG9uZQorZ3N0X21lc3NhZ2VfcGFyc2Vfc3RlcF9kb25lCitnc3RfbWVzc2FnZV9uZXdfY2xvY2tfcHJvdmlkZQorZ3N0X21lc3NhZ2VfcGFyc2VfY2xvY2tfcHJvdmlkZQorZ3N0X21lc3NhZ2VfbmV3X2Nsb2NrX2xvc3QKK2dzdF9tZXNzYWdlX3BhcnNlX2Nsb2NrX2xvc3QKK2dzdF9tZXNzYWdlX25ld19uZXdfY2xvY2sKK2dzdF9tZXNzYWdlX3BhcnNlX25ld19jbG9jaworZ3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9uCitnc3RfbWVzc2FnZV9uZXdfZWxlbWVudAorZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbQorZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfc3RhcnQKK2dzdF9tZXNzYWdlX3BhcnNlX3NlZ21lbnRfc3RhcnQKK2dzdF9tZXNzYWdlX25ld19zZWdtZW50X2RvbmUKK2dzdF9tZXNzYWdlX3BhcnNlX3NlZ21lbnRfZG9uZQorZ3N0X21lc3NhZ2VfbmV3X2R1cmF0aW9uCitnc3RfbWVzc2FnZV9wYXJzZV9kdXJhdGlvbgorZ3N0X21lc3NhZ2VfbmV3X2xhdGVuY3kKK2dzdF9tZXNzYWdlX25ld19hc3luY19zdGFydAorZ3N0X21lc3NhZ2VfbmV3X2FzeW5jX2RvbmUKK2dzdF9tZXNzYWdlX3BhcnNlX2FzeW5jX2RvbmUKK2dzdF9tZXNzYWdlX25ld19zdGVwX3N0YXJ0Citnc3RfbWVzc2FnZV9wYXJzZV9zdGVwX3N0YXJ0Citnc3RfbWVzc2FnZV9uZXdfcW9zCitnc3RfbWVzc2FnZV9zZXRfcW9zX3ZhbHVlcworZ3N0X21lc3NhZ2Vfc2V0X3Fvc19zdGF0cworZ3N0X21lc3NhZ2VfcGFyc2VfcW9zCitnc3RfbWVzc2FnZV9wYXJzZV9xb3NfdmFsdWVzCitnc3RfbWVzc2FnZV9wYXJzZV9xb3Nfc3RhdHMKKworR3N0U3RydWN0dXJlQ2hhbmdlVHlwZQorZ3N0X21lc3NhZ2VfbmV3X3N0cnVjdHVyZV9jaGFuZ2UKK2dzdF9tZXNzYWdlX3BhcnNlX3N0cnVjdHVyZV9jaGFuZ2UKK2dzdF9tZXNzYWdlX25ld19yZXF1ZXN0X3N0YXRlCitnc3RfbWVzc2FnZV9wYXJzZV9yZXF1ZXN0X3N0YXRlCisKK0dzdFN0cmVhbVN0YXR1c1R5cGUKK2dzdF9tZXNzYWdlX25ld19zdHJlYW1fc3RhdHVzCitnc3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1fc3RhdHVzCitnc3RfbWVzc2FnZV9zZXRfc3RyZWFtX3N0YXR1c19vYmplY3QKK2dzdF9tZXNzYWdlX2dldF9zdHJlYW1fc3RhdHVzX29iamVjdAorCitHc3RQcm9ncmVzc1R5cGUKK2dzdF9tZXNzYWdlX25ld19wcm9ncmVzcworZ3N0X21lc3NhZ2VfcGFyc2VfcHJvZ3Jlc3MKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitHc3RNZXNzYWdlQ2xhc3MKK0dTVF9NRVNTQUdFCitHU1RfTUVTU0FHRV9DQVNUCitHU1RfSVNfTUVTU0FHRQorR1NUX1RZUEVfTUVTU0FHRQorR1NUX01FU1NBR0VfQ0xBU1MKK0dTVF9JU19NRVNTQUdFX0NMQVNTCitHU1RfTUVTU0FHRV9HRVRfQ0xBU1MKK0dTVF9UWVBFX01FU1NBR0VfVFlQRQorR1NUX1RZUEVfU1RSVUNUVVJFX0NIQU5HRV9UWVBFCitHU1RfVFlQRV9TVFJFQU1fU1RBVFVTX1RZUEUKK0dTVF9UWVBFX1BST0dSRVNTX1RZUEUKKzxTVUJTRUNUSU9OIFByaXZhdGU+Citnc3RfbWVzc2FnZV9nZXRfdHlwZQorZ3N0X21lc3NhZ2VfdHlwZV9nZXRfdHlwZQorZ3N0X3N0cnVjdHVyZV9jaGFuZ2VfdHlwZV9nZXRfdHlwZQorZ3N0X3N0cmVhbV9zdGF0dXNfdHlwZV9nZXRfdHlwZQorZ3N0X3Byb2dyZXNzX3R5cGVfZ2V0X3R5cGUKK0dTVF9NRVNTQUdFX0NPTkQKK0dTVF9NRVNTQUdFX0dFVF9MT0NLCitHU1RfTUVTU0FHRV9MT0NLCitHU1RfTUVTU0FHRV9TSUdOQUwKK0dTVF9NRVNTQUdFX1VOTE9DSworR1NUX01FU1NBR0VfV0FJVAorPC9TRUNUSU9OPgorCisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0bWluaW9iamVjdDwvRklMRT4KKzxUSVRMRT5Hc3RNaW5pT2JqZWN0PC9USVRMRT4KK0dzdE1pbmlPYmplY3QKK0dzdE1pbmlPYmplY3RGbGFncworR3N0TWluaU9iamVjdENvcHlGdW5jdGlvbgorR3N0TWluaU9iamVjdERpc3Bvc2VGdW5jdGlvbgorR3N0TWluaU9iamVjdEZyZWVGdW5jdGlvbgorR3N0TWluaU9iamVjdFdlYWtOb3RpZnkKKworR1NUX01JTklfT0JKRUNUX1RZUEUKK0dTVF9NSU5JX09CSkVDVF9GTEFHUworR1NUX01JTklfT0JKRUNUX0ZMQUdfSVNfU0VUCitHU1RfTUlOSV9PQkpFQ1RfRkxBR19TRVQKK0dTVF9NSU5JX09CSkVDVF9GTEFHX1VOU0VUCitHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlQKK0dTVF9NSU5JX09CSkVDVF9SRUZDT1VOVF9WQUxVRQorR1NUX01JTklfT0JKRUNUX1NJWkUKKworR1NUX0RFRklORV9NSU5JX09CSkVDVF9UWVBFCitnc3RfbWluaV9vYmplY3RfaW5pdAorCitnc3RfbWluaV9vYmplY3RfY29weQorZ3N0X21pbmlfb2JqZWN0X2lzX3dyaXRhYmxlCitnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZQorCitnc3RfbWluaV9vYmplY3RfcmVmCitnc3RfbWluaV9vYmplY3RfdW5yZWYKKworZ3N0X21pbmlfb2JqZWN0X3dlYWtfcmVmCitnc3RfbWluaV9vYmplY3Rfd2Vha191bnJlZgorCitnc3RfbWluaV9vYmplY3RfcmVwbGFjZQorZ3N0X21pbmlfb2JqZWN0X3N0ZWFsCitnc3RfbWluaV9vYmplY3RfdGFrZQorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK0dTVF9NSU5JX09CSkVDVAorR1NUX0lTX01JTklfT0JKRUNUX1RZUEUKK0dTVF9UWVBFX01JTklfT0JKRUNUX0ZMQUdTCitHU1RfTUlOSV9PQkpFQ1RfQ0FTVAorR1NUX01JTklfT0JKRUNUX0NPTlNUX0NBU1QKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK2dzdF9taW5pX29iamVjdF9mbGFnc19nZXRfdHlwZQorPC9TRUNUSU9OPgorCisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0b2JqZWN0PC9GSUxFPgorPFRJVExFPkdzdE9iamVjdDwvVElUTEU+CitHc3RPYmplY3QKK0dzdE9iamVjdENsYXNzCitHc3RPYmplY3RGbGFncworR1NUX09CSkVDVF9GTEFHUworR1NUX09CSkVDVF9GTEFHX0lTX1NFVAorR1NUX09CSkVDVF9GTEFHX1NFVAorR1NUX09CSkVDVF9GTEFHX1VOU0VUCitHU1RfT0JKRUNUX05BTUUKK0dTVF9PQkpFQ1RfUEFSRU5UCitHU1RfT0JKRUNUX1JFRkNPVU5UCitHU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFCitHU1RfT0JKRUNUX0xPQ0sKK0dTVF9PQkpFQ1RfVFJZTE9DSworR1NUX09CSkVDVF9VTkxPQ0sKK0dTVF9PQkpFQ1RfR0VUX0xPQ0sKKworZ3N0X29iamVjdF9zZXRfbmFtZQorZ3N0X29iamVjdF9nZXRfbmFtZQorZ3N0X29iamVjdF9zZXRfcGFyZW50Citnc3Rfb2JqZWN0X2dldF9wYXJlbnQKK2dzdF9vYmplY3RfdW5wYXJlbnQKK2dzdF9vYmplY3RfZGVmYXVsdF9kZWVwX25vdGlmeQorZ3N0X29iamVjdF9kZWZhdWx0X2Vycm9yCitnc3Rfb2JqZWN0X2NoZWNrX3VuaXF1ZW5lc3MKK2dzdF9vYmplY3RfaGFzX2FuY2VzdG9yCitnc3Rfb2JqZWN0X3JlZgorZ3N0X29iamVjdF91bnJlZgorZ3N0X29iamVjdF9yZWZfc2luaworZ3N0X29iamVjdF9yZXBsYWNlCitnc3Rfb2JqZWN0X2dldF9wYXRoX3N0cmluZworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitHU1RfT0JKRUNUCitHU1RfSVNfT0JKRUNUCitHU1RfT0JKRUNUX0NMQVNTCitHU1RfSVNfT0JKRUNUX0NMQVNTCitHU1RfT0JKRUNUX0dFVF9DTEFTUworR1NUX1RZUEVfT0JKRUNUCitHU1RfVFlQRV9PQkpFQ1RfRkxBR1MKK0dTVF9PQkpFQ1RfQ0FTVAorR1NUX09CSkVDVF9DTEFTU19DQVNUCis8U1VCU0VDVElPTiBQcml2YXRlPgorZ3N0X29iamVjdF9nZXRfdHlwZQorZ3N0X29iamVjdF9mbGFnc19nZXRfdHlwZQorPC9TRUNUSU9OPgorCisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0cGFkPC9GSUxFPgorPFRJVExFPkdzdFBhZDwvVElUTEU+CitHc3RQYWQKKworR3N0UGFkRGlyZWN0aW9uCitHc3RQYWRGbGFncworR3N0UGFkTGlua1JldHVybgorR1NUX1BBRF9MSU5LX0ZBSUxFRAorR1NUX1BBRF9MSU5LX1NVQ0NFU1NGVUwKK0dzdFBhZExpbmtDaGVjaworR1NUX1BBRF9MSU5LX0NIRUNLX0RFRkFVTFQKK0dzdEZsb3dSZXR1cm4KK0dzdEFjdGl2YXRlTW9kZQorR3N0UHJvYmVSZXR1cm4KK0dzdFByb2JlVHlwZQorR1NUX1BST0JFX1RZUEVfQkxPQ0tJTkcKK0dTVF9QUk9CRV9UWVBFX0RBVEEKK0dTVF9QUk9CRV9UWVBFX1NDSEVEVUxJTkcKKworPFNVQlNFQ1RJT04gQXBwbGljYXRpb24+Citnc3RfcGFkX2dldF9uYW1lCitnc3RfcGFkX2dldF9kaXJlY3Rpb24KK2dzdF9wYWRfZ2V0X3BhcmVudAorZ3N0X3BhZF9nZXRfcGFyZW50X2VsZW1lbnQKK2dzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZQorCitnc3RfcGFkX2xpbmsKK2dzdF9wYWRfbGlua19mdWxsCitnc3RfcGFkX3VubGluaworZ3N0X3BhZF9pc19saW5rZWQKK2dzdF9wYWRfY2FuX2xpbmsKKworZ3N0X3BhZF9nZXRfY2FwcworZ3N0X3BhZF9nZXRfY2Fwc19yZWZmZWQKK2dzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwcworZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzCitnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcworZ3N0X3BhZF9zZXRfY2FwcworCitnc3RfcGFkX2dldF9wZWVyCitnc3RfcGFkX3BlZXJfZ2V0X2NhcHMKK2dzdF9wYWRfcGVlcl9nZXRfY2Fwc19yZWZmZWQKK2dzdF9wYWRfdXNlX2ZpeGVkX2NhcHMKK2dzdF9wYWRfaGFzX2N1cnJlbnRfY2FwcworCitnc3RfcGFkX2dldF9zdGlja3lfZXZlbnQKK0dzdFBhZFN0aWNreUV2ZW50c0ZvcmVhY2hGdW5jdGlvbgorZ3N0X3BhZF9zdGlja3lfZXZlbnRzX2ZvcmVhY2gKKworZ3N0X3BhZF9pc19hY3RpdmUKKworZ3N0X3BhZF9pc19ibG9ja2VkCitnc3RfcGFkX2lzX2Jsb2NraW5nCisKK0dzdFBhZFByb2JlQ2FsbGJhY2sKK2dzdF9wYWRfYWRkX3Byb2JlCitnc3RfcGFkX3JlbW92ZV9wcm9iZQorCitnc3RfcGFkX2dldF9vZmZzZXQKK2dzdF9wYWRfc2V0X29mZnNldAorPFNVQlNFQ1RJT04gRWxlbWVudD4KK2dzdF9wYWRfbmV3Citnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlCitnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZQorCitnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbgorR3N0UGFkQ2hhaW5GdW5jdGlvbgorCitnc3RfcGFkX3NldF9jaGFpbl9saXN0X2Z1bmN0aW9uCitHc3RQYWRDaGFpbkxpc3RGdW5jdGlvbgorCitnc3RfcGFkX2dldF9yYW5nZQorZ3N0X3BhZF9zZXRfZ2V0cmFuZ2VfZnVuY3Rpb24KK0dzdFBhZEdldFJhbmdlRnVuY3Rpb24KKworZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24KK0dzdFBhZEV2ZW50RnVuY3Rpb24KKworZ3N0X3BhZF9zZXRfbGlua19mdW5jdGlvbgorR3N0UGFkTGlua0Z1bmN0aW9uCitnc3RfcGFkX3NldF91bmxpbmtfZnVuY3Rpb24KK0dzdFBhZFVubGlua0Z1bmN0aW9uCisKK2dzdF9wYWRfYWNjZXB0X2NhcHMKK2dzdF9wYWRfc2V0X2FjY2VwdGNhcHNfZnVuY3Rpb24KK0dzdFBhZEFjY2VwdENhcHNGdW5jdGlvbgorCitnc3RfcGFkX3NldF9nZXRjYXBzX2Z1bmN0aW9uCitHc3RQYWRHZXRDYXBzRnVuY3Rpb24KK2dzdF9wYWRfcHJveHlfZ2V0Y2FwcworCitnc3RfcGFkX2ZpeGF0ZV9jYXBzCitnc3RfcGFkX3NldF9maXhhdGVjYXBzX2Z1bmN0aW9uCitHc3RQYWRGaXhhdGVDYXBzRnVuY3Rpb24KKworZ3N0X3BhZF9wZWVyX2FjY2VwdF9jYXBzCisKK2dzdF9wYWRfc2V0X2FjdGl2YXRlX2Z1bmN0aW9uCitHc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uCisKK2dzdF9wYWRfc2V0X2FjdGl2YXRlcHVzaF9mdW5jdGlvbgorZ3N0X3BhZF9zZXRfYWN0aXZhdGVwdWxsX2Z1bmN0aW9uCitHc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbgorCitnc3RfcGFkX2NoZWNrX3JlY29uZmlndXJlCitnc3RfcGFkX21hcmtfcmVjb25maWd1cmUKKworZ3N0X3BhZF9wdXNoCitnc3RfcGFkX3B1c2hfZXZlbnQKK2dzdF9wYWRfcHVzaF9saXN0Citnc3RfcGFkX3B1bGxfcmFuZ2UKK2dzdF9wYWRfYWN0aXZhdGVfcHVsbAorZ3N0X3BhZF9hY3RpdmF0ZV9wdXNoCitnc3RfcGFkX3NlbmRfZXZlbnQKK2dzdF9wYWRfZXZlbnRfZGVmYXVsdAorCitnc3RfcGFkX3F1ZXJ5Citnc3RfcGFkX3BlZXJfcXVlcnkKK2dzdF9wYWRfcXVlcnlfZGVmYXVsdAorZ3N0X3BhZF9xdWVyeV9wb3NpdGlvbgorZ3N0X3BhZF9xdWVyeV9kdXJhdGlvbgorZ3N0X3BhZF9xdWVyeV9jb252ZXJ0Citnc3RfcGFkX3F1ZXJ5X3BlZXJfcG9zaXRpb24KK2dzdF9wYWRfcXVlcnlfcGVlcl9kdXJhdGlvbgorZ3N0X3BhZF9xdWVyeV9wZWVyX2NvbnZlcnQKK2dzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uCitHc3RQYWRRdWVyeUZ1bmN0aW9uCitnc3RfcGFkX3NldF9xdWVyeV90eXBlX2Z1bmN0aW9uCitHc3RQYWRRdWVyeVR5cGVGdW5jdGlvbgorZ3N0X3BhZF9nZXRfcXVlcnlfdHlwZXMKK2dzdF9wYWRfZ2V0X3F1ZXJ5X3R5cGVzX2RlZmF1bHQKKworZ3N0X3BhZF9zZXRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19mdW5jdGlvbgorR3N0UGFkSXRlckludExpbmtGdW5jdGlvbgorZ3N0X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzCitnc3RfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZGVmYXVsdAorCitnc3RfcGFkX3NldF9lbGVtZW50X3ByaXZhdGUKK2dzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZQorCitHc3RQYWRGb3J3YXJkRnVuY3Rpb24KK2dzdF9wYWRfZm9yd2FyZAorPFNVQlNFQ1RJT04gQ29yZT4KK2dzdF9wYWRfY2hhaW4KK2dzdF9wYWRfY2hhaW5fbGlzdAorCitnc3RfcGFkX3N0YXJ0X3Rhc2sKK2dzdF9wYWRfcGF1c2VfdGFzaworZ3N0X3BhZF9zdG9wX3Rhc2sKKworZ3N0X3BhZF9zZXRfYWN0aXZlCisKK0dTVF9QQURfR0VUX1NUUkVBTV9MT0NLCitHU1RfUEFEX1NUUkVBTV9MT0NLCitHU1RfUEFEX1NUUkVBTV9MT0NLX0ZVTEwKK0dTVF9QQURfU1RSRUFNX1RSWUxPQ0sKK0dTVF9QQURfU1RSRUFNX1VOTE9DSworR1NUX1BBRF9TVFJFQU1fVU5MT0NLX0ZVTEwKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitHc3RQYWRDbGFzcworR3N0UGFkUHJpdmF0ZQorR1NUX1BBRAorR1NUX0lTX1BBRAorR1NUX1BBRF9DTEFTUworR1NUX0lTX1BBRF9DTEFTUworR1NUX1RZUEVfUEFECitHU1RfVFlQRV9QQURfRElSRUNUSU9OCitHU1RfVFlQRV9QQURfRkxBR1MKK0dTVF9UWVBFX1BBRF9MSU5LX1JFVFVSTgorR1NUX1RZUEVfUEFEX0xJTktfQ0hFQ0sKK0dTVF9UWVBFX1BBRF9QUkVTRU5DRQorR1NUX1RZUEVfRkxPV19SRVRVUk4KK0dTVF9UWVBFX0FDVElWQVRFX01PREUKK0dTVF9UWVBFX1BST0JFX1JFVFVSTgorR1NUX1RZUEVfUFJPQkVfVFlQRQorCis8U1VCU0VDVElPTiBQcml2YXRlPgorZ3N0X3BhZF9nZXRfdHlwZQorZ3N0X3BhZF9kaXJlY3Rpb25fZ2V0X3R5cGUKK2dzdF9wYWRfZmxhZ3NfZ2V0X3R5cGUKK2dzdF9wYWRfbGlua19yZXR1cm5fZ2V0X3R5cGUKK2dzdF9wYWRfbGlua19jaGVja19nZXRfdHlwZQorZ3N0X3BhZF9wcmVzZW5jZV9nZXRfdHlwZQorZ3N0X2Zsb3dfcmV0dXJuX2dldF90eXBlCitnc3RfYWN0aXZhdGVfbW9kZV9nZXRfdHlwZQorZ3N0X3Byb2JlX3JldHVybl9nZXRfdHlwZQorZ3N0X3Byb2JlX3R5cGVfZ2V0X3R5cGUKKworR1NUX1BBRF9OQU1FCitHU1RfUEFEX1BBUkVOVAorR1NUX1BBRF9FTEVNRU5UX1BSSVZBVEUKK0dTVF9QQURfUEFEX1RFTVBMQVRFCitHU1RfUEFEX0RJUkVDVElPTgorR1NUX1BBRF9QRUVSCitHU1RfUEFEX0lTX0xJTktFRAorR1NUX1BBRF9JU19TUkMKK0dTVF9QQURfSVNfU0lOSworR1NUX1BBRF9JU19GSVhFRF9DQVBTCitHU1RfUEFEX05FRURTX0VWRU5UUworR1NUX1BBRF9ORUVEU19SRUNPTkZJR1VSRQorCitHU1RfUEFEX0lTX0lOX0dFVENBUFMKK0dTVF9QQURfTU9ERV9BQ1RJVkFURQorR1NUX1BBRF9CTE9DS19CUk9BRENBU1QKK0dTVF9QQURfQkxPQ0tfR0VUX0NPTkQKK0dTVF9QQURfQkxPQ0tfU0lHTkFMCitHU1RfUEFEX0JMT0NLX1dBSVQKK0dTVF9QQURfQ0FTVAorR1NUX1BBRF9BQ1RJVkFURV9NT0RFCitHU1RfUEFEX0RPX0JVRkZFUl9TSUdOQUxTCitHU1RfUEFEX0RPX0VWRU5UX1NJR05BTFMKK0dTVF9QQURfSVNfQkxPQ0tFRAorR1NUX1BBRF9JU19CTE9DS0lORworR1NUX1BBRF9JU19JTl9TRVRDQVBTCitHU1RfUEFEX1NFVF9GTFVTSElORworR1NUX1BBRF9UQVNLCitHU1RfUEFEX1VOU0VUX0ZMVVNISU5HCisKK0dTVF9QQURfR0VUQ0FQU0ZVTkMKK0dTVF9QQURfRklYQVRFQ0FQU0ZVTkMKK0dTVF9QQURfQUNDRVBUQ0FQU0ZVTkMKKworR1NUX1BBRF9JU19BQ1RJVkUKK0dTVF9QQURfQUNUSVZBVEVGVU5DCitHU1RfUEFEX0FDVElWQVRFUFVMTEZVTkMKK0dTVF9QQURfQUNUSVZBVEVQVVNIRlVOQworCitHU1RfUEFEX0NIQUlORlVOQworR1NUX1BBRF9DSEFJTkxJU1RGVU5DCitHU1RfUEFEX0VWRU5URlVOQworR1NUX1BBRF9HRVRSQU5HRUZVTkMKK0dTVF9QQURfSVRFUklOVExJTktGVU5DCitHU1RfUEFEX0lTX0ZMVVNISU5HCitHU1RfUEFEX0xJTktGVU5DCitHU1RfUEFEX1VOTElOS0ZVTkMKK0dTVF9QQURfUVVFUllGVU5DCitHU1RfUEFEX1FVRVJZVFlQRUZVTkMKKworR1NUX1BBRF9QUkVST0xMX0JST0FEQ0FTVAorR1NUX1BBRF9HRVRfUFJFUk9MTF9DT05ECitHU1RfUEFEX0dFVF9QUkVST0xMX0xPQ0sKK0dTVF9QQURfUFJFUk9MTF9MT0NLCitHU1RfUEFEX1BSRVJPTExfU0lHTkFMCitHU1RfUEFEX1BSRVJPTExfVElNRURfV0FJVAorR1NUX1BBRF9QUkVST0xMX1RSWUxPQ0sKK0dTVF9QQURfUFJFUk9MTF9VTkxPQ0sKK0dTVF9QQURfUFJFUk9MTF9XQUlUCis8L1NFQ1RJT04+CisKKworPFNFQ1RJT04+Cis8RklMRT5nc3RwYWR0ZW1wbGF0ZTwvRklMRT4KKzxUSVRMRT5Hc3RQYWRUZW1wbGF0ZTwvVElUTEU+CitHc3RTdGF0aWNQYWRUZW1wbGF0ZQorR1NUX1NUQVRJQ19QQURfVEVNUExBVEUKK2dzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldAorZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHMKK0dzdFBhZFRlbXBsYXRlCitHc3RQYWRUZW1wbGF0ZUZsYWdzCitHc3RQYWRQcmVzZW5jZQorR1NUX1BBRF9URU1QTEFURV9OQU1FX1RFTVBMQVRFCitHU1RfUEFEX1RFTVBMQVRFX0RJUkVDVElPTgorR1NUX1BBRF9URU1QTEFURV9QUkVTRU5DRQorR1NUX1BBRF9URU1QTEFURV9DQVBTCitHU1RfUEFEX1RFTVBMQVRFX0lTX0ZJWEVECitnc3RfcGFkX3RlbXBsYXRlX25ldworZ3N0X3BhZF90ZW1wbGF0ZV9nZXRfY2FwcworCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK0dzdFBhZFRlbXBsYXRlQ2xhc3MKK0dTVF9QQURfVEVNUExBVEUKK0dTVF9JU19QQURfVEVNUExBVEUKK0dTVF9QQURfVEVNUExBVEVfQ0xBU1MKK0dTVF9JU19QQURfVEVNUExBVEVfQ0xBU1MKK0dTVF9UWVBFX1BBRF9URU1QTEFURQorR1NUX1RZUEVfUEFEX1RFTVBMQVRFX0ZMQUdTCitHU1RfVFlQRV9TVEFUSUNfQ0FQUworR1NUX1RZUEVfU1RBVElDX1BBRF9URU1QTEFURQorCis8U1VCU0VDVElPTiBQcml2YXRlPgorZ3N0X3BhZF90ZW1wbGF0ZV9nZXRfdHlwZQorZ3N0X3BhZF90ZW1wbGF0ZV9mbGFnc19nZXRfdHlwZQorZ3N0X3BhZF90ZW1wbGF0ZV9wYWRfY3JlYXRlZAorZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X3R5cGUKK2dzdF9zdGF0aWNfY2Fwc19nZXRfdHlwZQorCis8L1NFQ1RJT04+CisKKworPFNFQ1RJT04+Cis8RklMRT5nc3RwYXJhbXNwZWM8L0ZJTEU+Cis8VElUTEU+R3N0UGFyYW1TcGVjPC9USVRMRT4KKworR1NUX1BBUkFNX0NPTlRST0xMQUJMRQorR1NUX1BBUkFNX1VTRVJfU0hJRlQKK0dTVF9QQVJBTV9NVVRBQkxFX1BBVVNFRAorR1NUX1BBUkFNX01VVEFCTEVfUExBWUlORworR1NUX1BBUkFNX01VVEFCTEVfUkVBRFkKKworPFNVQlNFQ1RJT04gcGFyYW1zcGVjZnJhY3Rpb24+CitHc3RQYXJhbVNwZWNGcmFjdGlvbgorZ3N0X3BhcmFtX3NwZWNfZnJhY3Rpb24KKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitHU1RfSVNfUEFSQU1fU1BFQ19GUkFDVElPTgorR1NUX1BBUkFNX1NQRUNfRlJBQ1RJT04KK0dTVF9UWVBFX1BBUkFNX0ZSQUNUSU9OCitnc3RfcGFyYW1fc3BlY19mcmFjdGlvbl9nZXRfdHlwZQorCis8L1NFQ1RJT04+CisKKworPFNFQ1RJT04+Cis8RklMRT5nc3RwYXJzZTwvRklMRT4KKzxUSVRMRT5Hc3RQYXJzZTwvVElUTEU+Citnc3RfcGFyc2VfZXJyb3JfcXVhcmsKK0dTVF9QQVJTRV9FUlJPUgorR3N0UGFyc2VFcnJvcgorR3N0UGFyc2VDb250ZXh0CitHc3RQYXJzZUZsYWdzCitnc3RfcGFyc2VfbGF1bmNoCitnc3RfcGFyc2VfbGF1bmNoX2Z1bGwKK2dzdF9wYXJzZV9sYXVuY2h2Citnc3RfcGFyc2VfbGF1bmNodl9mdWxsCitnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb24KK2dzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbl9mdWxsCis8U1VCU0VDVElPTj4KK2dzdF9wYXJzZV9jb250ZXh0X25ldworZ3N0X3BhcnNlX2NvbnRleHRfZnJlZQorZ3N0X3BhcnNlX2NvbnRleHRfZ2V0X21pc3NpbmdfZWxlbWVudHMKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR1NUX1RZUEVfUEFSU0VfRVJST1IKK0dTVF9UWVBFX1BBUlNFX0ZMQUdTCitHU1RfVFlQRV9QQVJTRV9DT05URVhUCis8U1VCU0VDVElPTiBQcml2YXRlPgorZ3N0X3BhcnNlX2NvbnRleHRfZ2V0X3R5cGUKK2dzdF9wYXJzZV9lcnJvcl9nZXRfdHlwZQorZ3N0X3BhcnNlX2ZsYWdzX2dldF90eXBlCis8L1NFQ1RJT04+CisKKworPFNFQ1RJT04+Cis8RklMRT5nc3RwaXBlbGluZTwvRklMRT4KKzxUSVRMRT5Hc3RQaXBlbGluZTwvVElUTEU+CitHc3RQaXBlbGluZQorR3N0UGlwZWxpbmVGbGFncworCitnc3RfcGlwZWxpbmVfbmV3CisKK2dzdF9waXBlbGluZV9nZXRfYnVzCisKK2dzdF9waXBlbGluZV9zZXRfY2xvY2sKK2dzdF9waXBlbGluZV9nZXRfY2xvY2sKKworZ3N0X3BpcGVsaW5lX3VzZV9jbG9jaworZ3N0X3BpcGVsaW5lX2F1dG9fY2xvY2sKKworZ3N0X3BpcGVsaW5lX3NldF9hdXRvX2ZsdXNoX2J1cworZ3N0X3BpcGVsaW5lX2dldF9hdXRvX2ZsdXNoX2J1cworCitnc3RfcGlwZWxpbmVfc2V0X2RlbGF5Citnc3RfcGlwZWxpbmVfZ2V0X2RlbGF5CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR3N0UGlwZWxpbmVDbGFzcworR1NUX1BJUEVMSU5FCitHU1RfSVNfUElQRUxJTkUKK0dTVF9QSVBFTElORV9DTEFTUworR1NUX0lTX1BJUEVMSU5FX0NMQVNTCitHU1RfUElQRUxJTkVfR0VUX0NMQVNTCitHU1RfVFlQRV9QSVBFTElORQorR1NUX1RZUEVfUElQRUxJTkVfRkxBR1MKK0dTVF9QSVBFTElORV9DQVNUCis8U1VCU0VDVElPTiBQcml2YXRlPgorR3N0UGlwZWxpbmVQcml2YXRlCitnc3RfcGlwZWxpbmVfZ2V0X3R5cGUKK2dzdF9waXBlbGluZV9mbGFnc19nZXRfdHlwZQorPC9TRUNUSU9OPgorCisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0cGx1Z2luPC9GSUxFPgorPFRJVExFPkdzdFBsdWdpbjwvVElUTEU+Citnc3RfcGx1Z2luX2Vycm9yX3F1YXJrCitHU1RfUExVR0lOX0VSUk9SCitHc3RQbHVnaW5FcnJvcgorR3N0UGx1Z2luCitHc3RQbHVnaW5EZXNjCitHc3RQbHVnaW5Jbml0RnVuYworR3N0UGx1Z2luSW5pdEZ1bGxGdW5jCitHU1RfUExVR0lOX0RFRklORQorR1NUX0xJQ0VOU0VfVU5LTk9XTgorR3N0UGx1Z2luRmlsdGVyCitnc3RfcGx1Z2luX2dldF9uYW1lCitnc3RfcGx1Z2luX2dldF9kZXNjcmlwdGlvbgorZ3N0X3BsdWdpbl9nZXRfZmlsZW5hbWUKK2dzdF9wbHVnaW5fZ2V0X2xpY2Vuc2UKK2dzdF9wbHVnaW5fZ2V0X3BhY2thZ2UKK2dzdF9wbHVnaW5fZ2V0X29yaWdpbgorZ3N0X3BsdWdpbl9nZXRfc291cmNlCitnc3RfcGx1Z2luX2dldF92ZXJzaW9uCitnc3RfcGx1Z2luX2dldF9tb2R1bGUKK2dzdF9wbHVnaW5faXNfbG9hZGVkCitnc3RfcGx1Z2luX2dldF9jYWNoZV9kYXRhCitnc3RfcGx1Z2luX3NldF9jYWNoZV9kYXRhCitnc3RfcGx1Z2luX25hbWVfZmlsdGVyCitnc3RfcGx1Z2luX2xvYWRfZmlsZQorZ3N0X3BsdWdpbl9sb2FkCitnc3RfcGx1Z2luX2xvYWRfYnlfbmFtZQorZ3N0X3BsdWdpbl9saXN0X2ZyZWUKK2dzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljCitnc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpY19mdWxsCis8U1VCU0VDVElPTj4KK0dzdFBsdWdpbkZsYWdzCitHc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3MKK2dzdF9wbHVnaW5fYWRkX2RlcGVuZGVuY3kKK2dzdF9wbHVnaW5fYWRkX2RlcGVuZGVuY3lfc2ltcGxlCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK0dzdFBsdWdpbkNsYXNzCitHU1RfUExVR0lOCitHU1RfUExVR0lOX0NBU1QKK0dTVF9QTFVHSU5fQ0xBU1MKK0dTVF9QTFVHSU5fR0VUX0NMQVNTCitHU1RfVFlQRV9QTFVHSU4KK0dTVF9UWVBFX1BMVUdJTl9FUlJPUgorR1NUX0lTX1BMVUdJTgorR1NUX0lTX1BMVUdJTl9DTEFTUworR1NUX1RZUEVfUExVR0lOX0ZMQUdTCitHU1RfVFlQRV9QTFVHSU5fREVQRU5ERU5DWV9GTEFHUworR3N0UGx1Z2luUHJpdmF0ZQorZ3N0X3BsdWdpbl9kZXBlbmRlbmN5X2ZsYWdzX2dldF90eXBlCis8U1VCU0VDVElPTiBQcml2YXRlPgorZ3N0X3BsdWdpbl9nZXRfdHlwZQorPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK2dzdF9wbHVnaW5fZXJyb3JfZ2V0X3R5cGUKK2dzdF9wbHVnaW5fZmxhZ3NfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworCis8U0VDVElPTj4KKzxGSUxFPmdzdHBsdWdpbmZlYXR1cmU8L0ZJTEU+Cis8VElUTEU+R3N0UGx1Z2luRmVhdHVyZTwvVElUTEU+CitHc3RQbHVnaW5GZWF0dXJlCitHc3RUeXBlTmFtZURhdGEKK0dzdFBsdWdpbkZlYXR1cmVGaWx0ZXIKK0dzdFJhbmsKKworZ3N0X3BsdWdpbl9mZWF0dXJlX3R5cGVfbmFtZV9maWx0ZXIKK2dzdF9wbHVnaW5fZmVhdHVyZV9zZXRfcmFuaworZ3N0X3BsdWdpbl9mZWF0dXJlX3NldF9uYW1lCitnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3JhbmsKK2dzdF9wbHVnaW5fZmVhdHVyZV9nZXRfbmFtZQorZ3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQKK2dzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2NvcHkKK2dzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUKK0dTVF9QTFVHSU5fRkVBVFVSRV9MSVNUX0RFQlVHCitnc3RfcGx1Z2luX2ZlYXR1cmVfY2hlY2tfdmVyc2lvbgorZ3N0X3BsdWdpbl9mZWF0dXJlX3JhbmtfY29tcGFyZV9mdW5jCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK0dzdFBsdWdpbkZlYXR1cmVDbGFzcworR1NUX1BMVUdJTl9GRUFUVVJFCitHU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVAorR1NUX0lTX1BMVUdJTl9GRUFUVVJFCitHU1RfUExVR0lOX0ZFQVRVUkVfQ0xBU1MKK0dTVF9JU19QTFVHSU5fRkVBVFVSRV9DTEFTUworR1NUX1BMVUdJTl9GRUFUVVJFX0dFVF9DTEFTUworR1NUX1RZUEVfUExVR0lOX0ZFQVRVUkUKK0dTVF9UWVBFX1JBTksKKzxTVUJTRUNUSU9OIFByaXZhdGU+Citnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3R5cGUKK2dzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2RlYnVnCitnc3RfcmFua19nZXRfdHlwZQorPC9TRUNUSU9OPgorCisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0cG9sbDwvRklMRT4KKzxUSVRMRT5Hc3RQb2xsPC9USVRMRT4KK0dzdFBvbGwKK0dzdFBvbGxGRAorR1NUX1BPTExfRkRfSU5JVAorZ3N0X3BvbGxfYWRkX2ZkCitnc3RfcG9sbF9mZF9jYW5fcmVhZAorZ3N0X3BvbGxfZmRfY2FuX3dyaXRlCitnc3RfcG9sbF9mZF9jdGxfcmVhZAorZ3N0X3BvbGxfZmRfY3RsX3dyaXRlCitnc3RfcG9sbF9mZF9oYXNfY2xvc2VkCitnc3RfcG9sbF9mZF9oYXNfZXJyb3IKK2dzdF9wb2xsX2ZkX2lnbm9yZWQKK2dzdF9wb2xsX2ZkX2luaXQKK2dzdF9wb2xsX2ZyZWUKK2dzdF9wb2xsX25ldworZ3N0X3BvbGxfbmV3X3RpbWVyCitnc3RfcG9sbF9nZXRfcmVhZF9ncG9sbGZkCitnc3RfcG9sbF9yZW1vdmVfZmQKK2dzdF9wb2xsX3Jlc3RhcnQKK2dzdF9wb2xsX3NldF9jb250cm9sbGFibGUKK2dzdF9wb2xsX3NldF9mbHVzaGluZworZ3N0X3BvbGxfd2FpdAorZ3N0X3BvbGxfcmVhZF9jb250cm9sCitnc3RfcG9sbF93cml0ZV9jb250cm9sCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0cHJlc2V0PC9GSUxFPgorPFRJVExFPkdzdFByZXNldDwvVElUTEU+CitHc3RQcmVzZXQKK0dzdFByZXNldEludGVyZmFjZQorZ3N0X3ByZXNldF9nZXRfcHJlc2V0X25hbWVzCitnc3RfcHJlc2V0X2dldF9wcm9wZXJ0eV9uYW1lcworZ3N0X3ByZXNldF9sb2FkX3ByZXNldAorZ3N0X3ByZXNldF9zYXZlX3ByZXNldAorZ3N0X3ByZXNldF9yZW5hbWVfcHJlc2V0Citnc3RfcHJlc2V0X2RlbGV0ZV9wcmVzZXQKK2dzdF9wcmVzZXRfc2V0X21ldGEKK2dzdF9wcmVzZXRfZ2V0X21ldGEKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR1NUX1BSRVNFVAorR1NUX0lTX1BSRVNFVAorR1NUX1RZUEVfUFJFU0VUCitHU1RfUFJFU0VUX0dFVF9JTlRFUkZBQ0UKK2dzdF9wcmVzZXRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5nc3RxdWVyeTwvRklMRT4KKzxUSVRMRT5Hc3RRdWVyeTwvVElUTEU+CitHc3RRdWVyeQorR3N0UXVlcnlUeXBlCitHU1RfUVVFUllfVFlQRV9OQU1FCitHc3RRdWVyeVR5cGVEZWZpbml0aW9uCisKK2dzdF9xdWVyeV90eXBlX2dldF9uYW1lCitnc3RfcXVlcnlfdHlwZV90b19xdWFyaworZ3N0X3F1ZXJ5X3R5cGVfcmVnaXN0ZXIKK2dzdF9xdWVyeV90eXBlX2dldF9ieV9uaWNrCitnc3RfcXVlcnlfdHlwZXNfY29udGFpbnMKK2dzdF9xdWVyeV90eXBlX2dldF9kZXRhaWxzCitnc3RfcXVlcnlfdHlwZV9pdGVyYXRlX2RlZmluaXRpb25zCisKK2dzdF9xdWVyeV9yZWYKK2dzdF9xdWVyeV91bnJlZgorZ3N0X3F1ZXJ5X2NvcHkKK2dzdF9xdWVyeV9tYWtlX3dyaXRhYmxlCitnc3RfcXVlcnlfaXNfd3JpdGFibGUKK2dzdF9xdWVyeV9yZXBsYWNlCitnc3RfcXVlcnlfd3JpdGFibGVfc3RydWN0dXJlCisKK2dzdF9xdWVyeV9uZXdfY3VzdG9tCitnc3RfcXVlcnlfZ2V0X3N0cnVjdHVyZQorCitnc3RfcXVlcnlfbmV3X2NvbnZlcnQKK2dzdF9xdWVyeV9zZXRfY29udmVydAorZ3N0X3F1ZXJ5X3BhcnNlX2NvbnZlcnQKKworZ3N0X3F1ZXJ5X25ld19wb3NpdGlvbgorZ3N0X3F1ZXJ5X3NldF9wb3NpdGlvbgorZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uCisKK2dzdF9xdWVyeV9uZXdfZHVyYXRpb24KK2dzdF9xdWVyeV9zZXRfZHVyYXRpb24KK2dzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbgorCitnc3RfcXVlcnlfbmV3X2xhdGVuY3kKK2dzdF9xdWVyeV9wYXJzZV9sYXRlbmN5Citnc3RfcXVlcnlfc2V0X2xhdGVuY3kKKworZ3N0X3F1ZXJ5X25ld19zZWVraW5nCitnc3RfcXVlcnlfc2V0X3NlZWtpbmcKK2dzdF9xdWVyeV9wYXJzZV9zZWVraW5nCisKK2dzdF9xdWVyeV9uZXdfZm9ybWF0cworZ3N0X3F1ZXJ5X3NldF9mb3JtYXRzCitnc3RfcXVlcnlfc2V0X2Zvcm1hdHN2Citnc3RfcXVlcnlfcGFyc2Vfbl9mb3JtYXRzCitnc3RfcXVlcnlfcGFyc2VfbnRoX2Zvcm1hdAorCitnc3RfcXVlcnlfbmV3X3NlZ21lbnQKK2dzdF9xdWVyeV9zZXRfc2VnbWVudAorZ3N0X3F1ZXJ5X3BhcnNlX3NlZ21lbnQKKworR3N0QnVmZmVyaW5nTW9kZQorZ3N0X3F1ZXJ5X25ld19idWZmZXJpbmcKK2dzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3BlcmNlbnQKK2dzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcGVyY2VudAorZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfc3RhdHMKK2dzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfc3RhdHMKK2dzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3JhbmdlCitnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3JhbmdlCitnc3RfcXVlcnlfYWRkX2J1ZmZlcmluZ19yYW5nZQorZ3N0X3F1ZXJ5X2dldF9uX2J1ZmZlcmluZ19yYW5nZXMKK2dzdF9xdWVyeV9wYXJzZV9udGhfYnVmZmVyaW5nX3JhbmdlCisKK2dzdF9xdWVyeV9uZXdfdXJpCitnc3RfcXVlcnlfcGFyc2VfdXJpCitnc3RfcXVlcnlfc2V0X3VyaQorCitnc3RfcXVlcnlfbmV3X2FsbG9jYXRpb24KK2dzdF9xdWVyeV9wYXJzZV9hbGxvY2F0aW9uCitnc3RfcXVlcnlfcGFyc2VfYWxsb2NhdGlvbl9wYXJhbXMKK2dzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9tZW1vcnkKK2dzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9tZXRhCitnc3RfcXVlcnlfc2V0X2FsbG9jYXRpb25fcGFyYW1zCitnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fbWVtb3J5Citnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fbWV0YQorZ3N0X3F1ZXJ5X2hhc19hbGxvY2F0aW9uX21ldGEKK2dzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX21lbW9yaWVzCitnc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9tZXRhcworCitnc3RfcXVlcnlfbmV3X3NjaGVkdWxpbmcKK2dzdF9xdWVyeV9wYXJzZV9zY2hlZHVsaW5nCitnc3RfcXVlcnlfc2V0X3NjaGVkdWxpbmcKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR3N0UXVlcnlDbGFzcworR1NUX1FVRVJZCitHU1RfUVVFUllfQ0FTVAorR1NUX0lTX1FVRVJZCitHU1RfUVVFUllfQ0xBU1MKK0dTVF9JU19RVUVSWV9DTEFTUworR1NUX1RZUEVfUVVFUlkKK0dTVF9UWVBFX1FVRVJZX1RZUEUKK0dTVF9RVUVSWV9HRVRfQ0xBU1MKK0dTVF9RVUVSWV9UWVBFCitHU1RfVFlQRV9CVUZGRVJJTkdfTU9ERQorPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK2dzdF9xdWVyeV9nZXRfdHlwZQorZ3N0X3F1ZXJ5X3R5cGVfZ2V0X3R5cGUKK2dzdF9idWZmZXJpbmdfbW9kZV9nZXRfdHlwZQorPC9TRUNUSU9OPgorCisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0cmVnaXN0cnk8L0ZJTEU+Cis8VElUTEU+R3N0UmVnaXN0cnk8L1RJVExFPgorR3N0UmVnaXN0cnkKK2dzdF9yZWdpc3RyeV9nZXRfZGVmYXVsdAorZ3N0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3QKK2dzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2Nvb2tpZQorZ3N0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3RfYnlfcGx1Z2luCitnc3RfcmVnaXN0cnlfZ2V0X3BhdGhfbGlzdAorZ3N0X3JlZ2lzdHJ5X2dldF9wbHVnaW5fbGlzdAorZ3N0X3JlZ2lzdHJ5X2FkZF9wbHVnaW4KK2dzdF9yZWdpc3RyeV9yZW1vdmVfcGx1Z2luCitnc3RfcmVnaXN0cnlfcGx1Z2luX2ZpbHRlcgorZ3N0X3JlZ2lzdHJ5X2ZlYXR1cmVfZmlsdGVyCitnc3RfcmVnaXN0cnlfZmluZF9wbHVnaW4KK2dzdF9yZWdpc3RyeV9maW5kX2ZlYXR1cmUKK2dzdF9yZWdpc3RyeV9sb29rdXBfZmVhdHVyZQorZ3N0X3JlZ2lzdHJ5X2FkZF9wYXRoCitnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoCitnc3RfcmVnaXN0cnlfbG9va3VwCitnc3RfcmVnaXN0cnlfcmVtb3ZlX2ZlYXR1cmUKK2dzdF9yZWdpc3RyeV9hZGRfZmVhdHVyZQorPFNVQlNFQ1RJT04gRGVmYXVsdCBSZWdpc3RyeT4KK2dzdF9kZWZhdWx0X3JlZ2lzdHJ5X2NoZWNrX2ZlYXR1cmVfdmVyc2lvbgorZ3N0X2RlZmF1bHRfcmVnaXN0cnlfZ2V0X3BhdGhfbGlzdAorZ3N0X2RlZmF1bHRfcmVnaXN0cnlfYWRkX3BsdWdpbgorZ3N0X2RlZmF1bHRfcmVnaXN0cnlfYWRkX3BhdGgKK2dzdF9kZWZhdWx0X3JlZ2lzdHJ5X2ZpbmRfcGx1Z2luCitnc3RfZGVmYXVsdF9yZWdpc3RyeV9maW5kX2ZlYXR1cmUKK2dzdF9kZWZhdWx0X3JlZ2lzdHJ5X2dldF9wbHVnaW5fbGlzdAorZ3N0X2RlZmF1bHRfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9jb29raWUKK2dzdF9kZWZhdWx0X3JlZ2lzdHJ5X2ZlYXR1cmVfZmlsdGVyCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK0dzdFJlZ2lzdHJ5Q2xhc3MKK0dTVF9SRUdJU1RSWQorR1NUX0lTX1JFR0lTVFJZCitHU1RfUkVHSVNUUllfQ0xBU1MKK0dTVF9JU19SRUdJU1RSWV9DTEFTUworR1NUX1JFR0lTVFJZX0dFVF9DTEFTUworR1NUX1RZUEVfUkVHSVNUUlkKKzxTVUJTRUNUSU9OIFByaXZhdGU+CitHU1RfTUFHSUNfQklOQVJZX1JFR0lTVFJZX0xFTgorR1NUX01BR0lDX0JJTkFSWV9SRUdJU1RSWV9TVFIKK0dTVF9NQUdJQ19CSU5BUllfVkVSU0lPTl9TVFIKK0dTVF9NQUdJQ19CSU5BUllfVkVSU0lPTl9MRU4KK2dzdF9yZWdpc3RyeV9nZXRfdHlwZQorR3N0UmVnaXN0cnlQcml2YXRlCis8L1NFQ1RJT04+CisKKworPFNFQ1RJT04+Cis8RklMRT5nc3RzZWdtZW50PC9GSUxFPgorPFRJVExFPkdzdFNlZ21lbnQ8L1RJVExFPgorR3N0U2VnbWVudAorR3N0U2VnbWVudEZsYWdzCitnc3Rfc2VnbWVudF9jbGlwCitnc3Rfc2VnbWVudF9pbml0Citnc3Rfc2VnbWVudF9uZXcKK2dzdF9zZWdtZW50X2NvcHkKK2dzdF9zZWdtZW50X2ZyZWUKK2dzdF9zZWdtZW50X2RvX3NlZWsKK2dzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZQorZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUKK2dzdF9zZWdtZW50X3RvX3Bvc2l0aW9uCitnc3Rfc2VnbWVudF9zZXRfcnVubmluZ190aW1lCitnc3Rfc2VnbWVudF9jb3B5X2ludG8KKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR1NUX1RZUEVfU0VHTUVOVAorR1NUX1RZUEVfU0VHTUVOVF9GTEFHUworZ3N0X3NlZ21lbnRfZ2V0X3R5cGUKK2dzdF9zZWdtZW50X2ZsYWdzX2dldF90eXBlCis8U1VCU0VDVElPTiBQcml2YXRlPgorPC9TRUNUSU9OPgorCisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0c3RydWN0dXJlPC9GSUxFPgorPFRJVExFPkdzdFN0cnVjdHVyZTwvVElUTEU+CitHc3RTdHJ1Y3R1cmUKK0dzdFN0cnVjdHVyZUZvcmVhY2hGdW5jCitHc3RTdHJ1Y3R1cmVNYXBGdW5jCitnc3Rfc3RydWN0dXJlX2VtcHR5X25ldworZ3N0X3N0cnVjdHVyZV9pZF9lbXB0eV9uZXcKK2dzdF9zdHJ1Y3R1cmVfbmV3Citnc3Rfc3RydWN0dXJlX25ld192YWxpc3QKK2dzdF9zdHJ1Y3R1cmVfaWRfbmV3Citnc3Rfc3RydWN0dXJlX2NvcHkKK2dzdF9zdHJ1Y3R1cmVfZnJlZQorZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZQorZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZQorZ3N0X3N0cnVjdHVyZV9zZXRfbmFtZQorZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZV9pZAorZ3N0X3N0cnVjdHVyZV9pZF9nZXQKK2dzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbGlzdAorZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUKK2dzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlCitnc3Rfc3RydWN0dXJlX2lkX3Rha2VfdmFsdWUKK2dzdF9zdHJ1Y3R1cmVfZ2V0Citnc3Rfc3RydWN0dXJlX2dldF92YWxpc3QKK2dzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlCitnc3Rfc3RydWN0dXJlX3NldF92YWx1ZQorZ3N0X3N0cnVjdHVyZV90YWtlX3ZhbHVlCitnc3Rfc3RydWN0dXJlX3NldAorZ3N0X3N0cnVjdHVyZV9zZXRfdmFsaXN0Citnc3Rfc3RydWN0dXJlX2lkX3NldAorZ3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsaXN0Citnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZAorZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzCitnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZHNfdmFsaXN0Citnc3Rfc3RydWN0dXJlX3JlbW92ZV9hbGxfZmllbGRzCitnc3Rfc3RydWN0dXJlX2dldF9maWVsZF90eXBlCitnc3Rfc3RydWN0dXJlX2ZvcmVhY2gKK2dzdF9zdHJ1Y3R1cmVfbl9maWVsZHMKK2dzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkCitnc3Rfc3RydWN0dXJlX2hhc19maWVsZF90eXBlZAorZ3N0X3N0cnVjdHVyZV9pc19lcXVhbAorZ3N0X3N0cnVjdHVyZV9pc19zdWJzZXQKK2dzdF9zdHJ1Y3R1cmVfY2FuX2ludGVyc2VjdAorZ3N0X3N0cnVjdHVyZV9pbnRlcnNlY3QKK2dzdF9zdHJ1Y3R1cmVfaWRfaGFzX2ZpZWxkCitnc3Rfc3RydWN0dXJlX2lkX2hhc19maWVsZF90eXBlZAorZ3N0X3N0cnVjdHVyZV9nZXRfYm9vbGVhbgorZ3N0X3N0cnVjdHVyZV9nZXRfaW50Citnc3Rfc3RydWN0dXJlX2dldF91aW50Citnc3Rfc3RydWN0dXJlX2dldF9kb3VibGUKK2dzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZworZ3N0X3N0cnVjdHVyZV9nZXRfZGF0ZQorZ3N0X3N0cnVjdHVyZV9nZXRfZGF0ZV90aW1lCitnc3Rfc3RydWN0dXJlX2dldF9jbG9ja190aW1lCitnc3Rfc3RydWN0dXJlX2dldF9lbnVtCitnc3Rfc3RydWN0dXJlX2dldF9mcmFjdGlvbgorZ3N0X3N0cnVjdHVyZV9tYXBfaW5fcGxhY2UKK2dzdF9zdHJ1Y3R1cmVfbnRoX2ZpZWxkX25hbWUKK2dzdF9zdHJ1Y3R1cmVfc2V0X3BhcmVudF9yZWZjb3VudAorZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcKK2dzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcKK2dzdF9zdHJ1Y3R1cmVfZml4YXRlCitnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZAorZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9pbnQKK2dzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfZG91YmxlCitnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ZyYWN0aW9uCitnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9ib29sZWFuCitnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9zdHJpbmcKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR1NUX1NUUlVDVFVSRQorR1NUX1NUUlVDVFVSRV9DQVNUCitHU1RfSVNfU1RSVUNUVVJFCitHU1RfVFlQRV9TVFJVQ1RVUkUKKzxTVUJTRUNUSU9OIFByaXZhdGU+Citnc3Rfc3RydWN0dXJlX2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0c3lzdGVtY2xvY2s8L0ZJTEU+Cis8VElUTEU+R3N0U3lzdGVtQ2xvY2s8L1RJVExFPgorR3N0Q2xvY2tUeXBlCitHc3RTeXN0ZW1DbG9jaworZ3N0X3N5c3RlbV9jbG9ja19vYnRhaW4KKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR3N0U3lzdGVtQ2xvY2tDbGFzcworR3N0U3lzdGVtQ2xvY2tQcml2YXRlCitHU1RfU1lTVEVNX0NMT0NLCitHU1RfSVNfU1lTVEVNX0NMT0NLCitnc3Rfc3lzdGVtX2Nsb2NrX2dldF90eXBlCitHU1RfU1lTVEVNX0NMT0NLX0NMQVNTCitHU1RfSVNfU1lTVEVNX0NMT0NLX0NMQVNTCitHU1RfU1lTVEVNX0NMT0NLX0dFVF9DTEFTUworR1NUX1RZUEVfU1lTVEVNX0NMT0NLCitHU1RfU1lTVEVNX0NMT0NLX0NBU1QKK0dTVF9UWVBFX0NMT0NLX1RZUEUKK2dzdF9jbG9ja190eXBlX2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0dGFnbGlzdDwvRklMRT4KKzxUSVRMRT5Hc3RUYWdMaXN0PC9USVRMRT4KK0dzdFRhZ0xpc3QKK0dzdFRhZ01lcmdlTW9kZQorR3N0VGFnRmxhZworR3N0VGFnRm9yZWFjaEZ1bmMKK0dzdFRhZ01lcmdlRnVuYworCitHU1RfVEFHX1RJVExFCitHU1RfVEFHX1RJVExFX1NPUlROQU1FCitHU1RfVEFHX0FSVElTVAorR1NUX1RBR19BUlRJU1RfU09SVE5BTUUKK0dTVF9UQUdfQUxCVU0KK0dTVF9UQUdfQUxCVU1fU09SVE5BTUUKK0dTVF9UQUdfQUxCVU1fQVJUSVNUCitHU1RfVEFHX0FMQlVNX0FSVElTVF9TT1JUTkFNRQorR1NUX1RBR19EQVRFCitHU1RfVEFHX0RBVEVfVElNRQorR1NUX1RBR19HRU5SRQorR1NUX1RBR19DT01NRU5UCitHU1RfVEFHX0VYVEVOREVEX0NPTU1FTlQKK0dTVF9UQUdfVFJBQ0tfTlVNQkVSCitHU1RfVEFHX1RSQUNLX0NPVU5UCitHU1RfVEFHX0FMQlVNX1ZPTFVNRV9OVU1CRVIKK0dTVF9UQUdfQUxCVU1fVk9MVU1FX0NPVU5UCitHU1RfVEFHX0xPQ0FUSU9OCitHU1RfVEFHX0hPTUVQQUdFCitHU1RfVEFHX0RFU0NSSVBUSU9OCitHU1RfVEFHX1ZFUlNJT04KK0dTVF9UQUdfSVNSQworR1NUX1RBR19PUkdBTklaQVRJT04KK0dTVF9UQUdfQ09QWVJJR0hUCitHU1RfVEFHX0NPUFlSSUdIVF9VUkkKK0dTVF9UQUdfRU5DT0RFRF9CWQorR1NUX1RBR19DT01QT1NFUgorR1NUX1RBR19DT05UQUNUCitHU1RfVEFHX0xJQ0VOU0UKK0dTVF9UQUdfTElDRU5TRV9VUkkKK0dTVF9UQUdfUEVSRk9STUVSCitHU1RfVEFHX0RVUkFUSU9OCitHU1RfVEFHX0NPREVDCitHU1RfVEFHX1ZJREVPX0NPREVDCitHU1RfVEFHX0FVRElPX0NPREVDCitHU1RfVEFHX1NVQlRJVExFX0NPREVDCitHU1RfVEFHX0NPTlRBSU5FUl9GT1JNQVQKK0dTVF9UQUdfQklUUkFURQorR1NUX1RBR19OT01JTkFMX0JJVFJBVEUKK0dTVF9UQUdfTUlOSU1VTV9CSVRSQVRFCitHU1RfVEFHX01BWElNVU1fQklUUkFURQorR1NUX1RBR19TRVJJQUwKK0dTVF9UQUdfRU5DT0RFUgorR1NUX1RBR19FTkNPREVSX1ZFUlNJT04KK0dTVF9UQUdfVFJBQ0tfR0FJTgorR1NUX1RBR19UUkFDS19QRUFLCitHU1RfVEFHX0FMQlVNX0dBSU4KK0dTVF9UQUdfQUxCVU1fUEVBSworR1NUX1RBR19SRUZFUkVOQ0VfTEVWRUwKK0dTVF9UQUdfTEFOR1VBR0VfQ09ERQorR1NUX1RBR19JTUFHRQorR1NUX1RBR19QUkVWSUVXX0lNQUdFCitHU1RfVEFHX0FUVEFDSE1FTlQKK0dTVF9UQUdfQkVBVFNfUEVSX01JTlVURQorR1NUX1RBR19LRVlXT1JEUworR1NUX1RBR19HRU9fTE9DQVRJT05fTkFNRQorR1NUX1RBR19HRU9fTE9DQVRJT05fTEFUSVRVREUKK0dTVF9UQUdfR0VPX0xPQ0FUSU9OX0xPTkdJVFVERQorR1NUX1RBR19HRU9fTE9DQVRJT05fRUxFVkFUSU9OCitHU1RfVEFHX0dFT19MT0NBVElPTl9DSVRZCitHU1RfVEFHX0dFT19MT0NBVElPTl9DT1VOVFJZCitHU1RfVEFHX0dFT19MT0NBVElPTl9TVUJMT0NBVElPTgorR1NUX1RBR19HRU9fTE9DQVRJT05fSE9SSVpPTlRBTF9FUlJPUgorR1NUX1RBR19HRU9fTE9DQVRJT05fTU9WRU1FTlRfRElSRUNUSU9OCitHU1RfVEFHX0dFT19MT0NBVElPTl9NT1ZFTUVOVF9TUEVFRAorR1NUX1RBR19HRU9fTE9DQVRJT05fQ0FQVFVSRV9ESVJFQ1RJT04KK0dTVF9UQUdfU0hPV19OQU1FCitHU1RfVEFHX1NIT1dfU09SVE5BTUUKK0dTVF9UQUdfU0hPV19FUElTT0RFX05VTUJFUgorR1NUX1RBR19TSE9XX1NFQVNPTl9OVU1CRVIKK0dTVF9UQUdfTFlSSUNTCitHU1RfVEFHX0NPTVBPU0VSX1NPUlROQU1FCitHU1RfVEFHX0dST1VQSU5HCitHU1RfVEFHX1VTRVJfUkFUSU5HCitHU1RfVEFHX0RFVklDRV9NQU5VRkFDVFVSRVIKK0dTVF9UQUdfREVWSUNFX01PREVMCitHU1RfVEFHX0FQUExJQ0FUSU9OX05BTUUKK0dTVF9UQUdfQVBQTElDQVRJT05fREFUQQorR1NUX1RBR19JTUFHRV9PUklFTlRBVElPTgorCitnc3RfdGFnX3JlZ2lzdGVyCitnc3RfdGFnX21lcmdlX3VzZV9maXJzdAorZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEKK2dzdF90YWdfZXhpc3RzCitnc3RfdGFnX2dldF90eXBlCitnc3RfdGFnX2dldF9uaWNrCitnc3RfdGFnX2dldF9kZXNjcmlwdGlvbgorZ3N0X3RhZ19nZXRfZmxhZworZ3N0X3RhZ19pc19maXhlZAorZ3N0X3RhZ19saXN0X25ldworZ3N0X3RhZ19saXN0X25ld19mdWxsCitnc3RfdGFnX2xpc3RfbmV3X2Z1bGxfdmFsaXN0Citnc3RfaXNfdGFnX2xpc3QKK2dzdF90YWdfbGlzdF9pc19lbXB0eQorZ3N0X3RhZ19saXN0X2NvcHkKK2dzdF90YWdfbGlzdF9pbnNlcnQKK2dzdF90YWdfbGlzdF9tZXJnZQorZ3N0X3RhZ19saXN0X2ZyZWUKK2dzdF90YWdfbGlzdF9nZXRfdGFnX3NpemUKK2dzdF90YWdfbGlzdF9hZGQKK2dzdF90YWdfbGlzdF9hZGRfdmFsdWUKK2dzdF90YWdfbGlzdF9hZGRfdmFsdWVzCitnc3RfdGFnX2xpc3RfYWRkX3ZhbGlzdAorZ3N0X3RhZ19saXN0X2FkZF92YWxpc3RfdmFsdWVzCitnc3RfdGFnX2xpc3RfcmVtb3ZlX3RhZworZ3N0X3RhZ19saXN0X2ZvcmVhY2gKK2dzdF90YWdfbGlzdF9nZXRfdmFsdWVfaW5kZXgKK2dzdF90YWdfbGlzdF9jb3B5X3ZhbHVlCitnc3RfdGFnX2xpc3RfZ2V0X2NoYXIKK2dzdF90YWdfbGlzdF9nZXRfY2hhcl9pbmRleAorZ3N0X3RhZ19saXN0X2dldF91Y2hhcgorZ3N0X3RhZ19saXN0X2dldF91Y2hhcl9pbmRleAorZ3N0X3RhZ19saXN0X2dldF9ib29sZWFuCitnc3RfdGFnX2xpc3RfZ2V0X2Jvb2xlYW5faW5kZXgKK2dzdF90YWdfbGlzdF9nZXRfaW50Citnc3RfdGFnX2xpc3RfZ2V0X2ludF9pbmRleAorZ3N0X3RhZ19saXN0X2dldF91aW50Citnc3RfdGFnX2xpc3RfZ2V0X3VpbnRfaW5kZXgKK2dzdF90YWdfbGlzdF9nZXRfbG9uZworZ3N0X3RhZ19saXN0X2dldF9sb25nX2luZGV4Citnc3RfdGFnX2xpc3RfZ2V0X3Vsb25nCitnc3RfdGFnX2xpc3RfZ2V0X3Vsb25nX2luZGV4Citnc3RfdGFnX2xpc3RfZ2V0X2ludDY0Citnc3RfdGFnX2xpc3RfZ2V0X2ludDY0X2luZGV4Citnc3RfdGFnX2xpc3RfZ2V0X3VpbnQ2NAorZ3N0X3RhZ19saXN0X2dldF91aW50NjRfaW5kZXgKK2dzdF90YWdfbGlzdF9nZXRfZmxvYXQKK2dzdF90YWdfbGlzdF9nZXRfZmxvYXRfaW5kZXgKK2dzdF90YWdfbGlzdF9nZXRfZG91YmxlCitnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZV9pbmRleAorZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcKK2dzdF90YWdfbGlzdF9nZXRfc3RyaW5nX2luZGV4Citnc3RfdGFnX2xpc3RfcGVla19zdHJpbmdfaW5kZXgKK2dzdF90YWdfbGlzdF9nZXRfcG9pbnRlcgorZ3N0X3RhZ19saXN0X2dldF9wb2ludGVyX2luZGV4Citnc3RfdGFnX2xpc3RfZ2V0X2RhdGUKK2dzdF90YWdfbGlzdF9nZXRfZGF0ZV9pbmRleAorZ3N0X3RhZ19saXN0X2dldF9kYXRlX3RpbWUKK2dzdF90YWdfbGlzdF9nZXRfZGF0ZV90aW1lX2luZGV4Citnc3RfdGFnX2xpc3RfZ2V0X2J1ZmZlcgorZ3N0X3RhZ19saXN0X2dldF9idWZmZXJfaW5kZXgKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR1NUX1RBR19MSVNUCitHU1RfSVNfVEFHX0xJU1QKK0dTVF9UQUdfRkxBR19JU19WQUxJRAorR1NUX1RBR19NT0RFX0lTX1ZBTElECitHU1RfVFlQRV9UQUdfTElTVAorR1NUX1RZUEVfVEFHX0ZMQUcKK0dTVF9UWVBFX1RBR19NRVJHRV9NT0RFCis8U1VCU0VDVElPTiBQcml2YXRlPgorZ3N0X3RhZ19saXN0X2dldF90eXBlCitnc3RfdGFnX2ZsYWdfZ2V0X3R5cGUKK2dzdF90YWdfbWVyZ2VfbW9kZV9nZXRfdHlwZQorPC9TRUNUSU9OPgorCisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0dGFnc2V0dGVyPC9GSUxFPgorPFRJVExFPkdzdFRhZ1NldHRlcjwvVElUTEU+CitHc3RUYWdTZXR0ZXIKK0dzdFRhZ1NldHRlcklGYWNlCitnc3RfdGFnX3NldHRlcl9yZXNldF90YWdzCitnc3RfdGFnX3NldHRlcl9tZXJnZV90YWdzCitnc3RfdGFnX3NldHRlcl9hZGRfdGFncworZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWx1ZQorZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWx1ZXMKK2dzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsaXN0Citnc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbGlzdF92YWx1ZXMKK2dzdF90YWdfc2V0dGVyX2dldF90YWdfbGlzdAorZ3N0X3RhZ19zZXR0ZXJfc2V0X3RhZ19tZXJnZV9tb2RlCitnc3RfdGFnX3NldHRlcl9nZXRfdGFnX21lcmdlX21vZGUKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR1NUX1RBR19TRVRURVIKK0dTVF9JU19UQUdfU0VUVEVSCitHU1RfVEFHX1NFVFRFUl9HRVRfSUZBQ0UKK0dTVF9UWVBFX1RBR19TRVRURVIKKzxTVUJTRUNUSU9OIFByaXZhdGU+Citnc3RfdGFnX3NldHRlcl9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPmdzdHRhc2twb29sPC9GSUxFPgorPFRJVExFPkdzdFRhc2tQb29sPC9USVRMRT4KK0dzdFRhc2tQb29sCitHc3RUYXNrUG9vbENsYXNzCitHc3RUYXNrUG9vbEZ1bmN0aW9uCitnc3RfdGFza19wb29sX25ldworZ3N0X3Rhc2tfcG9vbF9wcmVwYXJlCitnc3RfdGFza19wb29sX3B1c2gKK2dzdF90YXNrX3Bvb2xfam9pbgorZ3N0X3Rhc2tfcG9vbF9jbGVhbnVwCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK0dTVF9JU19UQVNLX1BPT0wKK0dTVF9JU19UQVNLX1BPT0xfQ0xBU1MKK0dTVF9UQVNLX1BPT0wKK0dTVF9UQVNLX1BPT0xfQ0FTVAorR1NUX1RBU0tfUE9PTF9DTEFTUworR1NUX1RBU0tfUE9PTF9HRVRfQ0xBU1MKK0dTVF9UWVBFX1RBU0tfUE9PTAorPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK2dzdF90YXNrX3Bvb2xfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworCis8U0VDVElPTj4KKzxGSUxFPmdzdHRhc2s8L0ZJTEU+Cis8VElUTEU+R3N0VGFzazwvVElUTEU+CitHc3RUYXNrCitHc3RUYXNrRnVuY3Rpb24KK0dzdFRhc2tTdGF0ZQorCitHU1RfVEFTS19CUk9BRENBU1QKK0dTVF9UQVNLX0dFVF9DT05ECitHU1RfVEFTS19HRVRfTE9DSworR1NUX1RBU0tfU0lHTkFMCitHU1RfVEFTS19TVEFURQorR1NUX1RBU0tfV0FJVAorCitnc3RfdGFza19jcmVhdGUKK2dzdF90YXNrX3NldF9sb2NrCitnc3RfdGFza19zZXRfcHJpb3JpdHkKKworZ3N0X3Rhc2tfc2V0X3Bvb2wKK2dzdF90YXNrX2dldF9wb29sCisKK0dzdFRhc2tUaHJlYWRDYWxsYmFja3MKK2dzdF90YXNrX3NldF90aHJlYWRfY2FsbGJhY2tzCisKK2dzdF90YXNrX2dldF9zdGF0ZQorZ3N0X3Rhc2tfc2V0X3N0YXRlCitnc3RfdGFza19wYXVzZQorZ3N0X3Rhc2tfc3RhcnQKK2dzdF90YXNrX3N0b3AKK2dzdF90YXNrX2pvaW4KKworZ3N0X3Rhc2tfY2xlYW51cF9hbGwKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitHc3RUYXNrQ2xhc3MKK0dzdFRhc2tQcml2YXRlCitHU1RfVEFTSworR1NUX0lTX1RBU0sKK0dTVF9UWVBFX1RBU0sKK0dTVF9UQVNLX0NMQVNTCitHU1RfSVNfVEFTS19DTEFTUworR1NUX1RBU0tfR0VUX0NMQVNTCitHU1RfVEFTS19DQVNUCitHU1RfVFlQRV9UQVNLX1NUQVRFCis8U1VCU0VDVElPTiBQcml2YXRlPgorZ3N0X3Rhc2tfZ2V0X3R5cGUKK2dzdF90YXNrX3N0YXRlX2dldF90eXBlCis8L1NFQ1RJT04+CisKKworPFNFQ1RJT04+Cis8RklMRT5nc3R0cmFjZTwvRklMRT4KKzxUSVRMRT5Hc3RUcmFjZTwvVElUTEU+CitHc3RUcmFjZQorZ3N0X3RyYWNlX25ldworZ3N0X3RyYWNlX2Rlc3Ryb3kKK2dzdF90cmFjZV9mbHVzaAorZ3N0X3RyYWNlX3RleHRfZmx1c2gKK2dzdF90cmFjZV9hZGRfZW50cnkKK2dzdF90cmFjZV9nZXRfc2l6ZQorZ3N0X3RyYWNlX2dldF9vZmZzZXQKK2dzdF90cmFjZV9nZXRfcmVtYWluaW5nCitnc3RfdHJhY2Vfc2V0X2RlZmF1bHQKK2dzdF90cmFjZV9yZWFkX3RzYworR3N0QWxsb2NUcmFjZUZsYWdzCitHc3RBbGxvY1RyYWNlCitnc3RfYWxsb2NfdHJhY2VfYXZhaWxhYmxlCitnc3RfYWxsb2NfdHJhY2VfbGlzdAorZ3N0X2FsbG9jX3RyYWNlX2xpdmVfYWxsCitnc3RfYWxsb2NfdHJhY2VfcHJpbnRfYWxsCitnc3RfYWxsb2NfdHJhY2Vfc2V0X2ZsYWdzX2FsbAorZ3N0X2FsbG9jX3RyYWNlX2dldAorZ3N0X2FsbG9jX3RyYWNlX3ByaW50Citnc3RfYWxsb2NfdHJhY2VfcHJpbnRfbGl2ZQorZ3N0X2FsbG9jX3RyYWNlX3NldF9mbGFncworZ3N0X2FsbG9jX3RyYWNlX3JlZ2lzdGVyCitnc3RfYWxsb2NfdHJhY2VfbmV3Citnc3RfYWxsb2NfdHJhY2VfZnJlZQorPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitHU1RfVFlQRV9BTExPQ19UUkFDRV9GTEFHUworZ3N0X2FsbG9jX3RyYWNlX2ZsYWdzX2dldF90eXBlCis8U1VCU0VDVElPTiBQcml2YXRlPgorR3N0VHJhY2VFbnRyeQorPC9TRUNUSU9OPgorCisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0dHlwZWZpbmQ8L0ZJTEU+Cis8VElUTEU+R3N0VHlwZUZpbmQ8L1RJVExFPgorR3N0VHlwZUZpbmQKK0dzdFR5cGVGaW5kRnVuY3Rpb24KK0dzdFR5cGVGaW5kUHJvYmFiaWxpdHkKK2dzdF90eXBlX2ZpbmRfcGVlaworZ3N0X3R5cGVfZmluZF9zdWdnZXN0Citnc3RfdHlwZV9maW5kX3N1Z2dlc3Rfc2ltcGxlCitnc3RfdHlwZV9maW5kX2dldF9sZW5ndGgKK2dzdF90eXBlX2ZpbmRfcmVnaXN0ZXIKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR1NUX1RZUEVfVFlQRV9GSU5EX1BST0JBQklMSVRZCis8U1VCU0VDVElPTiBQcml2YXRlPgorZ3N0X3R5cGVfZmluZF9wcm9iYWJpbGl0eV9nZXRfdHlwZQorZ3N0X3R5cGVfZmluZF9nZXRfdHlwZQorR1NUX1RZUEVfVFlQRV9GSU5ECis8L1NFQ1RJT04+CisKKworPFNFQ1RJT04+Cis8RklMRT5nc3R0eXBlZmluZGZhY3Rvcnk8L0ZJTEU+Cis8VElUTEU+R3N0VHlwZUZpbmRGYWN0b3J5PC9USVRMRT4KK0dzdFR5cGVGaW5kRmFjdG9yeQorZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9saXN0Citnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2V4dGVuc2lvbnMKK2dzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfY2FwcworZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2NhbGxfZnVuY3Rpb24KKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR3N0VHlwZUZpbmRGYWN0b3J5Q2xhc3MKK0dTVF9UWVBFX0ZJTkRfRkFDVE9SWQorR1NUX0lTX1RZUEVfRklORF9GQUNUT1JZCitHU1RfVFlQRV9GSU5EX0ZBQ1RPUllfQ0xBU1MKK0dTVF9JU19UWVBFX0ZJTkRfRkFDVE9SWV9DTEFTUworR1NUX1RZUEVfRklORF9GQUNUT1JZX0dFVF9DTEFTUworR1NUX1RZUEVfVFlQRV9GSU5EX0ZBQ1RPUlkKKzxTVUJTRUNUSU9OIFByaXZhdGU+Citnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworCis8U0VDVElPTj4KKzxGSUxFPmdzdHVyaWhhbmRsZXI8L0ZJTEU+Cis8VElUTEU+R3N0VXJpSGFuZGxlcjwvVElUTEU+CitHc3RVUklIYW5kbGVyCitHc3RVUklIYW5kbGVySW50ZXJmYWNlCitHc3RVUklUeXBlCitHU1RfVVJJX1RZUEVfSVNfVkFMSUQKK2dzdF91cmlfcHJvdG9jb2xfaXNfdmFsaWQKK2dzdF91cmlfcHJvdG9jb2xfaXNfc3VwcG9ydGVkCitnc3RfdXJpX2lzX3ZhbGlkCitnc3RfdXJpX2hhc19wcm90b2NvbAorZ3N0X3VyaV9nZXRfcHJvdG9jb2wKK2dzdF91cmlfZ2V0X2xvY2F0aW9uCitnc3RfdXJpX2NvbnN0cnVjdAorZ3N0X2ZpbGVuYW1lX3RvX3VyaQorZ3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaQorZ3N0X3VyaV9oYW5kbGVyX2dldF91cmlfdHlwZQorZ3N0X3VyaV9oYW5kbGVyX2dldF9wcm90b2NvbHMKK2dzdF91cmlfaGFuZGxlcl9nZXRfdXJpCitnc3RfdXJpX2hhbmRsZXJfc2V0X3VyaQorZ3N0X3VyaV9oYW5kbGVyX25ld191cmkKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR1NUX1VSSV9IQU5ETEVSCitHU1RfSVNfVVJJX0hBTkRMRVIKK0dTVF9VUklfSEFORExFUl9HRVRfSU5URVJGQUNFCitHU1RfVFlQRV9VUklfSEFORExFUgorR1NUX1RZUEVfVVJJX1RZUEUKKzxTVUJTRUNUSU9OIFByaXZhdGU+Citnc3RfdXJpX2hhbmRsZXJfZ2V0X3R5cGUKK2dzdF91cmlfdHlwZV9nZXRfdHlwZQorPC9TRUNUSU9OPgorCisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0dXRpbHM8L0ZJTEU+Cis8VElUTEU+R3N0VXRpbHM8L1RJVExFPgorR1NUX0NBTExfUEFSRU5UCitHU1RfQ0FMTF9QQVJFTlRfV0lUSF9ERUZBVUxUCitHU1RfUkVBRF9VSU5UOAorR1NUX1JFQURfVUlOVDE2X0xFCitHU1RfUkVBRF9VSU5UMTZfQkUKK0dTVF9SRUFEX1VJTlQyNF9MRQorR1NUX1JFQURfVUlOVDI0X0JFCitHU1RfUkVBRF9VSU5UMzJfTEUKK0dTVF9SRUFEX1VJTlQzMl9CRQorR1NUX1JFQURfVUlOVDY0X0xFCitHU1RfUkVBRF9VSU5UNjRfQkUKK0dTVF9SRUFEX0ZMT0FUX0xFCitHU1RfUkVBRF9GTE9BVF9CRQorR1NUX1JFQURfRE9VQkxFX0xFCitHU1RfUkVBRF9ET1VCTEVfQkUKK0dTVF9XUklURV9VSU5UOAorR1NUX1dSSVRFX1VJTlQxNl9MRQorR1NUX1dSSVRFX1VJTlQxNl9CRQorR1NUX1dSSVRFX1VJTlQyNF9MRQorR1NUX1dSSVRFX1VJTlQyNF9CRQorR1NUX1dSSVRFX1VJTlQzMl9MRQorR1NUX1dSSVRFX1VJTlQzMl9CRQorR1NUX1dSSVRFX1VJTlQ2NF9MRQorR1NUX1dSSVRFX1VJTlQ2NF9CRQorR1NUX1dSSVRFX0ZMT0FUX0xFCitHU1RfV1JJVEVfRkxPQVRfQkUKK0dTVF9XUklURV9ET1VCTEVfTEUKK0dTVF9XUklURV9ET1VCTEVfQkUKK0dTVF9ST1VORF9VUF8yCitHU1RfUk9VTkRfVVBfNAorR1NUX1JPVU5EX1VQXzgKK0dTVF9ST1VORF9VUF8xNgorR1NUX1JPVU5EX1VQXzMyCitHU1RfUk9VTkRfVVBfNjQKK0dTVF9ST1VORF9ET1dOXzIKK0dTVF9ST1VORF9ET1dOXzQKK0dTVF9ST1VORF9ET1dOXzgKK0dTVF9ST1VORF9ET1dOXzE2CitHU1RfUk9VTkRfRE9XTl8zMgorR1NUX1JPVU5EX0RPV05fNjQKK0dET1VCTEVfRlJPTV9CRQorR0RPVUJMRV9GUk9NX0xFCitHRE9VQkxFX1NXQVBfTEVfQkUKK0dET1VCTEVfVE9fQkUKK0dET1VCTEVfVE9fTEUKK0dGTE9BVF9GUk9NX0JFCitHRkxPQVRfRlJPTV9MRQorR0ZMT0FUX1NXQVBfTEVfQkUKK0dGTE9BVF9UT19CRQorR0ZMT0FUX1RPX0xFCisKKworZ3N0X2Zsb3dfZ2V0X25hbWUKK2dzdF9mbG93X3RvX3F1YXJrCitnc3RfcHJpbnRfZWxlbWVudF9hcmdzCitnc3RfcHJpbnRfcGFkX2NhcHMKK2dzdF9ndWludDY0X3RvX2dkb3VibGUKK2dzdF9nZG91YmxlX3RvX2d1aW50NjQKK2dzdF90eXBlX3JlZ2lzdGVyX3N0YXRpY19mdWxsCitnc3RfdXRpbF9kdW1wX21lbQorZ3N0X3V0aWxfdWludDY0X3NjYWxlCitnc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQKK2dzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlsCitnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50Citnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kCitnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWwKK2dzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yCitnc3RfdXRpbF9mcmFjdGlvbl90b19kb3VibGUKK2dzdF91dGlsX2RvdWJsZV90b19mcmFjdGlvbgorZ3N0X3V0aWxfZnJhY3Rpb25fbXVsdGlwbHkKK2dzdF91dGlsX2ZyYWN0aW9uX2FkZAorZ3N0X3V0aWxfZnJhY3Rpb25fY29tcGFyZQorZ3N0X3V0aWxfc2VxbnVtX25leHQKK2dzdF91dGlsX3NlcW51bV9jb21wYXJlCitnc3RfdXRpbF9zZXRfb2JqZWN0X2FyZworZ3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nCitnc3RfdXRpbF9nZXRfdGltZXN0YW1wCitHc3RTZWFyY2hNb2RlCitnc3RfdXRpbF9hcnJheV9iaW5hcnlfc2VhcmNoCis8U1VCU0VDVElPTiBQcml2YXRlPgorR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTUworZ3N0X3V0aWxfZ3VpbnQ2NF90b19nZG91YmxlCitnc3RfdXRpbF9nZG91YmxlX3RvX2d1aW50NjQKK0dTVF9UWVBFX1NFQVJDSF9NT0RFCitnc3Rfc2VhcmNoX21vZGVfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5nc3RkYXRldGltZTwvRklMRT4KKzxUSVRMRT5Hc3REYXRlVGltZTwvVElUTEU+CitHc3REYXRlVGltZQorR1NUX1RZUEVfREFURV9USU1FCitnc3RfZGF0ZV90aW1lX2dldF9kYXkKK2dzdF9kYXRlX3RpbWVfZ2V0X21vbnRoCitnc3RfZGF0ZV90aW1lX2dldF9ob3VyCitnc3RfZGF0ZV90aW1lX2dldF9taWNyb3NlY29uZAorZ3N0X2RhdGVfdGltZV9nZXRfbWludXRlCitnc3RfZGF0ZV90aW1lX2dldF90aW1lX3pvbmVfb2Zmc2V0Citnc3RfZGF0ZV90aW1lX2dldF9zZWNvbmQKK2dzdF9kYXRlX3RpbWVfZ2V0X3llYXIKK2dzdF9kYXRlX3RpbWVfbmV3Citnc3RfZGF0ZV90aW1lX25ld19mcm9tX3VuaXhfZXBvY2hfbG9jYWxfdGltZQorZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV91bml4X2Vwb2NoX3V0YworZ3N0X2RhdGVfdGltZV9uZXdfbG9jYWxfdGltZQorZ3N0X2RhdGVfdGltZV9uZXdfbm93X2xvY2FsX3RpbWUKK2dzdF9kYXRlX3RpbWVfbmV3X25vd191dGMKK2dzdF9kYXRlX3RpbWVfcmVmCitnc3RfZGF0ZV90aW1lX3VucmVmCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0dmFsdWU8L0ZJTEU+Cis8VElUTEU+R3N0VmFsdWU8L1RJVExFPgorCis8U1VCU0VDVElPTiBmb3VyY2M+CitHU1RfTUFLRV9GT1VSQ0MKK0dTVF9TVFJfRk9VUkNDCitHU1RfRk9VUkNDX0ZPUk1BVAorR1NUX0ZPVVJDQ19BUkdTCisKKzxTVUJTRUNUSU9OIGludHJhbmdlPgorR1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRQorR1NUX1RZUEVfSU5UX1JBTkdFCitnc3RfdmFsdWVfc2V0X2ludF9yYW5nZQorZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWluCitnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXgKKworPFNVQlNFQ1RJT04gaW50NjRyYW5nZT4KK0dTVF9WQUxVRV9IT0xEU19JTlQ2NF9SQU5HRQorR1NUX1RZUEVfSU5UNjRfUkFOR0UKK2dzdF92YWx1ZV9zZXRfaW50NjRfcmFuZ2UKK2dzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWluCitnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21heAorCis8U1VCU0VDVElPTiBkb3VibGVyYW5nZT4KK0dTVF9WQUxVRV9IT0xEU19ET1VCTEVfUkFOR0UKK0dTVF9UWVBFX0RPVUJMRV9SQU5HRQorZ3N0X3ZhbHVlX3NldF9kb3VibGVfcmFuZ2UKK2dzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21pbgorZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWF4CisKKzxTVUJTRUNUSU9OIHZhbHVlbGlzdD4KK0dTVF9WQUxVRV9IT0xEU19MSVNUCitHU1RfVFlQRV9MSVNUCitHU1RfVkFMVUVfSE9MRFNfQVJSQVkKK0dTVF9UWVBFX0FSUkFZCitnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUKK2dzdF92YWx1ZV9saXN0X3ByZXBlbmRfdmFsdWUKK2dzdF92YWx1ZV9saXN0X2NvbmNhdAorZ3N0X3ZhbHVlX2xpc3RfbWVyZ2UKK2dzdF92YWx1ZV9saXN0X2dldF9zaXplCitnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUKKworPFNVQlNFQ1RJT04gZnJhY3Rpb24+CitHU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT04KK0dTVF9UWVBFX0ZSQUNUSU9OCitnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uCitnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvcgorZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9kZW5vbWluYXRvcgorZ3N0X3ZhbHVlX2ZyYWN0aW9uX211bHRpcGx5Citnc3RfdmFsdWVfZnJhY3Rpb25fc3VidHJhY3QKKworPFNVQlNFQ1RJT04gZnJhY3Rpb25yYW5nZT4KK0dTVF9WQUxVRV9IT0xEU19GUkFDVElPTl9SQU5HRQorR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UKK2dzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2UKK2dzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWluCitnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21heAorZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZV9mdWxsCisKKzxTVUJTRUNUSU9OIGRhdGU+CitHU1RfVkFMVUVfSE9MRFNfREFURQorR1NUX1RZUEVfREFURQorZ3N0X3ZhbHVlX3NldF9kYXRlCitnc3RfdmFsdWVfZ2V0X2RhdGUKKworPFNVQlNFQ1RJT04gZGF0ZXRpbWU+CitHU1RfVkFMVUVfSE9MRFNfREFURV9USU1FCisKKzxTVUJTRUNUSU9OIGNhcHM+CitHU1RfVkFMVUVfSE9MRFNfQ0FQUworZ3N0X3ZhbHVlX3NldF9jYXBzCitnc3RfdmFsdWVfZ2V0X2NhcHMKKworPFNVQlNFQ1RJT04gc3RydWN0dXJlPgorR1NUX1ZBTFVFX0hPTERTX1NUUlVDVFVSRQorZ3N0X3ZhbHVlX3NldF9zdHJ1Y3R1cmUKK2dzdF92YWx1ZV9nZXRfc3RydWN0dXJlCisKKzxTVUJTRUNUSU9OIGJ1ZmZlcj4KK0dTVF9WQUxVRV9IT0xEU19CVUZGRVIKK2dzdF92YWx1ZV9nZXRfYnVmZmVyCitnc3RfdmFsdWVfc2V0X2J1ZmZlcgorZ3N0X3ZhbHVlX3Rha2VfYnVmZmVyCisKKzxTVUJTRUNUSU9OPgorR1NUX1ZBTFVFX0xFU1NfVEhBTgorR1NUX1ZBTFVFX0VRVUFMCitHU1RfVkFMVUVfR1JFQVRFUl9USEFOCitHU1RfVkFMVUVfVU5PUkRFUkVECisKK0dzdFZhbHVlQ29tcGFyZUZ1bmMKK0dzdFZhbHVlU2VyaWFsaXplRnVuYworR3N0VmFsdWVEZXNlcmlhbGl6ZUZ1bmMKK0dzdFZhbHVlVW5pb25GdW5jCitHc3RWYWx1ZUludGVyc2VjdEZ1bmMKK0dzdFZhbHVlU3VidHJhY3RGdW5jCitHc3RWYWx1ZVRhYmxlCisKK2dzdF92YWx1ZV9pc19maXhlZAorZ3N0X3ZhbHVlX3JlZ2lzdGVyCitnc3RfdmFsdWVfaW5pdF9hbmRfY29weQorZ3N0X3ZhbHVlX3NlcmlhbGl6ZQorZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplCitnc3RfdmFsdWVfY29tcGFyZQorZ3N0X3ZhbHVlX2Nhbl9jb21wYXJlCitnc3RfdmFsdWVfdW5pb24KK2dzdF92YWx1ZV9jYW5fdW5pb24KK2dzdF92YWx1ZV9yZWdpc3Rlcl91bmlvbl9mdW5jCitnc3RfdmFsdWVfc3VidHJhY3QKK2dzdF92YWx1ZV9jYW5fc3VidHJhY3QKK2dzdF92YWx1ZV9yZWdpc3Rlcl9zdWJ0cmFjdF9mdW5jCitnc3RfdmFsdWVfaW50ZXJzZWN0Citnc3RfdmFsdWVfY2FuX2ludGVyc2VjdAorZ3N0X3ZhbHVlX3JlZ2lzdGVyX2ludGVyc2VjdF9mdW5jCitnc3RfdmFsdWVfYXJyYXlfYXBwZW5kX3ZhbHVlCitnc3RfdmFsdWVfYXJyYXlfZ2V0X3NpemUKK2dzdF92YWx1ZV9hcnJheV9nZXRfdmFsdWUKK2dzdF92YWx1ZV9hcnJheV9wcmVwZW5kX3ZhbHVlCitnc3RfdmFsdWVfZml4YXRlCisKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK2dzdF9kYXRlX2dldF90eXBlCitnc3RfZGF0ZV90aW1lX2dldF90eXBlCitnc3RfZG91YmxlX3JhbmdlX2dldF90eXBlCitnc3RfZnJhY3Rpb25fZ2V0X3R5cGUKK2dzdF9mcmFjdGlvbl9yYW5nZV9nZXRfdHlwZQorZ3N0X2ludF9yYW5nZV9nZXRfdHlwZQorZ3N0X2ludDY0X3JhbmdlX2dldF90eXBlCitnc3RfdmFsdWVfYXJyYXlfZ2V0X3R5cGUKK2dzdF92YWx1ZV9saXN0X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0dmVyc2lvbjwvRklMRT4KKzxUSVRMRT5Hc3RWZXJzaW9uPC9USVRMRT4KK0dTVF9WRVJTSU9OX01BSk9SCitHU1RfVkVSU0lPTl9NSU5PUgorR1NUX1ZFUlNJT05fTUlDUk8KK0dTVF9WRVJTSU9OX05BTk8KK0dTVF9DSEVDS19WRVJTSU9OCis8L1NFQ1RJT04+CisKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2dzdHJlYW1lci50eXBlcyBiL2RvY3MvZ3N0L2dzdHJlYW1lci50eXBlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmQ2ZTJkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzCkBAIC0wLDAgKzEsMzkgQEAKKyUgYWRkIGEgX2dldF90eXBlIGZvciBldmVyeSBHT2JqZWN0IHdob3NlIHByb3BlcnRpZXMgYW5kIHNpZ25hbHMgeW91IHdhbnQKKyUgZG9jdW1lbnRlZAorJSBhZGQgdGhlIHJlbGV2YW50IGluY2x1ZGVzIHRvIGJlIGFibGUgdG8gY2FsbCB0aG9zZSBfZ2V0X3R5cGUgZnVuY3Rpb25zCisKKyUgYWRkaW5nIGEgZ2V0X3R5cGUgaGVyZSB3aWxsOgorJSAtIGNoYW5nZSBvdXRwdXQgZmlsZSBuYW1lIGZyb20gZ3N0cmVhbWVyLSh3aGF0ZXZlcikuaHRtbCB0byAod2hhdGV2ZXIpLmh0bWwKKyUgLSBkb2N1bWVudCBwcm9wZXJ0aWVzIGFuZCBzaWduYWxzCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKK2dzdF9iaW5fZ2V0X3R5cGUKK2dzdF9idXNfZ2V0X3R5cGUKK2dzdF9jaGlsZF9wcm94eV9nZXRfdHlwZQorZ3N0X2Nsb2NrX2dldF90eXBlCitnc3RfZWxlbWVudF9mYWN0b3J5X2dldF90eXBlCitnc3RfZWxlbWVudF9nZXRfdHlwZQorZ3N0X2dob3N0X3BhZF9nZXRfdHlwZQorZ3N0X2luZGV4X2ZhY3RvcnlfZ2V0X3R5cGUKK2dzdF9pbmRleF9nZXRfdHlwZQorZ3N0X29iamVjdF9nZXRfdHlwZQorZ3N0X3BhZF9nZXRfdHlwZQorZ3N0X3BhZF90ZW1wbGF0ZV9nZXRfdHlwZQorZ3N0X3BpcGVsaW5lX2dldF90eXBlCitnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3R5cGUKK2dzdF9wcmVzZXRfZ2V0X3R5cGUKK2dzdF9yZWdpc3RyeV9nZXRfdHlwZQorZ3N0X3N5c3RlbV9jbG9ja19nZXRfdHlwZQorZ3N0X3RhZ19zZXR0ZXJfZ2V0X3R5cGUKK2dzdF90YXNrX2dldF90eXBlCitnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X3R5cGUKK2dzdF91cmlfaGFuZGxlcl9nZXRfdHlwZQorCislIHRoZXNlIGFyZSBub3QgR09iamVjdCBkZXJpdmVkIHR5cGVzCislIHRoaXMgd29ya3Mgd2l0aCBndGstZG9jIDEuMTAgYXQgbGVhc3QKKyVnc3RfYnVmZmVyX2dldF90eXBlCislZ3N0X21pbmlfb2JqZWN0X2dldF90eXBlCislZ3N0X21lc3NhZ2VfZ2V0X3R5cGUKKyVnc3RfcXVlcnlfZ2V0X3R5cGUKKwpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzLmluIGIvZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZDZlMmQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dzdC9nc3RyZWFtZXIudHlwZXMuaW4KQEAgLTAsMCArMSwzOSBAQAorJSBhZGQgYSBfZ2V0X3R5cGUgZm9yIGV2ZXJ5IEdPYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhbmQgc2lnbmFscyB5b3Ugd2FudAorJSBkb2N1bWVudGVkCislIGFkZCB0aGUgcmVsZXZhbnQgaW5jbHVkZXMgdG8gYmUgYWJsZSB0byBjYWxsIHRob3NlIF9nZXRfdHlwZSBmdW5jdGlvbnMKKworJSBhZGRpbmcgYSBnZXRfdHlwZSBoZXJlIHdpbGw6CislIC0gY2hhbmdlIG91dHB1dCBmaWxlIG5hbWUgZnJvbSBnc3RyZWFtZXItKHdoYXRldmVyKS5odG1sIHRvICh3aGF0ZXZlcikuaHRtbAorJSAtIGRvY3VtZW50IHByb3BlcnRpZXMgYW5kIHNpZ25hbHMKKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworZ3N0X2Jpbl9nZXRfdHlwZQorZ3N0X2J1c19nZXRfdHlwZQorZ3N0X2NoaWxkX3Byb3h5X2dldF90eXBlCitnc3RfY2xvY2tfZ2V0X3R5cGUKK2dzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3R5cGUKK2dzdF9lbGVtZW50X2dldF90eXBlCitnc3RfZ2hvc3RfcGFkX2dldF90eXBlCitnc3RfaW5kZXhfZmFjdG9yeV9nZXRfdHlwZQorZ3N0X2luZGV4X2dldF90eXBlCitnc3Rfb2JqZWN0X2dldF90eXBlCitnc3RfcGFkX2dldF90eXBlCitnc3RfcGFkX3RlbXBsYXRlX2dldF90eXBlCitnc3RfcGlwZWxpbmVfZ2V0X3R5cGUKK2dzdF9wbHVnaW5fZmVhdHVyZV9nZXRfdHlwZQorZ3N0X3ByZXNldF9nZXRfdHlwZQorZ3N0X3JlZ2lzdHJ5X2dldF90eXBlCitnc3Rfc3lzdGVtX2Nsb2NrX2dldF90eXBlCitnc3RfdGFnX3NldHRlcl9nZXRfdHlwZQorZ3N0X3Rhc2tfZ2V0X3R5cGUKK2dzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfdHlwZQorZ3N0X3VyaV9oYW5kbGVyX2dldF90eXBlCisKKyUgdGhlc2UgYXJlIG5vdCBHT2JqZWN0IGRlcml2ZWQgdHlwZXMKKyUgdGhpcyB3b3JrcyB3aXRoIGd0ay1kb2MgMS4xMCBhdCBsZWFzdAorJWdzdF9idWZmZXJfZ2V0X3R5cGUKKyVnc3RfbWluaV9vYmplY3RfZ2V0X3R5cGUKKyVnc3RfbWVzc2FnZV9nZXRfdHlwZQorJWdzdF9xdWVyeV9nZXRfdHlwZQorCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL0dzdEJpbi5odG1sIGIvZG9jcy9nc3QvaHRtbC9Hc3RCaW4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzgxNmMyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9nc3QvaHRtbC9Hc3RCaW4uaHRtbApAQCAtMCwwICsxLDExNDUgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5Hc3RCaW48L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCIgdGl0bGU9IkdzdEF0b21pY1F1ZXVlIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI0dzdEJpbi5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEJpbi5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0QmluLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0QmluLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0QmluLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0QmluLnNpZ25hbHMiIGNsYXNzPSJzaG9ydGN1dCI+U2lnbmFsczwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJHc3RCaW4iPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RCaW4udG9wX29mX3BhZ2UiPjwvYT5Hc3RCaW48L3NwYW4+PC9oMj4KKzxwPkdzdEJpbiDigJQgQmFzZSBjbGFzcyBhbmQgZWxlbWVudCB0aGF0IGNhbiBjb250YWluIG90aGVyIGVsZW1lbnRzPC9wPgorPC90ZD4KKzx0ZCB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgorPC90cj48L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGEgbmFtZT0iR3N0QmluLnN5bm9wc2lzIj48L2E+PGgyPlN5bm9wc2lzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7CisKK3N0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI0dzdEJpbi1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0QmluIj5Hc3RCaW48L2E+Oworc3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjR3N0QmluQ2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0QmluQ2xhc3MiPkdzdEJpbkNsYXNzPC9hPjsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjZ3N0LWJpbi1uZXciIHRpdGxlPSJnc3RfYmluX25ldyAoKSI+Z3N0X2Jpbl9uZXc8L2E+ICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWFkZCIgdGl0bGU9ImdzdF9iaW5fYWRkICgpIj5nc3RfYmluX2FkZDwvYT4gICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiAqYmluPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI2dzdC1iaW4tcmVtb3ZlIiB0aXRsZT0iZ3N0X2Jpbl9yZW1vdmUgKCkiPmdzdF9iaW5fcmVtb3ZlPC9hPiAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+ICpiaW48L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWdldC1ieS1uYW1lIiB0aXRsZT0iZ3N0X2Jpbl9nZXRfYnlfbmFtZSAoKSI+Z3N0X2Jpbl9nZXRfYnlfbmFtZTwvYT4gICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gKmJpbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjZ3N0LWJpbi1nZXQtYnktbmFtZS1yZWN1cnNlLXVwIiB0aXRsZT0iZ3N0X2Jpbl9nZXRfYnlfbmFtZV9yZWN1cnNlX3VwICgpIj5nc3RfYmluX2dldF9ieV9uYW1lX3JlY3Vyc2VfdXA8L2E+ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiAqYmluPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWdldC1ieS1pbnRlcmZhY2UiIHRpdGxlPSJnc3RfYmluX2dldF9ieV9pbnRlcmZhY2UgKCkiPmdzdF9iaW5fZ2V0X2J5X2ludGVyZmFjZTwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+ICpiaW48L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IGlmYWNlPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICogICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI2dzdC1iaW4taXRlcmF0ZS1lbGVtZW50cyIgdGl0bGU9ImdzdF9iaW5faXRlcmF0ZV9lbGVtZW50cyAoKSI+Z3N0X2Jpbl9pdGVyYXRlX2VsZW1lbnRzPC9hPiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gKmJpbjwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWl0ZXJhdGUtcmVjdXJzZSIgdGl0bGU9ImdzdF9iaW5faXRlcmF0ZV9yZWN1cnNlICgpIj5nc3RfYmluX2l0ZXJhdGVfcmVjdXJzZTwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiAqYmluPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICogICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI2dzdC1iaW4taXRlcmF0ZS1zaW5rcyIgdGl0bGU9ImdzdF9iaW5faXRlcmF0ZV9zaW5rcyAoKSI+Z3N0X2Jpbl9pdGVyYXRlX3NpbmtzPC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gKmJpbjwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWl0ZXJhdGUtc29ydGVkIiB0aXRsZT0iZ3N0X2Jpbl9pdGVyYXRlX3NvcnRlZCAoKSI+Z3N0X2Jpbl9pdGVyYXRlX3NvcnRlZDwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gKmJpbjwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWl0ZXJhdGUtc291cmNlcyIgdGl0bGU9ImdzdF9iaW5faXRlcmF0ZV9zb3VyY2VzICgpIj5nc3RfYmluX2l0ZXJhdGVfc291cmNlczwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiAqYmluPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICogICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI2dzdC1iaW4taXRlcmF0ZS1hbGwtYnktaW50ZXJmYWNlIiB0aXRsZT0iZ3N0X2Jpbl9pdGVyYXRlX2FsbF9ieV9pbnRlcmZhY2UgKCkiPmdzdF9iaW5faXRlcmF0ZV9hbGxfYnlfaW50ZXJmYWNlPC9hPiAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+ICpiaW48L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IGlmYWNlPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI2dzdC1iaW4tcmVjYWxjdWxhdGUtbGF0ZW5jeSIgdGl0bGU9ImdzdF9iaW5fcmVjYWxjdWxhdGVfbGF0ZW5jeSAoKSI+Z3N0X2Jpbl9yZWNhbGN1bGF0ZV9sYXRlbmN5PC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gKmJpbjwvY29kZT48L2VtPik7CisKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI2dzdC1iaW4tYWRkLW1hbnkiIHRpdGxlPSJnc3RfYmluX2FkZF9tYW55ICgpIj5nc3RfYmluX2FkZF9tYW55PC9hPiAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiAqYmluPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50XzE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI2dzdC1iaW4tcmVtb3ZlLW1hbnkiIHRpdGxlPSJnc3RfYmluX3JlbW92ZV9tYW55ICgpIj5nc3RfYmluX3JlbW92ZV9tYW55PC9hPiAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiAqYmluPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50XzE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI2dzdC1iaW4tZmluZC11bmxpbmtlZC1wYWQiIHRpdGxlPSJnc3RfYmluX2ZpbmRfdW5saW5rZWRfcGFkICgpIj5nc3RfYmluX2ZpbmRfdW5saW5rZWRfcGFkPC9hPiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiAqYmluPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWREaXJlY3Rpb24iIHRpdGxlPSJlbnVtIEdzdFBhZERpcmVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZERpcmVjdGlvbjwvc3Bhbj48L2E+IGRpcmVjdGlvbjwvY29kZT48L2VtPik7CisKK2VudW0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI0dzdEJpbkZsYWdzIiB0aXRsZT0iZW51bSBHc3RCaW5GbGFncyI+R3N0QmluRmxhZ3M8L2E+OworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjR1NULUJJTi1DSElMRFJFTjpDQVBTIiB0aXRsZT0iR1NUX0JJTl9DSElMRFJFTigpIj5HU1RfQklOX0NISUxEUkVOPC9hPiAgICAgICAgICAgICAgICAgICAgKGJpbikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI0dTVC1CSU4tQ0hJTERSRU4tQ09PS0lFOkNBUFMiIHRpdGxlPSJHU1RfQklOX0NISUxEUkVOX0NPT0tJRSgpIj5HU1RfQklOX0NISUxEUkVOX0NPT0tJRTwvYT4gICAgICAgICAgICAgKGJpbikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI0dTVC1CSU4tTlVNQ0hJTERSRU46Q0FQUyIgdGl0bGU9IkdTVF9CSU5fTlVNQ0hJTERSRU4oKSI+R1NUX0JJTl9OVU1DSElMRFJFTjwvYT4gICAgICAgICAgICAgICAgIChiaW4pCis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0QmluLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij5HT2JqZWN0PC9hPgorICAgKy0tLS08YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgorICAgICAgICAgKy0tLS08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KKyAgICAgICAgICAgICAgICstLS0tPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+CisgICAgICAgICAgICAgICAgICAgICArLS0tLUdzdEJpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj5Hc3RQaXBlbGluZTwvYT4KKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RCaW4uaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KKzxwPgorR3N0QmluIGltcGxlbWVudHMKKyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+R3N0Q2hpbGRQcm94eTwvYT4uPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RCaW4ucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNHc3RCaW4tLWFzeW5jLWhhbmRsaW5nIiB0aXRsZT0nVGhlICJhc3luYy1oYW5kbGluZyIgcHJvcGVydHknPmFzeW5jLWhhbmRsaW5nPC9hPiIgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjR3N0QmluLS1tZXNzYWdlLWZvcndhcmQiIHRpdGxlPSdUaGUgIm1lc3NhZ2UtZm9yd2FyZCIgcHJvcGVydHknPm1lc3NhZ2UtZm9yd2FyZDwvYT4iICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0QmluLnNpZ25hbHMiPjwvYT48aDI+U2lnbmFsczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjR3N0QmluLWRvLWxhdGVuY3kiIHRpdGxlPSdUaGUgImRvLWxhdGVuY3kiIHNpZ25hbCc+ZG8tbGF0ZW5jeTwvYT4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlJ1biBMYXN0PC9jb2RlPjwvYT4KKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNHc3RCaW4tZWxlbWVudC1hZGRlZCIgdGl0bGU9J1RoZSAiZWxlbWVudC1hZGRlZCIgc2lnbmFsJz5lbGVtZW50LWFkZGVkPC9hPiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tRklSU1Q6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlJ1biBGaXJzdDwvY29kZT48L2E+CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjR3N0QmluLWVsZW1lbnQtcmVtb3ZlZCIgdGl0bGU9J1RoZSAiZWxlbWVudC1yZW1vdmVkIiBzaWduYWwnPmVsZW1lbnQtcmVtb3ZlZDwvYT4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1GSVJTVDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+UnVuIEZpcnN0PC9jb2RlPjwvYT4KKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RCaW4uZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiBpcyBhbiBlbGVtZW50IHRoYXQgY2FuIGNvbnRhaW4gb3RoZXIgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4sIGFsbG93aW5nIHRoZW0gdG8gYmUKK21hbmFnZWQgYXMgYSBncm91cC4KK1BhZHMgZnJvbSB0aGUgY2hpbGQgZWxlbWVudHMgY2FuIGJlIGdob3N0ZWQgdG8gdGhlIGJpbiwgc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sIiB0aXRsZT0iR3N0R2hvc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RHaG9zdFBhZDwvc3Bhbj48L2E+LgorVGhpcyBtYWtlcyB0aGUgYmluIGxvb2sgbGlrZSBhbnkgb3RoZXIgZWxlbWVudHMgYW5kIGVuYWJsZXMgY3JlYXRpb24gb2YKK2hpZ2hlci1sZXZlbCBhYnN0cmFjdGlvbiBlbGVtZW50cy4KKzwvcD4KKzxwPgorQSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gaXMgY3JlYXRlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLW5ldyIgdGl0bGU9ImdzdF9iaW5fbmV3ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iaW5fbmV3KCk8L2NvZGU+PC9hPi4gVXNlIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4gaW5zdGVhZCBpZiB5b3UKK3dhbnQgdG8gY3JlYXRlIGEgdG9wbGV2ZWwgYmluIGJlY2F1c2UgYSBub3JtYWwgYmluIGRvZXNuJ3QgaGF2ZSBhIGJ1cyBvcgoraGFuZGxlIGNsb2NrIGRpc3RyaWJ1dGlvbiBvZiBpdHMgb3duLgorPC9wPgorPHA+CitBZnRlciB0aGUgYmluIGhhcyBiZWVuIGNyZWF0ZWQgeW91IHdpbGwgdHlwaWNhbGx5IGFkZCBlbGVtZW50cyB0byBpdCB3aXRoCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjZ3N0LWJpbi1hZGQiIHRpdGxlPSJnc3RfYmluX2FkZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmluX2FkZCgpPC9jb2RlPjwvYT4uIFlvdSBjYW4gcmVtb3ZlIGVsZW1lbnRzIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI2dzdC1iaW4tcmVtb3ZlIiB0aXRsZT0iZ3N0X2Jpbl9yZW1vdmUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Jpbl9yZW1vdmUoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitBbiBlbGVtZW50IGNhbiBiZSByZXRyaWV2ZWQgZnJvbSBhIGJpbiB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWdldC1ieS1uYW1lIiB0aXRsZT0iZ3N0X2Jpbl9nZXRfYnlfbmFtZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmluX2dldF9ieV9uYW1lKCk8L2NvZGU+PC9hPiwgdXNpbmcgdGhlCitlbGVtZW50cyBuYW1lLiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjZ3N0LWJpbi1nZXQtYnktbmFtZS1yZWN1cnNlLXVwIiB0aXRsZT0iZ3N0X2Jpbl9nZXRfYnlfbmFtZV9yZWN1cnNlX3VwICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iaW5fZ2V0X2J5X25hbWVfcmVjdXJzZV91cCgpPC9jb2RlPjwvYT4gaXMgbWFpbmx5IHVzZWQgZm9yIGludGVybmFsCitwdXJwb3NlcyBhbmQgd2lsbCBxdWVyeSB0aGUgcGFyZW50IGJpbnMgd2hlbiB0aGUgZWxlbWVudCBpcyBub3QgZm91bmQgaW4gdGhlCitjdXJyZW50IGJpbi4KKzwvcD4KKzxwPgorQW4gaXRlcmF0b3Igb2YgZWxlbWVudHMgaW4gYSBiaW4gY2FuIGJlIHJldHJpZXZlZCB3aXRoCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjZ3N0LWJpbi1pdGVyYXRlLWVsZW1lbnRzIiB0aXRsZT0iZ3N0X2Jpbl9pdGVyYXRlX2VsZW1lbnRzICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iaW5faXRlcmF0ZV9lbGVtZW50cygpPC9jb2RlPjwvYT4uIFZhcmlvdXMgb3RoZXIgaXRlcmF0b3JzIGV4aXN0IHRvIHJldHJpZXZlIHRoZQorZWxlbWVudHMgaW4gYSBiaW4uCis8L3A+Cis8cD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucmVmIiB0aXRsZT0iZ3N0X29iamVjdF91bnJlZiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X3VucmVmKCk8L2NvZGU+PC9hPiBpcyB1c2VkIHRvIGRyb3AgeW91ciByZWZlcmVuY2UgdG8gdGhlIGJpbi4KKzwvcD4KKzxwPgorVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNHc3RCaW4tZWxlbWVudC1hZGRlZCIgdGl0bGU9J1RoZSAiZWxlbWVudC1hZGRlZCIgc2lnbmFsJz48c3BhbiBjbGFzcz0idHlwZSI+ImVsZW1lbnQtYWRkZWQiPC9zcGFuPjwvYT4gc2lnbmFsIGlzIGZpcmVkIHdoZW5ldmVyIGEgbmV3IGVsZW1lbnQgaXMgYWRkZWQgdG8KK3RoZSBiaW4uIExpa2V3aXNlIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjR3N0QmluLWVsZW1lbnQtcmVtb3ZlZCIgdGl0bGU9J1RoZSAiZWxlbWVudC1yZW1vdmVkIiBzaWduYWwnPjxzcGFuIGNsYXNzPSJ0eXBlIj4iZWxlbWVudC1yZW1vdmVkIjwvc3Bhbj48L2E+IHNpZ25hbCBpcyBmaXJlZCB3aGVuZXZlciBhbgorZWxlbWVudCBpcyByZW1vdmVkIGZyb20gdGhlIGJpbi4KKzwvcD4KKzxwPgorPC9wPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iaWQ0NzI3NDgiPjwvYT48aDM+Tm90ZXM8L2gzPgorPHA+CitBIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+IGludGVybmFsbHkgaW50ZXJjZXB0cyBldmVyeSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gcG9zdGVkIGJ5IGl0cyBjaGlsZHJlbiBhbmQKK2ltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBkZWZhdWx0IGJlaGF2aW91ciBmb3IgZWFjaCBvZiB0aGVtOgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+R1NUX01FU1NBR0VfRU9TPC9zcGFuPjwvcD48L3RkPgorPHRkPjxwPlRoaXMgbWVzc2FnZSBpcyBvbmx5IHBvc3RlZCBieSBzaW5rcyBpbiB0aGUgUExBWUlORworICAgIHN0YXRlLiBJZiBhbGwgc2lua3MgcG9zdGVkIHRoZSBFT1MgbWVzc2FnZSwgdGhpcyBiaW4gd2lsbCBwb3N0IGFuZCBFT1MKKyAgICBtZXNzYWdlIHVwd2FyZHMuPC9wPjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5HU1RfTUVTU0FHRV9TRUdNRU5UX1NUQVJUPC9zcGFuPjwvcD48L3RkPgorPHRkPjxwPmp1c3QgY29sbGVjdGVkIGFuZCBuZXZlciBmb3J3YXJkZWQgdXB3YXJkcy4KKyAgICBUaGUgbWVzc2FnZXMgYXJlIHVzZWQgdG8gZGVjaWRlIHdoZW4gYWxsIGVsZW1lbnRzIGhhdmUgY29tcGxldGVkIHBsYXliYWNrCisgICAgb2YgdGhlaXIgc2VnbWVudC48L3A+PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPkdTVF9NRVNTQUdFX1NFR01FTlRfRE9ORTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD48cD4gSXMgcG9zdGVkIGJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+IHdoZW4gYWxsIGVsZW1lbnRzIHRoYXQgcG9zdGVkCisgICAgYSBTRUdNRU5UX1NUQVJUIGhhdmUgcG9zdGVkIGEgU0VHTUVOVF9ET05FLjwvcD48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+R1NUX01FU1NBR0VfRFVSQVRJT048L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+PHA+IElzIHBvc3RlZCBieSBhbiBlbGVtZW50IHRoYXQgZGV0ZWN0ZWQgYSBjaGFuZ2UKKyAgICBpbiB0aGUgc3RyZWFtIGR1cmF0aW9uLiBUaGUgZGVmYXVsdCBiaW4gYmVoYXZpb3VyIGlzIHRvIGNsZWFyIGFueQorICAgIGNhY2hlZCBkdXJhdGlvbiB2YWx1ZXMgc28gdGhhdCB0aGUgbmV4dCBkdXJhdGlvbiBxdWVyeSB3aWxsIHBlcmZvcm0KKyAgICBhIGZ1bGwgZHVyYXRpb24gcmVjYWxjdWxhdGlvbi4gVGhlIGR1cmF0aW9uIGNoYW5nZSBpcyBwb3N0ZWQgdG8gdGhlCisgICAgYXBwbGljYXRpb24gc28gdGhhdCBpdCBjYW4gcmVmZXRjaCB0aGUgbmV3IGR1cmF0aW9uIHdpdGggYSBkdXJhdGlvbgorICAgIHF1ZXJ5LiBOb3RlIHRoYXQgdGhlc2UgbWVzc2FnZXMgY2FuIGJlIHBvc3RlZCBiZWZvcmUgdGhlIGJpbiBpcworICAgIHByZXJvbGxlZCwgaW4gd2hpY2ggY2FzZSB0aGUgZHVyYXRpb24gcXVlcnkgbWlnaHQgZmFpbC4KKyAgICA8L3A+PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPkdTVF9NRVNTQUdFX0NMT0NLX0xPU1Q8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+PHA+IFRoaXMgbWVzc2FnZSBpcyBwb3N0ZWQgYnkgYW4gZWxlbWVudCB3aGVuIGl0CisgICAgY2FuIG5vIGxvbmdlciBwcm92aWRlIGEgY2xvY2suIFRoZSBkZWZhdWx0IGJpbiBiZWhhdmlvdXIgaXMgdG8KKyAgICBjaGVjayBpZiB0aGUgbG9zdCBjbG9jayB3YXMgdGhlIG9uZSBwcm92aWRlZCBieSB0aGUgYmluLiBJZiBzbyBhbmQKKyAgICB0aGUgYmluIGlzIGN1cnJlbnRseSBpbiB0aGUgUExBWUlORyBzdGF0ZSwgdGhlIG1lc3NhZ2UgaXMgZm9yd2FyZGVkIHRvCisgICAgdGhlIGJpbiBwYXJlbnQuCisgICAgVGhpcyBtZXNzYWdlIGlzIGFsc28gZ2VuZXJhdGVkIHdoZW4gYSBjbG9jayBwcm92aWRlciBpcyByZW1vdmVkIGZyb20KKyAgICB0aGUgYmluLiBJZiB0aGlzIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLCBpdCBzaG91bGQKKyAgICBQQVVTRSB0aGUgcGlwZWxpbmUgYW5kIHNldCBpdCBiYWNrIHRvIFBMQVlJTkcgdG8gZm9yY2UgYSBuZXcgY2xvY2sKKyAgICBkaXN0cmlidXRpb24uCisgICAgPC9wPjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5HU1RfTUVTU0FHRV9DTE9DS19QUk9WSURFPC9zcGFuPjwvcD48L3RkPgorPHRkPjxwPiBUaGlzIG1lc3NhZ2UgaXMgZ2VuZXJhdGVkIHdoZW4gYW4gZWxlbWVudAorICAgIGNhbiBwcm92aWRlIGEgY2xvY2suIFRoaXMgbW9zdGx5IGhhcHBlbnMgd2hlbiBhIG5ldyBjbG9jaworICAgIHByb3ZpZGVyIGlzIGFkZGVkIHRvIHRoZSBiaW4uIFRoZSBkZWZhdWx0IGJlaGF2aW91ciBvZiB0aGUgYmluIGlzIHRvCisgICAgbWFyayB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNsb2NrIGFzIGRpcnR5LCB3aGljaCB3aWxsIHBlcmZvcm0gYSBjbG9jaworICAgIHJlY2FsY3VsYXRpb24gdGhlIG5leHQgdGltZSB0aGUgYmluIGlzIGFza2VkIHRvIHByb3ZpZGUgYSBjbG9jay4KKyAgICBUaGlzIG1lc3NhZ2UgaXMgbmV2ZXIgc2VudCB0b3QgdGhlIGFwcGxpY2F0aW9uIGJ1dCBpcyBmb3J3YXJkZWQgdG8KKyAgICB0aGUgcGFyZW50IG9mIHRoZSBiaW4uCisgICAgPC9wPjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5PVEhFUlM8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+PHA+IHBvc3RlZCB1cHdhcmRzLjwvcD48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHA+Cis8L3A+Cis8cD4KK0EgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gaW1wbGVtZW50cyB0aGUgZm9sbG93aW5nIGRlZmF1bHQgYmVoYXZpb3VyIGZvciBhbnN3ZXJpbmcgdG8gYQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPjoKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPkdTVF9RVUVSWV9EVVJBVElPTjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD48cD5JZiB0aGUgcXVlcnkgaGFzIGJlZW4gYXNrZWQgYmVmb3JlIHdpdGggdGhlIHNhbWUgZm9ybWF0CisgICAgYW5kIHRoZSBiaW4gaXMgYSB0b3BsZXZlbCBiaW4gKGllLiBoYXMgbm8gcGFyZW50KSwKKyAgICB1c2UgdGhlIGNhY2hlZCBwcmV2aW91cyB2YWx1ZS4gSWYgbm8gcHJldmlvdXMgdmFsdWUgd2FzIGNhY2hlZCwgdGhlCisgICAgcXVlcnkgaXMgc2VudCB0byBhbGwgc2luayBlbGVtZW50cyBpbiB0aGUgYmluIGFuZCB0aGUgTUFYSU1VTSBvZiBhbGwKKyAgICB2YWx1ZXMgaXMgcmV0dXJuZWQuIElmIHRoZSBiaW4gaXMgYSB0b3BsZXZlbCBiaW4gdGhlIHZhbHVlIGlzIGNhY2hlZC4KKyAgICBJZiBubyBzaW5rcyBhcmUgYXZhaWxhYmxlIGluIHRoZSBiaW4sIHRoZSBxdWVyeSBmYWlscy4KKyAgICA8L3A+PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPkdTVF9RVUVSWV9QT1NJVElPTjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD48cD5UaGUgcXVlcnkgaXMgc2VudCB0byBhbGwgc2luayBlbGVtZW50cyBpbiB0aGUgYmluIGFuZCB0aGUKKyAgICBNQVhJTVVNIG9mIGFsbCB2YWx1ZXMgaXMgcmV0dXJuZWQuIElmIG5vIHNpbmtzIGFyZSBhdmFpbGFibGUgaW4gdGhlIGJpbiwKKyAgICB0aGUgcXVlcnkgZmFpbHMuCisgICAgPC9wPjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5PVEhFUlM8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+PHA+dGhlIHF1ZXJ5IGlzIGZvcndhcmRlZCB0byBhbGwgc2luayBlbGVtZW50cywgdGhlIHJlc3VsdAorICAgIG9mIHRoZSBmaXJzdCBzaW5rIHRoYXQgYW5zd2VycyB0aGUgcXVlcnkgc3VjY2Vzc2Z1bGx5IGlzIHJldHVybmVkLiBJZiBubworICAgIHNpbmsgaXMgaW4gdGhlIGJpbiwgdGhlIHF1ZXJ5IGZhaWxzLjwvcD48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHA+Cis8L3A+Cis8cD4KK0EgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gd2lsbCBieSBkZWZhdWx0IGZvcndhcmQgYW55IGV2ZW50IHNlbnQgdG8gaXQgdG8gYWxsIHNpbmsgZWxlbWVudHMuCitJZiBhbGwgdGhlIHNpbmtzIHJldHVybiBUUlVFLCB0aGUgYmluIHdpbGwgYWxzbyByZXR1cm4gVFJVRSwgZWxzZSBGQUxTRSBpcworcmV0dXJuZWQuIElmIG5vIHNpbmtzIGFyZSBpbiB0aGUgYmluLCB0aGUgZXZlbnQgaGFuZGxlciB3aWxsIHJldHVybiBUUlVFLgorPC9wPgorPHA+Cis8L3A+Cis8L2Rpdj4KKzxwPgorPC9wPgorPHA+CitMYXN0IHJldmlld2VkIG9uIDIwMDYtMDQtMjggKDAuMTAuNikKKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0QmluLmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RCaW4tc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RCaW48L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RCaW4geworICAvKiBvdXIgY2hpbGRyZW4sIHN1YmNsYXNzIGFyZSBzdXBwb3NlZCB0byB1cGRhdGUgdGhlc2UKKyAgICogZmllbGRzIHRvIHJlZmxlY3QgdGhlaXIgc3RhdGUgd2l0aCBfaXRlcmF0ZV8qKCkgKi8KKyAgZ2ludAkJIG51bWNoaWxkcmVuOworICBHTGlzdAkJKmNoaWxkcmVuOworICBndWludDMyCSBjaGlsZHJlbl9jb29raWU7CisKKyAgR3N0QnVzICAgICAgICAqY2hpbGRfYnVzOworICBHTGlzdCAgICAgICAgICptZXNzYWdlczsKKworICBnYm9vbGVhbgkgcG9sbGluZzsKKyAgZ2Jvb2xlYW4gICAgICAgc3RhdGVfZGlydHk7CisKKyAgZ2Jvb2xlYW4gICAgICAgY2xvY2tfZGlydHk7CisgIEdzdENsb2NrwqAqcHJvdmlkZWRfY2xvY2s7CisgIEdzdEVsZW1lbnQgICAgKmNsb2NrX3Byb3ZpZGVyOworfTsKKzwvcHJlPgorPHA+CitUaGUgR3N0QmluIGJhc2UgY2xhc3MuIFN1YmNsYXNzZXMgY2FuIGFjY2VzcyB0aGVzZSBmaWVsZHMgcHJvdmlkZWQKK3RoZSBMT0NLIGlzIHRha2VuLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJpbi1zdHJ1Y3QubnVtY2hpbGRyZW4iPjwvYT5udW1jaGlsZHJlbjwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG51bWJlciBvZiBjaGlsZHJlbiBpbiB0aGlzIGJpbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCaW4tc3RydWN0LmNoaWxkcmVuIj48L2E+Y2hpbGRyZW48L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBsaXN0IG9mIGNoaWxkcmVuIGluIHRoaXMgYmluPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCaW4tc3RydWN0LmNoaWxkcmVuLWNvb2tpZSI+PC9hPmNoaWxkcmVuX2Nvb2tpZTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXBkYXRlZCB3aGVuZXZlciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2hpbGRyZW48L2NvZGU+PC9lbT4gY2hhbmdlczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJpbi1zdHJ1Y3QuY2hpbGQtYnVzIj48L2E+Y2hpbGRfYnVzPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5pbnRlcm5hbCBidXMgZm9yIGhhbmRsaW5nIGNoaWxkIG1lc3NhZ2VzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJpbi1zdHJ1Y3QubWVzc2FnZXMiPjwvYT5tZXNzYWdlczwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cXVldWVkIGFuZCBjYWNoZWQgbWVzc2FnZXM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmluLXN0cnVjdC5wb2xsaW5nIj48L2E+cG9sbGluZzwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGJpbiBpcyBjdXJyZW50bHkgY2FsY3VsYXRpbmcgaXRzIHN0YXRlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJpbi1zdHJ1Y3Quc3RhdGUtZGlydHkiPjwvYT5zdGF0ZV9kaXJ0eTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGJpbiBuZWVkcyB0byByZWNhbGN1bGF0ZSBpdHMgc3RhdGUgKGRlcHJlY2F0ZWQpPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJpbi1zdHJ1Y3QuY2xvY2stZGlydHkiPjwvYT5jbG9ja19kaXJ0eTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGJpbiBuZWVkcyB0byBzZWxlY3QgYSBuZXcgY2xvY2s8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCaW4tc3RydWN0LnByb3ZpZGVkLWNsb2NrIj48L2E+cHJvdmlkZWRfY2xvY2s8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBsYXN0IGNsb2NrIHNlbGVjdGVkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmluLXN0cnVjdC5jbG9jay1wcm92aWRlciI+PC9hPmNsb2NrX3Byb3ZpZGVyPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZWxlbWVudCB0aGF0IHByb3ZpZGVkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcm92aWRlZF9jbG9jazwvY29kZT48L2VtPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0QmluQ2xhc3MiPjwvYT48aDM+c3RydWN0IEdzdEJpbkNsYXNzPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0QmluQ2xhc3MgeworICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworCisgIC8qIHZpcnR1YWwgbWV0aG9kcyBmb3Igc3ViY2xhc3NlcyAqLworICBnYm9vbGVhbsKgKCphZGRfZWxlbWVudCkJCShHc3RCaW4gKmJpbiwgR3N0RWxlbWVudCAqZWxlbWVudCk7CisgIGdib29sZWFuwqAoKnJlbW92ZV9lbGVtZW50KcKgKEdzdEJpbiAqYmluLCBHc3RFbGVtZW50ICplbGVtZW50KTsKKworICB2b2lkCQkoKmhhbmRsZV9tZXNzYWdlKcKgKEdzdEJpbiAqYmluLCBHc3RNZXNzYWdlICptZXNzYWdlKTsKK307Cis8L3ByZT4KKzxwPgorU3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hZGRfZWxlbWVudDwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlbW92ZV9lbGVtZW50PC9jb2RlPjwvZW0+IHRvCit1cGRhdGUgdGhlIGxpc3Qgb2YgY2hpbGRyZW4gaW4gdGhlIGJpbi4KKzwvcD4KKzxwPgorVGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5oYW5kbGVfbWVzc2FnZTwvY29kZT48L2VtPiBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4gdG8gaW1wbGVtZW50IGN1c3RvbQorbWVzc2FnZSBoYW5kbGluZy4gIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5oYW5kbGVfbWVzc2FnZTwvY29kZT48L2VtPiB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIG1lc3NhZ2UsIGp1c3QgbGlrZQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1wb3N0LW1lc3NhZ2UiIHRpdGxlPSJnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc3RfZWxlbWVudF9wb3N0X21lc3NhZ2U8L3NwYW4+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudENsYXNzIiB0aXRsZT0ic3RydWN0IEdzdEVsZW1lbnRDbGFzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRDbGFzczwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCaW5DbGFzcy5wYXJlbnQtY2xhc3MiPjwvYT5wYXJlbnRfY2xhc3M8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPmJpbiBwYXJlbnQgY2xhc3M8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmluQ2xhc3MuYWRkLWVsZW1lbnQiPjwvYT5hZGRfZWxlbWVudDwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bWV0aG9kIHRvIGFkZCBhbiBlbGVtZW50IHRvIGEgYmluPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJpbkNsYXNzLnJlbW92ZS1lbGVtZW50Ij48L2E+cmVtb3ZlX2VsZW1lbnQ8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPm1ldGhvZCB0byByZW1vdmUgYW4gZWxlbWVudCBmcm9tIGEgYmluPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJpbkNsYXNzLmhhbmRsZS1tZXNzYWdlIj48L2E+aGFuZGxlX21lc3NhZ2U8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPm1ldGhvZCB0byBoYW5kbGUgYSBtZXNzYWdlIGZyb20gdGhlIGNoaWxkcmVuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJpbi1uZXciPjwvYT48aDM+Z3N0X2Jpbl9uZXcgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqICAgICAgICBnc3RfYmluX25ldyAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGVzIGEgbmV3IGJpbiB3aXRoIHRoZSBnaXZlbiBuYW1lLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5hbWUgb2YgdGhlIG5ldyBiaW48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iaW4tYWRkIj48L2E+PGgzPmdzdF9iaW5fYWRkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9iaW5fYWRkICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gKmJpbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0FkZHMgdGhlIGdpdmVuIGVsZW1lbnQgdG8gdGhlIGJpbi4gIFNldHMgdGhlIGVsZW1lbnQncyBwYXJlbnQsIGFuZCB0aHVzCit0YWtlcyBvd25lcnNoaXAgb2YgdGhlIGVsZW1lbnQuIEFuIGVsZW1lbnQgY2FuIG9ubHkgYmUgYWRkZWQgdG8gb25lIGJpbi4KKzwvcD4KKzxwPgorSWYgdGhlIGVsZW1lbnQncyBwYWRzIGFyZSBsaW5rZWQgdG8gb3RoZXIgcGFkcywgdGhlIHBhZHMgd2lsbCBiZSB1bmxpbmtlZAorYmVmb3JlIHRoZSBlbGVtZW50IGlzIGFkZGVkIHRvIHRoZSBiaW4uCis8L3A+Cis8cD4KKzwvcD4KKzxkaXYgY2xhc3M9Im5vdGUiIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij4KKzxoMyBjbGFzcz0idGl0bGUiPk5vdGU8L2gzPgorV2hlbiB5b3UgYWRkIGFuIGVsZW1lbnQgdG8gYW4gYWxyZWFkeS1ydW5uaW5nIHBpcGVsaW5lLCB5b3Ugd2lsbCBoYXZlIHRvCit0YWtlIGNhcmUgdG8gc2V0IHRoZSBzdGF0ZSBvZiB0aGUgbmV3bHktYWRkZWQgZWxlbWVudCB0byB0aGUgZGVzaXJlZAorc3RhdGUgKHVzdWFsbHkgUExBWUlORyBvciBQQVVTRUQsIHNhbWUgeW91IHNldCB0aGUgcGlwZWxpbmUgdG8gb3JpZ2luYWxseSkKK3dpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZXQtc3RhdGUiIHRpdGxlPSJnc3RfZWxlbWVudF9zZXRfc3RhdGUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfc2V0X3N0YXRlKCk8L2NvZGU+PC9hPiwgb3IgdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc3luYy1zdGF0ZS13aXRoLXBhcmVudCIgdGl0bGU9ImdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudCgpPC9jb2RlPjwvYT4uCitUaGUgYmluIG9yIHBpcGVsaW5lIHdpbGwgbm90IHRha2UgY2FyZSBvZiB0aGlzIGZvciB5b3UuCis8L2Rpdj4KKzxwPgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJpbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIGFkZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIGVsZW1lbnQgY291bGQgYmUgYWRkZWQsIEZBTFNFIGlmCit0aGUgYmluIGRvZXMgbm90IHdhbnQgdG8gYWNjZXB0IHRoZSBlbGVtZW50LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iaW4tcmVtb3ZlIj48L2E+PGgzPmdzdF9iaW5fcmVtb3ZlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9iaW5fcmVtb3ZlICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gKmJpbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlbW92ZXMgdGhlIGVsZW1lbnQgZnJvbSB0aGUgYmluLCB1bnBhcmVudGluZyBpdCBhcyB3ZWxsLgorVW5wYXJlbnRpbmcgdGhlIGVsZW1lbnQgbWVhbnMgdGhhdCB0aGUgZWxlbWVudCB3aWxsIGJlIGRlcmVmZXJlbmNlZCwKK3NvIGlmIHRoZSBiaW4gaG9sZHMgdGhlIG9ubHkgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50LCB0aGUgZWxlbWVudAord2lsbCBiZSBmcmVlZCBpbiB0aGUgcHJvY2VzcyBvZiByZW1vdmluZyBpdCBmcm9tIHRoZSBiaW4uICBJZiB5b3UKK3dhbnQgdGhlIGVsZW1lbnQgdG8gc3RpbGwgZXhpc3QgYWZ0ZXIgcmVtb3ZpbmcsIHlvdSBuZWVkIHRvIGNhbGwKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXJlZiIgdGl0bGU9ImdzdF9vYmplY3RfcmVmICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9vYmplY3RfcmVmKCk8L2NvZGU+PC9hPiBiZWZvcmUgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgYmluLgorPC9wPgorPHA+CitJZiB0aGUgZWxlbWVudCdzIHBhZHMgYXJlIGxpbmtlZCB0byBvdGhlciBwYWRzLCB0aGUgcGFkcyB3aWxsIGJlIHVubGlua2VkCitiZWZvcmUgdGhlIGVsZW1lbnQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBiaW4uCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YmluPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gcmVtb3ZlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiB0aGUgZWxlbWVudCBjb3VsZCBiZSByZW1vdmVkLCBGQUxTRSBpZgordGhlIGJpbiBkb2VzIG5vdCB3YW50IHRvIHJlbW92ZSB0aGUgZWxlbWVudC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYmluLWdldC1ieS1uYW1lIj48L2E+PGgzPmdzdF9iaW5fZ2V0X2J5X25hbWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqICAgICAgICBnc3RfYmluX2dldF9ieV9uYW1lICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+ICpiaW48L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBmcm9tIGEgYmluLiBUaGlzCitmdW5jdGlvbiByZWN1cnNlcyBpbnRvIGNoaWxkIGJpbnMuCis8L3A+Cis8cD4KK1JldHVybnMgTlVMTCBpZiBubyBlbGVtZW50IHdpdGggdGhlIGdpdmVuIG5hbWUgaXMgZm91bmQgaW4gdGhlIGJpbi4KKzwvcD4KKzxwPgorTVQgc2FmZS4gIENhbGxlciBvd25zIHJldHVybmVkIHJlZmVyZW5jZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iaW48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBlbGVtZW50IG5hbWUgdG8gc2VhcmNoIGZvcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB3aXRoIHRoZSBnaXZlbiBuYW1lLCBvciBOVUxMLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJpbi1nZXQtYnktbmFtZS1yZWN1cnNlLXVwIj48L2E+PGgzPmdzdF9iaW5fZ2V0X2J5X25hbWVfcmVjdXJzZV91cCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICogICAgICAgIGdzdF9iaW5fZ2V0X2J5X25hbWVfcmVjdXJzZV91cCAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gKmJpbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBuYW1lIGZyb20gdGhpcyBiaW4uIElmIHRoZQorZWxlbWVudCBpcyBub3QgZm91bmQsIGEgcmVjdXJzaW9uIGlzIHBlcmZvcm1lZCBvbiB0aGUgcGFyZW50IGJpbi4KKzwvcD4KKzxwPgorUmV0dXJucyBOVUxMIGlmOgorPC9wPgorPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+bm8gZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBuYW1lIGlzIGZvdW5kIGluIHRoZSBiaW48L3A+PC9saT48L3VsPjwvZGl2PgorPHA+Cis8L3A+Cis8cD4KK01UIHNhZmUuICBDYWxsZXIgb3ducyByZXR1cm5lZCByZWZlcmVuY2UuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YmluPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZWxlbWVudCBuYW1lIHRvIHNlYXJjaCBmb3I8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgb3IgTlVMTC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iaW4tZ2V0LWJ5LWludGVyZmFjZSI+PC9hPjxoMz5nc3RfYmluX2dldF9ieV9pbnRlcmZhY2UgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqICAgICAgICBnc3RfYmluX2dldF9ieV9pbnRlcmZhY2UgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+ICpiaW48L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IGlmYWNlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorTG9va3MgZm9yIGFuIGVsZW1lbnQgaW5zaWRlIHRoZSBiaW4gdGhhdCBpbXBsZW1lbnRzIHRoZSBnaXZlbgoraW50ZXJmYWNlLiBJZiBzdWNoIGFuIGVsZW1lbnQgaXMgZm91bmQsIGl0IHJldHVybnMgdGhlIGVsZW1lbnQuCitZb3UgY2FuIGNhc3QgdGhpcyBlbGVtZW50IHRvIHRoZSBnaXZlbiBpbnRlcmZhY2UgYWZ0ZXJ3YXJkcy4gIElmIHlvdSB3YW50CithbGwgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlIGludGVyZmFjZSwgdXNlCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjZ3N0LWJpbi1pdGVyYXRlLWFsbC1ieS1pbnRlcmZhY2UiIHRpdGxlPSJnc3RfYmluX2l0ZXJhdGVfYWxsX2J5X2ludGVyZmFjZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmluX2l0ZXJhdGVfYWxsX2J5X2ludGVyZmFjZSgpPC9jb2RlPjwvYT4uIFRoaXMgZnVuY3Rpb24gcmVjdXJzZXMgaW50byBjaGlsZCBiaW5zLgorPC9wPgorPHA+CitNVCBzYWZlLiAgQ2FsbGVyIG93bnMgcmV0dXJuZWQgcmVmZXJlbmNlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJpbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlmYWNlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gb2YgYW4gaW50ZXJmYWNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBpbnNpZGUgdGhlIGJpbiBpbXBsZW1lbnRpbmcgdGhlIGludGVyZmFjZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iaW4taXRlcmF0ZS1lbGVtZW50cyI+PC9hPjxoMz5nc3RfYmluX2l0ZXJhdGVfZWxlbWVudHMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICogICAgICAgZ3N0X2Jpbl9pdGVyYXRlX2VsZW1lbnRzICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiAqYmluPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyBhbiBpdGVyYXRvciBmb3IgdGhlIGVsZW1lbnRzIGluIHRoaXMgYmluLgorPC9wPgorPHA+CitFYWNoIGVsZW1lbnQgeWllbGRlZCBieSB0aGUgaXRlcmF0b3Igd2lsbCBoYXZlIGl0cyByZWZjb3VudCBpbmNyZWFzZWQsIHNvCit1bnJlZiBhZnRlciB1c2UuCis8L3A+Cis8cD4KK01UIHNhZmUuICBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iaW48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+LCBvciBOVUxMLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJpbi1pdGVyYXRlLXJlY3Vyc2UiPjwvYT48aDM+Z3N0X2Jpbl9pdGVyYXRlX3JlY3Vyc2UgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICogICAgICAgZ3N0X2Jpbl9pdGVyYXRlX3JlY3Vyc2UgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiAqYmluPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyBhbiBpdGVyYXRvciBmb3IgdGhlIGVsZW1lbnRzIGluIHRoaXMgYmluLgorVGhpcyBpdGVyYXRvciByZWN1cnNlcyBpbnRvIEdzdEJpbiBjaGlsZHJlbi4KKzwvcD4KKzxwPgorRWFjaCBlbGVtZW50IHlpZWxkZWQgYnkgdGhlIGl0ZXJhdG9yIHdpbGwgaGF2ZSBpdHMgcmVmY291bnQgaW5jcmVhc2VkLCBzbwordW5yZWYgYWZ0ZXIgdXNlLgorPC9wPgorPHA+CitNVCBzYWZlLiAgQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YmluPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiwgb3IgTlVMTC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iaW4taXRlcmF0ZS1zaW5rcyI+PC9hPjxoMz5nc3RfYmluX2l0ZXJhdGVfc2lua3MgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICogICAgICAgZ3N0X2Jpbl9pdGVyYXRlX3NpbmtzICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiAqYmluPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyBhbiBpdGVyYXRvciBmb3IgYWxsIGVsZW1lbnRzIGluIHRoZSBiaW4gdGhhdCBoYXZlIHRoZQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1JUy1TSU5LOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRUxFTUVOVF9JU19TSU5LPC9zcGFuPjwvYT4gZmxhZyBzZXQuCis8L3A+Cis8cD4KK0VhY2ggZWxlbWVudCB5aWVsZGVkIGJ5IHRoZSBpdGVyYXRvciB3aWxsIGhhdmUgaXRzIHJlZmNvdW50IGluY3JlYXNlZCwgc28KK3VucmVmIGFmdGVyIHVzZS4KKzwvcD4KKzxwPgorTVQgc2FmZS4gIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJpbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4sIG9yIE5VTEwuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYmluLWl0ZXJhdGUtc29ydGVkIj48L2E+PGgzPmdzdF9iaW5faXRlcmF0ZV9zb3J0ZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICogICAgICAgZ3N0X2Jpbl9pdGVyYXRlX3NvcnRlZCAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiAqYmluPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyBhbiBpdGVyYXRvciBmb3IgdGhlIGVsZW1lbnRzIGluIHRoaXMgYmluIGluIHRvcG9sb2dpY2FsbHkKK3NvcnRlZCBvcmRlci4gVGhpcyBtZWFucyB0aGF0IHRoZSBlbGVtZW50cyBhcmUgcmV0dXJuZWQgZnJvbQordGhlIG1vc3QgZG93bnN0cmVhbSBlbGVtZW50cyAoc2lua3MpIHRvIHRoZSBzb3VyY2VzLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW50ZXJuYWxseSB0byBwZXJmb3JtIHRoZSBzdGF0ZSBjaGFuZ2VzCitvZiB0aGUgYmluIGVsZW1lbnRzIGFuZCBmb3IgY2xvY2sgc2VsZWN0aW9uLgorPC9wPgorPHA+CitFYWNoIGVsZW1lbnQgeWllbGRlZCBieSB0aGUgaXRlcmF0b3Igd2lsbCBoYXZlIGl0cyByZWZjb3VudCBpbmNyZWFzZWQsIHNvCit1bnJlZiBhZnRlciB1c2UuCis8L3A+Cis8cD4KK01UIHNhZmUuICBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iaW48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+LCBvciBOVUxMLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJpbi1pdGVyYXRlLXNvdXJjZXMiPjwvYT48aDM+Z3N0X2Jpbl9pdGVyYXRlX3NvdXJjZXMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICogICAgICAgZ3N0X2Jpbl9pdGVyYXRlX3NvdXJjZXMgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiAqYmluPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyBhbiBpdGVyYXRvciBmb3IgYWxsIGVsZW1lbnRzIGluIHRoZSBiaW4gdGhhdCBoYXZlIHRoZQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1JUy1TT1VSQ0U6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9FTEVNRU5UX0lTX1NPVVJDRTwvc3Bhbj48L2E+IGZsYWcgc2V0LgorPC9wPgorPHA+CitFYWNoIGVsZW1lbnQgeWllbGRlZCBieSB0aGUgaXRlcmF0b3Igd2lsbCBoYXZlIGl0cyByZWZjb3VudCBpbmNyZWFzZWQsIHNvCit1bnJlZiBhZnRlciB1c2UuCis8L3A+Cis8cD4KK01UIHNhZmUuICBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iaW48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+LCBvciBOVUxMLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJpbi1pdGVyYXRlLWFsbC1ieS1pbnRlcmZhY2UiPjwvYT48aDM+Z3N0X2Jpbl9pdGVyYXRlX2FsbF9ieV9pbnRlcmZhY2UgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICogICAgICAgZ3N0X2Jpbl9pdGVyYXRlX2FsbF9ieV9pbnRlcmZhY2UgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiAqYmluPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiBpZmFjZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0xvb2tzIGZvciBhbGwgZWxlbWVudHMgaW5zaWRlIHRoZSBiaW4gdGhhdCBpbXBsZW1lbnRzIHRoZSBnaXZlbgoraW50ZXJmYWNlLiBZb3UgY2FuIHNhZmVseSBjYXN0IGFsbCByZXR1cm5lZCBlbGVtZW50cyB0byB0aGUgZ2l2ZW4gaW50ZXJmYWNlLgorVGhlIGZ1bmN0aW9uIHJlY3Vyc2VzIGluc2lkZSBjaGlsZCBiaW5zLiBUaGUgaXRlcmF0b3Igd2lsbCB5aWVsZCBhIHNlcmllcworb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdGhhdCBzaG91bGQgYmUgdW5yZWZmZWQgYWZ0ZXIgdXNlLgorPC9wPgorPHA+CitFYWNoIGVsZW1lbnQgeWllbGRlZCBieSB0aGUgaXRlcmF0b3Igd2lsbCBoYXZlIGl0cyByZWZjb3VudCBpbmNyZWFzZWQsIHNvCit1bnJlZiBhZnRlciB1c2UuCis8L3A+Cis8cD4KK01UIHNhZmUuICBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iaW48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZmFjZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IG9mIGFuIGludGVyZmFjZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBmb3IgYWxsIGVsZW1lbnRzCitpbiB0aGUgYmluIGltcGxlbWVudGluZyB0aGUgZ2l2ZW4gaW50ZXJmYWNlLCBvciBOVUxMLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJpbi1yZWNhbGN1bGF0ZS1sYXRlbmN5Ij48L2E+PGgzPmdzdF9iaW5fcmVjYWxjdWxhdGVfbGF0ZW5jeSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYmluX3JlY2FsY3VsYXRlX2xhdGVuY3kgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+ICpiaW48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitRdWVyeSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YmluPC9jb2RlPjwvZW0+IGZvciB0aGUgY3VycmVudCBsYXRlbmN5IHVzaW5nIGFuZCByZWNvbmZpZ3VyZXMgdGhpcyBsYXRlbmN5IHRvIGFsbCB0aGUKK2VsZW1lbnRzIHdpdGggYSBMQVRFTkNZIGV2ZW50LgorPC9wPgorPHA+CitUaGlzIG1ldGhvZCBpcyB0eXBpY2FsbHkgY2FsbGVkIG9uIHRoZSBwaXBlbGluZSB3aGVuIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtTEFURU5DWTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX01FU1NBR0VfTEFURU5DWTwvc3Bhbj48L2E+CitpcyBwb3N0ZWQgb24gdGhlIGJ1cy4KKzwvcD4KKzxwPgorVGhpcyBmdW5jdGlvbiBzaW1wbHkgZW1pdHMgdGhlICdkby1sYXRlbmN5JyBzaWduYWwgc28gYW55IGN1c3RvbSBsYXRlbmN5CitjYWxjdWxhdGlvbnMgd2lsbCBiZSBwZXJmb3JtZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YmluPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGxhdGVuY3kgY291bGQgYmUgcXVlcmllZCBhbmQgcmVjb25maWd1cmVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjIuPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYmluLWFkZC1tYW55Ij48L2E+PGgzPmdzdF9iaW5fYWRkX21hbnkgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2Jpbl9hZGRfbWFueSAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiAqYmluPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50XzE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQWRkcyBhIE5VTEwtdGVybWluYXRlZCBsaXN0IG9mIGVsZW1lbnRzIHRvIGEgYmluLiAgVGhpcyBmdW5jdGlvbiBpcworZXF1aXZhbGVudCB0byBjYWxsaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWFkZCIgdGl0bGU9ImdzdF9iaW5fYWRkICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iaW5fYWRkKCk8L2NvZGU+PC9hPiBmb3IgZWFjaCBtZW1iZXIgb2YgdGhlIGxpc3QuIFRoZSByZXR1cm4KK3ZhbHVlIG9mIGVhY2ggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI2dzdC1iaW4tYWRkIiB0aXRsZT0iZ3N0X2Jpbl9hZGQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Jpbl9hZGQoKTwvY29kZT48L2E+IGlzIGlnbm9yZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YmluPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudF8xPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBlbGVtZW50IHRvIGFkZCB0byB0aGUgYmluLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YWRkaXRpb25hbCBlbGVtZW50cyB0byBhZGQgdG8gdGhlIGJpbi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iaW4tcmVtb3ZlLW1hbnkiPjwvYT48aDM+Z3N0X2Jpbl9yZW1vdmVfbWFueSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYmluX3JlbW92ZV9tYW55ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+ICpiaW48L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnRfMTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZW1vdmUgYSBsaXN0IG9mIGVsZW1lbnRzIGZyb20gYSBiaW4uIFRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudAordG8gY2FsbGluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjZ3N0LWJpbi1yZW1vdmUiIHRpdGxlPSJnc3RfYmluX3JlbW92ZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmluX3JlbW92ZSgpPC9jb2RlPjwvYT4gd2l0aCBlYWNoIG1lbWJlciBvZiB0aGUgbGlzdC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iaW48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50XzE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGZpcnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIHJlbW92ZSBmcm9tIHRoZSBiaW4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5OVUxMLXRlcm1pbmF0ZWQgbGlzdCBvZiBlbGVtZW50cyB0byByZW1vdmUgZnJvbSB0aGUgYmluLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJpbi1maW5kLXVubGlua2VkLXBhZCI+PC9hPjxoMz5nc3RfYmluX2ZpbmRfdW5saW5rZWRfcGFkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkPC9zcGFuPjwvYT4gKiAgICAgICAgICAgIGdzdF9iaW5fZmluZF91bmxpbmtlZF9wYWQgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gKmJpbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRGlyZWN0aW9uIiB0aXRsZT0iZW51bSBHc3RQYWREaXJlY3Rpb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWREaXJlY3Rpb248L3NwYW4+PC9hPiBkaXJlY3Rpb248L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWN1cnNpdmVseSBsb29rcyBmb3IgZWxlbWVudHMgd2l0aCBhbiB1bmxpbmtlZCBwYWQgb2YgdGhlIGdpdmVuCitkaXJlY3Rpb24gd2l0aGluIHRoZSBzcGVjaWZpZWQgYmluIGFuZCByZXR1cm5zIGFuIHVubGlua2VkIHBhZAoraWYgb25lIGlzIGZvdW5kLCBvciBOVUxMIG90aGVyd2lzZS4gSWYgYSBwYWQgaXMgZm91bmQsIHRoZSBjYWxsZXIKK293bnMgYSByZWZlcmVuY2UgdG8gaXQgYW5kIHNob3VsZCB1c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtdW5yZWYiIHRpdGxlPSJnc3Rfb2JqZWN0X3VucmVmICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9vYmplY3RfdW5yZWYoKTwvY29kZT48L2E+IG9uIHRoZQorcGFkIHdoZW4gaXQgaXMgbm90IG5lZWRlZCBhbnkgbG9uZ2VyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJpbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5iaW4gaW4gd2hpY2ggdG8gbG9vayBmb3IgZWxlbWVudHMgd2l0aCB1bmxpbmtlZCBwYWRzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kaXJlY3Rpb248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+d2hldGhlciB0byBsb29rIGZvciBhbiB1bmxpbmtlZCBzb3VyY2Ugb3Igc2luayBwYWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51bmxpbmtlZCBwYWQgb2YgdGhlIGdpdmVuIGRpcmVjdGlvbiwgb3IgTlVMTC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEJpbkZsYWdzIj48L2E+PGgzPmVudW0gR3N0QmluRmxhZ3M8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIC8qIHBhZGRpbmcgKi8KKyAgR1NUX0JJTl9GTEFHX0xBU1QJCT0gKEdTVF9FTEVNRU5UX0ZMQUdfTEFTVCAmbHQ7Jmx0OyA1KQorfSBHc3RCaW5GbGFnczsKKzwvcHJlPgorPHA+CitHc3RCaW5GbGFncyBhcmUgYSBzZXQgb2YgZmxhZ3Mgc3BlY2lmaWMgdG8gYmlucy4gTW9zdCBhcmUgc2V0L3VzZWQKK2ludGVybmFsbHkuIFRoZXkgY2FuIGJlIGNoZWNrZWQgdXNpbmcgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULUZMQUctSVMtU0VUOkNBUFMiIHRpdGxlPSJHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R1NUX09CSkVDVF9GTEFHX0lTX1NFVCgpPC9jb2RlPjwvYT4gbWFjcm8sCithbmQgKHVuKXNldCB1c2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1GTEFHLVNFVDpDQVBTIiB0aXRsZT0iR1NUX09CSkVDVF9GTEFHX1NFVCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdTVF9PQkpFQ1RfRkxBR19TRVQoKTwvY29kZT48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1GTEFHLVVOU0VUOkNBUFMiIHRpdGxlPSJHU1RfT0JKRUNUX0ZMQUdfVU5TRVQoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5HU1RfT0JKRUNUX0ZMQUdfVU5TRVQoKTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUJJTi1GTEFHLUxBU1Q6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0JJTl9GTEFHX0xBU1Q8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBsYXN0IGVudW0gaW4gdGhlIHNlcmllcyBvZiBmbGFncyBmb3IgYmlucy4KK0Rlcml2ZWQgY2xhc3NlcyBjYW4gdXNlIHRoaXMgYXMgZmlyc3QgdmFsdWUgaW4gYSBsaXN0IG9mIGZsYWdzLgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1CSU4tQ0hJTERSRU46Q0FQUyI+PC9hPjxoMz5HU1RfQklOX0NISUxEUkVOKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0JJTl9DSElMRFJFTihiaW4pCQkoR1NUX0JJTl9DQVNUKGJpbiktJmd0O2NoaWxkcmVuKQorPC9wcmU+Cis8cD4KK0dldHMgdGhlIGxpc3Qgd2l0aCBjaGlsZHJlbiBpbiBhIGJpbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YmluPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQklOLUNISUxEUkVOLUNPT0tJRTpDQVBTIj48L2E+PGgzPkdTVF9CSU5fQ0hJTERSRU5fQ09PS0lFKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0JJTl9DSElMRFJFTl9DT09LSUUoYmluKcKgKEdTVF9CSU5fQ0FTVChiaW4pLSZndDtjaGlsZHJlbl9jb29raWUpCis8L3ByZT4KKzxwPgorR2V0cyB0aGUgY2hpbGRyZW4gY29va2llIHRoYXQgd2F0Y2hlcyB0aGUgY2hpbGRyZW4gbGlzdC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YmluPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQklOLU5VTUNISUxEUkVOOkNBUFMiPjwvYT48aDM+R1NUX0JJTl9OVU1DSElMRFJFTigpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CSU5fTlVNQ0hJTERSRU4oYmluKcKgKEdTVF9CSU5fQ0FTVChiaW4pLSZndDtudW1jaGlsZHJlbikKKzwvcHJlPgorPHA+CitHZXRzIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gaW4gYSBiaW4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJpbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RCaW4ucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEJpbi0tYXN5bmMtaGFuZGxpbmciPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4iYXN5bmMtaGFuZGxpbmciPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiYXN5bmMtaGFuZGxpbmciICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+CitJZiBzZXQgdG8gPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5UUlVFPC9zcGFuPjwvYT4sIHRoZSBiaW4gd2lsbCBoYW5kbGUgYXN5bmNocm9ub3VzIHN0YXRlIGNoYW5nZXMuCitUaGlzIHNob3VsZCBiZSB1c2VkIG9ubHkgaWYgdGhlIGJpbiBzdWJjbGFzcyBpcyBtb2RpZnlpbmcgdGhlIHN0YXRlCitvZiBpdHMgY2hpbGRyZW4gb24gaXRzIG93bi4KKzwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjEzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RCaW4tLW1lc3NhZ2UtZm9yd2FyZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJtZXNzYWdlLWZvcndhcmQiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAibWVzc2FnZS1mb3J3YXJkIiAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+CitGb3J3YXJkIGFsbCBjaGlsZHJlbiBtZXNzYWdlcywgZXZlbiB0aG9zZSB0aGF0IHdvdWxkIG5vcm1hbGx5IGJlIGZpbHRlcmVkIGJ5Cit0aGUgYmluLiBUaGlzIGNhbiBiZSBpbnRlcmVzdGluZyB3aGVuIG9uZSB3YW50cyB0byBiZSBub3RpZmllZCBvZiB0aGUgRU9TCitzdGF0ZSBvZiBpbmRpdmlkdWFsIGVsZW1lbnRzLCBmb3IgZXhhbXBsZS4KKzwvcD4KKzxwPgorVGhlIG1lc3NhZ2VzIGFyZSBjb252ZXJ0ZWQgdG8gYW4gRUxFTUVOVCBtZXNzYWdlIHdpdGggdGhlIGJpbiBhcyB0aGUKK3NvdXJjZS4gVGhlIHN0cnVjdHVyZSBvZiB0aGUgbWVzc2FnZSBpcyBuYW1lZCAnR3N0QmluRm9yd2FyZGVkJyBhbmQgY29udGFpbnMKK2EgZmllbGQgbmFtZWQgJ21lc3NhZ2UnIG9mIHR5cGUgR1NUX1RZUEVfTUVTU0FHRSB0aGF0IGNvbnRhaW5zIHRoZSBvcmlnaW5hbAorZm9yd2FyZGVkIG1lc3NhZ2UuCis8L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RCaW4uc2lnbmFsLWRldGFpbHMiPjwvYT48aDI+U2lnbmFsIERldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0QmluLWRvLWxhdGVuY3kiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4iZG8tbGF0ZW5jeSI8L2NvZGU+IHNpZ25hbDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICB1c2VyX2Z1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiAgKmJpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGEpICAgICAgOiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+UnVuIExhc3Q8L2NvZGU+PC9hPjwvcHJlPgorPHA+CitXaWxsIGJlIGVtaXR0ZWQgd2hlbiB0aGUgYmluIG5lZWRzIHRvIHBlcmZvcm0gbGF0ZW5jeSBjYWxjdWxhdGlvbnMuIFRoaXMKK3NpZ25hbCBpcyBvbmx5IGVtaXRlZCBmb3IgdG9wbGV2ZWwgYmlucyBvciB3aGVuIGFzeW5jLWhhbmRsaW5nIGlzCitlbmFibGVkLgorPC9wPgorPHA+CitPbmx5IG9uZSBzaWduYWwgaGFuZGxlciBpcyBpbnZva2VkLiBJZiBubyBzaWduYWxzIGFyZSBjb25uZWN0ZWQsIHRoZQorZGVmYXVsdCBoYW5kbGVyIGlzIGludm9rZWQsIHdoaWNoIHdpbGwgcXVlcnkgYW5kIGRpc3RyaWJ1dGUgdGhlIGxvd2VzdAorcG9zc2libGUgbGF0ZW5jeSB0byBhbGwgc2lua3MuCis8L3A+Cis8cD4KK0Nvbm5lY3QgdG8gdGhpcyBzaWduYWwgaWYgdGhlIGRlZmF1bHQgbGF0ZW5jeSBjYWxjdWxhdGlvbnMgYXJlIG5vdAorc3VmZmljaWVudCwgbGlrZSB3aGVuIHlvdSBuZWVkIGRpZmZlcmVudCBsYXRlbmNpZXMgZm9yIGRpZmZlcmVudCBzaW5rcyBpbgordGhlIHNhbWUgcGlwZWxpbmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YmluPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEJpbi1lbGVtZW50LWFkZGVkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImVsZW1lbnQtYWRkZWQiPC9jb2RlPiBzaWduYWw8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgdXNlcl9mdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gICAgICpiaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgIHVzZXJfZGF0YSkgICAgICA6IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1GSVJTVDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+UnVuIEZpcnN0PC9jb2RlPjwvYT48L3ByZT4KKzxwPgorV2lsbCBiZSBlbWl0dGVkIGFmdGVyIHRoZSBlbGVtZW50IHdhcyBhZGRlZCB0byB0aGUgYmluLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJpbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdGhhdCB3YXMgYWRkZWQgdG8gdGhlIGJpbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RCaW4tZWxlbWVudC1yZW1vdmVkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImVsZW1lbnQtcmVtb3ZlZCI8L2NvZGU+IHNpZ25hbDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICB1c2VyX2Z1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiAgICAgKmJpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgdXNlcl9kYXRhKSAgICAgIDogPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUZJUlNUOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5SdW4gRmlyc3Q8L2NvZGU+PC9hPjwvcHJlPgorPHA+CitXaWxsIGJlIGVtaXR0ZWQgYWZ0ZXIgdGhlIGVsZW1lbnQgd2FzIHJlbW92ZWQgZnJvbSB0aGUgYmluLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJpbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdGhhdCB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBiaW48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL0dzdEJ1cy5odG1sIGIvZG9jcy9nc3QvaHRtbC9Hc3RCdXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWQ5M2RhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9nc3QvaHRtbC9Hc3RCdXMuaHRtbApAQCAtMCwwICsxLDExNDQgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5Hc3RCdXM8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI0dzdEJ1cy5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEJ1cy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0QnVzLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0QnVzLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0QnVzLnNpZ25hbHMiIGNsYXNzPSJzaG9ydGN1dCI+U2lnbmFsczwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJHc3RCdXMiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RCdXMudG9wX29mX3BhZ2UiPjwvYT5Hc3RCdXM8L3NwYW4+PC9oMj4KKzxwPkdzdEJ1cyDigJQgQXN5bmNocm9ub3VzIG1lc3NhZ2UgYnVzIHN1YnN5c3RlbTwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9IkdzdEJ1cy5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisjaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OworCitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNHc3RCdXMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEJ1cyI+R3N0QnVzPC9hPjsKK2VudW0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI0dzdEJ1c0ZsYWdzIiB0aXRsZT0iZW51bSBHc3RCdXNGbGFncyI+R3N0QnVzRmxhZ3M8L2E+OworZW51bSAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjR3N0QnVzU3luY1JlcGx5IiB0aXRsZT0iZW51bSBHc3RCdXNTeW5jUmVwbHkiPkdzdEJ1c1N5bmNSZXBseTwvYT47Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjR3N0QnVzRnVuYyIgdGl0bGU9IkdzdEJ1c0Z1bmMgKCkiPipHc3RCdXNGdW5jPC9hPikgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gKmJ1czwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBkYXRhPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNHc3RCdXNTeW5jUmVwbHkiIHRpdGxlPSJlbnVtIEdzdEJ1c1N5bmNSZXBseSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdXNTeW5jUmVwbHk8L3NwYW4+PC9hPiAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNHc3RCdXNTeW5jSGFuZGxlciIgdGl0bGU9IkdzdEJ1c1N5bmNIYW5kbGVyICgpIj4qR3N0QnVzU3luY0hhbmRsZXI8L2E+KSAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+ICpidXM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVzPC9zcGFuPjwvYT4gKiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLW5ldyIgdGl0bGU9ImdzdF9idXNfbmV3ICgpIj5nc3RfYnVzX25ldzwvYT4gICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1wb3N0IiB0aXRsZT0iZ3N0X2J1c19wb3N0ICgpIj5nc3RfYnVzX3Bvc3Q8L2E+ICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiAqYnVzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLWhhdmUtcGVuZGluZyIgdGl0bGU9ImdzdF9idXNfaGF2ZV9wZW5kaW5nICgpIj5nc3RfYnVzX2hhdmVfcGVuZGluZzwvYT4gICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiAqYnVzPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtcGVlayIgdGl0bGU9ImdzdF9idXNfcGVlayAoKSI+Z3N0X2J1c19wZWVrPC9hPiAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gKmJ1czwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXBvcCIgdGl0bGU9ImdzdF9idXNfcG9wICgpIj5nc3RfYnVzX3BvcDwvYT4gICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiAqYnVzPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtcG9wLWZpbHRlcmVkIiB0aXRsZT0iZ3N0X2J1c19wb3BfZmlsdGVyZWQgKCkiPmdzdF9idXNfcG9wX2ZpbHRlcmVkPC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+ICpidXM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZVR5cGUiIHRpdGxlPSJlbnVtIEdzdE1lc3NhZ2VUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZVR5cGU8L3NwYW4+PC9hPiB0eXBlczwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXRpbWVkLXBvcCIgdGl0bGU9ImdzdF9idXNfdGltZWRfcG9wICgpIj5nc3RfYnVzX3RpbWVkX3BvcDwvYT4gICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiAqYnVzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRpbWVvdXQ8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy10aW1lZC1wb3AtZmlsdGVyZWQiIHRpdGxlPSJnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZCAoKSI+Z3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQ8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gKmJ1czwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lb3V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2VUeXBlIiB0aXRsZT0iZW51bSBHc3RNZXNzYWdlVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2VUeXBlPC9zcGFuPjwvYT4gdHlwZXM8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1zZXQtZmx1c2hpbmciIHRpdGxlPSJnc3RfYnVzX3NldF9mbHVzaGluZyAoKSI+Z3N0X2J1c19zZXRfZmx1c2hpbmc8L2E+ICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gKmJ1czwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGZsdXNoaW5nPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtc2V0LXN5bmMtaGFuZGxlciIgdGl0bGU9ImdzdF9idXNfc2V0X3N5bmNfaGFuZGxlciAoKSI+Z3N0X2J1c19zZXRfc3luY19oYW5kbGVyPC9hPiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gKmJ1czwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjR3N0QnVzU3luY0hhbmRsZXIiIHRpdGxlPSJHc3RCdXNTeW5jSGFuZGxlciAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1c1N5bmNIYW5kbGVyPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGRhdGE8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI0dzdEJ1c1N5bmNSZXBseSIgdGl0bGU9ImVudW0gR3N0QnVzU3luY1JlcGx5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1c1N5bmNSZXBseTwvc3Bhbj48L2E+ICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1zeW5jLXNpZ25hbC1oYW5kbGVyIiB0aXRsZT0iZ3N0X2J1c19zeW5jX3NpZ25hbF9oYW5kbGVyICgpIj5nc3RfYnVzX3N5bmNfc2lnbmFsX2hhbmRsZXI8L2E+ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiAqYnVzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGRhdGE8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1UaGUtTWFpbi1FdmVudC1Mb29wLmh0bWwjR1NvdXJjZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HU291cmNlPC9zcGFuPjwvYT4gKiAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtY3JlYXRlLXdhdGNoIiB0aXRsZT0iZ3N0X2J1c19jcmVhdGVfd2F0Y2ggKCkiPmdzdF9idXNfY3JlYXRlX3dhdGNoPC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+ICpidXM8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1hZGQtd2F0Y2gtZnVsbCIgdGl0bGU9ImdzdF9idXNfYWRkX3dhdGNoX2Z1bGwgKCkiPmdzdF9idXNfYWRkX3dhdGNoX2Z1bGw8L2E+ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+ICpidXM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gcHJpb3JpdHk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI0dzdEJ1c0Z1bmMiIHRpdGxlPSJHc3RCdXNGdW5jICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzRnVuYzwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1EYXRhc2V0cy5odG1sI0dEZXN0cm95Tm90aWZ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R0Rlc3Ryb3lOb3RpZnk8L3NwYW4+PC9hPiBub3RpZnk8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1hZGQtd2F0Y2giIHRpdGxlPSJnc3RfYnVzX2FkZF93YXRjaCAoKSI+Z3N0X2J1c19hZGRfd2F0Y2g8L2E+ICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gKmJ1czwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjR3N0QnVzRnVuYyIgdGl0bGU9IkdzdEJ1c0Z1bmMgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXNGdW5jPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLWRpc2FibGUtc3luYy1tZXNzYWdlLWVtaXNzaW9uIiB0aXRsZT0iZ3N0X2J1c19kaXNhYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbiAoKSI+Z3N0X2J1c19kaXNhYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiAqYnVzPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtZW5hYmxlLXN5bmMtbWVzc2FnZS1lbWlzc2lvbiIgdGl0bGU9ImdzdF9idXNfZW5hYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbiAoKSI+Z3N0X2J1c19lbmFibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+ICpidXM8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1hc3luYy1zaWduYWwtZnVuYyIgdGl0bGU9ImdzdF9idXNfYXN5bmNfc2lnbmFsX2Z1bmMgKCkiPmdzdF9idXNfYXN5bmNfc2lnbmFsX2Z1bmM8L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+ICpidXM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLWFkZC1zaWduYWwtd2F0Y2giIHRpdGxlPSJnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2ggKCkiPmdzdF9idXNfYWRkX3NpZ25hbF93YXRjaDwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+ICpidXM8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1hZGQtc2lnbmFsLXdhdGNoLWZ1bGwiIHRpdGxlPSJnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2hfZnVsbCAoKSI+Z3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoX2Z1bGw8L2E+ICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gKmJ1czwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBwcmlvcml0eTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXJlbW92ZS1zaWduYWwtd2F0Y2giIHRpdGxlPSJnc3RfYnVzX3JlbW92ZV9zaWduYWxfd2F0Y2ggKCkiPmdzdF9idXNfcmVtb3ZlX3NpZ25hbF93YXRjaDwvYT4gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+ICpidXM8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1wb2xsIiB0aXRsZT0iZ3N0X2J1c19wb2xsICgpIj5nc3RfYnVzX3BvbGw8L2E+ICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiAqYnVzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2VUeXBlIiB0aXRsZT0iZW51bSBHc3RNZXNzYWdlVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2VUeXBlPC9zcGFuPjwvYT4gZXZlbnRzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZURpZmYiIHRpdGxlPSJHc3RDbG9ja1RpbWVEaWZmIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lRGlmZjwvc3Bhbj48L2E+IHRpbWVvdXQ8L2NvZGU+PC9lbT4pOworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdEJ1cy5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+R09iamVjdDwvYT4KKyAgICstLS0tPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KKyAgICAgICAgICstLS0tPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+CisgICAgICAgICAgICAgICArLS0tLUdzdEJ1cworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdEJ1cy5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI0dzdEJ1cy0tZW5hYmxlLWFzeW5jIiB0aXRsZT0nVGhlICJlbmFibGUtYXN5bmMiIHByb3BlcnR5Jz5lbmFibGUtYXN5bmM8L2E+IiAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFdyaXRlIC8gQ29uc3RydWN0IE9ubHkKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RCdXMuc2lnbmFscyI+PC9hPjxoMj5TaWduYWxzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNHc3RCdXMtbWVzc2FnZSIgdGl0bGU9J1RoZSAibWVzc2FnZSIgc2lnbmFsJz5tZXNzYWdlPC9hPiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1ERVRBSUxFRDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+SGFzIERldGFpbHM8L2NvZGU+PC9hPgorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI0dzdEJ1cy1zeW5jLW1lc3NhZ2UiIHRpdGxlPSdUaGUgInN5bmMtbWVzc2FnZSIgc2lnbmFsJz5zeW5jLW1lc3NhZ2U8L2E+IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1ERVRBSUxFRDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+SGFzIERldGFpbHM8L2NvZGU+PC9hPgorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdEJ1cy5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK1RoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiBpcyBhbiBvYmplY3QgcmVzcG9uc2libGUgZm9yIGRlbGl2ZXJpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IHBhY2tldHMgaW4KK2EgZmlyc3QtaW4gZmlyc3Qtb3V0IHdheSBmcm9tIHRoZSBzdHJlYW1pbmcgdGhyZWFkcyAoc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+KSB0byB0aGUKK2FwcGxpY2F0aW9uLgorPC9wPgorPHA+CitTaW5jZSB0aGUgYXBwbGljYXRpb24gdHlwaWNhbGx5IG9ubHkgd2FudHMgdG8gZGVhbCB3aXRoIGRlbGl2ZXJ5IG9mIHRoZXNlCittZXNzYWdlcyBmcm9tIG9uZSB0aHJlYWQsIHRoZSBHc3RCdXMgd2lsbCBtYXJzaGFsbCB0aGUgbWVzc2FnZXMgYmV0d2VlbgorZGlmZmVyZW50IHRocmVhZHMuIFRoaXMgaXMgaW1wb3J0YW50IHNpbmNlIHRoZSBhY3R1YWwgc3RyZWFtaW5nIG9mIG1lZGlhCitpcyBkb25lIGluIGFub3RoZXIgdGhyZWFkIHRoYW4gdGhlIGFwcGxpY2F0aW9uLgorPC9wPgorPHA+CitUaGUgR3N0QnVzIHByb3ZpZGVzIHN1cHBvcnQgZm9yIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItVGhlLU1haW4tRXZlbnQtTG9vcC5odG1sI0dTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU291cmNlPC9zcGFuPjwvYT4gYmFzZWQgbm90aWZpY2F0aW9ucy4gVGhpcyBtYWtlcyBpdAorcG9zc2libGUgdG8gaGFuZGxlIHRoZSBkZWxpdmVyeSBpbiB0aGUgZ2xpYiBtYWlubG9vcC4KKzwvcD4KKzxwPgorVGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItVGhlLU1haW4tRXZlbnQtTG9vcC5odG1sI0dTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU291cmNlPC9zcGFuPjwvYT4gY2FsbGJhY2sgZnVuY3Rpb24gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtYXN5bmMtc2lnbmFsLWZ1bmMiIHRpdGxlPSJnc3RfYnVzX2FzeW5jX3NpZ25hbF9mdW5jICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idXNfYXN5bmNfc2lnbmFsX2Z1bmMoKTwvY29kZT48L2E+IGNhbiBiZSB1c2VkIHRvCitjb252ZXJ0IGFsbCBidXMgbWVzc2FnZXMgaW50byBzaWduYWwgZW1pc3Npb25zLgorPC9wPgorPHA+CitBIG1lc3NhZ2UgaXMgcG9zdGVkIG9uIHRoZSBidXMgd2l0aCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtcG9zdCIgdGl0bGU9ImdzdF9idXNfcG9zdCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVzX3Bvc3QoKTwvY29kZT48L2E+IG1ldGhvZC4gV2l0aCB0aGUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXBlZWsiIHRpdGxlPSJnc3RfYnVzX3BlZWsgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1c19wZWVrKCk8L2NvZGU+PC9hPiBhbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtcG9wIiB0aXRsZT0iZ3N0X2J1c19wb3AgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1c19wb3AoKTwvY29kZT48L2E+IG1ldGhvZHMgb25lIGNhbiBsb29rIGF0IG9yIHJldHJpZXZlIGEKK3ByZXZpb3VzbHkgcG9zdGVkIG1lc3NhZ2UuCis8L3A+Cis8cD4KK1RoZSBidXMgY2FuIGJlIHBvbGxlZCB3aXRoIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1wb2xsIiB0aXRsZT0iZ3N0X2J1c19wb2xsICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idXNfcG9sbCgpPC9jb2RlPjwvYT4gbWV0aG9kLiBUaGlzIG1ldGhvZHMgYmxvY2tzCit1cCB0byB0aGUgc3BlY2lmaWVkIHRpbWVvdXQgdmFsdWUgdW50aWwgb25lIG9mIHRoZSBzcGVjaWZpZWQgbWVzc2FnZXMgdHlwZXMKK2lzIHBvc3RlZCBvbiB0aGUgYnVzLiBUaGUgYXBwbGljYXRpb24gY2FuIHRoZW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtcG9wIiB0aXRsZT0iZ3N0X2J1c19wb3AgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1c19wb3AoKTwvY29kZT48L2E+IHRoZSBtZXNzYWdlcworZnJvbSB0aGUgYnVzIHRvIGhhbmRsZSB0aGVtLgorQWx0ZXJuYXRpdmVseSB0aGUgYXBwbGljYXRpb24gY2FuIHJlZ2lzdGVyIGFuIGFzeW5jaHJvbm91cyBidXMgZnVuY3Rpb24KK3VzaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLWFkZC13YXRjaC1mdWxsIiB0aXRsZT0iZ3N0X2J1c19hZGRfd2F0Y2hfZnVsbCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVzX2FkZF93YXRjaF9mdWxsKCk8L2NvZGU+PC9hPiBvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1hZGQtd2F0Y2giIHRpdGxlPSJnc3RfYnVzX2FkZF93YXRjaCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVzX2FkZF93YXRjaCgpPC9jb2RlPjwvYT4uIFRoaXMgZnVuY3Rpb24gd2lsbAoraW5zdGFsbCBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItVGhlLU1haW4tRXZlbnQtTG9vcC5odG1sI0dTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU291cmNlPC9zcGFuPjwvYT4gaW4gdGhlIGRlZmF1bHQgZ2xpYiBtYWluIGxvb3AgYW5kIHdpbGwgZGVsaXZlciBtZXNzYWdlcworYSBzaG9ydCB3aGlsZSBhZnRlciB0aGV5IGhhdmUgYmVlbiBwb3N0ZWQuIE5vdGUgdGhhdCB0aGUgbWFpbiBsb29wIHNob3VsZAorYmUgcnVubmluZyBmb3IgdGhlIGFzeW5jaHJvbm91cyBjYWxsYmFja3MuCis8L3A+Cis8cD4KK0l0IGlzIGFsc28gcG9zc2libGUgdG8gZ2V0IG1lc3NhZ2VzIGZyb20gdGhlIGJ1cyB3aXRob3V0IGFueSB0aHJlYWQKK21hcnNoYWxsaW5nIHdpdGggdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXNldC1zeW5jLWhhbmRsZXIiIHRpdGxlPSJnc3RfYnVzX3NldF9zeW5jX2hhbmRsZXIgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1c19zZXRfc3luY19oYW5kbGVyKCk8L2NvZGU+PC9hPiBtZXRob2QuIFRoaXMgbWFrZXMgaXQKK3Bvc3NpYmxlIHRvIHJlYWN0IHRvIGEgbWVzc2FnZSBpbiB0aGUgc2FtZSB0aHJlYWQgdGhhdCBwb3N0ZWQgdGhlCittZXNzYWdlIG9uIHRoZSBidXMuIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB0aGUgYXBwbGljYXRpb24gaXMgYWJsZQordG8gZGVhbCB3aXRoIG1lc3NhZ2VzIGZyb20gZGlmZmVyZW50IHRocmVhZHMuCis8L3A+Cis8cD4KK0V2ZXJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+IGhhcyBvbmUgYnVzLgorPC9wPgorPHA+CitOb3RlIHRoYXQgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPiB3aWxsIHNldCBpdHMgYnVzIGludG8gZmx1c2hpbmcgc3RhdGUgd2hlbiBjaGFuZ2luZworZnJvbSBSRUFEWSB0byBOVUxMIHN0YXRlLgorPC9wPgorPHA+CitMYXN0IHJldmlld2VkIG9uIDIwMDYtMDMtMTIgKDAuMTAuNSkKKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0QnVzLmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RCdXMtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RCdXM8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RCdXM7PC9wcmU+Cis8cD4KK1RoZSBvcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gZGF0YSBzdHJ1Y3R1cmUuCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEJ1c0ZsYWdzIj48L2E+PGgzPmVudW0gR3N0QnVzRmxhZ3M8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9CVVNfRkxVU0hJTkcgICAgICA9IChHU1RfT0JKRUNUX0ZMQUdfTEFTVCAmbHQ7Jmx0OyAwKSwKKyAgLyogcGFkZGluZyAqLworICBHU1RfQlVTX0ZMQUdfTEFTVCAgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgJmx0OyZsdDsgMSkKK30gR3N0QnVzRmxhZ3M7Cis8L3ByZT4KKzxwPgorVGhlIHN0YW5kYXJkIGZsYWdzIHRoYXQgYSBidXMgbWF5IGhhdmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1CVVMtRkxVU0hJTkc6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0JVU19GTFVTSElORzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGJ1cyBpcyBjdXJyZW50bHkgZHJvcHBpbmcgYWxsIG1lc3NhZ2VzCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQlVTLUZMQUctTEFTVDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQlVTX0ZMQUdfTEFTVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+b2Zmc2V0IHRvIGRlZmluZSBtb3JlIGZsYWdzCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RCdXNTeW5jUmVwbHkiPjwvYT48aDM+ZW51bSBHc3RCdXNTeW5jUmVwbHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9CVVNfRFJPUCA9IDAsCisgIEdTVF9CVVNfUEFTUyA9IDEsCisgIEdTVF9CVVNfQVNZTkMgPSAyCit9IEdzdEJ1c1N5bmNSZXBseTsKKzwvcHJlPgorPHA+CitUaGUgcmVzdWx0IHZhbHVlcyBmb3IgYSBHc3RCdXNTeW5jSGFuZGxlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUJVUy1EUk9QOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9CVVNfRFJPUDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZHJvcCB0aGUgbWVzc2FnZQorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUJVUy1QQVNTOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9CVVNfUEFTUzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cGFzcyB0aGUgbWVzc2FnZSB0byB0aGUgYXN5bmMgcXVldWUKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1CVVMtQVNZTkM6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0JVU19BU1lOQzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cGFzcyBtZXNzYWdlIHRvIGFzeW5jIHF1ZXVlLCBjb250aW51ZSBpZiBtZXNzYWdlIGlzIGhhbmRsZWQKKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEJ1c0Z1bmMiPjwvYT48aDM+R3N0QnVzRnVuYyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAoKkdzdEJ1c0Z1bmMpICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+ICpidXM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NwZWNpZmllcyB0aGUgdHlwZSBvZiBmdW5jdGlvbiBwYXNzZWQgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtYWRkLXdhdGNoIiB0aXRsZT0iZ3N0X2J1c19hZGRfd2F0Y2ggKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1c19hZGRfd2F0Y2goKTwvY29kZT48L2E+IG9yCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1hZGQtd2F0Y2gtZnVsbCIgdGl0bGU9ImdzdF9idXNfYWRkX3dhdGNoX2Z1bGwgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1c19hZGRfd2F0Y2hfZnVsbCgpPC9jb2RlPjwvYT4sIHdoaWNoIGlzIGNhbGxlZCBmcm9tIHRoZSBtYWlubG9vcCB3aGVuIGEgbWVzc2FnZQoraXMgYXZhaWxhYmxlIG9uIHRoZSBidXMuCis8L3A+Cis8cD4KK1RoZSBtZXNzYWdlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gd2lsbCBiZSB1bnJlZmZlZCBhZnRlciBleGVjdXRpb24gb2YgdGhpcworZnVuY3Rpb24gc28gaXQgc2hvdWxkIG5vdCBiZSBmcmVlZCBpbiB0aGUgZnVuY3Rpb24uCis8L3A+Cis8cD4KK05vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYXMgYSBHU291cmNlRnVuYyB3aGljaCBtZWFucyB0aGF0IHJldHVybmluZworRkFMU0Ugd2lsbCByZW1vdmUgdGhlIEdTb3VyY2UgZnJvbSB0aGUgbWFpbmxvb3AuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiB0aGF0IHNlbnQgdGhlIG1lc3NhZ2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZXIgZGF0YSB0aGF0IGhhcyBiZWVuIGdpdmVuLCB3aGVuIHJlZ2lzdGVyaW5nIHRoZSBoYW5kbGVyPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIHRoZSBldmVudCBzb3VyY2Ugc2hvdWxkIGJlIHJlbW92ZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0QnVzU3luY0hhbmRsZXIiPjwvYT48aDM+R3N0QnVzU3luY0hhbmRsZXIgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNHc3RCdXNTeW5jUmVwbHkiIHRpdGxlPSJlbnVtIEdzdEJ1c1N5bmNSZXBseSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdXNTeW5jUmVwbHk8L3NwYW4+PC9hPiAgICAgKCpHc3RCdXNTeW5jSGFuZGxlcikgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiAqYnVzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGRhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitIYW5kbGVyIHdpbGwgYmUgaW52b2tlZCBzeW5jaHJvbm91c2x5LCB3aGVuIGEgbmV3IG1lc3NhZ2UgaGFzIGJlZW4gaW5qZWN0ZWQKK2ludG8gdGhlIGJ1cy4gVGhpcyBmdW5jdGlvbiBpcyBtb3N0bHkgdXNlZCBpbnRlcm5hbGx5LiBPbmx5IG9uZSBzeW5jIGhhbmRsZXIKK2NhbiBiZSBhdHRhY2hlZCB0byBhIGdpdmVuIGJ1cy4KKzwvcD4KKzxwPgorSWYgdGhlIGhhbmRsZXIgcmV0dXJucyBHU1RfQlVTX0RST1AsIGl0IHNob3VsZCB1bnJlZiB0aGUgbWVzc2FnZSwgZWxzZSB0aGUKK21lc3NhZ2Ugc2hvdWxkIG5vdCBiZSB1bnJlZmZlZCBieSB0aGUgc3luYyBoYW5kbGVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1czwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gdGhhdCBzZW50IHRoZSBtZXNzYWdlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZXNzYWdlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VyIGRhdGEgdGhhdCBoYXMgYmVlbiBnaXZlbiwgd2hlbiByZWdpc3RlcmluZyB0aGUgaGFuZGxlcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI0dzdEJ1c1N5bmNSZXBseSIgdGl0bGU9ImVudW0gR3N0QnVzU3luY1JlcGx5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzU3luY1JlcGx5PC9zcGFuPjwvYT4gc3RhdGluZyB3aGF0IHRvIGRvIHdpdGggdGhlIG1lc3NhZ2U8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVzLW5ldyI+PC9hPjxoMz5nc3RfYnVzX25ldyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1czwvc3Bhbj48L2E+ICogICAgICAgICAgICBnc3RfYnVzX25ldyAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gaW5zdGFuY2UuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiBpbnN0YW5jZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVzLXBvc3QiPjwvYT48aDM+Z3N0X2J1c19wb3N0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9idXNfcG9zdCAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gKmJ1czwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitQb3N0IGEgbWVzc2FnZSBvbiB0aGUgZ2l2ZW4gYnVzLiBPd25lcnNoaXAgb2YgdGhlIG1lc3NhZ2UKK2lzIHRha2VuIGJ5IHRoZSBidXMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gdG8gcG9zdCBvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IHRvIHBvc3QuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBtZXNzYWdlIGNvdWxkIGJlIHBvc3RlZCwgRkFMU0UgaWYgdGhlIGJ1cyBpcyBmbHVzaGluZy4KK01UIHNhZmUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1cy1oYXZlLXBlbmRpbmciPjwvYT48aDM+Z3N0X2J1c19oYXZlX3BlbmRpbmcgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J1c19oYXZlX3BlbmRpbmcgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiAqYnVzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2sgaWYgdGhlcmUgYXJlIHBlbmRpbmcgbWVzc2FnZXMgb24gdGhlIGJ1cyB0aGF0CitzaG91bGQgYmUgaGFuZGxlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idXM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiB0byBjaGVjazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlcmUgYXJlIG1lc3NhZ2VzIG9uIHRoZSBidXMgdG8gYmUgaGFuZGxlZCwgRkFMU0UKK290aGVyd2lzZS4KK01UIHNhZmUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1cy1wZWVrIj48L2E+PGgzPmdzdF9idXNfcGVlayAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqICAgICAgICBnc3RfYnVzX3BlZWsgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+ICpidXM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitQZWVrIHRoZSBtZXNzYWdlIG9uIHRoZSB0b3Agb2YgdGhlIGJ1cycgcXVldWUuIFRoZSBtZXNzYWdlIHdpbGwgcmVtYWluCitvbiB0aGUgYnVzJyBtZXNzYWdlIHF1ZXVlLiBBIHJlZmVyZW5jZSBpcyByZXR1cm5lZCwgYW5kIG5lZWRzIHRvIGJlIHVucmVmZmVkCitieSB0aGUgY2FsbGVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1czwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IHRoYXQgaXMgb24gdGhlIGJ1cywgb3IgTlVMTCBpZiB0aGUKK2J1cyBpcyBlbXB0eS4KK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVzLXBvcCI+PC9hPjxoMz5nc3RfYnVzX3BvcCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqICAgICAgICBnc3RfYnVzX3BvcCAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+ICpidXM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgYSBtZXNzYWdlIGZyb20gdGhlIGJ1cy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idXM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiB0byBwb3A8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IHRoYXQgaXMgb24gdGhlIGJ1cywgb3IgTlVMTCBpZiB0aGUKK2J1cyBpcyBlbXB0eS4gVGhlIG1lc3NhZ2UgaXMgdGFrZW4gZnJvbSB0aGUgYnVzIGFuZCBuZWVkcyB0byBiZSB1bnJlZmZlZAord2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS11bnJlZiIgdGl0bGU9ImdzdF9tZXNzYWdlX3VucmVmICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9tZXNzYWdlX3VucmVmKCk8L2NvZGU+PC9hPiBhZnRlciB1c2FnZS4KK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVzLXBvcC1maWx0ZXJlZCI+PC9hPjxoMz5nc3RfYnVzX3BvcF9maWx0ZXJlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqICAgICAgICBnc3RfYnVzX3BvcF9maWx0ZXJlZCAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+ICpidXM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZVR5cGUiIHRpdGxlPSJlbnVtIEdzdE1lc3NhZ2VUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZVR5cGU8L3NwYW4+PC9hPiB0eXBlczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCBhIG1lc3NhZ2UgbWF0Y2hpbmcgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT4gZnJvbSB0aGUgYnVzLiAgV2lsbCBkaXNjYXJkIGFsbCBtZXNzYWdlcyBvbgordGhlIGJ1cyB0aGF0IGRvIG5vdCBtYXRjaCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTwvY29kZT48L2VtPiBhbmQgdGhhdCBoYXZlIGJlZW4gcG9zdGVkIGJlZm9yZSB0aGUgZmlyc3QKK21lc3NhZ2UgdGhhdCBkb2VzIG1hdGNoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+LiAgSWYgdGhlcmUgaXMgbm8gbWVzc2FnZSBtYXRjaGluZyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTwvY29kZT48L2VtPiBvbgordGhlIGJ1cywgYWxsIG1lc3NhZ2VzIHdpbGwgYmUgZGlzY2FyZGVkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1czwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+IHRvIHBvcDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZXM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bWVzc2FnZSB0eXBlcyB0byB0YWtlIGludG8gYWNjb3VudDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXh0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBtYXRjaGluZyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTwvY29kZT48L2VtPiB0aGF0IGlzIG9uCit0aGUgYnVzLCBvciBOVUxMIGlmIHRoZSBidXMgaXMgZW1wdHkgb3IgdGhlcmUgaXMgbm8gbWVzc2FnZSBtYXRjaGluZworPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT4uIFRoZSBtZXNzYWdlIGlzIHRha2VuIGZyb20gdGhlIGJ1cyBhbmQgbmVlZHMgdG8gYmUgdW5yZWZmZWQgd2l0aAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtdW5yZWYiIHRpdGxlPSJnc3RfbWVzc2FnZV91bnJlZiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWVzc2FnZV91bnJlZigpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNhZ2UuCitNVCBzYWZlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1cy10aW1lZC1wb3AiPjwvYT48aDM+Z3N0X2J1c190aW1lZF9wb3AgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKiAgICAgICAgZ3N0X2J1c190aW1lZF9wb3AgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiAqYnVzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRpbWVvdXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgYSBtZXNzYWdlIGZyb20gdGhlIGJ1cywgd2FpdGluZyB1cCB0byB0aGUgc3BlY2lmaWVkIHRpbWVvdXQuCis8L3A+Cis8cD4KK0lmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50aW1lb3V0PC9jb2RlPjwvZW0+IGlzIDAsIHRoaXMgZnVuY3Rpb24gYmVoYXZlcyBsaWtlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXBvcCIgdGl0bGU9ImdzdF9idXNfcG9wICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idXNfcG9wKCk8L2NvZGU+PC9hPi4gSWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWVvdXQ8L2NvZGU+PC9lbT4gaXMKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1USU1FLU5PTkU6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19USU1FX05PTkUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfQ0xPQ0tfVElNRV9OT05FPC9zcGFuPjwvYT4sIHRoaXMgZnVuY3Rpb24gd2lsbCBibG9jayBmb3JldmVyIHVudGlsIGEgbWVzc2FnZSB3YXMKK3Bvc3RlZCBvbiB0aGUgYnVzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1czwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+IHRvIHBvcDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZW91dDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHRpbWVvdXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IHRoYXQgaXMgb24gdGhlIGJ1cyBhZnRlciB0aGUKK3NwZWNpZmllZCB0aW1lb3V0IG9yIE5VTEwgaWYgdGhlIGJ1cyBpcyBlbXB0eSBhZnRlciB0aGUgdGltZW91dCBleHBpcmVkLgorVGhlIG1lc3NhZ2UgaXMgdGFrZW4gZnJvbSB0aGUgYnVzIGFuZCBuZWVkcyB0byBiZSB1bnJlZmZlZCB3aXRoCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS11bnJlZiIgdGl0bGU9ImdzdF9tZXNzYWdlX3VucmVmICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9tZXNzYWdlX3VucmVmKCk8L2NvZGU+PC9hPiBhZnRlciB1c2FnZS4KK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjEyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVzLXRpbWVkLXBvcC1maWx0ZXJlZCI+PC9hPjxoMz5nc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqICAgICAgICBnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZCAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+ICpidXM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZW91dDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlVHlwZSIgdGl0bGU9ImVudW0gR3N0TWVzc2FnZVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlVHlwZTwvc3Bhbj48L2E+IHR5cGVzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0IGEgbWVzc2FnZSBmcm9tIHRoZSBidXMgd2hvc2UgdHlwZSBtYXRjaGVzIHRoZSBtZXNzYWdlIHR5cGUgbWFzayA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZXM8L2NvZGU+PC9lbT4sCit3YWl0aW5nIHVwIHRvIHRoZSBzcGVjaWZpZWQgdGltZW91dCAoYW5kIGRpc2NhcmRpbmcgYW55IG1lc3NhZ2VzIHRoYXQgZG8gbm90CittYXRjaCB0aGUgbWFzayBwcm92aWRlZCkuCis8L3A+Cis8cD4KK0lmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50aW1lb3V0PC9jb2RlPjwvZW0+IGlzIDAsIHRoaXMgZnVuY3Rpb24gYmVoYXZlcyBsaWtlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXBvcC1maWx0ZXJlZCIgdGl0bGU9ImdzdF9idXNfcG9wX2ZpbHRlcmVkICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idXNfcG9wX2ZpbHRlcmVkKCk8L2NvZGU+PC9hPi4gSWYKKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50aW1lb3V0PC9jb2RlPjwvZW0+IGlzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1USU1FLU5PTkU6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19USU1FX05PTkUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfQ0xPQ0tfVElNRV9OT05FPC9zcGFuPjwvYT4sIHRoaXMgZnVuY3Rpb24gd2lsbCBibG9jayBmb3JldmVyIHVudGlsIGEKK21hdGNoaW5nIG1lc3NhZ2Ugd2FzIHBvc3RlZCBvbiB0aGUgYnVzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1czwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+IHRvIHBvcCBmcm9tPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50aW1lb3V0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgdGltZW91dCBpbiBuYW5vc2Vjb25kcywgb3IgR1NUX0NMT0NLX1RJTUVfTk9ORSB0byB3YWl0IGZvcmV2ZXI8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGVzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm1lc3NhZ2UgdHlwZXMgdG8gdGFrZSBpbnRvIGFjY291bnQsIEdTVF9NRVNTQUdFX0FOWSBmb3IgYW55IHR5cGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBtYXRjaGluZyB0aGUgZmlsdGVyIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlczwvY29kZT48L2VtPiwKK29yIE5VTEwgaWYgbm8gbWF0Y2hpbmcgbWVzc2FnZSB3YXMgZm91bmQgb24gdGhlIGJ1cyB1bnRpbCB0aGUgdGltZW91dAorZXhwaXJlZC4gVGhlIG1lc3NhZ2UgaXMgdGFrZW4gZnJvbSB0aGUgYnVzIGFuZCBuZWVkcyB0byBiZSB1bnJlZmZlZAord2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS11bnJlZiIgdGl0bGU9ImdzdF9tZXNzYWdlX3VucmVmICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9tZXNzYWdlX3VucmVmKCk8L2NvZGU+PC9hPiBhZnRlciB1c2FnZS4KK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjE1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVzLXNldC1mbHVzaGluZyI+PC9hPjxoMz5nc3RfYnVzX3NldF9mbHVzaGluZyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYnVzX3NldF9mbHVzaGluZyAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+ICpidXM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBmbHVzaGluZzwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0lmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbHVzaGluZzwvY29kZT48L2VtPiwgZmx1c2ggb3V0IGFuZCB1bnJlZiBhbnkgbWVzc2FnZXMgcXVldWVkIGluIHRoZSBidXMuIFJlbGVhc2VzCityZWZlcmVuY2VzIHRvIHRoZSBtZXNzYWdlIG9yaWdpbiBvYmplY3RzLiBXaWxsIGZsdXNoIGZ1dHVyZSBtZXNzYWdlcyB1bnRpbAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtc2V0LWZsdXNoaW5nIiB0aXRsZT0iZ3N0X2J1c19zZXRfZmx1c2hpbmcgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1c19zZXRfZmx1c2hpbmcoKTwvY29kZT48L2E+IHNldHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZsdXNoaW5nPC9jb2RlPjwvZW0+IHRvIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkZBTFNFPC9zcGFuPjwvYT4uCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zmx1c2hpbmc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+d2hldGhlciBvciBub3QgdG8gZmx1c2ggdGhlIGJ1czwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1idXMtc2V0LXN5bmMtaGFuZGxlciI+PC9hPjxoMz5nc3RfYnVzX3NldF9zeW5jX2hhbmRsZXIgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiAqYnVzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNHc3RCdXNTeW5jSGFuZGxlciIgdGl0bGU9IkdzdEJ1c1N5bmNIYW5kbGVyICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzU3luY0hhbmRsZXI8L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgdGhlIHN5bmNocm9ub3VzIGhhbmRsZXIgb24gdGhlIGJ1cy4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkCitldmVyeSB0aW1lIGEgbmV3IG1lc3NhZ2UgaXMgcG9zdGVkIG9uIHRoZSBidXMuIE5vdGUgdGhhdCB0aGUgZnVuY3Rpb24KK3dpbGwgYmUgY2FsbGVkIGluIHRoZSBzYW1lIHRocmVhZCBjb250ZXh0IGFzIHRoZSBwb3N0aW5nIG9iamVjdC4gVGhpcworZnVuY3Rpb24gaXMgdXN1YWxseSBvbmx5IGNhbGxlZCBieSB0aGUgY3JlYXRvciBvZiB0aGUgYnVzLiBBcHBsaWNhdGlvbnMKK3Nob3VsZCBoYW5kbGUgbWVzc2FnZXMgYXN5bmNocm9ub3VzbHkgdXNpbmcgdGhlIGdzdF9idXMgd2F0Y2ggYW5kIHBvbGwKK2Z1bmN0aW9ucy4KKzwvcD4KKzxwPgorWW91IGNhbm5vdCByZXBsYWNlIGFuIGV4aXN0aW5nIHN5bmNfaGFuZGxlci4gWW91IGNhbiBwYXNzIE5VTEwgdG8gdGhpcworZnVuY3Rpb24sIHdoaWNoIHdpbGwgY2xlYXIgdGhlIGV4aXN0aW5nIGhhbmRsZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gdG8gaW5zdGFsbCB0aGUgaGFuZGxlciBvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgaGFuZGxlciBmdW5jdGlvbiB0byBpbnN0YWxsPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlVzZXIgZGF0YSB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgaGFuZGxlciBmdW5jdGlvbi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVzLXN5bmMtc2lnbmFsLWhhbmRsZXIiPjwvYT48aDM+Z3N0X2J1c19zeW5jX3NpZ25hbF9oYW5kbGVyICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjR3N0QnVzU3luY1JlcGx5IiB0aXRsZT0iZW51bSBHc3RCdXNTeW5jUmVwbHkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVzU3luY1JlcGx5PC9zcGFuPjwvYT4gICAgIGdzdF9idXNfc3luY19zaWduYWxfaGFuZGxlciAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gKmJ1czwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBkYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQSBoZWxwZXIgR3N0QnVzU3luY0hhbmRsZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IGFsbCBzeW5jaHJvbm91cworbWVzc2FnZXMgaW50byBzaWduYWxzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1czwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiByZWNlaXZlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VyIGRhdGE8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5HU1RfQlVTX1BBU1M8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVzLWNyZWF0ZS13YXRjaCI+PC9hPjxoMz5nc3RfYnVzX2NyZWF0ZV93YXRjaCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1UaGUtTWFpbi1FdmVudC1Mb29wLmh0bWwjR1NvdXJjZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HU291cmNlPC9zcGFuPjwvYT4gKiAgICAgICAgICAgZ3N0X2J1c19jcmVhdGVfd2F0Y2ggICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiAqYnVzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlIHdhdGNoIGZvciB0aGlzIGJ1cy4gVGhlIEdTb3VyY2Ugd2lsbCBiZSBkaXNwYXRjaGVkIHdoZW5ldmVyCithIG1lc3NhZ2UgaXMgb24gdGhlIGJ1cy4gQWZ0ZXIgdGhlIEdTb3VyY2UgaXMgZGlzcGF0Y2hlZCwgdGhlCittZXNzYWdlIGlzIHBvcHBlZCBvZmYgdGhlIGJ1cyBhbmQgdW5yZWZmZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gdG8gY3JlYXRlIHRoZSB3YXRjaCBmb3I8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItVGhlLU1haW4tRXZlbnQtTG9vcC5odG1sI0dTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU291cmNlPC9zcGFuPjwvYT4gdGhhdCBjYW4gYmUgYWRkZWQgdG8gYSBtYWlubG9vcC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1idXMtYWRkLXdhdGNoLWZ1bGwiPjwvYT48aDM+Z3N0X2J1c19hZGRfd2F0Y2hfZnVsbCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICBnc3RfYnVzX2FkZF93YXRjaF9mdWxsICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+ICpidXM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gcHJpb3JpdHk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI0dzdEJ1c0Z1bmMiIHRpdGxlPSJHc3RCdXNGdW5jICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzRnVuYzwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1EYXRhc2V0cy5odG1sI0dEZXN0cm95Tm90aWZ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R0Rlc3Ryb3lOb3RpZnk8L3NwYW4+PC9hPiBub3RpZnk8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBZGRzIGEgYnVzIHdhdGNoIHRvIHRoZSBkZWZhdWx0IG1haW4gY29udGV4dCB3aXRoIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJpb3JpdHk8L2NvZGU+PC9lbT4gKGUuZy4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItVGhlLU1haW4tRXZlbnQtTG9vcC5odG1sI0ctUFJJT1JJVFktREVGQVVMVDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R19QUklPUklUWV9ERUZBVUxUPC9jb2RlPjwvYT4pLiBTaW5jZSAwLjEwLjMzIGl0IGlzIGFsc28gcG9zc2libGUgdG8gdXNlIGEgbm9uLWRlZmF1bHQKK21haW4gY29udGV4dCBzZXQgdXAgdXNpbmcgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1UaGUtTWFpbi1FdmVudC1Mb29wLmh0bWwjZy1tYWluLWNvbnRleHQtcHVzaC10aHJlYWQtZGVmYXVsdCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX21haW5fY29udGV4dF9wdXNoX3RocmVhZF9kZWZhdWx0KCk8L2NvZGU+PC9hPiAoYmVmb3JlCitvbmUgaGFkIHRvIGNyZWF0ZSBhIGJ1cyB3YXRjaCBzb3VyY2UgYW5kIGF0dGFjaCBpdCB0byB0aGUgZGVzaXJlZCBtYWluCitjb250ZXh0ICdtYW51YWxseScpLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVjZWl2ZSBhc3luY2hyb25vdXMgbWVzc2FnZXMgaW4gdGhlIG1haW4gbG9vcC4KK1RoZXJlIGNhbiBvbmx5IGJlIGEgc2luZ2xlIGJ1cyB3YXRjaCBwZXIgYnVzLCB5b3UgbXVzdCByZW1vdmUgaXQgYmVmb3JlIHlvdQorY2FuIHNldCBhIG5ldyBvbmUuCis8L3A+Cis8cD4KK1doZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT4gaXMgY2FsbGVkLCB0aGUgbWVzc2FnZSBiZWxvbmdzIHRvIHRoZSBjYWxsZXI7IGlmIHlvdSB3YW50IHRvCitrZWVwIGEgY29weSBvZiBpdCwgY2FsbCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1yZWYiIHRpdGxlPSJnc3RfbWVzc2FnZV9yZWYgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21lc3NhZ2VfcmVmKCk8L2NvZGU+PC9hPiBiZWZvcmUgbGVhdmluZyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPi4KKzwvcD4KKzxwPgorVGhlIHdhdGNoIGNhbiBiZSByZW1vdmVkIHVzaW5nIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItVGhlLU1haW4tRXZlbnQtTG9vcC5odG1sI2ctc291cmNlLXJlbW92ZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX3NvdXJjZV9yZW1vdmUoKTwvY29kZT48L2E+IG9yIGJ5IHJldHVybmluZyBGQUxTRQorZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idXM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiB0byBjcmVhdGUgdGhlIHdhdGNoIGZvci48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByaW9yaXR5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBwcmlvcml0eSBvZiB0aGUgd2F0Y2guPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGEgbWVzc2FnZSBpcyByZWNlaXZlZC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VyIGRhdGEgcGFzc2VkIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bm90aWZ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHNvdXJjZSBpcyByZW1vdmVkLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBldmVudCBzb3VyY2UgaWQuCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1idXMtYWRkLXdhdGNoIj48L2E+PGgzPmdzdF9idXNfYWRkX3dhdGNoICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIGdzdF9idXNfYWRkX3dhdGNoICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gKmJ1czwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjR3N0QnVzRnVuYyIgdGl0bGU9IkdzdEJ1c0Z1bmMgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXNGdW5jPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0FkZHMgYSBidXMgd2F0Y2ggdG8gdGhlIGRlZmF1bHQgbWFpbiBjb250ZXh0IHdpdGggdGhlIGRlZmF1bHQgcHJpb3JpdHkKKyg8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVRoZS1NYWluLUV2ZW50LUxvb3AuaHRtbCNHLVBSSU9SSVRZLURFRkFVTFQ6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdfUFJJT1JJVFlfREVGQVVMVDwvY29kZT48L2E+KS4gU2luY2UgMC4xMC4zMyBpdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBhIG5vbi1kZWZhdWx0CittYWluIGNvbnRleHQgc2V0IHVwIHVzaW5nIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItVGhlLU1haW4tRXZlbnQtTG9vcC5odG1sI2ctbWFpbi1jb250ZXh0LXB1c2gtdGhyZWFkLWRlZmF1bHQiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19tYWluX2NvbnRleHRfcHVzaF90aHJlYWRfZGVmYXVsdCgpPC9jb2RlPjwvYT4gKGJlZm9yZQorb25lIGhhZCB0byBjcmVhdGUgYSBidXMgd2F0Y2ggc291cmNlIGFuZCBhdHRhY2ggaXQgdG8gdGhlIGRlc2lyZWQgbWFpbgorY29udGV4dCAnbWFudWFsbHknKS4KKzwvcD4KKzxwPgorVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlY2VpdmUgYXN5bmNocm9ub3VzIG1lc3NhZ2VzIGluIHRoZSBtYWluIGxvb3AuCitUaGVyZSBjYW4gb25seSBiZSBhIHNpbmdsZSBidXMgd2F0Y2ggcGVyIGJ1cywgeW91IG11c3QgcmVtb3ZlIGl0IGJlZm9yZSB5b3UKK2NhbiBzZXQgYSBuZXcgb25lLgorPC9wPgorPHA+CitUaGUgd2F0Y2ggY2FuIGJlIHJlbW92ZWQgdXNpbmcgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1UaGUtTWFpbi1FdmVudC1Mb29wLmh0bWwjZy1zb3VyY2UtcmVtb3ZlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfc291cmNlX3JlbW92ZSgpPC9jb2RlPjwvYT4gb3IgYnkgcmV0dXJuaW5nIEZBTFNFCitmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1czwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+IHRvIGNyZWF0ZSB0aGUgd2F0Y2ggZm9yPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGEgbWVzc2FnZSBpcyByZWNlaXZlZC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VyIGRhdGEgcGFzc2VkIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBldmVudCBzb3VyY2UgaWQuCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1idXMtZGlzYWJsZS1zeW5jLW1lc3NhZ2UtZW1pc3Npb24iPjwvYT48aDM+Z3N0X2J1c19kaXNhYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYnVzX2Rpc2FibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gKmJ1czwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0luc3RydWN0cyBHU3RyZWFtZXIgdG8gc3RvcCBlbWl0dGluZyB0aGUgInN5bmMtbWVzc2FnZSIgc2lnbmFsIGZvciB0aGlzIGJ1cy4KK1NlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1lbmFibGUtc3luYy1tZXNzYWdlLWVtaXNzaW9uIiB0aXRsZT0iZ3N0X2J1c19lbmFibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idXNfZW5hYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbigpPC9jb2RlPjwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCis8L3A+Cis8cD4KK0luIHRoZSBldmVudCB0aGF0IG11bHRpcGxlIHBpZWNlcyBvZiBjb2RlIGhhdmUgY2FsbGVkCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1lbmFibGUtc3luYy1tZXNzYWdlLWVtaXNzaW9uIiB0aXRsZT0iZ3N0X2J1c19lbmFibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idXNfZW5hYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbigpPC9jb2RlPjwvYT4sIHRoZSBzeW5jLW1lc3NhZ2UgZW1pc3Npb25zIHdpbGwgb25seQorYmUgc3RvcHBlZCBhZnRlciBhbGwgY2FsbHMgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtZW5hYmxlLXN5bmMtbWVzc2FnZS1lbWlzc2lvbiIgdGl0bGU9ImdzdF9idXNfZW5hYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24oKTwvY29kZT48L2E+IHdlcmUKKyJjYW5jZWxsZWQiIGJ5IGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gSW4gdGhpcyB3YXkgdGhlIHNlbWFudGljcyBhcmUgZXhhY3RseQordGhlIHNhbWUgYXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtcmVmIiB0aXRsZT0iZ3N0X29iamVjdF9yZWYgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X29iamVjdF9yZWYoKTwvY29kZT48L2E+IHRoYXQgd2hpY2ggY2FsbHMgZW5hYmxlIHNob3VsZCBhbHNvIGNhbGwKK2Rpc2FibGUuCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1czwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+IG9uIHdoaWNoIHlvdSBwcmV2aW91c2x5IGNhbGxlZAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtZW5hYmxlLXN5bmMtbWVzc2FnZS1lbWlzc2lvbiIgdGl0bGU9ImdzdF9idXNfZW5hYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24oKTwvY29kZT48L2E+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1cy1lbmFibGUtc3luYy1tZXNzYWdlLWVtaXNzaW9uIj48L2E+PGgzPmdzdF9idXNfZW5hYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiAqYnVzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSW5zdHJ1Y3RzIEdTdHJlYW1lciB0byBlbWl0IHRoZSAic3luYy1tZXNzYWdlIiBzaWduYWwgYWZ0ZXIgcnVubmluZyB0aGUgYnVzJ3MKK3N5bmMgaGFuZGxlci4gVGhpcyBmdW5jdGlvbiBpcyBoZXJlIHNvIHRoYXQgY29kZSBjYW4gZW5zdXJlIHRoYXQgdGhleSBjYW4KK3N5bmNocm9ub3VzbHkgcmVjZWl2ZSBtZXNzYWdlcyB3aXRob3V0IGhhdmluZyB0byBhZmZlY3Qgd2hhdCB0aGUgYmluJ3Mgc3luYworaGFuZGxlciBpcy4KKzwvcD4KKzxwPgorVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLiBUbyBjbGVhbiB1cCwgdGhlIGNhbGxlciBpcworcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtZGlzYWJsZS1zeW5jLW1lc3NhZ2UtZW1pc3Npb24iIHRpdGxlPSJnc3RfYnVzX2Rpc2FibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idXNfZGlzYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24oKTwvY29kZT48L2E+IGFzIG1hbnkgdGltZXMKK2FzIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgorPC9wPgorPHA+CitXaGlsZSB0aGlzIGZ1bmN0aW9uIGxvb2tzIHNpbWlsYXIgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtYWRkLXNpZ25hbC13YXRjaCIgdGl0bGU9ImdzdF9idXNfYWRkX3NpZ25hbF93YXRjaCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2goKTwvY29kZT48L2E+LCBpdCBpcyBub3QKK2V4YWN0bHkgdGhlIHNhbWUgLS0gdGhpcyBmdW5jdGlvbiBlbmFibGVzIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnN5bmNocm9ub3VzPC9lbT48L3NwYW4+IGVtaXNzaW9uIG9mCitzaWduYWxzIHdoZW4gbWVzc2FnZXMgYXJyaXZlOyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1hZGQtc2lnbmFsLXdhdGNoIiB0aXRsZT0iZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idXNfYWRkX3NpZ25hbF93YXRjaCgpPC9jb2RlPjwvYT4gYWRkcyBhbiBpZGxlIGNhbGxiYWNrCit0byBwb3AgbWVzc2FnZXMgb2ZmIHRoZSBidXMgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+YXN5bmNocm9ub3VzbHk8L2VtPjwvc3Bhbj4uIFRoZSBzeW5jLW1lc3NhZ2Ugc2lnbmFsCitjb21lcyBmcm9tIHRoZSB0aHJlYWQgb2Ygd2hhdGV2ZXIgb2JqZWN0IHBvc3RlZCB0aGUgbWVzc2FnZTsgdGhlICJtZXNzYWdlIgorc2lnbmFsIGlzIG1hcnNoYWxsZWQgdG8gdGhlIG1haW4gdGhyZWFkIHZpYSB0aGUgbWFpbiBsb29wLgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idXM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiBvbiB3aGljaCB5b3Ugd2FudCB0byByZWNlaXZlIHRoZSAic3luYy1tZXNzYWdlIiBzaWduYWw8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1cy1hc3luYy1zaWduYWwtZnVuYyI+PC9hPjxoMz5nc3RfYnVzX2FzeW5jX3NpZ25hbF9mdW5jICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9idXNfYXN5bmNfc2lnbmFsX2Z1bmMgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gKmJ1czwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBkYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQSBoZWxwZXIgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI0dzdEJ1c0Z1bmMiIHRpdGxlPSJHc3RCdXNGdW5jICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzRnVuYzwvc3Bhbj48L2E+IHRoYXQgY2FuIGJlIHVzZWQgdG8gY29udmVydCBhbGwgYXN5bmNocm9ub3VzIG1lc3NhZ2VzCitpbnRvIHNpZ25hbHMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IHJlY2VpdmVkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZXIgZGF0YTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVzLWFkZC1zaWduYWwtd2F0Y2giPjwvYT48aDM+Z3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaCAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gKmJ1czwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0FkZHMgYSBidXMgc2lnbmFsIHdhdGNoIHRvIHRoZSBkZWZhdWx0IG1haW4gY29udGV4dCB3aXRoIHRoZSBkZWZhdWx0IHByaW9yaXR5CisoPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1UaGUtTWFpbi1FdmVudC1Mb29wLmh0bWwjRy1QUklPUklUWS1ERUZBVUxUOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HX1BSSU9SSVRZX0RFRkFVTFQ8L2NvZGU+PC9hPikuIFNpbmNlIDAuMTAuMzMgaXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgYSBub24tZGVmYXVsdAorbWFpbiBjb250ZXh0IHNldCB1cCB1c2luZyA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVRoZS1NYWluLUV2ZW50LUxvb3AuaHRtbCNnLW1haW4tY29udGV4dC1wdXNoLXRocmVhZC1kZWZhdWx0Ij48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfbWFpbl9jb250ZXh0X3B1c2hfdGhyZWFkX2RlZmF1bHQoKTwvY29kZT48L2E+IChiZWZvcmUKK29uZSBoYWQgdG8gY3JlYXRlIGEgYnVzIHdhdGNoIHNvdXJjZSBhbmQgYXR0YWNoIGl0IHRvIHRoZSBkZXNpcmVkIG1haW4KK2NvbnRleHQgJ21hbnVhbGx5JykuCis8L3A+Cis8cD4KK0FmdGVyIGNhbGxpbmcgdGhpcyBzdGF0ZW1lbnQsIHRoZSBidXMgd2lsbCBlbWl0IHRoZSAibWVzc2FnZSIgc2lnbmFsIGZvciBlYWNoCittZXNzYWdlIHBvc3RlZCBvbiB0aGUgYnVzLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIFRvIGNsZWFuIHVwLCB0aGUgY2FsbGVyIGlzCityZXNwb25zaWJsZSBmb3IgY2FsbGluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1yZW1vdmUtc2lnbmFsLXdhdGNoIiB0aXRsZT0iZ3N0X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNoICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idXNfcmVtb3ZlX3NpZ25hbF93YXRjaCgpPC9jb2RlPjwvYT4gYXMgbWFueSB0aW1lcyBhcyB0aGlzCitmdW5jdGlvbiBpcyBjYWxsZWQuCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1czwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+IG9uIHdoaWNoIHlvdSB3YW50IHRvIHJlY2VpdmUgdGhlICJtZXNzYWdlIiBzaWduYWw8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1cy1hZGQtc2lnbmFsLXdhdGNoLWZ1bGwiPjwvYT48aDM+Z3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoX2Z1bGwgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoX2Z1bGwgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiAqYnVzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IHByaW9yaXR5PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQWRkcyBhIGJ1cyBzaWduYWwgd2F0Y2ggdG8gdGhlIGRlZmF1bHQgbWFpbiBjb250ZXh0IHdpdGggdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcmlvcml0eTwvY29kZT48L2VtPgorKGUuZy4gPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1UaGUtTWFpbi1FdmVudC1Mb29wLmh0bWwjRy1QUklPUklUWS1ERUZBVUxUOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HX1BSSU9SSVRZX0RFRkFVTFQ8L2NvZGU+PC9hPikuIFNpbmNlIDAuMTAuMzMgaXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgYQorbm9uLWRlZmF1bHQgbWFpbiBjb250ZXh0IHNldCB1cCB1c2luZyA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVRoZS1NYWluLUV2ZW50LUxvb3AuaHRtbCNnLW1haW4tY29udGV4dC1wdXNoLXRocmVhZC1kZWZhdWx0Ij48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfbWFpbl9jb250ZXh0X3B1c2hfdGhyZWFkX2RlZmF1bHQoKTwvY29kZT48L2E+CisoYmVmb3JlIG9uZSBoYWQgdG8gY3JlYXRlIGEgYnVzIHdhdGNoIHNvdXJjZSBhbmQgYXR0YWNoIGl0IHRvIHRoZSBkZXNpcmVkCittYWluIGNvbnRleHQgJ21hbnVhbGx5JykuCis8L3A+Cis8cD4KK0FmdGVyIGNhbGxpbmcgdGhpcyBzdGF0ZW1lbnQsIHRoZSBidXMgd2lsbCBlbWl0IHRoZSAibWVzc2FnZSIgc2lnbmFsIGZvciBlYWNoCittZXNzYWdlIHBvc3RlZCBvbiB0aGUgYnVzIHdoZW4gdGhlIG1haW4gbG9vcCBpcyBydW5uaW5nLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIFRvIGNsZWFuIHVwLCB0aGUgY2FsbGVyIGlzCityZXNwb25zaWJsZSBmb3IgY2FsbGluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1yZW1vdmUtc2lnbmFsLXdhdGNoIiB0aXRsZT0iZ3N0X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNoICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idXNfcmVtb3ZlX3NpZ25hbF93YXRjaCgpPC9jb2RlPjwvYT4gYXMgbWFueSB0aW1lcyBhcyB0aGlzCitmdW5jdGlvbiBpcyBjYWxsZWQuCis8L3A+Cis8cD4KK1RoZXJlIGNhbiBvbmx5IGJlIGEgc2luZ2xlIGJ1cyB3YXRjaCBwZXIgYnVzLCB5b3UgbW9zdCByZW1vdmUgYWxsIHNpZ25hbCB3YXRjaAorYmVmb3JlIHlvdSBjYW4gc2V0IGFub3RoZXIgdHlwZSBvZiB3YXRjaC4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idXM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiBvbiB3aGljaCB5b3Ugd2FudCB0byByZWNlaXZlIHRoZSAibWVzc2FnZSIgc2lnbmFsPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcmlvcml0eTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgcHJpb3JpdHkgb2YgdGhlIHdhdGNoLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1idXMtcmVtb3ZlLXNpZ25hbC13YXRjaCI+PC9hPjxoMz5nc3RfYnVzX3JlbW92ZV9zaWduYWxfd2F0Y2ggKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNoICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiAqYnVzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVtb3ZlcyBhIHNpZ25hbCB3YXRjaCBwcmV2aW91c2x5IGFkZGVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtYWRkLXNpZ25hbC13YXRjaCIgdGl0bGU9ImdzdF9idXNfYWRkX3NpZ25hbF93YXRjaCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2goKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idXM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiB5b3UgcHJldmlvdXNseSBhZGRlZCBhIHNpZ25hbCB3YXRjaCB0bzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVzLXBvbGwiPjwvYT48aDM+Z3N0X2J1c19wb2xsICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICogICAgICAgIGdzdF9idXNfcG9sbCAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gKmJ1czwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlVHlwZSIgdGl0bGU9ImVudW0gR3N0TWVzc2FnZVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlVHlwZTwvc3Bhbj48L2E+IGV2ZW50czwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWVEaWZmIiB0aXRsZT0iR3N0Q2xvY2tUaW1lRGlmZiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZURpZmY8L3NwYW4+PC9hPiB0aW1lb3V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUG9sbCB0aGUgYnVzIGZvciBtZXNzYWdlcy4gV2lsbCBibG9jayB3aGlsZSB3YWl0aW5nIGZvciBtZXNzYWdlcyB0byBjb21lLgorWW91IGNhbiBzcGVjaWZ5IGEgbWF4aW11bSB0aW1lIHRvIHBvbGwgd2l0aCB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWVvdXQ8L2NvZGU+PC9lbT4gcGFyYW1ldGVyLiBJZgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWVvdXQ8L2NvZGU+PC9lbT4gaXMgbmVnYXRpdmUsIHRoaXMgZnVuY3Rpb24gd2lsbCBibG9jayBpbmRlZmluaXRlbHkuCis8L3A+Cis8cD4KK0FsbCBtZXNzYWdlcyBub3QgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV2ZW50czwvY29kZT48L2VtPiB3aWxsIGJlIHBvcHBlZCBvZmYgdGhlIGJ1cyBhbmQgd2lsbCBiZSBpZ25vcmVkLgorPC9wPgorPHA+CitCZWNhdXNlIHBvbGwgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlICJtZXNzYWdlIiBzaWduYWwgZW5hYmxlZCBieQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtYWRkLXNpZ25hbC13YXRjaCIgdGl0bGU9ImdzdF9idXNfYWRkX3NpZ25hbF93YXRjaCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2goKTwvY29kZT48L2E+LCBjYWxsaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXBvbGwiIHRpdGxlPSJnc3RfYnVzX3BvbGwgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1c19wb2xsKCk8L2NvZGU+PC9hPiB3aWxsIGNhdXNlIHRoZSAibWVzc2FnZSIKK3NpZ25hbCB0byBiZSBlbWl0dGVkIGZvciBldmVyeSBtZXNzYWdlIHRoYXQgcG9sbCBzZWVzLiBUaHVzIGEgIm1lc3NhZ2UiCitzaWduYWwgaGFuZGxlciB3aWxsIHNlZSB0aGUgc2FtZSBtZXNzYWdlcyB0aGF0IHRoaXMgZnVuY3Rpb24gc2VlcyAtLSBuZWl0aGVyCit3aWxsIHN0ZWFsIG1lc3NhZ2VzIGZyb20gdGhlIG90aGVyLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIHdpbGwgcnVuIGEgbWFpbiBsb29wIGZyb20gdGhlIGRlZmF1bHQgbWFpbiBjb250ZXh0IHdoZW4KK3BvbGxpbmcuCis8L3A+Cis8cD4KK1lvdSBzaG91bGQgbmV2ZXIgdXNlIHRoaXMgZnVuY3Rpb24sIHNpbmNlIGl0IGlzIHB1cmUgZXZpbC4gVGhpcyBpcworZXNwZWNpYWxseSB0cnVlIGZvciBHVUkgYXBwbGljYXRpb25zIGJhc2VkIG9uIEd0aysgb3IgUXQsIGJ1dCBhbHNvIGZvciBhbnkKK290aGVyIG5vbi10cml2aWFsIGFwcGxpY2F0aW9uIHRoYXQgdXNlcyB0aGUgR0xpYiBtYWluIGxvb3AuIEFzIHRoaXMgZnVuY3Rpb24KK3J1bnMgYSBHTGliIG1haW4gbG9vcCwgYW55IGNhbGxiYWNrIGF0dGFjaGVkIHRvIHRoZSBkZWZhdWx0IEdMaWIgbWFpbgorY29udGV4dCBtYXkgYmUgaW52b2tlZC4gVGhpcyBjb3VsZCBiZSB0aW1lb3V0cywgR1VJIGV2ZW50cywgSS9PIGV2ZW50cyBldGMuOworZXZlbiBpZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1wb2xsIiB0aXRsZT0iZ3N0X2J1c19wb2xsICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idXNfcG9sbCgpPC9jb2RlPjwvYT4gaXMgY2FsbGVkIHdpdGggYSAwIHRpbWVvdXQuIEFueSBvZiB0aGVzZSBjYWxsYmFja3MKK21heSBkbyB0aGluZ3MgeW91IGRvIG5vdCBleHBlY3QsIGUuZy4gZGVzdHJveSB0aGUgbWFpbiBhcHBsaWNhdGlvbiB3aW5kb3cgb3IKK3NvbWUgb3RoZXIgcmVzb3VyY2U7IGNoYW5nZSBvdGhlciBhcHBsaWNhdGlvbiBzdGF0ZTsgZGlzcGxheSBhIGRpYWxvZyBhbmQKK3J1biBhbm90aGVyIG1haW4gbG9vcCB1bnRpbCB0aGUgdXNlciBjbGlja3MgaXQgYXdheS4gSW4gc2hvcnQsIHVzaW5nIHRoaXMKK2Z1bmN0aW9uIG1heSBhZGQgYSBsb3Qgb2YgY29tcGxleGl0eSB0byB5b3VyIGNvZGUgdGhyb3VnaCB1bmV4cGVjdGVkCityZS1lbnRyYW5jeSBhbmQgdW5leHBlY3RlZCBjaGFuZ2VzIHRvIHlvdXIgYXBwbGljYXRpb24ncyBzdGF0ZS4KKzwvcD4KKzxwPgorRm9yIDAgdGltZW91dHMgdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXBvcC1maWx0ZXJlZCIgdGl0bGU9ImdzdF9idXNfcG9wX2ZpbHRlcmVkICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idXNfcG9wX2ZpbHRlcmVkKCk8L2NvZGU+PC9hPiBpbnN0ZWFkIG9mIHRoaXMgZnVuY3Rpb247IGZvcgorb3RoZXIgc2hvcnQgdGltZW91dHMgdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXRpbWVkLXBvcC1maWx0ZXJlZCIgdGl0bGU9ImdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkKCk8L2NvZGU+PC9hPjsgZXZlcnl0aGluZyBlbHNlIGlzCitiZXR0ZXIgaGFuZGxlZCBieSBzZXR0aW5nIHVwIGFuIGFzeW5jaHJvbm91cyBidXMgd2F0Y2ggYW5kIGRvaW5nIHRoaW5ncworZnJvbSB0aGVyZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idXM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBtYXNrIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2VUeXBlIiB0aXRsZT0iZW51bSBHc3RNZXNzYWdlVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2VUeXBlPC9zcGFuPjwvYT4sIHJlcHJlc2VudGluZyB0aGUgc2V0IG9mIG1lc3NhZ2UgdHlwZXMgdG8KK3BvbGwgZm9yLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZW91dDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcG9sbCB0aW1lb3V0LCBhcyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZURpZmYiIHRpdGxlPSJHc3RDbG9ja1RpbWVEaWZmIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lRGlmZjwvc3Bhbj48L2E+LCBvciAtMSB0byBwb2xsCitpbmRlZmluaXRlbHkuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG1lc3NhZ2UgdGhhdCB3YXMgcmVjZWl2ZWQsIG9yIE5VTEwgaWYgdGhlCitwb2xsIHRpbWVkIG91dC4gVGhlIG1lc3NhZ2UgaXMgdGFrZW4gZnJvbSB0aGUgYnVzIGFuZCBuZWVkcyB0byBiZQordW5yZWZmZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS11bnJlZiIgdGl0bGU9ImdzdF9tZXNzYWdlX3VucmVmICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9tZXNzYWdlX3VucmVmKCk8L2NvZGU+PC9hPiBhZnRlciB1c2FnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0QnVzLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RCdXMtLWVuYWJsZS1hc3luYyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJlbmFibGUtYXN5bmMiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiZW5hYmxlLWFzeW5jIiAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFdyaXRlIC8gQ29uc3RydWN0IE9ubHk8L3ByZT4KKzxwPkVuYWJsZSBhc3luYyBtZXNzYWdlIGRlbGl2ZXJ5IGZvciBidXMgd2F0Y2hlcyBhbmQgZ3N0X2J1c19wb3AoKS48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdEJ1cy5zaWduYWwtZGV0YWlscyI+PC9hPjxoMj5TaWduYWwgRGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RCdXMtbWVzc2FnZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJtZXNzYWdlIjwvY29kZT4gc2lnbmFsPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIHVzZXJfZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+ICAgICAqYnVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgdXNlcl9kYXRhKSAgICAgIDogPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtREVUQUlMRUQ6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkhhcyBEZXRhaWxzPC9jb2RlPjwvYT48L3ByZT4KKzxwPgorQSBtZXNzYWdlIGhhcyBiZWVuIHBvc3RlZCBvbiB0aGUgYnVzLiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIGZyb20gYQorR1NvdXJjZSBhZGRlZCB0byB0aGUgbWFpbmxvb3AuIHRoaXMgc2lnbmFsIHdpbGwgb25seSBiZSBlbWl0dGVkIHdoZW4KK3RoZXJlIGlzIGEgbWFpbmxvb3AgcnVubmluZy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idXM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZXNzYWdlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtZXNzYWdlIHRoYXQgaGFzIGJlZW4gcG9zdGVkIGFzeW5jaHJvbm91c2x5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEJ1cy1zeW5jLW1lc3NhZ2UiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4ic3luYy1tZXNzYWdlIjwvY29kZT4gc2lnbmFsPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIHVzZXJfZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+ICAgICAqYnVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgdXNlcl9kYXRhKSAgICAgIDogPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtREVUQUlMRUQ6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkhhcyBEZXRhaWxzPC9jb2RlPjwvYT48L3ByZT4KKzxwPgorQSBtZXNzYWdlIGhhcyBiZWVuIHBvc3RlZCBvbiB0aGUgYnVzLiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIGZyb20gdGhlCit0aHJlYWQgdGhhdCBwb3N0ZWQgdGhlIG1lc3NhZ2Ugc28gb25lIGhhcyB0byBiZSBjYXJlZnVsIHdpdGggbG9ja2luZy4KKzwvcD4KKzxwPgorVGhpcyBzaWduYWwgd2lsbCBub3QgYmUgZW1pdHRlZCBieSBkZWZhdWx0LCB5b3UgaGF2ZSB0byBzZXQgdXAKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXN5bmMtc2lnbmFsLWhhbmRsZXIiIHRpdGxlPSJnc3RfYnVzX3N5bmNfc2lnbmFsX2hhbmRsZXIgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1c19zeW5jX3NpZ25hbF9oYW5kbGVyKCk8L2NvZGU+PC9hPiBhcyBhIHN5bmMgaGFuZGxlciBpZiB5b3Ugd2FudCB0aGlzCitzaWduYWwgdG8gYmUgZW1pdHRlZCB3aGVuIGEgbWVzc2FnZSBpcyBwb3N0ZWQgb24gdGhlIGJ1cywgbGlrZSB0aGlzOgorPC9wPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgorZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyIChidXMsIGdzdF9idXNfc3luY19zaWduYWxfaGFuZGxlciwgeW91cmRhdGEpOworPC9wcmU+Cis8cD4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idXM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZXNzYWdlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtZXNzYWdlIHRoYXQgaGFzIGJlZW4gcG9zdGVkIHN5bmNocm9ub3VzbHk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RCdXMuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL0dzdENoaWxkUHJveHkuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvR3N0Q2hpbGRQcm94eS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkODVjN2QKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dzdC9odG1sL0dzdENoaWxkUHJveHkuaHRtbApAQCAtMCwwICsxLDU3NSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdzdENoaWxkUHJveHk8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0Q2xvY2suaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNHc3RDaGlsZFByb3h5LnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0Q2hpbGRQcm94eS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0Q2hpbGRQcm94eS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdENoaWxkUHJveHkucHJlcmVxdWlzaXRlcyIgY2xhc3M9InNob3J0Y3V0Ij5QcmVyZXF1aXNpdGVzPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RDaGlsZFByb3h5LmltcGxlbWVudGF0aW9ucyIgY2xhc3M9InNob3J0Y3V0Ij5Lbm93biBJbXBsZW1lbnRhdGlvbnM8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdENoaWxkUHJveHkuc2lnbmFscyIgY2xhc3M9InNob3J0Y3V0Ij5TaWduYWxzPC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9IkdzdENoaWxkUHJveHkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RDaGlsZFByb3h5LnRvcF9vZl9wYWdlIj48L2E+R3N0Q2hpbGRQcm94eTwvc3Bhbj48L2gyPgorPHA+R3N0Q2hpbGRQcm94eSDigJQgSW50ZXJmYWNlIGZvciBtdWx0aSBjaGlsZCBlbGVtZW50cy48L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJHc3RDaGlsZFByb3h5LnN5bm9wc2lzIj48L2E+PGgyPlN5bm9wc2lzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7CisKKyAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNHc3RDaGlsZFByb3h5LXN0cnVjdCIgdGl0bGU9IkdzdENoaWxkUHJveHkiPkdzdENoaWxkUHJveHk8L2E+Oworc3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sI0dzdENoaWxkUHJveHlJbnRlcmZhY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2hpbGRQcm94eUludGVyZmFjZSI+R3N0Q2hpbGRQcm94eUludGVyZmFjZTwvYT47Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LWdldC1jaGlsZHJlbi1jb3VudCIgdGl0bGU9ImdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRyZW5fY291bnQgKCkiPmdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRyZW5fY291bnQ8L2E+ICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2hpbGRQcm94eTwvc3Bhbj48L2E+ICpwYXJlbnQ8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICogICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sI2dzdC1jaGlsZC1wcm94eS1nZXQtY2hpbGQtYnktbmFtZSIgdGl0bGU9ImdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfbmFtZSAoKSI+Z3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9uYW1lPC9hPiAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCIgdGl0bGU9IkdzdENoaWxkUHJveHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDaGlsZFByb3h5PC9zcGFuPjwvYT4gKnBhcmVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktZ2V0LWNoaWxkLWJ5LWluZGV4IiB0aXRsZT0iZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9pbmRleCAoKSI+Z3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9pbmRleDwvYT4gICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCIgdGl0bGU9IkdzdENoaWxkUHJveHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDaGlsZFByb3h5PC9zcGFuPjwvYT4gKnBhcmVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktbG9va3VwIiB0aXRsZT0iZ3N0X2NoaWxkX3Byb3h5X2xvb2t1cCAoKSI+Z3N0X2NoaWxkX3Byb3h5X2xvb2t1cDwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICoqdGFyZ2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR1BhcmFtU3BlYy5odG1sI0dQYXJhbVNwZWMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUGFyYW1TcGVjPC9zcGFuPjwvYT4gKipwc3BlYzwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LWdldC1wcm9wZXJ0eSIgdGl0bGU9ImdzdF9jaGlsZF9wcm94eV9nZXRfcHJvcGVydHkgKCkiPmdzdF9jaGlsZF9wcm94eV9nZXRfcHJvcGVydHk8L2E+ICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktZ2V0LXZhbGlzdCIgdGl0bGU9ImdzdF9jaGlsZF9wcm94eV9nZXRfdmFsaXN0ICgpIj5nc3RfY2hpbGRfcHJveHlfZ2V0X3ZhbGlzdDwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpcnN0X3Byb3BlcnR5X25hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZhX2xpc3Q8L3NwYW4+IHZhcl9hcmdzPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktZ2V0IiB0aXRsZT0iZ3N0X2NoaWxkX3Byb3h5X2dldCAoKSI+Z3N0X2NoaWxkX3Byb3h5X2dldDwvYT4gICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaXJzdF9wcm9wZXJ0eV9uYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LXNldC1wcm9wZXJ0eSIgdGl0bGU9ImdzdF9jaGlsZF9wcm94eV9zZXRfcHJvcGVydHkgKCkiPmdzdF9jaGlsZF9wcm94eV9zZXRfcHJvcGVydHk8L2E+ICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktc2V0LXZhbGlzdCIgdGl0bGU9ImdzdF9jaGlsZF9wcm94eV9zZXRfdmFsaXN0ICgpIj5nc3RfY2hpbGRfcHJveHlfc2V0X3ZhbGlzdDwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpcnN0X3Byb3BlcnR5X25hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZhX2xpc3Q8L3NwYW4+IHZhcl9hcmdzPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktc2V0IiB0aXRsZT0iZ3N0X2NoaWxkX3Byb3h5X3NldCAoKSI+Z3N0X2NoaWxkX3Byb3h5X3NldDwvYT4gICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaXJzdF9wcm9wZXJ0eV9uYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LWNoaWxkLWFkZGVkIiB0aXRsZT0iZ3N0X2NoaWxkX3Byb3h5X2NoaWxkX2FkZGVkICgpIj5nc3RfY2hpbGRfcHJveHlfY2hpbGRfYWRkZWQ8L2E+ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpjaGlsZDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LWNoaWxkLXJlbW92ZWQiIHRpdGxlPSJnc3RfY2hpbGRfcHJveHlfY2hpbGRfcmVtb3ZlZCAoKSI+Z3N0X2NoaWxkX3Byb3h5X2NoaWxkX3JlbW92ZWQ8L2E+ICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqY2hpbGQ8L2NvZGU+PC9lbT4pOworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdENoaWxkUHJveHkub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgR0ludGVyZmFjZQorICAgKy0tLS1Hc3RDaGlsZFByb3h5Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0Q2hpbGRQcm94eS5wcmVyZXF1aXNpdGVzIj48L2E+PGgyPlByZXJlcXVpc2l0ZXM8L2gyPgorPHA+CitHc3RDaGlsZFByb3h5IHJlcXVpcmVzCisgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+LjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0Q2hpbGRQcm94eS5pbXBsZW1lbnRhdGlvbnMiPjwvYT48aDI+S25vd24gSW1wbGVtZW50YXRpb25zPC9oMj4KKzxwPgorR3N0Q2hpbGRQcm94eSBpcyBpbXBsZW1lbnRlZCBieQorIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+R3N0QmluPC9hPiBhbmQgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPkdzdFBpcGVsaW5lPC9hPi48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdENoaWxkUHJveHkuc2lnbmFscyI+PC9hPjxoMj5TaWduYWxzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwjR3N0Q2hpbGRQcm94eS1jaGlsZC1hZGRlZCIgdGl0bGU9J1RoZSAiY2hpbGQtYWRkZWQiIHNpZ25hbCc+Y2hpbGQtYWRkZWQ8L2E+IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUZJUlNUOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5SdW4gRmlyc3Q8L2NvZGU+PC9hPgorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNHc3RDaGlsZFByb3h5LWNoaWxkLXJlbW92ZWQiIHRpdGxlPSdUaGUgImNoaWxkLXJlbW92ZWQiIHNpZ25hbCc+Y2hpbGQtcmVtb3ZlZDwvYT4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUZJUlNUOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5SdW4gRmlyc3Q8L2NvZGU+PC9hPgorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdENoaWxkUHJveHkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitUaGlzIGludGVyZmFjZSBhYnN0cmFjdHMgaGFuZGxpbmcgb2YgcHJvcGVydHkgc2V0cyBmb3IgZWxlbWVudHMgd2l0aAorY2hpbGRyZW4uIEltYWdpbmUgZWxlbWVudHMgc3VjaCBhcyBtaXhlcnMgb3IgcG9seXBob25pYyBnZW5lcmF0b3JzLiBUaGV5IGFsbAoraGF2ZSBtdWx0aXBsZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBvciBzb21lIGtpbmQgb2Ygdm9pY2Ugb2JqZWN0cy4gQW5vdGhlciB1c2UgY2FzZSBhcmUKK2NvbnRhaW5lciBlbGVtZW50cyBsaWtlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+LgorVGhlIGVsZW1lbnQgaW1wbGVtZW50aW5nIHRoZSBpbnRlcmZhY2UgYWN0cyBhcyBhIHBhcmVudCBmb3IgdGhvc2UgY2hpbGQKK29iamVjdHMuCis8L3A+Cis8cD4KK0J5IGltcGxlbWVudGluZyB0aGlzIGludGVyZmFjZSB0aGUgY2hpbGQgcHJvcGVydGllcyBjYW4gYmUgYWNjZXNzZWQgZnJvbSB0aGUKK3BhcmVudCBlbGVtZW50IGJ5IHVzaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LWdldCIgdGl0bGU9ImdzdF9jaGlsZF9wcm94eV9nZXQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NoaWxkX3Byb3h5X2dldCgpPC9jb2RlPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LXNldCIgdGl0bGU9ImdzdF9jaGlsZF9wcm94eV9zZXQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NoaWxkX3Byb3h5X3NldCgpPC9jb2RlPjwvYT4uCis8L3A+Cis8cD4KK1Byb3BlcnR5IG5hbWVzIGFyZSB3cml0dGVuIGFzICJjaGlsZC1uYW1lOjpwcm9wZXJ0eS1uYW1lIi4gVGhlIHdob2xlIG5hbWluZworc2NoZW1lIGlzIHJlY3Vyc2l2ZS4gVGh1cyAiY2hpbGQxOjpjaGlsZDI6OnByb3BlcnR5IiBpcyB2YWxpZCB0b28sIGlmCisiY2hpbGQxIiBhbmQgImNoaWxkMiIgaW1wbGVtZW50IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENoaWxkUHJveHk8L3NwYW4+PC9hPiBpbnRlcmZhY2UuCis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdENoaWxkUHJveHkuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdENoaWxkUHJveHktc3RydWN0Ij48L2E+PGgzPkdzdENoaWxkUHJveHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgc3RydWN0IF9Hc3RDaGlsZFByb3h5IEdzdENoaWxkUHJveHk7PC9wcmU+Cis8cD4KK09wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENoaWxkUHJveHk8L3NwYW4+PC9hPiBkYXRhIHN0cnVjdHVyZS4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0Q2hpbGRQcm94eUludGVyZmFjZSI+PC9hPjxoMz5zdHJ1Y3QgR3N0Q2hpbGRQcm94eUludGVyZmFjZTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdENoaWxkUHJveHlJbnRlcmZhY2UgeworICBHVHlwZUludGVyZmFjZSBwYXJlbnQ7CisKKyAgLyogbWV0aG9kcyAqLworICBHc3RPYmplY3QgKigqZ2V0X2NoaWxkX2J5X2luZGV4KSAoR3N0Q2hpbGRQcm94eSAqIHBhcmVudCwgZ3VpbnQgaW5kZXgpOworICBndWludCAoKmdldF9jaGlsZHJlbl9jb3VudCkgKEdzdENoaWxkUHJveHkgKiBwYXJlbnQpOworfTsKKzwvcHJlPgorPHA+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENoaWxkUHJveHk8L3NwYW4+PC9hPiBpbnRlcmZhY2UuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZUludGVyZmFjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlSW50ZXJmYWNlPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdENoaWxkUHJveHlJbnRlcmZhY2UucGFyZW50Ij48L2E+cGFyZW50PC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wYXJlbnQgaW50ZXJmYWNlIHR5cGUuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdENoaWxkUHJveHlJbnRlcmZhY2UuZ2V0LWNoaWxkLWJ5LWluZGV4Ij48L2E+Z2V0X2NoaWxkX2J5X2luZGV4PC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD52aXJ0dWFsIG1ldGhvZCB0byBmZXRjaCB0aGUgY2hpbGQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0Q2hpbGRQcm94eUludGVyZmFjZS5nZXQtY2hpbGRyZW4tY291bnQiPjwvYT5nZXRfY2hpbGRyZW5fY291bnQ8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPnZpcnR1YWwgbWV0aG9kIHRvIGdldCB0aGUgY2hpbGRyZW4gY291bnQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2hpbGQtcHJveHktZ2V0LWNoaWxkcmVuLWNvdW50Ij48L2E+PGgzPmdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRyZW5fY291bnQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZHJlbl9jb3VudCAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENoaWxkUHJveHk8L3NwYW4+PC9hPiAqcGFyZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgbnVtYmVyIG9mIGNoaWxkIG9iamVjdHMgdGhpcyBwYXJlbnQgY29udGFpbnMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwYXJlbnQgb2JqZWN0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG51bWJlciBvZiBjaGlsZCBvYmplY3RzCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jaGlsZC1wcm94eS1nZXQtY2hpbGQtYnktbmFtZSI+PC9hPjxoMz5nc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X25hbWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqICAgICAgICAgZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9uYW1lICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENoaWxkUHJveHk8L3NwYW4+PC9hPiAqcGFyZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitMb29rcyB1cCBhIGNoaWxkIGVsZW1lbnQgYnkgdGhlIGdpdmVuIG5hbWUuCis8L3A+Cis8cD4KK0ltcGxlbWVudG9ycyBjYW4gdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+IHRvZ2V0aGVyIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtZ2V0LW5hbWUiIHRpdGxlPSJnc3Rfb2JqZWN0X2dldF9uYW1lICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9vYmplY3RfZ2V0X25hbWUoKTwvY29kZT48L2E+Cis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwYXJlbnQgb2JqZWN0IHRvIGdldCB0aGUgY2hpbGQgZnJvbTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY2hpbGRzIG5hbWU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY2hpbGQgb2JqZWN0IG9yIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIG5vdCBmb3VuZC4gVW5yZWYKK2FmdGVyIHVzYWdlLgorTVQgc2FmZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jaGlsZC1wcm94eS1nZXQtY2hpbGQtYnktaW5kZXgiPjwvYT48aDM+Z3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9pbmRleCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICogICAgICAgICBnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X2luZGV4ICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2hpbGRQcm94eTwvc3Bhbj48L2E+ICpwYXJlbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0ZldGNoZXMgYSBjaGlsZCBieSBpdHMgbnVtYmVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhcmVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGFyZW50IG9iamVjdCB0byBnZXQgdGhlIGNoaWxkIGZyb208L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjaGlsZHMgcG9zaXRpb24gaW4gdGhlIGNoaWxkIGxpc3Q8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY2hpbGQgb2JqZWN0IG9yIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIG5vdCBmb3VuZCAoaW5kZXgKK3RvbyBoaWdoKS4gVW5yZWYgYWZ0ZXIgdXNhZ2UuCitNVCBzYWZlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNoaWxkLXByb3h5LWxvb2t1cCI+PC9hPjxoMz5nc3RfY2hpbGRfcHJveHlfbG9va3VwICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9jaGlsZF9wcm94eV9sb29rdXAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICoqdGFyZ2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR1BhcmFtU3BlYy5odG1sI0dQYXJhbVNwZWMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUGFyYW1TcGVjPC9zcGFuPjwvYT4gKipwc3BlYzwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0xvb2tzIHVwIHdoaWNoIG9iamVjdCBhbmQgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HUGFyYW1TcGVjLmh0bWwjR1BhcmFtU3BlYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdQYXJhbVNwZWM8L3NwYW4+PC9hPiB3b3VsZCBiZSBlZmZlY3RlZCBieSB0aGUgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm9iamVjdCB0byBsb29rdXAgdGhlIHByb3BlcnR5IGluPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGxvb2sgdXA8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhcmdldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gdGhhdAordGFrZXMgdGhlIHJlYWwgb2JqZWN0IHRvIHNldCBwcm9wZXJ0eSBvbi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wc3BlYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIHRha2UgdGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR1BhcmFtU3BlYy5odG1sI0dQYXJhbVNwZWMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUGFyYW1TcGVjPC9zcGFuPjwvYT4KK2Rlc2NyaWJpbmcgdGhlIHByb3BlcnR5LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YXJnZXQ8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wc3BlYzwvY29kZT48L2VtPiBjb3VsZCBiZSBmb3VuZC4gRkFMU0Ugb3RoZXJ3aXNlLiBJbiB0aGF0CitjYXNlIHRoZSB2YWx1ZXMgZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wc3BlYzwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhcmdldDwvY29kZT48L2VtPiBhcmUgbm90IG1vZGlmaWVkLiBVbnJlZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFyZ2V0PC9jb2RlPjwvZW0+IGFmdGVyCit1c2FnZS4KK01UIHNhZmUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNoaWxkLXByb3h5LWdldC1wcm9wZXJ0eSI+PC9hPjxoMz5nc3RfY2hpbGRfcHJveHlfZ2V0X3Byb3BlcnR5ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9jaGlsZF9wcm94eV9nZXRfcHJvcGVydHkgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXRzIGEgc2luZ2xlIHByb3BlcnR5IHVzaW5nIHRoZSBHc3RDaGlsZFByb3h5IG1lY2hhbmlzbS4KK1lvdSBhcmUgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgaXQgYnkgY2FsbGluZyA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjZy12YWx1ZS11bnNldCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX3ZhbHVlX3Vuc2V0KCk8L2NvZGU+PC9hPgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5vYmplY3QgdG8gcXVlcnk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bmFtZSBvZiB0aGUgcHJvcGVydHk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IHRoYXQgc2hvdWxkIHRha2UgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+IGNhbGxlci1hbGxvY2F0ZXNdPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNoaWxkLXByb3h5LWdldC12YWxpc3QiPjwvYT48aDM+Z3N0X2NoaWxkX3Byb3h5X2dldF92YWxpc3QgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2NoaWxkX3Byb3h5X2dldF92YWxpc3QgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpcnN0X3Byb3BlcnR5X25hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZhX2xpc3Q8L3NwYW4+IHZhcl9hcmdzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyBwcm9wZXJ0aWVzIG9mIHRoZSBwYXJlbnQgb2JqZWN0IGFuZCBpdHMgY2hpbGRyZW4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBvYmplY3QgdG8gcXVlcnk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpcnN0X3Byb3BlcnR5X25hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bmFtZSBvZiB0aGUgZmlyc3QgcHJvcGVydHkgdG8gZ2V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YXJfYXJnczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5yZXR1cm4gbG9jYXRpb24gZm9yIHRoZSBmaXJzdCBwcm9wZXJ0eSwgZm9sbG93ZWQgb3B0aW9uYWxseSBieSBtb3JlIG5hbWUvcmV0dXJuIGxvY2F0aW9uIHBhaXJzLCBmb2xsb3dlZCBieSBOVUxMPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNoaWxkLXByb3h5LWdldCI+PC9hPjxoMz5nc3RfY2hpbGRfcHJveHlfZ2V0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9jaGlsZF9wcm94eV9nZXQgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaXJzdF9wcm9wZXJ0eV9uYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgcHJvcGVydGllcyBvZiB0aGUgcGFyZW50IG9iamVjdCBhbmQgaXRzIGNoaWxkcmVuLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGFyZW50IG9iamVjdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zmlyc3RfcHJvcGVydHlfbmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5uYW1lIG9mIHRoZSBmaXJzdCBwcm9wZXJ0eSB0byBnZXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5yZXR1cm4gbG9jYXRpb24gZm9yIHRoZSBmaXJzdCBwcm9wZXJ0eSwgZm9sbG93ZWQgb3B0aW9uYWxseSBieSBtb3JlIG5hbWUvcmV0dXJuIGxvY2F0aW9uIHBhaXJzLCBmb2xsb3dlZCBieSBOVUxMPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNoaWxkLXByb3h5LXNldC1wcm9wZXJ0eSI+PC9hPjxoMz5nc3RfY2hpbGRfcHJveHlfc2V0X3Byb3BlcnR5ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9jaGlsZF9wcm94eV9zZXRfcHJvcGVydHkgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXRzIGEgc2luZ2xlIHByb3BlcnR5IHVzaW5nIHRoZSBHc3RDaGlsZFByb3h5IG1lY2hhbmlzbS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBhcmVudCBvYmplY3Q8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gc2V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5uZXcgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IGZvciB0aGUgcHJvcGVydHk8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2hpbGQtcHJveHktc2V0LXZhbGlzdCI+PC9hPjxoMz5nc3RfY2hpbGRfcHJveHlfc2V0X3ZhbGlzdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfY2hpbGRfcHJveHlfc2V0X3ZhbGlzdCAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmlyc3RfcHJvcGVydHlfbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gdmFyX2FyZ3M8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXRzIHByb3BlcnRpZXMgb2YgdGhlIHBhcmVudCBvYmplY3QgYW5kIGl0cyBjaGlsZHJlbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBhcmVudCBvYmplY3Q8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpcnN0X3Byb3BlcnR5X25hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bmFtZSBvZiB0aGUgZmlyc3QgcHJvcGVydHkgdG8gc2V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YXJfYXJnczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD52YWx1ZSBmb3IgdGhlIGZpcnN0IHByb3BlcnR5LCBmb2xsb3dlZCBvcHRpb25hbGx5IGJ5IG1vcmUgbmFtZS92YWx1ZSBwYWlycywgZm9sbG93ZWQgYnkgTlVMTDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jaGlsZC1wcm94eS1zZXQiPjwvYT48aDM+Z3N0X2NoaWxkX3Byb3h5X3NldCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfY2hpbGRfcHJveHlfc2V0ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmlyc3RfcHJvcGVydHlfbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXRzIHByb3BlcnRpZXMgb2YgdGhlIHBhcmVudCBvYmplY3QgYW5kIGl0cyBjaGlsZHJlbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBhcmVudCBvYmplY3Q8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpcnN0X3Byb3BlcnR5X25hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bmFtZSBvZiB0aGUgZmlyc3QgcHJvcGVydHkgdG8gc2V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dmFsdWUgZm9yIHRoZSBmaXJzdCBwcm9wZXJ0eSwgZm9sbG93ZWQgb3B0aW9uYWxseSBieSBtb3JlIG5hbWUvdmFsdWUgcGFpcnMsIGZvbGxvd2VkIGJ5IE5VTEw8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2hpbGQtcHJveHktY2hpbGQtYWRkZWQiPjwvYT48aDM+Z3N0X2NoaWxkX3Byb3h5X2NoaWxkX2FkZGVkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9jaGlsZF9wcm94eV9jaGlsZF9hZGRlZCAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqY2hpbGQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitFbWl0cyB0aGUgImNoaWxkLWFkZGVkIiBzaWduYWwuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwYXJlbnQgb2JqZWN0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jaGlsZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3bHkgYWRkZWQgY2hpbGQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2hpbGQtcHJveHktY2hpbGQtcmVtb3ZlZCI+PC9hPjxoMz5nc3RfY2hpbGRfcHJveHlfY2hpbGRfcmVtb3ZlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfY2hpbGRfcHJveHlfY2hpbGRfcmVtb3ZlZCAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKmNoaWxkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRW1pdHMgdGhlICJjaGlsZC1yZW1vdmVkIiBzaWduYWwuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwYXJlbnQgb2JqZWN0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jaGlsZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcmVtb3ZlZCBjaGlsZDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0Q2hpbGRQcm94eS5zaWduYWwtZGV0YWlscyI+PC9hPjxoMj5TaWduYWwgRGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RDaGlsZFByb3h5LWNoaWxkLWFkZGVkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImNoaWxkLWFkZGVkIjwvY29kZT4gc2lnbmFsPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIHVzZXJfZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2hpbGRQcm94eTwvc3Bhbj48L2E+ICpjaGlsZF9wcm94eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gICAgICAgKm9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgICB1c2VyX2RhdGEpICAgICAgICA6IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1GSVJTVDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+UnVuIEZpcnN0PC9jb2RlPjwvYT48L3ByZT4KKzxwPgorV2lsbCBiZSBlbWl0dGVkIGFmdGVyIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+IHdhcyBhZGRlZCB0byB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNoaWxkX3Byb3h5PC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNoaWxkX3Byb3h5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENoaWxkUHJveHk8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+IHRoYXQgd2FzIGFkZGVkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdENoaWxkUHJveHktY2hpbGQtcmVtb3ZlZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJjaGlsZC1yZW1vdmVkIjwvY29kZT4gc2lnbmFsPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIHVzZXJfZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2hpbGRQcm94eTwvc3Bhbj48L2E+ICpjaGlsZF9wcm94eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gICAgICAgKm9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgICB1c2VyX2RhdGEpICAgICAgICA6IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1GSVJTVDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+UnVuIEZpcnN0PC9jb2RlPjwvYT48L3ByZT4KKzxwPgorV2lsbCBiZSBlbWl0dGVkIGFmdGVyIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+IHdhcyByZW1vdmVkIGZyb20gdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jaGlsZF9wcm94eTwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jaGlsZF9wcm94eTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCIgdGl0bGU9IkdzdENoaWxkUHJveHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDaGlsZFByb3h5PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiB0aGF0IHdhcyByZW1vdmVkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0Q2hpbGRQcm94eS5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL0dzdENsb2NrLmh0bWwgYi9kb2NzL2dzdC9odG1sL0dzdENsb2NrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ4NGY1YwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2h0bWwvR3N0Q2xvY2suaHRtbApAQCAtMCwwICsxLDE4MzkgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5Hc3RDbG9jazwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCIgdGl0bGU9IkdzdENoaWxkUHJveHkiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItZ3N0Y29uZmlnLmh0bWwiIHRpdGxlPSJnc3Rjb25maWciPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLWdzdGNvbmZpZy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI0dzdENsb2NrLnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0Q2xvY2suZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdENsb2NrLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0Q2xvY2sucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9IkdzdENsb2NrIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0Q2xvY2sudG9wX29mX3BhZ2UiPjwvYT5Hc3RDbG9jazwvc3Bhbj48L2gyPgorPHA+R3N0Q2xvY2sg4oCUIEFic3RyYWN0IGNsYXNzIGZvciBnbG9iYWwgY2xvY2tzPC9wPgorPC90ZD4KKzx0ZCB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgorPC90cj48L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGEgbmFtZT0iR3N0Q2xvY2suc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKKworc3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9jay1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2xvY2siPkdzdENsb2NrPC9hPjsKK3N0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RDbG9ja0NsYXNzIj5Hc3RDbG9ja0NsYXNzPC9hPjsKK3R5cGVkZWYgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj5Hc3RDbG9ja1RpbWU8L2E+OwordHlwZWRlZiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWVEaWZmIiB0aXRsZT0iR3N0Q2xvY2tUaW1lRGlmZiI+R3N0Q2xvY2tUaW1lRGlmZjwvYT47Cit0eXBlZGVmICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj5Hc3RDbG9ja0lEPC9hPjsKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLVRJTUUtTk9ORTpDQVBTIiB0aXRsZT0iR1NUX0NMT0NLX1RJTUVfTk9ORSI+R1NUX0NMT0NLX1RJTUVfTk9ORTwvYT4KKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLVRJTUUtSVMtVkFMSUQ6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19USU1FX0lTX1ZBTElEKCkiPkdTVF9DTE9DS19USU1FX0lTX1ZBTElEPC9hPiAgICAgICAgICAgICAodGltZSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULVNFQ09ORDpDQVBTIiB0aXRsZT0iR1NUX1NFQ09ORCI+R1NUX1NFQ09ORDwvYT4KKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULU1TRUNPTkQ6Q0FQUyIgdGl0bGU9IkdTVF9NU0VDT05EIj5HU1RfTVNFQ09ORDwvYT4KKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULVVTRUNPTkQ6Q0FQUyIgdGl0bGU9IkdTVF9VU0VDT05EIj5HU1RfVVNFQ09ORDwvYT4KKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULU5TRUNPTkQ6Q0FQUyIgdGl0bGU9IkdTVF9OU0VDT05EIj5HU1RfTlNFQ09ORDwvYT4KKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULVRJTUUtQVMtU0VDT05EUzpDQVBTIiB0aXRsZT0iR1NUX1RJTUVfQVNfU0VDT05EUygpIj5HU1RfVElNRV9BU19TRUNPTkRTPC9hPiAgICAgICAgICAgICAgICAgKHRpbWUpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1USU1FLUFTLU1TRUNPTkRTOkNBUFMiIHRpdGxlPSJHU1RfVElNRV9BU19NU0VDT05EUygpIj5HU1RfVElNRV9BU19NU0VDT05EUzwvYT4gICAgICAgICAgICAgICAgKHRpbWUpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1USU1FLUFTLVVTRUNPTkRTOkNBUFMiIHRpdGxlPSJHU1RfVElNRV9BU19VU0VDT05EUygpIj5HU1RfVElNRV9BU19VU0VDT05EUzwvYT4gICAgICAgICAgICAgICAgKHRpbWUpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1USU1FLUFTLU5TRUNPTkRTOkNBUFMiIHRpdGxlPSJHU1RfVElNRV9BU19OU0VDT05EUygpIj5HU1RfVElNRV9BU19OU0VDT05EUzwvYT4gICAgICAgICAgICAgICAgKHRpbWUpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1ESUZGOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfRElGRigpIj5HU1RfQ0xPQ0tfRElGRjwvYT4gICAgICAgICAgICAgICAgICAgICAgKHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtVElNRVZBTC1UTy1USU1FOkNBUFMiIHRpdGxlPSJHU1RfVElNRVZBTF9UT19USU1FKCkiPkdTVF9USU1FVkFMX1RPX1RJTUU8L2E+ICAgICAgICAgICAgICAgICAodHYpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1USU1FLVRPLVRJTUVWQUw6Q0FQUyIgdGl0bGU9IkdTVF9USU1FX1RPX1RJTUVWQUwoKSI+R1NUX1RJTUVfVE9fVElNRVZBTDwvYT4gICAgICAgICAgICAgICAgICh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHYpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1USU1FU1BFQy1UTy1USU1FOkNBUFMiIHRpdGxlPSJHU1RfVElNRVNQRUNfVE9fVElNRSgpIj5HU1RfVElNRVNQRUNfVE9fVElNRTwvYT4gICAgICAgICAgICAgICAgKHRzKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtVElNRS1UTy1USU1FU1BFQzpDQVBTIiB0aXRsZT0iR1NUX1RJTUVfVE9fVElNRVNQRUMoKSI+R1NUX1RJTUVfVE9fVElNRVNQRUM8L2E+ICAgICAgICAgICAgICAgICh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHMpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1FTlRSWS1UUkFDRS1OQU1FOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfRU5UUllfVFJBQ0VfTkFNRSI+R1NUX0NMT0NLX0VOVFJZX1RSQUNFX05BTUU8L2E+CitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrRW50cnkiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2xvY2tFbnRyeSI+R3N0Q2xvY2tFbnRyeTwvYT47Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0NhbGxiYWNrIiB0aXRsZT0iR3N0Q2xvY2tDYWxsYmFjayAoKSI+KkdzdENsb2NrQ2FsbGJhY2s8L2E+KSAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqY2xvY2s8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiBpZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrRW50cnlUeXBlIiB0aXRsZT0iZW51bSBHc3RDbG9ja0VudHJ5VHlwZSI+R3N0Q2xvY2tFbnRyeVR5cGU8L2E+OworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRU5UUlk6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19FTlRSWSgpIj5HU1RfQ0xPQ0tfRU5UUlk8L2E+ICAgICAgICAgICAgICAgICAgICAgKGVudHJ5KQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRU5UUlktQ0xPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19FTlRSWV9DTE9DSygpIj5HU1RfQ0xPQ0tfRU5UUllfQ0xPQ0s8L2E+ICAgICAgICAgICAgICAgKGVudHJ5KQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRU5UUlktVFlQRTpDQVBTIiB0aXRsZT0iR1NUX0NMT0NLX0VOVFJZX1RZUEUoKSI+R1NUX0NMT0NLX0VOVFJZX1RZUEU8L2E+ICAgICAgICAgICAgICAgIChlbnRyeSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLUVOVFJZLVRJTUU6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19FTlRSWV9USU1FKCkiPkdTVF9DTE9DS19FTlRSWV9USU1FPC9hPiAgICAgICAgICAgICAgICAoZW50cnkpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1FTlRSWS1JTlRFUlZBTDpDQVBTIiB0aXRsZT0iR1NUX0NMT0NLX0VOVFJZX0lOVEVSVkFMKCkiPkdTVF9DTE9DS19FTlRSWV9JTlRFUlZBTDwvYT4gICAgICAgICAgICAoZW50cnkpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1FTlRSWS1TVEFUVVM6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19FTlRSWV9TVEFUVVMoKSI+R1NUX0NMT0NLX0VOVFJZX1NUQVRVUzwvYT4gICAgICAgICAgICAgIChlbnRyeSkKK2VudW0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdENsb2NrUmV0dXJuIj5Hc3RDbG9ja1JldHVybjwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdENsb2NrRmxhZ3MiPkdzdENsb2NrRmxhZ3M8L2E+OworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRkxBR1M6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19GTEFHUygpIj5HU1RfQ0xPQ0tfRkxBR1M8L2E+ICAgICAgICAgICAgICAgICAgICAgKGNsb2NrKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stQlJPQURDQVNUOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfQlJPQURDQVNUKCkiPkdTVF9DTE9DS19CUk9BRENBU1Q8L2E+ICAgICAgICAgICAgICAgICAoY2xvY2spCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1DT05EOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfQ09ORCgpIj5HU1RfQ0xPQ0tfQ09ORDwvYT4gICAgICAgICAgICAgICAgICAgICAgKGNsb2NrKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stVElNRUQtV0FJVDpDQVBTIiB0aXRsZT0iR1NUX0NMT0NLX1RJTUVEX1dBSVQoKSI+R1NUX0NMT0NLX1RJTUVEX1dBSVQ8L2E+ICAgICAgICAgICAgICAgIChjbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR2KQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stV0FJVDpDQVBTIiB0aXRsZT0iR1NUX0NMT0NLX1dBSVQoKSI+R1NUX0NMT0NLX1dBSVQ8L2E+ICAgICAgICAgICAgICAgICAgICAgIChjbG9jaykKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWFkZC1vYnNlcnZhdGlvbiIgdGl0bGU9ImdzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb24gKCkiPmdzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb248L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiBzbGF2ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiBtYXN0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gKnJfc3F1YXJlZDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1zZXQtbWFzdGVyIiB0aXRsZT0iZ3N0X2Nsb2NrX3NldF9tYXN0ZXIgKCkiPmdzdF9jbG9ja19zZXRfbWFzdGVyPC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqbWFzdGVyPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1nZXQtbWFzdGVyIiB0aXRsZT0iZ3N0X2Nsb2NrX2dldF9tYXN0ZXIgKCkiPmdzdF9jbG9ja19nZXRfbWFzdGVyPC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1zZXQtcmVzb2x1dGlvbiIgdGl0bGU9ImdzdF9jbG9ja19zZXRfcmVzb2x1dGlvbiAoKSI+Z3N0X2Nsb2NrX3NldF9yZXNvbHV0aW9uPC9hPiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKmNsb2NrPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHJlc29sdXRpb248L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+ICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stZ2V0LXJlc29sdXRpb24iIHRpdGxlPSJnc3RfY2xvY2tfZ2V0X3Jlc29sdXRpb24gKCkiPmdzdF9jbG9ja19nZXRfcmVzb2x1dGlvbjwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1nZXQtdGltZSIgdGl0bGU9ImdzdF9jbG9ja19nZXRfdGltZSAoKSI+Z3N0X2Nsb2NrX2dldF90aW1lPC9hPiAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKmNsb2NrPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stbmV3LXNpbmdsZS1zaG90LWlkIiB0aXRsZT0iZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoKSI+Z3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZDwvYT4gICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKmNsb2NrPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRpbWU8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+ICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1uZXctcGVyaW9kaWMtaWQiIHRpdGxlPSJnc3RfY2xvY2tfbmV3X3BlcmlvZGljX2lkICgpIj5nc3RfY2xvY2tfbmV3X3BlcmlvZGljX2lkPC9hPiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqY2xvY2s8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gc3RhcnRfdGltZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiBpbnRlcnZhbDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1zaW5nbGUtc2hvdC1pZC1yZWluaXQiIHRpdGxlPSJnc3RfY2xvY2tfc2luZ2xlX3Nob3RfaWRfcmVpbml0ICgpIj5nc3RfY2xvY2tfc2luZ2xlX3Nob3RfaWRfcmVpbml0PC9hPiAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqY2xvY2s8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gaWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1wZXJpb2RpYy1pZC1yZWluaXQiIHRpdGxlPSJnc3RfY2xvY2tfcGVyaW9kaWNfaWRfcmVpbml0ICgpIj5nc3RfY2xvY2tfcGVyaW9kaWNfaWRfcmVpbml0PC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqY2xvY2s8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gaWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gc3RhcnRfdGltZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiBpbnRlcnZhbDwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1nZXQtaW50ZXJuYWwtdGltZSIgdGl0bGU9ImdzdF9jbG9ja19nZXRfaW50ZXJuYWxfdGltZSAoKSI+Z3N0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lPC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKmNsb2NrPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWFkanVzdC11bmxvY2tlZCIgdGl0bGU9ImdzdF9jbG9ja19hZGp1c3RfdW5sb2NrZWQgKCkiPmdzdF9jbG9ja19hZGp1c3RfdW5sb2NrZWQ8L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiBpbnRlcm5hbDwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay11bmFkanVzdC11bmxvY2tlZCIgdGl0bGU9ImdzdF9jbG9ja191bmFkanVzdF91bmxvY2tlZCAoKSI+Z3N0X2Nsb2NrX3VuYWRqdXN0X3VubG9ja2VkPC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKmNsb2NrPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IGV4dGVybmFsPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWdldC1jYWxpYnJhdGlvbiIgdGl0bGU9ImdzdF9jbG9ja19nZXRfY2FsaWJyYXRpb24gKCkiPmdzdF9jbG9ja19nZXRfY2FsaWJyYXRpb248L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAqaW50ZXJuYWw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gKmV4dGVybmFsPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+ICpyYXRlX251bTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAqcmF0ZV9kZW5vbTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1zZXQtY2FsaWJyYXRpb24iIHRpdGxlPSJnc3RfY2xvY2tfc2V0X2NhbGlicmF0aW9uICgpIj5nc3RfY2xvY2tfc2V0X2NhbGlicmF0aW9uPC9hPiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqY2xvY2s8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gaW50ZXJuYWw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gZXh0ZXJuYWw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gcmF0ZV9udW08L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gcmF0ZV9kZW5vbTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1pZC1nZXQtdGltZSIgdGl0bGU9ImdzdF9jbG9ja19pZF9nZXRfdGltZSAoKSI+Z3N0X2Nsb2NrX2lkX2dldF90aW1lPC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gaWQ8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdENsb2NrUmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrUmV0dXJuPC9zcGFuPjwvYT4gICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2staWQtd2FpdCIgdGl0bGU9ImdzdF9jbG9ja19pZF93YWl0ICgpIj5nc3RfY2xvY2tfaWRfd2FpdDwvYT4gICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiBpZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWVEaWZmIiB0aXRsZT0iR3N0Q2xvY2tUaW1lRGlmZiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZURpZmY8L3NwYW4+PC9hPiAqaml0dGVyPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RDbG9ja1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1JldHVybjwvc3Bhbj48L2E+ICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLXdhaXQtYXN5bmMiIHRpdGxlPSJnc3RfY2xvY2tfaWRfd2FpdF9hc3luYyAoKSI+Z3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmM8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gaWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tDYWxsYmFjayIgdGl0bGU9IkdzdENsb2NrQ2FsbGJhY2sgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0NhbGxiYWNrPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1JldHVybiIgdGl0bGU9ImVudW0gR3N0Q2xvY2tSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tSZXR1cm48L3NwYW4+PC9hPiAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1pZC13YWl0LWFzeW5jLWZ1bGwiIHRpdGxlPSJnc3RfY2xvY2tfaWRfd2FpdF9hc3luY19mdWxsICgpIj5nc3RfY2xvY2tfaWRfd2FpdF9hc3luY19mdWxsPC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiBpZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0NhbGxiYWNrIiB0aXRsZT0iR3N0Q2xvY2tDYWxsYmFjayAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrQ2FsbGJhY2s8L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRGF0YXNldHMuaHRtbCNHRGVzdHJveU5vdGlmeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT4gZGVzdHJveV9kYXRhPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLXVuc2NoZWR1bGUiIHRpdGxlPSJnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSAoKSI+Z3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGU8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gaWQ8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1pZC1jb21wYXJlLWZ1bmMiIHRpdGxlPSJnc3RfY2xvY2tfaWRfY29tcGFyZV9mdW5jICgpIj5nc3RfY2xvY2tfaWRfY29tcGFyZV9mdW5jPC9hPiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NvbnN0cG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjb25zdHBvaW50ZXI8L3NwYW4+PC9hPiBpZDE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djb25zdHBvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY29uc3Rwb2ludGVyPC9zcGFuPjwvYT4gaWQyPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2staWQtcmVmIiB0aXRsZT0iZ3N0X2Nsb2NrX2lkX3JlZiAoKSI+Z3N0X2Nsb2NrX2lkX3JlZjwvYT4gICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gaWQ8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2staWQtdW5yZWYiIHRpdGxlPSJnc3RfY2xvY2tfaWRfdW5yZWYgKCkiPmdzdF9jbG9ja19pZF91bnJlZjwvYT4gICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IGlkPC9jb2RlPjwvZW0+KTsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RDbG9jay5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+R09iamVjdDwvYT4KKyAgICstLS0tPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KKyAgICAgICAgICstLS0tPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+CisgICAgICAgICAgICAgICArLS0tLUdzdENsb2NrCisgICAgICAgICAgICAgICAgICAgICArLS0tLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTeXN0ZW1DbG9jay5odG1sIiB0aXRsZT0iR3N0U3lzdGVtQ2xvY2siPkdzdFN5c3RlbUNsb2NrPC9hPgorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdENsb2NrLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9jay0tc3RhdHMiIHRpdGxlPSdUaGUgInN0YXRzIiBwcm9wZXJ0eSc+c3RhdHM8L2E+IiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrLS10aW1lb3V0IiB0aXRsZT0nVGhlICJ0aW1lb3V0IiBwcm9wZXJ0eSc+dGltZW91dDwvYT4iICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2stLXdpbmRvdy1zaXplIiB0aXRsZT0nVGhlICJ3aW5kb3ctc2l6ZSIgcHJvcGVydHknPndpbmRvdy1zaXplPC9hPiIgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrLS13aW5kb3ctdGhyZXNob2xkIiB0aXRsZT0nVGhlICJ3aW5kb3ctdGhyZXNob2xkIiBwcm9wZXJ0eSc+d2luZG93LXRocmVzaG9sZDwvYT4iICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdENsb2NrLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPgorR1N0cmVhbWVyIHVzZXMgYSBnbG9iYWwgY2xvY2sgdG8gc3luY2hyb25pemUgdGhlIHBsdWdpbnMgaW4gYSBwaXBlbGluZS4KK0RpZmZlcmVudCBjbG9jayBpbXBsZW1lbnRhdGlvbnMgYXJlIHBvc3NpYmxlIGJ5IGltcGxlbWVudGluZyB0aGlzIGFic3RyYWN0CitiYXNlIGNsYXNzIG9yLCBtb3JlIGNvbnZlbmllbnRseSwgYnkgc3ViY2xhc3NpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN5c3RlbUNsb2NrLmh0bWwiIHRpdGxlPSJHc3RTeXN0ZW1DbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN5c3RlbUNsb2NrPC9zcGFuPjwvYT4uCis8L3A+Cis8cD4KK1RoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiByZXR1cm5zIGEgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIHRpbWUgd2l0aCB0aGUgbWV0aG9kCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stZ2V0LXRpbWUiIHRpdGxlPSJnc3RfY2xvY2tfZ2V0X3RpbWUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX2dldF90aW1lKCk8L2NvZGU+PC9hPi4gSXRzIGFjY3VyYWN5IGFuZCBiYXNlIHRpbWUgZGVwZW5kIG9uIHRoZSBzcGVjaWZpYworY2xvY2sgaW1wbGVtZW50YXRpb24gYnV0IHRpbWUgaXMgYWx3YXlzIGV4cHJlc3NlZCBpbiBuYW5vc2Vjb25kcy4gU2luY2UgdGhlCitiYXNlbGluZSBvZiB0aGUgY2xvY2sgaXMgdW5kZWZpbmVkLCB0aGUgY2xvY2sgdGltZSByZXR1cm5lZCBpcyBub3QKK21lYW5pbmdmdWwgaW4gaXRzZWxmLCB3aGF0IG1hdHRlcnMgYXJlIHRoZSBkZWx0YXMgYmV0d2VlbiB0d28gY2xvY2sgdGltZXMuCitUaGUgdGltZSByZXR1cm5lZCBieSBhIGNsb2NrIGlzIGNhbGxlZCB0aGUgYWJzb2x1dGUgdGltZS4KKzwvcD4KKzxwPgorVGhlIHBpcGVsaW5lIHVzZXMgdGhlIGNsb2NrIHRvIGNhbGN1bGF0ZSB0aGUgcnVubmluZyB0aW1lLiBVc3VhbGx5IGFsbAorcmVuZGVyZXJzIHN5bmNocm9uaXplIHRvIHRoZSBnbG9iYWwgY2xvY2sgdXNpbmcgdGhlIGJ1ZmZlciB0aW1lc3RhbXBzLCB0aGUKK25ld3NlZ21lbnQgZXZlbnRzIGFuZCB0aGUgZWxlbWVudCdzIGJhc2UgdGltZSwgc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+LgorPC9wPgorPHA+CitBIGNsb2NrIGltcGxlbWVudGF0aW9uIGNhbiBzdXBwb3J0IHBlcmlvZGljIGFuZCBzaW5nbGUgc2hvdCBjbG9jaworbm90aWZpY2F0aW9ucyBib3RoIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMuCis8L3A+Cis8cD4KK09uZSBmaXJzdCBuZWVkcyB0byBjcmVhdGUgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiBmb3IgdGhlIHBlcmlvZGljIG9yIHNpbmdsZSBzaG90Citub3RpZmljYXRpb24gdXNpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLW5ldy1zaW5nbGUtc2hvdC1pZCIgdGl0bGU9ImdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCgpPC9jb2RlPjwvYT4gb3IKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1uZXctcGVyaW9kaWMtaWQiIHRpdGxlPSJnc3RfY2xvY2tfbmV3X3BlcmlvZGljX2lkICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jbG9ja19uZXdfcGVyaW9kaWNfaWQoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitUbyBwZXJmb3JtIGEgYmxvY2tpbmcgd2FpdCBmb3IgdGhlIHNwZWNpZmljIHRpbWUgb2YgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IHVzZSB0aGUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1pZC13YWl0IiB0aXRsZT0iZ3N0X2Nsb2NrX2lkX3dhaXQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX2lkX3dhaXQoKTwvY29kZT48L2E+LiBUbyByZWNlaXZlIGEgY2FsbGJhY2sgd2hlbiB0aGUgc3BlY2lmaWMgdGltZSBpcyByZWFjaGVkCitpbiB0aGUgY2xvY2sgdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1pZC13YWl0LWFzeW5jIiB0aXRsZT0iZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMoKTwvY29kZT48L2E+LiBCb3RoIHRoZXNlIGNhbGxzIGNhbiBiZQoraW50ZXJydXB0ZWQgd2l0aCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLXVuc2NoZWR1bGUiIHRpdGxlPSJnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSgpPC9jb2RlPjwvYT4gY2FsbC4gSWYgdGhlIGJsb2NraW5nIHdhaXQgaXMKK3Vuc2NoZWR1bGVkIGEgcmV0dXJuIHZhbHVlIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1VTlNDSEVEVUxFRDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0NMT0NLX1VOU0NIRURVTEVEPC9zcGFuPjwvYT4gaXMgcmV0dXJuZWQuCis8L3A+Cis8cD4KK1BlcmlvZGljIGNhbGxiYWNrcyBzY2hlZHVsZWQgYXN5bmMgd2lsbCBiZSByZXBlYXRlZGx5IGNhbGxlZCBhdXRvbWF0aWNhbGx5Cit1bnRpbCBpdCBpcyB1bnNjaGVkdWxlZC4gVG8gc2NoZWR1bGUgYSBzeW5jIHBlcmlvZGljIGNhbGxiYWNrLAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLXdhaXQiIHRpdGxlPSJnc3RfY2xvY2tfaWRfd2FpdCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfaWRfd2FpdCgpPC9jb2RlPjwvYT4gc2hvdWxkIGJlIGNhbGxlZCByZXBlYXRlZGx5LgorPC9wPgorPHA+CitUaGUgYXN5bmMgY2FsbGJhY2tzIGNhbiBoYXBwZW4gZnJvbSBhbnkgdGhyZWFkLCBlaXRoZXIgcHJvdmlkZWQgYnkgdGhlIGNvcmUKK29yIGZyb20gYSBzdHJlYW1pbmcgdGhyZWFkLiBUaGUgYXBwbGljYXRpb24gc2hvdWxkIGJlIHByZXBhcmVkIGZvciB0aGlzLgorPC9wPgorPHA+CitBIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IHRoYXQgaGFzIGJlZW4gdW5zY2hlZHVsZWQgY2Fubm90IGJlIHVzZWQgYWdhaW4gZm9yIGFueSB3YWl0CitvcGVyYXRpb24sIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IHNob3VsZCBiZSBjcmVhdGVkIGFuZCB0aGUgb2xkIHVuc2NoZWR1bGVkIG9uZQorc2hvdWxkIGJlIGRlc3Ryb3llZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1pZC11bnJlZiIgdGl0bGU9ImdzdF9jbG9ja19pZF91bnJlZiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfaWRfdW5yZWYoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitJdCBpcyBwb3NzaWJsZSB0byBwZXJmb3JtIGEgYmxvY2tpbmcgd2FpdCBvbiB0aGUgc2FtZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiBmcm9tCittdWx0aXBsZSB0aHJlYWRzLiBIb3dldmVyLCByZWdpc3RlcmluZyB0aGUgc2FtZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiBmb3IgbXVsdGlwbGUKK2FzeW5jIG5vdGlmaWNhdGlvbnMgaXMgbm90IHBvc3NpYmxlLCB0aGUgY2FsbGJhY2sgd2lsbCBvbmx5IGJlIGNhbGxlZCBmb3IKK3RoZSB0aHJlYWQgcmVnaXN0ZXJpbmcgdGhlIGVudHJ5IGxhc3QuCis8L3A+Cis8cD4KK05vbmUgb2YgdGhlIHdhaXQgb3BlcmF0aW9ucyB1bnJlZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4sIHRoZSBvd25lciBpcyByZXNwb25zaWJsZQorZm9yIHVucmVmZmluZyB0aGUgaWRzIGl0c2VsZi4gVGhpcyBob2xkcyBmb3IgYm90aCBwZXJpb2RpYyBhbmQgc2luZ2xlIHNob3QKK25vdGlmaWNhdGlvbnMuIFRoZSByZWFzb24gYmVpbmcgdGhhdCB0aGUgb3duZXIgb2YgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IGhhcyB0bwora2VlcCBhIGhhbmRsZSB0byB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gdG8gdW5ibG9jayB0aGUgd2FpdCBvbiBGTFVTSElORyBldmVudHMgb3IKK3N0YXRlIGNoYW5nZXMgYW5kIGlmIHRoZSBlbnRyeSB3b3VsZCBiZSB1bnJlZmZlZCBhdXRvbWF0aWNhbGx5LCB0aGUgaGFuZGxlIAorbWlnaHQgYmVjb21lIGludmFsaWQgd2l0aG91dCBhbnkgbm90aWZpY2F0aW9uLgorPC9wPgorPHA+CitUaGVzZSBjbG9jayBvcGVyYXRpb25zIGRvIG5vdCBvcGVyYXRlIG9uIHRoZSBydW5uaW5nIHRpbWUsIHNvIHRoZSBjYWxsYmFja3MKK3dpbGwgYWxzbyBvY2N1ciB3aGVuIG5vdCBpbiBQTEFZSU5HIHN0YXRlIGFzIGlmIHRoZSBjbG9jayBqdXN0IGtlZXBzIG9uCitydW5uaW5nLiBTb21lIGNsb2NrcyBob3dldmVyIGRvIG5vdCBwcm9ncmVzcyB3aGVuIHRoZSBlbGVtZW50IHRoYXQgcHJvdmlkZWQKK3RoZSBjbG9jayBpcyBub3QgUExBWUlORy4KKzwvcD4KKzxwPgorV2hlbiBhIGNsb2NrIGhhcyB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLUZMQUctQ0FOLVNFVC1NQVNURVI6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9DTE9DS19GTEFHX0NBTl9TRVRfTUFTVEVSPC9zcGFuPjwvYT4gZmxhZyBzZXQsIGl0IGNhbiBiZQorc2xhdmVkIHRvIGFub3RoZXIgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gd2l0aCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLXNldC1tYXN0ZXIiIHRpdGxlPSJnc3RfY2xvY2tfc2V0X21hc3RlciAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfc2V0X21hc3RlcigpPC9jb2RlPjwvYT4uIFRoZSBjbG9jayB3aWxsCit0aGVuIGF1dG9tYXRpY2FsbHkgYmUgc3luY2hyb25pemVkIHRvIHRoaXMgbWFzdGVyIGNsb2NrIGJ5IHJlcGVhdGVkbHkKK3NhbXBsaW5nIHRoZSBtYXN0ZXIgY2xvY2sgYW5kIHRoZSBzbGF2ZSBjbG9jayBhbmQgcmVjYWxpYnJhdGluZyB0aGUgc2xhdmUKK2Nsb2NrIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLXNldC1jYWxpYnJhdGlvbiIgdGl0bGU9ImdzdF9jbG9ja19zZXRfY2FsaWJyYXRpb24gKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX3NldF9jYWxpYnJhdGlvbigpPC9jb2RlPjwvYT4uIFRoaXMgZmVhdHVyZSBpcyBtb3N0bHkgdXNlZnVsIGZvcgorcGx1Z2lucyB0aGF0IGhhdmUgYW4gaW50ZXJuYWwgY2xvY2sgYnV0IG11c3Qgb3BlcmF0ZSB3aXRoIGFub3RoZXIgY2xvY2sKK3NlbGVjdGVkIGJ5IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPi4gIFRoZXkgY2FuIHRyYWNrIHRoZSBvZmZzZXQgYW5kIHJhdGUgZGlmZmVyZW5jZQorb2YgdGhlaXIgaW50ZXJuYWwgY2xvY2sgcmVsYXRpdmUgdG8gdGhlIG1hc3RlciBjbG9jayBieSB1c2luZyB0aGUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1nZXQtY2FsaWJyYXRpb24iIHRpdGxlPSJnc3RfY2xvY2tfZ2V0X2NhbGlicmF0aW9uICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jbG9ja19nZXRfY2FsaWJyYXRpb24oKTwvY29kZT48L2E+IGZ1bmN0aW9uLiAKKzwvcD4KKzxwPgorVGhlIG1hc3Rlci9zbGF2ZSBzeW5jaHJvbmlzYXRpb24gY2FuIGJlIHR1bmVkIHdpdGggdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrLS10aW1lb3V0IiB0aXRsZT0nVGhlICJ0aW1lb3V0IiBwcm9wZXJ0eSc+PHNwYW4gY2xhc3M9InR5cGUiPiJ0aW1lb3V0Ijwvc3Bhbj48L2E+LAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2stLXdpbmRvdy1zaXplIiB0aXRsZT0nVGhlICJ3aW5kb3ctc2l6ZSIgcHJvcGVydHknPjxzcGFuIGNsYXNzPSJ0eXBlIj4id2luZG93LXNpemUiPC9zcGFuPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrLS13aW5kb3ctdGhyZXNob2xkIiB0aXRsZT0nVGhlICJ3aW5kb3ctdGhyZXNob2xkIiBwcm9wZXJ0eSc+PHNwYW4gY2xhc3M9InR5cGUiPiJ3aW5kb3ctdGhyZXNob2xkIjwvc3Bhbj48L2E+IHByb3BlcnRpZXMuCitUaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2stLXRpbWVvdXQiIHRpdGxlPSdUaGUgInRpbWVvdXQiIHByb3BlcnR5Jz48c3BhbiBjbGFzcz0idHlwZSI+InRpbWVvdXQiPC9zcGFuPjwvYT4gcHJvcGVydHkgZGVmaW5lcyB0aGUgaW50ZXJ2YWwgdG8gc2FtcGxlIHRoZSBtYXN0ZXIKK2Nsb2NrIGFuZCBydW4gdGhlIGNhbGlicmF0aW9uIGZ1bmN0aW9ucy4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2stLXdpbmRvdy1zaXplIiB0aXRsZT0nVGhlICJ3aW5kb3ctc2l6ZSIgcHJvcGVydHknPjxzcGFuIGNsYXNzPSJ0eXBlIj4id2luZG93LXNpemUiPC9zcGFuPjwvYT4gZGVmaW5lcyB0aGUKK251bWJlciBvZiBzYW1wbGVzIHRvIHVzZSB3aGVuIGNhbGlicmF0aW5nIGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9jay0td2luZG93LXRocmVzaG9sZCIgdGl0bGU9J1RoZSAid2luZG93LXRocmVzaG9sZCIgcHJvcGVydHknPjxzcGFuIGNsYXNzPSJ0eXBlIj4id2luZG93LXRocmVzaG9sZCI8L3NwYW4+PC9hPgorZGVmaW5lcyB0aGUgbWluaW11bSBudW1iZXIgb2Ygc2FtcGxlcyBiZWZvcmUgdGhlIGNhbGlicmF0aW9uIGlzIHBlcmZvcm1lZC4KKzwvcD4KKzxwPgorTGFzdCByZXZpZXdlZCBvbiAyMDA5LTA1LTIxICgwLjEwLjI0KQorPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RDbG9jay5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0Q2xvY2stc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RDbG9jazwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdENsb2NrOzwvcHJlPgorPHA+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiBiYXNlIHN0cnVjdHVyZS4gVGhlIHZhbHVlcyBvZiB0aGlzIHN0cnVjdHVyZSBhcmUKK3Byb3RlY3RlZCBmb3Igc3ViY2xhc3NlcywgdXNlIHRoZSBtZXRob2RzIHRvIHVzZSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4uCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdENsb2NrQ2xhc3MiPjwvYT48aDM+c3RydWN0IEdzdENsb2NrQ2xhc3M8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RDbG9ja0NsYXNzIHsKKyAgR3N0T2JqZWN0Q2xhc3MgICAgICAgIHBhcmVudF9jbGFzczsKKworICAvKiB2dGFibGUgKi8KKyAgR3N0Q2xvY2tUaW1lICAgICAgICAgICgqY2hhbmdlX3Jlc29sdXRpb24pICAgIChHc3RDbG9jayAqY2xvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIG9sZF9yZXNvbHV0aW9uLAorCQkJCQkJIEdzdENsb2NrVGltZSBuZXdfcmVzb2x1dGlvbik7CisgIEdzdENsb2NrVGltZSAgICAgICAgICAoKmdldF9yZXNvbHV0aW9uKSAgICAgICAoR3N0Q2xvY2sgKmNsb2NrKTsKKworICBHc3RDbG9ja1RpbWUJCSgqZ2V0X2ludGVybmFsX3RpbWUpwqAoR3N0Q2xvY2sgKmNsb2NrKTsKKworICAvKiB3YWl0aW5nIG9uIGFuIElEICovCisgIEdzdENsb2NrUmV0dXJuICAgICAgICAoKndhaXQpICAgICAgICAgICAgICAgICAoR3N0Q2xvY2sgKmNsb2NrLCBHc3RDbG9ja0VudHJ5ICplbnRyeSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lRGlmZiAqaml0dGVyKTsKKyAgR3N0Q2xvY2tSZXR1cm4gICAgICAgICgqd2FpdF9hc3luYykgICAgICAgICAgIChHc3RDbG9jayAqY2xvY2ssIEdzdENsb2NrRW50cnkgKmVudHJ5KTsKKyAgdm9pZCAgICAgICAgICAgICAgICAgICgqdW5zY2hlZHVsZSkJCShHc3RDbG9jayAqY2xvY2ssIEdzdENsb2NrRW50cnkgKmVudHJ5KTsKK307Cis8L3ByZT4KKzxwPgorR1N0cmVhbWVyIGNsb2NrIGNsYXNzLiBPdmVycmlkZSB0aGUgdm1ldGhvZHMgdG8gaW1wbGVtZW50IHRoZSBjbG9jaworZnVuY3Rpb25hbGl0eS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHc3RPYmplY3RDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RPYmplY3RDbGFzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdENsYXNzPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdENsb2NrQ2xhc3MucGFyZW50LWNsYXNzIj48L2E+cGFyZW50X2NsYXNzPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGFyZW50IGNsYXNzIHN0cnVjdHVyZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RDbG9ja0NsYXNzLmNoYW5nZS1yZXNvbHV0aW9uIj48L2E+Y2hhbmdlX3Jlc29sdXRpb248L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPmNoYW5nZSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgY2xvY2suIE5vdCBhbGwgdmFsdWVzIG1pZ2h0CitiZSBhY2NlcHRhYmxlLiBUaGUgbmV3IHJlc29sdXRpb24gc2hvdWxkIGJlIHJldHVybmVkLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RDbG9ja0NsYXNzLmdldC1yZXNvbHV0aW9uIj48L2E+Z2V0X3Jlc29sdXRpb248L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPmdldCB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgY2xvY2suPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdENsb2NrQ2xhc3MuZ2V0LWludGVybmFsLXRpbWUiPjwvYT5nZXRfaW50ZXJuYWxfdGltZTwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Z2V0IHRoZSBpbnRlcm5hbCB1bmFkanVzdGVkIHRpbWUgb2YgdGhlIGNsb2NrLgoraW1wbGVtZW50IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53YWl0X2ppdHRlcjwvY29kZT48L2VtPiBpbnN0ZWFkLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RDbG9ja0NsYXNzLndhaXQiPjwvYT53YWl0PC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wZXJmb3JtIGEgYmxvY2tpbmcgd2FpdCBvbiB0aGUgZ2l2ZW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tFbnRyeSIgdGl0bGU9InN0cnVjdCBHc3RDbG9ja0VudHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tFbnRyeTwvc3Bhbj48L2E+IGFuZCByZXR1cm4KK3RoZSBqaXR0ZXIuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdENsb2NrQ2xhc3Mud2FpdC1hc3luYyI+PC9hPndhaXRfYXN5bmM8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPnBlcmZvcm0gYW4gYXN5bmNocm9ub3VzIHdhaXQgZm9yIHRoZSBnaXZlbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0VudHJ5IiB0aXRsZT0ic3RydWN0IEdzdENsb2NrRW50cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0VudHJ5PC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdENsb2NrQ2xhc3MudW5zY2hlZHVsZSI+PC9hPnVuc2NoZWR1bGU8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPnVuYmxvY2sgYSBibG9ja2luZyBvciBhc3luYyB3YWl0IG9wZXJhdGlvbi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RDbG9ja1RpbWUiPjwvYT48aDM+R3N0Q2xvY2tUaW1lPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGd1aW50NjTCoEdzdENsb2NrVGltZTsKKzwvcHJlPgorPHA+CitBIGRhdGF0eXBlIHRvIGhvbGQgYSB0aW1lLCBtZWFzdXJlZCBpbiBuYW5vc2Vjb25kcy4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0Q2xvY2tUaW1lRGlmZiI+PC9hPjxoMz5Hc3RDbG9ja1RpbWVEaWZmPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGdpbnQ2NCBHc3RDbG9ja1RpbWVEaWZmOworPC9wcmU+Cis8cD4KK0EgZGF0YXR5cGUgdG8gaG9sZCBhIHRpbWUgZGlmZmVyZW5jZSwgbWVhc3VyZWQgaW4gbmFub3NlY29uZHMuCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdENsb2NrSUQiPjwvYT48aDM+R3N0Q2xvY2tJRDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBncG9pbnRlciBHc3RDbG9ja0lEOworPC9wcmU+Cis8cD4KK0EgZGF0YXR5cGUgdG8gaG9sZCB0aGUgaGFuZGxlIHRvIGFuIG91dHN0YW5kaW5nIHN5bmMgb3IgYXN5bmMgY2xvY2sgY2FsbGJhY2suCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1DTE9DSy1USU1FLU5PTkU6Q0FQUyI+PC9hPjxoMz5HU1RfQ0xPQ0tfVElNRV9OT05FPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DTE9DS19USU1FX05PTkUJCSgoR3N0Q2xvY2tUaW1lKSAtMSkKKzwvcHJlPgorPHA+CitDb25zdGFudCB0byBkZWZpbmUgYW4gdW5kZWZpbmVkIGNsb2NrIHRpbWUuCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1DTE9DSy1USU1FLUlTLVZBTElEOkNBUFMiPjwvYT48aDM+R1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCh0aW1lKcKgKCgoR3N0Q2xvY2tUaW1lKSh0aW1lKSkgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKKzwvcHJlPgorPHA+CitUZXN0cyBpZiBhIGdpdmVuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHJlcHJlc2VudHMgYSB2YWxpZCBkZWZpbmVkIHRpbWUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Y2xvY2sgdGltZSB0byB2YWxpZGF0ZTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtU0VDT05EOkNBUFMiPjwvYT48aDM+R1NUX1NFQ09ORDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfU0VDT05EICAoR19VU0VDX1BFUl9TRUMgKiBHX0dJTlQ2NF9DT05TVEFOVCAoMTAwMCkpCis8L3ByZT4KKzxwPgorQ29uc3RhbnQgdGhhdCBkZWZpbmVzIG9uZSBHU3RyZWFtZXIgc2Vjb25kLgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtTVNFQ09ORDpDQVBTIj48L2E+PGgzPkdTVF9NU0VDT05EPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9NU0VDT05EIChHU1RfU0VDT05EIC8gR19HSU5UNjRfQ09OU1RBTlQgKDEwMDApKQorPC9wcmU+Cis8cD4KK0NvbnN0YW50IHRoYXQgZGVmaW5lcyBvbmUgR1N0cmVhbWVyIG1pbGxpc2Vjb25kLgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVVNFQ09ORDpDQVBTIj48L2E+PGgzPkdTVF9VU0VDT05EPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9VU0VDT05EIChHU1RfU0VDT05EIC8gR19HSU5UNjRfQ09OU1RBTlQgKDEwMDAwMDApKQorPC9wcmU+Cis8cD4KK0NvbnN0YW50IHRoYXQgZGVmaW5lcyBvbmUgR1N0cmVhbWVyIG1pY3Jvc2Vjb25kLgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtTlNFQ09ORDpDQVBTIj48L2E+PGgzPkdTVF9OU0VDT05EPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9OU0VDT05EIChHU1RfU0VDT05EIC8gR19HSU5UNjRfQ09OU1RBTlQgKDEwMDAwMDAwMDApKQorPC9wcmU+Cis8cD4KK0NvbnN0YW50IHRoYXQgZGVmaW5lcyBvbmUgR1N0cmVhbWVyIG5hbm9zZWNvbmQKKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRJTUUtQVMtU0VDT05EUzpDQVBTIj48L2E+PGgzPkdTVF9USU1FX0FTX1NFQ09ORFMoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVElNRV9BU19TRUNPTkRTKHRpbWUpICAoKHRpbWUpIC8gR1NUX1NFQ09ORCkKKzwvcHJlPgorPHA+CitDb252ZXJ0IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdG8gc2Vjb25kcy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdGltZTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjE2PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVElNRS1BUy1NU0VDT05EUzpDQVBTIj48L2E+PGgzPkdTVF9USU1FX0FTX01TRUNPTkRTKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RJTUVfQVNfTVNFQ09ORFModGltZSkgKCh0aW1lKSAvIEdfR0lOVDY0X0NPTlNUQU5UICgxMDAwMDAwKSkKKzwvcHJlPgorPHA+CitDb252ZXJ0IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdG8gbWlsbGlzZWNvbmRzICgxLzEwMDAgb2YgYSBzZWNvbmQpLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50aW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB0aW1lPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1USU1FLUFTLVVTRUNPTkRTOkNBUFMiPjwvYT48aDM+R1NUX1RJTUVfQVNfVVNFQ09ORFMoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVElNRV9BU19VU0VDT05EUyh0aW1lKSAoKHRpbWUpIC8gR19HSU5UNjRfQ09OU1RBTlQgKDEwMDApKQorPC9wcmU+Cis8cD4KK0NvbnZlcnQgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0byBtaWNyb3NlY29uZHMgKDEvMTAwMDAwMCBvZiBhIHNlY29uZCkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHRpbWU8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xNjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRJTUUtQVMtTlNFQ09ORFM6Q0FQUyI+PC9hPjxoMz5HU1RfVElNRV9BU19OU0VDT05EUygpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9USU1FX0FTX05TRUNPTkRTKHRpbWUpICh0aW1lKQorPC9wcmU+Cis8cD4KK0NvbnZlcnQgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0byBuYW5vc2Vjb25kcyAoMS8xMDAwMDAwMDAwIG9mIGEgc2Vjb25kKS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdGltZTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjE2PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQ0xPQ0stRElGRjpDQVBTIj48L2E+PGgzPkdTVF9DTE9DS19ESUZGKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NMT0NLX0RJRkYocywgZSkJCShHc3RDbG9ja1RpbWVEaWZmKSgoZSkgLSAocykpCis8L3ByZT4KKzxwPgorQ2FsY3VsYXRlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBjbG9jayB0aW1lcyBhcyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZURpZmYiIHRpdGxlPSJHc3RDbG9ja1RpbWVEaWZmIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lRGlmZjwvc3Bhbj48L2E+LgorVGhlIGRpZmZlcmVuY2UgaXMgY2FsY3VsYXRlZCBhcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZTwvY29kZT48L2VtPiAtIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGZpcnN0IHRpbWU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNlY29uZCB0aW1lPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRJTUVWQUwtVE8tVElNRTpDQVBTIj48L2E+PGgzPkdTVF9USU1FVkFMX1RPX1RJTUUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVElNRVZBTF9UT19USU1FKHR2KQkJKEdzdENsb2NrVGltZSkoKHR2KS50dl9zZWMgKiBHU1RfU0VDT05EICsgKHR2KS50dl91c2VjICogR1NUX1VTRUNPTkQpCis8L3ByZT4KKzxwPgorQ29udmVydCBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRGF0ZS1hbmQtVGltZS1GdW5jdGlvbnMuaHRtbCNHVGltZVZhbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdUaW1lVmFsPC9zcGFuPjwvYT4gdG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHY8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHRpbWV2YWwgdG8gY29udmVydDwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVElNRS1UTy1USU1FVkFMOkNBUFMiPjwvYT48aDM+R1NUX1RJTUVfVE9fVElNRVZBTCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9USU1FX1RPX1RJTUVWQUwodCx0dik8L3ByZT4KKzxwPgorQ29udmVydCBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRvIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1EYXRlLWFuZC1UaW1lLUZ1bmN0aW9ucy5odG1sI0dUaW1lVmFsIj48c3BhbiBjbGFzcz0idHlwZSI+R1RpbWVWYWw8L3NwYW4+PC9hPgorPC9wPgorPHA+Cis8L3A+Cis8ZGl2IGNsYXNzPSJub3RlIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+Cis8aDMgY2xhc3M9InRpdGxlIj5Ob3RlPC9oMz5vbiAzMi1iaXQgc3lzdGVtcywgYSB0aW1ldmFsIGhhcyBhIHJhbmdlIG9mIG9ubHkgMl4zMiAtIDEgc2Vjb25kcywKK3doaWNoIGlzIGFib3V0IDY4IHllYXJzLiAgRXhwZWN0IHRyb3VibGUgaWYgeW91IHdhbnQgdG8gc2NoZWR1bGUgc3R1ZmYKK2luIHlvdXIgcGlwZWxpbmUgZm9yIDIwMzguPC9kaXY+Cis8cD4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0byBjb252ZXJ0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50djwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgdGFyZ2V0IHRpbWV2YWw8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVElNRVNQRUMtVE8tVElNRTpDQVBTIj48L2E+PGgzPkdTVF9USU1FU1BFQ19UT19USU1FKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RJTUVTUEVDX1RPX1RJTUUodHMpwqAoR3N0Q2xvY2tUaW1lKSgodHMpLnR2X3NlYyAqIEdTVF9TRUNPTkQgKyAodHMpLnR2X25zZWMgKiBHU1RfTlNFQ09ORCkKKzwvcHJlPgorPHA+CitDb252ZXJ0IGEgc3RydWN0IHRpbWVzcGVjIChzZWUgbWFuIHBzZWxlY3QpIHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB0aW1lc3BlYyB0byBjb252ZXJ0PC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1USU1FLVRPLVRJTUVTUEVDOkNBUFMiPjwvYT48aDM+R1NUX1RJTUVfVE9fVElNRVNQRUMoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfVElNRV9UT19USU1FU1BFQyh0LHRzKTwvcHJlPgorPHA+CitDb252ZXJ0IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdG8gYSBzdHJ1Y3QgdGltZXNwZWMgKHNlZSBtYW4gcHNlbGVjdCkKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0byBjb252ZXJ0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50czwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgdGFyZ2V0IHRpbWVzcGVjPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUNMT0NLLUVOVFJZLVRSQUNFLU5BTUU6Q0FQUyI+PC9hPjxoMz5HU1RfQ0xPQ0tfRU5UUllfVFJBQ0VfTkFNRTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQ0xPQ0tfRU5UUllfVFJBQ0VfTkFNRSAiR3N0Q2xvY2tFbnRyeSIKKzwvcHJlPgorPHA+CitUaGUgbmFtZSB1c2VkIGZvciB0cmFjaW5nIGNsb2NrIGVudHJ5IGFsbG9jYXRpb25zLgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RDbG9ja0VudHJ5Ij48L2E+PGgzPnN0cnVjdCBHc3RDbG9ja0VudHJ5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0Q2xvY2tFbnRyeSB7CisgIGdpbnQJCQlyZWZjb3VudDsKK307Cis8L3ByZT4KKzxwPgorQWxsIHBlbmRpbmcgdGltZW91dHMgb3IgcGVyaW9kaWMgbm90aWZpZXMgYXJlIGNvbnZlcnRlZCBpbnRvCithbiBlbnRyeS4KK05vdGUgdGhhdCBHc3RDbG9ja0VudHJ5IHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIG9wYXF1ZSBzdHJ1Y3R1cmUuIEl0IG11c3QKK25vdCBiZSBleHRlbmRlZCBvciBhbGxvY2F0ZWQgdXNpbmcgYSBjdXN0b20gYWxsb2NhdG9yLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RDbG9ja0VudHJ5LnJlZmNvdW50Ij48L2E+cmVmY291bnQ8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnJlZmVyZW5jZSBjb3VudGVyIChyZWFkLW9ubHkpPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdENsb2NrQ2FsbGJhY2siPjwvYT48aDM+R3N0Q2xvY2tDYWxsYmFjayAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAoKkdzdENsb2NrQ2FsbGJhY2spICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IGlkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBvZiB0aGUgY2FsbGJhY2suCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGNsb2NrIHRoYXQgdHJpZ2dlcmVkIHRoZSBjYWxsYmFjazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgdGltZSBpdCB3YXMgdHJpZ2dlcmVkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gdGhhdCBleHBpcmVkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhIHBhc3NlZCBpbiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLXdhaXQtYXN5bmMiIHRpdGxlPSJnc3RfY2xvY2tfaWRfd2FpdF9hc3luYyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfaWRfd2FpdF9hc3luYygpPC9jb2RlPjwvYT4gZnVuY3Rpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IG9yIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gKGN1cnJlbnRseSB1bnVzZWQpPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0Q2xvY2tFbnRyeVR5cGUiPjwvYT48aDM+ZW51bSBHc3RDbG9ja0VudHJ5VHlwZTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBlbnVtIHsKKyAgR1NUX0NMT0NLX0VOVFJZX1NJTkdMRSwKKyAgR1NUX0NMT0NLX0VOVFJZX1BFUklPRElDCit9IEdzdENsb2NrRW50cnlUeXBlOworPC9wcmU+Cis8cD4KK1RoZSB0eXBlIG9mIHRoZSBjbG9jayBlbnRyeQorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQ0xPQ0stRU5UUlktU0lOR0xFOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9DTE9DS19FTlRSWV9TSU5HTEU8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgc2luZ2xlIHNob3QgdGltZW91dAorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUNMT0NLLUVOVFJZLVBFUklPRElDOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9DTE9DS19FTlRSWV9QRVJJT0RJQzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBwZXJpb2RpYyB0aW1lb3V0IHJlcXVlc3QKKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1DTE9DSy1FTlRSWTpDQVBTIj48L2E+PGgzPkdTVF9DTE9DS19FTlRSWSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DTE9DS19FTlRSWShlbnRyeSkJCSgoR3N0Q2xvY2tFbnRyeSAqKShlbnRyeSkpCis8L3ByZT4KKzxwPgorQ2FzdCB0byBhIGNsb2NrIGVudHJ5Cis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVudHJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBlbnRyeSB0byBjYXN0PC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1DTE9DSy1FTlRSWS1DTE9DSzpDQVBTIj48L2E+PGgzPkdTVF9DTE9DS19FTlRSWV9DTE9DSygpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DTE9DS19FTlRSWV9DTE9DSyhlbnRyeSnCoCgoZW50cnkpLSZndDtjbG9jaykKKzwvcHJlPgorPHA+CitHZXQgdGhlIG93bmVyIGNsb2NrIG9mIHRoZSBlbnRyeQorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbnRyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZW50cnkgdG8gcXVlcnk8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUNMT0NLLUVOVFJZLVRZUEU6Q0FQUyI+PC9hPjxoMz5HU1RfQ0xPQ0tfRU5UUllfVFlQRSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DTE9DS19FTlRSWV9UWVBFKGVudHJ5KcKgKChlbnRyeSktJmd0O3R5cGUpCis8L3ByZT4KKzxwPgorR2V0IHRoZSB0eXBlIG9mIHRoZSBjbG9jayBlbnRyeQorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbnRyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZW50cnkgdG8gcXVlcnk8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUNMT0NLLUVOVFJZLVRJTUU6Q0FQUyI+PC9hPjxoMz5HU1RfQ0xPQ0tfRU5UUllfVElNRSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DTE9DS19FTlRSWV9USU1FKGVudHJ5KcKgKChlbnRyeSktJmd0O3RpbWUpCis8L3ByZT4KKzxwPgorR2V0IHRoZSByZXF1ZXN0ZWQgdGltZSBvZiB0aGlzIGVudHJ5Cis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVudHJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBlbnRyeSB0byBxdWVyeTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQ0xPQ0stRU5UUlktSU5URVJWQUw6Q0FQUyI+PC9hPjxoMz5HU1RfQ0xPQ0tfRU5UUllfSU5URVJWQUwoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQ0xPQ0tfRU5UUllfSU5URVJWQUwoZW50cnkpwqAoKGVudHJ5KS0mZ3Q7aW50ZXJ2YWwpCis8L3ByZT4KKzxwPgorR2V0IHRoZSBpbnRlcnZhbCBvZiB0aGlzIHBlcmlvZGljIGVudHJ5Cis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVudHJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBlbnRyeSB0byBxdWVyeTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQ0xPQ0stRU5UUlktU1RBVFVTOkNBUFMiPjwvYT48aDM+R1NUX0NMT0NLX0VOVFJZX1NUQVRVUygpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DTE9DS19FTlRSWV9TVEFUVVMoZW50cnkpwqAoKGVudHJ5KS0mZ3Q7c3RhdHVzKQorPC9wcmU+Cis8cD4KK1RoZSBzdGF0dXMgb2YgdGhlIGVudHJ5Cis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVudHJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBlbnRyeSB0byBxdWVyeTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RDbG9ja1JldHVybiI+PC9hPjxoMz5lbnVtIEdzdENsb2NrUmV0dXJuPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGVudW0geworICBHU1RfQ0xPQ0tfT0sJCT0gIDAsCisgIEdTVF9DTE9DS19FQVJMWcKgPSAgMSwKKyAgR1NUX0NMT0NLX1VOU0NIRURVTEVEwqA9ICAyLAorICBHU1RfQ0xPQ0tfQlVTWcKgPSAgMywKKyAgR1NUX0NMT0NLX0JBRFRJTUXCoD0gIDQsCisgIEdTVF9DTE9DS19FUlJPUsKgPSAgNSwKKyAgR1NUX0NMT0NLX1VOU1VQUE9SVEVEwqA9ICA2LAorICBHU1RfQ0xPQ0tfRE9ORcKgPSAgNworfSBHc3RDbG9ja1JldHVybjsKKzwvcHJlPgorPHA+CitUaGUgcmV0dXJuIHZhbHVlIG9mIGEgY2xvY2sgb3BlcmF0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQ0xPQ0stT0s6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0NMT0NLX09LPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgb3BlcmF0aW9uIHN1Y2NlZWRlZC4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1DTE9DSy1FQVJMWTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQ0xPQ0tfRUFSTFk8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBvcGVyYXRpb24gd2FzIHNjaGVkdWxlZCB0b28gbGF0ZS4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1DTE9DSy1VTlNDSEVEVUxFRDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBjbG9ja0lEIHdhcyB1bnNjaGVkdWxlZAorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUNMT0NLLUJVU1k6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0NMT0NLX0JVU1k8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBDbG9ja0lEIGlzIGJ1c3kKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1DTE9DSy1CQURUSU1FOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9DTE9DS19CQURUSU1FPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIGJhZCB0aW1lIHdhcyBwcm92aWRlZCB0byBhIGZ1bmN0aW9uLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUNMT0NLLUVSUk9SOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9DTE9DS19FUlJPUjwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QW4gZXJyb3Igb2NjdXJyZWQKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1DTE9DSy1VTlNVUFBPUlRFRDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQ0xPQ0tfVU5TVVBQT1JURUQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPk9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQ0xPQ0stRE9ORTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQ0xPQ0tfRE9ORTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIENsb2NrSUQgaXMgZG9uZSB3YWl0aW5nIChTaW5jZTogMC4xMC4zMikKKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdENsb2NrRmxhZ3MiPjwvYT48aDM+ZW51bSBHc3RDbG9ja0ZsYWdzPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGVudW0geworICBHU1RfQ0xPQ0tfRkxBR19DQU5fRE9fU0lOR0xFX1NZTkMgICAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUICZsdDsmbHQ7IDApLAorICBHU1RfQ0xPQ0tfRkxBR19DQU5fRE9fU0lOR0xFX0FTWU5DICAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUICZsdDsmbHQ7IDEpLAorICBHU1RfQ0xPQ0tfRkxBR19DQU5fRE9fUEVSSU9ESUNfU1lOQyAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUICZsdDsmbHQ7IDIpLAorICBHU1RfQ0xPQ0tfRkxBR19DQU5fRE9fUEVSSU9ESUNfQVNZTkMgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUICZsdDsmbHQ7IDMpLAorICBHU1RfQ0xPQ0tfRkxBR19DQU5fU0VUX1JFU09MVVRJT04gICAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUICZsdDsmbHQ7IDQpLAorICBHU1RfQ0xPQ0tfRkxBR19DQU5fU0VUX01BU1RFUiAgICAgICAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUICZsdDsmbHQ7IDUpLAorICAvKiBwYWRkaW5nICovCisgIEdTVF9DTE9DS19GTEFHX0xBU1QJCSAgICAgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgJmx0OyZsdDsgOCkKK30gR3N0Q2xvY2tGbGFnczsKKzwvcHJlPgorPHA+CitUaGUgY2FwYWJpbGl0aWVzIG9mIHRoaXMgY2xvY2sKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUNMT0NLLUZMQUctQ0FOLURPLVNJTkdMRS1TWU5DOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9DTE9DS19GTEFHX0NBTl9ET19TSU5HTEVfU1lOQzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Y2xvY2sgY2FuIGRvIGEgc2luZ2xlIHN5bmMgdGltZW91dCByZXF1ZXN0Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQ0xPQ0stRkxBRy1DQU4tRE8tU0lOR0xFLUFTWU5DOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9DTE9DS19GTEFHX0NBTl9ET19TSU5HTEVfQVNZTkM8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmNsb2NrIGNhbiBkbyBhIHNpbmdsZSBhc3luYyB0aW1lb3V0IHJlcXVlc3QKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1DTE9DSy1GTEFHLUNBTi1ETy1QRVJJT0RJQy1TWU5DOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9DTE9DS19GTEFHX0NBTl9ET19QRVJJT0RJQ19TWU5DPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5jbG9jayBjYW4gZG8gc3luYyBwZXJpb2RpYyB0aW1lb3V0IHJlcXVlc3RzCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQ0xPQ0stRkxBRy1DQU4tRE8tUEVSSU9ESUMtQVNZTkM6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1BFUklPRElDX0FTWU5DPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5jbG9jayBjYW4gZG8gYXN5bmMgcGVyaW9kaWMgdGltZW91dCBjYWxsYmFja3MKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1DTE9DSy1GTEFHLUNBTi1TRVQtUkVTT0xVVElPTjpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQ0xPQ0tfRkxBR19DQU5fU0VUX1JFU09MVVRJT048L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmNsb2NrJ3MgcmVzb2x1dGlvbiBjYW4gYmUgY2hhbmdlZAorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUNMT0NLLUZMQUctQ0FOLVNFVC1NQVNURVI6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0NMT0NLX0ZMQUdfQ0FOX1NFVF9NQVNURVI8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmNsb2NrIGNhbiBiZSBzbGF2ZWQgdG8gYSBtYXN0ZXIgY2xvY2sKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1DTE9DSy1GTEFHLUxBU1Q6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0NMT0NLX0ZMQUdfTEFTVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c3ViY2xhc3NlcyBjYW4gYWRkIGFkZGl0aW9uYWwgZmxhZ3Mgc3RhcnRpbmcgZnJvbSB0aGlzIGZsYWcKKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1DTE9DSy1GTEFHUzpDQVBTIj48L2E+PGgzPkdTVF9DTE9DS19GTEFHUygpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DTE9DS19GTEFHUyhjbG9jaykgIEdTVF9PQkpFQ1RfRkxBR1MoY2xvY2spCis8L3ByZT4KKzxwPgorR2V0cyB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tGbGFncyIgdGl0bGU9ImVudW0gR3N0Q2xvY2tGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrRmxhZ3M8L3NwYW4+PC9hPiBjbG9jayBmbGFncy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGNsb2NrIHRvIHF1ZXJ5PC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1DTE9DSy1CUk9BRENBU1Q6Q0FQUyI+PC9hPjxoMz5HU1RfQ0xPQ0tfQlJPQURDQVNUKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NMT0NLX0JST0FEQ0FTVChjbG9jaykgICAgICAgZ19jb25kX2Jyb2FkY2FzdChHU1RfQ0xPQ0tfQ09ORChjbG9jaykpCis8L3ByZT4KKzxwPgorU2lnbmFsIHRoYXQgdGhlIGVudHJpZXMgaW4gdGhlIGNsb2NrIGhhdmUgY2hhbmdlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGNsb2NrIHRvIGJyb2FkY2FzdDwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQ0xPQ0stQ09ORDpDQVBTIj48L2E+PGgzPkdTVF9DTE9DS19DT05EKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NMT0NLX0NPTkQoY2xvY2spICAgICAgICAgICAgKEdTVF9DTE9DS19DQVNUKGNsb2NrKS0mZ3Q7ZW50cmllc19jaGFuZ2VkKQorPC9wcmU+Cis8cD4KK0dldHMgdGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItVGhyZWFkcy5odG1sI0dDb25kIj48c3BhbiBjbGFzcz0idHlwZSI+R0NvbmQ8L3NwYW4+PC9hPiB0aGF0IGdldHMgc2lnbmFsbGVkIHdoZW4gdGhlIGVudHJpZXMgb2YgdGhlIGNsb2NrCitjaGFuZ2VkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jbG9jazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY2xvY2sgdG8gcXVlcnk8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUNMT0NLLVRJTUVELVdBSVQ6Q0FQUyI+PC9hPjxoMz5HU1RfQ0xPQ0tfVElNRURfV0FJVCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DTE9DS19USU1FRF9XQUlUKGNsb2NrLHR2KSAgIGdfY29uZF90aW1lZF93YWl0KEdTVF9DTE9DS19DT05EKGNsb2NrKSxHU1RfT0JKRUNUX0dFVF9MT0NLKGNsb2NrKSx0dikKKzwvcHJlPgorPHA+CitXYWl0IG9uIHRoZSBjbG9jayB1bnRpbCB0aGUgZW50cmllcyBjaGFuZ2VkIG9yIHRoZSBzcGVjaWZpZWQgdGltZW91dAorb2NjdXJyZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGNsb2NrIHRvIHdhaXQgb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR2PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1EYXRlLWFuZC1UaW1lLUZ1bmN0aW9ucy5odG1sI0dUaW1lVmFsIj48c3BhbiBjbGFzcz0idHlwZSI+R1RpbWVWYWw8L3NwYW4+PC9hPiB0byB3YWl0LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1DTE9DSy1XQUlUOkNBUFMiPjwvYT48aDM+R1NUX0NMT0NLX1dBSVQoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQ0xPQ0tfV0FJVChjbG9jaykgICAgICAgICAgICBnX2NvbmRfd2FpdChHU1RfQ0xPQ0tfQ09ORChjbG9jayksR1NUX09CSkVDVF9HRVRfTE9DSyhjbG9jaykpCis8L3ByZT4KKzxwPgorV2FpdCBvbiB0aGUgY2xvY2sgdW50aWwgdGhlIGVudHJpZXMgY2hhbmdlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGNsb2NrIHRvIHdhaXQgb248L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNsb2NrLWFkZC1vYnNlcnZhdGlvbiI+PC9hPjxoMz5nc3RfY2xvY2tfYWRkX29ic2VydmF0aW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb24gICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKmNsb2NrPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHNsYXZlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IG1hc3RlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiAqcl9zcXVhcmVkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVGhlIHRpbWUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1hc3RlcjwvY29kZT48L2VtPiBvZiB0aGUgbWFzdGVyIGNsb2NrIGFuZCB0aGUgdGltZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2xhdmU8L2NvZGU+PC9lbT4gb2YgdGhlIHNsYXZlCitjbG9jayBhcmUgYWRkZWQgdG8gdGhlIGxpc3Qgb2Ygb2JzZXJ2YXRpb25zLiBJZiBlbm91Z2ggb2JzZXJ2YXRpb25zCithcmUgYXZhaWxhYmxlLCBhIGxpbmVhciByZWdyZXNzaW9uIGFsZ29yaXRobSBpcyBydW4gb24gdGhlCitvYnNlcnZhdGlvbnMgYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jbG9jazwvY29kZT48L2VtPiBpcyByZWNhbGlicmF0ZWQuCis8L3A+Cis8cD4KK0lmIHRoaXMgZnVuY3Rpb25zIHJldHVybnMgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yX3NxdWFyZWQ8L2NvZGU+PC9lbT4gd2lsbCBjb250YWluIHRoZSAKK2NvcnJlbGF0aW9uIGNvZWZmaWNpZW50IG9mIHRoZSBpbnRlcnBvbGF0aW9uLiBBIHZhbHVlIG9mIDEuMAorbWVhbnMgYSBwZXJmZWN0IHJlZ3Jlc3Npb24gd2FzIHBlcmZvcm1lZC4gVGhpcyB2YWx1ZSBjYW4KK2JlIHVzZWQgdG8gY29udHJvbCB0aGUgc2FtcGxpbmcgZnJlcXVlbmN5IG9mIHRoZSBtYXN0ZXIgYW5kIHNsYXZlCitjbG9ja3MuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zbGF2ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHRpbWUgb24gdGhlIHNsYXZlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYXN0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSB0aW1lIG9uIHRoZSBtYXN0ZXI8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJfc3F1YXJlZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gaG9sZCB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBlbm91Z2ggb2JzZXJ2YXRpb25zIHdlcmUgYWRkZWQgdG8gcnVuIHRoZQorcmVncmVzc2lvbiBhbGdvcml0aG0uCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jbG9jay1zZXQtbWFzdGVyIj48L2E+PGgzPmdzdF9jbG9ja19zZXRfbWFzdGVyICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9jbG9ja19zZXRfbWFzdGVyICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKmNsb2NrPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICptYXN0ZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1hc3RlcjwvY29kZT48L2VtPiBhcyB0aGUgbWFzdGVyIGNsb2NrIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT4uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jbG9jazwvY29kZT48L2VtPiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkKK2NhbGlicmF0ZWQgc28gdGhhdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stZ2V0LXRpbWUiIHRpdGxlPSJnc3RfY2xvY2tfZ2V0X3RpbWUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX2dldF90aW1lKCk8L2NvZGU+PC9hPiByZXBvcnRzIHRoZSBzYW1lIHRpbWUgYXMgdGhlCittYXN0ZXIgY2xvY2suICAKKzwvcD4KKzxwPgorQSBjbG9jayBwcm92aWRlciB0aGF0IHNsYXZlcyBpdHMgY2xvY2sgdG8gYSBtYXN0ZXIgY2FuIGdldCB0aGUgY3VycmVudAorY2FsaWJyYXRpb24gdmFsdWVzIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWdldC1jYWxpYnJhdGlvbiIgdGl0bGU9ImdzdF9jbG9ja19nZXRfY2FsaWJyYXRpb24gKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX2dldF9jYWxpYnJhdGlvbigpPC9jb2RlPjwvYT4uCis8L3A+Cis8cD4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYXN0ZXI8L2NvZGU+PC9lbT4gY2FuIGJlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGluIHdoaWNoIGNhc2UgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsb2NrPC9jb2RlPjwvZW0+IHdpbGwgbm90IGJlIHNsYXZlZCBhbnltb3JlLiBJdCB3aWxsCitob3dldmVyIGtlZXAgcmVwb3J0aW5nIGl0cyB0aW1lIGFkanVzdGVkIHdpdGggdGhlIGxhc3QgY29uZmlndXJlZCByYXRlIAorYW5kIHRpbWUgb2Zmc2V0cy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jbG9jazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1hc3RlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG1hc3RlciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgY2xvY2sgaXMgY2FwYWJsZSBvZiBiZWluZyBzbGF2ZWQgdG8gYSBtYXN0ZXIgY2xvY2suCitUcnlpbmcgdG8gc2V0IGEgbWFzdGVyIG9uIGEgY2xvY2sgd2l0aG91dCB0aGUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1GTEFHLUNBTi1TRVQtTUFTVEVSOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfQ0xPQ0tfRkxBR19DQU5fU0VUX01BU1RFUjwvc3Bhbj48L2E+IGZsYWcgd2lsbCBtYWtlIHRoaXMgZnVuY3Rpb24gcmV0dXJuIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4uCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jbG9jay1nZXQtbWFzdGVyIj48L2E+PGgzPmdzdF9jbG9ja19nZXRfbWFzdGVyICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKiAgICAgICAgICBnc3RfY2xvY2tfZ2V0X21hc3RlciAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCB0aGUgbWFzdGVyIGNsb2NrIHRoYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsb2NrPC9jb2RlPjwvZW0+IGlzIHNsYXZlZCB0byBvciA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB3aGVuIHRoZSBjbG9jayBpcworbm90IHNsYXZlZCB0byBhbnkgbWFzdGVyIGNsb2NrLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsb2NrPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbWFzdGVyIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IG9yIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHdoZW4gdGhpcyBjbG9jayBpcworbm90IHNsYXZlZCB0byBhIG1hc3RlciBjbG9jay4gVW5yZWYgYWZ0ZXIgdXNhZ2UuCitNVCBzYWZlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNsb2NrLXNldC1yZXNvbHV0aW9uIj48L2E+PGgzPmdzdF9jbG9ja19zZXRfcmVzb2x1dGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+ICAgICAgICBnc3RfY2xvY2tfc2V0X3Jlc29sdXRpb24gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiByZXNvbHV0aW9uPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0IHRoZSBhY2N1cmFjeSBvZiB0aGUgY2xvY2suIFNvbWUgY2xvY2tzIGhhdmUgdGhlIHBvc3NpYmlsaXR5IHRvIG9wZXJhdGUKK3dpdGggZGlmZmVyZW50IGFjY3VyYWN5IGF0IHRoZSBleHBlbnNlIG9mIG1vcmUgcmVzb3VyY2UgdXNhZ2UuIFRoZXJlIGlzCitub3JtYWxseSBubyBuZWVkIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCByZXNvbHV0aW9uIG9mIGEgY2xvY2suIFRoZSByZXNvbHV0aW9uCitvZiBhIGNsb2NrIGNhbiBvbmx5IGJlIGNoYW5nZWQgaWYgdGhlIGNsb2NrIGhhcyB0aGUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1GTEFHLUNBTi1TRVQtUkVTT0xVVElPTjpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0NMT0NLX0ZMQUdfQ0FOX1NFVF9SRVNPTFVUSU9OPC9zcGFuPjwvYT4gZmxhZyBzZXQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZXNvbHV0aW9uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSByZXNvbHV0aW9uIHRvIHNldDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXcgcmVzb2x1dGlvbiBvZiB0aGUgY2xvY2suPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNsb2NrLWdldC1yZXNvbHV0aW9uIj48L2E+PGgzPmdzdF9jbG9ja19nZXRfcmVzb2x1dGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+ICAgICAgICBnc3RfY2xvY2tfZ2V0X3Jlc29sdXRpb24gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCB0aGUgYWNjdXJhY3kgb2YgdGhlIGNsb2NrLiBUaGUgYWNjdXJhY3kgb2YgdGhlIGNsb2NrIGlzIHRoZSBncmFudWxhcml0eQorb2YgdGhlIHZhbHVlcyByZXR1cm5lZCBieSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stZ2V0LXRpbWUiIHRpdGxlPSJnc3RfY2xvY2tfZ2V0X3RpbWUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX2dldF90aW1lKCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jbG9jazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcmVzb2x1dGlvbiBvZiB0aGUgY2xvY2sgaW4gdW5pdHMgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4uCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jbG9jay1nZXQtdGltZSI+PC9hPjxoMz5nc3RfY2xvY2tfZ2V0X3RpbWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAgICAgICAgZ3N0X2Nsb2NrX2dldF90aW1lICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqY2xvY2s8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXRzIHRoZSBjdXJyZW50IHRpbWUgb2YgdGhlIGdpdmVuIGNsb2NrLiBUaGUgdGltZSBpcyBhbHdheXMKK21vbm90b25pY2FsbHkgaW5jcmVhc2luZyBhbmQgYWRqdXN0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50CitvZmZzZXQgYW5kIHJhdGUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiB0byBxdWVyeTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB0aW1lIG9mIHRoZSBjbG9jay4gT3IgR1NUX0NMT0NLX1RJTUVfTk9ORSB3aGVuCitnaXZlbiBpbnZhbGlkIGlucHV0LgorTVQgc2FmZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2xvY2stbmV3LXNpbmdsZS1zaG90LWlkIj48L2E+PGgzPmdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiAgICAgICAgICBnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT4gdG8gdHJpZ2dlciBhIHNpbmdsZSBzaG90Citub3RpZmljYXRpb24gYXQgdGhlIHJlcXVlc3RlZCB0aW1lLiBUaGUgc2luZ2xlIHNob3QgaWQgc2hvdWxkIGJlCit1bnJlZmZlZCBhZnRlciB1c2FnZS4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ3N0X2Nsb2NrX2lkX3VucmVmCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IHRvIGdldCBhIHNpbmdsZSBzaG90IG5vdGlmaWNhdGlvbiBmcm9tPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50aW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSByZXF1ZXN0ZWQgdGltZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IHRoZQordGltZSBub3RpZmljYXRpb24uCitNVCBzYWZlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNsb2NrLW5ldy1wZXJpb2RpYy1pZCI+PC9hPjxoMz5nc3RfY2xvY2tfbmV3X3BlcmlvZGljX2lkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gICAgICAgICAgZ3N0X2Nsb2NrX25ld19wZXJpb2RpY19pZCAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqY2xvY2s8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gc3RhcnRfdGltZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiBpbnRlcnZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCBhbiBJRCBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jbG9jazwvY29kZT48L2VtPiB0byB0cmlnZ2VyIGEgcGVyaW9kaWMgbm90aWZpY2F0aW9uLgorVGhlIHBlcmlvZGljIG5vdGlmaWNhdGlvbnMgd2lsbCBzdGFydCBhdCB0aW1lIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydF90aW1lPC9jb2RlPjwvZW0+IGFuZAord2lsbCB0aGVuIGJlIGZpcmVkIHdpdGggdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbnRlcnZhbDwvY29kZT48L2VtPi4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkPC9jb2RlPjwvZW0+IHNob3VsZCBiZSB1bnJlZmZlZAorYWZ0ZXIgdXNhZ2UuCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdzdF9jbG9ja19pZF91bnJlZgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsb2NrPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiB0byBnZXQgYSBwZXJpb2RpYyBub3RpZmljYXRpb24gaWQgZnJvbTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnRfdGltZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcmVxdWVzdGVkIHN0YXJ0IHRpbWU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmludGVydmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSByZXF1ZXN0ZWQgaW50ZXJ2YWw8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCB0aGUKK3RpbWUgbm90aWZpY2F0aW9uLgorTVQgc2FmZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jbG9jay1zaW5nbGUtc2hvdC1pZC1yZWluaXQiPjwvYT48aDM+Z3N0X2Nsb2NrX3NpbmdsZV9zaG90X2lkX3JlaW5pdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfY2xvY2tfc2luZ2xlX3Nob3RfaWRfcmVpbml0ICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiBpZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVpbml0aWFsaXplcyB0aGUgcHJvdmlkZWQgc2luZ2xlIHNob3QgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkPC9jb2RlPjwvZW0+IHRvIHRoZSBwcm92aWRlZCB0aW1lLiBEb2VzIG5vdAorbW9kaWZ5IHRoZSByZWZlcmVuY2UgY291bnQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIHJlcXVlc3RlZCB0aW1lLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIEdzdENsb2NrSUQgY291bGQgYmUgcmVpbml0aWFsaXplZCB0byB0aGUgcHJvdmlkZWQKKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50aW1lPC9jb2RlPjwvZW0+LCBlbHNlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNsb2NrLXBlcmlvZGljLWlkLXJlaW5pdCI+PC9hPjxoMz5nc3RfY2xvY2tfcGVyaW9kaWNfaWRfcmVpbml0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9jbG9ja19wZXJpb2RpY19pZF9yZWluaXQgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKmNsb2NrPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IGlkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHN0YXJ0X3RpbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gaW50ZXJ2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWluaXRpYWxpemVzIHRoZSBwcm92aWRlZCBwZXJpb2RpYyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWQ8L2NvZGU+PC9lbT4gdG8gdGhlIHByb3ZpZGVkIHN0YXJ0IHRpbWUgYW5kCitpbnRlcnZhbC4gRG9lcyBub3QgbW9kaWZ5IHRoZSByZWZlcmVuY2UgY291bnQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0X3RpbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHJlcXVlc3RlZCBzdGFydCB0aW1lPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbnRlcnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcmVxdWVzdGVkIGludGVydmFsPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgR3N0Q2xvY2tJRCBjb3VsZCBiZSByZWluaXRpYWxpemVkIHRvIHRoZSBwcm92aWRlZAorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWU8L2NvZGU+PC9lbT4sIGVsc2UgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2xvY2stZ2V0LWludGVybmFsLXRpbWUiPjwvYT48aDM+Z3N0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gICAgICAgIGdzdF9jbG9ja19nZXRfaW50ZXJuYWxfdGltZSAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKmNsb2NrPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgY3VycmVudCBpbnRlcm5hbCB0aW1lIG9mIHRoZSBnaXZlbiBjbG9jay4gVGhlIHRpbWUgaXMgcmV0dXJuZWQKK3VuYWRqdXN0ZWQgZm9yIHRoZSBvZmZzZXQgYW5kIHRoZSByYXRlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsb2NrPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gdG8gcXVlcnk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgaW50ZXJuYWwgdGltZSBvZiB0aGUgY2xvY2suIE9yIEdTVF9DTE9DS19USU1FX05PTkUgd2hlbgorZ2l2ZW4gaW52YWxpZCBpbnB1dC4KK01UIHNhZmUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNsb2NrLWFkanVzdC11bmxvY2tlZCI+PC9hPjxoMz5nc3RfY2xvY2tfYWRqdXN0X3VubG9ja2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gICAgICAgIGdzdF9jbG9ja19hZGp1c3RfdW5sb2NrZWQgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKmNsb2NrPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IGludGVybmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ29udmVydHMgdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbnRlcm5hbDwvY29kZT48L2VtPiBjbG9jayB0aW1lIHRvIHRoZSBleHRlcm5hbCB0aW1lLCBhZGp1c3RpbmcgZm9yIHRoZQorcmF0ZSBhbmQgcmVmZXJlbmNlIHRpbWUgc2V0IHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLXNldC1jYWxpYnJhdGlvbiIgdGl0bGU9ImdzdF9jbG9ja19zZXRfY2FsaWJyYXRpb24gKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX3NldF9jYWxpYnJhdGlvbigpPC9jb2RlPjwvYT4gYW5kIG1ha2luZyBzdXJlCit0aGF0IHRoZSByZXR1cm5lZCB0aW1lIGlzIGluY3JlYXNpbmcuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZQorY2xvY2sncyBPQkpFQ1RfTE9DSyBoZWxkIGFuZCBpcyBtYWlubHkgdXNlZCBieSBjbG9jayBzdWJjbGFzc2VzLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIGlzIHRoZSByZXZlcnNlIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay11bmFkanVzdC11bmxvY2tlZCIgdGl0bGU9ImdzdF9jbG9ja191bmFkanVzdF91bmxvY2tlZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfdW5hZGp1c3RfdW5sb2NrZWQoKTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsb2NrPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gdG8gdXNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbnRlcm5hbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGNsb2NrIHRpbWU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY29udmVydGVkIHRpbWUgb2YgdGhlIGNsb2NrLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jbG9jay11bmFkanVzdC11bmxvY2tlZCI+PC9hPjxoMz5nc3RfY2xvY2tfdW5hZGp1c3RfdW5sb2NrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAgICAgICAgZ3N0X2Nsb2NrX3VuYWRqdXN0X3VubG9ja2VkICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqY2xvY2s8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gZXh0ZXJuYWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb252ZXJ0cyB0aGUgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV4dGVybmFsPC9jb2RlPjwvZW0+IGNsb2NrIHRpbWUgdG8gdGhlIGludGVybmFsIHRpbWUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsb2NrPC9jb2RlPjwvZW0+LAordXNpbmcgdGhlIHJhdGUgYW5kIHJlZmVyZW5jZSB0aW1lIHNldCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1zZXQtY2FsaWJyYXRpb24iIHRpdGxlPSJnc3RfY2xvY2tfc2V0X2NhbGlicmF0aW9uICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jbG9ja19zZXRfY2FsaWJyYXRpb24oKTwvY29kZT48L2E+LgorVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIGNsb2NrJ3MgT0JKRUNUX0xPQ0sgaGVsZCBhbmQKK2lzIG1haW5seSB1c2VkIGJ5IGNsb2NrIHN1YmNsYXNzZXMuCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gaXMgdGhlIHJldmVyc2Ugb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWFkanVzdC11bmxvY2tlZCIgdGl0bGU9ImdzdF9jbG9ja19hZGp1c3RfdW5sb2NrZWQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX2FkanVzdF91bmxvY2tlZCgpPC9jb2RlPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiB0byB1c2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV4dGVybmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFuIGV4dGVybmFsIGNsb2NrIHRpbWU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgaW50ZXJuYWwgdGltZSBvZiB0aGUgY2xvY2sgY29ycmVzcG9uZGluZyB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXh0ZXJuYWw8L2NvZGU+PC9lbT4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xMzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNsb2NrLWdldC1jYWxpYnJhdGlvbiI+PC9hPjxoMz5nc3RfY2xvY2tfZ2V0X2NhbGlicmF0aW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9jbG9ja19nZXRfY2FsaWJyYXRpb24gICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKmNsb2NrPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+ICppbnRlcm5hbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAqZXh0ZXJuYWw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gKnJhdGVfbnVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+ICpyYXRlX2Rlbm9tPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgaW50ZXJuYWwgcmF0ZSBhbmQgcmVmZXJlbmNlIHRpbWUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsb2NrPC9jb2RlPjwvZW0+LiBTZWUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1zZXQtY2FsaWJyYXRpb24iIHRpdGxlPSJnc3RfY2xvY2tfc2V0X2NhbGlicmF0aW9uICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jbG9ja19zZXRfY2FsaWJyYXRpb24oKTwvY29kZT48L2E+IGZvciBtb3JlIGluZm9ybWF0aW9uLgorPC9wPgorPHA+Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW50ZXJuYWw8L2NvZGU+PC9lbT4sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5leHRlcm5hbDwvY29kZT48L2VtPiwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJhdGVfbnVtPC9jb2RlPjwvZW0+LCBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJhdGVfZGVub208L2NvZGU+PC9lbT4gY2FuIGJlIGxlZnQgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgdGhlCitjYWxsZXIgaXMgbm90IGludGVyZXN0ZWQgaW4gdGhlIHZhbHVlcy4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jbG9jazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmludGVybmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbG9jYXRpb24gdG8gc3RvcmUgdGhlIGludGVybmFsIHRpbWUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXh0ZXJuYWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBsb2NhdGlvbiB0byBzdG9yZSB0aGUgZXh0ZXJuYWwgdGltZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yYXRlX251bTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSByYXRlIG51bWVyYXRvci4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yYXRlX2Rlbm9tPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbG9jYXRpb24gdG8gc3RvcmUgdGhlIHJhdGUgZGVub21pbmF0b3IuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jbG9jay1zZXQtY2FsaWJyYXRpb24iPjwvYT48aDM+Z3N0X2Nsb2NrX3NldF9jYWxpYnJhdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfY2xvY2tfc2V0X2NhbGlicmF0aW9uICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiBpbnRlcm5hbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiBleHRlcm5hbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiByYXRlX251bTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiByYXRlX2Rlbm9tPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQWRqdXN0cyB0aGUgcmF0ZSBhbmQgdGltZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT4uIEEgcmF0ZSBvZiAxLzEgaXMgdGhlIG5vcm1hbCBzcGVlZCBvZgordGhlIGNsb2NrLiBWYWx1ZXMgYmlnZ2VyIHRoYW4gMS8xIG1ha2UgdGhlIGNsb2NrIGdvIGZhc3Rlci4KKzwvcD4KKzxwPgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmludGVybmFsPC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXh0ZXJuYWw8L2NvZGU+PC9lbT4gYXJlIGNhbGlicmF0aW9uIHBhcmFtZXRlcnMgdGhhdCBhcnJhbmdlIHRoYXQKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1nZXQtdGltZSIgdGl0bGU9ImdzdF9jbG9ja19nZXRfdGltZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfZ2V0X3RpbWUoKTwvY29kZT48L2E+IHNob3VsZCBoYXZlIGJlZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV4dGVybmFsPC9jb2RlPjwvZW0+IGF0IGludGVybmFsIHRpbWUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmludGVybmFsPC9jb2RlPjwvZW0+LgorVGhpcyBpbnRlcm5hbCB0aW1lIHNob3VsZCBub3QgYmUgaW4gdGhlIGZ1dHVyZTsgdGhhdCBpcywgaXQgc2hvdWxkIGJlIGxlc3MKK3RoYW4gdGhlIHZhbHVlIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1nZXQtaW50ZXJuYWwtdGltZSIgdGl0bGU9ImdzdF9jbG9ja19nZXRfaW50ZXJuYWxfdGltZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfZ2V0X2ludGVybmFsX3RpbWUoKTwvY29kZT48L2E+IHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCis8L3A+Cis8cD4KK1N1YnNlcXVlbnQgY2FsbHMgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWdldC10aW1lIiB0aXRsZT0iZ3N0X2Nsb2NrX2dldF90aW1lICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jbG9ja19nZXRfdGltZSgpPC9jb2RlPjwvYT4gd2lsbCByZXR1cm4gY2xvY2sgdGltZXMgY29tcHV0ZWQgYXMKK2ZvbGxvd3M6Cis8L3A+Cis8cD4KKzwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KKyAgdGltZSA9IChpbnRlcm5hbF90aW1lIC0gaW50ZXJuYWwpICogcmF0ZV9udW0gLyByYXRlX2Rlbm9tICsgZXh0ZXJuYWwKKzwvcHJlPgorPHA+Cis8L3A+Cis8cD4KK1RoaXMgZm9ybXVsYSBpcyBpbXBsZW1lbnRlZCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stYWRqdXN0LXVubG9ja2VkIiB0aXRsZT0iZ3N0X2Nsb2NrX2FkanVzdF91bmxvY2tlZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfYWRqdXN0X3VubG9ja2VkKCk8L2NvZGU+PC9hPi4gT2YgY291cnNlLCBpdAordHJpZXMgdG8gZG8gdGhlIGludGVnZXIgYXJpdGhtZXRpYyBhcyBwcmVjaXNlbHkgYXMgcG9zc2libGUuCis8L3A+Cis8cD4KK05vdGUgdGhhdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stZ2V0LXRpbWUiIHRpdGxlPSJnc3RfY2xvY2tfZ2V0X3RpbWUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX2dldF90aW1lKCk8L2NvZGU+PC9hPiBhbHdheXMgcmV0dXJucyBpbmNyZWFzaW5nIHZhbHVlcyBzbyB3aGVuIHlvdQorbW92ZSB0aGUgY2xvY2sgYmFja3dhcmRzLCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stZ2V0LXRpbWUiIHRpdGxlPSJnc3RfY2xvY2tfZ2V0X3RpbWUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX2dldF90aW1lKCk8L2NvZGU+PC9hPiB3aWxsIHJlcG9ydCB0aGUgcHJldmlvdXMgdmFsdWUKK3VudGlsIHRoZSBjbG9jayBjYXRjaGVzIHVwLgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsb2NrPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gdG8gY2FsaWJyYXRlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbnRlcm5hbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHJlZmVyZW5jZSBpbnRlcm5hbCB0aW1lPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5leHRlcm5hbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHJlZmVyZW5jZSBleHRlcm5hbCB0aW1lPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yYXRlX251bTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbnVtZXJhdG9yIG9mIHRoZSByYXRlIG9mIHRoZSBjbG9jayByZWxhdGl2ZSB0byBpdHMKK2ludGVybmFsIHRpbWU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJhdGVfZGVub208L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGRlbm9taW5hdG9yIG9mIHRoZSByYXRlIG9mIHRoZSBjbG9jazwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jbG9jay1pZC1nZXQtdGltZSI+PC9hPjxoMz5nc3RfY2xvY2tfaWRfZ2V0X3RpbWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAgICAgICAgZ3N0X2Nsb2NrX2lkX2dldF90aW1lICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiBpZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCB0aGUgdGltZSBvZiB0aGUgY2xvY2sgSUQKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gdG8gcXVlcnk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdGltZSBvZiB0aGUgZ2l2ZW4gY2xvY2sgaWQuCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jbG9jay1pZC13YWl0Ij48L2E+PGgzPmdzdF9jbG9ja19pZF93YWl0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1JldHVybiIgdGl0bGU9ImVudW0gR3N0Q2xvY2tSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tSZXR1cm48L3NwYW4+PC9hPiAgICAgIGdzdF9jbG9ja19pZF93YWl0ICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gaWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lRGlmZiIgdGl0bGU9IkdzdENsb2NrVGltZURpZmYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWVEaWZmPC9zcGFuPjwvYT4gKmppdHRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1BlcmZvcm0gYSBibG9ja2luZyB3YWl0IG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZDwvY29kZT48L2VtPi4gCis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWQ8L2NvZGU+PC9lbT4gc2hvdWxkIGhhdmUgYmVlbiBjcmVhdGVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLW5ldy1zaW5nbGUtc2hvdC1pZCIgdGl0bGU9ImdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCgpPC9jb2RlPjwvYT4KK29yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1uZXctcGVyaW9kaWMtaWQiIHRpdGxlPSJnc3RfY2xvY2tfbmV3X3BlcmlvZGljX2lkICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jbG9ja19uZXdfcGVyaW9kaWNfaWQoKTwvY29kZT48L2E+IGFuZCBzaG91bGQgbm90IGhhdmUgYmVlbiB1bnNjaGVkdWxlZAord2l0aCBhIGNhbGwgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLXVuc2NoZWR1bGUiIHRpdGxlPSJnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSgpPC9jb2RlPjwvYT4uIAorPC9wPgorPHA+CitJZiB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmppdHRlcjwvY29kZT48L2VtPiBhcmd1bWVudCBpcyBub3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gYW5kIHRoaXMgZnVuY3Rpb24gcmV0dXJucyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stT0s6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9DTE9DS19PSzwvc3Bhbj48L2E+CitvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRUFSTFk6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9DTE9DS19FQVJMWTwvc3Bhbj48L2E+LCBpdCB3aWxsIGNvbnRhaW4gdGhlIGRpZmZlcmVuY2UKK2FnYWluc3QgdGhlIGNsb2NrIGFuZCB0aGUgdGltZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWQ8L2NvZGU+PC9lbT4gd2hlbiB0aGlzIG1ldGhvZCB3YXMKK2NhbGxlZC4gCitQb3NpdGl2ZSB2YWx1ZXMgaW5kaWNhdGUgaG93IGxhdGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkPC9jb2RlPjwvZW0+IHdhcyByZWxhdGl2ZSB0byB0aGUgY2xvY2sKKyhpbiB3aGljaCBjYXNlIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLUVBUkxZOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfQ0xPQ0tfRUFSTFk8L3NwYW4+PC9hPikuIAorTmVnYXRpdmUgdmFsdWVzIGluZGljYXRlIGhvdyBtdWNoIHRpbWUgd2FzIHNwZW50IHdhaXRpbmcgb24gdGhlIGNsb2NrIAorYmVmb3JlIHRoaXMgZnVuY3Rpb24gcmV0dXJuZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IHRvIHdhaXQgb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmppdHRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGppdHRlciwKK2NhbiBiZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHJlc3VsdCBvZiB0aGUgYmxvY2tpbmcgd2FpdC4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLUVBUkxZOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfQ0xPQ0tfRUFSTFk8L3NwYW4+PC9hPiB3aWxsIGJlIHJldHVybmVkCitpZiB0aGUgY3VycmVudCBjbG9jayB0aW1lIGlzIHBhc3QgdGhlIHRpbWUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkPC9jb2RlPjwvZW0+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stT0s6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9DTE9DS19PSzwvc3Bhbj48L2E+IGlmCis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWQ8L2NvZGU+PC9lbT4gd2FzIHNjaGVkdWxlZCBpbiB0aW1lLiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stVU5TQ0hFRFVMRUQ6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9DTE9DS19VTlNDSEVEVUxFRDwvc3Bhbj48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZDwvY29kZT48L2VtPiB3YXMKK3Vuc2NoZWR1bGVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLXVuc2NoZWR1bGUiIHRpdGxlPSJnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSgpPC9jb2RlPjwvYT4uCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jbG9jay1pZC13YWl0LWFzeW5jIj48L2E+PGgzPmdzdF9jbG9ja19pZF93YWl0X2FzeW5jICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1JldHVybiIgdGl0bGU9ImVudW0gR3N0Q2xvY2tSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tSZXR1cm48L3NwYW4+PC9hPiAgICAgIGdzdF9jbG9ja19pZF93YWl0X2FzeW5jICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gaWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tDYWxsYmFjayIgdGl0bGU9IkdzdENsb2NrQ2FsbGJhY2sgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0NhbGxiYWNrPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlZ2lzdGVyIGEgY2FsbGJhY2sgb24gdGhlIGdpdmVuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZDwvY29kZT48L2VtPiB3aXRoIHRoZSBnaXZlbgorZnVuY3Rpb24gYW5kIHVzZXJfZGF0YS4gV2hlbiBwYXNzaW5nIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gd2l0aCBhbiBpbnZhbGlkCit0aW1lIHRvIHRoaXMgZnVuY3Rpb24sIHRoZSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBpbW1lZGlhdGVseQord2l0aCAgYSB0aW1lIHNldCB0byBHU1RfQ0xPQ0tfVElNRV9OT05FLiBUaGUgY2FsbGJhY2sgd2lsbAorYmUgY2FsbGVkIHdoZW4gdGhlIHRpbWUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkPC9jb2RlPjwvZW0+IGhhcyBiZWVuIHJlYWNoZWQuCis8L3A+Cis8cD4KK1RoZSBjYWxsYmFjayA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPiBjYW4gYmUgaW52b2tlZCBmcm9tIGFueSB0aHJlYWQsIGVpdGhlciBwcm92aWRlZCBieSB0aGUKK2NvcmUgb3IgZnJvbSBhIHN0cmVhbWluZyB0aHJlYWQuIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQgYmUgcHJlcGFyZWQgZm9yIHRoaXMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiB0byB3YWl0IG9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBjYWxsYmFjayBmdW5jdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlVzZXIgZGF0YSBwYXNzZWQgaW4gdGhlIGNhbGxiYWNrPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHJlc3VsdCBvZiB0aGUgbm9uIGJsb2NraW5nIHdhaXQuCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jbG9jay1pZC13YWl0LWFzeW5jLWZ1bGwiPjwvYT48aDM+Z3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmNfZnVsbCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdENsb2NrUmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrUmV0dXJuPC9zcGFuPjwvYT4gICAgICBnc3RfY2xvY2tfaWRfd2FpdF9hc3luY19mdWxsICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IGlkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrQ2FsbGJhY2siIHRpdGxlPSJHc3RDbG9ja0NhbGxiYWNrICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tDYWxsYmFjazwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1EYXRhc2V0cy5odG1sI0dEZXN0cm95Tm90aWZ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R0Rlc3Ryb3lOb3RpZnk8L3NwYW4+PC9hPiBkZXN0cm95X2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWdpc3RlciBhIGNhbGxiYWNrIG9uIHRoZSBnaXZlbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWQ8L2NvZGU+PC9lbT4gd2l0aCB0aGUgZ2l2ZW4KK2Z1bmN0aW9uIGFuZCB1c2VyX2RhdGEuIFdoZW4gcGFzc2luZyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IHdpdGggYW4gaW52YWxpZAordGltZSB0byB0aGlzIGZ1bmN0aW9uLCB0aGUgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgaW1tZWRpYXRlbHkKK3dpdGggIGEgdGltZSBzZXQgdG8gR1NUX0NMT0NLX1RJTUVfTk9ORS4gVGhlIGNhbGxiYWNrIHdpbGwKK2JlIGNhbGxlZCB3aGVuIHRoZSB0aW1lIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZDwvY29kZT48L2VtPiBoYXMgYmVlbiByZWFjaGVkLgorPC9wPgorPHA+CitUaGUgY2FsbGJhY2sgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT4gY2FuIGJlIGludm9rZWQgZnJvbSBhbnkgdGhyZWFkLCBlaXRoZXIgcHJvdmlkZWQgYnkgdGhlCitjb3JlIG9yIGZyb20gYSBzdHJlYW1pbmcgdGhyZWFkLiBUaGUgYXBwbGljYXRpb24gc2hvdWxkIGJlIHByZXBhcmVkIGZvciB0aGlzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gdG8gd2FpdCBvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgY2FsbGJhY2sgZnVuY3Rpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Vc2VyIGRhdGEgcGFzc2VkIGluIHRoZSBjYWxsYmFjazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdHJveV9kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1EYXRhc2V0cy5odG1sI0dEZXN0cm95Tm90aWZ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R0Rlc3Ryb3lOb3RpZnk8L3NwYW4+PC9hPiBmb3IgdXNlcl9kYXRhPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHJlc3VsdCBvZiB0aGUgbm9uIGJsb2NraW5nIHdhaXQuCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jbG9jay1pZC11bnNjaGVkdWxlIj48L2E+PGgzPmdzdF9jbG9ja19pZF91bnNjaGVkdWxlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9jbG9ja19pZF91bnNjaGVkdWxlICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gaWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDYW5jZWwgYW4gb3V0c3RhbmRpbmcgcmVxdWVzdCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZDwvY29kZT48L2VtPi4gVGhpcyBjYW4gZWl0aGVyCitiZSBhbiBvdXRzdGFuZGluZyBhc3luYyBub3RpZmljYXRpb24gb3IgYSBwZW5kaW5nIHN5bmMgbm90aWZpY2F0aW9uLgorQWZ0ZXIgdGhpcyBjYWxsLCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWQ8L2NvZGU+PC9lbT4gY2Fubm90IGJlIHVzZWQgYW55bW9yZSB0byByZWNlaXZlIHN5bmMgb3IKK2FzeW5jIG5vdGlmaWNhdGlvbnMsIHlvdSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPi4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGlkIHRvIHVuc2NoZWR1bGU8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNsb2NrLWlkLWNvbXBhcmUtZnVuYyI+PC9hPjxoMz5nc3RfY2xvY2tfaWRfY29tcGFyZV9mdW5jICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgZ3N0X2Nsb2NrX2lkX2NvbXBhcmVfZnVuYyAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NvbnN0cG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjb25zdHBvaW50ZXI8L3NwYW4+PC9hPiBpZDE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djb25zdHBvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY29uc3Rwb2ludGVyPC9zcGFuPjwvYT4gaWQyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ29tcGFyZXMgdGhlIHR3byA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiBpbnN0YW5jZXMuIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQKK2FzIGEgR0NvbXBhcmVGdW5jIHdoZW4gc29ydGluZyBpZHMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWQxPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWQyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gdG8gY29tcGFyZSB3aXRoPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bmVnYXRpdmUgdmFsdWUgaWYgYSAmbHQ7IGI7IHplcm8gaWYgYSA9IGI7IHBvc2l0aXZlIHZhbHVlIGlmIGEgJmd0OyBiCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jbG9jay1pZC1yZWYiPjwvYT48aDM+Z3N0X2Nsb2NrX2lkX3JlZiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+ICAgICAgICAgIGdzdF9jbG9ja19pZF9yZWYgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gaWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitJbmNyZWFzZSB0aGUgcmVmY291bnQgb2YgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiB0byByZWY8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgc2FtZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiB3aXRoIGluY3JlYXNlZCByZWZjb3VudC4KK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2xvY2staWQtdW5yZWYiPjwvYT48aDM+Z3N0X2Nsb2NrX2lkX3VucmVmICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9jbG9ja19pZF91bnJlZiAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gaWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitVbnJlZiBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWQ8L2NvZGU+PC9lbT4uIFdoZW4gdGhlIHJlZmNvdW50IHJlYWNoZXMgMCB0aGUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IHdpbGwgYmUgZnJlZWQuCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiB0byB1bnJlZi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdENsb2NrLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RDbG9jay0tc3RhdHMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4ic3RhdHMiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAic3RhdHMiICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+RW5hYmxlIGNsb2NrIHN0YXRzICh1bmltcGxlbWVudGVkKS48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0Q2xvY2stLXRpbWVvdXQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4idGltZW91dCI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJ0aW1lb3V0IiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPlRoZSBhbW91bnQgb2YgdGltZSwgaW4gbmFub3NlY29uZHMsIHRvIHNhbXBsZSBtYXN0ZXIgYW5kIHNsYXZlIGNsb2Nrcy48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiAxMDAwMDAwMDA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdENsb2NrLS13aW5kb3ctc2l6ZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJ3aW5kb3ctc2l6ZSI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJ3aW5kb3ctc2l6ZSIgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPlRoZSBzaXplIG9mIHRoZSB3aW5kb3cgdXNlZCB0byBjYWxjdWxhdGUgcmF0ZSBhbmQgb2Zmc2V0LjwvcD4KKzxwPkFsbG93ZWQgdmFsdWVzOiBbMiwxMDI0XTwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IDMyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RDbG9jay0td2luZG93LXRocmVzaG9sZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJ3aW5kb3ctdGhyZXNob2xkIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgIndpbmRvdy10aHJlc2hvbGQiICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+VGhlIHRocmVzaG9sZCB0byBzdGFydCBjYWxjdWxhdGluZyByYXRlIGFuZCBvZmZzZXQuPC9wPgorPHA+QWxsb3dlZCB2YWx1ZXM6IFsyLDEwMjRdPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogNDwvcD4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RDbG9jay5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3lzdGVtQ2xvY2suaHRtbCIgdGl0bGU9IkdzdFN5c3RlbUNsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3lzdGVtQ2xvY2s8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9Hc3RFbGVtZW50Lmh0bWwgYi9kb2NzL2dzdC9odG1sL0dzdEVsZW1lbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWMyOTE0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9nc3QvaHRtbC9Hc3RFbGVtZW50Lmh0bWwKQEAgLTAsMCArMSwzODc1IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0RWxlbWVudDwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI0dzdEVsZW1lbnQuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RFbGVtZW50LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RFbGVtZW50Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0RWxlbWVudC5kZXJpdmVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+S25vd24gRGVyaXZlZCBJbnRlcmZhY2VzPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RFbGVtZW50LnNpZ25hbHMiIGNsYXNzPSJzaG9ydGN1dCI+U2lnbmFsczwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJHc3RFbGVtZW50Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0RWxlbWVudC50b3Bfb2ZfcGFnZSI+PC9hPkdzdEVsZW1lbnQ8L3NwYW4+PC9oMj4KKzxwPkdzdEVsZW1lbnQg4oCUIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGFsbCBwaXBlbGluZSBlbGVtZW50czwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9IkdzdEVsZW1lbnQuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKKworc3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Oworc3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnRDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RFbGVtZW50Q2xhc3MiPkdzdEVsZW1lbnRDbGFzczwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudEZsYWdzIiB0aXRsZT0iZW51bSBHc3RFbGVtZW50RmxhZ3MiPkdzdEVsZW1lbnRGbGFnczwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj5Hc3RTdGF0ZTwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGVDaGFuZ2UiIHRpdGxlPSJlbnVtIEdzdFN0YXRlQ2hhbmdlIj5Hc3RTdGF0ZUNoYW5nZTwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGVDaGFuZ2VSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIj5Hc3RTdGF0ZUNoYW5nZVJldHVybjwvYT47CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFOkNBUFMiIHRpdGxlPSJHU1RfU1RBVEUoKSI+R1NUX1NUQVRFPC9hPiAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbGVtKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1HRVQtTkVYVDpDQVBTIiB0aXRsZT0iR1NUX1NUQVRFX0dFVF9ORVhUKCkiPkdTVF9TVEFURV9HRVRfTkVYVDwvYT4gICAgICAgICAgICAgICAgICAoY3VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZykKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtTkVYVDpDQVBTIiB0aXRsZT0iR1NUX1NUQVRFX05FWFQoKSI+R1NUX1NUQVRFX05FWFQ8L2E+ICAgICAgICAgICAgICAgICAgICAgIChlbGVtKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1QRU5ESU5HOkNBUFMiIHRpdGxlPSJHU1RfU1RBVEVfUEVORElORygpIj5HU1RfU1RBVEVfUEVORElORzwvYT4gICAgICAgICAgICAgICAgICAgKGVsZW0pCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVJFVFVSTjpDQVBTIiB0aXRsZT0iR1NUX1NUQVRFX1JFVFVSTigpIj5HU1RfU1RBVEVfUkVUVVJOPC9hPiAgICAgICAgICAgICAgICAgICAgKGVsZW0pCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVRBUkdFVDpDQVBTIiB0aXRsZT0iR1NUX1NUQVRFX1RBUkdFVCgpIj5HU1RfU1RBVEVfVEFSR0VUPC9hPiAgICAgICAgICAgICAgICAgICAgKGVsZW0pCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVRSQU5TSVRJT046Q0FQUyIgdGl0bGU9IkdTVF9TVEFURV9UUkFOU0lUSU9OKCkiPkdTVF9TVEFURV9UUkFOU0lUSU9OPC9hPiAgICAgICAgICAgICAgICAoY3VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtVFJBTlNJVElPTi1DVVJSRU5UOkNBUFMiIHRpdGxlPSJHU1RfU1RBVEVfVFJBTlNJVElPTl9DVVJSRU5UKCkiPkdTVF9TVEFURV9UUkFOU0lUSU9OX0NVUlJFTlQ8L2E+ICAgICAgICAodHJhbnMpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVRSQU5TSVRJT04tTkVYVDpDQVBTIiB0aXRsZT0iR1NUX1NUQVRFX1RSQU5TSVRJT05fTkVYVCgpIj5HU1RfU1RBVEVfVFJBTlNJVElPTl9ORVhUPC9hPiAgICAgICAgICAgKHRyYW5zKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1HRVQtTE9DSzpDQVBTIiB0aXRsZT0iR1NUX1NUQVRFX0dFVF9MT0NLKCkiPkdTVF9TVEFURV9HRVRfTE9DSzwvYT4gICAgICAgICAgICAgICAgICAoZWxlbSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtR0VULUNPTkQ6Q0FQUyIgdGl0bGU9IkdTVF9TVEFURV9HRVRfQ09ORCgpIj5HU1RfU1RBVEVfR0VUX0NPTkQ8L2E+ICAgICAgICAgICAgICAgICAgKGVsZW0pCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtTkFNRTpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfTkFNRSgpIj5HU1RfRUxFTUVOVF9OQU1FPC9hPiAgICAgICAgICAgICAgICAgICAgKGVsZW0pCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtUEFSRU5UOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9QQVJFTlQoKSI+R1NUX0VMRU1FTlRfUEFSRU5UPC9hPiAgICAgICAgICAgICAgICAgIChlbGVtKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULUJVUzpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfQlVTKCkiPkdTVF9FTEVNRU5UX0JVUzwvYT4gICAgICAgICAgICAgICAgICAgICAoZWxlbSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1DTE9DSzpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfQ0xPQ0soKSI+R1NUX0VMRU1FTlRfQ0xPQ0s8L2E+ICAgICAgICAgICAgICAgICAgIChlbGVtKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULVBBRFM6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX1BBRFMoKSI+R1NUX0VMRU1FTlRfUEFEUzwvYT4gICAgICAgICAgICAgICAgICAgIChlbGVtKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULVNUQVJULVRJTUU6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX1NUQVJUX1RJTUUoKSI+R1NUX0VMRU1FTlRfU1RBUlRfVElNRTwvYT4gICAgICAgICAgICAgIChlbGVtKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULUVSUk9SOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9FUlJPUigpIj5HU1RfRUxFTUVOVF9FUlJPUjwvYT4gICAgICAgICAgICAgICAgICAgKGVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZykKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1XQVJOSU5HOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9XQVJOSU5HKCkiPkdTVF9FTEVNRU5UX1dBUk5JTkc8L2E+ICAgICAgICAgICAgICAgICAoZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULUlORk86Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0lORk8oKSI+R1NUX0VMRU1FTlRfSU5GTzwvYT4gICAgICAgICAgICAgICAgICAgIChlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtSVMtTE9DS0VELVNUQVRFOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9JU19MT0NLRURfU1RBVEUoKSI+R1NUX0VMRU1FTlRfSVNfTE9DS0VEX1NUQVRFPC9hPiAgICAgICAgIChlbGVtKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULU1FVEFEQVRBLUFVVEhPUjpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfTUVUQURBVEFfQVVUSE9SIj5HU1RfRUxFTUVOVF9NRVRBREFUQV9BVVRIT1I8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtTUVUQURBVEEtREVTQ1JJUFRJT046Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX01FVEFEQVRBX0RFU0NSSVBUSU9OIj5HU1RfRUxFTUVOVF9NRVRBREFUQV9ERVNDUklQVElPTjwvYT4KKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1NRVRBREFUQS1ET0MtVVJJOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9NRVRBREFUQV9ET0NfVVJJIj5HU1RfRUxFTUVOVF9NRVRBREFUQV9ET0NfVVJJPC9hPgorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULU1FVEFEQVRBLUlDT04tTkFNRTpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfTUVUQURBVEFfSUNPTl9OQU1FIj5HU1RfRUxFTUVOVF9NRVRBREFUQV9JQ09OX05BTUU8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtTUVUQURBVEEtS0xBU1M6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX01FVEFEQVRBX0tMQVNTIj5HU1RfRUxFTUVOVF9NRVRBREFUQV9LTEFTUzwvYT4KKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1NRVRBREFUQS1MT05HTkFNRTpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfTUVUQURBVEFfTE9OR05BTUUiPkdTVF9FTEVNRU5UX01FVEFEQVRBX0xPTkdOQU1FPC9hPgorCis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY2xhc3MtYWRkLXBhZC10ZW1wbGF0ZSIgdGl0bGU9ImdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKCkiPmdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGU8L2E+ICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudENsYXNzIiB0aXRsZT0ic3RydWN0IEdzdEVsZW1lbnRDbGFzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRDbGFzczwvc3Bhbj48L2E+ICprbGFzczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPiAqdGVtcGw8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+ICogICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jbGFzcy1nZXQtcGFkLXRlbXBsYXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoKSI+Z3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZTwvYT4gICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50Q2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0RWxlbWVudENsYXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudENsYXNzPC9zcGFuPjwvYT4gKmVsZW1lbnRfY2xhc3M8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HTGlzdDwvc3Bhbj48L2E+ICogICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jbGFzcy1nZXQtcGFkLXRlbXBsYXRlLWxpc3QiIHRpdGxlPSJnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlX2xpc3QgKCkiPmdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGVfbGlzdDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnRDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RFbGVtZW50Q2xhc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50Q2xhc3M8L3NwYW4+PC9hPiAqZWxlbWVudF9jbGFzczwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY2xhc3MtaW5zdGFsbC1zdGQtcHJvcHMiIHRpdGxlPSJnc3RfZWxlbWVudF9jbGFzc19pbnN0YWxsX3N0ZF9wcm9wcyAoKSI+Z3N0X2VsZW1lbnRfY2xhc3NfaW5zdGFsbF9zdGRfcHJvcHM8L2E+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50Q2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0RWxlbWVudENsYXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudENsYXNzPC9zcGFuPjwvYT4gKmtsYXNzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpcnN0X25hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jbGFzcy1zZXQtbWV0YWRhdGEiIHRpdGxlPSJnc3RfZWxlbWVudF9jbGFzc19zZXRfbWV0YWRhdGEgKCkiPmdzdF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YTwvYT4gICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudENsYXNzIiB0aXRsZT0ic3RydWN0IEdzdEVsZW1lbnRDbGFzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRDbGFzczwvc3Bhbj48L2E+ICprbGFzczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpsb25nbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpjbGFzc2lmaWNhdGlvbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpkZXNjcmlwdGlvbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICphdXRob3I8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNsYXNzLWFkZC1tZXRhZGF0YSIgdGl0bGU9ImdzdF9lbGVtZW50X2NsYXNzX2FkZF9tZXRhZGF0YSAoKSI+Z3N0X2VsZW1lbnRfY2xhc3NfYWRkX21ldGFkYXRhPC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50Q2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0RWxlbWVudENsYXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudENsYXNzPC9zcGFuPjwvYT4gKmtsYXNzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmtleTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7CisKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1hZGQtcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfYWRkX3BhZCAoKSI+Z3N0X2VsZW1lbnRfYWRkX3BhZDwvYT4gICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY3JlYXRlLWFsbC1wYWRzIiB0aXRsZT0iZ3N0X2VsZW1lbnRfY3JlYXRlX2FsbF9wYWRzICgpIj5nc3RfZWxlbWVudF9jcmVhdGVfYWxsX3BhZHM8L2E+ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkPC9zcGFuPjwvYT4gKiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWNvbXBhdGlibGUtcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkICgpIj5nc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWQ8L2E+ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKiAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1jb21wYXRpYmxlLXBhZC10ZW1wbGF0ZSIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9jb21wYXRpYmxlX3BhZF90ZW1wbGF0ZSAoKSI+Z3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkX3RlbXBsYXRlPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+ICpjb21wYXR0ZW1wbDwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkPC9zcGFuPjwvYT4gKiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LXJlcXVlc3QtcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkICgpIj5nc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQ8L2E+ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtc3RhdGljLXBhZCIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkICgpIj5nc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZDwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1yZXF1ZXN0LXBhZCIgdGl0bGU9ImdzdF9lbGVtZW50X3JlcXVlc3RfcGFkICgpIj5nc3RfZWxlbWVudF9yZXF1ZXN0X3BhZDwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPiAqdGVtcGw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LW5vLW1vcmUtcGFkcyIgdGl0bGU9ImdzdF9lbGVtZW50X25vX21vcmVfcGFkcyAoKSI+Z3N0X2VsZW1lbnRfbm9fbW9yZV9wYWRzPC9hPiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXJlbGVhc2UtcmVxdWVzdC1wYWQiIHRpdGxlPSJnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkICgpIj5nc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkPC9hPiAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1yZW1vdmUtcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoKSI+Z3N0X2VsZW1lbnRfcmVtb3ZlX3BhZDwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtaXRlcmF0ZS1wYWRzIiB0aXRsZT0iZ3N0X2VsZW1lbnRfaXRlcmF0ZV9wYWRzICgpIj5nc3RfZWxlbWVudF9pdGVyYXRlX3BhZHM8L2E+ICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtaXRlcmF0ZS1zaW5rLXBhZHMiIHRpdGxlPSJnc3RfZWxlbWVudF9pdGVyYXRlX3NpbmtfcGFkcyAoKSI+Z3N0X2VsZW1lbnRfaXRlcmF0ZV9zaW5rX3BhZHM8L2E+ICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWl0ZXJhdGUtc3JjLXBhZHMiIHRpdGxlPSJnc3RfZWxlbWVudF9pdGVyYXRlX3NyY19wYWRzICgpIj5nc3RfZWxlbWVudF9pdGVyYXRlX3NyY19wYWRzPC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPik7CisKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1saW5rIiB0aXRsZT0iZ3N0X2VsZW1lbnRfbGluayAoKSI+Z3N0X2VsZW1lbnRfbGluazwvYT4gICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtdW5saW5rIiB0aXRsZT0iZ3N0X2VsZW1lbnRfdW5saW5rICgpIj5nc3RfZWxlbWVudF91bmxpbms8L2E+ICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICpkZXN0PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1saW5rLW1hbnkiIHRpdGxlPSJnc3RfZWxlbWVudF9saW5rX21hbnkgKCkiPmdzdF9lbGVtZW50X2xpbmtfbWFueTwvYT4gICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50XzE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnRfMjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXVubGluay1tYW55IiB0aXRsZT0iZ3N0X2VsZW1lbnRfdW5saW5rX21hbnkgKCkiPmdzdF9lbGVtZW50X3VubGlua19tYW55PC9hPiAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50XzE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnRfMjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWxpbmstcGFkcyIgdGl0bGU9ImdzdF9lbGVtZW50X2xpbmtfcGFkcyAoKSI+Z3N0X2VsZW1lbnRfbGlua19wYWRzPC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpzcmNwYWRuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICpkZXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmRlc3RwYWRuYW1lPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1saW5rLXBhZHMtZnVsbCIgdGl0bGU9ImdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsICgpIj5nc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbDwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnNyY3BhZG5hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmRlc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZGVzdHBhZG5hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZExpbmtDaGVjayIgdGl0bGU9ImVudW0gR3N0UGFkTGlua0NoZWNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkTGlua0NoZWNrPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXVubGluay1wYWRzIiB0aXRsZT0iZ3N0X2VsZW1lbnRfdW5saW5rX3BhZHMgKCkiPmdzdF9lbGVtZW50X3VubGlua19wYWRzPC9hPiAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqc3JjcGFkbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpkZXN0cGFkbmFtZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbGluay1wYWRzLWZpbHRlcmVkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfbGlua19wYWRzX2ZpbHRlcmVkICgpIj5nc3RfZWxlbWVudF9saW5rX3BhZHNfZmlsdGVyZWQ8L2E+ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnNyY3BhZG5hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmRlc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZGVzdHBhZG5hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpmaWx0ZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWxpbmstZmlsdGVyZWQiIHRpdGxlPSJnc3RfZWxlbWVudF9saW5rX2ZpbHRlcmVkICgpIj5nc3RfZWxlbWVudF9saW5rX2ZpbHRlcmVkPC9hPiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICpkZXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqZmlsdGVyPC9jb2RlPjwvZW0+KTsKKworY29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNsYXNzLWdldC1tZXRhZGF0YSIgdGl0bGU9ImdzdF9lbGVtZW50X2NsYXNzX2dldF9tZXRhZGF0YSAoKSI+Z3N0X2VsZW1lbnRfY2xhc3NfZ2V0X21ldGFkYXRhPC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50Q2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0RWxlbWVudENsYXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudENsYXNzPC9zcGFuPjwvYT4gKmtsYXNzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmtleTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LWJhc2UtdGltZSIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9iYXNlX3RpbWUgKCkiPmdzdF9lbGVtZW50X3NldF9iYXNlX3RpbWU8L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRpbWU8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+ICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1iYXNlLXRpbWUiIHRpdGxlPSJnc3RfZWxlbWVudF9nZXRfYmFzZV90aW1lICgpIj5nc3RfZWxlbWVudF9nZXRfYmFzZV90aW1lPC9hPiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LXN0YXJ0LXRpbWUiIHRpdGxlPSJnc3RfZWxlbWVudF9zZXRfc3RhcnRfdGltZSAoKSI+Z3N0X2VsZW1lbnRfc2V0X3N0YXJ0X3RpbWU8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LXN0YXJ0LXRpbWUiIHRpdGxlPSJnc3RfZWxlbWVudF9nZXRfc3RhcnRfdGltZSAoKSI+Z3N0X2VsZW1lbnRfZ2V0X3N0YXJ0X3RpbWU8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1idXMiIHRpdGxlPSJnc3RfZWxlbWVudF9zZXRfYnVzICgpIj5nc3RfZWxlbWVudF9zZXRfYnVzPC9hPiAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiAqYnVzPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdXM8L3NwYW4+PC9hPiAqICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtYnVzIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X2J1cyAoKSI+Z3N0X2VsZW1lbnRfZ2V0X2J1czwvYT4gICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+ICogPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtZmFjdG9yeSIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9mYWN0b3J5ICgpIj5nc3RfZWxlbWVudF9nZXRfZmFjdG9yeTwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LWluZGV4IiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2V0X2luZGV4ICgpIj5nc3RfZWxlbWVudF9zZXRfaW5kZXg8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXg8L3NwYW4+PC9hPiAqaW5kZXg8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJbmRleDwvc3Bhbj48L2E+ICogICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtaW5kZXgiIHRpdGxlPSJnc3RfZWxlbWVudF9nZXRfaW5kZXggKCkiPmdzdF9lbGVtZW50X2dldF9pbmRleDwvYT4gICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1pcy1pbmRleGFibGUiIHRpdGxlPSJnc3RfZWxlbWVudF9pc19pbmRleGFibGUgKCkiPmdzdF9lbGVtZW50X2lzX2luZGV4YWJsZTwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTsKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZXQtbmFtZSIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9uYW1lKCkiPmdzdF9lbGVtZW50X3NldF9uYW1lPC9hPiAgICAgICAgICAgICAgICAoZWxlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LW5hbWUiIHRpdGxlPSJnc3RfZWxlbWVudF9nZXRfbmFtZSgpIj5nc3RfZWxlbWVudF9nZXRfbmFtZTwvYT4gICAgICAgICAgICAgICAgKGVsZW0pCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LXBhcmVudCIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9wYXJlbnQoKSI+Z3N0X2VsZW1lbnRfc2V0X3BhcmVudDwvYT4gICAgICAgICAgICAgIChlbGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50KQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1wYXJlbnQiIHRpdGxlPSJnc3RfZWxlbWVudF9nZXRfcGFyZW50KCkiPmdzdF9lbGVtZW50X2dldF9wYXJlbnQ8L2E+ICAgICAgICAgICAgICAoZWxlbSkKKworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXJlcXVpcmVzLWNsb2NrIiB0aXRsZT0iZ3N0X2VsZW1lbnRfcmVxdWlyZXNfY2xvY2sgKCkiPmdzdF9lbGVtZW50X3JlcXVpcmVzX2Nsb2NrPC9hPiAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZXQtY2xvY2siIHRpdGxlPSJnc3RfZWxlbWVudF9zZXRfY2xvY2sgKCkiPmdzdF9lbGVtZW50X3NldF9jbG9jazwvYT4gICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKiAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1jbG9jayIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9jbG9jayAoKSI+Z3N0X2VsZW1lbnRfZ2V0X2Nsb2NrPC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXByb3ZpZGVzLWNsb2NrIiB0aXRsZT0iZ3N0X2VsZW1lbnRfcHJvdmlkZXNfY2xvY2sgKCkiPmdzdF9lbGVtZW50X3Byb3ZpZGVzX2Nsb2NrPC9hPiAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcHJvdmlkZS1jbG9jayIgdGl0bGU9ImdzdF9lbGVtZW50X3Byb3ZpZGVfY2xvY2sgKCkiPmdzdF9lbGVtZW50X3Byb3ZpZGVfY2xvY2s8L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTsKKworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZUNoYW5nZVJldHVybiIgdGl0bGU9ImVudW0gR3N0U3RhdGVDaGFuZ2VSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RhdGVDaGFuZ2VSZXR1cm48L3NwYW4+PC9hPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1zdGF0ZSIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9zdGF0ZSAoKSI+Z3N0X2VsZW1lbnRfc2V0X3N0YXRlPC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlPC9zcGFuPjwvYT4gc3RhdGU8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZUNoYW5nZVJldHVybiIgdGl0bGU9ImVudW0gR3N0U3RhdGVDaGFuZ2VSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RhdGVDaGFuZ2VSZXR1cm48L3NwYW4+PC9hPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1zdGF0ZSIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9zdGF0ZSAoKSI+Z3N0X2VsZW1lbnRfZ2V0X3N0YXRlPC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlPC9zcGFuPjwvYT4gKnN0YXRlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGU8L3NwYW4+PC9hPiAqcGVuZGluZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lb3V0PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZXQtbG9ja2VkLXN0YXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZSAoKSI+Z3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZTwvYT4gICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBsb2NrZWRfc3RhdGU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWlzLWxvY2tlZC1zdGF0ZSIgdGl0bGU9ImdzdF9lbGVtZW50X2lzX2xvY2tlZF9zdGF0ZSAoKSI+Z3N0X2VsZW1lbnRfaXNfbG9ja2VkX3N0YXRlPC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWFib3J0LXN0YXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfYWJvcnRfc3RhdGUgKCkiPmdzdF9lbGVtZW50X2Fib3J0X3N0YXRlPC9hPiAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGVDaGFuZ2VSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0YXRlQ2hhbmdlUmV0dXJuPC9zcGFuPjwvYT4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jb250aW51ZS1zdGF0ZSIgdGl0bGU9ImdzdF9lbGVtZW50X2NvbnRpbnVlX3N0YXRlICgpIj5nc3RfZWxlbWVudF9jb250aW51ZV9zdGF0ZTwvYT4gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGVDaGFuZ2VSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGVDaGFuZ2VSZXR1cm48L3NwYW4+PC9hPiByZXQ8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWxvc3Qtc3RhdGUiIHRpdGxlPSJnc3RfZWxlbWVudF9sb3N0X3N0YXRlICgpIj5nc3RfZWxlbWVudF9sb3N0X3N0YXRlPC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPik7Citjb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc3RhdGUtZ2V0LW5hbWUiIHRpdGxlPSJnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAoKSI+Z3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWU8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZSIgdGl0bGU9ImVudW0gR3N0U3RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZTwvc3Bhbj48L2E+IHN0YXRlPC9jb2RlPjwvZW0+KTsKK2NvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICogICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zdGF0ZS1jaGFuZ2UtcmV0dXJuLWdldC1uYW1lIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRfbmFtZSAoKSI+Z3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRfbmFtZTwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlQ2hhbmdlUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RTdGF0ZUNoYW5nZVJldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlQ2hhbmdlUmV0dXJuPC9zcGFuPjwvYT4gc3RhdGVfcmV0PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zeW5jLXN0YXRlLXdpdGgtcGFyZW50IiB0aXRsZT0iZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudCAoKSI+Z3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudDwvYT4gICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZUNoYW5nZVJldHVybiIgdGl0bGU9ImVudW0gR3N0U3RhdGVDaGFuZ2VSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RhdGVDaGFuZ2VSZXR1cm48L3NwYW4+PC9hPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNoYW5nZS1zdGF0ZSIgdGl0bGU9ImdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZSAoKSI+Z3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlPC9hPiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlQ2hhbmdlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZUNoYW5nZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlQ2hhbmdlPC9zcGFuPjwvYT4gdHJhbnNpdGlvbjwvY29kZT48L2VtPik7CisKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1mb3VuZC10YWdzIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZm91bmRfdGFncyAoKSI+Z3N0X2VsZW1lbnRfZm91bmRfdGFnczwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWZvdW5kLXRhZ3MtZm9yLXBhZCIgdGl0bGU9ImdzdF9lbGVtZW50X2ZvdW5kX3RhZ3NfZm9yX3BhZCAoKSI+Z3N0X2VsZW1lbnRfZm91bmRfdGFnc19mb3JfcGFkPC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPik7CisKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1tZXNzYWdlLWZ1bGwiIHRpdGxlPSJnc3RfZWxlbWVudF9tZXNzYWdlX2Z1bGwgKCkiPmdzdF9lbGVtZW50X21lc3NhZ2VfZnVsbDwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2VUeXBlIiB0aXRsZT0iZW51bSBHc3RNZXNzYWdlVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2VUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IGRvbWFpbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBjb2RlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRleHQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZGVidWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmlsZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmdW5jdGlvbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBsaW5lPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1wb3N0LW1lc3NhZ2UiIHRpdGxlPSJnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKCkiPmdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZTwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPik7CisKK2NvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGUiIHRpdGxlPSJlbnVtIEdzdFF1ZXJ5VHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RRdWVyeVR5cGU8L3NwYW4+PC9hPiAqIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LXF1ZXJ5LXR5cGVzIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X3F1ZXJ5X3R5cGVzICgpIj5nc3RfZWxlbWVudF9nZXRfcXVlcnlfdHlwZXM8L2E+ICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1xdWVyeSIgdGl0bGU9ImdzdF9lbGVtZW50X3F1ZXJ5ICgpIj5nc3RfZWxlbWVudF9xdWVyeTwvYT4gICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcXVlcnktY29udmVydCIgdGl0bGU9ImdzdF9lbGVtZW50X3F1ZXJ5X2NvbnZlcnQgKCkiPmdzdF9lbGVtZW50X3F1ZXJ5X2NvbnZlcnQ8L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBzcmNfZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBzcmNfdmFsPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBkZXN0X2Zvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKmRlc3RfdmFsPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1xdWVyeS1wb3NpdGlvbiIgdGl0bGU9ImdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uICgpIj5nc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbjwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqY3VyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1xdWVyeS1kdXJhdGlvbiIgdGl0bGU9ImdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uICgpIj5nc3RfZWxlbWVudF9xdWVyeV9kdXJhdGlvbjwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqZHVyYXRpb248L2NvZGU+PC9lbT4pOworCis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2VuZC1ldmVudCIgdGl0bGU9ImdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKCkiPmdzdF9lbGVtZW50X3NlbmRfZXZlbnQ8L2E+ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZWVrLXNpbXBsZSIgdGl0bGU9ImdzdF9lbGVtZW50X3NlZWtfc2ltcGxlICgpIj5nc3RfZWxlbWVudF9zZWVrX3NpbXBsZTwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RTZWVrRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFNlZWtGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZWtGbGFnczwvc3Bhbj48L2E+IHNlZWtfZmxhZ3M8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHNlZWtfcG9zPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZWVrIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2VlayAoKSI+Z3N0X2VsZW1lbnRfc2VlazwvYT4gICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gcmF0ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RTZWVrRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFNlZWtGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZWtGbGFnczwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RTZWVrVHlwZSIgdGl0bGU9ImVudW0gR3N0U2Vla1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWVrVHlwZTwvc3Bhbj48L2E+IGN1cl90eXBlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBjdXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdFNlZWtUeXBlIiB0aXRsZT0iZW51bSBHc3RTZWVrVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZWtUeXBlPC9zcGFuPjwvYT4gc3RvcF90eXBlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBzdG9wPC9jb2RlPjwvZW0+KTsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RFbGVtZW50Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij5HT2JqZWN0PC9hPgorICAgKy0tLS08YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgorICAgICAgICAgKy0tLS08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KKyAgICAgICAgICAgICAgICstLS0tR3N0RWxlbWVudAorICAgICAgICAgICAgICAgICAgICAgKy0tLS08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RFbGVtZW50LmRlcml2ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5Lbm93biBEZXJpdmVkIEludGVyZmFjZXM8L2gyPgorPHA+CitHc3RFbGVtZW50IGlzIHJlcXVpcmVkIGJ5CisgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj5Hc3RUYWdTZXR0ZXI8L2E+LjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0RWxlbWVudC5zaWduYWxzIj48L2E+PGgyPlNpZ25hbHM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LW5vLW1vcmUtcGFkcyIgdGl0bGU9J1RoZSAibm8tbW9yZS1wYWRzIiBzaWduYWwnPm5vLW1vcmUtcGFkczwvYT4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5SdW4gTGFzdDwvY29kZT48L2E+CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtcGFkLWFkZGVkIiB0aXRsZT0nVGhlICJwYWQtYWRkZWQiIHNpZ25hbCc+cGFkLWFkZGVkPC9hPiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlJ1biBMYXN0PC9jb2RlPjwvYT4KKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1wYWQtcmVtb3ZlZCIgdGl0bGU9J1RoZSAicGFkLXJlbW92ZWQiIHNpZ25hbCc+cGFkLXJlbW92ZWQ8L2E+IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlJ1biBMYXN0PC9jb2RlPjwvYT4KKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RFbGVtZW50LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPgorR3N0RWxlbWVudCBpcyB0aGUgYWJzdHJhY3QgYmFzZSBjbGFzcyBuZWVkZWQgdG8gY29uc3RydWN0IGFuIGVsZW1lbnQgdGhhdAorY2FuIGJlIHVzZWQgaW4gYSBHU3RyZWFtZXIgcGlwZWxpbmUuIFBsZWFzZSByZWZlciB0byB0aGUgcGx1Z2luIHdyaXRlcnMKK2d1aWRlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNyZWF0aW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHN1YmNsYXNzZXMuCis8L3A+Cis8cD4KK1RoZSBuYW1lIG9mIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gY2FuIGJlIGdldCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LW5hbWUiIHRpdGxlPSJnc3RfZWxlbWVudF9nZXRfbmFtZSgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X2dldF9uYW1lKCk8L2NvZGU+PC9hPiBhbmQgc2V0IHdpdGgKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LW5hbWUiIHRpdGxlPSJnc3RfZWxlbWVudF9zZXRfbmFtZSgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3NldF9uYW1lKCk8L2NvZGU+PC9hPi4gIEZvciBzcGVlZCwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1OQU1FOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9OQU1FKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R1NUX0VMRU1FTlRfTkFNRSgpPC9jb2RlPjwvYT4gY2FuIGJlIHVzZWQgaW4gdGhlCitjb3JlIHdoZW4gdXNpbmcgdGhlIGFwcHJvcHJpYXRlIGxvY2tpbmcuIERvIG5vdCB1c2UgdGhpcyBpbiBwbHVnLWlucyBvcgorYXBwbGljYXRpb25zIGluIG9yZGVyIHRvIHJldGFpbiBBQkkgY29tcGF0aWJpbGl0eS4KKzwvcD4KKzxwPgorQWxsIGVsZW1lbnRzIGhhdmUgcGFkcyAob2YgdGhlIHR5cGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4pLiAgVGhlc2UgcGFkcyBsaW5rIHRvIHBhZHMgb24KK290aGVyIGVsZW1lbnRzLiAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gZmxvdyBiZXR3ZWVuIHRoZXNlIGxpbmtlZCBwYWRzLgorQSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBoYXMgYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gc3RydWN0dXJlcyBmb3IgYWxsIHRoZWlyIGlucHV0IChvciBzaW5rKQorYW5kIG91dHB1dCAob3Igc291cmNlKSBwYWRzLgorQ29yZSBhbmQgcGx1Zy1pbiB3cml0ZXJzIGNhbiBhZGQgYW5kIHJlbW92ZSBwYWRzIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1hZGQtcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfYWRkX3BhZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9hZGRfcGFkKCk8L2NvZGU+PC9hPgorYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcmVtb3ZlLXBhZCIgdGl0bGU9ImdzdF9lbGVtZW50X3JlbW92ZV9wYWQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCgpPC9jb2RlPjwvYT4uCis8L3A+Cis8cD4KK0FuIGV4aXN0aW5nIHBhZCBvZiBhbiBlbGVtZW50IGNhbiBiZSByZXRyaWV2ZWQgYnkgbmFtZSB3aXRoCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1zdGF0aWMtcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoKTwvY29kZT48L2E+LiBBIG5ldyBkeW5hbWljIHBhZCBjYW4gYmUgY3JlYXRlZCB1c2luZworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1yZXF1ZXN0LXBhZCIgdGl0bGU9ImdzdF9lbGVtZW50X3JlcXVlc3RfcGFkICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3JlcXVlc3RfcGFkKCk8L2NvZGU+PC9hPiB3aXRoIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4gb3IgCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1yZXF1ZXN0LXBhZCIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQoKTwvY29kZT48L2E+IHdpdGggdGhlIHRlbXBsYXRlIG5hbWUgc3VjaCBhcyAic3JjXyVkIi4KK0FuIGl0ZXJhdG9yIG9mIGFsbCBwYWRzIGNhbiBiZSByZXRyaWV2ZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWl0ZXJhdGUtcGFkcyIgdGl0bGU9ImdzdF9lbGVtZW50X2l0ZXJhdGVfcGFkcyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9pdGVyYXRlX3BhZHMoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitFbGVtZW50cyBjYW4gYmUgbGlua2VkIHRocm91Z2ggdGhlaXIgcGFkcy4KK0lmIHRoZSBsaW5rIGlzIHN0cmFpZ2h0Zm9yd2FyZCwgdXNlIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWxpbmsiIHRpdGxlPSJnc3RfZWxlbWVudF9saW5rICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X2xpbmsoKTwvY29kZT48L2E+Citjb252ZW5pZW5jZSBmdW5jdGlvbiB0byBsaW5rIHR3byBlbGVtZW50cywgb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1saW5rLW1hbnkiIHRpdGxlPSJnc3RfZWxlbWVudF9saW5rX21hbnkgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfbGlua19tYW55KCk8L2NvZGU+PC9hPgorZm9yIG1vcmUgZWxlbWVudHMgaW4gYSByb3cuCitVc2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1saW5rLWZpbHRlcmVkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfbGlua19maWx0ZXJlZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9saW5rX2ZpbHRlcmVkKCk8L2NvZGU+PC9hPiB0byBsaW5rIHR3byBlbGVtZW50cyBjb25zdHJhaW5lZCBieQorYSBzcGVjaWZpZWQgc2V0IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPi4KK0ZvciBmaW5lciBjb250cm9sLCB1c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1saW5rLXBhZHMiIHRpdGxlPSJnc3RfZWxlbWVudF9saW5rX3BhZHMgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfbGlua19wYWRzKCk8L2NvZGU+PC9hPiBhbmQKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbGluay1wYWRzLWZpbHRlcmVkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfbGlua19wYWRzX2ZpbHRlcmVkICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X2xpbmtfcGFkc19maWx0ZXJlZCgpPC9jb2RlPjwvYT4gdG8gc3BlY2lmeSB0aGUgcGFkcyB0byBsaW5rIG9uCitlYWNoIGVsZW1lbnQgYnkgbmFtZS4KKzwvcD4KKzxwPgorRWFjaCBlbGVtZW50IGhhcyBhIHN0YXRlIChzZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZSIgdGl0bGU9ImVudW0gR3N0U3RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZTwvc3Bhbj48L2E+KS4gIFlvdSBjYW4gZ2V0IGFuZCBzZXQgdGhlIHN0YXRlCitvZiBhbiBlbGVtZW50IHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtc3RhdGUiIHRpdGxlPSJnc3RfZWxlbWVudF9nZXRfc3RhdGUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfZ2V0X3N0YXRlKCk8L2NvZGU+PC9hPiBhbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZXQtc3RhdGUiIHRpdGxlPSJnc3RfZWxlbWVudF9zZXRfc3RhdGUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfc2V0X3N0YXRlKCk8L2NvZGU+PC9hPi4KK1NldHRpbmcgYSBzdGF0ZSB0cmlnZ2VycyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGVDaGFuZ2UiIHRpdGxlPSJlbnVtIEdzdFN0YXRlQ2hhbmdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGVDaGFuZ2U8L3NwYW4+PC9hPi4gVG8gZ2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uCitvZiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGU8L3NwYW4+PC9hPiwgdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc3RhdGUtZ2V0LW5hbWUiIHRpdGxlPSJnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSgpPC9jb2RlPjwvYT4uCis8L3A+Cis8cD4KK1lvdSBjYW4gZ2V0IGFuZCBzZXQgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiBvbiBhbiBlbGVtZW50IHVzaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWNsb2NrIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X2Nsb2NrICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X2dldF9jbG9jaygpPC9jb2RlPjwvYT4KK2FuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1jbG9jayIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9jbG9jayAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9zZXRfY2xvY2soKTwvY29kZT48L2E+LgorU29tZSBlbGVtZW50cyBjYW4gcHJvdmlkZSBhIGNsb2NrIGZvciB0aGUgcGlwZWxpbmUgaWYKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcHJvdmlkZXMtY2xvY2siIHRpdGxlPSJnc3RfZWxlbWVudF9wcm92aWRlc19jbG9jayAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9wcm92aWRlc19jbG9jaygpPC9jb2RlPjwvYT4gcmV0dXJucyA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPi4gV2l0aCB0aGUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcHJvdmlkZS1jbG9jayIgdGl0bGU9ImdzdF9lbGVtZW50X3Byb3ZpZGVfY2xvY2sgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfcHJvdmlkZV9jbG9jaygpPC9jb2RlPjwvYT4gbWV0aG9kIG9uZSBjYW4gcmV0cmlldmUgdGhlIGNsb2NrIHByb3ZpZGVkIGJ5CitzdWNoIGFuIGVsZW1lbnQuCitOb3QgYWxsIGVsZW1lbnRzIHJlcXVpcmUgYSBjbG9jayB0byBvcGVyYXRlIGNvcnJlY3RseS4gSWYKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcmVxdWlyZXMtY2xvY2siIHRpdGxlPSJnc3RfZWxlbWVudF9yZXF1aXJlc19jbG9jayAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9yZXF1aXJlc19jbG9jaygpPC9jb2RlPjwvYT4gcmV0dXJucyA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiwgYSBjbG9jayBzaG91bGQgYmUgc2V0IG9uIHRoZQorZWxlbWVudCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LWNsb2NrIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2V0X2Nsb2NrICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3NldF9jbG9jaygpPC9jb2RlPjwvYT4uCis8L3A+Cis8cD4KK05vdGUgdGhhdCBjbG9jayBzbGVjdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGlzIG5vcm1hbGx5IGhhbmRsZWQgYnkgdGhlCit0b3BsZXZlbCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPiBzbyB0aGUgY2xvY2sgZnVuY3Rpb25zIGFyZSBvbmx5IHRvIGJlIHVzZWQgaW4gdmVyeQorc3BlY2lmaWMgc2l0dWF0aW9ucy4KKzwvcD4KKzxwPgorTGFzdCByZXZpZXdlZCBvbiAyMDA5LTA1LTI5ICgwLjEwLjI0KQorPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RFbGVtZW50LmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RFbGVtZW50LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0RWxlbWVudDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEVsZW1lbnQgeworICBHU3RhdGljUmVjTXV0ZXggICAgICAgc3RhdGVfbG9jazsKKworICAvKiBlbGVtZW50IHN0YXRlICovCisgIEdDb25kICAgICAgICAgICAgICAgICpzdGF0ZV9jb25kOworICBndWludDMyICAgICAgICAgICAgICAgc3RhdGVfY29va2llOworICBHc3RTdGF0ZSAgICAgICAgICAgICAgdGFyZ2V0X3N0YXRlOworICBHc3RTdGF0ZSAgICAgICAgICAgICAgY3VycmVudF9zdGF0ZTsKKyAgR3N0U3RhdGUgICAgICAgICAgICAgIG5leHRfc3RhdGU7CisgIEdzdFN0YXRlICAgICAgICAgICAgICBwZW5kaW5nX3N0YXRlOworICBHc3RTdGF0ZUNoYW5nZVJldHVybiAgbGFzdF9yZXR1cm47CisKKyAgR3N0QnVzICAgICAgICAgICAgICAgKmJ1czsKKworICAvKiBhbGxvY2F0ZWQgY2xvY2sgKi8KKyAgR3N0Q2xvY2sgICAgICAgICAgICAgKmNsb2NrOworICBHc3RDbG9ja1RpbWVEaWZmICAgICAgYmFzZV90aW1lOyAvKiBOVUxML1JFQURZOiAwIC0gUEFVU0VEOiBjdXJyZW50IHRpbWUgLSBQTEFZSU5HOiBkaWZmZXJlbmNlIHRvIGNsb2NrICovCisgIEdzdENsb2NrVGltZSAgICAgICAgICBzdGFydF90aW1lOworCisgIC8qIGVsZW1lbnQgcGFkcywgdGhlc2UgbGlzdHMgY2FuIG9ubHkgYmUgaXRlcmF0ZWQgd2hpbGUgaG9sZGluZworICAgKiB0aGUgTE9DSyBvciBjaGVja2luZyB0aGUgY29va2llIGFmdGVyIGVhY2ggTE9DSy4gKi8KKyAgZ3VpbnQxNiAgICAgICAgICAgICAgIG51bXBhZHM7CisgIEdMaXN0ICAgICAgICAgICAgICAgICpwYWRzOworICBndWludDE2ICAgICAgICAgICAgICAgbnVtc3JjcGFkczsKKyAgR0xpc3QgICAgICAgICAgICAgICAgKnNyY3BhZHM7CisgIGd1aW50MTYgICAgICAgICAgICAgICBudW1zaW5rcGFkczsKKyAgR0xpc3QgICAgICAgICAgICAgICAgKnNpbmtwYWRzOworICBndWludDMyICAgICAgICAgICAgICAgcGFkc19jb29raWU7Cit9OworPC9wcmU+Cis8cD4KK0dTdHJlYW1lciBlbGVtZW50IGFic3RyYWN0IGJhc2UgY2xhc3MuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVRocmVhZHMuaHRtbCNHU3RhdGljUmVjTXV0ZXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU3RhdGljUmVjTXV0ZXg8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RWxlbWVudC1zdHJ1Y3Quc3RhdGUtbG9jayI+PC9hPnN0YXRlX2xvY2s8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPlVzZWQgdG8gc2VyaWFsaXplIGV4ZWN1dGlvbiBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1zdGF0ZSIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9zdGF0ZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9zZXRfc3RhdGUoKTwvY29kZT48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1UaHJlYWRzLmh0bWwjR0NvbmQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HQ29uZDwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RWxlbWVudC1zdHJ1Y3Quc3RhdGUtY29uZCI+PC9hPnN0YXRlX2NvbmQ8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPlVzZWQgdG8gc2lnbmFsIGNvbXBsZXRpb24gb2YgYSBzdGF0ZSBjaGFuZ2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnQtc3RydWN0LnN0YXRlLWNvb2tpZSI+PC9hPnN0YXRlX2Nvb2tpZTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VXNlZCB0byBkZXRlY3QgY29uY3VycmVudCBleGVjdXRpb24gb2YKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LXN0YXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2V0X3N0YXRlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3NldF9zdGF0ZSgpPC9jb2RlPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LXN0YXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X2dldF9zdGF0ZSgpPC9jb2RlPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnQtc3RydWN0LnRhcmdldC1zdGF0ZSI+PC9hPnRhcmdldF9zdGF0ZTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHRhcmdldCBzdGF0ZSBvZiBhbiBlbGVtZW50IGFzIHNldCBieSB0aGUgYXBwbGljYXRpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZSIgdGl0bGU9ImVudW0gR3N0U3RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RFbGVtZW50LXN0cnVjdC5jdXJyZW50LXN0YXRlIj48L2E+Y3VycmVudF9zdGF0ZTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGN1cnJlbnQgc3RhdGUgb2YgYW4gZWxlbWVudDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnQtc3RydWN0Lm5leHQtc3RhdGUiPjwvYT5uZXh0X3N0YXRlPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV4dCBzdGF0ZSBvZiBhbiBlbGVtZW50LCBjYW4gYmUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtVk9JRC1QRU5ESU5HOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfU1RBVEVfVk9JRF9QRU5ESU5HPC9zcGFuPjwvYT4gaWYKK3RoZSBlbGVtZW50IGlzIGluIHRoZSBjb3JyZWN0IHN0YXRlLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnQtc3RydWN0LnBlbmRpbmctc3RhdGUiPjwvYT5wZW5kaW5nX3N0YXRlPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZmluYWwgc3RhdGUgdGhlIGVsZW1lbnQgc2hvdWxkIGdvIHRvLCBjYW4gYmUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVZPSUQtUEVORElORzpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1NUQVRFX1ZPSURfUEVORElORzwvc3Bhbj48L2E+IGlmIHRoZSBlbGVtZW50IGlzIGluIHRoZSBjb3JyZWN0IHN0YXRlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGVDaGFuZ2VSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGVDaGFuZ2VSZXR1cm48L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RWxlbWVudC1zdHJ1Y3QubGFzdC1yZXR1cm4iPjwvYT5sYXN0X3JldHVybjwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGxhc3QgcmV0dXJuIHZhbHVlIG9mIGFuIGVsZW1lbnQgc3RhdGUgY2hhbmdlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RWxlbWVudC1zdHJ1Y3QuYnVzIj48L2E+YnVzPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgYnVzIG9mIHRoZSBlbGVtZW50LiBUaGlzIGJ1cyBpcyBwcm92aWRlZCB0byB0aGUgZWxlbWVudCBieSB0aGUKK3BhcmVudCBlbGVtZW50IG9yIHRoZSBhcHBsaWNhdGlvbi4gQSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPiBoYXMgYSBidXMgb2YgaXRzIG93bi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RFbGVtZW50LXN0cnVjdC5jbG9jayI+PC9hPmNsb2NrPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY2xvY2sgb2YgdGhlIGVsZW1lbnQuIFRoaXMgY2xvY2sgaXMgdXN1YWxseSBwcm92aWRlZCB0byB0aGUKK2VsZW1lbnQgYnkgdGhlIHRvcGxldmVsIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWVEaWZmIiB0aXRsZT0iR3N0Q2xvY2tUaW1lRGlmZiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZURpZmY8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RWxlbWVudC1zdHJ1Y3QuYmFzZS10aW1lIj48L2E+YmFzZV90aW1lPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdGltZSBvZiB0aGUgY2xvY2sgcmlnaHQgYmVmb3JlIHRoZSBlbGVtZW50IGlzIHNldCB0bworUExBWUlORy4gU3VidHJhY3RpbmcgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJhc2VfdGltZTwvY29kZT48L2VtPiBmcm9tIHRoZSBjdXJyZW50IGNsb2NrIHRpbWUgaW4gdGhlIFBMQVlJTkcKK3N0YXRlIHdpbGwgeWllbGQgdGhlIHJ1bm5pbmdfdGltZSBhZ2FpbnN0IHRoZSBjbG9jay48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnQtc3RydWN0LnN0YXJ0LXRpbWUiPjwvYT5zdGFydF90aW1lPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcnVubmluZ190aW1lIG9mIHRoZSBsYXN0IFBBVVNFRCBzdGF0ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MTY8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RWxlbWVudC1zdHJ1Y3QubnVtcGFkcyI+PC9hPm51bXBhZHM8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPm51bWJlciBvZiBwYWRzIG9mIHRoZSBlbGVtZW50LCBpbmNsdWRlcyBib3RoIHNvdXJjZSBhbmQgc2luayBwYWRzLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RFbGVtZW50LXN0cnVjdC5wYWRzIj48L2E+cGFkczwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bGlzdCBvZiBwYWRzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQxNjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RFbGVtZW50LXN0cnVjdC5udW1zcmNwYWRzIj48L2E+bnVtc3JjcGFkczwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bnVtYmVyIG9mIHNvdXJjZSBwYWRzIG9mIHRoZSBlbGVtZW50LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RFbGVtZW50LXN0cnVjdC5zcmNwYWRzIj48L2E+c3JjcGFkczwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bGlzdCBvZiBzb3VyY2UgcGFkczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MTY8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RWxlbWVudC1zdHJ1Y3QubnVtc2lua3BhZHMiPjwvYT5udW1zaW5rcGFkczwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bnVtYmVyIG9mIHNpbmsgcGFkcyBvZiB0aGUgZWxlbWVudC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RWxlbWVudC1zdHJ1Y3Quc2lua3BhZHMiPjwvYT5zaW5rcGFkczwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bGlzdCBvZiBzaW5rIHBhZHM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnQtc3RydWN0LnBhZHMtY29va2llIj48L2E+cGFkc19jb29raWU8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnVwZGF0ZWQgd2hlbmV2ZXIgdGhlIGEgcGFkIGlzIGFkZGVkIG9yIHJlbW92ZWQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RFbGVtZW50Q2xhc3MiPjwvYT48aDM+c3RydWN0IEdzdEVsZW1lbnRDbGFzczwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEVsZW1lbnRDbGFzcyB7CisgIEdzdE9iamVjdENsYXNzICAgICAgICAgcGFyZW50X2NsYXNzOworCisgIC8qIHRoZSBlbGVtZW50IG1ldGFkYXRhICovCisgIGdwb2ludGVyCQkgbWV0YWRhdGE7CisKKyAgLyogZmFjdG9yeSB0aGF0IHRoZSBlbGVtZW50IHdhcyBjcmVhdGVkIGZyb20gKi8KKyAgR3N0RWxlbWVudEZhY3RvcnkgICAgICplbGVtZW50ZmFjdG9yeTsKKworICAvKiB0ZW1wbGF0ZXMgZm9yIG91ciBwYWRzICovCisgIEdMaXN0ICAgICAgICAgICAgICAgICAqcGFkdGVtcGxhdGVzOworICBnaW50ICAgICAgICAgICAgICAgICAgIG51bXBhZHRlbXBsYXRlczsKKyAgZ3VpbnQzMiAgICAgICAgICAgICAgICBwYWRfdGVtcGxfY29va2llOworCisgIC8qIHZpcnR1YWwgbWV0aG9kcyBmb3Igc3ViY2xhc3NlcyAqLworCisgIC8qIHJlcXVlc3QvcmVsZWFzZSBwYWRzICovCisgIEdzdFBhZCogICAgICAgICAgICAgICAoKnJlcXVlc3RfbmV3X3BhZCkgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0UGFkVGVtcGxhdGUgKnRlbXBsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiBuYW1lLCBjb25zdCBHc3RDYXBzICpjYXBzKTsKKyAgdm9pZCAgICAgICAgICAgICAgICAgICgqcmVsZWFzZV9wYWQpICAgICAgICAgIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RQYWQgKnBhZCk7CisKKyAgLyogc3RhdGUgY2hhbmdlcyAqLworICBHc3RTdGF0ZUNoYW5nZVJldHVybiAoKmdldF9zdGF0ZSkgICAgICAgICAgICAgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZSAqIHN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFN0YXRlICogcGVuZGluZywgR3N0Q2xvY2tUaW1lIHRpbWVvdXQpOworICBHc3RTdGF0ZUNoYW5nZVJldHVybiAoKnNldF9zdGF0ZSkgICAgICAgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdFN0YXRlIHN0YXRlKTsKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gKCpjaGFuZ2Vfc3RhdGUpICAgICAgICAgIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKKyAgdm9pZCAgICAgICAgICAgICAgICAgKCpzdGF0ZV9jaGFuZ2VkKSAgICAgICAgIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RTdGF0ZSBvbGRzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RTdGF0ZSBuZXdzdGF0ZSwgR3N0U3RhdGUgcGVuZGluZyk7CisKKyAgLyogYnVzICovCisgIHZvaWQgICAgICAgICAgICAgICAgICAoKnNldF9idXMpICAgICAgICAgICAgICAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEJ1cyAqIGJ1cyk7CisKKyAgLyogc2V0L2dldCBjbG9ja3MgKi8KKyAgR3N0Q2xvY2sqICAgICAgICAgICAgICgqcHJvdmlkZV9jbG9jaykgICAgICAgIChHc3RFbGVtZW50ICplbGVtZW50KTsKKyAgZ2Jvb2xlYW4gICAgICAgICAgICAgICgqc2V0X2Nsb2NrKSAgICAgICAgICAgIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RDbG9jayAqY2xvY2spOworCisgIC8qIGluZGV4ICovCisgIEdzdEluZGV4KiAgICAgICAgICAgICAoKmdldF9pbmRleCkgICAgICAgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCk7CisgIHZvaWQgICAgICAgICAgICAgICAgICAoKnNldF9pbmRleCkgICAgICAgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0SW5kZXggKmluZGV4KTsKKworICAvKiBxdWVyeSBmdW5jdGlvbnMgKi8KKyAgZ2Jvb2xlYW4gICAgICAgICAgICAgICgqc2VuZF9ldmVudCkgICAgICAgICAgIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RFdmVudCAqZXZlbnQpOworCisgIGNvbnN0IEdzdFF1ZXJ5VHlwZSogICAoKmdldF9xdWVyeV90eXBlcykgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCk7CisgIGdib29sZWFuICAgICAgICAgICAgICAoKnF1ZXJ5KSAgICAgICAgICAgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0UXVlcnkgKnF1ZXJ5KTsKK307Cis8L3ByZT4KKzxwPgorR1N0cmVhbWVyIGVsZW1lbnQgY2xhc3MuIE92ZXJyaWRlIHRoZSB2bWV0aG9kcyB0byBpbXBsZW1lbnQgdGhlIGVsZW1lbnQKK2Z1bmN0aW9uYWxpdHkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0Q2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0T2JqZWN0Q2xhc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3RDbGFzczwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RFbGVtZW50Q2xhc3MucGFyZW50LWNsYXNzIj48L2E+cGFyZW50X2NsYXNzPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGFyZW50IGNsYXNzIHN0cnVjdHVyZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RFbGVtZW50Q2xhc3MubWV0YWRhdGEiPjwvYT5tZXRhZGF0YTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bWV0YWRhdGEgZm9yIGVsZW1lbnRzIG9mIHRoaXMgY2xhc3M8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RFbGVtZW50Q2xhc3MuZWxlbWVudGZhY3RvcnkiPjwvYT5lbGVtZW50ZmFjdG9yeTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+IHRoYXQgY3JlYXRlcyB0aGVzZSBlbGVtZW50czwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RFbGVtZW50Q2xhc3MucGFkdGVtcGxhdGVzIj48L2E+cGFkdGVtcGxhdGVzPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RFbGVtZW50Q2xhc3MubnVtcGFkdGVtcGxhdGVzIj48L2E+bnVtcGFkdGVtcGxhdGVzPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbnVtYmVyIG9mIHBhZHRlbXBsYXRlczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RWxlbWVudENsYXNzLnBhZC10ZW1wbC1jb29raWUiPjwvYT5wYWRfdGVtcGxfY29va2llPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5jaGFuZ2VkIHdoZW5ldmVyIHRoZSBwYWR0ZW1wbGF0ZXMgY2hhbmdlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnRDbGFzcy5yZXF1ZXN0LW5ldy1wYWQiPjwvYT5yZXF1ZXN0X25ld19wYWQ8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPmNhbGxlZCB3aGVuIGEgbmV3IHBhZCBpcyByZXF1ZXN0ZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RWxlbWVudENsYXNzLnJlbGVhc2UtcGFkIj48L2E+cmVsZWFzZV9wYWQ8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPmNhbGxlZCB3aGVuIGEgcmVxdWVzdCBwYWQgaXMgdG8gYmUgcmVsZWFzZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RWxlbWVudENsYXNzLmdldC1zdGF0ZSI+PC9hPmdldF9zdGF0ZTwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Z2V0IHRoZSBzdGF0ZSBvZiB0aGUgZWxlbWVudDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RFbGVtZW50Q2xhc3Muc2V0LXN0YXRlIj48L2E+c2V0X3N0YXRlPC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zZXQgYSBuZXcgc3RhdGUgb24gdGhlIGVsZW1lbnQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RWxlbWVudENsYXNzLmNoYW5nZS1zdGF0ZSI+PC9hPmNoYW5nZV9zdGF0ZTwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Y2FsbGVkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXRfc3RhdGU8L2NvZGU+PC9lbT4gdG8gcGVyZm9ybSBhbiBpbmNyZW1lbnRhbCBzdGF0ZSBjaGFuZ2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RWxlbWVudENsYXNzLnN0YXRlLWNoYW5nZWQiPjwvYT5zdGF0ZV9jaGFuZ2VkPC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5jYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBuZXcgc3RhdGUgd2FzIHNldC4gU2luY2U6IDAuMTAuMzUuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnRDbGFzcy5zZXQtYnVzIj48L2E+c2V0X2J1czwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2V0IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gb24gdGhlIGVsZW1lbnQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RWxlbWVudENsYXNzLnByb3ZpZGUtY2xvY2siPjwvYT5wcm92aWRlX2Nsb2NrPC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5nZXRzIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiBwcm92aWRlZCBieSB0aGUgZWxlbWVudDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RFbGVtZW50Q2xhc3Muc2V0LWNsb2NrIj48L2E+c2V0X2Nsb2NrPC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zZXQgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IG9uIHRoZSBlbGVtZW50PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnRDbGFzcy5nZXQtaW5kZXgiPjwvYT5nZXRfaW5kZXg8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPnNldCBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleDwvc3Bhbj48L2E+IG9uIHRoZSBlbGVtZW50PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnRDbGFzcy5zZXQtaW5kZXgiPjwvYT5zZXRfaW5kZXg8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPmdldCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4PC9zcGFuPjwvYT4gb2YgYW4gZWxlbWVudDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RFbGVtZW50Q2xhc3Muc2VuZC1ldmVudCI+PC9hPnNlbmRfZXZlbnQ8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPnNlbmQgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+IHRvIHRoZSBlbGVtZW50PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnRDbGFzcy5nZXQtcXVlcnktdHlwZXMiPjwvYT5nZXRfcXVlcnlfdHlwZXM8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPmdldCB0aGUgc3VwcG9ydGVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGUiIHRpdGxlPSJlbnVtIEdzdFF1ZXJ5VHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5VHlwZTwvc3Bhbj48L2E+IG9mIHRoaXMgZWxlbWVudDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RFbGVtZW50Q2xhc3MucXVlcnkiPjwvYT5xdWVyeTwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cGVyZm9ybSBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gb24gdGhlIGVsZW1lbnQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RFbGVtZW50RmxhZ3MiPjwvYT48aDM+ZW51bSBHc3RFbGVtZW50RmxhZ3M8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9FTEVNRU5UX0xPQ0tFRF9TVEFURSAgICAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUICZsdDsmbHQ7IDApLAorICBHU1RfRUxFTUVOVF9JU19TSU5LICAgICAgICAgICA9IChHU1RfT0JKRUNUX0ZMQUdfTEFTVCAmbHQ7Jmx0OyAxKSwKKyAgR1NUX0VMRU1FTlRfVU5QQVJFTlRJTkcgICAgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgJmx0OyZsdDsgMiksCisgIEdTVF9FTEVNRU5UX0lTX1NPVVJDRSAgICAgICAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUICZsdDsmbHQ7IDMpLAorICAvKiBwYWRkaW5nICovCisgIEdTVF9FTEVNRU5UX0ZMQUdfTEFTVCAgICAgICAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUICZsdDsmbHQ7IDE2KQorfSBHc3RFbGVtZW50RmxhZ3M7Cis8L3ByZT4KKzxwPgorVGhlIHN0YW5kYXJkIGZsYWdzIHRoYXQgYW4gZWxlbWVudCBtYXkgaGF2ZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUVMRU1FTlQtTE9DS0VELVNUQVRFOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9FTEVNRU5UX0xPQ0tFRF9TVEFURTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+aWdub3JlIHN0YXRlIGNoYW5nZXMgZnJvbSBwYXJlbnQKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1FTEVNRU5ULUlTLVNJTks6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0VMRU1FTlRfSVNfU0lOSzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGVsZW1lbnQgaXMgYSBzaW5rCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtRUxFTUVOVC1VTlBBUkVOVElORzpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRUxFTUVOVF9VTlBBUkVOVElORzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Q2hpbGQgaXMgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBwYXJlbnQgYmluLgorIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLXJlbW92ZSIgdGl0bGU9ImdzdF9iaW5fcmVtb3ZlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iaW5fcmVtb3ZlKCk8L2NvZGU+PC9hPiBvbiBhIGNoaWxkIGFscmVhZHkgYmVpbmcgcmVtb3ZlZCBpbW1lZGlhdGVseSByZXR1cm5zIEZBTFNFCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtRUxFTUVOVC1JUy1TT1VSQ0U6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0VMRU1FTlRfSVNfU09VUkNFPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZWxlbWVudCBpcyBhIHNvdXJjZS4gU2luY2UgMC4xMC4zMQorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUVMRU1FTlQtRkxBRy1MQVNUOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9FTEVNRU5UX0ZMQUdfTEFTVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+b2Zmc2V0IHRvIGRlZmluZSBtb3JlIGZsYWdzCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RTdGF0ZSI+PC9hPjxoMz5lbnVtIEdzdFN0YXRlPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGVudW0geworICBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HICAgICAgICA9IDAsCisgIEdTVF9TVEFURV9OVUxMICAgICAgICAgICAgICAgID0gMSwKKyAgR1NUX1NUQVRFX1JFQURZICAgICAgICAgICAgICAgPSAyLAorICBHU1RfU1RBVEVfUEFVU0VEICAgICAgICAgICAgICA9IDMsCisgIEdTVF9TVEFURV9QTEFZSU5HICAgICAgICAgICAgID0gNAorfSBHc3RTdGF0ZTsKKzwvcHJlPgorPHA+CitUaGUgcG9zc2libGUgc3RhdGVzIGFuIGVsZW1lbnQgY2FuIGJlIGluLiBTdGF0ZXMgY2FuIGJlIGNoYW5nZWQgdXNpbmcKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LXN0YXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2V0X3N0YXRlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3NldF9zdGF0ZSgpPC9jb2RlPjwvYT4gYW5kIGNoZWNrZWQgdXNpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtc3RhdGUiIHRpdGxlPSJnc3RfZWxlbWVudF9nZXRfc3RhdGUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfZ2V0X3N0YXRlKCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVNUQVRFLVZPSUQtUEVORElORzpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RBVEVfVk9JRF9QRU5ESU5HPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5ubyBwZW5kaW5nIHN0YXRlLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVNUQVRFLU5VTEw6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX05VTEw8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBOVUxMIHN0YXRlIG9yIGluaXRpYWwgc3RhdGUgb2YgYW4gZWxlbWVudC4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1TVEFURS1SRUFEWTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RBVEVfUkVBRFk8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBlbGVtZW50IGlzIHJlYWR5IHRvIGdvIHRvIFBBVVNFRC4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1TVEFURS1QQVVTRUQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX1BBVVNFRDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGVsZW1lbnQgaXMgUEFVU0VELCBpdCBpcyByZWFkeSB0byBhY2NlcHQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2VzcyBkYXRhLiBTaW5rIGVsZW1lbnRzIGhvd2V2ZXIgb25seSBhY2NlcHQgb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyIGFuZCB0aGVuIGJsb2NrLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVNUQVRFLVBMQVlJTkc6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX1BMQVlJTkc8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBlbGVtZW50IGlzIFBMQVlJTkcsIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiBpcyBydW5uaW5nIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkYXRhIGlzIGZsb3dpbmcuCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RTdGF0ZUNoYW5nZSI+PC9hPjxoMz5lbnVtIEdzdFN0YXRlQ2hhbmdlPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGVudW0geworICBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFkgICAgICAgID0gKEdTVF9TVEFURV9OVUxMJmx0OyZsdDszKSB8IEdTVF9TVEFURV9SRUFEWSwKKyAgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQgICAgICA9IChHU1RfU1RBVEVfUkVBRFkmbHQ7Jmx0OzMpIHwgR1NUX1NUQVRFX1BBVVNFRCwKKyAgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUExBWUlORyAgICA9IChHU1RfU1RBVEVfUEFVU0VEJmx0OyZsdDszKSB8IEdTVF9TVEFURV9QTEFZSU5HLAorICBHU1RfU1RBVEVfQ0hBTkdFX1BMQVlJTkdfVE9fUEFVU0VEICAgID0gKEdTVF9TVEFURV9QTEFZSU5HJmx0OyZsdDszKSB8IEdTVF9TVEFURV9QQVVTRUQsCisgIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZICAgICAgPSAoR1NUX1NUQVRFX1BBVVNFRCZsdDsmbHQ7MykgfCBHU1RfU1RBVEVfUkVBRFksCisgIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTCAgICAgICAgPSAoR1NUX1NUQVRFX1JFQURZJmx0OyZsdDszKSB8IEdTVF9TVEFURV9OVUxMCit9IEdzdFN0YXRlQ2hhbmdlOworPC9wcmU+Cis8cD4KK1RoZXNlIGFyZSB0aGUgZGlmZmVyZW50IHN0YXRlIGNoYW5nZXMgYW4gZWxlbWVudCBnb2VzIHRocm91Z2guCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1OVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RBVEVfTlVMTDwvY29kZT48L2E+IOKHkiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1QTEFZSU5HOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RBVEVfUExBWUlORzwvY29kZT48L2E+IGlzIGNhbGxlZCBhbiB1cHdhcmRzIHN0YXRlIGNoYW5nZQorYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVBMQVlJTkc6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9QTEFZSU5HPC9jb2RlPjwvYT4g4oeSIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLU5VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9OVUxMPC9jb2RlPjwvYT4gYSBkb3dud2FyZHMgc3RhdGUgY2hhbmdlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtU1RBVEUtQ0hBTkdFLU5VTEwtVE8tUkVBRFk6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zdGF0ZSBjaGFuZ2UgZnJvbSBOVUxMIHRvIFJFQURZLgorPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICBUaGUgZWxlbWVudCBtdXN0IGNoZWNrIGlmIHRoZSByZXNvdXJjZXMgaXQgbmVlZHMgYXJlIGF2YWlsYWJsZS4gRGV2aWNlCisgICAgc2lua3MgYW5kIC1zb3VyY2VzIHR5cGljYWxseSB0cnkgdG8gcHJvYmUgdGhlIGRldmljZSB0byBjb25zdHJhaW4gdGhlaXIKKyAgICBjYXBzLgorICA8L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgIFRoZSBlbGVtZW50IG9wZW5zIHRoZSBkZXZpY2UgKGluIGNhc2UgZmVhdHVyZSBuZWVkIHRvIGJlIHByb2JlZCkuCisgIDwvcD48L2xpPgorPC91bD48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1TVEFURS1DSEFOR0UtUkVBRFktVE8tUEFVU0VEOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zdGF0ZSBjaGFuZ2UgZnJvbSBSRUFEWSB0byBQQVVTRUQuCis8ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiB0eXBlPSJkaXNjIj4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgIFRoZSBlbGVtZW50IHBhZHMgYXJlIGFjdGl2YXRlZCBpbiBvcmRlciB0byByZWNlaXZlIGRhdGEgaW4gUEFVU0VELgorICAgIFN0cmVhbWluZyB0aHJlYWRzIGFyZSBzdGFydGVkLgorICA8L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgIFNvbWUgZWxlbWVudHMgbWlnaHQgbmVlZCB0byByZXR1cm4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLUFTWU5DOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RBVEVfQ0hBTkdFX0FTWU5DPC9jb2RlPjwvYT4gYW5kIGNvbXBsZXRlCisgICAgdGhlIHN0YXRlIGNoYW5nZSB3aGVuIHRoZXkgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24uIEl0IGlzIGEgcmVxdWlyZW1lbnQKKyAgICBmb3Igc2lua3MgdG8gcmV0dXJuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUNIQU5HRS1BU1lOQzpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX0NIQU5HRV9BU1lOQzwvY29kZT48L2E+IGFuZCBjb21wbGV0ZSB0aGUgc3RhdGUgY2hhbmdlCisgICAgd2hlbiB0aGV5IHJlY2VpdmUgdGhlIGZpcnN0IGJ1ZmZlciBvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUVPUzpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0VWRU5UX0VPUzwvY29kZT48L2E+IChwcmVyb2xsKS4KKyAgICBTaW5rcyBhbHNvIGJsb2NrIHRoZSBkYXRhZmxvdyB3aGVuIGluIFBBVVNFRC4KKyAgPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICBBIHBpcGVsaW5lIHJlc2V0cyB0aGUgcnVubmluZ190aW1lIHRvIDAuCisgIDwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgICAgTGl2ZSBzb3VyY2VzIHJldHVybiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1DSEFOR0UtTk8tUFJFUk9MTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMPC9jb2RlPjwvYT4gYW5kIGRvbid0IGdlbmVyYXRlIGRhdGEuCisgIDwvcD48L2xpPgorPC91bD48L2Rpdj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1TVEFURS1DSEFOR0UtUEFVU0VELVRPLVBMQVlJTkc6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUExBWUlORzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c3RhdGUgY2hhbmdlIGZyb20gUEFVU0VEIHRvIFBMQVlJTkcuCis8ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiB0eXBlPSJkaXNjIj4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgIE1vc3QgZWxlbWVudHMgaWdub3JlIHRoaXMgc3RhdGUgY2hhbmdlLgorICA8L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgIFRoZSBwaXBlbGluZSBzZWxlY3RzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gYW5kIGRpc3RyaWJ1dGVzIHRoaXMgdG8gYWxsIHRoZSBjaGlsZHJlbgorICAgIGJlZm9yZSBzZXR0aW5nIHRoZW0gdG8gUExBWUlORy4gVGhpcyBtZWFucyB0aGF0IGl0IGlzIG9ubHkgYWxvd2VkIHRvCisgICAgc3luY2hyb25pemUgb24gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IGluIHRoZSBQTEFZSU5HIHN0YXRlLgorICA8L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgIFRoZSBwaXBlbGluZSB1c2VzIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiBhbmQgdGhlIHJ1bm5pbmdfdGltZSB0byBjYWxjdWxhdGUgdGhlCisgICAgYmFzZV90aW1lLiBUaGUgYmFzZV90aW1lIGlzIGRpc3RyaWJ1dGVkIHRvIGFsbCBjaGlsZHJlbiB3aGVuIHBlcmZvcm1pbmcKKyAgICB0aGUgc3RhdGUgY2hhbmdlLgorICA8L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgIFNpbmsgZWxlbWVudHMgc3RvcCBibG9ja2luZyBvbiB0aGUgcHJlcm9sbCBidWZmZXIgb3IgZXZlbnQgYW5kIHN0YXJ0CisgICAgcmVuZGVyaW5nIHRoZSBkYXRhLgorICA8L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgIFNpbmtzIGNhbiBwb3N0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLUVPUzpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX01FU1NBR0VfRU9TPC9jb2RlPjwvYT4gaW4gdGhlIFBMQVlJTkcgc3RhdGUuIEl0IGlzIG5vdCBhbGxvd2VkCisgICAgdG8gcG9zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1FT1M6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9NRVNTQUdFX0VPUzwvY29kZT48L2E+IHdoZW4gbm90IGluIHRoZSBQTEFZSU5HIHN0YXRlLgorICA8L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgIFdoaWxlIHN0cmVhbWluZyBpbiBQQVVTRUQgb3IgUExBWUlORyBlbGVtZW50cyBjYW4gY3JlYXRlIGFuZCByZW1vdmUKKyAgICBzb21ldGltZXMgcGFkcy4KKyAgPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICBMaXZlIHNvdXJjZXMgc3RhcnQgZ2VuZXJhdGluZyBkYXRhIGFuZCByZXR1cm4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLVNVQ0NFU1M6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzwvY29kZT48L2E+LgorICA8L3A+PC9saT4KKzwvdWw+PC9kaXY+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtU1RBVEUtQ0hBTkdFLVBMQVlJTkctVE8tUEFVU0VEOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9DSEFOR0VfUExBWUlOR19UT19QQVVTRUQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnN0YXRlIGNoYW5nZSBmcm9tIFBMQVlJTkcgdG8gUEFVU0VELgorPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICBNb3N0IGVsZW1lbnRzIGlnbm9yZSB0aGlzIHN0YXRlIGNoYW5nZS4KKyAgPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICBUaGUgcGlwZWxpbmUgY2FsY3VsYXRlcyB0aGUgcnVubmluZ190aW1lIGJhc2VkIG9uIHRoZSBsYXN0IHNlbGVjdGVkCisgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gYW5kIHRoZSBiYXNlX3RpbWUuIEl0IHN0b3JlcyB0aGlzIGluZm9ybWF0aW9uIHRvIGNvbnRpbnVlCisgICAgcGxheWJhY2sgd2hlbiBnb2luZyBiYWNrIHRvIHRoZSBQTEFZSU5HIHN0YXRlLgorICA8L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgIFNpbmtzIHVuYmxvY2sgYW55IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IHdhaXQgY2FsbHMuCisgIDwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgICAgV2hlbiBhIHNpbmsgZG9lcyBub3QgaGF2ZSBhIHBlbmRpbmcgYnVmZmVyIHRvIHBsYXksIGl0IHJldHVybnMgCisgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLUFTWU5DOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RBVEVfQ0hBTkdFX0FTWU5DPC9jb2RlPjwvYT4gZnJvbSB0aGlzIHN0YXRlIGNoYW5nZSBhbmQgY29tcGxldGVzIHRoZSBzdGF0ZQorICAgIGNoYW5nZSB3aGVuIGl0IHJlY2VpdmVzIGEgbmV3IGJ1ZmZlciBvciBhbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUVPUzpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0VWRU5UX0VPUzwvY29kZT48L2E+LgorICA8L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgIEFueSBxdWV1ZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtRU9TOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTUVTU0FHRV9FT1M8L2NvZGU+PC9hPiBpdGVtcyBhcmUgcmVtb3ZlZCBzaW5jZSB0aGV5IHdpbGwgYmUgcmVwb3N0ZWQKKyAgICB3aGVuIGdvaW5nIGJhY2sgdG8gdGhlIFBMQVlJTkcgc3RhdGUuIFRoZSBFT1MgbWVzc2FnZXMgYXJlIHF1ZXVlZCBpbgorICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+IGNvbnRhaW5lcnMuCisgIDwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgICAgTGl2ZSBzb3VyY2VzIHN0b3AgZ2VuZXJhdGluZyBkYXRhIGFuZCByZXR1cm4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLU5PLVBSRVJPTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTDwvY29kZT48L2E+LgorICA8L3A+PC9saT4KKzwvdWw+PC9kaXY+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtU1RBVEUtQ0hBTkdFLVBBVVNFRC1UTy1SRUFEWTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c3RhdGUgY2hhbmdlIGZyb20gUEFVU0VEIHRvIFJFQURZLgorPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICBTaW5rcyB1bmJsb2NrIGFueSB3YWl0cyBpbiB0aGUgcHJlcm9sbC4KKyAgPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICBFbGVtZW50cyB1bmJsb2NrIGFueSB3YWl0cyBvbiBkZXZpY2VzCisgIDwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgICAgQ2hhaW4gb3IgZ2V0X3JhbmdlIGZ1bmN0aW9ucyByZXR1cm4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1GTE9XLVdST05HLVNUQVRFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRkxPV19XUk9OR19TVEFURTwvY29kZT48L2E+LgorICA8L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgIFRoZSBlbGVtZW50IHBhZHMgYXJlIGRlYWN0aXZhdGVkIHNvIHRoYXQgc3RyZWFtaW5nIGJlY29tZXMgaW1wb3NzaWJsZSBhbmQKKyAgICBhbGwgc3RyZWFtaW5nIHRocmVhZHMgYXJlIHN0b3BwZWQuCisgIDwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgICAgVGhlIHNpbmsgZm9yZ2V0cyBhbGwgbmVnb3RpYXRlZCBmb3JtYXRzCisgIDwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgICAgRWxlbWVudHMgcmVtb3ZlIGFsbCBzb21ldGltZXMgcGFkcworICA8L3A+PC9saT4KKzwvdWw+PC9kaXY+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtU1RBVEUtQ0hBTkdFLVJFQURZLVRPLU5VTEw6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zdGF0ZSBjaGFuZ2UgZnJvbSBSRUFEWSB0byBOVUxMLgorPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICBFbGVtZW50cyBjbG9zZSBkZXZpY2VzCisgIDwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgICAgRWxlbWVudHMgcmVzZXQgYW55IGludGVybmFsIHN0YXRlLgorICA8L3A+PC9saT4KKzwvdWw+PC9kaXY+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RTdGF0ZUNoYW5nZVJldHVybiI+PC9hPjxoMz5lbnVtIEdzdFN0YXRlQ2hhbmdlUmV0dXJuPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGVudW0geworICBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUgICAgICAgICAgICAgPSAwLAorICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MgICAgICAgICAgICAgPSAxLAorICBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DICAgICAgICAgICAgICAgPSAyLAorICBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwgICAgICAgICAgPSAzCit9IEdzdFN0YXRlQ2hhbmdlUmV0dXJuOworPC9wcmU+Cis8cD4KK1RoZSBwb3NzaWJsZSByZXR1cm4gdmFsdWVzIGZyb20gYSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gc3VjaCBhcyAKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LXN0YXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2V0X3N0YXRlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3NldF9zdGF0ZSgpPC9jb2RlPjwvYT4uIE9ubHkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPkdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTwvY29kZT48L2VtPiBpcyBhIHJlYWwgZmFpbHVyZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVNUQVRFLUNIQU5HRS1GQUlMVVJFOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHN0YXRlIGNoYW5nZSBmYWlsZWQKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1TVEFURS1DSEFOR0UtU1VDQ0VTUzpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzdGF0ZSBjaGFuZ2Ugc3VjY2VlZGVkCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtU1RBVEUtQ0hBTkdFLUFTWU5DOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9DSEFOR0VfQVNZTkM8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzdGF0ZSBjaGFuZ2Ugd2lsbCBoYXBwZW4gYXN5bmNocm9ub3VzbHkKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1TVEFURS1DSEFOR0UtTk8tUFJFUk9MTDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEw8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzdGF0ZSBjaGFuZ2Ugc3VjY2VlZGVkIGJ1dCB0aGUgZWxlbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fubm90IHByb2R1Y2UgZGF0YSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1QQVVTRUQ6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9QQVVTRUQ8L2NvZGU+PC9hPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdHlwaWNhbGx5IGhhcHBlbnMgd2l0aCBsaXZlIHNvdXJjZXMuCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtU1RBVEU6Q0FQUyI+PC9hPjxoMz5HU1RfU1RBVEUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfU1RBVEUoZWxlbSkgICAgICAgICAgICAgICAgIChHU1RfRUxFTUVOVF9DQVNUKGVsZW0pLSZndDtjdXJyZW50X3N0YXRlKQorPC9wcmU+Cis8cD4KK1RoaXMgbWFjcm8gcmV0dXJucyB0aGUgY3VycmVudCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlPC9zcGFuPjwvYT4gb2YgdGhlIGVsZW1lbnQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byByZXR1cm4gc3RhdGUgZm9yLjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtU1RBVEUtR0VULU5FWFQ6Q0FQUyI+PC9hPjxoMz5HU1RfU1RBVEVfR0VUX05FWFQoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfU1RBVEVfR0VUX05FWFQoY3VyLHBlbmRpbmcpICAgICAgICAgKChHc3RTdGF0ZSkoKGN1cikgKyBfX0dTVF9TSUdOICgoZ2ludCkocGVuZGluZykgLSAoZ2ludCkoY3VyKSkpKQorPC9wcmU+Cis8cD4KK0dpdmVuIGEgY3VycmVudCBzdGF0ZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y3VyPC9jb2RlPjwvZW0+IGFuZCBhIHRhcmdldCBzdGF0ZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGVuZGluZzwvY29kZT48L2VtPiwgY2FsY3VsYXRlIHRoZSBuZXh0IChpbnRlcm1lZGlhdGUpCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlPC9zcGFuPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y3VyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgc3RhcnRpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZSIgdGl0bGU9ImVudW0gR3N0U3RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBlbmRpbmc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSB0YXJnZXQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZSIgdGl0bGU9ImVudW0gR3N0U3RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtU1RBVEUtTkVYVDpDQVBTIj48L2E+PGgzPkdTVF9TVEFURV9ORVhUKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1NUQVRFX05FWFQoZWxlbSkgICAgICAgICAgICAoR1NUX0VMRU1FTlRfQ0FTVChlbGVtKS0mZ3Q7bmV4dF9zdGF0ZSkKKzwvcHJlPgorPHA+CitUaGlzIG1hY3JvIHJldHVybnMgdGhlIG5leHQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZSIgdGl0bGU9ImVudW0gR3N0U3RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZTwvc3Bhbj48L2E+IG9mIHRoZSBlbGVtZW50LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gcmV0dXJuIHRoZSBuZXh0IHN0YXRlIGZvci48L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVNUQVRFLVBFTkRJTkc6Q0FQUyI+PC9hPjxoMz5HU1RfU1RBVEVfUEVORElORygpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9TVEFURV9QRU5ESU5HKGVsZW0pICAgICAgICAgKEdTVF9FTEVNRU5UX0NBU1QoZWxlbSktJmd0O3BlbmRpbmdfc3RhdGUpCis8L3ByZT4KKzxwPgorVGhpcyBtYWNybyByZXR1cm5zIHRoZSBjdXJyZW50bHkgcGVuZGluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlPC9zcGFuPjwvYT4gb2YgdGhlIGVsZW1lbnQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byByZXR1cm4gdGhlIHBlbmRpbmcgc3RhdGUgZm9yLjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtU1RBVEUtUkVUVVJOOkNBUFMiPjwvYT48aDM+R1NUX1NUQVRFX1JFVFVSTigpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9TVEFURV9SRVRVUk4oZWxlbSkgICAgICAgICAgKEdTVF9FTEVNRU5UX0NBU1QoZWxlbSktJmd0O2xhc3RfcmV0dXJuKQorPC9wcmU+Cis8cD4KK1RoaXMgbWFjcm8gcmV0dXJucyB0aGUgbGFzdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlQ2hhbmdlUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RTdGF0ZUNoYW5nZVJldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlQ2hhbmdlUmV0dXJuPC9zcGFuPjwvYT4gdmFsdWUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byByZXR1cm4gdGhlIGxhc3Qgc3RhdGUgcmVzdWx0IGZvci48L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVNUQVRFLVRBUkdFVDpDQVBTIj48L2E+PGgzPkdTVF9TVEFURV9UQVJHRVQoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfU1RBVEVfVEFSR0VUKGVsZW0pICAgICAgICAgIChHU1RfRUxFTUVOVF9DQVNUKGVsZW0pLSZndDt0YXJnZXRfc3RhdGUpCis8L3ByZT4KKzxwPgorVGhpcyBtYWNybyByZXR1cm5zIHRoZSB0YXJnZXQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZSIgdGl0bGU9ImVudW0gR3N0U3RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZTwvc3Bhbj48L2E+IG9mIHRoZSBlbGVtZW50LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gcmV0dXJuIHRoZSB0YXJnZXQgc3RhdGUgZm9yLjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjEzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtU1RBVEUtVFJBTlNJVElPTjpDQVBTIj48L2E+PGgzPkdTVF9TVEFURV9UUkFOU0lUSU9OKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1NUQVRFX1RSQU5TSVRJT04oY3VyLG5leHQpICAgICAgICAgICgoR3N0U3RhdGVDaGFuZ2UpKCgoY3VyKSZsdDsmbHQ7Myl8KG5leHQpKSkKKzwvcHJlPgorPHA+CitHaXZlbiBhIGN1cnJlbnQgc3RhdGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmN1cjwvY29kZT48L2VtPiBhbmQgYSBuZXh0IHN0YXRlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uZXh0PC9jb2RlPjwvZW0+LCBjYWxjdWxhdGUgdGhlIGFzc29jaWF0ZWQKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGVDaGFuZ2UiIHRpdGxlPSJlbnVtIEdzdFN0YXRlQ2hhbmdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGVDaGFuZ2U8L3NwYW4+PC9hPiB0cmFuc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmN1cjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIGN1cnJlbnQgc3RhdGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5leHQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBuZXh0IHN0YXRlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVNUQVRFLVRSQU5TSVRJT04tQ1VSUkVOVDpDQVBTIj48L2E+PGgzPkdTVF9TVEFURV9UUkFOU0lUSU9OX0NVUlJFTlQoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfU1RBVEVfVFJBTlNJVElPTl9DVVJSRU5UKHRyYW5zKSAgICAgKChHc3RTdGF0ZSkoKHRyYW5zKSZndDsmZ3Q7MykpCis8L3ByZT4KKzxwPgorR2l2ZW4gYSBzdGF0ZSB0cmFuc2l0aW9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50cmFuczwvY29kZT48L2VtPiwgZXh0cmFjdCB0aGUgY3VycmVudCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlPC9zcGFuPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRyYW5zPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZUNoYW5nZSIgdGl0bGU9ImVudW0gR3N0U3RhdGVDaGFuZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZUNoYW5nZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVNUQVRFLVRSQU5TSVRJT04tTkVYVDpDQVBTIj48L2E+PGgzPkdTVF9TVEFURV9UUkFOU0lUSU9OX05FWFQoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfU1RBVEVfVFJBTlNJVElPTl9ORVhUKHRyYW5zKSAgICAgICAgKChHc3RTdGF0ZSkoKHRyYW5zKSZhbXA7MHg3KSkKKzwvcHJlPgorPHA+CitHaXZlbiBhIHN0YXRlIHRyYW5zaXRpb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRyYW5zPC9jb2RlPjwvZW0+LCBleHRyYWN0IHRoZSBuZXh0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGU8L3NwYW4+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHJhbnM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlQ2hhbmdlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZUNoYW5nZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlQ2hhbmdlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtU1RBVEUtR0VULUxPQ0s6Q0FQUyI+PC9hPjxoMz5HU1RfU1RBVEVfR0VUX0xPQ0soKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfU1RBVEVfR0VUX0xPQ0soZWxlbSkgICAgICAgICAgICAgICAoJmFtcDsoR1NUX0VMRU1FTlRfQ0FTVChlbGVtKS0mZ3Q7c3RhdGVfbG9jaykpCis8L3ByZT4KKzxwPgorR2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBzdGF0ZSBsb2NrIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtPC9jb2RlPjwvZW0+LgorVGhpcyBsb2NrIGlzIHVzZWQgYnkgdGhlIGNvcmUuICBJdCBpcyB0YWtlbiB3aGlsZSBnZXR0aW5nIG9yIHNldHRpbmcKK3RoZSBzdGF0ZSwgZHVyaW5nIHN0YXRlIGNoYW5nZXMsIGFuZCB3aGlsZSBmaW5hbGl6aW5nLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtU1RBVEUtR0VULUNPTkQ6Q0FQUyI+PC9hPjxoMz5HU1RfU1RBVEVfR0VUX0NPTkQoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfU1RBVEVfR0VUX0NPTkQoZWxlbSkgICAgICAgICAgICAgICAoR1NUX0VMRU1FTlRfQ0FTVChlbGVtKS0mZ3Q7c3RhdGVfY29uZCkKKzwvcHJlPgorPHA+CitHZXQgdGhlIGNvbmRpdGlvbmFsIHVzZWQgdG8gc2lnbmFsIHRoZSBjb21wbGV0aW9uIG9mIGEgc3RhdGUgY2hhbmdlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtRUxFTUVOVC1OQU1FOkNBUFMiPjwvYT48aDM+R1NUX0VMRU1FTlRfTkFNRSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9FTEVNRU5UX05BTUUoZWxlbSkgICAgICAgICAgICAgICAgICAoR1NUX09CSkVDVF9OQU1FKGVsZW0pKQorPC9wcmU+Cis8cD4KK0dldHMgdGhlIG5hbWUgb2YgdGhpcyBlbGVtZW50LiBVc2Ugb25seSBpbiBjb3JlIGFzIHRoaXMgaXMgbm90CitBQkktY29tcGF0aWJsZS4gT3RoZXJzIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1uYW1lIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X25hbWUoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9nZXRfbmFtZSgpPC9jb2RlPjwvYT4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIHF1ZXJ5PC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1FTEVNRU5ULVBBUkVOVDpDQVBTIj48L2E+PGgzPkdTVF9FTEVNRU5UX1BBUkVOVCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9FTEVNRU5UX1BBUkVOVChlbGVtKSAgICAgICAgICAgICAgICAoR1NUX0VMRU1FTlRfQ0FTVChHU1RfT0JKRUNUX1BBUkVOVChlbGVtKSkpCis8L3ByZT4KKzxwPgorR2V0IHRoZSBwYXJlbnQgb2JqZWN0IG9mIHRoaXMgZWxlbWVudC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIHF1ZXJ5PC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1FTEVNRU5ULUJVUzpDQVBTIj48L2E+PGgzPkdTVF9FTEVNRU5UX0JVUygpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9FTEVNRU5UX0JVUyhlbGVtKSAgICAgICAgICAgICAgICAgICAoR1NUX0VMRU1FTlRfQ0FTVChlbGVtKS0mZ3Q7YnVzKQorPC9wcmU+Cis8cD4KK0dldCB0aGUgbWVzc2FnZSBidXMgb2YgdGhpcyBlbGVtZW50LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gcXVlcnk8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUVMRU1FTlQtQ0xPQ0s6Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9DTE9DSygpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9FTEVNRU5UX0NMT0NLKGVsZW0pICAgICAgICAgICAgICAgICAoR1NUX0VMRU1FTlRfQ0FTVChlbGVtKS0mZ3Q7Y2xvY2spCis8L3ByZT4KKzxwPgorR2V0IHRoZSBjbG9jayBvZiB0aGlzIGVsZW1lbnQKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIHF1ZXJ5PC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1FTEVNRU5ULVBBRFM6Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9QQURTKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0VMRU1FTlRfUEFEUyhlbGVtKSAgICAgICAgICAgICAgICAgIChHU1RfRUxFTUVOVF9DQVNUKGVsZW0pLSZndDtwYWRzKQorPC9wcmU+Cis8cD4KK0dldCB0aGUgcGFkcyBvZiB0aGlzIGVsZW1lbnRzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gcXVlcnk8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUVMRU1FTlQtU1RBUlQtVElNRTpDQVBTIj48L2E+PGgzPkdTVF9FTEVNRU5UX1NUQVJUX1RJTUUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRUxFTUVOVF9TVEFSVF9USU1FKGVsZW0pICAgICAgICAgICAgKEdTVF9FTEVNRU5UX0NBU1QoZWxlbSktJmd0O3N0YXJ0X3RpbWUpCis8L3ByZT4KKzxwPgorVGhpcyBtYWNybyByZXR1cm5zIHRoZSBzdGFydF90aW1lIG9mIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbTwvY29kZT48L2VtPi4gVGhlIHN0YXJ0X3RpbWUgaXMgdGhlCitydW5uaW5nX3RpbWUgb2YgdGhlIHBpcGVsaW5lIHdoZW4gdGhlIGVsZW1lbnQgd2VudCB0byBQQVVTRUQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byByZXR1cm4gdGhlIHN0YXJ0IHRpbWUgZm9yLjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI0PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtRUxFTUVOVC1FUlJPUjpDQVBTIj48L2E+PGgzPkdTVF9FTEVNRU5UX0VSUk9SKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IoZWwsIGRvbWFpbiwgY29kZSwgdGV4dCwgZGVidWcpPC9wcmU+Cis8cD4KK1V0aWxpdHkgZnVuY3Rpb24gdGhhdCBlbGVtZW50cyBjYW4gdXNlIGluIGNhc2UgdGhleSBlbmNvdW50ZXJlZCBhIGZhdGFsCitkYXRhIHByb2Nlc3NpbmcgZXJyb3IuIFRoZSBwaXBlbGluZSB3aWxsIHBvc3QgYW4gZXJyb3IgbWVzc2FnZSBhbmQgdGhlCithcHBsaWNhdGlvbiB3aWxsIGJlIHJlcXVlc3RlZCB0byBzdG9wIGZ1cnRoZXIgbWVkaWEgcHJvY2Vzc2luZy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZWxlbWVudCB0aGF0IGdlbmVyYXRlcyB0aGUgZXJyb3I8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRvbWFpbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5saWtlIENPUkUsIExJQlJBUlksIFJFU09VUkNFIG9yIFNUUkVBTSAoc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwiIHRpdGxlPSJHc3RHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc3RyZWFtZXItR3N0R0Vycm9yPC9zcGFuPjwvYT4pPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb2RlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmVycm9yIGNvZGUgZGVmaW5lZCBmb3IgdGhhdCBkb21haW4gKHNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sIiB0aXRsZT0iR3N0R0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+Z3N0cmVhbWVyLUdzdEdFcnJvcjwvc3Bhbj48L2E+KTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGV4dDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbWVzc2FnZSB0byBkaXNwbGF5IChmb3JtYXQgc3RyaW5nIGFuZCBhcmdzIGVuY2xvc2VkIGluCitwYXJlbnRoZXNlcyk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlYnVnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIG1lc3NhZ2UgKGZvcm1hdCBzdHJpbmcgYW5kIGFyZ3MKK2VuY2xvc2VkIGluIHBhcmVudGhlc2VzKTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1FTEVNRU5ULVdBUk5JTkc6Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9XQVJOSU5HKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX0VMRU1FTlRfV0FSTklORyhlbCwgZG9tYWluLCBjb2RlLCB0ZXh0LCBkZWJ1Zyk8L3ByZT4KKzxwPgorVXRpbGl0eSBmdW5jdGlvbiB0aGF0IGVsZW1lbnRzIGNhbiB1c2UgaW4gY2FzZSB0aGV5IGVuY291bnRlcmVkIGEgbm9uLWZhdGFsCitkYXRhIHByb2Nlc3NpbmcgcHJvYmxlbS4gVGhlIHBpcGVsaW5lIHdpbGwgcG9zdCBhIHdhcm5pbmcgbWVzc2FnZSBhbmQgdGhlCithcHBsaWNhdGlvbiB3aWxsIGJlIGluZm9ybWVkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBlbGVtZW50IHRoYXQgZ2VuZXJhdGVzIHRoZSB3YXJuaW5nPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kb21haW48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bGlrZSBDT1JFLCBMSUJSQVJZLCBSRVNPVVJDRSBvciBTVFJFQU0gKHNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sIiB0aXRsZT0iR3N0R0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+Z3N0cmVhbWVyLUdzdEdFcnJvcjwvc3Bhbj48L2E+KTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29kZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5lcnJvciBjb2RlIGRlZmluZWQgZm9yIHRoYXQgZG9tYWluIChzZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCIgdGl0bGU9IkdzdEdFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPmdzdHJlYW1lci1Hc3RHRXJyb3I8L3NwYW4+PC9hPik8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRleHQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG1lc3NhZ2UgdG8gZGlzcGxheSAoZm9ybWF0IHN0cmluZyBhbmQgYXJncyBlbmNsb3NlZCBpbgorcGFyZW50aGVzZXMpPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZWJ1ZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5kZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBtZXNzYWdlIChmb3JtYXQgc3RyaW5nIGFuZCBhcmdzCitlbmNsb3NlZCBpbiBwYXJlbnRoZXNlcyk8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtRUxFTUVOVC1JTkZPOkNBUFMiPjwvYT48aDM+R1NUX0VMRU1FTlRfSU5GTygpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9FTEVNRU5UX0lORk8oZWwsIGRvbWFpbiwgY29kZSwgdGV4dCwgZGVidWcpPC9wcmU+Cis8cD4KK1V0aWxpdHkgZnVuY3Rpb24gdGhhdCBlbGVtZW50cyBjYW4gdXNlIGluIGNhc2UgdGhleSB3YW50IHRvIGluZm9ybQordGhlIGFwcGxpY2F0aW9uIG9mIHNvbWV0aGluZyBub3Rld29ydGh5IHRoYXQgaXMgbm90IGFuIGVycm9yLgorVGhlIHBpcGVsaW5lIHdpbGwgcG9zdCBhIGluZm8gbWVzc2FnZSBhbmQgdGhlCithcHBsaWNhdGlvbiB3aWxsIGJlIGluZm9ybWVkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBlbGVtZW50IHRoYXQgZ2VuZXJhdGVzIHRoZSBpbmZvcm1hdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZG9tYWluPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmxpa2UgQ09SRSwgTElCUkFSWSwgUkVTT1VSQ0Ugb3IgU1RSRUFNIChzZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCIgdGl0bGU9IkdzdEdFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPmdzdHJlYW1lci1Hc3RHRXJyb3I8L3NwYW4+PC9hPik8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvZGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZXJyb3IgY29kZSBkZWZpbmVkIGZvciB0aGF0IGRvbWFpbiAoc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwiIHRpdGxlPSJHc3RHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc3RyZWFtZXItR3N0R0Vycm9yPC9zcGFuPjwvYT4pPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50ZXh0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtZXNzYWdlIHRvIGRpc3BsYXkgKGZvcm1hdCBzdHJpbmcgYW5kIGFyZ3MgZW5jbG9zZWQgaW4KK3BhcmVudGhlc2VzKTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVidWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZGVidWdnaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgbWVzc2FnZSAoZm9ybWF0IHN0cmluZyBhbmQgYXJncworZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMpPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUVMRU1FTlQtSVMtTE9DS0VELVNUQVRFOkNBUFMiPjwvYT48aDM+R1NUX0VMRU1FTlRfSVNfTE9DS0VEX1NUQVRFKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0VMRU1FTlRfSVNfTE9DS0VEX1NUQVRFKGVsZW0pICAgICAgICAoR1NUX09CSkVDVF9GTEFHX0lTX1NFVChlbGVtLEdTVF9FTEVNRU5UX0xPQ0tFRF9TVEFURSkpCis8L3ByZT4KKzxwPgorQ2hlY2sgaWYgdGhlIGVsZW1lbnQgaXMgaW4gdGhlIGxvY2tlZCBzdGF0ZSBhbmQgdGhlcmVmb3JlIHdpbGwgaWdub3JlIHN0YXRlCitjaGFuZ2VzIGZyb20gaXRzIHBhcmVudCBvYmplY3QuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byBxdWVyeTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtRUxFTUVOVC1NRVRBREFUQS1BVVRIT1I6Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9NRVRBREFUQV9BVVRIT1I8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0VMRU1FTlRfTUVUQURBVEFfQVVUSE9SICAgICAgICAiYXV0aG9yIgorPC9wcmU+Cis8cD4KK05hbWUgYW5kIGNvbnRhY3QgZGV0YWlscyBvZiB0aGUgYXV0aG9yKHMpLiBVc2UgXG4gdG8gc2VwYXJhdGUKK211bHRpcGxlIGF1dGhvciBkZXRhaWxzLgorRS5nOiAiSm9lIEJsb2dncyAmbHQ7am9lLmJsb2dzIGF0IGZvby5jb20mZ3Q7IgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtRUxFTUVOVC1NRVRBREFUQS1ERVNDUklQVElPTjpDQVBTIj48L2E+PGgzPkdTVF9FTEVNRU5UX01FVEFEQVRBX0RFU0NSSVBUSU9OPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9FTEVNRU5UX01FVEFEQVRBX0RFU0NSSVBUSU9OICAgImRlc2NyaXB0aW9uIgorPC9wcmU+Cis8cD4KK1NlbnRlbmNlIGRlc2NyaWJpbmcgdGhlIHB1cnBvc2Ugb2YgdGhlIGVsZW1lbnQuCitFLmc6ICJXcml0ZSBzdHJlYW0gdG8gYSBmaWxlIgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtRUxFTUVOVC1NRVRBREFUQS1ET0MtVVJJOkNBUFMiPjwvYT48aDM+R1NUX0VMRU1FTlRfTUVUQURBVEFfRE9DX1VSSTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRUxFTUVOVF9NRVRBREFUQV9ET0NfVVJJICAgICAgICJkb2MtdXJpIgorPC9wcmU+Cis8cD4KK1NldCB1cmkgcG9pbnRpbmcgdG8gdXNlciBkb2N1bWVudGF0aW9uLiBBcHBsaWNhdGlvbnMgY2FuIHVzZSB0aGlzIHRvIHNob3cKK2hlbHAgZm9yIGUuZy4gZWZmZWN0cyB0byB1c2Vycy4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUVMRU1FTlQtTUVUQURBVEEtSUNPTi1OQU1FOkNBUFMiPjwvYT48aDM+R1NUX0VMRU1FTlRfTUVUQURBVEFfSUNPTl9OQU1FPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9FTEVNRU5UX01FVEFEQVRBX0lDT05fTkFNRSAgICAgImljb24tbmFtZSIKKzwvcHJlPgorPHA+CitFbGVtZW50cyB0aGF0IGJyaWRnZSB0byBjZXJ0YWluIG90aGVyIHByb2R1Y3RzIGNhbiBpbmNsdWRlIGFuIGljb24gb2YgdGhhdAordXNlZCBwcm9kdWN0LiBBcHBsaWNhdGlvbiBjYW4gc2hvdyB0aGUgaWNvbiBpbiBtZW51cy9zZWxlY3RvcnMgdG8gaGVscAoraWRlbnRpZnlpbmcgc3BlY2lmaWMgZWxlbWVudHMuCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1FTEVNRU5ULU1FVEFEQVRBLUtMQVNTOkNBUFMiPjwvYT48aDM+R1NUX0VMRU1FTlRfTUVUQURBVEFfS0xBU1M8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0VMRU1FTlRfTUVUQURBVEFfS0xBU1MgICAgICAgICAia2xhc3MiCis8L3ByZT4KKzxwPgorU3RyaW5nIGRlc2NyaWJpbmcgdGhlIHR5cGUgb2YgZWxlbWVudCwgYXMgYW4gdW5vcmRlcmVkIGxpc3QKK3NlcGFyYXRlZCB3aXRoIHNsYXNoZXMgKCcvJykuIFNlZSBkcmFmdC1rbGFzcy50eHQgb2YgdGhlIGRlc2lnbiBkb2NzCitmb3IgbW9yZSBkZXRhaWxzIGFuZCBjb21tb24gdHlwZXMuIEUuZzogIlNpbmsvRmlsZSIKKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUVMRU1FTlQtTUVUQURBVEEtTE9OR05BTUU6Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9NRVRBREFUQV9MT05HTkFNRTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRUxFTUVOVF9NRVRBREFUQV9MT05HTkFNRSAgICAgICJsb25nLW5hbWUiCis8L3ByZT4KKzxwPgorVGhlIGxvbmcgRW5nbGlzaCBuYW1lIG9mIHRoZSBlbGVtZW50LiBFLmcuICJGaWxlIFNpbmsiCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LWNsYXNzLWFkZC1wYWQtdGVtcGxhdGUiPjwvYT48aDM+Z3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudENsYXNzIiB0aXRsZT0ic3RydWN0IEdzdEVsZW1lbnRDbGFzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRDbGFzczwvc3Bhbj48L2E+ICprbGFzczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPiAqdGVtcGw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBZGRzIGEgcGFkdGVtcGxhdGUgdG8gYW4gZWxlbWVudCBjbGFzcy4gVGhpcyBpcyBtYWlubHkgdXNlZCBpbiB0aGUgX2NsYXNzX2luaXQKK2Z1bmN0aW9ucyBvZiBjbGFzc2VzLiBJZiBhIHBhZCB0ZW1wbGF0ZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW4gYWxyZWFkeQorZXhpc3Rpbmcgb25lIGlzIGFkZGVkIHRoZSBvbGQgb25lIGlzIHJlcGxhY2VkIGJ5IHRoZSBuZXcgb25lLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmtsYXNzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnRDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RFbGVtZW50Q2xhc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50Q2xhc3M8L3NwYW4+PC9hPiB0byBhZGQgdGhlIHBhZCB0ZW1wbGF0ZSB0by48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRlbXBsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4gdG8gYWRkIHRvIHRoZSBlbGVtZW50IGNsYXNzLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtY2xhc3MtZ2V0LXBhZC10ZW1wbGF0ZSI+PC9hPjxoMz5nc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKiAgICBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudENsYXNzIiB0aXRsZT0ic3RydWN0IEdzdEVsZW1lbnRDbGFzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRDbGFzczwvc3Bhbj48L2E+ICplbGVtZW50X2NsYXNzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZXRyaWV2ZXMgYSBwYWR0ZW1wbGF0ZSBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50X2NsYXNzPC9jb2RlPjwvZW0+IHdpdGggdGhlIGdpdmVuIG5hbWUuCis8L3A+Cis8ZGl2IGNsYXNzPSJub3RlIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+Cis8aDMgY2xhc3M9InRpdGxlIj5Ob3RlPC9oMz5JZiB5b3UgdXNlIHRoaXMgZnVuY3Rpb24gaW4gdGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dJbnN0YW5jZUluaXRGdW5jIj48c3BhbiBjbGFzcz0idHlwZSI+R0luc3RhbmNlSW5pdEZ1bmM8L3NwYW4+PC9hPiBvZiBhbiBvYmplY3QgY2xhc3MKK3RoYXQgaGFzIHN1YmNsYXNzZXMsIG1ha2Ugc3VyZSB0byBwYXNzIHRoZSBnX2NsYXNzIHBhcmFtZXRlciBvZiB0aGUKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dJbnN0YW5jZUluaXRGdW5jIj48c3BhbiBjbGFzcz0idHlwZSI+R0luc3RhbmNlSW5pdEZ1bmM8L3NwYW4+PC9hPiBoZXJlLjwvZGl2PgorPHA+Cis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudF9jbGFzczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudENsYXNzIiB0aXRsZT0ic3RydWN0IEdzdEVsZW1lbnRDbGFzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRDbGFzczwvc3Bhbj48L2E+IHRvIGdldCB0aGUgcGFkIHRlbXBsYXRlIG9mLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmFtZSBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4gdG8gZ2V0LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPiB3aXRoIHRoZSBnaXZlbiBuYW1lLCBvciA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPgoraWYgbm9uZSB3YXMgZm91bmQuIE5vIHVucmVmZXJlbmNpbmcgaXMgbmVjZXNzYXJ5LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtY2xhc3MtZ2V0LXBhZC10ZW1wbGF0ZS1saXN0Ij48L2E+PGgzPmdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGVfbGlzdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPiAqICAgICAgICAgICAgIGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGVfbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudENsYXNzIiB0aXRsZT0ic3RydWN0IEdzdEVsZW1lbnRDbGFzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRDbGFzczwvc3Bhbj48L2E+ICplbGVtZW50X2NsYXNzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0cmlldmVzIGEgbGlzdCBvZiB0aGUgcGFkIHRlbXBsYXRlcyBhc3NvY2lhdGVkIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnRfY2xhc3M8L2NvZGU+PC9lbT4uIFRoZQorbGlzdCBtdXN0IG5vdCBiZSBtb2RpZmllZCBieSB0aGUgY2FsbGluZyBjb2RlLgorPC9wPgorPGRpdiBjbGFzcz0ibm90ZSIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPgorPGgzIGNsYXNzPSJ0aXRsZSI+Tm90ZTwvaDM+SWYgeW91IHVzZSB0aGlzIGZ1bmN0aW9uIGluIHRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHSW5zdGFuY2VJbml0RnVuYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdJbnN0YW5jZUluaXRGdW5jPC9zcGFuPjwvYT4gb2YgYW4gb2JqZWN0IGNsYXNzCit0aGF0IGhhcyBzdWJjbGFzc2VzLCBtYWtlIHN1cmUgdG8gcGFzcyB0aGUgZ19jbGFzcyBwYXJhbWV0ZXIgb2YgdGhlCis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHSW5zdGFuY2VJbml0RnVuYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdJbnN0YW5jZUluaXRGdW5jPC9zcGFuPjwvYT4gaGVyZS48L2Rpdj4KKzxwPgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnRfY2xhc3M8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnRDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RFbGVtZW50Q2xhc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50Q2xhc3M8L3NwYW4+PC9hPiB0byBnZXQgcGFkIHRlbXBsYXRlcyBvZi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+IG9mCitwYWQgdGVtcGxhdGVzLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IEdzdC5QYWRUZW1wbGF0ZV08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZWxlbWVudC1jbGFzcy1pbnN0YWxsLXN0ZC1wcm9wcyI+PC9hPjxoMz5nc3RfZWxlbWVudF9jbGFzc19pbnN0YWxsX3N0ZF9wcm9wcyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9jbGFzc19pbnN0YWxsX3N0ZF9wcm9wcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudENsYXNzIiB0aXRsZT0ic3RydWN0IEdzdEVsZW1lbnRDbGFzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRDbGFzczwvc3Bhbj48L2E+ICprbGFzczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaXJzdF9uYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0FkZHMgYSBsaXN0IG9mIHN0YW5kYXJkaXplZCBwcm9wZXJ0aWVzIHdpdGggdHlwZXMgdG8gdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5rbGFzczwvY29kZT48L2VtPi4KK3RoZSBpZCBpcyBmb3IgdGhlIHByb3BlcnR5IHN3aXRjaCBpbiB5b3VyIGdldF9wcm9wIG1ldGhvZCwgYW5kCit0aGUgZmxhZ3MgZGV0ZXJtaW5lIHJlYWRhYmlsaXR5IC8gd3JpdGVhYmlsaXR5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmtsYXNzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnRDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RFbGVtZW50Q2xhc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50Q2xhc3M8L3NwYW4+PC9hPiB0byBhZGQgdGhlIHByb3BlcnRpZXMgdG8uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maXJzdF9uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuYW1lIG9mIHRoZSBmaXJzdCBwcm9wZXJ0eS4KK2luIGEgTlVMTCB0ZXJtaW5hdGVkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGlkIGFuZCBmbGFncyBvZiB0aGUgZmlyc3QgcHJvcGVydHksIGZvbGxvd2VkIGJ5CitmdXJ0aGVyICduYW1lJywgJ2lkJywgJ2ZsYWdzJyB0cmlwbGV0cyBhbmQgdGVybWluYXRlZCBieSBOVUxMLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LWNsYXNzLXNldC1tZXRhZGF0YSI+PC9hPjxoMz5nc3RfZWxlbWVudF9jbGFzc19zZXRfbWV0YWRhdGEgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X21ldGFkYXRhICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnRDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RFbGVtZW50Q2xhc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50Q2xhc3M8L3NwYW4+PC9hPiAqa2xhc3M8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbG9uZ25hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqY2xhc3NpZmljYXRpb248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZGVzY3JpcHRpb248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqYXV0aG9yPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0cyB0aGUgZGV0YWlsZWQgaW5mb3JtYXRpb24gZm9yIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50Q2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0RWxlbWVudENsYXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudENsYXNzPC9zcGFuPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJub3RlIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+Cis8aDMgY2xhc3M9InRpdGxlIj5Ob3RlPC9oMz5UaGlzIGZ1bmN0aW9uIGlzIGZvciB1c2UgaW4gX2NsYXNzX2luaXQgZnVuY3Rpb25zIG9ubHkuPC9kaXY+Cis8cD4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5rbGFzczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5jbGFzcyB0byBzZXQgbWV0YWRhdGEgZm9yPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sb25nbmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgbG9uZyBFbmdsaXNoIG5hbWUgb2YgdGhlIGVsZW1lbnQuIEUuZy4gIkZpbGUgU2luayI8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsYXNzaWZpY2F0aW9uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlN0cmluZyBkZXNjcmliaW5nIHRoZSB0eXBlIG9mIGVsZW1lbnQsIGFzIGFuIHVub3JkZXJlZCBsaXN0CitzZXBhcmF0ZWQgd2l0aCBzbGFzaGVzICgnLycpLiBTZWUgZHJhZnQta2xhc3MudHh0IG9mIHRoZSBkZXNpZ24gZG9jcworZm9yIG1vcmUgZGV0YWlscyBhbmQgY29tbW9uIHR5cGVzLiBFLmc6ICJTaW5rL0ZpbGUiPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXNjcmlwdGlvbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5TZW50ZW5jZSBkZXNjcmliaW5nIHRoZSBwdXJwb3NlIG9mIHRoZSBlbGVtZW50LgorRS5nOiAiV3JpdGUgc3RyZWFtIHRvIGEgZmlsZSI8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmF1dGhvcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5OYW1lIGFuZCBjb250YWN0IGRldGFpbHMgb2YgdGhlIGF1dGhvcihzKS4gVXNlIFxuIHRvIHNlcGFyYXRlCittdWx0aXBsZSBhdXRob3IgbWV0YWRhdGEuIEUuZzogIkpvZSBCbG9nZ3MgJmx0O2pvZS5ibG9ncyBhdCBmb28uY29tJmd0OyI8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZWxlbWVudC1jbGFzcy1hZGQtbWV0YWRhdGEiPjwvYT48aDM+Z3N0X2VsZW1lbnRfY2xhc3NfYWRkX21ldGFkYXRhICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9tZXRhZGF0YSAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50Q2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0RWxlbWVudENsYXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudENsYXNzPC9zcGFuPjwvYT4gKmtsYXNzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmtleTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+a2V5PC9jb2RlPjwvZW0+IHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+IGFzIG1ldGFkYXRhIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5rbGFzczwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5rbGFzczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5jbGFzcyB0byBzZXQgbWV0YWRhdGEgZm9yPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5rZXk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGtleSB0byBzZXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB2YWx1ZSB0byBzZXQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZWxlbWVudC1hZGQtcGFkIj48L2E+PGgzPmdzdF9lbGVtZW50X2FkZF9wYWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQWRkcyBhIHBhZCAobGluayBwb2ludCkgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT4uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4ncyBwYXJlbnQgd2lsbCBiZSBzZXQgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT47CitzZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3Qtc2V0LXBhcmVudCIgdGl0bGU9ImdzdF9vYmplY3Rfc2V0X3BhcmVudCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X3NldF9wYXJlbnQoKTwvY29kZT48L2E+IGZvciByZWZjb3VudGluZyBpbmZvcm1hdGlvbi4KKzwvcD4KKzxwPgorUGFkcyBhcmUgbm90IGF1dG9tYXRpY2FsbHkgYWN0aXZhdGVkIHNvIGVsZW1lbnRzIHNob3VsZCBwZXJmb3JtIHRoZSBuZWVkZWQKK3N0ZXBzIHRvIGFjdGl2YXRlIHRoZSBwYWQgaW4gY2FzZSB0aGlzIHBhZCBpcyBhZGRlZCBpbiB0aGUgUEFVU0VEIG9yIFBMQVlJTkcKK3N0YXRlLiBTZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWFjdGl2ZSIgdGl0bGU9ImdzdF9wYWRfc2V0X2FjdGl2ZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3NldF9hY3RpdmUoKTwvY29kZT48L2E+IGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGFjdGl2YXRpbmcgcGFkcy4KKzwvcD4KKzxwPgorVGhlIHBhZCBhbmQgdGhlIGVsZW1lbnQgc2hvdWxkIGJlIHVubG9ja2VkIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIHdpbGwgZW1pdCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXBhZC1hZGRlZCIgdGl0bGU9J1RoZSAicGFkLWFkZGVkIiBzaWduYWwnPjxzcGFuIGNsYXNzPSJ0eXBlIj4icGFkLWFkZGVkIjwvc3Bhbj48L2E+IHNpZ25hbCBvbiB0aGUgZWxlbWVudC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gYWRkIHRoZSBwYWQgdG8uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGFkZCB0byB0aGUgZWxlbWVudC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHBhZCBjb3VsZCBiZSBhZGRlZC4gVGhpcyBmdW5jdGlvbiBjYW4gZmFpbCB3aGVuCithIHBhZCB3aXRoIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdGVkIG9yIHRoZSBwYWQgYWxyZWFkeSBoYWQgYW5vdGhlcgorcGFyZW50LgorTVQgc2FmZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZWxlbWVudC1jcmVhdGUtYWxsLXBhZHMiPjwvYT48aDM+Z3N0X2VsZW1lbnRfY3JlYXRlX2FsbF9wYWRzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2NyZWF0ZV9hbGxfcGFkcyAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGVzIGEgcGFkIGZvciBlYWNoIHBhZCB0ZW1wbGF0ZSB0aGF0IGlzIGFsd2F5cyBhdmFpbGFibGUuCitUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZnVsIGR1cmluZyBvYmplY3QgaW5pdGlhbGl6YXRpb24gb2YKK3N1YmNsYXNzZXMgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byBjcmVhdGUgcGFkcyBmb3IuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZ2V0LWNvbXBhdGlibGUtcGFkIj48L2E+PGgzPmdzdF9lbGVtZW50X2dldF9jb21wYXRpYmxlX3BhZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+ICogICAgICAgICAgICBnc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWQgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorTG9va3MgZm9yIGFuIHVubGlua2VkIHBhZCB0byB3aGljaCB0aGUgZ2l2ZW4gcGFkIGNhbiBsaW5rLiBJdCBpcyBub3QKK2d1YXJhbnRlZWQgdGhhdCBsaW5raW5nIHRoZSBwYWRzIHdpbGwgd29yaywgdGhvdWdoIGl0IHNob3VsZCB3b3JrIGluIG1vc3QKK2Nhc2VzLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIHdpbGwgZmlyc3QgYXR0ZW1wdCB0byBmaW5kIGEgY29tcGF0aWJsZSB1bmxpbmtlZCBBTFdBWVMgcGFkLAorYW5kIGlmIG5vbmUgY2FuIGJlIGZvdW5kLCBpdCB3aWxsIHJlcXVlc3QgYSBjb21wYXRpYmxlIFJFUVVFU1QgcGFkIGJ5IGxvb2tpbmcKK2F0IHRoZSB0ZW1wbGF0ZXMgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IGluIHdoaWNoIHRoZSBwYWQgc2hvdWxkIGJlIGZvdW5kLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGZpbmQgYSBjb21wYXRpYmxlIG9uZSBmb3IuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byB1c2UgYXMgYSBmaWx0ZXIuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIHdoaWNoIGEgbGluayBjYW4gYmUgbWFkZSwgb3IgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4KK2lmIG9uZSBjYW5ub3QgYmUgZm91bmQuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucmVmIiB0aXRsZT0iZ3N0X29iamVjdF91bnJlZiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X3VucmVmKCk8L2NvZGU+PC9hPiBhZnRlciB1c2FnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LWdldC1jb21wYXRpYmxlLXBhZC10ZW1wbGF0ZSI+PC9hPjxoMz5nc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWRfdGVtcGxhdGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPiAqICAgIGdzdF9lbGVtZW50X2dldF9jb21wYXRpYmxlX3BhZF90ZW1wbGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+ICpjb21wYXR0ZW1wbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JldHJpZXZlcyBhIHBhZCB0ZW1wbGF0ZSBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50PC9jb2RlPjwvZW0+IHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb21wYXR0ZW1wbDwvY29kZT48L2VtPi4KK1BhZHMgZnJvbSBjb21wYXRpYmxlIHRlbXBsYXRlcyBjYW4gYmUgbGlua2VkIHRvZ2V0aGVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byBnZXQgYSBjb21wYXRpYmxlIHBhZCB0ZW1wbGF0ZSBmb3IuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbXBhdHRlbXBsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPiB0byBmaW5kIGEgY29tcGF0aWJsZQordGVtcGxhdGUgZm9yLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBjb21wYXRpYmxlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+LCBvciBOVUxMIGlmIG5vbmUKK3dhcyBmb3VuZC4gTm8gdW5yZWZlcmVuY2luZyBpcyBuZWNlc3NhcnkuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZWxlbWVudC1nZXQtcmVxdWVzdC1wYWQiPjwvYT48aDM+Z3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkPC9zcGFuPjwvYT4gKiAgICAgICAgICAgIGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JldHJpZXZlcyBhIHBhZCBmcm9tIHRoZSBlbGVtZW50IGJ5IG5hbWUgKGUuZy4gInNyY18lZCIpLiBUaGlzIHZlcnNpb24gb25seQorcmV0cmlldmVzIHJlcXVlc3QgcGFkcy4gVGhlIHBhZCBzaG91bGQgYmUgcmVsZWFzZWQgd2l0aAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1yZWxlYXNlLXJlcXVlc3QtcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkKCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxwPgorVGhpcyBtZXRob2QgaXMgc2xvdyBhbmQgd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuIE5ldyBjb2RlIHNob3VsZAordXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcmVxdWVzdC1wYWQiIHRpdGxlPSJnc3RfZWxlbWVudF9yZXF1ZXN0X3BhZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9yZXF1ZXN0X3BhZCgpPC9jb2RlPjwvYT4gd2l0aCB0aGUgcmVxdWVzdGVkIHRlbXBsYXRlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byBmaW5kIGEgcmVxdWVzdCBwYWQgb2YuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuYW1lIG9mIHRoZSByZXF1ZXN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIHJldHJpZXZlLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnJlcXVlc3RlZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBpZiBmb3VuZCwgb3RoZXJ3aXNlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LgorUmVsZWFzZSBhZnRlciB1c2FnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LWdldC1zdGF0aWMtcGFkIj48L2E+PGgzPmdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkPC9zcGFuPjwvYT4gKiAgICAgICAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JldHJpZXZlcyBhIHBhZCBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50PC9jb2RlPjwvZW0+IGJ5IG5hbWUuIFRoaXMgdmVyc2lvbiBvbmx5IHJldHJpZXZlcworYWxyZWFkeS1leGlzdGluZyAoaS5lLiAnc3RhdGljJykgcGFkcy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gZmluZCBhIHN0YXRpYyBwYWQgb2YuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuYW1lIG9mIHRoZSBzdGF0aWMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gcmV0cmlldmUuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHJlcXVlc3RlZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBpZiBmb3VuZCwgb3RoZXJ3aXNlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LgordW5yZWYgYWZ0ZXIgdXNhZ2UuCitNVCBzYWZlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtcmVxdWVzdC1wYWQiPjwvYT48aDM+Z3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqICAgICAgICAgICAgZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPiAqdGVtcGw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZXRyaWV2ZXMgYSByZXF1ZXN0IHBhZCBmcm9tIHRoZSBlbGVtZW50IGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQgdGVtcGxhdGUuCitQYWQgdGVtcGxhdGVzIGNhbiBiZSBsb29rZWQgdXAgdXNpbmcKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktZ2V0LXN0YXRpYy1wYWQtdGVtcGxhdGVzIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfc3RhdGljX3BhZF90ZW1wbGF0ZXMgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfc3RhdGljX3BhZF90ZW1wbGF0ZXMoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitJZiB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4gYXJlIHNwZWNpZmllZCBhbmQgdGhlIGVsZW1lbnQgaW1wbGVtZW50cyB0aGV3IG5ldworcmVxdWVzdF9uZXdfcGFkX2Z1bGwgdmlydHVhbCBtZXRob2QsIHRoZSBlbGVtZW50IHdpbGwgdXNlIHRoZW0gdG8gc2VsZWN0Cit3aGljaCBwYWQgdG8gY3JlYXRlLgorPC9wPgorPHA+CitUaGUgcGFkIHNob3VsZCBiZSByZWxlYXNlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcmVsZWFzZS1yZXF1ZXN0LXBhZCIgdGl0bGU9ImdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCgpPC9jb2RlPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIGZpbmQgYSByZXF1ZXN0IHBhZCBvZi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRlbXBsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4gb2Ygd2hpY2ggd2Ugd2FudCBhIHBhZCBvZi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5hbWUgb2YgdGhlIHJlcXVlc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4KK3RvIHJldHJpZXZlLiBDYW4gYmUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY2FwcyBvZiB0aGUgcGFkIHdlIHdhbnQgdG8KK3JlcXVlc3QuIENhbiBiZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cmVxdWVzdGVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IGlmIGZvdW5kLCBvdGhlcndpc2UgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uCitSZWxlYXNlIGFmdGVyIHVzYWdlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtbm8tbW9yZS1wYWRzIj48L2E+PGgzPmdzdF9lbGVtZW50X25vX21vcmVfcGFkcyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9ub19tb3JlX3BhZHMgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVXNlIHRoaXMgZnVuY3Rpb24gdG8gc2lnbmFsIHRoYXQgdGhlIGVsZW1lbnQgZG9lcyBub3QgZXhwZWN0IGFueSBtb3JlIHBhZHMKK3RvIHNob3cgdXAgaW4gdGhlIGN1cnJlbnQgcGlwZWxpbmUuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlcgorcGFkcyBoYXZlIGJlZW4gYWRkZWQgYnkgdGhlIGVsZW1lbnQgaXRzZWxmLiBFbGVtZW50cyB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1QQUQtU09NRVRJTUVTOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfUEFEX1NPTUVUSU1FUzwvc3Bhbj48L2E+CitwYWQgdGVtcGxhdGVzIHVzZSB0aGlzIGluIGNvbWJpbmF0aW9uIHdpdGggYXV0b3BsdWdnZXJzIHRvIGZpZ3VyZSBvdXQgdGhhdAordGhlIGVsZW1lbnQgaXMgZG9uZSBpbml0aWFsaXppbmcgaXRzIHBhZHMuCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gZW1pdHMgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1uby1tb3JlLXBhZHMiIHRpdGxlPSdUaGUgIm5vLW1vcmUtcGFkcyIgc2lnbmFsJz48c3BhbiBjbGFzcz0idHlwZSI+Im5vLW1vcmUtcGFkcyI8L3NwYW4+PC9hPiBzaWduYWwuCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LXJlbGVhc2UtcmVxdWVzdC1wYWQiPjwvYT48aDM+Z3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitNYWtlcyB0aGUgZWxlbWVudCBmcmVlIHRoZSBwcmV2aW91c2x5IHJlcXVlc3RlZCBwYWQgYXMgb2J0YWluZWQKK3dpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtcmVxdWVzdC1wYWQiIHRpdGxlPSJnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkKCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxwPgorVGhpcyBkb2VzIG5vdCB1bnJlZiB0aGUgcGFkLiBJZiB0aGUgcGFkIHdhcyBjcmVhdGVkIGJ5IHVzaW5nCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1yZXF1ZXN0LXBhZCIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQoKTwvY29kZT48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXJlbGVhc2UtcmVxdWVzdC1wYWQiIHRpdGxlPSJnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQoKTwvY29kZT48L2E+IG5lZWRzIHRvIGJlCitmb2xsb3dlZCBieSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC11bnJlZiIgdGl0bGU9ImdzdF9vYmplY3RfdW5yZWYgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X29iamVjdF91bnJlZigpPC9jb2RlPjwvYT4gdG8gZnJlZSB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPi4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gcmVsZWFzZSB0aGUgcmVxdWVzdCBwYWQgb2YuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIHJlbGVhc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtcmVtb3ZlLXBhZCI+PC9hPjxoMz5nc3RfZWxlbWVudF9yZW1vdmVfcGFkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlbW92ZXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPiBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50PC9jb2RlPjwvZW0+LiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+IHdpbGwgYmUgZGVzdHJveWVkIGlmIGl0IGhhcyBub3QgYmVlbgorcmVmZXJlbmNlZCBlbHNld2hlcmUgdXNpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtdW5wYXJlbnQiIHRpdGxlPSJnc3Rfb2JqZWN0X3VucGFyZW50ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9vYmplY3RfdW5wYXJlbnQoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgcGx1Z2luIGRldmVsb3BlcnMgYW5kIHNob3VsZCBub3QgYmUgdXNlZAorYnkgYXBwbGljYXRpb25zLiBQYWRzIHRoYXQgd2VyZSBkeW5hbWljYWxseSByZXF1ZXN0ZWQgZnJvbSBlbGVtZW50cword2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1yZXF1ZXN0LXBhZCIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQoKTwvY29kZT48L2E+IHNob3VsZCBiZSByZWxlYXNlZCB3aXRoIHRoZQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1yZWxlYXNlLXJlcXVlc3QtcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkKCk8L2NvZGU+PC9hPiBmdW5jdGlvbiBpbnN0ZWFkLgorPC9wPgorPHA+CitQYWRzIGFyZSBub3QgYXV0b21hdGljYWxseSBkZWFjdGl2YXRlZCBzbyBlbGVtZW50cyBzaG91bGQgcGVyZm9ybSB0aGUgbmVlZGVkCitzdGVwcyB0byBkZWFjdGl2YXRlIHRoZSBwYWQgaW4gY2FzZSB0aGlzIHBhZCBpcyByZW1vdmVkIGluIHRoZSBQQVVTRUQgb3IKK1BMQVlJTkcgc3RhdGUuIFNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtYWN0aXZlIiB0aXRsZT0iZ3N0X3BhZF9zZXRfYWN0aXZlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfc2V0X2FjdGl2ZSgpPC9jb2RlPjwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQKK2RlYWN0aXZhdGluZyBwYWRzLgorPC9wPgorPHA+CitUaGUgcGFkIGFuZCB0aGUgZWxlbWVudCBzaG91bGQgYmUgdW5sb2NrZWQgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gd2lsbCBlbWl0IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtcGFkLXJlbW92ZWQiIHRpdGxlPSdUaGUgInBhZC1yZW1vdmVkIiBzaWduYWwnPjxzcGFuIGNsYXNzPSJ0eXBlIj4icGFkLXJlbW92ZWQiPC9zcGFuPjwvYT4gc2lnbmFsIG9uIHRoZSBlbGVtZW50LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byByZW1vdmUgcGFkIGZyb20uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIHJlbW92ZSBmcm9tIHRoZSBlbGVtZW50LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgcGFkIGNvdWxkIGJlIHJlbW92ZWQuIENhbiByZXR1cm4gPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZiB0aGUKK3BhZCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIHByb3ZpZGVkIGVsZW1lbnQuCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LWl0ZXJhdGUtcGFkcyI+PC9hPjxoMz5nc3RfZWxlbWVudF9pdGVyYXRlX3BhZHMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICogICAgICAgZ3N0X2VsZW1lbnRfaXRlcmF0ZV9wYWRzICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JldHJpZXZlcyBhbiBpdGVyYXRvciBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPidzIHBhZHMuIFRoZSBpdGVyYXRvciBzaG91bGQKK2JlIGZyZWVkIGFmdGVyIHVzYWdlLiBBbHNvIG1vcmUgc3BlY2lhbGl6ZWQgaXRlcmF0b3JzIGV4aXN0cyBzdWNoIGFzCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWl0ZXJhdGUtc3JjLXBhZHMiIHRpdGxlPSJnc3RfZWxlbWVudF9pdGVyYXRlX3NyY19wYWRzICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMoKTwvY29kZT48L2E+IG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtaXRlcmF0ZS1zaW5rLXBhZHMiIHRpdGxlPSJnc3RfZWxlbWVudF9pdGVyYXRlX3NpbmtfcGFkcyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9pdGVyYXRlX3NpbmtfcGFkcygpPC9jb2RlPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIGl0ZXJhdGUgcGFkcyBvZi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPi4gVW5yZWYgZWFjaCBwYWQKK2FmdGVyIHVzZS4KK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZWxlbWVudC1pdGVyYXRlLXNpbmstcGFkcyI+PC9hPjxoMz5nc3RfZWxlbWVudF9pdGVyYXRlX3NpbmtfcGFkcyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKiAgICAgICBnc3RfZWxlbWVudF9pdGVyYXRlX3NpbmtfcGFkcyAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0cmlldmVzIGFuIGl0ZXJhdG9yIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50PC9jb2RlPjwvZW0+J3Mgc2luayBwYWRzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPi4gVW5yZWYgZWFjaCBwYWQKK2FmdGVyIHVzZS4KK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZWxlbWVudC1pdGVyYXRlLXNyYy1wYWRzIj48L2E+PGgzPmdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICogICAgICAgZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zcmNfcGFkcyAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JldHJpZXZlcyBhbiBpdGVyYXRvciBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPidzIHNvdXJjZSBwYWRzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPi4gVW5yZWYgZWFjaCBwYWQKK2FmdGVyIHVzZS4KK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZWxlbWVudC1saW5rIj48L2E+PGgzPmdzdF9lbGVtZW50X2xpbmsgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2VsZW1lbnRfbGluayAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICpkZXN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorTGlua3MgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPiB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdDwvY29kZT48L2VtPi4gVGhlIGxpbmsgbXVzdCBiZSBmcm9tIHNvdXJjZSB0bworZGVzdGluYXRpb247IHRoZSBvdGhlciBkaXJlY3Rpb24gd2lsbCBub3QgYmUgdHJpZWQuIFRoZSBmdW5jdGlvbiBsb29rcyBmb3IKK2V4aXN0aW5nIHBhZHMgdGhhdCBhcmVuJ3QgbGlua2VkIHlldC4gSXQgd2lsbCByZXF1ZXN0IG5ldyBwYWRzIGlmIG5lY2Vzc2FyeS4KK1N1Y2ggcGFkcyBuZWVkIHRvIGJlIHJlbGVhc2VkIG1hbnVhbGx5IHdoZW4gdW5saW5raW5nLgorSWYgbXVsdGlwbGUgbGlua3MgYXJlIHBvc3NpYmxlLCBvbmx5IG9uZSBpcyBlc3RhYmxpc2hlZC4KKzwvcD4KKzxwPgorTWFrZSBzdXJlIHlvdSBoYXZlIGFkZGVkIHlvdXIgZWxlbWVudHMgdG8gYSBiaW4gb3IgcGlwZWxpbmUgd2l0aAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI2dzdC1iaW4tYWRkIiB0aXRsZT0iZ3N0X2Jpbl9hZGQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Jpbl9hZGQoKTwvY29kZT48L2E+IGJlZm9yZSB0cnlpbmcgdG8gbGluayB0aGVtLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBwYWQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IGNvbnRhaW5pbmcgdGhlIGRlc3RpbmF0aW9uIHBhZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIGVsZW1lbnRzIGNvdWxkIGJlIGxpbmtlZCwgRkFMU0Ugb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LXVubGluayI+PC9hPjxoMz5nc3RfZWxlbWVudF91bmxpbmsgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfdW5saW5rICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICpkZXN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVW5saW5rcyBhbGwgc291cmNlIHBhZHMgb2YgdGhlIHNvdXJjZSBlbGVtZW50IHdpdGggYWxsIHNpbmsgcGFkcworb2YgdGhlIHNpbmsgZWxlbWVudCB0byB3aGljaCB0aGV5IGFyZSBsaW5rZWQuCis8L3A+Cis8cD4KK0lmIHRoZSBsaW5rIGhhcyBiZWVuIG1hZGUgdXNpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1saW5rIiB0aXRsZT0iZ3N0X2VsZW1lbnRfbGluayAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9saW5rKCk8L2NvZGU+PC9hPiwgaXQgY291bGQgaGF2ZSBjcmVhdGVkIGFuCityZXF1ZXN0cGFkLCB3aGljaCBoYXMgdG8gYmUgcmVsZWFzZWQgdXNpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1yZWxlYXNlLXJlcXVlc3QtcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkKCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNvdXJjZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byB1bmxpbmsuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNpbmsgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gdW5saW5rLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtbGluay1tYW55Ij48L2E+PGgzPmdzdF9lbGVtZW50X2xpbmtfbWFueSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfZWxlbWVudF9saW5rX21hbnkgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50XzE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnRfMjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDaGFpbiB0b2dldGhlciBhIHNlcmllcyBvZiBlbGVtZW50cy4gVXNlcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWxpbmsiIHRpdGxlPSJnc3RfZWxlbWVudF9saW5rICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X2xpbmsoKTwvY29kZT48L2E+LgorTWFrZSBzdXJlIHlvdSBoYXZlIGFkZGVkIHlvdXIgZWxlbWVudHMgdG8gYSBiaW4gb3IgcGlwZWxpbmUgd2l0aAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI2dzdC1iaW4tYWRkIiB0aXRsZT0iZ3N0X2Jpbl9hZGQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Jpbl9hZGQoKTwvY29kZT48L2E+IGJlZm9yZSB0cnlpbmcgdG8gbGluayB0aGVtLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnRfMTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZmlyc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gaW4gdGhlIGxpbmsgY2hhaW4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnRfMjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2Vjb25kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IGluIHRoZSBsaW5rIGNoYWluLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIE5VTEwtdGVybWluYXRlZCBsaXN0IG9mIGVsZW1lbnRzIHRvIGxpbmsgaW4gb3JkZXIuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBvbiBzdWNjZXNzLCBGQUxTRSBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtdW5saW5rLW1hbnkiPjwvYT48aDM+Z3N0X2VsZW1lbnRfdW5saW5rX21hbnkgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfdW5saW5rX21hbnkgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudF8xPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50XzI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVW5saW5rcyBhIHNlcmllcyBvZiBlbGVtZW50cy4gVXNlcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXVubGluayIgdGl0bGU9ImdzdF9lbGVtZW50X3VubGluayAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF91bmxpbmsoKTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnRfMTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZmlyc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gaW4gdGhlIGxpbmsgY2hhaW4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnRfMjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2Vjb25kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IGluIHRoZSBsaW5rIGNoYWluLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIE5VTEwtdGVybWluYXRlZCBsaXN0IG9mIGVsZW1lbnRzIHRvIHVubGluayBpbiBvcmRlci48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZWxlbWVudC1saW5rLXBhZHMiPjwvYT48aDM+Z3N0X2VsZW1lbnRfbGlua19wYWRzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9lbGVtZW50X2xpbmtfcGFkcyAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpzcmNwYWRuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICpkZXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmRlc3RwYWRuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorTGlua3MgdGhlIHR3byBuYW1lZCBwYWRzIG9mIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGVsZW1lbnRzLgorU2lkZSBlZmZlY3QgaXMgdGhhdCBpZiBvbmUgb2YgdGhlIHBhZHMgaGFzIG5vIHBhcmVudCwgaXQgYmVjb21lcyBhCitjaGlsZCBvZiB0aGUgcGFyZW50IG9mIHRoZSBvdGhlciBlbGVtZW50LiAgSWYgdGhleSBoYXZlIGRpZmZlcmVudAorcGFyZW50cywgdGhlIGxpbmsgZmFpbHMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gY29udGFpbmluZyB0aGUgc291cmNlIHBhZC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyY3BhZG5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5hbWUgb2YgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IGluIHNvdXJjZSBlbGVtZW50CitvciBOVUxMIGZvciBhbnkgcGFkLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IGNvbnRhaW5pbmcgdGhlIGRlc3RpbmF0aW9uIHBhZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdHBhZG5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5hbWUgb2YgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IGluIGRlc3RpbmF0aW9uIGVsZW1lbnQsCitvciBOVUxMIGZvciBhbnkgcGFkLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBwYWRzIGNvdWxkIGJlIGxpbmtlZCwgRkFMU0Ugb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LWxpbmstcGFkcy1mdWxsIj48L2E+PGgzPmdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpzcmNwYWRuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICpkZXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmRlc3RwYWRuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRMaW5rQ2hlY2siIHRpdGxlPSJlbnVtIEdzdFBhZExpbmtDaGVjayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZExpbmtDaGVjazwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorTGlua3MgdGhlIHR3byBuYW1lZCBwYWRzIG9mIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGVsZW1lbnRzLgorU2lkZSBlZmZlY3QgaXMgdGhhdCBpZiBvbmUgb2YgdGhlIHBhZHMgaGFzIG5vIHBhcmVudCwgaXQgYmVjb21lcyBhCitjaGlsZCBvZiB0aGUgcGFyZW50IG9mIHRoZSBvdGhlciBlbGVtZW50LiAgSWYgdGhleSBoYXZlIGRpZmZlcmVudAorcGFyZW50cywgdGhlIGxpbmsgZmFpbHMuCis8L3A+Cis8cD4KK0NhbGxpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1saW5rLXBhZHMtZnVsbCIgdGl0bGU9ImdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsKCk8L2NvZGU+PC9hPiB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPiA9PSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1MSU5LLUNIRUNLLURFRkFVTFQ6Q0FQUyIgdGl0bGU9IkdTVF9QQURfTElOS19DSEVDS19ERUZBVUxUIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BBRF9MSU5LX0NIRUNLX0RFRkFVTFQ8L2NvZGU+PC9hPgoraXMgdGhlIHNhbWUgYXMgY2FsbGluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWxpbmstcGFkcyIgdGl0bGU9ImdzdF9lbGVtZW50X2xpbmtfcGFkcyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9saW5rX3BhZHMoKTwvY29kZT48L2E+IGFuZCB0aGUgcmVjb21tZW5kZWQgd2F5IG9mCitsaW5raW5nIHBhZHMgd2l0aCBzYWZldHkgY2hlY2tzIGFwcGxpZWQuCis8L3A+Cis8cD4KK1RoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtbGluay1mdWxsIiB0aXRsZT0iZ3N0X3BhZF9saW5rX2Z1bGwgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9saW5rX2Z1bGwoKTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBwYWQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmNwYWRuYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuYW1lIG9mIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBpbiBzb3VyY2UgZWxlbWVudAorb3IgTlVMTCBmb3IgYW55IHBhZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBjb250YWluaW5nIHRoZSBkZXN0aW5hdGlvbiBwYWQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3RwYWRuYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuYW1lIG9mIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBpbiBkZXN0aW5hdGlvbiBlbGVtZW50LAorb3IgTlVMTCBmb3IgYW55IHBhZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZExpbmtDaGVjayIgdGl0bGU9ImVudW0gR3N0UGFkTGlua0NoZWNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkTGlua0NoZWNrPC9zcGFuPjwvYT4gdG8gYmUgcGVyZm9ybWVkIHdoZW4gbGlua2luZyBwYWRzLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHBhZHMgY291bGQgYmUgbGlua2VkLCBGQUxTRSBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtdW5saW5rLXBhZHMiPjwvYT48aDM+Z3N0X2VsZW1lbnRfdW5saW5rX3BhZHMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfdW5saW5rX3BhZHMgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnNyY3BhZG5hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmRlc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZGVzdHBhZG5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitVbmxpbmtzIHRoZSB0d28gbmFtZWQgcGFkcyBvZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBlbGVtZW50cy4KKzwvcD4KKzxwPgorVGhpcyBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC11bmxpbmsiIHRpdGxlPSJnc3RfcGFkX3VubGluayAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3VubGluaygpPC9jb2RlPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgKHRyYW5zZmVyIG5vbmUpOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBjb250YWluaW5nIHRoZSBzb3VyY2UgcGFkLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjcGFkbmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmFtZSBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gaW4gc291cmNlIGVsZW1lbnQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gY29udGFpbmluZyB0aGUgZGVzdGluYXRpb24gcGFkLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0cGFkbmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmFtZSBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gaW4gZGVzdGluYXRpb24gZWxlbWVudC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZWxlbWVudC1saW5rLXBhZHMtZmlsdGVyZWQiPjwvYT48aDM+Z3N0X2VsZW1lbnRfbGlua19wYWRzX2ZpbHRlcmVkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9lbGVtZW50X2xpbmtfcGFkc19maWx0ZXJlZCAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpzcmNwYWRuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICpkZXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmRlc3RwYWRuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqZmlsdGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorTGlua3MgdGhlIHR3byBuYW1lZCBwYWRzIG9mIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGVsZW1lbnRzLiBTaWRlIGVmZmVjdAoraXMgdGhhdCBpZiBvbmUgb2YgdGhlIHBhZHMgaGFzIG5vIHBhcmVudCwgaXQgYmVjb21lcyBhIGNoaWxkIG9mIHRoZSBwYXJlbnQgb2YKK3RoZSBvdGhlciBlbGVtZW50LiBJZiB0aGV5IGhhdmUgZGlmZmVyZW50IHBhcmVudHMsIHRoZSBsaW5rIGZhaWxzLiBJZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPgoraXMgbm90IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+TlVMTDwvc3Bhbj48L2E+LCBtYWtlcyBzdXJlIHRoYXQgdGhlIGNhcHMgb2YgdGhlIGxpbmsgaXMgYSBzdWJzZXQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gY29udGFpbmluZyB0aGUgc291cmNlIHBhZC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyY3BhZG5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5hbWUgb2YgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IGluIHNvdXJjZSBlbGVtZW50CitvciBOVUxMIGZvciBhbnkgcGFkLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IGNvbnRhaW5pbmcgdGhlIGRlc3RpbmF0aW9uIHBhZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdHBhZG5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5hbWUgb2YgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IGluIGRlc3RpbmF0aW9uIGVsZW1lbnQKK29yIE5VTEwgZm9yIGFueSBwYWQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmlsdGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gZmlsdGVyIHRoZSBsaW5rLAorb3IgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5OVUxMPC9zcGFuPjwvYT4gZm9yIG5vIGZpbHRlci4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiB0aGUgcGFkcyBjb3VsZCBiZSBsaW5rZWQsIEZBTFNFIG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZWxlbWVudC1saW5rLWZpbHRlcmVkIj48L2E+PGgzPmdzdF9lbGVtZW50X2xpbmtfZmlsdGVyZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2VsZW1lbnRfbGlua19maWx0ZXJlZCAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICpkZXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqZmlsdGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorTGlua3MgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPiB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdDwvY29kZT48L2VtPiB1c2luZyB0aGUgZ2l2ZW4gY2FwcyBhcyBmaWx0ZXJjYXBzLgorVGhlIGxpbmsgbXVzdCBiZSBmcm9tIHNvdXJjZSB0bworZGVzdGluYXRpb247IHRoZSBvdGhlciBkaXJlY3Rpb24gd2lsbCBub3QgYmUgdHJpZWQuIFRoZSBmdW5jdGlvbiBsb29rcyBmb3IKK2V4aXN0aW5nIHBhZHMgdGhhdCBhcmVuJ3QgbGlua2VkIHlldC4gSXQgd2lsbCByZXF1ZXN0IG5ldyBwYWRzIGlmIG5lY2Vzc2FyeS4KK0lmIG11bHRpcGxlIGxpbmtzIGFyZSBwb3NzaWJsZSwgb25seSBvbmUgaXMgZXN0YWJsaXNoZWQuCis8L3A+Cis8cD4KK01ha2Ugc3VyZSB5b3UgaGF2ZSBhZGRlZCB5b3VyIGVsZW1lbnRzIHRvIGEgYmluIG9yIHBpcGVsaW5lIHdpdGgKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWFkZCIgdGl0bGU9ImdzdF9iaW5fYWRkICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iaW5fYWRkKCk8L2NvZGU+PC9hPiBiZWZvcmUgdHJ5aW5nIHRvIGxpbmsgdGhlbS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBjb250YWluaW5nIHRoZSBzb3VyY2UgcGFkLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gY29udGFpbmluZyB0aGUgZGVzdGluYXRpb24gcGFkLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWx0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byBmaWx0ZXIgdGhlIGxpbmssCitvciA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPk5VTEw8L3NwYW4+PC9hPiBmb3Igbm8gZmlsdGVyLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBwYWRzIGNvdWxkIGJlIGxpbmtlZCwgRkFMU0Ugb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LWNsYXNzLWdldC1tZXRhZGF0YSI+PC9hPjxoMz5nc3RfZWxlbWVudF9jbGFzc19nZXRfbWV0YWRhdGEgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICogICAgICAgZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X21ldGFkYXRhICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnRDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RFbGVtZW50Q2xhc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50Q2xhc3M8L3NwYW4+PC9hPiAqa2xhc3M8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqa2V5PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0IG1ldGFkYXRhIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmtleTwvY29kZT48L2VtPiBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+a2xhc3M8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+a2xhc3M8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Y2xhc3MgdG8gZ2V0IG1ldGFkYXRhIGZvcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+a2V5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBrZXkgdG8gZ2V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG1ldGFkYXRhIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+a2V5PC9jb2RlPjwvZW0+LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LXNldC1iYXNlLXRpbWUiPjwvYT48aDM+Z3N0X2VsZW1lbnRfc2V0X2Jhc2VfdGltZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfYmFzZV90aW1lICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRpbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXQgdGhlIGJhc2UgdGltZSBvZiBhbiBlbGVtZW50LiBTZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtYmFzZS10aW1lIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X2Jhc2VfdGltZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9nZXRfYmFzZV90aW1lKCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50aW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBiYXNlIHRpbWUgdG8gc2V0LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LWdldC1iYXNlLXRpbWUiPjwvYT48aDM+Z3N0X2VsZW1lbnRfZ2V0X2Jhc2VfdGltZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+ICAgICAgICBnc3RfZWxlbWVudF9nZXRfYmFzZV90aW1lICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0dXJucyB0aGUgYmFzZSB0aW1lIG9mIHRoZSBlbGVtZW50LiBUaGUgYmFzZSB0aW1lIGlzIHRoZQorYWJzb2x1dGUgdGltZSBvZiB0aGUgY2xvY2sgd2hlbiB0aGlzIGVsZW1lbnQgd2FzIGxhc3QgcHV0IHRvCitQTEFZSU5HLiBTdWJ0cmFjdGluZyB0aGUgYmFzZSB0aW1lIGZyb20gdGhlIGNsb2NrIHRpbWUgZ2l2ZXMKK3RoZSBydW5uaW5nIHRpbWUgb2YgdGhlIGVsZW1lbnQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBiYXNlIHRpbWUgb2YgdGhlIGVsZW1lbnQuCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LXNldC1zdGFydC10aW1lIj48L2E+PGgzPmdzdF9lbGVtZW50X3NldF9zdGFydF90aW1lICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGFydF90aW1lICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldCB0aGUgc3RhcnQgdGltZSBvZiBhbiBlbGVtZW50LiBUaGUgc3RhcnQgdGltZSBvZiB0aGUgZWxlbWVudCBpcyB0aGUKK3J1bm5pbmcgdGltZSBvZiB0aGUgZWxlbWVudCB3aGVuIGl0IGxhc3Qgd2VudCB0byB0aGUgUEFVU0VEIHN0YXRlLiBJbiBSRUFEWQorb3IgYWZ0ZXIgYSBmbHVzaGluZyBzZWVrLCBpdCBpcyBzZXQgdG8gMC4KKzwvcD4KKzxwPgorVG9wbGV2ZWwgZWxlbWVudHMgbGlrZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPiB3aWxsIG1hbmFnZSB0aGUgc3RhcnRfdGltZSBhbmQKK2Jhc2VfdGltZSBvbiBpdHMgY2hpbGRyZW4uIFNldHRpbmcgdGhlIHN0YXJ0X3RpbWUgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLVRJTUUtTk9ORTpDQVBTIiB0aXRsZT0iR1NUX0NMT0NLX1RJTUVfTk9ORSI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9DTE9DS19USU1FX05PTkU8L3NwYW4+PC9hPgorb24gc3VjaCBhIHRvcGxldmVsIGVsZW1lbnQgd2lsbCBkaXNhYmxlIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIGJhc2VfdGltZSB0bwordGhlIGNoaWxkcmVuIGFuZCBjYW4gYmUgdXNlZnVsIGlmIHRoZSBhcHBsaWNhdGlvbiBtYW5hZ2VzIHRoZSBiYXNlX3RpbWUKK2l0c2VsZiwgZm9yIGV4YW1wbGUgaWYgeW91IHdhbnQgdG8gc3luY2hyb25pemUgY2FwdHVyZSBmcm9tIG11bHRpcGxlCitwaXBlbGluZXMsIGFuZCB5b3UgY2FuIGFsc28gZW5zdXJlIHRoYXQgdGhlIHBpcGVsaW5lcyBoYXZlIHRoZSBzYW1lIGNsb2NrLgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGJhc2UgdGltZSB0byBzZXQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZ2V0LXN0YXJ0LXRpbWUiPjwvYT48aDM+Z3N0X2VsZW1lbnRfZ2V0X3N0YXJ0X3RpbWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXJ0X3RpbWUgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JldHVybnMgdGhlIHN0YXJ0IHRpbWUgb2YgdGhlIGVsZW1lbnQuIFRoZSBzdGFydCB0aW1lIGlzIHRoZQorcnVubmluZyB0aW1lIG9mIHRoZSBjbG9jayB3aGVuIHRoaXMgZWxlbWVudCB3YXMgbGFzdCBwdXQgdG8gUEFVU0VELgorPC9wPgorPHA+CitVc3VhbGx5IHRoZSBzdGFydF90aW1lIGlzIG1hbmFnZWQgYnkgYSB0b3BsZXZlbCBlbGVtZW50IHN1Y2ggYXMKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+LgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc3RhcnQgdGltZSBvZiB0aGUgZWxlbWVudC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI0PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZWxlbWVudC1zZXQtYnVzIj48L2E+PGgzPmdzdF9lbGVtZW50X3NldF9idXMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiAqYnVzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0cyB0aGUgYnVzIG9mIHRoZSBlbGVtZW50LiBJbmNyZWFzZXMgdGhlIHJlZmNvdW50IG9uIHRoZSBidXMuCitGb3IgaW50ZXJuYWwgdXNlIG9ubHksIHVubGVzcyB5b3UncmUgdGVzdGluZyBlbGVtZW50cy4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gc2V0IHRoZSBidXMgb2YuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idXM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+IHRvIHNldC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LWdldC1idXMiPjwvYT48aDM+Z3N0X2VsZW1lbnRfZ2V0X2J1cyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1czwvc3Bhbj48L2E+ICogICAgICAgICAgICBnc3RfZWxlbWVudF9nZXRfYnVzICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0dXJucyB0aGUgYnVzIG9mIHRoZSBlbGVtZW50LiBOb3RlIHRoYXQgb25seSBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+IHdpbGwgcHJvdmlkZSBhCitidXMgZm9yIHRoZSBhcHBsaWNhdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSBidXMgb2YuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGVsZW1lbnQncyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPi4gdW5yZWYgYWZ0ZXIgdXNhZ2UuCitNVCBzYWZlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZ2V0LWZhY3RvcnkiPjwvYT48aDM+Z3N0X2VsZW1lbnRfZ2V0X2ZhY3RvcnkgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudEZhY3Rvcnk8L3NwYW4+PC9hPiAqIGdzdF9lbGVtZW50X2dldF9mYWN0b3J5ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZXRyaWV2ZXMgdGhlIGZhY3RvcnkgdGhhdCB3YXMgdXNlZCB0byBjcmVhdGUgdGhpcyBlbGVtZW50LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byByZXF1ZXN0IHRoZSBlbGVtZW50IGZhY3Rvcnkgb2YuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+IHVzZWQgZm9yIGNyZWF0aW5nIHRoaXMKK2VsZW1lbnQuIG5vIHJlZmNvdW50aW5nIGlzIG5lZWRlZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LXNldC1pbmRleCI+PC9hPjxoMz5nc3RfZWxlbWVudF9zZXRfaW5kZXggKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2luZGV4ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXg8L3NwYW4+PC9hPiAqaW5kZXg8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+IG9uIHRoZSBlbGVtZW50LiBUaGUgcmVmY291bnQgb2YgdGhlIGluZGV4Cit3aWxsIGJlIGluY3JlYXNlZCwgYW55IHByZXZpb3VzbHkgc2V0IGluZGV4IGlzIHVucmVmZmVkLgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4PC9zcGFuPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZWxlbWVudC1nZXQtaW5kZXgiPjwvYT48aDM+Z3N0X2VsZW1lbnRfZ2V0X2luZGV4ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEluZGV4PC9zcGFuPjwvYT4gKiAgICAgICAgICBnc3RfZWxlbWVudF9nZXRfaW5kZXggICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgaW5kZXggZnJvbSB0aGUgZWxlbWVudC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXg8L3NwYW4+PC9hPiBvciA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB3aGVuIG5vIGluZGV4IHdhcyBzZXQgb24gdGhlCitlbGVtZW50LiB1bnJlZiBhZnRlciB1c2FnZS4KK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZWxlbWVudC1pcy1pbmRleGFibGUiPjwvYT48aDM+Z3N0X2VsZW1lbnRfaXNfaW5kZXhhYmxlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9lbGVtZW50X2lzX2luZGV4YWJsZSAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitRdWVyaWVzIGlmIHRoZSBlbGVtZW50IGNhbiBiZSBpbmRleGVkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBlbGVtZW50IGNhbiBiZSBpbmRleGVkLgorTVQgc2FmZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZWxlbWVudC1zZXQtbmFtZSI+PC9hPjxoMz5nc3RfZWxlbWVudF9zZXRfbmFtZSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfbmFtZShlbGVtLG5hbWUpIGdzdF9vYmplY3Rfc2V0X25hbWUoR1NUX09CSkVDVF9DQVNUKGVsZW0pLG5hbWUpCis8L3ByZT4KKzxwPgorU2V0cyB0aGUgbmFtZSBvZiB0aGUgZWxlbWVudCwgZ2V0dGluZyByaWQgb2YgdGhlIG9sZCBuYW1lIGlmIHRoZXJlIHdhcyBvbmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIHNldCB0aGUgbmFtZSBvZi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5ldyBuYW1lPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZ2V0LW5hbWUiPjwvYT48aDM+Z3N0X2VsZW1lbnRfZ2V0X25hbWUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X25hbWUoZWxlbSkgICAgICBnc3Rfb2JqZWN0X2dldF9uYW1lKEdTVF9PQkpFQ1RfQ0FTVChlbGVtKSkKKzwvcHJlPgorPHA+CitSZXR1cm5zIGEgY29weSBvZiB0aGUgbmFtZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbTwvY29kZT48L2VtPi4KK0NhbGxlciBzaG91bGQgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1NZW1vcnktQWxsb2NhdGlvbi5odG1sI2ctZnJlZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX2ZyZWUoKTwvY29kZT48L2E+IHRoZSByZXR1cm4gdmFsdWUgYWZ0ZXIgdXNhZ2UuCitGb3IgYSBuYW1lbGVzcyBlbGVtZW50LCB0aGlzIHJldHVybnMgTlVMTCwgd2hpY2ggeW91IGNhbiBzYWZlbHkgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1NZW1vcnktQWxsb2NhdGlvbi5odG1sI2ctZnJlZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX2ZyZWUoKTwvY29kZT48L2E+CithcyB3ZWxsLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byBnZXQgdGhlIG5hbWUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW08L2NvZGU+PC9lbT4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5hbWUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW08L2NvZGU+PC9lbT4uIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItTWVtb3J5LUFsbG9jYXRpb24uaHRtbCNnLWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19mcmVlKCk8L2NvZGU+PC9hPiBhZnRlciB1c2FnZS4gTVQgc2FmZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LXNldC1wYXJlbnQiPjwvYT48aDM+Z3N0X2VsZW1lbnRfc2V0X3BhcmVudCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfcGFyZW50KGVsZW0scGFyZW50KSAgICAgZ3N0X29iamVjdF9zZXRfcGFyZW50KEdTVF9PQkpFQ1RfQ0FTVChlbGVtKSxwYXJlbnQpCis8L3ByZT4KKzxwPgorU2V0cyB0aGUgcGFyZW50IG9mIGFuIGVsZW1lbnQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIHNldCB0aGUgcGFyZW50IG9mLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXcgcGFyZW50IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+IG9mIHRoZSBlbGVtZW50LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LWdldC1wYXJlbnQiPjwvYT48aDM+Z3N0X2VsZW1lbnRfZ2V0X3BhcmVudCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9nZXRfcGFyZW50KGVsZW0pICAgIGdzdF9vYmplY3RfZ2V0X3BhcmVudChHU1RfT0JKRUNUX0NBU1QoZWxlbSkpCis8L3ByZT4KKzxwPgorR2V0IHRoZSBwYXJlbnQgb2YgYW4gZWxlbWVudC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSBwYXJlbnQgb2YuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBhcmVudCBvZiBhbiBlbGVtZW50LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtcmVxdWlyZXMtY2xvY2siPjwvYT48aDM+Z3N0X2VsZW1lbnRfcmVxdWlyZXNfY2xvY2sgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2VsZW1lbnRfcmVxdWlyZXNfY2xvY2sgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1F1ZXJ5IGlmIHRoZSBlbGVtZW50IHJlcXVpcmVzIGEgY2xvY2suCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIHF1ZXJ5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgZWxlbWVudCByZXF1aXJlcyBhIGNsb2NrCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LXNldC1jbG9jayI+PC9hPjxoMz5nc3RfZWxlbWVudF9zZXRfY2xvY2sgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2Nsb2NrICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqY2xvY2s8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXRzIHRoZSBjbG9jayBmb3IgdGhlIGVsZW1lbnQuIFRoaXMgZnVuY3Rpb24gaW5jcmVhc2VzIHRoZQorcmVmY291bnQgb24gdGhlIGNsb2NrLiBBbnkgcHJldmlvdXNseSBzZXQgY2xvY2sgb24gdGhlIG9iamVjdAoraXMgdW5yZWZmZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIHNldCB0aGUgY2xvY2sgZm9yLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IHRvIHNldCBmb3IgdGhlIGVsZW1lbnQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgZWxlbWVudCBhY2NlcHRlZCB0aGUgY2xvY2suIEFuIGVsZW1lbnQgY2FuIHJlZnVzZSBhCitjbG9jayB3aGVuIGl0LCBmb3IgZXhhbXBsZSwgaXMgbm90IGFibGUgdG8gc2xhdmUgaXRzIGludGVybmFsIGNsb2NrIHRvIHRoZQorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsb2NrPC9jb2RlPjwvZW0+IG9yIHdoZW4gaXQgcmVxdWlyZXMgYSBzcGVjaWZpYyBjbG9jayB0byBvcGVyYXRlLgorTVQgc2FmZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZWxlbWVudC1nZXQtY2xvY2siPjwvYT48aDM+Z3N0X2VsZW1lbnRfZ2V0X2Nsb2NrICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKiAgICAgICAgICBnc3RfZWxlbWVudF9nZXRfY2xvY2sgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQgY2xvY2sgb2YgdGhlIGVsZW1lbnQuIFRoaXMgaXMgdGhlIGNsb2NrIGFzIHdhcworbGFzdCBzZXQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1jbG9jayIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9jbG9jayAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9zZXRfY2xvY2soKTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byBnZXQgdGhlIGNsb2NrIG9mLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiBvZiB0aGUgZWxlbWVudC4gdW5yZWYgYWZ0ZXIgdXNhZ2UuCitNVCBzYWZlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtcHJvdmlkZXMtY2xvY2siPjwvYT48aDM+Z3N0X2VsZW1lbnRfcHJvdmlkZXNfY2xvY2sgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2VsZW1lbnRfcHJvdmlkZXNfY2xvY2sgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1F1ZXJ5IGlmIHRoZSBlbGVtZW50IHByb3ZpZGVzIGEgY2xvY2suIEEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gcHJvdmlkZWQgYnkgYW4KK2VsZW1lbnQgY2FuIGJlIHVzZWQgYXMgdGhlIGdsb2JhbCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiBmb3IgdGhlIHBpcGVsaW5lLgorQW4gZWxlbWVudCB0aGF0IGNhbiBwcm92aWRlIGEgY2xvY2sgaXMgb25seSByZXF1aXJlZCB0byBkbyBzbyBpbiB0aGUgUEFVU0VECitzdGF0ZSwgdGhpcyBtZWFucyB3aGVuIGl0IGlzIGZ1bGx5IG5lZ290aWF0ZWQgYW5kIGhhcyBhbGxvY2F0ZWQgdGhlIHJlc291cmNlcwordG8gb3BlcmF0ZSB0aGUgY2xvY2suCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIHF1ZXJ5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgZWxlbWVudCBwcm92aWRlcyBhIGNsb2NrCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LXByb3ZpZGUtY2xvY2siPjwvYT48aDM+Z3N0X2VsZW1lbnRfcHJvdmlkZV9jbG9jayAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICogICAgICAgICAgZ3N0X2VsZW1lbnRfcHJvdmlkZV9jbG9jayAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCB0aGUgY2xvY2sgcHJvdmlkZWQgYnkgdGhlIGdpdmVuIGVsZW1lbnQuCis8L3A+Cis8ZGl2IGNsYXNzPSJub3RlIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+Cis8aDMgY2xhc3M9InRpdGxlIj5Ob3RlPC9oMz5BbiBlbGVtZW50IGlzIG9ubHkgcmVxdWlyZWQgdG8gcHJvdmlkZSBhIGNsb2NrIGluIHRoZSBQQVVTRUQKK3N0YXRlLiBTb21lIGVsZW1lbnRzIGNhbiBwcm92aWRlIGEgY2xvY2sgaW4gb3RoZXIgc3RhdGVzLjwvZGl2PgorPHA+Cis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIHF1ZXJ5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIEdzdENsb2NrIHByb3ZpZGVkIGJ5IHRoZSBlbGVtZW50IG9yIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+CitpZiBubyBjbG9jayBjb3VsZCBiZSBwcm92aWRlZC4gIFVucmVmIGFmdGVyIHVzYWdlLgorTVQgc2FmZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LXNldC1zdGF0ZSI+PC9hPjxoMz5nc3RfZWxlbWVudF9zZXRfc3RhdGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGVDaGFuZ2VSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0YXRlQ2hhbmdlUmV0dXJuPC9zcGFuPjwvYT4gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGU8L3NwYW4+PC9hPiBzdGF0ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgdGhlIHN0YXRlIG9mIHRoZSBlbGVtZW50LiBUaGlzIGZ1bmN0aW9uIHdpbGwgdHJ5IHRvIHNldCB0aGUKK3JlcXVlc3RlZCBzdGF0ZSBieSBnb2luZyB0aHJvdWdoIGFsbCB0aGUgaW50ZXJtZWRpYXJ5IHN0YXRlcyBhbmQgY2FsbGluZwordGhlIGNsYXNzJ3Mgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIGZvciBlYWNoLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIGNhbiByZXR1cm4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLUFTWU5DOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfU1RBVEVfQ0hBTkdFX0FTWU5DPC9zcGFuPjwvYT4sIGluIHdoaWNoIGNhc2UgdGhlCitlbGVtZW50IHdpbGwgcGVyZm9ybSB0aGUgcmVtYWluZGVyIG9mIHRoZSBzdGF0ZSBjaGFuZ2UgYXN5bmNocm9ub3VzbHkgaW4KK2Fub3RoZXIgdGhyZWFkLgorQW4gYXBwbGljYXRpb24gY2FuIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1zdGF0ZSIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9zdGF0ZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9nZXRfc3RhdGUoKTwvY29kZT48L2E+IHRvIHdhaXQgZm9yIHRoZSBjb21wbGV0aW9uCitvZiB0aGUgc3RhdGUgY2hhbmdlIG9yIGl0IGNhbiB3YWl0IGZvciBhIHN0YXRlIGNoYW5nZSBtZXNzYWdlIG9uIHRoZSBidXMuCis8L3A+Cis8cD4KK1N0YXRlIGNoYW5nZXMgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtUkVBRFk6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9SRUFEWTwvY29kZT48L2E+IG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLU5VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9OVUxMPC9jb2RlPjwvYT4gbmV2ZXIgcmV0dXJuCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1DSEFOR0UtQVNZTkM6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9TVEFURV9DSEFOR0VfQVNZTkM8L3NwYW4+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gY2hhbmdlIHN0YXRlIG9mLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhdGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGVsZW1lbnQncyBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZSIgdGl0bGU9ImVudW0gR3N0U3RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZTwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlJlc3VsdCBvZiB0aGUgc3RhdGUgY2hhbmdlIHVzaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGVDaGFuZ2VSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGVDaGFuZ2VSZXR1cm48L3NwYW4+PC9hPi4KK01UIHNhZmUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZ2V0LXN0YXRlIj48L2E+PGgzPmdzdF9lbGVtZW50X2dldF9zdGF0ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZUNoYW5nZVJldHVybiIgdGl0bGU9ImVudW0gR3N0U3RhdGVDaGFuZ2VSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RhdGVDaGFuZ2VSZXR1cm48L3NwYW4+PC9hPiBnc3RfZWxlbWVudF9nZXRfc3RhdGUgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZSIgdGl0bGU9ImVudW0gR3N0U3RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZTwvc3Bhbj48L2E+ICpzdGF0ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlPC9zcGFuPjwvYT4gKnBlbmRpbmc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZW91dDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIHN0YXRlIG9mIHRoZSBlbGVtZW50LgorPC9wPgorPHA+CitGb3IgZWxlbWVudHMgdGhhdCBwZXJmb3JtZWQgYW4gQVNZTkMgc3RhdGUgY2hhbmdlLCBhcyByZXBvcnRlZCBieQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZXQtc3RhdGUiIHRpdGxlPSJnc3RfZWxlbWVudF9zZXRfc3RhdGUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfc2V0X3N0YXRlKCk8L2NvZGU+PC9hPiwgdGhpcyBmdW5jdGlvbiB3aWxsIGJsb2NrIHVwIHRvIHRoZQorc3BlY2lmaWVkIHRpbWVvdXQgdmFsdWUgZm9yIHRoZSBzdGF0ZSBjaGFuZ2UgdG8gY29tcGxldGUuCitJZiB0aGUgZWxlbWVudCBjb21wbGV0ZXMgdGhlIHN0YXRlIGNoYW5nZSBvciBnb2VzIGludG8KK2FuIGVycm9yLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgaW1tZWRpYXRlbHkgd2l0aCBhIHJldHVybiB2YWx1ZSBvZgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLVNVQ0NFU1M6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzwvY29kZT48L2E+IG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUNIQU5HRS1GQUlMVVJFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU8L2NvZGU+PC9hPiByZXNwZWN0aXZlbHkuCis8L3A+Cis8cD4KK0ZvciBlbGVtZW50cyB0aGF0IGRpZCBub3QgcmV0dXJuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUNIQU5HRS1BU1lOQzpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX0NIQU5HRV9BU1lOQzwvY29kZT48L2E+LCB0aGlzIGZ1bmN0aW9uCityZXR1cm5zIHRoZSBjdXJyZW50IGFuZCBwZW5kaW5nIHN0YXRlIGltbWVkaWF0ZWx5LgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIHJldHVybnMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLU5PLVBSRVJPTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTDwvY29kZT48L2E+IGlmIHRoZSBlbGVtZW50CitzdWNjZXNzZnVsbHkgY2hhbmdlZCBpdHMgc3RhdGUgYnV0IGlzIG5vdCBhYmxlIHRvIHByb3ZpZGUgZGF0YSB5ZXQuCitUaGlzIG1vc3RseSBoYXBwZW5zIGZvciBsaXZlIHNvdXJjZXMgdGhhdCBvbmx5IHByb2R1Y2UgZGF0YSBpbgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtUExBWUlORzpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX1BMQVlJTkc8L2NvZGU+PC9hPi4gV2hpbGUgdGhlIHN0YXRlIGNoYW5nZSByZXR1cm4gaXMgZXF1aXZhbGVudCB0bworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLVNVQ0NFU1M6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzwvY29kZT48L2E+LCBpdCBpcyByZXR1cm5lZCB0byB0aGUgYXBwbGljYXRpb24gdG8gc2lnbmFsIHRoYXQKK3NvbWUgc2luayBlbGVtZW50cyBtaWdodCBub3QgYmUgYWJsZSB0byBjb21wbGV0ZSB0aGVpciBzdGF0ZSBjaGFuZ2UgYmVjYXVzZQorYW4gZWxlbWVudCBpcyBub3QgcHJvZHVjaW5nIGRhdGEgdG8gY29tcGxldGUgdGhlIHByZXJvbGwuIFdoZW4gc2V0dGluZyB0aGUKK2VsZW1lbnQgdG8gcGxheWluZywgdGhlIHByZXJvbGwgd2lsbCBjb21wbGV0ZSBhbmQgcGxheWJhY2sgd2lsbCBzdGFydC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSBzdGF0ZSBvZi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXRlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgcG9pbnRlciB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlPC9zcGFuPjwvYT4gdG8gaG9sZCB0aGUgc3RhdGUuCitDYW4gYmUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGVuZGluZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZSIgdGl0bGU9ImVudW0gR3N0U3RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZTwvc3Bhbj48L2E+IHRvIGhvbGQgdGhlIHBlbmRpbmcKK3N0YXRlLiBDYW4gYmUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZW91dDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRvIHNwZWNpZnkgdGhlIHRpbWVvdXQgZm9yIGFuIGFzeW5jCitzdGF0ZSBjaGFuZ2Ugb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLVRJTUUtTk9ORTpDQVBTIiB0aXRsZT0iR1NUX0NMT0NLX1RJTUVfTk9ORSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9DTE9DS19USU1FX05PTkU8L2NvZGU+PC9hPiBmb3IgaW5maW5pdGUgdGltZW91dC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUNIQU5HRS1TVUNDRVNTOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M8L2NvZGU+PC9hPiBpZiB0aGUgZWxlbWVudCBoYXMgbm8gbW9yZSBwZW5kaW5nIHN0YXRlCithbmQgdGhlIGxhc3Qgc3RhdGUgY2hhbmdlIHN1Y2NlZWRlZCwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLUFTWU5DOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RBVEVfQ0hBTkdFX0FTWU5DPC9jb2RlPjwvYT4gaWYgdGhlCitlbGVtZW50IGlzIHN0aWxsIHBlcmZvcm1pbmcgYSBzdGF0ZSBjaGFuZ2Ugb3IKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUNIQU5HRS1GQUlMVVJFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU8L2NvZGU+PC9hPiBpZiB0aGUgbGFzdCBzdGF0ZSBjaGFuZ2UgZmFpbGVkLgorTVQgc2FmZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZWxlbWVudC1zZXQtbG9ja2VkLXN0YXRlIj48L2E+PGgzPmdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZSAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGxvY2tlZF9zdGF0ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0xvY2tzIHRoZSBzdGF0ZSBvZiBhbiBlbGVtZW50LCBzbyBzdGF0ZSBjaGFuZ2VzIG9mIHRoZSBwYXJlbnQgZG9uJ3QgYWZmZWN0Cit0aGlzIGVsZW1lbnQgYW55bW9yZS4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bG9ja2VkX3N0YXRlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgdG8gbG9jayB0aGUgZWxlbWVudCdzIHN0YXRlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiB0aGUgc3RhdGUgd2FzIGNoYW5nZWQsIEZBTFNFIGlmIGJhZCBwYXJhbWV0ZXJzIHdlcmUgZ2l2ZW4KK29yIHRoZSBlbGVtZW50cyBzdGF0ZS1sb2NraW5nIG5lZWRlZCBubyBjaGFuZ2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtaXMtbG9ja2VkLXN0YXRlIj48L2E+PGgzPmdzdF9lbGVtZW50X2lzX2xvY2tlZF9zdGF0ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfZWxlbWVudF9pc19sb2NrZWRfc3RhdGUgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2tzIGlmIHRoZSBzdGF0ZSBvZiBhbiBlbGVtZW50IGlzIGxvY2tlZC4KK0lmIHRoZSBzdGF0ZSBvZiBhbiBlbGVtZW50IGlzIGxvY2tlZCwgc3RhdGUgY2hhbmdlcyBvZiB0aGUgcGFyZW50IGRvbid0CithZmZlY3QgdGhlIGVsZW1lbnQuCitUaGlzIHdheSB5b3UgY2FuIGxlYXZlIGN1cnJlbnRseSB1bnVzZWQgZWxlbWVudHMgaW5zaWRlIGJpbnMuIEp1c3QgbG9jayB0aGVpcgorc3RhdGUgYmVmb3JlIGNoYW5naW5nIHRoZSBzdGF0ZSBmcm9tIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLU5VTEw6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9TVEFURV9OVUxMPC9zcGFuPjwvYT4uCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUsIGlmIHRoZSBlbGVtZW50J3Mgc3RhdGUgaXMgbG9ja2VkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LWFib3J0LXN0YXRlIj48L2E+PGgzPmdzdF9lbGVtZW50X2Fib3J0X3N0YXRlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2Fib3J0X3N0YXRlICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBYm9ydCB0aGUgc3RhdGUgY2hhbmdlIG9mIHRoZSBlbGVtZW50LiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQKK2J5IGVsZW1lbnRzIHRoYXQgZG8gYXN5bmNocm9ub3VzIHN0YXRlIGNoYW5nZXMgYW5kIGZpbmQgb3V0Citzb21ldGhpbmcgaXMgd3JvbmcuCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBTVEFURV9MT0NLIGhlbGQuCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byBhYm9ydCB0aGUgc3RhdGUgb2YuPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LWNvbnRpbnVlLXN0YXRlIj48L2E+PGgzPmdzdF9lbGVtZW50X2NvbnRpbnVlX3N0YXRlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlQ2hhbmdlUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RTdGF0ZUNoYW5nZVJldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdGF0ZUNoYW5nZVJldHVybjwvc3Bhbj48L2E+IGdzdF9lbGVtZW50X2NvbnRpbnVlX3N0YXRlICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlQ2hhbmdlUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RTdGF0ZUNoYW5nZVJldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlQ2hhbmdlUmV0dXJuPC9zcGFuPjwvYT4gcmV0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ29tbWl0IHRoZSBzdGF0ZSBjaGFuZ2Ugb2YgdGhlIGVsZW1lbnQgYW5kIHByb2NlZWQgdG8gdGhlIG5leHQKK3BlbmRpbmcgc3RhdGUgaWYgYW55LiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQKK2J5IGVsZW1lbnRzIHRoYXQgZG8gYXN5bmNocm9ub3VzIHN0YXRlIGNoYW5nZXMuCitUaGUgY29yZSB3aWxsIG5vcm1hbGx5IGNhbGwgdGhpcyBtZXRob2QgYXV0b21hdGljYWxseSB3aGVuIGFuCitlbGVtZW50IHJldHVybmVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUNIQU5HRS1TVUNDRVNTOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M8L2NvZGU+PC9hPiBmcm9tIHRoZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24uCis8L3A+Cis8cD4KK0lmIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgdGhlIGVsZW1lbnQgc3RpbGwgaGFzIG5vdCByZWFjaGVkCit0aGUgcGVuZGluZyBzdGF0ZSwgdGhlIG5leHQgc3RhdGUgY2hhbmdlIGlzIHBlcmZvcm1lZC4KKzwvcD4KKzxwPgorVGhpcyBtZXRob2QgaXMgdXNlZCBpbnRlcm5hbGx5IGFuZCBzaG91bGQgbm9ybWFsbHkgbm90IGJlIGNhbGxlZCBieSBwbHVnaW5zCitvciBhcHBsaWNhdGlvbnMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIGNvbnRpbnVlIHRoZSBzdGF0ZSBjaGFuZ2Ugb2YuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIHByZXZpb3VzIHN0YXRlIHJldHVybiB2YWx1ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSByZXN1bHQgb2YgdGhlIGNvbW1pdCBzdGF0ZSBjaGFuZ2UuCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LWxvc3Qtc3RhdGUiPjwvYT48aDM+Z3N0X2VsZW1lbnRfbG9zdF9zdGF0ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9sb3N0X3N0YXRlICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQnJpbmdzIHRoZSBlbGVtZW50IHRvIHRoZSBsb3N0IHN0YXRlLiBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUKK2VsZW1lbnQgaXMgY29waWVkIHRvIHRoZSBwZW5kaW5nIHN0YXRlIHNvIHRoYXQgYW55IGNhbGwgdG8KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LXN0YXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X2dldF9zdGF0ZSgpPC9jb2RlPjwvYT4gd2lsbCByZXR1cm4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLUFTWU5DOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RBVEVfQ0hBTkdFX0FTWU5DPC9jb2RlPjwvYT4uCis8L3A+Cis8cD4KK0FuIEFTWU5DX1NUQVJUIG1lc3NhZ2UgaXMgcG9zdGVkLiBJZiB0aGUgZWxlbWVudCB3YXMgUExBWUlORywgaXQgd2lsbAorZ28gdG8gUEFVU0VELiBUaGUgZWxlbWVudCB3aWxsIGJlIHJlc3RvcmVkIHRvIGl0cyBQTEFZSU5HIHN0YXRlIGJ5Cit0aGUgcGFyZW50IHBpcGVsaW5lIHdoZW4gaXQgcHJlcm9sbHMgYWdhaW4uCis8L3A+Cis8cD4KK1RoaXMgaXMgbW9zdGx5IHVzZWQgZm9yIGVsZW1lbnRzIHRoYXQgbG9zdCB0aGVpciBwcmVyb2xsIGJ1ZmZlcgoraW4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVBBVVNFRDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX1BBVVNFRDwvY29kZT48L2E+IG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVBMQVlJTkc6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9QTEFZSU5HPC9jb2RlPjwvYT4gc3RhdGUgYWZ0ZXIgYSBmbHVzaCwKK3RoZXkgd2lsbCBnbyB0byB0aGVpciBwZW5kaW5nIHN0YXRlIGFnYWluIHdoZW4gYSBuZXcgcHJlcm9sbCBidWZmZXIgaXMKK3F1ZXVlZC4gVGhpcyBmdW5jdGlvbiBjYW4gb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBjdXJyZW50bHkKK25vdCBpbiBlcnJvciBvciBhbiBhc3luYyBzdGF0ZSBjaGFuZ2UuCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbnRlcm5hbGx5IGFuZCBzaG91bGQgbm9ybWFsbHkgbm90IGJlIGNhbGxlZCBmcm9tCitwbHVnaW5zIG9yIGFwcGxpY2F0aW9ucy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRoZSBzdGF0ZSBpcyBsb3N0IG9mPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LXN0YXRlLWdldC1uYW1lIj48L2E+PGgzPmdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZSIgdGl0bGU9ImVudW0gR3N0U3RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZTwvc3Bhbj48L2E+IHN0YXRlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGdpdmVuIHN0YXRlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXRlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZSIgdGl0bGU9ImVudW0gR3N0U3RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZTwvc3Bhbj48L2E+IHRvIGdldCB0aGUgbmFtZSBvZi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHN0cmluZyB3aXRoIHRoZSBuYW1lIG9mIHRoZSBzdGF0ZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LXN0YXRlLWNoYW5nZS1yZXR1cm4tZ2V0LW5hbWUiPjwvYT48aDM+Z3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRfbmFtZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VfcmV0dXJuX2dldF9uYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZUNoYW5nZVJldHVybiIgdGl0bGU9ImVudW0gR3N0U3RhdGVDaGFuZ2VSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZUNoYW5nZVJldHVybjwvc3Bhbj48L2E+IHN0YXRlX3JldDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBnaXZlbiBzdGF0ZSBjaGFuZ2UgcmVzdWx0LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXRlX3JldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGVDaGFuZ2VSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGVDaGFuZ2VSZXR1cm48L3NwYW4+PC9hPiB0byBnZXQgdGhlIG5hbWUgb2YuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBzdHJpbmcgd2l0aCB0aGUgbmFtZSBvZiB0aGUgc3RhdGUKK3Jlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LXN5bmMtc3RhdGUtd2l0aC1wYXJlbnQiPjwvYT48aDM+Z3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50ICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVHJpZXMgdG8gY2hhbmdlIHRoZSBzdGF0ZSBvZiB0aGUgZWxlbWVudCB0byB0aGUgc2FtZSBhcyBpdHMgcGFyZW50LgorSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIEZBTFNFLCB0aGUgc3RhdGUgb2YgZWxlbWVudCBpcyB1bmRlZmluZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUsIGlmIHRoZSBlbGVtZW50J3Mgc3RhdGUgY291bGQgYmUgc3luY2VkIHRvIHRoZSBwYXJlbnQncyBzdGF0ZS4KK01UIHNhZmUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtY2hhbmdlLXN0YXRlIj48L2E+PGgzPmdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZUNoYW5nZVJldHVybiIgdGl0bGU9ImVudW0gR3N0U3RhdGVDaGFuZ2VSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RhdGVDaGFuZ2VSZXR1cm48L3NwYW4+PC9hPiBnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZUNoYW5nZSIgdGl0bGU9ImVudW0gR3N0U3RhdGVDaGFuZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZUNoYW5nZTwvc3Bhbj48L2E+IHRyYW5zaXRpb248L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitQZXJmb3JtIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50cmFuc2l0aW9uPC9jb2RlPjwvZW0+IG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50PC9jb2RlPjwvZW0+LgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggU1RBVEVfTE9DSyBoZWxkIGFuZCBpcyBtYWlubHkgdXNlZAoraW50ZXJuYWxseS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHJhbnNpdGlvbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcmVxdWVzdGVkIHRyYW5zaXRpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZUNoYW5nZVJldHVybiIgdGl0bGU9ImVudW0gR3N0U3RhdGVDaGFuZ2VSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZUNoYW5nZVJldHVybjwvc3Bhbj48L2E+IG9mIHRoZSBzdGF0ZSB0cmFuc2l0aW9uLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LWZvdW5kLXRhZ3MiPjwvYT48aDM+Z3N0X2VsZW1lbnRfZm91bmRfdGFncyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9mb3VuZF90YWdzICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUG9zdHMgYSBtZXNzYWdlIHRvIHRoZSBidXMgdGhhdCBuZXcgdGFncyB3ZXJlIGZvdW5kLCBhbmQgcHVzaGVzIGFuIGV2ZW50Cit0byBhbGwgc291cmNlcGFkcy4gVGFrZXMgb3duZXJzaGlwIG9mIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPi4KKzwvcD4KKzxwPgorVGhpcyBpcyBhIHV0aWxpdHkgbWV0aG9kIGZvciBlbGVtZW50cy4gQXBwbGljYXRpb25zIHNob3VsZCB1c2UgdGhlCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdTZXR0ZXI8L3NwYW4+PC9hPiBpbnRlcmZhY2UuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5lbGVtZW50IGZvciB3aGljaCB3ZSBmb3VuZCB0aGUgdGFncy48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bGlzdCBvZiB0YWdzLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZm91bmQtdGFncy1mb3ItcGFkIj48L2E+PGgzPmdzdF9lbGVtZW50X2ZvdW5kX3RhZ3NfZm9yX3BhZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9mb3VuZF90YWdzX2Zvcl9wYWQgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitQb3N0cyBhIG1lc3NhZ2UgdG8gdGhlIGJ1cyB0aGF0IG5ldyB0YWdzIHdlcmUgZm91bmQgYW5kIHB1c2hlcyB0aGUKK3RhZ3MgYXMgZXZlbnQuIFRha2VzIG93bmVyc2hpcCBvZiB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT4uCis8L3A+Cis8cD4KK1RoaXMgaXMgYSB1dGlsaXR5IG1ldGhvZCBmb3IgZWxlbWVudHMuIEFwcGxpY2F0aW9ucyBzaG91bGQgdXNlIHRoZQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnU2V0dGVyPC9zcGFuPjwvYT4gaW50ZXJmYWNlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZWxlbWVudCBmb3Igd2hpY2ggdG8gcG9zdCB0YWdsaXN0IHRvIGJ1cy48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wYWQgb24gd2hpY2ggdG8gcHVzaCB0YWctZXZlbnQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHRhZ2xpc3QgdG8gcG9zdCBvbiB0aGUgYnVzIGFuZCBjcmVhdGUgZXZlbnQgZnJvbS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LW1lc3NhZ2UtZnVsbCI+PC9hPjxoMz5nc3RfZWxlbWVudF9tZXNzYWdlX2Z1bGwgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfbWVzc2FnZV9mdWxsICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlVHlwZSIgdGl0bGU9ImVudW0gR3N0TWVzc2FnZVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlVHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUXVhcms8L3NwYW4+PC9hPiBkb21haW48L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gY29kZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0ZXh0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmRlYnVnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpbGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZnVuY3Rpb248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbGluZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1Bvc3QgYW4gZXJyb3IsIHdhcm5pbmcgb3IgaW5mbyBtZXNzYWdlIG9uIHRoZSBidXMgZnJvbSBpbnNpZGUgYW4gZWxlbWVudC4KKzwvcD4KKzxwPgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT4gbXVzdCBiZSBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1FUlJPUjpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX01FU1NBR0VfRVJST1I8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtV0FSTklORzpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX01FU1NBR0VfV0FSTklORzwvc3Bhbj48L2E+IG9yCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1JTkZPOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfTUVTU0FHRV9JTkZPPC9zcGFuPjwvYT4uCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIHNlbmQgbWVzc2FnZSBmcm9tPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlVHlwZSIgdGl0bGU9ImVudW0gR3N0TWVzc2FnZVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlVHlwZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRvbWFpbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgR1N0cmVhbWVyIEdFcnJvciBkb21haW4gdGhpcyBtZXNzYWdlIGJlbG9uZ3MgdG88L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvZGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIEdFcnJvciBjb2RlIGJlbG9uZ2luZyB0byB0aGUgZG9tYWluPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50ZXh0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFuIGFsbG9jYXRlZCB0ZXh0IHN0cmluZyB0byBiZSB1c2VkCithcyBhIHJlcGxhY2VtZW50IGZvciB0aGUgZGVmYXVsdCBtZXNzYWdlIGNvbm5lY3RlZCB0byBjb2RlLAorb3IgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVidWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YW4gYWxsb2NhdGVkIGRlYnVnIG1lc3NhZ2UgdG8gYmUKK3VzZWQgYXMgYSByZXBsYWNlbWVudCBmb3IgdGhlIGRlZmF1bHQgZGVidWdnaW5nIGluZm9ybWF0aW9uLAorb3IgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmlsZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc291cmNlIGNvZGUgZmlsZSB3aGVyZSB0aGUgZXJyb3Igd2FzIGdlbmVyYXRlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuY3Rpb248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNvdXJjZSBjb2RlIGZ1bmN0aW9uIHdoZXJlIHRoZSBlcnJvciB3YXMgZ2VuZXJhdGVkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saW5lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzb3VyY2UgY29kZSBsaW5lIHdoZXJlIHRoZSBlcnJvciB3YXMgZ2VuZXJhdGVkPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtcG9zdC1tZXNzYWdlIj48L2E+PGgzPmdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1Bvc3QgYSBtZXNzYWdlIG9uIHRoZSBlbGVtZW50J3MgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4uIFRoaXMgZnVuY3Rpb24gdGFrZXMgb3duZXJzaGlwIG9mIHRoZQorbWVzc2FnZTsgaWYgeW91IHdhbnQgdG8gYWNjZXNzIHRoZSBtZXNzYWdlIGFmdGVyIHRoaXMgY2FsbCwgeW91IHNob3VsZCBhZGQgYW4KK2FkZGl0aW9uYWwgcmVmZXJlbmNlIGJlZm9yZSBjYWxsaW5nLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBwb3N0aW5nIHRoZSBtZXNzYWdlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZXNzYWdlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IHRvIHBvc3QuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBtZXNzYWdlIHdhcyBzdWNjZXNzZnVsbHkgcG9zdGVkLiBUaGUgZnVuY3Rpb24gcmV0dXJucworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZiB0aGUgZWxlbWVudCBkaWQgbm90IGhhdmUgYSBidXMuCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LWdldC1xdWVyeS10eXBlcyI+PC9hPjxoMz5nc3RfZWxlbWVudF9nZXRfcXVlcnlfdHlwZXMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGUiIHRpdGxlPSJlbnVtIEdzdFF1ZXJ5VHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RRdWVyeVR5cGU8L3NwYW4+PC9hPiAqIGdzdF9lbGVtZW50X2dldF9xdWVyeV90eXBlcyAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCBhbiBhcnJheSBvZiBxdWVyeSB0eXBlcyBmcm9tIHRoZSBlbGVtZW50LgorSWYgdGhlIGVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgYSBxdWVyeSB0eXBlcyBmdW5jdGlvbiwKK3RoZSBxdWVyeSB3aWxsIGJlIGZvcndhcmRlZCB0byB0aGUgcGVlciBvZiBhIHJhbmRvbSBsaW5rZWQgc2luayBwYWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIHF1ZXJ5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QW4gYXJyYXkgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5VHlwZSIgdGl0bGU9ImVudW0gR3N0UXVlcnlUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnlUeXBlPC9zcGFuPjwvYT4gZWxlbWVudHMgdGhhdCBzaG91bGQgbm90CitiZSBmcmVlZCBvciBtb2RpZmllZC4KK01UIHNhZmUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtcXVlcnkiPjwvYT48aDM+Z3N0X2VsZW1lbnRfcXVlcnkgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2VsZW1lbnRfcXVlcnkgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1BlcmZvcm1zIGEgcXVlcnkgb24gdGhlIGdpdmVuIGVsZW1lbnQuCis8L3A+Cis8cD4KK0ZvciBlbGVtZW50cyB0aGF0IGRvbid0IGltcGxlbWVudCBhIHF1ZXJ5IGhhbmRsZXIsIHRoaXMgZnVuY3Rpb24KK2ZvcndhcmRzIHRoZSBxdWVyeSB0byBhIHJhbmRvbSBzcmNwYWQgb3IgdG8gdGhlIHBlZXIgb2YgYQorcmFuZG9tIGxpbmtlZCBzaW5rcGFkIG9mIHRoaXMgZWxlbWVudC4KKzwvcD4KKzxwPgorUGxlYXNlIG5vdGUgdGhhdCBzb21lIHF1ZXJpZXMgbWlnaHQgbmVlZCBhIHJ1bm5pbmcgcGlwZWxpbmUgdG8gd29yay4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gcGVyZm9ybSB0aGUgcXVlcnkgb24uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHF1ZXJ5IGNvdWxkIGJlIHBlcmZvcm1lZC4KK01UIHNhZmUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtcXVlcnktY29udmVydCI+PC9hPjxoMz5nc3RfZWxlbWVudF9xdWVyeV9jb252ZXJ0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9lbGVtZW50X3F1ZXJ5X2NvbnZlcnQgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IHNyY19mb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHNyY192YWw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGRlc3RfZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqZGVzdF92YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitRdWVyaWVzIGFuIGVsZW1lbnQgdG8gY29udmVydCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjX3ZhbDwvY29kZT48L2VtPiBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjX2Zvcm1hdDwvY29kZT48L2VtPiB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdF9mb3JtYXQ8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIGludm9rZSB0aGUgY29udmVydCBxdWVyeSBvbi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyY19mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gdG8gY29udmVydCBmcm9tLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIGlucHV0IGFuZCBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjX3ZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHZhbHVlIHRvIGNvbnZlcnQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0X2Zvcm1hdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IHRvIGNvbnZlcnQgdG8uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0X3ZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHF1ZXJ5IGNvdWxkIGJlIHBlcmZvcm1lZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZWxlbWVudC1xdWVyeS1wb3NpdGlvbiI+PC9hPjxoMz5nc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbiAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpjdXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitRdWVyaWVzIGFuIGVsZW1lbnQgZm9yIHRoZSBzdHJlYW0gcG9zaXRpb24uIElmIG9uZSByZXBlYXRlZGx5IGNhbGxzIHRoaXMKK2Z1bmN0aW9uIG9uZSBjYW4gYWxzbyBjcmVhdGUgYW5kIHJldXNlIGl0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcXVlcnkiIHRpdGxlPSJnc3RfZWxlbWVudF9xdWVyeSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9xdWVyeSgpPC9jb2RlPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIGludm9rZSB0aGUgcG9zaXRpb24gcXVlcnkgb24uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiByZXF1ZXN0ZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmN1cjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGxvY2F0aW9uIGluIHdoaWNoIHRvIHN0b3JlIHRoZSBjdXJyZW50Citwb3NpdGlvbiwgb3IgTlVMTC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiB0aGUgcXVlcnkgY291bGQgYmUgcGVyZm9ybWVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LXF1ZXJ5LWR1cmF0aW9uIj48L2E+PGgzPmdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKmR1cmF0aW9uPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUXVlcmllcyBhbiBlbGVtZW50IGZvciB0aGUgdG90YWwgc3RyZWFtIGR1cmF0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byBpbnZva2UgdGhlIGR1cmF0aW9uIHF1ZXJ5IG9uLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gcmVxdWVzdGVkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kdXJhdGlvbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIGxvY2F0aW9uIGluIHdoaWNoIHRvIHN0b3JlIHRoZSB0b3RhbCBkdXJhdGlvbiwgb3IgTlVMTC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHF1ZXJ5IGNvdWxkIGJlIHBlcmZvcm1lZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZWxlbWVudC1zZW5kLWV2ZW50Ij48L2E+PGgzPmdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2VuZF9ldmVudCAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NlbmRzIGFuIGV2ZW50IHRvIGFuIGVsZW1lbnQuIElmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGFuCitldmVudCBoYW5kbGVyLCB0aGUgZXZlbnQgd2lsbCBiZSBwdXNoZWQgb24gYSByYW5kb20gbGlua2VkIHNpbmsgcGFkIGZvcgordXBzdHJlYW0gZXZlbnRzIG9yIGEgcmFuZG9tIGxpbmtlZCBzb3VyY2UgcGFkIGZvciBkb3duc3RyZWFtIGV2ZW50cy4KKzwvcD4KKzxwPgorVGhpcyBmdW5jdGlvbiB0YWtlcyBvd2Vyc2hpcCBvZiB0aGUgcHJvdmlkZWQgZXZlbnQgc28geW91IHNob3VsZAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1yZWYiIHRpdGxlPSJnc3RfZXZlbnRfcmVmICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9ldmVudF9yZWYoKTwvY29kZT48L2E+IGl0IGlmIHlvdSB3YW50IHRvIHJldXNlIHRoZSBldmVudCBhZnRlciB0aGlzIGNhbGwuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIHNlbmQgdGhlIGV2ZW50IHRvLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gdG8gc2VuZCB0byB0aGUgZWxlbWVudC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGV2ZW50IHdhcyBoYW5kbGVkLgorTVQgc2FmZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZWxlbWVudC1zZWVrLXNpbXBsZSI+PC9hPjxoMz5nc3RfZWxlbWVudF9zZWVrX3NpbXBsZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfZWxlbWVudF9zZWVrX3NpbXBsZSAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdFNlZWtGbGFncyIgdGl0bGU9ImVudW0gR3N0U2Vla0ZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2Vla0ZsYWdzPC9zcGFuPjwvYT4gc2Vla19mbGFnczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc2Vla19wb3M8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTaW1wbGUgQVBJIHRvIHBlcmZvcm0gYSBzZWVrIG9uIHRoZSBnaXZlbiBlbGVtZW50LCBtZWFuaW5nIGl0IGp1c3Qgc2Vla3MKK3RvIHRoZSBnaXZlbiBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHN0cmVhbS4gRm9yIG1vcmUgY29tcGxleAorb3BlcmF0aW9ucyBsaWtlIHNlZ21lbnQgc2Vla3MgKGUuZy4gZm9yIGxvb3BpbmcpIG9yIGNoYW5naW5nIHRoZSBwbGF5YmFjaworcmF0ZSBvciBzZWVraW5nIHJlbGF0aXZlIHRvIHRoZSBsYXN0IGNvbmZpZ3VyZWQgcGxheWJhY2sgc2VnbWVudCB5b3Ugc2hvdWxkCit1c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZWVrIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2VlayAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9zZWVrKCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxwPgorSW4gYSBjb21wbGV0ZWx5IHByZXJvbGxlZCBQQVVTRUQgb3IgUExBWUlORyBwaXBlbGluZSwgc2Vla2luZyBpcyBhbHdheXMKK2d1YXJhbnRlZWQgdG8gcmV0dXJuIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IG9uIGEgc2Vla2FibGUgbWVkaWEgdHlwZSBvciA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IHdoZW4gdGhlIG1lZGlhCit0eXBlIGlzIGNlcnRhaW5seSBub3Qgc2Vla2FibGUgKHN1Y2ggYXMgYSBsaXZlIHN0cmVhbSkuCis8L3A+Cis8cD4KK1NvbWUgZWxlbWVudHMgYWxsb3cgZm9yIHNlZWtpbmcgaW4gdGhlIFJFQURZIHN0YXRlLCBpbiB0aGlzCitjYXNlIHRoZXkgd2lsbCBzdG9yZSB0aGUgc2VlayBldmVudCBhbmQgZXhlY3V0ZSBpdCB3aGVuIHRoZXkgYXJlIHB1dCB0bworUEFVU0VELiBJZiB0aGUgZWxlbWVudCBzdXBwb3J0cyBzZWVrIGluIFJFQURZLCBpdCB3aWxsIGFsd2F5cyByZXR1cm4gPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gd2hlbgoraXQgcmVjZWl2ZXMgdGhlIGV2ZW50IGluIHRoZSBSRUFEWSBzdGF0ZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gc2VlayBvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IHRvIGV4ZWN1dGUgdGhlIHNlZWsgaW4sIHN1Y2ggYXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHU1QtRk9STUFULVRJTUU6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GT1JNQVRfVElNRTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZWtfZmxhZ3M8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2VlayBvcHRpb25zOyBwbGF5YmFjayBhcHBsaWNhdGlvbnMgd2lsbCB1c3VhbGx5IHdhbnQgdG8gdXNlCitHU1RfU0VFS19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxBR19LRVlfVU5JVCBoZXJlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWVrX3BvczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb3NpdGlvbiB0byBzZWVrIHRvIChyZWxhdGl2ZSB0byB0aGUgc3RhcnQpOyBpZiB5b3UgYXJlIGRvaW5nCithIHNlZWsgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHU1QtRk9STUFULVRJTUU6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GT1JNQVRfVElNRTwvc3Bhbj48L2E+IHRoaXMgdmFsdWUgaXMgaW4gbmFub3NlY29uZHMgLQorbXVsdGlwbHkgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtU0VDT05EOkNBUFMiIHRpdGxlPSJHU1RfU0VDT05EIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1NFQ09ORDwvc3Bhbj48L2E+IHRvIGNvbnZlcnQgc2Vjb25kcyB0byBuYW5vc2Vjb25kcyBvcgord2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtTVNFQ09ORDpDQVBTIiB0aXRsZT0iR1NUX01TRUNPTkQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfTVNFQ09ORDwvc3Bhbj48L2E+IHRvIGNvbnZlcnQgbWlsbGlzZWNvbmRzIHRvIG5hbm9zZWNvbmRzLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHNlZWsgb3BlcmF0aW9uIHN1Y2NlZWRlZCAodGhlIHNlZWsgbWlnaHQgbm90IGFsd2F5cyBiZQorZXhlY3V0ZWQgaW5zdGFudGx5IHRob3VnaCk8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjc8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LXNlZWsiPjwvYT48aDM+Z3N0X2VsZW1lbnRfc2VlayAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfZWxlbWVudF9zZWVrICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IHJhdGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0U2Vla0ZsYWdzIiB0aXRsZT0iZW51bSBHc3RTZWVrRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWVrRmxhZ3M8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0U2Vla1R5cGUiIHRpdGxlPSJlbnVtIEdzdFNlZWtUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2Vla1R5cGU8L3NwYW4+PC9hPiBjdXJfdHlwZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gY3VyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RTZWVrVHlwZSIgdGl0bGU9ImVudW0gR3N0U2Vla1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWVrVHlwZTwvc3Bhbj48L2E+IHN0b3BfdHlwZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc3RvcDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NlbmRzIGEgc2VlayBldmVudCB0byBhbiBlbGVtZW50LiBTZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc2VlayIgdGl0bGU9ImdzdF9ldmVudF9uZXdfc2VlayAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZXZlbnRfbmV3X3NlZWsoKTwvY29kZT48L2E+IGZvciB0aGUgZGV0YWlscyBvZgordGhlIHBhcmFtZXRlcnMuIFRoZSBzZWVrIGV2ZW50IGlzIHNlbnQgdG8gdGhlIGVsZW1lbnQgdXNpbmcKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2VuZC1ldmVudCIgdGl0bGU9ImdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfc2VuZF9ldmVudCgpPC9jb2RlPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIHNlbmQgdGhlIGV2ZW50IHRvLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmF0ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgbmV3IHBsYXliYWNrIHJhdGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgZm9ybWF0IG9mIHRoZSBzZWVrIHZhbHVlczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZ3M8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIG9wdGlvbmFsIHNlZWsgZmxhZ3MuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jdXJfdHlwZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgdHlwZSBhbmQgZmxhZ3MgZm9yIHRoZSBuZXcgY3VycmVudCBwb3NpdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y3VyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSB2YWx1ZSBvZiB0aGUgbmV3IGN1cnJlbnQgcG9zaXRpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0b3BfdHlwZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgdHlwZSBhbmQgZmxhZ3MgZm9yIHRoZSBuZXcgc3RvcCBwb3NpdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RvcDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgdmFsdWUgb2YgdGhlIG5ldyBzdG9wIHBvc2l0aW9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgZXZlbnQgd2FzIGhhbmRsZWQuCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0RWxlbWVudC5zaWduYWwtZGV0YWlscyI+PC9hPjxoMj5TaWduYWwgRGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RFbGVtZW50LW5vLW1vcmUtcGFkcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJuby1tb3JlLXBhZHMiPC9jb2RlPiBzaWduYWw8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgdXNlcl9mdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmdzdGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgdXNlcl9kYXRhKSAgICAgICA6IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5SdW4gTGFzdDwvY29kZT48L2E+PC9wcmU+Cis8cD4KK1RoaXMgc2lnbmFscyB0aGF0IHRoZSBlbGVtZW50IHdpbGwgbm90IGdlbmVyYXRlIG1vcmUgZHluYW1pYyBwYWRzLgorTm90ZSB0aGF0IHRoaXMgc2lnbmFsIHdpbGwgdXN1YWxseSBiZSBlbWl0dGVkIGZyb20gdGhlIGNvbnRleHQgb2YKK3RoZSBzdHJlYW1pbmcgdGhyZWFkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmdzdGVsZW1lbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEVsZW1lbnQtcGFkLWFkZGVkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+InBhZC1hZGRlZCI8L2NvZGU+IHNpZ25hbDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICB1c2VyX2Z1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZ3N0ZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gICAgICpuZXdfcGFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgIHVzZXJfZGF0YSkgICAgICAgOiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+UnVuIExhc3Q8L2NvZGU+PC9hPjwvcHJlPgorPHA+CithIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBoYXMgYmVlbiBhZGRlZCB0byB0aGUgZWxlbWVudC4gTm90ZSB0aGF0IHRoaXMgc2lnbmFsIHdpbGwKK3VzdWFsbHkgYmUgZW1pdHRlZCBmcm9tIHRoZSBjb250ZXh0IG9mIHRoZSBzdHJlYW1pbmcgdGhyZWFkLiBBbHNvIGtlZXAgaW4KK21pbmQgdGhhdCBpZiB5b3UgYWRkIG5ldyBlbGVtZW50cyB0byB0aGUgcGlwZWxpbmUgaW4gdGhlIHNpZ25hbCBoYW5kbGVyCit5b3Ugd2lsbCBuZWVkIHRvIHNldCB0aGVtIHRvIHRoZSBkZXNpcmVkIHRhcmdldCBzdGF0ZSB3aXRoCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1zdGF0ZSIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9zdGF0ZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9zZXRfc3RhdGUoKTwvY29kZT48L2E+IG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc3luYy1zdGF0ZS13aXRoLXBhcmVudCIgdGl0bGU9ImdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudCgpPC9jb2RlPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Z3N0ZWxlbWVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWw8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ld19wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBhZCB0aGF0IGhhcyBiZWVuIGFkZGVkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEVsZW1lbnQtcGFkLXJlbW92ZWQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4icGFkLXJlbW92ZWQiPC9jb2RlPiBzaWduYWw8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgdXNlcl9mdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmdzdGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICAgICAqb2xkX3BhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICB1c2VyX2RhdGEpICAgICAgIDogPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlJ1biBMYXN0PC9jb2RlPjwvYT48L3ByZT4KKzxwPgorYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGVsZW1lbnQKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5nc3RlbGVtZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2xkX3BhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGFkIHRoYXQgaGFzIGJlZW4gcmVtb3ZlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdEVsZW1lbnQuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvR3N0RWxlbWVudEZhY3RvcnkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWI5MTRhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9nc3QvaHRtbC9Hc3RFbGVtZW50RmFjdG9yeS5odG1sCkBAIC0wLDAgKzEsODY1IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0RWxlbWVudEZhY3Rvcnk8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sIiB0aXRsZT0iR3N0R0Vycm9yIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNHc3RFbGVtZW50RmFjdG9yeS5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEVsZW1lbnRGYWN0b3J5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RFbGVtZW50RmFjdG9yeS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iR3N0RWxlbWVudEZhY3RvcnkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RFbGVtZW50RmFjdG9yeS50b3Bfb2ZfcGFnZSI+PC9hPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvaDI+Cis8cD5Hc3RFbGVtZW50RmFjdG9yeSDigJQgQ3JlYXRlIEdzdEVsZW1lbnRzIGZyb20gYSBmYWN0b3J5PC9wPgorPC90ZD4KKzx0ZCB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgorPC90cj48L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGEgbmFtZT0iR3N0RWxlbWVudEZhY3Rvcnkuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKKworc3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHc3RFbGVtZW50RmFjdG9yeS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0RWxlbWVudEZhY3RvcnkiPkdzdEVsZW1lbnRGYWN0b3J5PC9hPjsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtcmVnaXN0ZXIiIHRpdGxlPSJnc3RfZWxlbWVudF9yZWdpc3RlciAoKSI+Z3N0X2VsZW1lbnRfcmVnaXN0ZXI8L2E+ICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gKnBsdWdpbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gcmFuazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT4gKiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWZpbmQiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmQgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZDwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1R5cGU8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktZ2V0LWVsZW1lbnQtdHlwZSIgdGl0bGU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X2VsZW1lbnRfdHlwZSAoKSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfZWxlbWVudF90eXBlPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+ICpmYWN0b3J5PC9jb2RlPjwvZW0+KTsKK2NvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICogICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1nZXQtbWV0YWRhdGEiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YSAoKSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbWV0YWRhdGE8L2E+ICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT4gKmZhY3Rvcnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqa2V5PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1nZXQtbnVtLXBhZC10ZW1wbGF0ZXMiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9udW1fcGFkX3RlbXBsYXRlcyAoKSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbnVtX3BhZF90ZW1wbGF0ZXM8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT4gKmZhY3Rvcnk8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktZ2V0LXVyaS10eXBlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfdXJpX3R5cGUgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3VyaV90eXBlPC9hPiAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+ICpmYWN0b3J5PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICoqICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1nZXQtdXJpLXByb3RvY29scyIgdGl0bGU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3VyaV9wcm90b2NvbHMgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3VyaV9wcm90b2NvbHM8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT4gKmZhY3Rvcnk8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWhhcy1pbnRlcmZhY2UiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X2hhc19pbnRlcmZhY2UgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfaGFzX2ludGVyZmFjZTwvYT4gICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+ICpmYWN0b3J5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmludGVyZmFjZW5hbWU8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktY3JlYXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9jcmVhdGUgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlPC9hPiAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+ICpmYWN0b3J5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktbWFrZSIgdGl0bGU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoKSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlPC9hPiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmFjdG9yeW5hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktY2FuLXNpbmstYWxsLWNhcHMiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zaW5rX2FsbF9jYXBzICgpIj5nc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zaW5rX2FsbF9jYXBzPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+ICpmYWN0b3J5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktY2FuLXNyYy1hbGwtY2FwcyIgdGl0bGU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NyY19hbGxfY2FwcyAoKSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc3JjX2FsbF9jYXBzPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+ICpmYWN0b3J5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktY2FuLXNpbmstYW55LWNhcHMiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zaW5rX2FueV9jYXBzICgpIj5nc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zaW5rX2FueV9jYXBzPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+ICpmYWN0b3J5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktY2FuLXNyYy1hbnktY2FwcyIgdGl0bGU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NyY19hbnlfY2FwcyAoKSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc3JjX2FueV9jYXBzPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+ICpmYWN0b3J5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7Citjb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HTGlzdDwvc3Bhbj48L2E+ICogICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1nZXQtc3RhdGljLXBhZC10ZW1wbGF0ZXMiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9zdGF0aWNfcGFkX3RlbXBsYXRlcyAoKSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfc3RhdGljX3BhZF90ZW1wbGF0ZXM8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT4gKmZhY3Rvcnk8L2NvZGU+PC9lbT4pOwordHlwZWRlZiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHc3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnlMaXN0VHlwZSI+R3N0RWxlbWVudEZhY3RvcnlMaXN0VHlwZTwvYT47CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1BTlk6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9BTlkiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9BTlk8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1BVURJT1ZJREVPLVNJTktTOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQVVESU9WSURFT19TSU5LUyI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0FVRElPVklERU9fU0lOS1M8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1BVURJTy1FTkNPREVSOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQVVESU9fRU5DT0RFUiI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0FVRElPX0VOQ09ERVI8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1ERUNPREFCTEU6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNPREFCTEUiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNPREFCTEU8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1ERUNPREVSOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVDT0RFUiI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09ERVI8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1ERU1VWEVSOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVNVVhFUiI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFTVVYRVI8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1ERVBBWUxPQURFUjpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFUEFZTE9BREVSIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVQQVlMT0FERVI8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1FTkNPREVSOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfRU5DT0RFUiI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0VOQ09ERVI8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1GT1JNQVRURVI6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9GT1JNQVRURVIiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9GT1JNQVRURVI8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NQVgtRUxFTUVOVFM6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NQVhfRUxFTUVOVFMiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NQVhfRUxFTUVOVFM8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NRURJQS1BVURJTzpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX0FVRElPIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQVVESU88L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NRURJQS1JTUFHRTpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX0lNQUdFIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfSU1BR0U8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NRURJQS1NRVRBREFUQTpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX01FVEFEQVRBIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfTUVUQURBVEE8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NRURJQS1TVUJUSVRMRTpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX1NVQlRJVExFIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfU1VCVElUTEU8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NRURJQS1WSURFTzpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX1ZJREVPIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfVklERU88L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NRURJQS1BTlk6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9BTlkiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9BTlk8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NVVhFUjpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01VWEVSIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTVVYRVI8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1QQVJTRVI6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVJTRVIiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVJTRVI8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1QQVlMT0FERVI6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVlMT0FERVIiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVlMT0FERVI8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1TSU5LOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfU0lOSyI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1NJTks8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1TUkM6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9TUkMiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9TUkM8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1WSURFTy1FTkNPREVSOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfVklERU9fRU5DT0RFUiI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1ZJREVPX0VOQ09ERVI8L2E+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HTGlzdDwvc3Bhbj48L2E+ICogICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1saXN0LWZpbHRlciIgdGl0bGU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9maWx0ZXIgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9maWx0ZXI8L2E+ICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZERpcmVjdGlvbiIgdGl0bGU9ImVudW0gR3N0UGFkRGlyZWN0aW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkRGlyZWN0aW9uPC9zcGFuPjwvYT4gZGlyZWN0aW9uPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gc3Vic2V0b25seTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HTGlzdDwvc3Bhbj48L2E+ICogICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1saXN0LWdldC1lbGVtZW50cyIgdGl0bGU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHM8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR3N0RWxlbWVudEZhY3RvcnlMaXN0VHlwZSIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI0dzdFJhbmsiIHRpdGxlPSJlbnVtIEdzdFJhbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSYW5rPC9zcGFuPjwvYT4gbWlucmFuazwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktbGlzdC1pcy10eXBlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2lzX3R5cGUgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9pc190eXBlPC9hPiAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+ICpmYWN0b3J5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGUiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudEZhY3RvcnlMaXN0VHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4pOworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdEVsZW1lbnRGYWN0b3J5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij5HT2JqZWN0PC9hPgorICAgKy0tLS08YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgorICAgICAgICAgKy0tLS08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KKyAgICAgICAgICAgICAgICstLS0tPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPkdzdFBsdWdpbkZlYXR1cmU8L2E+CisgICAgICAgICAgICAgICAgICAgICArLS0tLUdzdEVsZW1lbnRGYWN0b3J5Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0RWxlbWVudEZhY3RvcnkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudEZhY3Rvcnk8L3NwYW4+PC9hPiBpcyB1c2VkIHRvIGNyZWF0ZSBpbnN0YW5jZXMgb2YgZWxlbWVudHMuIEEKK0dzdEVsZW1lbnRmYWN0b3J5IGNhbiBiZSBhZGRlZCB0byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+IGFzIGl0IGlzIGFsc28gYQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5GZWF0dXJlPC9zcGFuPjwvYT4uCis8L3A+Cis8cD4KK1VzZSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1maW5kIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9maW5kICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZCgpPC9jb2RlPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktY3JlYXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9jcmVhdGUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9jcmVhdGUoKTwvY29kZT48L2E+CitmdW5jdGlvbnMgdG8gY3JlYXRlIGVsZW1lbnQgaW5zdGFuY2VzIG9yIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LW1ha2UiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCk8L2NvZGU+PC9hPiBhcyBhCitjb252ZW5pZW50IHNob3J0Y3V0LgorPC9wPgorPHA+CitUaGUgZm9sbG93aW5nIGNvZGUgZXhhbXBsZSBzaG93cyB5b3UgaG93IHRvIGNyZWF0ZSBhIEdzdEZpbGVTcmMgZWxlbWVudC4KKzwvcD4KKzxwPgorPC9wPgorPGRpdiBjbGFzcz0iZXhhbXBsZSI+Cis8YSBuYW1lPSJpZDUzMTY0NCI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZcKgNi7CoFVzaW5nIGFuIGVsZW1lbnQgZmFjdG9yeTwvYj48L3A+Cis8ZGl2IGNsYXNzPSJleGFtcGxlLWNvbnRlbnRzIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CisgICNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7CisKKyAgR3N0RWxlbWVudCAqc3JjOworICBHc3RFbGVtZW50RmFjdG9yeSAqc3JjZmFjdG9yeTsKKworICBnc3RfaW5pdCAoJmFtcDthcmdjLCAmYW1wO2FyZ3YpOworCisgIHNyY2ZhY3RvcnkgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmQgKCJmaWxlc3JjIik7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKHNyY2ZhY3RvcnkgIT0gTlVMTCk7CisgIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlIChzcmNmYWN0b3J5LCAic3JjIik7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKHNyYyAhPSBOVUxMKTsKKyAgLi4uCis8L3ByZT48L2Rpdj4KKzwvZGl2PgorPHA+PGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj4KKzwvcD4KKzxwPgorTGFzdCByZXZpZXdlZCBvbiAyMDA1LTExLTIzICgwLjkuNSkKKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0RWxlbWVudEZhY3RvcnkuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEVsZW1lbnRGYWN0b3J5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0RWxlbWVudEZhY3Rvcnk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RFbGVtZW50RmFjdG9yeTs8L3ByZT4KKzxwPgorVGhlIG9wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudEZhY3Rvcnk8L3NwYW4+PC9hPiBkYXRhIHN0cnVjdHVyZS4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtcmVnaXN0ZXIiPjwvYT48aDM+Z3N0X2VsZW1lbnRfcmVnaXN0ZXIgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqcGx1Z2luPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiByYW5rPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlIGEgbmV3IGVsZW1lbnRmYWN0b3J5IGNhcGFibGUgb2YgaW5zdGFudGlhdGluZyBvYmplY3RzIG9mIHRoZQorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT4gYW5kIGFkZCB0aGUgZmFjdG9yeSB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGx1Z2luPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBsdWdpbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+IHRvIHJlZ2lzdGVyIHRoZSBlbGVtZW50IHdpdGgsIG9yIE5VTEwgZm9yCithIHN0YXRpYyBlbGVtZW50IChub3RlIHRoYXQgcGFzc2luZyBOVUxMIG9ubHkgd29ya3MgaW4gR1N0cmVhbWVyIDAuMTAuMTMKK2FuZCBsYXRlcikuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5uYW1lIG9mIGVsZW1lbnRzIG9mIHRoaXMgdHlwZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmFuazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5yYW5rIG9mIGVsZW1lbnQgKGhpZ2hlciByYW5rIG1lYW5zIG1vcmUgaW1wb3J0YW5jZSB3aGVuIGF1dG9wbHVnZ2luZyk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+R1R5cGUgb2YgZWxlbWVudCB0byByZWdpc3RlcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUsIGlmIHRoZSByZWdpc3RlcmluZyBzdWNjZWVkZWQsIEZBTFNFIG9uIGVycm9yPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1maW5kIj48L2E+PGgzPmdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+ICogZ3N0X2VsZW1lbnRfZmFjdG9yeV9maW5kICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2VhcmNoIGZvciBhbiBlbGVtZW50IGZhY3Rvcnkgb2YgdGhlIGdpdmVuIG5hbWUuIFJlZnMgdGhlIHJldHVybmVkCitlbGVtZW50IGZhY3Rvcnk7IGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgdW5yZWZmaW5nLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bmFtZSBvZiBmYWN0b3J5IHRvIGZpbmQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+IGlmIGZvdW5kLCBOVUxMIG90aGVyd2lzZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LWZhY3RvcnktZ2V0LWVsZW1lbnQtdHlwZSI+PC9hPjxoMz5nc3RfZWxlbWVudF9mYWN0b3J5X2dldF9lbGVtZW50X3R5cGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdUeXBlPC9zcGFuPjwvYT4gICAgICAgICAgICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9lbGVtZW50X3R5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudEZhY3Rvcnk8L3NwYW4+PC9hPiAqZmFjdG9yeTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCB0aGUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IGZvciBlbGVtZW50cyBtYW5hZ2VkIGJ5IHRoaXMgZmFjdG9yeS4gVGhlIHR5cGUgY2FuCitvbmx5IGJlIHJldHJpZXZlZCBpZiB0aGUgZWxlbWVudCBmYWN0b3J5IGlzIGxvYWRlZCwgd2hpY2ggY2FuIGJlCithc3N1cmVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtbG9hZCIgdGl0bGU9ImdzdF9wbHVnaW5fZmVhdHVyZV9sb2FkICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wbHVnaW5fZmVhdHVyZV9sb2FkKCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mYWN0b3J5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmZhY3RvcnkgdG8gZ2V0IG1hbmFnZWQgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IGZyb208L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IGZvciBlbGVtZW50cyBtYW5hZ2VkIGJ5IHRoaXMgZmFjdG9yeSBvciAwIGlmCit0aGUgZmFjdG9yeSBpcyBub3QgbG9hZGVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LWZhY3RvcnktZ2V0LW1ldGFkYXRhIj48L2E+PGgzPmdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X21ldGFkYXRhICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X21ldGFkYXRhICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT4gKmZhY3Rvcnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqa2V5PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1nZXQtbnVtLXBhZC10ZW1wbGF0ZXMiPjwvYT48aDM+Z3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbnVtX3BhZF90ZW1wbGF0ZXMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbnVtX3BhZF90ZW1wbGF0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudEZhY3Rvcnk8L3NwYW4+PC9hPiAqZmFjdG9yeTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIG51bWJlciBvZiBwYWRfdGVtcGxhdGVzIGluIHRoaXMgZmFjdG9yeS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mYWN0b3J5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBudW1iZXIgb2YgcGFkX3RlbXBsYXRlczwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LWZhY3RvcnktZ2V0LXVyaS10eXBlIj48L2E+PGgzPmdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3VyaV90eXBlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfdXJpX3R5cGUgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudEZhY3Rvcnk8L3NwYW4+PC9hPiAqZmFjdG9yeTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIHR5cGUgb2YgVVJJcyB0aGUgZWxlbWVudCBzdXBwb3J0cyBvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHU1QtVVJJLVVOS05PV046Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9VUklfVU5LTk9XTjwvc3Bhbj48L2E+IGlmIG5vbmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmFjdG9yeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50eXBlIG9mIFVSSXMgdGhpcyBlbGVtZW50IHN1cHBvcnRzPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1nZXQtdXJpLXByb3RvY29scyI+PC9hPjxoMz5nc3RfZWxlbWVudF9mYWN0b3J5X2dldF91cmlfcHJvdG9jb2xzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKiAgICAgICAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3VyaV9wcm90b2NvbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudEZhY3Rvcnk8L3NwYW4+PC9hPiAqZmFjdG9yeTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgYSBOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2YgcHJvdG9jb2xzIHRoaXMgZWxlbWVudCBzdXBwb3J0cyBvciBOVUxMIGlmCitubyBwcm90b2NvbHMgYXJlIHN1cHBvcnRlZC4gWW91IG1heSBub3QgY2hhbmdlIHRoZSBjb250ZW50cyBvZiB0aGUgcmV0dXJuZWQKK2FycmF5LCBhcyBpdCBpcyBzdGlsbCBvd25lZCBieSB0aGUgZWxlbWVudCBmYWN0b3J5LiBVc2UgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdHJpbmctVXRpbGl0eS1GdW5jdGlvbnMuaHRtbCNnLXN0cmR1cHYiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19zdHJkdXB2KCk8L2NvZGU+PC9hPiB0bworbWFrZSBhIGNvcHkgb2YgdGhlIHByb3RvY29sIHN0cmluZyBhcnJheSBpZiB5b3UgbmVlZCB0by4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mYWN0b3J5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzdXBwb3J0ZWQgcHJvdG9jb2xzCitvciBOVUxMLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gemVyby10ZXJtaW5hdGVkPTFdPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1oYXMtaW50ZXJmYWNlIj48L2E+PGgzPmdzdF9lbGVtZW50X2ZhY3RvcnlfaGFzX2ludGVyZmFjZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X2hhc19pbnRlcmZhY2UgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+ICpmYWN0b3J5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmludGVyZmFjZW5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDaGVjayBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmFjdG9yeTwvY29kZT48L2VtPiBpbXBsZW1lbnRzIHRoZSBpbnRlcmZhY2Ugd2l0aCBuYW1lIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbnRlcmZhY2VuYW1lPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZhY3Rvcnk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudEZhY3Rvcnk8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbnRlcmZhY2VuYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFuIGludGVyZmFjZSBuYW1lPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPlRSVUU8L3NwYW4+PC9hPiB3aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mYWN0b3J5PC9jb2RlPjwvZW0+IGltcGxlbWVudCB0aGUgaW50ZXJmYWNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LWZhY3RvcnktY3JlYXRlIj48L2E+PGgzPmdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKiAgICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9jcmVhdGUgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudEZhY3Rvcnk8L3NwYW4+PC9hPiAqZmFjdG9yeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlIGEgbmV3IGVsZW1lbnQgb2YgdGhlIHR5cGUgZGVmaW5lZCBieSB0aGUgZ2l2ZW4gZWxlbWVudGZhY3RvcnkuCitJdCB3aWxsIGJlIGdpdmVuIHRoZSBuYW1lIHN1cHBsaWVkLCBzaW5jZSBhbGwgZWxlbWVudHMgcmVxdWlyZSBhIG5hbWUgYXMKK3RoZWlyIGZpcnN0IGFyZ3VtZW50LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZhY3Rvcnk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZmFjdG9yeSB0byBpbnN0YW50aWF0ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5uYW1lIG9mIG5ldyBlbGVtZW50LCBvciBOVUxMIHRvIGF1dG9tYXRpY2FsbHkgY3JlYXRlCithIHVuaXF1ZSBuYW1lLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5uZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gb3IgTlVMTCBpZiB0aGUgZWxlbWVudCBjb3VsZG4ndAorYmUgY3JlYXRlZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LWZhY3RvcnktbWFrZSI+PC9hPjxoMz5nc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqICAgICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZhY3RvcnluYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGUgYSBuZXcgZWxlbWVudCBvZiB0aGUgdHlwZSBkZWZpbmVkIGJ5IHRoZSBnaXZlbiBlbGVtZW50IGZhY3RvcnkuCitJZiBuYW1lIGlzIE5VTEwsIHRoZW4gdGhlIGVsZW1lbnQgd2lsbCByZWNlaXZlIGEgZ3VhcmFudGVlZCB1bmlxdWUgbmFtZSwKK2NvbnNpc3Rpbmcgb2YgdGhlIGVsZW1lbnQgZmFjdG9yeSBuYW1lIGFuZCBhIG51bWJlci4KK0lmIG5hbWUgaXMgZ2l2ZW4sIGl0IHdpbGwgYmUgZ2l2ZW4gdGhlIG5hbWUgc3VwcGxpZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmFjdG9yeW5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuYW1lZCBmYWN0b3J5IHRvIGluc3RhbnRpYXRlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm5hbWUgb2YgbmV3IGVsZW1lbnQsIG9yIE5VTEwgdG8gYXV0b21hdGljYWxseSBjcmVhdGUKK2EgdW5pcXVlIG5hbWUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBvciBOVUxMIGlmIHVuYWJsZSB0byBjcmVhdGUgZWxlbWVudC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LWZhY3RvcnktY2FuLXNpbmstYWxsLWNhcHMiPjwvYT48aDM+Z3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc2lua19hbGxfY2FwcyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zaW5rX2FsbF9jYXBzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT4gKmZhY3Rvcnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2tzIGlmIHRoZSBmYWN0b3J5IGNhbiBzaW5rIGFsbCBwb3NzaWJsZSBjYXBhYmlsaXRpZXMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmFjdG9yeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5mYWN0b3J5IHRvIHF1ZXJ5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjYXBzIHRvIGNoZWNrPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgY2FwcyBhcmUgZnVsbHkgY29tcGF0aWJsZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZWxlbWVudC1mYWN0b3J5LWNhbi1zcmMtYWxsLWNhcHMiPjwvYT48aDM+Z3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc3JjX2FsbF9jYXBzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NyY19hbGxfY2FwcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+ICpmYWN0b3J5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NoZWNrcyBpZiB0aGUgZmFjdG9yeSBjYW4gc3JjIGFsbCBwb3NzaWJsZSBjYXBhYmlsaXRpZXMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmFjdG9yeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5mYWN0b3J5IHRvIHF1ZXJ5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjYXBzIHRvIGNoZWNrPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgY2FwcyBhcmUgZnVsbHkgY29tcGF0aWJsZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZWxlbWVudC1mYWN0b3J5LWNhbi1zaW5rLWFueS1jYXBzIj48L2E+PGgzPmdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NpbmtfYW55X2NhcHMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc2lua19hbnlfY2FwcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+ICpmYWN0b3J5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NoZWNrcyBpZiB0aGUgZmFjdG9yeSBjYW4gc2luayBhbnkgcG9zc2libGUgY2FwYWJpbGl0eS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mYWN0b3J5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmZhY3RvcnkgdG8gcXVlcnk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGNhcHMgdG8gY2hlY2s8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBjYXBzIGhhdmUgYSBjb21tb24gc3Vic2V0LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzM8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LWZhY3RvcnktY2FuLXNyYy1hbnktY2FwcyI+PC9hPjxoMz5nc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zcmNfYW55X2NhcHMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc3JjX2FueV9jYXBzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT4gKmZhY3Rvcnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2tzIGlmIHRoZSBmYWN0b3J5IGNhbiBzcmMgYW55IHBvc3NpYmxlIGNhcGFiaWxpdHkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmFjdG9yeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5mYWN0b3J5IHRvIHF1ZXJ5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjYXBzIHRvIGNoZWNrPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgY2FwcyBoYXZlIGEgY29tbW9uIHN1YnNldC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZWxlbWVudC1mYWN0b3J5LWdldC1zdGF0aWMtcGFkLXRlbXBsYXRlcyI+PC9hPjxoMz5nc3RfZWxlbWVudF9mYWN0b3J5X2dldF9zdGF0aWNfcGFkX3RlbXBsYXRlcyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPiAqICAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3N0YXRpY19wYWRfdGVtcGxhdGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT4gKmZhY3Rvcnk8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXRzIHRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0U3RhdGljUGFkVGVtcGxhdGUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RhdGljUGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0aWNQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+IGZvciB0aGlzIGZhY3RvcnkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmFjdG9yeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUKK3N0YXRpYyBwYWQgdGVtcGxhdGVzLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IEdzdC5TdGF0aWNQYWRUZW1wbGF0ZV08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlIj48L2E+PGgzPkdzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZ3VpbnQ2NCBHc3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlOworPC9wcmU+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1BTlk6Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQU5ZPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQU5ZICgoR19HVUlOVDY0X0NPTlNUQU5UICgxKSAmbHQ7Jmx0OyA0OSkgLSAxKQorPC9wcmU+Cis8cD4KK0VsZW1lbnRzIG9mIGFueSBvZiB0aGUgZGVmaW5lZCBHU1RfRUxFTUVOVF9GQUNUT1JZX0xJU1QgdHlwZXMKKzwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLUFVRElPVklERU8tU0lOS1M6Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQVVESU9WSURFT19TSU5LUzwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQVVESU9WSURFT19TSU5LUyAoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1NJTksgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQVVESU8gfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfVklERU8gfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfSU1BR0UpCis8L3ByZT4KKzxwPgorQWxsIHNpbmtzIGhhbmRsaW5nIGF1ZGlvLCB2aWRlbyBvciBpbWFnZSBtZWRpYSB0eXBlcworPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMxPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtQVVESU8tRU5DT0RFUjpDQVBTIj48L2E+PGgzPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9BVURJT19FTkNPREVSPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9BVURJT19FTkNPREVSIChHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfRU5DT0RFUiB8IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9BVURJTykKKzwvcHJlPgorPHA+CitBbGwgZW5jb2RlcnMgaGFuZGxpbmcgYXVkaW8gbWVkaWEgdHlwZXMKKzwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLURFQ09EQUJMRTpDQVBTIj48L2E+PGgzPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNPREFCTEU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09EQUJMRTwvcHJlPgorPHA+CitBbGwgZWxlbWVudHMgdXNlZCB0byAnZGVjb2RlJyBzdHJlYW1zIChkZWNvZGVycywgZGVtdXhlcnMsIHBhcnNlcnMsIGRlcGF5bG9hZGVycykKKzwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLURFQ09ERVI6Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVDT0RFUjwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09ERVIgICAgICAgIChHX0dVSU5UNjRfQ09OU1RBTlQgKDEpICZsdDsmbHQ7IDApCis8L3ByZT4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLURFTVVYRVI6Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVNVVhFUjwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFTVVYRVIgICAgICAgIChHX0dVSU5UNjRfQ09OU1RBTlQgKDEpICZsdDsmbHQ7IDUpCis8L3ByZT4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLURFUEFZTE9BREVSOkNBUFMiPjwvYT48aDM+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFUEFZTE9BREVSPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVQQVlMT0FERVIgICAgKEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgJmx0OyZsdDsgOCkKKzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtRU5DT0RFUjpDQVBTIj48L2E+PGgzPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9FTkNPREVSPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfRU5DT0RFUiAgICAgICAgKEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgJmx0OyZsdDsgMSkKKzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtRk9STUFUVEVSOkNBUFMiPjwvYT48aDM+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0ZPUk1BVFRFUjwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0ZPUk1BVFRFUiAgICAgIChHX0dVSU5UNjRfQ09OU1RBTlQgKDEpICZsdDsmbHQ7IDkpCis8L3ByZT4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLU1BWC1FTEVNRU5UUzpDQVBTIj48L2E+PGgzPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NQVhfRUxFTUVOVFM8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NQVhfRUxFTUVOVFMgICAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSAmbHQ7Jmx0OyA0OCkKKzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtQVVESU86Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQVVESU88L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9BVURJTyAgICAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSAmbHQ7Jmx0OyA1MCkKKzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtSU1BR0U6Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfSU1BR0U8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9JTUFHRSAgICAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSAmbHQ7Jmx0OyA1MSkKKzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtTUVUQURBVEE6Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfTUVUQURBVEE8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9NRVRBREFUQSAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSAmbHQ7Jmx0OyA1MykKKzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtU1VCVElUTEU6Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfU1VCVElUTEU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9TVUJUSVRMRSAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSAmbHQ7Jmx0OyA1MikKKzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtVklERU86Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfVklERU88L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9WSURFTyAgICAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSAmbHQ7Jmx0OyA0OSkKKzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtQU5ZOkNBUFMiPjwvYT48aDM+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX0FOWTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQU5ZICh+R19HVUlOVDY0X0NPTlNUQU5UICgwKSAmbHQ7Jmx0OyA0OCkKKzwvcHJlPgorPHA+CitFbGVtZW50cyBtYXRjaGluZyBhbnkgb2YgdGhlIGRlZmluZWQgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBIHR5cGVzCis8L3A+Cis8cD4KK05vdGU6IERvIG5vdCB1c2UgdGhpcyBpZiB5b3Ugd2lzaCB0byBub3QgZmlsdGVyIGFnYWluc3QgYW55IG9mIHRoZSBkZWZpbmVkCittZWRpYSB0eXBlcy4gSWYgeW91IHdpc2ggdG8gZG8gdGhpcywgc2ltcGx5IGRvbid0IHNwZWNpZnkgYW55IAorR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBIGZsYWcuCis8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NVVhFUjpDQVBTIj48L2E+PGgzPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NVVhFUjwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01VWEVSICAgICAgICAgIChHX0dVSU5UNjRfQ09OU1RBTlQgKDEpICZsdDsmbHQ7IDQpCis8L3ByZT4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLVBBUlNFUjpDQVBTIj48L2E+PGgzPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVJTRVI8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVJTRVIgICAgICAgICAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSAmbHQ7Jmx0OyA2KQorPC9wcmU+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1QQVlMT0FERVI6Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfUEFZTE9BREVSPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfUEFZTE9BREVSICAgICAgKEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgJmx0OyZsdDsgNykKKzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtU0lOSzpDQVBTIj48L2E+PGgzPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9TSU5LPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfU0lOSyAgICAgICAgICAgKEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgJmx0OyZsdDsgMikKKzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtU1JDOkNBUFMiPjwvYT48aDM+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1NSQzwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1NSQyAgICAgICAgICAgIChHX0dVSU5UNjRfQ09OU1RBTlQgKDEpICZsdDsmbHQ7IDMpCis8L3ByZT4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLVZJREVPLUVOQ09ERVI6Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfVklERU9fRU5DT0RFUjwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfVklERU9fRU5DT0RFUiAoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0VOQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfVklERU8gfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfSU1BR0UpCis8L3ByZT4KKzxwPgorQWxsIGVuY29kZXJzIGhhbmRsaW5nIHZpZGVvIG9yIGltYWdlIG1lZGlhIHR5cGVzCis8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lbGVtZW50LWZhY3RvcnktbGlzdC1maWx0ZXIiPjwvYT48aDM+Z3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2ZpbHRlciAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPiAqICAgICAgICAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9maWx0ZXIgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRGlyZWN0aW9uIiB0aXRsZT0iZW51bSBHc3RQYWREaXJlY3Rpb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWREaXJlY3Rpb248L3NwYW4+PC9hPiBkaXJlY3Rpb248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBzdWJzZXRvbmx5PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRmlsdGVyIG91dCBhbGwgdGhlIGVsZW1lbnRmYWN0b3JpZXMgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT4gdGhhdCBjYW4gaGFuZGxlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+IGluCit0aGUgZ2l2ZW4gZGlyZWN0aW9uLgorPC9wPgorPHA+CitJZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3Vic2V0b25seTwvY29kZT48L2VtPiBpcyA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiwgdGhlbiBvbmx5IHRoZSBlbGVtZW50cyB3aG9zZSBwYWRzIHRlbXBsYXRlcworYXJlIGEgY29tcGxldGUgc3VwZXJzZXQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4gd2lsbCBiZSByZXR1cm5lZC4gRWxzZSBhbnkgZWxlbWVudAord2hvc2UgcGFkIHRlbXBsYXRlcyBjYXBzIGNhbiBpbnRlcnNlY3Qgd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPiB3aWxsIGJlIHJldHVybmVkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gb2YKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+IHRvIGZpbHRlci4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3QuRWxlbWVudEZhY3RvcnldPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRpcmVjdGlvbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWREaXJlY3Rpb24iIHRpdGxlPSJlbnVtIEdzdFBhZERpcmVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZERpcmVjdGlvbjwvc3Bhbj48L2E+IHRvIGZpbHRlciBvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3Vic2V0b25seTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD53aGV0aGVyIHRvIGZpbHRlciBvbiBjYXBzIHN1YnNldHMgb3Igbm90LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+IG9mCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudEZhY3Rvcnk8L3NwYW4+PC9hPiBlbGVtZW50cyB0aGF0IG1hdGNoIHRoZSBnaXZlbiByZXF1aXNpdHMuCitVc2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtbGlzdC1mcmVlIiB0aXRsZT0iZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWU8L3NwYW4+PC9hPiBhZnRlciB1c2FnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3QuRWxlbWVudEZhY3RvcnldPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1saXN0LWdldC1lbGVtZW50cyI+PC9hPjxoMz5nc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZ2V0X2VsZW1lbnRzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HTGlzdDwvc3Bhbj48L2E+ICogICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2dldF9lbGVtZW50cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGUiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudEZhY3RvcnlMaXN0VHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNHc3RSYW5rIiB0aXRsZT0iZW51bSBHc3RSYW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmFuazwvc3Bhbj48L2E+IG1pbnJhbms8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgYSBsaXN0IG9mIGZhY3RvcmllcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTwvY29kZT48L2VtPi4gT25seSBlbGVtZW50cword2l0aCBhIHJhbmsgZ3JlYXRlciBvciBlcXVhbCB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWlucmFuazwvY29kZT48L2VtPiB3aWxsIGJlIHJldHVybmVkLgorVGhlIGxpc3Qgb2YgZmFjdG9yaWVzIGlzIHJldHVybmVkIGJ5IGRlY3JlYXNpbmcgcmFuay4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR3N0RWxlbWVudEZhY3RvcnlMaXN0VHlwZSIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWlucmFuazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5NaW5pbXVtIHJhbms8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiBvZgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT4gZWxlbWVudHMuIFVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI2dzdC1wbHVnaW4tZmVhdHVyZS1saXN0LWZyZWUiIHRpdGxlPSJnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUoKTwvY29kZT48L2E+IGFmdGVyCit1c2FnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3QuRWxlbWVudEZhY3RvcnldPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1saXN0LWlzLXR5cGUiPjwvYT48aDM+Z3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2lzX3R5cGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2lzX3R5cGUgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudEZhY3Rvcnk8L3NwYW4+PC9hPiAqZmFjdG9yeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHc3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnlMaXN0VHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2sgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZhY3Rvcnk8L2NvZGU+PC9lbT4gaXMgb2YgdGhlIGdpdmVuIHR5cGVzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZhY3Rvcnk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudEZhY3Rvcnk8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR3N0RWxlbWVudEZhY3RvcnlMaXN0VHlwZSIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZhY3Rvcnk8L2NvZGU+PC9lbT4gaXMgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RFbGVtZW50RmFjdG9yeS5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPi4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9Hc3RHaG9zdFBhZC5odG1sIGIvZG9jcy9nc3QvaHRtbC9Hc3RHaG9zdFBhZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNmJlYjEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dzdC9odG1sL0dzdEdob3N0UGFkLmh0bWwKQEAgLTAsMCArMSw4MjMgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5Hc3RHaG9zdFBhZDwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCIgdGl0bGU9IkdzdEZvcm1hdCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RJbmRleC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI0dzdEdob3N0UGFkLnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0R2hvc3RQYWQuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEdob3N0UGFkLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJHc3RHaG9zdFBhZCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9IkdzdEdob3N0UGFkLnRvcF9vZl9wYWdlIj48L2E+R3N0R2hvc3RQYWQ8L3NwYW4+PC9oMj4KKzxwPkdzdEdob3N0UGFkIOKAlCBQc2V1ZG8gbGluayBwYWRzPC9wPgorPC90ZD4KKzx0ZCB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgorPC90cj48L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGEgbmFtZT0iR3N0R2hvc3RQYWQuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPGEgbmFtZT0iR3N0UHJveHlQYWQiPjwvYT48cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisjaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OworCitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI0dzdFByb3h5UGFkLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RQcm94eVBhZCI+R3N0UHJveHlQYWQ8L2E+Oworc3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNHc3RHaG9zdFBhZC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0R2hvc3RQYWQiPkdzdEdob3N0UGFkPC9hPjsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1uZXciIHRpdGxlPSJnc3RfZ2hvc3RfcGFkX25ldyAoKSI+Z3N0X2dob3N0X3BhZF9uZXc8L2E+ICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqdGFyZ2V0PC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1uZXctbm8tdGFyZ2V0IiB0aXRsZT0iZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0ICgpIj5nc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXQ8L2E+ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWREaXJlY3Rpb24iIHRpdGxlPSJlbnVtIEdzdFBhZERpcmVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZERpcmVjdGlvbjwvc3Bhbj48L2E+IGRpcjwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkPC9zcGFuPjwvYT4gKiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1naG9zdC1wYWQtbmV3LWZyb20tdGVtcGxhdGUiIHRpdGxlPSJnc3RfZ2hvc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlICgpIj5nc3RfZ2hvc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlPC9hPiAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICp0YXJnZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKnRlbXBsPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1uZXctbm8tdGFyZ2V0LWZyb20tdGVtcGxhdGUiIHRpdGxlPSJnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXRfZnJvbV90ZW1wbGF0ZSAoKSI+Z3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0X2Zyb21fdGVtcGxhdGU8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPiAqdGVtcGw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLXNldC10YXJnZXQiIHRpdGxlPSJnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQgKCkiPmdzdF9naG9zdF9wYWRfc2V0X3RhcmdldDwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sIiB0aXRsZT0iR3N0R2hvc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RHaG9zdFBhZDwvc3Bhbj48L2E+ICpncGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpuZXd0YXJnZXQ8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+ICogICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLWdldC10YXJnZXQiIHRpdGxlPSJnc3RfZ2hvc3RfcGFkX2dldF90YXJnZXQgKCkiPmdzdF9naG9zdF9wYWRfZ2V0X3RhcmdldDwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sIiB0aXRsZT0iR3N0R2hvc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RHaG9zdFBhZDwvc3Bhbj48L2E+ICpncGFkPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1jb25zdHJ1Y3QiIHRpdGxlPSJnc3RfZ2hvc3RfcGFkX2NvbnN0cnVjdCAoKSI+Z3N0X2dob3N0X3BhZF9jb25zdHJ1Y3Q8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RHaG9zdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEdob3N0UGFkPC9zcGFuPjwvYT4gKmdwYWQ8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLXVubGluay1kZWZhdWx0IiB0aXRsZT0iZ3N0X2dob3N0X3BhZF91bmxpbmtfZGVmYXVsdCAoKSI+Z3N0X2dob3N0X3BhZF91bmxpbmtfZGVmYXVsdDwvYT4gICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkTGlua1JldHVybiIgdGl0bGU9ImVudW0gR3N0UGFkTGlua1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWRMaW5rUmV0dXJuPC9zcGFuPjwvYT4gICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1saW5rLWRlZmF1bHQiIHRpdGxlPSJnc3RfZ2hvc3RfcGFkX2xpbmtfZGVmYXVsdCAoKSI+Z3N0X2dob3N0X3BhZF9saW5rX2RlZmF1bHQ8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGVlcjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1naG9zdC1wYWQtYWN0aXZhdGUtcHVsbC1kZWZhdWx0IiB0aXRsZT0iZ3N0X2dob3N0X3BhZF9hY3RpdmF0ZV9wdWxsX2RlZmF1bHQgKCkiPmdzdF9naG9zdF9wYWRfYWN0aXZhdGVfcHVsbF9kZWZhdWx0PC9hPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBhY3RpdmU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLWFjdGl2YXRlLXB1c2gtZGVmYXVsdCIgdGl0bGU9ImdzdF9naG9zdF9wYWRfYWN0aXZhdGVfcHVzaF9kZWZhdWx0ICgpIj5nc3RfZ2hvc3RfcGFkX2FjdGl2YXRlX3B1c2hfZGVmYXVsdDwvYT4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gYWN0aXZlPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1pbnRlcm5hbC1hY3RpdmF0ZS1wdXNoLWRlZmF1bHQiIHRpdGxlPSJnc3RfZ2hvc3RfcGFkX2ludGVybmFsX2FjdGl2YXRlX3B1c2hfZGVmYXVsdCAoKSI+Z3N0X2dob3N0X3BhZF9pbnRlcm5hbF9hY3RpdmF0ZV9wdXNoX2RlZmF1bHQ8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGFjdGl2ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1naG9zdC1wYWQtaW50ZXJuYWwtYWN0aXZhdGUtcHVsbC1kZWZhdWx0IiB0aXRsZT0iZ3N0X2dob3N0X3BhZF9pbnRlcm5hbF9hY3RpdmF0ZV9wdWxsX2RlZmF1bHQgKCkiPmdzdF9naG9zdF9wYWRfaW50ZXJuYWxfYWN0aXZhdGVfcHVsbF9kZWZhdWx0PC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBhY3RpdmU8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjR3N0UHJveHlQYWQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UHJveHlQYWQ8L3NwYW4+PC9hPiAqICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1wcm94eS1wYWQtZ2V0LWludGVybmFsIiB0aXRsZT0iZ3N0X3Byb3h5X3BhZF9nZXRfaW50ZXJuYWwgKCkiPmdzdF9wcm94eV9wYWRfZ2V0X2ludGVybmFsPC9hPiAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI0dzdFByb3h5UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UHJveHlQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTsKK2NvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGUiIHRpdGxlPSJlbnVtIEdzdFF1ZXJ5VHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RRdWVyeVR5cGU8L3NwYW4+PC9hPiAqIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1wcm94eS1wYWQtcXVlcnktdHlwZS1kZWZhdWx0IiB0aXRsZT0iZ3N0X3Byb3h5X3BhZF9xdWVyeV90eXBlX2RlZmF1bHQgKCkiPmdzdF9wcm94eV9wYWRfcXVlcnlfdHlwZV9kZWZhdWx0PC9hPiAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1wcm94eS1wYWQtZXZlbnQtZGVmYXVsdCIgdGl0bGU9ImdzdF9wcm94eV9wYWRfZXZlbnRfZGVmYXVsdCAoKSI+Z3N0X3Byb3h5X3BhZF9ldmVudF9kZWZhdWx0PC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1wcm94eS1wYWQtcXVlcnktZGVmYXVsdCIgdGl0bGU9ImdzdF9wcm94eV9wYWRfcXVlcnlfZGVmYXVsdCAoKSI+Z3N0X3Byb3h5X3BhZF9xdWVyeV9kZWZhdWx0PC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1wcm94eS1wYWQtaXRlcmF0ZS1pbnRlcm5hbC1saW5rcy1kZWZhdWx0IiB0aXRsZT0iZ3N0X3Byb3h5X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2RlZmF1bHQgKCkiPmdzdF9wcm94eV9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19kZWZhdWx0PC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+ICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1wcm94eS1wYWQtY2hhaW4tZGVmYXVsdCIgdGl0bGU9ImdzdF9wcm94eV9wYWRfY2hhaW5fZGVmYXVsdCAoKSI+Z3N0X3Byb3h5X3BhZF9jaGFpbl9kZWZhdWx0PC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtcHJveHktcGFkLWNoYWluLWxpc3QtZGVmYXVsdCIgdGl0bGU9ImdzdF9wcm94eV9wYWRfY2hhaW5fbGlzdF9kZWZhdWx0ICgpIj5nc3RfcHJveHlfcGFkX2NoYWluX2xpc3RfZGVmYXVsdDwvYT4gICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3QiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtcHJveHktcGFkLWdldHJhbmdlLWRlZmF1bHQiIHRpdGxlPSJnc3RfcHJveHlfcGFkX2dldHJhbmdlX2RlZmF1bHQgKCkiPmdzdF9wcm94eV9wYWRfZ2V0cmFuZ2VfZGVmYXVsdDwvYT4gICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gb2Zmc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqKmJ1ZmZlcjwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1wcm94eS1wYWQtZ2V0Y2Fwcy1kZWZhdWx0IiB0aXRsZT0iZ3N0X3Byb3h5X3BhZF9nZXRjYXBzX2RlZmF1bHQgKCkiPmdzdF9wcm94eV9wYWRfZ2V0Y2Fwc19kZWZhdWx0PC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpmaWx0ZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtcHJveHktcGFkLWFjY2VwdGNhcHMtZGVmYXVsdCIgdGl0bGU9ImdzdF9wcm94eV9wYWRfYWNjZXB0Y2Fwc19kZWZhdWx0ICgpIj5nc3RfcHJveHlfcGFkX2FjY2VwdGNhcHNfZGVmYXVsdDwvYT4gICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1wcm94eS1wYWQtZml4YXRlY2Fwcy1kZWZhdWx0IiB0aXRsZT0iZ3N0X3Byb3h5X3BhZF9maXhhdGVjYXBzX2RlZmF1bHQgKCkiPmdzdF9wcm94eV9wYWRfZml4YXRlY2Fwc19kZWZhdWx0PC9hPiAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LXByb3h5LXBhZC11bmxpbmstZGVmYXVsdCIgdGl0bGU9ImdzdF9wcm94eV9wYWRfdW5saW5rX2RlZmF1bHQgKCkiPmdzdF9wcm94eV9wYWRfdW5saW5rX2RlZmF1bHQ8L2E+ICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdEdob3N0UGFkLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij5HT2JqZWN0PC9hPgorICAgKy0tLS08YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgorICAgICAgICAgKy0tLS08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KKyAgICAgICAgICAgICAgICstLS0tPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+CisgICAgICAgICAgICAgICAgICAgICArLS0tLUdzdFByb3h5UGFkCisgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sIiB0aXRsZT0iR3N0R2hvc3RQYWQiPkdzdEdob3N0UGFkPC9hPgorPC9wcmU+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij5HT2JqZWN0PC9hPgorICAgKy0tLS08YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgorICAgICAgICAgKy0tLS08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KKyAgICAgICAgICAgICAgICstLS0tPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+CisgICAgICAgICAgICAgICAgICAgICArLS0tLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI0dzdFByb3h5UGFkIj5Hc3RQcm94eVBhZDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tR3N0R2hvc3RQYWQKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RHaG9zdFBhZC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK0dob3N0UGFkcyBhcmUgdXNlZnVsIHdoZW4gb3JnYW5pemluZyBwaXBlbGluZXMgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiBsaWtlIGVsZW1lbnRzLgorVGhlIGlkZWEgaGVyZSBpcyB0byBjcmVhdGUgaGllcmFyY2hpY2FsIGVsZW1lbnQgZ3JhcGhzLiBUaGUgYmluIGVsZW1lbnQKK2NvbnRhaW5zIGEgc3ViLWdyYXBoLiBOb3cgb25lIHdvdWxkIGxpa2UgdG8gdHJlYXQgdGhlIGJpbi1lbGVtZW50IGxpa2UgYW55CitvdGhlciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPi4gVGhpcyBpcyB3aGVyZSBHaG9zdFBhZHMgY29tZSBpbnRvIHBsYXkuIEEgR2hvc3RQYWQgYWN0cyBhcworYSBwcm94eSBmb3IgYW5vdGhlciBwYWQuIFRodXMgdGhlIGJpbiBjYW4gaGF2ZSBzaW5rIGFuZCBzb3VyY2UgZ2hvc3QtcGFkcwordGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHNpbmsgYW5kIHNvdXJjZSBwYWRzIG9mIHRoZSBjaGlsZCBlbGVtZW50cy4KKzwvcD4KKzxwPgorSWYgdGhlIHRhcmdldCBwYWQgaXMga25vd24gYXQgY3JlYXRpb24gdGltZSwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1uZXciIHRpdGxlPSJnc3RfZ2hvc3RfcGFkX25ldyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZ2hvc3RfcGFkX25ldygpPC9jb2RlPjwvYT4gaXMgdGhlCitmdW5jdGlvbiB0byB1c2UgdG8gZ2V0IGEgZ2hvc3QtcGFkLiBPdGhlcndpc2Ugb25lIGNhbiB1c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1uZXctbm8tdGFyZ2V0IiB0aXRsZT0iZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldCgpPC9jb2RlPjwvYT4KK3RvIGNyZWF0ZSB0aGUgZ2hvc3QtcGFkIGFuZCB1c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1zZXQtdGFyZ2V0IiB0aXRsZT0iZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9naG9zdF9wYWRfc2V0X3RhcmdldCgpPC9jb2RlPjwvYT4gdG8gZXN0YWJsaXNoIHRoZQorYXNzb2NpYXRpb24gbGF0ZXIgb24uCis8L3A+Cis8cD4KK05vdGUgdGhhdCBHaG9zdFBhZHMgYWRkIG92ZXJoZWFkIHRvIHRoZSBkYXRhIHByb2Nlc3Npbmcgb2YgYSBwaXBlbGluZS4KKzwvcD4KKzxwPgorTGFzdCByZXZpZXdlZCBvbiAyMDA1LTExLTE4ICgwLjkuNSkKKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0R2hvc3RQYWQuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFByb3h5UGFkLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UHJveHlQYWQ8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RQcm94eVBhZDs8L3ByZT4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0R2hvc3RQYWQtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RHaG9zdFBhZDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEdob3N0UGFkOzwvcHJlPgorPHA+CitPcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RHaG9zdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEdob3N0UGFkPC9zcGFuPjwvYT4gc3RydWN0dXJlLgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZ2hvc3QtcGFkLW5ldyI+PC9hPjxoMz5nc3RfZ2hvc3RfcGFkX25ldyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+ICogICAgICAgICAgICBnc3RfZ2hvc3RfcGFkX25ldyAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnRhcmdldDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZSBhIG5ldyBnaG9zdHBhZCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YXJnZXQ8L2NvZGU+PC9lbT4gYXMgdGhlIHRhcmdldC4gVGhlIGRpcmVjdGlvbiB3aWxsIGJlIHRha2VuCitmcm9tIHRoZSB0YXJnZXQgcGFkLiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFyZ2V0PC9jb2RlPjwvZW0+IG11c3QgYmUgdW5saW5rZWQuCis8L3A+Cis8cD4KK1dpbGwgcmVmIHRoZSB0YXJnZXQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmFtZSBvZiB0aGUgbmV3IHBhZCwgb3IgTlVMTCB0byBhc3NpZ24gYSBkZWZhdWx0IG5hbWUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFyZ2V0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwYWQgdG8gZ2hvc3QuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiwgb3IgTlVMTCBpbiBjYXNlIG9mIGFuIGVycm9yLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWdob3N0LXBhZC1uZXctbm8tdGFyZ2V0Ij48L2E+PGgzPmdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+ICogICAgICAgICAgICBnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXQgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZERpcmVjdGlvbiIgdGl0bGU9ImVudW0gR3N0UGFkRGlyZWN0aW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkRGlyZWN0aW9uPC9zcGFuPjwvYT4gZGlyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlIGEgbmV3IGdob3N0cGFkIHdpdGhvdXQgYSB0YXJnZXQgd2l0aCB0aGUgZ2l2ZW4gZGlyZWN0aW9uLgorQSB0YXJnZXQgY2FuIGJlIHNldCBvbiB0aGUgZ2hvc3RwYWQgbGF0ZXIgd2l0aCB0aGUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1naG9zdC1wYWQtc2V0LXRhcmdldCIgdGl0bGU9ImdzdF9naG9zdF9wYWRfc2V0X3RhcmdldCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQoKTwvY29kZT48L2E+IGZ1bmN0aW9uLgorPC9wPgorPHA+CitUaGUgY3JlYXRlZCBnaG9zdHBhZCB3aWxsIG5vdCBoYXZlIGEgcGFkdGVtcGxhdGUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmFtZSBvZiB0aGUgbmV3IHBhZCwgb3IgTlVMTCB0byBhc3NpZ24gYSBkZWZhdWx0IG5hbWUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGlyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBkaXJlY3Rpb24gb2YgdGhlIGdob3N0cGFkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4sIG9yIE5VTEwgaW4gY2FzZSBvZiBhbiBlcnJvci4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1naG9zdC1wYWQtbmV3LWZyb20tdGVtcGxhdGUiPjwvYT48aDM+Z3N0X2dob3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+ICogICAgICAgICAgICBnc3RfZ2hvc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnRhcmdldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPiAqdGVtcGw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGUgYSBuZXcgZ2hvc3RwYWQgd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFyZ2V0PC9jb2RlPjwvZW0+IGFzIHRoZSB0YXJnZXQuIFRoZSBkaXJlY3Rpb24gd2lsbCBiZSB0YWtlbgorZnJvbSB0aGUgdGFyZ2V0IHBhZC4gVGhlIHRlbXBsYXRlIHVzZWQgb24gdGhlIGdob3N0cGFkIHdpbGwgYmUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRlbXBsYXRlPC9jb2RlPjwvZW0+LgorPC9wPgorPHA+CitXaWxsIHJlZiB0aGUgdGFyZ2V0LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5hbWUgb2YgdGhlIG5ldyBwYWQsIG9yIE5VTEwgdG8gYXNzaWduIGEgZGVmYXVsdCBuYW1lLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhcmdldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGFkIHRvIGdob3N0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50ZW1wbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4gdG8gdXNlIG9uIHRoZSBnaG9zdHBhZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LCBvciBOVUxMIGluIGNhc2Ugb2YgYW4gZXJyb3IuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjEwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZ2hvc3QtcGFkLW5ldy1uby10YXJnZXQtZnJvbS10ZW1wbGF0ZSI+PC9hPjxoMz5nc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXRfZnJvbV90ZW1wbGF0ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+ICogICAgICAgICAgICBnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXRfZnJvbV90ZW1wbGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKnRlbXBsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlIGEgbmV3IGdob3N0cGFkIGJhc2VkIG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50ZW1wbDwvY29kZT48L2VtPiwgd2l0aG91dCBzZXR0aW5nIGEgdGFyZ2V0LiBUaGUKK2RpcmVjdGlvbiB3aWxsIGJlIHRha2VuIGZyb20gdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50ZW1wbDwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuYW1lIG9mIHRoZSBuZXcgcGFkLCBvciBOVUxMIHRvIGFzc2lnbiBhIGRlZmF1bHQgbmFtZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50ZW1wbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4gdG8gY3JlYXRlIHRoZSBnaG9zdHBhZCBmcm9tLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4sIG9yIE5VTEwgaW4gY2FzZSBvZiBhbiBlcnJvci4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1naG9zdC1wYWQtc2V0LXRhcmdldCI+PC9hPjxoMz5nc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0ICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCIgdGl0bGU9IkdzdEdob3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0R2hvc3RQYWQ8L3NwYW4+PC9hPiAqZ3BhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqbmV3dGFyZ2V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0IHRoZSBuZXcgdGFyZ2V0IG9mIHRoZSBnaG9zdHBhZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Z3BhZDwvY29kZT48L2VtPi4gQW55IGV4aXN0aW5nIHRhcmdldAoraXMgdW5saW5rZWQgYW5kIGxpbmtzIHRvIHRoZSBuZXcgdGFyZ2V0IGFyZSBlc3RhYmxpc2hlZC4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ld3RhcmdldDwvY29kZT48L2VtPiBpcworTlVMTCB0aGUgdGFyZ2V0IHdpbGwgYmUgY2xlYXJlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ncGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCIgdGl0bGU9IkdzdEdob3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0R2hvc3RQYWQ8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uZXd0YXJnZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5ldyBwYWQgdGFyZ2V0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBuZXcgdGFyZ2V0IGNvdWxkIGJlIHNldC4gVGhpcyBmdW5jdGlvbgorY2FuIHJldHVybiBGQUxTRSB3aGVuIHRoZSBpbnRlcm5hbCBwYWRzIGNvdWxkIG5vdCBiZSBsaW5rZWQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZ2hvc3QtcGFkLWdldC10YXJnZXQiPjwvYT48aDM+Z3N0X2dob3N0X3BhZF9nZXRfdGFyZ2V0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkPC9zcGFuPjwvYT4gKiAgICAgICAgICAgIGdzdF9naG9zdF9wYWRfZ2V0X3RhcmdldCAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RHaG9zdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEdob3N0UGFkPC9zcGFuPjwvYT4gKmdwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgdGhlIHRhcmdldCBwYWQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmdwYWQ8L2NvZGU+PC9lbT4uIFVucmVmIHRhcmdldCBwYWQgYWZ0ZXIgdXNhZ2UuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Z3BhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RHaG9zdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEdob3N0UGFkPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB0YXJnZXQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4sIGNhbiBiZSBOVUxMIGlmIHRoZSBnaG9zdHBhZAoraGFzIG5vIHRhcmdldCBzZXQuIFVucmVmIHRhcmdldCBwYWQgYWZ0ZXIgdXNhZ2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZ2hvc3QtcGFkLWNvbnN0cnVjdCI+PC9hPjxoMz5nc3RfZ2hvc3RfcGFkX2NvbnN0cnVjdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfZ2hvc3RfcGFkX2NvbnN0cnVjdCAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sIiB0aXRsZT0iR3N0R2hvc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RHaG9zdFBhZDwvc3Bhbj48L2E+ICpncGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRmluaXNoIGluaXRpYWxpemF0aW9uIG9mIGEgbmV3bHkgYWxsb2NhdGVkIGdob3N0IHBhZC4KKzwvcD4KKzxwPgorVGhpcyBmdW5jdGlvbiBpcyBtb3N0IHVzZWZ1bCBpbiBsYW5ndWFnZSBiaW5kaW5ncyBhbmQgd2hlbiBzdWJjbGFzc2luZworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RHaG9zdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEdob3N0UGFkPC9zcGFuPjwvYT47IHBsdWdpbiBhbmQgYXBwbGljYXRpb24gZGV2ZWxvcGVycyBub3JtYWxseSB3aWxsIG5vdCBjYWxsIHRoaXMKK2Z1bmN0aW9uLiBDYWxsIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgYWZ0ZXIgYSBjYWxsIHRvIGdfb2JqZWN0X25ldworKEdTVF9UWVBFX0dIT1NUX1BBRCwgImRpcmVjdGlvbiIsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kaXI8L2NvZGU+PC9lbT4sIC4uLiwgTlVMTCkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Z3BhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3bHkgYWxsb2NhdGVkIGdob3N0IHBhZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGNvbnN0cnVjdGlvbiBzdWNjZWVkcywgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWdob3N0LXBhZC11bmxpbmstZGVmYXVsdCI+PC9hPjxoMz5nc3RfZ2hvc3RfcGFkX3VubGlua19kZWZhdWx0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9naG9zdF9wYWRfdW5saW5rX2RlZmF1bHQgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0ludm9rZSB0aGUgZGVmYXVsdCB1bmxpbmsgZnVuY3Rpb24gb2YgYSBnaG9zdCBwYWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gbGluay48L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWdob3N0LXBhZC1saW5rLWRlZmF1bHQiPjwvYT48aDM+Z3N0X2dob3N0X3BhZF9saW5rX2RlZmF1bHQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRMaW5rUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RQYWRMaW5rUmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZExpbmtSZXR1cm48L3NwYW4+PC9hPiAgICBnc3RfZ2hvc3RfcGFkX2xpbmtfZGVmYXVsdCAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBlZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitJbnZva2UgdGhlIGRlZmF1bHQgbGluayBmdW5jdGlvbiBvZiBhIGdob3N0IHBhZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGxpbmsuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wZWVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBwZWVyPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkTGlua1JldHVybiIgdGl0bGU9ImVudW0gR3N0UGFkTGlua1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZExpbmtSZXR1cm48L3NwYW4+PC9hPiBvZiB0aGUgb3BlcmF0aW9uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWdob3N0LXBhZC1hY3RpdmF0ZS1wdWxsLWRlZmF1bHQiPjwvYT48aDM+Z3N0X2dob3N0X3BhZF9hY3RpdmF0ZV9wdWxsX2RlZmF1bHQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2dob3N0X3BhZF9hY3RpdmF0ZV9wdWxsX2RlZmF1bHQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gYWN0aXZlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSW52b2tlIHRoZSBkZWZhdWx0IGFjdGl2YXRlIHB1bGwgZnVuY3Rpb24gb2YgYSBnaG9zdCBwYWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBhY3RpdmF0ZSBvciBkZWFjdGl2YXRlLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWN0aXZlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPndoZXRoZXIgdGhlIHBhZCBzaG91bGQgYmUgYWN0aXZlIG9yIG5vdC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWdob3N0LXBhZC1hY3RpdmF0ZS1wdXNoLWRlZmF1bHQiPjwvYT48aDM+Z3N0X2dob3N0X3BhZF9hY3RpdmF0ZV9wdXNoX2RlZmF1bHQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2dob3N0X3BhZF9hY3RpdmF0ZV9wdXNoX2RlZmF1bHQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gYWN0aXZlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSW52b2tlIHRoZSBkZWZhdWx0IGFjdGl2YXRlIHB1c2ggZnVuY3Rpb24gb2YgYSBnaG9zdCBwYWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBhY3RpdmF0ZSBvciBkZWFjdGl2YXRlLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWN0aXZlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPndoZXRoZXIgdGhlIHBhZCBzaG91bGQgYmUgYWN0aXZlIG9yIG5vdC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWdob3N0LXBhZC1pbnRlcm5hbC1hY3RpdmF0ZS1wdXNoLWRlZmF1bHQiPjwvYT48aDM+Z3N0X2dob3N0X3BhZF9pbnRlcm5hbF9hY3RpdmF0ZV9wdXNoX2RlZmF1bHQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2dob3N0X3BhZF9pbnRlcm5hbF9hY3RpdmF0ZV9wdXNoX2RlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gYWN0aXZlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSW52b2tlIHRoZSBkZWZhdWx0IGFjdGl2YXRlIHB1c2ggZnVuY3Rpb24gb2YgYSBwcm94eSBwYWQgdGhhdCBpcworb3duZWQgYnkgYSBnaG9zdCBwYWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBhY3RpdmF0ZSBvciBkZWFjdGl2YXRlLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWN0aXZlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPndoZXRoZXIgdGhlIHBhZCBzaG91bGQgYmUgYWN0aXZlIG9yIG5vdC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWdob3N0LXBhZC1pbnRlcm5hbC1hY3RpdmF0ZS1wdWxsLWRlZmF1bHQiPjwvYT48aDM+Z3N0X2dob3N0X3BhZF9pbnRlcm5hbF9hY3RpdmF0ZV9wdWxsX2RlZmF1bHQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2dob3N0X3BhZF9pbnRlcm5hbF9hY3RpdmF0ZV9wdWxsX2RlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gYWN0aXZlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSW52b2tlIHRoZSBkZWZhdWx0IGFjdGl2YXRlIHB1bGwgZnVuY3Rpb24gb2YgYSBwcm94eSBwYWQgdGhhdCBpcworb3duZWQgYnkgYSBnaG9zdCBwYWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBhY3RpdmF0ZSBvciBkZWFjdGl2YXRlLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWN0aXZlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPndoZXRoZXIgdGhlIHBhZCBzaG91bGQgYmUgYWN0aXZlIG9yIG5vdC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXByb3h5LXBhZC1nZXQtaW50ZXJuYWwiPjwvYT48aDM+Z3N0X3Byb3h5X3BhZF9nZXRfaW50ZXJuYWwgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI0dzdFByb3h5UGFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFByb3h5UGFkPC9zcGFuPjwvYT4gKiAgICAgICBnc3RfcHJveHlfcGFkX2dldF9pbnRlcm5hbCAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI0dzdFByb3h5UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UHJveHlQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0IHRoZSBpbnRlcm5hbCBwYWQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPi4gVW5yZWYgdGFyZ2V0IHBhZCBhZnRlciB1c2FnZS4KKzwvcD4KKzxwPgorVGhlIGludGVybmFsIHBhZCBvZiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sIiB0aXRsZT0iR3N0R2hvc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RHaG9zdFBhZDwvc3Bhbj48L2E+IGlzIHRoZSBpbnRlcm5hbGx5IHVzZWQKK3BhZCBvZiBvcHBvc2l0ZSBkaXJlY3Rpb24sIHdoaWNoIGlzIHVzZWQgdG8gbGluayB0byB0aGUgdGFyZ2V0LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjR3N0UHJveHlQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQcm94eVBhZDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdGFyZ2V0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI0dzdFByb3h5UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UHJveHlQYWQ8L3NwYW4+PC9hPiwgY2FuIGJlIE5VTEwuCitVbnJlZiB0YXJnZXQgcGFkIGFmdGVyIHVzYWdlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXByb3h5LXBhZC1xdWVyeS10eXBlLWRlZmF1bHQiPjwvYT48aDM+Z3N0X3Byb3h5X3BhZF9xdWVyeV90eXBlX2RlZmF1bHQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGUiIHRpdGxlPSJlbnVtIEdzdFF1ZXJ5VHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RRdWVyeVR5cGU8L3NwYW4+PC9hPiAqIGdzdF9wcm94eV9wYWRfcXVlcnlfdHlwZV9kZWZhdWx0ICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSW52b2tlIHRoZSBkZWZhdWx0IHF1ZXJ5IHR5cGUgaGFuZGxlciBvZiB0aGUgcHJveHkgcGFkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgemVyby10ZXJtaW5hdGVkIGFycmF5CitvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnlUeXBlIiB0aXRsZT0iZW51bSBHc3RRdWVyeVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeVR5cGU8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IHplcm8tdGVybWluYXRlZD0xXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wcm94eS1wYWQtZXZlbnQtZGVmYXVsdCI+PC9hPjxoMz5nc3RfcHJveHlfcGFkX2V2ZW50X2RlZmF1bHQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3Byb3h5X3BhZF9ldmVudF9kZWZhdWx0ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSW52b2tlIHRoZSBkZWZhdWx0IGV2ZW50IG9mIHRoZSBwcm94eSBwYWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gcHVzaCB0aGUgZXZlbnQgdG8uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiB0byBzZW5kIHRvIHRoZSBwYWQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBldmVudCB3YXMgaGFuZGxlZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjM1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcHJveHktcGFkLXF1ZXJ5LWRlZmF1bHQiPjwvYT48aDM+Z3N0X3Byb3h5X3BhZF9xdWVyeV9kZWZhdWx0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9wcm94eV9wYWRfcXVlcnlfZGVmYXVsdCAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0ludm9rZSB0aGUgZGVmYXVsdCBxdWVyeSBmdW5jdGlvbiBvZiB0aGUgcHJveHkgcGFkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGludm9rZSB0aGUgZGVmYXVsdCBxdWVyeSBvbi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+IHRvIHBlcmZvcm0uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBxdWVyeSBjb3VsZCBiZSBwZXJmb3JtZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXByb3h5LXBhZC1pdGVyYXRlLWludGVybmFsLWxpbmtzLWRlZmF1bHQiPjwvYT48aDM+Z3N0X3Byb3h5X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2RlZmF1bHQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICogICAgICAgZ3N0X3Byb3h5X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2RlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXByb3h5LXBhZC1jaGFpbi1kZWZhdWx0Ij48L2E+PGgzPmdzdF9wcm94eV9wYWRfY2hhaW5fZGVmYXVsdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+ICAgICAgIGdzdF9wcm94eV9wYWRfY2hhaW5fZGVmYXVsdCAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSW52b2tlIHRoZSBkZWZhdWx0IGNoYWluIGZ1bmN0aW9uIG9mIHRoZSBwcm94eSBwYWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgc2luayA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiwgcmV0dXJucyBHU1RfRkxPV19FUlJPUiBpZiBub3QuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IHRvIHNlbmQsIHJldHVybiBHU1RfRkxPV19FUlJPUgoraWYgbm90LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiBmcm9tIHRoZSBwYWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXByb3h5LXBhZC1jaGFpbi1saXN0LWRlZmF1bHQiPjwvYT48aDM+Z3N0X3Byb3h5X3BhZF9jaGFpbl9saXN0X2RlZmF1bHQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiAgICAgICBnc3RfcHJveHlfcGFkX2NoYWluX2xpc3RfZGVmYXVsdCAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjR3N0QnVmZmVyTGlzdCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitJbnZva2UgdGhlIGRlZmF1bHQgY2hhaW4gbGlzdCBmdW5jdGlvbiBvZiB0aGUgcHJveHkgcGFkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHNpbmsgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4sIHJldHVybnMgR1NUX0ZMT1dfRVJST1IgaWYgbm90LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjR3N0QnVmZmVyTGlzdCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4gdG8gc2VuZCwgcmV0dXJuIEdTVF9GTE9XX0VSUk9SCitpZiBub3QuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+IGZyb20gdGhlIHBhZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjM1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcHJveHktcGFkLWdldHJhbmdlLWRlZmF1bHQiPjwvYT48aDM+Z3N0X3Byb3h5X3BhZF9nZXRyYW5nZV9kZWZhdWx0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4gICAgICAgZ3N0X3Byb3h5X3BhZF9nZXRyYW5nZV9kZWZhdWx0ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKipidWZmZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcHJveHktcGFkLWdldGNhcHMtZGVmYXVsdCI+PC9hPjxoMz5nc3RfcHJveHlfcGFkX2dldGNhcHNfZGVmYXVsdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPiAqICAgICAgICAgICBnc3RfcHJveHlfcGFkX2dldGNhcHNfZGVmYXVsdCAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpmaWx0ZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitJbnZva2UgdGhlIGRlZmF1bHQgZ2V0Y2FwcyBmdW5jdGlvbiBvZiB0aGUgcHJveHkgcGFkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgY2FwYWJpbGl0aWVzIG9mLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmlsdGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IGZpbHRlci48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY2FwcyBvZiB0aGUgcGFkIHdpdGggaW5jcmVtZW50ZWQgcmVmLWNvdW50LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXByb3h5LXBhZC1hY2NlcHRjYXBzLWRlZmF1bHQiPjwvYT48aDM+Z3N0X3Byb3h5X3BhZF9hY2NlcHRjYXBzX2RlZmF1bHQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3Byb3h5X3BhZF9hY2NlcHRjYXBzX2RlZmF1bHQgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0ludm9rZSB0aGUgZGVmYXVsdCBhY2NlcHRjYXBzIGZ1bmN0aW9uIG9mIHRoZSBwcm94eSBwYWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gY2hlY2s8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gY2hlY2sgb24gdGhlIHBhZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHBhZCBjYW4gYWNjZXB0IHRoZSBjYXBzLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wcm94eS1wYWQtZml4YXRlY2Fwcy1kZWZhdWx0Ij48L2E+PGgzPmdzdF9wcm94eV9wYWRfZml4YXRlY2Fwc19kZWZhdWx0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9wcm94eV9wYWRfZml4YXRlY2Fwc19kZWZhdWx0ICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitJbnZva2UgdGhlIGRlZmF1bHQgZml4YXRlY2FwcyBmdW5jdGlvbiBvZiB0aGUgcHJveHkgcGFkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBmaXhhdGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gZml4YXRlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXByb3h5LXBhZC11bmxpbmstZGVmYXVsdCI+PC9hPjxoMz5nc3RfcHJveHlfcGFkX3VubGlua19kZWZhdWx0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9wcm94eV9wYWRfdW5saW5rX2RlZmF1bHQgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0ludm9rZSB0aGUgZGVmYXVsdCB1bmxpbmsgZnVuY3Rpb24gb2YgdGhlIHByb3h5IHBhZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gdW5saW5rPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzU8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0R2hvc3RQYWQuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9Hc3RJbmRleC5odG1sIGIvZG9jcy9nc3QvaHRtbC9Hc3RJbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNGQ4YmQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dzdC9odG1sL0dzdEluZGV4Lmh0bWwKQEAgLTAsMCArMSwxNDQ4IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0SW5kZXg8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RHaG9zdFBhZC5odG1sIiB0aXRsZT0iR3N0R2hvc3RQYWQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3RJbmRleEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEluZGV4RmFjdG9yeSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0SW5kZXhGYWN0b3J5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjR3N0SW5kZXguc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RJbmRleC5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0SW5kZXgub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RJbmRleC5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEluZGV4LnNpZ25hbHMiIGNsYXNzPSJzaG9ydGN1dCI+U2lnbmFsczwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJHc3RJbmRleCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9IkdzdEluZGV4LnRvcF9vZl9wYWdlIj48L2E+R3N0SW5kZXg8L3NwYW4+PC9oMj4KKzxwPkdzdEluZGV4IOKAlCBHZW5lcmF0ZSBpbmRleGVzIG9uIG9iamVjdHM8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJHc3RJbmRleC5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisjaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OworCitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEluZGV4LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RJbmRleCI+R3N0SW5kZXg8L2E+Oworc3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHc3RJbmRleEVudHJ5IiB0aXRsZT0ic3RydWN0IEdzdEluZGV4RW50cnkiPkdzdEluZGV4RW50cnk8L2E+Oworc3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHc3RJbmRleEdyb3VwIiB0aXRsZT0ic3RydWN0IEdzdEluZGV4R3JvdXAiPkdzdEluZGV4R3JvdXA8L2E+OworZW51bSAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHc3RJbmRleENlcnRhaW50eSIgdGl0bGU9ImVudW0gR3N0SW5kZXhDZXJ0YWludHkiPkdzdEluZGV4Q2VydGFpbnR5PC9hPjsKK2VudW0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0SW5kZXhFbnRyeVR5cGUiIHRpdGxlPSJlbnVtIEdzdEluZGV4RW50cnlUeXBlIj5Hc3RJbmRleEVudHJ5VHlwZTwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEluZGV4TG9va3VwTWV0aG9kIiB0aXRsZT0iZW51bSBHc3RJbmRleExvb2t1cE1ldGhvZCI+R3N0SW5kZXhMb29rdXBNZXRob2Q8L2E+OworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHU1QtSU5ERVgtTkFTU09DUzpDQVBTIiB0aXRsZT0iR1NUX0lOREVYX05BU1NPQ1MoKSI+R1NUX0lOREVYX05BU1NPQ1M8L2E+ICAgICAgICAgICAgICAgICAgIChlbnRyeSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR1NULUlOREVYLUFTU09DLUZMQUdTOkNBUFMiIHRpdGxlPSJHU1RfSU5ERVhfQVNTT0NfRkxBR1MoKSI+R1NUX0lOREVYX0FTU09DX0ZMQUdTPC9hPiAgICAgICAgICAgICAgIChlbnRyeSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR1NULUlOREVYLUFTU09DLUZPUk1BVDpDQVBTIiB0aXRsZT0iR1NUX0lOREVYX0FTU09DX0ZPUk1BVCgpIj5HU1RfSU5ERVhfQVNTT0NfRk9STUFUPC9hPiAgICAgICAgICAgICAgKGVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR1NULUlOREVYLUFTU09DLVZBTFVFOkNBUFMiIHRpdGxlPSJHU1RfSU5ERVhfQVNTT0NfVkFMVUUoKSI+R1NUX0lOREVYX0FTU09DX1ZBTFVFPC9hPiAgICAgICAgICAgICAgIChlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkpCitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEluZGV4QXNzb2NpYXRpb24iIHRpdGxlPSJzdHJ1Y3QgR3N0SW5kZXhBc3NvY2lhdGlvbiI+R3N0SW5kZXhBc3NvY2lhdGlvbjwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEFzc29jRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEFzc29jRmxhZ3MiPkdzdEFzc29jRmxhZ3M8L2E+OworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHU1QtSU5ERVgtRk9STUFULUZPUk1BVDpDQVBTIiB0aXRsZT0iR1NUX0lOREVYX0ZPUk1BVF9GT1JNQVQoKSI+R1NUX0lOREVYX0ZPUk1BVF9GT1JNQVQ8L2E+ICAgICAgICAgICAgIChlbnRyeSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR1NULUlOREVYLUZPUk1BVC1LRVk6Q0FQUyIgdGl0bGU9IkdTVF9JTkRFWF9GT1JNQVRfS0VZKCkiPkdTVF9JTkRFWF9GT1JNQVRfS0VZPC9hPiAgICAgICAgICAgICAgICAoZW50cnkpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dTVC1JTkRFWC1JRC1JTlZBTElEOkNBUFMiIHRpdGxlPSJHU1RfSU5ERVhfSURfSU5WQUxJRCI+R1NUX0lOREVYX0lEX0lOVkFMSUQ8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dTVC1JTkRFWC1JRC1ERVNDUklQVElPTjpDQVBTIiB0aXRsZT0iR1NUX0lOREVYX0lEX0RFU0NSSVBUSU9OKCkiPkdTVF9JTkRFWF9JRF9ERVNDUklQVElPTjwvYT4gICAgICAgICAgICAoZW50cnkpCis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHc3RJbmRleEZpbHRlciIgdGl0bGU9IkdzdEluZGV4RmlsdGVyICgpIj4qR3N0SW5kZXhGaWx0ZXI8L2E+KSAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleDwvc3Bhbj48L2E+ICppbmRleDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHc3RJbmRleEVudHJ5IiB0aXRsZT0ic3RydWN0IEdzdEluZGV4RW50cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleEVudHJ5PC9zcGFuPjwvYT4gKmVudHJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTsKK2VudW0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0SW5kZXhSZXNvbHZlck1ldGhvZCIgdGl0bGU9ImVudW0gR3N0SW5kZXhSZXNvbHZlck1ldGhvZCI+R3N0SW5kZXhSZXNvbHZlck1ldGhvZDwvYT47Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHc3RJbmRleFJlc29sdmVyIiB0aXRsZT0iR3N0SW5kZXhSZXNvbHZlciAoKSI+KkdzdEluZGV4UmVzb2x2ZXI8L2E+KSAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXg8L3NwYW4+PC9hPiAqaW5kZXg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqd3JpdGVyX3N0cmluZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEluZGV4RmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEluZGV4RmxhZ3MiPkdzdEluZGV4RmxhZ3M8L2E+OworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHU1QtSU5ERVgtSVMtUkVBREFCTEU6Q0FQUyIgdGl0bGU9IkdTVF9JTkRFWF9JU19SRUFEQUJMRSgpIj5HU1RfSU5ERVhfSVNfUkVBREFCTEU8L2E+ICAgICAgICAgICAgICAgKG9iaikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR1NULUlOREVYLUlTLVdSSVRBQkxFOkNBUFMiIHRpdGxlPSJHU1RfSU5ERVhfSVNfV1JJVEFCTEUoKSI+R1NUX0lOREVYX0lTX1dSSVRBQkxFPC9hPiAgICAgICAgICAgICAgIChvYmopCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEluZGV4PC9zcGFuPjwvYT4gKiAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtbmV3IiB0aXRsZT0iZ3N0X2luZGV4X25ldyAoKSI+Z3N0X2luZGV4X25ldzwvYT4gICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LWNvbW1pdCIgdGl0bGU9ImdzdF9pbmRleF9jb21taXQgKCkiPmdzdF9pbmRleF9jb21taXQ8L2E+ICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleDwvc3Bhbj48L2E+ICppbmRleDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBpZDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LWdldC1ncm91cCIgdGl0bGU9ImdzdF9pbmRleF9nZXRfZ3JvdXAgKCkiPmdzdF9pbmRleF9nZXRfZ3JvdXA8L2E+ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleDwvc3Bhbj48L2E+ICppbmRleDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LW5ldy1ncm91cCIgdGl0bGU9ImdzdF9pbmRleF9uZXdfZ3JvdXAgKCkiPmdzdF9pbmRleF9uZXdfZ3JvdXA8L2E+ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleDwvc3Bhbj48L2E+ICppbmRleDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI2dzdC1pbmRleC1zZXQtZ3JvdXAiIHRpdGxlPSJnc3RfaW5kZXhfc2V0X2dyb3VwICgpIj5nc3RfaW5kZXhfc2V0X2dyb3VwPC9hPiAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXg8L3NwYW4+PC9hPiAqaW5kZXg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gZ3JvdXBudW08L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtc2V0LWNlcnRhaW50eSIgdGl0bGU9ImdzdF9pbmRleF9zZXRfY2VydGFpbnR5ICgpIj5nc3RfaW5kZXhfc2V0X2NlcnRhaW50eTwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXg8L3NwYW4+PC9hPiAqaW5kZXg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0SW5kZXhDZXJ0YWludHkiIHRpdGxlPSJlbnVtIEdzdEluZGV4Q2VydGFpbnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXhDZXJ0YWludHk8L3NwYW4+PC9hPiBjZXJ0YWludHk8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0SW5kZXhDZXJ0YWludHkiIHRpdGxlPSJlbnVtIEdzdEluZGV4Q2VydGFpbnR5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEluZGV4Q2VydGFpbnR5PC9zcGFuPjwvYT4gICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtZ2V0LWNlcnRhaW50eSIgdGl0bGU9ImdzdF9pbmRleF9nZXRfY2VydGFpbnR5ICgpIj5nc3RfaW5kZXhfZ2V0X2NlcnRhaW50eTwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXg8L3NwYW4+PC9hPiAqaW5kZXg8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtc2V0LWZpbHRlciIgdGl0bGU9ImdzdF9pbmRleF9zZXRfZmlsdGVyICgpIj5nc3RfaW5kZXhfc2V0X2ZpbHRlcjwvYT4gICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXg8L3NwYW4+PC9hPiAqaW5kZXg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0SW5kZXhGaWx0ZXIiIHRpdGxlPSJHc3RJbmRleEZpbHRlciAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4RmlsdGVyPC9zcGFuPjwvYT4gZmlsdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LXNldC1maWx0ZXItZnVsbCIgdGl0bGU9ImdzdF9pbmRleF9zZXRfZmlsdGVyX2Z1bGwgKCkiPmdzdF9pbmRleF9zZXRfZmlsdGVyX2Z1bGw8L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleDwvc3Bhbj48L2E+ICppbmRleDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHc3RJbmRleEZpbHRlciIgdGl0bGU9IkdzdEluZGV4RmlsdGVyICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXhGaWx0ZXI8L3NwYW4+PC9hPiBmaWx0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1EYXRhc2V0cy5odG1sI0dEZXN0cm95Tm90aWZ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R0Rlc3Ryb3lOb3RpZnk8L3NwYW4+PC9hPiB1c2VyX2RhdGFfZGVzdHJveTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI2dzdC1pbmRleC1zZXQtcmVzb2x2ZXIiIHRpdGxlPSJnc3RfaW5kZXhfc2V0X3Jlc29sdmVyICgpIj5nc3RfaW5kZXhfc2V0X3Jlc29sdmVyPC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXg8L3NwYW4+PC9hPiAqaW5kZXg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0SW5kZXhSZXNvbHZlciIgdGl0bGU9IkdzdEluZGV4UmVzb2x2ZXIgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleFJlc29sdmVyPC9zcGFuPjwvYT4gcmVzb2x2ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtc2V0LXJlc29sdmVyLWZ1bGwiIHRpdGxlPSJnc3RfaW5kZXhfc2V0X3Jlc29sdmVyX2Z1bGwgKCkiPmdzdF9pbmRleF9zZXRfcmVzb2x2ZXJfZnVsbDwvYT4gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleDwvc3Bhbj48L2E+ICppbmRleDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHc3RJbmRleFJlc29sdmVyIiB0aXRsZT0iR3N0SW5kZXhSZXNvbHZlciAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4UmVzb2x2ZXI8L3NwYW4+PC9hPiByZXNvbHZlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURhdGFzZXRzLmh0bWwjR0Rlc3Ryb3lOb3RpZnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRGVzdHJveU5vdGlmeTwvc3Bhbj48L2E+IHVzZXJfZGF0YV9kZXN0cm95PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LWdldC13cml0ZXItaWQiIHRpdGxlPSJnc3RfaW5kZXhfZ2V0X3dyaXRlcl9pZCAoKSI+Z3N0X2luZGV4X2dldF93cml0ZXJfaWQ8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4PC9zcGFuPjwvYT4gKmluZGV4PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gKmlkPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEluZGV4RW50cnkiIHRpdGxlPSJzdHJ1Y3QgR3N0SW5kZXhFbnRyeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJbmRleEVudHJ5PC9zcGFuPjwvYT4gKiAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LWFkZC1mb3JtYXQiIHRpdGxlPSJnc3RfaW5kZXhfYWRkX2Zvcm1hdCAoKSI+Z3N0X2luZGV4X2FkZF9mb3JtYXQ8L2E+ICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4PC9zcGFuPjwvYT4gKmluZGV4PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGlkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0SW5kZXhFbnRyeSIgdGl0bGU9InN0cnVjdCBHc3RJbmRleEVudHJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEluZGV4RW50cnk8L3NwYW4+PC9hPiAqICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtYWRkLWFzc29jaWF0aW9uIiB0aXRsZT0iZ3N0X2luZGV4X2FkZF9hc3NvY2lhdGlvbiAoKSI+Z3N0X2luZGV4X2FkZF9hc3NvY2lhdGlvbjwvYT4gICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4PC9zcGFuPjwvYT4gKmluZGV4PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGlkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEFzc29jRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEFzc29jRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBc3NvY0ZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gdmFsdWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEluZGV4RW50cnkiIHRpdGxlPSJzdHJ1Y3QgR3N0SW5kZXhFbnRyeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJbmRleEVudHJ5PC9zcGFuPjwvYT4gKiAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LWFkZC1hc3NvY2lhdGlvbnYiIHRpdGxlPSJnc3RfaW5kZXhfYWRkX2Fzc29jaWF0aW9udiAoKSI+Z3N0X2luZGV4X2FkZF9hc3NvY2lhdGlvbnY8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4PC9zcGFuPjwvYT4gKmluZGV4PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGlkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEFzc29jRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEFzc29jRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBc3NvY0ZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHc3RJbmRleEFzc29jaWF0aW9uIiB0aXRsZT0ic3RydWN0IEdzdEluZGV4QXNzb2NpYXRpb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleEFzc29jaWF0aW9uPC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0SW5kZXhFbnRyeSIgdGl0bGU9InN0cnVjdCBHc3RJbmRleEVudHJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEluZGV4RW50cnk8L3NwYW4+PC9hPiAqICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtYWRkLW9iamVjdCIgdGl0bGU9ImdzdF9pbmRleF9hZGRfb2JqZWN0ICgpIj5nc3RfaW5kZXhfYWRkX29iamVjdDwvYT4gICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXg8L3NwYW4+PC9hPiAqaW5kZXg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gaWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqa2V5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gb2JqZWN0PC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEluZGV4RW50cnkiIHRpdGxlPSJzdHJ1Y3QgR3N0SW5kZXhFbnRyeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJbmRleEVudHJ5PC9zcGFuPjwvYT4gKiAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LWFkZC1pZCIgdGl0bGU9ImdzdF9pbmRleF9hZGRfaWQgKCkiPmdzdF9pbmRleF9hZGRfaWQ8L2E+ICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleDwvc3Bhbj48L2E+ICppbmRleDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBpZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpkZXNjcmlwdGlvbjwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHc3RJbmRleEVudHJ5IiB0aXRsZT0ic3RydWN0IEdzdEluZGV4RW50cnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SW5kZXhFbnRyeTwvc3Bhbj48L2E+ICogICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI2dzdC1pbmRleC1nZXQtYXNzb2MtZW50cnkiIHRpdGxlPSJnc3RfaW5kZXhfZ2V0X2Fzc29jX2VudHJ5ICgpIj5nc3RfaW5kZXhfZ2V0X2Fzc29jX2VudHJ5PC9hPiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXg8L3NwYW4+PC9hPiAqaW5kZXg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gaWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0SW5kZXhMb29rdXBNZXRob2QiIHRpdGxlPSJlbnVtIEdzdEluZGV4TG9va3VwTWV0aG9kIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXhMb29rdXBNZXRob2Q8L3NwYW4+PC9hPiBtZXRob2Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0QXNzb2NGbGFncyIgdGl0bGU9ImVudW0gR3N0QXNzb2NGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFzc29jRmxhZ3M8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiB2YWx1ZTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHc3RJbmRleEVudHJ5IiB0aXRsZT0ic3RydWN0IEdzdEluZGV4RW50cnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SW5kZXhFbnRyeTwvc3Bhbj48L2E+ICogICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI2dzdC1pbmRleC1nZXQtYXNzb2MtZW50cnktZnVsbCIgdGl0bGU9ImdzdF9pbmRleF9nZXRfYXNzb2NfZW50cnlfZnVsbCAoKSI+Z3N0X2luZGV4X2dldF9hc3NvY19lbnRyeV9mdWxsPC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4PC9zcGFuPjwvYT4gKmluZGV4PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGlkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEluZGV4TG9va3VwTWV0aG9kIiB0aXRsZT0iZW51bSBHc3RJbmRleExvb2t1cE1ldGhvZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4TG9va3VwTWV0aG9kPC9zcGFuPjwvYT4gbWV0aG9kPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEFzc29jRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEFzc29jRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBc3NvY0ZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gdmFsdWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0NvbXBhcmVEYXRhRnVuYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdDb21wYXJlRGF0YUZ1bmM8L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEluZGV4RW50cnkiIHRpdGxlPSJzdHJ1Y3QgR3N0SW5kZXhFbnRyeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJbmRleEVudHJ5PC9zcGFuPjwvYT4gKiAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LWVudHJ5LWNvcHkiIHRpdGxlPSJnc3RfaW5kZXhfZW50cnlfY29weSAoKSI+Z3N0X2luZGV4X2VudHJ5X2NvcHk8L2E+ICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0SW5kZXhFbnRyeSIgdGl0bGU9InN0cnVjdCBHc3RJbmRleEVudHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXhFbnRyeTwvc3Bhbj48L2E+ICplbnRyeTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI2dzdC1pbmRleC1lbnRyeS1mcmVlIiB0aXRsZT0iZ3N0X2luZGV4X2VudHJ5X2ZyZWUgKCkiPmdzdF9pbmRleF9lbnRyeV9mcmVlPC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEluZGV4RW50cnkiIHRpdGxlPSJzdHJ1Y3QgR3N0SW5kZXhFbnRyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4RW50cnk8L3NwYW4+PC9hPiAqZW50cnk8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtZW50cnktYXNzb2MtbWFwIiB0aXRsZT0iZ3N0X2luZGV4X2VudHJ5X2Fzc29jX21hcCAoKSI+Z3N0X2luZGV4X2VudHJ5X2Fzc29jX21hcDwvYT4gICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0SW5kZXhFbnRyeSIgdGl0bGU9InN0cnVjdCBHc3RJbmRleEVudHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXhFbnRyeTwvc3Bhbj48L2E+ICplbnRyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdEluZGV4Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij5HT2JqZWN0PC9hPgorICAgKy0tLS08YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgorICAgICAgICAgKy0tLS08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KKyAgICAgICAgICAgICAgICstLS0tR3N0SW5kZXgKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RJbmRleC5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0SW5kZXgtLXJlc29sdmVyIiB0aXRsZT0nVGhlICJyZXNvbHZlciIgcHJvcGVydHknPnJlc29sdmVyPC9hPiIgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEluZGV4UmVzb2x2ZXIiIHRpdGxlPSJHc3RJbmRleFJlc29sdmVyICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXhSZXNvbHZlcjwvc3Bhbj48L2E+ICAgICAgOiBSZWFkIC8gV3JpdGUKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RJbmRleC5zaWduYWxzIj48L2E+PGgyPlNpZ25hbHM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0SW5kZXgtZW50cnktYWRkZWQiIHRpdGxlPSdUaGUgImVudHJ5LWFkZGVkIiBzaWduYWwnPmVudHJ5LWFkZGVkPC9hPiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5SdW4gTGFzdDwvY29kZT48L2E+Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0SW5kZXguZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitHc3RJbmRleCBpcyB1c2VkIHRvIGdlbmVyYXRlIGEgc3RyZWFtIGluZGV4IG9mIG9uZSBvciBtb3JlIGVsZW1lbnRzCitpbiBhIHBpcGVsaW5lLgorPC9wPgorPHA+CitFbGVtZW50cyB3aWxsIG92ZXJsb2FkIHRoZSBzZXRfaW5kZXggYW5kIGdldF9pbmRleCB2aXJ0dWFsIG1ldGhvZHMgaW4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+LiBXaGVuIHN0cmVhbWluZyBkYXRhLCB0aGUgZWxlbWVudCB3aWxsIGFkZCBpbmRleCBlbnRyaWVzIGlmIGl0CitoYXMgYW4gaW5kZXggc2V0LgorPC9wPgorPHA+CitFYWNoIGVsZW1lbnQgdGhhdCBhZGRzIHRvIHRoZSBpbmRleCB3aWxsIGRvIHRoYXQgdXNpbmcgYSB3cml0ZXJfaWQuIFRoZQord3JpdGVyX2lkIGlzIG9idGFpbmVkIGZyb20gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LWdldC13cml0ZXItaWQiIHRpdGxlPSJnc3RfaW5kZXhfZ2V0X3dyaXRlcl9pZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaW5kZXhfZ2V0X3dyaXRlcl9pZCgpPC9jb2RlPjwvYT4uCis8L3A+Cis8cD4KK1RoZSBhcHBsaWNhdGlvbiB0aGF0IHdhbnRzIHRvIGluZGV4IHRoZSBzdHJlYW0gd2lsbCBjcmVhdGUgYSBuZXcgaW5kZXggb2JqZWN0Cit1c2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtbmV3IiB0aXRsZT0iZ3N0X2luZGV4X25ldyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaW5kZXhfbmV3KCk8L2NvZGU+PC9hPiBvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXhGYWN0b3J5Lmh0bWwjZ3N0LWluZGV4LWZhY3RvcnktbWFrZSIgdGl0bGU9ImdzdF9pbmRleF9mYWN0b3J5X21ha2UgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2luZGV4X2ZhY3RvcnlfbWFrZSgpPC9jb2RlPjwvYT4uIFRoZSBpbmRleCBpcyBhc3NpZ25lZCB0byBhCitzcGVjaWZpYyBlbGVtZW50LCBhIGJpbiBvciB0aGUgd2hvbGUgcGlwZWxpbmUuIFRoaXMgd2lsbCBjYXVzZSBpbmRleGFibGUKK2VsZW1lbnRzIHRvIGFkZCBlbnRpcmVzIHRvIHRoZSBpbmRleCB3aGlsZSBwbGF5aW5nLgorPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RJbmRleC5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0SW5kZXgtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RJbmRleDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEluZGV4OzwvcHJlPgorPHA+CitPcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4PC9zcGFuPjwvYT4gc3RydWN0dXJlLgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RJbmRleEVudHJ5Ij48L2E+PGgzPnN0cnVjdCBHc3RJbmRleEVudHJ5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0SW5kZXhFbnRyeSB7Cit9OworPC9wcmU+Cis8cD4KK1RoZSBiYXNpYyBlbGVtZW50IG9mIGFuIGluZGV4LgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RJbmRleEdyb3VwIj48L2E+PGgzPnN0cnVjdCBHc3RJbmRleEdyb3VwPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0SW5kZXhHcm91cCB7Cit9OworPC9wcmU+Cis8cD4KK0EgZ3JvdXAgb2YgcmVsYXRlZCBlbnRyaWVzIGluIGFuIGluZGV4LgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RJbmRleENlcnRhaW50eSI+PC9hPjxoMz5lbnVtIEdzdEluZGV4Q2VydGFpbnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGVudW0geworICBHU1RfSU5ERVhfVU5LTk9XTiwKKyAgR1NUX0lOREVYX0NFUlRBSU4sCisgIEdTVF9JTkRFWF9GVVpaWQorfSBHc3RJbmRleENlcnRhaW50eTsKKzwvcHJlPgorPHA+CitUaGUgY2VydGFpbnR5IG9mIGEgZ3JvdXAgaW4gdGhlIGluZGV4LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtSU5ERVgtVU5LTk9XTjpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfSU5ERVhfVU5LTk9XTjwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YWNjdXJhY3kgaXMgbm90IGtub3duCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtSU5ERVgtQ0VSVEFJTjpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfSU5ERVhfQ0VSVEFJTjwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YWNjdXJhY3kgaXMgcGVyZmVjdAorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUlOREVYLUZVWlpZOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9JTkRFWF9GVVpaWTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YWNjdXJhY3kgaXMgZnV6enkKKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEluZGV4RW50cnlUeXBlIj48L2E+PGgzPmVudW0gR3N0SW5kZXhFbnRyeVR5cGU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9JTkRFWF9FTlRSWV9JRCwKKyAgR1NUX0lOREVYX0VOVFJZX0FTU09DSUFUSU9OLAorICBHU1RfSU5ERVhfRU5UUllfT0JKRUNULAorICBHU1RfSU5ERVhfRU5UUllfRk9STUFUCit9IEdzdEluZGV4RW50cnlUeXBlOworPC9wcmU+Cis8cD4KK1RoZSBkaWZmZXJlbnQgdHlwZXMgb2YgZW50cmllcyBpbiB0aGUgaW5kZXguCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1JTkRFWC1FTlRSWS1JRDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfSU5ERVhfRU5UUllfSUQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoaXMgZW50cnkgaXMgYW4gaWQgdGhhdCBtYXBzIGFuIGluZGV4IGlkIHRvIGl0cyBvd25lciBvYmplY3QKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1JTkRFWC1FTlRSWS1BU1NPQ0lBVElPTjpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfSU5ERVhfRU5UUllfQVNTT0NJQVRJT048L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoaXMgZW50cnkgaXMgYW4gYXNzb2NpYXRpb24gYmV0d2VlbiBmb3JtYXRzCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtSU5ERVgtRU5UUlktT0JKRUNUOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9JTkRFWF9FTlRSWV9PQkpFQ1Q8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPkFuIG9iamVjdAorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUlOREVYLUVOVFJZLUZPUk1BVDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfSU5ERVhfRU5UUllfRk9STUFUPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIGZvcm1hdCBkZWZpbml0aW9uCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RJbmRleExvb2t1cE1ldGhvZCI+PC9hPjxoMz5lbnVtIEdzdEluZGV4TG9va3VwTWV0aG9kPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGVudW0geworICBHU1RfSU5ERVhfTE9PS1VQX0VYQUNULAorICBHU1RfSU5ERVhfTE9PS1VQX0JFRk9SRSwKKyAgR1NUX0lOREVYX0xPT0tVUF9BRlRFUgorfSBHc3RJbmRleExvb2t1cE1ldGhvZDsKKzwvcHJlPgorPHA+CitTcGVjaWZ5IHRoZSBtZXRob2QgdG8gZmluZCBhbiBpbmRleCBlbnRyeSBpbiB0aGUgaW5kZXguCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1JTkRFWC1MT09LVVAtRVhBQ1Q6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0lOREVYX0xPT0tVUF9FWEFDVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlcmUgaGFzIHRvIGJlIGFuIGV4YWN0IGluZGV4ZW50cnkgd2l0aCB0aGUgZ2l2ZW4gZm9ybWF0L3ZhbHVlCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtSU5ERVgtTE9PS1VQLUJFRk9SRTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfSU5ERVhfTE9PS1VQX0JFRk9SRTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGV4YWN0IGVudHJ5IG9yIHRoZSBvbmUgYmVmb3JlIGl0Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtSU5ERVgtTE9PS1VQLUFGVEVSOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9JTkRFWF9MT09LVVBfQUZURVI8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBleGFjdCBlbnRyeSBvciB0aGUgb25lIGFmdGVyIGl0Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtSU5ERVgtTkFTU09DUzpDQVBTIj48L2E+PGgzPkdTVF9JTkRFWF9OQVNTT0NTKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0lOREVYX05BU1NPQ1MoZW50cnkpICAgICAgICAgICAgICAgICgoZW50cnkpLSZndDtkYXRhLmFzc29jLm5hc3NvY3MpCis8L3ByZT4KKzxwPgorR2V0IHRoZSBudW1iZXIgb2YgYXNzb2NpYXRpb25zIGluIHRoZSBlbnRyeS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW50cnk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGVudHJ5IHRvIHF1ZXJ5PC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1JTkRFWC1BU1NPQy1GTEFHUzpDQVBTIj48L2E+PGgzPkdTVF9JTkRFWF9BU1NPQ19GTEFHUygpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9JTkRFWF9BU1NPQ19GTEFHUyhlbnRyeSkgICAgICAgICAgICAoKGVudHJ5KS0mZ3Q7ZGF0YS5hc3NvYy5mbGFncykKKzwvcHJlPgorPHA+CitHZXQgdGhlIGZsYWdzIGZvciB0aGlzIGVudHJ5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbnRyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgZW50cnkgdG8gcXVlcnk8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUlOREVYLUFTU09DLUZPUk1BVDpDQVBTIj48L2E+PGgzPkdTVF9JTkRFWF9BU1NPQ19GT1JNQVQoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfSU5ERVhfQVNTT0NfRk9STUFUKGVudHJ5LGkpICAgICAgICAgKChlbnRyeSktJmd0O2RhdGEuYXNzb2MuYXNzb2NzWyhpKV0uZm9ybWF0KQorPC9wcmU+Cis8cD4KK0dldCB0aGUgaS10aCBmb3JtYXQgb2YgdGhlIGVudHJ5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVudHJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBlbnRyeSB0byBxdWVyeTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgZm9ybWF0IGluZGV4PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUlOREVYLUFTU09DLVZBTFVFOkNBUFMiPjwvYT48aDM+R1NUX0lOREVYX0FTU09DX1ZBTFVFKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0lOREVYX0FTU09DX1ZBTFVFKGVudHJ5LGkpICAgICAgICAgICgoZW50cnkpLSZndDtkYXRhLmFzc29jLmFzc29jc1soaSldLnZhbHVlKQorPC9wcmU+Cis8cD4KK0dldCB0aGUgaS10aCB2YWx1ZSBvZiB0aGUgZW50cnkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW50cnk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGVudHJ5IHRvIHF1ZXJ5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSB2YWx1ZSBpbmRleDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEluZGV4QXNzb2NpYXRpb24iPjwvYT48aDM+c3RydWN0IEdzdEluZGV4QXNzb2NpYXRpb248L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RJbmRleEFzc29jaWF0aW9uIHsKKyAgR3N0Rm9ybWF0ICAgICBmb3JtYXQ7CisgIGdpbnQ2NCAgICAgICAgdmFsdWU7Cit9OworPC9wcmU+Cis8cD4KK0FuIGFzc29jaWF0aW9uIGluIGFuIGVudHJ5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RJbmRleEFzc29jaWF0aW9uLmZvcm1hdCI+PC9hPmZvcm1hdDwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGZvcm1hdCBvZiB0aGUgYXNzb2NpYXRpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RJbmRleEFzc29jaWF0aW9uLnZhbHVlIj48L2E+dmFsdWU8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRpb248L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RBc3NvY0ZsYWdzIj48L2E+PGgzPmVudW0gR3N0QXNzb2NGbGFnczwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBlbnVtIHsKKyAgR1NUX0FTU09DSUFUSU9OX0ZMQUdfTk9ORSAgICAgICA9IDAsCisgIEdTVF9BU1NPQ0lBVElPTl9GTEFHX0tFWV9VTklUICAgPSAoMSAmbHQ7Jmx0OyAwKSwKKyAgR1NUX0FTU09DSUFUSU9OX0ZMQUdfREVMVEFfVU5JVCA9ICgxICZsdDsmbHQ7IDEpLAorCisgIC8qIG5ldyBmbGFncyBzaG91bGQgc3RhcnQgaGVyZSAqLworICBHU1RfQVNTT0NJQVRJT05fRkxBR19MQVNUICAgICA9ICgxICZsdDsmbHQ7IDgpCit9IEdzdEFzc29jRmxhZ3M7Cis8L3ByZT4KKzxwPgorRmxhZ3MgZm9yIGFuIGFzc29jaWF0aW9uIGVudHJ5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQVNTT0NJQVRJT04tRkxBRy1OT05FOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9BU1NPQ0lBVElPTl9GTEFHX05PTkU8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPm5vIGV4dHJhIGZsYWdzCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQVNTT0NJQVRJT04tRkxBRy1LRVktVU5JVDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQVNTT0NJQVRJT05fRkxBR19LRVlfVU5JVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGVudHJ5IG1hcmtzIGEga2V5IHVuaXQsIGEga2V5IHVuaXQgaXMgb25lCisgdGhhdCBtYXJrcyBhIHBsYWNlIHdoZXJlIG9uZSBjYW4gcmFuZG9tbHkgc2VlayB0by4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1BU1NPQ0lBVElPTi1GTEFHLURFTFRBLVVOSVQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0FTU09DSUFUSU9OX0ZMQUdfREVMVEFfVU5JVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGVudHJ5IG1hcmtzIGEgZGVsdGEgdW5pdCwgYSBkZWx0YSB1bml0CisgaXMgb25lIHRoYXQgbWFya3MgYSBwbGFjZSB3aGVyZSBvbmUgY2FuIHJlbGF0aXZlbHkgc2VlayB0by4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1BU1NPQ0lBVElPTi1GTEFHLUxBU1Q6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0FTU09DSUFUSU9OX0ZMQUdfTEFTVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZXh0cmEgdXNlciBkZWZpbmVkIGZsYWdzIHNob3VsZCBzdGFydCBoZXJlLgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUlOREVYLUZPUk1BVC1GT1JNQVQ6Q0FQUyI+PC9hPjxoMz5HU1RfSU5ERVhfRk9STUFUX0ZPUk1BVCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9JTkRFWF9GT1JNQVRfRk9STUFUKGVudHJ5KSAgICAgICAgICAoKGVudHJ5KS0mZ3Q7ZGF0YS5mb3JtYXQuZm9ybWF0KQorPC9wcmU+Cis8cD4KK0dldCB0aGUgZm9ybWF0IG9mIHRoZSBmb3JtYXQgZW50cnkKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW50cnk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGVudHJ5IHRvIHF1ZXJ5PC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1JTkRFWC1GT1JNQVQtS0VZOkNBUFMiPjwvYT48aDM+R1NUX0lOREVYX0ZPUk1BVF9LRVkoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfSU5ERVhfRk9STUFUX0tFWShlbnRyeSkgICAgICAgICAgICAgKChlbnRyeSktJmd0O2RhdGEuZm9ybWF0LmtleSkKKzwvcHJlPgorPHA+CitHZXQgdGhlIGtleSBvZiB0aGUgZm9ybWF0IGVudHJ5Cis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVudHJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBlbnRyeSB0byBxdWVyeTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtSU5ERVgtSUQtSU5WQUxJRDpDQVBTIj48L2E+PGgzPkdTVF9JTkRFWF9JRF9JTlZBTElEPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9JTkRFWF9JRF9JTlZBTElEICAgICAgICAgICAgICAgICAgICAoLTEpCis8L3ByZT4KKzxwPgorQ29uc3RhbnQgZm9yIGFuIGludmFsaWQgaW5kZXggaWQKKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUlOREVYLUlELURFU0NSSVBUSU9OOkNBUFMiPjwvYT48aDM+R1NUX0lOREVYX0lEX0RFU0NSSVBUSU9OKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0lOREVYX0lEX0RFU0NSSVBUSU9OKGVudHJ5KSAgICAgICAgICgoZW50cnkpLSZndDtkYXRhLmlkLmRlc2NyaXB0aW9uKQorPC9wcmU+Cis8cD4KK0dldCB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGlkIGVudHJ5Cis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVudHJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBlbnRyeSB0byBxdWVyeTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RJbmRleEZpbHRlciI+PC9hPjxoMz5Hc3RJbmRleEZpbHRlciAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAoKkdzdEluZGV4RmlsdGVyKSAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleDwvc3Bhbj48L2E+ICppbmRleDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHc3RJbmRleEVudHJ5IiB0aXRsZT0ic3RydWN0IEdzdEluZGV4RW50cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleEVudHJ5PC9zcGFuPjwvYT4gKmVudHJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRnVuY3Rpb24gdG8gZmlsdGVyIG91dCBlbnRyaWVzIGluIHRoZSBpbmRleC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgaW5kZXggYmVpbmcgcXVlcmllZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW50cnk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGVudHJ5IHRvIGJlIGFkZGVkLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlVzZXIgZGF0YSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgZW50cnkgaXMgdG8gYmUgYWRkZWQKK3RvIHRoZSBpbmRleCwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0SW5kZXhSZXNvbHZlck1ldGhvZCI+PC9hPjxoMz5lbnVtIEdzdEluZGV4UmVzb2x2ZXJNZXRob2Q8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9JTkRFWF9SRVNPTFZFUl9DVVNUT00sCisgIEdTVF9JTkRFWF9SRVNPTFZFUl9HVFlQRSwKKyAgR1NUX0lOREVYX1JFU09MVkVSX1BBVEgKK30gR3N0SW5kZXhSZXNvbHZlck1ldGhvZDsKKzwvcHJlPgorPHA+CitUaGUgbWV0aG9kIHVzZWQgdG8gcmVzb2x2ZSBpbmRleCB3cml0ZXJzCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1JTkRFWC1SRVNPTFZFUi1DVVNUT006Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0lOREVYX1JFU09MVkVSX0NVU1RPTTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VXNlIGEgY3VzdG9tIHJlc29sdmVyCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtSU5ERVgtUkVTT0xWRVItR1RZUEU6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0lOREVYX1JFU09MVkVSX0dUWVBFPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5SZXNvbHZlIGJhc2VkIG9uIHRoZSBHVHlwZSBvZiB0aGUgb2JqZWN0Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtSU5ERVgtUkVTT0xWRVItUEFUSDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfSU5ERVhfUkVTT0xWRVJfUEFUSDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UmVzb2x2ZSBvbiB0aGUgcGF0aCBpbiBncmFwaAorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0SW5kZXhSZXNvbHZlciI+PC9hPjxoMz5Hc3RJbmRleFJlc29sdmVyICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICgqR3N0SW5kZXhSZXNvbHZlcikgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4PC9zcGFuPjwvYT4gKmluZGV4PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKndyaXRlcl9zdHJpbmc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitGdW5jdGlvbiB0byByZXNvbHZlIGlkcyB0byB3cml0ZXIgZGVzY3JpcHRpb25zLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBpbmRleCBiZWluZyBxdWVyaWVkLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBvYmplY3QgdGhhdCB3YW50cyB0byB3cml0ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyX3N0cmluZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIGRlc2NyaXB0aW9uIG9mIHRoZSB3cml0ZXIuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlcl9kYXRhIGFzIHJlZ2lzdGVyZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIGFuIGlkIGNvdWxkIGJlIGFzc2lnbmVkIHRvIHRoZSB3cml0ZXIuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0SW5kZXhGbGFncyI+PC9hPjxoMz5lbnVtIEdzdEluZGV4RmxhZ3M8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9JTkRFWF9XUklUQUJMRSAgICA9IChHU1RfT0JKRUNUX0ZMQUdfTEFTVCAmbHQ7Jmx0OyAwKSwKKyAgR1NUX0lOREVYX1JFQURBQkxFICAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUICZsdDsmbHQ7IDEpLAorCisgIEdTVF9JTkRFWF9GTEFHX0xBU1QgICA9IChHU1RfT0JKRUNUX0ZMQUdfTEFTVCAmbHQ7Jmx0OyA4KQorfSBHc3RJbmRleEZsYWdzOworPC9wcmU+Cis8cD4KK0ZsYWdzIGZvciB0aGlzIGluZGV4Cis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1JTkRFWC1XUklUQUJMRTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfSU5ERVhfV1JJVEFCTEU8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBpbmRleCBpcyB3cml0YWJsZQorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUlOREVYLVJFQURBQkxFOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9JTkRFWF9SRUFEQUJMRTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGluZGV4IGlzIHJlYWRhYmxlCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtSU5ERVgtRkxBRy1MQVNUOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9JTkRFWF9GTEFHX0xBU1Q8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPkZpcnN0IGZsYWcgdGhhdCBjYW4gYmUgdXNlZCBieSBzdWJjbGFzc2VzCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtSU5ERVgtSVMtUkVBREFCTEU6Q0FQUyI+PC9hPjxoMz5HU1RfSU5ERVhfSVNfUkVBREFCTEUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfSU5ERVhfSVNfUkVBREFCTEUob2JqKSAgICAoR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAob2JqLCBHU1RfSU5ERVhfUkVBREFCTEUpKQorPC9wcmU+Cis8cD4KK0NoZWNrIGlmIHRoZSBpbmRleCBjYW4gYmUgcmVhZCBmcm9tCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iajwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgaW5kZXggdG8gY2hlY2s8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUlOREVYLUlTLVdSSVRBQkxFOkNBUFMiPjwvYT48aDM+R1NUX0lOREVYX0lTX1dSSVRBQkxFKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0lOREVYX0lTX1dSSVRBQkxFKG9iaikgICAgKEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKG9iaiwgR1NUX0lOREVYX1dSSVRBQkxFKSkKKzwvcHJlPgorPHA+CitDaGVjayBpZiB0aGUgaW5kZXggY2FuIGJlIHdyaXR0ZW4gdG8KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBpbmRleCB0byBjaGVjazwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtaW5kZXgtbmV3Ij48L2E+PGgzPmdzdF9pbmRleF9uZXcgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SW5kZXg8L3NwYW4+PC9hPiAqICAgICAgICAgIGdzdF9pbmRleF9uZXcgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlIGEgbmV3IGR1bW15IGluZGV4IG9iamVjdC4gVXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LWluZGV4IiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2V0X2luZGV4ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3NldF9pbmRleCgpPC9jb2RlPjwvYT4gdG8gYXNzaWduIHRoYXQKK3RvIGFuIGVsZW1lbnQgb3IgcGlwZWxpbmUuIFRoaXMgaW5kZXggaXMgbm90IHN0b3JpbmcgYW55dGhpbmcsIGJ1dCB3aWxsCitzdGlsbCBlbWl0IGUuZy4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEluZGV4LWVudHJ5LWFkZGVkIiB0aXRsZT0nVGhlICJlbnRyeS1hZGRlZCIgc2lnbmFsJz48c3BhbiBjbGFzcz0idHlwZSI+ImVudHJ5LWFkZGVkIjwvc3Bhbj48L2E+IHNpZ25hbC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IGluZGV4IG9iamVjdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtaW5kZXgtY29tbWl0Ij48L2E+PGgzPmdzdF9pbmRleF9jb21taXQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2luZGV4X2NvbW1pdCAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXg8L3NwYW4+PC9hPiAqaW5kZXg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gaWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitUZWxsIHRoZSBpbmRleCB0aGF0IHRoZSB3cml0ZXIgd2l0aCB0aGUgZ2l2ZW4gaWQgaXMgZG9uZQord2l0aCB0aGlzIGluZGV4IGFuZCBpcyBub3QgZ29pbmcgdG8gd3JpdGUgYW55IG1vcmUgZW50cmllcwordG8gaXQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5kZXg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGluZGV4IHRvIGNvbW1pdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHdyaXRlciB0aGF0IGNvbW1pdGVkIHRoZSBpbmRleDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1pbmRleC1nZXQtZ3JvdXAiPjwvYT48aDM+Z3N0X2luZGV4X2dldF9ncm91cCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgIGdzdF9pbmRleF9nZXRfZ3JvdXAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4PC9zcGFuPjwvYT4gKmluZGV4PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0IHRoZSBpZCBvZiB0aGUgY3VycmVudCBncm91cC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgaW5kZXggdG8gZ2V0IHRoZSBjdXJyZW50IGdyb3VwIGZyb208L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgaWQgb2YgdGhlIGN1cnJlbnQgZ3JvdXAuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWluZGV4LW5ldy1ncm91cCI+PC9hPjxoMz5nc3RfaW5kZXhfbmV3X2dyb3VwICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgZ3N0X2luZGV4X25ld19ncm91cCAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXg8L3NwYW4+PC9hPiAqaW5kZXg8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGUgYSBuZXcgZ3JvdXAgZm9yIHRoZSBnaXZlbiBpbmRleC4gSXQgd2lsbCBiZQorc2V0IGFzIHRoZSBjdXJyZW50IGdyb3VwLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBpbmRleCB0byBjcmVhdGUgdGhlIG5ldyBncm91cCBpbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBpZCBvZiB0aGUgbmV3bHkgY3JlYXRlZCBncm91cC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtaW5kZXgtc2V0LWdyb3VwIj48L2E+PGgzPmdzdF9pbmRleF9zZXRfZ3JvdXAgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2luZGV4X3NldF9ncm91cCAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXg8L3NwYW4+PC9hPiAqaW5kZXg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gZ3JvdXBudW08L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXQgdGhlIGN1cnJlbnQgZ3JvdXBudW1iZXIgdG8gdGhlIGdpdmVuIGFyZ3VtZW50LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBpbmRleCB0byBzZXQgdGhlIG5ldyBncm91cCBpbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Z3JvdXBudW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGdyb3VwbnVtYmVyIHRvIHNldDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIG9wZXJhdGlvbiBzdWNjZWVkZWQsIEZBTFNFIGlmIHRoZSBncm91cAorZGlkIG5vdCBleGlzdC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtaW5kZXgtc2V0LWNlcnRhaW50eSI+PC9hPjxoMz5nc3RfaW5kZXhfc2V0X2NlcnRhaW50eSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfaW5kZXhfc2V0X2NlcnRhaW50eSAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleDwvc3Bhbj48L2E+ICppbmRleDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHc3RJbmRleENlcnRhaW50eSIgdGl0bGU9ImVudW0gR3N0SW5kZXhDZXJ0YWludHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleENlcnRhaW50eTwvc3Bhbj48L2E+IGNlcnRhaW50eTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldCB0aGUgY2VydGFpbnR5IG9mIHRoZSBnaXZlbiBpbmRleC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgaW5kZXggdG8gc2V0IHRoZSBjZXJ0YWludHkgb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNlcnRhaW50eTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY2VydGFpbnR5IHRvIHNldDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1pbmRleC1nZXQtY2VydGFpbnR5Ij48L2E+PGgzPmdzdF9pbmRleF9nZXRfY2VydGFpbnR5ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHc3RJbmRleENlcnRhaW50eSIgdGl0bGU9ImVudW0gR3N0SW5kZXhDZXJ0YWludHkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SW5kZXhDZXJ0YWludHk8L3NwYW4+PC9hPiAgIGdzdF9pbmRleF9nZXRfY2VydGFpbnR5ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4PC9zcGFuPjwvYT4gKmluZGV4PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0IHRoZSBjZXJ0YWludHkgb2YgdGhlIGdpdmVuIGluZGV4LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBpbmRleCB0byBnZXQgdGhlIGNlcnRhaW50eSBvZjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjZXJ0YWludHkgb2YgdGhlIGluZGV4LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1pbmRleC1zZXQtZmlsdGVyIj48L2E+PGgzPmdzdF9pbmRleF9zZXRfZmlsdGVyICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9pbmRleF9zZXRfZmlsdGVyICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4PC9zcGFuPjwvYT4gKmluZGV4PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEluZGV4RmlsdGVyIiB0aXRsZT0iR3N0SW5kZXhGaWx0ZXIgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleEZpbHRlcjwvc3Bhbj48L2E+IGZpbHRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0xldHMgdGhlIGFwcCByZWdpc3RlciBhIGN1c3RvbSBmaWx0ZXIgZnVuY3Rpb24gc28gdGhhdAoraXQgY2FuIHNlbGVjdCB3aGF0IGVudHJpZXMgc2hvdWxkIGJlIHN0b3JlZCBpbiB0aGUgaW5kZXguCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5kZXg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGluZGV4IHRvIHJlZ2lzdGVyIHRoZSBmaWx0ZXIgb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpbHRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZmlsdGVyIHRvIHJlZ2lzdGVyPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZGF0YSBwYXNzZWQgdG8gdGhlIGZpbHRlciBmdW5jdGlvbjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1pbmRleC1zZXQtZmlsdGVyLWZ1bGwiPjwvYT48aDM+Z3N0X2luZGV4X3NldF9maWx0ZXJfZnVsbCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfaW5kZXhfc2V0X2ZpbHRlcl9mdWxsICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleDwvc3Bhbj48L2E+ICppbmRleDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHc3RJbmRleEZpbHRlciIgdGl0bGU9IkdzdEluZGV4RmlsdGVyICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXhGaWx0ZXI8L3NwYW4+PC9hPiBmaWx0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1EYXRhc2V0cy5odG1sI0dEZXN0cm95Tm90aWZ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R0Rlc3Ryb3lOb3RpZnk8L3NwYW4+PC9hPiB1c2VyX2RhdGFfZGVzdHJveTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0xldHMgdGhlIGFwcCByZWdpc3RlciBhIGN1c3RvbSBmaWx0ZXIgZnVuY3Rpb24gc28gdGhhdAoraXQgY2FuIHNlbGVjdCB3aGF0IGVudHJpZXMgc2hvdWxkIGJlIHN0b3JlZCBpbiB0aGUgaW5kZXguCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5kZXg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGluZGV4IHRvIHJlZ2lzdGVyIHRoZSBmaWx0ZXIgb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpbHRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZmlsdGVyIHRvIHJlZ2lzdGVyPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZGF0YSBwYXNzZWQgdG8gdGhlIGZpbHRlciBmdW5jdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhX2Rlc3Ryb3k8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZnVuY3Rpb24gdG8gY2FsbCB3aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT4gaXMgdW5zZXQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtaW5kZXgtc2V0LXJlc29sdmVyIj48L2E+PGgzPmdzdF9pbmRleF9zZXRfcmVzb2x2ZXIgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2luZGV4X3NldF9yZXNvbHZlciAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXg8L3NwYW4+PC9hPiAqaW5kZXg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0SW5kZXhSZXNvbHZlciIgdGl0bGU9IkdzdEluZGV4UmVzb2x2ZXIgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleFJlc29sdmVyPC9zcGFuPjwvYT4gcmVzb2x2ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitMZXRzIHRoZSBhcHAgcmVnaXN0ZXIgYSBjdXN0b20gZnVuY3Rpb24gdG8gbWFwIGluZGV4CitpZHMgdG8gd3JpdGVyIGRlc2NyaXB0aW9ucy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgaW5kZXggdG8gcmVnaXN0ZXIgdGhlIHJlc29sdmVyIG9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZXNvbHZlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcmVzb2x2ZXIgdG8gcmVnaXN0ZXI8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5kYXRhIHBhc3NlZCB0byB0aGUgcmVzb2x2ZXIgZnVuY3Rpb248L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtaW5kZXgtc2V0LXJlc29sdmVyLWZ1bGwiPjwvYT48aDM+Z3N0X2luZGV4X3NldF9yZXNvbHZlcl9mdWxsICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9pbmRleF9zZXRfcmVzb2x2ZXJfZnVsbCAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4PC9zcGFuPjwvYT4gKmluZGV4PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEluZGV4UmVzb2x2ZXIiIHRpdGxlPSJHc3RJbmRleFJlc29sdmVyICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXhSZXNvbHZlcjwvc3Bhbj48L2E+IHJlc29sdmVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRGF0YXNldHMuaHRtbCNHRGVzdHJveU5vdGlmeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT4gdXNlcl9kYXRhX2Rlc3Ryb3k8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitMZXRzIHRoZSBhcHAgcmVnaXN0ZXIgYSBjdXN0b20gZnVuY3Rpb24gdG8gbWFwIGluZGV4CitpZHMgdG8gd3JpdGVyIGRlc2NyaXB0aW9ucy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgaW5kZXggdG8gcmVnaXN0ZXIgdGhlIHJlc29sdmVyIG9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZXNvbHZlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcmVzb2x2ZXIgdG8gcmVnaXN0ZXI8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5kYXRhIHBhc3NlZCB0byB0aGUgcmVzb2x2ZXIgZnVuY3Rpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YV9kZXN0cm95PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmRlc3Ryb3kgZnVuY3Rpb24gZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTg8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1pbmRleC1nZXQtd3JpdGVyLWlkIj48L2E+PGgzPmdzdF9pbmRleF9nZXRfd3JpdGVyX2lkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9pbmRleF9nZXRfd3JpdGVyX2lkICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4PC9zcGFuPjwvYT4gKmluZGV4PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gKmlkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQmVmb3JlIGVudHJpZXMgY2FuIGJlIGFkZGVkIHRvIHRoZSBpbmRleCwgYSB3cml0ZXIKK3Nob3VsZCBvYnRhaW4gYSB1bmlxdWUgaWQuIFRoZSBtZXRob2RzIHRvIGFkZCBuZXcgZW50cmllcwordG8gdGhlIGluZGV4IHJlcXVpcmUgdGhpcyBpZCBhcyBhbiBhcmd1bWVudC4KKzwvcD4KKzxwPgorVGhlIGFwcGxpY2F0aW9uIGNhbiBpbXBsZW1lbnQgYSBjdXN0b20gZnVuY3Rpb24gdG8gbWFwIHRoZSB3cml0ZXIgb2JqZWN0Cit0byBhIHN0cmluZy4gVGhhdCBzdHJpbmcgd2lsbCBiZSB1c2VkIHRvIHJlZ2lzdGVyIG9yIGxvb2sgdXAgYW4gaWQKK2luIHRoZSBpbmRleC4KKzwvcD4KKzxwPgorPC9wPgorPGRpdiBjbGFzcz0ibm90ZSIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPgorPGgzIGNsYXNzPSJ0aXRsZSI+Tm90ZTwvaDM+CitUaGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPidzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULUxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9PQkpFQ1RfTE9DSygpIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX09CSkVDVF9MT0NLPC9zcGFuPjwvYT4sIGFzIHRoZSBkZWZhdWx0CityZXNvbHZlciBtYXkgY2FsbCBmdW5jdGlvbnMgdGhhdCB0YWtlIHRoZSBvYmplY3QgbG9jayBhcyB3ZWxsLCBhbmQKK3RoZSBsb2NrIGlzIG5vdCByZWN1cnNpdmUuCis8L2Rpdj4KKzxwPgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBpbmRleCB0byBnZXQgYSB1bmlxdWUgd3JpdGUgaWQgZm9yPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIEdzdE9iamVjdCB0byBhbGxvY2F0ZSBhbiBpZCBmb3I8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgcG9pbnRlciB0byBhIGdpbnQgdG8gaG9sZCB0aGUgaWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSB3cml0ZXIgd291bGQgYmUgbWFwcGVkIHRvIGFuIGlkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1pbmRleC1hZGQtZm9ybWF0Ij48L2E+PGgzPmdzdF9pbmRleF9hZGRfZm9ybWF0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHc3RJbmRleEVudHJ5IiB0aXRsZT0ic3RydWN0IEdzdEluZGV4RW50cnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SW5kZXhFbnRyeTwvc3Bhbj48L2E+ICogICAgIGdzdF9pbmRleF9hZGRfZm9ybWF0ICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4PC9zcGFuPjwvYT4gKmluZGV4PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGlkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBZGRzIGEgZm9ybWF0IGVudHJ5IGludG8gdGhlIGluZGV4LiBUaGlzIGZ1bmN0aW9uIGlzCit1c2VkIHRvIG1hcCBkeW5hbWljIEdzdEZvcm1hdCBpZHMgdG8gdGhlaXIgb3JpZ2luYWwKK2Zvcm1hdCBrZXkuCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdzdF9pbmRleF9lbnRyeV9mcmVlCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5kZXg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGluZGV4IHRvIGFkZCB0aGUgZW50cnkgdG88L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBpZCBvZiB0aGUgaW5kZXggd3JpdGVyPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGZvcm1hdCB0byBhZGQgdG8gdGhlIGluZGV4PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBwb2ludGVyIHRvIHRoZSBuZXdseSBhZGRlZCBlbnRyeSBpbiB0aGUgaW5kZXguIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtaW5kZXgtYWRkLWFzc29jaWF0aW9uIj48L2E+PGgzPmdzdF9pbmRleF9hZGRfYXNzb2NpYXRpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEluZGV4RW50cnkiIHRpdGxlPSJzdHJ1Y3QgR3N0SW5kZXhFbnRyeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJbmRleEVudHJ5PC9zcGFuPjwvYT4gKiAgICAgZ3N0X2luZGV4X2FkZF9hc3NvY2lhdGlvbiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXg8L3NwYW4+PC9hPiAqaW5kZXg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gaWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0QXNzb2NGbGFncyIgdGl0bGU9ImVudW0gR3N0QXNzb2NGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFzc29jRmxhZ3M8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiB2YWx1ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBc3NvY2lhdGUgZ2l2ZW4gZm9ybWF0L3ZhbHVlIHBhaXJzIHdpdGggZWFjaCBvdGhlci4KK0JlIHN1cmUgdG8gcGFzcyBnaW50NjQgdmFsdWVzIHRvIHRoaXMgZnVuY3Rpb25zIHZhcmFyZ3MsCit5b3UgbWlnaHQgd2FudCB0byB1c2UgYSBnaW50NjQgY2FzdCB0byBiZSBzdXJlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBpbmRleCB0byBhZGQgdGhlIGVudHJ5IHRvPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgaWQgb2YgdGhlIGluZGV4IHdyaXRlcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZ3M8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+b3B0aW5hbCBmbGFncyBmb3IgdGhpcyBlbnRyeTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBmb3JtYXQgb2YgdGhlIHZhbHVlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdmFsdWU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5vdGhlciBmb3JtYXQvdmFsdWUgcGFpcnMgb3IgMCB0byBlbmQgdGhlIGxpc3Q8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGFkZGVkIGVudHJ5IGluIHRoZSBpbmRleC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtaW5kZXgtYWRkLWFzc29jaWF0aW9udiI+PC9hPjxoMz5nc3RfaW5kZXhfYWRkX2Fzc29jaWF0aW9udiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0SW5kZXhFbnRyeSIgdGl0bGU9InN0cnVjdCBHc3RJbmRleEVudHJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEluZGV4RW50cnk8L3NwYW4+PC9hPiAqICAgICBnc3RfaW5kZXhfYWRkX2Fzc29jaWF0aW9udiAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleDwvc3Bhbj48L2E+ICppbmRleDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBpZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHc3RBc3NvY0ZsYWdzIiB0aXRsZT0iZW51bSBHc3RBc3NvY0ZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QXNzb2NGbGFnczwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG48L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0SW5kZXhBc3NvY2lhdGlvbiIgdGl0bGU9InN0cnVjdCBHc3RJbmRleEFzc29jaWF0aW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXhBc3NvY2lhdGlvbjwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQXNzb2NpYXRlIGdpdmVuIGZvcm1hdC92YWx1ZSBwYWlycyB3aXRoIGVhY2ggb3RoZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5kZXg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGluZGV4IHRvIGFkZCB0aGUgZW50cnkgdG88L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBpZCBvZiB0aGUgaW5kZXggd3JpdGVyPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5vcHRpbmFsIGZsYWdzIGZvciB0aGlzIGVudHJ5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm51bWJlciBvZiBhc3NvY2lhdGlvbnM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bGlzdCBvZiBhc3NvY2lhdGlvbnM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGFkZGVkIGVudHJ5IGluIHRoZSBpbmRleC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtaW5kZXgtYWRkLW9iamVjdCI+PC9hPjxoMz5nc3RfaW5kZXhfYWRkX29iamVjdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0SW5kZXhFbnRyeSIgdGl0bGU9InN0cnVjdCBHc3RJbmRleEVudHJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEluZGV4RW50cnk8L3NwYW4+PC9hPiAqICAgICBnc3RfaW5kZXhfYWRkX29iamVjdCAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleDwvc3Bhbj48L2E+ICppbmRleDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBpZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICprZXk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBvYmplY3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBZGQgdGhlIGdpdmVuIG9iamVjdCB0byB0aGUgaW5kZXggd2l0aCB0aGUgZ2l2ZW4ga2V5LgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5kZXg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGluZGV4IHRvIGFkZCB0aGUgb2JqZWN0IHRvPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgaWQgb2YgdGhlIGluZGV4IHdyaXRlcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+a2V5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEga2V5IGZvciB0aGUgb2JqZWN0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBHVHlwZSBvZiB0aGUgb2JqZWN0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBwb2ludGVyIHRvIHRoZSBvYmplY3QgdG8gYWRkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBwb2ludGVyIHRvIHRoZSBuZXdseSBhZGRlZCBlbnRyeSBpbiB0aGUgaW5kZXguPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWluZGV4LWFkZC1pZCI+PC9hPjxoMz5nc3RfaW5kZXhfYWRkX2lkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHc3RJbmRleEVudHJ5IiB0aXRsZT0ic3RydWN0IEdzdEluZGV4RW50cnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SW5kZXhFbnRyeTwvc3Bhbj48L2E+ICogICAgIGdzdF9pbmRleF9hZGRfaWQgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4PC9zcGFuPjwvYT4gKmluZGV4PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGlkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmRlc2NyaXB0aW9uPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQWRkIGFuIGlkIGVudHJ5IGludG8gdGhlIGluZGV4LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBpbmRleCB0byBhZGQgdGhlIGVudHJ5IHRvPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgaWQgb2YgdGhlIGluZGV4IHdyaXRlcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzY3JpcHRpb248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBpbmRleCB3cml0ZXI8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGFkZGVkIGVudHJ5IGluIHRoZSBpbmRleC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtaW5kZXgtZ2V0LWFzc29jLWVudHJ5Ij48L2E+PGgzPmdzdF9pbmRleF9nZXRfYXNzb2NfZW50cnkgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEluZGV4RW50cnkiIHRpdGxlPSJzdHJ1Y3QgR3N0SW5kZXhFbnRyeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJbmRleEVudHJ5PC9zcGFuPjwvYT4gKiAgICAgZ3N0X2luZGV4X2dldF9hc3NvY19lbnRyeSAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXg8L3NwYW4+PC9hPiAqaW5kZXg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gaWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0SW5kZXhMb29rdXBNZXRob2QiIHRpdGxlPSJlbnVtIEdzdEluZGV4TG9va3VwTWV0aG9kIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXhMb29rdXBNZXRob2Q8L3NwYW4+PC9hPiBtZXRob2Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0QXNzb2NGbGFncyIgdGl0bGU9ImVudW0gR3N0QXNzb2NGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFzc29jRmxhZ3M8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiB2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0ZpbmRzIHRoZSBnaXZlbiBmb3JtYXQvdmFsdWUgaW4gdGhlIGluZGV4Cis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5kZXg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGluZGV4IHRvIHNlYXJjaDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGlkIG9mIHRoZSBpbmRleCB3cml0ZXI8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1ldGhvZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgbG9va3VwIG1ldGhvZCB0byB1c2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZsYWdzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkZsYWdzIGZvciB0aGUgZW50cnk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZm9ybWF0IG9mIHRoZSB2YWx1ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHZhbHVlIHRvIGZpbmQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZW50cnkgYXNzb2NpYXRlZCB3aXRoIHRoZSB2YWx1ZSBvciBOVUxMIGlmIHRoZQordmFsdWUgd2FzIG5vdCBmb3VuZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtaW5kZXgtZ2V0LWFzc29jLWVudHJ5LWZ1bGwiPjwvYT48aDM+Z3N0X2luZGV4X2dldF9hc3NvY19lbnRyeV9mdWxsICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHc3RJbmRleEVudHJ5IiB0aXRsZT0ic3RydWN0IEdzdEluZGV4RW50cnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SW5kZXhFbnRyeTwvc3Bhbj48L2E+ICogICAgIGdzdF9pbmRleF9nZXRfYXNzb2NfZW50cnlfZnVsbCAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4PC9zcGFuPjwvYT4gKmluZGV4PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGlkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEluZGV4TG9va3VwTWV0aG9kIiB0aXRsZT0iZW51bSBHc3RJbmRleExvb2t1cE1ldGhvZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4TG9va3VwTWV0aG9kPC9zcGFuPjwvYT4gbWV0aG9kPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEFzc29jRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEFzc29jRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBc3NvY0ZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gdmFsdWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0NvbXBhcmVEYXRhRnVuYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdDb21wYXJlRGF0YUZ1bmM8L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRmluZHMgdGhlIGdpdmVuIGZvcm1hdC92YWx1ZSBpbiB0aGUgaW5kZXggd2l0aCB0aGUgZ2l2ZW4KK2NvbXBhcmUgZnVuY3Rpb24gYW5kIHVzZXJfZGF0YS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgaW5kZXggdG8gc2VhcmNoPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgaWQgb2YgdGhlIGluZGV4IHdyaXRlcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWV0aG9kPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBsb29rdXAgbWV0aG9kIHRvIHVzZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZ3M8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+RmxhZ3MgZm9yIHRoZSBlbnRyeTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBmb3JtYXQgb2YgdGhlIHZhbHVlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdmFsdWUgdG8gZmluZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZnVuY3Rpb24gdXNlZCB0byBjb21wYXJlIGVudHJpZXM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VyIGRhdGEgcGFzc2VkIHRvIHRoZSBjb21wYXJlIGZ1bmN0aW9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGVudHJ5IGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFsdWUgb3IgTlVMTCBpZiB0aGUKK3ZhbHVlIHdhcyBub3QgZm91bmQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWluZGV4LWVudHJ5LWNvcHkiPjwvYT48aDM+Z3N0X2luZGV4X2VudHJ5X2NvcHkgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEluZGV4RW50cnkiIHRpdGxlPSJzdHJ1Y3QgR3N0SW5kZXhFbnRyeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJbmRleEVudHJ5PC9zcGFuPjwvYT4gKiAgICAgZ3N0X2luZGV4X2VudHJ5X2NvcHkgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHc3RJbmRleEVudHJ5IiB0aXRsZT0ic3RydWN0IEdzdEluZGV4RW50cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleEVudHJ5PC9zcGFuPjwvYT4gKmVudHJ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ29waWVzIGFuIGVudHJ5IGFuZCByZXR1cm5zIHRoZSByZXN1bHQuCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdzdF9pbmRleF9lbnRyeV9mcmVlCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW50cnk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGVudHJ5IHRvIGNvcHk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ld2x5IGFsbG9jYXRlZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHc3RJbmRleEVudHJ5IiB0aXRsZT0ic3RydWN0IEdzdEluZGV4RW50cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleEVudHJ5PC9zcGFuPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtaW5kZXgtZW50cnktZnJlZSI+PC9hPjxoMz5nc3RfaW5kZXhfZW50cnlfZnJlZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfaW5kZXhfZW50cnlfZnJlZSAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEluZGV4RW50cnkiIHRpdGxlPSJzdHJ1Y3QgR3N0SW5kZXhFbnRyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4RW50cnk8L3NwYW4+PC9hPiAqZW50cnk8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitGcmVlIHRoZSBtZW1vcnkgdXNlZCBieSB0aGUgZ2l2ZW4gZW50cnkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVudHJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBlbnRyeSB0byBmcmVlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1pbmRleC1lbnRyeS1hc3NvYy1tYXAiPjwvYT48aDM+Z3N0X2luZGV4X2VudHJ5X2Fzc29jX21hcCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfaW5kZXhfZW50cnlfYXNzb2NfbWFwICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEluZGV4RW50cnkiIHRpdGxlPSJzdHJ1Y3QgR3N0SW5kZXhFbnRyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4RW50cnk8L3NwYW4+PC9hPiAqZW50cnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyBhbHRlcm5hdGl2ZSBmb3JtYXRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5kZXhlbnRyeS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbnRyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgaW5kZXggdG8gc2VhcmNoPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGZvcm1hdCBvZiB0aGUgdmFsdWUgdGhlIGZpbmQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgcG9pbnRlciB0byBzdG9yZSB0aGUgdmFsdWU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZXJlIHdhcyBhIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4KK2Zvcm1hdC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdEluZGV4LnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RJbmRleC0tcmVzb2x2ZXIiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4icmVzb2x2ZXIiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAicmVzb2x2ZXIiICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHc3RJbmRleFJlc29sdmVyIiB0aXRsZT0iR3N0SW5kZXhSZXNvbHZlciAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4UmVzb2x2ZXI8L3NwYW4+PC9hPiAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5TZWxlY3QgYSBwcmVkZWZpbmVkIG9iamVjdCB0byBzdHJpbmcgbWFwcGVyLjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IEdTVF9JTkRFWF9SRVNPTFZFUl9QQVRIPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdEluZGV4LnNpZ25hbC1kZXRhaWxzIj48L2E+PGgyPlNpZ25hbCBEZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEluZGV4LWVudHJ5LWFkZGVkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImVudHJ5LWFkZGVkIjwvY29kZT4gc2lnbmFsPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIHVzZXJfZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleDwvc3Bhbj48L2E+ICAgICAgKmdzdGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHc3RJbmRleEVudHJ5IiB0aXRsZT0ic3RydWN0IEdzdEluZGV4RW50cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleEVudHJ5PC9zcGFuPjwvYT4gKmFyZzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgdXNlcl9kYXRhKSAgICAgIDogPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlJ1biBMYXN0PC9jb2RlPjwvYT48L3ByZT4KKzxwPgorSXMgZW1pdHRlZCB3aGVuIGEgbmV3IGVudHJ5IGlzIGFkZGVkIHRvIHRoZSBpbmRleC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5nc3RpbmRleDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hcmcxPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBlbnRyeSBhZGRlZCB0byB0aGUgaW5kZXguPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0SW5kZXguc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0SW5kZXhGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXhGYWN0b3J5PC9zcGFuPjwvYT4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9Hc3RJbmRleEZhY3RvcnkuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvR3N0SW5kZXhGYWN0b3J5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY0MWM5MAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2h0bWwvR3N0SW5kZXhGYWN0b3J5Lmh0bWwKQEAgLTAsMCArMSwyMDYgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5Hc3RJbmRleEZhY3Rvcnk8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCIgdGl0bGU9IkdzdEl0ZXJhdG9yIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RJbmRleC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNHc3RJbmRleEZhY3Rvcnkuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RJbmRleEZhY3RvcnkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEluZGV4RmFjdG9yeS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iR3N0SW5kZXhGYWN0b3J5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0SW5kZXhGYWN0b3J5LnRvcF9vZl9wYWdlIj48L2E+R3N0SW5kZXhGYWN0b3J5PC9zcGFuPjwvaDI+Cis8cD5Hc3RJbmRleEZhY3Rvcnkg4oCUIENyZWF0ZSBHc3RJbmRleGVzIGZyb20gYSBmYWN0b3J5PC9wPgorPC90ZD4KKzx0ZCB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgorPC90cj48L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGEgbmFtZT0iR3N0SW5kZXhGYWN0b3J5LnN5bm9wc2lzIj48L2E+PGgyPlN5bm9wc2lzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7CisKK3N0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4RmFjdG9yeS5odG1sI0dzdEluZGV4RmFjdG9yeS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0SW5kZXhGYWN0b3J5Ij5Hc3RJbmRleEZhY3Rvcnk8L2E+OworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0SW5kZXhGYWN0b3J5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEluZGV4RmFjdG9yeTwvc3Bhbj48L2E+ICogICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXhGYWN0b3J5Lmh0bWwjZ3N0LWluZGV4LWZhY3RvcnktbmV3IiB0aXRsZT0iZ3N0X2luZGV4X2ZhY3RvcnlfbmV3ICgpIj5nc3RfaW5kZXhfZmFjdG9yeV9uZXc8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmxvbmdkZXNjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4RmFjdG9yeS5odG1sI2dzdC1pbmRleC1mYWN0b3J5LWRlc3Ryb3kiIHRpdGxlPSJnc3RfaW5kZXhfZmFjdG9yeV9kZXN0cm95ICgpIj5nc3RfaW5kZXhfZmFjdG9yeV9kZXN0cm95PC9hPiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXhGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RJbmRleEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleEZhY3Rvcnk8L3NwYW4+PC9hPiAqZmFjdG9yeTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXhGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RJbmRleEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SW5kZXhGYWN0b3J5PC9zcGFuPjwvYT4gKiAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleEZhY3RvcnkuaHRtbCNnc3QtaW5kZXgtZmFjdG9yeS1maW5kIiB0aXRsZT0iZ3N0X2luZGV4X2ZhY3RvcnlfZmluZCAoKSI+Z3N0X2luZGV4X2ZhY3RvcnlfZmluZDwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEluZGV4PC9zcGFuPjwvYT4gKiAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXhGYWN0b3J5Lmh0bWwjZ3N0LWluZGV4LWZhY3RvcnktY3JlYXRlIiB0aXRsZT0iZ3N0X2luZGV4X2ZhY3RvcnlfY3JlYXRlICgpIj5nc3RfaW5kZXhfZmFjdG9yeV9jcmVhdGU8L2E+ICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXhGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RJbmRleEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleEZhY3Rvcnk8L3NwYW4+PC9hPiAqZmFjdG9yeTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEluZGV4PC9zcGFuPjwvYT4gKiAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXhGYWN0b3J5Lmh0bWwjZ3N0LWluZGV4LWZhY3RvcnktbWFrZSIgdGl0bGU9ImdzdF9pbmRleF9mYWN0b3J5X21ha2UgKCkiPmdzdF9pbmRleF9mYWN0b3J5X21ha2U8L2E+ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdEluZGV4RmFjdG9yeS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+R09iamVjdDwvYT4KKyAgICstLS0tPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KKyAgICAgICAgICstLS0tPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+CisgICAgICAgICAgICAgICArLS0tLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj5Hc3RQbHVnaW5GZWF0dXJlPC9hPgorICAgICAgICAgICAgICAgICAgICAgKy0tLS1Hc3RJbmRleEZhY3RvcnkKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RJbmRleEZhY3RvcnkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitHc3RJbmRleEZhY3RvcnkgaXMgdXNlZCB0byBkeW5hbWljYWxseSBjcmVhdGUgR3N0SW5kZXggaW1wbGVtZW50YXRpb25zLgorPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RJbmRleEZhY3RvcnkuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEluZGV4RmFjdG9yeS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdEluZGV4RmFjdG9yeTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEluZGV4RmFjdG9yeTs8L3ByZT4KKzxwPgorVGhlIEdzdEluZGV4RmFjdG9yeSBvYmplY3QKKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWluZGV4LWZhY3RvcnktbmV3Ij48L2E+PGgzPmdzdF9pbmRleF9mYWN0b3J5X25ldyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0SW5kZXhGYWN0b3J5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEluZGV4RmFjdG9yeTwvc3Bhbj48L2E+ICogICBnc3RfaW5kZXhfZmFjdG9yeV9uZXcgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbG9uZ2Rlc2M8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGUgYSBuZXcgaW5kZXhmYWN0b3J5IHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm5hbWUgb2YgaW5kZXhmYWN0b3J5IHRvIGNyZWF0ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bG9uZ2Rlc2M8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bG9uZyBkZXNjcmlwdGlvbiBvZiBpbmRleGZhY3RvcnkgdG8gY3JlYXRlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBHVHlwZSBvZiB0aGUgR3N0SW5kZXggZWxlbWVudCBvZiB0aGlzIGZhY3Rvcnk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXhGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RJbmRleEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleEZhY3Rvcnk8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1pbmRleC1mYWN0b3J5LWRlc3Ryb3kiPjwvYT48aDM+Z3N0X2luZGV4X2ZhY3RvcnlfZGVzdHJveSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfaW5kZXhfZmFjdG9yeV9kZXN0cm95ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEluZGV4RmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4RmFjdG9yeTwvc3Bhbj48L2E+ICpmYWN0b3J5PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVtb3ZlcyB0aGUgaW5kZXggZnJvbSB0aGUgZ2xvYmFsIGxpc3QuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZhY3Rvcnk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZmFjdG9yeSB0byBkZXN0cm95PC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1pbmRleC1mYWN0b3J5LWZpbmQiPjwvYT48aDM+Z3N0X2luZGV4X2ZhY3RvcnlfZmluZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0SW5kZXhGYWN0b3J5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEluZGV4RmFjdG9yeTwvc3Bhbj48L2E+ICogICBnc3RfaW5kZXhfZmFjdG9yeV9maW5kICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZWFyY2ggZm9yIGFuIGluZGV4ZmFjdG9yeSBvZiB0aGUgZ2l2ZW4gbmFtZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm5hbWUgb2YgaW5kZXhmYWN0b3J5IHRvIGZpbmQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEluZGV4RmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4RmFjdG9yeTwvc3Bhbj48L2E+IGlmIGZvdW5kLCBOVUxMIG90aGVyd2lzZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1pbmRleC1mYWN0b3J5LWNyZWF0ZSI+PC9hPjxoMz5nc3RfaW5kZXhfZmFjdG9yeV9jcmVhdGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SW5kZXg8L3NwYW4+PC9hPiAqICAgICAgICAgIGdzdF9pbmRleF9mYWN0b3J5X2NyZWF0ZSAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0SW5kZXhGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXhGYWN0b3J5PC9zcGFuPjwvYT4gKmZhY3Rvcnk8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGUgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4PC9zcGFuPjwvYT4gaW5zdGFuY2UgZnJvbSB0aGUKK2dpdmVuIGluZGV4ZmFjdG9yeS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mYWN0b3J5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBmYWN0b3J5IHVzZWQgdG8gY3JlYXRlIHRoZSBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbmRleDwvc3Bhbj48L2E+IGluc3RhbmNlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWluZGV4LWZhY3RvcnktbWFrZSI+PC9hPjxoMz5nc3RfaW5kZXhfZmFjdG9yeV9tYWtlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEluZGV4PC9zcGFuPjwvYT4gKiAgICAgICAgICBnc3RfaW5kZXhfZmFjdG9yeV9tYWtlICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGUgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4PC9zcGFuPjwvYT4gaW5zdGFuY2UgZnJvbSB0aGUKK2luZGV4ZmFjdG9yeSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5hbWUgb2YgdGhlIGZhY3RvcnkgdXNlZCB0byBjcmVhdGUgdGhlIGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEluZGV4PC9zcGFuPjwvYT4gaW5zdGFuY2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdEluZGV4RmFjdG9yeS5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5kZXg8L3NwYW4+PC9hPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL0dzdE9iamVjdC5odG1sIGIvZG9jcy9nc3QvaHRtbC9Hc3RPYmplY3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzJmNWM5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9nc3QvaHRtbC9Hc3RPYmplY3QuaHRtbApAQCAtMCwwICsxLDk4NSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdzdE9iamVjdDwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RNaW5pT2JqZWN0Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdFBhZC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI0dzdE9iamVjdC5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdE9iamVjdC5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0T2JqZWN0Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0T2JqZWN0LmRlcml2ZWQtaW50ZXJmYWNlcyIgY2xhc3M9InNob3J0Y3V0Ij5Lbm93biBEZXJpdmVkIEludGVyZmFjZXM8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdE9iamVjdC5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdE9iamVjdC5zaWduYWxzIiBjbGFzcz0ic2hvcnRjdXQiPlNpZ25hbHM8L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iR3N0T2JqZWN0Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0T2JqZWN0LnRvcF9vZl9wYWdlIj48L2E+R3N0T2JqZWN0PC9zcGFuPjwvaDI+Cis8cD5Hc3RPYmplY3Qg4oCUIEJhc2UgY2xhc3MgZm9yIHRoZSBHU3RyZWFtZXIgb2JqZWN0IGhpZXJhcmNoeTwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9IkdzdE9iamVjdC5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisjaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OworCitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdE9iamVjdCI+R3N0T2JqZWN0PC9hPjsKK3N0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI0dzdE9iamVjdENsYXNzIiB0aXRsZT0ic3RydWN0IEdzdE9iamVjdENsYXNzIj5Hc3RPYmplY3RDbGFzczwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHc3RPYmplY3RGbGFncyIgdGl0bGU9ImVudW0gR3N0T2JqZWN0RmxhZ3MiPkdzdE9iamVjdEZsYWdzPC9hPjsKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI0dTVC1PQkpFQ1QtRkxBR1M6Q0FQUyIgdGl0bGU9IkdTVF9PQkpFQ1RfRkxBR1MoKSI+R1NUX09CSkVDVF9GTEFHUzwvYT4gICAgICAgICAgICAgICAgICAgIChvYmopCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULUZMQUctSVMtU0VUOkNBUFMiIHRpdGxlPSJHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUKCkiPkdTVF9PQkpFQ1RfRkxBR19JU19TRVQ8L2E+ICAgICAgICAgICAgICAob2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZykKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI0dTVC1PQkpFQ1QtRkxBRy1TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9PQkpFQ1RfRkxBR19TRVQoKSI+R1NUX09CSkVDVF9GTEFHX1NFVDwvYT4gICAgICAgICAgICAgICAgIChvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1GTEFHLVVOU0VUOkNBUFMiIHRpdGxlPSJHU1RfT0JKRUNUX0ZMQUdfVU5TRVQoKSI+R1NUX09CSkVDVF9GTEFHX1VOU0VUPC9hPiAgICAgICAgICAgICAgIChvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1OQU1FOkNBUFMiIHRpdGxlPSJHU1RfT0JKRUNUX05BTUUoKSI+R1NUX09CSkVDVF9OQU1FPC9hPiAgICAgICAgICAgICAgICAgICAgIChvYmopCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULVBBUkVOVDpDQVBTIiB0aXRsZT0iR1NUX09CSkVDVF9QQVJFTlQoKSI+R1NUX09CSkVDVF9QQVJFTlQ8L2E+ICAgICAgICAgICAgICAgICAgIChvYmopCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULVJFRkNPVU5UOkNBUFMiIHRpdGxlPSJHU1RfT0JKRUNUX1JFRkNPVU5UKCkiPkdTVF9PQkpFQ1RfUkVGQ09VTlQ8L2E+ICAgICAgICAgICAgICAgICAob2JqKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1SRUZDT1VOVC1WQUxVRTpDQVBTIiB0aXRsZT0iR1NUX09CSkVDVF9SRUZDT1VOVF9WQUxVRSgpIj5HU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFPC9hPiAgICAgICAgICAgKG9iaikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI0dTVC1PQkpFQ1QtTE9DSzpDQVBTIiB0aXRsZT0iR1NUX09CSkVDVF9MT0NLKCkiPkdTVF9PQkpFQ1RfTE9DSzwvYT4gICAgICAgICAgICAgICAgICAgICAob2JqKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1UUllMT0NLOkNBUFMiIHRpdGxlPSJHU1RfT0JKRUNUX1RSWUxPQ0soKSI+R1NUX09CSkVDVF9UUllMT0NLPC9hPiAgICAgICAgICAgICAgICAgIChvYmopCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULVVOTE9DSzpDQVBTIiB0aXRsZT0iR1NUX09CSkVDVF9VTkxPQ0soKSI+R1NUX09CSkVDVF9VTkxPQ0s8L2E+ICAgICAgICAgICAgICAgICAgIChvYmopCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULUdFVC1MT0NLOkNBUFMiIHRpdGxlPSJHU1RfT0JKRUNUX0dFVF9MT0NLKCkiPkdTVF9PQkpFQ1RfR0VUX0xPQ0s8L2E+ICAgICAgICAgICAgICAgICAob2JqKQorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1zZXQtbmFtZSIgdGl0bGU9ImdzdF9vYmplY3Rfc2V0X25hbWUgKCkiPmdzdF9vYmplY3Rfc2V0X25hbWU8L2E+ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC1uYW1lIiB0aXRsZT0iZ3N0X29iamVjdF9nZXRfbmFtZSAoKSI+Z3N0X29iamVjdF9nZXRfbmFtZTwvYT4gICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXNldC1wYXJlbnQiIHRpdGxlPSJnc3Rfb2JqZWN0X3NldF9wYXJlbnQgKCkiPmdzdF9vYmplY3Rfc2V0X3BhcmVudDwvYT4gICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnBhcmVudDwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKiAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC1wYXJlbnQiIHRpdGxlPSJnc3Rfb2JqZWN0X2dldF9wYXJlbnQgKCkiPmdzdF9vYmplY3RfZ2V0X3BhcmVudDwvYT4gICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC11bnBhcmVudCIgdGl0bGU9ImdzdF9vYmplY3RfdW5wYXJlbnQgKCkiPmdzdF9vYmplY3RfdW5wYXJlbnQ8L2E+ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1kZWZhdWx0LWRlZXAtbm90aWZ5IiB0aXRsZT0iZ3N0X29iamVjdF9kZWZhdWx0X2RlZXBfbm90aWZ5ICgpIj5nc3Rfb2JqZWN0X2RlZmF1bHRfZGVlcF9ub3RpZnk8L2E+ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvcmlnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR1BhcmFtU3BlYy5odG1sI0dQYXJhbVNwZWMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUGFyYW1TcGVjPC9zcGFuPjwvYT4gKnBzcGVjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKipleGNsdWRlZF9wcm9wczwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWRlZmF1bHQtZXJyb3IiIHRpdGxlPSJnc3Rfb2JqZWN0X2RlZmF1bHRfZXJyb3IgKCkiPmdzdF9vYmplY3RfZGVmYXVsdF9lcnJvcjwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzb3VyY2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1FcnJvci1SZXBvcnRpbmcuaHRtbCNHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRXJyb3I8L3NwYW4+PC9hPiAqZXJyb3I8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZGVidWc8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1jaGVjay11bmlxdWVuZXNzIiB0aXRsZT0iZ3N0X29iamVjdF9jaGVja191bmlxdWVuZXNzICgpIj5nc3Rfb2JqZWN0X2NoZWNrX3VuaXF1ZW5lc3M8L2E+ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWhhcy1hbmNlc3RvciIgdGl0bGU9ImdzdF9vYmplY3RfaGFzX2FuY2VzdG9yICgpIj5nc3Rfb2JqZWN0X2hhc19hbmNlc3RvcjwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICphbmNlc3RvcjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXJlZiIgdGl0bGU9ImdzdF9vYmplY3RfcmVmICgpIj5nc3Rfb2JqZWN0X3JlZjwvYT4gICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IG9iamVjdDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucmVmIiB0aXRsZT0iZ3N0X29iamVjdF91bnJlZiAoKSI+Z3N0X29iamVjdF91bnJlZjwvYT4gICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBvYmplY3Q8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1yZWYtc2luayIgdGl0bGU9ImdzdF9vYmplY3RfcmVmX3NpbmsgKCkiPmdzdF9vYmplY3RfcmVmX3Npbms8L2E+ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gb2JqZWN0PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtcmVwbGFjZSIgdGl0bGU9ImdzdF9vYmplY3RfcmVwbGFjZSAoKSI+Z3N0X29iamVjdF9yZXBsYWNlPC9hPiAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKipvbGRvYmo8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKm5ld29iajwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC1wYXRoLXN0cmluZyIgdGl0bGU9ImdzdF9vYmplY3RfZ2V0X3BhdGhfc3RyaW5nICgpIj5nc3Rfb2JqZWN0X2dldF9wYXRoX3N0cmluZzwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+KTsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RPYmplY3Qub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPkdPYmplY3Q8L2E+CisgICArLS0tLTxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+CisgICAgICAgICArLS0tLUdzdE9iamVjdAorICAgICAgICAgICAgICAgKy0tLS08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKyAgICAgICAgICAgICAgICstLS0tPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+R3N0UGFkVGVtcGxhdGU8L2E+CisgICAgICAgICAgICAgICArLS0tLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj5Hc3RQbHVnaW5GZWF0dXJlPC9hPgorICAgICAgICAgICAgICAgKy0tLS08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKyAgICAgICAgICAgICAgICstLS0tPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj5Hc3RCdXM8L2E+CisgICAgICAgICAgICAgICArLS0tLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj5Hc3RUYXNrPC9hPgorICAgICAgICAgICAgICAgKy0tLS08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCIgdGl0bGU9IkdzdFRhc2tQb29sIj5Hc3RUYXNrUG9vbDwvYT4KKyAgICAgICAgICAgICAgICstLS0tPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+CisgICAgICAgICAgICAgICArLS0tLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgorICAgICAgICAgICAgICAgKy0tLS08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij5Hc3RSZWdpc3RyeTwvYT4KKyAgICAgICAgICAgICAgICstLS0tPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+R3N0SW5kZXg8L2E+Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0T2JqZWN0LmRlcml2ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5Lbm93biBEZXJpdmVkIEludGVyZmFjZXM8L2gyPgorPHA+CitHc3RPYmplY3QgaXMgcmVxdWlyZWQgYnkKKyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+R3N0Q2hpbGRQcm94eTwvYT4uPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RPYmplY3QucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHc3RPYmplY3QtLW5hbWUiIHRpdGxlPSdUaGUgIm5hbWUiIHByb3BlcnR5Jz5uYW1lPC9hPiIgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+KiAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdAorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI0dzdE9iamVjdC0tcGFyZW50IiB0aXRsZT0nVGhlICJwYXJlbnQiIHByb3BlcnR5Jz5wYXJlbnQ8L2E+IiAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiogICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdE9iamVjdC5zaWduYWxzIj48L2E+PGgyPlNpZ25hbHM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1kZWVwLW5vdGlmeSIgdGl0bGU9J1RoZSAiZGVlcC1ub3RpZnkiIHNpZ25hbCc+ZGVlcC1ub3RpZnk8L2E+IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtTk8tSE9PS1M6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5vIEhvb2tzPC9jb2RlPjwvYT4KKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RPYmplY3QuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiBwcm92aWRlcyBhIHJvb3QgZm9yIHRoZSBvYmplY3QgaGllcmFyY2h5IHRyZWUgZmlsZWQgaW4gYnkgdGhlCitHU3RyZWFtZXIgbGlicmFyeS4gIEl0IGlzIGN1cnJlbnRseSBhIHRoaW4gd3JhcHBlciBvbiB0b3Agb2YKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+LiBJdCBpcyBhbiBhYnN0cmFjdCBjbGFzcyB0aGF0IGlzIG5vdCB2ZXJ5IHVzYWJsZSBvbiBpdHMgb3duLgorPC9wPgorPHA+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiBnaXZlcyB1cyBiYXNpYyByZWZjb3VudGluZywgcGFyZW50aW5nIGZ1bmN0aW9uYWxpdHkgYW5kIGxvY2tpbmcuCitNb3N0IG9mIHRoZSBmdW5jdGlvbiBhcmUganVzdCBleHRlbmRlZCBmb3Igc3BlY2lhbCBHU3RyZWFtZXIgbmVlZHMgYW5kIGNhbiBiZQorZm91bmQgdW5kZXIgdGhlIHNhbWUgbmFtZSBpbiB0aGUgYmFzZSBjbGFzcyBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiB3aGljaCBpcyA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPgorKGUuZy4gPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI2ctb2JqZWN0LXJlZiI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX29iamVjdF9yZWYoKTwvY29kZT48L2E+IGJlY29tZXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtcmVmIiB0aXRsZT0iZ3N0X29iamVjdF9yZWYgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X29iamVjdF9yZWYoKTwvY29kZT48L2E+KS4KKzwvcD4KKzxwPgorVGhlIG1vc3QgaW50ZXJlc3RpbmcgZGlmZmVyZW5jZSBiZXR3ZWVuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+IGFuZCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiBpcyB0aGUKKyJmbG9hdGluZyIgcmVmZXJlbmNlIGNvdW50LiBBIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+IGlzIGNyZWF0ZWQgd2l0aCBhIHJlZmVyZW5jZSBjb3VudCBvZgorMSwgb3duZWQgYnkgdGhlIGNyZWF0b3Igb2YgdGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+LiAoVGhlIG93bmVyIG9mIGEgcmVmZXJlbmNlIGlzIHRoZQorY29kZSBzZWN0aW9uIHRoYXQgaGFzIHRoZSByaWdodCB0byBjYWxsIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucmVmIiB0aXRsZT0iZ3N0X29iamVjdF91bnJlZiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X3VucmVmKCk8L2NvZGU+PC9hPiBpbiBvcmRlciB0bworcmVtb3ZlIHRoYXQgcmVmZXJlbmNlLikgQSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiBpcyBjcmVhdGVkIHdpdGggYSByZWZlcmVuY2UgY291bnQgb2YgMQorYWxzbywgYnV0IGl0IGlzbid0IG93bmVkIGJ5IGFueW9uZTsgSW5zdGVhZCwgdGhlIGluaXRpYWwgcmVmZXJlbmNlIGNvdW50CitvZiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+IGlzICJmbG9hdGluZyIuIFRoZSBmbG9hdGluZyByZWZlcmVuY2UgY2FuIGJlIHJlbW92ZWQgYnkKK2FueW9uZSBhdCBhbnkgdGltZSwgYnkgY2FsbGluZyA8YSBocmVmPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXIvaHRtbC9Hc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXNpbmsiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X29iamVjdF9zaW5rKCk8L2NvZGU+PC9hPi4gIDxhIGhyZWY9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sL0dzdE9iamVjdC5odG1sI2dzdC1vYmplY3Qtc2luayI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X3NpbmsoKTwvY29kZT48L2E+IGRvZXMKK25vdGhpbmcgaWYgYW4gb2JqZWN0IGlzIGFscmVhZHkgc3VuayAoaGFzIG5vIGZsb2F0aW5nIHJlZmVyZW5jZSkuCis8L3A+Cis8cD4KK1doZW4geW91IGFkZCBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIGl0cyBwYXJlbnQgY29udGFpbmVyLCB0aGUgcGFyZW50IGNvbnRhaW5lciB3aWxsCitkbyB0aGlzOgorPC9wPgorPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CisgIGdzdF9vYmplY3RfcmVmIChHU1RfT0JKRUNUIChjaGlsZF9lbGVtZW50KSk7CisgIGdzdF9vYmplY3Rfc2luayAoR1NUX09CSkVDVCAoY2hpbGRfZWxlbWVudCkpOworPC9wcmU+PC9kaXY+Cis8cD4KK1RoaXMgbWVhbnMgdGhhdCB0aGUgY29udGFpbmVyIG5vdyBvd25zIGEgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZCBlbGVtZW50Cisoc2luY2UgaXQgY2FsbGVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXJlZiIgdGl0bGU9ImdzdF9vYmplY3RfcmVmICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9vYmplY3RfcmVmKCk8L2NvZGU+PC9hPiksIGFuZCB0aGUgY2hpbGQgZWxlbWVudCBoYXMgbm8gZmxvYXRpbmcKK3JlZmVyZW5jZS4KKzwvcD4KKzxwPgorVGhlIHB1cnBvc2Ugb2YgdGhlIGZsb2F0aW5nIHJlZmVyZW5jZSBpcyB0byBrZWVwIHRoZSBjaGlsZCBlbGVtZW50IGFsaXZlCit1bnRpbCB5b3UgYWRkIGl0IHRvIGEgcGFyZW50IGNvbnRhaW5lciwgd2hpY2ggdGhlbiBtYW5hZ2VzIHRoZSBsaWZldGltZSBvZgordGhlIG9iamVjdCBpdHNlbGY6Cis8L3A+Cis8ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KKyAgIGVsZW1lbnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKGZhY3RvcnluYW1lLCBuYW1lKTsKKyAgIC8vIGVsZW1lbnQgaGFzIG9uZSBmbG9hdGluZyByZWZlcmVuY2UgdG8ga2VlcCBpdCBhbGl2ZQorICAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGJpbiksIGVsZW1lbnQpOworICAgLy8gZWxlbWVudCBoYXMgb25lIG5vbi1mbG9hdGluZyByZWZlcmVuY2Ugb3duZWQgYnkgdGhlIGNvbnRhaW5lcgorPC9wcmU+PC9kaXY+Cis8cD4KKzwvcD4KKzxwPgorQW5vdGhlciBlZmZlY3Qgb2YgdGhpcyBpcywgdGhhdCBjYWxsaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucmVmIiB0aXRsZT0iZ3N0X29iamVjdF91bnJlZiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X3VucmVmKCk8L2NvZGU+PC9hPiBvbiBhIGJpbiBvYmplY3QsCit3aWxsIGFsc28gZGVzdG95IGFsbCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gb2JqZWN0cyBpbiBpdC4gVGhlIHNhbWUgaXMgdHJ1ZSBmb3IKK2NhbGxpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI2dzdC1iaW4tcmVtb3ZlIiB0aXRsZT0iZ3N0X2Jpbl9yZW1vdmUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Jpbl9yZW1vdmUoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitTcGVjaWFsIGNhcmUgaGFzIHRvIGJlIHRha2VuIGZvciBhbGwgbWV0aG9kcyB0aGF0IDxhIGhyZWY9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sL0dzdE9iamVjdC5odG1sI2dzdC1vYmplY3Qtc2luayI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X3NpbmsoKTwvY29kZT48L2E+IGFuIG9iamVjdAorc2luY2UgaWYgdGhlIGNhbGxlciBvZiB0aG9zZSBmdW5jdGlvbnMgaGFkIGEgZmxvYXRpbmcgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QsCit0aGUgb2JqZWN0IHJlZmVyZW5jZSBpcyBub3cgaW52YWxpZC4KKzwvcD4KKzxwPgorSW4gY29udHJhc3QgdG8gPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gaW5zdGFuY2VzLCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiBhZGRzIGEgbmFtZSBwcm9wZXJ0eS4gVGhlIGZ1bmN0aW9ucworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3Qtc2V0LW5hbWUiIHRpdGxlPSJnc3Rfb2JqZWN0X3NldF9uYW1lICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9vYmplY3Rfc2V0X25hbWUoKTwvY29kZT48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1nZXQtbmFtZSIgdGl0bGU9ImdzdF9vYmplY3RfZ2V0X25hbWUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X29iamVjdF9nZXRfbmFtZSgpPC9jb2RlPjwvYT4gYXJlIHVzZWQgdG8gc2V0L2dldCB0aGUgbmFtZQorb2YgdGhlIG9iamVjdC4KKzwvcD4KKzxwPgorTGFzdCByZXZpZXdlZCBvbiAyMDA1LTExLTA5ICgwLjkuNCkKKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0T2JqZWN0LmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RPYmplY3Qtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RPYmplY3Q8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RPYmplY3QgeworICBHTXV0ZXggICAgICAgICpsb2NrOyAgICAgICAgLyogb2JqZWN0IExPQ0sgKi8KKyAgZ2NoYXIgICAgICAgICAqbmFtZTsgICAgICAgIC8qIG9iamVjdCBuYW1lICovCisgIEdzdE9iamVjdCAgICAgKnBhcmVudDsgICAgICAvKiB0aGlzIG9iamVjdCdzIHBhcmVudCwgd2VhayByZWYgKi8KKyAgZ3VpbnQzMiAgICAgICAgZmxhZ3M7Cit9OworPC9wcmU+Cis8cD4KK0dTdHJlYW1lciBiYXNlIG9iamVjdCBjbGFzcy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItVGhyZWFkcy5odG1sI0dNdXRleCI+PHNwYW4gY2xhc3M9InR5cGUiPkdNdXRleDwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0T2JqZWN0LXN0cnVjdC5sb2NrIj48L2E+bG9jazwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+b2JqZWN0IExPQ0s8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdE9iamVjdC1zdHJ1Y3QubmFtZSI+PC9hPm5hbWU8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBuYW1lIG9mIHRoZSBvYmplY3Q8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RPYmplY3Qtc3RydWN0LnBhcmVudCI+PC9hPnBhcmVudDwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhpcyBvYmplY3QncyBwYXJlbnQsIHdlYWsgcmVmPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RPYmplY3Qtc3RydWN0LmZsYWdzIj48L2E+ZmxhZ3M8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPmZsYWdzIGZvciB0aGlzIG9iamVjdDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdE9iamVjdENsYXNzIj48L2E+PGgzPnN0cnVjdCBHc3RPYmplY3RDbGFzczwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdE9iamVjdENsYXNzIHsKKyAgR0luaXRpYWxseVVub3duZWRDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgY29uc3QgZ2NoYXLCoCpwYXRoX3N0cmluZ19zZXBhcmF0b3I7CisKKyAgLyogc2lnbmFscyAqLworICB2b2lkICAgICAgICAgICgqZGVlcF9ub3RpZnkpICAgICAgKEdzdE9iamVjdCAqIG9iamVjdCwgR3N0T2JqZWN0ICogb3JpZywgR1BhcmFtU3BlYyAqIHBzcGVjKTsKKworICAvKiB2aXJ0dWFsIG1ldGhvZHMgZm9yIHN1YmNsYXNzZXMgKi8KK307Cis8L3ByZT4KKzxwPgorR1N0cmVhbWVyIGJhc2Ugb2JqZWN0IGNsYXNzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkQ2xhc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HSW5pdGlhbGx5VW5vd25lZENsYXNzPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdE9iamVjdENsYXNzLnBhcmVudC1jbGFzcyI+PC9hPnBhcmVudF9jbGFzczwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cGFyZW50PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNvbnN0wqA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0T2JqZWN0Q2xhc3MucGF0aC1zdHJpbmctc2VwYXJhdG9yIj48L2E+cGF0aF9zdHJpbmdfc2VwYXJhdG9yPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zZXBhcmF0b3IgdXNlZCBieSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1nZXQtcGF0aC1zdHJpbmciIHRpdGxlPSJnc3Rfb2JqZWN0X2dldF9wYXRoX3N0cmluZyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X2dldF9wYXRoX3N0cmluZygpPC9jb2RlPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RPYmplY3RDbGFzcy5kZWVwLW5vdGlmeSI+PC9hPmRlZXBfbm90aWZ5PC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5kZWZhdWx0IHNpZ25hbCBoYW5kbGVyPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0T2JqZWN0RmxhZ3MiPjwvYT48aDM+ZW51bSBHc3RPYmplY3RGbGFnczwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBlbnVtIHsKKyAgLyogcGFkZGluZyAqLworICBHU1RfT0JKRUNUX0ZMQUdfTEFTVCA9ICgxJmx0OyZsdDs0KQorfSBHc3RPYmplY3RGbGFnczsKKzwvcHJlPgorPHA+CitUaGUgc3RhbmRhcmQgZmxhZ3MgdGhhdCBhbiBnc3RvYmplY3QgbWF5IGhhdmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtT0JKRUNULUZMQUctTEFTVDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfT0JKRUNUX0ZMQUdfTEFTVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c3ViY2xhc3NlcyBjYW4gYWRkIGFkZGl0aW9uYWwgZmxhZ3Mgc3RhcnRpbmcgZnJvbSB0aGlzIGZsYWcKKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtT0JKRUNULUZMQUdTOkNBUFMiPjwvYT48aDM+R1NUX09CSkVDVF9GTEFHUygpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9PQkpFQ1RfRkxBR1Mob2JqKSAgICAgICAgICAgICAgICAgIChHU1RfT0JKRUNUX0NBU1QgKG9iaiktJmd0O2ZsYWdzKQorPC9wcmU+Cis8cD4KK1RoaXMgbWFjcm8gcmV0dXJucyB0aGUgZW50aXJlIHNldCBvZiBmbGFncyBmb3IgdGhlIG9iamVjdC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtT0JKRUNULUZMQUctSVMtU0VUOkNBUFMiPjwvYT48aDM+R1NUX09CSkVDVF9GTEFHX0lTX1NFVCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9PQkpFQ1RfRkxBR19JU19TRVQob2JqLGZsYWcpICAgICAgICgoR1NUX09CSkVDVF9GTEFHUyAob2JqKSAmYW1wOyAoZmxhZykpID09IChmbGFnKSkKKzwvcHJlPgorPHA+CitUaGlzIG1hY3JvIGNoZWNrcyB0byBzZWUgaWYgdGhlIGdpdmVuIGZsYWcgaXMgc2V0LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iajwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZsYWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+RmxhZyB0byBjaGVjayBmb3I8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtT0JKRUNULUZMQUctU0VUOkNBUFMiPjwvYT48aDM+R1NUX09CSkVDVF9GTEFHX1NFVCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9PQkpFQ1RfRkxBR19TRVQob2JqLGZsYWcpICAgICAgICAgIChHU1RfT0JKRUNUX0ZMQUdTIChvYmopIHw9IChmbGFnKSkKKzwvcHJlPgorPHA+CitUaGlzIG1hY3JvIHNldHMgdGhlIGdpdmVuIGJpdHMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5GbGFnIHRvIHNldDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1PQkpFQ1QtRkxBRy1VTlNFVDpDQVBTIj48L2E+PGgzPkdTVF9PQkpFQ1RfRkxBR19VTlNFVCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9PQkpFQ1RfRkxBR19VTlNFVChvYmosZmxhZykgICAgICAgIChHU1RfT0JKRUNUX0ZMQUdTIChvYmopICZhbXA7PSB+KGZsYWcpKQorPC9wcmU+Cis8cD4KK1RoaXMgbWFjcm8gdXNldHMgdGhlIGdpdmVuIGJpdHMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5GbGFnIHRvIHNldDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1PQkpFQ1QtTkFNRTpDQVBTIj48L2E+PGgzPkdTVF9PQkpFQ1RfTkFNRSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9PQkpFQ1RfTkFNRShvYmopICAgICAgICAgICAgKEdTVF9PQkpFQ1RfQ0FTVChvYmopLSZndDtuYW1lKQorPC9wcmU+Cis8cD4KK0dldCB0aGUgbmFtZSBvZiB0aGlzIG9iamVjdAorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmo8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1PQkpFQ1QtUEFSRU5UOkNBUFMiPjwvYT48aDM+R1NUX09CSkVDVF9QQVJFTlQoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfT0JKRUNUX1BBUkVOVChvYmopICAgICAgICAgIChHU1RfT0JKRUNUX0NBU1Qob2JqKS0mZ3Q7cGFyZW50KQorPC9wcmU+Cis8cD4KK0dldCB0aGUgcGFyZW50IG9mIHRoaXMgb2JqZWN0Cis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iajwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULU9CSkVDVC1SRUZDT1VOVDpDQVBTIj48L2E+PGgzPkdTVF9PQkpFQ1RfUkVGQ09VTlQoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfT0JKRUNUX1JFRkNPVU5UKG9iaikgICAgICAgICAgICAgICAgKCgoR09iamVjdCopKG9iaikpLSZndDtyZWZfY291bnQpCis8L3ByZT4KKzxwPgorR2V0IGFjY2VzcyB0byB0aGUgcmVmZXJlbmNlIGNvdW50IGZpZWxkIG9mIHRoZSBvYmplY3QuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iajwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULU9CSkVDVC1SRUZDT1VOVC1WQUxVRTpDQVBTIj48L2E+PGgzPkdTVF9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFKG9iaikgICAgICAgICAgZ19hdG9taWNfaW50X2dldCAoKGdpbnQgKikgJmFtcDtHU1RfT0JKRUNUX1JFRkNPVU5UKG9iaikpCis8L3ByZT4KKzxwPgorR2V0IHRoZSByZWZlcmVuY2UgY291bnQgdmFsdWUgb2YgdGhlIG9iamVjdC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtT0JKRUNULUxPQ0s6Q0FQUyI+PC9hPjxoMz5HU1RfT0JKRUNUX0xPQ0soKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfT0JKRUNUX0xPQ0sob2JqKSAgICAgICAgICAgICAgICAgICBnX211dGV4X2xvY2soR1NUX09CSkVDVF9HRVRfTE9DSyhvYmopKQorPC9wcmU+Cis8cD4KK1RoaXMgbWFjcm8gd2lsbCBvYnRhaW4gYSBsb2NrIG9uIHRoZSBvYmplY3QsIG1ha2luZyBzZXJpYWxpemF0aW9uIHBvc3NpYmxlLgorSXQgYmxvY2tzIHVudGlsIHRoZSBsb2NrIGNhbiBiZSBvYnRhaW5lZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gdG8gbG9jazwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtT0JKRUNULVRSWUxPQ0s6Q0FQUyI+PC9hPjxoMz5HU1RfT0JKRUNUX1RSWUxPQ0soKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfT0JKRUNUX1RSWUxPQ0sob2JqKSAgICAgICAgICAgICAgICBnX211dGV4X3RyeWxvY2soR1NUX09CSkVDVF9HRVRfTE9DSyhvYmopKQorPC9wcmU+Cis8cD4KK1RoaXMgbWFjcm8gd2lsbCB0cnkgdG8gb2J0YWluIGEgbG9jayBvbiB0aGUgb2JqZWN0LCBidXQgd2lsbCByZXR1cm4gd2l0aAorRkFMU0UgaWYgaXQgY2FuJ3QgZ2V0IGl0IGltbWVkaWF0ZWx5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmo8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPi48L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULU9CSkVDVC1VTkxPQ0s6Q0FQUyI+PC9hPjxoMz5HU1RfT0JKRUNUX1VOTE9DSygpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9PQkpFQ1RfVU5MT0NLKG9iaikgICAgICAgICAgICAgICAgIGdfbXV0ZXhfdW5sb2NrKEdTVF9PQkpFQ1RfR0VUX0xPQ0sob2JqKSkKKzwvcHJlPgorPHA+CitUaGlzIG1hY3JvIHJlbGVhc2VzIGEgbG9jayBvbiB0aGUgb2JqZWN0LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmo8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiB0byB1bmxvY2suPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1PQkpFQ1QtR0VULUxPQ0s6Q0FQUyI+PC9hPjxoMz5HU1RfT0JKRUNUX0dFVF9MT0NLKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX09CSkVDVF9HRVRfTE9DSyhvYmopICAgICAgICAgICAgICAgKEdTVF9PQkpFQ1RfQ0FTVChvYmopLSZndDtsb2NrKQorPC9wcmU+Cis8cD4KK0FjcXVpcmUgYSByZWZlcmVuY2UgdG8gdGhlIG11dGV4IG9mIHRoaXMgb2JqZWN0LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmo8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1vYmplY3Qtc2V0LW5hbWUiPjwvYT48aDM+Z3N0X29iamVjdF9zZXRfbmFtZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3Rfb2JqZWN0X3NldF9uYW1lICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgdGhlIG5hbWUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPiwgb3IgZ2l2ZXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPiBhIGd1YXJhbnRlZWQgdW5pcXVlCituYW1lIChpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPiBpcyBOVUxMKS4KK1RoaXMgZnVuY3Rpb24gbWFrZXMgYSBjb3B5IG9mIHRoZSBwcm92aWRlZCBuYW1lLCBzbyB0aGUgY2FsbGVyCityZXRhaW5zIG93bmVyc2hpcCBvZiB0aGUgbmFtZSBpdCBzZW50LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bmV3IG5hbWUgb2Ygb2JqZWN0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiB0aGUgbmFtZSBjb3VsZCBiZSBzZXQuIFNpbmNlIE9iamVjdHMgdGhhdCBoYXZlCithIHBhcmVudCBjYW5ub3QgYmUgcmVuYW1lZCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIEZBTFNFIGluIHRob3NlCitjYXNlcy4KK01UIHNhZmUuICBUaGlzIGZ1bmN0aW9uIGdyYWJzIGFuZCByZWxlYXNlcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+J3MgTE9DSy48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtb2JqZWN0LWdldC1uYW1lIj48L2E+PGgzPmdzdF9vYmplY3RfZ2V0X25hbWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICogICAgICAgICAgICAgZ3N0X29iamVjdF9nZXRfbmFtZSAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0dXJucyBhIGNvcHkgb2YgdGhlIG5hbWUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPi4KK0NhbGxlciBzaG91bGQgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1NZW1vcnktQWxsb2NhdGlvbi5odG1sI2ctZnJlZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX2ZyZWUoKTwvY29kZT48L2E+IHRoZSByZXR1cm4gdmFsdWUgYWZ0ZXIgdXNhZ2UuCitGb3IgYSBuYW1lbGVzcyBvYmplY3QsIHRoaXMgcmV0dXJucyBOVUxMLCB3aGljaCB5b3UgY2FuIHNhZmVseSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLU1lbW9yeS1BbGxvY2F0aW9uLmh0bWwjZy1mcmVlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfZnJlZSgpPC9jb2RlPjwvYT4KK2FzIHdlbGwuCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdfZnJlZQorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmFtZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+LiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLU1lbW9yeS1BbGxvY2F0aW9uLmh0bWwjZy1mcmVlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfZnJlZSgpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNhZ2UuCitNVCBzYWZlLiBUaGlzIGZ1bmN0aW9uIGdyYWJzIGFuZCByZWxlYXNlcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+J3MgTE9DSy4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1vYmplY3Qtc2V0LXBhcmVudCI+PC9hPjxoMz5nc3Rfb2JqZWN0X3NldF9wYXJlbnQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X29iamVjdF9zZXRfcGFyZW50ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpwYXJlbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXRzIHRoZSBwYXJlbnQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPiB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyZW50PC9jb2RlPjwvZW0+LiBUaGUgb2JqZWN0J3MgcmVmZXJlbmNlIGNvdW50IHdpbGwKK2JlIGluY3JlbWVudGVkLCBhbmQgYW55IGZsb2F0aW5nIHJlZmVyZW5jZSB3aWxsIGJlIHJlbW92ZWQgKHNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1yZWYtc2luayIgdGl0bGU9ImdzdF9vYmplY3RfcmVmX3NpbmsgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X29iamVjdF9yZWZfc2luaygpPC9jb2RlPjwvYT4pLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhcmVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5uZXcgcGFyZW50IG9mIG9iamVjdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhcmVudDwvY29kZT48L2VtPiBjb3VsZCBiZSBzZXQgb3IgRkFMU0Ugd2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+CithbHJlYWR5IGhhZCBhIHBhcmVudCBvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyZW50PC9jb2RlPjwvZW0+IGFyZSB0aGUgc2FtZS4KK01UIHNhZmUuIEdyYWJzIGFuZCByZWxlYXNlcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+J3MgTE9DSy48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtb2JqZWN0LWdldC1wYXJlbnQiPjwvYT48aDM+Z3N0X29iamVjdF9nZXRfcGFyZW50ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKiAgICAgICAgIGdzdF9vYmplY3RfZ2V0X3BhcmVudCAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JldHVybnMgdGhlIHBhcmVudCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+LiBUaGlzIGZ1bmN0aW9uIGluY3JlYXNlcyB0aGUgcmVmY291bnQKK29mIHRoZSBwYXJlbnQgb2JqZWN0IHNvIHlvdSBzaG91bGQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtdW5yZWYiIHRpdGxlPSJnc3Rfb2JqZWN0X3VucmVmICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9vYmplY3RfdW5yZWYoKTwvY29kZT48L2E+IGl0IGFmdGVyIHVzYWdlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wYXJlbnQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPiwgdGhpcyBjYW4gYmUgTlVMTCBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+CitoYXMgbm8gcGFyZW50LiB1bnJlZiBhZnRlciB1c2FnZS4KK01UIHNhZmUuIEdyYWJzIGFuZCByZWxlYXNlcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+J3MgTE9DSy4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1vYmplY3QtdW5wYXJlbnQiPjwvYT48aDM+Z3N0X29iamVjdF91bnBhcmVudCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3Rfb2JqZWN0X3VucGFyZW50ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDbGVhciB0aGUgcGFyZW50IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4sIHJlbW92aW5nIHRoZSBhc3NvY2lhdGVkIHJlZmVyZW5jZS4KK1RoaXMgZnVuY3Rpb24gZGVjcmVhc2VzIHRoZSByZWZjb3VudCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+LgorPC9wPgorPHA+CitNVCBzYWZlLiBHcmFicyBhbmQgcmVsZWFzZXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPidzIGxvY2suCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+IHRvIHVucGFyZW50PC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1vYmplY3QtZGVmYXVsdC1kZWVwLW5vdGlmeSI+PC9hPjxoMz5nc3Rfb2JqZWN0X2RlZmF1bHRfZGVlcF9ub3RpZnkgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X29iamVjdF9kZWZhdWx0X2RlZXBfbm90aWZ5ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvcmlnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR1BhcmFtU3BlYy5odG1sI0dQYXJhbVNwZWMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUGFyYW1TcGVjPC9zcGFuPjwvYT4gKnBzcGVjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKipleGNsdWRlZF9wcm9wczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0EgZGVmYXVsdCBkZWVwX25vdGlmeSBzaWduYWwgY2FsbGJhY2sgZm9yIGFuIG9iamVjdC4gVGhlIHVzZXIgZGF0YQorc2hvdWxkIGNvbnRhaW4gYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHN0cmluZ3MgdGhhdCBzaG91bGQgYmUgZXhjbHVkZWQKK2Zyb20gdGhlIG5vdGlmeS4gVGhlIGRlZmF1bHQgaGFuZGxlciB3aWxsIHByaW50IHRoZSBuZXcgdmFsdWUgb2YgdGhlIHByb3BlcnR5Cit1c2luZyBnX3ByaW50LgorPC9wPgorPHA+CitNVCBzYWZlLiBUaGlzIGZ1bmN0aW9uIGdyYWJzIGFuZCByZWxlYXNlcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+J3MgTE9DSyBmb3IgZ2V0dGluZyBpdHMKKyAgICAgICAgIHBhdGggc3RyaW5nLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gdGhhdCBzaWduYWxsZWQgdGhlIG5vdGlmeS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9yaWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiB0aGF0IGluaXRpYXRlZCB0aGUgbm90aWZ5LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHNwZWM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdQYXJhbVNwZWMuaHRtbCNHUGFyYW1TcGVjIj48c3BhbiBjbGFzcz0idHlwZSI+R1BhcmFtU3BlYzwvc3Bhbj48L2E+IG9mIHRoZSBwcm9wZXJ0eS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV4Y2x1ZGVkX3Byb3BzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPihhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSkgKGVsZW1lbnQtdHlwZSBnY2hhciopCisoYWxsb3ctbm9uZSk6YSBzZXQgb2YgdXNlci1zcGVjaWZpZWQgcHJvcGVydGllcyB0byBleGNsdWRlIG9yCitOVUxMIHRvIHNob3cgYWxsIGNoYW5nZXMuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW9iamVjdC1kZWZhdWx0LWVycm9yIj48L2E+PGgzPmdzdF9vYmplY3RfZGVmYXVsdF9lcnJvciAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3Rfb2JqZWN0X2RlZmF1bHRfZXJyb3IgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzb3VyY2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1FcnJvci1SZXBvcnRpbmcuaHRtbCNHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRXJyb3I8L3NwYW4+PC9hPiAqZXJyb3I8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZGVidWc8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBIGRlZmF1bHQgZXJyb3IgZnVuY3Rpb24gdGhhdCB1c2VzIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItV2FybmluZ3MtYW5kLUFzc2VydGlvbnMuaHRtbCNnLXByaW50ZXJyIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfcHJpbnRlcnIoKTwvY29kZT48L2E+IHRvIGRpc3BsYXkgdGhlIGVycm9yIG1lc3NhZ2UKK2FuZCB0aGUgb3B0aW9uYWwgZGVidWcgc3RpbmcuLgorPC9wPgorPHA+CitUaGUgZGVmYXVsdCBoYW5kbGVyIHdpbGwgc2ltcGx5IHByaW50IHRoZSBlcnJvciBzdHJpbmcgdXNpbmcgZ19wcmludC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zb3VyY2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+IHRoYXQgaW5pdGlhdGVkIHRoZSBlcnJvci48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVycm9yPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBHRXJyb3IuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQuIERlZmF1bHQgaXMgdHJhbnNmZXIgbm9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbjwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVidWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YW4gYWRkaXRpb25hbCBkZWJ1ZyBpbmZvcm1hdGlvbiBzdHJpbmcsIG9yIE5VTEwuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQuIERlZmF1bHQgaXMgdHJhbnNmZXIgbm9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbjwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW9iamVjdC1jaGVjay11bmlxdWVuZXNzIj48L2E+PGgzPmdzdF9vYmplY3RfY2hlY2tfdW5pcXVlbmVzcyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3Rfb2JqZWN0X2NoZWNrX3VuaXF1ZW5lc3MgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2tzIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgb2JqZWN0IG5hbWVkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+IGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+LiBUaGlzIGZ1bmN0aW9uCitkb2VzIG5vdCBkbyBhbnkgbG9ja2luZyBvZiBhbnkga2luZC4gWW91IG1pZ2h0IHdhbnQgdG8gcHJvdGVjdCB0aGUKK3Byb3ZpZGVkIGxpc3Qgd2l0aCB0aGUgbG9jayBvZiB0aGUgb3duZXIgb2YgdGhlIGxpc3QuIFRoaXMgZnVuY3Rpb24KK3dpbGwgbG9jayBlYWNoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+IGluIHRoZSBsaXN0IHRvIGNvbXBhcmUgdGhlIG5hbWUsIHNvIGJlCitjYXJlZnVsbCB3aGVuIHBhc3NpbmcgYSBsaXN0IHdpdGggYSBsb2NrZWQgb2JqZWN0LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBsaXN0IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+IHRvCitjaGVjayB0aHJvdWdoLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IEdzdC5PYmplY3RdPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuYW1lIHRvIHNlYXJjaCBmb3I8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gbmFtZWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT4gZG9lcyBub3QgYXBwZWFyIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+LAorRkFMU0UgaWYgaXQgZG9lcy4KK01UIHNhZmUuIEdyYWJzIGFuZCByZWxlYXNlcyB0aGUgTE9DSyBvZiBlYWNoIG9iamVjdCBpbiB0aGUgbGlzdC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtb2JqZWN0LWhhcy1hbmNlc3RvciI+PC9hPjxoMz5nc3Rfb2JqZWN0X2hhc19hbmNlc3RvciAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3Rfb2JqZWN0X2hhc19hbmNlc3RvciAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKmFuY2VzdG9yPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2sgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPiBoYXMgYW4gYW5jZXN0b3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFuY2VzdG9yPC9jb2RlPjwvZW0+IHNvbWV3aGVyZSB1cCBpbgordGhlIGhpZXJhcmNoeS4gT25lIGNhbiBlLmcuIGNoZWNrIGlmIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gaXMgaW5zaWRlIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gdG8gY2hlY2s8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFuY2VzdG9yPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gdG8gY2hlY2sgYXMgYW5jZXN0b3I8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hbmNlc3RvcjwvY29kZT48L2VtPiBpcyBhbiBhbmNlc3RvciBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+LgorTVQgc2FmZS4gR3JhYnMgYW5kIHJlbGVhc2VzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4ncyBsb2Nrcy48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtb2JqZWN0LXJlZiI+PC9hPjxoMz5nc3Rfb2JqZWN0X3JlZiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3Rfb2JqZWN0X3JlZiAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gb2JqZWN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSW5jcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4uIFRoaXMgZnVuY3Rpb24KK2RvZXMgbm90IHRha2UgdGhlIGxvY2sgb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPiBiZWNhdXNlIGl0IHJlbGllcyBvbgorYXRvbWljIHJlZmNvdW50aW5nLgorPC9wPgorPHA+CitUaGlzIG9iamVjdCByZXR1cm5zIHRoZSBpbnB1dCBwYXJhbWV0ZXIgdG8gZWFzZSB3cml0aW5nCitjb25zdHJ1Y3RzIGxpa2UgOgorIHJlc3VsdCA9IGdzdF9vYmplY3RfcmVmIChvYmplY3QtJmd0O3BhcmVudCk7Cis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gdG8gcmVmZXJlbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBwb2ludGVyIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtb2JqZWN0LXVucmVmIj48L2E+PGgzPmdzdF9vYmplY3RfdW5yZWYgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IG9iamVjdDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0RlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+LiAgSWYgcmVmZXJlbmNlIGNvdW50IGhpdHMKK3plcm8sIGRlc3Ryb3kgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPi4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIHRoZSBsb2NrCitvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+IGFzIGl0IHJlbGllcyBvbiBhdG9taWMgcmVmY291bnRpbmcuCis8L3A+Cis8cD4KK1RoZSB1bnJlZiBtZXRob2Qgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aXRoIHRoZSBMT0NLIGhlbGQgc2luY2UKK3RoaXMgbWlnaHQgZGVhZGxvY2sgdGhlIGRpc3Bvc2UgZnVuY3Rpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+IHRvIHVucmVmZXJlbmNlPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1vYmplY3QtcmVmLXNpbmsiPjwvYT48aDM+Z3N0X29iamVjdF9yZWZfc2luayAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3Rfb2JqZWN0X3JlZl9zaW5rICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gb2JqZWN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+LCBhbmQgcG9zc2libHkgcmVtb3ZlIHRoZSBmbG9hdGluZworcmVmZXJlbmNlLCBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+IGhhcyBhIGZsb2F0aW5nIHJlZmVyZW5jZS4KKzwvcD4KKzxwPgorSW4gb3RoZXIgd29yZHMsIGlmIHRoZSBvYmplY3QgaXMgZmxvYXRpbmcsIHRoZW4gdGhpcyBjYWxsICJhc3N1bWVzIG93bmVyc2hpcCIKK29mIHRoZSBmbG9hdGluZyByZWZlcmVuY2UsIGNvbnZlcnRpbmcgaXQgdG8gYSBub3JtYWwgcmVmZXJlbmNlIGJ5IGNsZWFyaW5nCit0aGUgZmxvYXRpbmcgZmxhZyB3aGlsZSBsZWF2aW5nIHRoZSByZWZlcmVuY2UgY291bnQgdW5jaGFuZ2VkLiBJZiB0aGUgb2JqZWN0CitpcyBub3QgZmxvYXRpbmcsIHRoZW4gdGhpcyBjYWxsIGFkZHMgYSBuZXcgbm9ybWFsIHJlZmVyZW5jZSBpbmNyZWFzaW5nIHRoZQorcmVmZXJlbmNlIGNvdW50IGJ5IG9uZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gdG8gc2luazwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtb2JqZWN0LXJlcGxhY2UiPjwvYT48aDM+Z3N0X29iamVjdF9yZXBsYWNlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9vYmplY3RfcmVwbGFjZSAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKipvbGRvYmo8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKm5ld29iajwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0F0b21pY2FsbHkgbW9kaWZpZXMgYSBwb2ludGVyIHRvIHBvaW50IHRvIGEgbmV3IG9iamVjdC4KK1RoZSByZWZlcmVuY2UgY291bnQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9sZG9iajwvY29kZT48L2VtPiBpcyBkZWNyZWFzZWQgYW5kIHRoZSByZWZlcmVuY2UgY291bnQgb2YKKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uZXdvYmo8L2NvZGU+PC9lbT4gaXMgaW5jcmVhc2VkLgorPC9wPgorPHA+CitFaXRoZXIgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ld29iajwvY29kZT48L2VtPiBhbmQgdGhlIHZhbHVlIHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9sZG9iajwvY29kZT48L2VtPiBtYXkgYmUgTlVMTC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vbGRvYmo8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9pbnRlciB0byBhIHBsYWNlIG9mIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gdG8KK3JlcGxhY2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQgYW5kIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmlub3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uZXdvYmo8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uZXdvYmo8L2NvZGU+PC9lbT4gd2FzIGRpZmZlcmVudCBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vbGRvYmo8L2NvZGU+PC9lbT4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1vYmplY3QtZ2V0LXBhdGgtc3RyaW5nIj48L2E+PGgzPmdzdF9vYmplY3RfZ2V0X3BhdGhfc3RyaW5nICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgICAgICAgIGdzdF9vYmplY3RfZ2V0X3BhdGhfc3RyaW5nICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dlbmVyYXRlcyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBwYXRoIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4gaW4KK3RoZSBvYmplY3QgaGllcmFyY2h5LiBPbmx5IHVzZWZ1bCAob3IgdXNlZCkgZm9yIGRlYnVnZ2luZy4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ19mcmVlCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHBhdGggb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPi4gWW91IG11c3QKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItTWVtb3J5LUFsbG9jYXRpb24uaHRtbCNnLWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19mcmVlKCk8L2NvZGU+PC9hPiB0aGUgc3RyaW5nIGFmdGVyIHVzYWdlLgorTVQgc2FmZS4gR3JhYnMgYW5kIHJlbGVhc2VzIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPidzIExPQ0sgZm9yIGFsbCBvYmplY3RzCitpbiB0aGUgaGllcmFyY2h5LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RPYmplY3QucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdE9iamVjdC0tbmFtZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJuYW1lIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgIm5hbWUiICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiogICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3ByZT4KKzxwPlRoZSBuYW1lIG9mIHRoZSBvYmplY3QuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogTlVMTDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0T2JqZWN0LS1wYXJlbnQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4icGFyZW50IjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgInBhcmVudCIgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4qICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPlRoZSBwYXJlbnQgb2YgdGhlIG9iamVjdC48L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0T2JqZWN0LnNpZ25hbC1kZXRhaWxzIj48L2E+PGgyPlNpZ25hbCBEZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdE9iamVjdC1kZWVwLW5vdGlmeSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJkZWVwLW5vdGlmeSI8L2NvZGU+IHNpZ25hbDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICB1c2VyX2Z1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAgKmdzdG9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gICpwcm9wX29iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HUGFyYW1TcGVjLmh0bWwjR1BhcmFtU3BlYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdQYXJhbVNwZWM8L3NwYW4+PC9hPiAqcHJvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICB1c2VyX2RhdGEpICAgICAgICA6IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLU5PLUhPT0tTOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5ObyBIb29rczwvY29kZT48L2E+PC9wcmU+Cis8cD4KK1RoZSBkZWVwIG5vdGlmeSBzaWduYWwgaXMgdXNlZCB0byBiZSBub3RpZmllZCBvZiBwcm9wZXJ0eSBjaGFuZ2VzLiBJdCBpcwordHlwaWNhbGx5IGF0dGFjaGVkIHRvIHRoZSB0b3BsZXZlbCBiaW4gdG8gcmVjZWl2ZSBub3RpZmljYXRpb25zIGZyb20gYWxsCit0aGUgZWxlbWVudHMgY29udGFpbmVkIGluIHRoYXQgYmluLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmdzdG9iamVjdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByb3Bfb2JqZWN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBvYmplY3QgdGhhdCBvcmlnaW5hdGVkIHRoZSBzaWduYWw8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByb3A8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHByb3BlcnR5IHRoYXQgY2hhbmdlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvR3N0UGFkLmh0bWwgYi9kb2NzL2dzdC9odG1sL0dzdFBhZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYWZiOTMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dzdC9odG1sL0dzdFBhZC5odG1sCkBAIC0wLDAgKzEsNDMxMSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdzdFBhZDwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RPYmplY3QuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNHc3RQYWQuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RQYWQuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFBhZC5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFBhZC5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFBhZC5zaWduYWxzIiBjbGFzcz0ic2hvcnRjdXQiPlNpZ25hbHM8L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iR3N0UGFkIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0UGFkLnRvcF9vZl9wYWdlIj48L2E+R3N0UGFkPC9zcGFuPjwvaDI+Cis8cD5Hc3RQYWQg4oCUIE9iamVjdCBjb250YWluZWQgYnkgZWxlbWVudHMgdGhhdCBhbGxvd3MgbGlua3MgdG8KKyAgICAgICAgICAgICAgICAgICAgb3RoZXIgZWxlbWVudHM8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJHc3RQYWQuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKKworc3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RQYWQiPkdzdFBhZDwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWREaXJlY3Rpb24iIHRpdGxlPSJlbnVtIEdzdFBhZERpcmVjdGlvbiI+R3N0UGFkRGlyZWN0aW9uPC9hPjsKK2VudW0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEZsYWdzIiB0aXRsZT0iZW51bSBHc3RQYWRGbGFncyI+R3N0UGFkRmxhZ3M8L2E+OworZW51bSAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkTGlua1JldHVybiIgdGl0bGU9ImVudW0gR3N0UGFkTGlua1JldHVybiI+R3N0UGFkTGlua1JldHVybjwvYT47CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELUxJTkstRkFJTEVEOkNBUFMiIHRpdGxlPSJHU1RfUEFEX0xJTktfRkFJTEVEKCkiPkdTVF9QQURfTElOS19GQUlMRUQ8L2E+ICAgICAgICAgICAgICAgICAocmV0KQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1MSU5LLVNVQ0NFU1NGVUw6Q0FQUyIgdGl0bGU9IkdTVF9QQURfTElOS19TVUNDRVNTRlVMKCkiPkdTVF9QQURfTElOS19TVUNDRVNTRlVMPC9hPiAgICAgICAgICAgICAocmV0KQorZW51bSAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkTGlua0NoZWNrIiB0aXRsZT0iZW51bSBHc3RQYWRMaW5rQ2hlY2siPkdzdFBhZExpbmtDaGVjazwvYT47CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELUxJTkstQ0hFQ0stREVGQVVMVDpDQVBTIiB0aXRsZT0iR1NUX1BBRF9MSU5LX0NIRUNLX0RFRkFVTFQiPkdTVF9QQURfTElOS19DSEVDS19ERUZBVUxUPC9hPgorZW51bSAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+R3N0Rmxvd1JldHVybjwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RBY3RpdmF0ZU1vZGUiIHRpdGxlPSJlbnVtIEdzdEFjdGl2YXRlTW9kZSI+R3N0QWN0aXZhdGVNb2RlPC9hPjsKK2VudW0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFByb2JlUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RQcm9iZVJldHVybiI+R3N0UHJvYmVSZXR1cm48L2E+OworZW51bSAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UHJvYmVUeXBlIiB0aXRsZT0iZW51bSBHc3RQcm9iZVR5cGUiPkdzdFByb2JlVHlwZTwvYT47CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUFJPQkUtVFlQRS1CTE9DS0lORzpDQVBTIiB0aXRsZT0iR1NUX1BST0JFX1RZUEVfQkxPQ0tJTkciPkdTVF9QUk9CRV9UWVBFX0JMT0NLSU5HPC9hPgorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBST0JFLVRZUEUtREFUQTpDQVBTIiB0aXRsZT0iR1NUX1BST0JFX1RZUEVfREFUQSI+R1NUX1BST0JFX1RZUEVfREFUQTwvYT4KKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QUk9CRS1UWVBFLVNDSEVEVUxJTkc6Q0FQUyIgdGl0bGU9IkdTVF9QUk9CRV9UWVBFX1NDSEVEVUxJTkciPkdTVF9QUk9CRV9UWVBFX1NDSEVEVUxJTkc8L2E+CisKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LW5hbWUiIHRpdGxlPSJnc3RfcGFkX2dldF9uYW1lKCkiPmdzdF9wYWRfZ2V0X25hbWU8L2E+ICAgICAgICAgICAgICAgICAgICAocGFkKQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZERpcmVjdGlvbiIgdGl0bGU9ImVudW0gR3N0UGFkRGlyZWN0aW9uIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZERpcmVjdGlvbjwvc3Bhbj48L2E+ICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtZGlyZWN0aW9uIiB0aXRsZT0iZ3N0X3BhZF9nZXRfZGlyZWN0aW9uICgpIj5nc3RfcGFkX2dldF9kaXJlY3Rpb248L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTsKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXBhcmVudCIgdGl0bGU9ImdzdF9wYWRfZ2V0X3BhcmVudCgpIj5nc3RfcGFkX2dldF9wYXJlbnQ8L2E+ICAgICAgICAgICAgICAgICAgKHBhZCkKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtcGFyZW50LWVsZW1lbnQiIHRpdGxlPSJnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudCAoKSI+Z3N0X3BhZF9nZXRfcGFyZW50X2VsZW1lbnQ8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKiAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtcGFkLXRlbXBsYXRlIiB0aXRsZT0iZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlICgpIj5nc3RfcGFkX2dldF9wYWRfdGVtcGxhdGU8L2E+ICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRMaW5rUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RQYWRMaW5rUmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZExpbmtSZXR1cm48L3NwYW4+PC9hPiAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1saW5rIiB0aXRsZT0iZ3N0X3BhZF9saW5rICgpIj5nc3RfcGFkX2xpbms8L2E+ICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqc3JjcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpzaW5rcGFkPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRMaW5rUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RQYWRMaW5rUmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZExpbmtSZXR1cm48L3NwYW4+PC9hPiAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1saW5rLWZ1bGwiIHRpdGxlPSJnc3RfcGFkX2xpbmtfZnVsbCAoKSI+Z3N0X3BhZF9saW5rX2Z1bGw8L2E+ICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnNyY3BhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqc2lua3BhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkTGlua0NoZWNrIiB0aXRsZT0iZW51bSBHc3RQYWRMaW5rQ2hlY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRMaW5rQ2hlY2s8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXVubGluayIgdGl0bGU9ImdzdF9wYWRfdW5saW5rICgpIj5nc3RfcGFkX3VubGluazwvYT4gICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqc3JjcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpzaW5rcGFkPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtaXMtbGlua2VkIiB0aXRsZT0iZ3N0X3BhZF9pc19saW5rZWQgKCkiPmdzdF9wYWRfaXNfbGlua2VkPC9hPiAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1jYW4tbGluayIgdGl0bGU9ImdzdF9wYWRfY2FuX2xpbmsgKCkiPmdzdF9wYWRfY2FuX2xpbms8L2E+ICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpzcmNwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnNpbmtwYWQ8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPiAqICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtY2FwcyIgdGl0bGU9ImdzdF9wYWRfZ2V0X2NhcHMgKCkiPmdzdF9wYWRfZ2V0X2NhcHM8L2E+ICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpmaWx0ZXI8L2NvZGU+PC9lbT4pOworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtY2Fwcy1yZWZmZWQiIHRpdGxlPSJnc3RfcGFkX2dldF9jYXBzX3JlZmZlZCgpIj5nc3RfcGFkX2dldF9jYXBzX3JlZmZlZDwvYT4gICAgICAgICAgICAgKHApCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1hbGxvd2VkLWNhcHMiIHRpdGxlPSJnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHMgKCkiPmdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwczwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPiAqICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtY3VycmVudC1jYXBzIiB0aXRsZT0iZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzICgpIj5nc3RfcGFkX2dldF9jdXJyZW50X2NhcHM8L2E+ICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKiAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXBhZC10ZW1wbGF0ZS1jYXBzIiB0aXRsZT0iZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKCkiPmdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzPC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtY2FwcyIgdGl0bGU9ImdzdF9wYWRfc2V0X2NhcHMgKCkiPmdzdF9wYWRfc2V0X2NhcHM8L2E+ICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXBlZXIiIHRpdGxlPSJnc3RfcGFkX2dldF9wZWVyICgpIj5nc3RfcGFkX2dldF9wZWVyPC9hPiAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKiAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcGVlci1nZXQtY2FwcyIgdGl0bGU9ImdzdF9wYWRfcGVlcl9nZXRfY2FwcyAoKSI+Z3N0X3BhZF9wZWVyX2dldF9jYXBzPC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmZpbHRlcjwvY29kZT48L2VtPik7CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXBlZXItZ2V0LWNhcHMtcmVmZmVkIiB0aXRsZT0iZ3N0X3BhZF9wZWVyX2dldF9jYXBzX3JlZmZlZCgpIj5nc3RfcGFkX3BlZXJfZ2V0X2NhcHNfcmVmZmVkPC9hPiAgICAgICAgKHApCis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXVzZS1maXhlZC1jYXBzIiB0aXRsZT0iZ3N0X3BhZF91c2VfZml4ZWRfY2FwcyAoKSI+Z3N0X3BhZF91c2VfZml4ZWRfY2FwczwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWhhcy1jdXJyZW50LWNhcHMiIHRpdGxlPSJnc3RfcGFkX2hhc19jdXJyZW50X2NhcHMgKCkiPmdzdF9wYWRfaGFzX2N1cnJlbnRfY2FwczwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKiAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtc3RpY2t5LWV2ZW50IiB0aXRsZT0iZ3N0X3BhZF9nZXRfc3RpY2t5X2V2ZW50ICgpIj5nc3RfcGFkX2dldF9zdGlja3lfZXZlbnQ8L2E+ICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudFR5cGUiIHRpdGxlPSJlbnVtIEdzdEV2ZW50VHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50VHlwZTwvc3Bhbj48L2E+IGV2ZW50X3R5cGU8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+ICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkU3RpY2t5RXZlbnRzRm9yZWFjaEZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkU3RpY2t5RXZlbnRzRm9yZWFjaEZ1bmN0aW9uICgpIj4qR3N0UGFkU3RpY2t5RXZlbnRzRm9yZWFjaEZ1bmN0aW9uPC9hPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zdGlja3ktZXZlbnRzLWZvcmVhY2giIHRpdGxlPSJnc3RfcGFkX3N0aWNreV9ldmVudHNfZm9yZWFjaCAoKSI+Z3N0X3BhZF9zdGlja3lfZXZlbnRzX2ZvcmVhY2g8L2E+ICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkU3RpY2t5RXZlbnRzRm9yZWFjaEZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkU3RpY2t5RXZlbnRzRm9yZWFjaEZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkU3RpY2t5RXZlbnRzRm9yZWFjaEZ1bmN0aW9uPC9zcGFuPjwvYT4gZm9yZWFjaF9mdW5jPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtaXMtYWN0aXZlIiB0aXRsZT0iZ3N0X3BhZF9pc19hY3RpdmUgKCkiPmdzdF9wYWRfaXNfYWN0aXZlPC9hPiAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1pcy1ibG9ja2VkIiB0aXRsZT0iZ3N0X3BhZF9pc19ibG9ja2VkICgpIj5nc3RfcGFkX2lzX2Jsb2NrZWQ8L2E+ICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtaXMtYmxvY2tpbmciIHRpdGxlPSJnc3RfcGFkX2lzX2Jsb2NraW5nICgpIj5nc3RfcGFkX2lzX2Jsb2NraW5nPC9hPiAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQcm9iZVJldHVybiIgdGl0bGU9ImVudW0gR3N0UHJvYmVSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UHJvYmVSZXR1cm48L3NwYW4+PC9hPiAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkUHJvYmVDYWxsYmFjayIgdGl0bGU9IkdzdFBhZFByb2JlQ2FsbGJhY2sgKCkiPipHc3RQYWRQcm9iZUNhbGxiYWNrPC9hPikgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UHJvYmVUeXBlIiB0aXRsZT0iZW51bSBHc3RQcm9iZVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQcm9iZVR5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdHlwZV9kYXRhPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWxvbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3Vsb25nPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWFkZC1wcm9iZSIgdGl0bGU9ImdzdF9wYWRfYWRkX3Byb2JlICgpIj5nc3RfcGFkX2FkZF9wcm9iZTwvYT4gICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQcm9iZVR5cGUiIHRpdGxlPSJlbnVtIEdzdFByb2JlVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFByb2JlVHlwZTwvc3Bhbj48L2E+IG1hc2s8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZFByb2JlQ2FsbGJhY2siIHRpdGxlPSJHc3RQYWRQcm9iZUNhbGxiYWNrICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkUHJvYmVDYWxsYmFjazwvc3Bhbj48L2E+IGNhbGxiYWNrPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRGF0YXNldHMuaHRtbCNHRGVzdHJveU5vdGlmeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT4gZGVzdHJveV9kYXRhPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcmVtb3ZlLXByb2JlIiB0aXRsZT0iZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKCkiPmdzdF9wYWRfcmVtb3ZlX3Byb2JlPC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1bG9uZyI+PHNwYW4gY2xhc3M9InR5cGUiPmd1bG9uZzwvc3Bhbj48L2E+IGlkPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1vZmZzZXQiIHRpdGxlPSJnc3RfcGFkX2dldF9vZmZzZXQgKCkiPmdzdF9wYWRfZ2V0X29mZnNldDwvYT4gICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtb2Zmc2V0IiB0aXRsZT0iZ3N0X3BhZF9zZXRfb2Zmc2V0ICgpIj5nc3RfcGFkX3NldF9vZmZzZXQ8L2E+ICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4pOworCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkPC9zcGFuPjwvYT4gKiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLW5ldyIgdGl0bGU9ImdzdF9wYWRfbmV3ICgpIj5nc3RfcGFkX25ldzwvYT4gICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWREaXJlY3Rpb24iIHRpdGxlPSJlbnVtIEdzdFBhZERpcmVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZERpcmVjdGlvbjwvc3Bhbj48L2E+IGRpcmVjdGlvbjwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkPC9zcGFuPjwvYT4gKiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLW5ldy1mcm9tLXRlbXBsYXRlIiB0aXRsZT0iZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoKSI+Z3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZTwvYT4gICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKnRlbXBsPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+ICogICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1uZXctZnJvbS1zdGF0aWMtdGVtcGxhdGUiIHRpdGxlPSJnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoKSI+Z3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGU8L2E+ICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0U3RhdGljUGFkVGVtcGxhdGUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RhdGljUGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0aWNQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+ICp0ZW1wbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWNoYWluLWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKCkiPmdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uPC9hPiAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZENoYWluRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRDaGFpbkZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkQ2hhaW5GdW5jdGlvbjwvc3Bhbj48L2E+IGNoYWluPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZENoYWluRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRDaGFpbkZ1bmN0aW9uICgpIj4qR3N0UGFkQ2hhaW5GdW5jdGlvbjwvYT4pICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1jaGFpbi1saXN0LWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X3BhZF9zZXRfY2hhaW5fbGlzdF9mdW5jdGlvbiAoKSI+Z3N0X3BhZF9zZXRfY2hhaW5fbGlzdF9mdW5jdGlvbjwvYT4gICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkQ2hhaW5MaXN0RnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRDaGFpbkxpc3RGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZENoYWluTGlzdEZ1bmN0aW9uPC9zcGFuPjwvYT4gY2hhaW5saXN0PC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZENoYWluTGlzdEZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkQ2hhaW5MaXN0RnVuY3Rpb24gKCkiPipHc3RQYWRDaGFpbkxpc3RGdW5jdGlvbjwvYT4pICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNHc3RCdWZmZXJMaXN0IiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4gICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXJhbmdlIiB0aXRsZT0iZ3N0X3BhZF9nZXRfcmFuZ2UgKCkiPmdzdF9wYWRfZ2V0X3JhbmdlPC9hPiAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gb2Zmc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqKmJ1ZmZlcjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1nZXRyYW5nZS1mdW5jdGlvbiIgdGl0bGU9ImdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uICgpIj5nc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbjwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRHZXRSYW5nZUZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkR2V0UmFuZ2VGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZEdldFJhbmdlRnVuY3Rpb248L3NwYW4+PC9hPiBnZXQ8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+ICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkR2V0UmFuZ2VGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEdldFJhbmdlRnVuY3Rpb24gKCkiPipHc3RQYWRHZXRSYW5nZUZ1bmN0aW9uPC9hPikgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBsZW5ndGg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKipidWZmZXI8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtZXZlbnQtZnVuY3Rpb24iIHRpdGxlPSJnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAoKSI+Z3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb248L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRXZlbnRGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEV2ZW50RnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRFdmVudEZ1bmN0aW9uPC9zcGFuPjwvYT4gZXZlbnQ8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEV2ZW50RnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRFdmVudEZ1bmN0aW9uICgpIj4qR3N0UGFkRXZlbnRGdW5jdGlvbjwvYT4pICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtbGluay1mdW5jdGlvbiIgdGl0bGU9ImdzdF9wYWRfc2V0X2xpbmtfZnVuY3Rpb24gKCkiPmdzdF9wYWRfc2V0X2xpbmtfZnVuY3Rpb248L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZExpbmtGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZExpbmtGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZExpbmtGdW5jdGlvbjwvc3Bhbj48L2E+IGxpbms8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZExpbmtSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdFBhZExpbmtSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkTGlua1JldHVybjwvc3Bhbj48L2E+ICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkTGlua0Z1bmN0aW9uIiB0aXRsZT0iR3N0UGFkTGlua0Z1bmN0aW9uICgpIj4qR3N0UGFkTGlua0Z1bmN0aW9uPC9hPikgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBlZXI8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtdW5saW5rLWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X3BhZF9zZXRfdW5saW5rX2Z1bmN0aW9uICgpIj5nc3RfcGFkX3NldF91bmxpbmtfZnVuY3Rpb248L2E+ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRVbmxpbmtGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZFVubGlua0Z1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVW5saW5rRnVuY3Rpb248L3NwYW4+PC9hPiB1bmxpbms8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZFVubGlua0Z1bmN0aW9uIiB0aXRsZT0iR3N0UGFkVW5saW5rRnVuY3Rpb24gKCkiPipHc3RQYWRVbmxpbmtGdW5jdGlvbjwvYT4pICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWFjY2VwdC1jYXBzIiB0aXRsZT0iZ3N0X3BhZF9hY2NlcHRfY2FwcyAoKSI+Z3N0X3BhZF9hY2NlcHRfY2FwczwvYT4gICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtYWNjZXB0Y2Fwcy1mdW5jdGlvbiIgdGl0bGU9ImdzdF9wYWRfc2V0X2FjY2VwdGNhcHNfZnVuY3Rpb24gKCkiPmdzdF9wYWRfc2V0X2FjY2VwdGNhcHNfZnVuY3Rpb248L2E+ICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEFjY2VwdENhcHNGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEFjY2VwdENhcHNGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZEFjY2VwdENhcHNGdW5jdGlvbjwvc3Bhbj48L2E+IGFjY2VwdGNhcHM8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEFjY2VwdENhcHNGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEFjY2VwdENhcHNGdW5jdGlvbiAoKSI+KkdzdFBhZEFjY2VwdENhcHNGdW5jdGlvbjwvYT4pICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1nZXRjYXBzLWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X3BhZF9zZXRfZ2V0Y2Fwc19mdW5jdGlvbiAoKSI+Z3N0X3BhZF9zZXRfZ2V0Y2Fwc19mdW5jdGlvbjwvYT4gICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkR2V0Q2Fwc0Z1bmN0aW9uIiB0aXRsZT0iR3N0UGFkR2V0Q2Fwc0Z1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkR2V0Q2Fwc0Z1bmN0aW9uPC9zcGFuPjwvYT4gZ2V0Y2FwczwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkR2V0Q2Fwc0Z1bmN0aW9uIiB0aXRsZT0iR3N0UGFkR2V0Q2Fwc0Z1bmN0aW9uICgpIj4qR3N0UGFkR2V0Q2Fwc0Z1bmN0aW9uPC9hPikgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpmaWx0ZXI8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPiAqICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1wcm94eS1nZXRjYXBzIiB0aXRsZT0iZ3N0X3BhZF9wcm94eV9nZXRjYXBzICgpIj5nc3RfcGFkX3Byb3h5X2dldGNhcHM8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqZmlsdGVyPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZml4YXRlLWNhcHMiIHRpdGxlPSJnc3RfcGFkX2ZpeGF0ZV9jYXBzICgpIj5nc3RfcGFkX2ZpeGF0ZV9jYXBzPC9hPiAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1maXhhdGVjYXBzLWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X3BhZF9zZXRfZml4YXRlY2Fwc19mdW5jdGlvbiAoKSI+Z3N0X3BhZF9zZXRfZml4YXRlY2Fwc19mdW5jdGlvbjwvYT4gICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRml4YXRlQ2Fwc0Z1bmN0aW9uIiB0aXRsZT0iR3N0UGFkRml4YXRlQ2Fwc0Z1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkRml4YXRlQ2Fwc0Z1bmN0aW9uPC9zcGFuPjwvYT4gZml4YXRlY2FwczwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRml4YXRlQ2Fwc0Z1bmN0aW9uIiB0aXRsZT0iR3N0UGFkRml4YXRlQ2Fwc0Z1bmN0aW9uICgpIj4qR3N0UGFkRml4YXRlQ2Fwc0Z1bmN0aW9uPC9hPikgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcGVlci1hY2NlcHQtY2FwcyIgdGl0bGU9ImdzdF9wYWRfcGVlcl9hY2NlcHRfY2FwcyAoKSI+Z3N0X3BhZF9wZWVyX2FjY2VwdF9jYXBzPC9hPiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtYWN0aXZhdGUtZnVuY3Rpb24iIHRpdGxlPSJnc3RfcGFkX3NldF9hY3RpdmF0ZV9mdW5jdGlvbiAoKSI+Z3N0X3BhZF9zZXRfYWN0aXZhdGVfZnVuY3Rpb248L2E+ICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkQWN0aXZhdGVGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEFjdGl2YXRlRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uPC9zcGFuPjwvYT4gYWN0aXZhdGU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEFjdGl2YXRlRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uICgpIj4qR3N0UGFkQWN0aXZhdGVGdW5jdGlvbjwvYT4pICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtYWN0aXZhdGVwdXNoLWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X3BhZF9zZXRfYWN0aXZhdGVwdXNoX2Z1bmN0aW9uICgpIj5nc3RfcGFkX3NldF9hY3RpdmF0ZXB1c2hfZnVuY3Rpb248L2E+ICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEFjdGl2YXRlTW9kZUZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb248L3NwYW4+PC9hPiBhY3RpdmF0ZXB1c2g8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtYWN0aXZhdGVwdWxsLWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X3BhZF9zZXRfYWN0aXZhdGVwdWxsX2Z1bmN0aW9uICgpIj5nc3RfcGFkX3NldF9hY3RpdmF0ZXB1bGxfZnVuY3Rpb248L2E+ICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEFjdGl2YXRlTW9kZUZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb248L3NwYW4+PC9hPiBhY3RpdmF0ZXB1bGw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEFjdGl2YXRlTW9kZUZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb24gKCkiPipHc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbjwvYT4pICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGFjdGl2ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWNoZWNrLXJlY29uZmlndXJlIiB0aXRsZT0iZ3N0X3BhZF9jaGVja19yZWNvbmZpZ3VyZSAoKSI+Z3N0X3BhZF9jaGVja19yZWNvbmZpZ3VyZTwvYT4gICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLW1hcmstcmVjb25maWd1cmUiIHRpdGxlPSJnc3RfcGFkX21hcmtfcmVjb25maWd1cmUgKCkiPmdzdF9wYWRfbWFya19yZWNvbmZpZ3VyZTwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+ICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1c2giIHRpdGxlPSJnc3RfcGFkX3B1c2ggKCkiPmdzdF9wYWRfcHVzaDwvYT4gICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1c2gtZXZlbnQiIHRpdGxlPSJnc3RfcGFkX3B1c2hfZXZlbnQgKCkiPmdzdF9wYWRfcHVzaF9ldmVudDwvYT4gICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+ICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1c2gtbGlzdCIgdGl0bGU9ImdzdF9wYWRfcHVzaF9saXN0ICgpIj5nc3RfcGFkX3B1c2hfbGlzdDwvYT4gICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3QiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1wdWxsLXJhbmdlIiB0aXRsZT0iZ3N0X3BhZF9wdWxsX3JhbmdlICgpIj5nc3RfcGFkX3B1bGxfcmFuZ2U8L2E+ICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKipidWZmZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1hY3RpdmF0ZS1wdWxsIiB0aXRsZT0iZ3N0X3BhZF9hY3RpdmF0ZV9wdWxsICgpIj5nc3RfcGFkX2FjdGl2YXRlX3B1bGw8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gYWN0aXZlPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtYWN0aXZhdGUtcHVzaCIgdGl0bGU9ImdzdF9wYWRfYWN0aXZhdGVfcHVzaCAoKSI+Z3N0X3BhZF9hY3RpdmF0ZV9wdXNoPC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGFjdGl2ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNlbmQtZXZlbnQiIHRpdGxlPSJnc3RfcGFkX3NlbmRfZXZlbnQgKCkiPmdzdF9wYWRfc2VuZF9ldmVudDwvYT4gICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1ldmVudC1kZWZhdWx0IiB0aXRsZT0iZ3N0X3BhZF9ldmVudF9kZWZhdWx0ICgpIj5nc3RfcGFkX2V2ZW50X2RlZmF1bHQ8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcXVlcnkiIHRpdGxlPSJnc3RfcGFkX3F1ZXJ5ICgpIj5nc3RfcGFkX3F1ZXJ5PC9hPiAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcGVlci1xdWVyeSIgdGl0bGU9ImdzdF9wYWRfcGVlcl9xdWVyeSAoKSI+Z3N0X3BhZF9wZWVyX3F1ZXJ5PC9hPiAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXF1ZXJ5LWRlZmF1bHQiIHRpdGxlPSJnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKCkiPmdzdF9wYWRfcXVlcnlfZGVmYXVsdDwvYT4gICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1xdWVyeS1wb3NpdGlvbiIgdGl0bGU9ImdzdF9wYWRfcXVlcnlfcG9zaXRpb24gKCkiPmdzdF9wYWRfcXVlcnlfcG9zaXRpb248L2E+ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKmN1cjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXF1ZXJ5LWR1cmF0aW9uIiB0aXRsZT0iZ3N0X3BhZF9xdWVyeV9kdXJhdGlvbiAoKSI+Z3N0X3BhZF9xdWVyeV9kdXJhdGlvbjwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqZHVyYXRpb248L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1xdWVyeS1jb252ZXJ0IiB0aXRsZT0iZ3N0X3BhZF9xdWVyeV9jb252ZXJ0ICgpIj5nc3RfcGFkX3F1ZXJ5X2NvbnZlcnQ8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBzcmNfZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBzcmNfdmFsPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBkZXN0X2Zvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKmRlc3RfdmFsPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcXVlcnktcGVlci1wb3NpdGlvbiIgdGl0bGU9ImdzdF9wYWRfcXVlcnlfcGVlcl9wb3NpdGlvbiAoKSI+Z3N0X3BhZF9xdWVyeV9wZWVyX3Bvc2l0aW9uPC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqY3VyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcXVlcnktcGVlci1kdXJhdGlvbiIgdGl0bGU9ImdzdF9wYWRfcXVlcnlfcGVlcl9kdXJhdGlvbiAoKSI+Z3N0X3BhZF9xdWVyeV9wZWVyX2R1cmF0aW9uPC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqZHVyYXRpb248L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1xdWVyeS1wZWVyLWNvbnZlcnQiIHRpdGxlPSJnc3RfcGFkX3F1ZXJ5X3BlZXJfY29udmVydCAoKSI+Z3N0X3BhZF9xdWVyeV9wZWVyX2NvbnZlcnQ8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gc3JjX2Zvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc3JjX3ZhbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZGVzdF9mb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpkZXN0X3ZhbDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1xdWVyeS1mdW5jdGlvbiIgdGl0bGU9ImdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uICgpIj5nc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbjwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRRdWVyeUZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkUXVlcnlGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFF1ZXJ5RnVuY3Rpb248L3NwYW4+PC9hPiBxdWVyeTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkUXVlcnlGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZFF1ZXJ5RnVuY3Rpb24gKCkiPipHc3RQYWRRdWVyeUZ1bmN0aW9uPC9hPikgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1xdWVyeS10eXBlLWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X3BhZF9zZXRfcXVlcnlfdHlwZV9mdW5jdGlvbiAoKSI+Z3N0X3BhZF9zZXRfcXVlcnlfdHlwZV9mdW5jdGlvbjwvYT4gICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkUXVlcnlUeXBlRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRRdWVyeVR5cGVGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFF1ZXJ5VHlwZUZ1bmN0aW9uPC9zcGFuPjwvYT4gdHlwZV9mdW5jPC9jb2RlPjwvZW0+KTsKK2NvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGUiIHRpdGxlPSJlbnVtIEdzdFF1ZXJ5VHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RRdWVyeVR5cGU8L3NwYW4+PC9hPiAqICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkUXVlcnlUeXBlRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRRdWVyeVR5cGVGdW5jdGlvbiAoKSI+KkdzdFBhZFF1ZXJ5VHlwZUZ1bmN0aW9uPC9hPikgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOworY29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5VHlwZSIgdGl0bGU9ImVudW0gR3N0UXVlcnlUeXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5VHlwZTwvc3Bhbj48L2E+ICogPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXF1ZXJ5LXR5cGVzIiB0aXRsZT0iZ3N0X3BhZF9nZXRfcXVlcnlfdHlwZXMgKCkiPmdzdF9wYWRfZ2V0X3F1ZXJ5X3R5cGVzPC9hPiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7Citjb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnlUeXBlIiB0aXRsZT0iZW51bSBHc3RRdWVyeVR5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnlUeXBlPC9zcGFuPjwvYT4gKiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtcXVlcnktdHlwZXMtZGVmYXVsdCIgdGl0bGU9ImdzdF9wYWRfZ2V0X3F1ZXJ5X3R5cGVzX2RlZmF1bHQgKCkiPmdzdF9wYWRfZ2V0X3F1ZXJ5X3R5cGVzX2RlZmF1bHQ8L2E+ICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1pdGVyYXRlLWludGVybmFsLWxpbmtzLWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X3BhZF9zZXRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19mdW5jdGlvbiAoKSI+Z3N0X3BhZF9zZXRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19mdW5jdGlvbjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uIiB0aXRsZT0iR3N0UGFkSXRlckludExpbmtGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZEl0ZXJJbnRMaW5rRnVuY3Rpb248L3NwYW4+PC9hPiBpdGVyaW50bGluazwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkSXRlckludExpbmtGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEl0ZXJJbnRMaW5rRnVuY3Rpb24gKCkiPipHc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uPC9hPikgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWl0ZXJhdGUtaW50ZXJuYWwtbGlua3MiIHRpdGxlPSJnc3RfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3MgKCkiPmdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rczwvYT4gICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1pdGVyYXRlLWludGVybmFsLWxpbmtzLWRlZmF1bHQiIHRpdGxlPSJnc3RfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZGVmYXVsdCAoKSI+Z3N0X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2RlZmF1bHQ8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1lbGVtZW50LXByaXZhdGUiIHRpdGxlPSJnc3RfcGFkX3NldF9lbGVtZW50X3ByaXZhdGUgKCkiPmdzdF9wYWRfc2V0X2VsZW1lbnRfcHJpdmF0ZTwvYT4gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBwcml2PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LWVsZW1lbnQtcHJpdmF0ZSIgdGl0bGU9ImdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAoKSI+Z3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlPC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRm9yd2FyZEZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkRm9yd2FyZEZ1bmN0aW9uICgpIj4qR3N0UGFkRm9yd2FyZEZ1bmN0aW9uPC9hPikgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1mb3J3YXJkIiB0aXRsZT0iZ3N0X3BhZF9mb3J3YXJkICgpIj5nc3RfcGFkX2ZvcndhcmQ8L2E+ICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRGb3J3YXJkRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRGb3J3YXJkRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRGb3J3YXJkRnVuY3Rpb248L3NwYW4+PC9hPiBmb3J3YXJkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTsKKworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+ICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWNoYWluIiB0aXRsZT0iZ3N0X3BhZF9jaGFpbiAoKSI+Z3N0X3BhZF9jaGFpbjwvYT4gICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1jaGFpbi1saXN0IiB0aXRsZT0iZ3N0X3BhZF9jaGFpbl9saXN0ICgpIj5nc3RfcGFkX2NoYWluX2xpc3Q8L2E+ICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3QiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc3RhcnQtdGFzayIgdGl0bGU9ImdzdF9wYWRfc3RhcnRfdGFzayAoKSI+Z3N0X3BhZF9zdGFydF90YXNrPC9hPiAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI0dzdFRhc2tGdW5jdGlvbiIgdGl0bGU9IkdzdFRhc2tGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2tGdW5jdGlvbjwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBkYXRhPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcGF1c2UtdGFzayIgdGl0bGU9ImdzdF9wYWRfcGF1c2VfdGFzayAoKSI+Z3N0X3BhZF9wYXVzZV90YXNrPC9hPiAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXN0b3AtdGFzayIgdGl0bGU9ImdzdF9wYWRfc3RvcF90YXNrICgpIj5nc3RfcGFkX3N0b3BfdGFzazwvYT4gICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWFjdGl2ZSIgdGl0bGU9ImdzdF9wYWRfc2V0X2FjdGl2ZSAoKSI+Z3N0X3BhZF9zZXRfYWN0aXZlPC9hPiAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGFjdGl2ZTwvY29kZT48L2VtPik7CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELUdFVC1TVFJFQU0tTE9DSzpDQVBTIiB0aXRsZT0iR1NUX1BBRF9HRVRfU1RSRUFNX0xPQ0soKSI+R1NUX1BBRF9HRVRfU1RSRUFNX0xPQ0s8L2E+ICAgICAgICAgICAgIChwYWQpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVNUUkVBTS1MT0NLOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1NUUkVBTV9MT0NLKCkiPkdTVF9QQURfU1RSRUFNX0xPQ0s8L2E+ICAgICAgICAgICAgICAgICAocGFkKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1TVFJFQU0tTE9DSy1GVUxMOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1NUUkVBTV9MT0NLX0ZVTEwoKSI+R1NUX1BBRF9TVFJFQU1fTE9DS19GVUxMPC9hPiAgICAgICAgICAgIChwYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0KQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1TVFJFQU0tVFJZTE9DSzpDQVBTIiB0aXRsZT0iR1NUX1BBRF9TVFJFQU1fVFJZTE9DSygpIj5HU1RfUEFEX1NUUkVBTV9UUllMT0NLPC9hPiAgICAgICAgICAgICAgKHBhZCkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtU1RSRUFNLVVOTE9DSzpDQVBTIiB0aXRsZT0iR1NUX1BBRF9TVFJFQU1fVU5MT0NLKCkiPkdTVF9QQURfU1RSRUFNX1VOTE9DSzwvYT4gICAgICAgICAgICAgICAocGFkKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1TVFJFQU0tVU5MT0NLLUZVTEw6Q0FQUyIgdGl0bGU9IkdTVF9QQURfU1RSRUFNX1VOTE9DS19GVUxMKCkiPkdTVF9QQURfU1RSRUFNX1VOTE9DS19GVUxMPC9hPiAgICAgICAgICAocGFkKQorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdFBhZC5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+R09iamVjdDwvYT4KKyAgICstLS0tPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KKyAgICAgICAgICstLS0tPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+CisgICAgICAgICAgICAgICArLS0tLUdzdFBhZAorICAgICAgICAgICAgICAgICAgICAgKy0tLS08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNHc3RQcm94eVBhZCI+R3N0UHJveHlQYWQ8L2E+Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0UGFkLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkLS1jYXBzIiB0aXRsZT0nVGhlICJjYXBzIiBwcm9wZXJ0eSc+Y2FwczwvYT4iICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+KiAgICAgICAgICAgICAgOiBSZWFkCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkLS1kaXJlY3Rpb24iIHRpdGxlPSdUaGUgImRpcmVjdGlvbiIgcHJvcGVydHknPmRpcmVjdGlvbjwvYT4iICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWREaXJlY3Rpb24iIHRpdGxlPSJlbnVtIEdzdFBhZERpcmVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZERpcmVjdGlvbjwvc3Bhbj48L2E+ICAgICAgIDogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0IE9ubHkKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWQtLXRlbXBsYXRlIiB0aXRsZT0nVGhlICJ0ZW1wbGF0ZSIgcHJvcGVydHknPnRlbXBsYXRlPC9hPiIgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+KiAgICAgICA6IFJlYWQgLyBXcml0ZQorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdFBhZC5zaWduYWxzIj48L2E+PGgyPlNpZ25hbHM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZC1saW5rZWQiIHRpdGxlPSdUaGUgImxpbmtlZCIgc2lnbmFsJz5saW5rZWQ8L2E+IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+UnVuIExhc3Q8L2NvZGU+PC9hPgorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZC11bmxpbmtlZCIgdGl0bGU9J1RoZSAidW5saW5rZWQiIHNpZ25hbCc+dW5saW5rZWQ8L2E+IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlJ1biBMYXN0PC9jb2RlPjwvYT4KKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RQYWQuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitBIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IGlzIGxpbmtlZCB0byBvdGhlciBlbGVtZW50cyB2aWEgInBhZHMiLCB3aGljaCBhcmUgZXh0cmVtZWx5CitsaWdodC13ZWlnaHQgZ2VuZXJpYyBsaW5rIHBvaW50cy4KK0FmdGVyIHR3byBwYWRzIGFyZSByZXRyaWV2ZWQgZnJvbSBhbiBlbGVtZW50IHdpdGggPGEgaHJlZj0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyL2h0bWwvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1wYWQiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfZ2V0X3BhZCgpPC9jb2RlPjwvYT4sCit0aGUgcGFkcyBjYW4gYmUgbGluayB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWxpbmsiIHRpdGxlPSJnc3RfcGFkX2xpbmsgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9saW5rKCk8L2NvZGU+PC9hPi4gKEZvciBxdWljayBsaW5rcywKK3lvdSBjYW4gYWxzbyB1c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1saW5rIiB0aXRsZT0iZ3N0X2VsZW1lbnRfbGluayAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9saW5rKCk8L2NvZGU+PC9hPiwgd2hpY2ggd2lsbCBtYWtlIHRoZSBvYnZpb3VzCitsaW5rIGZvciB5b3UgaWYgaXQncyBzdHJhaWdodGZvcndhcmQuKQorPC9wPgorPHA+CitQYWRzIGFyZSB0eXBpY2FsbHkgY3JlYXRlZCBmcm9tIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4gd2l0aAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtbmV3LWZyb20tdGVtcGxhdGUiIHRpdGxlPSJnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitQYWRzIGhhdmUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IGF0dGFjaGVkIHRvIGl0IHRvIGRlc2NyaWJlIHRoZSBtZWRpYSB0eXBlIHRoZXkgYXJlCitjYXBhYmxlIG9mIGRlYWxpbmcgd2l0aC4gIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1jYXBzIiB0aXRsZT0iZ3N0X3BhZF9nZXRfY2FwcyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX2dldF9jYXBzKCk8L2NvZGU+PC9hPiBhbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWNhcHMiIHRpdGxlPSJnc3RfcGFkX3NldF9jYXBzICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfc2V0X2NhcHMoKTwvY29kZT48L2E+IGFyZQordXNlZCB0byBtYW5pcHVsYXRlIHRoZSBjYXBzIG9mIHRoZSBwYWRzLgorUGFkcyBjcmVhdGVkIGZyb20gYSBwYWQgdGVtcGxhdGUgY2Fubm90IHNldCBjYXBhYmlsaXRpZXMgdGhhdCBhcmUKK2luY29tcGF0aWJsZSB3aXRoIHRoZSBwYWQgdGVtcGxhdGUgY2FwYWJpbGl0aWVzLgorPC9wPgorPHA+CitQYWRzIHdpdGhvdXQgcGFkIHRlbXBsYXRlcyBjYW4gYmUgY3JlYXRlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLW5ldyIgdGl0bGU9ImdzdF9wYWRfbmV3ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfbmV3KCk8L2NvZGU+PC9hPiwKK3doaWNoIHRha2VzIGEgZGlyZWN0aW9uIGFuZCBhIG5hbWUgYXMgYW4gYXJndW1lbnQuICBJZiB0aGUgbmFtZSBpcyBOVUxMLAordGhlbiBhIGd1YXJhbnRlZWQgdW5pcXVlIG5hbWUgd2lsbCBiZSBhc3NpZ25lZCB0byBpdC4KKzwvcD4KKzxwPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXBhcmVudCIgdGl0bGU9ImdzdF9wYWRfZ2V0X3BhcmVudCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfZ2V0X3BhcmVudCgpPC9jb2RlPjwvYT4gd2lsbCByZXRyaWV2ZSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdGhhdCBvd25zIHRoZSBwYWQuCis8L3A+Cis8cD4KK0EgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gY3JlYXRpbmcgYSBwYWQgd2lsbCB0eXBpY2FsbHkgdXNlIHRoZSB2YXJpb3VzCitnc3RfcGFkX3NldF8qX2Z1bmN0aW9uKCkgY2FsbHMgdG8gcmVnaXN0ZXIgY2FsbGJhY2tzIGZvciB2YXJpb3VzIGV2ZW50cworb24gdGhlIHBhZHMuCis8L3A+Cis8cD4KK0dzdEVsZW1lbnRzIHdpbGwgdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1c2giIHRpdGxlPSJnc3RfcGFkX3B1c2ggKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9wdXNoKCk8L2NvZGU+PC9hPiBhbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcHVsbC1yYW5nZSIgdGl0bGU9ImdzdF9wYWRfcHVsbF9yYW5nZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3B1bGxfcmFuZ2UoKTwvY29kZT48L2E+IHRvIHB1c2ggb3V0CitvciBwdWxsIGluIGEgYnVmZmVyLgorPC9wPgorPHA+CitUbyBzZW5kIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiBvbiBhIHBhZCwgdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNlbmQtZXZlbnQiIHRpdGxlPSJnc3RfcGFkX3NlbmRfZXZlbnQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9zZW5kX2V2ZW50KCk8L2NvZGU+PC9hPiBhbmQKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1c2gtZXZlbnQiIHRpdGxlPSJnc3RfcGFkX3B1c2hfZXZlbnQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9wdXNoX2V2ZW50KCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxwPgorTGFzdCByZXZpZXdlZCBvbiAyMDA2LTA3LTA2ICgwLjEwLjkpCis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdFBhZC5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UGFkLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UGFkPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UGFkIHsKKyAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfcHJpdmF0ZTsKKworICBHc3RQYWRUZW1wbGF0ZSAgICAgICAgICAgICAgICAqcGFkdGVtcGxhdGU7CisKKyAgR3N0UGFkRGlyZWN0aW9uICAgICAgICAgICAgICAgIGRpcmVjdGlvbjsKKworICAvKiBzdHJlYW1pbmcgcmVjX2xvY2sgKi8KKyAgR1N0YXRpY1JlY011dGV4CQkgc3RyZWFtX3JlY19sb2NrOworICBHc3RUYXNrCQkJKnRhc2s7CisKKyAgLyogYmxvY2sgY29uZCwgbXV0ZXggaXMgZnJvbSB0aGUgb2JqZWN0ICovCisgIEdDb25kCQkJCSpibG9ja19jb25kOworICBHSG9va0xpc3QgICAgICAgICAgICAgICAgICAgICAgcHJvYmVzOworCisgIC8qIHRoZSBwYWQgY2FwYWJpbGl0aWVzICovCisgIEdzdFBhZEdldENhcHNGdW5jdGlvbgkJZ2V0Y2Fwc2Z1bmM7CisgIEdzdFBhZEFjY2VwdENhcHNGdW5jdGlvbgkgYWNjZXB0Y2Fwc2Z1bmM7CisgIEdzdFBhZEZpeGF0ZUNhcHNGdW5jdGlvbgkgZml4YXRlY2Fwc2Z1bmM7CisKKyAgR3N0QWN0aXZhdGVNb2RlCQkgbW9kZTsKKyAgR3N0UGFkQWN0aXZhdGVGdW5jdGlvbgkgYWN0aXZhdGVmdW5jOworICBHc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbgkgYWN0aXZhdGVwdXNoZnVuYzsKKyAgR3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb24JIGFjdGl2YXRlcHVsbGZ1bmM7CisKKyAgLyogcGFkIGxpbmsgKi8KKyAgR3N0UGFkCQkJKnBlZXI7CisgIEdzdFBhZExpbmtGdW5jdGlvbgkJIGxpbmtmdW5jOworICBHc3RQYWRVbmxpbmtGdW5jdGlvbgkJIHVubGlua2Z1bmM7CisKKyAgLyogZGF0YSB0cmFuc3BvcnQgZnVuY3Rpb25zICovCisgIEdzdFBhZENoYWluRnVuY3Rpb24JCSBjaGFpbmZ1bmM7CisgIEdzdFBhZENoYWluTGlzdEZ1bmN0aW9uICAgICAgICBjaGFpbmxpc3RmdW5jOworICBHc3RQYWRHZXRSYW5nZUZ1bmN0aW9uCSBnZXRyYW5nZWZ1bmM7CisgIEdzdFBhZEV2ZW50RnVuY3Rpb24JCSBldmVudGZ1bmM7CisKKyAgLyogcGFkIG9mZnNldCAqLworICBnaW50NjQgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OworCisgIC8qIGdlbmVyaWMgcXVlcnkgbWV0aG9kICovCisgIEdzdFBhZFF1ZXJ5VHlwZUZ1bmN0aW9uCSBxdWVyeXR5cGVmdW5jOworICBHc3RQYWRRdWVyeUZ1bmN0aW9uCQkgcXVlcnlmdW5jOworCisgIC8qIGludGVybmFsIGxpbmtzICovCisgIEdzdFBhZEl0ZXJJbnRMaW5rRnVuY3Rpb24gICAgICBpdGVyaW50bGlua2Z1bmM7Cit9OworPC9wcmU+Cis8cD4KK1RoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUuIFVzZSB0aGUgZnVuY3Rpb25zIHRvIHVwZGF0ZSB0aGUgdmFyaWFibGVzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGFkLXN0cnVjdC5lbGVtZW50LXByaXZhdGUiPjwvYT5lbGVtZW50X3ByaXZhdGU8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnByaXZhdGUgZGF0YSBvd25lZCBieSB0aGUgcGFyZW50IGVsZW1lbnQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQYWQtc3RydWN0LnBhZHRlbXBsYXRlIj48L2E+cGFkdGVtcGxhdGU8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnBhZHRlbXBsYXRlIGZvciB0aGlzIHBhZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRGlyZWN0aW9uIiB0aXRsZT0iZW51bSBHc3RQYWREaXJlY3Rpb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWREaXJlY3Rpb248L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGFkLXN0cnVjdC5kaXJlY3Rpb24iPjwvYT5kaXJlY3Rpb248L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBkaXJlY3Rpb24gb2YgdGhlIHBhZCwgY2Fubm90IGNoYW5nZSBhZnRlciBjcmVhdGluZwordGhlIHBhZC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1UaHJlYWRzLmh0bWwjR1N0YXRpY1JlY011dGV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R1N0YXRpY1JlY011dGV4PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFBhZC1zdHJ1Y3Quc3RyZWFtLXJlYy1sb2NrIj48L2E+c3RyZWFtX3JlY19sb2NrPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5yZWN1cnNpdmUgc3RyZWFtIGxvY2sgb2YgdGhlIHBhZCwgdXNlZCB0byBwcm90ZWN0Cit0aGUgZGF0YSB1c2VkIGluIHN0cmVhbWluZy48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQYWQtc3RydWN0LnRhc2siPjwvYT50YXNrPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50YXNrIGZvciB0aGlzIHBhZCBpZiB0aGUgcGFkIGlzIGFjdGl2ZWx5IGRyaXZpbmcgZGF0YWZsb3cuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItVGhyZWFkcy5odG1sI0dDb25kIj48c3BhbiBjbGFzcz0idHlwZSI+R0NvbmQ8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFBhZC1zdHJ1Y3QuYmxvY2stY29uZCI+PC9hPmJsb2NrX2NvbmQ8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPmNvbmRpdGlvbmFsIHRvIHNpZ25hbCBwYWQgYmxvY2s8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Ib29rLUZ1bmN0aW9ucy5odG1sI0dIb29rTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdIb29rTGlzdDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQYWQtc3RydWN0LnByb2JlcyI+PC9hPnByb2JlczwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+aW5zdGFsbGVkIHByb2JlczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkR2V0Q2Fwc0Z1bmN0aW9uIiB0aXRsZT0iR3N0UGFkR2V0Q2Fwc0Z1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkR2V0Q2Fwc0Z1bmN0aW9uPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFBhZC1zdHJ1Y3QuZ2V0Y2Fwc2Z1bmMiPjwvYT5nZXRjYXBzZnVuYzwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZnVuY3Rpb24gdG8gZ2V0IGNhcHMgb2YgdGhlIHBhZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkQWNjZXB0Q2Fwc0Z1bmN0aW9uIiB0aXRsZT0iR3N0UGFkQWNjZXB0Q2Fwc0Z1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkQWNjZXB0Q2Fwc0Z1bmN0aW9uPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFBhZC1zdHJ1Y3QuYWNjZXB0Y2Fwc2Z1bmMiPjwvYT5hY2NlcHRjYXBzZnVuYzwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZnVuY3Rpb24gdG8gY2hlY2sgaWYgcGFkIGNhbiBhY2NlcHQgY2FwczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRml4YXRlQ2Fwc0Z1bmN0aW9uIiB0aXRsZT0iR3N0UGFkRml4YXRlQ2Fwc0Z1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkRml4YXRlQ2Fwc0Z1bmN0aW9uPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFBhZC1zdHJ1Y3QuZml4YXRlY2Fwc2Z1bmMiPjwvYT5maXhhdGVjYXBzZnVuYzwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZnVuY3Rpb24gdG8gZml4YXRlIGNhcHM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEFjdGl2YXRlTW9kZSIgdGl0bGU9ImVudW0gR3N0QWN0aXZhdGVNb2RlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWN0aXZhdGVNb2RlPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFBhZC1zdHJ1Y3QubW9kZSI+PC9hPm1vZGU8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPmN1cnJlbnQgYWN0aXZhdGlvbiBtb2RlIG9mIHRoZSBwYWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEFjdGl2YXRlRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkQWN0aXZhdGVGdW5jdGlvbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQYWQtc3RydWN0LmFjdGl2YXRlZnVuYyI+PC9hPmFjdGl2YXRlZnVuYzwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cGFkIGFjdGl2YXRpb24gZnVuY3Rpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEFjdGl2YXRlTW9kZUZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQYWQtc3RydWN0LmFjdGl2YXRlcHVzaGZ1bmMiPjwvYT5hY3RpdmF0ZXB1c2hmdW5jPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5mdW5jdGlvbiB0byBhY3RpdmF0ZS9kZWFjdGl2YXRlIHBhZCBpbiBwdXNoIG1vZGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEFjdGl2YXRlTW9kZUZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQYWQtc3RydWN0LmFjdGl2YXRlcHVsbGZ1bmMiPjwvYT5hY3RpdmF0ZXB1bGxmdW5jPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5mdW5jdGlvbiB0byBhY3RpdmF0ZS9kZWFjdGl2YXRlIHBhZCBpbiBwdWxsIG1vZGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQYWQtc3RydWN0LnBlZXIiPjwvYT5wZWVyPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGFkIHRoaXMgcGFkIGlzIGxpbmtlZCB0bzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkTGlua0Z1bmN0aW9uIiB0aXRsZT0iR3N0UGFkTGlua0Z1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkTGlua0Z1bmN0aW9uPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFBhZC1zdHJ1Y3QubGlua2Z1bmMiPjwvYT5saW5rZnVuYzwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZnVuY3Rpb24gY2FsbGVkIHdoZW4gcGFkIGlzIGxpbmtlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkVW5saW5rRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRVbmxpbmtGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFVubGlua0Z1bmN0aW9uPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFBhZC1zdHJ1Y3QudW5saW5rZnVuYyI+PC9hPnVubGlua2Z1bmM8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPmZ1bmN0aW9uIGNhbGxlZCB3aGVuIHBhZCBpcyB1bmxpbmtlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkQ2hhaW5GdW5jdGlvbiIgdGl0bGU9IkdzdFBhZENoYWluRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRDaGFpbkZ1bmN0aW9uPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFBhZC1zdHJ1Y3QuY2hhaW5mdW5jIj48L2E+Y2hhaW5mdW5jPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5mdW5jdGlvbiB0byBjaGFpbiBidWZmZXIgdG8gcGFkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRDaGFpbkxpc3RGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZENoYWluTGlzdEZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkQ2hhaW5MaXN0RnVuY3Rpb248L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGFkLXN0cnVjdC5jaGFpbmxpc3RmdW5jIj48L2E+Y2hhaW5saXN0ZnVuYzwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZnVuY3Rpb24gdG8gY2hhaW4gYSBsaXN0IG9mIGJ1ZmZlcnMgdG8gcGFkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRHZXRSYW5nZUZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkR2V0UmFuZ2VGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZEdldFJhbmdlRnVuY3Rpb248L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGFkLXN0cnVjdC5nZXRyYW5nZWZ1bmMiPjwvYT5nZXRyYW5nZWZ1bmM8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPmZ1bmN0aW9uIHRvIGdldCBhIHJhbmdlIG9mIGRhdGEgZnJvbSBhIHBhZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRXZlbnRGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEV2ZW50RnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRFdmVudEZ1bmN0aW9uPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFBhZC1zdHJ1Y3QuZXZlbnRmdW5jIj48L2E+ZXZlbnRmdW5jPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5mdW5jdGlvbiB0byBzZW5kIGFuIGV2ZW50IHRvIGEgcGFkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGFkLXN0cnVjdC5vZmZzZXQiPjwvYT5vZmZzZXQ8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwYWQgb2Zmc2V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRRdWVyeVR5cGVGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZFF1ZXJ5VHlwZUZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkUXVlcnlUeXBlRnVuY3Rpb248L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGFkLXN0cnVjdC5xdWVyeXR5cGVmdW5jIj48L2E+cXVlcnl0eXBlZnVuYzwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Z2V0IGxpc3Qgb2Ygc3VwcG9ydGVkIHF1ZXJpZXM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZFF1ZXJ5RnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRRdWVyeUZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkUXVlcnlGdW5jdGlvbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQYWQtc3RydWN0LnF1ZXJ5ZnVuYyI+PC9hPnF1ZXJ5ZnVuYzwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cGVyZm9ybSBhIHF1ZXJ5IG9uIHRoZSBwYWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEl0ZXJJbnRMaW5rRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkSXRlckludExpbmtGdW5jdGlvbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQYWQtc3RydWN0Lml0ZXJpbnRsaW5rZnVuYyI+PC9hPml0ZXJpbnRsaW5rZnVuYzwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Z2V0IHRoZSBpbnRlcm5hbCBsaW5rcyBpdGVyYXRvciBvZiB0aGlzIHBhZDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFBhZERpcmVjdGlvbiI+PC9hPjxoMz5lbnVtIEdzdFBhZERpcmVjdGlvbjwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBlbnVtIHsKKyAgR1NUX1BBRF9VTktOT1dOLAorICBHU1RfUEFEX1NSQywKKyAgR1NUX1BBRF9TSU5LCit9IEdzdFBhZERpcmVjdGlvbjsKKzwvcHJlPgorPHA+CitUaGUgZGlyZWN0aW9uIG9mIGEgcGFkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUEFELVVOS05PV046Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BBRF9VTktOT1dOPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5kaXJlY3Rpb24gaXMgdW5rbm93bi4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1QQUQtU1JDOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9QQURfU1JDPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGFkIGlzIGEgc291cmNlIHBhZC4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1QQUQtU0lOSzpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUEFEX1NJTks8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwYWQgaXMgYSBzaW5rIHBhZC4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFBhZEZsYWdzIj48L2E+PGgzPmVudW0gR3N0UGFkRmxhZ3M8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9QQURfQkxPQ0tFRCAgICAgICAgICA9IChHU1RfT0JKRUNUX0ZMQUdfTEFTVCAmbHQ7Jmx0OyAwKSwKKyAgR1NUX1BBRF9GTFVTSElORyAgICAgICAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUICZsdDsmbHQ7IDEpLAorICBHU1RfUEFEX0lOX0dFVENBUFMgICAgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgJmx0OyZsdDsgMiksCisgIEdTVF9QQURfQkxPQ0tJTkcgICAgICAgICA9IChHU1RfT0JKRUNUX0ZMQUdfTEFTVCAmbHQ7Jmx0OyA0KSwKKyAgR1NUX1BBRF9ORUVEX1JFQ09ORklHVVJFID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUICZsdDsmbHQ7IDUpLAorICBHU1RfUEFEX05FRURfRVZFTlRTICAgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgJmx0OyZsdDsgNiksCisgIEdTVF9QQURfRklYRURfQ0FQUyAgICAgICA9IChHU1RfT0JKRUNUX0ZMQUdfTEFTVCAmbHQ7Jmx0OyA3KSwKKyAgLyogcGFkZGluZyAqLworICBHU1RfUEFEX0ZMQUdfTEFTVCAgICAgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgJmx0OyZsdDsgMTYpCit9IEdzdFBhZEZsYWdzOworPC9wcmU+Cis8cD4KK1BhZCBzdGF0ZSBmbGFncworPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUEFELUJMT0NLRUQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BBRF9CTE9DS0VEPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5pcyBkYXRhZmxvdyBvbiBhIHBhZCBibG9ja2VkCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUEFELUZMVVNISU5HOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9QQURfRkxVU0hJTkc8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmlzIHBhZCByZWZ1c2luZyBidWZmZXJzCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUEFELUlOLUdFVENBUFM6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BBRF9JTl9HRVRDQVBTPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Hc3RQYWRHZXRDYXBzRnVuY3Rpb24oKSBpcyBydW5uaW5nIG5vdworPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVBBRC1CTE9DS0lORzpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUEFEX0JMT0NLSU5HPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5pcyBwYWQgY3VycmVudGx5IGJsb2NraW5nIG9uIGEgYnVmZmVyIG9yIGV2ZW50Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUEFELU5FRUQtUkVDT05GSUdVUkU6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BBRF9ORUVEX1JFQ09ORklHVVJFPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGFkIHNob3VsZCBiZSByZWNvbmZpZ3VyZWQvcmVuZWdvdGlhdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZsYWcgaGFzIHRvIGJlIHVuc2V0IG1hbnVhbGx5IGFmdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvbmZpZ3VyYXRpb24gaGFwcGVuZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTaW5jZTogMC4xMC4zNC4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1QQUQtTkVFRC1FVkVOVFM6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BBRF9ORUVEX0VWRU5UUzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBhZCBoYXMgcGVuZGluZyBldmVudHMKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1QQUQtRklYRUQtQ0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BBRF9GSVhFRF9DQVBTPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGFkIGlzIHVzaW5nIGZpeGVkIGNhcHMgdGhpcyBtZWFucyB0aGF0IG9uY2UgdGhlCisgICAgICAgICAgICAgICAgICAgICBjYXBzIGFyZSBzZXQgb24gdGhlIHBhZCwgdGhlIGdldGNhcHMgZnVuY3Rpb24gb25seQorICAgICAgICAgICAgICAgICAgICAgcmV0dXJucyB0aG9zZSBjYXBzLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVBBRC1GTEFHLUxBU1Q6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BBRF9GTEFHX0xBU1Q8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPm9mZnNldCB0byBkZWZpbmUgbW9yZSBmbGFncworPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UGFkTGlua1JldHVybiI+PC9hPjxoMz5lbnVtIEdzdFBhZExpbmtSZXR1cm48L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9QQURfTElOS19PSyAgICAgICAgICAgICAgID0gIDAsCisgIEdTVF9QQURfTElOS19XUk9OR19ISUVSQVJDSFkgID0gLTEsCisgIEdTVF9QQURfTElOS19XQVNfTElOS0VEICAgICAgID0gLTIsCisgIEdTVF9QQURfTElOS19XUk9OR19ESVJFQ1RJT04gID0gLTMsCisgIEdTVF9QQURfTElOS19OT0ZPUk1BVCAgICAgICAgID0gLTQsCisgIEdTVF9QQURfTElOS19OT1NDSEVEICAgICAgICAgID0gLTUsCisgIEdTVF9QQURfTElOS19SRUZVU0VEICAgICAgICAgID0gLTYKK30gR3N0UGFkTGlua1JldHVybjsKKzwvcHJlPgorPHA+CitSZXN1bHQgdmFsdWVzIGZyb20gZ3N0X3BhZF9saW5rIGFuZCBmcmllbmRzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUEFELUxJTkstT0s6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BBRF9MSU5LX09LPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5saW5rIHN1Y2NlZWRlZAorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVBBRC1MSU5LLVdST05HLUhJRVJBUkNIWTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUEFEX0xJTktfV1JPTkdfSElFUkFSQ0hZPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wYWRzIGhhdmUgbm8gY29tbW9uIGdyYW5kcGFyZW50Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUEFELUxJTkstV0FTLUxJTktFRDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUEFEX0xJTktfV0FTX0xJTktFRDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cGFkIHdhcyBhbHJlYWR5IGxpbmtlZAorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVBBRC1MSU5LLVdST05HLURJUkVDVElPTjpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUEFEX0xJTktfV1JPTkdfRElSRUNUSU9OPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wYWRzIGhhdmUgd3JvbmcgZGlyZWN0aW9uCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUEFELUxJTkstTk9GT1JNQVQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BBRF9MSU5LX05PRk9STUFUPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wYWRzIGRvIG5vdCBoYXZlIGNvbW1vbiBmb3JtYXQKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1QQUQtTElOSy1OT1NDSEVEOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9QQURfTElOS19OT1NDSEVEPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wYWRzIGNhbm5vdCBjb29wZXJhdGUgaW4gc2NoZWR1bGluZworPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVBBRC1MSU5LLVJFRlVTRUQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BBRF9MSU5LX1JFRlVTRUQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnJlZnVzZWQgZm9yIHNvbWUgcmVhc29uCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtUEFELUxJTkstRkFJTEVEOkNBUFMiPjwvYT48aDM+R1NUX1BBRF9MSU5LX0ZBSUxFRCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QQURfTElOS19GQUlMRUQocmV0KSAoKHJldCkgJmx0OyBHU1RfUEFEX0xJTktfT0spCis8L3ByZT4KKzxwPgorTWFjcm8gdG8gdGVzdCBpZiB0aGUgZ2l2ZW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZExpbmtSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdFBhZExpbmtSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRMaW5rUmV0dXJuPC9zcGFuPjwvYT4gdmFsdWUgaW5kaWNhdGVzIGEgZmFpbGVkCitsaW5rIHN0ZXAuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZExpbmtSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdFBhZExpbmtSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRMaW5rUmV0dXJuPC9zcGFuPjwvYT4gdmFsdWU8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVBBRC1MSU5LLVNVQ0NFU1NGVUw6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX0xJTktfU1VDQ0VTU0ZVTCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QQURfTElOS19TVUNDRVNTRlVMKHJldCkgKChyZXQpICZndDs9IEdTVF9QQURfTElOS19PSykKKzwvcHJlPgorPHA+CitNYWNybyB0byB0ZXN0IGlmIHRoZSBnaXZlbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkTGlua1JldHVybiIgdGl0bGU9ImVudW0gR3N0UGFkTGlua1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZExpbmtSZXR1cm48L3NwYW4+PC9hPiB2YWx1ZSBpbmRpY2F0ZXMgYSBzdWNjZXNzZnVsCitsaW5rIHN0ZXAuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZExpbmtSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdFBhZExpbmtSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRMaW5rUmV0dXJuPC9zcGFuPjwvYT4gdmFsdWU8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UGFkTGlua0NoZWNrIj48L2E+PGgzPmVudW0gR3N0UGFkTGlua0NoZWNrPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGVudW0geworICBHU1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORyAgICAgICA9IDAsCisgIEdTVF9QQURfTElOS19DSEVDS19ISUVSQVJDSFkgICAgID0gMSAmbHQ7Jmx0OyAwLAorICBHU1RfUEFEX0xJTktfQ0hFQ0tfVEVNUExBVEVfQ0FQUyA9IDEgJmx0OyZsdDsgMSwKKyAgR1NUX1BBRF9MSU5LX0NIRUNLX0NBUFMgICAgICAgICAgPSAxICZsdDsmbHQ7IDIKK30gR3N0UGFkTGlua0NoZWNrOworPC9wcmU+Cis8cD4KK1RoZSBhbW91bnQgb2YgY2hlY2tpbmcgdG8gYmUgZG9uZSB3aGVuIGxpbmtpbmcgcGFkcy4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPkdTVF9QQURfTElOS19DSEVDS19DQVBTPC9jb2RlPjwvZW0+CithbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPkdTVF9QQURfTElOS19DSEVDS19URU1QTEFURV9DQVBTPC9jb2RlPjwvZW0+IGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIElmIGJvdGggYXJlCitzcGVjaWZpZWQsIGV4cGVuc2l2ZSBidXQgc2FmZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+R1NUX1BBRF9MSU5LX0NIRUNLX0NBUFM8L2NvZGU+PC9lbT4gYXJlIHBlcmZvcm1lZC4KKzwvcD4KKzxwPgorPC9wPgorPGRpdiBjbGFzcz0id2FybmluZyIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPgorPGgzIGNsYXNzPSJ0aXRsZSI+V2FybmluZzwvaDM+Cis8cD4KK09ubHkgZGlzYWJsZSBzb21lIG9mIHRoZSBjaGVja3MgaWYgeW91IGFyZSAxMDAlIGNlcnRhaW4geW91IGtub3cgdGhlIGxpbmsKK3dpbGwgbm90IGZhaWwgYmVjYXVzZSBvZiBoaWVyYXJjaHkvY2FwcyBjb21wYXRpYmlsaXR5IGZhaWx1cmVzLiBJZiB1bmNlcnRhaW4sCit1c2UgdGhlIGRlZmF1bHQgY2hlY2tzICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1MSU5LLUNIRUNLLURFRkFVTFQ6Q0FQUyIgdGl0bGU9IkdTVF9QQURfTElOS19DSEVDS19ERUZBVUxUIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BBRF9MSU5LX0NIRUNLX0RFRkFVTFQ8L2NvZGU+PC9hPikgb3IgdGhlIHJlZ3VsYXIgbWV0aG9kcworZm9yIGxpbmtpbmcgdGhlIHBhZHMuCis8L3A+Cis8L2Rpdj4KKzxwPgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUEFELUxJTkstQ0hFQ0stTk9USElORzpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+RG9uJ3QgY2hlY2sgaGllcmFyY2h5IG9yIGNhcHMgY29tcGF0aWJpbGl0eS4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1QQUQtTElOSy1DSEVDSy1ISUVSQVJDSFk6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BBRF9MSU5LX0NIRUNLX0hJRVJBUkNIWTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Q2hlY2sgdGhlIHBhZHMgaGF2ZSBzYW1lIHBhcmVudHMvZ3JhbmRwYXJlbnRzLgorICBDb3VsZCBiZSBvbWl0dGVkIGlmIGl0IGlzIGFscmVhZHkga25vd24gdGhhdCB0aGUgdHdvIGVsZW1lbnRzIHRoYXQgb3duIHRoZQorICBwYWRzIGFyZSBpbiB0aGUgc2FtZSBiaW4uCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUEFELUxJTkstQ0hFQ0stVEVNUExBVEUtQ0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BBRF9MSU5LX0NIRUNLX1RFTVBMQVRFX0NBUFM8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPkNoZWNrIGlmIHRoZSBwYWRzIGFyZSBjb21wYXRpYmxlIGJ5IHVzaW5nCisgIHRoZWlyIHRlbXBsYXRlIGNhcHMuIFRoaXMgaXMgbXVjaCBmYXN0ZXIgdGhhbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+R1NUX1BBRF9MSU5LX0NIRUNLX0NBUFM8L2NvZGU+PC9lbT4sIGJ1dAorICB3b3VsZCBiZSB1bnNhZmUgZS5nLiBpZiBvbmUgcGFkIGhhcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHU1QtQ0FQUy1BTlk6Q0FQUyIgdGl0bGU9IkdTVF9DQVBTX0FOWSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9DQVBTX0FOWTwvY29kZT48L2E+LgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVBBRC1MSU5LLUNIRUNLLUNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9QQURfTElOS19DSEVDS19DQVBTPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5DaGVjayBpZiB0aGUgcGFkcyBhcmUgY29tcGF0aWJsZSBieSBjb21wYXJpbmcgdGhlCisgIGNhcHMgcmV0dXJuZWQgYnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LWNhcHMiIHRpdGxlPSJnc3RfcGFkX2dldF9jYXBzICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfZ2V0X2NhcHMoKTwvY29kZT48L2E+LgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVBBRC1MSU5LLUNIRUNLLURFRkFVTFQ6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX0xJTktfQ0hFQ0tfREVGQVVMVDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX0xJTktfQ0hFQ0tfREVGQVVMVCAoKEdzdFBhZExpbmtDaGVjaykgKEdTVF9QQURfTElOS19DSEVDS19ISUVSQVJDSFkgfCBHU1RfUEFEX0xJTktfQ0hFQ0tfQ0FQUykpCis8L3ByZT4KKzxwPgorVGhlIGRlZmF1bHQgY2hlY2tzIGRvbmUgd2hlbiBsaW5raW5nIHBhZHMgKGkuZS4gdGhlIG9uZXMgdXNlZCBieQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtbGluayIgdGl0bGU9ImdzdF9wYWRfbGluayAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX2xpbmsoKTwvY29kZT48L2E+KS4KKzwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0Rmxvd1JldHVybiI+PC9hPjxoMz5lbnVtIEdzdEZsb3dSZXR1cm48L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIC8qIGN1c3RvbSBzdWNjZXNzIHN0YXJ0cyBoZXJlICovCisgIEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTXzIgPSAxMDIsCisgIEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTXzEgPSAxMDEsCisgIEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTID0gMTAwLAorCisgIC8qIGNvcmUgcHJlZGVmaW5lZCAqLworICBHU1RfRkxPV19SRVNFTkQJICA9ICAxLAorICBHU1RfRkxPV19PSwkJICA9ICAwLAorICAvKiBleHBlY3RlZCBmYWlsdXJlcyAqLworICBHU1RfRkxPV19OT1RfTElOS0VEICAgICA9IC0xLAorICBHU1RfRkxPV19XUk9OR19TVEFURSAgICA9IC0yLAorICAvKiBlcnJvciBjYXNlcyAqLworICBHU1RfRkxPV19VTkVYUEVDVEVEICAgICA9IC0zLAorICBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRCA9IC00LAorICBHU1RfRkxPV19FUlJPUgkgID0gLTUsCisgIEdTVF9GTE9XX05PVF9TVVBQT1JURUQgID0gLTYsCisKKyAgLyogY3VzdG9tIGVycm9yIHN0YXJ0cyBoZXJlICovCisgIEdTVF9GTE9XX0NVU1RPTV9FUlJPUiAgID0gLTEwMCwKKyAgR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SXzEgPSAtMTAxLAorICBHU1RfRkxPV19DVVNUT01fRVJST1JfMiA9IC0xMDIKK30gR3N0Rmxvd1JldHVybjsKKzwvcHJlPgorPHA+CitUaGUgcmVzdWx0IG9mIHBhc3NpbmcgZGF0YSB0byBhIHBhZC4KKzwvcD4KKzxwPgorTm90ZSB0aGF0IHRoZSBjdXN0b20gcmV0dXJuIHZhbHVlcyBzaG91bGQgbm90IGJlIGV4cG9zZWQgb3V0c2lkZSBvZiB0aGUKK2VsZW1lbnQgc2NvcGUgYW5kIGFyZSBhdmFpbGFibGUgc2luY2UgMC4xMC43LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtRkxPVy1DVVNUT00tU1VDQ0VTUy0yOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTXzI8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPlByZS1kZWZpbmVkIGN1c3RvbSBzdWNjZXNzIGNvZGUuIFNpbmNlIDAuMTAuMjkuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtRkxPVy1DVVNUT00tU1VDQ0VTUy0xOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTXzE8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPlByZS1kZWZpbmVkIGN1c3RvbSBzdWNjZXNzIGNvZGUgKGRlZmluZSB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b20gc3VjY2VzcyBjb2RlIHRvIHRoaXMgdG8gYXZvaWQgY29tcGlsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzKS4gU2luY2UgMC4xMC4yOS4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1GTE9XLUNVU1RPTS1TVUNDRVNTOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5FbGVtZW50cyBjYW4gdXNlIHZhbHVlcyBzdGFydGluZyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIChhbmQgaGlnaGVyKSB0byBkZWZpbmUgY3VzdG9tIHN1Y2Nlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzLiBTaW5jZSAwLjEwLjcuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtRkxPVy1SRVNFTkQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0ZMT1dfUkVTRU5EPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5SZXNlbmQgYnVmZmVyLCBwb3NzaWJseSB3aXRoIG5ldyBjYXBzIChub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VudCB5ZXQpICh1bnVzZWQvdW5pbXBsZW1lbnRlZCkuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtRkxPVy1PSzpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRkxPV19PSzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+RGF0YSBwYXNzaW5nIHdhcyBvay4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1GTE9XLU5PVC1MSU5LRUQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0ZMT1dfTk9UX0xJTktFRDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UGFkIGlzIG5vdCBsaW5rZWQuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtRkxPVy1XUk9ORy1TVEFURTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRkxPV19XUk9OR19TVEFURTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UGFkIGlzIGluIHdyb25nIHN0YXRlLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUZMT1ctVU5FWFBFQ1RFRDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRkxPV19VTkVYUEVDVEVEPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5EaWQgbm90IGV4cGVjdCBhbnl0aGluZywgbGlrZSBhZnRlciBFT1MuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtRkxPVy1OT1QtTkVHT1RJQVRFRDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRkxPV19OT1RfTkVHT1RJQVRFRDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UGFkIGlzIG5vdCBuZWdvdGlhdGVkLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUZMT1ctRVJST1I6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0ZMT1dfRVJST1I8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPlNvbWUgKGZhdGFsKSBlcnJvciBvY2N1cmVkLiBFbGVtZW50IGdlbmVyYXRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgZXJyb3Igc2hvdWxkIHBvc3QgYW4gZXJyb3IgbWVzc2FnZSB3aXRoIG1vcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHMuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtRkxPVy1OT1QtU1VQUE9SVEVEOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9GTE9XX05PVF9TVVBQT1JURUQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtRkxPVy1DVVNUT00tRVJST1I6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0ZMT1dfQ1VTVE9NX0VSUk9SPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5FbGVtZW50cyBjYW4gdXNlIHZhbHVlcyBzdGFydGluZyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIChhbmQgbG93ZXIpIHRvIGRlZmluZSBjdXN0b20gZXJyb3IgY29kZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaW5jZSAwLjEwLjcuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtRkxPVy1DVVNUT00tRVJST1ItMTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRkxPV19DVVNUT01fRVJST1JfMTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UHJlLWRlZmluZWQgY3VzdG9tIGVycm9yIGNvZGUgKGRlZmluZSB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b20gZXJyb3IgY29kZSB0byB0aGlzIHRvIGF2b2lkIGNvbXBpbGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncykuIFNpbmNlIDAuMTAuMjkuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtRkxPVy1DVVNUT00tRVJST1ItMjpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRkxPV19DVVNUT01fRVJST1JfMjwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UHJlLWRlZmluZWQgY3VzdG9tIGVycm9yIGNvZGUuIFNpbmNlIDAuMTAuMjkuCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RBY3RpdmF0ZU1vZGUiPjwvYT48aDM+ZW51bSBHc3RBY3RpdmF0ZU1vZGU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9BQ1RJVkFURV9OT05FLAorICBHU1RfQUNUSVZBVEVfUFVTSCwKKyAgR1NUX0FDVElWQVRFX1BVTEwKK30gR3N0QWN0aXZhdGVNb2RlOworPC9wcmU+Cis8cD4KK1RoZSBzdGF0dXMgb2YgYSBHc3RQYWQuIEFmdGVyIGFjdGl2YXRpbmcgYSBwYWQsIHdoaWNoIHVzdWFsbHkgaGFwcGVucyB3aGVuIHRoZQorcGFyZW50IGVsZW1lbnQgZ29lcyBmcm9tIFJFQURZIHRvIFBBVVNFRCwgdGhlIEdzdEFjdGl2YXRlTW9kZSBkZWZpbmVzIGlmIHRoZQorcGFkIG9wZXJhdGVzIGluIHB1c2ggb3IgcHVsbCBtb2RlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQUNUSVZBVEUtTk9ORTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQUNUSVZBVEVfTk9ORTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UGFkIHdpbGwgbm90IGhhbmRsZSBkYXRhZmxvdworPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUFDVElWQVRFLVBVU0g6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0FDVElWQVRFX1BVU0g8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPlBhZCBoYW5kbGVzIGRhdGFmbG93IGluIGRvd25zdHJlYW0gcHVzaCBtb2RlCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQUNUSVZBVEUtUFVMTDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQUNUSVZBVEVfUFVMTDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UGFkIGhhbmRsZXMgZGF0YWZsb3cgaW4gdXBzdHJlYW0gcHVsbCBtb2RlCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RQcm9iZVJldHVybiI+PC9hPjxoMz5lbnVtIEdzdFByb2JlUmV0dXJuPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGVudW0geworICBHU1RfUFJPQkVfRFJPUCwKKyAgR1NUX1BST0JFX09LLAorICBHU1RfUFJPQkVfUkVNT1ZFLAorICBHU1RfUFJPQkVfUEFTUywKK30gR3N0UHJvYmVSZXR1cm47Cis8L3ByZT4KKzxwPgorRGlmZmVyZW50IHJldHVybiB2YWx1ZXMgZm9yIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkUHJvYmVDYWxsYmFjayIgdGl0bGU9IkdzdFBhZFByb2JlQ2FsbGJhY2sgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRQcm9iZUNhbGxiYWNrPC9zcGFuPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1QUk9CRS1EUk9QOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9QUk9CRV9EUk9QPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5kcm9wIGRhdGEgaW4gZGF0YSBwcm9iZXMKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1QUk9CRS1PSzpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUFJPQkVfT0s8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPm5vcm1hbCBwcm9iZSByZXR1cm4gdmFsdWUKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1QUk9CRS1SRU1PVkU6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BST0JFX1JFTU9WRTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cmVtb3ZlIHByb2JlCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUFJPQkUtUEFTUzpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUFJPQkVfUEFTUzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cGFzcyB0aGUgZGF0YSBpdGVtIGluIHRoZSBibG9jayBwcm9iZSBhbmQgYmxvY2sgb24KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBuZXh0IGl0ZW0KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFByb2JlVHlwZSI+PC9hPjxoMz5lbnVtIEdzdFByb2JlVHlwZTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBlbnVtIHsKKyAgR1NUX1BST0JFX1RZUEVfSU5WQUxJRCAgICAgID0gMCwKKyAgLyogZmxhZ3MgdG8gY29udHJvbCBibG9ja2luZyAqLworICBHU1RfUFJPQkVfVFlQRV9JRExFICAgICAgICAgPSAoMSAmbHQ7Jmx0OyAwKSwKKyAgR1NUX1BST0JFX1RZUEVfQkxPQ0sgICAgICAgID0gKDEgJmx0OyZsdDsgMSksCisgIC8qIGZsYWdzIHRvIHNlbGVjdCBkYXRhdHlwZXMgKi8KKyAgR1NUX1BST0JFX1RZUEVfQlVGRkVSICAgICAgID0gKDEgJmx0OyZsdDsgMiksCisgIEdTVF9QUk9CRV9UWVBFX0JVRkZFUl9MSVNUICA9ICgxICZsdDsmbHQ7IDMpLAorICBHU1RfUFJPQkVfVFlQRV9FVkVOVCAgICAgICAgPSAoMSAmbHQ7Jmx0OyA0KSwKKyAgLyogZmxhZ3MgdG8gc2VsZWN0IHNjaGVkdWxpbmcgbW9kZSAqLworICBHU1RfUFJPQkVfVFlQRV9QVVNIICAgICAgICAgPSAoMSAmbHQ7Jmx0OyA1KSwKKyAgR1NUX1BST0JFX1RZUEVfUFVMTCAgICAgICAgID0gKDEgJmx0OyZsdDsgNiksCit9IEdzdFByb2JlVHlwZTsKKzwvcHJlPgorPHA+CitUaGUgZGlmZmVyZW50IHByb2JpbmcgdHlwZXMgdGhhdCBjYW4gb2NjdXIuIFdoZW4gZWl0aGVyIG9uZSBvZgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPkdTVF9QUk9CRV9UWVBFX0lETEU8L2NvZGU+PC9lbT4gb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPkdTVF9QUk9CRV9UWVBFX0JMT0NLPC9jb2RlPjwvZW0+IGlzIHVzZWQsIHRoZSBwcm9iZSB3aWxsIGJlIGEKK2Jsb2NraW5nIHByb2JlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUFJPQkUtVFlQRS1JTlZBTElEOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9QUk9CRV9UWVBFX0lOVkFMSUQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmludmFsaWQgcHJvYmUgdHlwZQorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVBST0JFLVRZUEUtSURMRTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUFJPQkVfVFlQRV9JRExFPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wcm9iZSBpZGxlIHBhZHMgYW5kIGJsb2NrCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUFJPQkUtVFlQRS1CTE9DSzpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUFJPQkVfVFlQRV9CTE9DSzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cHJvYmUgYW5kIGJsb2NrIHBhZHMKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1QUk9CRS1UWVBFLUJVRkZFUjpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUFJPQkVfVFlQRV9CVUZGRVI8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnByb2JlIGJ1ZmZlcnMKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1QUk9CRS1UWVBFLUJVRkZFUi1MSVNUOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9QUk9CRV9UWVBFX0JVRkZFUl9MSVNUPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wcm9iZSBidWZmZXIgbGlzdHMKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1QUk9CRS1UWVBFLUVWRU5UOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9QUk9CRV9UWVBFX0VWRU5UPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wcm9iZSBldmVudHMKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1QUk9CRS1UWVBFLVBVU0g6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BST0JFX1RZUEVfUFVTSDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cHJvYmUgcHVzaAorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVBST0JFLVRZUEUtUFVMTDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUFJPQkVfVFlQRV9QVUxMPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wcm9iZSBwdWxsCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtUFJPQkUtVFlQRS1CTE9DS0lORzpDQVBTIj48L2E+PGgzPkdTVF9QUk9CRV9UWVBFX0JMT0NLSU5HPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QUk9CRV9UWVBFX0JMT0NLSU5HICAgKEdTVF9QUk9CRV9UWVBFX0lETEUgfCBHU1RfUFJPQkVfVFlQRV9CTE9DSykKKzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtUFJPQkUtVFlQRS1EQVRBOkNBUFMiPjwvYT48aDM+R1NUX1BST0JFX1RZUEVfREFUQTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfUFJPQkVfVFlQRV9EQVRBPC9wcmU+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1QUk9CRS1UWVBFLVNDSEVEVUxJTkc6Q0FQUyI+PC9hPjxoMz5HU1RfUFJPQkVfVFlQRV9TQ0hFRFVMSU5HPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QUk9CRV9UWVBFX1NDSEVEVUxJTkcgKEdTVF9QUk9CRV9UWVBFX1BVU0ggfCBHU1RfUFJPQkVfVFlQRV9QVUxMKQorPC9wcmU+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtZ2V0LW5hbWUiPjwvYT48aDM+Z3N0X3BhZF9nZXRfbmFtZSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIGdzdF9wYWRfZ2V0X25hbWUocGFkKSBnc3Rfb2JqZWN0X2dldF9uYW1lIChHU1RfT0JKRUNUX0NBU1QgKHBhZCkpCis8L3ByZT4KKzxwPgorR2V0IGEgY29weSBvZiB0aGUgbmFtZSBvZiB0aGUgcGFkLiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLU1lbW9yeS1BbGxvY2F0aW9uLmh0bWwjZy1mcmVlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfZnJlZSgpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNhZ2UuCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGFkIHRvIGdldCB0aGUgbmFtZSBmcm9tPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtZ2V0LWRpcmVjdGlvbiI+PC9hPjxoMz5nc3RfcGFkX2dldF9kaXJlY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWREaXJlY3Rpb24iIHRpdGxlPSJlbnVtIEdzdFBhZERpcmVjdGlvbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWREaXJlY3Rpb248L3NwYW4+PC9hPiAgICAgZ3N0X3BhZF9nZXRfZGlyZWN0aW9uICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBwYWQuIFRoZSBkaXJlY3Rpb24gb2YgdGhlIHBhZCBpcworZGVjaWRlZCBhdCBjb25zdHJ1Y3Rpb24gdGltZSBzbyB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRha2UKK3RoZSBMT0NLLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgZGlyZWN0aW9uIG9mLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRGlyZWN0aW9uIiB0aXRsZT0iZW51bSBHc3RQYWREaXJlY3Rpb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWREaXJlY3Rpb248L3NwYW4+PC9hPiBvZiB0aGUgcGFkLgorTVQgc2FmZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFkLWdldC1wYXJlbnQiPjwvYT48aDM+Z3N0X3BhZF9nZXRfcGFyZW50KCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgZ3N0X3BhZF9nZXRfcGFyZW50KHBhZCkgZ3N0X29iamVjdF9nZXRfcGFyZW50IChHU1RfT0JKRUNUX0NBU1QgKHBhZCkpCis8L3ByZT4KKzxwPgorR2V0IHRoZSBwYXJlbnQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPi4gVGhpcyBmdW5jdGlvbiBpbmNyZWFzZXMgdGhlIHJlZmNvdW50CitvZiB0aGUgcGFyZW50IG9iamVjdCBzbyB5b3Ugc2hvdWxkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucmVmIiB0aXRsZT0iZ3N0X29iamVjdF91bnJlZiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X3VucmVmKCk8L2NvZGU+PC9hPiBpdCBhZnRlciB1c2FnZS4KK0NhbiByZXR1cm4gTlVMTCBpZiB0aGUgcGFkIGRpZCBub3QgaGF2ZSBhIHBhcmVudC4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwYWQgdG8gZ2V0IHRoZSBwYXJlbnQgb2Y8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1nZXQtcGFyZW50LWVsZW1lbnQiPjwvYT48aDM+Z3N0X3BhZF9nZXRfcGFyZW50X2VsZW1lbnQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqICAgICAgICBnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudCAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXRzIHRoZSBwYXJlbnQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPiwgY2FzdCB0byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+LiBJZiBhIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4gaGFzIG5vIHBhcmVudCBvcgoraXRzIHBhcmVudCBpcyBub3QgYW4gZWxlbWVudCwgcmV0dXJuIE5VTEwuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgcGFkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBhcmVudCBvZiB0aGUgcGFkLiBUaGUgY2FsbGVyIGhhcyBhCityZWZlcmVuY2Ugb24gdGhlIHBhcmVudCwgc28gdW5yZWYgd2hlbiB5b3UncmUgZmluaXNoZWQgd2l0aCBpdC4KK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFkLWdldC1wYWQtdGVtcGxhdGUiPjwvYT48aDM+Z3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKiAgICBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGUgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXRzIHRoZSB0ZW1wbGF0ZSBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4gZnJvbSB3aGljaCB0aGlzIHBhZCB3YXMKK2luc3RhbnRpYXRlZCwgb3IgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgdGhpcyBwYWQgaGFzIG5vIHRlbXBsYXRlLiBVbnJlZiBhZnRlcgordXNhZ2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFkLWxpbmsiPjwvYT48aDM+Z3N0X3BhZF9saW5rICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkTGlua1JldHVybiIgdGl0bGU9ImVudW0gR3N0UGFkTGlua1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWRMaW5rUmV0dXJuPC9zcGFuPjwvYT4gICAgZ3N0X3BhZF9saW5rICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqc3JjcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpzaW5rcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorTGlua3MgdGhlIHNvdXJjZSBwYWQgYW5kIHRoZSBzaW5rIHBhZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmNwYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNvdXJjZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBsaW5rLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2lua3BhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2luayA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBsaW5rLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgcmVzdWx0IGNvZGUgaW5kaWNhdGluZyBpZiB0aGUgY29ubmVjdGlvbiB3b3JrZWQgb3IKK3doYXQgd2VudCB3cm9uZy4KK01UIFNhZmUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1saW5rLWZ1bGwiPjwvYT48aDM+Z3N0X3BhZF9saW5rX2Z1bGwgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRMaW5rUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RQYWRMaW5rUmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZExpbmtSZXR1cm48L3NwYW4+PC9hPiAgICBnc3RfcGFkX2xpbmtfZnVsbCAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpzcmNwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnNpbmtwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZExpbmtDaGVjayIgdGl0bGU9ImVudW0gR3N0UGFkTGlua0NoZWNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkTGlua0NoZWNrPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitMaW5rcyB0aGUgc291cmNlIHBhZCBhbmQgdGhlIHNpbmsgcGFkLgorPC9wPgorPHA+CitUaGlzIHZhcmlhbnQgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtbGluayIgdGl0bGU9ImdzdF9wYWRfbGluayAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzdF9wYWRfbGluazwvc3Bhbj48L2E+IHByb3ZpZGVzIGEgbW9yZSBncmFudWxhciBjb250cm9sIG9uIHRoZQorY2hlY2tzIGJlaW5nIGRvbmUgd2hlbiBsaW5raW5nLiBXaGlsZSBwcm92aWRpbmcgc29tZSBjb25zaWRlcmFibGUgc3BlZWR1cHMKK3RoZSBjYWxsZXIgb2YgdGhpcyBtZXRob2QgbXVzdCBiZSBhd2FyZSB0aGF0IHdyb25nIHVzYWdlIG9mIHRob3NlIGZsYWdzCitjYW4gY2F1c2Ugc2V2ZXJlIGlzc3Vlcy4gUmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZExpbmtDaGVjayIgdGl0bGU9ImVudW0gR3N0UGFkTGlua0NoZWNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkTGlua0NoZWNrPC9zcGFuPjwvYT4KK2ZvciBtb3JlIGluZm9ybWF0aW9uLgorPC9wPgorPHA+CitNVCBTYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyY3BhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc291cmNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGxpbmsuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaW5rcGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzaW5rIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGxpbmsuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY2hlY2tzIHRvIHZhbGlkYXRlIHdoZW4gbGlua2luZzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgcmVzdWx0IGNvZGUgaW5kaWNhdGluZyBpZiB0aGUgY29ubmVjdGlvbiB3b3JrZWQgb3IKK3doYXQgd2VudCB3cm9uZy48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFkLXVubGluayI+PC9hPjxoMz5nc3RfcGFkX3VubGluayAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfcGFkX3VubGluayAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpzcmNwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnNpbmtwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitVbmxpbmtzIHRoZSBzb3VyY2UgcGFkIGZyb20gdGhlIHNpbmsgcGFkLiBXaWxsIGVtaXQgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWQtdW5saW5rZWQiIHRpdGxlPSdUaGUgInVubGlua2VkIiBzaWduYWwnPjxzcGFuIGNsYXNzPSJ0eXBlIj4idW5saW5rZWQiPC9zcGFuPjwvYT4KK3NpZ25hbCBvbiBib3RoIHBhZHMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjcGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzb3VyY2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gdW5saW5rLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2lua3BhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2luayA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byB1bmxpbmsuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiB0aGUgcGFkcyB3ZXJlIHVubGlua2VkLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgRkFMU0UgaWYKK3RoZSBwYWRzIHdlcmUgbm90IGxpbmtlZCB0b2dldGhlci4KK01UIHNhZmUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1pcy1saW5rZWQiPjwvYT48aDM+Z3N0X3BhZF9pc19saW5rZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3BhZF9pc19saW5rZWQgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2tzIGlmIGEgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPiBpcyBsaW5rZWQgdG8gYW5vdGhlciBwYWQgb3Igbm90LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wYWQgdG8gY2hlY2s8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBwYWQgaXMgbGlua2VkLCBGQUxTRSBvdGhlcndpc2UuCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtY2FuLWxpbmsiPjwvYT48aDM+Z3N0X3BhZF9jYW5fbGluayAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfcGFkX2Nhbl9saW5rICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpzcmNwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnNpbmtwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDaGVja3MgaWYgdGhlIHNvdXJjZSBwYWQgYW5kIHRoZSBzaW5rIHBhZCBhcmUgY29tcGF0aWJsZSBzbyB0aGV5IGNhbiBiZQorbGlua2VkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyY3BhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc291cmNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2lua3BhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2luayA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBwYWRzIGNhbiBiZSBsaW5rZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1nZXQtY2FwcyI+PC9hPjxoMz5nc3RfcGFkX2dldF9jYXBzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgIGdzdF9wYWRfZ2V0X2NhcHMgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmZpbHRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIGNhcGFiaWxpdGllcyB0aGlzIHBhZCBjYW4gcHJvZHVjZSBvciBjb25zdW1lLgorTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGRvZXNuJ3QgbmVjZXNzYXJpbHkgcmV0dXJuIHRoZSBjYXBzIHNldCBieQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWNhcHMiIHRpdGxlPSJnc3RfcGFkX3NldF9jYXBzICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfc2V0X2NhcHMoKTwvY29kZT48L2E+IC0gdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1jdXJyZW50LWNhcHMiIHRpdGxlPSJnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9nZXRfY3VycmVudF9jYXBzKCk8L2NvZGU+PC9hPiBmb3IgdGhhdCBpbnN0ZWFkLgorZ3N0X3BhZF9nZXRfY2FwcyByZXR1cm5zIGFsbCBwb3NzaWJsZSBjYXBzIGEgcGFkIGNhbiBvcGVyYXRlIHdpdGgsIHVzaW5nCit0aGUgcGFkJ3MgZ2V0X2NhcHMgZnVuY3Rpb247Cit0aGlzIHJldHVybnMgdGhlIHBhZCB0ZW1wbGF0ZSBjYXBzIGlmIG5vdCBleHBsaWNpdGx5IHNldC4KKzwvcD4KKzxwPgorV2hlbiBjYWxsZWQgb24gc2lua3BhZHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpbHRlcjwvY29kZT48L2VtPiBjb250YWlucyB0aGUgY2FwcyB0aGF0Cit1cHN0cmVhbSBjb3VsZCBwcm9kdWNlIGluIHRoZSBvcmRlciBwcmVmZXJyZWQgYnkgdXBzdHJlYW0uIFdoZW4KK2NhbGxlZCBvbiBzcmNwYWRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWx0ZXI8L2NvZGU+PC9lbT4gY29udGFpbnMgdGhlIGNhcHMgYWNjZXB0ZWQgYnkKK2Rvd25zdHJlYW0gaW4gdGhlIHByZWZmZXJlZCBvcmRlci4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpbHRlcjwvY29kZT48L2VtPiBtaWdodCBiZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBidXQKK2lmIGl0IGlzIG5vdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB0aGUgcmV0dXJuZWQgY2FwcyB3aWxsIGJlIGEgc3Vic2V0IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWx0ZXI8L2NvZGU+PC9lbT4uCis8L3A+Cis8cD4KK05vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiB3cml0YWJsZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4sIHVzZQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbWFrZS13cml0YWJsZSIgdGl0bGU9ImdzdF9jYXBzX21ha2Vfd3JpdGFibGUoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2Fwc19tYWtlX3dyaXRhYmxlKCk8L2NvZGU+PC9hPiBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBjYXBzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBnZXQgdGhlIGNhcGFiaWxpdGllcyBvZi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpbHRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zdWdnZXN0ZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjYXBzIG9mIHRoZSBwYWQgd2l0aCBpbmNyZW1lbnRlZCByZWYtY291bnQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1nZXQtY2Fwcy1yZWZmZWQiPjwvYT48aDM+Z3N0X3BhZF9nZXRfY2Fwc19yZWZmZWQoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBnc3RfcGFkX2dldF9jYXBzX3JlZmZlZChwKSAgICAgICAgICAgICBnc3RfcGFkX2dldF9jYXBzKHApCis8L3ByZT4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1nZXQtYWxsb3dlZC1jYXBzIj48L2E+PGgzPmdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwcyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPiAqICAgICAgICAgICBnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHMgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXRzIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGFsbG93ZWQgbWVkaWEgdHlwZXMgdGhhdCBjYW4gZmxvdyB0aHJvdWdoCis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+IGFuZCBpdHMgcGVlci4KKzwvcD4KKzxwPgorVGhlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIGlzIGNhbGN1bGF0ZWQgYXMgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgcmVzdWx0cyBvZgorY2FsbGluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtY2FwcyIgdGl0bGU9ImdzdF9wYWRfZ2V0X2NhcHMgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9nZXRfY2FwcygpPC9jb2RlPjwvYT4gb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPiBhbmQgaXRzIHBlZXIuIFRoZSBjYWxsZXIgb3ducyBhIHJlZmVyZW5jZQorb24gdGhlIHJlc3VsdGluZyBjYXBzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBhbGxvd2VkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBvZiB0aGUgcGFkIGxpbmsuIFVucmVmIHRoZQorY2FwcyB3aGVuIHlvdSBubyBsb25nZXIgbmVlZCBpdC4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIE5VTEwgd2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+CitoYXMgbm8gcGVlci4KK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFkLWdldC1jdXJyZW50LWNhcHMiPjwvYT48aDM+Z3N0X3BhZF9nZXRfY3VycmVudF9jYXBzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgIGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIGNhcGFiaWxpdGllcyBjdXJyZW50bHkgY29uZmlndXJlZCBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+IHdpdGggdGhlIGxhc3QKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtQ0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9FVkVOVF9DQVBTPC9zcGFuPjwvYT4gZXZlbnQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgY3VycmVudCBjYXBhYmlsaXRpZXMgb2YuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGN1cnJlbnQgY2FwcyBvZiB0aGUgcGFkIHdpdGggaW5jcmVtZW50ZWQgcmVmLWNvdW50LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtZ2V0LXBhZC10ZW1wbGF0ZS1jYXBzIj48L2E+PGgzPmdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgIGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIGNhcGFiaWxpdGllcyBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPidzIHRlbXBsYXRlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgdGVtcGxhdGUgY2FwYWJpbGl0aWVzIGZyb20uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBvZiB0aGlzIHBhZCB0ZW1wbGF0ZS4KK1VucmVmIGFmdGVyIHVzYWdlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1zZXQtY2FwcyI+PC9hPjxoMz5nc3RfcGFkX3NldF9jYXBzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9wYWRfc2V0X2NhcHMgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXRzIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhpcyBwYWQuIFRoZSBjYXBzIG11c3QgYmUgZml4ZWQuIEFueSBwcmV2aW91cworY2FwcyBvbiB0aGUgcGFkIHdpbGwgYmUgdW5yZWZmZWQuIFRoaXMgZnVuY3Rpb24gcmVmcyB0aGUgY2FwcyBzbyB5b3Ugc2hvdWxkCit1bnJlZiBpZiBhcyBzb29uIGFzIHlvdSBkb24ndCBuZWVkIGl0IGFueW1vcmUuCitJdCBpcyBwb3NzaWJsZSB0byBzZXQgTlVMTCBjYXBzLCB3aGljaCB3aWxsIG1ha2UgdGhlIHBhZCB1bm5lZ290aWF0ZWQKK2FnYWluLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBzZXQgdGhlIGNhcGFiaWxpdGllcyBvZi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gc2V0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiB0aGUgY2FwcyBjb3VsZCBiZSBzZXQuIEZBTFNFIGlmIHRoZSBjYXBzIHdlcmUgbm90IGZpeGVkCitvciBiYWQgcGFyYW1ldGVycyB3ZXJlIHByb3ZpZGVkIHRvIHRoaXMgZnVuY3Rpb24uCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtZ2V0LXBlZXIiPjwvYT48aDM+Z3N0X3BhZF9nZXRfcGVlciAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+ICogICAgICAgICAgICBnc3RfcGFkX2dldF9wZWVyICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXRzIHRoZSBwZWVyIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4uIFRoaXMgZnVuY3Rpb24gcmVmcyB0aGUgcGVlciBwYWQgc28KK3lvdSBuZWVkIHRvIHVucmVmIGl0IGFmdGVyIHVzZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBnZXQgdGhlIHBlZXIgb2YuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBlZXIgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4uIFVucmVmIGFmdGVyIHVzYWdlLgorTVQgc2FmZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtcGVlci1nZXQtY2FwcyI+PC9hPjxoMz5nc3RfcGFkX3BlZXJfZ2V0X2NhcHMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKiAgICAgICAgICAgZ3N0X3BhZF9wZWVyX2dldF9jYXBzICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqZmlsdGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBwZWVyIGNvbm5lY3RlZCB0byB0aGlzIHBhZC4gU2ltaWxhciB0bworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LWNhcHMiIHRpdGxlPSJnc3RfcGFkX2dldF9jYXBzICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfZ2V0X2NhcHMoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitXaGVuIGNhbGxlZCBvbiBzcmNwYWRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWx0ZXI8L2NvZGU+PC9lbT4gY29udGFpbnMgdGhlIGNhcHMgdGhhdAordXBzdHJlYW0gY291bGQgcHJvZHVjZSBpbiB0aGUgb3JkZXIgcHJlZmVycmVkIGJ5IHVwc3RyZWFtLiBXaGVuCitjYWxsZWQgb24gc2lua3BhZHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpbHRlcjwvY29kZT48L2VtPiBjb250YWlucyB0aGUgY2FwcyBhY2NlcHRlZCBieQorZG93bnN0cmVhbSBpbiB0aGUgcHJlZmZlcmVkIG9yZGVyLiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmlsdGVyPC9jb2RlPjwvZW0+IG1pZ2h0IGJlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGJ1dAoraWYgaXQgaXMgbm90IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHRoZSByZXR1cm5lZCBjYXBzIHdpbGwgYmUgYSBzdWJzZXQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpbHRlcjwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSBjYXBhYmlsaXRpZXMgb2YuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWx0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gZmlsdGVyLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjYXBzIG9mIHRoZSBwZWVyIHBhZCB3aXRoIGluY3JlbWVudGVkIHJlZi1jb3VudC4gVGhpcyBmdW5jdGlvbgorcmV0dXJucyA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB3aGVuIHRoZXJlIGlzIG5vIHBlZXIgcGFkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtcGVlci1nZXQtY2Fwcy1yZWZmZWQiPjwvYT48aDM+Z3N0X3BhZF9wZWVyX2dldF9jYXBzX3JlZmZlZCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIGdzdF9wYWRfcGVlcl9nZXRfY2Fwc19yZWZmZWQocCkgICAgICAgIGdzdF9wYWRfcGVlcl9nZXRfY2FwcyhwKQorPC9wcmU+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtdXNlLWZpeGVkLWNhcHMiPjwvYT48aDM+Z3N0X3BhZF91c2VfZml4ZWRfY2FwcyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcGFkX3VzZV9maXhlZF9jYXBzICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBIGhlbHBlciBmdW5jdGlvbiB5b3UgY2FuIHVzZSB0aGF0IHNldHMgdGhlIEZJWEVEX0NBUFMgZmxhZworVGhpcyB3YXkgdGhlIGRlZmF1bHQgZ2V0Y2FwcyBmdW5jdGlvbiB3aWxsIGFsd2F5cyByZXR1cm4gdGhlIG5lZ290aWF0ZWQgY2Fwcworb3IgaW4gY2FzZSB0aGUgcGFkIGlzIG5vdCBuZWdvdGlhdGVkLCB0aGUgcGFkdGVtcGxhdGUgY2Fwcy4KKzwvcD4KKzxwPgorVXNlIHRoaXMgZnVuY3Rpb24gb24gYSBwYWQgdGhhdCwgb25jZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtY2FwcyIgdGl0bGU9ImdzdF9wYWRfc2V0X2NhcHMgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9zZXRfY2FwcygpPC9jb2RlPjwvYT4gaGFzIGJlZW4gY2FsbGVkCitvbiBpdCwgY2Fubm90IGJlIHJlbmVnb3RpYXRlZCB0byBzb21ldGhpbmcgZWxzZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwYWQgdG8gdXNlPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtaGFzLWN1cnJlbnQtY2FwcyI+PC9hPjxoMz5nc3RfcGFkX2hhc19jdXJyZW50X2NhcHMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3BhZF9oYXNfY3VycmVudF9jYXBzICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2sgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPiBoYXMgY2FwcyBzZXQgb24gaXQgd2l0aCBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtQ0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9FVkVOVF9DQVBTPC9zcGFuPjwvYT4gZXZlbnQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGNoZWNrPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSB3aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4gaGFzIGNhcHMgYXNzb2NpYXRlZCB3aXRoIGl0LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtZ2V0LXN0aWNreS1ldmVudCI+PC9hPjxoMz5nc3RfcGFkX2dldF9zdGlja3lfZXZlbnQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICogICAgICAgICAgZ3N0X3BhZF9nZXRfc3RpY2t5X2V2ZW50ICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudFR5cGUiIHRpdGxlPSJlbnVtIEdzdEV2ZW50VHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50VHlwZTwvc3Bhbj48L2E+IGV2ZW50X3R5cGU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZXR1cm5zIGEgbmV3IHJlZmVyZW5jZSBvZiB0aGUgc3RpY2t5IGV2ZW50IG9mIHR5cGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV2ZW50X3R5cGU8L2NvZGU+PC9lbT4KK2Zyb20gdGhlIGV2ZW50LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSBldmVudCBmcm9tLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnRfdHlwZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50VHlwZSIgdGl0bGU9ImVudW0gR3N0RXZlbnRUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnRUeXBlPC9zcGFuPjwvYT4gdGhhdCBzaG91bGQgYmUgcmV0cmlldmVkLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiBvZiB0eXBlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudF90eXBlPC9jb2RlPjwvZW0+LiBVbnJlZiBhZnRlciB1c2FnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFBhZFN0aWNreUV2ZW50c0ZvcmVhY2hGdW5jdGlvbiI+PC9hPjxoMz5Hc3RQYWRTdGlja3lFdmVudHNGb3JlYWNoRnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiAgICAgICAoKkdzdFBhZFN0aWNreUV2ZW50c0ZvcmVhY2hGdW5jdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2FsbGJhY2sgdXNlZCBieSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zdGlja3ktZXZlbnRzLWZvcmVhY2giIHRpdGxlPSJnc3RfcGFkX3N0aWNreV9ldmVudHNfZm9yZWFjaCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3N0aWNreV9ldmVudHNfZm9yZWFjaCgpPC9jb2RlPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV2ZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzdGlja3kgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB0byBvcHRpb25hbCB1c2VyIGRhdGEuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+R1NUX0ZMT1dfT0sgaWYgdGhlIGl0ZXJhdGlvbiBzaG91bGQgY29udGludWU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFkLXN0aWNreS1ldmVudHMtZm9yZWFjaCI+PC9hPjxoMz5nc3RfcGFkX3N0aWNreV9ldmVudHNfZm9yZWFjaCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+ICAgICAgIGdzdF9wYWRfc3RpY2t5X2V2ZW50c19mb3JlYWNoICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkU3RpY2t5RXZlbnRzRm9yZWFjaEZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkU3RpY2t5RXZlbnRzRm9yZWFjaEZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkU3RpY2t5RXZlbnRzRm9yZWFjaEZ1bmN0aW9uPC9zcGFuPjwvYT4gZm9yZWFjaF9mdW5jPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSXRlcmF0ZXMgYWxsIGFjdGl2ZSBzdGlja3kgZXZlbnRzIG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4gYW5kIGNhbGxzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JlYWNoX2Z1bmM8L2NvZGU+PC9lbT4gZm9yIGV2ZXJ5CitldmVudC4gSWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcmVhY2hfZnVuYzwvY29kZT48L2VtPiByZXR1cm5zIHNvbWV0aGluZyBlbHNlIHRoYW4gR1NUX0ZMT1dfT0sgdGhlIGl0ZXJhdGlvbgoraXMgaW1tZWRpYXRlbHkgc3RvcHBlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIGl0ZXJhdGlvbi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcmVhY2hfZnVuYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZFN0aWNreUV2ZW50c0ZvcmVhY2hGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZFN0aWNreUV2ZW50c0ZvcmVhY2hGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFN0aWNreUV2ZW50c0ZvcmVhY2hGdW5jdGlvbjwvc3Bhbj48L2E+IHRoYXQgc2hvdWxkIGJlIGNhbGxlZCBmb3IgZXZlcnkgZXZlbnQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoZSBjYWxsYmFjayBpcyB2YWxpZCBvbmx5IGR1cmluZyB0aGUgY2FsbCB0byB0aGUgbWV0aG9kLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNjb3BlIGNhbGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgb3B0aW9uYWwgdXNlciBkYXRhLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGlzIHBhcmFtZXRlciBpcyBhICd1c2VyX2RhdGEnLCBmb3IgY2FsbGJhY2tzOyBtYW55IGJpbmRpbmdzIGNhbiBwYXNzIE5VTEwgaGVyZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5jbG9zdXJlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+R1NUX0ZMT1dfT0sgaWYgaXRlcmF0aW9uIHdhcyBzdWNjZXNzZnVsPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1pcy1hY3RpdmUiPjwvYT48aDM+Z3N0X3BhZF9pc19hY3RpdmUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3BhZF9pc19hY3RpdmUgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUXVlcnkgaWYgYSBwYWQgaXMgYWN0aXZlCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBxdWVyeTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHBhZCBpcyBhY3RpdmUuCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtaXMtYmxvY2tlZCI+PC9hPjxoMz5nc3RfcGFkX2lzX2Jsb2NrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3BhZF9pc19ibG9ja2VkICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2tzIGlmIHRoZSBwYWQgaXMgYmxvY2tlZCBvciBub3QuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUKK2xhc3QgcmVxdWVzdGVkIHN0YXRlIG9mIHRoZSBwYWQuIEl0IGlzIG5vdCBjZXJ0YWluIHRoYXQgdGhlIHBhZAoraXMgYWN0dWFsbHkgYmxvY2tpbmcgYXQgdGhpcyBwb2ludCAoc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWlzLWJsb2NraW5nIiB0aXRsZT0iZ3N0X3BhZF9pc19ibG9ja2luZyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX2lzX2Jsb2NraW5nKCk8L2NvZGU+PC9hPikuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBxdWVyeTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHBhZCBpcyBibG9ja2VkLgorTVQgc2FmZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFkLWlzLWJsb2NraW5nIj48L2E+PGgzPmdzdF9wYWRfaXNfYmxvY2tpbmcgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3BhZF9pc19ibG9ja2luZyAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2tzIGlmIHRoZSBwYWQgaXMgYmxvY2tpbmcgb3Igbm90LiBUaGlzIGlzIGEgZ3VhcmFudGVlZCBzdGF0ZQorb2Ygd2hldGhlciB0aGUgcGFkIGlzIGFjdHVhbGx5IGJsb2NraW5nIG9uIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gb3IgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gcXVlcnk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBwYWQgaXMgYmxvY2tpbmcuCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFBhZFByb2JlQ2FsbGJhY2siPjwvYT48aDM+R3N0UGFkUHJvYmVDYWxsYmFjayAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFByb2JlUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RQcm9iZVJldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQcm9iZVJldHVybjwvc3Bhbj48L2E+ICAgICAgKCpHc3RQYWRQcm9iZUNhbGxiYWNrKSAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQcm9iZVR5cGUiIHRpdGxlPSJlbnVtIEdzdFByb2JlVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFByb2JlVHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB0eXBlX2RhdGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDYWxsYmFjayB1c2VkIGJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWFkZC1wcm9iZSIgdGl0bGU9ImdzdF9wYWRfYWRkX3Byb2JlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfYWRkX3Byb2JlKCk8L2NvZGU+PC9hPi4gR2V0cyBjYWxsZWQgdG8gbm90aWZ5IGFib3V0IHRoZSBjdXJyZW50CitibG9ja2luZyB0eXBlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdGhhdCBpcyBibG9ja2VkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjdXJyZW50IHByb2JlIHR5cGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGVfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50eXBlIHNwZWNpZmljIGRhdGE8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZ3BvaW50ZXIgdG8gb3B0aW9uYWwgdXNlciBkYXRhLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtYWRkLXByb2JlIj48L2E+PGgzPmdzdF9wYWRfYWRkX3Byb2JlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3Vsb25nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1bG9uZzwvc3Bhbj48L2E+ICAgICAgICAgICAgICBnc3RfcGFkX2FkZF9wcm9iZSAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFByb2JlVHlwZSIgdGl0bGU9ImVudW0gR3N0UHJvYmVUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UHJvYmVUeXBlPC9zcGFuPjwvYT4gbWFzazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkUHJvYmVDYWxsYmFjayIgdGl0bGU9IkdzdFBhZFByb2JlQ2FsbGJhY2sgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRQcm9iZUNhbGxiYWNrPC9zcGFuPjwvYT4gY2FsbGJhY2s8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1EYXRhc2V0cy5odG1sI0dEZXN0cm95Tm90aWZ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R0Rlc3Ryb3lOb3RpZnk8L3NwYW4+PC9hPiBkZXN0cm95X2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitCZSBub3RpZmllZCBvZiBkaWZmZXJlbnQgc3RhdGVzIG9mIHBhZHMuIFRoZSBwcm92aWRlZCBjYWxsYmFjayBpcyBjYWxsZWQgZm9yCitldmVyeSBzdGF0ZSB0aGF0IG1hdGNoZXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1hc2s8L2NvZGU+PC9lbT4uCis8L3A+Cis8cD4KKzwvcD4KKzxkaXYgY2xhc3M9Im5vdGUiIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij4KKzxoMyBjbGFzcz0idGl0bGUiPk5vdGU8L2gzPgorIFBhZCBwcm9iZSBoYW5kbGVycyBhcmUgb25seSBjYWxsZWQgZm9yIHNvdXJjZSBwYWRzIGluIHB1c2ggbW9kZQorIGFuZCBzaW5rIHBhZHMgaW4gcHVsbCBtb2RlLgorPC9kaXY+Cis8cD4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGFkZCB0aGUgcHJvYmUgdG88L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1hc2s8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHByb2JlIG1hc2s8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhbGxiYWNrPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZFByb2JlQ2FsbGJhY2siIHRpdGxlPSJHc3RQYWRQcm9iZUNhbGxiYWNrICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkUHJvYmVDYWxsYmFjazwvc3Bhbj48L2E+IHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aCBub3RpZmljYXRpb25zIG9mCit0aGUgcGFkIHN0YXRlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhIHBhc3NlZCB0byB0aGUgY2FsbGJhY2suIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoaXMgcGFyYW1ldGVyIGlzIGEgJ3VzZXJfZGF0YScsIGZvciBjYWxsYmFja3M7IG1hbnkgYmluZGluZ3MgY2FuIHBhc3MgTlVMTCBoZXJlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmNsb3N1cmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3Ryb3lfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRGF0YXNldHMuaHRtbCNHRGVzdHJveU5vdGlmeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT4gZm9yIHVzZXJfZGF0YTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFuIGlkIG9yIDAgb24gZXJyb3IuIFRoZSBpZCBjYW4gYmUgdXNlZCB0byByZW1vdmUgdGhlIHByb2JlIHdpdGgKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXJlbW92ZS1wcm9iZSIgdGl0bGU9ImdzdF9wYWRfcmVtb3ZlX3Byb2JlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfcmVtb3ZlX3Byb2JlKCk8L2NvZGU+PC9hPi4KK01UIHNhZmUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1yZW1vdmUtcHJvYmUiPjwvYT48aDM+Z3N0X3BhZF9yZW1vdmVfcHJvYmUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWxvbmciPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWxvbmc8L3NwYW4+PC9hPiBpZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlbW92ZSB0aGUgcHJvYmUgd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWQ8L2NvZGU+PC9lbT4gZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+LgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gd2l0aCB0aGUgcHJvYmU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwcm9iZSBpZCB0byByZW1vdmU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFkLWdldC1vZmZzZXQiPjwvYT48aDM+Z3N0X3BhZF9nZXRfb2Zmc2V0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ2NDwvc3Bhbj48L2E+ICAgICAgICAgICAgICBnc3RfcGFkX2dldF9vZmZzZXQgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgdGhlIG9mZnNldCBhcHBsaWVkIHRvIHRoZSBydW5uaW5nIHRpbWUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPi4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPiBoYXMgdG8gYmUgYSBzb3VyY2UKK3BhZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG9mZnNldC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFkLXNldC1vZmZzZXQiPjwvYT48aDM+Z3N0X3BhZF9zZXRfb2Zmc2V0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9wYWRfc2V0X29mZnNldCAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gb2Zmc2V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0IHRoZSBvZmZzZXQgdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHJ1bm5pbmcgdGltZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgb2Zmc2V0PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1uZXciPjwvYT48aDM+Z3N0X3BhZF9uZXcgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqICAgICAgICAgICAgZ3N0X3BhZF9uZXcgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWREaXJlY3Rpb24iIHRpdGxlPSJlbnVtIEdzdFBhZERpcmVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZERpcmVjdGlvbjwvc3Bhbj48L2E+IGRpcmVjdGlvbjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZXMgYSBuZXcgcGFkIHdpdGggdGhlIGdpdmVuIG5hbWUgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi4KK0lmIG5hbWUgaXMgTlVMTCwgYSBndWFyYW50ZWVkIHVuaXF1ZSBuYW1lIChhY3Jvc3MgYWxsIHBhZHMpCit3aWxsIGJlIGFzc2lnbmVkLgorVGhpcyBmdW5jdGlvbiBtYWtlcyBhIGNvcHkgb2YgdGhlIG5hbWUgc28geW91IGNhbiBzYWZlbHkgZnJlZSB0aGUgbmFtZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuYW1lIG9mIHRoZSBuZXcgcGFkLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGlyZWN0aW9uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRGlyZWN0aW9uIiB0aXRsZT0iZW51bSBHc3RQYWREaXJlY3Rpb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWREaXJlY3Rpb248L3NwYW4+PC9hPiBvZiB0aGUgcGFkLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LCBvciBOVUxMIGluIGNhc2Ugb2YgYW4gZXJyb3IuCitNVCBzYWZlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1uZXctZnJvbS10ZW1wbGF0ZSI+PC9hPjxoMz5nc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkPC9zcGFuPjwvYT4gKiAgICAgICAgICAgIGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKnRlbXBsPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGVzIGEgbmV3IHBhZCB3aXRoIHRoZSBnaXZlbiBuYW1lIGZyb20gdGhlIGdpdmVuIHRlbXBsYXRlLgorSWYgbmFtZSBpcyBOVUxMLCBhIGd1YXJhbnRlZWQgdW5pcXVlIG5hbWUgKGFjcm9zcyBhbGwgcGFkcykKK3dpbGwgYmUgYXNzaWduZWQuCitUaGlzIGZ1bmN0aW9uIG1ha2VzIGEgY29weSBvZiB0aGUgbmFtZSBzbyB5b3UgY2FuIHNhZmVseSBmcmVlIHRoZSBuYW1lLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRlbXBsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwYWQgdGVtcGxhdGUgdG8gdXNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuYW1lIG9mIHRoZSBlbGVtZW50PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4sIG9yIE5VTEwgaW4gY2FzZSBvZiBhbiBlcnJvci4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtbmV3LWZyb20tc3RhdGljLXRlbXBsYXRlIj48L2E+PGgzPmdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkPC9zcGFuPjwvYT4gKiAgICAgICAgICAgIGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0U3RhdGljUGFkVGVtcGxhdGUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RhdGljUGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0aWNQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+ICp0ZW1wbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlcyBhIG5ldyBwYWQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBmcm9tIHRoZSBnaXZlbiBzdGF0aWMgdGVtcGxhdGUuCitJZiBuYW1lIGlzIE5VTEwsIGEgZ3VhcmFudGVlZCB1bmlxdWUgbmFtZSAoYWNyb3NzIGFsbCBwYWRzKQord2lsbCBiZSBhc3NpZ25lZC4KK1RoaXMgZnVuY3Rpb24gbWFrZXMgYSBjb3B5IG9mIHRoZSBuYW1lIHNvIHlvdSBjYW4gc2FmZWx5IGZyZWUgdGhlIG5hbWUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGVtcGw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFN0YXRpY1BhZFRlbXBsYXRlIiB0aXRsZT0ic3RydWN0IEdzdFN0YXRpY1BhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGljUGFkVGVtcGxhdGU8L3NwYW4+PC9hPiB0byB1c2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiwgb3IgTlVMTCBpbiBjYXNlIG9mIGFuIGVycm9yLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1zZXQtY2hhaW4tZnVuY3Rpb24iPjwvYT48aDM+Z3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRDaGFpbkZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkQ2hhaW5GdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZENoYWluRnVuY3Rpb248L3NwYW4+PC9hPiBjaGFpbjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgdGhlIGdpdmVuIGNoYWluIGZ1bmN0aW9uIGZvciB0aGUgcGFkLiBUaGUgY2hhaW4gZnVuY3Rpb24gaXMgY2FsbGVkIHRvCitwcm9jZXNzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gaW5wdXQgYnVmZmVyLiBzZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZENoYWluRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRDaGFpbkZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkQ2hhaW5GdW5jdGlvbjwvc3Bhbj48L2E+IGZvciBtb3JlIGRldGFpbHMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgc2luayA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNoYWluPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkQ2hhaW5GdW5jdGlvbiIgdGl0bGU9IkdzdFBhZENoYWluRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRDaGFpbkZ1bmN0aW9uPC9zcGFuPjwvYT4gdG8gc2V0LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFBhZENoYWluRnVuY3Rpb24iPjwvYT48aDM+R3N0UGFkQ2hhaW5GdW5jdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+ICAgICAgICgqR3N0UGFkQ2hhaW5GdW5jdGlvbikgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIHNpbmtwYWRzIHdoZW4gY2hhaW5pbmcgYnVmZmVycy4KK1RoZSBmdW5jdGlvbiB0eXBpY2FsbHkgcHJvY2Vzc2VzIHRoZSBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgYnVmZmVyIGFuZAorZWl0aGVyIGNvbnN1bWVzIHRoZSBkYXRhIG9yIHBhc3NlcyBpdCBvbiB0byB0aGUgaW50ZXJuYWxseSBsaW5rZWQgcGFkKHMpLgorPC9wPgorPHA+CitUaGUgaW1wbGVtZW50ZXIgb2YgdGhpcyBmdW5jdGlvbiByZWNlaXZlcyBhIHJlZmNvdW50IHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4gYW5kIHNob3VsZAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXVucmVmIiB0aXRsZT0iZ3N0X2J1ZmZlcl91bnJlZiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3VucmVmKCk8L2NvZGU+PC9hPiB3aGVuIHRoZSBidWZmZXIgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKzwvcD4KKzxwPgorV2hlbiBhIGNoYWluIGZ1bmN0aW9uIGRldGVjdHMgYW4gZXJyb3IgaW4gdGhlIGRhdGEgc3RyZWFtLCBpdCBtdXN0IHBvc3QgYW4KK2Vycm9yIG9uIHRoZSBidXMgYW5kIHJldHVybiBhbiBhcHByb3ByaWF0ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiB2YWx1ZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNpbmsgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdGhhdCBwZXJmb3JtZWQgdGhlIGNoYWluLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiB0aGF0IGlzIGNoYWluZWQsIG5vdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1PSzpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0ZMT1dfT0s8L3NwYW4+PC9hPiBmb3Igc3VjY2VzczwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtc2V0LWNoYWluLWxpc3QtZnVuY3Rpb24iPjwvYT48aDM+Z3N0X3BhZF9zZXRfY2hhaW5fbGlzdF9mdW5jdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcGFkX3NldF9jaGFpbl9saXN0X2Z1bmN0aW9uICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZENoYWluTGlzdEZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkQ2hhaW5MaXN0RnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRDaGFpbkxpc3RGdW5jdGlvbjwvc3Bhbj48L2E+IGNoYWlubGlzdDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgdGhlIGdpdmVuIGNoYWluIGxpc3QgZnVuY3Rpb24gZm9yIHRoZSBwYWQuIFRoZSBjaGFpbmxpc3QgZnVuY3Rpb24gaXMKK2NhbGxlZCB0byBwcm9jZXNzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjR3N0QnVmZmVyTGlzdCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4gaW5wdXQgYnVmZmVyIGxpc3QuIFNlZQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZENoYWluTGlzdEZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkQ2hhaW5MaXN0RnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRDaGFpbkxpc3RGdW5jdGlvbjwvc3Bhbj48L2E+IGZvciBtb3JlIGRldGFpbHMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgc2luayA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNoYWlubGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZENoYWluTGlzdEZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkQ2hhaW5MaXN0RnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRDaGFpbkxpc3RGdW5jdGlvbjwvc3Bhbj48L2E+IHRvIHNldC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI0PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RQYWRDaGFpbkxpc3RGdW5jdGlvbiI+PC9hPjxoMz5Hc3RQYWRDaGFpbkxpc3RGdW5jdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+ICAgICAgICgqR3N0UGFkQ2hhaW5MaXN0RnVuY3Rpb24pICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNHc3RCdWZmZXJMaXN0IiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0EgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBzaW5rcGFkcyB3aGVuIGNoYWluaW5nIGJ1ZmZlciBsaXN0cy4KK1RoZSBmdW5jdGlvbiB0eXBpY2FsbHkgcHJvY2Vzc2VzIHRoZSBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgYnVmZmVyIGxpc3QgYW5kCitlaXRoZXIgY29uc3VtZXMgdGhlIGRhdGEgb3IgcGFzc2VzIGl0IG9uIHRvIHRoZSBpbnRlcm5hbGx5IGxpbmtlZCBwYWQocykuCis8L3A+Cis8cD4KK1RoZSBpbXBsZW1lbnRlciBvZiB0aGlzIGZ1bmN0aW9uIHJlY2VpdmVzIGEgcmVmY291bnQgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT4gYW5kCitzaG91bGQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LXVucmVmIiB0aXRsZT0iZ3N0X2J1ZmZlcl9saXN0X3VucmVmICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfbGlzdF91bnJlZigpPC9jb2RlPjwvYT4gd2hlbiB0aGUgbGlzdCBpcyBubyBsb25nZXIgbmVlZGVkLgorPC9wPgorPHA+CitXaGVuIGEgY2hhaW5saXN0IGZ1bmN0aW9uIGRldGVjdHMgYW4gZXJyb3IgaW4gdGhlIGRhdGEgc3RyZWFtLCBpdCBtdXN0Citwb3N0IGFuIGVycm9yIG9uIHRoZSBidXMgYW5kIHJldHVybiBhbiBhcHByb3ByaWF0ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiB2YWx1ZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNpbmsgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdGhhdCBwZXJmb3JtZWQgdGhlIGNoYWluLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjR3N0QnVmZmVyTGlzdCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4gdGhhdCBpcyBjaGFpbmVkLCBub3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULUZMT1ctT0s6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GTE9XX09LPC9zcGFuPjwvYT4gZm9yIHN1Y2Nlc3M8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFkLWdldC1yYW5nZSI+PC9hPjxoMz5nc3RfcGFkX2dldF9yYW5nZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+ICAgICAgIGdzdF9wYWRfZ2V0X3JhbmdlICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICoqYnVmZmVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorV2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+IGlzIGZsdXNoaW5nIHRoaXMgZnVuY3Rpb24gcmV0dXJucyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULUZMT1ctV1JPTkctU1RBVEU6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GTE9XX1dST05HX1NUQVRFPC9zcGFuPjwvYT4KK2ltbWVkaWF0ZWx5IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+IGlzIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LgorPC9wPgorPHA+CitDYWxscyB0aGUgZ2V0cmFuZ2UgZnVuY3Rpb24gb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPiwgc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRHZXRSYW5nZUZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkR2V0UmFuZ2VGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZEdldFJhbmdlRnVuY3Rpb248L3NwYW4+PC9hPiBmb3IgYQorZGVzY3JpcHRpb24gb2YgYSBnZXRyYW5nZSBmdW5jdGlvbi4gSWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPiBoYXMgbm8gZ2V0cmFuZ2UgZnVuY3Rpb24KK2luc3RhbGxlZCAoc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1nZXRyYW5nZS1mdW5jdGlvbiIgdGl0bGU9ImdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uKCk8L2NvZGU+PC9hPikgdGhpcyBmdW5jdGlvbiByZXR1cm5zCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULUZMT1ctTk9ULVNVUFBPUlRFRDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDwvc3Bhbj48L2E+LgorPC9wPgorPHA+CitUaGlzIGlzIGEgbG93bGV2ZWwgZnVuY3Rpb24uIFVzdWFseSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1wdWxsLXJhbmdlIiB0aXRsZT0iZ3N0X3BhZF9wdWxsX3JhbmdlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfcHVsbF9yYW5nZSgpPC9jb2RlPjwvYT4gaXMgdXNlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBzcmMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4sIHJldHVybnMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1GTE9XLUVSUk9SOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRkxPV19FUlJPUjwvc3Bhbj48L2E+IGlmIG5vdC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgc3RhcnQgb2Zmc2V0IG9mIHRoZSBidWZmZXI8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBwb2ludGVyIHRvIGhvbGQgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LAorcmV0dXJucyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULUZMT1ctRVJST1I6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GTE9XX0VSUk9SPC9zcGFuPjwvYT4gaWYgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPiBjYWxsZWUtYWxsb2NhdGVzXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4gZnJvbSB0aGUgcGFkLgorTVQgc2FmZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFkLXNldC1nZXRyYW5nZS1mdW5jdGlvbiI+PC9hPjxoMz5nc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEdldFJhbmdlRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRHZXRSYW5nZUZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkR2V0UmFuZ2VGdW5jdGlvbjwvc3Bhbj48L2E+IGdldDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgdGhlIGdpdmVuIGdldHJhbmdlIGZ1bmN0aW9uIGZvciB0aGUgcGFkLiBUaGUgZ2V0cmFuZ2UgZnVuY3Rpb24gaXMKK2NhbGxlZCB0byBwcm9kdWNlIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IHRvIHN0YXJ0IHRoZSBwcm9jZXNzaW5nIHBpcGVsaW5lLiBzZWUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRHZXRSYW5nZUZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkR2V0UmFuZ2VGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZEdldFJhbmdlRnVuY3Rpb248L3NwYW4+PC9hPiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZ2V0cmFuZ2UgZnVuY3Rpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgc291cmNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Z2V0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkR2V0UmFuZ2VGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEdldFJhbmdlRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRHZXRSYW5nZUZ1bmN0aW9uPC9zcGFuPjwvYT4gdG8gc2V0LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFBhZEdldFJhbmdlRnVuY3Rpb24iPjwvYT48aDM+R3N0UGFkR2V0UmFuZ2VGdW5jdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+ICAgICAgICgqR3N0UGFkR2V0UmFuZ2VGdW5jdGlvbikgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBsZW5ndGg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKipidWZmZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIG9uIHNvdXJjZSBwYWRzIHdoZW4gYSBwZWVyIGVsZW1lbnQKK3JlcXVlc3QgYSBidWZmZXIgYXQgdGhlIHNwZWNpZmllZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGVuZ3RoPC9jb2RlPjwvZW0+LiBJZiB0aGlzIGZ1bmN0aW9uCityZXR1cm5zIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1PSzpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0ZMT1dfT0s8L3NwYW4+PC9hPiwgdGhlIHJlc3VsdCBidWZmZXIgd2lsbCBiZSBzdG9yZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPi4gVGhlCitjb250ZW50cyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+IGlzIGludmFsaWQgZm9yIGFueSBvdGhlciByZXR1cm4gdmFsdWUuCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gaXMgaW5zdGFsbGVkIG9uIGEgc291cmNlIHBhZCB3aXRoCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtZ2V0cmFuZ2UtZnVuY3Rpb24iIHRpdGxlPSJnc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbigpPC9jb2RlPjwvYT4gYW5kIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiBzb3VyY2UgcGFkcyBhZnRlcgordGhleSBhcmUgc3VjY2Vzc2Z1bGx5IGFjdGl2YXRlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWFjdGl2YXRlLXB1bGwiIHRpdGxlPSJnc3RfcGFkX2FjdGl2YXRlX3B1bGwgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9hY3RpdmF0ZV9wdWxsKCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxwPgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxlbmd0aDwvY29kZT48L2VtPiBhcmUgYWx3YXlzIGdpdmVuIGluIGJ5dGUgdW5pdHMuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4gbXVzdCBub3JtYWxseSBiZSBhIHZhbHVlCitiZXR3ZWVuIDAgYW5kIHRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGRhdGEgYXZhaWxhYmxlIG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4uIFRoZQorbGVuZ3RoIChkdXJhdGlvbiBpbiBieXRlcykgY2FuIGJlIHJldHJpZXZlZCB3aXRoIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1EVVJBVElPTjpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1FVRVJZX0RVUkFUSU9OPC9zcGFuPjwvYT4gb3Igd2l0aCBhCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR1NULVFVRVJZLVNFRUtJTkc6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9RVUVSWV9TRUVLSU5HPC9zcGFuPjwvYT4uCis8L3A+Cis8cD4KK0FueSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+IGxhcmdlciBvciBlcXVhbCB0aGFuIHRoZSBsZW5ndGggd2lsbCBtYWtlIHRoZSBmdW5jdGlvbiByZXR1cm4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1VTkVYUEVDVEVEOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRkxPV19VTkVYUEVDVEVEPC9zcGFuPjwvYT4sIHdoaWNoIGNvcnJlc3BvbmRzIHRvIEVPUy4gSW4gdGhpcyBjYXNlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4gZG9lcyBub3QKK2NvbnRhaW4gYSB2YWxpZCBidWZmZXIuCis8L3A+Cis8cD4KK1RoZSBidWZmZXIgc2l6ZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+IHdpbGwgb25seSBiZSBzbWFsbGVyIHRoYW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxlbmd0aDwvY29kZT48L2VtPiB3aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4gaXMKK25lYXIgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLiBJbiBhbGwgb3RoZXIgY2FzZXMsIHRoZSBzaXplIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4gbXVzdCBiZQorZXhhY3RseSB0aGUgcmVxdWVzdGVkIHNpemUuCis8L3A+Cis8cD4KK0l0IGlzIGFsbG93ZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggYSAwIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sZW5ndGg8L2NvZGU+PC9lbT4gYW5kIHZhbGlkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4sIGluCit3aGljaCBjYXNlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4gd2lsbCBjb250YWluIGEgMC1zaXplZCBidWZmZXIgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULUZMT1ctT0s6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GTE9XX09LPC9zcGFuPjwvYT4uCis8L3A+Cis8cD4KK1doZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIC0xIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4sIHRoZSBzZXF1ZW50aWFsbHkgbmV4dCBidWZmZXIKK29mIGxlbmd0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGVuZ3RoPC9jb2RlPjwvZW0+IGluIHRoZSBzdHJlYW0gaXMgcmV0dXJuZWQuCis8L3A+Cis8cD4KK1doZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIC0xIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sZW5ndGg8L2NvZGU+PC9lbT4sIGEgYnVmZmVyIHdpdGggYSBkZWZhdWx0CitvcHRpbWFsIGxlbmd0aCBpcyByZXR1cm5lZCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+LiBUaGUgbGVuZ3RoIG1pZ2h0IGRlcGVuZCBvbiB0aGUgdmFsdWUKK29mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzcmMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gcGVyZm9ybSB0aGUgZ2V0cmFuZ2Ugb24uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG9mZnNldCBvZiB0aGUgcmFuZ2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxlbmd0aDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbGVuZ3RoIG9mIHRoZSByYW5nZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbWVtb3J5IGxvY2F0aW9uIHRvIGhvbGQgdGhlIHJlc3VsdCBidWZmZXIsIGNhbm5vdCBiZSBOVUxMLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1GTE9XLU9LOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRkxPV19PSzwvc3Bhbj48L2E+IGZvciBzdWNjZXNzIGFuZCBhIHZhbGlkIGJ1ZmZlciBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+LiBBbnkgb3RoZXIKK3JldHVybiB2YWx1ZSBsZWF2ZXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPiB1bmRlZmluZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1zZXQtZXZlbnQtZnVuY3Rpb24iPjwvYT48aDM+Z3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRFdmVudEZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkRXZlbnRGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZEV2ZW50RnVuY3Rpb248L3NwYW4+PC9hPiBldmVudDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgdGhlIGdpdmVuIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBwYWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gb2YgZWl0aGVyIGRpcmVjdGlvbi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV2ZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRXZlbnRGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEV2ZW50RnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRFdmVudEZ1bmN0aW9uPC9zcGFuPjwvYT4gdG8gc2V0LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFBhZEV2ZW50RnVuY3Rpb24iPjwvYT48aDM+R3N0UGFkRXZlbnRGdW5jdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAoKkdzdFBhZEV2ZW50RnVuY3Rpb24pICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitGdW5jdGlvbiBzaWduYXR1cmUgdG8gaGFuZGxlIGFuIGV2ZW50IGZvciB0aGUgcGFkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gaGFuZGxlIHRoZSBldmVudC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV2ZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+IHRvIGhhbmRsZS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBwYWQgY291bGQgaGFuZGxlIHRoZSBldmVudC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFkLXNldC1saW5rLWZ1bmN0aW9uIj48L2E+PGgzPmdzdF9wYWRfc2V0X2xpbmtfZnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3BhZF9zZXRfbGlua19mdW5jdGlvbiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRMaW5rRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRMaW5rRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRMaW5rRnVuY3Rpb248L3NwYW4+PC9hPiBsaW5rPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0cyB0aGUgZ2l2ZW4gbGluayBmdW5jdGlvbiBmb3IgdGhlIHBhZC4gSXQgd2lsbCBiZSBjYWxsZWQgd2hlbgordGhlIHBhZCBpcyBsaW5rZWQgd2l0aCBhbm90aGVyIHBhZC4KKzwvcD4KKzxwPgorVGhlIHJldHVybiB2YWx1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1MSU5LLU9LOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfUEFEX0xJTktfT0s8L3NwYW4+PC9hPiBzaG91bGQgYmUgdXNlZCB3aGVuIHRoZSBjb25uZWN0aW9uIGNhbiBiZQorbWFkZS4KKzwvcD4KKzxwPgorVGhlIHJldHVybiB2YWx1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1MSU5LLVJFRlVTRUQ6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9QQURfTElOS19SRUZVU0VEPC9zcGFuPjwvYT4gc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgY29ubmVjdGlvbgorY2Fubm90IGJlIG1hZGUgZm9yIHNvbWUgcmVhc29uLgorPC9wPgorPHA+CitJZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGluazwvY29kZT48L2VtPiBpcyBpbnN0YWxsZWQgb24gYSBzb3VyY2UgcGFkLCBpdCBzaG91bGQgY2FsbCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZExpbmtGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZExpbmtGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZExpbmtGdW5jdGlvbjwvc3Bhbj48L2E+CitvZiB0aGUgcGVlciBzaW5rIHBhZCwgaWYgcHJlc2VudC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpbms8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRMaW5rRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRMaW5rRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRMaW5rRnVuY3Rpb248L3NwYW4+PC9hPiB0byBzZXQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UGFkTGlua0Z1bmN0aW9uIj48L2E+PGgzPkdzdFBhZExpbmtGdW5jdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZExpbmtSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdFBhZExpbmtSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkTGlua1JldHVybjwvc3Bhbj48L2E+ICAgICgqR3N0UGFkTGlua0Z1bmN0aW9uKSAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGVlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0Z1bmN0aW9uIHNpZ25hdHVyZSB0byBoYW5kbGUgYSBuZXcgbGluayBvbiB0aGUgcGFkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdGhhdCBpcyBsaW5rZWQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wZWVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwZWVyIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IG9mIHRoZSBsaW5rPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHJlc3VsdCBvZiB0aGUgbGluayB3aXRoIHRoZSBzcGVjaWZpZWQgcGVlci48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFkLXNldC11bmxpbmstZnVuY3Rpb24iPjwvYT48aDM+Z3N0X3BhZF9zZXRfdW5saW5rX2Z1bmN0aW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9wYWRfc2V0X3VubGlua19mdW5jdGlvbiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkVW5saW5rRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRVbmxpbmtGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFVubGlua0Z1bmN0aW9uPC9zcGFuPjwvYT4gdW5saW5rPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0cyB0aGUgZ2l2ZW4gdW5saW5rIGZ1bmN0aW9uIGZvciB0aGUgcGFkLiBJdCB3aWxsIGJlIGNhbGxlZAord2hlbiB0aGUgcGFkIGlzIHVubGlua2VkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dW5saW5rPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkVW5saW5rRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRVbmxpbmtGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFVubGlua0Z1bmN0aW9uPC9zcGFuPjwvYT4gdG8gc2V0LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFBhZFVubGlua0Z1bmN0aW9uIj48L2E+PGgzPkdzdFBhZFVubGlua0Z1bmN0aW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgICgqR3N0UGFkVW5saW5rRnVuY3Rpb24pICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0Z1bmN0aW9uIHNpZ25hdHVyZSB0byBoYW5kbGUgYSB1bmxpbmtpbmcgdGhlIHBhZCBwcm9tIGl0cyBwZWVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRoYXQgaXMgbGlua2VkLjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFkLWFjY2VwdC1jYXBzIj48L2E+PGgzPmdzdF9wYWRfYWNjZXB0X2NhcHMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3BhZF9hY2NlcHRfY2FwcyAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NoZWNrIGlmIHRoZSBnaXZlbiBwYWQgYWNjZXB0cyB0aGUgY2Fwcy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBjaGVjazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byBjaGVjayBvbiB0aGUgcGFkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiB0aGUgcGFkIGNhbiBhY2NlcHQgdGhlIGNhcHMuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1zZXQtYWNjZXB0Y2Fwcy1mdW5jdGlvbiI+PC9hPjxoMz5nc3RfcGFkX3NldF9hY2NlcHRjYXBzX2Z1bmN0aW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9wYWRfc2V0X2FjY2VwdGNhcHNfZnVuY3Rpb24gICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkQWNjZXB0Q2Fwc0Z1bmN0aW9uIiB0aXRsZT0iR3N0UGFkQWNjZXB0Q2Fwc0Z1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkQWNjZXB0Q2Fwc0Z1bmN0aW9uPC9zcGFuPjwvYT4gYWNjZXB0Y2FwczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgdGhlIGdpdmVuIGFjY2VwdGNhcHMgZnVuY3Rpb24gZm9yIHRoZSBwYWQuICBUaGUgYWNjZXB0Y2FwcyBmdW5jdGlvbgord2lsbCBiZSBjYWxsZWQgdG8gY2hlY2sgaWYgdGhlIHBhZCBjYW4gYWNjZXB0IHRoZSBnaXZlbiBjYXBzLiBTZXR0aW5nIHRoZQorYWNjZXB0Y2FwcyBmdW5jdGlvbiB0byBOVUxMIHJlc3RvcmVzIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBvZiBhbGxvd2luZworYW55IGNhcHMgdGhhdCBtYXRjaGVzIHRoZSBjYXBzIGZyb20gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LWNhcHMiIHRpdGxlPSJnc3RfcGFkX2dldF9jYXBzICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfZ2V0X2NhcHMoKTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWNjZXB0Y2FwczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEFjY2VwdENhcHNGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEFjY2VwdENhcHNGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZEFjY2VwdENhcHNGdW5jdGlvbjwvc3Bhbj48L2E+IHRvIHNldC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RQYWRBY2NlcHRDYXBzRnVuY3Rpb24iPjwvYT48aDM+R3N0UGFkQWNjZXB0Q2Fwc0Z1bmN0aW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICgqR3N0UGFkQWNjZXB0Q2Fwc0Z1bmN0aW9uKSAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDaGVjayBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+IGNhbiBhY2NlcHQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4uIEJ5IGRlZmF1bHQgdGhpcyBmdW5jdGlvbiB3aWxsIHNlZSBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPgoraW50ZXJzZWN0IHdpdGggdGhlIHJlc3VsdCBmcm9tIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1jYXBzIiB0aXRsZT0iZ3N0X3BhZF9nZXRfY2FwcyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX2dldF9jYXBzKCk8L2NvZGU+PC9hPiBieSBjYW4gYmUgb3ZlcnJpZGRlbiB0bworcGVyZm9ybSBleHRyYSBjaGVja3MuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBjaGVjazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIGNoZWNrPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiB0aGUgY2FwcyBjYW4gYmUgYWNjZXB0ZWQgYnkgdGhlIHBhZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFkLXNldC1nZXRjYXBzLWZ1bmN0aW9uIj48L2E+PGgzPmdzdF9wYWRfc2V0X2dldGNhcHNfZnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3BhZF9zZXRfZ2V0Y2Fwc19mdW5jdGlvbiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRHZXRDYXBzRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRHZXRDYXBzRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRHZXRDYXBzRnVuY3Rpb248L3NwYW4+PC9hPiBnZXRjYXBzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0cyB0aGUgZ2l2ZW4gZ2V0Y2FwcyBmdW5jdGlvbiBmb3IgdGhlIHBhZC4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmdldGNhcHM8L2NvZGU+PC9lbT4gc2hvdWxkIHJldHVybiB0aGUKK2FsbG93YWJsZSBjYXBzIGZvciBhIHBhZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgZWxlbWVudCdzIHN0YXRlLCBpdHMgbGluayB0bworb3RoZXIgZWxlbWVudHMsIGFuZCB0aGUgZGV2aWNlcyBvciBmaWxlcyBpdCBoYXMgb3BlbmVkLiBUaGVzZSBjYXBzIG11c3QgYmUgYQorc3Vic2V0IG9mIHRoZSBwYWQgdGVtcGxhdGUgY2Fwcy4gSW4gdGhlIE5VTEwgc3RhdGUgd2l0aCBubyBsaW5rcywgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmdldGNhcHM8L2NvZGU+PC9lbT4KK3Nob3VsZCBpZGVhbGx5IHJldHVybiB0aGUgc2FtZSBjYXBzIGFzIHRoZSBwYWQgdGVtcGxhdGUuIEluIHJhcmUKK2NpcmN1bXN0YW5jZXMsIGFuIG9iamVjdCBwcm9wZXJ0eSBjYW4gYWZmZWN0IHRoZSBjYXBzIHJldHVybmVkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5nZXRjYXBzPC9jb2RlPjwvZW0+LAorYnV0IHRoaXMgaXMgZGlzY291cmFnZWQuCis8L3A+Cis8cD4KK1lvdSBkbyBub3QgbmVlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPidzIGFsbG93ZWQgY2FwcyBhcmUgYWx3YXlzIHRoZQorc2FtZSBhcyB0aGUgcGFkIHRlbXBsYXRlIGNhcHMuIFRoaXMgY2FuIG9ubHkgYmUgdHJ1ZSBpZiB0aGUgcGFkdGVtcGxhdGUKK2hhcyBmaXhlZCBzaW1wbGUgY2Fwcy4KKzwvcD4KKzxwPgorRm9yIG1vc3QgZmlsdGVycywgdGhlIGNhcHMgcmV0dXJuZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmdldGNhcHM8L2NvZGU+PC9lbT4gaXMgZGlyZWN0bHkgYWZmZWN0ZWQgYnkgdGhlCithbGxvd2VkIGNhcHMgb24gb3RoZXIgcGFkcy4gRm9yIGRlbXV4ZXJzIGFuZCBkZWNvZGVycywgdGhlIGNhcHMgcmV0dXJuZWQgYnkKK3RoZSBzcmNwYWQncyBnZXRjYXBzIGZ1bmN0aW9uIGlzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIHN0cmVhbSBkYXRhLiBBZ2FpbiwKKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5nZXRjYXBzPC9jb2RlPjwvZW0+IHNob3VsZCByZXR1cm4gdGhlIG1vc3Qgc3BlY2lmaWMgY2FwcyBpdCByZWFzb25hYmx5IGNhbiwgc2luY2UgdGhpcworaGVscHMgd2l0aCBhdXRvcGx1Z2dpbmcuCis8L3A+Cis8cD4KK05vdGUgdGhhdCB0aGUgcmV0dXJuIHZhbHVlIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmdldGNhcHM8L2NvZGU+PC9lbT4gaXMgb3duZWQgYnkgdGhlIGNhbGxlciwgc28gdGhlCitjYWxsZXIgc2hvdWxkIHVucmVmIHRoZSBjYXBzIGFmdGVyIHVzYWdlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Z2V0Y2FwczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEdldENhcHNGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEdldENhcHNGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZEdldENhcHNGdW5jdGlvbjwvc3Bhbj48L2E+IHRvIHNldC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RQYWRHZXRDYXBzRnVuY3Rpb24iPjwvYT48aDM+R3N0UGFkR2V0Q2Fwc0Z1bmN0aW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgICgqR3N0UGFkR2V0Q2Fwc0Z1bmN0aW9uKSAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmZpbHRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1doZW4gY2FsbGVkIG9uIHNpbmtwYWRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWx0ZXI8L2NvZGU+PC9lbT4gY29udGFpbnMgdGhlIGNhcHMgdGhhdAordXBzdHJlYW0gY291bGQgcHJvZHVjZSBpbiB0aGUgb3JkZXIgcHJlZmVycmVkIGJ5IHVwc3RyZWFtLiBXaGVuCitjYWxsZWQgb24gc3JjcGFkcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmlsdGVyPC9jb2RlPjwvZW0+IGNvbnRhaW5zIHRoZSBjYXBzIGFjY2VwdGVkIGJ5Citkb3duc3RyZWFtIGluIHRoZSBwcmVmZmVyZWQgb3JkZXIuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWx0ZXI8L2NvZGU+PC9lbT4gbWlnaHQgYmUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gYnV0IGlmCitpdCBpcyBub3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gb25seSBhIHN1YnNldCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmlsdGVyPC9jb2RlPjwvZW0+IG11c3QgYmUgcmV0dXJuZWQuCis8L3A+Cis8cD4KK1JldHVybnMgYSBjb3B5IG9mIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHNwZWNpZmllZCBwYWQuIEJ5IGRlZmF1bHQgdGhpcworZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIHBhZCB0ZW1wbGF0ZSBjYXBhYmlsaXRpZXMsIGJ1dCBjYW4gb3B0aW9uYWxseQorYmUgb3ZlcnJpZGRlbiBieSBlbGVtZW50cy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgY2FwYWJpbGl0aWVzIG9mLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmlsdGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmZpbHRlciA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXdseSBhbGxvY2F0ZWQgY29weSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gb2YgdGhlIHBhZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFkLXByb3h5LWdldGNhcHMiPjwvYT48aDM+Z3N0X3BhZF9wcm94eV9nZXRjYXBzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgIGdzdF9wYWRfcHJveHlfZ2V0Y2FwcyAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmZpbHRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NhbGxzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1hbGxvd2VkLWNhcHMiIHRpdGxlPSJnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHMgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9nZXRfYWxsb3dlZF9jYXBzKCk8L2NvZGU+PC9hPiBmb3IgZXZlcnkgb3RoZXIgcGFkIGJlbG9uZ2luZyB0byB0aGUKK3NhbWUgZWxlbWVudCBhcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+LCBhbmQgcmV0dXJucyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSByZXN1bHRzLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCBhcyBhIGRlZmF1bHQgZ2V0Y2FwcyBmdW5jdGlvbiBmb3IgYW4gZWxlbWVudAordGhhdCBjYW4gaGFuZGxlIGFueSBzdHJlYW0gZm9ybWF0LCBidXQgcmVxdWlyZXMgYWxsIGl0cyBwYWRzIHRvIGhhdmUKK3RoZSBzYW1lIGNhcHMuICBUd28gc3VjaCBlbGVtZW50cyBhcmUgdGVlIGFuZCBhZGRlci4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ3N0X2NhcHNfdW5yZWYKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBwcm94eS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpbHRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBmaWx0ZXIuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGludGVyc2VjdGlvbiBvZiB0aGUgb3RoZXIgcGFkcycgYWxsb3dlZCBjYXBzLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1maXhhdGUtY2FwcyI+PC9hPjxoMz5nc3RfcGFkX2ZpeGF0ZV9jYXBzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9wYWRfZml4YXRlX2NhcHMgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitGaXhhdGUgYSBjYXBzIG9uIHRoZSBnaXZlbiBwYWQuIE1vZGlmaWVzIHRoZSBjYXBzIGluIHBsYWNlLCBzbyB5b3Ugc2hvdWxkCittYWtlIHN1cmUgdGhhdCB0aGUgY2FwcyBhcmUgYWN0dWFsbHkgd3JpdGFibGUgKHNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1tYWtlLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X2NhcHNfbWFrZV93cml0YWJsZSgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jYXBzX21ha2Vfd3JpdGFibGUoKTwvY29kZT48L2E+KS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gZml4YXRlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIGZpeGF0ZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtc2V0LWZpeGF0ZWNhcHMtZnVuY3Rpb24iPjwvYT48aDM+Z3N0X3BhZF9zZXRfZml4YXRlY2Fwc19mdW5jdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcGFkX3NldF9maXhhdGVjYXBzX2Z1bmN0aW9uICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEZpeGF0ZUNhcHNGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEZpeGF0ZUNhcHNGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZEZpeGF0ZUNhcHNGdW5jdGlvbjwvc3Bhbj48L2E+IGZpeGF0ZWNhcHM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXRzIHRoZSBnaXZlbiBmaXhhdGVjYXBzIGZ1bmN0aW9uIGZvciB0aGUgcGFkLiAgVGhlIGZpeGF0ZWNhcHMgZnVuY3Rpb24KK3dpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgYSBHc3RDYXBzIG5lZWRzIHRvIGJlCitmaWxsZWQgaW4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maXhhdGVjYXBzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRml4YXRlQ2Fwc0Z1bmN0aW9uIiB0aXRsZT0iR3N0UGFkRml4YXRlQ2Fwc0Z1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkRml4YXRlQ2Fwc0Z1bmN0aW9uPC9zcGFuPjwvYT4gdG8gc2V0LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFBhZEZpeGF0ZUNhcHNGdW5jdGlvbiI+PC9hPjxoMz5Hc3RQYWRGaXhhdGVDYXBzRnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgKCpHc3RQYWRGaXhhdGVDYXBzRnVuY3Rpb24pICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dpdmVuIHBvc3NpYmx5IHVuZml4ZWQgY2FwcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPiwgbGV0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4gdXNlIGl0cyBkZWZhdWx0IHByZWZlcnJlZAorZm9ybWF0IHRvIG1ha2UgYSBmaXhlZCBjYXBzLiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPiBzaG91bGQgYmUgd3JpdGFibGUuIEJ5IGRlZmF1bHQgdGhpcworZnVuY3Rpb24gd2lsbCBwaWNrIHRoZSBmaXJzdCB2YWx1ZSBvZiBhbnkgcmFuZ2VzIG9yIGxpc3RzIGluIHRoZSBjYXBzIGJ1dAorZWxlbWVudHMgY2FuIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gdG8gcGVyZm9ybSBvdGhlciBiZWhhdmlvdXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIGZpeGF0ZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtcGVlci1hY2NlcHQtY2FwcyI+PC9hPjxoMz5nc3RfcGFkX3BlZXJfYWNjZXB0X2NhcHMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3BhZF9wZWVyX2FjY2VwdF9jYXBzICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NoZWNrIGlmIHRoZSBwZWVyIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4gYWNjZXB0cyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPi4gSWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPiBoYXMgbm8gcGVlciwgdGhpcyBmdW5jdGlvbgorcmV0dXJucyBUUlVFLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBjaGVjayB0aGUgcGVlciBvZjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byBjaGVjayBvbiB0aGUgcGFkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiB0aGUgcGVlciBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+IGNhbiBhY2NlcHQgdGhlIGNhcHMgb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPiBoYXMgbm8gcGVlci48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFkLXNldC1hY3RpdmF0ZS1mdW5jdGlvbiI+PC9hPjxoMz5nc3RfcGFkX3NldF9hY3RpdmF0ZV9mdW5jdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcGFkX3NldF9hY3RpdmF0ZV9mdW5jdGlvbiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEFjdGl2YXRlRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkQWN0aXZhdGVGdW5jdGlvbjwvc3Bhbj48L2E+IGFjdGl2YXRlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0cyB0aGUgZ2l2ZW4gYWN0aXZhdGUgZnVuY3Rpb24gZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4uIFRoZSBhY3RpdmF0ZSBmdW5jdGlvbiB3aWxsCitkaXNwYXRjaCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1hY3RpdmF0ZS1wdXNoIiB0aXRsZT0iZ3N0X3BhZF9hY3RpdmF0ZV9wdXNoICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfYWN0aXZhdGVfcHVzaCgpPC9jb2RlPjwvYT4gb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtYWN0aXZhdGUtcHVsbCIgdGl0bGU9ImdzdF9wYWRfYWN0aXZhdGVfcHVsbCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX2FjdGl2YXRlX3B1bGwoKTwvY29kZT48L2E+IHRvIHBlcmZvcm0KK3RoZSBhY3R1YWwgYWN0aXZhdGlvbi4gT25seSBtYWtlcyBzZW5zZSB0byBzZXQgb24gc2luayBwYWRzLgorPC9wPgorPHA+CitDYWxsIHRoaXMgZnVuY3Rpb24gaWYgeW91ciBzaW5rIHBhZCBjYW4gc3RhcnQgYSBwdWxsLWJhc2VkIHRhc2suCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hY3RpdmF0ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEFjdGl2YXRlRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkQWN0aXZhdGVGdW5jdGlvbjwvc3Bhbj48L2E+IHRvIHNldC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uIj48L2E+PGgzPkdzdFBhZEFjdGl2YXRlRnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgKCpHc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uKSAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgcGFkIGlzIGFjdGl2YXRlZCBkdXJpbmcgdGhlIGVsZW1lbnQKK1JFQURZIHRvIFBBVVNFRCBzdGF0ZSBjaGFuZ2UuIEJ5IGRlZmF1bHQgdGhpcyBmdW5jdGlvbiB3aWxsIGNhbGwgdGhlCithY3RpdmF0ZSBmdW5jdGlvbiB0aGF0IHB1dHMgdGhlIHBhZCBpbiBwdXNoIG1vZGUgYnV0IGVsZW1lbnRzIGNhbgorb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiB0byBhY3RpdmF0ZSB0aGUgcGFkIGluIHB1bGwgbW9kZSBpZiB0aGV5IHdpc2guCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHBhZCBjb3VsZCBiZSBhY3RpdmF0ZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1zZXQtYWN0aXZhdGVwdXNoLWZ1bmN0aW9uIj48L2E+PGgzPmdzdF9wYWRfc2V0X2FjdGl2YXRlcHVzaF9mdW5jdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcGFkX3NldF9hY3RpdmF0ZXB1c2hfZnVuY3Rpb24gICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEFjdGl2YXRlTW9kZUZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbjwvc3Bhbj48L2E+IGFjdGl2YXRlcHVzaDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgdGhlIGdpdmVuIGFjdGl2YXRlX3B1c2ggZnVuY3Rpb24gZm9yIHRoZSBwYWQuIEFuIGFjdGl2YXRlX3B1c2ggZnVuY3Rpb24KK3ByZXBhcmVzIHRoZSBlbGVtZW50IGZvciBwdXNoaW5nLiBTZWUgWFhYIHBhcnQtYWN0aXZhdGlvbi50eHQgZm9yIGRldGFpbHMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hY3RpdmF0ZXB1c2g8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEFjdGl2YXRlTW9kZUZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb248L3NwYW4+PC9hPiB0byBzZXQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1zZXQtYWN0aXZhdGVwdWxsLWZ1bmN0aW9uIj48L2E+PGgzPmdzdF9wYWRfc2V0X2FjdGl2YXRlcHVsbF9mdW5jdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcGFkX3NldF9hY3RpdmF0ZXB1bGxfZnVuY3Rpb24gICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEFjdGl2YXRlTW9kZUZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbjwvc3Bhbj48L2E+IGFjdGl2YXRlcHVsbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgdGhlIGdpdmVuIGFjdGl2YXRlX3B1bGwgZnVuY3Rpb24gZm9yIHRoZSBwYWQuIEFuIGFjdGl2YXRlX3B1bGwgZnVuY3Rpb24KK3ByZXBhcmVzIHRoZSBlbGVtZW50IGFuZCBhbnkgdXBzdHJlYW0gY29ubmVjdGlvbnMgZm9yIHB1bGxpbmcuIFNlZSBYWFgKK3BhcnQtYWN0aXZhdGlvbi50eHQgZm9yIGRldGFpbHMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hY3RpdmF0ZXB1bGw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEFjdGl2YXRlTW9kZUZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb248L3NwYW4+PC9hPiB0byBzZXQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb24iPjwvYT48aDM+R3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgKCpHc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbikgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gYWN0aXZlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVGhlIHByb3RvdHlwZSBvZiB0aGUgcHVzaCBhbmQgcHVsbCBhY3RpdmF0ZSBmdW5jdGlvbnMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWN0aXZlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFjdGl2YXRlIG9yIGRlYWN0aXZhdGUgdGhlIHBhZC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBwYWQgY291bGQgYmUgYWN0aXZhdGVkIG9yIGRlYWN0aXZhdGVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtY2hlY2stcmVjb25maWd1cmUiPjwvYT48aDM+Z3N0X3BhZF9jaGVja19yZWNvbmZpZ3VyZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfcGFkX2NoZWNrX3JlY29uZmlndXJlICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDaGVjayBhbmQgY2xlYXIgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELU5FRUQtUkVDT05GSUdVUkU6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9QQURfTkVFRF9SRUNPTkZJR1VSRTwvc3Bhbj48L2E+IGZsYWcgb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPiBhbmQgcmV0dXJuIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+CitpZiB0aGUgZmxhZyB3YXMgc2V0LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gY2hlY2s8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlzIHRoZSBHU1RfUEFEX05FRURfUkVDT05GSUdVUkUgZmxhZyB3YXMgc2V0IG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1tYXJrLXJlY29uZmlndXJlIj48L2E+PGgzPmdzdF9wYWRfbWFya19yZWNvbmZpZ3VyZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcGFkX21hcmtfcmVjb25maWd1cmUgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitNYXJrIGEgcGFkIGZvciBuZWVkaW5nIHJlY29uZmlndXJhdGlvbi4gVGhlIG5leHQgY2FsbCB0bworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtY2hlY2stcmVjb25maWd1cmUiIHRpdGxlPSJnc3RfcGFkX2NoZWNrX3JlY29uZmlndXJlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfY2hlY2tfcmVjb25maWd1cmUoKTwvY29kZT48L2E+IHdpbGwgcmV0dXJuIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGFmdGVyIHRoaXMgY2FsbC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBtYXJrPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtcHVzaCI+PC9hPjxoMz5nc3RfcGFkX3B1c2ggKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiAgICAgICBnc3RfcGFkX3B1c2ggICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1B1c2hlcyBhIGJ1ZmZlciB0byB0aGUgcGVlciBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+LgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIHdpbGwgY2FsbCBpbnN0YWxsZWQgYmxvY2sgcHJvYmVzIGJlZm9yZSB0cmlnZ2VyaW5nIGFueQoraW5zdGFsbGVkIGRhdGEgcHJvYmVzLgorPC9wPgorPHA+CitUaGUgZnVuY3Rpb24gcHJvY2VlZHMgY2FsbGluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1jaGFpbiIgdGl0bGU9ImdzdF9wYWRfY2hhaW4gKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9jaGFpbigpPC9jb2RlPjwvYT4gb24gdGhlIHBlZXIgcGFkIGFuZCByZXR1cm5zCit0aGUgdmFsdWUgZnJvbSB0aGF0IGZ1bmN0aW9uLiBJZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+IGhhcyBubyBwZWVyLCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULUZMT1ctTk9ULUxJTktFRDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0ZMT1dfTk9UX0xJTktFRDwvc3Bhbj48L2E+IHdpbGwKK2JlIHJldHVybmVkLgorPC9wPgorPHA+CitJbiBhbGwgY2FzZXMsIHN1Y2Nlc3Mgb3IgZmFpbHVyZSwgdGhlIGNhbGxlciBsb3NlcyBpdHMgcmVmZXJlbmNlIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KK2FmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBzb3VyY2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4sIHJldHVybnMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1GTE9XLUVSUk9SOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRkxPV19FUlJPUjwvc3Bhbj48L2E+IGlmIG5vdC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gdG8gcHVzaCByZXR1cm5zIEdTVF9GTE9XX0VSUk9SCitpZiBub3QuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+IGZyb20gdGhlIHBlZXIgcGFkLgorTVQgc2FmZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFkLXB1c2gtZXZlbnQiPjwvYT48aDM+Z3N0X3BhZF9wdXNoX2V2ZW50ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NlbmRzIHRoZSBldmVudCB0byB0aGUgcGVlciBvZiB0aGUgZ2l2ZW4gcGFkLiBUaGlzIGZ1bmN0aW9uIGlzCittYWlubHkgdXNlZCBieSBlbGVtZW50cyB0byBzZW5kIGV2ZW50cyB0byB0aGVpciBwZWVyCitlbGVtZW50cy4KKzwvcD4KKzxwPgorVGhpcyBmdW5jdGlvbiB0YWtlcyBvd2Vyc2hpcCBvZiB0aGUgcHJvdmlkZWQgZXZlbnQgc28geW91IHNob3VsZAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1yZWYiIHRpdGxlPSJnc3RfZXZlbnRfcmVmICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9ldmVudF9yZWYoKTwvY29kZT48L2E+IGl0IGlmIHlvdSB3YW50IHRvIHJldXNlIHRoZSBldmVudCBhZnRlciB0aGlzIGNhbGwuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gcHVzaCB0aGUgZXZlbnQgdG8uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiB0byBzZW5kIHRvIHRoZSBwYWQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBldmVudCB3YXMgaGFuZGxlZC4KK01UIHNhZmUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1wdXNoLWxpc3QiPjwvYT48aDM+Z3N0X3BhZF9wdXNoX2xpc3QgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiAgICAgICBnc3RfcGFkX3B1c2hfbGlzdCAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjR3N0QnVmZmVyTGlzdCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitQdXNoZXMgYSBidWZmZXIgbGlzdCB0byB0aGUgcGVlciBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+LgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIHdpbGwgY2FsbCBpbnN0YWxsZWQgYmxvY2sgcHJvYmVzIGJlZm9yZSB0cmlnZ2VyaW5nIGFueQoraW5zdGFsbGVkIGRhdGEgcHJvYmVzLgorPC9wPgorPHA+CitUaGUgZnVuY3Rpb24gcHJvY2VlZHMgY2FsbGluZyB0aGUgY2hhaW4gZnVuY3Rpb24gb24gdGhlIHBlZXIgcGFkIGFuZCByZXR1cm5zCit0aGUgdmFsdWUgZnJvbSB0aGF0IGZ1bmN0aW9uLiBJZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+IGhhcyBubyBwZWVyLCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULUZMT1ctTk9ULUxJTktFRDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0ZMT1dfTk9UX0xJTktFRDwvc3Bhbj48L2E+IHdpbGwKK2JlIHJldHVybmVkLiBJZiB0aGUgcGVlciBwYWQgZG9lcyBub3QgaGF2ZSBhbnkgaW5zdGFsbGVkIGNoYWlubGlzdCBmdW5jdGlvbgorZXZlcnkgZ3JvdXAgYnVmZmVyIG9mIHRoZSBsaXN0IHdpbGwgYmUgbWVyZ2VkIGludG8gYSBub3JtYWwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gYW5kCitjaGFpbmVkIHZpYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1jaGFpbiIgdGl0bGU9ImdzdF9wYWRfY2hhaW4gKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9jaGFpbigpPC9jb2RlPjwvYT4uCis8L3A+Cis8cD4KK0luIGFsbCBjYXNlcywgc3VjY2VzcyBvciBmYWlsdXJlLCB0aGUgY2FsbGVyIGxvc2VzIGl0cyByZWZlcmVuY2UgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT4KK2FmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBzb3VyY2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4sIHJldHVybnMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1GTE9XLUVSUk9SOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRkxPV19FUlJPUjwvc3Bhbj48L2E+IGlmIG5vdC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3QiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+IHRvIHB1c2ggcmV0dXJucyBHU1RfRkxPV19FUlJPUgoraWYgbm90LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiBmcm9tIHRoZSBwZWVyIHBhZC4KK01UIHNhZmUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1wdWxsLXJhbmdlIj48L2E+PGgzPmdzdF9wYWRfcHVsbF9yYW5nZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+ICAgICAgIGdzdF9wYWRfcHVsbF9yYW5nZSAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICoqYnVmZmVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUHVsbHMgYSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+IGZyb20gdGhlIHBlZXIgcGFkLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIHdpbGwgZmlyc3QgdHJpZ2dlciB0aGUgcGFkIGJsb2NrIHNpZ25hbCBpZiBpdCB3YXMKK2luc3RhbGxlZC4KKzwvcD4KKzxwPgorV2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+IGlzIG5vdCBsaW5rZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1GTE9XLU5PVC1MSU5LRUQ6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GTE9XX05PVF9MSU5LRUQ8L3NwYW4+PC9hPiBpcyByZXR1cm5lZCBlbHNlIHRoaXMKK2Z1bmN0aW9uIHJldHVybnMgdGhlIHJlc3VsdCBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtcmFuZ2UiIHRpdGxlPSJnc3RfcGFkX2dldF9yYW5nZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX2dldF9yYW5nZSgpPC9jb2RlPjwvYT4gb24gdGhlIHBlZXIgcGFkLgorU2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1yYW5nZSIgdGl0bGU9ImdzdF9wYWRfZ2V0X3JhbmdlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfZ2V0X3JhbmdlKCk8L2NvZGU+PC9hPiBmb3IgYSBsaXN0IG9mIHJldHVybiB2YWx1ZXMgYW5kIGZvciB0aGUKK3NlbWFudGljcyBvZiB0aGUgYXJndW1lbnRzIG9mIHRoaXMgZnVuY3Rpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgc2luayA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiwgcmV0dXJucyBHU1RfRkxPV19FUlJPUiBpZiBub3QuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIHN0YXJ0IG9mZnNldCBvZiB0aGUgYnVmZmVyPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgcG9pbnRlciB0byBob2xkIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiwgcmV0dXJucworR1NUX0ZMT1dfRVJST1IgaWYgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPiBjYWxsZWUtYWxsb2NhdGVzXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4gZnJvbSB0aGUgcGVlciBwYWQuCitXaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULUZMT1ctT0s6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GTE9XX09LPC9zcGFuPjwvYT4sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4gd2lsbCBjb250YWluIGEgdmFsaWQKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IHRoYXQgc2hvdWxkIGJlIGZyZWVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXVucmVmIiB0aXRsZT0iZ3N0X2J1ZmZlcl91bnJlZiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3VucmVmKCk8L2NvZGU+PC9hPiBhZnRlciB1c2FnZS4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4gbWF5IG5vdCBiZSB1c2VkIG9yIGZyZWVkIHdoZW4gYW55IG90aGVyIHJldHVybiB2YWx1ZSB0aGFuCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULUZMT1ctT0s6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GTE9XX09LPC9zcGFuPjwvYT4gaXMgcmV0dXJuZWQuCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtYWN0aXZhdGUtcHVsbCI+PC9hPjxoMz5nc3RfcGFkX2FjdGl2YXRlX3B1bGwgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3BhZF9hY3RpdmF0ZV9wdWxsICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gYWN0aXZlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQWN0aXZhdGVzIG9yIGRlYWN0aXZhdGVzIHRoZSBnaXZlbiBwYWQgaW4gcHVsbCBtb2RlIHZpYSBkaXNwYXRjaGluZyB0byB0aGUKK3BhZCdzIGFjdGl2YXRlcHVsbGZ1bmMuIEZvciB1c2UgZnJvbSB3aXRoaW4gcGFkIGFjdGl2YXRpb24gZnVuY3Rpb25zIG9ubHkuCitXaGVuIGNhbGxlZCBvbiBzaW5rIHBhZHMsIHdpbGwgZmlyc3QgcHJveHkgdGhlIGNhbGwgdG8gdGhlIHBlZXIgcGFkLCB3aGljaAoraXMgZXhwZWN0ZWQgdG8gYWN0aXZhdGUgaXRzIGludGVybmFsbHkgbGlua2VkIHBhZHMgZnJvbSB3aXRoaW4gaXRzCithY3RpdmF0ZV9wdWxsIGZ1bmN0aW9uLgorPC9wPgorPHA+CitJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRoaXMgaXMsIHlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGNhbGwgaXQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBhY3RpdmF0ZSBvciBkZWFjdGl2YXRlLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWN0aXZlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPndoZXRoZXIgb3Igbm90IHRoZSBwYWQgc2hvdWxkIGJlIGFjdGl2ZS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtYWN0aXZhdGUtcHVzaCI+PC9hPjxoMz5nc3RfcGFkX2FjdGl2YXRlX3B1c2ggKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3BhZF9hY3RpdmF0ZV9wdXNoICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gYWN0aXZlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQWN0aXZhdGVzIG9yIGRlYWN0aXZhdGVzIHRoZSBnaXZlbiBwYWQgaW4gcHVzaCBtb2RlIHZpYSBkaXNwYXRjaGluZyB0byB0aGUKK3BhZCdzIGFjdGl2YXRlcHVzaGZ1bmMuIEZvciB1c2UgZnJvbSB3aXRoaW4gcGFkIGFjdGl2YXRpb24gZnVuY3Rpb25zIG9ubHkuCis8L3A+Cis8cD4KK0lmIHlvdSBkb24ndCBrbm93IHdoYXQgdGhpcyBpcywgeW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gY2FsbCBpdC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGFjdGl2YXRlIG9yIGRlYWN0aXZhdGUuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hY3RpdmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+d2hldGhlciB0aGUgcGFkIHNob3VsZCBiZSBhY3RpdmUgb3Igbm90LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4KK01UIHNhZmUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1zZW5kLWV2ZW50Ij48L2E+PGgzPmdzdF9wYWRfc2VuZF9ldmVudCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfcGFkX3NlbmRfZXZlbnQgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZW5kcyB0aGUgZXZlbnQgdG8gdGhlIHBhZC4gVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZAorYnkgYXBwbGljYXRpb25zIHRvIHNlbmQgZXZlbnRzIGluIHRoZSBwaXBlbGluZS4KKzwvcD4KKzxwPgorSWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPiBpcyBhIHNvdXJjZSBwYWQsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPiBzaG91bGQgYmUgYW4gdXBzdHJlYW0gZXZlbnQuIElmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4gaXMgYQorc2luayBwYWQsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPiBzaG91bGQgYmUgYSBkb3duc3RyZWFtIGV2ZW50LiBGb3IgZXhhbXBsZSwgeW91IHdvdWxkIG5vdAorc2VuZCBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtRU9TOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRVZFTlRfRU9TPC9zcGFuPjwvYT4gb24gYSBzcmMgcGFkOyBFT1MgZXZlbnRzIG9ubHkgcHJvcGFnYXRlIGRvd25zdHJlYW0uCitGdXJ0aGVybW9yZSwgc29tZSBkb3duc3RyZWFtIGV2ZW50cyBoYXZlIHRvIGJlIHNlcmlhbGl6ZWQgd2l0aCBkYXRhIGZsb3csCitsaWtlIEVPUywgd2hpbGUgc29tZSBjYW4gdHJhdmVsIG91dC1vZi1iYW5kLCBsaWtlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtRkxVU0gtU1RBUlQ6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9FVkVOVF9GTFVTSF9TVEFSVDwvc3Bhbj48L2E+LiBJZgordGhlIGV2ZW50IG5lZWRzIHRvIGJlIHNlcmlhbGl6ZWQgd2l0aCBkYXRhIGZsb3csIHRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlIHRoZQorcGFkJ3Mgc3RyZWFtIGxvY2sgd2hpbGUgY2FsbGluZyBpdHMgZXZlbnQgZnVuY3Rpb24uCis8L3A+Cis8cD4KK1RvIGZpbmQgb3V0IHdoZXRoZXIgYW4gZXZlbnQgdHlwZSBpcyB1cHN0cmVhbSwgZG93bnN0cmVhbSwgb3IgZG93bnN0cmVhbSBhbmQKK3NlcmlhbGl6ZWQsIHNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnRUeXBlRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEV2ZW50VHlwZUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnRUeXBlRmxhZ3M8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC10eXBlLWdldC1mbGFncyIgdGl0bGU9ImdzdF9ldmVudF90eXBlX2dldF9mbGFncyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZXZlbnRfdHlwZV9nZXRfZmxhZ3MoKTwvY29kZT48L2E+LAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1JUy1VUFNUUkVBTTpDQVBTIiB0aXRsZT0iR1NUX0VWRU5UX0lTX1VQU1RSRUFNKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRVZFTlRfSVNfVVBTVFJFQU08L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1JUy1ET1dOU1RSRUFNOkNBUFMiIHRpdGxlPSJHU1RfRVZFTlRfSVNfRE9XTlNUUkVBTSgpIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0VWRU5UX0lTX0RPV05TVFJFQU08L3NwYW4+PC9hPiwgYW5kCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUlTLVNFUklBTElaRUQ6Q0FQUyIgdGl0bGU9IkdTVF9FVkVOVF9JU19TRVJJQUxJWkVEKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRVZFTlRfSVNfU0VSSUFMSVpFRDwvc3Bhbj48L2E+LiBOb3RlIHRoYXQgaW4gcHJhY3RpY2UgdGhhdCBhbiBhcHBsaWNhdGlvbiBvcgorcGx1Z2luIGRvZXNuJ3QgbmVlZCB0byBib3RoZXIgaXRzZWxmIHdpdGggdGhpcyBpbmZvcm1hdGlvbjsgdGhlIGNvcmUgaGFuZGxlcworYWxsIG5lY2Vzc2FyeSBsb2NrcyBhbmQgY2hlY2tzLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIHRha2VzIG93ZXJzaGlwIG9mIHRoZSBwcm92aWRlZCBldmVudCBzbyB5b3Ugc2hvdWxkCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXJlZiIgdGl0bGU9ImdzdF9ldmVudF9yZWYgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2V2ZW50X3JlZigpPC9jb2RlPjwvYT4gaXQgaWYgeW91IHdhbnQgdG8gcmV1c2UgdGhlIGV2ZW50IGFmdGVyIHRoaXMgY2FsbC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBzZW5kIHRoZSBldmVudCB0by48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV2ZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+IHRvIHNlbmQgdG8gdGhlIHBhZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIGV2ZW50IHdhcyBoYW5kbGVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtZXZlbnQtZGVmYXVsdCI+PC9hPjxoMz5nc3RfcGFkX2V2ZW50X2RlZmF1bHQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3BhZF9ldmVudF9kZWZhdWx0ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSW52b2tlcyB0aGUgZGVmYXVsdCBldmVudCBoYW5kbGVyIGZvciB0aGUgZ2l2ZW4gcGFkLgorPC9wPgorPHA+CitUaGUgRU9TIGV2ZW50IHdpbGwgcGF1c2UgdGhlIHRhc2sgYXNzb2NpYXRlZCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4gYmVmb3JlIGl0IGlzIGZvcndhcmRlZAordG8gYWxsIGludGVybmFsbHkgbGlua2VkIHBhZHMsCis8L3A+Cis8cD4KK1RoZSBDQVBTIGV2ZW50IHdpbGwgbmV2ZXIgYmUgZm9yd2FyZGVkLgorPC9wPgorPHA+CitUaGUgdGhlIGV2ZW50IGlzIHNlbnQgdG8gYWxsIHBhZHMgaW50ZXJuYWxseSBsaW5rZWQgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPi4gVGhpcyBmdW5jdGlvbgordGFrZXMgb3duZXJzaGlwIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBjYWxsIHRoZSBkZWZhdWx0IGV2ZW50IGhhbmRsZXIgb24uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiB0byBoYW5kbGUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBldmVudCB3YXMgc2VudCBzdWNjZXNzZnVsbHkuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1xdWVyeSI+PC9hPjxoMz5nc3RfcGFkX3F1ZXJ5ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9wYWRfcXVlcnkgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0Rpc3BhdGNoZXMgYSBxdWVyeSB0byBhIHBhZC4gVGhlIHF1ZXJ5IHNob3VsZCBoYXZlIGJlZW4gYWxsb2NhdGVkIGJ5IHRoZQorY2FsbGVyIHZpYSBvbmUgb2YgdGhlIHR5cGUtc3BlY2lmaWMgYWxsb2NhdGlvbiBmdW5jdGlvbnMuIFRoZSBlbGVtZW50IHRoYXQKK3RoZSBwYWQgYmVsb25ncyB0byBpcyByZXNwb25zaWJsZSBmb3IgZmlsbGluZyB0aGUgcXVlcnkgd2l0aCBhbiBhcHByb3ByaWF0ZQorcmVzcG9uc2UsIHdoaWNoIHNob3VsZCB0aGVuIGJlIHBhcnNlZCB3aXRoIGEgdHlwZS1zcGVjaWZpYyBxdWVyeSBwYXJzaW5nCitmdW5jdGlvbi4KKzwvcD4KKzxwPgorQWdhaW4sIHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGJvdGggdGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBvZgordGhlIHF1ZXJ5IHN0cnVjdHVyZS4KKzwvcD4KKzxwPgorUGxlYXNlIGFsc28gbm90ZSB0aGF0IHNvbWUgcXVlcmllcyBtaWdodCBuZWVkIGEgcnVubmluZyBwaXBlbGluZSB0byB3b3JrLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGludm9rZSB0aGUgZGVmYXVsdCBxdWVyeSBvbi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+IHRvIHBlcmZvcm0uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBxdWVyeSBjb3VsZCBiZSBwZXJmb3JtZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1wZWVyLXF1ZXJ5Ij48L2E+PGgzPmdzdF9wYWRfcGVlcl9xdWVyeSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfcGFkX3BlZXJfcXVlcnkgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitQZXJmb3JtcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1xdWVyeSIgdGl0bGU9ImdzdF9wYWRfcXVlcnkgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9xdWVyeSgpPC9jb2RlPjwvYT4gb24gdGhlIHBlZXIgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPi4KKzwvcD4KKzxwPgorVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgYm90aCB0aGUgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIG9mCit0aGUgcXVlcnkgc3RydWN0dXJlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGludm9rZSB0aGUgcGVlciBxdWVyeSBvbi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+IHRvIHBlcmZvcm0uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBxdWVyeSBjb3VsZCBiZSBwZXJmb3JtZWQuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+CitpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+IGhhcyBubyBwZWVyLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtcXVlcnktZGVmYXVsdCI+PC9hPjxoMz5nc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3BhZF9xdWVyeV9kZWZhdWx0ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSW52b2tlcyB0aGUgZGVmYXVsdCBxdWVyeSBoYW5kbGVyIGZvciB0aGUgZ2l2ZW4gcGFkLgorVGhlIHF1ZXJ5IGlzIHNlbnQgdG8gYWxsIHBhZHMgaW50ZXJuYWxseSBsaW5rZWQgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPi4gTm90ZSB0aGF0CitpZiB0aGVyZSBhcmUgbWFueSBwb3NzaWJsZSBzaW5rIHBhZHMgdGhhdCBhcmUgaW50ZXJuYWxseSBsaW5rZWQgdG8KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4sIG9ubHkgb25lIHdpbGwgYmUgc2VudCB0aGUgcXVlcnkuCitNdWx0aS1zaW5rcGFkIGVsZW1lbnRzIHNob3VsZCBpbXBsZW1lbnQgY3VzdG9tIHF1ZXJ5IGhhbmRsZXJzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGNhbGwgdGhlIGRlZmF1bHQgcXVlcnkgaGFuZGxlciBvbi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+IHRvIGhhbmRsZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHF1ZXJ5IHdhcyBwZXJmb3JtZWQgc3VjY2Vzc2Z1bGx5LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtcXVlcnktcG9zaXRpb24iPjwvYT48aDM+Z3N0X3BhZF9xdWVyeV9wb3NpdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfcGFkX3F1ZXJ5X3Bvc2l0aW9uICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKmN1cjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1F1ZXJpZXMgYSBwYWQgZm9yIHRoZSBzdHJlYW0gcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gaW52b2tlIHRoZSBwb3NpdGlvbiBxdWVyeSBvbi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IHJlcXVlc3RlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y3VyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgbG9jYXRpb24gaW4gd2hpY2ggdG8gc3RvcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24sIG9yIE5VTEwuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBxdWVyeSBjb3VsZCBiZSBwZXJmb3JtZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1xdWVyeS1kdXJhdGlvbiI+PC9hPjxoMz5nc3RfcGFkX3F1ZXJ5X2R1cmF0aW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9wYWRfcXVlcnlfZHVyYXRpb24gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqZHVyYXRpb248L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitRdWVyaWVzIGEgcGFkIGZvciB0aGUgdG90YWwgc3RyZWFtIGR1cmF0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGludm9rZSB0aGUgZHVyYXRpb24gcXVlcnkgb24uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiByZXF1ZXN0ZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmR1cmF0aW9uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbG9jYXRpb24gaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHRvdGFsCitkdXJhdGlvbiwgb3IgTlVMTC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiB0aGUgcXVlcnkgY291bGQgYmUgcGVyZm9ybWVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtcXVlcnktY29udmVydCI+PC9hPjxoMz5nc3RfcGFkX3F1ZXJ5X2NvbnZlcnQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3BhZF9xdWVyeV9jb252ZXJ0ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBzcmNfZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBzcmNfdmFsPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBkZXN0X2Zvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKmRlc3RfdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUXVlcmllcyBhIHBhZCB0byBjb252ZXJ0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmNfdmFsPC9jb2RlPjwvZW0+IGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmNfZm9ybWF0PC9jb2RlPjwvZW0+IHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0X2Zvcm1hdDwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBpbnZva2UgdGhlIGNvbnZlcnQgcXVlcnkgb24uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmNfZm9ybWF0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IHRvIGNvbnZlcnQgZnJvbS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyY192YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSB2YWx1ZSB0byBjb252ZXJ0LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdF9mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiB0byBjb252ZXJ0IHRvLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdF92YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBwb2ludGVyIHRvIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBxdWVyeSBjb3VsZCBiZSBwZXJmb3JtZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1xdWVyeS1wZWVyLXBvc2l0aW9uIj48L2E+PGgzPmdzdF9wYWRfcXVlcnlfcGVlcl9wb3NpdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfcGFkX3F1ZXJ5X3BlZXJfcG9zaXRpb24gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKmN1cjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1F1ZXJpZXMgdGhlIHBlZXIgb2YgYSBnaXZlbiBzaW5rIHBhZCBmb3IgdGhlIHN0cmVhbSBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBvbiB3aG9zZSBwZWVyIHRvIGludm9rZSB0aGUgcG9zaXRpb24gcXVlcnkgb24uCitNdXN0IGJlIGEgc2luayBwYWQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiByZXF1ZXN0ZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmN1cjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGxvY2F0aW9uIGluIHdoaWNoIHRvIHN0b3JlIHRoZSBjdXJyZW50Citwb3NpdGlvbiwgb3IgTlVMTC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiB0aGUgcXVlcnkgY291bGQgYmUgcGVyZm9ybWVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtcXVlcnktcGVlci1kdXJhdGlvbiI+PC9hPjxoMz5nc3RfcGFkX3F1ZXJ5X3BlZXJfZHVyYXRpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3BhZF9xdWVyeV9wZWVyX2R1cmF0aW9uICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpkdXJhdGlvbjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1F1ZXJpZXMgdGhlIHBlZXIgcGFkIG9mIGEgZ2l2ZW4gc2luayBwYWQgZm9yIHRoZSB0b3RhbCBzdHJlYW0gZHVyYXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gb24gd2hvc2UgcGVlciBwYWQgdG8gaW52b2tlIHRoZSBkdXJhdGlvbiBxdWVyeSBvbi4KK011c3QgYmUgYSBzaW5rIHBhZC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IHJlcXVlc3RlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZHVyYXRpb248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBsb2NhdGlvbiBpbiB3aGljaCB0byBzdG9yZSB0aGUgdG90YWwKK2R1cmF0aW9uLCBvciBOVUxMLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBxdWVyeSBjb3VsZCBiZSBwZXJmb3JtZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1xdWVyeS1wZWVyLWNvbnZlcnQiPjwvYT48aDM+Z3N0X3BhZF9xdWVyeV9wZWVyX2NvbnZlcnQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3BhZF9xdWVyeV9wZWVyX2NvbnZlcnQgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBzcmNfZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBzcmNfdmFsPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBkZXN0X2Zvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKmRlc3RfdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUXVlcmllcyB0aGUgcGVlciBwYWQgb2YgYSBnaXZlbiBzaW5rIHBhZCB0byBjb252ZXJ0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmNfdmFsPC9jb2RlPjwvZW0+IGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmNfZm9ybWF0PC9jb2RlPjwvZW0+Cit0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdF9mb3JtYXQ8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4sIG9uIHdob3NlIHBlZXIgcGFkIHRvIGludm9rZSB0aGUgY29udmVydCBxdWVyeSBvbi4KK011c3QgYmUgYSBzaW5rIHBhZC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyY19mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gdG8gY29udmVydCBmcm9tLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjX3ZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHZhbHVlIHRvIGNvbnZlcnQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0X2Zvcm1hdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IHRvIGNvbnZlcnQgdG8uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0X3ZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHF1ZXJ5IGNvdWxkIGJlIHBlcmZvcm1lZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFkLXNldC1xdWVyeS1mdW5jdGlvbiI+PC9hPjxoMz5nc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZFF1ZXJ5RnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRRdWVyeUZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkUXVlcnlGdW5jdGlvbjwvc3Bhbj48L2E+IHF1ZXJ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0IHRoZSBnaXZlbiBxdWVyeSBmdW5jdGlvbiBmb3IgdGhlIHBhZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBvZiBlaXRoZXIgZGlyZWN0aW9uLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVlcnk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRRdWVyeUZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkUXVlcnlGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFF1ZXJ5RnVuY3Rpb248L3NwYW4+PC9hPiB0byBzZXQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UGFkUXVlcnlGdW5jdGlvbiI+PC9hPjxoMz5Hc3RQYWRRdWVyeUZ1bmN0aW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICgqR3N0UGFkUXVlcnlGdW5jdGlvbikgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1RoZSBzaWduYXR1cmUgb2YgdGhlIHF1ZXJ5IGZ1bmN0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gcXVlcnkuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiBvYmplY3QgdG8gZXhlY3V0ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHF1ZXJ5IGNvdWxkIGJlIHBlcmZvcm1lZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFkLXNldC1xdWVyeS10eXBlLWZ1bmN0aW9uIj48L2E+PGgzPmdzdF9wYWRfc2V0X3F1ZXJ5X3R5cGVfZnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3BhZF9zZXRfcXVlcnlfdHlwZV9mdW5jdGlvbiAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRRdWVyeVR5cGVGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZFF1ZXJ5VHlwZUZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkUXVlcnlUeXBlRnVuY3Rpb248L3NwYW4+PC9hPiB0eXBlX2Z1bmM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXQgdGhlIGdpdmVuIHF1ZXJ5IHR5cGUgZnVuY3Rpb24gZm9yIHRoZSBwYWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gb2YgZWl0aGVyIGRpcmVjdGlvbi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGVfZnVuYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZFF1ZXJ5VHlwZUZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkUXVlcnlUeXBlRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRRdWVyeVR5cGVGdW5jdGlvbjwvc3Bhbj48L2E+IHRvIHNldC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RQYWRRdWVyeVR5cGVGdW5jdGlvbiI+PC9hPjxoMz5Hc3RQYWRRdWVyeVR5cGVGdW5jdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5VHlwZSIgdGl0bGU9ImVudW0gR3N0UXVlcnlUeXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5VHlwZTwvc3Bhbj48L2E+ICogKCpHc3RQYWRRdWVyeVR5cGVGdW5jdGlvbikgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitUaGUgc2lnbmF0dXJlIG9mIHRoZSBxdWVyeSB0eXBlcyBmdW5jdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBxdWVyeTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgY29uc3RhbnQgYXJyYXkgb2YgcXVlcnkgdHlwZXM8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFkLWdldC1xdWVyeS10eXBlcyI+PC9hPjxoMz5nc3RfcGFkX2dldF9xdWVyeV90eXBlcyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5VHlwZSIgdGl0bGU9ImVudW0gR3N0UXVlcnlUeXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5VHlwZTwvc3Bhbj48L2E+ICogZ3N0X3BhZF9nZXRfcXVlcnlfdHlwZXMgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgYW4gYXJyYXkgb2Ygc3VwcG9ydGVkIHF1ZXJpZXMgdGhhdCBjYW4gYmUgcGVyZm9ybWVkCitvbiB0aGlzIHBhZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHplcm8tdGVybWluYXRlZCBhcnJheQorb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5VHlwZSIgdGl0bGU9ImVudW0gR3N0UXVlcnlUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnlUeXBlPC9zcGFuPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiB6ZXJvLXRlcm1pbmF0ZWQ9MV08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFkLWdldC1xdWVyeS10eXBlcy1kZWZhdWx0Ij48L2E+PGgzPmdzdF9wYWRfZ2V0X3F1ZXJ5X3R5cGVzX2RlZmF1bHQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGUiIHRpdGxlPSJlbnVtIEdzdFF1ZXJ5VHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RRdWVyeVR5cGU8L3NwYW4+PC9hPiAqIGdzdF9wYWRfZ2V0X3F1ZXJ5X3R5cGVzX2RlZmF1bHQgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSW52b2tlIHRoZSBkZWZhdWx0IHF1ZXJ5IHR5cGVzIGZ1bmN0aW9uIG9uIHRoZSBwYWQuIFRoaXMgZnVuY3Rpb24gd2lsbCBnZXQKK3RoZSBzdXBwb3J0ZWQgcXVlcnkgdHlwZSBmcm9tIHRoZSBwZWVyIG9mIGFuIGludGVybmFsbHkgbGlua2VkIHBhZCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgemVyby10ZXJtaW5hdGVkIGFycmF5CitvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnlUeXBlIiB0aXRsZT0iZW51bSBHc3RRdWVyeVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeVR5cGU8L3NwYW4+PC9hPiwgb3IgTlVMTCBpZiBub25lIG9mIHRoZSBpbnRlcm5hbGx5LWxpbmtlZCBwYWRzIGhhcyBhCitxdWVyeSB0eXBlcyBmdW5jdGlvbi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IHplcm8tdGVybWluYXRlZD0xXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtc2V0LWl0ZXJhdGUtaW50ZXJuYWwtbGlua3MtZnVuY3Rpb24iPjwvYT48aDM+Z3N0X3BhZF9zZXRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19mdW5jdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcGFkX3NldF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2Z1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkSXRlckludExpbmtGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEl0ZXJJbnRMaW5rRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uPC9zcGFuPjwvYT4gaXRlcmludGxpbms8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXRzIHRoZSBnaXZlbiBpbnRlcm5hbCBsaW5rIGl0ZXJhdG9yIGZ1bmN0aW9uIGZvciB0aGUgcGFkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IG9mIGVpdGhlciBkaXJlY3Rpb24uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdGVyaW50bGluazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEl0ZXJJbnRMaW5rRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkSXRlckludExpbmtGdW5jdGlvbjwvc3Bhbj48L2E+IHRvIHNldC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIxPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uIj48L2E+PGgzPkdzdFBhZEl0ZXJJbnRMaW5rRnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICogICAgICAgKCpHc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uKSAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVGhlIHNpZ25hdHVyZSBvZiB0aGUgaW50ZXJuYWwgcGFkIGxpbmsgaXRlcmF0b3IgZnVuY3Rpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBxdWVyeS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+IHRoYXQgd2lsbCBpdGVyYXRlIG92ZXIgYWxsIHBhZHMgdGhhdCBhcmUKK2xpbmtlZCB0byB0aGUgZ2l2ZW4gcGFkIG9uIHRoZSBpbnNpZGUgb2YgdGhlIHBhcmVudCBlbGVtZW50LgordGhlIGNhbGxlciBtdXN0IGNhbGwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1mcmVlIiB0aXRsZT0iZ3N0X2l0ZXJhdG9yX2ZyZWUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2l0ZXJhdG9yX2ZyZWUoKTwvY29kZT48L2E+IGFmdGVyIHVzYWdlLgorU2luY2UgMC4xMC4yMTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtaXRlcmF0ZS1pbnRlcm5hbC1saW5rcyI+PC9hPjxoMz5nc3RfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3MgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICogICAgICAgZ3N0X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyBhbiBpdGVyYXRvciBmb3IgdGhlIHBhZHMgdG8gd2hpY2ggdGhlIGdpdmVuIHBhZCBpcyBsaW5rZWQgdG8gaW5zaWRlCitvZiB0aGUgcGFyZW50IGVsZW1lbnQuCis8L3A+Cis8cD4KK0VhY2ggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gZWxlbWVudCB5aWVsZGVkIGJ5IHRoZSBpdGVyYXRvciB3aWxsIGhhdmUgaXRzIHJlZmNvdW50IGluY3JlYXNlZCwKK3NvIHVucmVmIGFmdGVyIHVzZS4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ3N0X2l0ZXJhdG9yX2ZyZWUKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIEdzdFBhZCB0byBnZXQgdGhlIGludGVybmFsIGxpbmtzIG9mLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gb3IgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gd2hlbiB0aGUKK3BhZCBkb2VzIG5vdCBoYXZlIGFuIGl0ZXJhdG9yIGZ1bmN0aW9uIGNvbmZpZ3VyZWQuIFVzZQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1mcmVlIiB0aXRsZT0iZ3N0X2l0ZXJhdG9yX2ZyZWUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2l0ZXJhdG9yX2ZyZWUoKTwvY29kZT48L2E+IGFmdGVyIHVzYWdlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1pdGVyYXRlLWludGVybmFsLWxpbmtzLWRlZmF1bHQiPjwvYT48aDM+Z3N0X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2RlZmF1bHQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICogICAgICAgZ3N0X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2RlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSXRlcmF0ZSB0aGUgbGlzdCBvZiBwYWRzIHRvIHdoaWNoIHRoZSBnaXZlbiBwYWQgaXMgbGlua2VkIHRvIGluc2lkZSBvZgordGhlIHBhcmVudCBlbGVtZW50LgorVGhpcyBpcyB0aGUgZGVmYXVsdCBoYW5kbGVyLCBhbmQgdGh1cyByZXR1cm5zIGFuIGl0ZXJhdG9yIG9mIGFsbCBvZiB0aGUKK3BhZHMgaW5zaWRlIHRoZSBwYXJlbnQgZWxlbWVudCB3aXRoIG9wcG9zaXRlIGRpcmVjdGlvbi4KKzwvcD4KKzxwPgorVGhlIGNhbGxlciBtdXN0IGZyZWUgdGhpcyBpdGVyYXRvciBhZnRlciB1c2Ugd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLWZyZWUiIHRpdGxlPSJnc3RfaXRlcmF0b3JfZnJlZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaXRlcmF0b3JfZnJlZSgpPC9jb2RlPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBnZXQgdGhlIGludGVybmFsIGxpbmtzIG9mLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiwgb3IgTlVMTCBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+IGhhcyBubyBwYXJlbnQuIFVucmVmIGVhY2gKK3JldHVybmVkIHBhZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucmVmIiB0aXRsZT0iZ3N0X29iamVjdF91bnJlZiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X3VucmVmKCk8L2NvZGU+PC9hPi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIxPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFkLXNldC1lbGVtZW50LXByaXZhdGUiPjwvYT48aDM+Z3N0X3BhZF9zZXRfZWxlbWVudF9wcml2YXRlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9wYWRfc2V0X2VsZW1lbnRfcHJpdmF0ZSAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHByaXY8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXQgdGhlIGdpdmVuIHByaXZhdGUgZGF0YSBncG9pbnRlciBvbiB0aGUgcGFkLgorVGhpcyBmdW5jdGlvbiBjYW4gb25seSBiZSB1c2VkIGJ5IHRoZSBlbGVtZW50IHRoYXQgb3ducyB0aGUgcGFkLgorTm8gbG9ja2luZyBpcyBwZXJmb3JtZWQgaW4gdGhpcyBmdW5jdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIHNldCB0aGUgcHJpdmF0ZSBkYXRhIG9mLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJpdjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgcHJpdmF0ZSBkYXRhIHRvIGF0dGFjaCB0byB0aGUgcGFkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtZ2V0LWVsZW1lbnQtcHJpdmF0ZSI+PC9hPjxoMz5nc3RfcGFkX2dldF9lbGVtZW50X3ByaXZhdGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgcHJpdmF0ZSBkYXRhIG9mIGEgcGFkLgorTm8gbG9ja2luZyBpcyBwZXJmb3JtZWQgaW4gdGhpcyBmdW5jdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgcHJpdmF0ZSBkYXRhIG9mLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB0byB0aGUgcHJpdmF0ZSBkYXRhLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UGFkRm9yd2FyZEZ1bmN0aW9uIj48L2E+PGgzPkdzdFBhZEZvcndhcmRGdW5jdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAoKkdzdFBhZEZvcndhcmRGdW5jdGlvbikgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBIGZvcndhcmQgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBhbGwgaW50ZXJuYWxseSBsaW5rZWQgcGFkcywgc2VlCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1mb3J3YXJkIiB0aXRsZT0iZ3N0X3BhZF9mb3J3YXJkICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfZm9yd2FyZCgpPC9jb2RlPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0aGF0IGlzIGZvcndhcmRlZC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZ3BvaW50ZXIgdG8gb3B0aW9uYWwgdXNlciBkYXRhLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIGRpc3BhdGNoaW5nIHByb2NlZHVyZSBoYXMgdG8gYmUgc3RvcHBlZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFkLWZvcndhcmQiPjwvYT48aDM+Z3N0X3BhZF9mb3J3YXJkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9wYWRfZm9yd2FyZCAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRm9yd2FyZEZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkRm9yd2FyZEZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkRm9yd2FyZEZ1bmN0aW9uPC9zcGFuPjwvYT4gZm9yd2FyZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NhbGxzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3J3YXJkPC9jb2RlPjwvZW0+IGZvciBhbGwgaW50ZXJuYWxseSBsaW5rZWQgcGFkcyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+LiBUaGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGgKK2R5bmFtaWNhbGx5IGNoYW5naW5nIGludGVybmFsIHBhZHMgYW5kIHdpbGwgbWFrZSBzdXJlIHRoYXQgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3J3YXJkPC9jb2RlPjwvZW0+CitmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBvbmNlIGZvciBlYWNoIHBhZC4KKzwvcD4KKzxwPgorV2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9yd2FyZDwvY29kZT48L2VtPiByZXR1cm5zIFRSVUUsIG5vIGZ1cnRoZXIgcGFkcyB3aWxsIGJlIHByb2Nlc3NlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3J3YXJkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEZvcndhcmRGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEZvcndhcmRGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZEZvcndhcmRGdW5jdGlvbjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VyIGRhdGEgcGFzc2VkIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3J3YXJkPC9jb2RlPjwvZW0+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIG9uZSBvZiB0aGUgZGlzcGF0Y2hlciBmdW5jdGlvbnMgcmV0dXJuZWQgVFJVRS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFkLWNoYWluIj48L2E+PGgzPmdzdF9wYWRfY2hhaW4gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiAgICAgICBnc3RfcGFkX2NoYWluICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NoYWluIGEgYnVmZmVyIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4uCis8L3A+Cis8cD4KK1RoZSBmdW5jdGlvbiByZXR1cm5zIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1XUk9ORy1TVEFURTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0ZMT1dfV1JPTkdfU1RBVEU8L3NwYW4+PC9hPiBpZiB0aGUgcGFkIHdhcyBmbHVzaGluZy4KKzwvcD4KKzxwPgorSWYgdGhlIGJ1ZmZlciB0eXBlIGlzIG5vdCBhY2NlcHRhYmxlIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+IChhcyBuZWdvdGlhdGVkIHdpdGggYQorcHJlY2VlZGluZyBHU1RfRVZFTlRfQ0FQUyBldmVudCksIHRoaXMgZnVuY3Rpb24gcmV0dXJucworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1GTE9XLU5PVC1ORUdPVElBVEVEOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRkxPV19OT1RfTkVHT1RJQVRFRDwvc3Bhbj48L2E+LgorPC9wPgorPHA+CitUaGUgZnVuY3Rpb24gcHJvY2VlZHMgY2FsbGluZyB0aGUgY2hhaW4gZnVuY3Rpb24gaW5zdGFsbGVkIG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4gKHNlZQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWNoYWluLWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24oKTwvY29kZT48L2E+KSBhbmQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGF0IGZ1bmN0aW9uIGlzCityZXR1cm5lZCB0byB0aGUgY2FsbGVyLiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULUZMT1ctTk9ULVNVUFBPUlRFRDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDwvc3Bhbj48L2E+IGlzIHJldHVybmVkIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4gaGFzIG5vCitjaGFpbiBmdW5jdGlvbi4KKzwvcD4KKzxwPgorSW4gYWxsIGNhc2VzLCBzdWNjZXNzIG9yIGZhaWx1cmUsIHRoZSBjYWxsZXIgbG9zZXMgaXRzIHJlZmVyZW5jZSB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+CithZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgc2luayA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiwgcmV0dXJucyBHU1RfRkxPV19FUlJPUiBpZiBub3QuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IHRvIHNlbmQsIHJldHVybiBHU1RfRkxPV19FUlJPUgoraWYgbm90LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiBmcm9tIHRoZSBwYWQuCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtY2hhaW4tbGlzdCI+PC9hPjxoMz5nc3RfcGFkX2NoYWluX2xpc3QgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiAgICAgICBnc3RfcGFkX2NoYWluX2xpc3QgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjR3N0QnVmZmVyTGlzdCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDaGFpbiBhIGJ1ZmZlcmxpc3QgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPi4KKzwvcD4KKzxwPgorVGhlIGZ1bmN0aW9uIHJldHVybnMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1GTE9XLVdST05HLVNUQVRFOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRkxPV19XUk9OR19TVEFURTwvc3Bhbj48L2E+IGlmIHRoZSBwYWQgd2FzIGZsdXNoaW5nLgorPC9wPgorPHA+CitJZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+IHdhcyBub3QgbmVnb3RpYXRlZCBwcm9wZXJseSB3aXRoIGEgQ0FQUyBldmVudCwgdGhpcyBmdW5jdGlvbgorcmV0dXJucyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULUZMT1ctTk9ULU5FR09USUFURUQ6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GTE9XX05PVF9ORUdPVElBVEVEPC9zcGFuPjwvYT4uCis8L3A+Cis8cD4KK1RoZSBmdW5jdGlvbiBwcm9jZWVkcyBjYWxsaW5nIHRoZSBjaGFpbmxpc3QgZnVuY3Rpb24gaW5zdGFsbGVkIG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4gKHNlZQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWNoYWluLWxpc3QtZnVuY3Rpb24iIHRpdGxlPSJnc3RfcGFkX3NldF9jaGFpbl9saXN0X2Z1bmN0aW9uICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfc2V0X2NoYWluX2xpc3RfZnVuY3Rpb24oKTwvY29kZT48L2E+KSBhbmQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGF0IGZ1bmN0aW9uIGlzCityZXR1cm5lZCB0byB0aGUgY2FsbGVyLiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULUZMT1ctTk9ULVNVUFBPUlRFRDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDwvc3Bhbj48L2E+IGlzIHJldHVybmVkIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4gaGFzIG5vCitjaGFpbmxpc3QgZnVuY3Rpb24uCis8L3A+Cis8cD4KK0luIGFsbCBjYXNlcywgc3VjY2VzcyBvciBmYWlsdXJlLCB0aGUgY2FsbGVyIGxvc2VzIGl0cyByZWZlcmVuY2UgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT4KK2FmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBzaW5rIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LCByZXR1cm5zIEdTVF9GTE9XX0VSUk9SIGlmIG5vdC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3QiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+IHRvIHNlbmQsIHJldHVybiBHU1RfRkxPV19FUlJPUgoraWYgbm90LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiBmcm9tIHRoZSBwYWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1zdGFydC10YXNrIj48L2E+PGgzPmdzdF9wYWRfc3RhcnRfdGFzayAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfcGFkX3N0YXJ0X3Rhc2sgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNHc3RUYXNrRnVuY3Rpb24iIHRpdGxlPSJHc3RUYXNrRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrRnVuY3Rpb248L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1N0YXJ0cyBhIHRhc2sgdGhhdCByZXBlYXRlZGx5IGNhbGxzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+IHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4uIFRoaXMgZnVuY3Rpb24KK2lzIG1vc3RseSB1c2VkIGluIHBhZCBhY3RpdmF0aW9uIGZ1bmN0aW9ucyB0byBzdGFydCB0aGUgZGF0YWZsb3cuCitUaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtU1RSRUFNLUxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9QQURfU1RSRUFNX0xPQ0soKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9QQURfU1RSRUFNX0xPQ0s8L3NwYW4+PC9hPiBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+IHdpbGwgYXV0b21hdGljYWxseSBiZSBhY3F1aXJlZAorYmVmb3JlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+IGlzIGNhbGxlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIHN0YXJ0IHRoZSB0YXNrIG9mPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB0YXNrIGZ1bmN0aW9uIHRvIGNhbGw8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZGF0YSBwYXNzZWQgdG8gdGhlIHRhc2sgZnVuY3Rpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB0YXNrIGNvdWxkIGJlIHN0YXJ0ZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1wYXVzZS10YXNrIj48L2E+PGgzPmdzdF9wYWRfcGF1c2VfdGFzayAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfcGFkX3BhdXNlX3Rhc2sgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitQYXVzZSB0aGUgdGFzayBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+LiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxzbyB3YWl0IHVudGlsIHRoZQorZnVuY3Rpb24gZXhlY3V0ZWQgYnkgdGhlIHRhc2sgaXMgZmluaXNoZWQgaWYgdGhpcyBmdW5jdGlvbiBpcyBub3QKK2NhbGxlZCBmcm9tIHRoZSB0YXNrIGZ1bmN0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gcGF1c2UgdGhlIHRhc2sgb2Y8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIFRSVUUgaWYgdGhlIHRhc2sgY291bGQgYmUgcGF1c2VkIG9yIEZBTFNFIHdoZW4gdGhlIHBhZAoraGFzIG5vIHRhc2suPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhZC1zdG9wLXRhc2siPjwvYT48aDM+Z3N0X3BhZF9zdG9wX3Rhc2sgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3BhZF9zdG9wX3Rhc2sgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU3RvcCB0aGUgdGFzayBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+LiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxzbyBtYWtlIHN1cmUgdGhhdCB0aGUKK2Z1bmN0aW9uIGV4ZWN1dGVkIGJ5IHRoZSB0YXNrIHdpbGwgZWZmZWN0aXZlbHkgc3RvcCBpZiBub3QgY2FsbGVkCitmcm9tIHRoZSBHc3RUYXNrRnVuY3Rpb24uCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gd2lsbCBkZWFkbG9jayBpZiBjYWxsZWQgZnJvbSB0aGUgR3N0VGFza0Z1bmN0aW9uIG9mCit0aGUgdGFzay4gVXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stcGF1c2UiIHRpdGxlPSJnc3RfdGFza19wYXVzZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFza19wYXVzZSgpPC9jb2RlPjwvYT4gaW5zdGVhZC4KKzwvcD4KKzxwPgorUmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBwYWQgaGFzIGEgdGFzaywgdGhlIHN0cmVhbSBsb2NrIGlzIGFjcXVpcmVkIGFuZAorcmVsZWFzZWQgc28gYXMgdG8gZW5zdXJlIHRoYXQgc3RyZWFtaW5nIHRocm91Z2ggdGhpcyBwYWQgaGFzIGZpbmlzaGVkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gc3RvcCB0aGUgdGFzayBvZjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgVFJVRSBpZiB0aGUgdGFzayBjb3VsZCBiZSBzdG9wcGVkIG9yIEZBTFNFIG9uIGVycm9yLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtc2V0LWFjdGl2ZSI+PC9hPjxoMz5nc3RfcGFkX3NldF9hY3RpdmUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3BhZF9zZXRfYWN0aXZlICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gYWN0aXZlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQWN0aXZhdGVzIG9yIGRlYWN0aXZhdGVzIHRoZSBnaXZlbiBwYWQuCitOb3JtYWxseSBjYWxsZWQgZnJvbSB3aXRoaW4gY29yZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb25zLgorPC9wPgorPHA+CitJZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWN0aXZlPC9jb2RlPjwvZW0+LCBtYWtlcyBzdXJlIHRoZSBwYWQgaXMgYWN0aXZlLiBJZiBpdCBpcyBhbHJlYWR5IGFjdGl2ZSwgZWl0aGVyIGluCitwdXNoIG9yIHB1bGwgbW9kZSwganVzdCByZXR1cm4uIE90aGVyd2lzZSBkaXNwYXRjaGVzIHRvIHRoZSBwYWQncyBhY3RpdmF0ZQorZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUgYWN0dWFsIGFjdGl2YXRpb24uCis8L3A+Cis8cD4KK0lmIG5vdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWN0aXZlPC9jb2RlPjwvZW0+LCBjaGVja3MgdGhlIHBhZCdzIGN1cnJlbnQgbW9kZSBhbmQgY2FsbHMKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWFjdGl2YXRlLXB1c2giIHRpdGxlPSJnc3RfcGFkX2FjdGl2YXRlX3B1c2ggKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9hY3RpdmF0ZV9wdXNoKCk8L2NvZGU+PC9hPiBvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1hY3RpdmF0ZS1wdWxsIiB0aXRsZT0iZ3N0X3BhZF9hY3RpdmF0ZV9wdWxsICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfYWN0aXZhdGVfcHVsbCgpPC9jb2RlPjwvYT4sIGFzIGFwcHJvcHJpYXRlLCB3aXRoIGEKK0ZBTFNFIGFyZ3VtZW50LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gYWN0aXZhdGUgb3IgZGVhY3RpdmF0ZS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFjdGl2ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD53aGV0aGVyIG9yIG5vdCB0aGUgcGFkIHNob3VsZCBiZSBhY3RpdmUuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPlRSVUU8L3NwYW4+PC9hPiBpZiB0aGUgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLgorTVQgc2FmZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtUEFELUdFVC1TVFJFQU0tTE9DSzpDQVBTIj48L2E+PGgzPkdTVF9QQURfR0VUX1NUUkVBTV9MT0NLKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9HRVRfU1RSRUFNX0xPQ0socGFkKSAgICAoJmFtcDsoR1NUX1BBRF9DQVNUKHBhZCktJmd0O3N0cmVhbV9yZWNfbG9jaykpCis8L3ByZT4KKzxwPgorR2V0IHRoZSBzdHJlYW0gbG9jayBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+LiBUaGUgc3RyZWFtIGxvY2sgaXMgcHJvdGVjdGluZyB0aGUKK3Jlc291cmNlcyB1c2VkIGluIHRoZSBkYXRhIHByb2Nlc3NpbmcgZnVuY3Rpb25zIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVBBRC1TVFJFQU0tTE9DSzpDQVBTIj48L2E+PGgzPkdTVF9QQURfU1RSRUFNX0xPQ0soKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX1NUUkVBTV9MT0NLKHBhZCkgICAgICAgIChnX3N0YXRpY19yZWNfbXV0ZXhfbG9jayhHU1RfUEFEX0dFVF9TVFJFQU1fTE9DSyhwYWQpKSkKKzwvcHJlPgorPHA+CitMb2NrIHRoZSBzdHJlYW0gbG9jayBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1QQUQtU1RSRUFNLUxPQ0stRlVMTDpDQVBTIj48L2E+PGgzPkdTVF9QQURfU1RSRUFNX0xPQ0tfRlVMTCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QQURfU1RSRUFNX0xPQ0tfRlVMTChwYWQsdCkgKGdfc3RhdGljX3JlY19tdXRleF9sb2NrX2Z1bGwoR1NUX1BBRF9HRVRfU1RSRUFNX0xPQ0socGFkKSwgdCkpCis8L3ByZT4KKzxwPgorTG9jayB0aGUgc3RyZWFtIGxvY2sgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dDwvY29kZT48L2VtPiB0aW1lcy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVjdXJzaXZlbHkgbG9jazwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1QQUQtU1RSRUFNLVRSWUxPQ0s6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX1NUUkVBTV9UUllMT0NLKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9TVFJFQU1fVFJZTE9DSyhwYWQpICAgICAoZ19zdGF0aWNfcmVjX211dGV4X3RyeWxvY2soR1NUX1BBRF9HRVRfU1RSRUFNX0xPQ0socGFkKSkpCis8L3ByZT4KKzxwPgorVHJ5IHRvIExvY2sgdGhlIHN0cmVhbSBsb2NrIG9mIHRoZSBwYWQsIHJldHVybiBUUlVFIGlmIHRoZSBsb2NrIGNvdWxkIGJlCit0YWtlbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtUEFELVNUUkVBTS1VTkxPQ0s6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX1NUUkVBTV9VTkxPQ0soKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX1NUUkVBTV9VTkxPQ0socGFkKSAgICAgIChnX3N0YXRpY19yZWNfbXV0ZXhfdW5sb2NrKEdTVF9QQURfR0VUX1NUUkVBTV9MT0NLKHBhZCkpKQorPC9wcmU+Cis8cD4KK1VubG9jayB0aGUgc3RyZWFtIGxvY2sgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtUEFELVNUUkVBTS1VTkxPQ0stRlVMTDpDQVBTIj48L2E+PGgzPkdTVF9QQURfU1RSRUFNX1VOTE9DS19GVUxMKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9TVFJFQU1fVU5MT0NLX0ZVTEwocGFkKSAoZ19zdGF0aWNfcmVjX211dGV4X3VubG9ja19mdWxsKEdTVF9QQURfR0VUX1NUUkVBTV9MT0NLKHBhZCkpKQorPC9wcmU+Cis8cD4KK0Z1bGx5IHVubG9jayB0aGUgcmVjdXJzaXZlIHN0cmVhbSBsb2NrIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4sIHJldHVybiB0aGUgbnVtYmVyIG9mIHRpbWVzCis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+IHdhcyBsb2NrZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RQYWQucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFBhZC0tY2FwcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJjYXBzIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgImNhcHMiICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+KiAgICAgICAgICAgICAgOiBSZWFkPC9wcmU+Cis8cD5UaGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBwYWQuPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RQYWQtLWRpcmVjdGlvbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJkaXJlY3Rpb24iPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiZGlyZWN0aW9uIiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRGlyZWN0aW9uIiB0aXRsZT0iZW51bSBHc3RQYWREaXJlY3Rpb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWREaXJlY3Rpb248L3NwYW4+PC9hPiAgICAgICA6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdCBPbmx5PC9wcmU+Cis8cD5UaGUgZGlyZWN0aW9uIG9mIHRoZSBwYWQuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogR1NUX1BBRF9VTktOT1dOPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RQYWQtLXRlbXBsYXRlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+InRlbXBsYXRlIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgInRlbXBsYXRlIiAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4qICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5UaGUgR3N0UGFkVGVtcGxhdGUgb2YgdGhpcyBwYWQuPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdFBhZC5zaWduYWwtZGV0YWlscyI+PC9hPjxoMj5TaWduYWwgRGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RQYWQtbGlua2VkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImxpbmtlZCI8L2NvZGU+IHNpZ25hbDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICB1c2VyX2Z1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAgKnBhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gICpwZWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YSkgICAgICA6IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5SdW4gTGFzdDwvY29kZT48L2E+PC9wcmU+Cis8cD4KK1NpZ25hbHMgdGhhdCBhIHBhZCBoYXMgYmVlbiBsaW5rZWQgdG8gdGhlIHBlZXIgcGFkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGFkIHRoYXQgZW1pdHRlZCB0aGUgc2lnbmFsPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wZWVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwZWVyIHBhZCB0aGF0IGhhcyBiZWVuIGNvbm5lY3RlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RQYWQtdW5saW5rZWQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4idW5saW5rZWQiPC9jb2RlPiBzaWduYWw8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgdXNlcl9mdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gICpwYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICAqcGVlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGEpICAgICAgOiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+UnVuIExhc3Q8L2NvZGU+PC9hPjwvcHJlPgorPHA+CitTaWduYWxzIHRoYXQgYSBwYWQgaGFzIGJlZW4gdW5saW5rZWQgZnJvbSB0aGUgcGVlciBwYWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwYWQgdGhhdCBlbWl0dGVkIHRoZSBzaWduYWw8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBlZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBlZXIgcGFkIHRoYXQgaGFzIGJlZW4gZGlzY29ubmVjdGVkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0UGFkLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL0dzdFBhZFRlbXBsYXRlLmh0bWwgYi9kb2NzL2dzdC9odG1sL0dzdFBhZFRlbXBsYXRlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThkMjc4NwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2h0bWwvR3N0UGFkVGVtcGxhdGUuaHRtbApAQCAtMCwwICsxLDU3NCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdzdFBhZFRlbXBsYXRlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItR3N0UGFyYW1TcGVjLmh0bWwiIHRpdGxlPSJHc3RQYXJhbVNwZWMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdFBhZC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyYW1TcGVjLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjR3N0UGFkVGVtcGxhdGUuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RQYWRUZW1wbGF0ZS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0UGFkVGVtcGxhdGUub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RQYWRUZW1wbGF0ZS5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFBhZFRlbXBsYXRlLnNpZ25hbHMiIGNsYXNzPSJzaG9ydGN1dCI+U2lnbmFsczwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJHc3RQYWRUZW1wbGF0ZSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9IkdzdFBhZFRlbXBsYXRlLnRvcF9vZl9wYWdlIj48L2E+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9oMj4KKzxwPkdzdFBhZFRlbXBsYXRlIOKAlCBEZXNjcmliZSB0aGUgbWVkaWEgdHlwZSBvZiBhIHBhZC48L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJHc3RQYWRUZW1wbGF0ZS5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisjaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OworCitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFN0YXRpY1BhZFRlbXBsYXRlIiB0aXRsZT0ic3RydWN0IEdzdFN0YXRpY1BhZFRlbXBsYXRlIj5Hc3RTdGF0aWNQYWRUZW1wbGF0ZTwvYT47CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1TVEFUSUMtUEFELVRFTVBMQVRFOkNBUFMiIHRpdGxlPSJHU1RfU1RBVElDX1BBRF9URU1QTEFURSgpIj5HU1RfU1RBVElDX1BBRF9URU1QTEFURTwvYT4gICAgICAgICAgICAgKHBhZG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwcykKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPiAqICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI2dzdC1zdGF0aWMtcGFkLXRlbXBsYXRlLWdldCIgdGl0bGU9ImdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoKSI+Z3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0PC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0U3RhdGljUGFkVGVtcGxhdGUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RhdGljUGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0aWNQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+ICpwYWRfdGVtcGxhdGU8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPiAqICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNnc3Qtc3RhdGljLXBhZC10ZW1wbGF0ZS1nZXQtY2FwcyIgdGl0bGU9ImdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldF9jYXBzICgpIj5nc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXRfY2FwczwvYT4gICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RTdGF0aWNQYWRUZW1wbGF0ZSIgdGl0bGU9InN0cnVjdCBHc3RTdGF0aWNQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRpY1BhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKnRlbXBsPC9jb2RlPjwvZW0+KTsKK3N0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkVGVtcGxhdGUtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFBhZFRlbXBsYXRlIj5Hc3RQYWRUZW1wbGF0ZTwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFRlbXBsYXRlRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFBhZFRlbXBsYXRlRmxhZ3MiPkdzdFBhZFRlbXBsYXRlRmxhZ3M8L2E+OworZW51bSAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RQYWRQcmVzZW5jZSIgdGl0bGU9ImVudW0gR3N0UGFkUHJlc2VuY2UiPkdzdFBhZFByZXNlbmNlPC9hPjsKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR1NULVBBRC1URU1QTEFURS1OQU1FLVRFTVBMQVRFOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1RFTVBMQVRFX05BTUVfVEVNUExBVEUoKSI+R1NUX1BBRF9URU1QTEFURV9OQU1FX1RFTVBMQVRFPC9hPiAgICAgICh0ZW1wbCkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR1NULVBBRC1URU1QTEFURS1ESVJFQ1RJT046Q0FQUyIgdGl0bGU9IkdTVF9QQURfVEVNUExBVEVfRElSRUNUSU9OKCkiPkdTVF9QQURfVEVNUExBVEVfRElSRUNUSU9OPC9hPiAgICAgICAgICAodGVtcGwpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1QQUQtVEVNUExBVEUtUFJFU0VOQ0U6Q0FQUyIgdGl0bGU9IkdTVF9QQURfVEVNUExBVEVfUFJFU0VOQ0UoKSI+R1NUX1BBRF9URU1QTEFURV9QUkVTRU5DRTwvYT4gICAgICAgICAgICh0ZW1wbCkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR1NULVBBRC1URU1QTEFURS1DQVBTIiB0aXRsZT0iR1NUX1BBRF9URU1QTEFURV9DQVBTKCkiPkdTVF9QQURfVEVNUExBVEVfQ0FQUzwvYT4gICAgICAgICAgICAgICAodGVtcGwpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1QQUQtVEVNUExBVEUtSVMtRklYRUQ6Q0FQUyIgdGl0bGU9IkdTVF9QQURfVEVNUExBVEVfSVNfRklYRUQoKSI+R1NUX1BBRF9URU1QTEFURV9JU19GSVhFRDwvYT4gICAgICAgICAgICh0ZW1wbCkKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPiAqICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI2dzdC1wYWQtdGVtcGxhdGUtbmV3IiB0aXRsZT0iZ3N0X3BhZF90ZW1wbGF0ZV9uZXcgKCkiPmdzdF9wYWRfdGVtcGxhdGVfbmV3PC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWVfdGVtcGxhdGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZERpcmVjdGlvbiIgdGl0bGU9ImVudW0gR3N0UGFkRGlyZWN0aW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkRGlyZWN0aW9uPC9zcGFuPjwvYT4gZGlyZWN0aW9uPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFByZXNlbmNlIiB0aXRsZT0iZW51bSBHc3RQYWRQcmVzZW5jZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFByZXNlbmNlPC9zcGFuPjwvYT4gcHJlc2VuY2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKiAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjZ3N0LXBhZC10ZW1wbGF0ZS1nZXQtY2FwcyIgdGl0bGU9ImdzdF9wYWRfdGVtcGxhdGVfZ2V0X2NhcHMgKCkiPmdzdF9wYWRfdGVtcGxhdGVfZ2V0X2NhcHM8L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+ICp0ZW1wbDwvY29kZT48L2VtPik7Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0UGFkVGVtcGxhdGUub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPkdPYmplY3Q8L2E+CisgICArLS0tLTxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+CisgICAgICAgICArLS0tLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+R3N0T2JqZWN0PC9hPgorICAgICAgICAgICAgICAgKy0tLS1Hc3RQYWRUZW1wbGF0ZQorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdFBhZFRlbXBsYXRlLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RQYWRUZW1wbGF0ZS0tY2FwcyIgdGl0bGU9J1RoZSAiY2FwcyIgcHJvcGVydHknPmNhcHM8L2E+IiAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiogICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0IE9ubHkKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFRlbXBsYXRlLS1kaXJlY3Rpb24iIHRpdGxlPSdUaGUgImRpcmVjdGlvbiIgcHJvcGVydHknPmRpcmVjdGlvbjwvYT4iICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWREaXJlY3Rpb24iIHRpdGxlPSJlbnVtIEdzdFBhZERpcmVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZERpcmVjdGlvbjwvc3Bhbj48L2E+ICAgICAgIDogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0IE9ubHkKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFRlbXBsYXRlLS1uYW1lLXRlbXBsYXRlIiB0aXRsZT0nVGhlICJuYW1lLXRlbXBsYXRlIiBwcm9wZXJ0eSc+bmFtZS10ZW1wbGF0ZTwvYT4iICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiogICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3QgT25seQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkVGVtcGxhdGUtLXByZXNlbmNlIiB0aXRsZT0nVGhlICJwcmVzZW5jZSIgcHJvcGVydHknPnByZXNlbmNlPC9hPiIgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFByZXNlbmNlIiB0aXRsZT0iZW51bSBHc3RQYWRQcmVzZW5jZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFByZXNlbmNlPC9zcGFuPjwvYT4gICAgICAgIDogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0IE9ubHkKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RQYWRUZW1wbGF0ZS5zaWduYWxzIj48L2E+PGgyPlNpZ25hbHM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkVGVtcGxhdGUtcGFkLWNyZWF0ZWQiIHRpdGxlPSdUaGUgInBhZC1jcmVhdGVkIiBzaWduYWwnPnBhZC1jcmVhdGVkPC9hPiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5SdW4gTGFzdDwvY29kZT48L2E+Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0UGFkVGVtcGxhdGUuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitQYWR0ZW1wbGF0ZXMgZGVzY3JpYmUgdGhlIHBvc3NpYmxlIG1lZGlhIHR5cGVzIGEgcGFkIG9yIGFuIGVsZW1lbnRmYWN0b3J5IGNhbgoraGFuZGxlLiBUaGlzIGFsbG93cyBmb3IgYm90aCBpbnNwZWN0aW9uIG9mIGhhbmRsZWQgdHlwZXMgYmVmb3JlIGxvYWRpbmcgdGhlCitlbGVtZW50IHBsdWdpbiBhcyB3ZWxsIGFzIGlkZW50aWZ5aW5nIHBhZHMgb24gZWxlbWVudHMgdGhhdCBhcmUgbm90IHlldAorY3JlYXRlZCAocmVxdWVzdCBvciBzb21ldGltZXMgcGFkcykuCis8L3A+Cis8cD4KK1BhZCBhbmQgUGFkVGVtcGxhdGVzIGhhdmUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IGF0dGFjaGVkIHRvIGl0IHRvIGRlc2NyaWJlIHRoZSBtZWRpYSB0eXBlCit0aGV5IGFyZSBjYXBhYmxlIG9mIGRlYWxpbmcgd2l0aC4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjZ3N0LXBhZC10ZW1wbGF0ZS1nZXQtY2FwcyIgdGl0bGU9ImdzdF9wYWRfdGVtcGxhdGVfZ2V0X2NhcHMgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF90ZW1wbGF0ZV9nZXRfY2FwcygpPC9jb2RlPjwvYT4gb3IKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1QQUQtVEVNUExBVEUtQ0FQUyIgdGl0bGU9IkdTVF9QQURfVEVNUExBVEVfQ0FQUygpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdTVF9QQURfVEVNUExBVEVfQ0FQUygpPC9jb2RlPjwvYT4gYXJlIHVzZWQgdG8gZ2V0IHRoZSBjYXBzIG9mIGEgcGFkdGVtcGxhdGUuIEl0J3Mgbm90Citwb3NzaWJsZSB0byBtb2RpZnkgdGhlIGNhcHMgb2YgYSBwYWR0ZW1wbGF0ZSBhZnRlciBjcmVhdGlvbi4KKzwvcD4KKzxwPgorUGFkVGVtcGxhdGVzIGhhdmUgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RQYWRQcmVzZW5jZSIgdGl0bGU9ImVudW0gR3N0UGFkUHJlc2VuY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRQcmVzZW5jZTwvc3Bhbj48L2E+IHByb3BlcnR5IHdoaWNoIGlkZW50aWZpZXMgdGhlIGxpZmV0aW1lCitvZiB0aGUgcGFkIGFuZCB0aGF0IGNhbiBiZSByZXRyaWV2ZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHU1QtUEFELVRFTVBMQVRFLVBSRVNFTkNFOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1RFTVBMQVRFX1BSRVNFTkNFKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R1NUX1BBRF9URU1QTEFURV9QUkVTRU5DRSgpPC9jb2RlPjwvYT4uIEFsc28KK3RoZSBkaXJlY3Rpb24gb2YgdGhlIHBhZCBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+IHdpdGgKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1QQUQtVEVNUExBVEUtRElSRUNUSU9OOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1RFTVBMQVRFX0RJUkVDVElPTigpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdTVF9QQURfVEVNUExBVEVfRElSRUNUSU9OKCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxwPgorVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1QQUQtVEVNUExBVEUtTkFNRS1URU1QTEFURTpDQVBTIiB0aXRsZT0iR1NUX1BBRF9URU1QTEFURV9OQU1FX1RFTVBMQVRFKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R1NUX1BBRF9URU1QTEFURV9OQU1FX1RFTVBMQVRFKCk8L2NvZGU+PC9hPiBpcyBpbXBvcnRhbnQgZm9yIEdTVF9QQURfUkVRVUVTVCBwYWRzCitiZWNhdXNlIGl0IGhhcyB0byBiZSB1c2VkIGFzIHRoZSBuYW1lIGluIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1yZXF1ZXN0LXBhZCIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQoKTwvY29kZT48L2E+CitjYWxsIHRvIGluc3RhbnRpYXRlIGEgcGFkIGZyb20gdGhpcyB0ZW1wbGF0ZS4KKzwvcD4KKzxwPgorUGFkdGVtcGxhdGVzIGNhbiBiZSBjcmVhdGVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjZ3N0LXBhZC10ZW1wbGF0ZS1uZXciIHRpdGxlPSJnc3RfcGFkX3RlbXBsYXRlX25ldyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3RlbXBsYXRlX25ldygpPC9jb2RlPjwvYT4gb3Igd2l0aAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjZ3N0LXN0YXRpYy1wYWQtdGVtcGxhdGUtZ2V0IiB0aXRsZT0iZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCgpPC9jb2RlPjwvYT4sIHdoaWNoIGNyZWF0ZXMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPiBmcm9tIGEKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFN0YXRpY1BhZFRlbXBsYXRlIiB0aXRsZT0ic3RydWN0IEdzdFN0YXRpY1BhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGljUGFkVGVtcGxhdGU8L3NwYW4+PC9hPiB0aGF0IGNhbiBiZSBmaWxsZWQgd2l0aCB0aGUKK2NvbnZlbmllbnQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR1NULVNUQVRJQy1QQUQtVEVNUExBVEU6Q0FQUyIgdGl0bGU9IkdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R1NUX1NUQVRJQ19QQURfVEVNUExBVEUoKTwvY29kZT48L2E+IG1hY3JvLgorPC9wPgorPHA+CitBIHBhZHRlbXBsYXRlIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIHBhZCAoc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLW5ldy1mcm9tLXRlbXBsYXRlIiB0aXRsZT0iZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlKCk8L2NvZGU+PC9hPgorb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtbmV3LWZyb20tc3RhdGljLXRlbXBsYXRlIiB0aXRsZT0iZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUoKTwvY29kZT48L2E+KSBvciB0byBhZGQgdG8gYW4gZWxlbWVudCBjbGFzcworKHNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNsYXNzLWFkZC1wYWQtdGVtcGxhdGUiIHRpdGxlPSJnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUoKTwvY29kZT48L2E+KS4KKzwvcD4KKzxwPgorVGhlIGZvbGxvd2luZyBjb2RlIGV4YW1wbGUgc2hvd3MgdGhlIGNvZGUgdG8gY3JlYXRlIGEgcGFkIGZyb20gYSBwYWR0ZW1wbGF0ZS4KKzwvcD4KKzxkaXYgY2xhc3M9ImV4YW1wbGUiPgorPGEgbmFtZT0iaWQ1MjA3ODQiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkV4YW1wbGXCoDEyLsKgQ3JlYXRlIGEgcGFkIGZyb20gYSBwYWR0ZW1wbGF0ZTwvYj48L3A+Cis8ZGl2IGNsYXNzPSJleGFtcGxlLWNvbnRlbnRzIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CisgIEdzdFN0YXRpY1BhZFRlbXBsYXRlIG15X3RlbXBsYXRlID0KKyAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKAorICAgICJzaW5rIiwgICAgICAgICAgLy8gdGhlIG5hbWUgb2YgdGhlIHBhZAorICAgIEdTVF9QQURfU0lOSywgICAgLy8gdGhlIGRpcmVjdGlvbiBvZiB0aGUgcGFkCisgICAgR1NUX1BBRF9BTFdBWVMsICAvLyB3aGVuIHRoaXMgcGFkIHdpbGwgYmUgcHJlc2VudAorICAgIEdTVF9TVEFUSUNfQ0FQUyAoICAgICAgICAvLyB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBwYWR0ZW1wbGF0ZQorICAgICAgImF1ZGlvL3gtcmF3LWludCwgIgorICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSBbIDEsIDYgXSIKKyAgICApCisgICk7CisgIHZvaWQKKyAgbXlfbWV0aG9kICh2b2lkKQorICB7CisgICAgR3N0UGFkICpwYWQ7CisgICAgcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZhbXA7bXlfdGVtcGxhdGUsICJzaW5rIik7CisgICAgLi4uCisgIH0KKyAgPC9wcmU+PC9kaXY+Cis8L2Rpdj4KKzxwPjxiciBjbGFzcz0iZXhhbXBsZS1icmVhayI+Cis8L3A+Cis8cD4KK1RoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyB5b3UgaG93IHRvIGFkZCB0aGUgcGFkdGVtcGxhdGUgdG8gYW4KK2VsZW1lbnQgY2xhc3MsIHRoaXMgaXMgdXN1YWxseSBkb25lIGluIHRoZSBjbGFzc19pbml0IG9mIHRoZSBjbGFzczoKKzwvcD4KKzxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgorICBzdGF0aWMgdm9pZAorICBteV9lbGVtZW50X2NsYXNzX2luaXQgKEdzdE15RWxlbWVudENsYXNzICprbGFzcykKKyAgeworICAgIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7CisKKyAgICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAorICAgICAgICBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgKCZhbXA7bXlfdGVtcGxhdGUpKTsKKyAgfQorICA8L3ByZT48L2Rpdj4KKzxwPgorPC9wPgorPHA+CitMYXN0IHJldmlld2VkIG9uIDIwMDYtMDItMTQgKDAuMTAuMykKKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0UGFkVGVtcGxhdGUuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFN0YXRpY1BhZFRlbXBsYXRlIj48L2E+PGgzPnN0cnVjdCBHc3RTdGF0aWNQYWRUZW1wbGF0ZTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFN0YXRpY1BhZFRlbXBsYXRlIHsKKyAgY29uc3QgZ2NoYXIgICAgICpuYW1lX3RlbXBsYXRlOworICBHc3RQYWREaXJlY3Rpb24gIGRpcmVjdGlvbjsKKyAgR3N0UGFkUHJlc2VuY2UgICBwcmVzZW5jZTsKKyAgR3N0U3RhdGljQ2FwcyAgICBzdGF0aWNfY2FwczsKK307Cis8L3ByZT4KKzxwPgorU3RydWN0dXJlIGRlc2NyaWJpbmcgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFN0YXRpY1BhZFRlbXBsYXRlIiB0aXRsZT0ic3RydWN0IEdzdFN0YXRpY1BhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGljUGFkVGVtcGxhdGU8L3NwYW4+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNvbnN0wqA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0U3RhdGljUGFkVGVtcGxhdGUubmFtZS10ZW1wbGF0ZSI+PC9hPm5hbWVfdGVtcGxhdGU8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuYW1lIG9mIHRoZSB0ZW1wbGF0ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRGlyZWN0aW9uIiB0aXRsZT0iZW51bSBHc3RQYWREaXJlY3Rpb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWREaXJlY3Rpb248L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0U3RhdGljUGFkVGVtcGxhdGUuZGlyZWN0aW9uIj48L2E+ZGlyZWN0aW9uPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZGlyZWN0aW9uIG9mIHRoZSB0ZW1wbGF0ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RQYWRQcmVzZW5jZSIgdGl0bGU9ImVudW0gR3N0UGFkUHJlc2VuY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRQcmVzZW5jZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RTdGF0aWNQYWRUZW1wbGF0ZS5wcmVzZW5jZSI+PC9hPnByZXNlbmNlPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcHJlc2VuY2Ugb2YgdGhlIHRlbXBsYXRlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdFN0YXRpY0NhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RhdGljQ2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRpY0NhcHM8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0U3RhdGljUGFkVGVtcGxhdGUuc3RhdGljLWNhcHMiPjwvYT5zdGF0aWNfY2FwczwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGNhcHMgb2YgdGhlIHRlbXBsYXRlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1TVEFUSUMtUEFELVRFTVBMQVRFOkNBUFMiPjwvYT48aDM+R1NUX1NUQVRJQ19QQURfVEVNUExBVEUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURShwYWRuYW1lLCBkaXIsIHByZXMsIGNhcHMpPC9wcmU+Cis8cD4KK0NvbnZlbmllbmNlIG1hY3JvIHRvIGZpbGwgdGhlIHZhbHVlcyBvZiBhIEdzdFN0YXRpY1BhZFRlbXBsYXRlCitzdHJ1Y3R1cmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkbmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmFtZSB0ZW1wbGF0ZSBvZiB0aGUgcGFkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kaXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIEdzdFBhZERpcmVjdGlvbiBvZiB0aGUgcGFkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcmVzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBHc3RQYWRQcmVzZW5jZSBvZiB0aGUgcGFkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBHc3RTdGF0aWNDYXBzIG9mIHRoZSBwYWQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc3RhdGljLXBhZC10ZW1wbGF0ZS1nZXQiPjwvYT48aDM+Z3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKiAgICBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFN0YXRpY1BhZFRlbXBsYXRlIiB0aXRsZT0ic3RydWN0IEdzdFN0YXRpY1BhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGljUGFkVGVtcGxhdGU8L3NwYW4+PC9hPiAqcGFkX3RlbXBsYXRlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ29udmVydHMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RTdGF0aWNQYWRUZW1wbGF0ZSIgdGl0bGU9InN0cnVjdCBHc3RTdGF0aWNQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRpY1BhZFRlbXBsYXRlPC9zcGFuPjwvYT4gaW50byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZF90ZW1wbGF0ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc3RhdGljIHBhZCB0ZW1wbGF0ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXN0YXRpYy1wYWQtdGVtcGxhdGUtZ2V0LWNhcHMiPjwvYT48aDM+Z3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKiAgICAgICAgICAgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHMgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RTdGF0aWNQYWRUZW1wbGF0ZSIgdGl0bGU9InN0cnVjdCBHc3RTdGF0aWNQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRpY1BhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKnRlbXBsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBzdGF0aWMgcGFkIHRlbXBsYXRlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRlbXBsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0U3RhdGljUGFkVGVtcGxhdGUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RhdGljUGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0aWNQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+IHRvIGdldCBjYXBhYmlsaXRpZXMgb2YuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBvZiB0aGUgc3RhdGljIHBhZCB0ZW1wbGF0ZS4KK1VucmVmIGFmdGVyIHVzYWdlLiBTaW5jZSB0aGUgY29yZSBob2xkcyBhbiBhZGRpdGlvbmFsCityZWYgdG8gdGhlIHJldHVybmVkIGNhcHMsIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1tYWtlLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X2NhcHNfbWFrZV93cml0YWJsZSgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jYXBzX21ha2Vfd3JpdGFibGUoKTwvY29kZT48L2E+CitvbiB0aGUgcmV0dXJuZWQgY2FwcyB0byBtb2RpZnkgaXQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RQYWRUZW1wbGF0ZS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFBhZFRlbXBsYXRlPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UGFkVGVtcGxhdGU7PC9wcmU+Cis8cD4KK1RoZSBwYWR0ZW1wbGF0ZSBvYmplY3QuCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFBhZFRlbXBsYXRlRmxhZ3MiPjwvYT48aDM+ZW51bSBHc3RQYWRUZW1wbGF0ZUZsYWdzPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGVudW0geworICAvKiBwYWRkaW5nICovCisgIEdTVF9QQURfVEVNUExBVEVfRkxBR19MQVNUICAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUICZsdDsmbHQ7IDQpCit9IEdzdFBhZFRlbXBsYXRlRmxhZ3M7Cis8L3ByZT4KKzxwPgorRmxhZ3MgZm9yIHRoZSBwYWR0ZW1wbGF0ZQorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVBBRC1URU1QTEFURS1GTEFHLUxBU1Q6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BBRF9URU1QTEFURV9GTEFHX0xBU1Q8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmZpcnN0IGZsYWcgdGhhdCBjYW4gYmUgdXNlZCBieSBzdWJjbGFzc2VzLgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFBhZFByZXNlbmNlIj48L2E+PGgzPmVudW0gR3N0UGFkUHJlc2VuY2U8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9QQURfQUxXQVlTLAorICBHU1RfUEFEX1NPTUVUSU1FUywKKyAgR1NUX1BBRF9SRVFVRVNUCit9IEdzdFBhZFByZXNlbmNlOworPC9wcmU+Cis8cD4KK0luZGljYXRlcyB3aGVuIHRoaXMgcGFkIHdpbGwgYmVjb21lIGF2YWlsYWJsZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVBBRC1BTFdBWVM6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BBRF9BTFdBWVM8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwYWQgaXMgYWx3YXlzIGF2YWlsYWJsZQorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVBBRC1TT01FVElNRVM6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BBRF9TT01FVElNRVM8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwYWQgd2lsbCBiZWNvbWUgYXZhaWxhYmxlIGRlcGVuZGluZyBvbiB0aGUgbWVkaWEgc3RyZWFtCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUEFELVJFUVVFU1Q6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BBRF9SRVFVRVNUPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGFkIGlzIG9ubHkgYXZhaWxhYmxlIG9uIHJlcXVlc3Qgd2l0aAorIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LXJlcXVlc3QtcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCgpPC9jb2RlPjwvYT4uCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtUEFELVRFTVBMQVRFLU5BTUUtVEVNUExBVEU6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX1RFTVBMQVRFX05BTUVfVEVNUExBVEUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX1RFTVBMQVRFX05BTUVfVEVNUExBVEUodGVtcGwpwqAoKChHc3RQYWRUZW1wbGF0ZSAqKSh0ZW1wbCkpLSZndDtuYW1lX3RlbXBsYXRlKQorPC9wcmU+Cis8cD4KK0dldCB0aGUgbmFtZXRlbXBsYXRlIG9mIHRoZSBwYWR0ZW1wbGF0ZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGVtcGw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHRlbXBsYXRlIHRvIHF1ZXJ5PC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1QQUQtVEVNUExBVEUtRElSRUNUSU9OOkNBUFMiPjwvYT48aDM+R1NUX1BBRF9URU1QTEFURV9ESVJFQ1RJT04oKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX1RFTVBMQVRFX0RJUkVDVElPTih0ZW1wbCnCoCgoKEdzdFBhZFRlbXBsYXRlICopKHRlbXBsKSktJmd0O2RpcmVjdGlvbikKKzwvcHJlPgorPHA+CitHZXQgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWREaXJlY3Rpb24iIHRpdGxlPSJlbnVtIEdzdFBhZERpcmVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZERpcmVjdGlvbjwvc3Bhbj48L2E+IG9mIHRoZSBwYWR0ZW1wbGF0ZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGVtcGw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHRlbXBsYXRlIHRvIHF1ZXJ5PC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1QQUQtVEVNUExBVEUtUFJFU0VOQ0U6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX1RFTVBMQVRFX1BSRVNFTkNFKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9URU1QTEFURV9QUkVTRU5DRSh0ZW1wbCnCoCgoKEdzdFBhZFRlbXBsYXRlICopKHRlbXBsKSktJmd0O3ByZXNlbmNlKQorPC9wcmU+Cis8cD4KK0dldCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkUHJlc2VuY2UiIHRpdGxlPSJlbnVtIEdzdFBhZFByZXNlbmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkUHJlc2VuY2U8L3NwYW4+PC9hPiBvZiB0aGUgcGFkdGVtcGxhdGUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRlbXBsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB0ZW1wbGF0ZSB0byBxdWVyeTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtUEFELVRFTVBMQVRFLUNBUFMiPjwvYT48aDM+R1NUX1BBRF9URU1QTEFURV9DQVBTKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9URU1QTEFURV9DQVBTKHRlbXBsKQkJKCgoR3N0UGFkVGVtcGxhdGUgKikodGVtcGwpKS0mZ3Q7Y2FwcykKKzwvcHJlPgorPHA+CitHZXQgYSBoYW5kbGUgdG8gdGhlIHBhZHRlbXBsYXRlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50ZW1wbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdGVtcGxhdGUgdG8gcXVlcnk8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVBBRC1URU1QTEFURS1JUy1GSVhFRDpDQVBTIj48L2E+PGgzPkdTVF9QQURfVEVNUExBVEVfSVNfRklYRUQoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX1RFTVBMQVRFX0lTX0ZJWEVEKHRlbXBsKcKgKEdTVF9PQkpFQ1RfRkxBR19JU19TRVQodGVtcGwsIEdTVF9QQURfVEVNUExBVEVfRklYRUQpKQorPC9wcmU+Cis8cD4KK0NoZWNrIGlmIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBwYWR0ZW1wbGF0ZSBhcmUgZml4ZWQKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGVtcGw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHRlbXBsYXRlIHRvIHF1ZXJ5PC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtdGVtcGxhdGUtbmV3Ij48L2E+PGgzPmdzdF9wYWRfdGVtcGxhdGVfbmV3ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKiAgICBnc3RfcGFkX3RlbXBsYXRlX25ldyAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWVfdGVtcGxhdGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZERpcmVjdGlvbiIgdGl0bGU9ImVudW0gR3N0UGFkRGlyZWN0aW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkRGlyZWN0aW9uPC9zcGFuPjwvYT4gZGlyZWN0aW9uPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFByZXNlbmNlIiB0aXRsZT0iZW51bSBHc3RQYWRQcmVzZW5jZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFByZXNlbmNlPC9zcGFuPjwvYT4gcHJlc2VuY2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlcyBhIG5ldyBwYWQgdGVtcGxhdGUgd2l0aCBhIG5hbWUgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiB0ZW1wbGF0ZQorYW5kIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lX3RlbXBsYXRlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuYW1lIHRlbXBsYXRlLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGlyZWN0aW9uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRGlyZWN0aW9uIiB0aXRsZT0iZW51bSBHc3RQYWREaXJlY3Rpb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWREaXJlY3Rpb248L3NwYW4+PC9hPiBvZiB0aGUgdGVtcGxhdGUuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcmVzZW5jZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkUHJlc2VuY2UiIHRpdGxlPSJlbnVtIEdzdFBhZFByZXNlbmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkUHJlc2VuY2U8L3NwYW4+PC9hPiBvZiB0aGUgcGFkLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBzZXQgZm9yIHRoZSB0ZW1wbGF0ZS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYWQtdGVtcGxhdGUtZ2V0LWNhcHMiPjwvYT48aDM+Z3N0X3BhZF90ZW1wbGF0ZV9nZXRfY2FwcyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPiAqICAgICAgICAgICBnc3RfcGFkX3RlbXBsYXRlX2dldF9jYXBzICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+ICp0ZW1wbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgcGFkIHRlbXBsYXRlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRlbXBsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4gdG8gZ2V0IGNhcGFiaWxpdGllcyBvZi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IG9mIHRoZSBwYWQgdGVtcGxhdGUuCitVbnJlZiBhZnRlciB1c2FnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0UGFkVGVtcGxhdGUucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFBhZFRlbXBsYXRlLS1jYXBzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImNhcHMiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiY2FwcyIgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4qICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdCBPbmx5PC9wcmU+Cis8cD4KK1RoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHBhZCBkZXNjcmliZWQgYnkgdGhlIHBhZCB0ZW1wbGF0ZS4KKzwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UGFkVGVtcGxhdGUtLWRpcmVjdGlvbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJkaXJlY3Rpb24iPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiZGlyZWN0aW9uIiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRGlyZWN0aW9uIiB0aXRsZT0iZW51bSBHc3RQYWREaXJlY3Rpb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWREaXJlY3Rpb248L3NwYW4+PC9hPiAgICAgICA6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdCBPbmx5PC9wcmU+Cis8cD4KK1RoZSBkaXJlY3Rpb24gb2YgdGhlIHBhZCBkZXNjcmliZWQgYnkgdGhlIHBhZCB0ZW1wbGF0ZS4KKzwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IEdTVF9QQURfVU5LTk9XTjwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UGFkVGVtcGxhdGUtLW5hbWUtdGVtcGxhdGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4ibmFtZS10ZW1wbGF0ZSI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJuYW1lLXRlbXBsYXRlIiAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4qICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0IE9ubHk8L3ByZT4KKzxwPgorVGhlIG5hbWUgdGVtcGxhdGUgb2YgdGhlIHBhZCB0ZW1wbGF0ZS4KKzwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFBhZFRlbXBsYXRlLS1wcmVzZW5jZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJwcmVzZW5jZSI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJwcmVzZW5jZSIgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFByZXNlbmNlIiB0aXRsZT0iZW51bSBHc3RQYWRQcmVzZW5jZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFByZXNlbmNlPC9zcGFuPjwvYT4gICAgICAgIDogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0IE9ubHk8L3ByZT4KKzxwPgorV2hlbiB0aGUgcGFkIGRlc2NyaWJlZCBieSB0aGUgcGFkIHRlbXBsYXRlIHdpbGwgYmVjb21lIGF2YWlsYWJsZS4KKzwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IEdTVF9QQURfQUxXQVlTPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIxPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdFBhZFRlbXBsYXRlLnNpZ25hbC1kZXRhaWxzIj48L2E+PGgyPlNpZ25hbCBEZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFBhZFRlbXBsYXRlLXBhZC1jcmVhdGVkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+InBhZC1jcmVhdGVkIjwvY29kZT4gc2lnbmFsPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIHVzZXJfZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+ICpwYWRfdGVtcGxhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICAgICAgICAgKnBhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgICAgdXNlcl9kYXRhKSAgICAgICAgIDogPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlJ1biBMYXN0PC9jb2RlPjwvYT48L3ByZT4KKzxwPgorVGhpcyBzaWduYWwgaXMgZmlyZWQgd2hlbiBhbiBlbGVtZW50IGNyZWF0ZXMgYSBwYWQgZnJvbSB0aGlzIHRlbXBsYXRlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZF90ZW1wbGF0ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBhZCB0aGF0IHdhcyBjcmVhdGVkLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdFBhZFRlbXBsYXRlLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudEZhY3Rvcnk8L3NwYW4+PC9hPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL0dzdFBpcGVsaW5lLmh0bWwgYi9kb2NzL2dzdC9odG1sL0dzdFBpcGVsaW5lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBjYzk1OQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2h0bWwvR3N0UGlwZWxpbmUuaHRtbApAQCAtMCwwICsxLDU0NiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdzdFBpcGVsaW5lPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwiIHRpdGxlPSJHc3RQYXJzZSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjR3N0UGlwZWxpbmUuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RQaXBlbGluZS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0UGlwZWxpbmUub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RQaXBlbGluZS5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIiBjbGFzcz0ic2hvcnRjdXQiPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFBpcGVsaW5lLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJHc3RQaXBlbGluZSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9IkdzdFBpcGVsaW5lLnRvcF9vZl9wYWdlIj48L2E+R3N0UGlwZWxpbmU8L3NwYW4+PC9oMj4KKzxwPkdzdFBpcGVsaW5lIOKAlCBUb3AtbGV2ZWwgYmluIHdpdGggY2xvY2tpbmcgYW5kIGJ1cyBtYW5hZ2VtZW50CisgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkuPC9wPgorPC90ZD4KKzx0ZCB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgorPC90cj48L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGEgbmFtZT0iR3N0UGlwZWxpbmUuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKKworc3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNHc3RQaXBlbGluZS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UGlwZWxpbmUiPkdzdFBpcGVsaW5lPC9hPjsKK2VudW0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjR3N0UGlwZWxpbmVGbGFncyIgdGl0bGU9ImVudW0gR3N0UGlwZWxpbmVGbGFncyI+R3N0UGlwZWxpbmVGbGFnczwvYT47Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLW5ldyIgdGl0bGU9ImdzdF9waXBlbGluZV9uZXcgKCkiPmdzdF9waXBlbGluZV9uZXc8L2E+ICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1czwvc3Bhbj48L2E+ICogICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtZ2V0LWJ1cyIgdGl0bGU9ImdzdF9waXBlbGluZV9nZXRfYnVzICgpIj5nc3RfcGlwZWxpbmVfZ2V0X2J1czwvYT4gICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPiAqcGlwZWxpbmU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtc2V0LWNsb2NrIiB0aXRsZT0iZ3N0X3BpcGVsaW5lX3NldF9jbG9jayAoKSI+Z3N0X3BpcGVsaW5lX3NldF9jbG9jazwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4gKnBpcGVsaW5lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKiAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtZ2V0LWNsb2NrIiB0aXRsZT0iZ3N0X3BpcGVsaW5lX2dldF9jbG9jayAoKSI+Z3N0X3BpcGVsaW5lX2dldF9jbG9jazwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4gKnBpcGVsaW5lPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLXVzZS1jbG9jayIgdGl0bGU9ImdzdF9waXBlbGluZV91c2VfY2xvY2sgKCkiPmdzdF9waXBlbGluZV91c2VfY2xvY2s8L2E+ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+ICpwaXBlbGluZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqY2xvY2s8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtYXV0by1jbG9jayIgdGl0bGU9ImdzdF9waXBlbGluZV9hdXRvX2Nsb2NrICgpIj5nc3RfcGlwZWxpbmVfYXV0b19jbG9jazwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPiAqcGlwZWxpbmU8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtc2V0LWF1dG8tZmx1c2gtYnVzIiB0aXRsZT0iZ3N0X3BpcGVsaW5lX3NldF9hdXRvX2ZsdXNoX2J1cyAoKSI+Z3N0X3BpcGVsaW5lX3NldF9hdXRvX2ZsdXNoX2J1czwvYT4gICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4gKnBpcGVsaW5lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gYXV0b19mbHVzaDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1nZXQtYXV0by1mbHVzaC1idXMiIHRpdGxlPSJnc3RfcGlwZWxpbmVfZ2V0X2F1dG9fZmx1c2hfYnVzICgpIj5nc3RfcGlwZWxpbmVfZ2V0X2F1dG9fZmx1c2hfYnVzPC9hPiAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPiAqcGlwZWxpbmU8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtc2V0LWRlbGF5IiB0aXRsZT0iZ3N0X3BpcGVsaW5lX3NldF9kZWxheSAoKSI+Z3N0X3BpcGVsaW5lX3NldF9kZWxheTwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4gKnBpcGVsaW5lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IGRlbGF5PC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLWdldC1kZWxheSIgdGl0bGU9ImdzdF9waXBlbGluZV9nZXRfZGVsYXkgKCkiPmdzdF9waXBlbGluZV9nZXRfZGVsYXk8L2E+ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+ICpwaXBlbGluZTwvY29kZT48L2VtPik7Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0UGlwZWxpbmUub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPkdPYmplY3Q8L2E+CisgICArLS0tLTxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+CisgICAgICAgICArLS0tLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+R3N0T2JqZWN0PC9hPgorICAgICAgICAgICAgICAgKy0tLS08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICstLS0tPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj5Hc3RCaW48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLUdzdFBpcGVsaW5lCis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0UGlwZWxpbmUuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KKzxwPgorR3N0UGlwZWxpbmUgaW1wbGVtZW50cworIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij5Hc3RDaGlsZFByb3h5PC9hPi48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdFBpcGVsaW5lLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNHc3RQaXBlbGluZS0tYXV0by1mbHVzaC1idXMiIHRpdGxlPSdUaGUgImF1dG8tZmx1c2gtYnVzIiBwcm9wZXJ0eSc+YXV0by1mbHVzaC1idXM8L2E+IiAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI0dzdFBpcGVsaW5lLS1kZWxheSIgdGl0bGU9J1RoZSAiZGVsYXkiIHByb3BlcnR5Jz5kZWxheTwvYT4iICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0UGlwZWxpbmUuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitBIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+IGlzIGEgc3BlY2lhbCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiB1c2VkIGFzIHRoZSB0b3BsZXZlbCBjb250YWluZXIgZm9yCit0aGUgZmlsdGVyIGdyYXBoLiBUaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4gd2lsbCBtYW5hZ2UgdGhlIHNlbGVjdGlvbiBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiBhIGdsb2JhbCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiBhcyB3ZWxsIGFzIHByb3ZpZGUgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiB0byB0aGUKK2FwcGxpY2F0aW9uLiBJdCB3aWxsIGFsc28gaW1wbGVtZW50IGEgZGVmYXVsdCBiZWhhdmlvdXIgZm9yIG1hbmFnaW5nCitzZWVrIGV2ZW50cyAoc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2VlayIgdGl0bGU9ImdzdF9lbGVtZW50X3NlZWsgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfc2VlaygpPC9jb2RlPjwvYT4pLgorPC9wPgorPHA+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtbmV3IiB0aXRsZT0iZ3N0X3BpcGVsaW5lX25ldyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGlwZWxpbmVfbmV3KCk8L2NvZGU+PC9hPiBpcyB1c2VkIHRvIGNyZWF0ZSBhIHBpcGVsaW5lLiB3aGVuIHlvdSBhcmUgZG9uZSB3aXRoCit0aGUgcGlwZWxpbmUsIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC11bnJlZiIgdGl0bGU9ImdzdF9vYmplY3RfdW5yZWYgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X29iamVjdF91bnJlZigpPC9jb2RlPjwvYT4gdG8gZnJlZSBpdHMgcmVzb3VyY2VzIGluY2x1ZGluZyBhbGwKK2FkZGVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IG9iamVjdHMgKGlmIG5vdCBvdGhlcndpc2UgcmVmZXJlbmNlZCkuCis8L3A+Cis8cD4KK0VsZW1lbnRzIGFyZSBhZGRlZCBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBwaXBlbGluZSB1c2luZyB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4KK21ldGhvZHMgbGlrZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjZ3N0LWJpbi1hZGQiIHRpdGxlPSJnc3RfYmluX2FkZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmluX2FkZCgpPC9jb2RlPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLXJlbW92ZSIgdGl0bGU9ImdzdF9iaW5fcmVtb3ZlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iaW5fcmVtb3ZlKCk8L2NvZGU+PC9hPiAoc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+KS4KKzwvcD4KKzxwPgorQmVmb3JlIGNoYW5naW5nIHRoZSBzdGF0ZSBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4gKHNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPikgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPgorY2FuIGJlIHJldHJpZXZlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1nZXQtYnVzIiB0aXRsZT0iZ3N0X3BpcGVsaW5lX2dldF9idXMgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BpcGVsaW5lX2dldF9idXMoKTwvY29kZT48L2E+LiBUaGlzIGJ1cyBjYW4gdGhlbiBiZQordXNlZCB0byByZWNlaXZlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBmcm9tIHRoZSBlbGVtZW50cyBpbiB0aGUgcGlwZWxpbmUuCis8L3A+Cis8cD4KK0J5IGRlZmF1bHQsIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4gd2lsbCBhdXRvbWF0aWNhbGx5IGZsdXNoIHRoZSBwZW5kaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+CittZXNzYWdlcyB3aGVuIGdvaW5nIHRvIHRoZSBOVUxMIHN0YXRlIHRvIGVuc3VyZSB0aGF0IG5vIGNpcmN1bGFyCityZWZlcmVuY2VzIGV4aXN0IHdoZW4gbm8gbWVzc2FnZXMgYXJlIHJlYWQgZnJvbSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4uIFRoaXMKK2JlaGF2aW91ciBjYW4gYmUgY2hhbmdlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1zZXQtYXV0by1mbHVzaC1idXMiIHRpdGxlPSJnc3RfcGlwZWxpbmVfc2V0X2F1dG9fZmx1c2hfYnVzICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9waXBlbGluZV9zZXRfYXV0b19mbHVzaF9idXMoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitXaGVuIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPiBwZXJmb3JtcyB0aGUgUEFVU0VEIHRvIFBMQVlJTkcgc3RhdGUgY2hhbmdlIGl0IHdpbGwKK3NlbGVjdCBhIGNsb2NrIGZvciB0aGUgZWxlbWVudHMuIFRoZSBjbG9jayBzZWxlY3Rpb24gYWxnb3JpdGhtIHdpbGwgYnkKK2RlZmF1bHQgc2VsZWN0IGEgY2xvY2sgcHJvdmlkZWQgYnkgYW4gZWxlbWVudCB0aGF0IGlzIG1vc3QgdXBzdHJlYW0KKyhjbG9zZXN0IHRvIHRoZSBzb3VyY2UpLiBGb3IgbGl2ZSBwaXBlbGluZXMgKG9uZXMgdGhhdCByZXR1cm4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUNIQU5HRS1OTy1QUkVST0xMOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEw8L3NwYW4+PC9hPiBmcm9tIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1zdGF0ZSIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9zdGF0ZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9zZXRfc3RhdGUoKTwvY29kZT48L2E+IGNhbGwpIHRoaXMKK3dpbGwgc2VsZWN0IHRoZSBjbG9jayBwcm92aWRlZCBieSB0aGUgbGl2ZSBzb3VyY2UuIEZvciBub3JtYWwgcGlwZWxpbmVzCit0aGlzIHdpbGwgc2VsZWN0IGEgY2xvY2sgcHJvdmlkZWQgYnkgdGhlIHNpbmtzIChtb3N0IGxpa2VseSB0aGUgYXVkaW8KK3NpbmspLiBJZiBubyBlbGVtZW50IHByb3ZpZGVzIGEgY2xvY2ssIGEgZGVmYXVsdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3lzdGVtQ2xvY2suaHRtbCIgdGl0bGU9IkdzdFN5c3RlbUNsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3lzdGVtQ2xvY2s8L3NwYW4+PC9hPiBpcyB1c2VkLgorPC9wPgorPHA+CitUaGUgY2xvY2sgc2VsZWN0aW9uIGNhbiBiZSBjb250cm9sbGVkIHdpdGggdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS11c2UtY2xvY2siIHRpdGxlPSJnc3RfcGlwZWxpbmVfdXNlX2Nsb2NrICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9waXBlbGluZV91c2VfY2xvY2soKTwvY29kZT48L2E+CittZXRob2QsIHdoaWNoIHdpbGwgZW5mb3JjZSBhIGdpdmVuIGNsb2NrIG9uIHRoZSBwaXBlbGluZS4gV2l0aAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLWF1dG8tY2xvY2siIHRpdGxlPSJnc3RfcGlwZWxpbmVfYXV0b19jbG9jayAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGlwZWxpbmVfYXV0b19jbG9jaygpPC9jb2RlPjwvYT4gdGhlIGRlZmF1bHQgY2xvY2sgc2VsZWN0aW9uIGFsZ29yaXRobSBjYW4gYmUKK3Jlc3RvcmVkLgorPC9wPgorPHA+CitBIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+IG1haW50YWlucyBhIHJ1bm5pbmcgdGltZSBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgcnVubmluZwordGltZSBpcyBkZWZpbmVkIGFzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGN1cnJlbnQgY2xvY2sgdGltZSBhbmQKK3RoZSBiYXNlIHRpbWUuIFdoZW4gdGhlIHBpcGVsaW5lIGdvZXMgdG8gUkVBRFkgb3IgYSBmbHVzaGluZyBzZWVrIGlzCitwZXJmb3JtZWQgb24gaXQsIHRoZSBydW5uaW5nIHRpbWUgaXMgcmVzZXQgdG8gMC4gV2hlbiB0aGUgcGlwZWxpbmUgaXMKK3NldCBmcm9tIFBMQVlJTkcgdG8gUEFVU0VELCB0aGUgY3VycmVudCBjbG9jayB0aW1lIGlzIHNhbXBsZWQgYW5kIHVzZWQgdG8KK2NvbmZpZ3VyZSB0aGUgYmFzZSB0aW1lIGZvciB0aGUgZWxlbWVudHMgd2hlbiB0aGUgcGlwZWxpbmUgaXMgc2V0Cit0byBQTEFZSU5HIGFnYWluLiBUaGUgZWZmZWN0IGlzIHRoYXQgdGhlIHJ1bm5pbmcgdGltZSAoYXMgdGhlIGRpZmZlcmVuY2UKK2JldHdlZW4gdGhlIGNsb2NrIHRpbWUgYW5kIHRoZSBiYXNlIHRpbWUpIHdpbGwgY291bnQgaG93IG11Y2ggdGltZSB3YXMgc3BlbnQKK2luIHRoZSBQTEFZSU5HIHN0YXRlLiBUaGlzIGRlZmF1bHQgYmVoYXZpb3VyIGNhbiBiZSBjaGFuZ2VkIHdpdGggdGhlCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1zdGFydC10aW1lIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2V0X3N0YXJ0X3RpbWUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfc2V0X3N0YXJ0X3RpbWUoKTwvY29kZT48L2E+IG1ldGhvZC4KKzwvcD4KKzxwPgorV2hlbiBzZW5kaW5nIGEgZmx1c2hpbmcgc2VlayBldmVudCB0byBhIEdzdFBpcGVsaW5lIChzZWUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2VlayIgdGl0bGU9ImdzdF9lbGVtZW50X3NlZWsgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfc2VlaygpPC9jb2RlPjwvYT4pLCBpdCB3aWxsIG1ha2Ugc3VyZSB0aGF0IHRoZSBwaXBlbGluZSBpcyBwcm9wZXJseQorUEFVU0VEIGFuZCByZXN1bWVkIGFzIHdlbGwgYXMgc2V0IHRoZSBuZXcgcnVubmluZyB0aW1lIHRvIDAgd2hlbiB0aGUKK3NlZWsgc3VjY2VlZGVkLgorPC9wPgorPHA+CitMYXN0IHJldmlld2VkIG9uIDIwMDktMDUtMjkgKDAuMTAuMjQpCis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdFBpcGVsaW5lLmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RQaXBlbGluZS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFBpcGVsaW5lPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UGlwZWxpbmUgeworICBHc3RDbG9jayAgICAgICpmaXhlZF9jbG9jazsKKworICBHc3RDbG9ja1RpbWUgICBzdHJlYW1fdGltZTsJCisgIEdzdENsb2NrVGltZSAgIGRlbGF5OworfTsKKzwvcHJlPgorPHA+CitUaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4gc3RydWN0dXJlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQaXBlbGluZS1zdHJ1Y3QuZml4ZWQtY2xvY2siPjwvYT5maXhlZF9jbG9jazwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGZpeGVkIGNsb2NrIG9mIHRoZSBwaXBlbGluZSwgdXNlZCB3aGVuCitHU1RfUElQRUxJTkVfRkxBR19GSVhFRF9DTE9DSyBpcyBzZXQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQaXBlbGluZS1zdHJ1Y3Quc3RyZWFtLXRpbWUiPjwvYT5zdHJlYW1fdGltZTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIHN0cmVhbSB0aW1lIG9mIHRoZSBwaXBlbGluZS4gQSBiZXR0ZXIgbmFtZSBmb3IgdGhpcworcHJvcGVydHkgd291bGQgYmUgdGhlIHJ1bm5pbmdfdGltZSwgdGhlIHRvdGFsIHRpbWUgc3BlbnQgaW4gdGhlCitQTEFZSU5HIHN0YXRlIHdpdGhvdXQgYmVpbmcgZmx1c2hlZC4gKGRlcHJlY2F0ZWQsIHVzZSB0aGUgc3RhcnRfdGltZQorb24gR3N0RWxlbWVudCkuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQaXBlbGluZS1zdHJ1Y3QuZGVsYXkiPjwvYT5kZWxheTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+RXh0cmEgZGVsYXkgYWRkZWQgdG8gYmFzZV90aW1lIHRvIGNvbXBlbnNhdGUgZm9yIGNvbXB1dGluZyBkZWxheXMKK3doZW4gc2V0dGluZyBlbGVtZW50cyB0byBQTEFZSU5HLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFBpcGVsaW5lRmxhZ3MiPjwvYT48aDM+ZW51bSBHc3RQaXBlbGluZUZsYWdzPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGVudW0geworICBHU1RfUElQRUxJTkVfRkxBR19GSVhFRF9DTE9DSyAgICAgICAgPSAoR1NUX0JJTl9GTEFHX0xBU1QgJmx0OyZsdDsgMCksCisgIC8qIHBhZGRpbmcgKi8KKyAgR1NUX1BJUEVMSU5FX0ZMQUdfTEFTVCAgICAgICAgICAgICAgID0gKEdTVF9CSU5fRkxBR19MQVNUICZsdDsmbHQ7IDQpCit9IEdzdFBpcGVsaW5lRmxhZ3M7Cis8L3ByZT4KKzxwPgorUGlwZWxpbmUgZmxhZ3MKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVBJUEVMSU5FLUZMQUctRklYRUQtQ0xPQ0s6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BJUEVMSU5FX0ZMQUdfRklYRURfQ0xPQ0s8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoaXMgcGlwZWxpbmUgd29ya3Mgd2l0aCBhIGZpeGVkIGNsb2NrCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUElQRUxJTkUtRkxBRy1MQVNUOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9QSVBFTElORV9GTEFHX0xBU1Q8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPm9mZnNldCB0byBkZWZpbmUgbW9yZSBmbGFncworPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBpcGVsaW5lLW5ldyI+PC9hPjxoMz5nc3RfcGlwZWxpbmVfbmV3ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKiAgICAgICAgZ3N0X3BpcGVsaW5lX25ldyAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlIGEgbmV3IHBpcGVsaW5lIHdpdGggdGhlIGdpdmVuIG5hbWUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5uYW1lIG9mIG5ldyBwaXBlbGluZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm5ld2x5IGNyZWF0ZWQgR3N0UGlwZWxpbmUKK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGlwZWxpbmUtZ2V0LWJ1cyI+PC9hPjxoMz5nc3RfcGlwZWxpbmVfZ2V0X2J1cyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1czwvc3Bhbj48L2E+ICogICAgICAgICAgICBnc3RfcGlwZWxpbmVfZ2V0X2J1cyAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+ICpwaXBlbGluZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5waXBlbGluZTwvY29kZT48L2VtPi4gVGhlIGJ1cyBhbGxvd3MgYXBwbGljYXRpb25zIHRvIHJlY2VpdmUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBwYWNrZXRzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBpcGVsaW5lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4sIHVucmVmIGFmdGVyIHVzYWdlLgorTVQgc2FmZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1waXBlbGluZS1zZXQtY2xvY2siPjwvYT48aDM+Z3N0X3BpcGVsaW5lX3NldF9jbG9jayAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfcGlwZWxpbmVfc2V0X2Nsb2NrICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+ICpwaXBlbGluZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqY2xvY2s8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXQgdGhlIGNsb2NrIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGlwZWxpbmU8L2NvZGU+PC9lbT4uIFRoZSBjbG9jayB3aWxsIGJlIGRpc3RyaWJ1dGVkCit0byBhbGwgdGhlIGVsZW1lbnRzIG1hbmFnZWQgYnkgdGhlIHBpcGVsaW5lLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBpcGVsaW5lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGNsb2NrIHRvIHNldC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIGNsb2NrIGNvdWxkIGJlIHNldCBvbiB0aGUgcGlwZWxpbmUuIEZBTFNFIGlmCitzb21lIGVsZW1lbnQgZGlkIG5vdCBhY2NlcHQgdGhlIGNsb2NrLgorTVQgc2FmZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGlwZWxpbmUtZ2V0LWNsb2NrIj48L2E+PGgzPmdzdF9waXBlbGluZV9nZXRfY2xvY2sgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqICAgICAgICAgIGdzdF9waXBlbGluZV9nZXRfY2xvY2sgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4gKnBpcGVsaW5lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgY3VycmVudCBjbG9jayB1c2VkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5waXBlbGluZTwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5waXBlbGluZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+LCB1bnJlZiBhZnRlciB1c2FnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1waXBlbGluZS11c2UtY2xvY2siPjwvYT48aDM+Z3N0X3BpcGVsaW5lX3VzZV9jbG9jayAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcGlwZWxpbmVfdXNlX2Nsb2NrICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+ICpwaXBlbGluZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqY2xvY2s8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitGb3JjZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGlwZWxpbmU8L2NvZGU+PC9lbT4gdG8gdXNlIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT4uIFRoZSBwaXBlbGluZSB3aWxsCithbHdheXMgdXNlIHRoZSBnaXZlbiBjbG9jayBldmVuIGlmIG5ldyBjbG9jayBwcm92aWRlcnMgYXJlIGFkZGVkCit0byB0aGlzIHBpcGVsaW5lLgorPC9wPgorPHA+CitJZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT4gaXMgTlVMTCBhbGwgY2xvY2tpbmcgd2lsbCBiZSBkaXNhYmxlZCB3aGljaCB3aWxsIG1ha2UKK3RoZSBwaXBlbGluZSBydW4gYXMgZmFzdCBhcyBwb3NzaWJsZS4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5waXBlbGluZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsb2NrPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjbG9jayB0byB1c2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGlwZWxpbmUtYXV0by1jbG9jayI+PC9hPjxoMz5nc3RfcGlwZWxpbmVfYXV0b19jbG9jayAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcGlwZWxpbmVfYXV0b19jbG9jayAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+ICpwaXBlbGluZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0xldCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGlwZWxpbmU8L2NvZGU+PC9lbT4gc2VsZWN0IGEgY2xvY2sgYXV0b21hdGljYWxseS4gVGhpcyBpcyB0aGUgZGVmYXVsdAorYmVoYXZpb3VyLgorPC9wPgorPHA+CitVc2UgdGhpcyBmdW5jdGlvbiBpZiB5b3UgcHJldmlvdXMgZm9yY2VkIGEgZml4ZWQgY2xvY2sgd2l0aAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLXVzZS1jbG9jayIgdGl0bGU9ImdzdF9waXBlbGluZV91c2VfY2xvY2sgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BpcGVsaW5lX3VzZV9jbG9jaygpPC9jb2RlPjwvYT4gYW5kIHdhbnQgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdAorcGlwZWxpbmUgY2xvY2sgc2VsZWN0aW9uIGFsZ29yaXRobS4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGlwZWxpbmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1waXBlbGluZS1zZXQtYXV0by1mbHVzaC1idXMiPjwvYT48aDM+Z3N0X3BpcGVsaW5lX3NldF9hdXRvX2ZsdXNoX2J1cyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcGlwZWxpbmVfc2V0X2F1dG9fZmx1c2hfYnVzICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+ICpwaXBlbGluZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGF1dG9fZmx1c2g8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitVc3VhbGx5LCB3aGVuIGEgcGlwZWxpbmUgZ29lcyBmcm9tIFJFQURZIHRvIE5VTEwgc3RhdGUsIGl0IGF1dG9tYXRpY2FsbHkKK2ZsdXNoZXMgYWxsIHBlbmRpbmcgbWVzc2FnZXMgb24gdGhlIGJ1cywgd2hpY2ggaXMgZG9uZSBmb3IgcmVmY291bnRpbmcKK3B1cnBvc2VzLCB0byBicmVhayBjaXJjdWxhciByZWZlcmVuY2VzLgorPC9wPgorPHA+CitUaGlzIG1lYW5zIHRoYXQgYXBwbGljYXRpb25zIHRoYXQgdXBkYXRlIHN0YXRlIHVzaW5nIChhc3luYykgYnVzIG1lc3NhZ2VzCisoZS5nLiBkbyBjZXJ0YWluIHRoaW5ncyB3aGVuIGEgcGlwZWxpbmUgZ29lcyBmcm9tIFBBVVNFRCB0byBSRUFEWSkgbWlnaHQKK25vdCBnZXQgdG8gc2VlIG1lc3NhZ2VzIHdoZW4gdGhlIHBpcGVsaW5lIGlzIHNodXQgZG93biwgYmVjYXVzZSB0aGV5IG1pZ2h0CitiZSBmbHVzaGVkIGJlZm9yZSB0aGV5IGNhbiBiZSBkaXNwYXRjaGVkIGluIHRoZSBtYWluIHRocmVhZC4gVGhpcyBiZWhhdmlvdXIKK2NhbiBiZSBkaXNhYmxlZCB1c2luZyB0aGlzIGZ1bmN0aW9uLgorPC9wPgorPHA+CitJdCBpcyBpbXBvcnRhbnQgdGhhdCBhbGwgbWVzc2FnZXMgb24gdGhlIGJ1cyBhcmUgaGFuZGxlZCB3aGVuIHRoZQorYXV0b21hdGljIGZsdXNoaW5nIGlzIGRpc2FibGVkIGVsc2UgbWVtb3J5IGxlYWtzIHdpbGwgYmUgaW50cm9kdWNlZC4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5waXBlbGluZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmF1dG9fZmx1c2g8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+d2hldGhlciBvciBub3QgdG8gYXV0b21hdGljYWxseSBmbHVzaCB0aGUgYnVzIHdoZW4KK3RoZSBwaXBlbGluZSBnb2VzIGZyb20gUkVBRFkgdG8gTlVMTCBzdGF0ZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBpcGVsaW5lLWdldC1hdXRvLWZsdXNoLWJ1cyI+PC9hPjxoMz5nc3RfcGlwZWxpbmVfZ2V0X2F1dG9fZmx1c2hfYnVzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9waXBlbGluZV9nZXRfYXV0b19mbHVzaF9idXMgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4gKnBpcGVsaW5lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2sgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBpcGVsaW5lPC9jb2RlPjwvZW0+IHdpbGwgYXV0b21hdGljYWxseSBmbHVzaCBtZXNzYWdlcyB3aGVuIGdvaW5nIHRvCit0aGUgTlVMTCBzdGF0ZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5waXBlbGluZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD53aGV0aGVyIHRoZSBwaXBlbGluZSB3aWxsIGF1dG9tYXRpY2FsbHkgZmx1c2ggaXRzIGJ1cyB3aGVuCitnb2luZyBmcm9tIFJFQURZIHRvIE5VTEwgc3RhdGUgb3Igbm90LgorTVQgc2FmZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1waXBlbGluZS1zZXQtZGVsYXkiPjwvYT48aDM+Z3N0X3BpcGVsaW5lX3NldF9kZWxheSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcGlwZWxpbmVfc2V0X2RlbGF5ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+ICpwaXBlbGluZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiBkZWxheTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldCB0aGUgZXhwZWN0ZWQgZGVsYXkgbmVlZGVkIGZvciBhbGwgZWxlbWVudHMgdG8gcGVyZm9ybSB0aGUKK1BBVVNFRCB0byBQTEFZSU5HIHN0YXRlIGNoYW5nZS4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlbGF5PC9jb2RlPjwvZW0+IHdpbGwgYmUgYWRkZWQgdG8gdGhlCitiYXNlIHRpbWUgb2YgdGhlIGVsZW1lbnRzIHNvIHRoYXQgdGhleSB3YWl0IGFuIGFkZGl0aW9uYWwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlbGF5PC9jb2RlPjwvZW0+CithbW91bnQgb2YgdGltZSBiZWZvcmUgc3RhcnRpbmcgdG8gcHJvY2VzcyBidWZmZXJzIGFuZCBjYW5ub3QgYmUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1USU1FLU5PTkU6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19USU1FX05PTkUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfQ0xPQ0tfVElNRV9OT05FPC9zcGFuPjwvYT4uCis8L3A+Cis8cD4KK1RoaXMgb3B0aW9uIGlzIHVzZWQgZm9yIHR1bmluZyBwdXJwb3NlcyBhbmQgc2hvdWxkIG5vcm1hbGx5IG5vdCBiZQordXNlZC4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5waXBlbGluZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlbGF5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBkZWxheTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBpcGVsaW5lLWdldC1kZWxheSI+PC9hPjxoMz5nc3RfcGlwZWxpbmVfZ2V0X2RlbGF5ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gICAgICAgIGdzdF9waXBlbGluZV9nZXRfZGVsYXkgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4gKnBpcGVsaW5lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0IHRoZSBjb25maWd1cmVkIGRlbGF5IChzZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLXNldC1kZWxheSIgdGl0bGU9ImdzdF9waXBlbGluZV9zZXRfZGVsYXkgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BpcGVsaW5lX3NldF9kZWxheSgpPC9jb2RlPjwvYT4pLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBpcGVsaW5lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBjb25maWd1cmVkIGRlbGF5LgorTVQgc2FmZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjU8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0UGlwZWxpbmUucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFBpcGVsaW5lLS1hdXRvLWZsdXNoLWJ1cyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJhdXRvLWZsdXNoLWJ1cyI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJhdXRvLWZsdXNoLWJ1cyIgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD4KK1doZXRoZXIgb3Igbm90IHRvIGF1dG9tYXRpY2FsbHkgZmx1c2ggYWxsIG1lc3NhZ2VzIG9uIHRoZQorcGlwZWxpbmUncyBidXMgd2hlbiBnb2luZyBmcm9tIFJFQURZIHRvIE5VTEwgc3RhdGUuIFBsZWFzZSBzZWUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1zZXQtYXV0by1mbHVzaC1idXMiIHRpdGxlPSJnc3RfcGlwZWxpbmVfc2V0X2F1dG9fZmx1c2hfYnVzICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9waXBlbGluZV9zZXRfYXV0b19mbHVzaF9idXMoKTwvY29kZT48L2E+IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgb3B0aW9uLgorPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC40PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RQaXBlbGluZS0tZGVsYXkiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4iZGVsYXkiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiZGVsYXkiICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD4KK1RoZSBleHBlY3RlZCBkZWxheSBuZWVkZWQgZm9yIGVsZW1lbnRzIHRvIHNwaW4gdXAgdG8gdGhlCitQTEFZSU5HIHN0YXRlIGV4cHJlc3NlZCBpbiBuYW5vc2Vjb25kcy4KK3NlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtc2V0LWRlbGF5IiB0aXRsZT0iZ3N0X3BpcGVsaW5lX3NldF9kZWxheSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGlwZWxpbmVfc2V0X2RlbGF5KCk8L2NvZGU+PC9hPiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIG9wdGlvbi4KKzwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuNTwvcD4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RQaXBlbGluZS5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL0dzdFBsdWdpbi5odG1sIGIvZG9jcy9nc3QvaHRtbC9Hc3RQbHVnaW4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2IyMTM2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9nc3QvaHRtbC9Hc3RQbHVnaW4uaHRtbApAQCAtMCwwICsxLDEyMTUgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5Hc3RQbHVnaW48L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjR3N0UGx1Z2luLnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0UGx1Z2luLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RQbHVnaW4ub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9IkdzdFBsdWdpbiI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9IkdzdFBsdWdpbi50b3Bfb2ZfcGFnZSI+PC9hPkdzdFBsdWdpbjwvc3Bhbj48L2gyPgorPHA+R3N0UGx1Z2luIOKAlCBDb250YWluZXIgZm9yIGZlYXR1cmVzIGxvYWRlZCBmcm9tIGEgc2hhcmVkIG9iamVjdCBtb2R1bGU8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJHc3RQbHVnaW4uc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKKworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1F1YXJrPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWVycm9yLXF1YXJrIiB0aXRsZT0iZ3N0X3BsdWdpbl9lcnJvcl9xdWFyayAoKSI+Z3N0X3BsdWdpbl9lcnJvcl9xdWFyazwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTsKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dTVC1QTFVHSU4tRVJST1I6Q0FQUyIgdGl0bGU9IkdTVF9QTFVHSU5fRVJST1IiPkdTVF9QTFVHSU5fRVJST1I8L2E+CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5FcnJvciIgdGl0bGU9ImVudW0gR3N0UGx1Z2luRXJyb3IiPkdzdFBsdWdpbkVycm9yPC9hPjsKK3N0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbi1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UGx1Z2luIj5Hc3RQbHVnaW48L2E+Oworc3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjR3N0UGx1Z2luRGVzYyIgdGl0bGU9InN0cnVjdCBHc3RQbHVnaW5EZXNjIj5Hc3RQbHVnaW5EZXNjPC9hPjsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5Jbml0RnVuYyIgdGl0bGU9IkdzdFBsdWdpbkluaXRGdW5jICgpIj4qR3N0UGx1Z2luSW5pdEZ1bmM8L2E+KSAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+ICpwbHVnaW48L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkluaXRGdWxsRnVuYyIgdGl0bGU9IkdzdFBsdWdpbkluaXRGdWxsRnVuYyAoKSI+KkdzdFBsdWdpbkluaXRGdWxsRnVuYzwvYT4pICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqcGx1Z2luPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTsKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dTVC1QTFVHSU4tREVGSU5FOkNBUFMiIHRpdGxlPSJHU1RfUExVR0lOX0RFRklORSgpIj5HU1RfUExVR0lOX0RFRklORTwvYT4gICAgICAgICAgICAgICAgICAgKG1ham9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlub3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjR1NULUxJQ0VOU0UtVU5LTk9XTjpDQVBTIiB0aXRsZT0iR1NUX0xJQ0VOU0VfVU5LTk9XTiI+R1NUX0xJQ0VOU0VfVU5LTk9XTjwvYT4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5GaWx0ZXIiIHRpdGxlPSJHc3RQbHVnaW5GaWx0ZXIgKCkiPipHc3RQbHVnaW5GaWx0ZXI8L2E+KSAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gKnBsdWdpbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7Citjb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWdldC1uYW1lIiB0aXRsZT0iZ3N0X3BsdWdpbl9nZXRfbmFtZSAoKSI+Z3N0X3BsdWdpbl9nZXRfbmFtZTwvYT4gICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gKnBsdWdpbjwvY29kZT48L2VtPik7Citjb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWdldC1kZXNjcmlwdGlvbiIgdGl0bGU9ImdzdF9wbHVnaW5fZ2V0X2Rlc2NyaXB0aW9uICgpIj5nc3RfcGx1Z2luX2dldF9kZXNjcmlwdGlvbjwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqcGx1Z2luPC9jb2RlPjwvZW0+KTsKK2NvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICogICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tZ2V0LWZpbGVuYW1lIiB0aXRsZT0iZ3N0X3BsdWdpbl9nZXRfZmlsZW5hbWUgKCkiPmdzdF9wbHVnaW5fZ2V0X2ZpbGVuYW1lPC9hPiAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+ICpwbHVnaW48L2NvZGU+PC9lbT4pOworY29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1nZXQtbGljZW5zZSIgdGl0bGU9ImdzdF9wbHVnaW5fZ2V0X2xpY2Vuc2UgKCkiPmdzdF9wbHVnaW5fZ2V0X2xpY2Vuc2U8L2E+ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+ICpwbHVnaW48L2NvZGU+PC9lbT4pOworY29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1nZXQtcGFja2FnZSIgdGl0bGU9ImdzdF9wbHVnaW5fZ2V0X3BhY2thZ2UgKCkiPmdzdF9wbHVnaW5fZ2V0X3BhY2thZ2U8L2E+ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+ICpwbHVnaW48L2NvZGU+PC9lbT4pOworY29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1nZXQtb3JpZ2luIiB0aXRsZT0iZ3N0X3BsdWdpbl9nZXRfb3JpZ2luICgpIj5nc3RfcGx1Z2luX2dldF9vcmlnaW48L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqcGx1Z2luPC9jb2RlPjwvZW0+KTsKK2NvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICogICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tZ2V0LXNvdXJjZSIgdGl0bGU9ImdzdF9wbHVnaW5fZ2V0X3NvdXJjZSAoKSI+Z3N0X3BsdWdpbl9nZXRfc291cmNlPC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gKnBsdWdpbjwvY29kZT48L2VtPik7Citjb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWdldC12ZXJzaW9uIiB0aXRsZT0iZ3N0X3BsdWdpbl9nZXRfdmVyc2lvbiAoKSI+Z3N0X3BsdWdpbl9nZXRfdmVyc2lvbjwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gKnBsdWdpbjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUR5bmFtaWMtTG9hZGluZy1vZi1Nb2R1bGVzLmh0bWwjR01vZHVsZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HTW9kdWxlPC9zcGFuPjwvYT4gKiAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tZ2V0LW1vZHVsZSIgdGl0bGU9ImdzdF9wbHVnaW5fZ2V0X21vZHVsZSAoKSI+Z3N0X3BsdWdpbl9nZXRfbW9kdWxlPC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gKnBsdWdpbjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWlzLWxvYWRlZCIgdGl0bGU9ImdzdF9wbHVnaW5faXNfbG9hZGVkICgpIj5nc3RfcGx1Z2luX2lzX2xvYWRlZDwvYT4gICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqcGx1Z2luPC9jb2RlPjwvZW0+KTsKK2NvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWdldC1jYWNoZS1kYXRhIiB0aXRsZT0iZ3N0X3BsdWdpbl9nZXRfY2FjaGVfZGF0YSAoKSI+Z3N0X3BsdWdpbl9nZXRfY2FjaGVfZGF0YTwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqcGx1Z2luPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tc2V0LWNhY2hlLWRhdGEiIHRpdGxlPSJnc3RfcGx1Z2luX3NldF9jYWNoZV9kYXRhICgpIj5nc3RfcGx1Z2luX3NldF9jYWNoZV9kYXRhPC9hPiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqcGx1Z2luPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpjYWNoZV9kYXRhPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tbmFtZS1maWx0ZXIiIHRpdGxlPSJnc3RfcGx1Z2luX25hbWVfZmlsdGVyICgpIj5nc3RfcGx1Z2luX25hbWVfZmlsdGVyPC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqcGx1Z2luPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+ICogICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1sb2FkLWZpbGUiIHRpdGxlPSJnc3RfcGx1Z2luX2xvYWRfZmlsZSAoKSI+Z3N0X3BsdWdpbl9sb2FkX2ZpbGU8L2E+ICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmlsZW5hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1FcnJvci1SZXBvcnRpbmcuaHRtbCNHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRXJyb3I8L3NwYW4+PC9hPiAqKmVycm9yPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tbG9hZCIgdGl0bGU9ImdzdF9wbHVnaW5fbG9hZCAoKSI+Z3N0X3BsdWdpbl9sb2FkPC9hPiAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gKnBsdWdpbjwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gKiAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWxvYWQtYnktbmFtZSIgdGl0bGU9ImdzdF9wbHVnaW5fbG9hZF9ieV9uYW1lICgpIj5nc3RfcGx1Z2luX2xvYWRfYnlfbmFtZTwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tbGlzdC1mcmVlIiB0aXRsZT0iZ3N0X3BsdWdpbl9saXN0X2ZyZWUgKCkiPmdzdF9wbHVnaW5fbGlzdF9mcmVlPC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLXJlZ2lzdGVyLXN0YXRpYyIgdGl0bGU9ImdzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljICgpIj5nc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpYzwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBtYWpvcl92ZXJzaW9uPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG1pbm9yX3ZlcnNpb248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpkZXNjcmlwdGlvbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjR3N0UGx1Z2luSW5pdEZ1bmMiIHRpdGxlPSJHc3RQbHVnaW5Jbml0RnVuYyAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkluaXRGdW5jPC9zcGFuPjwvYT4gaW5pdF9mdW5jPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnZlcnNpb248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbGljZW5zZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpzb3VyY2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqcGFja2FnZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpvcmlnaW48L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1yZWdpc3Rlci1zdGF0aWMtZnVsbCIgdGl0bGU9ImdzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljX2Z1bGwgKCkiPmdzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljX2Z1bGw8L2E+ICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG1ham9yX3ZlcnNpb248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbWlub3JfdmVyc2lvbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmRlc2NyaXB0aW9uPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5Jbml0RnVsbEZ1bmMiIHRpdGxlPSJHc3RQbHVnaW5Jbml0RnVsbEZ1bmMgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5Jbml0RnVsbEZ1bmM8L3NwYW4+PC9hPiBpbml0X2Z1bGxfZnVuYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp2ZXJzaW9uPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmxpY2Vuc2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqc291cmNlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnBhY2thZ2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqb3JpZ2luPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTsKKworZW51bSAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjR3N0UGx1Z2luRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFBsdWdpbkZsYWdzIj5Hc3RQbHVnaW5GbGFnczwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFBsdWdpbkRlcGVuZGVuY3lGbGFncyI+R3N0UGx1Z2luRGVwZW5kZW5jeUZsYWdzPC9hPjsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tYWRkLWRlcGVuZGVuY3kiIHRpdGxlPSJnc3RfcGx1Z2luX2FkZF9kZXBlbmRlbmN5ICgpIj5nc3RfcGx1Z2luX2FkZF9kZXBlbmRlbmN5PC9hPiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqcGx1Z2luPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKiplbnZfdmFyczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqcGF0aHM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKm5hbWVzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFBsdWdpbkRlcGVuZGVuY3lGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkRlcGVuZGVuY3lGbGFnczwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tYWRkLWRlcGVuZGVuY3ktc2ltcGxlIiB0aXRsZT0iZ3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jeV9zaW1wbGUgKCkiPmdzdF9wbHVnaW5fYWRkX2RlcGVuZGVuY3lfc2ltcGxlPC9hPiAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+ICpwbHVnaW48L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZW52X3ZhcnM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqcGF0aHM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZXM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkRlcGVuZGVuY3lGbGFncyIgdGl0bGU9ImVudW0gR3N0UGx1Z2luRGVwZW5kZW5jeUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRGVwZW5kZW5jeUZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4pOworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdFBsdWdpbi5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+R09iamVjdDwvYT4KKyAgICstLS0tPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KKyAgICAgICAgICstLS0tPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+CisgICAgICAgICAgICAgICArLS0tLUdzdFBsdWdpbgorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdFBsdWdpbi5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK0dTdHJlYW1lciBpcyBleHRlbnNpYmxlLCBzbyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBpbnN0YW5jZXMgY2FuIGJlIGxvYWRlZCBhdCBydW50aW1lLgorQSBwbHVnaW4gc3lzdGVtIGNhbiBwcm92aWRlIG9uZSBvciBtb3JlIG9mIHRoZSBiYXNpYworPHNwYW4gY2xhc3M9ImFwcGxpY2F0aW9uIj5HU3RyZWFtZXI8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+IHN1YmNsYXNzZXMuCis8L3A+Cis8cD4KK0EgcGx1Z2luIHNob3VsZCBleHBvcnQgYSBzeW1ib2wgPHNwYW4gY2xhc3M9InN5bWJvbCI+Z3N0X3BsdWdpbl9kZXNjPC9zcGFuPiB0aGF0IGlzIGEKK3N0cnVjdCBvZiB0eXBlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5EZXNjIiB0aXRsZT0ic3RydWN0IEdzdFBsdWdpbkRlc2MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5EZXNjPC9zcGFuPjwvYT4uCit0aGUgcGx1Z2luIGxvYWRlciB3aWxsIGNoZWNrIHRoZSB2ZXJzaW9uIG9mIHRoZSBjb3JlIGxpYnJhcnkgdGhlIHBsdWdpbiB3YXMKK2xpbmtlZCBhZ2FpbnN0IGFuZCB3aWxsIGNyZWF0ZSBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPi4gSXQgd2lsbCB0aGVuIGNhbGwgdGhlCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjR3N0UGx1Z2luSW5pdEZ1bmMiIHRpdGxlPSJHc3RQbHVnaW5Jbml0RnVuYyAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkluaXRGdW5jPC9zcGFuPjwvYT4gZnVuY3Rpb24gdGhhdCB3YXMgcHJvdmlkZWQgaW4gdGhlCis8c3BhbiBjbGFzcz0ic3ltYm9sIj5nc3RfcGx1Z2luX2Rlc2M8L3NwYW4+LgorPC9wPgorPHA+CitPbmNlIHlvdSBoYXZlIGEgaGFuZGxlIHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gKGUuZy4gZnJvbSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJlZ2lzdHJ5PC9zcGFuPjwvYT4pLCB5b3UKK2NhbiBhZGQgYW55IG9iamVjdCB0aGF0IHN1YmNsYXNzZXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5GZWF0dXJlPC9zcGFuPjwvYT4uCis8L3A+Cis8cD4KK1VzdWFsbHkgcGx1Z2lucyBhcmUgYWx3YXlzIGF1dG9tYXRpY2xseSBsb2FkZWQgc28geW91IGRvbid0IG5lZWQgdG8gY2FsbAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tbG9hZCIgdGl0bGU9ImdzdF9wbHVnaW5fbG9hZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGx1Z2luX2xvYWQoKTwvY29kZT48L2E+IGV4cGxpY2l0bHkgdG8gYnJpbmcgaXQgaW50byBtZW1vcnkuIFRoZXJlIGFyZSBvcHRpb25zIHRvCitzdGF0aWNhbGx5IGxpbmsgcGx1Z2lucyB0byBhbiBhcHAgb3IgZXZlbiB1c2UgR1N0cmVhbWVyIHdpdGhvdXQgYSBwbHVnaW4KK3JlcG9zaXRvcnkgaW4gd2hpY2ggY2FzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1sb2FkIiB0aXRsZT0iZ3N0X3BsdWdpbl9sb2FkICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wbHVnaW5fbG9hZCgpPC9jb2RlPjwvYT4gY2FuIGJlIG5lZWRlZCB0byBicmluZyB0aGUgcGx1Z2luCitpbnRvIG1lbW9yeS4KKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0UGx1Z2luLmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGx1Z2luLWVycm9yLXF1YXJrIj48L2E+PGgzPmdzdF9wbHVnaW5fZXJyb3JfcXVhcmsgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdRdWFyazwvc3Bhbj48L2E+ICAgICAgICAgICAgICBnc3RfcGx1Z2luX2Vycm9yX3F1YXJrICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCB0aGUgZXJyb3IgcXVhcmsuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgZXJyb3IgcXVhcmsgdXNlZCBpbiBHRXJyb3IgbWVzc2FnZXM8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVBMVUdJTi1FUlJPUjpDQVBTIj48L2E+PGgzPkdTVF9QTFVHSU5fRVJST1I8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BMVUdJTl9FUlJPUiBnc3RfcGx1Z2luX2Vycm9yX3F1YXJrICgpCis8L3ByZT4KKzxwPgorVGhlIGVycm9yIG1lc3NhZ2UgY2F0ZWdvcnkgcXVhcmsKKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UGx1Z2luRXJyb3IiPjwvYT48aDM+ZW51bSBHc3RQbHVnaW5FcnJvcjwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBlbnVtIHsKKyAgR1NUX1BMVUdJTl9FUlJPUl9NT0RVTEUsCisgIEdTVF9QTFVHSU5fRVJST1JfREVQRU5ERU5DSUVTLAorICBHU1RfUExVR0lOX0VSUk9SX05BTUVfTUlTTUFUQ0gKK30gR3N0UGx1Z2luRXJyb3I7Cis8L3ByZT4KKzxwPgorVGhlIHBsdWdpbiBsb2FkaW5nIGVycm9ycworPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUExVR0lOLUVSUk9SLU1PRFVMRTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUExVR0lOX0VSUk9SX01PRFVMRTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIHBsdWdpbiBjb3VsZCBub3QgYmUgbG9hZGVkCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUExVR0lOLUVSUk9SLURFUEVOREVOQ0lFUzpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUExVR0lOX0VSUk9SX0RFUEVOREVOQ0lFUzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIHBsdWdpbiBoYXMgdW5yZXNvbHZlZCBkZXBlbmRlbmNpZXMKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1QTFVHSU4tRVJST1ItTkFNRS1NSVNNQVRDSDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUExVR0lOX0VSUk9SX05BTUVfTUlTTUFUQ0g8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBwbHVnaW4gaGFzIGFscmVhZHkgYmUgbG9hZGVkIGZyb20gYSBkaWZmZXJlbnQgZmlsZQorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UGx1Z2luLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UGx1Z2luPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UGx1Z2luOzwvcHJlPgorPHA+CitUaGUgcGx1Z2luIG9iamVjdAorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RQbHVnaW5EZXNjIj48L2E+PGgzPnN0cnVjdCBHc3RQbHVnaW5EZXNjPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UGx1Z2luRGVzYyB7CisgIGdpbnQgbWFqb3JfdmVyc2lvbjsKKyAgZ2ludCBtaW5vcl92ZXJzaW9uOworICBjb25zdCBnY2hhciAqbmFtZTsKKyAgY29uc3QgZ2NoYXIgKmRlc2NyaXB0aW9uOworICBHc3RQbHVnaW5Jbml0RnVuYyBwbHVnaW5faW5pdDsKKyAgY29uc3QgZ2NoYXIgKnZlcnNpb247CisgIGNvbnN0IGdjaGFyICpsaWNlbnNlOworICBjb25zdCBnY2hhciAqc291cmNlOworICBjb25zdCBnY2hhciAqcGFja2FnZTsKKyAgY29uc3QgZ2NoYXIgKm9yaWdpbjsKKyAgY29uc3QgZ2NoYXIgKnJlbGVhc2VfZGF0ZXRpbWU7Cit9OworPC9wcmU+Cis8cD4KK0EgcGx1Z2luIHNob3VsZCBleHBvcnQgYSB2YXJpYWJsZSBvZiB0aGlzIHR5cGUgY2FsbGVkIHBsdWdpbl9kZXNjLiBUaGUgcGx1Z2luCitsb2FkZXIgd2lsbCB1c2UgdGhlIGRhdGEgcHJvdmlkZWQgdGhlcmUgdG8gaW5pdGlhbGl6ZSB0aGUgcGx1Z2luLgorPC9wPgorPHA+CitUaGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpY2VuY2U8L2NvZGU+PC9lbT4gcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mOiBMR1BMLCBHUEwsIFFQTCwgR1BML1FQTCwgTVBMLAorQlNELCBNSVQvWDExLCBQcm9wcmlldGFyeSwgdW5rbm93bi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQbHVnaW5EZXNjLm1ham9yLXZlcnNpb24iPjwvYT5tYWpvcl92ZXJzaW9uPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbWFqb3IgdmVyc2lvbiBudW1iZXIgb2YgY29yZSB0aGF0IHBsdWdpbiB3YXMgY29tcGlsZWQgZm9yPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQbHVnaW5EZXNjLm1pbm9yLXZlcnNpb24iPjwvYT5taW5vcl92ZXJzaW9uPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbWlub3IgdmVyc2lvbiBudW1iZXIgb2YgY29yZSB0aGF0IHBsdWdpbiB3YXMgY29tcGlsZWQgZm9yPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNvbnN0wqA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGx1Z2luRGVzYy5uYW1lIj48L2E+bmFtZTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSB1bmlxdWUgbmFtZSBvZiB0aGUgcGx1Z2luPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNvbnN0wqA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGx1Z2luRGVzYy5kZXNjcmlwdGlvbiI+PC9hPmRlc2NyaXB0aW9uPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5kZXNjcmlwdGlvbiBvZiBwbHVnaW48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkluaXRGdW5jIiB0aXRsZT0iR3N0UGx1Z2luSW5pdEZ1bmMgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5Jbml0RnVuYzwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQbHVnaW5EZXNjLnBsdWdpbi1pbml0Ij48L2E+cGx1Z2luX2luaXQ8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnBvaW50ZXIgdG8gdGhlIGluaXQgZnVuY3Rpb24gb2YgdGhpcyBwbHVnaW4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNvbnN0wqA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGx1Z2luRGVzYy52ZXJzaW9uIj48L2E+dmVyc2lvbjwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dmVyc2lvbiBvZiB0aGUgcGx1Z2luPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNvbnN0wqA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGx1Z2luRGVzYy5saWNlbnNlIj48L2E+bGljZW5zZTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZWZmZWN0aXZlIGxpY2Vuc2Ugb2YgcGx1Z2luPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNvbnN0wqA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGx1Z2luRGVzYy5zb3VyY2UiPjwvYT5zb3VyY2U8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnNvdXJjZSBtb2R1bGUgcGx1Z2luIGJlbG9uZ3MgdG88L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y29uc3TCoDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQbHVnaW5EZXNjLnBhY2thZ2UiPjwvYT5wYWNrYWdlPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zaGlwcGVkIHBhY2thZ2UgcGx1Z2luIGJlbG9uZ3MgdG88L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y29uc3TCoDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQbHVnaW5EZXNjLm9yaWdpbiI+PC9hPm9yaWdpbjwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VVJMIHRvIHByb3ZpZGVyIG9mIHBsdWdpbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jb25zdMKgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFBsdWdpbkRlc2MucmVsZWFzZS1kYXRldGltZSI+PC9hPnJlbGVhc2VfZGF0ZXRpbWU8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPmRhdGUgdGltZSBzdHJpbmcgaW4gSVNPIDg2MDEgZm9ybWF0IChvciByYXRoZXIsIGEKK3N1YnNldCB0aGVyZW9mKSwgb3IgTlVMTC4gQWxsb3dlZCBhcmUgdGhlIGZvbGxvd2luZyBmb3JtYXRzOgorIllZWVktTU0tREQiIGFuZCAiWVlZLU1NLUREVEhIOk1NWiIgKHdpdGggJ1QnIGEgc2VwYXJhdG9yIGFuZCAnWicKK2luZGljYXRpbmcgVVRDL1p1bHUgdGltZSkuIFRoaXMgZmllbGQgc2hvdWxkIGJlIHNldCB2aWEgdGhlCitHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FIHByZXByb2Nlc3NvciBtYWNybyAoU2luY2U6IDAuMTAuMzEpPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UGx1Z2luSW5pdEZ1bmMiPjwvYT48aDM+R3N0UGx1Z2luSW5pdEZ1bmMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgKCpHc3RQbHVnaW5Jbml0RnVuYykgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqcGx1Z2luPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQSBwbHVnaW4gc2hvdWxkIHByb3ZpZGUgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gb2YgdGhpcyB0eXBlIGluIHRoZQorcGx1Z2luX2Rlc2Mgc3RydWN0LgorVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSB0aGUgbG9hZGVyIGF0IHN0YXJ0dXAuIE9uZSB3b3VsZCB0aGVuCityZWdpc3RlciBlYWNoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBsdWdpbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgcGx1Z2luIG9iamVjdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgcGx1Z2luIGluaXRpYWxpc2VkIHN1Y2Nlc3NmdWxseTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFBsdWdpbkluaXRGdWxsRnVuYyI+PC9hPjxoMz5Hc3RQbHVnaW5Jbml0RnVsbEZ1bmMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgKCpHc3RQbHVnaW5Jbml0RnVsbEZ1bmMpICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqcGx1Z2luPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQSBwbHVnaW4gc2hvdWxkIHByb3ZpZGUgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gb2YgZWl0aGVyIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5Jbml0RnVuYyIgdGl0bGU9IkdzdFBsdWdpbkluaXRGdW5jICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luSW5pdEZ1bmM8L3NwYW4+PC9hPgorb3IgdGhpcyB0eXBlIGluIHRoZSBwbHVnaW5fZGVzYyBzdHJ1Y3QuCitUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgdGhlIGxvYWRlciBhdCBzdGFydHVwLiBPbmUgd291bGQgdGhlbgorcmVnaXN0ZXIgZWFjaCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPi4gVGhpcyB2ZXJzaW9uIGFsbG93cwordXNlciBkYXRhIHRvIGJlIHBhc3NlZCB0byBpbml0IGZ1bmN0aW9uICh1c2VmdWwgZm9yIGJpbmRpbmdzKS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wbHVnaW48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIHBsdWdpbiBvYmplY3Q8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5leHRyYSBkYXRhPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBwbHVnaW4gaW5pdGlhbGlzZWQgc3VjY2Vzc2Z1bGx5PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVBMVUdJTi1ERUZJTkU6Q0FQUyI+PC9hPjxoMz5HU1RfUExVR0lOX0RFRklORSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9QTFVHSU5fREVGSU5FKG1ham9yLG1pbm9yLG5hbWUsZGVzY3JpcHRpb24saW5pdCx2ZXJzaW9uLGxpY2Vuc2UscGFja2FnZSxvcmlnaW4pPC9wcmU+Cis8cD4KK1RoaXMgbWFjcm8gbmVlZHMgdG8gYmUgdXNlZCB0byBkZWZpbmUgdGhlIGVudHJ5IHBvaW50IGFuZCBtZXRhIGRhdGEgb2YgYQorcGx1Z2luLiBPbmUgd291bGQgdXNlIHRoaXMgbWFjcm8gdG8gZXhwb3J0IGEgcGx1Z2luLCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkCitieSBvdGhlciBhcHBsaWNhdGlvbnMuCis8L3A+Cis8cD4KK1RoZSBtYWNybyB1c2VzIGEgZGVmaW5lIG5hbWVkIFBBQ0tBR0UgZm9yIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjR3N0UGx1Z2luRGVzYyIgdGl0bGU9InN0cnVjdCBHc3RQbHVnaW5EZXNjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRGVzYzwvc3Bhbj48L2E+LHNvdXJjZSBmaWVsZC4KK1doZW4gdXNpbmcgYXV0b2NvbmYsIHRoaXMgaXMgdXN1YWxseSBzZXQgYXV0b21hdGljYWxseSB2aWEgdGhlIEFDX0lOSVQKK21hY3JvLCBhbmQgc2V0IGluIGNvbmZpZy5oLiBJZiB5b3UgYXJlIG5vdCB1c2luZyBhdXRvY29uZiwgeW91IHdpbGwgbmVlZCB0bworZGVmaW5lIFBBQ0tBR0UgeW91cnNlbGYgYW5kIHNldCBpdCB0byBhIHNob3J0IG1uZW1vbmljIHN0cmluZyBpZGVudGlmeWluZworeW91ciBhcHBsaWNhdGlvbi9wYWNrYWdlLCBlLmcuICdzb21lYXBwJyBvciAnbXktcGx1Z2lucy1mb28uCis8L3A+Cis8cD4KK0lmIGRlZmluZWQsIHRoZSBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FIHdpbGwgYWxzbyBiZSB1c2VkIGZvciB0aGUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5EZXNjIiB0aXRsZT0ic3RydWN0IEdzdFBsdWdpbkRlc2MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5EZXNjPC9zcGFuPjwvYT4scmVsZWFzZV9kYXRldGltZSBmaWVsZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYWpvcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5tYWpvciB2ZXJzaW9uIG51bWJlciBvZiB0aGUgZ3N0cmVhbWVyLWNvcmUgdGhhdCBwbHVnaW4gd2FzIGNvbXBpbGVkIGZvcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWlub3I8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bWlub3IgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGdzdHJlYW1lci1jb3JlIHRoYXQgcGx1Z2luIHdhcyBjb21waWxlZCBmb3I8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2hvcnQsIGJ1dCB1bmlxdWUgbmFtZSBvZiB0aGUgcGx1Z2luPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXNjcmlwdGlvbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5pbmZvcm1hdGlvbiBhYm91dCB0aGUgcHVycG9zZSBvZiB0aGUgcGx1Z2luPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbml0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmZ1bmN0aW9uIHBvaW50ZXIgdG8gdGhlIHBsdWdpbl9pbml0IG1ldGhvZCB3aXRoIHRoZSBzaWduYXR1cmUgb2YgPGNvZGUgY2xhc3M9ImNvZGUiPnN0YXRpYyBnYm9vbGVhbiBwbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTwvY29kZT4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52ZXJzaW9uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmZ1bGwgdmVyc2lvbiBzdHJpbmcgKGUuZy4gVkVSU0lPTiBmcm9tIGNvbmZpZy5oKTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGljZW5zZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51bmRlciB3aGljaCBsaWNlbmNlIHRoZSBwYWNrYWdlIGhhcyBiZWVuIHJlbGVhc2VkLCBlLmcuIEdQTCwgTEdQTC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhY2thZ2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBhY2thZ2UtbmFtZSAoZS5nLiBQQUNLQUdFX05BTUUgZnJvbSBjb25maWcuaCk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9yaWdpbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGRlc2NyaXB0aW9uIGZyb20gd2hlcmUgdGhlIHBhY2thZ2UgY29tZXMgZnJvbSAoZS5nLiB0aGUgaG9tZXBhZ2UgVVJMKTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1MSUNFTlNFLVVOS05PV046Q0FQUyI+PC9hPjxoMz5HU1RfTElDRU5TRV9VTktOT1dOPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9MSUNFTlNFX1VOS05PV04gInVua25vd24iCis8L3ByZT4KKzxwPgorVG8gYmUgdXNlZCBpbiBHU1RfUExVR0lOX0RFRklORSBvciBHU1RfUExVR0lOX0RFRklORV9TVEFUSUMgaWYgdXN1cmUgYWJvdXQKK3RoZSBsaWNlbmNlLgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RQbHVnaW5GaWx0ZXIiPjwvYT48aDM+R3N0UGx1Z2luRmlsdGVyICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICgqR3N0UGx1Z2luRmlsdGVyKSAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gKnBsdWdpbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0EgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB3aXRoIGUuZy4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LXBsdWdpbi1maWx0ZXIiIHRpdGxlPSJnc3RfcmVnaXN0cnlfcGx1Z2luX2ZpbHRlciAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcmVnaXN0cnlfcGx1Z2luX2ZpbHRlcigpPC9jb2RlPjwvYT4KK3RvIGdldCBhIGxpc3Qgb2YgcGx1Z2lucyB0aGF0IG1hdGNoIGNlcnRhaW4gY3JpdGVyaWEuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGx1Z2luPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwbHVnaW4gdG8gY2hlY2s8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdXNlcl9kYXRhIHRoYXQgaGFzIGJlZW4gcGFzc2VkIG9uIGUuZy4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LXBsdWdpbi1maWx0ZXIiIHRpdGxlPSJnc3RfcmVnaXN0cnlfcGx1Z2luX2ZpbHRlciAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcmVnaXN0cnlfcGx1Z2luX2ZpbHRlcigpPC9jb2RlPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgZm9yIGEgcG9zaXRpdmUgbWF0Y2gsIEZBTFNFIG90aGVyd2lzZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wbHVnaW4tZ2V0LW5hbWUiPjwvYT48aDM+Z3N0X3BsdWdpbl9nZXRfbmFtZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICBnc3RfcGx1Z2luX2dldF9uYW1lICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+ICpwbHVnaW48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgdGhlIHNob3J0IG5hbWUgb2YgdGhlIHBsdWdpbgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBsdWdpbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wbHVnaW4gdG8gZ2V0IHRoZSBuYW1lIG9mPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5hbWUgb2YgdGhlIHBsdWdpbjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wbHVnaW4tZ2V0LWRlc2NyaXB0aW9uIj48L2E+PGgzPmdzdF9wbHVnaW5fZ2V0X2Rlc2NyaXB0aW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgIGdzdF9wbHVnaW5fZ2V0X2Rlc2NyaXB0aW9uICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gKnBsdWdpbjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCB0aGUgbG9uZyBkZXNjcmlwdGl2ZSBuYW1lIG9mIHRoZSBwbHVnaW4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wbHVnaW48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cGx1Z2luIHRvIGdldCBsb25nIG5hbWUgb2Y8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbG9uZyBuYW1lIG9mIHRoZSBwbHVnaW48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGx1Z2luLWdldC1maWxlbmFtZSI+PC9hPjxoMz5nc3RfcGx1Z2luX2dldF9maWxlbmFtZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICBnc3RfcGx1Z2luX2dldF9maWxlbmFtZSAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+ICpwbHVnaW48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitnZXQgdGhlIGZpbGVuYW1lIG9mIHRoZSBwbHVnaW4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wbHVnaW48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cGx1Z2luIHRvIGdldCB0aGUgZmlsZW5hbWUgb2Y8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZmlsZW5hbWUgb2YgdGhlIHBsdWdpbjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wbHVnaW4tZ2V0LWxpY2Vuc2UiPjwvYT48aDM+Z3N0X3BsdWdpbl9nZXRfbGljZW5zZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICBnc3RfcGx1Z2luX2dldF9saWNlbnNlICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+ICpwbHVnaW48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitnZXQgdGhlIGxpY2Vuc2Ugb2YgdGhlIHBsdWdpbgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBsdWdpbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wbHVnaW4gdG8gZ2V0IHRoZSBsaWNlbnNlIG9mPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGxpY2Vuc2Ugb2YgdGhlIHBsdWdpbjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wbHVnaW4tZ2V0LXBhY2thZ2UiPjwvYT48aDM+Z3N0X3BsdWdpbl9nZXRfcGFja2FnZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICBnc3RfcGx1Z2luX2dldF9wYWNrYWdlICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+ICpwbHVnaW48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitnZXQgdGhlIHBhY2thZ2UgdGhlIHBsdWdpbiBiZWxvbmdzIHRvLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBsdWdpbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wbHVnaW4gdG8gZ2V0IHRoZSBwYWNrYWdlIG9mPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBhY2thZ2Ugb2YgdGhlIHBsdWdpbjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wbHVnaW4tZ2V0LW9yaWdpbiI+PC9hPjxoMz5nc3RfcGx1Z2luX2dldF9vcmlnaW4gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICogICAgICAgZ3N0X3BsdWdpbl9nZXRfb3JpZ2luICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqcGx1Z2luPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorZ2V0IHRoZSBVUkwgd2hlcmUgdGhlIHBsdWdpbiBjb21lcyBmcm9tCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGx1Z2luPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnBsdWdpbiB0byBnZXQgdGhlIG9yaWdpbiBvZjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBvcmlnaW4gb2YgdGhlIHBsdWdpbjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wbHVnaW4tZ2V0LXNvdXJjZSI+PC9hPjxoMz5nc3RfcGx1Z2luX2dldF9zb3VyY2UgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICogICAgICAgZ3N0X3BsdWdpbl9nZXRfc291cmNlICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqcGx1Z2luPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorZ2V0IHRoZSBzb3VyY2UgbW9kdWxlIHRoZSBwbHVnaW4gYmVsb25ncyB0by4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wbHVnaW48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cGx1Z2luIHRvIGdldCB0aGUgc291cmNlIG9mPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNvdXJjZSBvZiB0aGUgcGx1Z2luPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBsdWdpbi1nZXQtdmVyc2lvbiI+PC9hPjxoMz5nc3RfcGx1Z2luX2dldF92ZXJzaW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgIGdzdF9wbHVnaW5fZ2V0X3ZlcnNpb24gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gKnBsdWdpbjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK2dldCB0aGUgdmVyc2lvbiBvZiB0aGUgcGx1Z2luCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGx1Z2luPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnBsdWdpbiB0byBnZXQgdGhlIHZlcnNpb24gb2Y8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdmVyc2lvbiBvZiB0aGUgcGx1Z2luPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBsdWdpbi1nZXQtbW9kdWxlIj48L2E+PGgzPmdzdF9wbHVnaW5fZ2V0X21vZHVsZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1EeW5hbWljLUxvYWRpbmctb2YtTW9kdWxlcy5odG1sI0dNb2R1bGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R01vZHVsZTwvc3Bhbj48L2E+ICogICAgICAgICAgIGdzdF9wbHVnaW5fZ2V0X21vZHVsZSAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gKnBsdWdpbjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRHluYW1pYy1Mb2FkaW5nLW9mLU1vZHVsZXMuaHRtbCNHTW9kdWxlIj48c3BhbiBjbGFzcz0idHlwZSI+R01vZHVsZTwvc3Bhbj48L2E+IG9mIHRoZSBwbHVnaW4uIElmIHRoZSBwbHVnaW4gaXNuJ3QgbG9hZGVkIHlldCwgTlVMTCBpcworcmV0dXJuZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGx1Z2luPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnBsdWdpbiB0byBxdWVyeTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm1vZHVsZSBiZWxvbmdpbmcgdG8gdGhlIHBsdWdpbiBvciBOVUxMIGlmIHRoZQorcGx1Z2luIGlzbid0IGxvYWRlZCB5ZXQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGx1Z2luLWlzLWxvYWRlZCI+PC9hPjxoMz5nc3RfcGx1Z2luX2lzX2xvYWRlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfcGx1Z2luX2lzX2xvYWRlZCAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+ICpwbHVnaW48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitxdWVyaWVzIGlmIHRoZSBwbHVnaW4gaXMgbG9hZGVkIGludG8gbWVtb3J5Cis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGx1Z2luPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnBsdWdpbiB0byBxdWVyeTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaXMgbG9hZGVkLCBGQUxTRSBvdGhlcndpc2U8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGx1Z2luLWdldC1jYWNoZS1kYXRhIj48L2E+PGgzPmdzdF9wbHVnaW5fZ2V0X2NhY2hlX2RhdGEgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqIGdzdF9wbHVnaW5fZ2V0X2NhY2hlX2RhdGEgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqcGx1Z2luPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgcGx1Z2luIHNwZWNpZmljIGRhdGEgY2FjaGUuIElmIGl0IGlzIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHRoZXJlIGlzIG5vIGNhY2hlZCBkYXRhCitzdG9yZWQuIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiB0aGUgcmVnaXN0cnkgaXMgZ2V0dGluZyByZWJ1aWx0LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBsdWdpbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBsdWdpbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBjYWNoZWQgZGF0YSBhcyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IG9yIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBsdWdpbi1zZXQtY2FjaGUtZGF0YSI+PC9hPjxoMz5nc3RfcGx1Z2luX3NldF9jYWNoZV9kYXRhICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9wbHVnaW5fc2V0X2NhY2hlX2RhdGEgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gKnBsdWdpbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqY2FjaGVfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0FkZHMgcGx1Z2luIHNwZWNpZmljIGRhdGEgdG8gY2FjaGUuIFBhc3NlcyB0aGUgb3duZXJzaGlwIG9mIHRoZSBzdHJ1Y3R1cmUgdG8KK3RoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGx1Z2luPC9jb2RlPjwvZW0+LgorPC9wPgorPHA+CitUaGUgY2FjaGUgaXMgZmx1c2hlZCBldmVyeSB0aW1lIHRoZSByZWdpc3RyeSBpcyByZWJ1aWx0LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBsdWdpbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBsdWdpbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FjaGVfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBkYXRhIHRvIGNhY2hlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBsdWdpbi1uYW1lLWZpbHRlciI+PC9hPjxoMz5nc3RfcGx1Z2luX25hbWVfZmlsdGVyICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9wbHVnaW5fbmFtZV9maWx0ZXIgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gKnBsdWdpbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQSBzdGFuZGFyZCBmaWx0ZXIgdGhhdCByZXR1cm5zIFRSVUUgd2hlbiB0aGUgcGx1Z2luIGlzIG9mIHRoZQorZ2l2ZW4gbmFtZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wbHVnaW48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBsdWdpbiB0byBjaGVjazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmFtZSBvZiB0aGUgcGx1Z2luPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiB0aGUgcGx1Z2luIGlzIG9mIHRoZSBnaXZlbiBuYW1lLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wbHVnaW4tbG9hZC1maWxlIj48L2E+PGgzPmdzdF9wbHVnaW5fbG9hZF9maWxlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gKiAgICAgICAgIGdzdF9wbHVnaW5fbG9hZF9maWxlICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmlsZW5hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1FcnJvci1SZXBvcnRpbmcuaHRtbCNHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRXJyb3I8L3NwYW4+PC9hPiAqKmVycm9yPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorTG9hZHMgdGhlIGdpdmVuIHBsdWdpbiBhbmQgcmVmcyBpdC4gIENhbGxlciBuZWVkcyB0byB1bnJlZiBhZnRlciB1c2UuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmlsZW5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBsdWdpbiBmaWxlbmFtZSB0byBsb2FkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lcnJvcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIGEgTlVMTC12YWx1ZWQgR0Vycm9yPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSByZWZlcmVuY2UgdG8gdGhlIGV4aXN0aW5nIGxvYWRlZCBHc3RQbHVnaW4sIGEKK3JlZmVyZW5jZSB0byB0aGUgbmV3bHktbG9hZGVkIEdzdFBsdWdpbiwgb3IgTlVMTCBpZiBhbiBlcnJvciBvY2N1cnJlZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wbHVnaW4tbG9hZCI+PC9hPjxoMz5nc3RfcGx1Z2luX2xvYWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqICAgICAgICAgZ3N0X3BsdWdpbl9sb2FkICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqcGx1Z2luPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorTG9hZHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBsdWdpbjwvY29kZT48L2VtPi4gTm90ZSB0aGF0IHRoZSAqcmV0dXJuIHZhbHVlKiBpcyB0aGUgbG9hZGVkIHBsdWdpbjsgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBsdWdpbjwvY29kZT48L2VtPiBpcwordW50b3VjaGVkLiBUaGUgbm9ybWFsIHVzZSBwYXR0ZXJuIG9mIHRoaXMgZnVuY3Rpb24gZ29lcyBsaWtlIHRoaXM6Cis8L3A+Cis8cD4KKzwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KK0dzdFBsdWdpbiAqbG9hZGVkX3BsdWdpbjsKK2xvYWRlZF9wbHVnaW4gPSBnc3RfcGx1Z2luX2xvYWQgKHBsdWdpbik7CisvLyBwcmVzdW1hYmx5LCB3ZSdyZSBubyBsb25nZXIgaW50ZXJlc3RlZCBpbiB0aGUgcG90ZW50aWFsbHktdW5sb2FkZWQgcGx1Z2luCitnc3Rfb2JqZWN0X3VucmVmIChwbHVnaW4pOworcGx1Z2luID0gbG9hZGVkX3BsdWdpbjsKKzwvcHJlPgorPHA+Cis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGx1Z2luPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnBsdWdpbiB0byBsb2FkLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSByZWZlcmVuY2UgdG8gYSBsb2FkZWQgcGx1Z2luLCBvciBOVUxMIG9uIGVycm9yLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBsdWdpbi1sb2FkLWJ5LW5hbWUiPjwvYT48aDM+Z3N0X3BsdWdpbl9sb2FkX2J5X25hbWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqICAgICAgICAgZ3N0X3BsdWdpbl9sb2FkX2J5X25hbWUgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorTG9hZCB0aGUgbmFtZWQgcGx1Z2luLiBSZWZzIHRoZSBwbHVnaW4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5uYW1lIG9mIHBsdWdpbiB0byBsb2FkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSByZWZlcmVuY2UgdG8gYSBsb2FkZWQgcGx1Z2luLCBvciBOVUxMIG9uIGVycm9yLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBsdWdpbi1saXN0LWZyZWUiPjwvYT48aDM+Z3N0X3BsdWdpbl9saXN0X2ZyZWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3BsdWdpbl9saXN0X2ZyZWUgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitVbnJlZnMgZWFjaCBtZW1iZXIgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT4sIHRoZW4gZnJlZXMgdGhlIGxpc3QuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bGlzdCBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3QuUGx1Z2luXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGx1Z2luLXJlZ2lzdGVyLXN0YXRpYyI+PC9hPjxoMz5nc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpYyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpYyAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG1ham9yX3ZlcnNpb248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbWlub3JfdmVyc2lvbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmRlc2NyaXB0aW9uPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5Jbml0RnVuYyIgdGl0bGU9IkdzdFBsdWdpbkluaXRGdW5jICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luSW5pdEZ1bmM8L3NwYW4+PC9hPiBpbml0X2Z1bmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdmVyc2lvbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpsaWNlbnNlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnNvdXJjZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwYWNrYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm9yaWdpbjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlZ2lzdGVycyBhIHN0YXRpYyBwbHVnaW4sIGllLiBhIHBsdWdpbiB3aGljaCBpcyBwcml2YXRlIHRvIGFuIGFwcGxpY2F0aW9uCitvciBsaWJyYXJ5IGFuZCBjb250YWluZWQgd2l0aGluIHRoZSBhcHBsaWNhdGlvbiBvciBsaWJyYXJ5IChhcyBvcHBvc2VkIHRvCitiZWluZyBzaGlwcGVkIGFzIGEgc2VwYXJhdGUgbW9kdWxlIGZpbGUpLgorPC9wPgorPHA+CitZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCBHU3RyZWFtZXIgaGFzIGJlZW4gaW5pdGlhbGlzZWQgKHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtaW5pdCIgdGl0bGU9ImdzdF9pbml0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9pbml0KCk8L2NvZGU+PC9hPiBvcgordmlhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LWluaXQtZ2V0LW9wdGlvbi1ncm91cCIgdGl0bGU9ImdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXAgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCgpPC9jb2RlPjwvYT4pIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWFqb3JfdmVyc2lvbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbWFqb3IgdmVyc2lvbiBudW1iZXIgb2YgdGhlIEdTdHJlYW1lciBjb3JlIHRoYXQgdGhlCitwbHVnaW4gd2FzIGNvbXBpbGVkIGZvciwgeW91IGNhbiBqdXN0IHVzZSBHU1RfVkVSU0lPTl9NQUpPUiBoZXJlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5taW5vcl92ZXJzaW9uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtaW5vciB2ZXJzaW9uIG51bWJlciBvZiB0aGUgR1N0cmVhbWVyIGNvcmUgdGhhdCB0aGUKK3BsdWdpbiB3YXMgY29tcGlsZWQgZm9yLCB5b3UgY2FuIGp1c3QgdXNlIEdTVF9WRVJTSU9OX01JTk9SIGhlcmU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSB1bmlxdWUgbmFtZSBvZiB0aGUgcGx1Z2luIChpZGVhbGx5IHByZWZpeGVkIHdpdGggYW4gYXBwbGljYXRpb24tIG9yCitsaWJyYXJ5LXNwZWNpZmljIG5hbWVzcGFjZSBwcmVmaXggaW4gb3JkZXIgdG8gYXZvaWQgbmFtZSBjb25mbGljdHMgaW4KK2Nhc2UgYSBzaW1pbGFyIHBsdWdpbiB3aXRoIHRoZSBzYW1lIG5hbWUgZXZlciBnZXRzIGFkZGVkIHRvIEdTdHJlYW1lcik8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc2NyaXB0aW9uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmRlc2NyaXB0aW9uIG9mIHRoZSBwbHVnaW48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluaXRfZnVuYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIHRoZSBpbml0IGZ1bmN0aW9uIG9mIHRoaXMgcGx1Z2luLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGUgY2FsbGJhY2sgaXMgdmFsaWQgb25seSBkdXJpbmcgdGhlIGNhbGwgdG8gdGhlIG1ldGhvZC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5zY29wZSBjYWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52ZXJzaW9uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnZlcnNpb24gc3RyaW5nIG9mIHRoZSBwbHVnaW48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpY2Vuc2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZWZmZWN0aXZlIGxpY2Vuc2Ugb2YgcGx1Z2luLiBNdXN0IGJlIG9uZSBvZiB0aGUgYXBwcm92ZWQgbGljZW5zZXMKKyhzZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkRlc2MiIHRpdGxlPSJzdHJ1Y3QgR3N0UGx1Z2luRGVzYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkRlc2M8L3NwYW4+PC9hPiBhYm92ZSkgb3IgdGhlIHBsdWdpbiB3aWxsIG5vdCBiZSByZWdpc3RlcmVkLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c291cmNlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnNvdXJjZSBtb2R1bGUgcGx1Z2luIGJlbG9uZ3MgdG88L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhY2thZ2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2hpcHBlZCBwYWNrYWdlIHBsdWdpbiBiZWxvbmdzIHRvPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vcmlnaW48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VVJMIHRvIHByb3ZpZGVyIG9mIHBsdWdpbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHBsdWdpbiB3YXMgcmVnaXN0ZXJlZCBjb3JyZWN0bHksIG90aGVyd2lzZSBGQUxTRS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjE2PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGx1Z2luLXJlZ2lzdGVyLXN0YXRpYy1mdWxsIj48L2E+PGgzPmdzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljX2Z1bGwgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWNfZnVsbCAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBtYWpvcl92ZXJzaW9uPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG1pbm9yX3ZlcnNpb248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpkZXNjcmlwdGlvbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjR3N0UGx1Z2luSW5pdEZ1bGxGdW5jIiB0aXRsZT0iR3N0UGx1Z2luSW5pdEZ1bGxGdW5jICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luSW5pdEZ1bGxGdW5jPC9zcGFuPjwvYT4gaW5pdF9mdWxsX2Z1bmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdmVyc2lvbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpsaWNlbnNlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnNvdXJjZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwYWNrYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm9yaWdpbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlZ2lzdGVycyBhIHN0YXRpYyBwbHVnaW4sIGllLiBhIHBsdWdpbiB3aGljaCBpcyBwcml2YXRlIHRvIGFuIGFwcGxpY2F0aW9uCitvciBsaWJyYXJ5IGFuZCBjb250YWluZWQgd2l0aGluIHRoZSBhcHBsaWNhdGlvbiBvciBsaWJyYXJ5IChhcyBvcHBvc2VkIHRvCitiZWluZyBzaGlwcGVkIGFzIGEgc2VwYXJhdGUgbW9kdWxlIGZpbGUpIHdpdGggYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjR3N0UGx1Z2luSW5pdEZ1bGxGdW5jIiB0aXRsZT0iR3N0UGx1Z2luSW5pdEZ1bGxGdW5jICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luSW5pdEZ1bGxGdW5jPC9zcGFuPjwvYT4KK3doaWNoIGFsbG93cyB1c2VyIGRhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbiAodXNlZnVsCitmb3IgYmluZGluZ3MpLgorPC9wPgorPHA+CitZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCBHU3RyZWFtZXIgaGFzIGJlZW4gaW5pdGlhbGlzZWQgKHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtaW5pdCIgdGl0bGU9ImdzdF9pbml0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9pbml0KCk8L2NvZGU+PC9hPiBvcgordmlhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LWluaXQtZ2V0LW9wdGlvbi1ncm91cCIgdGl0bGU9ImdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXAgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCgpPC9jb2RlPjwvYT4pIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWFqb3JfdmVyc2lvbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbWFqb3IgdmVyc2lvbiBudW1iZXIgb2YgdGhlIEdTdHJlYW1lciBjb3JlIHRoYXQgdGhlCitwbHVnaW4gd2FzIGNvbXBpbGVkIGZvciwgeW91IGNhbiBqdXN0IHVzZSBHU1RfVkVSU0lPTl9NQUpPUiBoZXJlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5taW5vcl92ZXJzaW9uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtaW5vciB2ZXJzaW9uIG51bWJlciBvZiB0aGUgR1N0cmVhbWVyIGNvcmUgdGhhdCB0aGUKK3BsdWdpbiB3YXMgY29tcGlsZWQgZm9yLCB5b3UgY2FuIGp1c3QgdXNlIEdTVF9WRVJTSU9OX01JTk9SIGhlcmU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSB1bmlxdWUgbmFtZSBvZiB0aGUgcGx1Z2luIChpZGVhbGx5IHByZWZpeGVkIHdpdGggYW4gYXBwbGljYXRpb24tIG9yCitsaWJyYXJ5LXNwZWNpZmljIG5hbWVzcGFjZSBwcmVmaXggaW4gb3JkZXIgdG8gYXZvaWQgbmFtZSBjb25mbGljdHMgaW4KK2Nhc2UgYSBzaW1pbGFyIHBsdWdpbiB3aXRoIHRoZSBzYW1lIG5hbWUgZXZlciBnZXRzIGFkZGVkIHRvIEdTdHJlYW1lcik8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc2NyaXB0aW9uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmRlc2NyaXB0aW9uIG9mIHRoZSBwbHVnaW48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluaXRfZnVsbF9mdW5jPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnBvaW50ZXIgdG8gdGhlIGluaXQgZnVuY3Rpb24gd2l0aCB1c2VyIGRhdGEKK29mIHRoaXMgcGx1Z2luLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGUgY2FsbGJhY2sgaXMgdmFsaWQgb25seSBkdXJpbmcgdGhlIGNhbGwgdG8gdGhlIG1ldGhvZC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5zY29wZSBjYWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52ZXJzaW9uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnZlcnNpb24gc3RyaW5nIG9mIHRoZSBwbHVnaW48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpY2Vuc2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZWZmZWN0aXZlIGxpY2Vuc2Ugb2YgcGx1Z2luLiBNdXN0IGJlIG9uZSBvZiB0aGUgYXBwcm92ZWQgbGljZW5zZXMKKyhzZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkRlc2MiIHRpdGxlPSJzdHJ1Y3QgR3N0UGx1Z2luRGVzYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkRlc2M8L3NwYW4+PC9hPiBhYm92ZSkgb3IgdGhlIHBsdWdpbiB3aWxsIG5vdCBiZSByZWdpc3RlcmVkLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c291cmNlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnNvdXJjZSBtb2R1bGUgcGx1Z2luIGJlbG9uZ3MgdG88L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhY2thZ2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2hpcHBlZCBwYWNrYWdlIHBsdWdpbiBiZWxvbmdzIHRvPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vcmlnaW48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VVJMIHRvIHByb3ZpZGVyIG9mIHBsdWdpbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmdwb2ludGVyIHRvIHVzZXIgZGF0YTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHBsdWdpbiB3YXMgcmVnaXN0ZXJlZCBjb3JyZWN0bHksIG90aGVyd2lzZSBGQUxTRS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI0PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RQbHVnaW5GbGFncyI+PC9hPjxoMz5lbnVtIEdzdFBsdWdpbkZsYWdzPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGVudW0geworICBHU1RfUExVR0lOX0ZMQUdfQ0FDSEVEID0gKDEmbHQ7Jmx0OzApLAorICBHU1RfUExVR0lOX0ZMQUdfQkxBQ0tMSVNURUQgPSAoMSZsdDsmbHQ7MSkKK30gR3N0UGx1Z2luRmxhZ3M7Cis8L3ByZT4KKzxwPgorVGhlIHBsdWdpbiBsb2FkaW5nIHN0YXRlCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1QTFVHSU4tRkxBRy1DQUNIRUQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BMVUdJTl9GTEFHX0NBQ0hFRDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGVtcG9yYXJpbHkgbG9hZGVkIHBsdWdpbnMKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1QTFVHSU4tRkxBRy1CTEFDS0xJU1RFRDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUExVR0lOX0ZMQUdfQkxBQ0tMSVNURUQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBwbHVnaW4gd29uJ3QgYmUgc2Nhbm5lZCAoYWdhaW4pCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3MiPjwvYT48aDM+ZW51bSBHc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3M8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX05PTkUgPSAwLAorICBHU1RfUExVR0lOX0RFUEVOREVOQ1lfRkxBR19SRUNVUlNFID0gKDEgJmx0OyZsdDsgMCksCisgIEdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX1BBVEhTX0FSRV9ERUZBVUxUX09OTFkgPSAoMSAmbHQ7Jmx0OyAxKSwKKyAgR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfRklMRV9OQU1FX0lTX1NVRkZJWCA9ICgxICZsdDsmbHQ7IDIpCit9IEdzdFBsdWdpbkRlcGVuZGVuY3lGbGFnczsKKzwvcHJlPgorPHA+CitGbGFncyB1c2VkIGluIGNvbm5lY3Rpb24gd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1hZGQtZGVwZW5kZW5jeSIgdGl0bGU9ImdzdF9wbHVnaW5fYWRkX2RlcGVuZGVuY3kgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jeSgpPC9jb2RlPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1QTFVHSU4tREVQRU5ERU5DWS1GTEFHLU5PTkU6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfTk9ORTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bm8gc3BlY2lhbCBmbGFncworPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVBMVUdJTi1ERVBFTkRFTkNZLUZMQUctUkVDVVJTRTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUExVR0lOX0RFUEVOREVOQ1lfRkxBR19SRUNVUlNFPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5yZWN1cnNlIGludG8gc3ViZGlyZWN0b3JpZXMKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1QTFVHSU4tREVQRU5ERU5DWS1GTEFHLVBBVEhTLUFSRS1ERUZBVUxULU9OTFk6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfUEFUSFNfQVJFX0RFRkFVTFRfT05MWTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlIHBhdGhzCisgICAgICAgIGFyZ3VtZW50IG9ubHkgaWYgbm9uZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGlzIHNldAorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVBMVUdJTi1ERVBFTkRFTkNZLUZMQUctRklMRS1OQU1FLUlTLVNVRkZJWDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUExVR0lOX0RFUEVOREVOQ1lfRkxBR19GSUxFX05BTUVfSVNfU1VGRklYPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5pbnRlcnByZXQKKyAgICAgICAgZmlsZW5hbWUgYXJndW1lbnQgYXMgZmlsdGVyIHN1ZmZpeCBhbmQgY2hlY2sgYWxsIG1hdGNoaW5nIGZpbGVzIGluCisgICAgICAgIHRoZSBkaXJlY3RvcnkKKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wbHVnaW4tYWRkLWRlcGVuZGVuY3kiPjwvYT48aDM+Z3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jeSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcGx1Z2luX2FkZF9kZXBlbmRlbmN5ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+ICpwbHVnaW48L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKmVudl92YXJzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKipwYXRoczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqbmFtZXM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkRlcGVuZGVuY3lGbGFncyIgdGl0bGU9ImVudW0gR3N0UGx1Z2luRGVwZW5kZW5jeUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRGVwZW5kZW5jeUZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitNYWtlIEdTdHJlYW1lciBhd2FyZSBvZiBleHRlcm5hbCBkZXBlbmRlbmNpZXMgd2hpY2ggYWZmZWN0IHRoZSBmZWF0dXJlCitzZXQgb2YgdGhpcyBwbHVnaW4gKGllLiB0aGUgZWxlbWVudHMgb3IgdHlwZWZpbmRlcnMgYXNzb2NpYXRlZCB3aXRoIGl0KS4KKzwvcD4KKzxwPgorR1N0cmVhbWVyIHdpbGwgcmUtaW5zcGVjdCBwbHVnaW5zIHdpdGggZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIHdoZW5ldmVyIGFueQorb2YgdGhlIGV4dGVybmFsIGRlcGVuZGVuY2llcyBjaGFuZ2UuIFRoaXMgaXMgdXNlZnVsIGZvciBwbHVnaW5zIHdoaWNoIHdyYXAKK290aGVyIHBsdWdpbiBzeXN0ZW1zLCBlLmcuIGEgcGx1Z2luIHdoaWNoIHdyYXBzIGEgcGx1Z2luLWJhc2VkIHZpc3VhbGlzYXRpb24KK2xpYnJhcnkgYW5kIG1ha2VzIHZpc3VhbGlzYXRpb25zIGF2YWlsYWJsZSBhcyBHU3RyZWFtZXIgZWxlbWVudHMsIG9yIGEKK2NvZGVjIGxvYWRlciB3aGljaCBleHBvc2VzIGVsZW1lbnRzIGFuZC9vciBjYXBzIGRlcGVuZGVudCBvbiB3aGF0IGV4dGVybmFsCitjb2RlYyBsaWJyYXJpZXMgYXJlIGN1cnJlbnRseSBpbnN0YWxsZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGx1Z2luPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW52X3ZhcnM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+TlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyBhZmZlY3RpbmcgdGhlCitmZWF0dXJlIHNldCBvZiB0aGUgcGx1Z2luIChlLmcuIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGNvbnRhaW5pbmcKK3BhdGhzIHdoZXJlIHRvIGxvb2sgZm9yIGFkZGl0aW9uYWwgbW9kdWxlcy9wbHVnaW5zIG9mIGEgbGlicmFyeSksCitvciBOVUxMLiBFbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcyBtYXkgYmUgZm9sbG93ZWQgYnkgYSBwYXRoIGNvbXBvbmVudAord2hpY2ggd2lsbCBiZSBhZGRlZCB0byB0aGUgY29udGVudCBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUsIGUuZy4KKyJIT01FLy5teXN0dWZmL3BsdWdpbnMiLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGF0aHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+TlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIGRpcmVjdG9yaWVzL3BhdGhzIHdoZXJlIGRlcGVuZGVudCBmaWxlcworbWF5IGJlLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZXM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+TlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIGZpbGUgbmFtZXMgKG9yIGZpbGUgbmFtZSBzdWZmaXhlcywKK2RlcGVuZGluZyBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZ3M8L2NvZGU+PC9lbT4pIHRvIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgcGF0aHMgZnJvbQorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhdGhzPC9jb2RlPjwvZW0+IGFuZC9vciB0aGUgcGF0aHMgZXh0cmFjdGVkIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVudl92YXJzPC9jb2RlPjwvZW0+LCBvciBOVUxMLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZ3M8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+b3B0aW9uYWwgZmxhZ3MsIG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHU1QtUExVR0lOLURFUEVOREVOQ1ktRkxBRy1OT05FOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfUExVR0lOX0RFUEVOREVOQ1lfRkxBR19OT05FPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wbHVnaW4tYWRkLWRlcGVuZGVuY3ktc2ltcGxlIj48L2E+PGgzPmdzdF9wbHVnaW5fYWRkX2RlcGVuZGVuY3lfc2ltcGxlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9wbHVnaW5fYWRkX2RlcGVuZGVuY3lfc2ltcGxlICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gKnBsdWdpbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICplbnZfdmFyczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwYXRoczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjR3N0UGx1Z2luRGVwZW5kZW5jeUZsYWdzIiB0aXRsZT0iZW51bSBHc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3M8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK01ha2UgR1N0cmVhbWVyIGF3YXJlIG9mIGV4dGVybmFsIGRlcGVuZGVuY2llcyB3aGljaCBhZmZlY3QgdGhlIGZlYXR1cmUKK3NldCBvZiB0aGlzIHBsdWdpbiAoaWUuIHRoZSBlbGVtZW50cyBvciB0eXBlZmluZGVycyBhc3NvY2lhdGVkIHdpdGggaXQpLgorPC9wPgorPHA+CitHU3RyZWFtZXIgd2lsbCByZS1pbnNwZWN0IHBsdWdpbnMgd2l0aCBleHRlcm5hbCBkZXBlbmRlbmNpZXMgd2hlbmV2ZXIgYW55CitvZiB0aGUgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIGNoYW5nZS4gVGhpcyBpcyB1c2VmdWwgZm9yIHBsdWdpbnMgd2hpY2ggd3JhcAorb3RoZXIgcGx1Z2luIHN5c3RlbXMsIGUuZy4gYSBwbHVnaW4gd2hpY2ggd3JhcHMgYSBwbHVnaW4tYmFzZWQgdmlzdWFsaXNhdGlvbgorbGlicmFyeSBhbmQgbWFrZXMgdmlzdWFsaXNhdGlvbnMgYXZhaWxhYmxlIGFzIEdTdHJlYW1lciBlbGVtZW50cywgb3IgYQorY29kZWMgbG9hZGVyIHdoaWNoIGV4cG9zZXMgZWxlbWVudHMgYW5kL29yIGNhcHMgZGVwZW5kZW50IG9uIHdoYXQgZXh0ZXJuYWwKK2NvZGVjIGxpYnJhcmllcyBhcmUgY3VycmVudGx5IGluc3RhbGxlZC4KKzwvcD4KKzxwPgorQ29udmVuaWVuY2Ugd3JhcHBlciBmdW5jdGlvbiBmb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tYWRkLWRlcGVuZGVuY3kiIHRpdGxlPSJnc3RfcGx1Z2luX2FkZF9kZXBlbmRlbmN5ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wbHVnaW5fYWRkX2RlcGVuZGVuY3koKTwvY29kZT48L2E+IHdoaWNoCit0YWtlcyBzaW1wbGUgc3RyaW5ncyBhcyBhcmd1bWVudHMgaW5zdGVhZCBvZiBzdHJpbmcgYXJyYXlzLCB3aXRoIG11bHRpcGxlCithcmd1bWVudHMgc2VwYXJhdGVkIGJ5IHByZWRlZmluZWQgZGVsaW1pdGVycyAoc2VlIGFib3ZlKS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wbHVnaW48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVudl92YXJzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm9uZSBvciBtb3JlIGVudmlyb25tZW50IHZhcmlhYmxlcyAoc2VwYXJhdGVkIGJ5ICc6JywgJzsnIG9yICcsJyksCitvciBOVUxMLiBFbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcyBtYXkgYmUgZm9sbG93ZWQgYnkgYSBwYXRoIGNvbXBvbmVudAord2hpY2ggd2lsbCBiZSBhZGRlZCB0byB0aGUgY29udGVudCBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUsIGUuZy4KKyJIT01FLy5teXN0dWZmL3BsdWdpbnM6TVlTVFVGRl9QTFVHSU5TX1BBVEgiPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXRoczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5vbmUgb3JlIG1vcmUgZGlyZWN0b3J5IHBhdGhzIChzZXBhcmF0ZWQgYnkgJzonIG9yICc7JyBvciAnLCcpLAorb3IgTlVMTC4gRXhhbXBsZTogIi91c3IvbGliL215c3R1ZmYvcGx1Z2lucyI8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWVzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm9uZSBvciBtb3JlIGZpbGUgbmFtZXMgb3IgZmlsZSBuYW1lIHN1ZmZpeGVzIChzZXBhcmF0ZWQgYnkgY29tbWFzKSwKK29yIE5VTEw8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZsYWdzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm9wdGlvbmFsIGZsYWdzLCBvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjR1NULVBMVUdJTi1ERVBFTkRFTkNZLUZMQUctTk9ORTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfTk9ORTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdFBsdWdpbi5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9Hc3RQbHVnaW5GZWF0dXJlLmh0bWwgYi9kb2NzL2dzdC9odG1sL0dzdFBsdWdpbkZlYXR1cmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTI4Njk2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9nc3QvaHRtbC9Hc3RQbHVnaW5GZWF0dXJlLmh0bWwKQEAgLTAsMCArMSw1MDIgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5Hc3RQbHVnaW5GZWF0dXJlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sIiB0aXRsZT0iR3N0UG9sbCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjR3N0UGx1Z2luRmVhdHVyZS5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFBsdWdpbkZlYXR1cmUuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFBsdWdpbkZlYXR1cmUub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9IkdzdFBsdWdpbkZlYXR1cmUiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RQbHVnaW5GZWF0dXJlLnRvcF9vZl9wYWdlIj48L2E+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2gyPgorPHA+R3N0UGx1Z2luRmVhdHVyZSDigJQgQmFzZSBjbGFzcyBmb3IgY29udGVudHMgb2YgYSBHc3RQbHVnaW48L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJHc3RQbHVnaW5GZWF0dXJlLnN5bm9wc2lzIj48L2E+PGgyPlN5bm9wc2lzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7CisKK3N0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNHc3RQbHVnaW5GZWF0dXJlLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RQbHVnaW5GZWF0dXJlIj5Hc3RQbHVnaW5GZWF0dXJlPC9hPjsKKyAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNHc3RUeXBlTmFtZURhdGEiIHRpdGxlPSJHc3RUeXBlTmFtZURhdGEiPkdzdFR5cGVOYW1lRGF0YTwvYT47Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI0dzdFBsdWdpbkZlYXR1cmVGaWx0ZXIiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlRmlsdGVyICgpIj4qR3N0UGx1Z2luRmVhdHVyZUZpbHRlcjwvYT4pICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+ICpmZWF0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTsKK2VudW0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNHc3RSYW5rIiB0aXRsZT0iZW51bSBHc3RSYW5rIj5Hc3RSYW5rPC9hPjsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtdHlwZS1uYW1lLWZpbHRlciIgdGl0bGU9ImdzdF9wbHVnaW5fZmVhdHVyZV90eXBlX25hbWVfZmlsdGVyICgpIj5nc3RfcGx1Z2luX2ZlYXR1cmVfdHlwZV9uYW1lX2ZpbHRlcjwvYT4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPiAqZmVhdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI0dzdFR5cGVOYW1lRGF0YSIgdGl0bGU9IkdzdFR5cGVOYW1lRGF0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVOYW1lRGF0YTwvc3Bhbj48L2E+ICpkYXRhPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtc2V0LXJhbmsiIHRpdGxlPSJnc3RfcGx1Z2luX2ZlYXR1cmVfc2V0X3JhbmsgKCkiPmdzdF9wbHVnaW5fZmVhdHVyZV9zZXRfcmFuazwvYT4gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+ICpmZWF0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gcmFuazwvY29kZT48L2VtPik7CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLXNldC1uYW1lIiB0aXRsZT0iZ3N0X3BsdWdpbl9mZWF0dXJlX3NldF9uYW1lKCkiPmdzdF9wbHVnaW5fZmVhdHVyZV9zZXRfbmFtZTwvYT4gICAgICAgICAoZmVhdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpCis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLWdldC1yYW5rIiB0aXRsZT0iZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9yYW5rICgpIj5nc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3Jhbms8L2E+ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPiAqZmVhdHVyZTwvY29kZT48L2VtPik7CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLWdldC1uYW1lIiB0aXRsZT0iZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9uYW1lKCkiPmdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfbmFtZTwvYT4gICAgICAgICAoZmVhdHVyZSkKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPiAqICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI2dzdC1wbHVnaW4tZmVhdHVyZS1sb2FkIiB0aXRsZT0iZ3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQgKCkiPmdzdF9wbHVnaW5fZmVhdHVyZV9sb2FkPC9hPiAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+ICpmZWF0dXJlPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdMaXN0PC9zcGFuPjwvYT4gKiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI2dzdC1wbHVnaW4tZmVhdHVyZS1saXN0LWNvcHkiIHRpdGxlPSJnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9jb3B5ICgpIj5nc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9jb3B5PC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI2dzdC1wbHVnaW4tZmVhdHVyZS1saXN0LWZyZWUiIHRpdGxlPSJnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlICgpIj5nc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlPC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4pOworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI0dTVC1QTFVHSU4tRkVBVFVSRS1MSVNULURFQlVHOkNBUFMiIHRpdGxlPSJHU1RfUExVR0lOX0ZFQVRVUkVfTElTVF9ERUJVRygpIj5HU1RfUExVR0lOX0ZFQVRVUkVfTElTVF9ERUJVRzwvYT4gICAgICAgKGxpc3QpCis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLWNoZWNrLXZlcnNpb24iIHRpdGxlPSJnc3RfcGx1Z2luX2ZlYXR1cmVfY2hlY2tfdmVyc2lvbiAoKSI+Z3N0X3BsdWdpbl9mZWF0dXJlX2NoZWNrX3ZlcnNpb248L2E+ICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5GZWF0dXJlPC9zcGFuPjwvYT4gKmZlYXR1cmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBtaW5fbWFqb3I8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBtaW5fbWlub3I8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBtaW5fbWljcm88L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLXJhbmstY29tcGFyZS1mdW5jIiB0aXRsZT0iZ3N0X3BsdWdpbl9mZWF0dXJlX3JhbmtfY29tcGFyZV9mdW5jICgpIj5nc3RfcGx1Z2luX2ZlYXR1cmVfcmFua19jb21wYXJlX2Z1bmM8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djb25zdHBvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY29uc3Rwb2ludGVyPC9zcGFuPjwvYT4gcDE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djb25zdHBvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY29uc3Rwb2ludGVyPC9zcGFuPjwvYT4gcDI8L2NvZGU+PC9lbT4pOworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdFBsdWdpbkZlYXR1cmUub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPkdPYmplY3Q8L2E+CisgICArLS0tLTxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+CisgICAgICAgICArLS0tLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+R3N0T2JqZWN0PC9hPgorICAgICAgICAgICAgICAgKy0tLS1Hc3RQbHVnaW5GZWF0dXJlCisgICAgICAgICAgICAgICAgICAgICArLS0tLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPkdzdEVsZW1lbnRGYWN0b3J5PC9hPgorICAgICAgICAgICAgICAgICAgICAgKy0tLS08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHlwZUZpbmRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RUeXBlRmluZEZhY3RvcnkiPkdzdFR5cGVGaW5kRmFjdG9yeTwvYT4KKyAgICAgICAgICAgICAgICAgICAgICstLS0tPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0SW5kZXhGYWN0b3J5Ij5Hc3RJbmRleEZhY3Rvcnk8L2E+Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0UGx1Z2luRmVhdHVyZS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK1RoaXMgaXMgYSBiYXNlIGNsYXNzIGZvciBhbnl0aGluZyB0aGF0IGNhbiBiZSBhZGRlZCB0byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+LgorPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RQbHVnaW5GZWF0dXJlLmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RQbHVnaW5GZWF0dXJlLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UGx1Z2luRmVhdHVyZTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFBsdWdpbkZlYXR1cmU7PC9wcmU+Cis8cD4KK09wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUuCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFR5cGVOYW1lRGF0YSI+PC9hPjxoMz5Hc3RUeXBlTmFtZURhdGE8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgZ2NoYXIgICAqbmFtZTsKKyAgR1R5cGUgICAgICAgICAgdHlwZTsKK30gR3N0VHlwZU5hbWVEYXRhOworPC9wcmU+Cis8cD4KK1N0cnVjdHVyZSB1c2VkIGZvciBmaWx0ZXJpbmcgYmFzZWQgb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y29uc3TCoDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RUeXBlTmFtZURhdGEubmFtZSI+PC9hPm5hbWU8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmFtZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFR5cGVOYW1lRGF0YS50eXBlIj48L2E+dHlwZTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBHVHlwZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFBsdWdpbkZlYXR1cmVGaWx0ZXIiPjwvYT48aDM+R3N0UGx1Z2luRmVhdHVyZUZpbHRlciAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAoKkdzdFBsdWdpbkZlYXR1cmVGaWx0ZXIpICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+ICpmZWF0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHdpdGggZS5nLiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktZmVhdHVyZS1maWx0ZXIiIHRpdGxlPSJnc3RfcmVnaXN0cnlfZmVhdHVyZV9maWx0ZXIgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3JlZ2lzdHJ5X2ZlYXR1cmVfZmlsdGVyKCk8L2NvZGU+PC9hPgordG8gZ2V0IGEgbGlzdCBvZiBwbHVnaW5mZWF0dXJlIHRoYXQgbWF0Y2ggY2VydGFpbiBjcml0ZXJpYS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZWF0dXJlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwbHVnaW5mZWF0dXJlIHRvIGNoZWNrPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHVzZXJfZGF0YSB0aGF0IGhhcyBiZWVuIHBhc3NlZCBvbiBlLmcuCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktZmVhdHVyZS1maWx0ZXIiIHRpdGxlPSJnc3RfcmVnaXN0cnlfZmVhdHVyZV9maWx0ZXIgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3JlZ2lzdHJ5X2ZlYXR1cmVfZmlsdGVyKCk8L2NvZGU+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBmb3IgYSBwb3NpdGl2ZSBtYXRjaCwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2U8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RSYW5rIj48L2E+PGgzPmVudW0gR3N0UmFuazwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBlbnVtIHsKKyAgR1NUX1JBTktfTk9ORSAgICAgICAgICAgICAgICAgPSAwLAorICBHU1RfUkFOS19NQVJHSU5BTCAgICAgICAgICAgICA9IDY0LAorICBHU1RfUkFOS19TRUNPTkRBUlkgICAgICAgICAgICA9IDEyOCwKKyAgR1NUX1JBTktfUFJJTUFSWSAgICAgICAgICAgICAgPSAyNTYKK30gR3N0UmFuazsKKzwvcHJlPgorPHA+CitFbGVtZW50IHByaW9yaXR5IHJhbmtzLiBEZWZpbmVzIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgYXV0b3BsdWdnZXIgKG9yCitzaW1pbGFyIHJhbmstcGlja2luZyBtZWNoYW5pc21zLCBzdWNoIGFzIGUuZy4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LWVsZW1lbnQtbWFrZS1mcm9tLXVyaSIgdGl0bGU9ImdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaSgpPC9jb2RlPjwvYT4pCit3aWxsIGNob29zZSB0aGlzIGVsZW1lbnQgb3ZlciBhbiBhbHRlcm5hdGl2ZSBvbmUgd2l0aCB0aGUgc2FtZSBmdW5jdGlvbi4KKzwvcD4KKzxwPgorVGhlc2UgY29uc3RhbnRzIHNlcnZlIGFzIGEgcm91Z2ggZ3VpZGFuY2UgZm9yIGRlZmluaW5nIHRoZSByYW5rIG9mIGEKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+LiBBbnkgdmFsdWUgaXMgdmFsaWQsIGluY2x1ZGluZyB2YWx1ZXMgYmlnZ2VyIHRoYW4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5HU1RfUkFOS19QUklNQVJZPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUkFOSy1OT05FOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9SQU5LX05PTkU8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPndpbGwgYmUgY2hvc2VuIGxhc3Qgb3Igbm90IGF0IGFsbAorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVJBTkstTUFSR0lOQUw6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1JBTktfTUFSR0lOQUw8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnVubGlrZWx5IHRvIGJlIGNob3NlbgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVJBTkstU0VDT05EQVJZOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9SQU5LX1NFQ09OREFSWTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bGlrZWx5IHRvIGJlIGNob3NlbgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVJBTkstUFJJTUFSWTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUkFOS19QUklNQVJZPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD53aWxsIGJlIGNob3NlbiBmaXJzdAorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBsdWdpbi1mZWF0dXJlLXR5cGUtbmFtZS1maWx0ZXIiPjwvYT48aDM+Z3N0X3BsdWdpbl9mZWF0dXJlX3R5cGVfbmFtZV9maWx0ZXIgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX3R5cGVfbmFtZV9maWx0ZXIgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPiAqZmVhdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI0dzdFR5cGVOYW1lRGF0YSIgdGl0bGU9IkdzdFR5cGVOYW1lRGF0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVOYW1lRGF0YTwvc3Bhbj48L2E+ICpkYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ29tcGFyZXMgdHlwZSBhbmQgbmFtZSBvZiBwbHVnaW4gZmVhdHVyZS4gQ2FuIGJlIHVzZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZpbHRlci5odG1sI2dzdC1maWx0ZXItcnVuIiB0aXRsZT0iZ3N0X2ZpbHRlcl9ydW4gKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2ZpbHRlcl9ydW4oKTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZlYXR1cmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHR5cGUgYW5kIG5hbWUgdG8gY2hlY2sgYWdhaW5zdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dC4gRGVmYXVsdCBpcyB0cmFuc2ZlciBub25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmluPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiBlcXVhbC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGx1Z2luLWZlYXR1cmUtc2V0LXJhbmsiPjwvYT48aDM+Z3N0X3BsdWdpbl9mZWF0dXJlX3NldF9yYW5rICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9zZXRfcmFuayAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5GZWF0dXJlPC9zcGFuPjwvYT4gKmZlYXR1cmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiByYW5rPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU3BlY2lmaWVzIGEgcmFuayBmb3IgYSBwbHVnaW4gZmVhdHVyZSwgc28gdGhhdCBhdXRvcGx1Z2dpbmcgdXNlcwordGhlIG1vc3QgYXBwcm9wcmlhdGUgZmVhdHVyZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZWF0dXJlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmZlYXR1cmUgdG8gcmFuazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmFuazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5yYW5rIHZhbHVlIC0gaGlnaGVyIG51bWJlciBtZWFucyBtb3JlIHByaW9yaXR5IHJhbms8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGx1Z2luLWZlYXR1cmUtc2V0LW5hbWUiPjwvYT48aDM+Z3N0X3BsdWdpbl9mZWF0dXJlX3NldF9uYW1lKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9zZXRfbmFtZShmZWF0dXJlLG5hbWUpIGdzdF9vYmplY3Rfc2V0X25hbWUoR1NUX09CSkVDVF9DQVNUKGZlYXR1cmUpLG5hbWUpCis8L3ByZT4KKzxwPgorU2V0cyB0aGUgbmFtZSBvZiB0aGUgcGx1Z2luIGZlYXR1cmUsIGdldHRpbmcgcmlkIG9mIHRoZSBvbGQgbmFtZSBpZiB0aGVyZSB3YXMgb25lLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZlYXR1cmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPiB0byBzZXQgdGhlIG5hbWUgb2YuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXcgbmFtZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wbHVnaW4tZmVhdHVyZS1nZXQtcmFuayI+PC9hPjxoMz5nc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3JhbmsgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9yYW5rICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPiAqZmVhdHVyZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIHJhbmsgb2YgYSBwbHVnaW4gZmVhdHVyZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZWF0dXJlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgZmVhdHVyZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSByYW5rIG9mIHRoZSBmZWF0dXJlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBsdWdpbi1mZWF0dXJlLWdldC1uYW1lIj48L2E+PGgzPmdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfbmFtZSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X25hbWUoZmVhdHVyZSkgICAgICBnc3Rfb2JqZWN0X2dldF9uYW1lKEdTVF9PQkpFQ1RfQ0FTVChmZWF0dXJlKSkKKzwvcHJlPgorPHA+CitSZXR1cm5zIGEgY29weSBvZiB0aGUgbmFtZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmVhdHVyZTwvY29kZT48L2VtPi4KK0NhbGxlciBzaG91bGQgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1NZW1vcnktQWxsb2NhdGlvbi5odG1sI2ctZnJlZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX2ZyZWUoKTwvY29kZT48L2E+IHRoZSByZXR1cm4gdmFsdWUgYWZ0ZXIgdXNhZ2UuCitGb3IgYSBuYW1lbGVzcyBwbHVnaW4gZmVhdHVyZSwgdGhpcyByZXR1cm5zIE5VTEwsIHdoaWNoIHlvdSBjYW4gc2FmZWx5IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItTWVtb3J5LUFsbG9jYXRpb24uaHRtbCNnLWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19mcmVlKCk8L2NvZGU+PC9hPgorYXMgd2VsbC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZWF0dXJlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5GZWF0dXJlPC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSBuYW1lIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZWF0dXJlPC9jb2RlPjwvZW0+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuYW1lIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZWF0dXJlPC9jb2RlPjwvZW0+LiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLU1lbW9yeS1BbGxvY2F0aW9uLmh0bWwjZy1mcmVlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfZnJlZSgpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNhZ2UuIE1UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGx1Z2luLWZlYXR1cmUtbG9hZCI+PC9hPjxoMz5nc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+ICogIGdzdF9wbHVnaW5fZmVhdHVyZV9sb2FkICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5GZWF0dXJlPC9zcGFuPjwvYT4gKmZlYXR1cmU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitMb2FkcyB0aGUgcGx1Z2luIGNvbnRhaW5pbmcgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZlYXR1cmU8L2NvZGU+PC9lbT4gaWYgaXQncyBub3QgYWxyZWFkeSBsb2FkZWQuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZWF0dXJlPC9jb2RlPjwvZW0+IGlzCit1bmFmZmVjdGVkOyB1c2UgdGhlIHJldHVybiB2YWx1ZSBpbnN0ZWFkLgorPC9wPgorPHA+CitOb3JtYWxseSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgbGlrZSB0aGlzOgorPC9wPgorPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CitHc3RQbHVnaW5GZWF0dXJlICpsb2FkZWRfZmVhdHVyZTsKKworbG9hZGVkX2ZlYXR1cmUgPSBnc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZCAoZmVhdHVyZSk7CisvLyBwcmVzdW1hYmx5LCB3ZSdyZSBubyBsb25nZXIgaW50ZXJlc3RlZCBpbiB0aGUgcG90ZW50aWFsbHktdW5sb2FkZWQgZmVhdHVyZQorZ3N0X29iamVjdF91bnJlZiAoZmVhdHVyZSk7CitmZWF0dXJlID0gbG9hZGVkX2ZlYXR1cmU7Cis8L3ByZT48L2Rpdj4KKzxwPgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZlYXR1cmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBsdWdpbiBmZWF0dXJlIHRvIGNoZWNrLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSByZWZlcmVuY2UgdG8gdGhlIGxvYWRlZCBmZWF0dXJlLCBvciBOVUxMIG9uIGVycm9yLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBsdWdpbi1mZWF0dXJlLWxpc3QtY29weSI+PC9hPjxoMz5nc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9jb3B5ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HTGlzdDwvc3Bhbj48L2E+ICogICAgICAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfY29weSAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb3BpZXMgdGhlIGxpc3Qgb2YgZmVhdHVyZXMuIENhbGxlciBzaG91bGQgY2FsbCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Z3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZTwvY29kZT48L2VtPgord2hlbiBkb25lIHdpdGggdGhlIGxpc3QuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5saXN0CitvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3QuUGx1Z2luRmVhdHVyZV08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGNvcHkgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT4sCit3aXRoIGVhY2ggZmVhdHVyZSdzIHJlZmVyZW5jZSBjb3VudCBpbmNyZW1lbnRlZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3QuUGx1Z2luRmVhdHVyZV08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI2PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGx1Z2luLWZlYXR1cmUtbGlzdC1mcmVlIj48L2E+PGgzPmdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitVbnJlZnMgZWFjaCBtZW1iZXIgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT4sIHRoZW4gZnJlZXMgdGhlIGxpc3QuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bGlzdAorb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5GZWF0dXJlPC9zcGFuPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gR3N0LlBsdWdpbkZlYXR1cmVdPC9zcGFuPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1QTFVHSU4tRkVBVFVSRS1MSVNULURFQlVHOkNBUFMiPjwvYT48aDM+R1NUX1BMVUdJTl9GRUFUVVJFX0xJU1RfREVCVUcoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUExVR0lOX0ZFQVRVUkVfTElTVF9ERUJVRyhsaXN0KSBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9kZWJ1ZyhsaXN0KQorPC9wcmU+Cis8cD4KK0RlYnVnIHRoZSBwbHVnaW4gZmVhdHVyZSBuYW1lcyBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiBvZgorcGx1Z2luIGZlYXR1cmVzLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IEdzdC5QbHVnaW5GZWF0dXJlXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMxPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGx1Z2luLWZlYXR1cmUtY2hlY2stdmVyc2lvbiI+PC9hPjxoMz5nc3RfcGx1Z2luX2ZlYXR1cmVfY2hlY2tfdmVyc2lvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfY2hlY2tfdmVyc2lvbiAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+ICpmZWF0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbWluX21ham9yPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbWluX21pbm9yPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbWluX21pY3JvPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIHBsdWdpbiBmZWF0dXJlIGlzIGF0IGxlYXN0CisgdGhlIHJlcXVpcmVkIHZlcnNpb24KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZWF0dXJlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgZmVhdHVyZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWluX21ham9yPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm1pbmltdW0gcmVxdWlyZWQgbWFqb3IgdmVyc2lvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWluX21pbm9yPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm1pbmltdW0gcmVxdWlyZWQgbWlub3IgdmVyc2lvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWluX21pY3JvPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm1pbmltdW0gcmVxdWlyZWQgbWljcm8gdmVyc2lvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5UUlVFPC9zcGFuPjwvYT4gaWYgdGhlIHBsdWdpbiBmZWF0dXJlIGhhcyBhdCBsZWFzdAordGhlIHJlcXVpcmVkIHZlcnNpb24sIG90aGVyd2lzZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5GQUxTRTwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wbHVnaW4tZmVhdHVyZS1yYW5rLWNvbXBhcmUtZnVuYyI+PC9hPjxoMz5nc3RfcGx1Z2luX2ZlYXR1cmVfcmFua19jb21wYXJlX2Z1bmMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfcmFua19jb21wYXJlX2Z1bmMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NvbnN0cG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjb25zdHBvaW50ZXI8L3NwYW4+PC9hPiBwMTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NvbnN0cG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjb25zdHBvaW50ZXI8L3NwYW4+PC9hPiBwMjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NvbXBhcmVzIHRoZSB0d28gZ2l2ZW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5GZWF0dXJlPC9zcGFuPjwvYT4gaW5zdGFuY2VzLiBUaGlzIGZ1bmN0aW9uIGNhbiBiZQordXNlZCBhcyBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dDb21wYXJlRnVuYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdDb21wYXJlRnVuYzwvc3Bhbj48L2E+IHdoZW4gc29ydGluZyBieSByYW5rIGFuZCB0aGVuIGJ5IG5hbWUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cDE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wMjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5uZWdhdGl2ZSB2YWx1ZSBpZiB0aGUgcmFuayBvZiBwMSAmZ3Q7IHRoZSByYW5rIG9mIHAyIG9yIHRoZSByYW5rcyBhcmUKK2VxdWFsIGJ1dCB0aGUgbmFtZSBvZiBwMSBjb21lcyBiZWZvcmUgdGhlIG5hbWUgb2YgcDI7IHplcm8gaWYgdGhlIHJhbmsKK2FuZCBuYW1lcyBhcmUgZXF1YWw7IHBvc2l0aXZlIHZhbHVlIGlmIHRoZSByYW5rIG9mIHAxICZsdDsgdGhlIHJhbmsgb2YgcDIgb3IgdGhlCityYW5rcyBhcmUgZXF1YWwgYnV0IHRoZSBuYW1lIG9mIHAyIGNvbWVzIGFmdGVyIHRoZSBuYW1lIG9mIHAxPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RQbHVnaW5GZWF0dXJlLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvR3N0UHJlc2V0Lmh0bWwgYi9kb2NzL2dzdC9odG1sL0dzdFByZXNldC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMmM1YzAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dzdC9odG1sL0dzdFByZXNldC5odG1sCkBAIC0wLDAgKzEsNDM3IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0UHJlc2V0PC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCIgdGl0bGU9IkdzdFBvbGwiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNHc3RQcmVzZXQuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RQcmVzZXQuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFByZXNldC5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iR3N0UHJlc2V0Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0UHJlc2V0LnRvcF9vZl9wYWdlIj48L2E+R3N0UHJlc2V0PC9zcGFuPjwvaDI+Cis8cD5Hc3RQcmVzZXQg4oCUIGhlbHBlciBpbnRlcmZhY2UgZm9yIGVsZW1lbnQgcHJlc2V0czwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9IkdzdFByZXNldC5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisjaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OworCisgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCNHc3RQcmVzZXQtc3RydWN0IiB0aXRsZT0iR3N0UHJlc2V0Ij5Hc3RQcmVzZXQ8L2E+Oworc3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwjR3N0UHJlc2V0SW50ZXJmYWNlIiB0aXRsZT0ic3RydWN0IEdzdFByZXNldEludGVyZmFjZSI+R3N0UHJlc2V0SW50ZXJmYWNlPC9hPjsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICoqICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sI2dzdC1wcmVzZXQtZ2V0LXByZXNldC1uYW1lcyIgdGl0bGU9ImdzdF9wcmVzZXRfZ2V0X3ByZXNldF9uYW1lcyAoKSI+Z3N0X3ByZXNldF9nZXRfcHJlc2V0X25hbWVzPC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sIiB0aXRsZT0iR3N0UHJlc2V0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UHJlc2V0PC9zcGFuPjwvYT4gKnByZXNldDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCNnc3QtcHJlc2V0LWdldC1wcm9wZXJ0eS1uYW1lcyIgdGl0bGU9ImdzdF9wcmVzZXRfZ2V0X3Byb3BlcnR5X25hbWVzICgpIj5nc3RfcHJlc2V0X2dldF9wcm9wZXJ0eV9uYW1lczwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiIHRpdGxlPSJHc3RQcmVzZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQcmVzZXQ8L3NwYW4+PC9hPiAqcHJlc2V0PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sI2dzdC1wcmVzZXQtbG9hZC1wcmVzZXQiIHRpdGxlPSJnc3RfcHJlc2V0X2xvYWRfcHJlc2V0ICgpIj5nc3RfcHJlc2V0X2xvYWRfcHJlc2V0PC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiIHRpdGxlPSJHc3RQcmVzZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQcmVzZXQ8L3NwYW4+PC9hPiAqcHJlc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwjZ3N0LXByZXNldC1zYXZlLXByZXNldCIgdGl0bGU9ImdzdF9wcmVzZXRfc2F2ZV9wcmVzZXQgKCkiPmdzdF9wcmVzZXRfc2F2ZV9wcmVzZXQ8L2E+ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFByZXNldDwvc3Bhbj48L2E+ICpwcmVzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCNnc3QtcHJlc2V0LXJlbmFtZS1wcmVzZXQiIHRpdGxlPSJnc3RfcHJlc2V0X3JlbmFtZV9wcmVzZXQgKCkiPmdzdF9wcmVzZXRfcmVuYW1lX3ByZXNldDwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFByZXNldDwvc3Bhbj48L2E+ICpwcmVzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqb2xkX25hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmV3X25hbWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwjZ3N0LXByZXNldC1kZWxldGUtcHJlc2V0IiB0aXRsZT0iZ3N0X3ByZXNldF9kZWxldGVfcHJlc2V0ICgpIj5nc3RfcHJlc2V0X2RlbGV0ZV9wcmVzZXQ8L2E+ICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiIHRpdGxlPSJHc3RQcmVzZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQcmVzZXQ8L3NwYW4+PC9hPiAqcHJlc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwjZ3N0LXByZXNldC1zZXQtbWV0YSIgdGl0bGU9ImdzdF9wcmVzZXRfc2V0X21ldGEgKCkiPmdzdF9wcmVzZXRfc2V0X21ldGE8L2E+ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFByZXNldDwvc3Bhbj48L2E+ICpwcmVzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwjZ3N0LXByZXNldC1nZXQtbWV0YSIgdGl0bGU9ImdzdF9wcmVzZXRfZ2V0X21ldGEgKCkiPmdzdF9wcmVzZXRfZ2V0X21ldGE8L2E+ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFByZXNldDwvc3Bhbj48L2E+ICpwcmVzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKnZhbHVlPC9jb2RlPjwvZW0+KTsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RQcmVzZXQub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgR0ludGVyZmFjZQorICAgKy0tLS1Hc3RQcmVzZXQKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RQcmVzZXQuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitUaGlzIGludGVyZmFjZSBvZmZlcnMgbWV0aG9kcyB0byBxdWVyeSBhbmQgbWFuaXB1bGF0ZSBwYXJhbWV0ZXIgcHJlc2V0IHNldHMuCitBIHByZXNldCBpcyBhIGJ1bmNoIG9mIHByb3BlcnR5IHNldHRpbmdzLCB0b2dldGhlciB3aXRoIG1ldGEgZGF0YSBhbmQgYSBuYW1lLgorVGhlIG5hbWUgb2YgYSBwcmVzZXQgc2VydmVzIGFzIGtleSBmb3Igc3Vic2VxdWVudCBtZXRob2QgY2FsbHMgdG8gbWFuaXB1bGF0ZQorc2luZ2xlIHByZXNldHMuCitBbGwgaW5zdGFuY2VzIG9mIG9uZSB0eXBlIHdpbGwgc2hhcmUgdGhlIGxpc3Qgb2YgcHJlc2V0cy4gVGhlIGxpc3QgaXMgY3JlYXRlZAorb24gZGVtYW5kLCBpZiBwcmVzZXRzIGFyZSBub3QgdXNlZCwgdGhlIGxpc3QgaXMgbm90IGNyZWF0ZWQuCis8L3A+Cis8cD4KK1RoZSBpbnRlcmZhY2UgY29tZXMgd2l0aCBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdGhhdCBzZXJ2ZXMgbW9zdCBwbHVnaW5zLgorV3JhcHBlciBwbHVnaW5zIHdpbGwgb3ZlcnJpZGUgbW9zdCBtZXRob2RzIHRvIGltcGxlbWVudCBzdXBwb3J0IGZvciB0aGUKK25hdGl2ZSBwcmVzZXQgZm9ybWF0IG9mIHRob3NlIHdyYXBwZWQgcGx1Z2lucy4KK09uZSBtZXRob2QgdGhhdCBpcyB1c2VmdWwgdG8gYmUgb3ZlcnJpZGRlbiBpcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwjZ3N0LXByZXNldC1nZXQtcHJvcGVydHktbmFtZXMiIHRpdGxlPSJnc3RfcHJlc2V0X2dldF9wcm9wZXJ0eV9uYW1lcyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcHJlc2V0X2dldF9wcm9wZXJ0eV9uYW1lcygpPC9jb2RlPjwvYT4uCitXaXRoIHRoYXQgb25lIGNhbiBjb250cm9sIHdoaWNoIHByb3BlcnRpZXMgYXJlIHNhdmVkIGFuZCBpbiB3aGljaCBvcmRlci4KKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0UHJlc2V0LmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RQcmVzZXQtc3RydWN0Ij48L2E+PGgzPkdzdFByZXNldDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBzdHJ1Y3QgX0dzdFByZXNldCBHc3RQcmVzZXQ7PC9wcmU+Cis8cD4KK09wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiIHRpdGxlPSJHc3RQcmVzZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQcmVzZXQ8L3NwYW4+PC9hPiBkYXRhIHN0cnVjdHVyZS4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UHJlc2V0SW50ZXJmYWNlIj48L2E+PGgzPnN0cnVjdCBHc3RQcmVzZXRJbnRlcmZhY2U8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RQcmVzZXRJbnRlcmZhY2UgeworICBHVHlwZUludGVyZmFjZSBwYXJlbnQ7CisKKyAgLyogbWV0aG9kcyAqLworICBnY2hhcioqICAgICAgKCpnZXRfcHJlc2V0X25hbWVzKSAgICAoR3N0UHJlc2V0ICpwcmVzZXQpOworCisgIGdjaGFyKiogICAgICAoKmdldF9wcm9wZXJ0eV9uYW1lcykgIChHc3RQcmVzZXQgKnByZXNldCk7CisKKyAgZ2Jvb2xlYW4gICAgICgqbG9hZF9wcmVzZXQpICAgICAgICAgKEdzdFByZXNldCAqcHJlc2V0LCBjb25zdCBnY2hhciAqbmFtZSk7CisgIGdib29sZWFuICAgICAoKnNhdmVfcHJlc2V0KSAgICAgICAgIChHc3RQcmVzZXQgKnByZXNldCwgY29uc3QgZ2NoYXIgKm5hbWUpOworICBnYm9vbGVhbiAgICAgKCpyZW5hbWVfcHJlc2V0KSAgICAgICAoR3N0UHJlc2V0ICpwcmVzZXQsIGNvbnN0IGdjaGFyICpvbGRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpuZXdfbmFtZSk7CisgIGdib29sZWFuICAgICAoKmRlbGV0ZV9wcmVzZXQpICAgICAgIChHc3RQcmVzZXQgKnByZXNldCwgY29uc3QgZ2NoYXIgKm5hbWUpOworICAKKyAgZ2Jvb2xlYW4gICAgICgqc2V0X21ldGEpICAgICAgICAgICAgKEdzdFByZXNldCAqcHJlc2V0LCBjb25zdCBnY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICp0YWcsIGNvbnN0IGdjaGFyICp2YWx1ZSk7CisgIGdib29sZWFuICAgICAoKmdldF9tZXRhKSAgICAgICAgICAgIChHc3RQcmVzZXQgKnByZXNldCwgY29uc3QgZ2NoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqdGFnLCBnY2hhciAqKnZhbHVlKTsKK307Cis8L3ByZT4KKzxwPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sIiB0aXRsZT0iR3N0UHJlc2V0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UHJlc2V0PC9zcGFuPjwvYT4gaW50ZXJmYWNlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGVJbnRlcmZhY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZUludGVyZmFjZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQcmVzZXRJbnRlcmZhY2UucGFyZW50Ij48L2E+cGFyZW50PC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wYXJlbnQgaW50ZXJmYWNlIHR5cGUuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFByZXNldEludGVyZmFjZS5nZXQtcHJlc2V0LW5hbWVzIj48L2E+Z2V0X3ByZXNldF9uYW1lczwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dmlydHVhbCBtZXRob2QgdG8gZ2V0IGxpc3Qgb2YgcHJlc2V0czwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQcmVzZXRJbnRlcmZhY2UuZ2V0LXByb3BlcnR5LW5hbWVzIj48L2E+Z2V0X3Byb3BlcnR5X25hbWVzPC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD52aXJ0dWFsIG1ldGhvZHMgdG8gZ2V0IHByb3BlcnRpZXMgdGhhdCBhcmUgcGVyc2lzdGVudDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQcmVzZXRJbnRlcmZhY2UubG9hZC1wcmVzZXQiPjwvYT5sb2FkX3ByZXNldDwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dmlydHVhbCBtZXRob2RzIHRvIGxvYWQgYSBwcmVzZXQgaW50byBwcm9wZXJ0aWVzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFByZXNldEludGVyZmFjZS5zYXZlLXByZXNldCI+PC9hPnNhdmVfcHJlc2V0PC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD52aXJ0dWFsIG1ldGhvZHMgdG8gc2F2ZSBwcm9wZXJ0aWVzIGludG8gYSBwcmVzZXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UHJlc2V0SW50ZXJmYWNlLnJlbmFtZS1wcmVzZXQiPjwvYT5yZW5hbWVfcHJlc2V0PC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD52aXJ0dWFsIG1ldGhvZHMgdG8gcmVuYW1lIGEgcHJlc2V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFByZXNldEludGVyZmFjZS5kZWxldGUtcHJlc2V0Ij48L2E+ZGVsZXRlX3ByZXNldDwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dmlydHVhbCBtZXRob2RzIHRvIHJlbW92ZSBhIHByZXNldDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQcmVzZXRJbnRlcmZhY2Uuc2V0LW1ldGEiPjwvYT5zZXRfbWV0YTwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dmlydHVhbCBtZXRob2RzIHRvIHNldCB0ZXh0dWFsIG1ldGEgZGF0YSB0byBhIHByZXNldDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQcmVzZXRJbnRlcmZhY2UuZ2V0LW1ldGEiPjwvYT5nZXRfbWV0YTwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dmlydHVhbCBtZXRob2RzIHRvIGdldCB0ZXh0dWFsIG1ldGEgZGF0YSBmcm9tIGEgcHJlc2V0PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXByZXNldC1nZXQtcHJlc2V0LW5hbWVzIj48L2E+PGgzPmdzdF9wcmVzZXRfZ2V0X3ByZXNldF9uYW1lcyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiogICAgICAgICAgICBnc3RfcHJlc2V0X2dldF9wcmVzZXRfbmFtZXMgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFByZXNldDwvc3Bhbj48L2E+ICpwcmVzZXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgYSBjb3B5IG9mIHByZXNldCBuYW1lcyBhcyBhIE5VTEwgdGVybWluYXRlZCBzdHJpbmcgYXJyYXkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJlc2V0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gdGhhdCBpbXBsZW1lbnRzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFByZXNldDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5saXN0IHdpdGggbmFtZXMsIHVlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RyaW5nLVV0aWxpdHktRnVuY3Rpb25zLmh0bWwjZy1zdHJmcmVldiI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX3N0cmZyZWV2KCk8L2NvZGU+PC9hPiBhZnRlciB1c2FnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IHplcm8tdGVybWluYXRlZD0xXVs8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBnY2hhcipdPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXByZXNldC1nZXQtcHJvcGVydHktbmFtZXMiPjwvYT48aDM+Z3N0X3ByZXNldF9nZXRfcHJvcGVydHlfbmFtZXMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICoqICAgICAgICAgICAgZ3N0X3ByZXNldF9nZXRfcHJvcGVydHlfbmFtZXMgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiIHRpdGxlPSJHc3RQcmVzZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQcmVzZXQ8L3NwYW4+PC9hPiAqcHJlc2V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0IGEgdGhlIG5hbWVzIG9mIHRoZSBHT2JqZWN0IHByb3BlcnRpZXMgdGhhdCBjYW4gYmUgdXNlZCBmb3IgcHJlc2V0cy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcmVzZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiB0aGF0IGltcGxlbWVudHMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sIiB0aXRsZT0iR3N0UHJlc2V0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UHJlc2V0PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFuCithcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyB3aGljaCBzaG91bGQgYmUgZnJlZWQgd2l0aCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0cmluZy1VdGlsaXR5LUZ1bmN0aW9ucy5odG1sI2ctc3RyZnJlZXYiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19zdHJmcmVldigpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gemVyby10ZXJtaW5hdGVkPTFdWzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IGdjaGFyKl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcHJlc2V0LWxvYWQtcHJlc2V0Ij48L2E+PGgzPmdzdF9wcmVzZXRfbG9hZF9wcmVzZXQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3ByZXNldF9sb2FkX3ByZXNldCAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiIHRpdGxlPSJHc3RQcmVzZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQcmVzZXQ8L3NwYW4+PC9hPiAqcHJlc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitMb2FkIHRoZSBnaXZlbiBwcmVzZXQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJlc2V0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gdGhhdCBpbXBsZW1lbnRzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFByZXNldDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cHJlc2V0IG5hbWUgdG8gbG9hZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gZm9yIHN1Y2Nlc3MsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaWYgZS5nLiB0aGVyZSBpcyBubyBwcmVzZXQgd2l0aCB0aGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcHJlc2V0LXNhdmUtcHJlc2V0Ij48L2E+PGgzPmdzdF9wcmVzZXRfc2F2ZV9wcmVzZXQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3ByZXNldF9zYXZlX3ByZXNldCAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiIHRpdGxlPSJHc3RQcmVzZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQcmVzZXQ8L3NwYW4+PC9hPiAqcHJlc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTYXZlIHRoZSBjdXJyZW50IG9iamVjdCBzZXR0aW5ncyBhcyBhIHByZXNldCB1bmRlciB0aGUgZ2l2ZW4gbmFtZS4gSWYgdGhlcmUKK2lzIGFscmVhZHkgYSBwcmVzZXQgYnkgdGhpcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPiBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByZXNldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+IHRoYXQgaW1wbGVtZW50cyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiIHRpdGxlPSJHc3RQcmVzZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQcmVzZXQ8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnByZXNldCBuYW1lIHRvIHNhdmU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGZvciBzdWNjZXNzLCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcHJlc2V0LXJlbmFtZS1wcmVzZXQiPjwvYT48aDM+Z3N0X3ByZXNldF9yZW5hbWVfcHJlc2V0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9wcmVzZXRfcmVuYW1lX3ByZXNldCAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sIiB0aXRsZT0iR3N0UHJlc2V0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UHJlc2V0PC9zcGFuPjwvYT4gKnByZXNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpvbGRfbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuZXdfbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlbmFtZXMgYSBwcmVzZXQuIElmIHRoZXJlIGlzIGFscmVhZHkgYSBwcmVzZXQgYnkgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uZXdfbmFtZTwvY29kZT48L2VtPiBpdCB3aWxsIGJlCitvdmVyd3JpdHRlbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcmVzZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiB0aGF0IGltcGxlbWVudHMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sIiB0aXRsZT0iR3N0UHJlc2V0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UHJlc2V0PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2xkX25hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Y3VycmVudCBwcmVzZXQgbmFtZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmV3X25hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bmV3IHByZXNldCBuYW1lPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBmb3Igc3VjY2VzcywgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZiBlLmcuIHRoZXJlIGlzIG5vIHByZXNldCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vbGRfbmFtZTwvY29kZT48L2VtPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXByZXNldC1kZWxldGUtcHJlc2V0Ij48L2E+PGgzPmdzdF9wcmVzZXRfZGVsZXRlX3ByZXNldCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfcHJlc2V0X2RlbGV0ZV9wcmVzZXQgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFByZXNldDwvc3Bhbj48L2E+ICpwcmVzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0RlbGV0ZSB0aGUgZ2l2ZW4gcHJlc2V0LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByZXNldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+IHRoYXQgaW1wbGVtZW50cyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiIHRpdGxlPSJHc3RQcmVzZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQcmVzZXQ8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnByZXNldCBuYW1lIHRvIHJlbW92ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gZm9yIHN1Y2Nlc3MsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaWYgZS5nLiB0aGVyZSBpcyBubyBwcmVzZXQgd2l0aCB0aGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcHJlc2V0LXNldC1tZXRhIj48L2E+PGgzPmdzdF9wcmVzZXRfc2V0X21ldGEgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3ByZXNldF9zZXRfbWV0YSAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiIHRpdGxlPSJHc3RQcmVzZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQcmVzZXQ8L3NwYW4+PC9hPiAqcHJlc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0cyBhIG5ldyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4gZm9yIGFuIGV4aXN0aW5nIG1ldGEgZGF0YSBpdGVtIG9yIGFkZHMgYSBuZXcgaXRlbS4gTWV0YQorZGF0YSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnPC9jb2RlPjwvZW0+IG5hbWVzIGNhbiBiZSBzb21ldGhpbmcgbGlrZSBlLmcuICJjb21tZW50Ii4gU3VwcGx5aW5nIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGZvciB0aGUKKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPiB3aWxsIHVuc2V0IGFuIGV4aXN0aW5nIHZhbHVlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByZXNldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+IHRoYXQgaW1wbGVtZW50cyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiIHRpdGxlPSJHc3RQcmVzZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQcmVzZXQ8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnByZXNldCBuYW1lPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bWV0YSBkYXRhIGl0ZW0gbmFtZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bmV3IHZhbHVlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBmb3Igc3VjY2VzcywgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZiBlLmcuIHRoZXJlIGlzIG5vIHByZXNldCB3aXRoIHRoYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wcmVzZXQtZ2V0LW1ldGEiPjwvYT48aDM+Z3N0X3ByZXNldF9nZXRfbWV0YSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfcHJlc2V0X2dldF9tZXRhICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFByZXNldDwvc3Bhbj48L2E+ICpwcmVzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+IGZvciBhbiBleGlzdGluZyBtZXRhIGRhdGEgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZzwvY29kZT48L2VtPi4gTWV0YSBkYXRhIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWc8L2NvZGU+PC9lbT4gbmFtZXMgY2FuIGJlCitzb21ldGhpbmcgbGlrZSBlLmcuICJjb21tZW50Ii4gUmV0dXJuZWQgdmFsdWVzIG5lZWQgdG8gYmUgcmVsZWFzZWQgd2hlbiBkb25lLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByZXNldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+IHRoYXQgaW1wbGVtZW50cyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiIHRpdGxlPSJHc3RQcmVzZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQcmVzZXQ8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnByZXNldCBuYW1lPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bWV0YSBkYXRhIGl0ZW0gbmFtZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dmFsdWUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPiBjYWxsZWUtYWxsb2NhdGVzXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gZm9yIHN1Y2Nlc3MsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaWYgZS5nLiB0aGVyZSBpcyBubyBwcmVzZXQgd2l0aCB0aGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+CitvciBubyB2YWx1ZSBmb3IgdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWc8L2NvZGU+PC9lbT4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjA8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9Hc3RSZWdpc3RyeS5odG1sIGIvZG9jcy9nc3QvaHRtbC9Hc3RSZWdpc3RyeS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyOWJiNmMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dzdC9odG1sL0dzdFJlZ2lzdHJ5Lmh0bWwKQEAgLTAsMCArMSwxMDIyIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0UmVnaXN0cnk8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCIgdGl0bGU9IkdzdFNlZ21lbnQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI0dzdFJlZ2lzdHJ5LnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0UmVnaXN0cnkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFJlZ2lzdHJ5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0UmVnaXN0cnkuc2lnbmFscyIgY2xhc3M9InNob3J0Y3V0Ij5TaWduYWxzPC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9IkdzdFJlZ2lzdHJ5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0UmVnaXN0cnkudG9wX29mX3BhZ2UiPjwvYT5Hc3RSZWdpc3RyeTwvc3Bhbj48L2gyPgorPHA+R3N0UmVnaXN0cnkg4oCUIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIG1hbmFnZW1lbnQgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gb2JqZWN0czwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9IkdzdFJlZ2lzdHJ5LnN5bm9wc2lzIj48L2E+PGgyPlN5bm9wc2lzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7CisKK3N0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjR3N0UmVnaXN0cnktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJlZ2lzdHJ5Ij5Hc3RSZWdpc3RyeTwvYT47Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFJlZ2lzdHJ5PC9zcGFuPjwvYT4gKiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktZ2V0LWRlZmF1bHQiIHRpdGxlPSJnc3RfcmVnaXN0cnlfZ2V0X2RlZmF1bHQgKCkiPmdzdF9yZWdpc3RyeV9nZXRfZGVmYXVsdDwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HTGlzdDwvc3Bhbj48L2E+ICogICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWdldC1mZWF0dXJlLWxpc3QiIHRpdGxlPSJnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdCAoKSI+Z3N0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3Q8L2E+ICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJlZ2lzdHJ5PC9zcGFuPjwvYT4gKnJlZ2lzdHJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MzI8L3NwYW4+PC9hPiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktZ2V0LWZlYXR1cmUtbGlzdC1jb29raWUiIHRpdGxlPSJnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9jb29raWUgKCkiPmdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2Nvb2tpZTwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiAqcmVnaXN0cnk8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPiAqICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1nZXQtZmVhdHVyZS1saXN0LWJ5LXBsdWdpbiIgdGl0bGU9ImdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2J5X3BsdWdpbiAoKSI+Z3N0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3RfYnlfcGx1Z2luPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSZWdpc3RyeTwvc3Bhbj48L2E+ICpyZWdpc3RyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdMaXN0PC9zcGFuPjwvYT4gKiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktZ2V0LXBhdGgtbGlzdCIgdGl0bGU9ImdzdF9yZWdpc3RyeV9nZXRfcGF0aF9saXN0ICgpIj5nc3RfcmVnaXN0cnlfZ2V0X3BhdGhfbGlzdDwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiAqcmVnaXN0cnk8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPiAqICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1nZXQtcGx1Z2luLWxpc3QiIHRpdGxlPSJnc3RfcmVnaXN0cnlfZ2V0X3BsdWdpbl9saXN0ICgpIj5nc3RfcmVnaXN0cnlfZ2V0X3BsdWdpbl9saXN0PC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiAqcmVnaXN0cnk8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktYWRkLXBsdWdpbiIgdGl0bGU9ImdzdF9yZWdpc3RyeV9hZGRfcGx1Z2luICgpIj5nc3RfcmVnaXN0cnlfYWRkX3BsdWdpbjwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiAqcmVnaXN0cnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gKnBsdWdpbjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1yZW1vdmUtcGx1Z2luIiB0aXRsZT0iZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9wbHVnaW4gKCkiPmdzdF9yZWdpc3RyeV9yZW1vdmVfcGx1Z2luPC9hPiAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSZWdpc3RyeTwvc3Bhbj48L2E+ICpyZWdpc3RyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqcGx1Z2luPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdMaXN0PC9zcGFuPjwvYT4gKiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktcGx1Z2luLWZpbHRlciIgdGl0bGU9ImdzdF9yZWdpc3RyeV9wbHVnaW5fZmlsdGVyICgpIj5nc3RfcmVnaXN0cnlfcGx1Z2luX2ZpbHRlcjwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiAqcmVnaXN0cnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkZpbHRlciIgdGl0bGU9IkdzdFBsdWdpbkZpbHRlciAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZpbHRlcjwvc3Bhbj48L2E+IGZpbHRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGZpcnN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdMaXN0PC9zcGFuPjwvYT4gKiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktZmVhdHVyZS1maWx0ZXIiIHRpdGxlPSJnc3RfcmVnaXN0cnlfZmVhdHVyZV9maWx0ZXIgKCkiPmdzdF9yZWdpc3RyeV9mZWF0dXJlX2ZpbHRlcjwvYT4gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSZWdpc3RyeTwvc3Bhbj48L2E+ICpyZWdpc3RyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI0dzdFBsdWdpbkZlYXR1cmVGaWx0ZXIiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlRmlsdGVyICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZUZpbHRlcjwvc3Bhbj48L2E+IGZpbHRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGZpcnN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWZpbmQtcGx1Z2luIiB0aXRsZT0iZ3N0X3JlZ2lzdHJ5X2ZpbmRfcGx1Z2luICgpIj5nc3RfcmVnaXN0cnlfZmluZF9wbHVnaW48L2E+ICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiAqcmVnaXN0cnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQbHVnaW5GZWF0dXJlPC9zcGFuPjwvYT4gKiAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWZpbmQtZmVhdHVyZSIgdGl0bGU9ImdzdF9yZWdpc3RyeV9maW5kX2ZlYXR1cmUgKCkiPmdzdF9yZWdpc3RyeV9maW5kX2ZlYXR1cmU8L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSZWdpc3RyeTwvc3Bhbj48L2E+ICpyZWdpc3RyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPiAqICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktbG9va3VwLWZlYXR1cmUiIHRpdGxlPSJnc3RfcmVnaXN0cnlfbG9va3VwX2ZlYXR1cmUgKCkiPmdzdF9yZWdpc3RyeV9sb29rdXBfZmVhdHVyZTwvYT4gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSZWdpc3RyeTwvc3Bhbj48L2E+ICpyZWdpc3RyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8c3BhbiBjbGFzcz0idHlwZSI+Y2hhcjwvc3Bhbj4gKm5hbWU8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktYWRkLXBhdGgiIHRpdGxlPSJnc3RfcmVnaXN0cnlfYWRkX3BhdGggKCkiPmdzdF9yZWdpc3RyeV9hZGRfcGF0aDwvYT4gICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSZWdpc3RyeTwvc3Bhbj48L2E+ICpyZWdpc3RyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwYXRoPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LXNjYW4tcGF0aCIgdGl0bGU9ImdzdF9yZWdpc3RyeV9zY2FuX3BhdGggKCkiPmdzdF9yZWdpc3RyeV9zY2FuX3BhdGg8L2E+ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSZWdpc3RyeTwvc3Bhbj48L2E+ICpyZWdpc3RyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwYXRoPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWxvb2t1cCIgdGl0bGU9ImdzdF9yZWdpc3RyeV9sb29rdXAgKCkiPmdzdF9yZWdpc3RyeV9sb29rdXA8L2E+ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSZWdpc3RyeTwvc3Bhbj48L2E+ICpyZWdpc3RyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8c3BhbiBjbGFzcz0idHlwZSI+Y2hhcjwvc3Bhbj4gKmZpbGVuYW1lPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LXJlbW92ZS1mZWF0dXJlIiB0aXRsZT0iZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9mZWF0dXJlICgpIj5nc3RfcmVnaXN0cnlfcmVtb3ZlX2ZlYXR1cmU8L2E+ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiAqcmVnaXN0cnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5GZWF0dXJlPC9zcGFuPjwvYT4gKmZlYXR1cmU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktYWRkLWZlYXR1cmUiIHRpdGxlPSJnc3RfcmVnaXN0cnlfYWRkX2ZlYXR1cmUgKCkiPmdzdF9yZWdpc3RyeV9hZGRfZmVhdHVyZTwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSZWdpc3RyeTwvc3Bhbj48L2E+ICpyZWdpc3RyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPiAqZmVhdHVyZTwvY29kZT48L2VtPik7CisKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LWRlZmF1bHQtcmVnaXN0cnktY2hlY2stZmVhdHVyZS12ZXJzaW9uIiB0aXRsZT0iZ3N0X2RlZmF1bHRfcmVnaXN0cnlfY2hlY2tfZmVhdHVyZV92ZXJzaW9uICgpIj5nc3RfZGVmYXVsdF9yZWdpc3RyeV9jaGVja19mZWF0dXJlX3ZlcnNpb248L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmVhdHVyZV9uYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbWluX21ham9yPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbWluX21pbm9yPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbWluX21pY3JvPC9jb2RlPjwvZW0+KTsKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LWRlZmF1bHQtcmVnaXN0cnktZ2V0LXBhdGgtbGlzdCIgdGl0bGU9ImdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2dldF9wYXRoX2xpc3QiPmdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2dldF9wYXRoX2xpc3Q8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1kZWZhdWx0LXJlZ2lzdHJ5LWFkZC1wbHVnaW4iIHRpdGxlPSJnc3RfZGVmYXVsdF9yZWdpc3RyeV9hZGRfcGx1Z2luKCkiPmdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2FkZF9wbHVnaW48L2E+ICAgICAocGx1Z2luKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtZGVmYXVsdC1yZWdpc3RyeS1hZGQtcGF0aCIgdGl0bGU9ImdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2FkZF9wYXRoKCkiPmdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2FkZF9wYXRoPC9hPiAgICAgICAocGF0aCkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LWRlZmF1bHQtcmVnaXN0cnktZmluZC1wbHVnaW4iIHRpdGxlPSJnc3RfZGVmYXVsdF9yZWdpc3RyeV9maW5kX3BsdWdpbigpIj5nc3RfZGVmYXVsdF9yZWdpc3RyeV9maW5kX3BsdWdpbjwvYT4gICAgKG5hbWUpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1kZWZhdWx0LXJlZ2lzdHJ5LWZpbmQtZmVhdHVyZSIgdGl0bGU9ImdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2ZpbmRfZmVhdHVyZSgpIj5nc3RfZGVmYXVsdF9yZWdpc3RyeV9maW5kX2ZlYXR1cmU8L2E+ICAgKG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtZGVmYXVsdC1yZWdpc3RyeS1nZXQtcGx1Z2luLWxpc3QiIHRpdGxlPSJnc3RfZGVmYXVsdF9yZWdpc3RyeV9nZXRfcGx1Z2luX2xpc3QiPmdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2dldF9wbHVnaW5fbGlzdDwvYT4KKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LWRlZmF1bHQtcmVnaXN0cnktZ2V0LWZlYXR1cmUtbGlzdC1jb29raWUiIHRpdGxlPSJnc3RfZGVmYXVsdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2Nvb2tpZSI+Z3N0X2RlZmF1bHRfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9jb29raWU8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1kZWZhdWx0LXJlZ2lzdHJ5LWZlYXR1cmUtZmlsdGVyIiB0aXRsZT0iZ3N0X2RlZmF1bHRfcmVnaXN0cnlfZmVhdHVyZV9maWx0ZXIoKSI+Z3N0X2RlZmF1bHRfcmVnaXN0cnlfZmVhdHVyZV9maWx0ZXI8L2E+IChmaWx0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfZGF0YSkKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RSZWdpc3RyeS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+R09iamVjdDwvYT4KKyAgICstLS0tPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KKyAgICAgICAgICstLS0tPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+CisgICAgICAgICAgICAgICArLS0tLUdzdFJlZ2lzdHJ5Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0UmVnaXN0cnkuc2lnbmFscyI+PC9hPjxoMj5TaWduYWxzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI0dzdFJlZ2lzdHJ5LWZlYXR1cmUtYWRkZWQiIHRpdGxlPSdUaGUgImZlYXR1cmUtYWRkZWQiIHNpZ25hbCc+ZmVhdHVyZS1hZGRlZDwvYT4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlJ1biBMYXN0PC9jb2RlPjwvYT4KKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI0dzdFJlZ2lzdHJ5LXBsdWdpbi1hZGRlZCIgdGl0bGU9J1RoZSAicGx1Z2luLWFkZGVkIiBzaWduYWwnPnBsdWdpbi1hZGRlZDwvYT4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5SdW4gTGFzdDwvY29kZT48L2E+Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0UmVnaXN0cnkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitPbmUgcmVnaXN0cnkgaG9sZHMgdGhlIG1ldGFkYXRhIG9mIGEgc2V0IG9mIHBsdWdpbnMuCis8L3A+Cis8cD4KKzxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPkRlc2lnbjo8L3N0cm9uZz48L3NwYW4+Cis8L3A+Cis8cD4KK1RoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiBvYmplY3QgaXMgYSBsaXN0IG9mIHBsdWdpbnMgYW5kIHNvbWUgZnVuY3Rpb25zIGZvciBkZWFsaW5nCit3aXRoIHRoZW0uIEVhY2ggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gaXMgbWF0Y2hlZCAxLTEgd2l0aCBhIGZpbGUgb24gZGlzaywgYW5kIG1heSBvciBtYXkKK25vdCBiZSBsb2FkZWQgYXQgYSBnaXZlbiB0aW1lLiBUaGVyZSBtYXkgYmUgbXVsdGlwbGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJlZ2lzdHJ5PC9zcGFuPjwvYT4gb2JqZWN0cywKK2J1dCB0aGUgImRlZmF1bHQgcmVnaXN0cnkiIGlzIHRoZSBvbmx5IG9iamVjdCB0aGF0IGhhcyBhbnkgbWVhbmluZyB0byB0aGUKK2NvcmUuCis8L3A+Cis8cD4KK1RoZSByZWdpc3RyeSBmaWxlIGlzIGFjdHVhbGx5IGEgY2FjaGUgb2YgcGx1Z2luIGluZm9ybWF0aW9uLiBUaGlzIGlzCit1bmxpa2UgdmVyc2lvbnMgcHJpb3IgdG8gMC4xMCwgd2hlcmUgdGhlIHJlZ2lzdHJ5IGZpbGUgd2FzIHRoZSBwcmltYXJ5IHNvdXJjZQorb2YgcGx1Z2luIGluZm9ybWF0aW9uLCBhbmQgd2FzIGNyZWF0ZWQgYnkgdGhlIGdzdC1yZWdpc3RlciBjb21tYW5kLgorPC9wPgorPHA+CitUaGUgcHJpbWFyeSBzb3VyY2UsIGF0IGFsbCB0aW1lcywgb2YgcGx1Z2luIGluZm9ybWF0aW9uIGlzIGVhY2ggcGx1Z2luIGZpbGUKK2l0c2VsZi4gVGh1cywgaWYgYW4gYXBwbGljYXRpb24gd2FudHMgaW5mb3JtYXRpb24gYWJvdXQgYSBwYXJ0aWN1bGFyIHBsdWdpbiwKK29yIHdhbnRzIHRvIHNlYXJjaCBmb3IgYSBmZWF0dXJlIHRoYXQgc2F0aXNmaWVzIGdpdmVuIGNyaXRlcmlhLCB0aGUgcHJpbWFyeQorbWVhbnMgb2YgZG9pbmcgc28gaXMgdG8gbG9hZCBldmVyeSBwbHVnaW4gYW5kIGxvb2sgYXQgdGhlIHJlc3VsdGluZworaW5mb3JtYXRpb24gdGhhdCBpcyBnYXRoZXJlZCBpbiB0aGUgZGVmYXVsdCByZWdpc3RyeS4gQ2xlYXJseSwgdGhpcyBpcyBhIHRpbWUKK2NvbnN1bWluZyBwcm9jZXNzLCBzbyB3ZSBjYWNoZSBpbmZvcm1hdGlvbiBpbiB0aGUgcmVnaXN0cnkgZmlsZS4gVGhlIGZvcm1hdAorYW5kIGxvY2F0aW9uIG9mIHRoZSBjYWNoZSBmaWxlIGlzIGludGVybmFsIHRvIGdzdHJlYW1lci4KKzwvcD4KKzxwPgorT24gc3RhcnR1cCwgcGx1Z2lucyBhcmUgc2VhcmNoZWQgZm9yIGluIHRoZSBwbHVnaW4gc2VhcmNoIHBhdGguIFRoZSBmb2xsb3dpbmcKK2xvY2F0aW9ucyBhcmUgY2hlY2tlZCBpbiB0aGlzIG9yZGVyOgorPC9wPgorPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5sb2NhdGlvbiBmcm9tIC0tZ3N0LXBsdWdpbi1wYXRoIGNvbW1hbmRsaW5lIG9wdGlvbi48L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPnRoZSBHU1RfUExVR0lOX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUuPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD50aGUgR1NUX1BMVUdJTl9TWVNURU1fUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZS48L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPmRlZmF1bHQgbG9jYXRpb25zIChpZiBHU1RfUExVR0lOX1NZU1RFTV9QQVRIIGlzIG5vdCBzZXQpLiBUaG9zZQorICAgICAgZGVmYXVsdCBsb2NhdGlvbnMgYXJlOgorICAgICAgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5+Ly5nc3RyZWFtZXItJEdTVF9NQUpPUk1JTk9SL3BsdWdpbnMvPC9jb2RlPgorICAgICAgYW5kIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+JHByZWZpeC9saWJzL2dzdHJlYW1lci0kR1NUX01BSk9STUlOT1IvPC9jb2RlPi4KKyAgICA8L3A+PC9saT4KKzwvdWw+PC9kaXY+Cis8cD4KK1RoZSByZWdpc3RyeSBjYWNoZSBmaWxlIGlzIGxvYWRlZCBmcm9tCis8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPn4vLmdzdHJlYW1lci0kR1NUX01BSk9STUlOT1IvcmVnaXN0cnktJEFSQ0guYmluPC9jb2RlPiBvciB0aGUKK2ZpbGUgbGlzdGVkIGluIHRoZSBHU1RfUkVHSVNUUlkgZW52IHZhci4gT25lIHJlYXNvbiB0byBjaGFuZ2UgdGhlIHJlZ2lzdHJ5Citsb2NhdGlvbiBpcyBmb3IgdGVzdGluZy4KKzwvcD4KKzxwPgorRm9yIGVhY2ggcGx1Z2luIHRoYXQgaXMgZm91bmQgaW4gdGhlIHBsdWdpbiBzZWFyY2ggcGF0aCwgdGhlcmUgY291bGQgYmUgMworcG9zc2liaWxpdGllcyBmb3IgY2FjaGVkIGluZm9ybWF0aW9uOgorPC9wPgorPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD50aGUgY2FjaGUgbWF5IG5vdCBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IGEgZ2l2ZW4gZmlsZS48L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPnRoZSBjYWNoZSBtYXkgaGF2ZSBzdGFsZSBpbmZvcm1hdGlvbi48L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPnRoZSBjYWNoZSBtYXkgaGF2ZSBjdXJyZW50IGluZm9ybWF0aW9uLjwvcD48L2xpPgorPC91bD48L2Rpdj4KKzxwPgorPC9wPgorPHA+CitJbiB0aGUgZmlyc3QgdHdvIGNhc2VzLCB0aGUgcGx1Z2luIGlzIGxvYWRlZCBhbmQgdGhlIGNhY2hlIHVwZGF0ZWQuIEluCithZGRpdGlvbiB0byB0aGVzZSBjYXNlcywgdGhlIGNhY2hlIG1heSBoYXZlIGVudHJpZXMgZm9yIHBsdWdpbnMgdGhhdCBhcmUgbm90CityZWxldmFudCB0byB0aGUgY3VycmVudCBwcm9jZXNzLiBUaGVzZSBhcmUgbWFya2VkIGFzIG5vdCBhdmFpbGFibGUgdG8gdGhlCitjdXJyZW50IHByb2Nlc3MuIElmIHRoZSBjYWNoZSBpcyB1cGRhdGVkIGZvciB3aGF0ZXZlciByZWFzb24sIGl0IGlzIG1hcmtlZAorZGlydHkuCis8L3A+Cis8cD4KK0EgZGlydHkgY2FjaGUgaXMgd3JpdHRlbiBvdXQgYXQgdGhlIGVuZCBvZiBpbml0aWFsaXphdGlvbi4gRWFjaCBlbnRyeSBpcworY2hlY2tlZCB0byBtYWtlIHN1cmUgdGhlIGluZm9ybWF0aW9uIGlzIG1pbmltYWxseSB2YWxpZC4gSWYgbm90LCB0aGUgZW50cnkgaXMKK3NpbXBseSBkcm9wcGVkLgorPC9wPgorPHA+Cis8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5JbXBsZW1lbnRhdGlvbiBub3Rlczo8L3N0cm9uZz48L3NwYW4+Cis8L3A+Cis8cD4KK1RoZSAiY2FjaGUiIGFuZCAiZGVmYXVsdCByZWdpc3RyeSIgYXJlIGRpZmZlcmVudCBjb25jZXB0cyBhbmQgY2FuIHJlcHJlc2VudAorZGlmZmVyZW50IHNldHMgb2YgcGx1Z2lucy4gRm9yIHZhcmlvdXMgcmVhc29ucywgYXQgaW5pdCB0aW1lLCB0aGUgY2FjaGUgaXMKK3N0b3JlZCBpbiB0aGUgZGVmYXVsdCByZWdpc3RyeSwgYW5kIHBsdWdpbnMgbm90IHJlbGV2YW50IHRvIHRoZSBjdXJyZW50Citwcm9jZXNzIGFyZSBtYXJrZWQgd2l0aCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dTVC1QTFVHSU4tRkxBRy1DQUNIRUQ6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9QTFVHSU5fRkxBR19DQUNIRUQ8L2NvZGU+PC9hPiBiaXQuIFRoZXNlIHBsdWdpbnMgYXJlCityZW1vdmVkIGF0IHRoZSBlbmQgb2YgaW5pdGlhbGl6YXRpb24uCis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdFJlZ2lzdHJ5LmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RSZWdpc3RyeS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJlZ2lzdHJ5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UmVnaXN0cnk7PC9wcmU+Cis8cD4KK09wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUuCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1yZWdpc3RyeS1nZXQtZGVmYXVsdCI+PC9hPjxoMz5nc3RfcmVnaXN0cnlfZ2V0X2RlZmF1bHQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiAqICAgICAgIGdzdF9yZWdpc3RyeV9nZXRfZGVmYXVsdCAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0cmlldmVzIHRoZSBkZWZhdWx0IHJlZ2lzdHJ5LiBUaGUgY2FsbGVyIGRvZXMgbm90IG93biBhIHJlZmVyZW5jZSBvbiB0aGUKK3JlZ2lzdHJ5LCBhcyBpdCBpcyBhbGl2ZSBhcyBsb25nIGFzIEdTdHJlYW1lciBpcyBpbml0aWFsaXplZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBkZWZhdWx0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSZWdpc3RyeTwvc3Bhbj48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1yZWdpc3RyeS1nZXQtZmVhdHVyZS1saXN0Ij48L2E+PGgzPmdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HTGlzdDwvc3Bhbj48L2E+ICogICAgICAgICAgICAgZ3N0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3QgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiAqcmVnaXN0cnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZXRyaWV2ZXMgYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5GZWF0dXJlPC9zcGFuPjwvYT4gb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVnaXN0cnk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+IG9mCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPiBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTwvY29kZT48L2VtPi4gVXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLWxpc3QtZnJlZSIgdGl0bGU9ImdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSgpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNlCitNVCBzYWZlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IEdzdC5QbHVnaW5GZWF0dXJlXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1yZWdpc3RyeS1nZXQtZmVhdHVyZS1saXN0LWNvb2tpZSI+PC9hPjxoMz5nc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9jb29raWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MzI8L3NwYW4+PC9hPiAgICAgICAgICAgICBnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9jb29raWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiAqcmVnaXN0cnk8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZXR1cm5zIHRoZSByZWdpc3RyeXMgZmVhdHVyZSBsaXN0IGNvb2tpZS4gVGhpcyBjaGFuZ2VzCitldmVyeSB0aW1lIGEgZmVhdHVyZSBpcyBhZGRlZCBvciByZW1vdmVkIGZyb20gdGhlIHJlZ2lzdHJ5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlZ2lzdHJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSByZWdpc3RyeTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBmZWF0dXJlIGxpc3QgY29va2llLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1yZWdpc3RyeS1nZXQtZmVhdHVyZS1saXN0LWJ5LXBsdWdpbiI+PC9hPjxoMz5nc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9ieV9wbHVnaW4gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdMaXN0PC9zcGFuPjwvYT4gKiAgICAgICAgICAgICBnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9ieV9wbHVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiAqcmVnaXN0cnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JldHJpZXZlcyBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiBvZiBmZWF0dXJlcyBvZiB0aGUgcGx1Z2luIHdpdGggbmFtZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWdpc3RyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSZWdpc3RyeTwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBsdWdpbiBuYW1lLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+IG9mCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPi4gVXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLWxpc3QtZnJlZSIgdGl0bGU9ImdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSgpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNhZ2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gR3N0LlBsdWdpbkZlYXR1cmVdPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LWdldC1wYXRoLWxpc3QiPjwvYT48aDM+Z3N0X3JlZ2lzdHJ5X2dldF9wYXRoX2xpc3QgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdMaXN0PC9zcGFuPjwvYT4gKiAgICAgICAgICAgICBnc3RfcmVnaXN0cnlfZ2V0X3BhdGhfbGlzdCAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSZWdpc3RyeTwvc3Bhbj48L2E+ICpyZWdpc3RyeTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCB0aGUgbGlzdCBvZiBwYXRocyBmb3IgdGhlIGdpdmVuIHJlZ2lzdHJ5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlZ2lzdHJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSByZWdpc3RyeSB0byBnZXQgdGhlIHBhdGhsaXN0IG9mPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gb2YgcGF0aHMgYXMKK3N0cmluZ3MuIGdfbGlzdF9mcmVlIGFmdGVyIHVzZS4KK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBjb250YWluZXIgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBjb250YWluZXI8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gY2hhcipdPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LWdldC1wbHVnaW4tbGlzdCI+PC9hPjxoMz5nc3RfcmVnaXN0cnlfZ2V0X3BsdWdpbl9saXN0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HTGlzdDwvc3Bhbj48L2E+ICogICAgICAgICAgICAgZ3N0X3JlZ2lzdHJ5X2dldF9wbHVnaW5fbGlzdCAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiAqcmVnaXN0cnk8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgYSBjb3B5IG9mIGFsbCBwbHVnaW5zIHJlZ2lzdGVyZWQgaW4gdGhlIGdpdmVuIHJlZ2lzdHJ5LiBUaGUgcmVmY291bnQKK29mIGVhY2ggZWxlbWVudCBpbiB0aGUgbGlzdCBpbiBpbmNyZW1lbnRlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWdpc3RyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcmVnaXN0cnkgdG8gc2VhcmNoPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4uCitVc2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tbGlzdC1mcmVlIiB0aXRsZT0iZ3N0X3BsdWdpbl9saXN0X2ZyZWUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BsdWdpbl9saXN0X2ZyZWUoKTwvY29kZT48L2E+IGFmdGVyIHVzYWdlLgorTVQgc2FmZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3QuUGx1Z2luXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1yZWdpc3RyeS1hZGQtcGx1Z2luIj48L2E+PGgzPmdzdF9yZWdpc3RyeV9hZGRfcGx1Z2luICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9yZWdpc3RyeV9hZGRfcGx1Z2luICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJlZ2lzdHJ5PC9zcGFuPjwvYT4gKnJlZ2lzdHJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+ICpwbHVnaW48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBZGQgdGhlIHBsdWdpbiB0byB0aGUgcmVnaXN0cnkuIFRoZSBwbHVnaW4tYWRkZWQgc2lnbmFsIHdpbGwgYmUgZW1pdHRlZC4KK1RoaXMgZnVuY3Rpb24gd2lsbCBzaW5rIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wbHVnaW48L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVnaXN0cnk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHJlZ2lzdHJ5IHRvIGFkZCB0aGUgcGx1Z2luIHRvPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wbHVnaW48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBsdWdpbiB0byBhZGQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIG9uIHN1Y2Nlc3MuCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1yZWdpc3RyeS1yZW1vdmUtcGx1Z2luIj48L2E+PGgzPmdzdF9yZWdpc3RyeV9yZW1vdmVfcGx1Z2luICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9yZWdpc3RyeV9yZW1vdmVfcGx1Z2luICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJlZ2lzdHJ5PC9zcGFuPjwvYT4gKnJlZ2lzdHJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+ICpwbHVnaW48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZW1vdmUgdGhlIHBsdWdpbiBmcm9tIHRoZSByZWdpc3RyeS4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWdpc3RyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcmVnaXN0cnkgdG8gcmVtb3ZlIHRoZSBwbHVnaW4gZnJvbTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGx1Z2luPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwbHVnaW4gdG8gcmVtb3ZlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LXBsdWdpbi1maWx0ZXIiPjwvYT48aDM+Z3N0X3JlZ2lzdHJ5X3BsdWdpbl9maWx0ZXIgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdMaXN0PC9zcGFuPjwvYT4gKiAgICAgICAgICAgICBnc3RfcmVnaXN0cnlfcGx1Z2luX2ZpbHRlciAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSZWdpc3RyeTwvc3Bhbj48L2E+ICpyZWdpc3RyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjR3N0UGx1Z2luRmlsdGVyIiB0aXRsZT0iR3N0UGx1Z2luRmlsdGVyICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmlsdGVyPC9zcGFuPjwvYT4gZmlsdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gZmlyc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSdW5zIGEgZmlsdGVyIGFnYWluc3QgYWxsIHBsdWdpbnMgaW4gdGhlIHJlZ2lzdHJ5IGFuZCByZXR1cm5zIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+IHdpdGgKK3RoZSByZXN1bHRzLiBJZiB0aGUgZmlyc3QgZmxhZyBpcyBzZXQsIG9ubHkgdGhlIGZpcnN0IG1hdGNoIGlzCityZXR1cm5lZCAoYXMgYSBsaXN0IHdpdGggYSBzaW5nbGUgb2JqZWN0KS4KK0V2ZXJ5IHBsdWdpbiBpcyByZWZmZWQ7IHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1saXN0LWZyZWUiIHRpdGxlPSJnc3RfcGx1Z2luX2xpc3RfZnJlZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGx1Z2luX2xpc3RfZnJlZSgpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNlLCB3aGljaAord2lsbCB1bnJlZiBhZ2Fpbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWdpc3RyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5yZWdpc3RyeSB0byBxdWVyeTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmlsdGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBmaWx0ZXIgdG8gdXNlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGUgY2FsbGJhY2sgaXMgdmFsaWQgb25seSBkdXJpbmcgdGhlIGNhbGwgdG8gdGhlIG1ldGhvZC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5zY29wZSBjYWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maXJzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5vbmx5IHJldHVybiBmaXJzdCBtYXRjaDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZXIgZGF0YSBwYXNzZWQgdG8gdGhlIGZpbHRlciBmdW5jdGlvbi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iVGhpcyBwYXJhbWV0ZXIgaXMgYSAndXNlcl9kYXRhJywgZm9yIGNhbGxiYWNrczsgbWFueSBiaW5kaW5ncyBjYW4gcGFzcyBOVUxMIGhlcmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+Y2xvc3VyZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+LgorVXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWxpc3QtZnJlZSIgdGl0bGU9ImdzdF9wbHVnaW5fbGlzdF9mcmVlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wbHVnaW5fbGlzdF9mcmVlKCk8L2NvZGU+PC9hPiBhZnRlciB1c2FnZS4KK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gR3N0LlBsdWdpbl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcmVnaXN0cnktZmVhdHVyZS1maWx0ZXIiPjwvYT48aDM+Z3N0X3JlZ2lzdHJ5X2ZlYXR1cmVfZmlsdGVyICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HTGlzdDwvc3Bhbj48L2E+ICogICAgICAgICAgICAgZ3N0X3JlZ2lzdHJ5X2ZlYXR1cmVfZmlsdGVyICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiAqcmVnaXN0cnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNHc3RQbHVnaW5GZWF0dXJlRmlsdGVyIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZUZpbHRlciAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmVGaWx0ZXI8L3NwYW4+PC9hPiBmaWx0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBmaXJzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1J1bnMgYSBmaWx0ZXIgYWdhaW5zdCBhbGwgZmVhdHVyZXMgb2YgdGhlIHBsdWdpbnMgaW4gdGhlIHJlZ2lzdHJ5CithbmQgcmV0dXJucyBhIEdMaXN0IHdpdGggdGhlIHJlc3VsdHMuCitJZiB0aGUgZmlyc3QgZmxhZyBpcyBzZXQsIG9ubHkgdGhlIGZpcnN0IG1hdGNoIGlzCityZXR1cm5lZCAoYXMgYSBsaXN0IHdpdGggYSBzaW5nbGUgb2JqZWN0KS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWdpc3RyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5yZWdpc3RyeSB0byBxdWVyeTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmlsdGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBmaWx0ZXIgdG8gdXNlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGUgY2FsbGJhY2sgaXMgdmFsaWQgb25seSBkdXJpbmcgdGhlIGNhbGwgdG8gdGhlIG1ldGhvZC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5zY29wZSBjYWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maXJzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5vbmx5IHJldHVybiBmaXJzdCBtYXRjaDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZXIgZGF0YSBwYXNzZWQgdG8gdGhlIGZpbHRlciBmdW5jdGlvbi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iVGhpcyBwYXJhbWV0ZXIgaXMgYSAndXNlcl9kYXRhJywgZm9yIGNhbGxiYWNrczsgbWFueSBiaW5kaW5ncyBjYW4gcGFzcyBOVUxMIGhlcmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+Y2xvc3VyZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+IG9mCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPi4gVXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLWxpc3QtZnJlZSIgdGl0bGU9ImdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSgpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNhZ2UuCitNVCBzYWZlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IEdzdC5QbHVnaW5GZWF0dXJlXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1yZWdpc3RyeS1maW5kLXBsdWdpbiI+PC9hPjxoMz5nc3RfcmVnaXN0cnlfZmluZF9wbHVnaW4gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqICAgICAgICAgZ3N0X3JlZ2lzdHJ5X2ZpbmRfcGx1Z2luICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiAqcmVnaXN0cnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0ZpbmQgdGhlIHBsdWdpbiB3aXRoIHRoZSBnaXZlbiBuYW1lIGluIHRoZSByZWdpc3RyeS4KK1RoZSBwbHVnaW4gd2lsbCBiZSByZWZmZWQ7IGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgdW5yZWZmaW5nLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlZ2lzdHJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSByZWdpc3RyeSB0byBzZWFyY2g8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBsdWdpbiBuYW1lIHRvIGZpbmQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGx1Z2luIHdpdGggdGhlIGdpdmVuIG5hbWUgb3IgTlVMTCBpZiB0aGUKK3BsdWdpbiB3YXMgbm90IGZvdW5kLiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC11bnJlZiIgdGl0bGU9ImdzdF9vYmplY3RfdW5yZWYgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X29iamVjdF91bnJlZigpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNhZ2UuCitNVCBzYWZlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LWZpbmQtZmVhdHVyZSI+PC9hPjxoMz5nc3RfcmVnaXN0cnlfZmluZF9mZWF0dXJlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQbHVnaW5GZWF0dXJlPC9zcGFuPjwvYT4gKiAgZ3N0X3JlZ2lzdHJ5X2ZpbmRfZmVhdHVyZSAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiAqcmVnaXN0cnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0ZpbmQgdGhlIHBsdWdpbmZlYXR1cmUgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgdHlwZSBpbiB0aGUgcmVnaXN0cnkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVnaXN0cnk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHJlZ2lzdHJ5IHRvIHNlYXJjaDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGx1Z2luZmVhdHVyZSBuYW1lIHRvIGZpbmQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBsdWdpbmZlYXR1cmUgdHlwZSB0byBmaW5kPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBsdWdpbmZlYXR1cmUgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgdHlwZQorb3IgTlVMTCBpZiB0aGUgcGx1Z2luIHdhcyBub3QgZm91bmQuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucmVmIiB0aXRsZT0iZ3N0X29iamVjdF91bnJlZiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X3VucmVmKCk8L2NvZGU+PC9hPiBhZnRlciB1c2FnZS4KK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcmVnaXN0cnktbG9va3VwLWZlYXR1cmUiPjwvYT48aDM+Z3N0X3JlZ2lzdHJ5X2xvb2t1cF9mZWF0dXJlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQbHVnaW5GZWF0dXJlPC9zcGFuPjwvYT4gKiAgZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9mZWF0dXJlICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiAqcmVnaXN0cnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPHNwYW4gY2xhc3M9InR5cGUiPmNoYXI8L3NwYW4+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRmluZCBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+IHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT4gaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlZ2lzdHJ5PC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlZ2lzdHJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJlZ2lzdHJ5PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+IG5hbWU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+IHdpdGggaXRzIHJlZmNvdW50IGluY3JlbWVudGVkLAordXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucmVmIiB0aXRsZT0iZ3N0X29iamVjdF91bnJlZiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X3VucmVmKCk8L2NvZGU+PC9hPiBhZnRlciB1c2FnZS4KK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcmVnaXN0cnktYWRkLXBhdGgiPjwvYT48aDM+Z3N0X3JlZ2lzdHJ5X2FkZF9wYXRoICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9yZWdpc3RyeV9hZGRfcGF0aCAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJlZ2lzdHJ5PC9zcGFuPjwvYT4gKnJlZ2lzdHJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnBhdGg8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBZGQgdGhlIGdpdmVuIHBhdGggdG8gdGhlIHJlZ2lzdHJ5LiBUaGUgc3ludGF4IG9mIHRoZQorcGF0aCBpcyBzcGVjaWZpYyB0byB0aGUgcmVnaXN0cnkuIElmIHRoZSBwYXRoIGhhcyBhbHJlYWR5IGJlZW4KK2FkZGVkLCBkbyBub3RoaW5nLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlZ2lzdHJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSByZWdpc3RyeSB0byBhZGQgdGhlIHBhdGggdG88L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhdGg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBhdGggdG8gYWRkIHRvIHRoZSByZWdpc3RyeTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1yZWdpc3RyeS1zY2FuLXBhdGgiPjwvYT48aDM+Z3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSZWdpc3RyeTwvc3Bhbj48L2E+ICpyZWdpc3RyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwYXRoPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2NhbiB0aGUgZ2l2ZW4gcGF0aCBmb3IgcGx1Z2lucyB0byBhZGQgdG8gdGhlIHJlZ2lzdHJ5LiBUaGUgc3ludGF4IG9mIHRoZQorcGF0aCBpcyBzcGVjaWZpYyB0byB0aGUgcmVnaXN0cnkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVnaXN0cnk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHJlZ2lzdHJ5IHRvIGFkZCBmb3VuZCBwbHVnaW5zIHRvPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXRoPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwYXRoIHRvIHNjYW48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHJlZ2lzdHJ5IGNoYW5nZWQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcmVnaXN0cnktbG9va3VwIj48L2E+PGgzPmdzdF9yZWdpc3RyeV9sb29rdXAgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqICAgICAgICAgZ3N0X3JlZ2lzdHJ5X2xvb2t1cCAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiAqcmVnaXN0cnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPHNwYW4gY2xhc3M9InR5cGUiPmNoYXI8L3NwYW4+ICpmaWxlbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0xvb2sgdXAgYSBwbHVnaW4gaW4gdGhlIGdpdmVuIHJlZ2lzdHJ5IHdpdGggdGhlIGdpdmVuIGZpbGVuYW1lLgorSWYgZm91bmQsIHBsdWdpbiBpcyByZWZmZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVnaXN0cnk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHJlZ2lzdHJ5IHRvIGxvb2sgdXAgaW48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpbGVuYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGxvb2sgdXA8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gaWYgZm91bmQsIG9yIE5VTEwgaWYgbm90LgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtdW5yZWYiIHRpdGxlPSJnc3Rfb2JqZWN0X3VucmVmICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9vYmplY3RfdW5yZWYoKTwvY29kZT48L2E+IGFmdGVyIHVzYWdlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LXJlbW92ZS1mZWF0dXJlIj48L2E+PGgzPmdzdF9yZWdpc3RyeV9yZW1vdmVfZmVhdHVyZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcmVnaXN0cnlfcmVtb3ZlX2ZlYXR1cmUgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSZWdpc3RyeTwvc3Bhbj48L2E+ICpyZWdpc3RyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPiAqZmVhdHVyZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlbW92ZSB0aGUgZmVhdHVyZSBmcm9tIHRoZSByZWdpc3RyeS4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWdpc3RyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcmVnaXN0cnkgdG8gcmVtb3ZlIHRoZSBmZWF0dXJlIGZyb208L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZlYXR1cmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGZlYXR1cmUgdG8gcmVtb3ZlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LWFkZC1mZWF0dXJlIj48L2E+PGgzPmdzdF9yZWdpc3RyeV9hZGRfZmVhdHVyZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfcmVnaXN0cnlfYWRkX2ZlYXR1cmUgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSZWdpc3RyeTwvc3Bhbj48L2E+ICpyZWdpc3RyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPiAqZmVhdHVyZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0FkZCB0aGUgZmVhdHVyZSB0byB0aGUgcmVnaXN0cnkuIFRoZSBmZWF0dXJlLWFkZGVkIHNpZ25hbCB3aWxsIGJlIGVtaXR0ZWQuCitUaGlzIGZ1bmN0aW9uIHNpbmtzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZWF0dXJlPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlZ2lzdHJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSByZWdpc3RyeSB0byBhZGQgdGhlIHBsdWdpbiB0bzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmVhdHVyZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZmVhdHVyZSB0byBhZGQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIG9uIHN1Y2Nlc3MuCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1kZWZhdWx0LXJlZ2lzdHJ5LWNoZWNrLWZlYXR1cmUtdmVyc2lvbiI+PC9hPjxoMz5nc3RfZGVmYXVsdF9yZWdpc3RyeV9jaGVja19mZWF0dXJlX3ZlcnNpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2RlZmF1bHRfcmVnaXN0cnlfY2hlY2tfZmVhdHVyZV92ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmVhdHVyZV9uYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbWluX21ham9yPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbWluX21pbm9yPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbWluX21pY3JvPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2tzIHdoZXRoZXIgYSBwbHVnaW4gZmVhdHVyZSBieSB0aGUgZ2l2ZW4gbmFtZSBleGlzdHMgaW4gdGhlCitkZWZhdWx0IHJlZ2lzdHJ5IGFuZCB3aGV0aGVyIGl0cyB2ZXJzaW9uIGlzIGF0IGxlYXN0IHRoZQordmVyc2lvbiByZXF1aXJlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZWF0dXJlX25hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5hbWUgb2YgdGhlIGZlYXR1cmUgKGUuZy4gIm9nZ2RlbXV4Iik8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1pbl9tYWpvcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbWluaW11bSBtYWpvciB2ZXJzaW9uIG51bWJlcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWluX21pbm9yPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtaW5pbXVtIG1pbm9yIHZlcnNpb24gbnVtYmVyPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5taW5fbWljcm88L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG1pbmltdW0gbWljcm8gdmVyc2lvbiBudW1iZXI8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+VFJVRTwvc3Bhbj48L2E+IGlmIHRoZSBmZWF0dXJlIGNvdWxkIGJlIGZvdW5kIGFuZCB0aGUgdmVyc2lvbiBpcwordGhlIHNhbWUgYXMgdGhlIHJlcXVpcmVkIHZlcnNpb24gb3IgbmV3ZXIsIGFuZCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5GQUxTRTwvc3Bhbj48L2E+IG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZGVmYXVsdC1yZWdpc3RyeS1nZXQtcGF0aC1saXN0Ij48L2E+PGgzPmdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2dldF9wYXRoX2xpc3Q8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgZ3N0X2RlZmF1bHRfcmVnaXN0cnlfZ2V0X3BhdGhfbGlzdCgpPC9wcmU+Cis8cD4KK0dldCB0aGUgbGlzdCBvZiBwYXRocyBmb3IgdGhlIGRlZmF1bHQgcmVnaXN0cnkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiBvZiBwYXRocyBhcworc3RyaW5ncy4gPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjZy1saXN0LWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19saXN0X2ZyZWUoKTwvY29kZT48L2E+IGFmdGVyIHVzZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGNvbnRhaW5lciBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGNvbnRhaW5lcjwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBjaGFyKl08L3NwYW4+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRlZmF1bHQtcmVnaXN0cnktYWRkLXBsdWdpbiI+PC9hPjxoMz5nc3RfZGVmYXVsdF9yZWdpc3RyeV9hZGRfcGx1Z2luKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgZ3N0X2RlZmF1bHRfcmVnaXN0cnlfYWRkX3BsdWdpbihwbHVnaW4pPC9wcmU+Cis8cD4KK0FkZCB0aGUgcGx1Z2luIHRvIHRoZSBkZWZhdWx0IHJlZ2lzdHJ5LgorVGhlIHBsdWdpbi1hZGRlZCBzaWduYWwgd2lsbCBiZSBlbWl0dGVkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBsdWdpbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGx1Z2luIHRvIGFkZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgb24gc3VjY2Vzcy48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZGVmYXVsdC1yZWdpc3RyeS1hZGQtcGF0aCI+PC9hPjxoMz5nc3RfZGVmYXVsdF9yZWdpc3RyeV9hZGRfcGF0aCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIGdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2FkZF9wYXRoKHBhdGgpPC9wcmU+Cis8cD4KK0FkZCB0aGUgZ2l2ZW4gcGF0aCB0byB0aGUgZGVmYXVsdCByZWdpc3RyeS4gVGhlIHN5bnRheCBvZiB0aGUKK3BhdGggaXMgc3BlY2lmaWMgdG8gdGhlIHJlZ2lzdHJ5LiBJZiB0aGUgcGF0aCBoYXMgYWxyZWFkeSBiZWVuCithZGRlZCwgZG8gbm90aGluZy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGF0aDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGF0aCB0byBhZGQgdG8gdGhlIHJlZ2lzdHJ5PC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1kZWZhdWx0LXJlZ2lzdHJ5LWZpbmQtcGx1Z2luIj48L2E+PGgzPmdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2ZpbmRfcGx1Z2luKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgZ3N0X2RlZmF1bHRfcmVnaXN0cnlfZmluZF9wbHVnaW4obmFtZSk8L3ByZT4KKzxwPgorRmluZCB0aGUgcGx1Z2luIHdpdGggdGhlIGdpdmVuIG5hbWUgaW4gdGhlIGRlZmF1bHQgcmVnaXN0cnkuCitUaGUgcGx1Z2luIHdpbGwgYmUgcmVmZmVkOyBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHVucmVmZmluZy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwbHVnaW4gbmFtZSB0byBmaW5kPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIHBsdWdpbiB3aXRoIHRoZSBnaXZlbiBuYW1lIG9yIE5VTEwgaWYgdGhlCitwbHVnaW4gd2FzIG5vdCBmb3VuZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1kZWZhdWx0LXJlZ2lzdHJ5LWZpbmQtZmVhdHVyZSI+PC9hPjxoMz5nc3RfZGVmYXVsdF9yZWdpc3RyeV9maW5kX2ZlYXR1cmUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBnc3RfZGVmYXVsdF9yZWdpc3RyeV9maW5kX2ZlYXR1cmUobmFtZSx0eXBlKTwvcHJlPgorPHA+CitGaW5kIHRoZSBwbHVnaW5mZWF0dXJlIHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIHR5cGUgaW4gdGhlIGRlZmF1bHQgcmVnaXN0cnkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGx1Z2luZmVhdHVyZSBuYW1lIHRvIGZpbmQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBsdWdpbmZlYXR1cmUgdHlwZSB0byBmaW5kPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBsdWdpbmZlYXR1cmUgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgdHlwZSBvcgorTlVMTCBpZiB0aGUgcGx1Z2luIHdhcyBub3QgZm91bmQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZGVmYXVsdC1yZWdpc3RyeS1nZXQtcGx1Z2luLWxpc3QiPjwvYT48aDM+Z3N0X2RlZmF1bHRfcmVnaXN0cnlfZ2V0X3BsdWdpbl9saXN0PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIGdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2dldF9wbHVnaW5fbGlzdCgpPC9wcmU+Cis8cD4KK0dldCBhIGNvcHkgb2YgYWxsIHBsdWdpbnMgcmVnaXN0ZXJlZCBpbiB0aGUgZGVmYXVsdCByZWdpc3RyeS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgY29weSBvZiB0aGUgbGlzdC4KK0ZyZWUgYWZ0ZXIgdXNlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IEdzdC5QbHVnaW5dPC9zcGFuPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1kZWZhdWx0LXJlZ2lzdHJ5LWdldC1mZWF0dXJlLWxpc3QtY29va2llIj48L2E+PGgzPmdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3RfY29va2llPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIGdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3RfY29va2llKCk8L3ByZT4KKzxwPgorUmV0dXJucyB0aGUgZGVmYXVsdCByZWdpc3RyeXMgZmVhdHVyZSBsaXN0IGNvb2tpZS4gVGhpcyBjaGFuZ2VzCitldmVyeSB0aW1lIGEgZmVhdHVyZSBpcyBhZGRlZCBvciByZW1vdmVkIGZyb20gdGhlIHJlZ2lzdHJ5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGZlYXR1cmUgbGlzdCBjb29raWUuPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1kZWZhdWx0LXJlZ2lzdHJ5LWZlYXR1cmUtZmlsdGVyIj48L2E+PGgzPmdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2ZlYXR1cmVfZmlsdGVyKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgZ3N0X2RlZmF1bHRfcmVnaXN0cnlfZmVhdHVyZV9maWx0ZXIoZmlsdGVyLGZpcnN0LHVzZXJfZGF0YSk8L3ByZT4KKzxwPgorUnVucyBhIGZpbHRlciBhZ2FpbnN0IGFsbCBmZWF0dXJlcyBvZiB0aGUgcGx1Z2lucyBpbiB0aGUgZGVmYXVsdCByZWdpc3RyeQorYW5kIHJldHVybnMgYSBHTGlzdCB3aXRoIHRoZSByZXN1bHRzLgorSWYgdGhlIGZpcnN0IGZsYWcgaXMgc2V0LCBvbmx5IHRoZSBmaXJzdCBtYXRjaCBpcworcmV0dXJuZWQgKGFzIGEgbGlzdCB3aXRoIGEgc2luZ2xlIG9iamVjdCkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmlsdGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBmaWx0ZXIgdG8gdXNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maXJzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5vbmx5IHJldHVybiBmaXJzdCBtYXRjaDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZXIgZGF0YSBwYXNzZWQgdG8gdGhlIGZpbHRlciBmdW5jdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+IG9mCitwbHVnaW4gZmVhdHVyZXMsIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUgYWZ0ZXIgdXNlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IEdzdC5QbHVnaW5GZWF0dXJlXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0UmVnaXN0cnkuc2lnbmFsLWRldGFpbHMiPjwvYT48aDI+U2lnbmFsIERldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UmVnaXN0cnktZmVhdHVyZS1hZGRlZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJmZWF0dXJlLWFkZGVkIjwvY29kZT4gc2lnbmFsPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIHVzZXJfZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSZWdpc3RyeTwvc3Bhbj48L2E+ICpyZWdpc3RyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgZmVhdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgdXNlcl9kYXRhKSAgICAgIDogPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlJ1biBMYXN0PC9jb2RlPjwvYT48L3ByZT4KKzxwPgorU2lnbmFscyB0aGF0IGEgZmVhdHVyZSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgcmVnaXN0cnkgKHBvc3NpYmx5CityZXBsYWNpbmcgYSBwcmV2aW91c2x5LWFkZGVkIG9uZSBieSB0aGUgc2FtZSBuYW1lKQorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlZ2lzdHJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSByZWdpc3RyeSB0aGF0IGVtaXR0ZWQgdGhlIHNpZ25hbDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmVhdHVyZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZmVhdHVyZSB0aGF0IGhhcyBiZWVuIGFkZGVkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFJlZ2lzdHJ5LXBsdWdpbi1hZGRlZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJwbHVnaW4tYWRkZWQiPC9jb2RlPiBzaWduYWw8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgdXNlcl9mdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJlZ2lzdHJ5PC9zcGFuPjwvYT4gKnJlZ2lzdHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICBwbHVnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgIHVzZXJfZGF0YSkgICAgICA6IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5SdW4gTGFzdDwvY29kZT48L2E+PC9wcmU+Cis8cD4KK1NpZ25hbHMgdGhhdCBhIHBsdWdpbiBoYXMgYmVlbiBhZGRlZCB0byB0aGUgcmVnaXN0cnkgKHBvc3NpYmx5CityZXBsYWNpbmcgYSBwcmV2aW91c2x5LWFkZGVkIG9uZSBieSB0aGUgc2FtZSBuYW1lKQorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlZ2lzdHJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSByZWdpc3RyeSB0aGF0IGVtaXR0ZWQgdGhlIHNpZ25hbDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGx1Z2luPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwbHVnaW4gdGhhdCBoYXMgYmVlbiBhZGRlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdFJlZ2lzdHJ5LnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL0dzdFN5c3RlbUNsb2NrLmh0bWwgYi9kb2NzL2dzdC9odG1sL0dzdFN5c3RlbUNsb2NrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY0Y2EzNQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2h0bWwvR3N0U3lzdGVtQ2xvY2suaHRtbApAQCAtMCwwICsxLDE2MiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdzdFN5c3RlbUNsb2NrPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNHc3RTeXN0ZW1DbG9jay5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFN5c3RlbUNsb2NrLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RTeXN0ZW1DbG9jay5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFN5c3RlbUNsb2NrLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJHc3RTeXN0ZW1DbG9jayI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9IkdzdFN5c3RlbUNsb2NrLnRvcF9vZl9wYWdlIj48L2E+R3N0U3lzdGVtQ2xvY2s8L3NwYW4+PC9oMj4KKzxwPkdzdFN5c3RlbUNsb2NrIOKAlCBEZWZhdWx0IGNsb2NrIHRoYXQgdXNlcyB0aGUgY3VycmVudCBzeXN0ZW0gdGltZTwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9IkdzdFN5c3RlbUNsb2NrLnN5bm9wc2lzIj48L2E+PGgyPlN5bm9wc2lzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7CisKK2VudW0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN5c3RlbUNsb2NrLmh0bWwjR3N0Q2xvY2tUeXBlIiB0aXRsZT0iZW51bSBHc3RDbG9ja1R5cGUiPkdzdENsb2NrVHlwZTwvYT47CitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTeXN0ZW1DbG9jay5odG1sI0dzdFN5c3RlbUNsb2NrLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RTeXN0ZW1DbG9jayI+R3N0U3lzdGVtQ2xvY2s8L2E+OworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICogICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN5c3RlbUNsb2NrLmh0bWwjZ3N0LXN5c3RlbS1jbG9jay1vYnRhaW4iIHRpdGxlPSJnc3Rfc3lzdGVtX2Nsb2NrX29idGFpbiAoKSI+Z3N0X3N5c3RlbV9jbG9ja19vYnRhaW48L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RTeXN0ZW1DbG9jay5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+R09iamVjdDwvYT4KKyAgICstLS0tPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KKyAgICAgICAgICstLS0tPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+CisgICAgICAgICAgICAgICArLS0tLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgorICAgICAgICAgICAgICAgICAgICAgKy0tLS1Hc3RTeXN0ZW1DbG9jaworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdFN5c3RlbUNsb2NrLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3lzdGVtQ2xvY2suaHRtbCNHc3RTeXN0ZW1DbG9jay0tY2xvY2stdHlwZSIgdGl0bGU9J1RoZSAiY2xvY2stdHlwZSIgcHJvcGVydHknPmNsb2NrLXR5cGU8L2E+IiAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTeXN0ZW1DbG9jay5odG1sI0dzdENsb2NrVHlwZSIgdGl0bGU9ImVudW0gR3N0Q2xvY2tUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUeXBlPC9zcGFuPjwvYT4gICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RTeXN0ZW1DbG9jay5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK1RoZSBHU3RyZWFtZXIgY29yZSBwcm92aWRlcyBhIEdzdFN5c3RlbUNsb2NrIGJhc2VkIG9uIHRoZSBzeXN0ZW0gdGltZS4KK0FzeW5jaHJvbm91cyBjYWxsYmFja3MgYXJlIHNjaGVkdWxlZCBmcm9tIGFuIGludGVybmFsIHRocmVhZC4KKzwvcD4KKzxwPgorQ2xvY2sgaW1wbGVtZW50b3JzIGFyZSBlbmNvdXJhZ2VkIHRvIHN1YmNsYXNzIHRoaXMgc3lzdGVtY2xvY2sgYXMgaXQKK2ltcGxlbWVudHMgdGhlIGFzeW5jIG5vdGlmaWNhdGlvbi4KKzwvcD4KKzxwPgorU3ViY2xhc3NlcyBjYW4gaG93ZXZlciBvdmVycmlkZSBhbGwgb2YgdGhlIGltcG9ydGFudCBtZXRob2RzIGZvciBzeW5jIGFuZAorYXN5bmMgbm90aWZpY2F0aW9ucyB0byBpbXBsZW1lbnQgdGhlaXIgb3duIGNhbGxiYWNrIG1ldGhvZHMgb3IgYmxvY2tpbmcKK3dhaXQgb3BlcmF0aW9ucy4KKzwvcD4KKzxwPgorTGFzdCByZXZpZXdlZCBvbiAyMDA2LTAzLTA4ICgwLjEwLjQpCis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdFN5c3RlbUNsb2NrLmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RDbG9ja1R5cGUiPjwvYT48aDM+ZW51bSBHc3RDbG9ja1R5cGU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9DTE9DS19UWVBFX1JFQUxUSU1FICAgICAgID0gMCwKKyAgR1NUX0NMT0NLX1RZUEVfTU9OT1RPTklDICAgICAgPSAxCit9IEdzdENsb2NrVHlwZTsKKzwvcHJlPgorPHA+CitUaGUgZGlmZmVyZW50IGtpbmQgb2YgY2xvY2tzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQ0xPQ0stVFlQRS1SRUFMVElNRTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQ0xPQ0tfVFlQRV9SRUFMVElNRTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGltZSBzaW5jZSBFcG9jaAorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUNMT0NLLVRZUEUtTU9OT1RPTklDOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9DTE9DS19UWVBFX01PTk9UT05JQzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bW9ub3RvbmljIHRpbWUgc2luY2Ugc29tZSB1bnNwZWNpZmllZCBzdGFydGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQKKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFN5c3RlbUNsb2NrLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0U3lzdGVtQ2xvY2s8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RTeXN0ZW1DbG9jazs8L3ByZT4KKzxwPgorVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiB0aGF0IHVzZXMgdGhlIHN5c3RlbSB0aW1lLgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc3lzdGVtLWNsb2NrLW9idGFpbiI+PC9hPjxoMz5nc3Rfc3lzdGVtX2Nsb2NrX29idGFpbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICogICAgICAgICAgZ3N0X3N5c3RlbV9jbG9ja19vYnRhaW4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgYSBoYW5kbGUgdG8gdGhlIGRlZmF1bHQgc3lzdGVtIGNsb2NrLiBUaGUgcmVmY291bnQgb2YgdGhlCitjbG9jayB3aWxsIGJlIGluY3JlYXNlZCBzbyB5b3UgbmVlZCB0byB1bnJlZiB0aGUgY2xvY2sgYWZ0ZXIKK3VzYWdlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGRlZmF1bHQgY2xvY2suCitNVCBzYWZlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0U3lzdGVtQ2xvY2sucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFN5c3RlbUNsb2NrLS1jbG9jay10eXBlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImNsb2NrLXR5cGUiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiY2xvY2stdHlwZSIgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3lzdGVtQ2xvY2suaHRtbCNHc3RDbG9ja1R5cGUiIHRpdGxlPSJlbnVtIEdzdENsb2NrVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVHlwZTwvc3Bhbj48L2E+ICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5UaGUgdHlwZSBvZiB1bmRlcmx5aW5nIGNsb2NrIGltcGxlbWVudGF0aW9uIHVzZWQuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogR1NUX0NMT0NLX1RZUEVfTU9OT1RPTklDPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdFN5c3RlbUNsb2NrLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvR3N0VGFnU2V0dGVyLmh0bWwgYi9kb2NzL2dzdC9odG1sL0dzdFRhZ1NldHRlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMjk3MzcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dzdC9odG1sL0dzdFRhZ1NldHRlci5odG1sCkBAIC0wLDAgKzEsNDc4IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0VGFnU2V0dGVyPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RUYXNrLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjR3N0VGFnU2V0dGVyLnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0VGFnU2V0dGVyLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RUYWdTZXR0ZXIub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RUYWdTZXR0ZXIucHJlcmVxdWlzaXRlcyIgY2xhc3M9InNob3J0Y3V0Ij5QcmVyZXF1aXNpdGVzPC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9IkdzdFRhZ1NldHRlciI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9IkdzdFRhZ1NldHRlci50b3Bfb2ZfcGFnZSI+PC9hPkdzdFRhZ1NldHRlcjwvc3Bhbj48L2gyPgorPHA+R3N0VGFnU2V0dGVyIOKAlCBFbGVtZW50IGludGVyZmFjZSB0aGF0IGFsbG93cyBzZXR0aW5nIGFuZCByZXRyaWV2YWwKKyAgICAgICAgICAgICAgICAgICAgb2YgbWVkaWEgbWV0YWRhdGE8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJHc3RUYWdTZXR0ZXIuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKKworICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjR3N0VGFnU2V0dGVyLXN0cnVjdCIgdGl0bGU9IkdzdFRhZ1NldHRlciI+R3N0VGFnU2V0dGVyPC9hPjsKK3N0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sI0dzdFRhZ1NldHRlcklGYWNlIiB0aXRsZT0ic3RydWN0IEdzdFRhZ1NldHRlcklGYWNlIj5Hc3RUYWdTZXR0ZXJJRmFjZTwvYT47Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCNnc3QtdGFnLXNldHRlci1yZXNldC10YWdzIiB0aXRsZT0iZ3N0X3RhZ19zZXR0ZXJfcmVzZXRfdGFncyAoKSI+Z3N0X3RhZ19zZXR0ZXJfcmVzZXRfdGFnczwvYT4gICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnU2V0dGVyPC9zcGFuPjwvYT4gKnNldHRlcjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCNnc3QtdGFnLXNldHRlci1tZXJnZS10YWdzIiB0aXRsZT0iZ3N0X3RhZ19zZXR0ZXJfbWVyZ2VfdGFncyAoKSI+Z3N0X3RhZ19zZXR0ZXJfbWVyZ2VfdGFnczwvYT4gICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnU2V0dGVyPC9zcGFuPjwvYT4gKnNldHRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdNZXJnZU1vZGUiIHRpdGxlPSJlbnVtIEdzdFRhZ01lcmdlTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ01lcmdlTW9kZTwvc3Bhbj48L2E+IG1vZGU8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZ3MiIHRpdGxlPSJnc3RfdGFnX3NldHRlcl9hZGRfdGFncyAoKSI+Z3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ3M8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnU2V0dGVyPC9zcGFuPjwvYT4gKnNldHRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdNZXJnZU1vZGUiIHRpdGxlPSJlbnVtIEdzdFRhZ01lcmdlTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ01lcmdlTW9kZTwvc3Bhbj48L2E+IG1vZGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCNnc3QtdGFnLXNldHRlci1hZGQtdGFnLXZhbHVlIiB0aXRsZT0iZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWx1ZSAoKSI+Z3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWx1ZTwvYT4gICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnU2V0dGVyPC9zcGFuPjwvYT4gKnNldHRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdNZXJnZU1vZGUiIHRpdGxlPSJlbnVtIEdzdFRhZ01lcmdlTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ01lcmdlTW9kZTwvc3Bhbj48L2E+IG1vZGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZy12YWx1ZXMiIHRpdGxlPSJnc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbHVlcyAoKSI+Z3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWx1ZXM8L2E+ICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnU2V0dGVyPC9zcGFuPjwvYT4gKnNldHRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdNZXJnZU1vZGUiIHRpdGxlPSJlbnVtIEdzdFRhZ01lcmdlTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ01lcmdlTW9kZTwvc3Bhbj48L2E+IG1vZGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCNnc3QtdGFnLXNldHRlci1hZGQtdGFnLXZhbGlzdCIgdGl0bGU9ImdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsaXN0ICgpIj5nc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbGlzdDwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdTZXR0ZXI8L3NwYW4+PC9hPiAqc2V0dGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ01lcmdlTW9kZSIgdGl0bGU9ImVudW0gR3N0VGFnTWVyZ2VNb2RlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTWVyZ2VNb2RlPC9zcGFuPjwvYT4gbW9kZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZhX2xpc3Q8L3NwYW4+IHZhcl9hcmdzPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sI2dzdC10YWctc2V0dGVyLWFkZC10YWctdmFsaXN0LXZhbHVlcyIgdGl0bGU9ImdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsaXN0X3ZhbHVlcyAoKSI+Z3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWxpc3RfdmFsdWVzPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCIgdGl0bGU9IkdzdFRhZ1NldHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ1NldHRlcjwvc3Bhbj48L2E+ICpzZXR0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VNb2RlIiB0aXRsZT0iZW51bSBHc3RUYWdNZXJnZU1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdNZXJnZU1vZGU8L3NwYW4+PC9hPiBtb2RlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gdmFyX2FyZ3M8L2NvZGU+PC9lbT4pOworY29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICogIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCNnc3QtdGFnLXNldHRlci1nZXQtdGFnLWxpc3QiIHRpdGxlPSJnc3RfdGFnX3NldHRlcl9nZXRfdGFnX2xpc3QgKCkiPmdzdF90YWdfc2V0dGVyX2dldF90YWdfbGlzdDwvYT4gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCIgdGl0bGU9IkdzdFRhZ1NldHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ1NldHRlcjwvc3Bhbj48L2E+ICpzZXR0ZXI8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItc2V0LXRhZy1tZXJnZS1tb2RlIiB0aXRsZT0iZ3N0X3RhZ19zZXR0ZXJfc2V0X3RhZ19tZXJnZV9tb2RlICgpIj5nc3RfdGFnX3NldHRlcl9zZXRfdGFnX21lcmdlX21vZGU8L2E+ICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdTZXR0ZXI8L3NwYW4+PC9hPiAqc2V0dGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ01lcmdlTW9kZSIgdGl0bGU9ImVudW0gR3N0VGFnTWVyZ2VNb2RlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTWVyZ2VNb2RlPC9zcGFuPjwvYT4gbW9kZTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdNZXJnZU1vZGUiIHRpdGxlPSJlbnVtIEdzdFRhZ01lcmdlTW9kZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RUYWdNZXJnZU1vZGU8L3NwYW4+PC9hPiAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sI2dzdC10YWctc2V0dGVyLWdldC10YWctbWVyZ2UtbW9kZSIgdGl0bGU9ImdzdF90YWdfc2V0dGVyX2dldF90YWdfbWVyZ2VfbW9kZSAoKSI+Z3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19tZXJnZV9tb2RlPC9hPiAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnU2V0dGVyPC9zcGFuPjwvYT4gKnNldHRlcjwvY29kZT48L2VtPik7Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0VGFnU2V0dGVyLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgIEdJbnRlcmZhY2UKKyAgICstLS0tR3N0VGFnU2V0dGVyCis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0VGFnU2V0dGVyLnByZXJlcXVpc2l0ZXMiPjwvYT48aDI+UHJlcmVxdWlzaXRlczwvaDI+Cis8cD4KK0dzdFRhZ1NldHRlciByZXF1aXJlcworIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPi48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdFRhZ1NldHRlci5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK0VsZW1lbnQgaW50ZXJmYWNlIHRoYXQgYWxsb3dzIHNldHRpbmcgb2YgbWVkaWEgbWV0YWRhdGEuCis8L3A+Cis8cD4KK0VsZW1lbnRzIHRoYXQgc3VwcG9ydCBjaGFuZ2luZyBhIHN0cmVhbSdzIG1ldGFkYXRhIHdpbGwgaW1wbGVtZW50IHRoaXMKK2ludGVyZmFjZS4gRXhhbXBsZXMgb2Ygc3VjaCBlbGVtZW50cyBhcmUgJ3ZvcmJpc2VuYycsICd0aGVvcmFlbmMnIGFuZAorJ2lkM3YybXV4Jy4KKzwvcD4KKzxwPgorSWYgeW91IGp1c3Qgd2FudCB0byByZXRyaWV2ZSBtZXRhZGF0YSBpbiB5b3VyIGFwcGxpY2F0aW9uIHRoZW4gYWxsIHlvdQorbmVlZCB0byBkbyBpcyB3YXRjaCBmb3IgdGFnIG1lc3NhZ2VzIG9uIHlvdXIgcGlwZWxpbmUncyBidXMuIFRoaXMKK2ludGVyZmFjZSBpcyBvbmx5IGZvciBzZXR0aW5nIG1ldGFkYXRhLCBub3QgZm9yIGV4dHJhY3RpbmcgaXQuIFRvIHNldCB0YWdzCitmcm9tIHRoZSBhcHBsaWNhdGlvbiwgZmluZCB0YWdzZXR0ZXIgZWxlbWVudHMgYW5kIHNldCB0YWdzIHVzaW5nIGUuZy4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCNnc3QtdGFnLXNldHRlci1tZXJnZS10YWdzIiB0aXRsZT0iZ3N0X3RhZ19zZXR0ZXJfbWVyZ2VfdGFncyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFnX3NldHRlcl9tZXJnZV90YWdzKCk8L2NvZGU+PC9hPiBvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZ3MiIHRpdGxlPSJnc3RfdGFnX3NldHRlcl9hZGRfdGFncyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFnX3NldHRlcl9hZGRfdGFncygpPC9jb2RlPjwvYT4uIEFsc28gY29uc2lkZXIKK3NldHRpbmcgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ01lcmdlTW9kZSIgdGl0bGU9ImVudW0gR3N0VGFnTWVyZ2VNb2RlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTWVyZ2VNb2RlPC9zcGFuPjwvYT4gdGhhdCBpcyB1c2VkIGZvciB0YWcgZXZlbnRzIHRoYXQgYXJyaXZlIGF0IHRoZQordGFnc2V0dGVyIGVsZW1lbnQgKGRlZmF1bHQgbW9kZSBpcyB0byBrZWVwIGV4aXN0aW5nIHRhZ3MpLgorVGhlIGFwcGxpY2F0aW9uIHNob3VsZCBkbyB0aGF0IGJlZm9yZSB0aGUgZWxlbWVudCBnb2VzIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVBBVVNFRDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX1BBVVNFRDwvY29kZT48L2E+LgorPC9wPgorPHA+CitFbGVtZW50cyBpbXBsZW1lbnRpbmcgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCIgdGl0bGU9IkdzdFRhZ1NldHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ1NldHRlcjwvc3Bhbj48L2E+IGludGVyZmFjZSBvZnRlbiBoYXZlIHRvIG1lcmdlCithbnkgdGFncyByZWNlaXZlZCBmcm9tIHVwc3RyZWFtIGFuZCB0aGUgdGFncyBzZXQgYnkgdGhlIGFwcGxpY2F0aW9uIHZpYQordGhlIGludGVyZmFjZS4gVGhpcyBjYW4gYmUgZG9uZSBsaWtlIHRoaXM6Cis8L3A+Cis8cD4KKzwvcD4KKzxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgorR3N0VGFnTWVyZ2VNb2RlIG1lcmdlX21vZGU7Citjb25zdCBHc3RUYWdMaXN0ICphcHBsaWNhdGlvbl90YWdzOworY29uc3QgR3N0VGFnTGlzdCAqZXZlbnRfdGFnczsKK0dzdFRhZ1NldHRlciAqdGFnc2V0dGVyOworR3N0VGFnTGlzdCAqcmVzdWx0OworIAordGFnc2V0dGVyID0gR1NUX1RBR19TRVRURVIgKGVsZW1lbnQpOworIAorbWVyZ2VfbW9kZSA9IGdzdF90YWdfc2V0dGVyX2dldF90YWdfbWVyZ2VfbW9kZSAodGFnc2V0dGVyKTsKK2FwcGxpY2F0aW9uX3RhZ3MgPSBnc3RfdGFnX3NldHRlcl9nZXRfdGFnX2xpc3QgKHRhZ3NldHRlcik7CitldmVudF90YWdzID0gKGNvbnN0IEdzdFRhZ0xpc3QgKikgZWxlbWVudC0mZ3Q7ZXZlbnRfdGFnczsKKyAKK0dTVF9MT0dfT0JKRUNUICh0YWdzZXR0ZXIsICJtZXJnaW5nIHRhZ3MsIG1lcmdlIG1vZGUgPSAlZCIsIG1lcmdlX21vZGUpOworR1NUX0xPR19PQkpFQ1QgKHRhZ3NldHRlciwgImV2ZW50IHRhZ3M6ICUiIEdTVF9QVFJfRk9STUFULCBldmVudF90YWdzKTsKK0dTVF9MT0dfT0JKRUNUICh0YWdzZXR0ZXIsICJzZXQgICB0YWdzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgYXBwbGljYXRpb25fdGFncyk7CisgCityZXN1bHQgPSBnc3RfdGFnX2xpc3RfbWVyZ2UgKGFwcGxpY2F0aW9uX3RhZ3MsIGV2ZW50X3RhZ3MsIG1lcmdlX21vZGUpOworIAorR1NUX0xPR19PQkpFQ1QgKHRhZ3NldHRlciwgImZpbmFsIHRhZ3M6ICUiIEdTVF9QVFJfRk9STUFULCByZXN1bHQpOworPC9wcmU+PC9kaXY+Cis8cD4KKzwvcD4KKzxwPgorTGFzdCByZXZpZXdlZCBvbiAyMDA2LTA1LTE4ICgwLjEwLjYpCis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdFRhZ1NldHRlci5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0VGFnU2V0dGVyLXN0cnVjdCI+PC9hPjxoMz5Hc3RUYWdTZXR0ZXI8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgc3RydWN0IF9Hc3RUYWdTZXR0ZXIgR3N0VGFnU2V0dGVyOzwvcHJlPgorPHA+CitPcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnU2V0dGVyPC9zcGFuPjwvYT4gZGF0YSBzdHJ1Y3R1cmUuCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFRhZ1NldHRlcklGYWNlIj48L2E+PGgzPnN0cnVjdCBHc3RUYWdTZXR0ZXJJRmFjZTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFRhZ1NldHRlcklGYWNlIHsKKyAgR1R5cGVJbnRlcmZhY2UgZ19pZmFjZTsKKworICAvKiBzaWduYWxzICovCisKKyAgLyogdmlydHVhbCB0YWJsZSAqLworfTsKKzwvcHJlPgorPHA+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjR3N0VGFnU2V0dGVySUZhY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0VGFnU2V0dGVySUZhY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdTZXR0ZXJJRmFjZTwvc3Bhbj48L2E+IGludGVyZmFjZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZUludGVyZmFjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlSW50ZXJmYWNlPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFRhZ1NldHRlcklGYWNlLmctaWZhY2UiPjwvYT5nX2lmYWNlPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wYXJlbnQgaW50ZXJmYWNlIHR5cGUuPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YWctc2V0dGVyLXJlc2V0LXRhZ3MiPjwvYT48aDM+Z3N0X3RhZ19zZXR0ZXJfcmVzZXRfdGFncyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfdGFnX3NldHRlcl9yZXNldF90YWdzICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCIgdGl0bGU9IkdzdFRhZ1NldHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ1NldHRlcjwvc3Bhbj48L2E+ICpzZXR0ZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZXNldCB0aGUgaW50ZXJuYWwgdGFnbGlzdC4gRWxlbWVudHMgc2hvdWxkIGNhbGwgdGhpcyBmcm9tIHdpdGhpbiB0aGUKK3N0YXRlLWNoYW5nZSBoYW5kbGVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXR0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdTZXR0ZXI8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YWctc2V0dGVyLW1lcmdlLXRhZ3MiPjwvYT48aDM+Z3N0X3RhZ19zZXR0ZXJfbWVyZ2VfdGFncyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfdGFnX3NldHRlcl9tZXJnZV90YWdzICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCIgdGl0bGU9IkdzdFRhZ1NldHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ1NldHRlcjwvc3Bhbj48L2E+ICpzZXR0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VNb2RlIiB0aXRsZT0iZW51bSBHc3RUYWdNZXJnZU1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdNZXJnZU1vZGU8L3NwYW4+PC9hPiBtb2RlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorTWVyZ2VzIHRoZSBnaXZlbiBsaXN0IGludG8gdGhlIHNldHRlcidzIGxpc3QgdXNpbmcgdGhlIGdpdmVuIG1vZGUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2V0dGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnU2V0dGVyPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHRhZyBsaXN0IHRvIG1lcmdlIGZyb208L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1vZGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG1vZGUgdG8gbWVyZ2Ugd2l0aDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YWctc2V0dGVyLWFkZC10YWdzIj48L2E+PGgzPmdzdF90YWdfc2V0dGVyX2FkZF90YWdzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF90YWdfc2V0dGVyX2FkZF90YWdzICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnU2V0dGVyPC9zcGFuPjwvYT4gKnNldHRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdNZXJnZU1vZGUiIHRpdGxlPSJlbnVtIEdzdFRhZ01lcmdlTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ01lcmdlTW9kZTwvc3Bhbj48L2E+IG1vZGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0FkZHMgdGhlIGdpdmVuIHRhZyAvIHZhbHVlIHBhaXJzIG9uIHRoZSBzZXR0ZXIgdXNpbmcgdGhlIGdpdmVuIG1lcmdlIG1vZGUuCitUaGUgbGlzdCBtdXN0IGJlIHRlcm1pbmF0ZWQgd2l0aCBOVUxMLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNldHRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCIgdGl0bGU9IkdzdFRhZ1NldHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ1NldHRlcjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1vZGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG1vZGUgdG8gdXNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGFnIHRvIHNldDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm1vcmUgdGFnIC8gdmFsdWUgcGFpcnMgdG8gc2V0PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZy12YWx1ZSI+PC9hPjxoMz5nc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbHVlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsdWUgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnU2V0dGVyPC9zcGFuPjwvYT4gKnNldHRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdNZXJnZU1vZGUiIHRpdGxlPSJlbnVtIEdzdFRhZ01lcmdlTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ01lcmdlTW9kZTwvc3Bhbj48L2E+IG1vZGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBZGRzIHRoZSBnaXZlbiB0YWcgLyBHVmFsdWUgcGFpciBvbiB0aGUgc2V0dGVyIHVzaW5nIHRoZSBnaXZlbiBtZXJnZSBtb2RlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNldHRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCIgdGl0bGU9IkdzdFRhZ1NldHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ1NldHRlcjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1vZGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG1vZGUgdG8gdXNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGFnIHRvIHNldDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+R1ZhbHVlIHRvIHNldCBmb3IgdGhlIHRhZzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YWctc2V0dGVyLWFkZC10YWctdmFsdWVzIj48L2E+PGgzPmdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsdWVzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsdWVzICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnU2V0dGVyPC9zcGFuPjwvYT4gKnNldHRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdNZXJnZU1vZGUiIHRpdGxlPSJlbnVtIEdzdFRhZ01lcmdlTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ01lcmdlTW9kZTwvc3Bhbj48L2E+IG1vZGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0FkZHMgdGhlIGdpdmVuIHRhZyAvIEdWYWx1ZSBwYWlycyBvbiB0aGUgc2V0dGVyIHVzaW5nIHRoZSBnaXZlbiBtZXJnZSBtb2RlLgorVGhlIGxpc3QgbXVzdCBiZSB0ZXJtaW5hdGVkIHdpdGggTlVMTC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXR0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdTZXR0ZXI8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tb2RlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtb2RlIHRvIHVzZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRhZyB0byBzZXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5tb3JlIHRhZyAvIEdWYWx1ZSBwYWlycyB0byBzZXQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFnLXNldHRlci1hZGQtdGFnLXZhbGlzdCI+PC9hPjxoMz5nc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbGlzdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbGlzdCAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCIgdGl0bGU9IkdzdFRhZ1NldHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ1NldHRlcjwvc3Bhbj48L2E+ICpzZXR0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VNb2RlIiB0aXRsZT0iZW51bSBHc3RUYWdNZXJnZU1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdNZXJnZU1vZGU8L3NwYW4+PC9hPiBtb2RlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gdmFyX2FyZ3M8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBZGRzIHRoZSBnaXZlbiB0YWcgLyB2YWx1ZSBwYWlycyBvbiB0aGUgc2V0dGVyIHVzaW5nIHRoZSBnaXZlbiBtZXJnZSBtb2RlLgorVGhlIGxpc3QgbXVzdCBiZSB0ZXJtaW5hdGVkIHdpdGggTlVMTC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXR0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdTZXR0ZXI8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tb2RlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtb2RlIHRvIHVzZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRhZyB0byBzZXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhcl9hcmdzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRhZyAvIHZhbHVlIHBhaXJzIHRvIHNldDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YWctc2V0dGVyLWFkZC10YWctdmFsaXN0LXZhbHVlcyI+PC9hPjxoMz5nc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbGlzdF92YWx1ZXMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWxpc3RfdmFsdWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnU2V0dGVyPC9zcGFuPjwvYT4gKnNldHRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdNZXJnZU1vZGUiIHRpdGxlPSJlbnVtIEdzdFRhZ01lcmdlTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ01lcmdlTW9kZTwvc3Bhbj48L2E+IG1vZGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52YV9saXN0PC9zcGFuPiB2YXJfYXJnczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0FkZHMgdGhlIGdpdmVuIHRhZyAvIEdWYWx1ZSBwYWlycyBvbiB0aGUgc2V0dGVyIHVzaW5nIHRoZSBnaXZlbiBtZXJnZSBtb2RlLgorVGhlIGxpc3QgbXVzdCBiZSB0ZXJtaW5hdGVkIHdpdGggTlVMTC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXR0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdTZXR0ZXI8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tb2RlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtb2RlIHRvIHVzZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRhZyB0byBzZXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhcl9hcmdzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRhZyAvIEdWYWx1ZSBwYWlycyB0byBzZXQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFnLXNldHRlci1nZXQtdGFnLWxpc3QiPjwvYT48aDM+Z3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19saXN0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKiAgZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19saXN0ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdTZXR0ZXI8L3NwYW4+PC9hPiAqc2V0dGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0dXJucyB0aGUgY3VycmVudCBsaXN0IG9mIHRhZ3MgdGhlIHNldHRlciB1c2VzLiAgVGhlIGxpc3Qgc2hvdWxkIG5vdCBiZQorbW9kaWZpZWQgb3IgZnJlZWQuCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gaXMgbm90IHRocmVhZC1zYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNldHRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCIgdGl0bGU9IkdzdFRhZ1NldHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ1NldHRlcjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGN1cnJlbnQgc25hcHNob3Qgb2YgdGhlIHRhZ2xpc3QgdXNlZCBpbiB0aGUKK3NldHRlciBvciBOVUxMIGlmIG5vbmUgaXMgdXNlZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YWctc2V0dGVyLXNldC10YWctbWVyZ2UtbW9kZSI+PC9hPjxoMz5nc3RfdGFnX3NldHRlcl9zZXRfdGFnX21lcmdlX21vZGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3RhZ19zZXR0ZXJfc2V0X3RhZ19tZXJnZV9tb2RlICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdTZXR0ZXI8L3NwYW4+PC9hPiAqc2V0dGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ01lcmdlTW9kZSIgdGl0bGU9ImVudW0gR3N0VGFnTWVyZ2VNb2RlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTWVyZ2VNb2RlPC9zcGFuPjwvYT4gbW9kZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgdGhlIGdpdmVuIG1lcmdlIG1vZGUgdGhhdCBpcyB1c2VkIGZvciBhZGRpbmcgdGFncyBmcm9tIGV2ZW50cyB0byB0YWdzCitzcGVjaWZpZWQgYnkgdGhpcyBpbnRlcmZhY2UuIFRoZSBkZWZhdWx0IGlzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTUVSR0UtS0VFUDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RBR19NRVJHRV9LRUVQPC9zcGFuPjwvYT4sIHdoaWNoIGtlZXBzCit0aGUgdGFncyBzZXQgd2l0aCB0aGlzIGludGVyZmFjZSBhbmQgZGlzY2FyZHMgdGFncyBmcm9tIGV2ZW50cy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXR0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdTZXR0ZXI8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tb2RlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBtb2RlIHdpdGggd2hpY2ggdGFncyBhcmUgYWRkZWQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFnLXNldHRlci1nZXQtdGFnLW1lcmdlLW1vZGUiPjwvYT48aDM+Z3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19tZXJnZV9tb2RlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdNZXJnZU1vZGUiIHRpdGxlPSJlbnVtIEdzdFRhZ01lcmdlTW9kZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RUYWdNZXJnZU1vZGU8L3NwYW4+PC9hPiAgICAgZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19tZXJnZV9tb2RlICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdTZXR0ZXI8L3NwYW4+PC9hPiAqc2V0dGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUXVlcmllcyB0aGUgbW9kZSBieSB3aGljaCB0YWdzIGluc2lkZSB0aGUgc2V0dGVyIGFyZSBvdmVyd3JpdHRlbiBieSB0YWdzCitmcm9tIGV2ZW50cworPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNldHRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCIgdGl0bGU9IkdzdFRhZ1NldHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ1NldHRlcjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbWVyZ2UgbW9kZSB1c2VkIGluc2lkZSB0aGUgZWxlbWVudC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvR3N0VGFzay5odG1sIGIvZG9jcy9nc3QvaHRtbC9Hc3RUYXNrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZkZTc4OAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2h0bWwvR3N0VGFzay5odG1sCkBAIC0wLDAgKzEsNzYzIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0VGFzazwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCIgdGl0bGU9IkdzdFRhc2tQb29sIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNHc3RUYXNrLnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0VGFzay5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0VGFzay5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iR3N0VGFzayI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9IkdzdFRhc2sudG9wX29mX3BhZ2UiPjwvYT5Hc3RUYXNrPC9zcGFuPjwvaDI+Cis8cD5Hc3RUYXNrIOKAlCBBYnN0cmFjdGlvbiBvZiBHU3RyZWFtZXIgc3RyZWFtaW5nIHRocmVhZHMuPC9wPgorPC90ZD4KKzx0ZCB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgorPC90cj48L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGEgbmFtZT0iR3N0VGFzay5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisjaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OworCitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjR3N0VGFzay1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0VGFzayI+R3N0VGFzazwvYT47Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI0dzdFRhc2tGdW5jdGlvbiIgdGl0bGU9IkdzdFRhc2tGdW5jdGlvbiAoKSI+KkdzdFRhc2tGdW5jdGlvbjwvYT4pICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj4gKmRhdGE8L2NvZGU+PC9lbT4pOworZW51bSAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI0dzdFRhc2tTdGF0ZSIgdGl0bGU9ImVudW0gR3N0VGFza1N0YXRlIj5Hc3RUYXNrU3RhdGU8L2E+OworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI0dTVC1UQVNLLUJST0FEQ0FTVDpDQVBTIiB0aXRsZT0iR1NUX1RBU0tfQlJPQURDQVNUKCkiPkdTVF9UQVNLX0JST0FEQ0FTVDwvYT4gICAgICAgICAgICAgICAgICAodGFzaykKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNHU1QtVEFTSy1HRVQtQ09ORDpDQVBTIiB0aXRsZT0iR1NUX1RBU0tfR0VUX0NPTkQoKSI+R1NUX1RBU0tfR0VUX0NPTkQ8L2E+ICAgICAgICAgICAgICAgICAgICh0YXNrKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI0dTVC1UQVNLLUdFVC1MT0NLOkNBUFMiIHRpdGxlPSJHU1RfVEFTS19HRVRfTE9DSygpIj5HU1RfVEFTS19HRVRfTE9DSzwvYT4gICAgICAgICAgICAgICAgICAgKHRhc2spCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjR1NULVRBU0stU0lHTkFMOkNBUFMiIHRpdGxlPSJHU1RfVEFTS19TSUdOQUwoKSI+R1NUX1RBU0tfU0lHTkFMPC9hPiAgICAgICAgICAgICAgICAgICAgICh0YXNrKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI0dTVC1UQVNLLVNUQVRFOkNBUFMiIHRpdGxlPSJHU1RfVEFTS19TVEFURSgpIj5HU1RfVEFTS19TVEFURTwvYT4gICAgICAgICAgICAgICAgICAgICAgKHRhc2spCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjR1NULVRBU0stV0FJVDpDQVBTIiB0aXRsZT0iR1NUX1RBU0tfV0FJVCgpIj5HU1RfVEFTS19XQUlUPC9hPiAgICAgICAgICAgICAgICAgICAgICAgKHRhc2spCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RUYXNrPC9zcGFuPjwvYT4gKiAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1jcmVhdGUiIHRpdGxlPSJnc3RfdGFza19jcmVhdGUgKCkiPmdzdF90YXNrX2NyZWF0ZTwvYT4gICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjR3N0VGFza0Z1bmN0aW9uIiB0aXRsZT0iR3N0VGFza0Z1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFza0Z1bmN0aW9uPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGRhdGE8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLXNldC1sb2NrIiB0aXRsZT0iZ3N0X3Rhc2tfc2V0X2xvY2sgKCkiPmdzdF90YXNrX3NldF9sb2NrPC9hPiAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+ICp0YXNrPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItVGhyZWFkcy5odG1sI0dTdGF0aWNSZWNNdXRleCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTdGF0aWNSZWNNdXRleDwvc3Bhbj48L2E+ICptdXRleDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stc2V0LXByaW9yaXR5IiB0aXRsZT0iZ3N0X3Rhc2tfc2V0X3ByaW9yaXR5ICgpIj5nc3RfdGFza19zZXRfcHJpb3JpdHk8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPiAqdGFzazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVRocmVhZHMuaHRtbCNHVGhyZWFkUHJpb3JpdHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVGhyZWFkUHJpb3JpdHk8L3NwYW4+PC9hPiBwcmlvcml0eTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stc2V0LXBvb2wiIHRpdGxlPSJnc3RfdGFza19zZXRfcG9vbCAoKSI+Z3N0X3Rhc2tfc2V0X3Bvb2w8L2E+ICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4gKnRhc2s8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwiIHRpdGxlPSJHc3RUYXNrUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2tQb29sPC9zcGFuPjwvYT4gKnBvb2w8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwiIHRpdGxlPSJHc3RUYXNrUG9vbCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RUYXNrUG9vbDwvc3Bhbj48L2E+ICogICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1nZXQtcG9vbCIgdGl0bGU9ImdzdF90YXNrX2dldF9wb29sICgpIj5nc3RfdGFza19nZXRfcG9vbDwvYT4gICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPiAqdGFzazwvY29kZT48L2VtPik7CisgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjR3N0VGFza1RocmVhZENhbGxiYWNrcyIgdGl0bGU9IkdzdFRhc2tUaHJlYWRDYWxsYmFja3MiPkdzdFRhc2tUaHJlYWRDYWxsYmFja3M8L2E+OworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLXNldC10aHJlYWQtY2FsbGJhY2tzIiB0aXRsZT0iZ3N0X3Rhc2tfc2V0X3RocmVhZF9jYWxsYmFja3MgKCkiPmdzdF90YXNrX3NldF90aHJlYWRfY2FsbGJhY2tzPC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+ICp0YXNrPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjR3N0VGFza1RocmVhZENhbGxiYWNrcyIgdGl0bGU9IkdzdFRhc2tUaHJlYWRDYWxsYmFja3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrVGhyZWFkQ2FsbGJhY2tzPC9zcGFuPjwvYT4gKmNhbGxiYWNrczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURhdGFzZXRzLmh0bWwjR0Rlc3Ryb3lOb3RpZnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRGVzdHJveU5vdGlmeTwvc3Bhbj48L2E+IG5vdGlmeTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI0dzdFRhc2tTdGF0ZSIgdGl0bGU9ImVudW0gR3N0VGFza1N0YXRlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRhc2tTdGF0ZTwvc3Bhbj48L2E+ICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLWdldC1zdGF0ZSIgdGl0bGU9ImdzdF90YXNrX2dldF9zdGF0ZSAoKSI+Z3N0X3Rhc2tfZ2V0X3N0YXRlPC9hPiAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4gKnRhc2s8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLXNldC1zdGF0ZSIgdGl0bGU9ImdzdF90YXNrX3NldF9zdGF0ZSAoKSI+Z3N0X3Rhc2tfc2V0X3N0YXRlPC9hPiAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4gKnRhc2s8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNHc3RUYXNrU3RhdGUiIHRpdGxlPSJlbnVtIEdzdFRhc2tTdGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2tTdGF0ZTwvc3Bhbj48L2E+IHN0YXRlPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1wYXVzZSIgdGl0bGU9ImdzdF90YXNrX3BhdXNlICgpIj5nc3RfdGFza19wYXVzZTwvYT4gICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPiAqdGFzazwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stc3RhcnQiIHRpdGxlPSJnc3RfdGFza19zdGFydCAoKSI+Z3N0X3Rhc2tfc3RhcnQ8L2E+ICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4gKnRhc2s8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLXN0b3AiIHRpdGxlPSJnc3RfdGFza19zdG9wICgpIj5nc3RfdGFza19zdG9wPC9hPiAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPiAqdGFzazwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stam9pbiIgdGl0bGU9ImdzdF90YXNrX2pvaW4gKCkiPmdzdF90YXNrX2pvaW48L2E+ICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+ICp0YXNrPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1jbGVhbnVwLWFsbCIgdGl0bGU9ImdzdF90YXNrX2NsZWFudXBfYWxsICgpIj5nc3RfdGFza19jbGVhbnVwX2FsbDwvYT4gICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdFRhc2sub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPkdPYmplY3Q8L2E+CisgICArLS0tLTxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+CisgICAgICAgICArLS0tLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+R3N0T2JqZWN0PC9hPgorICAgICAgICAgICAgICAgKy0tLS1Hc3RUYXNrCis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0VGFzay5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+IGlzIHVzZWQgYnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIHByb3ZpZGUgdGhlIGRhdGEgcGFzc2luZwordGhyZWFkcyBpbiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+LgorPC9wPgorPHA+CitBIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHdpbGwgdHlwaWNhbGx5IHN0YXJ0IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4gdG8gcHVzaCBvciBwdWxsIGRhdGEgdG8vZnJvbSB0aGUKK3BlZXIgcGFkcy4gTW9zdCBzb3VyY2UgZWxlbWVudHMgc3RhcnQgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPiB0byBwdXNoIGRhdGEuIEluIHNvbWUgY2FzZXMKK2EgZGVtdXhlciBlbGVtZW50IGNhbiBzdGFydCBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+IHRvIHB1bGwgZGF0YSBmcm9tIGEgcGVlciBlbGVtZW50LiBUaGlzCitpcyB0eXBpY2FsbHkgZG9uZSB3aGVuIHRoZSBkZW11eGVyIGNhbiBwZXJmb3JtIHJhbmRvbSBhY2Nlc3Mgb24gdGhlIHVwc3RyZWFtCitwZWVyIGVsZW1lbnQgZm9yIGltcHJvdmVkIHBlcmZvcm1hbmNlLgorPC9wPgorPHA+CitBbHRob3VnaCBjb252ZW5pZW5jZSBmdW5jdGlvbnMgZXhpc3Qgb24gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gc3RhcnQvcGF1c2Uvc3RvcCB0YXNrcywgaXQKK21pZ2h0IHNvbWV0aW1lcyBiZSBuZWVkZWQgdG8gY3JlYXRlIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4gbWFudWFsbHkgaWYgaXQgaXMgbm90IHJlbGF0ZWQgdG8KK2EgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4uCis8L3A+Cis8cD4KK0JlZm9yZSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4gY2FuIGJlIHJ1biwgaXQgbmVlZHMgYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVRocmVhZHMuaHRtbCNHU3RhdGljUmVjTXV0ZXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU3RhdGljUmVjTXV0ZXg8L3NwYW4+PC9hPiB0aGF0IGNhbiBiZSBzZXQgd2l0aAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1zZXQtbG9jayIgdGl0bGU9ImdzdF90YXNrX3NldF9sb2NrICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YXNrX3NldF9sb2NrKCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxwPgorVGhlIHRhc2sgY2FuIGJlIHN0YXJ0ZWQsIHBhdXNlZCBhbmQgc3RvcHBlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stc3RhcnQiIHRpdGxlPSJnc3RfdGFza19zdGFydCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFza19zdGFydCgpPC9jb2RlPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stcGF1c2UiIHRpdGxlPSJnc3RfdGFza19wYXVzZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFza19wYXVzZSgpPC9jb2RlPjwvYT4KK2FuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLXN0b3AiIHRpdGxlPSJnc3RfdGFza19zdG9wICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YXNrX3N0b3AoKTwvY29kZT48L2E+IHJlc3BlY3RpdmVseSBvciB3aXRoIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLXNldC1zdGF0ZSIgdGl0bGU9ImdzdF90YXNrX3NldF9zdGF0ZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFza19zZXRfc3RhdGUoKTwvY29kZT48L2E+IGZ1bmN0aW9uLgorPC9wPgorPHA+CitBIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+IHdpbGwgcmVwZWF0ZWRseSBjYWxsIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI0dzdFRhc2tGdW5jdGlvbiIgdGl0bGU9IkdzdFRhc2tGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2tGdW5jdGlvbjwvc3Bhbj48L2E+IHdpdGggdGhlIHVzZXIgZGF0YQordGhhdCB3YXMgcHJvdmlkZWQgd2hlbiBjcmVhdGluZyB0aGUgdGFzayB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stY3JlYXRlIiB0aXRsZT0iZ3N0X3Rhc2tfY3JlYXRlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YXNrX2NyZWF0ZSgpPC9jb2RlPjwvYT4uIFdoaWxlIGNhbGxpbmcKK3RoZSBmdW5jdGlvbiBpdCB3aWxsIGFjcXVpcmUgdGhlIHByb3ZpZGVkIGxvY2suIFRoZSBwcm92aWRlZCBsb2NrIGlzIHJlbGVhc2VkCit3aGVuIHRoZSB0YXNrIHBhdXNlcyBvciBzdG9wcy4KKzwvcD4KKzxwPgorU3RvcHBpbmcgYSB0YXNrIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1zdG9wIiB0aXRsZT0iZ3N0X3Rhc2tfc3RvcCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFza19zdG9wKCk8L2NvZGU+PC9hPiB3aWxsIG5vdCBpbW1lZGlhdGVseSBtYWtlIHN1cmUgdGhlIHRhc2sgaXMKK25vdCBydW5uaW5nIGFueW1vcmUuIFVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLWpvaW4iIHRpdGxlPSJnc3RfdGFza19qb2luICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YXNrX2pvaW4oKTwvY29kZT48L2E+IHRvIG1ha2Ugc3VyZSB0aGUgdGFzayBpcyBjb21wbGV0ZWx5CitzdG9wcGVkIGFuZCB0aGUgdGhyZWFkIGlzIHN0b3BwZWQuCis8L3A+Cis8cD4KK0FmdGVyIGNyZWF0aW5nIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4sIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC11bnJlZiIgdGl0bGU9ImdzdF9vYmplY3RfdW5yZWYgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X29iamVjdF91bnJlZigpPC9jb2RlPjwvYT4gdG8gZnJlZSBpdHMgcmVzb3VyY2VzLiBUaGlzIGNhbgorb25seSBiZSBkb25lIGl0IHRoZSB0YXNrIGlzIG5vdCBydW5uaW5nIGFueW1vcmUuCis8L3A+Cis8cD4KK1Rhc2sgZnVuY3Rpb25zIGNhbiBzZW5kIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IHRvIHNlbmQgb3V0LW9mLWJhbmQgZGF0YSB0byB0aGUKK2FwcGxpY2F0aW9uLiBUaGUgYXBwbGljYXRpb24gY2FuIHJlY2VpdmUgbWVzc2FnZXMgZnJvbSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gaW4gaXRzCittYWlubG9vcC4KKzwvcD4KKzxwPgorRm9yIGRlYnVnZ2luZyBwZXJwb3NlcywgdGhlIHRhc2sgd2lsbCBjb25maWd1cmUgaXRzIG9iamVjdCBuYW1lIGFzIHRoZSB0aHJlYWQKK25hbWUgb24gTGludXguIFBsZWFzZSBub3RlIHRoYXQgdGhlIG9iamVjdCBuYW1lIHNob3VsZCBiZSBjb25maWd1cmVkIGJlZm9yZSB0aGUKK3Rhc2sgaXMgc3RhcnRlZDsgY2hhbmdpbmcgdGhlIG9iamVjdCBuYW1lIGFmdGVyIHRoZSB0YXNrIGhhcyBiZWVuIHN0YXJ0ZWQsIGhhcworbm8gZWZmZWN0IG9uIHRoZSB0aHJlYWQgbmFtZS4KKzwvcD4KKzxwPgorTGFzdCByZXZpZXdlZCBvbiAyMDEwLTAzLTE1ICgwLjEwLjI5KQorPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RUYXNrLmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RUYXNrLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0VGFzazwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFRhc2sgeworICBHc3RUYXNrU3RhdGUgICAgIHN0YXRlOworICBHQ29uZCAgICAgICAgICAgKmNvbmQ7CisKKyAgR1N0YXRpY1JlY011dGV4ICpsb2NrOworCisgIEdzdFRhc2tGdW5jdGlvbiAgZnVuYzsKKyAgZ3BvaW50ZXIgICAgICAgICBkYXRhOworCisgIGdib29sZWFuICAgICAgICAgcnVubmluZzsKK307Cis8L3ByZT4KKzxwPgorVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+IG9iamVjdC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjR3N0VGFza1N0YXRlIiB0aXRsZT0iZW51bSBHc3RUYXNrU3RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrU3RhdGU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0VGFzay1zdHJ1Y3Quc3RhdGUiPjwvYT5zdGF0ZTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHN0YXRlIG9mIHRoZSB0YXNrPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItVGhyZWFkcy5odG1sI0dDb25kIj48c3BhbiBjbGFzcz0idHlwZSI+R0NvbmQ8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFRhc2stc3RydWN0LmNvbmQiPjwvYT5jb25kPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VkIHRvIHBhdXNlL3Jlc3VtZSB0aGUgdGFzazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVRocmVhZHMuaHRtbCNHU3RhdGljUmVjTXV0ZXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU3RhdGljUmVjTXV0ZXg8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFRhc2stc3RydWN0LmxvY2siPjwvYT5sb2NrPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgbG9jayB0YWtlbiB3aGVuIGl0ZXJhdGluZyB0aGUgdGFzayBmdW5jdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI0dzdFRhc2tGdW5jdGlvbiIgdGl0bGU9IkdzdFRhc2tGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2tGdW5jdGlvbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RUYXNrLXN0cnVjdC5mdW5jIj48L2E+ZnVuYzwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGZ1bmN0aW9uIGV4ZWN1dGVkIGJ5IHRoaXMgdGFzazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RUYXNrLXN0cnVjdC5kYXRhIj48L2E+ZGF0YTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZGF0YSBwYXNzZWQgdG8gdGhlIHRhc2sgZnVuY3Rpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0VGFzay1zdHJ1Y3QucnVubmluZyI+PC9hPnJ1bm5pbmc8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgZmxhZyBpbmRpY2F0aW5nIHRoYXQgdGhlIHRhc2sgaXMgcnVubmluZzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFRhc2tGdW5jdGlvbiI+PC9hPjxoMz5Hc3RUYXNrRnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgKCpHc3RUYXNrRnVuY3Rpb24pICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj4gKmRhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBIGZ1bmN0aW9uIHRoYXQgd2lsbCByZXBlYXRlZGx5IGJlIGNhbGxlZCBpbiB0aGUgdGhyZWFkIGNyZWF0ZWQgYnkKK2EgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhIHBhc3NlZCB0byB0aGUgZnVuY3Rpb248L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0VGFza1N0YXRlIj48L2E+PGgzPmVudW0gR3N0VGFza1N0YXRlPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGVudW0geworICBHU1RfVEFTS19TVEFSVEVELAorICBHU1RfVEFTS19TVE9QUEVELAorICBHU1RfVEFTS19QQVVTRUQKK30gR3N0VGFza1N0YXRlOworPC9wcmU+Cis8cD4KK1RoZSBkaWZmZXJlbnQgc3RhdGVzIGEgdGFzayBjYW4gYmUgaW4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVRBU0stU1RBUlRFRDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfVEFTS19TVEFSVEVEPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdGFzayBpcyBzdGFydGVkIGFuZCBydW5uaW5nCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtVEFTSy1TVE9QUEVEOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9UQVNLX1NUT1BQRUQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB0YXNrIGlzIHN0b3BwZWQKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1UQVNLLVBBVVNFRDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfVEFTS19QQVVTRUQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB0YXNrIGlzIHBhdXNlZAorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBU0stQlJPQURDQVNUOkNBUFMiPjwvYT48aDM+R1NUX1RBU0tfQlJPQURDQVNUKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBU0tfQlJPQURDQVNUKHRhc2spICAgICAgICBnX2NvbmRfYnJvYWRjYXN0KEdTVF9UQVNLX0dFVF9DT05EICh0YXNrKSkKKzwvcHJlPgorPHA+CitTZW5kIGEgYnJvYWRjYXN0IHNpZ25hbCB0byBhbGwgd2FpdGluZyB0YXNrIGNvbmRzCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhc2s8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGFzayB0byBicm9hZGNhc3Q8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBU0stR0VULUNPTkQ6Q0FQUyI+PC9hPjxoMz5HU1RfVEFTS19HRVRfQ09ORCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQVNLX0dFVF9DT05EKHRhc2spICAgICAgICAgKEdTVF9UQVNLX0NBU1QodGFzayktJmd0O2NvbmQpCis8L3ByZT4KKzxwPgorR2V0IGFjY2VzcyB0byB0aGUgY29uZCBvZiB0aGUgdGFzay4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFzazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UYXNrIHRvIGdldCB0aGUgY29uZCBvZjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVEFTSy1HRVQtTE9DSzpDQVBTIj48L2E+PGgzPkdTVF9UQVNLX0dFVF9MT0NLKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBU0tfR0VUX0xPQ0sodGFzaykgICAgICAgICAoR1NUX1RBU0tfQ0FTVCh0YXNrKS0mZ3Q7bG9jaykKKzwvcHJlPgorPHA+CitHZXQgYWNjZXNzIHRvIHRoZSB0YXNrIGxvY2suCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhc2s8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGFzayB0byBnZXQgdGhlIGxvY2sgb2Y8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBU0stU0lHTkFMOkNBUFMiPjwvYT48aDM+R1NUX1RBU0tfU0lHTkFMKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBU0tfU0lHTkFMKHRhc2spICAgICAgICAgICBnX2NvbmRfc2lnbmFsKEdTVF9UQVNLX0dFVF9DT05EICh0YXNrKSkKKzwvcHJlPgorPHA+CitTaWduYWwgdGhlIHRhc2sgY29uZAorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YXNrPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRhc2sgdG8gc2lnbmFsPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1UQVNLLVNUQVRFOkNBUFMiPjwvYT48aDM+R1NUX1RBU0tfU1RBVEUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFTS19TVEFURSh0YXNrKSAgICAgICAgICAgIChHU1RfVEFTS19DQVNUKHRhc2spLSZndDtzdGF0ZSkKKzwvcHJlPgorPHA+CitHZXQgYWNjZXNzIHRvIHRoZSBzdGF0ZSBvZiB0aGUgdGFzay4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFzazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UYXNrIHRvIGdldCB0aGUgc3RhdGUgb2Y8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBU0stV0FJVDpDQVBTIj48L2E+PGgzPkdTVF9UQVNLX1dBSVQoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFTS19XQUlUKHRhc2spICAgICAgICAgICAgIGdfY29uZF93YWl0KEdTVF9UQVNLX0dFVF9DT05EICh0YXNrKSwgR1NUX09CSkVDVF9HRVRfTE9DSyAodGFzaykpCis8L3ByZT4KKzxwPgorV2FpdCBmb3IgdGhlIHRhc2sgY29uZCB0byBiZSBzaWduYWxsZWQKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFzazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UYXNrIHRvIHdhaXQgZm9yPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YXNrLWNyZWF0ZSI+PC9hPjxoMz5nc3RfdGFza19jcmVhdGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRhc2s8L3NwYW4+PC9hPiAqICAgICAgICAgICBnc3RfdGFza19jcmVhdGUgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjR3N0VGFza0Z1bmN0aW9uIiB0aXRsZT0iR3N0VGFza0Z1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFza0Z1bmN0aW9uPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGRhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGUgYSBuZXcgVGFzayB0aGF0IHdpbGwgcmVwZWF0ZWRseSBjYWxsIHRoZSBwcm92aWRlZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPgord2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPiBhcyBhIHBhcmFtZXRlci4gVHlwaWNhbGx5IHRoZSB0YXNrIHdpbGwgcnVuIGluCithIG5ldyB0aHJlYWQuCis8L3A+Cis8cD4KK1RoZSBmdW5jdGlvbiBjYW5ub3QgYmUgY2hhbmdlZCBhZnRlciB0aGUgdGFzayBoYXMgYmVlbiBjcmVhdGVkLiBZb3UKK211c3QgY3JlYXRlIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+IHRvIGNoYW5nZSB0aGUgZnVuY3Rpb24uCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gd2lsbCBub3QgeWV0IGNyZWF0ZSBhbmQgc3RhcnQgYSB0aHJlYWQuIFVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLXN0YXJ0IiB0aXRsZT0iZ3N0X3Rhc2tfc3RhcnQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3Rhc2tfc3RhcnQoKTwvY29kZT48L2E+IG9yCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLXBhdXNlIiB0aXRsZT0iZ3N0X3Rhc2tfcGF1c2UgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3Rhc2tfcGF1c2UoKTwvY29kZT48L2E+IHRvIGNyZWF0ZSBhbmQgc3RhcnQgdGhlIEdUaHJlYWQuCis8L3A+Cis8cD4KK0JlZm9yZSB0aGUgdGFzayBjYW4gYmUgdXNlZCwgYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVRocmVhZHMuaHRtbCNHU3RhdGljUmVjTXV0ZXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU3RhdGljUmVjTXV0ZXg8L3NwYW4+PC9hPiBtdXN0IGJlIGNvbmZpZ3VyZWQgdXNpbmcgdGhlCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLXNldC1sb2NrIiB0aXRsZT0iZ3N0X3Rhc2tfc2V0X2xvY2sgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3Rhc2tfc2V0X2xvY2soKTwvY29kZT48L2E+IGZ1bmN0aW9uLiBUaGlzIGxvY2sgd2lsbCBhbHdheXMgYmUgYWNxdWlyZWQgd2hpbGUKKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+IGlzIGNhbGxlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI0dzdFRhc2tGdW5jdGlvbiIgdGl0bGU9IkdzdFRhc2tGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2tGdW5jdGlvbjwvc3Bhbj48L2E+IHRvIHVzZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Vc2VyIGRhdGEgdG8gcGFzcyB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iVGhpcyBwYXJhbWV0ZXIgaXMgYSAndXNlcl9kYXRhJywgZm9yIGNhbGxiYWNrczsgbWFueSBiaW5kaW5ncyBjYW4gcGFzcyBOVUxMIGhlcmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+Y2xvc3VyZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+LgorTVQgc2FmZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YXNrLXNldC1sb2NrIj48L2E+PGgzPmdzdF90YXNrX3NldF9sb2NrICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF90YXNrX3NldF9sb2NrICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4gKnRhc2s8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1UaHJlYWRzLmh0bWwjR1N0YXRpY1JlY011dGV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R1N0YXRpY1JlY011dGV4PC9zcGFuPjwvYT4gKm11dGV4PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0IHRoZSBtdXRleCB1c2VkIGJ5IHRoZSB0YXNrLiBUaGUgbXV0ZXggd2lsbCBiZSBhY3F1aXJlZCBiZWZvcmUKK2NhbGxpbmcgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjR3N0VGFza0Z1bmN0aW9uIiB0aXRsZT0iR3N0VGFza0Z1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFza0Z1bmN0aW9uPC9zcGFuPjwvYT4uCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gaGFzIHRvIGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLXBhdXNlIiB0aXRsZT0iZ3N0X3Rhc2tfcGF1c2UgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3Rhc2tfcGF1c2UoKTwvY29kZT48L2E+IG9yCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLXN0YXJ0IiB0aXRsZT0iZ3N0X3Rhc2tfc3RhcnQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3Rhc2tfc3RhcnQoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhc2s8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+IHRvIHVzZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bXV0ZXg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItVGhyZWFkcy5odG1sI0dNdXRleCI+PHNwYW4gY2xhc3M9InR5cGUiPkdNdXRleDwvc3Bhbj48L2E+IHRvIHVzZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YXNrLXNldC1wcmlvcml0eSI+PC9hPjxoMz5nc3RfdGFza19zZXRfcHJpb3JpdHkgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3Rhc2tfc2V0X3ByaW9yaXR5ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPiAqdGFzazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVRocmVhZHMuaHRtbCNHVGhyZWFkUHJpb3JpdHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVGhyZWFkUHJpb3JpdHk8L3NwYW4+PC9hPiBwcmlvcml0eTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NoYW5nZXMgdGhlIHByaW9yaXR5IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YXNrPC9jb2RlPjwvZW0+IHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcmlvcml0eTwvY29kZT48L2VtPi4KKzwvcD4KKzxwPgorTm90ZTogdHJ5IG5vdCB0byBkZXBlbmQgb24gdGFzayBwcmlvcml0aWVzLgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhc2s8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcmlvcml0eTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyBwcmlvcml0eSBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhc2s8L2NvZGU+PC9lbT4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YXNrLXNldC1wb29sIj48L2E+PGgzPmdzdF90YXNrX3NldF9wb29sICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF90YXNrX3NldF9wb29sICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4gKnRhc2s8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwiIHRpdGxlPSJHc3RUYXNrUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2tQb29sPC9zcGFuPjwvYT4gKnBvb2w8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBvb2w8L2NvZGU+PC9lbT4gYXMgdGhlIG5ldyBHc3RUYXNrUG9vbCBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhc2s8L2NvZGU+PC9lbT4uIEFueSBuZXcgc3RyZWFtaW5nIHRocmVhZHMgdGhhdAord2lsbCBiZSBjcmVhdGVkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YXNrPC9jb2RlPjwvZW0+IHdpbGwgbm93IHVzZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9vbDwvY29kZT48L2VtPi4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YXNrPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9vbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sIiB0aXRsZT0iR3N0VGFza1Bvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrUG9vbDwvc3Bhbj48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRhc2stZ2V0LXBvb2wiPjwvYT48aDM+Z3N0X3Rhc2tfZ2V0X3Bvb2wgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sIiB0aXRsZT0iR3N0VGFza1Bvb2wiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0VGFza1Bvb2w8L3NwYW4+PC9hPiAqICAgICAgIGdzdF90YXNrX2dldF9wb29sICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4gKnRhc2s8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sIiB0aXRsZT0iR3N0VGFza1Bvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrUG9vbDwvc3Bhbj48L2E+IHRoYXQgdGhpcyB0YXNrIHdpbGwgdXNlIGZvciBpdHMgc3RyZWFtaW5nCit0aHJlYWRzLgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhc2s8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sIiB0aXRsZT0iR3N0VGFza1Bvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrUG9vbDwvc3Bhbj48L2E+IHVzZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhc2s8L2NvZGU+PC9lbT4uIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucmVmIiB0aXRsZT0iZ3N0X29iamVjdF91bnJlZiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X3VucmVmKCk8L2NvZGU+PC9hPgorYWZ0ZXIgdXNhZ2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI0PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RUYXNrVGhyZWFkQ2FsbGJhY2tzIj48L2E+PGgzPkdzdFRhc2tUaHJlYWRDYWxsYmFja3M8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgc3RydWN0IHsKKyAgLyogbWFuYWdlIHRoZSBsaWZldGltZSBvZiB0aGUgdGhyZWFkICovCisgIHZvaWQgICAgICAoKmVudGVyX3RocmVhZCkgICAgIChHc3RUYXNrICp0YXNrLCBHVGhyZWFkICp0aHJlYWQsIGdwb2ludGVyIHVzZXJfZGF0YSk7CisgIHZvaWQgICAgICAoKmxlYXZlX3RocmVhZCkgICAgIChHc3RUYXNrICp0YXNrLCBHVGhyZWFkICp0aHJlYWQsIGdwb2ludGVyIHVzZXJfZGF0YSk7Cit9IEdzdFRhc2tUaHJlYWRDYWxsYmFja3M7Cis8L3ByZT4KKzxwPgorQ3VzdG9tIEdzdFRhc2sgdGhyZWFkIGNhbGxiYWNrIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBpbnN0YWxsZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RUYXNrVGhyZWFkQ2FsbGJhY2tzLmVudGVyLXRocmVhZCI+PC9hPmVudGVyX3RocmVhZDwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSB0aHJlYWQgaXMgZW50ZXJlZCwgdGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgbmV3Cit0aHJlYWQgZW50ZXJzIGl0cyBmdW5jdGlvbi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0VGFza1RocmVhZENhbGxiYWNrcy5sZWF2ZS10aHJlYWQiPjwvYT5sZWF2ZV90aHJlYWQ8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPmEgdGhyZWFkIGlzIGV4aXRpbmcsIHRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIHRocmVhZCBpcyBhYm91dAordG8gbGVhdmUgaXRzIGZ1bmN0aW9uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRhc2stc2V0LXRocmVhZC1jYWxsYmFja3MiPjwvYT48aDM+Z3N0X3Rhc2tfc2V0X3RocmVhZF9jYWxsYmFja3MgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3Rhc2tfc2V0X3RocmVhZF9jYWxsYmFja3MgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPiAqdGFzazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI0dzdFRhc2tUaHJlYWRDYWxsYmFja3MiIHRpdGxlPSJHc3RUYXNrVGhyZWFkQ2FsbGJhY2tzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFza1RocmVhZENhbGxiYWNrczwvc3Bhbj48L2E+ICpjYWxsYmFja3M8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1EYXRhc2V0cy5odG1sI0dEZXN0cm95Tm90aWZ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R0Rlc3Ryb3lOb3RpZnk8L3NwYW4+PC9hPiBub3RpZnk8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXQgY2FsbGJhY2tzIHdoaWNoIHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBhIG5ldyB0aHJlYWQgaXMgbmVlZGVkLCB0aGUgdGhyZWFkCitmdW5jdGlvbiBpcyBlbnRlcmVkIGFuZCBsZWZ0IGFuZCB3aGVuIHRoZSB0aHJlYWQgaXMgam9pbmVkLgorPC9wPgorPHA+CitCeSBkZWZhdWx0IGEgdGhyZWFkIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFzazwvY29kZT48L2VtPiB3aWxsIGJlIGNyZWF0ZWQgZnJvbSBhIGRlZmF1bHQgdGhyZWFkIHBvb2wuCis8L3A+Cis8cD4KK09iamVjdHMgY2FuIHVzZSBjdXN0b20gR1RocmVhZHMgb3IgY2FuIHBlcmZvcm0gYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9mCit0aGUgdGhyZWFkcyAoc3VjaCBhcyBjaGFuZ2luZyB0aGUgdGhyZWFkIHByaW9yaXR5KSBieSBpbnN0YWxsaW5nIGNhbGxiYWNrcy4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YXNrPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPiB0byB1c2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhbGxiYWNrczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjR3N0VGFza1RocmVhZENhbGxiYWNrcyIgdGl0bGU9IkdzdFRhc2tUaHJlYWRDYWxsYmFja3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrVGhyZWFkQ2FsbGJhY2tzPC9zcGFuPjwvYT4gcG9pbnRlci4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dC4gRGVmYXVsdCBpcyB0cmFuc2ZlciBub25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmluPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhIHBhc3NlZCB0byB0aGUgY2FsbGJhY2tzLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGlzIHBhcmFtZXRlciBpcyBhICd1c2VyX2RhdGEnLCBmb3IgY2FsbGJhY2tzOyBtYW55IGJpbmRpbmdzIGNhbiBwYXNzIE5VTEwgaGVyZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5jbG9zdXJlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ub3RpZnk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Y2FsbGVkIHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPiBpcyBubyBsb25nZXIgcmVmZXJlbmNlZDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YXNrLWdldC1zdGF0ZSI+PC9hPjxoMz5nc3RfdGFza19nZXRfc3RhdGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjR3N0VGFza1N0YXRlIiB0aXRsZT0iZW51bSBHc3RUYXNrU3RhdGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0VGFza1N0YXRlPC9zcGFuPjwvYT4gICAgICAgIGdzdF90YXNrX2dldF9zdGF0ZSAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4gKnRhc2s8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHRhc2suCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFzazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4gdG8gcXVlcnk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNHc3RUYXNrU3RhdGUiIHRpdGxlPSJlbnVtIEdzdFRhc2tTdGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2tTdGF0ZTwvc3Bhbj48L2E+IG9mIHRoZSB0YXNrCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YXNrLXNldC1zdGF0ZSI+PC9hPjxoMz5nc3RfdGFza19zZXRfc3RhdGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3Rhc2tfc2V0X3N0YXRlICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPiAqdGFzazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI0dzdFRhc2tTdGF0ZSIgdGl0bGU9ImVudW0gR3N0VGFza1N0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFza1N0YXRlPC9zcGFuPjwvYT4gc3RhdGU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXRzIHRoZSBzdGF0ZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFzazwvY29kZT48L2VtPiB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhdGU8L2NvZGU+PC9lbT4uCis8L3A+Cis8cD4KK1RoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFzazwvY29kZT48L2VtPiBtdXN0IGhhdmUgYSBsb2NrIGFzc29jaWF0ZWQgd2l0aCBpdCB1c2luZworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1zZXQtbG9jayIgdGl0bGU9ImdzdF90YXNrX3NldF9sb2NrICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YXNrX3NldF9sb2NrKCk8L2NvZGU+PC9hPiB3aGVuIGdvaW5nIHRvIEdTVF9UQVNLX1NUQVJURUQgb3IgR1NUX1RBU0tfUEFVU0VEIG9yCit0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4uCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFzazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXRlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXcgdGFzayBzdGF0ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHN0YXRlIGNvdWxkIGJlIGNoYW5nZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRhc2stcGF1c2UiPjwvYT48aDM+Z3N0X3Rhc2tfcGF1c2UgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3Rhc2tfcGF1c2UgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPiAqdGFzazwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1BhdXNlcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFzazwvY29kZT48L2VtPi4gVGhpcyBtZXRob2QgY2FuIGFsc28gYmUgY2FsbGVkIG9uIGEgdGFzayBpbiB0aGUKK3N0b3BwZWQgc3RhdGUsIGluIHdoaWNoIGNhc2UgYSB0aHJlYWQgd2lsbCBiZSBzdGFydGVkIGFuZCB3aWxsIHJlbWFpbgoraW4gdGhlIHBhdXNlZCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB3YWl0IGZvciB0aGUgdGFzayB0byBjb21wbGV0ZQordGhlIHBhdXNlZCBzdGF0ZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YXNrPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPiB0byBwYXVzZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHRhc2sgY291bGQgYmUgcGF1c2VkLgorTVQgc2FmZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFzay1zdGFydCI+PC9hPjxoMz5nc3RfdGFza19zdGFydCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfdGFza19zdGFydCAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+ICp0YXNrPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU3RhcnRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YXNrPC9jb2RlPjwvZW0+LiBUaGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhc2s8L2NvZGU+PC9lbT4gbXVzdCBoYXZlIGEgbG9jayBhc3NvY2lhdGVkIHdpdGggaXQgdXNpbmcKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stc2V0LWxvY2siIHRpdGxlPSJnc3RfdGFza19zZXRfbG9jayAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFza19zZXRfbG9jaygpPC9jb2RlPjwvYT4gb3IgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhc2s8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+IHRvIHN0YXJ0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdGFzayBjb3VsZCBiZSBzdGFydGVkLgorTVQgc2FmZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFzay1zdG9wIj48L2E+PGgzPmdzdF90YXNrX3N0b3AgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3Rhc2tfc3RvcCAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPiAqdGFzazwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1N0b3BzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YXNrPC9jb2RlPjwvZW0+LiBUaGlzIG1ldGhvZCBtZXJlbHkgc2NoZWR1bGVzIHRoZSB0YXNrIHRvIHN0b3AgYW5kCit3aWxsIG5vdCB3YWl0IGZvciB0aGUgdGFzayB0byBoYXZlIGNvbXBsZXRlbHkgc3RvcHBlZC4gVXNlCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLWpvaW4iIHRpdGxlPSJnc3RfdGFza19qb2luICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YXNrX2pvaW4oKTwvY29kZT48L2E+IHRvIHN0b3AgYW5kIHdhaXQgZm9yIGNvbXBsZXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFzazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4gdG8gc3RvcDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHRhc2sgY291bGQgYmUgc3RvcHBlZC4KK01UIHNhZmUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRhc2stam9pbiI+PC9hPjxoMz5nc3RfdGFza19qb2luICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF90YXNrX2pvaW4gICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4gKnRhc2s8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitKb2lucyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFzazwvY29kZT48L2VtPi4gQWZ0ZXIgdGhpcyBjYWxsLCBpdCBpcyBzYWZlIHRvIHVucmVmIHRoZSB0YXNrCithbmQgY2xlYW4gdXAgdGhlIGxvY2sgc2V0IHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1zZXQtbG9jayIgdGl0bGU9ImdzdF90YXNrX3NldF9sb2NrICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YXNrX3NldF9sb2NrKCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxwPgorVGhlIHRhc2sgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHN0b3BwZWQgd2l0aCB0aGlzIGNhbGwuCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gY2Fubm90IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhIHRhc2sgZnVuY3Rpb24gYXMgdGhpcword291bGQgY2F1c2UgYSBkZWFkbG9jay4gVGhlIGZ1bmN0aW9uIHdpbGwgZGV0ZWN0IHRoaXMgYW5kIHByaW50IGEKK2dfd2FybmluZy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YXNrPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPiB0byBqb2luPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdGFzayBjb3VsZCBiZSBqb2luZWQuCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YXNrLWNsZWFudXAtYWxsIj48L2E+PGgzPmdzdF90YXNrX2NsZWFudXBfYWxsICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF90YXNrX2NsZWFudXBfYWxsICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorV2FpdCBmb3IgYWxsIHRhc2tzIHRvIGJlIHN0b3BwZWQuIFRoaXMgaXMgbWFpbmx5IHVzZWQgaW50ZXJuYWxseQordG8gZW5zdXJlIHByb3BlciBjbGVhbnVwIG9mIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBpbiB0ZXN0IHN1aXRlcy4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RUYXNrLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL0dzdFRhc2tQb29sLmh0bWwgYi9kb2NzL2dzdC9odG1sL0dzdFRhc2tQb29sLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYwYzgxYwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2h0bWwvR3N0VGFza1Bvb2wuaHRtbApAQCAtMCwwICsxLDI5MiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdzdFRhc2tQb29sPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sIiB0aXRsZT0iR3N0VHlwZUZpbmQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdFRhc2suaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjR3N0VGFza1Bvb2wuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RUYXNrUG9vbC5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0VGFza1Bvb2wub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9IkdzdFRhc2tQb29sIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0VGFza1Bvb2wudG9wX29mX3BhZ2UiPjwvYT5Hc3RUYXNrUG9vbDwvc3Bhbj48L2gyPgorPHA+R3N0VGFza1Bvb2wg4oCUIFBvb2wgb2YgR1N0cmVhbWVyIHN0cmVhbWluZyB0aHJlYWRzPC9wPgorPC90ZD4KKzx0ZCB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgorPC90cj48L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGEgbmFtZT0iR3N0VGFza1Bvb2wuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKKworc3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCNHc3RUYXNrUG9vbC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0VGFza1Bvb2wiPkdzdFRhc2tQb29sPC9hPjsKK3N0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwjR3N0VGFza1Bvb2xDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RUYXNrUG9vbENsYXNzIj5Hc3RUYXNrUG9vbENsYXNzPC9hPjsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sI0dzdFRhc2tQb29sRnVuY3Rpb24iIHRpdGxlPSJHc3RUYXNrUG9vbEZ1bmN0aW9uICgpIj4qR3N0VGFza1Bvb2xGdW5jdGlvbjwvYT4pICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPiAqZGF0YTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCIgdGl0bGU9IkdzdFRhc2tQb29sIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRhc2tQb29sPC9zcGFuPjwvYT4gKiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCNnc3QtdGFzay1wb29sLW5ldyIgdGl0bGU9ImdzdF90YXNrX3Bvb2xfbmV3ICgpIj5nc3RfdGFza19wb29sX25ldzwvYT4gICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCNnc3QtdGFzay1wb29sLXByZXBhcmUiIHRpdGxlPSJnc3RfdGFza19wb29sX3ByZXBhcmUgKCkiPmdzdF90YXNrX3Bvb2xfcHJlcGFyZTwvYT4gICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sIiB0aXRsZT0iR3N0VGFza1Bvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrUG9vbDwvc3Bhbj48L2E+ICpwb29sPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gKiplcnJvcjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sI2dzdC10YXNrLXBvb2wtcHVzaCIgdGl0bGU9ImdzdF90YXNrX3Bvb2xfcHVzaCAoKSI+Z3N0X3Rhc2tfcG9vbF9wdXNoPC9hPiAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwiIHRpdGxlPSJHc3RUYXNrUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2tQb29sPC9zcGFuPjwvYT4gKnBvb2w8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwjR3N0VGFza1Bvb2xGdW5jdGlvbiIgdGl0bGU9IkdzdFRhc2tQb29sRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrUG9vbEZ1bmN0aW9uPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUVycm9yLVJlcG9ydGluZy5odG1sI0dFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdFcnJvcjwvc3Bhbj48L2E+ICoqZXJyb3I8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCNnc3QtdGFzay1wb29sLWpvaW4iIHRpdGxlPSJnc3RfdGFza19wb29sX2pvaW4gKCkiPmdzdF90YXNrX3Bvb2xfam9pbjwvYT4gICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sIiB0aXRsZT0iR3N0VGFza1Bvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrUG9vbDwvc3Bhbj48L2E+ICpwb29sPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gaWQ8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCNnc3QtdGFzay1wb29sLWNsZWFudXAiIHRpdGxlPSJnc3RfdGFza19wb29sX2NsZWFudXAgKCkiPmdzdF90YXNrX3Bvb2xfY2xlYW51cDwvYT4gICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sIiB0aXRsZT0iR3N0VGFza1Bvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrUG9vbDwvc3Bhbj48L2E+ICpwb29sPC9jb2RlPjwvZW0+KTsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RUYXNrUG9vbC5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+R09iamVjdDwvYT4KKyAgICstLS0tPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KKyAgICAgICAgICstLS0tPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+CisgICAgICAgICAgICAgICArLS0tLUdzdFRhc2tQb29sCis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0VGFza1Bvb2wuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitUaGlzIG9iamVjdCBwcm92aWRlcyBhbiBhYnN0cmFjdGlvbiBmb3IgY3JlYXRpbmcgdGhyZWFkcy4gVGhlIGRlZmF1bHQKK2ltcGxlbWVudGF0aW9uIHVzZXMgYSByZWd1bGFyIEdUaHJlYWRQb29sIHRvIHN0YXJ0IHRhc2tzLgorPC9wPgorPHA+CitTdWJjbGFzc2VzIGNhbiBiZSBtYWRlIHRvIGNyZWF0ZSBjdXN0b20gdGhyZWFkcy4KKzwvcD4KKzxwPgorTGFzdCByZXZpZXdlZCBvbiAyMDA5LTA0LTIzICgwLjEwLjI0KQorPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RUYXNrUG9vbC5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0VGFza1Bvb2wtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RUYXNrUG9vbDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFRhc2tQb29sOzwvcHJlPgorPHA+CitUaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwiIHRpdGxlPSJHc3RUYXNrUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2tQb29sPC9zcGFuPjwvYT4gb2JqZWN0LgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RUYXNrUG9vbENsYXNzIj48L2E+PGgzPnN0cnVjdCBHc3RUYXNrUG9vbENsYXNzPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0VGFza1Bvb2xDbGFzcyB7CisgIEdzdE9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICB2b2lkICAgICAgKCpwcmVwYXJlKSAgKEdzdFRhc2tQb29sICpwb29sLCBHRXJyb3IgKiplcnJvcik7CisgIHZvaWQgICAgICAoKmNsZWFudXApICAoR3N0VGFza1Bvb2wgKnBvb2wpOworCisgIGdwb2ludGVyICAoKnB1c2gpICAgICAoR3N0VGFza1Bvb2wgKnBvb2wsIEdzdFRhc2tQb29sRnVuY3Rpb24gZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEsIEdFcnJvciAqKmVycm9yKTsKKyAgdm9pZCAgICAgICgqam9pbikgICAgIChHc3RUYXNrUG9vbCAqcG9vbCwgZ3BvaW50ZXIgaWQpOworfTsKKzwvcHJlPgorPHA+CitUaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwjR3N0VGFza1Bvb2xDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RUYXNrUG9vbENsYXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFza1Bvb2xDbGFzczwvc3Bhbj48L2E+IG9iamVjdC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHc3RPYmplY3RDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RPYmplY3RDbGFzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdENsYXNzPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFRhc2tQb29sQ2xhc3MucGFyZW50LWNsYXNzIj48L2E+cGFyZW50X2NsYXNzPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGFyZW50IGNsYXNzIHN0cnVjdHVyZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RUYXNrUG9vbENsYXNzLnByZXBhcmUiPjwvYT5wcmVwYXJlPC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wcmVwYXJlIHRoZSB0aHJlYWRwb29sPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFRhc2tQb29sQ2xhc3MuY2xlYW51cCI+PC9hPmNsZWFudXA8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPm1ha2Ugc3VyZSBhbGwgdGhyZWFkcyBhcmUgc3RvcHBlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RUYXNrUG9vbENsYXNzLnB1c2giPjwvYT5wdXNoPC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zdGFydCBhIG5ldyB0aHJlYWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0VGFza1Bvb2xDbGFzcy5qb2luIj48L2E+am9pbjwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+am9pbiBhIHRocmVhZDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFRhc2tQb29sRnVuY3Rpb24iPjwvYT48aDM+R3N0VGFza1Bvb2xGdW5jdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICAoKkdzdFRhc2tQb29sRnVuY3Rpb24pICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPiAqZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1Rhc2sgZnVuY3Rpb24sIHNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCNnc3QtdGFzay1wb29sLXB1c2giIHRpdGxlPSJnc3RfdGFza19wb29sX3B1c2ggKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3Rhc2tfcG9vbF9wdXNoKCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VyIGRhdGEgZm9yIHRoZSB0YXNrIGZ1bmN0aW9uPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YXNrLXBvb2wtbmV3Ij48L2E+PGgzPmdzdF90YXNrX3Bvb2xfbmV3ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCIgdGl0bGU9IkdzdFRhc2tQb29sIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRhc2tQb29sPC9zcGFuPjwvYT4gKiAgICAgICBnc3RfdGFza19wb29sX25ldyAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZSBhIG5ldyBkZWZhdWx0IHRhc2sgcG9vbC4gVGhlIGRlZmF1bHQgdGFzayBwb29sIHdpbGwgdXNlIGEgcmVndWxhcgorR1RocmVhZFBvb2wgZm9yIHRocmVhZHMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCIgdGl0bGU9IkdzdFRhc2tQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFza1Bvb2w8L3NwYW4+PC9hPi4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtdW5yZWYiIHRpdGxlPSJnc3Rfb2JqZWN0X3VucmVmICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9vYmplY3RfdW5yZWYoKTwvY29kZT48L2E+IGFmdGVyIHVzYWdlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YXNrLXBvb2wtcHJlcGFyZSI+PC9hPjxoMz5nc3RfdGFza19wb29sX3ByZXBhcmUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3Rhc2tfcG9vbF9wcmVwYXJlICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCIgdGl0bGU9IkdzdFRhc2tQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFza1Bvb2w8L3NwYW4+PC9hPiAqcG9vbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUVycm9yLVJlcG9ydGluZy5odG1sI0dFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdFcnJvcjwvc3Bhbj48L2E+ICoqZXJyb3I8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitQcmVwYXJlIHRoZSB0YXNrcG9vbCBmb3IgYWNjZXB0aW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sI2dzdC10YXNrLXBvb2wtcHVzaCIgdGl0bGU9ImdzdF90YXNrX3Bvb2xfcHVzaCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFza19wb29sX3B1c2goKTwvY29kZT48L2E+IG9wZXJhdGlvbnMuCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9vbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sIiB0aXRsZT0iR3N0VGFza1Bvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrUG9vbDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVycm9yPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFuIGVycm9yIHJldHVybiBsb2NhdGlvbjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YXNrLXBvb2wtcHVzaCI+PC9hPjxoMz5nc3RfdGFza19wb29sX3B1c2ggKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3Rhc2tfcG9vbF9wdXNoICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCIgdGl0bGU9IkdzdFRhc2tQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFza1Bvb2w8L3NwYW4+PC9hPiAqcG9vbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCNHc3RUYXNrUG9vbEZ1bmN0aW9uIiB0aXRsZT0iR3N0VGFza1Bvb2xGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2tQb29sRnVuY3Rpb248L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gKiplcnJvcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1N0YXJ0IHRoZSBleGVjdXRpb24gb2YgYSBuZXcgdGhyZWFkIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBvb2w8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9vbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sIiB0aXRsZT0iR3N0VGFza1Bvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrUG9vbDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGZ1bmN0aW9uIHRvIGNhbGw8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5kYXRhIHRvIHBhc3MgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoaXMgcGFyYW1ldGVyIGlzIGEgJ3VzZXJfZGF0YScsIGZvciBjYWxsYmFja3M7IG1hbnkgYmluZGluZ3MgY2FuIHBhc3MgTlVMTCBoZXJlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmNsb3N1cmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVycm9yPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnJldHVybiBsb2NhdGlvbiBmb3IgYW4gZXJyb3I8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgdGhlIGdzdF90YXNrX3Bvb2xfam9pbgorZnVuY3Rpb24uIFRoaXMgcG9pbnRlciBjYW4gYmUgTlVMTCwgeW91IG11c3QgY2hlY2sgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVycm9yPC9jb2RlPjwvZW0+IHRvIGRldGVjdAorZXJyb3JzLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YXNrLXBvb2wtam9pbiI+PC9hPjxoMz5nc3RfdGFza19wb29sX2pvaW4gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3Rhc2tfcG9vbF9qb2luICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCIgdGl0bGU9IkdzdFRhc2tQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFza1Bvb2w8L3NwYW4+PC9hPiAqcG9vbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGlkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSm9pbiBhIHRhc2sgYW5kL29yIHJldHVybiBpdCB0byB0aGUgcG9vbC4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkPC9jb2RlPjwvZW0+IGlzIHRoZSBpZCBvYnRhaW5lZCBmcm9tIAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwjZ3N0LXRhc2stcG9vbC1wdXNoIiB0aXRsZT0iZ3N0X3Rhc2tfcG9vbF9wdXNoICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YXNrX3Bvb2xfcHVzaCgpPC9jb2RlPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9vbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sIiB0aXRsZT0iR3N0VGFza1Bvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrUG9vbDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBpZDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YXNrLXBvb2wtY2xlYW51cCI+PC9hPjxoMz5nc3RfdGFza19wb29sX2NsZWFudXAgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3Rhc2tfcG9vbF9jbGVhbnVwICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCIgdGl0bGU9IkdzdFRhc2tQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFza1Bvb2w8L3NwYW4+PC9hPiAqcG9vbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1dhaXQgZm9yIGFsbCB0YXNrcyB0byBiZSBzdG9wcGVkLiBUaGlzIGlzIG1haW5seSB1c2VkIGludGVybmFsbHkKK3RvIGVuc3VyZSBwcm9wZXIgY2xlYW51cCBvZiBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgaW4gdGVzdCBzdWl0ZXMuCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBvb2w8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCIgdGl0bGU9IkdzdFRhc2tQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFza1Bvb2w8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjQ8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0VGFza1Bvb2wuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvR3N0VHlwZUZpbmRGYWN0b3J5Lmh0bWwgYi9kb2NzL2dzdC9odG1sL0dzdFR5cGVGaW5kRmFjdG9yeS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NmFjMWIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dzdC9odG1sL0dzdFR5cGVGaW5kRmFjdG9yeS5odG1sCkBAIC0wLDAgKzEsMjQ1IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0VHlwZUZpbmRGYWN0b3J5PC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwiIHRpdGxlPSJHc3RUeXBlRmluZCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwiIHRpdGxlPSJHc3RVcmlIYW5kbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNHc3RUeXBlRmluZEZhY3Rvcnkuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RUeXBlRmluZEZhY3RvcnkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFR5cGVGaW5kRmFjdG9yeS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iR3N0VHlwZUZpbmRGYWN0b3J5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0VHlwZUZpbmRGYWN0b3J5LnRvcF9vZl9wYWdlIj48L2E+R3N0VHlwZUZpbmRGYWN0b3J5PC9zcGFuPjwvaDI+Cis8cD5Hc3RUeXBlRmluZEZhY3Rvcnkg4oCUIEluZm9ybWF0aW9uIGFib3V0IHJlZ2lzdGVyZWQgdHlwZWZpbmQgZnVuY3Rpb25zPC9wPgorPC90ZD4KKzx0ZCB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgorPC90cj48L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGEgbmFtZT0iR3N0VHlwZUZpbmRGYWN0b3J5LnN5bm9wc2lzIj48L2E+PGgyPlN5bm9wc2lzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7CisKK3N0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sI0dzdFR5cGVGaW5kRmFjdG9yeS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0VHlwZUZpbmRGYWN0b3J5Ij5Hc3RUeXBlRmluZEZhY3Rvcnk8L2E+OworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPiAqICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCNnc3QtdHlwZS1maW5kLWZhY3RvcnktZ2V0LWxpc3QiIHRpdGxlPSJnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2xpc3QgKCkiPmdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfbGlzdDwvYT4gICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCNnc3QtdHlwZS1maW5kLWZhY3RvcnktZ2V0LWV4dGVuc2lvbnMiIHRpdGxlPSJnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2V4dGVuc2lvbnMgKCkiPmdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfZXh0ZW5zaW9uczwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHlwZUZpbmRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RUeXBlRmluZEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZEZhY3Rvcnk8L3NwYW4+PC9hPiAqZmFjdG9yeTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCNnc3QtdHlwZS1maW5kLWZhY3RvcnktZ2V0LWNhcHMiIHRpdGxlPSJnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2NhcHMgKCkiPmdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfY2FwczwvYT4gICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kRmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kRmFjdG9yeTwvc3Bhbj48L2E+ICpmYWN0b3J5PC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sI2dzdC10eXBlLWZpbmQtZmFjdG9yeS1jYWxsLWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2NhbGxfZnVuY3Rpb24gKCkiPmdzdF90eXBlX2ZpbmRfZmFjdG9yeV9jYWxsX2Z1bmN0aW9uPC9hPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kRmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kRmFjdG9yeTwvc3Bhbj48L2E+ICpmYWN0b3J5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZCIgdGl0bGU9InN0cnVjdCBHc3RUeXBlRmluZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kPC9zcGFuPjwvYT4gKmZpbmQ8L2NvZGU+PC9lbT4pOworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdFR5cGVGaW5kRmFjdG9yeS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+R09iamVjdDwvYT4KKyAgICstLS0tPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KKyAgICAgICAgICstLS0tPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+CisgICAgICAgICAgICAgICArLS0tLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj5Hc3RQbHVnaW5GZWF0dXJlPC9hPgorICAgICAgICAgICAgICAgICAgICAgKy0tLS1Hc3RUeXBlRmluZEZhY3RvcnkKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RUeXBlRmluZEZhY3RvcnkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitUaGVzZSBmdW5jdGlvbnMgYWxsb3cgcXVlcnlpbmcgaW5mb3JtYXRpb25zIGFib3V0IHJlZ2lzdGVyZWQgdHlwZWZpbmQKK2Z1bmN0aW9ucy4gSG93IHRvIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgdGhlc2UgZnVuY3Rpb25zIGlzIGRlc2NyaWJlZCBpbgordGhlIHNlY3Rpb24gPEdUS0RPQ0xJTksgSFJFRj0iZ3N0cmVhbWVyLVdyaXRpbmctdHlwZWZpbmQtZnVuY3Rpb25zIj4KKyJXcml0aW5nIHR5cGVmaW5kIGZ1bmN0aW9ucyI8L0dUS0RPQ0xJTks+LgorPC9wPgorPHA+Cis8L3A+Cis8ZGl2IGNsYXNzPSJleGFtcGxlIj4KKzxhIG5hbWU9ImlkNDk0OTY3Ij48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5FeGFtcGxlwqAxNC7CoGhvdyB0byB3cml0ZSBhIHNpbXBsZSB0eXBlZmluZGVyPC9iPjwvcD4KKzxkaXYgY2xhc3M9ImV4YW1wbGUtY29udGVudHMiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KKyAgdHlwZWRlZiBzdHJ1Y3QgeworICAgIGd1aW50OCAqZGF0YTsKKyAgICBndWludCBzaXplOworICAgIGd1aW50IHByb2JhYmlsaXR5OworICAgIEdzdENhcHMgKmRhdGE7CisgIH0gTXlUeXBlRmluZDsKKyAgc3RhdGljIHZvaWQKKyAgbXlfcGVlayAoZ3BvaW50ZXIgZGF0YSwgZ2ludDY0IG9mZnNldCwgZ3VpbnQgc2l6ZSkKKyAgeworICAgIE15VHlwZUZpbmQgKmZpbmQgPSAoTXlUeXBlRmluZCAqKSBkYXRhOworICAgIGlmIChvZmZzZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IG9mZnNldCArIHNpemUgJmx0Oz0gZmluZC0mZ3Q7c2l6ZSkgeworICAgICAgcmV0dXJuIGZpbmQtJmd0O2RhdGEgKyBvZmZzZXQ7CisgICAgfQorICAgIHJldHVybiBOVUxMOworICB9CisgIHN0YXRpYyB2b2lkCisgIG15X3N1Z2dlc3QgKGdwb2ludGVyIGRhdGEsIGd1aW50IHByb2JhYmlsaXR5LCBHc3RDYXBzICpjYXBzKQorICB7CisgICAgTXlUeXBlRmluZCAqZmluZCA9IChNeVR5cGVGaW5kICopIGRhdGE7CisgICAgaWYgKHByb2JhYmlsaXR5ICZndDsgZmluZC0mZ3Q7cHJvYmFiaWxpdHkpIHsKKyAgICAgIGZpbmQtJmd0O3Byb2JhYmlsaXR5ID0gcHJvYmFiaWxpdHk7CisgICAgICBnc3RfY2Fwc19yZXBsYWNlICgmYW1wO2ZpbmQtJmd0O2NhcHMsIGNhcHMpOworICAgIH0KKyAgfQorICBzdGF0aWMgR3N0Q2FwcyAqCisgIGZpbmRfdHlwZSAoZ3VpbnQ4ICpkYXRhLCBndWludCBzaXplKQorICB7CisgICAgR0xpc3QgKndhbGssICp0eXBlX2xpc3Q7CisgICAgTXlUeXBlRmluZCBmaW5kID0ge2RhdGEsIHNpemUsIDAsIE5VTEx9OworICAgIEdzdFR5cGVGaW5kIGdzdF9maW5kID0ge215X3BlZWssIG15X3N1Z2dlc3QsICZhbXA7ZmluZCwgfTsKKyAgICB3YWxrID0gdHlwZV9saXN0ID0gZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9saXN0ICgpOworICAgIHdoaWxlICh3YWxrKSB7CisgICAgICBHc3RUeXBlRmluZEZhY3RvcnkgKmZhY3RvcnkgPSBHU1RfVFlQRV9GSU5EX0ZBQ1RPUlkgKHdhbGstJmd0O2RhdGEpOworICAgICAgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKQorICAgICAgZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2NhbGxfZnVuY3Rpb24gKGZhY3RvcnksICZhbXA7Z3N0X2ZpbmQpOworICAgIH0KKyAgICBnX2xpc3RfZnJlZSAodHlwZV9saXN0KTsKKyAgICByZXR1cm4gZmluZC5jYXBzOworICB9OworICA8L3ByZT48L2Rpdj4KKzwvZGl2PgorPHA+PGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj4KKzwvcD4KKzxwPgorVGhlIGFib3ZlIGV4YW1wbGUgc2hvd3MgaG93IHRvIHdyaXRlIGEgdmVyeSBzaW1wbGUgdHlwZWZpbmRlciB0aGF0CitpZGVudGlmaWVzIHRoZSBnaXZlbiBkYXRhLiBZb3UgY2FuIGdldCBxdWl0ZSBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkIHRoYW4KK3RoYXQgdGhvdWdoLgorPC9wPgorPHA+CitMYXN0IHJldmlld2VkIG9uIDIwMDUtMTEtMDkgKDAuOS40KQorPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RUeXBlRmluZEZhY3RvcnkuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFR5cGVGaW5kRmFjdG9yeS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFR5cGVGaW5kRmFjdG9yeTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFR5cGVGaW5kRmFjdG9yeTs8L3ByZT4KKzxwPgorT2JqZWN0IHRoYXQgc3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IGEgdHlwZWZpbmQgZnVuY3Rpb24uCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10eXBlLWZpbmQtZmFjdG9yeS1nZXQtbGlzdCI+PC9hPjxoMz5nc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2xpc3QgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdMaXN0PC9zcGFuPjwvYT4gKiAgICAgICAgICAgICBnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2xpc3QgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIGxpc3Qgb2YgYWxsIHJlZ2lzdGVyZWQgdHlwZWZpbmQgZmFjdG9yaWVzLiBZb3UgbXVzdCBmcmVlIHRoZQorbGlzdCB1c2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI2dzdC1wbHVnaW4tZmVhdHVyZS1saXN0LWZyZWUiIHRpdGxlPSJnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitUaGUgcmV0dXJuZWQgZmFjdG9yaWVzIGFyZSBzb3J0ZWQgYnkgaGlnaGVzdCByYW5rIGZpcnN0LCBhbmQgdGhlbiBieQorZmFjdG9yeSBuYW1lLiAoYmVoYXZpb3VyIGNoYW5nZSBzaW5jZSAwLjEwLjI2KQorPC9wPgorPHA+CitGcmVlLWZ1bmN0aW9uOiBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbGlzdCBvZiBhbGwKK3JlZ2lzdGVyZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0VHlwZUZpbmRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmRGYWN0b3J5PC9zcGFuPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gR3N0LlR5cGVGaW5kRmFjdG9yeV08L3NwYW4+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXR5cGUtZmluZC1mYWN0b3J5LWdldC1leHRlbnNpb25zIj48L2E+PGgzPmdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfZXh0ZW5zaW9ucyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiogICAgICAgICAgICBnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2V4dGVuc2lvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHlwZUZpbmRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RUeXBlRmluZEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZEZhY3Rvcnk8L3NwYW4+PC9hPiAqZmFjdG9yeTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIGV4dGVuc2lvbnMgYXNzb2NpYXRlZCB3aXRoIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0VHlwZUZpbmRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmRGYWN0b3J5PC9zcGFuPjwvYT4uIFRoZSByZXR1cm5lZAorYXJyYXkgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiBJZiB5b3UgbmVlZCB0byBjaGFuZ2Ugc3R1ZmYgaW4gaXQsIHlvdSBzaG91bGQKK2NvcHkgaXQgdXNpbmcgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdHJpbmctVXRpbGl0eS1GdW5jdGlvbnMuaHRtbCNnLXN0cmR1cHYiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19zdHJkdXB2KCk8L2NvZGU+PC9hPi4gIFRoaXMgZnVuY3Rpb24gbWF5IHJldHVybiBOVUxMIHRvIGluZGljYXRlCithIDAtbGVuZ3RoIGxpc3QuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmFjdG9yeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kRmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kRmFjdG9yeTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hCitOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2YgZXh0ZW5zaW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBmYWN0b3J5LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gemVyby10ZXJtaW5hdGVkPTFdWzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IHV0ZjhdPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXR5cGUtZmluZC1mYWN0b3J5LWdldC1jYXBzIj48L2E+PGgzPmdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfY2FwcyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPiAqICAgICAgICAgICBnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2NhcHMgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kRmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kRmFjdG9yeTwvc3Bhbj48L2E+ICpmYWN0b3J5PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IGFzc29jaWF0ZWQgd2l0aCBhIHR5cGVmaW5kIGZhY3RvcnkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmFjdG9yeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kRmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kRmFjdG9yeTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZhY3RvcnkuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdHlwZS1maW5kLWZhY3RvcnktY2FsbC1mdW5jdGlvbiI+PC9hPjxoMz5nc3RfdHlwZV9maW5kX2ZhY3RvcnlfY2FsbF9mdW5jdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfdHlwZV9maW5kX2ZhY3RvcnlfY2FsbF9mdW5jdGlvbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kRmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kRmFjdG9yeTwvc3Bhbj48L2E+ICpmYWN0b3J5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZCIgdGl0bGU9InN0cnVjdCBHc3RUeXBlRmluZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kPC9zcGFuPjwvYT4gKmZpbmQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDYWxscyB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dzdFR5cGVGaW5kRnVuY3Rpb24iIHRpdGxlPSJHc3RUeXBlRmluZEZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmRGdW5jdGlvbjwvc3Bhbj48L2E+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZhY3RvcnkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmFjdG9yeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kRmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kRmFjdG9yeTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpbmQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBwcm9wZXJseSBzZXR1cCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmQiIHRpdGxlPSJzdHJ1Y3QgR3N0VHlwZUZpbmQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZDwvc3Bhbj48L2E+IGVudHJ5LiBUaGUgZ2V0X2RhdGEKK2FuZCBzdWdnZXN0X3R5cGUgbWVtYmVycyBtdXN0IGJlIHNldC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9hbm5vdGF0aW9uLWdsb3NzYXJ5Lmh0bWwgYi9kb2NzL2dzdC9odG1sL2Fubm90YXRpb24tZ2xvc3NhcnkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDUyYzBlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9nc3QvaHRtbC9hbm5vdGF0aW9uLWdsb3NzYXJ5Lmh0bWwKQEAgLTAsMCArMSwxMDEgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5Bbm5vdGF0aW9uIEdsb3NzYXJ5PC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImFwaS1pbmRleC1kZXByZWNhdGVkLmh0bWwiIHRpdGxlPSJJbmRleCBvZiBkZXByZWNhdGVkIEFQSSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iYXBpLWluZGV4LWRlcHJlY2F0ZWQuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD7CoDwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPsKgPC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjZ2xzTyI+TzwvYT4KKyAgICAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjZ2xzQSI+QTwvYT4KKyAgICAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjZ2xzSSI+STwvYT4KKyAgICAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjZ2xzQyI+QzwvYT4KKyAgICAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjZ2xzVCI+VDwvYT4KKyAgICAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjZ2xzQSI+QTwvYT4KKyAgICAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjZ2xzRSI+RTwvYT4KKyAgICAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjZ2xzSSI+STwvYT4KKyAgICAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjZ2xzVCI+VDwvYT4KKyAgICAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjZ2xzUyI+UzwvYT4KKyAgICAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjZ2xzVCI+VDwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJnbG9zc2FyeSI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIj4KKzxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3NhcnkiPjwvYT5Bbm5vdGF0aW9uIEdsb3NzYXJ5PC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KKzxhIG5hbWU9Imdsc08iPjwvYT48aDMgY2xhc3M9InRpdGxlIj5PPC9oMz4KKzxkdD4KKzxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3N0ZXJtLW91dCI+PC9hPm91dDwvZHQ+Cis8ZGQ+PHA+UGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyA8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+LjwvcD48L2RkPgorPGEgbmFtZT0iZ2xzQSI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkE8L2gzPgorPGR0PgorPGEgbmFtZT0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0tYWxsb3ctbm9uZSI+PC9hPmFsbG93LW5vbmU8L2R0PgorPGRkPjxwPk5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuPC9wPjwvZGQ+Cis8YSBuYW1lPSJnbHNJIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+STwvaDM+Cis8ZHQ+Cis8YSBuYW1lPSJhbm5vdGF0aW9uLWdsb3NzdGVybS1pbm91dCI+PC9hPmlub3V0PC9kdD4KKzxkZD48cD5QYXJhbWV0ZXIgZm9yIGlucHV0IGFuZCBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPi48L3A+PC9kZD4KKzxhIG5hbWU9Imdsc0MiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5DPC9oMz4KKzxkdD4KKzxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3N0ZXJtLWNsb3N1cmUiPjwvYT5jbG9zdXJlPC9kdD4KKzxkZD48cD5UaGlzIHBhcmFtZXRlciBpcyBhICd1c2VyX2RhdGEnLCBmb3IgY2FsbGJhY2tzOyBtYW55IGJpbmRpbmdzIGNhbiBwYXNzIE5VTEwgaGVyZS48L3A+PC9kZD4KKzxhIG5hbWU9Imdsc1QiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5UPC9oMz4KKzxkdD4KKzxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3N0ZXJtLXRyYW5zZmVyJTIwbm9uZSI+PC9hPnRyYW5zZmVyIG5vbmU8L2R0PgorPGRkPjxwPkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLjwvcD48L2RkPgorPGEgbmFtZT0iZ2xzQSI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkE8L2gzPgorPGR0PgorPGEgbmFtZT0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0tYXJyYXkiPjwvYT5hcnJheTwvZHQ+Cis8ZGQ+PHA+UGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy48L3A+PC9kZD4KKzxhIG5hbWU9Imdsc0UiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5FPC9oMz4KKzxkdD4KKzxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3N0ZXJtLWVsZW1lbnQtdHlwZSI+PC9hPmVsZW1lbnQtdHlwZTwvZHQ+Cis8ZGQ+PHA+R2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy48L3A+PC9kZD4KKzxhIG5hbWU9Imdsc0kiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5JPC9oMz4KKzxkdD4KKzxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3N0ZXJtLWluIj48L2E+aW48L2R0PgorPGRkPjxwPlBhcmFtZXRlciBmb3IgaW5wdXQuIERlZmF1bHQgaXMgPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPi48L3A+PC9kZD4KKzxhIG5hbWU9Imdsc1QiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5UPC9oMz4KKzxkdD4KKzxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3N0ZXJtLXRyYW5zZmVyJTIwY29udGFpbmVyIj48L2E+dHJhbnNmZXIgY29udGFpbmVyPC9kdD4KKzxkZD48cD5GcmVlIGRhdGEgY29udGFpbmVyIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuPC9wPjwvZGQ+Cis8ZHQ+Cis8YSBuYW1lPSJhbm5vdGF0aW9uLWdsb3NzdGVybS10cmFuc2ZlciUyMGZ1bGwiPjwvYT50cmFuc2ZlciBmdWxsPC9kdD4KKzxkZD48cD5GcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS48L3A+PC9kZD4KKzxhIG5hbWU9Imdsc1MiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5TPC9oMz4KKzxkdD4KKzxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3N0ZXJtLXNjb3BlJTIwY2FsbCI+PC9hPnNjb3BlIGNhbGw8L2R0PgorPGRkPjxwPlRoZSBjYWxsYmFjayBpcyB2YWxpZCBvbmx5IGR1cmluZyB0aGUgY2FsbCB0byB0aGUgbWV0aG9kLjwvcD48L2RkPgorPGEgbmFtZT0iZ2xzVCI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPlQ8L2gzPgorPGR0PgorPGEgbmFtZT0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0tdHlwZSI+PC9hPnR5cGU8L2R0PgorPGRkPjxwPk92ZXJyaWRlIHRoZSBwYXJzZWQgQyB0eXBlIHdpdGggZ2l2ZW4gdHlwZTwvcD48L2RkPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9hcGktaW5kZXgtZGVwcmVjYXRlZC5odG1sIGIvZG9jcy9nc3QvaHRtbC9hcGktaW5kZXgtZGVwcmVjYXRlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZmIwYjcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dzdC9odG1sL2FwaS1pbmRleC1kZXByZWNhdGVkLmh0bWwKQEAgLTAsMCArMSwzMSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkluZGV4IG9mIGRlcHJlY2F0ZWQgQVBJPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImFwaS1pbmRleC1mdWxsLmh0bWwiIHRpdGxlPSJBUEkgSW5kZXgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJhbm5vdGF0aW9uLWdsb3NzYXJ5Lmh0bWwiIHRpdGxlPSJBbm5vdGF0aW9uIEdsb3NzYXJ5Ij4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj48dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iYXBpLWluZGV4LWZ1bGwuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD7CoDwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iYW5ub3RhdGlvbi1nbG9zc2FyeS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxkaXYgY2xhc3M9ImluZGV4Ij4KKzxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiPgorPGEgbmFtZT0iYXBpLWluZGV4LWRlcHJlY2F0ZWQiPjwvYT5JbmRleCBvZiBkZXByZWNhdGVkIEFQSTwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Cis8YSBuYW1lPSJpZHgiPjwvYT4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvYXBpLWluZGV4LWZ1bGwuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvYXBpLWluZGV4LWZ1bGwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWJmYTZmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9nc3QvaHRtbC9hcGktaW5kZXgtZnVsbC5odG1sCkBAIC0wLDAgKzEsNzI2NSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkFQSSBJbmRleDwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItaGllcmFyY2h5Lmh0bWwiIHRpdGxlPSJPYmplY3QgSGllcmFyY2h5Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iYXBpLWluZGV4LWRlcHJlY2F0ZWQuaHRtbCIgdGl0bGU9IkluZGV4IG9mIGRlcHJlY2F0ZWQgQVBJIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItaGllcmFyY2h5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+wqA8L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImFwaS1pbmRleC1kZXByZWNhdGVkLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhBIj5BPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhCIj5CPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhDIj5DPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhEIj5EPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhFIj5FPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhGIj5GPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhHIj5HPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhJIj5JPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhMIj5MPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhNIj5NPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhOIj5OPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhPIj5PPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhQIj5QPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhRIj5RPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhSIj5SPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhTIj5TPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhUIj5UPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhVIj5VPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhWIj5WPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhXIj5XPC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9ImluZGV4Ij4KKzxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiPgorPGEgbmFtZT0iYXBpLWluZGV4LWZ1bGwiPjwvYT5BUEkgSW5kZXg8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgorPGEgbmFtZT0iaWR4Ij48L2E+PGEgbmFtZT0iaWR4QSI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkE8L2gzPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEFjdGl2YXRlTW9kZSIgdGl0bGU9ImVudW0gR3N0QWN0aXZhdGVNb2RlIj5Hc3RBY3RpdmF0ZU1vZGU8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RBbGxvY2F0b3IiIHRpdGxlPSJHc3RBbGxvY2F0b3IiPkdzdEFsbG9jYXRvcjwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij5Hc3RNZW1vcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1hbGxvY2F0b3ItYWxsb2MiIHRpdGxlPSJnc3RfYWxsb2NhdG9yX2FsbG9jICgpIj5nc3RfYWxsb2NhdG9yX2FsbG9jPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+R3N0TWVtb3J5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNnc3QtYWxsb2NhdG9yLWZpbmQiIHRpdGxlPSJnc3RfYWxsb2NhdG9yX2ZpbmQgKCkiPmdzdF9hbGxvY2F0b3JfZmluZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjZ3N0LWFsbG9jYXRvci1yZWdpc3RlciIgdGl0bGU9ImdzdF9hbGxvY2F0b3JfcmVnaXN0ZXIgKCkiPmdzdF9hbGxvY2F0b3JfcmVnaXN0ZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij5Hc3RNZW1vcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1hbGxvY2F0b3Itc2V0LWRlZmF1bHQiIHRpdGxlPSJnc3RfYWxsb2NhdG9yX3NldF9kZWZhdWx0ICgpIj5nc3RfYWxsb2NhdG9yX3NldF9kZWZhdWx0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+R3N0TWVtb3J5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHU1QtQUxMT0NBVE9SLVNZU01FTTpDQVBTIiB0aXRsZT0iR1NUX0FMTE9DQVRPUl9TWVNNRU0iPkdTVF9BTExPQ0FUT1JfU1lTTUVNPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+R3N0TWVtb3J5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI0dzdEFsbG9jVHJhY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0QWxsb2NUcmFjZSI+R3N0QWxsb2NUcmFjZTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwiIHRpdGxlPSJHc3RUcmFjZSI+R3N0VHJhY2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjR3N0QWxsb2NUcmFjZUZsYWdzIiB0aXRsZT0iZW51bSBHc3RBbGxvY1RyYWNlRmxhZ3MiPkdzdEFsbG9jVHJhY2VGbGFnczwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sIiB0aXRsZT0iR3N0VHJhY2UiPkdzdFRyYWNlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI2dzdC1hbGxvYy10cmFjZS1hdmFpbGFibGUiIHRpdGxlPSJnc3RfYWxsb2NfdHJhY2VfYXZhaWxhYmxlICgpIj5nc3RfYWxsb2NfdHJhY2VfYXZhaWxhYmxlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sIiB0aXRsZT0iR3N0VHJhY2UiPkdzdFRyYWNlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI2dzdC1hbGxvYy10cmFjZS1mcmVlIiB0aXRsZT0iZ3N0X2FsbG9jX3RyYWNlX2ZyZWUoKSI+Z3N0X2FsbG9jX3RyYWNlX2ZyZWU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwiIHRpdGxlPSJHc3RUcmFjZSI+R3N0VHJhY2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LWFsbG9jLXRyYWNlLWdldCIgdGl0bGU9ImdzdF9hbGxvY190cmFjZV9nZXQgKCkiPmdzdF9hbGxvY190cmFjZV9nZXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwiIHRpdGxlPSJHc3RUcmFjZSI+R3N0VHJhY2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LWFsbG9jLXRyYWNlLWxpc3QiIHRpdGxlPSJnc3RfYWxsb2NfdHJhY2VfbGlzdCAoKSI+Z3N0X2FsbG9jX3RyYWNlX2xpc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwiIHRpdGxlPSJHc3RUcmFjZSI+R3N0VHJhY2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LWFsbG9jLXRyYWNlLWxpdmUtYWxsIiB0aXRsZT0iZ3N0X2FsbG9jX3RyYWNlX2xpdmVfYWxsICgpIj5nc3RfYWxsb2NfdHJhY2VfbGl2ZV9hbGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwiIHRpdGxlPSJHc3RUcmFjZSI+R3N0VHJhY2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LWFsbG9jLXRyYWNlLW5ldyIgdGl0bGU9ImdzdF9hbGxvY190cmFjZV9uZXcoKSI+Z3N0X2FsbG9jX3RyYWNlX25ldzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCIgdGl0bGU9IkdzdFRyYWNlIj5Hc3RUcmFjZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtYWxsb2MtdHJhY2UtcHJpbnQiIHRpdGxlPSJnc3RfYWxsb2NfdHJhY2VfcHJpbnQgKCkiPmdzdF9hbGxvY190cmFjZV9wcmludDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCIgdGl0bGU9IkdzdFRyYWNlIj5Hc3RUcmFjZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtYWxsb2MtdHJhY2UtcHJpbnQtYWxsIiB0aXRsZT0iZ3N0X2FsbG9jX3RyYWNlX3ByaW50X2FsbCAoKSI+Z3N0X2FsbG9jX3RyYWNlX3ByaW50X2FsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCIgdGl0bGU9IkdzdFRyYWNlIj5Hc3RUcmFjZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtYWxsb2MtdHJhY2UtcHJpbnQtbGl2ZSIgdGl0bGU9ImdzdF9hbGxvY190cmFjZV9wcmludF9saXZlICgpIj5nc3RfYWxsb2NfdHJhY2VfcHJpbnRfbGl2ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCIgdGl0bGU9IkdzdFRyYWNlIj5Hc3RUcmFjZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtYWxsb2MtdHJhY2UtcmVnaXN0ZXIiIHRpdGxlPSJnc3RfYWxsb2NfdHJhY2VfcmVnaXN0ZXIoKSI+Z3N0X2FsbG9jX3RyYWNlX3JlZ2lzdGVyPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sIiB0aXRsZT0iR3N0VHJhY2UiPkdzdFRyYWNlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI2dzdC1hbGxvYy10cmFjZS1zZXQtZmxhZ3MiIHRpdGxlPSJnc3RfYWxsb2NfdHJhY2Vfc2V0X2ZsYWdzICgpIj5nc3RfYWxsb2NfdHJhY2Vfc2V0X2ZsYWdzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sIiB0aXRsZT0iR3N0VHJhY2UiPkdzdFRyYWNlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI2dzdC1hbGxvYy10cmFjZS1zZXQtZmxhZ3MtYWxsIiB0aXRsZT0iZ3N0X2FsbG9jX3RyYWNlX3NldF9mbGFnc19hbGwgKCkiPmdzdF9hbGxvY190cmFjZV9zZXRfZmxhZ3NfYWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sIiB0aXRsZT0iR3N0VHJhY2UiPkdzdFRyYWNlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0QXNzb2NGbGFncyIgdGl0bGU9ImVudW0gR3N0QXNzb2NGbGFncyI+R3N0QXNzb2NGbGFnczwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+R3N0SW5kZXg8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjR3N0QXRvbWljUXVldWUiIHRpdGxlPSJHc3RBdG9taWNRdWV1ZSI+R3N0QXRvbWljUXVldWU8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sIiB0aXRsZT0iR3N0QXRvbWljUXVldWUiPkdzdEF0b21pY1F1ZXVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI2dzdC1hdG9taWMtcXVldWUtbGVuZ3RoIiB0aXRsZT0iZ3N0X2F0b21pY19xdWV1ZV9sZW5ndGggKCkiPmdzdF9hdG9taWNfcXVldWVfbGVuZ3RoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sIiB0aXRsZT0iR3N0QXRvbWljUXVldWUiPkdzdEF0b21pY1F1ZXVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI2dzdC1hdG9taWMtcXVldWUtbmV3IiB0aXRsZT0iZ3N0X2F0b21pY19xdWV1ZV9uZXcgKCkiPmdzdF9hdG9taWNfcXVldWVfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sIiB0aXRsZT0iR3N0QXRvbWljUXVldWUiPkdzdEF0b21pY1F1ZXVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI2dzdC1hdG9taWMtcXVldWUtcGVlayIgdGl0bGU9ImdzdF9hdG9taWNfcXVldWVfcGVlayAoKSI+Z3N0X2F0b21pY19xdWV1ZV9wZWVrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sIiB0aXRsZT0iR3N0QXRvbWljUXVldWUiPkdzdEF0b21pY1F1ZXVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI2dzdC1hdG9taWMtcXVldWUtcG9wIiB0aXRsZT0iZ3N0X2F0b21pY19xdWV1ZV9wb3AgKCkiPmdzdF9hdG9taWNfcXVldWVfcG9wPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sIiB0aXRsZT0iR3N0QXRvbWljUXVldWUiPkdzdEF0b21pY1F1ZXVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI2dzdC1hdG9taWMtcXVldWUtcHVzaCIgdGl0bGU9ImdzdF9hdG9taWNfcXVldWVfcHVzaCAoKSI+Z3N0X2F0b21pY19xdWV1ZV9wdXNoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sIiB0aXRsZT0iR3N0QXRvbWljUXVldWUiPkdzdEF0b21pY1F1ZXVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI2dzdC1hdG9taWMtcXVldWUtcmVmIiB0aXRsZT0iZ3N0X2F0b21pY19xdWV1ZV9yZWYgKCkiPmdzdF9hdG9taWNfcXVldWVfcmVmPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sIiB0aXRsZT0iR3N0QXRvbWljUXVldWUiPkdzdEF0b21pY1F1ZXVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI2dzdC1hdG9taWMtcXVldWUtdW5yZWYiIHRpdGxlPSJnc3RfYXRvbWljX3F1ZXVlX3VucmVmICgpIj5nc3RfYXRvbWljX3F1ZXVlX3VucmVmPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sIiB0aXRsZT0iR3N0QXRvbWljUXVldWUiPkdzdEF0b21pY1F1ZXVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGEgbmFtZT0iaWR4QiI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkI8L2gzPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI0dzdEJpbi1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0QmluIj5Hc3RCaW48L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj5Hc3RCaW48L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjR3N0QmluLWRvLWxhdGVuY3kiIHRpdGxlPSdUaGUgImRvLWxhdGVuY3kiIHNpZ25hbCc+R3N0QmluOjpkby1sYXRlbmN5PC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNHc3RCaW4tZWxlbWVudC1hZGRlZCIgdGl0bGU9J1RoZSAiZWxlbWVudC1hZGRlZCIgc2lnbmFsJz5Hc3RCaW46OmVsZW1lbnQtYWRkZWQ8L2E+LCBvYmplY3Qgc2lnbmFsIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+R3N0QmluPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI0dzdEJpbi1lbGVtZW50LXJlbW92ZWQiIHRpdGxlPSdUaGUgImVsZW1lbnQtcmVtb3ZlZCIgc2lnbmFsJz5Hc3RCaW46OmVsZW1lbnQtcmVtb3ZlZDwvYT4sIG9iamVjdCBzaWduYWwgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj5Hc3RCaW48L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjR3N0QmluLS1hc3luYy1oYW5kbGluZyIgdGl0bGU9J1RoZSAiYXN5bmMtaGFuZGxpbmciIHByb3BlcnR5Jz5Hc3RCaW46YXN5bmMtaGFuZGxpbmc8L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj5Hc3RCaW48L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjR3N0QmluLS1tZXNzYWdlLWZvcndhcmQiIHRpdGxlPSdUaGUgIm1lc3NhZ2UtZm9yd2FyZCIgcHJvcGVydHknPkdzdEJpbjptZXNzYWdlLWZvcndhcmQ8L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj5Hc3RCaW48L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjR3N0QmluQ2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0QmluQ2xhc3MiPkdzdEJpbkNsYXNzPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+R3N0QmluPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI0dzdEJpbkZsYWdzIiB0aXRsZT0iZW51bSBHc3RCaW5GbGFncyI+R3N0QmluRmxhZ3M8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+R3N0QmluPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI2dzdC1iaW4tYWRkIiB0aXRsZT0iZ3N0X2Jpbl9hZGQgKCkiPmdzdF9iaW5fYWRkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj5Hc3RCaW48L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjZ3N0LWJpbi1hZGQtbWFueSIgdGl0bGU9ImdzdF9iaW5fYWRkX21hbnkgKCkiPmdzdF9iaW5fYWRkX21hbnk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNHU1QtQklOLUNISUxEUkVOOkNBUFMiIHRpdGxlPSJHU1RfQklOX0NISUxEUkVOKCkiPkdTVF9CSU5fQ0hJTERSRU48L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNHU1QtQklOLUNISUxEUkVOLUNPT0tJRTpDQVBTIiB0aXRsZT0iR1NUX0JJTl9DSElMRFJFTl9DT09LSUUoKSI+R1NUX0JJTl9DSElMRFJFTl9DT09LSUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWZpbmQtdW5saW5rZWQtcGFkIiB0aXRsZT0iZ3N0X2Jpbl9maW5kX3VubGlua2VkX3BhZCAoKSI+Z3N0X2Jpbl9maW5kX3VubGlua2VkX3BhZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+R3N0QmluPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI2dzdC1iaW4tZ2V0LWJ5LWludGVyZmFjZSIgdGl0bGU9ImdzdF9iaW5fZ2V0X2J5X2ludGVyZmFjZSAoKSI+Z3N0X2Jpbl9nZXRfYnlfaW50ZXJmYWNlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj5Hc3RCaW48L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjZ3N0LWJpbi1nZXQtYnktbmFtZSIgdGl0bGU9ImdzdF9iaW5fZ2V0X2J5X25hbWUgKCkiPmdzdF9iaW5fZ2V0X2J5X25hbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWdldC1ieS1uYW1lLXJlY3Vyc2UtdXAiIHRpdGxlPSJnc3RfYmluX2dldF9ieV9uYW1lX3JlY3Vyc2VfdXAgKCkiPmdzdF9iaW5fZ2V0X2J5X25hbWVfcmVjdXJzZV91cDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+R3N0QmluPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI2dzdC1iaW4taXRlcmF0ZS1hbGwtYnktaW50ZXJmYWNlIiB0aXRsZT0iZ3N0X2Jpbl9pdGVyYXRlX2FsbF9ieV9pbnRlcmZhY2UgKCkiPmdzdF9iaW5faXRlcmF0ZV9hbGxfYnlfaW50ZXJmYWNlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj5Hc3RCaW48L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjZ3N0LWJpbi1pdGVyYXRlLWVsZW1lbnRzIiB0aXRsZT0iZ3N0X2Jpbl9pdGVyYXRlX2VsZW1lbnRzICgpIj5nc3RfYmluX2l0ZXJhdGVfZWxlbWVudHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWl0ZXJhdGUtcmVjdXJzZSIgdGl0bGU9ImdzdF9iaW5faXRlcmF0ZV9yZWN1cnNlICgpIj5nc3RfYmluX2l0ZXJhdGVfcmVjdXJzZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+R3N0QmluPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI2dzdC1iaW4taXRlcmF0ZS1zaW5rcyIgdGl0bGU9ImdzdF9iaW5faXRlcmF0ZV9zaW5rcyAoKSI+Z3N0X2Jpbl9pdGVyYXRlX3NpbmtzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj5Hc3RCaW48L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjZ3N0LWJpbi1pdGVyYXRlLXNvcnRlZCIgdGl0bGU9ImdzdF9iaW5faXRlcmF0ZV9zb3J0ZWQgKCkiPmdzdF9iaW5faXRlcmF0ZV9zb3J0ZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWl0ZXJhdGUtc291cmNlcyIgdGl0bGU9ImdzdF9iaW5faXRlcmF0ZV9zb3VyY2VzICgpIj5nc3RfYmluX2l0ZXJhdGVfc291cmNlczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+R3N0QmluPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI2dzdC1iaW4tbmV3IiB0aXRsZT0iZ3N0X2Jpbl9uZXcgKCkiPmdzdF9iaW5fbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj5Hc3RCaW48L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjR1NULUJJTi1OVU1DSElMRFJFTjpDQVBTIiB0aXRsZT0iR1NUX0JJTl9OVU1DSElMRFJFTigpIj5HU1RfQklOX05VTUNISUxEUkVOPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj5Hc3RCaW48L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjZ3N0LWJpbi1yZWNhbGN1bGF0ZS1sYXRlbmN5IiB0aXRsZT0iZ3N0X2Jpbl9yZWNhbGN1bGF0ZV9sYXRlbmN5ICgpIj5nc3RfYmluX3JlY2FsY3VsYXRlX2xhdGVuY3k8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLXJlbW92ZSIgdGl0bGU9ImdzdF9iaW5fcmVtb3ZlICgpIj5nc3RfYmluX3JlbW92ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+R3N0QmluPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI2dzdC1iaW4tcmVtb3ZlLW1hbnkiIHRpdGxlPSJnc3RfYmluX3JlbW92ZV9tYW55ICgpIj5nc3RfYmluX3JlbW92ZV9tYW55PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj5Hc3RCaW48L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlckNvcHlGbGFncyIgdGl0bGU9ImVudW0gR3N0QnVmZmVyQ29weUZsYWdzIj5Hc3RCdWZmZXJDb3B5RmxhZ3M8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEJ1ZmZlckZsYWdzIj5Hc3RCdWZmZXJGbGFnczwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdEJ1ZmZlcmluZ01vZGUiIHRpdGxlPSJlbnVtIEdzdEJ1ZmZlcmluZ01vZGUiPkdzdEJ1ZmZlcmluZ01vZGU8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3QiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij5Hc3RCdWZmZXJMaXN0PC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+R3N0QnVmZmVyTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3RGdW5jIiB0aXRsZT0iR3N0QnVmZmVyTGlzdEZ1bmMgKCkiPkdzdEJ1ZmZlckxpc3RGdW5jPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPkdzdEJ1ZmZlckxpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNHc3RCdWZmZXJQb29sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+R3N0QnVmZmVyUG9vbDwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPkdzdEJ1ZmZlclBvb2w8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNHc3RCdWZmZXJQb29sQ2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyUG9vbENsYXNzIj5Hc3RCdWZmZXJQb29sQ2xhc3M8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj5Hc3RCdWZmZXJQb29sPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbEZsYWdzIiB0aXRsZT0iZW51bSBHc3RCdWZmZXJQb29sRmxhZ3MiPkdzdEJ1ZmZlclBvb2xGbGFnczwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj5Hc3RCdWZmZXJQb29sPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbFBhcmFtcyIgdGl0bGU9IkdzdEJ1ZmZlclBvb2xQYXJhbXMiPkdzdEJ1ZmZlclBvb2xQYXJhbXM8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj5Hc3RCdWZmZXJQb29sPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWFkZC1tZXRhIiB0aXRsZT0iZ3N0X2J1ZmZlcl9hZGRfbWV0YSAoKSI+Z3N0X2J1ZmZlcl9hZGRfbWV0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1hZGQtbWV0YS10aW1pbmciIHRpdGxlPSJnc3RfYnVmZmVyX2FkZF9tZXRhX3RpbWluZygpIj5nc3RfYnVmZmVyX2FkZF9tZXRhX3RpbWluZzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1jb3B5IiB0aXRsZT0iZ3N0X2J1ZmZlcl9jb3B5ICgpIj5nc3RfYnVmZmVyX2NvcHk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItQ09QWS1BTEw6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfQ09QWV9BTEwiPkdTVF9CVUZGRVJfQ09QWV9BTEw8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItY29weS1pbnRvIiB0aXRsZT0iZ3N0X2J1ZmZlcl9jb3B5X2ludG8gKCkiPmdzdF9idWZmZXJfY29weV9pbnRvPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUNPUFktTUVUQURBVEE6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfQ09QWV9NRVRBREFUQSI+R1NUX0JVRkZFUl9DT1BZX01FVEFEQVRBPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWNvcHktcmVnaW9uIiB0aXRsZT0iZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAoKSI+Z3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1EVVJBVElPTjpDQVBTIiB0aXRsZT0iR1NUX0JVRkZFUl9EVVJBVElPTigpIj5HU1RfQlVGRkVSX0RVUkFUSU9OPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLURVUkFUSU9OLUlTLVZBTElEOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX0RVUkFUSU9OX0lTX1ZBTElEKCkiPkdTVF9CVUZGRVJfRFVSQVRJT05fSVNfVkFMSUQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItZXh0cmFjdCIgdGl0bGU9ImdzdF9idWZmZXJfZXh0cmFjdCAoKSI+Z3N0X2J1ZmZlcl9leHRyYWN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWZpbGwiIHRpdGxlPSJnc3RfYnVmZmVyX2ZpbGwgKCkiPmdzdF9idWZmZXJfZmlsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHUzpDQVBTIiB0aXRsZT0iR1NUX0JVRkZFUl9GTEFHUygpIj5HU1RfQlVGRkVSX0ZMQUdTPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUctSVMtU0VUOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUKCkiPkdTVF9CVUZGRVJfRkxBR19JU19TRVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItRkxBRy1TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfRkxBR19TRVQoKSI+R1NUX0JVRkZFUl9GTEFHX1NFVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHLVVOU0VUOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX0ZMQUdfVU5TRVQoKSI+R1NUX0JVRkZFUl9GTEFHX1VOU0VUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWdldC1tZXRhIiB0aXRsZT0iZ3N0X2J1ZmZlcl9nZXRfbWV0YSAoKSI+Z3N0X2J1ZmZlcl9nZXRfbWV0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1nZXQtbWV0YS10aW1pbmciIHRpdGxlPSJnc3RfYnVmZmVyX2dldF9tZXRhX3RpbWluZygpIj5nc3RfYnVmZmVyX2dldF9tZXRhX3RpbWluZzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1nZXQtc2l6ZSIgdGl0bGU9ImdzdF9idWZmZXJfZ2V0X3NpemUoKSI+Z3N0X2J1ZmZlcl9nZXRfc2l6ZTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1nZXQtc2l6ZXMiIHRpdGxlPSJnc3RfYnVmZmVyX2dldF9zaXplcyAoKSI+Z3N0X2J1ZmZlcl9nZXRfc2l6ZXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItSVMtRElTQ09OVDpDQVBTIiB0aXRsZT0iR1NUX0JVRkZFUl9JU19ESVNDT05UKCkiPkdTVF9CVUZGRVJfSVNfRElTQ09OVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1pcy1zcGFuLWZhc3QiIHRpdGxlPSJnc3RfYnVmZmVyX2lzX3NwYW5fZmFzdCAoKSI+Z3N0X2J1ZmZlcl9pc19zcGFuX2Zhc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItaXMtd3JpdGFibGUiIHRpdGxlPSJnc3RfYnVmZmVyX2lzX3dyaXRhYmxlKCkiPmdzdF9idWZmZXJfaXNfd3JpdGFibGU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItaXRlcmF0ZS1tZXRhIiB0aXRsZT0iZ3N0X2J1ZmZlcl9pdGVyYXRlX21ldGEgKCkiPmdzdF9idWZmZXJfaXRlcmF0ZV9tZXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWpvaW4iIHRpdGxlPSJnc3RfYnVmZmVyX2pvaW4gKCkiPmdzdF9idWZmZXJfam9pbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1hZGQiIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfYWRkKCkiPmdzdF9idWZmZXJfbGlzdF9hZGQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPkdzdEJ1ZmZlckxpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtY29weSIgdGl0bGU9ImdzdF9idWZmZXJfbGlzdF9jb3B5ICgpIj5nc3RfYnVmZmVyX2xpc3RfY29weTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+R3N0QnVmZmVyTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1mb3JlYWNoIiB0aXRsZT0iZ3N0X2J1ZmZlcl9saXN0X2ZvcmVhY2ggKCkiPmdzdF9idWZmZXJfbGlzdF9mb3JlYWNoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij5Hc3RCdWZmZXJMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LWdldCIgdGl0bGU9ImdzdF9idWZmZXJfbGlzdF9nZXQgKCkiPmdzdF9idWZmZXJfbGlzdF9nZXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPkdzdEJ1ZmZlckxpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtaW5zZXJ0IiB0aXRsZT0iZ3N0X2J1ZmZlcl9saXN0X2luc2VydCAoKSI+Z3N0X2J1ZmZlcl9saXN0X2luc2VydDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+R3N0QnVmZmVyTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1pcy13cml0YWJsZSIgdGl0bGU9ImdzdF9idWZmZXJfbGlzdF9pc193cml0YWJsZSgpIj5nc3RfYnVmZmVyX2xpc3RfaXNfd3JpdGFibGU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPkdzdEJ1ZmZlckxpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtbGVuIiB0aXRsZT0iZ3N0X2J1ZmZlcl9saXN0X2xlbiAoKSI+Z3N0X2J1ZmZlcl9saXN0X2xlbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+R3N0QnVmZmVyTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1tYWtlLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X2J1ZmZlcl9saXN0X21ha2Vfd3JpdGFibGUoKSI+Z3N0X2J1ZmZlcl9saXN0X21ha2Vfd3JpdGFibGU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPkdzdEJ1ZmZlckxpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtbmV3IiB0aXRsZT0iZ3N0X2J1ZmZlcl9saXN0X25ldyAoKSI+Z3N0X2J1ZmZlcl9saXN0X25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+R3N0QnVmZmVyTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1yZWYiIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfcmVmICgpIj5nc3RfYnVmZmVyX2xpc3RfcmVmPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij5Hc3RCdWZmZXJMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LXJlbW92ZSIgdGl0bGU9ImdzdF9idWZmZXJfbGlzdF9yZW1vdmUgKCkiPmdzdF9idWZmZXJfbGlzdF9yZW1vdmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPkdzdEJ1ZmZlckxpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3Qtc2l6ZWQtbmV3IiB0aXRsZT0iZ3N0X2J1ZmZlcl9saXN0X3NpemVkX25ldyAoKSI+Z3N0X2J1ZmZlcl9saXN0X3NpemVkX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+R3N0QnVmZmVyTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC11bnJlZiIgdGl0bGU9ImdzdF9idWZmZXJfbGlzdF91bnJlZiAoKSI+Z3N0X2J1ZmZlcl9saXN0X3VucmVmPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij5Hc3RCdWZmZXJMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLW1ha2Utd3JpdGFibGUiIHRpdGxlPSJnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUoKSI+Z3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLW1hcCIgdGl0bGU9ImdzdF9idWZmZXJfbWFwICgpIj5nc3RfYnVmZmVyX21hcDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1tZW1jbXAiIHRpdGxlPSJnc3RfYnVmZmVyX21lbWNtcCAoKSI+Z3N0X2J1ZmZlcl9tZW1jbXA8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbWVtc2V0IiB0aXRsZT0iZ3N0X2J1ZmZlcl9tZW1zZXQgKCkiPmdzdF9idWZmZXJfbWVtc2V0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLW1lcmdlIiB0aXRsZT0iZ3N0X2J1ZmZlcl9tZXJnZSAoKSI+Z3N0X2J1ZmZlcl9tZXJnZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1uZXciIHRpdGxlPSJnc3RfYnVmZmVyX25ldyAoKSI+Z3N0X2J1ZmZlcl9uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbmV3LWFsbG9jYXRlIiB0aXRsZT0iZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKCkiPmdzdF9idWZmZXJfbmV3X2FsbG9jYXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLW5ldy1hbmQtYWxsb2MiIHRpdGxlPSJnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MoKSI+Z3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLW5ldy13cmFwcGVkIiB0aXRsZT0iZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZCAoKSI+Z3N0X2J1ZmZlcl9uZXdfd3JhcHBlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1uZXctd3JhcHBlZC1mdWxsIiB0aXRsZT0iZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9mdWxsICgpIj5nc3RfYnVmZmVyX25ld193cmFwcGVkX2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbi1tZW1vcnkiIHRpdGxlPSJnc3RfYnVmZmVyX25fbWVtb3J5ICgpIj5nc3RfYnVmZmVyX25fbWVtb3J5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLU9GRlNFVDpDQVBTIiB0aXRsZT0iR1NUX0JVRkZFUl9PRkZTRVQoKSI+R1NUX0JVRkZFUl9PRkZTRVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItT0ZGU0VULUVORDpDQVBTIiB0aXRsZT0iR1NUX0JVRkZFUl9PRkZTRVRfRU5EKCkiPkdTVF9CVUZGRVJfT0ZGU0VUX0VORDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1PRkZTRVQtRU5ELUlTLVZBTElEOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX09GRlNFVF9FTkRfSVNfVkFMSUQoKSI+R1NUX0JVRkZFUl9PRkZTRVRfRU5EX0lTX1ZBTElEPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLU9GRlNFVC1JUy1WQUxJRDpDQVBTIiB0aXRsZT0iR1NUX0JVRkZFUl9PRkZTRVRfSVNfVkFMSUQoKSI+R1NUX0JVRkZFUl9PRkZTRVRfSVNfVkFMSUQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItT0ZGU0VULU5PTkU6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfT0ZGU0VUX05PTkUiPkdTVF9CVUZGRVJfT0ZGU0VUX05PTkU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItcGVlay1tZW1vcnkiIHRpdGxlPSJnc3RfYnVmZmVyX3BlZWtfbWVtb3J5ICgpIj5nc3RfYnVmZmVyX3BlZWtfbWVtb3J5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWFjcXVpcmUtYnVmZmVyIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyICgpIj5nc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPkdzdEJ1ZmZlclBvb2w8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtY29uZmlnLWFkZC1vcHRpb24iIHRpdGxlPSJnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2FkZF9vcHRpb24gKCkiPmdzdF9idWZmZXJfcG9vbF9jb25maWdfYWRkX29wdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+R3N0QnVmZmVyUG9vbDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1jb25maWctZ2V0IiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19nZXQgKCkiPmdzdF9idWZmZXJfcG9vbF9jb25maWdfZ2V0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj5Hc3RCdWZmZXJQb29sPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1nZXQtb3B0aW9uIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19nZXRfb3B0aW9uICgpIj5nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldF9vcHRpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPkdzdEJ1ZmZlclBvb2w8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtY29uZmlnLWhhcy1vcHRpb24iIHRpdGxlPSJnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2hhc19vcHRpb24gKCkiPmdzdF9idWZmZXJfcG9vbF9jb25maWdfaGFzX29wdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+R3N0QnVmZmVyUG9vbDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1jb25maWctbi1vcHRpb25zIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19uX29wdGlvbnMgKCkiPmdzdF9idWZmZXJfcG9vbF9jb25maWdfbl9vcHRpb25zPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj5Hc3RCdWZmZXJQb29sPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1zZXQiIHRpdGxlPSJnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldCAoKSI+Z3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPkdzdEJ1ZmZlclBvb2w8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtZ2V0LWNvbmZpZyIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9nZXRfY29uZmlnICgpIj5nc3RfYnVmZmVyX3Bvb2xfZ2V0X2NvbmZpZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+R3N0QnVmZmVyUG9vbDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1nZXQtb3B0aW9ucyIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9nZXRfb3B0aW9ucyAoKSI+Z3N0X2J1ZmZlcl9wb29sX2dldF9vcHRpb25zPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj5Hc3RCdWZmZXJQb29sPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWhhcy1vcHRpb24iIHRpdGxlPSJnc3RfYnVmZmVyX3Bvb2xfaGFzX29wdGlvbiAoKSI+Z3N0X2J1ZmZlcl9wb29sX2hhc19vcHRpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPkdzdEJ1ZmZlclBvb2w8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtaXMtYWN0aXZlIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2lzX2FjdGl2ZSAoKSI+Z3N0X2J1ZmZlcl9wb29sX2lzX2FjdGl2ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+R3N0QnVmZmVyUG9vbDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI0dTVC1CVUZGRVItUE9PTC1JUy1GTFVTSElORzpDQVBTIiB0aXRsZT0iR1NUX0JVRkZFUl9QT09MX0lTX0ZMVVNISU5HKCkiPkdTVF9CVUZGRVJfUE9PTF9JU19GTFVTSElORzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+R3N0QnVmZmVyUG9vbDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1uZXciIHRpdGxlPSJnc3RfYnVmZmVyX3Bvb2xfbmV3ICgpIj5nc3RfYnVmZmVyX3Bvb2xfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj5Hc3RCdWZmZXJQb29sPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLXJlbGVhc2UtYnVmZmVyIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX3JlbGVhc2VfYnVmZmVyICgpIj5nc3RfYnVmZmVyX3Bvb2xfcmVsZWFzZV9idWZmZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPkdzdEJ1ZmZlclBvb2w8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtc2V0LWFjdGl2ZSIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlICgpIj5nc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+R3N0QnVmZmVyUG9vbDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1zZXQtY29uZmlnIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWcgKCkiPmdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj5Hc3RCdWZmZXJQb29sPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXJlZiIgdGl0bGU9ImdzdF9idWZmZXJfcmVmICgpIj5nc3RfYnVmZmVyX3JlZjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZW1vdmUtbWVtb3J5IiB0aXRsZT0iZ3N0X2J1ZmZlcl9yZW1vdmVfbWVtb3J5KCkiPmdzdF9idWZmZXJfcmVtb3ZlX21lbW9yeTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZW1vdmUtbWVtb3J5LXJhbmdlIiB0aXRsZT0iZ3N0X2J1ZmZlcl9yZW1vdmVfbWVtb3J5X3JhbmdlICgpIj5nc3RfYnVmZmVyX3JlbW92ZV9tZW1vcnlfcmFuZ2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItcmVtb3ZlLW1ldGEiIHRpdGxlPSJnc3RfYnVmZmVyX3JlbW92ZV9tZXRhICgpIj5nc3RfYnVmZmVyX3JlbW92ZV9tZXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXJlcGxhY2UiIHRpdGxlPSJnc3RfYnVmZmVyX3JlcGxhY2UoKSI+Z3N0X2J1ZmZlcl9yZXBsYWNlPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXJlc2l6ZSIgdGl0bGU9ImdzdF9idWZmZXJfcmVzaXplICgpIj5nc3RfYnVmZmVyX3Jlc2l6ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1zZXQtc2l6ZSIgdGl0bGU9ImdzdF9idWZmZXJfc2V0X3NpemUoKSI+Z3N0X2J1ZmZlcl9zZXRfc2l6ZTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1zcGFuIiB0aXRsZT0iZ3N0X2J1ZmZlcl9zcGFuICgpIj5nc3RfYnVmZmVyX3NwYW48L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItdGFrZS1tZW1vcnkiIHRpdGxlPSJnc3RfYnVmZmVyX3Rha2VfbWVtb3J5ICgpIj5nc3RfYnVmZmVyX3Rha2VfbWVtb3J5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLVRJTUVTVEFNUDpDQVBTIiB0aXRsZT0iR1NUX0JVRkZFUl9USU1FU1RBTVAoKSI+R1NUX0JVRkZFUl9USU1FU1RBTVA8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItVElNRVNUQU1QLUlTLVZBTElEOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX1RJTUVTVEFNUF9JU19WQUxJRCgpIj5HU1RfQlVGRkVSX1RJTUVTVEFNUF9JU19WQUxJRDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1UUkFDRS1OQU1FOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX1RSQUNFX05BTUUiPkdTVF9CVUZGRVJfVFJBQ0VfTkFNRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci11bm1hcCIgdGl0bGU9ImdzdF9idWZmZXJfdW5tYXAgKCkiPmdzdF9idWZmZXJfdW5tYXA8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItdW5yZWYiIHRpdGxlPSJnc3RfYnVmZmVyX3VucmVmICgpIj5nc3RfYnVmZmVyX3VucmVmPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI0dzdEJ1cy1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVzIj5Hc3RCdXM8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj5Hc3RCdXM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjR3N0QnVzLW1lc3NhZ2UiIHRpdGxlPSdUaGUgIm1lc3NhZ2UiIHNpZ25hbCc+R3N0QnVzOjptZXNzYWdlPC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPkdzdEJ1czwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNHc3RCdXMtc3luYy1tZXNzYWdlIiB0aXRsZT0nVGhlICJzeW5jLW1lc3NhZ2UiIHNpZ25hbCc+R3N0QnVzOjpzeW5jLW1lc3NhZ2U8L2E+LCBvYmplY3Qgc2lnbmFsIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI0dzdEJ1cy0tZW5hYmxlLWFzeW5jIiB0aXRsZT0nVGhlICJlbmFibGUtYXN5bmMiIHByb3BlcnR5Jz5Hc3RCdXM6ZW5hYmxlLWFzeW5jPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI0dzdEJ1c0ZsYWdzIiB0aXRsZT0iZW51bSBHc3RCdXNGbGFncyI+R3N0QnVzRmxhZ3M8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI0dzdEJ1c0Z1bmMiIHRpdGxlPSJHc3RCdXNGdW5jICgpIj5Hc3RCdXNGdW5jPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPkdzdEJ1czwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNHc3RCdXNTeW5jSGFuZGxlciIgdGl0bGU9IkdzdEJ1c1N5bmNIYW5kbGVyICgpIj5Hc3RCdXNTeW5jSGFuZGxlcjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj5Hc3RCdXM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjR3N0QnVzU3luY1JlcGx5IiB0aXRsZT0iZW51bSBHc3RCdXNTeW5jUmVwbHkiPkdzdEJ1c1N5bmNSZXBseTwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj5Hc3RCdXM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1hZGQtc2lnbmFsLXdhdGNoIiB0aXRsZT0iZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoICgpIj5nc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2g8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPkdzdEJ1czwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLWFkZC1zaWduYWwtd2F0Y2gtZnVsbCIgdGl0bGU9ImdzdF9idXNfYWRkX3NpZ25hbF93YXRjaF9mdWxsICgpIj5nc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2hfZnVsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtYWRkLXdhdGNoIiB0aXRsZT0iZ3N0X2J1c19hZGRfd2F0Y2ggKCkiPmdzdF9idXNfYWRkX3dhdGNoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj5Hc3RCdXM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1hZGQtd2F0Y2gtZnVsbCIgdGl0bGU9ImdzdF9idXNfYWRkX3dhdGNoX2Z1bGwgKCkiPmdzdF9idXNfYWRkX3dhdGNoX2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPkdzdEJ1czwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLWFzeW5jLXNpZ25hbC1mdW5jIiB0aXRsZT0iZ3N0X2J1c19hc3luY19zaWduYWxfZnVuYyAoKSI+Z3N0X2J1c19hc3luY19zaWduYWxfZnVuYzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtY3JlYXRlLXdhdGNoIiB0aXRsZT0iZ3N0X2J1c19jcmVhdGVfd2F0Y2ggKCkiPmdzdF9idXNfY3JlYXRlX3dhdGNoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj5Hc3RCdXM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1kaXNhYmxlLXN5bmMtbWVzc2FnZS1lbWlzc2lvbiIgdGl0bGU9ImdzdF9idXNfZGlzYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24gKCkiPmdzdF9idXNfZGlzYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPkdzdEJ1czwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLWVuYWJsZS1zeW5jLW1lc3NhZ2UtZW1pc3Npb24iIHRpdGxlPSJnc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24gKCkiPmdzdF9idXNfZW5hYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtaGF2ZS1wZW5kaW5nIiB0aXRsZT0iZ3N0X2J1c19oYXZlX3BlbmRpbmcgKCkiPmdzdF9idXNfaGF2ZV9wZW5kaW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj5Hc3RCdXM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1uZXciIHRpdGxlPSJnc3RfYnVzX25ldyAoKSI+Z3N0X2J1c19uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPkdzdEJ1czwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXBlZWsiIHRpdGxlPSJnc3RfYnVzX3BlZWsgKCkiPmdzdF9idXNfcGVlazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtcG9sbCIgdGl0bGU9ImdzdF9idXNfcG9sbCAoKSI+Z3N0X2J1c19wb2xsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj5Hc3RCdXM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1wb3AiIHRpdGxlPSJnc3RfYnVzX3BvcCAoKSI+Z3N0X2J1c19wb3A8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPkdzdEJ1czwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXBvcC1maWx0ZXJlZCIgdGl0bGU9ImdzdF9idXNfcG9wX2ZpbHRlcmVkICgpIj5nc3RfYnVzX3BvcF9maWx0ZXJlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtcG9zdCIgdGl0bGU9ImdzdF9idXNfcG9zdCAoKSI+Z3N0X2J1c19wb3N0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj5Hc3RCdXM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1yZW1vdmUtc2lnbmFsLXdhdGNoIiB0aXRsZT0iZ3N0X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNoICgpIj5nc3RfYnVzX3JlbW92ZV9zaWduYWxfd2F0Y2g8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPkdzdEJ1czwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXNldC1mbHVzaGluZyIgdGl0bGU9ImdzdF9idXNfc2V0X2ZsdXNoaW5nICgpIj5nc3RfYnVzX3NldF9mbHVzaGluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtc2V0LXN5bmMtaGFuZGxlciIgdGl0bGU9ImdzdF9idXNfc2V0X3N5bmNfaGFuZGxlciAoKSI+Z3N0X2J1c19zZXRfc3luY19oYW5kbGVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj5Hc3RCdXM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1zeW5jLXNpZ25hbC1oYW5kbGVyIiB0aXRsZT0iZ3N0X2J1c19zeW5jX3NpZ25hbF9oYW5kbGVyICgpIj5nc3RfYnVzX3N5bmNfc2lnbmFsX2hhbmRsZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPkdzdEJ1czwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXRpbWVkLXBvcCIgdGl0bGU9ImdzdF9idXNfdGltZWRfcG9wICgpIj5nc3RfYnVzX3RpbWVkX3BvcDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtdGltZWQtcG9wLWZpbHRlcmVkIiB0aXRsZT0iZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQgKCkiPmdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj5Hc3RCdXM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8YSBuYW1lPSJpZHhDIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+QzwvaDM+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULUNBTEwtUEFSRU5UOkNBUFMiIHRpdGxlPSJHU1RfQ0FMTF9QQVJFTlQoKSI+R1NUX0NBTExfUEFSRU5UPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1DQUxMLVBBUkVOVC1XSVRILURFRkFVTFQ6Q0FQUyIgdGl0bGU9IkdTVF9DQUxMX1BBUkVOVF9XSVRIX0RFRkFVTFQoKSI+R1NUX0NBTExfUEFSRU5UX1dJVEhfREVGQVVMVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+R3N0Q2FwczwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdENhcHNGbGFncyI+R3N0Q2Fwc0ZsYWdzPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzSW50ZXJzZWN0TW9kZSIgdGl0bGU9ImVudW0gR3N0Q2Fwc0ludGVyc2VjdE1vZGUiPkdzdENhcHNJbnRlcnNlY3RNb2RlPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHU1QtQ0FQUy1BTlk6Q0FQUyIgdGl0bGU9IkdTVF9DQVBTX0FOWSI+R1NUX0NBUFNfQU5ZPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtYXBwZW5kIiB0aXRsZT0iZ3N0X2NhcHNfYXBwZW5kICgpIj5nc3RfY2Fwc19hcHBlbmQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1hcHBlbmQtc3RydWN0dXJlIiB0aXRsZT0iZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZSAoKSI+Z3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWNhbi1pbnRlcnNlY3QiIHRpdGxlPSJnc3RfY2Fwc19jYW5faW50ZXJzZWN0ICgpIj5nc3RfY2Fwc19jYW5faW50ZXJzZWN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtY29weSIgdGl0bGU9ImdzdF9jYXBzX2NvcHkgKCkiPmdzdF9jYXBzX2NvcHk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1jb3B5LW50aCIgdGl0bGU9ImdzdF9jYXBzX2NvcHlfbnRoICgpIj5nc3RfY2Fwc19jb3B5X250aDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWRvLXNpbXBsaWZ5IiB0aXRsZT0iZ3N0X2NhcHNfZG9fc2ltcGxpZnkgKCkiPmdzdF9jYXBzX2RvX3NpbXBsaWZ5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtZml4YXRlIiB0aXRsZT0iZ3N0X2NhcHNfZml4YXRlICgpIj5nc3RfY2Fwc19maXhhdGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHU1QtQ0FQUy1GTEFHUzpDQVBTIiB0aXRsZT0iR1NUX0NBUFNfRkxBR1MoKSI+R1NUX0NBUFNfRkxBR1M8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHU1QtQ0FQUy1GTEFHLUlTLVNFVDpDQVBTIiB0aXRsZT0iR1NUX0NBUFNfRkxBR19JU19TRVQoKSI+R1NUX0NBUFNfRkxBR19JU19TRVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHU1QtQ0FQUy1GTEFHLVNFVDpDQVBTIiB0aXRsZT0iR1NUX0NBUFNfRkxBR19TRVQoKSI+R1NUX0NBUFNfRkxBR19TRVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHU1QtQ0FQUy1GTEFHLVVOU0VUOkNBUFMiIHRpdGxlPSJHU1RfQ0FQU19GTEFHX1VOU0VUKCkiPkdTVF9DQVBTX0ZMQUdfVU5TRVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1mcm9tLXN0cmluZyIgdGl0bGU9ImdzdF9jYXBzX2Zyb21fc3RyaW5nICgpIj5nc3RfY2Fwc19mcm9tX3N0cmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWdldC1zaXplIiB0aXRsZT0iZ3N0X2NhcHNfZ2V0X3NpemUgKCkiPmdzdF9jYXBzX2dldF9zaXplPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtZ2V0LXN0cnVjdHVyZSIgdGl0bGU9ImdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKCkiPmdzdF9jYXBzX2dldF9zdHJ1Y3R1cmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pbnRlcnNlY3QiIHRpdGxlPSJnc3RfY2Fwc19pbnRlcnNlY3QgKCkiPmdzdF9jYXBzX2ludGVyc2VjdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWludGVyc2VjdC1mdWxsIiB0aXRsZT0iZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKCkiPmdzdF9jYXBzX2ludGVyc2VjdF9mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtYWx3YXlzLWNvbXBhdGlibGUiIHRpdGxlPSJnc3RfY2Fwc19pc19hbHdheXNfY29tcGF0aWJsZSAoKSI+Z3N0X2NhcHNfaXNfYWx3YXlzX2NvbXBhdGlibGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1hbnkiIHRpdGxlPSJnc3RfY2Fwc19pc19hbnkgKCkiPmdzdF9jYXBzX2lzX2FueTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWlzLWVtcHR5IiB0aXRsZT0iZ3N0X2NhcHNfaXNfZW1wdHkgKCkiPmdzdF9jYXBzX2lzX2VtcHR5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtZXF1YWwiIHRpdGxlPSJnc3RfY2Fwc19pc19lcXVhbCAoKSI+Z3N0X2NhcHNfaXNfZXF1YWw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1lcXVhbC1maXhlZCIgdGl0bGU9ImdzdF9jYXBzX2lzX2VxdWFsX2ZpeGVkICgpIj5nc3RfY2Fwc19pc19lcXVhbF9maXhlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWlzLWZpeGVkIiB0aXRsZT0iZ3N0X2NhcHNfaXNfZml4ZWQgKCkiPmdzdF9jYXBzX2lzX2ZpeGVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR1NULUNBUFMtSVMtU0lNUExFOkNBUFMiIHRpdGxlPSJHU1RfQ0FQU19JU19TSU1QTEUoKSI+R1NUX0NBUFNfSVNfU0lNUExFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtc3Vic2V0IiB0aXRsZT0iZ3N0X2NhcHNfaXNfc3Vic2V0ICgpIj5nc3RfY2Fwc19pc19zdWJzZXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1zdWJzZXQtc3RydWN0dXJlIiB0aXRsZT0iZ3N0X2NhcHNfaXNfc3Vic2V0X3N0cnVjdHVyZSAoKSI+Z3N0X2NhcHNfaXNfc3Vic2V0X3N0cnVjdHVyZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWlzLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X2NhcHNfaXNfd3JpdGFibGUoKSI+Z3N0X2NhcHNfaXNfd3JpdGFibGU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1tYWtlLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X2NhcHNfbWFrZV93cml0YWJsZSgpIj5nc3RfY2Fwc19tYWtlX3dyaXRhYmxlPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbWVyZ2UiIHRpdGxlPSJnc3RfY2Fwc19tZXJnZSAoKSI+Z3N0X2NhcHNfbWVyZ2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1tZXJnZS1zdHJ1Y3R1cmUiIHRpdGxlPSJnc3RfY2Fwc19tZXJnZV9zdHJ1Y3R1cmUgKCkiPmdzdF9jYXBzX21lcmdlX3N0cnVjdHVyZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW5ldy1hbnkiIHRpdGxlPSJnc3RfY2Fwc19uZXdfYW55ICgpIj5nc3RfY2Fwc19uZXdfYW55PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbmV3LWVtcHR5IiB0aXRsZT0iZ3N0X2NhcHNfbmV3X2VtcHR5ICgpIj5nc3RfY2Fwc19uZXdfZW1wdHk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1uZXctZnVsbCIgdGl0bGU9ImdzdF9jYXBzX25ld19mdWxsICgpIj5nc3RfY2Fwc19uZXdfZnVsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW5ldy1mdWxsLXZhbGlzdCIgdGl0bGU9ImdzdF9jYXBzX25ld19mdWxsX3ZhbGlzdCAoKSI+Z3N0X2NhcHNfbmV3X2Z1bGxfdmFsaXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbmV3LXNpbXBsZSIgdGl0bGU9ImdzdF9jYXBzX25ld19zaW1wbGUgKCkiPmdzdF9jYXBzX25ld19zaW1wbGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHU1QtQ0FQUy1OT05FOkNBUFMiIHRpdGxlPSJHU1RfQ0FQU19OT05FIj5HU1RfQ0FQU19OT05FPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbm9ybWFsaXplIiB0aXRsZT0iZ3N0X2NhcHNfbm9ybWFsaXplICgpIj5nc3RfY2Fwc19ub3JtYWxpemU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1yZWYiIHRpdGxlPSJnc3RfY2Fwc19yZWYgKCkiPmdzdF9jYXBzX3JlZjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dTVC1DQVBTLVJFRkNPVU5UOkNBUFMiIHRpdGxlPSJHU1RfQ0FQU19SRUZDT1VOVCgpIj5HU1RfQ0FQU19SRUZDT1VOVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dTVC1DQVBTLVJFRkNPVU5ULVZBTFVFOkNBUFMiIHRpdGxlPSJHU1RfQ0FQU19SRUZDT1VOVF9WQUxVRSgpIj5HU1RfQ0FQU19SRUZDT1VOVF9WQUxVRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXJlbW92ZS1zdHJ1Y3R1cmUiIHRpdGxlPSJnc3RfY2Fwc19yZW1vdmVfc3RydWN0dXJlICgpIj5nc3RfY2Fwc19yZW1vdmVfc3RydWN0dXJlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtcmVwbGFjZSIgdGl0bGU9ImdzdF9jYXBzX3JlcGxhY2UoKSI+Z3N0X2NhcHNfcmVwbGFjZTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXNldC1zaW1wbGUiIHRpdGxlPSJnc3RfY2Fwc19zZXRfc2ltcGxlICgpIj5nc3RfY2Fwc19zZXRfc2ltcGxlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtc2V0LXNpbXBsZS12YWxpc3QiIHRpdGxlPSJnc3RfY2Fwc19zZXRfc2ltcGxlX3ZhbGlzdCAoKSI+Z3N0X2NhcHNfc2V0X3NpbXBsZV92YWxpc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1zZXQtdmFsdWUiIHRpdGxlPSJnc3RfY2Fwc19zZXRfdmFsdWUgKCkiPmdzdF9jYXBzX3NldF92YWx1ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXN0ZWFsLXN0cnVjdHVyZSIgdGl0bGU9ImdzdF9jYXBzX3N0ZWFsX3N0cnVjdHVyZSAoKSI+Z3N0X2NhcHNfc3RlYWxfc3RydWN0dXJlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtc3VidHJhY3QiIHRpdGxlPSJnc3RfY2Fwc19zdWJ0cmFjdCAoKSI+Z3N0X2NhcHNfc3VidHJhY3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy10by1zdHJpbmciIHRpdGxlPSJnc3RfY2Fwc190b19zdHJpbmcgKCkiPmdzdF9jYXBzX3RvX3N0cmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXRydW5jYXRlIiB0aXRsZT0iZ3N0X2NhcHNfdHJ1bmNhdGUgKCkiPmdzdF9jYXBzX3RydW5jYXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtdW5pb24iIHRpdGxlPSJnc3RfY2Fwc191bmlvbiAoKSI+Z3N0X2NhcHNfdW5pb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy11bnJlZiIgdGl0bGU9ImdzdF9jYXBzX3VucmVmICgpIj5nc3RfY2Fwc191bnJlZjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtREVCVUc6Q0FQUyIgdGl0bGU9IkdTVF9DQVRfREVCVUcoKSI+R1NUX0NBVF9ERUJVRzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtREVCVUctT0JKRUNUOkNBUFMiIHRpdGxlPSJHU1RfQ0FUX0RFQlVHX09CSkVDVCgpIj5HU1RfQ0FUX0RFQlVHX09CSkVDVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtRVJST1I6Q0FQUyIgdGl0bGU9IkdTVF9DQVRfRVJST1IoKSI+R1NUX0NBVF9FUlJPUjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtRVJST1ItT0JKRUNUOkNBUFMiIHRpdGxlPSJHU1RfQ0FUX0VSUk9SX09CSkVDVCgpIj5HU1RfQ0FUX0VSUk9SX09CSkVDVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtRklYTUU6Q0FQUyIgdGl0bGU9IkdTVF9DQVRfRklYTUUoKSI+R1NUX0NBVF9GSVhNRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtRklYTUUtT0JKRUNUOkNBUFMiIHRpdGxlPSJHU1RfQ0FUX0ZJWE1FX09CSkVDVCgpIj5HU1RfQ0FUX0ZJWE1FX09CSkVDVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtSU5GTzpDQVBTIiB0aXRsZT0iR1NUX0NBVF9JTkZPKCkiPkdTVF9DQVRfSU5GTzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtSU5GTy1PQkpFQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9DQVRfSU5GT19PQkpFQ1QoKSI+R1NUX0NBVF9JTkZPX09CSkVDVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtTEVWRUwtTE9HOkNBUFMiIHRpdGxlPSJHU1RfQ0FUX0xFVkVMX0xPRygpIj5HU1RfQ0FUX0xFVkVMX0xPRzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtTE9HOkNBUFMiIHRpdGxlPSJHU1RfQ0FUX0xPRygpIj5HU1RfQ0FUX0xPRzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtTE9HLU9CSkVDVDpDQVBTIiB0aXRsZT0iR1NUX0NBVF9MT0dfT0JKRUNUKCkiPkdTVF9DQVRfTE9HX09CSkVDVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtTUVNRFVNUDpDQVBTIiB0aXRsZT0iR1NUX0NBVF9NRU1EVU1QKCkiPkdTVF9DQVRfTUVNRFVNUDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtTUVNRFVNUC1PQkpFQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9DQVRfTUVNRFVNUF9PQkpFQ1QoKSI+R1NUX0NBVF9NRU1EVU1QX09CSkVDVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtVFJBQ0U6Q0FQUyIgdGl0bGU9IkdTVF9DQVRfVFJBQ0UoKSI+R1NUX0NBVF9UUkFDRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtVFJBQ0UtT0JKRUNUOkNBUFMiIHRpdGxlPSJHU1RfQ0FUX1RSQUNFX09CSkVDVCgpIj5HU1RfQ0FUX1RSQUNFX09CSkVDVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtV0FSTklORzpDQVBTIiB0aXRsZT0iR1NUX0NBVF9XQVJOSU5HKCkiPkdTVF9DQVRfV0FSTklORzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtV0FSTklORy1PQkpFQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9DQVRfV0FSTklOR19PQkpFQ1QoKSI+R1NUX0NBVF9XQVJOSU5HX09CSkVDVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sI0dTVC1DSEVDSy1WRVJTSU9OOkNBUFMiIHRpdGxlPSJHU1RfQ0hFQ0tfVkVSU0lPTigpIj5HU1RfQ0hFQ0tfVkVSU0lPTjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sIiB0aXRsZT0iR3N0VmVyc2lvbiI+R3N0VmVyc2lvbjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwjR3N0Q2hpbGRQcm94eS1zdHJ1Y3QiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij5Hc3RDaGlsZFByb3h5PC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij5Hc3RDaGlsZFByb3h5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNHc3RDaGlsZFByb3h5LWNoaWxkLWFkZGVkIiB0aXRsZT0nVGhlICJjaGlsZC1hZGRlZCIgc2lnbmFsJz5Hc3RDaGlsZFByb3h5OjpjaGlsZC1hZGRlZDwvYT4sIG9iamVjdCBzaWduYWwgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCIgdGl0bGU9IkdzdENoaWxkUHJveHkiPkdzdENoaWxkUHJveHk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sI0dzdENoaWxkUHJveHktY2hpbGQtcmVtb3ZlZCIgdGl0bGU9J1RoZSAiY2hpbGQtcmVtb3ZlZCIgc2lnbmFsJz5Hc3RDaGlsZFByb3h5OjpjaGlsZC1yZW1vdmVkPC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+R3N0Q2hpbGRQcm94eTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwjR3N0Q2hpbGRQcm94eUludGVyZmFjZSIgdGl0bGU9InN0cnVjdCBHc3RDaGlsZFByb3h5SW50ZXJmYWNlIj5Hc3RDaGlsZFByb3h5SW50ZXJmYWNlPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij5Hc3RDaGlsZFByb3h5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktY2hpbGQtYWRkZWQiIHRpdGxlPSJnc3RfY2hpbGRfcHJveHlfY2hpbGRfYWRkZWQgKCkiPmdzdF9jaGlsZF9wcm94eV9jaGlsZF9hZGRlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij5Hc3RDaGlsZFByb3h5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktY2hpbGQtcmVtb3ZlZCIgdGl0bGU9ImdzdF9jaGlsZF9wcm94eV9jaGlsZF9yZW1vdmVkICgpIj5nc3RfY2hpbGRfcHJveHlfY2hpbGRfcmVtb3ZlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij5Hc3RDaGlsZFByb3h5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktZ2V0IiB0aXRsZT0iZ3N0X2NoaWxkX3Byb3h5X2dldCAoKSI+Z3N0X2NoaWxkX3Byb3h5X2dldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij5Hc3RDaGlsZFByb3h5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktZ2V0LWNoaWxkcmVuLWNvdW50IiB0aXRsZT0iZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZHJlbl9jb3VudCAoKSI+Z3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZHJlbl9jb3VudDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij5Hc3RDaGlsZFByb3h5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktZ2V0LWNoaWxkLWJ5LWluZGV4IiB0aXRsZT0iZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9pbmRleCAoKSI+Z3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9pbmRleDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij5Hc3RDaGlsZFByb3h5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktZ2V0LWNoaWxkLWJ5LW5hbWUiIHRpdGxlPSJnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X25hbWUgKCkiPmdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfbmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij5Hc3RDaGlsZFByb3h5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktZ2V0LXByb3BlcnR5IiB0aXRsZT0iZ3N0X2NoaWxkX3Byb3h5X2dldF9wcm9wZXJ0eSAoKSI+Z3N0X2NoaWxkX3Byb3h5X2dldF9wcm9wZXJ0eTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij5Hc3RDaGlsZFByb3h5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktZ2V0LXZhbGlzdCIgdGl0bGU9ImdzdF9jaGlsZF9wcm94eV9nZXRfdmFsaXN0ICgpIj5nc3RfY2hpbGRfcHJveHlfZ2V0X3ZhbGlzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij5Hc3RDaGlsZFByb3h5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktbG9va3VwIiB0aXRsZT0iZ3N0X2NoaWxkX3Byb3h5X2xvb2t1cCAoKSI+Z3N0X2NoaWxkX3Byb3h5X2xvb2t1cDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij5Hc3RDaGlsZFByb3h5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktc2V0IiB0aXRsZT0iZ3N0X2NoaWxkX3Byb3h5X3NldCAoKSI+Z3N0X2NoaWxkX3Byb3h5X3NldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij5Hc3RDaGlsZFByb3h5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktc2V0LXByb3BlcnR5IiB0aXRsZT0iZ3N0X2NoaWxkX3Byb3h5X3NldF9wcm9wZXJ0eSAoKSI+Z3N0X2NoaWxkX3Byb3h5X3NldF9wcm9wZXJ0eTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij5Hc3RDaGlsZFByb3h5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktc2V0LXZhbGlzdCIgdGl0bGU9ImdzdF9jaGlsZF9wcm94eV9zZXRfdmFsaXN0ICgpIj5nc3RfY2hpbGRfcHJveHlfc2V0X3ZhbGlzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij5Hc3RDaGlsZFByb3h5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2stc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdENsb2NrIj5Hc3RDbG9jazwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrLS1zdGF0cyIgdGl0bGU9J1RoZSAic3RhdHMiIHByb3BlcnR5Jz5Hc3RDbG9jazpzdGF0czwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrLS10aW1lb3V0IiB0aXRsZT0nVGhlICJ0aW1lb3V0IiBwcm9wZXJ0eSc+R3N0Q2xvY2s6dGltZW91dDwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrLS13aW5kb3ctc2l6ZSIgdGl0bGU9J1RoZSAid2luZG93LXNpemUiIHByb3BlcnR5Jz5Hc3RDbG9jazp3aW5kb3ctc2l6ZTwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrLS13aW5kb3ctdGhyZXNob2xkIiB0aXRsZT0nVGhlICJ3aW5kb3ctdGhyZXNob2xkIiBwcm9wZXJ0eSc+R3N0Q2xvY2s6d2luZG93LXRocmVzaG9sZDwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrQ2FsbGJhY2siIHRpdGxlPSJHc3RDbG9ja0NhbGxiYWNrICgpIj5Hc3RDbG9ja0NhbGxiYWNrPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrQ2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2xvY2tDbGFzcyI+R3N0Q2xvY2tDbGFzczwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrRW50cnkiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2xvY2tFbnRyeSI+R3N0Q2xvY2tFbnRyeTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrRW50cnlUeXBlIiB0aXRsZT0iZW51bSBHc3RDbG9ja0VudHJ5VHlwZSI+R3N0Q2xvY2tFbnRyeVR5cGU8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tGbGFncyIgdGl0bGU9ImVudW0gR3N0Q2xvY2tGbGFncyI+R3N0Q2xvY2tGbGFnczwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+R3N0Q2xvY2tJRDwvYT4sIHR5cGVkZWYgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1JldHVybiIgdGl0bGU9ImVudW0gR3N0Q2xvY2tSZXR1cm4iPkdzdENsb2NrUmV0dXJuPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+R3N0Q2xvY2tUaW1lPC9hPiwgdHlwZWRlZiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZURpZmYiIHRpdGxlPSJHc3RDbG9ja1RpbWVEaWZmIj5Hc3RDbG9ja1RpbWVEaWZmPC9hPiwgdHlwZWRlZiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTeXN0ZW1DbG9jay5odG1sI0dzdENsb2NrVHlwZSIgdGl0bGU9ImVudW0gR3N0Q2xvY2tUeXBlIj5Hc3RDbG9ja1R5cGU8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTeXN0ZW1DbG9jay5odG1sIiB0aXRsZT0iR3N0U3lzdGVtQ2xvY2siPkdzdFN5c3RlbUNsb2NrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWFkZC1vYnNlcnZhdGlvbiIgdGl0bGU9ImdzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb24gKCkiPmdzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1hZGp1c3QtdW5sb2NrZWQiIHRpdGxlPSJnc3RfY2xvY2tfYWRqdXN0X3VubG9ja2VkICgpIj5nc3RfY2xvY2tfYWRqdXN0X3VubG9ja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stQlJPQURDQVNUOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfQlJPQURDQVNUKCkiPkdTVF9DTE9DS19CUk9BRENBU1Q8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1DT05EOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfQ09ORCgpIj5HU1RfQ0xPQ0tfQ09ORDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLURJRkY6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19ESUZGKCkiPkdTVF9DTE9DS19ESUZGPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRU5UUlk6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19FTlRSWSgpIj5HU1RfQ0xPQ0tfRU5UUlk8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1FTlRSWS1DTE9DSzpDQVBTIiB0aXRsZT0iR1NUX0NMT0NLX0VOVFJZX0NMT0NLKCkiPkdTVF9DTE9DS19FTlRSWV9DTE9DSzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLUVOVFJZLUlOVEVSVkFMOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfRU5UUllfSU5URVJWQUwoKSI+R1NUX0NMT0NLX0VOVFJZX0lOVEVSVkFMPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRU5UUlktU1RBVFVTOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfRU5UUllfU1RBVFVTKCkiPkdTVF9DTE9DS19FTlRSWV9TVEFUVVM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1FTlRSWS1USU1FOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfRU5UUllfVElNRSgpIj5HU1RfQ0xPQ0tfRU5UUllfVElNRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLUVOVFJZLVRSQUNFLU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19FTlRSWV9UUkFDRV9OQU1FIj5HU1RfQ0xPQ0tfRU5UUllfVFJBQ0VfTkFNRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLUVOVFJZLVRZUEU6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19FTlRSWV9UWVBFKCkiPkdTVF9DTE9DS19FTlRSWV9UWVBFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRkxBR1M6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19GTEFHUygpIj5HU1RfQ0xPQ0tfRkxBR1M8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1nZXQtY2FsaWJyYXRpb24iIHRpdGxlPSJnc3RfY2xvY2tfZ2V0X2NhbGlicmF0aW9uICgpIj5nc3RfY2xvY2tfZ2V0X2NhbGlicmF0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stZ2V0LWludGVybmFsLXRpbWUiIHRpdGxlPSJnc3RfY2xvY2tfZ2V0X2ludGVybmFsX3RpbWUgKCkiPmdzdF9jbG9ja19nZXRfaW50ZXJuYWxfdGltZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWdldC1tYXN0ZXIiIHRpdGxlPSJnc3RfY2xvY2tfZ2V0X21hc3RlciAoKSI+Z3N0X2Nsb2NrX2dldF9tYXN0ZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1nZXQtcmVzb2x1dGlvbiIgdGl0bGU9ImdzdF9jbG9ja19nZXRfcmVzb2x1dGlvbiAoKSI+Z3N0X2Nsb2NrX2dldF9yZXNvbHV0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stZ2V0LXRpbWUiIHRpdGxlPSJnc3RfY2xvY2tfZ2V0X3RpbWUgKCkiPmdzdF9jbG9ja19nZXRfdGltZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLWNvbXBhcmUtZnVuYyIgdGl0bGU9ImdzdF9jbG9ja19pZF9jb21wYXJlX2Z1bmMgKCkiPmdzdF9jbG9ja19pZF9jb21wYXJlX2Z1bmM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1pZC1nZXQtdGltZSIgdGl0bGU9ImdzdF9jbG9ja19pZF9nZXRfdGltZSAoKSI+Z3N0X2Nsb2NrX2lkX2dldF90aW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2staWQtcmVmIiB0aXRsZT0iZ3N0X2Nsb2NrX2lkX3JlZiAoKSI+Z3N0X2Nsb2NrX2lkX3JlZjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLXVucmVmIiB0aXRsZT0iZ3N0X2Nsb2NrX2lkX3VucmVmICgpIj5nc3RfY2xvY2tfaWRfdW5yZWY8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1pZC11bnNjaGVkdWxlIiB0aXRsZT0iZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUgKCkiPmdzdF9jbG9ja19pZF91bnNjaGVkdWxlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2staWQtd2FpdCIgdGl0bGU9ImdzdF9jbG9ja19pZF93YWl0ICgpIj5nc3RfY2xvY2tfaWRfd2FpdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLXdhaXQtYXN5bmMiIHRpdGxlPSJnc3RfY2xvY2tfaWRfd2FpdF9hc3luYyAoKSI+Z3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1pZC13YWl0LWFzeW5jLWZ1bGwiIHRpdGxlPSJnc3RfY2xvY2tfaWRfd2FpdF9hc3luY19mdWxsICgpIj5nc3RfY2xvY2tfaWRfd2FpdF9hc3luY19mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stbmV3LXBlcmlvZGljLWlkIiB0aXRsZT0iZ3N0X2Nsb2NrX25ld19wZXJpb2RpY19pZCAoKSI+Z3N0X2Nsb2NrX25ld19wZXJpb2RpY19pZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLW5ldy1zaW5nbGUtc2hvdC1pZCIgdGl0bGU9ImdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKCkiPmdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1wZXJpb2RpYy1pZC1yZWluaXQiIHRpdGxlPSJnc3RfY2xvY2tfcGVyaW9kaWNfaWRfcmVpbml0ICgpIj5nc3RfY2xvY2tfcGVyaW9kaWNfaWRfcmVpbml0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stc2V0LWNhbGlicmF0aW9uIiB0aXRsZT0iZ3N0X2Nsb2NrX3NldF9jYWxpYnJhdGlvbiAoKSI+Z3N0X2Nsb2NrX3NldF9jYWxpYnJhdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLXNldC1tYXN0ZXIiIHRpdGxlPSJnc3RfY2xvY2tfc2V0X21hc3RlciAoKSI+Z3N0X2Nsb2NrX3NldF9tYXN0ZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1zZXQtcmVzb2x1dGlvbiIgdGl0bGU9ImdzdF9jbG9ja19zZXRfcmVzb2x1dGlvbiAoKSI+Z3N0X2Nsb2NrX3NldF9yZXNvbHV0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stc2luZ2xlLXNob3QtaWQtcmVpbml0IiB0aXRsZT0iZ3N0X2Nsb2NrX3NpbmdsZV9zaG90X2lkX3JlaW5pdCAoKSI+Z3N0X2Nsb2NrX3NpbmdsZV9zaG90X2lkX3JlaW5pdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLVRJTUVELVdBSVQ6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19USU1FRF9XQUlUKCkiPkdTVF9DTE9DS19USU1FRF9XQUlUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stVElNRS1JUy1WQUxJRDpDQVBTIiB0aXRsZT0iR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQoKSI+R1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1USU1FLU5PTkU6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19USU1FX05PTkUiPkdTVF9DTE9DS19USU1FX05PTkU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay11bmFkanVzdC11bmxvY2tlZCIgdGl0bGU9ImdzdF9jbG9ja191bmFkanVzdF91bmxvY2tlZCAoKSI+Z3N0X2Nsb2NrX3VuYWRqdXN0X3VubG9ja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stV0FJVDpDQVBTIiB0aXRsZT0iR1NUX0NMT0NLX1dBSVQoKSI+R1NUX0NMT0NLX1dBSVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR3N0Q29yZUVycm9yIiB0aXRsZT0iZW51bSBHc3RDb3JlRXJyb3IiPkdzdENvcmVFcnJvcjwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCIgdGl0bGU9IkdzdEdFcnJvciI+R3N0R0Vycm9yPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtQ09SRS1FUlJPUjpDQVBTIiB0aXRsZT0iR1NUX0NPUkVfRVJST1IiPkdTVF9DT1JFX0VSUk9SPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCIgdGl0bGU9IkdzdEdFcnJvciI+R3N0R0Vycm9yPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGEgbmFtZT0iaWR4RCI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkQ8L2gzPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPkdzdERhdGVUaW1lPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLWdldC1kYXkiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX2dldF9kYXkgKCkiPmdzdF9kYXRlX3RpbWVfZ2V0X2RheTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLWdldC1ob3VyIiB0aXRsZT0iZ3N0X2RhdGVfdGltZV9nZXRfaG91ciAoKSI+Z3N0X2RhdGVfdGltZV9nZXRfaG91cjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLWdldC1taWNyb3NlY29uZCIgdGl0bGU9ImdzdF9kYXRlX3RpbWVfZ2V0X21pY3Jvc2Vjb25kICgpIj5nc3RfZGF0ZV90aW1lX2dldF9taWNyb3NlY29uZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLWdldC1taW51dGUiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX2dldF9taW51dGUgKCkiPmdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLWdldC1tb250aCIgdGl0bGU9ImdzdF9kYXRlX3RpbWVfZ2V0X21vbnRoICgpIj5nc3RfZGF0ZV90aW1lX2dldF9tb250aDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLWdldC1zZWNvbmQiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX2dldF9zZWNvbmQgKCkiPmdzdF9kYXRlX3RpbWVfZ2V0X3NlY29uZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLWdldC10aW1lLXpvbmUtb2Zmc2V0IiB0aXRsZT0iZ3N0X2RhdGVfdGltZV9nZXRfdGltZV96b25lX29mZnNldCAoKSI+Z3N0X2RhdGVfdGltZV9nZXRfdGltZV96b25lX29mZnNldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLWdldC15ZWFyIiB0aXRsZT0iZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoKSI+Z3N0X2RhdGVfdGltZV9nZXRfeWVhcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLW5ldyIgdGl0bGU9ImdzdF9kYXRlX3RpbWVfbmV3ICgpIj5nc3RfZGF0ZV90aW1lX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLW5ldy1mcm9tLXVuaXgtZXBvY2gtbG9jYWwtdGltZSIgdGl0bGU9ImdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF9sb2NhbF90aW1lICgpIj5nc3RfZGF0ZV90aW1lX25ld19mcm9tX3VuaXhfZXBvY2hfbG9jYWxfdGltZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLW5ldy1mcm9tLXVuaXgtZXBvY2gtdXRjIiB0aXRsZT0iZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV91bml4X2Vwb2NoX3V0YyAoKSI+Z3N0X2RhdGVfdGltZV9uZXdfZnJvbV91bml4X2Vwb2NoX3V0YzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLW5ldy1sb2NhbC10aW1lIiB0aXRsZT0iZ3N0X2RhdGVfdGltZV9uZXdfbG9jYWxfdGltZSAoKSI+Z3N0X2RhdGVfdGltZV9uZXdfbG9jYWxfdGltZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLW5ldy1ub3ctbG9jYWwtdGltZSIgdGl0bGU9ImdzdF9kYXRlX3RpbWVfbmV3X25vd19sb2NhbF90aW1lICgpIj5nc3RfZGF0ZV90aW1lX25ld19ub3dfbG9jYWxfdGltZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLW5ldy1ub3ctdXRjIiB0aXRsZT0iZ3N0X2RhdGVfdGltZV9uZXdfbm93X3V0YyAoKSI+Z3N0X2RhdGVfdGltZV9uZXdfbm93X3V0YzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLXJlZiIgdGl0bGU9ImdzdF9kYXRlX3RpbWVfcmVmICgpIj5nc3RfZGF0ZV90aW1lX3JlZjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLXVucmVmIiB0aXRsZT0iZ3N0X2RhdGVfdGltZV91bnJlZiAoKSI+Z3N0X2RhdGVfdGltZV91bnJlZjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRzpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHKCkiPkdTVF9ERUJVRzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnQ2F0ZWdvcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0RGVidWdDYXRlZ29yeSI+R3N0RGVidWdDYXRlZ29yeTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NvbG9yRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdERlYnVnQ29sb3JGbGFncyI+R3N0RGVidWdDb2xvckZsYWdzPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0dyYXBoRGV0YWlscyIgdGl0bGU9ImVudW0gR3N0RGVidWdHcmFwaERldGFpbHMiPkdzdERlYnVnR3JhcGhEZXRhaWxzPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0xldmVsIiB0aXRsZT0iZW51bSBHc3REZWJ1Z0xldmVsIj5Hc3REZWJ1Z0xldmVsPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctYWRkLWxvZy1mdW5jdGlvbiIgdGl0bGU9ImdzdF9kZWJ1Z19hZGRfbG9nX2Z1bmN0aW9uICgpIj5nc3RfZGVidWdfYWRkX2xvZ19mdW5jdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1CSU4tVE8tRE9ULUZJTEU6Q0FQUyIgdGl0bGU9IkdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEUoKSI+R1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1CSU4tVE8tRE9ULUZJTEUtV0lUSC1UUzpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKCkiPkdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1DQVRFR09SWTpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX0NBVEVHT1JZKCkiPkdTVF9ERUJVR19DQVRFR09SWTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1DQVRFR09SWS1FWFRFUk46Q0FQUyIgdGl0bGU9IkdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4oKSI+R1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1jYXRlZ29yeS1mcmVlIiB0aXRsZT0iZ3N0X2RlYnVnX2NhdGVnb3J5X2ZyZWUgKCkiPmdzdF9kZWJ1Z19jYXRlZ29yeV9mcmVlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUNBVEVHT1JZLUdFVDpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX0NBVEVHT1JZX0dFVCgpIj5HU1RfREVCVUdfQ0FURUdPUllfR0VUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWNhdGVnb3J5LWdldC1jb2xvciIgdGl0bGU9ImdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfY29sb3IgKCkiPmdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfY29sb3I8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctY2F0ZWdvcnktZ2V0LWRlc2NyaXB0aW9uIiB0aXRsZT0iZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9kZXNjcmlwdGlvbiAoKSI+Z3N0X2RlYnVnX2NhdGVnb3J5X2dldF9kZXNjcmlwdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1jYXRlZ29yeS1nZXQtbmFtZSIgdGl0bGU9ImdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfbmFtZSAoKSI+Z3N0X2RlYnVnX2NhdGVnb3J5X2dldF9uYW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWNhdGVnb3J5LWdldC10aHJlc2hvbGQiIHRpdGxlPSJnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZCAoKSI+Z3N0X2RlYnVnX2NhdGVnb3J5X2dldF90aHJlc2hvbGQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctQ0FURUdPUlktSU5JVDpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQoKSI+R1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctY2F0ZWdvcnktcmVzZXQtdGhyZXNob2xkIiB0aXRsZT0iZ3N0X2RlYnVnX2NhdGVnb3J5X3Jlc2V0X3RocmVzaG9sZCAoKSI+Z3N0X2RlYnVnX2NhdGVnb3J5X3Jlc2V0X3RocmVzaG9sZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1jYXRlZ29yeS1zZXQtdGhyZXNob2xkIiB0aXRsZT0iZ3N0X2RlYnVnX2NhdGVnb3J5X3NldF90aHJlc2hvbGQgKCkiPmdzdF9kZWJ1Z19jYXRlZ29yeV9zZXRfdGhyZXNob2xkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUNBVEVHT1JZLVNUQVRJQzpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQygpIj5HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWNvbnN0cnVjdC10ZXJtLWNvbG9yIiB0aXRsZT0iZ3N0X2RlYnVnX2NvbnN0cnVjdF90ZXJtX2NvbG9yICgpIj5nc3RfZGVidWdfY29uc3RydWN0X3Rlcm1fY29sb3I8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctY29uc3RydWN0LXdpbi1jb2xvciIgdGl0bGU9ImdzdF9kZWJ1Z19jb25zdHJ1Y3Rfd2luX2NvbG9yICgpIj5nc3RfZGVidWdfY29uc3RydWN0X3dpbl9jb2xvcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1GVU5DUFRSOkNBUFMiIHRpdGxlPSJHU1RfREVCVUdfRlVOQ1BUUigpIj5HU1RfREVCVUdfRlVOQ1BUUjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1GVU5DUFRSLU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9ERUJVR19GVU5DUFRSX05BTUUoKSI+R1NUX0RFQlVHX0ZVTkNQVFJfTkFNRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1nZXQtYWxsLWNhdGVnb3JpZXMiIHRpdGxlPSJnc3RfZGVidWdfZ2V0X2FsbF9jYXRlZ29yaWVzICgpIj5nc3RfZGVidWdfZ2V0X2FsbF9jYXRlZ29yaWVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWdldC1kZWZhdWx0LXRocmVzaG9sZCIgdGl0bGU9ImdzdF9kZWJ1Z19nZXRfZGVmYXVsdF90aHJlc2hvbGQgKCkiPmdzdF9kZWJ1Z19nZXRfZGVmYXVsdF90aHJlc2hvbGQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctaXMtYWN0aXZlIiB0aXRsZT0iZ3N0X2RlYnVnX2lzX2FjdGl2ZSAoKSI+Z3N0X2RlYnVnX2lzX2FjdGl2ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1pcy1jb2xvcmVkIiB0aXRsZT0iZ3N0X2RlYnVnX2lzX2NvbG9yZWQgKCkiPmdzdF9kZWJ1Z19pc19jb2xvcmVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWxldmVsLWdldC1uYW1lIiB0aXRsZT0iZ3N0X2RlYnVnX2xldmVsX2dldF9uYW1lICgpIj5nc3RfZGVidWdfbGV2ZWxfZ2V0X25hbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctbG9nIiB0aXRsZT0iZ3N0X2RlYnVnX2xvZyAoKSI+Z3N0X2RlYnVnX2xvZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1sb2ctZGVmYXVsdCIgdGl0bGU9ImdzdF9kZWJ1Z19sb2dfZGVmYXVsdCAoKSI+Z3N0X2RlYnVnX2xvZ19kZWZhdWx0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWxvZy12YWxpc3QiIHRpdGxlPSJnc3RfZGVidWdfbG9nX3ZhbGlzdCAoKSI+Z3N0X2RlYnVnX2xvZ192YWxpc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctbWVzc2FnZS1nZXQiIHRpdGxlPSJnc3RfZGVidWdfbWVzc2FnZV9nZXQgKCkiPmdzdF9kZWJ1Z19tZXNzYWdlX2dldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1PQkpFQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9ERUJVR19PQkpFQ1QoKSI+R1NUX0RFQlVHX09CSkVDVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1QQUQtTkFNRTpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX1BBRF9OQU1FKCkiPkdTVF9ERUJVR19QQURfTkFNRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1wcmludC1zdGFjay10cmFjZSIgdGl0bGU9ImdzdF9kZWJ1Z19wcmludF9zdGFja190cmFjZSAoKSI+Z3N0X2RlYnVnX3ByaW50X3N0YWNrX3RyYWNlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLVJFR0lTVEVSLUZVTkNQVFI6Q0FQUyIgdGl0bGU9IkdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSKCkiPkdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLXJlbW92ZS1sb2ctZnVuY3Rpb24iIHRpdGxlPSJnc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbiAoKSI+Z3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctcmVtb3ZlLWxvZy1mdW5jdGlvbi1ieS1kYXRhIiB0aXRsZT0iZ3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb25fYnlfZGF0YSAoKSI+Z3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb25fYnlfZGF0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1zZXQtYWN0aXZlIiB0aXRsZT0iZ3N0X2RlYnVnX3NldF9hY3RpdmUgKCkiPmdzdF9kZWJ1Z19zZXRfYWN0aXZlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLXNldC1jb2xvcmVkIiB0aXRsZT0iZ3N0X2RlYnVnX3NldF9jb2xvcmVkICgpIj5nc3RfZGVidWdfc2V0X2NvbG9yZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctc2V0LWRlZmF1bHQtdGhyZXNob2xkIiB0aXRsZT0iZ3N0X2RlYnVnX3NldF9kZWZhdWx0X3RocmVzaG9sZCAoKSI+Z3N0X2RlYnVnX3NldF9kZWZhdWx0X3RocmVzaG9sZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1zZXQtdGhyZXNob2xkLWZvci1uYW1lIiB0aXRsZT0iZ3N0X2RlYnVnX3NldF90aHJlc2hvbGRfZm9yX25hbWUgKCkiPmdzdF9kZWJ1Z19zZXRfdGhyZXNob2xkX2Zvcl9uYW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLXVuc2V0LXRocmVzaG9sZC1mb3ItbmFtZSIgdGl0bGU9ImdzdF9kZWJ1Z191bnNldF90aHJlc2hvbGRfZm9yX25hbWUgKCkiPmdzdF9kZWJ1Z191bnNldF90aHJlc2hvbGRfZm9yX25hbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtZGVmYXVsdC1yZWdpc3RyeS1hZGQtcGF0aCIgdGl0bGU9ImdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2FkZF9wYXRoKCkiPmdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2FkZF9wYXRoPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+R3N0UmVnaXN0cnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtZGVmYXVsdC1yZWdpc3RyeS1hZGQtcGx1Z2luIiB0aXRsZT0iZ3N0X2RlZmF1bHRfcmVnaXN0cnlfYWRkX3BsdWdpbigpIj5nc3RfZGVmYXVsdF9yZWdpc3RyeV9hZGRfcGx1Z2luPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+R3N0UmVnaXN0cnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtZGVmYXVsdC1yZWdpc3RyeS1jaGVjay1mZWF0dXJlLXZlcnNpb24iIHRpdGxlPSJnc3RfZGVmYXVsdF9yZWdpc3RyeV9jaGVja19mZWF0dXJlX3ZlcnNpb24gKCkiPmdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2NoZWNrX2ZlYXR1cmVfdmVyc2lvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPkdzdFJlZ2lzdHJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LWRlZmF1bHQtcmVnaXN0cnktZmVhdHVyZS1maWx0ZXIiIHRpdGxlPSJnc3RfZGVmYXVsdF9yZWdpc3RyeV9mZWF0dXJlX2ZpbHRlcigpIj5nc3RfZGVmYXVsdF9yZWdpc3RyeV9mZWF0dXJlX2ZpbHRlcjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPkdzdFJlZ2lzdHJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LWRlZmF1bHQtcmVnaXN0cnktZmluZC1mZWF0dXJlIiB0aXRsZT0iZ3N0X2RlZmF1bHRfcmVnaXN0cnlfZmluZF9mZWF0dXJlKCkiPmdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2ZpbmRfZmVhdHVyZTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPkdzdFJlZ2lzdHJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LWRlZmF1bHQtcmVnaXN0cnktZmluZC1wbHVnaW4iIHRpdGxlPSJnc3RfZGVmYXVsdF9yZWdpc3RyeV9maW5kX3BsdWdpbigpIj5nc3RfZGVmYXVsdF9yZWdpc3RyeV9maW5kX3BsdWdpbjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPkdzdFJlZ2lzdHJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LWRlZmF1bHQtcmVnaXN0cnktZ2V0LWZlYXR1cmUtbGlzdC1jb29raWUiIHRpdGxlPSJnc3RfZGVmYXVsdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2Nvb2tpZSI+Z3N0X2RlZmF1bHRfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9jb29raWU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij5Hc3RSZWdpc3RyeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1kZWZhdWx0LXJlZ2lzdHJ5LWdldC1wYXRoLWxpc3QiIHRpdGxlPSJnc3RfZGVmYXVsdF9yZWdpc3RyeV9nZXRfcGF0aF9saXN0Ij5nc3RfZGVmYXVsdF9yZWdpc3RyeV9nZXRfcGF0aF9saXN0PC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+R3N0UmVnaXN0cnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtZGVmYXVsdC1yZWdpc3RyeS1nZXQtcGx1Z2luLWxpc3QiIHRpdGxlPSJnc3RfZGVmYXVsdF9yZWdpc3RyeV9nZXRfcGx1Z2luX2xpc3QiPmdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2dldF9wbHVnaW5fbGlzdDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPkdzdFJlZ2lzdHJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR1NULURFRklORS1NSU5JLU9CSkVDVC1UWVBFOkNBUFMiIHRpdGxlPSJHU1RfREVGSU5FX01JTklfT0JKRUNUX1RZUEUoKSI+R1NUX0RFRklORV9NSU5JX09CSkVDVF9UWVBFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RNaW5pT2JqZWN0Ij5Hc3RNaW5pT2JqZWN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtZGVpbml0IiB0aXRsZT0iZ3N0X2RlaW5pdCAoKSI+Z3N0X2RlaW5pdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwiIHRpdGxlPSJHc3QiPkdzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItZ3N0Y29uZmlnLmh0bWwjR1NULURJU0FCTEUtQUxMT0MtVFJBQ0U6Q0FQUyIgdGl0bGU9IkdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFIj5HU1RfRElTQUJMRV9BTExPQ19UUkFDRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItZ3N0Y29uZmlnLmh0bWwiIHRpdGxlPSJnc3Rjb25maWciPmdzdGNvbmZpZzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItZ3N0Y29uZmlnLmh0bWwjR1NULURJU0FCTEUtR1NULURFQlVHOkNBUFMiIHRpdGxlPSJHU1RfRElTQUJMRV9HU1RfREVCVUciPkdTVF9ESVNBQkxFX0dTVF9ERUJVRzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItZ3N0Y29uZmlnLmh0bWwiIHRpdGxlPSJnc3Rjb25maWciPmdzdGNvbmZpZzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItZ3N0Y29uZmlnLmh0bWwjR1NULURJU0FCTEUtUEFSU0U6Q0FQUyIgdGl0bGU9IkdTVF9ESVNBQkxFX1BBUlNFIj5HU1RfRElTQUJMRV9QQVJTRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItZ3N0Y29uZmlnLmh0bWwiIHRpdGxlPSJnc3Rjb25maWciPmdzdGNvbmZpZzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItZ3N0Y29uZmlnLmh0bWwjR1NULURJU0FCTEUtUExVR0lOOkNBUFMiIHRpdGxlPSJHU1RfRElTQUJMRV9QTFVHSU4iPkdTVF9ESVNBQkxFX1BMVUdJTjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItZ3N0Y29uZmlnLmh0bWwiIHRpdGxlPSJnc3Rjb25maWciPmdzdGNvbmZpZzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItZ3N0Y29uZmlnLmh0bWwjR1NULURJU0FCTEUtUkVHSVNUUlk6Q0FQUyIgdGl0bGU9IkdTVF9ESVNBQkxFX1JFR0lTVFJZIj5HU1RfRElTQUJMRV9SRUdJU1RSWTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItZ3N0Y29uZmlnLmh0bWwiIHRpdGxlPSJnc3Rjb25maWciPmdzdGNvbmZpZzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItZ3N0Y29uZmlnLmh0bWwjR1NULURJU0FCTEUtVFJBQ0U6Q0FQUyIgdGl0bGU9IkdTVF9ESVNBQkxFX1RSQUNFIj5HU1RfRElTQUJMRV9UUkFDRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItZ3N0Y29uZmlnLmh0bWwiIHRpdGxlPSJnc3Rjb25maWciPmdzdGNvbmZpZzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxhIG5hbWU9ImlkeEUiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5FPC9oMz4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1uby1tb3JlLXBhZHMiIHRpdGxlPSdUaGUgIm5vLW1vcmUtcGFkcyIgc2lnbmFsJz5Hc3RFbGVtZW50Ojpuby1tb3JlLXBhZHM8L2E+LCBvYmplY3Qgc2lnbmFsIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXBhZC1hZGRlZCIgdGl0bGU9J1RoZSAicGFkLWFkZGVkIiBzaWduYWwnPkdzdEVsZW1lbnQ6OnBhZC1hZGRlZDwvYT4sIG9iamVjdCBzaWduYWwgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtcGFkLXJlbW92ZWQiIHRpdGxlPSdUaGUgInBhZC1yZW1vdmVkIiBzaWduYWwnPkdzdEVsZW1lbnQ6OnBhZC1yZW1vdmVkPC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudENsYXNzIiB0aXRsZT0ic3RydWN0IEdzdEVsZW1lbnRDbGFzcyI+R3N0RWxlbWVudENsYXNzPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR3N0RWxlbWVudEZhY3Rvcnktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGUiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlIj5Hc3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlPC9hPiwgdHlwZWRlZiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudEZsYWdzIiB0aXRsZT0iZW51bSBHc3RFbGVtZW50RmxhZ3MiPkdzdEVsZW1lbnRGbGFnczwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWFib3J0LXN0YXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfYWJvcnRfc3RhdGUgKCkiPmdzdF9lbGVtZW50X2Fib3J0X3N0YXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWFkZC1wYWQiIHRpdGxlPSJnc3RfZWxlbWVudF9hZGRfcGFkICgpIj5nc3RfZWxlbWVudF9hZGRfcGFkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULUJVUzpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfQlVTKCkiPkdTVF9FTEVNRU5UX0JVUzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jaGFuZ2Utc3RhdGUiIHRpdGxlPSJnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUgKCkiPmdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jbGFzcy1hZGQtbWV0YWRhdGEiIHRpdGxlPSJnc3RfZWxlbWVudF9jbGFzc19hZGRfbWV0YWRhdGEgKCkiPmdzdF9lbGVtZW50X2NsYXNzX2FkZF9tZXRhZGF0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jbGFzcy1hZGQtcGFkLXRlbXBsYXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoKSI+Z3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jbGFzcy1nZXQtbWV0YWRhdGEiIHRpdGxlPSJnc3RfZWxlbWVudF9jbGFzc19nZXRfbWV0YWRhdGEgKCkiPmdzdF9lbGVtZW50X2NsYXNzX2dldF9tZXRhZGF0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jbGFzcy1nZXQtcGFkLXRlbXBsYXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoKSI+Z3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jbGFzcy1nZXQtcGFkLXRlbXBsYXRlLWxpc3QiIHRpdGxlPSJnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlX2xpc3QgKCkiPmdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGVfbGlzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jbGFzcy1pbnN0YWxsLXN0ZC1wcm9wcyIgdGl0bGU9ImdzdF9lbGVtZW50X2NsYXNzX2luc3RhbGxfc3RkX3Byb3BzICgpIj5nc3RfZWxlbWVudF9jbGFzc19pbnN0YWxsX3N0ZF9wcm9wczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jbGFzcy1zZXQtbWV0YWRhdGEiIHRpdGxlPSJnc3RfZWxlbWVudF9jbGFzc19zZXRfbWV0YWRhdGEgKCkiPmdzdF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1DTE9DSzpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfQ0xPQ0soKSI+R1NUX0VMRU1FTlRfQ0xPQ0s8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY29udGludWUtc3RhdGUiIHRpdGxlPSJnc3RfZWxlbWVudF9jb250aW51ZV9zdGF0ZSAoKSI+Z3N0X2VsZW1lbnRfY29udGludWVfc3RhdGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY3JlYXRlLWFsbC1wYWRzIiB0aXRsZT0iZ3N0X2VsZW1lbnRfY3JlYXRlX2FsbF9wYWRzICgpIj5nc3RfZWxlbWVudF9jcmVhdGVfYWxsX3BhZHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtRVJST1I6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0VSUk9SKCkiPkdTVF9FTEVNRU5UX0VSUk9SPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWNhbi1zaW5rLWFsbC1jYXBzIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc2lua19hbGxfY2FwcyAoKSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc2lua19hbGxfY2FwczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPkdzdEVsZW1lbnRGYWN0b3J5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1jYW4tc2luay1hbnktY2FwcyIgdGl0bGU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NpbmtfYW55X2NhcHMgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NpbmtfYW55X2NhcHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktY2FuLXNyYy1hbGwtY2FwcyIgdGl0bGU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NyY19hbGxfY2FwcyAoKSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc3JjX2FsbF9jYXBzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+R3N0RWxlbWVudEZhY3Rvcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWNhbi1zcmMtYW55LWNhcHMiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zcmNfYW55X2NhcHMgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NyY19hbnlfY2FwczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPkdzdEVsZW1lbnRGYWN0b3J5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1jcmVhdGUiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X2NyZWF0ZSAoKSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9jcmVhdGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktZmluZCIgdGl0bGU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZCAoKSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9maW5kPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+R3N0RWxlbWVudEZhY3Rvcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWdldC1lbGVtZW50LXR5cGUiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9lbGVtZW50X3R5cGUgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X2VsZW1lbnRfdHlwZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPkdzdEVsZW1lbnRGYWN0b3J5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1nZXQtbWV0YWRhdGEiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YSAoKSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbWV0YWRhdGE8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktZ2V0LW51bS1wYWQtdGVtcGxhdGVzIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbnVtX3BhZF90ZW1wbGF0ZXMgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X251bV9wYWRfdGVtcGxhdGVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+R3N0RWxlbWVudEZhY3Rvcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWdldC1zdGF0aWMtcGFkLXRlbXBsYXRlcyIgdGl0bGU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3N0YXRpY19wYWRfdGVtcGxhdGVzICgpIj5nc3RfZWxlbWVudF9mYWN0b3J5X2dldF9zdGF0aWNfcGFkX3RlbXBsYXRlczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPkdzdEVsZW1lbnRGYWN0b3J5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1nZXQtdXJpLXByb3RvY29scyIgdGl0bGU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3VyaV9wcm90b2NvbHMgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3VyaV9wcm90b2NvbHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktZ2V0LXVyaS10eXBlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfdXJpX3R5cGUgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3VyaV90eXBlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+R3N0RWxlbWVudEZhY3Rvcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWhhcy1pbnRlcmZhY2UiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X2hhc19pbnRlcmZhY2UgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfaGFzX2ludGVyZmFjZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPkdzdEVsZW1lbnRGYWN0b3J5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1saXN0LWZpbHRlciIgdGl0bGU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9maWx0ZXIgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9maWx0ZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktbGlzdC1nZXQtZWxlbWVudHMiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZ2V0X2VsZW1lbnRzICgpIj5nc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZ2V0X2VsZW1lbnRzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+R3N0RWxlbWVudEZhY3Rvcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWxpc3QtaXMtdHlwZSIgdGl0bGU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9pc190eXBlICgpIj5nc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfaXNfdHlwZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPkdzdEVsZW1lbnRGYWN0b3J5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1tYWtlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgpIj5nc3RfZWxlbWVudF9mYWN0b3J5X21ha2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1BTlk6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9BTlkiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9BTlk8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1BVURJT1ZJREVPLVNJTktTOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQVVESU9WSURFT19TSU5LUyI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0FVRElPVklERU9fU0lOS1M8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1BVURJTy1FTkNPREVSOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQVVESU9fRU5DT0RFUiI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0FVRElPX0VOQ09ERVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1ERUNPREFCTEU6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNPREFCTEUiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNPREFCTEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1ERUNPREVSOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVDT0RFUiI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09ERVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1ERU1VWEVSOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVNVVhFUiI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFTVVYRVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1ERVBBWUxPQURFUjpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFUEFZTE9BREVSIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVQQVlMT0FERVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1FTkNPREVSOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfRU5DT0RFUiI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0VOQ09ERVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1GT1JNQVRURVI6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9GT1JNQVRURVIiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9GT1JNQVRURVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NQVgtRUxFTUVOVFM6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NQVhfRUxFTUVOVFMiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NQVhfRUxFTUVOVFM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NRURJQS1BTlk6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9BTlkiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9BTlk8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NRURJQS1BVURJTzpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX0FVRElPIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQVVESU88L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NRURJQS1JTUFHRTpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX0lNQUdFIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfSU1BR0U8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NRURJQS1NRVRBREFUQTpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX01FVEFEQVRBIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfTUVUQURBVEE8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NRURJQS1TVUJUSVRMRTpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX1NVQlRJVExFIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfU1VCVElUTEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NRURJQS1WSURFTzpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX1ZJREVPIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfVklERU88L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NVVhFUjpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01VWEVSIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTVVYRVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1QQVJTRVI6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVJTRVIiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVJTRVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1QQVlMT0FERVI6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVlMT0FERVIiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVlMT0FERVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1TSU5LOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfU0lOSyI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1NJTks8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1TUkM6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9TUkMiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9TUkM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1WSURFTy1FTkNPREVSOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfVklERU9fRU5DT0RFUiI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1ZJREVPX0VOQ09ERVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZm91bmQtdGFncyIgdGl0bGU9ImdzdF9lbGVtZW50X2ZvdW5kX3RhZ3MgKCkiPmdzdF9lbGVtZW50X2ZvdW5kX3RhZ3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZm91bmQtdGFncy1mb3ItcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZm91bmRfdGFnc19mb3JfcGFkICgpIj5nc3RfZWxlbWVudF9mb3VuZF90YWdzX2Zvcl9wYWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWJhc2UtdGltZSIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9iYXNlX3RpbWUgKCkiPmdzdF9lbGVtZW50X2dldF9iYXNlX3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWJ1cyIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9idXMgKCkiPmdzdF9lbGVtZW50X2dldF9idXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWNsb2NrIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X2Nsb2NrICgpIj5nc3RfZWxlbWVudF9nZXRfY2xvY2s8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWNvbXBhdGlibGUtcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkICgpIj5nc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWNvbXBhdGlibGUtcGFkLXRlbXBsYXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkX3RlbXBsYXRlICgpIj5nc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWRfdGVtcGxhdGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWZhY3RvcnkiIHRpdGxlPSJnc3RfZWxlbWVudF9nZXRfZmFjdG9yeSAoKSI+Z3N0X2VsZW1lbnRfZ2V0X2ZhY3Rvcnk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWluZGV4IiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X2luZGV4ICgpIj5nc3RfZWxlbWVudF9nZXRfaW5kZXg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LW5hbWUiIHRpdGxlPSJnc3RfZWxlbWVudF9nZXRfbmFtZSgpIj5nc3RfZWxlbWVudF9nZXRfbmFtZTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtcGFyZW50IiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X3BhcmVudCgpIj5nc3RfZWxlbWVudF9nZXRfcGFyZW50PC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1xdWVyeS10eXBlcyIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9xdWVyeV90eXBlcyAoKSI+Z3N0X2VsZW1lbnRfZ2V0X3F1ZXJ5X3R5cGVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1yZXF1ZXN0LXBhZCIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoKSI+Z3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1zdGFydC10aW1lIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X3N0YXJ0X3RpbWUgKCkiPmdzdF9lbGVtZW50X2dldF9zdGFydF90aW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1zdGF0ZSIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9zdGF0ZSAoKSI+Z3N0X2VsZW1lbnRfZ2V0X3N0YXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1zdGF0aWMtcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKCkiPmdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULUlORk86Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0lORk8oKSI+R1NUX0VMRU1FTlRfSU5GTzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1pcy1pbmRleGFibGUiIHRpdGxlPSJnc3RfZWxlbWVudF9pc19pbmRleGFibGUgKCkiPmdzdF9lbGVtZW50X2lzX2luZGV4YWJsZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1JUy1MT0NLRUQtU1RBVEU6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0lTX0xPQ0tFRF9TVEFURSgpIj5HU1RfRUxFTUVOVF9JU19MT0NLRURfU1RBVEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtaXMtbG9ja2VkLXN0YXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfaXNfbG9ja2VkX3N0YXRlICgpIj5nc3RfZWxlbWVudF9pc19sb2NrZWRfc3RhdGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtaXRlcmF0ZS1wYWRzIiB0aXRsZT0iZ3N0X2VsZW1lbnRfaXRlcmF0ZV9wYWRzICgpIj5nc3RfZWxlbWVudF9pdGVyYXRlX3BhZHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtaXRlcmF0ZS1zaW5rLXBhZHMiIHRpdGxlPSJnc3RfZWxlbWVudF9pdGVyYXRlX3NpbmtfcGFkcyAoKSI+Z3N0X2VsZW1lbnRfaXRlcmF0ZV9zaW5rX3BhZHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtaXRlcmF0ZS1zcmMtcGFkcyIgdGl0bGU9ImdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMgKCkiPmdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbGluayIgdGl0bGU9ImdzdF9lbGVtZW50X2xpbmsgKCkiPmdzdF9lbGVtZW50X2xpbms8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbGluay1maWx0ZXJlZCIgdGl0bGU9ImdzdF9lbGVtZW50X2xpbmtfZmlsdGVyZWQgKCkiPmdzdF9lbGVtZW50X2xpbmtfZmlsdGVyZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbGluay1tYW55IiB0aXRsZT0iZ3N0X2VsZW1lbnRfbGlua19tYW55ICgpIj5nc3RfZWxlbWVudF9saW5rX21hbnk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbGluay1wYWRzIiB0aXRsZT0iZ3N0X2VsZW1lbnRfbGlua19wYWRzICgpIj5nc3RfZWxlbWVudF9saW5rX3BhZHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbGluay1wYWRzLWZpbHRlcmVkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfbGlua19wYWRzX2ZpbHRlcmVkICgpIj5nc3RfZWxlbWVudF9saW5rX3BhZHNfZmlsdGVyZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbGluay1wYWRzLWZ1bGwiIHRpdGxlPSJnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbCAoKSI+Z3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbG9zdC1zdGF0ZSIgdGl0bGU9ImdzdF9lbGVtZW50X2xvc3Rfc3RhdGUgKCkiPmdzdF9lbGVtZW50X2xvc3Rfc3RhdGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC1lbGVtZW50LW1ha2UtZnJvbS11cmkiIHRpdGxlPSJnc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpICgpIj5nc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwiIHRpdGxlPSJHc3RVcmlIYW5kbGVyIj5Hc3RVcmlIYW5kbGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1tZXNzYWdlLWZ1bGwiIHRpdGxlPSJnc3RfZWxlbWVudF9tZXNzYWdlX2Z1bGwgKCkiPmdzdF9lbGVtZW50X21lc3NhZ2VfZnVsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1NRVRBREFUQS1BVVRIT1I6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX01FVEFEQVRBX0FVVEhPUiI+R1NUX0VMRU1FTlRfTUVUQURBVEFfQVVUSE9SPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULU1FVEFEQVRBLURFU0NSSVBUSU9OOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9NRVRBREFUQV9ERVNDUklQVElPTiI+R1NUX0VMRU1FTlRfTUVUQURBVEFfREVTQ1JJUFRJT048L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtTUVUQURBVEEtRE9DLVVSSTpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfTUVUQURBVEFfRE9DX1VSSSI+R1NUX0VMRU1FTlRfTUVUQURBVEFfRE9DX1VSSTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1NRVRBREFUQS1JQ09OLU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX01FVEFEQVRBX0lDT05fTkFNRSI+R1NUX0VMRU1FTlRfTUVUQURBVEFfSUNPTl9OQU1FPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULU1FVEFEQVRBLUtMQVNTOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9NRVRBREFUQV9LTEFTUyI+R1NUX0VMRU1FTlRfTUVUQURBVEFfS0xBU1M8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtTUVUQURBVEEtTE9OR05BTUU6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX01FVEFEQVRBX0xPTkdOQU1FIj5HU1RfRUxFTUVOVF9NRVRBREFUQV9MT05HTkFNRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1OQU1FOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9OQU1FKCkiPkdTVF9FTEVNRU5UX05BTUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbm8tbW9yZS1wYWRzIiB0aXRsZT0iZ3N0X2VsZW1lbnRfbm9fbW9yZV9wYWRzICgpIj5nc3RfZWxlbWVudF9ub19tb3JlX3BhZHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtUEFEUzpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfUEFEUygpIj5HU1RfRUxFTUVOVF9QQURTPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULVBBUkVOVDpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfUEFSRU5UKCkiPkdTVF9FTEVNRU5UX1BBUkVOVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1wb3N0LW1lc3NhZ2UiIHRpdGxlPSJnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKCkiPmdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1wcm92aWRlcy1jbG9jayIgdGl0bGU9ImdzdF9lbGVtZW50X3Byb3ZpZGVzX2Nsb2NrICgpIj5nc3RfZWxlbWVudF9wcm92aWRlc19jbG9jazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1wcm92aWRlLWNsb2NrIiB0aXRsZT0iZ3N0X2VsZW1lbnRfcHJvdmlkZV9jbG9jayAoKSI+Z3N0X2VsZW1lbnRfcHJvdmlkZV9jbG9jazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1xdWVyeSIgdGl0bGU9ImdzdF9lbGVtZW50X3F1ZXJ5ICgpIj5nc3RfZWxlbWVudF9xdWVyeTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1xdWVyeS1jb252ZXJ0IiB0aXRsZT0iZ3N0X2VsZW1lbnRfcXVlcnlfY29udmVydCAoKSI+Z3N0X2VsZW1lbnRfcXVlcnlfY29udmVydDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1xdWVyeS1kdXJhdGlvbiIgdGl0bGU9ImdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uICgpIj5nc3RfZWxlbWVudF9xdWVyeV9kdXJhdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1xdWVyeS1wb3NpdGlvbiIgdGl0bGU9ImdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uICgpIj5nc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtcmVnaXN0ZXIiIHRpdGxlPSJnc3RfZWxlbWVudF9yZWdpc3RlciAoKSI+Z3N0X2VsZW1lbnRfcmVnaXN0ZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcmVsZWFzZS1yZXF1ZXN0LXBhZCIgdGl0bGU9ImdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKCkiPmdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcmVtb3ZlLXBhZCIgdGl0bGU9ImdzdF9lbGVtZW50X3JlbW92ZV9wYWQgKCkiPmdzdF9lbGVtZW50X3JlbW92ZV9wYWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcmVxdWVzdC1wYWQiIHRpdGxlPSJnc3RfZWxlbWVudF9yZXF1ZXN0X3BhZCAoKSI+Z3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcmVxdWlyZXMtY2xvY2siIHRpdGxlPSJnc3RfZWxlbWVudF9yZXF1aXJlc19jbG9jayAoKSI+Z3N0X2VsZW1lbnRfcmVxdWlyZXNfY2xvY2s8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2VlayIgdGl0bGU9ImdzdF9lbGVtZW50X3NlZWsgKCkiPmdzdF9lbGVtZW50X3NlZWs8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2Vlay1zaW1wbGUiIHRpdGxlPSJnc3RfZWxlbWVudF9zZWVrX3NpbXBsZSAoKSI+Z3N0X2VsZW1lbnRfc2Vla19zaW1wbGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2VuZC1ldmVudCIgdGl0bGU9ImdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKCkiPmdzdF9lbGVtZW50X3NlbmRfZXZlbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LWJhc2UtdGltZSIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9iYXNlX3RpbWUgKCkiPmdzdF9lbGVtZW50X3NldF9iYXNlX3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LWJ1cyIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9idXMgKCkiPmdzdF9lbGVtZW50X3NldF9idXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LWNsb2NrIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2V0X2Nsb2NrICgpIj5nc3RfZWxlbWVudF9zZXRfY2xvY2s8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LWluZGV4IiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2V0X2luZGV4ICgpIj5nc3RfZWxlbWVudF9zZXRfaW5kZXg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LWxvY2tlZC1zdGF0ZSIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUgKCkiPmdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LW5hbWUiIHRpdGxlPSJnc3RfZWxlbWVudF9zZXRfbmFtZSgpIj5nc3RfZWxlbWVudF9zZXRfbmFtZTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZXQtcGFyZW50IiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2V0X3BhcmVudCgpIj5nc3RfZWxlbWVudF9zZXRfcGFyZW50PC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1zdGFydC10aW1lIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2V0X3N0YXJ0X3RpbWUgKCkiPmdzdF9lbGVtZW50X3NldF9zdGFydF90aW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1zdGF0ZSIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9zdGF0ZSAoKSI+Z3N0X2VsZW1lbnRfc2V0X3N0YXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULVNUQVJULVRJTUU6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX1NUQVJUX1RJTUUoKSI+R1NUX0VMRU1FTlRfU1RBUlRfVElNRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zdGF0ZS1jaGFuZ2UtcmV0dXJuLWdldC1uYW1lIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRfbmFtZSAoKSI+Z3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRfbmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zdGF0ZS1nZXQtbmFtZSIgdGl0bGU9ImdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lICgpIj5nc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zeW5jLXN0YXRlLXdpdGgtcGFyZW50IiB0aXRsZT0iZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudCAoKSI+Z3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC11bmxpbmsiIHRpdGxlPSJnc3RfZWxlbWVudF91bmxpbmsgKCkiPmdzdF9lbGVtZW50X3VubGluazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC11bmxpbmstbWFueSIgdGl0bGU9ImdzdF9lbGVtZW50X3VubGlua19tYW55ICgpIj5nc3RfZWxlbWVudF91bmxpbmtfbWFueTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC11bmxpbmstcGFkcyIgdGl0bGU9ImdzdF9lbGVtZW50X3VubGlua19wYWRzICgpIj5nc3RfZWxlbWVudF91bmxpbmtfcGFkczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1XQVJOSU5HOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9XQVJOSU5HKCkiPkdTVF9FTEVNRU5UX1dBUk5JTkc8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1FUlJPUjpDQVBTIiB0aXRsZT0iR1NUX0VSUk9SKCkiPkdTVF9FUlJPUjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjZ3N0LWVycm9yLWdldC1tZXNzYWdlIiB0aXRsZT0iZ3N0X2Vycm9yX2dldF9tZXNzYWdlICgpIj5nc3RfZXJyb3JfZ2V0X21lc3NhZ2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sIiB0aXRsZT0iR3N0R0Vycm9yIj5Hc3RHRXJyb3I8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtRVJST1ItT0JKRUNUOkNBUFMiIHRpdGxlPSJHU1RfRVJST1JfT0JKRUNUKCkiPkdTVF9FUlJPUl9PQkpFQ1Q8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1FUlJPUi1TWVNURU06Q0FQUyIgdGl0bGU9IkdTVF9FUlJPUl9TWVNURU0iPkdTVF9FUlJPUl9TWVNURU08L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sIiB0aXRsZT0iR3N0R0Vycm9yIj5Hc3RHRXJyb3I8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPkdzdEV2ZW50PC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudFR5cGUiIHRpdGxlPSJlbnVtIEdzdEV2ZW50VHlwZSI+R3N0RXZlbnRUeXBlPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnRUeXBlRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEV2ZW50VHlwZUZsYWdzIj5Hc3RFdmVudFR5cGVGbGFnczwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1jb3B5IiB0aXRsZT0iZ3N0X2V2ZW50X2NvcHkgKCkiPmdzdF9ldmVudF9jb3B5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1jb3B5LXNlZ21lbnQiIHRpdGxlPSJnc3RfZXZlbnRfY29weV9zZWdtZW50ICgpIj5nc3RfZXZlbnRfY29weV9zZWdtZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1nZXQtc2VxbnVtIiB0aXRsZT0iZ3N0X2V2ZW50X2dldF9zZXFudW0gKCkiPmdzdF9ldmVudF9nZXRfc2VxbnVtPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1nZXQtc3RydWN0dXJlIiB0aXRsZT0iZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUgKCkiPmdzdF9ldmVudF9nZXRfc3RydWN0dXJlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1oYXMtbmFtZSIgdGl0bGU9ImdzdF9ldmVudF9oYXNfbmFtZSAoKSI+Z3N0X2V2ZW50X2hhc19uYW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1JUy1ET1dOU1RSRUFNOkNBUFMiIHRpdGxlPSJHU1RfRVZFTlRfSVNfRE9XTlNUUkVBTSgpIj5HU1RfRVZFTlRfSVNfRE9XTlNUUkVBTTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtSVMtU0VSSUFMSVpFRDpDQVBTIiB0aXRsZT0iR1NUX0VWRU5UX0lTX1NFUklBTElaRUQoKSI+R1NUX0VWRU5UX0lTX1NFUklBTElaRUQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUlTLVNUSUNLWTpDQVBTIiB0aXRsZT0iR1NUX0VWRU5UX0lTX1NUSUNLWSgpIj5HU1RfRVZFTlRfSVNfU1RJQ0tZPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1JUy1VUFNUUkVBTTpDQVBTIiB0aXRsZT0iR1NUX0VWRU5UX0lTX1VQU1RSRUFNKCkiPkdTVF9FVkVOVF9JU19VUFNUUkVBTTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtaXMtd3JpdGFibGUiIHRpdGxlPSJnc3RfZXZlbnRfaXNfd3JpdGFibGUoKSI+Z3N0X2V2ZW50X2lzX3dyaXRhYmxlPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1NQUtFLVRZUEU6Q0FQUyIgdGl0bGU9IkdTVF9FVkVOVF9NQUtFX1RZUEUoKSI+R1NUX0VWRU5UX01BS0VfVFlQRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbWFrZS13cml0YWJsZSIgdGl0bGU9ImdzdF9ldmVudF9tYWtlX3dyaXRhYmxlKCkiPmdzdF9ldmVudF9tYWtlX3dyaXRhYmxlPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctYnVmZmVyLXNpemUiIHRpdGxlPSJnc3RfZXZlbnRfbmV3X2J1ZmZlcl9zaXplICgpIj5nc3RfZXZlbnRfbmV3X2J1ZmZlcl9zaXplPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctY2FwcyIgdGl0bGU9ImdzdF9ldmVudF9uZXdfY2FwcyAoKSI+Z3N0X2V2ZW50X25ld19jYXBzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctY3VzdG9tIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19jdXN0b20gKCkiPmdzdF9ldmVudF9uZXdfY3VzdG9tPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctZW9zIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19lb3MgKCkiPmdzdF9ldmVudF9uZXdfZW9zPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctZmx1c2gtc3RhcnQiIHRpdGxlPSJnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0ICgpIj5nc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctZmx1c2gtc3RvcCIgdGl0bGU9ImdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoKSI+Z3N0X2V2ZW50X25ld19mbHVzaF9zdG9wPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctbGF0ZW5jeSIgdGl0bGU9ImdzdF9ldmVudF9uZXdfbGF0ZW5jeSAoKSI+Z3N0X2V2ZW50X25ld19sYXRlbmN5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctbmF2aWdhdGlvbiIgdGl0bGU9ImdzdF9ldmVudF9uZXdfbmF2aWdhdGlvbiAoKSI+Z3N0X2V2ZW50X25ld19uYXZpZ2F0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctcW9zIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19xb3MgKCkiPmdzdF9ldmVudF9uZXdfcW9zPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctcmVjb25maWd1cmUiIHRpdGxlPSJnc3RfZXZlbnRfbmV3X3JlY29uZmlndXJlICgpIj5nc3RfZXZlbnRfbmV3X3JlY29uZmlndXJlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc2VlayIgdGl0bGU9ImdzdF9ldmVudF9uZXdfc2VlayAoKSI+Z3N0X2V2ZW50X25ld19zZWVrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc2VnbWVudCIgdGl0bGU9ImdzdF9ldmVudF9uZXdfc2VnbWVudCAoKSI+Z3N0X2V2ZW50X25ld19zZWdtZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc2luay1tZXNzYWdlIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19zaW5rX21lc3NhZ2UgKCkiPmdzdF9ldmVudF9uZXdfc2lua19tZXNzYWdlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc3RlcCIgdGl0bGU9ImdzdF9ldmVudF9uZXdfc3RlcCAoKSI+Z3N0X2V2ZW50X25ld19zdGVwPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctdGFnIiB0aXRsZT0iZ3N0X2V2ZW50X25ld190YWcgKCkiPmdzdF9ldmVudF9uZXdfdGFnPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1idWZmZXItc2l6ZSIgdGl0bGU9ImdzdF9ldmVudF9wYXJzZV9idWZmZXJfc2l6ZSAoKSI+Z3N0X2V2ZW50X3BhcnNlX2J1ZmZlcl9zaXplPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1jYXBzIiB0aXRsZT0iZ3N0X2V2ZW50X3BhcnNlX2NhcHMgKCkiPmdzdF9ldmVudF9wYXJzZV9jYXBzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1mbHVzaC1zdG9wIiB0aXRsZT0iZ3N0X2V2ZW50X3BhcnNlX2ZsdXNoX3N0b3AgKCkiPmdzdF9ldmVudF9wYXJzZV9mbHVzaF9zdG9wPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1sYXRlbmN5IiB0aXRsZT0iZ3N0X2V2ZW50X3BhcnNlX2xhdGVuY3kgKCkiPmdzdF9ldmVudF9wYXJzZV9sYXRlbmN5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1xb3MiIHRpdGxlPSJnc3RfZXZlbnRfcGFyc2VfcW9zICgpIj5nc3RfZXZlbnRfcGFyc2VfcW9zPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1zZWVrIiB0aXRsZT0iZ3N0X2V2ZW50X3BhcnNlX3NlZWsgKCkiPmdzdF9ldmVudF9wYXJzZV9zZWVrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1zZWdtZW50IiB0aXRsZT0iZ3N0X2V2ZW50X3BhcnNlX3NlZ21lbnQgKCkiPmdzdF9ldmVudF9wYXJzZV9zZWdtZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1zaW5rLW1lc3NhZ2UiIHRpdGxlPSJnc3RfZXZlbnRfcGFyc2Vfc2lua19tZXNzYWdlICgpIj5nc3RfZXZlbnRfcGFyc2Vfc2lua19tZXNzYWdlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1zdGVwIiB0aXRsZT0iZ3N0X2V2ZW50X3BhcnNlX3N0ZXAgKCkiPmdzdF9ldmVudF9wYXJzZV9zdGVwPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS10YWciIHRpdGxlPSJnc3RfZXZlbnRfcGFyc2VfdGFnICgpIj5nc3RfZXZlbnRfcGFyc2VfdGFnPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1yZWYiIHRpdGxlPSJnc3RfZXZlbnRfcmVmICgpIj5nc3RfZXZlbnRfcmVmPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1yZXBsYWNlIiB0aXRsZT0iZ3N0X2V2ZW50X3JlcGxhY2UoKSI+Z3N0X2V2ZW50X3JlcGxhY2U8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULVNFUU5VTTpDQVBTIiB0aXRsZT0iR1NUX0VWRU5UX1NFUU5VTSgpIj5HU1RfRVZFTlRfU0VRTlVNPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1zZXQtc2VxbnVtIiB0aXRsZT0iZ3N0X2V2ZW50X3NldF9zZXFudW0gKCkiPmdzdF9ldmVudF9zZXRfc2VxbnVtPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1zdGVhbCIgdGl0bGU9ImdzdF9ldmVudF9zdGVhbCgpIj5nc3RfZXZlbnRfc3RlYWw8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXRha2UiIHRpdGxlPSJnc3RfZXZlbnRfdGFrZSgpIj5nc3RfZXZlbnRfdGFrZTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtVElNRVNUQU1QOkNBUFMiIHRpdGxlPSJHU1RfRVZFTlRfVElNRVNUQU1QKCkiPkdTVF9FVkVOVF9USU1FU1RBTVA8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULVRSQUNFLU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9FVkVOVF9UUkFDRV9OQU1FIj5HU1RfRVZFTlRfVFJBQ0VfTkFNRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtVFlQRTpDQVBTIiB0aXRsZT0iR1NUX0VWRU5UX1RZUEUoKSI+R1NUX0VWRU5UX1RZUEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULVRZUEUtQk9USDpDQVBTIiB0aXRsZT0iR1NUX0VWRU5UX1RZUEVfQk9USCI+R1NUX0VWRU5UX1RZUEVfQk9USDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtdHlwZS1nZXQtZmxhZ3MiIHRpdGxlPSJnc3RfZXZlbnRfdHlwZV9nZXRfZmxhZ3MgKCkiPmdzdF9ldmVudF90eXBlX2dldF9mbGFnczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtdHlwZS1nZXQtbmFtZSIgdGl0bGU9ImdzdF9ldmVudF90eXBlX2dldF9uYW1lICgpIj5nc3RfZXZlbnRfdHlwZV9nZXRfbmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtVFlQRS1OQU1FOkNBUFMiIHRpdGxlPSJHU1RfRVZFTlRfVFlQRV9OQU1FKCkiPkdTVF9FVkVOVF9UWVBFX05BTUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXR5cGUtdG8tcXVhcmsiIHRpdGxlPSJnc3RfZXZlbnRfdHlwZV90b19xdWFyayAoKSI+Z3N0X2V2ZW50X3R5cGVfdG9fcXVhcms8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXVucmVmIiB0aXRsZT0iZ3N0X2V2ZW50X3VucmVmICgpIj5nc3RfZXZlbnRfdW5yZWY8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXdyaXRhYmxlLXN0cnVjdHVyZSIgdGl0bGU9ImdzdF9ldmVudF93cml0YWJsZV9zdHJ1Y3R1cmUgKCkiPmdzdF9ldmVudF93cml0YWJsZV9zdHJ1Y3R1cmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8YSBuYW1lPSJpZHhGIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+RjwvaDM+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtZmlsZW5hbWUtdG8tdXJpIiB0aXRsZT0iZ3N0X2ZpbGVuYW1lX3RvX3VyaSAoKSI+Z3N0X2ZpbGVuYW1lX3RvX3VyaTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sIiB0aXRsZT0iR3N0VXJpSGFuZGxlciI+R3N0VXJpSGFuZGxlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RmlsdGVyLmh0bWwjR3N0RmlsdGVyRnVuYyIgdGl0bGU9IkdzdEZpbHRlckZ1bmMgKCkiPkdzdEZpbHRlckZ1bmM8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RmlsdGVyLmh0bWwiIHRpdGxlPSJHc3RGaWx0ZXIiPkdzdEZpbHRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RmlsdGVyLmh0bWwjZ3N0LWZpbHRlci1ydW4iIHRpdGxlPSJnc3RfZmlsdGVyX3J1biAoKSI+Z3N0X2ZpbHRlcl9ydW48L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZpbHRlci5odG1sIiB0aXRsZT0iR3N0RmlsdGVyIj5Hc3RGaWx0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtRklYTUU6Q0FQUyIgdGl0bGU9IkdTVF9GSVhNRSgpIj5HU1RfRklYTUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtRklYTUUtT0JKRUNUOkNBUFMiIHRpdGxlPSJHU1RfRklYTUVfT0JKRUNUKCkiPkdTVF9GSVhNRV9PQkpFQ1Q8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+R3N0Rmxvd1JldHVybjwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LWZsb3ctZ2V0LW5hbWUiIHRpdGxlPSJnc3RfZmxvd19nZXRfbmFtZSAoKSI+Z3N0X2Zsb3dfZ2V0X25hbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LWZsb3ctdG8tcXVhcmsiIHRpdGxlPSJnc3RfZmxvd190b19xdWFyayAoKSI+Z3N0X2Zsb3dfdG9fcXVhcms8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij5Hc3RGb3JtYXQ8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwiIHRpdGxlPSJHc3RGb3JtYXQiPkdzdEZvcm1hdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0RGVmaW5pdGlvbiIgdGl0bGU9InN0cnVjdCBHc3RGb3JtYXREZWZpbml0aW9uIj5Hc3RGb3JtYXREZWZpbml0aW9uPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwiIHRpdGxlPSJHc3RGb3JtYXQiPkdzdEZvcm1hdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjZ3N0LWZvcm1hdHMtY29udGFpbnMiIHRpdGxlPSJnc3RfZm9ybWF0c19jb250YWlucyAoKSI+Z3N0X2Zvcm1hdHNfY29udGFpbnM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sIiB0aXRsZT0iR3N0Rm9ybWF0Ij5Hc3RGb3JtYXQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI2dzdC1mb3JtYXQtZ2V0LWJ5LW5pY2siIHRpdGxlPSJnc3RfZm9ybWF0X2dldF9ieV9uaWNrICgpIj5nc3RfZm9ybWF0X2dldF9ieV9uaWNrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCIgdGl0bGU9IkdzdEZvcm1hdCI+R3N0Rm9ybWF0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNnc3QtZm9ybWF0LWdldC1kZXRhaWxzIiB0aXRsZT0iZ3N0X2Zvcm1hdF9nZXRfZGV0YWlscyAoKSI+Z3N0X2Zvcm1hdF9nZXRfZGV0YWlsczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwiIHRpdGxlPSJHc3RGb3JtYXQiPkdzdEZvcm1hdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjZ3N0LWZvcm1hdC1nZXQtbmFtZSIgdGl0bGU9ImdzdF9mb3JtYXRfZ2V0X25hbWUgKCkiPmdzdF9mb3JtYXRfZ2V0X25hbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sIiB0aXRsZT0iR3N0Rm9ybWF0Ij5Hc3RGb3JtYXQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI2dzdC1mb3JtYXQtaXRlcmF0ZS1kZWZpbml0aW9ucyIgdGl0bGU9ImdzdF9mb3JtYXRfaXRlcmF0ZV9kZWZpbml0aW9ucyAoKSI+Z3N0X2Zvcm1hdF9pdGVyYXRlX2RlZmluaXRpb25zPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCIgdGl0bGU9IkdzdEZvcm1hdCI+R3N0Rm9ybWF0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHU1QtRk9STUFULVBFUkNFTlQtTUFYOkNBUFMiIHRpdGxlPSJHU1RfRk9STUFUX1BFUkNFTlRfTUFYIj5HU1RfRk9STUFUX1BFUkNFTlRfTUFYPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCIgdGl0bGU9IkdzdEZvcm1hdCI+R3N0Rm9ybWF0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHU1QtRk9STUFULVBFUkNFTlQtU0NBTEU6Q0FQUyIgdGl0bGU9IkdTVF9GT1JNQVRfUEVSQ0VOVF9TQ0FMRSI+R1NUX0ZPUk1BVF9QRVJDRU5UX1NDQUxFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCIgdGl0bGU9IkdzdEZvcm1hdCI+R3N0Rm9ybWF0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNnc3QtZm9ybWF0LXJlZ2lzdGVyIiB0aXRsZT0iZ3N0X2Zvcm1hdF9yZWdpc3RlciAoKSI+Z3N0X2Zvcm1hdF9yZWdpc3RlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwiIHRpdGxlPSJHc3RGb3JtYXQiPkdzdEZvcm1hdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjZ3N0LWZvcm1hdC10by1xdWFyayIgdGl0bGU9ImdzdF9mb3JtYXRfdG9fcXVhcmsgKCkiPmdzdF9mb3JtYXRfdG9fcXVhcms8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sIiB0aXRsZT0iR3N0Rm9ybWF0Ij5Hc3RGb3JtYXQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULUZPVVJDQy1BUkdTOkNBUFMiIHRpdGxlPSJHU1RfRk9VUkNDX0FSR1MoKSI+R1NUX0ZPVVJDQ19BUkdTPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1GT1VSQ0MtRk9STUFUOkNBUFMiIHRpdGxlPSJHU1RfRk9VUkNDX0ZPUk1BVCI+R1NUX0ZPVVJDQ19GT1JNQVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtRlVOQ1RJT046Q0FQUyIgdGl0bGU9IkdTVF9GVU5DVElPTiI+R1NUX0ZVTkNUSU9OPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGEgbmFtZT0iaWR4RyI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkc8L2gzPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dET1VCTEUtRlJPTS1CRTpDQVBTIiB0aXRsZT0iR0RPVUJMRV9GUk9NX0JFKCkiPkdET1VCTEVfRlJPTV9CRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRE9VQkxFLUZST00tTEU6Q0FQUyIgdGl0bGU9IkdET1VCTEVfRlJPTV9MRSgpIj5HRE9VQkxFX0ZST01fTEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR0RPVUJMRS1TV0FQLUxFLUJFOkNBUFMiIHRpdGxlPSJHRE9VQkxFX1NXQVBfTEVfQkUgKCkiPkdET1VCTEVfU1dBUF9MRV9CRTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRE9VQkxFLVRPLUJFOkNBUFMiIHRpdGxlPSJHRE9VQkxFX1RPX0JFKCkiPkdET1VCTEVfVE9fQkU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LWdkb3VibGUtdG8tZ3VpbnQ2NCIgdGl0bGU9ImdzdF9nZG91YmxlX3RvX2d1aW50NjQoKSI+Z3N0X2dkb3VibGVfdG9fZ3VpbnQ2NDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRE9VQkxFLVRPLUxFOkNBUFMiIHRpdGxlPSJHRE9VQkxFX1RPX0xFKCkiPkdET1VCTEVfVE9fTEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR0ZMT0FULUZST00tQkU6Q0FQUyIgdGl0bGU9IkdGTE9BVF9GUk9NX0JFKCkiPkdGTE9BVF9GUk9NX0JFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dGTE9BVC1GUk9NLUxFOkNBUFMiIHRpdGxlPSJHRkxPQVRfRlJPTV9MRSgpIj5HRkxPQVRfRlJPTV9MRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRkxPQVQtU1dBUC1MRS1CRTpDQVBTIiB0aXRsZT0iR0ZMT0FUX1NXQVBfTEVfQkUgKCkiPkdGTE9BVF9TV0FQX0xFX0JFPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dGTE9BVC1UTy1CRTpDQVBTIiB0aXRsZT0iR0ZMT0FUX1RPX0JFKCkiPkdGTE9BVF9UT19CRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRkxPQVQtVE8tTEU6Q0FQUyIgdGl0bGU9IkdGTE9BVF9UT19MRSgpIj5HRkxPQVRfVE9fTEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNHc3RHaG9zdFBhZC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0R2hvc3RQYWQiPkdzdEdob3N0UGFkPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sIiB0aXRsZT0iR3N0R2hvc3RQYWQiPkdzdEdob3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1hY3RpdmF0ZS1wdWxsLWRlZmF1bHQiIHRpdGxlPSJnc3RfZ2hvc3RfcGFkX2FjdGl2YXRlX3B1bGxfZGVmYXVsdCAoKSI+Z3N0X2dob3N0X3BhZF9hY3RpdmF0ZV9wdWxsX2RlZmF1bHQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCIgdGl0bGU9IkdzdEdob3N0UGFkIj5Hc3RHaG9zdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1naG9zdC1wYWQtYWN0aXZhdGUtcHVzaC1kZWZhdWx0IiB0aXRsZT0iZ3N0X2dob3N0X3BhZF9hY3RpdmF0ZV9wdXNoX2RlZmF1bHQgKCkiPmdzdF9naG9zdF9wYWRfYWN0aXZhdGVfcHVzaF9kZWZhdWx0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RHaG9zdFBhZCI+R3N0R2hvc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLWNvbnN0cnVjdCIgdGl0bGU9ImdzdF9naG9zdF9wYWRfY29uc3RydWN0ICgpIj5nc3RfZ2hvc3RfcGFkX2NvbnN0cnVjdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sIiB0aXRsZT0iR3N0R2hvc3RQYWQiPkdzdEdob3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1nZXQtdGFyZ2V0IiB0aXRsZT0iZ3N0X2dob3N0X3BhZF9nZXRfdGFyZ2V0ICgpIj5nc3RfZ2hvc3RfcGFkX2dldF90YXJnZXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCIgdGl0bGU9IkdzdEdob3N0UGFkIj5Hc3RHaG9zdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1naG9zdC1wYWQtaW50ZXJuYWwtYWN0aXZhdGUtcHVsbC1kZWZhdWx0IiB0aXRsZT0iZ3N0X2dob3N0X3BhZF9pbnRlcm5hbF9hY3RpdmF0ZV9wdWxsX2RlZmF1bHQgKCkiPmdzdF9naG9zdF9wYWRfaW50ZXJuYWxfYWN0aXZhdGVfcHVsbF9kZWZhdWx0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RHaG9zdFBhZCI+R3N0R2hvc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLWludGVybmFsLWFjdGl2YXRlLXB1c2gtZGVmYXVsdCIgdGl0bGU9ImdzdF9naG9zdF9wYWRfaW50ZXJuYWxfYWN0aXZhdGVfcHVzaF9kZWZhdWx0ICgpIj5nc3RfZ2hvc3RfcGFkX2ludGVybmFsX2FjdGl2YXRlX3B1c2hfZGVmYXVsdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sIiB0aXRsZT0iR3N0R2hvc3RQYWQiPkdzdEdob3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1saW5rLWRlZmF1bHQiIHRpdGxlPSJnc3RfZ2hvc3RfcGFkX2xpbmtfZGVmYXVsdCAoKSI+Z3N0X2dob3N0X3BhZF9saW5rX2RlZmF1bHQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCIgdGl0bGU9IkdzdEdob3N0UGFkIj5Hc3RHaG9zdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1naG9zdC1wYWQtbmV3IiB0aXRsZT0iZ3N0X2dob3N0X3BhZF9uZXcgKCkiPmdzdF9naG9zdF9wYWRfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RHaG9zdFBhZCI+R3N0R2hvc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLW5ldy1mcm9tLXRlbXBsYXRlIiB0aXRsZT0iZ3N0X2dob3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoKSI+Z3N0X2dob3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sIiB0aXRsZT0iR3N0R2hvc3RQYWQiPkdzdEdob3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1uZXctbm8tdGFyZ2V0IiB0aXRsZT0iZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0ICgpIj5nc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCIgdGl0bGU9IkdzdEdob3N0UGFkIj5Hc3RHaG9zdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1naG9zdC1wYWQtbmV3LW5vLXRhcmdldC1mcm9tLXRlbXBsYXRlIiB0aXRsZT0iZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0X2Zyb21fdGVtcGxhdGUgKCkiPmdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldF9mcm9tX3RlbXBsYXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RHaG9zdFBhZCI+R3N0R2hvc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLXNldC10YXJnZXQiIHRpdGxlPSJnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQgKCkiPmdzdF9naG9zdF9wYWRfc2V0X3RhcmdldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sIiB0aXRsZT0iR3N0R2hvc3RQYWQiPkdzdEdob3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC11bmxpbmstZGVmYXVsdCIgdGl0bGU9ImdzdF9naG9zdF9wYWRfdW5saW5rX2RlZmF1bHQgKCkiPmdzdF9naG9zdF9wYWRfdW5saW5rX2RlZmF1bHQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCIgdGl0bGU9IkdzdEdob3N0UGFkIj5Hc3RHaG9zdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtZ3VpbnQ2NC10by1nZG91YmxlIiB0aXRsZT0iZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSgpIj5nc3RfZ3VpbnQ2NF90b19nZG91YmxlPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGEgbmFtZT0iaWR4SSI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkk8L2gzPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0SW5kZXgtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEluZGV4Ij5Hc3RJbmRleDwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij5Hc3RJbmRleDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEluZGV4LWVudHJ5LWFkZGVkIiB0aXRsZT0nVGhlICJlbnRyeS1hZGRlZCIgc2lnbmFsJz5Hc3RJbmRleDo6ZW50cnktYWRkZWQ8L2E+LCBvYmplY3Qgc2lnbmFsIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPkdzdEluZGV4PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0SW5kZXgtLXJlc29sdmVyIiB0aXRsZT0nVGhlICJyZXNvbHZlciIgcHJvcGVydHknPkdzdEluZGV4OnJlc29sdmVyPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPkdzdEluZGV4PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0SW5kZXhBc3NvY2lhdGlvbiIgdGl0bGU9InN0cnVjdCBHc3RJbmRleEFzc29jaWF0aW9uIj5Hc3RJbmRleEFzc29jaWF0aW9uPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPkdzdEluZGV4PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0SW5kZXhDZXJ0YWludHkiIHRpdGxlPSJlbnVtIEdzdEluZGV4Q2VydGFpbnR5Ij5Hc3RJbmRleENlcnRhaW50eTwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+R3N0SW5kZXg8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHc3RJbmRleEVudHJ5IiB0aXRsZT0ic3RydWN0IEdzdEluZGV4RW50cnkiPkdzdEluZGV4RW50cnk8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+R3N0SW5kZXg8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHc3RJbmRleEVudHJ5VHlwZSIgdGl0bGU9ImVudW0gR3N0SW5kZXhFbnRyeVR5cGUiPkdzdEluZGV4RW50cnlUeXBlPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij5Hc3RJbmRleDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleEZhY3RvcnkuaHRtbCNHc3RJbmRleEZhY3Rvcnktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEluZGV4RmFjdG9yeSI+R3N0SW5kZXhGYWN0b3J5PC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEluZGV4RmFjdG9yeSI+R3N0SW5kZXhGYWN0b3J5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0SW5kZXhGaWx0ZXIiIHRpdGxlPSJHc3RJbmRleEZpbHRlciAoKSI+R3N0SW5kZXhGaWx0ZXI8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPkdzdEluZGV4PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR3N0SW5kZXhGbGFncyIgdGl0bGU9ImVudW0gR3N0SW5kZXhGbGFncyI+R3N0SW5kZXhGbGFnczwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+R3N0SW5kZXg8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHc3RJbmRleEdyb3VwIiB0aXRsZT0ic3RydWN0IEdzdEluZGV4R3JvdXAiPkdzdEluZGV4R3JvdXA8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+R3N0SW5kZXg8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHc3RJbmRleExvb2t1cE1ldGhvZCIgdGl0bGU9ImVudW0gR3N0SW5kZXhMb29rdXBNZXRob2QiPkdzdEluZGV4TG9va3VwTWV0aG9kPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij5Hc3RJbmRleDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEluZGV4UmVzb2x2ZXIiIHRpdGxlPSJHc3RJbmRleFJlc29sdmVyICgpIj5Hc3RJbmRleFJlc29sdmVyPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij5Hc3RJbmRleDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dzdEluZGV4UmVzb2x2ZXJNZXRob2QiIHRpdGxlPSJlbnVtIEdzdEluZGV4UmVzb2x2ZXJNZXRob2QiPkdzdEluZGV4UmVzb2x2ZXJNZXRob2Q8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPkdzdEluZGV4PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LWFkZC1hc3NvY2lhdGlvbiIgdGl0bGU9ImdzdF9pbmRleF9hZGRfYXNzb2NpYXRpb24gKCkiPmdzdF9pbmRleF9hZGRfYXNzb2NpYXRpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij5Hc3RJbmRleDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI2dzdC1pbmRleC1hZGQtYXNzb2NpYXRpb252IiB0aXRsZT0iZ3N0X2luZGV4X2FkZF9hc3NvY2lhdGlvbnYgKCkiPmdzdF9pbmRleF9hZGRfYXNzb2NpYXRpb252PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+R3N0SW5kZXg8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtYWRkLWZvcm1hdCIgdGl0bGU9ImdzdF9pbmRleF9hZGRfZm9ybWF0ICgpIj5nc3RfaW5kZXhfYWRkX2Zvcm1hdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPkdzdEluZGV4PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LWFkZC1pZCIgdGl0bGU9ImdzdF9pbmRleF9hZGRfaWQgKCkiPmdzdF9pbmRleF9hZGRfaWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij5Hc3RJbmRleDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI2dzdC1pbmRleC1hZGQtb2JqZWN0IiB0aXRsZT0iZ3N0X2luZGV4X2FkZF9vYmplY3QgKCkiPmdzdF9pbmRleF9hZGRfb2JqZWN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+R3N0SW5kZXg8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHU1QtSU5ERVgtQVNTT0MtRkxBR1M6Q0FQUyIgdGl0bGU9IkdTVF9JTkRFWF9BU1NPQ19GTEFHUygpIj5HU1RfSU5ERVhfQVNTT0NfRkxBR1M8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij5Hc3RJbmRleDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dTVC1JTkRFWC1BU1NPQy1GT1JNQVQ6Q0FQUyIgdGl0bGU9IkdTVF9JTkRFWF9BU1NPQ19GT1JNQVQoKSI+R1NUX0lOREVYX0FTU09DX0ZPUk1BVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPkdzdEluZGV4PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR1NULUlOREVYLUFTU09DLVZBTFVFOkNBUFMiIHRpdGxlPSJHU1RfSU5ERVhfQVNTT0NfVkFMVUUoKSI+R1NUX0lOREVYX0FTU09DX1ZBTFVFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+R3N0SW5kZXg8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtY29tbWl0IiB0aXRsZT0iZ3N0X2luZGV4X2NvbW1pdCAoKSI+Z3N0X2luZGV4X2NvbW1pdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPkdzdEluZGV4PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LWVudHJ5LWFzc29jLW1hcCIgdGl0bGU9ImdzdF9pbmRleF9lbnRyeV9hc3NvY19tYXAgKCkiPmdzdF9pbmRleF9lbnRyeV9hc3NvY19tYXA8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij5Hc3RJbmRleDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI2dzdC1pbmRleC1lbnRyeS1jb3B5IiB0aXRsZT0iZ3N0X2luZGV4X2VudHJ5X2NvcHkgKCkiPmdzdF9pbmRleF9lbnRyeV9jb3B5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+R3N0SW5kZXg8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtZW50cnktZnJlZSIgdGl0bGU9ImdzdF9pbmRleF9lbnRyeV9mcmVlICgpIj5nc3RfaW5kZXhfZW50cnlfZnJlZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPkdzdEluZGV4PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4RmFjdG9yeS5odG1sI2dzdC1pbmRleC1mYWN0b3J5LWNyZWF0ZSIgdGl0bGU9ImdzdF9pbmRleF9mYWN0b3J5X2NyZWF0ZSAoKSI+Z3N0X2luZGV4X2ZhY3RvcnlfY3JlYXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0SW5kZXhGYWN0b3J5Ij5Hc3RJbmRleEZhY3Rvcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXhGYWN0b3J5Lmh0bWwjZ3N0LWluZGV4LWZhY3RvcnktZGVzdHJveSIgdGl0bGU9ImdzdF9pbmRleF9mYWN0b3J5X2Rlc3Ryb3kgKCkiPmdzdF9pbmRleF9mYWN0b3J5X2Rlc3Ryb3k8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXhGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RJbmRleEZhY3RvcnkiPkdzdEluZGV4RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleEZhY3RvcnkuaHRtbCNnc3QtaW5kZXgtZmFjdG9yeS1maW5kIiB0aXRsZT0iZ3N0X2luZGV4X2ZhY3RvcnlfZmluZCAoKSI+Z3N0X2luZGV4X2ZhY3RvcnlfZmluZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEluZGV4RmFjdG9yeSI+R3N0SW5kZXhGYWN0b3J5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4RmFjdG9yeS5odG1sI2dzdC1pbmRleC1mYWN0b3J5LW1ha2UiIHRpdGxlPSJnc3RfaW5kZXhfZmFjdG9yeV9tYWtlICgpIj5nc3RfaW5kZXhfZmFjdG9yeV9tYWtlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0SW5kZXhGYWN0b3J5Ij5Hc3RJbmRleEZhY3Rvcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXhGYWN0b3J5Lmh0bWwjZ3N0LWluZGV4LWZhY3RvcnktbmV3IiB0aXRsZT0iZ3N0X2luZGV4X2ZhY3RvcnlfbmV3ICgpIj5nc3RfaW5kZXhfZmFjdG9yeV9uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXhGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RJbmRleEZhY3RvcnkiPkdzdEluZGV4RmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dTVC1JTkRFWC1GT1JNQVQtRk9STUFUOkNBUFMiIHRpdGxlPSJHU1RfSU5ERVhfRk9STUFUX0ZPUk1BVCgpIj5HU1RfSU5ERVhfRk9STUFUX0ZPUk1BVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPkdzdEluZGV4PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR1NULUlOREVYLUZPUk1BVC1LRVk6Q0FQUyIgdGl0bGU9IkdTVF9JTkRFWF9GT1JNQVRfS0VZKCkiPkdTVF9JTkRFWF9GT1JNQVRfS0VZPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+R3N0SW5kZXg8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtZ2V0LWFzc29jLWVudHJ5IiB0aXRsZT0iZ3N0X2luZGV4X2dldF9hc3NvY19lbnRyeSAoKSI+Z3N0X2luZGV4X2dldF9hc3NvY19lbnRyeTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPkdzdEluZGV4PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LWdldC1hc3NvYy1lbnRyeS1mdWxsIiB0aXRsZT0iZ3N0X2luZGV4X2dldF9hc3NvY19lbnRyeV9mdWxsICgpIj5nc3RfaW5kZXhfZ2V0X2Fzc29jX2VudHJ5X2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij5Hc3RJbmRleDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI2dzdC1pbmRleC1nZXQtY2VydGFpbnR5IiB0aXRsZT0iZ3N0X2luZGV4X2dldF9jZXJ0YWludHkgKCkiPmdzdF9pbmRleF9nZXRfY2VydGFpbnR5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+R3N0SW5kZXg8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtZ2V0LWdyb3VwIiB0aXRsZT0iZ3N0X2luZGV4X2dldF9ncm91cCAoKSI+Z3N0X2luZGV4X2dldF9ncm91cDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPkdzdEluZGV4PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LWdldC13cml0ZXItaWQiIHRpdGxlPSJnc3RfaW5kZXhfZ2V0X3dyaXRlcl9pZCAoKSI+Z3N0X2luZGV4X2dldF93cml0ZXJfaWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij5Hc3RJbmRleDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dTVC1JTkRFWC1JRC1ERVNDUklQVElPTjpDQVBTIiB0aXRsZT0iR1NUX0lOREVYX0lEX0RFU0NSSVBUSU9OKCkiPkdTVF9JTkRFWF9JRF9ERVNDUklQVElPTjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPkdzdEluZGV4PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR1NULUlOREVYLUlELUlOVkFMSUQ6Q0FQUyIgdGl0bGU9IkdTVF9JTkRFWF9JRF9JTlZBTElEIj5HU1RfSU5ERVhfSURfSU5WQUxJRDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPkdzdEluZGV4PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjR1NULUlOREVYLUlTLVJFQURBQkxFOkNBUFMiIHRpdGxlPSJHU1RfSU5ERVhfSVNfUkVBREFCTEUoKSI+R1NUX0lOREVYX0lTX1JFQURBQkxFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+R3N0SW5kZXg8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNHU1QtSU5ERVgtSVMtV1JJVEFCTEU6Q0FQUyIgdGl0bGU9IkdTVF9JTkRFWF9JU19XUklUQUJMRSgpIj5HU1RfSU5ERVhfSVNfV1JJVEFCTEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij5Hc3RJbmRleDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI0dTVC1JTkRFWC1OQVNTT0NTOkNBUFMiIHRpdGxlPSJHU1RfSU5ERVhfTkFTU09DUygpIj5HU1RfSU5ERVhfTkFTU09DUzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPkdzdEluZGV4PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LW5ldyIgdGl0bGU9ImdzdF9pbmRleF9uZXcgKCkiPmdzdF9pbmRleF9uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij5Hc3RJbmRleDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI2dzdC1pbmRleC1uZXctZ3JvdXAiIHRpdGxlPSJnc3RfaW5kZXhfbmV3X2dyb3VwICgpIj5nc3RfaW5kZXhfbmV3X2dyb3VwPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+R3N0SW5kZXg8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtc2V0LWNlcnRhaW50eSIgdGl0bGU9ImdzdF9pbmRleF9zZXRfY2VydGFpbnR5ICgpIj5nc3RfaW5kZXhfc2V0X2NlcnRhaW50eTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPkdzdEluZGV4PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LXNldC1maWx0ZXIiIHRpdGxlPSJnc3RfaW5kZXhfc2V0X2ZpbHRlciAoKSI+Z3N0X2luZGV4X3NldF9maWx0ZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij5Hc3RJbmRleDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI2dzdC1pbmRleC1zZXQtZmlsdGVyLWZ1bGwiIHRpdGxlPSJnc3RfaW5kZXhfc2V0X2ZpbHRlcl9mdWxsICgpIj5nc3RfaW5kZXhfc2V0X2ZpbHRlcl9mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+R3N0SW5kZXg8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtc2V0LWdyb3VwIiB0aXRsZT0iZ3N0X2luZGV4X3NldF9ncm91cCAoKSI+Z3N0X2luZGV4X3NldF9ncm91cDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPkdzdEluZGV4PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LXNldC1yZXNvbHZlciIgdGl0bGU9ImdzdF9pbmRleF9zZXRfcmVzb2x2ZXIgKCkiPmdzdF9pbmRleF9zZXRfcmVzb2x2ZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW5kZXguaHRtbCIgdGl0bGU9IkdzdEluZGV4Ij5Hc3RJbmRleDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sI2dzdC1pbmRleC1zZXQtcmVzb2x2ZXItZnVsbCIgdGl0bGU9ImdzdF9pbmRleF9zZXRfcmVzb2x2ZXJfZnVsbCAoKSI+Z3N0X2luZGV4X3NldF9yZXNvbHZlcl9mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4Lmh0bWwiIHRpdGxlPSJHc3RJbmRleCI+R3N0SW5kZXg8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtSU5GTzpDQVBTIiB0aXRsZT0iR1NUX0lORk8oKSI+R1NUX0lORk88L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtSU5GTy1PQkpFQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9JTkZPX09CSkVDVCgpIj5HU1RfSU5GT19PQkpFQ1Q8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1pbml0IiB0aXRsZT0iZ3N0X2luaXQgKCkiPmdzdF9pbml0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCIgdGl0bGU9IkdzdCI+R3N0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtaW5pdC1jaGVjayIgdGl0bGU9ImdzdF9pbml0X2NoZWNrICgpIj5nc3RfaW5pdF9jaGVjazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwiIHRpdGxlPSJHc3QiPkdzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LWluaXQtZ2V0LW9wdGlvbi1ncm91cCIgdGl0bGU9ImdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXAgKCkiPmdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXA8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sIiB0aXRsZT0iR3N0Ij5Hc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1pcy1pbml0aWFsaXplZCIgdGl0bGU9ImdzdF9pc19pbml0aWFsaXplZCAoKSI+Z3N0X2lzX2luaXRpYWxpemVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCIgdGl0bGU9IkdzdCI+R3N0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LWlzLXRhZy1saXN0IiB0aXRsZT0iZ3N0X2lzX3RhZ19saXN0ICgpIj5nc3RfaXNfdGFnX2xpc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPkdzdEl0ZXJhdG9yPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCIgdGl0bGU9IkdzdEl0ZXJhdG9yIj5Hc3RJdGVyYXRvcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHU1QtSVRFUkFUT1I6Q0FQUyIgdGl0bGU9IkdTVF9JVEVSQVRPUigpIj5HU1RfSVRFUkFUT1I8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwiIHRpdGxlPSJHc3RJdGVyYXRvciI+R3N0SXRlcmF0b3I8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JDb3B5RnVuY3Rpb24iIHRpdGxlPSJHc3RJdGVyYXRvckNvcHlGdW5jdGlvbiAoKSI+R3N0SXRlcmF0b3JDb3B5RnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCIgdGl0bGU9IkdzdEl0ZXJhdG9yIj5Hc3RJdGVyYXRvcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvckZvbGRGdW5jdGlvbiIgdGl0bGU9IkdzdEl0ZXJhdG9yRm9sZEZ1bmN0aW9uICgpIj5Hc3RJdGVyYXRvckZvbGRGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sIiB0aXRsZT0iR3N0SXRlcmF0b3IiPkdzdEl0ZXJhdG9yPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yRm9yZWFjaEZ1bmN0aW9uIiB0aXRsZT0iR3N0SXRlcmF0b3JGb3JlYWNoRnVuY3Rpb24gKCkiPkdzdEl0ZXJhdG9yRm9yZWFjaEZ1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwiIHRpdGxlPSJHc3RJdGVyYXRvciI+R3N0SXRlcmF0b3I8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JGcmVlRnVuY3Rpb24iIHRpdGxlPSJHc3RJdGVyYXRvckZyZWVGdW5jdGlvbiAoKSI+R3N0SXRlcmF0b3JGcmVlRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCIgdGl0bGU9IkdzdEl0ZXJhdG9yIj5Hc3RJdGVyYXRvcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvckl0ZW0iIHRpdGxlPSJlbnVtIEdzdEl0ZXJhdG9ySXRlbSI+R3N0SXRlcmF0b3JJdGVtPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwiIHRpdGxlPSJHc3RJdGVyYXRvciI+R3N0SXRlcmF0b3I8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JJdGVtRnVuY3Rpb24iIHRpdGxlPSJHc3RJdGVyYXRvckl0ZW1GdW5jdGlvbiAoKSI+R3N0SXRlcmF0b3JJdGVtRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCIgdGl0bGU9IkdzdEl0ZXJhdG9yIj5Hc3RJdGVyYXRvcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvck5leHRGdW5jdGlvbiIgdGl0bGU9IkdzdEl0ZXJhdG9yTmV4dEZ1bmN0aW9uICgpIj5Hc3RJdGVyYXRvck5leHRGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sIiB0aXRsZT0iR3N0SXRlcmF0b3IiPkdzdEl0ZXJhdG9yPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yUmVzdWx0IiB0aXRsZT0iZW51bSBHc3RJdGVyYXRvclJlc3VsdCI+R3N0SXRlcmF0b3JSZXN1bHQ8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCIgdGl0bGU9IkdzdEl0ZXJhdG9yIj5Hc3RJdGVyYXRvcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvclJlc3luY0Z1bmN0aW9uIiB0aXRsZT0iR3N0SXRlcmF0b3JSZXN5bmNGdW5jdGlvbiAoKSI+R3N0SXRlcmF0b3JSZXN5bmNGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sIiB0aXRsZT0iR3N0SXRlcmF0b3IiPkdzdEl0ZXJhdG9yPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dTVC1JVEVSQVRPUi1DT09LSUU6Q0FQUyIgdGl0bGU9IkdTVF9JVEVSQVRPUl9DT09LSUUoKSI+R1NUX0lURVJBVE9SX0NPT0tJRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCIgdGl0bGU9IkdzdEl0ZXJhdG9yIj5Hc3RJdGVyYXRvcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItY29weSIgdGl0bGU9ImdzdF9pdGVyYXRvcl9jb3B5ICgpIj5nc3RfaXRlcmF0b3JfY29weTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCIgdGl0bGU9IkdzdEl0ZXJhdG9yIj5Hc3RJdGVyYXRvcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItZmlsdGVyIiB0aXRsZT0iZ3N0X2l0ZXJhdG9yX2ZpbHRlciAoKSI+Z3N0X2l0ZXJhdG9yX2ZpbHRlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCIgdGl0bGU9IkdzdEl0ZXJhdG9yIj5Hc3RJdGVyYXRvcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItZmluZC1jdXN0b20iIHRpdGxlPSJnc3RfaXRlcmF0b3JfZmluZF9jdXN0b20gKCkiPmdzdF9pdGVyYXRvcl9maW5kX2N1c3RvbTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCIgdGl0bGU9IkdzdEl0ZXJhdG9yIj5Hc3RJdGVyYXRvcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItZm9sZCIgdGl0bGU9ImdzdF9pdGVyYXRvcl9mb2xkICgpIj5nc3RfaXRlcmF0b3JfZm9sZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCIgdGl0bGU9IkdzdEl0ZXJhdG9yIj5Hc3RJdGVyYXRvcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItZm9yZWFjaCIgdGl0bGU9ImdzdF9pdGVyYXRvcl9mb3JlYWNoICgpIj5nc3RfaXRlcmF0b3JfZm9yZWFjaDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCIgdGl0bGU9IkdzdEl0ZXJhdG9yIj5Hc3RJdGVyYXRvcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItZnJlZSIgdGl0bGU9ImdzdF9pdGVyYXRvcl9mcmVlICgpIj5nc3RfaXRlcmF0b3JfZnJlZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCIgdGl0bGU9IkdzdEl0ZXJhdG9yIj5Hc3RJdGVyYXRvcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHU1QtSVRFUkFUT1ItTE9DSzpDQVBTIiB0aXRsZT0iR1NUX0lURVJBVE9SX0xPQ0soKSI+R1NUX0lURVJBVE9SX0xPQ0s8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwiIHRpdGxlPSJHc3RJdGVyYXRvciI+R3N0SXRlcmF0b3I8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLW5ldyIgdGl0bGU9ImdzdF9pdGVyYXRvcl9uZXcgKCkiPmdzdF9pdGVyYXRvcl9uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwiIHRpdGxlPSJHc3RJdGVyYXRvciI+R3N0SXRlcmF0b3I8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLW5ldy1saXN0IiB0aXRsZT0iZ3N0X2l0ZXJhdG9yX25ld19saXN0ICgpIj5nc3RfaXRlcmF0b3JfbmV3X2xpc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwiIHRpdGxlPSJHc3RJdGVyYXRvciI+R3N0SXRlcmF0b3I8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLW5ldy1zaW5nbGUiIHRpdGxlPSJnc3RfaXRlcmF0b3JfbmV3X3NpbmdsZSAoKSI+Z3N0X2l0ZXJhdG9yX25ld19zaW5nbGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwiIHRpdGxlPSJHc3RJdGVyYXRvciI+R3N0SXRlcmF0b3I8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLW5leHQiIHRpdGxlPSJnc3RfaXRlcmF0b3JfbmV4dCAoKSI+Z3N0X2l0ZXJhdG9yX25leHQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwiIHRpdGxlPSJHc3RJdGVyYXRvciI+R3N0SXRlcmF0b3I8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR1NULUlURVJBVE9SLU9SSUctQ09PS0lFOkNBUFMiIHRpdGxlPSJHU1RfSVRFUkFUT1JfT1JJR19DT09LSUUoKSI+R1NUX0lURVJBVE9SX09SSUdfQ09PS0lFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sIiB0aXRsZT0iR3N0SXRlcmF0b3IiPkdzdEl0ZXJhdG9yPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1wdXNoIiB0aXRsZT0iZ3N0X2l0ZXJhdG9yX3B1c2ggKCkiPmdzdF9pdGVyYXRvcl9wdXNoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sIiB0aXRsZT0iR3N0SXRlcmF0b3IiPkdzdEl0ZXJhdG9yPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1yZXN5bmMiIHRpdGxlPSJnc3RfaXRlcmF0b3JfcmVzeW5jICgpIj5nc3RfaXRlcmF0b3JfcmVzeW5jPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sIiB0aXRsZT0iR3N0SXRlcmF0b3IiPkdzdEl0ZXJhdG9yPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGEgbmFtZT0iaWR4TCI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkw8L2gzPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUxFVkVMLURFRkFVTFQ6Q0FQUyIgdGl0bGU9IkdTVF9MRVZFTF9ERUZBVUxUIj5HU1RfTEVWRUxfREVGQVVMVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR3N0TGlicmFyeUVycm9yIiB0aXRsZT0iZW51bSBHc3RMaWJyYXJ5RXJyb3IiPkdzdExpYnJhcnlFcnJvcjwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCIgdGl0bGU9IkdzdEdFcnJvciI+R3N0R0Vycm9yPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtTElCUkFSWS1FUlJPUjpDQVBTIiB0aXRsZT0iR1NUX0xJQlJBUllfRVJST1IiPkdTVF9MSUJSQVJZX0VSUk9SPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCIgdGl0bGU9IkdzdEdFcnJvciI+R3N0R0Vycm9yPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dTVC1MSUNFTlNFLVVOS05PV046Q0FQUyIgdGl0bGU9IkdTVF9MSUNFTlNFX1VOS05PV04iPkdTVF9MSUNFTlNFX1VOS05PV048L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPkdzdFBsdWdpbjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1MT0c6Q0FQUyIgdGl0bGU9IkdTVF9MT0coKSI+R1NUX0xPRzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdExvZ0Z1bmN0aW9uIiB0aXRsZT0iR3N0TG9nRnVuY3Rpb24gKCkiPkdzdExvZ0Z1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTE9HLU9CSkVDVDpDQVBTIiB0aXRsZT0iR1NUX0xPR19PQkpFQ1QoKSI+R1NUX0xPR19PQkpFQ1Q8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8YSBuYW1lPSJpZHhNIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+TTwvaDM+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULU1BS0UtRk9VUkNDOkNBUFMiIHRpdGxlPSJHU1RfTUFLRV9GT1VSQ0MoKSI+R1NUX01BS0VfRk9VUkNDPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNYXBGbGFncyIgdGl0bGU9ImVudW0gR3N0TWFwRmxhZ3MiPkdzdE1hcEZsYWdzPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij5Hc3RNZW1vcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dTVC1NQVAtUkVBRFdSSVRFOkNBUFMiIHRpdGxlPSJHU1RfTUFQX1JFQURXUklURSI+R1NUX01BUF9SRUFEV1JJVEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij5Hc3RNZW1vcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTUVNRFVNUDpDQVBTIiB0aXRsZT0iR1NUX01FTURVTVAoKSI+R1NUX01FTURVTVA8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTUVNRFVNUC1PQkpFQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9NRU1EVU1QX09CSkVDVCgpIj5HU1RfTUVNRFVNUF9PQkpFQ1Q8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij5Hc3RNZW1vcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeUFsbG9jRnVuY3Rpb24iIHRpdGxlPSJHc3RNZW1vcnlBbGxvY0Z1bmN0aW9uICgpIj5Hc3RNZW1vcnlBbGxvY0Z1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij5Hc3RNZW1vcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeUNvcHlGdW5jdGlvbiIgdGl0bGU9IkdzdE1lbW9yeUNvcHlGdW5jdGlvbiAoKSI+R3N0TWVtb3J5Q29weUZ1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij5Hc3RNZW1vcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeUZsYWdzIiB0aXRsZT0iZW51bSBHc3RNZW1vcnlGbGFncyI+R3N0TWVtb3J5RmxhZ3M8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5RnJlZUZ1bmN0aW9uIiB0aXRsZT0iR3N0TWVtb3J5RnJlZUZ1bmN0aW9uICgpIj5Hc3RNZW1vcnlGcmVlRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5R2V0U2l6ZXNGdW5jdGlvbiIgdGl0bGU9IkdzdE1lbW9yeUdldFNpemVzRnVuY3Rpb24gKCkiPkdzdE1lbW9yeUdldFNpemVzRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5SW5mbyIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnlJbmZvIj5Hc3RNZW1vcnlJbmZvPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5SXNTcGFuRnVuY3Rpb24iIHRpdGxlPSJHc3RNZW1vcnlJc1NwYW5GdW5jdGlvbiAoKSI+R3N0TWVtb3J5SXNTcGFuRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5TWFwRnVuY3Rpb24iIHRpdGxlPSJHc3RNZW1vcnlNYXBGdW5jdGlvbiAoKSI+R3N0TWVtb3J5TWFwRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5UmVzaXplRnVuY3Rpb24iIHRpdGxlPSJHc3RNZW1vcnlSZXNpemVGdW5jdGlvbiAoKSI+R3N0TWVtb3J5UmVzaXplRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5U2hhcmVGdW5jdGlvbiIgdGl0bGU9IkdzdE1lbW9yeVNoYXJlRnVuY3Rpb24gKCkiPkdzdE1lbW9yeVNoYXJlRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5VW5tYXBGdW5jdGlvbiIgdGl0bGU9IkdzdE1lbW9yeVVubWFwRnVuY3Rpb24gKCkiPkdzdE1lbW9yeVVubWFwRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS1hbGlnbm1lbnQiIHRpdGxlPSJnc3RfbWVtb3J5X2FsaWdubWVudCI+Z3N0X21lbW9yeV9hbGlnbm1lbnQ8L2E+LCB2YXJpYWJsZSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij5Hc3RNZW1vcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktY29weSIgdGl0bGU9ImdzdF9tZW1vcnlfY29weSAoKSI+Z3N0X21lbW9yeV9jb3B5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+R3N0TWVtb3J5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LWdldC1zaXplcyIgdGl0bGU9ImdzdF9tZW1vcnlfZ2V0X3NpemVzICgpIj5nc3RfbWVtb3J5X2dldF9zaXplczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS1pcy1zcGFuIiB0aXRsZT0iZ3N0X21lbW9yeV9pc19zcGFuICgpIj5nc3RfbWVtb3J5X2lzX3NwYW48L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij5Hc3RNZW1vcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dTVC1NRU1PUlktSVMtV1JJVEFCTEU6Q0FQUyIgdGl0bGU9IkdTVF9NRU1PUllfSVNfV1JJVEFCTEUoKSI+R1NUX01FTU9SWV9JU19XUklUQUJMRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS1tYXAiIHRpdGxlPSJnc3RfbWVtb3J5X21hcCAoKSI+Z3N0X21lbW9yeV9tYXA8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij5Hc3RNZW1vcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktbmV3LXdyYXBwZWQiIHRpdGxlPSJnc3RfbWVtb3J5X25ld193cmFwcGVkICgpIj5nc3RfbWVtb3J5X25ld193cmFwcGVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+R3N0TWVtb3J5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LXJlZiIgdGl0bGU9ImdzdF9tZW1vcnlfcmVmICgpIj5nc3RfbWVtb3J5X3JlZjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS1yZXNpemUiIHRpdGxlPSJnc3RfbWVtb3J5X3Jlc2l6ZSAoKSI+Z3N0X21lbW9yeV9yZXNpemU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij5Hc3RNZW1vcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktc2hhcmUiIHRpdGxlPSJnc3RfbWVtb3J5X3NoYXJlICgpIj5nc3RfbWVtb3J5X3NoYXJlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+R3N0TWVtb3J5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LXVubWFwIiB0aXRsZT0iZ3N0X21lbW9yeV91bm1hcCAoKSI+Z3N0X21lbW9yeV91bm1hcDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS11bnJlZiIgdGl0bGU9ImdzdF9tZW1vcnlfdW5yZWYgKCkiPmdzdF9tZW1vcnlfdW5yZWY8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij5Hc3RNZW1vcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZVR5cGUiIHRpdGxlPSJlbnVtIEdzdE1lc3NhZ2VUeXBlIj5Hc3RNZXNzYWdlVHlwZTwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtY29weSIgdGl0bGU9ImdzdF9tZXNzYWdlX2NvcHkgKCkiPmdzdF9tZXNzYWdlX2NvcHk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1nZXQtc2VxbnVtIiB0aXRsZT0iZ3N0X21lc3NhZ2VfZ2V0X3NlcW51bSAoKSI+Z3N0X21lc3NhZ2VfZ2V0X3NlcW51bTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLWdldC1zdHJlYW0tc3RhdHVzLW9iamVjdCIgdGl0bGU9ImdzdF9tZXNzYWdlX2dldF9zdHJlYW1fc3RhdHVzX29iamVjdCAoKSI+Z3N0X21lc3NhZ2VfZ2V0X3N0cmVhbV9zdGF0dXNfb2JqZWN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtZ2V0LXN0cnVjdHVyZSIgdGl0bGU9ImdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUgKCkiPmdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1oYXMtbmFtZSIgdGl0bGU9ImdzdF9tZXNzYWdlX2hhc19uYW1lICgpIj5nc3RfbWVzc2FnZV9oYXNfbmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLWlzLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X21lc3NhZ2VfaXNfd3JpdGFibGUoKSI+Z3N0X21lc3NhZ2VfaXNfd3JpdGFibGU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1tYWtlLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbWFrZV93cml0YWJsZSgpIj5nc3RfbWVzc2FnZV9tYWtlX3dyaXRhYmxlPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWFwcGxpY2F0aW9uIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9uICgpIj5nc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctYXN5bmMtZG9uZSIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19hc3luY19kb25lICgpIj5nc3RfbWVzc2FnZV9uZXdfYXN5bmNfZG9uZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1hc3luYy1zdGFydCIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19hc3luY19zdGFydCAoKSI+Z3N0X21lc3NhZ2VfbmV3X2FzeW5jX3N0YXJ0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWJ1ZmZlcmluZyIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19idWZmZXJpbmcgKCkiPmdzdF9tZXNzYWdlX25ld19idWZmZXJpbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctY2xvY2stbG9zdCIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19jbG9ja19sb3N0ICgpIj5nc3RfbWVzc2FnZV9uZXdfY2xvY2tfbG9zdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1jbG9jay1wcm92aWRlIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X2Nsb2NrX3Byb3ZpZGUgKCkiPmdzdF9tZXNzYWdlX25ld19jbG9ja19wcm92aWRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWN1c3RvbSIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19jdXN0b20gKCkiPmdzdF9tZXNzYWdlX25ld19jdXN0b208L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctZHVyYXRpb24iIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb24gKCkiPmdzdF9tZXNzYWdlX25ld19kdXJhdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1lbGVtZW50IiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQgKCkiPmdzdF9tZXNzYWdlX25ld19lbGVtZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWVvcyIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19lb3MgKCkiPmdzdF9tZXNzYWdlX25ld19lb3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctZXJyb3IiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfZXJyb3IgKCkiPmdzdF9tZXNzYWdlX25ld19lcnJvcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1pbmZvIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X2luZm8gKCkiPmdzdF9tZXNzYWdlX25ld19pbmZvPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWxhdGVuY3kiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfbGF0ZW5jeSAoKSI+Z3N0X21lc3NhZ2VfbmV3X2xhdGVuY3k8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctbmV3LWNsb2NrIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X25ld19jbG9jayAoKSI+Z3N0X21lc3NhZ2VfbmV3X25ld19jbG9jazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1wcm9ncmVzcyIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19wcm9ncmVzcyAoKSI+Z3N0X21lc3NhZ2VfbmV3X3Byb2dyZXNzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXFvcyIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19xb3MgKCkiPmdzdF9tZXNzYWdlX25ld19xb3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctcmVxdWVzdC1zdGF0ZSIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19yZXF1ZXN0X3N0YXRlICgpIj5nc3RfbWVzc2FnZV9uZXdfcmVxdWVzdF9zdGF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1zZWdtZW50LWRvbmUiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lICgpIj5nc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXNlZ21lbnQtc3RhcnQiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9zdGFydCAoKSI+Z3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfc3RhcnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctc3RhdGUtY2hhbmdlZCIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19zdGF0ZV9jaGFuZ2VkICgpIj5nc3RfbWVzc2FnZV9uZXdfc3RhdGVfY2hhbmdlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1zdGF0ZS1kaXJ0eSIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19zdGF0ZV9kaXJ0eSAoKSI+Z3N0X21lc3NhZ2VfbmV3X3N0YXRlX2RpcnR5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXN0ZXAtZG9uZSIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19zdGVwX2RvbmUgKCkiPmdzdF9tZXNzYWdlX25ld19zdGVwX2RvbmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctc3RlcC1zdGFydCIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19zdGVwX3N0YXJ0ICgpIj5nc3RfbWVzc2FnZV9uZXdfc3RlcF9zdGFydDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1zdHJlYW0tc3RhdHVzIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X3N0cmVhbV9zdGF0dXMgKCkiPmdzdF9tZXNzYWdlX25ld19zdHJlYW1fc3RhdHVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXN0cnVjdHVyZS1jaGFuZ2UiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfc3RydWN0dXJlX2NoYW5nZSAoKSI+Z3N0X21lc3NhZ2VfbmV3X3N0cnVjdHVyZV9jaGFuZ2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctdGFnIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X3RhZyAoKSI+Z3N0X21lc3NhZ2VfbmV3X3RhZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy13YXJuaW5nIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X3dhcm5pbmcgKCkiPmdzdF9tZXNzYWdlX25ld193YXJuaW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtYXN5bmMtZG9uZSIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX2FzeW5jX2RvbmUgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX2FzeW5jX2RvbmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1idWZmZXJpbmciIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9idWZmZXJpbmcgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWJ1ZmZlcmluZy1zdGF0cyIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZ19zdGF0cyAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nX3N0YXRzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtY2xvY2stbG9zdCIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX2Nsb2NrX2xvc3QgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX2Nsb2NrX2xvc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1jbG9jay1wcm92aWRlIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfY2xvY2tfcHJvdmlkZSAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfY2xvY2tfcHJvdmlkZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWR1cmF0aW9uIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfZHVyYXRpb24gKCkiPmdzdF9tZXNzYWdlX3BhcnNlX2R1cmF0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtZXJyb3IiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfZXJyb3I8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1pbmZvIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfaW5mbyAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfaW5mbzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLW5ldy1jbG9jayIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX25ld19jbG9jayAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfbmV3X2Nsb2NrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtcHJvZ3Jlc3MiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9wcm9ncmVzcyAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfcHJvZ3Jlc3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1xb3MiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9xb3MgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX3FvczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXFvcy1zdGF0cyIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX3Fvc19zdGF0cyAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfcW9zX3N0YXRzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtcW9zLXZhbHVlcyIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX3Fvc192YWx1ZXMgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX3Fvc192YWx1ZXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1yZXF1ZXN0LXN0YXRlIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfcmVxdWVzdF9zdGF0ZSAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfcmVxdWVzdF9zdGF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXNlZ21lbnQtZG9uZSIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX3NlZ21lbnRfZG9uZSAoKSI+Z3N0X21lc3NhZ2VfcGFyc2Vfc2VnbWVudF9kb25lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2Utc2VnbWVudC1zdGFydCIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX3NlZ21lbnRfc3RhcnQgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX3NlZ21lbnRfc3RhcnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1zdGF0ZS1jaGFuZ2VkIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZCAoKSI+Z3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXN0ZXAtZG9uZSIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX3N0ZXBfZG9uZSAoKSI+Z3N0X21lc3NhZ2VfcGFyc2Vfc3RlcF9kb25lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2Utc3RlcC1zdGFydCIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX3N0ZXBfc3RhcnQgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX3N0ZXBfc3RhcnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1zdHJlYW0tc3RhdHVzIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2Vfc3RyZWFtX3N0YXR1cyAoKSI+Z3N0X21lc3NhZ2VfcGFyc2Vfc3RyZWFtX3N0YXR1czwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXN0cnVjdHVyZS1jaGFuZ2UiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9zdHJ1Y3R1cmVfY2hhbmdlICgpIj5nc3RfbWVzc2FnZV9wYXJzZV9zdHJ1Y3R1cmVfY2hhbmdlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtdGFnIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfdGFnICgpIj5nc3RfbWVzc2FnZV9wYXJzZV90YWc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS13YXJuaW5nIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2Vfd2FybmluZyAoKSI+Z3N0X21lc3NhZ2VfcGFyc2Vfd2FybmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXJlZiIgdGl0bGU9ImdzdF9tZXNzYWdlX3JlZiAoKSI+Z3N0X21lc3NhZ2VfcmVmPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcmVwbGFjZSIgdGl0bGU9ImdzdF9tZXNzYWdlX3JlcGxhY2UoKSI+Z3N0X21lc3NhZ2VfcmVwbGFjZTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVNFUU5VTTpDQVBTIiB0aXRsZT0iR1NUX01FU1NBR0VfU0VRTlVNKCkiPkdTVF9NRVNTQUdFX1NFUU5VTTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXNldC1idWZmZXJpbmctc3RhdHMiIHRpdGxlPSJnc3RfbWVzc2FnZV9zZXRfYnVmZmVyaW5nX3N0YXRzICgpIj5nc3RfbWVzc2FnZV9zZXRfYnVmZmVyaW5nX3N0YXRzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2Utc2V0LXFvcy1zdGF0cyIgdGl0bGU9ImdzdF9tZXNzYWdlX3NldF9xb3Nfc3RhdHMgKCkiPmdzdF9tZXNzYWdlX3NldF9xb3Nfc3RhdHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1zZXQtcW9zLXZhbHVlcyIgdGl0bGU9ImdzdF9tZXNzYWdlX3NldF9xb3NfdmFsdWVzICgpIj5nc3RfbWVzc2FnZV9zZXRfcW9zX3ZhbHVlczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXNldC1zZXFudW0iIHRpdGxlPSJnc3RfbWVzc2FnZV9zZXRfc2VxbnVtICgpIj5nc3RfbWVzc2FnZV9zZXRfc2VxbnVtPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2Utc2V0LXN0cmVhbS1zdGF0dXMtb2JqZWN0IiB0aXRsZT0iZ3N0X21lc3NhZ2Vfc2V0X3N0cmVhbV9zdGF0dXNfb2JqZWN0ICgpIj5nc3RfbWVzc2FnZV9zZXRfc3RyZWFtX3N0YXR1c19vYmplY3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1TUkM6Q0FQUyIgdGl0bGU9IkdTVF9NRVNTQUdFX1NSQygpIj5HU1RfTUVTU0FHRV9TUkM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1TUkMtTkFNRTpDQVBTIiB0aXRsZT0iR1NUX01FU1NBR0VfU1JDX05BTUUoKSI+R1NUX01FU1NBR0VfU1JDX05BTUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1USU1FU1RBTVA6Q0FQUyIgdGl0bGU9IkdTVF9NRVNTQUdFX1RJTUVTVEFNUCgpIj5HU1RfTUVTU0FHRV9USU1FU1RBTVA8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1UUkFDRS1OQU1FOkNBUFMiIHRpdGxlPSJHU1RfTUVTU0FHRV9UUkFDRV9OQU1FIj5HU1RfTUVTU0FHRV9UUkFDRV9OQU1FPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtVFlQRTpDQVBTIiB0aXRsZT0iR1NUX01FU1NBR0VfVFlQRSgpIj5HU1RfTUVTU0FHRV9UWVBFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtdHlwZS1nZXQtbmFtZSIgdGl0bGU9ImdzdF9tZXNzYWdlX3R5cGVfZ2V0X25hbWUgKCkiPmdzdF9tZXNzYWdlX3R5cGVfZ2V0X25hbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1UWVBFLU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9NRVNTQUdFX1RZUEVfTkFNRSgpIj5HU1RfTUVTU0FHRV9UWVBFX05BTUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS10eXBlLXRvLXF1YXJrIiB0aXRsZT0iZ3N0X21lc3NhZ2VfdHlwZV90b19xdWFyayAoKSI+Z3N0X21lc3NhZ2VfdHlwZV90b19xdWFyazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXVucmVmIiB0aXRsZT0iZ3N0X21lc3NhZ2VfdW5yZWYgKCkiPmdzdF9tZXNzYWdlX3VucmVmPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YSIgdGl0bGU9InN0cnVjdCBHc3RNZXRhIj5Hc3RNZXRhPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sIiB0aXRsZT0iR3N0TWV0YSI+R3N0TWV0YTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFDb3B5RnVuY3Rpb24iIHRpdGxlPSJHc3RNZXRhQ29weUZ1bmN0aW9uICgpIj5Hc3RNZXRhQ29weUZ1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCIgdGl0bGU9IkdzdE1ldGEiPkdzdE1ldGE8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhRnJlZUZ1bmN0aW9uIiB0aXRsZT0iR3N0TWV0YUZyZWVGdW5jdGlvbiAoKSI+R3N0TWV0YUZyZWVGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwiIHRpdGxlPSJHc3RNZXRhIj5Hc3RNZXRhPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YUluZm8iIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YUluZm8iPkdzdE1ldGFJbmZvPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sIiB0aXRsZT0iR3N0TWV0YSI+R3N0TWV0YTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFJbml0RnVuY3Rpb24iIHRpdGxlPSJHc3RNZXRhSW5pdEZ1bmN0aW9uICgpIj5Hc3RNZXRhSW5pdEZ1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCIgdGl0bGU9IkdzdE1ldGEiPkdzdE1ldGE8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdE1ldGFUaW1pbmciIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YVRpbWluZyI+R3N0TWV0YVRpbWluZzwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhVHJhbnNmb3JtRnVuY3Rpb24iIHRpdGxlPSJHc3RNZXRhVHJhbnNmb3JtRnVuY3Rpb24gKCkiPkdzdE1ldGFUcmFuc2Zvcm1GdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwiIHRpdGxlPSJHc3RNZXRhIj5Hc3RNZXRhPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjZ3N0LW1ldGEtZ2V0LWluZm8iIHRpdGxlPSJnc3RfbWV0YV9nZXRfaW5mbyAoKSI+Z3N0X21ldGFfZ2V0X2luZm88L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCIgdGl0bGU9IkdzdE1ldGEiPkdzdE1ldGE8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNnc3QtbWV0YS1yZWdpc3RlciIgdGl0bGU9ImdzdF9tZXRhX3JlZ2lzdGVyICgpIj5nc3RfbWV0YV9yZWdpc3RlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sIiB0aXRsZT0iR3N0TWV0YSI+R3N0TWV0YTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LW1ldGEtdGltaW5nLWdldC1pbmZvIiB0aXRsZT0iZ3N0X21ldGFfdGltaW5nX2dldF9pbmZvICgpIj5nc3RfbWV0YV90aW1pbmdfZ2V0X2luZm88L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1NRVRBLVRJTUlORy1JTkZPOkNBUFMiIHRpdGxlPSJHU1RfTUVUQV9USU1JTkdfSU5GTyI+R1NUX01FVEFfVElNSU5HX0lORk88L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHU1QtTUVUQS1UUkFDRS1OQU1FOkNBUFMiIHRpdGxlPSJHU1RfTUVUQV9UUkFDRV9OQU1FIj5HU1RfTUVUQV9UUkFDRV9OQU1FPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwiIHRpdGxlPSJHc3RNZXRhIj5Hc3RNZXRhPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij5Hc3RNaW5pT2JqZWN0PC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sIiB0aXRsZT0iR3N0TWluaU9iamVjdCI+R3N0TWluaU9iamVjdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3RDb3B5RnVuY3Rpb24iIHRpdGxlPSJHc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uICgpIj5Hc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0RGlzcG9zZUZ1bmN0aW9uIiB0aXRsZT0iR3N0TWluaU9iamVjdERpc3Bvc2VGdW5jdGlvbiAoKSI+R3N0TWluaU9iamVjdERpc3Bvc2VGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RNaW5pT2JqZWN0Ij5Hc3RNaW5pT2JqZWN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdEZsYWdzIiB0aXRsZT0iZW51bSBHc3RNaW5pT2JqZWN0RmxhZ3MiPkdzdE1pbmlPYmplY3RGbGFnczwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RNaW5pT2JqZWN0Ij5Hc3RNaW5pT2JqZWN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdEZyZWVGdW5jdGlvbiIgdGl0bGU9IkdzdE1pbmlPYmplY3RGcmVlRnVuY3Rpb24gKCkiPkdzdE1pbmlPYmplY3RGcmVlRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sIiB0aXRsZT0iR3N0TWluaU9iamVjdCI+R3N0TWluaU9iamVjdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3RXZWFrTm90aWZ5IiB0aXRsZT0iR3N0TWluaU9iamVjdFdlYWtOb3RpZnkgKCkiPkdzdE1pbmlPYmplY3RXZWFrTm90aWZ5PC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtY29weSIgdGl0bGU9ImdzdF9taW5pX29iamVjdF9jb3B5ICgpIj5nc3RfbWluaV9vYmplY3RfY29weTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sIiB0aXRsZT0iR3N0TWluaU9iamVjdCI+R3N0TWluaU9iamVjdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1NSU5JLU9CSkVDVC1GTEFHUzpDQVBTIiB0aXRsZT0iR1NUX01JTklfT0JKRUNUX0ZMQUdTKCkiPkdTVF9NSU5JX09CSkVDVF9GTEFHUzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sIiB0aXRsZT0iR3N0TWluaU9iamVjdCI+R3N0TWluaU9iamVjdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1NSU5JLU9CSkVDVC1GTEFHLUlTLVNFVDpDQVBTIiB0aXRsZT0iR1NUX01JTklfT0JKRUNUX0ZMQUdfSVNfU0VUKCkiPkdTVF9NSU5JX09CSkVDVF9GTEFHX0lTX1NFVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sIiB0aXRsZT0iR3N0TWluaU9iamVjdCI+R3N0TWluaU9iamVjdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1NSU5JLU9CSkVDVC1GTEFHLVNFVDpDQVBTIiB0aXRsZT0iR1NUX01JTklfT0JKRUNUX0ZMQUdfU0VUKCkiPkdTVF9NSU5JX09CSkVDVF9GTEFHX1NFVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sIiB0aXRsZT0iR3N0TWluaU9iamVjdCI+R3N0TWluaU9iamVjdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1NSU5JLU9CSkVDVC1GTEFHLVVOU0VUOkNBUFMiIHRpdGxlPSJHU1RfTUlOSV9PQkpFQ1RfRkxBR19VTlNFVCgpIj5HU1RfTUlOSV9PQkpFQ1RfRkxBR19VTlNFVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sIiB0aXRsZT0iR3N0TWluaU9iamVjdCI+R3N0TWluaU9iamVjdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC1pbml0IiB0aXRsZT0iZ3N0X21pbmlfb2JqZWN0X2luaXQgKCkiPmdzdF9taW5pX29iamVjdF9pbml0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RNaW5pT2JqZWN0Ij5Hc3RNaW5pT2JqZWN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LWlzLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X21pbmlfb2JqZWN0X2lzX3dyaXRhYmxlICgpIj5nc3RfbWluaV9vYmplY3RfaXNfd3JpdGFibGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtbWFrZS13cml0YWJsZSIgdGl0bGU9ImdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlICgpIj5nc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sIiB0aXRsZT0iR3N0TWluaU9iamVjdCI+R3N0TWluaU9iamVjdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC1yZWYiIHRpdGxlPSJnc3RfbWluaV9vYmplY3RfcmVmICgpIj5nc3RfbWluaV9vYmplY3RfcmVmPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RNaW5pT2JqZWN0Ij5Hc3RNaW5pT2JqZWN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR1NULU1JTkktT0JKRUNULVJFRkNPVU5UOkNBUFMiIHRpdGxlPSJHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlQoKSI+R1NUX01JTklfT0JKRUNUX1JFRkNPVU5UPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RNaW5pT2JqZWN0Ij5Hc3RNaW5pT2JqZWN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR1NULU1JTkktT0JKRUNULVJFRkNPVU5ULVZBTFVFOkNBUFMiIHRpdGxlPSJHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUoKSI+R1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RNaW5pT2JqZWN0Ij5Hc3RNaW5pT2JqZWN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LXJlcGxhY2UiIHRpdGxlPSJnc3RfbWluaV9vYmplY3RfcmVwbGFjZSAoKSI+Z3N0X21pbmlfb2JqZWN0X3JlcGxhY2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHU1QtTUlOSS1PQkpFQ1QtU0laRTpDQVBTIiB0aXRsZT0iR1NUX01JTklfT0JKRUNUX1NJWkUoKSI+R1NUX01JTklfT0JKRUNUX1NJWkU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3Qtc3RlYWwiIHRpdGxlPSJnc3RfbWluaV9vYmplY3Rfc3RlYWwgKCkiPmdzdF9taW5pX29iamVjdF9zdGVhbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sIiB0aXRsZT0iR3N0TWluaU9iamVjdCI+R3N0TWluaU9iamVjdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC10YWtlIiB0aXRsZT0iZ3N0X21pbmlfb2JqZWN0X3Rha2UgKCkiPmdzdF9taW5pX29iamVjdF90YWtlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RNaW5pT2JqZWN0Ij5Hc3RNaW5pT2JqZWN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR1NULU1JTkktT0JKRUNULVRZUEU6Q0FQUyIgdGl0bGU9IkdTVF9NSU5JX09CSkVDVF9UWVBFKCkiPkdTVF9NSU5JX09CSkVDVF9UWVBFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RNaW5pT2JqZWN0Ij5Hc3RNaW5pT2JqZWN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LXVucmVmIiB0aXRsZT0iZ3N0X21pbmlfb2JqZWN0X3VucmVmICgpIj5nc3RfbWluaV9vYmplY3RfdW5yZWY8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3Qtd2Vhay1yZWYiIHRpdGxlPSJnc3RfbWluaV9vYmplY3Rfd2Vha19yZWYgKCkiPmdzdF9taW5pX29iamVjdF93ZWFrX3JlZjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sIiB0aXRsZT0iR3N0TWluaU9iamVjdCI+R3N0TWluaU9iamVjdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC13ZWFrLXVucmVmIiB0aXRsZT0iZ3N0X21pbmlfb2JqZWN0X3dlYWtfdW5yZWYgKCkiPmdzdF9taW5pX29iamVjdF93ZWFrX3VucmVmPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RNaW5pT2JqZWN0Ij5Hc3RNaW5pT2JqZWN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULU1TRUNPTkQ6Q0FQUyIgdGl0bGU9IkdTVF9NU0VDT05EIj5HU1RfTVNFQ09ORDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGEgbmFtZT0iaWR4TiI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPk48L2gzPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULU5TRUNPTkQ6Q0FQUyIgdGl0bGU9IkdTVF9OU0VDT05EIj5HU1RfTlNFQ09ORDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGEgbmFtZT0iaWR4TyI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPk88L2gzPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LWRlZXAtbm90aWZ5IiB0aXRsZT0nVGhlICJkZWVwLW5vdGlmeSIgc2lnbmFsJz5Hc3RPYmplY3Q6OmRlZXAtbm90aWZ5PC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHc3RPYmplY3QtLW5hbWUiIHRpdGxlPSdUaGUgIm5hbWUiIHByb3BlcnR5Jz5Hc3RPYmplY3Q6bmFtZTwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHc3RPYmplY3QtLXBhcmVudCIgdGl0bGU9J1RoZSAicGFyZW50IiBwcm9wZXJ0eSc+R3N0T2JqZWN0OnBhcmVudDwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHc3RPYmplY3RDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RPYmplY3RDbGFzcyI+R3N0T2JqZWN0Q2xhc3M8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0RmxhZ3MiIHRpdGxlPSJlbnVtIEdzdE9iamVjdEZsYWdzIj5Hc3RPYmplY3RGbGFnczwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1jaGVjay11bmlxdWVuZXNzIiB0aXRsZT0iZ3N0X29iamVjdF9jaGVja191bmlxdWVuZXNzICgpIj5nc3Rfb2JqZWN0X2NoZWNrX3VuaXF1ZW5lc3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWRlZmF1bHQtZGVlcC1ub3RpZnkiIHRpdGxlPSJnc3Rfb2JqZWN0X2RlZmF1bHRfZGVlcF9ub3RpZnkgKCkiPmdzdF9vYmplY3RfZGVmYXVsdF9kZWVwX25vdGlmeTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+R3N0T2JqZWN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtZGVmYXVsdC1lcnJvciIgdGl0bGU9ImdzdF9vYmplY3RfZGVmYXVsdF9lcnJvciAoKSI+Z3N0X29iamVjdF9kZWZhdWx0X2Vycm9yPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1GTEFHUzpDQVBTIiB0aXRsZT0iR1NUX09CSkVDVF9GTEFHUygpIj5HU1RfT0JKRUNUX0ZMQUdTPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1GTEFHLUlTLVNFVDpDQVBTIiB0aXRsZT0iR1NUX09CSkVDVF9GTEFHX0lTX1NFVCgpIj5HU1RfT0JKRUNUX0ZMQUdfSVNfU0VUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1GTEFHLVNFVDpDQVBTIiB0aXRsZT0iR1NUX09CSkVDVF9GTEFHX1NFVCgpIj5HU1RfT0JKRUNUX0ZMQUdfU0VUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1GTEFHLVVOU0VUOkNBUFMiIHRpdGxlPSJHU1RfT0JKRUNUX0ZMQUdfVU5TRVQoKSI+R1NUX09CSkVDVF9GTEFHX1VOU0VUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1HRVQtTE9DSzpDQVBTIiB0aXRsZT0iR1NUX09CSkVDVF9HRVRfTE9DSygpIj5HU1RfT0JKRUNUX0dFVF9MT0NLPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1nZXQtbmFtZSIgdGl0bGU9ImdzdF9vYmplY3RfZ2V0X25hbWUgKCkiPmdzdF9vYmplY3RfZ2V0X25hbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC1wYXJlbnQiIHRpdGxlPSJnc3Rfb2JqZWN0X2dldF9wYXJlbnQgKCkiPmdzdF9vYmplY3RfZ2V0X3BhcmVudDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+R3N0T2JqZWN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtZ2V0LXBhdGgtc3RyaW5nIiB0aXRsZT0iZ3N0X29iamVjdF9nZXRfcGF0aF9zdHJpbmcgKCkiPmdzdF9vYmplY3RfZ2V0X3BhdGhfc3RyaW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1oYXMtYW5jZXN0b3IiIHRpdGxlPSJnc3Rfb2JqZWN0X2hhc19hbmNlc3RvciAoKSI+Z3N0X29iamVjdF9oYXNfYW5jZXN0b3I8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULUxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9PQkpFQ1RfTE9DSygpIj5HU1RfT0JKRUNUX0xPQ0s8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9PQkpFQ1RfTkFNRSgpIj5HU1RfT0JKRUNUX05BTUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULVBBUkVOVDpDQVBTIiB0aXRsZT0iR1NUX09CSkVDVF9QQVJFTlQoKSI+R1NUX09CSkVDVF9QQVJFTlQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXJlZiIgdGl0bGU9ImdzdF9vYmplY3RfcmVmICgpIj5nc3Rfb2JqZWN0X3JlZjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+R3N0T2JqZWN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI0dTVC1PQkpFQ1QtUkVGQ09VTlQ6Q0FQUyIgdGl0bGU9IkdTVF9PQkpFQ1RfUkVGQ09VTlQoKSI+R1NUX09CSkVDVF9SRUZDT1VOVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+R3N0T2JqZWN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI0dTVC1PQkpFQ1QtUkVGQ09VTlQtVkFMVUU6Q0FQUyIgdGl0bGU9IkdTVF9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUoKSI+R1NUX09CSkVDVF9SRUZDT1VOVF9WQUxVRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+R3N0T2JqZWN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtcmVmLXNpbmsiIHRpdGxlPSJnc3Rfb2JqZWN0X3JlZl9zaW5rICgpIj5nc3Rfb2JqZWN0X3JlZl9zaW5rPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1yZXBsYWNlIiB0aXRsZT0iZ3N0X29iamVjdF9yZXBsYWNlICgpIj5nc3Rfb2JqZWN0X3JlcGxhY2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXNldC1uYW1lIiB0aXRsZT0iZ3N0X29iamVjdF9zZXRfbmFtZSAoKSI+Z3N0X29iamVjdF9zZXRfbmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+R3N0T2JqZWN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3Qtc2V0LXBhcmVudCIgdGl0bGU9ImdzdF9vYmplY3Rfc2V0X3BhcmVudCAoKSI+Z3N0X29iamVjdF9zZXRfcGFyZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1UUllMT0NLOkNBUFMiIHRpdGxlPSJHU1RfT0JKRUNUX1RSWUxPQ0soKSI+R1NUX09CSkVDVF9UUllMT0NLPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1VTkxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9PQkpFQ1RfVU5MT0NLKCkiPkdTVF9PQkpFQ1RfVU5MT0NLPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC11bnBhcmVudCIgdGl0bGU9ImdzdF9vYmplY3RfdW5wYXJlbnQgKCkiPmdzdF9vYmplY3RfdW5wYXJlbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucmVmIiB0aXRsZT0iZ3N0X29iamVjdF91bnJlZiAoKSI+Z3N0X29iamVjdF91bnJlZjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+R3N0T2JqZWN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGEgbmFtZT0iaWR4UCI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPlA8L2gzPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UGFkIj5Hc3RQYWQ8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkLWxpbmtlZCIgdGl0bGU9J1RoZSAibGlua2VkIiBzaWduYWwnPkdzdFBhZDo6bGlua2VkPC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWQtdW5saW5rZWQiIHRpdGxlPSdUaGUgInVubGlua2VkIiBzaWduYWwnPkdzdFBhZDo6dW5saW5rZWQ8L2E+LCBvYmplY3Qgc2lnbmFsIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZC0tY2FwcyIgdGl0bGU9J1RoZSAiY2FwcyIgcHJvcGVydHknPkdzdFBhZDpjYXBzPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZC0tZGlyZWN0aW9uIiB0aXRsZT0nVGhlICJkaXJlY3Rpb24iIHByb3BlcnR5Jz5Hc3RQYWQ6ZGlyZWN0aW9uPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZC0tdGVtcGxhdGUiIHRpdGxlPSdUaGUgInRlbXBsYXRlIiBwcm9wZXJ0eSc+R3N0UGFkOnRlbXBsYXRlPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEFjY2VwdENhcHNGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEFjY2VwdENhcHNGdW5jdGlvbiAoKSI+R3N0UGFkQWNjZXB0Q2Fwc0Z1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkQWN0aXZhdGVGdW5jdGlvbiAoKSI+R3N0UGFkQWN0aXZhdGVGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbiAoKSI+R3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZENoYWluRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRDaGFpbkZ1bmN0aW9uICgpIj5Hc3RQYWRDaGFpbkZ1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRDaGFpbkxpc3RGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZENoYWluTGlzdEZ1bmN0aW9uICgpIj5Hc3RQYWRDaGFpbkxpc3RGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRGlyZWN0aW9uIiB0aXRsZT0iZW51bSBHc3RQYWREaXJlY3Rpb24iPkdzdFBhZERpcmVjdGlvbjwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRXZlbnRGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEV2ZW50RnVuY3Rpb24gKCkiPkdzdFBhZEV2ZW50RnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEZpeGF0ZUNhcHNGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEZpeGF0ZUNhcHNGdW5jdGlvbiAoKSI+R3N0UGFkRml4YXRlQ2Fwc0Z1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRGbGFncyIgdGl0bGU9ImVudW0gR3N0UGFkRmxhZ3MiPkdzdFBhZEZsYWdzPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRGb3J3YXJkRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRGb3J3YXJkRnVuY3Rpb24gKCkiPkdzdFBhZEZvcndhcmRGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkR2V0Q2Fwc0Z1bmN0aW9uIiB0aXRsZT0iR3N0UGFkR2V0Q2Fwc0Z1bmN0aW9uICgpIj5Hc3RQYWRHZXRDYXBzRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEdldFJhbmdlRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRHZXRSYW5nZUZ1bmN0aW9uICgpIj5Hc3RQYWRHZXRSYW5nZUZ1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uIiB0aXRsZT0iR3N0UGFkSXRlckludExpbmtGdW5jdGlvbiAoKSI+R3N0UGFkSXRlckludExpbmtGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkTGlua0NoZWNrIiB0aXRsZT0iZW51bSBHc3RQYWRMaW5rQ2hlY2siPkdzdFBhZExpbmtDaGVjazwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkTGlua0Z1bmN0aW9uIiB0aXRsZT0iR3N0UGFkTGlua0Z1bmN0aW9uICgpIj5Hc3RQYWRMaW5rRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZExpbmtSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdFBhZExpbmtSZXR1cm4iPkdzdFBhZExpbmtSZXR1cm48L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkUHJlc2VuY2UiIHRpdGxlPSJlbnVtIEdzdFBhZFByZXNlbmNlIj5Hc3RQYWRQcmVzZW5jZTwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+R3N0UGFkVGVtcGxhdGU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkUHJvYmVDYWxsYmFjayIgdGl0bGU9IkdzdFBhZFByb2JlQ2FsbGJhY2sgKCkiPkdzdFBhZFByb2JlQ2FsbGJhY2s8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZFF1ZXJ5RnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRRdWVyeUZ1bmN0aW9uICgpIj5Hc3RQYWRRdWVyeUZ1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRRdWVyeVR5cGVGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZFF1ZXJ5VHlwZUZ1bmN0aW9uICgpIj5Hc3RQYWRRdWVyeVR5cGVGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkU3RpY2t5RXZlbnRzRm9yZWFjaEZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkU3RpY2t5RXZlbnRzRm9yZWFjaEZ1bmN0aW9uICgpIj5Hc3RQYWRTdGlja3lFdmVudHNGb3JlYWNoRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkVGVtcGxhdGUtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFBhZFRlbXBsYXRlIj5Hc3RQYWRUZW1wbGF0ZTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj5Hc3RQYWRUZW1wbGF0ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFRlbXBsYXRlLXBhZC1jcmVhdGVkIiB0aXRsZT0nVGhlICJwYWQtY3JlYXRlZCIgc2lnbmFsJz5Hc3RQYWRUZW1wbGF0ZTo6cGFkLWNyZWF0ZWQ8L2E+LCBvYmplY3Qgc2lnbmFsIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPkdzdFBhZFRlbXBsYXRlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkVGVtcGxhdGUtLWNhcHMiIHRpdGxlPSdUaGUgImNhcHMiIHByb3BlcnR5Jz5Hc3RQYWRUZW1wbGF0ZTpjYXBzPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPkdzdFBhZFRlbXBsYXRlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkVGVtcGxhdGUtLWRpcmVjdGlvbiIgdGl0bGU9J1RoZSAiZGlyZWN0aW9uIiBwcm9wZXJ0eSc+R3N0UGFkVGVtcGxhdGU6ZGlyZWN0aW9uPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPkdzdFBhZFRlbXBsYXRlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkVGVtcGxhdGUtLW5hbWUtdGVtcGxhdGUiIHRpdGxlPSdUaGUgIm5hbWUtdGVtcGxhdGUiIHByb3BlcnR5Jz5Hc3RQYWRUZW1wbGF0ZTpuYW1lLXRlbXBsYXRlPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPkdzdFBhZFRlbXBsYXRlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkVGVtcGxhdGUtLXByZXNlbmNlIiB0aXRsZT0nVGhlICJwcmVzZW5jZSIgcHJvcGVydHknPkdzdFBhZFRlbXBsYXRlOnByZXNlbmNlPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPkdzdFBhZFRlbXBsYXRlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkVGVtcGxhdGVGbGFncyIgdGl0bGU9ImVudW0gR3N0UGFkVGVtcGxhdGVGbGFncyI+R3N0UGFkVGVtcGxhdGVGbGFnczwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+R3N0UGFkVGVtcGxhdGU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkVW5saW5rRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRVbmxpbmtGdW5jdGlvbiAoKSI+R3N0UGFkVW5saW5rRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtYWNjZXB0LWNhcHMiIHRpdGxlPSJnc3RfcGFkX2FjY2VwdF9jYXBzICgpIj5nc3RfcGFkX2FjY2VwdF9jYXBzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1hY3RpdmF0ZS1wdWxsIiB0aXRsZT0iZ3N0X3BhZF9hY3RpdmF0ZV9wdWxsICgpIj5nc3RfcGFkX2FjdGl2YXRlX3B1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWFjdGl2YXRlLXB1c2giIHRpdGxlPSJnc3RfcGFkX2FjdGl2YXRlX3B1c2ggKCkiPmdzdF9wYWRfYWN0aXZhdGVfcHVzaDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtYWRkLXByb2JlIiB0aXRsZT0iZ3N0X3BhZF9hZGRfcHJvYmUgKCkiPmdzdF9wYWRfYWRkX3Byb2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1jYW4tbGluayIgdGl0bGU9ImdzdF9wYWRfY2FuX2xpbmsgKCkiPmdzdF9wYWRfY2FuX2xpbms8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWNoYWluIiB0aXRsZT0iZ3N0X3BhZF9jaGFpbiAoKSI+Z3N0X3BhZF9jaGFpbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtY2hhaW4tbGlzdCIgdGl0bGU9ImdzdF9wYWRfY2hhaW5fbGlzdCAoKSI+Z3N0X3BhZF9jaGFpbl9saXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1jaGVjay1yZWNvbmZpZ3VyZSIgdGl0bGU9ImdzdF9wYWRfY2hlY2tfcmVjb25maWd1cmUgKCkiPmdzdF9wYWRfY2hlY2tfcmVjb25maWd1cmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWV2ZW50LWRlZmF1bHQiIHRpdGxlPSJnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKCkiPmdzdF9wYWRfZXZlbnRfZGVmYXVsdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZml4YXRlLWNhcHMiIHRpdGxlPSJnc3RfcGFkX2ZpeGF0ZV9jYXBzICgpIj5nc3RfcGFkX2ZpeGF0ZV9jYXBzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1mb3J3YXJkIiB0aXRsZT0iZ3N0X3BhZF9mb3J3YXJkICgpIj5nc3RfcGFkX2ZvcndhcmQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1hbGxvd2VkLWNhcHMiIHRpdGxlPSJnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHMgKCkiPmdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LWNhcHMiIHRpdGxlPSJnc3RfcGFkX2dldF9jYXBzICgpIj5nc3RfcGFkX2dldF9jYXBzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtY2Fwcy1yZWZmZWQiIHRpdGxlPSJnc3RfcGFkX2dldF9jYXBzX3JlZmZlZCgpIj5nc3RfcGFkX2dldF9jYXBzX3JlZmZlZDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LWN1cnJlbnQtY2FwcyIgdGl0bGU9ImdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAoKSI+Z3N0X3BhZF9nZXRfY3VycmVudF9jYXBzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtZGlyZWN0aW9uIiB0aXRsZT0iZ3N0X3BhZF9nZXRfZGlyZWN0aW9uICgpIj5nc3RfcGFkX2dldF9kaXJlY3Rpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1lbGVtZW50LXByaXZhdGUiIHRpdGxlPSJnc3RfcGFkX2dldF9lbGVtZW50X3ByaXZhdGUgKCkiPmdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LW5hbWUiIHRpdGxlPSJnc3RfcGFkX2dldF9uYW1lKCkiPmdzdF9wYWRfZ2V0X25hbWU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1vZmZzZXQiIHRpdGxlPSJnc3RfcGFkX2dldF9vZmZzZXQgKCkiPmdzdF9wYWRfZ2V0X29mZnNldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXBhZC10ZW1wbGF0ZSIgdGl0bGU9ImdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZSAoKSI+Z3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtcGFkLXRlbXBsYXRlLWNhcHMiIHRpdGxlPSJnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAoKSI+Z3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1wYXJlbnQiIHRpdGxlPSJnc3RfcGFkX2dldF9wYXJlbnQoKSI+Z3N0X3BhZF9nZXRfcGFyZW50PC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtcGFyZW50LWVsZW1lbnQiIHRpdGxlPSJnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudCAoKSI+Z3N0X3BhZF9nZXRfcGFyZW50X2VsZW1lbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1wZWVyIiB0aXRsZT0iZ3N0X3BhZF9nZXRfcGVlciAoKSI+Z3N0X3BhZF9nZXRfcGVlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXF1ZXJ5LXR5cGVzIiB0aXRsZT0iZ3N0X3BhZF9nZXRfcXVlcnlfdHlwZXMgKCkiPmdzdF9wYWRfZ2V0X3F1ZXJ5X3R5cGVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtcXVlcnktdHlwZXMtZGVmYXVsdCIgdGl0bGU9ImdzdF9wYWRfZ2V0X3F1ZXJ5X3R5cGVzX2RlZmF1bHQgKCkiPmdzdF9wYWRfZ2V0X3F1ZXJ5X3R5cGVzX2RlZmF1bHQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1yYW5nZSIgdGl0bGU9ImdzdF9wYWRfZ2V0X3JhbmdlICgpIj5nc3RfcGFkX2dldF9yYW5nZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXN0aWNreS1ldmVudCIgdGl0bGU9ImdzdF9wYWRfZ2V0X3N0aWNreV9ldmVudCAoKSI+Z3N0X3BhZF9nZXRfc3RpY2t5X2V2ZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1HRVQtU1RSRUFNLUxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9QQURfR0VUX1NUUkVBTV9MT0NLKCkiPkdTVF9QQURfR0VUX1NUUkVBTV9MT0NLPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1oYXMtY3VycmVudC1jYXBzIiB0aXRsZT0iZ3N0X3BhZF9oYXNfY3VycmVudF9jYXBzICgpIj5nc3RfcGFkX2hhc19jdXJyZW50X2NhcHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWlzLWFjdGl2ZSIgdGl0bGU9ImdzdF9wYWRfaXNfYWN0aXZlICgpIj5nc3RfcGFkX2lzX2FjdGl2ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtaXMtYmxvY2tlZCIgdGl0bGU9ImdzdF9wYWRfaXNfYmxvY2tlZCAoKSI+Z3N0X3BhZF9pc19ibG9ja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1pcy1ibG9ja2luZyIgdGl0bGU9ImdzdF9wYWRfaXNfYmxvY2tpbmcgKCkiPmdzdF9wYWRfaXNfYmxvY2tpbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWlzLWxpbmtlZCIgdGl0bGU9ImdzdF9wYWRfaXNfbGlua2VkICgpIj5nc3RfcGFkX2lzX2xpbmtlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtaXRlcmF0ZS1pbnRlcm5hbC1saW5rcyIgdGl0bGU9ImdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rcyAoKSI+Z3N0X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1pdGVyYXRlLWludGVybmFsLWxpbmtzLWRlZmF1bHQiIHRpdGxlPSJnc3RfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZGVmYXVsdCAoKSI+Z3N0X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2RlZmF1bHQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWxpbmsiIHRpdGxlPSJnc3RfcGFkX2xpbmsgKCkiPmdzdF9wYWRfbGluazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtTElOSy1DSEVDSy1ERUZBVUxUOkNBUFMiIHRpdGxlPSJHU1RfUEFEX0xJTktfQ0hFQ0tfREVGQVVMVCI+R1NUX1BBRF9MSU5LX0NIRUNLX0RFRkFVTFQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELUxJTkstRkFJTEVEOkNBUFMiIHRpdGxlPSJHU1RfUEFEX0xJTktfRkFJTEVEKCkiPkdTVF9QQURfTElOS19GQUlMRUQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWxpbmstZnVsbCIgdGl0bGU9ImdzdF9wYWRfbGlua19mdWxsICgpIj5nc3RfcGFkX2xpbmtfZnVsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtTElOSy1TVUNDRVNTRlVMOkNBUFMiIHRpdGxlPSJHU1RfUEFEX0xJTktfU1VDQ0VTU0ZVTCgpIj5HU1RfUEFEX0xJTktfU1VDQ0VTU0ZVTDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtbWFyay1yZWNvbmZpZ3VyZSIgdGl0bGU9ImdzdF9wYWRfbWFya19yZWNvbmZpZ3VyZSAoKSI+Z3N0X3BhZF9tYXJrX3JlY29uZmlndXJlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1uZXciIHRpdGxlPSJnc3RfcGFkX25ldyAoKSI+Z3N0X3BhZF9uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLW5ldy1mcm9tLXN0YXRpYy10ZW1wbGF0ZSIgdGl0bGU9ImdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgpIj5nc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtbmV3LWZyb20tdGVtcGxhdGUiIHRpdGxlPSJnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlICgpIj5nc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1wYXVzZS10YXNrIiB0aXRsZT0iZ3N0X3BhZF9wYXVzZV90YXNrICgpIj5nc3RfcGFkX3BhdXNlX3Rhc2s8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXBlZXItYWNjZXB0LWNhcHMiIHRpdGxlPSJnc3RfcGFkX3BlZXJfYWNjZXB0X2NhcHMgKCkiPmdzdF9wYWRfcGVlcl9hY2NlcHRfY2FwczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcGVlci1nZXQtY2FwcyIgdGl0bGU9ImdzdF9wYWRfcGVlcl9nZXRfY2FwcyAoKSI+Z3N0X3BhZF9wZWVyX2dldF9jYXBzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1wZWVyLWdldC1jYXBzLXJlZmZlZCIgdGl0bGU9ImdzdF9wYWRfcGVlcl9nZXRfY2Fwc19yZWZmZWQoKSI+Z3N0X3BhZF9wZWVyX2dldF9jYXBzX3JlZmZlZDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcGVlci1xdWVyeSIgdGl0bGU9ImdzdF9wYWRfcGVlcl9xdWVyeSAoKSI+Z3N0X3BhZF9wZWVyX3F1ZXJ5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1wcm94eS1nZXRjYXBzIiB0aXRsZT0iZ3N0X3BhZF9wcm94eV9nZXRjYXBzICgpIj5nc3RfcGFkX3Byb3h5X2dldGNhcHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1bGwtcmFuZ2UiIHRpdGxlPSJnc3RfcGFkX3B1bGxfcmFuZ2UgKCkiPmdzdF9wYWRfcHVsbF9yYW5nZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcHVzaCIgdGl0bGU9ImdzdF9wYWRfcHVzaCAoKSI+Z3N0X3BhZF9wdXNoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1wdXNoLWV2ZW50IiB0aXRsZT0iZ3N0X3BhZF9wdXNoX2V2ZW50ICgpIj5nc3RfcGFkX3B1c2hfZXZlbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1c2gtbGlzdCIgdGl0bGU9ImdzdF9wYWRfcHVzaF9saXN0ICgpIj5nc3RfcGFkX3B1c2hfbGlzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcXVlcnkiIHRpdGxlPSJnc3RfcGFkX3F1ZXJ5ICgpIj5nc3RfcGFkX3F1ZXJ5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1xdWVyeS1jb252ZXJ0IiB0aXRsZT0iZ3N0X3BhZF9xdWVyeV9jb252ZXJ0ICgpIj5nc3RfcGFkX3F1ZXJ5X2NvbnZlcnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXF1ZXJ5LWRlZmF1bHQiIHRpdGxlPSJnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKCkiPmdzdF9wYWRfcXVlcnlfZGVmYXVsdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcXVlcnktZHVyYXRpb24iIHRpdGxlPSJnc3RfcGFkX3F1ZXJ5X2R1cmF0aW9uICgpIj5nc3RfcGFkX3F1ZXJ5X2R1cmF0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1xdWVyeS1wZWVyLWNvbnZlcnQiIHRpdGxlPSJnc3RfcGFkX3F1ZXJ5X3BlZXJfY29udmVydCAoKSI+Z3N0X3BhZF9xdWVyeV9wZWVyX2NvbnZlcnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXF1ZXJ5LXBlZXItZHVyYXRpb24iIHRpdGxlPSJnc3RfcGFkX3F1ZXJ5X3BlZXJfZHVyYXRpb24gKCkiPmdzdF9wYWRfcXVlcnlfcGVlcl9kdXJhdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcXVlcnktcGVlci1wb3NpdGlvbiIgdGl0bGU9ImdzdF9wYWRfcXVlcnlfcGVlcl9wb3NpdGlvbiAoKSI+Z3N0X3BhZF9xdWVyeV9wZWVyX3Bvc2l0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1xdWVyeS1wb3NpdGlvbiIgdGl0bGU9ImdzdF9wYWRfcXVlcnlfcG9zaXRpb24gKCkiPmdzdF9wYWRfcXVlcnlfcG9zaXRpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXJlbW92ZS1wcm9iZSIgdGl0bGU9ImdzdF9wYWRfcmVtb3ZlX3Byb2JlICgpIj5nc3RfcGFkX3JlbW92ZV9wcm9iZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2VuZC1ldmVudCIgdGl0bGU9ImdzdF9wYWRfc2VuZF9ldmVudCAoKSI+Z3N0X3BhZF9zZW5kX2V2ZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtYWNjZXB0Y2Fwcy1mdW5jdGlvbiIgdGl0bGU9ImdzdF9wYWRfc2V0X2FjY2VwdGNhcHNfZnVuY3Rpb24gKCkiPmdzdF9wYWRfc2V0X2FjY2VwdGNhcHNfZnVuY3Rpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1hY3RpdmF0ZXB1bGwtZnVuY3Rpb24iIHRpdGxlPSJnc3RfcGFkX3NldF9hY3RpdmF0ZXB1bGxfZnVuY3Rpb24gKCkiPmdzdF9wYWRfc2V0X2FjdGl2YXRlcHVsbF9mdW5jdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWFjdGl2YXRlcHVzaC1mdW5jdGlvbiIgdGl0bGU9ImdzdF9wYWRfc2V0X2FjdGl2YXRlcHVzaF9mdW5jdGlvbiAoKSI+Z3N0X3BhZF9zZXRfYWN0aXZhdGVwdXNoX2Z1bmN0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtYWN0aXZhdGUtZnVuY3Rpb24iIHRpdGxlPSJnc3RfcGFkX3NldF9hY3RpdmF0ZV9mdW5jdGlvbiAoKSI+Z3N0X3BhZF9zZXRfYWN0aXZhdGVfZnVuY3Rpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1hY3RpdmUiIHRpdGxlPSJnc3RfcGFkX3NldF9hY3RpdmUgKCkiPmdzdF9wYWRfc2V0X2FjdGl2ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWNhcHMiIHRpdGxlPSJnc3RfcGFkX3NldF9jYXBzICgpIj5nc3RfcGFkX3NldF9jYXBzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtY2hhaW4tZnVuY3Rpb24iIHRpdGxlPSJnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoKSI+Z3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1jaGFpbi1saXN0LWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X3BhZF9zZXRfY2hhaW5fbGlzdF9mdW5jdGlvbiAoKSI+Z3N0X3BhZF9zZXRfY2hhaW5fbGlzdF9mdW5jdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWVsZW1lbnQtcHJpdmF0ZSIgdGl0bGU9ImdzdF9wYWRfc2V0X2VsZW1lbnRfcHJpdmF0ZSAoKSI+Z3N0X3BhZF9zZXRfZWxlbWVudF9wcml2YXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtZXZlbnQtZnVuY3Rpb24iIHRpdGxlPSJnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAoKSI+Z3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1maXhhdGVjYXBzLWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X3BhZF9zZXRfZml4YXRlY2Fwc19mdW5jdGlvbiAoKSI+Z3N0X3BhZF9zZXRfZml4YXRlY2Fwc19mdW5jdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWdldGNhcHMtZnVuY3Rpb24iIHRpdGxlPSJnc3RfcGFkX3NldF9nZXRjYXBzX2Z1bmN0aW9uICgpIj5nc3RfcGFkX3NldF9nZXRjYXBzX2Z1bmN0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtZ2V0cmFuZ2UtZnVuY3Rpb24iIHRpdGxlPSJnc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbiAoKSI+Z3N0X3BhZF9zZXRfZ2V0cmFuZ2VfZnVuY3Rpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1pdGVyYXRlLWludGVybmFsLWxpbmtzLWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X3BhZF9zZXRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19mdW5jdGlvbiAoKSI+Z3N0X3BhZF9zZXRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19mdW5jdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWxpbmstZnVuY3Rpb24iIHRpdGxlPSJnc3RfcGFkX3NldF9saW5rX2Z1bmN0aW9uICgpIj5nc3RfcGFkX3NldF9saW5rX2Z1bmN0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtb2Zmc2V0IiB0aXRsZT0iZ3N0X3BhZF9zZXRfb2Zmc2V0ICgpIj5nc3RfcGFkX3NldF9vZmZzZXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1xdWVyeS1mdW5jdGlvbiIgdGl0bGU9ImdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uICgpIj5nc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LXF1ZXJ5LXR5cGUtZnVuY3Rpb24iIHRpdGxlPSJnc3RfcGFkX3NldF9xdWVyeV90eXBlX2Z1bmN0aW9uICgpIj5nc3RfcGFkX3NldF9xdWVyeV90eXBlX2Z1bmN0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtdW5saW5rLWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X3BhZF9zZXRfdW5saW5rX2Z1bmN0aW9uICgpIj5nc3RfcGFkX3NldF91bmxpbmtfZnVuY3Rpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXN0YXJ0LXRhc2siIHRpdGxlPSJnc3RfcGFkX3N0YXJ0X3Rhc2sgKCkiPmdzdF9wYWRfc3RhcnRfdGFzazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc3RpY2t5LWV2ZW50cy1mb3JlYWNoIiB0aXRsZT0iZ3N0X3BhZF9zdGlja3lfZXZlbnRzX2ZvcmVhY2ggKCkiPmdzdF9wYWRfc3RpY2t5X2V2ZW50c19mb3JlYWNoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zdG9wLXRhc2siIHRpdGxlPSJnc3RfcGFkX3N0b3BfdGFzayAoKSI+Z3N0X3BhZF9zdG9wX3Rhc2s8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVNUUkVBTS1MT0NLOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1NUUkVBTV9MT0NLKCkiPkdTVF9QQURfU1RSRUFNX0xPQ0s8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVNUUkVBTS1MT0NLLUZVTEw6Q0FQUyIgdGl0bGU9IkdTVF9QQURfU1RSRUFNX0xPQ0tfRlVMTCgpIj5HU1RfUEFEX1NUUkVBTV9MT0NLX0ZVTEw8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVNUUkVBTS1UUllMT0NLOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1NUUkVBTV9UUllMT0NLKCkiPkdTVF9QQURfU1RSRUFNX1RSWUxPQ0s8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVNUUkVBTS1VTkxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9QQURfU1RSRUFNX1VOTE9DSygpIj5HU1RfUEFEX1NUUkVBTV9VTkxPQ0s8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVNUUkVBTS1VTkxPQ0stRlVMTDpDQVBTIiB0aXRsZT0iR1NUX1BBRF9TVFJFQU1fVU5MT0NLX0ZVTEwoKSI+R1NUX1BBRF9TVFJFQU1fVU5MT0NLX0ZVTEw8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1QQUQtVEVNUExBVEUtQ0FQUyIgdGl0bGU9IkdTVF9QQURfVEVNUExBVEVfQ0FQUygpIj5HU1RfUEFEX1RFTVBMQVRFX0NBUFM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj5Hc3RQYWRUZW1wbGF0ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1QQUQtVEVNUExBVEUtRElSRUNUSU9OOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1RFTVBMQVRFX0RJUkVDVElPTigpIj5HU1RfUEFEX1RFTVBMQVRFX0RJUkVDVElPTjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPkdzdFBhZFRlbXBsYXRlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjZ3N0LXBhZC10ZW1wbGF0ZS1nZXQtY2FwcyIgdGl0bGU9ImdzdF9wYWRfdGVtcGxhdGVfZ2V0X2NhcHMgKCkiPmdzdF9wYWRfdGVtcGxhdGVfZ2V0X2NhcHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj5Hc3RQYWRUZW1wbGF0ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1QQUQtVEVNUExBVEUtSVMtRklYRUQ6Q0FQUyIgdGl0bGU9IkdTVF9QQURfVEVNUExBVEVfSVNfRklYRUQoKSI+R1NUX1BBRF9URU1QTEFURV9JU19GSVhFRDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPkdzdFBhZFRlbXBsYXRlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR1NULVBBRC1URU1QTEFURS1OQU1FLVRFTVBMQVRFOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1RFTVBMQVRFX05BTUVfVEVNUExBVEUoKSI+R1NUX1BBRF9URU1QTEFURV9OQU1FX1RFTVBMQVRFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+R3N0UGFkVGVtcGxhdGU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNnc3QtcGFkLXRlbXBsYXRlLW5ldyIgdGl0bGU9ImdzdF9wYWRfdGVtcGxhdGVfbmV3ICgpIj5nc3RfcGFkX3RlbXBsYXRlX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPkdzdFBhZFRlbXBsYXRlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR1NULVBBRC1URU1QTEFURS1QUkVTRU5DRTpDQVBTIiB0aXRsZT0iR1NUX1BBRF9URU1QTEFURV9QUkVTRU5DRSgpIj5HU1RfUEFEX1RFTVBMQVRFX1BSRVNFTkNFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+R3N0UGFkVGVtcGxhdGU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC11bmxpbmsiIHRpdGxlPSJnc3RfcGFkX3VubGluayAoKSI+Z3N0X3BhZF91bmxpbms8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXVzZS1maXhlZC1jYXBzIiB0aXRsZT0iZ3N0X3BhZF91c2VfZml4ZWRfY2FwcyAoKSI+Z3N0X3BhZF91c2VfZml4ZWRfY2FwczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCNHc3RQYXJhbVNwZWNGcmFjdGlvbiIgdGl0bGU9InN0cnVjdCBHc3RQYXJhbVNwZWNGcmFjdGlvbiI+R3N0UGFyYW1TcGVjRnJhY3Rpb248L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCIgdGl0bGU9IkdzdFBhcmFtU3BlYyI+R3N0UGFyYW1TcGVjPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCNHU1QtUEFSQU0tQ09OVFJPTExBQkxFOkNBUFMiIHRpdGxlPSJHU1RfUEFSQU1fQ09OVFJPTExBQkxFIj5HU1RfUEFSQU1fQ09OVFJPTExBQkxFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCIgdGl0bGU9IkdzdFBhcmFtU3BlYyI+R3N0UGFyYW1TcGVjPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCNHU1QtUEFSQU0tTVVUQUJMRS1QQVVTRUQ6Q0FQUyIgdGl0bGU9IkdTVF9QQVJBTV9NVVRBQkxFX1BBVVNFRCI+R1NUX1BBUkFNX01VVEFCTEVfUEFVU0VEPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCIgdGl0bGU9IkdzdFBhcmFtU3BlYyI+R3N0UGFyYW1TcGVjPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCNHU1QtUEFSQU0tTVVUQUJMRS1QTEFZSU5HOkNBUFMiIHRpdGxlPSJHU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HIj5HU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCIgdGl0bGU9IkdzdFBhcmFtU3BlYyI+R3N0UGFyYW1TcGVjPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCNHU1QtUEFSQU0tTVVUQUJMRS1SRUFEWTpDQVBTIiB0aXRsZT0iR1NUX1BBUkFNX01VVEFCTEVfUkVBRFkiPkdTVF9QQVJBTV9NVVRBQkxFX1JFQURZPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCIgdGl0bGU9IkdzdFBhcmFtU3BlYyI+R3N0UGFyYW1TcGVjPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCNnc3QtcGFyYW0tc3BlYy1mcmFjdGlvbiIgdGl0bGU9ImdzdF9wYXJhbV9zcGVjX2ZyYWN0aW9uICgpIj5nc3RfcGFyYW1fc3BlY19mcmFjdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyYW1TcGVjLmh0bWwiIHRpdGxlPSJHc3RQYXJhbVNwZWMiPkdzdFBhcmFtU3BlYzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyYW1TcGVjLmh0bWwjR1NULVBBUkFNLVVTRVItU0hJRlQ6Q0FQUyIgdGl0bGU9IkdTVF9QQVJBTV9VU0VSX1NISUZUIj5HU1RfUEFSQU1fVVNFUl9TSElGVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyYW1TcGVjLmh0bWwiIHRpdGxlPSJHc3RQYXJhbVNwZWMiPkdzdFBhcmFtU3BlYzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHc3RQYXJzZUNvbnRleHQiIHRpdGxlPSJHc3RQYXJzZUNvbnRleHQiPkdzdFBhcnNlQ29udGV4dDwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwiIHRpdGxlPSJHc3RQYXJzZSI+R3N0UGFyc2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR3N0UGFyc2VFcnJvciIgdGl0bGU9ImVudW0gR3N0UGFyc2VFcnJvciI+R3N0UGFyc2VFcnJvcjwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sIiB0aXRsZT0iR3N0UGFyc2UiPkdzdFBhcnNlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dzdFBhcnNlRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFBhcnNlRmxhZ3MiPkdzdFBhcnNlRmxhZ3M8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCIgdGl0bGU9IkdzdFBhcnNlIj5Hc3RQYXJzZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtYmluLWZyb20tZGVzY3JpcHRpb24iIHRpdGxlPSJnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb24gKCkiPmdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCIgdGl0bGU9IkdzdFBhcnNlIj5Hc3RQYXJzZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtYmluLWZyb20tZGVzY3JpcHRpb24tZnVsbCIgdGl0bGU9ImdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbl9mdWxsICgpIj5nc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb25fZnVsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCIgdGl0bGU9IkdzdFBhcnNlIj5Hc3RQYXJzZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtY29udGV4dC1mcmVlIiB0aXRsZT0iZ3N0X3BhcnNlX2NvbnRleHRfZnJlZSAoKSI+Z3N0X3BhcnNlX2NvbnRleHRfZnJlZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCIgdGl0bGU9IkdzdFBhcnNlIj5Hc3RQYXJzZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtY29udGV4dC1nZXQtbWlzc2luZy1lbGVtZW50cyIgdGl0bGU9ImdzdF9wYXJzZV9jb250ZXh0X2dldF9taXNzaW5nX2VsZW1lbnRzICgpIj5nc3RfcGFyc2VfY29udGV4dF9nZXRfbWlzc2luZ19lbGVtZW50czwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCIgdGl0bGU9IkdzdFBhcnNlIj5Hc3RQYXJzZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtY29udGV4dC1uZXciIHRpdGxlPSJnc3RfcGFyc2VfY29udGV4dF9uZXcgKCkiPmdzdF9wYXJzZV9jb250ZXh0X25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCIgdGl0bGU9IkdzdFBhcnNlIj5Hc3RQYXJzZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHU1QtUEFSU0UtRVJST1I6Q0FQUyIgdGl0bGU9IkdTVF9QQVJTRV9FUlJPUiI+R1NUX1BBUlNFX0VSUk9SPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sIiB0aXRsZT0iR3N0UGFyc2UiPkdzdFBhcnNlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1lcnJvci1xdWFyayIgdGl0bGU9ImdzdF9wYXJzZV9lcnJvcl9xdWFyayAoKSI+Z3N0X3BhcnNlX2Vycm9yX3F1YXJrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sIiB0aXRsZT0iR3N0UGFyc2UiPkdzdFBhcnNlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1sYXVuY2giIHRpdGxlPSJnc3RfcGFyc2VfbGF1bmNoICgpIj5nc3RfcGFyc2VfbGF1bmNoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sIiB0aXRsZT0iR3N0UGFyc2UiPkdzdFBhcnNlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1sYXVuY2h2IiB0aXRsZT0iZ3N0X3BhcnNlX2xhdW5jaHYgKCkiPmdzdF9wYXJzZV9sYXVuY2h2PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sIiB0aXRsZT0iR3N0UGFyc2UiPkdzdFBhcnNlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1sYXVuY2h2LWZ1bGwiIHRpdGxlPSJnc3RfcGFyc2VfbGF1bmNodl9mdWxsICgpIj5nc3RfcGFyc2VfbGF1bmNodl9mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sIiB0aXRsZT0iR3N0UGFyc2UiPkdzdFBhcnNlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1sYXVuY2gtZnVsbCIgdGl0bGU9ImdzdF9wYXJzZV9sYXVuY2hfZnVsbCAoKSI+Z3N0X3BhcnNlX2xhdW5jaF9mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sIiB0aXRsZT0iR3N0UGFyc2UiPkdzdFBhcnNlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjR3N0UGlwZWxpbmUtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFBpcGVsaW5lIj5Hc3RQaXBlbGluZTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj5Hc3RQaXBlbGluZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI0dzdFBpcGVsaW5lLS1hdXRvLWZsdXNoLWJ1cyIgdGl0bGU9J1RoZSAiYXV0by1mbHVzaC1idXMiIHByb3BlcnR5Jz5Hc3RQaXBlbGluZTphdXRvLWZsdXNoLWJ1czwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj5Hc3RQaXBlbGluZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI0dzdFBpcGVsaW5lLS1kZWxheSIgdGl0bGU9J1RoZSAiZGVsYXkiIHByb3BlcnR5Jz5Hc3RQaXBlbGluZTpkZWxheTwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj5Hc3RQaXBlbGluZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI0dzdFBpcGVsaW5lRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFBpcGVsaW5lRmxhZ3MiPkdzdFBpcGVsaW5lRmxhZ3M8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPkdzdFBpcGVsaW5lPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLWF1dG8tY2xvY2siIHRpdGxlPSJnc3RfcGlwZWxpbmVfYXV0b19jbG9jayAoKSI+Z3N0X3BpcGVsaW5lX2F1dG9fY2xvY2s8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj5Hc3RQaXBlbGluZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1nZXQtYXV0by1mbHVzaC1idXMiIHRpdGxlPSJnc3RfcGlwZWxpbmVfZ2V0X2F1dG9fZmx1c2hfYnVzICgpIj5nc3RfcGlwZWxpbmVfZ2V0X2F1dG9fZmx1c2hfYnVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+R3N0UGlwZWxpbmU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtZ2V0LWJ1cyIgdGl0bGU9ImdzdF9waXBlbGluZV9nZXRfYnVzICgpIj5nc3RfcGlwZWxpbmVfZ2V0X2J1czwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPkdzdFBpcGVsaW5lPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLWdldC1jbG9jayIgdGl0bGU9ImdzdF9waXBlbGluZV9nZXRfY2xvY2sgKCkiPmdzdF9waXBlbGluZV9nZXRfY2xvY2s8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj5Hc3RQaXBlbGluZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1nZXQtZGVsYXkiIHRpdGxlPSJnc3RfcGlwZWxpbmVfZ2V0X2RlbGF5ICgpIj5nc3RfcGlwZWxpbmVfZ2V0X2RlbGF5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+R3N0UGlwZWxpbmU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtbmV3IiB0aXRsZT0iZ3N0X3BpcGVsaW5lX25ldyAoKSI+Z3N0X3BpcGVsaW5lX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPkdzdFBpcGVsaW5lPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLXNldC1hdXRvLWZsdXNoLWJ1cyIgdGl0bGU9ImdzdF9waXBlbGluZV9zZXRfYXV0b19mbHVzaF9idXMgKCkiPmdzdF9waXBlbGluZV9zZXRfYXV0b19mbHVzaF9idXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj5Hc3RQaXBlbGluZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1zZXQtY2xvY2siIHRpdGxlPSJnc3RfcGlwZWxpbmVfc2V0X2Nsb2NrICgpIj5nc3RfcGlwZWxpbmVfc2V0X2Nsb2NrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+R3N0UGlwZWxpbmU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtc2V0LWRlbGF5IiB0aXRsZT0iZ3N0X3BpcGVsaW5lX3NldF9kZWxheSAoKSI+Z3N0X3BpcGVsaW5lX3NldF9kZWxheTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPkdzdFBpcGVsaW5lPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLXVzZS1jbG9jayIgdGl0bGU9ImdzdF9waXBlbGluZV91c2VfY2xvY2sgKCkiPmdzdF9waXBlbGluZV91c2VfY2xvY2s8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj5Hc3RQaXBlbGluZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW4tc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkRlcGVuZGVuY3lGbGFncyIgdGl0bGU9ImVudW0gR3N0UGx1Z2luRGVwZW5kZW5jeUZsYWdzIj5Hc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3M8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkRlc2MiIHRpdGxlPSJzdHJ1Y3QgR3N0UGx1Z2luRGVzYyI+R3N0UGx1Z2luRGVzYzwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPkdzdFBsdWdpbjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5FcnJvciIgdGl0bGU9ImVudW0gR3N0UGx1Z2luRXJyb3IiPkdzdFBsdWdpbkVycm9yPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPkdzdFBsdWdpbjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjR3N0UGx1Z2luRmVhdHVyZS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UGx1Z2luRmVhdHVyZSI+R3N0UGx1Z2luRmVhdHVyZTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+R3N0UGx1Z2luRmVhdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjR3N0UGx1Z2luRmVhdHVyZUZpbHRlciIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmVGaWx0ZXIgKCkiPkdzdFBsdWdpbkZlYXR1cmVGaWx0ZXI8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj5Hc3RQbHVnaW5GZWF0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkZpbHRlciIgdGl0bGU9IkdzdFBsdWdpbkZpbHRlciAoKSI+R3N0UGx1Z2luRmlsdGVyPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPkdzdFBsdWdpbjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5GbGFncyIgdGl0bGU9ImVudW0gR3N0UGx1Z2luRmxhZ3MiPkdzdFBsdWdpbkZsYWdzPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPkdzdFBsdWdpbjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5Jbml0RnVsbEZ1bmMiIHRpdGxlPSJHc3RQbHVnaW5Jbml0RnVsbEZ1bmMgKCkiPkdzdFBsdWdpbkluaXRGdWxsRnVuYzwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj5Hc3RQbHVnaW48L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjR3N0UGx1Z2luSW5pdEZ1bmMiIHRpdGxlPSJHc3RQbHVnaW5Jbml0RnVuYyAoKSI+R3N0UGx1Z2luSW5pdEZ1bmM8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tYWRkLWRlcGVuZGVuY3kiIHRpdGxlPSJnc3RfcGx1Z2luX2FkZF9kZXBlbmRlbmN5ICgpIj5nc3RfcGx1Z2luX2FkZF9kZXBlbmRlbmN5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj5Hc3RQbHVnaW48L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1hZGQtZGVwZW5kZW5jeS1zaW1wbGUiIHRpdGxlPSJnc3RfcGx1Z2luX2FkZF9kZXBlbmRlbmN5X3NpbXBsZSAoKSI+Z3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jeV9zaW1wbGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPkdzdFBsdWdpbjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHU1QtUExVR0lOLURFRklORTpDQVBTIiB0aXRsZT0iR1NUX1BMVUdJTl9ERUZJTkUoKSI+R1NUX1BMVUdJTl9ERUZJTkU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPkdzdFBsdWdpbjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHU1QtUExVR0lOLUVSUk9SOkNBUFMiIHRpdGxlPSJHU1RfUExVR0lOX0VSUk9SIj5HU1RfUExVR0lOX0VSUk9SPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj5Hc3RQbHVnaW48L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1lcnJvci1xdWFyayIgdGl0bGU9ImdzdF9wbHVnaW5fZXJyb3JfcXVhcmsgKCkiPmdzdF9wbHVnaW5fZXJyb3JfcXVhcms8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPkdzdFBsdWdpbjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLWNoZWNrLXZlcnNpb24iIHRpdGxlPSJnc3RfcGx1Z2luX2ZlYXR1cmVfY2hlY2tfdmVyc2lvbiAoKSI+Z3N0X3BsdWdpbl9mZWF0dXJlX2NoZWNrX3ZlcnNpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+R3N0UGx1Z2luRmVhdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLWdldC1uYW1lIiB0aXRsZT0iZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9uYW1lKCkiPmdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfbmFtZTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj5Hc3RQbHVnaW5GZWF0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtZ2V0LXJhbmsiIHRpdGxlPSJnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3JhbmsgKCkiPmdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfcmFuazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj5Hc3RQbHVnaW5GZWF0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtbGlzdC1jb3B5IiB0aXRsZT0iZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfY29weSAoKSI+Z3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfY29weTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj5Hc3RQbHVnaW5GZWF0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNHU1QtUExVR0lOLUZFQVRVUkUtTElTVC1ERUJVRzpDQVBTIiB0aXRsZT0iR1NUX1BMVUdJTl9GRUFUVVJFX0xJU1RfREVCVUcoKSI+R1NUX1BMVUdJTl9GRUFUVVJFX0xJU1RfREVCVUc8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+R3N0UGx1Z2luRmVhdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLWxpc3QtZnJlZSIgdGl0bGU9ImdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUgKCkiPmdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+R3N0UGx1Z2luRmVhdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLWxvYWQiIHRpdGxlPSJnc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZCAoKSI+Z3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+R3N0UGx1Z2luRmVhdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLXJhbmstY29tcGFyZS1mdW5jIiB0aXRsZT0iZ3N0X3BsdWdpbl9mZWF0dXJlX3JhbmtfY29tcGFyZV9mdW5jICgpIj5nc3RfcGx1Z2luX2ZlYXR1cmVfcmFua19jb21wYXJlX2Z1bmM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+R3N0UGx1Z2luRmVhdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLXNldC1uYW1lIiB0aXRsZT0iZ3N0X3BsdWdpbl9mZWF0dXJlX3NldF9uYW1lKCkiPmdzdF9wbHVnaW5fZmVhdHVyZV9zZXRfbmFtZTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj5Hc3RQbHVnaW5GZWF0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtc2V0LXJhbmsiIHRpdGxlPSJnc3RfcGx1Z2luX2ZlYXR1cmVfc2V0X3JhbmsgKCkiPmdzdF9wbHVnaW5fZmVhdHVyZV9zZXRfcmFuazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj5Hc3RQbHVnaW5GZWF0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtdHlwZS1uYW1lLWZpbHRlciIgdGl0bGU9ImdzdF9wbHVnaW5fZmVhdHVyZV90eXBlX25hbWVfZmlsdGVyICgpIj5nc3RfcGx1Z2luX2ZlYXR1cmVfdHlwZV9uYW1lX2ZpbHRlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj5Hc3RQbHVnaW5GZWF0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tZ2V0LWNhY2hlLWRhdGEiIHRpdGxlPSJnc3RfcGx1Z2luX2dldF9jYWNoZV9kYXRhICgpIj5nc3RfcGx1Z2luX2dldF9jYWNoZV9kYXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj5Hc3RQbHVnaW48L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1nZXQtZGVzY3JpcHRpb24iIHRpdGxlPSJnc3RfcGx1Z2luX2dldF9kZXNjcmlwdGlvbiAoKSI+Z3N0X3BsdWdpbl9nZXRfZGVzY3JpcHRpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPkdzdFBsdWdpbjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWdldC1maWxlbmFtZSIgdGl0bGU9ImdzdF9wbHVnaW5fZ2V0X2ZpbGVuYW1lICgpIj5nc3RfcGx1Z2luX2dldF9maWxlbmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tZ2V0LWxpY2Vuc2UiIHRpdGxlPSJnc3RfcGx1Z2luX2dldF9saWNlbnNlICgpIj5nc3RfcGx1Z2luX2dldF9saWNlbnNlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj5Hc3RQbHVnaW48L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1nZXQtbW9kdWxlIiB0aXRsZT0iZ3N0X3BsdWdpbl9nZXRfbW9kdWxlICgpIj5nc3RfcGx1Z2luX2dldF9tb2R1bGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPkdzdFBsdWdpbjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWdldC1uYW1lIiB0aXRsZT0iZ3N0X3BsdWdpbl9nZXRfbmFtZSAoKSI+Z3N0X3BsdWdpbl9nZXRfbmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tZ2V0LW9yaWdpbiIgdGl0bGU9ImdzdF9wbHVnaW5fZ2V0X29yaWdpbiAoKSI+Z3N0X3BsdWdpbl9nZXRfb3JpZ2luPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj5Hc3RQbHVnaW48L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1nZXQtcGFja2FnZSIgdGl0bGU9ImdzdF9wbHVnaW5fZ2V0X3BhY2thZ2UgKCkiPmdzdF9wbHVnaW5fZ2V0X3BhY2thZ2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPkdzdFBsdWdpbjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWdldC1zb3VyY2UiIHRpdGxlPSJnc3RfcGx1Z2luX2dldF9zb3VyY2UgKCkiPmdzdF9wbHVnaW5fZ2V0X3NvdXJjZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tZ2V0LXZlcnNpb24iIHRpdGxlPSJnc3RfcGx1Z2luX2dldF92ZXJzaW9uICgpIj5nc3RfcGx1Z2luX2dldF92ZXJzaW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj5Hc3RQbHVnaW48L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1pcy1sb2FkZWQiIHRpdGxlPSJnc3RfcGx1Z2luX2lzX2xvYWRlZCAoKSI+Z3N0X3BsdWdpbl9pc19sb2FkZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPkdzdFBsdWdpbjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWxpc3QtZnJlZSIgdGl0bGU9ImdzdF9wbHVnaW5fbGlzdF9mcmVlICgpIj5nc3RfcGx1Z2luX2xpc3RfZnJlZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tbG9hZCIgdGl0bGU9ImdzdF9wbHVnaW5fbG9hZCAoKSI+Z3N0X3BsdWdpbl9sb2FkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj5Hc3RQbHVnaW48L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1sb2FkLWJ5LW5hbWUiIHRpdGxlPSJnc3RfcGx1Z2luX2xvYWRfYnlfbmFtZSAoKSI+Z3N0X3BsdWdpbl9sb2FkX2J5X25hbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPkdzdFBsdWdpbjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWxvYWQtZmlsZSIgdGl0bGU9ImdzdF9wbHVnaW5fbG9hZF9maWxlICgpIj5nc3RfcGx1Z2luX2xvYWRfZmlsZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tbmFtZS1maWx0ZXIiIHRpdGxlPSJnc3RfcGx1Z2luX25hbWVfZmlsdGVyICgpIj5nc3RfcGx1Z2luX25hbWVfZmlsdGVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj5Hc3RQbHVnaW48L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1yZWdpc3Rlci1zdGF0aWMiIHRpdGxlPSJnc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpYyAoKSI+Z3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPkdzdFBsdWdpbjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLXJlZ2lzdGVyLXN0YXRpYy1mdWxsIiB0aXRsZT0iZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWNfZnVsbCAoKSI+Z3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWNfZnVsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tc2V0LWNhY2hlLWRhdGEiIHRpdGxlPSJnc3RfcGx1Z2luX3NldF9jYWNoZV9kYXRhICgpIj5nc3RfcGx1Z2luX3NldF9jYWNoZV9kYXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj5Hc3RQbHVnaW48L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+R3N0UG9sbDwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCIgdGl0bGU9IkdzdFBvbGwiPkdzdFBvbGw8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsRkQiIHRpdGxlPSJHc3RQb2xsRkQiPkdzdFBvbGxGRDwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCIgdGl0bGU9IkdzdFBvbGwiPkdzdFBvbGw8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1hZGQtZmQiIHRpdGxlPSJnc3RfcG9sbF9hZGRfZmQgKCkiPmdzdF9wb2xsX2FkZF9mZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sIiB0aXRsZT0iR3N0UG9sbCI+R3N0UG9sbDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWZkLWNhbi1yZWFkIiB0aXRsZT0iZ3N0X3BvbGxfZmRfY2FuX3JlYWQgKCkiPmdzdF9wb2xsX2ZkX2Nhbl9yZWFkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwiIHRpdGxlPSJHc3RQb2xsIj5Hc3RQb2xsPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtY2FuLXdyaXRlIiB0aXRsZT0iZ3N0X3BvbGxfZmRfY2FuX3dyaXRlICgpIj5nc3RfcG9sbF9mZF9jYW5fd3JpdGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCIgdGl0bGU9IkdzdFBvbGwiPkdzdFBvbGw8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1mZC1jdGwtcmVhZCIgdGl0bGU9ImdzdF9wb2xsX2ZkX2N0bF9yZWFkICgpIj5nc3RfcG9sbF9mZF9jdGxfcmVhZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sIiB0aXRsZT0iR3N0UG9sbCI+R3N0UG9sbDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWZkLWN0bC13cml0ZSIgdGl0bGU9ImdzdF9wb2xsX2ZkX2N0bF93cml0ZSAoKSI+Z3N0X3BvbGxfZmRfY3RsX3dyaXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwiIHRpdGxlPSJHc3RQb2xsIj5Hc3RQb2xsPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtaGFzLWNsb3NlZCIgdGl0bGU9ImdzdF9wb2xsX2ZkX2hhc19jbG9zZWQgKCkiPmdzdF9wb2xsX2ZkX2hhc19jbG9zZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCIgdGl0bGU9IkdzdFBvbGwiPkdzdFBvbGw8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1mZC1oYXMtZXJyb3IiIHRpdGxlPSJnc3RfcG9sbF9mZF9oYXNfZXJyb3IgKCkiPmdzdF9wb2xsX2ZkX2hhc19lcnJvcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sIiB0aXRsZT0iR3N0UG9sbCI+R3N0UG9sbDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWZkLWlnbm9yZWQiIHRpdGxlPSJnc3RfcG9sbF9mZF9pZ25vcmVkICgpIj5nc3RfcG9sbF9mZF9pZ25vcmVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwiIHRpdGxlPSJHc3RQb2xsIj5Hc3RQb2xsPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtaW5pdCIgdGl0bGU9ImdzdF9wb2xsX2ZkX2luaXQgKCkiPmdzdF9wb2xsX2ZkX2luaXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCIgdGl0bGU9IkdzdFBvbGwiPkdzdFBvbGw8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHU1QtUE9MTC1GRC1JTklUOkNBUFMiIHRpdGxlPSJHU1RfUE9MTF9GRF9JTklUIj5HU1RfUE9MTF9GRF9JTklUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwiIHRpdGxlPSJHc3RQb2xsIj5Hc3RQb2xsPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZnJlZSIgdGl0bGU9ImdzdF9wb2xsX2ZyZWUgKCkiPmdzdF9wb2xsX2ZyZWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCIgdGl0bGU9IkdzdFBvbGwiPkdzdFBvbGw8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1nZXQtcmVhZC1ncG9sbGZkIiB0aXRsZT0iZ3N0X3BvbGxfZ2V0X3JlYWRfZ3BvbGxmZCAoKSI+Z3N0X3BvbGxfZ2V0X3JlYWRfZ3BvbGxmZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sIiB0aXRsZT0iR3N0UG9sbCI+R3N0UG9sbDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLW5ldyIgdGl0bGU9ImdzdF9wb2xsX25ldyAoKSI+Z3N0X3BvbGxfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwiIHRpdGxlPSJHc3RQb2xsIj5Hc3RQb2xsPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtbmV3LXRpbWVyIiB0aXRsZT0iZ3N0X3BvbGxfbmV3X3RpbWVyICgpIj5nc3RfcG9sbF9uZXdfdGltZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCIgdGl0bGU9IkdzdFBvbGwiPkdzdFBvbGw8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1yZWFkLWNvbnRyb2wiIHRpdGxlPSJnc3RfcG9sbF9yZWFkX2NvbnRyb2wgKCkiPmdzdF9wb2xsX3JlYWRfY29udHJvbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sIiB0aXRsZT0iR3N0UG9sbCI+R3N0UG9sbDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXJlbW92ZS1mZCIgdGl0bGU9ImdzdF9wb2xsX3JlbW92ZV9mZCAoKSI+Z3N0X3BvbGxfcmVtb3ZlX2ZkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwiIHRpdGxlPSJHc3RQb2xsIj5Hc3RQb2xsPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtcmVzdGFydCIgdGl0bGU9ImdzdF9wb2xsX3Jlc3RhcnQgKCkiPmdzdF9wb2xsX3Jlc3RhcnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCIgdGl0bGU9IkdzdFBvbGwiPkdzdFBvbGw8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1zZXQtY29udHJvbGxhYmxlIiB0aXRsZT0iZ3N0X3BvbGxfc2V0X2NvbnRyb2xsYWJsZSAoKSI+Z3N0X3BvbGxfc2V0X2NvbnRyb2xsYWJsZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sIiB0aXRsZT0iR3N0UG9sbCI+R3N0UG9sbDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXNldC1mbHVzaGluZyIgdGl0bGU9ImdzdF9wb2xsX3NldF9mbHVzaGluZyAoKSI+Z3N0X3BvbGxfc2V0X2ZsdXNoaW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwiIHRpdGxlPSJHc3RQb2xsIj5Hc3RQb2xsPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtd2FpdCIgdGl0bGU9ImdzdF9wb2xsX3dhaXQgKCkiPmdzdF9wb2xsX3dhaXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCIgdGl0bGU9IkdzdFBvbGwiPkdzdFBvbGw8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC13cml0ZS1jb250cm9sIiB0aXRsZT0iZ3N0X3BvbGxfd3JpdGVfY29udHJvbCAoKSI+Z3N0X3BvbGxfd3JpdGVfY29udHJvbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sIiB0aXRsZT0iR3N0UG9sbCI+R3N0UG9sbDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCNHc3RQcmVzZXQtc3RydWN0IiB0aXRsZT0iR3N0UHJlc2V0Ij5Hc3RQcmVzZXQ8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sIiB0aXRsZT0iR3N0UHJlc2V0Ij5Hc3RQcmVzZXQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwjR3N0UHJlc2V0SW50ZXJmYWNlIiB0aXRsZT0ic3RydWN0IEdzdFByZXNldEludGVyZmFjZSI+R3N0UHJlc2V0SW50ZXJmYWNlPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+R3N0UHJlc2V0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sI2dzdC1wcmVzZXQtZGVsZXRlLXByZXNldCIgdGl0bGU9ImdzdF9wcmVzZXRfZGVsZXRlX3ByZXNldCAoKSI+Z3N0X3ByZXNldF9kZWxldGVfcHJlc2V0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sIiB0aXRsZT0iR3N0UHJlc2V0Ij5Hc3RQcmVzZXQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwjZ3N0LXByZXNldC1nZXQtbWV0YSIgdGl0bGU9ImdzdF9wcmVzZXRfZ2V0X21ldGEgKCkiPmdzdF9wcmVzZXRfZ2V0X21ldGE8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiIHRpdGxlPSJHc3RQcmVzZXQiPkdzdFByZXNldDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCNnc3QtcHJlc2V0LWdldC1wcmVzZXQtbmFtZXMiIHRpdGxlPSJnc3RfcHJlc2V0X2dldF9wcmVzZXRfbmFtZXMgKCkiPmdzdF9wcmVzZXRfZ2V0X3ByZXNldF9uYW1lczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+R3N0UHJlc2V0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sI2dzdC1wcmVzZXQtZ2V0LXByb3BlcnR5LW5hbWVzIiB0aXRsZT0iZ3N0X3ByZXNldF9nZXRfcHJvcGVydHlfbmFtZXMgKCkiPmdzdF9wcmVzZXRfZ2V0X3Byb3BlcnR5X25hbWVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sIiB0aXRsZT0iR3N0UHJlc2V0Ij5Hc3RQcmVzZXQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwjZ3N0LXByZXNldC1sb2FkLXByZXNldCIgdGl0bGU9ImdzdF9wcmVzZXRfbG9hZF9wcmVzZXQgKCkiPmdzdF9wcmVzZXRfbG9hZF9wcmVzZXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiIHRpdGxlPSJHc3RQcmVzZXQiPkdzdFByZXNldDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCNnc3QtcHJlc2V0LXJlbmFtZS1wcmVzZXQiIHRpdGxlPSJnc3RfcHJlc2V0X3JlbmFtZV9wcmVzZXQgKCkiPmdzdF9wcmVzZXRfcmVuYW1lX3ByZXNldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+R3N0UHJlc2V0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sI2dzdC1wcmVzZXQtc2F2ZS1wcmVzZXQiIHRpdGxlPSJnc3RfcHJlc2V0X3NhdmVfcHJlc2V0ICgpIj5nc3RfcHJlc2V0X3NhdmVfcHJlc2V0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sIiB0aXRsZT0iR3N0UHJlc2V0Ij5Hc3RQcmVzZXQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwjZ3N0LXByZXNldC1zZXQtbWV0YSIgdGl0bGU9ImdzdF9wcmVzZXRfc2V0X21ldGEgKCkiPmdzdF9wcmVzZXRfc2V0X21ldGE8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiIHRpdGxlPSJHc3RQcmVzZXQiPkdzdFByZXNldDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtcHJpbnQtZWxlbWVudC1hcmdzIiB0aXRsZT0iZ3N0X3ByaW50X2VsZW1lbnRfYXJncyAoKSI+Z3N0X3ByaW50X2VsZW1lbnRfYXJnczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtcHJpbnQtcGFkLWNhcHMiIHRpdGxlPSJnc3RfcHJpbnRfcGFkX2NhcHMgKCkiPmdzdF9wcmludF9wYWRfY2FwczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQcm9iZVJldHVybiIgdGl0bGU9ImVudW0gR3N0UHJvYmVSZXR1cm4iPkdzdFByb2JlUmV0dXJuPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQcm9iZVR5cGUiIHRpdGxlPSJlbnVtIEdzdFByb2JlVHlwZSI+R3N0UHJvYmVUeXBlPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUFJPQkUtVFlQRS1CTE9DS0lORzpDQVBTIiB0aXRsZT0iR1NUX1BST0JFX1RZUEVfQkxPQ0tJTkciPkdTVF9QUk9CRV9UWVBFX0JMT0NLSU5HPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBST0JFLVRZUEUtREFUQTpDQVBTIiB0aXRsZT0iR1NUX1BST0JFX1RZUEVfREFUQSI+R1NUX1BST0JFX1RZUEVfREFUQTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QUk9CRS1UWVBFLVNDSEVEVUxJTkc6Q0FQUyIgdGl0bGU9IkdTVF9QUk9CRV9UWVBFX1NDSEVEVUxJTkciPkdTVF9QUk9CRV9UWVBFX1NDSEVEVUxJTkc8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdFByb2dyZXNzVHlwZSIgdGl0bGU9ImVudW0gR3N0UHJvZ3Jlc3NUeXBlIj5Hc3RQcm9ncmVzc1R5cGU8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI0dzdFByb3h5UGFkLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RQcm94eVBhZCI+R3N0UHJveHlQYWQ8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RHaG9zdFBhZCI+R3N0R2hvc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtcHJveHktcGFkLWFjY2VwdGNhcHMtZGVmYXVsdCIgdGl0bGU9ImdzdF9wcm94eV9wYWRfYWNjZXB0Y2Fwc19kZWZhdWx0ICgpIj5nc3RfcHJveHlfcGFkX2FjY2VwdGNhcHNfZGVmYXVsdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sIiB0aXRsZT0iR3N0R2hvc3RQYWQiPkdzdEdob3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LXByb3h5LXBhZC1jaGFpbi1kZWZhdWx0IiB0aXRsZT0iZ3N0X3Byb3h5X3BhZF9jaGFpbl9kZWZhdWx0ICgpIj5nc3RfcHJveHlfcGFkX2NoYWluX2RlZmF1bHQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCIgdGl0bGU9IkdzdEdob3N0UGFkIj5Hc3RHaG9zdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1wcm94eS1wYWQtY2hhaW4tbGlzdC1kZWZhdWx0IiB0aXRsZT0iZ3N0X3Byb3h5X3BhZF9jaGFpbl9saXN0X2RlZmF1bHQgKCkiPmdzdF9wcm94eV9wYWRfY2hhaW5fbGlzdF9kZWZhdWx0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RHaG9zdFBhZCI+R3N0R2hvc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtcHJveHktcGFkLWV2ZW50LWRlZmF1bHQiIHRpdGxlPSJnc3RfcHJveHlfcGFkX2V2ZW50X2RlZmF1bHQgKCkiPmdzdF9wcm94eV9wYWRfZXZlbnRfZGVmYXVsdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sIiB0aXRsZT0iR3N0R2hvc3RQYWQiPkdzdEdob3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LXByb3h5LXBhZC1maXhhdGVjYXBzLWRlZmF1bHQiIHRpdGxlPSJnc3RfcHJveHlfcGFkX2ZpeGF0ZWNhcHNfZGVmYXVsdCAoKSI+Z3N0X3Byb3h5X3BhZF9maXhhdGVjYXBzX2RlZmF1bHQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCIgdGl0bGU9IkdzdEdob3N0UGFkIj5Hc3RHaG9zdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1wcm94eS1wYWQtZ2V0Y2Fwcy1kZWZhdWx0IiB0aXRsZT0iZ3N0X3Byb3h5X3BhZF9nZXRjYXBzX2RlZmF1bHQgKCkiPmdzdF9wcm94eV9wYWRfZ2V0Y2Fwc19kZWZhdWx0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RHaG9zdFBhZCI+R3N0R2hvc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtcHJveHktcGFkLWdldHJhbmdlLWRlZmF1bHQiIHRpdGxlPSJnc3RfcHJveHlfcGFkX2dldHJhbmdlX2RlZmF1bHQgKCkiPmdzdF9wcm94eV9wYWRfZ2V0cmFuZ2VfZGVmYXVsdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sIiB0aXRsZT0iR3N0R2hvc3RQYWQiPkdzdEdob3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LXByb3h5LXBhZC1nZXQtaW50ZXJuYWwiIHRpdGxlPSJnc3RfcHJveHlfcGFkX2dldF9pbnRlcm5hbCAoKSI+Z3N0X3Byb3h5X3BhZF9nZXRfaW50ZXJuYWw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCIgdGl0bGU9IkdzdEdob3N0UGFkIj5Hc3RHaG9zdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1wcm94eS1wYWQtaXRlcmF0ZS1pbnRlcm5hbC1saW5rcy1kZWZhdWx0IiB0aXRsZT0iZ3N0X3Byb3h5X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2RlZmF1bHQgKCkiPmdzdF9wcm94eV9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19kZWZhdWx0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RHaG9zdFBhZCI+R3N0R2hvc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtcHJveHktcGFkLXF1ZXJ5LWRlZmF1bHQiIHRpdGxlPSJnc3RfcHJveHlfcGFkX3F1ZXJ5X2RlZmF1bHQgKCkiPmdzdF9wcm94eV9wYWRfcXVlcnlfZGVmYXVsdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sIiB0aXRsZT0iR3N0R2hvc3RQYWQiPkdzdEdob3N0UGFkPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LXByb3h5LXBhZC1xdWVyeS10eXBlLWRlZmF1bHQiIHRpdGxlPSJnc3RfcHJveHlfcGFkX3F1ZXJ5X3R5cGVfZGVmYXVsdCAoKSI+Z3N0X3Byb3h5X3BhZF9xdWVyeV90eXBlX2RlZmF1bHQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCIgdGl0bGU9IkdzdEdob3N0UGFkIj5Hc3RHaG9zdFBhZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1wcm94eS1wYWQtdW5saW5rLWRlZmF1bHQiIHRpdGxlPSJnc3RfcHJveHlfcGFkX3VubGlua19kZWZhdWx0ICgpIj5nc3RfcHJveHlfcGFkX3VubGlua19kZWZhdWx0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RHaG9zdFBhZCI+R3N0R2hvc3RQYWQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8YSBuYW1lPSJpZHhRIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+UTwvaDM+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0UU9TVHlwZSIgdGl0bGU9ImVudW0gR3N0UU9TVHlwZSI+R3N0UU9TVHlwZTwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnlUeXBlIiB0aXRsZT0iZW51bSBHc3RRdWVyeVR5cGUiPkdzdFF1ZXJ5VHlwZTwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5VHlwZURlZmluaXRpb24iIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnlUeXBlRGVmaW5pdGlvbiI+R3N0UXVlcnlUeXBlRGVmaW5pdGlvbjwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWFkZC1hbGxvY2F0aW9uLW1lbW9yeSIgdGl0bGU9ImdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9tZW1vcnkgKCkiPmdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9tZW1vcnk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWFkZC1hbGxvY2F0aW9uLW1ldGEiIHRpdGxlPSJnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fbWV0YSAoKSI+Z3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21ldGE8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWFkZC1idWZmZXJpbmctcmFuZ2UiIHRpdGxlPSJnc3RfcXVlcnlfYWRkX2J1ZmZlcmluZ19yYW5nZSAoKSI+Z3N0X3F1ZXJ5X2FkZF9idWZmZXJpbmdfcmFuZ2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWNvcHkiIHRpdGxlPSJnc3RfcXVlcnlfY29weSAoKSI+Z3N0X3F1ZXJ5X2NvcHk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWdldC1uLWFsbG9jYXRpb24tbWVtb3JpZXMiIHRpdGxlPSJnc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9tZW1vcmllcyAoKSI+Z3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fbWVtb3JpZXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWdldC1uLWFsbG9jYXRpb24tbWV0YXMiIHRpdGxlPSJnc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9tZXRhcyAoKSI+Z3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fbWV0YXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWdldC1uLWJ1ZmZlcmluZy1yYW5nZXMiIHRpdGxlPSJnc3RfcXVlcnlfZ2V0X25fYnVmZmVyaW5nX3JhbmdlcyAoKSI+Z3N0X3F1ZXJ5X2dldF9uX2J1ZmZlcmluZ19yYW5nZXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWdldC1zdHJ1Y3R1cmUiIHRpdGxlPSJnc3RfcXVlcnlfZ2V0X3N0cnVjdHVyZSAoKSI+Z3N0X3F1ZXJ5X2dldF9zdHJ1Y3R1cmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWhhcy1hbGxvY2F0aW9uLW1ldGEiIHRpdGxlPSJnc3RfcXVlcnlfaGFzX2FsbG9jYXRpb25fbWV0YSAoKSI+Z3N0X3F1ZXJ5X2hhc19hbGxvY2F0aW9uX21ldGE8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWlzLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X3F1ZXJ5X2lzX3dyaXRhYmxlKCkiPmdzdF9xdWVyeV9pc193cml0YWJsZTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbWFrZS13cml0YWJsZSIgdGl0bGU9ImdzdF9xdWVyeV9tYWtlX3dyaXRhYmxlKCkiPmdzdF9xdWVyeV9tYWtlX3dyaXRhYmxlPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctYWxsb2NhdGlvbiIgdGl0bGU9ImdzdF9xdWVyeV9uZXdfYWxsb2NhdGlvbiAoKSI+Z3N0X3F1ZXJ5X25ld19hbGxvY2F0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctYnVmZmVyaW5nIiB0aXRsZT0iZ3N0X3F1ZXJ5X25ld19idWZmZXJpbmcgKCkiPmdzdF9xdWVyeV9uZXdfYnVmZmVyaW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctY29udmVydCIgdGl0bGU9ImdzdF9xdWVyeV9uZXdfY29udmVydCAoKSI+Z3N0X3F1ZXJ5X25ld19jb252ZXJ0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctY3VzdG9tIiB0aXRsZT0iZ3N0X3F1ZXJ5X25ld19jdXN0b20gKCkiPmdzdF9xdWVyeV9uZXdfY3VzdG9tPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctZHVyYXRpb24iIHRpdGxlPSJnc3RfcXVlcnlfbmV3X2R1cmF0aW9uICgpIj5nc3RfcXVlcnlfbmV3X2R1cmF0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctZm9ybWF0cyIgdGl0bGU9ImdzdF9xdWVyeV9uZXdfZm9ybWF0cyAoKSI+Z3N0X3F1ZXJ5X25ld19mb3JtYXRzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctbGF0ZW5jeSIgdGl0bGU9ImdzdF9xdWVyeV9uZXdfbGF0ZW5jeSAoKSI+Z3N0X3F1ZXJ5X25ld19sYXRlbmN5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctcG9zaXRpb24iIHRpdGxlPSJnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uICgpIj5nc3RfcXVlcnlfbmV3X3Bvc2l0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctc2NoZWR1bGluZyIgdGl0bGU9ImdzdF9xdWVyeV9uZXdfc2NoZWR1bGluZyAoKSI+Z3N0X3F1ZXJ5X25ld19zY2hlZHVsaW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctc2Vla2luZyIgdGl0bGU9ImdzdF9xdWVyeV9uZXdfc2Vla2luZyAoKSI+Z3N0X3F1ZXJ5X25ld19zZWVraW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctc2VnbWVudCIgdGl0bGU9ImdzdF9xdWVyeV9uZXdfc2VnbWVudCAoKSI+Z3N0X3F1ZXJ5X25ld19zZWdtZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctdXJpIiB0aXRsZT0iZ3N0X3F1ZXJ5X25ld191cmkgKCkiPmdzdF9xdWVyeV9uZXdfdXJpPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1hbGxvY2F0aW9uIiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX2FsbG9jYXRpb24gKCkiPmdzdF9xdWVyeV9wYXJzZV9hbGxvY2F0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1hbGxvY2F0aW9uLXBhcmFtcyIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9hbGxvY2F0aW9uX3BhcmFtcyAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX2FsbG9jYXRpb25fcGFyYW1zPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1idWZmZXJpbmctcGVyY2VudCIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcGVyY2VudCAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19wZXJjZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1idWZmZXJpbmctcmFuZ2UiIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3JhbmdlICgpIj5nc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3JhbmdlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1idWZmZXJpbmctc3RhdHMiIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3N0YXRzICgpIj5nc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3N0YXRzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1jb252ZXJ0IiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX2NvbnZlcnQgKCkiPmdzdF9xdWVyeV9wYXJzZV9jb252ZXJ0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1kdXJhdGlvbiIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbiAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1sYXRlbmN5IiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX2xhdGVuY3kgKCkiPmdzdF9xdWVyeV9wYXJzZV9sYXRlbmN5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1udGgtYWxsb2NhdGlvbi1tZW1vcnkiIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fbWVtb3J5ICgpIj5nc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fbWVtb3J5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1udGgtYWxsb2NhdGlvbi1tZXRhIiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX21ldGEgKCkiPmdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9tZXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1udGgtYnVmZmVyaW5nLXJhbmdlIiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX250aF9idWZmZXJpbmdfcmFuZ2UgKCkiPmdzdF9xdWVyeV9wYXJzZV9udGhfYnVmZmVyaW5nX3JhbmdlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1udGgtZm9ybWF0IiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX250aF9mb3JtYXQgKCkiPmdzdF9xdWVyeV9wYXJzZV9udGhfZm9ybWF0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1uLWZvcm1hdHMiIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2Vfbl9mb3JtYXRzICgpIj5nc3RfcXVlcnlfcGFyc2Vfbl9mb3JtYXRzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1wb3NpdGlvbiIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbiAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1zY2hlZHVsaW5nIiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX3NjaGVkdWxpbmcgKCkiPmdzdF9xdWVyeV9wYXJzZV9zY2hlZHVsaW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1zZWVraW5nIiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmcgKCkiPmdzdF9xdWVyeV9wYXJzZV9zZWVraW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1zZWdtZW50IiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX3NlZ21lbnQgKCkiPmdzdF9xdWVyeV9wYXJzZV9zZWdtZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS11cmkiIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfdXJpICgpIj5nc3RfcXVlcnlfcGFyc2VfdXJpPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1yZWYiIHRpdGxlPSJnc3RfcXVlcnlfcmVmICgpIj5nc3RfcXVlcnlfcmVmPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1yZXBsYWNlIiB0aXRsZT0iZ3N0X3F1ZXJ5X3JlcGxhY2UoKSI+Z3N0X3F1ZXJ5X3JlcGxhY2U8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1hbGxvY2F0aW9uLXBhcmFtcyIgdGl0bGU9ImdzdF9xdWVyeV9zZXRfYWxsb2NhdGlvbl9wYXJhbXMgKCkiPmdzdF9xdWVyeV9zZXRfYWxsb2NhdGlvbl9wYXJhbXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1idWZmZXJpbmctcGVyY2VudCIgdGl0bGU9ImdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3BlcmNlbnQgKCkiPmdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3BlcmNlbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1idWZmZXJpbmctcmFuZ2UiIHRpdGxlPSJnc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19yYW5nZSAoKSI+Z3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfcmFuZ2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1idWZmZXJpbmctc3RhdHMiIHRpdGxlPSJnc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19zdGF0cyAoKSI+Z3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfc3RhdHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1jb252ZXJ0IiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF9jb252ZXJ0ICgpIj5nc3RfcXVlcnlfc2V0X2NvbnZlcnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1kdXJhdGlvbiIgdGl0bGU9ImdzdF9xdWVyeV9zZXRfZHVyYXRpb24gKCkiPmdzdF9xdWVyeV9zZXRfZHVyYXRpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1mb3JtYXRzIiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF9mb3JtYXRzICgpIj5nc3RfcXVlcnlfc2V0X2Zvcm1hdHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1mb3JtYXRzdiIgdGl0bGU9ImdzdF9xdWVyeV9zZXRfZm9ybWF0c3YgKCkiPmdzdF9xdWVyeV9zZXRfZm9ybWF0c3Y8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1sYXRlbmN5IiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF9sYXRlbmN5ICgpIj5nc3RfcXVlcnlfc2V0X2xhdGVuY3k8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1wb3NpdGlvbiIgdGl0bGU9ImdzdF9xdWVyeV9zZXRfcG9zaXRpb24gKCkiPmdzdF9xdWVyeV9zZXRfcG9zaXRpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1zY2hlZHVsaW5nIiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF9zY2hlZHVsaW5nICgpIj5nc3RfcXVlcnlfc2V0X3NjaGVkdWxpbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1zZWVraW5nIiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF9zZWVraW5nICgpIj5nc3RfcXVlcnlfc2V0X3NlZWtpbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1zZWdtZW50IiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF9zZWdtZW50ICgpIj5nc3RfcXVlcnlfc2V0X3NlZ21lbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC11cmkiIHRpdGxlPSJnc3RfcXVlcnlfc2V0X3VyaSAoKSI+Z3N0X3F1ZXJ5X3NldF91cmk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXR5cGVzLWNvbnRhaW5zIiB0aXRsZT0iZ3N0X3F1ZXJ5X3R5cGVzX2NvbnRhaW5zICgpIj5nc3RfcXVlcnlfdHlwZXNfY29udGFpbnM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXR5cGUtZ2V0LWJ5LW5pY2siIHRpdGxlPSJnc3RfcXVlcnlfdHlwZV9nZXRfYnlfbmljayAoKSI+Z3N0X3F1ZXJ5X3R5cGVfZ2V0X2J5X25pY2s8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXR5cGUtZ2V0LWRldGFpbHMiIHRpdGxlPSJnc3RfcXVlcnlfdHlwZV9nZXRfZGV0YWlscyAoKSI+Z3N0X3F1ZXJ5X3R5cGVfZ2V0X2RldGFpbHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXR5cGUtZ2V0LW5hbWUiIHRpdGxlPSJnc3RfcXVlcnlfdHlwZV9nZXRfbmFtZSAoKSI+Z3N0X3F1ZXJ5X3R5cGVfZ2V0X25hbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXR5cGUtaXRlcmF0ZS1kZWZpbml0aW9ucyIgdGl0bGU9ImdzdF9xdWVyeV90eXBlX2l0ZXJhdGVfZGVmaW5pdGlvbnMgKCkiPmdzdF9xdWVyeV90eXBlX2l0ZXJhdGVfZGVmaW5pdGlvbnM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR1NULVFVRVJZLVRZUEUtTkFNRTpDQVBTIiB0aXRsZT0iR1NUX1FVRVJZX1RZUEVfTkFNRSgpIj5HU1RfUVVFUllfVFlQRV9OQU1FPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS10eXBlLXJlZ2lzdGVyIiB0aXRsZT0iZ3N0X3F1ZXJ5X3R5cGVfcmVnaXN0ZXIgKCkiPmdzdF9xdWVyeV90eXBlX3JlZ2lzdGVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS10eXBlLXRvLXF1YXJrIiB0aXRsZT0iZ3N0X3F1ZXJ5X3R5cGVfdG9fcXVhcmsgKCkiPmdzdF9xdWVyeV90eXBlX3RvX3F1YXJrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS11bnJlZiIgdGl0bGU9ImdzdF9xdWVyeV91bnJlZiAoKSI+Z3N0X3F1ZXJ5X3VucmVmPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS13cml0YWJsZS1zdHJ1Y3R1cmUiIHRpdGxlPSJnc3RfcXVlcnlfd3JpdGFibGVfc3RydWN0dXJlICgpIj5nc3RfcXVlcnlfd3JpdGFibGVfc3RydWN0dXJlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGEgbmFtZT0iaWR4UiI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPlI8L2gzPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNHc3RSYW5rIiB0aXRsZT0iZW51bSBHc3RSYW5rIj5Hc3RSYW5rPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+R3N0UGx1Z2luRmVhdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1ET1VCTEUtQkU6Q0FQUyIgdGl0bGU9IkdTVF9SRUFEX0RPVUJMRV9CRSAoKSI+R1NUX1JFQURfRE9VQkxFX0JFPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELURPVUJMRS1MRTpDQVBTIiB0aXRsZT0iR1NUX1JFQURfRE9VQkxFX0xFICgpIj5HU1RfUkVBRF9ET1VCTEVfTEU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJFQUQtRkxPQVQtQkU6Q0FQUyIgdGl0bGU9IkdTVF9SRUFEX0ZMT0FUX0JFICgpIj5HU1RfUkVBRF9GTE9BVF9CRTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1GTE9BVC1MRTpDQVBTIiB0aXRsZT0iR1NUX1JFQURfRkxPQVRfTEUgKCkiPkdTVF9SRUFEX0ZMT0FUX0xFPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELVVJTlQxNi1CRTpDQVBTIiB0aXRsZT0iR1NUX1JFQURfVUlOVDE2X0JFKCkiPkdTVF9SRUFEX1VJTlQxNl9CRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1VSU5UMTYtTEU6Q0FQUyIgdGl0bGU9IkdTVF9SRUFEX1VJTlQxNl9MRSgpIj5HU1RfUkVBRF9VSU5UMTZfTEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJFQUQtVUlOVDI0LUJFOkNBUFMiIHRpdGxlPSJHU1RfUkVBRF9VSU5UMjRfQkUoKSI+R1NUX1JFQURfVUlOVDI0X0JFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELVVJTlQyNC1MRTpDQVBTIiB0aXRsZT0iR1NUX1JFQURfVUlOVDI0X0xFKCkiPkdTVF9SRUFEX1VJTlQyNF9MRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1VSU5UMzItQkU6Q0FQUyIgdGl0bGU9IkdTVF9SRUFEX1VJTlQzMl9CRSgpIj5HU1RfUkVBRF9VSU5UMzJfQkU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJFQUQtVUlOVDMyLUxFOkNBUFMiIHRpdGxlPSJHU1RfUkVBRF9VSU5UMzJfTEUoKSI+R1NUX1JFQURfVUlOVDMyX0xFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELVVJTlQ2NC1CRTpDQVBTIiB0aXRsZT0iR1NUX1JFQURfVUlOVDY0X0JFKCkiPkdTVF9SRUFEX1VJTlQ2NF9CRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1VSU5UNjQtTEU6Q0FQUyIgdGl0bGU9IkdTVF9SRUFEX1VJTlQ2NF9MRSgpIj5HU1RfUkVBRF9VSU5UNjRfTEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJFQUQtVUlOVDg6Q0FQUyIgdGl0bGU9IkdTVF9SRUFEX1VJTlQ4KCkiPkdTVF9SRUFEX1VJTlQ4PC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjR3N0UmVnaXN0cnktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJlZ2lzdHJ5Ij5Hc3RSZWdpc3RyeTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij5Hc3RSZWdpc3RyeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI0dzdFJlZ2lzdHJ5LWZlYXR1cmUtYWRkZWQiIHRpdGxlPSdUaGUgImZlYXR1cmUtYWRkZWQiIHNpZ25hbCc+R3N0UmVnaXN0cnk6OmZlYXR1cmUtYWRkZWQ8L2E+LCBvYmplY3Qgc2lnbmFsIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPkdzdFJlZ2lzdHJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjR3N0UmVnaXN0cnktcGx1Z2luLWFkZGVkIiB0aXRsZT0nVGhlICJwbHVnaW4tYWRkZWQiIHNpZ25hbCc+R3N0UmVnaXN0cnk6OnBsdWdpbi1hZGRlZDwvYT4sIG9iamVjdCBzaWduYWwgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+R3N0UmVnaXN0cnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktYWRkLWZlYXR1cmUiIHRpdGxlPSJnc3RfcmVnaXN0cnlfYWRkX2ZlYXR1cmUgKCkiPmdzdF9yZWdpc3RyeV9hZGRfZmVhdHVyZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPkdzdFJlZ2lzdHJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWFkZC1wYXRoIiB0aXRsZT0iZ3N0X3JlZ2lzdHJ5X2FkZF9wYXRoICgpIj5nc3RfcmVnaXN0cnlfYWRkX3BhdGg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij5Hc3RSZWdpc3RyeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1hZGQtcGx1Z2luIiB0aXRsZT0iZ3N0X3JlZ2lzdHJ5X2FkZF9wbHVnaW4gKCkiPmdzdF9yZWdpc3RyeV9hZGRfcGx1Z2luPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+R3N0UmVnaXN0cnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktZmVhdHVyZS1maWx0ZXIiIHRpdGxlPSJnc3RfcmVnaXN0cnlfZmVhdHVyZV9maWx0ZXIgKCkiPmdzdF9yZWdpc3RyeV9mZWF0dXJlX2ZpbHRlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPkdzdFJlZ2lzdHJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWZpbmQtZmVhdHVyZSIgdGl0bGU9ImdzdF9yZWdpc3RyeV9maW5kX2ZlYXR1cmUgKCkiPmdzdF9yZWdpc3RyeV9maW5kX2ZlYXR1cmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij5Hc3RSZWdpc3RyeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1maW5kLXBsdWdpbiIgdGl0bGU9ImdzdF9yZWdpc3RyeV9maW5kX3BsdWdpbiAoKSI+Z3N0X3JlZ2lzdHJ5X2ZpbmRfcGx1Z2luPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+R3N0UmVnaXN0cnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1yZWdpc3RyeS1mb3JrLWlzLWVuYWJsZWQiIHRpdGxlPSJnc3RfcmVnaXN0cnlfZm9ya19pc19lbmFibGVkICgpIj5nc3RfcmVnaXN0cnlfZm9ya19pc19lbmFibGVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCIgdGl0bGU9IkdzdCI+R3N0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtcmVnaXN0cnktZm9yay1zZXQtZW5hYmxlZCIgdGl0bGU9ImdzdF9yZWdpc3RyeV9mb3JrX3NldF9lbmFibGVkICgpIj5nc3RfcmVnaXN0cnlfZm9ya19zZXRfZW5hYmxlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwiIHRpdGxlPSJHc3QiPkdzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1nZXQtZGVmYXVsdCIgdGl0bGU9ImdzdF9yZWdpc3RyeV9nZXRfZGVmYXVsdCAoKSI+Z3N0X3JlZ2lzdHJ5X2dldF9kZWZhdWx0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+R3N0UmVnaXN0cnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktZ2V0LWZlYXR1cmUtbGlzdCIgdGl0bGU9ImdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0ICgpIj5nc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPkdzdFJlZ2lzdHJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWdldC1mZWF0dXJlLWxpc3QtYnktcGx1Z2luIiB0aXRsZT0iZ3N0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3RfYnlfcGx1Z2luICgpIj5nc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9ieV9wbHVnaW48L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij5Hc3RSZWdpc3RyeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1nZXQtZmVhdHVyZS1saXN0LWNvb2tpZSIgdGl0bGU9ImdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2Nvb2tpZSAoKSI+Z3N0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3RfY29va2llPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+R3N0UmVnaXN0cnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktZ2V0LXBhdGgtbGlzdCIgdGl0bGU9ImdzdF9yZWdpc3RyeV9nZXRfcGF0aF9saXN0ICgpIj5nc3RfcmVnaXN0cnlfZ2V0X3BhdGhfbGlzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPkdzdFJlZ2lzdHJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWdldC1wbHVnaW4tbGlzdCIgdGl0bGU9ImdzdF9yZWdpc3RyeV9nZXRfcGx1Z2luX2xpc3QgKCkiPmdzdF9yZWdpc3RyeV9nZXRfcGx1Z2luX2xpc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij5Hc3RSZWdpc3RyeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1sb29rdXAiIHRpdGxlPSJnc3RfcmVnaXN0cnlfbG9va3VwICgpIj5nc3RfcmVnaXN0cnlfbG9va3VwPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+R3N0UmVnaXN0cnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktbG9va3VwLWZlYXR1cmUiIHRpdGxlPSJnc3RfcmVnaXN0cnlfbG9va3VwX2ZlYXR1cmUgKCkiPmdzdF9yZWdpc3RyeV9sb29rdXBfZmVhdHVyZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPkdzdFJlZ2lzdHJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LXBsdWdpbi1maWx0ZXIiIHRpdGxlPSJnc3RfcmVnaXN0cnlfcGx1Z2luX2ZpbHRlciAoKSI+Z3N0X3JlZ2lzdHJ5X3BsdWdpbl9maWx0ZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij5Hc3RSZWdpc3RyeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1yZW1vdmUtZmVhdHVyZSIgdGl0bGU9ImdzdF9yZWdpc3RyeV9yZW1vdmVfZmVhdHVyZSAoKSI+Z3N0X3JlZ2lzdHJ5X3JlbW92ZV9mZWF0dXJlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+R3N0UmVnaXN0cnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktcmVtb3ZlLXBsdWdpbiIgdGl0bGU9ImdzdF9yZWdpc3RyeV9yZW1vdmVfcGx1Z2luICgpIj5nc3RfcmVnaXN0cnlfcmVtb3ZlX3BsdWdpbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPkdzdFJlZ2lzdHJ5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LXNjYW4tcGF0aCIgdGl0bGU9ImdzdF9yZWdpc3RyeV9zY2FuX3BhdGggKCkiPmdzdF9yZWdpc3RyeV9zY2FuX3BhdGg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij5Hc3RSZWdpc3RyeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR3N0UmVzb3VyY2VFcnJvciIgdGl0bGU9ImVudW0gR3N0UmVzb3VyY2VFcnJvciI+R3N0UmVzb3VyY2VFcnJvcjwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCIgdGl0bGU9IkdzdEdFcnJvciI+R3N0R0Vycm9yPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtUkVTT1VSQ0UtRVJST1I6Q0FQUyIgdGl0bGU9IkdTVF9SRVNPVVJDRV9FUlJPUiI+R1NUX1JFU09VUkNFX0VSUk9SPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCIgdGl0bGU9IkdzdEdFcnJvciI+R3N0R0Vycm9yPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1ET1dOLTE2OkNBUFMiIHRpdGxlPSJHU1RfUk9VTkRfRE9XTl8xNigpIj5HU1RfUk9VTkRfRE9XTl8xNjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtRE9XTi0yOkNBUFMiIHRpdGxlPSJHU1RfUk9VTkRfRE9XTl8yKCkiPkdTVF9ST1VORF9ET1dOXzI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELURPV04tMzI6Q0FQUyIgdGl0bGU9IkdTVF9ST1VORF9ET1dOXzMyKCkiPkdTVF9ST1VORF9ET1dOXzMyPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1ET1dOLTQ6Q0FQUyIgdGl0bGU9IkdTVF9ST1VORF9ET1dOXzQoKSI+R1NUX1JPVU5EX0RPV05fNDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtRE9XTi02NDpDQVBTIiB0aXRsZT0iR1NUX1JPVU5EX0RPV05fNjQoKSI+R1NUX1JPVU5EX0RPV05fNjQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELURPV04tODpDQVBTIiB0aXRsZT0iR1NUX1JPVU5EX0RPV05fOCgpIj5HU1RfUk9VTkRfRE9XTl84PC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1VUC0xNjpDQVBTIiB0aXRsZT0iR1NUX1JPVU5EX1VQXzE2KCkiPkdTVF9ST1VORF9VUF8xNjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtVVAtMjpDQVBTIiB0aXRsZT0iR1NUX1JPVU5EX1VQXzIoKSI+R1NUX1JPVU5EX1VQXzI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELVVQLTMyOkNBUFMiIHRpdGxlPSJHU1RfUk9VTkRfVVBfMzIoKSI+R1NUX1JPVU5EX1VQXzMyPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1VUC00OkNBUFMiIHRpdGxlPSJHU1RfUk9VTkRfVVBfNCgpIj5HU1RfUk9VTkRfVVBfNDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtVVAtNjQ6Q0FQUyIgdGl0bGU9IkdTVF9ST1VORF9VUF82NCgpIj5HU1RfUk9VTkRfVVBfNjQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELVVQLTg6Q0FQUyIgdGl0bGU9IkdTVF9ST1VORF9VUF84KCkiPkdTVF9ST1VORF9VUF84PC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGEgbmFtZT0iaWR4UyI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPlM8L2gzPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dzdFNlYXJjaE1vZGUiIHRpdGxlPSJlbnVtIEdzdFNlYXJjaE1vZGUiPkdzdFNlYXJjaE1vZGU8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1TRUNPTkQ6Q0FQUyIgdGl0bGU9IkdTVF9TRUNPTkQiPkdTVF9TRUNPTkQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RTZWVrRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFNlZWtGbGFncyI+R3N0U2Vla0ZsYWdzPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0U2Vla1R5cGUiIHRpdGxlPSJlbnVtIEdzdFNlZWtUeXBlIj5Hc3RTZWVrVHlwZTwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudCIgdGl0bGU9InN0cnVjdCBHc3RTZWdtZW50Ij5Hc3RTZWdtZW50PC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+R3N0U2VnbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnRGbGFncyIgdGl0bGU9ImVudW0gR3N0U2VnbWVudEZsYWdzIj5Hc3RTZWdtZW50RmxhZ3M8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+R3N0U2VnbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LWNsaXAiIHRpdGxlPSJnc3Rfc2VnbWVudF9jbGlwICgpIj5nc3Rfc2VnbWVudF9jbGlwPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij5Hc3RTZWdtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtY29weSIgdGl0bGU9ImdzdF9zZWdtZW50X2NvcHkgKCkiPmdzdF9zZWdtZW50X2NvcHk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCIgdGl0bGU9IkdzdFNlZ21lbnQiPkdzdFNlZ21lbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1jb3B5LWludG8iIHRpdGxlPSJnc3Rfc2VnbWVudF9jb3B5X2ludG8gKCkiPmdzdF9zZWdtZW50X2NvcHlfaW50bzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+R3N0U2VnbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LWRvLXNlZWsiIHRpdGxlPSJnc3Rfc2VnbWVudF9kb19zZWVrICgpIj5nc3Rfc2VnbWVudF9kb19zZWVrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij5Hc3RTZWdtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtZnJlZSIgdGl0bGU9ImdzdF9zZWdtZW50X2ZyZWUgKCkiPmdzdF9zZWdtZW50X2ZyZWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCIgdGl0bGU9IkdzdFNlZ21lbnQiPkdzdFNlZ21lbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1pbml0IiB0aXRsZT0iZ3N0X3NlZ21lbnRfaW5pdCAoKSI+Z3N0X3NlZ21lbnRfaW5pdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+R3N0U2VnbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LW5ldyIgdGl0bGU9ImdzdF9zZWdtZW50X25ldyAoKSI+Z3N0X3NlZ21lbnRfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij5Hc3RTZWdtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtc2V0LXJ1bm5pbmctdGltZSIgdGl0bGU9ImdzdF9zZWdtZW50X3NldF9ydW5uaW5nX3RpbWUgKCkiPmdzdF9zZWdtZW50X3NldF9ydW5uaW5nX3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCIgdGl0bGU9IkdzdFNlZ21lbnQiPkdzdFNlZ21lbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC10by1wb3NpdGlvbiIgdGl0bGU9ImdzdF9zZWdtZW50X3RvX3Bvc2l0aW9uICgpIj5nc3Rfc2VnbWVudF90b19wb3NpdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+R3N0U2VnbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LXRvLXJ1bm5pbmctdGltZSIgdGl0bGU9ImdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoKSI+Z3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij5Hc3RTZWdtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtdG8tc3RyZWFtLXRpbWUiIHRpdGxlPSJnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoKSI+Z3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCIgdGl0bGU9IkdzdFNlZ21lbnQiPkdzdFNlZ21lbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1zZWd0cmFwLWlzLWVuYWJsZWQiIHRpdGxlPSJnc3Rfc2VndHJhcF9pc19lbmFibGVkICgpIj5nc3Rfc2VndHJhcF9pc19lbmFibGVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCIgdGl0bGU9IkdzdCI+R3N0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3Qtc2VndHJhcC1zZXQtZW5hYmxlZCIgdGl0bGU9ImdzdF9zZWd0cmFwX3NldF9lbmFibGVkICgpIj5nc3Rfc2VndHJhcF9zZXRfZW5hYmxlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwiIHRpdGxlPSJHc3QiPkdzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFOkNBUFMiIHRpdGxlPSJHU1RfU1RBVEUoKSI+R1NUX1NUQVRFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZSI+R3N0U3RhdGU8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZUNoYW5nZSIgdGl0bGU9ImVudW0gR3N0U3RhdGVDaGFuZ2UiPkdzdFN0YXRlQ2hhbmdlPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGVDaGFuZ2VSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIj5Hc3RTdGF0ZUNoYW5nZVJldHVybjwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1HRVQtQ09ORDpDQVBTIiB0aXRsZT0iR1NUX1NUQVRFX0dFVF9DT05EKCkiPkdTVF9TVEFURV9HRVRfQ09ORDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtR0VULUxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9TVEFURV9HRVRfTE9DSygpIj5HU1RfU1RBVEVfR0VUX0xPQ0s8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUdFVC1ORVhUOkNBUFMiIHRpdGxlPSJHU1RfU1RBVEVfR0VUX05FWFQoKSI+R1NUX1NUQVRFX0dFVF9ORVhUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1ORVhUOkNBUFMiIHRpdGxlPSJHU1RfU1RBVEVfTkVYVCgpIj5HU1RfU1RBVEVfTkVYVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtUEVORElORzpDQVBTIiB0aXRsZT0iR1NUX1NUQVRFX1BFTkRJTkcoKSI+R1NUX1NUQVRFX1BFTkRJTkc8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVJFVFVSTjpDQVBTIiB0aXRsZT0iR1NUX1NUQVRFX1JFVFVSTigpIj5HU1RfU1RBVEVfUkVUVVJOPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1UQVJHRVQ6Q0FQUyIgdGl0bGU9IkdTVF9TVEFURV9UQVJHRVQoKSI+R1NUX1NUQVRFX1RBUkdFVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtVFJBTlNJVElPTjpDQVBTIiB0aXRsZT0iR1NUX1NUQVRFX1RSQU5TSVRJT04oKSI+R1NUX1NUQVRFX1RSQU5TSVRJT048L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVRSQU5TSVRJT04tQ1VSUkVOVDpDQVBTIiB0aXRsZT0iR1NUX1NUQVRFX1RSQU5TSVRJT05fQ1VSUkVOVCgpIj5HU1RfU1RBVEVfVFJBTlNJVElPTl9DVVJSRU5UPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1UUkFOU0lUSU9OLU5FWFQ6Q0FQUyIgdGl0bGU9IkdTVF9TVEFURV9UUkFOU0lUSU9OX05FWFQoKSI+R1NUX1NUQVRFX1RSQU5TSVRJT05fTkVYVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0U3RhdGljQ2FwcyIgdGl0bGU9InN0cnVjdCBHc3RTdGF0aWNDYXBzIj5Hc3RTdGF0aWNDYXBzPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFN0YXRpY1BhZFRlbXBsYXRlIiB0aXRsZT0ic3RydWN0IEdzdFN0YXRpY1BhZFRlbXBsYXRlIj5Hc3RTdGF0aWNQYWRUZW1wbGF0ZTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj5Hc3RQYWRUZW1wbGF0ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dTVC1TVEFUSUMtQ0FQUyIgdGl0bGU9IkdTVF9TVEFUSUNfQ0FQUygpIj5HU1RfU1RBVElDX0NBUFM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHU1QtU1RBVElDLUNBUFMtQU5ZOkNBUFMiIHRpdGxlPSJHU1RfU1RBVElDX0NBUFNfQU5ZIj5HU1RfU1RBVElDX0NBUFNfQU5ZPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LXN0YXRpYy1jYXBzLWNsZWFudXAiIHRpdGxlPSJnc3Rfc3RhdGljX2NhcHNfY2xlYW51cCAoKSI+Z3N0X3N0YXRpY19jYXBzX2NsZWFudXA8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3Qtc3RhdGljLWNhcHMtZ2V0IiB0aXRsZT0iZ3N0X3N0YXRpY19jYXBzX2dldCAoKSI+Z3N0X3N0YXRpY19jYXBzX2dldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dTVC1TVEFUSUMtQ0FQUy1OT05FOkNBUFMiIHRpdGxlPSJHU1RfU1RBVElDX0NBUFNfTk9ORSI+R1NUX1NUQVRJQ19DQVBTX05PTkU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHU1QtU1RBVElDLVBBRC1URU1QTEFURTpDQVBTIiB0aXRsZT0iR1NUX1NUQVRJQ19QQURfVEVNUExBVEUoKSI+R1NUX1NUQVRJQ19QQURfVEVNUExBVEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj5Hc3RQYWRUZW1wbGF0ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI2dzdC1zdGF0aWMtcGFkLXRlbXBsYXRlLWdldCIgdGl0bGU9ImdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoKSI+Z3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+R3N0UGFkVGVtcGxhdGU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNnc3Qtc3RhdGljLXBhZC10ZW1wbGF0ZS1nZXQtY2FwcyIgdGl0bGU9ImdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldF9jYXBzICgpIj5nc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXRfY2FwczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPkdzdFBhZFRlbXBsYXRlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHc3RTdHJlYW1FcnJvciIgdGl0bGU9ImVudW0gR3N0U3RyZWFtRXJyb3IiPkdzdFN0cmVhbUVycm9yPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sIiB0aXRsZT0iR3N0R0Vycm9yIj5Hc3RHRXJyb3I8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RTdHJlYW1TdGF0dXNUeXBlIiB0aXRsZT0iZW51bSBHc3RTdHJlYW1TdGF0dXNUeXBlIj5Hc3RTdHJlYW1TdGF0dXNUeXBlPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1TVFJFQU0tRVJST1I6Q0FQUyIgdGl0bGU9IkdTVF9TVFJFQU1fRVJST1IiPkdTVF9TVFJFQU1fRVJST1I8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sIiB0aXRsZT0iR3N0R0Vycm9yIj5Hc3RHRXJyb3I8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RTdHJ1Y3R1cmVDaGFuZ2VUeXBlIiB0aXRsZT0iZW51bSBHc3RTdHJ1Y3R1cmVDaGFuZ2VUeXBlIj5Hc3RTdHJ1Y3R1cmVDaGFuZ2VUeXBlPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZUZvcmVhY2hGdW5jIiB0aXRsZT0iR3N0U3RydWN0dXJlRm9yZWFjaEZ1bmMgKCkiPkdzdFN0cnVjdHVyZUZvcmVhY2hGdW5jPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZU1hcEZ1bmMiIHRpdGxlPSJHc3RTdHJ1Y3R1cmVNYXBGdW5jICgpIj5Hc3RTdHJ1Y3R1cmVNYXBGdW5jPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtY2FuLWludGVyc2VjdCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfY2FuX2ludGVyc2VjdCAoKSI+Z3N0X3N0cnVjdHVyZV9jYW5faW50ZXJzZWN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+R3N0U3RydWN0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWNvcHkiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2NvcHkgKCkiPmdzdF9zdHJ1Y3R1cmVfY29weTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1lbXB0eS1uZXciIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2VtcHR5X25ldyAoKSI+Z3N0X3N0cnVjdHVyZV9lbXB0eV9uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZml4YXRlIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9maXhhdGUgKCkiPmdzdF9zdHJ1Y3R1cmVfZml4YXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+R3N0U3RydWN0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkICgpIj5nc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1maXhhdGUtZmllbGQtYm9vbGVhbiIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX2Jvb2xlYW4gKCkiPmdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX2Jvb2xlYW48L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZml4YXRlLWZpZWxkLW5lYXJlc3QtZG91YmxlIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9kb3VibGUgKCkiPmdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfZG91YmxlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+R3N0U3RydWN0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZC1uZWFyZXN0LWZyYWN0aW9uIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9mcmFjdGlvbiAoKSI+Z3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9mcmFjdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1maXhhdGUtZmllbGQtbmVhcmVzdC1pbnQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ludCAoKSI+Z3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9pbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZml4YXRlLWZpZWxkLXN0cmluZyIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX3N0cmluZyAoKSI+Z3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfc3RyaW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+R3N0U3RydWN0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZvcmVhY2giIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2ZvcmVhY2ggKCkiPmdzdF9zdHJ1Y3R1cmVfZm9yZWFjaDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1mcmVlIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9mcmVlICgpIj5nc3Rfc3RydWN0dXJlX2ZyZWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZnJvbS1zdHJpbmciIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nICgpIj5nc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+R3N0U3RydWN0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0ICgpIj5nc3Rfc3RydWN0dXJlX2dldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtYm9vbGVhbiIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X2Jvb2xlYW4gKCkiPmdzdF9zdHJ1Y3R1cmVfZ2V0X2Jvb2xlYW48L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LWNsb2NrLXRpbWUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldF9jbG9ja190aW1lICgpIj5nc3Rfc3RydWN0dXJlX2dldF9jbG9ja190aW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+R3N0U3RydWN0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1kYXRlIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9nZXRfZGF0ZSAoKSI+Z3N0X3N0cnVjdHVyZV9nZXRfZGF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtZGF0ZS10aW1lIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9nZXRfZGF0ZV90aW1lICgpIj5nc3Rfc3RydWN0dXJlX2dldF9kYXRlX3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LWRvdWJsZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZSAoKSI+Z3N0X3N0cnVjdHVyZV9nZXRfZG91YmxlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+R3N0U3RydWN0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1lbnVtIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9nZXRfZW51bSAoKSI+Z3N0X3N0cnVjdHVyZV9nZXRfZW51bTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtZmllbGQtdHlwZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X2ZpZWxkX3R5cGUgKCkiPmdzdF9zdHJ1Y3R1cmVfZ2V0X2ZpZWxkX3R5cGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LWZyYWN0aW9uIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9nZXRfZnJhY3Rpb24gKCkiPmdzdF9zdHJ1Y3R1cmVfZ2V0X2ZyYWN0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+R3N0U3RydWN0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1pbnQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldF9pbnQgKCkiPmdzdF9zdHJ1Y3R1cmVfZ2V0X2ludDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtbmFtZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKCkiPmdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LW5hbWUtaWQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldF9uYW1lX2lkICgpIj5nc3Rfc3RydWN0dXJlX2dldF9uYW1lX2lkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+R3N0U3RydWN0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1zdHJpbmciIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKCkiPmdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtdWludCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQgKCkiPmdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LXZhbGlzdCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbGlzdCAoKSI+Z3N0X3N0cnVjdHVyZV9nZXRfdmFsaXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+R3N0U3RydWN0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC12YWx1ZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlICgpIj5nc3Rfc3RydWN0dXJlX2dldF92YWx1ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1oYXMtZmllbGQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2hhc19maWVsZCAoKSI+Z3N0X3N0cnVjdHVyZV9oYXNfZmllbGQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaGFzLWZpZWxkLXR5cGVkIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGRfdHlwZWQgKCkiPmdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkX3R5cGVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+R3N0U3RydWN0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWhhcy1uYW1lIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAoKSI+Z3N0X3N0cnVjdHVyZV9oYXNfbmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1lbXB0eS1uZXciIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2lkX2VtcHR5X25ldyAoKSI+Z3N0X3N0cnVjdHVyZV9pZF9lbXB0eV9uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaWQtZ2V0IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKCkiPmdzdF9zdHJ1Y3R1cmVfaWRfZ2V0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+R3N0U3RydWN0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWlkLWdldC12YWxpc3QiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2lkX2dldF92YWxpc3QgKCkiPmdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbGlzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1nZXQtdmFsdWUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoKSI+Z3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaWQtaGFzLWZpZWxkIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9pZF9oYXNfZmllbGQgKCkiPmdzdF9zdHJ1Y3R1cmVfaWRfaGFzX2ZpZWxkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+R3N0U3RydWN0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWlkLWhhcy1maWVsZC10eXBlZCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfaWRfaGFzX2ZpZWxkX3R5cGVkICgpIj5nc3Rfc3RydWN0dXJlX2lkX2hhc19maWVsZF90eXBlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1uZXciIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2lkX25ldyAoKSI+Z3N0X3N0cnVjdHVyZV9pZF9uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaWQtc2V0IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9pZF9zZXQgKCkiPmdzdF9zdHJ1Y3R1cmVfaWRfc2V0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+R3N0U3RydWN0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWlkLXNldC12YWxpc3QiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2lkX3NldF92YWxpc3QgKCkiPmdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbGlzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1zZXQtdmFsdWUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2lkX3NldF92YWx1ZSAoKSI+Z3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsdWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaWQtdGFrZS12YWx1ZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfaWRfdGFrZV92YWx1ZSAoKSI+Z3N0X3N0cnVjdHVyZV9pZF90YWtlX3ZhbHVlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+R3N0U3RydWN0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWludGVyc2VjdCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfaW50ZXJzZWN0ICgpIj5nc3Rfc3RydWN0dXJlX2ludGVyc2VjdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pcy1lcXVhbCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfaXNfZXF1YWwgKCkiPmdzdF9zdHJ1Y3R1cmVfaXNfZXF1YWw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaXMtc3Vic2V0IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9pc19zdWJzZXQgKCkiPmdzdF9zdHJ1Y3R1cmVfaXNfc3Vic2V0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+R3N0U3RydWN0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLW1hcC1pbi1wbGFjZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfbWFwX2luX3BsYWNlICgpIj5nc3Rfc3RydWN0dXJlX21hcF9pbl9wbGFjZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1uZXciIHRpdGxlPSJnc3Rfc3RydWN0dXJlX25ldyAoKSI+Z3N0X3N0cnVjdHVyZV9uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtbmV3LXZhbGlzdCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfbmV3X3ZhbGlzdCAoKSI+Z3N0X3N0cnVjdHVyZV9uZXdfdmFsaXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+R3N0U3RydWN0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLW50aC1maWVsZC1uYW1lIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9udGhfZmllbGRfbmFtZSAoKSI+Z3N0X3N0cnVjdHVyZV9udGhfZmllbGRfbmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1uLWZpZWxkcyIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfbl9maWVsZHMgKCkiPmdzdF9zdHJ1Y3R1cmVfbl9maWVsZHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtcmVtb3ZlLWFsbC1maWVsZHMiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX3JlbW92ZV9hbGxfZmllbGRzICgpIj5nc3Rfc3RydWN0dXJlX3JlbW92ZV9hbGxfZmllbGRzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+R3N0U3RydWN0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXJlbW92ZS1maWVsZCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkICgpIj5nc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1yZW1vdmUtZmllbGRzIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzICgpIj5nc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtcmVtb3ZlLWZpZWxkcy12YWxpc3QiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZHNfdmFsaXN0ICgpIj5nc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZHNfdmFsaXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+R3N0U3RydWN0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXNldCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfc2V0ICgpIj5nc3Rfc3RydWN0dXJlX3NldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1zZXQtbmFtZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfc2V0X25hbWUgKCkiPmdzdF9zdHJ1Y3R1cmVfc2V0X25hbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtc2V0LXBhcmVudC1yZWZjb3VudCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfc2V0X3BhcmVudF9yZWZjb3VudCAoKSI+Z3N0X3N0cnVjdHVyZV9zZXRfcGFyZW50X3JlZmNvdW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+R3N0U3RydWN0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXNldC12YWxpc3QiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX3NldF92YWxpc3QgKCkiPmdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbGlzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1zZXQtdmFsdWUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAoKSI+Z3N0X3N0cnVjdHVyZV9zZXRfdmFsdWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtdGFrZS12YWx1ZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfdGFrZV92YWx1ZSAoKSI+Z3N0X3N0cnVjdHVyZV90YWtlX3ZhbHVlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+R3N0U3RydWN0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXRvLXN0cmluZyIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nICgpIj5nc3Rfc3RydWN0dXJlX3RvX3N0cmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtU1RSLUZPVVJDQzpDQVBTIiB0aXRsZT0iR1NUX1NUUl9GT1VSQ0MoKSI+R1NUX1NUUl9GT1VSQ0M8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtU1RSLU5VTEw6Q0FQUyIgdGl0bGU9IkdTVF9TVFJfTlVMTCgpIj5HU1RfU1RSX05VTEw8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3lzdGVtQ2xvY2suaHRtbCNHc3RTeXN0ZW1DbG9jay1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0U3lzdGVtQ2xvY2siPkdzdFN5c3RlbUNsb2NrPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTeXN0ZW1DbG9jay5odG1sIiB0aXRsZT0iR3N0U3lzdGVtQ2xvY2siPkdzdFN5c3RlbUNsb2NrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN5c3RlbUNsb2NrLmh0bWwjR3N0U3lzdGVtQ2xvY2stLWNsb2NrLXR5cGUiIHRpdGxlPSdUaGUgImNsb2NrLXR5cGUiIHByb3BlcnR5Jz5Hc3RTeXN0ZW1DbG9jazpjbG9jay10eXBlPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTeXN0ZW1DbG9jay5odG1sIiB0aXRsZT0iR3N0U3lzdGVtQ2xvY2siPkdzdFN5c3RlbUNsb2NrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN5c3RlbUNsb2NrLmh0bWwjZ3N0LXN5c3RlbS1jbG9jay1vYnRhaW4iIHRpdGxlPSJnc3Rfc3lzdGVtX2Nsb2NrX29idGFpbiAoKSI+Z3N0X3N5c3RlbV9jbG9ja19vYnRhaW48L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3lzdGVtQ2xvY2suaHRtbCIgdGl0bGU9IkdzdFN5c3RlbUNsb2NrIj5Hc3RTeXN0ZW1DbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxhIG5hbWU9ImlkeFQiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5UPC9oMz4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0ZsYWciIHRpdGxlPSJlbnVtIEdzdFRhZ0ZsYWciPkdzdFRhZ0ZsYWc8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0ZvcmVhY2hGdW5jIiB0aXRsZT0iR3N0VGFnRm9yZWFjaEZ1bmMgKCkiPkdzdFRhZ0ZvcmVhY2hGdW5jPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4sIHR5cGVkZWYgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VGdW5jIiB0aXRsZT0iR3N0VGFnTWVyZ2VGdW5jICgpIj5Hc3RUYWdNZXJnZUZ1bmM8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ01lcmdlTW9kZSIgdGl0bGU9ImVudW0gR3N0VGFnTWVyZ2VNb2RlIj5Hc3RUYWdNZXJnZU1vZGU8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCNHc3RUYWdTZXR0ZXItc3RydWN0IiB0aXRsZT0iR3N0VGFnU2V0dGVyIj5Hc3RUYWdTZXR0ZXI8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj5Hc3RUYWdTZXR0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjR3N0VGFnU2V0dGVySUZhY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0VGFnU2V0dGVySUZhY2UiPkdzdFRhZ1NldHRlcklGYWNlPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCIgdGl0bGU9IkdzdFRhZ1NldHRlciI+R3N0VGFnU2V0dGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BTEJVTTpDQVBTIiB0aXRsZT0iR1NUX1RBR19BTEJVTSI+R1NUX1RBR19BTEJVTTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQUxCVU0tQVJUSVNUOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0FMQlVNX0FSVElTVCI+R1NUX1RBR19BTEJVTV9BUlRJU1Q8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFMQlVNLUFSVElTVC1TT1JUTkFNRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19BTEJVTV9BUlRJU1RfU09SVE5BTUUiPkdTVF9UQUdfQUxCVU1fQVJUSVNUX1NPUlROQU1FPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BTEJVTS1HQUlOOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0FMQlVNX0dBSU4iPkdTVF9UQUdfQUxCVU1fR0FJTjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQUxCVU0tUEVBSzpDQVBTIiB0aXRsZT0iR1NUX1RBR19BTEJVTV9QRUFLIj5HU1RfVEFHX0FMQlVNX1BFQUs8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFMQlVNLVNPUlROQU1FOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0FMQlVNX1NPUlROQU1FIj5HU1RfVEFHX0FMQlVNX1NPUlROQU1FPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BTEJVTS1WT0xVTUUtQ09VTlQ6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQUxCVU1fVk9MVU1FX0NPVU5UIj5HU1RfVEFHX0FMQlVNX1ZPTFVNRV9DT1VOVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQUxCVU0tVk9MVU1FLU5VTUJFUjpDQVBTIiB0aXRsZT0iR1NUX1RBR19BTEJVTV9WT0xVTUVfTlVNQkVSIj5HU1RfVEFHX0FMQlVNX1ZPTFVNRV9OVU1CRVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFQUExJQ0FUSU9OLURBVEE6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQVBQTElDQVRJT05fREFUQSI+R1NUX1RBR19BUFBMSUNBVElPTl9EQVRBPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BUFBMSUNBVElPTi1OQU1FOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0FQUExJQ0FUSU9OX05BTUUiPkdTVF9UQUdfQVBQTElDQVRJT05fTkFNRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQVJUSVNUOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0FSVElTVCI+R1NUX1RBR19BUlRJU1Q8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFSVElTVC1TT1JUTkFNRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19BUlRJU1RfU09SVE5BTUUiPkdTVF9UQUdfQVJUSVNUX1NPUlROQU1FPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BVFRBQ0hNRU5UOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0FUVEFDSE1FTlQiPkdTVF9UQUdfQVRUQUNITUVOVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQVVESU8tQ09ERUM6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQVVESU9fQ09ERUMiPkdTVF9UQUdfQVVESU9fQ09ERUM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUJFQVRTLVBFUi1NSU5VVEU6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQkVBVFNfUEVSX01JTlVURSI+R1NUX1RBR19CRUFUU19QRVJfTUlOVVRFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1CSVRSQVRFOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0JJVFJBVEUiPkdTVF9UQUdfQklUUkFURTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQ09ERUM6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQ09ERUMiPkdTVF9UQUdfQ09ERUM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUNPTU1FTlQ6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQ09NTUVOVCI+R1NUX1RBR19DT01NRU5UPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1DT01QT1NFUjpDQVBTIiB0aXRsZT0iR1NUX1RBR19DT01QT1NFUiI+R1NUX1RBR19DT01QT1NFUjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQ09NUE9TRVItU09SVE5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQ09NUE9TRVJfU09SVE5BTUUiPkdTVF9UQUdfQ09NUE9TRVJfU09SVE5BTUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUNPTlRBQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQ09OVEFDVCI+R1NUX1RBR19DT05UQUNUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1DT05UQUlORVItRk9STUFUOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0NPTlRBSU5FUl9GT1JNQVQiPkdTVF9UQUdfQ09OVEFJTkVSX0ZPUk1BVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQ09QWVJJR0hUOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0NPUFlSSUdIVCI+R1NUX1RBR19DT1BZUklHSFQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUNPUFlSSUdIVC1VUkk6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQ09QWVJJR0hUX1VSSSI+R1NUX1RBR19DT1BZUklHSFRfVVJJPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1EQVRFOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0RBVEUiPkdTVF9UQUdfREFURTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctREFURS1USU1FOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0RBVEVfVElNRSI+R1NUX1RBR19EQVRFX1RJTUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLURFU0NSSVBUSU9OOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0RFU0NSSVBUSU9OIj5HU1RfVEFHX0RFU0NSSVBUSU9OPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1ERVZJQ0UtTUFOVUZBQ1RVUkVSOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0RFVklDRV9NQU5VRkFDVFVSRVIiPkdTVF9UQUdfREVWSUNFX01BTlVGQUNUVVJFUjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctREVWSUNFLU1PREVMOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0RFVklDRV9NT0RFTCI+R1NUX1RBR19ERVZJQ0VfTU9ERUw8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLURVUkFUSU9OOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0RVUkFUSU9OIj5HU1RfVEFHX0RVUkFUSU9OPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1FTkNPREVELUJZOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0VOQ09ERURfQlkiPkdTVF9UQUdfRU5DT0RFRF9CWTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctRU5DT0RFUjpDQVBTIiB0aXRsZT0iR1NUX1RBR19FTkNPREVSIj5HU1RfVEFHX0VOQ09ERVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUVOQ09ERVItVkVSU0lPTjpDQVBTIiB0aXRsZT0iR1NUX1RBR19FTkNPREVSX1ZFUlNJT04iPkdTVF9UQUdfRU5DT0RFUl9WRVJTSU9OPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1leGlzdHMiIHRpdGxlPSJnc3RfdGFnX2V4aXN0cyAoKSI+Z3N0X3RhZ19leGlzdHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUVYVEVOREVELUNPTU1FTlQ6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfRVhURU5ERURfQ09NTUVOVCI+R1NUX1RBR19FWFRFTkRFRF9DT01NRU5UPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1HRU5SRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19HRU5SRSI+R1NUX1RBR19HRU5SRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLUNBUFRVUkUtRElSRUNUSU9OOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0dFT19MT0NBVElPTl9DQVBUVVJFX0RJUkVDVElPTiI+R1NUX1RBR19HRU9fTE9DQVRJT05fQ0FQVFVSRV9ESVJFQ1RJT048L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1DSVRZOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0dFT19MT0NBVElPTl9DSVRZIj5HU1RfVEFHX0dFT19MT0NBVElPTl9DSVRZPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1HRU8tTE9DQVRJT04tQ09VTlRSWTpDQVBTIiB0aXRsZT0iR1NUX1RBR19HRU9fTE9DQVRJT05fQ09VTlRSWSI+R1NUX1RBR19HRU9fTE9DQVRJT05fQ09VTlRSWTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLUVMRVZBVElPTjpDQVBTIiB0aXRsZT0iR1NUX1RBR19HRU9fTE9DQVRJT05fRUxFVkFUSU9OIj5HU1RfVEFHX0dFT19MT0NBVElPTl9FTEVWQVRJT048L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1IT1JJWk9OVEFMLUVSUk9SOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0dFT19MT0NBVElPTl9IT1JJWk9OVEFMX0VSUk9SIj5HU1RfVEFHX0dFT19MT0NBVElPTl9IT1JJWk9OVEFMX0VSUk9SPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1HRU8tTE9DQVRJT04tTEFUSVRVREU6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfR0VPX0xPQ0FUSU9OX0xBVElUVURFIj5HU1RfVEFHX0dFT19MT0NBVElPTl9MQVRJVFVERTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLUxPTkdJVFVERTpDQVBTIiB0aXRsZT0iR1NUX1RBR19HRU9fTE9DQVRJT05fTE9OR0lUVURFIj5HU1RfVEFHX0dFT19MT0NBVElPTl9MT05HSVRVREU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1NT1ZFTUVOVC1ESVJFQ1RJT046Q0FQUyIgdGl0bGU9IkdTVF9UQUdfR0VPX0xPQ0FUSU9OX01PVkVNRU5UX0RJUkVDVElPTiI+R1NUX1RBR19HRU9fTE9DQVRJT05fTU9WRU1FTlRfRElSRUNUSU9OPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1HRU8tTE9DQVRJT04tTU9WRU1FTlQtU1BFRUQ6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfR0VPX0xPQ0FUSU9OX01PVkVNRU5UX1NQRUVEIj5HU1RfVEFHX0dFT19MT0NBVElPTl9NT1ZFTUVOVF9TUEVFRDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfR0VPX0xPQ0FUSU9OX05BTUUiPkdTVF9UQUdfR0VPX0xPQ0FUSU9OX05BTUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1TVUJMT0NBVElPTjpDQVBTIiB0aXRsZT0iR1NUX1RBR19HRU9fTE9DQVRJT05fU1VCTE9DQVRJT04iPkdTVF9UQUdfR0VPX0xPQ0FUSU9OX1NVQkxPQ0FUSU9OPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1nZXQtZGVzY3JpcHRpb24iIHRpdGxlPSJnc3RfdGFnX2dldF9kZXNjcmlwdGlvbiAoKSI+Z3N0X3RhZ19nZXRfZGVzY3JpcHRpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWdldC1mbGFnIiB0aXRsZT0iZ3N0X3RhZ19nZXRfZmxhZyAoKSI+Z3N0X3RhZ19nZXRfZmxhZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctZ2V0LW5pY2siIHRpdGxlPSJnc3RfdGFnX2dldF9uaWNrICgpIj5nc3RfdGFnX2dldF9uaWNrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1nZXQtdHlwZSIgdGl0bGU9ImdzdF90YWdfZ2V0X3R5cGUgKCkiPmdzdF90YWdfZ2V0X3R5cGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdST1VQSU5HOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0dST1VQSU5HIj5HU1RfVEFHX0dST1VQSU5HPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1IT01FUEFHRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19IT01FUEFHRSI+R1NUX1RBR19IT01FUEFHRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctSU1BR0U6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfSU1BR0UiPkdTVF9UQUdfSU1BR0U8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUlNQUdFLU9SSUVOVEFUSU9OOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0lNQUdFX09SSUVOVEFUSU9OIj5HU1RfVEFHX0lNQUdFX09SSUVOVEFUSU9OPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1JU1JDOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0lTUkMiPkdTVF9UQUdfSVNSQzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctaXMtZml4ZWQiIHRpdGxlPSJnc3RfdGFnX2lzX2ZpeGVkICgpIj5nc3RfdGFnX2lzX2ZpeGVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1LRVlXT1JEUzpDQVBTIiB0aXRsZT0iR1NUX1RBR19LRVlXT1JEUyI+R1NUX1RBR19LRVlXT1JEUzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTEFOR1VBR0UtQ09ERTpDQVBTIiB0aXRsZT0iR1NUX1RBR19MQU5HVUFHRV9DT0RFIj5HU1RfVEFHX0xBTkdVQUdFX0NPREU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUxJQ0VOU0U6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfTElDRU5TRSI+R1NUX1RBR19MSUNFTlNFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1MSUNFTlNFLVVSSTpDQVBTIiB0aXRsZT0iR1NUX1RBR19MSUNFTlNFX1VSSSI+R1NUX1RBR19MSUNFTlNFX1VSSTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1hZGQiIHRpdGxlPSJnc3RfdGFnX2xpc3RfYWRkICgpIj5nc3RfdGFnX2xpc3RfYWRkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWFkZC12YWxpc3QiIHRpdGxlPSJnc3RfdGFnX2xpc3RfYWRkX3ZhbGlzdCAoKSI+Z3N0X3RhZ19saXN0X2FkZF92YWxpc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtYWRkLXZhbGlzdC12YWx1ZXMiIHRpdGxlPSJnc3RfdGFnX2xpc3RfYWRkX3ZhbGlzdF92YWx1ZXMgKCkiPmdzdF90YWdfbGlzdF9hZGRfdmFsaXN0X3ZhbHVlczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1hZGQtdmFsdWUiIHRpdGxlPSJnc3RfdGFnX2xpc3RfYWRkX3ZhbHVlICgpIj5nc3RfdGFnX2xpc3RfYWRkX3ZhbHVlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWFkZC12YWx1ZXMiIHRpdGxlPSJnc3RfdGFnX2xpc3RfYWRkX3ZhbHVlcyAoKSI+Z3N0X3RhZ19saXN0X2FkZF92YWx1ZXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtY29weSIgdGl0bGU9ImdzdF90YWdfbGlzdF9jb3B5ICgpIj5nc3RfdGFnX2xpc3RfY29weTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1jb3B5LXZhbHVlIiB0aXRsZT0iZ3N0X3RhZ19saXN0X2NvcHlfdmFsdWUgKCkiPmdzdF90YWdfbGlzdF9jb3B5X3ZhbHVlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWZvcmVhY2giIHRpdGxlPSJnc3RfdGFnX2xpc3RfZm9yZWFjaCAoKSI+Z3N0X3RhZ19saXN0X2ZvcmVhY2g8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZnJlZSIgdGl0bGU9ImdzdF90YWdfbGlzdF9mcmVlICgpIj5nc3RfdGFnX2xpc3RfZnJlZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtYm9vbGVhbiIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfYm9vbGVhbiAoKSI+Z3N0X3RhZ19saXN0X2dldF9ib29sZWFuPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1ib29sZWFuLWluZGV4IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF9ib29sZWFuX2luZGV4ICgpIj5nc3RfdGFnX2xpc3RfZ2V0X2Jvb2xlYW5faW5kZXg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWJ1ZmZlciIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfYnVmZmVyICgpIj5nc3RfdGFnX2xpc3RfZ2V0X2J1ZmZlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtYnVmZmVyLWluZGV4IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF9idWZmZXJfaW5kZXggKCkiPmdzdF90YWdfbGlzdF9nZXRfYnVmZmVyX2luZGV4PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1jaGFyIiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF9jaGFyICgpIj5nc3RfdGFnX2xpc3RfZ2V0X2NoYXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWNoYXItaW5kZXgiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X2NoYXJfaW5kZXggKCkiPmdzdF90YWdfbGlzdF9nZXRfY2hhcl9pbmRleDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtZGF0ZSIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfZGF0ZSAoKSI+Z3N0X3RhZ19saXN0X2dldF9kYXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1kYXRlLWluZGV4IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF9kYXRlX2luZGV4ICgpIj5nc3RfdGFnX2xpc3RfZ2V0X2RhdGVfaW5kZXg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWRhdGUtdGltZSIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfZGF0ZV90aW1lICgpIj5nc3RfdGFnX2xpc3RfZ2V0X2RhdGVfdGltZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtZGF0ZS10aW1lLWluZGV4IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF9kYXRlX3RpbWVfaW5kZXggKCkiPmdzdF90YWdfbGlzdF9nZXRfZGF0ZV90aW1lX2luZGV4PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1kb3VibGUiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZSAoKSI+Z3N0X3RhZ19saXN0X2dldF9kb3VibGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWRvdWJsZS1pbmRleCIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfZG91YmxlX2luZGV4ICgpIj5nc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZV9pbmRleDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtZmxvYXQiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X2Zsb2F0ICgpIj5nc3RfdGFnX2xpc3RfZ2V0X2Zsb2F0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1mbG9hdC1pbmRleCIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfZmxvYXRfaW5kZXggKCkiPmdzdF90YWdfbGlzdF9nZXRfZmxvYXRfaW5kZXg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWludCIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfaW50ICgpIj5nc3RfdGFnX2xpc3RfZ2V0X2ludDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtaW50NjQiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X2ludDY0ICgpIj5nc3RfdGFnX2xpc3RfZ2V0X2ludDY0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1pbnQ2NC1pbmRleCIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfaW50NjRfaW5kZXggKCkiPmdzdF90YWdfbGlzdF9nZXRfaW50NjRfaW5kZXg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWludC1pbmRleCIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfaW50X2luZGV4ICgpIj5nc3RfdGFnX2xpc3RfZ2V0X2ludF9pbmRleDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtbG9uZyIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfbG9uZyAoKSI+Z3N0X3RhZ19saXN0X2dldF9sb25nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1sb25nLWluZGV4IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF9sb25nX2luZGV4ICgpIj5nc3RfdGFnX2xpc3RfZ2V0X2xvbmdfaW5kZXg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXBvaW50ZXIiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X3BvaW50ZXIgKCkiPmdzdF90YWdfbGlzdF9nZXRfcG9pbnRlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtcG9pbnRlci1pbmRleCIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfcG9pbnRlcl9pbmRleCAoKSI+Z3N0X3RhZ19saXN0X2dldF9wb2ludGVyX2luZGV4PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1zdHJpbmciIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZyAoKSI+Z3N0X3RhZ19saXN0X2dldF9zdHJpbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXN0cmluZy1pbmRleCIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfc3RyaW5nX2luZGV4ICgpIj5nc3RfdGFnX2xpc3RfZ2V0X3N0cmluZ19pbmRleDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtdGFnLXNpemUiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X3RhZ19zaXplICgpIj5nc3RfdGFnX2xpc3RfZ2V0X3RhZ19zaXplPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC11Y2hhciIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfdWNoYXIgKCkiPmdzdF90YWdfbGlzdF9nZXRfdWNoYXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXVjaGFyLWluZGV4IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF91Y2hhcl9pbmRleCAoKSI+Z3N0X3RhZ19saXN0X2dldF91Y2hhcl9pbmRleDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtdWludCIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfdWludCAoKSI+Z3N0X3RhZ19saXN0X2dldF91aW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC11aW50NjQiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X3VpbnQ2NCAoKSI+Z3N0X3RhZ19saXN0X2dldF91aW50NjQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXVpbnQ2NC1pbmRleCIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfdWludDY0X2luZGV4ICgpIj5nc3RfdGFnX2xpc3RfZ2V0X3VpbnQ2NF9pbmRleDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtdWludC1pbmRleCIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfdWludF9pbmRleCAoKSI+Z3N0X3RhZ19saXN0X2dldF91aW50X2luZGV4PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC11bG9uZyIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfdWxvbmcgKCkiPmdzdF90YWdfbGlzdF9nZXRfdWxvbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXVsb25nLWluZGV4IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF91bG9uZ19pbmRleCAoKSI+Z3N0X3RhZ19saXN0X2dldF91bG9uZ19pbmRleDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtdmFsdWUtaW5kZXgiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X3ZhbHVlX2luZGV4ICgpIj5nc3RfdGFnX2xpc3RfZ2V0X3ZhbHVlX2luZGV4PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWluc2VydCIgdGl0bGU9ImdzdF90YWdfbGlzdF9pbnNlcnQgKCkiPmdzdF90YWdfbGlzdF9pbnNlcnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtaXMtZW1wdHkiIHRpdGxlPSJnc3RfdGFnX2xpc3RfaXNfZW1wdHkgKCkiPmdzdF90YWdfbGlzdF9pc19lbXB0eTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1tZXJnZSIgdGl0bGU9ImdzdF90YWdfbGlzdF9tZXJnZSAoKSI+Z3N0X3RhZ19saXN0X21lcmdlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LW5ldyIgdGl0bGU9ImdzdF90YWdfbGlzdF9uZXcgKCkiPmdzdF90YWdfbGlzdF9uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtbmV3LWZ1bGwiIHRpdGxlPSJnc3RfdGFnX2xpc3RfbmV3X2Z1bGwgKCkiPmdzdF90YWdfbGlzdF9uZXdfZnVsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1uZXctZnVsbC12YWxpc3QiIHRpdGxlPSJnc3RfdGFnX2xpc3RfbmV3X2Z1bGxfdmFsaXN0ICgpIj5nc3RfdGFnX2xpc3RfbmV3X2Z1bGxfdmFsaXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LXBlZWstc3RyaW5nLWluZGV4IiB0aXRsZT0iZ3N0X3RhZ19saXN0X3BlZWtfc3RyaW5nX2luZGV4ICgpIj5nc3RfdGFnX2xpc3RfcGVla19zdHJpbmdfaW5kZXg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtcmVtb3ZlLXRhZyIgdGl0bGU9ImdzdF90YWdfbGlzdF9yZW1vdmVfdGFnICgpIj5nc3RfdGFnX2xpc3RfcmVtb3ZlX3RhZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTE9DQVRJT046Q0FQUyIgdGl0bGU9IkdTVF9UQUdfTE9DQVRJT04iPkdTVF9UQUdfTE9DQVRJT048L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUxZUklDUzpDQVBTIiB0aXRsZT0iR1NUX1RBR19MWVJJQ1MiPkdTVF9UQUdfTFlSSUNTPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1NQVhJTVVNLUJJVFJBVEU6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfTUFYSU1VTV9CSVRSQVRFIj5HU1RfVEFHX01BWElNVU1fQklUUkFURTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbWVyZ2Utc3RyaW5ncy13aXRoLWNvbW1hIiB0aXRsZT0iZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEgKCkiPmdzdF90YWdfbWVyZ2Vfc3RyaW5nc193aXRoX2NvbW1hPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1tZXJnZS11c2UtZmlyc3QiIHRpdGxlPSJnc3RfdGFnX21lcmdlX3VzZV9maXJzdCAoKSI+Z3N0X3RhZ19tZXJnZV91c2VfZmlyc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLU1JTklNVU0tQklUUkFURTpDQVBTIiB0aXRsZT0iR1NUX1RBR19NSU5JTVVNX0JJVFJBVEUiPkdTVF9UQUdfTUlOSU1VTV9CSVRSQVRFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1OT01JTkFMLUJJVFJBVEU6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfTk9NSU5BTF9CSVRSQVRFIj5HU1RfVEFHX05PTUlOQUxfQklUUkFURTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctT1JHQU5JWkFUSU9OOkNBUFMiIHRpdGxlPSJHU1RfVEFHX09SR0FOSVpBVElPTiI+R1NUX1RBR19PUkdBTklaQVRJT048L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVBFUkZPUk1FUjpDQVBTIiB0aXRsZT0iR1NUX1RBR19QRVJGT1JNRVIiPkdTVF9UQUdfUEVSRk9STUVSPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1QUkVWSUVXLUlNQUdFOkNBUFMiIHRpdGxlPSJHU1RfVEFHX1BSRVZJRVdfSU1BR0UiPkdTVF9UQUdfUFJFVklFV19JTUFHRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctUkVGRVJFTkNFLUxFVkVMOkNBUFMiIHRpdGxlPSJHU1RfVEFHX1JFRkVSRU5DRV9MRVZFTCI+R1NUX1RBR19SRUZFUkVOQ0VfTEVWRUw8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLXJlZ2lzdGVyIiB0aXRsZT0iZ3N0X3RhZ19yZWdpc3RlciAoKSI+Z3N0X3RhZ19yZWdpc3RlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctU0VSSUFMOkNBUFMiIHRpdGxlPSJHU1RfVEFHX1NFUklBTCI+R1NUX1RBR19TRVJJQUw8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZ3MiIHRpdGxlPSJnc3RfdGFnX3NldHRlcl9hZGRfdGFncyAoKSI+Z3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPkdzdFRhZ1NldHRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCNnc3QtdGFnLXNldHRlci1hZGQtdGFnLXZhbGlzdCIgdGl0bGU9ImdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsaXN0ICgpIj5nc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbGlzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCIgdGl0bGU9IkdzdFRhZ1NldHRlciI+R3N0VGFnU2V0dGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sI2dzdC10YWctc2V0dGVyLWFkZC10YWctdmFsaXN0LXZhbHVlcyIgdGl0bGU9ImdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsaXN0X3ZhbHVlcyAoKSI+Z3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWxpc3RfdmFsdWVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj5Hc3RUYWdTZXR0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZy12YWx1ZSIgdGl0bGU9ImdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsdWUgKCkiPmdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsdWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPkdzdFRhZ1NldHRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCNnc3QtdGFnLXNldHRlci1hZGQtdGFnLXZhbHVlcyIgdGl0bGU9ImdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsdWVzICgpIj5nc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbHVlczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCIgdGl0bGU9IkdzdFRhZ1NldHRlciI+R3N0VGFnU2V0dGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sI2dzdC10YWctc2V0dGVyLWdldC10YWctbGlzdCIgdGl0bGU9ImdzdF90YWdfc2V0dGVyX2dldF90YWdfbGlzdCAoKSI+Z3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19saXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj5Hc3RUYWdTZXR0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItZ2V0LXRhZy1tZXJnZS1tb2RlIiB0aXRsZT0iZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19tZXJnZV9tb2RlICgpIj5nc3RfdGFnX3NldHRlcl9nZXRfdGFnX21lcmdlX21vZGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPkdzdFRhZ1NldHRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCNnc3QtdGFnLXNldHRlci1tZXJnZS10YWdzIiB0aXRsZT0iZ3N0X3RhZ19zZXR0ZXJfbWVyZ2VfdGFncyAoKSI+Z3N0X3RhZ19zZXR0ZXJfbWVyZ2VfdGFnczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCIgdGl0bGU9IkdzdFRhZ1NldHRlciI+R3N0VGFnU2V0dGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sI2dzdC10YWctc2V0dGVyLXJlc2V0LXRhZ3MiIHRpdGxlPSJnc3RfdGFnX3NldHRlcl9yZXNldF90YWdzICgpIj5nc3RfdGFnX3NldHRlcl9yZXNldF90YWdzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj5Hc3RUYWdTZXR0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItc2V0LXRhZy1tZXJnZS1tb2RlIiB0aXRsZT0iZ3N0X3RhZ19zZXR0ZXJfc2V0X3RhZ19tZXJnZV9tb2RlICgpIj5nc3RfdGFnX3NldHRlcl9zZXRfdGFnX21lcmdlX21vZGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPkdzdFRhZ1NldHRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctU0hPVy1FUElTT0RFLU5VTUJFUjpDQVBTIiB0aXRsZT0iR1NUX1RBR19TSE9XX0VQSVNPREVfTlVNQkVSIj5HU1RfVEFHX1NIT1dfRVBJU09ERV9OVU1CRVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVNIT1ctTkFNRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19TSE9XX05BTUUiPkdTVF9UQUdfU0hPV19OQU1FPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1TSE9XLVNFQVNPTi1OVU1CRVI6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfU0hPV19TRUFTT05fTlVNQkVSIj5HU1RfVEFHX1NIT1dfU0VBU09OX05VTUJFUjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctU0hPVy1TT1JUTkFNRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19TSE9XX1NPUlROQU1FIj5HU1RfVEFHX1NIT1dfU09SVE5BTUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVNVQlRJVExFLUNPREVDOkNBUFMiIHRpdGxlPSJHU1RfVEFHX1NVQlRJVExFX0NPREVDIj5HU1RfVEFHX1NVQlRJVExFX0NPREVDPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1USVRMRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19USVRMRSI+R1NUX1RBR19USVRMRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVElUTEUtU09SVE5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfVElUTEVfU09SVE5BTUUiPkdTVF9UQUdfVElUTEVfU09SVE5BTUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVRSQUNLLUNPVU5UOkNBUFMiIHRpdGxlPSJHU1RfVEFHX1RSQUNLX0NPVU5UIj5HU1RfVEFHX1RSQUNLX0NPVU5UPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1UUkFDSy1HQUlOOkNBUFMiIHRpdGxlPSJHU1RfVEFHX1RSQUNLX0dBSU4iPkdTVF9UQUdfVFJBQ0tfR0FJTjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVFJBQ0stTlVNQkVSOkNBUFMiIHRpdGxlPSJHU1RfVEFHX1RSQUNLX05VTUJFUiI+R1NUX1RBR19UUkFDS19OVU1CRVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVRSQUNLLVBFQUs6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfVFJBQ0tfUEVBSyI+R1NUX1RBR19UUkFDS19QRUFLPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1VU0VSLVJBVElORzpDQVBTIiB0aXRsZT0iR1NUX1RBR19VU0VSX1JBVElORyI+R1NUX1RBR19VU0VSX1JBVElORzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVkVSU0lPTjpDQVBTIiB0aXRsZT0iR1NUX1RBR19WRVJTSU9OIj5HU1RfVEFHX1ZFUlNJT048L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVZJREVPLUNPREVDOkNBUFMiIHRpdGxlPSJHU1RfVEFHX1ZJREVPX0NPREVDIj5HU1RfVEFHX1ZJREVPX0NPREVDPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNHc3RUYXNrLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RUYXNrIj5Hc3RUYXNrPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj5Hc3RUYXNrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNHc3RUYXNrRnVuY3Rpb24iIHRpdGxlPSJHc3RUYXNrRnVuY3Rpb24gKCkiPkdzdFRhc2tGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPkdzdFRhc2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCNHc3RUYXNrUG9vbC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0VGFza1Bvb2wiPkdzdFRhc2tQb29sPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sIiB0aXRsZT0iR3N0VGFza1Bvb2wiPkdzdFRhc2tQb29sPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwjR3N0VGFza1Bvb2xDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RUYXNrUG9vbENsYXNzIj5Hc3RUYXNrUG9vbENsYXNzPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sIiB0aXRsZT0iR3N0VGFza1Bvb2wiPkdzdFRhc2tQb29sPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwjR3N0VGFza1Bvb2xGdW5jdGlvbiIgdGl0bGU9IkdzdFRhc2tQb29sRnVuY3Rpb24gKCkiPkdzdFRhc2tQb29sRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sIiB0aXRsZT0iR3N0VGFza1Bvb2wiPkdzdFRhc2tQb29sPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNHc3RUYXNrU3RhdGUiIHRpdGxlPSJlbnVtIEdzdFRhc2tTdGF0ZSI+R3N0VGFza1N0YXRlPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+R3N0VGFzazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjR3N0VGFza1RocmVhZENhbGxiYWNrcyIgdGl0bGU9IkdzdFRhc2tUaHJlYWRDYWxsYmFja3MiPkdzdFRhc2tUaHJlYWRDYWxsYmFja3M8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPkdzdFRhc2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI0dTVC1UQVNLLUJST0FEQ0FTVDpDQVBTIiB0aXRsZT0iR1NUX1RBU0tfQlJPQURDQVNUKCkiPkdTVF9UQVNLX0JST0FEQ0FTVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj5Hc3RUYXNrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1jbGVhbnVwLWFsbCIgdGl0bGU9ImdzdF90YXNrX2NsZWFudXBfYWxsICgpIj5nc3RfdGFza19jbGVhbnVwX2FsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj5Hc3RUYXNrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1jcmVhdGUiIHRpdGxlPSJnc3RfdGFza19jcmVhdGUgKCkiPmdzdF90YXNrX2NyZWF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj5Hc3RUYXNrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNHU1QtVEFTSy1HRVQtQ09ORDpDQVBTIiB0aXRsZT0iR1NUX1RBU0tfR0VUX0NPTkQoKSI+R1NUX1RBU0tfR0VUX0NPTkQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+R3N0VGFzazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjR1NULVRBU0stR0VULUxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9UQVNLX0dFVF9MT0NLKCkiPkdTVF9UQVNLX0dFVF9MT0NLPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPkdzdFRhc2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLWdldC1wb29sIiB0aXRsZT0iZ3N0X3Rhc2tfZ2V0X3Bvb2wgKCkiPmdzdF90YXNrX2dldF9wb29sPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPkdzdFRhc2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLWdldC1zdGF0ZSIgdGl0bGU9ImdzdF90YXNrX2dldF9zdGF0ZSAoKSI+Z3N0X3Rhc2tfZ2V0X3N0YXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPkdzdFRhc2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLWpvaW4iIHRpdGxlPSJnc3RfdGFza19qb2luICgpIj5nc3RfdGFza19qb2luPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPkdzdFRhc2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLXBhdXNlIiB0aXRsZT0iZ3N0X3Rhc2tfcGF1c2UgKCkiPmdzdF90YXNrX3BhdXNlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPkdzdFRhc2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCNnc3QtdGFzay1wb29sLWNsZWFudXAiIHRpdGxlPSJnc3RfdGFza19wb29sX2NsZWFudXAgKCkiPmdzdF90YXNrX3Bvb2xfY2xlYW51cDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sIiB0aXRsZT0iR3N0VGFza1Bvb2wiPkdzdFRhc2tQb29sPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwjZ3N0LXRhc2stcG9vbC1qb2luIiB0aXRsZT0iZ3N0X3Rhc2tfcG9vbF9qb2luICgpIj5nc3RfdGFza19wb29sX2pvaW48L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCIgdGl0bGU9IkdzdFRhc2tQb29sIj5Hc3RUYXNrUG9vbDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sI2dzdC10YXNrLXBvb2wtbmV3IiB0aXRsZT0iZ3N0X3Rhc2tfcG9vbF9uZXcgKCkiPmdzdF90YXNrX3Bvb2xfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwiIHRpdGxlPSJHc3RUYXNrUG9vbCI+R3N0VGFza1Bvb2w8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCNnc3QtdGFzay1wb29sLXByZXBhcmUiIHRpdGxlPSJnc3RfdGFza19wb29sX3ByZXBhcmUgKCkiPmdzdF90YXNrX3Bvb2xfcHJlcGFyZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sIiB0aXRsZT0iR3N0VGFza1Bvb2wiPkdzdFRhc2tQb29sPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwjZ3N0LXRhc2stcG9vbC1wdXNoIiB0aXRsZT0iZ3N0X3Rhc2tfcG9vbF9wdXNoICgpIj5nc3RfdGFza19wb29sX3B1c2g8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCIgdGl0bGU9IkdzdFRhc2tQb29sIj5Hc3RUYXNrUG9vbDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stc2V0LWxvY2siIHRpdGxlPSJnc3RfdGFza19zZXRfbG9jayAoKSI+Z3N0X3Rhc2tfc2V0X2xvY2s8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+R3N0VGFzazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stc2V0LXBvb2wiIHRpdGxlPSJnc3RfdGFza19zZXRfcG9vbCAoKSI+Z3N0X3Rhc2tfc2V0X3Bvb2w8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+R3N0VGFzazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stc2V0LXByaW9yaXR5IiB0aXRsZT0iZ3N0X3Rhc2tfc2V0X3ByaW9yaXR5ICgpIj5nc3RfdGFza19zZXRfcHJpb3JpdHk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+R3N0VGFzazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stc2V0LXN0YXRlIiB0aXRsZT0iZ3N0X3Rhc2tfc2V0X3N0YXRlICgpIj5nc3RfdGFza19zZXRfc3RhdGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+R3N0VGFzazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stc2V0LXRocmVhZC1jYWxsYmFja3MiIHRpdGxlPSJnc3RfdGFza19zZXRfdGhyZWFkX2NhbGxiYWNrcyAoKSI+Z3N0X3Rhc2tfc2V0X3RocmVhZF9jYWxsYmFja3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+R3N0VGFzazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjR1NULVRBU0stU0lHTkFMOkNBUFMiIHRpdGxlPSJHU1RfVEFTS19TSUdOQUwoKSI+R1NUX1RBU0tfU0lHTkFMPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPkdzdFRhc2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLXN0YXJ0IiB0aXRsZT0iZ3N0X3Rhc2tfc3RhcnQgKCkiPmdzdF90YXNrX3N0YXJ0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPkdzdFRhc2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI0dTVC1UQVNLLVNUQVRFOkNBUFMiIHRpdGxlPSJHU1RfVEFTS19TVEFURSgpIj5HU1RfVEFTS19TVEFURTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj5Hc3RUYXNrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1zdG9wIiB0aXRsZT0iZ3N0X3Rhc2tfc3RvcCAoKSI+Z3N0X3Rhc2tfc3RvcDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj5Hc3RUYXNrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNHU1QtVEFTSy1XQUlUOkNBUFMiIHRpdGxlPSJHU1RfVEFTS19XQUlUKCkiPkdTVF9UQVNLX1dBSVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+R3N0VGFzazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1USU1FU1BFQy1UTy1USU1FOkNBUFMiIHRpdGxlPSJHU1RfVElNRVNQRUNfVE9fVElNRSgpIj5HU1RfVElNRVNQRUNfVE9fVElNRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULVRJTUVWQUwtVE8tVElNRTpDQVBTIiB0aXRsZT0iR1NUX1RJTUVWQUxfVE9fVElNRSgpIj5HU1RfVElNRVZBTF9UT19USU1FPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtVElNRS1BUkdTOkNBUFMiIHRpdGxlPSJHU1RfVElNRV9BUkdTKCkiPkdTVF9USU1FX0FSR1M8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtVElNRS1BUy1NU0VDT05EUzpDQVBTIiB0aXRsZT0iR1NUX1RJTUVfQVNfTVNFQ09ORFMoKSI+R1NUX1RJTUVfQVNfTVNFQ09ORFM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1USU1FLUFTLU5TRUNPTkRTOkNBUFMiIHRpdGxlPSJHU1RfVElNRV9BU19OU0VDT05EUygpIj5HU1RfVElNRV9BU19OU0VDT05EUzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULVRJTUUtQVMtU0VDT05EUzpDQVBTIiB0aXRsZT0iR1NUX1RJTUVfQVNfU0VDT05EUygpIj5HU1RfVElNRV9BU19TRUNPTkRTPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtVElNRS1BUy1VU0VDT05EUzpDQVBTIiB0aXRsZT0iR1NUX1RJTUVfQVNfVVNFQ09ORFMoKSI+R1NUX1RJTUVfQVNfVVNFQ09ORFM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1USU1FLUZPUk1BVDpDQVBTIiB0aXRsZT0iR1NUX1RJTUVfRk9STUFUIj5HU1RfVElNRV9GT1JNQVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtVElNRS1UTy1USU1FU1BFQzpDQVBTIiB0aXRsZT0iR1NUX1RJTUVfVE9fVElNRVNQRUMoKSI+R1NUX1RJTUVfVE9fVElNRVNQRUM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1USU1FLVRPLVRJTUVWQUw6Q0FQUyIgdGl0bGU9IkdTVF9USU1FX1RPX1RJTUVWQUwoKSI+R1NUX1RJTUVfVE9fVElNRVZBTDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULVRSQUNFOkNBUFMiIHRpdGxlPSJHU1RfVFJBQ0UoKSI+R1NUX1RSQUNFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI0dzdFRyYWNlIiB0aXRsZT0ic3RydWN0IEdzdFRyYWNlIj5Hc3RUcmFjZTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwiIHRpdGxlPSJHc3RUcmFjZSI+R3N0VHJhY2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LXRyYWNlLWFkZC1lbnRyeSIgdGl0bGU9ImdzdF90cmFjZV9hZGRfZW50cnkoKSI+Z3N0X3RyYWNlX2FkZF9lbnRyeTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCIgdGl0bGU9IkdzdFRyYWNlIj5Hc3RUcmFjZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtdHJhY2UtZGVzdHJveSIgdGl0bGU9ImdzdF90cmFjZV9kZXN0cm95ICgpIj5nc3RfdHJhY2VfZGVzdHJveTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCIgdGl0bGU9IkdzdFRyYWNlIj5Hc3RUcmFjZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtdHJhY2UtZmx1c2giIHRpdGxlPSJnc3RfdHJhY2VfZmx1c2ggKCkiPmdzdF90cmFjZV9mbHVzaDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCIgdGl0bGU9IkdzdFRyYWNlIj5Hc3RUcmFjZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtdHJhY2UtZ2V0LW9mZnNldCIgdGl0bGU9ImdzdF90cmFjZV9nZXRfb2Zmc2V0KCkiPmdzdF90cmFjZV9nZXRfb2Zmc2V0PC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sIiB0aXRsZT0iR3N0VHJhY2UiPkdzdFRyYWNlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI2dzdC10cmFjZS1nZXQtcmVtYWluaW5nIiB0aXRsZT0iZ3N0X3RyYWNlX2dldF9yZW1haW5pbmcoKSI+Z3N0X3RyYWNlX2dldF9yZW1haW5pbmc8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwiIHRpdGxlPSJHc3RUcmFjZSI+R3N0VHJhY2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LXRyYWNlLWdldC1zaXplIiB0aXRsZT0iZ3N0X3RyYWNlX2dldF9zaXplKCkiPmdzdF90cmFjZV9nZXRfc2l6ZTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCIgdGl0bGU9IkdzdFRyYWNlIj5Hc3RUcmFjZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtdHJhY2UtbmV3IiB0aXRsZT0iZ3N0X3RyYWNlX25ldyAoKSI+Z3N0X3RyYWNlX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCIgdGl0bGU9IkdzdFRyYWNlIj5Hc3RUcmFjZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1UUkFDRS1PQkpFQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9UUkFDRV9PQkpFQ1QoKSI+R1NUX1RSQUNFX09CSkVDVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtdHJhY2UtcmVhZC10c2MiIHRpdGxlPSJnc3RfdHJhY2VfcmVhZF90c2MgKCkiPmdzdF90cmFjZV9yZWFkX3RzYzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCIgdGl0bGU9IkdzdFRyYWNlIj5Hc3RUcmFjZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtdHJhY2Utc2V0LWRlZmF1bHQiIHRpdGxlPSJnc3RfdHJhY2Vfc2V0X2RlZmF1bHQgKCkiPmdzdF90cmFjZV9zZXRfZGVmYXVsdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCIgdGl0bGU9IkdzdFRyYWNlIj5Hc3RUcmFjZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtdHJhY2UtdGV4dC1mbHVzaCIgdGl0bGU9ImdzdF90cmFjZV90ZXh0X2ZsdXNoICgpIj5nc3RfdHJhY2VfdGV4dF9mbHVzaDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCIgdGl0bGU9IkdzdFRyYWNlIj5Hc3RUcmFjZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZCIgdGl0bGU9InN0cnVjdCBHc3RUeXBlRmluZCI+R3N0VHlwZUZpbmQ8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sIiB0aXRsZT0iR3N0VHlwZUZpbmQiPkdzdFR5cGVGaW5kPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sI0dzdFR5cGVGaW5kRmFjdG9yeS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0VHlwZUZpbmRGYWN0b3J5Ij5Hc3RUeXBlRmluZEZhY3Rvcnk8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0VHlwZUZpbmRGYWN0b3J5Ij5Hc3RUeXBlRmluZEZhY3Rvcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmRGdW5jdGlvbiIgdGl0bGU9IkdzdFR5cGVGaW5kRnVuY3Rpb24gKCkiPkdzdFR5cGVGaW5kRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kIj5Hc3RUeXBlRmluZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZFByb2JhYmlsaXR5IiB0aXRsZT0iZW51bSBHc3RUeXBlRmluZFByb2JhYmlsaXR5Ij5Hc3RUeXBlRmluZFByb2JhYmlsaXR5PC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwiIHRpdGxlPSJHc3RUeXBlRmluZCI+R3N0VHlwZUZpbmQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI0dzdFR5cGVOYW1lRGF0YSIgdGl0bGU9IkdzdFR5cGVOYW1lRGF0YSI+R3N0VHlwZU5hbWVEYXRhPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj5Hc3RQbHVnaW5GZWF0dXJlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUFSUkFZOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9BUlJBWSI+R1NUX1RZUEVfQVJSQVk8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtREFURTpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfREFURSI+R1NUX1RZUEVfREFURTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHU1QtVFlQRS1EQVRFLVRJTUU6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0RBVEVfVElNRSI+R1NUX1RZUEVfREFURV9USU1FPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPkdzdERhdGVUaW1lPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLURPVUJMRS1SQU5HRTpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfRE9VQkxFX1JBTkdFIj5HU1RfVFlQRV9ET1VCTEVfUkFOR0U8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHlwZUZpbmRGYWN0b3J5Lmh0bWwjZ3N0LXR5cGUtZmluZC1mYWN0b3J5LWNhbGwtZnVuY3Rpb24iIHRpdGxlPSJnc3RfdHlwZV9maW5kX2ZhY3RvcnlfY2FsbF9mdW5jdGlvbiAoKSI+Z3N0X3R5cGVfZmluZF9mYWN0b3J5X2NhbGxfZnVuY3Rpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHlwZUZpbmRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RUeXBlRmluZEZhY3RvcnkiPkdzdFR5cGVGaW5kRmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCNnc3QtdHlwZS1maW5kLWZhY3RvcnktZ2V0LWNhcHMiIHRpdGxlPSJnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2NhcHMgKCkiPmdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfY2FwczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kRmFjdG9yeSI+R3N0VHlwZUZpbmRGYWN0b3J5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sI2dzdC10eXBlLWZpbmQtZmFjdG9yeS1nZXQtZXh0ZW5zaW9ucyIgdGl0bGU9ImdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfZXh0ZW5zaW9ucyAoKSI+Z3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9leHRlbnNpb25zPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0VHlwZUZpbmRGYWN0b3J5Ij5Hc3RUeXBlRmluZEZhY3Rvcnk8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHlwZUZpbmRGYWN0b3J5Lmh0bWwjZ3N0LXR5cGUtZmluZC1mYWN0b3J5LWdldC1saXN0IiB0aXRsZT0iZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9saXN0ICgpIj5nc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2xpc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHlwZUZpbmRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RUeXBlRmluZEZhY3RvcnkiPkdzdFR5cGVGaW5kRmFjdG9yeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNnc3QtdHlwZS1maW5kLWdldC1sZW5ndGgiIHRpdGxlPSJnc3RfdHlwZV9maW5kX2dldF9sZW5ndGggKCkiPmdzdF90eXBlX2ZpbmRfZ2V0X2xlbmd0aDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kIj5Hc3RUeXBlRmluZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNnc3QtdHlwZS1maW5kLXBlZWsiIHRpdGxlPSJnc3RfdHlwZV9maW5kX3BlZWsgKCkiPmdzdF90eXBlX2ZpbmRfcGVlazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kIj5Hc3RUeXBlRmluZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNnc3QtdHlwZS1maW5kLXJlZ2lzdGVyIiB0aXRsZT0iZ3N0X3R5cGVfZmluZF9yZWdpc3RlciAoKSI+Z3N0X3R5cGVfZmluZF9yZWdpc3RlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kIj5Hc3RUeXBlRmluZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNnc3QtdHlwZS1maW5kLXN1Z2dlc3QiIHRpdGxlPSJnc3RfdHlwZV9maW5kX3N1Z2dlc3QgKCkiPmdzdF90eXBlX2ZpbmRfc3VnZ2VzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kIj5Hc3RUeXBlRmluZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNnc3QtdHlwZS1maW5kLXN1Z2dlc3Qtc2ltcGxlIiB0aXRsZT0iZ3N0X3R5cGVfZmluZF9zdWdnZXN0X3NpbXBsZSAoKSI+Z3N0X3R5cGVfZmluZF9zdWdnZXN0X3NpbXBsZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kIj5Hc3RUeXBlRmluZDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1GUkFDVElPTjpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfRlJBQ1RJT04iPkdTVF9UWVBFX0ZSQUNUSU9OPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUZSQUNUSU9OLVJBTkdFOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSI+R1NUX1RZUEVfRlJBQ1RJT05fUkFOR0U8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtSU5UNjQtUkFOR0U6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0lOVDY0X1JBTkdFIj5HU1RfVFlQRV9JTlQ2NF9SQU5HRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1JTlQtUkFOR0U6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0lOVF9SQU5HRSI+R1NUX1RZUEVfSU5UX1JBTkdFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUxJU1Q6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0xJU1QiPkdTVF9UWVBFX0xJU1Q8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXR5cGUtcmVnaXN0ZXItc3RhdGljLWZ1bGwiIHRpdGxlPSJnc3RfdHlwZV9yZWdpc3Rlcl9zdGF0aWNfZnVsbCAoKSI+Z3N0X3R5cGVfcmVnaXN0ZXJfc3RhdGljX2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8YSBuYW1lPSJpZHhVIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+VTwvaDM+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC11cGRhdGUtcmVnaXN0cnkiIHRpdGxlPSJnc3RfdXBkYXRlX3JlZ2lzdHJ5ICgpIj5nc3RfdXBkYXRlX3JlZ2lzdHJ5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCIgdGl0bGU9IkdzdCI+R3N0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJSGFuZGxlci1zdHJ1Y3QiIHRpdGxlPSJHc3RVUklIYW5kbGVyIj5Hc3RVUklIYW5kbGVyPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sIiB0aXRsZT0iR3N0VXJpSGFuZGxlciI+R3N0VXJpSGFuZGxlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSUhhbmRsZXItbmV3LXVyaSIgdGl0bGU9J1RoZSAibmV3LXVyaSIgc2lnbmFsJz5Hc3RVUklIYW5kbGVyOjpuZXctdXJpPC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCIgdGl0bGU9IkdzdFVyaUhhbmRsZXIiPkdzdFVyaUhhbmRsZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklIYW5kbGVySW50ZXJmYWNlIiB0aXRsZT0ic3RydWN0IEdzdFVSSUhhbmRsZXJJbnRlcmZhY2UiPkdzdFVSSUhhbmRsZXJJbnRlcmZhY2U8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwiIHRpdGxlPSJHc3RVcmlIYW5kbGVyIj5Hc3RVcmlIYW5kbGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJVHlwZSIgdGl0bGU9ImVudW0gR3N0VVJJVHlwZSI+R3N0VVJJVHlwZTwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwiIHRpdGxlPSJHc3RVcmlIYW5kbGVyIj5Hc3RVcmlIYW5kbGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1jb25zdHJ1Y3QiIHRpdGxlPSJnc3RfdXJpX2NvbnN0cnVjdCAoKSI+Z3N0X3VyaV9jb25zdHJ1Y3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCIgdGl0bGU9IkdzdFVyaUhhbmRsZXIiPkdzdFVyaUhhbmRsZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLWdldC1sb2NhdGlvbiIgdGl0bGU9ImdzdF91cmlfZ2V0X2xvY2F0aW9uICgpIj5nc3RfdXJpX2dldF9sb2NhdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sIiB0aXRsZT0iR3N0VXJpSGFuZGxlciI+R3N0VXJpSGFuZGxlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC11cmktZ2V0LXByb3RvY29sIiB0aXRsZT0iZ3N0X3VyaV9nZXRfcHJvdG9jb2wgKCkiPmdzdF91cmlfZ2V0X3Byb3RvY29sPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwiIHRpdGxlPSJHc3RVcmlIYW5kbGVyIj5Hc3RVcmlIYW5kbGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1oYW5kbGVyLWdldC1wcm90b2NvbHMiIHRpdGxlPSJnc3RfdXJpX2hhbmRsZXJfZ2V0X3Byb3RvY29scyAoKSI+Z3N0X3VyaV9oYW5kbGVyX2dldF9wcm90b2NvbHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCIgdGl0bGU9IkdzdFVyaUhhbmRsZXIiPkdzdFVyaUhhbmRsZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLWhhbmRsZXItZ2V0LXVyaSIgdGl0bGU9ImdzdF91cmlfaGFuZGxlcl9nZXRfdXJpICgpIj5nc3RfdXJpX2hhbmRsZXJfZ2V0X3VyaTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sIiB0aXRsZT0iR3N0VXJpSGFuZGxlciI+R3N0VXJpSGFuZGxlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC11cmktaGFuZGxlci1nZXQtdXJpLXR5cGUiIHRpdGxlPSJnc3RfdXJpX2hhbmRsZXJfZ2V0X3VyaV90eXBlICgpIj5nc3RfdXJpX2hhbmRsZXJfZ2V0X3VyaV90eXBlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwiIHRpdGxlPSJHc3RVcmlIYW5kbGVyIj5Hc3RVcmlIYW5kbGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1oYW5kbGVyLW5ldy11cmkiIHRpdGxlPSJnc3RfdXJpX2hhbmRsZXJfbmV3X3VyaSAoKSI+Z3N0X3VyaV9oYW5kbGVyX25ld191cmk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCIgdGl0bGU9IkdzdFVyaUhhbmRsZXIiPkdzdFVyaUhhbmRsZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLWhhbmRsZXItc2V0LXVyaSIgdGl0bGU9ImdzdF91cmlfaGFuZGxlcl9zZXRfdXJpICgpIj5nc3RfdXJpX2hhbmRsZXJfc2V0X3VyaTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sIiB0aXRsZT0iR3N0VXJpSGFuZGxlciI+R3N0VXJpSGFuZGxlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC11cmktaGFzLXByb3RvY29sIiB0aXRsZT0iZ3N0X3VyaV9oYXNfcHJvdG9jb2wgKCkiPmdzdF91cmlfaGFzX3Byb3RvY29sPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwiIHRpdGxlPSJHc3RVcmlIYW5kbGVyIj5Hc3RVcmlIYW5kbGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1pcy12YWxpZCIgdGl0bGU9ImdzdF91cmlfaXNfdmFsaWQgKCkiPmdzdF91cmlfaXNfdmFsaWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCIgdGl0bGU9IkdzdFVyaUhhbmRsZXIiPkdzdFVyaUhhbmRsZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLXByb3RvY29sLWlzLXN1cHBvcnRlZCIgdGl0bGU9ImdzdF91cmlfcHJvdG9jb2xfaXNfc3VwcG9ydGVkICgpIj5nc3RfdXJpX3Byb3RvY29sX2lzX3N1cHBvcnRlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sIiB0aXRsZT0iR3N0VXJpSGFuZGxlciI+R3N0VXJpSGFuZGxlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC11cmktcHJvdG9jb2wtaXMtdmFsaWQiIHRpdGxlPSJnc3RfdXJpX3Byb3RvY29sX2lzX3ZhbGlkICgpIj5nc3RfdXJpX3Byb3RvY29sX2lzX3ZhbGlkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwiIHRpdGxlPSJHc3RVcmlIYW5kbGVyIj5Hc3RVcmlIYW5kbGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR1NULVVSSS1UWVBFLUlTLVZBTElEOkNBUFMiIHRpdGxlPSJHU1RfVVJJX1RZUEVfSVNfVkFMSUQoKSI+R1NUX1VSSV9UWVBFX0lTX1ZBTElEPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwiIHRpdGxlPSJHc3RVcmlIYW5kbGVyIj5Hc3RVcmlIYW5kbGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULVVTRUNPTkQ6Q0FQUyIgdGl0bGU9IkdTVF9VU0VDT05EIj5HU1RfVVNFQ09ORDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWFycmF5LWJpbmFyeS1zZWFyY2giIHRpdGxlPSJnc3RfdXRpbF9hcnJheV9iaW5hcnlfc2VhcmNoICgpIj5nc3RfdXRpbF9hcnJheV9iaW5hcnlfc2VhcmNoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWRvdWJsZS10by1mcmFjdGlvbiIgdGl0bGU9ImdzdF91dGlsX2RvdWJsZV90b19mcmFjdGlvbiAoKSI+Z3N0X3V0aWxfZG91YmxlX3RvX2ZyYWN0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWR1bXAtbWVtIiB0aXRsZT0iZ3N0X3V0aWxfZHVtcF9tZW0gKCkiPmdzdF91dGlsX2R1bXBfbWVtPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWZyYWN0aW9uLWFkZCIgdGl0bGU9ImdzdF91dGlsX2ZyYWN0aW9uX2FkZCAoKSI+Z3N0X3V0aWxfZnJhY3Rpb25fYWRkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWZyYWN0aW9uLWNvbXBhcmUiIHRpdGxlPSJnc3RfdXRpbF9mcmFjdGlvbl9jb21wYXJlICgpIj5nc3RfdXRpbF9mcmFjdGlvbl9jb21wYXJlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWZyYWN0aW9uLW11bHRpcGx5IiB0aXRsZT0iZ3N0X3V0aWxfZnJhY3Rpb25fbXVsdGlwbHkgKCkiPmdzdF91dGlsX2ZyYWN0aW9uX211bHRpcGx5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWZyYWN0aW9uLXRvLWRvdWJsZSIgdGl0bGU9ImdzdF91dGlsX2ZyYWN0aW9uX3RvX2RvdWJsZSAoKSI+Z3N0X3V0aWxfZnJhY3Rpb25fdG9fZG91YmxlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWdldC10aW1lc3RhbXAiIHRpdGxlPSJnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpIj5nc3RfdXRpbF9nZXRfdGltZXN0YW1wPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWdyZWF0ZXN0LWNvbW1vbi1kaXZpc29yIiB0aXRsZT0iZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKCkiPmdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXNlcW51bS1jb21wYXJlIiB0aXRsZT0iZ3N0X3V0aWxfc2VxbnVtX2NvbXBhcmUgKCkiPmdzdF91dGlsX3NlcW51bV9jb21wYXJlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXNlcW51bS1uZXh0IiB0aXRsZT0iZ3N0X3V0aWxfc2VxbnVtX25leHQgKCkiPmdzdF91dGlsX3NlcW51bV9uZXh0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXNldC1vYmplY3QtYXJnIiB0aXRsZT0iZ3N0X3V0aWxfc2V0X29iamVjdF9hcmcgKCkiPmdzdF91dGlsX3NldF9vYmplY3RfYXJnPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXNldC12YWx1ZS1mcm9tLXN0cmluZyIgdGl0bGU9ImdzdF91dGlsX3NldF92YWx1ZV9mcm9tX3N0cmluZyAoKSI+Z3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZSIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoKSI+Z3N0X3V0aWxfdWludDY0X3NjYWxlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1jZWlsIiB0aXRsZT0iZ3N0X3V0aWxfdWludDY0X3NjYWxlX2NlaWwgKCkiPmdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1pbnQiIHRpdGxlPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50ICgpIj5nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1pbnQtY2VpbCIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbCAoKSI+Z3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9jZWlsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1pbnQtcm91bmQiIHRpdGxlPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kICgpIj5nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1yb3VuZCIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCAoKSI+Z3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGEgbmFtZT0iaWR4ViI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPlY8L2gzPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dzdFZhbHVlQ29tcGFyZUZ1bmMiIHRpdGxlPSJHc3RWYWx1ZUNvbXBhcmVGdW5jICgpIj5Hc3RWYWx1ZUNvbXBhcmVGdW5jPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR3N0VmFsdWVEZXNlcmlhbGl6ZUZ1bmMiIHRpdGxlPSJHc3RWYWx1ZURlc2VyaWFsaXplRnVuYyAoKSI+R3N0VmFsdWVEZXNlcmlhbGl6ZUZ1bmM8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHc3RWYWx1ZUludGVyc2VjdEZ1bmMiIHRpdGxlPSJHc3RWYWx1ZUludGVyc2VjdEZ1bmMgKCkiPkdzdFZhbHVlSW50ZXJzZWN0RnVuYzwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dzdFZhbHVlU2VyaWFsaXplRnVuYyIgdGl0bGU9IkdzdFZhbHVlU2VyaWFsaXplRnVuYyAoKSI+R3N0VmFsdWVTZXJpYWxpemVGdW5jPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR3N0VmFsdWVTdWJ0cmFjdEZ1bmMiIHRpdGxlPSJHc3RWYWx1ZVN1YnRyYWN0RnVuYyAoKSI+R3N0VmFsdWVTdWJ0cmFjdEZ1bmM8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHc3RWYWx1ZVRhYmxlIiB0aXRsZT0ic3RydWN0IEdzdFZhbHVlVGFibGUiPkdzdFZhbHVlVGFibGU8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dzdFZhbHVlVW5pb25GdW5jIiB0aXRsZT0iR3N0VmFsdWVVbmlvbkZ1bmMgKCkiPkdzdFZhbHVlVW5pb25GdW5jPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWFycmF5LWFwcGVuZC12YWx1ZSIgdGl0bGU9ImdzdF92YWx1ZV9hcnJheV9hcHBlbmRfdmFsdWUgKCkiPmdzdF92YWx1ZV9hcnJheV9hcHBlbmRfdmFsdWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWFycmF5LWdldC1zaXplIiB0aXRsZT0iZ3N0X3ZhbHVlX2FycmF5X2dldF9zaXplICgpIj5nc3RfdmFsdWVfYXJyYXlfZ2V0X3NpemU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWFycmF5LWdldC12YWx1ZSIgdGl0bGU9ImdzdF92YWx1ZV9hcnJheV9nZXRfdmFsdWUgKCkiPmdzdF92YWx1ZV9hcnJheV9nZXRfdmFsdWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWFycmF5LXByZXBlbmQtdmFsdWUiIHRpdGxlPSJnc3RfdmFsdWVfYXJyYXlfcHJlcGVuZF92YWx1ZSAoKSI+Z3N0X3ZhbHVlX2FycmF5X3ByZXBlbmRfdmFsdWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWNhbi1jb21wYXJlIiB0aXRsZT0iZ3N0X3ZhbHVlX2Nhbl9jb21wYXJlICgpIj5nc3RfdmFsdWVfY2FuX2NvbXBhcmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWNhbi1pbnRlcnNlY3QiIHRpdGxlPSJnc3RfdmFsdWVfY2FuX2ludGVyc2VjdCAoKSI+Z3N0X3ZhbHVlX2Nhbl9pbnRlcnNlY3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWNhbi1zdWJ0cmFjdCIgdGl0bGU9ImdzdF92YWx1ZV9jYW5fc3VidHJhY3QgKCkiPmdzdF92YWx1ZV9jYW5fc3VidHJhY3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWNhbi11bmlvbiIgdGl0bGU9ImdzdF92YWx1ZV9jYW5fdW5pb24gKCkiPmdzdF92YWx1ZV9jYW5fdW5pb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWNvbXBhcmUiIHRpdGxlPSJnc3RfdmFsdWVfY29tcGFyZSAoKSI+Z3N0X3ZhbHVlX2NvbXBhcmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWRlc2VyaWFsaXplIiB0aXRsZT0iZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplICgpIj5nc3RfdmFsdWVfZGVzZXJpYWxpemU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUVRVUFMOkNBUFMiIHRpdGxlPSJHU1RfVkFMVUVfRVFVQUwiPkdTVF9WQUxVRV9FUVVBTDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZml4YXRlIiB0aXRsZT0iZ3N0X3ZhbHVlX2ZpeGF0ZSAoKSI+Z3N0X3ZhbHVlX2ZpeGF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZnJhY3Rpb24tbXVsdGlwbHkiIHRpdGxlPSJnc3RfdmFsdWVfZnJhY3Rpb25fbXVsdGlwbHkgKCkiPmdzdF92YWx1ZV9mcmFjdGlvbl9tdWx0aXBseTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZnJhY3Rpb24tc3VidHJhY3QiIHRpdGxlPSJnc3RfdmFsdWVfZnJhY3Rpb25fc3VidHJhY3QgKCkiPmdzdF92YWx1ZV9mcmFjdGlvbl9zdWJ0cmFjdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWJ1ZmZlciIgdGl0bGU9ImdzdF92YWx1ZV9nZXRfYnVmZmVyKCkiPmdzdF92YWx1ZV9nZXRfYnVmZmVyPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtY2FwcyIgdGl0bGU9ImdzdF92YWx1ZV9nZXRfY2FwcyAoKSI+Z3N0X3ZhbHVlX2dldF9jYXBzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtZGF0ZSIgdGl0bGU9ImdzdF92YWx1ZV9nZXRfZGF0ZSAoKSI+Z3N0X3ZhbHVlX2dldF9kYXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtZG91YmxlLXJhbmdlLW1heCIgdGl0bGU9ImdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21heCAoKSI+Z3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWF4PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtZG91YmxlLXJhbmdlLW1pbiIgdGl0bGU9ImdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21pbiAoKSI+Z3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWluPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtZnJhY3Rpb24tZGVub21pbmF0b3IiIHRpdGxlPSJnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX2Rlbm9taW5hdG9yICgpIj5nc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX2Rlbm9taW5hdG9yPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtZnJhY3Rpb24tbnVtZXJhdG9yIiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9udW1lcmF0b3IgKCkiPmdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fbnVtZXJhdG9yPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtZnJhY3Rpb24tcmFuZ2UtbWF4IiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9tYXggKCkiPmdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWF4PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtZnJhY3Rpb24tcmFuZ2UtbWluIiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9taW4gKCkiPmdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWluPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtaW50NjQtcmFuZ2UtbWF4IiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9tYXggKCkiPmdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWF4PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtaW50NjQtcmFuZ2UtbWluIiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9taW4gKCkiPmdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWluPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtaW50LXJhbmdlLW1heCIgdGl0bGU9ImdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heCAoKSI+Z3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWF4PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtaW50LXJhbmdlLW1pbiIgdGl0bGU9ImdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAoKSI+Z3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWluPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtc3RydWN0dXJlIiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9zdHJ1Y3R1cmUgKCkiPmdzdF92YWx1ZV9nZXRfc3RydWN0dXJlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1HUkVBVEVSLVRIQU46Q0FQUyIgdGl0bGU9IkdTVF9WQUxVRV9HUkVBVEVSX1RIQU4iPkdTVF9WQUxVRV9HUkVBVEVSX1RIQU48L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLUFSUkFZOkNBUFMiIHRpdGxlPSJHU1RfVkFMVUVfSE9MRFNfQVJSQVkoKSI+R1NUX1ZBTFVFX0hPTERTX0FSUkFZPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1CVUZGRVI6Q0FQUyIgdGl0bGU9IkdTVF9WQUxVRV9IT0xEU19CVUZGRVIoKSI+R1NUX1ZBTFVFX0hPTERTX0JVRkZFUjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtQ0FQUyIgdGl0bGU9IkdTVF9WQUxVRV9IT0xEU19DQVBTKCkiPkdTVF9WQUxVRV9IT0xEU19DQVBTPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1EQVRFOkNBUFMiIHRpdGxlPSJHU1RfVkFMVUVfSE9MRFNfREFURSgpIj5HU1RfVkFMVUVfSE9MRFNfREFURTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtREFURS1USU1FOkNBUFMiIHRpdGxlPSJHU1RfVkFMVUVfSE9MRFNfREFURV9USU1FKCkiPkdTVF9WQUxVRV9IT0xEU19EQVRFX1RJTUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLURPVUJMRS1SQU5HRTpDQVBTIiB0aXRsZT0iR1NUX1ZBTFVFX0hPTERTX0RPVUJMRV9SQU5HRSgpIj5HU1RfVkFMVUVfSE9MRFNfRE9VQkxFX1JBTkdFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1GUkFDVElPTjpDQVBTIiB0aXRsZT0iR1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OKCkiPkdTVF9WQUxVRV9IT0xEU19GUkFDVElPTjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtRlJBQ1RJT04tUkFOR0U6Q0FQUyIgdGl0bGU9IkdTVF9WQUxVRV9IT0xEU19GUkFDVElPTl9SQU5HRSgpIj5HU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT05fUkFOR0U8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLUlOVDY0LVJBTkdFOkNBUFMiIHRpdGxlPSJHU1RfVkFMVUVfSE9MRFNfSU5UNjRfUkFOR0UoKSI+R1NUX1ZBTFVFX0hPTERTX0lOVDY0X1JBTkdFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1JTlQtUkFOR0U6Q0FQUyIgdGl0bGU9IkdTVF9WQUxVRV9IT0xEU19JTlRfUkFOR0UoKSI+R1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtTElTVDpDQVBTIiB0aXRsZT0iR1NUX1ZBTFVFX0hPTERTX0xJU1QoKSI+R1NUX1ZBTFVFX0hPTERTX0xJU1Q8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLVNUUlVDVFVSRTpDQVBTIiB0aXRsZT0iR1NUX1ZBTFVFX0hPTERTX1NUUlVDVFVSRSgpIj5HU1RfVkFMVUVfSE9MRFNfU1RSVUNUVVJFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1pbml0LWFuZC1jb3B5IiB0aXRsZT0iZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKCkiPmdzdF92YWx1ZV9pbml0X2FuZF9jb3B5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1pbnRlcnNlY3QiIHRpdGxlPSJnc3RfdmFsdWVfaW50ZXJzZWN0ICgpIj5nc3RfdmFsdWVfaW50ZXJzZWN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1pcy1maXhlZCIgdGl0bGU9ImdzdF92YWx1ZV9pc19maXhlZCAoKSI+Z3N0X3ZhbHVlX2lzX2ZpeGVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1MRVNTLVRIQU46Q0FQUyIgdGl0bGU9IkdTVF9WQUxVRV9MRVNTX1RIQU4iPkdTVF9WQUxVRV9MRVNTX1RIQU48L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWxpc3QtYXBwZW5kLXZhbHVlIiB0aXRsZT0iZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlICgpIj5nc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWxpc3QtY29uY2F0IiB0aXRsZT0iZ3N0X3ZhbHVlX2xpc3RfY29uY2F0ICgpIj5nc3RfdmFsdWVfbGlzdF9jb25jYXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWxpc3QtZ2V0LXNpemUiIHRpdGxlPSJnc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZSAoKSI+Z3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWxpc3QtZ2V0LXZhbHVlIiB0aXRsZT0iZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlICgpIj5nc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWxpc3QtbWVyZ2UiIHRpdGxlPSJnc3RfdmFsdWVfbGlzdF9tZXJnZSAoKSI+Z3N0X3ZhbHVlX2xpc3RfbWVyZ2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWxpc3QtcHJlcGVuZC12YWx1ZSIgdGl0bGU9ImdzdF92YWx1ZV9saXN0X3ByZXBlbmRfdmFsdWUgKCkiPmdzdF92YWx1ZV9saXN0X3ByZXBlbmRfdmFsdWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXJlZ2lzdGVyIiB0aXRsZT0iZ3N0X3ZhbHVlX3JlZ2lzdGVyICgpIj5nc3RfdmFsdWVfcmVnaXN0ZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXJlZ2lzdGVyLWludGVyc2VjdC1mdW5jIiB0aXRsZT0iZ3N0X3ZhbHVlX3JlZ2lzdGVyX2ludGVyc2VjdF9mdW5jICgpIj5nc3RfdmFsdWVfcmVnaXN0ZXJfaW50ZXJzZWN0X2Z1bmM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXJlZ2lzdGVyLXN1YnRyYWN0LWZ1bmMiIHRpdGxlPSJnc3RfdmFsdWVfcmVnaXN0ZXJfc3VidHJhY3RfZnVuYyAoKSI+Z3N0X3ZhbHVlX3JlZ2lzdGVyX3N1YnRyYWN0X2Z1bmM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXJlZ2lzdGVyLXVuaW9uLWZ1bmMiIHRpdGxlPSJnc3RfdmFsdWVfcmVnaXN0ZXJfdW5pb25fZnVuYyAoKSI+Z3N0X3ZhbHVlX3JlZ2lzdGVyX3VuaW9uX2Z1bmM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXNlcmlhbGl6ZSIgdGl0bGU9ImdzdF92YWx1ZV9zZXJpYWxpemUgKCkiPmdzdF92YWx1ZV9zZXJpYWxpemU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXNldC1idWZmZXIiIHRpdGxlPSJnc3RfdmFsdWVfc2V0X2J1ZmZlcigpIj5nc3RfdmFsdWVfc2V0X2J1ZmZlcjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWNhcHMiIHRpdGxlPSJnc3RfdmFsdWVfc2V0X2NhcHMgKCkiPmdzdF92YWx1ZV9zZXRfY2FwczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWRhdGUiIHRpdGxlPSJnc3RfdmFsdWVfc2V0X2RhdGUgKCkiPmdzdF92YWx1ZV9zZXRfZGF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWRvdWJsZS1yYW5nZSIgdGl0bGU9ImdzdF92YWx1ZV9zZXRfZG91YmxlX3JhbmdlICgpIj5nc3RfdmFsdWVfc2V0X2RvdWJsZV9yYW5nZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWZyYWN0aW9uIiB0aXRsZT0iZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoKSI+Z3N0X3ZhbHVlX3NldF9mcmFjdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWZyYWN0aW9uLXJhbmdlIiB0aXRsZT0iZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZSAoKSI+Z3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWZyYWN0aW9uLXJhbmdlLWZ1bGwiIHRpdGxlPSJnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlX2Z1bGwgKCkiPmdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2VfZnVsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWludDY0LXJhbmdlIiB0aXRsZT0iZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZSAoKSI+Z3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWludC1yYW5nZSIgdGl0bGU9ImdzdF92YWx1ZV9zZXRfaW50X3JhbmdlICgpIj5nc3RfdmFsdWVfc2V0X2ludF9yYW5nZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LXN0cnVjdHVyZSIgdGl0bGU9ImdzdF92YWx1ZV9zZXRfc3RydWN0dXJlICgpIj5nc3RfdmFsdWVfc2V0X3N0cnVjdHVyZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc3VidHJhY3QiIHRpdGxlPSJnc3RfdmFsdWVfc3VidHJhY3QgKCkiPmdzdF92YWx1ZV9zdWJ0cmFjdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtdGFrZS1idWZmZXIiIHRpdGxlPSJnc3RfdmFsdWVfdGFrZV9idWZmZXIoKSI+Z3N0X3ZhbHVlX3Rha2VfYnVmZmVyPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS11bmlvbiIgdGl0bGU9ImdzdF92YWx1ZV91bmlvbiAoKSI+Z3N0X3ZhbHVlX3VuaW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1VTk9SREVSRUQ6Q0FQUyIgdGl0bGU9IkdTVF9WQUxVRV9VTk9SREVSRUQiPkdTVF9WQUxVRV9VTk9SREVSRUQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC12ZXJzaW9uIiB0aXRsZT0iZ3N0X3ZlcnNpb24gKCkiPmdzdF92ZXJzaW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCIgdGl0bGU9IkdzdCI+R3N0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWZXJzaW9uLmh0bWwjR1NULVZFUlNJT04tTUFKT1I6Q0FQUyIgdGl0bGU9IkdTVF9WRVJTSU9OX01BSk9SIj5HU1RfVkVSU0lPTl9NQUpPUjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sIiB0aXRsZT0iR3N0VmVyc2lvbiI+R3N0VmVyc2lvbjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sI0dTVC1WRVJTSU9OLU1JQ1JPOkNBUFMiIHRpdGxlPSJHU1RfVkVSU0lPTl9NSUNSTyI+R1NUX1ZFUlNJT05fTUlDUk88L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZlcnNpb24uaHRtbCIgdGl0bGU9IkdzdFZlcnNpb24iPkdzdFZlcnNpb248L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZlcnNpb24uaHRtbCNHU1QtVkVSU0lPTi1NSU5PUjpDQVBTIiB0aXRsZT0iR1NUX1ZFUlNJT05fTUlOT1IiPkdTVF9WRVJTSU9OX01JTk9SPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWZXJzaW9uLmh0bWwiIHRpdGxlPSJHc3RWZXJzaW9uIj5Hc3RWZXJzaW9uPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWZXJzaW9uLmh0bWwjR1NULVZFUlNJT04tTkFOTzpDQVBTIiB0aXRsZT0iR1NUX1ZFUlNJT05fTkFOTyI+R1NUX1ZFUlNJT05fTkFOTzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sIiB0aXRsZT0iR3N0VmVyc2lvbiI+R3N0VmVyc2lvbjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LXZlcnNpb24tc3RyaW5nIiB0aXRsZT0iZ3N0X3ZlcnNpb25fc3RyaW5nICgpIj5nc3RfdmVyc2lvbl9zdHJpbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sIiB0aXRsZT0iR3N0Ij5Hc3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8YSBuYW1lPSJpZHhXIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+VzwvaDM+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtV0FSTklORzpDQVBTIiB0aXRsZT0iR1NUX1dBUk5JTkcoKSI+R1NUX1dBUk5JTkc8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtV0FSTklORy1PQkpFQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9XQVJOSU5HX09CSkVDVCgpIj5HU1RfV0FSTklOR19PQkpFQ1Q8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLURPVUJMRS1CRTpDQVBTIiB0aXRsZT0iR1NUX1dSSVRFX0RPVUJMRV9CRSAoKSI+R1NUX1dSSVRFX0RPVUJMRV9CRTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtV1JJVEUtRE9VQkxFLUxFOkNBUFMiIHRpdGxlPSJHU1RfV1JJVEVfRE9VQkxFX0xFICgpIj5HU1RfV1JJVEVfRE9VQkxFX0xFPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1GTE9BVC1CRTpDQVBTIiB0aXRsZT0iR1NUX1dSSVRFX0ZMT0FUX0JFICgpIj5HU1RfV1JJVEVfRkxPQVRfQkU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLUZMT0FULUxFOkNBUFMiIHRpdGxlPSJHU1RfV1JJVEVfRkxPQVRfTEUgKCkiPkdTVF9XUklURV9GTE9BVF9MRTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtV1JJVEUtVUlOVDE2LUJFOkNBUFMiIHRpdGxlPSJHU1RfV1JJVEVfVUlOVDE2X0JFKCkiPkdTVF9XUklURV9VSU5UMTZfQkU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLVVJTlQxNi1MRTpDQVBTIiB0aXRsZT0iR1NUX1dSSVRFX1VJTlQxNl9MRSgpIj5HU1RfV1JJVEVfVUlOVDE2X0xFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1VSU5UMjQtQkU6Q0FQUyIgdGl0bGU9IkdTVF9XUklURV9VSU5UMjRfQkUoKSI+R1NUX1dSSVRFX1VJTlQyNF9CRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtV1JJVEUtVUlOVDI0LUxFOkNBUFMiIHRpdGxlPSJHU1RfV1JJVEVfVUlOVDI0X0xFKCkiPkdTVF9XUklURV9VSU5UMjRfTEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLVVJTlQzMi1CRTpDQVBTIiB0aXRsZT0iR1NUX1dSSVRFX1VJTlQzMl9CRSgpIj5HU1RfV1JJVEVfVUlOVDMyX0JFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1VSU5UMzItTEU6Q0FQUyIgdGl0bGU9IkdTVF9XUklURV9VSU5UMzJfTEUoKSI+R1NUX1dSSVRFX1VJTlQzMl9MRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtV1JJVEUtVUlOVDY0LUJFOkNBUFMiIHRpdGxlPSJHU1RfV1JJVEVfVUlOVDY0X0JFKCkiPkdTVF9XUklURV9VSU5UNjRfQkU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLVVJTlQ2NC1MRTpDQVBTIiB0aXRsZT0iR1NUX1dSSVRFX1VJTlQ2NF9MRSgpIj5HU1RfV1JJVEVfVUlOVDY0X0xFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1VSU5UODpDQVBTIiB0aXRsZT0iR1NUX1dSSVRFX1VJTlQ4KCkiPkdTVF9XUklURV9VSU5UODwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvZ3N0LWJ1aWxkaW5nLmh0bWwgYi9kb2NzL2dzdC9odG1sL2dzdC1idWlsZGluZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMzFiZjYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dzdC9odG1sL2dzdC1idWlsZGluZy5odG1sCkBAIC0wLDAgKzEsMTA5IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+QnVpbGRpbmcgR1N0cmVhbWVyIGFuZCBHU3RyZWFtZXIgQXBwbGljYXRpb25zPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgT3ZlcnZpZXciPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBPdmVydmlldyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1ydW5uaW5nLmh0bWwiIHRpdGxlPSJSdW5uaW5nIEdTdHJlYW1lciBBcHBsaWNhdGlvbnMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPjx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXJ1bm5pbmcuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJnc3QtYnVpbGRpbmciPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5CdWlsZGluZyBHU3RyZWFtZXIgYW5kIEdTdHJlYW1lciBBcHBsaWNhdGlvbnM8L3NwYW4+PC9oMj4KKzxwPkJ1aWxkaW5nIEdTdHJlYW1lciBhbmQgR1N0cmVhbWVyIEFwcGxpY2F0aW9ucyDigJQgCitIb3cgdG8gYnVpbGQgdGhlIEdTdHJlYW1lciBmcmFtZXdvcmsgYW5kIGFwcGxpY2F0aW9ucyB1c2luZyBpdC4KKzwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImlkNDcwMzk0Ij48L2E+PGgyPkJ1aWxkaW5nIEdTdHJlYW1lciBvbiBVTklYPC9oMj4KKzxwPgorICAgIE9uIFVOSVgsIEdTdHJlYW1lciB1c2VzIHRoZSBzdGFuZGFyZCBHTlUgYnVpbGQgc3lzdGVtLAorICAgIHVzaW5nIDxzcGFuIGNsYXNzPSJhcHBsaWNhdGlvbiI+YXV0b2NvbmY8L3NwYW4+IGZvciBwYWNrYWdlCisgICAgY29uZmlndXJhdGlvbiBhbmQgcmVzb2x2aW5nIHBvcnRhYmlsaXR5IGlzc3VlcywKKyAgICA8c3BhbiBjbGFzcz0iYXBwbGljYXRpb24iPmF1dG9tYWtlPC9zcGFuPiBmb3IgYnVpbGRpbmcgbWFrZWZpbGVzCisgICAgdGhhdCBjb21wbHkgd2l0aCB0aGUgR05VIENvZGluZyBTdGFuZGFyZHMsIGFuZAorICAgIDxzcGFuIGNsYXNzPSJhcHBsaWNhdGlvbiI+bGlidG9vbDwvc3Bhbj4gZm9yIGJ1aWxkaW5nIHNoYXJlZAorICAgIGxpYnJhcmllcyBvbiBtdWx0aXBsZSBwbGF0Zm9ybXMuICBUaGUgbm9ybWFsIHNlcXVlbmNlIGZvcgorICAgIGNvbXBpbGluZyBhbmQgaW5zdGFsbGluZyB0aGUgR1N0cmVhbWVyIGxpYnJhcnkgaXMgdGh1czoKKworICAgIDwvcD4KKzxkaXYgY2xhc3M9ImxpdGVyYWxsYXlvdXQiPjxwPjxicj4KK8KgwqDCoMKgwqDCoDxzdHJvbmcgY2xhc3M9InVzZXJpbnB1dCI+PGNvZGU+Li9jb25maWd1cmU8L2NvZGU+PC9zdHJvbmc+PGJyPgorwqDCoMKgwqDCoMKgPHN0cm9uZyBjbGFzcz0idXNlcmlucHV0Ij48Y29kZT5tYWtlPC9jb2RlPjwvc3Ryb25nPjxicj4KK8KgwqDCoMKgwqDCoDxzdHJvbmcgY2xhc3M9InVzZXJpbnB1dCI+PGNvZGU+bWFrZcKgaW5zdGFsbDwvY29kZT48L3N0cm9uZz48YnI+CivCoMKgwqDCoDwvcD48L2Rpdj4KKzxwPgorICA8L3A+Cis8cD4KKyAgICBUaGUgc3RhbmRhcmQgb3B0aW9ucyBwcm92aWRlZCBieSA8c3BhbiBjbGFzcz0iYXBwbGljYXRpb24iPkdOVQorICAgIGF1dG9jb25mPC9zcGFuPiBtYXkgYmUgcGFzc2VkIHRvIHRoZQorICAgIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPmNvbmZpZ3VyZTwvc3Ryb25nPjwvc3Bhbj4gc2NyaXB0LiAgUGxlYXNlIHNlZSB0aGUKKyAgICA8c3BhbiBjbGFzcz0iYXBwbGljYXRpb24iPmF1dG9jb25mPC9zcGFuPiBkb2N1bWVudGF0aW9uIG9yIHJ1bgorICAgIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPi4vY29uZmlndXJlIC0taGVscDwvc3Ryb25nPjwvc3Bhbj4gZm9yIGluZm9ybWF0aW9uIGFib3V0CisgICAgdGhlIHN0YW5kYXJkIG9wdGlvbnMuCisgIDwvcD4KKzxwPgorICAgIEluIGFkZGl0aW9uIHRoZXJlIGFyZSBzZXZlcmFsIG9wdGlvbnMgdG8gYWN0aXZhdGUgb3IgZGVhY3RpdmF0ZSBmZWF0dXJlcy4KKyAgICBFLmcuIHBhc3NpbmcgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1kaXNhYmxlLWdzdC1kZWJ1ZzwvY29kZT4gdG8gPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+Y29uZmlndXJlPC9zdHJvbmc+PC9zcGFuPgorICAgIHdpbGwgdHVybiB0aGUgZGVidWdnaW5nIHN1YnN5c3RlbSBpbnRvIGEgbm9uLWZ1bmN0aW9uYWwgc3R1YiBhbmQgcmVtb3ZlIGFsbAorICAgIG1hY3JvIGJhc2VkIGludm9jYXRpb25zIGZyb20gd2l0aGluIHRoZSBsaWJyYXJ5IChhbmQgYW55dGhpbmcgY29tcGlsZWQKKyAgICBhZ2FpbnN0IHRoZSBsaWJyYXJ5IGFmdGVyd2FyZHMuKQorICA8L3A+Cis8cD4KKyAgICBJZiBsaWJyYXJ5IHNpemUgbWF0dGVycyBhbmQgb25lIGJ1aWxkcyBpbiBhIGNvbnRyb2xsZWQgZW52aXJvbm1lbnQsIGl0IGlzCisgICAgYWxzbyBwb3NzaWJsZSB0byB0b3RhbGx5IHJlbW92ZSBzdWJzeXN0ZW0gY29kZS4gVGhpcyBpcyBpbnRlbnRpb25hbGx5IG5vdAorICAgIG9mZmVyZWQgYXMgYSBjb25maWd1cmUgb3B0aW9uIGFzIGl0IGNhdXNlcyBhbiBBQkkgYnJlYWsuIENvZGUgYnVpbHQgYWdhaW5zdAorICAgIGEgdmVyc2lvbiBvZiBHU3RyZWFtZXIgd2l0aG91dCB0aGVzZSBtb2RpZmljYXRpb25zIG5lZWRzIHRvIGJlIHJlY29tcGlsZWQuCisKKyAgICA8L3A+Cis8ZGl2IGNsYXNzPSJsaXRlcmFsbGF5b3V0Ij48cD48YnI+CivCoMKgwqDCoMKgwqA8c3Ryb25nIGNsYXNzPSJ1c2VyaW5wdXQiPjxjb2RlPm1ha2XCoENGTEFHUz0iLURHU1RfUkVNT1ZFX0RFUFJFQ0FURUTCoC1ER1NUX1JFTU9WRV9ESVNBQkxFRCI8L2NvZGU+PC9zdHJvbmc+PGJyPgorwqDCoMKgwqA8L3A+PC9kaXY+Cis8cD4KKworICAgIDwvcD4KKzxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgICAgICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+R1NUX1JFTU9WRV9ERVBSRUNBVEVEPC9zcGFuPiAtIE9taXQgZGVwcmVjYXRlZCBmdW5jdGlvbnMKKyAgICAgICAgICBmcm9tIHRoZSBsaWJyYXJ5LgorICAgICAgICA8L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPkdTVF9SRU1PVkVfRElTQUJMRUQ8L3NwYW4+IC0gT21pdCBzdHVicyBmb3IgZGlzYWJsZWQKKyAgICAgICAgICBzdWJzeXN0ZW1zIGZyb20gdGhlIGxpYnJhcnkuCisgICAgICAgIDwvcD48L2xpPgorPC91bD48L2Rpdj4KKzxwPgorICA8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImlkNDU5NjYwIj48L2E+PGgyPkJ1aWxkaW5nIEdTdHJlYW1lciBBcHBsaWNhdGlvbnM8L2gyPgorPHA+CitBcHBsaWNhdGlvbnMgYW5kIGxpYnJhcmllcyBjYW4gdXNlIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPnBrZy1jb25maWc8L3N0cm9uZz48L3NwYW4+IHRvIGdldCBhbGwgdGhlCituZWVkZWQgY29tcGlsZXIgYW5kIGxpbmtlciBmbGFncyB0byBidWlsZCBhZ2FpbnN0IEdTdHJlYW1lci4gUGxlYXNlIG5vdGUgdGhhdAorR1N0cmVhbWVyIGlzIHNwbGl0IGludG8gc2V2ZXJhbCBsaWJyYXJpZXMgaXRzZWxmLgorPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+cGtnLWNvbmZpZyAtLWxpc3QtYWxsIHwgZ3JlcCBnc3RyZWFtZXI8L3N0cm9uZz48L3NwYW4+IHdpbGwgbGlzdCB0aGUKK2F2YWlsYWJsZSBsaWJyYXJpZXMuCis8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvZ3N0LXJ1bm5pbmcuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvZ3N0LXJ1bm5pbmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2Y1YTA1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9nc3QvaHRtbC9nc3QtcnVubmluZy5odG1sCkBAIC0wLDAgKzEsMjA1IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+UnVubmluZyBHU3RyZWFtZXIgQXBwbGljYXRpb25zPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgT3ZlcnZpZXciPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtYnVpbGRpbmcuaHRtbCIgdGl0bGU9IkJ1aWxkaW5nIEdTdHJlYW1lciBhbmQgR1N0cmVhbWVyIEFwcGxpY2F0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1idWlsZGluZy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJnc3QtcnVubmluZyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPlJ1bm5pbmcgR1N0cmVhbWVyIEFwcGxpY2F0aW9uczwvc3Bhbj48L2gyPgorPHA+UnVubmluZyBHU3RyZWFtZXIgQXBwbGljYXRpb25zIOKAlCAKK0hvdyB0byBydW4gYW5kIGRlYnVnIHlvdXIgR1N0cmVhbWVyIGFwcGxpY2F0aW9uCis8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJpZDQ3MTA5NSI+PC9hPjxoMj5SdW5uaW5nIGFuZCBkZWJ1Z2dpbmcgR1N0cmVhbWVyIEFwcGxpY2F0aW9uczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJpZDQ0NTkxOCI+PC9hPjxoMz5FbnZpcm9ubWVudCB2YXJpYWJsZXM8L2gzPgorPHA+IAorR1N0cmVhbWVyIGluc3BlY3RzIGEgZmV3IG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZAordmFyaWFibGVzIGxpa2UgPGNvZGUgY2xhc3M9ImVudmFyIj5MQU5HPC9jb2RlPiwgPGNvZGUgY2xhc3M9ImVudmFyIj5QQVRIPC9jb2RlPiBvciA8Y29kZSBjbGFzcz0iZW52YXIiPkhPTUU8L2NvZGU+LiAKKzwvcD4KKzxwPjxhIG5hbWU9IkdTVF9QTFVHSU5fU1lTVEVNX1BBVEgiPjwvYT48Yj48Y29kZSBjbGFzcz0iZW52YXIiPkdTVF9QTFVHSU5fU1lTVEVNX1BBVEg8L2NvZGU+LsKgPC9iPgorCitUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBwYXRocy4KK0lmIHRoaXMgdmFyaWFibGUgaXMgbm90IHNldCwgR1N0cmVhbWVyIHdpbGwgZmlsbCBpbiB0aGlzIGxpc3QgZm9yIHlvdQord2l0aAorPC9wPgorPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KK3BsdWctaW5zIGluIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkuICBUaGVzZSBhcmUgc3RvcmVkIGluIGEgZGlyZWN0b3J5IGNhbGxlZAorPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5wbHVnaW5zPC9jb2RlPiBpbnNpZGUgdGhlCis8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi5nc3RyZWFtZXItMC4xMTwvY29kZT4gZGlyZWN0b3J5IGluIHRoZSB1c2VyJ3MKK2hvbWUgZGlyZWN0b3J5LgorICAgIDwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CitwbHVnLWlucyBpbnN0YWxsZWQgc3lzdGVtLXdpZGUuICBPbiB0aGlzIHN5c3RlbSwgdGhleSBhcmUgc3RvcmVkIGluCis8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi91c3IvbG9jYWwvbGliL2dzdHJlYW1lci0wLjExPC9jb2RlPi4KKyAgICA8L3A+PC9saT4KKzwvdWw+PC9kaXY+Cis8cD4KKyAgIAorR1N0cmVhbWVyIHdpbGwgc2NhbiB0aGVzZSBwYXRocyBmb3IgR1N0cmVhbWVyIHBsdWctaW5zLiAgVGhlc2UgcGx1Zy1pbnMgd2lsbAorYmUgbG9hZGVkIGFmdGVyIHRoZSBwbHVnLWlucyBpbiB0aGUgR1NUX1BMVUdJTl9QQVRIIHZhcmlhYmxlIGJlbG93LgorCitUaGUgcGF0aHMgYXJlIHNjYW5uZWQgaW4gdGhlIGdpdmVuIG9yZGVyLiAgVGhpcyBhbGxvd3MgYSB1c2VyIHRvIG92ZXJyaWRlCitzeXN0ZW0taW5zdGFsbGVkIHBsdWctaW5zIHdpdGggaGlzIG93biB2ZXJzaW9ucy4KKyAgIAorU2V0dGluZyB0aGlzIHZhcmlhYmxlIHRvIGFuIGVtcHR5IHN0cmluZyB3aWxsIGNhdXNlIEdTdHJlYW1lciBub3QgdG8gc2NhbiBhbnkKK3N5c3RlbSBwYXRocyBhdCBhbGwgZm9yIHBsdWctaW5zLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdSdyZSBydW5uaW5nCit1bmluc3RhbGxlZCAoZm9yIGRldmVsb3BtZW50IHB1cnBvc2VzKSBvciB3aGlsZSBydW5uaW5nIHRlc3RzdWl0ZXMuCisgICA8L3A+Cis8cD48YSBuYW1lPSJHU1RfUExVR0lOX1BBVEgiPjwvYT48Yj48Y29kZSBjbGFzcz0iZW52YXIiPkdTVF9QTFVHSU5fUEFUSDwvY29kZT4uwqA8L2I+CitUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBwYXRocy4KK0dTdHJlYW1lciB3aWxsIHNjYW4gdGhlc2UgcGF0aHMgZm9yIEdTdHJlYW1lciBwbHVnLWlucy4gIFRoZXNlIHBsdWctaW5zIHdpbGwKK2JlIGxvYWRlZCBpbiBhZGRpdGlvbiB0bywgYW5kIGJlZm9yZSwgdGhlIHBsdWctaW5zIGluIHRoZSBzeXN0ZW0gcGF0aHMuCisgIDwvcD4KKzxwPjxhIG5hbWU9IkdTVF9ERUJVRyI+PC9hPjxiPjxjb2RlIGNsYXNzPSJlbnZhciI+R1NUX0RFQlVHPC9jb2RlPi7CoDwvYj4KK0lmIEdTdHJlYW1lciBoYXMgYmVlbiBjb25maWd1cmVkIHdpdGggPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1lbmFibGUtZ3N0LWRlYnVnPXllczwvY29kZT4sCit0aGlzIHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gYSBsaXN0IG9mIGRlYnVnIG9wdGlvbnMsIHdoaWNoIGNhdXNlIEdTdHJlYW1lcgordG8gcHJpbnQgb3V0IGRpZmZlcmVudCB0eXBlcyBvZiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gdG8gc3RkZXJyLgorICAKK1RoZSB2YXJpYWJsZSB0YWtlcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mICJjYXRlZ29yeV9uYW1lOmxldmVsIiBwYWlycwordG8gc2V0IHNwZWNpZmljIGxldmVscyBmb3IgdGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4KK1RoZSBsZXZlbCB2YWx1ZSByYW5nZXMgZnJvbSAwIChub3RoaW5nKSB0byA1IChMT0cpLgorICAgIDwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjEgLSA8Y29kZSBjbGFzcz0ib3B0aW9uIj5FUlJPUjwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+PHA+CitMb2dzIGFsbCBmYXRhbCBlcnJvcnMuICBUaGVzZSBhcmUgZXJyb3JzIHRoYXQgZG8gbm90IGFsbG93IHRoZSBjb3JlIG9yIGVsZW1lbnRzCit0byBwZXJmb3JtIHRoZSByZXF1ZXN0ZWQgYWN0aW9uLiAgVGhlIGFwcGxpY2F0aW9uIGNhbiBzdGlsbCByZWNvdmVyIGlmCitwcm9ncmFtbWVkIHRvIGhhbmRsZSB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXJlZCB0aGUgZXJyb3IuCis8L3A+PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjIgLSA8Y29kZSBjbGFzcz0ib3B0aW9uIj5XQVJOSU5HPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD48cD4KK0xvZ3MgYWxsIHdhcm5pbmdzLiAgVHlwaWNhbGx5IHRoZXNlIGFyZSBub24tZmF0YWwsIGJ1dCB1c2VyLXZpc2libGUgcHJvYmxlbXMKK2FyZSBleHBlY3RlZCB0byBoYXBwZW4uCis8L3A+PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjMgLSA8Y29kZSBjbGFzcz0ib3B0aW9uIj5JTkZPPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD48cD4KK0xvZ3MgYWxsIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMuICBUaGVzZSBhcmUgdHlwaWNhbGx5IHVzZWQgZm9yIGV2ZW50cyBpbgordGhlIHN5c3RlbSB0aGF0IG9ubHkgaGFwcGVuIG9uY2UsIG9yIGFyZSBpbXBvcnRhbnQgYW5kIHJhcmUgZW5vdWdoIHRvIGJlCitsb2dnZWQgYXQgdGhpcyBsZXZlbC4KKzwvcD48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+NCAtIDxjb2RlIGNsYXNzPSJvcHRpb24iPkRFQlVHPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD48cD4KK0xvZ3MgYWxsIGRlYnVnIG1lc3NhZ2VzLiAgVGhlc2UgYXJlIGdlbmVyYWwgZGVidWcgbWVzc2FnZXMgZm9yIGV2ZW50cwordGhhdCBoYXBwZW4gb25seSBhIGxpbWl0ZWQgbnVtYmVyIG9mIHRpbWVzIGR1cmluZyBhbiBvYmplY3QncyBsaWZldGltZTsKK3RoZXNlIGluY2x1ZGUgc2V0dXAsIHRlYXJkb3duLCBjaGFuZ2Ugb2YgcGFyYW1ldGVycywgLi4uCis8L3A+PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjUgLSA8Y29kZSBjbGFzcz0ib3B0aW9uIj5MT0c8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPjxwPgorTG9ncyBhbGwgbG9nIG1lc3NhZ2VzLiAgVGhlc2UgYXJlIG1lc3NhZ2VzIGZvciBldmVudHMKK3RoYXQgaGFwcGVuIHJlcGVhdGVkbHkgZHVyaW5nIGFuIG9iamVjdCdzIGxpZmV0aW1lOwordGhlc2UgaW5jbHVkZSBzdHJlYW1pbmcgYW5kIHN0ZWFkeS1zdGF0ZSBjb25kaXRpb25zLgorPC9wPjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cD4KKworIFRoZSBjYXRlZ29yeV9uYW1lIGNhbiBjb250YWluICI8Y29kZSBjbGFzcz0ib3B0aW9uIj4qIjwvY29kZT4gYXMgYSB3aWxkY2FyZC4KKyAgCitGb3IgZXhhbXBsZSwgc2V0dGluZyA8Y29kZSBjbGFzcz0iZW52YXIiPkdTVF9ERUJVRzwvY29kZT4gdG8KKzxjb2RlIGNsYXNzPSJvcHRpb24iPkdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MzwvY29kZT4sIHdpbGwgY2F1c2UgdGhlCis8Y29kZSBjbGFzcz0ib3B0aW9uIj5HU1RfQVVUT1BMVUc8L2NvZGU+IGNhdGVnb3J5IHRvIGJlIGxvZ2dlZCBhdCBmdWxsCis8Y29kZSBjbGFzcz0ib3B0aW9uIj5MT0c8L2NvZGU+IGxldmVsLCB3aGlsZSBhbGwgY2F0ZWdvcmllcyBzdGFydGluZyB3aXRoCis8Y29kZSBjbGFzcz0ib3B0aW9uIj5HU1RfRUxFTUVOVF88L2NvZGU+IHdpbGwgYmUgbG9nZ2VkIGF0IDxjb2RlIGNsYXNzPSJvcHRpb24iPklORk88L2NvZGU+IGxldmVsLgorICAKK1RvIGdldCBhbGwgcG9zc2libGUgZGVidWcgb3V0cHV0LCBzZXQKKzxjb2RlIGNsYXNzPSJlbnZhciI+R1NUX0RFQlVHPC9jb2RlPgordG8gPGNvZGUgY2xhc3M9Im9wdGlvbiI+Kjo1PC9jb2RlPgorICA8L3A+Cis8cD48YSBuYW1lPSJHU1RfREVCVUdfTk9fQ09MT1IiPjwvYT48Yj48Y29kZSBjbGFzcz0iZW52YXIiPkdTVF9ERUJVR19OT19DT0xPUjwvY29kZT4uwqA8L2I+CitTZXQgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBhbnkgdmFsdWUgKCIxIiB0eXBpY2FsbHkpIHRvIHN3aXRjaCBvZmYKK2NvbG91cmluZyBpbiBHU1RfREVCVUcgb3V0cHV0LiBUaGlzIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgc3BlY2lmeWluZyB0aGUKKzxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZ3N0LWRlYnVnLW5vLWNvbG9yPC9jb2RlPiBjb21tYW5kIGxpbmUgb3B0aW9uIHRvIHdlbGwtYmVoYXZlZAorR1N0cmVhbWVyIGFwcGxpY2F0aW9ucyAoaWUuIHRob3NlIHRoYXQgcGFzcyBjb21tYW5kLWxpbmUgb3B0aW9ucyBjb3JyZWN0bHkgdG8KK0dTdHJlYW1lcikuCitUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgdG8gcmVkdWNlIHRoZSBzaXplIG9mIGRlYnVnIG91dHB1dCBhbmQgYWxzbyBhbGxvd3MKK2ZvciB0aGUgb3V0cHV0IHRvIGJlIGNvbXByZXNzZWQgbXVjaCBiZXR0ZXIgdGhhbiB3aXRoIGNvbG91cnMgdHVybmVkIG9uLgorICA8L3A+Cis8cD48YSBuYW1lPSJHU1RfREVCVUdfT1BUSU9OUyI+PC9hPjxiPjxjb2RlIGNsYXNzPSJlbnZhciI+R1NUX0RFQlVHX09QVElPTlM8L2NvZGU+LsKgPC9iPgorVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byB0d2VhayB0aGUgYmVoYXZpb3VyIG9mIHRoZSBkZWJ1Z2dpbmcKK3N5c3RlbS4gQ3VycmVudGx5IHRoZSBvbmx5IG9wdGlvbnMgc3VwcG9ydGVkIGFyZSAicHJldHR5LXRhZ3MiIGFuZCAiZnVsbC10YWdzIi4KK0luICJwcmV0dHktdGFncyIgbW9kZSAodGhlIGRlZmF1bHQpLCB0YWdsaXN0cyBpbiB0aGUgZGVidWcgbG9nIHdpbGwgYmUKK3NlcmlhbGl6ZWQgc28gdGhhdCBvbmx5IHRoZSBmaXJzdCBmZXcgYW5kIGxhc3QgZmV3IGJ5dGVzIG9mIGEgYnVmZmVyLXR5cGUgdGFnCit3aWxsIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbG9nLCB0byBhdm9pZCBkdW1waW5nIGh1bmRyZWRzIG9mIGxpbmVzIG9mIHVzZWxlc3MKK291dHB1dCBpbnRvIHRoZSBsb2cgaW4gY2FzZSBvZiBsYXJnZSBpbWFnZSB0YWdzIGFuZCB0aGUgbGlrZS4KKyAgPC9wPgorPHA+PGEgbmFtZT0iR1NUX0RFQlVHX0RVTVBfRE9UX0RJUiI+PC9hPjxiPjxjb2RlIGNsYXNzPSJlbnZhciI+R1NUX0RFQlVHX0RVTVBfRE9UX0RJUjwvY29kZT4uwqA8L2I+CitTZXQgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBhIHBhdGggdG8gdHVybiBvbiBhbGwKKyNHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFIG9yICNHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFX1dJVEhfVFMgY2FsbHMKK2FuZCBoYXZlIHRoZSBkb3QgZmlsZXMgaW4gdGhhdCBsb2NhdGlvbi4KKyAgPC9wPgorPHA+PGEgbmFtZT0iR1NUX1JFR0lTVFJZX0ZPUksiPjwvYT48Yj48Y29kZSBjbGFzcz0iZW52YXIiPkdTVF9SRUdJU1RSWV9GT1JLPC9jb2RlPi7CoDwvYj4KK1NldCB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlIHRvICJubyIgdG8gcHJldmVudCBHU3RyZWFtZXIgZnJvbSBmb3JraW5nIG9uCitzdGFydHVwIGluIG9yZGVyIHRvIHVwZGF0ZSB0aGUgcGx1Z2luIHJlZ2lzdHJ5LiBUaGlzIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nCitwdXJwb3NlcywgYnV0IHNob3VsZCBub3QgYmUgdXNlZCB1bmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcywgc2luY2UgaXQgbWVhbnMKK3RoYXQgcGx1Z2lucyBtYXkgYmUgbG9hZGVkIGludG8gbWVtb3J5IGV2ZW4gaWYgdGhleSBhcmUgbm90IG5lZWRlZCBieSB0aGUKK2FwcGxpY2F0aW9uLgorICA8L3A+Cis8cD48YSBuYW1lPSJHU1RfUkVHSVNUUllfVVBEQVRFIj48L2E+PGI+PGNvZGUgY2xhc3M9ImVudmFyIj5HU1RfUkVHSVNUUllfVVBEQVRFPC9jb2RlPi7CoDwvYj4KK1NldCB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlIHRvICJubyIgdG8gcHJldmVudCBHU3RyZWFtZXIgZnJvbSB1cGRhdGluZyB0aGUKK3BsdWdpbiByZWdpc3RyeS4gVGhpcyBpcyB1c2VmdWwgZm9yIGVtYmVkZGVkIGRldmljZSB3aGljaCBpcyBub3QgdXBkYXRpbmcgdGhlCitwbHVnaW5zIGZyZXF1ZW50bHksIGl0IHdpbGwgc2F2ZSB0aW1lIHdoZW4gZG9pbmcgZ3N0X2luaXQoKS4KKyAgPC9wPgorPHA+PGEgbmFtZT0iT1JDX0NPREUiPjwvYT48Yj48Y29kZSBjbGFzcz0iZW52YXIiPk9SQ19DT0RFPC9jb2RlPi7CoDwvYj4KK1VzZWZ1bCBPcmMgZW52aXJvbm1lbnQgdmFyaWFibGUuIFNldCBPUkNfQ09ERT1kZWJ1ZyB0byBlbmFibGUgZGVidWdnZXJzCitzdWNoIGFzIGdkYiB0byBjcmVhdGUgdXNlZnVsIGJhY2t0cmFjZXMgZnJvbSBPcmMtZ2VuZXJhdGVkIGNvZGUuICBTZXQKK09SQ19DT0RFPWJhY2t1cCBvciBPUkNfQ09ERT1lbXVsYXRlIGlmIHlvdSBzdXNwZWN0IE9yYydzIFNJTUQgY29kZQorZ2VuZXJhdG9yIGlzIHByb2R1Y2luZyBpbmNvcnJlY3QgY29kZSAoUXVpdGUgYSBmZXcgaW1wb3J0YW50CitHU3RyZWFtZXIgcGx1Z2lucyBsaWtlIHZpZGVvdGVzdHNyYywgYXVkaW9jb252ZXJ0IG9yIGF1ZGlvcmVzYW1wbGUgdXNlIE9yYykuCitPbmUgY2FuIGFsc28gY29tYmluZSBmbGFncyBsaWtlIE9SQ19DT0RFPWJhY2t1cCxkZWJ1Zy4KKyAgPC9wPgorPHA+PGEgbmFtZT0iR19ERUJVRyI+PC9hPjxiPjxjb2RlIGNsYXNzPSJlbnZhciI+R19ERUJVRzwvY29kZT4uwqA8L2I+CitVc2VmdWwgR0xpYiBlbnZpcm9ubWVudCB2YXJpYWJsZS4gU2V0IEdfREVCVUc9ZmF0YWxfd2FybmluZ3MgdG8gbWFrZQorR1N0cmVhbWVyIHByb2dyYW1zIGFib3J0IHdoZW4gYSBjcml0aWNhbCB3YXJuaW5nIHN1Y2ggYXMgYW4gYXNzZXJ0aW9uIGZhaWx1cmUKK29jY3Vycy4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gZmluZCBvdXQgd2hpY2ggcGFydCBvZiB0aGUgY29kZSBjYXVzZWQKK3RoYXQgd2FybmluZyB0byBiZSB0cmlnZ2VyZWQgYW5kIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcy4gU2ltcGx5IHNldCBHX0RFQlVHCithcyBtZW50aW9uZWQgYWJvdmUgYW5kIHJ1biB0aGUgcHJvZ3JhbSBpbiBnZGIgKG9yIGxldCBpdCBjb3JlIGR1bXApLiBUaGVuIGdldAorYSBzdGFjayB0cmFjZSBpbiB0aGUgdXN1YWwgd2F5LgorICA8L3A+Cis8cD48YSBuYW1lPSJHX1NMSUNFIj48L2E+PGI+PGNvZGUgY2xhc3M9ImVudmFyIj5HX1NMSUNFPC9jb2RlPi7CoDwvYj4KK1VzZWZ1bCBHTGliIGVudmlyb25tZW50IHZhcmlhYmxlLiBTZXQgR19TTElDRT1hbHdheXMtbWFsbG9jIHdoZW4gcnVubmluZworR1N0cmVhbWVyIHByb2dyYW1zIGluIHZhbGdyaW5kLCBvciBkZWJ1Z2dpbmcgbWVtb3J5IGxlYWtzIHdpdGggb3RoZXIgdG9vbHMuCitTZWUgdGhlIEdMaWIgQVBJIHJlZmVyZW5jZSBmb3IgbW9yZSBkZXRhaWxzLgorICA8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0Lmh0bWwgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzM0ZjkwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0Lmh0bWwKQEAgLTAsMCArMSw0OTQgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5Hc3Q8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCIgdGl0bGU9IkdzdEF0b21pY1F1ZXVlIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdC5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3QuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1Hc3QudG9wX29mX3BhZ2UiPjwvYT5Hc3Q8L3NwYW4+PC9oMj4KKzxwPkdzdCDigJQgTWVkaWEgbGlicmFyeSBzdXBwb3J0aW5nIGFyYml0cmFyeSBmb3JtYXRzIGFuZCBmaWx0ZXIKKyAgICAgICAgICAgICAgICAgICAgZ3JhcGhzLjwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3Quc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKKworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1pbml0IiB0aXRsZT0iZ3N0X2luaXQgKCkiPmdzdF9pbml0PC9hPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj5pbnQ8L3NwYW4+ICphcmdjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj5jaGFyPC9zcGFuPiAqKmFyZ3ZbXTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LWluaXQtY2hlY2siIHRpdGxlPSJnc3RfaW5pdF9jaGVjayAoKSI+Z3N0X2luaXRfY2hlY2s8L2E+ICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPmludDwvc3Bhbj4gKmFyZ2M8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPmNoYXI8L3NwYW4+ICoqYXJndltdPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gKiplcnI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Db21tYW5kbGluZS1vcHRpb24tcGFyc2VyLmh0bWwjR09wdGlvbkdyb3VwIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdPcHRpb25Hcm91cDwvc3Bhbj48L2E+ICogICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1pbml0LWdldC1vcHRpb24tZ3JvdXAiIHRpdGxlPSJnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwICgpIj5nc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwPC9hPiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1pcy1pbml0aWFsaXplZCIgdGl0bGU9ImdzdF9pc19pbml0aWFsaXplZCAoKSI+Z3N0X2lzX2luaXRpYWxpemVkPC9hPiAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtZGVpbml0IiB0aXRsZT0iZ3N0X2RlaW5pdCAoKSI+Z3N0X2RlaW5pdDwvYT4gICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtdmVyc2lvbiIgdGl0bGU9ImdzdF92ZXJzaW9uICgpIj5nc3RfdmVyc2lvbjwvYT4gICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICptYWpvcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICptaW5vcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICptaWNybzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICpuYW5vPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICogICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtdmVyc2lvbi1zdHJpbmciIHRpdGxlPSJnc3RfdmVyc2lvbl9zdHJpbmcgKCkiPmdzdF92ZXJzaW9uX3N0cmluZzwvYT4gICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LXNlZ3RyYXAtaXMtZW5hYmxlZCIgdGl0bGU9ImdzdF9zZWd0cmFwX2lzX2VuYWJsZWQgKCkiPmdzdF9zZWd0cmFwX2lzX2VuYWJsZWQ8L2E+ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LXNlZ3RyYXAtc2V0LWVuYWJsZWQiIHRpdGxlPSJnc3Rfc2VndHJhcF9zZXRfZW5hYmxlZCAoKSI+Z3N0X3NlZ3RyYXBfc2V0X2VuYWJsZWQ8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBlbmFibGVkPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtcmVnaXN0cnktZm9yay1pcy1lbmFibGVkIiB0aXRsZT0iZ3N0X3JlZ2lzdHJ5X2ZvcmtfaXNfZW5hYmxlZCAoKSI+Z3N0X3JlZ2lzdHJ5X2ZvcmtfaXNfZW5hYmxlZDwvYT4gICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtcmVnaXN0cnktZm9yay1zZXQtZW5hYmxlZCIgdGl0bGU9ImdzdF9yZWdpc3RyeV9mb3JrX3NldF9lbmFibGVkICgpIj5nc3RfcmVnaXN0cnlfZm9ya19zZXRfZW5hYmxlZDwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGVuYWJsZWQ8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC11cGRhdGUtcmVnaXN0cnkiIHRpdGxlPSJnc3RfdXBkYXRlX3JlZ2lzdHJ5ICgpIj5nc3RfdXBkYXRlX3JlZ2lzdHJ5PC9hPiAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3QuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitHU3RyZWFtZXIgaXMgYSBmcmFtZXdvcmsgZm9yIGNvbnN0cnVjdGluZyBncmFwaHMgb2YgdmFyaW91cyBmaWx0ZXJzCisodGVybWVkIGVsZW1lbnRzIGhlcmUpIHRoYXQgd2lsbCBoYW5kbGUgc3RyZWFtaW5nIG1lZGlhLiAgQW55IGRpc2NyZWV0CisocGFja2V0aXphYmxlKSBtZWRpYSB0eXBlIGlzIHN1cHBvcnRlZCwgd2l0aCBwcm92aXNpb25zIGZvciBhdXRvbWF0aWNhbGx5CitkZXRlcm1pbmluZyBzb3VyY2UgdHlwZS4gIEZvcm1hdHRpbmcvZnJhbWluZyBpbmZvcm1hdGlvbiBpcyBwcm92aWRlZCB3aXRoCithIHBvd2VyZnVsIG5lZ290aWF0aW9uIGZyYW1ld29yay4gIFBsdWdpbnMgYXJlIGhlYXZpbHkgdXNlZCB0byBwcm92aWRlIGZvcgorYWxsIGVsZW1lbnRzLCBhbGxvd2luZyBvbmUgdG8gY29uc3RydWN0IHBsdWdpbnMgb3V0c2lkZSBvZiB0aGUgR1NUCitsaWJyYXJ5LCBldmVuIHJlbGVhc2VkIGJpbmFyeS1vbmx5IGlmIGxpY2Vuc2UgcmVxdWlyZSAocGxlYXNlIGRvbid0KS4KK0dTdHJlYW1lciBjb3ZlcnMgYSB3aWRlIHJhbmdlIG9mIHVzZSBjYXNlcyBpbmNsdWRpbmc6IHBsYXliYWNrLCByZWNvcmRpbmcsCitlZGl0aW5nLCBzZXJ2aW5nIHN0cmVhbXMsIHZvaWNlIG92ZXIgaXAgYW5kIHZpZGVvIGNhbGxzLgorPC9wPgorPHA+CitUaGUgPHNwYW4gY2xhc3M9ImFwcGxpY2F0aW9uIj5HU3RyZWFtZXI8L3NwYW4+IGxpYnJhcnkgc2hvdWxkIGJlIGluaXRpYWxpemVkIHdpdGgKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LWluaXQiIHRpdGxlPSJnc3RfaW5pdCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaW5pdCgpPC9jb2RlPjwvYT4gYmVmb3JlIGl0IGNhbiBiZSB1c2VkLiBZb3Ugc2hvdWxkIHBhc3MgcG9pbnRlcnMgdG8gdGhlIG1haW4gYXJnYworYW5kIGFyZ3YgdmFyaWFibGVzIHNvIHRoYXQgR1N0cmVhbWVyIGNhbiBwcm9jZXNzIGl0cyBvd24gY29tbWFuZCBsaW5lCitvcHRpb25zLCBhcyBzaG93biBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUuCis8L3A+Cis8cD4KKzwvcD4KKzxkaXYgY2xhc3M9ImV4YW1wbGUiPgorPGEgbmFtZT0iaWQ0NTkwNTAiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkV4YW1wbGXCoDEuwqBJbml0aWFsaXppbmcgdGhlIGdzdHJlYW1lciBsaWJyYXJ5PC9iPjwvcD4KKzxkaXYgY2xhc3M9ImV4YW1wbGUtY29udGVudHMiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgLy8gaW5pdGlhbGl6ZSB0aGUgR1N0cmVhbWVyIGxpYnJhcnkKKyAgZ3N0X2luaXQgKCZhbXA7YXJnYywgJmFtcDthcmd2KTsKKyAgLi4uCit9Cis8L3ByZT48L2Rpdj4KKzwvZGl2PgorPHA+PGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj4KKzwvcD4KKzxwPgorSXQncyBhbGxvd2VkIHRvIHBhc3MgdHdvIE5VTEwgcG9pbnRlcnMgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtaW5pdCIgdGl0bGU9ImdzdF9pbml0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9pbml0KCk8L2NvZGU+PC9hPiBpbiBjYXNlIHlvdSBkb24ndCB3YW50Cit0byBwYXNzIHRoZSBjb21tYW5kIGxpbmUgYXJncyB0byBHU3RyZWFtZXIuCis8L3A+Cis8cD4KK1lvdSBjYW4gYWxzbyB1c2UgR09wdGlvbiB0byBpbml0aWFsaXplIHlvdXIgb3duIHBhcmFtZXRlcnMgYXMgc2hvd24gaW4KK3RoZSBuZXh0IGNvZGUgZnJhZ21lbnQ6Cis8L3A+Cis8ZGl2IGNsYXNzPSJleGFtcGxlIj4KKzxhIG5hbWU9ImlkNDUxMDI5Ij48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5FeGFtcGxlwqAyLsKgSW5pdGlhbGl6aW5nIG93biBwYXJhbWV0ZXJzIHdoZW4gaW5pdGlhbGl6aW5nIGdzdHJlYW1lcjwvYj48L3A+Cis8ZGl2IGNsYXNzPSJleGFtcGxlLWNvbnRlbnRzIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CitzdGF0aWMgZ2Jvb2xlYW4gc3RhdHMgPSBGQUxTRTsKKy4uLgoraW50CittYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworIEdPcHRpb25FbnRyeSBvcHRpb25zW10gPSB7CisgIHsidGFncyIsICd0JywgMCwgR19PUFRJT05fQVJHX05PTkUsICZhbXA7dGFncywKKyAgICAgIE5fKCJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiKSwgTlVMTH0sCisgIHtOVUxMfQorIH07CisgLy8gbXVzdCBpbml0aWFsaXNlIHRoZSB0aHJlYWRpbmcgc3lzdGVtIGJlZm9yZSB1c2luZyBhbnkgb3RoZXIgR0xpYiBmdW50aW9uCisgaWYgKCFnX3RocmVhZF9zdXBwb3J0ZWQgKCkpCisgICBnX3RocmVhZF9pbml0IChOVUxMKTsKKyBjdHggPSBnX29wdGlvbl9jb250ZXh0X25ldyAoIltBRERJVElPTkFMIEFSR1VNRU5UU10iKTsKKyBnX29wdGlvbl9jb250ZXh0X2FkZF9tYWluX2VudHJpZXMgKGN0eCwgb3B0aW9ucywgR0VUVEVYVF9QQUNLQUdFKTsKKyBnX29wdGlvbl9jb250ZXh0X2FkZF9ncm91cCAoY3R4LCBnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwICgpKTsKKyBpZiAoIWdfb3B0aW9uX2NvbnRleHRfcGFyc2UgKGN0eCwgJmFtcDthcmdjLCAmYW1wO2FyZ3YsICZhbXA7ZXJyKSkgeworICAgZ19wcmludCAoIkVycm9yIGluaXRpYWxpemluZzogJXNcbiIsIEdTVF9TVFJfTlVMTCAoZXJyLSZndDttZXNzYWdlKSk7CisgICBleGl0ICgxKTsKKyB9CisgZ19vcHRpb25fY29udGV4dF9mcmVlIChjdHgpOworLi4uCit9Cis8L3ByZT48L2Rpdj4KKzwvZGl2PgorPHA+PGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj4KKzwvcD4KKzxwPgorVXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LXZlcnNpb24iIHRpdGxlPSJnc3RfdmVyc2lvbiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdmVyc2lvbigpPC9jb2RlPjwvYT4gdG8gcXVlcnkgdGhlIGxpYnJhcnkgdmVyc2lvbiBhdCBydW50aW1lIG9yIHVzZSB0aGUKK0dTVF9WRVJTSU9OXyogbWFjcm9zIHRvIGZpbmQgdGhlIHZlcnNpb24gYXQgY29tcGlsZSB0aW1lLiBPcHRpb25hbGx5Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC12ZXJzaW9uLXN0cmluZyIgdGl0bGU9ImdzdF92ZXJzaW9uX3N0cmluZyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdmVyc2lvbl9zdHJpbmcoKTwvY29kZT48L2E+IHJldHVybnMgYSBwcmludGFibGUgc3RyaW5nLgorPC9wPgorPHA+CitUaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtZGVpbml0IiB0aXRsZT0iZ3N0X2RlaW5pdCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZGVpbml0KCk8L2NvZGU+PC9hPiBjYWxsIGlzIHVzZWQgdG8gY2xlYW4gdXAgYWxsIGludGVybmFsIHJlc291cmNlcyB1c2VkCitieSA8c3BhbiBjbGFzcz0iYXBwbGljYXRpb24iPkdTdHJlYW1lcjwvc3Bhbj4uIEl0IGlzIG1vc3RseSB1c2VkIGluIHVuaXQgdGVzdHMgCit0byBjaGVjayBmb3IgbGVha3MuCis8L3A+Cis8cD4KK0xhc3QgcmV2aWV3ZWQgb24gMjAwNi0wOC0xMSAoMC4xMC4xMCkKKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdC5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWluaXQiPjwvYT48aDM+Z3N0X2luaXQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2luaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+aW50PC9zcGFuPiAqYXJnYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+Y2hhcjwvc3Bhbj4gKiphcmd2W108L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitJbml0aWFsaXplcyB0aGUgR1N0cmVhbWVyIGxpYnJhcnksIHNldHRpbmcgdXAgaW50ZXJuYWwgcGF0aCBsaXN0cywKK3JlZ2lzdGVyaW5nIGJ1aWx0LWluIGVsZW1lbnRzLCBhbmQgbG9hZGluZyBzdGFuZGFyZCBwbHVnaW5zLgorPC9wPgorPHA+CitVbmxlc3MgdGhlIHBsdWdpbiByZWdpc3RyeSBpcyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUsIHRoZSByZWdpc3RyeSB3aWxsIGJlCitsb2FkZWQuIEJ5IGRlZmF1bHQgdGhpcyB3aWxsIGFsc28gY2hlY2sgaWYgdGhlIHJlZ2lzdHJ5IGNhY2hlIG5lZWRzIHRvIGJlCit1cGRhdGVkIGFuZCByZXNjYW4gYWxsIHBsdWdpbnMgaWYgbmVlZGVkLiBTZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtdXBkYXRlLXJlZ2lzdHJ5IiB0aXRsZT0iZ3N0X3VwZGF0ZV9yZWdpc3RyeSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdXBkYXRlX3JlZ2lzdHJ5KCk8L2NvZGU+PC9hPiBmb3IKK2RldGFpbHMgYW5kIHNlY3Rpb24KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcnVubmluZy5odG1sIiB0aXRsZT0iUnVubmluZyBHU3RyZWFtZXIgQXBwbGljYXRpb25zIj5SdW5uaW5nIEdTdHJlYW1lciBBcHBsaWNhdGlvbnM8L2E+Citmb3IgaG93IHRvIGRpc2FibGUgYXV0b21hdGljIHJlZ2lzdHJ5IHVwZGF0ZXMuCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBhbnkgb3RoZXIgR0xpYiBmdW5jdGlvbnMuIElmCit0aGlzIGlzIG5vdCBhbiBvcHRpb24sIHlvdXIgcHJvZ3JhbSBtdXN0IGluaXRpYWxpc2UgdGhlIEdMaWIgdGhyZWFkIHN5c3RlbQordXNpbmcgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1UaHJlYWRzLmh0bWwjZy10aHJlYWQtaW5pdCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX3RocmVhZF9pbml0KCk8L2NvZGU+PC9hPiBiZWZvcmUgYW55IG90aGVyIEdMaWIgZnVuY3Rpb25zIGFyZSBjYWxsZWQuCis8L3A+Cis8cD4KKzwvcD4KKzxkaXYgY2xhc3M9Im5vdGUiIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij4KKzxoMyBjbGFzcz0idGl0bGUiPk5vdGU8L2gzPgorPHA+CitUaGlzIGZ1bmN0aW9uIHdpbGwgdGVybWluYXRlIHlvdXIgcHJvZ3JhbSBpZiBpdCB3YXMgdW5hYmxlIHRvIGluaXRpYWxpemUKK0dTdHJlYW1lciBmb3Igc29tZSByZWFzb24uICBJZiB5b3Ugd2FudCB5b3VyIHByb2dyYW0gdG8gZmFsbCBiYWNrLAordXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LWluaXQtY2hlY2siIHRpdGxlPSJnc3RfaW5pdF9jaGVjayAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaW5pdF9jaGVjaygpPC9jb2RlPjwvYT4gaW5zdGVhZC4KKzwvcD4KKzwvZGl2PgorPHA+Cis8L3A+Cis8cD4KK1dBUk5JTkc6IFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgd29yayBpbiB0aGUgc2FtZSB3YXkgYXMgY29ycmVzcG9uZGluZworZnVuY3Rpb25zIGluIG90aGVyIGdsaWItc3R5bGUgbGlicmFyaWVzLCBzdWNoIGFzIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9ndGsvZ3RrMy1HZW5lcmFsLmh0bWwjZ3RrLWluaXQiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3RrX2luaXQoKTwvY29kZT48L2E+LiAgSW4KK3BhcnRpY3VsYXIsIHVua25vd24gY29tbWFuZCBsaW5lIG9wdGlvbnMgY2F1c2UgdGhpcyBmdW5jdGlvbiB0bworYWJvcnQgcHJvZ3JhbSBleGVjdXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YXJnYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIGFwcGxpY2F0aW9uJ3MgYXJnYy4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dCBhbmQgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+aW5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YXJndjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIGFwcGxpY2F0aW9uJ3MgYXJndi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dCBhbmQgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+aW5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiBsZW5ndGg9YXJnY11bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1pbml0LWNoZWNrIj48L2E+PGgzPmdzdF9pbml0X2NoZWNrICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9pbml0X2NoZWNrICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPmludDwvc3Bhbj4gKmFyZ2M8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPmNoYXI8L3NwYW4+ICoqYXJndltdPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gKiplcnI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitJbml0aWFsaXplcyB0aGUgR1N0cmVhbWVyIGxpYnJhcnksIHNldHRpbmcgdXAgaW50ZXJuYWwgcGF0aCBsaXN0cywKK3JlZ2lzdGVyaW5nIGJ1aWx0LWluIGVsZW1lbnRzLCBhbmQgbG9hZGluZyBzdGFuZGFyZCBwbHVnaW5zLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaWYgR1N0cmVhbWVyIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZAorZm9yIHNvbWUgcmVhc29uLiAgSWYgeW91IHdhbnQgeW91ciBwcm9ncmFtIHRvIGZhaWwgZmF0YWxseSwKK3VzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1pbml0IiB0aXRsZT0iZ3N0X2luaXQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2luaXQoKTwvY29kZT48L2E+IGluc3RlYWQuCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBhbnkgb3RoZXIgR0xpYiBmdW5jdGlvbnMuIElmCit0aGlzIGlzIG5vdCBhbiBvcHRpb24sIHlvdXIgcHJvZ3JhbSBtdXN0IGluaXRpYWxpc2UgdGhlIEdMaWIgdGhyZWFkIHN5c3RlbQordXNpbmcgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1UaHJlYWRzLmh0bWwjZy10aHJlYWQtaW5pdCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX3RocmVhZF9pbml0KCk8L2NvZGU+PC9hPiBiZWZvcmUgYW55IG90aGVyIEdMaWIgZnVuY3Rpb25zIGFyZSBjYWxsZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YXJnYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIGFwcGxpY2F0aW9uJ3MgYXJnYy4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dCBhbmQgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+aW5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YXJndjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIGFwcGxpY2F0aW9uJ3MgYXJndi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dCBhbmQgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+aW5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiBsZW5ndGg9YXJnY11bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXJyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnBvaW50ZXIgdG8gYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUVycm9yLVJlcG9ydGluZy5odG1sI0dFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdFcnJvcjwvc3Bhbj48L2E+IHRvIHdoaWNoIGEgbWVzc2FnZSB3aWxsIGJlIHBvc3RlZCBvbiBlcnJvcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgR1N0cmVhbWVyIGNvdWxkIGJlIGluaXRpYWxpemVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1pbml0LWdldC1vcHRpb24tZ3JvdXAiPjwvYT48aDM+Z3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Db21tYW5kbGluZS1vcHRpb24tcGFyc2VyLmh0bWwjR09wdGlvbkdyb3VwIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdPcHRpb25Hcm91cDwvc3Bhbj48L2E+ICogICAgICBnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JldHVybnMgYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUNvbW1hbmRsaW5lLW9wdGlvbi1wYXJzZXIuaHRtbCNHT3B0aW9uR3JvdXAiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT3B0aW9uR3JvdXA8L3NwYW4+PC9hPiB3aXRoIEdTdHJlYW1lcidzIGFyZ3VtZW50IHNwZWNpZmljYXRpb25zLiBUaGUKK2dyb3VwIGlzIHNldCB1cCB0byB1c2Ugc3RhbmRhcmQgR09wdGlvbiBjYWxsYmFja3MsIHNvIHdoZW4gdXNpbmcgdGhpcworZ3JvdXAgaW4gY29tYmluYXRpb24gd2l0aCBHT3B0aW9uIHBhcnNpbmcgbWV0aG9kcywgYWxsIGFyZ3VtZW50IHBhcnNpbmcKK2FuZCBpbml0aWFsaXphdGlvbiBpcyBhdXRvbWF0ZWQuCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGludGVncmF0ZSBHU3RyZWFtZXIgd2l0aCBvdGhlcgorbGlicmFyaWVzIHRoYXQgdXNlIEdPcHRpb24gKHNlZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUNvbW1hbmRsaW5lLW9wdGlvbi1wYXJzZXIuaHRtbCNnLW9wdGlvbi1jb250ZXh0LWFkZC1ncm91cCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX29wdGlvbl9jb250ZXh0X2FkZF9ncm91cCgpPC9jb2RlPjwvYT4gKS4KKzwvcD4KKzxwPgorSWYgeW91IHVzZSB0aGlzIGZ1bmN0aW9uLCB5b3Ugc2hvdWxkIG1ha2Ugc3VyZSB5b3UgaW5pdGlhbGlzZSB0aGUgR0xpYgordGhyZWFkaW5nIHN5c3RlbSBhcyBvbmUgb2YgdGhlIHZlcnkgZmlyc3QgdGhpbmdzIGluIHlvdXIgcHJvZ3JhbQorKHNlZSB0aGUgZXhhbXBsZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgc2VjdGlvbikuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gR1N0cmVhbWVyJ3Mgb3B0aW9uIGdyb3VwLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1pcy1pbml0aWFsaXplZCI+PC9hPjxoMz5nc3RfaXNfaW5pdGlhbGl6ZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2lzX2luaXRpYWxpemVkICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitVc2UgdGhpcyBmdW5jdGlvbiB0byBjaGVjayBpZiBHU3RyZWFtZXIgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1pbml0IiB0aXRsZT0iZ3N0X2luaXQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2luaXQoKTwvY29kZT48L2E+CitvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1pbml0LWNoZWNrIiB0aXRsZT0iZ3N0X2luaXRfY2hlY2sgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2luaXRfY2hlY2soKTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiBpbml0aWFsaXphdGlvbiBoYXMgYmVlbiBkb25lLCBGQUxTRSBvdGhlcndpc2UuPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1kZWluaXQiPjwvYT48aDM+Z3N0X2RlaW5pdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfZGVpbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NsZWFuIHVwIGFueSByZXNvdXJjZXMgY3JlYXRlZCBieSBHU3RyZWFtZXIgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtaW5pdCIgdGl0bGU9ImdzdF9pbml0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9pbml0KCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxwPgorSXQgaXMgbm9ybWFsbHkgbm90IG5lZWRlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gYSBub3JtYWwgYXBwbGljYXRpb24KK2FzIHRoZSByZXNvdXJjZXMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGZyZWVkIHdoZW4gdGhlIHByb2dyYW0gdGVybWluYXRlcy4KK1RoaXMgZnVuY3Rpb24gaXMgdGhlcmVmb3JlIG1vc3RseSB1c2VkIGJ5IHRlc3RzdWl0ZXMgYW5kIG90aGVyIG1lbW9yeQorcHJvZmlsaW5nIHRvb2xzLgorPC9wPgorPHA+CitBZnRlciB0aGlzIGNhbGwgR1N0cmVhbWVyIChpbmNsdWRpbmcgdGhpcyBtZXRob2QpIHNob3VsZCBub3QgYmUgdXNlZCBhbnltb3JlLgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdmVyc2lvbiI+PC9hPjxoMz5nc3RfdmVyc2lvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gKm1ham9yPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gKm1pbm9yPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gKm1pY3JvPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gKm5hbm88L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXRzIHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgR1N0cmVhbWVyIGxpYnJhcnkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWFqb3I8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9pbnRlciB0byBhIGd1aW50IHRvIHN0b3JlIHRoZSBtYWpvciB2ZXJzaW9uIG51bWJlci4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWlub3I8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9pbnRlciB0byBhIGd1aW50IHRvIHN0b3JlIHRoZSBtaW5vciB2ZXJzaW9uIG51bWJlci4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWljcm88L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9pbnRlciB0byBhIGd1aW50IHRvIHN0b3JlIHRoZSBtaWNybyB2ZXJzaW9uIG51bWJlci4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFubzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIGEgZ3VpbnQgdG8gc3RvcmUgdGhlIG5hbm8gdmVyc2lvbiBudW1iZXIuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdmVyc2lvbi1zdHJpbmciPjwvYT48aDM+Z3N0X3ZlcnNpb25fc3RyaW5nICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgICAgICAgIGdzdF92ZXJzaW9uX3N0cmluZyAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgdXNlZnVsIGZvciBkZXNjcmliaW5nIHRoaXMgdmVyc2lvbgorb2YgR1N0cmVhbWVyIHRvIHRoZSBvdXRzaWRlIHdvcmxkOiB1c2VyIGFnZW50IHN0cmluZ3MsIGxvZ2dpbmcsIC4uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXdseSBhbGxvY2F0ZWQgc3RyaW5nIGRlc2NyaWJpbmcgdGhpcyB2ZXJzaW9uCitvZiBHU3RyZWFtZXIuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXNlZ3RyYXAtaXMtZW5hYmxlZCI+PC9hPjxoMz5nc3Rfc2VndHJhcF9pc19lbmFibGVkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9zZWd0cmFwX2lzX2VuYWJsZWQgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU29tZSBmdW5jdGlvbnMgaW4gdGhlIEdTdHJlYW1lciBjb3JlIG1pZ2h0IGluc3RhbGwgYSBjdXN0b20gU0lHU0VHViBoYW5kbGVyCit0byBiZXR0ZXIgY2F0Y2ggYW5kIHJlcG9ydCBlcnJvcnMgdG8gdGhlIGFwcGxpY2F0aW9uLiBDdXJyZW50bHkgdGhpcyBmZWF0dXJlCitpcyBlbmFibGVkIGJ5IGRlZmF1bHQgd2hlbiBsb2FkaW5nIHBsdWdpbnMuCis8L3A+Cis8cD4KK0FwcGxpY2F0aW9ucyBtaWdodCB3YW50IHRvIGRpc2FibGUgdGhpcyBiZWhhdmlvdXIgd2l0aCB0aGUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LXNlZ3RyYXAtc2V0LWVuYWJsZWQiIHRpdGxlPSJnc3Rfc2VndHJhcF9zZXRfZW5hYmxlZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc2VndHJhcF9zZXRfZW5hYmxlZCgpPC9jb2RlPjwvYT4gZnVuY3Rpb24uIFRoaXMgaXMgdHlwaWNhbGx5IGRvbmUgaWYgdGhlIGFwcGxpY2F0aW9uCit3YW50cyB0byBpbnN0YWxsIGl0cyBvd24gaGFuZGxlciB3aXRob3V0IEdTdHJlYW1lciBpbnRlcmZlcmluZy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgR1N0cmVhbWVyIGlzIGFsbG93ZWQgdG8gaW5zdGFsbCBhIGN1c3RvbSBTSUdTRUdWIGhhbmRsZXIuPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1zZWd0cmFwLXNldC1lbmFibGVkIj48L2E+PGgzPmdzdF9zZWd0cmFwX3NldF9lbmFibGVkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9zZWd0cmFwX3NldF9lbmFibGVkICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBlbmFibGVkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQXBwbGljYXRpb25zIG1pZ2h0IHdhbnQgdG8gZGlzYWJsZS9lbmFibGUgdGhlIFNJR1NFR1YgaGFuZGxpbmcgb2YKK3RoZSBHU3RyZWFtZXIgY29yZS4gU2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LXNlZ3RyYXAtaXMtZW5hYmxlZCIgdGl0bGU9ImdzdF9zZWd0cmFwX2lzX2VuYWJsZWQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3NlZ3RyYXBfaXNfZW5hYmxlZCgpPC9jb2RlPjwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVuYWJsZWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+d2hldGhlciBhIGN1c3RvbSBTSUdTRUdWIGhhbmRsZXIgc2hvdWxkIGJlIGluc3RhbGxlZC48L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xMDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LWZvcmstaXMtZW5hYmxlZCI+PC9hPjxoMz5nc3RfcmVnaXN0cnlfZm9ya19pc19lbmFibGVkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9yZWdpc3RyeV9mb3JrX2lzX2VuYWJsZWQgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQnkgZGVmYXVsdCBHU3RyZWFtZXIgd2lsbCBwZXJmb3JtIHNjYW5uaW5nIGFuZCByZWJ1aWxkaW5nIG9mIHRoZQorcmVnaXN0cnkgZmlsZSB1c2luZyBhIGhlbHBlciBjaGlsZCBwcm9jZXNzLgorPC9wPgorPHA+CitBcHBsaWNhdGlvbnMgbWlnaHQgd2FudCB0byBkaXNhYmxlIHRoaXMgYmVoYXZpb3VyIHdpdGggdGhlCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1yZWdpc3RyeS1mb3JrLXNldC1lbmFibGVkIiB0aXRsZT0iZ3N0X3JlZ2lzdHJ5X2Zvcmtfc2V0X2VuYWJsZWQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3JlZ2lzdHJ5X2Zvcmtfc2V0X2VuYWJsZWQoKTwvY29kZT48L2E+IGZ1bmN0aW9uLCBpbiB3aGljaCBjYXNlIG5ldyBwbHVnaW5zCithcmUgc2Nhbm5lZCAoYW5kIGxvYWRlZCkgaW50byB0aGUgYXBwbGljYXRpb24gcHJvY2Vzcy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgR1N0cmVhbWVyIHdpbGwgdXNlIHRoZSBjaGlsZCBoZWxwZXIgcHJvY2VzcyB3aGVuCityZWJ1aWxkaW5nIHRoZSByZWdpc3RyeS48L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xMDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LWZvcmstc2V0LWVuYWJsZWQiPjwvYT48aDM+Z3N0X3JlZ2lzdHJ5X2Zvcmtfc2V0X2VuYWJsZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3JlZ2lzdHJ5X2Zvcmtfc2V0X2VuYWJsZWQgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGVuYWJsZWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBcHBsaWNhdGlvbnMgbWlnaHQgd2FudCB0byBkaXNhYmxlL2VuYWJsZSBzcGF3bmluZyBvZiBhIGNoaWxkIGhlbHBlciBwcm9jZXNzCit3aGVuIHJlYnVpbGRpbmcgdGhlIHJlZ2lzdHJ5LiBTZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtcmVnaXN0cnktZm9yay1pcy1lbmFibGVkIiB0aXRsZT0iZ3N0X3JlZ2lzdHJ5X2ZvcmtfaXNfZW5hYmxlZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcmVnaXN0cnlfZm9ya19pc19lbmFibGVkKCk8L2NvZGU+PC9hPiBmb3IgbW9yZQoraW5mb3JtYXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVuYWJsZWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+d2hldGhlciByZWJ1aWxkaW5nIHRoZSByZWdpc3RyeSBjYW4gdXNlIGEgdGVtcG9yYXJ5IGNoaWxkIGhlbHBlciBwcm9jZXNzLjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjEwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdXBkYXRlLXJlZ2lzdHJ5Ij48L2E+PGgzPmdzdF91cGRhdGVfcmVnaXN0cnkgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3VwZGF0ZV9yZWdpc3RyeSAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitGb3JjZXMgR1N0cmVhbWVyIHRvIHJlLXNjYW4gaXRzIHBsdWdpbiBwYXRocyBhbmQgdXBkYXRlIHRoZSBkZWZhdWx0CitwbHVnaW4gcmVnaXN0cnkuCis8L3A+Cis8cD4KK0FwcGxpY2F0aW9ucyB3aWxsIGFsbW9zdCBuZXZlciBuZWVkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiwgaXQgaXMgb25seQordXNlZnVsIGlmIHRoZSBhcHBsaWNhdGlvbiBrbm93cyBuZXcgcGx1Z2lucyBoYXZlIGJlZW4gaW5zdGFsbGVkIChvciBvbGQKK29uZXMgcmVtb3ZlZCkgc2luY2UgdGhlIHN0YXJ0IG9mIHRoZSBhcHBsaWNhdGlvbiAob3IsIHRvIGJlIHByZWNpc2UsIHRoZQorZmlyc3QgY2FsbCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1pbml0IiB0aXRsZT0iZ3N0X2luaXQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2luaXQoKTwvY29kZT48L2E+KSBhbmQgdGhlIGFwcGxpY2F0aW9uIHdhbnRzIHRvIG1ha2UgdXNlIG9mIGFueQorbmV3bHktaW5zdGFsbGVkIHBsdWdpbnMgd2l0aG91dCByZXN0YXJ0aW5nIHRoZSBhcHBsaWNhdGlvbi4KKzwvcD4KKzxwPgorQXBwbGljYXRpb25zIHNob3VsZCBhc3N1bWUgdGhhdCB0aGUgcmVnaXN0cnkgdXBkYXRlIGlzIG5laXRoZXIgYXRvbWljIG5vcgordGhyZWFkLXNhZmUgYW5kIHNob3VsZCB0aGVyZWZvcmUgbm90IGhhdmUgYW55IGR5bmFtaWMgcGlwZWxpbmVzIHJ1bm5pbmcKKyhpbmNsdWRpbmcgdGhlIHBsYXliaW4gYW5kIGRlY29kZWJpbiBlbGVtZW50cykgYW5kIHNob3VsZCBhbHNvIG5vdCBjcmVhdGUKK2FueSBlbGVtZW50cyBvciBhY2Nlc3MgdGhlIEdTdHJlYW1lciByZWdpc3RyeSB3aGlsZSB0aGUgdXBkYXRlIGlzIGluCitwcm9ncmVzcy4KKzwvcD4KKzxwPgorTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gbWF5IGJsb2NrIGZvciBhIHNpZ25pZmljYW50IGFtb3VudCBvZiB0aW1lLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgcmVnaXN0cnkgaGFzIGJlZW4gdXBkYXRlZCBzdWNjZXNzZnVsbHkgKGRvZXMgbm90CitpbXBseSB0aGF0IHRoZXJlIHdlcmUgY2hhbmdlcyksIG90aGVyd2lzZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+LjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjEyPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNDFhM2MKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sCkBAIC0wLDAgKzEsMjMxIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0QXRvbWljUXVldWU8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwiIHRpdGxlPSJHc3QiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RCaW4uaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLnRvcF9vZl9wYWdlIj48L2E+R3N0QXRvbWljUXVldWU8L3NwYW4+PC9oMj4KKzxwPkdzdEF0b21pY1F1ZXVlIOKAlCBBbiBhdG9taWMgcXVldWUgaW1wbGVtZW50YXRpb248L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKKworICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjR3N0QXRvbWljUXVldWUiIHRpdGxlPSJHc3RBdG9taWNRdWV1ZSI+R3N0QXRvbWljUXVldWU8L2E+OworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI0dzdEF0b21pY1F1ZXVlIiB0aXRsZT0iR3N0QXRvbWljUXVldWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QXRvbWljUXVldWU8L3NwYW4+PC9hPiAqICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNnc3QtYXRvbWljLXF1ZXVlLW5ldyIgdGl0bGU9ImdzdF9hdG9taWNfcXVldWVfbmV3ICgpIj5nc3RfYXRvbWljX3F1ZXVlX25ldzwvYT4gICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluaXRpYWxfc2l6ZTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNnc3QtYXRvbWljLXF1ZXVlLXJlZiIgdGl0bGU9ImdzdF9hdG9taWNfcXVldWVfcmVmICgpIj5nc3RfYXRvbWljX3F1ZXVlX3JlZjwvYT4gICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjR3N0QXRvbWljUXVldWUiIHRpdGxlPSJHc3RBdG9taWNRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEF0b21pY1F1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI2dzdC1hdG9taWMtcXVldWUtdW5yZWYiIHRpdGxlPSJnc3RfYXRvbWljX3F1ZXVlX3VucmVmICgpIj5nc3RfYXRvbWljX3F1ZXVlX3VucmVmPC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjR3N0QXRvbWljUXVldWUiIHRpdGxlPSJHc3RBdG9taWNRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEF0b21pY1F1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI2dzdC1hdG9taWMtcXVldWUtcHVzaCIgdGl0bGU9ImdzdF9hdG9taWNfcXVldWVfcHVzaCAoKSI+Z3N0X2F0b21pY19xdWV1ZV9wdXNoPC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI0dzdEF0b21pY1F1ZXVlIiB0aXRsZT0iR3N0QXRvbWljUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBdG9taWNRdWV1ZTwvc3Bhbj48L2E+ICpxdWV1ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGRhdGE8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjZ3N0LWF0b21pYy1xdWV1ZS1wZWVrIiB0aXRsZT0iZ3N0X2F0b21pY19xdWV1ZV9wZWVrICgpIj5nc3RfYXRvbWljX3F1ZXVlX3BlZWs8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjR3N0QXRvbWljUXVldWUiIHRpdGxlPSJHc3RBdG9taWNRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEF0b21pY1F1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI2dzdC1hdG9taWMtcXVldWUtcG9wIiB0aXRsZT0iZ3N0X2F0b21pY19xdWV1ZV9wb3AgKCkiPmdzdF9hdG9taWNfcXVldWVfcG9wPC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNHc3RBdG9taWNRdWV1ZSIgdGl0bGU9IkdzdEF0b21pY1F1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QXRvbWljUXVldWU8L3NwYW4+PC9hPiAqcXVldWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjZ3N0LWF0b21pYy1xdWV1ZS1sZW5ndGgiIHRpdGxlPSJnc3RfYXRvbWljX3F1ZXVlX2xlbmd0aCAoKSI+Z3N0X2F0b21pY19xdWV1ZV9sZW5ndGg8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI0dzdEF0b21pY1F1ZXVlIiB0aXRsZT0iR3N0QXRvbWljUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBdG9taWNRdWV1ZTwvc3Bhbj48L2E+ICpxdWV1ZTwvY29kZT48L2VtPik7Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPgorVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNHc3RBdG9taWNRdWV1ZSIgdGl0bGU9IkdzdEF0b21pY1F1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QXRvbWljUXVldWU8L3NwYW4+PC9hPiBvYmplY3QgaW1wbGVtZW50cyBhIHF1ZXVlIHRoYXQgY2FuIGJlIHVzZWQgZnJvbSBtdWx0aXBsZQordGhyZWFkcyB3aXRob3V0IHBlcmZvcm1pbmcgYW55IGJsb2NraW5nIG9wZXJhdGlvbnMuCis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0QXRvbWljUXVldWUiPjwvYT48aDM+R3N0QXRvbWljUXVldWU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgc3RydWN0IF9Hc3RBdG9taWNRdWV1ZSBHc3RBdG9taWNRdWV1ZTs8L3ByZT4KKzxwPgorT3BhcXVlIGF0b21pYyBkYXRhIHF1ZXVlLgorPC9wPgorPHA+CitVc2UgdGhlIGFjZXNzb3IgZnVuY3Rpb25zIHRvIGdldCB0aGUgc3RvcmVkIHZhbHVlcy4KKzwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWF0b21pYy1xdWV1ZS1uZXciPjwvYT48aDM+Z3N0X2F0b21pY19xdWV1ZV9uZXcgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNHc3RBdG9taWNRdWV1ZSIgdGl0bGU9IkdzdEF0b21pY1F1ZXVlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEF0b21pY1F1ZXVlPC9zcGFuPjwvYT4gKiAgICBnc3RfYXRvbWljX3F1ZXVlX25ldyAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5pdGlhbF9zaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlIGEgbmV3IGF0b21pYyBxdWV1ZSBpbnN0YW5jZS4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluaXRpYWxfc2l6ZTwvY29kZT48L2VtPiB3aWxsIGJlIHJvdW5kZWQgdXAgdG8gdGhlCituZWFyZXN0IHBvd2VyIG9mIDIgYW5kIHVzZWQgYXMgdGhlIGluaXRpYWwgc2l6ZSBvZiB0aGUgcXVldWUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5pdGlhbF9zaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmluaXRpYWwgcXVldWUgc2l6ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNHc3RBdG9taWNRdWV1ZSIgdGl0bGU9IkdzdEF0b21pY1F1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QXRvbWljUXVldWU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWF0b21pYy1xdWV1ZS1yZWYiPjwvYT48aDM+Z3N0X2F0b21pY19xdWV1ZV9yZWYgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2F0b21pY19xdWV1ZV9yZWYgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjR3N0QXRvbWljUXVldWUiIHRpdGxlPSJHc3RBdG9taWNRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEF0b21pY1F1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSW5jcmVhc2UgdGhlIHJlZmNvdW50IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWV1ZTwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVldWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjR3N0QXRvbWljUXVldWUiIHRpdGxlPSJHc3RBdG9taWNRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEF0b21pY1F1ZXVlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYXRvbWljLXF1ZXVlLXVucmVmIj48L2E+PGgzPmdzdF9hdG9taWNfcXVldWVfdW5yZWYgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2F0b21pY19xdWV1ZV91bnJlZiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjR3N0QXRvbWljUXVldWUiIHRpdGxlPSJHc3RBdG9taWNRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEF0b21pY1F1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVW5yZWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXVlPC9jb2RlPjwvZW0+IGFuZCBmcmVlIHRoZSBtZW1vcnkgd2hlbiB0aGUgcmVmY291bnQgcmVhY2hlcyAwLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWV1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNHc3RBdG9taWNRdWV1ZSIgdGl0bGU9IkdzdEF0b21pY1F1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QXRvbWljUXVldWU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzM8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1hdG9taWMtcXVldWUtcHVzaCI+PC9hPjxoMz5nc3RfYXRvbWljX3F1ZXVlX3B1c2ggKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2F0b21pY19xdWV1ZV9wdXNoICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjR3N0QXRvbWljUXVldWUiIHRpdGxlPSJHc3RBdG9taWNRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEF0b21pY1F1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0FwcGVuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPiB0byB0aGUgdGFpbCBvZiB0aGUgcXVldWUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVldWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjR3N0QXRvbWljUXVldWUiIHRpdGxlPSJHc3RBdG9taWNRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEF0b21pY1F1ZXVlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZGF0YTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzM8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1hdG9taWMtcXVldWUtcGVlayI+PC9hPjxoMz5nc3RfYXRvbWljX3F1ZXVlX3BlZWsgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2F0b21pY19xdWV1ZV9wZWVrICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjR3N0QXRvbWljUXVldWUiIHRpdGxlPSJHc3RBdG9taWNRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEF0b21pY1F1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUGVlayB0aGUgaGVhZCBlbGVtZW50IG9mIHRoZSBxdWV1ZSB3aXRob3V0IHJlbW92aW5nIGl0IGZyb20gdGhlIHF1ZXVlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI0dzdEF0b21pY1F1ZXVlIiB0aXRsZT0iR3N0QXRvbWljUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBdG9taWNRdWV1ZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgaGVhZCBlbGVtZW50IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWV1ZTwvY29kZT48L2VtPiBvciBOVUxMIHdoZW4gdGhlIHF1ZXVlIGlzIGVtcHR5LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzM8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1hdG9taWMtcXVldWUtcG9wIj48L2E+PGgzPmdzdF9hdG9taWNfcXVldWVfcG9wICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9hdG9taWNfcXVldWVfcG9wICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI0dzdEF0b21pY1F1ZXVlIiB0aXRsZT0iR3N0QXRvbWljUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBdG9taWNRdWV1ZTwvc3Bhbj48L2E+ICpxdWV1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCB0aGUgaGVhZCBlbGVtZW50IG9mIHRoZSBxdWV1ZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWV1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNHc3RBdG9taWNRdWV1ZSIgdGl0bGU9IkdzdEF0b21pY1F1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QXRvbWljUXVldWU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGhlYWQgZWxlbWVudCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVldWU8L2NvZGU+PC9lbT4gb3IgTlVMTCB3aGVuIHRoZSBxdWV1ZSBpcyBlbXB0eS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYXRvbWljLXF1ZXVlLWxlbmd0aCI+PC9hPjxoMz5nc3RfYXRvbWljX3F1ZXVlX2xlbmd0aCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICBnc3RfYXRvbWljX3F1ZXVlX2xlbmd0aCAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNHc3RBdG9taWNRdWV1ZSIgdGl0bGU9IkdzdEF0b21pY1F1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QXRvbWljUXVldWU8L3NwYW4+PC9hPiAqcXVldWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgdGhlIGFtb3VudCBvZiBpdGVtcyBpbiB0aGUgcXVldWUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVldWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjR3N0QXRvbWljUXVldWUiIHRpdGxlPSJHc3RBdG9taWNRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEF0b21pY1F1ZXVlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHF1ZXVlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzM8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzI5OWRlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwKQEAgLTAsMCArMSwxOTgzIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0QnVmZmVyPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0QmluLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdEJ1ZmZlci5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3RCdWZmZXIuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEJ1ZmZlciI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1Hc3RCdWZmZXIudG9wX29mX3BhZ2UiPjwvYT5Hc3RCdWZmZXI8L3NwYW4+PC9oMj4KKzxwPkdzdEJ1ZmZlciDigJQgRGF0YS1wYXNzaW5nIGJ1ZmZlciB0eXBlLCBzdXBwb3J0aW5nIHN1Yi1idWZmZXJzLjwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RCdWZmZXIuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKKworc3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEJ1ZmZlckZsYWdzIj5Hc3RCdWZmZXJGbGFnczwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyQ29weUZsYWdzIiB0aXRsZT0iZW51bSBHc3RCdWZmZXJDb3B5RmxhZ3MiPkdzdEJ1ZmZlckNvcHlGbGFnczwvYT47CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHUzpDQVBTIiB0aXRsZT0iR1NUX0JVRkZFUl9GTEFHUygpIj5HU1RfQlVGRkVSX0ZMQUdTPC9hPiAgICAgICAgICAgICAgICAgICAgKGJ1ZikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUctSVMtU0VUOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUKCkiPkdTVF9CVUZGRVJfRkxBR19JU19TRVQ8L2E+ICAgICAgICAgICAgICAoYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZykKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUctU0VUOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX0ZMQUdfU0VUKCkiPkdTVF9CVUZGRVJfRkxBR19TRVQ8L2E+ICAgICAgICAgICAgICAgICAoYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZykKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUctVU5TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfRkxBR19VTlNFVCgpIj5HU1RfQlVGRkVSX0ZMQUdfVU5TRVQ8L2E+ICAgICAgICAgICAgICAgKGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULU1FVEEtVElNSU5HLUlORk86Q0FQUyIgdGl0bGU9IkdTVF9NRVRBX1RJTUlOR19JTkZPIj5HU1RfTUVUQV9USU1JTkdfSU5GTzwvYT4KK3N0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RNZXRhVGltaW5nIiB0aXRsZT0ic3RydWN0IEdzdE1ldGFUaW1pbmciPkdzdE1ldGFUaW1pbmc8L2E+OworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItVElNRVNUQU1QOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX1RJTUVTVEFNUCgpIj5HU1RfQlVGRkVSX1RJTUVTVEFNUDwvYT4gICAgICAgICAgICAgICAgKGJ1ZikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLURVUkFUSU9OOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX0RVUkFUSU9OKCkiPkdTVF9CVUZGRVJfRFVSQVRJT048L2E+ICAgICAgICAgICAgICAgICAoYnVmKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItT0ZGU0VUOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX09GRlNFVCgpIj5HU1RfQlVGRkVSX09GRlNFVDwvYT4gICAgICAgICAgICAgICAgICAgKGJ1ZikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLU9GRlNFVC1FTkQ6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfT0ZGU0VUX0VORCgpIj5HU1RfQlVGRkVSX09GRlNFVF9FTkQ8L2E+ICAgICAgICAgICAgICAgKGJ1ZikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLU9GRlNFVC1OT05FOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX09GRlNFVF9OT05FIj5HU1RfQlVGRkVSX09GRlNFVF9OT05FPC9hPgorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItRFVSQVRJT04tSVMtVkFMSUQ6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfRFVSQVRJT05fSVNfVkFMSUQoKSI+R1NUX0JVRkZFUl9EVVJBVElPTl9JU19WQUxJRDwvYT4gICAgICAgIChidWZmZXIpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1USU1FU1RBTVAtSVMtVkFMSUQ6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfVElNRVNUQU1QX0lTX1ZBTElEKCkiPkdTVF9CVUZGRVJfVElNRVNUQU1QX0lTX1ZBTElEPC9hPiAgICAgICAoYnVmZmVyKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItT0ZGU0VULUlTLVZBTElEOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX09GRlNFVF9JU19WQUxJRCgpIj5HU1RfQlVGRkVSX09GRlNFVF9JU19WQUxJRDwvYT4gICAgICAgICAgKGJ1ZmZlcikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLU9GRlNFVC1FTkQtSVMtVkFMSUQ6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfT0ZGU0VUX0VORF9JU19WQUxJRCgpIj5HU1RfQlVGRkVSX09GRlNFVF9FTkRfSVNfVkFMSUQ8L2E+ICAgICAgKGJ1ZmZlcikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUlTLURJU0NPTlQ6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfSVNfRElTQ09OVCgpIj5HU1RfQlVGRkVSX0lTX0RJU0NPTlQ8L2E+ICAgICAgICAgICAgICAgKGJ1ZmZlcikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLVRSQUNFLU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfVFJBQ0VfTkFNRSI+R1NUX0JVRkZFUl9UUkFDRV9OQU1FPC9hPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICogICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbmV3IiB0aXRsZT0iZ3N0X2J1ZmZlcl9uZXcgKCkiPmdzdF9idWZmZXJfbmV3PC9hPiAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1uZXctYW5kLWFsbG9jIiB0aXRsZT0iZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jKCkiPmdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYzwvYT4gICAgICAgICAgICAocykKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLW5ldy1hbGxvY2F0ZSIgdGl0bGU9ImdzdF9idWZmZXJfbmV3X2FsbG9jYXRlICgpIj5nc3RfYnVmZmVyX25ld19hbGxvY2F0ZTwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdEFsbG9jYXRvciIgdGl0bGU9IkdzdEFsbG9jYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRvcjwvc3Bhbj48L2E+ICphbGxvY2F0b3I8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gYWxpZ248L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICogICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbmV3LXdyYXBwZWQiIHRpdGxlPSJnc3RfYnVmZmVyX25ld193cmFwcGVkICgpIj5nc3RfYnVmZmVyX25ld193cmFwcGVkPC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGRhdGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLW5ldy13cmFwcGVkLWZ1bGwiIHRpdGxlPSJnc3RfYnVmZmVyX25ld193cmFwcGVkX2Z1bGwgKCkiPmdzdF9idWZmZXJfbmV3X3dyYXBwZWRfZnVsbDwvYT4gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLU1pc2NlbGxhbmVvdXMtVXRpbGl0eS1GdW5jdGlvbnMuaHRtbCNHRnJlZUZ1bmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRnJlZUZ1bmM8L3NwYW4+PC9hPiBmcmVlX2Z1bmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXJlZiIgdGl0bGU9ImdzdF9idWZmZXJfcmVmICgpIj5nc3RfYnVmZmVyX3JlZjwvYT4gICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXVucmVmIiB0aXRsZT0iZ3N0X2J1ZmZlcl91bnJlZiAoKSI+Z3N0X2J1ZmZlcl91bnJlZjwvYT4gICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3NpemU8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1nZXQtc2l6ZXMiIHRpdGxlPSJnc3RfYnVmZmVyX2dldF9zaXplcyAoKSI+Z3N0X2J1ZmZlcl9nZXRfc2l6ZXM8L2E+ICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+ICpvZmZzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiAqbWF4c2l6ZTwvY29kZT48L2VtPik7CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1nZXQtc2l6ZSIgdGl0bGU9ImdzdF9idWZmZXJfZ2V0X3NpemUoKSI+Z3N0X2J1ZmZlcl9nZXRfc2l6ZTwvYT4gICAgICAgICAgICAgICAgIChiKQorPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItcmVzaXplIiB0aXRsZT0iZ3N0X2J1ZmZlcl9yZXNpemUgKCkiPmdzdF9idWZmZXJfcmVzaXplPC9hPiAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzc2l6ZTwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItc2V0LXNpemUiIHRpdGxlPSJnc3RfYnVmZmVyX3NldF9zaXplKCkiPmdzdF9idWZmZXJfc2V0X3NpemU8L2E+ICAgICAgICAgICAgICAgICAoYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMpCis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1uLW1lbW9yeSIgdGl0bGU9ImdzdF9idWZmZXJfbl9tZW1vcnkgKCkiPmdzdF9idWZmZXJfbl9tZW1vcnk8L2E+ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItdGFrZS1tZW1vcnkiIHRpdGxlPSJnc3RfYnVmZmVyX3Rha2VfbWVtb3J5ICgpIj5nc3RfYnVmZmVyX3Rha2VfbWVtb3J5PC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGlkeDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5IiB0aXRsZT0ic3RydWN0IEdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXBlZWstbWVtb3J5IiB0aXRsZT0iZ3N0X2J1ZmZlcl9wZWVrX21lbW9yeSAoKSI+Z3N0X2J1ZmZlcl9wZWVrX21lbW9yeTwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGlkeDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1hcEZsYWdzIiB0aXRsZT0iZW51bSBHc3RNYXBGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1hcEZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4pOworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItcmVtb3ZlLW1lbW9yeSIgdGl0bGU9ImdzdF9idWZmZXJfcmVtb3ZlX21lbW9yeSgpIj5nc3RfYnVmZmVyX3JlbW92ZV9tZW1vcnk8L2E+ICAgICAgICAgICAgKGIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKQorPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItcmVtb3ZlLW1lbW9yeS1yYW5nZSIgdGl0bGU9ImdzdF9idWZmZXJfcmVtb3ZlX21lbW9yeV9yYW5nZSAoKSI+Z3N0X2J1ZmZlcl9yZW1vdmVfbWVtb3J5X3JhbmdlPC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGlkeDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGxlbmd0aDwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKiAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1qb2luIiB0aXRsZT0iZ3N0X2J1ZmZlcl9qb2luICgpIj5nc3RfYnVmZmVyX2pvaW48L2E+ICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmMTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmMjwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKiAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1tZXJnZSIgdGl0bGU9ImdzdF9idWZmZXJfbWVyZ2UgKCkiPmdzdF9idWZmZXJfbWVyZ2U8L2E+ICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWYxPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWYyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLW1hcCIgdGl0bGU9ImdzdF9idWZmZXJfbWFwICgpIj5nc3RfYnVmZmVyX21hcDwvYT4gICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gKnNpemU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiAqbWF4c2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1hcEZsYWdzIiB0aXRsZT0iZW51bSBHc3RNYXBGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1hcEZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItdW5tYXAiIHRpdGxlPSJnc3RfYnVmZmVyX3VubWFwICgpIj5nc3RfYnVmZmVyX3VubWFwPC9hPiAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1tZW1jbXAiIHRpdGxlPSJnc3RfYnVmZmVyX21lbWNtcCAoKSI+Z3N0X2J1ZmZlcl9tZW1jbXA8L2E+ICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NvbnN0cG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjb25zdHBvaW50ZXI8L3NwYW4+PC9hPiBtZW08L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nc2l6ZTwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWV4dHJhY3QiIHRpdGxlPSJnc3RfYnVmZmVyX2V4dHJhY3QgKCkiPmdzdF9idWZmZXJfZXh0cmFjdDwvYT4gICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBkZXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3NpemU8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1maWxsIiB0aXRsZT0iZ3N0X2J1ZmZlcl9maWxsICgpIj5nc3RfYnVmZmVyX2ZpbGw8L2E+ICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gb2Zmc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY29uc3Rwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NvbnN0cG9pbnRlcjwvc3Bhbj48L2E+IHNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdzaXplPC9zcGFuPjwvYT4gICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbWVtc2V0IiB0aXRsZT0iZ3N0X2J1ZmZlcl9tZW1zZXQgKCkiPmdzdF9idWZmZXJfbWVtc2V0PC9hPiAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItQ09QWS1NRVRBREFUQTpDQVBTIiB0aXRsZT0iR1NUX0JVRkZFUl9DT1BZX01FVEFEQVRBIj5HU1RfQlVGRkVSX0NPUFlfTUVUQURBVEE8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1DT1BZLUFMTDpDQVBTIiB0aXRsZT0iR1NUX0JVRkZFUl9DT1BZX0FMTCI+R1NUX0JVRkZFUl9DT1BZX0FMTDwvYT4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWNvcHkiIHRpdGxlPSJnc3RfYnVmZmVyX2NvcHkgKCkiPmdzdF9idWZmZXJfY29weTwvYT4gICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWY8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItY29weS1pbnRvIiB0aXRsZT0iZ3N0X2J1ZmZlcl9jb3B5X2ludG8gKCkiPmdzdF9idWZmZXJfY29weV9pbnRvPC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpkZXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXJDb3B5RmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEJ1ZmZlckNvcHlGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckNvcHlGbGFnczwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gb2Zmc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKiAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1jb3B5LXJlZ2lvbiIgdGl0bGU9ImdzdF9idWZmZXJfY29weV9yZWdpb24gKCkiPmdzdF9idWZmZXJfY29weV9yZWdpb248L2E+ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpwYXJlbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXJDb3B5RmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEJ1ZmZlckNvcHlGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckNvcHlGbGFnczwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gb2Zmc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1pcy13cml0YWJsZSIgdGl0bGU9ImdzdF9idWZmZXJfaXNfd3JpdGFibGUoKSI+Z3N0X2J1ZmZlcl9pc193cml0YWJsZTwvYT4gICAgICAgICAgICAgIChidWYpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1tYWtlLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlKCkiPmdzdF9idWZmZXJfbWFrZV93cml0YWJsZTwvYT4gICAgICAgICAgICAoYnVmKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItcmVwbGFjZSIgdGl0bGU9ImdzdF9idWZmZXJfcmVwbGFjZSgpIj5nc3RfYnVmZmVyX3JlcGxhY2U8L2E+ICAgICAgICAgICAgICAgICAgKG9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYnVmKQorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItaXMtc3Bhbi1mYXN0IiB0aXRsZT0iZ3N0X2J1ZmZlcl9pc19zcGFuX2Zhc3QgKCkiPmdzdF9idWZmZXJfaXNfc3Bhbl9mYXN0PC9hPiAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWYxPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWYyPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXNwYW4iIHRpdGxlPSJnc3RfYnVmZmVyX3NwYW4gKCkiPmdzdF9idWZmZXJfc3BhbjwvYT4gICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWYxPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gb2Zmc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWYyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhIiB0aXRsZT0ic3RydWN0IEdzdE1ldGEiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWV0YTwvc3Bhbj48L2E+ICogICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1nZXQtbWV0YSIgdGl0bGU9ImdzdF9idWZmZXJfZ2V0X21ldGEgKCkiPmdzdF9idWZmZXJfZ2V0X21ldGE8L2E+ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YUluZm8iIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YUluZm8iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhSW5mbzwvc3Bhbj48L2E+ICppbmZvPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXRhPC9zcGFuPjwvYT4gKiAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWFkZC1tZXRhIiB0aXRsZT0iZ3N0X2J1ZmZlcl9hZGRfbWV0YSAoKSI+Z3N0X2J1ZmZlcl9hZGRfbWV0YTwvYT4gICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhSW5mbyIgdGl0bGU9InN0cnVjdCBHc3RNZXRhSW5mbyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGFJbmZvPC9zcGFuPjwvYT4gKmluZm88L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBwYXJhbXM8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItcmVtb3ZlLW1ldGEiIHRpdGxlPSJnc3RfYnVmZmVyX3JlbW92ZV9tZXRhICgpIj5nc3RfYnVmZmVyX3JlbW92ZV9tZXRhPC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGE8L3NwYW4+PC9hPiAqbWV0YTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhIiB0aXRsZT0ic3RydWN0IEdzdE1ldGEiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWV0YTwvc3Bhbj48L2E+ICogICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1pdGVyYXRlLW1ldGEiIHRpdGxlPSJnc3RfYnVmZmVyX2l0ZXJhdGVfbWV0YSAoKSI+Z3N0X2J1ZmZlcl9pdGVyYXRlX21ldGE8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICpzdGF0ZTwvY29kZT48L2VtPik7CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1hZGQtbWV0YS10aW1pbmciIHRpdGxlPSJnc3RfYnVmZmVyX2FkZF9tZXRhX3RpbWluZygpIj5nc3RfYnVmZmVyX2FkZF9tZXRhX3RpbWluZzwvYT4gICAgICAgICAgKGIpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1nZXQtbWV0YS10aW1pbmciIHRpdGxlPSJnc3RfYnVmZmVyX2dldF9tZXRhX3RpbWluZygpIj5nc3RfYnVmZmVyX2dldF9tZXRhX3RpbWluZzwvYT4gICAgICAgICAgKGIpCitjb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhSW5mbyIgdGl0bGU9InN0cnVjdCBHc3RNZXRhSW5mbyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXRhSW5mbzwvc3Bhbj48L2E+ICogPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtbWV0YS10aW1pbmctZ2V0LWluZm8iIHRpdGxlPSJnc3RfbWV0YV90aW1pbmdfZ2V0X2luZm8gKCkiPmdzdF9tZXRhX3RpbWluZ19nZXRfaW5mbzwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK0J1ZmZlcnMgYXJlIHRoZSBiYXNpYyB1bml0IG9mIGRhdGEgdHJhbnNmZXIgaW4gR1N0cmVhbWVyLiAgVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+Cit0eXBlIHByb3ZpZGVzIGFsbCB0aGUgc3RhdGUgbmVjZXNzYXJ5IHRvIGRlZmluZSB0aGUgcmVnaW9ucyBvZiBtZW1vcnkgYXMKK3BhcnQgb2YgYSBzdHJlYW0uIFJlZ2lvbiBjb3BpZXMgYXJlIGFsc28gc3VwcG9ydGVkLCBhbGxvd2luZyBhIHNtYWxsZXIKK3JlZ2lvbiBvZiBhIGJ1ZmZlciB0byBiZWNvbWUgaXRzIG93biBidWZmZXIsIHdpdGggbWVjaGFuaXNtcyBpbiBwbGFjZSB0bworZW5zdXJlIHRoYXQgbmVpdGhlciBtZW1vcnkgc3BhY2UgZ29lcyBhd2F5IHByZW1hdHVyZWx5LgorPC9wPgorPHA+CitCdWZmZXJzIGFyZSB1c3VhbGx5IGNyZWF0ZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbmV3IiB0aXRsZT0iZ3N0X2J1ZmZlcl9uZXcgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9uZXcoKTwvY29kZT48L2E+LiBBZnRlciBhIGJ1ZmZlciBoYXMgYmVlbgorY3JlYXRlZCBvbmUgd2lsbCB0eXBpY2FsbHkgYWxsb2NhdGUgbWVtb3J5IGZvciBpdCBhbmQgc2V0IHRoZSBzaXplIG9mIHRoZQorYnVmZmVyIGRhdGEuICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgY3JlYXRlcyBhIGJ1ZmZlciB0aGF0IGNhbiBob2xkIGEgZ2l2ZW4KK3ZpZGVvIGZyYW1lIHdpdGggYSBnaXZlbiB3aWR0aCwgaGVpZ2h0IGFuZCBiaXRzIHBlciBwbGFuZS4KKzwvcD4KKzxkaXYgY2xhc3M9ImV4YW1wbGUiPgorPGEgbmFtZT0iaWQ0ODMyNzYiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkV4YW1wbGXCoDMuwqBDcmVhdGluZyBhIGJ1ZmZlciBmb3IgYSB2aWRlbyBmcmFtZTwvYj48L3A+Cis8ZGl2IGNsYXNzPSJleGFtcGxlLWNvbnRlbnRzIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CisgIEdzdEJ1ZmZlciAqYnVmZmVyOworICBnaW50IHNpemUsIHdpZHRoLCBoZWlnaHQsIGJwcDsKKyAgLi4uCisgIHNpemUgPSB3aWR0aCAqIGhlaWdodCAqIGJwcDsKKyAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisgIEdTVF9CVUZGRVJfU0laRSAoYnVmZmVyKSA9IHNpemU7CisgIEdTVF9CVUZGRVJfTUFMTE9DREFUQSAoYnVmZmVyKSA9IGdfbWFsbG9jIChzaXplKTsKKyAgR1NUX0JVRkZFUl9EQVRBIChidWZmZXIpID0gR1NUX0JVRkZFUl9NQUxMT0NEQVRBIChidWZmZXIpOworICAuLi4KKyAgPC9wcmU+PC9kaXY+Cis8L2Rpdj4KKzxwPjxiciBjbGFzcz0iZXhhbXBsZS1icmVhayI+Cis8L3A+Cis8cD4KK0FsdGVybmF0aXZlbHksIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbmV3LWFuZC1hbGxvYyIgdGl0bGU9ImdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYygpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYygpPC9jb2RlPjwvYT4KK3RvIGNyZWF0ZSBhIGJ1ZmZlciB3aXRoIHByZWFsbG9jYXRlZCBkYXRhIG9mIGEgZ2l2ZW4gc2l6ZS4KKzwvcD4KKzxwPgorVGhlIGRhdGEgcG9pbnRlZCB0byBieSB0aGUgYnVmZmVyIGNhbiBiZSByZXRyaWV2ZWQgd2l0aCB0aGUgPGEgaHJlZj0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyL2h0bWwvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItREFUQTpDQVBTIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdTVF9CVUZGRVJfREFUQSgpPC9jb2RlPjwvYT4KK21hY3JvLiBUaGUgc2l6ZSBvZiB0aGUgZGF0YSBjYW4gYmUgZm91bmQgd2l0aCA8YSBocmVmPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXIvaHRtbC9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1TSVpFOkNBUFMiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R1NUX0JVRkZFUl9TSVpFKCk8L2NvZGU+PC9hPi4gRm9yIGJ1ZmZlcnMKK29mIHNpemUgMCwgdGhlIGRhdGEgcG9pbnRlciBpcyB1bmRlZmluZWQgKHVzdWFsbHkgTlVMTCkgYW5kIHNob3VsZCBuZXZlciBiZSB1c2VkLgorPC9wPgorPHA+CitJZiBhbiBlbGVtZW50IGtub3dzIHdoYXQgcGFkIHlvdSB3aWxsIHB1c2ggdGhlIGJ1ZmZlciBvdXQgb24sIGl0IHNob3VsZCB1c2UKKzxhIGhyZWY9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sL0dzdFBhZC5odG1sI2dzdC1wYWQtYWxsb2MtYnVmZmVyIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfYWxsb2NfYnVmZmVyKCk8L2NvZGU+PC9hPiBpbnN0ZWFkIHRvIGNyZWF0ZSBhIGJ1ZmZlci4gIFRoaXMgYWxsb3dzIGRvd25zdHJlYW0KK2VsZW1lbnRzIHRvIHByb3ZpZGUgc3BlY2lhbCBidWZmZXJzIHRvIHdyaXRlIGluLCBsaWtlIGhhcmR3YXJlIGJ1ZmZlcnMuCis8L3A+Cis8cD4KK0EgYnVmZmVyIGhhcyBhIHBvaW50ZXIgdG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gZGVzY3JpYmluZyB0aGUgbWVkaWEgdHlwZSBvZiB0aGUgZGF0YQoraW4gdGhlIGJ1ZmZlci4gQXR0YWNoIGNhcHMgdG8gdGhlIGJ1ZmZlciB3aXRoIDxhIGhyZWY9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXNldC1jYXBzIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfc2V0X2NhcHMoKTwvY29kZT48L2E+OyB0aGlzCitpcyB0eXBpY2FsbHkgZG9uZSBiZWZvcmUgcHVzaGluZyBvdXQgYSBidWZmZXIgdXNpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcHVzaCIgdGl0bGU9ImdzdF9wYWRfcHVzaCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3B1c2goKTwvY29kZT48L2E+IHNvIHRoYXQKK3RoZSBkb3duc3RyZWFtIGVsZW1lbnQga25vd3MgdGhlIHR5cGUgb2YgdGhlIGJ1ZmZlci4KKzwvcD4KKzxwPgorQSBidWZmZXIgd2lsbCB1c3VhbGx5IGhhdmUgYSB0aW1lc3RhbXAsIGFuZCBhIGR1cmF0aW9uLCBidXQgbmVpdGhlciBvZiB0aGVzZQorYXJlIGd1YXJhbnRlZWQgKHRoZXkgbWF5IGJlIHNldCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stVElNRS1OT05FOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfVElNRV9OT05FIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0NMT0NLX1RJTUVfTk9ORTwvc3Bhbj48L2E+KS4gV2hlbmV2ZXIgYQorbWVhbmluZ2Z1bCB2YWx1ZSBjYW4gYmUgZ2l2ZW4gZm9yIHRoZXNlLCB0aGV5IHNob3VsZCBiZSBzZXQuIFRoZSB0aW1lc3RhbXAKK2FuZCBkdXJhdGlvbiBhcmUgbWVhc3VyZWQgaW4gbmFub3NlY29uZHMgKHRoZXkgYXJlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHZhbHVlcykuCis8L3A+Cis8cD4KK0EgYnVmZmVyIGNhbiBhbHNvIGhhdmUgb25lIG9yIGJvdGggb2YgYSBzdGFydCBhbmQgYW4gZW5kIG9mZnNldC4gVGhlc2UgYXJlCittZWRpYS10eXBlIHNwZWNpZmljLiBGb3IgdmlkZW8gYnVmZmVycywgdGhlIHN0YXJ0IG9mZnNldCB3aWxsIGdlbmVyYWxseSBiZQordGhlIGZyYW1lIG51bWJlci4gRm9yIGF1ZGlvIGJ1ZmZlcnMsIGl0IHdpbGwgYmUgdGhlIG51bWJlciBvZiBzYW1wbGVzCitwcm9kdWNlZCBzbyBmYXIuIEZvciBjb21wcmVzc2VkIGRhdGEsIGl0IGNvdWxkIGJlIHRoZSBieXRlIG9mZnNldCBpbiBhCitzb3VyY2Ugb3IgZGVzdGluYXRpb24gZmlsZS4gTGlrZXdpc2UsIHRoZSBlbmQgb2Zmc2V0IHdpbGwgYmUgdGhlIG9mZnNldCBvZgordGhlIGVuZCBvZiB0aGUgYnVmZmVyLiBUaGVzZSBjYW4gb25seSBiZSBtZWFuaW5nZnVsbHkgaW50ZXJwcmV0ZWQgaWYgeW91Citrbm93IHRoZSBtZWRpYSB0eXBlIG9mIHRoZSBidWZmZXIgKHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gc2V0IG9uIGl0KS4gRWl0aGVyIG9yIGJvdGgKK2NhbiBiZSBzZXQgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLU9GRlNFVC1OT05FOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX09GRlNFVF9OT05FIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0JVRkZFUl9PRkZTRVRfTk9ORTwvc3Bhbj48L2E+LgorPC9wPgorPHA+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItcmVmIiB0aXRsZT0iZ3N0X2J1ZmZlcl9yZWYgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9yZWYoKTwvY29kZT48L2E+IGlzIHVzZWQgdG8gaW5jcmVhc2UgdGhlIHJlZmNvdW50IG9mIGEgYnVmZmVyLiBUaGlzIG11c3QgYmUKK2RvbmUgd2hlbiB5b3Ugd2FudCB0byBrZWVwIGEgaGFuZGxlIHRvIHRoZSBidWZmZXIgYWZ0ZXIgcHVzaGluZyBpdCB0byB0aGUKK25leHQgZWxlbWVudC4KKzwvcD4KKzxwPgorVG8gZWZmaWNpZW50bHkgY3JlYXRlIGEgc21hbGxlciBidWZmZXIgb3V0IG9mIGFuIGV4aXN0aW5nIG9uZSwgeW91IGNhbgordXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1jb3B5LXJlZ2lvbiIgdGl0bGU9ImdzdF9idWZmZXJfY29weV9yZWdpb24gKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbigpPC9jb2RlPjwvYT4uCis8L3A+Cis8cD4KK0lmIGEgcGx1Zy1pbiB3YW50cyB0byBtb2RpZnkgdGhlIGJ1ZmZlciBkYXRhIG9yIG1ldGFkYXRhIGluLXBsYWNlLCBpdCBzaG91bGQKK2ZpcnN0IG9idGFpbiBhIGJ1ZmZlciB0aGF0IGlzIHNhZmUgdG8gbW9kaWZ5IGJ5IHVzaW5nCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbWFrZS13cml0YWJsZSIgdGl0bGU9ImdzdF9idWZmZXJfbWFrZV93cml0YWJsZSgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfbWFrZV93cml0YWJsZSgpPC9jb2RlPjwvYT4uICBUaGlzIGZ1bmN0aW9uIGlzIG9wdGltaXplZCBzbyB0aGF0IGEgY29weSB3aWxsCitvbmx5IGJlIG1hZGUgd2hlbiBpdCBpcyBuZWNlc3NhcnkuCis8L3A+Cis8cD4KK1NldmVyYWwgZmxhZ3Mgb2YgdGhlIGJ1ZmZlciBjYW4gYmUgc2V0IGFuZCB1bnNldCB3aXRoIHRoZQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUctU0VUOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX0ZMQUdfU0VUKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R1NUX0JVRkZFUl9GTEFHX1NFVCgpPC9jb2RlPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHLVVOU0VUOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX0ZMQUdfVU5TRVQoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5HU1RfQlVGRkVSX0ZMQUdfVU5TRVQoKTwvY29kZT48L2E+IG1hY3Jvcy4gVXNlCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItRkxBRy1JUy1TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfRkxBR19JU19TRVQoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5HU1RfQlVGRkVSX0ZMQUdfSVNfU0VUKCk8L2NvZGU+PC9hPiB0byB0ZXN0IGlmIGEgY2VydGFpbiA8YSBocmVmPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXIvaHRtbC9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyRmxhZyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckZsYWc8L3NwYW4+PC9hPiBpcyBzZXQuCis8L3A+Cis8cD4KK0J1ZmZlcnMgY2FuIGJlIGVmZmljaWVudGx5IG1lcmdlZCBpbnRvIGEgbGFyZ2VyIGJ1ZmZlciB3aXRoCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItc3BhbiIgdGl0bGU9ImdzdF9idWZmZXJfc3BhbiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3NwYW4oKTwvY29kZT48L2E+LCB3aGljaCBhdm9pZHMgbWVtb3J5IGNvcGllcyB3aGVuIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItaXMtc3Bhbi1mYXN0IiB0aXRsZT0iZ3N0X2J1ZmZlcl9pc19zcGFuX2Zhc3QgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9pc19zcGFuX2Zhc3QoKTwvY29kZT48L2E+CitmdW5jdGlvbiByZXR1cm5zIFRSVUUuCis8L3A+Cis8cD4KK0FuIGVsZW1lbnQgc2hvdWxkIGVpdGhlciB1bnJlZiB0aGUgYnVmZmVyIG9yIHB1c2ggaXQgb3V0IG9uIGEgc3JjIHBhZAordXNpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcHVzaCIgdGl0bGU9ImdzdF9wYWRfcHVzaCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3B1c2goKTwvY29kZT48L2E+IChzZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4pLgorPC9wPgorPHA+CitCdWZmZXJzIGFyZSB1c3VhbGx5IGZyZWVkIGJ5IHVucmVmZmluZyB0aGVtIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXVucmVmIiB0aXRsZT0iZ3N0X2J1ZmZlcl91bnJlZiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3VucmVmKCk8L2NvZGU+PC9hPi4gV2hlbgordGhlIHJlZmNvdW50IGRyb3BzIHRvIDAsIGFueSBkYXRhIHBvaW50ZWQgdG8gYnkgdGhlIGJ1ZmZlciBpcyB1bnJlZmZlZCBhcword2VsbC4KKzwvcD4KKzxwPgorTGFzdCByZXZpZXdlZCBvbiBNYXJjaCAzMCwgMjAxMSAoMC4xMS4wKQorPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0QnVmZmVyLmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RCdWZmZXIiPjwvYT48aDM+c3RydWN0IEdzdEJ1ZmZlcjwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEJ1ZmZlciB7CisgIEdzdE1pbmlPYmplY3QgICAgICAgICAgbWluaV9vYmplY3Q7CisKKyAgR3N0QnVmZmVyUG9vbCAgICAgICAgICpwb29sOworCisgIC8qIHRpbWVzdGFtcCAqLworICBHc3RDbG9ja1RpbWUgICAgICAgICAgIHRpbWVzdGFtcDsKKyAgR3N0Q2xvY2tUaW1lICAgICAgICAgICBkdXJhdGlvbjsKKworICAvKiBtZWRpYSBzcGVjaWZpYyBvZmZzZXQgKi8KKyAgZ3VpbnQ2NCAgICAgICAgICAgICAgICBvZmZzZXQ7CisgIGd1aW50NjQgICAgICAgICAgICAgICAgb2Zmc2V0X2VuZDsKK307Cis8L3ByZT4KKzxwPgorVGhlIHN0cnVjdHVyZSBvZiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LiBVc2UgdGhlIGFzc29jaWF0ZWQgbWFjcm9zIHRvIGFjY2VzcyB0aGUgcHVibGljCit2YXJpYWJsZXMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJ1ZmZlci5taW5pLW9iamVjdCI+PC9hPm1pbmlfb2JqZWN0PC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGFyZW50IHN0cnVjdHVyZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNHc3RCdWZmZXJQb29sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJ1ZmZlci5wb29sIj48L2E+cG9vbDwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9pbnRlciB0byB0aGUgcG9vbCBvd25lciBvZiB0aGUgYnVmZmVyPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCdWZmZXIudGltZXN0YW1wIj48L2E+dGltZXN0YW1wPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aW1lc3RhbXAgb2YgdGhlIGJ1ZmZlciwgY2FuIGJlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1USU1FLU5PTkU6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19USU1FX05PTkUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfQ0xPQ0tfVElNRV9OT05FPC9zcGFuPjwvYT4gd2hlbiB0aGUKK3RpbWVzdGFtcCBpcyBub3Qga25vd24gb3IgcmVsZXZhbnQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCdWZmZXIuZHVyYXRpb24iPjwvYT5kdXJhdGlvbjwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZHVyYXRpb24gaW4gdGltZSBvZiB0aGUgYnVmZmVyIGRhdGEsIGNhbiBiZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stVElNRS1OT05FOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfVElNRV9OT05FIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0NMT0NLX1RJTUVfTk9ORTwvc3Bhbj48L2E+Cit3aGVuIHRoZSBkdXJhdGlvbiBpcyBub3Qga25vd24gb3IgcmVsZXZhbnQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCdWZmZXIub2Zmc2V0Ij48L2E+b2Zmc2V0PC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG1lZGlhIHNwZWNpZmljIG9mZnNldCBmb3IgdGhlIGJ1ZmZlciBkYXRhLgorRm9yIHZpZGVvIGZyYW1lcywgdGhpcyBpcyB0aGUgZnJhbWUgbnVtYmVyIG9mIHRoaXMgYnVmZmVyLgorRm9yIGF1ZGlvIHNhbXBsZXMsIHRoaXMgaXMgdGhlIG9mZnNldCBvZiB0aGUgZmlyc3Qgc2FtcGxlIGluIHRoaXMgYnVmZmVyLgorRm9yIGZpbGUgZGF0YSBvciBjb21wcmVzc2VkIGRhdGEgdGhpcyBpcyB0aGUgYnl0ZSBvZmZzZXQgb2YgdGhlIGZpcnN0CitieXRlIGluIHRoaXMgYnVmZmVyLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QnVmZmVyLm9mZnNldC1lbmQiPjwvYT5vZmZzZXRfZW5kPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbGFzdCBvZmZzZXQgY29udGFpbmVkIGluIHRoaXMgYnVmZmVyLiBJdCBoYXMgdGhlIHNhbWUKK2Zvcm1hdCBhcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEJ1ZmZlckZsYWdzIj48L2E+PGgzPmVudW0gR3N0QnVmZmVyRmxhZ3M8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9CVUZGRVJfRkxBR19MSVZFICAgICAgICA9IChHU1RfTUlOSV9PQkpFQ1RfRkxBR19MQVNUICZsdDsmbHQ7IDApLAorICBHU1RfQlVGRkVSX0ZMQUdfREVDT0RFX09OTFkgPSAoR1NUX01JTklfT0JKRUNUX0ZMQUdfTEFTVCAmbHQ7Jmx0OyAxKSwKKyAgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQgICAgID0gKEdTVF9NSU5JX09CSkVDVF9GTEFHX0xBU1QgJmx0OyZsdDsgMiksCisgIEdTVF9CVUZGRVJfRkxBR19SRVNZTkMgICAgICA9IChHU1RfTUlOSV9PQkpFQ1RfRkxBR19MQVNUICZsdDsmbHQ7IDMpLAorICBHU1RfQlVGRkVSX0ZMQUdfQ09SUlVQVEVEICAgPSAoR1NUX01JTklfT0JKRUNUX0ZMQUdfTEFTVCAmbHQ7Jmx0OyA0KSwKKyAgR1NUX0JVRkZFUl9GTEFHX01BUktFUiAgICAgID0gKEdTVF9NSU5JX09CSkVDVF9GTEFHX0xBU1QgJmx0OyZsdDsgNSksCisgIEdTVF9CVUZGRVJfRkxBR19IRUFERVIgICAgICA9IChHU1RfTUlOSV9PQkpFQ1RfRkxBR19MQVNUICZsdDsmbHQ7IDYpLAorICBHU1RfQlVGRkVSX0ZMQUdfR0FQICAgICAgICAgPSAoR1NUX01JTklfT0JKRUNUX0ZMQUdfTEFTVCAmbHQ7Jmx0OyA3KSwKKyAgR1NUX0JVRkZFUl9GTEFHX0RST1BQQUJMRSAgID0gKEdTVF9NSU5JX09CSkVDVF9GTEFHX0xBU1QgJmx0OyZsdDsgOCksCisgIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUICA9IChHU1RfTUlOSV9PQkpFQ1RfRkxBR19MQVNUICZsdDsmbHQ7IDkpLAorICBHU1RfQlVGRkVSX0ZMQUdfSU5fQ0FQUyAgICAgPSAoR1NUX01JTklfT0JKRUNUX0ZMQUdfTEFTVCAmbHQ7Jmx0OyAxMCksCisKKyAgR1NUX0JVRkZFUl9GTEFHX0xBU1QgICAgICAgID0gKEdTVF9NSU5JX09CSkVDVF9GTEFHX0xBU1QgJmx0OyZsdDsgMjApCit9IEdzdEJ1ZmZlckZsYWdzOworPC9wcmU+Cis8cD4KK0Egc2V0IG9mIGJ1ZmZlciBmbGFncyB1c2VkIHRvIGRlc2NyaWJlIHByb3BlcnRpZXMgb2YgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUJVRkZFUi1GTEFHLUxJVkU6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0JVRkZFUl9GTEFHX0xJVkU8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBidWZmZXIgaXMgbGl2ZSBkYXRhIGFuZCBzaG91bGQgYmUgZGlzY2FyZGVkIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgUEFVU0VEIHN0YXRlLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUJVRkZFUi1GTEFHLURFQ09ERS1PTkxZOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9CVUZGRVJfRkxBR19ERUNPREVfT05MWTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGJ1ZmZlciBjb250YWlucyBkYXRhIHRoYXQgc2hvdWxkIGJlIGRyb3BwZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlY2F1c2UgaXQgd2lsbCBiZSBjbGlwcGVkIGFnYWluc3QgdGhlIHNlZ21lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJpZXMgb3IgYmVjYXVzZSBpdCBkb2VzIG5vdCBjb250YWluIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgc2hvdWxkIGJlIHNob3duIHRvIHRoZSB1c2VyLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUJVRkZFUi1GTEFHLURJU0NPTlQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBidWZmZXIgbWFya3MgYSBkYXRhIGRpc2NvbnRpbnVpdHkgaW4gdGhlIHN0cmVhbS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdHlwaWNhbGx5IG9jY3VycyBhZnRlciBhIHNlZWsgb3IgYSBkcm9wcGVkIGJ1ZmZlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBhIGxpdmUgb3IgbmV0d29yayBzb3VyY2UuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQlVGRkVSLUZMQUctUkVTWU5DOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9CVUZGRVJfRkxBR19SRVNZTkM8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBidWZmZXIgdGltZXN0YW1wIG1pZ2h0IGhhdmUgYSBkaXNjb250aW51aXR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhpcyBidWZmZXIgaXMgYSBnb29kIHBvaW50IHRvIHJlc3luY2hyb25pemUuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQlVGRkVSLUZMQUctQ09SUlVQVEVEOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9CVUZGRVJfRkxBR19DT1JSVVBURUQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBidWZmZXIgZGF0YSBpcyBjb3JydXB0ZWQuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQlVGRkVSLUZMQUctTUFSS0VSOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9CVUZGRVJfRkxBR19NQVJLRVI8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBidWZmZXIgY29udGFpbnMgYSBtZWRpYSBzcGVjaWZpYyBtYXJrZXIuIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW8gdGhpcyBpcyB0eXBpY2FsbHkgdGhlIGVuZCBvZiBhIGZyYW1lIGJvdW5kYXJ5LCBmb3IgYXVkaW8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgaXMgdXN1YWxseSB0aGUgZW5kIG9mIGEgdGFsa3NwdXJ0LgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUJVRkZFUi1GTEFHLUhFQURFUjpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQlVGRkVSX0ZMQUdfSEVBREVSPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgYnVmZmVyIGNvbnRhaW5zIGhlYWRlciBpbmZvcm1hdGlvbiB0aGF0IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkZWQgdG8gZGVjb2RlIHRoZSBmb2xsb3dpbmcgZGF0YQorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUJVRkZFUi1GTEFHLUdBUDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQlVGRkVSX0ZMQUdfR0FQPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgYnVmZmVyIGhhcyBiZWVuIGNyZWF0ZWQgdG8gZmlsbCBhIGdhcCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSBhbmQgY29udGFpbnMgbWVkaWEgbmV1dHJhbCBkYXRhIChlbGVtZW50cyBjYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCB0byBvcHRpbWl6ZWQgY29kZSBwYXRoIHRoYXQgaWdub3JlcyB0aGUgYnVmZmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50KS4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1CVUZGRVItRkxBRy1EUk9QUEFCTEU6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0JVRkZFUl9GTEFHX0RST1BQQUJMRTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGJ1ZmZlciBjYW4gYmUgZHJvcHBlZCB3aXRob3V0IGJyZWFraW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLCBmb3IgZXhhbXBsZSB0byByZWR1Y2UgYmFuZHdpZHRoLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUJVRkZFUi1GTEFHLURFTFRBLVVOSVQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoaXMgdW5pdCBjYW5ub3QgYmUgZGVjb2RlZCBpbmRlcGVuZGVudGx5LgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUJVRkZFUi1GTEFHLUlOLUNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9CVUZGRVJfRkxBR19JTl9DQVBTPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgYnVmZmVyIGhhcyBiZWVuIGFkZGVkIGFzIGEgZmllbGQgaW4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4uCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQlVGRkVSLUZMQUctTEFTVDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQlVGRkVSX0ZMQUdfTEFTVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YWRkaXRpb25hbCBtZWRpYSBzcGVjaWZpYyBmbGFncyBjYW4gYmUgYWRkZWQgc3RhcnRpbmcgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBmbGFnLgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0QnVmZmVyQ29weUZsYWdzIj48L2E+PGgzPmVudW0gR3N0QnVmZmVyQ29weUZsYWdzPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGVudW0geworICBHU1RfQlVGRkVSX0NPUFlfTk9ORSAgICAgICAgICAgPSAwLAorICBHU1RfQlVGRkVSX0NPUFlfRkxBR1MgICAgICAgICAgPSAoMSAmbHQ7Jmx0OyAwKSwKKyAgR1NUX0JVRkZFUl9DT1BZX1RJTUVTVEFNUFMgICAgID0gKDEgJmx0OyZsdDsgMSksCisgIEdTVF9CVUZGRVJfQ09QWV9NRU1PUlkgICAgICAgICA9ICgxICZsdDsmbHQ7IDIpLAorICBHU1RfQlVGRkVSX0NPUFlfTUVSR0UgICAgICAgICAgPSAoMSAmbHQ7Jmx0OyAzKQorfSBHc3RCdWZmZXJDb3B5RmxhZ3M7Cis8L3ByZT4KKzxwPgorQSBzZXQgb2YgZmxhZ3MgdGhhdCBjYW4gYmUgcHJvdmlkZWQgdG8gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1jb3B5LWludG8iIHRpdGxlPSJnc3RfYnVmZmVyX2NvcHlfaW50byAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX2NvcHlfaW50bygpPC9jb2RlPjwvYT4KK2Z1bmN0aW9uIHRvIHNwZWNpZnkgd2hpY2ggaXRlbXMgc2hvdWxkIGJlIGNvcGllZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUJVRkZFUi1DT1BZLU5PTkU6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0JVRkZFUl9DT1BZX05PTkU8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmNvcHkgbm90aGluZworPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUJVRkZFUi1DT1BZLUZMQUdTOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9CVUZGRVJfQ09QWV9GTEFHUzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZmxhZyBpbmRpY2F0aW5nIHRoYXQgYnVmZmVyIGZsYWdzIHNob3VsZCBiZSBjb3BpZWQKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1CVUZGRVItQ09QWS1USU1FU1RBTVBTOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9CVUZGRVJfQ09QWV9USU1FU1RBTVBTPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5mbGFnIGluZGljYXRpbmcgdGhhdCBidWZmZXIgdGltZXN0YW1wLCBkdXJhdGlvbiwKK29mZnNldCBhbmQgb2Zmc2V0X2VuZCBzaG91bGQgYmUgY29waWVkCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQlVGRkVSLUNPUFktTUVNT1JZOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9CVUZGRVJfQ09QWV9NRU1PUlk8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmZsYWcgaW5kaWNhdGluZyB0aGF0IGJ1ZmZlciBtZW1vcnkgc2hvdWxkIGJlIGNvcGllZAorYW5kIGFwcGVuZGVkIHRvIGFscmVhZHkgZXhpc3RpbmcgbWVtb3J5Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQlVGRkVSLUNPUFktTUVSR0U6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0JVRkZFUl9DT1BZX01FUkdFPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5mbGFnIGluZGljYXRpbmcgdGhhdCBidWZmZXIgbWVtb3J5IHNob3VsZCBiZQorbWVyZ2VkCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQlVGRkVSLUZMQUdTOkNBUFMiPjwvYT48aDM+R1NUX0JVRkZFUl9GTEFHUygpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CVUZGRVJfRkxBR1MoYnVmKSAgICAgICAgICAgICAgICAgICBHU1RfTUlOSV9PQkpFQ1RfRkxBR1MoYnVmKQorPC9wcmU+Cis8cD4KK0EgZmxhZ3Mgd29yZCBjb250YWluaW5nIDxhIGhyZWY9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXJGbGFnIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyRmxhZzwvc3Bhbj48L2E+IGZsYWdzIHNldCBvbiB0aGlzIGJ1ZmZlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1CVUZGRVItRkxBRy1JUy1TRVQ6Q0FQUyI+PC9hPjxoMz5HU1RfQlVGRkVSX0ZMQUdfSVNfU0VUKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0JVRkZFUl9GTEFHX0lTX1NFVChidWYsZmxhZykgICAgICAgIEdTVF9NSU5JX09CSkVDVF9GTEFHX0lTX1NFVCAoYnVmLCBmbGFnKQorPC9wcmU+Cis8cD4KK0dpdmVzIHRoZSBzdGF0dXMgb2YgYSBzcGVjaWZpYyBmbGFnIG9uIGEgYnVmZmVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgaHJlZj0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyL2h0bWwvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlckZsYWciPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJGbGFnPC9zcGFuPjwvYT4gdG8gY2hlY2suPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUJVRkZFUi1GTEFHLVNFVDpDQVBTIj48L2E+PGgzPkdTVF9CVUZGRVJfRkxBR19TRVQoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQlVGRkVSX0ZMQUdfU0VUKGJ1ZixmbGFnKSAgICAgICAgICAgR1NUX01JTklfT0JKRUNUX0ZMQUdfU0VUIChidWYsIGZsYWcpCis8L3ByZT4KKzxwPgorU2V0cyBhIGJ1ZmZlciBmbGFnIG9uIGEgYnVmZmVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgaHJlZj0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyL2h0bWwvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlckZsYWciPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJGbGFnPC9zcGFuPjwvYT4gdG8gc2V0LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1CVUZGRVItRkxBRy1VTlNFVDpDQVBTIj48L2E+PGgzPkdTVF9CVUZGRVJfRkxBR19VTlNFVCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CVUZGRVJfRkxBR19VTlNFVChidWYsZmxhZykgICAgICAgICBHU1RfTUlOSV9PQkpFQ1RfRkxBR19VTlNFVCAoYnVmLCBmbGFnKQorPC9wcmU+Cis8cD4KK0NsZWFycyBhIGJ1ZmZlciBmbGFnLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgaHJlZj0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyL2h0bWwvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlckZsYWciPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJGbGFnPC9zcGFuPjwvYT4gdG8gY2xlYXIuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULU1FVEEtVElNSU5HLUlORk86Q0FQUyI+PC9hPjxoMz5HU1RfTUVUQV9USU1JTkdfSU5GTzwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfTUVUQV9USU1JTkdfSU5GTyAoZ3N0X21ldGFfdGltaW5nX2dldF9pbmZvKCkpCis8L3ByZT4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0TWV0YVRpbWluZyI+PC9hPjxoMz5zdHJ1Y3QgR3N0TWV0YVRpbWluZzwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdE1ldGFUaW1pbmcgeworICBHc3RNZXRhICAgICAgICBtZXRhOyAgICAgICAgLyogY29tbW9uIG1ldGEgaGVhZGVyICovCisKKyAgR3N0Q2xvY2tUaW1lICAgZHRzOyAgICAgICAgIC8qIGRlY29kaW5nIHRpbWVzdGFtcCAqLworICBHc3RDbG9ja1RpbWUgICBwdHM7ICAgICAgICAgLyogcHJlc2VudGF0aW9uIHRpbWVzdGFtcCAqLworICBHc3RDbG9ja1RpbWUgICBkdXJhdGlvbjsgICAgLyogZHVyYXRpb24gb2YgdGhlIGRhdGEgKi8KKyAgR3N0Q2xvY2tUaW1lICAgY2xvY2tfcmF0ZTsgIC8qIGNsb2NrIHJhdGUgZm9yIHRoZSBhYm92ZSB2YWx1ZXMgKi8KK307Cis8L3ByZT4KKzxwPgorRXh0cmEgdGltaW5nIG1ldGFkYXRhCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhIiB0aXRsZT0ic3RydWN0IEdzdE1ldGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdE1ldGFUaW1pbmcubWV0YSI+PC9hPm1ldGE8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnBhcmVudCBtZXRhZGF0YTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWV0YVRpbWluZy5kdHMiPjwvYT5kdHM8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBkZWNvZGluZyB0aW1lc3RhbXA8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdE1ldGFUaW1pbmcucHRzIj48L2E+cHRzPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcHJlc2VudGF0aW9uIHRpbWVzdGFtcDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWV0YVRpbWluZy5kdXJhdGlvbiI+PC9hPmR1cmF0aW9uPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZHVyYXRpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdE1ldGFUaW1pbmcuY2xvY2stcmF0ZSI+PC9hPmNsb2NrX3JhdGU8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjbG9jayByYXRlIG9mIHRoZSBkdHMsIHB0cyBhbmQgZHVyYXRpb24gdmFsdWVzPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUJVRkZFUi1USU1FU1RBTVA6Q0FQUyI+PC9hPjxoMz5HU1RfQlVGRkVSX1RJTUVTVEFNUCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CVUZGRVJfVElNRVNUQU1QKGJ1ZikgICAgICAgICAgICAgICAoR1NUX0JVRkZFUl9DQVNUKGJ1ZiktJmd0O3RpbWVzdGFtcCkKKzwvcHJlPgorPHA+CitUaGUgdGltZXN0YW1wIGluIG5hbm9zZWNvbmRzIChhcyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+KSBvZiB0aGUgZGF0YSBpbiB0aGUgYnVmZmVyLgorVmFsdWUgd2lsbCBiZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stVElNRS1OT05FOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfVElNRV9OT05FIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0NMT0NLX1RJTUVfTk9ORTwvY29kZT48L2E+IGlmIHRoZSB0aW1lc3RhbXAgaXMgdW5rbm93bi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uOjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQlVGRkVSLURVUkFUSU9OOkNBUFMiPjwvYT48aDM+R1NUX0JVRkZFUl9EVVJBVElPTigpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CVUZGRVJfRFVSQVRJT04oYnVmKSAgICAgICAgICAgICAgICAoR1NUX0JVRkZFUl9DQVNUKGJ1ZiktJmd0O2R1cmF0aW9uKQorPC9wcmU+Cis8cD4KK1RoZSBkdXJhdGlvbiBpbiBuYW5vc2Vjb25kcyAoYXMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPikgb2YgdGhlIGRhdGEgaW4gdGhlIGJ1ZmZlci4KK1ZhbHVlIHdpbGwgYmUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLVRJTUUtTk9ORTpDQVBTIiB0aXRsZT0iR1NUX0NMT0NLX1RJTUVfTk9ORSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9DTE9DS19USU1FX05PTkU8L2NvZGU+PC9hPiBpZiB0aGUgZHVyYXRpb24gaXMgdW5rbm93bi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1CVUZGRVItT0ZGU0VUOkNBUFMiPjwvYT48aDM+R1NUX0JVRkZFUl9PRkZTRVQoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQlVGRkVSX09GRlNFVChidWYpICAgICAgICAgICAgICAgICAgKEdTVF9CVUZGRVJfQ0FTVChidWYpLSZndDtvZmZzZXQpCis8L3ByZT4KKzxwPgorVGhlIG9mZnNldCBpbiB0aGUgc291cmNlIGZpbGUgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGlzIGJ1ZmZlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1CVUZGRVItT0ZGU0VULUVORDpDQVBTIj48L2E+PGgzPkdTVF9CVUZGRVJfT0ZGU0VUX0VORCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CVUZGRVJfT0ZGU0VUX0VORChidWYpICAgICAgICAgICAgICAoR1NUX0JVRkZFUl9DQVNUKGJ1ZiktJmd0O29mZnNldF9lbmQpCis8L3ByZT4KKzxwPgorVGhlIG9mZnNldCBpbiB0aGUgc291cmNlIGZpbGUgb2YgdGhlIGVuZCBvZiB0aGlzIGJ1ZmZlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1CVUZGRVItT0ZGU0VULU5PTkU6Q0FQUyI+PC9hPjxoMz5HU1RfQlVGRkVSX09GRlNFVF9OT05FPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CVUZGRVJfT0ZGU0VUX05PTkUgICgoZ3VpbnQ2NCktMSkKKzwvcHJlPgorPHA+CitDb25zdGFudCBmb3Igbm8tb2Zmc2V0IHJldHVybiByZXN1bHRzLgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQlVGRkVSLURVUkFUSU9OLUlTLVZBTElEOkNBUFMiPjwvYT48aDM+R1NUX0JVRkZFUl9EVVJBVElPTl9JU19WQUxJRCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CVUZGRVJfRFVSQVRJT05fSVNfVkFMSUQoYnVmZmVyKSAgICAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikpKQorPC9wcmU+Cis8cD4KK1Rlc3RzIGlmIHRoZSBkdXJhdGlvbiBpcyBrbm93bi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQlVGRkVSLVRJTUVTVEFNUC1JUy1WQUxJRDpDQVBTIj48L2E+PGgzPkdTVF9CVUZGRVJfVElNRVNUQU1QX0lTX1ZBTElEKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0JVRkZFUl9USU1FU1RBTVBfSVNfVkFMSUQoYnVmZmVyKSAgIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikpKQorPC9wcmU+Cis8cD4KK1Rlc3RzIGlmIHRoZSB0aW1lc3RhbXAgaXMga25vd24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUJVRkZFUi1PRkZTRVQtSVMtVkFMSUQ6Q0FQUyI+PC9hPjxoMz5HU1RfQlVGRkVSX09GRlNFVF9JU19WQUxJRCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CVUZGRVJfT0ZGU0VUX0lTX1ZBTElEKGJ1ZmZlcikgICAgICAoR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZmZlcikgIT0gR1NUX0JVRkZFUl9PRkZTRVRfTk9ORSkKKzwvcHJlPgorPHA+CitUZXN0cyBpZiB0aGUgc3RhcnQgb2Zmc2V0IGlzIGtub3duLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1CVUZGRVItT0ZGU0VULUVORC1JUy1WQUxJRDpDQVBTIj48L2E+PGgzPkdTVF9CVUZGRVJfT0ZGU0VUX0VORF9JU19WQUxJRCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CVUZGRVJfT0ZGU0VUX0VORF9JU19WQUxJRChidWZmZXIpICAoR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChidWZmZXIpICE9IEdTVF9CVUZGRVJfT0ZGU0VUX05PTkUpCis8L3ByZT4KKzxwPgorVGVzdHMgaWYgdGhlIGVuZCBvZmZzZXQgaXMga25vd24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUJVRkZFUi1JUy1ESVNDT05UOkNBUFMiPjwvYT48aDM+R1NUX0JVRkZFUl9JU19ESVNDT05UKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0JVRkZFUl9JU19ESVNDT05UKGJ1ZmZlcikgICAoR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoYnVmZmVyLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCkpCis8L3ByZT4KKzxwPgorVGVzdHMgaWYgdGhlIGJ1ZmZlciBtYXJrcyBhIGRpc2NvbnRpbnVpdHkgaW4gdGhlIHN0cmVhbS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjk8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1CVUZGRVItVFJBQ0UtTkFNRTpDQVBTIj48L2E+PGgzPkdTVF9CVUZGRVJfVFJBQ0VfTkFNRTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQlVGRkVSX1RSQUNFX05BTUUgICAgICAgICAgICJHc3RCdWZmZXIiCis8L3ByZT4KKzxwPgorVGhlIG5hbWUgdXNlZCBmb3IgdHJhY2luZyBtZW1vcnkgYWxsb2NhdGlvbnMuCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1idWZmZXItbmV3Ij48L2E+PGgzPmdzdF9idWZmZXJfbmV3ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKiAgICAgICAgIGdzdF9idWZmZXJfbmV3ICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlcyBhIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgd2l0aG91dCBhbnkgZGF0YS4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1uZXctYW5kLWFsbG9jIj48L2E+PGgzPmdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYygpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyhzKSAgICAgICAgICAgIGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlKE5VTEwsIHMsIDApCis8L3ByZT4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1uZXctYWxsb2NhdGUiPjwvYT48aDM+Z3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqICAgICAgICAgZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdEFsbG9jYXRvciIgdGl0bGU9IkdzdEFsbG9jYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRvcjwvc3Bhbj48L2E+ICphbGxvY2F0b3I8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gYWxpZ248L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitUcmllcyB0byBjcmVhdGUgYSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHdpdGggZGF0YSBvZiB0aGUgZ2l2ZW4gc2l6ZSBhbmQKK2FsaWdubWVudCBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hbGxvY2F0b3I8L2NvZGU+PC9lbT4uIElmIHRoZSByZXF1ZXN0ZWQgYW1vdW50IG9mIG1lbW9yeSBjYW4ndCBiZQorYWxsb2NhdGVkLCBOVUxMIHdpbGwgYmUgcmV0dXJuZWQuIFRoZSBhbGxvY2F0ZWQgYnVmZmVyIG1lbW9yeSBpcyBub3QgY2xlYXJlZC4KKzwvcD4KKzxwPgorV2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWxsb2NhdG9yPC9jb2RlPjwvZW0+IGlzIE5VTEwsIHRoZSBkZWZhdWx0IG1lbW9yeSBhbGxvY2F0b3Igd2lsbCBiZSB1c2VkLgorPC9wPgorPHA+CitBbGxvY2F0b3IgYnVmZmVyIG1lbW9yeSB3aWxsIGJlIGFsaWduZWQgdG8gbXVsdGlwbGVzIG9mICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWxpZ248L2NvZGU+PC9lbT4gKyAxKSBieXRlcy4KKzwvcD4KKzxwPgorTm90ZSB0aGF0IHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4gPT0gMCwgdGhlIGJ1ZmZlciB3aWxsIG5vdCBoYXZlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggaXQuCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWxsb2NhdG9yPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdEFsbG9jYXRvciIgdGl0bGU9IkdzdEFsbG9jYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRvcjwvc3Bhbj48L2E+IHRvIHVzZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgbmV3IGJ1ZmZlcidzIGRhdGEuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hbGlnbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgYWxpZ25tZW50IG9mIHRoZSBidWZmZXIgbWVtb3J5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4sIG9yIE5VTEwgaWYgdGhlIG1lbW9yeSBjb3VsZG4ndAorYmUgYWxsb2NhdGVkLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1uZXctd3JhcHBlZCI+PC9hPjxoMz5nc3RfYnVmZmVyX25ld193cmFwcGVkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKiAgICAgICAgIGdzdF9idWZmZXJfbmV3X3dyYXBwZWQgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBkYXRhPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZXMgYSBuZXcgYnVmZmVyIHRoYXQgd3JhcHMgdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+LgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZGF0YSB0byB3cmFwPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFsbG9jYXRlZCBzaXplIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1idWZmZXItbmV3LXdyYXBwZWQtZnVsbCI+PC9hPjxoMz5nc3RfYnVmZmVyX25ld193cmFwcGVkX2Z1bGwgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqICAgICAgICAgZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9mdWxsICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGRhdGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1NaXNjZWxsYW5lb3VzLVV0aWxpdHktRnVuY3Rpb25zLmh0bWwjR0ZyZWVGdW5jIj48c3BhbiBjbGFzcz0idHlwZSI+R0ZyZWVGdW5jPC9zcGFuPjwvYT4gZnJlZV9mdW5jPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gb2Zmc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZXMgYSBuZXcgYnVmZmVyIHRoYXQgd3JhcHMgdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+LiAgVmFsaWQgZGF0YSBpcyBzZXQKK3RvIHN0YXJ0IGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4gYW5kIHVwIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+LiAgSWYgbm8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZyZWVfZnVuYzwvY29kZT48L2VtPiBpcyBwcm92aWRlZCwKK2J1ZmZlciBtZW1vcnkgaXMgbWFya2VkIFJFQURPTkxZLgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZGF0YSB0byB3cmFwPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mcmVlX2Z1bmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZnVuY3Rpb24gdG8gZnJlZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+b2Zmc2V0IGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+IG9mIHZhbGlkIGRhdGE8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2l6ZSBvZiB2YWxpZCBkYXRhIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+IHN0YXJ0aW5nIGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1yZWYiPjwvYT48aDM+Z3N0X2J1ZmZlcl9yZWYgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqICAgICAgICAgZ3N0X2J1ZmZlcl9yZWYgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSW5jcmVhc2VzIHRoZSByZWZjb3VudCBvZiB0aGUgZ2l2ZW4gYnVmZmVyIGJ5IG9uZS4KKzwvcD4KKzxwPgorTm90ZSB0aGF0IHRoZSByZWZjb3VudCBhZmZlY3RzIHRoZSB3cml0ZWFiaWxpdHkKK29mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWY8L2NvZGU+PC9lbT4gYW5kIGl0cyBtZXRhZGF0YSwgc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1pcy13cml0YWJsZSIgdGl0bGU9ImdzdF9idWZmZXJfaXNfd3JpdGFibGUoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX2lzX3dyaXRhYmxlKCk8L2NvZGU+PC9hPiBhbmQKKzxhIGhyZWY9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWlzLW1ldGFkYXRhLXdyaXRhYmxlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfaXNfbWV0YWRhdGFfd3JpdGFibGUoKTwvY29kZT48L2E+LiBJdCBpcworaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBrZWVwaW5nIGFkZGl0aW9uYWwgcmVmZXJlbmNlcyB0bworR3N0QnVmZmVyIGluc3RhbmNlcyBjYW4gcG90ZW50aWFsbHkgaW5jcmVhc2UgdGhlIG51bWJlcgorb2YgbWVtY3B5IG9wZXJhdGlvbnMgaW4gYSBwaXBlbGluZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWY8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWY8L2NvZGU+PC9lbT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVmZmVyLXVucmVmIj48L2E+PGgzPmdzdF9idWZmZXJfdW5yZWYgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRGVjcmVhc2VzIHRoZSByZWZjb3VudCBvZiB0aGUgYnVmZmVyLiBJZiB0aGUgcmVmY291bnQgcmVhY2hlcyAwLCB0aGUgYnVmZmVyCit3aWxsIGJlIGZyZWVkLiBJZiA8YSBocmVmPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXIvaHRtbC9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1NQUxMT0NEQVRBOkNBUFMiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R1NUX0JVRkZFUl9NQUxMT0NEQVRBKCk8L2NvZGU+PC9hPiBpcyBub24tTlVMTCwgdGhpcyBwb2ludGVyIHdpbGwKK2Fsc28gYmUgZnJlZWQgYXQgdGhpcyB0aW1lLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWY8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVmZmVyLWdldC1zaXplcyI+PC9hPjxoMz5nc3RfYnVmZmVyX2dldF9zaXplcyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdzaXplPC9zcGFuPjwvYT4gICAgICAgICAgICAgICBnc3RfYnVmZmVyX2dldF9zaXplcyAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiAqb2Zmc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gKm1heHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgdGhlIHRvdGFsIHNpemUgb2YgYWxsIG1lbW9yeSBibG9ja3MgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPi4KKzwvcD4KKzxwPgorV2hlbiBub3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4gd2lsbCBjb250YWluIHRoZSBvZmZzZXQgb2YgdGhlIGRhdGEgaW4gdGhlIGZpcnN0CittZW1vcnkgYmxvY2sgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1heHNpemU8L2NvZGU+PC9lbT4gd2lsbCBjb250YWluIHRoZSBzdW0gb2YgdGhlIHNpemUKK2FuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+IGFuZCB0aGUgYW1vdW50IG9mIGV4dHJhIHBhZGRpbmcgb24gdGhlIGxhc3QgbWVtb3J5IGJsb2NrLgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1heHNpemU8L2NvZGU+PC9lbT4gY2FuIGJlIHVzZWQgdG8gcmVzaXplIHRoZSBidWZmZXIgd2l0aAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXJlc2l6ZSIgdGl0bGU9ImdzdF9idWZmZXJfcmVzaXplICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfcmVzaXplKCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gdGhlIG9mZnNldDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWF4c2l6ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gdGhlIG1heHNpemU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdG90YWwgc2l6ZSBvZiB0aGUgbWVtb3J5IGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1nZXQtc2l6ZSI+PC9hPjxoMz5nc3RfYnVmZmVyX2dldF9zaXplKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUoYikgICAgICAgICBnc3RfYnVmZmVyX2dldF9zaXplcyAoKGIpLCBOVUxMLCBOVUxMKQorPC9wcmU+Cis8cD4KK0dldCB0aGUgc2l6ZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVmZmVyLXJlc2l6ZSI+PC9hPjxoMz5nc3RfYnVmZmVyX3Jlc2l6ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYnVmZmVyX3Jlc2l6ZSAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzc2l6ZTwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXQgdGhlIHRvdGFsIHNpemUgb2YgdGhlIGJ1ZmZlcgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBvZmZzZXQgYWRqdXN0ZW1lbnQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5ldyBzaXplPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1zZXQtc2l6ZSI+PC9hPjxoMz5nc3RfYnVmZmVyX3NldF9zaXplKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgIGdzdF9idWZmZXJfc2V0X3NpemUoYixzKSAgICAgICBnc3RfYnVmZmVyX3Jlc2l6ZSAoKGIpLCAwLCAocykpCis8L3ByZT4KKzxwPgorU2V0IHRoZSBzaXplIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iPC9jb2RlPjwvZW0+IHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zPC9jb2RlPjwvZW0+LiBUaGlzIHdpbGwgcmVtb3ZlIG9yIHRyaW0gdGhlIG1lbW9yeSBibG9ja3MKK2luIHRoZSBidWZmZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+czwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyBzaXplPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1uLW1lbW9yeSI+PC9hPjxoMz5nc3RfYnVmZmVyX25fbWVtb3J5ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIGdzdF9idWZmZXJfbl9tZW1vcnkgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCB0aGUgYW1vdW50IG9mIG1lbW9yeSBibG9ja3MgdGhhdCB0aGlzIGJ1ZmZlciBoYXMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGFtb3VudCBvZiBtZW1vcnkgYmxvY2sgaW4gdGhpcyBidWZmZXIuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVmZmVyLXRha2UtbWVtb3J5Ij48L2E+PGgzPmdzdF9idWZmZXJfdGFrZV9tZW1vcnkgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl90YWtlX21lbW9yeSAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGlkeDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQWRkIHRoZSBtZW1vcnkgYmxvY2sgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPiB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+IGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZHg8L2NvZGU+PC9lbT4uIFRoaXMgZnVuY3Rpb24gdGFrZXMgb3duZXJzaGlwCitvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+IGFuZCB0aHVzIGRvZXNuJ3QgaW5jcmVhc2UgaXRzIHJlZmNvdW50LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWR4PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBpbmRleCB0byBhZGQgdGhlIG1lbW9yeSBhdCwgb3IgLTEgdG8gYXBwZW5kIGl0IHRvIHRoZSBlbmQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5IiB0aXRsZT0ic3RydWN0IEdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wZWVrLW1lbW9yeSI+PC9hPjxoMz5nc3RfYnVmZmVyX3BlZWtfbWVtb3J5ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKiAgICAgICAgIGdzdF9idWZmZXJfcGVla19tZW1vcnkgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGlkeDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1hcEZsYWdzIiB0aXRsZT0iZW51bSBHc3RNYXBGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1hcEZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgdGhlIG1lbW9yeSBibG9jayBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+IGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZHg8L2NvZGU+PC9lbT4gZm9yIG1lbW9yeSBhY2Nlc3MgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZsYWdzPC9jb2RlPjwvZW0+LgorVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYSByZWZjb3VudCB0byB0aGUgbWVtb3J5IGJsb2NrLiBUaGUgbWVtb3J5CitibG9jayBzdGF5cyB2YWxpZCBmb3IgYXMgbG9uZyBhcyB0aGUgY2FsbGVyIGhhcyBhIHZhbGlkIHJlZmVyZW5jZSB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+LgorPC9wPgorPHA+Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+IHNob3VsZCBiZSB3cml0YWJsZSB3aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPiBjb250YWlucyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dTVC1NQVAtV1JJVEU6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9NQVBfV1JJVEU8L3NwYW4+PC9hPi4gSWYgdGhlIG1lbW9yeQorYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkeDwvY29kZT48L2VtPiBpcyBub3Qgd3JpdGFibGUsIGEgbmV3IHdyaXRhYmxlIGNvcHkgd2lsbCBiZSBpbnN0YWxsZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPiBhbmQKK3JldHVybmVkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWR4PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFuIGluZGV4PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1hcEZsYWdzIiB0aXRsZT0iZW51bSBHc3RNYXBGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1hcEZsYWdzPC9zcGFuPjwvYT48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5IiB0aXRsZT0ic3RydWN0IEdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+IGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZHg8L2NvZGU+PC9lbT4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1yZW1vdmUtbWVtb3J5Ij48L2E+PGgzPmdzdF9idWZmZXJfcmVtb3ZlX21lbW9yeSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZW1vcnkoYixpKSAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWVtb3J5X3JhbmdlICgoYiksIChpKSwgMSkKKzwvcHJlPgorPHA+CitSZW1vdmUgdGhlIG1lbW9yeSBibG9jayBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPiBhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aTwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFuIGluZGV4PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1yZW1vdmUtbWVtb3J5LXJhbmdlIj48L2E+PGgzPmdzdF9idWZmZXJfcmVtb3ZlX21lbW9yeV9yYW5nZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZW1vcnlfcmFuZ2UgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpZHg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBsZW5ndGg8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZW1vdmUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxlbjwvY29kZT48L2VtPiBtZW1vcnkgYmxvY2tzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4gc3RhcnRpbmcgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWR4PC9jb2RlPjwvZW0+LgorPC9wPgorPHA+Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGVuZ3RoPC9jb2RlPjwvZW0+IGNhbiBiZSAtMSwgaW4gd2hpY2ggY2FzZSBhbGwgbWVtb3J5IHN0YXJ0aW5nIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkeDwvY29kZT48L2VtPiBpcyByZW1vdmVkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWR4PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFuIGluZGV4PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sZW5ndGg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBsZW5ndGg8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVmZmVyLWpvaW4iPjwvYT48aDM+Z3N0X2J1ZmZlcl9qb2luICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKiAgICAgICAgIGdzdF9idWZmZXJfam9pbiAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZjE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZjI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGUgYSBuZXcgYnVmZmVyIHRoYXQgaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHR3byBzb3VyY2UKK2J1ZmZlcnMsIGFuZCB1bnJlZnMgdGhlIG9yaWdpbmFsIHNvdXJjZSBidWZmZXJzLgorPC9wPgorPHA+CitJZiB0aGUgYnVmZmVycyBwb2ludCB0byBjb250aWd1b3VzIGFyZWFzIG9mIG1lbW9yeSwgdGhlIGJ1ZmZlcgoraXMgY3JlYXRlZCB3aXRob3V0IGNvcHlpbmcgdGhlIGRhdGEuCis8L3A+Cis8cD4KK1RoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgQyBwcm9ncmFtbWVycy4gU2VlIGFsc28KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1tZXJnZSIgdGl0bGU9ImdzdF9idWZmZXJfbWVyZ2UgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9tZXJnZSgpPC9jb2RlPjwvYT4sIHdoaWNoIGRvZXMgdGhlIHNhbWUgdGhpbmcgd2l0aG91dAordW5yZWZmaW5nIHRoZSBpbnB1dCBwYXJhbWV0ZXJzLiBMYW5ndWFnZSBiaW5kaW5ncyB3aXRob3V0CitleHBsaWNpdCByZWZlcmVuY2UgY291bnRpbmcgc2hvdWxkIG5vdCB3cmFwIHRoaXMgZnVuY3Rpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmMTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZmlyc3Qgc291cmNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmMjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2Vjb25kIHNvdXJjZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IHdoaWNoIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mCit0aGUgc291cmNlIGJ1ZmZlcnMuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVmZmVyLW1lcmdlIj48L2E+PGgzPmdzdF9idWZmZXJfbWVyZ2UgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqICAgICAgICAgZ3N0X2J1ZmZlcl9tZXJnZSAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmMTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmMjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZSBhIG5ldyBidWZmZXIgdGhhdCBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgdHdvIHNvdXJjZQorYnVmZmVycy4gIFRoZSBvcmlnaW5hbCBzb3VyY2UgYnVmZmVycyB3aWxsIG5vdCBiZSBtb2RpZmllZCBvcgordW5yZWYnZC4gIE1ha2Ugc3VyZSB5b3UgdW5yZWYgdGhlIHNvdXJjZSBidWZmZXJzIGlmIHRoZXkgYXJlIG5vdCB1c2VkCithbnltb3JlIGFmdGVyd2FyZHMuCis8L3A+Cis8cD4KK0lmIHRoZSBidWZmZXJzIHBvaW50IHRvIGNvbnRpZ3VvdXMgYXJlYXMgb2YgbWVtb3J5LCB0aGUgYnVmZmVyCitpcyBjcmVhdGVkIHdpdGhvdXQgY29weWluZyB0aGUgZGF0YS4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ3N0X2J1ZmZlcl91bnJlZgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZjE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGZpcnN0IHNvdXJjZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiB0byBtZXJnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmMjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2Vjb25kIHNvdXJjZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiB0byBtZXJnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gd2hpY2ggaXMgdGhlIGNvbmNhdGVuYXRpb24KK29mIHRoZSBzb3VyY2UgYnVmZmVycy4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1idWZmZXItbWFwIj48L2E+PGgzPmdzdF9idWZmZXJfbWFwICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9idWZmZXJfbWFwICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+ICpzaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gKm1heHNpemU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNYXBGbGFncyIgdGl0bGU9ImVudW0gR3N0TWFwRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNYXBGbGFnczwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVGhpcyBmdW5jdGlvbiByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBtZW1vcnkgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPi4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZsYWdzPC9jb2RlPjwvZW0+IGRlc2NyaWJlIHRoZQorZGVzaXJlZCBhY2Nlc3Mgb2YgdGhlIG1lbW9yeS4gV2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZ3M8L2NvZGU+PC9lbT4gaXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHU1QtTUFQLVdSSVRFOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfTUFQX1dSSVRFPC9zcGFuPjwvYT4sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4gc2hvdWxkCitiZSB3cml0YWJsZSAoYXMgcmV0dXJuZWQgZnJvbSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItaXMtd3JpdGFibGUiIHRpdGxlPSJnc3RfYnVmZmVyX2lzX3dyaXRhYmxlKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9pc193cml0YWJsZSgpPC9jb2RlPjwvYT4pLgorPC9wPgorPHA+Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1heHNpemU8L2NvZGU+PC9lbT4gd2lsbCBjb250YWluIHRoZSBjdXJyZW50IHZhbGlkIG51bWJlciBvZiBieXRlcyBpbiB0aGUKK3JldHVybmVkIG1lbW9yeSBhcmVhIGFuZCB0aGUgdG90YWwgbWF4aW11bSBtb3VudCBvZiBieXRlcyBhdmFpbGFibGUgaW4gdGhlCityZXR1cm5lZCBtZW1vcnkgYXJlYSByZXNwZWN0aXZlbHkuCis8L3A+Cis8cD4KK1doZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPiBpcyB3cml0YWJsZSBidXQgdGhlIG1lbW9yeSBpc24ndCwgYSB3cml0YWJsZSBjb3B5IHdpbGwKK2F1dG9tYXRpY2FsbHkgYmUgY3JlYXRlZCBhbmQgcmV0dXJuZWQuIFRoZSByZWFkb25seSBjb3B5IG9mIHRoZSBidWZmZXIgbWVtb3J5Cit3aWxsIHRoZW4gYWxzbyBiZSByZXBsYWNlZCB3aXRoIHRoaXMgd3JpdGFibGUgY29weS4KKzwvcD4KKzxwPgorV2hlbiB0aGUgYnVmZmVyIGNvbnRhaW5zIG11bHRpcGxlIG1lbW9yeSBibG9ja3MsIHRoZSByZXR1cm5lZCBwb2ludGVyIHdpbGwgYmUKK2EgY29uY2F0ZW5hdGlvbiBvZiB0aGUgbWVtb3J5IGJsb2Nrcy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBsb2NhdGlvbiBmb3IgdGhlIHNpemU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1heHNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBsb2NhdGlvbiBmb3IgdGhlIG1heCBzaXplPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5mbGFncyBmb3IgdGhlIG1hcHBpbmc8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSBmb3IgdGhlIGJ1ZmZlci48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVmZmVyLXVubWFwIj48L2E+PGgzPmdzdF9idWZmZXJfdW5tYXAgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWxlYXNlIHRoZSBtZW1vcnkgcHJldmlvdXNseSBtYXBwZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbWFwIiB0aXRsZT0iZ3N0X2J1ZmZlcl9tYXAgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9tYXAoKTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcHJldmlvdXNseSBtYXBwZWQgZGF0YTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2l6ZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPlRSVUU8L3NwYW4+PC9hPiBvbiBzdWNjZXNzLiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5GQUxTRTwvc3Bhbj48L2E+IGNhbiBiZSByZXR1cm5lZCB3aGVuIHRoZSBuZXcgc2l6ZSBpcyBsYXJnZXIKK3RoYW4gdGhlIG1heHNpemUgb2YgdGhlIG1lbW9yeS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVmZmVyLW1lbWNtcCI+PC9hPjxoMz5nc3RfYnVmZmVyX21lbWNtcCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgIGdzdF9idWZmZXJfbWVtY21wICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NvbnN0cG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjb25zdHBvaW50ZXI8L3NwYW4+PC9hPiBtZW08L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ29tcGFyZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPiBieXRlcyBzdGFydGluZyBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4gaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPiB3aXRoIHRoZSBtZW1vcnkgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgb2Zmc2V0IGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtZW1vcnkgdG8gY29tcGFyZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2l6ZSB0byBjb21wYXJlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+MCBpZiB0aGUgbWVtb3J5IGlzIGVxdWFsLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1idWZmZXItZXh0cmFjdCI+PC9hPjxoMz5nc3RfYnVmZmVyX2V4dHJhY3QgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nc2l6ZTwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl9leHRyYWN0ICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gb2Zmc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGVzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb3B5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+IGJ5dGVzIHN0YXJ0aW5nIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPiBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+IHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0PC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBvZmZzZXQgdG8gZXh0cmFjdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZGVzdGluYXRpb24gYWRkcmVzczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2l6ZSB0byBleHRyYWN0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGFtb3VudCBvZiBieXRlcyBleHRyYWN0ZWQuIFRoaXMgdmFsdWUgY2FuIGJlIGxvd2VyIHRoYW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4KK3doZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPiBkaWQgbm90IGNvbnRhaW4gZW5vdWdoIGRhdGEuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1maWxsIj48L2E+PGgzPmdzdF9idWZmZXJfZmlsbCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdzaXplPC9zcGFuPjwvYT4gICAgICAgICAgICAgICBnc3RfYnVmZmVyX2ZpbGwgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djb25zdHBvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY29uc3Rwb2ludGVyPC9zcGFuPjwvYT4gc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NvcHkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4gYnl0ZXMgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+IHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4gYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgb2Zmc2V0IHRvIGZpbGw8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc291cmNlIGFkZHJlc3M8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNpemUgdG8gZmlsbDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBhbW91bnQgb2YgYnl0ZXMgY29waWVkLiBUaGlzIHZhbHVlIGNhbiBiZSBsb3dlciB0aGFuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+Cit3aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4gZGlkIG5vdCBjb250YWluIGVub3VnaCBkYXRhLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1idWZmZXItbWVtc2V0Ij48L2E+PGgzPmdzdF9idWZmZXJfbWVtc2V0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3NpemU8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIGdzdF9idWZmZXJfbWVtc2V0ICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0ZpbGwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZjwvY29kZT48L2VtPiB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+IGJ5dGVzIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPiBzdGFydGluZyBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG9mZnNldCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdmFsdWUgdG8gc2V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzaXplIHRvIHNldDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBhbW91bnQgb2YgYnl0ZXMgZmlsbGVkLiBUaGlzIHZhbHVlIGNhbiBiZSBsb3dlciB0aGFuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+Cit3aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4gZGlkIG5vdCBjb250YWluIGVub3VnaCBkYXRhLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1CVUZGRVItQ09QWS1NRVRBREFUQTpDQVBTIj48L2E+PGgzPkdTVF9CVUZGRVJfQ09QWV9NRVRBREFUQTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQlVGRkVSX0NPUFlfTUVUQURBVEEgICAgICAgKEdTVF9CVUZGRVJfQ09QWV9GTEFHUyB8IEdTVF9CVUZGRVJfQ09QWV9USU1FU1RBTVBTKQorPC9wcmU+Cis8cD4KK0NvbWJpbmF0aW9uIG9mIGFsbCBwb3NzaWJsZSBtZXRhZGF0YSBmaWVsZHMgdGhhdCBjYW4gYmUgY29waWVkIHdpdGgKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1jb3B5LWludG8iIHRpdGxlPSJnc3RfYnVmZmVyX2NvcHlfaW50byAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX2NvcHlfaW50bygpPC9jb2RlPjwvYT4uCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1CVUZGRVItQ09QWS1BTEw6Q0FQUyI+PC9hPjxoMz5HU1RfQlVGRkVSX0NPUFlfQUxMPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CVUZGRVJfQ09QWV9BTEwgICgoR3N0QnVmZmVyQ29weUZsYWdzKShHU1RfQlVGRkVSX0NPUFlfTUVUQURBVEEgfCBHU1RfQlVGRkVSX0NPUFlfTUVNT1JZKSkKKzwvcHJlPgorPHA+CitDb21iaW5hdGlvbiBvZiBhbGwgcG9zc2libGUgZmllbGRzIHRoYXQgY2FuIGJlIGNvcGllZCB3aXRoCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItY29weS1pbnRvIiB0aXRsZT0iZ3N0X2J1ZmZlcl9jb3B5X2ludG8gKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9jb3B5X2ludG8oKTwvY29kZT48L2E+LgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVmZmVyLWNvcHkiPjwvYT48aDM+Z3N0X2J1ZmZlcl9jb3B5ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKiAgICAgICAgIGdzdF9idWZmZXJfY29weSAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZSBhIGNvcHkgb2YgdGhlIGdpdmVuIGJ1ZmZlci4gVGhpcyB3aWxsIGFsc28gbWFrZSBhIG5ld2x5IGFsbG9jYXRlZAorY29weSBvZiB0aGUgZGF0YSB0aGUgc291cmNlIGJ1ZmZlciBjb250YWlucy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWY8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyBjb3B5IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWY8L2NvZGU+PC9lbT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVmZmVyLWNvcHktaW50byI+PC9hPjxoMz5nc3RfYnVmZmVyX2NvcHlfaW50byAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYnVmZmVyX2NvcHlfaW50byAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpkZXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXJDb3B5RmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEJ1ZmZlckNvcHlGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckNvcHlGbGFnczwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gb2Zmc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NvcGllcyB0aGUgaW5mb3JtYXRpb24gZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+IGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3Q8L2NvZGU+PC9lbT4uCis8L3A+Cis8cD4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPiBpbmRpY2F0ZSB3aGljaCBmaWVsZHMgd2lsbCBiZSBjb3BpZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGRlc3RpbmF0aW9uIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHNvdXJjZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5mbGFncyBpbmRpY2F0aW5nIHdoYXQgbWV0YWRhdGEgZmllbGRzIHNob3VsZCBiZSBjb3BpZWQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+b2Zmc2V0IHRvIGNvcHkgZnJvbTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50b3RhbCBzaXplIHRvIGNvcHkuIElmIC0xLCBhbGwgZGF0YSBpcyBjb3BpZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1jb3B5LXJlZ2lvbiI+PC9hPjxoMz5nc3RfYnVmZmVyX2NvcHlfcmVnaW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKiAgICAgICAgIGdzdF9idWZmZXJfY29weV9yZWdpb24gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKnBhcmVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlckNvcHlGbGFncyIgdGl0bGU9ImVudW0gR3N0QnVmZmVyQ29weUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyQ29weUZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlcyBhIHN1Yi1idWZmZXIgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyZW50PC9jb2RlPjwvZW0+IGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+LgorVGhpcyBzdWItYnVmZmVyIHVzZXMgdGhlIGFjdHVhbCBtZW1vcnkgc3BhY2Ugb2YgdGhlIHBhcmVudCBidWZmZXIuCitUaGlzIGZ1bmN0aW9uIHdpbGwgY29weSB0aGUgb2Zmc2V0IGFuZCB0aW1lc3RhbXAgZmllbGRzIHdoZW4gdGhlCitvZmZzZXQgaXMgMC4gSWYgbm90LCB0aGV5IHdpbGwgYmUgc2V0IHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1USU1FLU5PTkU6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19USU1FX05PTkUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfQ0xPQ0tfVElNRV9OT05FPC9zcGFuPjwvYT4gYW5kIAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLU9GRlNFVC1OT05FOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX09GRlNFVF9OT05FIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0JVRkZFUl9PRkZTRVRfTk9ORTwvc3Bhbj48L2E+LgorSWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPiBlcXVhbHMgMCBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4gZXF1YWxzIHRoZSB0b3RhbCBzaXplIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4sIHRoZQorZHVyYXRpb24gYW5kIG9mZnNldCBlbmQgZmllbGRzIGFyZSBhbHNvIGNvcGllZC4gSWYgbm90IHRoZXkgd2lsbCBiZSBzZXQKK3RvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1USU1FLU5PTkU6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19USU1FX05PTkUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfQ0xPQ0tfVElNRV9OT05FPC9zcGFuPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1PRkZTRVQtTk9ORTpDQVBTIiB0aXRsZT0iR1NUX0JVRkZFUl9PRkZTRVRfTk9ORSI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9CVUZGRVJfT0ZGU0VUX05PTkU8L3NwYW4+PC9hPi4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXJlbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZsYWdzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlckNvcHlGbGFncyIgdGl0bGU9ImVudW0gR3N0QnVmZmVyQ29weUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyQ29weUZsYWdzPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBvZmZzZXQgaW50byBwYXJlbnQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gYXQgd2hpY2ggdGhlIG5ldyBzdWItYnVmZmVyCitiZWdpbnMuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzaXplIG9mIHRoZSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gc3ViLWJ1ZmZlciwgaW4gYnl0ZXMuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiBvciBOVUxMIGlmIHRoZSBhcmd1bWVudHMgd2VyZQoraW52YWxpZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1idWZmZXItaXMtd3JpdGFibGUiPjwvYT48aDM+Z3N0X2J1ZmZlcl9pc193cml0YWJsZSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgZ3N0X2J1ZmZlcl9pc193cml0YWJsZShidWYpICAgICBnc3RfbWluaV9vYmplY3RfaXNfd3JpdGFibGUgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChidWYpKQorPC9wcmU+Cis8cD4KK1Rlc3RzIGlmIHlvdSBjYW4gc2FmZWx5IHdyaXRlIGRhdGEgaW50byBhIGJ1ZmZlcidzIGRhdGEgYXJyYXkgb3IgdmFsaWRseQorbW9kaWZ5IHRoZSBjYXBzIGFuZCB0aW1lc3RhbXAgbWV0YWRhdGEuIE1ldGFkYXRhIGluIGEgR3N0QnVmZmVyIGlzIGFsd2F5cword3JpdGFibGUsIGJ1dCBpdCBpcyBvbmx5IHNhZmUgdG8gY2hhbmdlIGl0IHdoZW4gdGhlcmUgaXMgb25seSBvbmUgb3duZXIKK29mIHRoZSBidWZmZXIgLSBpZSwgdGhlIHJlZmNvdW50IGlzIDEuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1tYWtlLXdyaXRhYmxlIj48L2E+PGgzPmdzdF9idWZmZXJfbWFrZV93cml0YWJsZSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlKGJ1ZikgICBHU1RfQlVGRkVSX0NBU1QgKGdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoYnVmKSkpCis8L3ByZT4KKzxwPgorTWFrZXMgYSB3cml0YWJsZSBidWZmZXIgZnJvbSB0aGUgZ2l2ZW4gYnVmZmVyLiBJZiB0aGUgc291cmNlIGJ1ZmZlciBpcworYWxyZWFkeSB3cml0YWJsZSwgdGhpcyB3aWxsIHNpbXBseSByZXR1cm4gdGhlIHNhbWUgYnVmZmVyLiBBIGNvcHkgd2lsbAorb3RoZXJ3aXNlIGJlIG1hZGUgdXNpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWNvcHkiIHRpdGxlPSJnc3RfYnVmZmVyX2NvcHkgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9jb3B5KCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWY8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgd3JpdGFibGUgYnVmZmVyIHdoaWNoIG1heSBvciBtYXkgbm90IGJlIHRoZQorc2FtZSBhcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmPC9jb2RlPjwvZW0+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1yZXBsYWNlIj48L2E+PGgzPmdzdF9idWZmZXJfcmVwbGFjZSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIGdzdF9idWZmZXJfcmVwbGFjZShvYnVmLG5idWYpPC9wcmU+Cis8cD4KK01vZGlmaWVzIGEgcG9pbnRlciB0byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IHRvIHBvaW50IHRvIGEgZGlmZmVyZW50IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LiBUaGUKK21vZGlmaWNhdGlvbiBpcyBkb25lIGF0b21pY2FsbHkgKHNvIHRoaXMgaXMgdXNlZnVsIGZvciBlbnN1cmluZyB0aHJlYWQgc2FmZXR5CitpbiBzb21lIGNhc2VzKSwgYW5kIHRoZSByZWZlcmVuY2UgY291bnRzIGFyZSB1cGRhdGVkIGFwcHJvcHJpYXRlbHkgKHRoZSBvbGQKK2J1ZmZlciBpcyB1bnJlZmZlZCwgdGhlIG5ldyBpcyByZWZmZWQpLgorPC9wPgorPHA+CitFaXRoZXIgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5idWY8L2NvZGU+PC9lbT4gb3IgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9idWY8L2NvZGU+PC9lbT4gbWF5IGJlIE5VTEwuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2J1ZjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIGEgcG9pbnRlciB0byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IHRvIGJlCityZXBsYWNlZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dCBhbmQgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+aW5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5idWY8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9pbnRlciB0byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IHRoYXQgd2lsbAorcmVwbGFjZSB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9idWY8L2NvZGU+PC9lbT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1idWZmZXItaXMtc3Bhbi1mYXN0Ij48L2E+PGgzPmdzdF9idWZmZXJfaXNfc3Bhbl9mYXN0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9idWZmZXJfaXNfc3Bhbl9mYXN0ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZjE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZjI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitEZXRlcm1pbmVzIHdoZXRoZXIgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItc3BhbiIgdGl0bGU9ImdzdF9idWZmZXJfc3BhbiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3NwYW4oKTwvY29kZT48L2E+IGNhbiBiZSBkb25lIHdpdGhvdXQgY29weWluZwordGhlIGNvbnRlbnRzLCB0aGF0IGlzLCB3aGV0aGVyIHRoZSBkYXRhIGFyZWFzIGFyZSBjb250aWd1b3VzIHN1Yi1idWZmZXJzIG9mCit0aGUgc2FtZSBidWZmZXIuCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmMTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZmlyc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWYyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzZWNvbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiB0aGUgYnVmZmVycyBhcmUgY29udGlndW91cywKK0ZBTFNFIGlmIGEgY29weSB3b3VsZCBiZSByZXF1aXJlZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVmZmVyLXNwYW4iPjwvYT48aDM+Z3N0X2J1ZmZlcl9zcGFuICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKiAgICAgICAgIGdzdF9idWZmZXJfc3BhbiAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZjE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZjI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlcyBhIG5ldyBidWZmZXIgdGhhdCBjb25zaXN0cyBvZiBwYXJ0IG9mIGJ1ZjEgYW5kIGJ1ZjIuCitMb2dpY2FsbHksIGJ1ZjEgYW5kIGJ1ZjIgYXJlIGNvbmNhdGVuYXRlZCBpbnRvIGEgc2luZ2xlIGxhcmdlcgorYnVmZmVyLCBhbmQgYSBuZXcgYnVmZmVyIGlzIGNyZWF0ZWQgYXQgdGhlIGdpdmVuIG9mZnNldCBpbnNpZGUKK3RoaXMgc3BhY2UsIHdpdGggYSBnaXZlbiBsZW5ndGguCis8L3A+Cis8cD4KK0lmIHRoZSB0d28gc291cmNlIGJ1ZmZlcnMgYXJlIGNoaWxkcmVuIG9mIHRoZSBzYW1lIGxhcmdlciBidWZmZXIsCithbmQgYXJlIGNvbnRpZ3VvdXMsIHRoZSBuZXcgYnVmZmVyIHdpbGwgYmUgYSBjaGlsZCBvZiB0aGUgc2hhcmVkCitwYXJlbnQsIGFuZCB0aHVzIG5vIGNvcHlpbmcgaXMgbmVjZXNzYXJ5LiB5b3UgY2FuIHVzZQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWlzLXNwYW4tZmFzdCIgdGl0bGU9ImdzdF9idWZmZXJfaXNfc3Bhbl9mYXN0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfaXNfc3Bhbl9mYXN0KCk8L2NvZGU+PC9hPiB0byBkZXRlcm1pbmUgaWYgYSBtZW1jcHkgd2lsbCBiZSBuZWVkZWQuCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmMTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZmlyc3Qgc291cmNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IHRvIG1lcmdlLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBvZmZzZXQgaW4gdGhlIGZpcnN0IGJ1ZmZlciBmcm9tIHdoZXJlIHRoZSBuZXcKK2J1ZmZlciBzaG91bGQgc3RhcnQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWYyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzZWNvbmQgc291cmNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IHRvIG1lcmdlLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdG90YWwgc2l6ZSBvZiB0aGUgbmV3IGJ1ZmZlci48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IHRoYXQgc3BhbnMgdGhlIHR3byBzb3VyY2UKK2J1ZmZlcnMsIG9yIE5VTEwgaWYgdGhlIGFyZ3VtZW50cyBhcmUgaW52YWxpZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1idWZmZXItZ2V0LW1ldGEiPjwvYT48aDM+Z3N0X2J1ZmZlcl9nZXRfbWV0YSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YSIgdGl0bGU9InN0cnVjdCBHc3RNZXRhIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1ldGE8L3NwYW4+PC9hPiAqICAgICAgICAgICBnc3RfYnVmZmVyX2dldF9tZXRhICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YUluZm8iIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YUluZm8iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhSW5mbzwvc3Bhbj48L2E+ICppbmZvPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0IHRoZSBtZXRhZGF0YSBmb3IgdGhlIGFwaSBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5mbzwvY29kZT48L2VtPiBvbiBidWZmZXIuIFdoZW4gdGhlcmUgaXMgbm8gc3VjaAorbWV0YWRhdGEsIE5VTEwgaXMgcmV0dXJuZWQuCis8L3A+Cis8cD4KK05vdGUgdGhhdCB0aGUgcmVzdWx0IG1ldGFkYXRhIG1pZ2h0IG5vdCBiZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZm88L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5mbzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFJbmZvIiB0aXRsZT0ic3RydWN0IEdzdE1ldGFJbmZvIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YUluZm88L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG1ldGFkYXRhIGZvciB0aGUgYXBpIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmZvPC9jb2RlPjwvZW0+IG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1hZGQtbWV0YSI+PC9hPjxoMz5nc3RfYnVmZmVyX2FkZF9tZXRhICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhIiB0aXRsZT0ic3RydWN0IEdzdE1ldGEiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWV0YTwvc3Bhbj48L2E+ICogICAgICAgICAgIGdzdF9idWZmZXJfYWRkX21ldGEgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhSW5mbyIgdGl0bGU9InN0cnVjdCBHc3RNZXRhSW5mbyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGFJbmZvPC9zcGFuPjwvYT4gKmluZm88L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBwYXJhbXM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBZGQgbWV0YWRhdGEgZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmZvPC9jb2RlPjwvZW0+IHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4gdXNpbmcgdGhlIHBhcmFtZXRlcnMgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhcmFtczwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmZvPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YUluZm8iIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YUluZm8iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhSW5mbzwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhcmFtczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wYXJhbXMgZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmZvPC9jb2RlPjwvZW0+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbWV0YWRhdGEgZm9yIHRoZSBhcGkgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZm88L2NvZGU+PC9lbT4gb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVmZmVyLXJlbW92ZS1tZXRhIj48L2E+PGgzPmdzdF9idWZmZXJfcmVtb3ZlX21ldGEgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YSAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGE8L3NwYW4+PC9hPiAqbWV0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlbW92ZSB0aGUgbWV0YWRhdGEgZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZXRhPC9jb2RlPjwvZW0+IG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWV0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGE8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgbWV0YWRhdGEgZXhpc3RlZCBhbmQgd2FzIHJlbW92ZWQsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaWYgbm8gc3VjaAorbWV0YWRhdGEgd2FzIG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1pdGVyYXRlLW1ldGEiPjwvYT48aDM+Z3N0X2J1ZmZlcl9pdGVyYXRlX21ldGEgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXRhPC9zcGFuPjwvYT4gKiAgICAgICAgICAgZ3N0X2J1ZmZlcl9pdGVyYXRlX21ldGEgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gKnN0YXRlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0cmlldmUgdGhlIG5leHQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YSIgdGl0bGU9InN0cnVjdCBHc3RNZXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YTwvc3Bhbj48L2E+IGFmdGVyIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jdXJyZW50PC9jb2RlPjwvZW0+LiBJZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhdGU8L2NvZGU+PC9lbT4gcG9pbnRzCit0byA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiwgdGhlIGZpcnN0IG1ldGFkYXRhIGlzIHJldHVybmVkLgorPC9wPgorPHA+Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhdGU8L2NvZGU+PC9lbT4gd2lsbCBiZSB1cGRhdGVkIHdpdGggYW4gb3BhZ2Ugc3RhdGUgcG9pbnRlcgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXRlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFuIG9wYXF1ZSBzdGF0ZSBwb2ludGVyPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIG5leHQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YSIgdGl0bGU9InN0cnVjdCBHc3RNZXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YTwvc3Bhbj48L2E+IG9yIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgaXRlbXMuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1hZGQtbWV0YS10aW1pbmciPjwvYT48aDM+Z3N0X2J1ZmZlcl9hZGRfbWV0YV90aW1pbmcoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBnc3RfYnVmZmVyX2FkZF9tZXRhX3RpbWluZyhiKSAgKChHc3RNZXRhVGltaW5nKilnc3RfYnVmZmVyX2FkZF9tZXRhKChiKSxHU1RfTUVUQV9USU1JTkdfSU5GTyxOVUxMKSkKKzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVmZmVyLWdldC1tZXRhLXRpbWluZyI+PC9hPjxoMz5nc3RfYnVmZmVyX2dldF9tZXRhX3RpbWluZygpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIGdzdF9idWZmZXJfZ2V0X21ldGFfdGltaW5nKGIpICAoKEdzdE1ldGFUaW1pbmcqKWdzdF9idWZmZXJfZ2V0X21ldGEoKGIpLEdTVF9NRVRBX1RJTUlOR19JTkZPKSkKKzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWV0YS10aW1pbmctZ2V0LWluZm8iPjwvYT48aDM+Z3N0X21ldGFfdGltaW5nX2dldF9pbmZvICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhSW5mbyIgdGl0bGU9InN0cnVjdCBHc3RNZXRhSW5mbyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXRhSW5mbzwvc3Bhbj48L2E+ICogZ3N0X21ldGFfdGltaW5nX2dldF9pbmZvICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RCdWZmZXIuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM4MWVkZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbApAQCAtMCwwICsxLDQ1MiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdzdEJ1ZmZlckxpc3Q8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3RCdWZmZXJMaXN0LnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC50b3Bfb2ZfcGFnZSI+PC9hPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9oMj4KKzxwPkdzdEJ1ZmZlckxpc3Qg4oCUIExpc3RzIG9mIGJ1ZmZlcnMgZm9yIGRhdGEtcGFzc2luZzwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0LnN5bm9wc2lzIj48L2E+PGgyPlN5bm9wc2lzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7CisKKyAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjR3N0QnVmZmVyTGlzdCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPkdzdEJ1ZmZlckxpc3Q8L2E+OworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjR3N0QnVmZmVyTGlzdCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+ICogICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1uZXciIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfbmV3ICgpIj5nc3RfYnVmZmVyX2xpc3RfbmV3PC9hPiAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjR3N0QnVmZmVyTGlzdCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+ICogICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1zaXplZC1uZXciIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3Rfc2l6ZWRfbmV3ICgpIj5nc3RfYnVmZmVyX2xpc3Rfc2l6ZWRfbmV3PC9hPiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtbGVuIiB0aXRsZT0iZ3N0X2J1ZmZlcl9saXN0X2xlbiAoKSI+Z3N0X2J1ZmZlcl9saXN0X2xlbjwvYT4gICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjR3N0QnVmZmVyTGlzdCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4pOworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtYWRkIiB0aXRsZT0iZ3N0X2J1ZmZlcl9saXN0X2FkZCgpIj5nc3RfYnVmZmVyX2xpc3RfYWRkPC9hPiAgICAgICAgICAgICAgICAgKGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiKQorPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtaW5zZXJ0IiB0aXRsZT0iZ3N0X2J1ZmZlcl9saXN0X2luc2VydCAoKSI+Z3N0X2J1ZmZlcl9saXN0X2luc2VydDwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjR3N0QnVmZmVyTGlzdCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpZHg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1yZW1vdmUiIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfcmVtb3ZlICgpIj5nc3RfYnVmZmVyX2xpc3RfcmVtb3ZlPC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNHc3RCdWZmZXJMaXN0IiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGlkeDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGxlbmd0aDwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNHc3RCdWZmZXJMaXN0IiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4gKiAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LXJlZiIgdGl0bGU9ImdzdF9idWZmZXJfbGlzdF9yZWYgKCkiPmdzdF9idWZmZXJfbGlzdF9yZWY8L2E+ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3QiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LXVucmVmIiB0aXRsZT0iZ3N0X2J1ZmZlcl9saXN0X3VucmVmICgpIj5nc3RfYnVmZmVyX2xpc3RfdW5yZWY8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNHc3RCdWZmZXJMaXN0IiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNHc3RCdWZmZXJMaXN0IiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4gKiAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LWNvcHkiIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfY29weSAoKSI+Z3N0X2J1ZmZlcl9saXN0X2NvcHk8L2E+ICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjR3N0QnVmZmVyTGlzdCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4pOworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtaXMtd3JpdGFibGUiIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfaXNfd3JpdGFibGUoKSI+Z3N0X2J1ZmZlcl9saXN0X2lzX3dyaXRhYmxlPC9hPiAgICAgICAgIChsaXN0KQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtbWFrZS13cml0YWJsZSIgdGl0bGU9ImdzdF9idWZmZXJfbGlzdF9tYWtlX3dyaXRhYmxlKCkiPmdzdF9idWZmZXJfbGlzdF9tYWtlX3dyaXRhYmxlPC9hPiAgICAgICAobGlzdCkKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3RGdW5jIiB0aXRsZT0iR3N0QnVmZmVyTGlzdEZ1bmMgKCkiPipHc3RCdWZmZXJMaXN0RnVuYzwvYT4pICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKipidWZmZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpZHg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtZm9yZWFjaCIgdGl0bGU9ImdzdF9idWZmZXJfbGlzdF9mb3JlYWNoICgpIj5nc3RfYnVmZmVyX2xpc3RfZm9yZWFjaDwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNHc3RCdWZmZXJMaXN0IiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNHc3RCdWZmZXJMaXN0RnVuYyIgdGl0bGU9IkdzdEJ1ZmZlckxpc3RGdW5jICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdEZ1bmM8L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LWdldCIgdGl0bGU9ImdzdF9idWZmZXJfbGlzdF9nZXQgKCkiPmdzdF9idWZmZXJfbGlzdF9nZXQ8L2E+ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3QiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaWR4PC9jb2RlPjwvZW0+KTsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK0J1ZmZlciBsaXN0cyBhcmUgYW4gb2JqZWN0IGNvbnRhaW5pbmcgYSBsaXN0IG9mIGJ1ZmZlcnMuCis8L3A+Cis8cD4KK0J1ZmZlciBsaXN0cyBhcmUgY3JlYXRlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1uZXciIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfbmV3ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfbGlzdF9uZXcoKTwvY29kZT48L2E+IGFuZCBmaWxsZWQgd2l0aCBkYXRhCit1c2luZyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1pbnNlcnQiIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfaW5zZXJ0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfbGlzdF9pbnNlcnQoKTwvY29kZT48L2E+LgorPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0QnVmZmVyTGlzdCI+PC9hPjxoMz5Hc3RCdWZmZXJMaXN0PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCBfR3N0QnVmZmVyTGlzdCBHc3RCdWZmZXJMaXN0OzwvcHJlPgorPHA+CitPcGFxdWUgbGlzdCBvZiBncm91cGVkIGJ1ZmZlcnMuCis8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1idWZmZXItbGlzdC1uZXciPjwvYT48aDM+Z3N0X2J1ZmZlcl9saXN0X25ldyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjR3N0QnVmZmVyTGlzdCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+ICogICAgIGdzdF9idWZmZXJfbGlzdF9uZXcgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlcyBhIG5ldywgZW1wdHkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjR3N0QnVmZmVyTGlzdCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4uIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHVucmVmZmluZwordGhlIHJldHVybmVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3QiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+LgorPC9wPgorPHA+CitGcmVlLWZ1bmN0aW9uOiBnc3RfYnVmZmVyX2xpc3RfdW5yZWYKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjR3N0QnVmZmVyTGlzdCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4uIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC11bnJlZiIgdGl0bGU9ImdzdF9idWZmZXJfbGlzdF91bnJlZiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX2xpc3RfdW5yZWYoKTwvY29kZT48L2E+CithZnRlciB1c2FnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI0PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVmZmVyLWxpc3Qtc2l6ZWQtbmV3Ij48L2E+PGgzPmdzdF9idWZmZXJfbGlzdF9zaXplZF9uZXcgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3QiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPiAqICAgICBnc3RfYnVmZmVyX2xpc3Rfc2l6ZWRfbmV3ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZXMgYSBuZXcsIGVtcHR5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3QiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+LiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciB1bnJlZmZpbmcKK3RoZSByZXR1cm5lZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNHc3RCdWZmZXJMaXN0IiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPi4gVGhlIGxpc3Qgd2lsbCBoYXZlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+IHNwYWNlIHByZWFsbG9jYXRlZCBzbwordGhhdCBtZW1vcnkgcmVhbGxvY2F0aW9ucyBjYW4gYmUgYXZvaWRlZC4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ3N0X2J1ZmZlcl9saXN0X3VucmVmCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hbiBpbml0aWFsIHJlc2VydmVkIHNpemU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3QiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+LiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtdW5yZWYiIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfdW5yZWYgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9saXN0X3VucmVmKCk8L2NvZGU+PC9hPgorYWZ0ZXIgdXNhZ2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI0PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVmZmVyLWxpc3QtbGVuIj48L2E+PGgzPmdzdF9idWZmZXJfbGlzdF9sZW4gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl9saXN0X2xlbiAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNHc3RCdWZmZXJMaXN0IiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JldHVybnMgdGhlIG51bWJlciBvZiBidWZmZXJzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNHc3RCdWZmZXJMaXN0IiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG51bWJlciBvZiBidWZmZXJzIGluIHRoZSBidWZmZXIgbGlzdDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1idWZmZXItbGlzdC1hZGQiPjwvYT48aDM+Z3N0X2J1ZmZlcl9saXN0X2FkZCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIGdzdF9idWZmZXJfbGlzdF9hZGQobCxiKSBnc3RfYnVmZmVyX2xpc3RfaW5zZXJ0KChsKSwtMSwoYikpOworPC9wcmU+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1idWZmZXItbGlzdC1pbnNlcnQiPjwvYT48aDM+Z3N0X2J1ZmZlcl9saXN0X2luc2VydCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYnVmZmVyX2xpc3RfaW5zZXJ0ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3QiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaWR4PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitJbnNlcnQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPiBhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWR4PC9jb2RlPjwvZW0+IGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+LiBPdGhlciBidWZmZXJzIGFyZSBtb3ZlZCB0byBtYWtlIHJvb20gZm9yCit0aGlzIG5ldyBidWZmZXIuCis8L3A+Cis8cD4KK0EgLTEgdmFsdWUgZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZHg8L2NvZGU+PC9lbT4gd2lsbCBhcHBlbmQgdGhlIGJ1ZmZlciBhdCB0aGUgZW5kLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNHc3RCdWZmZXJMaXN0IiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZHg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGluZGV4PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1saXN0LXJlbW92ZSI+PC9hPjxoMz5nc3RfYnVmZmVyX2xpc3RfcmVtb3ZlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9idWZmZXJfbGlzdF9yZW1vdmUgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjR3N0QnVmZmVyTGlzdCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpZHg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBsZW5ndGg8L2NvZGU+PC9lbT4pOzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVmZmVyLWxpc3QtcmVmIj48L2E+PGgzPmdzdF9idWZmZXJfbGlzdF9yZWYgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3QiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPiAqICAgICBnc3RfYnVmZmVyX2xpc3RfcmVmICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3QiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSW5jcmVhc2VzIHRoZSByZWZjb3VudCBvZiB0aGUgZ2l2ZW4gYnVmZmVyIGxpc3QgYnkgb25lLgorPC9wPgorPHA+CitOb3RlIHRoYXQgdGhlIHJlZmNvdW50IGFmZmVjdHMgdGhlIHdyaXRlYWJpbGl0eSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPiBhbmQgaXRzIGRhdGEsIHNlZQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LW1ha2Utd3JpdGFibGUiIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfbWFrZV93cml0YWJsZSgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfbGlzdF9tYWtlX3dyaXRhYmxlKCk8L2NvZGU+PC9hPi4gSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBrZWVwaW5nCithZGRpdGlvbmFsIHJlZmVyZW5jZXMgdG8gR3N0QnVmZmVyTGlzdCBpbnN0YW5jZXMgY2FuIHBvdGVudGlhbGx5IGluY3JlYXNlCit0aGUgbnVtYmVyIG9mIG1lbWNweSBvcGVyYXRpb25zIGluIGEgcGlwZWxpbmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3QiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1saXN0LXVucmVmIj48L2E+PGgzPmdzdF9idWZmZXJfbGlzdF91bnJlZiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYnVmZmVyX2xpc3RfdW5yZWYgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3QiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRGVjcmVhc2VzIHRoZSByZWZjb3VudCBvZiB0aGUgYnVmZmVyIGxpc3QuIElmIHRoZSByZWZjb3VudCByZWFjaGVzIDAsIHRoZQorYnVmZmVyIGxpc3Qgd2lsbCBiZSBmcmVlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3QiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1idWZmZXItbGlzdC1jb3B5Ij48L2E+PGgzPmdzdF9idWZmZXJfbGlzdF9jb3B5ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNHc3RCdWZmZXJMaXN0IiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4gKiAgICAgZ3N0X2J1ZmZlcl9saXN0X2NvcHkgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNHc3RCdWZmZXJMaXN0IiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZSBhIHNoYWxsb3cgY29weSBvZiB0aGUgZ2l2ZW4gYnVmZmVyIGxpc3QuIFRoaXMgd2lsbCBtYWtlIGEgbmV3bHkKK2FsbG9jYXRlZCBjb3B5IG9mIHRoZSBzb3VyY2UgbGlzdCB3aXRoIGNvcGllcyBvZiBidWZmZXIgcG9pbnRlcnMuIFRoZQorcmVmY291bnQgb2YgYnVmZmVycyBwb2ludGVkIHRvIHdpbGwgYmUgaW5jcmVhc2VkIGJ5IG9uZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjR3N0QnVmZmVyTGlzdCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IGNvcHkgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI0PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVmZmVyLWxpc3QtaXMtd3JpdGFibGUiPjwvYT48aDM+Z3N0X2J1ZmZlcl9saXN0X2lzX3dyaXRhYmxlKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgZ3N0X2J1ZmZlcl9saXN0X2lzX3dyaXRhYmxlKGxpc3QpIGdzdF9taW5pX29iamVjdF9pc193cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGxpc3QpKQorPC9wcmU+Cis8cD4KK1Rlc3RzIGlmIHlvdSBjYW4gc2FmZWx5IGFkZCBidWZmZXJzIGFuZCBncm91cHMgaW50byBhIGJ1ZmZlciBsaXN0LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjR3N0QnVmZmVyTGlzdCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI0PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVmZmVyLWxpc3QtbWFrZS13cml0YWJsZSI+PC9hPjxoMz5nc3RfYnVmZmVyX2xpc3RfbWFrZV93cml0YWJsZSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIGdzdF9idWZmZXJfbGlzdF9tYWtlX3dyaXRhYmxlKGxpc3QpIEdTVF9CVUZGRVJfTElTVF9DQVNUIChnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGxpc3QpKSkKKzwvcHJlPgorPHA+CitNYWtlcyBhIHdyaXRhYmxlIGJ1ZmZlciBsaXN0IGZyb20gdGhlIGdpdmVuIGJ1ZmZlciBsaXN0LiBJZiB0aGUgc291cmNlIGJ1ZmZlcgorbGlzdCBpcyBhbHJlYWR5IHdyaXRhYmxlLCB0aGlzIHdpbGwgc2ltcGx5IHJldHVybiB0aGUgc2FtZSBidWZmZXIgbGlzdC4gQQorY29weSB3aWxsIG90aGVyd2lzZSBiZSBtYWRlIHVzaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1jb3B5IiB0aXRsZT0iZ3N0X2J1ZmZlcl9saXN0X2NvcHkgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9saXN0X2NvcHkoKTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNHc3RCdWZmZXJMaXN0IiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgd3JpdGFibGUgbGlzdCwgd2hpY2ggbWF5IG9yIG1heSBub3QgYmUgdGhlCitzYW1lIGFzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0QnVmZmVyTGlzdEZ1bmMiPjwvYT48aDM+R3N0QnVmZmVyTGlzdEZ1bmMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgKCpHc3RCdWZmZXJMaXN0RnVuYykgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqKmJ1ZmZlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGlkeDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0EgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBmcm9tIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1mb3JlYWNoIiB0aXRsZT0iZ3N0X2J1ZmZlcl9saXN0X2ZvcmVhY2ggKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9saXN0X2ZvcmVhY2goKTwvY29kZT48L2E+LiBUaGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgorZmllbGQgd2lsbCBwb2ludCB0byBhIHRoZSByZWZlcmVuY2Ugb2YgdGhlIGJ1ZmZlciBhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWR4PC9jb2RlPjwvZW0+LgorPC9wPgorPHA+CitXaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiwgdGhlIG5leHQgYnVmZmVyIHdpbGwgYmUKK3JldHVybmVkLiBXaGVuIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaXMgcmV0dXJuZWQsIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1mb3JlYWNoIiB0aXRsZT0iZ3N0X2J1ZmZlcl9saXN0X2ZvcmVhY2ggKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9saXN0X2ZvcmVhY2goKTwvY29kZT48L2E+IHdpbGwgcmV0dXJuLgorPC9wPgorPHA+CitXaGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4gaXMgc2V0IHRvIE5VTEwsIHRoZSBpdGVtIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBidWZmZXJsaXN0LgorV2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+IGhhcyBiZWVuIG1hZGUgd3JpdGFibGUsIHRoZSBuZXcgYnVmZmVyIHJlZmVyZW5jZSBjYW4gYmUgYXNzaWduZWQKK3RvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4uIFRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHVucmVmZmluZyB0aGUgb2xkIGJ1ZmZlciB3aGVuCityZW1vdmluZyBvciBtb2RpZnlpbmcuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnBvaW50ZXIgdGhlIGJ1ZmZlcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWR4PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBpbmRleCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VyIGRhdGEgcGFzc2VkIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1mb3JlYWNoIiB0aXRsZT0iZ3N0X2J1ZmZlcl9saXN0X2ZvcmVhY2ggKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9saXN0X2ZvcmVhY2goKTwvY29kZT48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gd2hlbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtZm9yZWFjaCIgdGl0bGU9ImdzdF9idWZmZXJfbGlzdF9mb3JlYWNoICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfbGlzdF9mb3JlYWNoKCk8L2NvZGU+PC9hPiBzaG91bGQgc3RvcDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1idWZmZXItbGlzdC1mb3JlYWNoIj48L2E+PGgzPmdzdF9idWZmZXJfbGlzdF9mb3JlYWNoICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9idWZmZXJfbGlzdF9mb3JlYWNoICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjR3N0QnVmZmVyTGlzdCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjR3N0QnVmZmVyTGlzdEZ1bmMiIHRpdGxlPSJHc3RCdWZmZXJMaXN0RnVuYyAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3RGdW5jPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NhbGwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT4gd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPiBmb3IgZWFjaCBidWZmZXIgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT4uCis8L3A+Cis8cD4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+IGNhbiBtb2RpZnkgdGhlIHBhc3NlZCBidWZmZXIgcG9pbnRlciBvciBpdHMgY29udGVudHMuIFRoZSByZXR1cm4gdmFsdWUKK29mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+IGRlZmluZSBpZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgb3IgaWYgdGhlIHJlbWFpbmluZyBidWZmZXJzIGluIGEKK2dyb3VwIHNob3VsZCBiZSBza2lwcGVkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNHc3RCdWZmZXJMaXN0IiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjR3N0QnVmZmVyTGlzdEZ1bmMiIHRpdGxlPSJHc3RCdWZmZXJMaXN0RnVuYyAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3RGdW5jPC9zcGFuPjwvYT4gdG8gY2FsbC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iVGhlIGNhbGxiYWNrIGlzIHZhbGlkIG9ubHkgZHVyaW5nIHRoZSBjYWxsIHRvIHRoZSBtZXRob2QuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2NvcGUgY2FsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZXIgZGF0YSBwYXNzZWQgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoaXMgcGFyYW1ldGVyIGlzIGEgJ3VzZXJfZGF0YScsIGZvciBjYWxsYmFja3M7IG1hbnkgYmluZGluZ3MgY2FuIHBhc3MgTlVMTCBoZXJlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmNsb3N1cmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI0PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVmZmVyLWxpc3QtZ2V0Ij48L2E+PGgzPmdzdF9idWZmZXJfbGlzdF9nZXQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqICAgICAgICAgZ3N0X2J1ZmZlcl9saXN0X2dldCAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNHc3RCdWZmZXJMaXN0IiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGlkeDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCB0aGUgYnVmZmVyIGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZHg8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3QiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkeDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgaW5kZXg8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgYnVmZmVyIGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZHg8L2NvZGU+PC9lbT4gaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmdyb3VwPC9jb2RlPjwvZW0+IG9yIE5VTEwgd2hlbiB0aGVyZQoraXMgbm8gYnVmZmVyLiBUaGUgYnVmZmVyIHJlbWFpbnMgdmFsaWQgYXMgbG9uZyBhcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPiBpcyB2YWxpZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjQ8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3Quc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNhMDdkNwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbApAQCAtMCwwICsxLDc1OSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdzdEJ1ZmZlclBvb2w8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RCdXMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wudG9wX29mX3BhZ2UiPjwvYT5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvaDI+Cis8cD5Hc3RCdWZmZXJQb29sIOKAlCBQb29sIGZvciBidWZmZXJzPC9wPgorPC90ZD4KKzx0ZCB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgorPC90cj48L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKKworICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNHc3RCdWZmZXJQb29sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+R3N0QnVmZmVyUG9vbDwvYT47CitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2xDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXJQb29sQ2xhc3MiPkdzdEJ1ZmZlclBvb2xDbGFzczwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2xGbGFncyIgdGl0bGU9ImVudW0gR3N0QnVmZmVyUG9vbEZsYWdzIj5Hc3RCdWZmZXJQb29sRmxhZ3M8L2E+OworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNHU1QtQlVGRkVSLVBPT0wtSVMtRkxVU0hJTkc6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfUE9PTF9JU19GTFVTSElORygpIj5HU1RfQlVGRkVSX1BPT0xfSVNfRkxVU0hJTkc8L2E+ICAgICAgICAgKHBvb2wpCisgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2xQYXJhbXMiIHRpdGxlPSJHc3RCdWZmZXJQb29sUGFyYW1zIj5Hc3RCdWZmZXJQb29sUGFyYW1zPC9hPjsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2wiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPiAqICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtbmV3IiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX25ldyAoKSI+Z3N0X2J1ZmZlcl9wb29sX25ldzwvYT4gICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1nZXQiIHRpdGxlPSJnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldCAoKSI+Z3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19nZXQ8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKmNvbmZpZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKipjYXBzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gKnNpemU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAqbWluX2J1ZmZlcnM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAqbWF4X2J1ZmZlcnM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAqcHJlZml4PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gKmFsaWduPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1zZXQiIHRpdGxlPSJnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldCAoKSI+Z3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXQ8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKmNvbmZpZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbWluX2J1ZmZlcnM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBtYXhfYnVmZmVyczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHByZWZpeDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGFsaWduPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1hZGQtb3B0aW9uIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19hZGRfb3B0aW9uICgpIj5nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2FkZF9vcHRpb248L2E+ICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqY29uZmlnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm9wdGlvbjwvY29kZT48L2VtPik7Citjb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1jb25maWctZ2V0LW9wdGlvbiIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9jb25maWdfZ2V0X29wdGlvbiAoKSI+Z3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19nZXRfb3B0aW9uPC9hPiAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKmNvbmZpZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1oYXMtb3B0aW9uIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19oYXNfb3B0aW9uICgpIj5nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2hhc19vcHRpb248L2E+ICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqY29uZmlnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm9wdGlvbjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1jb25maWctbi1vcHRpb25zIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19uX29wdGlvbnMgKCkiPmdzdF9idWZmZXJfcG9vbF9jb25maWdfbl9vcHRpb25zPC9hPiAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpjb25maWc8L2NvZGU+PC9lbT4pOworY29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiogICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtZ2V0LW9wdGlvbnMiIHRpdGxlPSJnc3RfYnVmZmVyX3Bvb2xfZ2V0X29wdGlvbnMgKCkiPmdzdF9idWZmZXJfcG9vbF9nZXRfb3B0aW9uczwvYT4gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2wiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyUG9vbDwvc3Bhbj48L2E+ICpwb29sPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWhhcy1vcHRpb24iIHRpdGxlPSJnc3RfYnVmZmVyX3Bvb2xfaGFzX29wdGlvbiAoKSI+Z3N0X2J1ZmZlcl9wb29sX2hhc19vcHRpb248L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4gKnBvb2w8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqb3B0aW9uPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWdldC1jb25maWciIHRpdGxlPSJnc3RfYnVmZmVyX3Bvb2xfZ2V0X2NvbmZpZyAoKSI+Z3N0X2J1ZmZlcl9wb29sX2dldF9jb25maWc8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4gKnBvb2w8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtc2V0LWNvbmZpZyIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnICgpIj5nc3RfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZzwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNHc3RCdWZmZXJQb29sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPiAqcG9vbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqY29uZmlnPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLXNldC1hY3RpdmUiIHRpdGxlPSJnc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZSAoKSI+Z3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmU8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4gKnBvb2w8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBhY3RpdmU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtaXMtYWN0aXZlIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2lzX2FjdGl2ZSAoKSI+Z3N0X2J1ZmZlcl9wb29sX2lzX2FjdGl2ZTwvYT4gICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4gKnBvb2w8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+ICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1hY3F1aXJlLWJ1ZmZlciIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlciAoKSI+Z3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyPC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4gKnBvb2w8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKipidWZmZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbFBhcmFtcyIgdGl0bGU9IkdzdEJ1ZmZlclBvb2xQYXJhbXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sUGFyYW1zPC9zcGFuPjwvYT4gKnBhcmFtczwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1yZWxlYXNlLWJ1ZmZlciIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9yZWxlYXNlX2J1ZmZlciAoKSI+Z3N0X2J1ZmZlcl9wb29sX3JlbGVhc2VfYnVmZmVyPC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4gKnBvb2w8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPik7Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0QnVmZmVyUG9vbCI+PC9hPjxoMz5Hc3RCdWZmZXJQb29sPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCB7CisgIEdzdE9iamVjdCAgICAgICAgICAgIG9iamVjdDsKK30gR3N0QnVmZmVyUG9vbDsKKzwvcHJlPgorPHA+CitUaGUgc3RydWN0dXJlIG9mIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4uIFVzZSB0aGUgYXNzb2NpYXRlZCBtYWNyb3MgdG8gYWNjZXNzIHRoZSBwdWJsaWMKK3ZhcmlhYmxlcy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QnVmZmVyUG9vbC5vYmplY3QiPjwvYT5vYmplY3Q8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwYXJlbnQgc3RydWN0dXJlPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEJ1ZmZlclBvb2xDbGFzcyI+PC9hPjxoMz5zdHJ1Y3QgR3N0QnVmZmVyUG9vbENsYXNzPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0QnVmZmVyUG9vbENsYXNzIHsKKyAgR3N0T2JqZWN0Q2xhc3MgICAgb2JqZWN0X2NsYXNzOworCisgIC8qIHZtZXRob2RzICovCisgIGNvbnN0IGdjaGFyICoqICgqZ2V0X29wdGlvbnMpICAgIChHc3RCdWZmZXJQb29sICpwb29sKTsKKyAgZ2Jvb2xlYW4gICAgICAgKCpzZXRfY29uZmlnKSAgICAgKEdzdEJ1ZmZlclBvb2wgKnBvb2wsIEdzdFN0cnVjdHVyZSAqY29uZmlnKTsKKworICBnYm9vbGVhbiAgICAgICAoKnN0YXJ0KSAgICAgICAgICAoR3N0QnVmZmVyUG9vbCAqcG9vbCk7CisgIGdib29sZWFuICAgICAgICgqc3RvcCkgICAgICAgICAgIChHc3RCdWZmZXJQb29sICpwb29sKTsKKworICBHc3RGbG93UmV0dXJuICAoKmFjcXVpcmVfYnVmZmVyKSAoR3N0QnVmZmVyUG9vbCAqcG9vbCwgR3N0QnVmZmVyICoqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyUG9vbFBhcmFtcyAqcGFyYW1zKTsKKyAgR3N0Rmxvd1JldHVybiAgKCphbGxvY19idWZmZXIpICAgKEdzdEJ1ZmZlclBvb2wgKnBvb2wsIEdzdEJ1ZmZlciAqKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEJ1ZmZlclBvb2xQYXJhbXMgKnBhcmFtcyk7CisgIHZvaWQgICAgICAgICAgICgqcmVzZXRfYnVmZmVyKSAgIChHc3RCdWZmZXJQb29sICpwb29sLCBHc3RCdWZmZXIgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEJ1ZmZlclBvb2xQYXJhbXMgKnBhcmFtcyk7CisgIHZvaWQgICAgICAgICAgICgqcmVsZWFzZV9idWZmZXIpIChHc3RCdWZmZXJQb29sICpwb29sLCBHc3RCdWZmZXIgKmJ1ZmZlcik7CisgIHZvaWQgICAgICAgICAgICgqZnJlZV9idWZmZXIpICAgIChHc3RCdWZmZXJQb29sICpwb29sLCBHc3RCdWZmZXIgKmJ1ZmZlcik7Cit9OworPC9wcmU+Cis8cD4KK1RoZSBHc3RCdWZmZXJQb29sIGNsYXNzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI0dzdE9iamVjdENsYXNzIiB0aXRsZT0ic3RydWN0IEdzdE9iamVjdENsYXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0Q2xhc3M8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QnVmZmVyUG9vbENsYXNzLm9iamVjdC1jbGFzcyI+PC9hPm9iamVjdF9jbGFzczwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+T2JqZWN0IHBhcmVudCBjbGFzczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCdWZmZXJQb29sQ2xhc3MuZ2V0LW9wdGlvbnMiPjwvYT5nZXRfb3B0aW9uczwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Z2V0IGEgbGlzdCBvZiBvcHRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHBvb2w8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QnVmZmVyUG9vbENsYXNzLnNldC1jb25maWciPjwvYT5zZXRfY29uZmlnPC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hcHBseSB0aGUgYnVmZmVycG9vbCBjb25maWd1cmF0aW9uLiBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uCit3aWxsIHBhcnNlIHRoZSBkZWZhdWx0IGNvbmZpZyBwYXJhbWV0ZXJzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJ1ZmZlclBvb2xDbGFzcy5zdGFydCI+PC9hPnN0YXJ0PC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zdGFydCB0aGUgYnVmZmVycG9vbC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2lsbCBwcmVhbGxvY2F0ZQorbWluLWJ1ZmZlcnMgYnVmZmVycyBhbmQgcHV0IHRoZW0gaW4gdGhlIHF1ZXVlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJ1ZmZlclBvb2xDbGFzcy5zdG9wIj48L2E+c3RvcDwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c3RvcCB0aGUgYnVmZmVycG9vbC4gdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2lsbCBmcmVlIHRoZQorcHJlYWxsb2NhdGVkIGJ1ZmZlcnMuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYWxsIHRoZSBidWZmZXJzIGFyZQorcmV0dXJuZWQgdG8gdGhlIHBvb2wuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJ1ZmZlclBvb2xDbGFzcy5hY3F1aXJlLWJ1ZmZlciI+PC9hPmFjcXVpcmVfYnVmZmVyPC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5nZXQgYSBuZXcgYnVmZmVyIGZyb20gdGhlIHBvb2wuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCit3aWxsIHRha2UgYSBidWZmZXIgZnJvbSB0aGUgcXVldWUgYW5kIG9wdGlvbmFsbHkgd2FpdCBmb3IgYSBidWZmZXIgdG8KK2JlIHJlbGVhc2VkIHdoZW4gdGhlcmUgYXJlIG5vIGJ1ZmZlcnMgYXZhaWxhYmxlLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCdWZmZXJQb29sQ2xhc3MuYWxsb2MtYnVmZmVyIj48L2E+YWxsb2NfYnVmZmVyPC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hbGxvY2F0ZSBhIGJ1ZmZlci4gdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gYWxsb2NhdGVzCitidWZmZXJzIGZyb20gdGhlIGRlZmF1bHQgbWVtb3J5IGFsbG9jYXRvciBhbmQgd2l0aCB0aGUgY29uZmlndXJlZAorc2l6ZSwgcHJlZml4IGFuZCBhbGlnbm1lbnQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJ1ZmZlclBvb2xDbGFzcy5yZXNldC1idWZmZXIiPjwvYT5yZXNldF9idWZmZXI8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPnJlc2V0IHRoZSBidWZmZXIgdG8gaXRzIHN0YXRlIHdoZW4gaXQgd2FzIGZyZXNobHkgYWxsb2NhdGVkLgorVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2lsbCBjbGVhciB0aGUgZmxhZ3MgYW5kIHRpbWVzdGFtcHMuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJ1ZmZlclBvb2xDbGFzcy5yZWxlYXNlLWJ1ZmZlciI+PC9hPnJlbGVhc2VfYnVmZmVyPC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5yZWxlYXNlIGEgYnVmZmVyIGJhY2sgaW4gdGhlIHBvb2wuIFRoZSBkZWZhdWx0CitpbXBsZW1lbnRhdGlvbiB3aWxsIHB1dCB0aGUgYnVmZmVyIGJhY2sgaW4gdGhlIHF1ZXVlIGFuZCBub3RpZnkgYW55CitibG9ja2luZyBhY3F1aXJlX2J1ZmZlciBjYWxscy48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QnVmZmVyUG9vbENsYXNzLmZyZWUtYnVmZmVyIj48L2E+ZnJlZV9idWZmZXI8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPmZyZWUgYSBidWZmZXIuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHVucmVmcyB0aGUgYnVmZmVyLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEJ1ZmZlclBvb2xGbGFncyI+PC9hPjxoMz5lbnVtIEdzdEJ1ZmZlclBvb2xGbGFnczwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBlbnVtIHsKKyAgR1NUX0JVRkZFUl9QT09MX0ZMQUdfTk9ORSAgICAgPSAwLAorICBHU1RfQlVGRkVSX1BPT0xfRkxBR19LRVlfVU5JVCA9ICgxICZsdDsmbHQ7IDApLAorICBHU1RfQlVGRkVSX1BPT0xfRkxBR19ET05UV0FJVCA9ICgxICZsdDsmbHQ7IDEpLAorICBHU1RfQlVGRkVSX1BPT0xfRkxBR19ESVNDT05UICA9ICgxICZsdDsmbHQ7IDIpLAorICBHU1RfQlVGRkVSX1BPT0xfRkxBR19MQVNUICAgICA9ICgxICZsdDsmbHQ7IDE2KSwKK30gR3N0QnVmZmVyUG9vbEZsYWdzOworPC9wcmU+Cis8cD4KK0FkZGl0aW9uYWwgZmxhZ3MgdG8gY29udHJvbCB0aGUgYWxsb2NhdGlvbiBvZiBhIGJ1ZmZlcgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQlVGRkVSLVBPT0wtRkxBRy1OT05FOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9CVUZGRVJfUE9PTF9GTEFHX05PTkU8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPm5vIGZsYWdzCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQlVGRkVSLVBPT0wtRkxBRy1LRVktVU5JVDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQlVGRkVSX1BPT0xfRkxBR19LRVlfVU5JVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YnVmZmVyIGlzIGtleWZyYW1lCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQlVGRkVSLVBPT0wtRkxBRy1ET05UV0FJVDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQlVGRkVSX1BPT0xfRkxBR19ET05UV0FJVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZG9uJ3Qgd2FpdCBmb3IgYnVmZmVyLiBUaGlzIG1ha2VzIHRoZQorYWNxdWlyZV9idWZmZXIgbWV0aG9kIHJldHVybiBHU1RfRkxPV19VTkVYUEVDVEVELgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUJVRkZFUi1QT09MLUZMQUctRElTQ09OVDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQlVGRkVSX1BPT0xfRkxBR19ESVNDT05UPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5idWZmZXIgaXMgZGlzY29udAorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUJVRkZFUi1QT09MLUZMQUctTEFTVDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQlVGRkVSX1BPT0xfRkxBR19MQVNUPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5sYXN0IGZsYWcsIHN1YmNsYXNzZXMgY2FuIHVzZSBwcml2YXRlIGZsYWdzCisgICBzdGFydGluZyBmcm9tIHRoaXMgdmFsdWUuCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQlVGRkVSLVBPT0wtSVMtRkxVU0hJTkc6Q0FQUyI+PC9hPjxoMz5HU1RfQlVGRkVSX1BPT0xfSVNfRkxVU0hJTkcoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQlVGRkVSX1BPT0xfSVNfRkxVU0hJTkcocG9vbCkgIChnX2F0b21pY19pbnRfZ2V0ICgmYW1wO3Bvb2wtJmd0O2ZsdXNoaW5nKSkKKzwvcHJlPgorPHA+CitDaGVjayBpZiB0aGUgYnVmZmVycG9vbCBpcyBmbHVzaGluZy4gU3ViY2xhc3NlcyBtaWdodCB3YW50IHRvIGNoZWNrIHRoZQorc3RhdGUgb2YgdGhlIHBvb2wgaW4gdGhlIGFjcXVpcmUgZnVuY3Rpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBvb2w8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBHc3RCdWZmZXJQb29sPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEJ1ZmZlclBvb2xQYXJhbXMiPjwvYT48aDM+R3N0QnVmZmVyUG9vbFBhcmFtczwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBzdHJ1Y3QgeworICBHc3RGb3JtYXQgICAgICAgICAgZm9ybWF0OworICBnaW50NjQgICAgICAgICAgICAgc3RhcnQ7CisgIGdpbnQ2NCAgICAgICAgICAgICBzdG9wOworICBHc3RCdWZmZXJQb29sRmxhZ3MgZmxhZ3M7Cit9IEdzdEJ1ZmZlclBvb2xQYXJhbXM7Cis8L3ByZT4KKzxwPgorUGFyYW1ldGVycyBwYXNzZWQgdG8gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1hY3F1aXJlLWJ1ZmZlciIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlciAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXIoKTwvY29kZT48L2E+IGZ1bmN0aW9uIHRvIGNvbnRyb2wgdGhlCithbGxvY2F0aW9uIG9mIHRoZSBidWZmZXIuCis8L3A+Cis8cD4KK1RoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlnbm9yZXMgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydDwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0b3A8L2NvZGU+PC9lbT4gbWVtYmVycyBidXQgb3RoZXIKK2ltcGxlbWVudGF0aW9ucyBjYW4gdXNlIHRoaXMgZXh0cmEgaW5mb3JtYXRpb24gdG8gZGVjaWRlIHdoYXQgYnVmZmVyIHRvCityZXR1cm4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJ1ZmZlclBvb2xQYXJhbXMuZm9ybWF0Ij48L2E+Zm9ybWF0PC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZm9ybWF0IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydDwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0b3A8L2NvZGU+PC9lbT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJ1ZmZlclBvb2xQYXJhbXMuc3RhcnQiPjwvYT5zdGFydDwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHN0YXJ0IHBvc2l0aW9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QnVmZmVyUG9vbFBhcmFtcy5zdG9wIj48L2E+c3RvcDwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHN0b3AgcG9zaXRpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbEZsYWdzIiB0aXRsZT0iZW51bSBHc3RCdWZmZXJQb29sRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sRmxhZ3M8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QnVmZmVyUG9vbFBhcmFtcy5mbGFncyI+PC9hPmZsYWdzPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hZGRpdGlvbmFsIGZsYWdzPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLW5ldyI+PC9hPjxoMz5nc3RfYnVmZmVyX3Bvb2xfbmV3ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNHc3RCdWZmZXJQb29sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4gKiAgICAgZ3N0X2J1ZmZlcl9wb29sX25ldyAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGVzIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2wiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyUG9vbDwvc3Bhbj48L2E+IGluc3RhbmNlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1nZXQiPjwvYT48aDM+Z3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19nZXQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19nZXQgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqY29uZmlnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqKmNhcHM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAqc2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICptaW5fYnVmZmVyczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICptYXhfYnVmZmVyczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICpwcmVmaXg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAqYWxpZ248L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbmZpZzwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25maWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNHc3RCdWZmZXJQb29sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPiBjb25maWd1cmF0aW9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjYXBzIG9mIGJ1ZmZlcnM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNpemUgb2YgZWFjaCBidWZmZXIsIG5vdCBpbmNsdWRpbmcgcHJlZml4PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5taW5fYnVmZmVyczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbWluaW11bSBhbW91bnQgb2YgYnVmZmVycyB0byBhbGxvY2F0ZS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1heF9idWZmZXJzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtYXhpbXVtIGFtb3VudCBvZiBidWZmZXJzIHRvIGFsbG9jYXRlIG9yIDAgZm9yIHVubGltaXRlZC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByZWZpeDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wcmVmaXggZWFjaCBidWZmZXIgd2l0aCB0aGlzIG1hbnkgYnl0ZXM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFsaWduPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFsaWdubWVudCBvZiB0aGUgYnVmZmVyIGRhdGEuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1zZXQiPjwvYT48aDM+Z3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXQgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqY29uZmlnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBtaW5fYnVmZmVyczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG1heF9idWZmZXJzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gcHJlZml4PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gYWxpZ248L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb25maWd1cmUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbmZpZzwvY29kZT48L2VtPiB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbmZpZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2wiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyUG9vbDwvc3Bhbj48L2E+IGNvbmZpZ3VyYXRpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Y2FwcyBmb3IgdGhlIGJ1ZmZlcnM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNpemUgb2YgZWFjaCBidWZmZXIsIG5vdCBpbmNsdWRpbmcgcHJlZml4PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5taW5fYnVmZmVyczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbWluaW11bSBhbW91bnQgb2YgYnVmZmVycyB0byBhbGxvY2F0ZS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1heF9idWZmZXJzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtYXhpbXVtIGFtb3VudCBvZiBidWZmZXJzIHRvIGFsbG9jYXRlIG9yIDAgZm9yIHVubGltaXRlZC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByZWZpeDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wcmVmaXggZWFjaCBidWZmZXIgd2l0aCB0aGlzIG1hbnkgYnl0ZXM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFsaWduPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFsaWdubWVudCBvZiB0aGUgYnVmZmVyIGRhdGEuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1hZGQtb3B0aW9uIj48L2E+PGgzPmdzdF9idWZmZXJfcG9vbF9jb25maWdfYWRkX29wdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2FkZF9vcHRpb24gICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpjb25maWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqb3B0aW9uPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRW5hYmxlZCB0aGUgb3B0aW9uIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25maWc8L2NvZGU+PC9lbT4uIFRoaXMgd2lsbCBpbnN0cnVjdCB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcnBvb2w8L2NvZGU+PC9lbT4gdG8gZW5hYmxlCit0aGUgc3BlY2lmaWVkIG9wdGlvbiBvbiB0aGUgYnVmZmVycyB0aGF0IGl0IGFsbG9jYXRlcy4KKzwvcD4KKzxwPgorVGhlIHN1cHBvcnRlZCBvcHRpb25zIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wb29sPC9jb2RlPjwvZW0+IGNhbiBiZSByZXRyaWV2ZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtZ2V0LW9wdGlvbnMiIHRpdGxlPSJnc3RfYnVmZmVyX3Bvb2xfZ2V0X29wdGlvbnMgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9wb29sX2dldF9vcHRpb25zKCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25maWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNHc3RCdWZmZXJQb29sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPiBjb25maWd1cmF0aW9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vcHRpb248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YW4gb3B0aW9uIHRvIGFkZDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1idWZmZXItcG9vbC1jb25maWctZ2V0LW9wdGlvbiI+PC9hPjxoMz5nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldF9vcHRpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICogICAgICAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19nZXRfb3B0aW9uICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqY29uZmlnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitQYXJzZSBhbiBhdmFpbGFibGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbmZpZzwvY29kZT48L2VtPiBhbmQgZ2V0IHRoZSBvcHRpb24KK2F0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPiBvZiB0aGUgb3B0aW9ucyBBUEkgYXJyYXkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uZmlnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4gY29uZmlndXJhdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5kZXg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9zaXRpb24gaW4gdGhlIG9wdGlvbiBhcnJheSB0byByZWFkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+IG9mIHRoZSBvcHRpb24gYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1idWZmZXItcG9vbC1jb25maWctaGFzLW9wdGlvbiI+PC9hPjxoMz5nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2hhc19vcHRpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19oYXNfb3B0aW9uICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqY29uZmlnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm9wdGlvbjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NoZWNrIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25maWc8L2NvZGU+PC9lbT4gY29udGFpbnMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9wdGlvbjwvY29kZT48L2VtPgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbmZpZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2wiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyUG9vbDwvc3Bhbj48L2E+IGNvbmZpZ3VyYXRpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9wdGlvbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hbiBvcHRpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBvcHRpb25zIGFycmF5IGNvbnRhaW5zIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vcHRpb248L2NvZGU+PC9lbT4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1uLW9wdGlvbnMiPjwvYT48aDM+Z3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19uX29wdGlvbnMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19uX29wdGlvbnMgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqY29uZmlnPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0cmlldmUgdGhlIG51bWJlciBvZiB2YWx1ZXMgY3VycmVudGx5IHN0b3JlZCBpbiB0aGUKK29wdGlvbnMgYXJyYXkgb2YgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25maWc8L2NvZGU+PC9lbT4gc3RydWN0dXJlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbmZpZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2wiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyUG9vbDwvc3Bhbj48L2E+IGNvbmZpZ3VyYXRpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgb3B0aW9ucyBhcnJheSBzaXplIGFzIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVmZmVyLXBvb2wtZ2V0LW9wdGlvbnMiPjwvYT48aDM+Z3N0X2J1ZmZlcl9wb29sX2dldF9vcHRpb25zICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKiAgICAgIGdzdF9idWZmZXJfcG9vbF9nZXRfb3B0aW9ucyAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4gKnBvb2w8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgYSBOVUxMIHRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5nIHdpdGggc3VwcG9ydGVkIGJ1ZmZlcnBvb2wgb3B0aW9ucyBmb3IKKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wb29sPC9jb2RlPjwvZW0+LiBBbiBvcHRpb24gd291bGQgdHlwaWNhbGx5IGJlIGVuYWJsZWQgd2l0aAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1hZGQtb3B0aW9uIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19hZGRfb3B0aW9uICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfcG9vbF9jb25maWdfYWRkX29wdGlvbigpPC9jb2RlPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9vbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2wiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyUG9vbDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIE5VTEwgdGVybWluYXRlZCBhcnJheSBvZiBzdHJpbmdzLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1idWZmZXItcG9vbC1oYXMtb3B0aW9uIj48L2E+PGgzPmdzdF9idWZmZXJfcG9vbF9oYXNfb3B0aW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9idWZmZXJfcG9vbF9oYXNfb3B0aW9uICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4gKnBvb2w8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqb3B0aW9uPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2sgaWYgdGhlIGJ1ZmZlcnBvb2wgc3VwcG9ydHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9wdGlvbjwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wb29sPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b3B0aW9uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFuIG9wdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgTlVMTCB0ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZ3MuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLWdldC1jb25maWciPjwvYT48aDM+Z3N0X2J1ZmZlcl9wb29sX2dldF9jb25maWcgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqICAgICAgZ3N0X2J1ZmZlcl9wb29sX2dldF9jb25maWcgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNHc3RCdWZmZXJQb29sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPiAqcG9vbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBvZiB0aGUgcG9vbC4gVGhpcyBjb25maWd1cmF0aW9uCitjYW4gZWl0aGVyIGJlIG1vZGlmaWVkIGFuZCB1c2VkIGZvciB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLXNldC1jb25maWciIHRpdGxlPSJnc3RfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZygpPC9jb2RlPjwvYT4gY2FsbAorb3IgaXQgbXVzdCBiZSBmcmVlZCBhZnRlciB1c2FnZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wb29sPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgY29weSBvZiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wb29sPC9jb2RlPjwvZW0+LiB1c2UKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1mcmVlIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9mcmVlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdHJ1Y3R1cmVfZnJlZSgpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNhZ2Ugb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLXNldC1jb25maWciIHRpdGxlPSJnc3RfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZygpPC9jb2RlPjwvYT4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLXNldC1jb25maWciPjwvYT48aDM+Z3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWcgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWcgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNHc3RCdWZmZXJQb29sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPiAqcG9vbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqY29uZmlnPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0IHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBwb29sLiBUaGUgcG9vbCBtdXN0IGJlIGluYWN0aXZlIGFuZCBhbGwgYnVmZmVycworYWxsb2NhdGVkIGZvcm0gdGhpcyBwb29sIG11c3QgYmUgcmV0dXJuZWQgb3IgZWxzZSB0aGlzIGZ1bmN0aW9uIHdpbGwgZG8KK25vdGhpbmcgYW5kIHJldHVybiBGQUxTRS4KKzwvcD4KKzxwPgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbmZpZzwvY29kZT48L2VtPiBpcyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IHRoYXQgY29udGFpbnMgdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmb3IKK3RoZSBwb29sLiBBIGRlZmF1bHQgYW5kIG1hbmRhdG9yeSBzZXQgb2YgcGFyYW1ldGVycyBjYW4gYmUgY29uZmlndXJlZCB3aXRoCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtY29uZmlnLXNldCIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0KCk8L2NvZGU+PC9hPi4gVGhpcyBmdW5jdGlvbiB0YWtlcyBvd25lcnNoaXAgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbmZpZzwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wb29sPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uZmlnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgd2hlbiB0aGUgY29uZmlndXJhdGlvbiBjb3VsZCBiZSBzZXQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLXNldC1hY3RpdmUiPjwvYT48aDM+Z3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNHc3RCdWZmZXJQb29sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPiAqcG9vbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGFjdGl2ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NvbnRyb2wgdGhlIGFjdGl2ZSBzdGF0ZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9vbDwvY29kZT48L2VtPi4gV2hlbiB0aGUgcG9vbCBpcyBhY3RpdmUsIG5ldyBjYWxscyB0bworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWFjcXVpcmUtYnVmZmVyIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlcigpPC9jb2RlPjwvYT4gd2lsbCByZXR1cm4gd2l0aCBHU1RfRkxPV19XUk9OR19TVEFURS4KKzwvcD4KKzxwPgorQWN0aXZhdGluZyB0aGUgYnVmZmVycG9vbCB3aWxsIHByZWFsbG9jYXRlIGFsbCByZXNvdXJjZXMgaW4gdGhlIHBvb2wgYmFzZWQgb24KK3RoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBwb29sLgorPC9wPgorPHA+CitEZWFjdGl2YXRpbmcgd2lsbCBmcmVlIHRoZSByZXNvdXJjZXMgYWdhaW4gd2hlbiB0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmcKK2J1ZmZlcnMuIFdoZW4gdGhlcmUgYXJlIG91dHN0YW5kaW5nIGJ1ZmZlcnMsIHRoZXkgd2lsbCBiZSBmcmVlZCBhcyBzb29uIGFzCit0aGV5IGFyZSBhbGwgcmV0dXJuZWQgdG8gdGhlIHBvb2wuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9vbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2wiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyUG9vbDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFjdGl2ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3IGFjdGl2ZSBzdGF0ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiB3aGVuIHRoZSBwb29sIHdhcyBub3QgY29uZmlndXJlZCBvciB3aGVuIHByZWFsbG9jYXRpb24gb2YgdGhlCitidWZmZXJzIGZhaWxlZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVmZmVyLXBvb2wtaXMtYWN0aXZlIj48L2E+PGgzPmdzdF9idWZmZXJfcG9vbF9pc19hY3RpdmUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J1ZmZlcl9wb29sX2lzX2FjdGl2ZSAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNHc3RCdWZmZXJQb29sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPiAqcG9vbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NoZWNrIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wb29sPC9jb2RlPjwvZW0+IGlzIGFjdGl2ZS4gQSBwb29sIGNhbiBiZSBhY3RpdmF0ZWQgd2l0aCB0aGUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1zZXQtYWN0aXZlIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUoKTwvY29kZT48L2E+IGNhbGwuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9vbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2wiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyUG9vbDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IHdoZW4gdGhlIHBvb2wgaXMgYWN0aXZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1idWZmZXItcG9vbC1hY3F1aXJlLWJ1ZmZlciI+PC9hPjxoMz5nc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXIgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiAgICAgICBnc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXIgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2wiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyUG9vbDwvc3Bhbj48L2E+ICpwb29sPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICoqYnVmZmVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2xQYXJhbXMiIHRpdGxlPSJHc3RCdWZmZXJQb29sUGFyYW1zIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyUG9vbFBhcmFtczwvc3Bhbj48L2E+ICpwYXJhbXM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBY3F1aXJlIGEgYnVmZmVyIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBvb2w8L2NvZGU+PC9lbT4uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4gc2hvdWxkIHBvaW50IHRvIGEgbWVtb3J5IGxvY2F0aW9uIHRoYXQKK2NhbiBob2xkIGEgcG9pbnRlciB0byB0aGUgbmV3IGJ1ZmZlci4KKzwvcD4KKzxwPgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhcmFtczwvY29kZT48L2VtPiBjYW4gYmUgTlVMTCBvciBjb250YWluIG9wdGlvbmFsIHBhcmFtZXRlcnMgdG8gaW5mbHVlbmNlIHRoZSBhbGxvY2F0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBvb2w8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNHc3RCdWZmZXJQb29sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBsb2NhdGlvbiBmb3IgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXJhbXM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cGFyYW1ldGVycy48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+IHN1Y2ggYXMgR1NUX0ZMT1dfV1JPTkdfU1RBVEUgd2hlbiB0aGUgcG9vbCBpcworaW5hY3RpdmUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLXJlbGVhc2UtYnVmZmVyIj48L2E+PGgzPmdzdF9idWZmZXJfcG9vbF9yZWxlYXNlX2J1ZmZlciAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYnVmZmVyX3Bvb2xfcmVsZWFzZV9idWZmZXIgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2wiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyUG9vbDwvc3Bhbj48L2E+ICpwb29sPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWxlYXNlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4gdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBvb2w8L2NvZGU+PC9lbT4uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4gc2hvdWxkIGhhdmUgcHJldmlvdXNseSBiZWVuIGFsbG9jYXRlZCBmcm9tCis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9vbDwvY29kZT48L2VtPiB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1hY3F1aXJlLWJ1ZmZlciIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlciAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXIoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgbGFzdCByZWYgb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgorZGlzYXBwZWFycy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wb29sPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YTNmMTQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwKQEAgLTAsMCArMSwxNjk3IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0Q2FwczwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0QnVzLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNnc3RyZWFtZXItR3N0Q2Fwcy5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3RDYXBzLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RDYXBzIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLUdzdENhcHMudG9wX29mX3BhZ2UiPjwvYT5Hc3RDYXBzPC9zcGFuPjwvaDI+Cis8cD5Hc3RDYXBzIOKAlCBTdHJ1Y3R1cmUgZGVzY3JpYmluZyBzZXRzIG9mIG1lZGlhIGZvcm1hdHM8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0Q2Fwcy5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisjaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OworCitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+R3N0Q2FwczwvYT47CitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdFN0YXRpY0NhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RhdGljQ2FwcyI+R3N0U3RhdGljQ2FwczwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHNJbnRlcnNlY3RNb2RlIiB0aXRsZT0iZW51bSBHc3RDYXBzSW50ZXJzZWN0TW9kZSI+R3N0Q2Fwc0ludGVyc2VjdE1vZGU8L2E+OworZW51bSAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdENhcHNGbGFncyI+R3N0Q2Fwc0ZsYWdzPC9hPjsKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR1NULUNBUFMtQU5ZOkNBUFMiIHRpdGxlPSJHU1RfQ0FQU19BTlkiPkdTVF9DQVBTX0FOWTwvYT4KKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR1NULUNBUFMtTk9ORTpDQVBTIiB0aXRsZT0iR1NUX0NBUFNfTk9ORSI+R1NUX0NBUFNfTk9ORTwvYT4KKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR1NULUNBUFMtUkVGQ09VTlQ6Q0FQUyIgdGl0bGU9IkdTVF9DQVBTX1JFRkNPVU5UKCkiPkdTVF9DQVBTX1JFRkNPVU5UPC9hPiAgICAgICAgICAgICAgICAgICAoY2FwcykKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR1NULUNBUFMtUkVGQ09VTlQtVkFMVUU6Q0FQUyIgdGl0bGU9IkdTVF9DQVBTX1JFRkNPVU5UX1ZBTFVFKCkiPkdTVF9DQVBTX1JFRkNPVU5UX1ZBTFVFPC9hPiAgICAgICAgICAgICAoY2FwcykKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR1NULVNUQVRJQy1DQVBTLUFOWTpDQVBTIiB0aXRsZT0iR1NUX1NUQVRJQ19DQVBTX0FOWSI+R1NUX1NUQVRJQ19DQVBTX0FOWTwvYT4KKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR1NULVNUQVRJQy1DQVBTLU5PTkU6Q0FQUyIgdGl0bGU9IkdTVF9TVEFUSUNfQ0FQU19OT05FIj5HU1RfU1RBVElDX0NBUFNfTk9ORTwvYT4KKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR1NULUNBUFMtSVMtU0lNUExFOkNBUFMiIHRpdGxlPSJHU1RfQ0FQU19JU19TSU1QTEUoKSI+R1NUX0NBUFNfSVNfU0lNUExFPC9hPiAgICAgICAgICAgICAgICAgIChjYXBzKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHU1QtU1RBVElDLUNBUFMiIHRpdGxlPSJHU1RfU1RBVElDX0NBUFMoKSI+R1NUX1NUQVRJQ19DQVBTPC9hPiAgICAgICAgICAgICAgICAgICAgIChzdHJpbmcpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dTVC1DQVBTLUZMQUdTOkNBUFMiIHRpdGxlPSJHU1RfQ0FQU19GTEFHUygpIj5HU1RfQ0FQU19GTEFHUzwvYT4gICAgICAgICAgICAgICAgICAgICAgKGNhcHMpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dTVC1DQVBTLUZMQUctSVMtU0VUOkNBUFMiIHRpdGxlPSJHU1RfQ0FQU19GTEFHX0lTX1NFVCgpIj5HU1RfQ0FQU19GTEFHX0lTX1NFVDwvYT4gICAgICAgICAgICAgICAgKGNhcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHU1QtQ0FQUy1GTEFHLVNFVDpDQVBTIiB0aXRsZT0iR1NUX0NBUFNfRkxBR19TRVQoKSI+R1NUX0NBUFNfRkxBR19TRVQ8L2E+ICAgICAgICAgICAgICAgICAgIChjYXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZykKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR1NULUNBUFMtRkxBRy1VTlNFVDpDQVBTIiB0aXRsZT0iR1NUX0NBUFNfRkxBR19VTlNFVCgpIj5HU1RfQ0FQU19GTEFHX1VOU0VUPC9hPiAgICAgICAgICAgICAgICAgKGNhcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnKQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPiAqICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1uZXctZW1wdHkiIHRpdGxlPSJnc3RfY2Fwc19uZXdfZW1wdHkgKCkiPmdzdF9jYXBzX25ld19lbXB0eTwvYT4gICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW5ldy1hbnkiIHRpdGxlPSJnc3RfY2Fwc19uZXdfYW55ICgpIj5nc3RfY2Fwc19uZXdfYW55PC9hPiAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPiAqICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1uZXctc2ltcGxlIiB0aXRsZT0iZ3N0X2NhcHNfbmV3X3NpbXBsZSAoKSI+Z3N0X2NhcHNfbmV3X3NpbXBsZTwvYT4gICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPHNwYW4gY2xhc3M9InR5cGUiPmNoYXI8L3NwYW4+ICptZWRpYV90eXBlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxzcGFuIGNsYXNzPSJ0eXBlIj5jaGFyPC9zcGFuPiAqZmllbGRuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW5ldy1mdWxsIiB0aXRsZT0iZ3N0X2NhcHNfbmV3X2Z1bGwgKCkiPmdzdF9jYXBzX25ld19mdWxsPC9hPiAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3QxPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW5ldy1mdWxsLXZhbGlzdCIgdGl0bGU9ImdzdF9jYXBzX25ld19mdWxsX3ZhbGlzdCAoKSI+Z3N0X2NhcHNfbmV3X2Z1bGxfdmFsaXN0PC9hPiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gdmFyX2FyZ3M8L2NvZGU+PC9lbT4pOworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy13cml0YWJsZSIgdGl0bGU9ImdzdF9jYXBzX2lzX3dyaXRhYmxlKCkiPmdzdF9jYXBzX2lzX3dyaXRhYmxlPC9hPiAgICAgICAgICAgICAgICAoY2FwcykKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKiAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtY29weSIgdGl0bGU9ImdzdF9jYXBzX2NvcHkgKCkiPmdzdF9jYXBzX2NvcHk8L2E+ICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWNvcHktbnRoIiB0aXRsZT0iZ3N0X2NhcHNfY29weV9udGggKCkiPmdzdF9jYXBzX2NvcHlfbnRoPC9hPiAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG50aDwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1zdGF0aWMtY2Fwcy1nZXQiIHRpdGxlPSJnc3Rfc3RhdGljX2NhcHNfZ2V0ICgpIj5nc3Rfc3RhdGljX2NhcHNfZ2V0PC9hPiAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RTdGF0aWNDYXBzIiB0aXRsZT0ic3RydWN0IEdzdFN0YXRpY0NhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0aWNDYXBzPC9zcGFuPjwvYT4gKnN0YXRpY19jYXBzPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LXN0YXRpYy1jYXBzLWNsZWFudXAiIHRpdGxlPSJnc3Rfc3RhdGljX2NhcHNfY2xlYW51cCAoKSI+Z3N0X3N0YXRpY19jYXBzX2NsZWFudXA8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0U3RhdGljQ2FwcyIgdGl0bGU9InN0cnVjdCBHc3RTdGF0aWNDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGljQ2Fwczwvc3Bhbj48L2E+ICpzdGF0aWNfY2FwczwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWFwcGVuZCIgdGl0bGU9ImdzdF9jYXBzX2FwcGVuZCAoKSI+Z3N0X2NhcHNfYXBwZW5kPC9hPiAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzMTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHMyPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbWVyZ2UiIHRpdGxlPSJnc3RfY2Fwc19tZXJnZSAoKSI+Z3N0X2NhcHNfbWVyZ2U8L2E+ICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzMTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHMyPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtYXBwZW5kLXN0cnVjdHVyZSIgdGl0bGU9ImdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUgKCkiPmdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmU8L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtcmVtb3ZlLXN0cnVjdHVyZSIgdGl0bGU9ImdzdF9jYXBzX3JlbW92ZV9zdHJ1Y3R1cmUgKCkiPmdzdF9jYXBzX3JlbW92ZV9zdHJ1Y3R1cmU8L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGlkeDwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKiAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXN0ZWFsLXN0cnVjdHVyZSIgdGl0bGU9ImdzdF9jYXBzX3N0ZWFsX3N0cnVjdHVyZSAoKSI+Z3N0X2NhcHNfc3RlYWxfc3RydWN0dXJlPC9hPiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1tZXJnZS1zdHJ1Y3R1cmUiIHRpdGxlPSJnc3RfY2Fwc19tZXJnZV9zdHJ1Y3R1cmUgKCkiPmdzdF9jYXBzX21lcmdlX3N0cnVjdHVyZTwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtZ2V0LXNpemUiIHRpdGxlPSJnc3RfY2Fwc19nZXRfc2l6ZSAoKSI+Z3N0X2NhcHNfZ2V0X3NpemU8L2E+ICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtZ2V0LXN0cnVjdHVyZSIgdGl0bGU9ImdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKCkiPmdzdF9jYXBzX2dldF9zdHJ1Y3R1cmU8L2E+ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtc2V0LXZhbHVlIiB0aXRsZT0iZ3N0X2NhcHNfc2V0X3ZhbHVlICgpIj5nc3RfY2Fwc19zZXRfdmFsdWU8L2E+ICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPHNwYW4gY2xhc3M9InR5cGUiPmNoYXI8L3NwYW4+ICpmaWVsZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtc2V0LXNpbXBsZSIgdGl0bGU9ImdzdF9jYXBzX3NldF9zaW1wbGUgKCkiPmdzdF9jYXBzX3NldF9zaW1wbGU8L2E+ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8c3BhbiBjbGFzcz0idHlwZSI+Y2hhcjwvc3Bhbj4gKmZpZWxkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXNldC1zaW1wbGUtdmFsaXN0IiB0aXRsZT0iZ3N0X2NhcHNfc2V0X3NpbXBsZV92YWxpc3QgKCkiPmdzdF9jYXBzX3NldF9zaW1wbGVfdmFsaXN0PC9hPiAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8c3BhbiBjbGFzcz0idHlwZSI+Y2hhcjwvc3Bhbj4gKmZpZWxkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52YV9saXN0PC9zcGFuPiB2YXJhcmdzPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtYW55IiB0aXRsZT0iZ3N0X2NhcHNfaXNfYW55ICgpIj5nc3RfY2Fwc19pc19hbnk8L2E+ICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1lbXB0eSIgdGl0bGU9ImdzdF9jYXBzX2lzX2VtcHR5ICgpIj5nc3RfY2Fwc19pc19lbXB0eTwvYT4gICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1maXhlZCIgdGl0bGU9ImdzdF9jYXBzX2lzX2ZpeGVkICgpIj5nc3RfY2Fwc19pc19maXhlZDwvYT4gICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1lcXVhbCIgdGl0bGU9ImdzdF9jYXBzX2lzX2VxdWFsICgpIj5nc3RfY2Fwc19pc19lcXVhbDwvYT4gICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHMxPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1lcXVhbC1maXhlZCIgdGl0bGU9ImdzdF9jYXBzX2lzX2VxdWFsX2ZpeGVkICgpIj5nc3RfY2Fwc19pc19lcXVhbF9maXhlZDwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHMxPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1hbHdheXMtY29tcGF0aWJsZSIgdGl0bGU9ImdzdF9jYXBzX2lzX2Fsd2F5c19jb21wYXRpYmxlICgpIj5nc3RfY2Fwc19pc19hbHdheXNfY29tcGF0aWJsZTwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHMxPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1zdWJzZXQiIHRpdGxlPSJnc3RfY2Fwc19pc19zdWJzZXQgKCkiPmdzdF9jYXBzX2lzX3N1YnNldDwvYT4gICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqc3Vic2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqc3VwZXJzZXQ8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1zdWJzZXQtc3RydWN0dXJlIiB0aXRsZT0iZ3N0X2NhcHNfaXNfc3Vic2V0X3N0cnVjdHVyZSAoKSI+Z3N0X2NhcHNfaXNfc3Vic2V0X3N0cnVjdHVyZTwvYT4gICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1jYW4taW50ZXJzZWN0IiB0aXRsZT0iZ3N0X2NhcHNfY2FuX2ludGVyc2VjdCAoKSI+Z3N0X2NhcHNfY2FuX2ludGVyc2VjdDwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzMTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHMyPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKiAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaW50ZXJzZWN0IiB0aXRsZT0iZ3N0X2NhcHNfaW50ZXJzZWN0ICgpIj5nc3RfY2Fwc19pbnRlcnNlY3Q8L2E+ICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHMxPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczI8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPiAqICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pbnRlcnNlY3QtZnVsbCIgdGl0bGU9ImdzdF9jYXBzX2ludGVyc2VjdF9mdWxsICgpIj5nc3RfY2Fwc19pbnRlcnNlY3RfZnVsbDwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHMxPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2Fwc0ludGVyc2VjdE1vZGUiIHRpdGxlPSJlbnVtIEdzdENhcHNJbnRlcnNlY3RNb2RlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwc0ludGVyc2VjdE1vZGU8L3NwYW4+PC9hPiBtb2RlPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKiAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtdW5pb24iIHRpdGxlPSJnc3RfY2Fwc191bmlvbiAoKSI+Z3N0X2NhcHNfdW5pb248L2E+ICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzMTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHMyPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKiAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbm9ybWFsaXplIiB0aXRsZT0iZ3N0X2NhcHNfbm9ybWFsaXplICgpIj5nc3RfY2Fwc19ub3JtYWxpemU8L2E+ICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1kby1zaW1wbGlmeSIgdGl0bGU9ImdzdF9jYXBzX2RvX3NpbXBsaWZ5ICgpIj5nc3RfY2Fwc19kb19zaW1wbGlmeTwvYT4gICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1yZXBsYWNlIiB0aXRsZT0iZ3N0X2NhcHNfcmVwbGFjZSgpIj5nc3RfY2Fwc19yZXBsYWNlPC9hPiAgICAgICAgICAgICAgICAgICAgKG9jYXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNhcHMpCis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXRvLXN0cmluZyIgdGl0bGU9ImdzdF9jYXBzX3RvX3N0cmluZyAoKSI+Z3N0X2NhcHNfdG9fc3RyaW5nPC9hPiAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKiAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtZnJvbS1zdHJpbmciIHRpdGxlPSJnc3RfY2Fwc19mcm9tX3N0cmluZyAoKSI+Z3N0X2NhcHNfZnJvbV9zdHJpbmc8L2E+ICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqc3RyaW5nPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKiAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtc3VidHJhY3QiIHRpdGxlPSJnc3RfY2Fwc19zdWJ0cmFjdCAoKSI+Z3N0X2NhcHNfc3VidHJhY3Q8L2E+ICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICptaW51ZW5kPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqc3VidHJhaGVuZDwvY29kZT48L2VtPik7CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW1ha2Utd3JpdGFibGUiIHRpdGxlPSJnc3RfY2Fwc19tYWtlX3dyaXRhYmxlKCkiPmdzdF9jYXBzX21ha2Vfd3JpdGFibGU8L2E+ICAgICAgICAgICAgICAoY2FwcykKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKiAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtcmVmIiB0aXRsZT0iZ3N0X2NhcHNfcmVmICgpIj5nc3RfY2Fwc19yZWY8L2E+ICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy10cnVuY2F0ZSIgdGl0bGU9ImdzdF9jYXBzX3RydW5jYXRlICgpIj5nc3RfY2Fwc190cnVuY2F0ZTwvYT4gICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1maXhhdGUiIHRpdGxlPSJnc3RfY2Fwc19maXhhdGUgKCkiPmdzdF9jYXBzX2ZpeGF0ZTwvYT4gICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXVucmVmIiB0aXRsZT0iZ3N0X2NhcHNfdW5yZWYgKCkiPmdzdF9jYXBzX3VucmVmPC9hPiAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdENhcHMuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitDYXBzIChjYXBhYmlsaXRpZXMpIGFyZSBsaWdod2VpZ2h0IHJlZmNvdW50ZWQgb2JqZWN0cyBkZXNjcmliaW5nIG1lZGlhIHR5cGVzLgorVGhleSBhcmUgY29tcG9zZWQgb2YgYW4gYXJyYXkgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4uCis8L3A+Cis8cD4KK0NhcHMgYXJlIGV4cG9zZWQgb24gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4gdG8gZGVzY3JpYmUgYWxsIHBvc3NpYmxlIHR5cGVzIGEKK2dpdmVuIHBhZCBjYW4gaGFuZGxlLiBUaGV5IGFyZSBhbHNvIHN0b3JlZCBpbiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJlZ2lzdHJ5PC9zcGFuPjwvYT4gYWxvbmcgd2l0aAorYSBkZXNjcmlwdGlvbiBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4uCis8L3A+Cis8cD4KK0NhcHMgYXJlIGV4cG9zZWQgb24gdGhlIGVsZW1lbnQgcGFkcyB1c2luZyB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LWNhcHMiIHRpdGxlPSJnc3RfcGFkX2dldF9jYXBzICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfZ2V0X2NhcHMoKTwvY29kZT48L2E+IHBhZAorZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gZGVzY3JpYmVzIHRoZSBwb3NzaWJsZSB0eXBlcyB0aGF0IHRoZSBwYWQgY2FuCitoYW5kbGUgb3IgcHJvZHVjZSBhdCBydW50aW1lLgorPC9wPgorPHA+CitDYXBzIGFyZSBhbHNvIGF0dGFjaGVkIHRvIGJ1ZmZlcnMgdG8gZGVzY3JpYmUgdG8gY29udGVudCBvZiB0aGUgZGF0YQorcG9pbnRlZCB0byBieSB0aGUgYnVmZmVyIHdpdGggPGEgaHJlZj0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyL2h0bWwvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItc2V0LWNhcHMiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9zZXRfY2FwcygpPC9jb2RlPjwvYT4uIENhcHMgYXR0YWNoZWQgdG8KK2EgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gYWxsb3cgZm9yIGZvcm1hdCBuZWdvdGlhdGlvbiB1cHN0cmVhbSBhbmQgZG93bnN0cmVhbS4KKzwvcD4KKzxwPgorQSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gY2FuIGJlIGNvbnN0cnVjdGVkIHdpdGggdGhlIGZvbGxvd2luZyBjb2RlIGZyYWdtZW50OgorPC9wPgorPHA+Cis8L3A+Cis8ZGl2IGNsYXNzPSJleGFtcGxlIj4KKzxhIG5hbWU9ImlkNTA4MDMwIj48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5FeGFtcGxlwqA0LsKgQ3JlYXRpbmcgY2FwczwvYj48L3A+Cis8ZGl2IGNsYXNzPSJleGFtcGxlLWNvbnRlbnRzIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CisgR3N0Q2FwcyAqY2FwczsKKyBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtcmF3IiwKKyAgICAgICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiSTQyMCIpLAorICAgICAgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OLCAyNSwgMSwKKyAgICAgICJwaXhlbC1hc3BlY3QtcmF0aW8iLCBHU1RfVFlQRV9GUkFDVElPTiwgMSwgMSwKKyAgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQsIDMyMCwKKyAgICAgICJoZWlnaHQiLCBHX1RZUEVfSU5ULCAyNDAsCisgICAgICBOVUxMKTsKKyA8L3ByZT48L2Rpdj4KKzwvZGl2PgorPHA+PGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj4KKzwvcD4KKzxwPgorQSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gaXMgZml4ZWQgd2hlbiBpdCBoYXMgbm8gcHJvcGVydGllcyB3aXRoIHJhbmdlcyBvciBsaXN0cy4gVXNlCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1maXhlZCIgdGl0bGU9ImdzdF9jYXBzX2lzX2ZpeGVkICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jYXBzX2lzX2ZpeGVkKCk8L2NvZGU+PC9hPiB0byB0ZXN0IGZvciBmaXhlZCBjYXBzLiBPbmx5IGZpeGVkIGNhcHMgY2FuIGJlCitzZXQgb24gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi4KKzwvcD4KKzxwPgorVmFyaW91cyBtZXRob2RzIGV4aXN0IHRvIHdvcmsgd2l0aCB0aGUgbWVkaWEgdHlwZXMgc3VjaCBhcyBzdWJ0cmFjdGluZworb3IgaW50ZXJzZWN0aW5nLgorPC9wPgorPHA+CitMYXN0IHJldmlld2VkIG9uIDIwMDctMDItMTMgKDAuMTAuMTApCis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RDYXBzLmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RDYXBzIj48L2E+PGgzPnN0cnVjdCBHc3RDYXBzPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0Q2FwcyB7CisgIEdzdE1pbmlPYmplY3QgbWluaV9vYmplY3Q7Cit9OworPC9wcmU+Cis8cD4KK09iamVjdCBkZXNjcmliaW5nIG1lZGlhIHR5cGVzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0Q2Fwcy5taW5pLW9iamVjdCI+PC9hPm1pbmlfb2JqZWN0PC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGFyZW50IHR5cGU8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0U3RhdGljQ2FwcyI+PC9hPjxoMz5zdHJ1Y3QgR3N0U3RhdGljQ2FwczwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFN0YXRpY0NhcHMgeworICBHc3RDYXBzIGNhcHM7CisgIGNvbnN0IGNoYXIgKnN0cmluZzsKK307Cis8L3ByZT4KKzxwPgorRGF0YXN0cnVjdHVyZSB0byBpbml0aWFsaXplIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBmcm9tIGEgc3RyaW5nIGRlc2NyaXB0aW9uIHVzdWFsbHkKK3VzZWQgaW4gY29uanVuY3Rpb24gd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHU1QtU1RBVElDLUNBUFMiIHRpdGxlPSJHU1RfU1RBVElDX0NBUFMoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5HU1RfU1RBVElDX0NBUFMoKTwvY29kZT48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3Qtc3RhdGljLWNhcHMtZ2V0IiB0aXRsZT0iZ3N0X3N0YXRpY19jYXBzX2dldCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RhdGljX2NhcHNfZ2V0KCk8L2NvZGU+PC9hPiB0bworaW5zdGFudGlhdGUgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFN0YXRpY0NhcHMuY2FwcyI+PC9hPmNhcHM8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjYWNoZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y29uc3TCoDxzcGFuIGNsYXNzPSJ0eXBlIj5jaGFyPC9zcGFuPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFN0YXRpY0NhcHMuc3RyaW5nIj48L2E+c3RyaW5nPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHN0cmluZyBkZXNjcmliaW5nIGEgY2FwczwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdENhcHNJbnRlcnNlY3RNb2RlIj48L2E+PGgzPmVudW0gR3N0Q2Fwc0ludGVyc2VjdE1vZGU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9DQVBTX0lOVEVSU0VDVF9aSUdfWkFHICAgICAgICAgICAgPSAgMCwKKyAgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUICAgICAgICAgICAgICA9ICAxCit9IEdzdENhcHNJbnRlcnNlY3RNb2RlOworPC9wcmU+Cis8cD4KK01vZGVzIG9mIGNhcHMgaW50ZXJzZWN0aW9uCis8L3A+Cis8cD4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5HU1RfQ0FQU19JTlRFUlNFQ1RfWklHX1pBRzwvY29kZT48L2VtPiB0cmllcyB0byBwcmVzZXJ2ZSBvdmVyYWxsIG9yZGVyIG9mIGJvdGggY2FwcworYnkgaXRlcmF0aW5nIG9uIHRoZSBjYXBzJyBzdHJ1Y3R1cmVzIGFzIHRoZSBmb2xsb3dpbmcgbWF0cml4IHNob3dzOgorPC9wPgorPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CisgICAgICAgICBjYXBzMQorICAgICAgKy0tLS0tLS0tLS0tLS0KKyAgICAgIHwgMSAgMiAgNCAgNworY2FwczIgfCAzICA1ICA4IDEwCisgICAgICB8IDYgIDkgMTEgMTIKKzwvcHJlPjwvZGl2PgorPHA+CitVc2VkIHdoZW4gdGhlcmUgaXMgbm8gZXhwbGljaXQgcHJlY2VkZW5jZSBvZiBvbmUgY2FwcyBvdmVyIHRoZSBvdGhlci4gZS5nLgordGVlJ3Mgc2luayBwYWQgZ2V0Y2FwcyBmdW5jdGlvbiwgaXQgd2lsbCBwcm9iZSBpdHMgc3JjIHBhZCBwZWVycycgZm9yIHRoZWlyCitjYXBzIGFuZCBpbnRlcnNlY3QgdGhlbSB3aXRoIHRoaXMgbW9kZS4KKzwvcD4KKzxwPgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPkdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVDwvY29kZT48L2VtPiBpcyB1c2VmdWwgd2hlbiBhbiBlbGVtZW50IHdhbnRzIHRvIHByZXNlcnZlCithbm90aGVyIGVsZW1lbnQncyBjYXBzIHByaW9yaXR5IG9yZGVyIHdoZW4gaW50ZXJzZWN0aW5nIHdpdGggaXRzIG93biBjYXBzLgorRXhhbXBsZTogSWYgY2FwczEgaXMgW0EsIEIsIENdIGFuZCBjYXBzMiBpcyBbRSwgQiwgRCwgQV0sIHRoZSByZXN1bHQKK3dvdWxkIGJlIFtBLCBCXSwgbWFpbnRhaW5pbmcgdGhlIGZpcnN0IGNhcHMgcHJpb3JpdHkgb24gdGhlIGludGVyc2VjdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUNBUFMtSU5URVJTRUNULVpJRy1aQUc6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0NBUFNfSU5URVJTRUNUX1pJR19aQUc8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPlppZy16YWdzIG92ZXIgYm90aCBjYXBzLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUNBUFMtSU5URVJTRUNULUZJUlNUOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+S2VlcHMgdGhlIGZpcnN0IGNhcHMgb3JkZXIuCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RDYXBzRmxhZ3MiPjwvYT48aDM+ZW51bSBHc3RDYXBzRmxhZ3M8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9DQVBTX0ZMQUdTX0FOWcKgPSAoR1NUX01JTklfT0JKRUNUX0ZMQUdfTEFTVCAmbHQ7Jmx0OyAwKQorfSBHc3RDYXBzRmxhZ3M7Cis8L3ByZT4KKzxwPgorRXh0cmEgZmxhZ3MgZm9yIGEgY2Fwcy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1DQVBTLUZMQUdTLUFOWTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQ0FQU19GTEFHU19BTlk8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPkNhcHMgaGFzIG5vIHNwZWNpZmljIGNvbnRlbnQsIGJ1dCBjYW4gY29udGFpbgorICAgYW55dGhpbmcuCis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUNBUFMtQU5ZOkNBUFMiPjwvYT48aDM+R1NUX0NBUFNfQU5ZPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DQVBTX0FOWSAgICAgICAgICAgICAgZ3N0X2NhcHNfbmV3X2FueSgpCis8L3ByZT4KKzxwPgorTWVhbnMgdGhhdCB0aGUgZWxlbWVudC9wYWQgY2FuIG91dHB1dCAnYW55dGhpbmcnLiBVc2VmdWwgZm9yIGVsZW1lbnRzCit0aGF0IG91dHB1dCB1bmtub3duIG1lZGlhLCBzdWNoIGFzIGZpbGVzcmMuCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1DQVBTLU5PTkU6Q0FQUyI+PC9hPjxoMz5HU1RfQ0FQU19OT05FPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DQVBTX05PTkUgICAgICAgICAgICAgZ3N0X2NhcHNfbmV3X2VtcHR5KCkKKzwvcHJlPgorPHA+CitUaGUgb3Bwb3NpdGUgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR1NULUNBUFMtQU5ZOkNBUFMiIHRpdGxlPSJHU1RfQ0FQU19BTlkiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQ0FQU19BTlk8L2NvZGU+PC9hPjogaXQgbWVhbnMgdGhhdCB0aGUgcGFkL2VsZW1lbnQgb3V0cHV0cyBhbgordW5kZWZpbmVkIG1lZGlhIHR5cGUgdGhhdCBjYW4gbm90IGJlIGRldGVjdGVkLgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQ0FQUy1SRUZDT1VOVDpDQVBTIj48L2E+PGgzPkdTVF9DQVBTX1JFRkNPVU5UKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NBUFNfUkVGQ09VTlQoY2FwcykgICAgICAgICAgICAgICAgIEdTVF9NSU5JX09CSkVDVF9SRUZDT1VOVChjYXBzKQorPC9wcmU+Cis8cD4KK0dldCBhY2Nlc3MgdG8gdGhlIHJlZmVyZW5jZSBjb3VudCBmaWVsZCBvZiB0aGUgY2FwcworPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUNBUFMtUkVGQ09VTlQtVkFMVUU6Q0FQUyI+PC9hPjxoMz5HU1RfQ0FQU19SRUZDT1VOVF9WQUxVRSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DQVBTX1JFRkNPVU5UX1ZBTFVFKGNhcHMpICAgICAgICAgICBHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUoY2FwcykKKzwvcHJlPgorPHA+CitHZXQgdGhlIHJlZmVyZW5jZSBjb3VudCB2YWx1ZSBvZiB0aGUgY2Fwcy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1TVEFUSUMtQ0FQUy1BTlk6Q0FQUyI+PC9hPjxoMz5HU1RfU1RBVElDX0NBUFNfQU5ZPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9TVEFUSUNfQ0FQU19BTlkgICAgICAgR1NUX1NUQVRJQ19DQVBTKCJBTlkiKQorPC9wcmU+Cis8cD4KK0NyZWF0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHN0YXRpYyBjYXBzIHRoYXQgbWF0Y2hlcyBhbnl0aGluZy4KK1RoaXMgY2FuIGJlIHVzZWQgaW4gcGFkIHRlbXBsYXRlcy4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVNUQVRJQy1DQVBTLU5PTkU6Q0FQUyI+PC9hPjxoMz5HU1RfU1RBVElDX0NBUFNfTk9ORTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfU1RBVElDX0NBUFNfTk9ORSAgICAgIEdTVF9TVEFUSUNfQ0FQUygiTk9ORSIpCis8L3ByZT4KKzxwPgorQ3JlYXRlcyBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gc3RhdGljIGNhcHMgdGhhdCBtYXRjaGVzIG5vdGhpbmcuCitUaGlzIGNhbiBiZSB1c2VkIGluIHBhZCB0ZW1wbGF0ZXMuCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1DQVBTLUlTLVNJTVBMRTpDQVBTIj48L2E+PGgzPkdTVF9DQVBTX0lTX1NJTVBMRSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DQVBTX0lTX1NJTVBMRShjYXBzKSAoZ3N0X2NhcHNfZ2V0X3NpemUoY2FwcykgPT0gMSkKKzwvcHJlPgorPHA+CitDb252ZW5pZW5jZSBtYWNybyB0aGF0IGNoZWNrcyBpZiB0aGUgbnVtYmVyIG9mIHN0cnVjdHVyZXMgaW4gdGhlIGdpdmVuIGNhcHMKK2lzIGV4YWN0bHkgb25lLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gaW5zdGFuY2UgdG8gY2hlY2s8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVNUQVRJQy1DQVBTIj48L2E+PGgzPkdTVF9TVEFUSUNfQ0FQUygpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9TVEFUSUNfQ0FQUyhzdHJpbmcpPC9wcmU+Cis8cD4KK0NyZWF0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHN0YXRpYyBjYXBzIGZyb20gYW4gaW5wdXQgc3RyaW5nLgorVGhpcyBjYW4gYmUgdXNlZCBpbiBwYWQgdGVtcGxhdGVzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJpbmc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHN0cmluZyBkZXNjcmliaW5nIHRoZSBjYXBzPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1DQVBTLUZMQUdTOkNBUFMiPjwvYT48aDM+R1NUX0NBUFNfRkxBR1MoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQ0FQU19GTEFHUyhjYXBzKSAgICAgICAgICAgICAgICAgICAgR1NUX01JTklfT0JKRUNUX0ZMQUdTKGNhcHMpCis8L3ByZT4KKzxwPgorQSBmbGFncyB3b3JkIGNvbnRhaW5pbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2Fwc0ZsYWdzIiB0aXRsZT0iZW51bSBHc3RDYXBzRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmxhZ3M8L3NwYW4+PC9hPiBmbGFncyBzZXQgb24gdGhpcyBjYXBzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQ0FQUy1GTEFHLUlTLVNFVDpDQVBTIj48L2E+PGgzPkdTVF9DQVBTX0ZMQUdfSVNfU0VUKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NBUFNfRkxBR19JU19TRVQoY2FwcyxmbGFnKSAgICAgICAgR1NUX01JTklfT0JKRUNUX0ZMQUdfSVNfU0VUIChjYXBzLCBmbGFnKQorPC9wcmU+Cis8cD4KK0dpdmVzIHRoZSBzdGF0dXMgb2YgYSBzcGVjaWZpYyBmbGFnIG9uIGEgY2Fwcy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2Fwc0ZsYWdzIiB0aXRsZT0iZW51bSBHc3RDYXBzRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmxhZ3M8L3NwYW4+PC9hPiB0byBjaGVjay48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQ0FQUy1GTEFHLVNFVDpDQVBTIj48L2E+PGgzPkdTVF9DQVBTX0ZMQUdfU0VUKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NBUFNfRkxBR19TRVQoY2FwcyxmbGFnKSAgICAgICAgICAgR1NUX01JTklfT0JKRUNUX0ZMQUdfU0VUIChjYXBzLCBmbGFnKQorPC9wcmU+Cis8cD4KK1NldHMgYSBjYXBzIGZsYWcgb24gYSBjYXBzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdENhcHNGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGbGFnczwvc3Bhbj48L2E+IHRvIHNldC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQ0FQUy1GTEFHLVVOU0VUOkNBUFMiPjwvYT48aDM+R1NUX0NBUFNfRkxBR19VTlNFVCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DQVBTX0ZMQUdfVU5TRVQoY2FwcyxmbGFnKSAgICAgICAgIEdTVF9NSU5JX09CSkVDVF9GTEFHX1VOU0VUIChjYXBzLCBmbGFnKQorPC9wcmU+Cis8cD4KK0NsZWFycyBhIGNhcHMgZmxhZy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2Fwc0ZsYWdzIiB0aXRsZT0iZW51bSBHc3RDYXBzRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmxhZ3M8L3NwYW4+PC9hPiB0byBjbGVhci48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2Fwcy1uZXctZW1wdHkiPjwvYT48aDM+Z3N0X2NhcHNfbmV3X2VtcHR5ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgIGdzdF9jYXBzX25ld19lbXB0eSAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlcyBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdGhhdCBpcyBlbXB0eS4gIFRoYXQgaXMsIHRoZSByZXR1cm5lZAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IGNvbnRhaW5zIG5vIG1lZGlhIGZvcm1hdHMuCitDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHVucmVmZmluZyB0aGUgcmV0dXJuZWQgY2Fwcy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jYXBzLW5ldy1hbnkiPjwvYT48aDM+Z3N0X2NhcHNfbmV3X2FueSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPiAqICAgICAgICAgICBnc3RfY2Fwc19uZXdfYW55ICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRoYXQgaW5kaWNhdGVzIHRoYXQgaXQgaXMgY29tcGF0aWJsZSB3aXRoCithbnkgbWVkaWEgZm9ybWF0LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNhcHMtbmV3LXNpbXBsZSI+PC9hPjxoMz5nc3RfY2Fwc19uZXdfc2ltcGxlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgIGdzdF9jYXBzX25ld19zaW1wbGUgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPHNwYW4gY2xhc3M9InR5cGUiPmNoYXI8L3NwYW4+ICptZWRpYV90eXBlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxzcGFuIGNsYXNzPSJ0eXBlIj5jaGFyPC9zcGFuPiAqZmllbGRuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRoYXQgY29udGFpbnMgb25lIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+LiAgVGhlCitzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBieSB0aGUgYXJndW1lbnRzLCB3aGljaCBoYXZlIHRoZSBzYW1lIGZvcm1hdAorYXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLW5ldyIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfbmV3ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdHJ1Y3R1cmVfbmV3KCk8L2NvZGU+PC9hPi4KK0NhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgdW5yZWZmaW5nIHRoZSByZXR1cm5lZCBjYXBzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lZGlhX3R5cGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG1lZGlhIHR5cGUgb2YgdGhlIHN0cnVjdHVyZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRuYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmZpcnN0IGZpZWxkIHRvIHNldDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFkZGl0aW9uYWwgYXJndW1lbnRzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2Fwcy1uZXctZnVsbCI+PC9hPjxoMz5nc3RfY2Fwc19uZXdfZnVsbCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPiAqICAgICAgICAgICBnc3RfY2Fwc19uZXdfZnVsbCAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3QxPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IGFuZCBhZGRzIGFsbCB0aGUgc3RydWN0dXJlcyBsaXN0ZWQgYXMKK2FyZ3VtZW50cy4gIFRoZSBsaXN0IG11c3QgYmUgTlVMTC10ZXJtaW5hdGVkLiAgVGhlIHN0cnVjdHVyZXMKK2FyZSBub3QgY29waWVkOyB0aGUgcmV0dXJuZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IG93bnMgdGhlIHN0cnVjdHVyZXMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0MTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZmlyc3Qgc3RydWN0dXJlIHRvIGFkZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFkZGl0aW9uYWwgc3RydWN0dXJlcyB0byBhZGQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jYXBzLW5ldy1mdWxsLXZhbGlzdCI+PC9hPjxoMz5nc3RfY2Fwc19uZXdfZnVsbF92YWxpc3QgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKiAgICAgICAgICAgZ3N0X2NhcHNfbmV3X2Z1bGxfdmFsaXN0ICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52YV9saXN0PC9zcGFuPiB2YXJfYXJnczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IGFuZCBhZGRzIGFsbCB0aGUgc3RydWN0dXJlcyBsaXN0ZWQgYXMKK2FyZ3VtZW50cy4gIFRoZSBsaXN0IG11c3QgYmUgTlVMTC10ZXJtaW5hdGVkLiAgVGhlIHN0cnVjdHVyZXMKK2FyZSBub3QgY29waWVkOyB0aGUgcmV0dXJuZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IG93bnMgdGhlIHN0cnVjdHVyZXMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBmaXJzdCBzdHJ1Y3R1cmUgdG8gYWRkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YXJfYXJnczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hZGRpdGlvbmFsIHN0cnVjdHVyZXMgdG8gYWRkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2Fwcy1pcy13cml0YWJsZSI+PC9hPjxoMz5nc3RfY2Fwc19pc193cml0YWJsZSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgZ3N0X2NhcHNfaXNfd3JpdGFibGUoY2FwcykgICAgIGdzdF9taW5pX29iamVjdF9pc193cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGNhcHMpKQorPC9wcmU+Cis8cD4KK1Rlc3RzIGlmIHlvdSBjYW4gc2FmZWx5IG1vZGlmeSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPi4gSXQgaXMgb25seSBzYWZlIHRvIG1vZGlmeSBjYXBzIHdoZW4KK3RoZXJlIGlzIG9ubHkgb25lIG93bmVyIG9mIHRoZSBjYXBzIC0gaWUsIHRoZSByZWZjb3VudCBpcyAxLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNhcHMtY29weSI+PC9hPjxoMz5nc3RfY2Fwc19jb3B5ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgIGdzdF9jYXBzX2NvcHkgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlcyBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gYXMgYSBjb3B5IG9mIHRoZSBvbGQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4uIFRoZSBuZXcgY2FwcyB3aWxsIGhhdmUgYQorcmVmY291bnQgb2YgMSwgb3duZWQgYnkgdGhlIGNhbGxlci4gVGhlIHN0cnVjdHVyZXMgYXJlIGNvcGllZCBhcyB3ZWxsLgorPC9wPgorPHA+CitOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB0aGUgc2VtYW50aWMgZXF1aXZhbGVudCBvZiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXJlZiIgdGl0bGU9ImdzdF9jYXBzX3JlZiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2Fwc19yZWYoKTwvY29kZT48L2E+Citmb2xsb3dlZCBieSBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW1ha2Utd3JpdGFibGUiIHRpdGxlPSJnc3RfY2Fwc19tYWtlX3dyaXRhYmxlKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NhcHNfbWFrZV93cml0YWJsZSgpPC9jb2RlPjwvYT4uIElmIHlvdSBvbmx5IHdhbnQgdG8gaG9sZCBvbiB0byBhCityZWZlcmVuY2UgdG8gdGhlIGRhdGEsIHlvdSBzaG91bGQgdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXJlZiIgdGl0bGU9ImdzdF9jYXBzX3JlZiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2Fwc19yZWYoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitXaGVuIHlvdSBhcmUgZmluaXNoZWQgd2l0aCB0aGUgY2FwcywgY2FsbCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy11bnJlZiIgdGl0bGU9ImdzdF9jYXBzX3VucmVmICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jYXBzX3VucmVmKCk8L2NvZGU+PC9hPiBvbiBpdC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2Fwcy1jb3B5LW50aCI+PC9hPjxoMz5nc3RfY2Fwc19jb3B5X250aCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPiAqICAgICAgICAgICBnc3RfY2Fwc19jb3B5X250aCAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG50aDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IGFuZCBhcHBlbmRzIGEgY29weSBvZiB0aGUgbnRoIHN0cnVjdHVyZQorY29udGFpbmVkIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byBjb3B5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5udGg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG50aCBzdHJ1Y3R1cmUgdG8gY29weTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXN0YXRpYy1jYXBzLWdldCI+PC9hPjxoMz5nc3Rfc3RhdGljX2NhcHNfZ2V0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgIGdzdF9zdGF0aWNfY2Fwc19nZXQgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0U3RhdGljQ2FwcyIgdGl0bGU9InN0cnVjdCBHc3RTdGF0aWNDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGljQ2Fwczwvc3Bhbj48L2E+ICpzdGF0aWNfY2FwczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NvbnZlcnRzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0U3RhdGljQ2FwcyIgdGl0bGU9InN0cnVjdCBHc3RTdGF0aWNDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGljQ2Fwczwvc3Bhbj48L2E+IHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXRpY19jYXBzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RTdGF0aWNDYXBzIiB0aXRsZT0ic3RydWN0IEdzdFN0YXRpY0NhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0aWNDYXBzPC9zcGFuPjwvYT4gdG8gY29udmVydDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgcG9pbnRlciB0byB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LiBVbnJlZiBhZnRlciB1c2FnZS4KK1NpbmNlIHRoZSBjb3JlIGhvbGRzIGFuIGFkZGl0aW9uYWwgcmVmIHRvIHRoZSByZXR1cm5lZCBjYXBzLAordXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW1ha2Utd3JpdGFibGUiIHRpdGxlPSJnc3RfY2Fwc19tYWtlX3dyaXRhYmxlKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NhcHNfbWFrZV93cml0YWJsZSgpPC9jb2RlPjwvYT4gb24gdGhlIHJldHVybmVkIGNhcHMgdG8gbW9kaWZ5IGl0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXN0YXRpYy1jYXBzLWNsZWFudXAiPjwvYT48aDM+Z3N0X3N0YXRpY19jYXBzX2NsZWFudXAgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3N0YXRpY19jYXBzX2NsZWFudXAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RTdGF0aWNDYXBzIiB0aXRsZT0ic3RydWN0IEdzdFN0YXRpY0NhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0aWNDYXBzPC9zcGFuPjwvYT4gKnN0YXRpY19jYXBzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2xlYW4gdXAgdGhlIGNhcHMgY29udGFpbmVkIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGF0aWNfY2FwczwvY29kZT48L2VtPiB3aGVuIHRoZSByZWZjb3VudCBpcyAwLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGF0aWNfY2FwczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0U3RhdGljQ2FwcyIgdGl0bGU9InN0cnVjdCBHc3RTdGF0aWNDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGljQ2Fwczwvc3Bhbj48L2E+IHRvIGNvbnZlcnQ8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNhcHMtYXBwZW5kIj48L2E+PGgzPmdzdF9jYXBzX2FwcGVuZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfY2Fwc19hcHBlbmQgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzMjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0FwcGVuZHMgdGhlIHN0cnVjdHVyZXMgY29udGFpbmVkIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzMjwvY29kZT48L2VtPiB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczE8L2NvZGU+PC9lbT4uIFRoZSBzdHJ1Y3R1cmVzIGluCis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczI8L2NvZGU+PC9lbT4gYXJlIG5vdCBjb3BpZWQgLS0gdGhleSBhcmUgdHJhbnNmZXJyZWQgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHMxPC9jb2RlPjwvZW0+LCBhbmQgdGhlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczI8L2NvZGU+PC9lbT4gaXMKK2ZyZWVkLiBJZiBlaXRoZXIgY2FwcyBpcyBBTlksIHRoZSByZXN1bHRpbmcgY2FwcyB3aWxsIGJlIEFOWS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzMTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRoYXQgd2lsbCBiZSBhcHBlbmRlZCB0bzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byBhcHBlbmQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2Fwcy1tZXJnZSI+PC9hPjxoMz5nc3RfY2Fwc19tZXJnZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfY2Fwc19tZXJnZSAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzMjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0FwcGVuZHMgdGhlIHN0cnVjdHVyZXMgY29udGFpbmVkIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzMjwvY29kZT48L2VtPiB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczE8L2NvZGU+PC9lbT4gaWYgdGhleSBhcmUgbm90IHlldAorZXhwcmVzc2VkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzMTwvY29kZT48L2VtPi4gVGhlIHN0cnVjdHVyZXMgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHMyPC9jb2RlPjwvZW0+IGFyZSBub3QgY29waWVkIC0tIHRoZXkgYXJlCit0cmFuc2ZlcnJlZCB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczE8L2NvZGU+PC9lbT4sIGFuZCB0aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzMjwvY29kZT48L2VtPiBpcyBmcmVlZC4KK0lmIGVpdGhlciBjYXBzIGlzIEFOWSwgdGhlIHJlc3VsdGluZyBjYXBzIHdpbGwgYmUgQU5ZLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHMxPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdGhhdCB3aWxsIHRha2UgdGhlIG5ldyBlbnRyaWVzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzMjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIG1lcmdlIGluLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xMDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNhcHMtYXBwZW5kLXN0cnVjdHVyZSI+PC9hPjxoMz5nc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBcHBlbmRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT4gdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4uICBUaGUgc3RydWN0dXJlIGlzIG5vdCBjb3BpZWQ7IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+CitiZWNvbWVzIHRoZSBvd25lciBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0aGF0IHdpbGwgYmUgYXBwZW5kZWQgdG88L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gdG8gYXBwZW5kLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNhcHMtcmVtb3ZlLXN0cnVjdHVyZSI+PC9hPjxoMz5nc3RfY2Fwc19yZW1vdmVfc3RydWN0dXJlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9jYXBzX3JlbW92ZV9zdHJ1Y3R1cmUgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaWR4PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorcmVtb3ZlcyB0aGUgc3R1Y3R1cmUgd2l0aCB0aGUgZ2l2ZW4gaW5kZXggZnJvbSB0aGUgbGlzdCBvZiBzdHJ1Y3R1cmVzCitjb250YWluZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIHJlbW92ZSBmcm9tPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZHg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+SW5kZXggb2YgdGhlIHN0cnVjdHVyZSB0byByZW1vdmU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2Fwcy1zdGVhbC1zdHJ1Y3R1cmUiPjwvYT48aDM+Z3N0X2NhcHNfc3RlYWxfc3RydWN0dXJlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKiAgICAgIGdzdF9jYXBzX3N0ZWFsX3N0cnVjdHVyZSAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZXRyaWV2ZXMgdGhlIHN0dWN0dXJlIHdpdGggdGhlIGdpdmVuIGluZGV4IGZyb20gdGhlIGxpc3Qgb2Ygc3RydWN0dXJlcworY29udGFpbmVkIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+LiBUaGUgY2FsbGVyIGJlY29tZXMgdGhlIG93bmVyIG9mIHRoZSByZXR1cm5lZCBzdHJ1Y3R1cmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIHJldHJpZXZlIGZyb208L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkluZGV4IG9mIHRoZSBzdHJ1Y3R1cmUgdG8gcmV0cmlldmU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IGNvcnJlc3BvbmRpbmcKK3RvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jYXBzLW1lcmdlLXN0cnVjdHVyZSI+PC9hPjxoMz5nc3RfY2Fwc19tZXJnZV9zdHJ1Y3R1cmUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2NhcHNfbWVyZ2Vfc3RydWN0dXJlICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0FwcGVuZHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPiB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPiBpZiBpdHMgbm90IGFscmVhZHkgZXhwcmVzc2VkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+LiAgVGhlCitzdHJ1Y3R1cmUgaXMgbm90IGNvcGllZDsgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4gYmVjb21lcyB0aGUgb3duZXIgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdGhhdCB3aWxsIHRoZSBuZXcgc3RydWN0dXJlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IHRvIG1lcmdlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNhcHMtZ2V0LXNpemUiPjwvYT48aDM+Z3N0X2NhcHNfZ2V0X3NpemUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgZ3N0X2NhcHNfZ2V0X3NpemUgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXRzIHRoZSBudW1iZXIgb2Ygc3RydWN0dXJlcyBjb250YWluZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG51bWJlciBvZiBzdHJ1Y3R1cmVzIHRoYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4gY29udGFpbnM8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2Fwcy1nZXQtc3RydWN0dXJlIj48L2E+PGgzPmdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqICAgICAgZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0ZpbmRzIHRoZSBzdHJ1Y3R1cmUgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4gdGhhdCBoYXMgdGhlIGluZGV4IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPiwgYW5kCityZXR1cm5zIGl0LgorPC9wPgorPHA+CitXQVJOSU5HOiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgY29uc3QgR3N0Q2FwcyAqLCBidXQgcmV0dXJucyBhCitub24tY29uc3QgR3N0U3RydWN0dXJlICouICBUaGlzIGlzIGZvciBwcm9ncmFtbWluZyBjb252ZW5pZW5jZSAtLQordGhlIGNhbGxlciBzaG91bGQgYmUgYXdhcmUgdGhhdCBzdHJ1Y3R1cmVzIGluc2lkZSBhIGNvbnN0YW50Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gc2hvdWxkIG5vdCBiZSBtb2RpZmllZC4gSG93ZXZlciwgaWYgeW91IGtub3cgdGhlIGNhcHMKK2FyZSB3cml0YWJsZSwgZWl0aGVyIGJlY2F1c2UgeW91IGhhdmUganVzdCBjb3BpZWQgdGhlbSBvciBtYWRlCit0aGVtIHdyaXRhYmxlIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbWFrZS13cml0YWJsZSIgdGl0bGU9ImdzdF9jYXBzX21ha2Vfd3JpdGFibGUoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2Fwc19tYWtlX3dyaXRhYmxlKCk8L2NvZGU+PC9hPiwgeW91IG1heSBtb2RpZnkgdGhlCitzdHJ1Y3R1cmUgcmV0dXJuZWQgaW4gdGhlIHVzdWFsIHdheSwgZS5nLiB3aXRoIGZ1bmN0aW9ucyBsaWtlCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtc2V0IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9zZXQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3N0cnVjdHVyZV9zZXQoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitZb3UgZG8gbm90IG5lZWQgdG8gZnJlZSBvciB1bnJlZiB0aGUgc3RydWN0dXJlIHJldHVybmVkLCBpdAorYmVsb25ncyB0byB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5kZXg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGluZGV4IG9mIHRoZSBzdHJ1Y3R1cmU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IGNvcnJlc3BvbmRpbmcKK3RvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jYXBzLXNldC12YWx1ZSI+PC9hPjxoMz5nc3RfY2Fwc19zZXRfdmFsdWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2NhcHNfc2V0X3ZhbHVlICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPHNwYW4gY2xhc3M9InR5cGUiPmNoYXI8L3NwYW4+ICpmaWVsZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0cyB0aGUgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpZWxkPC9jb2RlPjwvZW0+IG9uIGFsbCBzdHJ1Y3R1cmVzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+IHRvIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4uCitUaGlzIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGNhbGxpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXNldC12YWx1ZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlKCk8L2NvZGU+PC9hPiBvbgorYWxsIHN0cnVjdHVyZXMgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHdyaXRhYmxlIGNhcHM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpZWxkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm5hbWUgb2YgdGhlIGZpZWxkIHRvIHNldDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dmFsdWUgdG8gc2V0IHRoZSBmaWVsZCB0bzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jYXBzLXNldC1zaW1wbGUiPjwvYT48aDM+Z3N0X2NhcHNfc2V0X3NpbXBsZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8c3BhbiBjbGFzcz0idHlwZSI+Y2hhcjwvc3Bhbj4gKmZpZWxkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgZmllbGRzIGluIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LiAgVGhlIGFyZ3VtZW50cyBtdXN0IGJlIHBhc3NlZCBpbiB0aGUgc2FtZQorbWFubmVyIGFzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1zZXQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX3NldCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX3NldCgpPC9jb2RlPjwvYT4sIGFuZCBiZSBOVUxMLXRlcm1pbmF0ZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJub3RlIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+Cis8aDMgY2xhc3M9InRpdGxlIj5Ob3RlPC9oMz5QcmlvciB0byBHU3RyZWFtZXIgdmVyc2lvbiAwLjEwLjI2LCB0aGlzIGZ1bmN0aW9uIGZhaWxlZCB3aGVuCis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPiB3YXMgbm90IHNpbXBsZS4gSWYgeW91ciBjb2RlIG5lZWRzIHRvIHdvcmsgd2l0aCB0aG9zZSB2ZXJzaW9ucworb2YgR1N0cmVhbWVyLCB5b3UgbWF5IG9ubHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR1NULUNBUFMtSVMtU0lNUExFOkNBUFMiIHRpdGxlPSJHU1RfQ0FQU19JU19TSU1QTEUoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5HU1RfQ0FQU19JU19TSU1QTEUoKTwvY29kZT48L2E+CitpcyA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4uPC9kaXY+Cis8cD4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gc2V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5maXJzdCBmaWVsZCB0byBzZXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hZGRpdGlvbmFsIHBhcmFtZXRlcnM8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2Fwcy1zZXQtc2ltcGxlLXZhbGlzdCI+PC9hPjxoMz5nc3RfY2Fwc19zZXRfc2ltcGxlX3ZhbGlzdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlX3ZhbGlzdCAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8c3BhbiBjbGFzcz0idHlwZSI+Y2hhcjwvc3Bhbj4gKmZpZWxkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52YV9saXN0PC9zcGFuPiB2YXJhcmdzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0cyBmaWVsZHMgaW4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4uICBUaGUgYXJndW1lbnRzIG11c3QgYmUgcGFzc2VkIGluIHRoZSBzYW1lCittYW5uZXIgYXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXNldCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfc2V0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdHJ1Y3R1cmVfc2V0KCk8L2NvZGU+PC9hPiwgYW5kIGJlIE5VTEwtdGVybWluYXRlZC4KKzwvcD4KKzxkaXYgY2xhc3M9Im5vdGUiIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij4KKzxoMyBjbGFzcz0idGl0bGUiPk5vdGU8L2gzPlByaW9yIHRvIEdTdHJlYW1lciB2ZXJzaW9uIDAuMTAuMjYsIHRoaXMgZnVuY3Rpb24gZmFpbGVkIHdoZW4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+IHdhcyBub3Qgc2ltcGxlLiBJZiB5b3VyIGNvZGUgbmVlZHMgdG8gd29yayB3aXRoIHRob3NlIHZlcnNpb25zCitvZiBHU3RyZWFtZXIsIHlvdSBtYXkgb25seSBjYWxsIHRoaXMgZnVuY3Rpb24gd2hlbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHU1QtQ0FQUy1JUy1TSU1QTEU6Q0FQUyIgdGl0bGU9IkdTVF9DQVBTX0lTX1NJTVBMRSgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdTVF9DQVBTX0lTX1NJTVBMRSgpPC9jb2RlPjwvYT4KK2lzIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPi48L2Rpdj4KKzxwPgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byBzZXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpZWxkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmZpcnN0IGZpZWxkIHRvIHNldDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFyYXJnczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hZGRpdGlvbmFsIHBhcmFtZXRlcnM8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2Fwcy1pcy1hbnkiPjwvYT48aDM+Z3N0X2NhcHNfaXNfYW55ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9jYXBzX2lzX2FueSAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRGV0ZXJtaW5lcyBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPiByZXByZXNlbnRzIGFueSBtZWRpYSBmb3JtYXQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIHRlc3Q8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+IHJlcHJlc2VudHMgYW55IGZvcm1hdC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2Fwcy1pcy1lbXB0eSI+PC9hPjxoMz5nc3RfY2Fwc19pc19lbXB0eSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfY2Fwc19pc19lbXB0eSAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0RldGVybWluZXMgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4gcmVwcmVzZW50cyBubyBtZWRpYSBmb3JtYXRzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byB0ZXN0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPiByZXByZXNlbnRzIG5vIGZvcm1hdHMuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNhcHMtaXMtZml4ZWQiPjwvYT48aDM+Z3N0X2NhcHNfaXNfZml4ZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2NhcHNfaXNfZml4ZWQgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitGaXhlZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gZGVzY3JpYmUgZXhhY3RseSBvbmUgZm9ybWF0LCB0aGF0IGlzLCB0aGV5IGhhdmUgZXhhY3RseQorb25lIHN0cnVjdHVyZSwgYW5kIGVhY2ggZmllbGQgaW4gdGhlIHN0cnVjdHVyZSBkZXNjcmliZXMgYSBmaXhlZCB0eXBlLgorRXhhbXBsZXMgb2Ygbm9uLWZpeGVkIHR5cGVzIGFyZSBHU1RfVFlQRV9JTlRfUkFOR0UgYW5kIEdTVF9UWVBFX0xJU1QuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIHRlc3Q8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+IGlzIGZpeGVkPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNhcHMtaXMtZXF1YWwiPjwvYT48aDM+Z3N0X2NhcHNfaXNfZXF1YWwgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2NhcHNfaXNfZXF1YWwgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHMxPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDaGVja3MgaWYgdGhlIGdpdmVuIGNhcHMgcmVwcmVzZW50IHRoZSBzYW1lIHNldCBvZiBjYXBzLgorPC9wPgorPGRpdiBjbGFzcz0ibm90ZSIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPgorPGgzIGNsYXNzPSJ0aXRsZSI+Tm90ZTwvaDM+VGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB3b3JrIHJlbGlhYmx5IGlmIG9wdGlvbmFsIHByb3BlcnRpZXMgZm9yIGNhcHMKK2FyZSBpbmNsdWRlZCBvbiBvbmUgY2FwcyBhbmQgb21pdHRlZCBvbiB0aGUgb3RoZXIuPC9kaXY+Cis8cD4KKzwvcD4KKzxwPgorVGhpcyBmdW5jdGlvbiBkZWFscyBjb3JyZWN0bHkgd2l0aCBwYXNzaW5nIE5VTEwgZm9yIGFueSBvZiB0aGUgY2Fwcy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzMTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzMjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hbm90aGVyIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiBib3RoIGNhcHMgYXJlIGVxdWFsLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jYXBzLWlzLWVxdWFsLWZpeGVkIj48L2E+PGgzPmdzdF9jYXBzX2lzX2VxdWFsX2ZpeGVkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9jYXBzX2lzX2VxdWFsX2ZpeGVkICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzMTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHMyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVGVzdHMgaWYgdHdvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBhcmUgZXF1YWwuICBUaGlzIGZ1bmN0aW9uIG9ubHkgd29ya3Mgb24gZml4ZWQKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzMTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIHRlc3Q8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHMyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gdGVzdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIGFyZ3VtZW50cyByZXByZXNlbnQgdGhlIHNhbWUgZm9ybWF0PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNhcHMtaXMtYWx3YXlzLWNvbXBhdGlibGUiPjwvYT48aDM+Z3N0X2NhcHNfaXNfYWx3YXlzX2NvbXBhdGlibGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2NhcHNfaXNfYWx3YXlzX2NvbXBhdGlibGUgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHMxPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBIGdpdmVuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUgaXMgYWx3YXlzIGNvbXBhdGlibGUgd2l0aCBhbm90aGVyIGlmCitldmVyeSBtZWRpYSBmb3JtYXQgdGhhdCBpcyBpbiB0aGUgZmlyc3QgaXMgYWxzbyBjb250YWluZWQgaW4gdGhlCitzZWNvbmQuICBUaGF0IGlzLCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczE8L2NvZGU+PC9lbT4gaXMgYSBzdWJzZXQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHMyPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHMxPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gdGVzdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byB0ZXN0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczE8L2NvZGU+PC9lbT4gaXMgYSBzdWJzZXQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHMyPC9jb2RlPjwvZW0+LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jYXBzLWlzLXN1YnNldCI+PC9hPjxoMz5nc3RfY2Fwc19pc19zdWJzZXQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2NhcHNfaXNfc3Vic2V0ICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKnN1YnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKnN1cGVyc2V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2tzIGlmIGFsbCBjYXBzIHJlcHJlc2VudGVkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdWJzZXQ8L2NvZGU+PC9lbT4gYXJlIGFsc28gcmVwcmVzZW50ZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN1cGVyc2V0PC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0ibm90ZSIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPgorPGgzIGNsYXNzPSJ0aXRsZSI+Tm90ZTwvaDM+VGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB3b3JrIHJlbGlhYmx5IGlmIG9wdGlvbmFsIHByb3BlcnRpZXMgZm9yIGNhcHMKK2FyZSBpbmNsdWRlZCBvbiBvbmUgY2FwcyBhbmQgb21pdHRlZCBvbiB0aGUgb3RoZXIuPC9kaXY+Cis8cD4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdWJzZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3VwZXJzZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBwb3RlbnRpYWxseSBncmVhdGVyIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3Vic2V0PC9jb2RlPjwvZW0+IGlzIGEgc3Vic2V0IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdXBlcnNldDwvY29kZT48L2VtPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNhcHMtaXMtc3Vic2V0LXN0cnVjdHVyZSI+PC9hPjxoMz5nc3RfY2Fwc19pc19zdWJzZXRfc3RydWN0dXJlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9jYXBzX2lzX3N1YnNldF9zdHJ1Y3R1cmUgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDaGVja3MgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPiBpcyBhIHN1YnNldCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPi4gU2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWlzLXN1YnNldCIgdGl0bGU9ImdzdF9jYXBzX2lzX3N1YnNldCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2Fwc19pc19zdWJzZXQoKTwvY29kZT48L2E+Citmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvdGVudGlhbCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiBzdWJzZXQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPiBpcyBhIHN1YnNldCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNhcHMtY2FuLWludGVyc2VjdCI+PC9hPjxoMz5nc3RfY2Fwc19jYW5faW50ZXJzZWN0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzMTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHMyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVHJpZXMgaW50ZXJzZWN0aW5nIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzMTwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHMyPC9jb2RlPjwvZW0+IGFuZCByZXBvcnRzIHdoZXRoZXIgdGhlIHJlc3VsdCB3b3VsZCBub3QKK2JlIGVtcHR5Cis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gaW50ZXJzZWN0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzMjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byBpbnRlcnNlY3Q8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIGludGVyc2VjdGlvbiB3b3VsZCBiZSBub3QgZW1wdHk8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2Fwcy1pbnRlcnNlY3QiPjwvYT48aDM+Z3N0X2NhcHNfaW50ZXJzZWN0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgIGdzdF9jYXBzX2ludGVyc2VjdCAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzMTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHMyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlcyBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdGhhdCBjb250YWlucyBhbGwgdGhlIGZvcm1hdHMgdGhhdCBhcmUgY29tbW9uCit0byBib3RoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzMTwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHMyPC9jb2RlPjwvZW0+LiBEZWZhdWx0cyB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHU1QtQ0FQUy1JTlRFUlNFQ1QtWklHLVpBRzpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0NBUFNfSU5URVJTRUNUX1pJR19aQUc8L2NvZGU+PC9hPiBtb2RlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHMxPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIGludGVyc2VjdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gaW50ZXJzZWN0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jYXBzLWludGVyc2VjdC1mdWxsIj48L2E+PGgzPmdzdF9jYXBzX2ludGVyc2VjdF9mdWxsICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgIGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzMTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHMyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHNJbnRlcnNlY3RNb2RlIiB0aXRsZT0iZW51bSBHc3RDYXBzSW50ZXJzZWN0TW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNJbnRlcnNlY3RNb2RlPC9zcGFuPjwvYT4gbW9kZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRoYXQgY29udGFpbnMgYWxsIHRoZSBmb3JtYXRzIHRoYXQgYXJlIGNvbW1vbgordG8gYm90aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczE8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzMjwvY29kZT48L2VtPiwgdGhlIG9yZGVyIGlzIGRlZmluZWQgYnkgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHNJbnRlcnNlY3RNb2RlIiB0aXRsZT0iZW51bSBHc3RDYXBzSW50ZXJzZWN0TW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNJbnRlcnNlY3RNb2RlPC9zcGFuPjwvYT4KK3VzZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gaW50ZXJzZWN0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzMjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byBpbnRlcnNlY3Q8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1vZGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGludGVyc2VjdGlvbiBhbGdvcml0aG0vbW9kZSB0byB1c2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNhcHMtdW5pb24iPjwvYT48aDM+Z3N0X2NhcHNfdW5pb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKiAgICAgICAgICAgZ3N0X2NhcHNfdW5pb24gICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHMxPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGVzIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgZm9ybWF0cyB0aGF0IGFyZSBpbgorZWl0aGVyIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzMTwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHMyPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHMxPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIHVuaW9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzMjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byB1bmlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2Fwcy1ub3JtYWxpemUiPjwvYT48aDM+Z3N0X2NhcHNfbm9ybWFsaXplICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgIGdzdF9jYXBzX25vcm1hbGl6ZSAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlcyBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdGhhdCByZXByZXNlbnRzIHRoZSBzYW1lIHNldCBvZiBmb3JtYXRzIGFzCis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPiwgYnV0IGNvbnRhaW5zIG5vIGxpc3RzLiAgRWFjaCBsaXN0IGlzIGV4cGFuZGVkIGludG8gc2VwYXJhdGUKKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5Hc3RTdHJ1Y3R1cmVzPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gbm9ybWFsaXplPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jYXBzLWRvLXNpbXBsaWZ5Ij48L2E+PGgzPmdzdF9jYXBzX2RvX3NpbXBsaWZ5ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9jYXBzX2RvX3NpbXBsaWZ5ICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorTW9kaWZpZXMgdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+IGlucGxhY2UgaW50byBhIHJlcHJlc2VudGF0aW9uIHRoYXQgcmVwcmVzZW50cyB0aGUKK3NhbWUgc2V0IG9mIGZvcm1hdHMsIGJ1dCBpbiBhIHNpbXBsZXIgZm9ybS4gIENvbXBvbmVudCBzdHJ1Y3R1cmVzIHRoYXQgYXJlCitpZGVudGljYWwgYXJlIG1lcmdlZC4gIENvbXBvbmVudCBzdHJ1Y3R1cmVzIHRoYXQgaGF2ZSB2YWx1ZXMgdGhhdCBjYW4gYmUKK21lcmdlZCBhcmUgYWxzbyBtZXJnZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byBzaW1wbGlmeTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUsIGlmIHRoZSBjYXBzIGNvdWxkIGJlIHNpbXBsaWZpZWQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2Fwcy1yZXBsYWNlIj48L2E+PGgzPmdzdF9jYXBzX3JlcGxhY2UoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBnc3RfY2Fwc19yZXBsYWNlKG9jYXBzLG5jYXBzKTwvcHJlPgorPHA+CitNb2RpZmllcyBhIHBvaW50ZXIgdG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gcG9pbnQgdG8gYSBkaWZmZXJlbnQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LiBUaGUKK21vZGlmaWNhdGlvbiBpcyBkb25lIGF0b21pY2FsbHkgKHNvIHRoaXMgaXMgdXNlZnVsIGZvciBlbnN1cmluZyB0aHJlYWQgc2FmZXR5CitpbiBzb21lIGNhc2VzKSwgYW5kIHRoZSByZWZlcmVuY2UgY291bnRzIGFyZSB1cGRhdGVkIGFwcHJvcHJpYXRlbHkgKHRoZSBvbGQKK2NhcHMgaXMgdW5yZWZmZWQsIHRoZSBuZXcgaXMgcmVmZmVkKS4KKzwvcD4KKzxwPgorRWl0aGVyIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uY2FwczwvY29kZT48L2VtPiBvciB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9jYXBzPC9jb2RlPjwvZW0+IG1heSBiZSBOVUxMLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9jYXBzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnBvaW50ZXIgdG8gYSBwb2ludGVyIHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIGJlCityZXBsYWNlZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dCBhbmQgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+aW5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5jYXBzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnBvaW50ZXIgdG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdGhhdCB3aWxsCityZXBsYWNlIHRoZSBjYXBzIHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9jYXBzPC9jb2RlPjwvZW0+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2Fwcy10by1zdHJpbmciPjwvYT48aDM+Z3N0X2NhcHNfdG9fc3RyaW5nICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgICAgICAgIGdzdF9jYXBzX3RvX3N0cmluZyAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ29udmVydHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4gdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uICBUaGlzIHN0cmluZyByZXByZXNlbnRhdGlvbgorY2FuIGJlIGNvbnZlcnRlZCBiYWNrIHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IGJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWZyb20tc3RyaW5nIiB0aXRsZT0iZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NhcHNfZnJvbV9zdHJpbmcoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitGb3IgZGVidWdnaW5nIHB1cnBvc2VzIGl0cyBlYXNpZXIgdG8gZG8gc29tZXRoaW5nIGxpa2UgdGhpczoKKzwvcD4KKzxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgorR1NUX0xPRyAoImNhcHMgYXJlICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKKzwvcHJlPjwvZGl2PgorPHA+CitUaGlzIHByaW50cyB0aGUgY2FwcyBpbiBodW1hbiByZWFkYmxlIGZvcm0uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXdseSBhbGxvY2F0ZWQgc3RyaW5nIHJlcHJlc2VudGluZyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jYXBzLWZyb20tc3RyaW5nIj48L2E+PGgzPmdzdF9jYXBzX2Zyb21fc3RyaW5nICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgIGdzdF9jYXBzX2Zyb21fc3RyaW5nICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqc3RyaW5nPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ29udmVydHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4gZnJvbSBhIHN0cmluZyByZXByZXNlbnRhdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJpbmc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBzdHJpbmcgdG8gY29udmVydCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3bHkgYWxsb2NhdGVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jYXBzLXN1YnRyYWN0Ij48L2E+PGgzPmdzdF9jYXBzX3N1YnRyYWN0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgIGdzdF9jYXBzX3N1YnRyYWN0ICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICptaW51ZW5kPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqc3VidHJhaGVuZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1N1YnRyYWN0cyB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN1YnRyYWhlbmQ8L2NvZGU+PC9lbT4gZnJvbSB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1pbnVlbmQ8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJub3RlIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+Cis8aDMgY2xhc3M9InRpdGxlIj5Ob3RlPC9oMz5UaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHdvcmsgcmVsaWFibHkgaWYgb3B0aW9uYWwgcHJvcGVydGllcyBmb3IgY2FwcworYXJlIGluY2x1ZGVkIG9uIG9uZSBjYXBzIGFuZCBvbWl0dGVkIG9uIHRoZSBvdGhlci48L2Rpdj4KKzxwPgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1pbnVlbmQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gc3VidHJhY3QgZnJvbTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3VidHJhaGVuZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byBzdWJ0cmFjdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSByZXN1bHRpbmcgY2FwczwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jYXBzLW1ha2Utd3JpdGFibGUiPjwvYT48aDM+Z3N0X2NhcHNfbWFrZV93cml0YWJsZSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgZ3N0X2NhcHNfbWFrZV93cml0YWJsZShjYXBzKSAgIEdTVF9DQVBTX0NBU1QgKGdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoY2FwcykpKQorPC9wcmU+Cis8cD4KK1JldHVybnMgYSB3cml0YWJsZSBjb3B5IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+LgorPC9wPgorPHA+CitJZiB0aGVyZSBpcyBvbmx5IG9uZSByZWZlcmVuY2UgY291bnQgb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4sIHRoZSBjYWxsZXIgbXVzdCBiZSB0aGUgb3duZXIsCithbmQgc28gdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgY2FwcyBvYmplY3QgdW5jaGFuZ2VkLiBJZiBvbiB0aGUgb3RoZXIKK2hhbmQgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSByZWZlcmVuY2Ugb24gdGhlIG9iamVjdCwgYSBuZXcgY2FwcyBvYmplY3Qgd2lsbAorYmUgcmV0dXJuZWQuIFRoZSBjYWxsZXIncyByZWZlcmVuY2Ugb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4gd2lsbCBiZSByZW1vdmVkLCBhbmQgaW5zdGVhZCB0aGUKK2NhbGxlciB3aWxsIG93biBhIHJlZmVyZW5jZSB0byB0aGUgcmV0dXJuZWQgb2JqZWN0LgorPC9wPgorPHA+CitJbiBzaG9ydCwgdGhpcyBmdW5jdGlvbiB1bnJlZnMgdGhlIGNhcHMgaW4gdGhlIGFyZ3VtZW50IGFuZCByZWZzIHRoZSBjYXBzCit0aGF0IGl0IHJldHVybnMuIERvbid0IGFjY2VzcyB0aGUgYXJndW1lbnQgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiBTZWUKK2Fsc286IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXJlZiIgdGl0bGU9ImdzdF9jYXBzX3JlZiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2Fwc19yZWYoKTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHdyaXRhYmxlIGNhcHMgd2hpY2ggbWF5IG9yIG1heSBub3QgYmUgdGhlCitzYW1lIGFzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNhcHMtcmVmIj48L2E+PGgzPmdzdF9jYXBzX3JlZiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPiAqICAgICAgICAgICBnc3RfY2Fwc19yZWYgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0FkZCBhIHJlZmVyZW5jZSB0byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBvYmplY3QuCis8L3A+Cis8cD4KK0Zyb20gdGhpcyBwb2ludCBvbiwgdW50aWwgdGhlIGNhbGxlciBjYWxscyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy11bnJlZiIgdGl0bGU9ImdzdF9jYXBzX3VucmVmICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jYXBzX3VucmVmKCk8L2NvZGU+PC9hPiBvcgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbWFrZS13cml0YWJsZSIgdGl0bGU9ImdzdF9jYXBzX21ha2Vfd3JpdGFibGUoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2Fwc19tYWtlX3dyaXRhYmxlKCk8L2NvZGU+PC9hPiwgaXQgaXMgZ3VhcmFudGVlZCB0aGF0IHRoZSBjYXBzIG9iamVjdCB3aWxsIG5vdAorY2hhbmdlLiBUaGlzIG1lYW5zIGl0cyBzdHJ1Y3R1cmVzIHdvbid0IGNoYW5nZSwgZXRjLiBUbyB1c2UgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4KK29iamVjdCwgeW91IG11c3QgYWx3YXlzIGhhdmUgYSByZWZjb3VudCBvbiBpdCAtLSBlaXRoZXIgdGhlIG9uZSBtYWRlCitpbXBsaWNpdGx5IGJ5IGUuZy4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbmV3LXNpbXBsZSIgdGl0bGU9ImdzdF9jYXBzX25ld19zaW1wbGUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NhcHNfbmV3X3NpbXBsZSgpPC9jb2RlPjwvYT4sIG9yIHZpYSB0YWtpbmcgb25lIGV4cGxpY2l0bHkgd2l0aAordGhpcyBmdW5jdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gcmVmZXJlbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNhbWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IG9iamVjdC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2Fwcy10cnVuY2F0ZSI+PC9hPjxoMz5nc3RfY2Fwc190cnVuY2F0ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfY2Fwc190cnVuY2F0ZSAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0Rlc3RydWN0aXZlbHkgZGlzY2FyZCBhbGwgYnV0IHRoZSBmaXJzdCBzdHJ1Y3R1cmUgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPi4gVXNlZnVsIHdoZW4KK2ZpeGF0aW5nLiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPiBtdXN0IGJlIHdyaXRhYmxlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gdHJ1bmNhdGU8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNhcHMtZml4YXRlIj48L2E+PGgzPmdzdF9jYXBzX2ZpeGF0ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfY2Fwc19maXhhdGUgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK01vZGlmaWVzIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPiBpbnBsYWNlIGludG8gYSByZXByZXNlbnRhdGlvbiB3aXRoIG9ubHkgZml4ZWQKK3ZhbHVlcy4gRmlyc3QgdGhlIGNhcHMgd2lsbCBiZSB0cnVuY2F0ZWQgYW5kIHRoZW4gdGhlIGZpcnN0IHN0cnVjdHVyZSB3aWxsIGJlCitmaXhhdGVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZpeGF0ZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZml4YXRlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdHJ1Y3R1cmVfZml4YXRlKCk8L2NvZGU+PC9hPi4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4gc2hvdWxkIGJlIHdyaXRhYmxlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIGZpeGF0ZTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2Fwcy11bnJlZiI+PC9hPjxoMz5nc3RfY2Fwc191bnJlZiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfY2Fwc191bnJlZiAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1VucmVmIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IGFuZCBhbmQgZnJlZSBhbGwgaXRzIHN0cnVjdHVyZXMgYW5kIHRoZQorc3RydWN0dXJlcycgdmFsdWVzIHdoZW4gdGhlIHJlZmNvdW50IHJlYWNoZXMgMC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPi48L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0Q2Fwcy5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjVmNWM5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbApAQCAtMCwwICsxLDU4NCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdzdERhdGVUaW1lPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLWdzdGNvbmZpZy5odG1sIiB0aXRsZT0iZ3N0Y29uZmlnIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLWdzdGNvbmZpZy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdERhdGVUaW1lLnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3REYXRlVGltZSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1Hc3REYXRlVGltZS50b3Bfb2ZfcGFnZSI+PC9hPkdzdERhdGVUaW1lPC9zcGFuPjwvaDI+Cis8cD5Hc3REYXRlVGltZSDigJQgQSBkYXRlLCB0aW1lIGFuZCB0aW1lem9uZSBzdHJ1Y3R1cmU8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKKworICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjR3N0RGF0ZVRpbWUiIHRpdGxlPSJHc3REYXRlVGltZSI+R3N0RGF0ZVRpbWU8L2E+OworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjR1NULVRZUEUtREFURS1USU1FOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9EQVRFX1RJTUUiPkdTVF9UWVBFX0RBVEVfVElNRTwvYT4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1nZXQtZGF5IiB0aXRsZT0iZ3N0X2RhdGVfdGltZV9nZXRfZGF5ICgpIj5nc3RfZGF0ZV90aW1lX2dldF9kYXk8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjR3N0RGF0ZVRpbWUiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gKmRhdGV0aW1lPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1nZXQtbW9udGgiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoKSI+Z3N0X2RhdGVfdGltZV9nZXRfbW9udGg8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+ICpkYXRldGltZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtZ2V0LWhvdXIiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX2dldF9ob3VyICgpIj5nc3RfZGF0ZV90aW1lX2dldF9ob3VyPC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjR3N0RGF0ZVRpbWUiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gKmRhdGV0aW1lPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1nZXQtbWljcm9zZWNvbmQiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX2dldF9taWNyb3NlY29uZCAoKSI+Z3N0X2RhdGVfdGltZV9nZXRfbWljcm9zZWNvbmQ8L2E+ICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+ICpkYXRldGltZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtZ2V0LW1pbnV0ZSIgdGl0bGU9ImdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZSAoKSI+Z3N0X2RhdGVfdGltZV9nZXRfbWludXRlPC9hPiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+ICpkYXRldGltZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdmbG9hdDwvc3Bhbj48L2E+ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1nZXQtdGltZS16b25lLW9mZnNldCIgdGl0bGU9ImdzdF9kYXRlX3RpbWVfZ2V0X3RpbWVfem9uZV9vZmZzZXQgKCkiPmdzdF9kYXRlX3RpbWVfZ2V0X3RpbWVfem9uZV9vZmZzZXQ8L2E+ICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHc3REYXRlVGltZSIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiAqZGF0ZXRpbWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLWdldC1zZWNvbmQiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX2dldF9zZWNvbmQgKCkiPmdzdF9kYXRlX3RpbWVfZ2V0X3NlY29uZDwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHc3REYXRlVGltZSIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiAqZGF0ZXRpbWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLWdldC15ZWFyIiB0aXRsZT0iZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoKSI+Z3N0X2RhdGVfdGltZV9nZXRfeWVhcjwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+ICpkYXRldGltZTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjR3N0RGF0ZVRpbWUiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+ICogICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtbmV3IiB0aXRsZT0iZ3N0X2RhdGVfdGltZV9uZXcgKCkiPmdzdF9kYXRlX3RpbWVfbmV3PC9hPiAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPiB0em9mZnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiB5ZWFyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG1vbnRoPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGRheTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBob3VyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG1pbnV0ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiBzZWNvbmRzPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHc3REYXRlVGltZSIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gKiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1uZXctZnJvbS11bml4LWVwb2NoLWxvY2FsLXRpbWUiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX25ld19mcm9tX3VuaXhfZXBvY2hfbG9jYWxfdGltZSAoKSI+Z3N0X2RhdGVfdGltZV9uZXdfZnJvbV91bml4X2Vwb2NoX2xvY2FsX3RpbWU8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHNlY3M8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiAqICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLW5ldy1mcm9tLXVuaXgtZXBvY2gtdXRjIiB0aXRsZT0iZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV91bml4X2Vwb2NoX3V0YyAoKSI+Z3N0X2RhdGVfdGltZV9uZXdfZnJvbV91bml4X2Vwb2NoX3V0YzwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc2VjczwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjR3N0RGF0ZVRpbWUiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+ICogICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtbmV3LWxvY2FsLXRpbWUiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX25ld19sb2NhbF90aW1lICgpIj5nc3RfZGF0ZV90aW1lX25ld19sb2NhbF90aW1lPC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiB5ZWFyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG1vbnRoPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGRheTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBob3VyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG1pbnV0ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiBzZWNvbmRzPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHc3REYXRlVGltZSIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gKiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1uZXctbm93LWxvY2FsLXRpbWUiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX25ld19ub3dfbG9jYWxfdGltZSAoKSI+Z3N0X2RhdGVfdGltZV9uZXdfbm93X2xvY2FsX3RpbWU8L2E+ICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHc3REYXRlVGltZSIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gKiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1uZXctbm93LXV0YyIgdGl0bGU9ImdzdF9kYXRlX3RpbWVfbmV3X25vd191dGMgKCkiPmdzdF9kYXRlX3RpbWVfbmV3X25vd191dGM8L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjR3N0RGF0ZVRpbWUiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+ICogICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtcmVmIiB0aXRsZT0iZ3N0X2RhdGVfdGltZV9yZWYgKCkiPmdzdF9kYXRlX3RpbWVfcmVmPC9hPiAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHc3REYXRlVGltZSIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiAqZGF0ZXRpbWU8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS11bnJlZiIgdGl0bGU9ImdzdF9kYXRlX3RpbWVfdW5yZWYgKCkiPmdzdF9kYXRlX3RpbWVfdW5yZWY8L2E+ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHc3REYXRlVGltZSIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiAqZGF0ZXRpbWU8L2NvZGU+PC9lbT4pOworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK1N0cnVjdCB0byBzdG9yZSBkYXRlLCB0aW1lIGFuZCB0aW1lem9uZSBpbmZvcm1hdGlvbiBhbHRvZ2V0aGVyLgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+IGlzIHJlZmNvdW50ZWQgYW5kIGltbXV0YWJsZS4KKzwvcD4KKzxwPgorRGF0ZSBpbmZvcm1hdGlvbiBpcyBoYW5kbGVkIHVzaW5nIHRoZSBwcm9sZXB0aWMgR3JlZ29yaWFuIGNhbGVuZGFyLgorPC9wPgorPHA+CitQcm92aWRlcyBiYXNpYyBjcmVhdGlvbiBmdW5jdGlvbnMgYW5kIGFjY2Vzc29yIGZ1bmN0aW9ucyB0byBpdHMgZmllbGRzLgorPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdERhdGVUaW1lIj48L2E+PGgzPkdzdERhdGVUaW1lPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCBfR3N0RGF0ZVRpbWUgR3N0RGF0ZVRpbWU7PC9wcmU+Cis8cD4KK09wYXF1ZSwgaW1tdXRhYmxlLCByZWZjb3VudGVkIHN0cnVjdCB0aGF0IHN0b3JlcyBkYXRlLCB0aW1lIGFuZCB0aW1lem9uZQoraW5mb3JtYXRpb24uIEl0IGN1cnJlbnRseSBzdXBwb3J0cyByYW5nZXMgZnJvbSAwMDAxLTAxLTAxIHRvCis5OTk5LTEyLTMxIGluIHRoZSBHcmVnb3JpYW4gcHJvbGVwdGljIGNhbGVuZGFyLgorPC9wPgorPHA+CitVc2UgdGhlIGFjZXNzb3IgZnVuY3Rpb25zIHRvIGdldCB0aGUgc3RvcmVkIHZhbHVlcy4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRZUEUtREFURS1USU1FOkNBUFMiPjwvYT48aDM+R1NUX1RZUEVfREFURV9USU1FPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UWVBFX0RBVEVfVElNRSAgICAgICAgICAgICAgIGdzdF9kYXRlX3RpbWVfZ2V0X3R5cGUgKCkKKzwvcHJlPgorPHA+CithIGJveGVkIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0eXBlIGZvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjR3N0RGF0ZVRpbWUiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gdGhhdCByZXByZXNlbnRzIGEgZGF0ZSBhbmQgdGltZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gb2YgR3N0RGF0ZVRpbWU8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1nZXQtZGF5Ij48L2E+PGgzPmdzdF9kYXRlX3RpbWVfZ2V0X2RheSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgIGdzdF9kYXRlX3RpbWVfZ2V0X2RheSAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+ICpkYXRldGltZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JldHVybnMgdGhlIGRheSBvZiB0aGlzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHc3REYXRlVGltZSIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRldGltZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHc3REYXRlVGltZSIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGRheSBvZiB0aGlzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHc3REYXRlVGltZSIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1nZXQtbW9udGgiPjwvYT48aDM+Z3N0X2RhdGVfdGltZV9nZXRfbW9udGggKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICBnc3RfZGF0ZV90aW1lX2dldF9tb250aCAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHc3REYXRlVGltZSIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiAqZGF0ZXRpbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZXR1cm5zIHRoZSBtb250aCBvZiB0aGlzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHc3REYXRlVGltZSIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPi4gSmFudWFyeSBpcyAxLCBGZWJydWFyeSBpcyAyLCBldGMuLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGV0aW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgbW9udGggb2YgdGhpcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjR3N0RGF0ZVRpbWUiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1kYXRlLXRpbWUtZ2V0LWhvdXIiPjwvYT48aDM+Z3N0X2RhdGVfdGltZV9nZXRfaG91ciAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgIGdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+ICpkYXRldGltZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JldHJpZXZlcyB0aGUgaG91ciBvZiB0aGUgZGF5IHJlcHJlc2VudGVkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRldGltZTwvY29kZT48L2VtPiBpbiB0aGUgZ3JlZ29yaWFuCitjYWxlbmRhci4gVGhlIHJldHVybiBpcyBpbiB0aGUgcmFuZ2Ugb2YgMCB0byAyMy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRldGltZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHc3REYXRlVGltZSIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGhvdXIgb2YgdGhlIGRheTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1kYXRlLXRpbWUtZ2V0LW1pY3Jvc2Vjb25kIj48L2E+PGgzPmdzdF9kYXRlX3RpbWVfZ2V0X21pY3Jvc2Vjb25kICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgZ3N0X2RhdGVfdGltZV9nZXRfbWljcm9zZWNvbmQgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjR3N0RGF0ZVRpbWUiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gKmRhdGV0aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0cmlldmVzIHRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgdGhlIHNlY29uZHMgaW4gbWljcm9zZWNvbmRzIHJlcHJlc2VudGVkIGJ5Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0ZXRpbWU8L2NvZGU+PC9lbT4gaW4gdGhlIGdyZWdvcmlhbiBjYWxlbmRhci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRldGltZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHc3REYXRlVGltZSIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG1pY3Jvc2Vjb25kIG9mIHRoZSBzZWNvbmQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMxPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZGF0ZS10aW1lLWdldC1taW51dGUiPjwvYT48aDM+Z3N0X2RhdGVfdGltZV9nZXRfbWludXRlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgZ3N0X2RhdGVfdGltZV9nZXRfbWludXRlICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjR3N0RGF0ZVRpbWUiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gKmRhdGV0aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0cmlldmVzIHRoZSBtaW51dGUgb2YgdGhlIGhvdXIgcmVwcmVzZW50ZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGV0aW1lPC9jb2RlPjwvZW0+IGluIHRoZSBncmVnb3JpYW4KK2NhbGVuZGFyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGV0aW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbWludXRlIG9mIHRoZSBob3VyPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1nZXQtdGltZS16b25lLW9mZnNldCI+PC9hPjxoMz5nc3RfZGF0ZV90aW1lX2dldF90aW1lX3pvbmVfb2Zmc2V0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdmbG9hdDwvc3Bhbj48L2E+ICAgICAgICAgICAgICBnc3RfZGF0ZV90aW1lX2dldF90aW1lX3pvbmVfb2Zmc2V0ICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHc3REYXRlVGltZSIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiAqZGF0ZXRpbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZXRyaWV2ZXMgdGhlIG9mZnNldCBmcm9tIFVUQyBpbiBob3VycyB0aGF0IHRoZSB0aW1lem9uZSBzcGVjaWZpZWQKK2J5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRldGltZTwvY29kZT48L2VtPiByZXByZXNlbnRzLiBUaW1lem9uZXMgYWhlYWQgKHRvIHRoZSBlYXN0KSBvZiBVVEMgaGF2ZSBwb3NpdGl2ZQordmFsdWVzLCB0aW1lem9uZXMgYmVmb3JlICh0byB0aGUgd2VzdCkgb2YgVVRDIGhhdmUgbmVnYXRpdmUgdmFsdWVzLgorSWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGV0aW1lPC9jb2RlPjwvZW0+IHJlcHJlc2VudHMgVVRDIHRpbWUsIHRoZW4gdGhlIG9mZnNldCBpcyB6ZXJvLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGV0aW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgb2Zmc2V0IGZyb20gVVRDIGluIGhvdXJzPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1nZXQtc2Vjb25kIj48L2E+PGgzPmdzdF9kYXRlX3RpbWVfZ2V0X3NlY29uZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgIGdzdF9kYXRlX3RpbWVfZ2V0X3NlY29uZCAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+ICpkYXRldGltZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JldHJpZXZlcyB0aGUgc2Vjb25kIG9mIHRoZSBtaW51dGUgcmVwcmVzZW50ZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGV0aW1lPC9jb2RlPjwvZW0+IGluIHRoZSBncmVnb3JpYW4KK2NhbGVuZGFyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGV0aW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2Vjb25kIHJlcHJlc2VudGVkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRldGltZTwvY29kZT48L2VtPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1nZXQteWVhciI+PC9hPjxoMz5nc3RfZGF0ZV90aW1lX2dldF95ZWFyICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjR3N0RGF0ZVRpbWUiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gKmRhdGV0aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0dXJucyB0aGUgeWVhciBvZiB0aGlzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHc3REYXRlVGltZSIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGV0aW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgeWVhciBvZiB0aGlzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHc3REYXRlVGltZSIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1uZXciPjwvYT48aDM+Z3N0X2RhdGVfdGltZV9uZXcgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHc3REYXRlVGltZSIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gKiAgICAgICBnc3RfZGF0ZV90aW1lX25ldyAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPiB0em9mZnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiB5ZWFyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG1vbnRoPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGRheTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBob3VyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG1pbnV0ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiBzZWNvbmRzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlcyBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjR3N0RGF0ZVRpbWUiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gdXNpbmcgdGhlIGRhdGUgYW5kIHRpbWVzIGluIHRoZSBncmVnb3JpYW4gY2FsZW5kYXIKK2luIHRoZSBzdXBwbGllZCB0aW1lem9uZS4KKzwvcD4KKzxwPgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnllYXI8L2NvZGU+PC9lbT4gc2hvdWxkIGJlIGZyb20gMSB0byA5OTk5LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bW9udGg8L2NvZGU+PC9lbT4gc2hvdWxkIGJlIGZyb20gMSB0byAxMiwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRheTwvY29kZT48L2VtPiBmcm9tCisxIHRvIDMxLCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aG91cjwvY29kZT48L2VtPiBmcm9tIDAgdG8gMjMsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5taW51dGVzPC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2Vjb25kczwvY29kZT48L2VtPiBmcm9tIDAgdG8gNTkuCis8L3A+Cis8cD4KK05vdGUgdGhhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHpvZmZzZXQ8L2NvZGU+PC9lbT4gaXMgYSBmbG9hdCBhbmQgd2FzIGNob3NlbiBzbyBmb3IgYmVpbmcgYWJsZSB0byBoYW5kbGUKK3NvbWUgZnJhY3Rpb25hbCB0aW1lem9uZXMsIHdoaWxlIGl0IHN0aWxsIGtlZXBzIHRoZSByZWFkYWJpbGl0eSBvZgorcmVwcmVzZXRpbmcgaXQgaW4gaG91cnMgZm9yIG1vc3QgdGltZXpvbmVzLgorPC9wPgorPHA+CitGcmVlLWZ1bmN0aW9uOiBnc3RfZGF0ZV90aW1lX3VucmVmCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHpvZmZzZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+T2Zmc2V0IGZyb20gVVRDIGluIGhvdXJzLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+eWVhcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZ3JlZ29yaWFuIHllYXI8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1vbnRoPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBncmVnb3JpYW4gbW9udGg8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRheTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZGF5IG9mIHRoZSBncmVnb3JpYW4gbW9udGg8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmhvdXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGhvdXIgb2YgdGhlIGRheTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWludXRlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtaW51dGUgb2YgdGhlIGhvdXI8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlY29uZHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNlY29uZCBvZiB0aGUgbWludXRlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5ld2x5IGNyZWF0ZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1uZXctZnJvbS11bml4LWVwb2NoLWxvY2FsLXRpbWUiPjwvYT48aDM+Z3N0X2RhdGVfdGltZV9uZXdfZnJvbV91bml4X2Vwb2NoX2xvY2FsX3RpbWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHc3REYXRlVGltZSIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gKiAgICAgICBnc3RfZGF0ZV90aW1lX25ld19mcm9tX3VuaXhfZXBvY2hfbG9jYWxfdGltZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBzZWNzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlcyBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjR3N0RGF0ZVRpbWUiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gdXNpbmcgdGhlIHRpbWUgc2luY2UgSmFuIDEsIDE5NzAgc3BlY2lmaWVkIGJ5Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VjczwvY29kZT48L2VtPi4gVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHc3REYXRlVGltZSIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiBpcyBpbiB0aGUgbG9jYWwgdGltZXpvbmUuCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdzdF9kYXRlX3RpbWVfdW5yZWYKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWNzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnNlY29uZHMgZnJvbSB0aGUgVW5peCBlcG9jaDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXdseSBjcmVhdGVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHc3REYXRlVGltZSIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1kYXRlLXRpbWUtbmV3LWZyb20tdW5peC1lcG9jaC11dGMiPjwvYT48aDM+Z3N0X2RhdGVfdGltZV9uZXdfZnJvbV91bml4X2Vwb2NoX3V0YyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiAqICAgICAgIGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF91dGMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc2VjczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+IHVzaW5nIHRoZSB0aW1lIHNpbmNlIEphbiAxLCAxOTcwIHNwZWNpZmllZCBieQorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlY3M8L2NvZGU+PC9lbT4uIFRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjR3N0RGF0ZVRpbWUiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gaXMgaW4gdGhlIFVUQyB0aW1lem9uZS4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ3N0X2RhdGVfdGltZV91bnJlZgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlY3M8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2Vjb25kcyBmcm9tIHRoZSBVbml4IGVwb2NoPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5ld2x5IGNyZWF0ZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1uZXctbG9jYWwtdGltZSI+PC9hPjxoMz5nc3RfZGF0ZV90aW1lX25ld19sb2NhbF90aW1lICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjR3N0RGF0ZVRpbWUiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+ICogICAgICAgZ3N0X2RhdGVfdGltZV9uZXdfbG9jYWxfdGltZSAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiB5ZWFyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG1vbnRoPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGRheTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBob3VyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG1pbnV0ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiBzZWNvbmRzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlcyBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjR3N0RGF0ZVRpbWUiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gdXNpbmcgdGhlIGRhdGUgYW5kIHRpbWVzIGluIHRoZSBncmVnb3JpYW4gY2FsZW5kYXIKK2luIHRoZSBsb2NhbCB0aW1lem9uZS4KKzwvcD4KKzxwPgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnllYXI8L2NvZGU+PC9lbT4gc2hvdWxkIGJlIGZyb20gMSB0byA5OTk5LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bW9udGg8L2NvZGU+PC9lbT4gc2hvdWxkIGJlIGZyb20gMSB0byAxMiwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRheTwvY29kZT48L2VtPiBmcm9tCisxIHRvIDMxLCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aG91cjwvY29kZT48L2VtPiBmcm9tIDAgdG8gMjMsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5taW51dGVzPC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2Vjb25kczwvY29kZT48L2VtPiBmcm9tIDAgdG8gNTkuCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdzdF9kYXRlX3RpbWVfdW5yZWYKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT55ZWFyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBncmVnb3JpYW4geWVhcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bW9udGg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGdyZWdvcmlhbiBtb250aDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBkYXkgb2YgdGhlIGdyZWdvcmlhbiBtb250aDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aG91cjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgaG91ciBvZiB0aGUgZGF5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5taW51dGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG1pbnV0ZSBvZiB0aGUgaG91cjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2Vjb25kczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2Vjb25kIG9mIHRoZSBtaW51dGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3bHkgY3JlYXRlZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjR3N0RGF0ZVRpbWUiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMxPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZGF0ZS10aW1lLW5ldy1ub3ctbG9jYWwtdGltZSI+PC9hPjxoMz5nc3RfZGF0ZV90aW1lX25ld19ub3dfbG9jYWxfdGltZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiAqICAgICAgIGdzdF9kYXRlX3RpbWVfbmV3X25vd19sb2NhbF90aW1lICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlcyBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjR3N0RGF0ZVRpbWUiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUuCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdzdF9kYXRlX3RpbWVfdW5yZWYKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXdseSBjcmVhdGVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHc3REYXRlVGltZSIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiB3aGljaCBzaG91bGQKK2JlIGZyZWVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtdW5yZWYiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX3VucmVmICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9kYXRlX3RpbWVfdW5yZWYoKTwvY29kZT48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1kYXRlLXRpbWUtbmV3LW5vdy11dGMiPjwvYT48aDM+Z3N0X2RhdGVfdGltZV9uZXdfbm93X3V0YyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiAqICAgICAgIGdzdF9kYXRlX3RpbWVfbmV3X25vd191dGMgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlcyBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjR3N0RGF0ZVRpbWUiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gdGhhdCByZXByZXNlbnRzIHRoZSBjdXJyZW50IGluc3RhbnQgYXQgVW5pdmVyc2FsCitjb29yZGluYXRlZCB0aW1lLgorPC9wPgorPHA+CitGcmVlLWZ1bmN0aW9uOiBnc3RfZGF0ZV90aW1lX3VucmVmCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3bHkgY3JlYXRlZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjR3N0RGF0ZVRpbWUiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gd2hpY2ggc2hvdWxkCitiZSBmcmVlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLXVucmVmIiB0aXRsZT0iZ3N0X2RhdGVfdGltZV91bnJlZiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZGF0ZV90aW1lX3VucmVmKCk8L2NvZGU+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMxPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZGF0ZS10aW1lLXJlZiI+PC9hPjxoMz5nc3RfZGF0ZV90aW1lX3JlZiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiAqICAgICAgIGdzdF9kYXRlX3RpbWVfcmVmICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+ICpkYXRldGltZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0F0b21pY2FsbHkgaW5jcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRldGltZTwvY29kZT48L2VtPiBieSBvbmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0ZXRpbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjR3N0RGF0ZVRpbWUiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSByZWZlcmVuY2UgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGV0aW1lPC9jb2RlPjwvZW0+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS11bnJlZiI+PC9hPjxoMz5nc3RfZGF0ZV90aW1lX3VucmVmICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9kYXRlX3RpbWVfdW5yZWYgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+ICpkYXRldGltZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0F0b21pY2FsbHkgZGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRldGltZTwvY29kZT48L2VtPiBieSBvbmUuICBXaGVuIHRoZQorcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgemVybywgdGhlIHN0cnVjdHVyZSBpcyBmcmVlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0ZXRpbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjR3N0RGF0ZVRpbWUiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDA3MWYzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbApAQCAtMCwwICsxLDIyMDAgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5Hc3RFdmVudDwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCIgdGl0bGU9IkdzdEdFcnJvciI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1Hc3RGaWx0ZXIuaHRtbCIgdGl0bGU9IkdzdEZpbHRlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItR3N0RmlsdGVyLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdEV2ZW50LnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdEV2ZW50LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RFdmVudCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1Hc3RFdmVudC50b3Bfb2ZfcGFnZSI+PC9hPkdzdEV2ZW50PC9zcGFuPjwvaDI+Cis8cD5Hc3RFdmVudCDigJQgU3RydWN0dXJlIGRlc2NyaWJpbmcgZXZlbnRzIHRoYXQgYXJlIHBhc3NlZCB1cCBhbmQgZG93bgorICAgICAgICAgICAgICAgICAgICBhIHBpcGVsaW5lPC9wPgorPC90ZD4KKzx0ZCB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgorPC90cj48L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEV2ZW50LnN5bm9wc2lzIj48L2E+PGgyPlN5bm9wc2lzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7CisKK3N0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij5Hc3RFdmVudDwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudFR5cGVGbGFncyIgdGl0bGU9ImVudW0gR3N0RXZlbnRUeXBlRmxhZ3MiPkdzdEV2ZW50VHlwZUZsYWdzPC9hPjsKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1UWVBFLUJPVEg6Q0FQUyIgdGl0bGU9IkdTVF9FVkVOVF9UWVBFX0JPVEgiPkdTVF9FVkVOVF9UWVBFX0JPVEg8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtTUFLRS1UWVBFOkNBUFMiIHRpdGxlPSJHU1RfRVZFTlRfTUFLRV9UWVBFKCkiPkdTVF9FVkVOVF9NQUtFX1RZUEU8L2E+ICAgICAgICAgICAgICAgICAobnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpCitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudFR5cGUiIHRpdGxlPSJlbnVtIEdzdEV2ZW50VHlwZSI+R3N0RXZlbnRUeXBlPC9hPjsKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1UUkFDRS1OQU1FOkNBUFMiIHRpdGxlPSJHU1RfRVZFTlRfVFJBQ0VfTkFNRSI+R1NUX0VWRU5UX1RSQUNFX05BTUU8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtVFlQRTpDQVBTIiB0aXRsZT0iR1NUX0VWRU5UX1RZUEUoKSI+R1NUX0VWRU5UX1RZUEU8L2E+ICAgICAgICAgICAgICAgICAgICAgIChldmVudCkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1UWVBFLU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9FVkVOVF9UWVBFX05BTUUoKSI+R1NUX0VWRU5UX1RZUEVfTkFNRTwvYT4gICAgICAgICAgICAgICAgIChldmVudCkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1USU1FU1RBTVA6Q0FQUyIgdGl0bGU9IkdTVF9FVkVOVF9USU1FU1RBTVAoKSI+R1NUX0VWRU5UX1RJTUVTVEFNUDwvYT4gICAgICAgICAgICAgICAgIChldmVudCkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1TRVFOVU06Q0FQUyIgdGl0bGU9IkdTVF9FVkVOVF9TRVFOVU0oKSI+R1NUX0VWRU5UX1NFUU5VTTwvYT4gICAgICAgICAgICAgICAgICAgIChldmVudCkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1JUy1VUFNUUkVBTTpDQVBTIiB0aXRsZT0iR1NUX0VWRU5UX0lTX1VQU1RSRUFNKCkiPkdTVF9FVkVOVF9JU19VUFNUUkVBTTwvYT4gICAgICAgICAgICAgICAoZXYpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtSVMtRE9XTlNUUkVBTTpDQVBTIiB0aXRsZT0iR1NUX0VWRU5UX0lTX0RPV05TVFJFQU0oKSI+R1NUX0VWRU5UX0lTX0RPV05TVFJFQU08L2E+ICAgICAgICAgICAgIChldikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1JUy1TRVJJQUxJWkVEOkNBUFMiIHRpdGxlPSJHU1RfRVZFTlRfSVNfU0VSSUFMSVpFRCgpIj5HU1RfRVZFTlRfSVNfU0VSSUFMSVpFRDwvYT4gICAgICAgICAgICAgKGV2KQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUlTLVNUSUNLWTpDQVBTIiB0aXRsZT0iR1NUX0VWRU5UX0lTX1NUSUNLWSgpIj5HU1RfRVZFTlRfSVNfU1RJQ0tZPC9hPiAgICAgICAgICAgICAgICAgKGV2KQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50VHlwZUZsYWdzIiB0aXRsZT0iZW51bSBHc3RFdmVudFR5cGVGbGFncyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudFR5cGVGbGFnczwvc3Bhbj48L2E+ICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC10eXBlLWdldC1mbGFncyIgdGl0bGU9ImdzdF9ldmVudF90eXBlX2dldF9mbGFncyAoKSI+Z3N0X2V2ZW50X3R5cGVfZ2V0X2ZsYWdzPC9hPiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50VHlwZSIgdGl0bGU9ImVudW0gR3N0RXZlbnRUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnRUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPik7Citjb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtdHlwZS1nZXQtbmFtZSIgdGl0bGU9ImdzdF9ldmVudF90eXBlX2dldF9uYW1lICgpIj5nc3RfZXZlbnRfdHlwZV9nZXRfbmFtZTwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnRUeXBlIiB0aXRsZT0iZW51bSBHc3RFdmVudFR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudFR5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdRdWFyazwvc3Bhbj48L2E+ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXR5cGUtdG8tcXVhcmsiIHRpdGxlPSJnc3RfZXZlbnRfdHlwZV90b19xdWFyayAoKSI+Z3N0X2V2ZW50X3R5cGVfdG9fcXVhcms8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50VHlwZSIgdGl0bGU9ImVudW0gR3N0RXZlbnRUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnRUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcmVmIiB0aXRsZT0iZ3N0X2V2ZW50X3JlZiAoKSI+Z3N0X2V2ZW50X3JlZjwvYT4gICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXVucmVmIiB0aXRsZT0iZ3N0X2V2ZW50X3VucmVmICgpIj5nc3RfZXZlbnRfdW5yZWY8L2E+ICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPik7CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcmVwbGFjZSIgdGl0bGU9ImdzdF9ldmVudF9yZXBsYWNlKCkiPmdzdF9ldmVudF9yZXBsYWNlPC9hPiAgICAgICAgICAgICAgICAgICAob2xkX2V2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2V2ZW50KQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKiAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LWNvcHkiIHRpdGxlPSJnc3RfZXZlbnRfY29weSAoKSI+Z3N0X2V2ZW50X2NvcHk8L2E+ICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4pOworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXN0ZWFsIiB0aXRsZT0iZ3N0X2V2ZW50X3N0ZWFsKCkiPmdzdF9ldmVudF9zdGVhbDwvYT4gICAgICAgICAgICAgICAgICAgICAob2xkX2V2ZW50KQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXRha2UiIHRpdGxlPSJnc3RfZXZlbnRfdGFrZSgpIj5nc3RfZXZlbnRfdGFrZTwvYT4gICAgICAgICAgICAgICAgICAgICAgKG9sZF9ldmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19ldmVudCkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1pcy13cml0YWJsZSIgdGl0bGU9ImdzdF9ldmVudF9pc193cml0YWJsZSgpIj5nc3RfZXZlbnRfaXNfd3JpdGFibGU8L2E+ICAgICAgICAgICAgICAgKGV2KQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW1ha2Utd3JpdGFibGUiIHRpdGxlPSJnc3RfZXZlbnRfbWFrZV93cml0YWJsZSgpIj5nc3RfZXZlbnRfbWFrZV93cml0YWJsZTwvYT4gICAgICAgICAgICAgKGV2KQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICogICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXdyaXRhYmxlLXN0cnVjdHVyZSIgdGl0bGU9ImdzdF9ldmVudF93cml0YWJsZV9zdHJ1Y3R1cmUgKCkiPmdzdF9ldmVudF93cml0YWJsZV9zdHJ1Y3R1cmU8L2E+ICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICogICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctY3VzdG9tIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19jdXN0b20gKCkiPmdzdF9ldmVudF9uZXdfY3VzdG9tPC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudFR5cGUiIHRpdGxlPSJlbnVtIEdzdEV2ZW50VHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50VHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPik7Citjb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LWdldC1zdHJ1Y3R1cmUiIHRpdGxlPSJnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoKSI+Z3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmU8L2E+ICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtaGFzLW5hbWUiIHRpdGxlPSJnc3RfZXZlbnRfaGFzX25hbWUgKCkiPmdzdF9ldmVudF9oYXNfbmFtZTwvYT4gICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtZ2V0LXNlcW51bSIgdGl0bGU9ImdzdF9ldmVudF9nZXRfc2VxbnVtICgpIj5nc3RfZXZlbnRfZ2V0X3NlcW51bTwvYT4gICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtc2V0LXNlcW51bSIgdGl0bGU9ImdzdF9ldmVudF9zZXRfc2VxbnVtICgpIj5nc3RfZXZlbnRfc2V0X3NlcW51bTwvYT4gICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiBzZXFudW08L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKiAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1mbHVzaC1zdGFydCIgdGl0bGU9ImdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQgKCkiPmdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQ8L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LWZsdXNoLXN0b3AiIHRpdGxlPSJnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AgKCkiPmdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcDwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gcmVzZXRfdGltZTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2UtZmx1c2gtc3RvcCIgdGl0bGU9ImdzdF9ldmVudF9wYXJzZV9mbHVzaF9zdG9wICgpIj5nc3RfZXZlbnRfcGFyc2VfZmx1c2hfc3RvcDwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICpyZXNldF90aW1lPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICogICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctZW9zIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19lb3MgKCkiPmdzdF9ldmVudF9uZXdfZW9zPC9hPiAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXNlZ21lbnQiIHRpdGxlPSJnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCkiPmdzdF9ldmVudF9uZXdfc2VnbWVudDwvYT4gICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiAqc2VnbWVudDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2Utc2VnbWVudCIgdGl0bGU9ImdzdF9ldmVudF9wYXJzZV9zZWdtZW50ICgpIj5nc3RfZXZlbnRfcGFyc2Vfc2VnbWVudDwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNHc3RTZWdtZW50IiB0aXRsZT0ic3RydWN0IEdzdFNlZ21lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT4gKipzZWdtZW50PC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1jb3B5LXNlZ21lbnQiIHRpdGxlPSJnc3RfZXZlbnRfY29weV9zZWdtZW50ICgpIj5nc3RfZXZlbnRfY29weV9zZWdtZW50PC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNHc3RTZWdtZW50IiB0aXRsZT0ic3RydWN0IEdzdFNlZ21lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT4gKnNlZ21lbnQ8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKiAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy10YWciIHRpdGxlPSJnc3RfZXZlbnRfbmV3X3RhZyAoKSI+Z3N0X2V2ZW50X25ld190YWc8L2E+ICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKnRhZ2xpc3Q8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLXRhZyIgdGl0bGU9ImdzdF9ldmVudF9wYXJzZV90YWcgKCkiPmdzdF9ldmVudF9wYXJzZV90YWc8L2E+ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICoqdGFnbGlzdDwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LWJ1ZmZlci1zaXplIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19idWZmZXJfc2l6ZSAoKSI+Z3N0X2V2ZW50X25ld19idWZmZXJfc2l6ZTwvYT4gICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gbWluc2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gbWF4c2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGFzeW5jPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1idWZmZXItc2l6ZSIgdGl0bGU9ImdzdF9ldmVudF9wYXJzZV9idWZmZXJfc2l6ZSAoKSI+Z3N0X2V2ZW50X3BhcnNlX2J1ZmZlcl9zaXplPC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+ICpmb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICptaW5zaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqbWF4c2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICphc3luYzwvY29kZT48L2VtPik7CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RRT1NUeXBlIiB0aXRsZT0iZW51bSBHc3RRT1NUeXBlIj5Hc3RRT1NUeXBlPC9hPjsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICogICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctcW9zIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19xb3MgKCkiPmdzdF9ldmVudF9uZXdfcW9zPC9hPiAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RRT1NUeXBlIiB0aXRsZT0iZW51bSBHc3RRT1NUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UU9TVHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gcHJvcG9ydGlvbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWVEaWZmIiB0aXRsZT0iR3N0Q2xvY2tUaW1lRGlmZiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZURpZmY8L3NwYW4+PC9hPiBkaWZmPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRpbWVzdGFtcDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2UtcW9zIiB0aXRsZT0iZ3N0X2V2ZW50X3BhcnNlX3FvcyAoKSI+Z3N0X2V2ZW50X3BhcnNlX3FvczwvYT4gICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdFFPU1R5cGUiIHRpdGxlPSJlbnVtIEdzdFFPU1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRT1NUeXBlPC9zcGFuPjwvYT4gKnR5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gKnByb3BvcnRpb248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lRGlmZiIgdGl0bGU9IkdzdENsb2NrVGltZURpZmYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWVEaWZmPC9zcGFuPjwvYT4gKmRpZmY8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gKnRpbWVzdGFtcDwvY29kZT48L2VtPik7CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RTZWVrVHlwZSIgdGl0bGU9ImVudW0gR3N0U2Vla1R5cGUiPkdzdFNlZWtUeXBlPC9hPjsKK2VudW0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdFNlZWtGbGFncyIgdGl0bGU9ImVudW0gR3N0U2Vla0ZsYWdzIj5Hc3RTZWVrRmxhZ3M8L2E+OworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKiAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1zZWVrIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19zZWVrICgpIj5nc3RfZXZlbnRfbmV3X3NlZWs8L2E+ICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiByYXRlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdFNlZWtGbGFncyIgdGl0bGU9ImVudW0gR3N0U2Vla0ZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2Vla0ZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdFNlZWtUeXBlIiB0aXRsZT0iZW51bSBHc3RTZWVrVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZWtUeXBlPC9zcGFuPjwvYT4gc3RhcnRfdHlwZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc3RhcnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdFNlZWtUeXBlIiB0aXRsZT0iZW51bSBHc3RTZWVrVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZWtUeXBlPC9zcGFuPjwvYT4gc3RvcF90eXBlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBzdG9wPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1zZWVrIiB0aXRsZT0iZ3N0X2V2ZW50X3BhcnNlX3NlZWsgKCkiPmdzdF9ldmVudF9wYXJzZV9zZWVrPC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICpyYXRlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiAqZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RTZWVrRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFNlZWtGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZWtGbGFnczwvc3Bhbj48L2E+ICpmbGFnczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0U2Vla1R5cGUiIHRpdGxlPSJlbnVtIEdzdFNlZWtUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2Vla1R5cGU8L3NwYW4+PC9hPiAqc3RhcnRfdHlwZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKnN0YXJ0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RTZWVrVHlwZSIgdGl0bGU9ImVudW0gR3N0U2Vla1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWVrVHlwZTwvc3Bhbj48L2E+ICpzdG9wX3R5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpzdG9wPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICogICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctbmF2aWdhdGlvbiIgdGl0bGU9ImdzdF9ldmVudF9uZXdfbmF2aWdhdGlvbiAoKSI+Z3N0X2V2ZW50X25ld19uYXZpZ2F0aW9uPC9hPiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LWxhdGVuY3kiIHRpdGxlPSJnc3RfZXZlbnRfbmV3X2xhdGVuY3kgKCkiPmdzdF9ldmVudF9uZXdfbGF0ZW5jeTwvYT4gICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IGxhdGVuY3k8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLWxhdGVuY3kiIHRpdGxlPSJnc3RfZXZlbnRfcGFyc2VfbGF0ZW5jeSAoKSI+Z3N0X2V2ZW50X3BhcnNlX2xhdGVuY3k8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gKmxhdGVuY3k8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKiAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1zdGVwIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19zdGVwICgpIj5nc3RfZXZlbnRfbmV3X3N0ZXA8L2E+ICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IGFtb3VudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiByYXRlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gZmx1c2g8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBpbnRlcm1lZGlhdGU8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLXN0ZXAiIHRpdGxlPSJnc3RfZXZlbnRfcGFyc2Vfc3RlcCAoKSI+Z3N0X2V2ZW50X3BhcnNlX3N0ZXA8L2E+ICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+ICpmb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gKmFtb3VudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiAqcmF0ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICpmbHVzaDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICppbnRlcm1lZGlhdGU8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKiAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1zaW5rLW1lc3NhZ2UiIHRpdGxlPSJnc3RfZXZlbnRfbmV3X3NpbmtfbWVzc2FnZSAoKSI+Z3N0X2V2ZW50X25ld19zaW5rX21lc3NhZ2U8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptc2c8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLXNpbmstbWVzc2FnZSIgdGl0bGU9ImdzdF9ldmVudF9wYXJzZV9zaW5rX21lc3NhZ2UgKCkiPmdzdF9ldmVudF9wYXJzZV9zaW5rX21lc3NhZ2U8L2E+ICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqKm1zZzwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXJlY29uZmlndXJlIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19yZWNvbmZpZ3VyZSAoKSI+Z3N0X2V2ZW50X25ld19yZWNvbmZpZ3VyZTwvYT4gICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICogICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctY2FwcyIgdGl0bGU9ImdzdF9ldmVudF9uZXdfY2FwcyAoKSI+Z3N0X2V2ZW50X25ld19jYXBzPC9hPiAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1jYXBzIiB0aXRsZT0iZ3N0X2V2ZW50X3BhcnNlX2NhcHMgKCkiPmdzdF9ldmVudF9wYXJzZV9jYXBzPC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqKmNhcHM8L2NvZGU+PC9lbT4pOworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RFdmVudC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK1RoZSBldmVudCBjbGFzcyBwcm92aWRlcyBmYWN0b3J5IG1ldGhvZHMgdG8gY29uc3RydWN0IGV2ZW50cyBmb3Igc2VuZGluZworYW5kIGZ1bmN0aW9ucyB0byBxdWVyeSAocGFyc2UpIHJlY2VpdmVkIGV2ZW50cy4KKzwvcD4KKzxwPgorRXZlbnRzIGFyZSB1c3VhbGx5IGNyZWF0ZWQgd2l0aCBnc3RfZXZlbnRfbmV3XyooKSB3aGljaCB0YWtlcyBldmVudC10eXBlCitzcGVjaWZpYyBwYXJhbWV0ZXJzIGFzIGFyZ3VtZW50cy4KK1RvIHNlbmQgYW4gZXZlbnQgYXBwbGljYXRpb24gd2lsbCB1c3VhbGx5IHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNlbmQtZXZlbnQiIHRpdGxlPSJnc3RfZWxlbWVudF9zZW5kX2V2ZW50ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3NlbmRfZXZlbnQoKTwvY29kZT48L2E+IGFuZAorZWxlbWVudHMgd2lsbCB1c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2VuZC1ldmVudCIgdGl0bGU9ImdzdF9wYWRfc2VuZF9ldmVudCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3NlbmRfZXZlbnQoKTwvY29kZT48L2E+IG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1c2gtZXZlbnQiIHRpdGxlPSJnc3RfcGFkX3B1c2hfZXZlbnQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9wdXNoX2V2ZW50KCk8L2NvZGU+PC9hPi4KK1RoZSBldmVudCBzaG91bGQgYmUgdW5yZWZmZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXVucmVmIiB0aXRsZT0iZ3N0X2V2ZW50X3VucmVmICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9ldmVudF91bnJlZigpPC9jb2RlPjwvYT4gaWYgaXQgaGFzIG5vdCBiZWVuIHNlbnQuCis8L3A+Cis8cD4KK0V2ZW50cyB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZCBjYW4gYmUgcGFyc2VkIHdpdGggdGhlaXIgcmVzcGVjdGl2ZSAKK2dzdF9ldmVudF9wYXJzZV8qKCkgZnVuY3Rpb25zLiBJdCBpcyB2YWxpZCB0byBwYXNzIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGZvciB1bndhbnRlZCBkZXRhaWxzLgorPC9wPgorPHA+CitFdmVudHMgYXJlIHBhc3NlZCBiZXR3ZWVuIGVsZW1lbnRzIGluIHBhcmFsbGVsIHRvIHRoZSBkYXRhIHN0cmVhbS4gU29tZSBldmVudHMKK2FyZSBzZXJpYWxpemVkIHdpdGggYnVmZmVycywgb3RoZXJzIGFyZSBub3QuIFNvbWUgZXZlbnRzIG9ubHkgdHJhdmVsIGRvd25zdHJlYW0sCitvdGhlcnMgb25seSB1cHN0cmVhbS4gU29tZSBldmVudHMgY2FuIHRyYXZlbCBib3RoIHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtLiAKKzwvcD4KKzxwPgorVGhlIGV2ZW50cyBhcmUgdXNlZCB0byBzaWduYWwgc3BlY2lhbCBjb25kaXRpb25zIGluIHRoZSBkYXRhc3RyZWFtIHN1Y2ggYXMKK0VPUyAoZW5kIG9mIHN0cmVhbSkgb3IgdGhlIHN0YXJ0IG9mIGEgbmV3IHN0cmVhbS1zZWdtZW50LgorRXZlbnRzIGFyZSBhbHNvIHVzZWQgdG8gZmx1c2ggdGhlIHBpcGVsaW5lIG9mIGFueSBwZW5kaW5nIGRhdGEuCis8L3A+Cis8cD4KK01vc3Qgb2YgdGhlIGV2ZW50IEFQSSBpcyB1c2VkIGluc2lkZSBwbHVnaW5zLiBBcHBsaWNhdGlvbnMgdXN1YWxseSBvbmx5IAorY29uc3RydWN0IGFuZCB1c2Ugc2VlayBldmVudHMuIAorVG8gZG8gdGhhdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1zZWVrIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19zZWVrICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9ldmVudF9uZXdfc2VlaygpPC9jb2RlPjwvYT4gaXMgdXNlZCB0byBjcmVhdGUgYSBzZWVrIGV2ZW50LiBJdCB0YWtlcwordGhlIG5lZWRlZCBwYXJhbWV0ZXJzIHRvIHNwZWNpZnkgc2Vla2luZyB0aW1lIGFuZCBtb2RlLgorPC9wPgorPGRpdiBjbGFzcz0iZXhhbXBsZSI+Cis8YSBuYW1lPSJpZDU1MDUwNiI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZcKgOC7CoHBlcmZvcm1pbmcgYSBzZWVrIG9uIGEgcGlwZWxpbmU8L2I+PC9wPgorPGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgorICBHc3RFdmVudCAqZXZlbnQ7CisgIGdib29sZWFuIHJlc3VsdDsKKyAgLi4uCisgIC8vIGNvbnN0cnVjdCBhIHNlZWsgZXZlbnQgdG8gcGxheSB0aGUgbWVkaWEgZnJvbSBzZWNvbmQgMiB0byA1LCBmbHVzaAorICAvLyB0aGUgcGlwZWxpbmUgdG8gZGVjcmVhc2UgbGF0ZW5jeS4KKyAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZWsgKDEuMCwgCisgICAgIEdTVF9GT1JNQVRfVElNRSwgCisgICAgIEdTVF9TRUVLX0ZMQUdfRkxVU0gsCisgICAgIEdTVF9TRUVLX1RZUEVfU0VULCAyICogR1NUX1NFQ09ORCwKKyAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIDUgKiBHU1RfU0VDT05EKTsKKyAgLi4uCisgIHJlc3VsdCA9IGdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKHBpcGVsaW5lLCBldmVudCk7CisgIGlmICghcmVzdWx0KQorICAgIGdfd2FybmluZyAoInNlZWsgZmFpbGVkIik7CisgIC4uLgorICA8L3ByZT48L2Rpdj4KKzwvZGl2PgorPHA+PGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj4KKzwvcD4KKzxwPgorTGFzdCByZXZpZXdlZCBvbiAyMDA2LTA5LTYgKDAuMTAuMTApCis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RFdmVudC5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RXZlbnQiPjwvYT48aDM+c3RydWN0IEdzdEV2ZW50PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0RXZlbnQgeworICBHc3RNaW5pT2JqZWN0IG1pbmlfb2JqZWN0OworCisgIEdzdEV2ZW50VHlwZSAgdHlwZTsKKyAgZ3VpbnQ2NCAgICAgICB0aW1lc3RhbXA7CisgIGd1aW50MzIgICAgICAgc2VxbnVtOworfTsKKzwvcHJlPgorPHA+CitBIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEV2ZW50Lm1pbmktb2JqZWN0Ij48L2E+bWluaV9vYmplY3Q8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwYXJlbnQgc3RydWN0dXJlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudFR5cGUiIHRpdGxlPSJlbnVtIEdzdEV2ZW50VHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50VHlwZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RFdmVudC50eXBlIj48L2E+dHlwZTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudFR5cGUiIHRpdGxlPSJlbnVtIEdzdEV2ZW50VHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50VHlwZTwvc3Bhbj48L2E+IG9mIHRoZSBldmVudDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RXZlbnQudGltZXN0YW1wIj48L2E+dGltZXN0YW1wPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdGltZXN0YW1wIG9mIHRoZSBldmVudDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RXZlbnQuc2VxbnVtIj48L2E+c2VxbnVtPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBldmVudDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEV2ZW50VHlwZUZsYWdzIj48L2E+PGgzPmVudW0gR3N0RXZlbnRUeXBlRmxhZ3M8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9FVkVOVF9UWVBFX1VQU1RSRUFNICAgICAgID0gMSAmbHQ7Jmx0OyAwLAorICBHU1RfRVZFTlRfVFlQRV9ET1dOU1RSRUFNICAgICA9IDEgJmx0OyZsdDsgMSwKKyAgR1NUX0VWRU5UX1RZUEVfU0VSSUFMSVpFRCAgICAgPSAxICZsdDsmbHQ7IDIsCisgIEdTVF9FVkVOVF9UWVBFX1NUSUNLWSAgICAgICAgID0gMSAmbHQ7Jmx0OyAzCit9IEdzdEV2ZW50VHlwZUZsYWdzOworPC9wcmU+Cis8cD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudFR5cGVGbGFncyIgdGl0bGU9ImVudW0gR3N0RXZlbnRUeXBlRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudFR5cGVGbGFnczwvc3Bhbj48L2E+IGluZGljYXRlIHRoZSBhc3BlY3RzIG9mIHRoZSBkaWZmZXJlbnQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50VHlwZSIgdGl0bGU9ImVudW0gR3N0RXZlbnRUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnRUeXBlPC9zcGFuPjwvYT4KK3ZhbHVlcy4gWW91IGNhbiBnZXQgdGhlIHR5cGUgZmxhZ3Mgb2YgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnRUeXBlIiB0aXRsZT0iZW51bSBHc3RFdmVudFR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudFR5cGU8L3NwYW4+PC9hPiB3aXRoIHRoZQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC10eXBlLWdldC1mbGFncyIgdGl0bGU9ImdzdF9ldmVudF90eXBlX2dldF9mbGFncyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZXZlbnRfdHlwZV9nZXRfZmxhZ3MoKTwvY29kZT48L2E+IGZ1bmN0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtRVZFTlQtVFlQRS1VUFNUUkVBTTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRVZFTlRfVFlQRV9VUFNUUkVBTTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+U2V0IGlmIHRoZSBldmVudCBjYW4gdHJhdmVsIHVwc3RyZWFtLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUVWRU5ULVRZUEUtRE9XTlNUUkVBTTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRVZFTlRfVFlQRV9ET1dOU1RSRUFNPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5TZXQgaWYgdGhlIGV2ZW50IGNhbiB0cmF2ZWwgZG93bnN0cmVhbS4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1UWVBFLVNFUklBTElaRUQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0VWRU5UX1RZUEVfU0VSSUFMSVpFRDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+U2V0IGlmIHRoZSBldmVudCBzaG91bGQgYmUgc2VyaWFsaXplZCB3aXRoIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG93LgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUVWRU5ULVRZUEUtU1RJQ0tZOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9FVkVOVF9UWVBFX1NUSUNLWTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+U2V0IGlmIHRoZSBldmVudCBpcyBzdGlja3kgb24gdGhlIHBhZHMuCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtRVZFTlQtVFlQRS1CT1RIOkNBUFMiPjwvYT48aDM+R1NUX0VWRU5UX1RZUEVfQk9USDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfRVZFTlRfVFlQRV9CT1RIPC9wcmU+Cis8cD4KK1RoZSBzYW1lIHRoaW5nIGFzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtVFlQRS1VUFNUUkVBTTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0VWRU5UX1RZUEVfVVBTVFJFQU08L3NwYW4+PC9hPiB8IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtVFlQRS1ET1dOU1RSRUFNOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRVZFTlRfVFlQRV9ET1dOU1RSRUFNPC9zcGFuPjwvYT4uCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1FVkVOVC1NQUtFLVRZUEU6Q0FQUyI+PC9hPjxoMz5HU1RfRVZFTlRfTUFLRV9UWVBFKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX0VWRU5UX01BS0VfVFlQRShudW0saWR4LGZsYWdzKTwvcHJlPgorPHA+Cit3aGVuIG1ha2luZyBjdXN0b20gZXZlbnQgdHlwZXMsIHVzZSB0aGlzIG1hY3JvIHdpdGggdGhlIG51bSBhbmQKK3RoZSBnaXZlbiBmbGFncworPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm51bTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZXZlbnQgbnVtYmVyIHRvIGNyZWF0ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWR4PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBpbmRleCBpbiB0aGUgc3RpY2t5IGFycmF5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZXZlbnQgZmxhZ3M8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RFdmVudFR5cGUiPjwvYT48aDM+ZW51bSBHc3RFdmVudFR5cGU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9FVkVOVF9VTktOT1dOICAgICAgICAgICAgICAgPSBHU1RfRVZFTlRfTUFLRV9UWVBFICgwLCAwLCAwKSwKKyAgLyogYmlkaXJlY3Rpb25hbCBldmVudHMgKi8KKyAgR1NUX0VWRU5UX0ZMVVNIX1NUQVJUICAgICAgICAgICA9IEdTVF9FVkVOVF9NQUtFX1RZUEUgKDEsIDAsIEZMQUcoQk9USCkpLAorICBHU1RfRVZFTlRfRkxVU0hfU1RPUCAgICAgICAgICAgID0gR1NUX0VWRU5UX01BS0VfVFlQRSAoMiwgMCwgRkxBRyhCT1RIKSB8IEZMQUcoU0VSSUFMSVpFRCkpLAorICAvKiBkb3duc3RyZWFtIHNlcmlhbGl6ZWQgZXZlbnRzICovCisgIEdTVF9FVkVOVF9DQVBTICAgICAgICAgICAgICAgICAgPSBHU1RfRVZFTlRfTUFLRV9UWVBFICg1LCAxLCBGTEFHKERPV05TVFJFQU0pIHwgRkxBRyhTRVJJQUxJWkVEKSB8IEZMQUcoU1RJQ0tZKSksCisgIEdTVF9FVkVOVF9TRUdNRU5UICAgICAgICAgICAgICAgPSBHU1RfRVZFTlRfTUFLRV9UWVBFICg2LCAyLCBGTEFHKERPV05TVFJFQU0pIHwgRkxBRyhTRVJJQUxJWkVEKSB8IEZMQUcoU1RJQ0tZKSksCisgIEdTVF9FVkVOVF9UQUcgICAgICAgICAgICAgICAgICAgPSBHU1RfRVZFTlRfTUFLRV9UWVBFICg3LCAzLCBGTEFHKERPV05TVFJFQU0pIHwgRkxBRyhTRVJJQUxJWkVEKSB8IEZMQUcoU1RJQ0tZKSksCisgIEdTVF9FVkVOVF9CVUZGRVJTSVpFICAgICAgICAgICAgPSBHU1RfRVZFTlRfTUFLRV9UWVBFICg4LCA0LCBGTEFHKERPV05TVFJFQU0pIHwgRkxBRyhTRVJJQUxJWkVEKSB8IEZMQUcoU1RJQ0tZKSksCisgIEdTVF9FVkVOVF9TSU5LX01FU1NBR0UgICAgICAgICAgPSBHU1RfRVZFTlRfTUFLRV9UWVBFICg5LCA1LCBGTEFHKERPV05TVFJFQU0pIHwgRkxBRyhTRVJJQUxJWkVEKSB8IEZMQUcoU1RJQ0tZKSksCisgIEdTVF9FVkVOVF9FT1MgICAgICAgICAgICAgICAgICAgPSBHU1RfRVZFTlRfTUFLRV9UWVBFICgxMCwgNiwgRkxBRyhET1dOU1RSRUFNKSB8IEZMQUcoU0VSSUFMSVpFRCkgfCBGTEFHKFNUSUNLWSkpLAorCisgIC8qIHVwc3RyZWFtIGV2ZW50cyAqLworICBHU1RfRVZFTlRfUU9TICAgICAgICAgICAgICAgICAgID0gR1NUX0VWRU5UX01BS0VfVFlQRSAoMTUsIDAsIEZMQUcoVVBTVFJFQU0pKSwKKyAgR1NUX0VWRU5UX1NFRUsgICAgICAgICAgICAgICAgICA9IEdTVF9FVkVOVF9NQUtFX1RZUEUgKDE2LCAwLCBGTEFHKFVQU1RSRUFNKSksCisgIEdTVF9FVkVOVF9OQVZJR0FUSU9OICAgICAgICAgICAgPSBHU1RfRVZFTlRfTUFLRV9UWVBFICgxNywgMCwgRkxBRyhVUFNUUkVBTSkpLAorICBHU1RfRVZFTlRfTEFURU5DWSAgICAgICAgICAgICAgID0gR1NUX0VWRU5UX01BS0VfVFlQRSAoMTgsIDAsIEZMQUcoVVBTVFJFQU0pKSwKKyAgR1NUX0VWRU5UX1NURVAgICAgICAgICAgICAgICAgICA9IEdTVF9FVkVOVF9NQUtFX1RZUEUgKDE5LCAwLCBGTEFHKFVQU1RSRUFNKSksCisgIEdTVF9FVkVOVF9SRUNPTkZJR1VSRSAgICAgICAgICAgPSBHU1RfRVZFTlRfTUFLRV9UWVBFICgyMCwgMCwgRkxBRyhVUFNUUkVBTSkpLAorCisgIC8qIGN1c3RvbSBldmVudHMgc3RhcnQgaGVyZSAqLworICBHU1RfRVZFTlRfQ1VTVE9NX1VQU1RSRUFNICAgICAgID0gR1NUX0VWRU5UX01BS0VfVFlQRSAoMzIsIDAsIEZMQUcoVVBTVFJFQU0pKSwKKyAgR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNICAgICA9IEdTVF9FVkVOVF9NQUtFX1RZUEUgKDMyLCAwLCBGTEFHKERPV05TVFJFQU0pIHwgRkxBRyhTRVJJQUxJWkVEKSksCisgIEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTV9PT0IgPSBHU1RfRVZFTlRfTUFLRV9UWVBFICgzMiwgMCwgRkxBRyhET1dOU1RSRUFNKSksCisgIEdTVF9FVkVOVF9DVVNUT01fQk9USCAgICAgICAgICAgPSBHU1RfRVZFTlRfTUFLRV9UWVBFICgzMiwgMCwgRkxBRyhCT1RIKSB8IEZMQUcoU0VSSUFMSVpFRCkpLAorICBHU1RfRVZFTlRfQ1VTVE9NX0JPVEhfT09CICAgICAgID0gR1NUX0VWRU5UX01BS0VfVFlQRSAoMzIsIDAsIEZMQUcoQk9USCkpCit9IEdzdEV2ZW50VHlwZTsKKzwvcHJlPgorPHA+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnRUeXBlIiB0aXRsZT0iZW51bSBHc3RFdmVudFR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudFR5cGU8L3NwYW4+PC9hPiBsaXN0cyB0aGUgc3RhbmRhcmQgZXZlbnQgdHlwZXMgdGhhdCBjYW4gYmUgc2VudCBpbiBhIHBpcGVsaW5lLgorPC9wPgorPHA+CitUaGUgY3VzdG9tIGV2ZW50IHR5cGVzIGNhbiBiZSB1c2VkIGZvciBwcml2YXRlIG1lc3NhZ2VzIGJldHdlZW4gZWxlbWVudHMKK3RoYXQgY2FuJ3QgYmUgZXhwcmVzc2VkIHVzaW5nIG5vcm1hbAorR1N0cmVhbWVyIGJ1ZmZlciBwYXNzaW5nIHNlbWFudGljcy4gQ3VzdG9tIGV2ZW50cyBjYXJyeSBhbiBhcmJpdHJhcnkKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+LgorU3BlY2lmaWMgY3VzdG9tIGV2ZW50cyBhcmUgZGlzdGluZ3Vpc2hlZCBieSB0aGUgbmFtZSBvZiB0aGUgc3RydWN0dXJlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtRVZFTlQtVU5LTk9XTjpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRVZFTlRfVU5LTk9XTjwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dW5rbm93biBldmVudC4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1GTFVTSC1TVEFSVDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRVZFTlRfRkxVU0hfU1RBUlQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPlN0YXJ0IGEgZmx1c2ggb3BlcmF0aW9uLiBUaGlzIGV2ZW50IGNsZWFycyBhbGwgZGF0YQorICAgICAgICAgICAgICAgIGZyb20gdGhlIHBpcGVsaW5lIGFuZCB1bmJsb2NrIGFsbCBzdHJlYW1pbmcgdGhyZWFkcy4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1GTFVTSC1TVE9QOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9FVkVOVF9GTFVTSF9TVE9QPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5TdG9wIGEgZmx1c2ggb3BlcmF0aW9uLiBUaGlzIGV2ZW50IHJlc2V0cyB0aGUKKyAgICAgICAgICAgICAgICBydW5uaW5nLXRpbWUgb2YgdGhlIHBpcGVsaW5lLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUVWRU5ULUNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9FVkVOVF9DQVBTPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBldmVudC4gTm90aWZ5IHRoZSBwYWQgb2YgYSBuZXcgbWVkaWEgdHlwZS4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1TRUdNRU5UOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9FVkVOVF9TRUdNRU5UPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIG5ldyBtZWRpYSBzZWdtZW50IGZvbGxvd3MgaW4gdGhlIGRhdGFmbG93LiBUaGUKKyAgICAgICAgICAgICAgICBzZWdtZW50IGV2ZW50cyBjb250YWlucyBpbmZvcm1hdGlvbiBmb3IgY2xpcHBpbmcgYnVmZmVycyBhbmQKKyAgICAgICAgICAgICAgICBjb252ZXJ0aW5nIGJ1ZmZlciB0aW1lc3RhbXBzIHRvIHJ1bm5pbmctdGltZSBhbmQKKyAgICAgICAgICAgICAgICBzdHJlYW0tdGltZS4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1UQUc6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0VWRU5UX1RBRzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBuZXcgc2V0IG9mIG1ldGFkYXRhIHRhZ3MgaGFzIGJlZW4gZm91bmQgaW4gdGhlIHN0cmVhbS4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1CVUZGRVJTSVpFOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9FVkVOVF9CVUZGRVJTSVpFPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Ob3RpZmljYXRpb24gb2YgYnVmZmVyaW5nIHJlcXVpcmVtZW50cy4gQ3VycmVudGx5IG5vdAorICAgICAgICAgICAgICAgIHVzZWQgeWV0LgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUVWRU5ULVNJTkstTUVTU0FHRTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRVZFTlRfU0lOS19NRVNTQUdFPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BbiBldmVudCB0aGF0IHNpbmtzIHR1cm4gaW50byBhIG1lc3NhZ2UuIFVzZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kIG1lc3NhZ2VzIHRoYXQgc2hvdWxkIGJlIGVtaXR0ZWQgaW4gc3luYyB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgIFNpbmNlOiAwLjEwLjI2Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtRVZFTlQtRU9TOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9FVkVOVF9FT1M8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPkVuZC1PZi1TdHJlYW0uIE5vIG1vcmUgZGF0YSBpcyB0byBiZSBleHBlY3RlZCB0byBmb2xsb3cKKyAgICAgICAgICAgICAgICB3aXRob3V0IGEgU0VHTUVOVCBldmVudC4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1RT1M6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0VWRU5UX1FPUzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBxdWFsaXR5IG1lc3NhZ2UuIFVzZWQgdG8gaW5kaWNhdGUgdG8gdXBzdHJlYW0gZWxlbWVudHMKKyAgICAgICAgICAgICAgICB0aGF0IHRoZSBkb3duc3RyZWFtIGVsZW1lbnRzIHNob3VsZCBhZGp1c3QgdGhlaXIgcHJvY2Vzc2luZworICAgICAgICAgICAgICAgIHJhdGUuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtRVZFTlQtU0VFSzpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRVZFTlRfU0VFSzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSByZXF1ZXN0IGZvciBhIG5ldyBwbGF5YmFjayBwb3NpdGlvbiBhbmQgcmF0ZS4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1OQVZJR0FUSU9OOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9FVkVOVF9OQVZJR0FUSU9OPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5OYXZpZ2F0aW9uIGV2ZW50cyBhcmUgdXN1YWxseSB1c2VkIGZvciBjb21tdW5pY2F0aW5nCisgICAgICAgICAgICAgICAgICAgICAgIHVzZXIgcmVxdWVzdHMsIHN1Y2ggYXMgbW91c2Ugb3Iga2V5Ym9hcmQgbW92ZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICB0byB1cHN0cmVhbSBlbGVtZW50cy4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1MQVRFTkNZOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9FVkVOVF9MQVRFTkNZPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Ob3RpZmljYXRpb24gb2YgbmV3IGxhdGVuY3kgYWRqdXN0bWVudC4gU2lua3Mgd2lsbCB1c2UKKyAgICAgICAgICAgICAgICAgICAgdGhlIGxhdGVuY3kgaW5mb3JtYXRpb24gdG8gYWRqdXN0IHRoZWlyIHN5bmNocm9uaXNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgU2luY2U6IDAuMTAuMTIKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1TVEVQOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9FVkVOVF9TVEVQPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIHJlcXVlc3QgZm9yIHN0ZXBwaW5nIHRocm91Z2ggdGhlIG1lZGlhLiBTaW5rcyB3aWxsIHVzdWFsbHkKKyAgICAgICAgICAgICAgICAgZXhlY3V0ZSB0aGUgc3RlcCBvcGVyYXRpb24uIFNpbmNlOiAwLjEwLjI0Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtRVZFTlQtUkVDT05GSUdVUkU6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0VWRU5UX1JFQ09ORklHVVJFPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIHJlcXVlc3QgZm9yIHVwc3RyZWFtIHJlbmVnb3RpYXRpbmcgY2FwcyBhbmQgcmVjb25maWd1cmluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNpbmNlOiAwLjExLjAKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1DVVNUT00tVVBTVFJFQU06Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0VWRU5UX0NVU1RPTV9VUFNUUkVBTTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VXBzdHJlYW0gY3VzdG9tIGV2ZW50Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtRVZFTlQtQ1VTVE9NLURPV05TVFJFQU06Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Eb3duc3RyZWFtIGN1c3RvbSBldmVudCB0aGF0IHRyYXZlbHMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgZmxvdy4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1DVVNUT00tRE9XTlNUUkVBTS1PT0I6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX09PQjwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Q3VzdG9tIG91dC1vZi1iYW5kIGRvd25zdHJlYW0gZXZlbnQuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtRVZFTlQtQ1VTVE9NLUJPVEg6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0VWRU5UX0NVU1RPTV9CT1RIPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5DdXN0b20gdXBzdHJlYW0gb3IgZG93bnN0cmVhbSBldmVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluLWJhbmQgd2hlbiB0cmF2ZWxsaW5nIGRvd25zdHJlYW0uCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtRVZFTlQtQ1VTVE9NLUJPVEgtT09COkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9FVkVOVF9DVVNUT01fQk9USF9PT0I8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPkN1c3RvbSB1cHN0cmVhbSBvciBkb3duc3RyZWFtIG91dC1vZi1iYW5kIGV2ZW50LgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUVWRU5ULVRSQUNFLU5BTUU6Q0FQUyI+PC9hPjxoMz5HU1RfRVZFTlRfVFJBQ0VfTkFNRTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRVZFTlRfVFJBQ0VfTkFNRSAgICAiR3N0RXZlbnQiCis8L3ByZT4KKzxwPgorVGhlIG5hbWUgdXNlZCBmb3IgbWVtb3J5IGFsbG9jYXRpb24gdHJhY2luZworPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtRVZFTlQtVFlQRTpDQVBTIj48L2E+PGgzPkdTVF9FVkVOVF9UWVBFKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0VWRU5UX1RZUEUoZXZlbnQpICAgICAgICAgICAoR1NUX0VWRU5UX0NBU1QoZXZlbnQpLSZndDt0eXBlKQorPC9wcmU+Cis8cD4KK0dldCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50VHlwZSIgdGl0bGU9ImVudW0gR3N0RXZlbnRUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnRUeXBlPC9zcGFuPjwvYT4gb2YgdGhlIGV2ZW50LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZXZlbnQgdG8gcXVlcnk8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUVWRU5ULVRZUEUtTkFNRTpDQVBTIj48L2E+PGgzPkdTVF9FVkVOVF9UWVBFX05BTUUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRVZFTlRfVFlQRV9OQU1FKGV2ZW50KSAgICAgIChnc3RfZXZlbnRfdHlwZV9nZXRfbmFtZShHU1RfRVZFTlRfVFlQRShldmVudCkpKQorPC9wcmU+Cis8cD4KK0dldCBhIGNvbnN0YW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50VHlwZSIgdGl0bGU9ImVudW0gR3N0RXZlbnRUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnRUeXBlPC9zcGFuPjwvYT4gb2YgdGhlIGV2ZW50LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZXZlbnQgdG8gcXVlcnk8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUVWRU5ULVRJTUVTVEFNUDpDQVBTIj48L2E+PGgzPkdTVF9FVkVOVF9USU1FU1RBTVAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRVZFTlRfVElNRVNUQU1QKGV2ZW50KSAgICAgIChHU1RfRVZFTlRfQ0FTVChldmVudCktJmd0O3RpbWVzdGFtcCkKKzwvcHJlPgorPHA+CitHZXQgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRpbWVzdGFtcCBvZiB0aGUgZXZlbnQuIFRoaXMgaXMgdGhlIHRpbWUgd2hlbiB0aGUgZXZlbnQKK3dhcyBjcmVhdGVkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZXZlbnQgdG8gcXVlcnk8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUVWRU5ULVNFUU5VTTpDQVBTIj48L2E+PGgzPkdTVF9FVkVOVF9TRVFOVU0oKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRVZFTlRfU0VRTlVNKGV2ZW50KSAgICAgICAgIChHU1RfRVZFTlRfQ0FTVChldmVudCktJmd0O3NlcW51bSkKKzwvcHJlPgorPHA+CitUaGUgc2VxdWVuY2UgbnVtYmVyIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGV2ZW50IHRvIHF1ZXJ5PC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1FVkVOVC1JUy1VUFNUUkVBTTpDQVBTIj48L2E+PGgzPkdTVF9FVkVOVF9JU19VUFNUUkVBTSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9FVkVOVF9JU19VUFNUUkVBTShldikgICAgICAgISEoR1NUX0VWRU5UX1RZUEUgKGV2KSAmYW1wOyBHU1RfRVZFTlRfVFlQRV9VUFNUUkVBTSkKKzwvcHJlPgorPHA+CitDaGVjayBpZiBhbiBldmVudCBjYW4gdHJhdmVsIHVwc3RyZWFtLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZXZlbnQgdG8gcXVlcnk8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUVWRU5ULUlTLURPV05TVFJFQU06Q0FQUyI+PC9hPjxoMz5HU1RfRVZFTlRfSVNfRE9XTlNUUkVBTSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9FVkVOVF9JU19ET1dOU1RSRUFNKGV2KSAgICAgISEoR1NUX0VWRU5UX1RZUEUgKGV2KSAmYW1wOyBHU1RfRVZFTlRfVFlQRV9ET1dOU1RSRUFNKQorPC9wcmU+Cis8cD4KK0NoZWNrIGlmIGFuIGV2ZW50IGNhbiB0cmF2ZWwgZG93bnN0cmVhbS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXY8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGV2ZW50IHRvIHF1ZXJ5PC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1FVkVOVC1JUy1TRVJJQUxJWkVEOkNBUFMiPjwvYT48aDM+R1NUX0VWRU5UX0lTX1NFUklBTElaRUQoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRVZFTlRfSVNfU0VSSUFMSVpFRChldikgICAgICEhKEdTVF9FVkVOVF9UWVBFIChldikgJmFtcDsgR1NUX0VWRU5UX1RZUEVfU0VSSUFMSVpFRCkKKzwvcHJlPgorPHA+CitDaGVjayBpZiBhbiBldmVudCBpcyBzZXJpYWxpemVkIHdpdGggdGhlIGRhdGEgc3RyZWFtLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZXZlbnQgdG8gcXVlcnk8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUVWRU5ULUlTLVNUSUNLWTpDQVBTIj48L2E+PGgzPkdTVF9FVkVOVF9JU19TVElDS1koKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRVZFTlRfSVNfU1RJQ0tZKGV2KSAgICAgISEoR1NUX0VWRU5UX1RZUEUgKGV2KSAmYW1wOyBHU1RfRVZFTlRfVFlQRV9TVElDS1kpCis8L3ByZT4KKzxwPgorQ2hlY2sgaWYgYW4gZXZlbnQgaXMgc3RpY2t5IG9uIHRoZSBwYWRzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZXZlbnQgdG8gcXVlcnk8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWV2ZW50LXR5cGUtZ2V0LWZsYWdzIj48L2E+PGgzPmdzdF9ldmVudF90eXBlX2dldF9mbGFncyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50VHlwZUZsYWdzIiB0aXRsZT0iZW51bSBHc3RFdmVudFR5cGVGbGFncyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudFR5cGVGbGFnczwvc3Bhbj48L2E+ICAgZ3N0X2V2ZW50X3R5cGVfZ2V0X2ZsYWdzICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnRUeXBlIiB0aXRsZT0iZW51bSBHc3RFdmVudFR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudFR5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50VHlwZUZsYWdzIiB0aXRsZT0iZW51bSBHc3RFdmVudFR5cGVGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50VHlwZUZsYWdzPC9zcGFuPjwvYT4gYXNzb2NpYXRlZCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnRUeXBlIiB0aXRsZT0iZW51bSBHc3RFdmVudFR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudFR5cGU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnRUeXBlRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEV2ZW50VHlwZUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnRUeXBlRmxhZ3M8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZXZlbnQtdHlwZS1nZXQtbmFtZSI+PC9hPjxoMz5nc3RfZXZlbnRfdHlwZV9nZXRfbmFtZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICBnc3RfZXZlbnRfdHlwZV9nZXRfbmFtZSAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudFR5cGUiIHRpdGxlPSJlbnVtIEdzdEV2ZW50VHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50VHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgYSBwcmludGFibGUgbmFtZSBmb3IgdGhlIGdpdmVuIGV2ZW50IHR5cGUuIERvIG5vdCBtb2RpZnkgb3IgZnJlZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBldmVudCB0eXBlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSByZWZlcmVuY2UgdG8gdGhlIHN0YXRpYyBuYW1lIG9mIHRoZSBldmVudC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZXZlbnQtdHlwZS10by1xdWFyayI+PC9hPjxoMz5nc3RfZXZlbnRfdHlwZV90b19xdWFyayAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1F1YXJrPC9zcGFuPjwvYT4gICAgICAgICAgICAgIGdzdF9ldmVudF90eXBlX3RvX3F1YXJrICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50VHlwZSIgdGl0bGU9ImVudW0gR3N0RXZlbnRUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnRUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCB0aGUgdW5pcXVlIHF1YXJrIGZvciB0aGUgZ2l2ZW4gZXZlbnQgdHlwZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBldmVudCB0eXBlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHF1YXJrIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQgdHlwZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ldmVudC1yZWYiPjwvYT48aDM+Z3N0X2V2ZW50X3JlZiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKiAgICAgICAgICBnc3RfZXZlbnRfcmVmICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSW5jcmVhc2UgdGhlIHJlZmNvdW50IG9mIHRoaXMgZXZlbnQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGV2ZW50IHRvIHJlZmNvdW50PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT4gKGZvciBjb252ZW5pZW5jZSB3aGVuIGRvaW5nIGFzc2lnbm1lbnRzKS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ldmVudC11bnJlZiI+PC9hPjxoMz5nc3RfZXZlbnRfdW5yZWYgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2V2ZW50X3VucmVmICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0RlY3JlYXNlIHRoZSByZWZjb3VudCBvZiBhbiBldmVudCwgZnJlZWluZyBpdCBpZiB0aGUgcmVmY291bnQgcmVhY2hlcyAwLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZXZlbnQgdG8gcmVmY291bnQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWV2ZW50LXJlcGxhY2UiPjwvYT48aDM+Z3N0X2V2ZW50X3JlcGxhY2UoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBnc3RfZXZlbnRfcmVwbGFjZShvbGRfZXZlbnQsbmV3X2V2ZW50KTwvcHJlPgorPHA+CitNb2RpZmllcyBhIHBvaW50ZXIgdG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+IHRvIHBvaW50IHRvIGEgZGlmZmVyZW50IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4uIFRoZQorbW9kaWZpY2F0aW9uIGlzIGRvbmUgYXRvbWljYWxseSAoc28gdGhpcyBpcyB1c2VmdWwgZm9yIGVuc3VyaW5nIHRocmVhZCBzYWZldHkKK2luIHNvbWUgY2FzZXMpLCBhbmQgdGhlIHJlZmVyZW5jZSBjb3VudHMgYXJlIHVwZGF0ZWQgYXBwcm9wcmlhdGVseSAodGhlIG9sZAorZXZlbnQgaXMgdW5yZWZmZWQsIHRoZSBuZXcgb25lIGlzIHJlZmZlZCkuCis8L3A+Cis8cD4KK0VpdGhlciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmV3X2V2ZW50PC9jb2RlPjwvZW0+IG9yIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+IHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9sZF9ldmVudDwvY29kZT48L2VtPiBtYXkgYmUgTlVMTC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vbGRfZXZlbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9pbnRlciB0byBhIHBvaW50ZXIgdG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+Cit0byBiZSByZXBsYWNlZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dCBhbmQgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+aW5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ld19ldmVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiB0aGF0IHdpbGwKK3JlcGxhY2UgdGhlIGV2ZW50IHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9sZF9ldmVudDwvY29kZT48L2VtPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmV3X2V2ZW50PC9jb2RlPjwvZW0+IHdhcyBkaWZmZXJlbnQgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2xkX2V2ZW50PC9jb2RlPjwvZW0+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZXZlbnQtY29weSI+PC9hPjxoMz5nc3RfZXZlbnRfY29weSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKiAgICAgICAgICBnc3RfZXZlbnRfY29weSAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ29weSB0aGUgZXZlbnQgdXNpbmcgdGhlIGV2ZW50IHNwZWNpZmljIGNvcHkgZnVuY3Rpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGV2ZW50IHRvIGNvcHk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3IGV2ZW50LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWV2ZW50LXN0ZWFsIj48L2E+PGgzPmdzdF9ldmVudF9zdGVhbCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIGdzdF9ldmVudF9zdGVhbChvbGRfZXZlbnQpPC9wcmU+Cis8cD4KK0F0b21pY2FsbHkgcmVwbGFjZSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiBwb2ludGVkIHRvIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vbGRfZXZlbnQ8L2NvZGU+PC9lbT4gd2l0aCBOVUxMIGFuZAorcmV0dXJuIHRoZSBvcmlnaW5hbCBldmVudC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vbGRfZXZlbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9pbnRlciB0byBhIHBvaW50ZXIgdG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+Cit0byBiZSBzdG9sZW4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQgYW5kIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmlub3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gdGhhdCB3YXMgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9sZF9ldmVudDwvY29kZT48L2VtPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWV2ZW50LXRha2UiPjwvYT48aDM+Z3N0X2V2ZW50X3Rha2UoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBnc3RfZXZlbnRfdGFrZShvbGRfZXZlbnQsbmV3X2V2ZW50KTwvcHJlPgorPHA+CitNb2RpZmllcyBhIHBvaW50ZXIgdG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+IHRvIHBvaW50IHRvIGEgZGlmZmVyZW50IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4uIFRoaXMKK2Z1bmN0aW9uIGlzIHNpbWlsYXIgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1yZXBsYWNlIiB0aXRsZT0iZ3N0X2V2ZW50X3JlcGxhY2UoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZXZlbnRfcmVwbGFjZSgpPC9jb2RlPjwvYT4gZXhjZXB0IHRoYXQgaXQgdGFrZXMgb3duZXJzaGlwIG9mCis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmV3X2V2ZW50PC9jb2RlPjwvZW0+LgorPC9wPgorPHA+CitFaXRoZXIgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ld19ldmVudDwvY29kZT48L2VtPiBvciB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiBwb2ludGVkIHRvIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vbGRfZXZlbnQ8L2NvZGU+PC9lbT4gbWF5IGJlIE5VTEwuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2xkX2V2ZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnBvaW50ZXIgdG8gYSBwb2ludGVyIHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPgordG8gYmUgc3RvbGVuLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIGlucHV0IGFuZCBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmV3X2V2ZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnBvaW50ZXIgdG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+IHRoYXQgd2lsbAorcmVwbGFjZSB0aGUgZXZlbnQgcG9pbnRlZCB0byBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2xkX2V2ZW50PC9jb2RlPjwvZW0+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uZXdfZXZlbnQ8L2NvZGU+PC9lbT4gd2FzIGRpZmZlcmVudCBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vbGRfZXZlbnQ8L2NvZGU+PC9lbT4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ldmVudC1pcy13cml0YWJsZSI+PC9hPjxoMz5nc3RfZXZlbnRfaXNfd3JpdGFibGUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgIGdzdF9ldmVudF9pc193cml0YWJsZShldikgICAgIGdzdF9taW5pX29iamVjdF9pc193cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGV2KSkKKzwvcHJlPgorPHA+CitUZXN0cyBpZiB5b3UgY2FuIHNhZmVseSB3cml0ZSBkYXRhIGludG8gYSBldmVudCdzIHN0cnVjdHVyZSBvciB2YWxpZGx5Cittb2RpZnkgdGhlIHNlcW51bSBhbmQgdGltZXN0YW1wIGZpZWxkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZXZlbnQtbWFrZS13cml0YWJsZSI+PC9hPjxoMz5nc3RfZXZlbnRfbWFrZV93cml0YWJsZSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgZ3N0X2V2ZW50X21ha2Vfd3JpdGFibGUoZXYpICAgR1NUX0VWRU5UX0NBU1QgKGdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoZXYpKSkKKzwvcHJlPgorPHA+CitNYWtlcyBhIHdyaXRhYmxlIGV2ZW50IGZyb20gdGhlIGdpdmVuIGV2ZW50LiBJZiB0aGUgc291cmNlIGV2ZW50IGlzCithbHJlYWR5IHdyaXRhYmxlLCB0aGlzIHdpbGwgc2ltcGx5IHJldHVybiB0aGUgc2FtZSBldmVudC4gQSBjb3B5IHdpbGwKK290aGVyd2lzZSBiZSBtYWRlIHVzaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtY29weSIgdGl0bGU9ImdzdF9ldmVudF9jb3B5ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9ldmVudF9jb3B5KCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHdyaXRhYmxlIGV2ZW50IHdoaWNoIG1heSBvciBtYXkgbm90IGJlIHRoZQorc2FtZSBhcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXY8L2NvZGU+PC9lbT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZXZlbnQtd3JpdGFibGUtc3RydWN0dXJlIj48L2E+PGgzPmdzdF9ldmVudF93cml0YWJsZV9zdHJ1Y3R1cmUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqICAgICAgZ3N0X2V2ZW50X3dyaXRhYmxlX3N0cnVjdHVyZSAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCBhIHdyaXRhYmxlIHZlcnNpb24gb2YgdGhlIHN0cnVjdHVyZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgc3RydWN0dXJlIG9mIHRoZSBldmVudC4gVGhlIHN0cnVjdHVyZSBpcyBzdGlsbAorb3duZWQgYnkgdGhlIGV2ZW50LCB3aGljaCBtZWFucyB0aGF0IHlvdSBzaG91bGQgbm90IGZyZWUgaXQgYW5kCit0aGF0IHRoZSBwb2ludGVyIGJlY29tZXMgaW52YWxpZCB3aGVuIHlvdSBmcmVlIHRoZSBldmVudC4KK1RoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPiBpcyB3cml0YWJsZSBhbmQgd2lsbCBuZXZlciByZXR1cm4gTlVMTC4KK01UIHNhZmUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWV2ZW50LW5ldy1jdXN0b20iPjwvYT48aDM+Z3N0X2V2ZW50X25ld19jdXN0b20gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICogICAgICAgICAgZ3N0X2V2ZW50X25ld19jdXN0b20gICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnRUeXBlIiB0aXRsZT0iZW51bSBHc3RFdmVudFR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudFR5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGUgYSBuZXcgY3VzdG9tLXR5cGVkIGV2ZW50LiBUaGlzIGNhbiBiZSB1c2VkIGZvciBhbnl0aGluZyBub3QKK2hhbmRsZWQgYnkgb3RoZXIgZXZlbnQtc3BlY2lmaWMgZnVuY3Rpb25zIHRvIHBhc3MgYW4gZXZlbnQgdG8gYW5vdGhlcgorZWxlbWVudC4KKzwvcD4KKzxwPgorTWFrZSBzdXJlIHRvIGFsbG9jYXRlIGFuIGV2ZW50IHR5cGUgd2l0aCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1NQUtFLVRZUEU6Q0FQUyIgdGl0bGU9IkdTVF9FVkVOVF9NQUtFX1RZUEUoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9FVkVOVF9NQUtFX1RZUEU8L3NwYW4+PC9hPiBtYWNybywKK2Fzc2lnbmluZyBhIGZyZWUgbnVtYmVyIGFuZCBmaWxsaW5nIGluIHRoZSBjb3JyZWN0IGRpcmVjdGlvbiBhbmQKK3NlcmlhbGl6YXRpb24gZmxhZ3MuCis8L3A+Cis8cD4KK05ldyBjdXN0b20gZXZlbnRzIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYnkgc3ViY2xhc3NpbmcgdGhlIGV2ZW50IHR5cGUgaWYKK25lZWRlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSB0eXBlIG9mIHRoZSBuZXcgZXZlbnQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc3RydWN0dXJlIGZvciB0aGUgZXZlbnQuIFRoZSBldmVudCB3aWxsCit0YWtlIG93bmVyc2hpcCBvZiB0aGUgc3RydWN0dXJlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5ldyBjdXN0b20gZXZlbnQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZXZlbnQtZ2V0LXN0cnVjdHVyZSI+PC9hPjxoMz5nc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICogZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQWNjZXNzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGV2ZW50LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV2ZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGV2ZW50LiBUaGUgc3RydWN0dXJlIGlzIHN0aWxsCitvd25lZCBieSB0aGUgZXZlbnQsIHdoaWNoIG1lYW5zIHRoYXQgeW91IHNob3VsZCBub3QgZnJlZSBpdCBhbmQKK3RoYXQgdGhlIHBvaW50ZXIgYmVjb21lcyBpbnZhbGlkIHdoZW4geW91IGZyZWUgdGhlIGV2ZW50LgorTVQgc2FmZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZXZlbnQtaGFzLW5hbWUiPjwvYT48aDM+Z3N0X2V2ZW50X2hhc19uYW1lICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ldmVudF9oYXNfbmFtZSAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NoZWNrcyBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT4gaGFzIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPi4gVGhpcyBmdW5jdGlvbiBpcyB1c3VhbGx5IHVzZWQgdG8KK2NoZWNrIHRoZSBuYW1lIG9mIGEgY3VzdG9tIGV2ZW50LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV2ZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5uYW1lIHRvIGNoZWNrPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPiBtYXRjaGVzIHRoZSBuYW1lIG9mIHRoZSBldmVudCBzdHJ1Y3R1cmUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWV2ZW50LWdldC1zZXFudW0iPjwvYT48aDM+Z3N0X2V2ZW50X2dldF9zZXFudW0gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MzI8L3NwYW4+PC9hPiAgICAgICAgICAgICBnc3RfZXZlbnRfZ2V0X3NlcW51bSAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0cmlldmUgdGhlIHNlcXVlbmNlIG51bWJlciBvZiBhIGV2ZW50LgorPC9wPgorPHA+CitFdmVudHMgaGF2ZSBldmVyLWluY3JlbWVudGluZyBzZXF1ZW5jZSBudW1iZXJzLCB3aGljaCBtYXkgYWxzbyBiZSBzZXQKK2V4cGxpY2l0bHkgdmlhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtc2V0LXNlcW51bSIgdGl0bGU9ImdzdF9ldmVudF9zZXRfc2VxbnVtICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9ldmVudF9zZXRfc2VxbnVtKCk8L2NvZGU+PC9hPi4gU2VxdWVuY2UgbnVtYmVycyBhcmUgdHlwaWNhbGx5IHVzZWQgdG8KK2luZGljYXRlIHRoYXQgYSBldmVudCBjb3JyZXNwb25kcyB0byBzb21lIG90aGVyIHNldCBvZiBldmVudHMgb3IgbWVzc2FnZXMsCitmb3IgZXhhbXBsZSBhbiBFT1MgZXZlbnQgY29ycmVzcG9uZGluZyB0byBhIFNFRUsgZXZlbnQuIEl0IGlzIGNvbnNpZGVyZWQgZ29vZAorcHJhY3RpY2UgdG8gbWFrZSB0aGlzIGNvcnJlc3BvbmRlbmNlIHdoZW4gcG9zc2libGUsIHRob3VnaCBpdCBpcyBub3QKK3JlcXVpcmVkLgorPC9wPgorPHA+CitOb3RlIHRoYXQgZXZlbnRzIGFuZCBtZXNzYWdlcyBzaGFyZSB0aGUgc2FtZSBzZXF1ZW5jZSBudW1iZXIgaW5jcmVtZW50b3I7Cit0d28gZXZlbnRzIG9yIG1lc3NhZ2VzIHdpbGwgbmV2ZXIgaGF2ZSB0aGUgc2FtZSBzZXF1ZW5jZSBudW1iZXIgdW5sZXNzCit0aGF0IGNvcnJlc3BvbmRlbmNlIHdhcyBtYWRlIGV4cGxpY2l0bHkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBldmVudCdzIHNlcXVlbmNlIG51bWJlci4KK01UIHNhZmUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWV2ZW50LXNldC1zZXFudW0iPjwvYT48aDM+Z3N0X2V2ZW50X3NldF9zZXFudW0gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2V2ZW50X3NldF9zZXFudW0gICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiBzZXFudW08L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXQgdGhlIHNlcXVlbmNlIG51bWJlciBvZiBhIGV2ZW50LgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIG1pZ2h0IGJlIGNhbGxlZCBieSB0aGUgY3JlYXRvciBvZiBhIGV2ZW50IHRvIGluZGljYXRlIHRoYXQgdGhlCitldmVudCByZWxhdGVzIHRvIG90aGVyIGV2ZW50cyBvciBtZXNzYWdlcy4gU2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtZ2V0LXNlcW51bSIgdGl0bGU9ImdzdF9ldmVudF9nZXRfc2VxbnVtICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9ldmVudF9nZXRfc2VxbnVtKCk8L2NvZGU+PC9hPiBmb3IKK21vcmUgaW5mb3JtYXRpb24uCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VxbnVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgc2VxdWVuY2UgbnVtYmVyLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ldmVudC1uZXctZmx1c2gtc3RhcnQiPjwvYT48aDM+Z3N0X2V2ZW50X25ld19mbHVzaF9zdGFydCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKiAgICAgICAgICBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0FsbG9jYXRlIGEgbmV3IGZsdXNoIHN0YXJ0IGV2ZW50LiBUaGUgZmx1c2ggc3RhcnQgZXZlbnQgY2FuIGJlIHNlbnQKK3Vwc3RyZWFtIGFuZCBkb3duc3RyZWFtIGFuZCB0cmF2ZWxzIG91dC1vZi1ib3VuZHMgd2l0aCB0aGUgZGF0YWZsb3cuCis8L3A+Cis8cD4KK0l0IG1hcmtzIHBhZHMgYXMgYmVpbmcgZmx1c2hpbmcgYW5kIHdpbGwgbWFrZSB0aGVtIHJldHVybgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1GTE9XLVdST05HLVNUQVRFOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRkxPV19XUk9OR19TVEFURTwvc3Bhbj48L2E+IHdoZW4gdXNlZCBmb3IgZGF0YSBmbG93IHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcHVzaCIgdGl0bGU9ImdzdF9wYWRfcHVzaCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3B1c2goKTwvY29kZT48L2E+LAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtY2hhaW4iIHRpdGxlPSJnc3RfcGFkX2NoYWluICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfY2hhaW4oKTwvY29kZT48L2E+LCA8YSBocmVmPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXIvaHRtbC9Hc3RQYWQuaHRtbCNnc3QtcGFkLWFsbG9jLWJ1ZmZlciI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX2FsbG9jX2J1ZmZlcigpPC9jb2RlPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1yYW5nZSIgdGl0bGU9ImdzdF9wYWRfZ2V0X3JhbmdlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfZ2V0X3JhbmdlKCk8L2NvZGU+PC9hPiBhbmQKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1bGwtcmFuZ2UiIHRpdGxlPSJnc3RfcGFkX3B1bGxfcmFuZ2UgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9wdWxsX3JhbmdlKCk8L2NvZGU+PC9hPi4gQW55IGV2ZW50IChleGNlcHQgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUZMVVNILVNUT1A6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9FVkVOVF9GTFVTSF9TVE9QPC9zcGFuPjwvYT4pIHJlY2VpdmVkCitvbiBhIGZsdXNoaW5nIHBhZCB3aWxsIHJldHVybiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGltbWVkaWF0ZWx5LgorPC9wPgorPHA+CitFbGVtZW50cyBzaG91bGQgdW5sb2NrIGFueSBibG9ja2luZyBmdW5jdGlvbnMgYW5kIGV4aXQgdGhlaXIgc3RyZWFtaW5nCitmdW5jdGlvbnMgYXMgZmFzdCBhcyBwb3NzaWJsZSB3aGVuIHRoaXMgZXZlbnQgaXMgcmVjZWl2ZWQuCis8L3A+Cis8cD4KK1RoaXMgZXZlbnQgaXMgdHlwaWNhbGx5IGdlbmVyYXRlZCBhZnRlciBhIHNlZWsgdG8gZmx1c2ggb3V0IGFsbCBxdWV1ZWQgZGF0YQoraW4gdGhlIHBpcGVsaW5lIHNvIHRoYXQgdGhlIG5ldyBtZWRpYSBpcyBwbGF5ZWQgYXMgc29vbiBhcyBwb3NzaWJsZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IGZsdXNoIHN0YXJ0IGV2ZW50LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ldmVudC1uZXctZmx1c2gtc3RvcCI+PC9hPjxoMz5nc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICogICAgICAgICAgZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IHJlc2V0X3RpbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBbGxvY2F0ZSBhIG5ldyBmbHVzaCBzdG9wIGV2ZW50LiBUaGUgZmx1c2ggc3RvcCBldmVudCBjYW4gYmUgc2VudAordXBzdHJlYW0gYW5kIGRvd25zdHJlYW0gYW5kIHRyYXZlbHMgc2VyaWFsaXplZCB3aXRoIHRoZSBkYXRhZmxvdy4KK0l0IGlzIHR5cGljYWxseSBzZW50IGFmdGVyIHNlbmRpbmcgYSBGTFVTSF9TVEFSVCBldmVudCB0byBtYWtlIHRoZQorcGFkcyBhY2NlcHQgZGF0YSBhZ2Fpbi4KKzwvcD4KKzxwPgorRWxlbWVudHMgY2FuIHByb2Nlc3MgdGhpcyBldmVudCBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgZGF0YWZsb3cgc2luY2UKK3RoZSBwcmVjZWVkaW5nIEZMVVNIX1NUQVJUIGV2ZW50IHN0b3BwZWQgdGhlIGRhdGFmbG93LgorPC9wPgorPHA+CitUaGlzIGV2ZW50IGlzIHR5cGljYWxseSBnZW5lcmF0ZWQgdG8gY29tcGxldGUgYSBzZWVrIGFuZCB0byByZXN1bWUKK2RhdGFmbG93LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlc2V0X3RpbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+aWYgdGltZSBzaG91bGQgYmUgcmVzZXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyBmbHVzaCBzdG9wIGV2ZW50LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWV2ZW50LXBhcnNlLWZsdXNoLXN0b3AiPjwvYT48aDM+Z3N0X2V2ZW50X3BhcnNlX2ZsdXNoX3N0b3AgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX2ZsdXNoX3N0b3AgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICpyZXNldF90aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUGFyc2UgdGhlIEZMVVNIX1NUT1AgZXZlbnQgYW5kIHJldHJpZXZlIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVzZXRfdGltZTwvY29kZT48L2VtPiBtZW1iZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGV2ZW50IHRvIHBhcnNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZXNldF90aW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmlmIHRpbWUgc2hvdWxkIGJlIHJlc2V0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWV2ZW50LW5ldy1lb3MiPjwvYT48aDM+Z3N0X2V2ZW50X25ld19lb3MgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICogICAgICAgICAgZ3N0X2V2ZW50X25ld19lb3MgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGUgYSBuZXcgRU9TIGV2ZW50LiBUaGUgZW9zIGV2ZW50IGNhbiBvbmx5IHRyYXZlbCBkb3duc3RyZWFtCitzeW5jaHJvbml6ZWQgd2l0aCB0aGUgYnVmZmVyIGZsb3cuIEVsZW1lbnRzIHRoYXQgcmVjZWl2ZSB0aGUgRU9TCitldmVudCBvbiBhIHBhZCBjYW4gcmV0dXJuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1VTkVYUEVDVEVEOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRkxPV19VTkVYUEVDVEVEPC9zcGFuPjwvYT4gYXMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgord2hlbiBkYXRhIGFmdGVyIHRoZSBFT1MgZXZlbnQgYXJyaXZlcy4KKzwvcD4KKzxwPgorVGhlIEVPUyBldmVudCB3aWxsIHRyYXZlbCBkb3duIHRvIHRoZSBzaW5rIGVsZW1lbnRzIGluIHRoZSBwaXBlbGluZQord2hpY2ggd2lsbCB0aGVuIHBvc3QgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLUVPUzpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX01FU1NBR0VfRU9TPC9zcGFuPjwvYT4gb24gdGhlIGJ1cyBhZnRlciB0aGV5IGhhdmUKK2ZpbmlzaGVkIHBsYXlpbmcgYW55IGJ1ZmZlcmVkIGRhdGEuCis8L3A+Cis8cD4KK1doZW4gYWxsIHNpbmtzIGhhdmUgcG9zdGVkIGFuIEVPUyBtZXNzYWdlLCBhbiBFT1MgbWVzc2FnZSBpcworZm9yd2FyZGVkIHRvIHRoZSBhcHBsaWNhdGlvbi4KKzwvcD4KKzxwPgorVGhlIEVPUyBldmVudCBpdHNlbGYgd2lsbCBub3QgY2F1c2UgYW55IHN0YXRlIHRyYW5zaXRpb25zIG9mIHRoZSBwaXBlbGluZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXcgRU9TIGV2ZW50LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ldmVudC1uZXctc2VnbWVudCI+PC9hPjxoMz5nc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICogICAgICAgICAgZ3N0X2V2ZW50X25ld19zZWdtZW50ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNHc3RTZWdtZW50IiB0aXRsZT0ic3RydWN0IEdzdFNlZ21lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT4gKnNlZ21lbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGUgYSBuZXcgU0VHTUVOVCBldmVudCBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnQ8L2NvZGU+PC9lbT4uIFRoZSBzZWdtZW50IGV2ZW50IGNhbiBvbmx5IHRyYXZlbAorZG93bnN0cmVhbSBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgYnVmZmVyIGZsb3cgYW5kIGNvbnRhaW5zIHRpbWluZyBpbmZvcm1hdGlvbgorYW5kIHBsYXliYWNrIHByb3BlcnRpZXMgZm9yIHRoZSBidWZmZXJzIHRoYXQgd2lsbCBmb2xsb3cuCis8L3A+Cis8cD4KK1RoZSBuZXdzZWdtZW50IGV2ZW50IG1hcmtzIHRoZSByYW5nZSBvZiBidWZmZXJzIHRvIGJlIHByb2Nlc3NlZC4gQWxsCitkYXRhIG5vdCB3aXRoaW4gdGhlIHNlZ21lbnQgcmFuZ2UgaXMgbm90IHRvIGJlIHByb2Nlc3NlZC4gVGhpcyBjYW4gYmUKK3VzZWQgaW50ZWxsaWdlbnRseSBieSBwbHVnaW5zIHRvIGFwcGx5IG1vcmUgZWZmaWNpZW50IG1ldGhvZHMgb2Ygc2tpcHBpbmcKK3VubmVlZGVkIGRhdGEuIFRoZSB2YWxpZCByYW5nZSBpcyBleHByZXNzZWQgd2l0aCB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0PC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RvcDwvY29kZT48L2VtPgordmFsdWVzLgorPC9wPgorPHA+CitUaGUgdGltZSB2YWx1ZSBvZiB0aGUgc2VnbWVudCBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHN0YXJ0Cit2YWx1ZSB0byBjb252ZXJ0IHRoZSBidWZmZXIgdGltZXN0YW1wcyBpbnRvIHRoZSBzdHJlYW0gdGltZS4gVGhpcyBpcwordXN1YWxseSBkb25lIGluIHNpbmtzIHRvIHJlcG9ydCB0aGUgY3VycmVudCBzdHJlYW1fdGltZS4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50aW1lPC9jb2RlPjwvZW0+IHJlcHJlc2VudHMgdGhlIHN0cmVhbV90aW1lIG9mIGEgYnVmZmVyIGNhcnJ5aW5nIGEgdGltZXN0YW1wIG9mCis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnQ8L2NvZGU+PC9lbT4uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50aW1lPC9jb2RlPjwvZW0+IGNhbm5vdCBiZSAtMS4KKzwvcD4KKzxwPgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0PC9jb2RlPjwvZW0+IGNhbm5vdCBiZSAtMSwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0b3A8L2NvZGU+PC9lbT4gY2FuIGJlIC0xLiBJZiB0aGVyZQoraXMgYSB2YWxpZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RvcDwvY29kZT48L2VtPiBnaXZlbiwgaXQgbXVzdCBiZSBncmVhdGVyIG9yIGVxdWFsIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnQ8L2NvZGU+PC9lbT4sIGluY2x1ZGluZword2hlbiB0aGUgaW5kaWNhdGVkIHBsYXliYWNrIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yYXRlPC9jb2RlPjwvZW0+IGlzICZsdDsgMC4KKzwvcD4KKzxwPgorVGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hcHBsaWVkX3JhdGU8L2NvZGU+PC9lbT4gdmFsdWUgcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgYW55IHJhdGUgYWRqdXN0bWVudCB0aGF0CitoYXMgYWxyZWFkeSBiZWVuIG1hZGUgdG8gdGhlIHRpbWVzdGFtcHMgYW5kIGNvbnRlbnQgb24gdGhlIGJ1ZmZlcnMgb2YgdGhlCitzdHJlYW0uICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmF0ZTwvY29kZT48L2VtPiAqIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hcHBsaWVkX3JhdGU8L2NvZGU+PC9lbT4pIHNob3VsZCBhbHdheXMgZXF1YWwgdGhlIHJhdGUgdGhhdCBoYXMgYmVlbgorcmVxdWVzdGVkIGZvciBwbGF5YmFjay4gRm9yIGV4YW1wbGUsIGlmIGFuIGVsZW1lbnQgaGFzIGFuIGlucHV0IHNlZ21lbnQKK3dpdGggaW50ZW5kZWQgcGxheWJhY2sgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJhdGU8L2NvZGU+PC9lbT4gb2YgMi4wIGFuZCBhcHBsaWVkX3JhdGUgb2YgMS4wLCBpdCBjYW4gYWRqdXN0CitpbmNvbWluZyB0aW1lc3RhbXBzIGFuZCBidWZmZXIgY29udGVudCBieSBoYWxmIGFuZCBvdXRwdXQgYSBuZXdzZWdtZW50IGV2ZW50Cit3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yYXRlPC9jb2RlPjwvZW0+IG9mIDEuMCBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFwcGxpZWRfcmF0ZTwvY29kZT48L2VtPiBvZiAyLjAKKzwvcD4KKzxwPgorQWZ0ZXIgYSBuZXdzZWdtZW50IGV2ZW50LCB0aGUgYnVmZmVyIHN0cmVhbSB0aW1lIGlzIGNhbGN1bGF0ZWQgd2l0aDoKKzwvcD4KKzxwPgorICB0aW1lICsgKFRJTUVTVEFNUChidWYpIC0gc3RhcnQpICogQUJTIChyYXRlICogYXBwbGllZF9yYXRlKQorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNHc3RTZWdtZW50IiB0aXRsZT0ic3RydWN0IEdzdFNlZ21lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXcgU0VHTUVOVCBldmVudC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ldmVudC1wYXJzZS1zZWdtZW50Ij48L2E+PGgzPmdzdF9ldmVudF9wYXJzZV9zZWdtZW50ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9ldmVudF9wYXJzZV9zZWdtZW50ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudCIgdGl0bGU9InN0cnVjdCBHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+ICoqc2VnbWVudDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1BhcnNlcyBhIHNlZ21lbnQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV2ZW50PC9jb2RlPjwvZW0+IGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiB0aGUgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnQ8L2NvZGU+PC9lbT4gbG9jYXRpb24uCis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VnbWVudDwvY29kZT48L2VtPiByZW1haW5zIHZhbGlkIG9ubHkgdW50aWwgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPiBpcyBmcmVlZC4gRG9uJ3QgbW9kaWZ5IHRoZSBzZWdtZW50CithbmQgbWFrZSBhIGNvcHkgaWYgeW91IHdhbnQgdG8gbW9kaWZ5IGl0IG9yIHN0b3JlIGl0IGZvciBsYXRlciB1c2UuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGV2ZW50IHRvIHBhcnNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWdtZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgcG9pbnRlciB0byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ldmVudC1jb3B5LXNlZ21lbnQiPjwvYT48aDM+Z3N0X2V2ZW50X2NvcHlfc2VnbWVudCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfZXZlbnRfY29weV9zZWdtZW50ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiAqc2VnbWVudDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1BhcnNlcyBhIHNlZ21lbnQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV2ZW50PC9jb2RlPjwvZW0+IGFuZCBjb3BpZXMgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiBpbnRvIHRoZSBsb2NhdGlvbgorZ2l2ZW4gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnQ8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGV2ZW50IHRvIHBhcnNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWdtZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgcG9pbnRlciB0byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWV2ZW50LW5ldy10YWciPjwvYT48aDM+Z3N0X2V2ZW50X25ld190YWcgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICogICAgICAgICAgZ3N0X2V2ZW50X25ld190YWcgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqdGFnbGlzdDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dlbmVyYXRlcyBhIG1ldGFkYXRhIHRhZyBldmVudCBmcm9tIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnbGlzdDwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWdsaXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm1ldGFkYXRhIGxpc3QuIFRoZSBldmVudCB3aWxsIHRha2Ugb3duZXJzaGlwCitvZiB0aGUgdGFnbGlzdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZXZlbnQtcGFyc2UtdGFnIj48L2E+PGgzPmdzdF9ldmVudF9wYXJzZV90YWcgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3RhZyAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqKnRhZ2xpc3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitQYXJzZXMgYSB0YWcgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV2ZW50PC9jb2RlPjwvZW0+IGFuZCBzdG9yZXMgdGhlIHJlc3VsdHMgaW4gdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWdsaXN0PC9jb2RlPjwvZW0+IGxvY2F0aW9uLgorTm8gcmVmZXJlbmNlIHRvIHRoZSB0YWdsaXN0IHdpbGwgYmUgcmV0dXJuZWQsIGl0IHJlbWFpbnMgdmFsaWQgb25seSB1bnRpbAordGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPiBpcyBmcmVlZC4gRG9uJ3QgbW9kaWZ5IG9yIGZyZWUgdGhlIHRhZ2xpc3QsIG1ha2UgYSBjb3B5IGlmIHlvdQord2FudCB0byBtb2RpZnkgaXQgb3Igc3RvcmUgaXQgZm9yIGxhdGVyIHVzZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHRhZyBldmVudDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnbGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIG1ldGFkYXRhIGxpc3QuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZXZlbnQtbmV3LWJ1ZmZlci1zaXplIj48L2E+PGgzPmdzdF9ldmVudF9uZXdfYnVmZmVyX3NpemUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICogICAgICAgICAgZ3N0X2V2ZW50X25ld19idWZmZXJfc2l6ZSAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBtaW5zaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBtYXhzaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gYXN5bmM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGUgYSBuZXcgYnVmZmVyc2l6ZSBldmVudC4gVGhlIGV2ZW50IGlzIHNlbnQgZG93bnN0cmVhbSBhbmQgbm90aWZpZXMKK2VsZW1lbnRzIHRoYXQgdGhleSBzaG91bGQgcHJvdmlkZSBhIGJ1ZmZlciBvZiB0aGUgc3BlY2lmaWVkIGRpbWVuc2lvbnMuCis8L3A+Cis8cD4KK1doZW4gdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hc3luYzwvY29kZT48L2VtPiBmbGFnIGlzIHNldCwgYSB0aHJlYWQgYm91bmRhcnkgaXMgcHJlZmVycmVkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5idWZmZXIgZm9ybWF0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5taW5zaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm1pbmltdW0gYnVmZmVyIHNpemU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1heHNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bWF4aW11bSBidWZmZXIgc2l6ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YXN5bmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhyZWFkIGJlaGF2aW9yPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ldmVudC1wYXJzZS1idWZmZXItc2l6ZSI+PC9hPjxoMz5nc3RfZXZlbnRfcGFyc2VfYnVmZmVyX3NpemUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX2J1ZmZlcl9zaXplICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gKmZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKm1pbnNpemU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICptYXhzaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gKmFzeW5jPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0IHRoZSBmb3JtYXQsIG1pbnNpemUsIG1heHNpemUgYW5kIGFzeW5jLWZsYWcgaW4gdGhlIGJ1ZmZlcnNpemUgZXZlbnQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGV2ZW50IHRvIHF1ZXJ5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBwb2ludGVyIHRvIHN0b3JlIHRoZSBmb3JtYXQgaW4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1pbnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBwb2ludGVyIHRvIHN0b3JlIHRoZSBtaW5zaXplIGluLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYXhzaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgcG9pbnRlciB0byBzdG9yZSB0aGUgbWF4c2l6ZSBpbi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YXN5bmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBwb2ludGVyIHRvIHN0b3JlIHRoZSBhc3luYy1mbGFnIGluLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UU9TVHlwZSI+PC9hPjxoMz5lbnVtIEdzdFFPU1R5cGU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9RT1NfVFlQRV9PVkVSRkxPVyAgICAgICAgPSAwLAorICBHU1RfUU9TX1RZUEVfVU5ERVJGTE9XICAgICAgID0gMSwKKyAgR1NUX1FPU19UWVBFX1RIUk9UVExFICAgICAgICA9IDIKK30gR3N0UU9TVHlwZTsKKzwvcHJlPgorPHA+CitUaGUgZGlmZmVyZW50IHR5cGVzIG9mIFFvUyBldmVudHMgdGhhdCBjYW4gYmUgZ2l2ZW4gdG8gdGhlCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1xb3MiIHRpdGxlPSJnc3RfZXZlbnRfbmV3X3FvcyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZXZlbnRfbmV3X3FvcygpPC9jb2RlPjwvYT4gbWV0aG9kLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUU9TLVRZUEUtT1ZFUkZMT1c6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1FPU19UWVBFX09WRVJGTE9XPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgUW9TIGV2ZW50IHR5cGUgdGhhdCBpcyBwcm9kdWNlZCB3aGVuIGRvd25zdHJlYW0KKyAgIGVsZW1lbnRzIGFyZSBwcm9kdWNpbmcgZGF0YSB0b28gcXVpY2tseSBhbmQgdGhlIGVsZW1lbnQgY2FuJ3Qga2VlcCB1cAorICAgcHJvY2Vzc2luZyB0aGUgZGF0YS4gVXBzdHJlYW0gc2hvdWxkIHJlZHVjZSB0aGVpciBwcm9jZXNzaW5nIHJhdGUuIFRoaXMKKyAgIHR5cGUgaXMgYWxzbyB1c2VkIHdoZW4gYnVmZmVycyBhcnJpdmUgZWFybHkgb3IgaW4gdGltZS4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1RT1MtVFlQRS1VTkRFUkZMT1c6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1FPU19UWVBFX1VOREVSRkxPVzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIFFvUyBldmVudCB0eXBlIHRoYXQgaXMgcHJvZHVjZWQgd2hlbiBkb3duc3RyZWFtCisgICBlbGVtZW50cyBhcmUgcHJvZHVjaW5nIGRhdGEgdG9vIHNsb3dseSBhbmQgbmVlZCB0byBzcGVlZCB1cCB0aGVpciBwcm9jZXNzaW5nCisgICByYXRlLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVFPUy1UWVBFLVRIUk9UVExFOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9RT1NfVFlQRV9USFJPVFRMRTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIFFvUyBldmVudCB0eXBlIHRoYXQgaXMgcHJvZHVjZWQgd2hlbiB0aGUKKyAgIGFwcGxpY2F0aW9uIGVuYWJsZWQgdGhyb3R0bGluZyB0byBsaW1pdCB0aGUgZGF0YXJhdGUuCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZXZlbnQtbmV3LXFvcyI+PC9hPjxoMz5nc3RfZXZlbnRfbmV3X3FvcyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKiAgICAgICAgICBnc3RfZXZlbnRfbmV3X3FvcyAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RRT1NUeXBlIiB0aXRsZT0iZW51bSBHc3RRT1NUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UU9TVHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gcHJvcG9ydGlvbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWVEaWZmIiB0aXRsZT0iR3N0Q2xvY2tUaW1lRGlmZiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZURpZmY8L3NwYW4+PC9hPiBkaWZmPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRpbWVzdGFtcDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0FsbG9jYXRlIGEgbmV3IHFvcyBldmVudCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXMuCitUaGUgUU9TIGV2ZW50IGlzIGdlbmVyYXRlZCBpbiBhbiBlbGVtZW50IHRoYXQgd2FudHMgYW4gdXBzdHJlYW0KK2VsZW1lbnQgdG8gZWl0aGVyIHJlZHVjZSBvciBpbmNyZWFzZSBpdHMgcmF0ZSBiZWNhdXNlIG9mCitoaWdoL2xvdyBDUFUgbG9hZCBvciBvdGhlciByZXNvdXJjZSB1c2FnZSBzdWNoIGFzIG5ldHdvcmsgcGVyZm9ybWFuY2Ugb3IKK3Rocm90dGxpbmcuIFR5cGljYWxseSBzaW5rcyBnZW5lcmF0ZSB0aGVzZSBldmVudHMgZm9yIGVhY2ggYnVmZmVyCit0aGV5IHJlY2VpdmUuCis8L3A+Cis8cD4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+IGluZGljYXRlcyB0aGUgcmVhc29uIGZvciB0aGUgUW9TIGV2ZW50LiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULVFPUy1UWVBFLU9WRVJGTE9XOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfUU9TX1RZUEVfT1ZFUkZMT1c8L3NwYW4+PC9hPiBpcwordXNlZCB3aGVuIGEgYnVmZmVyIGFycml2ZWQgaW4gdGltZSBvciB3aGVuIHRoZSBzaW5rIGNhbm5vdCBrZWVwIHVwIHdpdGgKK3RoZSB1cHN0cmVhbSBkYXRhcmF0ZS4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1RT1MtVFlQRS1VTkRFUkZMT1c6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9RT1NfVFlQRV9VTkRFUkZMT1c8L3NwYW4+PC9hPiBpcyB3aGVuIHRoZSBzaW5rIGlzIG5vdAorcmVjZWl2aW5nIGJ1ZmZlcnMgZmFzdCBlbm91Z2ggYW5kIHRodXMgaGFzIHRvIGRyb3AgbGF0ZSBidWZmZXJzLiAKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtUU9TLVRZUEUtVEhST1RUTEU6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9RT1NfVFlQRV9USFJPVFRMRTwvc3Bhbj48L2E+IGlzIHVzZWQgd2hlbiB0aGUgZGF0YXJhdGUgaXMgYXJ0aWZpY2lhbGx5IGxpbWl0ZWQKK2J5IHRoZSBhcHBsaWNhdGlvbiwgZm9yIGV4YW1wbGUgdG8gcmVkdWNlIHBvd2VyIGNvbnN1bXB0aW9uLgorPC9wPgorPHA+Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJvcG9ydGlvbjwvY29kZT48L2VtPiBpbmRpY2F0ZXMgdGhlIHJlYWwtdGltZSBwZXJmb3JtYW5jZSBvZiB0aGUgc3RyZWFtaW5nIGluIHRoZQorZWxlbWVudCB0aGF0IGdlbmVyYXRlZCB0aGUgUW9TIGV2ZW50ICh1c3VhbGx5IHRoZSBzaW5rKS4gVGhlIHZhbHVlIGlzCitnZW5lcmFsbHkgY29tcHV0ZWQgYmFzZWQgb24gbW9yZSBsb25nIHRlcm0gc3RhdGlzdGljcyBhYm91dCB0aGUgc3RyZWFtcwordGltZXN0YW1wcyBjb21wYXJlZCB0byB0aGUgY2xvY2suCitBIHZhbHVlICZsdDsgMS4wIGluZGljYXRlcyB0aGF0IHRoZSB1cHN0cmVhbSBlbGVtZW50IGlzIHByb2R1Y2luZyBkYXRhIGZhc3RlcgordGhhbiByZWFsLXRpbWUuIEEgdmFsdWUgJmd0OyAxLjAgaW5kaWNhdGVzIHRoYXQgdGhlIHVwc3RyZWFtIGVsZW1lbnQgaXMgbm90Citwcm9kdWNpbmcgZGF0YSBmYXN0IGVub3VnaC4gMS4wIGlzIHRoZSBpZGVhbCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJvcG9ydGlvbjwvY29kZT48L2VtPiB2YWx1ZS4gVGhlCitwcm9wb3J0aW9uIHZhbHVlIGNhbiBzYWZlbHkgYmUgdXNlZCB0byBsb3dlciBvciBpbmNyZWFzZSB0aGUgcXVhbGl0eSBvZgordGhlIGVsZW1lbnQuCis8L3A+Cis8cD4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kaWZmPC9jb2RlPjwvZW0+IGlzIHRoZSBkaWZmZXJlbmNlIGFnYWluc3QgdGhlIGNsb2NrIGluIHJ1bm5pbmcgdGltZSBvZiB0aGUgbGFzdAorYnVmZmVyIHRoYXQgY2F1c2VkIHRoZSBlbGVtZW50IHRvIGdlbmVyYXRlIHRoZSBRT1MgZXZlbnQuIEEgbmVnYXRpdmUgdmFsdWUKK21lYW5zIHRoYXQgdGhlIGJ1ZmZlciB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50aW1lc3RhbXA8L2NvZGU+PC9lbT4gYXJyaXZlZCBpbiB0aW1lLiBBIHBvc2l0aXZlIHZhbHVlCitpbmRpY2F0ZXMgaG93IGxhdGUgdGhlIGJ1ZmZlciB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50aW1lc3RhbXA8L2NvZGU+PC9lbT4gd2FzLiBXaGVuIHRocm90dGxpbmcgaXMKK2VuYWJsZWQsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kaWZmPC9jb2RlPjwvZW0+IHdpbGwgYmUgc2V0IHRvIHRoZSByZXF1ZXN0ZWQgdGhyb3R0bGluZyBpbnRlcnZhbC4KKzwvcD4KKzxwPgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWVzdGFtcDwvY29kZT48L2VtPiBpcyB0aGUgdGltZXN0YW1wIG9mIHRoZSBsYXN0IGJ1ZmZlciB0aGF0IGNhdXNlIHRoZSBlbGVtZW50Cit0byBnZW5lcmF0ZSB0aGUgUU9TIGV2ZW50LiBJdCBpcyBleHByZXNzZWQgaW4gcnVubmluZyB0aW1lIGFuZCB0aHVzIGFuIGV2ZXIKK2luY3JlYXNpbmcgdmFsdWUuCis8L3A+Cis8cD4KK1RoZSB1cHN0cmVhbSBlbGVtZW50IGNhbiB1c2UgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kaWZmPC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZXN0YW1wPC9jb2RlPjwvZW0+IHZhbHVlcyB0byBkZWNpZGUKK3doZXRoZXIgdG8gcHJvY2VzcyBtb3JlIGJ1ZmZlcnMuIEZvciBwb3NzaXRpdmUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRpZmY8L2NvZGU+PC9lbT4sIGFsbCBidWZmZXJzIHdpdGgKK3RpbWVzdGFtcCAmbHQ7PSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZXN0YW1wPC9jb2RlPjwvZW0+ICsgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRpZmY8L2NvZGU+PC9lbT4gd2lsbCBjZXJ0YWlubHkgYXJyaXZlIGxhdGUgaW4gdGhlIHNpbmsKK2FzIHdlbGwuIEEgKG5lZ2F0aXZlKSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGlmZjwvY29kZT48L2VtPiB2YWx1ZSBzbyB0aGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50aW1lc3RhbXA8L2NvZGU+PC9lbT4gKyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGlmZjwvY29kZT48L2VtPiB3b3VsZCB5aWVsZCBhCityZXN1bHQgc21hbGxlciB0aGFuIDAgaXMgbm90IGFsbG93ZWQuCis8L3A+Cis8cD4KK1RoZSBhcHBsaWNhdGlvbiBjYW4gdXNlIGdlbmVyYWwgZXZlbnQgcHJvYmVzIHRvIGludGVyY2VwdCB0aGUgUW9TCitldmVudCBhbmQgaW1wbGVtZW50IGN1c3RvbSBhcHBsaWNhdGlvbiBzcGVjaWZpYyBRb1MgaGFuZGxpbmcuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgUW9TIHR5cGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByb3BvcnRpb248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHByb3BvcnRpb24gb2YgdGhlIHFvcyBtZXNzYWdlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kaWZmPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSB0aW1lIGRpZmZlcmVuY2Ugb2YgdGhlIGxhc3QgQ2xvY2sgc3luYzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZXN0YW1wPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSB0aW1lc3RhbXAgb2YgdGhlIGJ1ZmZlcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IFFPUyBldmVudC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ldmVudC1wYXJzZS1xb3MiPjwvYT48aDM+Z3N0X2V2ZW50X3BhcnNlX3FvcyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfZXZlbnRfcGFyc2VfcW9zICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RRT1NUeXBlIiB0aXRsZT0iZW51bSBHc3RRT1NUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UU9TVHlwZTwvc3Bhbj48L2E+ICp0eXBlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICpwcm9wb3J0aW9uPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZURpZmYiIHRpdGxlPSJHc3RDbG9ja1RpbWVEaWZmIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lRGlmZjwvc3Bhbj48L2E+ICpkaWZmPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+ICp0aW1lc3RhbXA8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgdGhlIHR5cGUsIHByb3BvcnRpb24sIGRpZmYgYW5kIHRpbWVzdGFtcCBpbiB0aGUgcW9zIGV2ZW50LiBTZWUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXFvcyIgdGl0bGU9ImdzdF9ldmVudF9uZXdfcW9zICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9ldmVudF9uZXdfcW9zKCk8L2NvZGU+PC9hPiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGlmZmVyZW50IFFvUyB2YWx1ZXMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGV2ZW50IHRvIHF1ZXJ5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgcG9pbnRlciB0byBzdG9yZSB0aGUgUW9TIHR5cGUgaW4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByb3BvcnRpb248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBwb2ludGVyIHRvIHN0b3JlIHRoZSBwcm9wb3J0aW9uIGluLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kaWZmPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgcG9pbnRlciB0byBzdG9yZSB0aGUgZGlmZiBpbi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZXN0YW1wPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgcG9pbnRlciB0byBzdG9yZSB0aGUgdGltZXN0YW1wIGluLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0U2Vla1R5cGUiPjwvYT48aDM+ZW51bSBHc3RTZWVrVHlwZTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBlbnVtIHsKKyAgLyogb25lIG9mIHRoZXNlICovCisgIEdTVF9TRUVLX1RZUEVfTk9ORSAgICAgICAgICAgID0gMCwKKyAgR1NUX1NFRUtfVFlQRV9DVVIgICAgICAgICAgICAgPSAxLAorICBHU1RfU0VFS19UWVBFX1NFVCAgICAgICAgICAgICA9IDIsCisgIEdTVF9TRUVLX1RZUEVfRU5EICAgICAgICAgICAgID0gMworfSBHc3RTZWVrVHlwZTsKKzwvcHJlPgorPHA+CitUaGUgZGlmZmVyZW50IHR5cGVzIG9mIHNlZWsgZXZlbnRzLiBXaGVuIGNvbnN0cnVjdGluZyBhIHNlZWsgZXZlbnQgd2l0aAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc2VlayIgdGl0bGU9ImdzdF9ldmVudF9uZXdfc2VlayAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZXZlbnRfbmV3X3NlZWsoKTwvY29kZT48L2E+IG9yIHdoZW4gZG9pbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtZG8tc2VlayIgdGl0bGU9ImdzdF9zZWdtZW50X2RvX3NlZWsgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3NlZ21lbnRfZG9fc2VlaygpPC9jb2RlPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1TRUVLLVRZUEUtTk9ORTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU0VFS19UWVBFX05PTkU8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPm5vIGNoYW5nZSBpbiBwb3NpdGlvbiBpcyByZXF1aXJlZAorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVNFRUstVFlQRS1DVVI6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NFRUtfVFlQRV9DVVI8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmNoYW5nZSByZWxhdGl2ZSB0byBjdXJyZW50bHkgY29uZmlndXJlZCBzZWdtZW50LiBUaGlzCisgICBjYW4ndCBiZSB1c2VkIHRvIHNlZWsgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgcGxheWJhY2sgcG9zaXRpb24gLSBkbyBhCisgICBwb3NpdGlvbiBxdWVyeSwgY2FsY3VsYXRlIHRoZSBkZXNpcmVkIHBvc2l0aW9uIGFuZCB0aGVuIGRvIGFuIGFic29sdXRlCisgICBwb3NpdGlvbiBzZWVrIGluc3RlYWQgaWYgdGhhdCdzIHdoYXQgeW91IHdhbnQgdG8gZG8uCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtU0VFSy1UWVBFLVNFVDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU0VFS19UWVBFX1NFVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YWJzb2x1dGUgcG9zaXRpb24gaXMgcmVxdWVzdGVkCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtU0VFSy1UWVBFLUVORDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU0VFS19UWVBFX0VORDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cmVsYXRpdmUgcG9zaXRpb24gdG8gZHVyYXRpb24gaXMgcmVxdWVzdGVkCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RTZWVrRmxhZ3MiPjwvYT48aDM+ZW51bSBHc3RTZWVrRmxhZ3M8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9TRUVLX0ZMQUdfTk9ORSAgICAgICAgICAgID0gMCwKKyAgR1NUX1NFRUtfRkxBR19GTFVTSCAgICAgICAgICAgPSAoMSAmbHQ7Jmx0OyAwKSwKKyAgR1NUX1NFRUtfRkxBR19BQ0NVUkFURSAgICAgICAgPSAoMSAmbHQ7Jmx0OyAxKSwKKyAgR1NUX1NFRUtfRkxBR19LRVlfVU5JVCAgICAgICAgPSAoMSAmbHQ7Jmx0OyAyKSwKKyAgR1NUX1NFRUtfRkxBR19TRUdNRU5UICAgICAgICAgPSAoMSAmbHQ7Jmx0OyAzKSwKKyAgR1NUX1NFRUtfRkxBR19TS0lQICAgICAgICAgICAgPSAoMSAmbHQ7Jmx0OyA0KQorfSBHc3RTZWVrRmxhZ3M7Cis8L3ByZT4KKzxwPgorRmxhZ3MgdG8gYmUgdXNlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2VlayIgdGl0bGU9ImdzdF9lbGVtZW50X3NlZWsgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfc2VlaygpPC9jb2RlPjwvYT4gb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc2VlayIgdGl0bGU9ImdzdF9ldmVudF9uZXdfc2VlayAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZXZlbnRfbmV3X3NlZWsoKTwvY29kZT48L2E+LiBBbGwgZmxhZ3MKK2NhbiBiZSB1c2VkIHRvZ2V0aGVyLgorPC9wPgorPHA+CitBIG5vbiBmbHVzaGluZyBzZWVrIG1pZ2h0IHRha2Ugc29tZSB0aW1lIHRvIHBlcmZvcm0gYXMgdGhlIGN1cnJlbnRseQorcGxheWluZyBkYXRhIGluIHRoZSBwaXBlbGluZSB3aWxsIG5vdCBiZSBjbGVhcmVkLgorPC9wPgorPHA+CitBbiBhY2N1cmF0ZSBzZWVrIG1pZ2h0IGJlIHNsb3dlciBmb3IgZm9ybWF0cyB0aGF0IGRvbid0IGhhdmUgYW55IGluZGV4ZXMKK29yIHRpbWVzdGFtcCBtYXJrZXJzIGluIHRoZSBzdHJlYW0uIFNwZWNpZnlpbmcgdGhpcyBmbGFnIG1pZ2h0IHJlcXVpcmUgYQorY29tcGxldGUgc2NhbiBvZiB0aGUgZmlsZSBpbiB0aG9zZSBjYXNlcy4KKzwvcD4KKzxwPgorV2hlbiBwZXJmb3JtaW5nIGEgc2VnbWVudCBzZWVrOiBhZnRlciB0aGUgcGxheWJhY2sgb2YgdGhlIHNlZ21lbnQgY29tcGxldGVzLAorbm8gRU9TIHdpbGwgYmUgZW1taXRlZCBieSB0aGUgZWxlbWVudCB0aGF0IHBlcmZvcm1lZCB0aGUgc2VlaywgYnV0IGEKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVNFR01FTlQtRE9ORTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX01FU1NBR0VfU0VHTUVOVF9ET05FPC9zcGFuPjwvYT4gbWVzc2FnZSB3aWxsIGJlIHBvc3RlZCBvbiB0aGUgYnVzIGJ5IHRoZSBlbGVtZW50LgorV2hlbiB0aGlzIG1lc3NhZ2UgaXMgcG9zdGVkLCBpdCBpcyBwb3NzaWJsZSB0byBzZW5kIGEgbmV3IHNlZWsgZXZlbnQgdG8KK2NvbnRpbnVlIHBsYXliYWNrLiBXaXRoIHRoaXMgc2VlayBtZXRob2QgaXQgaXMgcG9zc2libGUgdG8gcGVyZm9ybSBzZWFtbGVzcworbG9vcGluZyBvciBzaW1wbGUgbGluZWFyIGVkaXRpbmcuCis8L3A+Cis8cD4KK1doZW4gZG9pbmcgZmFzdCBmb3J3YXJkIChyYXRlICZndDsgMS4wKSBvciBmYXN0IHJldmVyc2UgKHJhdGUgJmx0OyAtMS4wKSB0cmlja21vZGUKK3BsYXliYWNrLCB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPkdTVF9TRUVLX0ZMQUdfU0tJUDwvY29kZT48L2VtPiBmbGFnIGNhbiBiZSB1c2VkIHRvIGluc3RydWN0IGRlY29kZXJzCithbmQgZGVtdXhlcnMgdG8gYWRqdXN0IHRoZSBwbGF5YmFjayByYXRlIGJ5IHNraXBwaW5nIGZyYW1lcy4gVGhpcyBjYW4gaW1wcm92ZQorcGVyZm9ybWFuY2UgYW5kIGRlY3JlYXNlIENQVSB1c2FnZSBiZWNhdXNlIG5vdCBhbGwgZnJhbWVzIG5lZWQgdG8gYmUgZGVjb2RlZC4KKzwvcD4KKzxwPgorQWxzbyBzZWUgcGFydC1zZWVraW5nLnR4dCBpbiB0aGUgR1N0cmVhbWVyIGRlc2lnbiBkb2N1bWVudGF0aW9uIGZvciBtb3JlCitkZXRhaWxzIG9uIHRoZSBtZWFuaW5nIG9mIHRoZXNlIGZsYWdzIGFuZCB0aGUgYmVoYXZpb3VyIGV4cGVjdGVkIG9mCitlbGVtZW50cyB0aGF0IGhhbmRsZSB0aGVtLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtU0VFSy1GTEFHLU5PTkU6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NFRUtfRkxBR19OT05FPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5ubyBmbGFnCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtU0VFSy1GTEFHLUZMVVNIOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TRUVLX0ZMQUdfRkxVU0g8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmZsdXNoIHBpcGVsaW5lCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtU0VFSy1GTEFHLUFDQ1VSQVRFOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TRUVLX0ZMQUdfQUNDVVJBVEU8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmFjY3VyYXRlIHBvc2l0aW9uIGlzIHJlcXVlc3RlZCwgdGhpcyBtaWdodAorICAgICAgICAgICAgICAgICAgICBiZSBjb25zaWRlcmFibHkgc2xvd2VyIGZvciBzb21lIGZvcm1hdHMuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtU0VFSy1GTEFHLUtFWS1VTklUOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TRUVLX0ZMQUdfS0VZX1VOSVQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnNlZWsgdG8gdGhlIG5lYXJlc3Qga2V5ZnJhbWUuIFRoaXMgbWlnaHQgYmUKKyAgICAgICAgICAgICAgICAgICAgZmFzdGVyIGJ1dCBsZXNzIGFjY3VyYXRlLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVNFRUstRkxBRy1TRUdNRU5UOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TRUVLX0ZMQUdfU0VHTUVOVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cGVyZm9ybSBhIHNlZ21lbnQgc2Vlay4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1TRUVLLUZMQUctU0tJUDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU0VFS19GTEFHX1NLSVA8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPndoZW4gZG9pbmcgZmFzdCBmb3dhcmQgb3IgZmFzdCByZXZlcnNlIHBsYXliYWNrLCBhbGxvdworICAgICAgICAgICAgICAgICAgICBlbGVtZW50cyB0byBza2lwIGZyYW1lcyBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYWxsCisgICAgICAgICAgICAgICAgICAgIGZyYW1lcy4gU2luY2UgMC4xMC4yMi4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ldmVudC1uZXctc2VlayI+PC9hPjxoMz5nc3RfZXZlbnRfbmV3X3NlZWsgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICogICAgICAgICAgZ3N0X2V2ZW50X25ld19zZWVrICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiByYXRlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdFNlZWtGbGFncyIgdGl0bGU9ImVudW0gR3N0U2Vla0ZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2Vla0ZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdFNlZWtUeXBlIiB0aXRsZT0iZW51bSBHc3RTZWVrVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZWtUeXBlPC9zcGFuPjwvYT4gc3RhcnRfdHlwZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc3RhcnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdFNlZWtUeXBlIiB0aXRsZT0iZW51bSBHc3RTZWVrVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZWtUeXBlPC9zcGFuPjwvYT4gc3RvcF90eXBlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBzdG9wPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQWxsb2NhdGUgYSBuZXcgc2VlayBldmVudCB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLgorPC9wPgorPHA+CitUaGUgc2VlayBldmVudCBjb25maWd1cmVzIHBsYXliYWNrIG9mIHRoZSBwaXBlbGluZSBiZXR3ZWVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydDwvY29kZT48L2VtPiB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RvcDwvY29kZT48L2VtPgorYXQgdGhlIHNwZWVkIGdpdmVuIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yYXRlPC9jb2RlPjwvZW0+LCBhbHNvIGNhbGxlZCBhIHBsYXliYWNrIHNlZ21lbnQuCitUaGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0PC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RvcDwvY29kZT48L2VtPiB2YWx1ZXMgYXJlIGV4cHJlc3NlZCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+LgorPC9wPgorPHA+CitBIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yYXRlPC9jb2RlPjwvZW0+IG9mIDEuMCBtZWFucyBub3JtYWwgcGxheWJhY2sgcmF0ZSwgMi4wIG1lYW5zIGRvdWJsZSBzcGVlZC4KK05lZ2F0aXZlcyB2YWx1ZXMgbWVhbnMgYmFja3dhcmRzIHBsYXliYWNrLiBBIHZhbHVlIG9mIDAuMCBmb3IgdGhlCityYXRlIGlzIG5vdCBhbGxvd2VkIGFuZCBzaG91bGQgYmUgYWNjb21wbGlzaGVkIGluc3RlYWQgYnkgUEFVU0lORyB0aGUKK3BpcGVsaW5lLgorPC9wPgorPHA+CitBIHBpcGVsaW5lIGhhcyBhIGRlZmF1bHQgcGxheWJhY2sgc2VnbWVudCBjb25maWd1cmVkIHdpdGggYSBzdGFydAorcG9zaXRpb24gb2YgMCwgYSBzdG9wIHBvc2l0aW9uIG9mIC0xIGFuZCBhIHJhdGUgb2YgMS4wLiBUaGUgY3VycmVudGx5Citjb25maWd1cmVkIHBsYXliYWNrIHNlZ21lbnQgY2FuIGJlIHF1ZXJpZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR1NULVFVRVJZLVNFR01FTlQ6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9RVUVSWV9TRUdNRU5UPC9zcGFuPjwvYT4uIAorPC9wPgorPHA+Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnRfdHlwZTwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0b3BfdHlwZTwvY29kZT48L2VtPiBzcGVjaWZ5IGhvdyB0byBhZGp1c3QgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIAorc3RhcnQgYW5kIHN0b3AgZmllbGRzIGluIHBsYXliYWNrIHNlZ21lbnQuIEFkanVzdG1lbnRzIGNhbiBiZSBtYWRlIHJlbGF0aXZlCitvciBhYnNvbHV0ZSB0byB0aGUgbGFzdCBjb25maWd1cmVkIHZhbHVlcy4gQSB0eXBlIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtU0VFSy1UWVBFLU5PTkU6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9TRUVLX1RZUEVfTk9ORTwvc3Bhbj48L2E+CittZWFucyB0aGF0IHRoZSBwb3NpdGlvbiBzaG91bGQgbm90IGJlIHVwZGF0ZWQuCis8L3A+Cis8cD4KK1doZW4gdGhlIHJhdGUgaXMgcG9zaXRpdmUgYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydDwvY29kZT48L2VtPiBoYXMgYmVlbiB1cGRhdGVkLCBwbGF5YmFjayB3aWxsIHN0YXJ0Citmcm9tIHRoZSBuZXdseSBjb25maWd1cmVkIHN0YXJ0IHBvc2l0aW9uLiAKKzwvcD4KKzxwPgorRm9yIG5lZ2F0aXZlIHJhdGVzLCBwbGF5YmFjayB3aWxsIHN0YXJ0IGZyb20gdGhlIG5ld2x5IGNvbmZpZ3VyZWQgc3RvcAorcG9zaXRpb24gKGlmIGFueSkuIElmIHRoZSBzdG9wIHBvc2l0aW9uIGlmIHVwZGF0ZWQsIGl0IG11c3QgYmUgZGlmZmVyZW50IGZyb20KKy0xIGZvciBuZWdhdGl2ZSByYXRlcy4KKzwvcD4KKzxwPgorSXQgaXMgbm90IHBvc3NpYmxlIHRvIHNlZWsgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgcGxheWJhY2sgcG9zaXRpb24sIHRvIGRvCit0aGlzLCBQQVVTRSB0aGUgcGlwZWxpbmUsIHF1ZXJ5IHRoZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uIHdpdGgKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHU1QtUVVFUlktUE9TSVRJT046Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9RVUVSWV9QT1NJVElPTjwvc3Bhbj48L2E+IGFuZCB1cGRhdGUgdGhlIHBsYXliYWNrIHNlZ21lbnQgY3VycmVudCBwb3NpdGlvbiB3aXRoIGEKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtU0VFSy1UWVBFLVNFVDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1NFRUtfVFlQRV9TRVQ8L3NwYW4+PC9hPiB0byB0aGUgZGVzaXJlZCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yYXRlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBuZXcgcGxheWJhY2sgcmF0ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBmb3JtYXQgb2YgdGhlIHNlZWsgdmFsdWVzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgb3B0aW9uYWwgc2VlayBmbGFnczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnRfdHlwZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgdHlwZSBhbmQgZmxhZ3MgZm9yIHRoZSBuZXcgc3RhcnQgcG9zaXRpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSB2YWx1ZSBvZiB0aGUgbmV3IHN0YXJ0IHBvc2l0aW9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdG9wX3R5cGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIHR5cGUgYW5kIGZsYWdzIGZvciB0aGUgbmV3IHN0b3AgcG9zaXRpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0b3A8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIHZhbHVlIG9mIHRoZSBuZXcgc3RvcCBwb3NpdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IHNlZWsgZXZlbnQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZXZlbnQtcGFyc2Utc2VlayI+PC9hPjxoMz5nc3RfZXZlbnRfcGFyc2Vfc2VlayAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfZXZlbnRfcGFyc2Vfc2VlayAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICpyYXRlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiAqZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RTZWVrRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFNlZWtGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZWtGbGFnczwvc3Bhbj48L2E+ICpmbGFnczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0U2Vla1R5cGUiIHRpdGxlPSJlbnVtIEdzdFNlZWtUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2Vla1R5cGU8L3NwYW4+PC9hPiAqc3RhcnRfdHlwZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKnN0YXJ0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RTZWVrVHlwZSIgdGl0bGU9ImVudW0gR3N0U2Vla1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWVrVHlwZTwvc3Bhbj48L2E+ICpzdG9wX3R5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpzdG9wPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUGFyc2VzIGEgc2VlayA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT4gYW5kIHN0b3JlcyB0aGUgcmVzdWx0cyBpbiB0aGUgZ2l2ZW4gcmVzdWx0IGxvY2F0aW9ucy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHNlZWsgZXZlbnQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJhdGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgcmF0ZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIHN0cmVhbSBmb3JtYXQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZsYWdzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RTZWVrRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFNlZWtGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZWtGbGFnczwvc3Bhbj48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydF90eXBlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RTZWVrVHlwZSIgdGl0bGU9ImVudW0gR3N0U2Vla1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWVrVHlwZTwvc3Bhbj48L2E+IG9mIHRoZSBzdGFydCBwb3NpdGlvbi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgc3RhcnQgcG9zdGlvbiBleHByZXNzZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RvcF90eXBlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RTZWVrVHlwZSIgdGl0bGU9ImVudW0gR3N0U2Vla1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWVrVHlwZTwvc3Bhbj48L2E+IG9mIHRoZSBzdG9wIHBvc2l0aW9uLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdG9wPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIHN0b3AgcG9zdGlvbiBleHByZXNzZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ldmVudC1uZXctbmF2aWdhdGlvbiI+PC9hPjxoMz5nc3RfZXZlbnRfbmV3X25hdmlnYXRpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICogICAgICAgICAgZ3N0X2V2ZW50X25ld19uYXZpZ2F0aW9uICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlIGEgbmV3IG5hdmlnYXRpb24gZXZlbnQgZnJvbSB0aGUgZ2l2ZW4gZGVzY3JpcHRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmRlc2NyaXB0aW9uIG9mIHRoZSBldmVudC4gVGhlIGV2ZW50IHdpbGwgdGFrZQorb3duZXJzaGlwIG9mIHRoZSBzdHJ1Y3R1cmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWV2ZW50LW5ldy1sYXRlbmN5Ij48L2E+PGgzPmdzdF9ldmVudF9uZXdfbGF0ZW5jeSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKiAgICAgICAgICBnc3RfZXZlbnRfbmV3X2xhdGVuY3kgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IGxhdGVuY3k8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGUgYSBuZXcgbGF0ZW5jeSBldmVudC4gVGhlIGV2ZW50IGlzIHNlbnQgdXBzdHJlYW0gZnJvbSB0aGUgc2lua3MgYW5kCitub3RpZmllcyBlbGVtZW50cyB0aGF0IHRoZXkgc2hvdWxkIGFkZCBhbiBhZGRpdGlvbmFsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sYXRlbmN5PC9jb2RlPjwvZW0+IHRvIHRoZQorcnVubmluZyB0aW1lIGJlZm9yZSBzeW5jaHJvbmlzaW5nIGFnYWluc3QgdGhlIGNsb2NrLgorPC9wPgorPHA+CitUaGUgbGF0ZW5jeSBpcyBtb3N0bHkgdXNlZCBpbiBsaXZlIHNpbmtzIGFuZCBpcyBhbHdheXMgZXhwcmVzc2VkIGluCit0aGUgdGltZSBmb3JtYXQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGF0ZW5jeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3IGxhdGVuY3kgdmFsdWU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWV2ZW50LXBhcnNlLWxhdGVuY3kiPjwvYT48aDM+Z3N0X2V2ZW50X3BhcnNlX2xhdGVuY3kgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX2xhdGVuY3kgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAqbGF0ZW5jeTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCB0aGUgbGF0ZW5jeSBpbiB0aGUgbGF0ZW5jeSBldmVudC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgZXZlbnQgdG8gcXVlcnk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxhdGVuY3k8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBwb2ludGVyIHRvIHN0b3JlIHRoZSBsYXRlbmN5IGluLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWV2ZW50LW5ldy1zdGVwIj48L2E+PGgzPmdzdF9ldmVudF9uZXdfc3RlcCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKiAgICAgICAgICBnc3RfZXZlbnRfbmV3X3N0ZXAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gYW1vdW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IHJhdGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBmbHVzaDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGludGVybWVkaWF0ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZSBhIG5ldyBzdGVwIGV2ZW50LiBUaGUgcHVycG9zZSBvZiB0aGUgc3RlcCBldmVudCBpcyB0byBpbnN0cnVjdCBhIHNpbmsKK3RvIHNraXAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFtb3VudDwvY29kZT48L2VtPiAoZXhwcmVzc2VkIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT4pIG9mIG1lZGlhLiBJdCBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQKK3N0ZXBwaW5nIHRocm91Z2ggdGhlIHZpZGVvIGZyYW1lIGJ5IGZyYW1lIG9yIGZvciBkb2luZyBmYXN0IHRyaWNrIG1vZGVzLgorPC9wPgorPHA+CitBIHJhdGUgb2YgJmx0Oz0gMC4wIGlzIG5vdCBhbGxvd2VkLCBwYXVzZSB0aGUgcGlwZWxpbmUgb3IgcmV2ZXJzZSB0aGUgcGxheWJhY2sKK2RpcmVjdGlvbiBvZiB0aGUgcGlwZWxpbmUgdG8gZ2V0IHRoZSBzYW1lIGVmZmVjdC4KKzwvcD4KKzxwPgorVGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbHVzaDwvY29kZT48L2VtPiBmbGFnIHdpbGwgY2xlYXIgYW55IHBlbmRpbmcgZGF0YSBpbiB0aGUgcGlwZWxpbmUgYmVmb3JlIHN0YXJ0aW5nCit0aGUgc3RlcCBvcGVyYXRpb24uCis8L3A+Cis8cD4KK1RoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW50ZXJtZWRpYXRlPC9jb2RlPjwvZW0+IGZsYWcgaW5zdHJ1Y3RzIHRoZSBwaXBlbGluZSB0aGF0IHRoaXMgc3RlcCBvcGVyYXRpb24gaXMKK3BhcnQgb2YgYSBsYXJnZXIgc3RlcCBvcGVyYXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBmb3JtYXQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFtb3VudDwvY29kZT48L2VtPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hbW91bnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGFtb3VudCBvZiBkYXRhIHRvIHN0ZXA8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJhdGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHN0ZXAgcmF0ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zmx1c2g8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Zmx1c2hpbmcgc3RlcHM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmludGVybWVkaWF0ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5pbnRlcm1lZGlhdGUgc3RlcHM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWV2ZW50LXBhcnNlLXN0ZXAiPjwvYT48aDM+Z3N0X2V2ZW50X3BhcnNlX3N0ZXAgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3N0ZXAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gKmZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqYW1vdW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICpyYXRlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gKmZsdXNoPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gKmludGVybWVkaWF0ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1BhcnNlIHRoZSBzdGVwIGV2ZW50LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV2ZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBldmVudCB0byBxdWVyeTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgcG9pbnRlciB0byBzdG9yZSB0aGUgZm9ybWF0IGluLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFtb3VudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gc3RvcmUgdGhlIGFtb3VudCBpbi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yYXRlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgcG9pbnRlciB0byBzdG9yZSB0aGUgcmF0ZSBpbi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbHVzaDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gc3RvcmUgdGhlIGZsdXNoIGJvb2xlYW4gaW4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW50ZXJtZWRpYXRlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgcG9pbnRlciB0byBzdG9yZSB0aGUgaW50ZXJtZWRpYXRlCitib29sZWFuIGluLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI0PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZXZlbnQtbmV3LXNpbmstbWVzc2FnZSI+PC9hPjxoMz5nc3RfZXZlbnRfbmV3X3NpbmtfbWVzc2FnZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKiAgICAgICAgICBnc3RfZXZlbnRfbmV3X3NpbmtfbWVzc2FnZSAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbXNnPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlIGEgbmV3IHNpbmstbWVzc2FnZSBldmVudC4gVGhlIHB1cnBvc2Ugb2YgdGhlIHNpbmstbWVzc2FnZSBldmVudCBpcwordG8gaW5zdHJ1Y3QgYSBzaW5rIHRvIHBvc3QgdGhlIG1lc3NhZ2UgY29udGFpbmVkIGluIHRoZSBldmVudCBzeW5jaHJvbml6ZWQKK3dpdGggdGhlIHN0cmVhbS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tc2c8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiB0byBiZSBwb3N0ZWQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWV2ZW50LXBhcnNlLXNpbmstbWVzc2FnZSI+PC9hPjxoMz5nc3RfZXZlbnRfcGFyc2Vfc2lua19tZXNzYWdlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9ldmVudF9wYXJzZV9zaW5rX21lc3NhZ2UgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICoqbXNnPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUGFyc2UgdGhlIHNpbmstbWVzc2FnZSBldmVudC4gVW5yZWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1zZzwvY29kZT48L2VtPiBhZnRlciB1c2FnZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgZXZlbnQgdG8gcXVlcnk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1zZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gc3RvcmUgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBpbi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ldmVudC1uZXctcmVjb25maWd1cmUiPjwvYT48aDM+Z3N0X2V2ZW50X25ld19yZWNvbmZpZ3VyZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKiAgICAgICAgICBnc3RfZXZlbnRfbmV3X3JlY29uZmlndXJlICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZSBhIG5ldyByZWNvbmZpZ3VyZSBldmVudC4gVGhlIHB1cnBvc2Ugb2YgdGhlIHJlY29uZmluZ3VyZSBldmVudCBpcwordG8gdHJhdmVsIHVwc3RyZWFtIGFuZCBtYWtlIGVsZW1lbnRzIHJlbmVnb3RpYXRlIHRoZWlyIGNhcHMgb3IgcmVjb25maWd1cmUKK3RoZWlyIGJ1ZmZlciBwb29scy4gVGhpcyBpcyB1c2VmdWwgd2hlbiBjaGFuZ2luZyBwcm9wZXJ0aWVzIG9uIGVsZW1lbnRzCitvciBjaGFuZ2luZyB0aGUgdG9wb2xvZ3kgb2YgdGhlIHBpcGVsaW5lLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjExLjA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ldmVudC1uZXctY2FwcyI+PC9hPjxoMz5nc3RfZXZlbnRfbmV3X2NhcHMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICogICAgICAgICAgZ3N0X2V2ZW50X25ld19jYXBzICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGUgYSBuZXcgQ0FQUyBldmVudCBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4uIFRoZSBjYXBzIGV2ZW50IGNhbiBvbmx5IHRyYXZlbCBkb3duc3RyZWFtCitzeW5jaHJvbml6ZWQgd2l0aCB0aGUgYnVmZmVyIGZsb3cgYW5kIGNvbnRhaW5zIHRoZSBmb3JtYXQgb2YgdGhlIGJ1ZmZlcnMKK3RoYXQgd2lsbCBmb2xsb3cgYWZ0ZXIgdGhlIGV2ZW50LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXcgQ0FQUyBldmVudC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ldmVudC1wYXJzZS1jYXBzIj48L2E+PGgzPmdzdF9ldmVudF9wYXJzZV9jYXBzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9ldmVudF9wYXJzZV9jYXBzICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICoqY2FwczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCB0aGUgY2FwcyBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPi4gVGhlIGNhcHMgcmVtYWlucyB2YWxpZCBhcyBsb25nIGFzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPiByZW1haW5zCit2YWxpZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgZXZlbnQgdG8gcGFyc2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBwb2ludGVyIHRvIHRoZSBjYXBzLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0RXZlbnQuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdEZpbHRlci5odG1sIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0RmlsdGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAzZGYyNwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdEZpbHRlci5odG1sCkBAIC0wLDAgKzEsMTU4IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0RmlsdGVyPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCIgdGl0bGU9IkdzdEZvcm1hdCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNnc3RyZWFtZXItR3N0RmlsdGVyLnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdEZpbHRlci5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0RmlsdGVyIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEZpbHRlci50b3Bfb2ZfcGFnZSI+PC9hPkdzdEZpbHRlcjwvc3Bhbj48L2gyPgorPHA+R3N0RmlsdGVyIOKAlCBBIHV0aWxpdHkgZnVuY3Rpb24gdG8gZmlsdGVyIEdMaXN0cy48L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0RmlsdGVyLnN5bm9wc2lzIj48L2E+PGgyPlN5bm9wc2lzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7CisKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RmlsdGVyLmh0bWwjR3N0RmlsdGVyRnVuYyIgdGl0bGU9IkdzdEZpbHRlckZ1bmMgKCkiPipHc3RGaWx0ZXJGdW5jPC9hPikgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBvYmo8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPiAqICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RmlsdGVyLmh0bWwjZ3N0LWZpbHRlci1ydW4iIHRpdGxlPSJnc3RfZmlsdGVyX3J1biAoKSI+Z3N0X2ZpbHRlcl9ydW48L2E+ICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RmlsdGVyLmh0bWwjR3N0RmlsdGVyRnVuYyIgdGl0bGU9IkdzdEZpbHRlckZ1bmMgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGaWx0ZXJGdW5jPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGZpcnN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0RmlsdGVyLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPgorPC9wPgorPGRpdiBjbGFzcz0iZXhhbXBsZSI+Cis8YSBuYW1lPSJpZDQzODM0NiI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZcKgOS7CoEZpbHRlcmluZyBhIGxpc3Q8L2I+PC9wPgorPGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgorICAgIEdMaXN0ICpub2RlOworICAgIEdzdE9iamVjdCAqcmVzdWx0ID0gTlVMTDsKKyAgICAKKyAgICBub2RlID0gZ3N0X2ZpbHRlcl9ydW4gKGxpc3QsIChHc3RGaWx0ZXJGdW5jKSBteV9maWx0ZXIsIFRSVUUsIE5VTEwpOworICAgIGlmIChub2RlKSB7CisgICAgICByZXN1bHQgPSBHU1RfT0JKRUNUIChub2RlLSZndDtkYXRhKTsKKyAgICAgIGdzdF9vYmplY3RfcmVmIChyZXN1bHQpOworICAgICAgZ19saXN0X2ZyZWUgKG5vZGUpOworICAgIH0KKyAgPC9wcmU+PC9kaXY+Cis8L2Rpdj4KKzxwPjxiciBjbGFzcz0iZXhhbXBsZS1icmVhayI+Cis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RGaWx0ZXIuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEZpbHRlckZ1bmMiPjwvYT48aDM+R3N0RmlsdGVyRnVuYyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAoKkdzdEZpbHRlckZ1bmMpICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gb2JqPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRnVuY3Rpb24gcHJvdG90eXBlIGZvciBhIGZpbHRlciBjYWxsYmFjayB0aGF0IGNhbiBiZSB1c2UgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGaWx0ZXIuaHRtbCNnc3QtZmlsdGVyLXJ1biIgdGl0bGU9ImdzdF9maWx0ZXJfcnVuICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9maWx0ZXJfcnVuKCk8L2NvZGU+PC9hPi4KK1RoZSBmdW5jdGlvbiBzaG91bGQgYXBwbHkgaXRzIGZpbHRlcmluZyB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqPC9jb2RlPjwvZW0+LiBBZGRpdGlvbmFsIGRhdGEgcGFzc2VkIHRvCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZpbHRlci5odG1sI2dzdC1maWx0ZXItcnVuIiB0aXRsZT0iZ3N0X2ZpbHRlcl9ydW4gKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2ZpbHRlcl9ydW4oKTwvY29kZT48L2E+IGFyZSBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmo8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG9iamVjdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmZpbHRlciBkYXRhPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBmb3Igc3VjY2Vzcy48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZmlsdGVyLXJ1biI+PC9hPjxoMz5nc3RfZmlsdGVyX3J1biAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPiAqICAgICAgICAgICAgIGdzdF9maWx0ZXJfcnVuICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RmlsdGVyLmh0bWwjR3N0RmlsdGVyRnVuYyIgdGl0bGU9IkdzdEZpbHRlckZ1bmMgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGaWx0ZXJGdW5jPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGZpcnN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSXRlcmF0ZXMgb3ZlciB0aGUgZWxlbWVudHMgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT4sIGNhbGxpbmcgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT4gd2l0aCB0aGUKK2xpc3QgaXRlbSBkYXRhIGZvciBlYWNoIGl0ZW0uICBJZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPiByZXR1cm5zIFRSVUUsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+IGlzCitwcmVwZW5kZWQgdG8gdGhlIGxpc3Qgb2YgcmVzdWx0cyByZXR1cm5lZC4gIElmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maXJzdDwvY29kZT48L2VtPiBpcyB0cnVlLAordGhlIHNlYXJjaCBpcyBoYWx0ZWQgYWZ0ZXIgdGhlIGZpcnN0IHJlc3VsdCBpcyBmb3VuZC4KKzwvcD4KKzxwPgorU2luY2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGaWx0ZXIuaHRtbCNnc3QtZmlsdGVyLXJ1biIgdGl0bGU9ImdzdF9maWx0ZXJfcnVuICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9maWx0ZXJfcnVuKCk8L2NvZGU+PC9hPiBrbm93cyBub3RoaW5nIGFib3V0IHRoZSB0eXBlIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+LCBubworcmVmZXJlbmNlIHdpbGwgYmUgdGFrZW4gKGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+IHJlZmVycyB0byBhbiBvYmplY3QpIGFuZCBubyBjb3B5IG9mCis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPiB3aWwgYmUgbWFkZSBpbiBhbnkgb3RoZXIgd2F5IHdoZW4gcHJlcGVuZGluZyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPiB0byB0aGUgbGlzdCBvZgorcmVzdWx0cy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbGlua2VkIGxpc3Q8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZm9yIGVhY2ggaXRlbS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iVGhlIGNhbGxiYWNrIGlzIHZhbGlkIG9ubHkgZHVyaW5nIHRoZSBjYWxsIHRvIHRoZSBtZXRob2QuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2NvcGUgY2FsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zmlyc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZmxhZyB0byBzdG9wIGV4ZWN1dGlvbiBhZnRlciBhIHN1Y2Nlc3NmdWwgaXRlbTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZXIgZGF0YS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iVGhpcyBwYXJhbWV0ZXIgaXMgYSAndXNlcl9kYXRhJywgZm9yIGNhbGxiYWNrczsgbWFueSBiaW5kaW5ncyBjYW4gcGFzcyBOVUxMIGhlcmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+Y2xvc3VyZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBsaXN0IG9mIHJlc3VsdHMuIEZyZWUgd2l0aCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNnLWxpc3QtZnJlZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX2xpc3RfZnJlZSgpPC9jb2RlPjwvYT4KK3doZW4gbm8gbG9uZ2VyIG5lZWRlZCAodGhlIGRhdGEgY29udGFpbmVkIGluIHRoZSBsaXN0IGlzIGEgZmxhdCBjb3B5CithbmQgZG9lcyBuZWVkIHRvIGJlIHVucmVmZXJlbmNlZCBvciBmcmVlZCkuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBjb250YWluZXIgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBjb250YWluZXI8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MxMDY1OAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sCkBAIC0wLDAgKzEsMzQ5IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0Rm9ybWF0PC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZpbHRlci5odG1sIiB0aXRsZT0iR3N0RmlsdGVyIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCIgdGl0bGU9IkdzdEdob3N0UGFkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItR3N0RmlsdGVyLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdEZvcm1hdC5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3RGb3JtYXQuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEZvcm1hdCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1Hc3RGb3JtYXQudG9wX29mX3BhZ2UiPjwvYT5Hc3RGb3JtYXQ8L3NwYW4+PC9oMj4KKzxwPkdzdEZvcm1hdCDigJQgRHluYW1pY2FsbHkgcmVnaXN0ZXIgbmV3IGRhdGEgZm9ybWF0czwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RGb3JtYXQuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKKworZW51bSAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij5Hc3RGb3JtYXQ8L2E+OworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dTVC1GT1JNQVQtUEVSQ0VOVC1NQVg6Q0FQUyIgdGl0bGU9IkdTVF9GT1JNQVRfUEVSQ0VOVF9NQVgiPkdTVF9GT1JNQVRfUEVSQ0VOVF9NQVg8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR1NULUZPUk1BVC1QRVJDRU5ULVNDQUxFOkNBUFMiIHRpdGxlPSJHU1RfRk9STUFUX1BFUkNFTlRfU0NBTEUiPkdTVF9GT1JNQVRfUEVSQ0VOVF9TQ0FMRTwvYT4KK3N0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXREZWZpbml0aW9uIiB0aXRsZT0ic3RydWN0IEdzdEZvcm1hdERlZmluaXRpb24iPkdzdEZvcm1hdERlZmluaXRpb248L2E+OworY29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI2dzdC1mb3JtYXQtZ2V0LW5hbWUiIHRpdGxlPSJnc3RfZm9ybWF0X2dldF9uYW1lICgpIj5nc3RfZm9ybWF0X2dldF9uYW1lPC9hPiAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdRdWFyazwvc3Bhbj48L2E+ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI2dzdC1mb3JtYXQtdG8tcXVhcmsiIHRpdGxlPSJnc3RfZm9ybWF0X3RvX3F1YXJrICgpIj5nc3RfZm9ybWF0X3RvX3F1YXJrPC9hPiAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjZ3N0LWZvcm1hdC1yZWdpc3RlciIgdGl0bGU9ImdzdF9mb3JtYXRfcmVnaXN0ZXIgKCkiPmdzdF9mb3JtYXRfcmVnaXN0ZXI8L2E+ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5pY2s8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZGVzY3JpcHRpb248L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNnc3QtZm9ybWF0LWdldC1ieS1uaWNrIiB0aXRsZT0iZ3N0X2Zvcm1hdF9nZXRfYnlfbmljayAoKSI+Z3N0X2Zvcm1hdF9nZXRfYnlfbmljazwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmljazwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjZ3N0LWZvcm1hdHMtY29udGFpbnMiIHRpdGxlPSJnc3RfZm9ybWF0c19jb250YWlucyAoKSI+Z3N0X2Zvcm1hdHNfY29udGFpbnM8L2E+ICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+ICpmb3JtYXRzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4pOworY29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXREZWZpbml0aW9uIiB0aXRsZT0ic3RydWN0IEdzdEZvcm1hdERlZmluaXRpb24iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rm9ybWF0RGVmaW5pdGlvbjwvc3Bhbj48L2E+ICogPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNnc3QtZm9ybWF0LWdldC1kZXRhaWxzIiB0aXRsZT0iZ3N0X2Zvcm1hdF9nZXRfZGV0YWlscyAoKSI+Z3N0X2Zvcm1hdF9nZXRfZGV0YWlsczwvYT4gICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI2dzdC1mb3JtYXQtaXRlcmF0ZS1kZWZpbml0aW9ucyIgdGl0bGU9ImdzdF9mb3JtYXRfaXRlcmF0ZV9kZWZpbml0aW9ucyAoKSI+Z3N0X2Zvcm1hdF9pdGVyYXRlX2RlZmluaXRpb25zPC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0Rm9ybWF0LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPgorR3N0Rm9ybWF0cyBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gcmVnaXN0ZXIgYSBuZXcgZm9ybWF0IHRvIHRoZSBnc3RyZWFtZXIKK2NvcmUuICBGb3JtYXRzIGNhbiBiZSB1c2VkIHRvIHBlcmZvcm0gc2Vla2luZyBvciBjb252ZXJzaW9ucy9xdWVyeQorb3BlcmF0aW9ucy4KKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0Rm9ybWF0Ij48L2E+PGgzPmVudW0gR3N0Rm9ybWF0PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGVudW0geworICBHU1RfRk9STUFUX1VOREVGSU5FRCAJPSAgMCwgLyogbXVzdCBiZSBmaXJzdCBpbiBsaXN0ICovCisgIEdTVF9GT1JNQVRfREVGQVVMVCAgIAk9ICAxLAorICBHU1RfRk9STUFUX0JZVEVTICAgCT0gIDIsCisgIEdTVF9GT1JNQVRfVElNRSAJPSAgMywKKyAgR1NUX0ZPUk1BVF9CVUZGRVJTwqA9ICA0LAorICBHU1RfRk9STUFUX1BFUkNFTlTCoD0gIDUKK30gR3N0Rm9ybWF0OworPC9wcmU+Cis8cD4KK1N0YW5kYXJkIHByZWRlZmluZWQgZm9ybWF0cworPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtRk9STUFULVVOREVGSU5FRDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRk9STUFUX1VOREVGSU5FRDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dW5kZWZpbmVkIGZvcm1hdAorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUZPUk1BVC1ERUZBVUxUOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9GT1JNQVRfREVGQVVMVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGRlZmF1bHQgZm9ybWF0IG9mIHRoZSBwYWQvZWxlbWVudC4gVGhpcyBjYW4gYmUKKyAgIHNhbXBsZXMgZm9yIHJhdyBhdWRpbywgZnJhbWVzL2ZpZWxkcyBmb3IgcmF3IHZpZGVvIChzb21lLCBidXQgbm90IGFsbCwKKyAgIGVsZW1lbnRzIHN1cHBvcnQgdGhpczsgdXNlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5HU1RfRk9STUFUX1RJTUU8L2NvZGU+PC9lbT4gaWYgeW91IGRvbid0IGhhdmUgYSBnb29kCisgICByZWFzb24gdG8gcXVlcnkgZm9yIHNhbXBsZXMvZnJhbWVzKQorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUZPUk1BVC1CWVRFUzpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRk9STUFUX0JZVEVTPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5ieXRlcworPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUZPUk1BVC1USU1FOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9GT1JNQVRfVElNRTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGltZSBpbiBuYW5vc2Vjb25kcworPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUZPUk1BVC1CVUZGRVJTOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9GT1JNQVRfQlVGRkVSUzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YnVmZmVycyAoZmV3LCBpZiBhbnksIGVsZW1lbnRzIGltcGxlbWVudCB0aGlzIGFzIG9mCisgICAgTWF5IDIwMDkpCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtRk9STUFULVBFUkNFTlQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0ZPUk1BVF9QRVJDRU5UPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wZXJjZW50YWdlIG9mIHN0cmVhbSAoZmV3LCBpZiBhbnksIGVsZW1lbnRzIGltcGxlbWVudAorICAgIHRoaXMgYXMgb2YgTWF5IDIwMDkpCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtRk9STUFULVBFUkNFTlQtTUFYOkNBUFMiPjwvYT48aDM+R1NUX0ZPUk1BVF9QRVJDRU5UX01BWDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZcKgR1NUX0ZPUk1BVF9QRVJDRU5UX01BWAkJR19HSU5UNjRfQ09OU1RBTlQgKDEwMDAwMDApCis8L3ByZT4KKzxwPgorVGhlIFBFUkNFTlQgZm9ybWF0IGlzIGJldHdlZW4gMCBhbmQgdGhpcyB2YWx1ZQorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtRk9STUFULVBFUkNFTlQtU0NBTEU6Q0FQUyI+PC9hPjxoMz5HU1RfRk9STUFUX1BFUkNFTlRfU0NBTEU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmXCoEdTVF9GT1JNQVRfUEVSQ0VOVF9TQ0FMRcKgR19HSU5UNjRfQ09OU1RBTlQgKDEwMDAwKQorPC9wcmU+Cis8cD4KK1RoZSB2YWx1ZSB1c2VkIHRvIHNjYWxlIGRvd24gdGhlIHJlcG9ydGVkIFBFUkNFTlQgZm9ybWF0IHZhbHVlIHRvCitpdHMgcmVhbCB2YWx1ZS4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0Rm9ybWF0RGVmaW5pdGlvbiI+PC9hPjxoMz5zdHJ1Y3QgR3N0Rm9ybWF0RGVmaW5pdGlvbjwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEZvcm1hdERlZmluaXRpb24geworICBHc3RGb3JtYXQgICAgdmFsdWU7CisgIGNvbnN0IGdjaGFyICpuaWNrOworICBjb25zdCBnY2hhciAqZGVzY3JpcHRpb247CisgIEdRdWFyayAgICAgICBxdWFyazsKK307Cis8L3ByZT4KKzxwPgorQSBmb3JtYXQgZGVmaW5pdGlvbgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RGb3JtYXREZWZpbml0aW9uLnZhbHVlIj48L2E+dmFsdWU8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSB1bmlxdWUgaWQgb2YgdGhpcyBmb3JtYXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y29uc3TCoDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RGb3JtYXREZWZpbml0aW9uLm5pY2siPjwvYT5uaWNrPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIHNob3J0IG5pY2sgb2YgdGhlIGZvcm1hdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jb25zdMKgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEZvcm1hdERlZmluaXRpb24uZGVzY3JpcHRpb24iPjwvYT5kZXNjcmlwdGlvbjwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBsb25nZXIgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RGb3JtYXREZWZpbml0aW9uLnF1YXJrIj48L2E+cXVhcms8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgcXVhcmsgZm9yIHRoZSBuaWNrPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWZvcm1hdC1nZXQtbmFtZSI+PC9hPjxoMz5nc3RfZm9ybWF0X2dldF9uYW1lICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgIGdzdF9mb3JtYXRfZ2V0X25hbWUgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCBhIHByaW50YWJsZSBuYW1lIGZvciB0aGUgZ2l2ZW4gZm9ybWF0LiBEbyBub3QgbW9kaWZ5IG9yIGZyZWUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHJlZmVyZW5jZSB0byB0aGUgc3RhdGljIG5hbWUgb2YgdGhlIGZvcm1hdCBvciBOVUxMIGlmCit0aGUgZm9ybWF0IGlzIHVua25vd24uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWZvcm1hdC10by1xdWFyayI+PC9hPjxoMz5nc3RfZm9ybWF0X3RvX3F1YXJrICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HUXVhcms8L3NwYW4+PC9hPiAgICAgICAgICAgICAgZ3N0X2Zvcm1hdF90b19xdWFyayAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0IHRoZSB1bmlxdWUgcXVhcmsgZm9yIHRoZSBnaXZlbiBmb3JtYXQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcXVhcmsgYXNzb2NpYXRlZCB3aXRoIHRoZSBmb3JtYXQgb3IgMCBpZiB0aGUgZm9ybWF0CitpcyB1bmtub3duLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1mb3JtYXQtcmVnaXN0ZXIiPjwvYT48aDM+Z3N0X2Zvcm1hdF9yZWdpc3RlciAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiAgICAgICAgICAgZ3N0X2Zvcm1hdF9yZWdpc3RlciAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuaWNrPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmRlc2NyaXB0aW9uPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlIGEgbmV3IEdzdEZvcm1hdCBiYXNlZCBvbiB0aGUgbmljayBvciByZXR1cm4gYW4KK2FscmVhZHkgcmVnaXN0ZXJlZCBmb3JtYXQgd2l0aCB0aGF0IG5pY2suCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmljazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgbmljayBvZiB0aGUgbmV3IGZvcm1hdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzY3JpcHRpb248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBuZXcgZm9ybWF0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBuZXcgR3N0Rm9ybWF0IG9yIGFuIGFscmVhZHkgcmVnaXN0ZXJlZCBmb3JtYXQKK3dpdGggdGhlIHNhbWUgbmljay4KK01UIHNhZmUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWZvcm1hdC1nZXQtYnktbmljayI+PC9hPjxoMz5nc3RfZm9ybWF0X2dldF9ieV9uaWNrICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+ICAgICAgICAgICBnc3RfZm9ybWF0X2dldF9ieV9uaWNrICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5pY2s8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZXR1cm4gdGhlIGZvcm1hdCByZWdpc3RlcmVkIHdpdGggdGhlIGdpdmVuIG5pY2suCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmljazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgbmljayBvZiB0aGUgZm9ybWF0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGZvcm1hdCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uaWNrPC9jb2RlPjwvZW0+IG9yIEdTVF9GT1JNQVRfVU5ERUZJTkVECitpZiB0aGUgZm9ybWF0IHdhcyBub3QgcmVnaXN0ZXJlZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZm9ybWF0cy1jb250YWlucyI+PC9hPjxoMz5nc3RfZm9ybWF0c19jb250YWlucyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfZm9ybWF0c19jb250YWlucyAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiAqZm9ybWF0czwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2VlIGlmIHRoZSBnaXZlbiBmb3JtYXQgaXMgaW5zaWRlIHRoZSBmb3JtYXQgYXJyYXkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0czwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgZm9ybWF0IGFycmF5IHRvIHNlYXJjaDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBmb3JtYXQgdG8gZmluZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIGZvcm1hdCBpcyBmb3VuZCBpbnNpZGUgdGhlIGFycmF5PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWZvcm1hdC1nZXQtZGV0YWlscyI+PC9hPjxoMz5nc3RfZm9ybWF0X2dldF9kZXRhaWxzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdERlZmluaXRpb24iIHRpdGxlPSJzdHJ1Y3QgR3N0Rm9ybWF0RGVmaW5pdGlvbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RGb3JtYXREZWZpbml0aW9uPC9zcGFuPjwvYT4gKiBnc3RfZm9ybWF0X2dldF9kZXRhaWxzICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0IGRldGFpbHMgYWJvdXQgdGhlIGdpdmVuIGZvcm1hdC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGZvcm1hdCB0byBnZXQgZGV0YWlscyBvZjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdERlZmluaXRpb24iIHRpdGxlPSJzdHJ1Y3QgR3N0Rm9ybWF0RGVmaW5pdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdERlZmluaXRpb248L3NwYW4+PC9hPiBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPiBvciBOVUxMIG9uIGZhaWx1cmUuCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1mb3JtYXQtaXRlcmF0ZS1kZWZpbml0aW9ucyI+PC9hPjxoMz5nc3RfZm9ybWF0X2l0ZXJhdGVfZGVmaW5pdGlvbnMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICogICAgICAgZ3N0X2Zvcm1hdF9pdGVyYXRlX2RlZmluaXRpb25zICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitJdGVyYXRlIGFsbCB0aGUgcmVnaXN0ZXJlZCBmb3JtYXRzLiBUaGUgZm9ybWF0IGRlZmluaXRpb24gaXMgcmVhZAorb25seS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgR3N0SXRlcmF0b3Igb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXREZWZpbml0aW9uIiB0aXRsZT0ic3RydWN0IEdzdEZvcm1hdERlZmluaXRpb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXREZWZpbml0aW9uPC9zcGFuPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0Rm9ybWF0LnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YWNiMzMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbApAQCAtMCwwICsxLDYzNiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdzdEdFcnJvcjwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3RHRXJyb3Iuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItR3N0R0Vycm9yLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RHRXJyb3IiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItR3N0R0Vycm9yLnRvcF9vZl9wYWdlIj48L2E+R3N0R0Vycm9yPC9zcGFuPjwvaDI+Cis8cD5Hc3RHRXJyb3Ig4oCUIENhdGVnb3JpemVkIGVycm9yIG1lc3NhZ2VzPC9wPgorPC90ZD4KKzx0ZCB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgorPC90cj48L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEdFcnJvci5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisjaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OworCitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR3N0Q29yZUVycm9yIiB0aXRsZT0iZW51bSBHc3RDb3JlRXJyb3IiPkdzdENvcmVFcnJvcjwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR3N0TGlicmFyeUVycm9yIiB0aXRsZT0iZW51bSBHc3RMaWJyYXJ5RXJyb3IiPkdzdExpYnJhcnlFcnJvcjwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR3N0UmVzb3VyY2VFcnJvciIgdGl0bGU9ImVudW0gR3N0UmVzb3VyY2VFcnJvciI+R3N0UmVzb3VyY2VFcnJvcjwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR3N0U3RyZWFtRXJyb3IiIHRpdGxlPSJlbnVtIEdzdFN0cmVhbUVycm9yIj5Hc3RTdHJlYW1FcnJvcjwvYT47CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUNPUkUtRVJST1I6Q0FQUyIgdGl0bGU9IkdTVF9DT1JFX0VSUk9SIj5HU1RfQ09SRV9FUlJPUjwvYT4KKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtTElCUkFSWS1FUlJPUjpDQVBTIiB0aXRsZT0iR1NUX0xJQlJBUllfRVJST1IiPkdTVF9MSUJSQVJZX0VSUk9SPC9hPgorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1SRVNPVVJDRS1FUlJPUjpDQVBTIiB0aXRsZT0iR1NUX1JFU09VUkNFX0VSUk9SIj5HU1RfUkVTT1VSQ0VfRVJST1I8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVNUUkVBTS1FUlJPUjpDQVBTIiB0aXRsZT0iR1NUX1NUUkVBTV9FUlJPUiI+R1NUX1NUUkVBTV9FUlJPUjwvYT4KKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtRVJST1ItU1lTVEVNOkNBUFMiIHRpdGxlPSJHU1RfRVJST1JfU1lTVEVNIj5HU1RfRVJST1JfU1lTVEVNPC9hPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI2dzdC1lcnJvci1nZXQtbWVzc2FnZSIgdGl0bGU9ImdzdF9lcnJvcl9nZXRfbWVzc2FnZSAoKSI+Z3N0X2Vycm9yX2dldF9tZXNzYWdlPC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUXVhcms8L3NwYW4+PC9hPiBkb21haW48L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gY29kZTwvY29kZT48L2VtPik7Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEdFcnJvci5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK0dTdHJlYW1lciBlbGVtZW50cyBjYW4gdGhyb3cgbm9uLWZhdGFsIHdhcm5pbmdzIGFuZCBmYXRhbCBlcnJvcnMuCitIaWdoZXItbGV2ZWwgZWxlbWVudHMgYW5kIGFwcGxpY2F0aW9ucyBjYW4gcHJvZ3JhbWF0aWNhbGx5IGZpbHRlcgordGhlIG9uZXMgdGhleSBhcmUgaW50ZXJlc3RlZCBpbiBvciBjYW4gcmVjb3ZlciBmcm9tLAorYW5kIGhhdmUgYSBkZWZhdWx0IGhhbmRsZXIgaGFuZGxlIHRoZSByZXN0IG9mIHRoZW0uCis8L3A+Cis8cD4KK1RoZSByZXN0IG9mIHRoaXMgc2VjdGlvbiB3aWxsIHVzZSB0aGUgdGVybSA8c3BhbiBjbGFzcz0icXVvdGUiPuKAnDxzcGFuIGNsYXNzPSJxdW90ZSI+ZXJyb3I8L3NwYW4+4oCdPC9zcGFuPgordG8gbWVhbiBib3RoIChub24tZmF0YWwpIHdhcm5pbmdzIGFuZCAoZmF0YWwpIGVycm9yczsgdGhleSBhcmUgdHJlYXRlZAorc2ltaWxhcmx5LgorPC9wPgorPHA+CitFcnJvcnMgZnJvbSBlbGVtZW50cyBhcmUgdGhlIGNvbWJpbmF0aW9uIG9mIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1FcnJvci1SZXBvcnRpbmcuaHRtbCNHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRXJyb3I8L3NwYW4+PC9hPiBhbmQgYSBkZWJ1ZyBzdHJpbmcuCitUaGUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1FcnJvci1SZXBvcnRpbmcuaHRtbCNHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRXJyb3I8L3NwYW4+PC9hPiBjb250YWluczoKKzwvcD4KKzxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+YSBkb21haW4gdHlwZTogQ09SRSwgTElCUkFSWSwgUkVTT1VSQ0Ugb3IgU1RSRUFNPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5hIGNvZGU6IGFuIGVudW0gdmFsdWUgc3BlY2lmaWMgdG8gdGhlIGRvbWFpbjwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+YSB0cmFuc2xhdGVkLCBodW1hbi1yZWFkYWJsZSBtZXNzYWdlPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5hIG5vbi10cmFuc2xhdGVkIGFkZGl0aW9uYWwgZGVidWcgc3RyaW5nLCB3aGljaCBhbHNvIGNvbnRhaW5zPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5maWxlIGFuZCBsaW5lIGluZm9ybWF0aW9uPC9wPjwvbGk+Cis8L3VsPjwvZGl2PgorPHA+Cis8L3A+Cis8cD4KK0VsZW1lbnRzIGRvIG5vdCBoYXZlIHRoZSBjb250ZXh0IHJlcXVpcmVkIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGgKK2Vycm9ycy4gIEFzIHN1Y2gsIHRoZXkgc2hvdWxkIG9ubHkgaW5mb3JtIGFib3V0IGVycm9ycywgYW5kIHN0b3AgdGhlaXIKK3Byb2Nlc3NpbmcuICBJbiBzaG9ydCwgYW4gZWxlbWVudCBkb2Vzbid0IGtub3cgd2hhdCBpdCBpcyBiZWluZyB1c2VkIGZvci4KKzwvcD4KKzxwPgorSXQgaXMgdGhlIGFwcGxpY2F0aW9uIG9yIGNvbXBvdW5kIGVsZW1lbnQgdXNpbmcgdGhlIGdpdmVuIGVsZW1lbnQgdGhhdAoraGFzIG1vcmUgY29udGV4dCBhYm91dCB0aGUgdXNlIG9mIHRoZSBlbGVtZW50LiBFcnJvcnMgY2FuIGJlIHJlY2VpdmVkIGJ5CitsaXN0ZW5pbmcgdG8gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+IG9mIHRoZSBlbGVtZW50L3BpcGVsaW5lIGZvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gb2JqZWN0cyB3aXRoCit0aGUgdHlwZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1FUlJPUjpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX01FU1NBR0VfRVJST1I8L2NvZGU+PC9hPiBvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1XQVJOSU5HOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTUVTU0FHRV9XQVJOSU5HPC9jb2RlPjwvYT4uIFRoZSB0aHJvd24gZXJyb3JzIHNob3VsZAorYmUgaW5zcGVjdGVkLCBhbmQgZmlsdGVyZWQgaWYgYXBwcm9wcmlhdGUuCis8L3A+Cis8cD4KK0FuIGFwcGxpY2F0aW9uIGlzIGV4cGVjdGVkIHRvLCBieSBkZWZhdWx0LCBwcmVzZW50IHRoZSB1c2VyIHdpdGggYQorZGlhbG9nIGJveCAob3IgYW4gZXF1aXZhbGVudCkgc2hvd2luZyB0aGUgZXJyb3IgbWVzc2FnZS4gIFRoZSBkaWFsb2cKK3Nob3VsZCBhbHNvIGFsbG93IGEgd2F5IHRvIGdldCBhdCB0aGUgYWRkaXRpb25hbCBkZWJ1ZyBpbmZvcm1hdGlvbiwKK3NvIHRoZSB1c2VyIGNhbiBwcm92aWRlIGJ1ZyByZXBvcnRpbmcgaW5mb3JtYXRpb24uCis8L3A+Cis8cD4KK0EgY29tcG91bmQgZWxlbWVudCBpcyBleHBlY3RlZCB0byBmb3J3YXJkIGVycm9ycyBieSBkZWZhdWx0IGhpZ2hlciB1cAordGhlIGhpZXJhcmNoeTsgdGhpcyBpcyBkb25lIGJ5IGRlZmF1bHQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvciBvdGhlciB0eXBlcworb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+LgorPC9wPgorPHA+CitXaGVuIGFwcGxpY2F0aW9ucyBvciBjb21wb3VuZCBlbGVtZW50cyB0cmlnZ2VyIGVycm9ycyB0aGF0IHRoZXkgY2FuCityZWNvdmVyIGZyb20sIHRoZXkgY2FuIGZpbHRlciBvdXQgdGhlc2UgZXJyb3JzIGFuZCB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbi4KK0ZvciBleGFtcGxlLCBhbiBhcHBsaWNhdGlvbiB0aGF0IGdldHMgYW4gZXJyb3IgZnJvbSB4dmltYWdlc2luawordGhhdCBpbmRpY2F0ZXMgYWxsIFhWaWRlbyBwb3J0cyBhcmUgdGFrZW4sIHRoZSBhcHBsaWNhdGlvbiBjYW4gYXR0ZW1wdAordG8gdXNlIGFub3RoZXIgc2luayBpbnN0ZWFkLgorPC9wPgorPHA+CitFbGVtZW50cyB0aHJvdyBlcnJvcnMgdXNpbmcgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtRVJST1I6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0VSUk9SKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRUxFTUVOVF9FUlJPUjwvc3Bhbj48L2E+IGNvbnZlbmllbmNlIG1hY3JvOgorPC9wPgorPHA+Cis8L3A+Cis8ZGl2IGNsYXNzPSJleGFtcGxlIj4KKzxhIG5hbWU9ImlkNDYxMzQyIj48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5FeGFtcGxlwqA3LsKgVGhyb3dpbmcgYW4gZXJyb3I8L2I+PC9wPgorPGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgorICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBOT1RfRk9VTkQsCisgICAgICAoXygiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iKSksIChOVUxMKSk7CisgIDwvcHJlPjwvZGl2PgorPC9kaXY+Cis8cD48YnIgY2xhc3M9ImV4YW1wbGUtYnJlYWsiPgorPC9wPgorPHA+CitUaGluZ3MgdG8ga2VlcCBpbiBtaW5kOgorPC9wPgorPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5Eb24ndCBnbyBvZmYgaW52ZW50aW5nIG5ldyBlcnJvciBjb2Rlcy4gIFRoZSBvbmVzCisgICAgY3VycmVudGx5IHByb3ZpZGVkIHNob3VsZCBiZSBlbm91Z2guICBJZiB5b3UgZmluZCB5b3VyIHR5cGUgb2YgZXJyb3IKKyAgICBkb2VzIG5vdCBmaXQgdGhlIGN1cnJlbnQgY29kZXMsIHlvdSBzaG91bGQgdXNlIEZBSUxFRC48L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPkRvbid0IHByb3ZpZGUgYSBtZXNzYWdlIGlmIHRoZSBkZWZhdWx0IG9uZSBzdWZmaWNlcy4KKyAgICB0aGlzIGtlZXBzIG1lc3NhZ2VzIG1vcmUgdW5pZm9ybS4gIFVzZSAoTlVMTCkgLSBub3QgZm9yZ2V0dGluZyB0aGUKKyAgICBwYXJlbnRoZXNlcy48L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPklmIHlvdSBkbyBzdXBwbHkgYSBjdXN0b20gbWVzc2FnZSwgaXQgc2hvdWxkIGJlCisgICAgbWFya2VkIGZvciB0cmFuc2xhdGlvbi4gIFRoZSBtZXNzYWdlIHNob3VsZCBzdGFydCB3aXRoIGEgY2FwaXRhbAorICAgIGFuZCBlbmQgd2l0aCBhIHBlcmlvZC4gIFRoZSBtZXNzYWdlIHNob3VsZCBkZXNjcmliZSB0aGUgZXJyb3IgaW4gc2hvcnQsCisgICAgaW4gYSBodW1hbi1yZWFkYWJsZSBmb3JtLCBhbmQgd2l0aG91dCBhbnkgY29tcGxleCB0ZWNobmljYWwgdGVybXMuCisgICAgQSB1c2VyIGludGVyZmFjZSB3aWxsIHByZXNlbnQgdGhpcyBtZXNzYWdlIGFzIHRoZSBmaXJzdCB0aGluZyBhIHVzZXIKKyAgICBzZWVzLiAgRGV0YWlscywgdGVjaG5pY2FsIGluZm8sIC4uLiBzaG91bGQgZ28gaW4gdGhlIGRlYnVnIHN0cmluZy4KKyAgPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5UaGUgZGVidWcgc3RyaW5nIGNhbiBiZSBhcyB5b3UgbGlrZS4gIEFnYWluLCB1c2UgKE5VTEwpCisgICAgaWYgdGhlcmUncyBub3RoaW5nIHRvIGFkZCAtIGZpbGUgYW5kIGxpbmUgbnVtYmVyIHdpbGwgc3RpbGwgYmUKKyAgICBwYXNzZWQuICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1FUlJPUi1TWVNURU06Q0FQUyIgdGl0bGU9IkdTVF9FUlJPUl9TWVNURU0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRVJST1JfU1lTVEVNPC9zcGFuPjwvYT4gY2FuIGJlIHVzZWQgYXMgYSBzaG9ydGN1dCB0byBnaXZlCisgICAgZGVidWcgaW5mb3JtYXRpb24gb24gYSBzeXN0ZW0gY2FsbCBlcnJvci48L3A+PC9saT4KKzwvdWw+PC9kaXY+Cis8cD4KKzwvcD4KKzxwPgorTGFzdCByZXZpZXdlZCBvbiAyMDA2LTA5LTE1ICgwLjEwLjEwKQorPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0R0Vycm9yLmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RDb3JlRXJyb3IiPjwvYT48aDM+ZW51bSBHc3RDb3JlRXJyb3I8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9DT1JFX0VSUk9SX0ZBSUxFRCA9IDEsCisgIEdTVF9DT1JFX0VSUk9SX1RPT19MQVpZLAorICBHU1RfQ09SRV9FUlJPUl9OT1RfSU1QTEVNRU5URUQsCisgIEdTVF9DT1JFX0VSUk9SX1NUQVRFX0NIQU5HRSwKKyAgR1NUX0NPUkVfRVJST1JfUEFELAorICBHU1RfQ09SRV9FUlJPUl9USFJFQUQsCisgIEdTVF9DT1JFX0VSUk9SX05FR09USUFUSU9OLAorICBHU1RfQ09SRV9FUlJPUl9FVkVOVCwKKyAgR1NUX0NPUkVfRVJST1JfU0VFSywKKyAgR1NUX0NPUkVfRVJST1JfQ0FQUywKKyAgR1NUX0NPUkVfRVJST1JfVEFHLAorICBHU1RfQ09SRV9FUlJPUl9NSVNTSU5HX1BMVUdJTiwKKyAgR1NUX0NPUkVfRVJST1JfQ0xPQ0ssCisgIEdTVF9DT1JFX0VSUk9SX0RJU0FCTEVELAorICBHU1RfQ09SRV9FUlJPUl9OVU1fRVJST1JTCit9IEdzdENvcmVFcnJvcjsKKzwvcHJlPgorPHA+CitDb3JlIGVycm9ycyBhcmUgZXJyb3JzIGluc2lkZSB0aGUgY29yZSBHU3RyZWFtZXIgbGlicmFyeS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUNPUkUtRVJST1ItRkFJTEVEOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9DT1JFX0VSUk9SX0ZBSUxFRDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBnZW5lcmFsIGVycm9yIHdoaWNoIGRvZXNuJ3QgZml0IGluIGFueSBvdGhlcgorY2F0ZWdvcnkuICBNYWtlIHN1cmUgeW91IGFkZCBhIGN1c3RvbSBtZXNzYWdlIHRvIHRoZSBlcnJvciBjYWxsLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUNPUkUtRVJST1ItVE9PLUxBWlk6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0NPUkVfRVJST1JfVE9PX0xBWlk8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmRvIG5vdCB1c2UgdGhpcyBleGNlcHQgYXMgYSBwbGFjZWhvbGRlciBmb3IKK2RlY2lkaW5nIHdoZXJlIHRvIGdvIHdoaWxlIGRldmVsb3BpbmcgY29kZS4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1DT1JFLUVSUk9SLU5PVC1JTVBMRU1FTlRFRDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQ09SRV9FUlJPUl9OT1RfSU1QTEVNRU5URUQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZSB0aGlzIHdoZW4geW91IGRvIG5vdCB3YW50IHRvIGltcGxlbWVudAordGhpcyBmdW5jdGlvbmFsaXR5IHlldC4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1DT1JFLUVSUk9SLVNUQVRFLUNIQU5HRTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQ09SRV9FUlJPUl9TVEFURV9DSEFOR0U8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZWQgZm9yIHN0YXRlIGNoYW5nZSBlcnJvcnMuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQ09SRS1FUlJPUi1QQUQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0NPUkVfRVJST1JfUEFEPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VkIGZvciBwYWQtcmVsYXRlZCBlcnJvcnMuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQ09SRS1FUlJPUi1USFJFQUQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0NPUkVfRVJST1JfVEhSRUFEPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VkIGZvciB0aHJlYWQtcmVsYXRlZCBlcnJvcnMuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQ09SRS1FUlJPUi1ORUdPVElBVElPTjpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQ09SRV9FUlJPUl9ORUdPVElBVElPTjwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlZCBmb3IgbmVnb3RpYXRpb24tcmVsYXRlZCBlcnJvcnMuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQ09SRS1FUlJPUi1FVkVOVDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQ09SRV9FUlJPUl9FVkVOVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlZCBmb3IgZXZlbnQtcmVsYXRlZCBlcnJvcnMuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQ09SRS1FUlJPUi1TRUVLOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9DT1JFX0VSUk9SX1NFRUs8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZWQgZm9yIHNlZWstcmVsYXRlZCBlcnJvcnMuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQ09SRS1FUlJPUi1DQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQ09SRV9FUlJPUl9DQVBTPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VkIGZvciBjYXBzLXJlbGF0ZWQgZXJyb3JzLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUNPUkUtRVJST1ItVEFHOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9DT1JFX0VSUk9SX1RBRzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlZCBmb3IgbmVnb3RpYXRpb24tcmVsYXRlZCBlcnJvcnMuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQ09SRS1FUlJPUi1NSVNTSU5HLVBMVUdJTjpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQ09SRV9FUlJPUl9NSVNTSU5HX1BMVUdJTjwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlZCBpZiBhIHBsdWdpbiBpcyBtaXNzaW5nLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUNPUkUtRVJST1ItQ0xPQ0s6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0NPUkVfRVJST1JfQ0xPQ0s8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZWQgZm9yIGNsb2NrIHJlbGF0ZWQgZXJyb3JzLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUNPUkUtRVJST1ItRElTQUJMRUQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0NPUkVfRVJST1JfRElTQUJMRUQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZWQgaWYgZnVuY3Rpb25hbGl0eSBoYXMgYmVlbiBkaXNhYmxlZCBhdAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlIHRpbWUgKFNpbmNlOiAwLjEwLjEzKS4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1DT1JFLUVSUk9SLU5VTS1FUlJPUlM6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0NPUkVfRVJST1JfTlVNX0VSUk9SUzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG51bWJlciBvZiBjb3JlIGVycm9yIHR5cGVzLgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0TGlicmFyeUVycm9yIj48L2E+PGgzPmVudW0gR3N0TGlicmFyeUVycm9yPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGVudW0geworICBHU1RfTElCUkFSWV9FUlJPUl9GQUlMRUQgPSAxLAorICBHU1RfTElCUkFSWV9FUlJPUl9UT09fTEFaWSwKKyAgR1NUX0xJQlJBUllfRVJST1JfSU5JVCwKKyAgR1NUX0xJQlJBUllfRVJST1JfU0hVVERPV04sCisgIEdTVF9MSUJSQVJZX0VSUk9SX1NFVFRJTkdTLAorICBHU1RfTElCUkFSWV9FUlJPUl9FTkNPREUsCisgIEdTVF9MSUJSQVJZX0VSUk9SX05VTV9FUlJPUlMKK30gR3N0TGlicmFyeUVycm9yOworPC9wcmU+Cis8cD4KK0xpYnJhcnkgZXJyb3JzIGFyZSBmb3IgZXJyb3JzIGZyb20gdGhlIGxpYnJhcnkgYmVpbmcgdXNlZCBieSBlbGVtZW50cworKGluaXRpYWxpemluZywgZmluYWxpemluZywgc2V0dGluZ3MsIC4uLikKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUxJQlJBUlktRVJST1ItRkFJTEVEOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9MSUJSQVJZX0VSUk9SX0ZBSUxFRDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBnZW5lcmFsIGVycm9yIHdoaWNoIGRvZXNuJ3QgZml0IGluIGFueSBvdGhlcgorY2F0ZWdvcnkuICBNYWtlIHN1cmUgeW91IGFkZCBhIGN1c3RvbSBtZXNzYWdlIHRvIHRoZSBlcnJvciBjYWxsLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUxJQlJBUlktRVJST1ItVE9PLUxBWlk6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0xJQlJBUllfRVJST1JfVE9PX0xBWlk8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmRvIG5vdCB1c2UgdGhpcyBleGNlcHQgYXMgYSBwbGFjZWhvbGRlciBmb3IKK2RlY2lkaW5nIHdoZXJlIHRvIGdvIHdoaWxlIGRldmVsb3BpbmcgY29kZS4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1MSUJSQVJZLUVSUk9SLUlOSVQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0xJQlJBUllfRVJST1JfSU5JVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlZCB3aGVuIHRoZSBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBvcGVuZWQuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtTElCUkFSWS1FUlJPUi1TSFVURE9XTjpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTElCUkFSWV9FUlJPUl9TSFVURE9XTjwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlZCB3aGVuIHRoZSBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBjbG9zZWQuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtTElCUkFSWS1FUlJPUi1TRVRUSU5HUzpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTElCUkFSWV9FUlJPUl9TRVRUSU5HUzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlZCB3aGVuIHRoZSBsaWJyYXJ5IGRvZXNuJ3QgYWNjZXB0IHNldHRpbmdzLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUxJQlJBUlktRVJST1ItRU5DT0RFOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9MSUJSQVJZX0VSUk9SX0VOQ09ERTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlZCB3aGVuIHRoZSBsaWJyYXJ5IGdlbmVyYXRlZCBhbiBlbmNvZGluZyBlcnJvci4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1MSUJSQVJZLUVSUk9SLU5VTS1FUlJPUlM6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0xJQlJBUllfRVJST1JfTlVNX0VSUk9SUzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG51bWJlciBvZiBsaWJyYXJ5IGVycm9yIHR5cGVzLgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UmVzb3VyY2VFcnJvciI+PC9hPjxoMz5lbnVtIEdzdFJlc291cmNlRXJyb3I8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9SRVNPVVJDRV9FUlJPUl9GQUlMRUQgPSAxLAorICBHU1RfUkVTT1VSQ0VfRVJST1JfVE9PX0xBWlksCisgIEdTVF9SRVNPVVJDRV9FUlJPUl9OT1RfRk9VTkQsCisgIEdTVF9SRVNPVVJDRV9FUlJPUl9CVVNZLAorICBHU1RfUkVTT1VSQ0VfRVJST1JfT1BFTl9SRUFELAorICBHU1RfUkVTT1VSQ0VfRVJST1JfT1BFTl9XUklURSwKKyAgR1NUX1JFU09VUkNFX0VSUk9SX09QRU5fUkVBRF9XUklURSwKKyAgR1NUX1JFU09VUkNFX0VSUk9SX0NMT1NFLAorICBHU1RfUkVTT1VSQ0VfRVJST1JfUkVBRCwKKyAgR1NUX1JFU09VUkNFX0VSUk9SX1dSSVRFLAorICBHU1RfUkVTT1VSQ0VfRVJST1JfU0VFSywKKyAgR1NUX1JFU09VUkNFX0VSUk9SX1NZTkMsCisgIEdTVF9SRVNPVVJDRV9FUlJPUl9TRVRUSU5HUywKKyAgR1NUX1JFU09VUkNFX0VSUk9SX05PX1NQQUNFX0xFRlQsCisgIEdTVF9SRVNPVVJDRV9FUlJPUl9OVU1fRVJST1JTCit9IEdzdFJlc291cmNlRXJyb3I7Cis8L3ByZT4KKzxwPgorUmVzb3VyY2UgZXJyb3JzIGFyZSBmb3IgYW55IHJlc291cmNlIHVzZWQgYnkgYW4gZWxlbWVudDoKK21lbW9yeSwgZmlsZXMsIG5ldHdvcmsgY29ubmVjdGlvbnMsIHByb2Nlc3Mgc3BhY2UsIC4uLgorVGhleSdyZSB0eXBpY2FsbHkgdXNlZCBieSBzb3VyY2UgYW5kIHNpbmsgZWxlbWVudHMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1SRVNPVVJDRS1FUlJPUi1GQUlMRUQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1JFU09VUkNFX0VSUk9SX0ZBSUxFRDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBnZW5lcmFsIGVycm9yIHdoaWNoIGRvZXNuJ3QgZml0IGluIGFueSBvdGhlcgorY2F0ZWdvcnkuICBNYWtlIHN1cmUgeW91IGFkZCBhIGN1c3RvbSBtZXNzYWdlIHRvIHRoZSBlcnJvciBjYWxsLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVJFU09VUkNFLUVSUk9SLVRPTy1MQVpZOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9SRVNPVVJDRV9FUlJPUl9UT09fTEFaWTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZG8gbm90IHVzZSB0aGlzIGV4Y2VwdCBhcyBhIHBsYWNlaG9sZGVyIGZvcgorZGVjaWRpbmcgd2hlcmUgdG8gZ28gd2hpbGUgZGV2ZWxvcGluZyBjb2RlLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVJFU09VUkNFLUVSUk9SLU5PVC1GT1VORDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUkVTT1VSQ0VfRVJST1JfTk9UX0ZPVU5EPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VkIHdoZW4gdGhlIHJlc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZC4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1SRVNPVVJDRS1FUlJPUi1CVVNZOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9SRVNPVVJDRV9FUlJPUl9CVVNZPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VkIHdoZW4gcmVzb3VyY2UgaXMgYnVzeS4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1SRVNPVVJDRS1FUlJPUi1PUEVOLVJFQUQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1JFU09VUkNFX0VSUk9SX09QRU5fUkVBRDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlZCB3aGVuIHJlc291cmNlIGZhaWxzIHRvIG9wZW4gZm9yIHJlYWRpbmcuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUkVTT1VSQ0UtRVJST1ItT1BFTi1XUklURTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUkVTT1VSQ0VfRVJST1JfT1BFTl9XUklURTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlZCB3aGVuIHJlc291cmNlIGZhaWxzIHRvIG9wZW4gZm9yIHdyaXRpbmcuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUkVTT1VSQ0UtRVJST1ItT1BFTi1SRUFELVdSSVRFOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9SRVNPVVJDRV9FUlJPUl9PUEVOX1JFQURfV1JJVEU8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZWQgd2hlbiByZXNvdXJjZSBjYW5ub3QgYmUgb3BlbmVkIGZvcgorYm90aCByZWFkaW5nIGFuZCB3cml0aW5nLCBvciBlaXRoZXIgKGJ1dCB1bnNwZWNpZmllZCB3aGljaCkuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUkVTT1VSQ0UtRVJST1ItQ0xPU0U6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1JFU09VUkNFX0VSUk9SX0NMT1NFPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VkIHdoZW4gdGhlIHJlc291cmNlIGNhbid0IGJlIGNsb3NlZC4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1SRVNPVVJDRS1FUlJPUi1SRUFEOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9SRVNPVVJDRV9FUlJPUl9SRUFEPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VkIHdoZW4gdGhlIHJlc291cmNlIGNhbid0IGJlIHJlYWQgZnJvbS4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1SRVNPVVJDRS1FUlJPUi1XUklURTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUkVTT1VSQ0VfRVJST1JfV1JJVEU8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZWQgd2hlbiB0aGUgcmVzb3VyY2UgY2FuJ3QgYmUgd3JpdHRlbiB0by4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1SRVNPVVJDRS1FUlJPUi1TRUVLOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9SRVNPVVJDRV9FUlJPUl9TRUVLPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VkIHdoZW4gYSBzZWVrIG9uIHRoZSByZXNvdXJjZSBmYWlscy4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1SRVNPVVJDRS1FUlJPUi1TWU5DOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9SRVNPVVJDRV9FUlJPUl9TWU5DPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VkIHdoZW4gYSBzeW5jaHJvbml6ZSBvbiB0aGUgcmVzb3VyY2UgZmFpbHMuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUkVTT1VSQ0UtRVJST1ItU0VUVElOR1M6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1JFU09VUkNFX0VSUk9SX1NFVFRJTkdTPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VkIHdoZW4gc2V0dGluZ3MgY2FuJ3QgYmUgbWFuaXB1bGF0ZWQgb24uCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUkVTT1VSQ0UtRVJST1ItTk8tU1BBQ0UtTEVGVDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUkVTT1VSQ0VfRVJST1JfTk9fU1BBQ0VfTEVGVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlZCB3aGVuIHRoZSByZXNvdXJjZSBoYXMgbm8gc3BhY2UgbGVmdC4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1SRVNPVVJDRS1FUlJPUi1OVU0tRVJST1JTOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9SRVNPVVJDRV9FUlJPUl9OVU1fRVJST1JTPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbnVtYmVyIG9mIHJlc291cmNlIGVycm9yIHR5cGVzLgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0U3RyZWFtRXJyb3IiPjwvYT48aDM+ZW51bSBHc3RTdHJlYW1FcnJvcjwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBlbnVtIHsKKyAgR1NUX1NUUkVBTV9FUlJPUl9GQUlMRUQgPSAxLAorICBHU1RfU1RSRUFNX0VSUk9SX1RPT19MQVpZLAorICBHU1RfU1RSRUFNX0VSUk9SX05PVF9JTVBMRU1FTlRFRCwKKyAgR1NUX1NUUkVBTV9FUlJPUl9UWVBFX05PVF9GT1VORCwKKyAgR1NUX1NUUkVBTV9FUlJPUl9XUk9OR19UWVBFLAorICBHU1RfU1RSRUFNX0VSUk9SX0NPREVDX05PVF9GT1VORCwKKyAgR1NUX1NUUkVBTV9FUlJPUl9ERUNPREUsCisgIEdTVF9TVFJFQU1fRVJST1JfRU5DT0RFLAorICBHU1RfU1RSRUFNX0VSUk9SX0RFTVVYLAorICBHU1RfU1RSRUFNX0VSUk9SX01VWCwKKyAgR1NUX1NUUkVBTV9FUlJPUl9GT1JNQVQsCisgIEdTVF9TVFJFQU1fRVJST1JfREVDUllQVCwKKyAgR1NUX1NUUkVBTV9FUlJPUl9ERUNSWVBUX05PS0VZLAorICBHU1RfU1RSRUFNX0VSUk9SX05VTV9FUlJPUlMKK30gR3N0U3RyZWFtRXJyb3I7Cis8L3ByZT4KKzxwPgorU3RyZWFtIGVycm9ycyBhcmUgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhlIHN0cmVhbSBiZWluZyBwcm9jZXNzZWQ6Citmb3JtYXQgZXJyb3JzLCBtZWRpYSB0eXBlIGVycm9ycywgLi4uCitUaGV5J3JlIHR5cGljYWxseSB1c2VkIGJ5IGRlY29kZXJzLCBkZW11eGVycywgY29udmVydGVycywgLi4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1TVFJFQU0tRVJST1ItRkFJTEVEOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVFJFQU1fRVJST1JfRkFJTEVEPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGdlbmVyYWwgZXJyb3Igd2hpY2ggZG9lc24ndCBmaXQgaW4gYW55IG90aGVyCitjYXRlZ29yeS4gIE1ha2Ugc3VyZSB5b3UgYWRkIGEgY3VzdG9tIG1lc3NhZ2UgdG8gdGhlIGVycm9yIGNhbGwuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtU1RSRUFNLUVSUk9SLVRPTy1MQVpZOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVFJFQU1fRVJST1JfVE9PX0xBWlk8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmRvIG5vdCB1c2UgdGhpcyBleGNlcHQgYXMgYSBwbGFjZWhvbGRlciBmb3IKK2RlY2lkaW5nIHdoZXJlIHRvIGdvIHdoaWxlIGRldmVsb3BpbmcgY29kZS4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1TVFJFQU0tRVJST1ItTk9ULUlNUExFTUVOVEVEOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVFJFQU1fRVJST1JfTk9UX0lNUExFTUVOVEVEPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2UgdGhpcyB3aGVuIHlvdSBkbyBub3Qgd2FudCB0byBpbXBsZW1lbnQKK3RoaXMgZnVuY3Rpb25hbGl0eSB5ZXQuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtU1RSRUFNLUVSUk9SLVRZUEUtTk9ULUZPVU5EOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVFJFQU1fRVJST1JfVFlQRV9OT1RfRk9VTkQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZWQgd2hlbiB0aGUgZWxlbWVudCBkb2Vzbid0IGtub3cgdGhlCitzdHJlYW0ncyB0eXBlLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVNUUkVBTS1FUlJPUi1XUk9ORy1UWVBFOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVFJFQU1fRVJST1JfV1JPTkdfVFlQRTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlZCB3aGVuIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGFuZGxlIHRoaXMgdHlwZQorb2Ygc3RyZWFtLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVNUUkVBTS1FUlJPUi1DT0RFQy1OT1QtRk9VTkQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUUkVBTV9FUlJPUl9DT0RFQ19OT1RfRk9VTkQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZWQgd2hlbiB0aGVyZSdzIG5vIGNvZGVjIHRvIGhhbmRsZSB0aGUKK3N0cmVhbSdzIHR5cGUuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtU1RSRUFNLUVSUk9SLURFQ09ERTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RSRUFNX0VSUk9SX0RFQ09ERTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlZCB3aGVuIGRlY29kaW5nIGZhaWxzLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVNUUkVBTS1FUlJPUi1FTkNPREU6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUUkVBTV9FUlJPUl9FTkNPREU8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZWQgd2hlbiBlbmNvZGluZyBmYWlscy4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1TVFJFQU0tRVJST1ItREVNVVg6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUUkVBTV9FUlJPUl9ERU1VWDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlZCB3aGVuIGRlbXV4aW5nIGZhaWxzLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVNUUkVBTS1FUlJPUi1NVVg6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUUkVBTV9FUlJPUl9NVVg8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZWQgd2hlbiBtdXhpbmcgZmFpbHMuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtU1RSRUFNLUVSUk9SLUZPUk1BVDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RSRUFNX0VSUk9SX0ZPUk1BVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlZCB3aGVuIHRoZSBzdHJlYW0gaXMgb2YgdGhlIHdyb25nIGZvcm1hdAorKGZvciBleGFtcGxlLCB3cm9uZyBjYXBzKS4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1TVFJFQU0tRVJST1ItREVDUllQVDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RSRUFNX0VSUk9SX0RFQ1JZUFQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZWQgd2hlbiB0aGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgY2FuJ3QgYmUKK2RlY3J5cHRlZCBiZWNhdXNlIHRoaXMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZWxlbWVudC4gKFNpbmNlOiAwLjEwLjIwKQorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVNUUkVBTS1FUlJPUi1ERUNSWVBULU5PS0VZOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVFJFQU1fRVJST1JfREVDUllQVF9OT0tFWTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlZCB3aGVuIHRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZAorY2FuJ3QgYmUgZGVjcnlwdGVkIGJlY2F1c2Ugbm8gc3VpdGFibGUga2V5IGlzIGF2YWlsYWJsZS4gKFNpbmNlOiAwLjEwLjIwKQorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVNUUkVBTS1FUlJPUi1OVU0tRVJST1JTOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVFJFQU1fRVJST1JfTlVNX0VSUk9SUzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG51bWJlciBvZiBzdHJlYW0gZXJyb3IgdHlwZXMuCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQ09SRS1FUlJPUjpDQVBTIj48L2E+PGgzPkdTVF9DT1JFX0VSUk9SPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DT1JFX0VSUk9SICAgICAgZ3N0X2NvcmVfZXJyb3JfcXVhcmsgKCkKKzwvcHJlPgorPHA+CitFcnJvciBkb21haW4gZm9yIGNvcmUgc3lzdGVtLiBFcnJvcnMgaW4gdGhpcyBkb21haW4gd2lsbAorYmUgZnJvbSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHc3RDb3JlRXJyb3IiIHRpdGxlPSJlbnVtIEdzdENvcmVFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvcmVFcnJvcjwvc3Bhbj48L2E+IGVudW1lcmF0aW9uLgorU2VlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gZm9yIGluZm9ybWF0aW9uIG9uIGVycm9yIGRvbWFpbnMuCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1MSUJSQVJZLUVSUk9SOkNBUFMiPjwvYT48aDM+R1NUX0xJQlJBUllfRVJST1I8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0xJQlJBUllfRVJST1IgICBnc3RfbGlicmFyeV9lcnJvcl9xdWFyayAoKQorPC9wcmU+Cis8cD4KK0Vycm9yIGRvbWFpbiBmb3IgbGlicmFyeSBsb2FkaW5nLiBFcnJvcnMgaW4gdGhpcyBkb21haW4gd2lsbAorYmUgZnJvbSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHc3RMaWJyYXJ5RXJyb3IiIHRpdGxlPSJlbnVtIEdzdExpYnJhcnlFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdExpYnJhcnlFcnJvcjwvc3Bhbj48L2E+IGVudW1lcmF0aW9uLgorU2VlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gZm9yIGluZm9ybWF0aW9uIG9uIGVycm9yIGRvbWFpbnMuCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1SRVNPVVJDRS1FUlJPUjpDQVBTIj48L2E+PGgzPkdTVF9SRVNPVVJDRV9FUlJPUjwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUkVTT1VSQ0VfRVJST1IgIGdzdF9yZXNvdXJjZV9lcnJvcl9xdWFyayAoKQorPC9wcmU+Cis8cD4KK0Vycm9yIGRvbWFpbiBmb3IgcmVzb3VyY2UgaGFuZGxpbmcuIEVycm9ycyBpbiB0aGlzIGRvbWFpbiB3aWxsCitiZSBmcm9tIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dzdFJlc291cmNlRXJyb3IiIHRpdGxlPSJlbnVtIEdzdFJlc291cmNlRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSZXNvdXJjZUVycm9yPC9zcGFuPjwvYT4gZW51bWVyYXRpb24uCitTZWUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1FcnJvci1SZXBvcnRpbmcuaHRtbCNHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRXJyb3I8L3NwYW4+PC9hPiBmb3IgaW5mb3JtYXRpb24gb24gZXJyb3IgZG9tYWlucy4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVNUUkVBTS1FUlJPUjpDQVBTIj48L2E+PGgzPkdTVF9TVFJFQU1fRVJST1I8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1NUUkVBTV9FUlJPUiAgICBnc3Rfc3RyZWFtX2Vycm9yX3F1YXJrICgpCis8L3ByZT4KKzxwPgorRXJyb3IgZG9tYWluIGZvciBtZWRpYSBzdHJlYW0gcHJvY2Vzc2luZy4gRXJyb3JzIGluIHRoaXMgZG9tYWluIHdpbGwKK2JlIGZyb20gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR3N0U3RyZWFtRXJyb3IiIHRpdGxlPSJlbnVtIEdzdFN0cmVhbUVycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtRXJyb3I8L3NwYW4+PC9hPiBlbnVtZXJhdGlvbi4KK1NlZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUVycm9yLVJlcG9ydGluZy5odG1sI0dFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdFcnJvcjwvc3Bhbj48L2E+IGZvciBpbmZvcm1hdGlvbiBvbiBlcnJvciBkb21haW5zLgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtRVJST1ItU1lTVEVNOkNBUFMiPjwvYT48aDM+R1NUX0VSUk9SX1NZU1RFTTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRVJST1JfU1lTVEVNICAgICgic3lzdGVtIGVycm9yOiAlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSkKKzwvcHJlPgorPHA+CitCdWlsZHMgYSBzdHJpbmcgdXNpbmcgZXJybm8gZGVzY3JpYmluZyB0aGUgcHJldmlvdXNseSBmYWlsZWQgc3lzdGVtCitjYWxsLiAgVG8gYmUgdXNlZCBhcyB0aGUgZGVidWcgYXJndW1lbnQgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1FUlJPUjpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRVJST1IoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9FTEVNRU5UX0VSUk9SPC9zcGFuPjwvYT4uCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1lcnJvci1nZXQtbWVzc2FnZSI+PC9hPjxoMz5nc3RfZXJyb3JfZ2V0X21lc3NhZ2UgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICogICAgICAgICAgICAgZ3N0X2Vycm9yX2dldF9tZXNzYWdlICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IGRvbWFpbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBjb2RlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0IGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGVycm9yIG1lc3NhZ2UgaW4gdGhlIGN1cnJlbnQgbG9jYWxlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRvbWFpbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgR1N0cmVhbWVyIGVycm9yIGRvbWFpbiB0aGlzIGVycm9yIGJlbG9uZ3MgdG8uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb2RlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBlcnJvciBjb2RlIGJlbG9uZ2luZyB0byB0aGUgZG9tYWluLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3bHkgYWxsb2NhdGVkIHN0cmluZyBkZXNjcmliaW5nCit0aGUgZXJyb3IgbWVzc2FnZSAoaW4gVVRGLTggZW5jb2RpbmcpLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0R0Vycm9yLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE4MTlmOAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbApAQCAtMCwwICsxLDI0MzkgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5Hc3RJbmZvPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZ3N0cmVhbWVyLXN1cHBvcnQuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIFN1cHBvcnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItc3VwcG9ydC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgU3VwcG9ydCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sIiB0aXRsZT0iR3N0VHJhY2UiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1zdXBwb3J0Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItc3VwcG9ydC5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdEluZm8uc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItR3N0SW5mby5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0SW5mbyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1Hc3RJbmZvLnRvcF9vZl9wYWdlIj48L2E+R3N0SW5mbzwvc3Bhbj48L2gyPgorPHA+R3N0SW5mbyDigJQgRGVidWdnaW5nIGFuZCBsb2dnaW5nIGZhY2lsaXRpZXM8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0SW5mby5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisjaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OworCitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnTGV2ZWwiIHRpdGxlPSJlbnVtIEdzdERlYnVnTGV2ZWwiPkdzdERlYnVnTGV2ZWw8L2E+OworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTEVWRUwtREVGQVVMVDpDQVBTIiB0aXRsZT0iR1NUX0xFVkVMX0RFRkFVTFQiPkdTVF9MRVZFTF9ERUZBVUxUPC9hPgorZW51bSAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NvbG9yRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdERlYnVnQ29sb3JGbGFncyI+R3N0RGVidWdDb2xvckZsYWdzPC9hPjsKK3N0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdDYXRlZ29yeSIgdGl0bGU9InN0cnVjdCBHc3REZWJ1Z0NhdGVnb3J5Ij5Hc3REZWJ1Z0NhdGVnb3J5PC9hPjsKK2VudW0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdHcmFwaERldGFpbHMiIHRpdGxlPSJlbnVtIEdzdERlYnVnR3JhcGhEZXRhaWxzIj5Hc3REZWJ1Z0dyYXBoRGV0YWlsczwvYT47CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1TVFItTlVMTDpDQVBTIiB0aXRsZT0iR1NUX1NUUl9OVUxMKCkiPkdTVF9TVFJfTlVMTDwvYT4gICAgICAgICAgICAgICAgICAgICAgICAoc3RyKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctUEFELU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9ERUJVR19QQURfTkFNRSgpIj5HU1RfREVCVUdfUEFEX05BTUU8L2E+ICAgICAgICAgICAgICAgICAgKHBhZCkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUZVTkNUSU9OOkNBUFMiIHRpdGxlPSJHU1RfRlVOQ1RJT04iPkdTVF9GVU5DVElPTjwvYT4KKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdExvZ0Z1bmN0aW9uIiB0aXRsZT0iR3N0TG9nRnVuY3Rpb24gKCkiPipHc3RMb2dGdW5jdGlvbjwvYT4pICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdDYXRlZ29yeSIgdGl0bGU9InN0cnVjdCBHc3REZWJ1Z0NhdGVnb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdDYXRlZ29yeTwvc3Bhbj48L2E+ICpjYXRlZ29yeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0xldmVsIiB0aXRsZT0iZW51bSBHc3REZWJ1Z0xldmVsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdMZXZlbDwvc3Bhbj48L2E+IGxldmVsPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpbGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZnVuY3Rpb248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbGluZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z01lc3NhZ2U8L3NwYW4+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1sb2ciIHRpdGxlPSJnc3RfZGVidWdfbG9nICgpIj5nc3RfZGVidWdfbG9nPC9hPiAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NhdGVnb3J5IiB0aXRsZT0ic3RydWN0IEdzdERlYnVnQ2F0ZWdvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0NhdGVnb3J5PC9zcGFuPjwvYT4gKmNhdGVnb3J5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnTGV2ZWwiIHRpdGxlPSJlbnVtIEdzdERlYnVnTGV2ZWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0xldmVsPC9zcGFuPjwvYT4gbGV2ZWw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmlsZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmdW5jdGlvbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBsaW5lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1sb2ctdmFsaXN0IiB0aXRsZT0iZ3N0X2RlYnVnX2xvZ192YWxpc3QgKCkiPmdzdF9kZWJ1Z19sb2dfdmFsaXN0PC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnQ2F0ZWdvcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0RGVidWdDYXRlZ29yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnQ2F0ZWdvcnk8L3NwYW4+PC9hPiAqY2F0ZWdvcnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdMZXZlbCIgdGl0bGU9ImVudW0gR3N0RGVidWdMZXZlbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnTGV2ZWw8L3NwYW4+PC9hPiBsZXZlbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaWxlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZ1bmN0aW9uPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGxpbmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZhX2xpc3Q8L3NwYW4+IGFyZ3M8L2NvZGU+PC9lbT4pOworY29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctbWVzc2FnZS1nZXQiIHRpdGxlPSJnc3RfZGVidWdfbWVzc2FnZV9nZXQgKCkiPmdzdF9kZWJ1Z19tZXNzYWdlX2dldDwvYT4gICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z01lc3NhZ2U8L3NwYW4+ICptZXNzYWdlPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWxvZy1kZWZhdWx0IiB0aXRsZT0iZ3N0X2RlYnVnX2xvZ19kZWZhdWx0ICgpIj5nc3RfZGVidWdfbG9nX2RlZmF1bHQ8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NhdGVnb3J5IiB0aXRsZT0ic3RydWN0IEdzdERlYnVnQ2F0ZWdvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0NhdGVnb3J5PC9zcGFuPjwvYT4gKmNhdGVnb3J5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnTGV2ZWwiIHRpdGxlPSJlbnVtIEdzdERlYnVnTGV2ZWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0xldmVsPC9zcGFuPjwvYT4gbGV2ZWw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmlsZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmdW5jdGlvbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBsaW5lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnTWVzc2FnZTwvc3Bhbj4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1bnVzZWQ8L2NvZGU+PC9lbT4pOworY29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctbGV2ZWwtZ2V0LW5hbWUiIHRpdGxlPSJnc3RfZGVidWdfbGV2ZWxfZ2V0X25hbWUgKCkiPmdzdF9kZWJ1Z19sZXZlbF9nZXRfbmFtZTwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnTGV2ZWwiIHRpdGxlPSJlbnVtIEdzdERlYnVnTGV2ZWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0xldmVsPC9zcGFuPjwvYT4gbGV2ZWw8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctYWRkLWxvZy1mdW5jdGlvbiIgdGl0bGU9ImdzdF9kZWJ1Z19hZGRfbG9nX2Z1bmN0aW9uICgpIj5nc3RfZGVidWdfYWRkX2xvZ19mdW5jdGlvbjwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3RMb2dGdW5jdGlvbiIgdGl0bGU9IkdzdExvZ0Z1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TG9nRnVuY3Rpb248L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1yZW1vdmUtbG9nLWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb24gKCkiPmdzdF9kZWJ1Z19yZW1vdmVfbG9nX2Z1bmN0aW9uPC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdExvZ0Z1bmN0aW9uIiB0aXRsZT0iR3N0TG9nRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RMb2dGdW5jdGlvbjwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctcmVtb3ZlLWxvZy1mdW5jdGlvbi1ieS1kYXRhIiB0aXRsZT0iZ3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb25fYnlfZGF0YSAoKSI+Z3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb25fYnlfZGF0YTwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGRhdGE8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctc2V0LWFjdGl2ZSIgdGl0bGU9ImdzdF9kZWJ1Z19zZXRfYWN0aXZlICgpIj5nc3RfZGVidWdfc2V0X2FjdGl2ZTwvYT4gICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGFjdGl2ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1pcy1hY3RpdmUiIHRpdGxlPSJnc3RfZGVidWdfaXNfYWN0aXZlICgpIj5nc3RfZGVidWdfaXNfYWN0aXZlPC9hPiAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctc2V0LWNvbG9yZWQiIHRpdGxlPSJnc3RfZGVidWdfc2V0X2NvbG9yZWQgKCkiPmdzdF9kZWJ1Z19zZXRfY29sb3JlZDwvYT4gICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gY29sb3JlZDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1pcy1jb2xvcmVkIiB0aXRsZT0iZ3N0X2RlYnVnX2lzX2NvbG9yZWQgKCkiPmdzdF9kZWJ1Z19pc19jb2xvcmVkPC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1zZXQtZGVmYXVsdC10aHJlc2hvbGQiIHRpdGxlPSJnc3RfZGVidWdfc2V0X2RlZmF1bHRfdGhyZXNob2xkICgpIj5nc3RfZGVidWdfc2V0X2RlZmF1bHRfdGhyZXNob2xkPC9hPiAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0xldmVsIiB0aXRsZT0iZW51bSBHc3REZWJ1Z0xldmVsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdMZXZlbDwvc3Bhbj48L2E+IGxldmVsPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnTGV2ZWwiIHRpdGxlPSJlbnVtIEdzdERlYnVnTGV2ZWwiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RGVidWdMZXZlbDwvc3Bhbj48L2E+ICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1nZXQtZGVmYXVsdC10aHJlc2hvbGQiIHRpdGxlPSJnc3RfZGVidWdfZ2V0X2RlZmF1bHRfdGhyZXNob2xkICgpIj5nc3RfZGVidWdfZ2V0X2RlZmF1bHRfdGhyZXNob2xkPC9hPiAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctc2V0LXRocmVzaG9sZC1mb3ItbmFtZSIgdGl0bGU9ImdzdF9kZWJ1Z19zZXRfdGhyZXNob2xkX2Zvcl9uYW1lICgpIj5nc3RfZGVidWdfc2V0X3RocmVzaG9sZF9mb3JfbmFtZTwvYT4gICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnTGV2ZWwiIHRpdGxlPSJlbnVtIEdzdERlYnVnTGV2ZWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0xldmVsPC9zcGFuPjwvYT4gbGV2ZWw8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctdW5zZXQtdGhyZXNob2xkLWZvci1uYW1lIiB0aXRsZT0iZ3N0X2RlYnVnX3Vuc2V0X3RocmVzaG9sZF9mb3JfbmFtZSAoKSI+Z3N0X2RlYnVnX3Vuc2V0X3RocmVzaG9sZF9mb3JfbmFtZTwvYT4gICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1DQVRFR09SWTpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX0NBVEVHT1JZKCkiPkdTVF9ERUJVR19DQVRFR09SWTwvYT4gICAgICAgICAgICAgICAgICAoY2F0KQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctQ0FURUdPUlktRVhURVJOOkNBUFMiIHRpdGxlPSJHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKCkiPkdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk48L2E+ICAgICAgICAgICAoY2F0KQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctQ0FURUdPUlktU1RBVElDOkNBUFMiIHRpdGxlPSJHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDKCkiPkdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUM8L2E+ICAgICAgICAgICAoY2F0KQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctQ0FURUdPUlktSU5JVDpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQoKSI+R1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQ8L2E+ICAgICAgICAgICAgIChjYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUNBVEVHT1JZLUdFVDpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX0NBVEVHT1JZX0dFVCgpIj5HU1RfREVCVUdfQ0FURUdPUllfR0VUPC9hPiAgICAgICAgICAgICAgKGNhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpCis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1jYXRlZ29yeS1mcmVlIiB0aXRsZT0iZ3N0X2RlYnVnX2NhdGVnb3J5X2ZyZWUgKCkiPmdzdF9kZWJ1Z19jYXRlZ29yeV9mcmVlPC9hPiAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnQ2F0ZWdvcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0RGVidWdDYXRlZ29yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnQ2F0ZWdvcnk8L3NwYW4+PC9hPiAqY2F0ZWdvcnk8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctY2F0ZWdvcnktc2V0LXRocmVzaG9sZCIgdGl0bGU9ImdzdF9kZWJ1Z19jYXRlZ29yeV9zZXRfdGhyZXNob2xkICgpIj5nc3RfZGVidWdfY2F0ZWdvcnlfc2V0X3RocmVzaG9sZDwvYT4gICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NhdGVnb3J5IiB0aXRsZT0ic3RydWN0IEdzdERlYnVnQ2F0ZWdvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0NhdGVnb3J5PC9zcGFuPjwvYT4gKmNhdGVnb3J5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnTGV2ZWwiIHRpdGxlPSJlbnVtIEdzdERlYnVnTGV2ZWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0xldmVsPC9zcGFuPjwvYT4gbGV2ZWw8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctY2F0ZWdvcnktcmVzZXQtdGhyZXNob2xkIiB0aXRsZT0iZ3N0X2RlYnVnX2NhdGVnb3J5X3Jlc2V0X3RocmVzaG9sZCAoKSI+Z3N0X2RlYnVnX2NhdGVnb3J5X3Jlc2V0X3RocmVzaG9sZDwvYT4gICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdDYXRlZ29yeSIgdGl0bGU9InN0cnVjdCBHc3REZWJ1Z0NhdGVnb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdDYXRlZ29yeTwvc3Bhbj48L2E+ICpjYXRlZ29yeTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0xldmVsIiB0aXRsZT0iZW51bSBHc3REZWJ1Z0xldmVsIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdERlYnVnTGV2ZWw8L3NwYW4+PC9hPiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctY2F0ZWdvcnktZ2V0LXRocmVzaG9sZCIgdGl0bGU9ImdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfdGhyZXNob2xkICgpIj5nc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZDwvYT4gICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NhdGVnb3J5IiB0aXRsZT0ic3RydWN0IEdzdERlYnVnQ2F0ZWdvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0NhdGVnb3J5PC9zcGFuPjwvYT4gKmNhdGVnb3J5PC9jb2RlPjwvZW0+KTsKK2NvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICogICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWNhdGVnb3J5LWdldC1uYW1lIiB0aXRsZT0iZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9uYW1lICgpIj5nc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X25hbWU8L2E+ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NhdGVnb3J5IiB0aXRsZT0ic3RydWN0IEdzdERlYnVnQ2F0ZWdvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0NhdGVnb3J5PC9zcGFuPjwvYT4gKmNhdGVnb3J5PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWNhdGVnb3J5LWdldC1jb2xvciIgdGl0bGU9ImdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfY29sb3IgKCkiPmdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfY29sb3I8L2E+ICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnQ2F0ZWdvcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0RGVidWdDYXRlZ29yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnQ2F0ZWdvcnk8L3NwYW4+PC9hPiAqY2F0ZWdvcnk8L2NvZGU+PC9lbT4pOworY29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctY2F0ZWdvcnktZ2V0LWRlc2NyaXB0aW9uIiB0aXRsZT0iZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9kZXNjcmlwdGlvbiAoKSI+Z3N0X2RlYnVnX2NhdGVnb3J5X2dldF9kZXNjcmlwdGlvbjwvYT4gICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdDYXRlZ29yeSIgdGl0bGU9InN0cnVjdCBHc3REZWJ1Z0NhdGVnb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdDYXRlZ29yeTwvc3Bhbj48L2E+ICpjYXRlZ29yeTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVNpbmdseS1MaW5rZWQtTGlzdHMuaHRtbCNHU0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1NMaXN0PC9zcGFuPjwvYT4gKiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1nZXQtYWxsLWNhdGVnb3JpZXMiIHRpdGxlPSJnc3RfZGVidWdfZ2V0X2FsbF9jYXRlZ29yaWVzICgpIj5nc3RfZGVidWdfZ2V0X2FsbF9jYXRlZ29yaWVzPC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctY29uc3RydWN0LXRlcm0tY29sb3IiIHRpdGxlPSJnc3RfZGVidWdfY29uc3RydWN0X3Rlcm1fY29sb3IgKCkiPmdzdF9kZWJ1Z19jb25zdHJ1Y3RfdGVybV9jb2xvcjwvYT4gICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gY29sb3JpbmZvPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctY29uc3RydWN0LXdpbi1jb2xvciIgdGl0bGU9ImdzdF9kZWJ1Z19jb25zdHJ1Y3Rfd2luX2NvbG9yICgpIj5nc3RfZGVidWdfY29uc3RydWN0X3dpbl9jb2xvcjwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGNvbG9yaW5mbzwvY29kZT48L2VtPik7CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtTEVWRUwtTE9HOkNBUFMiIHRpdGxlPSJHU1RfQ0FUX0xFVkVMX0xPRygpIj5HU1RfQ0FUX0xFVkVMX0xPRzwvYT4gICAgICAgICAgICAgICAgICAgKGNhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULUVSUk9SLU9CSkVDVDpDQVBTIiB0aXRsZT0iR1NUX0NBVF9FUlJPUl9PQkpFQ1QoKSI+R1NUX0NBVF9FUlJPUl9PQkpFQ1Q8L2E+ICAgICAgICAgICAgICAgIChjYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtV0FSTklORy1PQkpFQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9DQVRfV0FSTklOR19PQkpFQ1QoKSI+R1NUX0NBVF9XQVJOSU5HX09CSkVDVDwvYT4gICAgICAgICAgICAgIChjYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtSU5GTy1PQkpFQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9DQVRfSU5GT19PQkpFQ1QoKSI+R1NUX0NBVF9JTkZPX09CSkVDVDwvYT4gICAgICAgICAgICAgICAgIChjYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtREVCVUctT0JKRUNUOkNBUFMiIHRpdGxlPSJHU1RfQ0FUX0RFQlVHX09CSkVDVCgpIj5HU1RfQ0FUX0RFQlVHX09CSkVDVDwvYT4gICAgICAgICAgICAgICAgKGNhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUNBVC1MT0ctT0JKRUNUOkNBUFMiIHRpdGxlPSJHU1RfQ0FUX0xPR19PQkpFQ1QoKSI+R1NUX0NBVF9MT0dfT0JKRUNUPC9hPiAgICAgICAgICAgICAgICAgIChjYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtRklYTUUtT0JKRUNUOkNBUFMiIHRpdGxlPSJHU1RfQ0FUX0ZJWE1FX09CSkVDVCgpIj5HU1RfQ0FUX0ZJWE1FX09CSkVDVDwvYT4gICAgICAgICAgICAgICAgKGNhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUNBVC1UUkFDRS1PQkpFQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9DQVRfVFJBQ0VfT0JKRUNUKCkiPkdTVF9DQVRfVFJBQ0VfT0JKRUNUPC9hPiAgICAgICAgICAgICAgICAoY2F0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULU1FTURVTVAtT0JKRUNUOkNBUFMiIHRpdGxlPSJHU1RfQ0FUX01FTURVTVBfT0JKRUNUKCkiPkdTVF9DQVRfTUVNRFVNUF9PQkpFQ1Q8L2E+ICAgICAgICAgICAgICAoY2F0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUNBVC1FUlJPUjpDQVBTIiB0aXRsZT0iR1NUX0NBVF9FUlJPUigpIj5HU1RfQ0FUX0VSUk9SPC9hPiAgICAgICAgICAgICAgICAgICAgICAgKGNhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUNBVC1XQVJOSU5HOkNBUFMiIHRpdGxlPSJHU1RfQ0FUX1dBUk5JTkcoKSI+R1NUX0NBVF9XQVJOSU5HPC9hPiAgICAgICAgICAgICAgICAgICAgIChjYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtSU5GTzpDQVBTIiB0aXRsZT0iR1NUX0NBVF9JTkZPKCkiPkdTVF9DQVRfSU5GTzwvYT4gICAgICAgICAgICAgICAgICAgICAgICAoY2F0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULURFQlVHOkNBUFMiIHRpdGxlPSJHU1RfQ0FUX0RFQlVHKCkiPkdTVF9DQVRfREVCVUc8L2E+ICAgICAgICAgICAgICAgICAgICAgICAoY2F0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULUxPRzpDQVBTIiB0aXRsZT0iR1NUX0NBVF9MT0coKSI+R1NUX0NBVF9MT0c8L2E+ICAgICAgICAgICAgICAgICAgICAgICAgIChjYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtRklYTUU6Q0FQUyIgdGl0bGU9IkdTVF9DQVRfRklYTUUoKSI+R1NUX0NBVF9GSVhNRTwvYT4gICAgICAgICAgICAgICAgICAgICAgIChjYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtVFJBQ0U6Q0FQUyIgdGl0bGU9IkdTVF9DQVRfVFJBQ0UoKSI+R1NUX0NBVF9UUkFDRTwvYT4gICAgICAgICAgICAgICAgICAgICAgIChjYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtTUVNRFVNUDpDQVBTIiB0aXRsZT0iR1NUX0NBVF9NRU1EVU1QKCkiPkdTVF9DQVRfTUVNRFVNUDwvYT4gICAgICAgICAgICAgICAgICAgICAoY2F0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUVSUk9SLU9CSkVDVDpDQVBTIiB0aXRsZT0iR1NUX0VSUk9SX09CSkVDVCgpIj5HU1RfRVJST1JfT0JKRUNUPC9hPiAgICAgICAgICAgICAgICAgICAgKG9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULVdBUk5JTkctT0JKRUNUOkNBUFMiIHRpdGxlPSJHU1RfV0FSTklOR19PQkpFQ1QoKSI+R1NUX1dBUk5JTkdfT0JKRUNUPC9hPiAgICAgICAgICAgICAgICAgIChvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1JTkZPLU9CSkVDVDpDQVBTIiB0aXRsZT0iR1NUX0lORk9fT0JKRUNUKCkiPkdTVF9JTkZPX09CSkVDVDwvYT4gICAgICAgICAgICAgICAgICAgICAob2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctT0JKRUNUOkNBUFMiIHRpdGxlPSJHU1RfREVCVUdfT0JKRUNUKCkiPkdTVF9ERUJVR19PQkpFQ1Q8L2E+ICAgICAgICAgICAgICAgICAgICAob2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTE9HLU9CSkVDVDpDQVBTIiB0aXRsZT0iR1NUX0xPR19PQkpFQ1QoKSI+R1NUX0xPR19PQkpFQ1Q8L2E+ICAgICAgICAgICAgICAgICAgICAgIChvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1GSVhNRS1PQkpFQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9GSVhNRV9PQkpFQ1QoKSI+R1NUX0ZJWE1FX09CSkVDVDwvYT4gICAgICAgICAgICAgICAgICAgIChvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1UUkFDRS1PQkpFQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9UUkFDRV9PQkpFQ1QoKSI+R1NUX1RSQUNFX09CSkVDVDwvYT4gICAgICAgICAgICAgICAgICAgIChvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1NRU1EVU1QLU9CSkVDVDpDQVBTIiB0aXRsZT0iR1NUX01FTURVTVBfT0JKRUNUKCkiPkdTVF9NRU1EVU1QX09CSkVDVDwvYT4gICAgICAgICAgICAgICAgICAob2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUVSUk9SOkNBUFMiIHRpdGxlPSJHU1RfRVJST1IoKSI+R1NUX0VSUk9SPC9hPiAgICAgICAgICAgICAgICAgICAgICAgICAgICguLi4pCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1XQVJOSU5HOkNBUFMiIHRpdGxlPSJHU1RfV0FSTklORygpIj5HU1RfV0FSTklORzwvYT4gICAgICAgICAgICAgICAgICAgICAgICAgKC4uLikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUlORk86Q0FQUyIgdGl0bGU9IkdTVF9JTkZPKCkiPkdTVF9JTkZPPC9hPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLi4uKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUc6Q0FQUyIgdGl0bGU9IkdTVF9ERUJVRygpIj5HU1RfREVCVUc8L2E+ICAgICAgICAgICAgICAgICAgICAgICAgICAgKC4uLikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUxPRzpDQVBTIiB0aXRsZT0iR1NUX0xPRygpIj5HU1RfTE9HPC9hPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC4uLikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUZJWE1FOkNBUFMiIHRpdGxlPSJHU1RfRklYTUUoKSI+R1NUX0ZJWE1FPC9hPiAgICAgICAgICAgICAgICAgICAgICAgICAgICguLi4pCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1UUkFDRTpDQVBTIiB0aXRsZT0iR1NUX1RSQUNFKCkiPkdTVF9UUkFDRTwvYT4gICAgICAgICAgICAgICAgICAgICAgICAgICAoLi4uKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTUVNRFVNUDpDQVBTIiB0aXRsZT0iR1NUX01FTURVTVAoKSI+R1NUX01FTURVTVA8L2E+ICAgICAgICAgICAgICAgICAgICAgICAgIChtc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctUkVHSVNURVItRlVOQ1BUUjpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIoKSI+R1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFI8L2E+ICAgICAgICAgIChwdHIpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1GVU5DUFRSOkNBUFMiIHRpdGxlPSJHU1RfREVCVUdfRlVOQ1BUUigpIj5HU1RfREVCVUdfRlVOQ1BUUjwvYT4gICAgICAgICAgICAgICAgICAgKHB0cikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUZVTkNQVFItTkFNRTpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRSgpIj5HU1RfREVCVUdfRlVOQ1BUUl9OQU1FPC9hPiAgICAgICAgICAgICAgKHB0cikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUJJTi1UTy1ET1QtRklMRTpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRSgpIj5HU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFPC9hPiAgICAgICAgICAgKGJpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWUpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1CSU4tVE8tRE9ULUZJTEUtV0lUSC1UUzpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKCkiPkdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUzwvYT4gICAoYmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZSkKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLXByaW50LXN0YWNrLXRyYWNlIiB0aXRsZT0iZ3N0X2RlYnVnX3ByaW50X3N0YWNrX3RyYWNlICgpIj5nc3RfZGVidWdfcHJpbnRfc3RhY2tfdHJhY2U8L2E+ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtVElNRS1GT1JNQVQ6Q0FQUyIgdGl0bGU9IkdTVF9USU1FX0ZPUk1BVCI+R1NUX1RJTUVfRk9STUFUPC9hPgorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtVElNRS1BUkdTOkNBUFMiIHRpdGxlPSJHU1RfVElNRV9BUkdTKCkiPkdTVF9USU1FX0FSR1M8L2E+ICAgICAgICAgICAgICAgICAgICAgICAodCkKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0SW5mby5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK0dTdHJlYW1lcidzIGRlYnVnZ2luZyBzdWJzeXN0ZW0gaXMgYW4gZWFzeSB3YXkgdG8gZ2V0IGluZm9ybWF0aW9uIGFib3V0IHdoYXQKK3RoZSBhcHBsaWNhdGlvbiBpcyBkb2luZy4gIEl0IGlzIG5vdCBtZWFudCBmb3IgcHJvZ3JhbW1pbmcgZXJyb3JzLiBVc2UgR0xpYgorbWV0aG9kcyAoZ193YXJuaW5nIGFuZCBmcmllbmRzKSBmb3IgdGhhdC4KKzwvcD4KKzxwPgorVGhlIGRlYnVnZ2luZyBzdWJzeXN0ZW0gd29ya3Mgb25seSBhZnRlciBHU3RyZWFtZXIgaGFzIGJlZW4gaW5pdGlhbGl6ZWQKKzwvcD4KKzxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPmZvciBleGFtcGxlIGJ5IGNhbGxpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtaW5pdCIgdGl0bGU9ImdzdF9pbml0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9pbml0KCk8L2NvZGU+PC9hPi48L3A+PC9saT48L3VsPjwvZGl2PgorPHA+Cis8L3A+Cis8cD4KK1RoZSBkZWJ1Z2dpbmcgc3Vic3lzdGVtIGlzIHVzZWQgdG8gbG9nIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgd2hpbGUgdGhlCithcHBsaWNhdGlvbiBydW5zLiAgRWFjaCBtZXNzYWdlcyBoYXMgc29tZSBwcm9wZXJ0aWVzIGF0dGFjaGVkIHRvIGl0LiBBbW9uZwordGhlc2UgcHJvcGVydGllcyBhcmUgdGhlIGRlYnVnZ2luZyBjYXRlZ29yeSwgdGhlIHNldmVyaXR5IChjYWxsZWQgImxldmVsIgoraGVyZSkgYW5kIGFuIG9wdGlvbmFsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+IGl0IGJlbG9uZ3MgdG8uIEVhY2ggb2YgdGhlc2UgbWVzc2FnZXMgaXMgc2VudAordG8gYWxsIHJlZ2lzdGVyZWQgZGVidWdnaW5nIGhhbmRsZXJzLCB3aGljaCB0aGVuIGhhbmRsZSB0aGUgbWVzc2FnZXMuCitHU3RyZWFtZXIgYXR0YWNoZXMgYSBkZWZhdWx0IGhhbmRsZXIgb24gc3RhcnR1cCwgd2hpY2ggb3V0cHV0cyByZXF1ZXN0ZWQKK21lc3NhZ2VzIHRvIHN0ZGVyci4KKzwvcD4KKzxwPgorTWVzc2FnZXMgYXJlIG91dHB1dCBieSB1c2luZyBzaG9ydGN1dCBtYWNyb3MgbGlrZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUc6Q0FQUyIgdGl0bGU9IkdTVF9ERUJVRygpIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0RFQlVHPC9zcGFuPjwvYT4sCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULUVSUk9SLU9CSkVDVDpDQVBTIiB0aXRsZT0iR1NUX0NBVF9FUlJPUl9PQkpFQ1QoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9DQVRfRVJST1JfT0JKRUNUPC9zcGFuPjwvYT4gb3Igc2ltaWxhci4gVGhlc2UgYWxsIGV4cGFuZCB0byBjYWxsaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1sb2ciIHRpdGxlPSJnc3RfZGVidWdfbG9nICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9kZWJ1Z19sb2coKTwvY29kZT48L2E+Cit3aXRoIHRoZSByaWdodCBwYXJhbWV0ZXJzLgorVGhlIG9ubHkgdGhpbmcgYSBkZXZlbG9wZXIgd2lsbCBwcm9iYWJseSB3YW50IHRvIGRvIGlzIGRlZmluZSBoaXMgb3duCitjYXRlZ29yaWVzLiBUaGlzIGlzIGVhc2lseSBkb25lIHdpdGggMyBsaW5lcy4gQXQgdGhlIHRvcCBvZiB5b3VyIGNvZGUsCitkZWNsYXJlCit0aGUgdmFyaWFibGVzIGFuZCBzZXQgdGhlIGRlZmF1bHQgY2F0ZWdvcnkuCis8L3A+Cis8ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKG15X2NhdGVnb3J5KTsgICAgIC8vIGRlZmluZSBjYXRlZ29yeSAoc3RhdGljYWxseSkKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIG15X2NhdGVnb3J5ICAgICAvLyBzZXQgYXMgZGVmYXVsdAorPC9wcmU+PC9kaXY+Cis8cD4KK0FmdGVyIHRoYXQgeW91IG9ubHkgbmVlZCB0byBpbml0aWFsaXplIHRoZSBjYXRlZ29yeS4KKzwvcD4KKzxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgorR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKG15X2NhdGVnb3J5LCAibXkgY2F0ZWdvcnkiLAorICAgICAgICAgICAgICAgICAgICAgICAgIDAsICJUaGlzIGlzIG15IHZlcnkgb3duIik7Cis8L3ByZT48L2Rpdj4KKzxwPgorSW5pdGlhbGl6YXRpb24gbXVzdCBiZSBkb25lIGJlZm9yZSB0aGUgY2F0ZWdvcnkgaXMgdXNlZCBmaXJzdC4KK1BsdWdpbnMgZG8gdGhpcworaW4gdGhlaXIgcGx1Z2luX2luaXQgZnVuY3Rpb24sIGxpYnJhcmllcyBhbmQgYXBwbGljYXRpb25zIHNob3VsZCBkbyB0aGF0CitkdXJpbmcgdGhlaXIgaW5pdGlhbGl6YXRpb24uCis8L3A+Cis8cD4KK1RoZSB3aG9sZSBkZWJ1Z2dpbmcgc3Vic3lzdGVtIGNhbiBiZSBkaXNhYmxlZCBhdCBidWlsZCB0aW1lIHdpdGggcGFzc2luZyB0aGUKKy0tZGlzYWJsZS1nc3QtZGVidWcgc3dpdGNoIHRvIGNvbmZpZ3VyZS4gSWYgdGhpcyBpcyBkb25lLCBldmVyeSBmdW5jdGlvbiwKK21hY3JvIGFuZCBldmVuIHN0cnVjdHMgZGVzY3JpYmVkIGluIHRoaXMgZmlsZSBldmFsdWF0ZSB0byBkZWZhdWx0IHZhbHVlcyBvcgorbm90aGluZyBhdCBhbGwuCitTbyBkb24ndCB0YWtlIGFkZHJlc3NlcyBvZiB0aGVzZSBmdW5jdGlvbnMgb3IgdXNlIG90aGVyIHRyaWNrcy4KK0lmIHlvdSBtdXN0IGRvIHRoYXQgZm9yIHNvbWUgcmVhc29uLCB0aGVyZSBpcyBzdGlsbCBhbiBvcHRpb24uCitJZiB0aGUgZGVidWdnaW5nCitzdWJzeXN0ZW0gd2FzIGNvbXBpbGVkIG91dCwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1nc3Rjb25maWcuaHRtbCNHU1QtRElTQUJMRS1HU1QtREVCVUc6Q0FQUyIgdGl0bGU9IkdTVF9ESVNBQkxFX0dTVF9ERUJVRyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9ESVNBQkxFX0dTVF9ERUJVRzwvc3Bhbj48L2E+IGlzIGRlZmluZWQgaW4KKyZsdDtnc3QvZ3N0LmgmZ3Q7LAorc28geW91IGNhbiBjaGVjayB0aGF0IGJlZm9yZSBkb2luZyB5b3VyIHRyaWNrLgorRGlzYWJsaW5nIHRoZSBkZWJ1Z2dpbmcgc3Vic3lzdGVtIHdpbGwgZ2l2ZSB5b3UgYSBzbGlnaHQgKHJlYWQ6IHVubm90aWNlYWJsZSkKK3NwZWVkIGluY3JlYXNlIGFuZCB3aWxsIHJlZHVjZSB0aGUgc2l6ZSBvZiB5b3VyIGNvbXBpbGVkIGNvZGUuIFRoZSBHU3RyZWFtZXIKK2xpYnJhcnkgaXRzZWxmIGJlY29tZXMgYXJvdW5kIDEwJSBzbWFsbGVyLgorPC9wPgorPHA+CitQbGVhc2Ugbm90ZSB0aGF0IHRoZXJlIGFyZSBuYW1pbmcgY29udmVudGlvbnMgZm9yIHRoZSBuYW1lcyBvZiBkZWJ1Z2dpbmcKK2NhdGVnb3JpZXMuIFRoZXNlIGFyZSBleHBsYWluZWQgYXQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUNBVEVHT1JZLUlOSVQ6Q0FQUyIgdGl0bGU9IkdTVF9ERUJVR19DQVRFR09SWV9JTklUKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQoKTwvY29kZT48L2E+LgorPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0SW5mby5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RGVidWdMZXZlbCI+PC9hPjxoMz5lbnVtIEdzdERlYnVnTGV2ZWw8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9MRVZFTF9OT05FID0gMCwKKyAgR1NUX0xFVkVMX0VSUk9SLAorICBHU1RfTEVWRUxfV0FSTklORywKKyAgR1NUX0xFVkVMX0lORk8sCisgIEdTVF9MRVZFTF9ERUJVRywKKyAgR1NUX0xFVkVMX0xPRywKKyAgR1NUX0xFVkVMX0ZJWE1FID0gNiwKKyAgR1NUX0xFVkVMX1RSQUNFID0gNywKKyAgLyogYWRkIG1vcmUgKi8KKyAgR1NUX0xFVkVMX01FTURVTVAgPSA5LAorICAvKiBhZGQgbW9yZSAqLworICBHU1RfTEVWRUxfQ09VTlQKK30gR3N0RGVidWdMZXZlbDsKKzwvcHJlPgorPHA+CitUaGUgbGV2ZWwgZGVmaW5lcyB0aGUgaW1wb3J0YW5jZSBvZiBhIGRlYnVnZ2luZyBtZXNzYWdlLiBUaGUgbW9yZSBpbXBvcnRhbnQgYQorbWVzc2FnZSBpcywgdGhlIGdyZWF0ZXIgdGhlIHByb2JhYmlsaXR5IHRoYXQgdGhlIGRlYnVnZ2luZyBzeXN0ZW0gb3V0cHV0cyBpdC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUxFVkVMLU5PTkU6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0xFVkVMX05PTkU8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPk5vIGRlYnVnZ2luZyBsZXZlbCBzcGVjaWZpZWQgb3IgZGVzaXJlZC4gVXNlZCB0byBkZWFjdGl2YXRlCisgZGVidWdnaW5nIG91dHB1dC4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1MRVZFTC1FUlJPUjpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTEVWRUxfRVJST1I8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPkVycm9yIG1lc3NhZ2VzIGFyZSB0byBiZSB1c2VkIG9ubHkgd2hlbiBhbiBlcnJvciBvY2N1cmVkCisgdGhhdCBzdG9wcyB0aGUgYXBwbGljYXRpb24gZnJvbSBrZWVwaW5nIHdvcmtpbmcgY29ycmVjdGx5LgorIEFuIGV4YW1wbGVzIGlzIGdzdF9lbGVtZW50X2Vycm9yLCB3aGljaCBvdXRwdXRzIGEgbWVzc2FnZSB3aXRoIHRoaXMgcHJpb3JpdHkuCisgSXQgZG9lcyBub3QgbWVhbiB0aGF0IHRoZSBhcHBsaWNhdGlvbiBpcyB0ZXJtaW5hdGluZyBhcyB3aXRoIGdfZXJycm9yLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUxFVkVMLVdBUk5JTkc6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0xFVkVMX1dBUk5JTkc8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPldhcm5pbmcgbWVzc2FnZXMgYXJlIHRvIGluZm9ybSBhYm91dCBhYm5vcm1hbCBiZWhhdmlvdXIKKyB0aGF0IGNvdWxkIGxlYWQgdG8gcHJvYmxlbXMgb3Igd2VpcmQgYmVoYXZpb3VyIGxhdGVyIG9uLiBBbiBleGFtcGxlIG9mIHRoaXMKKyB3b3VsZCBiZSBjbG9ja2luZyBpc3N1ZXMgKCJ5b3VyIGNvbXB1dGVyIGlzIHByZXR0eSBzbG93Iikgb3IgYnJva2VuIGlucHV0CisgZGF0YSAoIkNhbid0IHN5bmNocm9uaXplIHRvIHN0cmVhbS4iKQorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUxFVkVMLUlORk86Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0xFVkVMX0lORk88L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPkluZm9ybWF0aW9uYWwgbWVzc2FnZXMgc2hvdWxkIGJlIHVzZWQgdG8ga2VlcCB0aGUgZGV2ZWxvcGVyCisgdXBkYXRlZCBhYm91dCB3aGF0IGlzIGhhcHBlbmluZy4KKyBFeGFtcGxlcyB3aGVyZSB0aGlzIHNob3VsZCBiZSB1c2VkIGFyZSB3aGVuIGEgdHlwZWZpbmQgZnVuY3Rpb24gaGFzCisgc3VjY2Vzc2Z1bGx5IGRldGVybWluZWQgdGhlIHR5cGUgb2YgdGhlIHN0cmVhbSBvciB3aGVuIGFuIG1wMyBwbHVnaW4gZGV0ZWN0cworIHRoZSBmb3JtYXQgdG8gYmUgdXNlZC4gKCJUaGlzIGZpbGUgaGFzIG1vbm8gc291bmQuIikKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1MRVZFTC1ERUJVRzpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTEVWRUxfREVCVUc8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPkRlYnVnZ2luZyBtZXNzYWdlcyBzaG91bGQgYmUgdXNlZCB3aGVuIHNvbWV0aGluZyBjb21tb24KKyBoYXBwZW5zIHRoYXQgaXMgbm90IHRoZSBleHBlY3RlZCBkZWZhdWx0IGJlaGF2aW9yLCBvciBzb21ldGhpbmcgdGhhdCdzCisgdXNlZnVsIHRvIGtub3cgYnV0IGRvZXNuJ3QgaGFwcGVuIGFsbCB0aGUgdGltZSAoaWUuIHBlciBsb29wIGl0ZXJhdGlvbiBvcgorIGJ1ZmZlciBwcm9jZXNzZWQgb3IgZXZlbnQgaGFuZGxlZCkuCisgQW4gZXhhbXBsZSB3b3VsZCBiZSBub3RpZmljYXRpb25zIGFib3V0IHN0YXRlIGNoYW5nZXMgb3IgcmVjZWl2aW5nL3NlbmRpbmcKKyBvZiBldmVudHMuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtTEVWRUwtTE9HOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9MRVZFTF9MT0c8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPkxvZyBtZXNzYWdlcyBhcmUgbWVzc2FnZXMgdGhhdCBhcmUgdmVyeSBjb21tb24gYnV0IG1pZ2h0IGJlCisgdXNlZnVsIHRvIGtub3cuIEFzIGEgcnVsZSBvZiB0aHVtYiBhIHBpcGVsaW5lIHRoYXQgaXMgaXRlcmF0aW5nIGFzIGV4cGVjdGVkCisgc2hvdWxkIG5ldmVyIG91dHB1dCBhbnl0aGluZyBlbHNlIGJ1dCBMT0cgbWVzc2FnZXMuIFVzZSB0aGlzIGxvZyBsZXZlbCB0bworIGxvZyByZWN1cnJpbmcgaW5mb3JtYXRpb24gaW4gY2hhaW4gZnVuY3Rpb25zIGFuZCBsb29wIGZ1bmN0aW9ucywgZm9yCisgZXhhbXBsZS4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1MRVZFTC1GSVhNRTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTEVWRUxfRklYTUU8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPkZpeG1lIG1lc3NhZ2VzIGFyZSBtZXNzYWdlcyB0aGF0IGluZGljYXRlIHRoYXQgc29tZXRoaW5nCisgaW4gdGhlIGV4ZWN1dGVkIGNvZGUgcGF0aCBpcyBub3QgZnVsbHkgaW1wbGVtZW50ZWQgb3IgaGFuZGxlZCB5ZXQuIE5vdGUKKyB0aGF0IHRoaXMgZG9lcyBub3QgcmVwbGFjZSBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgaW4gYW55IHdheSwgdGhlIHB1cnBvc2UKKyBvZiB0aGlzIG1lc3NhZ2UgaXMgdG8gbWFrZSBpdCBlYXNpZXIgdG8gc3BvdCBpbmNvbXBsZXRlL3VuZmluaXNoZWQgcGllY2VzCisgb2YgY29kZSB3aGVuIHJlYWRpbmcgdGhlIGRlYnVnIGxvZy4gKFNpbmNlOiAwLjEwLjIzKQorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUxFVkVMLVRSQUNFOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9MRVZFTF9UUkFDRTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VHJhY2luZy1yZWxhdGVkIG1lc3NhZ2VzIChTaW5jZTogMC4xMC4zMCkKKyBFeGFtcGxlcyBmb3IgdGhpcyBhcmUgcmVmZXJlbmNpbmcvZGVyZWZlcmVuY2luZyBvZiBvYmplY3RzLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUxFVkVMLU1FTURVTVA6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0xFVkVMX01FTURVTVA8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPm1lbW9yeSBkdW1wIG1lc3NhZ2VzIGFyZSB1c2VkIHRvIGxvZyAoc21hbGwpIGNodW5rcyBvZgorIGRhdGEgYXMgbWVtb3J5IGR1bXBzIGluIHRoZSBsb2cuIFRoZXkgd2lsbCBiZSBkaXNwbGF5ZWQgYXMgaGV4ZHVtcCB3aXRoCisgQVNDSUkgY2hhcmFjdGVycy4gKFNpbmNlOiAwLjEwLjIzKQorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUxFVkVMLUNPVU5UOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9MRVZFTF9DT1VOVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIG51bWJlciBvZiBkZWZpbmVkIGRlYnVnZ2luZyBsZXZlbHMuCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtTEVWRUwtREVGQVVMVDpDQVBTIj48L2E+PGgzPkdTVF9MRVZFTF9ERUZBVUxUPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9MRVZFTF9ERUZBVUxUIEdTVF9MRVZFTF9OT05FCis8L3ByZT4KKzxwPgorRGVmaW5lcyB0aGUgZGVmYXVsdCBkZWJ1Z2dpbmcgbGV2ZWwgdG8gYmUgdXNlZCB3aXRoIEdTdHJlYW1lci4gSXQgaXMgbm9ybWFsbHkKK3NldCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTEVWRUwtTk9ORTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0xFVkVMX05PTkU8L3NwYW4+PC9hPiBzbyBub3RoaW5nIGdldCBwcmludGVkLgorQXMgaXQgY2FuIGJlIGNvbmZpZ3VyZWQgYXQgY29tcGlsZSB0aW1lLCBkZXZlbG9wZXIgYnVpbGRzIG1heSBjaG9zZSB0bworb3ZlcnJpZGUgdGhhdCB0aG91Z2guCitZb3UgY2FuIHVzZSB0aGlzIGFzIGFuIGFyZ3VtZW50IHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1zZXQtZGVmYXVsdC10aHJlc2hvbGQiIHRpdGxlPSJnc3RfZGVidWdfc2V0X2RlZmF1bHRfdGhyZXNob2xkICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGQoKTwvY29kZT48L2E+IHRvCityZXNldCB0aGUgZGVidWdnaW5nIG91dHB1dCB0byBkZWZhdWx0IGJlaGF2aW91ci4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RGVidWdDb2xvckZsYWdzIj48L2E+PGgzPmVudW0gR3N0RGVidWdDb2xvckZsYWdzPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGVudW0geworICAvKiBjb2xvcnMgKi8KKyAgR1NUX0RFQlVHX0ZHX0JMQUNLCQk9IDB4MDAwMCwKKyAgR1NUX0RFQlVHX0ZHX1JFRAkJPSAweDAwMDEsCisgIEdTVF9ERUJVR19GR19HUkVFTgkJPSAweDAwMDIsCisgIEdTVF9ERUJVR19GR19ZRUxMT1cJCT0gMHgwMDAzLAorICBHU1RfREVCVUdfRkdfQkxVRQkJPSAweDAwMDQsCisgIEdTVF9ERUJVR19GR19NQUdFTlRBCQk9IDB4MDAwNSwKKyAgR1NUX0RFQlVHX0ZHX0NZQU4JCT0gMHgwMDA2LAorICBHU1RfREVCVUdfRkdfV0hJVEUJCT0gMHgwMDA3LAorICAvKiBiYWNrZ3JvdW5kIGNvbG9ycyAqLworICBHU1RfREVCVUdfQkdfQkxBQ0sJCT0gMHgwMDAwLAorICBHU1RfREVCVUdfQkdfUkVECQk9IDB4MDAxMCwKKyAgR1NUX0RFQlVHX0JHX0dSRUVOCQk9IDB4MDAyMCwKKyAgR1NUX0RFQlVHX0JHX1lFTExPVwkJPSAweDAwMzAsCisgIEdTVF9ERUJVR19CR19CTFVFCQk9IDB4MDA0MCwKKyAgR1NUX0RFQlVHX0JHX01BR0VOVEEJCT0gMHgwMDUwLAorICBHU1RfREVCVUdfQkdfQ1lBTgkJPSAweDAwNjAsCisgIEdTVF9ERUJVR19CR19XSElURQkJPSAweDAwNzAsCisgIC8qIG90aGVyIGZvcm1hdHMgKi8KKyAgR1NUX0RFQlVHX0JPTEQJCT0gMHgwMTAwLAorICBHU1RfREVCVUdfVU5ERVJMSU5FCQk9IDB4MDIwMAorfSBHc3REZWJ1Z0NvbG9yRmxhZ3M7Cis8L3ByZT4KKzxwPgorVGhlc2UgYXJlIHNvbWUgdGVybWluYWwgc3R5bGUgZmxhZ3MgeW91IGNhbiB1c2Ugd2hlbiBjcmVhdGluZyB5b3VyCitkZWJ1Z2dpbmcgY2F0ZWdvcmllcyB0byBtYWtlIHRoZW0gc3RhbmQgb3V0IGluIGRlYnVnZ2luZyBvdXRwdXQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1ERUJVRy1GRy1CTEFDSzpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfREVCVUdfRkdfQkxBQ0s8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPlVzZSBibGFjayBhcyBmb3JlZ3JvdW5kIGNvbG9yLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULURFQlVHLUZHLVJFRDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfREVCVUdfRkdfUkVEPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Vc2UgcmVkIGFzIGZvcmVncm91bmQgY29sb3IuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtREVCVUctRkctR1JFRU46Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0RFQlVHX0ZHX0dSRUVOPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Vc2UgZ3JlZW4gYXMgZm9yZWdyb3VuZCBjb2xvci4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1ERUJVRy1GRy1ZRUxMT1c6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0RFQlVHX0ZHX1lFTExPVzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VXNlIHllbGxvdyBhcyBmb3JlZ3JvdW5kIGNvbG9yLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULURFQlVHLUZHLUJMVUU6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0RFQlVHX0ZHX0JMVUU8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPlVzZSBibHVlIGFzIGZvcmVncm91bmQgY29sb3IuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtREVCVUctRkctTUFHRU5UQTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfREVCVUdfRkdfTUFHRU5UQTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VXNlIG1hZ2VudGEgYXMgZm9yZWdyb3VuZCBjb2xvci4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1ERUJVRy1GRy1DWUFOOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9ERUJVR19GR19DWUFOPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Vc2UgY3lhbiBhcyBmb3JlZ3JvdW5kIGNvbG9yLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULURFQlVHLUZHLVdISVRFOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9ERUJVR19GR19XSElURTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VXNlIHdoaXRlIGFzIGZvcmVncm91bmQgY29sb3IuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtREVCVUctQkctQkxBQ0s6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0RFQlVHX0JHX0JMQUNLPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Vc2UgYmxhY2sgYXMgYmFja2dyb3VuZCBjb2xvci4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1ERUJVRy1CRy1SRUQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0RFQlVHX0JHX1JFRDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VXNlIHJlZCBhcyBiYWNrZ3JvdW5kIGNvbG9yLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULURFQlVHLUJHLUdSRUVOOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9ERUJVR19CR19HUkVFTjwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VXNlIGdyZWVuIGFzIGJhY2tncm91bmQgY29sb3IuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtREVCVUctQkctWUVMTE9XOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9ERUJVR19CR19ZRUxMT1c8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPlVzZSB5ZWxsb3cgYXMgYmFja2dyb3VuZCBjb2xvci4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1ERUJVRy1CRy1CTFVFOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9ERUJVR19CR19CTFVFPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Vc2UgYmx1ZSBhcyBiYWNrZ3JvdW5kIGNvbG9yLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULURFQlVHLUJHLU1BR0VOVEE6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0RFQlVHX0JHX01BR0VOVEE8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPlVzZSBtYWdlbnRhIGFzIGJhY2tncm91bmQgY29sb3IuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtREVCVUctQkctQ1lBTjpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfREVCVUdfQkdfQ1lBTjwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VXNlIGN5YW4gYXMgYmFja2dyb3VuZCBjb2xvci4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1ERUJVRy1CRy1XSElURTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfREVCVUdfQkdfV0hJVEU8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPlVzZSB3aGl0ZSBhcyBiYWNrZ3JvdW5kIGNvbG9yLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULURFQlVHLUJPTEQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0RFQlVHX0JPTEQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPk1ha2UgdGhlIG91dHB1dCBib2xkLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULURFQlVHLVVOREVSTElORTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfREVCVUdfVU5ERVJMSU5FPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5VbmRlcmxpbmUgdGhlIG91dHB1dC4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdERlYnVnQ2F0ZWdvcnkiPjwvYT48aDM+c3RydWN0IEdzdERlYnVnQ2F0ZWdvcnk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3REZWJ1Z0NhdGVnb3J5IHsKK307Cis8L3ByZT4KKzxwPgorVGhpcyBpcyB0aGUgc3RydWN0IHRoYXQgZGVzY3JpYmVzIHRoZSBjYXRlZ29yaWVzLiBPbmNlIGluaXRpYWxpemVkIHdpdGgKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1DQVRFR09SWS1JTklUOkNBUFMiIHRpdGxlPSJHU1RfREVCVUdfQ0FURUdPUllfSU5JVCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQ8L3NwYW4+PC9hPiwgaXRzIHZhbHVlcyBjYW4ndCBiZSBjaGFuZ2VkIGFueW1vcmUuCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdERlYnVnR3JhcGhEZXRhaWxzIj48L2E+PGgzPmVudW0gR3N0RGVidWdHcmFwaERldGFpbHM8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9ERUJVR19HUkFQSF9TSE9XX01FRElBX1RZUEUgICAgICAgICA9ICgxJmx0OyZsdDswKSwKKyAgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQ0FQU19ERVRBSUxTICAgICAgID0gKDEmbHQ7Jmx0OzEpLAorICBHU1RfREVCVUdfR1JBUEhfU0hPV19OT05fREVGQVVMVF9QQVJBTVMgPSAoMSZsdDsmbHQ7MiksCisgIEdTVF9ERUJVR19HUkFQSF9TSE9XX1NUQVRFUyAgICAgICAgICAgICA9ICgxJmx0OyZsdDszKSwKKyAgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMICAgICAgICAgICAgICAgID0gKCgxJmx0OyZsdDs0KS0xKQorfSBHc3REZWJ1Z0dyYXBoRGV0YWlsczsKKzwvcHJlPgorPHA+CitBdmFpbGFibGUgZGV0YWlscyBmb3IgcGlwZWxpbmUgZ3JhcGhzIHByb2R1Y2VkIGJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1CSU4tVE8tRE9ULUZJTEU6Q0FQUyIgdGl0bGU9IkdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEUoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5HU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFKCk8L2NvZGU+PC9hPgorYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1CSU4tVE8tRE9ULUZJTEUtV0lUSC1UUzpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULURFQlVHLUdSQVBILVNIT1ctTUVESUEtVFlQRTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfREVCVUdfR1JBUEhfU0hPV19NRURJQV9UWVBFPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zaG93IGNhcHMtbmFtZSBvbiBlZGdlcworPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULURFQlVHLUdSQVBILVNIT1ctQ0FQUy1ERVRBSUxTOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9ERUJVR19HUkFQSF9TSE9XX0NBUFNfREVUQUlMUzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2hvdyBjYXBzLWRldGFpbHMgb24gZWRnZXMKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1ERUJVRy1HUkFQSC1TSE9XLU5PTi1ERUZBVUxULVBBUkFNUzpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfREVCVUdfR1JBUEhfU0hPV19OT05fREVGQVVMVF9QQVJBTVM8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnNob3cgbW9kaWZpZWQgcGFyYW1ldGVycyBvbiBlbGVtZW50cworPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULURFQlVHLUdSQVBILVNIT1ctU1RBVEVTOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9ERUJVR19HUkFQSF9TSE9XX1NUQVRFUzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2hvdyBlbGVtZW50IHN0YXRlcworPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULURFQlVHLUdSQVBILVNIT1ctQUxMOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2hvdyBhbGwgZGV0YWlscworPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVNUUi1OVUxMOkNBUFMiPjwvYT48aDM+R1NUX1NUUl9OVUxMKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1NUUl9OVUxMKHN0cikgKChzdHIpID8gKHN0cikgOiAiKE5VTEwpIikKKzwvcHJlPgorPHA+CitNYWNybyB0byB1c2Ugd2hlbiBhIHN0cmluZyBtdXN0IG5vdCBiZSBOVUxMLCBidXQgbWF5IGJlIE5VTEwuIElmIHRoZSBzdHJpbmcKK2lzIE5VTEwsICIoTlVMTCkiIGlzIHByaW50ZWQgaW5zdGVhZC4KK0luIEdTdHJlYW1lciBwcmludGYgc3RyaW5nIGFyZ3VtZW50cyBtYXkgbm90IGJlIE5VTEwsIGJlY2F1c2Ugb24gc29tZQorcGxhdGZvcm1zIChpZSBTb2xhcmlzKSB0aGUgbGliYyBjcmFzaGVzIGluIHRoYXQgY2FzZS4gVGhpcyBpbmNsdWRlcyBkZWJ1Z2dpbmcKK3N0cmluZ3MuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgc3RyaW5nIHRvIGNoZWNrLjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtREVCVUctUEFELU5BTUU6Q0FQUyI+PC9hPjxoMz5HU1RfREVCVUdfUEFEX05BTUUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUocGFkKTwvcHJlPgorPHA+CitFdmFsdWF0ZXMgdG8gMiBzdHJpbmdzLCB0aGF0IGRlc2NyaWJlIHRoZSBwYWQuIE9mdGVuIHVzZWQgaW4gZGVidWdnaW5nCitzdGF0ZW1lbnRzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIHBhZCB0byBkZWJ1Zy48L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUZVTkNUSU9OOkNBUFMiPjwvYT48aDM+R1NUX0ZVTkNUSU9OPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jICBkZWZpbmUgR1NUX0ZVTkNUSU9OICAgICAoKGNvbnN0IGNoYXIqKSAoX19GVU5DVElPTl9fKSkKKzwvcHJlPgorPHA+CitUaGlzIG1hY3JvIHNob3VsZCBldmFsdWF0ZSB0byB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBmdW5jdGlvbiBhbmQgYmUgc2hvdWxkCitiZSBkZWZpbmVkIHdoZW4gY29uZmlndXJpbmcgeW91ciBwcm9qZWN0LCBhcyBpdCBpcyBjb21waWxlciBkZXBlbmRhbnQuIElmIGl0CitpcyBub3QgZGVmaW5lZCwgc29tZSBkZWZhdWx0IHZhbHVlIGlzIHVzZWQuIEl0IGlzIHVzZWQgdG8gcHJvdmlkZSBkZWJ1Z2dpbmcKK291dHB1dCB3aXRoIHRoZSBmdW5jdGlvbiBuYW1lIG9mIHRoZSBtZXNzYWdlLgorPC9wPgorPHA+CitOb3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBHX1NUUkZVTkMgYXMgd2UgZG8gbm90IHdhbnQgdGhlIGZ1bGwKK2Z1bmN0aW9uIHNpZ25hdHVyZSBpbiBDKysgY29kZS4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0TG9nRnVuY3Rpb24iPjwvYT48aDM+R3N0TG9nRnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgKCpHc3RMb2dGdW5jdGlvbikgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NhdGVnb3J5IiB0aXRsZT0ic3RydWN0IEdzdERlYnVnQ2F0ZWdvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0NhdGVnb3J5PC9zcGFuPjwvYT4gKmNhdGVnb3J5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnTGV2ZWwiIHRpdGxlPSJlbnVtIEdzdERlYnVnTGV2ZWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0xldmVsPC9zcGFuPjwvYT4gbGV2ZWw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmlsZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmdW5jdGlvbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBsaW5lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnTWVzc2FnZTwvc3Bhbj4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBkYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRnVuY3Rpb24gcHJvdG90eXBlIGZvciBhIGxvZ2dpbmcgZnVuY3Rpb24gdGhhdCBjYW4gYmUgcmVnaXN0ZXJlZCB3aXRoCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctYWRkLWxvZy1mdW5jdGlvbiIgdGl0bGU9ImdzdF9kZWJ1Z19hZGRfbG9nX2Z1bmN0aW9uICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9kZWJ1Z19hZGRfbG9nX2Z1bmN0aW9uKCk8L2NvZGU+PC9hPi4KK1VzZSBHX0dOVUNfTk9fSU5TVFJVTUVOVCBvbiB0aGF0IGZ1bmN0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhdGVnb3J5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdDYXRlZ29yeSIgdGl0bGU9InN0cnVjdCBHc3REZWJ1Z0NhdGVnb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdDYXRlZ29yeTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxldmVsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdMZXZlbCIgdGl0bGU9ImVudW0gR3N0RGVidWdMZXZlbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnTGV2ZWw8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWxlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmZpbGUgbmFtZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuY3Rpb248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZnVuY3Rpb24gbmFtZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGluZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5saW5lIG51bWJlcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbWVzc2FnZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VyIGRhdGEgZm9yIHRoZSBsb2cgZnVuY3Rpb248L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZGVidWctbG9nIj48L2E+PGgzPmdzdF9kZWJ1Z19sb2cgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2RlYnVnX2xvZyAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NhdGVnb3J5IiB0aXRsZT0ic3RydWN0IEdzdERlYnVnQ2F0ZWdvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0NhdGVnb3J5PC9zcGFuPjwvYT4gKmNhdGVnb3J5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnTGV2ZWwiIHRpdGxlPSJlbnVtIEdzdERlYnVnTGV2ZWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0xldmVsPC9zcGFuPjwvYT4gbGV2ZWw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmlsZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmdW5jdGlvbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBsaW5lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0xvZ3MgdGhlIGdpdmVuIG1lc3NhZ2UgdXNpbmcgdGhlIGN1cnJlbnRseSByZWdpc3RlcmVkIGRlYnVnZ2luZyBoYW5kbGVycy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXRlZ29yeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5jYXRlZ29yeSB0byBsb2c8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxldmVsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmxldmVsIG9mIHRoZSBtZXNzYWdlIGlzIGluPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWxlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBmaWxlIHRoYXQgZW1pdHRlZCB0aGUgbWVzc2FnZSwgdXN1YWxseSB0aGUgX19GSUxFX18gaWRlbnRpZmllcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuY3Rpb248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGZ1bmN0aW9uIHRoYXQgZW1pdHRlZCB0aGUgbWVzc2FnZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGluZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbGluZSBmcm9tIHRoYXQgdGhlIG1lc3NhZ2Ugd2FzIGVtaXR0ZWQsIHVzdWFsbHkgX19MSU5FX188L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgb2JqZWN0IHRoaXMgbWVzc2FnZSByZWxhdGVzIHRvLAorb3IgTlVMTCBpZiBub25lLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHByaW50ZiBzdHlsZSBmb3JtYXQgc3RyaW5nPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+b3B0aW9uYWwgYXJndW1lbnRzIGZvciB0aGUgZm9ybWF0PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRlYnVnLWxvZy12YWxpc3QiPjwvYT48aDM+Z3N0X2RlYnVnX2xvZ192YWxpc3QgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2RlYnVnX2xvZ192YWxpc3QgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NhdGVnb3J5IiB0aXRsZT0ic3RydWN0IEdzdERlYnVnQ2F0ZWdvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0NhdGVnb3J5PC9zcGFuPjwvYT4gKmNhdGVnb3J5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnTGV2ZWwiIHRpdGxlPSJlbnVtIEdzdERlYnVnTGV2ZWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0xldmVsPC9zcGFuPjwvYT4gbGV2ZWw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmlsZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmdW5jdGlvbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBsaW5lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52YV9saXN0PC9zcGFuPiBhcmdzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorTG9ncyB0aGUgZ2l2ZW4gbWVzc2FnZSB1c2luZyB0aGUgY3VycmVudGx5IHJlZ2lzdGVyZWQgZGVidWdnaW5nIGhhbmRsZXJzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhdGVnb3J5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmNhdGVnb3J5IHRvIGxvZzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGV2ZWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bGV2ZWwgb2YgdGhlIG1lc3NhZ2UgaXMgaW48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpbGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGZpbGUgdGhhdCBlbWl0dGVkIHRoZSBtZXNzYWdlLCB1c3VhbGx5IHRoZSBfX0ZJTEVfXyBpZGVudGlmaWVyPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jdGlvbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZnVuY3Rpb24gdGhhdCBlbWl0dGVkIHRoZSBtZXNzYWdlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saW5lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBsaW5lIGZyb20gdGhhdCB0aGUgbWVzc2FnZSB3YXMgZW1pdHRlZCwgdXN1YWxseSBfX0xJTkVfXzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBvYmplY3QgdGhpcyBtZXNzYWdlIHJlbGF0ZXMgdG8sCitvciBOVUxMIGlmIG5vbmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgcHJpbnRmIHN0eWxlIGZvcm1hdCBzdHJpbmc8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFyZ3M8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+b3B0aW9uYWwgYXJndW1lbnRzIGZvciB0aGUgZm9ybWF0PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRlYnVnLW1lc3NhZ2UtZ2V0Ij48L2E+PGgzPmdzdF9kZWJ1Z19tZXNzYWdlX2dldCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICBnc3RfZGVidWdfbWVzc2FnZV9nZXQgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z01lc3NhZ2U8L3NwYW4+ICptZXNzYWdlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgPHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnTWVzc2FnZTwvc3Bhbj4uIFRoaXMgZnVuY3Rpb24gaXMgdXNlZAoraW4gZGVidWcgaGFuZGxlcnMgdG8gZXh0cmFjdCB0aGUgbWVzc2FnZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZXNzYWdlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgZGVidWcgbWVzc2FnZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSA8c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdNZXNzYWdlPC9zcGFuPi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZGVidWctbG9nLWRlZmF1bHQiPjwvYT48aDM+Z3N0X2RlYnVnX2xvZ19kZWZhdWx0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9kZWJ1Z19sb2dfZGVmYXVsdCAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdDYXRlZ29yeSIgdGl0bGU9InN0cnVjdCBHc3REZWJ1Z0NhdGVnb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdDYXRlZ29yeTwvc3Bhbj48L2E+ICpjYXRlZ29yeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0xldmVsIiB0aXRsZT0iZW51bSBHc3REZWJ1Z0xldmVsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdMZXZlbDwvc3Bhbj48L2E+IGxldmVsPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpbGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZnVuY3Rpb248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbGluZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z01lc3NhZ2U8L3NwYW4+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdW51c2VkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVGhlIGRlZmF1bHQgbG9nZ2luZyBoYW5kbGVyIHVzZWQgYnkgR1N0cmVhbWVyLiBMb2dnaW5nIGZ1bmN0aW9ucyBnZXQgY2FsbGVkCit3aGVuZXZlciBhIG1hY3JvIGxpa2UgR1NUX0RFQlVHIG9yIHNpbWlsYXIgaXMgdXNlZC4gVGhpcyBmdW5jdGlvbiBvdXRwdXRzIHRoZQorbWVzc2FnZSBhbmQgYWRkaXRpb25hbCBpbmZvIHRvIHN0ZGVyciAob3IgdGhlIGxvZyBmaWxlIHNwZWNpZmllZCB2aWEgdGhlCitHU1RfREVCVUdfRklMRSBlbnZpcm9ubWVudCB2YXJpYWJsZSkuCis8L3A+Cis8cD4KK1lvdSBjYW4gYWRkIG90aGVyIGhhbmRsZXJzIGJ5IHVzaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1hZGQtbG9nLWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X2RlYnVnX2FkZF9sb2dfZnVuY3Rpb24gKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2RlYnVnX2FkZF9sb2dfZnVuY3Rpb24oKTwvY29kZT48L2E+LgorQW5kIHlvdSBjYW4gcmVtb3ZlIHRoaXMgaGFuZGxlciBieSBjYWxsaW5nCitnc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbihnc3RfZGVidWdfbG9nX2RlZmF1bHQpOworPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhdGVnb3J5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmNhdGVnb3J5IHRvIGxvZzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGV2ZWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bGV2ZWwgb2YgdGhlIG1lc3NhZ2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpbGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGZpbGUgdGhhdCBlbWl0dGVkIHRoZSBtZXNzYWdlLCB1c3VhbGx5IHRoZSBfX0ZJTEVfXyBpZGVudGlmaWVyPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jdGlvbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZnVuY3Rpb24gdGhhdCBlbWl0dGVkIHRoZSBtZXNzYWdlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saW5lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBsaW5lIGZyb20gdGhhdCB0aGUgbWVzc2FnZSB3YXMgZW1pdHRlZCwgdXN1YWxseSBfX0xJTkVfXzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgYWN0dWFsIG1lc3NhZ2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgb2JqZWN0IHRoaXMgbWVzc2FnZSByZWxhdGVzIHRvLAorb3IgTlVMTCBpZiBub25lLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVudXNlZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hbiB1bnVzZWQgdmFyaWFibGUsIHJlc2VydmVkIGZvciBzb21lIHVzZXJfZGF0YS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZGVidWctbGV2ZWwtZ2V0LW5hbWUiPjwvYT48aDM+Z3N0X2RlYnVnX2xldmVsX2dldF9uYW1lICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgIGdzdF9kZWJ1Z19sZXZlbF9nZXRfbmFtZSAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdMZXZlbCIgdGl0bGU9ImVudW0gR3N0RGVidWdMZXZlbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnTGV2ZWw8L3NwYW4+PC9hPiBsZXZlbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZGVidWdnaW5nIGxldmVsCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGV2ZWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGxldmVsIHRvIGdldCB0aGUgbmFtZSBmb3I8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmFtZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1kZWJ1Zy1hZGQtbG9nLWZ1bmN0aW9uIj48L2E+PGgzPmdzdF9kZWJ1Z19hZGRfbG9nX2Z1bmN0aW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9kZWJ1Z19hZGRfbG9nX2Z1bmN0aW9uICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0TG9nRnVuY3Rpb24iIHRpdGxlPSJHc3RMb2dGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdExvZ0Z1bmN0aW9uPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGRhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBZGRzIHRoZSBsb2dnaW5nIGZ1bmN0aW9uIHRvIHRoZSBsaXN0IG9mIGxvZ2dpbmcgZnVuY3Rpb25zLgorQmUgc3VyZSB0byB1c2UgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1NaXNjZWxsYW5lb3VzLU1hY3Jvcy5odG1sI0ctR05VQy1OTy1JTlNUUlVNRU5UOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HX0dOVUNfTk9fSU5TVFJVTUVOVDwvc3Bhbj48L2E+IG9uIHRoYXQgZnVuY3Rpb24sIGl0IGlzIG5lZWRlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBmdW5jdGlvbiB0byB1c2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGlzIHBhcmFtZXRlciBpcyBhICd1c2VyX2RhdGEnLCBmb3IgY2FsbGJhY2tzOyBtYW55IGJpbmRpbmdzIGNhbiBwYXNzIE5VTEwgaGVyZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5jbG9zdXJlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRlYnVnLXJlbW92ZS1sb2ctZnVuY3Rpb24iPjwvYT48aDM+Z3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgZ3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb24gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3RMb2dGdW5jdGlvbiIgdGl0bGU9IkdzdExvZ0Z1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TG9nRnVuY3Rpb248L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVtb3ZlcyBhbGwgcmVnaXN0ZXJlZCBpbnN0YW5jZXMgb2YgdGhlIGdpdmVuIGxvZ2dpbmcgZnVuY3Rpb25zLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGxvZyBmdW5jdGlvbiB0byByZW1vdmU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Ib3cgbWFueSBpbnN0YW5jZXMgb2YgdGhlIGZ1bmN0aW9uIHdlcmUgcmVtb3ZlZDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1kZWJ1Zy1yZW1vdmUtbG9nLWZ1bmN0aW9uLWJ5LWRhdGEiPjwvYT48aDM+Z3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb25fYnlfZGF0YSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICBnc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbl9ieV9kYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBkYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVtb3ZlcyBhbGwgcmVnaXN0ZXJlZCBpbnN0YW5jZXMgb2YgbG9nIGZ1bmN0aW9ucyB3aXRoIHRoZSBnaXZlbiB1c2VyIGRhdGEuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VyIGRhdGEgb2YgdGhlIGxvZyBmdW5jdGlvbiB0byByZW1vdmU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Ib3cgbWFueSBpbnN0YW5jZXMgb2YgdGhlIGZ1bmN0aW9uIHdlcmUgcmVtb3ZlZDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1kZWJ1Zy1zZXQtYWN0aXZlIj48L2E+PGgzPmdzdF9kZWJ1Z19zZXRfYWN0aXZlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9kZWJ1Z19zZXRfYWN0aXZlICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBhY3RpdmU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitJZiBhY3RpdmF0ZWQsIGRlYnVnZ2luZyBtZXNzYWdlcyBhcmUgc2VudCB0byB0aGUgZGVidWdnaW5nCitoYW5kbGVycy4KK0l0IG1ha2VzIHNlbnNlIHRvIGRlYWN0aXZhdGUgaXQgZm9yIHNwZWVkIGlzc3Vlcy4KKzwvcD4KKzxkaXYgY2xhc3M9Im5vdGUiIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij4KKzxoMyBjbGFzcz0idGl0bGUiPk5vdGU8L2gzPgorPHA+VGhpcyBmdW5jdGlvbiBpcyBub3QgdGhyZWFkc2FmZS4gSXQgbWFrZXMgc2Vuc2UgdG8gb25seSBjYWxsIGl0CitkdXJpbmcgaW5pdGlhbGl6YXRpb24uPC9wPgorPC9kaXY+Cis8cD4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWN0aXZlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPldoZXRoZXIgdG8gdXNlIGRlYnVnZ2luZyBvdXRwdXQgb3Igbm90PC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1kZWJ1Zy1pcy1hY3RpdmUiPjwvYT48aDM+Z3N0X2RlYnVnX2lzX2FjdGl2ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfZGVidWdfaXNfYWN0aXZlICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NoZWNrcyBpZiBkZWJ1Z2dpbmcgb3V0cHV0IGlzIGFjdGl2YXRlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUsIGlmIGRlYnVnZ2luZyBpcyBhY3RpdmF0ZWQ8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRlYnVnLXNldC1jb2xvcmVkIj48L2E+PGgzPmdzdF9kZWJ1Z19zZXRfY29sb3JlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfZGVidWdfc2V0X2NvbG9yZWQgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gY29sb3JlZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgb3IgdW5zZXRzIHRoZSB1c2Ugb2YgY29sb3VyZWQgZGVidWdnaW5nIG91dHB1dC4KKzwvcD4KKzxwPgorVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGJlZm9yZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1pbml0IiB0aXRsZT0iZ3N0X2luaXQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2luaXQoKTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb2xvcmVkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPldoZXRoZXIgdG8gdXNlIGNvbG9yZWQgb3V0cHV0IG9yIG5vdDwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZGVidWctaXMtY29sb3JlZCI+PC9hPjxoMz5nc3RfZGVidWdfaXNfY29sb3JlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfZGVidWdfaXNfY29sb3JlZCAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NoZWNrcyBpZiB0aGUgZGVidWdnaW5nIG91dHB1dCBzaG91bGQgYmUgY29sb3JlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUsIGlmIHRoZSBkZWJ1ZyBvdXRwdXQgc2hvdWxkIGJlIGNvbG9yZWQuPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1kZWJ1Zy1zZXQtZGVmYXVsdC10aHJlc2hvbGQiPjwvYT48aDM+Z3N0X2RlYnVnX3NldF9kZWZhdWx0X3RocmVzaG9sZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfZGVidWdfc2V0X2RlZmF1bHRfdGhyZXNob2xkICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnTGV2ZWwiIHRpdGxlPSJlbnVtIEdzdERlYnVnTGV2ZWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0xldmVsPC9zcGFuPjwvYT4gbGV2ZWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXRzIHRoZSBkZWZhdWx0IHRocmVzaG9sZCB0byB0aGUgZ2l2ZW4gbGV2ZWwgYW5kIHVwZGF0ZXMgYWxsIGNhdGVnb3JpZXMgdG8KK3VzZSB0aGlzIHRocmVzaG9sZC4KKzwvcD4KKzxwPgorVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGJlZm9yZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1pbml0IiB0aXRsZT0iZ3N0X2luaXQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2luaXQoKTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sZXZlbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5sZXZlbCB0byBzZXQ8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRlYnVnLWdldC1kZWZhdWx0LXRocmVzaG9sZCI+PC9hPjxoMz5nc3RfZGVidWdfZ2V0X2RlZmF1bHRfdGhyZXNob2xkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0xldmVsIiB0aXRsZT0iZW51bSBHc3REZWJ1Z0xldmVsIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdERlYnVnTGV2ZWw8L3NwYW4+PC9hPiAgICAgICBnc3RfZGVidWdfZ2V0X2RlZmF1bHRfdGhyZXNob2xkICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JldHVybnMgdGhlIGRlZmF1bHQgdGhyZXNob2xkIHRoYXQgaXMgdXNlZCBmb3IgbmV3IGNhdGVnb3JpZXMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZGVmYXVsdCB0aHJlc2hvbGQgbGV2ZWw8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRlYnVnLXNldC10aHJlc2hvbGQtZm9yLW5hbWUiPjwvYT48aDM+Z3N0X2RlYnVnX3NldF90aHJlc2hvbGRfZm9yX25hbWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2RlYnVnX3NldF90aHJlc2hvbGRfZm9yX25hbWUgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnTGV2ZWwiIHRpdGxlPSJlbnVtIEdzdERlYnVnTGV2ZWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0xldmVsPC9zcGFuPjwvYT4gbGV2ZWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXRzIGFsbCBjYXRlZ29yaWVzIHdoaWNoIG1hdGNoIHRoZSBnaXZlbiBnbG9iIHN0eWxlIHBhdHRlcm4gdG8gdGhlIGdpdmVuCitsZXZlbC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm5hbWUgb2YgdGhlIGNhdGVnb3JpZXMgdG8gc2V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sZXZlbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5sZXZlbCB0byBzZXQgdGhlbSB0bzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1kZWJ1Zy11bnNldC10aHJlc2hvbGQtZm9yLW5hbWUiPjwvYT48aDM+Z3N0X2RlYnVnX3Vuc2V0X3RocmVzaG9sZF9mb3JfbmFtZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfZGVidWdfdW5zZXRfdGhyZXNob2xkX2Zvcl9uYW1lICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZXNldHMgYWxsIGNhdGVnb3JpZXMgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBiYWNrIHRvIHRoZSBkZWZhdWx0IGxldmVsLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm5hbWUgb2YgdGhlIGNhdGVnb3JpZXMgdG8gc2V0PC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1ERUJVRy1DQVRFR09SWTpDQVBTIj48L2E+PGgzPkdTVF9ERUJVR19DQVRFR09SWSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9ERUJVR19DQVRFR09SWShjYXQpIEdzdERlYnVnQ2F0ZWdvcnkgKmNhdCA9IE5VTEwKKzwvcHJlPgorPHA+CitEZWZpbmVzIGEgR3N0RGVidWdDYXRlZ29yeSB2YXJpYWJsZS4KK1RoaXMgbWFjcm8gZXhwYW5kcyB0byBub3RoaW5nIGlmIGRlYnVnZ2luZyBpcyBkaXNhYmxlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2F0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjYXRlZ29yeTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtREVCVUctQ0FURUdPUlktRVhURVJOOkNBUFMiPjwvYT48aDM+R1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTigpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4oY2F0KSBleHRlcm4gR3N0RGVidWdDYXRlZ29yeSAqY2F0Cis8L3ByZT4KKzxwPgorRGVjbGFyZXMgYSBHc3REZWJ1Z0NhdGVnb3J5IHZhcmlhYmxlIGFzIGV4dGVybi4gVXNlIGluIGhlYWRlciBmaWxlcy4KK1RoaXMgbWFjcm8gZXhwYW5kcyB0byBub3RoaW5nIGlmIGRlYnVnZ2luZyBpcyBkaXNhYmxlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2F0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjYXRlZ29yeTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtREVCVUctQ0FURUdPUlktU1RBVElDOkNBUFMiPjwvYT48aDM+R1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQygpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMoY2F0KSBzdGF0aWMgR3N0RGVidWdDYXRlZ29yeSAqY2F0ID0gTlVMTAorPC9wcmU+Cis8cD4KK0RlZmluZXMgYSBzdGF0aWMgR3N0RGVidWdDYXRlZ29yeSB2YXJpYWJsZS4KK1RoaXMgbWFjcm8gZXhwYW5kcyB0byBub3RoaW5nIGlmIGRlYnVnZ2luZyBpcyBkaXNhYmxlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2F0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjYXRlZ29yeTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtREVCVUctQ0FURUdPUlktSU5JVDpDQVBTIj48L2E+PGgzPkdTVF9ERUJVR19DQVRFR09SWV9JTklUKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQoY2F0LG5hbWUsY29sb3IsZGVzY3JpcHRpb24pPC9wcmU+Cis8cD4KK0luaXRpYWxpemVzIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnQ2F0ZWdvcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0RGVidWdDYXRlZ29yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnQ2F0ZWdvcnk8L3NwYW4+PC9hPiB3aXRoIHRoZSBnaXZlbiBwcm9wZXJ0aWVzIGFuZCBzZXQgdG8KK3RoZSBkZWZhdWx0IHRocmVzaG9sZC4KKzwvcD4KKzxwPgorPC9wPgorPGRpdiBjbGFzcz0ibm90ZSIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPgorPGgzIGNsYXNzPSJ0aXRsZSI+Tm90ZTwvaDM+Cis8cD4KK1RoaXMgbWFjcm8gZXhwYW5kcyB0byBub3RoaW5nIGlmIGRlYnVnZ2luZyBpcyBkaXNhYmxlZC4KKzwvcD4KKzxwPgorV2hlbiBuYW1pbmcgeW91ciBjYXRlZ29yeSwgcGxlYXNlIGZvbGxvdyB0aGUgZm9sbG93aW5nIGNvbnZlbnRpb25zIHRvIGVuc3VyZQordGhhdCB0aGUgcGF0dGVybiBtYXRjaGluZyBmb3IgY2F0ZWdvcmllcyB3b3JrcyBhcyBleHBlY3RlZC4gSXQgaXMgbm90CitlYXJ0aC1zaGF0dGVyaW5nIGlmIHlvdSBkb24ndCBmb2xsb3cgdGhlc2UgY29udmVudGlvbnMsIGJ1dCBpdCB3b3VsZCBiZSBuaWNlCitmb3IgZXZlcnlvbmUuCis8L3A+Cis8cD4KK0lmIHlvdSBkZWZpbmUgYSBjYXRlZ29yeSBmb3IgYSBwbHVnaW4gb3IgYSBmZWF0dXJlIG9mIGl0LCBuYW1lIHRoZSBjYXRlZ29yeQorbGlrZSB0aGUgZmVhdHVyZS4gU28gaWYgeW91IHdhbnRlZCB0byB3cml0ZSBhICJmaWxlc3JjIiBlbGVtZW50LCB5b3Ugd291bGQKK25hbWUgdGhlIGNhdGVnb3J5ICJmaWxlc3JjIi4gVXNlIGxvd2VyY2FzZSBsZXR0ZXJzIG9ubHkuCitJZiB5b3UgZGVmaW5lIG1vcmUgdGhhbiBvbmUgY2F0ZWdvcnkgZm9yIHRoZSBzYW1lIGVsZW1lbnQsIGFwcGVuZCBhbgordW5kZXJzY29yZSBhbmQgYW4gaWRlbnRpZmllciB0byB5b3VyIGNhdGVnb3JpZXMsIGxpa2UgdGhpczogImZpbGVzcmNfY2FjaGUiCis8L3A+Cis8cD4KK0lmIHlvdSBjcmVhdGUgYSBsaWJyYXJ5IG9yIGFuIGFwcGxpY2F0aW9uIHVzaW5nIGRlYnVnZ2luZyBjYXRlZ29yaWVzLCB1c2UgYQorY29tbW9uIHByZWZpeCBmb2xsb3dlZCBieSBhbiB1bmRlcnNjb3JlIGZvciBhbGwgeW91ciBjYXRlZ29yaWVzLiBHU3RyZWFtZXIKK3VzZXMgdGhlIEdTVCBwcmVmaXggc28gR1N0cmVhbWVyIGNhdGVnb3JpZXMgbG9vayBsaWtlICJHU1RfU1RBVEVTIi4gQmUgc3VyZQordG8gaW5jbHVkZSB1cHBlcmNhc2UgbGV0dGVycy4KKzwvcD4KKzwvZGl2PgorPHA+Cis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2F0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjYXRlZ29yeSB0byBpbml0aWFsaXplLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmFtZSBvZiB0aGUgY2F0ZWdvcnkuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb2xvcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY29sb3JzIHRvIHVzZSBmb3IgYSBjb2xvciByZXByZXNlbnRhdGlvbiBvciAwIGZvciBubyBjb2xvci48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc2NyaXB0aW9uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm9wdGlvbmFsIGRlc2NyaXB0aW9uIG9mIHRoZSBjYXRlZ29yeS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtREVCVUctQ0FURUdPUlktR0VUOkNBUFMiPjwvYT48aDM+R1NUX0RFQlVHX0NBVEVHT1JZX0dFVCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9ERUJVR19DQVRFR09SWV9HRVQoY2F0LG5hbWUpPC9wcmU+Cis8cD4KK0xvb2tzIHVwIGFuIGV4aXN0aW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnQ2F0ZWdvcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0RGVidWdDYXRlZ29yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnQ2F0ZWdvcnk8L3NwYW4+PC9hPiBieSBpdHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT4gYW5kIHNldHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhdDwvY29kZT48L2VtPi4gSWYgdGhlCitjYXRlZ29yeSBpcyBub3QgZm91bmQsIGJ1dCBHU1RfQ0FUX0RFRkFVTFQgaXMgZGVmaW5lZCwgdGhhdCBpcyBhc3NpZ25lZCB0bworPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhdDwvY29kZT48L2VtPi4gT3RoZXJ3aXNlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXQ8L2NvZGU+PC9lbT4gd2lsbCBiZSBOVUxMLgorPC9wPgorPHA+Cis8L3A+Cis8ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9teXBsdWdpbl9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfbXlwbHVnaW5fZGVidWcKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKEdTVF9DQVRfUEVSRk9STUFOQ0UpOworLi4uCitHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X215cGx1Z2luX2RlYnVnLCAibXlwbHVnaW4iLCAwLCAibmljZSBlbGVtZW50Iik7CitHU1RfREVCVUdfQ0FURUdPUllfR0VUIChHU1RfQ0FUX1BFUkZPUk1BTkNFLCAiR1NUX1BFUkZPUk1BTkNFIik7Cis8L3ByZT48L2Rpdj4KKzxwPgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY2F0ZWdvcnkgdG8gaW5pdGlhbGl6ZS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bG9nIGNhdGVnb3J5IG5hbWU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI0PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZGVidWctY2F0ZWdvcnktZnJlZSI+PC9hPjxoMz5nc3RfZGVidWdfY2F0ZWdvcnlfZnJlZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfZGVidWdfY2F0ZWdvcnlfZnJlZSAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnQ2F0ZWdvcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0RGVidWdDYXRlZ29yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnQ2F0ZWdvcnk8L3NwYW4+PC9hPiAqY2F0ZWdvcnk8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZW1vdmVzIGFuZCBmcmVlcyB0aGUgY2F0ZWdvcnkgYW5kIGFsbCBhc3NvY2lhdGVkIHJlc291cmNlcy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2F0ZWdvcnk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NhdGVnb3J5IiB0aXRsZT0ic3RydWN0IEdzdERlYnVnQ2F0ZWdvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0NhdGVnb3J5PC9zcGFuPjwvYT4gdG8gZnJlZS48L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRlYnVnLWNhdGVnb3J5LXNldC10aHJlc2hvbGQiPjwvYT48aDM+Z3N0X2RlYnVnX2NhdGVnb3J5X3NldF90aHJlc2hvbGQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2RlYnVnX2NhdGVnb3J5X3NldF90aHJlc2hvbGQgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NhdGVnb3J5IiB0aXRsZT0ic3RydWN0IEdzdERlYnVnQ2F0ZWdvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0NhdGVnb3J5PC9zcGFuPjwvYT4gKmNhdGVnb3J5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnTGV2ZWwiIHRpdGxlPSJlbnVtIEdzdERlYnVnTGV2ZWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0xldmVsPC9zcGFuPjwvYT4gbGV2ZWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXRzIHRoZSB0aHJlc2hvbGQgb2YgdGhlIGNhdGVnb3J5IHRvIHRoZSBnaXZlbiBsZXZlbC4gRGVidWcgaW5mb3JtYXRpb24gd2lsbAorb25seSBiZSBvdXRwdXQgaWYgdGhlIHRocmVzaG9sZCBpcyBsb3dlciBvciBlcXVhbCB0byB0aGUgbGV2ZWwgb2YgdGhlCitkZWJ1Z2dpbmcgbWVzc2FnZS4KKzwvcD4KKzxkaXYgY2xhc3M9Im5vdGUiIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij4KKzxoMyBjbGFzcz0idGl0bGUiPk5vdGU8L2gzPgorPHA+CitEbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24gaW4gcHJvZHVjdGlvbiBjb2RlLCBiZWNhdXNlIG90aGVyIGZ1bmN0aW9ucyBtYXkKK2NoYW5nZSB0aGUgdGhyZXNob2xkIG9mIGNhdGVnb3JpZXMgYXMgc2lkZSBlZmZlY3QuIEl0IGlzIGhvd2V2ZXIgYSBuaWNlCitmdW5jdGlvbiB0byB1c2Ugd2hlbiBkZWJ1Z2dpbmcgKGV2ZW4gZnJvbSBnZGIpLgorPC9wPgorPC9kaXY+Cis8cD4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXRlZ29yeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnQ2F0ZWdvcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0RGVidWdDYXRlZ29yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnQ2F0ZWdvcnk8L3NwYW4+PC9hPiB0byBzZXQgdGhyZXNob2xkIG9mLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGV2ZWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnTGV2ZWwiIHRpdGxlPSJlbnVtIEdzdERlYnVnTGV2ZWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0xldmVsPC9zcGFuPjwvYT4gdGhyZXNob2xkIHRvIHNldC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZGVidWctY2F0ZWdvcnktcmVzZXQtdGhyZXNob2xkIj48L2E+PGgzPmdzdF9kZWJ1Z19jYXRlZ29yeV9yZXNldF90aHJlc2hvbGQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2RlYnVnX2NhdGVnb3J5X3Jlc2V0X3RocmVzaG9sZCAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NhdGVnb3J5IiB0aXRsZT0ic3RydWN0IEdzdERlYnVnQ2F0ZWdvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0NhdGVnb3J5PC9zcGFuPjwvYT4gKmNhdGVnb3J5PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVzZXRzIHRoZSB0aHJlc2hvbGQgb2YgdGhlIGNhdGVnb3J5IHRvIHRoZSBkZWZhdWx0IGxldmVsLiBEZWJ1ZyBpbmZvcm1hdGlvbgord2lsbCBvbmx5IGJlIG91dHB1dCBpZiB0aGUgdGhyZXNob2xkIGlzIGxvd2VyIG9yIGVxdWFsIHRvIHRoZSBsZXZlbCBvZiB0aGUKK2RlYnVnZ2luZyBtZXNzYWdlLgorVXNlIHRoaXMgZnVuY3Rpb24gdG8gc2V0IHRoZSB0aHJlc2hvbGQgYmFjayB0byB3aGVyZSBpdCB3YXMgYWZ0ZXIgdXNpbmcKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1jYXRlZ29yeS1zZXQtdGhyZXNob2xkIiB0aXRsZT0iZ3N0X2RlYnVnX2NhdGVnb3J5X3NldF90aHJlc2hvbGQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2RlYnVnX2NhdGVnb3J5X3NldF90aHJlc2hvbGQoKTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXRlZ29yeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnQ2F0ZWdvcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0RGVidWdDYXRlZ29yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnQ2F0ZWdvcnk8L3NwYW4+PC9hPiB0byByZXNldCB0aHJlc2hvbGQgb2YuPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1kZWJ1Zy1jYXRlZ29yeS1nZXQtdGhyZXNob2xkIj48L2E+PGgzPmdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfdGhyZXNob2xkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0xldmVsIiB0aXRsZT0iZW51bSBHc3REZWJ1Z0xldmVsIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdERlYnVnTGV2ZWw8L3NwYW4+PC9hPiAgICAgICBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZCAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnQ2F0ZWdvcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0RGVidWdDYXRlZ29yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnQ2F0ZWdvcnk8L3NwYW4+PC9hPiAqY2F0ZWdvcnk8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZXR1cm5zIHRoZSB0aHJlc2hvbGQgb2YgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NhdGVnb3J5IiB0aXRsZT0ic3RydWN0IEdzdERlYnVnQ2F0ZWdvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0NhdGVnb3J5PC9zcGFuPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2F0ZWdvcnk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NhdGVnb3J5IiB0aXRsZT0ic3RydWN0IEdzdERlYnVnQ2F0ZWdvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0NhdGVnb3J5PC9zcGFuPjwvYT4gdG8gZ2V0IHRocmVzaG9sZCBvZi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdMZXZlbCIgdGl0bGU9ImVudW0gR3N0RGVidWdMZXZlbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnTGV2ZWw8L3NwYW4+PC9hPiB0aGF0IGlzIHVzZWQgYXMgdGhyZXNob2xkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1kZWJ1Zy1jYXRlZ29yeS1nZXQtbmFtZSI+PC9hPjxoMz5nc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X25hbWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICogICAgICAgZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9uYW1lICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NhdGVnb3J5IiB0aXRsZT0ic3RydWN0IEdzdERlYnVnQ2F0ZWdvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0NhdGVnb3J5PC9zcGFuPjwvYT4gKmNhdGVnb3J5PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0dXJucyB0aGUgbmFtZSBvZiBhIGRlYnVnIGNhdGVnb3J5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhdGVnb3J5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdDYXRlZ29yeSIgdGl0bGU9InN0cnVjdCBHc3REZWJ1Z0NhdGVnb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdDYXRlZ29yeTwvc3Bhbj48L2E+IHRvIGdldCBuYW1lIG9mLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuYW1lIG9mIHRoZSBjYXRlZ29yeS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZGVidWctY2F0ZWdvcnktZ2V0LWNvbG9yIj48L2E+PGgzPmdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfY29sb3IgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9jb2xvciAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NhdGVnb3J5IiB0aXRsZT0ic3RydWN0IEdzdERlYnVnQ2F0ZWdvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0NhdGVnb3J5PC9zcGFuPjwvYT4gKmNhdGVnb3J5PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0dXJucyB0aGUgY29sb3Igb2YgYSBkZWJ1ZyBjYXRlZ29yeSB1c2VkIHdoZW4gcHJpbnRpbmcgb3V0cHV0IGluIHRoaXMKK2NhdGVnb3J5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhdGVnb3J5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdDYXRlZ29yeSIgdGl0bGU9InN0cnVjdCBHc3REZWJ1Z0NhdGVnb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdDYXRlZ29yeTwvc3Bhbj48L2E+IHRvIGdldCB0aGUgY29sb3Igb2YuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGNvbG9yIG9mIHRoZSBjYXRlZ29yeS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZGVidWctY2F0ZWdvcnktZ2V0LWRlc2NyaXB0aW9uIj48L2E+PGgzPmdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfZGVzY3JpcHRpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICogICAgICAgZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9kZXNjcmlwdGlvbiAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NhdGVnb3J5IiB0aXRsZT0ic3RydWN0IEdzdERlYnVnQ2F0ZWdvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0NhdGVnb3J5PC9zcGFuPjwvYT4gKmNhdGVnb3J5PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0dXJucyB0aGUgZGVzY3JpcHRpb24gb2YgYSBkZWJ1ZyBjYXRlZ29yeS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXRlZ29yeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnQ2F0ZWdvcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0RGVidWdDYXRlZ29yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnQ2F0ZWdvcnk8L3NwYW4+PC9hPiB0byBnZXQgdGhlIGRlc2NyaXB0aW9uIG9mLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgY2F0ZWdvcnkuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRlYnVnLWdldC1hbGwtY2F0ZWdvcmllcyI+PC9hPjxoMz5nc3RfZGVidWdfZ2V0X2FsbF9jYXRlZ29yaWVzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVNpbmdseS1MaW5rZWQtTGlzdHMuaHRtbCNHU0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1NMaXN0PC9zcGFuPjwvYT4gKiAgICAgICAgICAgIGdzdF9kZWJ1Z19nZXRfYWxsX2NhdGVnb3JpZXMgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0dXJucyBhIHNuYXBzaG90IG9mIGEgYWxsIGNhdGVnb3JpZXMgdGhhdCBhcmUgY3VycmVudGx5IGluIHVzZSAuIFRoaXMgbGlzdAorbWF5IGNoYW5nZSBhbnl0aW1lLgorVGhlIGNhbGxlciBoYXMgdG8gZnJlZSB0aGUgbGlzdCBhZnRlciB1c2UuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbGlzdCBvZgorZGVidWcgY2F0ZWdvcmllcy4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGNvbnRhaW5lciBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGNvbnRhaW5lcjwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3QuRGVidWdDYXRlZ29yeV08L3NwYW4+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRlYnVnLWNvbnN0cnVjdC10ZXJtLWNvbG9yIj48L2E+PGgzPmdzdF9kZWJ1Z19jb25zdHJ1Y3RfdGVybV9jb2xvciAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICAgICAgICBnc3RfZGVidWdfY29uc3RydWN0X3Rlcm1fY29sb3IgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gY29sb3JpbmZvPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ29uc3RydWN0cyBhIHN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIGZvciBnZXR0aW5nIHRoZSBkZXNpcmVkIGNvbG9yIGluIGNvbG9yCit0ZXJtaW5hbHMuCitZb3UgbmVlZCB0byBmcmVlIHRoZSBzdHJpbmcgYWZ0ZXIgdXNlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbG9yaW5mbzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY29sb3IgaW5mbzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNvbG9yCitkZWZpbml0aW9uLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJPdmVycmlkZSB0aGUgcGFyc2VkIEMgdHlwZSB3aXRoIGdpdmVuIHR5cGUiPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50eXBlPC9zcGFuPjwvYWNyb255bT4gZ2NoYXIqXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1kZWJ1Zy1jb25zdHJ1Y3Qtd2luLWNvbG9yIj48L2E+PGgzPmdzdF9kZWJ1Z19jb25zdHJ1Y3Rfd2luX2NvbG9yICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgZ3N0X2RlYnVnX2NvbnN0cnVjdF93aW5fY29sb3IgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGNvbG9yaW5mbzwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NvbnN0cnVjdHMgYW4gaW50ZWdlciB0aGF0IGNhbiBiZSB1c2VkIGZvciBnZXR0aW5nIHRoZSBkZXNpcmVkIGNvbG9yIGluCit3aW5kb3dzJyB0ZXJtaW5hbHMgKGNtZC5leGUpLiBBcyB0aGVyZSBpcyBubyBtZWFuIHRvIHVuZGVybGluZSwgd2Ugc2ltcGx5CitpZ25vcmUgdGhpcyBhdHRyaWJ1dGUuCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gcmV0dXJucyAwIG9uIG5vbi13aW5kb3dzIG1hY2hpbmVzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbG9yaW5mbzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY29sb3IgaW5mbzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFuIGludGVnZXIgY29udGFpbmluZyB0aGUgY29sb3IgZGVmaW5pdGlvbjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjM8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1DQVQtTEVWRUwtTE9HOkNBUFMiPjwvYT48aDM+R1NUX0NBVF9MRVZFTF9MT0coKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfQ0FUX0xFVkVMX0xPRyhjYXQsbGV2ZWwsb2JqZWN0LC4uLik8L3ByZT4KKzxwPgorT3V0cHV0cyBhIGRlYnVnZ2luZyBtZXNzYWdlLiBUaGlzIGlzIHRoZSBtb3N0IGdlbmVyYWwgbWFjcm8gZm9yIG91dHB1dHRpbmcKK2RlYnVnZ2luZyBtZXNzYWdlcy4gWW91IHdpbGwgcHJvYmFibHkgd2FudCB0byB1c2Ugb25lIG9mIHRoZSBvbmVzIGRlc2NyaWJlZAorYmVsb3cuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2F0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmNhdGVnb3J5IHRvIHVzZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGV2ZWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNldmVyaXR5IG9mIHRoZSBtZXNzYWdlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+IHRoZSBtZXNzYWdlIGJlbG9uZ3MgdG8gb3IgTlVMTCBpZiBub25lPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBwcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQ0FULUVSUk9SLU9CSkVDVDpDQVBTIj48L2E+PGgzPkdTVF9DQVRfRVJST1JfT0JKRUNUKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NBVF9FUlJPUl9PQkpFQ1QoY2F0LG9iaiwuLi4pwqBHU1RfQ0FUX0xFVkVMX0xPRyAoY2F0LCBHU1RfTEVWRUxfRVJST1IsICAgb2JqLCAgX19WQV9BUkdTX18pCis8L3ByZT4KKzxwPgorT3V0cHV0IGFuIGVycm9yIG1lc3NhZ2UgYmVsb25naW5nIHRvIHRoZSBnaXZlbiBvYmplY3QgaW4gdGhlIGdpdmVuIGNhdGVnb3J5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5jYXRlZ29yeSB0byB1c2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iajwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gdGhlIG1lc3NhZ2UgYmVsb25ncyB0bzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1DQVQtV0FSTklORy1PQkpFQ1Q6Q0FQUyI+PC9hPjxoMz5HU1RfQ0FUX1dBUk5JTkdfT0JKRUNUKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NBVF9XQVJOSU5HX09CSkVDVChjYXQsb2JqLC4uLinCoEdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9XQVJOSU5HLCBvYmosICBfX1ZBX0FSR1NfXykKKzwvcHJlPgorPHA+CitPdXRwdXQgYSB3YXJuaW5nIG1lc3NhZ2UgYmVsb25naW5nIHRvIHRoZSBnaXZlbiBvYmplY3QgaW4gdGhlIGdpdmVuIGNhdGVnb3J5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5jYXRlZ29yeSB0byB1c2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iajwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gdGhlIG1lc3NhZ2UgYmVsb25ncyB0bzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1DQVQtSU5GTy1PQkpFQ1Q6Q0FQUyI+PC9hPjxoMz5HU1RfQ0FUX0lORk9fT0JKRUNUKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NBVF9JTkZPX09CSkVDVChjYXQsb2JqLC4uLinCoEdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9JTkZPLCAgICBvYmosICBfX1ZBX0FSR1NfXykKKzwvcHJlPgorPHA+CitPdXRwdXQgYW4gaW5mb3JtYXRpb25hbCBtZXNzYWdlIGJlbG9uZ2luZyB0byB0aGUgZ2l2ZW4gb2JqZWN0IGluIHRoZSBnaXZlbgorY2F0ZWdvcnkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2F0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmNhdGVnb3J5IHRvIHVzZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiB0aGUgbWVzc2FnZSBiZWxvbmdzIHRvPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUNBVC1ERUJVRy1PQkpFQ1Q6Q0FQUyI+PC9hPjxoMz5HU1RfQ0FUX0RFQlVHX09CSkVDVCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DQVRfREVCVUdfT0JKRUNUKGNhdCxvYmosLi4uKcKgR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX0RFQlVHLCAgIG9iaiwgIF9fVkFfQVJHU19fKQorPC9wcmU+Cis8cD4KK091dHB1dCBhbiBkZWJ1Z2dpbmcgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2F0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmNhdGVnb3J5IHRvIHVzZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiB0aGUgbWVzc2FnZSBiZWxvbmdzIHRvPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUNBVC1MT0ctT0JKRUNUOkNBUFMiPjwvYT48aDM+R1NUX0NBVF9MT0dfT0JKRUNUKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NBVF9MT0dfT0JKRUNUKGNhdCxvYmosLi4uKQkJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX0xPRywgICAgIG9iaiwgIF9fVkFfQVJHU19fKQorPC9wcmU+Cis8cD4KK091dHB1dCBhbiBsb2dnaW5nIG1lc3NhZ2UgYmVsb25naW5nIHRvIHRoZSBnaXZlbiBvYmplY3QgaW4gdGhlIGdpdmVuIGNhdGVnb3J5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5jYXRlZ29yeSB0byB1c2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iajwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gdGhlIG1lc3NhZ2UgYmVsb25ncyB0bzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1DQVQtRklYTUUtT0JKRUNUOkNBUFMiPjwvYT48aDM+R1NUX0NBVF9GSVhNRV9PQkpFQ1QoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQ0FUX0ZJWE1FX09CSkVDVChjYXQsb2JqLC4uLinCoEdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9GSVhNRSwgICBvYmosICBfX1ZBX0FSR1NfXykKKzwvcHJlPgorPHA+CitPdXRwdXQgYSBmaXhtZSBtZXNzYWdlIGJlbG9uZ2luZyB0byB0aGUgZ2l2ZW4gb2JqZWN0IGluIHRoZSBnaXZlbiBjYXRlZ29yeS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Y2F0ZWdvcnkgdG8gdXNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmo8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+IHRoZSBtZXNzYWdlIGJlbG9uZ3MgdG88L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQ0FULVRSQUNFLU9CSkVDVDpDQVBTIj48L2E+PGgzPkdTVF9DQVRfVFJBQ0VfT0JKRUNUKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NBVF9UUkFDRV9PQkpFQ1QoY2F0LG9iaiwuLi4pwqBHU1RfQ0FUX0xFVkVMX0xPRyAoY2F0LCBHU1RfTEVWRUxfVFJBQ0UsICAgb2JqLCAgX19WQV9BUkdTX18pCis8L3ByZT4KKzxwPgorT3V0cHV0IGEgdHJhY2luZyBtZXNzYWdlIGJlbG9uZ2luZyB0byB0aGUgZ2l2ZW4gb2JqZWN0IGluIHRoZSBnaXZlbgorY2F0ZWdvcnkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2F0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmNhdGVnb3J5IHRvIHVzZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiB0aGUgbWVzc2FnZSBiZWxvbmdzIHRvPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUNBVC1NRU1EVU1QLU9CSkVDVDpDQVBTIj48L2E+PGgzPkdTVF9DQVRfTUVNRFVNUF9PQkpFQ1QoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfQ0FUX01FTURVTVBfT0JKRUNUKGNhdCxvYmosbXNnLGRhdGEsbGVuZ3RoKTwvcHJlPgorPHA+CitPdXRwdXQgYSBoZXhkdW1wIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+IHJlbGF0aW5nIHRvIHRoZSBnaXZlbiBvYmplY3QgaW4gdGhlIGdpdmVuCitjYXRlZ29yeS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Y2F0ZWdvcnkgdG8gdXNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmo8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+IHRoZSBtZXNzYWdlIGJlbG9uZ3MgdG88L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1zZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5tZXNzYWdlIHN0cmluZyB0byBsb2cgd2l0aCB0aGUgZGF0YTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIHRoZSBkYXRhIHRvIG91dHB1dDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGVuZ3RoPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmxlbmd0aCBvZiB0aGUgZGF0YSB0byBvdXRwdXQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQ0FULUVSUk9SOkNBUFMiPjwvYT48aDM+R1NUX0NBVF9FUlJPUigpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DQVRfRVJST1IoY2F0LC4uLikJCQlHU1RfQ0FUX0xFVkVMX0xPRyAoY2F0LCBHU1RfTEVWRUxfRVJST1IsICAgTlVMTCwgX19WQV9BUkdTX18pCis8L3ByZT4KKzxwPgorT3V0cHV0IGFuIGVycm9yIG1lc3NhZ2UgaW4gdGhlIGdpdmVuIGNhdGVnb3J5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5jYXRlZ29yeSB0byB1c2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQ0FULVdBUk5JTkc6Q0FQUyI+PC9hPjxoMz5HU1RfQ0FUX1dBUk5JTkcoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQ0FUX1dBUk5JTkcoY2F0LC4uLikJCUdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9XQVJOSU5HLCBOVUxMLCBfX1ZBX0FSR1NfXykKKzwvcHJlPgorPHA+CitPdXRwdXQgYW4gd2FybmluZyBtZXNzYWdlIGluIHRoZSBnaXZlbiBjYXRlZ29yeS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Y2F0ZWdvcnkgdG8gdXNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUNBVC1JTkZPOkNBUFMiPjwvYT48aDM+R1NUX0NBVF9JTkZPKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NBVF9JTkZPKGNhdCwuLi4pCQkJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX0lORk8sICAgIE5VTEwsIF9fVkFfQVJHU19fKQorPC9wcmU+Cis8cD4KK091dHB1dCBhbiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UgaW4gdGhlIGdpdmVuIGNhdGVnb3J5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5jYXRlZ29yeSB0byB1c2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQ0FULURFQlVHOkNBUFMiPjwvYT48aDM+R1NUX0NBVF9ERUJVRygpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DQVRfREVCVUcoY2F0LC4uLikJCQlHU1RfQ0FUX0xFVkVMX0xPRyAoY2F0LCBHU1RfTEVWRUxfREVCVUcsICAgTlVMTCwgX19WQV9BUkdTX18pCis8L3ByZT4KKzxwPgorT3V0cHV0IGFuIGRlYnVnZ2luZyBtZXNzYWdlIGluIHRoZSBnaXZlbiBjYXRlZ29yeS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Y2F0ZWdvcnkgdG8gdXNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUNBVC1MT0c6Q0FQUyI+PC9hPjxoMz5HU1RfQ0FUX0xPRygpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DQVRfTE9HKGNhdCwuLi4pCQkJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX0xPRywgICAgIE5VTEwsIF9fVkFfQVJHU19fKQorPC9wcmU+Cis8cD4KK091dHB1dCBhbiBsb2dnaW5nIG1lc3NhZ2UgaW4gdGhlIGdpdmVuIGNhdGVnb3J5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5jYXRlZ29yeSB0byB1c2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQ0FULUZJWE1FOkNBUFMiPjwvYT48aDM+R1NUX0NBVF9GSVhNRSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DQVRfRklYTUUoY2F0LC4uLikJCQlHU1RfQ0FUX0xFVkVMX0xPRyAoY2F0LCBHU1RfTEVWRUxfRklYTUUsICAgTlVMTCwgX19WQV9BUkdTX18pCis8L3ByZT4KKzxwPgorT3V0cHV0IGFuIGZpeG1lIG1lc3NhZ2UgaW4gdGhlIGdpdmVuIGNhdGVnb3J5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5jYXRlZ29yeSB0byB1c2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQ0FULVRSQUNFOkNBUFMiPjwvYT48aDM+R1NUX0NBVF9UUkFDRSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DQVRfVFJBQ0UoY2F0LC4uLikJCUdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9UUkFDRSwgICBOVUxMLCBfX1ZBX0FSR1NfXykKKzwvcHJlPgorPHA+CitPdXRwdXQgYSB0cmFjaW5nIG1lc3NhZ2UgaW4gdGhlIGdpdmVuIGNhdGVnb3J5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5jYXRlZ29yeSB0byB1c2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQ0FULU1FTURVTVA6Q0FQUyI+PC9hPjxoMz5HU1RfQ0FUX01FTURVTVAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfQ0FUX01FTURVTVAoY2F0LG1zZyxkYXRhLGxlbmd0aCk8L3ByZT4KKzxwPgorT3V0cHV0IGEgaGV4ZHVtcCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPiBpbiB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2F0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmNhdGVnb3J5IHRvIHVzZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bXNnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm1lc3NhZ2Ugc3RyaW5nIHRvIGxvZyB3aXRoIHRoZSBkYXRhPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gb3V0cHV0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sZW5ndGg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bGVuZ3RoIG9mIHRoZSBkYXRhIHRvIG91dHB1dDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjM8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1FUlJPUi1PQkpFQ1Q6Q0FQUyI+PC9hPjxoMz5HU1RfRVJST1JfT0JKRUNUKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0VSUk9SX09CSkVDVChvYmosLi4uKcKgR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0VSUk9SLCAgIG9iaiwgIF9fVkFfQVJHU19fKQorPC9wcmU+Cis8cD4KK091dHB1dCBhbiBlcnJvciBtZXNzYWdlIGJlbG9uZ2luZyB0byB0aGUgZ2l2ZW4gb2JqZWN0IGluIHRoZSBkZWZhdWx0IGNhdGVnb3J5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iajwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gdGhlIG1lc3NhZ2UgYmVsb25ncyB0bzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1XQVJOSU5HLU9CSkVDVDpDQVBTIj48L2E+PGgzPkdTVF9XQVJOSU5HX09CSkVDVCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9XQVJOSU5HX09CSkVDVChvYmosLi4uKcKgR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX1dBUk5JTkcsIG9iaiwgIF9fVkFfQVJHU19fKQorPC9wcmU+Cis8cD4KK091dHB1dCBhIHdhcm5pbmcgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZGVmYXVsdCBjYXRlZ29yeS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmo8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+IHRoZSBtZXNzYWdlIGJlbG9uZ3MgdG88L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtSU5GTy1PQkpFQ1Q6Q0FQUyI+PC9hPjxoMz5HU1RfSU5GT19PQkpFQ1QoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfSU5GT19PQkpFQ1Qob2JqLC4uLinCoEdTVF9DQVRfTEVWRUxfTE9HIChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9JTkZPLCAgICBvYmosICBfX1ZBX0FSR1NfXykKKzwvcHJlPgorPHA+CitPdXRwdXQgYW4gaW5mb3JtYXRpb25hbCBtZXNzYWdlIGJlbG9uZ2luZyB0byB0aGUgZ2l2ZW4gb2JqZWN0IGluIHRoZSBkZWZhdWx0CitjYXRlZ29yeS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmo8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+IHRoZSBtZXNzYWdlIGJlbG9uZ3MgdG88L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtREVCVUctT0JKRUNUOkNBUFMiPjwvYT48aDM+R1NUX0RFQlVHX09CSkVDVCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9ERUJVR19PQkpFQ1Qob2JqLC4uLinCoEdTVF9DQVRfTEVWRUxfTE9HIChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9ERUJVRywgICBvYmosICBfX1ZBX0FSR1NfXykKKzwvcHJlPgorPHA+CitPdXRwdXQgYSBkZWJ1Z2dpbmcgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZGVmYXVsdAorY2F0ZWdvcnkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiB0aGUgbWVzc2FnZSBiZWxvbmdzIHRvPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUxPRy1PQkpFQ1Q6Q0FQUyI+PC9hPjxoMz5HU1RfTE9HX09CSkVDVCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9MT0dfT0JKRUNUKG9iaiwuLi4pCQlHU1RfQ0FUX0xFVkVMX0xPRyAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfTE9HLCAgICAgb2JqLCAgX19WQV9BUkdTX18pCis8L3ByZT4KKzxwPgorT3V0cHV0IGEgbG9nZ2luZyBtZXNzYWdlIGJlbG9uZ2luZyB0byB0aGUgZ2l2ZW4gb2JqZWN0IGluIHRoZSBkZWZhdWx0IGNhdGVnb3J5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iajwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gdGhlIG1lc3NhZ2UgYmVsb25ncyB0bzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1GSVhNRS1PQkpFQ1Q6Q0FQUyI+PC9hPjxoMz5HU1RfRklYTUVfT0JKRUNUKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0ZJWE1FX09CSkVDVChvYmosLi4uKcKgR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0ZJWE1FLCAgIG9iaiwgIF9fVkFfQVJHU19fKQorPC9wcmU+Cis8cD4KK091dHB1dCBhIGZpeG1lIG1lc3NhZ2UgYmVsb25naW5nIHRvIHRoZSBnaXZlbiBvYmplY3QgaW4gdGhlIGRlZmF1bHQgY2F0ZWdvcnkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiB0aGUgbWVzc2FnZSBiZWxvbmdzIHRvPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRSQUNFLU9CSkVDVDpDQVBTIj48L2E+PGgzPkdTVF9UUkFDRV9PQkpFQ1QoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVFJBQ0VfT0JKRUNUKG9iaiwuLi4pwqBHU1RfQ0FUX0xFVkVMX0xPRyAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfVFJBQ0UsICAgb2JqLCAgX19WQV9BUkdTX18pCis8L3ByZT4KKzxwPgorT3V0cHV0IGEgdHJhY2luZyBtZXNzYWdlIGJlbG9uZ2luZyB0byB0aGUgZ2l2ZW4gb2JqZWN0IGluIHRoZSBkZWZhdWx0IGNhdGVnb3J5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iajwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gdGhlIG1lc3NhZ2UgYmVsb25ncyB0bzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1NRU1EVU1QLU9CSkVDVDpDQVBTIj48L2E+PGgzPkdTVF9NRU1EVU1QX09CSkVDVCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9NRU1EVU1QX09CSkVDVChvYmosbXNnLGRhdGEsbGVuZ3RoKTwvcHJlPgorPHA+CitPdXRwdXQgYSBsb2dnaW5nIG1lc3NhZ2UgYmVsb25naW5nIHRvIHRoZSBnaXZlbiBvYmplY3QgaW4gdGhlIGRlZmF1bHQgY2F0ZWdvcnkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiB0aGUgbWVzc2FnZSBiZWxvbmdzIHRvPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tc2c8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bWVzc2FnZSBzdHJpbmcgdG8gbG9nIHdpdGggdGhlIGRhdGE8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9pbnRlciB0byB0aGUgZGF0YSB0byBvdXRwdXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxlbmd0aDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5sZW5ndGggb2YgdGhlIGRhdGEgdG8gb3V0cHV0PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUVSUk9SOkNBUFMiPjwvYT48aDM+R1NUX0VSUk9SKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0VSUk9SKC4uLikJCQlHU1RfQ0FUX0xFVkVMX0xPRyAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfRVJST1IsICAgTlVMTCwgX19WQV9BUkdTX18pCis8L3ByZT4KKzxwPgorT3V0cHV0IGFuIGVycm9yIG1lc3NhZ2UgaW4gdGhlIGRlZmF1bHQgY2F0ZWdvcnkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQ8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVdBUk5JTkc6Q0FQUyI+PC9hPjxoMz5HU1RfV0FSTklORygpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9XQVJOSU5HKC4uLikJCUdTVF9DQVRfTEVWRUxfTE9HIChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9XQVJOSU5HLCBOVUxMLCBfX1ZBX0FSR1NfXykKKzwvcHJlPgorPHA+CitPdXRwdXQgYSB3YXJuaW5nIG1lc3NhZ2UgaW4gdGhlIGRlZmF1bHQgY2F0ZWdvcnkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQ8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUlORk86Q0FQUyI+PC9hPjxoMz5HU1RfSU5GTygpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9JTkZPKC4uLikJCQlHU1RfQ0FUX0xFVkVMX0xPRyAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfSU5GTywgICAgTlVMTCwgX19WQV9BUkdTX18pCis8L3ByZT4KKzxwPgorT3V0cHV0IGFuIGluZm9ybWF0aW9uYWwgbWVzc2FnZSBpbiB0aGUgZGVmYXVsdCBjYXRlZ29yeS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dDwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtREVCVUc6Q0FQUyI+PC9hPjxoMz5HU1RfREVCVUcoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfREVCVUcoLi4uKQkJCUdTVF9DQVRfTEVWRUxfTE9HIChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9ERUJVRywgICBOVUxMLCBfX1ZBX0FSR1NfXykKKzwvcHJlPgorPHA+CitPdXRwdXQgYSBkZWJ1Z2dpbmcgbWVzc2FnZSBpbiB0aGUgZGVmYXVsdCBjYXRlZ29yeS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dDwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtTE9HOkNBUFMiPjwvYT48aDM+R1NUX0xPRygpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9MT0coLi4uKQkJCUdTVF9DQVRfTEVWRUxfTE9HIChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9MT0csICAgICBOVUxMLCBfX1ZBX0FSR1NfXykKKzwvcHJlPgorPHA+CitPdXRwdXQgYSBsb2dnaW5nIG1lc3NhZ2UgaW4gdGhlIGRlZmF1bHQgY2F0ZWdvcnkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQ8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUZJWE1FOkNBUFMiPjwvYT48aDM+R1NUX0ZJWE1FKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0ZJWE1FKC4uLikJCQlHU1RfQ0FUX0xFVkVMX0xPRyAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfRklYTUUsICAgTlVMTCwgX19WQV9BUkdTX18pCis8L3ByZT4KKzxwPgorT3V0cHV0IGEgZml4bWUgbWVzc2FnZSBpbiB0aGUgZGVmYXVsdCBjYXRlZ29yeS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dDwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVFJBQ0U6Q0FQUyI+PC9hPjxoMz5HU1RfVFJBQ0UoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVFJBQ0UoLi4uKQkJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX1RSQUNFLCAgIE5VTEwsIF9fVkFfQVJHU19fKQorPC9wcmU+Cis8cD4KK091dHB1dCBhIHRyYWNpbmcgbWVzc2FnZSBpbiB0aGUgZGVmYXVsdCBjYXRlZ29yeS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dDwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtTUVNRFVNUDpDQVBTIj48L2E+PGgzPkdTVF9NRU1EVU1QKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX01FTURVTVAobXNnLGRhdGEsbGVuZ3RoKTwvcHJlPgorPHA+CitPdXRwdXQgYSBoZXhkdW1wIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1zZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5tZXNzYWdlIHN0cmluZyB0byBsb2cgd2l0aCB0aGUgZGF0YTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIHRoZSBkYXRhIHRvIG91dHB1dDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGVuZ3RoPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmxlbmd0aCBvZiB0aGUgZGF0YSB0byBvdXRwdXQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtREVCVUctUkVHSVNURVItRlVOQ1BUUjpDQVBTIj48L2E+PGgzPkdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIocHRyKTwvcHJlPgorPHA+CitSZWdpc3RlciBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB3aXRoIGl0cyBuYW1lLCBzbyBpdCBjYW4gbGF0ZXIgYmUgdXNlZCBieQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUZVTkNQVFItTkFNRTpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRSgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdTVF9ERUJVR19GVU5DUFRSX05BTUUoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitVc2UgdGhpcyB2YXJpYW50IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1GVU5DUFRSOkNBUFMiIHRpdGxlPSJHU1RfREVCVUdfRlVOQ1BUUigpIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0RFQlVHX0ZVTkNQVFI8L3NwYW4+PC9hPiBpZiB5b3UgZG8gbm90IG5lZWQgdG8gdXNlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wdHI8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnB0cjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIHRoZSBmdW5jdGlvbiB0byByZWdpc3RlcjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI2PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtREVCVUctRlVOQ1BUUjpDQVBTIj48L2E+PGgzPkdTVF9ERUJVR19GVU5DUFRSKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIocHRyKTwvcHJlPgorPHA+CitSZWdpc3RlciBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB3aXRoIGl0cyBuYW1lLCBzbyBpdCBjYW4gbGF0ZXIgYmUgdXNlZCBieQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUZVTkNQVFItTkFNRTpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRSgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdTVF9ERUJVR19GVU5DUFRSX05BTUUoKTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnB0cjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIHRoZSBmdW5jdGlvbiB0byByZWdpc3RlcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB2YWx1ZSBwYXNzZWQgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnB0cjwvY29kZT48L2VtPi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtREVCVUctRlVOQ1BUUi1OQU1FOkNBUFMiPjwvYT48aDM+R1NUX0RFQlVHX0ZVTkNQVFJfTkFNRSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9ERUJVR19GVU5DUFRSX05BTUUocHRyKTwvcHJlPgorPHA+CitSZXRyaWV2ZXMgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLCBpZiBpdCB3YXMgcHJldmlvdXNseSByZWdpc3RlcmVkIHdpdGgKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1GVU5DUFRSOkNBUFMiIHRpdGxlPSJHU1RfREVCVUdfRlVOQ1BUUigpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdTVF9ERUJVR19GVU5DUFRSKCk8L2NvZGU+PC9hPi4gSWYgbm90LCBpdCByZXR1cm5zIGEgZGVzY3JpcHRpb24gb2YgdGhlIHBvaW50ZXIuCis8L3A+Cis8cD4KK1RoaXMgbWFjcm8gcmV0dXJucyBhIGNvbnN0YW50IHN0cmluZyB3aGljaCBtdXN0IG5vdCBiZSBtb2RpZmllZCBvcgorZnJlZWQgYnkgdGhlIGNhbGxlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHRyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uIG9mIHdoaWNoIHRvIGxvb2sgdXAgdGhlIG5hbWU8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULURFQlVHLUJJTi1UTy1ET1QtRklMRTpDQVBTIj48L2E+PGgzPkdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFKGJpbiwgZGV0YWlscywgZmlsZV9uYW1lKSBfZ3N0X2RlYnVnX2Jpbl90b19kb3RfZmlsZSAoYmluLCBkZXRhaWxzLCBmaWxlX25hbWUpCis8L3ByZT4KKzxwPgorVG8gYWlkIGRlYnVnZ2luZyBhcHBsaWNhdGlvbnMgb25lIGNhbiB1c2UgdGhpcyBtZXRob2QgdG8gd3JpdGUgb3V0IHRoZSB3aG9sZQorbmV0d29yayBvZiBnc3RyZWFtZXIgZWxlbWVudHMgdGhhdCBmb3JtIHRoZSBwaXBlbGluZSBpbnRvIGFuIGRvdCBmaWxlLgorVGhpcyBmaWxlIGNhbiBiZSBwcm9jZXNzZWQgd2l0aCBncmFwaHZpeiB0byBnZXQgYW4gaW1hZ2UuCis8L3A+Cis8ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KKyBkb3QgLVRwbmcgLW9pbWFnZS5wbmcgZ3JhcGhfbG93bGV2ZWwuZG90Cis8L3ByZT48L2Rpdj4KKzxwPgorPC9wPgorPHA+CitUaGUgbWFjcm8gaXMgb25seSBhY3RpdmUgaWYgZ3N0cmVhbWVyIGlzIGNvbmZpZ3VyZWQgd2l0aAorIi0tZ3N0LWVuYWJsZS1nc3QtZGVidWciIGFuZCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKK0dTVF9ERUJVR19EVU1QX0RPVF9ESVIgaXMgc2V0IHRvIGEgYmFzZXBhdGggKGUuZy4gL3RtcCkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YmluPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB0b3AtbGV2ZWwgcGlwZWxpbmUgdGhhdCBzaG91bGQgYmUgYW5hbHl6ZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRldGFpbHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZGV0YWlscyB0byBzaG93IGluIHRoZSBncmFwaCwgZS5nLiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctR1JBUEgtU0hPVy1BTEw6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTDwvc3Bhbj48L2E+IG9yCitvbmUgb3IgbW9yZSBvdGhlciA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0dyYXBoRGV0YWlscyIgdGl0bGU9ImVudW0gR3N0RGVidWdHcmFwaERldGFpbHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0dyYXBoRGV0YWlsczwvc3Bhbj48L2E+IGZsYWdzLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmlsZV9uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm91dHB1dCBiYXNlIGZpbGVuYW1lIChlLmcuICJteXBsYXllciIpPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULURFQlVHLUJJTi1UTy1ET1QtRklMRS1XSVRILVRTOkNBUFMiPjwvYT48aDM+R1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKGJpbiwgZGV0YWlscywgZmlsZV9uYW1lKSBfZ3N0X2RlYnVnX2Jpbl90b19kb3RfZmlsZV93aXRoX3RzIChiaW4sIGRldGFpbHMsIGZpbGVfbmFtZSkKKzwvcHJlPgorPHA+CitUaGlzIHdvcmtzIGxpa2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUJJTi1UTy1ET1QtRklMRTpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRSgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEUoKTwvY29kZT48L2E+LCBidXQgYWRkcyB0aGUgY3VycmVudCB0aW1lc3RhbXAKK3RvIHRoZSBmaWxlbmFtZSwgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCB0byB0YWtlIG11bHRpcGxlIHNuYXBzaG90cy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iaW48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHRvcC1sZXZlbCBwaXBlbGluZSB0aGF0IHNob3VsZCBiZSBhbmFseXplZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGV0YWlsczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5kZXRhaWxzIHRvIHNob3cgaW4gdGhlIGdyYXBoLCBlLmcuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1HUkFQSC1TSE9XLUFMTDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMPC9zcGFuPjwvYT4gb3IKK29uZSBvciBtb3JlIG90aGVyIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnR3JhcGhEZXRhaWxzIiB0aXRsZT0iZW51bSBHc3REZWJ1Z0dyYXBoRGV0YWlscyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnR3JhcGhEZXRhaWxzPC9zcGFuPjwvYT4gZmxhZ3MuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWxlX25hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+b3V0cHV0IGJhc2UgZmlsZW5hbWUgKGUuZy4gIm15cGxheWVyIik8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjE1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZGVidWctcHJpbnQtc3RhY2stdHJhY2UiPjwvYT48aDM+Z3N0X2RlYnVnX3ByaW50X3N0YWNrX3RyYWNlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9kZWJ1Z19wcmludF9zdGFja190cmFjZSAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSWYgR1NUX0VOQUJMRV9GVU5DX0lOU1RSVU1FTlRBVElPTiBpcyBkZWZpbmVkIGEgc3RhY2t0cmFjZSBpcyBhdmFpbGFibGUgZm9yCitnc3RyZWFtZXIgY29kZSwgd2hpY2ggY2FuIGJlIHByaW50ZWQgd2l0aCB0aGlzIGZ1bmN0aW9uLgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVElNRS1GT1JNQVQ6Q0FQUyI+PC9hPjxoMz5HU1RfVElNRV9GT1JNQVQ8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RJTUVfRk9STUFUICJ1OiUwMnU6JTAydS4lMDl1IgorPC9wcmU+Cis8cD4KK0Egc3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQgaW4gcHJpbnRmLWxpa2UgZm9ybWF0IHN0cmluZ3MgdG8gZGlzcGxheSBhCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB2YWx1ZSBpbiBoOm06cyBmb3JtYXQuICBVc2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULVRJTUUtQVJHUzpDQVBTIiB0aXRsZT0iR1NUX1RJTUVfQVJHUygpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdTVF9USU1FX0FSR1MoKTwvY29kZT48L2E+IHRvIGNvbnN0cnVjdAordGhlIG1hdGNoaW5nIGFyZ3VtZW50cy4KKzwvcD4KKzxwPgorRXhhbXBsZToKKzwvcD4KKzxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgorcHJpbnRmKCIlIiBHU1RfVElNRV9GT1JNQVQgIlxuIiwgR1NUX1RJTUVfQVJHUyh0cykpOworPC9wcmU+PC9kaXY+Cis8cD4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRJTUUtQVJHUzpDQVBTIj48L2E+PGgzPkdTVF9USU1FX0FSR1MoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfVElNRV9BUkdTKHQpPC9wcmU+Cis8cD4KK0Zvcm1hdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dDwvY29kZT48L2VtPiBmb3IgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1USU1FLUZPUk1BVDpDQVBTIiB0aXRsZT0iR1NUX1RJTUVfRk9STUFUIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RJTUVfRk9STUFUPC9zcGFuPjwvYT4gZm9ybWF0IHN0cmluZy4gTm90ZTogPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnQ8L2NvZGU+PC9lbT4gd2lsbCBiZQorZXZhbHVhdGVkIG1vcmUgdGhhbiBvbmNlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RJbmZvLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItZ3N0Y29uZmlnLmh0bWwiIHRpdGxlPSJnc3Rjb25maWciPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc3RyZWFtZXItZ3N0Y29uZmlnPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwiIHRpdGxlPSJHc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc3RyZWFtZXItR3N0PC9zcGFuPjwvYT4gZm9yIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzCithbmQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgYWZmZWN0IHRoZSBkZWJ1Z2dpbmcgb3V0cHV0LgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjlkNjNiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbApAQCAtMCwwICsxLDk4NyBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdzdEl0ZXJhdG9yPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0SW5kZXhGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RJbmRleEZhY3RvcnkiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdEluZGV4RmFjdG9yeS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RJdGVyYXRvciI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci50b3Bfb2ZfcGFnZSI+PC9hPkdzdEl0ZXJhdG9yPC9zcGFuPjwvaDI+Cis8cD5Hc3RJdGVyYXRvciDigJQgT2JqZWN0IHRvIHJldHJpZXZlIG11bHRpcGxlIGVsZW1lbnRzIGluIGEgdGhyZWFkc2FmZQord2F5LjwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisjaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OworCitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+R3N0SXRlcmF0b3I8L2E+OworZW51bSAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JJdGVtIiB0aXRsZT0iZW51bSBHc3RJdGVyYXRvckl0ZW0iPkdzdEl0ZXJhdG9ySXRlbTwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvclJlc3VsdCIgdGl0bGU9ImVudW0gR3N0SXRlcmF0b3JSZXN1bHQiPkdzdEl0ZXJhdG9yUmVzdWx0PC9hPjsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvckNvcHlGdW5jdGlvbiIgdGl0bGU9IkdzdEl0ZXJhdG9yQ29weUZ1bmN0aW9uICgpIj4qR3N0SXRlcmF0b3JDb3B5RnVuY3Rpb248L2E+KSAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKml0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKmNvcHk8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yUmVzdWx0IiB0aXRsZT0iZW51bSBHc3RJdGVyYXRvclJlc3VsdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvclJlc3VsdDwvc3Bhbj48L2E+ICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvck5leHRGdW5jdGlvbiIgdGl0bGU9IkdzdEl0ZXJhdG9yTmV4dEZ1bmN0aW9uICgpIj4qR3N0SXRlcmF0b3JOZXh0RnVuY3Rpb248L2E+KSAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKml0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqcmVzdWx0PC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvckl0ZW0iIHRpdGxlPSJlbnVtIEdzdEl0ZXJhdG9ySXRlbSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvckl0ZW08L3NwYW4+PC9hPiAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvckl0ZW1GdW5jdGlvbiIgdGl0bGU9IkdzdEl0ZXJhdG9ySXRlbUZ1bmN0aW9uICgpIj4qR3N0SXRlcmF0b3JJdGVtRnVuY3Rpb248L2E+KSAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKml0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqaXRlbTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JSZXN5bmNGdW5jdGlvbiIgdGl0bGU9IkdzdEl0ZXJhdG9yUmVzeW5jRnVuY3Rpb24gKCkiPipHc3RJdGVyYXRvclJlc3luY0Z1bmN0aW9uPC9hPikgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqaXQ8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yRnJlZUZ1bmN0aW9uIiB0aXRsZT0iR3N0SXRlcmF0b3JGcmVlRnVuY3Rpb24gKCkiPipHc3RJdGVyYXRvckZyZWVGdW5jdGlvbjwvYT4pICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqaXQ8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yRm9yZWFjaEZ1bmN0aW9uIiB0aXRsZT0iR3N0SXRlcmF0b3JGb3JlYWNoRnVuY3Rpb24gKCkiPipHc3RJdGVyYXRvckZvcmVhY2hGdW5jdGlvbjwvYT4pICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICppdGVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvckZvbGRGdW5jdGlvbiIgdGl0bGU9IkdzdEl0ZXJhdG9yRm9sZEZ1bmN0aW9uICgpIj4qR3N0SXRlcmF0b3JGb2xkRnVuY3Rpb248L2E+KSAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqaXRlbTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnJldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHU1QtSVRFUkFUT1I6Q0FQUyIgdGl0bGU9IkdTVF9JVEVSQVRPUigpIj5HU1RfSVRFUkFUT1I8L2E+ICAgICAgICAgICAgICAgICAgICAgICAgKGl0KQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR1NULUlURVJBVE9SLUxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9JVEVSQVRPUl9MT0NLKCkiPkdTVF9JVEVSQVRPUl9MT0NLPC9hPiAgICAgICAgICAgICAgICAgICAoaXQpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHU1QtSVRFUkFUT1ItQ09PS0lFOkNBUFMiIHRpdGxlPSJHU1RfSVRFUkFUT1JfQ09PS0lFKCkiPkdTVF9JVEVSQVRPUl9DT09LSUU8L2E+ICAgICAgICAgICAgICAgICAoaXQpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHU1QtSVRFUkFUT1ItT1JJRy1DT09LSUU6Q0FQUyIgdGl0bGU9IkdTVF9JVEVSQVRPUl9PUklHX0NPT0tJRSgpIj5HU1RfSVRFUkFUT1JfT1JJR19DT09LSUU8L2E+ICAgICAgICAgICAgKGl0KQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLW5ldyIgdGl0bGU9ImdzdF9pdGVyYXRvcl9uZXcgKCkiPmdzdF9pdGVyYXRvcl9uZXc8L2E+ICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVRocmVhZHMuaHRtbCNHTXV0ZXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTXV0ZXg8L3NwYW4+PC9hPiAqbG9jazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiAqbWFzdGVyX2Nvb2tpZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JDb3B5RnVuY3Rpb24iIHRpdGxlPSJHc3RJdGVyYXRvckNvcHlGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yQ29weUZ1bmN0aW9uPC9zcGFuPjwvYT4gY29weTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JOZXh0RnVuY3Rpb24iIHRpdGxlPSJHc3RJdGVyYXRvck5leHRGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yTmV4dEZ1bmN0aW9uPC9zcGFuPjwvYT4gbmV4dDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JJdGVtRnVuY3Rpb24iIHRpdGxlPSJHc3RJdGVyYXRvckl0ZW1GdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9ySXRlbUZ1bmN0aW9uPC9zcGFuPjwvYT4gaXRlbTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JSZXN5bmNGdW5jdGlvbiIgdGl0bGU9IkdzdEl0ZXJhdG9yUmVzeW5jRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvclJlc3luY0Z1bmN0aW9uPC9zcGFuPjwvYT4gcmVzeW5jPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvckZyZWVGdW5jdGlvbiIgdGl0bGU9IkdzdEl0ZXJhdG9yRnJlZUZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3JGcmVlRnVuY3Rpb248L3NwYW4+PC9hPiBmcmVlPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICogICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1uZXctbGlzdCIgdGl0bGU9ImdzdF9pdGVyYXRvcl9uZXdfbGlzdCAoKSI+Z3N0X2l0ZXJhdG9yX25ld19saXN0PC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1UaHJlYWRzLmh0bWwjR011dGV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R011dGV4PC9zcGFuPjwvYT4gKmxvY2s8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gKm1hc3Rlcl9jb29raWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+ICoqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqb3duZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9ySXRlbUZ1bmN0aW9uIiB0aXRsZT0iR3N0SXRlcmF0b3JJdGVtRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvckl0ZW1GdW5jdGlvbjwvc3Bhbj48L2E+IGl0ZW08L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLW5ldy1zaW5nbGUiIHRpdGxlPSJnc3RfaXRlcmF0b3JfbmV3X3NpbmdsZSAoKSI+Z3N0X2l0ZXJhdG9yX25ld19zaW5nbGU8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLWNvcHkiIHRpdGxlPSJnc3RfaXRlcmF0b3JfY29weSAoKSI+Z3N0X2l0ZXJhdG9yX2NvcHk8L2E+ICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqaXQ8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLWZyZWUiIHRpdGxlPSJnc3RfaXRlcmF0b3JfZnJlZSAoKSI+Z3N0X2l0ZXJhdG9yX2ZyZWU8L2E+ICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqaXQ8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yUmVzdWx0IiB0aXRsZT0iZW51bSBHc3RJdGVyYXRvclJlc3VsdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvclJlc3VsdDwvc3Bhbj48L2E+ICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1uZXh0IiB0aXRsZT0iZ3N0X2l0ZXJhdG9yX25leHQgKCkiPmdzdF9pdGVyYXRvcl9uZXh0PC9hPiAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKml0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqZWxlbTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItcmVzeW5jIiB0aXRsZT0iZ3N0X2l0ZXJhdG9yX3Jlc3luYyAoKSI+Z3N0X2l0ZXJhdG9yX3Jlc3luYzwvYT4gICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqaXQ8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLXB1c2giIHRpdGxlPSJnc3RfaXRlcmF0b3JfcHVzaCAoKSI+Z3N0X2l0ZXJhdG9yX3B1c2g8L2E+ICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqaXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqb3RoZXI8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLWZpbHRlciIgdGl0bGU9ImdzdF9pdGVyYXRvcl9maWx0ZXIgKCkiPmdzdF9pdGVyYXRvcl9maWx0ZXI8L2E+ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKml0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dDb21wYXJlRnVuYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdDb21wYXJlRnVuYzwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yUmVzdWx0IiB0aXRsZT0iZW51bSBHc3RJdGVyYXRvclJlc3VsdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvclJlc3VsdDwvc3Bhbj48L2E+ICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1mb2xkIiB0aXRsZT0iZ3N0X2l0ZXJhdG9yX2ZvbGQgKCkiPmdzdF9pdGVyYXRvcl9mb2xkPC9hPiAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKml0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvckZvbGRGdW5jdGlvbiIgdGl0bGU9IkdzdEl0ZXJhdG9yRm9sZEZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3JGb2xkRnVuY3Rpb248L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqcmV0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvclJlc3VsdCIgdGl0bGU9ImVudW0gR3N0SXRlcmF0b3JSZXN1bHQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SXRlcmF0b3JSZXN1bHQ8L3NwYW4+PC9hPiAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItZm9yZWFjaCIgdGl0bGU9ImdzdF9pdGVyYXRvcl9mb3JlYWNoICgpIj5nc3RfaXRlcmF0b3JfZm9yZWFjaDwvYT4gICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICppdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JGb3JlYWNoRnVuY3Rpb24iIHRpdGxlPSJHc3RJdGVyYXRvckZvcmVhY2hGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yRm9yZWFjaEZ1bmN0aW9uPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItZmluZC1jdXN0b20iIHRpdGxlPSJnc3RfaXRlcmF0b3JfZmluZF9jdXN0b20gKCkiPmdzdF9pdGVyYXRvcl9maW5kX2N1c3RvbTwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKml0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dDb21wYXJlRnVuYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdDb21wYXJlRnVuYzwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICplbGVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitBIEdzdEl0ZXJhdG9yIGlzIHVzZWQgdG8gcmV0cmlldmUgbXVsdGlwbGUgb2JqZWN0cyBmcm9tIGFub3RoZXIgb2JqZWN0IGluCithIHRocmVhZHNhZmUgd2F5LgorPC9wPgorPHA+CitWYXJpb3VzIEdTdHJlYW1lciBvYmplY3RzIHByb3ZpZGUgYWNjZXNzIHRvIHRoZWlyIGludGVybmFsIHN0cnVjdHVyZXMgdXNpbmcKK2FuIGl0ZXJhdG9yLgorPC9wPgorPHA+CitJbiBnZW5lcmFsLCB3aGVuZXZlciBjYWxsaW5nIGEgR3N0SXRlcmF0b3IgZnVuY3Rpb24gcmVzdWx0cyBpbiB5b3VyIGNvZGUKK3JlY2VpdmluZyBhIHJlZmNvdW50ZWQgb2JqZWN0LCB0aGUgcmVmY291bnQgZm9yIHRoYXQgb2JqZWN0IHdpbGwgaGF2ZSBiZWVuCitpbmNyZWFzZWQuICBZb3VyIGNvZGUgaXMgcmVzcG9uc2libGUgZm9yIHVucmVmaW5nIHRoYXQgb2JqZWN0IGFmdGVyIHVzZS4KKzwvcD4KKzxwPgorVGhlIGJhc2ljIHVzZSBwYXR0ZXJuIG9mIGFuIGl0ZXJhdG9yIGlzIGFzIGZvbGxvd3M6Cis8L3A+Cis8cD4KKzwvcD4KKzxkaXYgY2xhc3M9ImV4YW1wbGUiPgorPGEgbmFtZT0iaWQ1NTI1MTQiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkV4YW1wbGXCoDEwLsKgVXNpbmcgYW4gaXRlcmF0b3I8L2I+PC9wPgorPGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgorICAgaXQgPSBfZ2V0X2l0ZXJhdG9yKG9iamVjdCk7CisgICBkb25lID0gRkFMU0U7CisgICB3aGlsZSAoIWRvbmUpIHsKKyAgICAgc3dpdGNoIChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZhbXA7aXRlbSkpIHsKKyAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9PSzoKKyAgICAgICAgIC4uLiB1c2UvY2hhbmdlIGl0ZW0gaGVyZS4uLgorICAgICAgICAgZ192YWx1ZV9yZXNldCAoJmFtcDtpdGVtKTsKKyAgICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX1JFU1lOQzoKKyAgICAgICAgIC4uLnJvbGxiYWNrIGNoYW5nZXMgdG8gaXRlbXMuLi4KKyAgICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0KTsKKyAgICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0VSUk9SOgorICAgICAgICAgLi4ud3JvbmcgcGFyYW1ldGVycyB3ZXJlIGdpdmVuLi4uCisgICAgICAgICBkb25lID0gVFJVRTsKKyAgICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0RPTkU6CisgICAgICAgICBkb25lID0gVFJVRTsKKyAgICAgICAgIGJyZWFrOworICAgICB9CisgICB9CisgICBnX3ZhbHVlX3Vuc2V0ICgmYW1wO2l0ZW0pOworICAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKKyAgPC9wcmU+PC9kaXY+Cis8L2Rpdj4KKzxwPjxiciBjbGFzcz0iZXhhbXBsZS1icmVhayI+Cis8L3A+Cis8cD4KK0xhc3QgcmV2aWV3ZWQgb24gMjAwOS0wNi0xNiAoMC4xMC4yNCkKKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RJdGVyYXRvciI+PC9hPjxoMz5zdHJ1Y3QgR3N0SXRlcmF0b3I8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RJdGVyYXRvciB7Cit9OworPC9wcmU+Cis8cD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gYmFzZSBzdHJ1Y3R1cmUuIFRoZSB2YWx1ZXMgb2YgdGhpcyBzdHJ1Y3R1cmUgYXJlIAorcHJvdGVjdGVkIGZvciBzdWJjbGFzc2VzLCB1c2UgdGhlIG1ldGhvZHMgdG8gdXNlIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0SXRlcmF0b3JJdGVtIj48L2E+PGgzPmVudW0gR3N0SXRlcmF0b3JJdGVtPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGVudW0geworICBHU1RfSVRFUkFUT1JfSVRFTV9TS0lQwqA9IDAsCisgIEdTVF9JVEVSQVRPUl9JVEVNX1BBU1PCoD0gMSwKKyAgR1NUX0lURVJBVE9SX0lURU1fRU5ECQk9IDIKK30gR3N0SXRlcmF0b3JJdGVtOworPC9wcmU+Cis8cD4KK1RoZSByZXN1bHQgb2YgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JJdGVtRnVuY3Rpb24iIHRpdGxlPSJHc3RJdGVyYXRvckl0ZW1GdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9ySXRlbUZ1bmN0aW9uPC9zcGFuPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1JVEVSQVRPUi1JVEVNLVNLSVA6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0lURVJBVE9SX0lURU1fU0tJUDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+U2tpcCB0aGlzIGl0ZW0KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1JVEVSQVRPUi1JVEVNLVBBU1M6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0lURVJBVE9SX0lURU1fUEFTUzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UmV0dXJuIGl0ZW0KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1JVEVSQVRPUi1JVEVNLUVORDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfSVRFUkFUT1JfSVRFTV9FTkQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPlN0b3AgYWZ0ZXIgdGhpcyBpdGVtLgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0SXRlcmF0b3JSZXN1bHQiPjwvYT48aDM+ZW51bSBHc3RJdGVyYXRvclJlc3VsdDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBlbnVtIHsKKyAgR1NUX0lURVJBVE9SX0RPTkXCoD0gMCwKKyAgR1NUX0lURVJBVE9SX09LwqA9IDEsCisgIEdTVF9JVEVSQVRPUl9SRVNZTkPCoD0gMiwKKyAgR1NUX0lURVJBVE9SX0VSUk9SwqA9IDMKK30gR3N0SXRlcmF0b3JSZXN1bHQ7Cis8L3ByZT4KKzxwPgorVGhlIHJlc3VsdCBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLW5leHQiIHRpdGxlPSJnc3RfaXRlcmF0b3JfbmV4dCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaXRlcmF0b3JfbmV4dCgpPC9jb2RlPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1JVEVSQVRPUi1ET05FOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9JVEVSQVRPUl9ET05FPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5ObyBtb3JlIGl0ZW1zIGluIHRoZSBpdGVyYXRvcgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUlURVJBVE9SLU9LOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9JVEVSQVRPUl9PSzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QW4gaXRlbSB3YXMgcmV0cmlldmVkCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtSVRFUkFUT1ItUkVTWU5DOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9JVEVSQVRPUl9SRVNZTkM8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPkRhdGFzdHJ1Y3R1cmUgY2hhbmdlZCB3aGlsZSBpdGVyYXRpbmcKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1JVEVSQVRPUi1FUlJPUjpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfSVRFUkFUT1JfRVJST1I8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPkFuIGVycm9yIGhhcHBlbmVkCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RJdGVyYXRvckNvcHlGdW5jdGlvbiI+PC9hPjxoMz5Hc3RJdGVyYXRvckNvcHlGdW5jdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICAoKkdzdEl0ZXJhdG9yQ29weUZ1bmN0aW9uKSAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKml0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKmNvcHk8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW4gY3JlYXRpbmcgYSBjb3B5IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdDwvY29kZT48L2VtPiBhbmQgc2hvdWxkCitjcmVhdGUgYSBjb3B5IG9mIGFsbCBjdXN0b20gaXRlcmF0b3IgZmllbGRzIG9yIGluY3JlYXNlIHRoZWlyCityZWZlcmVuY2UgY291bnRzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPml0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBvcmlnaW5hbCBpdGVyYXRvcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29weTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgY29waWVkIGl0ZXJhdG9yPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0SXRlcmF0b3JOZXh0RnVuY3Rpb24iPjwvYT48aDM+R3N0SXRlcmF0b3JOZXh0RnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvclJlc3VsdCIgdGl0bGU9ImVudW0gR3N0SXRlcmF0b3JSZXN1bHQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SXRlcmF0b3JSZXN1bHQ8L3NwYW4+PC9hPiAgICgqR3N0SXRlcmF0b3JOZXh0RnVuY3Rpb24pICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqaXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpyZXN1bHQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitUaGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBuZXh0IGVsZW1lbnQgb2YgdGhlIGl0ZXJhdG9yCitzaG91bGQgYmUgcmV0cmlldmVkLiAKKzwvcD4KKzxwPgorSW1wbGVtZW50b3JzIG9mIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiBzaG91bGQgaW1wbGVtZW50IHRoaXMKK2Z1bmN0aW9uIGFuZCBwYXNzIGl0IHRvIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgY3VzdG9tIGl0ZXJhdG9yLgorVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGl0ZXJhdG9yIGxvY2sgaGVsZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgaXRlcmF0b3I8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlc3VsdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gaG9sZCB0aGUgbmV4dCBpdGVtPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEl0ZXJhdG9ySXRlbUZ1bmN0aW9uIj48L2E+PGgzPkdzdEl0ZXJhdG9ySXRlbUZ1bmN0aW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JJdGVtIiB0aXRsZT0iZW51bSBHc3RJdGVyYXRvckl0ZW0iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SXRlcmF0b3JJdGVtPC9zcGFuPjwvYT4gICAgICgqR3N0SXRlcmF0b3JJdGVtRnVuY3Rpb24pICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqaXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICppdGVtPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIG5leHQgaXRlbSBvZiB0aGUgaXRlcmF0b3IKK2hhcyBiZWVuIHJldHJpZXZlZC4gVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBza2lwIGl0ZW1zIG9yIHN0b3AKK3RoZSBpdGVyYXRvci4KKzwvcD4KKzxwPgorVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGl0ZXJhdG9yIGxvY2sgaGVsZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgaXRlcmF0b3I8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPml0ZW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGl0ZW0gYmVpbmcgcmV0cmlldmVkLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RJdGVyYXRvclJlc3luY0Z1bmN0aW9uIj48L2E+PGgzPkdzdEl0ZXJhdG9yUmVzeW5jRnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgKCpHc3RJdGVyYXRvclJlc3luY0Z1bmN0aW9uKSAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICppdDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1RoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgYSBjb25jdXJyZW50IHVwZGF0ZSBoYXBwZW5lZAordG8gdGhlIGl0ZXJhdGVkIGRhdGFzdHJ1Y3R1cmUuIFRoZSBpbXBsZW1lbnRvciBvZiB0aGUgaXRlcmF0b3Igc2hvdWxkCityZXN0YXJ0IHRoZSBpdGVyYXRvciBmcm9tIHRoZSBiZWdpbm5pbmcgYW5kIGNsZWFuIHVwIGFueSBzdGF0ZSBpdCBtaWdodAoraGF2ZS4KKzwvcD4KKzxwPgorSW1wbGVtZW50b3JzIG9mIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiBzaG91bGQgaW1wbGVtZW50IHRoaXMKK2Z1bmN0aW9uIGFuZCBwYXNzIGl0IHRvIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgY3VzdG9tIGl0ZXJhdG9yLgorVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGl0ZXJhdG9yIGxvY2sgaGVsZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGl0ZXJhdG9yPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEl0ZXJhdG9yRnJlZUZ1bmN0aW9uIj48L2E+PGgzPkdzdEl0ZXJhdG9yRnJlZUZ1bmN0aW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgICgqR3N0SXRlcmF0b3JGcmVlRnVuY3Rpb24pICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqaXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIGl0ZXJhdG9yIGlzIGZyZWVkLgorPC9wPgorPHA+CitJbXBsZW1lbnRvcnMgb2YgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+IHNob3VsZCBpbXBsZW1lbnQgdGhpcworZnVuY3Rpb24gYW5kIHBhc3MgaXQgdG8gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBjdXN0b20gaXRlcmF0b3IuCitUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgaXRlcmF0b3IgbG9jayBoZWxkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgaXRlcmF0b3I8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0SXRlcmF0b3JGb3JlYWNoRnVuY3Rpb24iPjwvYT48aDM+R3N0SXRlcmF0b3JGb3JlYWNoRnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgKCpHc3RJdGVyYXRvckZvcmVhY2hGdW5jdGlvbikgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKml0ZW08L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItZm9yZWFjaCIgdGl0bGU9ImdzdF9pdGVyYXRvcl9mb3JlYWNoICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9pdGVyYXRvcl9mb3JlYWNoKCk8L2NvZGU+PC9hPiBmb3IgZXZlcnkgZWxlbWVudC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdGVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBpdGVtPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VXNlciBkYXRhPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0SXRlcmF0b3JGb2xkRnVuY3Rpb24iPjwvYT48aDM+R3N0SXRlcmF0b3JGb2xkRnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgKCpHc3RJdGVyYXRvckZvbGRGdW5jdGlvbikgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKml0ZW08L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpyZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBIGZ1bmN0aW9uIHRvIGJlIHBhc3NlZCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLWZvbGQiIHRpdGxlPSJnc3RfaXRlcmF0b3JfZm9sZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaXRlcmF0b3JfZm9sZCgpPC9jb2RlPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aXRlbTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgaXRlbSB0byBmb2xkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gY29sbGVjdGluZyB0aGUgcmVzdWx0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZGF0YSBwYXNzZWQgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1mb2xkIiB0aXRsZT0iZ3N0X2l0ZXJhdG9yX2ZvbGQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2l0ZXJhdG9yX2ZvbGQoKTwvY29kZT48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBmb2xkIHNob3VsZCBjb250aW51ZSwgRkFMU0UgaWYgaXQgc2hvdWxkIHN0b3AuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUlURVJBVE9SOkNBUFMiPjwvYT48aDM+R1NUX0lURVJBVE9SKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0lURVJBVE9SKGl0KQkJKChHc3RJdGVyYXRvciopKGl0KSkKKzwvcHJlPgorPHA+CitNYWNybyB0byBjYXN0IHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiB2YWx1ZTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtSVRFUkFUT1ItTE9DSzpDQVBTIj48L2E+PGgzPkdTVF9JVEVSQVRPUl9MT0NLKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0lURVJBVE9SX0xPQ0soaXQpCQkoR1NUX0lURVJBVE9SKGl0KS0mZ3Q7bG9jaykKKzwvcHJlPgorPHA+CitNYWNybyB0byBnZXQgdGhlIGxvY2sgcHJvdGVjdGluZyB0aGUgZGF0YXN0cnVjdHVyZSBiZWluZyBpdGVyYXRlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSBsb2NrIG9mPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1JVEVSQVRPUi1DT09LSUU6Q0FQUyI+PC9hPjxoMz5HU1RfSVRFUkFUT1JfQ09PS0lFKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0lURVJBVE9SX0NPT0tJRShpdCkJCShHU1RfSVRFUkFUT1IoaXQpLSZndDtjb29raWUpCis8L3ByZT4KKzxwPgorTWFjcm8gdG8gZ2V0IHRoZSBjb29raWUgb2YgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+LiBUaGUgY29va2llIG9mIHRoZQoraXRlcmF0b3IgaXMgdGhlIHZhbHVlIG9mIHRoZSBtYXN0ZXIgY29va2llIHdoZW4gdGhlIGl0ZXJhdG9yCit3YXMgY3JlYXRlZC4KK1doZW5ldmVyIHRoZSBpdGVyYXRvciBpcyBpdGVyYXRlZCwgdGhlIHZhbHVlIGlzIGNvbXBhcmVkIHRvIHRoZQordmFsdWUgb2YgdGhlIG1hc3RlciBjb29raWUuIElmIHRoZXkgYXJlIGRpZmZlcmVudCwgYSBjb25jdXJyZW50Cittb2RpZmljYXRpb24gaGFwcGVuZWQgdG8gdGhlIGl0ZXJhdG9yIGFuZCBhIHJlc3luYyBpcyBuZWVkZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPml0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+IHRvIGdldCB0aGUgY29va2llIG9mPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1JVEVSQVRPUi1PUklHLUNPT0tJRTpDQVBTIj48L2E+PGgzPkdTVF9JVEVSQVRPUl9PUklHX0NPT0tJRSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9JVEVSQVRPUl9PUklHX0NPT0tJRShpdCnCoChHU1RfSVRFUkFUT1IoaXQpLSZndDttYXN0ZXJfY29va2llKQorPC9wcmU+Cis8cD4KK01hY3JvIHRvIGdldCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIG1hc3RlciBjb29raWUgaXMgc3RvcmVkLiBUaGUKK21hc3RlciBjb29raWUgcHJvdGVjdHMgdGhlIHN0cnVjdHVyZSBiZWluZyBpdGVyYXRlZCBhbmQgZ2V0cyB1cGRhdGVkCit3aGVuZXZlciB0aGUgZGF0YXN0cnVjdHVyZSBjaGFuZ2VzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiB0byBnZXQgdGhlIG1hc3RlciBjb29raWUgb2Y8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWl0ZXJhdG9yLW5ldyI+PC9hPjxoMz5nc3RfaXRlcmF0b3JfbmV3ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqICAgICAgIGdzdF9pdGVyYXRvcl9uZXcgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItVGhyZWFkcy5odG1sI0dNdXRleCI+PHNwYW4gY2xhc3M9InR5cGUiPkdNdXRleDwvc3Bhbj48L2E+ICpsb2NrPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICptYXN0ZXJfY29va2llPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvckNvcHlGdW5jdGlvbiIgdGl0bGU9IkdzdEl0ZXJhdG9yQ29weUZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3JDb3B5RnVuY3Rpb248L3NwYW4+PC9hPiBjb3B5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvck5leHRGdW5jdGlvbiIgdGl0bGU9IkdzdEl0ZXJhdG9yTmV4dEZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3JOZXh0RnVuY3Rpb248L3NwYW4+PC9hPiBuZXh0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvckl0ZW1GdW5jdGlvbiIgdGl0bGU9IkdzdEl0ZXJhdG9ySXRlbUZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3JJdGVtRnVuY3Rpb248L3NwYW4+PC9hPiBpdGVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvclJlc3luY0Z1bmN0aW9uIiB0aXRsZT0iR3N0SXRlcmF0b3JSZXN5bmNGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yUmVzeW5jRnVuY3Rpb248L3NwYW4+PC9hPiByZXN5bmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yRnJlZUZ1bmN0aW9uIiB0aXRsZT0iR3N0SXRlcmF0b3JGcmVlRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvckZyZWVGdW5jdGlvbjwvc3Bhbj48L2E+IGZyZWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGUgYSBuZXcgaXRlcmF0b3IuIFRoaXMgZnVuY3Rpb24gaXMgbWFpbmx5IHVzZWQgZm9yIG9iamVjdHMKK2ltcGxlbWVudGluZyB0aGUgbmV4dC9yZXN5bmMvZnJlZSBmdW5jdGlvbiB0byBpdGVyYXRlIGEgZGF0YSBzdHJ1Y3R1cmUuCis8L3A+Cis8cD4KK0ZvciBlYWNoIGl0ZW0gcmV0cmlldmVkLCB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPml0ZW08L2NvZGU+PC9lbT4gZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIGxvY2sKK2hlbGQuIFRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnJlZTwvY29kZT48L2VtPiBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgaXRlcmF0b3IgaXMgZnJlZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2l6ZSBvZiB0aGUgaXRlcmF0b3Igc3RydWN0dXJlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IG9mIGNoaWxkcmVuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sb2NrPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnBvaW50ZXIgdG8gYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVRocmVhZHMuaHRtbCNHTXV0ZXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTXV0ZXg8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1hc3Rlcl9jb29raWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9pbnRlciB0byBhIGd1aW50MzIgdGhhdCBpcyBjaGFuZ2VkIHdoZW4gdGhlIGl0ZW1zIGluIHRoZQoraXRlcmF0b3IgY2hhbmdlZC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvcHk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Y29weSBmdW5jdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmV4dDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5mdW5jdGlvbiB0byBnZXQgbmV4dCBpdGVtPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdGVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmZ1bmN0aW9uIHRvIGNhbGwgb24gZWFjaCBpdGVtIHJldHJpZXZlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVzeW5jPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmZ1bmN0aW9uIHRvIHJlc3luYyB0aGUgaXRlcmF0b3I8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZyZWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZnVuY3Rpb24gdG8gZnJlZSB0aGUgaXRlcmF0b3I8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4uCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1pdGVyYXRvci1uZXctbGlzdCI+PC9hPjxoMz5nc3RfaXRlcmF0b3JfbmV3X2xpc3QgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICogICAgICAgZ3N0X2l0ZXJhdG9yX25ld19saXN0ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVRocmVhZHMuaHRtbCNHTXV0ZXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTXV0ZXg8L3NwYW4+PC9hPiAqbG9jazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiAqbWFzdGVyX2Nvb2tpZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gKipsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+ICpvd25lcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JJdGVtRnVuY3Rpb24iIHRpdGxlPSJHc3RJdGVyYXRvckl0ZW1GdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9ySXRlbUZ1bmN0aW9uPC9zcGFuPjwvYT4gaXRlbTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZSBhIG5ldyBpdGVyYXRvciBkZXNpZ25lZCBmb3IgaXRlcmF0aW5nIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+LgorPC9wPgorPHA+CitUaGUgbGlzdCB5b3UgaXRlcmF0ZSBpcyB1c3VhbGx5IHBhcnQgb2YgYSBkYXRhIHN0cnVjdHVyZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b3duZXI8L2NvZGU+PC9lbT4gYW5kIGlzCitwcm90ZWN0ZWQgd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bG9jazwvY29kZT48L2VtPi4gCis8L3A+Cis8cD4KK1RoZSBpdGVyYXRvciB3aWxsIHVzZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bG9jazwvY29kZT48L2VtPiB0byByZXRyaWV2ZSB0aGUgbmV4dCBpdGVtIG9mIHRoZSBsaXN0IGFuZCBpdAord2lsbCB0aGVuIGNhbGwgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdGVtPC9jb2RlPjwvZW0+IGZ1bmN0aW9uIGJlZm9yZSByZWxlYXNpbmcgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxvY2s8L2NvZGU+PC9lbT4gYWdhaW4uCis8L3A+Cis8cD4KK1doZW4gYSBjb25jdXJyZW50IHVwZGF0ZSB0byB0aGUgbGlzdCBpcyBwZXJmb3JtZWQsIHVzdWFsbHkgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm93bmVyPC9jb2RlPjwvZW0+IHdoaWxlCitob2xkaW5nIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sb2NrPC9jb2RlPjwvZW0+LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWFzdGVyX2Nvb2tpZTwvY29kZT48L2VtPiB3aWxsIGJlIHVwZGF0ZWQuIFRoZSBpdGVyYXRvciBpbXBsZW1lbnRhdGlvbgord2lsbCBub3RpY2UgdGhlIHVwZGF0ZSBvZiB0aGUgY29va2llIGFuZCB3aWxsIHJldHVybiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR1NULUlURVJBVE9SLVJFU1lOQzpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0lURVJBVE9SX1JFU1lOQzwvY29kZT48L2E+IHRvCit0aGUgdXNlciBvZiB0aGUgaXRlcmF0b3IgaW4gdGhlIG5leHQgY2FsbCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLW5leHQiIHRpdGxlPSJnc3RfaXRlcmF0b3JfbmV4dCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaXRlcmF0b3JfbmV4dCgpPC9jb2RlPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiBvZiBlbGVtZW50czwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bG9jazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1UaHJlYWRzLmh0bWwjR011dGV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R011dGV4PC9zcGFuPjwvYT4gcHJvdGVjdGluZyB0aGUgbGlzdC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1hc3Rlcl9jb29raWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9pbnRlciB0byBhIGd1aW50MzIgdGhhdCBpcyBpbmNyZW1lbnRlZCB3aGVuIHRoZSBsaXN0CitpcyBjaGFuZ2VkLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIHRoZSBsaXN0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vd25lcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5vYmplY3Qgb3duaW5nIHRoZSBsaXN0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdGVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmZ1bmN0aW9uIHRvIGNhbGwgb24gZWFjaCBpdGVtIHJldHJpZXZlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT4uCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1pdGVyYXRvci1uZXctc2luZ2xlIj48L2E+PGgzPmdzdF9pdGVyYXRvcl9uZXdfc2luZ2xlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqICAgICAgIGdzdF9pdGVyYXRvcl9uZXdfc2luZ2xlICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitUaGlzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gaXMgYSBjb252ZW5pZW50IGl0ZXJhdG9yIGZvciB0aGUgY29tbW9uCitjYXNlIHdoZXJlIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiBuZWVkcyB0byBiZSByZXR1cm5lZCBidXQgb25seQorYSBzaW5nbGUgb2JqZWN0IGhhcyB0byBiZSBjb25zaWRlcmVkLiBUaGlzIGhhcHBlbnMgb2Z0ZW4KK2ZvciB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEl0ZXJJbnRMaW5rRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkSXRlckludExpbmtGdW5jdGlvbjwvc3Bhbj48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gb2YgdGhlIHBhc3NlZCBvYmplY3Q8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5vYmplY3QgdGhhdCB0aGlzIGl0ZXJhdG9yIHNob3VsZCByZXR1cm48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWl0ZXJhdG9yLWNvcHkiPjwvYT48aDM+Z3N0X2l0ZXJhdG9yX2NvcHkgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICogICAgICAgZ3N0X2l0ZXJhdG9yX2NvcHkgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICppdDwvY29kZT48L2VtPik7PC9wcmU+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1pdGVyYXRvci1mcmVlIj48L2E+PGgzPmdzdF9pdGVyYXRvcl9mcmVlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9pdGVyYXRvcl9mcmVlICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqaXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitGcmVlIHRoZSBpdGVyYXRvci4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gdG8gZnJlZTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtaXRlcmF0b3ItbmV4dCI+PC9hPjxoMz5nc3RfaXRlcmF0b3JfbmV4dCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yUmVzdWx0IiB0aXRsZT0iZW51bSBHc3RJdGVyYXRvclJlc3VsdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvclJlc3VsdDwvc3Bhbj48L2E+ICAgZ3N0X2l0ZXJhdG9yX25leHQgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICppdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKmVsZW08L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgdGhlIG5leHQgaXRlbSBmcm9tIHRoZSBpdGVyYXRvciBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbTwvY29kZT48L2VtPi4gCis8L3A+Cis8cD4KK09ubHkgd2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dTVC1JVEVSQVRPUi1PSzpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0lURVJBVE9SX09LPC9jb2RlPjwvYT4sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtPC9jb2RlPjwvZW0+IHdpbGwgY29udGFpbiBhIHZhbGlkCit2YWx1ZS4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW08L2NvZGU+PC9lbT4gbXVzdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgdG8gdGhlIHR5cGUgb2YgdGhlIGl0ZXJhdG9yIG9yCitpbml0aWFsaXplZCB0byB6ZXJvZXMgd2l0aCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjZy12YWx1ZS11bnNldCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX3ZhbHVlX3Vuc2V0KCk8L2NvZGU+PC9hPi4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IKK3Vuc2V0dGluZyBvciByZXNldHRpbmcgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW08L2NvZGU+PC9lbT4gd2l0aCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjZy12YWx1ZS11bnNldCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX3ZhbHVlX3Vuc2V0KCk8L2NvZGU+PC9hPiBvciA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjZy12YWx1ZS1yZXNldCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX3ZhbHVlX3Jlc2V0KCk8L2NvZGU+PC9hPgorYWZ0ZXIgdXNhZ2UuCis8L3A+Cis8cD4KK1doZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHU1QtSVRFUkFUT1ItRE9ORTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0lURVJBVE9SX0RPTkU8L2NvZGU+PC9hPiwgbm8gbW9yZSBlbGVtZW50cyBjYW4gYmUKK3JldHJpZXZlZCBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdDwvY29kZT48L2VtPi4KKzwvcD4KKzxwPgorQSByZXR1cm4gdmFsdWUgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dTVC1JVEVSQVRPUi1SRVNZTkM6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9JVEVSQVRPUl9SRVNZTkM8L2NvZGU+PC9hPiBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBsaXN0IHdhcworY29uY3VycmVudGx5IHVwZGF0ZWQuIFRoZSB1c2VyIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdDwvY29kZT48L2VtPiBzaG91bGQgY2FsbCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLXJlc3luYyIgdGl0bGU9ImdzdF9pdGVyYXRvcl9yZXN5bmMgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2l0ZXJhdG9yX3Jlc3luYygpPC9jb2RlPjwvYT4gdG8KK2dldCB0aGUgbmV3bHkgdXBkYXRlZCBsaXN0LiAKKzwvcD4KKzxwPgorQSByZXR1cm4gdmFsdWUgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dTVC1JVEVSQVRPUi1FUlJPUjpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0lURVJBVE9SX0VSUk9SPC9jb2RlPjwvYT4gaW5kaWNhdGVzIGFuIHVucmVjb3ZlcmFibGUgZmF0YWwgZXJyb3IuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gdG8gaXRlcmF0ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIGhvbGQgbmV4dCBlbGVtZW50LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT4gY2FsbGVyLWFsbG9jYXRlc108L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgcmVzdWx0IG9mIHRoZSBpdGVyYXRpb24uIFVuc2V0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtPC9jb2RlPjwvZW0+IGFmdGVyIHVzYWdlLgorTVQgc2FmZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtaXRlcmF0b3ItcmVzeW5jIj48L2E+PGgzPmdzdF9pdGVyYXRvcl9yZXN5bmMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICppdDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1Jlc3luYyB0aGUgaXRlcmF0b3IuIHRoaXMgZnVuY3Rpb24gaXMgbW9zdGx5IGNhbGxlZAorYWZ0ZXIgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1uZXh0IiB0aXRsZT0iZ3N0X2l0ZXJhdG9yX25leHQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2l0ZXJhdG9yX25leHQoKTwvY29kZT48L2E+IHJldHVybmVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHU1QtSVRFUkFUT1ItUkVTWU5DOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfSVRFUkFUT1JfUkVTWU5DPC9jb2RlPjwvYT4uCis8L3A+Cis8cD4KK1doZW4gYW4gaXRlcmF0b3Igd2FzIHB1c2hlZCBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aXQ8L2NvZGU+PC9lbT4sIGl0IHdpbGwgYXV0b21hdGljYWxseSBiZSBwb3BwZWQgYWdhaW4KK3dpdGggdGhpcyBmdW5jdGlvbi4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gdG8gcmVzeW5jPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1pdGVyYXRvci1wdXNoIj48L2E+PGgzPmdzdF9pdGVyYXRvcl9wdXNoICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9pdGVyYXRvcl9wdXNoICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqaXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqb3RoZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitQdXNoZXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm90aGVyPC9jb2RlPjwvZW0+IGl0ZXJhdG9yIG9udG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPml0PC9jb2RlPjwvZW0+LiBBbGwgY2FsbHMgcGVyZm9ybWVkIG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdDwvY29kZT48L2VtPiBhcmUKK2ZvcndhcmRlZCB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b3RoZXI8L2NvZGU+PC9lbT4uIElmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vdGhlcjwvY29kZT48L2VtPiByZXR1cm5zIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHU1QtSVRFUkFUT1ItRE9ORTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0lURVJBVE9SX0RPTkU8L2NvZGU+PC9hPiwgaXQgaXMKK3BvcHBlZCBhZ2FpbiBhbmQgY2FsbHMgYXJlIGhhbmRsZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPml0PC9jb2RlPjwvZW0+IGFnYWluLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIGlzIG1haW5seSB1c2VkIGJ5IG9iamVjdHMgaW1wbGVtZW50aW5nIHRoZSBpdGVyYXRvcgorbmV4dCBmdW5jdGlvbiB0byByZWN1cnNlIGludG8gc3Vic3RydWN0dXJlcy4KKzwvcD4KKzxwPgorV2hlbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLXJlc3luYyIgdGl0bGU9ImdzdF9pdGVyYXRvcl9yZXN5bmMgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2l0ZXJhdG9yX3Jlc3luYygpPC9jb2RlPjwvYT4gaXMgY2FsbGVkIG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdDwvY29kZT48L2VtPiwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm90aGVyPC9jb2RlPjwvZW0+IHdpbGwgYXV0b21hdGljYWxseSBiZQorcG9wcGVkLgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPml0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+IHRvIHVzZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b3RoZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gdG8gcHVzaDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1pdGVyYXRvci1maWx0ZXIiPjwvYT48aDM+Z3N0X2l0ZXJhdG9yX2ZpbHRlciAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKiAgICAgICBnc3RfaXRlcmF0b3JfZmlsdGVyICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKml0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dDb21wYXJlRnVuYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdDb21wYXJlRnVuYzwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGUgYSBuZXcgaXRlcmF0b3IgZnJvbSBhbiBleGlzdGluZyBpdGVyYXRvci4gVGhlIG5ldyBpdGVyYXRvcgord2lsbCBvbmx5IHJldHVybiB0aG9zZSBlbGVtZW50cyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBjb21wYXJlIGZ1bmN0aW9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+LgorVGhlIGZpcnN0IHBhcmFtZXRlciB0aGF0IGlzIHBhc3NlZCB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPiBpcyB0aGUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IG9mIHRoZSBjdXJyZW50CitpdGVyYXRvciBlbGVtZW50IGFuZCB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+LiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPiBzaG91bGQKK3JldHVybiAwIGZvciBlbGVtZW50cyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgZmlsdGVyZWQgaXRlcmF0b3IuCis8L3A+Cis8cD4KK1doZW4gdGhpcyBpdGVyYXRvciBpcyBmcmVlZCwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPml0PC9jb2RlPjwvZW0+IHdpbGwgYWxzbyBiZSBmcmVlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiB0byBmaWx0ZXI8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGNvbXBhcmUgZnVuY3Rpb24gdG8gc2VsZWN0IGVsZW1lbnRzLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGUgY2FsbGJhY2sgaXMgdmFsaWQgb25seSBkdXJpbmcgdGhlIGNhbGwgdG8gdGhlIG1ldGhvZC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5zY29wZSBjYWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhIHBhc3NlZCB0byB0aGUgY29tcGFyZSBmdW5jdGlvbi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iVGhpcyBwYXJhbWV0ZXIgaXMgYSAndXNlcl9kYXRhJywgZm9yIGNhbGxiYWNrczsgbWFueSBiaW5kaW5ncyBjYW4gcGFzcyBOVUxMIGhlcmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+Y2xvc3VyZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4uCitNVCBzYWZlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWl0ZXJhdG9yLWZvbGQiPjwvYT48aDM+Z3N0X2l0ZXJhdG9yX2ZvbGQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvclJlc3VsdCIgdGl0bGU9ImVudW0gR3N0SXRlcmF0b3JSZXN1bHQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SXRlcmF0b3JSZXN1bHQ8L3NwYW4+PC9hPiAgIGdzdF9pdGVyYXRvcl9mb2xkICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqaXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yRm9sZEZ1bmN0aW9uIiB0aXRsZT0iR3N0SXRlcmF0b3JGb2xkRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvckZvbGRGdW5jdGlvbjwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpyZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitGb2xkcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPiBvdmVyIHRoZSBlbGVtZW50cyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aXRlcjwvY29kZT48L2VtPi4gVGhhdCBpcyB0byBzYXksIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+IHdpbGwgYmUgY2FsbGVkCithcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPiAob2JqZWN0LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmV0PC9jb2RlPjwvZW0+LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+KSBmb3IgZWFjaCBvYmplY3QgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPml0PC9jb2RlPjwvZW0+LiBUaGUgbm9ybWFsIHVzZQorb2YgdGhpcyBwcm9jZWR1cmUgaXMgdG8gYWNjdW11bGF0ZSB0aGUgcmVzdWx0cyBvZiBvcGVyYXRpbmcgb24gdGhlIG9iamVjdHMgaW4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZXQ8L2NvZGU+PC9lbT4uCis8L3A+Cis8cD4KK1RoaXMgcHJvY2VkdXJlIGNhbiBiZSB1c2VkIChhbmQgaXMgdXNlZCBpbnRlcm5hbGx5KSB0byBpbXBsZW1lbnQgdGhlCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLWZvcmVhY2giIHRpdGxlPSJnc3RfaXRlcmF0b3JfZm9yZWFjaCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaXRlcmF0b3JfZm9yZWFjaCgpPC9jb2RlPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItZmluZC1jdXN0b20iIHRpdGxlPSJnc3RfaXRlcmF0b3JfZmluZF9jdXN0b20gKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2l0ZXJhdG9yX2ZpbmRfY3VzdG9tKCk8L2NvZGU+PC9hPiBvcGVyYXRpb25zLgorPC9wPgorPHA+CitUaGUgZm9sZCB3aWxsIHByb2NlZWQgYXMgbG9uZyBhcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPiByZXR1cm5zIFRSVUUuIFdoZW4gdGhlIGl0ZXJhdG9yIGhhcyBubworbW9yZSBhcmd1bWVudHMsIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHU1QtSVRFUkFUT1ItRE9ORTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0lURVJBVE9SX0RPTkU8L2NvZGU+PC9hPiB3aWxsIGJlIHJldHVybmVkLiBJZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPiByZXR1cm5zIEZBTFNFLAordGhlIGZvbGQgd2lsbCBzdG9wLCBhbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dTVC1JVEVSQVRPUi1PSzpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0lURVJBVE9SX09LPC9jb2RlPjwvYT4gd2lsbCBiZSByZXR1cm5lZC4gRXJyb3JzIG9yIHJlc3luY3MKK3dpbGwgY2F1c2UgZm9sZCB0byByZXR1cm4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dTVC1JVEVSQVRPUi1FUlJPUjpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0lURVJBVE9SX0VSUk9SPC9jb2RlPjwvYT4gb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dTVC1JVEVSQVRPUi1SRVNZTkM6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9JVEVSQVRPUl9SRVNZTkM8L2NvZGU+PC9hPiBhcworYXBwcm9wcmlhdGUuCis8L3A+Cis8cD4KK1RoZSBpdGVyYXRvciB3aWxsIG5vdCBiZSBmcmVlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiB0byBmb2xkIG92ZXI8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGZvbGQgZnVuY3Rpb24uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoZSBjYWxsYmFjayBpcyB2YWxpZCBvbmx5IGR1cmluZyB0aGUgY2FsbCB0byB0aGUgbWV0aG9kLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNjb3BlIGNhbGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2VlZCB2YWx1ZSBwYXNzZWQgdG8gdGhlIGZvbGQgZnVuY3Rpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VyIGRhdGEgcGFzc2VkIHRvIHRoZSBmb2xkIGZ1bmN0aW9uLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGlzIHBhcmFtZXRlciBpcyBhICd1c2VyX2RhdGEnLCBmb3IgY2FsbGJhY2tzOyBtYW55IGJpbmRpbmdzIGNhbiBwYXNzIE5VTEwgaGVyZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5jbG9zdXJlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JSZXN1bHQiIHRpdGxlPSJlbnVtIEdzdEl0ZXJhdG9yUmVzdWx0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3JSZXN1bHQ8L3NwYW4+PC9hPiwgYXMgZGVzY3JpYmVkIGFib3ZlLgorTVQgc2FmZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtaXRlcmF0b3ItZm9yZWFjaCI+PC9hPjxoMz5nc3RfaXRlcmF0b3JfZm9yZWFjaCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yUmVzdWx0IiB0aXRsZT0iZW51bSBHc3RJdGVyYXRvclJlc3VsdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvclJlc3VsdDwvc3Bhbj48L2E+ICAgZ3N0X2l0ZXJhdG9yX2ZvcmVhY2ggICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICppdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JGb3JlYWNoRnVuY3Rpb24iIHRpdGxlPSJHc3RJdGVyYXRvckZvcmVhY2hGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yRm9yZWFjaEZ1bmN0aW9uPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0l0ZXJhdGUgb3ZlciBhbGwgZWxlbWVudCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aXQ8L2NvZGU+PC9lbT4gYW5kIGNhbGwgdGhlIGdpdmVuIGZ1bmN0aW9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+IGZvcgorZWFjaCBlbGVtZW50LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPml0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+IHRvIGl0ZXJhdGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZWxlbWVudC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iVGhlIGNhbGxiYWNrIGlzIHZhbGlkIG9ubHkgZHVyaW5nIHRoZSBjYWxsIHRvIHRoZSBtZXRob2QuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2NvcGUgY2FsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZXIgZGF0YSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGlzIHBhcmFtZXRlciBpcyBhICd1c2VyX2RhdGEnLCBmb3IgY2FsbGJhY2tzOyBtYW55IGJpbmRpbmdzIGNhbiBwYXNzIE5VTEwgaGVyZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5jbG9zdXJlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHJlc3VsdCBjYWxsIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItZm9sZCIgdGl0bGU9ImdzdF9pdGVyYXRvcl9mb2xkICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9pdGVyYXRvcl9mb2xkKCk8L2NvZGU+PC9hPi4gVGhlIGl0ZXJhdG9yIHdpbGwgbm90IGJlCitmcmVlZC4KK01UIHNhZmUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWl0ZXJhdG9yLWZpbmQtY3VzdG9tIj48L2E+PGgzPmdzdF9pdGVyYXRvcl9maW5kX2N1c3RvbSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfaXRlcmF0b3JfZmluZF9jdXN0b20gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKml0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dDb21wYXJlRnVuYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdDb21wYXJlRnVuYzwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICplbGVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRmluZCB0aGUgZmlyc3QgZWxlbWVudCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aXQ8L2NvZGU+PC9lbT4gdGhhdCBtYXRjaGVzIHRoZSBjb21wYXJlIGZ1bmN0aW9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+LgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT4gc2hvdWxkIHJldHVybiAwIHdoZW4gdGhlIGVsZW1lbnQgaXMgZm91bmQuIFRoZSBmaXJzdCBwYXJhbWV0ZXIKK3RvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+IHdpbGwgYmUgdGhlIGN1cnJlbnQgZWxlbWVudCBvZiB0aGUgaXRlcmF0b3IgYW5kIHRoZQorc2Vjb25kIHBhcmFtZXRlciB3aWxsIGJlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT4uCitUaGUgcmVzdWx0IHdpbGwgYmUgc3RvcmVkIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtPC9jb2RlPjwvZW0+IGlmIGEgcmVzdWx0IGlzIGZvdW5kLgorPC9wPgorPHA+CitUaGUgaXRlcmF0b3Igd2lsbCBub3QgYmUgZnJlZWQuCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gRkFMU0UgaWYgYW4gZXJyb3IgaGFwcGVuZWQgdG8gdGhlIGl0ZXJhdG9yCitvciBpZiB0aGUgZWxlbWVudCB3YXNuJ3QgZm91bmQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gdG8gaXRlcmF0ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY29tcGFyZSBmdW5jdGlvbiB0byB1c2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoZSBjYWxsYmFjayBpcyB2YWxpZCBvbmx5IGR1cmluZyB0aGUgY2FsbCB0byB0aGUgbWV0aG9kLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNjb3BlIGNhbGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9pbnRlciB0byBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhIHBhc3NlZCB0byB0aGUgY29tcGFyZSBmdW5jdGlvbi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iVGhpcyBwYXJhbWV0ZXIgaXMgYSAndXNlcl9kYXRhJywgZm9yIGNhbGxiYWNrczsgbWFueSBiaW5kaW5ncyBjYW4gcGFzcyBOVUxMIGhlcmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+Y2xvc3VyZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlJldHVybnMgVFJVRSBpZiB0aGUgZWxlbWVudCB3YXMgZm91bmQsIGVsc2UgRkFMU0UuCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MzE4NTQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbApAQCAtMCwwICsxLDExNDIgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5Hc3RNZW1vcnk8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCIgdGl0bGU9IkdzdEl0ZXJhdG9yIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3RNZW1vcnkuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItR3N0TWVtb3J5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RNZW1vcnkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItR3N0TWVtb3J5LnRvcF9vZl9wYWdlIj48L2E+R3N0TWVtb3J5PC9zcGFuPjwvaDI+Cis8cD5Hc3RNZW1vcnkg4oCUIHJlZmNvdW50ZWQgd3JhcHBlciBmb3IgbWVtb3J5IGJsb2NrczwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RNZW1vcnkuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKKworc3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT47CitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5SW5mbyIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnlJbmZvIj5Hc3RNZW1vcnlJbmZvPC9hPjsKKyAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RBbGxvY2F0b3IiIHRpdGxlPSJHc3RBbGxvY2F0b3IiPkdzdEFsbG9jYXRvcjwvYT47CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR1NULU1FTU9SWS1JUy1XUklUQUJMRTpDQVBTIiB0aXRsZT0iR1NUX01FTU9SWV9JU19XUklUQUJMRSgpIj5HU1RfTUVNT1JZX0lTX1dSSVRBQkxFPC9hPiAgICAgICAgICAgICAgKG1lbSkKK2VudW0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnlGbGFncyIgdGl0bGU9ImVudW0gR3N0TWVtb3J5RmxhZ3MiPkdzdE1lbW9yeUZsYWdzPC9hPjsKK2VudW0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNYXBGbGFncyIgdGl0bGU9ImVudW0gR3N0TWFwRmxhZ3MiPkdzdE1hcEZsYWdzPC9hPjsKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHU1QtTUFQLVJFQURXUklURTpDQVBTIiB0aXRsZT0iR1NUX01BUF9SRUFEV1JJVEUiPkdTVF9NQVBfUkVBRFdSSVRFPC9hPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+ICogICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnlBbGxvY0Z1bmN0aW9uIiB0aXRsZT0iR3N0TWVtb3J5QWxsb2NGdW5jdGlvbiAoKSI+KkdzdE1lbW9yeUFsbG9jRnVuY3Rpb248L2E+KSAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdEFsbG9jYXRvciIgdGl0bGU9IkdzdEFsbG9jYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRvcjwvc3Bhbj48L2E+ICphbGxvY2F0b3I8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBtYXhzaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gYWxpZ248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdzaXplPC9zcGFuPjwvYT4gICAgICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnlHZXRTaXplc0Z1bmN0aW9uIiB0aXRsZT0iR3N0TWVtb3J5R2V0U2l6ZXNGdW5jdGlvbiAoKSI+KkdzdE1lbW9yeUdldFNpemVzRnVuY3Rpb248L2E+KSAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gKm9mZnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+ICptYXhzaXplPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5UmVzaXplRnVuY3Rpb24iIHRpdGxlPSJHc3RNZW1vcnlSZXNpemVGdW5jdGlvbiAoKSI+KkdzdE1lbW9yeVJlc2l6ZUZ1bmN0aW9uPC9hPikgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc3NpemU8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5TWFwRnVuY3Rpb24iIHRpdGxlPSJHc3RNZW1vcnlNYXBGdW5jdGlvbiAoKSI+KkdzdE1lbW9yeU1hcEZ1bmN0aW9uPC9hPikgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gKnNpemU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiAqbWF4c2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1hcEZsYWdzIiB0aXRsZT0iZW51bSBHc3RNYXBGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1hcEZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnlVbm1hcEZ1bmN0aW9uIiB0aXRsZT0iR3N0TWVtb3J5VW5tYXBGdW5jdGlvbiAoKSI+KkdzdE1lbW9yeVVubWFwRnVuY3Rpb248L2E+KSAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnlGcmVlRnVuY3Rpb24iIHRpdGxlPSJHc3RNZW1vcnlGcmVlRnVuY3Rpb24gKCkiPipHc3RNZW1vcnlGcmVlRnVuY3Rpb248L2E+KSAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKm1lbTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKiAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeUNvcHlGdW5jdGlvbiIgdGl0bGU9IkdzdE1lbW9yeUNvcHlGdW5jdGlvbiAoKSI+KkdzdE1lbW9yeUNvcHlGdW5jdGlvbjwvYT4pICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc3NpemU8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5IiB0aXRsZT0ic3RydWN0IEdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5U2hhcmVGdW5jdGlvbiIgdGl0bGU9IkdzdE1lbW9yeVNoYXJlRnVuY3Rpb24gKCkiPipHc3RNZW1vcnlTaGFyZUZ1bmN0aW9uPC9hPikgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKm1lbTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NzaXplPC9zcGFuPjwvYT4gb2Zmc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeUlzU3BhbkZ1bmN0aW9uIiB0aXRsZT0iR3N0TWVtb3J5SXNTcGFuRnVuY3Rpb24gKCkiPipHc3RNZW1vcnlJc1NwYW5GdW5jdGlvbjwvYT4pICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKm1lbTE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKm1lbTI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiAqb2Zmc2V0PC9jb2RlPjwvZW0+KTsKK2V4dGVybiBnc2l6ZSAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LWFsaWdubWVudCIgdGl0bGU9ImdzdF9tZW1vcnlfYWxpZ25tZW50Ij5nc3RfbWVtb3J5X2FsaWdubWVudDwvYT47Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKiAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjZ3N0LWFsbG9jYXRvci1hbGxvYyIgdGl0bGU9ImdzdF9hbGxvY2F0b3JfYWxsb2MgKCkiPmdzdF9hbGxvY2F0b3JfYWxsb2M8L2E+ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0QWxsb2NhdG9yIiB0aXRsZT0iR3N0QWxsb2NhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWxsb2NhdG9yPC9zcGFuPjwvYT4gKmFsbG9jYXRvcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IG1heHNpemU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBhbGlnbjwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKiAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS1uZXctd3JhcHBlZCIgdGl0bGU9ImdzdF9tZW1vcnlfbmV3X3dyYXBwZWQgKCkiPmdzdF9tZW1vcnlfbmV3X3dyYXBwZWQ8L2E+ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5RmxhZ3MiIHRpdGxlPSJlbnVtIEdzdE1lbW9yeUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5RmxhZ3M8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGRhdGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1NaXNjZWxsYW5lb3VzLVV0aWxpdHktRnVuY3Rpb25zLmh0bWwjR0ZyZWVGdW5jIj48c3BhbiBjbGFzcz0idHlwZSI+R0ZyZWVGdW5jPC9zcGFuPjwvYT4gZnJlZV9mdW5jPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gbWF4c2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+ICogICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktcmVmIiB0aXRsZT0iZ3N0X21lbW9yeV9yZWYgKCkiPmdzdF9tZW1vcnlfcmVmPC9hPiAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5IiB0aXRsZT0ic3RydWN0IEdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+ICptZW08L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktdW5yZWYiIHRpdGxlPSJnc3RfbWVtb3J5X3VucmVmICgpIj5nc3RfbWVtb3J5X3VucmVmPC9hPiAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nc2l6ZTwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LWdldC1zaXplcyIgdGl0bGU9ImdzdF9tZW1vcnlfZ2V0X3NpemVzICgpIj5nc3RfbWVtb3J5X2dldF9zaXplczwvYT4gICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gKm9mZnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+ICptYXhzaXplPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LXJlc2l6ZSIgdGl0bGU9ImdzdF9tZW1vcnlfcmVzaXplICgpIj5nc3RfbWVtb3J5X3Jlc2l6ZTwvYT4gICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc3NpemU8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LW1hcCIgdGl0bGU9ImdzdF9tZW1vcnlfbWFwICgpIj5nc3RfbWVtb3J5X21hcDwvYT4gICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gKnNpemU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiAqbWF4c2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1hcEZsYWdzIiB0aXRsZT0iZW51bSBHc3RNYXBGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1hcEZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktdW5tYXAiIHRpdGxlPSJnc3RfbWVtb3J5X3VubWFwICgpIj5nc3RfbWVtb3J5X3VubWFwPC9hPiAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+ICogICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktY29weSIgdGl0bGU9ImdzdF9tZW1vcnlfY29weSAoKSI+Z3N0X21lbW9yeV9jb3B5PC9hPiAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKm1lbTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NzaXplPC9zcGFuPjwvYT4gb2Zmc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKiAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS1zaGFyZSIgdGl0bGU9ImdzdF9tZW1vcnlfc2hhcmUgKCkiPmdzdF9tZW1vcnlfc2hhcmU8L2E+ICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5IiB0aXRsZT0ic3RydWN0IEdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+ICptZW08L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzc2l6ZTwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktaXMtc3BhbiIgdGl0bGU9ImdzdF9tZW1vcnlfaXNfc3BhbiAoKSI+Z3N0X21lbW9yeV9pc19zcGFuPC9hPiAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKm1lbTE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKm1lbTI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiAqb2Zmc2V0PC9jb2RlPjwvZW0+KTsKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHU1QtQUxMT0NBVE9SLVNZU01FTTpDQVBTIiB0aXRsZT0iR1NUX0FMTE9DQVRPUl9TWVNNRU0iPkdTVF9BTExPQ0FUT1JfU1lTTUVNPC9hPgorY29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RBbGxvY2F0b3IiIHRpdGxlPSJHc3RBbGxvY2F0b3IiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QWxsb2NhdG9yPC9zcGFuPjwvYT4gKiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1hbGxvY2F0b3ItZmluZCIgdGl0bGU9ImdzdF9hbGxvY2F0b3JfZmluZCAoKSI+Z3N0X2FsbG9jYXRvcl9maW5kPC9hPiAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTsKK2NvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0QWxsb2NhdG9yIiB0aXRsZT0iR3N0QWxsb2NhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEFsbG9jYXRvcjwvc3Bhbj48L2E+ICogPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNnc3QtYWxsb2NhdG9yLXJlZ2lzdGVyIiB0aXRsZT0iZ3N0X2FsbG9jYXRvcl9yZWdpc3RlciAoKSI+Z3N0X2FsbG9jYXRvcl9yZWdpc3RlcjwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5SW5mbyIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnlJbmZvIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5SW5mbzwvc3Bhbj48L2E+ICppbmZvPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNnc3QtYWxsb2NhdG9yLXNldC1kZWZhdWx0IiB0aXRsZT0iZ3N0X2FsbG9jYXRvcl9zZXRfZGVmYXVsdCAoKSI+Z3N0X2FsbG9jYXRvcl9zZXRfZGVmYXVsdDwvYT4gICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RBbGxvY2F0b3IiIHRpdGxlPSJHc3RBbGxvY2F0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbGxvY2F0b3I8L3NwYW4+PC9hPiAqYWxsb2NhdG9yPC9jb2RlPjwvZW0+KTsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0TWVtb3J5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPgorR3N0TWVtb3J5IGlzIGEgbGlnaHR3ZWlnaHQgcmVmY291bnRlZCBvYmplY3QgdGhhdCB3cmFwcyBhIHJlZ2lvbiBvZiBtZW1vcnkuCitUaGV5IGFyZSB0eXBpY2FsbHkgdXNlZCB0byBtYW5hZ2UgdGhlIGRhdGEgb2YgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi4KKzwvcD4KKzxwPgorTWVtb3J5IGlzIHVzdWFsbHkgY3JlYXRlZCBieSBhbGxvY2F0b3JzIHdpdGggYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1hbGxvY2F0b3ItYWxsb2MiIHRpdGxlPSJnc3RfYWxsb2NhdG9yX2FsbG9jICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hbGxvY2F0b3JfYWxsb2MoKTwvY29kZT48L2E+CittZXRob2QgY2FsbC4gV2hlbiBOVUxMIGlzIHVzZWQgYXMgdGhlIGFsbG9jYXRvciwgdGhlIGRlZmF1bHQgYWxsb2NhdG9yIHdpbGwKK2JlIHVzZWQuCis8L3A+Cis8cD4KK05ldyBhbGxvY2F0b3JzIGNhbiBiZSByZWdpc3RlcmVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNnc3QtYWxsb2NhdG9yLXJlZ2lzdGVyIiB0aXRsZT0iZ3N0X2FsbG9jYXRvcl9yZWdpc3RlciAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYWxsb2NhdG9yX3JlZ2lzdGVyKCk8L2NvZGU+PC9hPi4KK0FsbG9jYXRvcnMgYXJlIGlkZW50aWZpZWQgYnkgbmFtZSBhbmQgY2FuIGJlIHJldHJpZXZlZCB3aXRoCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1hbGxvY2F0b3ItZmluZCIgdGl0bGU9ImdzdF9hbGxvY2F0b3JfZmluZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYWxsb2NhdG9yX2ZpbmQoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitOZXcgbWVtb3J5IGNhbiBiZSBjcmVhdGVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LW5ldy13cmFwcGVkIiB0aXRsZT0iZ3N0X21lbW9yeV9uZXdfd3JhcHBlZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWVtb3J5X25ld193cmFwcGVkKCk8L2NvZGU+PC9hPiB0aGF0IHdyYXBzIHRoZSBtZW1vcnkKK2FsbG9jYXRlZCBlbHNld2hlcmUuCis8L3A+Cis8cD4KK1JlZmNvdW50aW5nIG9mIHRoZSBtZW1vcnkgYmxvY2sgaXMgcGVyZm9ybWVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LXJlZiIgdGl0bGU9ImdzdF9tZW1vcnlfcmVmICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9tZW1vcnlfcmVmKCk8L2NvZGU+PC9hPiBhbmQKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS11bnJlZiIgdGl0bGU9ImdzdF9tZW1vcnlfdW5yZWYgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21lbW9yeV91bnJlZigpPC9jb2RlPjwvYT4uCis8L3A+Cis8cD4KK1RoZSBzaXplIG9mIHRoZSBtZW1vcnkgY2FuIGJlIHJldHJpZXZlZCBhbmQgY2hhbmdlZCB3aXRoCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktZ2V0LXNpemVzIiB0aXRsZT0iZ3N0X21lbW9yeV9nZXRfc2l6ZXMgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21lbW9yeV9nZXRfc2l6ZXMoKTwvY29kZT48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktcmVzaXplIiB0aXRsZT0iZ3N0X21lbW9yeV9yZXNpemUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21lbW9yeV9yZXNpemUoKTwvY29kZT48L2E+IHJlc3BlY3RpdmVseS4KKzwvcD4KKzxwPgorR2V0dGluZyBhY2Nlc3MgdG8gdGhlIGRhdGEgb2YgdGhlIG1lbW9yeSBpcyBwZXJmb3JtZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktbWFwIiB0aXRsZT0iZ3N0X21lbW9yeV9tYXAgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21lbW9yeV9tYXAoKTwvY29kZT48L2E+LgorQWZ0ZXIgdGhlIG1lbW9yeSBhY2Nlc3MgaXMgY29tcGxldGVkLCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktdW5tYXAiIHRpdGxlPSJnc3RfbWVtb3J5X3VubWFwICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9tZW1vcnlfdW5tYXAoKTwvY29kZT48L2E+IHNob3VsZCBiZSBjYWxsZWQuCis8L3A+Cis8cD4KK01lbW9yeSBjYW4gYmUgY29waWVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LWNvcHkiIHRpdGxlPSJnc3RfbWVtb3J5X2NvcHkgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21lbW9yeV9jb3B5KCk8L2NvZGU+PC9hPiwgd2hpY2ggd2lsbCByZXR1cm5uIGEgd3JpdGFibGUKK2NvcHkuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS1zaGFyZSIgdGl0bGU9ImdzdF9tZW1vcnlfc2hhcmUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21lbW9yeV9zaGFyZSgpPC9jb2RlPjwvYT4gd2lsbCBjcmVhdGUgYSBuZXcgbWVtb3J5IGJsb2NrIHRoYXQgc2hhcmVzIHRoZQorbWVtb3J5IHdpdGggYW4gZXhpc3RpbmcgbWVtb3J5IGJsb2NrIGF0IGEgY3VzdG9tIG9mZnNldCBhbmQgd2l0aCBhIGN1c3RvbQorc2l6ZS4KKzwvcD4KKzxwPgorTWVtb3J5IGNhbiBiZSBlZmZpY2llbnRseSBtZXJnZWQgd2hlbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktaXMtc3BhbiIgdGl0bGU9ImdzdF9tZW1vcnlfaXNfc3BhbiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWVtb3J5X2lzX3NwYW4oKTwvY29kZT48L2E+IHJldHVybnMgVFJVRS4KKzwvcD4KKzxwPgorTGFzdCByZXZpZXdlZCBvbiAyMDExLTA2LTA4ICgwLjExLjApCis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RNZW1vcnkuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdE1lbW9yeSI+PC9hPjxoMz5zdHJ1Y3QgR3N0TWVtb3J5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0TWVtb3J5IHsKKyAgY29uc3QgR3N0QWxsb2NhdG9yICphbGxvY2F0b3I7CisKKyAgR3N0TWVtb3J5RmxhZ3MgIGZsYWdzOworICBnaW50ICAgICAgICAgICAgcmVmY291bnQ7CisgIEdzdE1lbW9yeSAgICAgICpwYXJlbnQ7Cit9OworPC9wcmU+Cis8cD4KK0Jhc2Ugc3RydWN0dXJlIGZvciBtZW1vcnkgaW1wbGVtZW50YXRpb25zLiBDdXN0b20gbWVtb3J5IHdpbGwgcHV0IHRoaXMgc3RydWN0dXJlCithcyB0aGUgZmlyc3QgbWVtYmVyIG9mIHRoZWlyIHN0cnVjdHVyZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNvbnN0wqA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdEFsbG9jYXRvciIgdGl0bGU9IkdzdEFsbG9jYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRvcjwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWVtb3J5LmFsbG9jYXRvciI+PC9hPmFsbG9jYXRvcjwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9pbnRlciB0byB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RBbGxvY2F0b3IiIHRpdGxlPSJHc3RBbGxvY2F0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbGxvY2F0b3I8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5RmxhZ3MiIHRpdGxlPSJlbnVtIEdzdE1lbW9yeUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5RmxhZ3M8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWVtb3J5LmZsYWdzIj48L2E+ZmxhZ3M8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPm1lbW9yeSBmbGFnczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWVtb3J5LnJlZmNvdW50Ij48L2E+cmVmY291bnQ8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnJlZmNvdW50PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5IiB0aXRsZT0ic3RydWN0IEdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWVtb3J5LnBhcmVudCI+PC9hPnBhcmVudDwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cGFyZW50IG1lbW9yeSBibG9jazwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdE1lbW9yeUluZm8iPjwvYT48aDM+c3RydWN0IEdzdE1lbW9yeUluZm88L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RNZW1vcnlJbmZvIHsKKyAgR3N0TWVtb3J5QWxsb2NGdW5jdGlvbiAgICBhbGxvYzsKKyAgR3N0TWVtb3J5R2V0U2l6ZXNGdW5jdGlvbiBnZXRfc2l6ZXM7CisgIEdzdE1lbW9yeVJlc2l6ZUZ1bmN0aW9uICAgcmVzaXplOworICBHc3RNZW1vcnlNYXBGdW5jdGlvbiAgICAgIG1hcDsKKyAgR3N0TWVtb3J5VW5tYXBGdW5jdGlvbiAgICB1bm1hcDsKKyAgR3N0TWVtb3J5RnJlZUZ1bmN0aW9uICAgICBmcmVlOworCisgIEdzdE1lbW9yeUNvcHlGdW5jdGlvbiAgICAgY29weTsKKyAgR3N0TWVtb3J5U2hhcmVGdW5jdGlvbiAgICBzaGFyZTsKKyAgR3N0TWVtb3J5SXNTcGFuRnVuY3Rpb24gICBpc19zcGFuOworCisgIGdwb2ludGVyIHVzZXJfZGF0YTsKK307Cis8L3ByZT4KKzxwPgorVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5SW5mbyIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnlJbmZvIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5SW5mbzwvc3Bhbj48L2E+IGlzIHVzZWQgdG8gcmVnaXN0ZXIgbmV3IG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBjb250YWluCit0aGUgaW1wbGVtZW50YXRpb25zIGZvciB2YXJpb3VzIG1lbW9yeSBvcGVyYXRpb25zLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnlBbGxvY0Z1bmN0aW9uIiB0aXRsZT0iR3N0TWVtb3J5QWxsb2NGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeUFsbG9jRnVuY3Rpb248L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWVtb3J5SW5mby5hbGxvYyI+PC9hPmFsbG9jPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEdzdE1lbW9yeUFsbG9jRnVuY3Rpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnlHZXRTaXplc0Z1bmN0aW9uIiB0aXRsZT0iR3N0TWVtb3J5R2V0U2l6ZXNGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeUdldFNpemVzRnVuY3Rpb248L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWVtb3J5SW5mby5nZXQtc2l6ZXMiPjwvYT5nZXRfc2l6ZXM8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgR3N0TWVtb3J5R2V0U2l6ZXNGdW5jdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeVJlc2l6ZUZ1bmN0aW9uIiB0aXRsZT0iR3N0TWVtb3J5UmVzaXplRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnlSZXNpemVGdW5jdGlvbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RNZW1vcnlJbmZvLnJlc2l6ZSI+PC9hPnJlc2l6ZTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBHc3RNZW1vcnlSZXNpemVGdW5jdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeU1hcEZ1bmN0aW9uIiB0aXRsZT0iR3N0TWVtb3J5TWFwRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnlNYXBGdW5jdGlvbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RNZW1vcnlJbmZvLm1hcCI+PC9hPm1hcDwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBHc3RNZW1vcnlNYXBGdW5jdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeVVubWFwRnVuY3Rpb24iIHRpdGxlPSJHc3RNZW1vcnlVbm1hcEZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5VW5tYXBGdW5jdGlvbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RNZW1vcnlJbmZvLnVubWFwIj48L2E+dW5tYXA8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgR3N0TWVtb3J5VW5tYXBGdW5jdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeUZyZWVGdW5jdGlvbiIgdGl0bGU9IkdzdE1lbW9yeUZyZWVGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeUZyZWVGdW5jdGlvbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RNZW1vcnlJbmZvLmZyZWUiPjwvYT5mcmVlPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEdzdE1lbW9yeUZyZWVGdW5jdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeUNvcHlGdW5jdGlvbiIgdGl0bGU9IkdzdE1lbW9yeUNvcHlGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeUNvcHlGdW5jdGlvbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RNZW1vcnlJbmZvLmNvcHkiPjwvYT5jb3B5PC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEdzdE1lbW9yeUNvcHlGdW5jdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeVNoYXJlRnVuY3Rpb24iIHRpdGxlPSJHc3RNZW1vcnlTaGFyZUZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5U2hhcmVGdW5jdGlvbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RNZW1vcnlJbmZvLnNoYXJlIj48L2E+c2hhcmU8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgR3N0TWVtb3J5U2hhcmVGdW5jdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeUlzU3BhbkZ1bmN0aW9uIiB0aXRsZT0iR3N0TWVtb3J5SXNTcGFuRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnlJc1NwYW5GdW5jdGlvbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RNZW1vcnlJbmZvLmlzLXNwYW4iPjwvYT5pc19zcGFuPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEdzdE1lbW9yeUlzU3BhbkZ1bmN0aW9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdE1lbW9yeUluZm8udXNlci1kYXRhIj48L2E+dXNlcl9kYXRhPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5nZW5lcmljIHVzZXIgZGF0YSBmb3IgdGhlIGFsbG9jYXRvcjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEFsbG9jYXRvciI+PC9hPjxoMz5Hc3RBbGxvY2F0b3I8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgc3RydWN0IF9Hc3RBbGxvY2F0b3IgR3N0QWxsb2NhdG9yOzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtTUVNT1JZLUlTLVdSSVRBQkxFOkNBUFMiPjwvYT48aDM+R1NUX01FTU9SWV9JU19XUklUQUJMRSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9NRU1PUllfSVNfV1JJVEFCTEUobWVtKTwvcHJlPgorPHA+CitDaGVjayBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+IGlzIHdyaXRhYmxlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdE1lbW9yeUZsYWdzIj48L2E+PGgzPmVudW0gR3N0TWVtb3J5RmxhZ3M8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9NRU1PUllfRkxBR19SRUFET05MWSA9ICgxICZsdDsmbHQ7IDApLAorICBHU1RfTUVNT1JZX0ZMQUdfTk9fU0hBUkUgPSAoMSAmbHQ7Jmx0OyAxKSwKKworICBHU1RfTUVNT1JZX0ZMQUdfTEFTVCA9ICgxICZsdDsmbHQ7IDI0KQorfSBHc3RNZW1vcnlGbGFnczsKKzwvcHJlPgorPHA+CitGbGFncyBmb3Igd3JhcHBlZCBtZW1vcnkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1NRU1PUlktRkxBRy1SRUFET05MWTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFk8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPm1lbW9yeSBpcyByZWFkb25seS4gSXQgaXMgbm90IGFsbG93ZWQgdG8gbWFwIHRoZQorbWVtb3J5IHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHU1QtTUFQLVdSSVRFOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfTUFQX1dSSVRFPC9zcGFuPjwvYT4uCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtTUVNT1JZLUZMQUctTk8tU0hBUkU6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX01FTU9SWV9GTEFHX05PX1NIQVJFPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5tZW1vcnkgbXVzdCBub3QgYmUgc2hhcmVkLiBDb3BpZXMgd2lsbCBoYXZlIHRvIGJlCittYWRlIHdoZW4gdGhpcyBtZW1vcnkgbmVlZHMgdG8gYmUgc2hhcmVkIGJldHdlZW4gYnVmZmVycy4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1NRU1PUlktRkxBRy1MQVNUOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9NRU1PUllfRkxBR19MQVNUPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5maXJzdCBmbGFnIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGN1c3RvbSBwdXJwb3NlcworPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0TWFwRmxhZ3MiPjwvYT48aDM+ZW51bSBHc3RNYXBGbGFnczwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBlbnVtIHsKKyAgR1NUX01BUF9SRUFEID0gICgxICZsdDsmbHQ7IDApLAorICBHU1RfTUFQX1dSSVRFID0gKDEgJmx0OyZsdDsgMSksCit9IEdzdE1hcEZsYWdzOworPC9wcmU+Cis8cD4KK0ZsYWdzIHVzZWQgd2hlbiBtYXBwaW5nIG1lbW9yeQorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtTUFQLVJFQUQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX01BUF9SRUFEPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5tYXAgZm9yIHJlYWQgYWNjZXNzCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtTUFQLVdSSVRFOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9NQVBfV1JJVEU8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPm1hcCBmb3Igd3JpdGUgYWNjZXNzCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtTUFQLVJFQURXUklURTpDQVBTIj48L2E+PGgzPkdTVF9NQVBfUkVBRFdSSVRFPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9NQVBfUkVBRFdSSVRFICAgICAgKEdTVF9NQVBfUkVBRCB8IEdTVF9NQVBfV1JJVEUpCis8L3ByZT4KKzxwPgorTWFwIGZvciByZWFkd3JpdGUgYWNjZXNzCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdE1lbW9yeUFsbG9jRnVuY3Rpb24iPjwvYT48aDM+R3N0TWVtb3J5QWxsb2NGdW5jdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+ICogICAgICAgICAoKkdzdE1lbW9yeUFsbG9jRnVuY3Rpb24pICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0QWxsb2NhdG9yIiB0aXRsZT0iR3N0QWxsb2NhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWxsb2NhdG9yPC9zcGFuPjwvYT4gKmFsbG9jYXRvcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IG1heHNpemU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBhbGlnbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0FsbG9jYXRlIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5IiB0aXRsZT0ic3RydWN0IEdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+IGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFsbG9jYXRvcjwvY29kZT48L2VtPiB0aGF0IGNhbiBob2xkIGF0IGxlYXN0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYXhzaXplPC9jb2RlPjwvZW0+IGJ5dGVzCithbmQgaXMgYWxpZ25lZCB0byAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFsaWduPC9jb2RlPjwvZW0+ICsgMSkgYnl0ZXMuCis8L3A+Cis8cD4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT4gaXMgdGhlIGRhdGEgdGhhdCB3YXMgdXNlZCB3aGVuIHJlZ2lzdGVyaW5nIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hbGxvY2F0b3I8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWxsb2NhdG9yPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RBbGxvY2F0b3IiIHRpdGxlPSJHc3RBbGxvY2F0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbGxvY2F0b3I8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYXhzaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtYXhzaXplPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hbGlnbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgYWxpZ25tZW50PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXdseSBhbGxvY2F0ZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4uIEZyZWUgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktdW5yZWYiIHRpdGxlPSJnc3RfbWVtb3J5X3VucmVmICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9tZW1vcnlfdW5yZWYoKTwvY29kZT48L2E+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RNZW1vcnlHZXRTaXplc0Z1bmN0aW9uIj48L2E+PGgzPkdzdE1lbW9yeUdldFNpemVzRnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nc2l6ZTwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgKCpHc3RNZW1vcnlHZXRTaXplc0Z1bmN0aW9uKSAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gKm9mZnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+ICptYXhzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0cmlldmUgdGhlIHNpemUsIG9mZnNldCBhbmQgbWF4c2l6ZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5IiB0aXRsZT0ic3RydWN0IEdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5yZXN1bHQgcG9pbnRlciBmb3Igb2Zmc2V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYXhzaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnJlc3VsdCBwb2ludGVyIGZvciBtYXhzaXplPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNpemUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPiwgdGhlIG9mZnNldCBhbmQgdGhlIG1heGltdW0gYWxsb2NhdGVkIHNpemUgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1heHNpemU8L2NvZGU+PC9lbT4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0TWVtb3J5UmVzaXplRnVuY3Rpb24iPjwvYT48aDM+R3N0TWVtb3J5UmVzaXplRnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgKCpHc3RNZW1vcnlSZXNpemVGdW5jdGlvbikgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc3NpemU8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQWRqdXN0IHRoZSBzaXplIGFuZCBvZmZzZXQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPi4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPiBieXRlcyB3aWxsIGJlIGFkanVzdGVkIGZyb20gdGhlCitjdXJyZW50IGZpcnN0IGJ5dGUgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPiBhcyByZXRyaWV2ZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktbWFwIiB0aXRsZT0iZ3N0X21lbW9yeV9tYXAgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21lbW9yeV9tYXAoKTwvY29kZT48L2E+IGFuZCB0aGUgbmV3CitzaXplIHdpbGwgYmUgc2V0IHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+LgorPC9wPgorPHA+Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPiBjYW4gYmUgc2V0IHRvIC0xLCB3aGljaCB3aWxsIG9ubHkgYWRqdXN0IHRoZSBvZmZzZXQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBvZmZzZXQgYWRqdXN0ZW1lbnQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5ldyBzaXplPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0TWVtb3J5TWFwRnVuY3Rpb24iPjwvYT48aDM+R3N0TWVtb3J5TWFwRnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICAgICAgICAgKCpHc3RNZW1vcnlNYXBGdW5jdGlvbikgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gKnNpemU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiAqbWF4c2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1hcEZsYWdzIiB0aXRsZT0iZW51bSBHc3RNYXBGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1hcEZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgdGhlIG1lbW9yeSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+IHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGFjY29yZGluZyB0byB0aGUgbW9kZSBzcGVjaWZpZWQKK2luIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPi4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYXhzaXplPC9jb2RlPjwvZW0+IHdpbGwgcmVzcGVjdGl2ZWx5IGNvbnRhaW4gdGhlIGN1cnJlbnQgYW1vdW50IG9mCit2YWxpZCBieXRlcyBpbiB0aGUgcmV0dXJuZWQgbWVtb3J5IGFuZCB0aGUgbWF4aW11bSBhbGxvY2F0ZWQgbWVtb3J5LgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYXhzaXplPC9jb2RlPjwvZW0+IGNhbiBvcHRpb25hbGx5IGJlIHNldCB0byBOVUxMLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5IiB0aXRsZT0ic3RydWN0IEdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9pbnRlciBmb3IgdGhlIHNpemU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1heHNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9pbnRlciBmb3IgdGhlIG1heHNpemU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZsYWdzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFjY2VzcyBtb2RlIGZvciB0aGUgbWVtb3J5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBwb2ludGVyIHRvIG1lbW9yeS4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4gYnl0ZXMgYXJlIGN1cnJlbnRseSB1c2VkIGZyb20gdGhlCityZXR1cm5lZCBwb2ludGVyIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWF4c2l6ZTwvY29kZT48L2VtPiBieXRlcyBjYW4gcG90ZW50aWFsbHkgYmUgdXNlZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RNZW1vcnlVbm1hcEZ1bmN0aW9uIj48L2E+PGgzPkdzdE1lbW9yeVVubWFwRnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgKCpHc3RNZW1vcnlVbm1hcEZ1bmN0aW9uKSAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZXR1cm4gdGhlIHBvaW50ZXIgcHJldmlvdXNseSByZXRyaWV2ZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktbWFwIiB0aXRsZT0iZ3N0X21lbW9yeV9tYXAgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21lbW9yeV9tYXAoKTwvY29kZT48L2E+IGFuZCBhZGp1c3QgdGhlCitzaXplIG9mIHRoZSBtZW1vcnkgd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPi4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4gY2FuIG9wdGlvbmFsbHkgYmUgc2V0IHRvIC0xIHRvIG5vdAorbW9kaWZ5IHRoZSBzaXplLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5IiB0aXRsZT0ic3RydWN0IEdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGRhdGEgcG9pbnRlcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3IHNpemU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IG9uIHN1Y2Nlc3MuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0TWVtb3J5RnJlZUZ1bmN0aW9uIj48L2E+PGgzPkdzdE1lbW9yeUZyZWVGdW5jdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICAoKkdzdE1lbW9yeUZyZWVGdW5jdGlvbikgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5IiB0aXRsZT0ic3RydWN0IEdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+ICptZW08L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitGcmVlIHRoZSBtZW1vcnkgdXNlZCBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+LiBUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkIHdoZW4gdGhlCityZWZjb3VudCBvZiB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPiBoYXMgcmVhY2hlZCAwLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdE1lbW9yeUNvcHlGdW5jdGlvbiI+PC9hPjxoMz5Hc3RNZW1vcnlDb3B5RnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5IiB0aXRsZT0ic3RydWN0IEdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqICAgICAgICAgKCpHc3RNZW1vcnlDb3B5RnVuY3Rpb24pICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc3NpemU8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ29weSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPiBieXRlcyBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW08L2NvZGU+PC9lbT4gc3RhcnRpbmcgYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPiBhbmQgcmV0dXJuIHRoZW0gd3JhcHBlZCBpbiBhCituZXcgR3N0TWVtb3J5IG9iamVjdC4KK0lmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+IGlzIHNldCB0byAtMSwgYWxsIGJ5dGVzIHN0YXJ0aW5nIGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4gYXJlIGNvcGllZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YW4gb2Zmc2V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgc2l6ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5IiB0aXRsZT0ic3RydWN0IEdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+IG9iamVjdCB3cmFwcGluZyBhIGNvcHkgb2YgdGhlIHJlcXVlc3RlZCByZWdpb24gaW4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW08L2NvZGU+PC9lbT4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0TWVtb3J5U2hhcmVGdW5jdGlvbiI+PC9hPjxoMz5Hc3RNZW1vcnlTaGFyZUZ1bmN0aW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKiAgICAgICAgICgqR3N0TWVtb3J5U2hhcmVGdW5jdGlvbikgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKm1lbTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NzaXplPC9zcGFuPjwvYT4gb2Zmc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NoYXJlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+IGJ5dGVzIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPiBzdGFydGluZyBhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+IGFuZCByZXR1cm4gdGhlbSB3cmFwcGVkIGluIGEKK25ldyBHc3RNZW1vcnkgb2JqZWN0LiBJZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPiBpcyBzZXQgdG8gLTEsIGFsbCBieXRlcyBzdGFydGluZyBhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+IGFyZQorc2hhcmVkLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IG1ha2UgYSBjb3B5IG9mIHRoZSBieXRlcyBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5IiB0aXRsZT0ic3RydWN0IEdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hbiBvZmZzZXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBzaXplPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gb2JqZWN0IHNoYXJpbmcgdGhlIHJlcXVlc3RlZCByZWdpb24gaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RNZW1vcnlJc1NwYW5GdW5jdGlvbiI+PC9hPjxoMz5Hc3RNZW1vcnlJc1NwYW5GdW5jdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAoKkdzdE1lbW9yeUlzU3BhbkZ1bmN0aW9uKSAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5IiB0aXRsZT0ic3RydWN0IEdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+ICptZW0xPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5IiB0aXRsZT0ic3RydWN0IEdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+ICptZW0yPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gKm9mZnNldDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NoZWNrIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW0xPC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtMjwvY29kZT48L2VtPiBvY2N1cHkgY29udGlndW91cyBtZW1vcnkgYW5kIHJldHVybiB0aGUgb2Zmc2V0IG9mCis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtMTwvY29kZT48L2VtPiBpbiB0aGUgcGFyZW50IGJ1ZmZlciBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW0yPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgcmVzdWx0IG9mZnNldDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTE8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW0yPC9jb2RlPjwvZW0+IGFyZSBpbiBjb250aWd1b3VzIG1lbW9yeS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWVtb3J5LWFsaWdubWVudCI+PC9hPjxoMz5nc3RfbWVtb3J5X2FsaWdubWVudDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ZXh0ZXJuIGdzaXplIGdzdF9tZW1vcnlfYWxpZ25tZW50OworPC9wcmU+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1hbGxvY2F0b3ItYWxsb2MiPjwvYT48aDM+Z3N0X2FsbG9jYXRvcl9hbGxvYyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+ICogICAgICAgICBnc3RfYWxsb2NhdG9yX2FsbG9jICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0QWxsb2NhdG9yIiB0aXRsZT0iR3N0QWxsb2NhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWxsb2NhdG9yPC9zcGFuPjwvYT4gKmFsbG9jYXRvcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IG1heHNpemU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBhbGlnbjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1VzZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWxsb2NhdG9yPC9jb2RlPjwvZW0+IHRvIGFsbG9jYXRlIGEgbmV3IG1lbW9yeSBibG9jayB3aXRoIG1lbW9yeSB0aGF0IGlzIGF0IGxlYXN0Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWF4c2l6ZTwvY29kZT48L2VtPiBiaWcgYW5kIGhhcyB0aGUgZ2l2ZW4gYWxpZ25tZW50LgorPC9wPgorPHA+CitXaGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hbGxvY2F0b3I8L2NvZGU+PC9lbT4gaXMgTlVMTCwgdGhlIGRlZmF1bHQgYWxsb2NhdG9yIHdpbGwgYmUgdXNlZC4KKzwvcD4KKzxwPgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFsaWduPC9jb2RlPjwvZW0+IGlzIGdpdmVuIGFzIGEgYml0bWFzayBzbyB0aGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hbGlnbjwvY29kZT48L2VtPiArIDEgZXF1YWxzIHRoZSBhbW91bnQgb2YgYnl0ZXMgdG8KK2FsaWduIHRvLiBGb3IgZXhhbXBsZSwgdG8gYWxpZ24gdG8gOCBieXRlcywgdXNlIGFuIGFsaWdubWVudCBvZiA3LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFsbG9jYXRvcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0QWxsb2NhdG9yIiB0aXRsZT0iR3N0QWxsb2NhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWxsb2NhdG9yPC9zcGFuPjwvYT4gdG8gdXNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYXhzaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFsbG9jYXRlZCBzaXplIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFsaWduPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFsaWdubWVudCBmb3IgdGhlIGRhdGE8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWVtb3J5LW5ldy13cmFwcGVkIj48L2E+PGgzPmdzdF9tZW1vcnlfbmV3X3dyYXBwZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5IiB0aXRsZT0ic3RydWN0IEdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqICAgICAgICAgZ3N0X21lbW9yeV9uZXdfd3JhcHBlZCAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeUZsYWdzIiB0aXRsZT0iZW51bSBHc3RNZW1vcnlGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeUZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBkYXRhPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItTWlzY2VsbGFuZW91cy1VdGlsaXR5LUZ1bmN0aW9ucy5odG1sI0dGcmVlRnVuYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdGcmVlRnVuYzwvc3Bhbj48L2E+IGZyZWVfZnVuYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IG1heHNpemU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQWxsb2NhdGUgYSBuZXcgbWVtb3J5IGJsb2NrIHRoYXQgd3JhcHMgdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZsYWdzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5RmxhZ3MiIHRpdGxlPSJlbnVtIEdzdE1lbW9yeUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5RmxhZ3M8L3NwYW4+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5kYXRhIHRvIHdyYXA8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZyZWVfZnVuYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5mdW5jdGlvbiB0byBmcmVlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1heHNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YWxsb2NhdGVkIHNpemUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm9mZnNldCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnNpemUgb2YgdmFsaWQgZGF0YTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5IiB0aXRsZT0ic3RydWN0IEdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZW1vcnktcmVmIj48L2E+PGgzPmdzdF9tZW1vcnlfcmVmICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKiAgICAgICAgIGdzdF9tZW1vcnlfcmVmICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKm1lbTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0luY3JlYXNlcyB0aGUgcmVmY291bnQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+IHdpdGggaW5jcmVhc2VkIHJlZmNvdW50PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1lbW9yeS11bnJlZiI+PC9hPjxoMz5nc3RfbWVtb3J5X3VucmVmICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9tZW1vcnlfdW5yZWYgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKm1lbTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0RlY3JlYXNlcyB0aGUgcmVmY291bnQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPi4gV2hlbiB0aGUgcmVmY291bnQgcmVhY2hlcyAwLCB0aGUgZnJlZQorZnVuY3Rpb24gb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPiB3aWxsIGJlIGNhbGxlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWVtb3J5LWdldC1zaXplcyI+PC9hPjxoMz5nc3RfbWVtb3J5X2dldF9zaXplcyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdzaXplPC9zcGFuPjwvYT4gICAgICAgICAgICAgICBnc3RfbWVtb3J5X2dldF9zaXplcyAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5IiB0aXRsZT0ic3RydWN0IEdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+ICptZW08L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiAqb2Zmc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gKm1heHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgdGhlIGN1cnJlbnQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYXhzaXplPC9jb2RlPjwvZW0+IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW08L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnBvaW50ZXIgdG8gb2Zmc2V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYXhzaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnBvaW50ZXIgdG8gbWF4c2l6ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjdXJyZW50IHNpemVzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW08L2NvZGU+PC9lbT4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZW1vcnktcmVzaXplIj48L2E+PGgzPmdzdF9tZW1vcnlfcmVzaXplICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9tZW1vcnlfcmVzaXplICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKm1lbTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NzaXplPC9zcGFuPjwvYT4gb2Zmc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1Jlc2l6ZSB0aGUgbWVtb3J5IHJlZ2lvbi4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPiBzaG91bGQgYmUgd3JpdGFibGUgYW5kIG9mZnNldCArIHNpemUgc2hvdWxkIGJlCitsZXNzIHRoYW4gdGhlIG1heHNpemUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXcgb2Zmc2V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IHNpemU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWVtb3J5LW1hcCI+PC9hPjxoMz5nc3RfbWVtb3J5X21hcCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfbWVtb3J5X21hcCAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5IiB0aXRsZT0ic3RydWN0IEdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+ICptZW08L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiAqc2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+ICptYXhzaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWFwRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdE1hcEZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWFwRmxhZ3M8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCBhIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+IHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGFjY29yZGluZyB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZ3M8L2NvZGU+PC9lbT4uCis8L3A+Cis8cD4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWF4c2l6ZTwvY29kZT48L2VtPiB3aWxsIGNvbnRhaW4gdGhlIHNpemUgb2YgdGhlIG1lbW9yeSBhbmQgdGhlIG1heGltdW0KK2FsbG9jYXRlZCBtZW1vcnkgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPiByZXNwZWN0aXZlbHkuIFRoZXkgY2FuIGJlIHNldCB0byBOVUxMLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5IiB0aXRsZT0ic3RydWN0IEdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9pbnRlciBmb3Igc2l6ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWF4c2l6ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb2ludGVyIGZvciBtYXhzaXplPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5tYXBwaW5nIGZsYWdzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBwb2ludGVyIHRvIHRoZSBtZW1vcnkgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWVtb3J5LXVubWFwIj48L2E+PGgzPmdzdF9tZW1vcnlfdW5tYXAgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X21lbW9yeV91bm1hcCAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWxlYXNlIHRoZSBtZW1vcnkgcG9pbnRlciBvYnRhaW5lZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS1tYXAiIHRpdGxlPSJnc3RfbWVtb3J5X21hcCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWVtb3J5X21hcCgpPC9jb2RlPjwvYT4gYW5kIHNldCB0aGUgc2l6ZSBvZgordGhlIG1lbW9yeSB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPi4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4gY2FuIGJlIHNldCB0byAtMSB3aGVuIHRoZSBzaXplIHNob3VsZCBub3QgYmUKK3VwZGF0ZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5kYXRhIHRvIHVubWFwPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm5ldyBzaXplIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW08L2NvZGU+PC9lbT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgd2hlbiB0aGUgbWVtb3J5IHdhcyByZWxlYXNlIHN1Y2Nlc3NmdWxseS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWVtb3J5LWNvcHkiPjwvYT48aDM+Z3N0X21lbW9yeV9jb3B5ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKiAgICAgICAgIGdzdF9tZW1vcnlfY29weSAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKm1lbTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NzaXplPC9zcGFuPjwvYT4gb2Zmc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JldHVybiBhIGNvcHkgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4gYnl0ZXMgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+IHN0YXJ0aW5nIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPi4gVGhpcyBjb3B5IGlzCitndWFyYW50ZWVkIHRvIGJlIHdyaXRhYmxlLiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPiBjYW4gYmUgc2V0IHRvIC0xIHRvIHJldHVybiBhIGNvcHkgYWxsIGJ5dGVzCitmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFuIG9mZnNldCB0byBjb3B5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnNpemUgdG8gY29weTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5IiB0aXRsZT0ic3RydWN0IEdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZW1vcnktc2hhcmUiPjwvYT48aDM+Z3N0X21lbW9yeV9zaGFyZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+ICogICAgICAgICBnc3RfbWVtb3J5X3NoYXJlICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5IiB0aXRsZT0ic3RydWN0IEdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+ICptZW08L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzc2l6ZTwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZXR1cm4gYSBzaGFyZWQgY29weSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPiBieXRlcyBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW08L2NvZGU+PC9lbT4gc3RhcnRpbmcgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+LiBObyBtZW1vcnkKK2NvcHkgaXMgcGVyZm9ybWVkIGFuZCB0aGUgbWVtb3J5IHJlZ2lvbiBpcyBzaW1wbHkgc2hhcmVkLiBUaGUgcmVzdWx0IGlzCitndWFyYW50ZWVkIHRvIGJlIG5vdC13cml0YWJsZS4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4gY2FuIGJlIHNldCB0byAtMSB0byByZXR1cm4gYSBzaGFyZSBhbGwgYnl0ZXMKK2Zyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YW4gb2Zmc2V0IHRvIHNoYXJlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnNpemUgdG8gc2hhcmU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIgdGl0bGU9InN0cnVjdCBHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWVtb3J5LWlzLXNwYW4iPjwvYT48aDM+Z3N0X21lbW9yeV9pc19zcGFuICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9tZW1vcnlfaXNfc3BhbiAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKm1lbTE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKm1lbTI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiAqb2Zmc2V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2sgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTE8L2NvZGU+PC9lbT4gYW5kIG1lbTIgc2hhcmUgdGhlIG1lbW9yeSB3aXRoIGEgY29tbW9uIHBhcmVudCBtZW1vcnkgb2JqZWN0CithbmQgdGhhdCB0aGUgbWVtb3J5IGlzIGNvbnRpZ3VvdXMuCis8L3A+Cis8cD4KK0lmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZSBtZW1vcnkgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTE8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW0yPC9jb2RlPjwvZW0+IGNhbiBiZSBtZXJnZWQKK2VmZmljaWVudGx5IGJ5IHBlcmZvcm1pbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LXNoYXJlIiB0aXRsZT0iZ3N0X21lbW9yeV9zaGFyZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWVtb3J5X3NoYXJlKCk8L2NvZGU+PC9hPiBvbiB0aGUgcGFyZW50IG9iamVjdCBmcm9tCit0aGUgcmV0dXJuZWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW0xPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtMjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5IiB0aXRsZT0ic3RydWN0IEdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gYSByZXN1bHQgb2Zmc2V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgbWVtb3J5IGlzIGNvbnRpZ3VvdXMgYW5kIG9mIGEgY29tbW9uIHBhcmVudC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQUxMT0NBVE9SLVNZU01FTTpDQVBTIj48L2E+PGgzPkdTVF9BTExPQ0FUT1JfU1lTTUVNPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9BTExPQ0FUT1JfU1lTTUVNICAgIlN5c3RlbU1lbW9yeSIKKzwvcHJlPgorPHA+CitUaGUgYWxsb2NhdG9yIG5hbWUgZm9yIHRoZSBkZWZhdWx0IHN5c3RlbSBtZW1vcnkgYWxsb2NhdG9yCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1hbGxvY2F0b3ItZmluZCI+PC9hPjxoMz5nc3RfYWxsb2NhdG9yX2ZpbmQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0QWxsb2NhdG9yIiB0aXRsZT0iR3N0QWxsb2NhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEFsbG9jYXRvcjwvc3Bhbj48L2E+ICogZ3N0X2FsbG9jYXRvcl9maW5kICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitGaW5kIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIGFsbG9jYXRvciB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+LiBXaGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+IGlzIE5VTEwsIHRoZQorZGVmYXVsdCBhbGxvY2F0b3Igd2lsbCBiZSByZXR1cm5lZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuYW1lIG9mIHRoZSBhbGxvY2F0b3I8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0QWxsb2NhdG9yIiB0aXRsZT0iR3N0QWxsb2NhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWxsb2NhdG9yPC9zcGFuPjwvYT4gb3IgTlVMTCB3aGVuIHRoZSBhbGxvY2F0b3Igd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPiB3YXMgbm90CityZWdpc3RlcmVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1hbGxvY2F0b3ItcmVnaXN0ZXIiPjwvYT48aDM+Z3N0X2FsbG9jYXRvcl9yZWdpc3RlciAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RBbGxvY2F0b3IiIHRpdGxlPSJHc3RBbGxvY2F0b3IiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QWxsb2NhdG9yPC9zcGFuPjwvYT4gKiBnc3RfYWxsb2NhdG9yX3JlZ2lzdGVyICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeUluZm8iIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5SW5mbyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeUluZm88L3NwYW4+PC9hPiAqaW5mbzwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlZ2lzdGVycyB0aGUgbWVtb3J5IGFsbG9jYXRvciB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+IGFuZCBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMKKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmZvPC9jb2RlPjwvZW0+LgorPC9wPgorPHA+CitBbGwgZnVuY3Rpb25zIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmZvPC9jb2RlPjwvZW0+IGFyZSBtYW5kYXRvcnkgZXhlcHQgdGhlIGNvcHkgYW5kIGlzX3NwYW4KK2Z1bmN0aW9ucywgd2hpY2ggd2lsbCBoYXZlIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aGVuIGxlZnQgTlVMTC4KKzwvcD4KKzxwPgorVGhlIHVzZXJfZGF0YSBmaWVsZCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5mbzwvY29kZT48L2VtPiB3aWxsIGJlIHBhc3NlZCB0byBhbGwgY2FsbHMgb2YgdGhlIGFsbG9jCitmdW5jdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuYW1lIG9mIHRoZSBhbGxvY2F0b3I8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZm88L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnlJbmZvIiB0aXRsZT0ic3RydWN0IEdzdE1lbW9yeUluZm8iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnlJbmZvPC9zcGFuPjwvYT48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdEFsbG9jYXRvciIgdGl0bGU9IkdzdEFsbG9jYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRvcjwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1hbGxvY2F0b3Itc2V0LWRlZmF1bHQiPjwvYT48aDM+Z3N0X2FsbG9jYXRvcl9zZXRfZGVmYXVsdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYWxsb2NhdG9yX3NldF9kZWZhdWx0ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0QWxsb2NhdG9yIiB0aXRsZT0iR3N0QWxsb2NhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWxsb2NhdG9yPC9zcGFuPjwvYT4gKmFsbG9jYXRvcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldCB0aGUgZGVmYXVsdCBhbGxvY2F0b3IuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFsbG9jYXRvcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0QWxsb2NhdG9yIiB0aXRsZT0iR3N0QWxsb2NhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWxsb2NhdG9yPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RNZW1vcnkuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNjZlMWMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwKQEAgLTAsMCArMSwzMjQxIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0TWVzc2FnZTwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwiIHRpdGxlPSJHc3RNZXRhIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdE1lc3NhZ2Uuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItR3N0TWVzc2FnZS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0TWVzc2FnZSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLnRvcF9vZl9wYWdlIj48L2E+R3N0TWVzc2FnZTwvc3Bhbj48L2gyPgorPHA+R3N0TWVzc2FnZSDigJQgTGlnaHR3ZWlnaHQgb2JqZWN0cyB0byBzaWduYWwgdGhlIGFwcGxpY2F0aW9uIG9mCisgICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lIGV2ZW50czwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLnN5bm9wc2lzIj48L2E+PGgyPlN5bm9wc2lzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7CisKK3N0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPjsKK2VudW0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZVR5cGUiIHRpdGxlPSJlbnVtIEdzdE1lc3NhZ2VUeXBlIj5Hc3RNZXNzYWdlVHlwZTwvYT47CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVNSQzpDQVBTIiB0aXRsZT0iR1NUX01FU1NBR0VfU1JDKCkiPkdTVF9NRVNTQUdFX1NSQzwvYT4gICAgICAgICAgICAgICAgICAgICAobWVzc2FnZSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtU1JDLU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9NRVNTQUdFX1NSQ19OQU1FKCkiPkdTVF9NRVNTQUdFX1NSQ19OQU1FPC9hPiAgICAgICAgICAgICAgICAobWVzc2FnZSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtVElNRVNUQU1QOkNBUFMiIHRpdGxlPSJHU1RfTUVTU0FHRV9USU1FU1RBTVAoKSI+R1NUX01FU1NBR0VfVElNRVNUQU1QPC9hPiAgICAgICAgICAgICAgIChtZXNzYWdlKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1TRVFOVU06Q0FQUyIgdGl0bGU9IkdTVF9NRVNTQUdFX1NFUU5VTSgpIj5HU1RfTUVTU0FHRV9TRVFOVU08L2E+ICAgICAgICAgICAgICAgICAgKG1lc3NhZ2UpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVRZUEU6Q0FQUyIgdGl0bGU9IkdTVF9NRVNTQUdFX1RZUEUoKSI+R1NUX01FU1NBR0VfVFlQRTwvYT4gICAgICAgICAgICAgICAgICAgIChtZXNzYWdlKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1UWVBFLU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9NRVNTQUdFX1RZUEVfTkFNRSgpIj5HU1RfTUVTU0FHRV9UWVBFX05BTUU8L2E+ICAgICAgICAgICAgICAgKG1lc3NhZ2UpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVRSQUNFLU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9NRVNTQUdFX1RSQUNFX05BTUUiPkdTVF9NRVNTQUdFX1RSQUNFX05BTUU8L2E+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HUXVhcms8L3NwYW4+PC9hPiAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtdHlwZS10by1xdWFyayIgdGl0bGU9ImdzdF9tZXNzYWdlX3R5cGVfdG9fcXVhcmsgKCkiPmdzdF9tZXNzYWdlX3R5cGVfdG9fcXVhcms8L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2VUeXBlIiB0aXRsZT0iZW51bSBHc3RNZXNzYWdlVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2VUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPik7Citjb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXR5cGUtZ2V0LW5hbWUiIHRpdGxlPSJnc3RfbWVzc2FnZV90eXBlX2dldF9uYW1lICgpIj5nc3RfbWVzc2FnZV90eXBlX2dldF9uYW1lPC9hPiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlVHlwZSIgdGl0bGU9ImVudW0gR3N0TWVzc2FnZVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlVHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1yZWYiIHRpdGxlPSJnc3RfbWVzc2FnZV9yZWYgKCkiPmdzdF9tZXNzYWdlX3JlZjwvYT4gICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbXNnPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtdW5yZWYiIHRpdGxlPSJnc3RfbWVzc2FnZV91bnJlZiAoKSI+Z3N0X21lc3NhZ2VfdW5yZWY8L2E+ICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptc2c8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1jb3B5IiB0aXRsZT0iZ3N0X21lc3NhZ2VfY29weSAoKSI+Z3N0X21lc3NhZ2VfY29weTwvYT4gICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptc2c8L2NvZGU+PC9lbT4pOworY29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICogPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtZ2V0LXN0cnVjdHVyZSIgdGl0bGU9ImdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUgKCkiPmdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmU8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+KTsKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbWFrZS13cml0YWJsZSIgdGl0bGU9ImdzdF9tZXNzYWdlX21ha2Vfd3JpdGFibGUoKSI+Z3N0X21lc3NhZ2VfbWFrZV93cml0YWJsZTwvYT4gICAgICAgICAgIChtc2cpCis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDMyPC9zcGFuPjwvYT4gICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtZ2V0LXNlcW51bSIgdGl0bGU9ImdzdF9tZXNzYWdlX2dldF9zZXFudW0gKCkiPmdzdF9tZXNzYWdlX2dldF9zZXFudW08L2E+ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXNldC1zZXFudW0iIHRpdGxlPSJnc3RfbWVzc2FnZV9zZXRfc2VxbnVtICgpIj5nc3RfbWVzc2FnZV9zZXRfc2VxbnVtPC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gc2VxbnVtPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtaGFzLW5hbWUiIHRpdGxlPSJnc3RfbWVzc2FnZV9oYXNfbmFtZSAoKSI+Z3N0X21lc3NhZ2VfaGFzX25hbWU8L2E+ICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1pcy13cml0YWJsZSIgdGl0bGU9ImdzdF9tZXNzYWdlX2lzX3dyaXRhYmxlKCkiPmdzdF9tZXNzYWdlX2lzX3dyaXRhYmxlPC9hPiAgICAgICAgICAgICAobXNnKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1yZXBsYWNlIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcmVwbGFjZSgpIj5nc3RfbWVzc2FnZV9yZXBsYWNlPC9hPiAgICAgICAgICAgICAgICAgKG9sZF9tZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X21lc3NhZ2UpCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1lb3MiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfZW9zICgpIj5nc3RfbWVzc2FnZV9uZXdfZW9zPC9hPiAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWVycm9yIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X2Vycm9yICgpIj5nc3RfbWVzc2FnZV9uZXdfZXJyb3I8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gKmVycm9yPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmRlYnVnPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtZXJyb3IiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfZXJyb3I8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gKipnZXJyb3I8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKmRlYnVnPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXdhcm5pbmciIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfd2FybmluZyAoKSI+Z3N0X21lc3NhZ2VfbmV3X3dhcm5pbmc8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUVycm9yLVJlcG9ydGluZy5odG1sI0dFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdFcnJvcjwvc3Bhbj48L2E+ICplcnJvcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpkZWJ1ZzwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXdhcm5pbmciIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV93YXJuaW5nICgpIj5nc3RfbWVzc2FnZV9wYXJzZV93YXJuaW5nPC9hPiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1FcnJvci1SZXBvcnRpbmcuaHRtbCNHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRXJyb3I8L3NwYW4+PC9hPiAqKmdlcnJvcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqZGVidWc8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctaW5mbyIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19pbmZvICgpIj5nc3RfbWVzc2FnZV9uZXdfaW5mbzwvYT4gICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gKmVycm9yPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmRlYnVnPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtaW5mbyIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX2luZm8gKCkiPmdzdF9tZXNzYWdlX3BhcnNlX2luZm88L2E+ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUVycm9yLVJlcG9ydGluZy5odG1sI0dFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdFcnJvcjwvc3Bhbj48L2E+ICoqZ2Vycm9yPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKipkZWJ1ZzwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy10YWciIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfdGFnICgpIj5nc3RfbWVzc2FnZV9uZXdfdGFnPC9hPiAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICp0YWdfbGlzdDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXRhZyIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX3RhZyAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfdGFnPC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICoqdGFnX2xpc3Q8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctYnVmZmVyaW5nIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X2J1ZmZlcmluZyAoKSI+Z3N0X21lc3NhZ2VfbmV3X2J1ZmZlcmluZzwvYT4gICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBwZXJjZW50PC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtYnVmZmVyaW5nIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nICgpIj5nc3RfbWVzc2FnZV9wYXJzZV9idWZmZXJpbmc8L2E+ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gKnBlcmNlbnQ8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1zZXQtYnVmZmVyaW5nLXN0YXRzIiB0aXRsZT0iZ3N0X21lc3NhZ2Vfc2V0X2J1ZmZlcmluZ19zdGF0cyAoKSI+Z3N0X21lc3NhZ2Vfc2V0X2J1ZmZlcmluZ19zdGF0czwvYT4gICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RCdWZmZXJpbmdNb2RlIiB0aXRsZT0iZW51bSBHc3RCdWZmZXJpbmdNb2RlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyaW5nTW9kZTwvc3Bhbj48L2E+IG1vZGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gYXZnX2luPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGF2Z19vdXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IGJ1ZmZlcmluZ19sZWZ0PC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtYnVmZmVyaW5nLXN0YXRzIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nX3N0YXRzICgpIj5nc3RfbWVzc2FnZV9wYXJzZV9idWZmZXJpbmdfc3RhdHM8L2E+ICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdEJ1ZmZlcmluZ01vZGUiIHRpdGxlPSJlbnVtIEdzdEJ1ZmZlcmluZ01vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJpbmdNb2RlPC9zcGFuPjwvYT4gKm1vZGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gKmF2Z19pbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAqYXZnX291dDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKmJ1ZmZlcmluZ19sZWZ0PC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXN0YXRlLWNoYW5nZWQiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfc3RhdGVfY2hhbmdlZCAoKSI+Z3N0X21lc3NhZ2VfbmV3X3N0YXRlX2NoYW5nZWQ8L2E+ICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlPC9zcGFuPjwvYT4gb2xkc3RhdGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZSIgdGl0bGU9ImVudW0gR3N0U3RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZTwvc3Bhbj48L2E+IG5ld3N0YXRlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGU8L3NwYW4+PC9hPiBwZW5kaW5nPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2Utc3RhdGUtY2hhbmdlZCIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQ8L2E+ICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlPC9zcGFuPjwvYT4gKm9sZHN0YXRlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGU8L3NwYW4+PC9hPiAqbmV3c3RhdGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZSIgdGl0bGU9ImVudW0gR3N0U3RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZTwvc3Bhbj48L2E+ICpwZW5kaW5nPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXN0YXRlLWRpcnR5IiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X3N0YXRlX2RpcnR5ICgpIj5nc3RfbWVzc2FnZV9uZXdfc3RhdGVfZGlydHk8L2E+ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXN0ZXAtZG9uZSIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19zdGVwX2RvbmUgKCkiPmdzdF9tZXNzYWdlX25ld19zdGVwX2RvbmU8L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBhbW91bnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gcmF0ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGZsdXNoPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gaW50ZXJtZWRpYXRlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IGR1cmF0aW9uPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gZW9zPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2Utc3RlcC1kb25lIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2Vfc3RlcF9kb25lICgpIj5nc3RfbWVzc2FnZV9wYXJzZV9zdGVwX2RvbmU8L2E+ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+ICpmb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gKmFtb3VudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiAqcmF0ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICpmbHVzaDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICppbnRlcm1lZGlhdGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gKmR1cmF0aW9uPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gKmVvczwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1jbG9jay1wcm92aWRlIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X2Nsb2NrX3Byb3ZpZGUgKCkiPmdzdF9tZXNzYWdlX25ld19jbG9ja19wcm92aWRlPC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKmNsb2NrPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gcmVhZHk8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1jbG9jay1wcm92aWRlIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfY2xvY2tfcHJvdmlkZSAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfY2xvY2tfcHJvdmlkZTwvYT4gICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICoqY2xvY2s8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAqcmVhZHk8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctY2xvY2stbG9zdCIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19jbG9ja19sb3N0ICgpIj5nc3RfbWVzc2FnZV9uZXdfY2xvY2tfbG9zdDwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWNsb2NrLWxvc3QiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9jbG9ja19sb3N0ICgpIj5nc3RfbWVzc2FnZV9wYXJzZV9jbG9ja19sb3N0PC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKipjbG9jazwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1uZXctY2xvY2siIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfbmV3X2Nsb2NrICgpIj5nc3RfbWVzc2FnZV9uZXdfbmV3X2Nsb2NrPC9hPiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLW5ldy1jbG9jayIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX25ld19jbG9jayAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfbmV3X2Nsb2NrPC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICoqY2xvY2s8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctYXBwbGljYXRpb24iIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRpb24gKCkiPmdzdF9tZXNzYWdlX25ld19hcHBsaWNhdGlvbjwvYT4gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1lbGVtZW50IiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQgKCkiPmdzdF9tZXNzYWdlX25ld19lbGVtZW50PC9hPiAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1jdXN0b20iIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfY3VzdG9tICgpIj5nc3RfbWVzc2FnZV9uZXdfY3VzdG9tPC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlVHlwZSIgdGl0bGU9ImVudW0gR3N0TWVzc2FnZVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlVHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXNlZ21lbnQtc3RhcnQiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9zdGFydCAoKSI+Z3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfc3RhcnQ8L2E+ICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBwb3NpdGlvbjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXNlZ21lbnQtc3RhcnQiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9zZWdtZW50X3N0YXJ0ICgpIj5nc3RfbWVzc2FnZV9wYXJzZV9zZWdtZW50X3N0YXJ0PC9hPiAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+ICpmb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpwb3NpdGlvbjwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1zZWdtZW50LWRvbmUiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lICgpIj5nc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lPC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHBvc2l0aW9uPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2Utc2VnbWVudC1kb25lIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2Vfc2VnbWVudF9kb25lICgpIj5nc3RfbWVzc2FnZV9wYXJzZV9zZWdtZW50X2RvbmU8L2E+ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+ICpmb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpwb3NpdGlvbjwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1kdXJhdGlvbiIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19kdXJhdGlvbiAoKSI+Z3N0X21lc3NhZ2VfbmV3X2R1cmF0aW9uPC9hPiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBkdXJhdGlvbjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWR1cmF0aW9uIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfZHVyYXRpb24gKCkiPmdzdF9tZXNzYWdlX3BhcnNlX2R1cmF0aW9uPC9hPiAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gKmZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKmR1cmF0aW9uPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWxhdGVuY3kiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfbGF0ZW5jeSAoKSI+Z3N0X21lc3NhZ2VfbmV3X2xhdGVuY3k8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1hc3luYy1zdGFydCIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19hc3luY19zdGFydCAoKSI+Z3N0X21lc3NhZ2VfbmV3X2FzeW5jX3N0YXJ0PC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1hc3luYy1kb25lIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X2FzeW5jX2RvbmUgKCkiPmdzdF9tZXNzYWdlX25ld19hc3luY19kb25lPC9hPiAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiByZXNldF90aW1lPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtYXN5bmMtZG9uZSIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX2FzeW5jX2RvbmUgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX2FzeW5jX2RvbmU8L2E+ICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICpyZXNldF90aW1lPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXN0ZXAtc3RhcnQiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfc3RlcF9zdGFydCAoKSI+Z3N0X21lc3NhZ2VfbmV3X3N0ZXBfc3RhcnQ8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGFjdGl2ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IGFtb3VudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiByYXRlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gZmx1c2g8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBpbnRlcm1lZGlhdGU8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1zdGVwLXN0YXJ0IiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2Vfc3RlcF9zdGFydCAoKSI+Z3N0X21lc3NhZ2VfcGFyc2Vfc3RlcF9zdGFydDwvYT4gICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gKmFjdGl2ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gKmZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqYW1vdW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICpyYXRlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gKmZsdXNoPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gKmludGVybWVkaWF0ZTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1xb3MiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfcW9zICgpIj5nc3RfbWVzc2FnZV9uZXdfcW9zPC9hPiAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gbGl2ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBydW5uaW5nX3RpbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gc3RyZWFtX3RpbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gdGltZXN0YW1wPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IGR1cmF0aW9uPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2Utc2V0LXFvcy12YWx1ZXMiIHRpdGxlPSJnc3RfbWVzc2FnZV9zZXRfcW9zX3ZhbHVlcyAoKSI+Z3N0X21lc3NhZ2Vfc2V0X3Fvc192YWx1ZXM8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBqaXR0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gcHJvcG9ydGlvbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBxdWFsaXR5PC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2Utc2V0LXFvcy1zdGF0cyIgdGl0bGU9ImdzdF9tZXNzYWdlX3NldF9xb3Nfc3RhdHMgKCkiPmdzdF9tZXNzYWdlX3NldF9xb3Nfc3RhdHM8L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHByb2Nlc3NlZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBkcm9wcGVkPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtcW9zIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfcW9zICgpIj5nc3RfbWVzc2FnZV9wYXJzZV9xb3M8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAqbGl2ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqcnVubmluZ190aW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICpzdHJlYW1fdGltZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqdGltZXN0YW1wPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICpkdXJhdGlvbjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXFvcy12YWx1ZXMiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9xb3NfdmFsdWVzICgpIj5nc3RfbWVzc2FnZV9wYXJzZV9xb3NfdmFsdWVzPC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpqaXR0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gKnByb3BvcnRpb248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gKnF1YWxpdHk8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1xb3Mtc3RhdHMiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9xb3Nfc3RhdHMgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX3Fvc19zdGF0czwvYT4gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gKmZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqcHJvY2Vzc2VkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICpkcm9wcGVkPC9jb2RlPjwvZW0+KTsKK2VudW0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0U3RydWN0dXJlQ2hhbmdlVHlwZSIgdGl0bGU9ImVudW0gR3N0U3RydWN0dXJlQ2hhbmdlVHlwZSI+R3N0U3RydWN0dXJlQ2hhbmdlVHlwZTwvYT47Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1zdHJ1Y3R1cmUtY2hhbmdlIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X3N0cnVjdHVyZV9jaGFuZ2UgKCkiPmdzdF9tZXNzYWdlX25ld19zdHJ1Y3R1cmVfY2hhbmdlPC9hPiAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0U3RydWN0dXJlQ2hhbmdlVHlwZSIgdGl0bGU9ImVudW0gR3N0U3RydWN0dXJlQ2hhbmdlVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZUNoYW5nZVR5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICpvd25lcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGJ1c3k8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1zdHJ1Y3R1cmUtY2hhbmdlIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2Vfc3RydWN0dXJlX2NoYW5nZSAoKSI+Z3N0X21lc3NhZ2VfcGFyc2Vfc3RydWN0dXJlX2NoYW5nZTwvYT4gICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdFN0cnVjdHVyZUNoYW5nZVR5cGUiIHRpdGxlPSJlbnVtIEdzdFN0cnVjdHVyZUNoYW5nZVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmVDaGFuZ2VUeXBlPC9zcGFuPjwvYT4gKnR5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKipvd25lcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICpidXN5PC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXJlcXVlc3Qtc3RhdGUiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfcmVxdWVzdF9zdGF0ZSAoKSI+Z3N0X21lc3NhZ2VfbmV3X3JlcXVlc3Rfc3RhdGU8L2E+ICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlPC9zcGFuPjwvYT4gc3RhdGU8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1yZXF1ZXN0LXN0YXRlIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfcmVxdWVzdF9zdGF0ZSAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfcmVxdWVzdF9zdGF0ZTwvYT4gICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGU8L3NwYW4+PC9hPiAqc3RhdGU8L2NvZGU+PC9lbT4pOworZW51bSAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RTdHJlYW1TdGF0dXNUeXBlIiB0aXRsZT0iZW51bSBHc3RTdHJlYW1TdGF0dXNUeXBlIj5Hc3RTdHJlYW1TdGF0dXNUeXBlPC9hPjsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXN0cmVhbS1zdGF0dXMiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfc3RyZWFtX3N0YXR1cyAoKSI+Z3N0X21lc3NhZ2VfbmV3X3N0cmVhbV9zdGF0dXM8L2E+ICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RTdHJlYW1TdGF0dXNUeXBlIiB0aXRsZT0iZW51bSBHc3RTdHJlYW1TdGF0dXNUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtU3RhdHVzVHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKm93bmVyPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2Utc3RyZWFtLXN0YXR1cyIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9zdGF0dXMgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9zdGF0dXM8L2E+ICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RTdHJlYW1TdGF0dXNUeXBlIiB0aXRsZT0iZW51bSBHc3RTdHJlYW1TdGF0dXNUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtU3RhdHVzVHlwZTwvc3Bhbj48L2E+ICp0eXBlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICoqb3duZXI8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1zZXQtc3RyZWFtLXN0YXR1cy1vYmplY3QiIHRpdGxlPSJnc3RfbWVzc2FnZV9zZXRfc3RyZWFtX3N0YXR1c19vYmplY3QgKCkiPmdzdF9tZXNzYWdlX3NldF9zdHJlYW1fc3RhdHVzX29iamVjdDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4pOworY29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HVmFsdWU8L3NwYW4+PC9hPiAqICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtZ2V0LXN0cmVhbS1zdGF0dXMtb2JqZWN0IiB0aXRsZT0iZ3N0X21lc3NhZ2VfZ2V0X3N0cmVhbV9zdGF0dXNfb2JqZWN0ICgpIj5nc3RfbWVzc2FnZV9nZXRfc3RyZWFtX3N0YXR1c19vYmplY3Q8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+KTsKK2VudW0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0UHJvZ3Jlc3NUeXBlIiB0aXRsZT0iZW51bSBHc3RQcm9ncmVzc1R5cGUiPkdzdFByb2dyZXNzVHlwZTwvYT47Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1wcm9ncmVzcyIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19wcm9ncmVzcyAoKSI+Z3N0X21lc3NhZ2VfbmV3X3Byb2dyZXNzPC9hPiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RQcm9ncmVzc1R5cGUiIHRpdGxlPSJlbnVtIEdzdFByb2dyZXNzVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFByb2dyZXNzVHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqY29kZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0ZXh0PC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtcHJvZ3Jlc3MiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9wcm9ncmVzcyAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfcHJvZ3Jlc3M8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdFByb2dyZXNzVHlwZSIgdGl0bGU9ImVudW0gR3N0UHJvZ3Jlc3NUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UHJvZ3Jlc3NUeXBlPC9zcGFuPjwvYT4gKnR5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKmNvZGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKnRleHQ8L2NvZGU+PC9lbT4pOworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPgorTWVzc2FnZXMgYXJlIGltcGxlbWVudGVkIGFzIGEgc3ViY2xhc3Mgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+IHdpdGggYSBnZW5lcmljCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiBhcyB0aGUgY29udGVudC4gVGhpcyBhbGxvd3MgZm9yIHdyaXRpbmcgY3VzdG9tIG1lc3NhZ2VzIHdpdGhvdXQKK3JlcXVpcmluZyBhbiBBUEkgY2hhbmdlIHdoaWxlIGFsbG93aW5nIGEgd2lkZSByYW5nZSBvZiBkaWZmZXJlbnQgdHlwZXMKK29mIG1lc3NhZ2VzLgorPC9wPgorPHA+CitNZXNzYWdlcyBhcmUgcG9zdGVkIGJ5IG9iamVjdHMgaW4gdGhlIHBpcGVsaW5lIGFuZCBhcmUgcGFzc2VkIHRvIHRoZQorYXBwbGljYXRpb24gdXNpbmcgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+LgorPC9wPgorPHA+CitUaGUgYmFzaWMgdXNlIHBhdHRlcm4gb2YgcG9zdGluZyBhIG1lc3NhZ2Ugb24gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiBpcyBhcyBmb2xsb3dzOgorPC9wPgorPHA+Cis8L3A+Cis8ZGl2IGNsYXNzPSJleGFtcGxlIj4KKzxhIG5hbWU9ImlkNjIwODAxIj48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5FeGFtcGxlwqAxMS7CoFBvc3RpbmcgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT48L2I+PC9wPgorPGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgorICAgZ3N0X2J1c19wb3N0IChidXMsIGdzdF9tZXNzYWdlX25ld19lb3MoKSk7CisgIDwvcHJlPjwvZGl2PgorPC9kaXY+Cis8cD48YnIgY2xhc3M9ImV4YW1wbGUtYnJlYWsiPgorPC9wPgorPHA+CitBIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHVzdWFsbHkgcG9zdHMgbWVzc2FnZXMgb24gdGhlIGJ1cyBwcm92aWRlZCBieSB0aGUgcGFyZW50Citjb250YWluZXIgdXNpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1wb3N0LW1lc3NhZ2UiIHRpdGxlPSJnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxwPgorTGFzdCByZXZpZXdlZCBvbiAyMDA1LTExLTA5ICgwLjkuNCkKKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdE1lc3NhZ2UiPjwvYT48aDM+c3RydWN0IEdzdE1lc3NhZ2U8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RNZXNzYWdlIHsKKyAgR3N0TWluaU9iamVjdCBtaW5pX29iamVjdDsKKworICBHc3RNZXNzYWdlVHlwZSB0eXBlOworICBndWludDY0IHRpbWVzdGFtcDsKKyAgR3N0T2JqZWN0ICpzcmM7CisgIGd1aW50MzIgc2VxbnVtOworfTsKKzwvcHJlPgorPHA+CitBIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWVzc2FnZS5taW5pLW9iamVjdCI+PC9hPm1pbmlfb2JqZWN0PC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGFyZW50IHN0cnVjdHVyZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlVHlwZSIgdGl0bGU9ImVudW0gR3N0TWVzc2FnZVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlVHlwZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RNZXNzYWdlLnR5cGUiPjwvYT50eXBlPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZVR5cGUiIHRpdGxlPSJlbnVtIEdzdE1lc3NhZ2VUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZVR5cGU8L3NwYW4+PC9hPiBvZiB0aGUgbWVzc2FnZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWVzc2FnZS50aW1lc3RhbXAiPjwvYT50aW1lc3RhbXA8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB0aW1lc3RhbXAgb2YgdGhlIG1lc3NhZ2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RNZXNzYWdlLnNyYyI+PC9hPnNyYzwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNyYyBvZiB0aGUgbWVzc2FnZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWVzc2FnZS5zZXFudW0iPjwvYT5zZXFudW08L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIG1lc3NhZ2U8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RNZXNzYWdlVHlwZSI+PC9hPjxoMz5lbnVtIEdzdE1lc3NhZ2VUeXBlPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGVudW0geworICBHU1RfTUVTU0FHRV9VTktOT1dOICAgICAgICAgICA9IDAsCisgIEdTVF9NRVNTQUdFX0VPUyAgICAgICAgICAgICAgID0gKDEgJmx0OyZsdDsgMCksCisgIEdTVF9NRVNTQUdFX0VSUk9SICAgICAgICAgICAgID0gKDEgJmx0OyZsdDsgMSksCisgIEdTVF9NRVNTQUdFX1dBUk5JTkcgICAgICAgICAgID0gKDEgJmx0OyZsdDsgMiksCisgIEdTVF9NRVNTQUdFX0lORk8gICAgICAgICAgICAgID0gKDEgJmx0OyZsdDsgMyksCisgIEdTVF9NRVNTQUdFX1RBRyAgICAgICAgICAgICAgID0gKDEgJmx0OyZsdDsgNCksCisgIEdTVF9NRVNTQUdFX0JVRkZFUklORyAgICAgICAgID0gKDEgJmx0OyZsdDsgNSksCisgIEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQgICAgID0gKDEgJmx0OyZsdDsgNiksCisgIEdTVF9NRVNTQUdFX1NUQVRFX0RJUlRZICAgICAgID0gKDEgJmx0OyZsdDsgNyksCisgIEdTVF9NRVNTQUdFX1NURVBfRE9ORSAgICAgICAgID0gKDEgJmx0OyZsdDsgOCksCisgIEdTVF9NRVNTQUdFX0NMT0NLX1BST1ZJREUgICAgID0gKDEgJmx0OyZsdDsgOSksCisgIEdTVF9NRVNTQUdFX0NMT0NLX0xPU1QgICAgICAgID0gKDEgJmx0OyZsdDsgMTApLAorICBHU1RfTUVTU0FHRV9ORVdfQ0xPQ0sgICAgICAgICA9ICgxICZsdDsmbHQ7IDExKSwKKyAgR1NUX01FU1NBR0VfU1RSVUNUVVJFX0NIQU5HRSAgPSAoMSAmbHQ7Jmx0OyAxMiksCisgIEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFUVVMgICAgID0gKDEgJmx0OyZsdDsgMTMpLAorICBHU1RfTUVTU0FHRV9BUFBMSUNBVElPTiAgICAgICA9ICgxICZsdDsmbHQ7IDE0KSwKKyAgR1NUX01FU1NBR0VfRUxFTUVOVCAgICAgICAgICAgPSAoMSAmbHQ7Jmx0OyAxNSksCisgIEdTVF9NRVNTQUdFX1NFR01FTlRfU1RBUlQgICAgID0gKDEgJmx0OyZsdDsgMTYpLAorICBHU1RfTUVTU0FHRV9TRUdNRU5UX0RPTkUgICAgICA9ICgxICZsdDsmbHQ7IDE3KSwKKyAgR1NUX01FU1NBR0VfRFVSQVRJT04gICAgICAgICAgPSAoMSAmbHQ7Jmx0OyAxOCksCisgIEdTVF9NRVNTQUdFX0xBVEVOQ1kgICAgICAgICAgID0gKDEgJmx0OyZsdDsgMTkpLAorICBHU1RfTUVTU0FHRV9BU1lOQ19TVEFSVCAgICAgICA9ICgxICZsdDsmbHQ7IDIwKSwKKyAgR1NUX01FU1NBR0VfQVNZTkNfRE9ORSAgICAgICAgPSAoMSAmbHQ7Jmx0OyAyMSksCisgIEdTVF9NRVNTQUdFX1JFUVVFU1RfU1RBVEUgICAgID0gKDEgJmx0OyZsdDsgMjIpLAorICBHU1RfTUVTU0FHRV9TVEVQX1NUQVJUICAgICAgICA9ICgxICZsdDsmbHQ7IDIzKSwKKyAgR1NUX01FU1NBR0VfUU9TICAgICAgICAgICAgICAgPSAoMSAmbHQ7Jmx0OyAyNCksCisgIEdTVF9NRVNTQUdFX1BST0dSRVNTICAgICAgICAgID0gKDEgJmx0OyZsdDsgMjUpLAorICBHU1RfTUVTU0FHRV9BTlkgICAgICAgICAgICAgICA9IH4wCit9IEdzdE1lc3NhZ2VUeXBlOworPC9wcmU+Cis8cD4KK1RoZSBkaWZmZXJlbnQgbWVzc2FnZSB0eXBlcyB0aGF0IGFyZSBhdmFpbGFibGUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1NRVNTQUdFLVVOS05PV046Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX01FU1NBR0VfVU5LTk9XTjwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YW4gdW5kZWZpbmVkIG1lc3NhZ2UKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1NRVNTQUdFLUVPUzpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTUVTU0FHRV9FT1M8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmVuZC1vZi1zdHJlYW0gcmVhY2hlZCBpbiBhIHBpcGVsaW5lLiBUaGUgYXBwbGljYXRpb24gd2lsbAorb25seSByZWNlaXZlIHRoaXMgbWVzc2FnZSBpbiB0aGUgUExBWUlORyBzdGF0ZSBhbmQgZXZlcnkgdGltZSBpdCBzZXRzIGEKK3BpcGVsaW5lIHRvIFBMQVlJTkcgdGhhdCBpcyBpbiB0aGUgRU9TIHN0YXRlLiBUaGUgYXBwbGljYXRpb24gY2FuIHBlcmZvcm0gYQorZmx1c2hpbmcgc2VlayBpbiB0aGUgcGlwZWxpbmUsIHdoaWNoIHdpbGwgdW5kbyB0aGUgRU9TIHN0YXRlIGFnYWluLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtRVJST1I6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX01FU1NBR0VfRVJST1I8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmFuIGVycm9yIG9jY3VyZWQuIFdoZW4gdGhlIGFwcGxpY2F0aW9uIHJlY2VpdmVzIGFuIGVycm9yCittZXNzYWdlIGl0IHNob3VsZCBzdG9wIHBsYXliYWNrIG9mIHRoZSBwaXBlbGluZSBhbmQgbm90IGFzc3VtZSB0aGF0IG1vcmUKK2RhdGEgd2lsbCBiZSBwbGF5ZWQuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtTUVTU0FHRS1XQVJOSU5HOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9NRVNTQUdFX1dBUk5JTkc8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgd2FybmluZyBvY2N1cmVkLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtSU5GTzpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTUVTU0FHRV9JTkZPPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hbiBpbmZvIG1lc3NhZ2Ugb2NjdXJlZAorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtVEFHOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9NRVNTQUdFX1RBRzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSB0YWcgd2FzIGZvdW5kLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtQlVGRkVSSU5HOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9NRVNTQUdFX0JVRkZFUklORzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBpcGVsaW5lIGlzIGJ1ZmZlcmluZy4gV2hlbiB0aGUgYXBwbGljYXRpb24KK3JlY2VpdmVzIGEgYnVmZmVyaW5nIG1lc3NhZ2UgaW4gdGhlIFBMQVlJTkcgc3RhdGUgZm9yIGEgbm9uLWxpdmUgcGlwZWxpbmUgaXQKK211c3QgUEFVU0UgdGhlIHBpcGVsaW5lIHVudGlsIHRoZSBidWZmZXJpbmcgY29tcGxldGVzLCB3aGVuIHRoZSBwZXJjZW50YWdlCitmaWVsZCBpbiB0aGUgbWVzc2FnZSBpcyAxMDAlLiBGb3IgbGl2ZSBwaXBlbGluZXMsIG5vIGFjdGlvbiBtdXN0IGJlCitwZXJmb3JtZWQgYW5kIHRoZSBidWZmZXJpbmcgcGVyY2VudGFnZSBjYW4gYmUgdXNlZCB0byBpbmZvcm0gdGhlIHVzZXIgYWJvdXQKK3RoZSBwcm9ncmVzcy4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1NRVNTQUdFLVNUQVRFLUNIQU5HRUQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBzdGF0ZSBjaGFuZ2UgaGFwcGVuZWQKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1NRVNTQUdFLVNUQVRFLURJUlRZOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9NRVNTQUdFX1NUQVRFX0RJUlRZPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hbiBlbGVtZW50IGNoYW5nZWQgc3RhdGUgaW4gYSBzdHJlYW1pbmcgdGhyZWFkLgorVGhpcyBtZXNzYWdlIGlzIGRlcHJlY2F0ZWQuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtTUVTU0FHRS1TVEVQLURPTkU6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX01FU1NBR0VfU1RFUF9ET05FPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHN0ZXBwaW5nIG9wZXJhdGlvbiBmaW5pc2hlZC4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1NRVNTQUdFLUNMT0NLLVBST1ZJREU6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX01FU1NBR0VfQ0xPQ0tfUFJPVklERTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YW4gZWxlbWVudCBub3RpZmllcyBpdHMgY2FwYWJpbGl0eSBvZiBwcm92aWRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIGNsb2NrLiBUaGlzIG1lc3NhZ2UgaXMgdXNlZCBpbnRlcm5hbGx5IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldmVyIGZvcndhcmRlZCB0byB0aGUgYXBwbGljYXRpb24uCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtTUVTU0FHRS1DTE9DSy1MT1NUOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9NRVNTQUdFX0NMT0NLX0xPU1Q8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBjdXJyZW50IGNsb2NrIGFzIHNlbGVjdGVkIGJ5IHRoZSBwaXBlbGluZSBiZWNhbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnVzYWJsZS4gVGhlIHBpcGVsaW5lIHdpbGwgc2VsZWN0IGEgbmV3IGNsb2NrIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG5leHQgUExBWUlORyBzdGF0ZSBjaGFuZ2UuIFRoZSBhcHBsaWNhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBzZXQgdGhlIHBpcGVsaW5lIHRvIFBBVVNFRCBhbmQgYmFjayB0bworICAgICAgICAgICAgICAgICAgICAgICAgIFBMQVlJTkcgd2hlbiB0aGlzIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtTUVTU0FHRS1ORVctQ0xPQ0s6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX01FU1NBR0VfTkVXX0NMT0NLPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyBjbG9jayB3YXMgc2VsZWN0ZWQgaW4gdGhlIHBpcGVsaW5lLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtU1RSVUNUVVJFLUNIQU5HRTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTUVTU0FHRV9TVFJVQ1RVUkVfQ0hBTkdFPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc3RydWN0dXJlIG9mIHRoZSBwaXBlbGluZSBjaGFuZ2VkLiBUaGlzCittZXNzYWdlIGlzIHVzZWQgaW50ZXJuYWxseSBhbmQgbmV2ZXIgZm9yd2FyZGVkIHRvIHRoZSBhcHBsaWNhdGlvbi4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1NRVNTQUdFLVNUUkVBTS1TVEFUVVM6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX01FU1NBR0VfU1RSRUFNX1NUQVRVUzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c3RhdHVzIGFib3V0IGEgc3RyZWFtLCBlbWl0dGVkIHdoZW4gaXQgc3RhcnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BzLCBlcnJvcnMsIGV0Yy4uCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtTUVTU0FHRS1BUFBMSUNBVElPTjpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTUVTU0FHRV9BUFBMSUNBVElPTjwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bWVzc2FnZSBwb3N0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLCBwb3NzaWJseQorICAgICAgICAgICAgICAgICAgICAgICAgICB2aWEgYW4gYXBwbGljYXRpb24tc3BlY2lmaWMgZWxlbWVudC4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1NRVNTQUdFLUVMRU1FTlQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX01FU1NBR0VfRUxFTUVOVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZWxlbWVudC1zcGVjaWZpYyBtZXNzYWdlLCBzZWUgdGhlIHNwZWNpZmljIGVsZW1lbnQncworICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50YXRpb24KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1NRVNTQUdFLVNFR01FTlQtU1RBUlQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX01FU1NBR0VfU0VHTUVOVF9TVEFSVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cGlwZWxpbmUgc3RhcnRlZCBwbGF5YmFjayBvZiBhIHNlZ21lbnQuIFRoaXMKK21lc3NhZ2UgaXMgdXNlZCBpbnRlcm5hbGx5IGFuZCBuZXZlciBmb3J3YXJkZWQgdG8gdGhlIGFwcGxpY2F0aW9uLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtU0VHTUVOVC1ET05FOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9NRVNTQUdFX1NFR01FTlRfRE9ORTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cGlwZWxpbmUgY29tcGxldGVkIHBsYXliYWNrIG9mIGEgc2VnbWVudC4gVGhpcworbWVzc2FnZSBpcyBmb3J3YXJkZWQgdG8gdGhlIGFwcGxpY2F0aW9uIGFmdGVyIGFsbCBlbGVtZW50cyB0aGF0IHBvc3RlZAorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPkdTVF9NRVNTQUdFX1NFR01FTlRfU1RBUlQ8L2NvZGU+PC9lbT4gcG9zdGVkIGEgR1NUX01FU1NBR0VfU0VHTUVOVF9ET05FIG1lc3NhZ2UuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtTUVTU0FHRS1EVVJBVElPTjpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTUVTU0FHRV9EVVJBVElPTjwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGR1cmF0aW9uIG9mIGEgcGlwZWxpbmUgY2hhbmdlZC4gVGhlIGFwcGxpY2F0aW9uCitjYW4gZ2V0IHRoZSBuZXcgZHVyYXRpb24gd2l0aCBhIGR1cmF0aW9uIHF1ZXJ5LgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtTEFURU5DWTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTUVTU0FHRV9MQVRFTkNZPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Qb3N0ZWQgYnkgZWxlbWVudHMgd2hlbiB0aGVpciBsYXRlbmN5IGNoYW5nZXMuIFRoZQorYXBwbGljYXRpb24gc2hvdWxkIHJlY2FsY3VsYXRlIGFuZCBkaXN0cmlidXRlIGEgbmV3IGxhdGVuY3kuIFNpbmNlOiAwLjEwLjEyCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtTUVTU0FHRS1BU1lOQy1TVEFSVDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTUVTU0FHRV9BU1lOQ19TVEFSVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UG9zdGVkIGJ5IGVsZW1lbnRzIHdoZW4gdGhleSBzdGFydCBhbiBBU1lOQworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZUNoYW5nZSIgdGl0bGU9ImVudW0gR3N0U3RhdGVDaGFuZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZUNoYW5nZTwvc3Bhbj48L2E+LiBUaGlzIG1lc3NhZ2UgaXMgbm90IGZvcndhcmRlZCB0byB0aGUgYXBwbGljYXRpb24gYnV0IGlzIHVzZWQKK2ludGVybmFsbHkuIFNpbmNlOiAwLjEwLjEzLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtQVNZTkMtRE9ORTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTUVTU0FHRV9BU1lOQ19ET05FPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Qb3N0ZWQgYnkgZWxlbWVudHMgd2hlbiB0aGV5IGNvbXBsZXRlIGFuIEFTWU5DCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlQ2hhbmdlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZUNoYW5nZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlQ2hhbmdlPC9zcGFuPjwvYT4uIFRoZSBhcHBsaWNhdGlvbiB3aWxsIG9ubHkgcmVjZWl2ZSB0aGlzIG1lc3NhZ2UgZnJvbSB0aGUgdG9wbGV2ZWwKK3BpcGVsaW5lLiBTaW5jZTogMC4xMC4xMworPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtUkVRVUVTVC1TVEFURTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTUVTU0FHRV9SRVFVRVNUX1NUQVRFPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Qb3N0ZWQgYnkgZWxlbWVudHMgd2hlbiB0aGV5IHdhbnQgdGhlIHBpcGVsaW5lIHRvCitjaGFuZ2Ugc3RhdGUuIFRoaXMgbWVzc2FnZSBpcyBhIHN1Z2dlc3Rpb24gdG8gdGhlIGFwcGxpY2F0aW9uIHdoaWNoIGNhbgorZGVjaWRlIHRvIHBlcmZvcm0gdGhlIHN0YXRlIGNoYW5nZSBvbiAocGFydCBvZikgdGhlIHBpcGVsaW5lLiBTaW5jZTogMC4xMC4yMy4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1NRVNTQUdFLVNURVAtU1RBUlQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX01FU1NBR0VfU1RFUF9TVEFSVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBzdGVwcGluZyBvcGVyYXRpb24gd2FzIHN0YXJ0ZWQuIFNpbmNlOiAwLjEwLjI0Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtTUVTU0FHRS1RT1M6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX01FU1NBR0VfUU9TPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIGJ1ZmZlciB3YXMgZHJvcHBlZCBvciBhbiBlbGVtZW50IGNoYW5nZWQgaXRzIHByb2Nlc3NpbmcKK3N0cmF0ZWd5IGZvciBRdWFsaXR5IG9mIFNlcnZpY2UgcmVhc29ucy4gU2luY2U6IDAuMTAuMjkKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1NRVNTQUdFLVBST0dSRVNTOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9NRVNTQUdFX1BST0dSRVNTPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIHByb2dyZXNzIG1lc3NhZ2UuIFNpbmNlOiAwLjEwLjMzCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtTUVTU0FHRS1BTlk6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX01FU1NBR0VfQU5ZPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5tYXNrIGZvciBhbGwgb2YgdGhlIGFib3ZlIG1lc3NhZ2VzLgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULU1FU1NBR0UtU1JDOkNBUFMiPjwvYT48aDM+R1NUX01FU1NBR0VfU1JDKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX01FU1NBR0VfU1JDKG1lc3NhZ2UpICAgICAgICAoR1NUX01FU1NBR0VfQ0FTVChtZXNzYWdlKS0mZ3Q7c3JjKQorPC9wcmU+Cis8cD4KK0dldCB0aGUgb2JqZWN0IHRoYXQgcG9zdGVkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZXNzYWdlPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZXNzYWdlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULU1FU1NBR0UtU1JDLU5BTUU6Q0FQUyI+PC9hPjxoMz5HU1RfTUVTU0FHRV9TUkNfTkFNRSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9NRVNTQUdFX1NSQ19OQU1FKG1lc3NhZ2UpPC9wcmU+Cis8cD4KK0dldCB0aGUgbmFtZSBvZiB0aGUgb2JqZWN0IHRoYXQgcG9zdGVkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZXNzYWdlPC9jb2RlPjwvZW0+LiBSZXR1cm5zICIoTlVMTCkiIGlmCit0aGUgbWVzc2FnZSBoYXMgbm8gc291cmNlIG9iamVjdCBzZXQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI0PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtTUVTU0FHRS1USU1FU1RBTVA6Q0FQUyI+PC9hPjxoMz5HU1RfTUVTU0FHRV9USU1FU1RBTVAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfTUVTU0FHRV9USU1FU1RBTVAobWVzc2FnZSkgIChHU1RfTUVTU0FHRV9DQVNUKG1lc3NhZ2UpLSZndDt0aW1lc3RhbXApCis8L3ByZT4KKzxwPgorR2V0IHRoZSB0aW1lc3RhbXAgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9lbT4uIFRoaXMgaXMgdGhlIHRpbWVzdGFtcCB3aGVuIHRoZSBtZXNzYWdlCit3YXMgY3JlYXRlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1NRVNTQUdFLVNFUU5VTTpDQVBTIj48L2E+PGgzPkdTVF9NRVNTQUdFX1NFUU5VTSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9NRVNTQUdFX1NFUU5VTShtZXNzYWdlKSAgICAgKEdTVF9NRVNTQUdFX0NBU1QobWVzc2FnZSktJmd0O3NlcW51bSkKKzwvcHJlPgorPHA+CitHZXQgdGhlIHNlcXVlbmNlIG51bWJlciBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1NRVNTQUdFLVRZUEU6Q0FQUyI+PC9hPjxoMz5HU1RfTUVTU0FHRV9UWVBFKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSAgICAgICAoR1NUX01FU1NBR0VfQ0FTVChtZXNzYWdlKS0mZ3Q7dHlwZSkKKzwvcHJlPgorPHA+CitHZXQgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2VUeXBlIiB0aXRsZT0iZW51bSBHc3RNZXNzYWdlVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2VUeXBlPC9zcGFuPjwvYT4gb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtTUVTU0FHRS1UWVBFLU5BTUU6Q0FQUyI+PC9hPjxoMz5HU1RfTUVTU0FHRV9UWVBFX05BTUUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfTUVTU0FHRV9UWVBFX05BTUUobWVzc2FnZSkgIGdzdF9tZXNzYWdlX3R5cGVfZ2V0X25hbWUoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSkKKzwvcHJlPgorPHA+CitHZXQgYSBjb25zdGFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2VUeXBlIiB0aXRsZT0iZW51bSBHc3RNZXNzYWdlVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2VUeXBlPC9zcGFuPjwvYT4gb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1NRVNTQUdFLVRSQUNFLU5BTUU6Q0FQUyI+PC9hPjxoMz5HU1RfTUVTU0FHRV9UUkFDRV9OQU1FPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9NRVNTQUdFX1RSQUNFX05BTUUgICJHc3RNZXNzYWdlIgorPC9wcmU+Cis8cD4KK1RoZSBuYW1lIHVzZWQgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIHRyYWNpbmcKKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtdHlwZS10by1xdWFyayI+PC9hPjxoMz5nc3RfbWVzc2FnZV90eXBlX3RvX3F1YXJrICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HUXVhcms8L3NwYW4+PC9hPiAgICAgICAgICAgICAgZ3N0X21lc3NhZ2VfdHlwZV90b19xdWFyayAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlVHlwZSIgdGl0bGU9ImVudW0gR3N0TWVzc2FnZVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlVHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgdGhlIHVuaXF1ZSBxdWFyayBmb3IgdGhlIGdpdmVuIG1lc3NhZ2UgdHlwZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtZXNzYWdlIHR5cGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcXVhcmsgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXNzYWdlIHR5cGU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWVzc2FnZS10eXBlLWdldC1uYW1lIj48L2E+PGgzPmdzdF9tZXNzYWdlX3R5cGVfZ2V0X25hbWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICogICAgICAgZ3N0X21lc3NhZ2VfdHlwZV9nZXRfbmFtZSAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlVHlwZSIgdGl0bGU9ImVudW0gR3N0TWVzc2FnZVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlVHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgYSBwcmludGFibGUgbmFtZSBmb3IgdGhlIGdpdmVuIG1lc3NhZ2UgdHlwZS4gRG8gbm90IG1vZGlmeSBvciBmcmVlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG1lc3NhZ2UgdHlwZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgcmVmZXJlbmNlIHRvIHRoZSBzdGF0aWMgbmFtZSBvZiB0aGUgbWVzc2FnZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWVzc2FnZS1yZWYiPjwvYT48aDM+Z3N0X21lc3NhZ2VfcmVmICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICogICAgICAgIGdzdF9tZXNzYWdlX3JlZiAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptc2c8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb252ZW5pZW5jZSBtYWNybyB0byBpbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBtZXNzYWdlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1zZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbWVzc2FnZSB0byByZWY8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tc2c8L2NvZGU+PC9lbT4gKGZvciBjb252ZW5pZW5jZSB3aGVuIGRvaW5nIGFzc2lnbm1lbnRzKTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZXNzYWdlLXVucmVmIj48L2E+PGgzPmdzdF9tZXNzYWdlX3VucmVmICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9tZXNzYWdlX3VucmVmICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptc2c8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb252ZW5pZW5jZSBtYWNybyB0byBkZWNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBtZXNzYWdlLCBwb3NzaWJseQorZnJlZWluZyBpdC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bXNnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtZXNzYWdlIHRvIHVucmVmPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZXNzYWdlLWNvcHkiPjwvYT48aDM+Z3N0X21lc3NhZ2VfY29weSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqICAgICAgICBnc3RfbWVzc2FnZV9jb3B5ICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbXNnPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlcyBhIGNvcHkgb2YgdGhlIG1lc3NhZ2UuIFJldHVybnMgYSBjb3B5IG9mIHRoZSBtZXNzYWdlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1zZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbWVzc2FnZSB0byBjb3B5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXcgY29weSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bXNnPC9jb2RlPjwvZW0+LgorTVQgc2FmZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZXNzYWdlLWdldC1zdHJ1Y3R1cmUiPjwvYT48aDM+Z3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICogZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZSAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0FjY2VzcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBtZXNzYWdlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgc3RydWN0dXJlIG9mIHRoZSBtZXNzYWdlLiBUaGUgc3RydWN0dXJlIGlzCitzdGlsbCBvd25lZCBieSB0aGUgbWVzc2FnZSwgd2hpY2ggbWVhbnMgdGhhdCB5b3Ugc2hvdWxkIG5vdCBmcmVlIGl0IGFuZAordGhhdCB0aGUgcG9pbnRlciBiZWNvbWVzIGludmFsaWQgd2hlbiB5b3UgZnJlZSB0aGUgbWVzc2FnZS4KK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWVzc2FnZS1tYWtlLXdyaXRhYmxlIj48L2E+PGgzPmdzdF9tZXNzYWdlX21ha2Vfd3JpdGFibGUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgIGdzdF9tZXNzYWdlX21ha2Vfd3JpdGFibGUobXNnKSAgR1NUX01FU1NBR0VfQ0FTVCAoZ3N0X21pbmlfb2JqZWN0X21ha2Vfd3JpdGFibGUgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChtc2cpKSkKKzwvcHJlPgorPHA+CitDaGVja3MgaWYgYSBtZXNzYWdlIGlzIHdyaXRhYmxlLiBJZiBub3QsIGEgd3JpdGFibGUgY29weSBpcyBtYWRlIGFuZAorcmV0dXJuZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bXNnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtZXNzYWdlIHRvIG1ha2Ugd3JpdGFibGUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG1lc3NhZ2UgKHBvc3NpYmx5IGEgZHVwbGljYXRlKSB0aGF0IGlzIHdyaXRhYmxlLgorTVQgc2FmZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZXNzYWdlLWdldC1zZXFudW0iPjwvYT48aDM+Z3N0X21lc3NhZ2VfZ2V0X3NlcW51bSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICAgICAgICAgICAgIGdzdF9tZXNzYWdlX2dldF9zZXFudW0gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0cmlldmUgdGhlIHNlcXVlbmNlIG51bWJlciBvZiBhIG1lc3NhZ2UuCis8L3A+Cis8cD4KK01lc3NhZ2VzIGhhdmUgZXZlci1pbmNyZW1lbnRpbmcgc2VxdWVuY2UgbnVtYmVycywgd2hpY2ggbWF5IGFsc28gYmUgc2V0CitleHBsaWNpdGx5IHZpYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1zZXQtc2VxbnVtIiB0aXRsZT0iZ3N0X21lc3NhZ2Vfc2V0X3NlcW51bSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWVzc2FnZV9zZXRfc2VxbnVtKCk8L2NvZGU+PC9hPi4gU2VxdWVuY2UgbnVtYmVycyBhcmUgdHlwaWNhbGx5IHVzZWQKK3RvIGluZGljYXRlIHRoYXQgYSBtZXNzYWdlIGNvcnJlc3BvbmRzIHRvIHNvbWUgb3RoZXIgc2V0IG9mIG1lc3NhZ2VzIG9yCitldmVudHMsIGZvciBleGFtcGxlIGEgU0VHTUVOVF9ET05FIG1lc3NhZ2UgY29ycmVzcG9uZGluZyB0byBhIFNFRUsgZXZlbnQuIEl0CitpcyBjb25zaWRlcmVkIGdvb2QgcHJhY3RpY2UgdG8gbWFrZSB0aGlzIGNvcnJlc3BvbmRlbmNlIHdoZW4gcG9zc2libGUsIHRob3VnaAoraXQgaXMgbm90IHJlcXVpcmVkLgorPC9wPgorPHA+CitOb3RlIHRoYXQgZXZlbnRzIGFuZCBtZXNzYWdlcyBzaGFyZSB0aGUgc2FtZSBzZXF1ZW5jZSBudW1iZXIgaW5jcmVtZW50b3I7Cit0d28gZXZlbnRzIG9yIG1lc3NhZ2VzIHdpbGwgbmV2ZXIgaGF2ZSB0aGUgc2FtZSBzZXF1ZW5jZSBudW1iZXIgdW5sZXNzCit0aGF0IGNvcnJlc3BvbmRlbmNlIHdhcyBtYWRlIGV4cGxpY2l0bHkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgbWVzc2FnZSdzIHNlcXVlbmNlIG51bWJlci4KK01UIHNhZmUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1lc3NhZ2Utc2V0LXNlcW51bSI+PC9hPjxoMz5nc3RfbWVzc2FnZV9zZXRfc2VxbnVtICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9tZXNzYWdlX3NldF9zZXFudW0gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+IHNlcW51bTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldCB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIGEgbWVzc2FnZS4KKzwvcD4KKzxwPgorVGhpcyBmdW5jdGlvbiBtaWdodCBiZSBjYWxsZWQgYnkgdGhlIGNyZWF0b3Igb2YgYSBtZXNzYWdlIHRvIGluZGljYXRlIHRoYXQKK3RoZSBtZXNzYWdlIHJlbGF0ZXMgdG8gb3RoZXIgbWVzc2FnZXMgb3IgZXZlbnRzLiBTZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtZ2V0LXNlcW51bSIgdGl0bGU9ImdzdF9tZXNzYWdlX2dldF9zZXFudW0gKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21lc3NhZ2VfZ2V0X3NlcW51bSgpPC9jb2RlPjwvYT4KK2ZvciBtb3JlIGluZm9ybWF0aW9uLgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXFudW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBzZXF1ZW5jZSBudW1iZXIuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtaGFzLW5hbWUiPjwvYT48aDM+Z3N0X21lc3NhZ2VfaGFzX25hbWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X21lc3NhZ2VfaGFzX25hbWUgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NoZWNrcyBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPiBoYXMgdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+LiBUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgdXNlZCB0bworY2hlY2sgdGhlIG5hbWUgb2YgYSBjdXN0b20gbWVzc2FnZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZXNzYWdlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm5hbWUgdG8gY2hlY2s8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+IG1hdGNoZXMgdGhlIG5hbWUgb2YgdGhlIG1lc3NhZ2Ugc3RydWN0dXJlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZXNzYWdlLWlzLXdyaXRhYmxlIj48L2E+PGgzPmdzdF9tZXNzYWdlX2lzX3dyaXRhYmxlKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICBnc3RfbWVzc2FnZV9pc193cml0YWJsZShtc2cpICAgICBnc3RfbWluaV9vYmplY3RfaXNfd3JpdGFibGUgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChtc2cpKQorPC9wcmU+Cis8cD4KK1Rlc3RzIGlmIHlvdSBjYW4gc2FmZWx5IHdyaXRlIGludG8gYSBtZXNzYWdlJ3Mgc3RydWN0dXJlIG9yIHZhbGlkbHkKK21vZGlmeSB0aGUgc2VxbnVtIGFuZCB0aW1lc3RhbXAgZmllbGRzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tc2c8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWVzc2FnZS1yZXBsYWNlIj48L2E+PGgzPmdzdF9tZXNzYWdlX3JlcGxhY2UoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBnc3RfbWVzc2FnZV9yZXBsYWNlKG9sZF9tZXNzYWdlLG5ld19tZXNzYWdlKTwvcHJlPgorPHA+CitNb2RpZmllcyBhIHBvaW50ZXIgdG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gdG8gcG9pbnQgdG8gYSBkaWZmZXJlbnQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+LiBUaGUKK21vZGlmaWNhdGlvbiBpcyBkb25lIGF0b21pY2FsbHkgKHNvIHRoaXMgaXMgdXNlZnVsIGZvciBlbnN1cmluZyB0aHJlYWQgc2FmZXR5CitpbiBzb21lIGNhc2VzKSwgYW5kIHRoZSByZWZlcmVuY2UgY291bnRzIGFyZSB1cGRhdGVkIGFwcHJvcHJpYXRlbHkgKHRoZSBvbGQKK21lc3NhZ2UgaXMgdW5yZWZmZWQsIHRoZSBuZXcgb25lIGlzIHJlZmZlZCkuCis8L3A+Cis8cD4KK0VpdGhlciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmV3X21lc3NhZ2U8L2NvZGU+PC9lbT4gb3IgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBwb2ludGVkIHRvIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vbGRfbWVzc2FnZTwvY29kZT48L2VtPiBtYXkgYmUgTlVMTC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vbGRfbWVzc2FnZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIGEgcG9pbnRlciB0byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPgordG8gYmUgcmVwbGFjZWQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQgYW5kIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmlub3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uZXdfbWVzc2FnZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IHRoYXQgd2lsbAorcmVwbGFjZSB0aGUgbWVzc2FnZSBwb2ludGVkIHRvIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vbGRfbWVzc2FnZTwvY29kZT48L2VtPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWVvcyI+PC9hPjxoMz5nc3RfbWVzc2FnZV9uZXdfZW9zICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICogICAgICAgIGdzdF9tZXNzYWdlX25ld19lb3MgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZSBhIG5ldyBlb3MgbWVzc2FnZS4gVGhpcyBtZXNzYWdlIGlzIGdlbmVyYXRlZCBhbmQgcG9zdGVkIGluCit0aGUgc2luayBlbGVtZW50cyBvZiBhIEdzdEJpbi4gVGhlIGJpbiB3aWxsIG9ubHkgZm9yd2FyZCB0aGUgRU9TCittZXNzYWdlIHRvIHRoZSBhcHBsaWNhdGlvbiBpZiBhbGwgc2lua3MgaGF2ZSBwb3N0ZWQgYW4gRU9TIG1lc3NhZ2UuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgbmV3IGVvcyBtZXNzYWdlLgorTVQgc2FmZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1lcnJvciI+PC9hPjxoMz5nc3RfbWVzc2FnZV9uZXdfZXJyb3IgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKiAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X2Vycm9yICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gKmVycm9yPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmRlYnVnPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlIGEgbmV3IGVycm9yIG1lc3NhZ2UuIFRoZSBtZXNzYWdlIHdpbGwgY29weSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXJyb3I8L2NvZGU+PC9lbT4gYW5kCis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVidWc8L2NvZGU+PC9lbT4uIFRoaXMgbWVzc2FnZSBpcyBwb3N0ZWQgYnkgZWxlbWVudCB3aGVuIGEgZmF0YWwgZXZlbnQKK29jY3VyZWQuIFRoZSBwaXBlbGluZSB3aWxsIHByb2JhYmx5IChwYXJ0aWFsbHkpIHN0b3AuIFRoZSBhcHBsaWNhdGlvbgorcmVjZWl2aW5nIHRoaXMgbWVzc2FnZSBzaG91bGQgc3RvcCB0aGUgcGlwZWxpbmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVycm9yPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBHRXJyb3IgZm9yIHRoaXMgbWVzc2FnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVidWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBkZWJ1Z2dpbmcgc3RyaW5nLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXcgZXJyb3IgbWVzc2FnZS4KK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWVzc2FnZS1wYXJzZS1lcnJvciI+PC9hPjxoMz5nc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUVycm9yLVJlcG9ydGluZy5odG1sI0dFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdFcnJvcjwvc3Bhbj48L2E+ICoqZ2Vycm9yPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKipkZWJ1ZzwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0V4dHJhY3RzIHRoZSBHRXJyb3IgYW5kIGRlYnVnIHN0cmluZyBmcm9tIHRoZSBHc3RNZXNzYWdlLiBUaGUgdmFsdWVzIHJldHVybmVkCitpbiB0aGUgb3V0cHV0IGFyZ3VtZW50cyBhcmUgY29waWVzOyB0aGUgY2FsbGVyIG11c3QgZnJlZSB0aGVtIHdoZW4gZG9uZS4KKzwvcD4KKzxwPgorVHlwaWNhbCB1c2FnZSBvZiB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGJlOgorPC9wPgorPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CisgIC4uLgorICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykpIHsKKyAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOiB7CisgICAgICBHRXJyb3IgKmVyciA9IE5VTEw7CisgICAgICBnY2hhciAqZGJnX2luZm8gPSBOVUxMOworICAgICAgCisgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobXNnLCAmYW1wO2VyciwgJmFtcDtkYmdfaW5mbyk7CisgICAgICBnX3ByaW50ZXJyICgiRVJST1IgZnJvbSBlbGVtZW50ICVzOiAlc1xuIiwKKyAgICAgICAgICBHU1RfT0JKRUNUX05BTUUgKG1zZy0mZ3Q7c3JjKSwgZXJyLSZndDttZXNzYWdlKTsKKyAgICAgIGdfcHJpbnRlcnIgKCJEZWJ1Z2dpbmcgaW5mbzogJXNcbiIsIChkYmdfaW5mbykgPyBkYmdfaW5mbyA6ICJub25lIik7CisgICAgICBnX2Vycm9yX2ZyZWUgKGVycik7CisgICAgICBnX2ZyZWUgKGRiZ19pbmZvKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICAuLi4KKyAgfQorICAuLi4KKzwvcHJlPjwvZGl2PgorPHA+Cis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBvZiB0eXBlIEdTVF9NRVNTQUdFX0VSUk9SLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Z2Vycm9yPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmxvY2F0aW9uIGZvciB0aGUgR0Vycm9yLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlYnVnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmxvY2F0aW9uIGZvciB0aGUgZGVidWcgbWVzc2FnZSwKK29yIE5VTEwuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy13YXJuaW5nIj48L2E+PGgzPmdzdF9tZXNzYWdlX25ld193YXJuaW5nICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICogICAgICAgIGdzdF9tZXNzYWdlX25ld193YXJuaW5nICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUVycm9yLVJlcG9ydGluZy5odG1sI0dFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdFcnJvcjwvc3Bhbj48L2E+ICplcnJvcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpkZWJ1ZzwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZSBhIG5ldyB3YXJuaW5nIG1lc3NhZ2UuIFRoZSBtZXNzYWdlIHdpbGwgbWFrZSBjb3BpZXMgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVycm9yPC9jb2RlPjwvZW0+IGFuZAorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlYnVnPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lcnJvcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgR0Vycm9yIGZvciB0aGlzIG1lc3NhZ2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlYnVnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgZGVidWdnaW5nIHN0cmluZy48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgbmV3IHdhcm5pbmcgbWVzc2FnZS4KK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWVzc2FnZS1wYXJzZS13YXJuaW5nIj48L2E+PGgzPmdzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmcgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfd2FybmluZyAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1FcnJvci1SZXBvcnRpbmcuaHRtbCNHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRXJyb3I8L3NwYW4+PC9hPiAqKmdlcnJvcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqZGVidWc8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitFeHRyYWN0cyB0aGUgR0Vycm9yIGFuZCBkZWJ1ZyBzdHJpbmcgZnJvbSB0aGUgR3N0TWVzc2FnZS4gVGhlIHZhbHVlcyByZXR1cm5lZAoraW4gdGhlIG91dHB1dCBhcmd1bWVudHMgYXJlIGNvcGllczsgdGhlIGNhbGxlciBtdXN0IGZyZWUgdGhlbSB3aGVuIGRvbmUuCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBvZiB0eXBlIEdTVF9NRVNTQUdFX1dBUk5JTkcuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5nZXJyb3I8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bG9jYXRpb24gZm9yIHRoZSBHRXJyb3IuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVidWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bG9jYXRpb24gZm9yIHRoZSBkZWJ1ZyBtZXNzYWdlLAorb3IgTlVMTC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWluZm8iPjwvYT48aDM+Z3N0X21lc3NhZ2VfbmV3X2luZm8gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKiAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X2luZm8gICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gKmVycm9yPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmRlYnVnPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlIGEgbmV3IGluZm8gbWVzc2FnZS4gVGhlIG1lc3NhZ2Ugd2lsbCBtYWtlIGNvcGllcyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXJyb3I8L2NvZGU+PC9lbT4gYW5kCis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVidWc8L2NvZGU+PC9lbT4uCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVycm9yPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBHRXJyb3IgZm9yIHRoaXMgbWVzc2FnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVidWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBkZWJ1Z2dpbmcgc3RyaW5nLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXcgaW5mbyBtZXNzYWdlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2UtaW5mbyI+PC9hPjxoMz5nc3RfbWVzc2FnZV9wYXJzZV9pbmZvICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2luZm8gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gKipnZXJyb3I8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKmRlYnVnPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRXh0cmFjdHMgdGhlIEdFcnJvciBhbmQgZGVidWcgc3RyaW5nIGZyb20gdGhlIEdzdE1lc3NhZ2UuIFRoZSB2YWx1ZXMgcmV0dXJuZWQKK2luIHRoZSBvdXRwdXQgYXJndW1lbnRzIGFyZSBjb3BpZXM7IHRoZSBjYWxsZXIgbXVzdCBmcmVlIHRoZW0gd2hlbiBkb25lLgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSB2YWxpZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gb2YgdHlwZSBHU1RfTUVTU0FHRV9JTkZPLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Z2Vycm9yPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmxvY2F0aW9uIGZvciB0aGUgR0Vycm9yLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlYnVnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmxvY2F0aW9uIGZvciB0aGUgZGVidWcgbWVzc2FnZSwKK29yIE5VTEwuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy10YWciPjwvYT48aDM+Z3N0X21lc3NhZ2VfbmV3X3RhZyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqICAgICAgICBnc3RfbWVzc2FnZV9uZXdfdGFnICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKnRhZ19saXN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlIGEgbmV3IHRhZyBtZXNzYWdlLiBUaGUgbWVzc2FnZSB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZSB0YWcgbGlzdC4KK1RoZSBtZXNzYWdlIGlzIHBvc3RlZCBieSBlbGVtZW50cyB0aGF0IGRpc2NvdmVyZWQgYSBuZXcgdGFnbGlzdC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnX2xpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHRhZyBsaXN0IGZvciB0aGUgbWVzc2FnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXcgdGFnIG1lc3NhZ2UuCitNVCBzYWZlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2UtdGFnIj48L2E+PGgzPmdzdF9tZXNzYWdlX3BhcnNlX3RhZyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV90YWcgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqKnRhZ19saXN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRXh0cmFjdHMgdGhlIHRhZyBsaXN0IGZyb20gdGhlIEdzdE1lc3NhZ2UuIFRoZSB0YWcgbGlzdCByZXR1cm5lZCBpbiB0aGUKK291dHB1dCBhcmd1bWVudCBpcyBhIGNvcHk7IHRoZSBjYWxsZXIgbXVzdCBmcmVlIGl0IHdoZW4gZG9uZS4KKzwvcD4KKzxwPgorVHlwaWNhbCB1c2FnZSBvZiB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGJlOgorPC9wPgorPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CisgIC4uLgorICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykpIHsKKyAgICBjYXNlIEdTVF9NRVNTQUdFX1RBRzogeworICAgICAgR3N0VGFnTGlzdCAqdGFncyA9IE5VTEw7CisgICAgICAKKyAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3RhZyAobXNnLCAmYW1wO3RhZ3MpOworICAgICAgZ19wcmludCAoIkdvdCB0YWdzIGZyb20gZWxlbWVudCAlc1xuIiwgR1NUX09CSkVDVF9OQU1FIChtc2ctJmd0O3NyYykpOworICAgICAgaGFuZGxlX3RhZ3MgKHRhZ3MpOworICAgICAgZ3N0X3RhZ19saXN0X2ZyZWUgKHRhZ3MpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIC4uLgorICB9CisgIC4uLgorPC9wcmU+PC9kaXY+Cis8cD4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZXNzYWdlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IG9mIHR5cGUgR1NUX01FU1NBR0VfVEFHLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnX2xpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cmV0dXJuIGxvY2F0aW9uIGZvciB0aGUgdGFnLWxpc3QuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPiBjYWxsZWUtYWxsb2NhdGVzXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1idWZmZXJpbmciPjwvYT48aDM+Z3N0X21lc3NhZ2VfbmV3X2J1ZmZlcmluZyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqICAgICAgICBnc3RfbWVzc2FnZV9uZXdfYnVmZmVyaW5nICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gcGVyY2VudDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZSBhIG5ldyBidWZmZXJpbmcgbWVzc2FnZS4gVGhpcyBtZXNzYWdlIGNhbiBiZSBwb3N0ZWQgYnkgYW4gZWxlbWVudCB0aGF0CituZWVkcyB0byBidWZmZXIgZGF0YSBiZWZvcmUgaXQgY2FuIGNvbnRpbnVlIHByb2Nlc3NpbmcuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wZXJjZW50PC9jb2RlPjwvZW0+IHNob3VsZCBiZSBhCit2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEwMC4gQSB2YWx1ZSBvZiAxMDAgbWVhbnMgdGhhdCB0aGUgYnVmZmVyaW5nIGNvbXBsZXRlZC4KKzwvcD4KKzxwPgorV2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGVyY2VudDwvY29kZT48L2VtPiBpcyAmbHQ7IDEwMCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIFBBVVNFIGEgUExBWUlORyBwaXBlbGluZS4gV2hlbgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBlcmNlbnQ8L2NvZGU+PC9lbT4gaXMgMTAwLCB0aGUgYXBwbGljYXRpb24gY2FuIHNldCB0aGUgcGlwZWxpbmUgKGJhY2spIHRvIFBMQVlJTkcuCitUaGUgYXBwbGljYXRpb24gbXVzdCBiZSBwcmVwYXJlZCB0byByZWNlaXZlIEJVRkZFUklORyBtZXNzYWdlcyBpbiB0aGUKK1BSRVJPTExJTkcgc3RhdGUgYW5kIG1heSBvbmx5IHNldCB0aGUgcGlwZWxpbmUgdG8gUExBWUlORyBhZnRlciByZWNlaXZpbmcgYQorbWVzc2FnZSB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wZXJjZW50PC9jb2RlPjwvZW0+IHNldCB0byAxMDAsIHdoaWNoIGNhbiBoYXBwZW4gYWZ0ZXIgdGhlIHBpcGVsaW5lCitjb21wbGV0ZWQgcHJlcm9sbGluZy4gCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBlcmNlbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGJ1ZmZlcmluZyBwZXJjZW50PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIG5ldyBidWZmZXJpbmcgbWVzc2FnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLWJ1ZmZlcmluZyI+PC9hPjxoMz5nc3RfbWVzc2FnZV9wYXJzZV9idWZmZXJpbmcgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gKnBlcmNlbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitFeHRyYWN0cyB0aGUgYnVmZmVyaW5nIHBlcmNlbnQgZnJvbSB0aGUgR3N0TWVzc2FnZS4gc2VlIGFsc28KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1idWZmZXJpbmciIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfYnVmZmVyaW5nICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9tZXNzYWdlX25ld19idWZmZXJpbmcoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSB2YWxpZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gb2YgdHlwZSBHU1RfTUVTU0FHRV9CVUZGRVJJTkcuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wZXJjZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlJldHVybiBsb2NhdGlvbiBmb3IgdGhlIHBlcmNlbnQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZXNzYWdlLXNldC1idWZmZXJpbmctc3RhdHMiPjwvYT48aDM+Z3N0X21lc3NhZ2Vfc2V0X2J1ZmZlcmluZ19zdGF0cyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfbWVzc2FnZV9zZXRfYnVmZmVyaW5nX3N0YXRzICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0QnVmZmVyaW5nTW9kZSIgdGl0bGU9ImVudW0gR3N0QnVmZmVyaW5nTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcmluZ01vZGU8L3NwYW4+PC9hPiBtb2RlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGF2Z19pbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBhdmdfb3V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBidWZmZXJpbmdfbGVmdDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NvbmZpZ3VyZXMgdGhlIGJ1ZmZlcmluZyBzdGF0cyB2YWx1ZXMgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBvZiB0eXBlIEdTVF9NRVNTQUdFX0JVRkZFUklORy48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1vZGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBidWZmZXJpbmcgbW9kZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YXZnX2luPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBhdmVyYWdlIGlucHV0IHJhdGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmF2Z19vdXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGF2ZXJhZ2Ugb3V0cHV0IHJhdGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcmluZ19sZWZ0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFtb3VudCBvZiBidWZmZXJpbmcgdGltZSBsZWZ0IGluIG1pbGxpc2Vjb25kczwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLWJ1ZmZlcmluZy1zdGF0cyI+PC9hPjxoMz5nc3RfbWVzc2FnZV9wYXJzZV9idWZmZXJpbmdfc3RhdHMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nX3N0YXRzICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdEJ1ZmZlcmluZ01vZGUiIHRpdGxlPSJlbnVtIEdzdEJ1ZmZlcmluZ01vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJpbmdNb2RlPC9zcGFuPjwvYT4gKm1vZGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gKmF2Z19pbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAqYXZnX291dDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKmJ1ZmZlcmluZ19sZWZ0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRXh0cmFjdHMgdGhlIGJ1ZmZlcmluZyBzdGF0cyB2YWx1ZXMgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZXNzYWdlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IG9mIHR5cGUgR1NUX01FU1NBR0VfQlVGRkVSSU5HLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bW9kZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGJ1ZmZlcmluZyBtb2RlLCBvciBOVUxMLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmF2Z19pbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgYXZlcmFnZSBpbnB1dCByYXRlLCBvciBOVUxMLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmF2Z19vdXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGF2ZXJhZ2Ugb3V0cHV0IHJhdGUsIG9yIE5VTEwuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyaW5nX2xlZnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YW1vdW50IG9mIGJ1ZmZlcmluZyB0aW1lIGxlZnQgaW4KK21pbGxpc2Vjb25kcywgb3IgTlVMTC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXN0YXRlLWNoYW5nZWQiPjwvYT48aDM+Z3N0X21lc3NhZ2VfbmV3X3N0YXRlX2NoYW5nZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKiAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3N0YXRlX2NoYW5nZWQgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGU8L3NwYW4+PC9hPiBvbGRzdGF0ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlPC9zcGFuPjwvYT4gbmV3c3RhdGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZSIgdGl0bGU9ImVudW0gR3N0U3RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZTwvc3Bhbj48L2E+IHBlbmRpbmc8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGUgYSBzdGF0ZSBjaGFuZ2UgbWVzc2FnZS4gVGhpcyBtZXNzYWdlIGlzIHBvc3RlZCB3aGVuZXZlciBhbiBlbGVtZW50CitjaGFuZ2VkIGl0cyBzdGF0ZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2xkc3RhdGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHByZXZpb3VzIHN0YXRlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uZXdzdGF0ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3IChjdXJyZW50KSBzdGF0ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGVuZGluZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGVuZGluZyAodGFyZ2V0KSBzdGF0ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXcgc3RhdGUgY2hhbmdlIG1lc3NhZ2UuCitNVCBzYWZlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2Utc3RhdGUtY2hhbmdlZCI+PC9hPjxoMz5nc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGU8L3NwYW4+PC9hPiAqb2xkc3RhdGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZSIgdGl0bGU9ImVudW0gR3N0U3RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZTwvc3Bhbj48L2E+ICpuZXdzdGF0ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlPC9zcGFuPjwvYT4gKnBlbmRpbmc8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitFeHRyYWN0cyB0aGUgb2xkIGFuZCBuZXcgc3RhdGVzIGZyb20gdGhlIEdzdE1lc3NhZ2UuCis8L3A+Cis8cD4KK1R5cGljYWwgdXNhZ2Ugb2YgdGhpcyBmdW5jdGlvbiBtaWdodCBiZToKKzwvcD4KKzxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgorICAuLi4KKyAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpKSB7CisgICAgY2FzZSBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEOiB7CisgICAgICBHc3RTdGF0ZSBvbGRfc3RhdGUsIG5ld19zdGF0ZTsKKyAgICAgIAorICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZCAobXNnLCAmYW1wO29sZF9zdGF0ZSwgJmFtcDtuZXdfc3RhdGUsIE5VTEwpOworICAgICAgZ19wcmludCAoIkVsZW1lbnQgJXMgY2hhbmdlZCBzdGF0ZSBmcm9tICVzIHRvICVzLlxuIiwKKyAgICAgICAgICBHU1RfT0JKRUNUX05BTUUgKG1zZy0mZ3Q7c3JjKSwKKyAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAob2xkX3N0YXRlKSwKKyAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAobmV3X3N0YXRlKSk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgLi4uCisgIH0KKyAgLi4uCis8L3ByZT48L2Rpdj4KKzxwPgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSB2YWxpZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gb2YgdHlwZSBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vbGRzdGF0ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcHJldmlvdXMgc3RhdGUsIG9yIE5VTEwuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmV3c3RhdGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5ldyAoY3VycmVudCkgc3RhdGUsIG9yIE5VTEwuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGVuZGluZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGVuZGluZyAodGFyZ2V0KSBzdGF0ZSwgb3IgTlVMTC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXN0YXRlLWRpcnR5Ij48L2E+PGgzPmdzdF9tZXNzYWdlX25ld19zdGF0ZV9kaXJ0eSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqICAgICAgICBnc3RfbWVzc2FnZV9uZXdfc3RhdGVfZGlydHkgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGUgYSBzdGF0ZSBkaXJ0eSBtZXNzYWdlLiBUaGlzIG1lc3NhZ2UgaXMgcG9zdGVkIHdoZW5ldmVyIGFuIGVsZW1lbnQKK2NoYW5nZWQgaXRzIHN0YXRlIGFzeW5jaHJvbm91c2x5IGFuZCBpcyB1c2VkIGludGVybmFsbHkgdG8gdXBkYXRlIHRoZQorc3RhdGVzIG9mIGNvbnRhaW5lciBvYmplY3RzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5ldyBzdGF0ZSBkaXJ0eSBtZXNzYWdlLgorTVQgc2FmZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1zdGVwLWRvbmUiPjwvYT48aDM+Z3N0X21lc3NhZ2VfbmV3X3N0ZXBfZG9uZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqICAgICAgICBnc3RfbWVzc2FnZV9uZXdfc3RlcF9kb25lICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBhbW91bnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gcmF0ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGZsdXNoPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gaW50ZXJtZWRpYXRlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IGR1cmF0aW9uPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gZW9zPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVGhpcyBtZXNzYWdlIGlzIHBvc3RlZCBieSBlbGVtZW50cyB3aGVuIHRoZXkgY29tcGxldGUgYSBwYXJ0LCB3aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbnRlcm1lZGlhdGU8L2NvZGU+PC9lbT4gc2V0Cit0byBUUlVFLCBvciBhIGNvbXBsZXRlIHN0ZXAgb3BlcmF0aW9uLgorPC9wPgorPHA+Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZHVyYXRpb248L2NvZGU+PC9lbT4gd2lsbCBjb250YWluIHRoZSBhbW91bnQgb2YgdGltZSAoaW4gR1NUX0ZPUk1BVF9USU1FKSBvZiB0aGUgc3RlcHBlZAorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFtb3VudDwvY29kZT48L2VtPiBvZiBtZWRpYSBpbiBmb3JtYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZm9ybWF0IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hbW91bnQ8L2NvZGU+PC9lbT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YW1vdW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBhbW91bnQgb2Ygc3RlcHBlZCBkYXRhPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yYXRlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSByYXRlIG9mIHRoZSBzdGVwcGVkIGFtb3VudDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zmx1c2g8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+aXMgdGhpcyBhbiBmbHVzaGluZyBzdGVwPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbnRlcm1lZGlhdGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+aXMgdGhpcyBhbiBpbnRlcm1lZGlhdGUgc3RlcDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZHVyYXRpb248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGR1cmF0aW9uIG9mIHRoZSBkYXRhPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lb3M8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHN0ZXAgY2F1c2VkIEVPUzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXcgc3RlcF9kb25lIG1lc3NhZ2UuCitNVCBzYWZlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2Utc3RlcC1kb25lIj48L2E+PGgzPmdzdF9tZXNzYWdlX3BhcnNlX3N0ZXBfZG9uZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9zdGVwX2RvbmUgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gKmZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqYW1vdW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICpyYXRlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gKmZsdXNoPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gKmludGVybWVkaWF0ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqZHVyYXRpb248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAqZW9zPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRXh0cmFjdCB0aGUgdmFsdWVzIHRoZSBzdGVwX2RvbmUgbWVzc2FnZS4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZXNzYWdlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IG9mIHR5cGUgR1NUX01FU1NBR0VfU1RFUF9ET05FLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIGZvcm1hdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hbW91bnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgYW1vdW50LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJhdGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgcmF0ZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbHVzaDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5yZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBmbHVzaCBmbGFnLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmludGVybWVkaWF0ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5yZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBpbnRlcm1lZGlhdGUgZmxhZy4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kdXJhdGlvbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5yZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBkdXJhdGlvbi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lb3M8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgRU9TIGZsYWcuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1jbG9jay1wcm92aWRlIj48L2E+PGgzPmdzdF9tZXNzYWdlX25ld19jbG9ja19wcm92aWRlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICogICAgICAgIGdzdF9tZXNzYWdlX25ld19jbG9ja19wcm92aWRlICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqY2xvY2s8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiByZWFkeTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZSBhIGNsb2NrIHByb3ZpZGUgbWVzc2FnZS4gVGhpcyBtZXNzYWdlIGlzIHBvc3RlZCB3aGVuZXZlciBhbgorZWxlbWVudCBpcyByZWFkeSB0byBwcm92aWRlIGEgY2xvY2sgb3IgbG9zdCBpdHMgYWJpbGl0eSB0byBwcm92aWRlCithIGNsb2NrIChtYXliZSBiZWNhdXNlIGl0IHBhdXNlZCBvciBiZWNhbWUgRU9TKS4KKzwvcD4KKzxwPgorVGhpcyBtZXNzYWdlIGlzIG1haW5seSB1c2VkIGludGVybmFsbHkgdG8gbWFuYWdlIHRoZSBjbG9jaworc2VsZWN0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jbG9jazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY2xvY2sgaXQgcHJvdmlkZXMuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWR5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHNlbmRlciBjYW4gcHJvdmlkZSBhIGNsb2NrPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5ldyBwcm92aWRlIGNsb2NrIG1lc3NhZ2UuCitNVCBzYWZlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2UtY2xvY2stcHJvdmlkZSI+PC9hPjxoMz5nc3RfbWVzc2FnZV9wYXJzZV9jbG9ja19wcm92aWRlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Nsb2NrX3Byb3ZpZGUgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICoqY2xvY2s8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAqcmVhZHk8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitFeHRyYWN0cyB0aGUgY2xvY2sgYW5kIHJlYWR5IGZsYWcgZnJvbSB0aGUgR3N0TWVzc2FnZS4KK1RoZSBjbG9jayBvYmplY3QgcmV0dXJuZWQgcmVtYWlucyB2YWxpZCB1bnRpbCB0aGUgbWVzc2FnZSBpcyBmcmVlZC4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZXNzYWdlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IG9mIHR5cGUgR1NUX01FU1NBR0VfQ0xPQ0tfUFJPVklERS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsb2NrPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgcG9pbnRlciB0byAgaG9sZCBhIGNsb2NrCitvYmplY3QsIG9yIE5VTEwuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZHk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBwb2ludGVyIHRvIGhvbGQgdGhlIHJlYWR5IGZsYWcsIG9yIE5VTEwuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1jbG9jay1sb3N0Ij48L2E+PGgzPmdzdF9tZXNzYWdlX25ld19jbG9ja19sb3N0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICogICAgICAgIGdzdF9tZXNzYWdlX25ld19jbG9ja19sb3N0ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqY2xvY2s8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGUgYSBjbG9jayBsb3N0IG1lc3NhZ2UuIFRoaXMgbWVzc2FnZSBpcyBwb3N0ZWQgd2hlbmV2ZXIgdGhlCitjbG9jayBpcyBub3QgdmFsaWQgYW55bW9yZS4KKzwvcD4KKzxwPgorSWYgdGhpcyBtZXNzYWdlIGlzIHBvc3RlZCBieSB0aGUgcGlwZWxpbmUsIHRoZSBwaXBlbGluZSB3aWxsCitzZWxlY3QgYSBuZXcgY2xvY2sgYWdhaW4gd2hlbiBpdCBnb2VzIHRvIFBMQVlJTkcuIEl0IG1pZ2h0IHRoZXJlZm9yZQorYmUgbmVlZGVkIHRvIHNldCB0aGUgcGlwZWxpbmUgdG8gUEFVU0VEIGFuZCBQTEFZSU5HIGFnYWluLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jbG9jazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY2xvY2sgdGhhdCB3YXMgbG9zdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBuZXcgY2xvY2sgbG9zdCBtZXNzYWdlLgorTVQgc2FmZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLWNsb2NrLWxvc3QiPjwvYT48aDM+Z3N0X21lc3NhZ2VfcGFyc2VfY2xvY2tfbG9zdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9jbG9ja19sb3N0ICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqKmNsb2NrPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRXh0cmFjdHMgdGhlIGxvc3QgY2xvY2sgZnJvbSB0aGUgR3N0TWVzc2FnZS4KK1RoZSBjbG9jayBvYmplY3QgcmV0dXJuZWQgcmVtYWlucyB2YWxpZCB1bnRpbCB0aGUgbWVzc2FnZSBpcyBmcmVlZC4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZXNzYWdlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IG9mIHR5cGUgR1NUX01FU1NBR0VfQ0xPQ0tfTE9TVC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsb2NrPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgcG9pbnRlciB0byBob2xkIHRoZSBsb3N0IGNsb2NrLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctbmV3LWNsb2NrIj48L2E+PGgzPmdzdF9tZXNzYWdlX25ld19uZXdfY2xvY2sgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKiAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X25ld19jbG9jayAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZSBhIG5ldyBjbG9jayBtZXNzYWdlLiBUaGlzIG1lc3NhZ2UgaXMgcG9zdGVkIHdoZW5ldmVyIHRoZQorcGlwZWxpbmUgc2VsZWN0ZXMgYSBuZXcgY2xvY2sgZm9yIHRoZSBwaXBlbGluZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5ldyBzZWxlY3RlZCBjbG9jay4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBuZXcgbmV3IGNsb2NrIG1lc3NhZ2UuCitNVCBzYWZlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2UtbmV3LWNsb2NrIj48L2E+PGgzPmdzdF9tZXNzYWdlX3BhcnNlX25ld19jbG9jayAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9uZXdfY2xvY2sgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqKmNsb2NrPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRXh0cmFjdHMgdGhlIG5ldyBjbG9jayBmcm9tIHRoZSBHc3RNZXNzYWdlLgorVGhlIGNsb2NrIG9iamVjdCByZXR1cm5lZCByZW1haW5zIHZhbGlkIHVudGlsIHRoZSBtZXNzYWdlIGlzIGZyZWVkLgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSB2YWxpZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gb2YgdHlwZSBHU1RfTUVTU0FHRV9ORVdfQ0xPQ0suPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jbG9jazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gaG9sZCB0aGUgc2VsZWN0ZWQKK25ldyBjbG9jay4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWFwcGxpY2F0aW9uIj48L2E+PGgzPmdzdF9tZXNzYWdlX25ld19hcHBsaWNhdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqICAgICAgICBnc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRpb24gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZSBhIG5ldyBhcHBsaWNhdGlvbi10eXBlZCBtZXNzYWdlLiBHU3RyZWFtZXIgd2lsbCBuZXZlciBjcmVhdGUgdGhlc2UKK21lc3NhZ2VzOyB0aGV5IGFyZSBhIGdpZnQgZnJvbSB1cyB0byB5b3UuIEVuam95LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHN0cnVjdHVyZSBmb3IgdGhlIG1lc3NhZ2UuIFRoZSBtZXNzYWdlCit3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZSBzdHJ1Y3R1cmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgbmV3IGFwcGxpY2F0aW9uIG1lc3NhZ2UuCitNVCBzYWZlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWVsZW1lbnQiPjwvYT48aDM+Z3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKiAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGUgYSBuZXcgZWxlbWVudC1zcGVjaWZpYyBtZXNzYWdlLiBUaGlzIGlzIG1lYW50IGFzIGEgZ2VuZXJpYyB3YXkgb2YKK2FsbG93aW5nIG9uZS13YXkgY29tbXVuaWNhdGlvbiBmcm9tIGFuIGVsZW1lbnQgdG8gYW4gYXBwbGljYXRpb24sIGZvciBleGFtcGxlCisidGhlIGZpcmV3aXJlIGNhYmxlIHdhcyB1bnBsdWdnZWQiLiBUaGUgZm9ybWF0IG9mIHRoZSBtZXNzYWdlIHNob3VsZCBiZQorZG9jdW1lbnRlZCBpbiB0aGUgZWxlbWVudCdzIGRvY3VtZW50YXRpb24uIFRoZSBzdHJ1Y3R1cmUgZmllbGQgY2FuIGJlIE5VTEwuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgc3RydWN0dXJlIGZvciB0aGUgbWVzc2FnZS4gVGhlIG1lc3NhZ2UKK3dpbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhlIHN0cnVjdHVyZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBuZXcgZWxlbWVudCBtZXNzYWdlLgorTVQgc2FmZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1jdXN0b20iPjwvYT48aDM+Z3N0X21lc3NhZ2VfbmV3X2N1c3RvbSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqICAgICAgICBnc3RfbWVzc2FnZV9uZXdfY3VzdG9tICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2VUeXBlIiB0aXRsZT0iZW51bSBHc3RNZXNzYWdlVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2VUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGUgYSBuZXcgY3VzdG9tLXR5cGVkIG1lc3NhZ2UuIFRoaXMgY2FuIGJlIHVzZWQgZm9yIGFueXRoaW5nIG5vdAoraGFuZGxlZCBieSBvdGhlciBtZXNzYWdlLXNwZWNpZmljIGZ1bmN0aW9ucyB0byBwYXNzIGEgbWVzc2FnZSB0byB0aGUKK2FwcC4gVGhlIHN0cnVjdHVyZSBmaWVsZCBjYW4gYmUgTlVMTC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlVHlwZSIgdGl0bGU9ImVudW0gR3N0TWVzc2FnZVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlVHlwZTwvc3Bhbj48L2E+IHRvIGRpc3Rpbmd1aXNoIG1lc3NhZ2VzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc3RydWN0dXJlIGZvciB0aGUgbWVzc2FnZS4gVGhlIG1lc3NhZ2UKK3dpbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhlIHN0cnVjdHVyZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBuZXcgbWVzc2FnZS4KK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctc2VnbWVudC1zdGFydCI+PC9hPjxoMz5nc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9zdGFydCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqICAgICAgICBnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9zdGFydCAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gcG9zaXRpb248L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGUgYSBuZXcgc2VnbWVudCBtZXNzYWdlLiBUaGlzIG1lc3NhZ2UgaXMgcG9zdGVkIGJ5IGVsZW1lbnRzIHRoYXQKK3N0YXJ0IHBsYXliYWNrIG9mIGEgc2VnbWVudCBhcyBhIHJlc3VsdCBvZiBhIHNlZ21lbnQgc2Vlay4gVGhpcyBtZXNzYWdlCitpcyBub3QgcmVjZWl2ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGJ1dCBpcyB1c2VkIGZvciBtYWludGVuYW5jZSByZWFzb25zIGluCitjb250YWluZXIgZWxlbWVudHMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgZm9ybWF0IG9mIHRoZSBwb3NpdGlvbiBiZWluZyBwbGF5ZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBvc2l0aW9uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBwb3NpdGlvbiBvZiB0aGUgc2VnbWVudCBiZWluZyBwbGF5ZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3IHNlZ21lbnQgc3RhcnQgbWVzc2FnZS4KK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWVzc2FnZS1wYXJzZS1zZWdtZW50LXN0YXJ0Ij48L2E+PGgzPmdzdF9tZXNzYWdlX3BhcnNlX3NlZ21lbnRfc3RhcnQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc2VnbWVudF9zdGFydCAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+ICpmb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpwb3NpdGlvbjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0V4dHJhY3RzIHRoZSBwb3NpdGlvbiBhbmQgZm9ybWF0IGZyb20gdGhlIHNlZ21lbnQgc3RhcnQgbWVzc2FnZS4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZXNzYWdlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IG9mIHR5cGUgR1NUX01FU1NBR0VfU0VHTUVOVF9TVEFSVC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5SZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBmb3JtYXQsIG9yIE5VTEwuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBvc2l0aW9uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIHBvc2l0aW9uLCBvciBOVUxMLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXNlZ21lbnQtZG9uZSI+PC9hPjxoMz5nc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICogICAgICAgIGdzdF9tZXNzYWdlX25ld19zZWdtZW50X2RvbmUgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBwb3NpdGlvbjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZSBhIG5ldyBzZWdtZW50IGRvbmUgbWVzc2FnZS4gVGhpcyBtZXNzYWdlIGlzIHBvc3RlZCBieSBlbGVtZW50cyB0aGF0CitmaW5pc2ggcGxheWJhY2sgb2YgYSBzZWdtZW50IGFzIGEgcmVzdWx0IG9mIGEgc2VnbWVudCBzZWVrLiBUaGlzIG1lc3NhZ2UKK2lzIHJlY2VpdmVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBhZnRlciBhbGwgZWxlbWVudHMgdGhhdCBwb3N0ZWQgYSBzZWdtZW50X3N0YXJ0CitoYXZlIHBvc3RlZCB0aGUgc2VnbWVudF9kb25lLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGZvcm1hdCBvZiB0aGUgcG9zaXRpb24gYmVpbmcgZG9uZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9zaXRpb248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIHBvc2l0aW9uIG9mIHRoZSBzZWdtZW50IGJlaW5nIGRvbmU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3IHNlZ21lbnQgZG9uZSBtZXNzYWdlLgorTVQgc2FmZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLXNlZ21lbnQtZG9uZSI+PC9hPjxoMz5nc3RfbWVzc2FnZV9wYXJzZV9zZWdtZW50X2RvbmUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc2VnbWVudF9kb25lICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+ICpmb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpwb3NpdGlvbjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0V4dHJhY3RzIHRoZSBwb3NpdGlvbiBhbmQgZm9ybWF0IGZyb20gdGhlIHNlZ21lbnQgc3RhcnQgbWVzc2FnZS4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZXNzYWdlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IG9mIHR5cGUgR1NUX01FU1NBR0VfU0VHTUVOVF9ET05FLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIGZvcm1hdCwgb3IgTlVMTC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9zaXRpb248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgcG9zaXRpb24sIG9yIE5VTEwuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctZHVyYXRpb24iPjwvYT48aDM+Z3N0X21lc3NhZ2VfbmV3X2R1cmF0aW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICogICAgICAgIGdzdF9tZXNzYWdlX25ld19kdXJhdGlvbiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBkdXJhdGlvbjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZSBhIG5ldyBkdXJhdGlvbiBtZXNzYWdlLiBUaGlzIG1lc3NhZ2UgaXMgcG9zdGVkIGJ5IGVsZW1lbnRzIHRoYXQKK2tub3cgdGhlIGR1cmF0aW9uIG9mIGEgc3RyZWFtIGluIGEgc3BlY2lmaWMgZm9ybWF0LiBUaGlzIG1lc3NhZ2UKK2lzIHJlY2VpdmVkIGJ5IGJpbnMgYW5kIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSB0b3RhbCBkdXJhdGlvbiBvZiBhCitwaXBlbGluZS4gRWxlbWVudHMgbWF5IHBvc3QgYSBkdXJhdGlvbiBtZXNzYWdlIHdpdGggYSBkdXJhdGlvbiBvZgorR1NUX0NMT0NLX1RJTUVfTk9ORSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBkdXJhdGlvbiBoYXMgY2hhbmdlZCBhbmQgdGhlIAorY2FjaGVkIGR1cmF0aW9uIHNob3VsZCBiZSBkaXNjYXJkZWQuIFRoZSBuZXcgZHVyYXRpb24gY2FuIHRoZW4gYmUgCityZXRyaWV2ZWQgdmlhIGEgcXVlcnkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgZm9ybWF0IG9mIHRoZSBkdXJhdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZHVyYXRpb248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIG5ldyBkdXJhdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBuZXcgZHVyYXRpb24gbWVzc2FnZS4KK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWVzc2FnZS1wYXJzZS1kdXJhdGlvbiI+PC9hPjxoMz5nc3RfbWVzc2FnZV9wYXJzZV9kdXJhdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9kdXJhdGlvbiAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gKmZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKmR1cmF0aW9uPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRXh0cmFjdHMgdGhlIGR1cmF0aW9uIGFuZCBmb3JtYXQgZnJvbSB0aGUgZHVyYXRpb24gbWVzc2FnZS4gVGhlIGR1cmF0aW9uCittaWdodCBiZSBHU1RfQ0xPQ0tfVElNRV9OT05FLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgZHVyYXRpb24gaGFzCitjaGFuZ2VkLiBBcHBsaWNhdGlvbnMgc2hvdWxkIGFsd2F5cyB1c2UgYSBxdWVyeSB0byByZXRyaWV2ZSB0aGUgZHVyYXRpb24KK29mIGEgcGlwZWxpbmUuCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBvZiB0eXBlIEdTVF9NRVNTQUdFX0RVUkFUSU9OLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIGZvcm1hdCwgb3IgTlVMTC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZHVyYXRpb248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgZHVyYXRpb24sIG9yIE5VTEwuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctbGF0ZW5jeSI+PC9hPjxoMz5nc3RfbWVzc2FnZV9uZXdfbGF0ZW5jeSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqICAgICAgICBnc3RfbWVzc2FnZV9uZXdfbGF0ZW5jeSAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitUaGlzIG1lc3NhZ2UgY2FuIGJlIHBvc3RlZCBieSBlbGVtZW50cyB3aGVuIHRoZWlyIGxhdGVuY3kgcmVxdWlyZW1lbnRzIGhhdmUKK2NoYW5nZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgbmV3IGxhdGVuY3kgbWVzc2FnZS4KK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjEyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctYXN5bmMtc3RhcnQiPjwvYT48aDM+Z3N0X21lc3NhZ2VfbmV3X2FzeW5jX3N0YXJ0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICogICAgICAgIGdzdF9tZXNzYWdlX25ld19hc3luY19zdGFydCAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1RoaXMgbWVzc2FnZSBpcyBwb3N0ZWQgYnkgZWxlbWVudHMgd2hlbiB0aGV5IHN0YXJ0IGFuIEFTWU5DIHN0YXRlIGNoYW5nZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBuZXcgYXN5bmNfc3RhcnQgbWVzc2FnZS4KK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctYXN5bmMtZG9uZSI+PC9hPjxoMz5nc3RfbWVzc2FnZV9uZXdfYXN5bmNfZG9uZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqICAgICAgICBnc3RfbWVzc2FnZV9uZXdfYXN5bmNfZG9uZSAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiByZXNldF90aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVGhlIG1lc3NhZ2UgaXMgcG9zdGVkIHdoZW4gZWxlbWVudHMgY29tcGxldGVkIGFuIEFTWU5DIHN0YXRlIGNoYW5nZS4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZXNldF90aW1lPC9jb2RlPjwvZW0+IGlzIHNldCB0byBUUlVFIHdoZW4gdGhlIGVsZW1lbnQgcmVxdWVzdHMgYSBuZXcgcnVubmluZ190aW1lCitiZWZvcmUgZ29pbmcgdG8gUExBWUlORy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVzZXRfdGltZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5pZiB0aGUgcnVubmluZ190aW1lIHNob3VsZCBiZSByZXNldDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBuZXcgYXN5bmNfZG9uZSBtZXNzYWdlLgorTVQgc2FmZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLWFzeW5jLWRvbmUiPjwvYT48aDM+Z3N0X21lc3NhZ2VfcGFyc2VfYXN5bmNfZG9uZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9hc3luY19kb25lICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICpyZXNldF90aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRXh0cmFjdCB0aGUgcmVzZXRfdGltZSBmcm9tIHRoZSBhc3luY19kb25lIG1lc3NhZ2UuCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBvZiB0eXBlIEdTVF9NRVNTQUdFX0FTWU5DX0RPTkUuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZXNldF90aW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIHJlc2V0X3RpbWUgb3IgTlVMTC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1zdGVwLXN0YXJ0Ij48L2E+PGgzPmdzdF9tZXNzYWdlX25ld19zdGVwX3N0YXJ0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICogICAgICAgIGdzdF9tZXNzYWdlX25ld19zdGVwX3N0YXJ0ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGFjdGl2ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IGFtb3VudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiByYXRlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gZmx1c2g8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBpbnRlcm1lZGlhdGU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitUaGlzIG1lc3NhZ2UgaXMgcG9zdGVkIGJ5IGVsZW1lbnRzIHdoZW4gdGhleSBhY2NlcHQgb3IgYWN0aXZhdGUgYSBuZXcgc3RlcAorZXZlbnQgZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hbW91bnQ8L2NvZGU+PC9lbT4gaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPi4gCis8L3A+Cis8cD4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hY3RpdmU8L2NvZGU+PC9lbT4gaXMgc2V0IHRvIEZBTFNFIHdoZW4gdGhlIGVsZW1lbnQgYWNjZXB0ZWQgdGhlIG5ldyBzdGVwIGV2ZW50IGFuZCBoYXMKK3F1ZXVlZCBpdCBmb3IgZXhlY3V0aW9uIGluIHRoZSBzdHJlYW1pbmcgdGhyZWFkcy4KKzwvcD4KKzxwPgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFjdGl2ZTwvY29kZT48L2VtPiBpcyBzZXQgdG8gVFJVRSB3aGVuIHRoZSBlbGVtZW50IGhhcyBhY3RpdmF0ZWQgdGhlIHN0ZXAgb3BlcmF0aW9uIGFuZAoraXMgbm93IHJlYWR5IHRvIHN0YXJ0IGV4ZWN1dGluZyB0aGUgc3RlcCBpbiB0aGUgc3RyZWFtaW5nIHRocmVhZC4gQWZ0ZXIgdGhpcworbWVzc2FnZSBpcyBlbWl0ZWQsIHRoZSBhcHBsaWNhdGlvbiBjYW4gcXVldWUgYSBuZXcgc3RlcCBvcGVyYXRpb24gaW4gdGhlCitlbGVtZW50LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWN0aXZlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmlmIHRoZSBzdGVwIGlzIGFjdGl2ZSBvciBxdWV1ZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZm9ybWF0IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hbW91bnQ8L2NvZGU+PC9lbT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YW1vdW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBhbW91bnQgb2Ygc3RlcHBlZCBkYXRhPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yYXRlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSByYXRlIG9mIHRoZSBzdGVwcGVkIGFtb3VudDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zmx1c2g8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+aXMgdGhpcyBhbiBmbHVzaGluZyBzdGVwPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbnRlcm1lZGlhdGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+aXMgdGhpcyBhbiBpbnRlcm1lZGlhdGUgc3RlcDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBuZXcgc3RlcF9zdGFydCBtZXNzYWdlLgorTVQgc2FmZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLXN0ZXAtc3RhcnQiPjwvYT48aDM+Z3N0X21lc3NhZ2VfcGFyc2Vfc3RlcF9zdGFydCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9zdGVwX3N0YXJ0ICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICphY3RpdmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+ICpmb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gKmFtb3VudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiAqcmF0ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICpmbHVzaDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICppbnRlcm1lZGlhdGU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitFeHRyYWN0IHRoZSB2YWx1ZXMgZnJvbSBzdGVwX3N0YXJ0IG1lc3NhZ2UuCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBvZiB0eXBlIEdTVF9NRVNTQUdFX1NURVBfRE9ORS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFjdGl2ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5yZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBhY3RpdmUgZmxhZy4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgZm9ybWF0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFtb3VudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5yZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBhbW91bnQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmF0ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5yZXN1bHQgbG9jYXRpb24gZm9yIHRoZSByYXRlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZsdXNoPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIGZsdXNoIGZsYWcuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW50ZXJtZWRpYXRlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIGludGVybWVkaWF0ZSBmbGFnLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI0PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctcW9zIj48L2E+PGgzPmdzdF9tZXNzYWdlX25ld19xb3MgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKiAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3FvcyAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gbGl2ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBydW5uaW5nX3RpbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gc3RyZWFtX3RpbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gdGltZXN0YW1wPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IGR1cmF0aW9uPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQSBRT1MgbWVzc2FnZSBpcyBwb3N0ZWQgb24gdGhlIGJ1cyB3aGVuZXZlciBhbiBlbGVtZW50IGRlY2lkZXMgdG8gZHJvcCBhCitidWZmZXIgYmVjYXVzZSBvZiBRb1MgcmVhc29ucyBvciB3aGVuZXZlciBpdCBjaGFuZ2VzIGl0cyBwcm9jZXNzaW5nIHN0cmF0ZWd5CitiZWNhdXNlIG9mIFFvUyByZWFzb25zIChxdWFsaXR5IGFkanVzdG1lbnRzIHN1Y2ggYXMgcHJvY2Vzc2luZyBhdCBsb3dlcgorYWNjdXJhY3kpLgorPC9wPgorPHA+CitUaGlzIG1lc3NhZ2UgY2FuIGJlIHBvc3RlZCBieSBhbiBlbGVtZW50IHRoYXQgcGVyZm9ybXMgc3luY2hyb25pc2F0aW9uIGFnYWluc3QgdGhlCitjbG9jayAobGl2ZSkgb3IgaXQgY291bGQgYmUgZHJvcHBlZCBieSBhbiBlbGVtZW50IHRoYXQgcGVyZm9ybXMgUW9TIGJlY2F1c2Ugb2YgUU9TCitldmVudHMgcmVjZWl2ZWQgZnJvbSBhIGRvd25zdHJlYW0gZWxlbWVudCAoIWxpdmUpLgorPC9wPgorPHA+Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cnVubmluZ190aW1lPC9jb2RlPjwvZW0+LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RyZWFtX3RpbWU8L2NvZGU+PC9lbT4sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50aW1lc3RhbXA8L2NvZGU+PC9lbT4sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kdXJhdGlvbjwvY29kZT48L2VtPiBzaG91bGQgYmUgc2V0IHRvIHRoZQorcmVzcGVjdGl2ZSBydW5uaW5nLXRpbWUsIHN0cmVhbS10aW1lLCB0aW1lc3RhbXAgYW5kIGR1cmF0aW9uIG9mIHRoZSAoZHJvcHBlZCkKK2J1ZmZlciB0aGF0IGdlbmVyYXRlZCB0aGUgUW9TIGV2ZW50LiBWYWx1ZXMgY2FuIGJlIGxlZnQgdG8KK0dTVF9DTE9DS19USU1FX05PTkUgd2hlbiB1bmtub3duLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGl2ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5pZiB0aGUgbWVzc2FnZSB3YXMgZ2VuZXJhdGVkIGJ5IGEgbGl2ZSBlbGVtZW50PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ydW5uaW5nX3RpbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHJ1bm5pbmcgdGltZSBvZiB0aGUgYnVmZmVyIHRoYXQgZ2VuZXJhdGVkIHRoZSBtZXNzYWdlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJlYW1fdGltZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc3RyZWFtIHRpbWUgb2YgdGhlIGJ1ZmZlciB0aGF0IGdlbmVyYXRlZCB0aGUgbWVzc2FnZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZXN0YW1wPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB0aW1lc3RhbXBzIG9mIHRoZSBidWZmZXIgdGhhdCBnZW5lcmF0ZWQgdGhlIG1lc3NhZ2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmR1cmF0aW9uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBkdXJhdGlvbiBvZiB0aGUgYnVmZmVyIHRoYXQgZ2VuZXJhdGVkIHRoZSBtZXNzYWdlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIG5ldyBxb3MgbWVzc2FnZS4KK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI5PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWVzc2FnZS1zZXQtcW9zLXZhbHVlcyI+PC9hPjxoMz5nc3RfbWVzc2FnZV9zZXRfcW9zX3ZhbHVlcyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfbWVzc2FnZV9zZXRfcW9zX3ZhbHVlcyAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gaml0dGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IHByb3BvcnRpb248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gcXVhbGl0eTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldCB0aGUgUW9TIHZhbHVlcyB0aGF0IGhhdmUgYmVlbiBjYWxjdWxhdGVkL2FuYWx5c2VkIGZyb20gdGhlIFFvUyBkYXRhCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBvZiB0eXBlIEdTVF9NRVNTQUdFX1FPUy48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmppdHRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgZGlmZmVyZW5jZSBvZiB0aGUgcnVubmluZy10aW1lIGFnYWluc3QgdGhlIGRlYWRsaW5lLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJvcG9ydGlvbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Mb25nIHRlcm0gcHJlZGljdGlvbiBvZiB0aGUgaWRlYWwgcmF0ZSByZWxhdGl2ZSB0byBub3JtYWwgcmF0ZQordG8gZ2V0IG9wdGltYWwgcXVhbGl0eS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1YWxpdHk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QW4gZWxlbWVudCBkZXBlbmRlbnQgaW50ZWdlciB2YWx1ZSB0aGF0IHNwZWNpZmllcyB0aGUgY3VycmVudAorcXVhbGl0eSBsZXZlbCBvZiB0aGUgZWxlbWVudC4gVGhlIGRlZmF1bHQgbWF4aW11bSBxdWFsaXR5IGlzIDEwMDAwMDAuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yOTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1lc3NhZ2Utc2V0LXFvcy1zdGF0cyI+PC9hPjxoMz5nc3RfbWVzc2FnZV9zZXRfcW9zX3N0YXRzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9tZXNzYWdlX3NldF9xb3Nfc3RhdHMgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gcHJvY2Vzc2VkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IGRyb3BwZWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXQgdGhlIFFvUyBzdGF0cyByZXByZXNlbnRpbmcgdGhlIGhpc3Rvcnkgb2YgdGhlIGN1cnJlbnQgY29udGludW91cyBwaXBlbGluZQorcGxheWJhY2sgcGVyaW9kLgorPC9wPgorPHA+CitXaGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT4gaXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPkdTVF9GT1JNQVRfVU5ERUZJTkVEPC9jb2RlPjwvZW0+IGJvdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRyb3BwZWQ8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcm9jZXNzZWQ8L2NvZGU+PC9lbT4gYXJlCitpbnZhbGlkLiBWYWx1ZXMgb2YgLTEgZm9yIGVpdGhlciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJvY2Vzc2VkPC9jb2RlPjwvZW0+IG9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kcm9wcGVkPC9jb2RlPjwvZW0+IG1lYW4gdW5rbm93biB2YWx1ZXMuCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBvZiB0eXBlIEdTVF9NRVNTQUdFX1FPUy48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Vbml0cyBvZiB0aGUgJ3Byb2Nlc3NlZCcgYW5kICdkcm9wcGVkJyBmaWVsZHMuIFZpZGVvIHNpbmtzIGFuZCB2aWRlbworZmlsdGVycyB3aWxsIHVzZSBHU1RfRk9STUFUX0JVRkZFUlMgKGZyYW1lcykuIEF1ZGlvIHNpbmtzIGFuZCBhdWRpbyBmaWx0ZXJzCit3aWxsIGxpa2VseSB1c2UgR1NUX0ZPUk1BVF9ERUZBVUxUIChzYW1wbGVzKS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByb2Nlc3NlZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Ub3RhbCBudW1iZXIgb2YgdW5pdHMgY29ycmVjdGx5IHByb2Nlc3NlZCBzaW5jZSB0aGUgbGFzdCBzdGF0ZQorY2hhbmdlIHRvIFJFQURZIG9yIGEgZmx1c2hpbmcgb3BlcmF0aW9uLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZHJvcHBlZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Ub3RhbCBudW1iZXIgb2YgdW5pdHMgZHJvcHBlZCBzaW5jZSB0aGUgbGFzdCBzdGF0ZSBjaGFuZ2UgdG8gUkVBRFkKK29yIGEgZmx1c2hpbmcgb3BlcmF0aW9uLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjk8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLXFvcyI+PC9hPjxoMz5nc3RfbWVzc2FnZV9wYXJzZV9xb3MgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfcW9zICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAqbGl2ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqcnVubmluZ190aW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICpzdHJlYW1fdGltZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqdGltZXN0YW1wPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICpkdXJhdGlvbjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0V4dHJhY3QgdGhlIHRpbWVzdGFtcHMgYW5kIGxpdmUgc3RhdHVzIGZyb20gdGhlIFFvUyBtZXNzYWdlLgorPC9wPgorPHA+CitUaGUgcmV0dXJuZWQgdmFsdWVzIGdpdmUgdGhlIHJ1bm5pbmdfdGltZSwgc3RyZWFtX3RpbWUsIHRpbWVzdGFtcCBhbmQKK2R1cmF0aW9uIG9mIHRoZSBkcm9wcGVkIGJ1ZmZlci4gVmFsdWVzIG9mIEdTVF9DTE9DS19USU1FX05PTkUgbWVhbiB1bmtub3duCit2YWx1ZXMuCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBvZiB0eXBlIEdTVF9NRVNTQUdFX1FPUy48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpdmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+aWYgdGhlIG1lc3NhZ2Ugd2FzIGdlbmVyYXRlZCBieSBhIGxpdmUgZWxlbWVudC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ydW5uaW5nX3RpbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHJ1bm5pbmcgdGltZSBvZiB0aGUgYnVmZmVyIHRoYXQKK2dlbmVyYXRlZCB0aGUgbWVzc2FnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJlYW1fdGltZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc3RyZWFtIHRpbWUgb2YgdGhlIGJ1ZmZlciB0aGF0CitnZW5lcmF0ZWQgdGhlIG1lc3NhZ2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZXN0YW1wPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB0aW1lc3RhbXBzIG9mIHRoZSBidWZmZXIgdGhhdAorZ2VuZXJhdGVkIHRoZSBtZXNzYWdlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmR1cmF0aW9uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBkdXJhdGlvbiBvZiB0aGUgYnVmZmVyIHRoYXQKK2dlbmVyYXRlZCB0aGUgbWVzc2FnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yOTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2UtcW9zLXZhbHVlcyI+PC9hPjxoMz5nc3RfbWVzc2FnZV9wYXJzZV9xb3NfdmFsdWVzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3Fvc192YWx1ZXMgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqaml0dGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICpwcm9wb3J0aW9uPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICpxdWFsaXR5PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRXh0cmFjdCB0aGUgUW9TIHZhbHVlcyB0aGF0IGhhdmUgYmVlbiBjYWxjdWxhdGVkL2FuYWx5c2VkIGZyb20gdGhlIFFvUyBkYXRhCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBvZiB0eXBlIEdTVF9NRVNTQUdFX1FPUy48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmppdHRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgZGlmZmVyZW5jZSBvZiB0aGUgcnVubmluZy10aW1lIGFnYWluc3QKK3RoZSBkZWFkbGluZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcm9wb3J0aW9uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkxvbmcgdGVybSBwcmVkaWN0aW9uIG9mIHRoZSBpZGVhbCByYXRlCityZWxhdGl2ZSB0byBub3JtYWwgcmF0ZSB0byBnZXQgb3B0aW1hbCBxdWFsaXR5LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1YWxpdHk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QW4gZWxlbWVudCBkZXBlbmRlbnQgaW50ZWdlciB2YWx1ZSB0aGF0CitzcGVjaWZpZXMgdGhlIGN1cnJlbnQgcXVhbGl0eSBsZXZlbCBvZiB0aGUgZWxlbWVudC4gVGhlIGRlZmF1bHQKK21heGltdW0gcXVhbGl0eSBpcyAxMDAwMDAwLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI5PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWVzc2FnZS1wYXJzZS1xb3Mtc3RhdHMiPjwvYT48aDM+Z3N0X21lc3NhZ2VfcGFyc2VfcW9zX3N0YXRzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3Fvc19zdGF0cyAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiAqZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICpwcm9jZXNzZWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gKmRyb3BwZWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitFeHRyYWN0IHRoZSBRb1Mgc3RhdHMgcmVwcmVzZW50aW5nIHRoZSBoaXN0b3J5IG9mIHRoZSBjdXJyZW50IGNvbnRpbnVvdXMKK3BpcGVsaW5lIHBsYXliYWNrIHBlcmlvZC4KKzwvcD4KKzxwPgorV2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+IGlzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5HU1RfRk9STUFUX1VOREVGSU5FRDwvY29kZT48L2VtPiBib3RoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kcm9wcGVkPC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJvY2Vzc2VkPC9jb2RlPjwvZW0+IGFyZQoraW52YWxpZC4gVmFsdWVzIG9mIC0xIGZvciBlaXRoZXIgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByb2Nlc3NlZDwvY29kZT48L2VtPiBvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZHJvcHBlZDwvY29kZT48L2VtPiBtZWFuIHVua25vd24gdmFsdWVzLgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSB2YWxpZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gb2YgdHlwZSBHU1RfTUVTU0FHRV9RT1MuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VW5pdHMgb2YgdGhlICdwcm9jZXNzZWQnIGFuZCAnZHJvcHBlZCcgZmllbGRzLgorVmlkZW8gc2lua3MgYW5kIHZpZGVvIGZpbHRlcnMgd2lsbCB1c2UgR1NUX0ZPUk1BVF9CVUZGRVJTIChmcmFtZXMpLgorQXVkaW8gc2lua3MgYW5kIGF1ZGlvIGZpbHRlcnMgd2lsbCBsaWtlbHkgdXNlIEdTVF9GT1JNQVRfREVGQVVMVAorKHNhbXBsZXMpLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByb2Nlc3NlZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Ub3RhbCBudW1iZXIgb2YgdW5pdHMgY29ycmVjdGx5IHByb2Nlc3NlZAorc2luY2UgdGhlIGxhc3Qgc3RhdGUgY2hhbmdlIHRvIFJFQURZIG9yIGEgZmx1c2hpbmcgb3BlcmF0aW9uLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRyb3BwZWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VG90YWwgbnVtYmVyIG9mIHVuaXRzIGRyb3BwZWQgc2luY2UgdGhlIGxhc3QKK3N0YXRlIGNoYW5nZSB0byBSRUFEWSBvciBhIGZsdXNoaW5nIG9wZXJhdGlvbi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yOTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0U3RydWN0dXJlQ2hhbmdlVHlwZSI+PC9hPjxoMz5lbnVtIEdzdFN0cnVjdHVyZUNoYW5nZVR5cGU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9TVFJVQ1RVUkVfQ0hBTkdFX1RZUEVfUEFEX0xJTksgICA9IDAsCisgIEdTVF9TVFJVQ1RVUkVfQ0hBTkdFX1RZUEVfUEFEX1VOTElOSyA9IDEKK30gR3N0U3RydWN0dXJlQ2hhbmdlVHlwZTsKKzwvcHJlPgorPHA+CitUaGUgdHlwZSBvZiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVNUUlVDVFVSRS1DSEFOR0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9NRVNTQUdFX1NUUlVDVFVSRV9DSEFOR0U8L2NvZGU+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVNUUlVDVFVSRS1DSEFOR0UtVFlQRS1QQUQtTElOSzpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RSVUNUVVJFX0NIQU5HRV9UWVBFX1BBRF9MSU5LPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5QYWQgbGlua2luZyBpcyBzdGFydGluZyBvciBkb25lLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVNUUlVDVFVSRS1DSEFOR0UtVFlQRS1QQUQtVU5MSU5LOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVFJVQ1RVUkVfQ0hBTkdFX1RZUEVfUEFEX1VOTElOSzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UGFkIHVubGlua2luZyBpcyBzdGFydGluZyBvciBkb25lLgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXN0cnVjdHVyZS1jaGFuZ2UiPjwvYT48aDM+Z3N0X21lc3NhZ2VfbmV3X3N0cnVjdHVyZV9jaGFuZ2UgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKiAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3N0cnVjdHVyZV9jaGFuZ2UgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdFN0cnVjdHVyZUNoYW5nZVR5cGUiIHRpdGxlPSJlbnVtIEdzdFN0cnVjdHVyZUNoYW5nZVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmVDaGFuZ2VUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqb3duZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBidXN5PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlIGEgbmV3IHN0cnVjdHVyZSBjaGFuZ2UgbWVzc2FnZS4gVGhpcyBtZXNzYWdlIGlzIHBvc3RlZCB3aGVuIHRoZQorc3RydWN0dXJlIG9mIGEgcGlwZWxpbmUgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgY2hhbmdlZCwgZm9yIGV4YW1wbGUKK3doZW4gcGFkcyBhcmUgbGlua2VkIG9yIHVubGlua2VkLgorPC9wPgorPHA+Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+IHNob3VsZCBiZSB0aGUgc2lua3BhZCB0aGF0IHVubGlua2VkIG9yIGxpbmtlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgY2hhbmdlIHR5cGUuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vd25lcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgb3duZXIgZWxlbWVudCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idXN5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPldoZXRoZXIgdGhlIHN0cnVjdHVyZSBjaGFuZ2UgaXMgYnVzeS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3IHN0cnVjdHVyZSBjaGFuZ2UgbWVzc2FnZS4KK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyLjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2Utc3RydWN0dXJlLWNoYW5nZSI+PC9hPjxoMz5nc3RfbWVzc2FnZV9wYXJzZV9zdHJ1Y3R1cmVfY2hhbmdlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0cnVjdHVyZV9jaGFuZ2UgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdFN0cnVjdHVyZUNoYW5nZVR5cGUiIHRpdGxlPSJlbnVtIEdzdFN0cnVjdHVyZUNoYW5nZVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmVDaGFuZ2VUeXBlPC9zcGFuPjwvYT4gKnR5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKipvd25lcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICpidXN5PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRXh0cmFjdHMgdGhlIGNoYW5nZSB0eXBlIGFuZCBjb21wbGV0aW9uIHN0YXR1cyBmcm9tIHRoZSBHc3RNZXNzYWdlLgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSB2YWxpZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gb2YgdHlwZSBHU1RfTUVTU0FHRV9TVFJVQ1RVUkVfQ0hBTkdFLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIHBvaW50ZXIgdG8gaG9sZCB0aGUgY2hhbmdlIHR5cGUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm93bmVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBvd25lciBlbGVtZW50IG9mIHRoZQorbWVzc2FnZSBzb3VyY2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVzeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gaG9sZCB3aGV0aGVyIHRoZSBjaGFuZ2UgaXMgaW4KK3Byb2dyZXNzIG9yIGhhcyBiZWVuIGNvbXBsZXRlZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXJlcXVlc3Qtc3RhdGUiPjwvYT48aDM+Z3N0X21lc3NhZ2VfbmV3X3JlcXVlc3Rfc3RhdGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKiAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3JlcXVlc3Rfc3RhdGUgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGU8L3NwYW4+PC9hPiBzdGF0ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1RoaXMgbWVzc2FnZSBjYW4gYmUgcG9zdGVkIGJ5IGVsZW1lbnRzIHdoZW4gdGhleSB3YW50IHRvIGhhdmUgdGhlaXIgc3RhdGUKK2NoYW5nZWQuIEEgdHlwaWNhbCB1c2UgY2FzZSB3b3VsZCBiZSBhbiBhdWRpbyBzZXJ2ZXIgdGhhdCB3YW50cyB0byBwYXVzZSB0aGUKK3BpcGVsaW5lIGJlY2F1c2UgYSBoaWdoZXIgcHJpb3JpdHkgc3RyZWFtIGlzIGJlaW5nIHBsYXllZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhdGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIG5ldyByZXF1ZXN0ZWQgc3RhdGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3IHJlcXVzdCBzdGF0ZSBtZXNzYWdlLgorTVQgc2FmZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjM8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLXJlcXVlc3Qtc3RhdGUiPjwvYT48aDM+Z3N0X21lc3NhZ2VfcGFyc2VfcmVxdWVzdF9zdGF0ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9yZXF1ZXN0X3N0YXRlICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlPC9zcGFuPjwvYT4gKnN0YXRlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRXh0cmFjdCB0aGUgcmVxdWVzdGVkIHN0YXRlIGZyb20gdGhlIHJlcXVlc3Rfc3RhdGUgbWVzc2FnZS4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZXNzYWdlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IG9mIHR5cGUgR1NUX01FU1NBR0VfUkVRVUVTVF9TVEFURS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXRlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIHJlcXVlc3RlZCBzdGF0ZSBvciBOVUxMLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0U3RyZWFtU3RhdHVzVHlwZSI+PC9hPjxoMz5lbnVtIEdzdFN0cmVhbVN0YXR1c1R5cGU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfQ1JFQVRFICAgPSAwLAorICBHU1RfU1RSRUFNX1NUQVRVU19UWVBFX0VOVEVSICAgID0gMSwKKyAgR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9MRUFWRSAgICA9IDIsCisgIEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfREVTVFJPWSAgPSAzLAorCisgIEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfU1RBUlQgICAgPSA4LAorICBHU1RfU1RSRUFNX1NUQVRVU19UWVBFX1BBVVNFICAgID0gOSwKKyAgR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9TVE9QICAgICA9IDEwCit9IEdzdFN0cmVhbVN0YXR1c1R5cGU7Cis8L3ByZT4KKzxwPgorVGhlIHR5cGUgb2YgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1TVFJFQU0tU1RBVFVTOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTUVTU0FHRV9TVFJFQU1fU1RBVFVTPC9jb2RlPjwvYT4uIFRoZSBzdHJlYW0gc3RhdHVzIG1lc3NhZ2VzIGluZm9ybSB0aGUKK2FwcGxpY2F0aW9uIG9mIG5ldyBzdHJlYW1pbmcgdGhyZWFkcyBhbmQgdGhlaXIgc3RhdHVzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtU1RSRUFNLVNUQVRVUy1UWVBFLUNSRUFURTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RSRUFNX1NUQVRVU19UWVBFX0NSRUFURTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBuZXcgdGhyZWFkIG5lZWQgdG8gYmUgY3JlYXRlZC4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1TVFJFQU0tU1RBVFVTLVRZUEUtRU5URVI6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9FTlRFUjwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSB0aHJlYWQgZW50ZXJlZCBpdHMgbG9vcCBmdW5jdGlvbgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVNUUkVBTS1TVEFUVVMtVFlQRS1MRUFWRTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RSRUFNX1NUQVRVU19UWVBFX0xFQVZFPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHRocmVhZCBsZWZ0IGl0cyBsb29wIGZ1bmN0aW9uCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtU1RSRUFNLVNUQVRVUy1UWVBFLURFU1RST1k6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9ERVNUUk9ZPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHRocmVhZCBpcyBkZXN0cm95ZWQKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1TVFJFQU0tU1RBVFVTLVRZUEUtU1RBUlQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9TVEFSVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSB0aHJlYWQgaXMgc3RhcnRlZAorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVNUUkVBTS1TVEFUVVMtVFlQRS1QQVVTRTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RSRUFNX1NUQVRVU19UWVBFX1BBVVNFPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHRocmVhZCBpcyBwYXVzZWQKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1TVFJFQU0tU1RBVFVTLVRZUEUtU1RPUDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RSRUFNX1NUQVRVU19UWVBFX1NUT1A8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgdGhyZWFkIGlzIHN0b3BwZWQKKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1zdHJlYW0tc3RhdHVzIj48L2E+PGgzPmdzdF9tZXNzYWdlX25ld19zdHJlYW1fc3RhdHVzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICogICAgICAgIGdzdF9tZXNzYWdlX25ld19zdHJlYW1fc3RhdHVzICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RTdHJlYW1TdGF0dXNUeXBlIiB0aXRsZT0iZW51bSBHc3RTdHJlYW1TdGF0dXNUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtU3RhdHVzVHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKm93bmVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlIGEgbmV3IHN0cmVhbSBzdGF0dXMgbWVzc2FnZS4gVGhpcyBtZXNzYWdlIGlzIHBvc3RlZCB3aGVuIGEgc3RyZWFtaW5nCit0aHJlYWQgaXMgY3JlYXRlZC9kZXN0cm95ZWQgb3Igd2hlbiB0aGUgc3RhdGUgY2hhbmdlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIHN0cmVhbSBzdGF0dXMgdHlwZS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm93bmVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBvd25lciBlbGVtZW50IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3IHN0cmVhbSBzdGF0dXMgbWVzc2FnZS4KK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI0LjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2Utc3RyZWFtLXN0YXR1cyI+PC9hPjxoMz5nc3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1fc3RhdHVzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9zdGF0dXMgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdFN0cmVhbVN0YXR1c1R5cGUiIHRpdGxlPSJlbnVtIEdzdFN0cmVhbVN0YXR1c1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW1TdGF0dXNUeXBlPC9zcGFuPjwvYT4gKnR5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKipvd25lcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0V4dHJhY3RzIHRoZSBzdHJlYW0gc3RhdHVzIHR5cGUgYW5kIG93bmVyIHRoZSBHc3RNZXNzYWdlLiBUaGUgcmV0dXJuZWQKK293bmVyIHJlbWFpbnMgdmFsaWQgZm9yIGFzIGxvbmcgYXMgdGhlIHJlZmVyZW5jZSB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPiBpcyB2YWxpZCBhbmQKK3Nob3VsZCB0aHVzIG5vdCBiZSB1bnJlZmZlZC4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZXNzYWdlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IG9mIHR5cGUgR1NUX01FU1NBR0VfU1RSRUFNX1NUQVRVUy48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBwb2ludGVyIHRvIGhvbGQgdGhlIHN0YXR1cyB0eXBlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vd25lcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgb3duZXIgZWxlbWVudCBvZiB0aGUgbWVzc2FnZSBzb3VyY2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI0LjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1lc3NhZ2Utc2V0LXN0cmVhbS1zdGF0dXMtb2JqZWN0Ij48L2E+PGgzPmdzdF9tZXNzYWdlX3NldF9zdHJlYW1fc3RhdHVzX29iamVjdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfbWVzc2FnZV9zZXRfc3RyZWFtX3N0YXR1c19vYmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb25maWd1cmVzIHRoZSBvYmplY3QgaGFuZGxpbmcgdGhlIHN0cmVhbWluZyB0aHJlYWQuIFRoaXMgaXMgdXN1YWxseSBhCitHc3RUYXNrIG9iamVjdCBidXQgb3RoZXIgb2JqZWN0cyBtaWdodCBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSB2YWxpZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlIiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gb2YgdHlwZSBHU1RfTUVTU0FHRV9TVFJFQU1fU1RBVFVTLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBvYmplY3QgY29udHJvbGxpbmcgdGhlIHN0cmVhbWluZzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZXNzYWdlLWdldC1zdHJlYW0tc3RhdHVzLW9iamVjdCI+PC9hPjxoMz5nc3RfbWVzc2FnZV9nZXRfc3RyZWFtX3N0YXR1c19vYmplY3QgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKiAgICAgIGdzdF9tZXNzYWdlX2dldF9zdHJlYW1fc3RhdHVzX29iamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0V4dHJhY3RzIHRoZSBvYmplY3QgbWFuYWdpbmcgdGhlIHN0cmVhbWluZyB0aHJlYWQgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZXNzYWdlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IG9mIHR5cGUgR1NUX01FU1NBR0VfU1RSRUFNX1NUQVRVUy48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIEdWYWx1ZSBjb250YWluaW5nIHRoZSBvYmplY3QgdGhhdCBtYW5hZ2VzIHRoZSBzdHJlYW1pbmcgdGhyZWFkLgorVGhpcyBvYmplY3QgaXMgdXN1YWxseSBvZiB0eXBlIEdzdFRhc2sgYnV0IG90aGVyIHR5cGVzIGNhbiBiZSBhZGRlZCBpbiB0aGUKK2Z1dHVyZS4gVGhlIG9iamVjdCByZW1haW5zIHZhbGlkIGFzIGxvbmcgYXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9lbT4gaXMgdmFsaWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UHJvZ3Jlc3NUeXBlIj48L2E+PGgzPmVudW0gR3N0UHJvZ3Jlc3NUeXBlPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGVudW0geworICBHU1RfUFJPR1JFU1NfVFlQRV9TVEFSVCAgICA9IDAsCisgIEdTVF9QUk9HUkVTU19UWVBFX0NPTlRJTlVFID0gMSwKKyAgR1NUX1BST0dSRVNTX1RZUEVfQ09NUExFVEUgPSAyLAorICBHU1RfUFJPR1JFU1NfVFlQRV9DQU5DRUxFRCA9IDMsCisgIEdTVF9QUk9HUkVTU19UWVBFX0VSUk9SICAgID0gNCwKK30gR3N0UHJvZ3Jlc3NUeXBlOworPC9wcmU+Cis8cD4KK1RoZSB0eXBlIG9mIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtUFJPR1JFU1M6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9NRVNTQUdFX1BST0dSRVNTPC9jb2RlPjwvYT4uIFRoZSBwcm9ncmVzcyBtZXNzYWdlcyBpbmZvcm0gdGhlCithcHBsaWNhdGlvbiBvZiB0aGUgc3RhdHVzIG9mIGFzc3luY2hyb25vdXMgdGFza3MuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1QUk9HUkVTUy1UWVBFLVNUQVJUOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9QUk9HUkVTU19UWVBFX1NUQVJUPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIG5ldyB0YXNrIHN0YXJ0ZWQuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUFJPR1JFU1MtVFlQRS1DT05USU5VRTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUFJPR1JFU1NfVFlQRV9DT05USU5VRTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSB0YXNrIGNvbXBsZXRlZCBhbmQgYSBuZXcgb25lIGNvbnRpbnVlcy4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1QUk9HUkVTUy1UWVBFLUNPTVBMRVRFOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9QUk9HUkVTU19UWVBFX0NPTVBMRVRFPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIHRhc2sgY29tcGxldGVkLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVBST0dSRVNTLVRZUEUtQ0FOQ0VMRUQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BST0dSRVNTX1RZUEVfQ0FOQ0VMRUQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgdGFzayB3YXMgY2FuY2VsZWQuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUFJPR1JFU1MtVFlQRS1FUlJPUjpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUFJPR1JFU1NfVFlQRV9FUlJPUjwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSB0YXNrIGNhdXNlZCBhbiBlcnJvci4gQW4gZXJyb3IgbWVzc2FnZSBpcyBhbHNvCisgICAgICAgICBwb3N0ZWQgb24gdGhlIGJ1cy4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzM8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1wcm9ncmVzcyI+PC9hPjxoMz5nc3RfbWVzc2FnZV9uZXdfcHJvZ3Jlc3MgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKiAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3Byb2dyZXNzICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdFByb2dyZXNzVHlwZSIgdGl0bGU9ImVudW0gR3N0UHJvZ3Jlc3NUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UHJvZ3Jlc3NUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpjb2RlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRleHQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitQcm9ncmVzcyBtZXNzYWdlcyBhcmUgcG9zdGVkIGJ5IGVsZW1lbnRzIHdoZW4gdGhleSB1c2UgYW4gYXN5bmNocm9ub3VzIHRhc2sKK3RvIHBlcmZvcm0gYWN0aW9ucyB0cmlnZ2VyZWQgYnkgYSBzdGF0ZSBjaGFuZ2UuCis8L3A+Cis8cD4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb2RlPC9jb2RlPjwvZW0+IGNvbnRhaW5zIGEgd2VsbCBkZWZpbmVkIHN0cmluZyBkZXNjcmliaW5nIHRoZSBhY3Rpb24uCis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGVzdDwvY29kZT48L2VtPiBzaG91bGQgY29udGFpbiBhIHVzZXIgdmlzaWJsZSBzdHJpbmcgZGV0YWlsaW5nIHRoZSBjdXJyZW50IGFjdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RQcm9ncmVzc1R5cGUiIHRpdGxlPSJlbnVtIEdzdFByb2dyZXNzVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFByb2dyZXNzVHlwZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvZGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBwcm9ncmVzcyBjb2RlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50ZXh0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmZyZWUsIHVzZXIgdmlzaWJsZSB0ZXh0IGRlc2NyaWJpbmcgdGhlIHByb2dyZXNzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIG5ldyBxb3MgbWVzc2FnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzM8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLXByb2dyZXNzIj48L2E+PGgzPmdzdF9tZXNzYWdlX3BhcnNlX3Byb2dyZXNzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3Byb2dyZXNzICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSIgdGl0bGU9InN0cnVjdCBHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdFByb2dyZXNzVHlwZSIgdGl0bGU9ImVudW0gR3N0UHJvZ3Jlc3NUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UHJvZ3Jlc3NUeXBlPC9zcGFuPjwvYT4gKnR5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKmNvZGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKnRleHQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitQYXJzZXMgdGhlIHByb2dyZXNzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29kZTwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRleHQ8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBvZiB0eXBlIEdTVF9NRVNTQUdFX1BST0dSRVNTLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5sb2NhdGlvbiBmb3IgdGhlIHR5cGUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29kZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5sb2NhdGlvbiBmb3IgdGhlIGNvZGUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGV4dDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5sb2NhdGlvbiBmb3IgdGhlIHRleHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzM8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2Uuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0TWV0YS5odG1sIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0TWV0YS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZTQxMjgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RNZXRhLmh0bWwKQEAgLTAsMCArMSwzMDEgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5Hc3RNZXRhPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sIiB0aXRsZT0iR3N0TWluaU9iamVjdCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNnc3RyZWFtZXItR3N0TWV0YS5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3RNZXRhLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RNZXRhIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLUdzdE1ldGEudG9wX29mX3BhZ2UiPjwvYT5Hc3RNZXRhPC9zcGFuPjwvaDI+Cis8cD5Hc3RNZXRhIOKAlCBCdWZmZXIgbWV0YWRhdGE8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0TWV0YS5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisjaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OworCitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YSI+R3N0TWV0YTwvYT47CitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFJbmZvIiB0aXRsZT0ic3RydWN0IEdzdE1ldGFJbmZvIj5Hc3RNZXRhSW5mbzwvYT47CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dTVC1NRVRBLVRSQUNFLU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9NRVRBX1RSQUNFX05BTUUiPkdTVF9NRVRBX1RSQUNFX05BTUU8L2E+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhSW5pdEZ1bmN0aW9uIiB0aXRsZT0iR3N0TWV0YUluaXRGdW5jdGlvbiAoKSI+KkdzdE1ldGFJbml0RnVuY3Rpb248L2E+KSAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhIiB0aXRsZT0ic3RydWN0IEdzdE1ldGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhPC9zcGFuPjwvYT4gKm1ldGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBwYXJhbXM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhRnJlZUZ1bmN0aW9uIiB0aXRsZT0iR3N0TWV0YUZyZWVGdW5jdGlvbiAoKSI+KkdzdE1ldGFGcmVlRnVuY3Rpb248L2E+KSAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhIiB0aXRsZT0ic3RydWN0IEdzdE1ldGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhPC9zcGFuPjwvYT4gKm1ldGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhQ29weUZ1bmN0aW9uIiB0aXRsZT0iR3N0TWV0YUNvcHlGdW5jdGlvbiAoKSI+KkdzdE1ldGFDb3B5RnVuY3Rpb248L2E+KSAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhIiB0aXRsZT0ic3RydWN0IEdzdE1ldGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhPC9zcGFuPjwvYT4gKm1ldGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YVRyYW5zZm9ybUZ1bmN0aW9uIiB0aXRsZT0iR3N0TWV0YVRyYW5zZm9ybUZ1bmN0aW9uICgpIj4qR3N0TWV0YVRyYW5zZm9ybUZ1bmN0aW9uPC9hPikgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICp0cmFuc2J1ZjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhIiB0aXRsZT0ic3RydWN0IEdzdE1ldGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhPC9zcGFuPjwvYT4gKm1ldGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGRhdGE8L2NvZGU+PC9lbT4pOworY29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YUluZm8iIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YUluZm8iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWV0YUluZm88L3NwYW4+PC9hPiAqIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI2dzdC1tZXRhLXJlZ2lzdGVyIiB0aXRsZT0iZ3N0X21ldGFfcmVnaXN0ZXIgKCkiPmdzdF9tZXRhX3JlZ2lzdGVyPC9hPiAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmFwaTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICppbXBsPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhSW5pdEZ1bmN0aW9uIiB0aXRsZT0iR3N0TWV0YUluaXRGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGFJbml0RnVuY3Rpb248L3NwYW4+PC9hPiBpbml0X2Z1bmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YUZyZWVGdW5jdGlvbiIgdGl0bGU9IkdzdE1ldGFGcmVlRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhRnJlZUZ1bmN0aW9uPC9zcGFuPjwvYT4gZnJlZV9mdW5jPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFDb3B5RnVuY3Rpb24iIHRpdGxlPSJHc3RNZXRhQ29weUZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YUNvcHlGdW5jdGlvbjwvc3Bhbj48L2E+IGNvcHlfZnVuYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhVHJhbnNmb3JtRnVuY3Rpb24iIHRpdGxlPSJHc3RNZXRhVHJhbnNmb3JtRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhVHJhbnNmb3JtRnVuY3Rpb248L3NwYW4+PC9hPiB0cmFuc2Zvcm1fZnVuYzwvY29kZT48L2VtPik7Citjb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhSW5mbyIgdGl0bGU9InN0cnVjdCBHc3RNZXRhSW5mbyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXRhSW5mbzwvc3Bhbj48L2E+ICogPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjZ3N0LW1ldGEtZ2V0LWluZm8iIHRpdGxlPSJnc3RfbWV0YV9nZXRfaW5mbyAoKSI+Z3N0X21ldGFfZ2V0X2luZm88L2E+ICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqaW1wbDwvY29kZT48L2VtPik7Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdE1ldGEuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitMYXN0IHJldmlld2VkIG9uIERlY2VtYmVyIDE3dGgsIDIwMDkgKDAuMTAuMjYpCis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RNZXRhLmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RNZXRhIj48L2E+PGgzPnN0cnVjdCBHc3RNZXRhPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0TWV0YSB7CisgIGNvbnN0IEdzdE1ldGFJbmZvICppbmZvOworfTsKKzwvcHJlPgorPHA+CitCYXNlIHN0cnVjdHVyZSBmb3IgbWV0YWRhdGEuIEN1c3RvbSBtZXRhZGF0YSB3aWxsIHB1dCB0aGlzIHN0cnVjdHVyZQorYXMgdGhlIGZpcnN0IG1lbWJlciBvZiB0aGVpciBzdHJ1Y3R1cmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y29uc3TCoDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFJbmZvIiB0aXRsZT0ic3RydWN0IEdzdE1ldGFJbmZvIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YUluZm88L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdE1ldGEuaW5mbyI+PC9hPmluZm88L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnBvaW50ZXIgdG8gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFJbmZvIiB0aXRsZT0ic3RydWN0IEdzdE1ldGFJbmZvIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YUluZm88L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdE1ldGFJbmZvIj48L2E+PGgzPnN0cnVjdCBHc3RNZXRhSW5mbzwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdE1ldGFJbmZvIHsKKyAgR1F1YXJrICAgICAgICAgICAgICAgICAgICAgYXBpOworICBHVHlwZSAgICAgICAgICAgICAgICAgICAgICB0eXBlOworICBnc2l6ZSAgICAgICAgICAgICAgICAgICAgICBzaXplOworCisgIEdzdE1ldGFJbml0RnVuY3Rpb24gICAgICAgIGluaXRfZnVuYzsKKyAgR3N0TWV0YUZyZWVGdW5jdGlvbiAgICAgICAgZnJlZV9mdW5jOworICBHc3RNZXRhQ29weUZ1bmN0aW9uICAgICAgICBjb3B5X2Z1bmM7CisgIEdzdE1ldGFUcmFuc2Zvcm1GdW5jdGlvbiAgIHRyYW5zZm9ybV9mdW5jOworfTsKKzwvcHJlPgorPHA+CitUaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YUluZm8iIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YUluZm8iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhSW5mbzwvc3Bhbj48L2E+IHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IGEgc3BlY2lmaWMgbWV0YWRhdGEKK3N0cnVjdHVyZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdE1ldGFJbmZvLmFwaSI+PC9hPmFwaTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGFnIGluZGVudGlmeWluZyB0aGUgbWV0YWRhdGEgc3RydWN0dXJlIGFuZCBhcGk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RNZXRhSW5mby50eXBlIj48L2E+dHlwZTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dHlwZSBpbmRlbnRpZnlpbmcgdGhlIGltcGxlbWVudG9yIG9mIHRoZSBhcGk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWV0YUluZm8uc2l6ZSI+PC9hPnNpemU8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnNpemUgb2YgdGhlIG1ldGFkYXRhPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFJbml0RnVuY3Rpb24iIHRpdGxlPSJHc3RNZXRhSW5pdEZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YUluaXRGdW5jdGlvbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RNZXRhSW5mby5pbml0LWZ1bmMiPjwvYT5pbml0X2Z1bmM8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPmZ1bmN0aW9uIGZvciBpbml0aWFsaXppbmcgdGhlIG1ldGFkYXRhPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFGcmVlRnVuY3Rpb24iIHRpdGxlPSJHc3RNZXRhRnJlZUZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YUZyZWVGdW5jdGlvbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RNZXRhSW5mby5mcmVlLWZ1bmMiPjwvYT5mcmVlX2Z1bmM8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPmZ1bmN0aW9uIGZvciBmcmVlaW5nIHRoZSBtZXRhZGF0YTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhQ29weUZ1bmN0aW9uIiB0aXRsZT0iR3N0TWV0YUNvcHlGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGFDb3B5RnVuY3Rpb248L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWV0YUluZm8uY29weS1mdW5jIj48L2E+Y29weV9mdW5jPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5mdW5jdGlvbiBmb3IgY29weWluZyB0aGUgbWV0YWRhdGE8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YVRyYW5zZm9ybUZ1bmN0aW9uIiB0aXRsZT0iR3N0TWV0YVRyYW5zZm9ybUZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YVRyYW5zZm9ybUZ1bmN0aW9uPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdE1ldGFJbmZvLnRyYW5zZm9ybS1mdW5jIj48L2E+dHJhbnNmb3JtX2Z1bmM8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPmZ1bmN0aW9uIGZvciB0cmFuc2Zvcm1pbmcgdGhlIG1ldGFkYXRhPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULU1FVEEtVFJBQ0UtTkFNRTpDQVBTIj48L2E+PGgzPkdTVF9NRVRBX1RSQUNFX05BTUU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX01FVEFfVFJBQ0VfTkFNRSAgICAgICAgICAgIkdzdE1ldGEiCis8L3ByZT4KKzxwPgorVGhlIG5hbWUgdXNlZCBmb3IgdHJhY2luZyBtZW1vcnkgYWxsb2NhdGlvbnMuCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdE1ldGFJbml0RnVuY3Rpb24iPjwvYT48aDM+R3N0TWV0YUluaXRGdW5jdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAoKkdzdE1ldGFJbml0RnVuY3Rpb24pICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGE8L3NwYW4+PC9hPiAqbWV0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHBhcmFtczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRnVuY3Rpb24gY2FsbGVkIHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1ldGE8L2NvZGU+PC9lbT4gaXMgaW5pdGlhbGl6ZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YSIgdGl0bGU9InN0cnVjdCBHc3RNZXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhcmFtczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGUgaW5pdCBmdW5jdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdE1ldGFGcmVlRnVuY3Rpb24iPjwvYT48aDM+R3N0TWV0YUZyZWVGdW5jdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICAoKkdzdE1ldGFGcmVlRnVuY3Rpb24pICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGE8L3NwYW4+PC9hPiAqbWV0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRnVuY3Rpb24gY2FsbGVkIHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1ldGE8L2NvZGU+PC9lbT4gaXMgZnJlZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YSIgdGl0bGU9InN0cnVjdCBHc3RNZXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RNZXRhQ29weUZ1bmN0aW9uIj48L2E+PGgzPkdzdE1ldGFDb3B5RnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgKCpHc3RNZXRhQ29weUZ1bmN0aW9uKSAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhIiB0aXRsZT0ic3RydWN0IEdzdE1ldGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhPC9zcGFuPjwvYT4gKm1ldGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RNZXRhVHJhbnNmb3JtRnVuY3Rpb24iPjwvYT48aDM+R3N0TWV0YVRyYW5zZm9ybUZ1bmN0aW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgICgqR3N0TWV0YVRyYW5zZm9ybUZ1bmN0aW9uKSAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKnRyYW5zYnVmPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGE8L3NwYW4+PC9hPiAqbWV0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0Z1bmN0aW9uIGNhbGxlZCBmb3IgZWFjaCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWV0YTwvY29kZT48L2VtPiBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+IGFzIGEgcmVzdWx0IG9mIHBlcmZvcm1pbmcgYQordHJhbnNmb3JtYXRpb24gb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRyYW5zYnVmPC9jb2RlPjwvZW0+LiBBZGRpdGlvbmFsIHR5cGUgc3BlY2lmaWMgdHJhbnNmb3JtIGRhdGEKK2lzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCis8L3A+Cis8cD4KK0ltcGxlbWVudGF0aW9ucyBzaG91bGQgY2hlY2sgdGhlIHR5cGUgb2YgdGhlIHRyYW5zZm9ybSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPiBhbmQgcGFyc2UKK2FkZGl0aW9uYWwgdHlwZSBzcGVjaWZpYyBmaWVsZCB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIHBlcmZvcm0gdGhlIHRyYW5zZm9ybS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50cmFuc2J1ZjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1ldGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhIiB0aXRsZT0ic3RydWN0IEdzdE1ldGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50cmFuc2Zvcm0gc3BlY2lmaWMgZGF0YS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWV0YS1yZWdpc3RlciI+PC9hPjxoMz5nc3RfbWV0YV9yZWdpc3RlciAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YUluZm8iIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YUluZm8iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWV0YUluZm88L3NwYW4+PC9hPiAqIGdzdF9tZXRhX3JlZ2lzdGVyICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqYXBpPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmltcGw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFJbml0RnVuY3Rpb24iIHRpdGxlPSJHc3RNZXRhSW5pdEZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YUluaXRGdW5jdGlvbjwvc3Bhbj48L2E+IGluaXRfZnVuYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhRnJlZUZ1bmN0aW9uIiB0aXRsZT0iR3N0TWV0YUZyZWVGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGFGcmVlRnVuY3Rpb248L3NwYW4+PC9hPiBmcmVlX2Z1bmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YUNvcHlGdW5jdGlvbiIgdGl0bGU9IkdzdE1ldGFDb3B5RnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhQ29weUZ1bmN0aW9uPC9zcGFuPjwvYT4gY29weV9mdW5jPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFUcmFuc2Zvcm1GdW5jdGlvbiIgdGl0bGU9IkdzdE1ldGFUcmFuc2Zvcm1GdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGFUcmFuc2Zvcm1GdW5jdGlvbjwvc3Bhbj48L2E+IHRyYW5zZm9ybV9mdW5jPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1ldGEtZ2V0LWluZm8iPjwvYT48aDM+Z3N0X21ldGFfZ2V0X2luZm8gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFJbmZvIiB0aXRsZT0ic3RydWN0IEdzdE1ldGFJbmZvIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1ldGFJbmZvPC9zcGFuPjwvYT4gKiBnc3RfbWV0YV9nZXRfaW5mbyAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmltcGw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitMb29rdXAgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgbWV0YSBpbmZvIHN0cnVjdHVyZSBieSBpdHMgaW1wbGVtZW50b3IgbmFtZQorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmltcGw8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW1wbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmFtZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YUluZm8iIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YUluZm8iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhSW5mbzwvc3Bhbj48L2E+IHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmltcGw8L2NvZGU+PC9lbT4gb3IgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5OVUxMPC9zcGFuPjwvYT4gd2hlbiBubyBzdWNoIG1ldGFpbmZvCitleGlzdHMuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1OWM3ZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbApAQCAtMCwwICsxLDczMyBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdzdE1pbmlPYmplY3Q8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sIiB0aXRsZT0iR3N0TWV0YSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RPYmplY3QuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNnc3RyZWFtZXItR3N0TWluaU9iamVjdC5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3RNaW5pT2JqZWN0LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QudG9wX29mX3BhZ2UiPjwvYT5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvaDI+Cis8cD5Hc3RNaW5pT2JqZWN0IOKAlCBMaWdodHdlaWdodCBiYXNlIGNsYXNzIGZvciB0aGUgR1N0cmVhbWVyIG9iamVjdCBoaWVyYXJjaHk8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisjaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OworCitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+R3N0TWluaU9iamVjdDwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3RGbGFncyIgdGl0bGU9ImVudW0gR3N0TWluaU9iamVjdEZsYWdzIj5Hc3RNaW5pT2JqZWN0RmxhZ3M8L2E+OworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiAqICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdENvcHlGdW5jdGlvbiIgdGl0bGU9IkdzdE1pbmlPYmplY3RDb3B5RnVuY3Rpb24gKCkiPipHc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uPC9hPikgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+ICpvYmo8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdERpc3Bvc2VGdW5jdGlvbiIgdGl0bGU9IkdzdE1pbmlPYmplY3REaXNwb3NlRnVuY3Rpb24gKCkiPipHc3RNaW5pT2JqZWN0RGlzcG9zZUZ1bmN0aW9uPC9hPikgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+ICpvYmo8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdEZyZWVGdW5jdGlvbiIgdGl0bGU9IkdzdE1pbmlPYmplY3RGcmVlRnVuY3Rpb24gKCkiPipHc3RNaW5pT2JqZWN0RnJlZUZ1bmN0aW9uPC9hPikgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+ICpvYmo8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdFdlYWtOb3RpZnkiIHRpdGxlPSJHc3RNaW5pT2JqZWN0V2Vha05vdGlmeSAoKSI+KkdzdE1pbmlPYmplY3RXZWFrTm90aWZ5PC9hPikgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGRhdGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+ICp3aGVyZV90aGVfbWluaV9vYmplY3Rfd2FzPC9jb2RlPjwvZW0+KTsKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR1NULU1JTkktT0JKRUNULVRZUEU6Q0FQUyIgdGl0bGU9IkdTVF9NSU5JX09CSkVDVF9UWVBFKCkiPkdTVF9NSU5JX09CSkVDVF9UWVBFPC9hPiAgICAgICAgICAgICAgICAob2JqKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHU1QtTUlOSS1PQkpFQ1QtRkxBR1M6Q0FQUyIgdGl0bGU9IkdTVF9NSU5JX09CSkVDVF9GTEFHUygpIj5HU1RfTUlOSV9PQkpFQ1RfRkxBR1M8L2E+ICAgICAgICAgICAgICAgKG9iaikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR1NULU1JTkktT0JKRUNULUZMQUctSVMtU0VUOkNBUFMiIHRpdGxlPSJHU1RfTUlOSV9PQkpFQ1RfRkxBR19JU19TRVQoKSI+R1NUX01JTklfT0JKRUNUX0ZMQUdfSVNfU0VUPC9hPiAgICAgICAgIChvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHU1QtTUlOSS1PQkpFQ1QtRkxBRy1TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9NSU5JX09CSkVDVF9GTEFHX1NFVCgpIj5HU1RfTUlOSV9PQkpFQ1RfRkxBR19TRVQ8L2E+ICAgICAgICAgICAgKG9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1NSU5JLU9CSkVDVC1GTEFHLVVOU0VUOkNBUFMiIHRpdGxlPSJHU1RfTUlOSV9PQkpFQ1RfRkxBR19VTlNFVCgpIj5HU1RfTUlOSV9PQkpFQ1RfRkxBR19VTlNFVDwvYT4gICAgICAgICAgKG9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1NSU5JLU9CSkVDVC1SRUZDT1VOVDpDQVBTIiB0aXRsZT0iR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UKCkiPkdTVF9NSU5JX09CSkVDVF9SRUZDT1VOVDwvYT4gICAgICAgICAgICAob2JqKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHU1QtTUlOSS1PQkpFQ1QtUkVGQ09VTlQtVkFMVUU6Q0FQUyIgdGl0bGU9IkdTVF9NSU5JX09CSkVDVF9SRUZDT1VOVF9WQUxVRSgpIj5HU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUU8L2E+ICAgICAgKG9iaikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR1NULU1JTkktT0JKRUNULVNJWkU6Q0FQUyIgdGl0bGU9IkdTVF9NSU5JX09CSkVDVF9TSVpFKCkiPkdTVF9NSU5JX09CSkVDVF9TSVpFPC9hPiAgICAgICAgICAgICAgICAob2JqKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHU1QtREVGSU5FLU1JTkktT0JKRUNULVRZUEU6Q0FQUyIgdGl0bGU9IkdTVF9ERUZJTkVfTUlOSV9PQkpFQ1RfVFlQRSgpIj5HU1RfREVGSU5FX01JTklfT0JKRUNUX1RZUEU8L2E+ICAgICAgICAgKFR5cGVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV9uYW1lKQorPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtaW5pdCIgdGl0bGU9ImdzdF9taW5pX29iamVjdF9pbml0ICgpIj5nc3RfbWluaV9vYmplY3RfaW5pdDwvYT4gICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKm1pbmlfb2JqZWN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+ICogICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC1jb3B5IiB0aXRsZT0iZ3N0X21pbmlfb2JqZWN0X2NvcHkgKCkiPmdzdF9taW5pX29iamVjdF9jb3B5PC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiAqbWluaV9vYmplY3Q8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtaXMtd3JpdGFibGUiIHRpdGxlPSJnc3RfbWluaV9vYmplY3RfaXNfd3JpdGFibGUgKCkiPmdzdF9taW5pX29iamVjdF9pc193cml0YWJsZTwvYT4gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiAqbWluaV9vYmplY3Q8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiAqICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtbWFrZS13cml0YWJsZSIgdGl0bGU9ImdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlICgpIj5nc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZTwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKm1pbmlfb2JqZWN0PC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKiAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LXJlZiIgdGl0bGU9ImdzdF9taW5pX29iamVjdF9yZWYgKCkiPmdzdF9taW5pX29iamVjdF9yZWY8L2E+ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiAqbWluaV9vYmplY3Q8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtdW5yZWYiIHRpdGxlPSJnc3RfbWluaV9vYmplY3RfdW5yZWYgKCkiPmdzdF9taW5pX29iamVjdF91bnJlZjwvYT4gICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiAqbWluaV9vYmplY3Q8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3Qtd2Vhay1yZWYiIHRpdGxlPSJnc3RfbWluaV9vYmplY3Rfd2Vha19yZWYgKCkiPmdzdF9taW5pX29iamVjdF93ZWFrX3JlZjwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3RXZWFrTm90aWZ5IiB0aXRsZT0iR3N0TWluaU9iamVjdFdlYWtOb3RpZnkgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0V2Vha05vdGlmeTwvc3Bhbj48L2E+IG5vdGlmeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGRhdGE8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3Qtd2Vhay11bnJlZiIgdGl0bGU9ImdzdF9taW5pX29iamVjdF93ZWFrX3VucmVmICgpIj5nc3RfbWluaV9vYmplY3Rfd2Vha191bnJlZjwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0V2Vha05vdGlmeSIgdGl0bGU9IkdzdE1pbmlPYmplY3RXZWFrTm90aWZ5ICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdFdlYWtOb3RpZnk8L3NwYW4+PC9hPiBub3RpZnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBkYXRhPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LXJlcGxhY2UiIHRpdGxlPSJnc3RfbWluaV9vYmplY3RfcmVwbGFjZSAoKSI+Z3N0X21pbmlfb2JqZWN0X3JlcGxhY2U8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+ICoqb2xkZGF0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKm5ld2RhdGE8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiAqICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3Qtc3RlYWwiIHRpdGxlPSJnc3RfbWluaV9vYmplY3Rfc3RlYWwgKCkiPmdzdF9taW5pX29iamVjdF9zdGVhbDwvYT4gICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiAqKm9sZGRhdGE8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtdGFrZSIgdGl0bGU9ImdzdF9taW5pX29iamVjdF90YWtlICgpIj5nc3RfbWluaV9vYmplY3RfdGFrZTwvYT4gICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKipvbGRkYXRhPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiAqbmV3ZGF0YTwvY29kZT48L2VtPik7Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gaXMgYSBiYXNlY2xhc3MgbGlrZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiwgYnV0IGhhcyBiZWVuIHN0cmlwcGVkIGRvd24gb2YKK2ZlYXR1cmVzIHRvIGJlIGZhc3QgYW5kIHNtYWxsLgorSXQgb2ZmZXJzIHN1Yi1jbGFzc2luZyBhbmQgcmVmLWNvdW50aW5nIGluIHRoZSBzYW1lIHdheSBhcyA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiBkb2VzLgorSXQgaGFzIG5vIHByb3BlcnRpZXMgYW5kIG5vIHNpZ25hbC1zdXBwb3J0IHRob3VnaC4KKzwvcD4KKzxwPgorTGFzdCByZXZpZXdlZCBvbiAyMDA1LTExLTIzICgwLjkuNSkKKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdE1pbmlPYmplY3QiPjwvYT48aDM+c3RydWN0IEdzdE1pbmlPYmplY3Q8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RNaW5pT2JqZWN0IHsKKyAgR1R5cGUgICB0eXBlOworCisgIGdpbnQgICAgcmVmY291bnQ7CisgIGd1aW50ICAgZmxhZ3M7CisgIGdzaXplICAgc2l6ZTsKKworICBHc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uIGNvcHk7CisgIEdzdE1pbmlPYmplY3REaXNwb3NlRnVuY3Rpb24gZGlzcG9zZTsKKyAgR3N0TWluaU9iamVjdEZyZWVGdW5jdGlvbiBmcmVlOworfTsKKzwvcHJlPgorPHA+CitCYXNlIGNsYXNzIGZvciByZWZjb3VudGVkIGxpZ2h0d2VpZ2h0IG9iamVjdHMuCitSZWYgRnVuYzogZ3N0X21pbmlfb2JqZWN0X3JlZgorVW5yZWYgRnVuYzogZ3N0X21pbmlfb2JqZWN0X3VucmVmCitTZXQgVmFsdWUgRnVuYzogZ192YWx1ZV9zZXRfYm94ZWQKK0dldCBWYWx1ZSBGdW5jOiBnX3ZhbHVlX2dldF9ib3hlZAorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RNaW5pT2JqZWN0LnR5cGUiPjwvYT50eXBlPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgR1R5cGUgb2YgdGhlIG9iamVjdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWluaU9iamVjdC5yZWZjb3VudCI+PC9hPnJlZmNvdW50PC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hdG9taWMgcmVmY291bnQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWluaU9iamVjdC5mbGFncyI+PC9hPmZsYWdzPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5leHRyYSBmbGFncy48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWluaU9iamVjdC5zaXplIj48L2E+c2l6ZTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNpemUgb2YgdGhlIHN0cnVjdHVyZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uIiB0aXRsZT0iR3N0TWluaU9iamVjdENvcHlGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3RDb3B5RnVuY3Rpb248L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWluaU9iamVjdC5jb3B5Ij48L2E+Y29weTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBjb3B5IGZ1bmN0aW9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3REaXNwb3NlRnVuY3Rpb24iIHRpdGxlPSJHc3RNaW5pT2JqZWN0RGlzcG9zZUZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdERpc3Bvc2VGdW5jdGlvbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RNaW5pT2JqZWN0LmRpc3Bvc2UiPjwvYT5kaXNwb3NlPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGRpc3Bvc2UgZnVuY3Rpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdEZyZWVGdW5jdGlvbiIgdGl0bGU9IkdzdE1pbmlPYmplY3RGcmVlRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0RnJlZUZ1bmN0aW9uPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdE1pbmlPYmplY3QuZnJlZSI+PC9hPmZyZWU8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBmcmVlIGZ1bmN0aW9uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0TWluaU9iamVjdEZsYWdzIj48L2E+PGgzPmVudW0gR3N0TWluaU9iamVjdEZsYWdzPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGVudW0geworICAvKiBwYWRkaW5nICovCisgIEdTVF9NSU5JX09CSkVDVF9GTEFHX0xBU1QgPSAoMSZsdDsmbHQ7NCkKK30gR3N0TWluaU9iamVjdEZsYWdzOworPC9wcmU+Cis8cD4KK0ZsYWdzIGZvciB0aGUgbWluaSBvYmplY3QKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1NSU5JLU9CSkVDVC1GTEFHLUxBU1Q6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX01JTklfT0JKRUNUX0ZMQUdfTEFTVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Zmlyc3QgZmxhZyB0aGF0IGNhbiBiZSB1c2VkIGJ5IHN1YmNsYXNzZXMuCis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0TWluaU9iamVjdENvcHlGdW5jdGlvbiI+PC9hPjxoMz5Hc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+ICogICAgICgqR3N0TWluaU9iamVjdENvcHlGdW5jdGlvbikgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+ICpvYmo8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitGdW5jdGlvbiBwcm90b3R5cGUgZm9yIG1ldGhvZHMgdG8gY3JlYXRlIGNvcGllcyBvZiBpbnN0YW5jZXMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPk1pbmlPYmplY3QgdG8gY29weTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnJlZmVyZW5jZSB0byBjbG9uZWQgaW5zdGFuY2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0TWluaU9iamVjdERpc3Bvc2VGdW5jdGlvbiI+PC9hPjxoMz5Hc3RNaW5pT2JqZWN0RGlzcG9zZUZ1bmN0aW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICgqR3N0TWluaU9iamVjdERpc3Bvc2VGdW5jdGlvbikgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+ICpvYmo8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitGdW5jdGlvbiBwcm90b3R5cGUgZm9yIHdoZW4gYSBtaW5pb2JqZWN0IGhhcyBsb3N0IGl0cyBsYXN0IHJlZmNvdW50LgorSW1wbGVtZW50YXRpb24gb2YgdGhlIG1pbmkgb2JqZWN0IGFyZSBhbGxvd2VkIHRvIHJldml2ZSB0aGUKK3Bhc3NlZCBvYmplY3QgYnkgZG9pbmcgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtcmVmIiB0aXRsZT0iZ3N0X21pbmlfb2JqZWN0X3JlZiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWluaV9vYmplY3RfcmVmKCk8L2NvZGU+PC9hPi4gSWYgdGhlIG9iamVjdCBpcyBub3QKK3Jldml2ZWQgYWZ0ZXIgdGhlIGRpc3Bvc2UgZnVuY3Rpb24sIHRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+CithbmQgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIG9iamVjdCBpcyBmcmVlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmo8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+TWluaU9iamVjdCB0byBkaXNwb3NlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgb2JqZWN0IHNob3VsZCBiZSBjbGVhbmVkIHVwLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdE1pbmlPYmplY3RGcmVlRnVuY3Rpb24iPjwvYT48aDM+R3N0TWluaU9iamVjdEZyZWVGdW5jdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICAoKkdzdE1pbmlPYmplY3RGcmVlRnVuY3Rpb24pICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiAqb2JqPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVmlydHVhbCBmdW5jdGlvbiBwcm90b3R5cGUgZm9yIG1ldGhvZHMgdG8gZnJlZSByZXNzb3VyY2VzIHVzZWQgYnkKK21pbmktb2JqZWN0cy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPk1pbmlPYmplY3QgdG8gZnJlZTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RNaW5pT2JqZWN0V2Vha05vdGlmeSI+PC9hPjxoMz5Hc3RNaW5pT2JqZWN0V2Vha05vdGlmeSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICAoKkdzdE1pbmlPYmplY3RXZWFrTm90aWZ5KSAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKndoZXJlX3RoZV9taW5pX29iamVjdF93YXM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3RXZWFrTm90aWZ5IiB0aXRsZT0iR3N0TWluaU9iamVjdFdlYWtOb3RpZnkgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0V2Vha05vdGlmeTwvc3Bhbj48L2E+IGZ1bmN0aW9uIGNhbiBiZSBhZGRlZCB0byBhIG1pbmkgb2JqZWN0IGFzIGEKK2NhbGxiYWNrIHRoYXQgZ2V0cyB0cmlnZ2VyZWQgd2hlbiB0aGUgbWluaSBvYmplY3QgaXMgZmluYWxpemVkLiBTaW5jZSB0aGUKK21pbmkgb2JqZWN0IGlzIGFscmVhZHkgYmVpbmcgZmluYWxpemVkIHdoZW4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3RXZWFrTm90aWZ5IiB0aXRsZT0iR3N0TWluaU9iamVjdFdlYWtOb3RpZnkgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0V2Vha05vdGlmeTwvc3Bhbj48L2E+IGlzCitjYWxsZWQsIHRoZXJlJ3Mgbm90IG11Y2ggeW91IGNvdWxkIGRvIHdpdGggdGhlIG9iamVjdCwgYXBhcnQgZnJvbSBlLmcuIHVzaW5nCitpdHMgYWRyZXNzIGFzIGhhc2gtaW5kZXggb3IgdGhlIGxpa2UuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5kYXRhIHRoYXQgd2FzIHByb3ZpZGVkIHdoZW4gdGhlIHdlYWsgcmVmZXJlbmNlIHdhcyBlc3RhYmxpc2hlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d2hlcmVfdGhlX21pbmlfb2JqZWN0X3dhczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbWluaSBvYmplY3QgYmVpbmcgZmluYWxpemVkPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULU1JTkktT0JKRUNULVRZUEU6Q0FQUyI+PC9hPjxoMz5HU1RfTUlOSV9PQkpFQ1RfVFlQRSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9NSU5JX09CSkVDVF9UWVBFKG9iaikgIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVChvYmopLSZndDt0eXBlKQorPC9wcmU+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1NSU5JLU9CSkVDVC1GTEFHUzpDQVBTIj48L2E+PGgzPkdTVF9NSU5JX09CSkVDVF9GTEFHUygpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9NSU5JX09CSkVDVF9GTEFHUyhvYmopICAoR1NUX01JTklfT0JKRUNUX0NBU1Qob2JqKS0mZ3Q7ZmxhZ3MpCis8L3ByZT4KKzxwPgorVGhpcyBtYWNybyByZXR1cm5zIHRoZSBlbnRpcmUgc2V0IG9mIGZsYWdzIGZvciB0aGUgbWluaS1vYmplY3QuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iajwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5NaW5pT2JqZWN0IHRvIHJldHVybiBmbGFncyBmb3IuPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1NSU5JLU9CSkVDVC1GTEFHLUlTLVNFVDpDQVBTIj48L2E+PGgzPkdTVF9NSU5JX09CSkVDVF9GTEFHX0lTX1NFVCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9NSU5JX09CSkVDVF9GTEFHX0lTX1NFVChvYmosZmxhZykgICAgICAgICEhKEdTVF9NSU5JX09CSkVDVF9GTEFHUyAob2JqKSAmYW1wOyAoZmxhZykpCis8L3ByZT4KKzxwPgorVGhpcyBtYWNybyBjaGVja3MgdG8gc2VlIGlmIHRoZSBnaXZlbiBmbGFnIGlzIHNldC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmo8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+TWluaU9iamVjdCB0byBjaGVjayBmb3IgZmxhZ3MuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkZsYWcgdG8gY2hlY2sgZm9yPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULU1JTkktT0JKRUNULUZMQUctU0VUOkNBUFMiPjwvYT48aDM+R1NUX01JTklfT0JKRUNUX0ZMQUdfU0VUKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX01JTklfT0JKRUNUX0ZMQUdfU0VUKG9iaixmbGFnKSAgICAgICAgICAgKEdTVF9NSU5JX09CSkVDVF9GTEFHUyAob2JqKSB8PSAoZmxhZykpCis8L3ByZT4KKzxwPgorVGhpcyBtYWNybyBzZXRzIHRoZSBnaXZlbiBiaXRzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iajwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5NaW5pT2JqZWN0IHRvIHNldCBmbGFnIGluLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5GbGFnIHRvIHNldCwgY2FuIGJ5IGFueSBudW1iZXIgb2YgYml0cyBpbiBndWludDMyLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1NSU5JLU9CSkVDVC1GTEFHLVVOU0VUOkNBUFMiPjwvYT48aDM+R1NUX01JTklfT0JKRUNUX0ZMQUdfVU5TRVQoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfTUlOSV9PQkpFQ1RfRkxBR19VTlNFVChvYmosZmxhZykgICAgICAgICAoR1NUX01JTklfT0JKRUNUX0ZMQUdTIChvYmopICZhbXA7PSB+KGZsYWcpKQorPC9wcmU+Cis8cD4KK1RoaXMgbWFjcm8gdXNldHMgdGhlIGdpdmVuIGJpdHMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPk1pbmlPYmplY3QgdG8gdW5zZXQgZmxhZyBpbi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZsYWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+RmxhZyB0byBzZXQsIG11c3QgYmUgYSBzaW5nbGUgYml0IGluIGd1aW50MzIuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULU1JTkktT0JKRUNULVJFRkNPVU5UOkNBUFMiPjwvYT48aDM+R1NUX01JTklfT0JKRUNUX1JFRkNPVU5UKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UKG9iaikgICAgICAgICAgICgoR1NUX01JTklfT0JKRUNUX0NBU1Qob2JqKSktJmd0O3JlZmNvdW50KQorPC9wcmU+Cis8cD4KK0dldCBhY2Nlc3MgdG8gdGhlIHJlZmVyZW5jZSBjb3VudCBmaWVsZCBvZiB0aGUgbWluaS1vYmplY3QuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iajwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1NSU5JLU9CSkVDVC1SRUZDT1VOVC1WQUxVRTpDQVBTIj48L2E+PGgzPkdTVF9NSU5JX09CSkVDVF9SRUZDT1VOVF9WQUxVRSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9NSU5JX09CSkVDVF9SRUZDT1VOVF9WQUxVRShvYmopICAgICAoZ19hdG9taWNfaW50X2dldCAoJmFtcDsoR1NUX01JTklfT0JKRUNUX0NBU1Qob2JqKSktJmd0O3JlZmNvdW50KSkKKzwvcHJlPgorPHA+CitHZXQgdGhlIHJlZmVyZW5jZSBjb3VudCB2YWx1ZSBvZiB0aGUgbWluaS1vYmplY3QuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iajwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1NSU5JLU9CSkVDVC1TSVpFOkNBUFMiPjwvYT48aDM+R1NUX01JTklfT0JKRUNUX1NJWkUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfTUlOSV9PQkpFQ1RfU0laRShvYmopICAgICAgICAgICAgICAoKEdTVF9NSU5JX09CSkVDVF9DQVNUKG9iaikpLSZndDtzaXplKQorPC9wcmU+Cis8cD4KK0dldCB0aGUgYWxsb2NhdGVkIHNpemUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iajwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULURFRklORS1NSU5JLU9CSkVDVC1UWVBFOkNBUFMiPjwvYT48aDM+R1NUX0RFRklORV9NSU5JX09CSkVDVF9UWVBFKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX0RFRklORV9NSU5JX09CSkVDVF9UWVBFKFR5cGVOYW1lLHR5cGVfbmFtZSk8L3ByZT4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1pbmktb2JqZWN0LWluaXQiPjwvYT48aDM+Z3N0X21pbmlfb2JqZWN0X2luaXQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X21pbmlfb2JqZWN0X2luaXQgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKm1pbmlfb2JqZWN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0luaXRpYWxpemVzIGEgbWluaS1vYmplY3Qgd2l0aCB0aGUgZGVzaXJlZCB0eXBlIGFuZCBzaXplLgorPC9wPgorPHA+CitNVCBzYWZlCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWluaV9vYmplY3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IG9mIHRoZSBtaW5pLW9iamVjdCB0byBjcmVhdGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNpemUgb2YgdGhlIGRhdGE8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3IG1pbmktb2JqZWN0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1pbmktb2JqZWN0LWNvcHkiPjwvYT48aDM+Z3N0X21pbmlfb2JqZWN0X2NvcHkgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKiAgICAgZ3N0X21pbmlfb2JqZWN0X2NvcHkgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKm1pbmlfb2JqZWN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlcyBhIGNvcHkgb2YgdGhlIG1pbmktb2JqZWN0LgorPC9wPgorPHA+CitNVCBzYWZlCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWluaV9vYmplY3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG1pbmktb2JqZWN0IHRvIGNvcHk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3IG1pbmktb2JqZWN0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1pbmktb2JqZWN0LWlzLXdyaXRhYmxlIj48L2E+PGgzPmdzdF9taW5pX29iamVjdF9pc193cml0YWJsZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfbWluaV9vYmplY3RfaXNfd3JpdGFibGUgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiAqbWluaV9vYmplY3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDaGVja3MgaWYgYSBtaW5pLW9iamVjdCBpcyB3cml0YWJsZS4gIEEgbWluaS1vYmplY3QgaXMgd3JpdGFibGUKK2lmIHRoZSByZWZlcmVuY2UgY291bnQgaXMgb25lIGFuZCB0aGUgPGEgaHJlZj0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyL2h0bWwvZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHU1QtTUlOSS1PQkpFQ1QtRkxBRy1SRUFET05MWTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX01JTklfT0JKRUNUX0ZMQUdfUkVBRE9OTFk8L3NwYW4+PC9hPgorZmxhZyBpcyBub3Qgc2V0LiAgTW9kaWZpY2F0aW9uIG9mIGEgbWluaS1vYmplY3Qgc2hvdWxkIG9ubHkgYmUKK2RvbmUgYWZ0ZXIgdmVyaWZ5aW5nIHRoYXQgaXQgaXMgd3JpdGFibGUuCis8L3A+Cis8cD4KK01UIHNhZmUKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5taW5pX29iamVjdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbWluaS1vYmplY3QgdG8gY2hlY2s8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBvYmplY3QgaXMgd3JpdGFibGUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1pbmktb2JqZWN0LW1ha2Utd3JpdGFibGUiPjwvYT48aDM+Z3N0X21pbmlfb2JqZWN0X21ha2Vfd3JpdGFibGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKiAgICAgZ3N0X21pbmlfb2JqZWN0X21ha2Vfd3JpdGFibGUgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKm1pbmlfb2JqZWN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2tzIGlmIGEgbWluaS1vYmplY3QgaXMgd3JpdGFibGUuICBJZiBub3QsIGEgd3JpdGFibGUgY29weSBpcyBtYWRlIGFuZAorcmV0dXJuZWQuICBUaGlzIGdpdmVzIGF3YXkgdGhlIHJlZmVyZW5jZSB0byB0aGUgb3JpZ2luYWwgbWluaSBvYmplY3QsCithbmQgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgbmV3IG9iamVjdC4KKzwvcD4KKzxwPgorTVQgc2FmZQorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1pbmlfb2JqZWN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtaW5pLW9iamVjdCB0byBtYWtlIHdyaXRhYmxlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBtaW5pLW9iamVjdCAocG9zc2libHkgdGhlIHNhbWUgcG9pbnRlcikgdGhhdAoraXMgd3JpdGFibGUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWluaS1vYmplY3QtcmVmIj48L2E+PGgzPmdzdF9taW5pX29iamVjdF9yZWYgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKiAgICAgZ3N0X21pbmlfb2JqZWN0X3JlZiAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKm1pbmlfb2JqZWN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgbWluaS1vYmplY3QuCis8L3A+Cis8cD4KK05vdGUgdGhhdCB0aGUgcmVmY291bnQgYWZmZWN0cyB0aGUgd3JpdGVhYmlsaXR5CitvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWluaTwvY29kZT48L2VtPi1vYmplY3QsIHNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtaXMtd3JpdGFibGUiIHRpdGxlPSJnc3RfbWluaV9vYmplY3RfaXNfd3JpdGFibGUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21pbmlfb2JqZWN0X2lzX3dyaXRhYmxlKCk8L2NvZGU+PC9hPi4gSXQgaXMKK2ltcG9ydGFudCB0byBub3RlIHRoYXQga2VlcGluZyBhZGRpdGlvbmFsIHJlZmVyZW5jZXMgdG8KK0dzdE1pbmlPYmplY3QgaW5zdGFuY2VzIGNhbiBwb3RlbnRpYWxseSBpbmNyZWFzZSB0aGUgbnVtYmVyCitvZiBtZW1jcHkgb3BlcmF0aW9ucyBpbiBhIHBpcGVsaW5lLCBlc3BlY2lhbGx5IGlmIHRoZSBtaW5pb2JqZWN0CitpcyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1pbmlfb2JqZWN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtaW5pLW9iamVjdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtaW5pLW9iamVjdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1taW5pLW9iamVjdC11bnJlZiI+PC9hPjxoMz5nc3RfbWluaV9vYmplY3RfdW5yZWYgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKm1pbmlfb2JqZWN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRGVjcmVhc2VzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIG1pbmktb2JqZWN0LCBwb3NzaWJseSBmcmVlaW5nCit0aGUgbWluaS1vYmplY3QuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1pbmlfb2JqZWN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtaW5pLW9iamVjdDwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbWluaS1vYmplY3Qtd2Vhay1yZWYiPjwvYT48aDM+Z3N0X21pbmlfb2JqZWN0X3dlYWtfcmVmICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9taW5pX29iamVjdF93ZWFrX3JlZiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdFdlYWtOb3RpZnkiIHRpdGxlPSJHc3RNaW5pT2JqZWN0V2Vha05vdGlmeSAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3RXZWFrTm90aWZ5PC9zcGFuPjwvYT4gbm90aWZ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0FkZHMgYSB3ZWFrIHJlZmVyZW5jZSBjYWxsYmFjayB0byBhIG1pbmkgb2JqZWN0LiBXZWFrIHJlZmVyZW5jZXMgYXJlCit1c2VkIGZvciBub3RpZmljYXRpb24gd2hlbiBhIG1pbmkgb2JqZWN0IGlzIGZpbmFsaXplZC4gVGhleSBhcmUgY2FsbGVkCisid2VhayByZWZlcmVuY2VzIiBiZWNhdXNlIHRoZXkgYWxsb3cgeW91IHRvIHNhZmVseSBob2xkIGEgcG9pbnRlcgordG8gdGhlIG1pbmkgb2JqZWN0IHdpdGhvdXQgY2FsbGluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtcmVmIiB0aXRsZT0iZ3N0X21pbmlfb2JqZWN0X3JlZiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWluaV9vYmplY3RfcmVmKCk8L2NvZGU+PC9hPgorKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC1yZWYiIHRpdGxlPSJnc3RfbWluaV9vYmplY3RfcmVmICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9taW5pX29iamVjdF9yZWYoKTwvY29kZT48L2E+IGFkZHMgYSBzdHJvbmcgcmVmZXJlbmNlLCB0aGF0IGlzLCBmb3JjZXMgdGhlIG9iamVjdAordG8gc3RheSBhbGl2ZSkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+IHRvIHJlZmVyZW5jZSB3ZWFrbHk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5vdGlmeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5jYWxsYmFjayB0byBpbnZva2UgYmVmb3JlIHRoZSBtaW5pIG9iamVjdCBpcyBmcmVlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5leHRyYSBkYXRhIHRvIHBhc3MgdG8gbm90aWZ5PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1pbmktb2JqZWN0LXdlYWstdW5yZWYiPjwvYT48aDM+Z3N0X21pbmlfb2JqZWN0X3dlYWtfdW5yZWYgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X21pbmlfb2JqZWN0X3dlYWtfdW5yZWYgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0V2Vha05vdGlmeSIgdGl0bGU9IkdzdE1pbmlPYmplY3RXZWFrTm90aWZ5ICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdFdlYWtOb3RpZnk8L3NwYW4+PC9hPiBub3RpZnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBkYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVtb3ZlcyBhIHdlYWsgcmVmZXJlbmNlIGNhbGxiYWNrIHRvIGEgbWluaSBvYmplY3QuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+IHRvIHJlbW92ZSBhIHdlYWsgcmVmZXJlbmNlIGZyb208L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5vdGlmeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5jYWxsYmFjayB0byBzZWFyY2ggZm9yPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmRhdGEgdG8gc2VhcmNoIGZvcjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1taW5pLW9iamVjdC1yZXBsYWNlIj48L2E+PGgzPmdzdF9taW5pX29iamVjdF9yZXBsYWNlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9taW5pX29iamVjdF9yZXBsYWNlICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+ICoqb2xkZGF0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKm5ld2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBdG9taWNhbGx5IG1vZGlmaWVzIGEgcG9pbnRlciB0byBwb2ludCB0byBhIG5ldyBtaW5pLW9iamVjdC4KK1RoZSByZWZlcmVuY2UgY291bnQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9sZGRhdGE8L2NvZGU+PC9lbT4gaXMgZGVjcmVhc2VkIGFuZCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mCis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmV3ZGF0YTwvY29kZT48L2VtPiBpcyBpbmNyZWFzZWQuCis8L3A+Cis8cD4KK0VpdGhlciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmV3ZGF0YTwvY29kZT48L2VtPiBhbmQgdGhlIHZhbHVlIHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9sZGRhdGE8L2NvZGU+PC9lbT4gbWF5IGJlIE5VTEwuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2xkZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIGEgcG9pbnRlciB0byBhIG1pbmktb2JqZWN0IHRvCitiZSByZXBsYWNlZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dCBhbmQgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+aW5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ld2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9pbnRlciB0byBuZXcgbWluaS1vYmplY3Q8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uZXdkYXRhPC9jb2RlPjwvZW0+IHdhcyBkaWZmZXJlbnQgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2xkZGF0YTwvY29kZT48L2VtPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1pbmktb2JqZWN0LXN0ZWFsIj48L2E+PGgzPmdzdF9taW5pX29iamVjdF9zdGVhbCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiAqICAgICBnc3RfbWluaV9vYmplY3Rfc3RlYWwgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiAqKm9sZGRhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZXBsYWNlIHRoZSBjdXJyZW50IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiBwb2ludGVyIHRvIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vbGRkYXRhPC9jb2RlPjwvZW0+IHdpdGggTlVMTCBhbmQKK3JldHVybiB0aGUgb2xkIHZhbHVlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9sZGRhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9pbnRlciB0byBhIHBvaW50ZXIgdG8gYSBtaW5pLW9iamVjdCB0bworYmUgc3RvbGVuLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIGlucHV0IGFuZCBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9sZGF0YTwvY29kZT48L2VtPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW1pbmktb2JqZWN0LXRha2UiPjwvYT48aDM+Z3N0X21pbmlfb2JqZWN0X3Rha2UgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X21pbmlfb2JqZWN0X3Rha2UgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKipvbGRkYXRhPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiAqbmV3ZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK01vZGlmaWVzIGEgcG9pbnRlciB0byBwb2ludCB0byBhIG5ldyBtaW5pLW9iamVjdC4gVGhlIG1vZGlmaWNhdGlvbgoraXMgZG9uZSBhdG9taWNhbGx5LiBUaGlzIHZlcnNpb24gaXMgc2ltaWxhciB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtcmVwbGFjZSIgdGl0bGU9ImdzdF9taW5pX29iamVjdF9yZXBsYWNlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9taW5pX29iamVjdF9yZXBsYWNlKCk8L2NvZGU+PC9hPgorZXhjZXB0IHRoYXQgaXQgZG9lcyBub3QgaW5jcmVhc2UgdGhlIHJlZmNvdW50IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uZXdkYXRhPC9jb2RlPjwvZW0+IGFuZCB0aHVzCit0YWtlcyBvd25lcnNoaXAgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ld2RhdGE8L2NvZGU+PC9lbT4uCis8L3A+Cis8cD4KK0VpdGhlciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmV3ZGF0YTwvY29kZT48L2VtPiBhbmQgdGhlIHZhbHVlIHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9sZGRhdGE8L2NvZGU+PC9lbT4gbWF5IGJlIE5VTEwuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2xkZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIGEgcG9pbnRlciB0byBhIG1pbmktb2JqZWN0IHRvCitiZSByZXBsYWNlZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dCBhbmQgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+aW5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ld2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9pbnRlciB0byBuZXcgbWluaS1vYmplY3Q8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uZXdkYXRhPC9jb2RlPjwvZW0+IHdhcyBkaWZmZXJlbnQgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2xkZGF0YTwvY29kZT48L2VtPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5OWExNjYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbApAQCAtMCwwICsxLDI1MiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdzdFBhcmFtU3BlYzwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sIiB0aXRsZT0iR3N0UGFyc2UiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3RQYXJhbVNwZWMuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItR3N0UGFyYW1TcGVjLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItR3N0UGFyYW1TcGVjLnRvcF9vZl9wYWdlIj48L2E+R3N0UGFyYW1TcGVjPC9zcGFuPjwvaDI+Cis8cD5Hc3RQYXJhbVNwZWMg4oCUIEdQYXJhbVNwZWMgaW1wbGVtZW50YXRpb25zIHNwZWNpZmljCit0byBHU3RyZWFtZXI8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0UGFyYW1TcGVjLnN5bm9wc2lzIj48L2E+PGgyPlN5bm9wc2lzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7CisKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCNHU1QtUEFSQU0tQ09OVFJPTExBQkxFOkNBUFMiIHRpdGxlPSJHU1RfUEFSQU1fQ09OVFJPTExBQkxFIj5HU1RfUEFSQU1fQ09OVFJPTExBQkxFPC9hPgorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sI0dTVC1QQVJBTS1VU0VSLVNISUZUOkNBUFMiIHRpdGxlPSJHU1RfUEFSQU1fVVNFUl9TSElGVCI+R1NUX1BBUkFNX1VTRVJfU0hJRlQ8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyYW1TcGVjLmh0bWwjR1NULVBBUkFNLU1VVEFCTEUtUEFVU0VEOkNBUFMiIHRpdGxlPSJHU1RfUEFSQU1fTVVUQUJMRV9QQVVTRUQiPkdTVF9QQVJBTV9NVVRBQkxFX1BBVVNFRDwvYT4KKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCNHU1QtUEFSQU0tTVVUQUJMRS1QTEFZSU5HOkNBUFMiIHRpdGxlPSJHU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HIj5HU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HPC9hPgorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sI0dTVC1QQVJBTS1NVVRBQkxFLVJFQURZOkNBUFMiIHRpdGxlPSJHU1RfUEFSQU1fTVVUQUJMRV9SRUFEWSI+R1NUX1BBUkFNX01VVEFCTEVfUkVBRFk8L2E+CisKK3N0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCNHc3RQYXJhbVNwZWNGcmFjdGlvbiIgdGl0bGU9InN0cnVjdCBHc3RQYXJhbVNwZWNGcmFjdGlvbiI+R3N0UGFyYW1TcGVjRnJhY3Rpb248L2E+OworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HUGFyYW1TcGVjLmh0bWwjR1BhcmFtU3BlYyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HUGFyYW1TcGVjPC9zcGFuPjwvYT4gKiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCNnc3QtcGFyYW0tc3BlYy1mcmFjdGlvbiIgdGl0bGU9ImdzdF9wYXJhbV9zcGVjX2ZyYWN0aW9uICgpIj5nc3RfcGFyYW1fc3BlY19mcmFjdGlvbjwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5pY2s8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqYmx1cmI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbWluX251bTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBtaW5fZGVub208L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbWF4X251bTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBtYXhfZGVub208L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gZGVmYXVsdF9udW08L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gZGVmYXVsdF9kZW5vbTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdQYXJhbVNwZWMuaHRtbCNHUGFyYW1GbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdQYXJhbUZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4pOworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitHUGFyYW1TcGVjIGltcGxlbWVudGF0aW9ucyBzcGVjaWZpYyB0byBHU3RyZWFtZXIuCis8L3A+Cis8cD4KK0xhc3QgcmV2aWV3ZWQgb24gMjAwOC0wMy0xMSAoMC4xMC4xOCkKKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVBBUkFNLUNPTlRST0xMQUJMRTpDQVBTIj48L2E+PGgzPkdTVF9QQVJBTV9DT05UUk9MTEFCTEU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmXCoEdTVF9QQVJBTV9DT05UUk9MTEFCTEXCoCgxICZsdDsmbHQ7IChHX1BBUkFNX1VTRVJfU0hJRlQgKyAxKSkKKzwvcHJlPgorPHA+CitVc2UgdGhpcyBmbGFnIG9uIEdPYmplY3QgcHJvcGVydGllcyB0byBzaWduYWwgdGhleSBjYW4gbWFrZSBzZW5zZSB0byBiZS4KK2NvbnRyb2xsZWQgb3ZlciB0aW1lLiBUaGlzIGhpbnQgaXMgdXNlZCBieSB0aGUgR3N0Q29udHJvbGxlci4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVBBUkFNLVVTRVItU0hJRlQ6Q0FQUyI+PC9hPjxoMz5HU1RfUEFSQU1fVVNFUl9TSElGVDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZcKgR1NUX1BBUkFNX1VTRVJfU0hJRlTCoCgxICZsdDsmbHQ7IChHX1BBUkFNX1VTRVJfU0hJRlQgKyA4KSkKKzwvcHJlPgorPHA+CitCaXRzIGJhc2VkIG9uIEdTVF9QQVJBTV9VU0VSX1NISUZUIGNhbiBiZSB1c2VkIGJ5IDNyZCBwYXJ0eSBhcHBsaWNhdGlvbnMuCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1QQVJBTS1NVVRBQkxFLVBBVVNFRDpDQVBTIj48L2E+PGgzPkdTVF9QQVJBTV9NVVRBQkxFX1BBVVNFRDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFSQU1fTVVUQUJMRV9QQVVTRUQgICgxICZsdDsmbHQ7IChHX1BBUkFNX1VTRVJfU0hJRlQgKyAzKSkKKzwvcHJlPgorPHA+CitVc2UgdGhpcyBmbGFnIG9uIEdPYmplY3QgcHJvcGVydGllcyBvZiBHc3RFbGVtZW50cyB0byBpbmRpY2F0ZSB0aGF0Cit0aGV5IGNhbiBiZSBjaGFuZ2VkIHdoZW4gdGhlIGVsZW1lbnQgaXMgaW4gdGhlIFBBVVNFRCBvciBsb3dlciBzdGF0ZS4KK1RoaXMgZmxhZyBpbXBsaWVzIEdTVF9QQVJBTV9NVVRBQkxFX1JFQURZLgorPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtUEFSQU0tTVVUQUJMRS1QTEFZSU5HOkNBUFMiPjwvYT48aDM+R1NUX1BBUkFNX01VVEFCTEVfUExBWUlORzwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HICAoMSAmbHQ7Jmx0OyAoR19QQVJBTV9VU0VSX1NISUZUICsgNCkpCis8L3ByZT4KKzxwPgorVXNlIHRoaXMgZmxhZyBvbiBHT2JqZWN0IHByb3BlcnRpZXMgb2YgR3N0RWxlbWVudHMgdG8gaW5kaWNhdGUgdGhhdAordGhleSBjYW4gYmUgY2hhbmdlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGluIHRoZSBQTEFZSU5HIG9yIGxvd2VyIHN0YXRlLgorVGhpcyBmbGFnIGltcGxpZXMgR1NUX1BBUkFNX01VVEFCTEVfUEFVU0VELgorPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtUEFSQU0tTVVUQUJMRS1SRUFEWTpDQVBTIj48L2E+PGgzPkdTVF9QQVJBTV9NVVRBQkxFX1JFQURZPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QQVJBTV9NVVRBQkxFX1JFQURZICAoMSAmbHQ7Jmx0OyAoR19QQVJBTV9VU0VSX1NISUZUICsgMikpCis8L3ByZT4KKzxwPgorVXNlIHRoaXMgZmxhZyBvbiBHT2JqZWN0IHByb3BlcnRpZXMgb2YgR3N0RWxlbWVudHMgdG8gaW5kaWNhdGUgdGhhdAordGhleSBjYW4gYmUgY2hhbmdlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGluIHRoZSBSRUFEWSBvciBsb3dlciBzdGF0ZS4KKzwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UGFyYW1TcGVjRnJhY3Rpb24iPjwvYT48aDM+c3RydWN0IEdzdFBhcmFtU3BlY0ZyYWN0aW9uPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UGFyYW1TcGVjRnJhY3Rpb24geworICBHUGFyYW1TcGVjICAgIHBhcmVudF9pbnN0YW5jZTsKKyAgCisgIGdpbnQgICAgICAgICAgbWluX251bSwgbWluX2RlbjsKKyAgZ2ludCAgICAgICAgICBtYXhfbnVtLCBtYXhfZGVuOworICBnaW50ICAgICAgICAgIGRlZl9udW0sIGRlZl9kZW47Cit9OworPC9wcmU+Cis8cD4KK0EgR1BhcmFtU3BlYyBkZXJpdmVkIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIHRoZSBtZXRhIGRhdGEgZm9yIGZyYWN0aW9uYWwKK3Byb3BlcnRpZXMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdQYXJhbVNwZWMuaHRtbCNHUGFyYW1TcGVjIj48c3BhbiBjbGFzcz0idHlwZSI+R1BhcmFtU3BlYzwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQYXJhbVNwZWNGcmFjdGlvbi5wYXJlbnQtaW5zdGFuY2UiPjwvYT5wYXJlbnRfaW5zdGFuY2U8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnN1cGVyIGNsYXNzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQYXJhbVNwZWNGcmFjdGlvbi5taW4tbnVtIj48L2E+bWluX251bTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bWluaW1hbCBudW1lcmF0b3I8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFBhcmFtU3BlY0ZyYWN0aW9uLm1pbi1kZW4iPjwvYT5taW5fZGVuPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5taW5pbWFsIGRlbm9taW5hdG9yPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQYXJhbVNwZWNGcmFjdGlvbi5tYXgtbnVtIj48L2E+bWF4X251bTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bWF4aW1hbCBudW1lcmF0b3I8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFBhcmFtU3BlY0ZyYWN0aW9uLm1heC1kZW4iPjwvYT5tYXhfZGVuPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5tYXhpbWFsIGRlbm9taW5hdG9yPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQYXJhbVNwZWNGcmFjdGlvbi5kZWYtbnVtIj48L2E+ZGVmX251bTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZGVmYXVsdCBudW1lcmF0b3I8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFBhcmFtU3BlY0ZyYWN0aW9uLmRlZi1kZW4iPjwvYT5kZWZfZGVuPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5kZWZhdWx0IGRlbm9taW5hdG9yPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhcmFtLXNwZWMtZnJhY3Rpb24iPjwvYT48aDM+Z3N0X3BhcmFtX3NwZWNfZnJhY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR1BhcmFtU3BlYy5odG1sI0dQYXJhbVNwZWMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1BhcmFtU3BlYzwvc3Bhbj48L2E+ICogICAgICAgIGdzdF9wYXJhbV9zcGVjX2ZyYWN0aW9uICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuaWNrPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmJsdXJiPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG1pbl9udW08L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbWluX2Rlbm9tPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG1heF9udW08L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbWF4X2Rlbm9tPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGRlZmF1bHRfbnVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGRlZmF1bHRfZGVub208L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HUGFyYW1TcGVjLmh0bWwjR1BhcmFtRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUGFyYW1GbGFnczwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgZnJhY3Rpb24gR1BhcmFtU3BlYyBmb3IgdXNlIGJ5IG9iamVjdHMvZWxlbWVudHMKK3RoYXQgd2FudCB0byBleHBvc2UgcHJvcGVydGllcyBvZiBmcmFjdGlvbiB0eXBlLiBUaGlzIGZ1bmN0aW9uIGlzIHR5cGljYWxseQordXNlZCBpbiBjb25uZWN0aW9uIHdpdGggPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI2ctb2JqZWN0LWNsYXNzLWluc3RhbGwtcHJvcGVydHkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgpPC9jb2RlPjwvYT4gaW4gYSBHT2JqZWN0cydzCitpbnN0YW5jZV9pbml0IGZ1bmN0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Y2Fub25pY2FsIG5hbWUgb2YgdGhlIHByb3BlcnR5IHNwZWNpZmllZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmljazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5uaWNrIG5hbWUgZm9yIHRoZSBwcm9wZXJ0eSBzcGVjaWZpZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJsdXJiPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmRlc2NyaXB0aW9uIG9mIHRoZSBwcm9wZXJ0eSBzcGVjaWZpZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1pbl9udW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bWluaW11bSB2YWx1ZSAoZnJhY3Rpb24gbnVtZXJhdG9yKTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWluX2Rlbm9tPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm1pbmltdW0gdmFsdWUgKGZyYWN0aW9uIGRlbm9taW5hdG9yKTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWF4X251bTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5tYXhpbXVtIHZhbHVlIChmcmFjdGlvbiBudW1lcmF0b3IpPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYXhfZGVub208L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bWF4aW11bSB2YWx1ZSAoZnJhY3Rpb24gZGVub21pbmF0b3IpPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZWZhdWx0X251bTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5kZWZhdWx0IHZhbHVlIChmcmFjdGlvbiBudW1lcmF0b3IpPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZWZhdWx0X2Rlbm9tPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmRlZmF1bHQgdmFsdWUgKGZyYWN0aW9uIGRlbm9taW5hdG9yKTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZ3M8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZmxhZ3MgZm9yIHRoZSBwcm9wZXJ0eSBzcGVjaWZpZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ld2x5IGNyZWF0ZWQgcGFyYW1ldGVyIHNwZWNpZmljYXRpb248L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjE0PC9wPgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RQYXJzZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMzc0ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RQYXJzZS5odG1sCkBAIC0wLDAgKzEsNTM1IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0UGFyc2U8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItR3N0UGFyYW1TcGVjLmh0bWwiIHRpdGxlPSJHc3RQYXJhbVNwZWMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNnc3RyZWFtZXItR3N0UGFyc2Uuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItR3N0UGFyc2UuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFBhcnNlIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFBhcnNlLnRvcF9vZl9wYWdlIj48L2E+R3N0UGFyc2U8L3NwYW4+PC9oMj4KKzxwPkdzdFBhcnNlIOKAlCBHZXQgYSBwaXBlbGluZSBmcm9tIGEgdGV4dCBwaXBlbGluZSBkZXNjcmlwdGlvbjwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RQYXJzZS5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisjaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OworCis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HUXVhcms8L3NwYW4+PC9hPiAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1lcnJvci1xdWFyayIgdGl0bGU9ImdzdF9wYXJzZV9lcnJvcl9xdWFyayAoKSI+Z3N0X3BhcnNlX2Vycm9yX3F1YXJrPC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTsKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dTVC1QQVJTRS1FUlJPUjpDQVBTIiB0aXRsZT0iR1NUX1BBUlNFX0VSUk9SIj5HU1RfUEFSU0VfRVJST1I8L2E+CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHc3RQYXJzZUVycm9yIiB0aXRsZT0iZW51bSBHc3RQYXJzZUVycm9yIj5Hc3RQYXJzZUVycm9yPC9hPjsKKyAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dzdFBhcnNlQ29udGV4dCIgdGl0bGU9IkdzdFBhcnNlQ29udGV4dCI+R3N0UGFyc2VDb250ZXh0PC9hPjsKK2VudW0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dzdFBhcnNlRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFBhcnNlRmxhZ3MiPkdzdFBhcnNlRmxhZ3M8L2E+OworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtbGF1bmNoIiB0aXRsZT0iZ3N0X3BhcnNlX2xhdW5jaCAoKSI+Z3N0X3BhcnNlX2xhdW5jaDwvYT4gICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqcGlwZWxpbmVfZGVzY3JpcHRpb248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1FcnJvci1SZXBvcnRpbmcuaHRtbCNHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRXJyb3I8L3NwYW4+PC9hPiAqKmVycm9yPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWxhdW5jaC1mdWxsIiB0aXRsZT0iZ3N0X3BhcnNlX2xhdW5jaF9mdWxsICgpIj5nc3RfcGFyc2VfbGF1bmNoX2Z1bGw8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwaXBlbGluZV9kZXNjcmlwdGlvbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR3N0UGFyc2VDb250ZXh0IiB0aXRsZT0iR3N0UGFyc2VDb250ZXh0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFyc2VDb250ZXh0PC9zcGFuPjwvYT4gKmNvbnRleHQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dzdFBhcnNlRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFBhcnNlRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYXJzZUZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1FcnJvci1SZXBvcnRpbmcuaHRtbCNHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRXJyb3I8L3NwYW4+PC9hPiAqKmVycm9yPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWxhdW5jaHYiIHRpdGxlPSJnc3RfcGFyc2VfbGF1bmNodiAoKSI+Z3N0X3BhcnNlX2xhdW5jaHY8L2E+ICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKmFyZ3Y8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1FcnJvci1SZXBvcnRpbmcuaHRtbCNHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRXJyb3I8L3NwYW4+PC9hPiAqKmVycm9yPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWxhdW5jaHYtZnVsbCIgdGl0bGU9ImdzdF9wYXJzZV9sYXVuY2h2X2Z1bGwgKCkiPmdzdF9wYXJzZV9sYXVuY2h2X2Z1bGw8L2E+ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKiphcmd2PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHc3RQYXJzZUNvbnRleHQiIHRpdGxlPSJHc3RQYXJzZUNvbnRleHQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYXJzZUNvbnRleHQ8L3NwYW4+PC9hPiAqY29udGV4dDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR3N0UGFyc2VGbGFncyIgdGl0bGU9ImVudW0gR3N0UGFyc2VGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhcnNlRmxhZ3M8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUVycm9yLVJlcG9ydGluZy5odG1sI0dFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdFcnJvcjwvc3Bhbj48L2E+ICoqZXJyb3I8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtYmluLWZyb20tZGVzY3JpcHRpb24iIHRpdGxlPSJnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb24gKCkiPmdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbjwvYT4gICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmJpbl9kZXNjcmlwdGlvbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGdob3N0X3VubGlua2VkX3BhZHM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1FcnJvci1SZXBvcnRpbmcuaHRtbCNHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRXJyb3I8L3NwYW4+PC9hPiAqKmVycjwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1iaW4tZnJvbS1kZXNjcmlwdGlvbi1mdWxsIiB0aXRsZT0iZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uX2Z1bGwgKCkiPmdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbl9mdWxsPC9hPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmJpbl9kZXNjcmlwdGlvbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGdob3N0X3VubGlua2VkX3BhZHM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dzdFBhcnNlQ29udGV4dCIgdGl0bGU9IkdzdFBhcnNlQ29udGV4dCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhcnNlQ29udGV4dDwvc3Bhbj48L2E+ICpjb250ZXh0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHc3RQYXJzZUZsYWdzIiB0aXRsZT0iZW51bSBHc3RQYXJzZUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFyc2VGbGFnczwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gKiplcnI8L2NvZGU+PC9lbT4pOworCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR3N0UGFyc2VDb250ZXh0IiB0aXRsZT0iR3N0UGFyc2VDb250ZXh0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhcnNlQ29udGV4dDwvc3Bhbj48L2E+ICogICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWNvbnRleHQtbmV3IiB0aXRsZT0iZ3N0X3BhcnNlX2NvbnRleHRfbmV3ICgpIj5nc3RfcGFyc2VfY29udGV4dF9uZXc8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWNvbnRleHQtZnJlZSIgdGl0bGU9ImdzdF9wYXJzZV9jb250ZXh0X2ZyZWUgKCkiPmdzdF9wYXJzZV9jb250ZXh0X2ZyZWU8L2E+ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHc3RQYXJzZUNvbnRleHQiIHRpdGxlPSJHc3RQYXJzZUNvbnRleHQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYXJzZUNvbnRleHQ8L3NwYW4+PC9hPiAqY29udGV4dDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtY29udGV4dC1nZXQtbWlzc2luZy1lbGVtZW50cyIgdGl0bGU9ImdzdF9wYXJzZV9jb250ZXh0X2dldF9taXNzaW5nX2VsZW1lbnRzICgpIj5nc3RfcGFyc2VfY29udGV4dF9nZXRfbWlzc2luZ19lbGVtZW50czwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR3N0UGFyc2VDb250ZXh0IiB0aXRsZT0iR3N0UGFyc2VDb250ZXh0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFyc2VDb250ZXh0PC9zcGFuPjwvYT4gKmNvbnRleHQ8L2NvZGU+PC9lbT4pOworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RQYXJzZS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK1RoZXNlIGZ1bmN0aW9uIGFsbG93IHRvIGNyZWF0ZSBhIHBpcGVsaW5lIGJhc2VkIG9uIHRoZSBzeW50YXggdXNlZCBpbiB0aGUKK2dzdC1sYXVuY2ggdXRpbGl0eSAoc2VlIG1hbi1wYWdlIGZvciBzeW50YXggZG9jdW1lbnRhdGlvbikuCis8L3A+Cis8cD4KK1BsZWFzZSBub3RlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIHRha2Ugc2V2ZXJhbCBtZWFzdXJlcyB0byBjcmVhdGUKK3NvbWV3aGF0IGR5bmFtaWMgcGlwZWxpbmVzLiBEdWUgdG8gdGhhdCBzdWNoIHBpcGVsaW5lcyBhcmUgbm90IGFsd2F5cworcmV1c2FibGUgKHNldCB0aGUgc3RhdGUgdG8gTlVMTCBhbmQgYmFjayB0byBQTEFZSU5HKS4KKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFBhcnNlLmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFyc2UtZXJyb3ItcXVhcmsiPjwvYT48aDM+Z3N0X3BhcnNlX2Vycm9yX3F1YXJrICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HUXVhcms8L3NwYW4+PC9hPiAgICAgICAgICAgICAgZ3N0X3BhcnNlX2Vycm9yX3F1YXJrICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgdGhlIGVycm9yIHF1YXJrIHVzZWQgYnkgdGhlIHBhcnNpbmcgc3Vic3lzdGVtLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHF1YXJrIG9mIHRoZSBwYXJzZSBlcnJvcnMuPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1QQVJTRS1FUlJPUjpDQVBTIj48L2E+PGgzPkdTVF9QQVJTRV9FUlJPUjwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFSU0VfRVJST1IgZ3N0X3BhcnNlX2Vycm9yX3F1YXJrICgpCis8L3ByZT4KKzxwPgorR2V0IGFjY2VzcyB0byB0aGUgZXJyb3IgcXVhcmsgb2YgdGhlIHBhcnNlIHN1YnN5c3RlbS4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UGFyc2VFcnJvciI+PC9hPjxoMz5lbnVtIEdzdFBhcnNlRXJyb3I8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9QQVJTRV9FUlJPUl9TWU5UQVgsCisgIEdTVF9QQVJTRV9FUlJPUl9OT19TVUNIX0VMRU1FTlQsCisgIEdTVF9QQVJTRV9FUlJPUl9OT19TVUNIX1BST1BFUlRZLAorICBHU1RfUEFSU0VfRVJST1JfTElOSywKKyAgR1NUX1BBUlNFX0VSUk9SX0NPVUxEX05PVF9TRVRfUFJPUEVSVFksCisgIEdTVF9QQVJTRV9FUlJPUl9FTVBUWV9CSU4sCisgIEdTVF9QQVJTRV9FUlJPUl9FTVBUWQorfSBHc3RQYXJzZUVycm9yOworPC9wcmU+Cis8cD4KK1RoZSBkaWZmZXJlbnQgcGFyc2luZyBlcnJvcnMgdGhhdCBjYW4gb2NjdXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1QQVJTRS1FUlJPUi1TWU5UQVg6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BBUlNFX0VSUk9SX1NZTlRBWDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBzeW50YXggZXJyb3Igb2NjdXJlZC4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1QQVJTRS1FUlJPUi1OTy1TVUNILUVMRU1FTlQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BBUlNFX0VSUk9SX05PX1NVQ0hfRUxFTUVOVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGRlc2NyaXB0aW9uIGNvbnRhaW5lZCBhbiB1bmtub3duIGVsZW1lbnQKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1QQVJTRS1FUlJPUi1OTy1TVUNILVBST1BFUlRZOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9QQVJTRV9FUlJPUl9OT19TVUNIX1BST1BFUlRZPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BbiBlbGVtZW50IGRpZCBub3QgaGF2ZSBhIHNwZWNpZmllZCBwcm9wZXJ0eQorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVBBUlNFLUVSUk9SLUxJTks6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BBUlNFX0VSUk9SX0xJTks8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZXJlIHdhcyBhbiBlcnJvciBsaW5raW5nIHR3byBwYWRzLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVBBUlNFLUVSUk9SLUNPVUxELU5PVC1TRVQtUFJPUEVSVFk6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BBUlNFX0VSUk9SX0NPVUxEX05PVF9TRVRfUFJPUEVSVFk8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZXJlIHdhcyBhbiBlcnJvciBzZXR0aW5nIGEgcHJvcGVydHkKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1QQVJTRS1FUlJPUi1FTVBUWS1CSU46Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BBUlNFX0VSUk9SX0VNUFRZX0JJTjwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QW4gZW1wdHkgYmluIHdhcyBzcGVjaWZpZWQuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUEFSU0UtRVJST1ItRU1QVFk6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BBUlNFX0VSUk9SX0VNUFRZPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BbiBlbXB0eSBkZXNjcmlwdGlvbiB3YXMgc3BlY2lmaWVkCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RQYXJzZUNvbnRleHQiPjwvYT48aDM+R3N0UGFyc2VDb250ZXh0PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCBfR3N0UGFyc2VDb250ZXh0IEdzdFBhcnNlQ29udGV4dDs8L3ByZT4KKzxwPgorT3BhcXVlIHN0cnVjdHVyZS4KKzwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UGFyc2VGbGFncyI+PC9hPjxoMz5lbnVtIEdzdFBhcnNlRmxhZ3M8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9QQVJTRV9GTEFHX05PTkUgPSAwLAorICBHU1RfUEFSU0VfRkxBR19GQVRBTF9FUlJPUlMgPSAoMSAmbHQ7Jmx0OyAwKQorfSBHc3RQYXJzZUZsYWdzOworPC9wcmU+Cis8cD4KK1BhcnNpbmcgb3B0aW9ucy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVBBUlNFLUZMQUctTk9ORTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUEFSU0VfRkxBR19OT05FPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5EbyBub3QgdXNlIGFueSBzcGVjaWFsIHBhcnNpbmcgb3B0aW9ucy4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1QQVJTRS1GTEFHLUZBVEFMLUVSUk9SUzpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUEFSU0VfRkxBR19GQVRBTF9FUlJPUlM8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPkFsd2F5cyByZXR1cm4gTlVMTCB3aGVuIGFuIGVycm9yIG9jY3VycworICAgIChkZWZhdWx0IGJlaGF2aW91ciBpcyB0byByZXR1cm4gcGFydGlhbGx5IGNvbnN0cnVjdGVkIGJpbnMgb3IgZWxlbWVudHMKKyAgICAgaW4gc29tZSBjYXNlcykKKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYXJzZS1sYXVuY2giPjwvYT48aDM+Z3N0X3BhcnNlX2xhdW5jaCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICogICAgICAgIGdzdF9wYXJzZV9sYXVuY2ggICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqcGlwZWxpbmVfZGVzY3JpcHRpb248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1FcnJvci1SZXBvcnRpbmcuaHRtbCNHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRXJyb3I8L3NwYW4+PC9hPiAqKmVycm9yPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlIGEgbmV3IHBpcGVsaW5lIGJhc2VkIG9uIGNvbW1hbmQgbGluZSBzeW50YXguCitQbGVhc2Ugbm90ZSB0aGF0IHlvdSBtaWdodCBnZXQgYSByZXR1cm4gdmFsdWUgdGhhdCBpcyBub3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gZXZlbiB0aG91Z2gKK3RoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXJyb3I8L2NvZGU+PC9lbT4gaXMgc2V0LiBJbiB0aGlzIGNhc2UgdGhlcmUgd2FzIGEgcmVjb3ZlcmFibGUgcGFyc2luZyBlcnJvciBhbmQgeW91CitjYW4gdHJ5IHRvIHBsYXkgdGhlIHBpcGVsaW5lLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBpcGVsaW5lX2Rlc2NyaXB0aW9uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjb21tYW5kIGxpbmUgZGVzY3JpYmluZyB0aGUgcGlwZWxpbmU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVycm9yPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgYW4gZXJyb25lb3VzIHBpcGVsaW5lLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IGVsZW1lbnQgb24gc3VjY2VzcywgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gb24gZmFpbHVyZS4gSWYKK21vcmUgdGhhbiBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzcGVjaWZpZWQgYnkgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5waXBlbGluZV9kZXNjcmlwdGlvbjwvY29kZT48L2VtPiwKK2FsbCBlbGVtZW50cyBhcmUgcHV0IGludG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPiwgd2hpY2ggdGhhbiBpcyByZXR1cm5lZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYXJzZS1sYXVuY2gtZnVsbCI+PC9hPjxoMz5nc3RfcGFyc2VfbGF1bmNoX2Z1bGwgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqICAgICAgICBnc3RfcGFyc2VfbGF1bmNoX2Z1bGwgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnBpcGVsaW5lX2Rlc2NyaXB0aW9uPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHc3RQYXJzZUNvbnRleHQiIHRpdGxlPSJHc3RQYXJzZUNvbnRleHQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYXJzZUNvbnRleHQ8L3NwYW4+PC9hPiAqY29udGV4dDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR3N0UGFyc2VGbGFncyIgdGl0bGU9ImVudW0gR3N0UGFyc2VGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhcnNlRmxhZ3M8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUVycm9yLVJlcG9ydGluZy5odG1sI0dFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdFcnJvcjwvc3Bhbj48L2E+ICoqZXJyb3I8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGUgYSBuZXcgcGlwZWxpbmUgYmFzZWQgb24gY29tbWFuZCBsaW5lIHN5bnRheC4KK1BsZWFzZSBub3RlIHRoYXQgeW91IG1pZ2h0IGdldCBhIHJldHVybiB2YWx1ZSB0aGF0IGlzIG5vdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBldmVuIHRob3VnaAordGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lcnJvcjwvY29kZT48L2VtPiBpcyBzZXQuIEluIHRoaXMgY2FzZSB0aGVyZSB3YXMgYSByZWNvdmVyYWJsZSBwYXJzaW5nIGVycm9yIGFuZCB5b3UKK2NhbiB0cnkgdG8gcGxheSB0aGUgcGlwZWxpbmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGlwZWxpbmVfZGVzY3JpcHRpb248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGNvbW1hbmQgbGluZSBkZXNjcmliaW5nIHRoZSBwaXBlbGluZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29udGV4dDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBhcnNlIGNvbnRleHQgYWxsb2NhdGVkIHdpdGgKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtY29udGV4dC1uZXciIHRpdGxlPSJnc3RfcGFyc2VfY29udGV4dF9uZXcgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhcnNlX2NvbnRleHRfbmV3KCk8L2NvZGU+PC9hPiwgb3IgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZ3M8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cGFyc2luZyBvcHRpb25zLCBvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR1NULVBBUlNFLUZMQUctTk9ORTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1BBUlNFX0ZMQUdfTk9ORTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVycm9yPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgYW4gZXJyb25lb3VzIHBpcGVsaW5lLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IGVsZW1lbnQgb24gc3VjY2VzcywgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gb24gZmFpbHVyZS4gSWYKK21vcmUgdGhhbiBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzcGVjaWZpZWQgYnkgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5waXBlbGluZV9kZXNjcmlwdGlvbjwvY29kZT48L2VtPiwKK2FsbCBlbGVtZW50cyBhcmUgcHV0IGludG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPiwgd2hpY2ggdGhlbiBpcyByZXR1cm5lZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYXJzZS1sYXVuY2h2Ij48L2E+PGgzPmdzdF9wYXJzZV9sYXVuY2h2ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKiAgICAgICAgZ3N0X3BhcnNlX2xhdW5jaHYgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqYXJndjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUVycm9yLVJlcG9ydGluZy5odG1sI0dFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdFcnJvcjwvc3Bhbj48L2E+ICoqZXJyb3I8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGUgYSBuZXcgZWxlbWVudCBiYXNlZCBvbiBjb21tYW5kIGxpbmUgc3ludGF4LgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVycm9yPC9jb2RlPjwvZW0+IHdpbGwgY29udGFpbiBhbiBlcnJvciBtZXNzYWdlIGlmIGFuIGVycm9uZXVvcyBwaXBlbGluZSBpcyBzcGVjaWZpZWQuCitBbiBlcnJvciBkb2VzIG5vdCBtZWFuIHRoYXQgdGhlIHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hcmd2PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm51bGwtdGVybWluYXRlZCBhcnJheSBvZiBhcmd1bWVudHMuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQuIERlZmF1bHQgaXMgdHJhbnNmZXIgbm9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbjwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IHplcm8tdGVybWluYXRlZD0xXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXJyb3I8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9pbnRlciB0byBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IGVsZW1lbnQgb24gc3VjY2VzcyBhbmQgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gb24gZmFpbHVyZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYXJzZS1sYXVuY2h2LWZ1bGwiPjwvYT48aDM+Z3N0X3BhcnNlX2xhdW5jaHZfZnVsbCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICogICAgICAgIGdzdF9wYXJzZV9sYXVuY2h2X2Z1bGwgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKmFyZ3Y8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dzdFBhcnNlQ29udGV4dCIgdGl0bGU9IkdzdFBhcnNlQ29udGV4dCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhcnNlQ29udGV4dDwvc3Bhbj48L2E+ICpjb250ZXh0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHc3RQYXJzZUZsYWdzIiB0aXRsZT0iZW51bSBHc3RQYXJzZUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFyc2VGbGFnczwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gKiplcnJvcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZSBhIG5ldyBlbGVtZW50IGJhc2VkIG9uIGNvbW1hbmQgbGluZSBzeW50YXguCis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXJyb3I8L2NvZGU+PC9lbT4gd2lsbCBjb250YWluIGFuIGVycm9yIG1lc3NhZ2UgaWYgYW4gZXJyb25lb3VzIHBpcGVsaW5lIGlzIHNwZWNpZmllZC4KK0FuIGVycm9yIGRvZXMgbm90IG1lYW4gdGhhdCB0aGUgcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFyZ3Y8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bnVsbC10ZXJtaW5hdGVkIGFycmF5IG9mIGFyZ3VtZW50cy4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dC4gRGVmYXVsdCBpcyB0cmFuc2ZlciBub25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmluPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gemVyby10ZXJtaW5hdGVkPTFdPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb250ZXh0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgcGFyc2UgY29udGV4dCBhbGxvY2F0ZWQgd2l0aAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1jb250ZXh0LW5ldyIgdGl0bGU9ImdzdF9wYXJzZV9jb250ZXh0X25ldyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFyc2VfY29udGV4dF9uZXcoKTwvY29kZT48L2E+LCBvciA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wYXJzaW5nIG9wdGlvbnMsIG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHU1QtUEFSU0UtRkxBRy1OT05FOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfUEFSU0VfRkxBR19OT05FPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXJyb3I8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9pbnRlciB0byBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gKHdoaWNoIG11c3QgYmUgaW5pdGlhbGlzZWQgdG8gPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4pPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXcgZWxlbWVudCBvbiBzdWNjZXNzOyBvbiBmYWlsdXJlLCBlaXRoZXIgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4KK29yIGEgcGFydGlhbGx5LWNvbnN0cnVjdGVkIGJpbiBvciBlbGVtZW50IHdpbGwgYmUgcmV0dXJuZWQgYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lcnJvcjwvY29kZT48L2VtPiB3aWxsCitiZSBzZXQgKHVubGVzcyB5b3UgcGFzc2VkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHU1QtUEFSU0UtRkxBRy1GQVRBTC1FUlJPUlM6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9QQVJTRV9GTEFHX0ZBVEFMX0VSUk9SUzwvc3Bhbj48L2E+IGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPiwgdGhlbgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gd2lsbCBhbHdheXMgYmUgcmV0dXJuZWQgb24gZmFpbHVyZSkuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFyc2UtYmluLWZyb20tZGVzY3JpcHRpb24iPjwvYT48aDM+Z3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKiAgICAgICAgZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpiaW5fZGVzY3JpcHRpb248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBnaG9zdF91bmxpbmtlZF9wYWRzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gKiplcnI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitUaGlzIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1sYXVuY2giIHRpdGxlPSJnc3RfcGFyc2VfbGF1bmNoICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYXJzZV9sYXVuY2goKTwvY29kZT48L2E+IHRvIGNyZWF0ZSBhCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiBmcm9tIGEgZ3N0LWxhdW5jaC1zdHlsZSBwaXBlbGluZSBkZXNjcmlwdGlvbi4gU2VlCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWxhdW5jaCIgdGl0bGU9ImdzdF9wYXJzZV9sYXVuY2ggKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhcnNlX2xhdW5jaCgpPC9jb2RlPjwvYT4gYW5kIHRoZSBnc3QtbGF1bmNoIG1hbiBwYWdlIGZvciBkZXRhaWxzIGFib3V0IHRoZQorc3ludGF4LiBHaG9zdCBwYWRzIG9uIHRoZSBiaW4gZm9yIHVubGlua2VkIHNvdXJjZSBvciBzaW5rIHBhZHMKK3dpdGhpbiB0aGUgYmluIGNhbiBhdXRvbWF0aWNhbGx5IGJlIGNyZWF0ZWQgKGJ1dCBvbmx5IGEgbWF4aW11bSBvZgorb25lIGdob3N0IHBhZCBmb3IgZWFjaCBkaXJlY3Rpb24gd2lsbCBiZSBjcmVhdGVkOyBpZiB5b3UgZXhwZWN0CittdWx0aXBsZSB1bmxpbmtlZCBzb3VyY2UgcGFkcyBvciBtdWx0aXBsZSB1bmxpbmtlZCBzaW5rIHBhZHMKK2FuZCB3YW50IHRoZW0gYWxsIGdob3N0ZWQsIHlvdSB3aWxsIGhhdmUgdG8gY3JlYXRlIHRoZSBnaG9zdCBwYWRzCit5b3Vyc2VsZikuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YmluX2Rlc2NyaXB0aW9uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmNvbW1hbmQgbGluZSBkZXNjcmliaW5nIHRoZSBiaW48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmdob3N0X3VubGlua2VkX3BhZHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+d2hldGhlciB0byBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBnaG9zdCBwYWRzCitmb3IgdW5saW5rZWQgc291cmNlIG9yIHNpbmsgcGFkcyB3aXRoaW4gdGhlIGJpbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXJyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPndoZXJlIHRvIHN0b3JlIHRoZSBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgYW4gZXJyb3IsIG9yIE5VTEw8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ld2x5LWNyZWF0ZWQgYmluLCBvciBOVUxMIGlmIGFuIGVycm9yIG9jY3VycmVkLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFyc2UtYmluLWZyb20tZGVzY3JpcHRpb24tZnVsbCI+PC9hPjxoMz5nc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb25fZnVsbCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICogICAgICAgIGdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbl9mdWxsICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqYmluX2Rlc2NyaXB0aW9uPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gZ2hvc3RfdW5saW5rZWRfcGFkczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR3N0UGFyc2VDb250ZXh0IiB0aXRsZT0iR3N0UGFyc2VDb250ZXh0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFyc2VDb250ZXh0PC9zcGFuPjwvYT4gKmNvbnRleHQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dzdFBhcnNlRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFBhcnNlRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYXJzZUZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1FcnJvci1SZXBvcnRpbmcuaHRtbCNHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRXJyb3I8L3NwYW4+PC9hPiAqKmVycjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1RoaXMgaXMgYSBjb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWxhdW5jaCIgdGl0bGU9ImdzdF9wYXJzZV9sYXVuY2ggKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhcnNlX2xhdW5jaCgpPC9jb2RlPjwvYT4gdG8gY3JlYXRlIGEKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+IGZyb20gYSBnc3QtbGF1bmNoLXN0eWxlIHBpcGVsaW5lIGRlc2NyaXB0aW9uLiBTZWUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtbGF1bmNoIiB0aXRsZT0iZ3N0X3BhcnNlX2xhdW5jaCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFyc2VfbGF1bmNoKCk8L2NvZGU+PC9hPiBhbmQgdGhlIGdzdC1sYXVuY2ggbWFuIHBhZ2UgZm9yIGRldGFpbHMgYWJvdXQgdGhlCitzeW50YXguIEdob3N0IHBhZHMgb24gdGhlIGJpbiBmb3IgdW5saW5rZWQgc291cmNlIG9yIHNpbmsgcGFkcword2l0aGluIHRoZSBiaW4gY2FuIGF1dG9tYXRpY2FsbHkgYmUgY3JlYXRlZCAoYnV0IG9ubHkgYSBtYXhpbXVtIG9mCitvbmUgZ2hvc3QgcGFkIGZvciBlYWNoIGRpcmVjdGlvbiB3aWxsIGJlIGNyZWF0ZWQ7IGlmIHlvdSBleHBlY3QKK211bHRpcGxlIHVubGlua2VkIHNvdXJjZSBwYWRzIG9yIG11bHRpcGxlIHVubGlua2VkIHNpbmsgcGFkcworYW5kIHdhbnQgdGhlbSBhbGwgZ2hvc3RlZCwgeW91IHdpbGwgaGF2ZSB0byBjcmVhdGUgdGhlIGdob3N0IHBhZHMKK3lvdXJzZWxmKS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iaW5fZGVzY3JpcHRpb248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Y29tbWFuZCBsaW5lIGRlc2NyaWJpbmcgdGhlIGJpbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Z2hvc3RfdW5saW5rZWRfcGFkczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD53aGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGdob3N0IHBhZHMKK2ZvciB1bmxpbmtlZCBzb3VyY2Ugb3Igc2luayBwYWRzIHdpdGhpbiB0aGUgYmluPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb250ZXh0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgcGFyc2UgY29udGV4dCBhbGxvY2F0ZWQgd2l0aAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1jb250ZXh0LW5ldyIgdGl0bGU9ImdzdF9wYXJzZV9jb250ZXh0X25ldyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFyc2VfY29udGV4dF9uZXcoKTwvY29kZT48L2E+LCBvciA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wYXJzaW5nIG9wdGlvbnMsIG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHU1QtUEFSU0UtRkxBRy1OT05FOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfUEFSU0VfRkxBR19OT05FPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXJyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPndoZXJlIHRvIHN0b3JlIHRoZSBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgYW4gZXJyb3IsIG9yIE5VTEw8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ld2x5LWNyZWF0ZWQgYmluLCBvciBOVUxMIGlmIGFuIGVycm9yIG9jY3VycmVkLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBhcnNlLWNvbnRleHQtbmV3Ij48L2E+PGgzPmdzdF9wYXJzZV9jb250ZXh0X25ldyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dzdFBhcnNlQ29udGV4dCIgdGl0bGU9IkdzdFBhcnNlQ29udGV4dCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYXJzZUNvbnRleHQ8L3NwYW4+PC9hPiAqICAgZ3N0X3BhcnNlX2NvbnRleHRfbmV3ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBbGxvY2F0ZXMgYSBwYXJzZSBjb250ZXh0IGZvciB1c2Ugd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWxhdW5jaC1mdWxsIiB0aXRsZT0iZ3N0X3BhcnNlX2xhdW5jaF9mdWxsICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYXJzZV9sYXVuY2hfZnVsbCgpPC9jb2RlPjwvYT4gb3IKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtbGF1bmNodi1mdWxsIiB0aXRsZT0iZ3N0X3BhcnNlX2xhdW5jaHZfZnVsbCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFyc2VfbGF1bmNodl9mdWxsKCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ3N0X3BhcnNlX2NvbnRleHRfZnJlZQorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXdseS1hbGxvY2F0ZWQgcGFyc2UgY29udGV4dC4gRnJlZSB3aXRoCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWNvbnRleHQtZnJlZSIgdGl0bGU9ImdzdF9wYXJzZV9jb250ZXh0X2ZyZWUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhcnNlX2NvbnRleHRfZnJlZSgpPC9jb2RlPjwvYT4gd2hlbiBubyBsb25nZXIgbmVlZGVkLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wYXJzZS1jb250ZXh0LWZyZWUiPjwvYT48aDM+Z3N0X3BhcnNlX2NvbnRleHRfZnJlZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcGFyc2VfY29udGV4dF9mcmVlICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHc3RQYXJzZUNvbnRleHQiIHRpdGxlPSJHc3RQYXJzZUNvbnRleHQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYXJzZUNvbnRleHQ8L3NwYW4+PC9hPiAqY29udGV4dDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0ZyZWVzIGEgcGFyc2UgY29udGV4dCBwcmV2aW91c2x5IGFsbG9jYXRlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtY29udGV4dC1uZXciIHRpdGxlPSJnc3RfcGFyc2VfY29udGV4dF9uZXcgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhcnNlX2NvbnRleHRfbmV3KCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29udGV4dDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHc3RQYXJzZUNvbnRleHQiIHRpdGxlPSJHc3RQYXJzZUNvbnRleHQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYXJzZUNvbnRleHQ8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcGFyc2UtY29udGV4dC1nZXQtbWlzc2luZy1lbGVtZW50cyI+PC9hPjxoMz5nc3RfcGFyc2VfY29udGV4dF9nZXRfbWlzc2luZ19lbGVtZW50cyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiogICAgICAgICAgICBnc3RfcGFyc2VfY29udGV4dF9nZXRfbWlzc2luZ19lbGVtZW50cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHc3RQYXJzZUNvbnRleHQiIHRpdGxlPSJHc3RQYXJzZUNvbnRleHQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYXJzZUNvbnRleHQ8L3NwYW4+PC9hPiAqY29udGV4dDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JldHJpZXZlIG1pc3NpbmcgZWxlbWVudHMgZnJvbSBhIHByZXZpb3VzIHJ1biBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWxhdW5jaC1mdWxsIiB0aXRsZT0iZ3N0X3BhcnNlX2xhdW5jaF9mdWxsICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYXJzZV9sYXVuY2hfZnVsbCgpPC9jb2RlPjwvYT4KK29yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtbGF1bmNodi1mdWxsIiB0aXRsZT0iZ3N0X3BhcnNlX2xhdW5jaHZfZnVsbCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFyc2VfbGF1bmNodl9mdWxsKCk8L2NvZGU+PC9hPi4gV2lsbCBvbmx5IHJldHVybiByZXN1bHRzIGlmIGFuIGVycm9yIGNvZGUKK29mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHU1QtUEFSU0UtRVJST1ItTk8tU1VDSC1FTEVNRU5UOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUEFSU0VfRVJST1JfTk9fU1VDSF9FTEVNRU5UPC9jb2RlPjwvYT4gd2FzIHJldHVybmVkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR3N0UGFyc2VDb250ZXh0IiB0aXRsZT0iR3N0UGFyc2VDb250ZXh0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFyc2VDb250ZXh0PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEKK05VTEwtdGVybWluYXRlZCBhcnJheSBvZiBlbGVtZW50IGZhY3RvcnkgbmFtZSBzdHJpbmdzIG9mIG1pc3NpbmcKK2VsZW1lbnRzLiBGcmVlIHdpdGggPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdHJpbmctVXRpbGl0eS1GdW5jdGlvbnMuaHRtbCNnLXN0cmZyZWV2Ij48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfc3RyZnJlZXYoKTwvY29kZT48L2E+IHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IHplcm8tdGVybWluYXRlZD0xXVs8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBnY2hhcipdPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMDwvcD4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RQb2xsLmh0bWwgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RQb2xsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NkYjE4NwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbApAQCAtMCwwICsxLDcxOSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdzdFBvbGw8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiIHRpdGxlPSJHc3RQcmVzZXQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdFBvbGwuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItR3N0UG9sbC5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0UG9sbCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1Hc3RQb2xsLnRvcF9vZl9wYWdlIj48L2E+R3N0UG9sbDwvc3Bhbj48L2gyPgorPHA+R3N0UG9sbCDigJQgS2VlcCB0cmFjayBvZiBmaWxlIGRlc2NyaXB0b3JzIGFuZCBtYWtlIGl0IHBvc3NpYmxlCisgICAgICAgICAgICAgICAgICAgIHRvIHdhaXQgb24gdGhlbSBpbiBhIGNhbmNlbGFibGUgd2F5PC9wPgorPC90ZD4KKzx0ZCB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgorPC90cj48L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFBvbGwuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKKworICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+R3N0UG9sbDwvYT47CisgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGxGRCIgdGl0bGU9IkdzdFBvbGxGRCI+R3N0UG9sbEZEPC9hPjsKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR1NULVBPTEwtRkQtSU5JVDpDQVBTIiB0aXRsZT0iR1NUX1BPTExfRkRfSU5JVCI+R1NUX1BPTExfRkRfSU5JVDwvYT4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtYWRkLWZkIiB0aXRsZT0iZ3N0X3BvbGxfYWRkX2ZkICgpIj5nc3RfcG9sbF9hZGRfZmQ8L2E+ICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPiAqc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGxGRCIgdGl0bGU9IkdzdFBvbGxGRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGxGRDwvc3Bhbj48L2E+ICpmZDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWZkLWNhbi1yZWFkIiB0aXRsZT0iZ3N0X3BvbGxfZmRfY2FuX3JlYWQgKCkiPmdzdF9wb2xsX2ZkX2Nhbl9yZWFkPC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbDwvc3Bhbj48L2E+ICpzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbEZEIiB0aXRsZT0iR3N0UG9sbEZEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbEZEPC9zcGFuPjwvYT4gKmZkPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtY2FuLXdyaXRlIiB0aXRsZT0iZ3N0X3BvbGxfZmRfY2FuX3dyaXRlICgpIj5nc3RfcG9sbF9mZF9jYW5fd3JpdGU8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPiAqc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGxGRCIgdGl0bGU9IkdzdFBvbGxGRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGxGRDwvc3Bhbj48L2E+ICpmZDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWZkLWN0bC1yZWFkIiB0aXRsZT0iZ3N0X3BvbGxfZmRfY3RsX3JlYWQgKCkiPmdzdF9wb2xsX2ZkX2N0bF9yZWFkPC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbDwvc3Bhbj48L2E+ICpzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbEZEIiB0aXRsZT0iR3N0UG9sbEZEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbEZEPC9zcGFuPjwvYT4gKmZkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gYWN0aXZlPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtY3RsLXdyaXRlIiB0aXRsZT0iZ3N0X3BvbGxfZmRfY3RsX3dyaXRlICgpIj5nc3RfcG9sbF9mZF9jdGxfd3JpdGU8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPiAqc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGxGRCIgdGl0bGU9IkdzdFBvbGxGRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGxGRDwvc3Bhbj48L2E+ICpmZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGFjdGl2ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWZkLWhhcy1jbG9zZWQiIHRpdGxlPSJnc3RfcG9sbF9mZF9oYXNfY2xvc2VkICgpIj5nc3RfcG9sbF9mZF9oYXNfY2xvc2VkPC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPiAqc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGxGRCIgdGl0bGU9IkdzdFBvbGxGRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGxGRDwvc3Bhbj48L2E+ICpmZDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWZkLWhhcy1lcnJvciIgdGl0bGU9ImdzdF9wb2xsX2ZkX2hhc19lcnJvciAoKSI+Z3N0X3BvbGxfZmRfaGFzX2Vycm9yPC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT4gKnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsRkQiIHRpdGxlPSJHc3RQb2xsRkQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsRkQ8L3NwYW4+PC9hPiAqZmQ8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1mZC1pZ25vcmVkIiB0aXRsZT0iZ3N0X3BvbGxfZmRfaWdub3JlZCAoKSI+Z3N0X3BvbGxfZmRfaWdub3JlZDwvYT4gICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT4gKnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsRkQiIHRpdGxlPSJHc3RQb2xsRkQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsRkQ8L3NwYW4+PC9hPiAqZmQ8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1mZC1pbml0IiB0aXRsZT0iZ3N0X3BvbGxfZmRfaW5pdCAoKSI+Z3N0X3BvbGxfZmRfaW5pdDwvYT4gICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbEZEIiB0aXRsZT0iR3N0UG9sbEZEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbEZEPC9zcGFuPjwvYT4gKmZkPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZnJlZSIgdGl0bGU9ImdzdF9wb2xsX2ZyZWUgKCkiPmdzdF9wb2xsX2ZyZWU8L2E+ICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbDwvc3Bhbj48L2E+ICpzZXQ8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UG9sbDwvc3Bhbj48L2E+ICogICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLW5ldyIgdGl0bGU9ImdzdF9wb2xsX25ldyAoKSI+Z3N0X3BvbGxfbmV3PC9hPiAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBjb250cm9sbGFibGU8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UG9sbDwvc3Bhbj48L2E+ICogICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLW5ldy10aW1lciIgdGl0bGU9ImdzdF9wb2xsX25ld190aW1lciAoKSI+Z3N0X3BvbGxfbmV3X3RpbWVyPC9hPiAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZ2V0LXJlYWQtZ3BvbGxmZCIgdGl0bGU9ImdzdF9wb2xsX2dldF9yZWFkX2dwb2xsZmQgKCkiPmdzdF9wb2xsX2dldF9yZWFkX2dwb2xsZmQ8L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbDwvc3Bhbj48L2E+ICpzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1UaGUtTWFpbi1FdmVudC1Mb29wLmh0bWwjR1BvbGxGRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdQb2xsRkQ8L3NwYW4+PC9hPiAqZmQ8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1yZW1vdmUtZmQiIHRpdGxlPSJnc3RfcG9sbF9yZW1vdmVfZmQgKCkiPmdzdF9wb2xsX3JlbW92ZV9mZDwvYT4gICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbDwvc3Bhbj48L2E+ICpzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbEZEIiB0aXRsZT0iR3N0UG9sbEZEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbEZEPC9zcGFuPjwvYT4gKmZkPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtcmVzdGFydCIgdGl0bGU9ImdzdF9wb2xsX3Jlc3RhcnQgKCkiPmdzdF9wb2xsX3Jlc3RhcnQ8L2E+ICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbDwvc3Bhbj48L2E+ICpzZXQ8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1zZXQtY29udHJvbGxhYmxlIiB0aXRsZT0iZ3N0X3BvbGxfc2V0X2NvbnRyb2xsYWJsZSAoKSI+Z3N0X3BvbGxfc2V0X2NvbnRyb2xsYWJsZTwvYT4gICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT4gKnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGNvbnRyb2xsYWJsZTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXNldC1mbHVzaGluZyIgdGl0bGU9ImdzdF9wb2xsX3NldF9mbHVzaGluZyAoKSI+Z3N0X3BvbGxfc2V0X2ZsdXNoaW5nPC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT4gKnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGZsdXNoaW5nPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC13YWl0IiB0aXRsZT0iZ3N0X3BvbGxfd2FpdCAoKSI+Z3N0X3BvbGxfd2FpdDwvYT4gICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT4gKnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lb3V0PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtcmVhZC1jb250cm9sIiB0aXRsZT0iZ3N0X3BvbGxfcmVhZF9jb250cm9sICgpIj5nc3RfcG9sbF9yZWFkX2NvbnRyb2w8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPiAqc2V0PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtd3JpdGUtY29udHJvbCIgdGl0bGU9ImdzdF9wb2xsX3dyaXRlX2NvbnRyb2wgKCkiPmdzdF9wb2xsX3dyaXRlX2NvbnRyb2w8L2E+ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbDwvc3Bhbj48L2E+ICpzZXQ8L2NvZGU+PC9lbT4pOworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RQb2xsLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPgorQSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPiBrZWVwcyB0cmFjayBvZiBmaWxlIGRlc2NyaXB0b3JzIG11Y2ggbGlrZSBmZF9zZXQgKHVzZWQgd2l0aAorPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5zZWxlY3QoKTwvY29kZT4pIG9yIGEgc3RydWN0IHBvbGxmZCBhcnJheSAodXNlZCB3aXRoIDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+cG9sbCgpPC9jb2RlPikuIE9uY2UgY3JlYXRlZCB3aXRoCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1uZXciIHRpdGxlPSJnc3RfcG9sbF9uZXcgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfbmV3KCk8L2NvZGU+PC9hPiwgdGhlIHNldCBjYW4gYmUgdXNlZCB0byB3YWl0IGZvciBmaWxlIGRlc2NyaXB0b3JzIHRvIGJlCityZWFkYWJsZSBhbmQvb3Igd3JpdGVhYmxlLiBJdCBpcyBwb3NzaWJsZSB0byBtYWtlIHRoaXMgd2FpdCBiZSBjb250cm9sbGVkCitieSBzcGVjaWZ5aW5nIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGZvciB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnRyb2xsYWJsZTwvY29kZT48L2VtPiBmbGFnIHdoZW4gY3JlYXRpbmcgdGhlIHNldCAob3IKK2xhdGVyIGNhbGxpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtc2V0LWNvbnRyb2xsYWJsZSIgdGl0bGU9ImdzdF9wb2xsX3NldF9jb250cm9sbGFibGUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfc2V0X2NvbnRyb2xsYWJsZSgpPC9jb2RlPjwvYT4pLgorPC9wPgorPHA+CitOZXcgZmlsZSBkZXNjcmlwdG9ycyBhcmUgYWRkZWQgdG8gdGhlIHNldCB1c2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1hZGQtZmQiIHRpdGxlPSJnc3RfcG9sbF9hZGRfZmQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfYWRkX2ZkKCk8L2NvZGU+PC9hPiwgYW5kCityZW1vdmVkIHVzaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXJlbW92ZS1mZCIgdGl0bGU9ImdzdF9wb2xsX3JlbW92ZV9mZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcG9sbF9yZW1vdmVfZmQoKTwvY29kZT48L2E+LiBDb250cm9sbGluZyB3aGljaCBmaWxlIGRlc2NyaXB0b3JzCitzaG91bGQgYmUgd2FpdGVkIGZvciB0byBiZWNvbWUgcmVhZGFibGUgYW5kL29yIHdyaXRlYWJsZSBhcmUgZG9uZSB1c2luZworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtY3RsLXJlYWQiIHRpdGxlPSJnc3RfcG9sbF9mZF9jdGxfcmVhZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcG9sbF9mZF9jdGxfcmVhZCgpPC9jb2RlPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWZkLWN0bC13cml0ZSIgdGl0bGU9ImdzdF9wb2xsX2ZkX2N0bF93cml0ZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcG9sbF9mZF9jdGxfd3JpdGUoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitVc2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtd2FpdCIgdGl0bGU9ImdzdF9wb2xsX3dhaXQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfd2FpdCgpPC9jb2RlPjwvYT4gdG8gd2FpdCBmb3IgdGhlIGZpbGUgZGVzY3JpcHRvcnMgdG8gYWN0dWFsbHkgYmVjb21lCityZWFkYWJsZSBhbmQvb3Igd3JpdGVhYmxlLCBvciB0byB0aW1lb3V0IGlmIG5vIGZpbGUgZGVzY3JpcHRvciBpcyBhdmFpbGFibGUKK2luIHRpbWUuIFRoZSB3YWl0IGNhbiBiZSBjb250cm9sbGVkIGJ5IGNhbGxpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtcmVzdGFydCIgdGl0bGU9ImdzdF9wb2xsX3Jlc3RhcnQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfcmVzdGFydCgpPC9jb2RlPjwvYT4gYW5kCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1zZXQtZmx1c2hpbmciIHRpdGxlPSJnc3RfcG9sbF9zZXRfZmx1c2hpbmcgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfc2V0X2ZsdXNoaW5nKCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxwPgorT25jZSB0aGUgZmlsZSBkZXNjcmlwdG9yIHNldCBoYXMgYmVlbiB3YWl0ZWQgZm9yLCBvbmUgY2FuIHVzZQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtaGFzLWNsb3NlZCIgdGl0bGU9ImdzdF9wb2xsX2ZkX2hhc19jbG9zZWQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfZmRfaGFzX2Nsb3NlZCgpPC9jb2RlPjwvYT4gdG8gc2VlIGlmIHRoZSBmaWxlIGRlc2NyaXB0b3IgaGFzIGJlZW4gY2xvc2VkLAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtaGFzLWVycm9yIiB0aXRsZT0iZ3N0X3BvbGxfZmRfaGFzX2Vycm9yICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wb2xsX2ZkX2hhc19lcnJvcigpPC9jb2RlPjwvYT4gdG8gc2VlIGlmIGl0IGhhcyBnZW5lcmF0ZWQgYW4gZXJyb3IsCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1mZC1jYW4tcmVhZCIgdGl0bGU9ImdzdF9wb2xsX2ZkX2Nhbl9yZWFkICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wb2xsX2ZkX2Nhbl9yZWFkKCk8L2NvZGU+PC9hPiB0byBzZWUgaWYgaXQgaXMgcG9zc2libGUgdG8gcmVhZCBmcm9tIHRoZSBmaWxlCitkZXNjcmlwdG9yLCBhbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtY2FuLXdyaXRlIiB0aXRsZT0iZ3N0X3BvbGxfZmRfY2FuX3dyaXRlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wb2xsX2ZkX2Nhbl93cml0ZSgpPC9jb2RlPjwvYT4gdG8gc2VlIGlmIGl0IGlzIHBvc3NpYmxlIHRvCit3cml0ZSB0byBpdC4KKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFBvbGwuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFBvbGwiPjwvYT48aDM+R3N0UG9sbDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBzdHJ1Y3QgX0dzdFBvbGwgR3N0UG9sbDs8L3ByZT4KKzxwPgorQSBzZXQgb2YgZmlsZS9uZXR3b3JrIGRlc2NyaXB0b3JzLgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RQb2xsRkQiPjwvYT48aDM+R3N0UG9sbEZEPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCB7CisgIGludCBmZDsKK30gR3N0UG9sbEZEOworPC9wcmU+Cis8cD4KK0EgZmlsZSBkZXNjcmlwdG9yIG9iamVjdC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0idHlwZSI+aW50PC9zcGFuPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UG9sbEZELmZkIj48L2E+ZmQ8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgZmlsZSBkZXNjcmlwdG9yPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1QT0xMLUZELUlOSVQ6Q0FQUyI+PC9hPjxoMz5HU1RfUE9MTF9GRF9JTklUPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QT0xMX0ZEX0lOSVQgIHsgLTEsIC0xIH0KKzwvcHJlPgorPHA+CitBIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGxGRCIgdGl0bGU9IkdzdFBvbGxGRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGxGRDwvc3Bhbj48L2E+IG11c3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCB0aGlzIG1hY3JvLCBiZWZvcmUgaXQgY2FuIGJlCit1c2VkLiBUaGlzIG1hY3JvIGNhbiB1c2VkIGJlIHRvIGluaXRpYWxpemUgYSB2YXJpYWJsZSwgYnV0IGl0IGNhbm5vdAorYmUgYXNzaWduZWQgdG8gYSB2YXJpYWJsZS4gSW4gdGhhdCBjYXNlIHlvdSBoYXZlIHRvIHVzZQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtaW5pdCIgdGl0bGU9ImdzdF9wb2xsX2ZkX2luaXQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfZmRfaW5pdCgpPC9jb2RlPjwvYT4uCis8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTg8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wb2xsLWFkZC1mZCI+PC9hPjxoMz5nc3RfcG9sbF9hZGRfZmQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3BvbGxfYWRkX2ZkICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPiAqc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGxGRCIgdGl0bGU9IkdzdFBvbGxGRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGxGRDwvc3Bhbj48L2E+ICpmZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0FkZCBhIGZpbGUgZGVzY3JpcHRvciB0byB0aGUgZmlsZSBkZXNjcmlwdG9yIHNldC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBmaWxlIGRlc2NyaXB0b3Igc2V0LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBmaWxlIGRlc2NyaXB0b3IuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgZmlsZSBkZXNjcmlwdG9yIHdhcyBzdWNjZXNzZnVsbHkgYWRkZWQgdG8gdGhlIHNldC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjE4PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcG9sbC1mZC1jYW4tcmVhZCI+PC9hPjxoMz5nc3RfcG9sbF9mZF9jYW5fcmVhZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfcG9sbF9mZF9jYW5fcmVhZCAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbDwvc3Bhbj48L2E+ICpzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbEZEIiB0aXRsZT0iR3N0UG9sbEZEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbEZEPC9zcGFuPjwvYT4gKmZkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2sgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZkPC9jb2RlPjwvZW0+IGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXQ8L2NvZGU+PC9lbT4gaGFzIGRhdGEgdG8gYmUgcmVhZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBmaWxlIGRlc2NyaXB0b3Igc2V0LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBmaWxlIGRlc2NyaXB0b3IuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgZGVzY3JpcHRvciBoYXMgZGF0YSB0byBiZSByZWFkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTg8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wb2xsLWZkLWNhbi13cml0ZSI+PC9hPjxoMz5nc3RfcG9sbF9mZF9jYW5fd3JpdGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3BvbGxfZmRfY2FuX3dyaXRlICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPiAqc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGxGRCIgdGl0bGU9IkdzdFBvbGxGRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGxGRDwvc3Bhbj48L2E+ICpmZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NoZWNrIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZDwvY29kZT48L2VtPiBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2V0PC9jb2RlPjwvZW0+IGNhbiBiZSB1c2VkIGZvciB3cml0aW5nLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGZpbGUgZGVzY3JpcHRvciBzZXQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGZpbGUgZGVzY3JpcHRvci48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBkZXNjcmlwdG9yIGNhbiBiZSB1c2VkIGZvciB3cml0aW5nLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTg8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wb2xsLWZkLWN0bC1yZWFkIj48L2E+PGgzPmdzdF9wb2xsX2ZkX2N0bF9yZWFkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9wb2xsX2ZkX2N0bF9yZWFkICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT4gKnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsRkQiIHRpdGxlPSJHc3RQb2xsRkQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsRkQ8L3NwYW4+PC9hPiAqZmQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBhY3RpdmU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb250cm9sIHdoZXRoZXIgdGhlIGRlc2NyaXB0b3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZkPC9jb2RlPjwvZW0+IGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXQ8L2NvZGU+PC9lbT4gd2lsbCBiZSBtb25pdG9yZWQgZm9yCityZWFkYWJpbGl0eS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBmaWxlIGRlc2NyaXB0b3Igc2V0LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBmaWxlIGRlc2NyaXB0b3IuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hY3RpdmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXcgc3RhdHVzLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGRlc2NyaXB0b3Igd2FzIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTg8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wb2xsLWZkLWN0bC13cml0ZSI+PC9hPjxoMz5nc3RfcG9sbF9mZF9jdGxfd3JpdGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3BvbGxfZmRfY3RsX3dyaXRlICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPiAqc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGxGRCIgdGl0bGU9IkdzdFBvbGxGRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGxGRDwvc3Bhbj48L2E+ICpmZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGFjdGl2ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NvbnRyb2wgd2hldGhlciB0aGUgZGVzY3JpcHRvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmQ8L2NvZGU+PC9lbT4gaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNldDwvY29kZT48L2VtPiB3aWxsIGJlIG1vbml0b3JlZCBmb3IKK3dyaXRhYmlsaXR5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGZpbGUgZGVzY3JpcHRvciBzZXQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGZpbGUgZGVzY3JpcHRvci48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFjdGl2ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyBzdGF0dXMuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgZGVzY3JpcHRvciB3YXMgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xODwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBvbGwtZmQtaGFzLWNsb3NlZCI+PC9hPjxoMz5nc3RfcG9sbF9mZF9oYXNfY2xvc2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9wb2xsX2ZkX2hhc19jbG9zZWQgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT4gKnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsRkQiIHRpdGxlPSJHc3RQb2xsRkQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsRkQ8L3NwYW4+PC9hPiAqZmQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDaGVjayBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmQ8L2NvZGU+PC9lbT4gaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNldDwvY29kZT48L2VtPiBoYXMgY2xvc2VkIHRoZSBjb25uZWN0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGZpbGUgZGVzY3JpcHRvciBzZXQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGZpbGUgZGVzY3JpcHRvci48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBjb25uZWN0aW9uIHdhcyBjbG9zZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xODwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBvbGwtZmQtaGFzLWVycm9yIj48L2E+PGgzPmdzdF9wb2xsX2ZkX2hhc19lcnJvciAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfcG9sbF9mZF9oYXNfZXJyb3IgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbDwvc3Bhbj48L2E+ICpzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbEZEIiB0aXRsZT0iR3N0UG9sbEZEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbEZEPC9zcGFuPjwvYT4gKmZkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2sgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZkPC9jb2RlPjwvZW0+IGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXQ8L2NvZGU+PC9lbT4gaGFzIGFuIGVycm9yLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGZpbGUgZGVzY3JpcHRvciBzZXQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGZpbGUgZGVzY3JpcHRvci48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBkZXNjcmlwdG9yIGhhcyBhbiBlcnJvci48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjE4PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcG9sbC1mZC1pZ25vcmVkIj48L2E+PGgzPmdzdF9wb2xsX2ZkX2lnbm9yZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3BvbGxfZmRfaWdub3JlZCAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPiAqc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGxGRCIgdGl0bGU9IkdzdFBvbGxGRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGxGRDwvc3Bhbj48L2E+ICpmZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK01hcmsgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZkPC9jb2RlPjwvZW0+IGFzIGlnbm9yZWQgc28gdGhhdCB0aGUgbmV4dCBjYWxsIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXdhaXQiIHRpdGxlPSJnc3RfcG9sbF93YWl0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wb2xsX3dhaXQoKTwvY29kZT48L2E+IHdpbGwgeWllbGQKK3RoZSBzYW1lIHJlc3VsdCBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZkPC9jb2RlPjwvZW0+IGFzIGxhc3QgdGltZS4gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBpZiBubworb3BlcmF0aW9uIChyZWFkL3dyaXRlL3JlY3Yvc2VuZC9ldGMuKSB3aWxsIGJlIHBlcmZvcm1lZCBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmQ8L2NvZGU+PC9lbT4gYmVmb3JlCit0aGUgbmV4dCBjYWxsIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXdhaXQiIHRpdGxlPSJnc3RfcG9sbF93YWl0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wb2xsX3dhaXQoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitUaGUgcmVhc29uIHdoeSB0aGlzIGlzIG5lZWRlZCBpcyBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uCittaWdodCBub3QgYWxsb3cgcXVlcnlpbmcgdGhlIGZkIG1vcmUgdGhhbiBvbmNlIGJldHdlZW4gY2FsbHMgdG8gb25lIG9mCit0aGUgcmUtZW5hYmxpbmcgb3BlcmF0aW9ucy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBmaWxlIGRlc2NyaXB0b3Igc2V0LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBmaWxlIGRlc2NyaXB0b3IuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xODwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBvbGwtZmQtaW5pdCI+PC9hPjxoMz5nc3RfcG9sbF9mZF9pbml0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9wb2xsX2ZkX2luaXQgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbEZEIiB0aXRsZT0iR3N0UG9sbEZEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbEZEPC9zcGFuPjwvYT4gKmZkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSW5pdGlhbGl6ZXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZkPC9jb2RlPjwvZW0+LiBBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gaW5pdGlhbGl6ZSBpdCB3aXRoCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHU1QtUE9MTC1GRC1JTklUOkNBUFMiIHRpdGxlPSJHU1RfUE9MTF9GRF9JTklUIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1BPTExfRkRfSU5JVDwvc3Bhbj48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGxGRCIgdGl0bGU9IkdzdFBvbGxGRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGxGRDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xODwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBvbGwtZnJlZSI+PC9hPjxoMz5nc3RfcG9sbF9mcmVlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9wb2xsX2ZyZWUgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT4gKnNldDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0ZyZWUgYSBmaWxlIGRlc2NyaXB0b3Igc2V0LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBmaWxlIGRlc2NyaXB0b3Igc2V0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTg8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wb2xsLW5ldyI+PC9hPjxoMz5nc3RfcG9sbF9uZXcgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBvbGw8L3NwYW4+PC9hPiAqICAgICAgICAgICBnc3RfcG9sbF9uZXcgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gY29udHJvbGxhYmxlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlIGEgbmV3IGZpbGUgZGVzY3JpcHRvciBzZXQuIElmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb250cm9sbGFibGU8L2NvZGU+PC9lbT4sIGl0CitpcyBwb3NzaWJsZSB0byByZXN0YXJ0IG9yIGZsdXNoIGEgY2FsbCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC13YWl0IiB0aXRsZT0iZ3N0X3BvbGxfd2FpdCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcG9sbF93YWl0KCk8L2NvZGU+PC9hPiB3aXRoCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1yZXN0YXJ0IiB0aXRsZT0iZ3N0X3BvbGxfcmVzdGFydCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcG9sbF9yZXN0YXJ0KCk8L2NvZGU+PC9hPiBhbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtc2V0LWZsdXNoaW5nIiB0aXRsZT0iZ3N0X3BvbGxfc2V0X2ZsdXNoaW5nICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wb2xsX3NldF9mbHVzaGluZygpPC9jb2RlPjwvYT4gcmVzcGVjdGl2ZWx5LgorPC9wPgorPHA+CitGcmVlLWZ1bmN0aW9uOiBnc3RfcG9sbF9mcmVlCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29udHJvbGxhYmxlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPndoZXRoZXIgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGNvbnRyb2wgYSB3YWl0LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbDwvc3Bhbj48L2E+LCBvciA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpbiBjYXNlIG9mIGFuIGVycm9yLgorRnJlZSB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWZyZWUiIHRpdGxlPSJnc3RfcG9sbF9mcmVlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wb2xsX2ZyZWUoKTwvY29kZT48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xODwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBvbGwtbmV3LXRpbWVyIj48L2E+PGgzPmdzdF9wb2xsX25ld190aW1lciAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UG9sbDwvc3Bhbj48L2E+ICogICAgICAgICAgIGdzdF9wb2xsX25ld190aW1lciAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlIGEgbmV3IHBvbGwgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgZm9yIHNjaGVkdWxpbmcgY2FuY2VsbGFibGUKK3RpbWVvdXRzLgorPC9wPgorPHA+CitBIHRpbWVvdXQgaXMgcGVyZm9ybWVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtd2FpdCIgdGl0bGU9ImdzdF9wb2xsX3dhaXQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfd2FpdCgpPC9jb2RlPjwvYT4uIE11bHRpcGxlIHRpbWVvdXRzIGNhbiBiZQorcGVyZm9ybWVkIGZyb20gZGlmZmVyZW50IHRocmVhZHMuIAorPC9wPgorPHA+CitGcmVlLWZ1bmN0aW9uOiBnc3RfcG9sbF9mcmVlCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPiwgb3IgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaW4gY2FzZSBvZiBhbiBlcnJvci4KK0ZyZWUgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1mcmVlIiB0aXRsZT0iZ3N0X3BvbGxfZnJlZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcG9sbF9mcmVlKCk8L2NvZGU+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcG9sbC1nZXQtcmVhZC1ncG9sbGZkIj48L2E+PGgzPmdzdF9wb2xsX2dldF9yZWFkX2dwb2xsZmQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3BvbGxfZ2V0X3JlYWRfZ3BvbGxmZCAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPiAqc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItVGhlLU1haW4tRXZlbnQtTG9vcC5odG1sI0dQb2xsRkQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUG9sbEZEPC9zcGFuPjwvYT4gKmZkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0IGEgR1BvbGxGRCBmb3IgdGhlIHJlYWRpbmcgcGFydCBvZiB0aGUgY29udHJvbCBzb2NrZXQuIFRoaXMgaXMgdXNlZnVsIHdoZW4KK2ludGVncmF0aW5nIHdpdGggYSBHU291cmNlIGFuZCBHTWFpbkxvb3AuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2V0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVRoZS1NYWluLUV2ZW50LUxvb3AuaHRtbCNHUG9sbEZEIj48c3BhbiBjbGFzcz0idHlwZSI+R1BvbGxGRDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcG9sbC1yZW1vdmUtZmQiPjwvYT48aDM+Z3N0X3BvbGxfcmVtb3ZlX2ZkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9wb2xsX3JlbW92ZV9mZCAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT4gKnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsRkQiIHRpdGxlPSJHc3RQb2xsRkQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsRkQ8L3NwYW4+PC9hPiAqZmQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZW1vdmUgYSBmaWxlIGRlc2NyaXB0b3IgZnJvbSB0aGUgZmlsZSBkZXNjcmlwdG9yIHNldC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBmaWxlIGRlc2NyaXB0b3Igc2V0LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBmaWxlIGRlc2NyaXB0b3IuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgZmlsZSBkZXNjcmlwdG9yIHdhcyBzdWNjZXNzZnVsbHkgcmVtb3ZlZCBmcm9tIHRoZSBzZXQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xODwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBvbGwtcmVzdGFydCI+PC9hPjxoMz5nc3RfcG9sbF9yZXN0YXJ0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9wb2xsX3Jlc3RhcnQgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT4gKnNldDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1Jlc3RhcnQgYW55IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXdhaXQiIHRpdGxlPSJnc3RfcG9sbF93YWl0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wb2xsX3dhaXQoKTwvY29kZT48L2E+IHRoYXQgaXMgaW4gcHJvZ3Jlc3MuIFRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5Cit1c2VkIGFmdGVyIGFkZGluZyBvciByZW1vdmluZyBkZXNjcmlwdG9ycyB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2V0PC9jb2RlPjwvZW0+LgorPC9wPgorPHA+CitJZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2V0PC9jb2RlPjwvZW0+IGlzIG5vdCBjb250cm9sbGFibGUsIHRoZW4gdGhpcyBjYWxsIHdpbGwgaGF2ZSBubyBlZmZlY3QuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbDwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjE4PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcG9sbC1zZXQtY29udHJvbGxhYmxlIj48L2E+PGgzPmdzdF9wb2xsX3NldF9jb250cm9sbGFibGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3BvbGxfc2V0X2NvbnRyb2xsYWJsZSAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPiAqc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gY29udHJvbGxhYmxlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorV2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29udHJvbGxhYmxlPC9jb2RlPjwvZW0+IGlzIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LCB0aGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCBmdXR1cmUgY2FsbHMgdG8KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXdhaXQiIHRpdGxlPSJnc3RfcG9sbF93YWl0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wb2xsX3dhaXQoKTwvY29kZT48L2E+IHdpbGwgYmUgYWZmZWN0ZWQgYnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtcmVzdGFydCIgdGl0bGU9ImdzdF9wb2xsX3Jlc3RhcnQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfcmVzdGFydCgpPC9jb2RlPjwvYT4gYW5kCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1zZXQtZmx1c2hpbmciIHRpdGxlPSJnc3RfcG9sbF9zZXRfZmx1c2hpbmcgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfc2V0X2ZsdXNoaW5nKCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnRyb2xsYWJsZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5uZXcgY29udHJvbGxhYmxlIHN0YXRlLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGNvbnRyb2xsYWJpbGl0eSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2V0PC9jb2RlPjwvZW0+IGNvdWxkIGJlIHVwZGF0ZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xODwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXBvbGwtc2V0LWZsdXNoaW5nIj48L2E+PGgzPmdzdF9wb2xsX3NldF9mbHVzaGluZyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcG9sbF9zZXRfZmx1c2hpbmcgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbDwvc3Bhbj48L2E+ICpzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBmbHVzaGluZzwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1doZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZsdXNoaW5nPC9jb2RlPjwvZW0+IGlzIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LCB0aGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCBjdXJyZW50IGFuZCBmdXR1cmUgY2FsbHMKK3RvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXdhaXQiIHRpdGxlPSJnc3RfcG9sbF93YWl0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wb2xsX3dhaXQoKTwvY29kZT48L2E+IHdpbGwgcmV0dXJuIC0xLCB3aXRoIGVycm5vIHNldCB0byBFQlVTWS4KKzwvcD4KKzxwPgorVW5zZXR0aW5nIHRoZSBmbHVzaGluZyBzdGF0ZSB3aWxsIHJlc3RvcmUgbm9ybWFsIG9wZXJhdGlvbiBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2V0PC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbDwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zmx1c2hpbmc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bmV3IGZsdXNoaW5nIHN0YXRlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTg8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wb2xsLXdhaXQiPjwvYT48aDM+Z3N0X3BvbGxfd2FpdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgIGdzdF9wb2xsX3dhaXQgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT4gKnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lb3V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorV2FpdCBmb3IgYWN0aXZpdHkgb24gdGhlIGZpbGUgZGVzY3JpcHRvcnMgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNldDwvY29kZT48L2VtPi4gVGhpcyBmdW5jdGlvbiB3YWl0cyB1cCB0bwordGhlIHNwZWNpZmllZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZW91dDwvY29kZT48L2VtPi4gIEEgdGltZW91dCBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stVElNRS1OT05FOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfVElNRV9OT05FIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0NMT0NLX1RJTUVfTk9ORTwvc3Bhbj48L2E+IHdhaXRzIGZvcmV2ZXIuCis8L3A+Cis8cD4KK0ZvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPiBvYmplY3RzIGNyZWF0ZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1uZXciIHRpdGxlPSJnc3RfcG9sbF9uZXcgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfbmV3KCk8L2NvZGU+PC9hPiwgdGhpcyBmdW5jdGlvbiBjYW4gb25seSBiZQorY2FsbGVkIGZyb20gYSBzaW5nbGUgdGhyZWFkIGF0IGEgdGltZS4gIElmIGNhbGxlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMsCistMSB3aWxsIGJlIHJldHVybmVkIHdpdGggZXJybm8gc2V0IHRvIEVQRVJNLgorPC9wPgorPHA+CitUaGlzIGlzIG5vdCB0cnVlIGZvciB0aW1lciA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPiBvYmplY3RzIGNyZWF0ZWQgd2l0aAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtbmV3LXRpbWVyIiB0aXRsZT0iZ3N0X3BvbGxfbmV3X3RpbWVyICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wb2xsX25ld190aW1lcigpPC9jb2RlPjwvYT4sIHdoZXJlIGl0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtdWx0aXBsZSB0aHJlYWRzIHdhaXRpbmcKK3NpbXVsdGFuZW91c2x5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbDwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZW91dDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHRpbWVvdXQgaW4gbmFub3NlY29uZHMuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIG51bWJlciBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsRkQiIHRpdGxlPSJHc3RQb2xsRkQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsRkQ8L3NwYW4+PC9hPiBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2V0PC9jb2RlPjwvZW0+IHRoYXQgaGF2ZSBhY3Rpdml0eSBvciAwIHdoZW4gbm8KK2FjdGl2aXR5IHdhcyBkZXRlY3RlZCBhZnRlciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZW91dDwvY29kZT48L2VtPi4gSWYgYW4gZXJyb3Igb2NjdXJzLCAtMSBpcyByZXR1cm5lZAorYW5kIGVycm5vIGlzIHNldC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjE4PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcG9sbC1yZWFkLWNvbnRyb2wiPjwvYT48aDM+Z3N0X3BvbGxfcmVhZF9jb250cm9sICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9wb2xsX3JlYWRfY29udHJvbCAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT4gKnNldDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYSBieXRlIGZyb20gdGhlIGNvbnRyb2wgc29ja2V0IG9mIHRoZSBjb250cm9sbGFibGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNldDwvY29kZT48L2VtPi4KK1RoaXMgZnVuY3Rpb24gaXMgbW9zdGx5IHVzZWZ1bCBmb3IgdGltZXIgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT4gb2JqZWN0cyBjcmVhdGVkIHdpdGgKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLW5ldy10aW1lciIgdGl0bGU9ImdzdF9wb2xsX25ld190aW1lciAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcG9sbF9uZXdfdGltZXIoKTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbDwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gb24gc3VjY2Vzcy4gPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiB3aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXQ8L2NvZGU+PC9lbT4gaXMgbm90IGNvbnRyb2xsYWJsZSBvciB3aGVuIHRoZXJlCit3YXMgbm8gYnl0ZSB0byByZWFkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjM8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1wb2xsLXdyaXRlLWNvbnRyb2wiPjwvYT48aDM+Z3N0X3BvbGxfd3JpdGVfY29udHJvbCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfcG9sbF93cml0ZV9jb250cm9sICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbDwvc3Bhbj48L2E+ICpzZXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitXcml0ZSBhIGJ5dGUgdG8gdGhlIGNvbnRyb2wgc29ja2V0IG9mIHRoZSBjb250cm9sbGFibGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNldDwvY29kZT48L2VtPi4KK1RoaXMgZnVuY3Rpb24gaXMgbW9zdGx5IHVzZWZ1bCBmb3IgdGltZXIgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT4gb2JqZWN0cyBjcmVhdGVkIHdpdGgKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLW5ldy10aW1lciIgdGl0bGU9ImdzdF9wb2xsX25ld190aW1lciAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcG9sbF9uZXdfdGltZXIoKTwvY29kZT48L2E+LiAKKzwvcD4KKzxwPgorSXQgd2lsbCBtYWtlIGFueSBjdXJyZW50IGFuZCBmdXR1cmUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtd2FpdCIgdGl0bGU9ImdzdF9wb2xsX3dhaXQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfd2FpdCgpPC9jb2RlPjwvYT4gZnVuY3Rpb24gcmV0dXJuIHdpdGgKKzEsIG1lYW5pbmcgdGhlIGNvbnRyb2wgc29ja2V0IGlzIHNldC4gQWZ0ZXIgYW4gZXF1YWwgYW1vdW50IG9mIGNhbGxzIHRvCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1yZWFkLWNvbnRyb2wiIHRpdGxlPSJnc3RfcG9sbF9yZWFkX2NvbnRyb2wgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfcmVhZF9jb250cm9sKCk8L2NvZGU+PC9hPiBoYXZlIGJlZW4gcGVyZm9ybWVkLCBjYWxscyB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC13YWl0IiB0aXRsZT0iZ3N0X3BvbGxfd2FpdCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcG9sbF93YWl0KCk8L2NvZGU+PC9hPiB3aWxsCitibG9jayBhZ2FpbiB1bnRpbCB0aGVpciB0aW1lb3V0IGV4cGlyZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2V0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBvbiBzdWNjZXNzLiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNldDwvY29kZT48L2VtPiBpcyBub3QgY29udHJvbGxhYmxlIG9yIHdoZW4gdGhlCitieXRlIGNvdWxkIG5vdCBiZSB3cml0dGVuLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjM8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQwNmI0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwKQEAgLTAsMCArMSwyNDk4IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0UXVlcnk8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdFF1ZXJ5LnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdFF1ZXJ5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RRdWVyeSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1Hc3RRdWVyeS50b3Bfb2ZfcGFnZSI+PC9hPkdzdFF1ZXJ5PC9zcGFuPjwvaDI+Cis8cD5Hc3RRdWVyeSDigJQgRHluYW1pY2FsbHkgcmVnaXN0ZXIgbmV3IHF1ZXJ5IHR5cGVzLiBQcm92aWRlIGZ1bmN0aW9ucworICAgICAgICAgICAgICAgICAgICB0byBjcmVhdGUgcXVlcmllcywgYW5kIHRvIHNldCBhbmQgcGFyc2UgdmFsdWVzIGluIHRoZW0uPC9wPgorPC90ZD4KKzx0ZCB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgorPC90cj48L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFF1ZXJ5LnN5bm9wc2lzIj48L2E+PGgyPlN5bm9wc2lzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7CisKK3N0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGUiIHRpdGxlPSJlbnVtIEdzdFF1ZXJ5VHlwZSI+R3N0UXVlcnlUeXBlPC9hPjsKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1UWVBFLU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9RVUVSWV9UWVBFX05BTUUoKSI+R1NUX1FVRVJZX1RZUEVfTkFNRTwvYT4gICAgICAgICAgICAgICAgIChxdWVyeSkKK3N0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5VHlwZURlZmluaXRpb24iIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnlUeXBlRGVmaW5pdGlvbiI+R3N0UXVlcnlUeXBlRGVmaW5pdGlvbjwvYT47Citjb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktdHlwZS1nZXQtbmFtZSIgdGl0bGU9ImdzdF9xdWVyeV90eXBlX2dldF9uYW1lICgpIj5nc3RfcXVlcnlfdHlwZV9nZXRfbmFtZTwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnlUeXBlIiB0aXRsZT0iZW51bSBHc3RRdWVyeVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeVR5cGU8L3NwYW4+PC9hPiBxdWVyeTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HUXVhcms8L3NwYW4+PC9hPiAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS10eXBlLXRvLXF1YXJrIiB0aXRsZT0iZ3N0X3F1ZXJ5X3R5cGVfdG9fcXVhcmsgKCkiPmdzdF9xdWVyeV90eXBlX3RvX3F1YXJrPC9hPiAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGUiIHRpdGxlPSJlbnVtIEdzdFF1ZXJ5VHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5VHlwZTwvc3Bhbj48L2E+IHF1ZXJ5PC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGUiIHRpdGxlPSJlbnVtIEdzdFF1ZXJ5VHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RRdWVyeVR5cGU8L3NwYW4+PC9hPiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS10eXBlLXJlZ2lzdGVyIiB0aXRsZT0iZ3N0X3F1ZXJ5X3R5cGVfcmVnaXN0ZXIgKCkiPmdzdF9xdWVyeV90eXBlX3JlZ2lzdGVyPC9hPiAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5pY2s8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZGVzY3JpcHRpb248L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5VHlwZSIgdGl0bGU9ImVudW0gR3N0UXVlcnlUeXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5VHlwZTwvc3Bhbj48L2E+ICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXR5cGUtZ2V0LWJ5LW5pY2siIHRpdGxlPSJnc3RfcXVlcnlfdHlwZV9nZXRfYnlfbmljayAoKSI+Z3N0X3F1ZXJ5X3R5cGVfZ2V0X2J5X25pY2s8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmljazwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktdHlwZXMtY29udGFpbnMiIHRpdGxlPSJnc3RfcXVlcnlfdHlwZXNfY29udGFpbnMgKCkiPmdzdF9xdWVyeV90eXBlc19jb250YWluczwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGUiIHRpdGxlPSJlbnVtIEdzdFF1ZXJ5VHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5VHlwZTwvc3Bhbj48L2E+ICp0eXBlczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnlUeXBlIiB0aXRsZT0iZW51bSBHc3RRdWVyeVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeVR5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+KTsKK2NvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGVEZWZpbml0aW9uIiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5VHlwZURlZmluaXRpb24iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnlUeXBlRGVmaW5pdGlvbjwvc3Bhbj48L2E+ICogPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS10eXBlLWdldC1kZXRhaWxzIiB0aXRsZT0iZ3N0X3F1ZXJ5X3R5cGVfZ2V0X2RldGFpbHMgKCkiPmdzdF9xdWVyeV90eXBlX2dldF9kZXRhaWxzPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGUiIHRpdGxlPSJlbnVtIEdzdFF1ZXJ5VHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5VHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXR5cGUtaXRlcmF0ZS1kZWZpbml0aW9ucyIgdGl0bGU9ImdzdF9xdWVyeV90eXBlX2l0ZXJhdGVfZGVmaW5pdGlvbnMgKCkiPmdzdF9xdWVyeV90eXBlX2l0ZXJhdGVfZGVmaW5pdGlvbnM8L2E+ICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcmVmIiB0aXRsZT0iZ3N0X3F1ZXJ5X3JlZiAoKSI+Z3N0X3F1ZXJ5X3JlZjwvYT4gICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktdW5yZWYiIHRpdGxlPSJnc3RfcXVlcnlfdW5yZWYgKCkiPmdzdF9xdWVyeV91bnJlZjwvYT4gICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnE8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKiAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWNvcHkiIHRpdGxlPSJnc3RfcXVlcnlfY29weSAoKSI+Z3N0X3F1ZXJ5X2NvcHk8L2E+ICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcTwvY29kZT48L2VtPik7CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbWFrZS13cml0YWJsZSIgdGl0bGU9ImdzdF9xdWVyeV9tYWtlX3dyaXRhYmxlKCkiPmdzdF9xdWVyeV9tYWtlX3dyaXRhYmxlPC9hPiAgICAgICAgICAgICAocSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1pcy13cml0YWJsZSIgdGl0bGU9ImdzdF9xdWVyeV9pc193cml0YWJsZSgpIj5nc3RfcXVlcnlfaXNfd3JpdGFibGU8L2E+ICAgICAgICAgICAgICAgKHEpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcmVwbGFjZSIgdGl0bGU9ImdzdF9xdWVyeV9yZXBsYWNlKCkiPmdzdF9xdWVyeV9yZXBsYWNlPC9hPiAgICAgICAgICAgICAgICAgICAob2xkX3F1ZXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3F1ZXJ5KQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICogICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXdyaXRhYmxlLXN0cnVjdHVyZSIgdGl0bGU9ImdzdF9xdWVyeV93cml0YWJsZV9zdHJ1Y3R1cmUgKCkiPmdzdF9xdWVyeV93cml0YWJsZV9zdHJ1Y3R1cmU8L2E+ICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICogICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctY3VzdG9tIiB0aXRsZT0iZ3N0X3F1ZXJ5X25ld19jdXN0b20gKCkiPmdzdF9xdWVyeV9uZXdfY3VzdG9tPC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGUiIHRpdGxlPSJlbnVtIEdzdFF1ZXJ5VHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5VHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPik7Citjb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWdldC1zdHJ1Y3R1cmUiIHRpdGxlPSJnc3RfcXVlcnlfZ2V0X3N0cnVjdHVyZSAoKSI+Z3N0X3F1ZXJ5X2dldF9zdHJ1Y3R1cmU8L2E+ICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbmV3LWNvbnZlcnQiIHRpdGxlPSJnc3RfcXVlcnlfbmV3X2NvbnZlcnQgKCkiPmdzdF9xdWVyeV9uZXdfY29udmVydDwvYT4gICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBzcmNfZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiB2YWx1ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZGVzdF9mb3JtYXQ8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1jb252ZXJ0IiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF9jb252ZXJ0ICgpIj5nc3RfcXVlcnlfc2V0X2NvbnZlcnQ8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gc3JjX2Zvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc3JjX3ZhbHVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBkZXN0X2Zvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gZGVzdF92YWx1ZTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtY29udmVydCIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9jb252ZXJ0ICgpIj5nc3RfcXVlcnlfcGFyc2VfY29udmVydDwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gKnNyY19mb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpzcmNfdmFsdWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+ICpkZXN0X2Zvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKmRlc3RfdmFsdWU8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKiAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1wb3NpdGlvbiIgdGl0bGU9ImdzdF9xdWVyeV9uZXdfcG9zaXRpb24gKCkiPmdzdF9xdWVyeV9uZXdfcG9zaXRpb248L2E+ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1wb3NpdGlvbiIgdGl0bGU9ImdzdF9xdWVyeV9zZXRfcG9zaXRpb24gKCkiPmdzdF9xdWVyeV9zZXRfcG9zaXRpb248L2E+ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IGN1cjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtcG9zaXRpb24iIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24gKCkiPmdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbjwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiAqZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqY3VyPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICogICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctZHVyYXRpb24iIHRpdGxlPSJnc3RfcXVlcnlfbmV3X2R1cmF0aW9uICgpIj5nc3RfcXVlcnlfbmV3X2R1cmF0aW9uPC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtZHVyYXRpb24iIHRpdGxlPSJnc3RfcXVlcnlfc2V0X2R1cmF0aW9uICgpIj5nc3RfcXVlcnlfc2V0X2R1cmF0aW9uPC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBkdXJhdGlvbjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtZHVyYXRpb24iIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfZHVyYXRpb24gKCkiPmdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbjwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiAqZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqZHVyYXRpb248L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKiAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1sYXRlbmN5IiB0aXRsZT0iZ3N0X3F1ZXJ5X25ld19sYXRlbmN5ICgpIj5nc3RfcXVlcnlfbmV3X2xhdGVuY3k8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLWxhdGVuY3kiIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfbGF0ZW5jeSAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX2xhdGVuY3k8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAqbGl2ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAqbWluX2xhdGVuY3k8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gKm1heF9sYXRlbmN5PC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtbGF0ZW5jeSIgdGl0bGU9ImdzdF9xdWVyeV9zZXRfbGF0ZW5jeSAoKSI+Z3N0X3F1ZXJ5X3NldF9sYXRlbmN5PC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBsaXZlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IG1pbl9sYXRlbmN5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IG1heF9sYXRlbmN5PC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICogICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctc2Vla2luZyIgdGl0bGU9ImdzdF9xdWVyeV9uZXdfc2Vla2luZyAoKSI+Z3N0X3F1ZXJ5X25ld19zZWVraW5nPC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LXNlZWtpbmciIHRpdGxlPSJnc3RfcXVlcnlfc2V0X3NlZWtpbmcgKCkiPmdzdF9xdWVyeV9zZXRfc2Vla2luZzwvYT4gICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBzZWVrYWJsZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc2VnbWVudF9zdGFydDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc2VnbWVudF9lbmQ8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLXNlZWtpbmciIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2Vfc2Vla2luZyAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmc8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+ICpmb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAqc2Vla2FibGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpzZWdtZW50X3N0YXJ0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqc2VnbWVudF9lbmQ8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKiAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1mb3JtYXRzIiB0aXRsZT0iZ3N0X3F1ZXJ5X25ld19mb3JtYXRzICgpIj5nc3RfcXVlcnlfbmV3X2Zvcm1hdHM8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1mb3JtYXRzIiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF9mb3JtYXRzICgpIj5nc3RfcXVlcnlfc2V0X2Zvcm1hdHM8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBuX2Zvcm1hdHM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtZm9ybWF0c3YiIHRpdGxlPSJnc3RfcXVlcnlfc2V0X2Zvcm1hdHN2ICgpIj5nc3RfcXVlcnlfc2V0X2Zvcm1hdHN2PC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBuX2Zvcm1hdHM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+ICpmb3JtYXRzPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1uLWZvcm1hdHMiIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2Vfbl9mb3JtYXRzICgpIj5nc3RfcXVlcnlfcGFyc2Vfbl9mb3JtYXRzPC9hPiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICpuX2Zvcm1hdHM8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLW50aC1mb3JtYXQiIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfbnRoX2Zvcm1hdCAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX250aF9mb3JtYXQ8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBudGg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+ICpmb3JtYXQ8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKiAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1zZWdtZW50IiB0aXRsZT0iZ3N0X3F1ZXJ5X25ld19zZWdtZW50ICgpIj5nc3RfcXVlcnlfbmV3X3NlZ21lbnQ8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtc2VnbWVudCIgdGl0bGU9ImdzdF9xdWVyeV9zZXRfc2VnbWVudCAoKSI+Z3N0X3F1ZXJ5X3NldF9zZWdtZW50PC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gcmF0ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBzdGFydF92YWx1ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc3RvcF92YWx1ZTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2Utc2VnbWVudCIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9zZWdtZW50ICgpIj5nc3RfcXVlcnlfcGFyc2Vfc2VnbWVudDwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiAqcmF0ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gKmZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKnN0YXJ0X3ZhbHVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqc3RvcF92YWx1ZTwvY29kZT48L2VtPik7CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RCdWZmZXJpbmdNb2RlIiB0aXRsZT0iZW51bSBHc3RCdWZmZXJpbmdNb2RlIj5Hc3RCdWZmZXJpbmdNb2RlPC9hPjsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICogICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctYnVmZmVyaW5nIiB0aXRsZT0iZ3N0X3F1ZXJ5X25ld19idWZmZXJpbmcgKCkiPmdzdF9xdWVyeV9uZXdfYnVmZmVyaW5nPC9hPiAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1idWZmZXJpbmctcGVyY2VudCIgdGl0bGU9ImdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3BlcmNlbnQgKCkiPmdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3BlcmNlbnQ8L2E+ICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gYnVzeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBwZXJjZW50PC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1idWZmZXJpbmctcGVyY2VudCIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcGVyY2VudCAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19wZXJjZW50PC9hPiAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAqYnVzeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAqcGVyY2VudDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LWJ1ZmZlcmluZy1zdGF0cyIgdGl0bGU9ImdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3N0YXRzICgpIj5nc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19zdGF0czwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0QnVmZmVyaW5nTW9kZSIgdGl0bGU9ImVudW0gR3N0QnVmZmVyaW5nTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcmluZ01vZGU8L3NwYW4+PC9hPiBtb2RlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGF2Z19pbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBhdmdfb3V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBidWZmZXJpbmdfbGVmdDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtYnVmZmVyaW5nLXN0YXRzIiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19zdGF0cyAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19zdGF0czwvYT4gICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdEJ1ZmZlcmluZ01vZGUiIHRpdGxlPSJlbnVtIEdzdEJ1ZmZlcmluZ01vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJpbmdNb2RlPC9zcGFuPjwvYT4gKm1vZGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gKmF2Z19pbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAqYXZnX291dDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKmJ1ZmZlcmluZ19sZWZ0PC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtYnVmZmVyaW5nLXJhbmdlIiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfcmFuZ2UgKCkiPmdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3JhbmdlPC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHN0YXJ0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBzdG9wPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBlc3RpbWF0ZWRfdG90YWw8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLWJ1ZmZlcmluZy1yYW5nZSIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcmFuZ2UgKCkiPmdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcmFuZ2U8L2E+ICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiAqZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqc3RhcnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpzdG9wPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqZXN0aW1hdGVkX3RvdGFsPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1hZGQtYnVmZmVyaW5nLXJhbmdlIiB0aXRsZT0iZ3N0X3F1ZXJ5X2FkZF9idWZmZXJpbmdfcmFuZ2UgKCkiPmdzdF9xdWVyeV9hZGRfYnVmZmVyaW5nX3JhbmdlPC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBzdGFydDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc3RvcDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktZ2V0LW4tYnVmZmVyaW5nLXJhbmdlcyIgdGl0bGU9ImdzdF9xdWVyeV9nZXRfbl9idWZmZXJpbmdfcmFuZ2VzICgpIj5nc3RfcXVlcnlfZ2V0X25fYnVmZmVyaW5nX3JhbmdlczwvYT4gICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtbnRoLWJ1ZmZlcmluZy1yYW5nZSIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9udGhfYnVmZmVyaW5nX3JhbmdlICgpIj5nc3RfcXVlcnlfcGFyc2VfbnRoX2J1ZmZlcmluZ19yYW5nZTwvYT4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqc3RhcnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpzdG9wPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICogICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctdXJpIiB0aXRsZT0iZ3N0X3F1ZXJ5X25ld191cmkgKCkiPmdzdF9xdWVyeV9uZXdfdXJpPC9hPiAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtdXJpIiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX3VyaSAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX3VyaTwvYT4gICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKnVyaTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LXVyaSIgdGl0bGU9ImdzdF9xdWVyeV9zZXRfdXJpICgpIj5nc3RfcXVlcnlfc2V0X3VyaTwvYT4gICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp1cmk8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKiAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1hbGxvY2F0aW9uIiB0aXRsZT0iZ3N0X3F1ZXJ5X25ld19hbGxvY2F0aW9uICgpIj5nc3RfcXVlcnlfbmV3X2FsbG9jYXRpb248L2E+ICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBuZWVkX3Bvb2w8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLWFsbG9jYXRpb24iIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfYWxsb2NhdGlvbiAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX2FsbG9jYXRpb248L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICoqY2FwczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICpuZWVkX3Bvb2w8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLWFsbG9jYXRpb24tcGFyYW1zIiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX2FsbG9jYXRpb25fcGFyYW1zICgpIj5nc3RfcXVlcnlfcGFyc2VfYWxsb2NhdGlvbl9wYXJhbXM8L2E+ICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICpzaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gKm1pbl9idWZmZXJzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gKm1heF9idWZmZXJzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gKnByZWZpeDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICphbGlnbm1lbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4gKipwb29sPC9jb2RlPjwvZW0+KTsKK2NvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICogICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1udGgtYWxsb2NhdGlvbi1tZW1vcnkiIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fbWVtb3J5ICgpIj5nc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fbWVtb3J5PC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4pOworY29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLW50aC1hbGxvY2F0aW9uLW1ldGEiIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fbWV0YSAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX21ldGE8L2E+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LWFsbG9jYXRpb24tcGFyYW1zIiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF9hbGxvY2F0aW9uX3BhcmFtcyAoKSI+Z3N0X3F1ZXJ5X3NldF9hbGxvY2F0aW9uX3BhcmFtczwvYT4gICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbWluX2J1ZmZlcnM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBtYXhfYnVmZmVyczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHByZWZpeDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGFsaWdubWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNHc3RCdWZmZXJQb29sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPiAqcG9vbDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktYWRkLWFsbG9jYXRpb24tbWVtb3J5IiB0aXRsZT0iZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21lbW9yeSAoKSI+Z3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21lbW9yeTwvYT4gICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqYWxsb2M8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWFkZC1hbGxvY2F0aW9uLW1ldGEiIHRpdGxlPSJnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fbWV0YSAoKSI+Z3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21ldGE8L2E+ICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqYXBpPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1oYXMtYWxsb2NhdGlvbi1tZXRhIiB0aXRsZT0iZ3N0X3F1ZXJ5X2hhc19hbGxvY2F0aW9uX21ldGEgKCkiPmdzdF9xdWVyeV9oYXNfYWxsb2NhdGlvbl9tZXRhPC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmFwaTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktZ2V0LW4tYWxsb2NhdGlvbi1tZW1vcmllcyIgdGl0bGU9ImdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX21lbW9yaWVzICgpIj5nc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9tZW1vcmllczwvYT4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktZ2V0LW4tYWxsb2NhdGlvbi1tZXRhcyIgdGl0bGU9ImdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX21ldGFzICgpIj5nc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9tZXRhczwvYT4gICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbmV3LXNjaGVkdWxpbmciIHRpdGxlPSJnc3RfcXVlcnlfbmV3X3NjaGVkdWxpbmcgKCkiPmdzdF9xdWVyeV9uZXdfc2NoZWR1bGluZzwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2Utc2NoZWR1bGluZyIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9zY2hlZHVsaW5nICgpIj5nc3RfcXVlcnlfcGFyc2Vfc2NoZWR1bGluZzwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICpwdWxsX21vZGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAqcmFuZG9tX2FjY2VzczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICpzZXF1ZW50aWFsPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICptaW5zaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICptYXhzaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICphbGlnbjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LXNjaGVkdWxpbmciIHRpdGxlPSJnc3RfcXVlcnlfc2V0X3NjaGVkdWxpbmcgKCkiPmdzdF9xdWVyeV9zZXRfc2NoZWR1bGluZzwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gcHVsbF9tb2RlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gcmFuZG9tX2FjY2VzczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IHNlcXVlbnRpYWw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbWluc2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBtYXhzaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGFsaWduPC9jb2RlPjwvZW0+KTsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0UXVlcnkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitHc3RRdWVyeSBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gcmVnaXN0ZXIgbmV3IHF1ZXJ5IHR5cGVzIHRvIHRoZSBnc3RyZWFtZXIKK2NvcmUgYW5kIHVzZSB0aGVtLgorUXVlcmllcyBjYW4gYmUgcGVyZm9ybWVkIG9uIHBhZHMgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXF1ZXJ5IiB0aXRsZT0iZ3N0X3BhZF9xdWVyeSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3F1ZXJ5KCk8L2NvZGU+PC9hPikgYW5kIGVsZW1lbnRzCisoPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1xdWVyeSIgdGl0bGU9ImdzdF9lbGVtZW50X3F1ZXJ5ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3F1ZXJ5KCk8L2NvZGU+PC9hPikuIFBsZWFzZSBub3RlIHRoYXQgc29tZSBxdWVyaWVzIG1pZ2h0IG5lZWQgYSBydW5uaW5nCitwaXBlbGluZSB0byB3b3JrLgorPC9wPgorPHA+CitRdWVyaWVzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHRoZSBnc3RfcXVlcnlfbmV3XyooKSBmdW5jdGlvbnMuCitRdWVyeSB2YWx1ZXMgY2FuIGJlIHNldCB1c2luZyBnc3RfcXVlcnlfc2V0XyooKSwgYW5kIHBhcnNlZCB1c2luZworZ3N0X3F1ZXJ5X3BhcnNlXyooKSBoZWxwZXJzLgorPC9wPgorPHA+CitUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIHF1ZXJ5IHRoZSBkdXJhdGlvbiBvZiBhIHBpcGVsaW5lOgorPC9wPgorPHA+Cis8L3A+Cis8ZGl2IGNsYXNzPSJleGFtcGxlIj4KKzxhIG5hbWU9ImlkNjM5NDUxIj48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5FeGFtcGxlwqAxMy7CoFF1ZXJ5IGR1cmF0aW9uIG9uIGEgcGlwZWxpbmU8L2I+PC9wPgorPGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgorIEdzdFF1ZXJ5ICpxdWVyeTsKKyBnYm9vbGVhbiByZXM7CisgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2R1cmF0aW9uIChHU1RfRk9STUFUX1RJTUUpOworIHJlcyA9IGdzdF9lbGVtZW50X3F1ZXJ5IChwaXBlbGluZSwgcXVlcnkpOworIGlmIChyZXMpIHsKKyAgIGdpbnQ2NCBkdXJhdGlvbjsKKyAgIGdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbiAocXVlcnksIE5VTEwsICZhbXA7ZHVyYXRpb24pOworICAgZ19wcmludCAoImR1cmF0aW9uID0gJSJHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKGR1cmF0aW9uKSk7CisgfQorIGVsc2UgeworICAgZ19wcmludCAoImR1cmF0aW9uIHF1ZXJ5IGZhaWxlZC4uLiIpOworIH0KKyBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKKyA8L3ByZT48L2Rpdj4KKzwvZGl2PgorPHA+PGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj4KKzwvcD4KKzxwPgorTGFzdCByZXZpZXdlZCBvbiAyMDA2LTAyLTE0ICgwLjEwLjQpCis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RRdWVyeS5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UXVlcnkiPjwvYT48aDM+c3RydWN0IEdzdFF1ZXJ5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UXVlcnkgeworICBHc3RNaW5pT2JqZWN0IG1pbmlfb2JqZWN0OworCisgIEdzdFF1ZXJ5VHlwZSB0eXBlOworfTsKKzwvcHJlPgorPHA+CitUaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFF1ZXJ5Lm1pbmktb2JqZWN0Ij48L2E+bWluaV9vYmplY3Q8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBwYXJlbnQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+IHR5cGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5VHlwZSIgdGl0bGU9ImVudW0gR3N0UXVlcnlUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnlUeXBlPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFF1ZXJ5LnR5cGUiPjwvYT50eXBlPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5VHlwZSIgdGl0bGU9ImVudW0gR3N0UXVlcnlUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnlUeXBlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFF1ZXJ5VHlwZSI+PC9hPjxoMz5lbnVtIEdzdFF1ZXJ5VHlwZTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBlbnVtIHsKKyAgR1NUX1FVRVJZX05PTkUgPSAwLAorICBHU1RfUVVFUllfUE9TSVRJT04sCisgIEdTVF9RVUVSWV9EVVJBVElPTiwKKyAgR1NUX1FVRVJZX0xBVEVOQ1ksCisgIEdTVF9RVUVSWV9KSVRURVIsICAgICAvKiBub3QgaW4gZHJhZnQtcXVlcnksIG5lY2Vzc2FyeT8gKi8KKyAgR1NUX1FVRVJZX1JBVEUsCisgIEdTVF9RVUVSWV9TRUVLSU5HLAorICBHU1RfUVVFUllfU0VHTUVOVCwKKyAgR1NUX1FVRVJZX0NPTlZFUlQsCisgIEdTVF9RVUVSWV9GT1JNQVRTLAorICBHU1RfUVVFUllfQlVGRkVSSU5HLAorICBHU1RfUVVFUllfQ1VTVE9NLAorICBHU1RfUVVFUllfVVJJLAorICBHU1RfUVVFUllfQUxMT0NBVElPTiwKKyAgR1NUX1FVRVJZX1NDSEVEVUxJTkcKK30gR3N0UXVlcnlUeXBlOworPC9wcmU+Cis8cD4KK1N0YW5kYXJkIHByZWRlZmluZWQgUXVlcnkgdHlwZXMKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVFVRVJZLU5PTkU6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1FVRVJZX05PTkU8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmludmFsaWQgcXVlcnkgdHlwZQorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVFVRVJZLVBPU0lUSU9OOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9RVUVSWV9QT1NJVElPTjwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Y3VycmVudCBwb3NpdGlvbiBpbiBzdHJlYW0KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1RVUVSWS1EVVJBVElPTjpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUVVFUllfRFVSQVRJT048L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnRvdGFsIGR1cmF0aW9uIG9mIHRoZSBzdHJlYW0KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1RVUVSWS1MQVRFTkNZOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9RVUVSWV9MQVRFTkNZPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5sYXRlbmN5IG9mIHN0cmVhbQorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVFVRVJZLUpJVFRFUjpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUVVFUllfSklUVEVSPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5jdXJyZW50IGppdHRlciBvZiBzdHJlYW0KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1RVUVSWS1SQVRFOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9RVUVSWV9SQVRFPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5jdXJyZW50IHJhdGUgb2YgdGhlIHN0cmVhbQorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVFVRVJZLVNFRUtJTkc6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1FVRVJZX1NFRUtJTkc8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnNlZWtpbmcgY2FwYWJpbGl0aWVzCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUVVFUlktU0VHTUVOVDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUVVFUllfU0VHTUVOVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2VnbWVudCBzdGFydC9zdG9wIHBvc2l0aW9ucworPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVFVRVJZLUNPTlZFUlQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1FVRVJZX0NPTlZFUlQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmNvbnZlcnQgdmFsdWVzIGJldHdlZW4gZm9ybWF0cworPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVFVRVJZLUZPUk1BVFM6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1FVRVJZX0ZPUk1BVFM8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnF1ZXJ5IHN1cHBvcnRlZCBmb3JtYXRzIGZvciBjb252ZXJ0Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtUVVFUlktQlVGRkVSSU5HOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9RVUVSWV9CVUZGRVJJTkc8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnF1ZXJ5IGF2YWlsYWJsZSBtZWRpYSBmb3IgZWZmaWNpZW50IHNlZWtpbmcuIFNpbmNlCiswLjEwLjIwLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVFVRVJZLUNVU1RPTTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUVVFUllfQ1VTVE9NPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGN1c3RvbSBhcHBsaWNhdGlvbiBvciBlbGVtZW50IGRlZmluZWQgcXVlcnkuIFNpbmNlCiswLjEwLjIyLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVFVRVJZLVVSSTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUVVFUllfVVJJPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5xdWVyeSB0aGUgVVJJIG9mIHRoZSBzb3VyY2Ugb3Igc2luay4gU2luY2UgMC4xMC4yMi4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1RVUVSWS1BTExPQ0FUSU9OOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9RVUVSWV9BTExPQ0FUSU9OPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgYnVmZmVyIGFsbG9jYXRpb24gcHJvcGVydGllcworPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVFVRVJZLVNDSEVEVUxJTkc6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1FVRVJZX1NDSEVEVUxJTkc8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzY2hlZHVsaW5nIHByb3BlcnRpZXMKKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1RVUVSWS1UWVBFLU5BTUU6Q0FQUyI+PC9hPjxoMz5HU1RfUVVFUllfVFlQRV9OQU1FKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1FVRVJZX1RZUEVfTkFNRShxdWVyeSkgKGdzdF9xdWVyeV90eXBlX2dldF9uYW1lKEdTVF9RVUVSWV9UWVBFKHF1ZXJ5KSkpCis8L3ByZT4KKzxwPgorR2V0IGEgY29uc3RhbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnlUeXBlIiB0aXRsZT0iZW51bSBHc3RRdWVyeVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeVR5cGU8L3NwYW4+PC9hPiBvZiB0aGUgcXVlcnkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBxdWVyeSB0byBxdWVyeTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFF1ZXJ5VHlwZURlZmluaXRpb24iPjwvYT48aDM+c3RydWN0IEdzdFF1ZXJ5VHlwZURlZmluaXRpb248L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RRdWVyeVR5cGVEZWZpbml0aW9uIHsKKyAgR3N0UXVlcnlUeXBlICAgdmFsdWU7CisgIGNvbnN0IGdjaGFyICAgKm5pY2s7CisgIGNvbnN0IGdjaGFyICAgKmRlc2NyaXB0aW9uOworICBHUXVhcmsgICAgICAgICBxdWFyazsKK307Cis8L3ByZT4KKzxwPgorQSBRdWVyeSBUeXBlIGRlZmluaXRpb24KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGUiIHRpdGxlPSJlbnVtIEdzdFF1ZXJ5VHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5VHlwZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RRdWVyeVR5cGVEZWZpbml0aW9uLnZhbHVlIj48L2E+dmFsdWU8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB1bmlxdWUgaWQgb2YgdGhlIFF1ZXJ5IHR5cGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y29uc3TCoDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RRdWVyeVR5cGVEZWZpbml0aW9uLm5pY2siPjwvYT5uaWNrPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHNob3J0IG5pY2s8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y29uc3TCoDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RRdWVyeVR5cGVEZWZpbml0aW9uLmRlc2NyaXB0aW9uIj48L2E+ZGVzY3JpcHRpb248L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbG9uZ2VyIGRlc2NyaXB0aW9uIG9mIHRoZSBxdWVyeSB0eXBlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFF1ZXJ5VHlwZURlZmluaXRpb24ucXVhcmsiPjwvYT5xdWFyazwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHF1YXJrIGZvciB0aGUgbmljazwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1xdWVyeS10eXBlLWdldC1uYW1lIj48L2E+PGgzPmdzdF9xdWVyeV90eXBlX2dldF9uYW1lICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgIGdzdF9xdWVyeV90eXBlX2dldF9uYW1lICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5VHlwZSIgdGl0bGU9ImVudW0gR3N0UXVlcnlUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnlUeXBlPC9zcGFuPjwvYT4gcXVlcnk8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgYSBwcmludGFibGUgbmFtZSBmb3IgdGhlIGdpdmVuIHF1ZXJ5IHR5cGUuIERvIG5vdCBtb2RpZnkgb3IgZnJlZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcXVlcnkgdHlwZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgcmVmZXJlbmNlIHRvIHRoZSBzdGF0aWMgbmFtZSBvZiB0aGUgcXVlcnkuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXF1ZXJ5LXR5cGUtdG8tcXVhcmsiPjwvYT48aDM+Z3N0X3F1ZXJ5X3R5cGVfdG9fcXVhcmsgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdRdWFyazwvc3Bhbj48L2E+ICAgICAgICAgICAgICBnc3RfcXVlcnlfdHlwZV90b19xdWFyayAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGUiIHRpdGxlPSJlbnVtIEdzdFF1ZXJ5VHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5VHlwZTwvc3Bhbj48L2E+IHF1ZXJ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0IHRoZSB1bmlxdWUgcXVhcmsgZm9yIHRoZSBnaXZlbiBxdWVyeSB0eXBlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBxdWVyeSB0eXBlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHF1YXJrIGFzc29jaWF0ZWQgd2l0aCB0aGUgcXVlcnkgdHlwZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1xdWVyeS10eXBlLXJlZ2lzdGVyIj48L2E+PGgzPmdzdF9xdWVyeV90eXBlX3JlZ2lzdGVyICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnlUeXBlIiB0aXRsZT0iZW51bSBHc3RRdWVyeVR5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnlUeXBlPC9zcGFuPjwvYT4gICAgICAgIGdzdF9xdWVyeV90eXBlX3JlZ2lzdGVyICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmljazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpkZXNjcmlwdGlvbjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZSBhIG5ldyBHc3RRdWVyeVR5cGUgYmFzZWQgb24gdGhlIG5pY2sgb3IgcmV0dXJuIGFuCithbHJlYWR5IHJlZ2lzdGVyZWQgcXVlcnkgd2l0aCB0aGF0IG5pY2sKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uaWNrPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBuaWNrIG9mIHRoZSBuZXcgcXVlcnk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc2NyaXB0aW9uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgbmV3IHF1ZXJ5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBuZXcgR3N0UXVlcnlUeXBlIG9yIGFuIGFscmVhZHkgcmVnaXN0ZXJlZCBxdWVyeQord2l0aCB0aGUgc2FtZSBuaWNrLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1xdWVyeS10eXBlLWdldC1ieS1uaWNrIj48L2E+PGgzPmdzdF9xdWVyeV90eXBlX2dldF9ieV9uaWNrICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnlUeXBlIiB0aXRsZT0iZW51bSBHc3RRdWVyeVR5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnlUeXBlPC9zcGFuPjwvYT4gICAgICAgIGdzdF9xdWVyeV90eXBlX2dldF9ieV9uaWNrICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmljazwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCB0aGUgcXVlcnkgdHlwZSByZWdpc3RlcmVkIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5pY2s8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmljazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgbmljayBvZiB0aGUgcXVlcnk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgcXVlcnkgcmVnaXN0ZXJlZCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uaWNrPC9jb2RlPjwvZW0+IG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHU1QtUVVFUlktTk9ORTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1FVRVJZX05PTkU8L3NwYW4+PC9hPgoraWYgdGhlIHF1ZXJ5IHdhcyBub3QgcmVnaXN0ZXJlZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcXVlcnktdHlwZXMtY29udGFpbnMiPjwvYT48aDM+Z3N0X3F1ZXJ5X3R5cGVzX2NvbnRhaW5zICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9xdWVyeV90eXBlc19jb250YWlucyAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5VHlwZSIgdGl0bGU9ImVudW0gR3N0UXVlcnlUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnlUeXBlPC9zcGFuPjwvYT4gKnR5cGVzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGUiIHRpdGxlPSJlbnVtIEdzdFF1ZXJ5VHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5VHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZWUgaWYgdGhlIGdpdmVuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGUiIHRpdGxlPSJlbnVtIEdzdFF1ZXJ5VHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5VHlwZTwvc3Bhbj48L2E+IGlzIGluc2lkZSB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGVzPC9jb2RlPjwvZW0+IHF1ZXJ5IHR5cGVzIGFycmF5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGVzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBxdWVyeSBhcnJheSB0byBzZWFyY2g8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGUiIHRpdGxlPSJlbnVtIEdzdFF1ZXJ5VHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5VHlwZTwvc3Bhbj48L2E+IHRvIGZpbmQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSB0eXBlIGlzIGZvdW5kIGluc2lkZSB0aGUgYXJyYXk8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcXVlcnktdHlwZS1nZXQtZGV0YWlscyI+PC9hPjxoMz5nc3RfcXVlcnlfdHlwZV9nZXRfZGV0YWlscyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5VHlwZURlZmluaXRpb24iIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnlUeXBlRGVmaW5pdGlvbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RRdWVyeVR5cGVEZWZpbml0aW9uPC9zcGFuPjwvYT4gKiBnc3RfcXVlcnlfdHlwZV9nZXRfZGV0YWlscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGUiIHRpdGxlPSJlbnVtIEdzdFF1ZXJ5VHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5VHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgZGV0YWlscyBhYm91dCB0aGUgZ2l2ZW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5VHlwZSIgdGl0bGU9ImVudW0gR3N0UXVlcnlUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnlUeXBlPC9zcGFuPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGUiIHRpdGxlPSJlbnVtIEdzdFF1ZXJ5VHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5VHlwZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5VHlwZURlZmluaXRpb24iIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnlUeXBlRGVmaW5pdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5VHlwZURlZmluaXRpb248L3NwYW4+PC9hPiBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT4gb3IgTlVMTCBvbiBmYWlsdXJlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1xdWVyeS10eXBlLWl0ZXJhdGUtZGVmaW5pdGlvbnMiPjwvYT48aDM+Z3N0X3F1ZXJ5X3R5cGVfaXRlcmF0ZV9kZWZpbml0aW9ucyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKiAgICAgICBnc3RfcXVlcnlfdHlwZV9pdGVyYXRlX2RlZmluaXRpb25zICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gb2YgYWxsIHRoZSByZWdpc3RlcmVkIHF1ZXJ5IHR5cGVzLiBUaGUgZGVmaW5pdGlvbnMKK2l0ZXJhdGVkIG92ZXIgYXJlIHJlYWQgb25seS4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ3N0X2l0ZXJhdG9yX2ZyZWUKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnlUeXBlRGVmaW5pdGlvbiIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeVR5cGVEZWZpbml0aW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnlUeXBlRGVmaW5pdGlvbjwvc3Bhbj48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1xdWVyeS1yZWYiPjwvYT48aDM+Z3N0X3F1ZXJ5X3JlZiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKiAgICAgICAgICBnc3RfcXVlcnlfcmVmICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitJbmNyZWFzZXMgdGhlIHJlZmNvdW50IG9mIHRoZSBnaXZlbiBxdWVyeSBieSBvbmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gdG8gaW5jcmVhc2UgdGhlIHJlZmNvdW50IG9mLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xPC9jb2RlPjwvZW0+PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXF1ZXJ5LXVucmVmIj48L2E+PGgzPmdzdF9xdWVyeV91bnJlZiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcXVlcnlfdW5yZWYgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitEZWNyZWFzZXMgdGhlIHJlZmNvdW50IG9mIHRoZSBxdWVyeS4gSWYgdGhlIHJlZmNvdW50IHJlYWNoZXMgMCwgdGhlIHF1ZXJ5Cit3aWxsIGJlIGZyZWVkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiB0byBkZWNyZWFzZSB0aGUgcmVmY291bnQgb2YuPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1xdWVyeS1jb3B5Ij48L2E+PGgzPmdzdF9xdWVyeV9jb3B5ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqICAgICAgICAgIGdzdF9xdWVyeV9jb3B5ICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NvcGllcyB0aGUgZ2l2ZW4gcXVlcnkgdXNpbmcgdGhlIGNvcHkgZnVuY3Rpb24gb2YgdGhlIHBhcmVudCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPi4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ3N0X3F1ZXJ5X3VucmVmCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gdG8gY29weS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyBjb3B5IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xPC9jb2RlPjwvZW0+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXF1ZXJ5LW1ha2Utd3JpdGFibGUiPjwvYT48aDM+Z3N0X3F1ZXJ5X21ha2Vfd3JpdGFibGUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgIGdzdF9xdWVyeV9tYWtlX3dyaXRhYmxlKHEpICAgICAgR1NUX1FVRVJZX0NBU1QgKGdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAocSkpKQorPC9wcmU+Cis8cD4KK01ha2VzIGEgd3JpdGFibGUgcXVlcnkgZnJvbSB0aGUgZ2l2ZW4gcXVlcnkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gdG8gbWFrZSB3cml0YWJsZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IHdyaXRhYmxlIHF1ZXJ5IChwb3NzaWJseSBzYW1lIGFzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xPC9jb2RlPjwvZW0+KS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1xdWVyeS1pcy13cml0YWJsZSI+PC9hPjxoMz5nc3RfcXVlcnlfaXNfd3JpdGFibGUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgIGdzdF9xdWVyeV9pc193cml0YWJsZShxKSAgICAgZ3N0X21pbmlfb2JqZWN0X2lzX3dyaXRhYmxlIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAocSkpCis8L3ByZT4KKzxwPgorVGVzdHMgaWYgeW91IGNhbiBzYWZlbHkgd3JpdGUgZGF0YSBpbnRvIGEgcXVlcnkncyBzdHJ1Y3R1cmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXF1ZXJ5LXJlcGxhY2UiPjwvYT48aDM+Z3N0X3F1ZXJ5X3JlcGxhY2UoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBnc3RfcXVlcnlfcmVwbGFjZShvbGRfcXVlcnksbmV3X3F1ZXJ5KTwvcHJlPgorPHA+CitNb2RpZmllcyBhIHBvaW50ZXIgdG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+IHRvIHBvaW50IHRvIGEgZGlmZmVyZW50IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4uIFRoZQorbW9kaWZpY2F0aW9uIGlzIGRvbmUgYXRvbWljYWxseSAoc28gdGhpcyBpcyB1c2VmdWwgZm9yIGVuc3VyaW5nIHRocmVhZCBzYWZldHkKK2luIHNvbWUgY2FzZXMpLCBhbmQgdGhlIHJlZmVyZW5jZSBjb3VudHMgYXJlIHVwZGF0ZWQgYXBwcm9wcmlhdGVseSAodGhlIG9sZAorcXVlcnkgaXMgdW5yZWZmZWQsIHRoZSBuZXcgb25lIGlzIHJlZmZlZCkuCis8L3A+Cis8cD4KK0VpdGhlciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmV3X3F1ZXJ5PC9jb2RlPjwvZW0+IG9yIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+IHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9sZF9xdWVyeTwvY29kZT48L2VtPiBtYXkgYmUgTlVMTC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vbGRfcXVlcnk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9pbnRlciB0byBhIHBvaW50ZXIgdG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+Cit0byBiZSByZXBsYWNlZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dCBhbmQgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+aW5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ld19xdWVyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiB0aGF0IHdpbGwKK3JlcGxhY2UgdGhlIHF1ZXJ5IHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9sZF9xdWVyeTwvY29kZT48L2VtPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXF1ZXJ5LXdyaXRhYmxlLXN0cnVjdHVyZSI+PC9hPjxoMz5nc3RfcXVlcnlfd3JpdGFibGVfc3RydWN0dXJlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKiAgICAgIGdzdF9xdWVyeV93cml0YWJsZV9zdHJ1Y3R1cmUgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgdGhlIHN0cnVjdHVyZSBvZiBhIHF1ZXJ5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IG9mIHRoZSBxdWVyeS4gVGhlIHN0cnVjdHVyZSBpcworc3RpbGwgb3duZWQgYnkgdGhlIHF1ZXJ5IGFuZCB3aWxsIHRoZXJlZm9yZSBiZSBmcmVlZCB3aGVuIHRoZSBxdWVyeQoraXMgdW5yZWZmZWQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcXVlcnktbmV3LWN1c3RvbSI+PC9hPjxoMz5nc3RfcXVlcnlfbmV3X2N1c3RvbSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKiAgICAgICAgICBnc3RfcXVlcnlfbmV3X2N1c3RvbSAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGUiIHRpdGxlPSJlbnVtIEdzdFF1ZXJ5VHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5VHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NvbnN0cnVjdHMgYSBuZXcgY3VzdG9tIHF1ZXJ5IG9iamVjdC4gVXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktdW5yZWYiIHRpdGxlPSJnc3RfcXVlcnlfdW5yZWYgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3F1ZXJ5X3VucmVmKCk8L2NvZGU+PC9hPgord2hlbiBkb25lIHdpdGggaXQuCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdzdF9xdWVyeV91bnJlZgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHF1ZXJ5IHR5cGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHN0cnVjdHVyZSBmb3IgdGhlIHF1ZXJ5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1xdWVyeS1nZXQtc3RydWN0dXJlIj48L2E+PGgzPmdzdF9xdWVyeV9nZXRfc3RydWN0dXJlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKiBnc3RfcXVlcnlfZ2V0X3N0cnVjdHVyZSAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgdGhlIHN0cnVjdHVyZSBvZiBhIHF1ZXJ5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IG9mIHRoZSBxdWVyeS4gVGhlIHN0cnVjdHVyZSBpcworc3RpbGwgb3duZWQgYnkgdGhlIHF1ZXJ5IGFuZCB3aWxsIHRoZXJlZm9yZSBiZSBmcmVlZCB3aGVuIHRoZSBxdWVyeQoraXMgdW5yZWZmZWQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcXVlcnktbmV3LWNvbnZlcnQiPjwvYT48aDM+Z3N0X3F1ZXJ5X25ld19jb252ZXJ0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqICAgICAgICAgIGdzdF9xdWVyeV9uZXdfY29udmVydCAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IHNyY19mb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHZhbHVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBkZXN0X2Zvcm1hdDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NvbnN0cnVjdHMgYSBuZXcgY29udmVydCBxdWVyeSBvYmplY3QuIFVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXVucmVmIiB0aXRsZT0iZ3N0X3F1ZXJ5X3VucmVmICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9xdWVyeV91bnJlZigpPC9jb2RlPjwvYT4KK3doZW4gZG9uZSB3aXRoIGl0LiBBIGNvbnZlcnQgcXVlcnkgaXMgdXNlZCB0byBhc2sgZm9yIGEgY29udmVyc2lvbiBiZXR3ZWVuCitvbmUgZm9ybWF0IGFuZCBhbm90aGVyLgorPC9wPgorPHA+CitGcmVlLWZ1bmN0aW9uOiBnc3RfcXVlcnlfdW5yZWYKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmNfZm9ybWF0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzb3VyY2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvciB0aGUgbmV3IHF1ZXJ5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdmFsdWUgdG8gY29udmVydDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdF9mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHRhcmdldCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1xdWVyeS1zZXQtY29udmVydCI+PC9hPjxoMz5nc3RfcXVlcnlfc2V0X2NvbnZlcnQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9jb252ZXJ0ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gc3JjX2Zvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc3JjX3ZhbHVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBkZXN0X2Zvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gZGVzdF92YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0Fuc3dlciBhIGNvbnZlcnQgcXVlcnkgYnkgc2V0dGluZyB0aGUgcmVxdWVzdGVkIHZhbHVlcy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjX2Zvcm1hdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc291cmNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmNfdmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNvdXJjZSB2YWx1ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdF9mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGRlc3RpbmF0aW9uIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0X3ZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBkZXN0aW5hdGlvbiB2YWx1ZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1xdWVyeS1wYXJzZS1jb252ZXJ0Ij48L2E+PGgzPmdzdF9xdWVyeV9wYXJzZV9jb252ZXJ0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9jb252ZXJ0ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+ICpzcmNfZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqc3JjX3ZhbHVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiAqZGVzdF9mb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpkZXN0X3ZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUGFyc2UgYSBjb252ZXJ0IHF1ZXJ5IGFuc3dlci4gQW55IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmNfZm9ybWF0PC9jb2RlPjwvZW0+LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjX3ZhbHVlPC9jb2RlPjwvZW0+LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdF9mb3JtYXQ8L2NvZGU+PC9lbT4sCithbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3RfdmFsdWU8L2NvZGU+PC9lbT4gbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2UgdGhhdCB2YWx1ZSBpcyBvbWl0dGVkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmNfZm9ybWF0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzdG9yYWdlIGZvciB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IG9mIHRoZQorc291cmNlIHZhbHVlLCBvciBOVUxMLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyY192YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc3RvcmFnZSBmb3IgdGhlIHNvdXJjZSB2YWx1ZSwgb3IgTlVMTC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0X2Zvcm1hdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc3RvcmFnZSBmb3IgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBvZiB0aGUKK2Rlc3RpbmF0aW9uIHZhbHVlLCBvciBOVUxMLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3RfdmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHN0b3JhZ2UgZm9yIHRoZSBkZXN0aW5hdGlvbiB2YWx1ZSwKK29yIE5VTEwuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1xdWVyeS1uZXctcG9zaXRpb24iPjwvYT48aDM+Z3N0X3F1ZXJ5X25ld19wb3NpdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKiAgICAgICAgICBnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb25zdHJ1Y3RzIGEgbmV3IHF1ZXJ5IHN0cmVhbSBwb3NpdGlvbiBxdWVyeSBvYmplY3QuIFVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXVucmVmIiB0aXRsZT0iZ3N0X3F1ZXJ5X3VucmVmICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9xdWVyeV91bnJlZigpPC9jb2RlPjwvYT4KK3doZW4gZG9uZSB3aXRoIGl0LiBBIHBvc2l0aW9uIHF1ZXJ5IGlzIHVzZWQgdG8gcXVlcnkgdGhlIGN1cnJlbnQgcG9zaXRpb24KK29mIHBsYXliYWNrIGluIHRoZSBzdHJlYW1zLCBpbiBzb21lIGZvcm1hdC4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ3N0X3F1ZXJ5X3VucmVmCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBkZWZhdWx0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3IgdGhlIG5ldyBxdWVyeTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcXVlcnktc2V0LXBvc2l0aW9uIj48L2E+PGgzPmdzdF9xdWVyeV9zZXRfcG9zaXRpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9wb3NpdGlvbiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBjdXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBbnN3ZXIgYSBwb3NpdGlvbiBxdWVyeSBieSBzZXR0aW5nIHRoZSByZXF1ZXN0ZWQgdmFsdWUgaW4gdGhlIGdpdmVuIGZvcm1hdC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gd2l0aCBxdWVyeSB0eXBlIEdTVF9RVUVSWV9QT1NJVElPTjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSByZXF1ZXN0ZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmN1cjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcG9zaXRpb24gdG8gc2V0PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXF1ZXJ5LXBhcnNlLXBvc2l0aW9uIj48L2E+PGgzPmdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiAqZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqY3VyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUGFyc2UgYSBwb3NpdGlvbiBxdWVyeSwgd3JpdGluZyB0aGUgZm9ybWF0IGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPiwgYW5kIHRoZSBwb3NpdGlvbgoraW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y3VyPC9jb2RlPjwvZW0+LCBpZiB0aGUgcmVzcGVjdGl2ZSBwYXJhbWV0ZXJzIGFyZSBub24tTlVMTC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzdG9yYWdlIGZvciB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IG9mIHRoZQorcG9zaXRpb24gdmFsdWVzIChtYXkgYmUgTlVMTCkuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y3VyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzdG9yYWdlIGZvciB0aGUgY3VycmVudCBwb3NpdGlvbiAobWF5IGJlIE5VTEwpLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcXVlcnktbmV3LWR1cmF0aW9uIj48L2E+PGgzPmdzdF9xdWVyeV9uZXdfZHVyYXRpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICogICAgICAgICAgZ3N0X3F1ZXJ5X25ld19kdXJhdGlvbiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ29uc3RydWN0cyBhIG5ldyBzdHJlYW0gZHVyYXRpb24gcXVlcnkgb2JqZWN0IHRvIHF1ZXJ5IGluIHRoZSBnaXZlbiBmb3JtYXQuCitVc2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS11bnJlZiIgdGl0bGU9ImdzdF9xdWVyeV91bnJlZiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcXVlcnlfdW5yZWYoKTwvY29kZT48L2E+IHdoZW4gZG9uZSB3aXRoIGl0LiBBIGR1cmF0aW9uIHF1ZXJ5IHdpbGwgZ2l2ZSB0aGUKK3RvdGFsIGxlbmd0aCBvZiB0aGUgc3RyZWFtLgorPC9wPgorPHA+CitGcmVlLWZ1bmN0aW9uOiBnc3RfcXVlcnlfdW5yZWYKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3IgdGhpcyBkdXJhdGlvbiBxdWVyeTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcXVlcnktc2V0LWR1cmF0aW9uIj48L2E+PGgzPmdzdF9xdWVyeV9zZXRfZHVyYXRpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBkdXJhdGlvbjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0Fuc3dlciBhIGR1cmF0aW9uIHF1ZXJ5IGJ5IHNldHRpbmcgdGhlIHJlcXVlc3RlZCB2YWx1ZSBpbiB0aGUgZ2l2ZW4gZm9ybWF0LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3IgdGhlIGR1cmF0aW9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kdXJhdGlvbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZHVyYXRpb24gb2YgdGhlIHN0cmVhbTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1xdWVyeS1wYXJzZS1kdXJhdGlvbiI+PC9hPjxoMz5nc3RfcXVlcnlfcGFyc2VfZHVyYXRpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gKmZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKmR1cmF0aW9uPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUGFyc2UgYSBkdXJhdGlvbiBxdWVyeSBhbnN3ZXIuIFdyaXRlIHRoZSBmb3JtYXQgb2YgdGhlIGR1cmF0aW9uIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPiwKK2FuZCB0aGUgdmFsdWUgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZHVyYXRpb248L2NvZGU+PC9lbT4sIGlmIHRoZSByZXNwZWN0aXZlIHZhcmlhYmxlcyBhcmUgbm9uLU5VTEwuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVlcnk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc3RvcmFnZSBmb3IgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBvZiB0aGUgZHVyYXRpb24KK3ZhbHVlLCBvciBOVUxMLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmR1cmF0aW9uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzdG9yYWdlIGZvciB0aGUgdG90YWwgZHVyYXRpb24sIG9yIE5VTEwuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1xdWVyeS1uZXctbGF0ZW5jeSI+PC9hPjxoMz5nc3RfcXVlcnlfbmV3X2xhdGVuY3kgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICogICAgICAgICAgZ3N0X3F1ZXJ5X25ld19sYXRlbmN5ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb25zdHJ1Y3RzIGEgbmV3IGxhdGVuY3kgcXVlcnkgb2JqZWN0LgorVXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktdW5yZWYiIHRpdGxlPSJnc3RfcXVlcnlfdW5yZWYgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3F1ZXJ5X3VucmVmKCk8L2NvZGU+PC9hPiB3aGVuIGRvbmUgd2l0aCBpdC4gQSBsYXRlbmN5IHF1ZXJ5IGlzIHVzdWFsbHkgcGVyZm9ybWVkCitieSBzaW5rcyB0byBjb21wZW5zYXRlIGZvciBhZGRpdGlvbmFsIGxhdGVuY3kgaW50cm9kdWNlZCBieSBlbGVtZW50cyBpbiB0aGUKK3BpcGVsaW5lLgorPC9wPgorPHA+CitGcmVlLWZ1bmN0aW9uOiBnc3RfcXVlcnlfdW5yZWYKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjEyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcXVlcnktcGFyc2UtbGF0ZW5jeSI+PC9hPjxoMz5nc3RfcXVlcnlfcGFyc2VfbGF0ZW5jeSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcXVlcnlfcGFyc2VfbGF0ZW5jeSAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gKmxpdmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gKm1pbl9sYXRlbmN5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+ICptYXhfbGF0ZW5jeTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1BhcnNlIGEgbGF0ZW5jeSBxdWVyeSBhbnN3ZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVlcnk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpdmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c3RvcmFnZSBmb3IgbGl2ZSBvciBOVUxMLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1pbl9sYXRlbmN5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzdG9yYWdlIGZvciB0aGUgbWluIGxhdGVuY3kgb3IgTlVMTC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYXhfbGF0ZW5jeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc3RvcmFnZSBmb3IgdGhlIG1heCBsYXRlbmN5IG9yIE5VTEwuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1xdWVyeS1zZXQtbGF0ZW5jeSI+PC9hPjxoMz5nc3RfcXVlcnlfc2V0X2xhdGVuY3kgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9sYXRlbmN5ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGxpdmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gbWluX2xhdGVuY3k8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gbWF4X2xhdGVuY3k8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBbnN3ZXIgYSBsYXRlbmN5IHF1ZXJ5IGJ5IHNldHRpbmcgdGhlIHJlcXVlc3RlZCB2YWx1ZXMgaW4gdGhlIGdpdmVuIGZvcm1hdC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGl2ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5pZiB0aGVyZSBpcyBhIGxpdmUgZWxlbWVudCB1cHN0cmVhbTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWluX2xhdGVuY3k8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG1pbmltYWwgbGF0ZW5jeSBvZiB0aGUgbGl2ZSBlbGVtZW50PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYXhfbGF0ZW5jeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbWF4aW1hbCBsYXRlbmN5IG9mIHRoZSBsaXZlIGVsZW1lbnQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjEyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcXVlcnktbmV3LXNlZWtpbmciPjwvYT48aDM+Z3N0X3F1ZXJ5X25ld19zZWVraW5nICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqICAgICAgICAgIGdzdF9xdWVyeV9uZXdfc2Vla2luZyAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NvbnN0cnVjdHMgYSBuZXcgcXVlcnkgb2JqZWN0IGZvciBxdWVyeWluZyBzZWVraW5nIHByb3BlcnRpZXMgb2YKK3RoZSBzdHJlYW0uCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdzdF9xdWVyeV91bnJlZgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZGVmYXVsdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9yIHRoZSBuZXcgcXVlcnk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXF1ZXJ5LXNldC1zZWVraW5nIj48L2E+PGgzPmdzdF9xdWVyeV9zZXRfc2Vla2luZyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcXVlcnlfc2V0X3NlZWtpbmcgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBzZWVrYWJsZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc2VnbWVudF9zdGFydDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc2VnbWVudF9lbmQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXQgdGhlIHNlZWtpbmcgcXVlcnkgcmVzdWx0IGZpZWxkcyBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVlcnk8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVlcnk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZm9ybWF0IHRvIHNldCBmb3IgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWdtZW50X3N0YXJ0PC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VnbWVudF9lbmQ8L2NvZGU+PC9lbT4gdmFsdWVzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWVrYWJsZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2Vla2FibGUgZmxhZyB0byBzZXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnRfc3RhcnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNlZ21lbnRfc3RhcnQgdG8gc2V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWdtZW50X2VuZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2VnbWVudF9lbmQgdG8gc2V0PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXF1ZXJ5LXBhcnNlLXNlZWtpbmciPjwvYT48aDM+Z3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmcgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmcgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gKmZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICpzZWVrYWJsZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKnNlZ21lbnRfc3RhcnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpzZWdtZW50X2VuZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1BhcnNlIGEgc2Vla2luZyBxdWVyeSwgd3JpdGluZyB0aGUgZm9ybWF0IGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPiwgYW5kCitvdGhlciByZXN1bHRzIGludG8gdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLCBpZiB0aGUgcmVzcGVjdGl2ZSBwYXJhbWV0ZXJzCithcmUgbm9uLU5VTEwKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIEdTVF9RVUVSWV9TRUVLSU5HIHR5cGUgcXVlcnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGZvcm1hdCB0byBzZXQgZm9yIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VnbWVudF9zdGFydDwvY29kZT48L2VtPgorYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWdtZW50X2VuZDwvY29kZT48L2VtPiB2YWx1ZXMsIG9yIE5VTEwuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2Vla2FibGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNlZWthYmxlIGZsYWcgdG8gc2V0LCBvciBOVUxMLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnRfc3RhcnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNlZ21lbnRfc3RhcnQgdG8gc2V0LCBvciBOVUxMLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnRfZW5kPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzZWdtZW50X2VuZCB0byBzZXQsIG9yIE5VTEwuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1xdWVyeS1uZXctZm9ybWF0cyI+PC9hPjxoMz5nc3RfcXVlcnlfbmV3X2Zvcm1hdHMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICogICAgICAgICAgZ3N0X3F1ZXJ5X25ld19mb3JtYXRzICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb25zdHJ1Y3RzIGEgbmV3IHF1ZXJ5IG9iamVjdCBmb3IgcXVlcnlpbmcgZm9ybWF0cyBvZgordGhlIHN0cmVhbS4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ3N0X3F1ZXJ5X3VucmVmCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXF1ZXJ5LXNldC1mb3JtYXRzIj48L2E+PGgzPmdzdF9xdWVyeV9zZXRfZm9ybWF0cyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcXVlcnlfc2V0X2Zvcm1hdHMgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG5fZm9ybWF0czwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXQgdGhlIGZvcm1hdHMgcXVlcnkgcmVzdWx0IGZpZWxkcyBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVlcnk8L2NvZGU+PC9lbT4uIFRoZSBudW1iZXIgb2YgZm9ybWF0cyBwYXNzZWQKK211c3QgYmUgZXF1YWwgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5fZm9ybWF0czwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bl9mb3JtYXRzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBudW1iZXIgb2YgZm9ybWF0cyB0byBzZXQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBudW1iZXIgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPkdzdEZvcm1hdHM8L2NvZGU+PC9lbT4gZXF1YWwgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5fZm9ybWF0czwvY29kZT48L2VtPi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcXVlcnktc2V0LWZvcm1hdHN2Ij48L2E+PGgzPmdzdF9xdWVyeV9zZXRfZm9ybWF0c3YgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9mb3JtYXRzdiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBuX2Zvcm1hdHM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+ICpmb3JtYXRzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0IHRoZSBmb3JtYXRzIHF1ZXJ5IHJlc3VsdCBmaWVsZHMgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+LiBUaGUgbnVtYmVyIG9mIGZvcm1hdHMgcGFzc2VkCitpbiB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdHM8L2NvZGU+PC9lbT4gYXJyYXkgbXVzdCBiZSBlcXVhbCB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bl9mb3JtYXRzPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uX2Zvcm1hdHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG51bWJlciBvZiBmb3JtYXRzIHRvIHNldC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YW4gYXJyYXkgY29udGFpbmluZyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bl9mb3JtYXRzPC9jb2RlPjwvZW0+Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+R3N0Rm9ybWF0PC9jb2RlPjwvZW0+IHZhbHVlcy4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dC4gRGVmYXVsdCBpcyB0cmFuc2ZlciBub25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmluPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gbGVuZ3RoPW5fZm9ybWF0c108L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1xdWVyeS1wYXJzZS1uLWZvcm1hdHMiPjwvYT48aDM+Z3N0X3F1ZXJ5X3BhcnNlX25fZm9ybWF0cyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcXVlcnlfcGFyc2Vfbl9mb3JtYXRzICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gKm5fZm9ybWF0czwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1BhcnNlIHRoZSBudW1iZXIgb2YgZm9ybWF0cyBpbiB0aGUgZm9ybWF0cyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVlcnk8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVlcnk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5fZm9ybWF0czwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbnVtYmVyIG9mIGZvcm1hdHMgaW4gdGhpcyBxdWVyeS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXF1ZXJ5LXBhcnNlLW50aC1mb3JtYXQiPjwvYT48aDM+Z3N0X3F1ZXJ5X3BhcnNlX250aF9mb3JtYXQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX250aF9mb3JtYXQgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG50aDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gKmZvcm1hdDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1BhcnNlIHRoZSBmb3JtYXQgcXVlcnkgYW5kIHJldHJpZXZlIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnRoPC9jb2RlPjwvZW0+IGZvcm1hdCBmcm9tIGl0IGludG8KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT4uIElmIHRoZSBsaXN0IGNvbnRhaW5zIGxlc3MgZWxlbWVudHMgdGhhbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnRoPC9jb2RlPjwvZW0+LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+IHdpbGwgYmUKK3NldCB0byBHU1RfRk9STUFUX1VOREVGSU5FRC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnRoPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBudGggZm9ybWF0IHRvIHJldHJpZXZlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBwb2ludGVyIHRvIHN0b3JlIHRoZSBudGggZm9ybWF0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXF1ZXJ5LW5ldy1zZWdtZW50Ij48L2E+PGgzPmdzdF9xdWVyeV9uZXdfc2VnbWVudCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKiAgICAgICAgICBnc3RfcXVlcnlfbmV3X3NlZ21lbnQgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb25zdHJ1Y3RzIGEgbmV3IHNlZ21lbnQgcXVlcnkgb2JqZWN0LiBVc2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS11bnJlZiIgdGl0bGU9ImdzdF9xdWVyeV91bnJlZiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcXVlcnlfdW5yZWYoKTwvY29kZT48L2E+Cit3aGVuIGRvbmUgd2l0aCBpdC4gQSBzZWdtZW50IHF1ZXJ5IGlzIHVzZWQgdG8gZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhlCitjdXJyZW50bHkgY29uZmlndXJlZCBzZWdtZW50IGZvciBwbGF5YmFjay4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ3N0X3F1ZXJ5X3VucmVmCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9yIHRoZSBuZXcgcXVlcnk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXF1ZXJ5LXNldC1zZWdtZW50Ij48L2E+PGgzPmdzdF9xdWVyeV9zZXRfc2VnbWVudCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcXVlcnlfc2V0X3NlZ21lbnQgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IHJhdGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc3RhcnRfdmFsdWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHN0b3BfdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBbnN3ZXIgYSBzZWdtZW50IHF1ZXJ5IGJ5IHNldHRpbmcgdGhlIHJlcXVlc3RlZCB2YWx1ZXMuIFRoZSBub3JtYWwKK3BsYXliYWNrIHNlZ21lbnQgb2YgYSBwaXBlbGluZSBpcyAwIHRvIGR1cmF0aW9uIGF0IHRoZSBkZWZhdWx0IHJhdGUgb2YKKzEuMC4gSWYgYSBzZWVrIHdhcyBwZXJmb3JtZWQgb24gdGhlIHBpcGVsaW5lIHRvIHBsYXkgYSBkaWZmZXJlbnQKK3NlZ21lbnQsIHRoaXMgcXVlcnkgd2lsbCByZXR1cm4gdGhlIHJhbmdlIHNwZWNpZmllZCBpbiB0aGUgbGFzdCBzZWVrLgorPC9wPgorPHA+Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnRfdmFsdWU8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdG9wX3ZhbHVlPC9jb2RlPjwvZW0+IHdpbGwgcmVzcGVjdGl2ZWx5IGNvbnRhaW4gdGhlIGNvbmZpZ3VyZWQKK3BsYXliYWNrIHJhbmdlIHN0YXJ0IGFuZCBzdG9wIHZhbHVlcyBleHByZXNzZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPi4KK1RoZSB2YWx1ZXMgYXJlIGFsd2F5cyBiZXR3ZWVuIDAgYW5kIHRoZSBkdXJhdGlvbiBvZiB0aGUgbWVkaWEgYW5kCis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnRfdmFsdWU8L2NvZGU+PC9lbT4gJmx0Oz0gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0b3BfdmFsdWU8L2NvZGU+PC9lbT4uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yYXRlPC9jb2RlPjwvZW0+IHdpbGwgY29udGFpbiB0aGUgcGxheWJhY2sgcmF0ZS4gRm9yCituZWdhdGl2ZSByYXRlcywgcGxheWJhY2sgd2lsbCBhY3R1YWxseSBoYXBwZW4gZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RvcF92YWx1ZTwvY29kZT48L2VtPiB0bworPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0X3ZhbHVlPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yYXRlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSByYXRlIG9mIHRoZSBzZWdtZW50PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBvZiB0aGUgc2VnbWVudCB2YWx1ZXMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydF92YWx1ZTwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0b3BfdmFsdWU8L2NvZGU+PC9lbT4pPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydF92YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc3RhcnQgdmFsdWU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0b3BfdmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHN0b3AgdmFsdWU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcXVlcnktcGFyc2Utc2VnbWVudCI+PC9hPjxoMz5nc3RfcXVlcnlfcGFyc2Vfc2VnbWVudCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcXVlcnlfcGFyc2Vfc2VnbWVudCAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICpyYXRlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiAqZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqc3RhcnRfdmFsdWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpzdG9wX3ZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUGFyc2UgYSBzZWdtZW50IHF1ZXJ5IGFuc3dlci4gQW55IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yYXRlPC9jb2RlPjwvZW0+LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnRfdmFsdWU8L2NvZGU+PC9lbT4sIGFuZAorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0b3BfdmFsdWU8L2NvZGU+PC9lbT4gbWF5IGJlIE5VTEwsIHdoaWNoIHdpbGwgY2F1c2UgdGhpcyB2YWx1ZSB0byBiZSBvbWl0dGVkLgorPC9wPgorPHA+CitTZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtc2VnbWVudCIgdGl0bGU9ImdzdF9xdWVyeV9zZXRfc2VnbWVudCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcXVlcnlfc2V0X3NlZ21lbnQoKTwvY29kZT48L2E+IGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgZnVuY3Rpb24gYXJndW1lbnRzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yYXRlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzdG9yYWdlIGZvciB0aGUgcmF0ZSBvZiB0aGUgc2VnbWVudCwgb3IgTlVMTC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHN0b3JhZ2UgZm9yIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gb2YgdGhlIHZhbHVlcywKK29yIE5VTEwuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnRfdmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHN0b3JhZ2UgZm9yIHRoZSBzdGFydCB2YWx1ZSwgb3IgTlVMTC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdG9wX3ZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzdG9yYWdlIGZvciB0aGUgc3RvcCB2YWx1ZSwgb3IgTlVMTC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0QnVmZmVyaW5nTW9kZSI+PC9hPjxoMz5lbnVtIEdzdEJ1ZmZlcmluZ01vZGU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9CVUZGRVJJTkdfU1RSRUFNLAorICBHU1RfQlVGRkVSSU5HX0RPV05MT0FELAorICBHU1RfQlVGRkVSSU5HX1RJTUVTSElGVCwKKyAgR1NUX0JVRkZFUklOR19MSVZFCit9IEdzdEJ1ZmZlcmluZ01vZGU7Cis8L3ByZT4KKzxwPgorVGhlIGRpZmZlcmVudCB0eXBlcyBvZiBidWZmZXJpbmcgbWV0aG9kcy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUJVRkZFUklORy1TVFJFQU06Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0JVRkZFUklOR19TVFJFQU08L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgc21hbGwgYW1vdW50IG9mIGRhdGEgaXMgYnVmZmVyZWQKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1CVUZGRVJJTkctRE9XTkxPQUQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0JVRkZFUklOR19ET1dOTE9BRDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHN0cmVhbSBpcyBiZWluZyBkb3dubG9hZGVkCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQlVGRkVSSU5HLVRJTUVTSElGVDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQlVGRkVSSU5HX1RJTUVTSElGVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHN0cmVhbSBpcyBiZWluZyBkb3dubG9hZGVkIGluIGEgcmluZ2J1ZmZlcgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUJVRkZFUklORy1MSVZFOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9CVUZGRVJJTkdfTElWRTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHN0cmVhbSBpcyBhIGxpdmUgc3RyZWFtCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcXVlcnktbmV3LWJ1ZmZlcmluZyI+PC9hPjxoMz5nc3RfcXVlcnlfbmV3X2J1ZmZlcmluZyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKiAgICAgICAgICBnc3RfcXVlcnlfbmV3X2J1ZmZlcmluZyAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb25zdHJ1Y3RzIGEgbmV3IHF1ZXJ5IG9iamVjdCBmb3IgcXVlcnlpbmcgdGhlIGJ1ZmZlcmluZyBzdGF0dXMgb2YKK2Egc3RyZWFtLgorPC9wPgorPHA+CitGcmVlLWZ1bmN0aW9uOiBnc3RfcXVlcnlfdW5yZWYKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGRlZmF1bHQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvciB0aGUgbmV3IHF1ZXJ5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1xdWVyeS1zZXQtYnVmZmVyaW5nLXBlcmNlbnQiPjwvYT48aDM+Z3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfcGVyY2VudCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19wZXJjZW50ICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gYnVzeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBwZXJjZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0IHRoZSBwZXJjZW50YWdlIG9mIGJ1ZmZlcmVkIGRhdGEuIFRoaXMgaXMgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEwMC4KK1RoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVzeTwvY29kZT48L2VtPiBpbmRpY2F0b3IgaXMgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gd2hlbiB0aGUgYnVmZmVyaW5nIGlzIGluIHByb2dyZXNzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiBvZiB0eXBlIEdTVF9RVUVSWV9CVUZGRVJJTkcuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idXN5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmlmIGJ1ZmZlcmluZyBpcyBidXN5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wZXJjZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgYnVmZmVyaW5nIHBlcmNlbnQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcXVlcnktcGFyc2UtYnVmZmVyaW5nLXBlcmNlbnQiPjwvYT48aDM+Z3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19wZXJjZW50ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcGVyY2VudCAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAqYnVzeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAqcGVyY2VudDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCB0aGUgcGVyY2VudGFnZSBvZiBidWZmZXJlZCBkYXRhLiBUaGlzIGlzIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxMDAuCitUaGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1c3k8L2NvZGU+PC9lbT4gaW5kaWNhdG9yIGlzIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IHdoZW4gdGhlIGJ1ZmZlcmluZyBpcyBpbiBwcm9ncmVzcy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gb2YgdHlwZSBHU1RfUVVFUllfQlVGRkVSSU5HLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVzeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5pZiBidWZmZXJpbmcgaXMgYnVzeSwgb3IgTlVMTC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wZXJjZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgYnVmZmVyaW5nIHBlcmNlbnQsIG9yIE5VTEwuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1xdWVyeS1zZXQtYnVmZmVyaW5nLXN0YXRzIj48L2E+PGgzPmdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3N0YXRzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3N0YXRzICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdEJ1ZmZlcmluZ01vZGUiIHRpdGxlPSJlbnVtIEdzdEJ1ZmZlcmluZ01vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJpbmdNb2RlPC9zcGFuPjwvYT4gbW9kZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBhdmdfaW48L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gYXZnX291dDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gYnVmZmVyaW5nX2xlZnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb25maWd1cmVzIHRoZSBidWZmZXJpbmcgc3RhdHMgdmFsdWVzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gb2YgdHlwZSBHU1RfUVVFUllfQlVGRkVSSU5HLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bW9kZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGJ1ZmZlcmluZyBtb2RlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hdmdfaW48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGF2ZXJhZ2UgaW5wdXQgcmF0ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YXZnX291dDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgYXZlcmFnZSBvdXRwdXQgcmF0ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyaW5nX2xlZnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YW1vdW50IG9mIGJ1ZmZlcmluZyB0aW1lIGxlZnQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcXVlcnktcGFyc2UtYnVmZmVyaW5nLXN0YXRzIj48L2E+PGgzPmdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfc3RhdHMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19zdGF0cyAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0QnVmZmVyaW5nTW9kZSIgdGl0bGU9ImVudW0gR3N0QnVmZmVyaW5nTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcmluZ01vZGU8L3NwYW4+PC9hPiAqbW9kZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAqYXZnX2luPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICphdmdfb3V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqYnVmZmVyaW5nX2xlZnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitFeHRyYWN0cyB0aGUgYnVmZmVyaW5nIHN0YXRzIHZhbHVlcyBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gb2YgdHlwZSBHU1RfUVVFUllfQlVGRkVSSU5HLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bW9kZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGJ1ZmZlcmluZyBtb2RlLCBvciBOVUxMLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmF2Z19pbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgYXZlcmFnZSBpbnB1dCByYXRlLCBvciBOVUxMLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmF2Z19vdXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGF2ZXJhZ2Ugb3V0cHV0IHJhdCwgb3IgTlVMTGUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyaW5nX2xlZnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YW1vdW50IG9mIGJ1ZmZlcmluZyB0aW1lIGxlZnQsIG9yIE5VTEwuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1xdWVyeS1zZXQtYnVmZmVyaW5nLXJhbmdlIj48L2E+PGgzPmdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3JhbmdlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3JhbmdlICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc3RhcnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHN0b3A8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IGVzdGltYXRlZF90b3RhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldCB0aGUgYXZhaWxhYmxlIHF1ZXJ5IHJlc3VsdCBmaWVsZHMgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGZvcm1hdCB0byBzZXQgZm9yIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnQ8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdG9wPC9jb2RlPjwvZW0+IHZhbHVlczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHN0YXJ0IHRvIHNldDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RvcDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc3RvcCB0byBzZXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVzdGltYXRlZF90b3RhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5lc3RpbWF0ZWQgdG90YWwgYW1vdW50IG9mIGRvd25sb2FkIHRpbWU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcXVlcnktcGFyc2UtYnVmZmVyaW5nLXJhbmdlIj48L2E+PGgzPmdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcmFuZ2UgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19yYW5nZSAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gKmZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKnN0YXJ0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqc3RvcDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKmVzdGltYXRlZF90b3RhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1BhcnNlIGFuIGF2YWlsYWJsZSBxdWVyeSwgd3JpdGluZyB0aGUgZm9ybWF0IGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPiwgYW5kCitvdGhlciByZXN1bHRzIGludG8gdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLCBpZiB0aGUgcmVzcGVjdGl2ZSBwYXJhbWV0ZXJzCithcmUgbm9uLU5VTEwKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIEdTVF9RVUVSWV9CVUZGRVJJTkcgdHlwZSBxdWVyeSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZm9ybWF0IHRvIHNldCBmb3IgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWdtZW50X3N0YXJ0PC9jb2RlPjwvZW0+CithbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnRfZW5kPC9jb2RlPjwvZW0+IHZhbHVlcywgb3IgTlVMTC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc3RhcnQgdG8gc2V0LCBvciBOVUxMLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0b3A8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHN0b3AgdG8gc2V0LCBvciBOVUxMLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVzdGltYXRlZF90b3RhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5lc3RpbWF0ZWQgdG90YWwgYW1vdW50IG9mIGRvd25sb2FkCit0aW1lLCBvciBOVUxMLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcXVlcnktYWRkLWJ1ZmZlcmluZy1yYW5nZSI+PC9hPjxoMz5nc3RfcXVlcnlfYWRkX2J1ZmZlcmluZ19yYW5nZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfcXVlcnlfYWRkX2J1ZmZlcmluZ19yYW5nZSAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBzdGFydDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc3RvcDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldCB0aGUgYnVmZmVyaW5nLXJhbmdlcyBhcnJheSBmaWVsZCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVlcnk8L2NvZGU+PC9lbT4uIFRoZSBjdXJyZW50IGxhc3QKK3N0YXJ0IHBvc2l0aW9uIG9mIHRoZSBhcnJheSBzaG91bGQgYmUgaW5mZXJpb3IgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0PC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgR1NUX1FVRVJZX0JVRkZFUklORyB0eXBlIHF1ZXJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c3RhcnQgcG9zaXRpb24gb2YgdGhlIHJhbmdlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdG9wPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnN0b3AgcG9zaXRpb24gb2YgdGhlIHJhbmdlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGluZGljYXRpbmcgaWYgdGhlIHJhbmdlIHdhcyBhZGRlZCBvciBub3QuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXF1ZXJ5LWdldC1uLWJ1ZmZlcmluZy1yYW5nZXMiPjwvYT48aDM+Z3N0X3F1ZXJ5X2dldF9uX2J1ZmZlcmluZ19yYW5nZXMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgZ3N0X3F1ZXJ5X2dldF9uX2J1ZmZlcmluZ19yYW5nZXMgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JldHJpZXZlIHRoZSBudW1iZXIgb2YgdmFsdWVzIGN1cnJlbnRseSBzdG9yZWQgaW4gdGhlCitidWZmZXJlZC1yYW5nZXMgYXJyYXkgb2YgdGhlIHF1ZXJ5J3Mgc3RydWN0dXJlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgR1NUX1FVRVJZX0JVRkZFUklORyB0eXBlIHF1ZXJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSByYW5nZSBhcnJheSBzaXplIGFzIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMxPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcXVlcnktcGFyc2UtbnRoLWJ1ZmZlcmluZy1yYW5nZSI+PC9hPjxoMz5nc3RfcXVlcnlfcGFyc2VfbnRoX2J1ZmZlcmluZ19yYW5nZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfcXVlcnlfcGFyc2VfbnRoX2J1ZmZlcmluZ19yYW5nZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpzdGFydDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKnN0b3A8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitQYXJzZSBhbiBhdmFpbGFibGUgcXVlcnkgYW5kIGdldCB0aGUgc3RhcnQgYW5kIHN0b3AgdmFsdWVzIHN0b3JlZAorYXQgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPiBvZiB0aGUgYnVmZmVyZWQgcmFuZ2VzIGFycmF5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgR1NUX1FVRVJZX0JVRkZFUklORyB0eXBlIHF1ZXJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5kZXg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9zaXRpb24gaW4gdGhlIGJ1ZmZlcmVkLXJhbmdlcyBhcnJheSB0byByZWFkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc3RhcnQgcG9zaXRpb24gdG8gc2V0LCBvciBOVUxMLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0b3A8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHN0b3AgcG9zaXRpb24gdG8gc2V0LCBvciBOVUxMLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gaW5kaWNhdGluZyBpZiB0aGUgcGFyc2luZyBzdWNjZWVkZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXF1ZXJ5LW5ldy11cmkiPjwvYT48aDM+Z3N0X3F1ZXJ5X25ld191cmkgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICogICAgICAgICAgZ3N0X3F1ZXJ5X25ld191cmkgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb25zdHJ1Y3RzIGEgbmV3IHF1ZXJ5IFVSSSBxdWVyeSBvYmplY3QuIFVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXVucmVmIiB0aXRsZT0iZ3N0X3F1ZXJ5X3VucmVmICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9xdWVyeV91bnJlZigpPC9jb2RlPjwvYT4KK3doZW4gZG9uZSB3aXRoIGl0LiBBbiBVUkkgcXVlcnkgaXMgdXNlZCB0byBxdWVyeSB0aGUgY3VycmVudCBVUkkKK3RoYXQgaXMgdXNlZCBieSB0aGUgc291cmNlIG9yIHNpbmsuCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdzdF9xdWVyeV91bnJlZgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcXVlcnktcGFyc2UtdXJpIj48L2E+PGgzPmdzdF9xdWVyeV9wYXJzZV91cmkgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3VyaSAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqdXJpPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUGFyc2UgYW4gVVJJIHF1ZXJ5LCB3cml0aW5nIHRoZSBVUkkgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXJpPC9jb2RlPjwvZW0+IGFzIGEgbmV3bHkKK2FsbG9jYXRlZCBzdHJpbmcsIGlmIHRoZSByZXNwZWN0aXZlIHBhcmFtZXRlcnMgYXJlIG5vbi1OVUxMLgorRnJlZSB0aGUgc3RyaW5nIHdpdGggPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1NZW1vcnktQWxsb2NhdGlvbi5odG1sI2ctZnJlZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX2ZyZWUoKTwvY29kZT48L2E+IGFmdGVyIHVzYWdlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51cmk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHN0b3JhZ2UgZm9yIHRoZSBjdXJyZW50IFVSSQorKG1heSBiZSBOVUxMKS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+IGNhbGxlZS1hbGxvY2F0ZXNdWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcXVlcnktc2V0LXVyaSI+PC9hPjxoMz5nc3RfcXVlcnlfc2V0X3VyaSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcXVlcnlfc2V0X3VyaSAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnVyaTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0Fuc3dlciBhIFVSSSBxdWVyeSBieSBzZXR0aW5nIHRoZSByZXF1ZXN0ZWQgVVJJLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiB3aXRoIHF1ZXJ5IHR5cGUgR1NUX1FVRVJZX1VSSTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXJpPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBVUkkgdG8gc2V0PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXF1ZXJ5LW5ldy1hbGxvY2F0aW9uIj48L2E+PGgzPmdzdF9xdWVyeV9uZXdfYWxsb2NhdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKiAgICAgICAgICBnc3RfcXVlcnlfbmV3X2FsbG9jYXRpb24gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IG5lZWRfcG9vbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NvbnN0cnVjdHMgYSBuZXcgcXVlcnkgb2JqZWN0IGZvciBxdWVyeWluZyB0aGUgYWxsb2NhdGlvbiBwcm9wZXJ0aWVzLgorPC9wPgorPHA+CitGcmVlLWZ1bmN0aW9uOiBnc3RfcXVlcnlfdW5yZWYKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZWdvdGlhdGVkIGNhcHM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5lZWRfcG9vbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5yZXR1cm4gYSBwb29sPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1xdWVyeS1wYXJzZS1hbGxvY2F0aW9uIj48L2E+PGgzPmdzdF9xdWVyeV9wYXJzZV9hbGxvY2F0aW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9hbGxvY2F0aW9uICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICoqY2FwczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICpuZWVkX3Bvb2w8L2NvZGU+PC9lbT4pOzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcXVlcnktcGFyc2UtYWxsb2NhdGlvbi1wYXJhbXMiPjwvYT48aDM+Z3N0X3F1ZXJ5X3BhcnNlX2FsbG9jYXRpb25fcGFyYW1zICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9hbGxvY2F0aW9uX3BhcmFtcyAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAqc2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICptaW5fYnVmZmVyczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICptYXhfYnVmZmVyczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICpwcmVmaXg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAqYWxpZ25tZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2wiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyUG9vbDwvc3Bhbj48L2E+ICoqcG9vbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCB0aGUgYWxsb2NhdGlvbiBwYXJhbWV0ZXJzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gb2YgdHlwZSBHU1RfUVVFUllfQUxMT0NBVElPTi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNpemU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1pbl9idWZmZXJzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtaW4gYnVmZmVyczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWF4X2J1ZmZlcnM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG1heCBidWZmZXJzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcmVmaXg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHByZWZpeDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWxpZ25tZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBhbGlnbm1lbnQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBvb2w8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2wiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyUG9vbDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcXVlcnktcGFyc2UtbnRoLWFsbG9jYXRpb24tbWVtb3J5Ij48L2E+PGgzPmdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9tZW1vcnkgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICogICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX21lbW9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitQYXJzZSBhbiBhdmFpbGFibGUgcXVlcnkgYW5kIGdldCB0aGUgYWxsb2N0b3IKK2F0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPiBvZiB0aGUgYWxsb2NhdG9yIGFycmF5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgR1NUX1FVRVJZX0FMTE9DQVRJT04gdHlwZSBxdWVyeSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnBvc2l0aW9uIGluIHRoZSBhbGxvY2F0b3IgYXJyYXkgdG8gcmVhZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuYW1lIG9mIHRoZSBhbGxvY2F0b3IgYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1xdWVyeS1wYXJzZS1udGgtYWxsb2NhdGlvbi1tZXRhIj48L2E+PGgzPmdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9tZXRhICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgIGdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9tZXRhICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1BhcnNlIGFuIGF2YWlsYWJsZSBxdWVyeSBhbmQgZ2V0IHRoZSBtZXRhZGF0YSBBUEkKK2F0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPiBvZiB0aGUgbWV0YWRhdGEgQVBJIGFycmF5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgR1NUX1FVRVJZX0FMTE9DQVRJT04gdHlwZSBxdWVyeSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnBvc2l0aW9uIGluIHRoZSBtZXRhZGF0YSBBUEkgYXJyYXkgdG8gcmVhZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiBvZiB0aGUgbWV0YWRhdGEgQVBJIGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcXVlcnktc2V0LWFsbG9jYXRpb24tcGFyYW1zIj48L2E+PGgzPmdzdF9xdWVyeV9zZXRfYWxsb2NhdGlvbl9wYXJhbXMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9hbGxvY2F0aW9uX3BhcmFtcyAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBtaW5fYnVmZmVyczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG1heF9idWZmZXJzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gcHJlZml4PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gYWxpZ25tZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2wiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyUG9vbDwvc3Bhbj48L2E+ICpwb29sPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0IHRoZSBhbGxvY2F0aW9uIHBhcmFtZXRlcnMgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiBvZiB0eXBlIEdTVF9RVUVSWV9BTExPQ0FUSU9OLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2l6ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWluX2J1ZmZlcnM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG1pbiBidWZmZXJzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYXhfYnVmZmVyczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbWF4IGJ1ZmZlcnM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByZWZpeDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcHJlZml4PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hbGlnbm1lbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGFsaWdubWVudDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9vbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1xdWVyeS1hZGQtYWxsb2NhdGlvbi1tZW1vcnkiPjwvYT48aDM+Z3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21lbW9yeSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fbWVtb3J5ICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmFsbG9jPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQWRkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hbGxvYzwvY29kZT48L2VtPiBhcyBhIHN1cHBvcnRlZCBtZW1vcnkgYWxsb2NhdG9yLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgR1NUX1FVRVJZX0FMTE9DQVRJT04gdHlwZSBxdWVyeSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFsbG9jPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtZW1vcnkgYWxsb2NhdG9yPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXF1ZXJ5LWFkZC1hbGxvY2F0aW9uLW1ldGEiPjwvYT48aDM+Z3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21ldGEgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21ldGEgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICphcGk8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBZGQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFwaTwvY29kZT48L2VtPiBhcyBhb25lIG9mIHRoZSBzdXBwb3J0ZWQgbWV0YWRhdGEgQVBJIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIEdTVF9RVUVSWV9BTExPQ0FUSU9OIHR5cGUgcXVlcnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hcGk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG1ldGFkYXRhIEFQSTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1xdWVyeS1oYXMtYWxsb2NhdGlvbi1tZXRhIj48L2E+PGgzPmdzdF9xdWVyeV9oYXNfYWxsb2NhdGlvbl9tZXRhICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9xdWVyeV9oYXNfYWxsb2NhdGlvbl9tZXRhICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqYXBpPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2sgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+IGhhcyBtZXRhZGF0YSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YXBpPC9jb2RlPjwvZW0+IHNldC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIEdTVF9RVUVSWV9BTExPQ0FUSU9OIHR5cGUgcXVlcnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hcGk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG1ldGFkYXRhIEFQSTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgd2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YXBpPC9jb2RlPjwvZW0+IGlzIGluIHRoZSBsaXN0IG9mIG1ldGFkYXRhLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1xdWVyeS1nZXQtbi1hbGxvY2F0aW9uLW1lbW9yaWVzIj48L2E+PGgzPmdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX21lbW9yaWVzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIGdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX21lbW9yaWVzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIHZhbHVlcyBjdXJyZW50bHkgc3RvcmVkIGluIHRoZQorYWxsb2NhdG9yIGFycmF5IG9mIHRoZSBxdWVyeSdzIHN0cnVjdHVyZS4KKzwvcD4KKzxwPgorSWYgbm8gbWVtb3J5IGFsbG9jYXRvciBpcyBzcGVjaWZpZWQsIHRoZSBkb3duc3RyZWFtIGVsZW1lbnQgY2FuIGhhbmRsZQordGhlIGRlZmF1bHQgbWVtb3J5IGFsbG9jYXRvci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIEdTVF9RVUVSWV9BTExPQ0FUSU9OIHR5cGUgcXVlcnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGFsbG9jYXRvciBhcnJheSBzaXplIGFzIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcXVlcnktZ2V0LW4tYWxsb2NhdGlvbi1tZXRhcyI+PC9hPjxoMz5nc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9tZXRhcyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICBnc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9tZXRhcyAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0cmlldmUgdGhlIG51bWJlciBvZiB2YWx1ZXMgY3VycmVudGx5IHN0b3JlZCBpbiB0aGUKK21ldGEgQVBJIGFycmF5IG9mIHRoZSBxdWVyeSdzIHN0cnVjdHVyZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIEdTVF9RVUVSWV9BTExPQ0FUSU9OIHR5cGUgcXVlcnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG1ldGFkYXRhIEFQSSBhcnJheSBzaXplIGFzIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcXVlcnktbmV3LXNjaGVkdWxpbmciPjwvYT48aDM+Z3N0X3F1ZXJ5X25ld19zY2hlZHVsaW5nICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqICAgICAgICAgIGdzdF9xdWVyeV9uZXdfc2NoZWR1bGluZyAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ29uc3RydWN0cyBhIG5ldyBxdWVyeSBvYmplY3QgZm9yIHF1ZXJ5aW5nIHRoZSBzY2hlZHVsaW5nIHByb3BlcnRpZXMuCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdzdF9xdWVyeV91bnJlZgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcXVlcnktcGFyc2Utc2NoZWR1bGluZyI+PC9hPjxoMz5nc3RfcXVlcnlfcGFyc2Vfc2NoZWR1bGluZyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfcXVlcnlfcGFyc2Vfc2NoZWR1bGluZyAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIgdGl0bGU9InN0cnVjdCBHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gKnB1bGxfbW9kZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICpyYW5kb21fYWNjZXNzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gKnNlcXVlbnRpYWw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gKm1pbnNpemU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gKm1heHNpemU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gKmFsaWduPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0IHRoZSBzY2hlZHVsaW5nIHByb3BlcnRpZXMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVlcnk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSB2YWxpZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+IG9mIHR5cGUgR1NUX1FVRVJZX1NDSEVEVUxJTkcuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wdWxsX21vZGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+aWYgcHVsbCBtb2RlIHNjaGVkdWxpbmcgaXMgc3VwcG9ydGVkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yYW5kb21fYWNjZXNzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmlmIHJhbmRvbSBhY2Nlc3MgaXMgcG9zc2libGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlcXVlbnRpYWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+aWYgc2VxdWVudGlhbCBhY2Nlc3MgaXMgcmVjb21tZW5kZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1pbnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHN1Z2dlc3RlZCBtaW5pbXVtIHNpemUgb2YgcHVsbCByZXF1ZXN0czwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWF4c2l6ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc3VnZ2VzdGVkIG1heGltdW0gc2l6ZSBvZiBwdWxsIHJlcXVlc3RzOjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWxpZ248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHN1Z2dlc3RlZCBhbGlnbm1lbnQgb2YgcHVsbCByZXF1ZXN0czwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1xdWVyeS1zZXQtc2NoZWR1bGluZyI+PC9hPjxoMz5nc3RfcXVlcnlfc2V0X3NjaGVkdWxpbmcgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9zY2hlZHVsaW5nICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IHB1bGxfbW9kZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IHJhbmRvbV9hY2Nlc3M8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBzZXF1ZW50aWFsPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG1pbnNpemU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbWF4c2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBhbGlnbjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldCB0aGUgc2NoZWR1bGluZyBwcm9wZXJ0aWVzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiBvZiB0eXBlIEdTVF9RVUVSWV9TQ0hFRFVMSU5HLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHVsbF9tb2RlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmlmIHB1bGwgbW9kZSBzY2hlZHVsaW5nIGlzIHN1cHBvcnRlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmFuZG9tX2FjY2VzczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5pZiByYW5kb20gYWNjZXNzIGlzIHBvc3NpYmxlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXF1ZW50aWFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmlmIHNlcXVlbnRpYWwgYWNjZXNzIGlzIHJlY29tbWVuZGVkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5taW5zaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzdWdnZXN0ZWQgbWluaW11bSBzaXplIG9mIHB1bGwgcmVxdWVzdHM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1heHNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHN1Z2dlc3RlZCBtYXhpbXVtIHNpemUgb2YgcHVsbCByZXF1ZXN0czo8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFsaWduPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzdWdnZXN0ZWQgYWxpZ25tZW50IG9mIHB1bGwgcmVxdWVzdHM8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RRdWVyeS5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0U2VnbWVudC5odG1sIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0U2VnbWVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MTc0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwKQEAgLTAsMCArMSw2NzMgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5Hc3RTZWdtZW50PC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdFNlZ21lbnQuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItR3N0U2VnbWVudC5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0U2VnbWVudCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1Hc3RTZWdtZW50LnRvcF9vZl9wYWdlIj48L2E+R3N0U2VnbWVudDwvc3Bhbj48L2gyPgorPHA+R3N0U2VnbWVudCDigJQgU3RydWN0dXJlIGRlc2NyaWJpbmcgdGhlIGNvbmZpZ3VyZWQgcmVnaW9uIG9mIGludGVyZXN0CisgICAgICAgICAgICAgICAgICAgIGluIGEgbWVkaWEgZmlsZS48L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0U2VnbWVudC5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisjaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OworCitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0U2VnbWVudCI+R3N0U2VnbWVudDwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnRGbGFncyIgdGl0bGU9ImVudW0gR3N0U2VnbWVudEZsYWdzIj5Hc3RTZWdtZW50RmxhZ3M8L2E+OworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1jbGlwIiB0aXRsZT0iZ3N0X3NlZ21lbnRfY2xpcCAoKSI+Z3N0X3NlZ21lbnRfY2xpcDwvYT4gICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudCIgdGl0bGU9InN0cnVjdCBHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+ICpzZWdtZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gc3RhcnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gc3RvcDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqY2xpcF9zdGFydDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqY2xpcF9zdG9wPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtaW5pdCIgdGl0bGU9ImdzdF9zZWdtZW50X2luaXQgKCkiPmdzdF9zZWdtZW50X2luaXQ8L2E+ICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiAqc2VnbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT4gKiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtbmV3IiB0aXRsZT0iZ3N0X3NlZ21lbnRfbmV3ICgpIj5nc3Rfc2VnbWVudF9uZXc8L2E+ICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudCIgdGl0bGU9InN0cnVjdCBHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiAqICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1jb3B5IiB0aXRsZT0iZ3N0X3NlZ21lbnRfY29weSAoKSI+Z3N0X3NlZ21lbnRfY29weTwvYT4gICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudCIgdGl0bGU9InN0cnVjdCBHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+ICpzZWdtZW50PC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtZnJlZSIgdGl0bGU9ImdzdF9zZWdtZW50X2ZyZWUgKCkiPmdzdF9zZWdtZW50X2ZyZWU8L2E+ICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiAqc2VnbWVudDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LWRvLXNlZWsiIHRpdGxlPSJnc3Rfc2VnbWVudF9kb19zZWVrICgpIj5nc3Rfc2VnbWVudF9kb19zZWVrPC9hPiAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNHc3RTZWdtZW50IiB0aXRsZT0ic3RydWN0IEdzdFNlZ21lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT4gKnNlZ21lbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gcmF0ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RTZWVrRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFNlZWtGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZWtGbGFnczwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RTZWVrVHlwZSIgdGl0bGU9ImVudW0gR3N0U2Vla1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWVrVHlwZTwvc3Bhbj48L2E+IHN0YXJ0X3R5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gc3RhcnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdFNlZWtUeXBlIiB0aXRsZT0iZW51bSBHc3RTZWVrVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZWtUeXBlPC9zcGFuPjwvYT4gc3RvcF90eXBlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHN0b3A8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAqdXBkYXRlPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC10by1ydW5uaW5nLXRpbWUiIHRpdGxlPSJnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCkiPmdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZTwvYT4gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiAqc2VnbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHBvc2l0aW9uPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC10by1zdHJlYW0tdGltZSIgdGl0bGU9ImdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgpIj5nc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZTwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNHc3RTZWdtZW50IiB0aXRsZT0ic3RydWN0IEdzdFNlZ21lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT4gKnNlZ21lbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBwb3NpdGlvbjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtdG8tcG9zaXRpb24iIHRpdGxlPSJnc3Rfc2VnbWVudF90b19wb3NpdGlvbiAoKSI+Z3N0X3NlZ21lbnRfdG9fcG9zaXRpb248L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudCIgdGl0bGU9InN0cnVjdCBHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+ICpzZWdtZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gcnVubmluZ190aW1lPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtc2V0LXJ1bm5pbmctdGltZSIgdGl0bGU9ImdzdF9zZWdtZW50X3NldF9ydW5uaW5nX3RpbWUgKCkiPmdzdF9zZWdtZW50X3NldF9ydW5uaW5nX3RpbWU8L2E+ICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiAqc2VnbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHJ1bm5pbmdfdGltZTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LWNvcHktaW50byIgdGl0bGU9ImdzdF9zZWdtZW50X2NvcHlfaW50byAoKSI+Z3N0X3NlZ21lbnRfY29weV9pbnRvPC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudCIgdGl0bGU9InN0cnVjdCBHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudCIgdGl0bGU9InN0cnVjdCBHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+ICpkZXN0PC9jb2RlPjwvZW0+KTsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0U2VnbWVudC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK1RoaXMgaGVscGVyIHN0cnVjdHVyZSBob2xkcyB0aGUgcmVsZXZhbnQgdmFsdWVzIGZvciB0cmFja2luZyB0aGUgcmVnaW9uIG9mCitpbnRlcmVzdCBpbiBhIG1lZGlhIGZpbGUsIGNhbGxlZCBhIHNlZ21lbnQuCis8L3A+Cis8cD4KK1RoZSBzdHJ1Y3R1cmUgY2FuIGJlIHVzZWQgZm9yIHR3byBwdXJwb3NlczoKKzwvcD4KKzxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+cGVyZm9ybWluZyBzZWVrcyAoaGFuZGxpbmcgc2VlayBldmVudHMpPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD50cmFja2luZyBwbGF5YmFjayByZWdpb25zIChoYW5kbGluZyBuZXdzZWdtZW50IGV2ZW50cyk8L3A+PC9saT4KKzwvdWw+PC9kaXY+Cis8cD4KKzwvcD4KKzxwPgorVGhlIHNlZ21lbnQgaXMgdXN1YWxseSBjb25maWd1cmVkIGJ5IHRoZSBhcHBsaWNhdGlvbiB3aXRoIGEgc2VlayBldmVudCB3aGljaAoraXMgcHJvcGFnYXRlZCB1cHN0cmVhbSBhbmQgZXZlbnR1YWxseSBoYW5kbGVkIGJ5IGFuIGVsZW1lbnQgdGhhdCBwZXJmb3JtcyB0aGUgc2Vlay4KKzwvcD4KKzxwPgorVGhlIGNvbmZpZ3VyZWQgc2VnbWVudCBpcyB0aGVuIHByb3BhZ2F0ZWQgYmFjayBkb3duc3RyZWFtIHdpdGggYSBuZXdzZWdtZW50IGV2ZW50LgorVGhpcyBpbmZvcm1hdGlvbiBpcyB0aGVuIHVzZWQgdG8gY2xpcCBtZWRpYSB0byB0aGUgc2VnbWVudCBib3VuZGFyaWVzLgorPC9wPgorPHA+CitBIHNlZ21lbnQgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtaW5pdCIgdGl0bGU9ImdzdF9zZWdtZW50X2luaXQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3NlZ21lbnRfaW5pdCgpPC9jb2RlPjwvYT4sIHdoaWNoIHRha2VzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+Cit0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgZm9ybWF0IG9mIHRoZSBzZWdtZW50IHZhbHVlcy4gVGhlIHNlZ21lbnQgd2lsbCBiZSBjb25maWd1cmVkCit3aXRoIGEgc3RhcnQgdmFsdWUgb2YgMCBhbmQgYSBzdG9wL2R1cmF0aW9uIG9mIC0xLCB3aGljaCBpcyB1bmRlZmluZWQuIFRoZSBkZWZhdWx0CityYXRlIGFuZCBhcHBsaWVkX3JhdGUgaXMgMS4wLgorPC9wPgorPHA+CitJZiB0aGUgc2VnbWVudCBpcyB1c2VkIGZvciBtYW5hZ2luZyBzZWVrcywgdGhlIHNlZ21lbnQgZHVyYXRpb24gc2hvdWxkIGJlIHNldCB3aXRoCis8YSBocmVmPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXIvaHRtbC9nc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LXNldC1kdXJhdGlvbiI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc2VnbWVudF9zZXRfZHVyYXRpb24oKTwvY29kZT48L2E+LiBUaGUgcHVibGljIGR1cmF0aW9uIGZpZWxkIGNvbnRhaW5zIHRoZSBkdXJhdGlvbiBvZiB0aGUKK3NlZ21lbnQuIFdoZW4gdXNpbmcgdGhlIHNlZ21lbnQgZm9yIHNlZWtpbmcsIHRoZSBzdGFydCBhbmQgdGltZSBtZW1iZXJzIHNob3VsZAorbm9ybWFsbHkgYmUgbGVmdCB0byB0aGVpciBkZWZhdWx0IDAgdmFsdWUuIFRoZSBzdG9wIHBvc2l0aW9uIGlzIGxlZnQgdG8gLTEgdW5sZXNzCitleHBsaWNpdGx5IGNvbmZpZ3VyZWQgdG8gYSBkaWZmZXJlbnQgdmFsdWUgYWZ0ZXIgYSBzZWVrIGV2ZW50LgorPC9wPgorPHA+CitUaGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgc2VnbWVudCBzaG91bGQgYmUgc2V0IHdpdGggdGhlIDxhIGhyZWY9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sL2dzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtc2V0LWxhc3Qtc3RvcCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc2VnbWVudF9zZXRfbGFzdF9zdG9wKCk8L2NvZGU+PC9hPi4KK1RoZSBwdWJsaWMgbGFzdF9zdG9wIGZpZWxkIGNvbnRhaW5zIHRoZSBsYXN0IHNldCBzdG9wIHBvc2l0aW9uIGluIHRoZSBzZWdtZW50LgorPC9wPgorPHA+CitGb3IgZWxlbWVudHMgdGhhdCBwZXJmb3JtIHNlZWtzLCB0aGUgY3VycmVudCBzZWdtZW50IHNob3VsZCBiZSB1cGRhdGVkIHdpdGggdGhlCis8YSBocmVmPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXIvaHRtbC9nc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LXNldC1zZWVrIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zZWdtZW50X3NldF9zZWVrKCk8L2NvZGU+PC9hPiBhbmQgdGhlIHZhbHVlcyBmcm9tIHRoZSBzZWVrIGV2ZW50LiBUaGlzIG1ldGhvZCB3aWxsIHVwZGF0ZQorYWxsIHRoZSBzZWdtZW50IGZpZWxkcy4gVGhlIGxhc3Rfc3RvcCBmaWVsZCB3aWxsIGNvbnRhaW4gdGhlIG5ldyBwbGF5YmFjayBwb3NpdGlvbi4KK0lmIHRoZSBjdXJfdHlwZSB3YXMgZGlmZmVyZW50IGZyb20gR1NUX1NFRUtfVFlQRV9OT05FLCBwbGF5YmFjayBjb250aW51ZXMgZnJvbQordGhlIGxhc3Rfc3RvcCBwb3NpdGlvbiwgcG9zc2libHkgd2l0aCB1cGRhdGVkIGZsYWdzIG9yIHJhdGUuCis8L3A+Cis8cD4KK0ZvciBlbGVtZW50cyB0aGF0IHdhbnQgdG8gdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiB0byB0cmFjayB0aGUgcGxheWJhY2sgcmVnaW9uLCB1c2UKKzxhIGhyZWY9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sL2dzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtc2V0LW5ld3NlZ21lbnQiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnQoKTwvY29kZT48L2E+IHRvIHVwZGF0ZSB0aGUgc2VnbWVudCBmaWVsZHMgd2l0aCB0aGUgaW5mb3JtYXRpb24gZnJvbQordGhlIG5ld3NlZ21lbnQgZXZlbnQuIFRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1jbGlwIiB0aXRsZT0iZ3N0X3NlZ21lbnRfY2xpcCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc2VnbWVudF9jbGlwKCk8L2NvZGU+PC9hPiBtZXRob2QgY2FuIGJlIHVzZWQgdG8gY2hlY2sgYW5kIGNsaXAKK3RoZSBtZWRpYSBkYXRhIHRvIHRoZSBzZWdtZW50IGJvdW5kYXJpZXMuCis8L3A+Cis8cD4KK0ZvciBlbGVtZW50cyB0aGF0IHdhbnQgdG8gc3luY2hyb25pemUgdG8gdGhlIHBpcGVsaW5lIGNsb2NrLCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC10by1ydW5uaW5nLXRpbWUiIHRpdGxlPSJnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lKCk8L2NvZGU+PC9hPgorY2FuIGJlIHVzZWQgdG8gY29udmVydCBhIHRpbWVzdGFtcCB0byBhIHZhbHVlIHRoYXQgY2FuIGJlIHVzZWQgdG8gc3luY2hyb25pemUKK3RvIHRoZSBjbG9jay4gVGhpcyBmdW5jdGlvbiB0YWtlcyBpbnRvIGFjY291bnQgYWxsIGFjY3VtdWxhdGVkIHNlZ21lbnRzIGFzIHdlbGwgYXMKK2FueSByYXRlIG9yIGFwcGxpZWRfcmF0ZSBjb252ZXJzaW9ucy4KKzwvcD4KKzxwPgorRm9yIGVsZW1lbnRzIHRoYXQgbmVlZCB0byBwZXJmb3JtIG9wZXJhdGlvbnMgb24gbWVkaWEgZGF0YSBpbiBzdHJlYW1fdGltZSwKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LXRvLXN0cmVhbS10aW1lIiB0aXRsZT0iZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUoKTwvY29kZT48L2E+IGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgYSB0aW1lc3RhbXAgYW5kIHRoZSBzZWdtZW50CitpbmZvIHRvIHN0cmVhbSB0aW1lICh3aGljaCBpcyBhbHdheXMgYmV0d2VlbiAwIGFuZCB0aGUgZHVyYXRpb24gb2YgdGhlIHN0cmVhbSkuCis8L3A+Cis8cD4KK0xhc3QgcmV2aWV3ZWQgb24gMjAwNy0wNS0xNyAoMC4xMC4xMykKKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFNlZ21lbnQiPjwvYT48aDM+c3RydWN0IEdzdFNlZ21lbnQ8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RTZWdtZW50IHsKKyAgR3N0U2VnbWVudEZsYWdzIGZsYWdzOworCisgIGdkb3VibGUgICAgICAgICByYXRlOworICBnZG91YmxlICAgICAgICAgYXBwbGllZF9yYXRlOworCisgIEdzdEZvcm1hdCAgICAgICBmb3JtYXQ7CisgIGd1aW50NjQgICAgICAgICBiYXNlOworICBndWludDY0ICAgICAgICAgc3RhcnQ7CisgIGd1aW50NjQgICAgICAgICBzdG9wOworICBndWludDY0ICAgICAgICAgdGltZTsKKworICBndWludDY0ICAgICAgICAgcG9zaXRpb247CisgIGd1aW50NjQgICAgICAgICBkdXJhdGlvbjsKK307Cis8L3ByZT4KKzxwPgorQSBoZWxwZXIgc3RydWN0dXJlIHRoYXQgaG9sZHMgdGhlIGNvbmZpZ3VyZWQgcmVnaW9uIG9mCitpbnRlcmVzdCBpbiBhIG1lZGlhIGZpbGUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNHc3RTZWdtZW50RmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFNlZ21lbnRGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnRGbGFnczwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RTZWdtZW50LmZsYWdzIj48L2E+ZmxhZ3M8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPmZsYWdzIGZvciB0aGlzIHNlZ21lbnQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFNlZ21lbnQucmF0ZSI+PC9hPnJhdGU8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSByYXRlIG9mIHRoZSBzZWdtZW50PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RTZWdtZW50LmFwcGxpZWQtcmF0ZSI+PC9hPmFwcGxpZWRfcmF0ZTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGFscmVhZHkgYXBwbGllZCByYXRlIHRvIHRoZSBzZWdtZW50PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0U2VnbWVudC5mb3JtYXQiPjwvYT5mb3JtYXQ8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBmb3JtYXQgb2YgdGhlIHNlZ21lbnQgdmFsdWVzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RTZWdtZW50LmJhc2UiPjwvYT5iYXNlPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgYmFzZSB0aW1lIG9mIHRoZSBzZWdtZW50PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RTZWdtZW50LnN0YXJ0Ij48L2E+c3RhcnQ8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzdGFydCBvZiB0aGUgc2VnbWVudDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0U2VnbWVudC5zdG9wIj48L2E+c3RvcDwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHN0b3Agb2YgdGhlIHNlZ21lbnQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFNlZ21lbnQudGltZSI+PC9hPnRpbWU8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzdHJlYW0gdGltZSBvZiB0aGUgc2VnbWVudDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0U2VnbWVudC5wb3NpdGlvbiI+PC9hPnBvc2l0aW9uPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcG9zaXRpb24gaW4gdGhlIHNlZ21lbnQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFNlZ21lbnQuZHVyYXRpb24iPjwvYT5kdXJhdGlvbjwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGR1cmF0aW9uIG9mIHRoZSBzZWdtZW50PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0U2VnbWVudEZsYWdzIj48L2E+PGgzPmVudW0gR3N0U2VnbWVudEZsYWdzPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGVudW0geworICBHU1RfU0VHTUVOVF9GTEFHX05PTkUgICAgICAgICAgICA9IEdTVF9TRUVLX0ZMQUdfTk9ORSwKKyAgR1NUX1NFR01FTlRfRkxBR19SRVNFVCAgICAgICAgICAgPSBHU1RfU0VFS19GTEFHX0ZMVVNILAorICBHU1RfU0VHTUVOVF9GTEFHX1NLSVAgICAgICAgICAgICA9IEdTVF9TRUVLX0ZMQUdfU0tJUAorfSBHc3RTZWdtZW50RmxhZ3M7Cis8L3ByZT4KKzxwPgorRmxhZ3MgZm9yIHRoZSBHc3RTZWdtZW50IHN0cnVjdHVyZS4gQ3VycmVudGx5IG1hcHBlZCB0byB0aGUgY29ycmVzcG9uZGluZwordmFsdWVzIG9mIHRoZSBzZWVrIGZsYWdzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtU0VHTUVOVC1GTEFHLU5PTkU6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NFR01FTlRfRkxBR19OT05FPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5ubyBmbGFncworPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVNFR01FTlQtRkxBRy1SRVNFVDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU0VHTUVOVF9GTEFHX1JFU0VUPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5yZXNldCB0aGUgcGlwZWxpbmUgcnVubmluZ190aW1lIHRvIHRoZSBzZWdtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZ190aW1lCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtU0VHTUVOVC1GTEFHLVNLSVA6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NFR01FTlRfRkxBR19TS0lQPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wZXJmb3JtIHNraXAgcGxheWJhY2sKKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1zZWdtZW50LWNsaXAiPjwvYT48aDM+Z3N0X3NlZ21lbnRfY2xpcCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3Rfc2VnbWVudF9jbGlwICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiAqc2VnbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHN0YXJ0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHN0b3A8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gKmNsaXBfc3RhcnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gKmNsaXBfc3RvcDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NsaXAgdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydDwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0b3A8L2NvZGU+PC9lbT4gdmFsdWVzIHRvIHRoZSBzZWdtZW50IGJvdW5kYXJpZXMgZ2l2ZW4KK2luIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWdtZW50PC9jb2RlPjwvZW0+LiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnQ8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdG9wPC9jb2RlPjwvZW0+IGFyZSBjb21wYXJlZCBhbmQgY2xpcHBlZCB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VnbWVudDwvY29kZT48L2VtPgorc3RhcnQgYW5kIHN0b3AgdmFsdWVzLgorPC9wPgorPHA+CitJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBGQUxTRSwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0PC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RvcDwvY29kZT48L2VtPiBhcmUga25vd24gdG8gZmFsbAorb3V0c2lkZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VnbWVudDwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsaXBfc3RhcnQ8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jbGlwX3N0b3A8L2NvZGU+PC9lbT4gYXJlIG5vdCB1cGRhdGVkLgorPC9wPgorPHA+CitXaGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIFRSVUUsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jbGlwX3N0YXJ0PC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xpcF9zdG9wPC9jb2RlPjwvZW0+IHdpbGwgYmUKK3VwZGF0ZWQuIElmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jbGlwX3N0YXJ0PC9jb2RlPjwvZW0+IG9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jbGlwX3N0b3A8L2NvZGU+PC9lbT4gYXJlIGRpZmZlcmVudCBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydDwvY29kZT48L2VtPiBvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RvcDwvY29kZT48L2VtPgorcmVzcGVjdGl2ZWx5LCB0aGUgcmVnaW9uIGZlbGwgcGFydGlhbGx5IGluIHRoZSBzZWdtZW50LgorPC9wPgorPHA+CitOb3RlIHRoYXQgd2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RvcDwvY29kZT48L2VtPiBpcyAtMSwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsaXBfc3RvcDwvY29kZT48L2VtPiB3aWxsIGJlIHNldCB0byB0aGUgZW5kIG9mIHRoZQorc2VnbWVudC4gRGVwZW5kaW5nIG9uIHRoZSB1c2UgY2FzZSwgdGhpcyBtYXkgb3IgbWF5IG5vdCBiZSB3aGF0IHlvdSB3YW50LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNHc3RTZWdtZW50IiB0aXRsZT0ic3RydWN0IEdzdFNlZ21lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT4gc3RydWN0dXJlLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBmb3JtYXQgb2YgdGhlIHNlZ21lbnQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc3RhcnQgcG9zaXRpb24gaW4gdGhlIHNlZ21lbnQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0b3A8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHN0b3AgcG9zaXRpb24gaW4gdGhlIHNlZ21lbnQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsaXBfc3RhcnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGNsaXBwZWQgc3RhcnQgcG9zaXRpb24gaW4gdGhlIHNlZ21lbnQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xpcF9zdG9wPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjbGlwcGVkIHN0b3AgcG9zaXRpb24gaW4gdGhlIHNlZ21lbnQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydDwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0b3A8L2NvZGU+PC9lbT4gdGltZXMgZmFsbCBwYXJ0aWFsbHkgb3IKK2NvbXBsZXRlbHkgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnQ8L2NvZGU+PC9lbT4sIEZBTFNFIGlmIHRoZSB2YWx1ZXMgYXJlIGNvbXBsZXRlbHkgb3V0c2lkZQorb2YgdGhlIHNlZ21lbnQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXNlZ21lbnQtaW5pdCI+PC9hPjxoMz5nc3Rfc2VnbWVudF9pbml0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9zZWdtZW50X2luaXQgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudCIgdGl0bGU9InN0cnVjdCBHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+ICpzZWdtZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitUaGUgc3RhcnQvbGFzdF9zdG9wIHBvc2l0aW9ucyBhcmUgc2V0IHRvIDAgYW5kIHRoZSBzdG9wL2R1cmF0aW9uCitmaWVsZHMgYXJlIHNldCB0byAtMSAodW5rbm93bikuIFRoZSBkZWZhdWx0IHJhdGUgb2YgMS4wIGFuZCBubworZmxhZ3MgYXJlIHNldC4KKzwvcD4KKzxwPgorSW5pdGlhbGl6ZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VnbWVudDwvY29kZT48L2VtPiB0byBpdHMgZGVmYXVsdCB2YWx1ZXMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VnbWVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGZvcm1hdCBvZiB0aGUgc2VnbWVudC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc2VnbWVudC1uZXciPjwvYT48aDM+Z3N0X3NlZ21lbnRfbmV3ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNHc3RTZWdtZW50IiB0aXRsZT0ic3RydWN0IEdzdFNlZ21lbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+ICogICAgICAgIGdzdF9zZWdtZW50X25ldyAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQWxsb2NhdGUgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudCIgdGl0bGU9InN0cnVjdCBHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+IHN0cnVjdHVyZSBhbmQgaW5pdGlhbGl6ZSBpdCB1c2luZworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtaW5pdCIgdGl0bGU9ImdzdF9zZWdtZW50X2luaXQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3NlZ21lbnRfaW5pdCgpPC9jb2RlPjwvYT4uCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdzdF9zZWdtZW50X2ZyZWUKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiwgZnJlZSB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LWZyZWUiIHRpdGxlPSJnc3Rfc2VnbWVudF9mcmVlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zZWdtZW50X2ZyZWUoKTwvY29kZT48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1zZWdtZW50LWNvcHkiPjwvYT48aDM+Z3N0X3NlZ21lbnRfY29weSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudCIgdGl0bGU9InN0cnVjdCBHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiAqICAgICAgICBnc3Rfc2VnbWVudF9jb3B5ICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiAqc2VnbWVudDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZSBhIGNvcHkgb2YgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnQ8L2NvZGU+PC9lbT4uCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdzdF9zZWdtZW50X2ZyZWUKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWdtZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudCIgdGl0bGU9InN0cnVjdCBHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudCIgdGl0bGU9InN0cnVjdCBHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+LCBmcmVlIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtZnJlZSIgdGl0bGU9ImdzdF9zZWdtZW50X2ZyZWUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3NlZ21lbnRfZnJlZSgpPC9jb2RlPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc2VnbWVudC1mcmVlIj48L2E+PGgzPmdzdF9zZWdtZW50X2ZyZWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3NlZ21lbnRfZnJlZSAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNHc3RTZWdtZW50IiB0aXRsZT0ic3RydWN0IEdzdFNlZ21lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT4gKnNlZ21lbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitGcmVlIHRoZSBhbGxvY2F0ZWQgc2VnbWVudCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VnbWVudDwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VnbWVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dC4gRGVmYXVsdCBpcyB0cmFuc2ZlciBub25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmluPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1zZWdtZW50LWRvLXNlZWsiPjwvYT48aDM+Z3N0X3NlZ21lbnRfZG9fc2VlayAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3Rfc2VnbWVudF9kb19zZWVrICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiAqc2VnbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiByYXRlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdFNlZWtGbGFncyIgdGl0bGU9ImVudW0gR3N0U2Vla0ZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2Vla0ZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdFNlZWtUeXBlIiB0aXRsZT0iZW51bSBHc3RTZWVrVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZWtUeXBlPC9zcGFuPjwvYT4gc3RhcnRfdHlwZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBzdGFydDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0U2Vla1R5cGUiIHRpdGxlPSJlbnVtIEdzdFNlZWtUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2Vla1R5cGU8L3NwYW4+PC9hPiBzdG9wX3R5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gc3RvcDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICp1cGRhdGU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitVcGRhdGUgdGhlIHNlZ21lbnQgc3RydWN0dXJlIHdpdGggdGhlIGZpZWxkIHZhbHVlcyBvZiBhIHNlZWsgZXZlbnQgKHNlZQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc2VlayIgdGl0bGU9ImdzdF9ldmVudF9uZXdfc2VlayAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZXZlbnRfbmV3X3NlZWsoKTwvY29kZT48L2E+KS4KKzwvcD4KKzxwPgorQWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgdGhlIHNlZ21lbnQgZmllbGQgcG9zaXRpb24gYW5kIHRpbWUgd2lsbAorY29udGFpbiB0aGUgcmVxdWVzdGVkIG5ldyBwb3NpdGlvbiBpbiB0aGUgc2VnbWVudC4gVGhlIG5ldyByZXF1ZXN0ZWQKK3Bvc2l0aW9uIGluIHRoZSBzZWdtZW50IGRlcGVuZHMgb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJhdGU8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydF90eXBlPC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RvcF90eXBlPC9jb2RlPjwvZW0+LgorPC9wPgorPHA+CitGb3IgcG9zaXRpdmUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJhdGU8L2NvZGU+PC9lbT4sIHRoZSBuZXcgcG9zaXRpb24gaW4gdGhlIHNlZ21lbnQgaXMgdGhlIG5ldyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VnbWVudDwvY29kZT48L2VtPgorc3RhcnQgZmllbGQgd2hlbiBpdCB3YXMgdXBkYXRlZCB3aXRoIGEgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0X3R5cGU8L2NvZGU+PC9lbT4gZGlmZmVyZW50IGZyb20KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtU0VFSy1UWVBFLU5PTkU6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9TRUVLX1RZUEVfTk9ORTwvc3Bhbj48L2E+LiBJZiBubyB1cGRhdGUgd2FzIHBlcmZvcm1lZCBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VnbWVudDwvY29kZT48L2VtPiBzdGFydCBwb3NpdGlvbgorKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtU0VFSy1UWVBFLU5PTkU6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9TRUVLX1RZUEVfTk9ORTwvc3Bhbj48L2E+KSwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0PC9jb2RlPjwvZW0+IGlzIGlnbm9yZWQgYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWdtZW50PC9jb2RlPjwvZW0+IHBvc2l0aW9uIGlzCit1bm1vZGlmaWVkLgorPC9wPgorPHA+CitGb3IgbmVnYXRpdmUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJhdGU8L2NvZGU+PC9lbT4sIHRoZSBuZXcgcG9zaXRpb24gaW4gdGhlIHNlZ21lbnQgaXMgdGhlIG5ldyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VnbWVudDwvY29kZT48L2VtPgorc3RvcCBmaWVsZCB3aGVuIGl0IHdhcyB1cGRhdGVkIHdpdGggYSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RvcF90eXBlPC9jb2RlPjwvZW0+IGRpZmZlcmVudCBmcm9tCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULVNFRUstVFlQRS1OT05FOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfU0VFS19UWVBFX05PTkU8L3NwYW4+PC9hPi4gSWYgbm8gc3RvcCB3YXMgcHJldmlvdXNseSBjb25maWd1cmVkIGluIHRoZSBzZWdtZW50LCB0aGUKK2R1cmF0aW9uIG9mIHRoZSBzZWdtZW50IHdpbGwgYmUgdXNlZCB0byB1cGRhdGUgdGhlIHN0b3AgcG9zaXRpb24uCitJZiBubyB1cGRhdGUgd2FzIHBlcmZvcm1lZCBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VnbWVudDwvY29kZT48L2VtPiBzdG9wIHBvc2l0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULVNFRUstVFlQRS1OT05FOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfU0VFS19UWVBFX05PTkU8L3NwYW4+PC9hPiksCis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RvcDwvY29kZT48L2VtPiBpcyBpZ25vcmVkIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VnbWVudDwvY29kZT48L2VtPiBwb3NpdGlvbiBpcyB1bm1vZGlmaWVkLgorPC9wPgorPHA+CitUaGUgYXBwbGllZCByYXRlIG9mIHRoZSBzZWdtZW50IHdpbGwgYmUgc2V0IHRvIDEuMCBieSBkZWZhdWx0LgorSWYgdGhlIGNhbGxlciBjYW4gYXBwbHkgYSByYXRlIGNoYW5nZSwgaXQgc2hvdWxkIHVwZGF0ZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VnbWVudDwvY29kZT48L2VtPgorcmF0ZSBhbmQgYXBwbGllZF9yYXRlIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKzwvcD4KKzxwPgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVwZGF0ZTwvY29kZT48L2VtPiB3aWxsIGJlIHNldCB0byBUUlVFIGlmIGEgc2VlayBzaG91bGQgYmUgcGVyZm9ybWVkIHRvIHRoZSBzZWdtZW50Citwb3NpdGlvbiBmaWVsZC4gVGhpcyBmaWVsZCBjYW4gYmUgRkFMU0UgaWYsIGZvciBleGFtcGxlLCBvbmx5IHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmF0ZTwvY29kZT48L2VtPgoraGFzIGJlZW4gY2hhbmdlZCBidXQgbm90IHRoZSBwbGF5YmFjayBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWdtZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudCIgdGl0bGU9InN0cnVjdCBHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+IHN0cnVjdHVyZS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJhdGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHJhdGUgb2YgdGhlIHNlZ21lbnQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGZvcm1hdCBvZiB0aGUgc2VnbWVudC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZsYWdzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzZWdtZW50IGZsYWdzIGZvciB0aGUgc2VnbWVudDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnRfdHlwZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2VlayBtZXRob2Q8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzZWVrIHN0YXJ0IHZhbHVlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdG9wX3R5cGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNlZWsgbWV0aG9kPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdG9wPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzZWVrIHN0b3AgdmFsdWU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVwZGF0ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5ib29sZWFuIGhvbGRpbmcgd2hldGhlciBwb3NpdGlvbiB3YXMgdXBkYXRlZC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBzZWVrIGNvdWxkIGJlIHBlcmZvcm1lZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc2VnbWVudC10by1ydW5uaW5nLXRpbWUiPjwvYT48aDM+Z3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNHc3RTZWdtZW50IiB0aXRsZT0ic3RydWN0IEdzdFNlZ21lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT4gKnNlZ21lbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBwb3NpdGlvbjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1RyYW5zbGF0ZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9zaXRpb248L2NvZGU+PC9lbT4gdG8gdGhlIHRvdGFsIHJ1bm5pbmcgdGltZSB1c2luZyB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQKK2FuZCBwcmV2aW91c2x5IGFjY3VtdWxhdGVkIHNlZ21lbnRzLiBQb3NpdGlvbiBpcyBhIHZhbHVlIGJldHdlZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnQ8L2NvZGU+PC9lbT4KK3N0YXJ0IGFuZCBzdG9wIHRpbWUuCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IHVzZWQgYnkgZWxlbWVudHMgdGhhdCBuZWVkIHRvIHN5bmNocm9uaXplIHRvIHRoZQorZ2xvYmFsIGNsb2NrIGluIGEgcGlwZWxpbmUuIFRoZSBydW5ubmluZyB0aW1lIGlzIGEgY29uc3RhbnRseSBpbmNyZWFzaW5nIHZhbHVlCitzdGFydGluZyBmcm9tIDAuIFdoZW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtaW5pdCIgdGl0bGU9ImdzdF9zZWdtZW50X2luaXQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3NlZ21lbnRfaW5pdCgpPC9jb2RlPjwvYT4gaXMgY2FsbGVkLCB0aGlzIHZhbHVlIHdpbGwgcmVzZXQgdG8KKzAuCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gcmV0dXJucyAtMSBpZiB0aGUgcG9zaXRpb24gaXMgb3V0c2lkZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VnbWVudDwvY29kZT48L2VtPiBzdGFydCBhbmQgc3RvcC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWdtZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudCIgdGl0bGU9InN0cnVjdCBHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+IHN0cnVjdHVyZS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZm9ybWF0IG9mIHRoZSBzZWdtZW50LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9zaXRpb248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBvc2l0aW9uIGluIHRoZSBzZWdtZW50PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBvc2l0aW9uIGFzIHRoZSB0b3RhbCBydW5uaW5nIHRpbWUgb3IgLTEgd2hlbiBhbiBpbnZhbGlkIHBvc2l0aW9uCit3YXMgZ2l2ZW4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXNlZ21lbnQtdG8tc3RyZWFtLXRpbWUiPjwvYT48aDM+Z3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiAqc2VnbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHBvc2l0aW9uPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVHJhbnNsYXRlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wb3NpdGlvbjwvY29kZT48L2VtPiB0byBzdHJlYW0gdGltZSB1c2luZyB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQKK3NlZ21lbnQuIFRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9zaXRpb248L2NvZGU+PC9lbT4gdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWdtZW50PC9jb2RlPjwvZW0+IHN0YXJ0IGFuZAorc3RvcCB2YWx1ZS4KKzwvcD4KKzxwPgorVGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgdXNlZCBieSBlbGVtZW50cyB0aGF0IG5lZWQgdG8gb3BlcmF0ZSBvbgordGhlIHN0cmVhbSB0aW1lIG9mIHRoZSBidWZmZXJzIGl0IHJlY2VpdmVzLCBzdWNoIGFzIGVmZmVjdCBwbHVnaW5zLgorSW4gdGhvc2UgdXNlIGNhc2VzLCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9zaXRpb248L2NvZGU+PC9lbT4gaXMgdHlwaWNhbGx5IHRoZSBidWZmZXIgdGltZXN0YW1wIG9yCitjbG9jayB0aW1lIHRoYXQgb25lIHdhbnRzIHRvIGNvbnZlcnQgdG8gdGhlIHN0cmVhbSB0aW1lLgorVGhlIHN0cmVhbSB0aW1lIGlzIGFsd2F5cyBiZXR3ZWVuIDAgYW5kIHRoZSB0b3RhbCBkdXJhdGlvbiBvZiB0aGUKK21lZGlhIHN0cmVhbS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWdtZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudCIgdGl0bGU9InN0cnVjdCBHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+IHN0cnVjdHVyZS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZm9ybWF0IG9mIHRoZSBzZWdtZW50LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9zaXRpb248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBvc2l0aW9uIGluIHRoZSBzZWdtZW50PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBvc2l0aW9uIGluIHN0cmVhbV90aW1lIG9yIC0xIHdoZW4gYW4gaW52YWxpZCBwb3NpdGlvbgord2FzIGdpdmVuLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1zZWdtZW50LXRvLXBvc2l0aW9uIj48L2E+PGgzPmdzdF9zZWdtZW50X3RvX3Bvc2l0aW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgZ3N0X3NlZ21lbnRfdG9fcG9zaXRpb24gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNHc3RTZWdtZW50IiB0aXRsZT0ic3RydWN0IEdzdFNlZ21lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT4gKnNlZ21lbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBydW5uaW5nX3RpbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb252ZXJ0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ydW5uaW5nX3RpbWU8L2NvZGU+PC9lbT4gaW50byBhIHBvc2l0aW9uIGluIHRoZSBzZWdtZW50IHNvIHRoYXQKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LXRvLXJ1bm5pbmctdGltZSIgdGl0bGU9ImdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUoKTwvY29kZT48L2E+IHdpdGggdGhhdCBwb3NpdGlvbiByZXR1cm5zIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ydW5uaW5nX3RpbWU8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VnbWVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGZvcm1hdCBvZiB0aGUgc2VnbWVudC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJ1bm5pbmdfdGltZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcnVubmluZ190aW1lIGluIHRoZSBzZWdtZW50PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBvc2l0aW9uIGluIHRoZSBzZWdtZW50IGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cnVubmluZ190aW1lPC9jb2RlPjwvZW0+LiBUaGlzIGZ1bmN0aW9uIHJldHVybnMKKy0xIHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJ1bm5pbmdfdGltZTwvY29kZT48L2VtPiBpcyAtMSBvciB3aGVuIGl0IGlzIG5vdCBpbnNpZGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnQ8L2NvZGU+PC9lbT4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXNlZ21lbnQtc2V0LXJ1bm5pbmctdGltZSI+PC9hPjxoMz5nc3Rfc2VnbWVudF9zZXRfcnVubmluZ190aW1lICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9zZWdtZW50X3NldF9ydW5uaW5nX3RpbWUgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudCIgdGl0bGU9InN0cnVjdCBHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+ICpzZWdtZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gcnVubmluZ190aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQWRqdXN0IHRoZSBzdGFydC9zdG9wIGFuZCBiYXNlIHZhbHVlcyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VnbWVudDwvY29kZT48L2VtPiBzdWNoIHRoYXQgdGhlIG5leHQgdmFsaWQKK2J1ZmZlciB3aWxsIGJlIG9uZSB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ydW5uaW5nX3RpbWU8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VnbWVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGZvcm1hdCBvZiB0aGUgc2VnbWVudC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJ1bm5pbmdfdGltZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcnVubmluZ190aW1lIGluIHRoZSBzZWdtZW50PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgc2VnbWVudCBjb3VsZCBiZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseS4gSWYgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpcworcmV0dXJuZWQsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ydW5uaW5nX3RpbWU8L2NvZGU+PC9lbT4gaXMgLTEgb3Igbm90IGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWdtZW50PC9jb2RlPjwvZW0+LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1zZWdtZW50LWNvcHktaW50byI+PC9hPjxoMz5nc3Rfc2VnbWVudF9jb3B5X2ludG8gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3NlZ21lbnRfY29weV9pbnRvICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNHc3RTZWdtZW50IiB0aXRsZT0ic3RydWN0IEdzdFNlZ21lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNHc3RTZWdtZW50IiB0aXRsZT0ic3RydWN0IEdzdFNlZ21lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT4gKmRlc3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RTZWdtZW50LnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzEyYjViCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwKQEAgLTAsMCArMSwyMzMwIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0U3RydWN0dXJlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCIgdGl0bGU9IkdzdFNlZ21lbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3RTeXN0ZW1DbG9jay5odG1sIiB0aXRsZT0iR3N0U3lzdGVtQ2xvY2siPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdFN5c3RlbUNsb2NrLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUudG9wX29mX3BhZ2UiPjwvYT5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9oMj4KKzxwPkdzdFN0cnVjdHVyZSDigJQgR2VuZXJpYyBzdHJ1Y3R1cmUgY29udGFpbmluZyBmaWVsZHMgb2YgbmFtZXMgYW5kIHZhbHVlczwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKKworc3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT47Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZUZvcmVhY2hGdW5jIiB0aXRsZT0iR3N0U3RydWN0dXJlRm9yZWFjaEZ1bmMgKCkiPipHc3RTdHJ1Y3R1cmVGb3JlYWNoRnVuYzwvYT4pICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUXVhcms8L3NwYW4+PC9hPiBmaWVsZF9pZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlTWFwRnVuYyIgdGl0bGU9IkdzdFN0cnVjdHVyZU1hcEZ1bmMgKCkiPipHc3RTdHJ1Y3R1cmVNYXBGdW5jPC9hPikgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUXVhcms8L3NwYW4+PC9hPiBmaWVsZF9pZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWVtcHR5LW5ldyIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZW1wdHlfbmV3ICgpIj5nc3Rfc3RydWN0dXJlX2VtcHR5X25ldzwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWlkLWVtcHR5LW5ldyIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfaWRfZW1wdHlfbmV3ICgpIj5nc3Rfc3RydWN0dXJlX2lkX2VtcHR5X25ldzwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IHF1YXJrPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLW5ldyIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfbmV3ICgpIj5nc3Rfc3RydWN0dXJlX25ldzwvYT4gICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpcnN0ZmllbGQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLW5ldy12YWxpc3QiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX25ld192YWxpc3QgKCkiPmdzdF9zdHJ1Y3R1cmVfbmV3X3ZhbGlzdDwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmlyc3RmaWVsZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gdmFyYXJnczwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKiAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1uZXciIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2lkX25ldyAoKSI+Z3N0X3N0cnVjdHVyZV9pZF9uZXc8L2E+ICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUXVhcms8L3NwYW4+PC9hPiBuYW1lX3F1YXJrPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gZmllbGRfcXVhcms8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWNvcHkiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2NvcHkgKCkiPmdzdF9zdHJ1Y3R1cmVfY29weTwvYT4gICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZnJlZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZnJlZSAoKSI+Z3N0X3N0cnVjdHVyZV9mcmVlPC9hPiAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPik7Citjb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtbmFtZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKCkiPmdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWU8L2E+ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaGFzLW5hbWUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2hhc19uYW1lICgpIj5nc3Rfc3RydWN0dXJlX2hhc19uYW1lPC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtc2V0LW5hbWUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX3NldF9uYW1lICgpIj5nc3Rfc3RydWN0dXJlX3NldF9uYW1lPC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1F1YXJrPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtbmFtZS1pZCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWVfaWQgKCkiPmdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWVfaWQ8L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaWQtZ2V0IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKCkiPmdzdF9zdHJ1Y3R1cmVfaWRfZ2V0PC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUXVhcms8L3NwYW4+PC9hPiBmaXJzdF9maWVsZF9pZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaWQtZ2V0LXZhbGlzdCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbGlzdCAoKSI+Z3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsaXN0PC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IGZpcnN0X2ZpZWxkX2lkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52YV9saXN0PC9zcGFuPiBhcmdzPC9jb2RlPjwvZW0+KTsKK2NvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKiAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1nZXQtdmFsdWUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoKSI+Z3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWU8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IGZpZWxkPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWlkLXNldC12YWx1ZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlICgpIj5nc3Rfc3RydWN0dXJlX2lkX3NldF92YWx1ZTwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gZmllbGQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC10YWtlLXZhbHVlIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9pZF90YWtlX3ZhbHVlICgpIj5nc3Rfc3RydWN0dXJlX2lkX3Rha2VfdmFsdWU8L2E+ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gZmllbGQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldCAoKSI+Z3N0X3N0cnVjdHVyZV9nZXQ8L2E+ICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8c3BhbiBjbGFzcz0idHlwZSI+Y2hhcjwvc3Bhbj4gKmZpcnN0X2ZpZWxkbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LXZhbGlzdCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbGlzdCAoKSI+Z3N0X3N0cnVjdHVyZV9nZXRfdmFsaXN0PC9hPiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8c3BhbiBjbGFzcz0idHlwZSI+Y2hhcjwvc3Bhbj4gKmZpcnN0X2ZpZWxkbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gYXJnczwvY29kZT48L2VtPik7Citjb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdWYWx1ZTwvc3Bhbj48L2E+ICogICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LXZhbHVlIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKCkiPmdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlPC9hPiAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmllbGRuYW1lPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXNldC12YWx1ZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlICgpIj5nc3Rfc3RydWN0dXJlX3NldF92YWx1ZTwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpZWxkbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXRha2UtdmFsdWUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX3Rha2VfdmFsdWUgKCkiPmdzdF9zdHJ1Y3R1cmVfdGFrZV92YWx1ZTwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmllbGRuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtc2V0IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9zZXQgKCkiPmdzdF9zdHJ1Y3R1cmVfc2V0PC9hPiAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmllbGRuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1zZXQtdmFsaXN0IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9zZXRfdmFsaXN0ICgpIj5nc3Rfc3RydWN0dXJlX3NldF92YWxpc3Q8L2E+ICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpZWxkbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gdmFyYXJnczwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1zZXQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2lkX3NldCAoKSI+Z3N0X3N0cnVjdHVyZV9pZF9zZXQ8L2E+ICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IGZpZWxkbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaWQtc2V0LXZhbGlzdCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbGlzdCAoKSI+Z3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsaXN0PC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IGZpZWxkbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gdmFyYXJnczwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1yZW1vdmUtZmllbGQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCAoKSI+Z3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQ8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaWVsZG5hbWU8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtcmVtb3ZlLWZpZWxkcyIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkcyAoKSI+Z3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzPC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaWVsZG5hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXJlbW92ZS1maWVsZHMtdmFsaXN0IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzX3ZhbGlzdCAoKSI+Z3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzX3ZhbGlzdDwvYT4gICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaWVsZG5hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZhX2xpc3Q8L3NwYW4+IHZhcmFyZ3M8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtcmVtb3ZlLWFsbC1maWVsZHMiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX3JlbW92ZV9hbGxfZmllbGRzICgpIj5nc3Rfc3RydWN0dXJlX3JlbW92ZV9hbGxfZmllbGRzPC9hPiAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdUeXBlPC9zcGFuPjwvYT4gICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LWZpZWxkLXR5cGUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldF9maWVsZF90eXBlICgpIj5nc3Rfc3RydWN0dXJlX2dldF9maWVsZF90eXBlPC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpZWxkbmFtZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1mb3JlYWNoIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9mb3JlYWNoICgpIj5nc3Rfc3RydWN0dXJlX2ZvcmVhY2g8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlRm9yZWFjaEZ1bmMiIHRpdGxlPSJHc3RTdHJ1Y3R1cmVGb3JlYWNoRnVuYyAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZUZvcmVhY2hGdW5jPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLW4tZmllbGRzIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9uX2ZpZWxkcyAoKSI+Z3N0X3N0cnVjdHVyZV9uX2ZpZWxkczwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1oYXMtZmllbGQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2hhc19maWVsZCAoKSI+Z3N0X3N0cnVjdHVyZV9oYXNfZmllbGQ8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaWVsZG5hbWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaGFzLWZpZWxkLXR5cGVkIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGRfdHlwZWQgKCkiPmdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkX3R5cGVkPC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmllbGRuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWlzLWVxdWFsIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9pc19lcXVhbCAoKSI+Z3N0X3N0cnVjdHVyZV9pc19lcXVhbDwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaXMtc3Vic2V0IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9pc19zdWJzZXQgKCkiPmdzdF9zdHJ1Y3R1cmVfaXNfc3Vic2V0PC9hPiAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdWJzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN1cGVyc2V0PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWNhbi1pbnRlcnNlY3QiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2Nhbl9pbnRlcnNlY3QgKCkiPmdzdF9zdHJ1Y3R1cmVfY2FuX2ludGVyc2VjdDwvYT4gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3QxPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3QyPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWludGVyc2VjdCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfaW50ZXJzZWN0ICgpIj5nc3Rfc3RydWN0dXJlX2ludGVyc2VjdDwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0MTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0MjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1oYXMtZmllbGQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2lkX2hhc19maWVsZCAoKSI+Z3N0X3N0cnVjdHVyZV9pZF9oYXNfZmllbGQ8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IGZpZWxkPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWlkLWhhcy1maWVsZC10eXBlZCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfaWRfaGFzX2ZpZWxkX3R5cGVkICgpIj5nc3Rfc3RydWN0dXJlX2lkX2hhc19maWVsZF90eXBlZDwvYT4gICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gZmllbGQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LWJvb2xlYW4iIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldF9ib29sZWFuICgpIj5nc3Rfc3RydWN0dXJlX2dldF9ib29sZWFuPC9hPiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpZWxkbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtaW50IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9nZXRfaW50ICgpIj5nc3Rfc3RydWN0dXJlX2dldF9pbnQ8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpZWxkbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LXVpbnQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldF91aW50ICgpIj5nc3Rfc3RydWN0dXJlX2dldF91aW50PC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpZWxkbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtZG91YmxlIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9nZXRfZG91YmxlICgpIj5nc3Rfc3RydWN0dXJlX2dldF9kb3VibGU8L2E+ICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpZWxkbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOworY29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LXN0cmluZyIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoKSI+Z3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nPC9hPiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaWVsZG5hbWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LWRhdGUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldF9kYXRlICgpIj5nc3Rfc3RydWN0dXJlX2dldF9kYXRlPC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpZWxkbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURhdGUtYW5kLVRpbWUtRnVuY3Rpb25zLmh0bWwjR0RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRGF0ZTwvc3Bhbj48L2E+ICoqdmFsdWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LWRhdGUtdGltZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X2RhdGVfdGltZSAoKSI+Z3N0X3N0cnVjdHVyZV9nZXRfZGF0ZV90aW1lPC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaWVsZG5hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+ICoqdmFsdWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LWNsb2NrLXRpbWUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldF9jbG9ja190aW1lICgpIj5nc3Rfc3RydWN0dXJlX2dldF9jbG9ja190aW1lPC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpZWxkbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LWVudW0iIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldF9lbnVtICgpIj5nc3Rfc3RydWN0dXJlX2dldF9lbnVtPC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpZWxkbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gZW51bXR5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1mcmFjdGlvbiIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X2ZyYWN0aW9uICgpIj5nc3Rfc3RydWN0dXJlX2dldF9mcmFjdGlvbjwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpZWxkbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAqdmFsdWVfbnVtZXJhdG9yPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICp2YWx1ZV9kZW5vbWluYXRvcjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1tYXAtaW4tcGxhY2UiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX21hcF9pbl9wbGFjZSAoKSI+Z3N0X3N0cnVjdHVyZV9tYXBfaW5fcGxhY2U8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZU1hcEZ1bmMiIHRpdGxlPSJHc3RTdHJ1Y3R1cmVNYXBGdW5jICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlTWFwRnVuYzwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOworY29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtbnRoLWZpZWxkLW5hbWUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX250aF9maWVsZF9uYW1lICgpIj5nc3Rfc3RydWN0dXJlX250aF9maWVsZF9uYW1lPC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtc2V0LXBhcmVudC1yZWZjb3VudCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfc2V0X3BhcmVudF9yZWZjb3VudCAoKSI+Z3N0X3N0cnVjdHVyZV9zZXRfcGFyZW50X3JlZmNvdW50PC9hPiAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAqcmVmY291bnQ8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtdG8tc3RyaW5nIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKCkiPmdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nPC9hPiAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICogICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZnJvbS1zdHJpbmciIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nICgpIj5nc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nPC9hPiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpzdHJpbmc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKmVuZDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1maXhhdGUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2ZpeGF0ZSAoKSI+Z3N0X3N0cnVjdHVyZV9maXhhdGU8L2E+ICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1maXhhdGUtZmllbGQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZCAoKSI+Z3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGQ8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8c3BhbiBjbGFzcz0idHlwZSI+Y2hhcjwvc3Bhbj4gKmZpZWxkX25hbWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZml4YXRlLWZpZWxkLW5lYXJlc3QtaW50IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9pbnQgKCkiPmdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfaW50PC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPHNwYW4gY2xhc3M9InR5cGUiPmNoYXI8L3NwYW4+ICpmaWVsZF9uYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj5pbnQ8L3NwYW4+IHRhcmdldDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1maXhhdGUtZmllbGQtbmVhcmVzdC1kb3VibGUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2RvdWJsZSAoKSI+Z3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9kb3VibGU8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8c3BhbiBjbGFzcz0idHlwZSI+Y2hhcjwvc3Bhbj4gKmZpZWxkX25hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPmRvdWJsZTwvc3Bhbj4gdGFyZ2V0PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZC1uZWFyZXN0LWZyYWN0aW9uIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9mcmFjdGlvbiAoKSI+Z3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9mcmFjdGlvbjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxzcGFuIGNsYXNzPSJ0eXBlIj5jaGFyPC9zcGFuPiAqZmllbGRfbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiB0YXJnZXRfbnVtZXJhdG9yPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IHRhcmdldF9kZW5vbWluYXRvcjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1maXhhdGUtZmllbGQtYm9vbGVhbiIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX2Jvb2xlYW4gKCkiPmdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX2Jvb2xlYW48L2E+ICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPHNwYW4gY2xhc3M9InR5cGUiPmNoYXI8L3NwYW4+ICpmaWVsZF9uYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gdGFyZ2V0PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZC1zdHJpbmciIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9zdHJpbmcgKCkiPmdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX3N0cmluZzwvYT4gICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPHNwYW4gY2xhc3M9InR5cGUiPmNoYXI8L3NwYW4+ICpmaWVsZF9uYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhcmdldDwvY29kZT48L2VtPik7Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK0EgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gaXMgYSBjb2xsZWN0aW9uIG9mIGtleS92YWx1ZSBwYWlycy4gVGhlIGtleXMgYXJlIGV4cHJlc3NlZAorYXMgR1F1YXJrcyBhbmQgdGhlIHZhbHVlcyBjYW4gYmUgb2YgYW55IEdUeXBlLgorPC9wPgorPHA+CitJbiBhZGRpdGlvbiB0byB0aGUga2V5L3ZhbHVlIHBhaXJzLCBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IGFsc28gaGFzIGEgbmFtZS4gVGhlIG5hbWUKK3N0YXJ0cyB3aXRoIGEgbGV0dGVyIGFuZCBjYW4gYmUgZm9sbGVkIGJ5IGxldHRlcnMsIG51bWJlcnMgYW5kIGFueSBvZiAiLy1fLjoiLgorPC9wPgorPHA+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiBpcyB1c2VkIGJ5IHZhcmlvdXMgR1N0cmVhbWVyIHN1YnN5c3RlbXMgdG8gc3RvcmUgaW5mb3JtYXRpb24KK2luIGEgZmxleGlibGUgYW5kIGV4dGVuc2libGUgd2F5LiBBIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IGRvZXMgbm90IGhhdmUgYSByZWZjb3VudAorYmVjYXVzZSBpdCB1c3VhbGx5IGlzIHBhcnQgb2YgYSBoaWdoZXIgbGV2ZWwgb2JqZWN0IHN1Y2ggYXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LiBJdAorcHJvdmlkZXMgYSBtZWFucyB0byBlbmZvcmNlIG11dGFiaWxpdHkgdXNpbmcgdGhlIHJlZmNvdW50IG9mIHRoZSBwYXJlbnQKK3dpdGggdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1zZXQtcGFyZW50LXJlZmNvdW50IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9zZXRfcGFyZW50X3JlZmNvdW50ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdHJ1Y3R1cmVfc2V0X3BhcmVudF9yZWZjb3VudCgpPC9jb2RlPjwvYT4gbWV0aG9kLgorPC9wPgorPHA+CitBIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IGNhbiBiZSBjcmVhdGVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWVtcHR5LW5ldyIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZW1wdHlfbmV3ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdHJ1Y3R1cmVfZW1wdHlfbmV3KCk8L2NvZGU+PC9hPiBvcgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLW5ldyIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfbmV3ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdHJ1Y3R1cmVfbmV3KCk8L2NvZGU+PC9hPiwgd2hpY2ggYm90aCB0YWtlIGEgbmFtZSBhbmQgYW4gb3B0aW9uYWwgc2V0IG9mCitrZXkvdmFsdWUgcGFpcnMgYWxvbmcgd2l0aCB0aGUgdHlwZXMgb2YgdGhlIHZhbHVlcy4KKzwvcD4KKzxwPgorRmllbGQgdmFsdWVzIGNhbiBiZSBjaGFuZ2VkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXNldC12YWx1ZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlKCk8L2NvZGU+PC9hPiBvcgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXNldCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfc2V0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdHJ1Y3R1cmVfc2V0KCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxwPgorRmllbGQgdmFsdWVzIGNhbiBiZSByZXRyaWV2ZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LXZhbHVlIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUoKTwvY29kZT48L2E+IG9yIHRoZSBtb3JlCitjb252ZW5pZW50IGdzdF9zdHJ1Y3R1cmVfZ2V0XyooKSBmdW5jdGlvbnMuCis8L3A+Cis8cD4KK0ZpZWxkcyBjYW4gYmUgcmVtb3ZlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1yZW1vdmUtZmllbGQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCgpPC9jb2RlPjwvYT4gb3IKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1yZW1vdmUtZmllbGRzIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkcygpPC9jb2RlPjwvYT4uCis8L3A+Cis8cD4KK1N0cmluZ3MgaW4gc3RydWN0dXJlcyBtdXN0IGJlIEFTQ0lJIG9yIFVURi04IGVuY29kZWQuIE90aGVyIGVuY29kaW5ncyBhcmUKK25vdCBhbGxvd2VkLiBTdHJpbmdzIG11c3Qgbm90IGJlIGVtcHR5IGVpdGhlciwgYnV0IG1heSBiZSBOVUxMLgorPC9wPgorPHA+CitMYXN0IHJldmlld2VkIG9uIDIwMDktMDYtMDggKDAuMTAuMjMpCis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFN0cnVjdHVyZSI+PC9hPjxoMz5zdHJ1Y3QgR3N0U3RydWN0dXJlPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0U3RydWN0dXJlIHsKKyAgR1R5cGUgdHlwZTsKK307Cis8L3ByZT4KKzxwPgorVGhlIEdzdFN0cnVjdHVyZSBvYmplY3QuIE1vc3QgZmllbGRzIGFyZSBwcml2YXRlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0U3RydWN0dXJlLnR5cGUiPjwvYT50eXBlPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgR1R5cGUgb2YgYSBzdHJ1Y3R1cmU8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0U3RydWN0dXJlRm9yZWFjaEZ1bmMiPjwvYT48aDM+R3N0U3RydWN0dXJlRm9yZWFjaEZ1bmMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgKCpHc3RTdHJ1Y3R1cmVGb3JlYWNoRnVuYykgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IGZpZWxkX2lkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZvcmVhY2giIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2ZvcmVhY2ggKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3N0cnVjdHVyZV9mb3JlYWNoKCk8L2NvZGU+PC9hPi4gVGhlIGZ1bmN0aW9uIG1heQorbm90IG1vZGlmeSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRfaWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gb2YgdGhlIGZpZWxkIG5hbWU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gb2YgdGhlIGZpZWxkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiB0aGUgZm9yZWFjaCBvcGVyYXRpb24gc2hvdWxkIGNvbnRpbnVlLCBGQUxTRSBpZgordGhlIGZvcmVhY2ggb3BlcmF0aW9uIHNob3VsZCBzdG9wIHdpdGggRkFMU0UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0U3RydWN0dXJlTWFwRnVuYyI+PC9hPjxoMz5Hc3RTdHJ1Y3R1cmVNYXBGdW5jICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICgqR3N0U3RydWN0dXJlTWFwRnVuYykgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUXVhcms8L3NwYW4+PC9hPiBmaWVsZF9pZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1tYXAtaW4tcGxhY2UiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX21hcF9pbl9wbGFjZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX21hcF9pbl9wbGFjZSgpPC9jb2RlPjwvYT4uIFRoZSBmdW5jdGlvbgorbWF5IG1vZGlmeSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRfaWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gb2YgdGhlIGZpZWxkIG5hbWU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gb2YgdGhlIGZpZWxkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiB0aGUgbWFwIG9wZXJhdGlvbiBzaG91bGQgY29udGludWUsIEZBTFNFIGlmCit0aGUgbWFwIG9wZXJhdGlvbiBzaG91bGQgc3RvcCB3aXRoIEZBTFNFLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZW1wdHktbmV3Ij48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfZW1wdHlfbmV3ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKiAgICAgIGdzdF9zdHJ1Y3R1cmVfZW1wdHlfbmV3ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZXMgYSBuZXcsIGVtcHR5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IHdpdGggdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+LgorPC9wPgorPHA+CitTZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXNldC1uYW1lIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9zZXRfbmFtZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX3NldF9uYW1lKCk8L2NvZGU+PC9hPiBmb3IgY29uc3RyYWludHMgb24gdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+IHBhcmFtZXRlci4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ3N0X3N0cnVjdHVyZV9mcmVlCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5uYW1lIG9mIG5ldyBzdHJ1Y3R1cmU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldywgZW1wdHkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWlkLWVtcHR5LW5ldyI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX2lkX2VtcHR5X25ldyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICogICAgICBnc3Rfc3RydWN0dXJlX2lkX2VtcHR5X25ldyAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gcXVhcms8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGVzIGEgbmV3LCBlbXB0eSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiB3aXRoIHRoZSBnaXZlbiBuYW1lIGFzIGEgR1F1YXJrLgorPC9wPgorPHA+CitGcmVlLWZ1bmN0aW9uOiBnc3Rfc3RydWN0dXJlX2ZyZWUKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWFyazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5uYW1lIG9mIG5ldyBzdHJ1Y3R1cmU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldywgZW1wdHkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc3RydWN0dXJlLW5ldyI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX25ldyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICogICAgICBnc3Rfc3RydWN0dXJlX25ldyAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmlyc3RmaWVsZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGVzIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IHdpdGggdGhlIGdpdmVuIG5hbWUuICBQYXJzZXMgdGhlCitsaXN0IG9mIHZhcmlhYmxlIGFyZ3VtZW50cyBhbmQgc2V0cyBmaWVsZHMgdG8gdGhlIHZhbHVlcyBsaXN0ZWQuCitWYXJpYWJsZSBhcmd1bWVudHMgc2hvdWxkIGJlIHBhc3NlZCBhcyBmaWVsZCBuYW1lLCBmaWVsZCB0eXBlLAorYW5kIHZhbHVlLiAgTGFzdCB2YXJpYWJsZSBhcmd1bWVudCBzaG91bGQgYmUgTlVMTC4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ3N0X3N0cnVjdHVyZV9mcmVlCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5uYW1lIG9mIG5ldyBzdHJ1Y3R1cmU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpcnN0ZmllbGQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bmFtZSBvZiBmaXJzdCBmaWVsZCB0byBzZXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hZGRpdGlvbmFsIGFyZ3VtZW50czwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1uZXctdmFsaXN0Ij48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfbmV3X3ZhbGlzdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICogICAgICBnc3Rfc3RydWN0dXJlX25ld192YWxpc3QgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmlyc3RmaWVsZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gdmFyYXJnczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gd2l0aCB0aGUgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT4uICBTdHJ1Y3R1cmUgZmllbGRzCithcmUgc2V0IGFjY29yZGluZyB0byB0aGUgdmFyYXJncyBpbiBhIG1hbm5lciBzaW1pbGFyIHRvCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtbmV3IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9uZXcgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3N0cnVjdHVyZV9uZXcoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitTZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXNldC1uYW1lIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9zZXRfbmFtZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX3NldF9uYW1lKCk8L2NvZGU+PC9hPiBmb3IgY29uc3RyYWludHMgb24gdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+IHBhcmFtZXRlci4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ3N0X3N0cnVjdHVyZV9mcmVlCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5uYW1lIG9mIG5ldyBzdHJ1Y3R1cmU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpcnN0ZmllbGQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bmFtZSBvZiBmaXJzdCBmaWVsZCB0byBzZXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhcmFyZ3M8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dmFyaWFibGUgYXJndW1lbnQgbGlzdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1pZC1uZXciPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9pZF9uZXcgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqICAgICAgZ3N0X3N0cnVjdHVyZV9pZF9uZXcgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IG5hbWVfcXVhcms8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUXVhcms8L3NwYW4+PC9hPiBmaWVsZF9xdWFyazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGVzIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IHdpdGggdGhlIGdpdmVuIG5hbWUgYXMgYSBHUXVhcmssIGZvbGxvd2VkIGJ5CitmaWVsZG5hbWUgcXVhcmssIEdUeXBlLCBhcmd1bWVudChzKSAidHJpcGxldHMiIGluIHRoZSBzYW1lIGZvcm1hdCBhcworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWlkLXNldCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfaWRfc2V0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdHJ1Y3R1cmVfaWRfc2V0KCk8L2NvZGU+PC9hPi4gQmFzaWNhbGx5IGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1lbXB0eS1uZXciIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2lkX2VtcHR5X25ldyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX2lkX2VtcHR5X25ldygpPC9jb2RlPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1zZXQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2lkX3NldCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX2lkX3NldCgpPC9jb2RlPjwvYT4uCis8L3A+Cis8cD4KK1RoZSBsYXN0IHZhcmlhYmxlIGFyZ3VtZW50IG11c3QgYmUgTlVMTCAob3IgMCkuCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdzdF9zdHJ1Y3R1cmVfZnJlZQorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWVfcXVhcms8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bmFtZSBvZiBuZXcgc3RydWN0dXJlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZF9xdWFyazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgR1F1YXJrIGZvciB0aGUgbmFtZSBvZiB0aGUgZmllbGQgdG8gc2V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dmFyaWFibGUgYXJndW1lbnRzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI0PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWNvcHkiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9jb3B5ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKiAgICAgIGdzdF9zdHJ1Y3R1cmVfY29weSAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0R1cGxpY2F0ZXMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiBhbmQgYWxsIGl0cyBmaWVsZHMgYW5kIHZhbHVlcy4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ3N0X3N0cnVjdHVyZV9mcmVlCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gdG8gZHVwbGljYXRlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWZyZWUiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9mcmVlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0ZyZWVzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gYW5kIGFsbCBpdHMgZmllbGRzIGFuZCB2YWx1ZXMuIFRoZSBzdHJ1Y3R1cmUgbXVzdCBub3QKK2hhdmUgYSBwYXJlbnQgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiB0byBmcmVlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIGlucHV0LiBEZWZhdWx0IGlzIHRyYW5zZmVyIG5vbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+aW48L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1nZXQtbmFtZSI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX2dldF9uYW1lICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCB0aGUgbmFtZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+IGFzIGEgc3RyaW5nLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmFtZSBvZiB0aGUgc3RydWN0dXJlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtaGFzLW5hbWUiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2hhc19uYW1lICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NoZWNrcyBpZiB0aGUgc3RydWN0dXJlIGhhcyB0aGUgZ2l2ZW4gbmFtZQorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c3RydWN0dXJlIG5hbWUgdG8gY2hlY2sgZm9yPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPiBtYXRjaGVzIHRoZSBuYW1lIG9mIHRoZSBzdHJ1Y3R1cmUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1zZXQtbmFtZSI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX3NldF9uYW1lICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X25hbWUgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0cyB0aGUgbmFtZSBvZiB0aGUgc3RydWN0dXJlIHRvIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPi4gIFRoZSBzdHJpbmcKK3Byb3ZpZGVkIGlzIGNvcGllZCBiZWZvcmUgYmVpbmcgdXNlZC4gSXQgbXVzdCBub3QgYmUgZW1wdHksIHN0YXJ0IHdpdGggYQorbGV0dGVyIGFuZCBjYW4gYmUgZm9sbG93ZWQgYnkgbGV0dGVycywgbnVtYmVycyBhbmQgYW55IG9mICIvLV8uOiIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3IG5hbWUgb2YgdGhlIHN0cnVjdHVyZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZ2V0LW5hbWUtaWQiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9nZXRfbmFtZV9pZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1F1YXJrPC9zcGFuPjwvYT4gICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWVfaWQgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCB0aGUgbmFtZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+IGFzIGEgR1F1YXJrLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcXVhcmsgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBzdHJ1Y3R1cmUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1pZC1nZXQiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9pZF9nZXQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9pZF9nZXQgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gZmlyc3RfZmllbGRfaWQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUGFyc2VzIHRoZSB2YXJpYWJsZSBhcmd1bWVudHMgYW5kIHJlYWRzIGZpZWxkcyBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT4gYWNjb3JkaW5nbHkuCitWYXJpYWJsZSBhcmd1bWVudHMgc2hvdWxkIGJlIGluIHRoZSBmb3JtIGZpZWxkIGlkIHF1YXJrLCBmaWVsZCB0eXBlCisoYXMgYSBHVHlwZSksIHBvaW50ZXIocykgdG8gYSB2YXJpYWJsZShzKSB0byBob2xkIHRoZSByZXR1cm4gdmFsdWUocykuCitUaGUgbGFzdCB2YXJpYWJsZSBhcmd1bWVudCBzaG91bGQgYmUgTlVMTCAodGVjaG5pY2FsbHkgaXQgc2hvdWxkIGJlIGEKKzAgcXVhcmssIGJ1dCB3ZSByZXF1aXJlIE5VTEwgc28gY29tcGlsZXJzIHRoYXQgc3VwcG9ydCBpdCBjYW4gY2hlY2sgZm9yCit0aGUgTlVMTCB0ZXJtaW5hdG9yIGFuZCB3YXJuIGlmIGl0J3Mgbm90IHRoZXJlKS4KKzwvcD4KKzxwPgorVGhpcyBmdW5jdGlvbiBpcyBqdXN0IGxpa2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdHJ1Y3R1cmVfZ2V0KCk8L2NvZGU+PC9hPiBvbmx5IHRoYXQgaXQgaXMgc2xpZ2h0bHkKK21vcmUgZWZmaWNpZW50IHNpbmNlIGl0IHNhdmVzIHRoZSBzdHJpbmctdG8tcXVhcmsgbG9va3VwIGluIHRoZSBnbG9iYWwKK3F1YXJrIGhhc2h0YWJsZS4KKzwvcD4KKzxwPgorRm9yIHJlZmNvdW50ZWQgKG1pbmkpb2JqZWN0cyB5b3Ugd2lsbCBhY3F1aXJlIHlvdXIgb3duIHJlZmVyZW5jZSB3aGljaAoreW91IG11c3QgcmVsZWFzZSB3aXRoIGEgc3VpdGFibGUgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5fdW5yZWYoKTwvY29kZT4gd2hlbiBubyBsb25nZXIgbmVlZGVkLiBGb3IKK3N0cmluZ3MgYW5kIGJveGVkIHR5cGVzIHlvdSB3aWxsIGFjcXVpcmUgYSBjb3B5IHdoaWNoIHlvdSB3aWxsIG5lZWQgdG8KK3JlbGVhc2Ugd2l0aCBlaXRoZXIgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1NZW1vcnktQWxsb2NhdGlvbi5odG1sI2ctZnJlZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX2ZyZWUoKTwvY29kZT48L2E+IG9yIHRoZSBzdWl0YWJsZSBmdW5jdGlvbiBmb3IgdGhlIGJveGVkIHR5cGUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zmlyc3RfZmllbGRfaWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHF1YXJrIG9mIHRoZSBmaXJzdCBmaWVsZCB0byByZWFkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dmFyaWFibGUgYXJndW1lbnRzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+RkFMU0UgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSByZWFkaW5nIGFueSBvZiB0aGUgZmllbGRzIChlLmcuCitiZWNhdXNlIHRoZSBmaWVsZCByZXF1ZXN0ZWQgZGlkIG5vdCBleGlzdCwgb3Igd2FzIG9mIGEgdHlwZSBvdGhlcgordGhhbiB0aGUgdHlwZSBzcGVjaWZpZWQpLCBvdGhlcndpc2UgVFJVRS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI0PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWlkLWdldC12YWxpc3QiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsaXN0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbGlzdCAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IGZpcnN0X2ZpZWxkX2lkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52YV9saXN0PC9zcGFuPiBhcmdzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUGFyc2VzIHRoZSB2YXJpYWJsZSBhcmd1bWVudHMgYW5kIHJlYWRzIGZpZWxkcyBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT4gYWNjb3JkaW5nbHkuCit2YWxpc3QtdmFyaWFudCBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaWQtZ2V0IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3N0cnVjdHVyZV9pZF9nZXQoKTwvY29kZT48L2E+LiBMb29rIGF0IHRoZSBkb2N1bWVudGF0aW9uIG9mCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaWQtZ2V0IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3N0cnVjdHVyZV9pZF9nZXQoKTwvY29kZT48L2E+IGZvciBtb3JlIGRldGFpbHMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zmlyc3RfZmllbGRfaWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHF1YXJrIG9mIHRoZSBmaXJzdCBmaWVsZCB0byByZWFkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hcmdzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnZhcmlhYmxlIGFyZ3VtZW50czwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUsIG9yIEZBTFNFIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gcmVhZGluZyBhbnkgb2YgdGhlIGZpZWxkczwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtaWQtZ2V0LXZhbHVlIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdWYWx1ZTwvc3Bhbj48L2E+ICogICAgICBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUXVhcms8L3NwYW4+PC9hPiBmaWVsZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIHdpdGggR1F1YXJrIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZDwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUXVhcms8L3NwYW4+PC9hPiBvZiB0aGUgZmllbGQgdG8gZ2V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lCitpZGVudGlmaWVyLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtaWQtc2V0LXZhbHVlIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IGZpZWxkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXRzIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBHUXVhcmsgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpZWxkPC9jb2RlPjwvZW0+IHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPi4gIElmIHRoZSBmaWVsZAorZG9lcyBub3QgZXhpc3QsIGl0IGlzIGNyZWF0ZWQuICBJZiB0aGUgZmllbGQgZXhpc3RzLCB0aGUgcHJldmlvdXMKK3ZhbHVlIGlzIHJlcGxhY2VkIGFuZCBmcmVlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gcmVwcmVzZW50aW5nIGEgZmllbGQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXcgdmFsdWUgb2YgdGhlIGZpZWxkPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1pZC10YWtlLXZhbHVlIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfaWRfdGFrZV92YWx1ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2lkX3Rha2VfdmFsdWUgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUXVhcms8L3NwYW4+PC9hPiBmaWVsZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0cyB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gR1F1YXJrIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZDwvY29kZT48L2VtPiB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4uICBJZiB0aGUgZmllbGQKK2RvZXMgbm90IGV4aXN0LCBpdCBpcyBjcmVhdGVkLiAgSWYgdGhlIGZpZWxkIGV4aXN0cywgdGhlIHByZXZpb3VzCit2YWx1ZSBpcyByZXBsYWNlZCBhbmQgZnJlZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IHJlcHJlc2VudGluZyBhIGZpZWxkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3IHZhbHVlIG9mIHRoZSBmaWVsZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZ2V0Ij48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfZ2V0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0ICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8c3BhbiBjbGFzcz0idHlwZSI+Y2hhcjwvc3Bhbj4gKmZpcnN0X2ZpZWxkbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitQYXJzZXMgdGhlIHZhcmlhYmxlIGFyZ3VtZW50cyBhbmQgcmVhZHMgZmllbGRzIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPiBhY2NvcmRpbmdseS4KK1ZhcmlhYmxlIGFyZ3VtZW50cyBzaG91bGQgYmUgaW4gdGhlIGZvcm0gZmllbGQgbmFtZSwgZmllbGQgdHlwZQorKGFzIGEgR1R5cGUpLCBwb2ludGVyKHMpIHRvIGEgdmFyaWFibGUocykgdG8gaG9sZCB0aGUgcmV0dXJuIHZhbHVlKHMpLgorVGhlIGxhc3QgdmFyaWFibGUgYXJndW1lbnQgc2hvdWxkIGJlIE5VTEwuCis8L3A+Cis8cD4KK0ZvciByZWZjb3VudGVkIChtaW5pKW9iamVjdHMgeW91IHdpbGwgYWNxdWlyZSB5b3VyIG93biByZWZlcmVuY2Ugd2hpY2gKK3lvdSBtdXN0IHJlbGVhc2Ugd2l0aCBhIHN1aXRhYmxlIDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+X3VucmVmKCk8L2NvZGU+IHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC4gRm9yCitzdHJpbmdzIGFuZCBib3hlZCB0eXBlcyB5b3Ugd2lsbCBhY3F1aXJlIGEgY29weSB3aGljaCB5b3Ugd2lsbCBuZWVkIHRvCityZWxlYXNlIHdpdGggZWl0aGVyIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItTWVtb3J5LUFsbG9jYXRpb24uaHRtbCNnLWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19mcmVlKCk8L2NvZGU+PC9hPiBvciB0aGUgc3VpdGFibGUgZnVuY3Rpb24gZm9yIHRoZSBib3hlZCB0eXBlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpcnN0X2ZpZWxkbmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmFtZSBvZiB0aGUgZmlyc3QgZmllbGQgdG8gcmVhZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnZhcmlhYmxlIGFyZ3VtZW50czwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkZBTFNFIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gcmVhZGluZyBhbnkgb2YgdGhlIGZpZWxkcyAoZS5nLgorYmVjYXVzZSB0aGUgZmllbGQgcmVxdWVzdGVkIGRpZCBub3QgZXhpc3QsIG9yIHdhcyBvZiBhIHR5cGUgb3RoZXIKK3RoYW4gdGhlIHR5cGUgc3BlY2lmaWVkKSwgb3RoZXJ3aXNlIFRSVUUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1nZXQtdmFsaXN0Ij48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbGlzdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF92YWxpc3QgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPHNwYW4gY2xhc3M9InR5cGUiPmNoYXI8L3NwYW4+ICpmaXJzdF9maWVsZG5hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZhX2xpc3Q8L3NwYW4+IGFyZ3M8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitQYXJzZXMgdGhlIHZhcmlhYmxlIGFyZ3VtZW50cyBhbmQgcmVhZHMgZmllbGRzIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPiBhY2NvcmRpbmdseS4KK3ZhbGlzdC12YXJpYW50IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX2dldCgpPC9jb2RlPjwvYT4uIExvb2sgYXQgdGhlIGRvY3VtZW50YXRpb24gb2YKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX2dldCgpPC9jb2RlPjwvYT4gZm9yIG1vcmUgZGV0YWlscy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maXJzdF9maWVsZG5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5hbWUgb2YgdGhlIGZpcnN0IGZpZWxkIHRvIHJlYWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFyZ3M8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dmFyaWFibGUgYXJndW1lbnRzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSwgb3IgRkFMU0UgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSByZWFkaW5nIGFueSBvZiB0aGUgZmllbGRzPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1nZXQtdmFsdWUiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKiAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaWVsZG5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCB3aXRoIG5hbWUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpZWxkbmFtZTwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZG5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIGdldDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gY29ycmVzcG9uZGluZyB0byB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc3RydWN0dXJlLXNldC12YWx1ZSI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmllbGRuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXRzIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZDwvY29kZT48L2VtPiB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4uICBJZiB0aGUgZmllbGQKK2RvZXMgbm90IGV4aXN0LCBpdCBpcyBjcmVhdGVkLiAgSWYgdGhlIGZpZWxkIGV4aXN0cywgdGhlIHByZXZpb3VzCit2YWx1ZSBpcyByZXBsYWNlZCBhbmQgZnJlZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRuYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuYW1lIG9mIHRoZSBmaWVsZCB0byBzZXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXcgdmFsdWUgb2YgdGhlIGZpZWxkPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS10YWtlLXZhbHVlIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfdGFrZV92YWx1ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3Rha2VfdmFsdWUgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmllbGRuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXRzIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZDwvY29kZT48L2VtPiB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4uICBJZiB0aGUgZmllbGQKK2RvZXMgbm90IGV4aXN0LCBpdCBpcyBjcmVhdGVkLiAgSWYgdGhlIGZpZWxkIGV4aXN0cywgdGhlIHByZXZpb3VzCit2YWx1ZSBpcyByZXBsYWNlZCBhbmQgZnJlZWQuIFRoZSBmdW5jdGlvbiB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZG5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIHNldDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5ldyB2YWx1ZSBvZiB0aGUgZmllbGQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMxPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc3RydWN0dXJlLXNldCI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX3NldCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldCAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmllbGRuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1BhcnNlcyB0aGUgdmFyaWFibGUgYXJndW1lbnRzIGFuZCBzZXRzIGZpZWxkcyBhY2NvcmRpbmdseS4KK1ZhcmlhYmxlIGFyZ3VtZW50cyBzaG91bGQgYmUgaW4gdGhlIGZvcm0gZmllbGQgbmFtZSwgZmllbGQgdHlwZQorKGFzIGEgR1R5cGUpLCB2YWx1ZShzKS4gIFRoZSBsYXN0IHZhcmlhYmxlIGFyZ3VtZW50IHNob3VsZCBiZSBOVUxMLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpZWxkbmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmFtZSBvZiB0aGUgZmllbGQgdG8gc2V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dmFyaWFibGUgYXJndW1lbnRzPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1zZXQtdmFsaXN0Ij48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbGlzdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF92YWxpc3QgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmllbGRuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52YV9saXN0PC9zcGFuPiB2YXJhcmdzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgordmFfbGlzdCBmb3JtIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1zZXQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX3NldCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX3NldCgpPC9jb2RlPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRuYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuYW1lIG9mIHRoZSBmaWVsZCB0byBzZXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhcmFyZ3M8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dmFyaWFibGUgYXJndW1lbnRzPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1pZC1zZXQiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9pZF9zZXQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9pZF9zZXQgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gZmllbGRuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0lkZW50aWNhbCB0byBnc3Rfc3RydWN0dXJlX3NldCwgZXhjZXB0IHRoYXQgZmllbGQgbmFtZXMgYXJlCitwYXNzZWQgdXNpbmcgdGhlIEdRdWFyayBmb3IgdGhlIGZpZWxkIG5hbWUuIFRoaXMgYWxsb3dzIG1vcmUgZWZmaWNpZW50CitzZXR0aW5nIG9mIHRoZSBzdHJ1Y3R1cmUgaWYgdGhlIGNhbGxlciBhbHJlYWR5IGtub3dzIHRoZSBhc3NvY2lhdGVkCitxdWFyayB2YWx1ZXMuCitUaGUgbGFzdCB2YXJpYWJsZSBhcmd1bWVudCBtdXN0IGJlIE5VTEwuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRuYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBHUXVhcmsgZm9yIHRoZSBuYW1lIG9mIHRoZSBmaWVsZCB0byBzZXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD52YXJpYWJsZSBhcmd1bWVudHM8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjEwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWlkLXNldC12YWxpc3QiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsaXN0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbGlzdCAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IGZpZWxkbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gdmFyYXJnczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK3ZhX2xpc3QgZm9ybSBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaWQtc2V0IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9pZF9zZXQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3N0cnVjdHVyZV9pZF9zZXQoKTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpZWxkbmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmFtZSBvZiB0aGUgZmllbGQgdG8gc2V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YXJhcmdzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnZhcmlhYmxlIGFyZ3VtZW50czwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtcmVtb3ZlLWZpZWxkIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaWVsZG5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZW1vdmVzIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLiAgSWYgdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuCituYW1lIGRvZXMgbm90IGV4aXN0LCB0aGUgc3RydWN0dXJlIGlzIHVuY2hhbmdlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZG5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIHJlbW92ZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtcmVtb3ZlLWZpZWxkcyI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZHMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpZWxkbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZW1vdmVzIHRoZSBmaWVsZHMgd2l0aCB0aGUgZ2l2ZW4gbmFtZXMuIElmIGEgZmllbGQgZG9lcyBub3QgZXhpc3QsIHRoZQorYXJndW1lbnQgaXMgaWdub3JlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZG5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIHJlbW92ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPk5VTEwtdGVybWluYXRlZCBsaXN0IG9mIG1vcmUgZmllbGRuYW1lcyB0byByZW1vdmU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc3RydWN0dXJlLXJlbW92ZS1maWVsZHMtdmFsaXN0Ij48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkc192YWxpc3QgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzX3ZhbGlzdCAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpZWxkbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gdmFyYXJnczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK3ZhX2xpc3QgZm9ybSBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtcmVtb3ZlLWZpZWxkcyIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkcyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZHMoKTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpZWxkbmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmFtZSBvZiB0aGUgZmllbGQgdG8gcmVtb3ZlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YXJhcmdzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPk5VTEwtdGVybWluYXRlZCBsaXN0IG9mIG1vcmUgZmllbGRuYW1lcyB0byByZW1vdmU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc3RydWN0dXJlLXJlbW92ZS1hbGwtZmllbGRzIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2FsbF9maWVsZHMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfYWxsX2ZpZWxkcyAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVtb3ZlcyBhbGwgZmllbGRzIGluIGEgR3N0U3RydWN0dXJlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZ2V0LWZpZWxkLXR5cGUiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9nZXRfZmllbGRfdHlwZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1R5cGU8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ZpZWxkX3R5cGUgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaWVsZG5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitGaW5kcyB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgYW5kIHJldHVybnMgdGhlIHR5cGUgb2YgdGhlCit2YWx1ZSBpdCBjb250YWlucy4gIElmIHRoZSBmaWVsZCBpcyBub3QgZm91bmQsIEdfVFlQRV9JTlZBTElEIGlzCityZXR1cm5lZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZG5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5hbWUgb2YgdGhlIGZpZWxkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBvZiB0aGUgZmllbGQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWZvcmVhY2giPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9mb3JlYWNoICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZm9yZWFjaCAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZUZvcmVhY2hGdW5jIiB0aXRsZT0iR3N0U3RydWN0dXJlRm9yZWFjaEZ1bmMgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmVGb3JlYWNoRnVuYzwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gb25jZSBmb3IgZWFjaCBmaWVsZCBpbiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4uIFRoZQorZnVuY3Rpb24gbXVzdCBub3QgbW9kaWZ5IHRoZSBmaWVsZHMuIEFsc28gc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1tYXAtaW4tcGxhY2UiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX21hcF9pbl9wbGFjZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX21hcF9pbl9wbGFjZSgpPC9jb2RlPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZmllbGQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoZSBjYWxsYmFjayBpcyB2YWxpZCBvbmx5IGR1cmluZyB0aGUgY2FsbCB0byB0aGUgbWV0aG9kLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNjb3BlIGNhbGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wcml2YXRlIGRhdGEuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoaXMgcGFyYW1ldGVyIGlzIGEgJ3VzZXJfZGF0YScsIGZvciBjYWxsYmFja3M7IG1hbnkgYmluZGluZ3MgY2FuIHBhc3MgTlVMTCBoZXJlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmNsb3N1cmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBzdXBwbGllZCBmdW5jdGlvbiByZXR1cm5zIFRSVUUgRm9yIGVhY2ggb2YgdGhlIGZpZWxkcywKK0ZBTFNFIG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc3RydWN0dXJlLW4tZmllbGRzIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfbl9maWVsZHMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX25fZmllbGRzICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgdGhlIG51bWJlciBvZiBmaWVsZHMgaW4gdGhlIHN0cnVjdHVyZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG51bWJlciBvZiBmaWVsZHMgaW4gdGhlIHN0cnVjdHVyZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtaGFzLWZpZWxkIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaWVsZG5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDaGVjayBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+IGNvbnRhaW5zIGEgZmllbGQgbmFtZWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpZWxkbmFtZTwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZG5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5hbWUgb2YgYSBmaWVsZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHN0cnVjdHVyZSBjb250YWlucyBhIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWhhcy1maWVsZC10eXBlZCI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX2hhc19maWVsZF90eXBlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2hhc19maWVsZF90eXBlZCAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmllbGRuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2sgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPiBjb250YWlucyBhIGZpZWxkIG5hbWVkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZG5hbWU8L2NvZGU+PC9lbT4gYW5kIHdpdGggR1R5cGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRuYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuYW1lIG9mIGEgZmllbGQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHR5cGUgb2YgYSB2YWx1ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHN0cnVjdHVyZSBjb250YWlucyBhIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIHR5cGU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWlzLWVxdWFsIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfaXNfZXF1YWwgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9pc19lcXVhbCAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlMTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlMjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1Rlc3RzIGlmIHRoZSB0d28gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gYXJlIGVxdWFsLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSB0d28gc3RydWN0dXJlcyBoYXZlIHRoZSBzYW1lIG5hbWUgYW5kIGZpZWxkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtaXMtc3Vic2V0Ij48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfaXNfc3Vic2V0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfaXNfc3Vic2V0ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN1YnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3VwZXJzZXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDaGVja3MgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN1YnNldDwvY29kZT48L2VtPiBpcyBhIHN1YnNldCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3VwZXJzZXQ8L2NvZGU+PC9lbT4sIGkuZS4gaGFzIHRoZSBzYW1lCitzdHJ1Y3R1cmUgbmFtZSBhbmQgZm9yIGFsbCBmaWVsZHMgdGhhdCBhcmUgZXhpc3RpbmcgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN1cGVyc2V0PC9jb2RlPjwvZW0+LAorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN1YnNldDwvY29kZT48L2VtPiBoYXMgYSB2YWx1ZSB0aGF0IGlzIGEgc3Vic2V0IG9mIHRoZSB2YWx1ZSBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3VwZXJzZXQ8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3Vic2V0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3VwZXJzZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBwb3RlbnRpYWxseSBncmVhdGVyIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdWJzZXQ8L2NvZGU+PC9lbT4gaXMgYSBzdWJzZXQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN1cGVyc2V0PC9jb2RlPjwvZW0+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjM1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWNhbi1pbnRlcnNlY3QiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9jYW5faW50ZXJzZWN0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfY2FuX2ludGVyc2VjdCAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdDE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdDI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitUcmllcyBpbnRlcnNlY3RpbmcgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdDE8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3QyPC9jb2RlPjwvZW0+IGFuZCByZXBvcnRzIHdoZXRoZXIgdGhlIHJlc3VsdAord291bGQgbm90IGJlIGVtcHR5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdDE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3QyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgaW50ZXJzZWN0aW9uIHdvdWxkIG5vdCBiZSBlbXB0eTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtaW50ZXJzZWN0Ij48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfaW50ZXJzZWN0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKiAgICAgIGdzdF9zdHJ1Y3R1cmVfaW50ZXJzZWN0ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdDE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdDI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitJbnRlcmVzZWN0cyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0MTwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdDI8L2NvZGU+PC9lbT4gYW5kIHJldHVybnMgdGhlIGludGVyc2VjdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3QxPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0MjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5JbnRlcnNlY3Rpb24gb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdDE8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3QyPC9jb2RlPjwvZW0+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjM1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWlkLWhhcy1maWVsZCI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX2lkX2hhc19maWVsZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2lkX2hhc19maWVsZCAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUXVhcms8L3NwYW4+PC9hPiBmaWVsZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NoZWNrIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT4gY29udGFpbnMgYSBmaWVsZCBuYW1lZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGQ8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IG9mIHRoZSBmaWVsZCBuYW1lPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiB0aGUgc3RydWN0dXJlIGNvbnRhaW5zIGEgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtaWQtaGFzLWZpZWxkLXR5cGVkIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfaWRfaGFzX2ZpZWxkX3R5cGVkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfaWRfaGFzX2ZpZWxkX3R5cGVkICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IGZpZWxkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2sgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPiBjb250YWlucyBhIGZpZWxkIG5hbWVkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZDwvY29kZT48L2VtPiBhbmQgd2l0aCBHVHlwZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gb2YgdGhlIGZpZWxkIG5hbWU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHR5cGUgb2YgYSB2YWx1ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHN0cnVjdHVyZSBjb250YWlucyBhIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIHR5cGU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI2PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWdldC1ib29sZWFuIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfZ2V0X2Jvb2xlYW4gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfYm9vbGVhbiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpZWxkbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgdGhlIGJvb2xlYW4gcG9pbnRlZCB0byBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4gY29ycmVzcG9uZGluZyB0byB0aGUgdmFsdWUgb2YgdGhlCitnaXZlbiBmaWVsZC4gIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgdGhlIGZpZWxkIGV4aXN0cworYW5kIGhhcyB0aGUgY29ycmVjdCB0eXBlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpZWxkbmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmFtZSBvZiBhIGZpZWxkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IHRvIHNldC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHNldCBjb3JyZWN0bHkuIElmIHRoZXJlIHdhcyBubyBmaWVsZAord2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRuYW1lPC9jb2RlPjwvZW0+IG9yIHRoZSBleGlzdGluZyBmaWVsZCBkaWQgbm90IGNvbnRhaW4gYSBib29sZWFuLCB0aGlzCitmdW5jdGlvbiByZXR1cm5zIEZBTFNFLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZ2V0LWludCI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX2dldF9pbnQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfaW50ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpZWxkbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXRzIHRoZSBpbnQgcG9pbnRlZCB0byBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4gY29ycmVzcG9uZGluZyB0byB0aGUgdmFsdWUgb2YgdGhlCitnaXZlbiBmaWVsZC4gIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgdGhlIGZpZWxkIGV4aXN0cworYW5kIGhhcyB0aGUgY29ycmVjdCB0eXBlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpZWxkbmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmFtZSBvZiBhIGZpZWxkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gYW4gaW50IHRvIHNldC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHNldCBjb3JyZWN0bHkuIElmIHRoZXJlIHdhcyBubyBmaWVsZAord2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRuYW1lPC9jb2RlPjwvZW0+IG9yIHRoZSBleGlzdGluZyBmaWVsZCBkaWQgbm90IGNvbnRhaW4gYW4gaW50LCB0aGlzIGZ1bmN0aW9uCityZXR1cm5zIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1nZXQtdWludCI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX2dldF91aW50ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaWVsZG5hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXRzIHRoZSB1aW50IHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHZhbHVlIG9mIHRoZQorZ2l2ZW4gZmllbGQuICBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRoZSBmaWVsZCBleGlzdHMKK2FuZCBoYXMgdGhlIGNvcnJlY3QgdHlwZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZG5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5hbWUgb2YgYSBmaWVsZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBwb2ludGVyIHRvIGEgdWludCB0byBzZXQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSBzZXQgY29ycmVjdGx5LiBJZiB0aGVyZSB3YXMgbm8gZmllbGQKK3dpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpZWxkbmFtZTwvY29kZT48L2VtPiBvciB0aGUgZXhpc3RpbmcgZmllbGQgZGlkIG5vdCBjb250YWluIGEgdWludCwgdGhpcyBmdW5jdGlvbgorcmV0dXJucyA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZ2V0LWRvdWJsZSI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX2dldF9kb3VibGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfZG91YmxlICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpZWxkbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXRzIHRoZSBkb3VibGUgcG9pbnRlZCB0byBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4gY29ycmVzcG9uZGluZyB0byB0aGUgdmFsdWUgb2YgdGhlCitnaXZlbiBmaWVsZC4gIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgdGhlIGZpZWxkIGV4aXN0cworYW5kIGhhcyB0aGUgY29ycmVjdCB0eXBlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpZWxkbmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmFtZSBvZiBhIGZpZWxkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gYSBnZG91YmxlIHRvIHNldC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHNldCBjb3JyZWN0bHkuIElmIHRoZXJlIHdhcyBubyBmaWVsZAord2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRuYW1lPC9jb2RlPjwvZW0+IG9yIHRoZSBleGlzdGluZyBmaWVsZCBkaWQgbm90IGNvbnRhaW4gYSBkb3VibGUsIHRoaXMKK2Z1bmN0aW9uIHJldHVybnMgRkFMU0UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1nZXQtc3RyaW5nIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmllbGRuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRmluZHMgdGhlIGZpZWxkIGNvcnJlc3BvbmRpbmcgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpZWxkbmFtZTwvY29kZT48L2VtPiwgYW5kIHJldHVybnMgdGhlIHN0cmluZworY29udGFpbmVkIGluIHRoZSBmaWVsZCdzIHZhbHVlLiAgQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcKK3N1cmUgdGhlIGZpZWxkIGV4aXN0cyBhbmQgaGFzIHRoZSBjb3JyZWN0IHR5cGUuCis8L3A+Cis8cD4KK1RoZSBzdHJpbmcgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgYW5kIHJlbWFpbnMgdmFsaWQgdW50aWwgdGhlIG5leHQKK2NhbGwgdG8gYSBnc3Rfc3RydWN0dXJlXyooKSBmdW5jdGlvbiB3aXRoIHRoZSBnaXZlbiBzdHJ1Y3R1cmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRuYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuYW1lIG9mIGEgZmllbGQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gdGhlIHN0cmluZyBvciBOVUxMIHdoZW4gdGhlIGZpZWxkIGRpZCBub3QgZXhpc3QKK29yIGRpZCBub3QgY29udGFpbiBhIHN0cmluZy48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWdldC1kYXRlIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfZ2V0X2RhdGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfZGF0ZSAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpZWxkbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURhdGUtYW5kLVRpbWUtRnVuY3Rpb25zLmh0bWwjR0RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRGF0ZTwvc3Bhbj48L2E+ICoqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXRzIHRoZSBkYXRlIHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRhdGUgb2YgdGhlCitnaXZlbiBmaWVsZC4gIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgdGhlIGZpZWxkIGV4aXN0cworYW5kIGhhcyB0aGUgY29ycmVjdCB0eXBlLgorPC9wPgorPHA+CitPbiBzdWNjZXNzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPiB3aWxsIHBvaW50IHRvIGEgbmV3bHktYWxsb2NhdGVkIGNvcHkgb2YgdGhlIGRhdGUgd2hpY2gKK3Nob3VsZCBiZSBmcmVlZCB3aXRoIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRGF0ZS1hbmQtVGltZS1GdW5jdGlvbnMuaHRtbCNnLWRhdGUtZnJlZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX2RhdGVfZnJlZSgpPC9jb2RlPjwvYT4gd2hlbiBubyBsb25nZXIgbmVlZGVkIChub3RlOiB0aGlzIGlzCitpbmNvbnNpc3RlbnQgd2l0aCBlLmcuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtc3RyaW5nIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZygpPC9jb2RlPjwvYT4gd2hpY2ggZG9lc24ndCByZXR1cm4gYQorY29weSBvZiB0aGUgc3RyaW5nKS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZG5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5hbWUgb2YgYSBmaWVsZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBwb2ludGVyIHRvIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1EYXRlLWFuZC1UaW1lLUZ1bmN0aW9ucy5odG1sI0dEYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R0RhdGU8L3NwYW4+PC9hPiB0byBzZXQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPiBjYWxsZWUtYWxsb2NhdGVzXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHNldCBjb3JyZWN0bHkuIElmIHRoZXJlIHdhcyBubyBmaWVsZAord2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRuYW1lPC9jb2RlPjwvZW0+IG9yIHRoZSBleGlzdGluZyBmaWVsZCBkaWQgbm90IGNvbnRhaW4gYSBkYXRhLCB0aGlzIGZ1bmN0aW9uCityZXR1cm5zIEZBTFNFLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZ2V0LWRhdGUtdGltZSI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX2dldF9kYXRlX3RpbWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfZGF0ZV90aW1lICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpZWxkbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjR3N0RGF0ZVRpbWUiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gKip2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgdGhlIGRhdGV0aW1lIHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRhdGV0aW1lIG9mIHRoZQorZ2l2ZW4gZmllbGQuIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgdGhlIGZpZWxkIGV4aXN0cworYW5kIGhhcyB0aGUgY29ycmVjdCB0eXBlLgorPC9wPgorPHA+CitPbiBzdWNjZXNzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPiB3aWxsIHBvaW50IHRvIGEgcmVmZXJlbmNlIG9mIHRoZSBkYXRldGltZSB3aGljaAorc2hvdWxkIGJlIHVucmVmZmVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtdW5yZWYiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX3VucmVmICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9kYXRlX3RpbWVfdW5yZWYoKTwvY29kZT48L2E+IHdoZW4gbm8gbG9uZ2VyIG5lZWRlZAorKG5vdGU6IHRoaXMgaXMgaW5jb25zaXN0ZW50IHdpdGggZS5nLiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LXN0cmluZyIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoKTwvY29kZT48L2E+Cit3aGljaCBkb2Vzbid0IHJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZykuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRuYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuYW1lIG9mIGEgZmllbGQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgcG9pbnRlciB0byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHc3REYXRlVGltZSIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiB0byBzZXQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPiBjYWxsZWUtYWxsb2NhdGVzXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHNldCBjb3JyZWN0bHkuIElmIHRoZXJlIHdhcyBubyBmaWVsZAord2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRuYW1lPC9jb2RlPjwvZW0+IG9yIHRoZSBleGlzdGluZyBmaWVsZCBkaWQgbm90IGNvbnRhaW4gYSBkYXRhLCB0aGlzIGZ1bmN0aW9uCityZXR1cm5zIEZBTFNFLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZ2V0LWNsb2NrLXRpbWUiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9nZXRfY2xvY2tfdGltZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9jbG9ja190aW1lICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmllbGRuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgdGhlIGNsb2NrIHRpbWUgcG9pbnRlZCB0byBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4gY29ycmVzcG9uZGluZyB0byB0aGUgY2xvY2sgdGltZQorb2YgdGhlIGdpdmVuIGZpZWxkLiAgQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZSB0aGUgZmllbGQgZXhpc3RzCithbmQgaGFzIHRoZSBjb3JyZWN0IHR5cGUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRuYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuYW1lIG9mIGEgZmllbGQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgcG9pbnRlciB0byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRvIHNldC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHNldCBjb3JyZWN0bHkuIElmIHRoZXJlIHdhcyBubyBmaWVsZAord2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRuYW1lPC9jb2RlPjwvZW0+IG9yIHRoZSBleGlzdGluZyBmaWVsZCBkaWQgbm90IGNvbnRhaW4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiwgdGhpcworZnVuY3Rpb24gcmV0dXJucyBGQUxTRS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWdldC1lbnVtIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfZ2V0X2VudW0gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfZW51bSAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpZWxkbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gZW51bXR5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0cyB0aGUgaW50IHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHZhbHVlIG9mIHRoZQorZ2l2ZW4gZmllbGQuICBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRoZSBmaWVsZCBleGlzdHMsCitoYXMgdGhlIGNvcnJlY3QgdHlwZSBhbmQgdGhhdCB0aGUgZW51bXR5cGUgaXMgY29ycmVjdC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZG5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5hbWUgb2YgYSBmaWVsZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW51bXR5cGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGVudW0gdHlwZSBvZiBhIGZpZWxkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gYW4gaW50IHRvIHNldC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHNldCBjb3JyZWN0bHkuIElmIHRoZXJlIHdhcyBubyBmaWVsZAord2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRuYW1lPC9jb2RlPjwvZW0+IG9yIHRoZSBleGlzdGluZyBmaWVsZCBkaWQgbm90IGNvbnRhaW4gYW4gZW51bSBvZiB0aGUgZ2l2ZW4KK3R5cGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBGQUxTRS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWdldC1mcmFjdGlvbiI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX2dldF9mcmFjdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9mcmFjdGlvbiAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmllbGRuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICp2YWx1ZV9udW1lcmF0b3I8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gKnZhbHVlX2Rlbm9taW5hdG9yPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0cyB0aGUgaW50ZWdlcnMgcG9pbnRlZCB0byBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWVfbnVtZXJhdG9yPC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWVfZGVub21pbmF0b3I8L2NvZGU+PC9lbT4KK2NvcnJlc3BvbmRpbmcgdG8gdGhlIHZhbHVlIG9mIHRoZSBnaXZlbiBmaWVsZC4gIENhbGxlciBpcyByZXNwb25zaWJsZQorZm9yIG1ha2luZyBzdXJlIHRoZSBmaWVsZCBleGlzdHMgYW5kIGhhcyB0aGUgY29ycmVjdCB0eXBlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpZWxkbmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmFtZSBvZiBhIGZpZWxkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZV9udW1lcmF0b3I8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBwb2ludGVyIHRvIGFuIGludCB0byBzZXQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlX2Rlbm9taW5hdG9yPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgcG9pbnRlciB0byBhbiBpbnQgdG8gc2V0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiB0aGUgdmFsdWVzIGNvdWxkIGJlIHNldCBjb3JyZWN0bHkuIElmIHRoZXJlIHdhcyBubyBmaWVsZAord2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRuYW1lPC9jb2RlPjwvZW0+IG9yIHRoZSBleGlzdGluZyBmaWVsZCBkaWQgbm90IGNvbnRhaW4gYSBHc3RGcmFjdGlvbiwgdGhpcworZnVuY3Rpb24gcmV0dXJucyBGQUxTRS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc3RydWN0dXJlLW1hcC1pbi1wbGFjZSI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX21hcF9pbl9wbGFjZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3Rfc3RydWN0dXJlX21hcF9pbl9wbGFjZSAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmVNYXBGdW5jIiB0aXRsZT0iR3N0U3RydWN0dXJlTWFwRnVuYyAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZU1hcEZ1bmM8L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIG9uY2UgZm9yIGVhY2ggZmllbGQgaW4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+LiBJbgorY29udHJhc3QgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZvcmVhY2giIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2ZvcmVhY2ggKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3N0cnVjdHVyZV9mb3JlYWNoKCk8L2NvZGU+PC9hPiwgdGhlIGZ1bmN0aW9uIG1heSBtb2RpZnkgYnV0IG5vdCBkZWxldGUgdGhlCitmaWVsZHMuIFRoZSBzdHJ1Y3R1cmUgbXVzdCBiZSBtdXRhYmxlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGZpZWxkLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGUgY2FsbGJhY2sgaXMgdmFsaWQgb25seSBkdXJpbmcgdGhlIGNhbGwgdG8gdGhlIG1ldGhvZC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5zY29wZSBjYWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cHJpdmF0ZSBkYXRhLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGlzIHBhcmFtZXRlciBpcyBhICd1c2VyX2RhdGEnLCBmb3IgY2FsbGJhY2tzOyBtYW55IGJpbmRpbmdzIGNhbiBwYXNzIE5VTEwgaGVyZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5jbG9zdXJlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gcmV0dXJucyBUUlVFIEZvciBlYWNoIG9mIHRoZSBmaWVsZHMsCitGQUxTRSBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1udGgtZmllbGQtbmFtZSI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX250aF9maWVsZF9uYW1lICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgIGdzdF9zdHJ1Y3R1cmVfbnRoX2ZpZWxkX25hbWUgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0IHRoZSBuYW1lIG9mIHRoZSBnaXZlbiBmaWVsZCBudW1iZXIsIGNvdW50aW5nIGZyb20gMCBvbndhcmRzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBpbmRleCB0byBnZXQgdGhlIG5hbWUgb2Y8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmFtZSBvZiB0aGUgZ2l2ZW4gZmllbGQgbnVtYmVyPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1zZXQtcGFyZW50LXJlZmNvdW50Ij48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfc2V0X3BhcmVudF9yZWZjb3VudCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF9wYXJlbnRfcmVmY291bnQgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gKnJlZmNvdW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0cyB0aGUgcGFyZW50X3JlZmNvdW50IGZpZWxkIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+LiBUaGlzIGZpZWxkIGlzIHVzZWQgdG8KK2RldGVybWluZSB3aGV0aGVyIGEgc3RydWN0dXJlIGlzIG11dGFibGUgb3Igbm90LiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlCitjYWxsZWQgYnkgY29kZSBpbXBsZW1lbnRpbmcgcGFyZW50IG9iamVjdHMgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4sIGFzIGRlc2NyaWJlZCBpbgordGhlIE1UIFJlZmNvdW50aW5nIHNlY3Rpb24gb2YgdGhlIGRlc2lnbiBkb2N1bWVudHMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVmY291bnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBwb2ludGVyIHRvIHRoZSBwYXJlbnQncyByZWZjb3VudC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dC4gRGVmYXVsdCBpcyB0cmFuc2ZlciBub25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmluPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgcGFyZW50IHJlZmNvdW50IGNvdWxkIGJlIHNldC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc3RydWN0dXJlLXRvLXN0cmluZyI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX3RvX3N0cmluZyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb252ZXJ0cyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+IHRvIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgorPC9wPgorPHA+CitGb3IgZGVidWdnaW5nIHB1cnBvc2VzIGl0cyBlYXNpZXIgdG8gZG8gc29tZXRoaW5nIGxpa2UgdGhpczoKKzwvcD4KKzxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgorR1NUX0xPRyAoInN0cnVjdHVyZSBpcyAlIiBHU1RfUFRSX0ZPUk1BVCwgc3RydWN0dXJlKTsKKzwvcHJlPjwvZGl2PgorPHA+CitUaGlzIHByaW50cyB0aGUgc3RydWN0dXJlIGluIGh1bWFuIHJlYWRibGUgZm9ybS4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ19mcmVlCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPih0cmFuc2ZlciBmdWxsKUwgYSBwb2ludGVyIHRvIHN0cmluZyBhbGxvY2F0ZWQgYnkgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1NZW1vcnktQWxsb2NhdGlvbi5odG1sI2ctbWFsbG9jIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfbWFsbG9jKCk8L2NvZGU+PC9hPi4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItTWVtb3J5LUFsbG9jYXRpb24uaHRtbCNnLWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19mcmVlKCk8L2NvZGU+PC9hPiBhZnRlciB1c2FnZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWZyb20tc3RyaW5nIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqICAgICAgZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpzdHJpbmc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKmVuZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZXMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiBmcm9tIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgorSWYgZW5kIGlzIG5vdCBOVUxMLCBhIHBvaW50ZXIgdG8gdGhlIHBsYWNlIGluc2lkZSB0aGUgZ2l2ZW4gc3RyaW5nCit3aGVyZSBwYXJzaW5nIGVuZGVkIHdpbGwgYmUgcmV0dXJuZWQuCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdzdF9zdHJ1Y3R1cmVfZnJlZQorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cmluZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW5kPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnBvaW50ZXIgdG8gc3RvcmUgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIGluLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiBvciBOVUxMIHdoZW4gdGhlIHN0cmluZyBjb3VsZAorbm90IGJlIHBhcnNlZC4gRnJlZSB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1mcmVlIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9mcmVlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdHJ1Y3R1cmVfZnJlZSgpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1maXhhdGUiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9maXhhdGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9maXhhdGUgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRml4YXRlIGFsbCB2YWx1ZXMgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPiB1c2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWZpeGF0ZSIgdGl0bGU9ImdzdF92YWx1ZV9maXhhdGUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3ZhbHVlX2ZpeGF0ZSgpPC9jb2RlPjwvYT4uCis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+IHdpbGwgYmUgbW9kaWZpZWQgaW4tcGxhY2UgYW5kIHNob3VsZCBiZSB3cml0YWJsZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZCI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZCAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPHNwYW4gY2xhc3M9InR5cGUiPmNoYXI8L3NwYW4+ICpmaWVsZF9uYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRml4YXRlcyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IGJ5IGNoYW5naW5nIHRoZSBnaXZlbiBmaWVsZCB3aXRoIGl0cyBmaXhhdGVkIHZhbHVlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpZWxkX25hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBmaWVsZCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBzdHJ1Y3R1cmUgZmllbGQgY291bGQgYmUgZml4YXRlZDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZml4YXRlLWZpZWxkLW5lYXJlc3QtaW50Ij48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfaW50ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfaW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8c3BhbiBjbGFzcz0idHlwZSI+Y2hhcjwvc3Bhbj4gKmZpZWxkX25hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPmludDwvc3Bhbj4gdGFyZ2V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRml4YXRlcyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IGJ5IGNoYW5naW5nIHRoZSBnaXZlbiBmaWVsZCB0byB0aGUgbmVhcmVzdAoraW50ZWdlciB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFyZ2V0PC9jb2RlPjwvZW0+IHRoYXQgaXMgYSBzdWJzZXQgb2YgdGhlIGV4aXN0aW5nIGZpZWxkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpZWxkX25hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBmaWVsZCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhcmdldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdGFyZ2V0IHZhbHVlIG9mIHRoZSBmaXhhdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHN0cnVjdHVyZSBjb3VsZCBiZSBmaXhhdGVkPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1maXhhdGUtZmllbGQtbmVhcmVzdC1kb3VibGUiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9kb3VibGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9kb3VibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxzcGFuIGNsYXNzPSJ0eXBlIj5jaGFyPC9zcGFuPiAqZmllbGRfbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+ZG91YmxlPC9zcGFuPiB0YXJnZXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitGaXhhdGVzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gYnkgY2hhbmdpbmcgdGhlIGdpdmVuIGZpZWxkIHRvIHRoZSBuZWFyZXN0Citkb3VibGUgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhcmdldDwvY29kZT48L2VtPiB0aGF0IGlzIGEgc3Vic2V0IG9mIHRoZSBleGlzdGluZyBmaWVsZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZF9uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgZmllbGQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YXJnZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHRhcmdldCB2YWx1ZSBvZiB0aGUgZml4YXRpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBzdHJ1Y3R1cmUgY291bGQgYmUgZml4YXRlZDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZml4YXRlLWZpZWxkLW5lYXJlc3QtZnJhY3Rpb24iPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9mcmFjdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ZyYWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8c3BhbiBjbGFzcz0idHlwZSI+Y2hhcjwvc3Bhbj4gKmZpZWxkX25hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gdGFyZ2V0X251bWVyYXRvcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiB0YXJnZXRfZGVub21pbmF0b3I8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitGaXhhdGVzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gYnkgY2hhbmdpbmcgdGhlIGdpdmVuIGZpZWxkIHRvIHRoZSBuZWFyZXN0CitmcmFjdGlvbiB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFyZ2V0X251bWVyYXRvcjwvY29kZT48L2VtPi88ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFyZ2V0X2Rlbm9taW5hdG9yPC9jb2RlPjwvZW0+IHRoYXQgaXMgYSBzdWJzZXQKK29mIHRoZSBleGlzdGluZyBmaWVsZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZF9uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgZmllbGQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YXJnZXRfbnVtZXJhdG9yPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBudW1lcmF0b3Igb2YgdGhlIHRhcmdldCB2YWx1ZSBvZiB0aGUgZml4YXRpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhcmdldF9kZW5vbWluYXRvcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgZGVub21pbmF0b3Igb2YgdGhlIHRhcmdldCB2YWx1ZSBvZiB0aGUgZml4YXRpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBzdHJ1Y3R1cmUgY291bGQgYmUgZml4YXRlZDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZml4YXRlLWZpZWxkLWJvb2xlYW4iPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfYm9vbGVhbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9ib29sZWFuICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPHNwYW4gY2xhc3M9InR5cGUiPmNoYXI8L3NwYW4+ICpmaWVsZF9uYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gdGFyZ2V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRml4YXRlcyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IGJ5IGNoYW5naW5nIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRfbmFtZTwvY29kZT48L2VtPiBmaWVsZCB0byB0aGUgZ2l2ZW4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YXJnZXQ8L2NvZGU+PC9lbT4gYm9vbGVhbiBpZiB0aGF0IGZpZWxkIGlzIG5vdCBmaXhlZCB5ZXQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRfbmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGZpZWxkIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFyZ2V0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB0YXJnZXQgdmFsdWUgb2YgdGhlIGZpeGF0aW9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiB0aGUgc3RydWN0dXJlIGNvdWxkIGJlIGZpeGF0ZWQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZC1zdHJpbmciPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfc3RyaW5nICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX3N0cmluZyAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8c3BhbiBjbGFzcz0idHlwZSI+Y2hhcjwvc3Bhbj4gKmZpZWxkX25hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFyZ2V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRml4YXRlcyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IGJ5IGNoYW5naW5nIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRfbmFtZTwvY29kZT48L2VtPiBmaWVsZCB0byB0aGUgZ2l2ZW4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YXJnZXQ8L2NvZGU+PC9lbT4gc3RyaW5nIGlmIHRoYXQgZmllbGQgaXMgbm90IGZpeGVkIHlldC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZF9uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgZmllbGQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YXJnZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHRhcmdldCB2YWx1ZSBvZiB0aGUgZml4YXRpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBzdHJ1Y3R1cmUgY291bGQgYmUgZml4YXRlZDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzA8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50IiB0aXRsZT0ic3RydWN0IEdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMyOGVmZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbApAQCAtMCwwICsxLDM0NzcgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5Hc3RUYWdMaXN0PC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0U3lzdGVtQ2xvY2suaHRtbCIgdGl0bGU9IkdzdFN5c3RlbUNsb2NrIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdFN5c3RlbUNsb2NrLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3RUYWdMaXN0LnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItR3N0VGFnTGlzdC50b3Bfb2ZfcGFnZSI+PC9hPkdzdFRhZ0xpc3Q8L3NwYW4+PC9oMj4KKzxwPkdzdFRhZ0xpc3Qg4oCUIExpc3Qgb2YgdGFncyBhbmQgdmFsdWVzIHVzZWQgdG8gZGVzY3JpYmUgbWVkaWEgbWV0YWRhdGE8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisjaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OworCit0eXBlZGVmICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPjsKK2VudW0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VNb2RlIiB0aXRsZT0iZW51bSBHc3RUYWdNZXJnZU1vZGUiPkdzdFRhZ01lcmdlTW9kZTwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0ZsYWciIHRpdGxlPSJlbnVtIEdzdFRhZ0ZsYWciPkdzdFRhZ0ZsYWc8L2E+OworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnRm9yZWFjaEZ1bmMiIHRpdGxlPSJHc3RUYWdGb3JlYWNoRnVuYyAoKSI+KkdzdFRhZ0ZvcmVhY2hGdW5jPC9hPikgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VGdW5jIiB0aXRsZT0iR3N0VGFnTWVyZ2VGdW5jICgpIj4qR3N0VGFnTWVyZ2VGdW5jPC9hPikgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPik7CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVElUTEU6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfVElUTEUiPkdTVF9UQUdfVElUTEU8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVElUTEUtU09SVE5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfVElUTEVfU09SVE5BTUUiPkdTVF9UQUdfVElUTEVfU09SVE5BTUU8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQVJUSVNUOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0FSVElTVCI+R1NUX1RBR19BUlRJU1Q8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQVJUSVNULVNPUlROQU1FOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0FSVElTVF9TT1JUTkFNRSI+R1NUX1RBR19BUlRJU1RfU09SVE5BTUU8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQUxCVU06Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQUxCVU0iPkdTVF9UQUdfQUxCVU08L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQUxCVU0tU09SVE5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQUxCVU1fU09SVE5BTUUiPkdTVF9UQUdfQUxCVU1fU09SVE5BTUU8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQUxCVU0tQVJUSVNUOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0FMQlVNX0FSVElTVCI+R1NUX1RBR19BTEJVTV9BUlRJU1Q8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQUxCVU0tQVJUSVNULVNPUlROQU1FOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0FMQlVNX0FSVElTVF9TT1JUTkFNRSI+R1NUX1RBR19BTEJVTV9BUlRJU1RfU09SVE5BTUU8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctREFURTpDQVBTIiB0aXRsZT0iR1NUX1RBR19EQVRFIj5HU1RfVEFHX0RBVEU8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctREFURS1USU1FOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0RBVEVfVElNRSI+R1NUX1RBR19EQVRFX1RJTUU8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VOUkU6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfR0VOUkUiPkdTVF9UQUdfR0VOUkU8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQ09NTUVOVDpDQVBTIiB0aXRsZT0iR1NUX1RBR19DT01NRU5UIj5HU1RfVEFHX0NPTU1FTlQ8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctRVhURU5ERUQtQ09NTUVOVDpDQVBTIiB0aXRsZT0iR1NUX1RBR19FWFRFTkRFRF9DT01NRU5UIj5HU1RfVEFHX0VYVEVOREVEX0NPTU1FTlQ8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVFJBQ0stTlVNQkVSOkNBUFMiIHRpdGxlPSJHU1RfVEFHX1RSQUNLX05VTUJFUiI+R1NUX1RBR19UUkFDS19OVU1CRVI8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVFJBQ0stQ09VTlQ6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfVFJBQ0tfQ09VTlQiPkdTVF9UQUdfVFJBQ0tfQ09VTlQ8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQUxCVU0tVk9MVU1FLU5VTUJFUjpDQVBTIiB0aXRsZT0iR1NUX1RBR19BTEJVTV9WT0xVTUVfTlVNQkVSIj5HU1RfVEFHX0FMQlVNX1ZPTFVNRV9OVU1CRVI8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQUxCVU0tVk9MVU1FLUNPVU5UOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0FMQlVNX1ZPTFVNRV9DT1VOVCI+R1NUX1RBR19BTEJVTV9WT0xVTUVfQ09VTlQ8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTE9DQVRJT046Q0FQUyIgdGl0bGU9IkdTVF9UQUdfTE9DQVRJT04iPkdTVF9UQUdfTE9DQVRJT048L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctSE9NRVBBR0U6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfSE9NRVBBR0UiPkdTVF9UQUdfSE9NRVBBR0U8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctREVTQ1JJUFRJT046Q0FQUyIgdGl0bGU9IkdTVF9UQUdfREVTQ1JJUFRJT04iPkdTVF9UQUdfREVTQ1JJUFRJT048L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVkVSU0lPTjpDQVBTIiB0aXRsZT0iR1NUX1RBR19WRVJTSU9OIj5HU1RfVEFHX1ZFUlNJT048L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctSVNSQzpDQVBTIiB0aXRsZT0iR1NUX1RBR19JU1JDIj5HU1RfVEFHX0lTUkM8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctT1JHQU5JWkFUSU9OOkNBUFMiIHRpdGxlPSJHU1RfVEFHX09SR0FOSVpBVElPTiI+R1NUX1RBR19PUkdBTklaQVRJT048L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQ09QWVJJR0hUOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0NPUFlSSUdIVCI+R1NUX1RBR19DT1BZUklHSFQ8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQ09QWVJJR0hULVVSSTpDQVBTIiB0aXRsZT0iR1NUX1RBR19DT1BZUklHSFRfVVJJIj5HU1RfVEFHX0NPUFlSSUdIVF9VUkk8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctRU5DT0RFRC1CWTpDQVBTIiB0aXRsZT0iR1NUX1RBR19FTkNPREVEX0JZIj5HU1RfVEFHX0VOQ09ERURfQlk8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQ09NUE9TRVI6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQ09NUE9TRVIiPkdTVF9UQUdfQ09NUE9TRVI8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQ09OVEFDVDpDQVBTIiB0aXRsZT0iR1NUX1RBR19DT05UQUNUIj5HU1RfVEFHX0NPTlRBQ1Q8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTElDRU5TRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19MSUNFTlNFIj5HU1RfVEFHX0xJQ0VOU0U8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTElDRU5TRS1VUkk6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfTElDRU5TRV9VUkkiPkdTVF9UQUdfTElDRU5TRV9VUkk8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctUEVSRk9STUVSOkNBUFMiIHRpdGxlPSJHU1RfVEFHX1BFUkZPUk1FUiI+R1NUX1RBR19QRVJGT1JNRVI8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctRFVSQVRJT046Q0FQUyIgdGl0bGU9IkdTVF9UQUdfRFVSQVRJT04iPkdTVF9UQUdfRFVSQVRJT048L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQ09ERUM6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQ09ERUMiPkdTVF9UQUdfQ09ERUM8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVklERU8tQ09ERUM6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfVklERU9fQ09ERUMiPkdTVF9UQUdfVklERU9fQ09ERUM8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQVVESU8tQ09ERUM6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQVVESU9fQ09ERUMiPkdTVF9UQUdfQVVESU9fQ09ERUM8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctU1VCVElUTEUtQ09ERUM6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfU1VCVElUTEVfQ09ERUMiPkdTVF9UQUdfU1VCVElUTEVfQ09ERUM8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQ09OVEFJTkVSLUZPUk1BVDpDQVBTIiB0aXRsZT0iR1NUX1RBR19DT05UQUlORVJfRk9STUFUIj5HU1RfVEFHX0NPTlRBSU5FUl9GT1JNQVQ8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQklUUkFURTpDQVBTIiB0aXRsZT0iR1NUX1RBR19CSVRSQVRFIj5HU1RfVEFHX0JJVFJBVEU8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTk9NSU5BTC1CSVRSQVRFOkNBUFMiIHRpdGxlPSJHU1RfVEFHX05PTUlOQUxfQklUUkFURSI+R1NUX1RBR19OT01JTkFMX0JJVFJBVEU8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTUlOSU1VTS1CSVRSQVRFOkNBUFMiIHRpdGxlPSJHU1RfVEFHX01JTklNVU1fQklUUkFURSI+R1NUX1RBR19NSU5JTVVNX0JJVFJBVEU8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTUFYSU1VTS1CSVRSQVRFOkNBUFMiIHRpdGxlPSJHU1RfVEFHX01BWElNVU1fQklUUkFURSI+R1NUX1RBR19NQVhJTVVNX0JJVFJBVEU8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctU0VSSUFMOkNBUFMiIHRpdGxlPSJHU1RfVEFHX1NFUklBTCI+R1NUX1RBR19TRVJJQUw8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctRU5DT0RFUjpDQVBTIiB0aXRsZT0iR1NUX1RBR19FTkNPREVSIj5HU1RfVEFHX0VOQ09ERVI8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctRU5DT0RFUi1WRVJTSU9OOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0VOQ09ERVJfVkVSU0lPTiI+R1NUX1RBR19FTkNPREVSX1ZFUlNJT048L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVFJBQ0stR0FJTjpDQVBTIiB0aXRsZT0iR1NUX1RBR19UUkFDS19HQUlOIj5HU1RfVEFHX1RSQUNLX0dBSU48L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVFJBQ0stUEVBSzpDQVBTIiB0aXRsZT0iR1NUX1RBR19UUkFDS19QRUFLIj5HU1RfVEFHX1RSQUNLX1BFQUs8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQUxCVU0tR0FJTjpDQVBTIiB0aXRsZT0iR1NUX1RBR19BTEJVTV9HQUlOIj5HU1RfVEFHX0FMQlVNX0dBSU48L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQUxCVU0tUEVBSzpDQVBTIiB0aXRsZT0iR1NUX1RBR19BTEJVTV9QRUFLIj5HU1RfVEFHX0FMQlVNX1BFQUs8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctUkVGRVJFTkNFLUxFVkVMOkNBUFMiIHRpdGxlPSJHU1RfVEFHX1JFRkVSRU5DRV9MRVZFTCI+R1NUX1RBR19SRUZFUkVOQ0VfTEVWRUw8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTEFOR1VBR0UtQ09ERTpDQVBTIiB0aXRsZT0iR1NUX1RBR19MQU5HVUFHRV9DT0RFIj5HU1RfVEFHX0xBTkdVQUdFX0NPREU8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctSU1BR0U6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfSU1BR0UiPkdTVF9UQUdfSU1BR0U8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctUFJFVklFVy1JTUFHRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19QUkVWSUVXX0lNQUdFIj5HU1RfVEFHX1BSRVZJRVdfSU1BR0U8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQVRUQUNITUVOVDpDQVBTIiB0aXRsZT0iR1NUX1RBR19BVFRBQ0hNRU5UIj5HU1RfVEFHX0FUVEFDSE1FTlQ8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQkVBVFMtUEVSLU1JTlVURTpDQVBTIiB0aXRsZT0iR1NUX1RBR19CRUFUU19QRVJfTUlOVVRFIj5HU1RfVEFHX0JFQVRTX1BFUl9NSU5VVEU8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctS0VZV09SRFM6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfS0VZV09SRFMiPkdTVF9UQUdfS0VZV09SRFM8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfR0VPX0xPQ0FUSU9OX05BTUUiPkdTVF9UQUdfR0VPX0xPQ0FUSU9OX05BTUU8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLUxBVElUVURFOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0dFT19MT0NBVElPTl9MQVRJVFVERSI+R1NUX1RBR19HRU9fTE9DQVRJT05fTEFUSVRVREU8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLUxPTkdJVFVERTpDQVBTIiB0aXRsZT0iR1NUX1RBR19HRU9fTE9DQVRJT05fTE9OR0lUVURFIj5HU1RfVEFHX0dFT19MT0NBVElPTl9MT05HSVRVREU8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLUVMRVZBVElPTjpDQVBTIiB0aXRsZT0iR1NUX1RBR19HRU9fTE9DQVRJT05fRUxFVkFUSU9OIj5HU1RfVEFHX0dFT19MT0NBVElPTl9FTEVWQVRJT048L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLUNJVFk6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfR0VPX0xPQ0FUSU9OX0NJVFkiPkdTVF9UQUdfR0VPX0xPQ0FUSU9OX0NJVFk8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLUNPVU5UUlk6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfR0VPX0xPQ0FUSU9OX0NPVU5UUlkiPkdTVF9UQUdfR0VPX0xPQ0FUSU9OX0NPVU5UUlk8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLVNVQkxPQ0FUSU9OOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0dFT19MT0NBVElPTl9TVUJMT0NBVElPTiI+R1NUX1RBR19HRU9fTE9DQVRJT05fU1VCTE9DQVRJT048L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLUhPUklaT05UQUwtRVJST1I6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfR0VPX0xPQ0FUSU9OX0hPUklaT05UQUxfRVJST1IiPkdTVF9UQUdfR0VPX0xPQ0FUSU9OX0hPUklaT05UQUxfRVJST1I8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLU1PVkVNRU5ULURJUkVDVElPTjpDQVBTIiB0aXRsZT0iR1NUX1RBR19HRU9fTE9DQVRJT05fTU9WRU1FTlRfRElSRUNUSU9OIj5HU1RfVEFHX0dFT19MT0NBVElPTl9NT1ZFTUVOVF9ESVJFQ1RJT048L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLU1PVkVNRU5ULVNQRUVEOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0dFT19MT0NBVElPTl9NT1ZFTUVOVF9TUEVFRCI+R1NUX1RBR19HRU9fTE9DQVRJT05fTU9WRU1FTlRfU1BFRUQ8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLUNBUFRVUkUtRElSRUNUSU9OOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0dFT19MT0NBVElPTl9DQVBUVVJFX0RJUkVDVElPTiI+R1NUX1RBR19HRU9fTE9DQVRJT05fQ0FQVFVSRV9ESVJFQ1RJT048L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctU0hPVy1OQU1FOkNBUFMiIHRpdGxlPSJHU1RfVEFHX1NIT1dfTkFNRSI+R1NUX1RBR19TSE9XX05BTUU8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctU0hPVy1TT1JUTkFNRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19TSE9XX1NPUlROQU1FIj5HU1RfVEFHX1NIT1dfU09SVE5BTUU8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctU0hPVy1FUElTT0RFLU5VTUJFUjpDQVBTIiB0aXRsZT0iR1NUX1RBR19TSE9XX0VQSVNPREVfTlVNQkVSIj5HU1RfVEFHX1NIT1dfRVBJU09ERV9OVU1CRVI8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctU0hPVy1TRUFTT04tTlVNQkVSOkNBUFMiIHRpdGxlPSJHU1RfVEFHX1NIT1dfU0VBU09OX05VTUJFUiI+R1NUX1RBR19TSE9XX1NFQVNPTl9OVU1CRVI8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTFlSSUNTOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0xZUklDUyI+R1NUX1RBR19MWVJJQ1M8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQ09NUE9TRVItU09SVE5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQ09NUE9TRVJfU09SVE5BTUUiPkdTVF9UQUdfQ09NUE9TRVJfU09SVE5BTUU8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR1JPVVBJTkc6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfR1JPVVBJTkciPkdTVF9UQUdfR1JPVVBJTkc8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVVNFUi1SQVRJTkc6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfVVNFUl9SQVRJTkciPkdTVF9UQUdfVVNFUl9SQVRJTkc8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctREVWSUNFLU1BTlVGQUNUVVJFUjpDQVBTIiB0aXRsZT0iR1NUX1RBR19ERVZJQ0VfTUFOVUZBQ1RVUkVSIj5HU1RfVEFHX0RFVklDRV9NQU5VRkFDVFVSRVI8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctREVWSUNFLU1PREVMOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0RFVklDRV9NT0RFTCI+R1NUX1RBR19ERVZJQ0VfTU9ERUw8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQVBQTElDQVRJT04tTkFNRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19BUFBMSUNBVElPTl9OQU1FIj5HU1RfVEFHX0FQUExJQ0FUSU9OX05BTUU8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQVBQTElDQVRJT04tREFUQTpDQVBTIiB0aXRsZT0iR1NUX1RBR19BUFBMSUNBVElPTl9EQVRBIj5HU1RfVEFHX0FQUExJQ0FUSU9OX0RBVEE8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctSU1BR0UtT1JJRU5UQVRJT046Q0FQUyIgdGl0bGU9IkdTVF9UQUdfSU1BR0VfT1JJRU5UQVRJT04iPkdTVF9UQUdfSU1BR0VfT1JJRU5UQVRJT048L2E+Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctcmVnaXN0ZXIiIHRpdGxlPSJnc3RfdGFnX3JlZ2lzdGVyICgpIj5nc3RfdGFnX3JlZ2lzdGVyPC9hPiAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0ZsYWciIHRpdGxlPSJlbnVtIEdzdFRhZ0ZsYWciPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdGbGFnPC9zcGFuPjwvYT4gZmxhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuaWNrPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmJsdXJiPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ01lcmdlRnVuYyIgdGl0bGU9IkdzdFRhZ01lcmdlRnVuYyAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ01lcmdlRnVuYzwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLW1lcmdlLXVzZS1maXJzdCIgdGl0bGU9ImdzdF90YWdfbWVyZ2VfdXNlX2ZpcnN0ICgpIj5nc3RfdGFnX21lcmdlX3VzZV9maXJzdDwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKmRlc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLW1lcmdlLXN0cmluZ3Mtd2l0aC1jb21tYSIgdGl0bGU9ImdzdF90YWdfbWVyZ2Vfc3RyaW5nc193aXRoX2NvbW1hICgpIj5nc3RfdGFnX21lcmdlX3N0cmluZ3Nfd2l0aF9jb21tYTwvYT4gICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKmRlc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWV4aXN0cyIgdGl0bGU9ImdzdF90YWdfZXhpc3RzICgpIj5nc3RfdGFnX2V4aXN0czwvYT4gICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1R5cGU8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctZ2V0LXR5cGUiIHRpdGxlPSJnc3RfdGFnX2dldF90eXBlICgpIj5nc3RfdGFnX2dldF90eXBlPC9hPiAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4pOworY29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWdldC1uaWNrIiB0aXRsZT0iZ3N0X3RhZ19nZXRfbmljayAoKSI+Z3N0X3RhZ19nZXRfbmljazwvYT4gICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+KTsKK2NvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICogICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1nZXQtZGVzY3JpcHRpb24iIHRpdGxlPSJnc3RfdGFnX2dldF9kZXNjcmlwdGlvbiAoKSI+Z3N0X3RhZ19nZXRfZGVzY3JpcHRpb248L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0ZsYWciIHRpdGxlPSJlbnVtIEdzdFRhZ0ZsYWciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0VGFnRmxhZzwvc3Bhbj48L2E+ICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctZ2V0LWZsYWciIHRpdGxlPSJnc3RfdGFnX2dldF9mbGFnICgpIj5nc3RfdGFnX2dldF9mbGFnPC9hPiAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWlzLWZpeGVkIiB0aXRsZT0iZ3N0X3RhZ19pc19maXhlZCAoKSI+Z3N0X3RhZ19pc19maXhlZDwvYT4gICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtbmV3IiB0aXRsZT0iZ3N0X3RhZ19saXN0X25ldyAoKSI+Z3N0X3RhZ19saXN0X25ldzwvYT4gICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtbmV3LWZ1bGwiIHRpdGxlPSJnc3RfdGFnX2xpc3RfbmV3X2Z1bGwgKCkiPmdzdF90YWdfbGlzdF9uZXdfZnVsbDwvYT4gICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1uZXctZnVsbC12YWxpc3QiIHRpdGxlPSJnc3RfdGFnX2xpc3RfbmV3X2Z1bGxfdmFsaXN0ICgpIj5nc3RfdGFnX2xpc3RfbmV3X2Z1bGxfdmFsaXN0PC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gdmFyX2FyZ3M8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtaXMtdGFnLWxpc3QiIHRpdGxlPSJnc3RfaXNfdGFnX2xpc3QgKCkiPmdzdF9pc190YWdfbGlzdDwvYT4gICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY29uc3Rwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NvbnN0cG9pbnRlcjwvc3Bhbj48L2E+IHA8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtaXMtZW1wdHkiIHRpdGxlPSJnc3RfdGFnX2xpc3RfaXNfZW1wdHkgKCkiPmdzdF90YWdfbGlzdF9pc19lbXB0eTwvYT4gICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtY29weSIgdGl0bGU9ImdzdF90YWdfbGlzdF9jb3B5ICgpIj5nc3RfdGFnX2xpc3RfY29weTwvYT4gICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1pbnNlcnQiIHRpdGxlPSJnc3RfdGFnX2xpc3RfaW5zZXJ0ICgpIj5nc3RfdGFnX2xpc3RfaW5zZXJ0PC9hPiAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqaW50bzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqZnJvbTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdNZXJnZU1vZGUiIHRpdGxlPSJlbnVtIEdzdFRhZ01lcmdlTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ01lcmdlTW9kZTwvc3Bhbj48L2E+IG1vZGU8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1tZXJnZSIgdGl0bGU9ImdzdF90YWdfbGlzdF9tZXJnZSAoKSI+Z3N0X3RhZ19saXN0X21lcmdlPC9hPiAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3QxPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0MjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdNZXJnZU1vZGUiIHRpdGxlPSJlbnVtIEdzdFRhZ01lcmdlTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ01lcmdlTW9kZTwvc3Bhbj48L2E+IG1vZGU8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZnJlZSIgdGl0bGU9ImdzdF90YWdfbGlzdF9mcmVlICgpIj5nc3RfdGFnX2xpc3RfZnJlZTwvYT4gICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtdGFnLXNpemUiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X3RhZ19zaXplICgpIj5nc3RfdGFnX2xpc3RfZ2V0X3RhZ19zaXplPC9hPiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtYWRkIiB0aXRsZT0iZ3N0X3RhZ19saXN0X2FkZCAoKSI+Z3N0X3RhZ19saXN0X2FkZDwvYT4gICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VNb2RlIiB0aXRsZT0iZW51bSBHc3RUYWdNZXJnZU1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdNZXJnZU1vZGU8L3NwYW4+PC9hPiBtb2RlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtYWRkLXZhbHVlIiB0aXRsZT0iZ3N0X3RhZ19saXN0X2FkZF92YWx1ZSAoKSI+Z3N0X3RhZ19saXN0X2FkZF92YWx1ZTwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VNb2RlIiB0aXRsZT0iZW51bSBHc3RUYWdNZXJnZU1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdNZXJnZU1vZGU8L3NwYW4+PC9hPiBtb2RlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWFkZC12YWx1ZXMiIHRpdGxlPSJnc3RfdGFnX2xpc3RfYWRkX3ZhbHVlcyAoKSI+Z3N0X3RhZ19saXN0X2FkZF92YWx1ZXM8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VNb2RlIiB0aXRsZT0iZW51bSBHc3RUYWdNZXJnZU1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdNZXJnZU1vZGU8L3NwYW4+PC9hPiBtb2RlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtYWRkLXZhbGlzdCIgdGl0bGU9ImdzdF90YWdfbGlzdF9hZGRfdmFsaXN0ICgpIj5nc3RfdGFnX2xpc3RfYWRkX3ZhbGlzdDwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdNZXJnZU1vZGUiIHRpdGxlPSJlbnVtIEdzdFRhZ01lcmdlTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ01lcmdlTW9kZTwvc3Bhbj48L2E+IG1vZGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52YV9saXN0PC9zcGFuPiB2YXJfYXJnczwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1hZGQtdmFsaXN0LXZhbHVlcyIgdGl0bGU9ImdzdF90YWdfbGlzdF9hZGRfdmFsaXN0X3ZhbHVlcyAoKSI+Z3N0X3RhZ19saXN0X2FkZF92YWxpc3RfdmFsdWVzPC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VNb2RlIiB0aXRsZT0iZW51bSBHc3RUYWdNZXJnZU1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdNZXJnZU1vZGU8L3NwYW4+PC9hPiBtb2RlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gdmFyX2FyZ3M8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtcmVtb3ZlLXRhZyIgdGl0bGU9ImdzdF90YWdfbGlzdF9yZW1vdmVfdGFnICgpIj5nc3RfdGFnX2xpc3RfcmVtb3ZlX3RhZzwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZm9yZWFjaCIgdGl0bGU9ImdzdF90YWdfbGlzdF9mb3JlYWNoICgpIj5nc3RfdGFnX2xpc3RfZm9yZWFjaDwvYT4gICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdGb3JlYWNoRnVuYyIgdGl0bGU9IkdzdFRhZ0ZvcmVhY2hGdW5jICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnRm9yZWFjaEZ1bmM8L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTsKK2NvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKiAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtdmFsdWUtaW5kZXgiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X3ZhbHVlX2luZGV4ICgpIj5nc3RfdGFnX2xpc3RfZ2V0X3ZhbHVlX2luZGV4PC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1jb3B5LXZhbHVlIiB0aXRsZT0iZ3N0X3RhZ19saXN0X2NvcHlfdmFsdWUgKCkiPmdzdF90YWdfbGlzdF9jb3B5X3ZhbHVlPC9hPiAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWNoYXIiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X2NoYXIgKCkiPmdzdF90YWdfbGlzdF9nZXRfY2hhcjwvYT4gICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtY2hhci1pbmRleCIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfY2hhcl9pbmRleCAoKSI+Z3N0X3RhZ19saXN0X2dldF9jaGFyX2luZGV4PC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXVjaGFyIiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF91Y2hhciAoKSI+Z3N0X3RhZ19saXN0X2dldF91Y2hhcjwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWNoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWNoYXI8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXVjaGFyLWluZGV4IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF91Y2hhcl9pbmRleCAoKSI+Z3N0X3RhZ19saXN0X2dldF91Y2hhcl9pbmRleDwvYT4gICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1Y2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmd1Y2hhcjwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtYm9vbGVhbiIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfYm9vbGVhbiAoKSI+Z3N0X3RhZ19saXN0X2dldF9ib29sZWFuPC9hPiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1ib29sZWFuLWluZGV4IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF9ib29sZWFuX2luZGV4ICgpIj5nc3RfdGFnX2xpc3RfZ2V0X2Jvb2xlYW5faW5kZXg8L2E+ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtaW50IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF9pbnQgKCkiPmdzdF90YWdfbGlzdF9nZXRfaW50PC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWludC1pbmRleCIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfaW50X2luZGV4ICgpIj5nc3RfdGFnX2xpc3RfZ2V0X2ludF9pbmRleDwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXVpbnQiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X3VpbnQgKCkiPmdzdF90YWdfbGlzdF9nZXRfdWludDwvYT4gICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtdWludC1pbmRleCIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfdWludF9pbmRleCAoKSI+Z3N0X3RhZ19saXN0X2dldF91aW50X2luZGV4PC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWxvbmciIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X2xvbmcgKCkiPmdzdF90YWdfbGlzdF9nZXRfbG9uZzwvYT4gICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2xvbmciPjxzcGFuIGNsYXNzPSJ0eXBlIj5nbG9uZzwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtbG9uZy1pbmRleCIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfbG9uZ19pbmRleCAoKSI+Z3N0X3RhZ19saXN0X2dldF9sb25nX2luZGV4PC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dsb25nIj48c3BhbiBjbGFzcz0idHlwZSI+Z2xvbmc8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXVsb25nIiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF91bG9uZyAoKSI+Z3N0X3RhZ19saXN0X2dldF91bG9uZzwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWxvbmciPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWxvbmc8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXVsb25nLWluZGV4IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF91bG9uZ19pbmRleCAoKSI+Z3N0X3RhZ19saXN0X2dldF91bG9uZ19pbmRleDwvYT4gICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1bG9uZyI+PHNwYW4gY2xhc3M9InR5cGUiPmd1bG9uZzwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtaW50NjQiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X2ludDY0ICgpIj5nc3RfdGFnX2xpc3RfZ2V0X2ludDY0PC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtaW50NjQtaW5kZXgiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X2ludDY0X2luZGV4ICgpIj5nc3RfdGFnX2xpc3RfZ2V0X2ludDY0X2luZGV4PC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC11aW50NjQiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X3VpbnQ2NCAoKSI+Z3N0X3RhZ19saXN0X2dldF91aW50NjQ8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtdWludDY0LWluZGV4IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF91aW50NjRfaW5kZXggKCkiPmdzdF90YWdfbGlzdF9nZXRfdWludDY0X2luZGV4PC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtZmxvYXQiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X2Zsb2F0ICgpIj5nc3RfdGFnX2xpc3RfZ2V0X2Zsb2F0PC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtZmxvYXQtaW5kZXgiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X2Zsb2F0X2luZGV4ICgpIj5nc3RfdGFnX2xpc3RfZ2V0X2Zsb2F0X2luZGV4PC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1kb3VibGUiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZSAoKSI+Z3N0X3RhZ19saXN0X2dldF9kb3VibGU8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtZG91YmxlLWluZGV4IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF9kb3VibGVfaW5kZXggKCkiPmdzdF90YWdfbGlzdF9nZXRfZG91YmxlX2luZGV4PC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtc3RyaW5nIiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcgKCkiPmdzdF90YWdfbGlzdF9nZXRfc3RyaW5nPC9hPiAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqdmFsdWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXN0cmluZy1pbmRleCIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfc3RyaW5nX2luZGV4ICgpIj5nc3RfdGFnX2xpc3RfZ2V0X3N0cmluZ19pbmRleDwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqdmFsdWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtcGVlay1zdHJpbmctaW5kZXgiIHRpdGxlPSJnc3RfdGFnX2xpc3RfcGVla19zdHJpbmdfaW5kZXggKCkiPmdzdF90YWdfbGlzdF9wZWVrX3N0cmluZ19pbmRleDwvYT4gICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKip2YWx1ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtcG9pbnRlciIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfcG9pbnRlciAoKSI+Z3N0X3RhZ19saXN0X2dldF9wb2ludGVyPC9hPiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1wb2ludGVyLWluZGV4IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF9wb2ludGVyX2luZGV4ICgpIj5nc3RfdGFnX2xpc3RfZ2V0X3BvaW50ZXJfaW5kZXg8L2E+ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtZGF0ZSIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfZGF0ZSAoKSI+Z3N0X3RhZ19saXN0X2dldF9kYXRlPC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRGF0ZS1hbmQtVGltZS1GdW5jdGlvbnMuaHRtbCNHRGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEYXRlPC9zcGFuPjwvYT4gKip2YWx1ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtZGF0ZS1pbmRleCIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfZGF0ZV9pbmRleCAoKSI+Z3N0X3RhZ19saXN0X2dldF9kYXRlX2luZGV4PC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1EYXRlLWFuZC1UaW1lLUZ1bmN0aW9ucy5odG1sI0dEYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R0RhdGU8L3NwYW4+PC9hPiAqKnZhbHVlPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1kYXRlLXRpbWUiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X2RhdGVfdGltZSAoKSI+Z3N0X3RhZ19saXN0X2dldF9kYXRlX3RpbWU8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHc3REYXRlVGltZSIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiAqKnZhbHVlPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1kYXRlLXRpbWUtaW5kZXgiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X2RhdGVfdGltZV9pbmRleCAoKSI+Z3N0X3RhZ19saXN0X2dldF9kYXRlX3RpbWVfaW5kZXg8L2E+ICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+ICoqdmFsdWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWJ1ZmZlciIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfYnVmZmVyICgpIj5nc3RfdGFnX2xpc3RfZ2V0X2J1ZmZlcjwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKip2YWx1ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtYnVmZmVyLWluZGV4IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF9idWZmZXJfaW5kZXggKCkiPmdzdF90YWdfbGlzdF9nZXRfYnVmZmVyX2luZGV4PC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICoqdmFsdWU8L2NvZGU+PC9lbT4pOworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RUYWdMaXN0LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPgorTGlzdCBvZiB0YWdzIGFuZCB2YWx1ZXMgdXNlZCB0byBkZXNjcmliZSBtZWRpYSBtZXRhZGF0YS4KKzwvcD4KKzxwPgorU3RyaW5ncyBtdXN0IGJlIGluIEFTQ0lJIG9yIFVURi04IGVuY29kaW5nLiBObyBvdGhlciBlbmNvZGluZ3MgYXJlIGFsbG93ZWQuCis8L3A+Cis8cD4KK0xhc3QgcmV2aWV3ZWQgb24gMjAwOS0wNi0wOSAoMC4xMC4yMykKKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFRhZ0xpc3QiPjwvYT48aDM+R3N0VGFnTGlzdDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBHc3RTdHJ1Y3R1cmUgR3N0VGFnTGlzdDsKKzwvcHJlPgorPHA+CitPcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gZGF0YSBzdHJ1Y3R1cmUuCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFRhZ01lcmdlTW9kZSI+PC9hPjxoMz5lbnVtIEdzdFRhZ01lcmdlTW9kZTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBlbnVtIHsKKyAgR1NUX1RBR19NRVJHRV9VTkRFRklORUQsCisgIEdTVF9UQUdfTUVSR0VfUkVQTEFDRV9BTEwsCisgIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwKKyAgR1NUX1RBR19NRVJHRV9BUFBFTkQsCisgIEdTVF9UQUdfTUVSR0VfUFJFUEVORCwKKyAgR1NUX1RBR19NRVJHRV9LRUVQLAorICBHU1RfVEFHX01FUkdFX0tFRVBfQUxMLAorICAvKiBhZGQgbW9yZSAqLworICBHU1RfVEFHX01FUkdFX0NPVU5UCit9IEdzdFRhZ01lcmdlTW9kZTsKKzwvcHJlPgorPHA+CitUaGUgZGlmZmVyZW50IHRhZyBtZXJnaW5nIG1vZGVzIGFyZSBiYXNpY2FsbHkgcmVwbGFjZSwgb3ZlcndyaXRlIGFuZCBhcHBlbmQsCitidXQgdGhleSBjYW4gYmUgc2VlbiBmcm9tIHR3byBkaXJlY3Rpb25zLiBHaXZlbiB0d28gdGFnbGlzdHM6IChBKSB0aGUgdGFncworYWxyZWFkeSBpbiB0aGUgZWxlbWVudCBhbmQgKEIpIHRoZSBvbmVzIHRoYXQgYXJlIHN1cHBsaWVkIHRvIHRoZSBlbGVtZW50ICgKK2UuZy4gdmlhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCNnc3QtdGFnLXNldHRlci1tZXJnZS10YWdzIiB0aXRsZT0iZ3N0X3RhZ19zZXR0ZXJfbWVyZ2VfdGFncyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFnX3NldHRlcl9tZXJnZV90YWdzKCk8L2NvZGU+PC9hPiAvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCNnc3QtdGFnLXNldHRlci1hZGQtdGFncyIgdGl0bGU9ImdzdF90YWdfc2V0dGVyX2FkZF90YWdzICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YWdfc2V0dGVyX2FkZF90YWdzKCk8L2NvZGU+PC9hPiBvciBhCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULVRBRzpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0VWRU5UX1RBRzwvY29kZT48L2E+KSwgaG93IGFyZSB0aGVzZSB0YWdzIG1lcmdlZD8KK0luIHRoZSB0YWJsZSBiZWxvdyB0aGlzIGlzIHNob3duIGZvciB0aGUgY2FzZXMgdGhhdCBhIHRhZyBleGlzdHMgaW4gdGhlIGxpc3QKKyhBKSBvciBkb2VzIG5vdCBleGlzdHMgKCFBKSBhbmQgY29tYmluYXRpb25zIHRoZXJlb2YuCis8L3A+Cis8cD4KKzwvcD4KKzxkaXYgY2xhc3M9InRhYmxlIj4KKzxhIG5hbWU9ImlkNzMyOTE2Ij48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5UYWJsZcKgMS7CoG1lcmdlIG1vZGU8L2I+PC9wPgorPGRpdiBjbGFzcz0idGFibGUtY29udGVudHMiPjx0YWJsZSBzdW1tYXJ5PSJtZXJnZSBtb2RlIiBib3JkZXI9IjEiPgorPGNvbGdyb3VwPgorPGNvbD4KKzxjb2w+Cis8Y29sPgorPGNvbD4KKzxjb2w+Cis8L2NvbGdyb3VwPgorPHRoZWFkPjx0cj4KKzx0aCBhbGlnbj0ibGVmdCI+bWVyZ2UgbW9kZTwvdGg+Cis8dGggYWxpZ249ImxlZnQiPkEgKyBCPC90aD4KKzx0aCBhbGlnbj0ibGVmdCI+QSArICFCPC90aD4KKzx0aCBhbGlnbj0ibGVmdCI+IUEgKyBCPC90aD4KKzx0aCBhbGlnbj0ibGVmdCI+IUEgKyAhQjwvdGg+Cis8L3RyPjwvdGhlYWQ+Cis8dGJvZHk+Cis8dHI+Cis8dGQgYWxpZ249ImxlZnQiPlJFUExBQ0VfQUxMPC90ZD4KKzx0ZCBhbGlnbj0ibGVmdCI+QjwvdGQ+Cis8dGQgYWxpZ249ImxlZnQiPi08L3RkPgorPHRkIGFsaWduPSJsZWZ0Ij5CPC90ZD4KKzx0ZCBhbGlnbj0ibGVmdCI+LTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkIGFsaWduPSJsZWZ0Ij5SRVBMQUNFPC90ZD4KKzx0ZCBhbGlnbj0ibGVmdCI+QjwvdGQ+Cis8dGQgYWxpZ249ImxlZnQiPkE8L3RkPgorPHRkIGFsaWduPSJsZWZ0Ij5CPC90ZD4KKzx0ZCBhbGlnbj0ibGVmdCI+LTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkIGFsaWduPSJsZWZ0Ij5BUFBFTkQ8L3RkPgorPHRkIGFsaWduPSJsZWZ0Ij5BLCBCPC90ZD4KKzx0ZCBhbGlnbj0ibGVmdCI+QTwvdGQ+Cis8dGQgYWxpZ249ImxlZnQiPkI8L3RkPgorPHRkIGFsaWduPSJsZWZ0Ij4tPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQgYWxpZ249ImxlZnQiPlBSRVBFTkQ8L3RkPgorPHRkIGFsaWduPSJsZWZ0Ij5CLCBBPC90ZD4KKzx0ZCBhbGlnbj0ibGVmdCI+QTwvdGQ+Cis8dGQgYWxpZ249ImxlZnQiPkI8L3RkPgorPHRkIGFsaWduPSJsZWZ0Ij4tPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQgYWxpZ249ImxlZnQiPktFRVA8L3RkPgorPHRkIGFsaWduPSJsZWZ0Ij5BPC90ZD4KKzx0ZCBhbGlnbj0ibGVmdCI+QTwvdGQ+Cis8dGQgYWxpZ249ImxlZnQiPkI8L3RkPgorPHRkIGFsaWduPSJsZWZ0Ij4tPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQgYWxpZ249ImxlZnQiPktFRVBfQUxMPC90ZD4KKzx0ZCBhbGlnbj0ibGVmdCI+QTwvdGQ+Cis8dGQgYWxpZ249ImxlZnQiPkE8L3RkPgorPHRkIGFsaWduPSJsZWZ0Ij4tPC90ZD4KKzx0ZCBhbGlnbj0ibGVmdCI+LTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxwPjxiciBjbGFzcz0idGFibGUtYnJlYWsiPgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtVEFHLU1FUkdFLVVOREVGSU5FRDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfVEFHX01FUkdFX1VOREVGSU5FRDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dW5kZWZpbmVkIG1lcmdlIG1vZGUKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1UQUctTUVSR0UtUkVQTEFDRS1BTEw6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1RBR19NRVJHRV9SRVBMQUNFX0FMTDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cmVwbGFjZSBhbGwgdGFncyAoY2xlYXIgbGlzdCBhbmQgYXBwZW5kKQorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVRBRy1NRVJHRS1SRVBMQUNFOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9UQUdfTUVSR0VfUkVQTEFDRTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cmVwbGFjZSB0YWdzCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtVEFHLU1FUkdFLUFQUEVORDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfVEFHX01FUkdFX0FQUEVORDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YXBwZW5kIHRhZ3MKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1UQUctTUVSR0UtUFJFUEVORDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfVEFHX01FUkdFX1BSRVBFTkQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnByZXBlbmQgdGFncworPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVRBRy1NRVJHRS1LRUVQOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9UQUdfTUVSR0VfS0VFUDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+a2VlcCBleGlzdGluZyB0YWdzCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtVEFHLU1FUkdFLUtFRVAtQUxMOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9UQUdfTUVSR0VfS0VFUF9BTEw8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmtlZXAgYWxsIGV4aXN0aW5nIHRhZ3MKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1UQUctTUVSR0UtQ09VTlQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1RBR19NRVJHRV9DT1VOVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG51bWJlciBvZiBtZXJnZSBtb2RlcworPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0VGFnRmxhZyI+PC9hPjxoMz5lbnVtIEdzdFRhZ0ZsYWc8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9UQUdfRkxBR19VTkRFRklORUQsCisgIEdTVF9UQUdfRkxBR19NRVRBLAorICBHU1RfVEFHX0ZMQUdfRU5DT0RFRCwKKyAgR1NUX1RBR19GTEFHX0RFQ09ERUQsCisgIEdTVF9UQUdfRkxBR19DT1VOVAorfSBHc3RUYWdGbGFnOworPC9wcmU+Cis8cD4KK0V4dHJhIHRhZyBmbGFncyB1c2VkIHdoZW4gcmVnaXN0ZXJpbmcgdGFncy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVRBRy1GTEFHLVVOREVGSU5FRDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfVEFHX0ZMQUdfVU5ERUZJTkVEPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51bmRlZmluZWQgZmxhZworPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVRBRy1GTEFHLU1FVEE6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1RBR19GTEFHX01FVEE8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnRhZyBpcyBtZXRhIGRhdGEKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1UQUctRkxBRy1FTkNPREVEOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9UQUdfRkxBR19FTkNPREVEPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50YWcgaXMgZW5jb2RlZAorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVRBRy1GTEFHLURFQ09ERUQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1RBR19GTEFHX0RFQ09ERUQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnRhZyBpcyBkZWNvZGVkCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtVEFHLUZMQUctQ09VTlQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1RBR19GTEFHX0NPVU5UPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5udW1iZXIgb2YgdGFnIGZsYWdzCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RUYWdGb3JlYWNoRnVuYyI+PC9hPjxoMz5Hc3RUYWdGb3JlYWNoRnVuYyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICAoKkdzdFRhZ0ZvcmVhY2hGdW5jKSAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0EgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZm9yZWFjaCIgdGl0bGU9ImdzdF90YWdfbGlzdF9mb3JlYWNoICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YWdfbGlzdF9mb3JlYWNoKCk8L2NvZGU+PC9hPi4gVGhlIGZ1bmN0aW9uIG1heQorbm90IG1vZGlmeSB0aGUgdGFnIGxpc3QuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmFtZSBvZiBhIHRhZyBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0VGFnTWVyZ2VGdW5jIj48L2E+PGgzPkdzdFRhZ01lcmdlRnVuYyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICAoKkdzdFRhZ01lcmdlRnVuYykgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0EgZnVuY3Rpb24gZm9yIG1lcmdpbmcgbXVsdGlwbGUgdmFsdWVzIG9mIGEgdGFnIHVzZWQgd2hlbiByZWdpc3RlcmluZwordGFncy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBkZXN0aW5hdGlvbiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzb3VyY2UgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVEFHLVRJVExFOkNBUFMiPjwvYT48aDM+R1NUX1RBR19USVRMRTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX1RJVExFICAgICAgICAgICAgICAgICAgInRpdGxlIgorPC9wcmU+Cis8cD4KK2NvbW1vbmx5IHVzZWQgdGl0bGUgKHN0cmluZykKKzwvcD4KKzxwPgorVGhlIHRpdGxlIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQsIGUuZy4gJ1RoZSBEb2xsIEhvdXNlJworPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVEFHLVRJVExFLVNPUlROQU1FOkNBUFMiPjwvYT48aDM+R1NUX1RBR19USVRMRV9TT1JUTkFNRTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX1RJVExFX1NPUlROQU1FICAgICAgICAgInRpdGxlLXNvcnRuYW1lIgorPC9wcmU+Cis8cD4KK2NvbW1vbmx5IHVzZWQgdGl0bGUsIGFzIHVzZWQgZm9yIHNvcnRpbmcgKHN0cmluZykKKzwvcD4KKzxwPgorVGhlIHRpdGxlIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQsIGUuZy4gJ0RvbGwgSG91c2UsIFRoZScKKzwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1BUlRJU1Q6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0FSVElTVDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0FSVElTVCAgICAgICAgICAgICAgICAgImFydGlzdCIKKzwvcHJlPgorPHA+CitwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgKHN0cmluZykKKzwvcD4KKzxwPgorVGhlIGFydGlzdCBuYW1lIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQsIGUuZy4gJ0ppbWkgSGVuZHJpeCcgb3IKKydUaGUgR3VpdGFyIEhlcm9lcycKKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1BUlRJU1QtU09SVE5BTUU6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0FSVElTVF9TT1JUTkFNRTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0FSVElTVF9TT1JUTkFNRSAgICAgICAgIm11c2ljYnJhaW56LXNvcnRuYW1lIgorPC9wcmU+Cis8cD4KK3BlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZywgYXMgdXNlZCBmb3Igc29ydGluZyAoc3RyaW5nKQorPC9wPgorPHA+CitUaGUgYXJ0aXN0IG5hbWUgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCwgZS5nLiAnSGVuZHJpeCwgSmltaScgb3IKKydHdWl0YXIgSGVyb2VzLCBUaGUnCis8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1UQUctQUxCVU06Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0FMQlVNPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfQUxCVU0gICAgICAgICAgICAgICAgICAiYWxidW0iCis8L3ByZT4KKzxwPgorYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgKHN0cmluZykKKzwvcD4KKzxwPgorVGhlIGFsYnVtIG5hbWUgYXMgaXQgc2hvdWxkIGJlIGRpc3BsYXllZCwgZS5nLiAnVGhlIEphenogR3VpdGFyJworPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVEFHLUFMQlVNLVNPUlROQU1FOkNBUFMiPjwvYT48aDM+R1NUX1RBR19BTEJVTV9TT1JUTkFNRTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0FMQlVNX1NPUlROQU1FICAgICAgICAgImFsYnVtLXNvcnRuYW1lIgorPC9wcmU+Cis8cD4KK2FsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhLCBhcyB1c2VkIGZvciBzb3J0aW5nIChzdHJpbmcpCis8L3A+Cis8cD4KK1RoZSBhbGJ1bSBuYW1lIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQsIGUuZy4gJ0phenogR3VpdGFyLCBUaGUnCis8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1UQUctQUxCVU0tQVJUSVNUOkNBUFMiPjwvYT48aDM+R1NUX1RBR19BTEJVTV9BUlRJU1Q8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19BTEJVTV9BUlRJU1QgICAgICAgICAgICJhbGJ1bS1hcnRpc3QiCis8L3ByZT4KKzxwPgorVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkLgorPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVEFHLUFMQlVNLUFSVElTVC1TT1JUTkFNRTpDQVBTIj48L2E+PGgzPkdTVF9UQUdfQUxCVU1fQVJUSVNUX1NPUlROQU1FPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfQUxCVU1fQVJUSVNUX1NPUlROQU1FICAiYWxidW0tYXJ0aXN0LXNvcnRuYW1lIgorPC9wcmU+Cis8cD4KK1RoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZC4KKzwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1EQVRFOkNBUFMiPjwvYT48aDM+R1NUX1RBR19EQVRFPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfREFURSAgICAgICAgICAgICAgICAgICAiZGF0ZSIKKzwvcHJlPgorPHA+CitkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkICg8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURhdGUtYW5kLVRpbWUtRnVuY3Rpb25zLmh0bWwjR0RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRGF0ZTwvc3Bhbj48L2E+IHN0cnVjdHVyZSkKKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1EQVRFLVRJTUU6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0RBVEVfVElNRTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0RBVEVfVElNRSAgICAgICAgICAgICAgImRhdGV0aW1lIgorPC9wcmU+Cis8cD4KK2RhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHc3REYXRlVGltZSIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUpCis8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1UQUctR0VOUkU6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0dFTlJFPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfR0VOUkUgICAgICAgICAgICAgICAgICAiZ2VucmUiCis8L3ByZT4KKzxwPgorZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8gKHN0cmluZykKKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1DT01NRU5UOkNBUFMiPjwvYT48aDM+R1NUX1RBR19DT01NRU5UPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfQ09NTUVOVCAgICAgICAgICAgICAgICAiY29tbWVudCIKKzwvcHJlPgorPHA+CitmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSAoc3RyaW5nKQorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVEFHLUVYVEVOREVELUNPTU1FTlQ6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0VYVEVOREVEX0NPTU1FTlQ8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19FWFRFTkRFRF9DT01NRU5UICAgICAgICJleHRlbmRlZC1jb21tZW50IgorPC9wcmU+Cis8cD4KK2tleS92YWx1ZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgKHN0cmluZykKKzwvcD4KKzxwPgorTXVzdCBiZSBpbiB0aGUgZm9ybSBvZiAna2V5PWNvbW1lbnQnIG9yCisna2V5W2xjXT1jb21tZW50JyB3aGVyZSAnbGMnIGlzIGFuIElTTy02MzkKK2xhbmd1YWdlIGNvZGUuCis8L3A+Cis8cD4KK1RoaXMgdGFnIGlzIHVzZWQgZm9yIHVua25vd24gVm9yYmlzIGNvbW1lbnQgdGFncywKK3Vua25vd24gQVBFIHRhZ3MgYW5kIGNlcnRhaW4gSUQzdjIgY29tbWVudCBmaWVsZHMuCis8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1UQUctVFJBQ0stTlVNQkVSOkNBUFMiPjwvYT48aDM+R1NUX1RBR19UUkFDS19OVU1CRVI8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19UUkFDS19OVU1CRVIgICAgICAgICAgICJ0cmFjay1udW1iZXIiCis8L3ByZT4KKzxwPgordHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24gKHVuc2lnbmVkIGludGVnZXIpCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1UQUctVFJBQ0stQ09VTlQ6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX1RSQUNLX0NPVU5UPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfVFJBQ0tfQ09VTlQgICAgICAgICAgICAidHJhY2stY291bnQiCis8L3ByZT4KKzxwPgorY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byAodW5zaWduZWQgaW50ZWdlcikKKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1BTEJVTS1WT0xVTUUtTlVNQkVSOkNBUFMiPjwvYT48aDM+R1NUX1RBR19BTEJVTV9WT0xVTUVfTlVNQkVSPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfQUxCVU1fVk9MVU1FX05VTUJFUiAgICAiYWxidW0tZGlzYy1udW1iZXIiCis8L3ByZT4KKzxwPgorZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiAodW5zaWduZWQgaW50ZWdlcikKKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1BTEJVTS1WT0xVTUUtQ09VTlQ6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0FMQlVNX1ZPTFVNRV9DT1VOVDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0FMQlVNX1ZPTFVNRV9DT1VOVCAgICAiYWxidW0tZGlzYy1jb3VudCIKKzwvcHJlPgorPHA+Citjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byAodW5zaWduZWQgaW50ZWdlcikKKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1MT0NBVElPTjpDQVBTIj48L2E+PGgzPkdTVF9UQUdfTE9DQVRJT048L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19MT0NBVElPTiAgICAgICAgICAgICAgICJsb2NhdGlvbiIKKzwvcHJlPgorPHA+CitPcmlnaW4gb2YgbWVkaWEgYXMgYSBVUkkgKGxvY2F0aW9uLCB3aGVyZSB0aGUgb3JpZ2luYWwgb2YgdGhlIGZpbGUgb3Igc3RyZWFtCitpcyBob3N0ZWQpIChzdHJpbmcpCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1UQUctSE9NRVBBR0U6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0hPTUVQQUdFPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfSE9NRVBBR0UgICAgICAgICAgICAgICAiaG9tZXBhZ2UiCis8L3ByZT4KKzxwPgorSG9tZXBhZ2UgZm9yIHRoaXMgbWVkaWEgKGkuZS4gYXJ0aXN0IG9yIG1vdmllIGhvbWVwYWdlKSAoc3RyaW5nKQorPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVEFHLURFU0NSSVBUSU9OOkNBUFMiPjwvYT48aDM+R1NUX1RBR19ERVNDUklQVElPTjwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0RFU0NSSVBUSU9OICAgICAgICAgICAgImRlc2NyaXB0aW9uIgorPC9wcmU+Cis8cD4KK3Nob3J0IHRleHQgZGVzY3JpYmluZyB0aGUgY29udGVudCBvZiB0aGUgZGF0YSAoc3RyaW5nKQorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVEFHLVZFUlNJT046Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX1ZFUlNJT048L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19WRVJTSU9OICAgICAgICAgICAgICAgICJ2ZXJzaW9uIgorPC9wcmU+Cis8cD4KK3ZlcnNpb24gb2YgdGhpcyBkYXRhIChzdHJpbmcpCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1UQUctSVNSQzpDQVBTIj48L2E+PGgzPkdTVF9UQUdfSVNSQzwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0lTUkMgICAgICAgICAgICAgICAgICAgImlzcmMiCis8L3ByZT4KKzxwPgorSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIChzdHJpbmcpCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1UQUctT1JHQU5JWkFUSU9OOkNBUFMiPjwvYT48aDM+R1NUX1RBR19PUkdBTklaQVRJT048L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19PUkdBTklaQVRJT04gICAgICAgICAgICJvcmdhbml6YXRpb24iCis8L3ByZT4KKzxwPgorb3JnYW5pemF0aW9uIChzdHJpbmcpCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1UQUctQ09QWVJJR0hUOkNBUFMiPjwvYT48aDM+R1NUX1RBR19DT1BZUklHSFQ8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19DT1BZUklHSFQgICAgICAgICAgICAgICJjb3B5cmlnaHQiCis8L3ByZT4KKzxwPgorY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSAoc3RyaW5nKQorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVEFHLUNPUFlSSUdIVC1VUkk6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0NPUFlSSUdIVF9VUkk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19DT1BZUklHSFRfVVJJICAgICAgICAgICJjb3B5cmlnaHQtdXJpIgorPC9wcmU+Cis8cD4KK1VSSSB0byBsb2NhdGlvbiB3aGVyZSBjb3B5cmlnaHQgZGV0YWlscyBjYW4gYmUgZm91bmQgKHN0cmluZykKKzwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1FTkNPREVELUJZOkNBUFMiPjwvYT48aDM+R1NUX1RBR19FTkNPREVEX0JZPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfRU5DT0RFRF9CWSAgICAgICAgICAgICAiZW5jb2RlZC1ieSIKKzwvcHJlPgorPHA+CituYW1lIG9mIHRoZSBwZXJzb24gb3Igb3JnYW5pc2F0aW9uIHRoYXQgZW5jb2RlZCB0aGUgZmlsZS4gTWF5IGNvbnRhaW4gYQorY29weXJpZ2h0IG1lc3NhZ2UgaWYgdGhlIHBlcnNvbiBvciBvcmdhbmlzYXRpb24gYWxzbyBob2xkcyB0aGUgY29weXJpZ2h0Cisoc3RyaW5nKQorPC9wPgorPHA+CitOb3RlOiBkbyBub3QgdXNlIHRoaXMgZmllbGQgdG8gZGVzY3JpYmUgdGhlIGVuY29kaW5nIGFwcGxpY2F0aW9uLiBVc2UKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQVBQTElDQVRJT04tTkFNRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19BUFBMSUNBVElPTl9OQU1FIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RBR19BUFBMSUNBVElPTl9OQU1FPC9zcGFuPjwvYT4gb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1DT01NRU5UOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0NPTU1FTlQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVEFHX0NPTU1FTlQ8L3NwYW4+PC9hPiBmb3IgdGhhdC4KKzwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1DT01QT1NFUjpDQVBTIj48L2E+PGgzPkdTVF9UQUdfQ09NUE9TRVI8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19DT01QT1NFUiAgICAgICAgICAgICAgICJjb21wb3NlciIKKzwvcHJlPgorPHA+CitwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcgKHN0cmluZykKKzwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1DT05UQUNUOkNBUFMiPjwvYT48aDM+R1NUX1RBR19DT05UQUNUPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfQ09OVEFDVCAgICAgICAgICAgICAgICAiY29udGFjdCIKKzwvcHJlPgorPHA+Citjb250YWN0IGluZm9ybWF0aW9uIChzdHJpbmcpCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1UQUctTElDRU5TRTpDQVBTIj48L2E+PGgzPkdTVF9UQUdfTElDRU5TRTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0xJQ0VOU0UgICAgICAgICAgICAgICAgImxpY2Vuc2UiCis8L3ByZT4KKzxwPgorbGljZW5zZSBvZiBkYXRhIChzdHJpbmcpCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1UQUctTElDRU5TRS1VUkk6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0xJQ0VOU0VfVVJJPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfTElDRU5TRV9VUkkgICAgICAgICAgICAibGljZW5zZS11cmkiCis8L3ByZT4KKzxwPgorVVJJIHRvIGxvY2F0aW9uIHdoZXJlIGxpY2Vuc2UgZGV0YWlscyBjYW4gYmUgZm91bmQgKHN0cmluZykKKzwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1QRVJGT1JNRVI6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX1BFUkZPUk1FUjwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX1BFUkZPUk1FUiAgICAgICAgICAgICAgInBlcmZvcm1lciIKKzwvcHJlPgorPHA+CitwZXJzb24ocykgcGVyZm9ybWluZyAoc3RyaW5nKQorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVEFHLURVUkFUSU9OOkNBUFMiPjwvYT48aDM+R1NUX1RBR19EVVJBVElPTjwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0RVUkFUSU9OICAgICAgICAgICAgICAgImR1cmF0aW9uIgorPC9wcmU+Cis8cD4KK2xlbmd0aCBpbiBHU3RyZWFtZXIgdGltZSB1bml0cyAobmFub3NlY29uZHMpICh1bnNpZ25lZCA2NC1iaXQgaW50ZWdlcikKKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1DT0RFQzpDQVBTIj48L2E+PGgzPkdTVF9UQUdfQ09ERUM8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19DT0RFQyAgICAgICAgICAgICAgICAgICJjb2RlYyIKKzwvcHJlPgorPHA+Citjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4gKHN0cmluZykKKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1WSURFTy1DT0RFQzpDQVBTIj48L2E+PGgzPkdTVF9UQUdfVklERU9fQ09ERUM8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19WSURFT19DT0RFQyAgICAgICAgICAgICJ2aWRlby1jb2RlYyIKKzwvcHJlPgorPHA+Citjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4gKHN0cmluZykKKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1BVURJTy1DT0RFQzpDQVBTIj48L2E+PGgzPkdTVF9UQUdfQVVESU9fQ09ERUM8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19BVURJT19DT0RFQyAgICAgICAgICAgICJhdWRpby1jb2RlYyIKKzwvcHJlPgorPHA+Citjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4gKHN0cmluZykKKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1TVUJUSVRMRS1DT0RFQzpDQVBTIj48L2E+PGgzPkdTVF9UQUdfU1VCVElUTEVfQ09ERUM8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19TVUJUSVRMRV9DT0RFQyAgICAgICAgICJzdWJ0aXRsZS1jb2RlYyIKKzwvcHJlPgorPHA+Citjb2RlYy9mb3JtYXQgdGhlIHN1YnRpdGxlIGRhdGEgaXMgc3RvcmVkIGluIChzdHJpbmcpCis8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjM8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1UQUctQ09OVEFJTkVSLUZPUk1BVDpDQVBTIj48L2E+PGgzPkdTVF9UQUdfQ09OVEFJTkVSX0ZPUk1BVDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0NPTlRBSU5FUl9GT1JNQVQgICAgICAgImNvbnRhaW5lci1mb3JtYXQiCis8L3ByZT4KKzxwPgorY29udGFpbmVyIGZvcm1hdCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4gKHN0cmluZykKKzwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1CSVRSQVRFOkNBUFMiPjwvYT48aDM+R1NUX1RBR19CSVRSQVRFPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfQklUUkFURSAgICAgICAgICAgICAgICAiYml0cmF0ZSIKKzwvcHJlPgorPHA+CitleGFjdCBvciBhdmVyYWdlIGJpdHJhdGUgaW4gYml0cy9zICh1bnNpZ25lZCBpbnRlZ2VyKQorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVEFHLU5PTUlOQUwtQklUUkFURTpDQVBTIj48L2E+PGgzPkdTVF9UQUdfTk9NSU5BTF9CSVRSQVRFPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfTk9NSU5BTF9CSVRSQVRFICAgICAgICAibm9taW5hbC1iaXRyYXRlIgorPC9wcmU+Cis8cD4KK25vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MgKHVuc2lnbmVkIGludGVnZXIpLiBUaGUgYWN0dWFsIGJpdHJhdGUgbWlnaHQgYmUKK2RpZmZlcmVudCBmcm9tIHRoaXMgdGFyZ2V0IGJpdHJhdGUuCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1UQUctTUlOSU1VTS1CSVRSQVRFOkNBUFMiPjwvYT48aDM+R1NUX1RBR19NSU5JTVVNX0JJVFJBVEU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19NSU5JTVVNX0JJVFJBVEUgICAgICAgICJtaW5pbXVtLWJpdHJhdGUiCis8L3ByZT4KKzxwPgorbWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyAodW5zaWduZWQgaW50ZWdlcikKKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1NQVhJTVVNLUJJVFJBVEU6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX01BWElNVU1fQklUUkFURTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX01BWElNVU1fQklUUkFURSAgICAgICAgIm1heGltdW0tYml0cmF0ZSIKKzwvcHJlPgorPHA+CittYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zICh1bnNpZ25lZCBpbnRlZ2VyKQorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVEFHLVNFUklBTDpDQVBTIj48L2E+PGgzPkdTVF9UQUdfU0VSSUFMPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfU0VSSUFMICAgICAgICAgICAgICAgICAic2VyaWFsIgorPC9wcmU+Cis8cD4KK3NlcmlhbCBudW1iZXIgb2YgdHJhY2sgKHVuc2lnbmVkIGludGVnZXIpCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1UQUctRU5DT0RFUjpDQVBTIj48L2E+PGgzPkdTVF9UQUdfRU5DT0RFUjwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0VOQ09ERVIgICAgICAgICAgICAgICAgImVuY29kZXIiCis8L3ByZT4KKzxwPgorZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSAoc3RyaW5nKQorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVEFHLUVOQ09ERVItVkVSU0lPTjpDQVBTIj48L2E+PGgzPkdTVF9UQUdfRU5DT0RFUl9WRVJTSU9OPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfRU5DT0RFUl9WRVJTSU9OICAgICAgICAiZW5jb2Rlci12ZXJzaW9uIgorPC9wcmU+Cis8cD4KK3ZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0gKHVuc2lnbmVkIGludGVnZXIpCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1UQUctVFJBQ0stR0FJTjpDQVBTIj48L2E+PGgzPkdTVF9UQUdfVFJBQ0tfR0FJTjwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX1RSQUNLX0dBSU4gICAgICAgICAgICAgInJlcGxheWdhaW4tdHJhY2stZ2FpbiIKKzwvcHJlPgorPHA+Cit0cmFjayBnYWluIGluIGRiIChkb3VibGUpCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1UQUctVFJBQ0stUEVBSzpDQVBTIj48L2E+PGgzPkdTVF9UQUdfVFJBQ0tfUEVBSzwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX1RSQUNLX1BFQUsgICAgICAgICAgICAgInJlcGxheWdhaW4tdHJhY2stcGVhayIKKzwvcHJlPgorPHA+CitwZWFrIG9mIHRoZSB0cmFjayAoZG91YmxlKQorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVEFHLUFMQlVNLUdBSU46Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0FMQlVNX0dBSU48L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19BTEJVTV9HQUlOICAgICAgICAgICAgICJyZXBsYXlnYWluLWFsYnVtLWdhaW4iCis8L3ByZT4KKzxwPgorYWxidW0gZ2FpbiBpbiBkYiAoZG91YmxlKQorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVEFHLUFMQlVNLVBFQUs6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0FMQlVNX1BFQUs8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19BTEJVTV9QRUFLICAgICAgICAgICAgICJyZXBsYXlnYWluLWFsYnVtLXBlYWsiCis8L3ByZT4KKzxwPgorcGVhayBvZiB0aGUgYWxidW0gKGRvdWJsZSkKKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1SRUZFUkVOQ0UtTEVWRUw6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX1JFRkVSRU5DRV9MRVZFTDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX1JFRkVSRU5DRV9MRVZFTCAgICAgICAgInJlcGxheWdhaW4tcmVmZXJlbmNlLWxldmVsIgorPC9wcmU+Cis8cD4KK3JlZmVyZW5jZSBsZXZlbCBvZiB0cmFjayBhbmQgYWxidW0gZ2FpbiB2YWx1ZXMgKGRvdWJsZSkKKzwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1MQU5HVUFHRS1DT0RFOkNBUFMiPjwvYT48aDM+R1NUX1RBR19MQU5HVUFHRV9DT0RFPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfTEFOR1VBR0VfQ09ERSAgICAgICAgICAibGFuZ3VhZ2UtY29kZSIKKzwvcHJlPgorPHA+CitMYW5ndWFnZSBjb2RlIChJU08tNjM5LTEpIChzdHJpbmcpIG9mIHRoZSBjb250ZW50Cis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1UQUctSU1BR0U6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0lNQUdFPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfSU1BR0UgICAgICAgICAgICAgICAgICAiaW1hZ2UiCis8L3ByZT4KKzxwPgoraW1hZ2UgKGJ1ZmZlcikgKGJ1ZmZlciBjYXBzIHNob3VsZCBzcGVjaWZ5IHRoZSBjb250ZW50IHR5cGUgYW5kIHByZWZlcmFibHkKK2Fsc28gc2V0ICJpbWFnZS10eXBlIiBmaWVsZCBhcyA8YSBocmVmPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0dGFnLmh0bWwjR3N0VGFnSW1hZ2VUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnSW1hZ2VUeXBlPC9zcGFuPjwvYT4pCis8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuNjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1QUkVWSUVXLUlNQUdFOkNBUFMiPjwvYT48aDM+R1NUX1RBR19QUkVWSUVXX0lNQUdFPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfUFJFVklFV19JTUFHRSAgICAgICAgICAicHJldmlldy1pbWFnZSIKKzwvcHJlPgorPHA+CitpbWFnZSB0aGF0IGlzIG1lYW50IGZvciBwcmV2aWV3IHB1cnBvc2VzLCBlLmcuIHNtYWxsIGljb24tc2l6ZWQgdmVyc2lvbgorKGJ1ZmZlcikgKGJ1ZmZlciBjYXBzIHNob3VsZCBzcGVjaWZ5IHRoZSBjb250ZW50IHR5cGUpCis8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuNzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1BVFRBQ0hNRU5UOkNBUFMiPjwvYT48aDM+R1NUX1RBR19BVFRBQ0hNRU5UPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfQVRUQUNITUVOVCAgICAgICAgICAgICAiYXR0YWNobWVudCIKKzwvcHJlPgorPHA+CitnZW5lcmljIGZpbGUgYXR0YWNobWVudCAoYnVmZmVyKSAoYnVmZmVyIGNhcHMgc2hvdWxkIHNwZWNpZnkgdGhlIGNvbnRlbnQKK3R5cGUgYW5kIGlmIHBvc3NpYmxlIHNldCAiZmlsZW5hbWUiIHRvIHRoZSBmaWxlIG5hbWUgb2YgdGhlCithdHRhY2htZW50KQorPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIxPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVEFHLUJFQVRTLVBFUi1NSU5VVEU6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0JFQVRTX1BFUl9NSU5VVEU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19CRUFUU19QRVJfTUlOVVRFICAgICAgICJiZWF0cy1wZXItbWludXRlIgorPC9wcmU+Cis8cD4KK251bWJlciBvZiBiZWF0cyBwZXIgbWludXRlIGluIGF1ZGlvIChkb3VibGUpCis8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1UQUctS0VZV09SRFM6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0tFWVdPUkRTPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfS0VZV09SRFMgICAgICAgICAgICAgICAia2V5d29yZHMiCis8L3ByZT4KKzxwPgorY29tbWEgc2VwYXJhdGVkIGtleXdvcmRzIGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgKHN0cmluZykuCis8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1UQUctR0VPLUxPQ0FUSU9OLU5BTUU6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0dFT19MT0NBVElPTl9OQU1FPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX05BTUUgICAgICAgICAgICAgICAiZ2VvLWxvY2F0aW9uLW5hbWUiCis8L3ByZT4KKzxwPgoraHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpdmUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yCitwcm9kdWNlZC4gKHN0cmluZykuCis8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1UQUctR0VPLUxPQ0FUSU9OLUxBVElUVURFOkNBUFMiPjwvYT48aDM+R1NUX1RBR19HRU9fTE9DQVRJT05fTEFUSVRVREU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19HRU9fTE9DQVRJT05fTEFUSVRVREUgICAgICAgICAgICAgICAiZ2VvLWxvY2F0aW9uLWxhdGl0dWRlIgorPC9wcmU+Cis8cD4KK2dlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4KK2RlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yIHNvdXRoZXJuCitsYXRpdHVkZXMpIChkb3VibGUpLgorPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIxPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVEFHLUdFTy1MT0NBVElPTi1MT05HSVRVREU6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0dFT19MT0NBVElPTl9MT05HSVRVREU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19HRU9fTE9DQVRJT05fTE9OR0lUVURFICAgICAgICAgICAgICAgImdlby1sb2NhdGlvbi1sb25naXR1ZGUiCis8L3ByZT4KKzxwPgorZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4KK2RlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssCituZWdhdGl2ZSB2YWx1ZXMgZm9yIHdlc3Rlcm4gbG9uZ2l0dWRlcykuIChkb3VibGUpLgorPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIxPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVEFHLUdFTy1MT0NBVElPTi1FTEVWQVRJT046Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0dFT19MT0NBVElPTl9FTEVWQVRJT048L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19HRU9fTE9DQVRJT05fRUxFVkFUSU9OICAgICAgICAgICAgICAgImdlby1sb2NhdGlvbi1lbGV2YXRpb24iCis8L3ByZT4KKzxwPgorZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzCithY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIChkb3VibGUpLgorPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIxPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVEFHLUdFTy1MT0NBVElPTi1DSVRZOkNBUFMiPjwvYT48aDM+R1NUX1RBR19HRU9fTE9DQVRJT05fQ0lUWTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0dFT19MT0NBVElPTl9DSVRZICAgICAgICAgICAgICAgICAgICAiZ2VvLWxvY2F0aW9uLWNpdHkiCis8L3ByZT4KKzxwPgorVGhlIGNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIChzdHJpbmcpLgorPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI5PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVEFHLUdFTy1MT0NBVElPTi1DT1VOVFJZOkNBUFMiPjwvYT48aDM+R1NUX1RBR19HRU9fTE9DQVRJT05fQ09VTlRSWTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0dFT19MT0NBVElPTl9DT1VOVFJZICAgICAgICAgICAgICAgICAiZ2VvLWxvY2F0aW9uLWNvdW50cnkiCis8L3ByZT4KKzxwPgorVGhlIGNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIChzdHJpbmcpLgorPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI5PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVEFHLUdFTy1MT0NBVElPTi1TVUJMT0NBVElPTjpDQVBTIj48L2E+PGgzPkdTVF9UQUdfR0VPX0xPQ0FUSU9OX1NVQkxPQ0FUSU9OPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX1NVQkxPQ0FUSU9OICAgICAgICAgICAgICJnZW8tbG9jYXRpb24tc3VibG9jYXRpb24iCis8L3ByZT4KKzxwPgorQSBsb2NhdGlvbiAnc21hbGxlcicgdGhhbiBHU1RfVEFHX0dFT19MT0NBVElPTl9DSVRZIHRoYXQgc3BlY2lmaWVzIGJldHRlcgord2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkLiAoZS5nLiB0aGUgbmVpZ2hib3Job29kKSAoc3RyaW5nKS4KKzwvcD4KKzxwPgorVGhpcyB0YWcgaGFzIGJlZW4gYWRkZWQgYXMgdGhpcyBpcyBob3cgaXQgaXMgaGFuZGxlZC9uYW1lZCBpbiBYTVAncworSXB0YzR4bXBjb3JlIHNjaGVtYS4KKzwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yOTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1HRU8tTE9DQVRJT04tSE9SSVpPTlRBTC1FUlJPUjpDQVBTIj48L2E+PGgzPkdTVF9UQUdfR0VPX0xPQ0FUSU9OX0hPUklaT05UQUxfRVJST1I8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19HRU9fTE9DQVRJT05fSE9SSVpPTlRBTF9FUlJPUiAgICJnZW8tbG9jYXRpb24taG9yaXpvbnRhbC1lcnJvciIKKzwvcHJlPgorPHA+CitSZXByZXNlbnRzIHRoZSBleHBlY3RlZCBlcnJvciBvbiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbmluZyBpbgorbWV0ZXJzIChkb3VibGUpLgorPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMxPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVEFHLUdFTy1MT0NBVElPTi1NT1ZFTUVOVC1ESVJFQ1RJT046Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0dFT19MT0NBVElPTl9NT1ZFTUVOVF9ESVJFQ1RJT048L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19HRU9fTE9DQVRJT05fTU9WRU1FTlRfRElSRUNUSU9OICJnZW8tbG9jYXRpb24tbW92ZW1lbnQtZGlyZWN0aW9uIgorPC9wcmU+Cis8cD4KK0luZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZQorb2YgYSBtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwKKzAgbWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIChkb3VibGUgZnJvbSAwIHRvIDM2MCkKKzwvcD4KKzxwPgorU2VlIGFsc28gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1HRU8tTE9DQVRJT04tQ0FQVFVSRS1ESVJFQ1RJT046Q0FQUyIgdGl0bGU9IkdTVF9UQUdfR0VPX0xPQ0FUSU9OX0NBUFRVUkVfRElSRUNUSU9OIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RBR19HRU9fTE9DQVRJT05fQ0FQVFVSRV9ESVJFQ1RJT048L3NwYW4+PC9hPgorPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVEFHLUdFTy1MT0NBVElPTi1NT1ZFTUVOVC1TUEVFRDpDQVBTIj48L2E+PGgzPkdTVF9UQUdfR0VPX0xPQ0FUSU9OX01PVkVNRU5UX1NQRUVEPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX01PVkVNRU5UX1NQRUVEICAgICAgICJnZW8tbG9jYXRpb24tbW92ZW1lbnQtc3BlZWQiCis8L3ByZT4KKzxwPgorU3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hlbiBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlLgorUmVwcmVzZW50ZWQgaW4gbS9zLiAoZG91YmxlKQorPC9wPgorPHA+CitTZWUgYWxzbyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1NT1ZFTUVOVC1ESVJFQ1RJT046Q0FQUyIgdGl0bGU9IkdTVF9UQUdfR0VPX0xPQ0FUSU9OX01PVkVNRU5UX0RJUkVDVElPTiI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UQUdfR0VPX0xPQ0FUSU9OX01PVkVNRU5UX0RJUkVDVElPTjwvc3Bhbj48L2E+Cis8L3A+Cis8cD4KK1NpbmNlIDAuMTAuMzAKKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1HRU8tTE9DQVRJT04tQ0FQVFVSRS1ESVJFQ1RJT046Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0dFT19MT0NBVElPTl9DQVBUVVJFX0RJUkVDVElPTjwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0dFT19MT0NBVElPTl9DQVBUVVJFX0RJUkVDVElPTiAgImdlby1sb2NhdGlvbi1jYXB0dXJlLWRpcmVjdGlvbiIKKzwvcHJlPgorPHA+CitJbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nCithIG1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLAorMCBtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UgKGRvdWJsZSBmcm9tIDAgdG8gMzYwKQorPC9wPgorPHA+CitTZWUgYWxzbyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1NT1ZFTUVOVC1ESVJFQ1RJT046Q0FQUyIgdGl0bGU9IkdTVF9UQUdfR0VPX0xPQ0FUSU9OX01PVkVNRU5UX0RJUkVDVElPTiI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UQUdfR0VPX0xPQ0FUSU9OX01PVkVNRU5UX0RJUkVDVElPTjwvc3Bhbj48L2E+Cis8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1UQUctU0hPVy1OQU1FOkNBUFMiPjwvYT48aDM+R1NUX1RBR19TSE9XX05BTUU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19TSE9XX05BTUUgICAgICAgICAgICAgICAgICAgICAgICAgInNob3ctbmFtZSIKKzwvcHJlPgorPHA+CitOYW1lIG9mIHRoZSBzaG93LCB1c2VkIGZvciBkaXNwbGF5aW5nIChzdHJpbmcpCis8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1UQUctU0hPVy1TT1JUTkFNRTpDQVBTIj48L2E+PGgzPkdTVF9UQUdfU0hPV19TT1JUTkFNRTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX1NIT1dfU09SVE5BTUUgICAgICAgICAgICAgICAgICAgICAic2hvdy1zb3J0bmFtZSIKKzwvcHJlPgorPHA+CitOYW1lIG9mIHRoZSBzaG93LCB1c2VkIGZvciBzb3J0aW5nIChzdHJpbmcpCis8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1UQUctU0hPVy1FUElTT0RFLU5VTUJFUjpDQVBTIj48L2E+PGgzPkdTVF9UQUdfU0hPV19FUElTT0RFX05VTUJFUjwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX1NIT1dfRVBJU09ERV9OVU1CRVIgICAgICAgICAgICAgICAic2hvdy1lcGlzb2RlLW51bWJlciIKKzwvcHJlPgorPHA+CitOdW1iZXIgb2YgdGhlIGVwaXNvZGUgd2l0aGluIGEgc2Vhc29uL3Nob3cgKHVuc2lnbmVkIGludGVnZXIpCis8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1UQUctU0hPVy1TRUFTT04tTlVNQkVSOkNBUFMiPjwvYT48aDM+R1NUX1RBR19TSE9XX1NFQVNPTl9OVU1CRVI8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19TSE9XX1NFQVNPTl9OVU1CRVIgICAgICAgICAgICAgICAgInNob3ctc2Vhc29uLW51bWJlciIKKzwvcHJlPgorPHA+CitOdW1iZXIgb2YgdGhlIHNlYXNvbiBvZiBhIHNob3cvc2VyaWVzICh1bnNpZ25lZCBpbnRlZ2VyKQorPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI2PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVEFHLUxZUklDUzpDQVBTIj48L2E+PGgzPkdTVF9UQUdfTFlSSUNTPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfTFlSSUNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICJseXJpY3MiCis8L3ByZT4KKzxwPgorVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEgKHN0cmluZykKKzwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1DT01QT1NFUi1TT1JUTkFNRTpDQVBTIj48L2E+PGgzPkdTVF9UQUdfQ09NUE9TRVJfU09SVE5BTUU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19DT01QT1NFUl9TT1JUTkFNRSAgICAgICAgICAgICAgICAgImNvbXBvc2VyLXNvcnRuYW1lIgorPC9wcmU+Cis8cD4KK1RoZSBjb21wb3NlcidzIG5hbWUsIHVzZWQgZm9yIHNvcnRpbmcgKHN0cmluZykKKzwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1HUk9VUElORzpDQVBTIj48L2E+PGgzPkdTVF9UQUdfR1JPVVBJTkc8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19HUk9VUElORyAgICAgICAgICAgICAgICAgICAgICAgICAgImdyb3VwaW5nIgorPC9wcmU+Cis8cD4KK0dyb3VwcyB0b2dldGhlciBtZWRpYSB0aGF0IGFyZSByZWxhdGVkIGFuZCBzcGFucyBtdWx0aXBsZSB0cmFja3MuIEFuCitleGFtcGxlIGFyZSBtdWx0aXBsZSBwaWVjZXMgb2YgYSBjb25jZXJ0by4gKHN0cmluZykKKzwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1VU0VSLVJBVElORzpDQVBTIj48L2E+PGgzPkdTVF9UQUdfVVNFUl9SQVRJTkc8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19VU0VSX1JBVElORyAgICAgICAgICAgICAgICAgICAgICAgInVzZXItcmF0aW5nIgorPC9wcmU+Cis8cD4KK1JhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgcGVyc29uIChsaWtlbHkgdGhlIGFwcGxpY2F0aW9uIHVzZXIpLgorVGhlIGhpZ2hlciB0aGUgdmFsdWUsIHRoZSBtb3JlIHRoZSB1c2VyIGxpa2VzIHRoaXMgbWVkaWEKKyh1bnNpZ25lZCBpbnQgZnJvbSAwIHRvIDEwMCkKKzwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yOTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1ERVZJQ0UtTUFOVUZBQ1RVUkVSOkNBUFMiPjwvYT48aDM+R1NUX1RBR19ERVZJQ0VfTUFOVUZBQ1RVUkVSPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfREVWSUNFX01BTlVGQUNUVVJFUiAgICAgICAgICAgICAgICJkZXZpY2UtbWFudWZhY3R1cmVyIgorPC9wcmU+Cis8cD4KK01hbnVmYWN0dXJlciBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSAoc3RyaW5nKQorPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVEFHLURFVklDRS1NT0RFTDpDQVBTIj48L2E+PGgzPkdTVF9UQUdfREVWSUNFX01PREVMPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfREVWSUNFX01PREVMICAgICAgICAgICAgICAgICAgICAgICJkZXZpY2UtbW9kZWwiCis8L3ByZT4KKzxwPgorTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEgKHN0cmluZykKKzwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1BUFBMSUNBVElPTi1OQU1FOkNBUFMiPjwvYT48aDM+R1NUX1RBR19BUFBMSUNBVElPTl9OQU1FPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfQVBQTElDQVRJT05fTkFNRSAgICAgICAgICAgICAgICAgICJhcHBsaWNhdGlvbi1uYW1lIgorPC9wcmU+Cis8cD4KK05hbWUgb2YgdGhlIGFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSAoc3RyaW5nKQorPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMxPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVEFHLUFQUExJQ0FUSU9OLURBVEE6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0FQUExJQ0FUSU9OX0RBVEE8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19BUFBMSUNBVElPTl9EQVRBICAgICAgICAgICJhcHBsaWNhdGlvbi1kYXRhIgorPC9wcmU+Cis8cD4KK0FyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIChidWZmZXIpCis8L3A+Cis8cD4KK1NvbWUgZm9ybWF0cyBhbGxvdyBhcHBsaWNhdGlvbidzIHRvIGFkZCB0aGVpciBvd24gYXJiaXRyYXJ5IGRhdGEKK2ludG8gZmlsZXMuIFRoaXMgZGF0YSBpcyBhcHBsaWNhdGlvbidzIGRlcGVuZGVudC4KKzwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRBRy1JTUFHRS1PUklFTlRBVElPTjpDQVBTIj48L2E+PGgzPkdTVF9UQUdfSU1BR0VfT1JJRU5UQVRJT048L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19JTUFHRV9PUklFTlRBVElPTiAgICAgICAgICAgICJpbWFnZS1vcmllbnRhdGlvbiIKKzwvcHJlPgorPHA+CitSZXByZXNlbnRzIHRoZSAnT3JpZW50YXRpb24nIHRhZyBmcm9tIEVYSUYuIERlZmluZXMgaG93IHRoZSBpbWFnZQorc2hvdWxkIGJlIHJvdGF0ZWQgYW5kIG1pcnJvcmVkIGZvciBkaXNwbGF5LiAoc3RyaW5nKQorPC9wPgorPHA+CitUaGlzIHRhZyBoYXMgYSBwcmVkZWZpbmVkIHNldCBvZiBhbGxvd2VkIHZhbHVlczoKKyAgInJvdGF0ZS0wIgorICAicm90YXRlLTkwIgorICAicm90YXRlLTE4MCIKKyAgInJvdGF0ZS0yNzAiCisgICJmbGlwLXJvdGF0ZS0wIgorICAiZmxpcC1yb3RhdGUtOTAiCisgICJmbGlwLXJvdGF0ZS0xODAiCisgICJmbGlwLXJvdGF0ZS0yNzAiCis8L3A+Cis8cD4KK1RoZSBuYW1pbmcgaXMgYWRvcHRlZCBhY2NvcmRpbmcgdG8gYSBwb3NzaWJsZSB0cmFuc2Zvcm1hdGlvbiB0byBwZXJmb3JtCitvbiB0aGUgaW1hZ2UgdG8gZml4IGl0cyBvcmllbnRhdGlvbiwgb2J2aW91c2x5IGVxdWl2YWxlbnQgb3BlcmF0aW9ucyB3aWxsCit5aWVsZCB0aGUgc2FtZSByZXN1bHQuCis8L3A+Cis8cD4KK1JvdGF0aW9ucyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlcyBhcmUgaW4gY2xvY2t3aXNlIGRpcmVjdGlvbiBhbmQKKydmbGlwJyBtZWFucyBhbiBob3Jpem9udGFsIG1pcnJvcmluZy4KKzwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRhZy1yZWdpc3RlciI+PC9hPjxoMz5nc3RfdGFnX3JlZ2lzdGVyICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF90YWdfcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdGbGFnIiB0aXRsZT0iZW51bSBHc3RUYWdGbGFnIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnRmxhZzwvc3Bhbj48L2E+IGZsYWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmljazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpibHVyYjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdNZXJnZUZ1bmMiIHRpdGxlPSJHc3RUYWdNZXJnZUZ1bmMgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdNZXJnZUZ1bmM8L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVnaXN0ZXJzIGEgbmV3IHRhZyB0eXBlIGZvciB0aGUgdXNlIHdpdGggR1N0cmVhbWVyJ3MgdHlwZSBzeXN0ZW0uIElmIGEgdHlwZQord2l0aCB0aGF0IG5hbWUgaXMgYWxyZWFkeSByZWdpc3RlcmVkLCB0aGF0IG9uZSBpcyB1c2VkLgorVGhlIG9sZCByZWdpc3RyYXRpb24gbWF5IGhhdmUgdXNlZCBhIGRpZmZlcmVudCB0eXBlIGhvd2V2ZXIuIFNvIGRvbid0IHJlbHkKK29uIHlvdXIgc3VwcGxpZWQgdmFsdWVzLgorPC9wPgorPHA+CitJbXBvcnRhbnQ6IGlmIHlvdSBkbyBub3Qgc3VwcGx5IGEgbWVyZ2UgZnVuY3Rpb24gdGhlIGltcGxpY2F0aW9uIHdpbGwgYmUKK3RoYXQgdGhlcmUgY2FuIG9ubHkgYmUgb25lIHNpbmdsZSB2YWx1ZSBmb3IgdGhpcyB0YWcgaW4gYSB0YWcgbGlzdCBhbmQKK2FueSBhZGRpdGlvbmFsIHZhbHVlcyB3aWxsIHNpbGVudHkgYmUgZGlzY2FyZGVkIHdoZW4gYmVpbmcgYWRkZWQgKHVubGVzcworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1NRVJHRS1SRVBMQUNFOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVEFHX01FUkdFX1JFUExBQ0U8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1NRVJHRS1SRVBMQUNFLUFMTDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RBR19NRVJHRV9SRVBMQUNFX0FMTDwvc3Bhbj48L2E+LCBvcgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1NRVJHRS1QUkVQRU5EOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVEFHX01FUkdFX1BSRVBFTkQ8L3NwYW4+PC9hPiBpcyB1c2VkIGFzIG1lcmdlIG1vZGUsIGluIHdoaWNoIGNhc2UgdGhlIG5ldwordmFsdWUgd2lsbCByZXBsYWNlIHRoZSBvbGQgb25lIGluIHRoZSBsaXN0KS4KKzwvcD4KKzxwPgorVGhlIG1lcmdlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGZyb20gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWNvcHktdmFsdWUiIHRpdGxlPSJnc3RfdGFnX2xpc3RfY29weV92YWx1ZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFnX2xpc3RfY29weV92YWx1ZSgpPC9jb2RlPjwvYT4gd2hlbgoraXQgaXMgcmVxdWlyZWQgdGhhdCBvbmUgb3IgbW9yZSB2YWx1ZXMgZm9yIGEgdGFnIGJlIGNvbmRlbnNlZCBpbnRvCitvbmUgc2luZ2xlIHZhbHVlLiBUaGlzIG1heSBoYXBwZW4gZnJvbSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXN0cmluZyIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfc3RyaW5nICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YWdfbGlzdF9nZXRfc3RyaW5nKCk8L2NvZGU+PC9hPiwKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtaW50IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF9pbnQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3RhZ19saXN0X2dldF9pbnQoKTwvY29kZT48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWRvdWJsZSIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfZG91YmxlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YWdfbGlzdF9nZXRfZG91YmxlKCk8L2NvZGU+PC9hPiBldGMuIFdoYXQgd2lsbCBoYXBwZW4KK2V4YWN0bHkgaW4gdGhhdCBjYXNlIGRlcGVuZHMgb24gaG93IHRoZSB0YWcgd2FzIHJlZ2lzdGVyZWQgYW5kIGlmIGEKK21lcmdlIGZ1bmN0aW9uIHdhcyBzdXBwbGllZCBhbmQgaWYgc28gd2hpY2ggb25lLgorPC9wPgorPHA+CitUd28gZGVmYXVsdCBtZXJnZSBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLW1lcmdlLXVzZS1maXJzdCIgdGl0bGU9ImdzdF90YWdfbWVyZ2VfdXNlX2ZpcnN0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YWdfbWVyZ2VfdXNlX2ZpcnN0KCk8L2NvZGU+PC9hPiBhbmQKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbWVyZ2Utc3RyaW5ncy13aXRoLWNvbW1hIiB0aXRsZT0iZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEoKTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5hbWUgb3IgaWRlbnRpZmllciBzdHJpbmc8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZsYWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBmbGFnIGRlc2NyaWJpbmcgdGhlIHR5cGUgb2YgdGFnIGluZm88L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHR5cGUgdGhpcyBkYXRhIGlzIGluPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uaWNrPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmh1bWFuLXJlYWRhYmxlIG5hbWU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJsdXJiPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gYWJvdXQgdGhpcyB0YWc8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZnVuY3Rpb24gZm9yIG1lcmdpbmcgbXVsdGlwbGUgdmFsdWVzIG9mIHRoaXMgdGFnLCBvciBOVUxMPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRhZy1tZXJnZS11c2UtZmlyc3QiPjwvYT48aDM+Z3N0X3RhZ19tZXJnZV91c2VfZmlyc3QgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3RhZ19tZXJnZV91c2VfZmlyc3QgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKmRlc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitUaGlzIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHRoZSBmdW5jIGFyZ3VtZW50IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctcmVnaXN0ZXIiIHRpdGxlPSJnc3RfdGFnX3JlZ2lzdGVyICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YWdfcmVnaXN0ZXIoKTwvY29kZT48L2E+LgorSXQgY3JlYXRlcyBhIGNvcHkgb2YgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlIGxpc3QuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51bmluaXRpYWxpemVkIEdWYWx1ZSB0byBzdG9yZSByZXN1bHQgaW4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPiBjYWxsZXItYWxsb2NhdGVzXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkdWYWx1ZSB0byBjb3B5IGZyb208L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFnLW1lcmdlLXN0cmluZ3Mtd2l0aC1jb21tYSI+PC9hPjxoMz5nc3RfdGFnX21lcmdlX3N0cmluZ3Nfd2l0aF9jb21tYSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfdGFnX21lcmdlX3N0cmluZ3Nfd2l0aF9jb21tYSAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1RoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgdGhlIGZ1bmMgYXJndW1lbnQgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1yZWdpc3RlciIgdGl0bGU9ImdzdF90YWdfcmVnaXN0ZXIgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3RhZ19yZWdpc3RlcigpPC9jb2RlPjwvYT4uCitJdCBjb25jYXRlbmF0ZXMgYWxsIGdpdmVuIHN0cmluZ3MgdXNpbmcgYSBjb21tYS4gVGhlIHRhZyBtdXN0IGJlIHJlZ2lzdGVyZWQKK2FzIGEgR19UWVBFX1NUUklORyBvciB0aGlzIGZ1bmN0aW9uIHdpbGwgZmFpbC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVuaW5pdGlhbGl6ZWQgR1ZhbHVlIHRvIHN0b3JlIHJlc3VsdCBpbi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+IGNhbGxlci1hbGxvY2F0ZXNdPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+R1ZhbHVlIHRvIGNvcHkgZnJvbTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YWctZXhpc3RzIj48L2E+PGgzPmdzdF90YWdfZXhpc3RzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF90YWdfZXhpc3RzICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2tzIGlmIHRoZSBnaXZlbiB0eXBlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bmFtZSBvZiB0aGUgdGFnPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiB0aGUgdHlwZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFnLWdldC10eXBlIj48L2E+PGgzPmdzdF90YWdfZ2V0X3R5cGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdUeXBlPC9zcGFuPjwvYT4gICAgICAgICAgICAgICBnc3RfdGFnX2dldF90eXBlICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiB1c2VkIGZvciB0aGlzIHRhZy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHRhZzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gb2YgdGhpcyB0YWc8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFnLWdldC1uaWNrIj48L2E+PGgzPmdzdF90YWdfZ2V0X25pY2sgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICogICAgICAgZ3N0X3RhZ19nZXRfbmljayAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZXR1cm5zIHRoZSBodW1hbi1yZWFkYWJsZSBuYW1lIG9mIHRoaXMgdGFnLCBZb3UgbXVzdCBub3QgY2hhbmdlIG9yIGZyZWUKK3RoaXMgc3RyaW5nLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdGFnPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGh1bWFuLXJlYWRhYmxlIG5hbWUgb2YgdGhpcyB0YWc8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFnLWdldC1kZXNjcmlwdGlvbiI+PC9hPjxoMz5nc3RfdGFnX2dldF9kZXNjcmlwdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICBnc3RfdGFnX2dldF9kZXNjcmlwdGlvbiAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JldHVybnMgdGhlIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoaXMgdGFnLCBZb3UgbXVzdCBub3QgY2hhbmdlIG9yCitmcmVlIHRoaXMgc3RyaW5nLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdGFnPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoaXMgdGFnPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRhZy1nZXQtZmxhZyI+PC9hPjxoMz5nc3RfdGFnX2dldF9mbGFnICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdGbGFnIiB0aXRsZT0iZW51bSBHc3RUYWdGbGFnIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRhZ0ZsYWc8L3NwYW4+PC9hPiAgICAgICAgICBnc3RfdGFnX2dldF9mbGFnICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIGZsYWcgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZzwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHRhZzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBmbGFnIG9mIHRoaXMgdGFnLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YWctaXMtZml4ZWQiPjwvYT48aDM+Z3N0X3RhZ19pc19maXhlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfdGFnX2lzX2ZpeGVkICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NoZWNrcyBpZiB0aGUgZ2l2ZW4gdGFnIGlzIGZpeGVkLiBBIGZpeGVkIHRhZyBjYW4gb25seSBjb250YWluIG9uZSB2YWx1ZS4KK1VuZml4ZWQgdGFncyBjYW4gY29udGFpbiBsaXN0cyBvZiB2YWx1ZXMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRhZyB0byBjaGVjazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUsIGlmIHRoZSBnaXZlbiB0YWcgaXMgZml4ZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRhZy1saXN0LW5ldyI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfbmV3ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKiAgICAgICAgZ3N0X3RhZ19saXN0X25ldyAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGVzIGEgbmV3IGVtcHR5IEdzdFRhZ0xpc3QuCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdzdF90YWdfbGlzdF9mcmVlCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BbiBlbXB0eSB0YWcgbGlzdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFnLWxpc3QtbmV3LWZ1bGwiPjwvYT48aDM+Z3N0X3RhZ19saXN0X25ld19mdWxsICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKiAgICAgICAgZ3N0X3RhZ19saXN0X25ld19mdWxsICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlcyBhIG5ldyB0YWdsaXN0IGFuZCBhcHBlbmRzIHRoZSB2YWx1ZXMgZm9yIHRoZSBnaXZlbiB0YWdzLiBJdCBleHBlY3RzCit0YWctdmFsdWUgcGFpcnMgbGlrZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtYWRkIiB0aXRsZT0iZ3N0X3RhZ19saXN0X2FkZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFnX2xpc3RfYWRkKCk8L2NvZGU+PC9hPiwgYW5kIGEgTlVMTCB0ZXJtaW5hdG9yIGFmdGVyIHRoZQorbGFzdCBwYWlyLiBUaGUgdHlwZSBvZiB0aGUgdmFsdWVzIGlzIGltcGxpY2l0IGFuZCBpcyBkb2N1bWVudGVkIGluIHRoZSBBUEkKK3JlZmVyZW5jZSwgYnV0IGNhbiBhbHNvIGJlIHF1ZXJpZWQgYXQgcnVudGltZSB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctZ2V0LXR5cGUiIHRpdGxlPSJnc3RfdGFnX2dldF90eXBlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YWdfZ2V0X3R5cGUoKTwvY29kZT48L2E+LiBJdAoraXMgYW4gZXJyb3IgdG8gcGFzcyBhIHZhbHVlIG9mIGEgdHlwZSBub3QgbWF0Y2hpbmcgdGhlIHRhZyB0eXBlIGludG8gdGhpcworZnVuY3Rpb24uIFRoZSB0YWcgbGlzdCB3aWxsIG1ha2UgY29waWVzIG9mIGFueSBhcmd1bWVudHMgcGFzc2VkCisoZS5nLiBzdHJpbmdzLCBidWZmZXJzKS4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ3N0X3RhZ19saXN0X2ZyZWUKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGFnPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+TlVMTC10ZXJtaW5hdGVkIGxpc3Qgb2YgdmFsdWVzIHRvIHNldDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+LiBGcmVlIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWZyZWUiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZnJlZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFnX2xpc3RfZnJlZSgpPC9jb2RlPjwvYT4KK3doZW4gbm8gbG9uZ2VyIG5lZWRlZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YWctbGlzdC1uZXctZnVsbC12YWxpc3QiPjwvYT48aDM+Z3N0X3RhZ19saXN0X25ld19mdWxsX3ZhbGlzdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICogICAgICAgIGdzdF90YWdfbGlzdF9uZXdfZnVsbF92YWxpc3QgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZhX2xpc3Q8L3NwYW4+IHZhcl9hcmdzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSnVzdCBsaWtlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1uZXctZnVsbCIgdGl0bGU9ImdzdF90YWdfbGlzdF9uZXdfZnVsbCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFnX2xpc3RfbmV3X2Z1bGwoKTwvY29kZT48L2E+LCBvbmx5IHRoYXQgaXQgdGFrZXMgYSB2YV9saXN0IGFyZ3VtZW50LgorVXNlZnVsIG1vc3RseSBmb3IgbGFuZ3VhZ2UgYmluZGluZ3MuCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdzdF90YWdfbGlzdF9mcmVlCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFyX2FyZ3M8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGFnIC8gdmFsdWUgcGFpcnMgdG8gc2V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4uIEZyZWUgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZnJlZSIgdGl0bGU9ImdzdF90YWdfbGlzdF9mcmVlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YWdfbGlzdF9mcmVlKCk8L2NvZGU+PC9hPgord2hlbiBubyBsb25nZXIgbmVlZGVkLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWlzLXRhZy1saXN0Ij48L2E+PGgzPmdzdF9pc190YWdfbGlzdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfaXNfdGFnX2xpc3QgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY29uc3Rwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NvbnN0cG9pbnRlcjwvc3Bhbj48L2E+IHA8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDaGVja3MgaWYgdGhlIGdpdmVuIHBvaW50ZXIgaXMgYSB0YWdsaXN0LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnA8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+T2JqZWN0IHRoYXQgbWlnaHQgYmUgYSB0YWdsaXN0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSwgaWYgdGhlIGdpdmVuIHBvaW50ZXIgaXMgYSB0YWdsaXN0PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWlzLWVtcHR5Ij48L2E+PGgzPmdzdF90YWdfbGlzdF9pc19lbXB0eSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfdGFnX2xpc3RfaXNfZW1wdHkgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2tzIGlmIHRoZSBnaXZlbiB0YWdsaXN0IGlzIGVtcHR5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSB0YWdsaXN0IGlzIGVtcHR5LCBvdGhlcndpc2UgRkFMU0UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWNvcHkiPjwvYT48aDM+Z3N0X3RhZ19saXN0X2NvcHkgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqICAgICAgICBnc3RfdGFnX2xpc3RfY29weSAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ29waWVzIGEgZ2l2ZW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4uCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdzdF90YWdfbGlzdF9mcmVlCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5saXN0IHRvIGNvcHk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5jb3B5IG9mIHRoZSBnaXZlbiBsaXN0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWluc2VydCI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfaW5zZXJ0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF90YWdfbGlzdF9pbnNlcnQgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmludG88L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmZyb208L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VNb2RlIiB0aXRsZT0iZW51bSBHc3RUYWdNZXJnZU1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdNZXJnZU1vZGU8L3NwYW4+PC9hPiBtb2RlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSW5zZXJ0cyB0aGUgdGFncyBvZiB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZyb208L2NvZGU+PC9lbT4gbGlzdCBpbnRvIHRoZSBmaXJzdCBsaXN0IHVzaW5nIHRoZSBnaXZlbiBtb2RlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmludG88L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bGlzdCB0byBtZXJnZSBpbnRvPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mcm9tPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmxpc3QgdG8gbWVyZ2UgZnJvbTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bW9kZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbW9kZSB0byB1c2U8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFnLWxpc3QtbWVyZ2UiPjwvYT48aDM+Z3N0X3RhZ19saXN0X21lcmdlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKiAgICAgICAgZ3N0X3RhZ19saXN0X21lcmdlICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3QyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ01lcmdlTW9kZSIgdGl0bGU9ImVudW0gR3N0VGFnTWVyZ2VNb2RlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTWVyZ2VNb2RlPC9zcGFuPjwvYT4gbW9kZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK01lcmdlcyB0aGUgdHdvIGdpdmVuIGxpc3RzIGludG8gYSBuZXcgbGlzdC4gSWYgb25lIG9mIHRoZSBsaXN0cyBpcyBOVUxMLCBhCitjb3B5IG9mIHRoZSBvdGhlciBpcyByZXR1cm5lZC4gSWYgYm90aCBsaXN0cyBhcmUgTlVMTCwgTlVMTCBpcyByZXR1cm5lZC4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ3N0X3RhZ19saXN0X2ZyZWUKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0MTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5maXJzdCBsaXN0IHRvIG1lcmdlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0MjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zZWNvbmQgbGlzdCB0byBtZXJnZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bW9kZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbW9kZSB0byB1c2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3IGxpc3QuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFnLWxpc3QtZnJlZSI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZnJlZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfdGFnX2xpc3RfZnJlZSAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRnJlZXMgdGhlIGdpdmVuIGxpc3QgYW5kIGFsbCBhc3NvY2lhdGVkIHZhbHVlcy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbGlzdCB0byBmcmVlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIGlucHV0LiBEZWZhdWx0IGlzIHRyYW5zZmVyIG5vbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+aW48L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC10YWctc2l6ZSI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZ2V0X3RhZ19zaXplICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIGdzdF90YWdfbGlzdF9nZXRfdGFnX3NpemUgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2tzIGhvdyBtYW55IHZhbHVlIGFyZSBzdG9yZWQgaW4gdGhpcyB0YWcgbGlzdCBmb3IgdGhlIGdpdmVuIHRhZy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgdGFnbGlzdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB0YWcgdG8gcXVlcnk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgbnVtYmVyIG9mIHRhZ3Mgc3RvcmVkPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWFkZCI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfYWRkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF90YWdfbGlzdF9hZGQgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VNb2RlIiB0aXRsZT0iZW51bSBHc3RUYWdNZXJnZU1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdNZXJnZU1vZGU8L3NwYW4+PC9hPiBtb2RlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXRzIHRoZSB2YWx1ZXMgZm9yIHRoZSBnaXZlbiB0YWdzIHVzaW5nIHRoZSBzcGVjaWZpZWQgbW9kZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmxpc3QgdG8gc2V0IHRhZ3MgaW48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1vZGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG1vZGUgdG8gdXNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGFnPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+TlVMTC10ZXJtaW5hdGVkIGxpc3Qgb2YgdmFsdWVzIHRvIHNldDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YWctbGlzdC1hZGQtdmFsdWUiPjwvYT48aDM+Z3N0X3RhZ19saXN0X2FkZF92YWx1ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfdGFnX2xpc3RfYWRkX3ZhbHVlICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ01lcmdlTW9kZSIgdGl0bGU9ImVudW0gR3N0VGFnTWVyZ2VNb2RlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTWVyZ2VNb2RlPC9zcGFuPjwvYT4gbW9kZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgdGhlIEdWYWx1ZSBmb3IgYSBnaXZlbiB0YWcgdXNpbmcgdGhlIHNwZWNpZmllZCBtb2RlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bGlzdCB0byBzZXQgdGFncyBpbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bW9kZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbW9kZSB0byB1c2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50YWc8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkdWYWx1ZSBmb3IgdGhpcyB0YWc8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI0PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFnLWxpc3QtYWRkLXZhbHVlcyI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfYWRkX3ZhbHVlcyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfdGFnX2xpc3RfYWRkX3ZhbHVlcyAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ01lcmdlTW9kZSIgdGl0bGU9ImVudW0gR3N0VGFnTWVyZ2VNb2RlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTWVyZ2VNb2RlPC9zcGFuPjwvYT4gbW9kZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0cyB0aGUgR1ZhbHVlcyBmb3IgdGhlIGdpdmVuIHRhZ3MgdXNpbmcgdGhlIHNwZWNpZmllZCBtb2RlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bGlzdCB0byBzZXQgdGFncyBpbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bW9kZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbW9kZSB0byB1c2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50YWc8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5HVmFsdWVzIHRvIHNldDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YWctbGlzdC1hZGQtdmFsaXN0Ij48L2E+PGgzPmdzdF90YWdfbGlzdF9hZGRfdmFsaXN0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF90YWdfbGlzdF9hZGRfdmFsaXN0ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VNb2RlIiB0aXRsZT0iZW51bSBHc3RUYWdNZXJnZU1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdNZXJnZU1vZGU8L3NwYW4+PC9hPiBtb2RlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gdmFyX2FyZ3M8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXRzIHRoZSB2YWx1ZXMgZm9yIHRoZSBnaXZlbiB0YWdzIHVzaW5nIHRoZSBzcGVjaWZpZWQgbW9kZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmxpc3QgdG8gc2V0IHRhZ3MgaW48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1vZGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG1vZGUgdG8gdXNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGFnPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YXJfYXJnczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50YWcgLyB2YWx1ZSBwYWlycyB0byBzZXQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFnLWxpc3QtYWRkLXZhbGlzdC12YWx1ZXMiPjwvYT48aDM+Z3N0X3RhZ19saXN0X2FkZF92YWxpc3RfdmFsdWVzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF90YWdfbGlzdF9hZGRfdmFsaXN0X3ZhbHVlcyAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VNb2RlIiB0aXRsZT0iZW51bSBHc3RUYWdNZXJnZU1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdNZXJnZU1vZGU8L3NwYW4+PC9hPiBtb2RlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gdmFyX2FyZ3M8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXRzIHRoZSBHVmFsdWVzIGZvciB0aGUgZ2l2ZW4gdGFncyB1c2luZyB0aGUgc3BlY2lmaWVkIG1vZGUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5saXN0IHRvIHNldCB0YWdzIGluPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tb2RlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtb2RlIHRvIHVzZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRhZzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFyX2FyZ3M8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGFnIC8gR1ZhbHVlIHBhaXJzIHRvIHNldDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YWctbGlzdC1yZW1vdmUtdGFnIj48L2E+PGgzPmdzdF90YWdfbGlzdF9yZW1vdmVfdGFnICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF90YWdfbGlzdF9yZW1vdmVfdGFnICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVtb3ZlcyB0aGUgZ2l2ZW4gdGFnIGZyb20gdGhlIHRhZ2xpc3QuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5saXN0IHRvIHJlbW92ZSB0YWcgZnJvbTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRhZyB0byByZW1vdmU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFnLWxpc3QtZm9yZWFjaCI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZm9yZWFjaCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfdGFnX2xpc3RfZm9yZWFjaCAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0ZvcmVhY2hGdW5jIiB0aXRsZT0iR3N0VGFnRm9yZWFjaEZ1bmMgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdGb3JlYWNoRnVuYzwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDYWxscyB0aGUgZ2l2ZW4gZnVuY3Rpb24gZm9yIGVhY2ggdGFnIGluc2lkZSB0aGUgdGFnIGxpc3QuIE5vdGUgdGhhdCBpZiB0aGVyZQoraXMgbm8gdGFnLCB0aGUgZnVuY3Rpb24gd29uJ3QgYmUgY2FsbGVkIGF0IGFsbC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmxpc3QgdG8gaXRlcmF0ZSBvdmVyPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgZWFjaCB0YWcuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoZSBjYWxsYmFjayBpcyB2YWxpZCBvbmx5IGR1cmluZyB0aGUgY2FsbCB0byB0aGUgbWV0aG9kLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNjb3BlIGNhbGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VyIHNwZWNpZmllZCBkYXRhLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGlzIHBhcmFtZXRlciBpcyBhICd1c2VyX2RhdGEnLCBmb3IgY2FsbGJhY2tzOyBtYW55IGJpbmRpbmdzIGNhbiBwYXNzIE5VTEwgaGVyZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5jbG9zdXJlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC12YWx1ZS1pbmRleCI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZ2V0X3ZhbHVlX2luZGV4ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdWYWx1ZTwvc3Bhbj48L2E+ICogICAgICBnc3RfdGFnX2xpc3RfZ2V0X3ZhbHVlX2luZGV4ICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgdmFsdWUgdGhhdCBpcyBhdCB0aGUgZ2l2ZW4gaW5kZXggZm9yIHRoZSBnaXZlbiB0YWcgaW4gdGhlIGdpdmVuCitsaXN0LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGFnIHRvIHJlYWQgb3V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5udW1iZXIgb2YgZW50cnkgdG8gcmVhZCBvdXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgR1ZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIGVudHJ5IG9yIE5VTEwgaWYgdGhlCit0YWcgd2Fzbid0IGF2YWlsYWJsZSBvciB0aGUgdGFnIGRvZXNuJ3QgaGF2ZSBhcyBtYW55IGVudHJpZXMuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFnLWxpc3QtY29weS12YWx1ZSI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfY29weV92YWx1ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfdGFnX2xpc3RfY29weV92YWx1ZSAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb3BpZXMgdGhlIGNvbnRlbnRzIGZvciB0aGUgZ2l2ZW4gdGFnIGludG8gdGhlIHZhbHVlLAorbWVyZ2luZyBtdWx0aXBsZSB2YWx1ZXMgaW50byBvbmUgaWYgbXVsdGlwbGUgdmFsdWVzIGFyZSBhc3NvY2lhdGVkCit3aXRoIHRoZSB0YWcuCitZb3UgbXVzdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjZy12YWx1ZS11bnNldCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX3ZhbHVlX3Vuc2V0KCk8L2NvZGU+PC9hPiB0aGUgdmFsdWUgYWZ0ZXIgdXNlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dW5pbml0aWFsaXplZCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gdG8gY29weSBpbnRvLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT4gY2FsbGVyLWFsbG9jYXRlc108L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bGlzdCB0byBnZXQgdGhlIHRhZyBmcm9tPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGFnIHRvIHJlYWQgb3V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCBGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKK2dpdmVuIGxpc3QuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1jaGFyIj48L2E+PGgzPmdzdF90YWdfbGlzdF9nZXRfY2hhciAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfdGFnX2xpc3RfZ2V0X2NoYXIgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NvcGllcyB0aGUgY29udGVudHMgZm9yIHRoZSBnaXZlbiB0YWcgaW50byB0aGUgdmFsdWUsIG1lcmdpbmcgbXVsdGlwbGUgdmFsdWVzCitpbnRvIG9uZSBpZiBtdWx0aXBsZSB2YWx1ZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFnLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiB0byBnZXQgdGhlIHRhZyBmcm9tPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGFnIHRvIHJlYWQgb3V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5sb2NhdGlvbiBmb3IgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUsIGlmIGEgdmFsdWUgd2FzIGNvcGllZCwgRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCitnaXZlbiBsaXN0LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtY2hhci1pbmRleCI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZ2V0X2NoYXJfaW5kZXggKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3RhZ19saXN0X2dldF9jaGFyX2luZGV4ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIHZhbHVlIHRoYXQgaXMgYXQgdGhlIGdpdmVuIGluZGV4IGZvciB0aGUgZ2l2ZW4gdGFnIGluIHRoZSBnaXZlbgorbGlzdC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSB0YWcgZnJvbTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRhZyB0byByZWFkIG91dDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5kZXg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bnVtYmVyIG9mIGVudHJ5IHRvIHJlYWQgb3V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5sb2NhdGlvbiBmb3IgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUsIGlmIGEgdmFsdWUgd2FzIGNvcGllZCwgRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCitnaXZlbiBsaXN0LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtdWNoYXIiPjwvYT48aDM+Z3N0X3RhZ19saXN0X2dldF91Y2hhciAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfdGFnX2xpc3RfZ2V0X3VjaGFyICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VjaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VjaGFyPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ29waWVzIHRoZSBjb250ZW50cyBmb3IgdGhlIGdpdmVuIHRhZyBpbnRvIHRoZSB2YWx1ZSwgbWVyZ2luZyBtdWx0aXBsZSB2YWx1ZXMKK2ludG8gb25lIGlmIG11bHRpcGxlIHZhbHVlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWcuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgdGFnIGZyb208L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50YWcgdG8gcmVhZCBvdXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmxvY2F0aW9uIGZvciB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCBGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKK2dpdmVuIGxpc3QuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC11Y2hhci1pbmRleCI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZ2V0X3VjaGFyX2luZGV4ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF90YWdfbGlzdF9nZXRfdWNoYXJfaW5kZXggICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1Y2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmd1Y2hhcjwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIHZhbHVlIHRoYXQgaXMgYXQgdGhlIGdpdmVuIGluZGV4IGZvciB0aGUgZ2l2ZW4gdGFnIGluIHRoZSBnaXZlbgorbGlzdC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSB0YWcgZnJvbTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRhZyB0byByZWFkIG91dDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5kZXg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bnVtYmVyIG9mIGVudHJ5IHRvIHJlYWQgb3V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5sb2NhdGlvbiBmb3IgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUsIGlmIGEgdmFsdWUgd2FzIGNvcGllZCwgRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCitnaXZlbiBsaXN0LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtYm9vbGVhbiI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZ2V0X2Jvb2xlYW4gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3RhZ19saXN0X2dldF9ib29sZWFuICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb3BpZXMgdGhlIGNvbnRlbnRzIGZvciB0aGUgZ2l2ZW4gdGFnIGludG8gdGhlIHZhbHVlLCBtZXJnaW5nIG11bHRpcGxlIHZhbHVlcworaW50byBvbmUgaWYgbXVsdGlwbGUgdmFsdWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHRhZy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSB0YWcgZnJvbTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRhZyB0byByZWFkIG91dDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bG9jYXRpb24gZm9yIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFLCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIEZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQorZ2l2ZW4gbGlzdC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LWJvb2xlYW4taW5kZXgiPjwvYT48aDM+Z3N0X3RhZ19saXN0X2dldF9ib29sZWFuX2luZGV4ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF90YWdfbGlzdF9nZXRfYm9vbGVhbl9pbmRleCAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXRzIHRoZSB2YWx1ZSB0aGF0IGlzIGF0IHRoZSBnaXZlbiBpbmRleCBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgZ2l2ZW4KK2xpc3QuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgdGFnIGZyb208L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50YWcgdG8gcmVhZCBvdXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm51bWJlciBvZiBlbnRyeSB0byByZWFkIG91dDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bG9jYXRpb24gZm9yIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFLCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIEZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQorZ2l2ZW4gbGlzdC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LWludCI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZ2V0X2ludCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfdGFnX2xpc3RfZ2V0X2ludCAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb3BpZXMgdGhlIGNvbnRlbnRzIGZvciB0aGUgZ2l2ZW4gdGFnIGludG8gdGhlIHZhbHVlLCBtZXJnaW5nIG11bHRpcGxlIHZhbHVlcworaW50byBvbmUgaWYgbXVsdGlwbGUgdmFsdWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHRhZy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSB0YWcgZnJvbTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRhZyB0byByZWFkIG91dDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bG9jYXRpb24gZm9yIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFLCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIEZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQorZ2l2ZW4gbGlzdC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LWludC1pbmRleCI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZ2V0X2ludF9pbmRleCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfdGFnX2xpc3RfZ2V0X2ludF9pbmRleCAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIHZhbHVlIHRoYXQgaXMgYXQgdGhlIGdpdmVuIGluZGV4IGZvciB0aGUgZ2l2ZW4gdGFnIGluIHRoZSBnaXZlbgorbGlzdC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSB0YWcgZnJvbTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRhZyB0byByZWFkIG91dDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5kZXg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bnVtYmVyIG9mIGVudHJ5IHRvIHJlYWQgb3V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5sb2NhdGlvbiBmb3IgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUsIGlmIGEgdmFsdWUgd2FzIGNvcGllZCwgRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCitnaXZlbiBsaXN0LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtdWludCI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZ2V0X3VpbnQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3RhZ19saXN0X2dldF91aW50ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb3BpZXMgdGhlIGNvbnRlbnRzIGZvciB0aGUgZ2l2ZW4gdGFnIGludG8gdGhlIHZhbHVlLCBtZXJnaW5nIG11bHRpcGxlIHZhbHVlcworaW50byBvbmUgaWYgbXVsdGlwbGUgdmFsdWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHRhZy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSB0YWcgZnJvbTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRhZyB0byByZWFkIG91dDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bG9jYXRpb24gZm9yIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFLCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIEZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQorZ2l2ZW4gbGlzdC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LXVpbnQtaW5kZXgiPjwvYT48aDM+Z3N0X3RhZ19saXN0X2dldF91aW50X2luZGV4ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF90YWdfbGlzdF9nZXRfdWludF9pbmRleCAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXRzIHRoZSB2YWx1ZSB0aGF0IGlzIGF0IHRoZSBnaXZlbiBpbmRleCBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgZ2l2ZW4KK2xpc3QuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgdGFnIGZyb208L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50YWcgdG8gcmVhZCBvdXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm51bWJlciBvZiBlbnRyeSB0byByZWFkIG91dDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bG9jYXRpb24gZm9yIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFLCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIEZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQorZ2l2ZW4gbGlzdC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LWxvbmciPjwvYT48aDM+Z3N0X3RhZ19saXN0X2dldF9sb25nICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF90YWdfbGlzdF9nZXRfbG9uZyAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnbG9uZyI+PHNwYW4gY2xhc3M9InR5cGUiPmdsb25nPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ29waWVzIHRoZSBjb250ZW50cyBmb3IgdGhlIGdpdmVuIHRhZyBpbnRvIHRoZSB2YWx1ZSwgbWVyZ2luZyBtdWx0aXBsZSB2YWx1ZXMKK2ludG8gb25lIGlmIG11bHRpcGxlIHZhbHVlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWcuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgdGFnIGZyb208L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50YWcgdG8gcmVhZCBvdXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmxvY2F0aW9uIGZvciB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCBGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKK2dpdmVuIGxpc3QuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1sb25nLWluZGV4Ij48L2E+PGgzPmdzdF90YWdfbGlzdF9nZXRfbG9uZ19pbmRleCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfdGFnX2xpc3RfZ2V0X2xvbmdfaW5kZXggICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnbG9uZyI+PHNwYW4gY2xhc3M9InR5cGUiPmdsb25nPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgdmFsdWUgdGhhdCBpcyBhdCB0aGUgZ2l2ZW4gaW5kZXggZm9yIHRoZSBnaXZlbiB0YWcgaW4gdGhlIGdpdmVuCitsaXN0LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiB0byBnZXQgdGhlIHRhZyBmcm9tPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGFnIHRvIHJlYWQgb3V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5udW1iZXIgb2YgZW50cnkgdG8gcmVhZCBvdXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmxvY2F0aW9uIGZvciB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCBGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKK2dpdmVuIGxpc3QuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC11bG9uZyI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZ2V0X3Vsb25nICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF90YWdfbGlzdF9nZXRfdWxvbmcgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWxvbmciPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWxvbmc8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb3BpZXMgdGhlIGNvbnRlbnRzIGZvciB0aGUgZ2l2ZW4gdGFnIGludG8gdGhlIHZhbHVlLCBtZXJnaW5nIG11bHRpcGxlIHZhbHVlcworaW50byBvbmUgaWYgbXVsdGlwbGUgdmFsdWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHRhZy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSB0YWcgZnJvbTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRhZyB0byByZWFkIG91dDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bG9jYXRpb24gZm9yIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFLCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIEZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQorZ2l2ZW4gbGlzdC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LXVsb25nLWluZGV4Ij48L2E+PGgzPmdzdF90YWdfbGlzdF9nZXRfdWxvbmdfaW5kZXggKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3RhZ19saXN0X2dldF91bG9uZ19pbmRleCAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3Vsb25nIj48c3BhbiBjbGFzcz0idHlwZSI+Z3Vsb25nPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgdmFsdWUgdGhhdCBpcyBhdCB0aGUgZ2l2ZW4gaW5kZXggZm9yIHRoZSBnaXZlbiB0YWcgaW4gdGhlIGdpdmVuCitsaXN0LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiB0byBnZXQgdGhlIHRhZyBmcm9tPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGFnIHRvIHJlYWQgb3V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5udW1iZXIgb2YgZW50cnkgdG8gcmVhZCBvdXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmxvY2F0aW9uIGZvciB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCBGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKK2dpdmVuIGxpc3QuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1pbnQ2NCI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZ2V0X2ludDY0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF90YWdfbGlzdF9nZXRfaW50NjQgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb3BpZXMgdGhlIGNvbnRlbnRzIGZvciB0aGUgZ2l2ZW4gdGFnIGludG8gdGhlIHZhbHVlLCBtZXJnaW5nIG11bHRpcGxlIHZhbHVlcworaW50byBvbmUgaWYgbXVsdGlwbGUgdmFsdWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHRhZy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSB0YWcgZnJvbTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRhZyB0byByZWFkIG91dDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bG9jYXRpb24gZm9yIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFLCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIEZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQorZ2l2ZW4gbGlzdC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LWludDY0LWluZGV4Ij48L2E+PGgzPmdzdF90YWdfbGlzdF9nZXRfaW50NjRfaW5kZXggKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3RhZ19saXN0X2dldF9pbnQ2NF9pbmRleCAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgdmFsdWUgdGhhdCBpcyBhdCB0aGUgZ2l2ZW4gaW5kZXggZm9yIHRoZSBnaXZlbiB0YWcgaW4gdGhlIGdpdmVuCitsaXN0LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiB0byBnZXQgdGhlIHRhZyBmcm9tPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGFnIHRvIHJlYWQgb3V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5udW1iZXIgb2YgZW50cnkgdG8gcmVhZCBvdXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmxvY2F0aW9uIGZvciB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCBGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKK2dpdmVuIGxpc3QuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC11aW50NjQiPjwvYT48aDM+Z3N0X3RhZ19saXN0X2dldF91aW50NjQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3RhZ19saXN0X2dldF91aW50NjQgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ29waWVzIHRoZSBjb250ZW50cyBmb3IgdGhlIGdpdmVuIHRhZyBpbnRvIHRoZSB2YWx1ZSwgbWVyZ2luZyBtdWx0aXBsZSB2YWx1ZXMKK2ludG8gb25lIGlmIG11bHRpcGxlIHZhbHVlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWcuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgdGFnIGZyb208L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50YWcgdG8gcmVhZCBvdXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmxvY2F0aW9uIGZvciB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCBGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKK2dpdmVuIGxpc3QuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC11aW50NjQtaW5kZXgiPjwvYT48aDM+Z3N0X3RhZ19saXN0X2dldF91aW50NjRfaW5kZXggKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3RhZ19saXN0X2dldF91aW50NjRfaW5kZXggICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXRzIHRoZSB2YWx1ZSB0aGF0IGlzIGF0IHRoZSBnaXZlbiBpbmRleCBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgZ2l2ZW4KK2xpc3QuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgdGFnIGZyb208L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50YWcgdG8gcmVhZCBvdXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm51bWJlciBvZiBlbnRyeSB0byByZWFkIG91dDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bG9jYXRpb24gZm9yIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFLCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIEZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQorZ2l2ZW4gbGlzdC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LWZsb2F0Ij48L2E+PGgzPmdzdF90YWdfbGlzdF9nZXRfZmxvYXQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3RhZ19saXN0X2dldF9mbG9hdCAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NvcGllcyB0aGUgY29udGVudHMgZm9yIHRoZSBnaXZlbiB0YWcgaW50byB0aGUgdmFsdWUsIG1lcmdpbmcgbXVsdGlwbGUgdmFsdWVzCitpbnRvIG9uZSBpZiBtdWx0aXBsZSB2YWx1ZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFnLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiB0byBnZXQgdGhlIHRhZyBmcm9tPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGFnIHRvIHJlYWQgb3V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5sb2NhdGlvbiBmb3IgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUsIGlmIGEgdmFsdWUgd2FzIGNvcGllZCwgRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCitnaXZlbiBsaXN0LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtZmxvYXQtaW5kZXgiPjwvYT48aDM+Z3N0X3RhZ19saXN0X2dldF9mbG9hdF9pbmRleCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfdGFnX2xpc3RfZ2V0X2Zsb2F0X2luZGV4ICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXRzIHRoZSB2YWx1ZSB0aGF0IGlzIGF0IHRoZSBnaXZlbiBpbmRleCBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgZ2l2ZW4KK2xpc3QuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgdGFnIGZyb208L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50YWcgdG8gcmVhZCBvdXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm51bWJlciBvZiBlbnRyeSB0byByZWFkIG91dDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bG9jYXRpb24gZm9yIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFLCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIEZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQorZ2l2ZW4gbGlzdC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LWRvdWJsZSI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZSAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb3BpZXMgdGhlIGNvbnRlbnRzIGZvciB0aGUgZ2l2ZW4gdGFnIGludG8gdGhlIHZhbHVlLCBtZXJnaW5nIG11bHRpcGxlIHZhbHVlcworaW50byBvbmUgaWYgbXVsdGlwbGUgdmFsdWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHRhZy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSB0YWcgZnJvbTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRhZyB0byByZWFkIG91dDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bG9jYXRpb24gZm9yIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFLCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIEZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQorZ2l2ZW4gbGlzdC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LWRvdWJsZS1pbmRleCI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZV9pbmRleCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZV9pbmRleCAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIHZhbHVlIHRoYXQgaXMgYXQgdGhlIGdpdmVuIGluZGV4IGZvciB0aGUgZ2l2ZW4gdGFnIGluIHRoZSBnaXZlbgorbGlzdC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSB0YWcgZnJvbTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRhZyB0byByZWFkIG91dDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5kZXg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bnVtYmVyIG9mIGVudHJ5IHRvIHJlYWQgb3V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5sb2NhdGlvbiBmb3IgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUsIGlmIGEgdmFsdWUgd2FzIGNvcGllZCwgRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCitnaXZlbiBsaXN0LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtc3RyaW5nIj48L2E+PGgzPmdzdF90YWdfbGlzdF9nZXRfc3RyaW5nICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF90YWdfbGlzdF9nZXRfc3RyaW5nICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKip2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NvcGllcyB0aGUgY29udGVudHMgZm9yIHRoZSBnaXZlbiB0YWcgaW50byB0aGUgdmFsdWUsIHBvc3NpYmx5IG1lcmdpbmcKK211bHRpcGxlIHZhbHVlcyBpbnRvIG9uZSBpZiBtdWx0aXBsZSB2YWx1ZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFnLgorPC9wPgorPHA+CitVc2UgZ3N0X3RhZ19saXN0X2dldF9zdHJpbmdfaW5kZXggKGxpc3QsIHRhZywgMCwgdmFsdWUpIGlmIHlvdSB3YW50Cit0byByZXRyaWV2ZSB0aGUgZmlyc3Qgc3RyaW5nIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRhZyB1bm1vZGlmaWVkLgorPC9wPgorPHA+CitUaGUgcmVzdWx0aW5nIHN0cmluZyBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4gd2lsbCBiZSBpbiBVVEYtOCBlbmNvZGluZyBhbmQgc2hvdWxkIGJlCitmcmVlZCBieSB0aGUgY2FsbGVyIHVzaW5nIGdfZnJlZSB3aGVuIG5vIGxvbmdlciBuZWVkZWQuIFNpbmNlIDAuMTAuMjQgdGhlCityZXR1cm5lZCBzdHJpbmcgaXMgYWxzbyBndWFyYW50ZWVkIHRvIGJlIG5vbi1OVUxMIGFuZCBub24tZW1wdHkuCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdfZnJlZQorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiB0byBnZXQgdGhlIHRhZyBmcm9tPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGFnIHRvIHJlYWQgb3V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5sb2NhdGlvbiBmb3IgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+IGNhbGxlZS1hbGxvY2F0ZXNdWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCBGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKK2dpdmVuIGxpc3QuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1zdHJpbmctaW5kZXgiPjwvYT48aDM+Z3N0X3RhZ19saXN0X2dldF9zdHJpbmdfaW5kZXggKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3RhZ19saXN0X2dldF9zdHJpbmdfaW5kZXggICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXRzIHRoZSB2YWx1ZSB0aGF0IGlzIGF0IHRoZSBnaXZlbiBpbmRleCBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgZ2l2ZW4KK2xpc3QuCis8L3A+Cis8cD4KK1RoZSByZXN1bHRpbmcgc3RyaW5nIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPiB3aWxsIGJlIGluIFVURi04IGVuY29kaW5nIGFuZCBzaG91bGQgYmUKK2ZyZWVkIGJ5IHRoZSBjYWxsZXIgdXNpbmcgZ19mcmVlIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC4gU2luY2UgMC4xMC4yNCB0aGUKK3JldHVybmVkIHN0cmluZyBpcyBhbHNvIGd1YXJhbnRlZWQgdG8gYmUgbm9uLU5VTEwgYW5kIG5vbi1lbXB0eS4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ19mcmVlCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgdGFnIGZyb208L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50YWcgdG8gcmVhZCBvdXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm51bWJlciBvZiBlbnRyeSB0byByZWFkIG91dDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bG9jYXRpb24gZm9yIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPiBjYWxsZWUtYWxsb2NhdGVzXVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUsIGlmIGEgdmFsdWUgd2FzIGNvcGllZCwgRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCitnaXZlbiBsaXN0LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YWctbGlzdC1wZWVrLXN0cmluZy1pbmRleCI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfcGVla19zdHJpbmdfaW5kZXggKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3RhZ19saXN0X3BlZWtfc3RyaW5nX2luZGV4ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitQZWVrcyBhdCB0aGUgdmFsdWUgdGhhdCBpcyBhdCB0aGUgZ2l2ZW4gaW5kZXggZm9yIHRoZSBnaXZlbiB0YWcgaW4gdGhlIGdpdmVuCitsaXN0LgorPC9wPgorPHA+CitUaGUgcmVzdWx0aW5nIHN0cmluZyBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4gd2lsbCBiZSBpbiBVVEYtOCBlbmNvZGluZyBhbmQgZG9lc24ndCBuZWVkCit0byBiZSBmcmVlZCBieSB0aGUgY2FsbGVyLiBUaGUgcmV0dXJuZWQgc3RyaW5nIGlzIGFsc28gZ3VhcmFudGVlZCB0bworYmUgbm9uLU5VTEwgYW5kIG5vbi1lbXB0eS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSB0YWcgZnJvbTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRhZyB0byByZWFkIG91dDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5kZXg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bnVtYmVyIG9mIGVudHJ5IHRvIHJlYWQgb3V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5sb2NhdGlvbiBmb3IgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUsIGlmIGEgdmFsdWUgd2FzIHNldCwgRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCitnaXZlbiBsaXN0LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtcG9pbnRlciI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZ2V0X3BvaW50ZXIgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3RhZ19saXN0X2dldF9wb2ludGVyICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb3BpZXMgdGhlIGNvbnRlbnRzIGZvciB0aGUgZ2l2ZW4gdGFnIGludG8gdGhlIHZhbHVlLCBtZXJnaW5nIG11bHRpcGxlIHZhbHVlcworaW50byBvbmUgaWYgbXVsdGlwbGUgdmFsdWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHRhZy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSB0YWcgZnJvbTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRhZyB0byByZWFkIG91dDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bG9jYXRpb24gZm9yIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFLCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIEZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQorZ2l2ZW4gbGlzdC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LXBvaW50ZXItaW5kZXgiPjwvYT48aDM+Z3N0X3RhZ19saXN0X2dldF9wb2ludGVyX2luZGV4ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF90YWdfbGlzdF9nZXRfcG9pbnRlcl9pbmRleCAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXRzIHRoZSB2YWx1ZSB0aGF0IGlzIGF0IHRoZSBnaXZlbiBpbmRleCBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgZ2l2ZW4KK2xpc3QuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgdGFnIGZyb208L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50YWcgdG8gcmVhZCBvdXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm51bWJlciBvZiBlbnRyeSB0byByZWFkIG91dDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bG9jYXRpb24gZm9yIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFLCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIEZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQorZ2l2ZW4gbGlzdC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LWRhdGUiPjwvYT48aDM+Z3N0X3RhZ19saXN0X2dldF9kYXRlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF90YWdfbGlzdF9nZXRfZGF0ZSAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRGF0ZS1hbmQtVGltZS1GdW5jdGlvbnMuaHRtbCNHRGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEYXRlPC9zcGFuPjwvYT4gKip2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NvcGllcyB0aGUgZmlyc3QgZGF0ZSBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgdGFnbGlzdCBpbnRvIHRoZSB2YXJpYWJsZQorcG9pbnRlZCB0byBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4uIEZyZWUgdGhlIGRhdGUgd2l0aCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURhdGUtYW5kLVRpbWUtRnVuY3Rpb25zLmh0bWwjZy1kYXRlLWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19kYXRlX2ZyZWUoKTwvY29kZT48L2E+IHdoZW4gaXQgaXMgbm8gbG9uZ2VyCituZWVkZWQuCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdfZGF0ZV9mcmVlCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgdGFnIGZyb208L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50YWcgdG8gcmVhZCBvdXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFkZHJlc3Mgb2YgYSBHRGF0ZSBwb2ludGVyCit2YXJpYWJsZSB0byBzdG9yZSB0aGUgcmVzdWx0IGludG8uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPiBjYWxsZWUtYWxsb2NhdGVzXVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUsIGlmIGEgZGF0ZSB3YXMgY29waWVkLCBGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKK2dpdmVuIGxpc3Qgb3IgaWYgaXQgd2FzIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+TlVMTDwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtZGF0ZS1pbmRleCI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZ2V0X2RhdGVfaW5kZXggKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3RhZ19saXN0X2dldF9kYXRlX2luZGV4ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURhdGUtYW5kLVRpbWUtRnVuY3Rpb25zLmh0bWwjR0RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRGF0ZTwvc3Bhbj48L2E+ICoqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXRzIHRoZSBkYXRlIHRoYXQgaXMgYXQgdGhlIGdpdmVuIGluZGV4IGZvciB0aGUgZ2l2ZW4gdGFnIGluIHRoZSBnaXZlbgorbGlzdCBhbmQgY29waWVzIGl0IGludG8gdGhlIHZhcmlhYmxlIHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+LiBGcmVlIHRoZSBkYXRlCit3aXRoIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRGF0ZS1hbmQtVGltZS1GdW5jdGlvbnMuaHRtbCNnLWRhdGUtZnJlZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX2RhdGVfZnJlZSgpPC9jb2RlPjwvYT4gd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLgorPC9wPgorPHA+CitGcmVlLWZ1bmN0aW9uOiBnX2RhdGVfZnJlZQorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiB0byBnZXQgdGhlIHRhZyBmcm9tPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGFnIHRvIHJlYWQgb3V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5udW1iZXIgb2YgZW50cnkgdG8gcmVhZCBvdXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmxvY2F0aW9uIGZvciB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT4gY2FsbGVlLWFsbG9jYXRlc11bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFLCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIEZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQorZ2l2ZW4gbGlzdCBvciBpZiBpdCB3YXMgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5OVUxMPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1kYXRlLXRpbWUiPjwvYT48aDM+Z3N0X3RhZ19saXN0X2dldF9kYXRlX3RpbWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3RhZ19saXN0X2dldF9kYXRlX3RpbWUgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+ICoqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb3BpZXMgdGhlIGZpcnN0IGRhdGV0aW1lIGZvciB0aGUgZ2l2ZW4gdGFnIGluIHRoZSB0YWdsaXN0IGludG8gdGhlIHZhcmlhYmxlCitwb2ludGVkIHRvIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPi4gVW5yZWYgdGhlIGRhdGUgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS11bnJlZiIgdGl0bGU9ImdzdF9kYXRlX3RpbWVfdW5yZWYgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2RhdGVfdGltZV91bnJlZigpPC9jb2RlPjwvYT4gd2hlbgoraXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ3N0X2RhdGVfdGltZV91bnJlZgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiB0byBnZXQgdGhlIHRhZyBmcm9tPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGFnIHRvIHJlYWQgb3V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hZGRyZXNzIG9mIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+Citwb2ludGVyIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSByZXN1bHQgaW50by4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+IGNhbGxlZS1hbGxvY2F0ZXNdWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSwgaWYgYSBkYXRldGltZSB3YXMgY29waWVkLCBGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbgordGhlZ2l2ZW4gbGlzdCBvciBpZiBpdCB3YXMgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5OVUxMPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1kYXRlLXRpbWUtaW5kZXgiPjwvYT48aDM+Z3N0X3RhZ19saXN0X2dldF9kYXRlX3RpbWVfaW5kZXggKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3RhZ19saXN0X2dldF9kYXRlX3RpbWVfaW5kZXggICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjR3N0RGF0ZVRpbWUiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gKip2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIGRhdGV0aW1lIHRoYXQgaXMgYXQgdGhlIGdpdmVuIGluZGV4IGZvciB0aGUgZ2l2ZW4gdGFnIGluIHRoZSBnaXZlbgorbGlzdCBhbmQgY29waWVzIGl0IGludG8gdGhlIHZhcmlhYmxlIHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+LiBVbnJlZiB0aGUgZGF0ZXRpbWUKK3dpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtdW5yZWYiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX3VucmVmICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9kYXRlX3RpbWVfdW5yZWYoKTwvY29kZT48L2E+IHdoZW4gaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ3N0X2RhdGVfdGltZV91bnJlZgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiB0byBnZXQgdGhlIHRhZyBmcm9tPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWc8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGFnIHRvIHJlYWQgb3V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5udW1iZXIgb2YgZW50cnkgdG8gcmVhZCBvdXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmxvY2F0aW9uIGZvciB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT4gY2FsbGVlLWFsbG9jYXRlc11bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFLCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIEZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQorZ2l2ZW4gbGlzdCBvciBpZiBpdCB3YXMgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5OVUxMPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1idWZmZXIiPjwvYT48aDM+Z3N0X3RhZ19saXN0X2dldF9idWZmZXIgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3RhZ19saXN0X2dldF9idWZmZXIgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0IiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKip2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NvcGllcyB0aGUgZmlyc3QgYnVmZmVyIGZvciB0aGUgZ2l2ZW4gdGFnIGluIHRoZSB0YWdsaXN0IGludG8gdGhlIHZhcmlhYmxlCitwb2ludGVkIHRvIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPi4gRnJlZSB0aGUgYnVmZmVyIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXVucmVmIiB0aXRsZT0iZ3N0X2J1ZmZlcl91bnJlZiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3VucmVmKCk8L2NvZGU+PC9hPiB3aGVuIGl0IGlzCitubyBsb25nZXIgbmVlZGVkLgorPC9wPgorPHA+CitGcmVlLWZ1bmN0aW9uOiBnc3RfYnVmZmVyX3VucmVmCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgdGFnIGZyb208L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50YWcgdG8gcmVhZCBvdXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFkZHJlc3Mgb2YgYSBHc3RCdWZmZXIKK3BvaW50ZXIgdmFyaWFibGUgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbnRvLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT4gY2FsbGVlLWFsbG9jYXRlc11bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFLCBpZiBhIGJ1ZmZlciB3YXMgY29waWVkLCBGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKK2dpdmVuIGxpc3Qgb3IgaWYgaXQgd2FzIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+TlVMTDwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjM8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtYnVmZmVyLWluZGV4Ij48L2E+PGgzPmdzdF90YWdfbGlzdF9nZXRfYnVmZmVyX2luZGV4ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF90YWdfbGlzdF9nZXRfYnVmZmVyX2luZGV4ICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKip2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIGJ1ZmZlciB0aGF0IGlzIGF0IHRoZSBnaXZlbiBpbmRleCBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgZ2l2ZW4KK2xpc3QgYW5kIGNvcGllcyBpdCBpbnRvIHRoZSB2YXJpYWJsZSBwb2ludGVkIHRvIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPi4gRnJlZSB0aGUgYnVmZmVyCit3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci11bnJlZiIgdGl0bGU9ImdzdF9idWZmZXJfdW5yZWYgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl91bnJlZigpPC9jb2RlPjwvYT4gd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLgorPC9wPgorPHA+CitGcmVlLWZ1bmN0aW9uOiBnc3RfYnVmZmVyX3VucmVmCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgdGFnIGZyb208L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50YWcgdG8gcmVhZCBvdXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm51bWJlciBvZiBlbnRyeSB0byByZWFkIG91dDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YWRkcmVzcyBvZiBhIEdzdEJ1ZmZlcgorcG9pbnRlciB2YXJpYWJsZSB0byBzdG9yZSB0aGUgcmVzdWx0IGludG8uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPiBjYWxsZWUtYWxsb2NhdGVzXVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUsIGlmIGEgYnVmZmVyIHdhcyBjb3BpZWQsIEZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQorZ2l2ZW4gbGlzdCBvciBpZiBpdCB3YXMgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5OVUxMPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMzwvcD4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RUcmFjZS5odG1sIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0VHJhY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDcyMGI0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0VHJhY2UuaHRtbApAQCAtMCwwICsxLDU4MiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdzdFRyYWNlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZ3N0cmVhbWVyLXN1cHBvcnQuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIFN1cHBvcnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1oaWVyYXJjaHkuaHRtbCIgdGl0bGU9Ik9iamVjdCBIaWVyYXJjaHkiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItc3VwcG9ydC5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLWhpZXJhcmNoeS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3RUcmFjZS5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3RUcmFjZS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0VHJhY2UiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItR3N0VHJhY2UudG9wX29mX3BhZ2UiPjwvYT5Hc3RUcmFjZTwvc3Bhbj48L2gyPgorPHA+R3N0VHJhY2Ug4oCUIFRyYWNpbmcgZnVuY3Rpb25hbGl0eTwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RUcmFjZS5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisjaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OworCitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNHc3RUcmFjZSIgdGl0bGU9InN0cnVjdCBHc3RUcmFjZSI+R3N0VHJhY2U8L2E+OworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI0dzdFRyYWNlIiB0aXRsZT0ic3RydWN0IEdzdFRyYWNlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRyYWNlPC9zcGFuPjwvYT4gKiAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LXRyYWNlLW5ldyIgdGl0bGU9ImdzdF90cmFjZV9uZXcgKCkiPmdzdF90cmFjZV9uZXc8L2E+ICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpbGVuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LXRyYWNlLWRlc3Ryb3kiIHRpdGxlPSJnc3RfdHJhY2VfZGVzdHJveSAoKSI+Z3N0X3RyYWNlX2Rlc3Ryb3k8L2E+ICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI0dzdFRyYWNlIiB0aXRsZT0ic3RydWN0IEdzdFRyYWNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHJhY2U8L3NwYW4+PC9hPiAqdHJhY2U8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LXRyYWNlLWZsdXNoIiB0aXRsZT0iZ3N0X3RyYWNlX2ZsdXNoICgpIj5nc3RfdHJhY2VfZmx1c2g8L2E+ICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjR3N0VHJhY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0VHJhY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUcmFjZTwvc3Bhbj48L2E+ICp0cmFjZTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtdHJhY2UtdGV4dC1mbHVzaCIgdGl0bGU9ImdzdF90cmFjZV90ZXh0X2ZsdXNoICgpIj5nc3RfdHJhY2VfdGV4dF9mbHVzaDwvYT4gICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjR3N0VHJhY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0VHJhY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUcmFjZTwvc3Bhbj48L2E+ICp0cmFjZTwvY29kZT48L2VtPik7CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtdHJhY2UtYWRkLWVudHJ5IiB0aXRsZT0iZ3N0X3RyYWNlX2FkZF9lbnRyeSgpIj5nc3RfdHJhY2VfYWRkX2VudHJ5PC9hPiAgICAgICAgICAgICAgICAgKHRyYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZykKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI2dzdC10cmFjZS1nZXQtc2l6ZSIgdGl0bGU9ImdzdF90cmFjZV9nZXRfc2l6ZSgpIj5nc3RfdHJhY2VfZ2V0X3NpemU8L2E+ICAgICAgICAgICAgICAgICAgKHRyYWNlKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LXRyYWNlLWdldC1vZmZzZXQiIHRpdGxlPSJnc3RfdHJhY2VfZ2V0X29mZnNldCgpIj5nc3RfdHJhY2VfZ2V0X29mZnNldDwvYT4gICAgICAgICAgICAgICAgKHRyYWNlKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LXRyYWNlLWdldC1yZW1haW5pbmciIHRpdGxlPSJnc3RfdHJhY2VfZ2V0X3JlbWFpbmluZygpIj5nc3RfdHJhY2VfZ2V0X3JlbWFpbmluZzwvYT4gICAgICAgICAgICAgKHRyYWNlKQorPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LXRyYWNlLXNldC1kZWZhdWx0IiB0aXRsZT0iZ3N0X3RyYWNlX3NldF9kZWZhdWx0ICgpIj5nc3RfdHJhY2Vfc2V0X2RlZmF1bHQ8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjR3N0VHJhY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0VHJhY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUcmFjZTwvc3Bhbj48L2E+ICp0cmFjZTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtdHJhY2UtcmVhZC10c2MiIHRpdGxlPSJnc3RfdHJhY2VfcmVhZF90c2MgKCkiPmdzdF90cmFjZV9yZWFkX3RzYzwvYT4gICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqZHN0PC9jb2RlPjwvZW0+KTsKK2VudW0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI0dzdEFsbG9jVHJhY2VGbGFncyIgdGl0bGU9ImVudW0gR3N0QWxsb2NUcmFjZUZsYWdzIj5Hc3RBbGxvY1RyYWNlRmxhZ3M8L2E+Oworc3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjR3N0QWxsb2NUcmFjZSIgdGl0bGU9InN0cnVjdCBHc3RBbGxvY1RyYWNlIj5Hc3RBbGxvY1RyYWNlPC9hPjsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI2dzdC1hbGxvYy10cmFjZS1hdmFpbGFibGUiIHRpdGxlPSJnc3RfYWxsb2NfdHJhY2VfYXZhaWxhYmxlICgpIj5nc3RfYWxsb2NfdHJhY2VfYXZhaWxhYmxlPC9hPiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOworY29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPiAqICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtYWxsb2MtdHJhY2UtbGlzdCIgdGl0bGU9ImdzdF9hbGxvY190cmFjZV9saXN0ICgpIj5nc3RfYWxsb2NfdHJhY2VfbGlzdDwvYT4gICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5pbnQ8L3NwYW4+ICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LWFsbG9jLXRyYWNlLWxpdmUtYWxsIiB0aXRsZT0iZ3N0X2FsbG9jX3RyYWNlX2xpdmVfYWxsICgpIj5nc3RfYWxsb2NfdHJhY2VfbGl2ZV9hbGw8L2E+ICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LWFsbG9jLXRyYWNlLXByaW50LWFsbCIgdGl0bGU9ImdzdF9hbGxvY190cmFjZV9wcmludF9hbGwgKCkiPmdzdF9hbGxvY190cmFjZV9wcmludF9hbGw8L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtYWxsb2MtdHJhY2Utc2V0LWZsYWdzLWFsbCIgdGl0bGU9ImdzdF9hbGxvY190cmFjZV9zZXRfZmxhZ3NfYWxsICgpIj5nc3RfYWxsb2NfdHJhY2Vfc2V0X2ZsYWdzX2FsbDwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjR3N0QWxsb2NUcmFjZUZsYWdzIiB0aXRsZT0iZW51bSBHc3RBbGxvY1RyYWNlRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbGxvY1RyYWNlRmxhZ3M8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjR3N0QWxsb2NUcmFjZSIgdGl0bGU9InN0cnVjdCBHc3RBbGxvY1RyYWNlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEFsbG9jVHJhY2U8L3NwYW4+PC9hPiAqICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LWFsbG9jLXRyYWNlLWdldCIgdGl0bGU9ImdzdF9hbGxvY190cmFjZV9nZXQgKCkiPmdzdF9hbGxvY190cmFjZV9nZXQ8L2E+ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LWFsbG9jLXRyYWNlLXByaW50IiB0aXRsZT0iZ3N0X2FsbG9jX3RyYWNlX3ByaW50ICgpIj5nc3RfYWxsb2NfdHJhY2VfcHJpbnQ8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjR3N0QWxsb2NUcmFjZSIgdGl0bGU9InN0cnVjdCBHc3RBbGxvY1RyYWNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWxsb2NUcmFjZTwvc3Bhbj48L2E+ICp0cmFjZTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtYWxsb2MtdHJhY2UtcHJpbnQtbGl2ZSIgdGl0bGU9ImdzdF9hbGxvY190cmFjZV9wcmludF9saXZlICgpIj5nc3RfYWxsb2NfdHJhY2VfcHJpbnRfbGl2ZTwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LWFsbG9jLXRyYWNlLXNldC1mbGFncyIgdGl0bGU9ImdzdF9hbGxvY190cmFjZV9zZXRfZmxhZ3MgKCkiPmdzdF9hbGxvY190cmFjZV9zZXRfZmxhZ3M8L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNHc3RBbGxvY1RyYWNlIiB0aXRsZT0ic3RydWN0IEdzdEFsbG9jVHJhY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbGxvY1RyYWNlPC9zcGFuPjwvYT4gKnRyYWNlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNHc3RBbGxvY1RyYWNlRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEFsbG9jVHJhY2VGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jVHJhY2VGbGFnczwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+KTsKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI2dzdC1hbGxvYy10cmFjZS1yZWdpc3RlciIgdGl0bGU9ImdzdF9hbGxvY190cmFjZV9yZWdpc3RlcigpIj5nc3RfYWxsb2NfdHJhY2VfcmVnaXN0ZXI8L2E+ICAgICAgICAgICAgKG5hbWUpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtYWxsb2MtdHJhY2UtbmV3IiB0aXRsZT0iZ3N0X2FsbG9jX3RyYWNlX25ldygpIj5nc3RfYWxsb2NfdHJhY2VfbmV3PC9hPiAgICAgICAgICAgICAgICAgKHRyYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LWFsbG9jLXRyYWNlLWZyZWUiIHRpdGxlPSJnc3RfYWxsb2NfdHJhY2VfZnJlZSgpIj5nc3RfYWxsb2NfdHJhY2VfZnJlZTwvYT4gICAgICAgICAgICAgICAgKHRyYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtKQorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RUcmFjZS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK1RyYWNlcyBhbGxvd3MgdG8gdHJhY2sgb2JqZWN0IGFsbG9jYXRpb24uIFRoZXkgcHJvdmlkZSBhIGluc3RhbmNlIGNvdW50ZXIgcGVyCis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4uIFRoZSBjb3VudGVyIGlzIGluY3JlbWVudGVkIGZvciBlYWNoIG9iamVjdCBhbGxvY2F0ZWQgYW5kIGRlY3JlbWVudGVkCitpdCB3aGVuIGl0J3MgZnJlZWQuCis8L3A+Cis8cD4KKzwvcD4KKzxkaXYgY2xhc3M9ImV4YW1wbGUiPgorPGEgbmFtZT0iaWQ3MTA3MDUiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkV4YW1wbGXCoDE1LsKgVHJhY2luZyBvYmplY3QgaW5zdGFuY2VzPC9iPjwvcD4KKzxkaXYgY2xhc3M9ImV4YW1wbGUtY29udGVudHMiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KKyAgICAvLyB0cmFjZSB1bi1mcmVlZCBvYmplY3QgaW5zdGFuY2VzCisgICAgZ3N0X2FsbG9jX3RyYWNlX3NldF9mbGFnc19hbGwgKEdTVF9BTExPQ19UUkFDRV9MSVZFKTsKKyAgICBpZiAoIWdzdF9hbGxvY190cmFjZV9hdmFpbGFibGUgKCkpIHsKKyAgICAgIGdfd2FybmluZyAoIlRyYWNlIG5vdCBhdmFpbGFibGUgKHJlY29tcGlsZSB3aXRoIHRyYWNlIGVuYWJsZWQpLiIpOworICAgIH0KKyAgICBnc3RfYWxsb2NfdHJhY2VfcHJpbnRfbGl2ZSAoKTsKKyAgICAvLyBkbyBzb21ldGhpbmcgaGVyZQorICAgIGdzdF9hbGxvY190cmFjZV9wcmludF9saXZlICgpOworICA8L3ByZT48L2Rpdj4KKzwvZGl2PgorPHA+PGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj4KKzwvcD4KKzxwPgorTGFzdCByZXZpZXdlZCBvbiAyMDA1LTExLTIxICgwLjkuNSkKKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFRyYWNlLmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RUcmFjZSI+PC9hPjxoMz5zdHJ1Y3QgR3N0VHJhY2U8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RUcmFjZSB7Cit9OworPC9wcmU+Cis8cD4KK09wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjR3N0VHJhY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0VHJhY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUcmFjZTwvc3Bhbj48L2E+IHN0cnVjdHVyZS4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRyYWNlLW5ldyI+PC9hPjxoMz5nc3RfdHJhY2VfbmV3ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjR3N0VHJhY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0VHJhY2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0VHJhY2U8L3NwYW4+PC9hPiAqICAgICAgICAgIGdzdF90cmFjZV9uZXcgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmlsZW5hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZSBhIHJpbmdidWZmZXIgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4gaW4gdGhlIGZpbGUgd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmlsZW5hbWU8L2NvZGU+PC9lbT4gdG8KK3N0b3JlIHRyYWNlIHJlc3VsdHMgaW4uCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdzdF90cmFjZV9kZXN0cm95Cis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmlsZW5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBmaWxlbmFtZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbWF4IHNpemUgb2YgdGhlIGZpbGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjR3N0VHJhY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0VHJhY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUcmFjZTwvc3Bhbj48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRyYWNlLWRlc3Ryb3kiPjwvYT48aDM+Z3N0X3RyYWNlX2Rlc3Ryb3kgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3RyYWNlX2Rlc3Ryb3kgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjR3N0VHJhY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0VHJhY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUcmFjZTwvc3Bhbj48L2E+ICp0cmFjZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0ZsdXNoIGFuIGNsb3NlIHRoZSBwcmV2aW91c2x5IGFsbG9jYXRlZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHJhY2U8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRyYWNlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjR3N0VHJhY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0VHJhY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUcmFjZTwvc3Bhbj48L2E+IHRvIGRlc3Ryb3kuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQuIERlZmF1bHQgaXMgdHJhbnNmZXIgbm9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbjwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdHJhY2UtZmx1c2giPjwvYT48aDM+Z3N0X3RyYWNlX2ZsdXNoICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF90cmFjZV9mbHVzaCAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI0dzdFRyYWNlIiB0aXRsZT0ic3RydWN0IEdzdFRyYWNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHJhY2U8L3NwYW4+PC9hPiAqdHJhY2U8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitGbHVzaCBhbnkgcGVuZGluZyB0cmFjZSBlbnRyaWVzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50cmFjZTwvY29kZT48L2VtPiB0byB0aGUgdHJhY2UgZmlsZS4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50cmFjZTwvY29kZT48L2VtPiBjYW4gYmUgTlVMTCBpbiB3aGljaCBjYXNlIHRoZSBkZWZhdWx0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNHc3RUcmFjZSIgdGl0bGU9InN0cnVjdCBHc3RUcmFjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRyYWNlPC9zcGFuPjwvYT4gd2lsbCBiZQorZmx1c2hlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHJhY2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNHc3RUcmFjZSIgdGl0bGU9InN0cnVjdCBHc3RUcmFjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRyYWNlPC9zcGFuPjwvYT4gdG8gZmx1c2guPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10cmFjZS10ZXh0LWZsdXNoIj48L2E+PGgzPmdzdF90cmFjZV90ZXh0X2ZsdXNoICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF90cmFjZV90ZXh0X2ZsdXNoICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI0dzdFRyYWNlIiB0aXRsZT0ic3RydWN0IEdzdFRyYWNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHJhY2U8L3NwYW4+PC9hPiAqdHJhY2U8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitGbHVzaCBhbnkgcGVuZGluZyB0cmFjZSBlbnRyaWVzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50cmFjZTwvY29kZT48L2VtPiB0byB0aGUgdHJhY2UgZmlsZSwKK2Zvcm1hdHRlZCBhcyBhIHRleHQgbGluZSB3aXRoIHRpbWVzdGFtcCBhbmQgc2VxdWVuY2UgbnVtYmVycy4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50cmFjZTwvY29kZT48L2VtPiBjYW4gYmUgTlVMTCBpbiB3aGljaCBjYXNlIHRoZSBkZWZhdWx0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNHc3RUcmFjZSIgdGl0bGU9InN0cnVjdCBHc3RUcmFjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRyYWNlPC9zcGFuPjwvYT4gd2lsbCBiZQorZmx1c2hlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHJhY2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNHc3RUcmFjZSIgdGl0bGU9InN0cnVjdCBHc3RUcmFjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRyYWNlPC9zcGFuPjwvYT4gdG8gZmx1c2guPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10cmFjZS1hZGQtZW50cnkiPjwvYT48aDM+Z3N0X3RyYWNlX2FkZF9lbnRyeSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIGdzdF90cmFjZV9hZGRfZW50cnkodHJhY2Usc2VxLGRhdGEsbXNnKTwvcHJlPgorPHA+CitBZGQgYW4gZW50cnkgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRyYWNlPC9jb2RlPjwvZW0+IHdpdGggc2VxdWVuY2UgbnVtYmVyIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXE8L2NvZGU+PC9lbT4sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bXNnPC9jb2RlPjwvZW0+LgorSWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRyYWNlPC9jb2RlPjwvZW0+IGlzIE5VTEwsIHRoZSBlbnRyeSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBkZWZhdWx0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNHc3RUcmFjZSIgdGl0bGU9InN0cnVjdCBHc3RUcmFjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRyYWNlPC9zcGFuPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHJhY2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjR3N0VHJhY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0VHJhY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUcmFjZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlcTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHNlcXVlbmNlIG51bWJlcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZGF0YSB0byB0cmFjZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bXNnPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB0cmFjZSBtZXNzYWdlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRyYWNlLWdldC1zaXplIj48L2E+PGgzPmdzdF90cmFjZV9nZXRfc2l6ZSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIAlnc3RfdHJhY2VfZ2V0X3NpemUodHJhY2UpIAkoKHRyYWNlKS0mZ3Q7YnVmc2l6ZSkKKzwvcHJlPgorPHA+CitSZXRyaWV2ZSB0aGUgYnVmZmVyIHNpemUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRyYWNlPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50cmFjZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNHc3RUcmFjZSIgdGl0bGU9InN0cnVjdCBHc3RUcmFjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRyYWNlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdHJhY2UtZ2V0LW9mZnNldCI+PC9hPjxoMz5nc3RfdHJhY2VfZ2V0X29mZnNldCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIAlnc3RfdHJhY2VfZ2V0X29mZnNldCh0cmFjZSkgCSgodHJhY2UpLSZndDtidWZvZmZzZXQpCis8L3ByZT4KKzxwPgorUmV0cmlldmUgdGhlIGN1cnJlbnQgYnVmZmVyIG9mZnNldCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHJhY2U8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRyYWNlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI0dzdFRyYWNlIiB0aXRsZT0ic3RydWN0IEdzdFRyYWNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHJhY2U8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10cmFjZS1nZXQtcmVtYWluaW5nIj48L2E+PGgzPmdzdF90cmFjZV9nZXRfcmVtYWluaW5nKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgCWdzdF90cmFjZV9nZXRfcmVtYWluaW5nKHRyYWNlKSAJKCh0cmFjZSktJmd0O2J1ZnNpemUgLSAodHJhY2UpLSZndDtidWZvZmZzZXQpCis8L3ByZT4KKzxwPgorUmV0cmlldmUgdGhlIHJlbWFpbmluZyBzaXplIGluIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHJhY2U8L2NvZGU+PC9lbT4gYnVmZmVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50cmFjZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNHc3RUcmFjZSIgdGl0bGU9InN0cnVjdCBHc3RUcmFjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRyYWNlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdHJhY2Utc2V0LWRlZmF1bHQiPjwvYT48aDM+Z3N0X3RyYWNlX3NldF9kZWZhdWx0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF90cmFjZV9zZXRfZGVmYXVsdCAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI0dzdFRyYWNlIiB0aXRsZT0ic3RydWN0IEdzdFRyYWNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHJhY2U8L3NwYW4+PC9hPiAqdHJhY2U8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXQgdGhlIGRlZmF1bHQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI0dzdFRyYWNlIiB0aXRsZT0ic3RydWN0IEdzdFRyYWNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHJhY2U8L3NwYW4+PC9hPiB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHJhY2U8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRyYWNlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjR3N0VHJhY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0VHJhY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUcmFjZTwvc3Bhbj48L2E+IHRvIHNldCBhcyB0aGUgZGVmYXVsdC48L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXRyYWNlLXJlYWQtdHNjIj48L2E+PGgzPmdzdF90cmFjZV9yZWFkX3RzYyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfdHJhY2VfcmVhZF90c2MgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqZHN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhIHBsYXRmb3JtIGluZGVwZW5kZW50IHRpbWVyIHZhbHVlIHRoYXQgY2FuIGJlIHVzZWQgaW4KK2JlbmNobWFya3MuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4ob3V0KSBwb2ludGVyIHRvIGhvbGQgdGhlIHJlc3VsdC48L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0QWxsb2NUcmFjZUZsYWdzIj48L2E+PGgzPmVudW0gR3N0QWxsb2NUcmFjZUZsYWdzPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGVudW0geworICBHU1RfQUxMT0NfVFJBQ0VfTk9ORSAgICAgID0gMCwKKyAgR1NUX0FMTE9DX1RSQUNFX0xJVkUgICAgICA9ICgxICZsdDsmbHQ7IDApLAorICBHU1RfQUxMT0NfVFJBQ0VfTUVNX0xJVkXCoD0gKDEgJmx0OyZsdDsgMSkKK30gR3N0QWxsb2NUcmFjZUZsYWdzOworPC9wcmU+Cis8cD4KK0ZsYWdzIGluZGljYXRpbmcgd2hpY2ggdHJhY2luZyBmZWF0dXJlIHRvIGVuYWJsZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUFMTE9DLVRSQUNFLU5PTkU6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0FMTE9DX1RSQUNFX05PTkU8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPk5vIHRyYWNpbmcgc3BlY2lmaWVkIG9yIGRlc2lyZWQuIFNpbmNlIDAuMTAuMzYuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQUxMT0MtVFJBQ0UtTElWRTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQUxMT0NfVFJBQ0VfTElWRTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VHJhY2UgbnVtYmVyIG9mIG5vbi1mcmVlZCBtZW1vcnkuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQUxMT0MtVFJBQ0UtTUVNLUxJVkU6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0FMTE9DX1RSQUNFX01FTV9MSVZFPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UcmFjZSBwb2ludGVycyBvZiB1bmZyZWVkIG1lbW9yeS4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEFsbG9jVHJhY2UiPjwvYT48aDM+c3RydWN0IEdzdEFsbG9jVHJhY2U8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RBbGxvY1RyYWNlIHsKKyAgZ2NoYXIJCSpuYW1lOworICBnaW50CQkgZmxhZ3M7CisKKyAgZ2ludAkJIGxpdmU7CisgIEdTTGlzdMKgKm1lbV9saXZlOworfTsKKzwvcHJlPgorPHA+CitUaGUgbWFpbiB0cmFjaW5nIG9iamVjdAorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEFsbG9jVHJhY2UubmFtZSI+PC9hPm5hbWU8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBuYW1lIG9mIHRoZSB0cmFjaW5nIG9iamVjdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QWxsb2NUcmFjZS5mbGFncyI+PC9hPmZsYWdzPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5GbGFncyBmb3IgdGhpcyBvYmplY3Q8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEFsbG9jVHJhY2UubGl2ZSI+PC9hPmxpdmU8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPmNvdW50ZXIgZm9yIGxpdmUgbWVtb3J5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU2luZ2x5LUxpbmtlZC1MaXN0cy5odG1sI0dTTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTTGlzdDwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QWxsb2NUcmFjZS5tZW0tbGl2ZSI+PC9hPm1lbV9saXZlPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5saXN0IHdpdGggcG9pbnRlcnMgdG8gdW5mcmVlZCBtZW1vcnk8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYWxsb2MtdHJhY2UtYXZhaWxhYmxlIj48L2E+PGgzPmdzdF9hbGxvY190cmFjZV9hdmFpbGFibGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2FsbG9jX3RyYWNlX2F2YWlsYWJsZSAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDaGVjayBpZiBhbGxvYyB0cmFjaW5nIHdhcyBjb21waWxlZCBpbnRvIHRoZSBjb3JlCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBjb3JlIHdhcyBjb21waWxlZCB3aXRoIGFsbG9jCit0cmFjaW5nIGVuYWJsZWQuPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1hbGxvYy10cmFjZS1saXN0Ij48L2E+PGgzPmdzdF9hbGxvY190cmFjZV9saXN0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HTGlzdDwvc3Bhbj48L2E+ICogICAgICAgZ3N0X2FsbG9jX3RyYWNlX2xpc3QgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgYSBsaXN0IG9mIGFsbCByZWdpc3RlcmVkIGFsbG9jIHRyYWNlIG9iamVjdHMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIEdMaXN0IG9mIEdzdEFsbG9jVHJhY2Ugb2JqZWN0cy48L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWFsbG9jLXRyYWNlLWxpdmUtYWxsIj48L2E+PGgzPmdzdF9hbGxvY190cmFjZV9saXZlX2FsbCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5pbnQ8L3NwYW4+ICAgICAgICAgICAgICAgICBnc3RfYWxsb2NfdHJhY2VfbGl2ZV9hbGwgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCB0aGUgdG90YWwgbnVtYmVyIG9mIGxpdmUgcmVnaXN0ZXJlZCBhbGxvYyB0cmFjZSBvYmplY3RzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHRvdGFsIG51bWJlciBvZiBsaXZlIHJlZ2lzdGVyZWQgYWxsb2MgdHJhY2Ugb2JqZWN0cy48L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWFsbG9jLXRyYWNlLXByaW50LWFsbCI+PC9hPjxoMz5nc3RfYWxsb2NfdHJhY2VfcHJpbnRfYWxsICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9hbGxvY190cmFjZV9wcmludF9hbGwgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUHJpbnQgdGhlIHN0YXR1cyBvZiBhbGwgcmVnaXN0ZXJlZCBhbGxvYyB0cmFjZSBvYmplY3RzLgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYWxsb2MtdHJhY2Utc2V0LWZsYWdzLWFsbCI+PC9hPjxoMz5nc3RfYWxsb2NfdHJhY2Vfc2V0X2ZsYWdzX2FsbCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYWxsb2NfdHJhY2Vfc2V0X2ZsYWdzX2FsbCAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNHc3RBbGxvY1RyYWNlRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEFsbG9jVHJhY2VGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jVHJhY2VGbGFnczwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRW5hYmxlIHRoZSBzcGVjaWZpZWQgb3B0aW9ucyBvbiBhbGwgcmVnaXN0ZXJlZCBhbGxvYyB0cmFjZQorb2JqZWN0cy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZ3M8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG9wdGlvbnMgdG8gZW5hYmxlPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1hbGxvYy10cmFjZS1nZXQiPjwvYT48aDM+Z3N0X2FsbG9jX3RyYWNlX2dldCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI0dzdEFsbG9jVHJhY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0QWxsb2NUcmFjZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RBbGxvY1RyYWNlPC9zcGFuPjwvYT4gKiAgICAgZ3N0X2FsbG9jX3RyYWNlX2dldCAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0IHRoZSBuYW1lZCBhbGxvYyB0cmFjZSBvYmplY3QuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmFtZSBvZiB0aGUgYWxsb2MgdHJhY2Ugb2JqZWN0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBHc3RBbGxvY1RyYWNlIHdpdGggdGhlIGdpdmVuIG5hbWUgb3IgTlVMTCB3aGVuCitubyBhbGxvYyB0cmFjZXIgd2FzIHJlZ2lzdGVyZWQgd2l0aCB0aGF0IG5hbWUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWFsbG9jLXRyYWNlLXByaW50Ij48L2E+PGgzPmdzdF9hbGxvY190cmFjZV9wcmludCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYWxsb2NfdHJhY2VfcHJpbnQgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNHc3RBbGxvY1RyYWNlIiB0aXRsZT0ic3RydWN0IEdzdEFsbG9jVHJhY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbGxvY1RyYWNlPC9zcGFuPjwvYT4gKnRyYWNlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUHJpbnQgdGhlIHN0YXR1cyBvZiB0aGUgZ2l2ZW4gR3N0QWxsb2NUcmFjZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHJhY2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIEdzdEFsbG9jVHJhY2UgdG8gcHJpbnQ8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWFsbG9jLXRyYWNlLXByaW50LWxpdmUiPjwvYT48aDM+Z3N0X2FsbG9jX3RyYWNlX3ByaW50X2xpdmUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2FsbG9jX3RyYWNlX3ByaW50X2xpdmUgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitQcmludCB0aGUgc3RhdHVzIG9mIGFsbCByZWdpc3RlcmVkIGFsbG9jIHRyYWNlIG9iamVjdHMsIGlnbm9yaW5nIHRob3NlCit3aXRob3V0IGxpdmUgb2JqZWN0cy4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWFsbG9jLXRyYWNlLXNldC1mbGFncyI+PC9hPjxoMz5nc3RfYWxsb2NfdHJhY2Vfc2V0X2ZsYWdzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9hbGxvY190cmFjZV9zZXRfZmxhZ3MgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI0dzdEFsbG9jVHJhY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0QWxsb2NUcmFjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jVHJhY2U8L3NwYW4+PC9hPiAqdHJhY2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI0dzdEFsbG9jVHJhY2VGbGFncyIgdGl0bGU9ImVudW0gR3N0QWxsb2NUcmFjZUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWxsb2NUcmFjZUZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitFbmFibGUgdGhlIGdpdmVuIGZlYXR1cmVzIG9uIHRoZSBnaXZlbiBHc3RBbGxvY1RyYWNlIG9iamVjdC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50cmFjZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgR3N0QWxsb2NUcmFjZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZ3M8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZmxhZ3MgdG8gc2V0PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWFsbG9jLXRyYWNlLXJlZ2lzdGVyIj48L2E+PGgzPmdzdF9hbGxvY190cmFjZV9yZWdpc3RlcigpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lwqBnc3RfYWxsb2NfdHJhY2VfcmVnaXN0ZXIobmFtZSkgX2dzdF9hbGxvY190cmFjZV9yZWdpc3RlciAobmFtZSk7Cis8L3ByZT4KKzxwPgorUmVnaXN0ZXIgYSBuZXcgYWxsb2MgdHJhY2VyIHdpdGggdGhlIGdpdmVuIG5hbWUKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgbmFtZSBvZiB0aGUgdHJhY2VyIG9iamVjdDwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYWxsb2MtdHJhY2UtbmV3Ij48L2E+PGgzPmdzdF9hbGxvY190cmFjZV9uZXcoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBnc3RfYWxsb2NfdHJhY2VfbmV3KHRyYWNlLCBtZW0pPC9wcmU+Cis8cD4KK1VzZSB0aGUgdHJhY2VyIHRvIHRyYWNlIGEgbmV3IG1lbW9yeSBhbGxvY2F0aW9uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHJhY2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIHRyYWNlciB0byB1c2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgbWVtb3J5IGFsbG9jYXRlZDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1hbGxvYy10cmFjZS1mcmVlIj48L2E+PGgzPmdzdF9hbGxvY190cmFjZV9mcmVlKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgZ3N0X2FsbG9jX3RyYWNlX2ZyZWUodHJhY2UsIG1lbSk8L3ByZT4KKzxwPgorVHJhY2UgYSBtZW1vcnkgZnJlZSBvcGVyYXRpb24KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50cmFjZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgdHJhY2VyIHRvIHVzZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBtZW1vcnkgdGhhdCBpcyBmcmVlZDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFlODU2ZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwKQEAgLTAsMCArMSw0MDkgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5Hc3RUeXBlRmluZDwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwiIHRpdGxlPSJHc3RUYXNrUG9vbCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0VHlwZUZpbmRGYWN0b3J5Ij4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNnc3RyZWFtZXItR3N0VHlwZUZpbmQuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItR3N0VHlwZUZpbmQuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLnRvcF9vZl9wYWdlIj48L2E+R3N0VHlwZUZpbmQ8L3NwYW4+PC9oMj4KKzxwPkdzdFR5cGVGaW5kIOKAlCBTdHJlYW0gdHlwZSBkZXRlY3Rpb248L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKKworc3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmQiIHRpdGxlPSJzdHJ1Y3QgR3N0VHlwZUZpbmQiPkdzdFR5cGVGaW5kPC9hPjsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZEZ1bmN0aW9uIiB0aXRsZT0iR3N0VHlwZUZpbmRGdW5jdGlvbiAoKSI+KkdzdFR5cGVGaW5kRnVuY3Rpb248L2E+KSAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmQiIHRpdGxlPSJzdHJ1Y3QgR3N0VHlwZUZpbmQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZDwvc3Bhbj48L2E+ICpmaW5kPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPik7CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZFByb2JhYmlsaXR5IiB0aXRsZT0iZW51bSBHc3RUeXBlRmluZFByb2JhYmlsaXR5Ij5Hc3RUeXBlRmluZFByb2JhYmlsaXR5PC9hPjsKK2NvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKiAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNnc3QtdHlwZS1maW5kLXBlZWsiIHRpdGxlPSJnc3RfdHlwZV9maW5kX3BlZWsgKCkiPmdzdF90eXBlX2ZpbmRfcGVlazwvYT4gICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZCIgdGl0bGU9InN0cnVjdCBHc3RUeXBlRmluZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kPC9zcGFuPjwvYT4gKmZpbmQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjZ3N0LXR5cGUtZmluZC1zdWdnZXN0IiB0aXRsZT0iZ3N0X3R5cGVfZmluZF9zdWdnZXN0ICgpIj5nc3RfdHlwZV9maW5kX3N1Z2dlc3Q8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmQiIHRpdGxlPSJzdHJ1Y3QgR3N0VHlwZUZpbmQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZDwvc3Bhbj48L2E+ICpmaW5kPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gcHJvYmFiaWxpdHk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI2dzdC10eXBlLWZpbmQtc3VnZ2VzdC1zaW1wbGUiIHRpdGxlPSJnc3RfdHlwZV9maW5kX3N1Z2dlc3Rfc2ltcGxlICgpIj5nc3RfdHlwZV9maW5kX3N1Z2dlc3Rfc2ltcGxlPC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmQiIHRpdGxlPSJzdHJ1Y3QgR3N0VHlwZUZpbmQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZDwvc3Bhbj48L2E+ICpmaW5kPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gcHJvYmFiaWxpdHk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPHNwYW4gY2xhc3M9InR5cGUiPmNoYXI8L3NwYW4+ICptZWRpYV90eXBlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxzcGFuIGNsYXNzPSJ0eXBlIj5jaGFyPC9zcGFuPiAqZmllbGRuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI2dzdC10eXBlLWZpbmQtZ2V0LWxlbmd0aCIgdGl0bGU9ImdzdF90eXBlX2ZpbmRfZ2V0X2xlbmd0aCAoKSI+Z3N0X3R5cGVfZmluZF9nZXRfbGVuZ3RoPC9hPiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dzdFR5cGVGaW5kIiB0aXRsZT0ic3RydWN0IEdzdFR5cGVGaW5kIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmQ8L3NwYW4+PC9hPiAqZmluZDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNnc3QtdHlwZS1maW5kLXJlZ2lzdGVyIiB0aXRsZT0iZ3N0X3R5cGVfZmluZF9yZWdpc3RlciAoKSI+Z3N0X3R5cGVfZmluZF9yZWdpc3RlcjwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gKnBsdWdpbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gcmFuazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmRGdW5jdGlvbiIgdGl0bGU9IkdzdFR5cGVGaW5kRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZEZ1bmN0aW9uPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqZXh0ZW5zaW9uczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKnBvc3NpYmxlX2NhcHM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBkYXRhPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRGF0YXNldHMuaHRtbCNHRGVzdHJveU5vdGlmeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT4gZGF0YV9ub3RpZnk8L2NvZGU+PC9lbT4pOworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFsbG93IHlvdSB0byBkZXRlY3QgdGhlIG1lZGlhIHR5cGUgb2YgYW4gdW5rbm93bgorc3RyZWFtLgorPC9wPgorPHA+CitMYXN0IHJldmlld2VkIG9uIDIwMDUtMTEtMDkgKDAuOS40KQorPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFR5cGVGaW5kIj48L2E+PGgzPnN0cnVjdCBHc3RUeXBlRmluZDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFR5cGVGaW5kIHsKKyAgLyogcHJpdmF0ZSB0byB0aGUgY2FsbGVyIG9mIHRoZSB0eXBlZmluZCBmdW5jdGlvbiAqLworICBjb25zdCBndWludDggKiAgKCogcGVlaykgICAgICAgKGdwb2ludGVyICAgICAgICAgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50NjQgICAgICAgICAgIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgIHNpemUpOworCisgIHZvaWQgICAgICAgICAgICAoKiBzdWdnZXN0KSAgICAoZ3BvaW50ZXIgICAgICAgICBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgcHJvYmFiaWxpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3N0Q2FwcyAqICBjYXBzKTsKKworICBncG9pbnRlciAgICAgICAgIGRhdGE7CisKKyAgLyogb3B0aW9uYWwgKi8KKyAgZ3VpbnQ2NCAgICAgICAgICgqIGdldF9sZW5ndGgpIChncG9pbnRlciBkYXRhKTsKK307Cis8L3ByZT4KKzxwPgorT2JqZWN0IHRoYXQgc3RvcmVzIHR5cGVmaW5kIGNhbGxiYWNrcy4gVG8gdXNlIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0VHlwZUZpbmRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmRGYWN0b3J5PC9zcGFuPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RUeXBlRmluZC5wZWVrIj48L2E+cGVlazwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+TWV0aG9kIHRvIHBlZWsgZGF0YS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0VHlwZUZpbmQuc3VnZ2VzdCI+PC9hPnN1Z2dlc3Q8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPk1ldGhvZCB0byBzdWdnZXN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB3aXRoIGEgZ2l2ZW4gcHJvYmFiaWxpdHkuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFR5cGVGaW5kLmRhdGEiPjwvYT5kYXRhPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgZGF0YSB1c2VkIGJ5IHRoZSBjYWxsZXIgb2YgdGhlIHR5cGVmaW5kaW5nIGZ1bmN0aW9uLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RUeXBlRmluZC5nZXQtbGVuZ3RoIj48L2E+Z2V0X2xlbmd0aDwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UmV0dXJucyB0aGUgbGVuZ3RoIG9mIGN1cnJlbnQgZGF0YS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RUeXBlRmluZEZ1bmN0aW9uIj48L2E+PGgzPkdzdFR5cGVGaW5kRnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgKCpHc3RUeXBlRmluZEZ1bmN0aW9uKSAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmQiIHRpdGxlPSJzdHJ1Y3QgR3N0VHlwZUZpbmQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZDwvc3Bhbj48L2E+ICpmaW5kPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0EgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBieSB0eXBlZmluZGluZy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maW5kPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dzdFR5cGVGaW5kIiB0aXRsZT0ic3RydWN0IEdzdFR5cGVGaW5kIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmQ8L3NwYW4+PC9hPiBzdHJ1Y3R1cmU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+b3B0aW9ubmFsIGRhdGEgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb248L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RUeXBlRmluZFByb2JhYmlsaXR5Ij48L2E+PGgzPmVudW0gR3N0VHlwZUZpbmRQcm9iYWJpbGl0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBlbnVtIHsKKyAgR1NUX1RZUEVfRklORF9OT05FID0gMCwKKyAgR1NUX1RZUEVfRklORF9NSU5JTVVNID0gMSwKKyAgR1NUX1RZUEVfRklORF9QT1NTSUJMRSA9IDUwLAorICBHU1RfVFlQRV9GSU5EX0xJS0VMWSA9IDgwLAorICBHU1RfVFlQRV9GSU5EX05FQVJMWV9DRVJUQUlOID0gOTksCisgIEdTVF9UWVBFX0ZJTkRfTUFYSU1VTSA9IDEwMAorfSBHc3RUeXBlRmluZFByb2JhYmlsaXR5OworPC9wcmU+Cis8cD4KK1RoZSBwcm9iYWJpbGl0eSBvZiB0aGUgdHlwZWZpbmQgZnVuY3Rpb24uIEhpZ2hlciB2YWx1ZXMgaGF2ZSBtb3JlIGNlcnRhaW50eQoraW4gZG9pbmcgYSByZWxpYWJsZSB0eXBlZmluZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVRZUEUtRklORC1OT05FOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9UWVBFX0ZJTkRfTk9ORTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dHlwZSB1bmRldGVjdGVkLiBTaW5jZSAwLjEwLjM2LgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVRZUEUtRklORC1NSU5JTVVNOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9UWVBFX0ZJTkRfTUlOSU1VTTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dW5saWtlbHkgdHlwZWZpbmQuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtVFlQRS1GSU5ELVBPU1NJQkxFOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9UWVBFX0ZJTkRfUE9TU0lCTEU8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnBvc3NpYmxlIHR5cGUgZGV0ZWN0ZWQuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtVFlQRS1GSU5ELUxJS0VMWTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfVFlQRV9GSU5EX0xJS0VMWTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bGlrZWx5IGEgdHlwZSB3YXMgZGV0ZWN0ZWQuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtVFlQRS1GSU5ELU5FQVJMWS1DRVJUQUlOOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9UWVBFX0ZJTkRfTkVBUkxZX0NFUlRBSU48L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPm5lYXJseSBjZXJ0YWluIHRoYXQgYSB0eXBlIHdhcyBkZXRlY3RlZC4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1UWVBFLUZJTkQtTUFYSU1VTTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfVFlQRV9GSU5EX01BWElNVU08L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnZlcnkgY2VydGFpbiBhIHR5cGUgd2FzIGRldGVjdGVkLgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXR5cGUtZmluZC1wZWVrIj48L2E+PGgzPmdzdF90eXBlX2ZpbmRfcGVlayAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDg8L3NwYW4+PC9hPiAqICAgICAgZ3N0X3R5cGVfZmluZF9wZWVrICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmQiIHRpdGxlPSJzdHJ1Y3QgR3N0VHlwZUZpbmQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZDwvc3Bhbj48L2E+ICpmaW5kPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0dXJucyB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4gYnl0ZXMgb2YgdGhlIHN0cmVhbSB0byBpZGVudGlmeSBiZWdpbm5pbmcgYXQgb2Zmc2V0LiBJZgorb2Zmc2V0IGlzIGEgcG9zaXRpdmUgbnVtYmVyLCB0aGUgb2Zmc2V0IGlzIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlCitzdHJlYW0sIGlmIG9mZnNldCBpcyBhIG5lZ2F0aXZlIG51bWJlciB0aGUgb2Zmc2V0IGlzIHJlbGF0aXZlIHRvIHRoZSBlbmQgb2YKK3RoZSBzdHJlYW0uIFRoZSByZXR1cm5lZCBtZW1vcnkgaXMgdmFsaWQgdW50aWwgdGhlIHR5cGVmaW5kaW5nIGZ1bmN0aW9uCityZXR1cm5zIGFuZCBtdXN0IG5vdCBiZSBmcmVlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maW5kPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmQiIHRpdGxlPSJzdHJ1Y3QgR3N0VHlwZUZpbmQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZDwvc3Bhbj48L2E+IG9iamVjdCB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZCB3aXRoPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIG9mZnNldDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHJldHVybjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSByZXF1ZXN0ZWQgZGF0YSwgb3IgTlVMTAoraWYgdGhhdCBkYXRhIGlzIG5vdCBhdmFpbGFibGUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiBsZW5ndGg9c2l6ZV08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdHlwZS1maW5kLXN1Z2dlc3QiPjwvYT48aDM+Z3N0X3R5cGVfZmluZF9zdWdnZXN0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF90eXBlX2ZpbmRfc3VnZ2VzdCAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dzdFR5cGVGaW5kIiB0aXRsZT0ic3RydWN0IEdzdFR5cGVGaW5kIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmQ8L3NwYW4+PC9hPiAqZmluZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHByb2JhYmlsaXR5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0lmIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dzdFR5cGVGaW5kRnVuY3Rpb24iIHRpdGxlPSJHc3RUeXBlRmluZEZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmRGdW5jdGlvbjwvc3Bhbj48L2E+IGNhbGxzIHRoaXMgZnVuY3Rpb24gaXQgc3VnZ2VzdHMgdGhlIGNhcHMgd2l0aCB0aGUKK2dpdmVuIHByb2JhYmlsaXR5LiBBIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZEZ1bmN0aW9uIiB0aXRsZT0iR3N0VHlwZUZpbmRGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kRnVuY3Rpb248L3NwYW4+PC9hPiBtYXkgc3VwcGx5IGRpZmZlcmVudCBzdWdnZXN0aW9ucworaW4gb25lIGNhbGwuCitJdCBpcyB1cCB0byB0aGUgY2FsbGVyIG9mIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmRGdW5jdGlvbiIgdGl0bGU9IkdzdFR5cGVGaW5kRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZEZ1bmN0aW9uPC9zcGFuPjwvYT4gdG8gaW50ZXJwcmV0IHRoZXNlIHZhbHVlcy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maW5kPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmQiIHRpdGxlPSJzdHJ1Y3QgR3N0VHlwZUZpbmQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZDwvc3Bhbj48L2E+IG9iamVjdCB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZCB3aXRoPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcm9iYWJpbGl0eTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgcHJvYmFiaWxpdHkgaW4gcGVyY2VudCB0aGF0IHRoZSBzdWdnZXN0aW9uIGlzIHJpZ2h0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBmaXhlZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gc3VnZ2VzdDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10eXBlLWZpbmQtc3VnZ2VzdC1zaW1wbGUiPjwvYT48aDM+Z3N0X3R5cGVfZmluZF9zdWdnZXN0X3NpbXBsZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfdHlwZV9maW5kX3N1Z2dlc3Rfc2ltcGxlICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZCIgdGl0bGU9InN0cnVjdCBHc3RUeXBlRmluZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kPC9zcGFuPjwvYT4gKmZpbmQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBwcm9iYWJpbGl0eTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8c3BhbiBjbGFzcz0idHlwZSI+Y2hhcjwvc3Bhbj4gKm1lZGlhX3R5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPHNwYW4gY2xhc3M9InR5cGUiPmNoYXI8L3NwYW4+ICpmaWVsZG5hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSWYgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmRGdW5jdGlvbiIgdGl0bGU9IkdzdFR5cGVGaW5kRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZEZ1bmN0aW9uPC9zcGFuPjwvYT4gY2FsbHMgdGhpcyBmdW5jdGlvbiBpdCBzdWdnZXN0cyB0aGUgY2FwcyB3aXRoIHRoZQorZ2l2ZW4gcHJvYmFiaWxpdHkuIEEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dzdFR5cGVGaW5kRnVuY3Rpb24iIHRpdGxlPSJHc3RUeXBlRmluZEZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmRGdW5jdGlvbjwvc3Bhbj48L2E+IG1heSBzdXBwbHkgZGlmZmVyZW50IHN1Z2dlc3Rpb25zCitpbiBvbmUgY2FsbC4gSXQgaXMgdXAgdG8gdGhlIGNhbGxlciBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dzdFR5cGVGaW5kRnVuY3Rpb24iIHRpdGxlPSJHc3RUeXBlRmluZEZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmRGdW5jdGlvbjwvc3Bhbj48L2E+IHRvIGludGVycHJldAordGhlc2UgdmFsdWVzLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI2dzdC10eXBlLWZpbmQtc3VnZ2VzdCIgdGl0bGU9ImdzdF90eXBlX2ZpbmRfc3VnZ2VzdCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdHlwZV9maW5kX3N1Z2dlc3QoKTwvY29kZT48L2E+LCBvbmx5IHRoYXQgaW5zdGVhZCBvZgorcGFzc2luZyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBhcmd1bWVudCB5b3UgY2FuIGNyZWF0ZSB0aGUgY2FwcyBvbiB0aGUgZmx5IGluIHRoZSBzYW1lCit3YXkgYXMgeW91IGNhbiB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW5ldy1zaW1wbGUiIHRpdGxlPSJnc3RfY2Fwc19uZXdfc2ltcGxlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jYXBzX25ld19zaW1wbGUoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitNYWtlIHN1cmUgeW91IHRlcm1pbmF0ZSB0aGUgbGlzdCBvZiBhcmd1bWVudHMgd2l0aCBhIE5VTEwgYXJndW1lbnQgYW5kIHRoYXQKK3RoZSB2YWx1ZXMgcGFzc2VkIGhhdmUgdGhlIGNvcnJlY3QgdHlwZSAoaW4gdGVybXMgb2Ygd2lkdGggaW4gYnl0ZXMgd2hlbgorcGFzc2VkIHRvIHRoZSB2YXJhcmcgZnVuY3Rpb24gLSB0aGlzIGFwcGxpZXMgcGFydGljdWxhcmx5IHRvIGdkb3VibGUgYW5kCitndWludDY0IGFyZ3VtZW50cykuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmluZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dzdFR5cGVGaW5kIiB0aXRsZT0ic3RydWN0IEdzdFR5cGVGaW5kIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmQ8L3NwYW4+PC9hPiBvYmplY3QgdGhlIGZ1bmN0aW9uIHdhcyBjYWxsZWQgd2l0aDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJvYmFiaWxpdHk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIHByb2JhYmlsaXR5IGluIHBlcmNlbnQgdGhhdCB0aGUgc3VnZ2VzdGlvbiBpcyByaWdodDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVkaWFfdHlwZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbWVkaWEgdHlwZSBvZiB0aGUgc3VnZ2VzdGVkIGNhcHM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpZWxkbmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5maXJzdCBmaWVsZCBvZiB0aGUgc3VnZ2VzdGVkIGNhcHMsIG9yIE5VTEw8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hZGRpdGlvbmFsIGFyZ3VtZW50cyB0byB0aGUgc3VnZ2VzdGVkIGNhcHMgaW4gdGhlIHNhbWUgZm9ybWF0IGFzIHRoZQorYXJndW1lbnRzIHBhc3NlZCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtbmV3IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9uZXcgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3N0cnVjdHVyZV9uZXcoKTwvY29kZT48L2E+IChpZS4gdHJpcGxldHMgb2YgZmllbGQgbmFtZSwKK2ZpZWxkIEdUeXBlIGFuZCBmaWVsZCB2YWx1ZSk8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdHlwZS1maW5kLWdldC1sZW5ndGgiPjwvYT48aDM+Z3N0X3R5cGVfZmluZF9nZXRfbGVuZ3RoICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgZ3N0X3R5cGVfZmluZF9nZXRfbGVuZ3RoICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmQiIHRpdGxlPSJzdHJ1Y3QgR3N0VHlwZUZpbmQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZDwvc3Bhbj48L2E+ICpmaW5kPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0IHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgc3RyZWFtLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpbmQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZCIgdGl0bGU9InN0cnVjdCBHc3RUeXBlRmluZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kPC9zcGFuPjwvYT4gdGhlIGZ1bmN0aW9uIHdhcyBjYWxsZWQgd2l0aDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBsZW5ndGggb2YgdGhlIGRhdGEgc3RyZWFtLCBvciAwIGlmIGl0IGlzIG5vdCBhdmFpbGFibGUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXR5cGUtZmluZC1yZWdpc3RlciI+PC9hPjxoMz5nc3RfdHlwZV9maW5kX3JlZ2lzdGVyICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF90eXBlX2ZpbmRfcmVnaXN0ZXIgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gKnBsdWdpbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gcmFuazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmRGdW5jdGlvbiIgdGl0bGU9IkdzdFR5cGVGaW5kRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZEZ1bmN0aW9uPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqZXh0ZW5zaW9uczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKnBvc3NpYmxlX2NhcHM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBkYXRhPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRGF0YXNldHMuaHRtbCNHRGVzdHJveU5vdGlmeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT4gZGF0YV9ub3RpZnk8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWdpc3RlcnMgYSBuZXcgdHlwZWZpbmQgZnVuY3Rpb24gdG8gYmUgdXNlZCBmb3IgdHlwZWZpbmRpbmcuIEFmdGVyCityZWdpc3RlcmluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgYXZhaWxhYmxlIGZvciB0eXBlZmluZGluZy4KK1RoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IGNhbGxlZCBkdXJpbmcgYW4gZWxlbWVudCdzIHBsdWdpbiBpbml0aWFsaXphdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wbHVnaW48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiwgb3IgTlVMTCBmb3IgYSBzdGF0aWMgdHlwZWZpbmQgZnVuY3Rpb24gKG5vdGUgdGhhdAorcGFzc2luZyBOVUxMIG9ubHkgd29ya3MgaW4gR1N0cmVhbWVyIDAuMTAuMTYgYW5kIGxhdGVyKTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgbmFtZSBmb3IgcmVnaXN0ZXJpbmc8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJhbms8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIHJhbmsgKG9yIGltcG9ydGFuY2UpIG9mIHRoaXMgdHlwZWZpbmQgZnVuY3Rpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZEZ1bmN0aW9uIiB0aXRsZT0iR3N0VHlwZUZpbmRGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kRnVuY3Rpb248L3NwYW4+PC9hPiB0byB1c2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV4dGVuc2lvbnM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+T3B0aW9uYWwgZXh0ZW5zaW9ucyB0aGF0IGNvdWxkIGJlbG9uZyB0byB0aGlzIHR5cGUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiB6ZXJvLXRlcm1pbmF0ZWQ9MV1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gdXRmOF08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBvc3NpYmxlX2NhcHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+T3B0aW9uYWxseSB0aGUgY2FwcyB0aGF0IGNvdWxkIGJlIHJldHVybmVkIHdoZW4gdHlwZWZpbmRpbmcKK3N1Y2NlZWRzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPk9wdGlvbmFsIHVzZXIgZGF0YS4gVGhpcyB1c2VyIGRhdGEgbXVzdCBiZSBhdmFpbGFibGUgdW50aWwgdGhlIHBsdWdpbgoraXMgdW5sb2FkZWQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhX25vdGlmeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRGF0YXNldHMuaHRtbCNHRGVzdHJveU5vdGlmeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT4gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPiB3aGVuIHRoZSBwbHVnaW4KK2lzIHVubG9hZGVkLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgb24gc3VjY2VzcywgRkFMU0Ugb3RoZXJ3aXNlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ4MDA3MwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbApAQCAtMCwwICsxLDYxOCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdzdFVyaUhhbmRsZXI8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kRmFjdG9yeSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLnNpZ25hbHMiIGNsYXNzPSJzaG9ydGN1dCI+U2lnbmFsczwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlciI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLnRvcF9vZl9wYWdlIj48L2E+R3N0VXJpSGFuZGxlcjwvc3Bhbj48L2gyPgorPHA+R3N0VXJpSGFuZGxlciDigJQgSW50ZXJmYWNlIHRvIGVhc2UgVVJJIGhhbmRsaW5nIGluIHBsdWdpbnMuPC9wPgorPC90ZD4KKzx0ZCB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgorPC90cj48L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPGEgbmFtZT0iR3N0VVJJSGFuZGxlciI+PC9hPjxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7CisKKyAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJSGFuZGxlci1zdHJ1Y3QiIHRpdGxlPSJHc3RVUklIYW5kbGVyIj5Hc3RVUklIYW5kbGVyPC9hPjsKK3N0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJSGFuZGxlckludGVyZmFjZSIgdGl0bGU9InN0cnVjdCBHc3RVUklIYW5kbGVySW50ZXJmYWNlIj5Hc3RVUklIYW5kbGVySW50ZXJmYWNlPC9hPjsKK2VudW0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJVHlwZSIgdGl0bGU9ImVudW0gR3N0VVJJVHlwZSI+R3N0VVJJVHlwZTwvYT47CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dTVC1VUkktVFlQRS1JUy1WQUxJRDpDQVBTIiB0aXRsZT0iR1NUX1VSSV9UWVBFX0lTX1ZBTElEKCkiPkdTVF9VUklfVFlQRV9JU19WQUxJRDwvYT4gICAgICAgICAgICAgICAodHlwZSkKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1wcm90b2NvbC1pcy12YWxpZCIgdGl0bGU9ImdzdF91cmlfcHJvdG9jb2xfaXNfdmFsaWQgKCkiPmdzdF91cmlfcHJvdG9jb2xfaXNfdmFsaWQ8L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnByb3RvY29sPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1wcm90b2NvbC1pcy1zdXBwb3J0ZWQiIHRpdGxlPSJnc3RfdXJpX3Byb3RvY29sX2lzX3N1cHBvcnRlZCAoKSI+Z3N0X3VyaV9wcm90b2NvbF9pc19zdXBwb3J0ZWQ8L2E+ICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJVHlwZSIgdGl0bGU9ImVudW0gR3N0VVJJVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVSSVR5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnByb3RvY29sPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1pcy12YWxpZCIgdGl0bGU9ImdzdF91cmlfaXNfdmFsaWQgKCkiPmdzdF91cmlfaXNfdmFsaWQ8L2E+ICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnVyaTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC11cmktaGFzLXByb3RvY29sIiB0aXRsZT0iZ3N0X3VyaV9oYXNfcHJvdG9jb2wgKCkiPmdzdF91cmlfaGFzX3Byb3RvY29sPC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnVyaTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwcm90b2NvbDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC11cmktZ2V0LXByb3RvY29sIiB0aXRsZT0iZ3N0X3VyaV9nZXRfcHJvdG9jb2wgKCkiPmdzdF91cmlfZ2V0X3Byb3RvY29sPC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnVyaTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC11cmktZ2V0LWxvY2F0aW9uIiB0aXRsZT0iZ3N0X3VyaV9nZXRfbG9jYXRpb24gKCkiPmdzdF91cmlfZ2V0X2xvY2F0aW9uPC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnVyaTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC11cmktY29uc3RydWN0IiB0aXRsZT0iZ3N0X3VyaV9jb25zdHJ1Y3QgKCkiPmdzdF91cmlfY29uc3RydWN0PC9hPiAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnByb3RvY29sPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmxvY2F0aW9uPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICogICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LWZpbGVuYW1lLXRvLXVyaSIgdGl0bGU9ImdzdF9maWxlbmFtZV90b191cmkgKCkiPmdzdF9maWxlbmFtZV90b191cmk8L2E+ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpbGVuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gKiplcnJvcjwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LWVsZW1lbnQtbWFrZS1mcm9tLXVyaSIgdGl0bGU9ImdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkgKCkiPmdzdF9lbGVtZW50X21ha2VfZnJvbV91cmk8L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSVR5cGUiIHRpdGxlPSJlbnVtIEdzdFVSSVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVUklUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp1cmk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZWxlbWVudG5hbWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLWhhbmRsZXItZ2V0LXVyaS10eXBlIiB0aXRsZT0iZ3N0X3VyaV9oYW5kbGVyX2dldF91cmlfdHlwZSAoKSI+Z3N0X3VyaV9oYW5kbGVyX2dldF91cmlfdHlwZTwvYT4gICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJSGFuZGxlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVSSUhhbmRsZXI8L3NwYW4+PC9hPiAqaGFuZGxlcjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC11cmktaGFuZGxlci1nZXQtcHJvdG9jb2xzIiB0aXRsZT0iZ3N0X3VyaV9oYW5kbGVyX2dldF9wcm90b2NvbHMgKCkiPmdzdF91cmlfaGFuZGxlcl9nZXRfcHJvdG9jb2xzPC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSUhhbmRsZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVUklIYW5kbGVyPC9zcGFuPjwvYT4gKmhhbmRsZXI8L2NvZGU+PC9lbT4pOworY29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLWhhbmRsZXItZ2V0LXVyaSIgdGl0bGU9ImdzdF91cmlfaGFuZGxlcl9nZXRfdXJpICgpIj5nc3RfdXJpX2hhbmRsZXJfZ2V0X3VyaTwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklIYW5kbGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VVJJSGFuZGxlcjwvc3Bhbj48L2E+ICpoYW5kbGVyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1oYW5kbGVyLXNldC11cmkiIHRpdGxlPSJnc3RfdXJpX2hhbmRsZXJfc2V0X3VyaSAoKSI+Z3N0X3VyaV9oYW5kbGVyX3NldF91cmk8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJSGFuZGxlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVSSUhhbmRsZXI8L3NwYW4+PC9hPiAqaGFuZGxlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp1cmk8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLWhhbmRsZXItbmV3LXVyaSIgdGl0bGU9ImdzdF91cmlfaGFuZGxlcl9uZXdfdXJpICgpIj5nc3RfdXJpX2hhbmRsZXJfbmV3X3VyaTwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklIYW5kbGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VVJJSGFuZGxlcjwvc3Bhbj48L2E+ICpoYW5kbGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnVyaTwvY29kZT48L2VtPik7Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgR0ludGVyZmFjZQorICAgKy0tLS1Hc3RVUklIYW5kbGVyCis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuc2lnbmFscyI+PC9hPjxoMj5TaWduYWxzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSUhhbmRsZXItbmV3LXVyaSIgdGl0bGU9J1RoZSAibmV3LXVyaSIgc2lnbmFsJz5uZXctdXJpPC9hPiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+UnVuIExhc3Q8L2NvZGU+PC9hPgorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPgorVGhlIFVSSUhhbmRsZXIgaXMgYW4gaW50ZXJmYWNlIHRoYXQgaXMgaW1wbGVtZW50ZWQgYnkgU291cmNlIGFuZCBTaW5rIAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gc2ltcGxpZnkgdGhlbiBoYW5kbGluZyBvZiBVUkkuCis8L3A+Cis8cD4KK0FuIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgdG8gcXVpY2tseSBnZXQgYW4gZWxlbWVudAordGhhdCBoYW5kbGVzIHRoZSBnaXZlbiBVUkkgZm9yIHJlYWRpbmcgb3Igd3JpdGluZworKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC1lbGVtZW50LW1ha2UtZnJvbS11cmkiIHRpdGxlPSJnc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkoKTwvY29kZT48L2E+KS4KKzwvcD4KKzxwPgorU291cmNlIGFuZCBTaW5rIHBsdWdpbnMgc2hvdWxkIGltcGxlbWVudCB0aGlzIGludGVyZmFjZSB3aGVuIHBvc3NpYmxlLgorPC9wPgorPHA+CitMYXN0IHJldmlld2VkIG9uIDIwMDUtMTEtMDkgKDAuOS40KQorPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0VVJJSGFuZGxlci1zdHJ1Y3QiPjwvYT48aDM+R3N0VVJJSGFuZGxlcjwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBzdHJ1Y3QgX0dzdFVSSUhhbmRsZXIgR3N0VVJJSGFuZGxlcjs8L3ByZT4KKzxwPgorT3BhcXVlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSUhhbmRsZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVUklIYW5kbGVyPC9zcGFuPjwvYT4gc3RydWN0dXJlLgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RVUklIYW5kbGVySW50ZXJmYWNlIj48L2E+PGgzPnN0cnVjdCBHc3RVUklIYW5kbGVySW50ZXJmYWNlPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0VVJJSGFuZGxlckludGVyZmFjZSB7CisgIEdUeXBlSW50ZXJmYWNlwqBwYXJlbnQ7CisKKyAgLyogcXVlcnlpbmcgY2FwYWJpbGl0aWVzICovCisgIEdzdFVSSVR5cGUJCSgqIGdldF90eXBlKQkJKEdUeXBlIHR5cGUpOworICBnY2hhciAqKgkJKCogZ2V0X3Byb3RvY29scynCoChHVHlwZSB0eXBlKTsKKworICAvKiB1c2luZyB0aGUgaW50ZXJmYWNlICovCisgIGNvbnN0IGdjaGFyICoJCSgqIGdldF91cmkpCQkoR3N0VVJJSGFuZGxlciAqIGhhbmRsZXIpOworICBnYm9vbGVhbgkJKCogc2V0X3VyaSkJCShHc3RVUklIYW5kbGVyICogaGFuZGxlciwKKwkJCQkJCSBjb25zdCBnY2hhciAqCSB1cmkpOworfTsKKzwvcHJlPgorPHA+CitBbnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdXNpbmcgdGhpcyBpbnRlcmZhY2Ugc2hvdWxkIGltcGxlbWVudCB0aGVzZSBtZXRob2RzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGVJbnRlcmZhY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZUludGVyZmFjZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RVUklIYW5kbGVySW50ZXJmYWNlLnBhcmVudCI+PC9hPnBhcmVudDwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIHBhcmVudCBpbnRlcmZhY2UgdHlwZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RVUklIYW5kbGVySW50ZXJmYWNlLmdldC10eXBlIj48L2E+Z2V0X3R5cGU8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPk1ldGhvZCB0byB0ZWxsIHdoZXRoZXIgdGhlIGVsZW1lbnQgaGFuZGxlcyBzb3VyY2Ugb3Igc2luayBVUkkuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFVSSUhhbmRsZXJJbnRlcmZhY2UuZ2V0LXByb3RvY29scyI+PC9hPmdldF9wcm90b2NvbHM8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPk1ldGhvZCB0byByZXR1cm4gdGhlIGxpc3Qgb2YgcHJvdG9jb2xzIGhhbmRsZWQgYnkgdGhlIGVsZW1lbnQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFVSSUhhbmRsZXJJbnRlcmZhY2UuZ2V0LXVyaSI+PC9hPmdldF91cmk8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPk1ldGhvZCB0byByZXR1cm4gdGhlIFVSSSBjdXJyZW50bHkgaGFuZGxlZCBieSB0aGUgZWxlbWVudC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0VVJJSGFuZGxlckludGVyZmFjZS5zZXQtdXJpIj48L2E+c2V0X3VyaTwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+TWV0aG9kIHRvIHNldCBhIG5ldyBVUkkuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0VVJJVHlwZSI+PC9hPjxoMz5lbnVtIEdzdFVSSVR5cGU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9VUklfVU5LTk9XTiwKKyAgR1NUX1VSSV9TSU5LLAorICBHU1RfVVJJX1NSQworfSBHc3RVUklUeXBlOworPC9wcmU+Cis8cD4KK1RoZSBkaWZmZXJlbnQgdHlwZXMgb2YgVVJJIGRpcmVjdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVVSSS1VTktOT1dOOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9VUklfVU5LTk9XTjwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIFVSSSBkaXJlY3Rpb24gaXMgdW5rbm93bgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVVSSS1TSU5LOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9VUklfU0lOSzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIFVSSSBpcyBhIGNvbnN1bWVyLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVVSSS1TUkM6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1VSSV9TUkM8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBVUkkgaXMgYSBwcm9kdWNlci4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1VUkktVFlQRS1JUy1WQUxJRDpDQVBTIj48L2E+PGgzPkdTVF9VUklfVFlQRV9JU19WQUxJRCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9VUklfVFlQRV9JU19WQUxJRCh0eXBlKSAoKHR5cGUpID09IEdTVF9VUklfU1JDIHx8ICh0eXBlKSA9PSBHU1RfVVJJX1NJTkspCis8L3ByZT4KKzxwPgorVGVzdHMgaWYgdGhlIHR5cGUgZGlyZWN0aW9uIGlzIHZhbGlkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJVHlwZSIgdGl0bGU9ImVudW0gR3N0VVJJVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVSSVR5cGU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC11cmktcHJvdG9jb2wtaXMtdmFsaWQiPjwvYT48aDM+Z3N0X3VyaV9wcm90b2NvbF9pc192YWxpZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfdXJpX3Byb3RvY29sX2lzX3ZhbGlkICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnByb3RvY29sPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVGVzdHMgaWYgdGhlIGdpdmVuIHN0cmluZyBpcyBhIHZhbGlkIHByb3RvY29sIGlkZW50aWZpZXIuIFByb3RvY29scworbXVzdCBjb25zaXN0IG9mIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCAnKycsICctJyBhbmQgJy4nIGFuZCBtdXN0CitzdGFydCB3aXRoIGEgYWxwaGFiZXRpYyBjaGFyYWN0ZXIuIFNlZSBSRkMgMzk4NiBTZWN0aW9uIDMuMS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcm90b2NvbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIHN0cmluZzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHN0cmluZyBpcyBhIHZhbGlkIHByb3RvY29sIGlkZW50aWZpZXIsIEZBTFNFIG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdXJpLXByb3RvY29sLWlzLXN1cHBvcnRlZCI+PC9hPjxoMz5nc3RfdXJpX3Byb3RvY29sX2lzX3N1cHBvcnRlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfdXJpX3Byb3RvY29sX2lzX3N1cHBvcnRlZCAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSVR5cGUiIHRpdGxlPSJlbnVtIEdzdFVSSVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVUklUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwcm90b2NvbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NoZWNrcyBpZiBhbiBlbGVtZW50IGV4aXN0cyB0aGF0IHN1cHBvcnRzIHRoZSBnaXZlbiBVUkkgcHJvdG9jb2wuIE5vdGUKK3RoYXQgYSBwb3NpdGl2ZSByZXR1cm4gdmFsdWUgZG9lcyBub3QgaW1wbHkgdGhhdCBhIHN1YnNlcXVlbnQgY2FsbCB0bworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LWVsZW1lbnQtbWFrZS1mcm9tLXVyaSIgdGl0bGU9ImdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaSgpPC9jb2RlPjwvYT4gaXMgZ3VhcmFudGVlZCB0byB3b3JrLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+V2hldGhlciB0byBjaGVjayBmb3IgYSBzb3VyY2Ugb3IgYSBzaW5rPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcm90b2NvbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Qcm90b2NvbCB0aGF0IHNob3VsZCBiZSBjaGVja2VkIGZvciAoZS5nLiAiaHR0cCIgb3IgInNtYiIpPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTM8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC11cmktaXMtdmFsaWQiPjwvYT48aDM+Z3N0X3VyaV9pc192YWxpZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfdXJpX2lzX3ZhbGlkICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnVyaTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1Rlc3RzIGlmIHRoZSBnaXZlbiBzdHJpbmcgaXMgYSB2YWxpZCBVUkkgaWRlbnRpZmllci4gVVJJcyBzdGFydCB3aXRoIGEgdmFsaWQKK3NjaGVtZSBmb2xsb3dlZCBieSAiOiIgYW5kIG1heWJlIGEgc3RyaW5nIGlkZW50aWZ5aW5nIHRoZSBsb2NhdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51cmk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBVUkkgc3RyaW5nPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgVVJJPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXVyaS1oYXMtcHJvdG9jb2wiPjwvYT48aDM+Z3N0X3VyaV9oYXNfcHJvdG9jb2wgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3VyaV9oYXNfcHJvdG9jb2wgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp1cmk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqcHJvdG9jb2w8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDaGVja3MgaWYgdGhlIHByb3RvY29sIG9mIGEgZ2l2ZW4gdmFsaWQgVVJJIG1hdGNoZXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByb3RvY29sPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVyaTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIFVSSSBzdHJpbmc8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByb3RvY29sPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgcHJvdG9jb2wgc3RyaW5nIChlLmcuICJodHRwIik8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBwcm90b2NvbCBtYXRjaGVzLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXVyaS1nZXQtcHJvdG9jb2wiPjwvYT48aDM+Z3N0X3VyaV9nZXRfcHJvdG9jb2wgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICogICAgICAgICAgICAgZ3N0X3VyaV9nZXRfcHJvdG9jb2wgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp1cmk8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitFeHRyYWN0cyB0aGUgcHJvdG9jb2wgb3V0IG9mIGEgZ2l2ZW4gdmFsaWQgVVJJLiBUaGUgcmV0dXJuZWQgc3RyaW5nIG11c3QgYmUKK2ZyZWVkIHVzaW5nIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItTWVtb3J5LUFsbG9jYXRpb24uaHRtbCNnLWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19mcmVlKCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51cmk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBVUkkgc3RyaW5nPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIHByb3RvY29sIGZvciB0aGlzIFVSSS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdXJpLWdldC1sb2NhdGlvbiI+PC9hPjxoMz5nc3RfdXJpX2dldF9sb2NhdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICAgICAgICBnc3RfdXJpX2dldF9sb2NhdGlvbiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnVyaTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0V4dHJhY3RzIHRoZSBsb2NhdGlvbiBvdXQgb2YgYSBnaXZlbiB2YWxpZCBVUkksIGllLiB0aGUgcHJvdG9jb2wgYW5kICI6Ly8iCithcmUgc3RyaXBwZWQgZnJvbSB0aGUgVVJJLCB3aGljaCBtZWFucyB0aGF0IHRoZSBsb2NhdGlvbiByZXR1cm5lZCBpbmNsdWRlcwordGhlIGhvc3RuYW1lIGlmIG9uZSBpcyBzcGVjaWZpZWQuIFRoZSByZXR1cm5lZCBzdHJpbmcgbXVzdCBiZSBmcmVlZCB1c2luZworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1NZW1vcnktQWxsb2NhdGlvbi5odG1sI2ctZnJlZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX2ZyZWUoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitGcmVlLWZ1bmN0aW9uOiBnX2ZyZWUKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51cmk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBVUkkgc3RyaW5nPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGxvY2F0aW9uIGZvciB0aGlzCitVUkkuIFJldHVybnMgTlVMTCBpZiB0aGUgVVJJIGlzbid0IHZhbGlkLiBJZiB0aGUgVVJJIGRvZXMgbm90IGNvbnRhaW4KK2EgbG9jYXRpb24sIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IHplcm8tdGVybWluYXRlZD0xXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC11cmktY29uc3RydWN0Ij48L2E+PGgzPmdzdF91cmlfY29uc3RydWN0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgICAgICAgIGdzdF91cmlfY29uc3RydWN0ICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqcHJvdG9jb2w8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbG9jYXRpb248L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb25zdHJ1Y3RzIGEgVVJJIGZvciBhIGdpdmVuIHZhbGlkIHByb3RvY29sIGFuZCBsb2NhdGlvbi4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ19mcmVlCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJvdG9jb2w8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UHJvdG9jb2wgZm9yIFVSSTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bG9jYXRpb248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+TG9jYXRpb24gZm9yIFVSSS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IHplcm8tdGVybWluYXRlZD0xXVs8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IHN0cmluZyBmb3IgdGhpcworVVJJLiBSZXR1cm5zIE5VTEwgaWYgdGhlIGdpdmVuIFVSSSBwcm90b2NvbCBpcyBub3QgdmFsaWQsIG9yIHRoZSBnaXZlbgorbG9jYXRpb24gaXMgTlVMTC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IHplcm8tdGVybWluYXRlZD0xXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1maWxlbmFtZS10by11cmkiPjwvYT48aDM+Z3N0X2ZpbGVuYW1lX3RvX3VyaSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4gKiAgICAgICAgICAgICBnc3RfZmlsZW5hbWVfdG9fdXJpICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpbGVuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gKiplcnJvcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NpbWlsYXIgdG8gPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1VUkktRnVuY3Rpb25zLmh0bWwjZy1maWxlbmFtZS10by11cmkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19maWxlbmFtZV90b191cmkoKTwvY29kZT48L2E+LCBidXQgYXR0ZW1wdHMgdG8gaGFuZGxlIHJlbGF0aXZlIGZpbGUgcGF0aHMKK2FzIHdlbGwuIEJlZm9yZSBjb252ZXJ0aW5nIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWxlbmFtZTwvY29kZT48L2VtPiBpbnRvIGFuIFVSSSwgaXQgd2lsbCBiZSBwcmVmaXhlZCBieQordGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaWYgaXQgaXMgYSByZWxhdGl2ZSBwYXRoLCBhbmQgdGhlbiB0aGUgcGF0aAord2lsbCBiZSBjYW5vbmljYWxpc2VkIHNvIHRoYXQgaXQgZG9lc24ndCBjb250YWluIGFueSAnLi8nIG9yICcuLi8nIHNlZ21lbnRzLgorPC9wPgorPHA+CitPbiBXaW5kb3dzIDxzcGFuIGNsYXNzPSJ0eXBlIj5maWxlbmFtZTwvc3Bhbj4gc2hvdWxkIGJlIGluIFVURi04IGVuY29kaW5nLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpbGVuYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFic29sdXRlIG9yIHJlbGF0aXZlIGZpbGUgbmFtZSBwYXRoPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lcnJvcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIGVycm9yLCBvciBOVUxMPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWVsZW1lbnQtbWFrZS1mcm9tLXVyaSI+PC9hPjxoMz5nc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKiAgICAgICAgZ3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaSAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklUeXBlIiB0aXRsZT0iZW51bSBHc3RVUklUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VVJJVHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdXJpPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmVsZW1lbnRuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlcyBhbiBlbGVtZW50IGZvciBoYW5kbGluZyB0aGUgZ2l2ZW4gVVJJLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+V2hldGhlciB0byBjcmVhdGUgYSBzb3VyY2Ugb3IgYSBzaW5rPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51cmk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VVJJIHRvIGNyZWF0ZSBhbiBlbGVtZW50IGZvcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudG5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+TmFtZSBvZiBjcmVhdGVkIGVsZW1lbnQsIGNhbiBiZSBOVUxMLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyBlbGVtZW50IG9yIE5VTEwgaWYgbm9uZSBjb3VsZCBiZSBjcmVhdGVkLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXVyaS1oYW5kbGVyLWdldC11cmktdHlwZSI+PC9hPjxoMz5nc3RfdXJpX2hhbmRsZXJfZ2V0X3VyaV90eXBlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIGdzdF91cmlfaGFuZGxlcl9nZXRfdXJpX3R5cGUgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJSGFuZGxlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVSSUhhbmRsZXI8L3NwYW4+PC9hPiAqaGFuZGxlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIHR5cGUgb2YgdGhlIGdpdmVuIFVSSSBoYW5kbGVyCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aGFuZGxlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSUhhbmRsZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVUklIYW5kbGVyPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSVR5cGUiIHRpdGxlPSJlbnVtIEdzdFVSSVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVUklUeXBlPC9zcGFuPjwvYT4gb2YgdGhlIFVSSSBoYW5kbGVyLgorUmV0dXJucyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHU1QtVVJJLVVOS05PV046Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9VUklfVU5LTk9XTjwvc3Bhbj48L2E+IGlmIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aGFuZGxlcjwvY29kZT48L2VtPiBpc24ndCBpbXBsZW1lbnRlZCBjb3JyZWN0bHkuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXVyaS1oYW5kbGVyLWdldC1wcm90b2NvbHMiPjwvYT48aDM+Z3N0X3VyaV9oYW5kbGVyX2dldF9wcm90b2NvbHMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICoqICAgICAgICAgICAgZ3N0X3VyaV9oYW5kbGVyX2dldF9wcm90b2NvbHMgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklIYW5kbGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VVJJSGFuZGxlcjwvc3Bhbj48L2E+ICpoYW5kbGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgbGlzdCBvZiBwcm90b2NvbHMgc3VwcG9ydGVkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5oYW5kbGVyPC9jb2RlPjwvZW0+LiBUaGlzIGxpc3QgbWF5IG5vdCBiZQorbW9kaWZpZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aGFuZGxlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSUhhbmRsZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVUklIYW5kbGVyPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlCitzdXBwb3J0ZWQgcHJvdG9jb2xzLiBSZXR1cm5zIE5VTEwgaWYgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5oYW5kbGVyPC9jb2RlPjwvZW0+IGlzbid0IGltcGxlbWVudGVkCitwcm9wZXJseSwgb3IgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5oYW5kbGVyPC9jb2RlPjwvZW0+IGRvZXNuJ3Qgc3VwcG9ydCBhbnkgcHJvdG9jb2xzLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gemVyby10ZXJtaW5hdGVkPTFdWzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IHV0ZjhdPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXVyaS1oYW5kbGVyLWdldC11cmkiPjwvYT48aDM+Z3N0X3VyaV9oYW5kbGVyX2dldF91cmkgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICogICAgICAgZ3N0X3VyaV9oYW5kbGVyX2dldF91cmkgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklIYW5kbGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VVJJSGFuZGxlcjwvc3Bhbj48L2E+ICpoYW5kbGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgY3VycmVudGx5IGhhbmRsZWQgVVJJLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmhhbmRsZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklIYW5kbGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VVJJSGFuZGxlcjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgVVJJIGN1cnJlbnRseSBoYW5kbGVkIGJ5IHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aGFuZGxlcjwvY29kZT48L2VtPi4KK1JldHVybnMgTlVMTCBpZiB0aGVyZSBhcmUgbm8gVVJJIGN1cnJlbnRseSBoYW5kbGVkLiBUaGUKK3JldHVybmVkIHN0cmluZyBtdXN0IG5vdCBiZSBtb2RpZmllZCBvciBmcmVlZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC11cmktaGFuZGxlci1zZXQtdXJpIj48L2E+PGgzPmdzdF91cmlfaGFuZGxlcl9zZXRfdXJpICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF91cmlfaGFuZGxlcl9zZXRfdXJpICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJSGFuZGxlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVSSUhhbmRsZXI8L3NwYW4+PC9hPiAqaGFuZGxlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp1cmk8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitUcmllcyB0byBzZXQgdGhlIFVSSSBvZiB0aGUgZ2l2ZW4gaGFuZGxlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5oYW5kbGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJSGFuZGxlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVSSUhhbmRsZXI8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51cmk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VVJJIHRvIHNldDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIFVSSSB3YXMgc2V0IHN1Y2Nlc3NmdWxseSwgZWxzZSBGQUxTRS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdXJpLWhhbmRsZXItbmV3LXVyaSI+PC9hPjxoMz5nc3RfdXJpX2hhbmRsZXJfbmV3X3VyaSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfdXJpX2hhbmRsZXJfbmV3X3VyaSAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSUhhbmRsZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVUklIYW5kbGVyPC9zcGFuPjwvYT4gKmhhbmRsZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdXJpPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRW1pdHMgdGhlIG5ldy11cmkgc2lnbmFsIGZvciBhIGdpdmVuIGhhbmRsZXIsIHdoZW4gdGhhdCBoYW5kbGVyIGhhcyBhIG5ldyBVUkkuCitUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSBVUkkgaGFuZGxlcnMgdGhlbXNlbHZlcy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5oYW5kbGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJSGFuZGxlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVSSUhhbmRsZXI8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51cmk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bmV3IFVSSSBvciBOVUxMIGlmIGl0IHdhcyB1bnNldDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuc2lnbmFsLWRldGFpbHMiPjwvYT48aDI+U2lnbmFsIERldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0VVJJSGFuZGxlci1uZXctdXJpIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Im5ldy11cmkiPC9jb2RlPiBzaWduYWw8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgdXNlcl9mdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJSGFuZGxlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVSSUhhbmRsZXI8L3NwYW4+PC9hPiAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAgICAgICAgICp1cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgdXNlcl9kYXRhKSAgICAgIDogPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlJ1biBMYXN0PC9jb2RlPjwvYT48L3ByZT4KKzxwPgorVGhlIFVSSSBvZiB0aGUgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmhhbmRsZXI8L2NvZGU+PC9lbT4gaGFzIGNoYW5nZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aGFuZGxlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJSGFuZGxlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVSSUhhbmRsZXI8L3NwYW4+PC9hPiB3aGljaCBlbWl0dGVkIHRoZSBzaWduYWw8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVyaTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgbmV3IFVSSSwgb3IgTlVMTCBpZiB0aGUgVVJJIHdhcyByZW1vdmVkLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMwM2JmYwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwKQEAgLTAsMCArMSwyMTQyIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0VXRpbHM8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sIiB0aXRsZT0iR3N0VXJpSGFuZGxlciI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3RVdGlscy5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3RVdGlscy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0VXRpbHMiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItR3N0VXRpbHMudG9wX29mX3BhZ2UiPjwvYT5Hc3RVdGlsczwvc3Bhbj48L2gyPgorPHA+R3N0VXRpbHMg4oCUIFZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnM8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0VXRpbHMuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKKworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULUNBTEwtUEFSRU5UOkNBUFMiIHRpdGxlPSJHU1RfQ0FMTF9QQVJFTlQoKSI+R1NUX0NBTExfUEFSRU5UPC9hPiAgICAgICAgICAgICAgICAgICAgIChwYXJlbnRfY2xhc3NfY2FzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULUNBTEwtUEFSRU5ULVdJVEgtREVGQVVMVDpDQVBTIiB0aXRsZT0iR1NUX0NBTExfUEFSRU5UX1dJVEhfREVGQVVMVCgpIj5HU1RfQ0FMTF9QQVJFTlRfV0lUSF9ERUZBVUxUPC9hPiAgICAgICAgKHBhcmVudF9jbGFzc19jYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZfcmV0dXJuKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJFQUQtVUlOVDg6Q0FQUyIgdGl0bGU9IkdTVF9SRUFEX1VJTlQ4KCkiPkdTVF9SRUFEX1VJTlQ4PC9hPiAgICAgICAgICAgICAgICAgICAgICAoZGF0YSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELVVJTlQxNi1MRTpDQVBTIiB0aXRsZT0iR1NUX1JFQURfVUlOVDE2X0xFKCkiPkdTVF9SRUFEX1VJTlQxNl9MRTwvYT4gICAgICAgICAgICAgICAgICAoZGF0YSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELVVJTlQxNi1CRTpDQVBTIiB0aXRsZT0iR1NUX1JFQURfVUlOVDE2X0JFKCkiPkdTVF9SRUFEX1VJTlQxNl9CRTwvYT4gICAgICAgICAgICAgICAgICAoZGF0YSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELVVJTlQyNC1MRTpDQVBTIiB0aXRsZT0iR1NUX1JFQURfVUlOVDI0X0xFKCkiPkdTVF9SRUFEX1VJTlQyNF9MRTwvYT4gICAgICAgICAgICAgICAgICAoZGF0YSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELVVJTlQyNC1CRTpDQVBTIiB0aXRsZT0iR1NUX1JFQURfVUlOVDI0X0JFKCkiPkdTVF9SRUFEX1VJTlQyNF9CRTwvYT4gICAgICAgICAgICAgICAgICAoZGF0YSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELVVJTlQzMi1MRTpDQVBTIiB0aXRsZT0iR1NUX1JFQURfVUlOVDMyX0xFKCkiPkdTVF9SRUFEX1VJTlQzMl9MRTwvYT4gICAgICAgICAgICAgICAgICAoZGF0YSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELVVJTlQzMi1CRTpDQVBTIiB0aXRsZT0iR1NUX1JFQURfVUlOVDMyX0JFKCkiPkdTVF9SRUFEX1VJTlQzMl9CRTwvYT4gICAgICAgICAgICAgICAgICAoZGF0YSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELVVJTlQ2NC1MRTpDQVBTIiB0aXRsZT0iR1NUX1JFQURfVUlOVDY0X0xFKCkiPkdTVF9SRUFEX1VJTlQ2NF9MRTwvYT4gICAgICAgICAgICAgICAgICAoZGF0YSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELVVJTlQ2NC1CRTpDQVBTIiB0aXRsZT0iR1NUX1JFQURfVUlOVDY0X0JFKCkiPkdTVF9SRUFEX1VJTlQ2NF9CRTwvYT4gICAgICAgICAgICAgICAgICAoZGF0YSkKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1GTE9BVC1MRTpDQVBTIiB0aXRsZT0iR1NUX1JFQURfRkxPQVRfTEUgKCkiPkdTVF9SRUFEX0ZMT0FUX0xFPC9hPiAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdmbG9hdDwvc3Bhbj48L2E+ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJFQUQtRkxPQVQtQkU6Q0FQUyIgdGl0bGU9IkdTVF9SRUFEX0ZMT0FUX0JFICgpIj5HU1RfUkVBRF9GTE9BVF9CRTwvYT4gICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1ET1VCTEUtTEU6Q0FQUyIgdGl0bGU9IkdTVF9SRUFEX0RPVUJMRV9MRSAoKSI+R1NUX1JFQURfRE9VQkxFX0xFPC9hPiAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICpkYXRhPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdkb3VibGU8L3NwYW4+PC9hPiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJFQUQtRE9VQkxFLUJFOkNBUFMiIHRpdGxlPSJHU1RfUkVBRF9ET1VCTEVfQkUgKCkiPkdTVF9SRUFEX0RPVUJMRV9CRTwvYT4gICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPik7CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtV1JJVEUtVUlOVDg6Q0FQUyIgdGl0bGU9IkdTVF9XUklURV9VSU5UOCgpIj5HU1RfV1JJVEVfVUlOVDg8L2E+ICAgICAgICAgICAgICAgICAgICAgKGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0pCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtV1JJVEUtVUlOVDE2LUxFOkNBUFMiIHRpdGxlPSJHU1RfV1JJVEVfVUlOVDE2X0xFKCkiPkdTVF9XUklURV9VSU5UMTZfTEU8L2E+ICAgICAgICAgICAgICAgICAoZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1VSU5UMTYtQkU6Q0FQUyIgdGl0bGU9IkdTVF9XUklURV9VSU5UMTZfQkUoKSI+R1NUX1dSSVRFX1VJTlQxNl9CRTwvYT4gICAgICAgICAgICAgICAgIChkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLVVJTlQyNC1MRTpDQVBTIiB0aXRsZT0iR1NUX1dSSVRFX1VJTlQyNF9MRSgpIj5HU1RfV1JJVEVfVUlOVDI0X0xFPC9hPiAgICAgICAgICAgICAgICAgKGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0pCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtV1JJVEUtVUlOVDI0LUJFOkNBUFMiIHRpdGxlPSJHU1RfV1JJVEVfVUlOVDI0X0JFKCkiPkdTVF9XUklURV9VSU5UMjRfQkU8L2E+ICAgICAgICAgICAgICAgICAoZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1VSU5UMzItTEU6Q0FQUyIgdGl0bGU9IkdTVF9XUklURV9VSU5UMzJfTEUoKSI+R1NUX1dSSVRFX1VJTlQzMl9MRTwvYT4gICAgICAgICAgICAgICAgIChkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLVVJTlQzMi1CRTpDQVBTIiB0aXRsZT0iR1NUX1dSSVRFX1VJTlQzMl9CRSgpIj5HU1RfV1JJVEVfVUlOVDMyX0JFPC9hPiAgICAgICAgICAgICAgICAgKGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0pCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtV1JJVEUtVUlOVDY0LUxFOkNBUFMiIHRpdGxlPSJHU1RfV1JJVEVfVUlOVDY0X0xFKCkiPkdTVF9XUklURV9VSU5UNjRfTEU8L2E+ICAgICAgICAgICAgICAgICAoZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1VSU5UNjQtQkU6Q0FQUyIgdGl0bGU9IkdTVF9XUklURV9VSU5UNjRfQkUoKSI+R1NUX1dSSVRFX1VJTlQ2NF9CRTwvYT4gICAgICAgICAgICAgICAgIChkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtKQorPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLUZMT0FULUxFOkNBUFMiIHRpdGxlPSJHU1RfV1JJVEVfRkxPQVRfTEUgKCkiPkdTVF9XUklURV9GTE9BVF9MRTwvYT4gICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gbnVtPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1GTE9BVC1CRTpDQVBTIiB0aXRsZT0iR1NUX1dSSVRFX0ZMT0FUX0JFICgpIj5HU1RfV1JJVEVfRkxPQVRfQkU8L2E+ICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+IG51bTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtV1JJVEUtRE9VQkxFLUxFOkNBUFMiIHRpdGxlPSJHU1RfV1JJVEVfRE9VQkxFX0xFICgpIj5HU1RfV1JJVEVfRE9VQkxFX0xFPC9hPiAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gbnVtPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1ET1VCTEUtQkU6Q0FQUyIgdGl0bGU9IkdTVF9XUklURV9ET1VCTEVfQkUgKCkiPkdTVF9XUklURV9ET1VCTEVfQkU8L2E+ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiBudW08L2NvZGU+PC9lbT4pOworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELVVQLTI6Q0FQUyIgdGl0bGU9IkdTVF9ST1VORF9VUF8yKCkiPkdTVF9ST1VORF9VUF8yPC9hPiAgICAgICAgICAgICAgICAgICAgICAobnVtKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELVVQLTQ6Q0FQUyIgdGl0bGU9IkdTVF9ST1VORF9VUF80KCkiPkdTVF9ST1VORF9VUF80PC9hPiAgICAgICAgICAgICAgICAgICAgICAobnVtKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELVVQLTg6Q0FQUyIgdGl0bGU9IkdTVF9ST1VORF9VUF84KCkiPkdTVF9ST1VORF9VUF84PC9hPiAgICAgICAgICAgICAgICAgICAgICAobnVtKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELVVQLTE2OkNBUFMiIHRpdGxlPSJHU1RfUk9VTkRfVVBfMTYoKSI+R1NUX1JPVU5EX1VQXzE2PC9hPiAgICAgICAgICAgICAgICAgICAgIChudW0pCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtVVAtMzI6Q0FQUyIgdGl0bGU9IkdTVF9ST1VORF9VUF8zMigpIj5HU1RfUk9VTkRfVVBfMzI8L2E+ICAgICAgICAgICAgICAgICAgICAgKG51bSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1VUC02NDpDQVBTIiB0aXRsZT0iR1NUX1JPVU5EX1VQXzY0KCkiPkdTVF9ST1VORF9VUF82NDwvYT4gICAgICAgICAgICAgICAgICAgICAobnVtKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELURPV04tMjpDQVBTIiB0aXRsZT0iR1NUX1JPVU5EX0RPV05fMigpIj5HU1RfUk9VTkRfRE9XTl8yPC9hPiAgICAgICAgICAgICAgICAgICAgKG51bSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1ET1dOLTQ6Q0FQUyIgdGl0bGU9IkdTVF9ST1VORF9ET1dOXzQoKSI+R1NUX1JPVU5EX0RPV05fNDwvYT4gICAgICAgICAgICAgICAgICAgIChudW0pCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtRE9XTi04OkNBUFMiIHRpdGxlPSJHU1RfUk9VTkRfRE9XTl84KCkiPkdTVF9ST1VORF9ET1dOXzg8L2E+ICAgICAgICAgICAgICAgICAgICAobnVtKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELURPV04tMTY6Q0FQUyIgdGl0bGU9IkdTVF9ST1VORF9ET1dOXzE2KCkiPkdTVF9ST1VORF9ET1dOXzE2PC9hPiAgICAgICAgICAgICAgICAgICAobnVtKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELURPV04tMzI6Q0FQUyIgdGl0bGU9IkdTVF9ST1VORF9ET1dOXzMyKCkiPkdTVF9ST1VORF9ET1dOXzMyPC9hPiAgICAgICAgICAgICAgICAgICAobnVtKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELURPV04tNjQ6Q0FQUyIgdGl0bGU9IkdTVF9ST1VORF9ET1dOXzY0KCkiPkdTVF9ST1VORF9ET1dOXzY0PC9hPiAgICAgICAgICAgICAgICAgICAobnVtKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR0RPVUJMRS1GUk9NLUJFOkNBUFMiIHRpdGxlPSJHRE9VQkxFX0ZST01fQkUoKSI+R0RPVUJMRV9GUk9NX0JFPC9hPiAgICAgICAgICAgICAgICAgICAgICh2YWwpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRE9VQkxFLUZST00tTEU6Q0FQUyIgdGl0bGU9IkdET1VCTEVfRlJPTV9MRSgpIj5HRE9VQkxFX0ZST01fTEU8L2E+ICAgICAgICAgICAgICAgICAgICAgKHZhbCkKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdkb3VibGU8L3NwYW4+PC9hPiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR0RPVUJMRS1TV0FQLUxFLUJFOkNBUFMiIHRpdGxlPSJHRE9VQkxFX1NXQVBfTEVfQkUgKCkiPkdET1VCTEVfU1dBUF9MRV9CRTwvYT4gICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IGluPC9jb2RlPjwvZW0+KTsKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dET1VCTEUtVE8tQkU6Q0FQUyIgdGl0bGU9IkdET1VCTEVfVE9fQkUoKSI+R0RPVUJMRV9UT19CRTwvYT4gICAgICAgICAgICAgICAgICAgICAgICh2YWwpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRE9VQkxFLVRPLUxFOkNBUFMiIHRpdGxlPSJHRE9VQkxFX1RPX0xFKCkiPkdET1VCTEVfVE9fTEU8L2E+ICAgICAgICAgICAgICAgICAgICAgICAodmFsKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR0ZMT0FULUZST00tQkU6Q0FQUyIgdGl0bGU9IkdGTE9BVF9GUk9NX0JFKCkiPkdGTE9BVF9GUk9NX0JFPC9hPiAgICAgICAgICAgICAgICAgICAgICAodmFsKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR0ZMT0FULUZST00tTEU6Q0FQUyIgdGl0bGU9IkdGTE9BVF9GUk9NX0xFKCkiPkdGTE9BVF9GUk9NX0xFPC9hPiAgICAgICAgICAgICAgICAgICAgICAodmFsKQorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nZmxvYXQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dGTE9BVC1TV0FQLUxFLUJFOkNBUFMiIHRpdGxlPSJHRkxPQVRfU1dBUF9MRV9CRSAoKSI+R0ZMT0FUX1NXQVBfTEVfQkU8L2E+ICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+IGluPC9jb2RlPjwvZW0+KTsKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dGTE9BVC1UTy1CRTpDQVBTIiB0aXRsZT0iR0ZMT0FUX1RPX0JFKCkiPkdGTE9BVF9UT19CRTwvYT4gICAgICAgICAgICAgICAgICAgICAgICAodmFsKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR0ZMT0FULVRPLUxFOkNBUFMiIHRpdGxlPSJHRkxPQVRfVE9fTEUoKSI+R0ZMT0FUX1RPX0xFPC9hPiAgICAgICAgICAgICAgICAgICAgICAgICh2YWwpCitjb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtZmxvdy1nZXQtbmFtZSIgdGl0bGU9ImdzdF9mbG93X2dldF9uYW1lICgpIj5nc3RfZmxvd19nZXRfbmFtZTwvYT4gICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiByZXQ8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1F1YXJrPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtZmxvdy10by1xdWFyayIgdGl0bGU9ImdzdF9mbG93X3RvX3F1YXJrICgpIj5nc3RfZmxvd190b19xdWFyazwvYT4gICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiByZXQ8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXByaW50LWVsZW1lbnQtYXJncyIgdGl0bGU9ImdzdF9wcmludF9lbGVtZW50X2FyZ3MgKCkiPmdzdF9wcmludF9lbGVtZW50X2FyZ3M8L2E+ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RyaW5ncy5odG1sI0dTdHJpbmciPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU3RyaW5nPC9zcGFuPjwvYT4gKmJ1ZjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBpbmRlbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXByaW50LXBhZC1jYXBzIiB0aXRsZT0iZ3N0X3ByaW50X3BhZF9jYXBzICgpIj5nc3RfcHJpbnRfcGFkX2NhcHM8L2E+ICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0cmluZ3MuaHRtbCNHU3RyaW5nIj48c3BhbiBjbGFzcz0idHlwZSI+R1N0cmluZzwvc3Bhbj48L2E+ICpidWY8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gaW5kZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LWd1aW50NjQtdG8tZ2RvdWJsZSIgdGl0bGU9ImdzdF9ndWludDY0X3RvX2dkb3VibGUoKSI+Z3N0X2d1aW50NjRfdG9fZ2RvdWJsZTwvYT4gICAgICAgICAgICAgICh2YWx1ZSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC1nZG91YmxlLXRvLWd1aW50NjQiIHRpdGxlPSJnc3RfZ2RvdWJsZV90b19ndWludDY0KCkiPmdzdF9nZG91YmxlX3RvX2d1aW50NjQ8L2E+ICAgICAgICAgICAgICAodmFsdWUpCis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HVHlwZTwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC10eXBlLXJlZ2lzdGVyLXN0YXRpYy1mdWxsIiB0aXRsZT0iZ3N0X3R5cGVfcmVnaXN0ZXJfc3RhdGljX2Z1bGwgKCkiPmdzdF90eXBlX3JlZ2lzdGVyX3N0YXRpY19mdWxsPC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiBwYXJlbnRfdHlwZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0eXBlX25hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBjbGFzc19zaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dCYXNlSW5pdEZ1bmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HQmFzZUluaXRGdW5jPC9zcGFuPjwvYT4gYmFzZV9pbml0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dCYXNlRmluYWxpemVGdW5jIj48c3BhbiBjbGFzcz0idHlwZSI+R0Jhc2VGaW5hbGl6ZUZ1bmM8L3NwYW4+PC9hPiBiYXNlX2ZpbmFsaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dDbGFzc0luaXRGdW5jIj48c3BhbiBjbGFzcz0idHlwZSI+R0NsYXNzSW5pdEZ1bmM8L3NwYW4+PC9hPiBjbGFzc19pbml0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dDbGFzc0ZpbmFsaXplRnVuYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdDbGFzc0ZpbmFsaXplRnVuYzwvc3Bhbj48L2E+IGNsYXNzX2ZpbmFsaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY29uc3Rwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NvbnN0cG9pbnRlcjwvc3Bhbj48L2E+IGNsYXNzX2RhdGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbnN0YW5jZV9zaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQxNjwvc3Bhbj48L2E+IG5fcHJlYWxsb2NzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dJbnN0YW5jZUluaXRGdW5jIj48c3BhbiBjbGFzcz0idHlwZSI+R0luc3RhbmNlSW5pdEZ1bmM8L3NwYW4+PC9hPiBpbnN0YW5jZV9pbml0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlVmFsdWVUYWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlVmFsdWVUYWJsZTwvc3Bhbj48L2E+ICp2YWx1ZV90YWJsZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGVGbGFnczwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWR1bXAtbWVtIiB0aXRsZT0iZ3N0X3V0aWxfZHVtcF9tZW0gKCkiPmdzdF91dGlsX2R1bXBfbWVtPC9hPiAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWNoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWNoYXI8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZSIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoKSI+Z3N0X3V0aWxfdWludDY0X3NjYWxlPC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IG51bTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBkZW5vbTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1yb3VuZCIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCAoKSI+Z3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kPC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IG51bTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBkZW5vbTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1jZWlsIiB0aXRsZT0iZ3N0X3V0aWxfdWludDY0X3NjYWxlX2NlaWwgKCkiPmdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlsPC9hPiAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBudW08L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gZGVub208L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUtaW50IiB0aXRsZT0iZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAoKSI+Z3N0X3V0aWxfdWludDY0X3NjYWxlX2ludDwvYT4gICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG51bTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBkZW5vbTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1pbnQtcm91bmQiIHRpdGxlPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kICgpIj5nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kPC9hPiAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbnVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGRlbm9tPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtdWludDY0LXNjYWxlLWludC1jZWlsIiB0aXRsZT0iZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9jZWlsICgpIj5nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWw8L2E+ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbnVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGRlbm9tPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtZ3JlYXRlc3QtY29tbW9uLWRpdmlzb3IiIHRpdGxlPSJnc3RfdXRpbF9ncmVhdGVzdF9jb21tb25fZGl2aXNvciAoKSI+Z3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3I8L2E+ICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gYTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBiPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWZyYWN0aW9uLXRvLWRvdWJsZSIgdGl0bGU9ImdzdF91dGlsX2ZyYWN0aW9uX3RvX2RvdWJsZSAoKSI+Z3N0X3V0aWxfZnJhY3Rpb25fdG9fZG91YmxlPC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gc3JjX248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gc3JjX2Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gKmRlc3Q8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtZG91YmxlLXRvLWZyYWN0aW9uIiB0aXRsZT0iZ3N0X3V0aWxfZG91YmxlX3RvX2ZyYWN0aW9uICgpIj5nc3RfdXRpbF9kb3VibGVfdG9fZnJhY3Rpb248L2E+ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiBzcmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gKmRlc3RfbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAqZGVzdF9kPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWZyYWN0aW9uLW11bHRpcGx5IiB0aXRsZT0iZ3N0X3V0aWxfZnJhY3Rpb25fbXVsdGlwbHkgKCkiPmdzdF91dGlsX2ZyYWN0aW9uX211bHRpcGx5PC9hPiAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGFfbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBhX2Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gYl9uPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGJfZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAqcmVzX248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gKnJlc19kPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWZyYWN0aW9uLWFkZCIgdGl0bGU9ImdzdF91dGlsX2ZyYWN0aW9uX2FkZCAoKSI+Z3N0X3V0aWxfZnJhY3Rpb25fYWRkPC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gYV9uPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGFfZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBiX248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gYl9kPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICpyZXNfbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAqcmVzX2Q8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1mcmFjdGlvbi1jb21wYXJlIiB0aXRsZT0iZ3N0X3V0aWxfZnJhY3Rpb25fY29tcGFyZSAoKSI+Z3N0X3V0aWxfZnJhY3Rpb25fY29tcGFyZTwvYT4gICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gYV9uPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGFfZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBiX248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gYl9kPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MzI8L3NwYW4+PC9hPiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtc2VxbnVtLW5leHQiIHRpdGxlPSJnc3RfdXRpbF9zZXFudW1fbmV4dCAoKSI+Z3N0X3V0aWxfc2VxbnVtX25leHQ8L2E+ICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDMyPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1zZXFudW0tY29tcGFyZSIgdGl0bGU9ImdzdF91dGlsX3NlcW51bV9jb21wYXJlICgpIj5nc3RfdXRpbF9zZXFudW1fY29tcGFyZTwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiBzMTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiBzMjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1zZXQtb2JqZWN0LWFyZyIgdGl0bGU9ImdzdF91dGlsX3NldF9vYmplY3RfYXJnICgpIj5nc3RfdXRpbF9zZXRfb2JqZWN0X2FyZzwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtc2V0LXZhbHVlLWZyb20tc3RyaW5nIiB0aXRsZT0iZ3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nICgpIj5nc3RfdXRpbF9zZXRfdmFsdWVfZnJvbV9zdHJpbmc8L2E+ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnZhbHVlX3N0cjwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1nZXQtdGltZXN0YW1wIiB0aXRsZT0iZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKSI+Z3N0X3V0aWxfZ2V0X3RpbWVzdGFtcDwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTsKK2VudW0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dzdFNlYXJjaE1vZGUiIHRpdGxlPSJlbnVtIEdzdFNlYXJjaE1vZGUiPkdzdFNlYXJjaE1vZGU8L2E+OworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtYXJyYXktYmluYXJ5LXNlYXJjaCIgdGl0bGU9ImdzdF91dGlsX2FycmF5X2JpbmFyeV9zZWFyY2ggKCkiPmdzdF91dGlsX2FycmF5X2JpbmFyeV9zZWFyY2g8L2E+ICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gYXJyYXk8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBudW1fZWxlbWVudHM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBlbGVtZW50X3NpemU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0NvbXBhcmVEYXRhRnVuYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdDb21wYXJlRGF0YUZ1bmM8L3NwYW4+PC9hPiBzZWFyY2hfZnVuYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR3N0U2VhcmNoTW9kZSIgdGl0bGU9ImVudW0gR3N0U2VhcmNoTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlYXJjaE1vZGU8L3NwYW4+PC9hPiBtb2RlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY29uc3Rwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NvbnN0cG9pbnRlcjwvc3Bhbj48L2E+IHNlYXJjaF9kYXRhPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0VXRpbHMuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0VXRpbHMuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1DQUxMLVBBUkVOVDpDQVBTIj48L2E+PGgzPkdTVF9DQUxMX1BBUkVOVCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9DQUxMX1BBUkVOVChwYXJlbnRfY2xhc3NfY2FzdCwgbmFtZSwgYXJncyk8L3ByZT4KKzxwPgorSnVzdCBjYWxsIHRoZSBwYXJlbnQgaGFuZGxlci4gIFRoaXMgYXNzdW1lcyB0aGF0IHRoZXJlIGlzIGEgdmFyaWFibGUKK25hbWVkIHBhcmVudF9jbGFzcyB0aGF0IHBvaW50cyB0byB0aGUgKGR1aCEpIHBhcmVudCBjbGFzcy4gIE5vdGUgdGhhdAordGhpcyBtYWNybyBpcyBub3QgdG8gYmUgdXNlZCB3aXRoIHRoaW5ncyB0aGF0IHJldHVybiBzb21ldGhpbmcsIHVzZQordGhlIF9XSVRIX0RFRkFVTFQgdmVyc2lvbiBmb3IgdGhhdAorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhcmVudF9jbGFzc19jYXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuYW1lIG9mIHRoZSBjbGFzcyBjYXN0IG1hY3JvIGZvciB0aGUgcGFyZW50IHR5cGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gY2FsbDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YXJnczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hcmd1bWVudHMgZW5jbG9zZWQgaW4gJyggKSc8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQ0FMTC1QQVJFTlQtV0lUSC1ERUZBVUxUOkNBUFMiPjwvYT48aDM+R1NUX0NBTExfUEFSRU5UX1dJVEhfREVGQVVMVCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9DQUxMX1BBUkVOVF9XSVRIX0RFRkFVTFQocGFyZW50X2NsYXNzX2Nhc3QsIG5hbWUsIGFyZ3MsIGRlZl9yZXR1cm4pPC9wcmU+Cis8cD4KK1NhbWUgYXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1DQUxMLVBBUkVOVDpDQVBTIiB0aXRsZT0iR1NUX0NBTExfUEFSRU5UKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R1NUX0NBTExfUEFSRU5UKCk8L2NvZGU+PC9hPiwgYnV0IGluIGNhc2UgdGhlcmUgaXMgbm8gaW1wbGVtZW50YXRpb24sIGl0CitldmFsdWF0ZXMgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlZl9yZXR1cm48L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyZW50X2NsYXNzX2Nhc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5hbWUgb2YgdGhlIGNsYXNzIGNhc3QgbWFjcm8gZm9yIHRoZSBwYXJlbnQgdHlwZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5uYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBjYWxsPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hcmdzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFyZ3VtZW50cyBlbmNsb3NlZCBpbiAnKCApJzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVmX3JldHVybjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5kZWZhdWx0IHJlc3VsdDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1SRUFELVVJTlQ4OkNBUFMiPjwvYT48aDM+R1NUX1JFQURfVUlOVDgoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUkVBRF9VSU5UOChkYXRhKQkJKF9HU1RfR0VUIChkYXRhLCAwLCAgOCwgIDApKQorPC9wcmU+Cis8cD4KK1JlYWQgYW4gOCBiaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBmcm9tIHRoZSBtZW1vcnkgYnVmZmVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm1lbW9yeSBsb2NhdGlvbjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtUkVBRC1VSU5UMTYtTEU6Q0FQUyI+PC9hPjxoMz5HU1RfUkVBRF9VSU5UMTZfTEUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfUkVBRF9VSU5UMTZfTEUoZGF0YSk8L3ByZT4KKzxwPgorUmVhZCBhIDE2IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IGZyb20gdGhlIG1lbW9yeSBidWZmZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bWVtb3J5IGxvY2F0aW9uPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1SRUFELVVJTlQxNi1CRTpDQVBTIj48L2E+PGgzPkdTVF9SRUFEX1VJTlQxNl9CRSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9SRUFEX1VJTlQxNl9CRShkYXRhKTwvcHJlPgorPHA+CitSZWFkIGEgMTYgYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWUgaW4gYmlnIGVuZGlhbiBmb3JtYXQgZnJvbSB0aGUgbWVtb3J5IGJ1ZmZlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5tZW1vcnkgbG9jYXRpb248L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVJFQUQtVUlOVDI0LUxFOkNBUFMiPjwvYT48aDM+R1NUX1JFQURfVUlOVDI0X0xFKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX1JFQURfVUlOVDI0X0xFKGRhdGEpPC9wcmU+Cis8cD4KK1JlYWQgYSAyNCBiaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCBmcm9tIHRoZSBtZW1vcnkgYnVmZmVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm1lbW9yeSBsb2NhdGlvbjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtUkVBRC1VSU5UMjQtQkU6Q0FQUyI+PC9hPjxoMz5HU1RfUkVBRF9VSU5UMjRfQkUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfUkVBRF9VSU5UMjRfQkUoZGF0YSk8L3ByZT4KKzxwPgorUmVhZCBhIDI0IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGJpZyBlbmRpYW4gZm9ybWF0IGZyb20gdGhlIG1lbW9yeSBidWZmZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bWVtb3J5IGxvY2F0aW9uPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1SRUFELVVJTlQzMi1MRTpDQVBTIj48L2E+PGgzPkdTVF9SRUFEX1VJTlQzMl9MRSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9SRUFEX1VJTlQzMl9MRShkYXRhKTwvcHJlPgorPHA+CitSZWFkIGEgMzIgYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWUgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgZnJvbSB0aGUgbWVtb3J5IGJ1ZmZlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5tZW1vcnkgbG9jYXRpb248L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVJFQUQtVUlOVDMyLUJFOkNBUFMiPjwvYT48aDM+R1NUX1JFQURfVUlOVDMyX0JFKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX1JFQURfVUlOVDMyX0JFKGRhdGEpPC9wcmU+Cis8cD4KK1JlYWQgYSAzMiBiaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBpbiBiaWcgZW5kaWFuIGZvcm1hdCBmcm9tIHRoZSBtZW1vcnkgYnVmZmVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm1lbW9yeSBsb2NhdGlvbjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtUkVBRC1VSU5UNjQtTEU6Q0FQUyI+PC9hPjxoMz5HU1RfUkVBRF9VSU5UNjRfTEUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfUkVBRF9VSU5UNjRfTEUoZGF0YSk8L3ByZT4KKzxwPgorUmVhZCBhIDY0IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IGZyb20gdGhlIG1lbW9yeSBidWZmZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bWVtb3J5IGxvY2F0aW9uPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1SRUFELVVJTlQ2NC1CRTpDQVBTIj48L2E+PGgzPkdTVF9SRUFEX1VJTlQ2NF9CRSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9SRUFEX1VJTlQ2NF9CRShkYXRhKTwvcHJlPgorPHA+CitSZWFkIGEgNjQgYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWUgaW4gYmlnIGVuZGlhbiBmb3JtYXQgZnJvbSB0aGUgbWVtb3J5IGJ1ZmZlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5tZW1vcnkgbG9jYXRpb248L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVJFQUQtRkxPQVQtTEU6Q0FQUyI+PC9hPjxoMz5HU1RfUkVBRF9GTE9BVF9MRSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nZmxvYXQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgR1NUX1JFQURfRkxPQVRfTEUgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGEgMzIgYml0IGZsb2F0IHZhbHVlIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IGZyb20gdGhlIG1lbW9yeSBidWZmZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5tZW1vcnkgbG9jYXRpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgZmxvYXRpbmcgcG9pbnQgdmFsdWUgcmVhZCBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtUkVBRC1GTE9BVC1CRTpDQVBTIj48L2E+PGgzPkdTVF9SRUFEX0ZMT0FUX0JFICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdmbG9hdDwvc3Bhbj48L2E+ICAgICAgICAgICAgICBHU1RfUkVBRF9GTE9BVF9CRSAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYSAzMiBiaXQgZmxvYXQgdmFsdWUgaW4gYmlnIGVuZGlhbiBmb3JtYXQgZnJvbSB0aGUgbWVtb3J5IGJ1ZmZlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm1lbW9yeSBsb2NhdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBmbG9hdGluZyBwb2ludCB2YWx1ZSByZWFkIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1SRUFELURPVUJMRS1MRTpDQVBTIj48L2E+PGgzPkdTVF9SRUFEX0RPVUJMRV9MRSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICAgICAgICAgICAgIEdTVF9SRUFEX0RPVUJMRV9MRSAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICpkYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhIDY0IGJpdCBkb3VibGUgdmFsdWUgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgZnJvbSB0aGUgbWVtb3J5IGJ1ZmZlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm1lbW9yeSBsb2NhdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHZhbHVlIHJlYWQgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVJFQUQtRE9VQkxFLUJFOkNBUFMiPjwvYT48aDM+R1NUX1JFQURfRE9VQkxFX0JFICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nZG91YmxlPC9zcGFuPjwvYT4gICAgICAgICAgICAgR1NUX1JFQURfRE9VQkxFX0JFICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGEgNjQgYml0IGRvdWJsZSB2YWx1ZSBpbiBiaWcgZW5kaWFuIGZvcm1hdCBmcm9tIHRoZSBtZW1vcnkgYnVmZmVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bWVtb3J5IGxvY2F0aW9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgdmFsdWUgcmVhZCBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtV1JJVEUtVUlOVDg6Q0FQUyI+PC9hPjxoMz5HU1RfV1JJVEVfVUlOVDgoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfV1JJVEVfVUlOVDgoZGF0YSwgbnVtKTwvcHJlPgorPHA+CitTdG9yZSBhbiA4IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGludG8gdGhlIG1lbW9yeSBidWZmZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5tZW1vcnkgbG9jYXRpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm51bTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD52YWx1ZSB0byBzdG9yZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1XUklURS1VSU5UMTYtTEU6Q0FQUyI+PC9hPjxoMz5HU1RfV1JJVEVfVUlOVDE2X0xFKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX1dSSVRFX1VJTlQxNl9MRShkYXRhLCBudW0pPC9wcmU+Cis8cD4KK1N0b3JlIGEgMTYgYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWUgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgaW50byB0aGUgbWVtb3J5IGJ1ZmZlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm1lbW9yeSBsb2NhdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnZhbHVlIHRvIHN0b3JlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVdSSVRFLVVJTlQxNi1CRTpDQVBTIj48L2E+PGgzPkdTVF9XUklURV9VSU5UMTZfQkUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfV1JJVEVfVUlOVDE2X0JFKGRhdGEsIG51bSk8L3ByZT4KKzxwPgorU3RvcmUgYSAxNiBiaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBpbiBiaWcgZW5kaWFuIGZvcm1hdCBpbnRvIHRoZSBtZW1vcnkgYnVmZmVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bWVtb3J5IGxvY2F0aW9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5udW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dmFsdWUgdG8gc3RvcmU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtV1JJVEUtVUlOVDI0LUxFOkNBUFMiPjwvYT48aDM+R1NUX1dSSVRFX1VJTlQyNF9MRSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9XUklURV9VSU5UMjRfTEUoZGF0YSwgbnVtKTwvcHJlPgorPHA+CitTdG9yZSBhIDI0IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IGludG8gdGhlIG1lbW9yeSBidWZmZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5tZW1vcnkgbG9jYXRpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm51bTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD52YWx1ZSB0byBzdG9yZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1XUklURS1VSU5UMjQtQkU6Q0FQUyI+PC9hPjxoMz5HU1RfV1JJVEVfVUlOVDI0X0JFKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX1dSSVRFX1VJTlQyNF9CRShkYXRhLCBudW0pPC9wcmU+Cis8cD4KK1N0b3JlIGEgMjQgYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWUgaW4gYmlnIGVuZGlhbiBmb3JtYXQgaW50byB0aGUgbWVtb3J5IGJ1ZmZlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm1lbW9yeSBsb2NhdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnZhbHVlIHRvIHN0b3JlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVdSSVRFLVVJTlQzMi1MRTpDQVBTIj48L2E+PGgzPkdTVF9XUklURV9VSU5UMzJfTEUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfV1JJVEVfVUlOVDMyX0xFKGRhdGEsIG51bSk8L3ByZT4KKzxwPgorU3RvcmUgYSAzMiBiaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCBpbnRvIHRoZSBtZW1vcnkgYnVmZmVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bWVtb3J5IGxvY2F0aW9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5udW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dmFsdWUgdG8gc3RvcmU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtV1JJVEUtVUlOVDMyLUJFOkNBUFMiPjwvYT48aDM+R1NUX1dSSVRFX1VJTlQzMl9CRSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9XUklURV9VSU5UMzJfQkUoZGF0YSwgbnVtKTwvcHJlPgorPHA+CitTdG9yZSBhIDMyIGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGJpZyBlbmRpYW4gZm9ybWF0IGludG8gdGhlIG1lbW9yeSBidWZmZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5tZW1vcnkgbG9jYXRpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm51bTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD52YWx1ZSB0byBzdG9yZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1XUklURS1VSU5UNjQtTEU6Q0FQUyI+PC9hPjxoMz5HU1RfV1JJVEVfVUlOVDY0X0xFKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX1dSSVRFX1VJTlQ2NF9MRShkYXRhLCBudW0pPC9wcmU+Cis8cD4KK1N0b3JlIGEgNjQgYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWUgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgaW50byB0aGUgbWVtb3J5IGJ1ZmZlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm1lbW9yeSBsb2NhdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnZhbHVlIHRvIHN0b3JlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVdSSVRFLVVJTlQ2NC1CRTpDQVBTIj48L2E+PGgzPkdTVF9XUklURV9VSU5UNjRfQkUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfV1JJVEVfVUlOVDY0X0JFKGRhdGEsIG51bSk8L3ByZT4KKzxwPgorU3RvcmUgYSA2NCBiaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBpbiBiaWcgZW5kaWFuIGZvcm1hdCBpbnRvIHRoZSBtZW1vcnkgYnVmZmVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bWVtb3J5IGxvY2F0aW9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5udW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dmFsdWUgdG8gc3RvcmU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtV1JJVEUtRkxPQVQtTEU6Q0FQUyI+PC9hPjxoMz5HU1RfV1JJVEVfRkxPQVRfTEUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgR1NUX1dSSVRFX0ZMT0FUX0xFICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+IG51bTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1N0b3JlIGEgMzIgYml0IGZsb2F0IHZhbHVlIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IGludG8gdGhlIG1lbW9yeSBidWZmZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5tZW1vcnkgbG9jYXRpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm51bTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD52YWx1ZSB0byBzdG9yZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1XUklURS1GTE9BVC1CRTpDQVBTIj48L2E+PGgzPkdTVF9XUklURV9GTE9BVF9CRSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBHU1RfV1JJVEVfRkxPQVRfQkUgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gbnVtPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU3RvcmUgYSAzMiBiaXQgZmxvYXQgdmFsdWUgaW4gYmlnIGVuZGlhbiBmb3JtYXQgaW50byB0aGUgbWVtb3J5IGJ1ZmZlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm1lbW9yeSBsb2NhdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnZhbHVlIHRvIHN0b3JlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVdSSVRFLURPVUJMRS1MRTpDQVBTIj48L2E+PGgzPkdTVF9XUklURV9ET1VCTEVfTEUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgR1NUX1dSSVRFX0RPVUJMRV9MRSAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gbnVtPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU3RvcmUgYSA2NCBiaXQgZG91YmxlIHZhbHVlIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IGludG8gdGhlIG1lbW9yeSBidWZmZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5tZW1vcnkgbG9jYXRpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm51bTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD52YWx1ZSB0byBzdG9yZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1XUklURS1ET1VCTEUtQkU6Q0FQUyI+PC9hPjxoMz5HU1RfV1JJVEVfRE9VQkxFX0JFICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIEdTVF9XUklURV9ET1VCTEVfQkUgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICpkYXRhPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IG51bTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1N0b3JlIGEgNjQgYml0IGRvdWJsZSB2YWx1ZSBpbiBiaWcgZW5kaWFuIGZvcm1hdCBpbnRvIHRoZSBtZW1vcnkgYnVmZmVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bWVtb3J5IGxvY2F0aW9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5udW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dmFsdWUgdG8gc3RvcmU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtUk9VTkQtVVAtMjpDQVBTIj48L2E+PGgzPkdTVF9ST1VORF9VUF8yKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1JPVU5EX1VQXzIobnVtKSAgKCgobnVtKSsxKSZhbXA7fjEpCis8L3ByZT4KKzxwPgorUm91bmRzIGFuIGludGVnZXIgdmFsdWUgdXAgdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgMi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmludGVnZXIgdmFsdWUgdG8gcm91bmQgdXA8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVJPVU5ELVVQLTQ6Q0FQUyI+PC9hPjxoMz5HU1RfUk9VTkRfVVBfNCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9ST1VORF9VUF80KG51bSkgICgoKG51bSkrMykmYW1wO34zKQorPC9wcmU+Cis8cD4KK1JvdW5kcyBhbiBpbnRlZ2VyIHZhbHVlIHVwIHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIDQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm51bTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5pbnRlZ2VyIHZhbHVlIHRvIHJvdW5kIHVwPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1ST1VORC1VUC04OkNBUFMiPjwvYT48aDM+R1NUX1JPVU5EX1VQXzgoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUk9VTkRfVVBfOChudW0pICAoKChudW0pKzcpJmFtcDt+NykKKzwvcHJlPgorPHA+CitSb3VuZHMgYW4gaW50ZWdlciB2YWx1ZSB1cCB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiA4LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5udW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+aW50ZWdlciB2YWx1ZSB0byByb3VuZCB1cDwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtUk9VTkQtVVAtMTY6Q0FQUyI+PC9hPjxoMz5HU1RfUk9VTkRfVVBfMTYoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUk9VTkRfVVBfMTYobnVtKSAoKChudW0pKzE1KSZhbXA7fjE1KQorPC9wcmU+Cis8cD4KK1JvdW5kcyBhbiBpbnRlZ2VyIHZhbHVlIHVwIHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIDE2LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5udW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+aW50ZWdlciB2YWx1ZSB0byByb3VuZCB1cDwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtUk9VTkQtVVAtMzI6Q0FQUyI+PC9hPjxoMz5HU1RfUk9VTkRfVVBfMzIoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUk9VTkRfVVBfMzIobnVtKSAoKChudW0pKzMxKSZhbXA7fjMxKQorPC9wcmU+Cis8cD4KK1JvdW5kcyBhbiBpbnRlZ2VyIHZhbHVlIHVwIHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIDMyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5udW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+aW50ZWdlciB2YWx1ZSB0byByb3VuZCB1cDwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtUk9VTkQtVVAtNjQ6Q0FQUyI+PC9hPjxoMz5HU1RfUk9VTkRfVVBfNjQoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUk9VTkRfVVBfNjQobnVtKSAoKChudW0pKzYzKSZhbXA7fjYzKQorPC9wcmU+Cis8cD4KK1JvdW5kcyBhbiBpbnRlZ2VyIHZhbHVlIHVwIHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIDY0LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5udW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+aW50ZWdlciB2YWx1ZSB0byByb3VuZCB1cDwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtUk9VTkQtRE9XTi0yOkNBUFMiPjwvYT48aDM+R1NUX1JPVU5EX0RPV05fMigpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9ST1VORF9ET1dOXzIobnVtKSAgKChudW0pJmFtcDsofjEpKQorPC9wcmU+Cis8cD4KK1JvdW5kcyBhbiBpbnRlZ2VyIHZhbHVlIGRvd24gdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgMi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmludGVnZXIgdmFsdWUgdG8gcm91bmQgZG93bjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjEyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtUk9VTkQtRE9XTi00OkNBUFMiPjwvYT48aDM+R1NUX1JPVU5EX0RPV05fNCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9ST1VORF9ET1dOXzQobnVtKSAgKChudW0pJmFtcDsofjMpKQorPC9wcmU+Cis8cD4KK1JvdW5kcyBhbiBpbnRlZ2VyIHZhbHVlIGRvd24gdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgNC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmludGVnZXIgdmFsdWUgdG8gcm91bmQgZG93bjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjEyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtUk9VTkQtRE9XTi04OkNBUFMiPjwvYT48aDM+R1NUX1JPVU5EX0RPV05fOCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9ST1VORF9ET1dOXzgobnVtKSAgKChudW0pJmFtcDsofjcpKQorPC9wcmU+Cis8cD4KK1JvdW5kcyBhbiBpbnRlZ2VyIHZhbHVlIGRvd24gdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgOC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmludGVnZXIgdmFsdWUgdG8gcm91bmQgZG93bjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjEyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtUk9VTkQtRE9XTi0xNjpDQVBTIj48L2E+PGgzPkdTVF9ST1VORF9ET1dOXzE2KCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1JPVU5EX0RPV05fMTYobnVtKSAoKG51bSkmYW1wOyh+MTUpKQorPC9wcmU+Cis8cD4KK1JvdW5kcyBhbiBpbnRlZ2VyIHZhbHVlIGRvd24gdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgMTYuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm51bTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5pbnRlZ2VyIHZhbHVlIHRvIHJvdW5kIGRvd248L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVJPVU5ELURPV04tMzI6Q0FQUyI+PC9hPjxoMz5HU1RfUk9VTkRfRE9XTl8zMigpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9ST1VORF9ET1dOXzMyKG51bSkgKChudW0pJmFtcDsofjMxKSkKKzwvcHJlPgorPHA+CitSb3VuZHMgYW4gaW50ZWdlciB2YWx1ZSBkb3duIHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIDMyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5udW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+aW50ZWdlciB2YWx1ZSB0byByb3VuZCBkb3duPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1ST1VORC1ET1dOLTY0OkNBUFMiPjwvYT48aDM+R1NUX1JPVU5EX0RPV05fNjQoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUk9VTkRfRE9XTl82NChudW0pICgobnVtKSZhbXA7KH42MykpCis8L3ByZT4KKzxwPgorUm91bmRzIGFuIGludGVnZXIgdmFsdWUgZG93biB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiA2NC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmludGVnZXIgdmFsdWUgdG8gcm91bmQgZG93bjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjEyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHRE9VQkxFLUZST00tQkU6Q0FQUyI+PC9hPjxoMz5HRE9VQkxFX0ZST01fQkUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHRE9VQkxFX0ZST01fQkUodmFsKSAoR0RPVUJMRV9UT19CRSAodmFsKSkKKzwvcHJlPgorPHA+CitDb252ZXJ0IDY0LWJpdCBmbG9hdGluZyBwb2ludCB2YWx1ZSAoZG91YmxlKSBmcm9tIGJpZyBlbmRpYW4gYnl0ZSBvcmRlcgoraW50byBuYXRpdmUgYnl0ZSBvcmRlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnZhbHVlPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdET1VCTEUtRlJPTS1MRTpDQVBTIj48L2E+PGgzPkdET1VCTEVfRlJPTV9MRSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdET1VCTEVfRlJPTV9MRSh2YWwpIChHRE9VQkxFX1RPX0xFICh2YWwpKQorPC9wcmU+Cis8cD4KK0NvbnZlcnQgNjQtYml0IGZsb2F0aW5nIHBvaW50IHZhbHVlIChkb3VibGUpIGZyb20gbGl0dGxlIGVuZGlhbiBieXRlIG9yZGVyCitpbnRvIG5hdGl2ZSBieXRlIG9yZGVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dmFsdWU8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR0RPVUJMRS1TV0FQLUxFLUJFOkNBUFMiPjwvYT48aDM+R0RPVUJMRV9TV0FQX0xFX0JFICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nZG91YmxlPC9zcGFuPjwvYT4gICAgICAgICAgICAgR0RPVUJMRV9TV0FQX0xFX0JFICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiBpbjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1N3YXAgYnl0ZSBvcmRlciBvZiBhIDY0LWJpdCBmbG9hdGluZyBwb2ludCB2YWx1ZSAoZG91YmxlKS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5pbnB1dCB2YWx1ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluPC9jb2RlPjwvZW0+IGJ5dGUtc3dhcHBlZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHRE9VQkxFLVRPLUJFOkNBUFMiPjwvYT48aDM+R0RPVUJMRV9UT19CRSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdET1VCTEVfVE9fQkUodmFsKSAgIChHRE9VQkxFX1NXQVBfTEVfQkUgKHZhbCkpCis8L3ByZT4KKzxwPgorQ29udmVydCA2NC1iaXQgZmxvYXRpbmcgcG9pbnQgdmFsdWUgKGRvdWJsZSkgZnJvbSBuYXRpdmUgYnl0ZSBvcmRlciBpbnRvCitiaWcgZW5kaWFuIGJ5dGUgb3JkZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD52YWx1ZTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHRE9VQkxFLVRPLUxFOkNBUFMiPjwvYT48aDM+R0RPVUJMRV9UT19MRSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdET1VCTEVfVE9fTEUodmFsKSAgICgoZ2RvdWJsZSkgKHZhbCkpCis8L3ByZT4KKzxwPgorQ29udmVydCA2NC1iaXQgZmxvYXRpbmcgcG9pbnQgdmFsdWUgKGRvdWJsZSkgZnJvbSBuYXRpdmUgYnl0ZSBvcmRlciBpbnRvCitsaXR0bGUgZW5kaWFuIGJ5dGUgb3JkZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD52YWx1ZTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHRkxPQVQtRlJPTS1CRTpDQVBTIj48L2E+PGgzPkdGTE9BVF9GUk9NX0JFKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR0ZMT0FUX0ZST01fQkUodmFsKSAgKEdGTE9BVF9UT19CRSAodmFsKSkKKzwvcHJlPgorPHA+CitDb252ZXJ0IDMyLWJpdCBmbG9hdGluZyBwb2ludCB2YWx1ZSAoZmxvYXQpIGZyb20gYmlnIGVuZGlhbiBieXRlIG9yZGVyCitpbnRvIG5hdGl2ZSBieXRlIG9yZGVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dmFsdWU8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR0ZMT0FULUZST00tTEU6Q0FQUyI+PC9hPjxoMz5HRkxPQVRfRlJPTV9MRSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdGTE9BVF9GUk9NX0xFKHZhbCkgIChHRkxPQVRfVE9fTEUgKHZhbCkpCis8L3ByZT4KKzxwPgorQ29udmVydCAzMi1iaXQgZmxvYXRpbmcgcG9pbnQgdmFsdWUgKGZsb2F0KSBmcm9tIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlcgoraW50byBuYXRpdmUgYnl0ZSBvcmRlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnZhbHVlPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdGTE9BVC1TV0FQLUxFLUJFOkNBUFMiPjwvYT48aDM+R0ZMT0FUX1NXQVBfTEVfQkUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gICAgICAgICAgICAgIEdGTE9BVF9TV0FQX0xFX0JFICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+IGluPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU3dhcCBieXRlIG9yZGVyIG9mIGEgMzItYml0IGZsb2F0aW5nIHBvaW50IHZhbHVlIChmbG9hdCkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+aW5wdXQgdmFsdWU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbjwvY29kZT48L2VtPiBieXRlLXN3YXBwZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR0ZMT0FULVRPLUJFOkNBUFMiPjwvYT48aDM+R0ZMT0FUX1RPX0JFKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR0ZMT0FUX1RPX0JFKHZhbCkgICAgKEdGTE9BVF9TV0FQX0xFX0JFICh2YWwpKQorPC9wcmU+Cis8cD4KK0NvbnZlcnQgMzItYml0IGZsb2F0aW5nIHBvaW50IHZhbHVlIChmbG9hdCkgZnJvbSBuYXRpdmUgYnl0ZSBvcmRlciBpbnRvCitiaWcgZW5kaWFuIGJ5dGUgb3JkZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD52YWx1ZTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHRkxPQVQtVE8tTEU6Q0FQUyI+PC9hPjxoMz5HRkxPQVRfVE9fTEUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHRkxPQVRfVE9fTEUodmFsKSAgICAoKGdmbG9hdCkgKHZhbCkpCis8L3ByZT4KKzxwPgorQ29udmVydCAzMi1iaXQgZmxvYXRpbmcgcG9pbnQgdmFsdWUgKGZsb2F0KSBmcm9tIG5hdGl2ZSBieXRlIG9yZGVyIGludG8KK2xpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnZhbHVlPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1mbG93LWdldC1uYW1lIj48L2E+PGgzPmdzdF9mbG93X2dldF9uYW1lICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgIGdzdF9mbG93X2dldF9uYW1lICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4gcmV0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGdpdmVuIGZsb3cgcmV0dXJuLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+IHRvIGdldCB0aGUgbmFtZSBvZi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHN0YXRpYyBzdHJpbmcgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmxvdyByZXR1cm4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWZsb3ctdG8tcXVhcmsiPjwvYT48aDM+Z3N0X2Zsb3dfdG9fcXVhcmsgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdRdWFyazwvc3Bhbj48L2E+ICAgICAgICAgICAgICBnc3RfZmxvd190b19xdWFyayAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+IHJldDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCB0aGUgdW5pcXVlIHF1YXJrIGZvciB0aGUgZ2l2ZW4gR3N0Rmxvd1JldHVybi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiB0byBnZXQgdGhlIHF1YXJrIG9mLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBxdWFyayBhc3NvY2lhdGVkIHdpdGggdGhlIGZsb3cgcmV0dXJuIG9yIDAgaWYgYW4KK2ludmFsaWQgcmV0dXJuIHdhcyBzcGVjaWZpZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXByaW50LWVsZW1lbnQtYXJncyI+PC9hPjxoMz5nc3RfcHJpbnRfZWxlbWVudF9hcmdzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9wcmludF9lbGVtZW50X2FyZ3MgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdHJpbmdzLmh0bWwjR1N0cmluZyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTdHJpbmc8L3NwYW4+PC9hPiAqYnVmPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGluZGVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1ByaW50IHRoZSBlbGVtZW50IGFyZ3VtZW50IGluIGEgaHVtYW4gcmVhZGFibGUgZm9ybWF0IGluIHRoZSBnaXZlbgorR1N0cmluZy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWY8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGJ1ZmZlciB0byBwcmludCB0aGUgYXJncyBpbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5kZW50PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmluaXRpYWwgaW5kZW50YXRpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGVsZW1lbnQgdG8gcHJpbnQgdGhlIGFyZ3Mgb2YuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtcHJpbnQtcGFkLWNhcHMiPjwvYT48aDM+Z3N0X3ByaW50X3BhZF9jYXBzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9wcmludF9wYWRfY2FwcyAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdHJpbmdzLmh0bWwjR1N0cmluZyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTdHJpbmc8L3NwYW4+PC9hPiAqYnVmPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGluZGVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorV3JpdGUgdGhlIHBhZCBjYXBhYmlsaXRpZXMgaW4gYSBodW1hbiByZWFkYWJsZSBmb3JtYXQgaW50bwordGhlIGdpdmVuIEdTdHJpbmcuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBidWZmZXIgdG8gcHJpbnQgdGhlIGNhcHMgaW48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGVudDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5pbml0aWFsIGluZGVudGF0aW9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBhZCB0byBwcmludCB0aGUgY2FwcyBmcm9tLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWd1aW50NjQtdG8tZ2RvdWJsZSI+PC9hPjxoMz5nc3RfZ3VpbnQ2NF90b19nZG91YmxlKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICBnc3RfZ3VpbnQ2NF90b19nZG91YmxlKHZhbHVlKSAgIGdzdF91dGlsX2d1aW50NjRfdG9fZ2RvdWJsZSh2YWx1ZSkKKzwvcHJlPgorPHA+CitDb252ZXJ0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPiB0byBhIGdkb3VibGUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHZhbHVlIHRvIGNvbnZlcnQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPiBjb252ZXJ0ZWQgdG8gYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZ2RvdWJsZS10by1ndWludDY0Ij48L2E+PGgzPmdzdF9nZG91YmxlX3RvX2d1aW50NjQoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgIGdzdF9nZG91YmxlX3RvX2d1aW50NjQodmFsdWUpICAgZ3N0X3V0aWxfZ2RvdWJsZV90b19ndWludDY0KHZhbHVlKQorPC9wcmU+Cis8cD4KK0NvbnZlcnQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+IHRvIGEgZ3VpbnQ2NC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gdmFsdWUgdG8gY29udmVydDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+IGNvbnZlcnRlZCB0byBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10eXBlLXJlZ2lzdGVyLXN0YXRpYy1mdWxsIj48L2E+PGgzPmdzdF90eXBlX3JlZ2lzdGVyX3N0YXRpY19mdWxsICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HVHlwZTwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgZ3N0X3R5cGVfcmVnaXN0ZXJfc3RhdGljX2Z1bGwgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gcGFyZW50X3R5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdHlwZV9uYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gY2xhc3Nfc2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHQmFzZUluaXRGdW5jIj48c3BhbiBjbGFzcz0idHlwZSI+R0Jhc2VJbml0RnVuYzwvc3Bhbj48L2E+IGJhc2VfaW5pdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHQmFzZUZpbmFsaXplRnVuYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdCYXNlRmluYWxpemVGdW5jPC9zcGFuPjwvYT4gYmFzZV9maW5hbGl6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHQ2xhc3NJbml0RnVuYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdDbGFzc0luaXRGdW5jPC9zcGFuPjwvYT4gY2xhc3NfaW5pdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHQ2xhc3NGaW5hbGl6ZUZ1bmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HQ2xhc3NGaW5hbGl6ZUZ1bmM8L3NwYW4+PC9hPiBjbGFzc19maW5hbGl6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NvbnN0cG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjb25zdHBvaW50ZXI8L3NwYW4+PC9hPiBjbGFzc19kYXRhPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5zdGFuY2Vfc2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MTY8L3NwYW4+PC9hPiBuX3ByZWFsbG9jczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHSW5zdGFuY2VJbml0RnVuYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdJbnN0YW5jZUluaXRGdW5jPC9zcGFuPjwvYT4gaW5zdGFuY2VfaW5pdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZVZhbHVlVGFibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZVZhbHVlVGFibGU8L3NwYW4+PC9hPiAqdmFsdWVfdGFibGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGVGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlRmxhZ3M8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0hlbHBlciBmdW5jdGlvbiB3aGljaCBjb25zdHJ1Y3RzIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGVJbmZvIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGVJbmZvPC9zcGFuPjwvYT4gc3RydWN0dXJlIGFuZCByZWdpc3RlcnMgYQorR1R5cGUsIGJ1dCB3aGljaCBnZW5lcmF0ZXMgbGVzcyBsaW5rZXIgb3ZlcmhlYWQgdGhhbiBhIHN0YXRpYyBjb25zdAorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGVJbmZvIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGVJbmZvPC9zcGFuPjwvYT4gc3RydWN0dXJlLiBGb3IgZnVydGhlciBkZXRhaWxzIG9mIHRoZSBwYXJhbWV0ZXJzLCBwbGVhc2Ugc2VlCis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZUluZm8iPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZUluZm88L3NwYW4+PC9hPiBpbiB0aGUgR0xpYiBkb2N1bWVudGF0aW9uLgorPC9wPgorPHA+CitSZWdpc3RlcnMgdHlwZV9uYW1lIGFzIHRoZSBuYW1lIG9mIGEgbmV3IHN0YXRpYyB0eXBlIGRlcml2ZWQgZnJvbQorcGFyZW50X3R5cGUuIFRoZSB2YWx1ZSBvZiBmbGFncyBkZXRlcm1pbmVzIHRoZSBuYXR1cmUgKGUuZy4gYWJzdHJhY3Qgb3IKK25vdCkgb2YgdGhlIHR5cGUuIEl0IHdvcmtzIGJ5IGZpbGxpbmcgYSBHVHlwZUluZm8gc3RydWN0IGFuZCBjYWxsaW5nCis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNnLXR5cGUtcmVnaXN0ZXItc3RhdGljIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMoKTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhcmVudF90eXBlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBHVHlwZSBvZiB0aGUgcGFyZW50IHR5cGUgdGhlIG5ld2x5IHJlZ2lzdGVyZWQgdHlwZSB3aWxsCitkZXJpdmUgZnJvbTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZV9uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPk5VTEwtdGVybWluYXRlZCBzdHJpbmcgdXNlZCBhcyB0aGUgbmFtZSBvZiB0aGUgbmV3IHR5cGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsYXNzX3NpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+U2l6ZSBvZiB0aGUgY2xhc3Mgc3RydWN0dXJlLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YmFzZV9pbml0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkxvY2F0aW9uIG9mIHRoZSBiYXNlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIChvcHRpb25hbCkuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iYXNlX2ZpbmFsaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkxvY2F0aW9uIG9mIHRoZSBiYXNlIGZpbmFsaXphdGlvbiBmdW5jdGlvbiAob3B0aW9uYWwpLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xhc3NfaW5pdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Mb2NhdGlvbiBvZiB0aGUgY2xhc3MgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIGNsYXNzIHR5cGVzCitMb2NhdGlvbiBvZiB0aGUgZGVmYXVsdCB2dGFibGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIGludGVyZmFjZQordHlwZXMuIChvcHRpb25hbCk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsYXNzX2ZpbmFsaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkxvY2F0aW9uIG9mIHRoZSBjbGFzcyBmaW5hbGl6YXRpb24gZnVuY3Rpb24gZm9yIGNsYXNzIHR5cGVzLgorTG9jYXRpb24gb2YgdGhlIGRlZmF1bHQgdnRhYmxlIGZpbmFsaXphdGlvbiBmdW5jdGlvbiBmb3IgaW50ZXJmYWNlIHR5cGVzLgorKG9wdGlvbmFsKTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xhc3NfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Vc2VyLXN1cHBsaWVkIGRhdGEgcGFzc2VkIHRvIHRoZSBjbGFzcyBpbml0L2ZpbmFsaXplIGZ1bmN0aW9ucy48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluc3RhbmNlX3NpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+U2l6ZSBvZiB0aGUgaW5zdGFuY2UgKG9iamVjdCkgc3RydWN0dXJlIChyZXF1aXJlZCBmb3IKK2luc3RhbnRpYXRhYmxlIHR5cGVzIG9ubHkpLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bl9wcmVhbGxvY3M8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIG51bWJlciBvZiBwcmUtYWxsb2NhdGVkIChjYWNoZWQpIGluc3RhbmNlcyB0byByZXNlcnZlCittZW1vcnkgZm9yICgwIGluZGljYXRlcyBubyBjYWNoaW5nKS4gSWdub3JlZCBvbiByZWNlbnQgR0xpYidzLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5zdGFuY2VfaW5pdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Mb2NhdGlvbiBvZiB0aGUgaW5zdGFuY2UgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gKG9wdGlvbmFsLAorZm9yIGluc3RhbnRpYXRhYmxlIHR5cGVzIG9ubHkpLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWVfdGFibGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBHVHlwZVZhbHVlVGFibGUgZnVuY3Rpb24gdGFibGUgZm9yIGdlbmVyaWMgaGFuZGxpbmcgb2YKK0dWYWx1ZXMgb2YgdGhpcyB0eXBlICh1c3VhbGx5IG9ubHkgdXNlZnVsIGZvciBmdW5kYW1lbnRhbCB0eXBlcykuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZUZsYWdzPC9zcGFuPjwvYT4gZm9yIHRoaXMgR1R5cGUuIEUuZzogR19UWVBFX0ZMQUdfQUJTVFJBQ1Q8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiBmb3IgdGhlIG5ld2x5LXJlZ2lzdGVyZWQgdHlwZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjE0PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdXRpbC1kdW1wLW1lbSI+PC9hPjxoMz5nc3RfdXRpbF9kdW1wX21lbSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfdXRpbF9kdW1wX21lbSAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWNoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWNoYXI8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0R1bXBzIHRoZSBtZW1vcnkgYmxvY2sgaW50byBhIGhleCByZXByZXNlbnRhdGlvbi4gVXNlZnVsIGZvciBkZWJ1Z2dpbmcuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgcG9pbnRlciB0byB0aGUgbWVtb3J5IHRvIGR1bXA8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNpemUgb2YgdGhlIG1lbW9yeSBibG9jayB0byBkdW1wPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXV0aWwtdWludDY0LXNjYWxlIj48L2E+PGgzPmdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICAgICAgICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IG51bTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBkZW5vbTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NjYWxlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4gYnkgdGhlIHJhdGlvbmFsIG51bWJlciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnVtPC9jb2RlPjwvZW0+IC8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlbm9tPC9jb2RlPjwvZW0+LCBhdm9pZGluZyBvdmVyZmxvd3MgYW5kCit1bmRlcmZsb3dzIGFuZCB3aXRob3V0IGxvc3Mgb2YgcHJlY2lzaW9uLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIGNhbiBwb3RlbnRpYWxseSBiZSB2ZXJ5IHNsb3cgaWYgdmFsIGFuZCBudW0gYXJlIGJvdGgKK2dyZWF0ZXIgdGhhbiBHX01BWFVJTlQzMi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG51bWJlciB0byBzY2FsZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBudW1lcmF0b3Igb2YgdGhlIHNjYWxlIHJhdGlvPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZW5vbTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZGVub21pbmF0b3Igb2YgdGhlIHNjYWxlIHJhdGlvPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+ICogPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm51bTwvY29kZT48L2VtPiAvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZW5vbTwvY29kZT48L2VtPi4gIEluIHRoZSBjYXNlIG9mIGFuIG92ZXJmbG93LCB0aGlzCitmdW5jdGlvbiByZXR1cm5zIEdfTUFYVUlOVDY0LiAgSWYgdGhlIHJlc3VsdCBpcyBub3QgZXhhY3RseQorcmVwcmVzZW50YWJsZSBhcyBhbiBpbnRlZ2VyIGl0IGlzIHRydW5jYXRlZC4gIFNlZSBhbHNvCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtdWludDY0LXNjYWxlLXJvdW5kIiB0aXRsZT0iZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCgpPC9jb2RlPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUtY2VpbCIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlsICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlsKCk8L2NvZGU+PC9hPiwKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUtaW50IiB0aXRsZT0iZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KCk8L2NvZGU+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1pbnQtcm91bmQiIHRpdGxlPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQoKTwvY29kZT48L2E+LAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1pbnQtY2VpbCIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWwoKTwvY29kZT48L2E+LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC11dGlsLXVpbnQ2NC1zY2FsZS1yb3VuZCI+PC9hPjxoMz5nc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBudW08L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gZGVub208L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTY2FsZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+IGJ5IHRoZSByYXRpb25hbCBudW1iZXIgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm51bTwvY29kZT48L2VtPiAvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZW5vbTwvY29kZT48L2VtPiwgYXZvaWRpbmcgb3ZlcmZsb3dzIGFuZAordW5kZXJmbG93cyBhbmQgd2l0aG91dCBsb3NzIG9mIHByZWNpc2lvbi4KKzwvcD4KKzxwPgorVGhpcyBmdW5jdGlvbiBjYW4gcG90ZW50aWFsbHkgYmUgdmVyeSBzbG93IGlmIHZhbCBhbmQgbnVtIGFyZSBib3RoCitncmVhdGVyIHRoYW4gR19NQVhVSU5UMzIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBudW1iZXIgdG8gc2NhbGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm51bTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbnVtZXJhdG9yIG9mIHRoZSBzY2FsZSByYXRpbzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVub208L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGRlbm9taW5hdG9yIG9mIHRoZSBzY2FsZSByYXRpbzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPiAqIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5udW08L2NvZGU+PC9lbT4gLyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVub208L2NvZGU+PC9lbT4uICBJbiB0aGUgY2FzZSBvZiBhbiBvdmVyZmxvdywgdGhpcworZnVuY3Rpb24gcmV0dXJucyBHX01BWFVJTlQ2NC4gIElmIHRoZSByZXN1bHQgaXMgbm90IGV4YWN0bHkKK3JlcHJlc2VudGFibGUgYXMgYW4gaW50ZWdlciwgaXQgaXMgcm91bmRlZCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyCisoaGFsZi13YXkgY2FzZXMgYXJlIHJvdW5kZWQgdXApLiAgU2VlIGFsc28gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZSIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdXRpbF91aW50NjRfc2NhbGUoKTwvY29kZT48L2E+LAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1jZWlsIiB0aXRsZT0iZ3N0X3V0aWxfdWludDY0X3NjYWxlX2NlaWwgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3V0aWxfdWludDY0X3NjYWxlX2NlaWwoKTwvY29kZT48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtdWludDY0LXNjYWxlLWludCIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCgpPC9jb2RlPjwvYT4sCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtdWludDY0LXNjYWxlLWludC1yb3VuZCIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCgpPC9jb2RlPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUtaW50LWNlaWwiIHRpdGxlPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWwgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9jZWlsKCk8L2NvZGU+PC9hPi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdXRpbC11aW50NjQtc2NhbGUtY2VpbCI+PC9hPjxoMz5nc3RfdXRpbF91aW50NjRfc2NhbGVfY2VpbCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICAgICAgICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlsICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IG51bTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBkZW5vbTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NjYWxlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4gYnkgdGhlIHJhdGlvbmFsIG51bWJlciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnVtPC9jb2RlPjwvZW0+IC8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlbm9tPC9jb2RlPjwvZW0+LCBhdm9pZGluZyBvdmVyZmxvd3MgYW5kCit1bmRlcmZsb3dzIGFuZCB3aXRob3V0IGxvc3Mgb2YgcHJlY2lzaW9uLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIGNhbiBwb3RlbnRpYWxseSBiZSB2ZXJ5IHNsb3cgaWYgdmFsIGFuZCBudW0gYXJlIGJvdGgKK2dyZWF0ZXIgdGhhbiBHX01BWFVJTlQzMi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG51bWJlciB0byBzY2FsZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBudW1lcmF0b3Igb2YgdGhlIHNjYWxlIHJhdGlvPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZW5vbTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZGVub21pbmF0b3Igb2YgdGhlIHNjYWxlIHJhdGlvPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+ICogPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm51bTwvY29kZT48L2VtPiAvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZW5vbTwvY29kZT48L2VtPi4gIEluIHRoZSBjYXNlIG9mIGFuIG92ZXJmbG93LCB0aGlzCitmdW5jdGlvbiByZXR1cm5zIEdfTUFYVUlOVDY0LiAgSWYgdGhlIHJlc3VsdCBpcyBub3QgZXhhY3RseQorcmVwcmVzZW50YWJsZSBhcyBhbiBpbnRlZ2VyLCBpdCBpcyByb3VuZGVkIHVwLiAgU2VlIGFsc28KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUiIHRpdGxlPSJnc3RfdXRpbF91aW50NjRfc2NhbGUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3V0aWxfdWludDY0X3NjYWxlKCk8L2NvZGU+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1yb3VuZCIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQoKTwvY29kZT48L2E+LAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1pbnQiIHRpdGxlPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQoKTwvY29kZT48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtdWludDY0LXNjYWxlLWludC1yb3VuZCIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCgpPC9jb2RlPjwvYT4sCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtdWludDY0LXNjYWxlLWludC1jZWlsIiB0aXRsZT0iZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9jZWlsICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbCgpPC9jb2RlPjwvYT4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXV0aWwtdWludDY0LXNjYWxlLWludCI+PC9hPjxoMz5nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbnVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGRlbm9tPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2NhbGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPiBieSB0aGUgcmF0aW9uYWwgbnVtYmVyIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5udW08L2NvZGU+PC9lbT4gLyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVub208L2NvZGU+PC9lbT4sIGF2b2lkaW5nIG92ZXJmbG93cyBhbmQKK3VuZGVyZmxvd3MgYW5kIHdpdGhvdXQgbG9zcyBvZiBwcmVjaXNpb24uICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnVtPC9jb2RlPjwvZW0+IG11c3QgYmUgbm9uLW5lZ2F0aXZlIGFuZAorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlbm9tPC9jb2RlPjwvZW0+IG11c3QgYmUgcG9zaXRpdmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmd1aW50NjQgKHN1Y2ggYXMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPikgdG8gc2NhbGUuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5udW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bnVtZXJhdG9yIG9mIHRoZSBzY2FsZSBmYWN0b3IuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZW5vbTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5kZW5vbWluYXRvciBvZiB0aGUgc2NhbGUgZmFjdG9yLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPiAqIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5udW08L2NvZGU+PC9lbT4gLyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVub208L2NvZGU+PC9lbT4uICBJbiB0aGUgY2FzZSBvZiBhbiBvdmVyZmxvdywgdGhpcworZnVuY3Rpb24gcmV0dXJucyBHX01BWFVJTlQ2NC4gIElmIHRoZSByZXN1bHQgaXMgbm90IGV4YWN0bHkKK3JlcHJlc2VudGFibGUgYXMgYW4gaW50ZWdlciwgaXQgaXMgdHJ1bmNhdGVkLiAgU2VlIGFsc28KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUtaW50LXJvdW5kIiB0aXRsZT0iZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kKCk8L2NvZGU+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1pbnQtY2VpbCIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWwoKTwvY29kZT48L2E+LAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZSIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdXRpbF91aW50NjRfc2NhbGUoKTwvY29kZT48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtdWludDY0LXNjYWxlLXJvdW5kIiB0aXRsZT0iZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCgpPC9jb2RlPjwvYT4sCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtdWludDY0LXNjYWxlLWNlaWwiIHRpdGxlPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfY2VpbCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdXRpbF91aW50NjRfc2NhbGVfY2VpbCgpPC9jb2RlPjwvYT4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXV0aWwtdWludDY0LXNjYWxlLWludC1yb3VuZCI+PC9hPjxoMz5nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbnVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGRlbm9tPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2NhbGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPiBieSB0aGUgcmF0aW9uYWwgbnVtYmVyIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5udW08L2NvZGU+PC9lbT4gLyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVub208L2NvZGU+PC9lbT4sIGF2b2lkaW5nIG92ZXJmbG93cyBhbmQKK3VuZGVyZmxvd3MgYW5kIHdpdGhvdXQgbG9zcyBvZiBwcmVjaXNpb24uICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnVtPC9jb2RlPjwvZW0+IG11c3QgYmUgbm9uLW5lZ2F0aXZlIGFuZAorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlbm9tPC9jb2RlPjwvZW0+IG11c3QgYmUgcG9zaXRpdmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmd1aW50NjQgKHN1Y2ggYXMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPikgdG8gc2NhbGUuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5udW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bnVtZXJhdG9yIG9mIHRoZSBzY2FsZSBmYWN0b3IuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZW5vbTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5kZW5vbWluYXRvciBvZiB0aGUgc2NhbGUgZmFjdG9yLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPiAqIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5udW08L2NvZGU+PC9lbT4gLyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVub208L2NvZGU+PC9lbT4uICBJbiB0aGUgY2FzZSBvZiBhbiBvdmVyZmxvdywgdGhpcworZnVuY3Rpb24gcmV0dXJucyBHX01BWFVJTlQ2NC4gIElmIHRoZSByZXN1bHQgaXMgbm90IGV4YWN0bHkKK3JlcHJlc2VudGFibGUgYXMgYW4gaW50ZWdlciwgaXQgaXMgcm91bmRlZCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyCisoaGFsZi13YXkgY2FzZXMgYXJlIHJvdW5kZWQgdXApLiAgU2VlIGFsc28gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1pbnQiIHRpdGxlPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQoKTwvY29kZT48L2E+LAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1pbnQtY2VpbCIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWwoKTwvY29kZT48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtdWludDY0LXNjYWxlIiB0aXRsZT0iZ3N0X3V0aWxfdWludDY0X3NjYWxlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF91dGlsX3VpbnQ2NF9zY2FsZSgpPC9jb2RlPjwvYT4sCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtdWludDY0LXNjYWxlLXJvdW5kIiB0aXRsZT0iZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCgpPC9jb2RlPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUtY2VpbCIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlsICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlsKCk8L2NvZGU+PC9hPi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdXRpbC11aW50NjQtc2NhbGUtaW50LWNlaWwiPjwvYT48aDM+Z3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9jZWlsICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9jZWlsICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbnVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGRlbm9tPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2NhbGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPiBieSB0aGUgcmF0aW9uYWwgbnVtYmVyIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5udW08L2NvZGU+PC9lbT4gLyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVub208L2NvZGU+PC9lbT4sIGF2b2lkaW5nIG92ZXJmbG93cyBhbmQKK3VuZGVyZmxvd3MgYW5kIHdpdGhvdXQgbG9zcyBvZiBwcmVjaXNpb24uICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnVtPC9jb2RlPjwvZW0+IG11c3QgYmUgbm9uLW5lZ2F0aXZlIGFuZAorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlbm9tPC9jb2RlPjwvZW0+IG11c3QgYmUgcG9zaXRpdmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmd1aW50NjQgKHN1Y2ggYXMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPikgdG8gc2NhbGUuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5udW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bnVtZXJhdG9yIG9mIHRoZSBzY2FsZSBmYWN0b3IuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZW5vbTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5kZW5vbWluYXRvciBvZiB0aGUgc2NhbGUgZmFjdG9yLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPiAqIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5udW08L2NvZGU+PC9lbT4gLyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVub208L2NvZGU+PC9lbT4uICBJbiB0aGUgY2FzZSBvZiBhbiBvdmVyZmxvdywgdGhpcworZnVuY3Rpb24gcmV0dXJucyBHX01BWFVJTlQ2NC4gIElmIHRoZSByZXN1bHQgaXMgbm90IGV4YWN0bHkKK3JlcHJlc2VudGFibGUgYXMgYW4gaW50ZWdlciwgaXQgaXMgcm91bmRlZCB1cC4gIFNlZSBhbHNvCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtdWludDY0LXNjYWxlLWludCIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCgpPC9jb2RlPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUtaW50LXJvdW5kIiB0aXRsZT0iZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kKCk8L2NvZGU+PC9hPiwKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUiIHRpdGxlPSJnc3RfdXRpbF91aW50NjRfc2NhbGUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3V0aWxfdWludDY0X3NjYWxlKCk8L2NvZGU+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1yb3VuZCIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQoKTwvY29kZT48L2E+LAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1jZWlsIiB0aXRsZT0iZ3N0X3V0aWxfdWludDY0X3NjYWxlX2NlaWwgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3V0aWxfdWludDY0X3NjYWxlX2NlaWwoKTwvY29kZT48L2E+LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC11dGlsLWdyZWF0ZXN0LWNvbW1vbi1kaXZpc29yIj48L2E+PGgzPmdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBhPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDYWxjdWxhdGVzIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YTwvY29kZT48L2VtPgorYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Rmlyc3QgdmFsdWUgYXMgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5TZWNvbmQgdmFsdWUgYXMgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hPC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXV0aWwtZnJhY3Rpb24tdG8tZG91YmxlIj48L2E+PGgzPmdzdF91dGlsX2ZyYWN0aW9uX3RvX2RvdWJsZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfdXRpbF9mcmFjdGlvbl90b19kb3VibGUgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IHNyY19uPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IHNyY19kPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICpkZXN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVHJhbnNmb3JtcyBhIGZyYWN0aW9uIHRvIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjX248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+RnJhY3Rpb24gbnVtZXJhdG9yIGFzIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyY19kPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkZyYWN0aW9uIGRlbm9taW5hdG9yIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9pbnRlciB0byBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IGZvciB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXV0aWwtZG91YmxlLXRvLWZyYWN0aW9uIj48L2E+PGgzPmdzdF91dGlsX2RvdWJsZV90b19mcmFjdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfdXRpbF9kb3VibGVfdG9fZnJhY3Rpb24gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IHNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAqZGVzdF9uPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICpkZXN0X2Q8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitUcmFuc2Zvcm1zIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gdG8gYSBmcmFjdGlvbiBhbmQgc2ltcGxpZmllcwordGhlIHJlc3VsdC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiB0byB0cmFuc2Zvcm08L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3RfbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wb2ludGVyIHRvIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gdG8gaG9sZCB0aGUgcmVzdWx0IG51bWVyYXRvci4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdF9kPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnBvaW50ZXIgdG8gYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiB0byBob2xkIHRoZSByZXN1bHQgZGVub21pbmF0b3IuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI2PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdXRpbC1mcmFjdGlvbi1tdWx0aXBseSI+PC9hPjxoMz5nc3RfdXRpbF9mcmFjdGlvbl9tdWx0aXBseSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfdXRpbF9mcmFjdGlvbl9tdWx0aXBseSAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGFfbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBhX2Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gYl9uPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGJfZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAqcmVzX248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gKnJlc19kPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorTXVsdGlwbGllcyB0aGUgZnJhY3Rpb25zIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hX248L2NvZGU+PC9lbT4vPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFfZDwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJfbjwvY29kZT48L2VtPi88ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Yl9kPC9jb2RlPjwvZW0+IGFuZCBzdG9yZXMKK3RoZSByZXN1bHQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlc19uPC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVzX2Q8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YV9uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPk51bWVyYXRvciBvZiBmaXJzdCB2YWx1ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YV9kPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkRlbm9taW5hdG9yIG9mIGZpcnN0IHZhbHVlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iX248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+TnVtZXJhdG9yIG9mIHNlY29uZCB2YWx1ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Yl9kPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkRlbm9taW5hdG9yIG9mIHNlY29uZCB2YWx1ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVzX248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UG9pbnRlciB0byA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiB0byBob2xkIHRoZSByZXN1bHQgbnVtZXJhdG9yLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZXNfZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Qb2ludGVyIHRvIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IHRvIGhvbGQgdGhlIHJlc3VsdCBkZW5vbWluYXRvci4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvbiBvdmVyZmxvdywgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC11dGlsLWZyYWN0aW9uLWFkZCI+PC9hPjxoMz5nc3RfdXRpbF9mcmFjdGlvbl9hZGQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3V0aWxfZnJhY3Rpb25fYWRkICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBhX248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gYV9kPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGJfbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBiX2Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gKnJlc19uPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICpyZXNfZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0FkZHMgdGhlIGZyYWN0aW9ucyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YV9uPC9jb2RlPjwvZW0+LzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hX2Q8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iX248L2NvZGU+PC9lbT4vPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJfZDwvY29kZT48L2VtPiBhbmQgc3RvcmVzCit0aGUgcmVzdWx0IGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZXNfbjwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlc19kPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFfbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5OdW1lcmF0b3Igb2YgZmlyc3QgdmFsdWU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFfZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5EZW5vbWluYXRvciBvZiBmaXJzdCB2YWx1ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Yl9uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPk51bWVyYXRvciBvZiBzZWNvbmQgdmFsdWU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJfZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5EZW5vbWluYXRvciBvZiBzZWNvbmQgdmFsdWU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlc19uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlBvaW50ZXIgdG8gPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gdG8gaG9sZCB0aGUgcmVzdWx0IG51bWVyYXRvci4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVzX2Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UG9pbnRlciB0byA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiB0byBob2xkIHRoZSByZXN1bHQgZGVub21pbmF0b3IuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb24gb3ZlcmZsb3csIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI2PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdXRpbC1mcmFjdGlvbi1jb21wYXJlIj48L2E+PGgzPmdzdF91dGlsX2ZyYWN0aW9uX2NvbXBhcmUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICBnc3RfdXRpbF9mcmFjdGlvbl9jb21wYXJlICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGFfbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBhX2Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gYl9uPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGJfZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NvbXBhcmVzIHRoZSBmcmFjdGlvbnMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFfbjwvY29kZT48L2VtPi88ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YV9kPC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Yl9uPC9jb2RlPjwvZW0+LzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iX2Q8L2NvZGU+PC9lbT4gYW5kIHJldHVybnMKKy0xIGlmIGEgJmx0OyBiLCAwIGlmIGEgPSBiIGFuZCAxIGlmIGEgJmd0OyBiLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFfbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5OdW1lcmF0b3Igb2YgZmlyc3QgdmFsdWU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFfZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5EZW5vbWluYXRvciBvZiBmaXJzdCB2YWx1ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Yl9uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPk51bWVyYXRvciBvZiBzZWNvbmQgdmFsdWU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJfZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5EZW5vbWluYXRvciBvZiBzZWNvbmQgdmFsdWU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4tMSBpZiBhICZsdDsgYjsgMCBpZiBhID0gYjsgMSBpZiBhICZndDsgYi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMxPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdXRpbC1zZXFudW0tbmV4dCI+PC9hPjxoMz5nc3RfdXRpbF9zZXFudW1fbmV4dCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICAgICAgICAgICAgIGdzdF91dGlsX3NlcW51bV9uZXh0ICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0dXJuIGEgY29uc3RhbnRseSBpbmNyZW1lbnRpbmcgc2VxdWVuY2UgbnVtYmVyLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW50ZXJuYWxseSB0byBHU3RyZWFtZXIgdG8gYmUgYWJsZSB0byBkZXRlcm1pbmUgd2hpY2gKK2V2ZW50cyBhbmQgbWVzc2FnZXMgYXJlICJ0aGUgc2FtZSIuIEZvciBleGFtcGxlLCBlbGVtZW50cyBtYXkgc2V0IHRoZSBzZXFudW0KK29uIGEgc2VnbWVudC1kb25lIG1lc3NhZ2UgdG8gYmUgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUgbGFzdCBzZWVrIGV2ZW50LCB0bworaW5kaWNhdGUgdGhhdCBldmVudCBhbmQgdGhlIG1lc3NhZ2UgY29ycmVzcG9uZCB0byB0aGUgc2FtZSBzZWdtZW50LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBjb25zdGFudGx5IGluY3JlbWVudGluZyAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciwgd2hpY2ggbWlnaHQKK292ZXJmbG93IGJhY2sgdG8gMCBhdCBzb21lIHBvaW50LiBVc2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXNlcW51bS1jb21wYXJlIiB0aXRsZT0iZ3N0X3V0aWxfc2VxbnVtX2NvbXBhcmUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3V0aWxfc2VxbnVtX2NvbXBhcmUoKTwvY29kZT48L2E+IHRvIG1ha2Ugc3VyZQoreW91IGhhbmRsZSB3cmFwYXJvdW5kIGNvcnJlY3RseS48L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXV0aWwtc2VxbnVtLWNvbXBhcmUiPjwvYT48aDM+Z3N0X3V0aWxfc2VxbnVtX2NvbXBhcmUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDMyPC9zcGFuPjwvYT4gICAgICAgICAgICAgIGdzdF91dGlsX3NlcW51bV9jb21wYXJlICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gczE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gczI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb21wYXJlIHR3byBzZXF1ZW5jZSBudW1iZXJzLCBoYW5kbGluZyB3cmFwYXJvdW5kLgorPC9wPgorPHA+CitUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBqdXN0IHJldHVybnMgKGdpbnQzMikoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnMxPC9jb2RlPjwvZW0+IC0gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnMyPC9jb2RlPjwvZW0+KS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zMTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIHNlcXVlbmNlIG51bWJlci48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnMyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkFub3RoZXIgc2VxdWVuY2UgbnVtYmVyLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgbmVnYXRpdmUgbnVtYmVyIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zMTwvY29kZT48L2VtPiBpcyBiZWZvcmUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnMyPC9jb2RlPjwvZW0+LCAwIGlmIHRoZXkgYXJlIGVxdWFsLCBvciBhCitwb3NpdGl2ZSBudW1iZXIgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnMxPC9jb2RlPjwvZW0+IGlzIGFmdGVyIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zMjwvY29kZT48L2VtPi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdXRpbC1zZXQtb2JqZWN0LWFyZyI+PC9hPjxoMz5nc3RfdXRpbF9zZXRfb2JqZWN0X2FyZyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfdXRpbF9zZXRfb2JqZWN0X2FyZyAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NvbnZlcnRlcyB0aGUgc3RyaW5nIHZhbHVlIHRvIHRoZSB0eXBlIG9mIHRoZSBvYmplY3RzIGFyZ3VtZW50IGFuZAorc2V0cyB0aGUgYXJndW1lbnQgd2l0aCBpdC4KKzwvcD4KKzxwPgorTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2lsZW50bHkgcmV0dXJucyBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+IGhhcyBubyBwcm9wZXJ0eSBuYW1lZAorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT4gb3Igd2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4gY2Fubm90IGJlIGNvbnZlcnRlZCB0byB0aGUgdHlwZSBvZiB0aGUgcHJvcGVydHkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBvYmplY3QgdG8gc2V0IHRoZSBhcmd1bWVudCBvZjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmFtZSBvZiB0aGUgYXJndW1lbnQgdG8gc2V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc3RyaW5nIHZhbHVlIHRvIHNldDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC11dGlsLXNldC12YWx1ZS1mcm9tLXN0cmluZyI+PC9hPjxoMz5nc3RfdXRpbF9zZXRfdmFsdWVfZnJvbV9zdHJpbmcgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnZhbHVlX3N0cjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NvbnZlcnRzIHRoZSBzdHJpbmcgdG8gdGhlIHR5cGUgb2YgdGhlIHZhbHVlIGFuZAorc2V0cyB0aGUgdmFsdWUgd2l0aCBpdC4KKzwvcD4KKzxwPgorTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgZGFuZ2Vyb3VzIGFzIGl0IGRvZXMgbm90IHJldHVybiBhbnkgaW5kaWNhdGlvbgoraWYgdGhlIGNvbnZlcnNpb24gd29ya2VkIG9yIG5vdC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdmFsdWUgdG8gc2V0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT4gY2FsbGVyLWFsbG9jYXRlc108L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlX3N0cjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc3RyaW5nIHRvIGdldCB0aGUgdmFsdWUgZnJvbTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC11dGlsLWdldC10aW1lc3RhbXAiPjwvYT48aDM+Z3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+ICAgICAgICBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCBhIHRpbWVzdGFtcCBhcyBHc3RDbG9ja1RpbWUgdG8gYmUgdXNlZCBmb3IgaW50ZXJ2YWwgbWVhc3VyZW1lbnRzLgorVGhlIHRpbWVzdGFtcCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGluIGFueSBvdGhlciB3YXkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdGltZXN0YW1wPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFNlYXJjaE1vZGUiPjwvYT48aDM+ZW51bSBHc3RTZWFyY2hNb2RlPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGVudW0geworICBHU1RfU0VBUkNIX01PREVfRVhBQ1QgPSAwLAorICBHU1RfU0VBUkNIX01PREVfQkVGT1JFLAorICBHU1RfU0VBUkNIX01PREVfQUZURVIKK30gR3N0U2VhcmNoTW9kZTsKKzwvcHJlPgorPHA+CitUaGUgZGlmZmVyZW50IHNlYXJjaCBtb2Rlcy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVNFQVJDSC1NT0RFLUVYQUNUOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TRUFSQ0hfTU9ERV9FWEFDVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+T25seSBzZWFyY2ggZm9yIGV4YWN0IG1hdGNoZXMuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtU0VBUkNILU1PREUtQkVGT1JFOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TRUFSQ0hfTU9ERV9CRUZPUkU8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPlNlYXJjaCBmb3IgYW4gZXhhY3QgbWF0Y2ggb3IgdGhlIGVsZW1lbnQganVzdCBiZWZvcmUuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtU0VBUkNILU1PREUtQUZURVI6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NFQVJDSF9NT0RFX0FGVEVSPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5TZWFyY2ggZm9yIGFuIGV4YWN0IG1hdGNoIG9yIHRoZSBlbGVtZW50IGp1c3QgYWZ0ZXIuCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdXRpbC1hcnJheS1iaW5hcnktc2VhcmNoIj48L2E+PGgzPmdzdF91dGlsX2FycmF5X2JpbmFyeV9zZWFyY2ggKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3V0aWxfYXJyYXlfYmluYXJ5X3NlYXJjaCAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGFycmF5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbnVtX2VsZW1lbnRzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gZWxlbWVudF9zaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dDb21wYXJlRGF0YUZ1bmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HQ29tcGFyZURhdGFGdW5jPC9zcGFuPjwvYT4gc2VhcmNoX2Z1bmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dzdFNlYXJjaE1vZGUiIHRpdGxlPSJlbnVtIEdzdFNlYXJjaE1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWFyY2hNb2RlPC9zcGFuPjwvYT4gbW9kZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NvbnN0cG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjb25zdHBvaW50ZXI8L3NwYW4+PC9hPiBzZWFyY2hfZGF0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NlYXJjaGVzIGluc2lkZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YXJyYXk8L2NvZGU+PC9lbT4gZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWFyY2hfZGF0YTwvY29kZT48L2VtPiBieSB1c2luZyB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlYXJjaF9mdW5jPC9jb2RlPjwvZW0+LiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YXJyYXk8L2NvZGU+PC9lbT4gbXVzdCBiZSBzb3J0ZWQgYXNjZW5kaW5nLgorPC9wPgorPHA+CitBcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VhcmNoX2RhdGE8L2NvZGU+PC9lbT4gaXMgYWx3YXlzIHBhc3NlZCBhcyBzZWNvbmQgYXJndW1lbnQgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlYXJjaF9mdW5jPC9jb2RlPjwvZW0+IGl0J3MKK25vdCByZXF1aXJlZCB0aGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWFyY2hfZGF0YTwvY29kZT48L2VtPiBoYXMgdGhlIHNhbWUgdHlwZSBhcyB0aGUgYXJyYXkgZWxlbWVudHMuCis8L3A+Cis8cD4KK1RoZSBjb21wbGV4aXR5IG9mIHRoaXMgc2VhcmNoIGZ1bmN0aW9uIGlzIE8obG9nIChudW1fZWxlbWVudHMpKS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hcnJheTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc29ydGVkIGlucHV0IGFycmF5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5udW1fZWxlbWVudHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudF9zaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnNpemUgb2YgZXZlcnkgZWxlbWVudCBpbiBieXRlczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VhcmNoX2Z1bmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZnVuY3Rpb24gdG8gY29tcGFyZSB0d28gZWxlbWVudHMsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWFyY2hfZGF0YTwvY29kZT48L2VtPiB3aWxsIGFsd2F5cyBiZSBwYXNzZWQgYXMgc2Vjb25kIGFyZ3VtZW50LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGUgY2FsbGJhY2sgaXMgdmFsaWQgb25seSBkdXJpbmcgdGhlIGNhbGwgdG8gdGhlIG1ldGhvZC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5zY29wZSBjYWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tb2RlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnNlYXJjaCBtb2RlIHRoYXQgc2hvdWxkIGJlIHVzZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlYXJjaF9kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmVsZW1lbnQgdGhhdCBzaG91bGQgYmUgZm91bmQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5kYXRhIHRvIHBhc3MgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlYXJjaF9mdW5jPC9jb2RlPjwvZW0+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGlzIHBhcmFtZXRlciBpcyBhICd1c2VyX2RhdGEnLCBmb3IgY2FsbGJhY2tzOyBtYW55IGJpbmRpbmdzIGNhbiBwYXNzIE5VTEwgaGVyZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5jbG9zdXJlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGFkZHJlc3Mgb2YgdGhlIGZvdW5kIGVsZW1lbnQgb3IgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgbm90aGluZyB3YXMgZm91bmQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIzPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhN2ExMjEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sCkBAIC0wLDAgKzEsMjM1MCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdzdFZhbHVlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1Hc3RWZXJzaW9uLmh0bWwiIHRpdGxlPSJHc3RWZXJzaW9uIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZlcnNpb24uaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNnc3RyZWFtZXItR3N0VmFsdWUuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItR3N0VmFsdWUuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFZhbHVlIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFZhbHVlLnRvcF9vZl9wYWdlIj48L2E+R3N0VmFsdWU8L3NwYW4+PC9oMj4KKzxwPkdzdFZhbHVlIOKAlCBHVmFsdWUgaW1wbGVtZW50YXRpb25zIHNwZWNpZmljCit0byBHU3RyZWFtZXI8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0VmFsdWUuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKKworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULU1BS0UtRk9VUkNDOkNBUFMiIHRpdGxlPSJHU1RfTUFLRV9GT1VSQ0MoKSI+R1NUX01BS0VfRk9VUkNDPC9hPiAgICAgICAgICAgICAgICAgICAgIChhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVNUUi1GT1VSQ0M6Q0FQUyIgdGl0bGU9IkdTVF9TVFJfRk9VUkNDKCkiPkdTVF9TVFJfRk9VUkNDPC9hPiAgICAgICAgICAgICAgICAgICAgICAoZikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1GT1VSQ0MtRk9STUFUOkNBUFMiIHRpdGxlPSJHU1RfRk9VUkNDX0ZPUk1BVCI+R1NUX0ZPVVJDQ19GT1JNQVQ8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtRk9VUkNDLUFSR1M6Q0FQUyIgdGl0bGU9IkdTVF9GT1VSQ0NfQVJHUygpIj5HU1RfRk9VUkNDX0FSR1M8L2E+ICAgICAgICAgICAgICAgICAgICAgKGZvdXJjYykKKworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLUlOVC1SQU5HRTpDQVBTIiB0aXRsZT0iR1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRSgpIj5HU1RfVkFMVUVfSE9MRFNfSU5UX1JBTkdFPC9hPiAgICAgICAgICAgKHgpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1JTlQtUkFOR0U6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0lOVF9SQU5HRSI+R1NUX1RZUEVfSU5UX1JBTkdFPC9hPgorPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXNldC1pbnQtcmFuZ2UiIHRpdGxlPSJnc3RfdmFsdWVfc2V0X2ludF9yYW5nZSAoKSI+Z3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2U8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBzdGFydDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBlbmQ8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWludC1yYW5nZS1taW4iIHRpdGxlPSJnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW4gKCkiPmdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbjwvYT4gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWludC1yYW5nZS1tYXgiIHRpdGxlPSJnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXggKCkiPmdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heDwvYT4gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOworCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtSU5UNjQtUkFOR0U6Q0FQUyIgdGl0bGU9IkdTVF9WQUxVRV9IT0xEU19JTlQ2NF9SQU5HRSgpIj5HU1RfVkFMVUVfSE9MRFNfSU5UNjRfUkFOR0U8L2E+ICAgICAgICAgKHgpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1JTlQ2NC1SQU5HRTpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfSU5UNjRfUkFOR0UiPkdTVF9UWVBFX0lOVDY0X1JBTkdFPC9hPgorPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXNldC1pbnQ2NC1yYW5nZSIgdGl0bGU9ImdzdF92YWx1ZV9zZXRfaW50NjRfcmFuZ2UgKCkiPmdzdF92YWx1ZV9zZXRfaW50NjRfcmFuZ2U8L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHN0YXJ0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBlbmQ8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtaW50NjQtcmFuZ2UtbWluIiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9taW4gKCkiPmdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWluPC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtaW50NjQtcmFuZ2UtbWF4IiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9tYXggKCkiPmdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWF4PC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOworCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtRE9VQkxFLVJBTkdFOkNBUFMiIHRpdGxlPSJHU1RfVkFMVUVfSE9MRFNfRE9VQkxFX1JBTkdFKCkiPkdTVF9WQUxVRV9IT0xEU19ET1VCTEVfUkFOR0U8L2E+ICAgICAgICAoeCkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLURPVUJMRS1SQU5HRTpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfRE9VQkxFX1JBTkdFIj5HU1RfVFlQRV9ET1VCTEVfUkFOR0U8L2E+Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWRvdWJsZS1yYW5nZSIgdGl0bGU9ImdzdF92YWx1ZV9zZXRfZG91YmxlX3JhbmdlICgpIj5nc3RfdmFsdWVfc2V0X2RvdWJsZV9yYW5nZTwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IHN0YXJ0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IGVuZDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nZG91YmxlPC9zcGFuPjwvYT4gICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtZG91YmxlLXJhbmdlLW1pbiIgdGl0bGU9ImdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21pbiAoKSI+Z3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWluPC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nZG91YmxlPC9zcGFuPjwvYT4gICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtZG91YmxlLXJhbmdlLW1heCIgdGl0bGU9ImdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21heCAoKSI+Z3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWF4PC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7CisKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1MSVNUOkNBUFMiIHRpdGxlPSJHU1RfVkFMVUVfSE9MRFNfTElTVCgpIj5HU1RfVkFMVUVfSE9MRFNfTElTVDwvYT4gICAgICAgICAgICAgICAgKHgpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1MSVNUOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9MSVNUIj5HU1RfVFlQRV9MSVNUPC9hPgorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLUFSUkFZOkNBUFMiIHRpdGxlPSJHU1RfVkFMVUVfSE9MRFNfQVJSQVkoKSI+R1NUX1ZBTFVFX0hPTERTX0FSUkFZPC9hPiAgICAgICAgICAgICAgICh4KQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtQVJSQVk6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0FSUkFZIj5HU1RfVFlQRV9BUlJBWTwvYT4KKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1saXN0LWFwcGVuZC12YWx1ZSIgdGl0bGU9ImdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoKSI+Z3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlPC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKmFwcGVuZF92YWx1ZTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtbGlzdC1wcmVwZW5kLXZhbHVlIiB0aXRsZT0iZ3N0X3ZhbHVlX2xpc3RfcHJlcGVuZF92YWx1ZSAoKSI+Z3N0X3ZhbHVlX2xpc3RfcHJlcGVuZF92YWx1ZTwvYT4gICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnByZXBlbmRfdmFsdWU8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWxpc3QtY29uY2F0IiB0aXRsZT0iZ3N0X3ZhbHVlX2xpc3RfY29uY2F0ICgpIj5nc3RfdmFsdWVfbGlzdF9jb25jYXQ8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKmRlc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTI8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWxpc3QtbWVyZ2UiIHRpdGxlPSJnc3RfdmFsdWVfbGlzdF9tZXJnZSAoKSI+Z3N0X3ZhbHVlX2xpc3RfbWVyZ2U8L2E+ICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpkZXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWUxPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWUyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1saXN0LWdldC1zaXplIiB0aXRsZT0iZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUgKCkiPmdzdF92YWx1ZV9saXN0X2dldF9zaXplPC9hPiAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOworY29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HVmFsdWU8L3NwYW4+PC9hPiAqICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1saXN0LWdldC12YWx1ZSIgdGl0bGU9ImdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoKSI+Z3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlPC9hPiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+KTsKKworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLUZSQUNUSU9OOkNBUFMiIHRpdGxlPSJHU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT04oKSI+R1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OPC9hPiAgICAgICAgICAgICh4KQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtRlJBQ1RJT046Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0ZSQUNUSU9OIj5HU1RfVFlQRV9GUkFDVElPTjwvYT4KKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXQtZnJhY3Rpb24iIHRpdGxlPSJnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgpIj5nc3RfdmFsdWVfc2V0X2ZyYWN0aW9uPC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG51bWVyYXRvcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBkZW5vbWluYXRvcjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtZnJhY3Rpb24tbnVtZXJhdG9yIiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9udW1lcmF0b3IgKCkiPmdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fbnVtZXJhdG9yPC9hPiAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWZyYWN0aW9uLWRlbm9taW5hdG9yIiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9kZW5vbWluYXRvciAoKSI+Z3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9kZW5vbWluYXRvcjwvYT4gICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZnJhY3Rpb24tbXVsdGlwbHkiIHRpdGxlPSJnc3RfdmFsdWVfZnJhY3Rpb25fbXVsdGlwbHkgKCkiPmdzdF92YWx1ZV9mcmFjdGlvbl9tdWx0aXBseTwvYT4gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqcHJvZHVjdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKmZhY3RvcjE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpmYWN0b3IyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1mcmFjdGlvbi1zdWJ0cmFjdCIgdGl0bGU9ImdzdF92YWx1ZV9mcmFjdGlvbl9zdWJ0cmFjdCAoKSI+Z3N0X3ZhbHVlX2ZyYWN0aW9uX3N1YnRyYWN0PC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpkZXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqbWludWVuZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnN1YnRyYWhlbmQ8L2NvZGU+PC9lbT4pOworCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtRlJBQ1RJT04tUkFOR0U6Q0FQUyIgdGl0bGU9IkdTVF9WQUxVRV9IT0xEU19GUkFDVElPTl9SQU5HRSgpIj5HU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT05fUkFOR0U8L2E+ICAgICAgKHgpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1GUkFDVElPTi1SQU5HRTpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UiPkdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFPC9hPgorPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXNldC1mcmFjdGlvbi1yYW5nZSIgdGl0bGU9ImdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2UgKCkiPmdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2U8L2E+ICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpzdGFydDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKmVuZDwvY29kZT48L2VtPik7Citjb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdWYWx1ZTwvc3Bhbj48L2E+ICogICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1mcmFjdGlvbi1yYW5nZS1taW4iIHRpdGxlPSJnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21pbiAoKSI+Z3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9taW48L2E+ICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7Citjb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdWYWx1ZTwvc3Bhbj48L2E+ICogICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1mcmFjdGlvbi1yYW5nZS1tYXgiIHRpdGxlPSJnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21heCAoKSI+Z3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9tYXg8L2E+ICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWZyYWN0aW9uLXJhbmdlLWZ1bGwiIHRpdGxlPSJnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlX2Z1bGwgKCkiPmdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2VfZnVsbDwvYT4gICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbnVtZXJhdG9yX3N0YXJ0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGRlbm9taW5hdG9yX3N0YXJ0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG51bWVyYXRvcl9lbmQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gZGVub21pbmF0b3JfZW5kPC9jb2RlPjwvZW0+KTsKKworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLURBVEU6Q0FQUyIgdGl0bGU9IkdTVF9WQUxVRV9IT0xEU19EQVRFKCkiPkdTVF9WQUxVRV9IT0xEU19EQVRFPC9hPiAgICAgICAgICAgICAgICAoeCkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLURBVEU6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0RBVEUiPkdTVF9UWVBFX0RBVEU8L2E+Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWRhdGUiIHRpdGxlPSJnc3RfdmFsdWVfc2V0X2RhdGUgKCkiPmdzdF92YWx1ZV9zZXRfZGF0ZTwvYT4gICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1EYXRlLWFuZC1UaW1lLUZ1bmN0aW9ucy5odG1sI0dEYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R0RhdGU8L3NwYW4+PC9hPiAqZGF0ZTwvY29kZT48L2VtPik7Citjb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURhdGUtYW5kLVRpbWUtRnVuY3Rpb25zLmh0bWwjR0RhdGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0RhdGU8L3NwYW4+PC9hPiAqICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWRhdGUiIHRpdGxlPSJnc3RfdmFsdWVfZ2V0X2RhdGUgKCkiPmdzdF92YWx1ZV9nZXRfZGF0ZTwvYT4gICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOworCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtREFURS1USU1FOkNBUFMiIHRpdGxlPSJHU1RfVkFMVUVfSE9MRFNfREFURV9USU1FKCkiPkdTVF9WQUxVRV9IT0xEU19EQVRFX1RJTUU8L2E+ICAgICAgICAgICAoeCkKKworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLUNBUFMiIHRpdGxlPSJHU1RfVkFMVUVfSE9MRFNfQ0FQUygpIj5HU1RfVkFMVUVfSE9MRFNfQ0FQUzwvYT4gICAgICAgICAgICAgICAgKHgpCis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWNhcHMiIHRpdGxlPSJnc3RfdmFsdWVfc2V0X2NhcHMgKCkiPmdzdF92YWx1ZV9zZXRfY2FwczwvYT4gICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTsKK2NvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKiAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtY2FwcyIgdGl0bGU9ImdzdF92YWx1ZV9nZXRfY2FwcyAoKSI+Z3N0X3ZhbHVlX2dldF9jYXBzPC9hPiAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7CisKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1TVFJVQ1RVUkU6Q0FQUyIgdGl0bGU9IkdTVF9WQUxVRV9IT0xEU19TVFJVQ1RVUkUoKSI+R1NUX1ZBTFVFX0hPTERTX1NUUlVDVFVSRTwvYT4gICAgICAgICAgICh4KQorPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXNldC1zdHJ1Y3R1cmUiIHRpdGxlPSJnc3RfdmFsdWVfc2V0X3N0cnVjdHVyZSAoKSI+Z3N0X3ZhbHVlX3NldF9zdHJ1Y3R1cmU8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+KTsKK2NvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LXN0cnVjdHVyZSIgdGl0bGU9ImdzdF92YWx1ZV9nZXRfc3RydWN0dXJlICgpIj5nc3RfdmFsdWVfZ2V0X3N0cnVjdHVyZTwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOworCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtQlVGRkVSOkNBUFMiIHRpdGxlPSJHU1RfVkFMVUVfSE9MRFNfQlVGRkVSKCkiPkdTVF9WQUxVRV9IT0xEU19CVUZGRVI8L2E+ICAgICAgICAgICAgICAoeCkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtYnVmZmVyIiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9idWZmZXIoKSI+Z3N0X3ZhbHVlX2dldF9idWZmZXI8L2E+ICAgICAgICAgICAgICAgICh2KQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXNldC1idWZmZXIiIHRpdGxlPSJnc3RfdmFsdWVfc2V0X2J1ZmZlcigpIj5nc3RfdmFsdWVfc2V0X2J1ZmZlcjwvYT4gICAgICAgICAgICAgICAgKHYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXRha2UtYnVmZmVyIiB0aXRsZT0iZ3N0X3ZhbHVlX3Rha2VfYnVmZmVyKCkiPmdzdF92YWx1ZV90YWtlX2J1ZmZlcjwvYT4gICAgICAgICAgICAgICAodiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIpCisKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1MRVNTLVRIQU46Q0FQUyIgdGl0bGU9IkdTVF9WQUxVRV9MRVNTX1RIQU4iPkdTVF9WQUxVRV9MRVNTX1RIQU48L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtRVFVQUw6Q0FQUyIgdGl0bGU9IkdTVF9WQUxVRV9FUVVBTCI+R1NUX1ZBTFVFX0VRVUFMPC9hPgorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUdSRUFURVItVEhBTjpDQVBTIiB0aXRsZT0iR1NUX1ZBTFVFX0dSRUFURVJfVEhBTiI+R1NUX1ZBTFVFX0dSRUFURVJfVEhBTjwvYT4KKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1VTk9SREVSRUQ6Q0FQUyIgdGl0bGU9IkdTVF9WQUxVRV9VTk9SREVSRUQiPkdTVF9WQUxVRV9VTk9SREVSRUQ8L2E+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHc3RWYWx1ZUNvbXBhcmVGdW5jIiB0aXRsZT0iR3N0VmFsdWVDb21wYXJlRnVuYyAoKSI+KkdzdFZhbHVlQ29tcGFyZUZ1bmM8L2E+KSAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR3N0VmFsdWVTZXJpYWxpemVGdW5jIiB0aXRsZT0iR3N0VmFsdWVTZXJpYWxpemVGdW5jICgpIj4qR3N0VmFsdWVTZXJpYWxpemVGdW5jPC9hPikgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWUxPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHc3RWYWx1ZURlc2VyaWFsaXplRnVuYyIgdGl0bGU9IkdzdFZhbHVlRGVzZXJpYWxpemVGdW5jICgpIj4qR3N0VmFsdWVEZXNlcmlhbGl6ZUZ1bmM8L2E+KSAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpzPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHc3RWYWx1ZVVuaW9uRnVuYyIgdGl0bGU9IkdzdFZhbHVlVW5pb25GdW5jICgpIj4qR3N0VmFsdWVVbmlvbkZ1bmM8L2E+KSAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR3N0VmFsdWVJbnRlcnNlY3RGdW5jIiB0aXRsZT0iR3N0VmFsdWVJbnRlcnNlY3RGdW5jICgpIj4qR3N0VmFsdWVJbnRlcnNlY3RGdW5jPC9hPikgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR3N0VmFsdWVTdWJ0cmFjdEZ1bmMiIHRpdGxlPSJHc3RWYWx1ZVN1YnRyYWN0RnVuYyAoKSI+KkdzdFZhbHVlU3VidHJhY3RGdW5jPC9hPikgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKmRlc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICptaW51ZW5kPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqc3VidHJhaGVuZDwvY29kZT48L2VtPik7CitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHc3RWYWx1ZVRhYmxlIiB0aXRsZT0ic3RydWN0IEdzdFZhbHVlVGFibGUiPkdzdFZhbHVlVGFibGU8L2E+OworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWlzLWZpeGVkIiB0aXRsZT0iZ3N0X3ZhbHVlX2lzX2ZpeGVkICgpIj5nc3RfdmFsdWVfaXNfZml4ZWQ8L2E+ICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1yZWdpc3RlciIgdGl0bGU9ImdzdF92YWx1ZV9yZWdpc3RlciAoKSI+Z3N0X3ZhbHVlX3JlZ2lzdGVyPC9hPiAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dzdFZhbHVlVGFibGUiIHRpdGxlPSJzdHJ1Y3QgR3N0VmFsdWVUYWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFZhbHVlVGFibGU8L3NwYW4+PC9hPiAqdGFibGU8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWluaXQtYW5kLWNvcHkiIHRpdGxlPSJnc3RfdmFsdWVfaW5pdF9hbmRfY29weSAoKSI+Z3N0X3ZhbHVlX2luaXRfYW5kX2NvcHk8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpkZXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICogICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXJpYWxpemUiIHRpdGxlPSJnc3RfdmFsdWVfc2VyaWFsaXplICgpIj5nc3RfdmFsdWVfc2VyaWFsaXplPC9hPiAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1kZXNlcmlhbGl6ZSIgdGl0bGU9ImdzdF92YWx1ZV9kZXNlcmlhbGl6ZSAoKSI+Z3N0X3ZhbHVlX2Rlc2VyaWFsaXplPC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpkZXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1jb21wYXJlIiB0aXRsZT0iZ3N0X3ZhbHVlX2NvbXBhcmUgKCkiPmdzdF92YWx1ZV9jb21wYXJlPC9hPiAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWUxPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWUyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1jYW4tY29tcGFyZSIgdGl0bGU9ImdzdF92YWx1ZV9jYW5fY29tcGFyZSAoKSI+Z3N0X3ZhbHVlX2Nhbl9jb21wYXJlPC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXVuaW9uIiB0aXRsZT0iZ3N0X3ZhbHVlX3VuaW9uICgpIj5nc3RfdmFsdWVfdW5pb248L2E+ICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKmRlc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWNhbi11bmlvbiIgdGl0bGU9ImdzdF92YWx1ZV9jYW5fdW5pb24gKCkiPmdzdF92YWx1ZV9jYW5fdW5pb248L2E+ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWUxPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWUyPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1yZWdpc3Rlci11bmlvbi1mdW5jIiB0aXRsZT0iZ3N0X3ZhbHVlX3JlZ2lzdGVyX3VuaW9uX2Z1bmMgKCkiPmdzdF92YWx1ZV9yZWdpc3Rlcl91bmlvbl9mdW5jPC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiB0eXBlMTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gdHlwZTI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dzdFZhbHVlVW5pb25GdW5jIiB0aXRsZT0iR3N0VmFsdWVVbmlvbkZ1bmMgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWYWx1ZVVuaW9uRnVuYzwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXN1YnRyYWN0IiB0aXRsZT0iZ3N0X3ZhbHVlX3N1YnRyYWN0ICgpIj5nc3RfdmFsdWVfc3VidHJhY3Q8L2E+ICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKmRlc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICptaW51ZW5kPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqc3VidHJhaGVuZDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtY2FuLXN1YnRyYWN0IiB0aXRsZT0iZ3N0X3ZhbHVlX2Nhbl9zdWJ0cmFjdCAoKSI+Z3N0X3ZhbHVlX2Nhbl9zdWJ0cmFjdDwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICptaW51ZW5kPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqc3VidHJhaGVuZDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtcmVnaXN0ZXItc3VidHJhY3QtZnVuYyIgdGl0bGU9ImdzdF92YWx1ZV9yZWdpc3Rlcl9zdWJ0cmFjdF9mdW5jICgpIj5nc3RfdmFsdWVfcmVnaXN0ZXJfc3VidHJhY3RfZnVuYzwvYT4gICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gbWludWVuZF90eXBlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiBzdWJ0cmFoZW5kX3R5cGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dzdFZhbHVlU3VidHJhY3RGdW5jIiB0aXRsZT0iR3N0VmFsdWVTdWJ0cmFjdEZ1bmMgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWYWx1ZVN1YnRyYWN0RnVuYzwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWludGVyc2VjdCIgdGl0bGU9ImdzdF92YWx1ZV9pbnRlcnNlY3QgKCkiPmdzdF92YWx1ZV9pbnRlcnNlY3Q8L2E+ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtY2FuLWludGVyc2VjdCIgdGl0bGU9ImdzdF92YWx1ZV9jYW5faW50ZXJzZWN0ICgpIj5nc3RfdmFsdWVfY2FuX2ludGVyc2VjdDwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtcmVnaXN0ZXItaW50ZXJzZWN0LWZ1bmMiIHRpdGxlPSJnc3RfdmFsdWVfcmVnaXN0ZXJfaW50ZXJzZWN0X2Z1bmMgKCkiPmdzdF92YWx1ZV9yZWdpc3Rlcl9pbnRlcnNlY3RfZnVuYzwvYT4gICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiB0eXBlMTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gdHlwZTI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dzdFZhbHVlSW50ZXJzZWN0RnVuYyIgdGl0bGU9IkdzdFZhbHVlSW50ZXJzZWN0RnVuYyAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFZhbHVlSW50ZXJzZWN0RnVuYzwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWFycmF5LWFwcGVuZC12YWx1ZSIgdGl0bGU9ImdzdF92YWx1ZV9hcnJheV9hcHBlbmRfdmFsdWUgKCkiPmdzdF92YWx1ZV9hcnJheV9hcHBlbmRfdmFsdWU8L2E+ICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICphcHBlbmRfdmFsdWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWFycmF5LWdldC1zaXplIiB0aXRsZT0iZ3N0X3ZhbHVlX2FycmF5X2dldF9zaXplICgpIj5nc3RfdmFsdWVfYXJyYXlfZ2V0X3NpemU8L2E+ICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTsKK2NvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKiAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtYXJyYXktZ2V0LXZhbHVlIiB0aXRsZT0iZ3N0X3ZhbHVlX2FycmF5X2dldF92YWx1ZSAoKSI+Z3N0X3ZhbHVlX2FycmF5X2dldF92YWx1ZTwvYT4gICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1hcnJheS1wcmVwZW5kLXZhbHVlIiB0aXRsZT0iZ3N0X3ZhbHVlX2FycmF5X3ByZXBlbmRfdmFsdWUgKCkiPmdzdF92YWx1ZV9hcnJheV9wcmVwZW5kX3ZhbHVlPC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpwcmVwZW5kX3ZhbHVlPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1maXhhdGUiIHRpdGxlPSJnc3RfdmFsdWVfZml4YXRlICgpIj5nc3RfdmFsdWVfZml4YXRlPC9hPiAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKmRlc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4pOworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RWYWx1ZS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK0dWYWx1ZSBpbXBsZW1lbnRhdGlvbnMgc3BlY2lmaWMgdG8gR1N0cmVhbWVyLgorPC9wPgorPHA+CitOb3RlIHRoYXQgb3BlcmF0aW9ucyBvbiB0aGUgc2FtZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gZnJvbSBtdWx0aXBsZSB0aHJlYWRzIG1heSBsZWFkIHRvCit1bmRlZmluZWQgYmVoYXZpb3VyLgorPC9wPgorPHA+CitMYXN0IHJldmlld2VkIG9uIDIwMDgtMDMtMTEgKDAuMTAuMTgpCis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1Hc3RWYWx1ZS5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULU1BS0UtRk9VUkNDOkNBUFMiPjwvYT48aDM+R1NUX01BS0VfRk9VUkNDKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX01BS0VfRk9VUkNDKGEsYixjLGQpICAgICAgICAoKGd1aW50MzIpKChhKXwoYikmbHQ7Jmx0Ozh8KGMpJmx0OyZsdDsxNnwoZCkmbHQ7Jmx0OzI0KSkKKzwvcHJlPgorPHA+CitUcmFuc2Zvcm0gZm91ciBjaGFyYWN0ZXJzIGludG8gYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiBmb3VyY2MgdmFsdWUgd2l0aCBob3N0CitlbmRpYW5uZXNzLgorPC9wPgorPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CitndWludDMyIGZvdXJjYyA9IEdTVF9NQUtFX0ZPVVJDQyAoJ00nLCAnSicsICdQJywgJ0cnKTsKKzwvcHJlPjwvZGl2PgorPHA+Cis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZmlyc3QgY2hhcmFjdGVyPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzZWNvbmQgY2hhcmFjdGVyPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB0aGlyZCBjaGFyYWN0ZXI8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGZvdXJ0aCBjaGFyYWN0ZXI8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtU1RSLUZPVVJDQzpDQVBTIj48L2E+PGgzPkdTVF9TVFJfRk9VUkNDKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1NUUl9GT1VSQ0MoZikgICAgICAgICAgICAgICAoKGd1aW50MzIpKCgoZilbMF0pfCgoZilbMV0mbHQ7Jmx0OzgpfCgoZilbMl0mbHQ7Jmx0OzE2KXwoKGYpWzNdJmx0OyZsdDsyNCkpKQorPC9wcmU+Cis8cD4KK1RyYW5zZm9ybSBhbiBpbnB1dCBzdHJpbmcgaW50byBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+IGZvdXJjYyB2YWx1ZSB3aXRoIGhvc3QKK2VuZGlhbm5lc3MuCitDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoZSBpbnB1dCBzdHJpbmcgY29uc2lzdHMgb2YgYXQgbGVhc3QKK2ZvdXIgY2hhcmFjdGVycy4KKzwvcD4KKzxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgorZ3VpbnQzMiBmb3VyY2MgPSBHU1RfU1RSX0ZPVVJDQyAoIk1KUEciKTsKKzwvcHJlPjwvZGl2PgorPHA+Cis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmY8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBzdHJpbmcgd2l0aCBhdCBsZWFzdCBmb3VyIGNoYXJhY3RlcnM8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUZPVVJDQy1GT1JNQVQ6Q0FQUyI+PC9hPjxoMz5HU1RfRk9VUkNDX0ZPUk1BVDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRk9VUkNDX0ZPUk1BVCAiYyVjJWMlYyIKKzwvcHJlPgorPHA+CitDYW4gYmUgdXNlZCB0b2dldGhlciB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtRk9VUkNDLUFSR1M6Q0FQUyIgdGl0bGU9IkdTVF9GT1VSQ0NfQVJHUygpIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0ZPVVJDQ19BUkdTPC9zcGFuPjwvYT4gdG8gcHJvcGVybHkgb3V0cHV0IGEKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+IGZvdXJjYyB2YWx1ZSBpbiBhIDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+cHJpbnRmKCk8L2NvZGU+LXN0eWxlIHRleHQgbWVzc2FnZS4KKzwvcD4KKzxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgorcHJpbnRmICgiZm91cmNjOiAlIiBHU1RfRk9VUkNDX0ZPUk1BVCAiXG4iLCBHU1RfRk9VUkNDX0FSR1MgKGZjYykpOworPC9wcmU+PC9kaXY+Cis8cD4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUZPVVJDQy1BUkdTOkNBUFMiPjwvYT48aDM+R1NUX0ZPVVJDQ19BUkdTKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTKGZvdXJjYyk8L3ByZT4KKzxwPgorQ2FuIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULUZPVVJDQy1GT1JNQVQ6Q0FQUyIgdGl0bGU9IkdTVF9GT1VSQ0NfRk9STUFUIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0ZPVVJDQ19GT1JNQVQ8L3NwYW4+PC9hPiB0byBwcm9wZXJseSBvdXRwdXQgYQorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gZm91cmNjIHZhbHVlIGluIGEgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5wcmludGYoKTwvY29kZT4tc3R5bGUgdGV4dCBtZXNzYWdlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3VyY2M8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiBmb3VyY2MgdmFsdWUgdG8gb3V0cHV0PC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1WQUxVRS1IT0xEUy1JTlQtUkFOR0U6Q0FQUyI+PC9hPjxoMz5HU1RfVkFMVUVfSE9MRFNfSU5UX1JBTkdFKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRSh4KSAgICAoR19WQUxVRV9IT0xEUygoeCksIGdzdF9pbnRfcmFuZ2VfZ2V0X3R5cGUgKCkpKQorPC9wcmU+Cis8cD4KK0NoZWNrcyBpZiB0aGUgZ2l2ZW4gPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IGNvbnRhaW5zIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUlOVC1SQU5HRTpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfSU5UX1JBTkdFIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RZUEVfSU5UX1JBTkdFPC9zcGFuPjwvYT4gdmFsdWUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPng8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0byBjaGVjazwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVFlQRS1JTlQtUkFOR0U6Q0FQUyI+PC9hPjxoMz5HU1RfVFlQRV9JTlRfUkFOR0U8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RZUEVfSU5UX1JBTkdFICAgICAgICAgICAgICAgZ3N0X2ludF9yYW5nZV9nZXRfdHlwZSAoKQorPC9wcmU+Cis8cD4KK2EgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IHR5cGUgdGhhdCByZXByZXNlbnRzIGFuIGludGVnZXIgcmFuZ2UKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gb2YgR3N0SW50UmFuZ2U8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXZhbHVlLXNldC1pbnQtcmFuZ2UiPjwvYT48aDM+Z3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2UgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2UgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IHN0YXJ0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGVuZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+IHRvIHRoZSByYW5nZSBzcGVjaWZpZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0PC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW5kPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX0lOVF9SQU5HRTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHN0YXJ0IG9mIHRoZSByYW5nZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW5kPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBlbmQgb2YgdGhlIHJhbmdlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXZhbHVlLWdldC1pbnQtcmFuZ2UtbWluIj48L2E+PGgzPmdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgIGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIG1pbmltdW0gb2YgdGhlIHJhbmdlIHNwZWNpZmllZCBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfSU5UX1JBTkdFPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG1pbmltdW0gb2YgdGhlIHJhbmdlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXZhbHVlLWdldC1pbnQtcmFuZ2UtbWF4Ij48L2E+PGgzPmdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgIGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heCAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIG1heGltdW0gb2YgdGhlIHJhbmdlIHNwZWNpZmllZCBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfSU5UX1JBTkdFPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG1heHVtdW0gb2YgdGhlIHJhbmdlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVZBTFVFLUhPTERTLUlOVDY0LVJBTkdFOkNBUFMiPjwvYT48aDM+R1NUX1ZBTFVFX0hPTERTX0lOVDY0X1JBTkdFKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1ZBTFVFX0hPTERTX0lOVDY0X1JBTkdFKHgpICAgIChHX1ZBTFVFX0hPTERTKCh4KSwgZ3N0X2ludDY0X3JhbmdlX2dldF90eXBlICgpKSkKKzwvcHJlPgorPHA+CitDaGVja3MgaWYgdGhlIGdpdmVuIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBjb250YWlucyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1JTlQ2NC1SQU5HRTpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfSU5UNjRfUkFOR0UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVFlQRV9JTlQ2NF9SQU5HRTwvc3Bhbj48L2E+IHZhbHVlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT54PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gdG8gY2hlY2s8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRZUEUtSU5UNjQtUkFOR0U6Q0FQUyI+PC9hPjxoMz5HU1RfVFlQRV9JTlQ2NF9SQU5HRTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVFlQRV9JTlQ2NF9SQU5HRSAgICAgICAgICAgICBnc3RfaW50NjRfcmFuZ2VfZ2V0X3R5cGUgKCkKKzwvcHJlPgorPHA+CithIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0eXBlIHRoYXQgcmVwcmVzZW50cyBhbiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gcmFuZ2UKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gb2YgR3N0SW50NjRSYW5nZTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMxPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdmFsdWUtc2V0LWludDY0LXJhbmdlIj48L2E+PGgzPmdzdF92YWx1ZV9zZXRfaW50NjRfcmFuZ2UgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZSAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBzdGFydDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gZW5kPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0cyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4gdG8gdGhlIHJhbmdlIHNwZWNpZmllZCBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnQ8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbmQ8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfSU5UNjRfUkFOR0U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzdGFydCBvZiB0aGUgcmFuZ2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVuZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZW5kIG9mIHRoZSByYW5nZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC12YWx1ZS1nZXQtaW50NjQtcmFuZ2UtbWluIj48L2E+PGgzPmdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWluICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ2NDwvc3Bhbj48L2E+ICAgICAgICAgICAgICBnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21pbiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXRzIHRoZSBtaW5pbXVtIG9mIHRoZSByYW5nZSBzcGVjaWZpZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX0lOVDY0X1JBTkdFPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG1pbmltdW0gb2YgdGhlIHJhbmdlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXZhbHVlLWdldC1pbnQ2NC1yYW5nZS1tYXgiPjwvYT48aDM+Z3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9tYXggKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgIGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWF4ICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIG1heGltdW0gb2YgdGhlIHJhbmdlIHNwZWNpZmllZCBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfSU5UNjRfUkFOR0U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbWF4dW11bSBvZiB0aGUgcmFuZ2U8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMxPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVkFMVUUtSE9MRFMtRE9VQkxFLVJBTkdFOkNBUFMiPjwvYT48aDM+R1NUX1ZBTFVFX0hPTERTX0RPVUJMRV9SQU5HRSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9WQUxVRV9IT0xEU19ET1VCTEVfUkFOR0UoeCkgKEdfVkFMVUVfSE9MRFMoKHgpLCBnc3RfZG91YmxlX3JhbmdlX2dldF90eXBlICgpKSkKKzwvcHJlPgorPHA+CitDaGVja3MgaWYgdGhlIGdpdmVuIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBjb250YWlucyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1ET1VCTEUtUkFOR0U6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0RPVUJMRV9SQU5HRSI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UWVBFX0RPVUJMRV9SQU5HRTwvc3Bhbj48L2E+IHZhbHVlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT54PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gdG8gY2hlY2s8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRZUEUtRE9VQkxFLVJBTkdFOkNBUFMiPjwvYT48aDM+R1NUX1RZUEVfRE9VQkxFX1JBTkdFPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UWVBFX0RPVUJMRV9SQU5HRSAgICAgICAgICAgIGdzdF9kb3VibGVfcmFuZ2VfZ2V0X3R5cGUgKCkKKzwvcHJlPgorPHA+CithIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0eXBlIHRoYXQgcmVwcmVzZW50cyBhIGZsb2F0aW5nIHBvaW50IHJhbmdlIHdpdGggZG91YmxlIHByZWNpc3Npb24KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gb2YgR3N0SW50UmFuZ2U8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXZhbHVlLXNldC1kb3VibGUtcmFuZ2UiPjwvYT48aDM+Z3N0X3ZhbHVlX3NldF9kb3VibGVfcmFuZ2UgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3ZhbHVlX3NldF9kb3VibGVfcmFuZ2UgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IHN0YXJ0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IGVuZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+IHRvIHRoZSByYW5nZSBzcGVjaWZpZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0PC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW5kPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX0RPVUJMRV9SQU5HRTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHN0YXJ0IG9mIHRoZSByYW5nZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW5kPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBlbmQgb2YgdGhlIHJhbmdlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXZhbHVlLWdldC1kb3VibGUtcmFuZ2UtbWluIj48L2E+PGgzPmdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21pbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICAgICAgICAgICAgIGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21pbiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIG1pbmltdW0gb2YgdGhlIHJhbmdlIHNwZWNpZmllZCBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfRE9VQkxFX1JBTkdFPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG1pbmltdW0gb2YgdGhlIHJhbmdlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXZhbHVlLWdldC1kb3VibGUtcmFuZ2UtbWF4Ij48L2E+PGgzPmdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21heCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICAgICAgICAgICAgIGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21heCAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIG1heGltdW0gb2YgdGhlIHJhbmdlIHNwZWNpZmllZCBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfRE9VQkxFX1JBTkdFPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG1heHVtdW0gb2YgdGhlIHJhbmdlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVZBTFVFLUhPTERTLUxJU1Q6Q0FQUyI+PC9hPjxoMz5HU1RfVkFMVUVfSE9MRFNfTElTVCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9WQUxVRV9IT0xEU19MSVNUKHgpCQkoR19WQUxVRV9IT0xEUygoeCksIGdzdF92YWx1ZV9saXN0X2dldF90eXBlICgpKSkKKzwvcHJlPgorPHA+CitDaGVja3MgaWYgdGhlIGdpdmVuIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBjb250YWlucyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1MSVNUOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9MSVNUIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RZUEVfTElTVDwvc3Bhbj48L2E+IHZhbHVlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT54PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gdG8gY2hlY2s8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRZUEUtTElTVDpDQVBTIj48L2E+PGgzPkdTVF9UWVBFX0xJU1Q8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RZUEVfTElTVCAgICAgICAgICAgICAgICAgICAgZ3N0X3ZhbHVlX2xpc3RfZ2V0X3R5cGUgKCkKKzwvcHJlPgorPHA+CithIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0eXBlIHRoYXQgcmVwcmVzZW50cyBhbiB1bm9yZGVyZWQgbGlzdCBvZiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gdmFsdWVzLiBUaGlzCitpcyB1c2VkIGZvciBleGFtcGxlIHRvIGV4cHJlc3MgYSBsaXN0IG9mIHBvc3NpYmxlIHZhbHVlcyBmb3IgYSBmaWVsZCBpbgorYSBjYXBzIHN0cnVjdHVyZSwgbGlrZSBhIGxpc3Qgb2YgcG9zc2libGUgc2FtcGxlIHJhdGVzLCBvZiB3aGljaCBvbmx5IG9uZQord2lsbCBiZSBjaG9zZW4gaW4gdGhlIGVuZC4gVGhpcyBtZWFucyB0aGF0IGFsbCB2YWx1ZXMgaW4gdGhlIGxpc3QgYXJlCittZWFuaW5nZnVsIG9uIHRoZWlyIG93bi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gb2YgR3N0VmFsdWVMaXN0ICh3aGljaCBpcyBub3QgZXhwbGljaXRseSB0eXBlZCk8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVZBTFVFLUhPTERTLUFSUkFZOkNBUFMiPjwvYT48aDM+R1NUX1ZBTFVFX0hPTERTX0FSUkFZKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1ZBTFVFX0hPTERTX0FSUkFZKHgpwqAoR19WQUxVRV9IT0xEUygoeCksIGdzdF92YWx1ZV9hcnJheV9nZXRfdHlwZSAoKSkpCis8L3ByZT4KKzxwPgorQ2hlY2tzIGlmIHRoZSBnaXZlbiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gY29udGFpbnMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtQVJSQVk6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0FSUkFZIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RZUEVfQVJSQVk8L3NwYW4+PC9hPiB2YWx1ZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+eDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IHRvIGNoZWNrPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1UWVBFLUFSUkFZOkNBUFMiPjwvYT48aDM+R1NUX1RZUEVfQVJSQVk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RZUEVfQVJSQVkJCQkgZ3N0X3ZhbHVlX2FycmF5X2dldF90eXBlICgpCis8L3ByZT4KKzxwPgorYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gdHlwZSB0aGF0IHJlcHJlc2VudHMgYW4gb3JkZXJlZCBsaXN0IG9mIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB2YWx1ZXMuIFRoaXMgaXMKK3VzZWQgdG8gZXhwcmVzcyBhIHNldCBvZiB2YWx1ZXMgdGhhdCBpcyBtZWFuaW5nZnVsIG9ubHkgaW4gdGhlaXIgc3BlY2lmaWMKK2NvbWJpbmF0aW9uIGFuZCBvcmRlciBvZiB2YWx1ZXMuIEVhY2ggdmFsdWUgb24gaXRzIG93biBpcyBub3QgcGFydGljdWxhcmx5CittZWFuaW5nZnVsLCBvbmx5IHRoZSBvcmRlcmVkIGFycmF5IGluIGl0cyBlbnRpcmV0eSBpcyBtZWFuaW5nZnVsLiBUaGlzIGlzCit1c2VkIGZvciBleGFtcGxlIHRvIGV4cHJlc3MgY2hhbm5lbCBsYXlvdXRzIGZvciBtdWx0aWNoYW5uZWwgYXVkaW8gd2hlcmUKK2VhY2ggY2hhbm5lbCBuZWVkcyB0byBiZSBtYXBwZWQgdG8gYSBwb3NpdGlvbiBpbiB0aGUgcm9vbS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gb2YgR3N0QXJyYXlMaXN0ICh3aGljaCBpcyBub3QgZXhwbGljaXRseSB0eXBlZCk8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXZhbHVlLWxpc3QtYXBwZW5kLXZhbHVlIj48L2E+PGgzPmdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICphcHBlbmRfdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBcHBlbmRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hcHBlbmRfdmFsdWU8L2NvZGU+PC9lbT4gdG8gdGhlIEdzdFZhbHVlTGlzdCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gb2YgdHlwZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtTElTVDpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfTElTVCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UWVBFX0xJU1Q8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hcHBlbmRfdmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHZhbHVlIHRvIGFwcGVuZDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC12YWx1ZS1saXN0LXByZXBlbmQtdmFsdWUiPjwvYT48aDM+Z3N0X3ZhbHVlX2xpc3RfcHJlcGVuZF92YWx1ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfdmFsdWVfbGlzdF9wcmVwZW5kX3ZhbHVlICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpwcmVwZW5kX3ZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUHJlcGVuZHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByZXBlbmRfdmFsdWU8L2NvZGU+PC9lbT4gdG8gdGhlIEdzdFZhbHVlTGlzdCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gb2YgdHlwZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtTElTVDpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfTElTVCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UWVBFX0xJU1Q8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcmVwZW5kX3ZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB2YWx1ZSB0byBwcmVwZW5kPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXZhbHVlLWxpc3QtY29uY2F0Ij48L2E+PGgzPmdzdF92YWx1ZV9saXN0X2NvbmNhdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfdmFsdWVfbGlzdF9jb25jYXQgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NvbmNhdGVuYXRlcyBjb3BpZXMgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMTwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMjwvY29kZT48L2VtPiBpbnRvIGEgbGlzdC4gIFZhbHVlcyB0aGF0IGFyZSBub3QKK29mIHR5cGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUxJU1Q6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0xJU1QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVFlQRV9MSVNUPC9zcGFuPjwvYT4gYXJlIHRyZWF0ZWQgYXMgaWYgdGhleSB3ZXJlIGxpc3RzIG9mIGxlbmd0aCAxLgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3Q8L2NvZGU+PC9lbT4gd2lsbCBiZSBpbml0aWFsaXplZCB0byB0aGUgdHlwZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtTElTVDpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfTElTVCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UWVBFX0xJU1Q8L3NwYW4+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFuIHVuaW5pdGlhbGl6ZWQgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IHRvIHRha2UgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+IGNhbGxlci1hbGxvY2F0ZXNdPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWUyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdmFsdWUtbGlzdC1tZXJnZSI+PC9hPjxoMz5nc3RfdmFsdWVfbGlzdF9tZXJnZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfdmFsdWVfbGlzdF9tZXJnZSAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK01lcmdlcyBjb3BpZXMgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMTwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMjwvY29kZT48L2VtPi4gIFZhbHVlcyB0aGF0IGFyZSBub3QKK29mIHR5cGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUxJU1Q6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0xJU1QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVFlQRV9MSVNUPC9zcGFuPjwvYT4gYXJlIHRyZWF0ZWQgYXMgaWYgdGhleSB3ZXJlIGxpc3RzIG9mIGxlbmd0aCAxLgorPC9wPgorPHA+CitUaGUgcmVzdWx0IHdpbGwgYmUgcHV0IGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3Q8L2NvZGU+PC9lbT4gYW5kIHdpbGwgZWl0aGVyIGJlIGEgbGlzdCB0aGF0IHdpbGwgbm90Citjb250YWluIGFueSBkdXBsaWNhdGVzLCBvciBhIG5vbi1saXN0IHR5cGUgKGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTE8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTI8L2NvZGU+PC9lbT4KK3dlcmUgZXF1YWwpLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YW4gdW5pbml0aWFsaXplZCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gdG8gdGFrZSB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT4gY2FsbGVyLWFsbG9jYXRlc108L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC12YWx1ZS1saXN0LWdldC1zaXplIj48L2E+PGgzPmdzdF92YWx1ZV9saXN0X2dldF9zaXplICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIGdzdF92YWx1ZV9saXN0X2dldF9zaXplICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIG51bWJlciBvZiB2YWx1ZXMgY29udGFpbmVkIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBvZiB0eXBlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1MSVNUOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9MSVNUIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RZUEVfTElTVDwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbnVtYmVyIG9mIHZhbHVlczwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC12YWx1ZS1saXN0LWdldC12YWx1ZSI+PC9hPjxoMz5nc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKiAgICAgIGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgdmFsdWUgdGhhdCBpcyBhIG1lbWJlciBvZiB0aGUgbGlzdCBjb250YWluZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+IGFuZAoraGFzIHRoZSBpbmRleCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5kZXg8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gb2YgdHlwZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtTElTVDpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfTElTVCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UWVBFX0xJU1Q8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5pbmRleCBvZiB2YWx1ZSB0byBnZXQgZnJvbSB0aGUgbGlzdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4gaW5kZXguIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVkFMVUUtSE9MRFMtRlJBQ1RJT046Q0FQUyI+PC9hPjxoMz5HU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT04oKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT04oeCnCoChHX1ZBTFVFX0hPTERTKCh4KSwgZ3N0X2ZyYWN0aW9uX2dldF90eXBlICgpKSkKKzwvcHJlPgorPHA+CitDaGVja3MgaWYgdGhlIGdpdmVuIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBjb250YWlucyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1GUkFDVElPTjpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfRlJBQ1RJT04iPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVFlQRV9GUkFDVElPTjwvc3Bhbj48L2E+IHZhbHVlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT54PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gdG8gY2hlY2s8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRZUEUtRlJBQ1RJT046Q0FQUyI+PC9hPjxoMz5HU1RfVFlQRV9GUkFDVElPTjwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVFlQRV9GUkFDVElPTiAgICAgICAgICAgICAgICBnc3RfZnJhY3Rpb25fZ2V0X3R5cGUgKCkKKzwvcHJlPgorPHA+CithIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0eXBlIHRoYXQgcmVwcmVzZW50cyBhIGZyYWN0aW9uIG9mIGFuIGludGVnZXIgbnVtZXJhdG9yIG92ZXIKK2FuIGludGVnZXIgZGVub21pbmF0b3IKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gb2YgR3N0RnJhY3Rpb24gKHdoaWNoIGlzIG5vdCBleHBsaWNpdGx5IHR5cGVkKTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdmFsdWUtc2V0LWZyYWN0aW9uIj48L2E+PGgzPmdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG51bWVyYXRvcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBkZW5vbWluYXRvcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+IHRvIHRoZSBmcmFjdGlvbiBzcGVjaWZpZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm51bWVyYXRvcjwvY29kZT48L2VtPiBvdmVyIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZW5vbWluYXRvcjwvY29kZT48L2VtPi4KK1RoZSBmcmFjdGlvbiBnZXRzIHJlZHVjZWQgdG8gdGhlIHNtYWxsZXN0IG51bWVyYXRvciBhbmQgZGVub21pbmF0b3IsCithbmQgaWYgbmVjZXNzYXJ5IHRoZSBzaWduIGlzIG1vdmVkIHRvIHRoZSBudW1lcmF0b3IuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUZSQUNUSU9OOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9GUkFDVElPTiI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UWVBFX0ZSQUNUSU9OPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnVtZXJhdG9yPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBudW1lcmF0b3Igb2YgdGhlIGZyYWN0aW9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZW5vbWluYXRvcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZGVub21pbmF0b3Igb2YgdGhlIGZyYWN0aW9uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXZhbHVlLWdldC1mcmFjdGlvbi1udW1lcmF0b3IiPjwvYT48aDM+Z3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9udW1lcmF0b3IgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvciAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXRzIHRoZSBudW1lcmF0b3Igb2YgdGhlIGZyYWN0aW9uIHNwZWNpZmllZCBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUZSQUNUSU9OOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9GUkFDVElPTiI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UWVBFX0ZSQUNUSU9OPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBudW1lcmF0b3Igb2YgdGhlIGZyYWN0aW9uLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC12YWx1ZS1nZXQtZnJhY3Rpb24tZGVub21pbmF0b3IiPjwvYT48aDM+Z3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9kZW5vbWluYXRvciAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgIGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3IgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIGRlbm9taW5hdG9yIG9mIHRoZSBmcmFjdGlvbiBzcGVjaWZpZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1GUkFDVElPTjpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfRlJBQ1RJT04iPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVFlQRV9GUkFDVElPTjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZGVub21pbmF0b3Igb2YgdGhlIGZyYWN0aW9uLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC12YWx1ZS1mcmFjdGlvbi1tdWx0aXBseSI+PC9hPjxoMz5nc3RfdmFsdWVfZnJhY3Rpb25fbXVsdGlwbHkgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3ZhbHVlX2ZyYWN0aW9uX211bHRpcGx5ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnByb2R1Y3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpmYWN0b3IxPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqZmFjdG9yMjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK011bHRpcGxpZXMgdGhlIHR3byA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gaXRlbXMgY29udGFpbmluZyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1GUkFDVElPTjpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfRlJBQ1RJT04iPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVFlQRV9GUkFDVElPTjwvc3Bhbj48L2E+IGFuZCBzZXRzCis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJvZHVjdDwvY29kZT48L2VtPiB0byB0aGUgcHJvZHVjdCBvZiB0aGUgdHdvIGZyYWN0aW9ucy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcm9kdWN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1GUkFDVElPTjpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfRlJBQ1RJT04iPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVFlQRV9GUkFDVElPTjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZhY3RvcjE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUZSQUNUSU9OOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9GUkFDVElPTiI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UWVBFX0ZSQUNUSU9OPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmFjdG9yMjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIEdWYWx1ZSBpbml0aWFsaXplZCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtRlJBQ1RJT046Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0ZSQUNUSU9OIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RZUEVfRlJBQ1RJT048L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+RkFMU0UgaW4gY2FzZSBvZiBhbiBlcnJvciAobGlrZSBpbnRlZ2VyIG92ZXJmbG93KSwgVFJVRSBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXZhbHVlLWZyYWN0aW9uLXN1YnRyYWN0Ij48L2E+PGgzPmdzdF92YWx1ZV9mcmFjdGlvbl9zdWJ0cmFjdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfdmFsdWVfZnJhY3Rpb25fc3VidHJhY3QgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKm1pbnVlbmQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpzdWJ0cmFoZW5kPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU3VidHJhY3RzIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3VidHJhaGVuZDwvY29kZT48L2VtPiBmcm9tIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWludWVuZDwvY29kZT48L2VtPiBhbmQgc2V0cyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdDwvY29kZT48L2VtPiB0byB0aGUgcmVzdWx0LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUZSQUNUSU9OOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9GUkFDVElPTiI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UWVBFX0ZSQUNUSU9OPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWludWVuZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIEdWYWx1ZSBpbml0aWFsaXplZCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtRlJBQ1RJT046Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0ZSQUNUSU9OIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RZUEVfRlJBQ1RJT048L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdWJ0cmFoZW5kPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1GUkFDVElPTjpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfRlJBQ1RJT04iPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVFlQRV9GUkFDVElPTjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5GQUxTRSBpbiBjYXNlIG9mIGFuIGVycm9yIChsaWtlIGludGVnZXIgb3ZlcmZsb3cpLCBUUlVFIG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVkFMVUUtSE9MRFMtRlJBQ1RJT04tUkFOR0U6Q0FQUyI+PC9hPjxoMz5HU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT05fUkFOR0UoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT05fUkFOR0UoeCkgICAgKEdfVkFMVUVfSE9MRFMoKHgpLCBnc3RfZnJhY3Rpb25fcmFuZ2VfZ2V0X3R5cGUgKCkpKQorPC9wcmU+Cis8cD4KK0NoZWNrcyBpZiB0aGUgZ2l2ZW4gPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IGNvbnRhaW5zIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUZSQUNUSU9OLVJBTkdFOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFPC9zcGFuPjwvYT4gdmFsdWUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPng8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0byBjaGVjazwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVFlQRS1GUkFDVElPTi1SQU5HRTpDQVBTIj48L2E+PGgzPkdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFICAgICAgICAgICAgZ3N0X2ZyYWN0aW9uX3JhbmdlX2dldF90eXBlICgpCis8L3ByZT4KKzxwPgorYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gdHlwZSB0aGF0IHJlcHJlc2VudHMgYSBHc3RGcmFjdGlvbiByYW5nZQorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiBvZiBHc3RGcmFjdGlvblJhbmdlPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC12YWx1ZS1zZXQtZnJhY3Rpb24tcmFuZ2UiPjwvYT48aDM+Z3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpzdGFydDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKmVuZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+IHRvIHRoZSByYW5nZSBzcGVjaWZpZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0PC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW5kPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc3RhcnQgb2YgdGhlIHJhbmdlIChhIEdTVF9UWVBFX0ZSQUNUSU9OIEdWYWx1ZSk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVuZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZW5kIG9mIHRoZSByYW5nZSAoYSBHU1RfVFlQRV9GUkFDVElPTiBHVmFsdWUpPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXZhbHVlLWdldC1mcmFjdGlvbi1yYW5nZS1taW4iPjwvYT48aDM+Z3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9taW4gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKiAgICAgIGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWluICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIG1pbmltdW0gb2YgdGhlIHJhbmdlIHNwZWNpZmllZCBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbWluaW11bSBvZiB0aGUgcmFuZ2U8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdmFsdWUtZ2V0LWZyYWN0aW9uLXJhbmdlLW1heCI+PC9hPjxoMz5nc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21heCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HVmFsdWU8L3NwYW4+PC9hPiAqICAgICAgZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9tYXggICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgbWF4aW11bSBvZiB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIEdWYWx1ZSBpbml0aWFsaXplZCB0byBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtYXhpbXVtIG9mIHRoZSByYW5nZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC12YWx1ZS1zZXQtZnJhY3Rpb24tcmFuZ2UtZnVsbCI+PC9hPjxoMz5nc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlX2Z1bGwgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZV9mdWxsICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG51bWVyYXRvcl9zdGFydDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBkZW5vbWluYXRvcl9zdGFydDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBudW1lcmF0b3JfZW5kPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGRlbm9taW5hdG9yX2VuZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+IHRvIHRoZSByYW5nZSBzcGVjaWZpZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm51bWVyYXRvcl9zdGFydDwvY29kZT48L2VtPi88ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVub21pbmF0b3Jfc3RhcnQ8L2NvZGU+PC9lbT4KK2FuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnVtZXJhdG9yX2VuZDwvY29kZT48L2VtPi88ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVub21pbmF0b3JfZW5kPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5udW1lcmF0b3Jfc3RhcnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG51bWVyYXRvciBzdGFydCBvZiB0aGUgcmFuZ2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlbm9taW5hdG9yX3N0YXJ0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBkZW5vbWluYXRvciBzdGFydCBvZiB0aGUgcmFuZ2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm51bWVyYXRvcl9lbmQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG51bWVyYXRvciBlbmQgb2YgdGhlIHJhbmdlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZW5vbWluYXRvcl9lbmQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGRlbm9taW5hdG9yIGVuZCBvZiB0aGUgcmFuZ2U8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVkFMVUUtSE9MRFMtREFURTpDQVBTIj48L2E+PGgzPkdTVF9WQUxVRV9IT0xEU19EQVRFKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1ZBTFVFX0hPTERTX0RBVEUoeCkgICAgICAgICAoR19WQUxVRV9IT0xEUygoeCksIGdzdF9kYXRlX2dldF90eXBlICgpKSkKKzwvcHJlPgorPHA+CitDaGVja3MgaWYgdGhlIGdpdmVuIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBjb250YWlucyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1EQVRFOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9EQVRFIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RZUEVfREFURTwvc3Bhbj48L2E+IHZhbHVlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT54PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gdG8gY2hlY2s8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVRZUEUtREFURTpDQVBTIj48L2E+PGgzPkdTVF9UWVBFX0RBVEU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RZUEVfREFURSAgICAgICAgICAgICAgICAgICAgZ3N0X2RhdGVfZ2V0X3R5cGUgKCkKKzwvcHJlPgorPHA+CithIGJveGVkIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0eXBlIGZvciA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURhdGUtYW5kLVRpbWUtRnVuY3Rpb25zLmh0bWwjR0RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRGF0ZTwvc3Bhbj48L2E+IHRoYXQgcmVwcmVzZW50cyBhIGRhdGUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IG9mIEdzdERhdGU8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXZhbHVlLXNldC1kYXRlIj48L2E+PGgzPmdzdF92YWx1ZV9zZXRfZGF0ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfdmFsdWVfc2V0X2RhdGUgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1EYXRlLWFuZC1UaW1lLUZ1bmN0aW9ucy5odG1sI0dEYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R0RhdGU8L3NwYW4+PC9hPiAqZGF0ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgdGhlIGNvbnRlbnRzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPiB0byBjb3JyZXNwb25kIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRlPC9jb2RlPjwvZW0+LiAgVGhlIGFjdHVhbAorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1EYXRlLWFuZC1UaW1lLUZ1bmN0aW9ucy5odG1sI0dEYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R0RhdGU8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUgaXMgY29waWVkIGJlZm9yZSBpdCBpcyB1c2VkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX0RBVEU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGRhdGUgdG8gc2V0IHRoZSB2YWx1ZSB0bzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC12YWx1ZS1nZXQtZGF0ZSI+PC9hPjxoMz5nc3RfdmFsdWVfZ2V0X2RhdGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRGF0ZS1hbmQtVGltZS1GdW5jdGlvbnMuaHRtbCNHRGF0ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HRGF0ZTwvc3Bhbj48L2E+ICogICAgICAgZ3N0X3ZhbHVlX2dldF9kYXRlICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgY29udGVudHMgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX0RBVEU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY29udGVudHMgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVZBTFVFLUhPTERTLURBVEUtVElNRTpDQVBTIj48L2E+PGgzPkdTVF9WQUxVRV9IT0xEU19EQVRFX1RJTUUoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVkFMVUVfSE9MRFNfREFURV9USU1FKHgpICAgIChHX1ZBTFVFX0hPTERTKCh4KSwgZ3N0X2RhdGVfdGltZV9nZXRfdHlwZSAoKSkpCis8L3ByZT4KKzxwPgorQ2hlY2tzIGlmIHRoZSBnaXZlbiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gY29udGFpbnMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjR1NULVRZUEUtREFURS1USU1FOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9EQVRFX1RJTUUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVFlQRV9EQVRFX1RJTUU8L3NwYW4+PC9hPiB2YWx1ZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+eDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IHRvIGNoZWNrPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1WQUxVRS1IT0xEUy1DQVBTIj48L2E+PGgzPkdTVF9WQUxVRV9IT0xEU19DQVBTKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1ZBTFVFX0hPTERTX0NBUFMoeCkJCShHX1ZBTFVFX0hPTERTKCh4KSwgR1NUX1RZUEVfQ0FQUykpCis8L3ByZT4KKzxwPgorQ2hlY2tzIGlmIHRoZSBnaXZlbiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gY29udGFpbnMgYSA8c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RZUEVfQ0FQUzwvc3Bhbj4gdmFsdWUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPng8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0byBjaGVjazwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdmFsdWUtc2V0LWNhcHMiPjwvYT48aDM+Z3N0X3ZhbHVlX3NldF9jYXBzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF92YWx1ZV9zZXRfY2FwcyAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXRzIHRoZSBjb250ZW50cyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4gdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4uIEEgcmVmZXJlbmNlIHRvIHRoZQorcHJvdmlkZWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4gd2lsbCBiZSB0YWtlbiBieSB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX0NBUFM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGNhcHMgdG8gc2V0IHRoZSB2YWx1ZSB0by4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC12YWx1ZS1nZXQtY2FwcyI+PC9hPjxoMz5nc3RfdmFsdWVfZ2V0X2NhcHMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKiAgICAgZ3N0X3ZhbHVlX2dldF9jYXBzICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgY29udGVudHMgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+LiBUaGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSByZXR1cm5lZAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyIgdGl0bGU9InN0cnVjdCBHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHdpbGwgbm90IGJlIG1vZGlmaWVkLCB0aGVyZWZvcmUgdGhlIGNhbGxlciBtdXN0IHRha2Ugb25lCitiZWZvcmUgZ2V0dGluZyByaWQgb2YgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIEdWYWx1ZSBpbml0aWFsaXplZCB0byBHU1RfVFlQRV9DQVBTPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGNvbnRlbnRzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1WQUxVRS1IT0xEUy1TVFJVQ1RVUkU6Q0FQUyI+PC9hPjxoMz5HU1RfVkFMVUVfSE9MRFNfU1RSVUNUVVJFKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1ZBTFVFX0hPTERTX1NUUlVDVFVSRSh4KQkJKEdfVkFMVUVfSE9MRFMoKHgpLCBHU1RfVFlQRV9TVFJVQ1RVUkUpKQorPC9wcmU+Cis8cD4KK0NoZWNrcyBpZiB0aGUgZ2l2ZW4gPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IGNvbnRhaW5zIGEgPHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UWVBFX1NUUlVDVFVSRTwvc3Bhbj4gdmFsdWUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPng8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0byBjaGVjazwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjE1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdmFsdWUtc2V0LXN0cnVjdHVyZSI+PC9hPjxoMz5nc3RfdmFsdWVfc2V0X3N0cnVjdHVyZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfdmFsdWVfc2V0X3N0cnVjdHVyZSAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgdGhlIGNvbnRlbnRzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPiB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+LiAgVGhlIGFjdHVhbAorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX1NUUlVDVFVSRTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzdHJ1Y3R1cmUgdG8gc2V0IHRoZSB2YWx1ZSB0bzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC12YWx1ZS1nZXQtc3RydWN0dXJlIj48L2E+PGgzPmdzdF92YWx1ZV9nZXRfc3RydWN0dXJlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZSIgdGl0bGU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKiBnc3RfdmFsdWVfZ2V0X3N0cnVjdHVyZSAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIGNvbnRlbnRzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIEdWYWx1ZSBpbml0aWFsaXplZCB0byBHU1RfVFlQRV9TVFJVQ1RVUkU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY29udGVudHMgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVZBTFVFLUhPTERTLUJVRkZFUjpDQVBTIj48L2E+PGgzPkdTVF9WQUxVRV9IT0xEU19CVUZGRVIoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVkFMVUVfSE9MRFNfQlVGRkVSKHgpICAgICAgIChHX1ZBTFVFX0hPTERTKCh4KSwgR1NUX1RZUEVfQlVGRkVSKSkKKzwvcHJlPgorPHA+CitDaGVja3MgaWYgdGhlIGdpdmVuIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBjb250YWlucyBhIDxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVFlQRV9CVUZGRVI8L3NwYW4+IHZhbHVlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT54PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gdG8gY2hlY2s8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXZhbHVlLWdldC1idWZmZXIiPjwvYT48aDM+Z3N0X3ZhbHVlX2dldF9idWZmZXIoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgIGdzdF92YWx1ZV9nZXRfYnVmZmVyKHYpICAgICAgICAgR1NUX0JVRkZFUl9DQVNUIChnX3ZhbHVlX2dldF9ib3hlZCh2KSkKKzwvcHJlPgorPHA+CitSZWNlaXZlcyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IGFzIHRoZSB2YWx1ZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+djwvY29kZT48L2VtPi4gRG9lcyBub3QgcmV0dXJuIGEgcmVmZXJlbmNlIHRvCit0aGUgYnVmZmVyLCBzbyB0aGUgcG9pbnRlciBpcyBvbmx5IHZhbGlkIGZvciBhcyBsb25nIGFzIHRoZSBjYWxsZXIgb3ducworYSByZWZlcmVuY2UgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnY8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+djwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0byBxdWVyeTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmJ1ZmZlci4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC12YWx1ZS1zZXQtYnVmZmVyIj48L2E+PGgzPmdzdF92YWx1ZV9zZXRfYnVmZmVyKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICBnc3RfdmFsdWVfc2V0X2J1ZmZlcih2LGIpICAgICAgIGdfdmFsdWVfc2V0X2JveGVkKCh2KSwoYikpCis8L3ByZT4KKzxwPgorU2V0cyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPiBhcyB0aGUgdmFsdWUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnY8L2NvZGU+PC9lbT4uICBDYWxsZXIgcmV0YWlucyByZWZlcmVuY2UgdG8gYnVmZmVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnY8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gdG8gcmVjZWl2ZSB0aGUgZGF0YTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IHRvIGFzc2lnbiB0byB0aGUgR3N0VmFsdWUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdmFsdWUtdGFrZS1idWZmZXIiPjwvYT48aDM+Z3N0X3ZhbHVlX3Rha2VfYnVmZmVyKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICBnc3RfdmFsdWVfdGFrZV9idWZmZXIodixiKSAgICAgIGdfdmFsdWVfdGFrZV9ib3hlZCh2LChiKSkKKzwvcHJlPgorPHA+CitTZXRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iPC9jb2RlPjwvZW0+IGFzIHRoZSB2YWx1ZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+djwvY29kZT48L2VtPi4gIENhbGxlciBnaXZlcyBhd2F5IHJlZmVyZW5jZSB0byBidWZmZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+djwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0byByZWNlaXZlIHRoZSBkYXRhPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gdG8gYXNzaWduIHRvIHRoZSBHc3RWYWx1ZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1WQUxVRS1MRVNTLVRIQU46Q0FQUyI+PC9hPjxoMz5HU1RfVkFMVUVfTEVTU19USEFOPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9WQUxVRV9MRVNTX1RIQU4gICAgICAgICAgICAgICgtMSkKKzwvcHJlPgorPHA+CitJbmRpY2F0ZXMgdGhhdCB0aGUgZmlyc3QgdmFsdWUgcHJvdmlkZWQgdG8gYSBjb21wYXJpc29uIGZ1bmN0aW9uCisoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1jb21wYXJlIiB0aXRsZT0iZ3N0X3ZhbHVlX2NvbXBhcmUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3ZhbHVlX2NvbXBhcmUoKTwvY29kZT48L2E+KSBpcyBsZXNzZXIgdGhhbiB0aGUgc2Vjb25kIG9uZS4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVZBTFVFLUVRVUFMOkNBUFMiPjwvYT48aDM+R1NUX1ZBTFVFX0VRVUFMPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9WQUxVRV9FUVVBTCAgICAgICAgICAgICAgICAgICAwCis8L3ByZT4KKzxwPgorSW5kaWNhdGVzIHRoYXQgdGhlIGZpcnN0IHZhbHVlIHByb3ZpZGVkIHRvIGEgY29tcGFyaXNvbiBmdW5jdGlvbgorKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtY29tcGFyZSIgdGl0bGU9ImdzdF92YWx1ZV9jb21wYXJlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF92YWx1ZV9jb21wYXJlKCk8L2NvZGU+PC9hPikgaXMgZXF1YWwgdG8gdGhlIHNlY29uZCBvbmUuCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1WQUxVRS1HUkVBVEVSLVRIQU46Q0FQUyI+PC9hPjxoMz5HU1RfVkFMVUVfR1JFQVRFUl9USEFOPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9WQUxVRV9HUkVBVEVSX1RIQU4gICAgICAgICAgICAxCis8L3ByZT4KKzxwPgorSW5kaWNhdGVzIHRoYXQgdGhlIGZpcnN0IHZhbHVlIHByb3ZpZGVkIHRvIGEgY29tcGFyaXNvbiBmdW5jdGlvbgorKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtY29tcGFyZSIgdGl0bGU9ImdzdF92YWx1ZV9jb21wYXJlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF92YWx1ZV9jb21wYXJlKCk8L2NvZGU+PC9hPikgaXMgZ3JlYXRlciB0aGFuIHRoZSBzZWNvbmQgb25lLgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVkFMVUUtVU5PUkRFUkVEOkNBUFMiPjwvYT48aDM+R1NUX1ZBTFVFX1VOT1JERVJFRDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVkFMVUVfVU5PUkRFUkVEICAgICAgICAgICAgICAgMgorPC9wcmU+Cis8cD4KK0luZGljYXRlcyB0aGF0IHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWNvbXBhcmUiIHRpdGxlPSJnc3RfdmFsdWVfY29tcGFyZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdmFsdWVfY29tcGFyZSgpPC9jb2RlPjwvYT4pIGNhbiBub3QKK2RldGVybWluZSBhIG9yZGVyIGZvciB0aGUgdHdvIHByb3ZpZGVkIHZhbHVlcy4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0VmFsdWVDb21wYXJlRnVuYyI+PC9hPjxoMz5Hc3RWYWx1ZUNvbXBhcmVGdW5jICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgKCpHc3RWYWx1ZUNvbXBhcmVGdW5jKSAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1VzZWQgdG9nZXRoZXIgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWNvbXBhcmUiIHRpdGxlPSJnc3RfdmFsdWVfY29tcGFyZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdmFsdWVfY29tcGFyZSgpPC9jb2RlPjwvYT4gdG8gY29tcGFyZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gaXRlbXMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWUxPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmZpcnN0IHZhbHVlIGZvciBjb21wYXJpc29uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2Vjb25kIHZhbHVlIGZvciBjb21wYXJpc29uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+b25lIG9mIEdTVF9WQUxVRV9MRVNTX1RIQU4sIEdTVF9WQUxVRV9FUVVBTCwgR1NUX1ZBTFVFX0dSRUFURVJfVEhBTgorb3IgR1NUX1ZBTFVFX1VOT1JERVJFRDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFZhbHVlU2VyaWFsaXplRnVuYyI+PC9hPjxoMz5Hc3RWYWx1ZVNlcmlhbGl6ZUZ1bmMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+ICogICAgICAgICAgICAgKCpHc3RWYWx1ZVNlcmlhbGl6ZUZ1bmMpICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1VzZWQgYnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXJpYWxpemUiIHRpdGxlPSJnc3RfdmFsdWVfc2VyaWFsaXplICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF92YWx1ZV9zZXJpYWxpemUoKTwvY29kZT48L2E+IHRvIG9idGFpbiBhIG5vbi1iaW5hcnkgZm9ybSBvZiB0aGUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+LgorPC9wPgorPHA+CitGcmVlLWZ1bmN0aW9uOiBnX2ZyZWUKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0VmFsdWVEZXNlcmlhbGl6ZUZ1bmMiPjwvYT48aDM+R3N0VmFsdWVEZXNlcmlhbGl6ZUZ1bmMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgKCpHc3RWYWx1ZURlc2VyaWFsaXplRnVuYykgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKmRlc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1VzZWQgYnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1kZXNlcmlhbGl6ZSIgdGl0bGU9ImdzdF92YWx1ZV9kZXNlcmlhbGl6ZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdmFsdWVfZGVzZXJpYWxpemUoKTwvY29kZT48L2E+IHRvIHBhcnNlIGEgbm9uLWJpbmFyeSBmb3JtIGludG8gdGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBzdHJpbmc8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGZvciBzdWNjZXNzPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0VmFsdWVVbmlvbkZ1bmMiPjwvYT48aDM+R3N0VmFsdWVVbmlvbkZ1bmMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgKCpHc3RWYWx1ZVVuaW9uRnVuYykgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKmRlc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitVc2VkIGJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtdW5pb24iIHRpdGxlPSJnc3RfdmFsdWVfdW5pb24gKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3ZhbHVlX3VuaW9uKCk8L2NvZGU+PC9hPiB0byBwZXJmb3JtIHVuaWZpY2F0aW9uIGZvciBhIHNwZWNpZmljIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPgordHlwZS4gUmVnaXN0ZXIgYSBuZXcgaW1wbGVtZW50YXRpb24gd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXJlZ2lzdGVyLXVuaW9uLWZ1bmMiIHRpdGxlPSJnc3RfdmFsdWVfcmVnaXN0ZXJfdW5pb25fZnVuYyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdmFsdWVfcmVnaXN0ZXJfdW5pb25fZnVuYygpPC9jb2RlPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBmb3IgdGhlIHJlc3VsdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWUxPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IG9wZXJhbmQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBvcGVyYW5kPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBhIHVuaW9uIHdhcyBzdWNjZXNzZnVsPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0VmFsdWVJbnRlcnNlY3RGdW5jIj48L2E+PGgzPkdzdFZhbHVlSW50ZXJzZWN0RnVuYyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAoKkdzdFZhbHVlSW50ZXJzZWN0RnVuYykgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1VzZWQgYnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1pbnRlcnNlY3QiIHRpdGxlPSJnc3RfdmFsdWVfaW50ZXJzZWN0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF92YWx1ZV9pbnRlcnNlY3QoKTwvY29kZT48L2E+IHRvIHBlcmZvcm0gaW50ZXJzZWN0aW9uIGZvciBhIHNwZWNpZmljIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPgordHlwZS4gSWYgdGhlIGludGVyc2VjdGlvbiBpcyBub24tZW1wdHksIHRoZSByZXN1bHQgaXMKK3BsYWNlZCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdDwvY29kZT48L2VtPiBhbmQgVFJVRSBpcyByZXR1cm5lZC4gIElmIHRoZSBpbnRlcnNlY3Rpb24gaXMKK2VtcHR5LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdDwvY29kZT48L2VtPiBpcyB1bm1vZGlmaWVkIGFuZCBGQUxTRSBpcyByZXR1cm5lZC4KK1JlZ2lzdGVyIGEgbmV3IGltcGxlbWVudGF0aW9uIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1yZWdpc3Rlci1pbnRlcnNlY3QtZnVuYyIgdGl0bGU9ImdzdF92YWx1ZV9yZWdpc3Rlcl9pbnRlcnNlY3RfZnVuYyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdmFsdWVfcmVnaXN0ZXJfaW50ZXJzZWN0X2Z1bmMoKTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gZm9yIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPiBjYWxsZXItYWxsb2NhdGVzXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWUxPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IG9wZXJhbmQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBvcGVyYW5kPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdmFsdWVzIGNhbiBpbnRlcnNlY3Q8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RWYWx1ZVN1YnRyYWN0RnVuYyI+PC9hPjxoMz5Hc3RWYWx1ZVN1YnRyYWN0RnVuYyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAoKkdzdFZhbHVlU3VidHJhY3RGdW5jKSAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKm1pbnVlbmQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpzdWJ0cmFoZW5kPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVXNlZCBieSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXN1YnRyYWN0IiB0aXRsZT0iZ3N0X3ZhbHVlX3N1YnRyYWN0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF92YWx1ZV9zdWJ0cmFjdCgpPC9jb2RlPjwvYT4gdG8gcGVyZm9ybSBzdWJ0cmFjdGlvbiBmb3IgYSBzcGVjaWZpYyA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4KK3R5cGUuIFJlZ2lzdGVyIGEgbmV3IGltcGxlbWVudGF0aW9uIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1yZWdpc3Rlci1zdWJ0cmFjdC1mdW5jIiB0aXRsZT0iZ3N0X3ZhbHVlX3JlZ2lzdGVyX3N1YnRyYWN0X2Z1bmMgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3ZhbHVlX3JlZ2lzdGVyX3N1YnRyYWN0X2Z1bmMoKTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gZm9yIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPiBjYWxsZXItYWxsb2NhdGVzXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWludWVuZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBvcGVyYW5kPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdWJ0cmFoZW5kPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IG9wZXJhbmQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBzdWJ0cmFjdGlvbiBpcyBub3QgZW1wdHk8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RWYWx1ZVRhYmxlIj48L2E+PGgzPnN0cnVjdCBHc3RWYWx1ZVRhYmxlPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0VmFsdWVUYWJsZSB7CisgIEdUeXBlIHR5cGU7CisgIEdzdFZhbHVlQ29tcGFyZUZ1bmMgY29tcGFyZTsKKyAgR3N0VmFsdWVTZXJpYWxpemVGdW5jIHNlcmlhbGl6ZTsKKyAgR3N0VmFsdWVEZXNlcmlhbGl6ZUZ1bmMgZGVzZXJpYWxpemU7Cit9OworPC9wcmU+Cis8cD4KK1ZUYWJsZSBmb3IgdGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0VmFsdWVUYWJsZS50eXBlIj48L2E+dHlwZTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR3N0VmFsdWVDb21wYXJlRnVuYyIgdGl0bGU9IkdzdFZhbHVlQ29tcGFyZUZ1bmMgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWYWx1ZUNvbXBhcmVGdW5jPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFZhbHVlVGFibGUuY29tcGFyZSI+PC9hPmNvbXBhcmU8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dzdFZhbHVlQ29tcGFyZUZ1bmMiIHRpdGxlPSJHc3RWYWx1ZUNvbXBhcmVGdW5jICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VmFsdWVDb21wYXJlRnVuYzwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dzdFZhbHVlU2VyaWFsaXplRnVuYyIgdGl0bGU9IkdzdFZhbHVlU2VyaWFsaXplRnVuYyAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFZhbHVlU2VyaWFsaXplRnVuYzwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RWYWx1ZVRhYmxlLnNlcmlhbGl6ZSI+PC9hPnNlcmlhbGl6ZTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR3N0VmFsdWVTZXJpYWxpemVGdW5jIiB0aXRsZT0iR3N0VmFsdWVTZXJpYWxpemVGdW5jICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VmFsdWVTZXJpYWxpemVGdW5jPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR3N0VmFsdWVEZXNlcmlhbGl6ZUZ1bmMiIHRpdGxlPSJHc3RWYWx1ZURlc2VyaWFsaXplRnVuYyAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFZhbHVlRGVzZXJpYWxpemVGdW5jPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFZhbHVlVGFibGUuZGVzZXJpYWxpemUiPjwvYT5kZXNlcmlhbGl6ZTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR3N0VmFsdWVEZXNlcmlhbGl6ZUZ1bmMiIHRpdGxlPSJHc3RWYWx1ZURlc2VyaWFsaXplRnVuYyAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFZhbHVlRGVzZXJpYWxpemVGdW5jPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC12YWx1ZS1pcy1maXhlZCI+PC9hPjxoMz5nc3RfdmFsdWVfaXNfZml4ZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3ZhbHVlX2lzX2ZpeGVkICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVGVzdHMgaWYgdGhlIGdpdmVuIEdWYWx1ZSwgaWYgYXZhaWxhYmxlIGluIGEgR3N0U3RydWN0dXJlIChvciBhbnkgb3RoZXIKK2NvbnRhaW5lcikgY29udGFpbnMgYSAiZml4ZWQiICh3aGljaCBtZWFuczogb25lIHZhbHVlKSBvciBhbiAidW5maXhlZCIKKyh3aGljaCBtZWFuczogbXVsdGlwbGUgcG9zc2libGUgdmFsdWVzLCBzdWNoIGFzIGRhdGEgbGlzdHMgb3IgZGF0YQorcmFuZ2VzKSB2YWx1ZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IHRvIGNoZWNrPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dHJ1ZSBpZiB0aGUgdmFsdWUgaXMgImZpeGVkIi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdmFsdWUtcmVnaXN0ZXIiPjwvYT48aDM+Z3N0X3ZhbHVlX3JlZ2lzdGVyICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF92YWx1ZV9yZWdpc3RlciAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dzdFZhbHVlVGFibGUiIHRpdGxlPSJzdHJ1Y3QgR3N0VmFsdWVUYWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFZhbHVlVGFibGU8L3NwYW4+PC9hPiAqdGFibGU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWdpc3RlcnMgZnVuY3Rpb25zIHRvIHBlcmZvcm0gY2FsY3VsYXRpb25zIG9uIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBpdGVtcyBvZiBhIGdpdmVuCit0eXBlLiBFYWNoIHR5cGUgY2FuIG9ubHkgYmUgYWRkZWQgb25jZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFibGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c3RydWN0dXJlIGNvbnRhaW5pbmcgZnVuY3Rpb25zIHRvIHJlZ2lzdGVyPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC12YWx1ZS1pbml0LWFuZC1jb3B5Ij48L2E+PGgzPmdzdF92YWx1ZV9pbml0X2FuZF9jb3B5ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpkZXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSW5pdGlhbGlzZXMgdGhlIHRhcmdldCB2YWx1ZSB0byBiZSBvZiB0aGUgc2FtZSB0eXBlIGFzIHNvdXJjZSBhbmQgdGhlbiBjb3BpZXMKK3RoZSBjb250ZW50cyBmcm9tIHNvdXJjZSB0byB0YXJnZXQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdGFyZ2V0IHZhbHVlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT4gY2FsbGVyLWFsbG9jYXRlc108L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc291cmNlIHZhbHVlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXZhbHVlLXNlcmlhbGl6ZSI+PC9hPjxoMz5nc3RfdmFsdWVfc2VyaWFsaXplICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPiAqICAgICAgICAgICAgIGdzdF92YWx1ZV9zZXJpYWxpemUgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK3RyaWVzIHRvIHRyYW5zZm9ybSB0aGUgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+IGludG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gdGhhdCBhbGxvd3MKK2dldHRpbmcgYmFjayB0aGlzIHN0cmluZyBsYXRlciBvbiB1c2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWRlc2VyaWFsaXplIiB0aXRsZT0iZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF92YWx1ZV9kZXNlcmlhbGl6ZSgpPC9jb2RlPjwvYT4uCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdfZnJlZQorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IHRvIHNlcmlhbGl6ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzZXJpYWxpemF0aW9uIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4gb3IgTlVMTCBpZiBub25lIGV4aXN0cy4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC12YWx1ZS1kZXNlcmlhbGl6ZSI+PC9hPjxoMz5nc3RfdmFsdWVfZGVzZXJpYWxpemUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKmRlc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVHJpZXMgdG8gZGVzZXJpYWxpemUgYSBzdHJpbmcgaW50byB0aGUgdHlwZSBzcGVjaWZpZWQgYnkgdGhlIGdpdmVuIEdWYWx1ZS4KK0lmIHRoZSBvcGVyYXRpb24gc3VjY2VlZHMsIFRSVUUgaXMgcmV0dXJuZWQsIEZBTFNFIG90aGVyd2lzZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IHRvIGZpbGwgd2l0aCBjb250ZW50cyBvZgorZGVzZXJpYWxpemF0aW9uLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT4gY2FsbGVyLWFsbG9jYXRlc108L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zdHJpbmcgdG8gZGVzZXJpYWxpemU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIG9uIHN1Y2Nlc3M8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdmFsdWUtY29tcGFyZSI+PC9hPjxoMz5nc3RfdmFsdWVfY29tcGFyZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgIGdzdF92YWx1ZV9jb21wYXJlICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb21wYXJlcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWUxPC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWUyPC9jb2RlPjwvZW0+LiAgSWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMTwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMjwvY29kZT48L2VtPiBjYW5ub3QgYmUKK2NvbXBhcmVkLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBHU1RfVkFMVUVfVU5PUkRFUkVELiAgT3RoZXJ3aXNlLAoraWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMTwvY29kZT48L2VtPiBpcyBncmVhdGVyIHRoYW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMjwvY29kZT48L2VtPiwgR1NUX1ZBTFVFX0dSRUFURVJfVEhBTiBpcyByZXR1cm5lZC4KK0lmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTE8L2NvZGU+PC9lbT4gaXMgbGVzcyB0aGFuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTI8L2NvZGU+PC9lbT4sIEdTVF9WQUxVRV9MRVNTX1RIQU4gaXMgcmV0dXJuZWQuCitJZiB0aGUgdmFsdWVzIGFyZSBlcXVhbCwgR1NUX1ZBTFVFX0VRVUFMIGlzIHJldHVybmVkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHZhbHVlIHRvIGNvbXBhcmU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hbm90aGVyIHZhbHVlIHRvIGNvbXBhcmU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5jb21wYXJpc29uIHJlc3VsdDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC12YWx1ZS1jYW4tY29tcGFyZSI+PC9hPjxoMz5nc3RfdmFsdWVfY2FuX2NvbXBhcmUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3ZhbHVlX2Nhbl9jb21wYXJlICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0RldGVybWluZXMgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMTwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMjwvY29kZT48L2VtPiBjYW4gYmUgY29tcGFyZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWUxPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgdmFsdWUgdG8gY29tcGFyZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWUyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFub3RoZXIgdmFsdWUgdG8gY29tcGFyZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHZhbHVlcyBjYW4gYmUgY29tcGFyZWQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdmFsdWUtdW5pb24iPjwvYT48aDM+Z3N0X3ZhbHVlX3VuaW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF92YWx1ZV91bmlvbiAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpkZXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWUxPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWUyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlcyBhIEdWYWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSB1bmlvbiBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWUxPC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWUyPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGRlc3RpbmF0aW9uIHZhbHVlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT4gY2FsbGVyLWFsbG9jYXRlc108L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHZhbHVlIHRvIHVuaW9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YW5vdGhlciB2YWx1ZSB0byB1bmlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFsd2F5cyByZXR1cm5zIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdmFsdWUtY2FuLXVuaW9uIj48L2E+PGgzPmdzdF92YWx1ZV9jYW5fdW5pb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3ZhbHVlX2Nhbl91bmlvbiAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0RldGVybWluZXMgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMTwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMjwvY29kZT48L2VtPiBjYW4gYmUgbm9uLXRyaXZpYWxseSB1bmlvbmVkLgorQW55IHR3byB2YWx1ZXMgY2FuIGJlIHRyaXZpYWxseSB1bmlvbmVkIGJ5IGFkZGluZyBib3RoIG9mIHRoZW0KK3RvIGEgR3N0VmFsdWVMaXN0LiAgSG93ZXZlciwgY2VydGFpbiB0eXBlcyBoYXZlIHRoZSBwb3NzaWJpbGl0eQordG8gYmUgdW5pb25lZCBpbiBhIHNpbXBsZXIgd2F5LiAgRm9yIGV4YW1wbGUsIGFuIGludGVnZXIgcmFuZ2UKK2FuZCBhbiBpbnRlZ2VyIGNhbiBiZSB1bmlvbmVkIGlmIHRoZSBpbnRlZ2VyIGlzIGEgc3Vic2V0IG9mIHRoZQoraW50ZWdlciByYW5nZS4gIElmIHRoZXJlIGlzIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHR3byB2YWx1ZXMgY2FuCitiZSB1bmlvbmVkLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgVFJVRS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSB2YWx1ZSB0byB1bmlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWUyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFub3RoZXIgdmFsdWUgdG8gdW5pb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZXJlIGlzIGEgZnVuY3Rpb24gYWxsb3dpbmcgdGhlIHR3byB2YWx1ZXMgdG8KK2JlIHVuaW9uZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXZhbHVlLXJlZ2lzdGVyLXVuaW9uLWZ1bmMiPjwvYT48aDM+Z3N0X3ZhbHVlX3JlZ2lzdGVyX3VuaW9uX2Z1bmMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3ZhbHVlX3JlZ2lzdGVyX3VuaW9uX2Z1bmMgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gdHlwZTE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IHR5cGUyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHc3RWYWx1ZVVuaW9uRnVuYyIgdGl0bGU9IkdzdFZhbHVlVW5pb25GdW5jICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VmFsdWVVbmlvbkZ1bmM8L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVnaXN0ZXJzIGEgdW5pb24gZnVuY3Rpb24gdGhhdCBjYW4gY3JlYXRlIGEgdW5pb24gYmV0d2VlbiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gaXRlbXMKK29mIHRoZSB0eXBlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlMTwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGUyPC9jb2RlPjwvZW0+LgorPC9wPgorPHA+CitVbmlvbiBmdW5jdGlvbnMgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgYXQgc3RhcnR1cCBiZWZvcmUgYW55IHBpcGVsaW5lcyBhcmUKK3N0YXJ0ZWQsIGFzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtcmVnaXN0ZXItdW5pb24tZnVuYyIgdGl0bGU9ImdzdF92YWx1ZV9yZWdpc3Rlcl91bmlvbl9mdW5jICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF92YWx1ZV9yZWdpc3Rlcl91bmlvbl9mdW5jKCk8L2NvZGU+PC9hPiBpcyBub3QgdGhyZWFkLXNhZmUgYW5kIGNhbm5vdAorYmUgdXNlZCBhdCB0aGUgc2FtZSB0aW1lIGFzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtdW5pb24iIHRpdGxlPSJnc3RfdmFsdWVfdW5pb24gKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3ZhbHVlX3VuaW9uKCk8L2NvZGU+PC9hPiBvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWNhbi11bmlvbiIgdGl0bGU9ImdzdF92YWx1ZV9jYW5fdW5pb24gKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3ZhbHVlX2Nhbl91bmlvbigpPC9jb2RlPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSB0eXBlIHRvIHVuaW9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlMjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hbm90aGVyIHR5cGUgdG8gdW5pb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgY3JlYXRpbmcgYSB1bmlvbiBiZXR3ZWVuIHRoZSB0d28gdHlwZXM8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdmFsdWUtc3VidHJhY3QiPjwvYT48aDM+Z3N0X3ZhbHVlX3N1YnRyYWN0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF92YWx1ZV9zdWJ0cmFjdCAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpkZXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqbWludWVuZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnN1YnRyYWhlbmQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTdWJ0cmFjdHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN1YnRyYWhlbmQ8L2NvZGU+PC9lbT4gZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWludWVuZDwvY29kZT48L2VtPiBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3Q8L2NvZGU+PC9lbT4uCitOb3RlIHRoYXQgdGhpcyBtZWFucyBzdWJ0cmFjdGlvbiBhcyBpbiBzZXRzLCBub3QgYXMgaW4gbWF0aGVtYXRpY3MuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZGVzdGluYXRpb24gdmFsdWUgZm9yIHRoZSByZXN1bHQgaWYgdGhlCitzdWJ0cmFjdGlvbiBpcyBub3QgZW1wdHkuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPiBjYWxsZXItYWxsb2NhdGVzXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWludWVuZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdmFsdWUgdG8gc3VidHJhY3QgZnJvbTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3VidHJhaGVuZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdmFsdWUgdG8gc3VidHJhY3Q8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBzdWJ0cmFjdGlvbiBpcyBub3QgZW1wdHk8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdmFsdWUtY2FuLXN1YnRyYWN0Ij48L2E+PGgzPmdzdF92YWx1ZV9jYW5fc3VidHJhY3QgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3ZhbHVlX2Nhbl9zdWJ0cmFjdCAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKm1pbnVlbmQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpzdWJ0cmFoZW5kPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2tzIGlmIGl0J3MgcG9zc2libGUgdG8gc3VidHJhY3QgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN1YnRyYWhlbmQ8L2NvZGU+PC9lbT4gZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWludWVuZDwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5taW51ZW5kPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB2YWx1ZSB0byBzdWJ0cmFjdCBmcm9tPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdWJ0cmFoZW5kPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB2YWx1ZSB0byBzdWJ0cmFjdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgYSBzdWJ0cmFjdGlvbiBpcyBwb3NzaWJsZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC12YWx1ZS1yZWdpc3Rlci1zdWJ0cmFjdC1mdW5jIj48L2E+PGgzPmdzdF92YWx1ZV9yZWdpc3Rlcl9zdWJ0cmFjdF9mdW5jICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF92YWx1ZV9yZWdpc3Rlcl9zdWJ0cmFjdF9mdW5jICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IG1pbnVlbmRfdHlwZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gc3VidHJhaGVuZF90eXBlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHc3RWYWx1ZVN1YnRyYWN0RnVuYyIgdGl0bGU9IkdzdFZhbHVlU3VidHJhY3RGdW5jICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VmFsdWVTdWJ0cmFjdEZ1bmM8L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVnaXN0ZXJzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+IGFzIGEgZnVuY3Rpb24gY2FwYWJsZSBvZiBzdWJ0cmFjdGluZyB0aGUgdmFsdWVzIG9mCis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3VidHJhaGVuZF90eXBlPC9jb2RlPjwvZW0+IGZyb20gdmFsdWVzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5taW51ZW5kX3R5cGU8L2NvZGU+PC9lbT4uCis8L3A+Cis8cD4KK1N1YnRyYWN0IGZ1bmN0aW9ucyBzaG91bGQgYmUgcmVnaXN0ZXJlZCBhdCBzdGFydHVwIGJlZm9yZSBhbnkgcGlwZWxpbmVzIGFyZQorc3RhcnRlZCwgYXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1yZWdpc3Rlci1zdWJ0cmFjdC1mdW5jIiB0aXRsZT0iZ3N0X3ZhbHVlX3JlZ2lzdGVyX3N1YnRyYWN0X2Z1bmMgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3ZhbHVlX3JlZ2lzdGVyX3N1YnRyYWN0X2Z1bmMoKTwvY29kZT48L2E+IGlzIG5vdCB0aHJlYWQtc2FmZSBhbmQKK2Nhbm5vdCBiZSB1c2VkIGF0IHRoZSBzYW1lIHRpbWUgYXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zdWJ0cmFjdCIgdGl0bGU9ImdzdF92YWx1ZV9zdWJ0cmFjdCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdmFsdWVfc3VidHJhY3QoKTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1pbnVlbmRfdHlwZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50eXBlIG9mIHRoZSBtaW51ZW5kPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdWJ0cmFoZW5kX3R5cGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dHlwZSBvZiB0aGUgc3VidHJhaGVuZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5mdW5jdGlvbiB0byB1c2U8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdmFsdWUtaW50ZXJzZWN0Ij48L2E+PGgzPmdzdF92YWx1ZV9pbnRlcnNlY3QgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X3ZhbHVlX2ludGVyc2VjdCAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKmRlc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDYWxjdWxhdGVzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdHdvIHZhbHVlcy4gIElmIHRoZSB2YWx1ZXMgaGF2ZQorYSBub24tZW1wdHkgaW50ZXJzZWN0aW9uLCB0aGUgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBpbnRlcnNlY3Rpb24KK2lzIHBsYWNlZCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdDwvY29kZT48L2VtPi4gIElmIHRoZSBpbnRlcnNlY3Rpb24gaXMgbm9uLWVtcHR5LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdDwvY29kZT48L2VtPiBpcworbm90IG1vZGlmaWVkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSB1bmluaXRpYWxpemVkIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0aGF0IHdpbGwgaG9sZCB0aGUgY2FsY3VsYXRlZAoraW50ZXJzZWN0aW9uIHZhbHVlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT4gY2FsbGVyLWFsbG9jYXRlc108L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHZhbHVlIHRvIGludGVyc2VjdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWUyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFub3RoZXIgdmFsdWUgdG8gaW50ZXJzZWN0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiB0aGUgaW50ZXJzZWN0aW9uIGlzIG5vbi1lbXB0eTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC12YWx1ZS1jYW4taW50ZXJzZWN0Ij48L2E+PGgzPmdzdF92YWx1ZV9jYW5faW50ZXJzZWN0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF92YWx1ZV9jYW5faW50ZXJzZWN0ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitEZXRlcm1pbmVzIGlmIGludGVyc2VjdGluZyB0d28gdmFsdWVzIHdpbGwgcHJvZHVjZSBhIHZhbGlkIHJlc3VsdC4KK1R3byB2YWx1ZXMgd2lsbCBwcm9kdWNlIGEgdmFsaWQgaW50ZXJzZWN0aW9uIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZQordHlwZSwgb3IgaWYgdGhlcmUgaXMgYSBtZXRob2QgKHJlZ2lzdGVyZWQgYnkKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtcmVnaXN0ZXItaW50ZXJzZWN0LWZ1bmMiIHRpdGxlPSJnc3RfdmFsdWVfcmVnaXN0ZXJfaW50ZXJzZWN0X2Z1bmMgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3ZhbHVlX3JlZ2lzdGVyX2ludGVyc2VjdF9mdW5jKCk8L2NvZGU+PC9hPikgdG8gY2FsY3VsYXRlIHRoZSBpbnRlcnNlY3Rpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWUxPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgdmFsdWUgdG8gaW50ZXJzZWN0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YW5vdGhlciB2YWx1ZSB0byBpbnRlcnNlY3Q8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSB2YWx1ZXMgY2FuIGludGVyc2VjdDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC12YWx1ZS1yZWdpc3Rlci1pbnRlcnNlY3QtZnVuYyI+PC9hPjxoMz5nc3RfdmFsdWVfcmVnaXN0ZXJfaW50ZXJzZWN0X2Z1bmMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3ZhbHVlX3JlZ2lzdGVyX2ludGVyc2VjdF9mdW5jICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gdHlwZTE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IHR5cGUyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHc3RWYWx1ZUludGVyc2VjdEZ1bmMiIHRpdGxlPSJHc3RWYWx1ZUludGVyc2VjdEZ1bmMgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWYWx1ZUludGVyc2VjdEZ1bmM8L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVnaXN0ZXJzIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgdG8gY2FsY3VsYXRlIHRoZSBpbnRlcnNlY3Rpb24KK29mIHRoZSB2YWx1ZXMgaGF2aW5nIHRoZSB0eXBlcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTE8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlMjwvY29kZT48L2VtPi4KKzwvcD4KKzxwPgorSW50ZXJzZWN0IGZ1bmN0aW9ucyBzaG91bGQgYmUgcmVnaXN0ZXJlZCBhdCBzdGFydHVwIGJlZm9yZSBhbnkgcGlwZWxpbmVzIGFyZQorc3RhcnRlZCwgYXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1yZWdpc3Rlci1pbnRlcnNlY3QtZnVuYyIgdGl0bGU9ImdzdF92YWx1ZV9yZWdpc3Rlcl9pbnRlcnNlY3RfZnVuYyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdmFsdWVfcmVnaXN0ZXJfaW50ZXJzZWN0X2Z1bmMoKTwvY29kZT48L2E+IGlzIG5vdCB0aHJlYWQtc2FmZSBhbmQKK2Nhbm5vdCBiZSB1c2VkIGF0IHRoZSBzYW1lIHRpbWUgYXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1pbnRlcnNlY3QiIHRpdGxlPSJnc3RfdmFsdWVfaW50ZXJzZWN0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF92YWx1ZV9pbnRlcnNlY3QoKTwvY29kZT48L2E+IG9yCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWNhbi1pbnRlcnNlY3QiIHRpdGxlPSJnc3RfdmFsdWVfY2FuX2ludGVyc2VjdCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdmFsdWVfY2FuX2ludGVyc2VjdCgpPC9jb2RlPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGZpcnN0IHR5cGUgdG8gaW50ZXJzZWN0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlMjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2Vjb25kIHR5cGUgdG8gaW50ZXJzZWN0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBpbnRlcnNlY3Rpb24gZnVuY3Rpb248L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdmFsdWUtYXJyYXktYXBwZW5kLXZhbHVlIj48L2E+PGgzPmdzdF92YWx1ZV9hcnJheV9hcHBlbmRfdmFsdWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X3ZhbHVlX2FycmF5X2FwcGVuZF92YWx1ZSAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqYXBwZW5kX3ZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQXBwZW5kcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YXBwZW5kX3ZhbHVlPC9jb2RlPjwvZW0+IHRvIHRoZSBHc3RWYWx1ZUFycmF5IGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBvZiB0eXBlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1BUlJBWTpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfQVJSQVkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVFlQRV9BUlJBWTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFwcGVuZF92YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdmFsdWUgdG8gYXBwZW5kPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXZhbHVlLWFycmF5LWdldC1zaXplIj48L2E+PGgzPmdzdF92YWx1ZV9hcnJheV9nZXRfc2l6ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICBnc3RfdmFsdWVfYXJyYXlfZ2V0X3NpemUgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXRzIHRoZSBudW1iZXIgb2YgdmFsdWVzIGNvbnRhaW5lZCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gb2YgdHlwZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtQVJSQVk6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0FSUkFZIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RZUEVfQVJSQVk8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG51bWJlciBvZiB2YWx1ZXM8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdmFsdWUtYXJyYXktZ2V0LXZhbHVlIj48L2E+PGgzPmdzdF92YWx1ZV9hcnJheV9nZXRfdmFsdWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKiAgICAgIGdzdF92YWx1ZV9hcnJheV9nZXRfdmFsdWUgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgdmFsdWUgdGhhdCBpcyBhIG1lbWJlciBvZiB0aGUgYXJyYXkgY29udGFpbmVkIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPiBhbmQKK2hhcyB0aGUgaW5kZXggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IG9mIHR5cGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUFSUkFZOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9BUlJBWSI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UWVBFX0FSUkFZPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5kZXg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+aW5kZXggb2YgdmFsdWUgdG8gZ2V0IGZyb20gdGhlIGFycmF5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHZhbHVlIGF0IHRoZSBnaXZlbiBpbmRleC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC12YWx1ZS1hcnJheS1wcmVwZW5kLXZhbHVlIj48L2E+PGgzPmdzdF92YWx1ZV9hcnJheV9wcmVwZW5kX3ZhbHVlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF92YWx1ZV9hcnJheV9wcmVwZW5kX3ZhbHVlICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnByZXBlbmRfdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitQcmVwZW5kcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJlcGVuZF92YWx1ZTwvY29kZT48L2VtPiB0byB0aGUgR3N0VmFsdWVBcnJheSBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gb2YgdHlwZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtQVJSQVk6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0FSUkFZIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RZUEVfQVJSQVk8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcmVwZW5kX3ZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB2YWx1ZSB0byBwcmVwZW5kPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXZhbHVlLWZpeGF0ZSI+PC9hPjxoMz5nc3RfdmFsdWVfZml4YXRlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF92YWx1ZV9maXhhdGUgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpkZXN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRml4YXRlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT4gaW50byBhIG5ldyB2YWx1ZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdDwvY29kZT48L2VtPi4KK0ZvciByYW5nZXMsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHRha2VuLiBGb3IgbGlzdHMgYW5kIGFycmF5cywgdGhlCitmaXJzdCBpdGVtIGlzIGZpeGF0ZWQgYW5kIHJldHVybmVkLgorSWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPiBpcyBhbHJlYWR5IGZpeGVkLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgRkFMU0UuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IGRlc3RpbmF0aW9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0byBmaXhhdGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50cnVlIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0PC9jb2RlPjwvZW0+IGNvbnRhaW5zIGEgZml4YXRlZCB2ZXJzaW9uIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RWZXJzaW9uLmh0bWwgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RWZXJzaW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNjMWMxNgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdFZlcnNpb24uaHRtbApAQCAtMCwwICsxLDE0MCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdzdFZlcnNpb248L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLXN1cHBvcnQuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIFN1cHBvcnQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItc3VwcG9ydC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3RWZXJzaW9uLnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdFZlcnNpb24uZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFZlcnNpb24iPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItR3N0VmVyc2lvbi50b3Bfb2ZfcGFnZSI+PC9hPkdzdFZlcnNpb248L3NwYW4+PC9oMj4KKzxwPkdzdFZlcnNpb24g4oCUIEdTdHJlYW1lciB2ZXJzaW9uIG1hY3Jvcy48L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisjaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OworCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sI0dTVC1WRVJTSU9OLU1BSk9SOkNBUFMiIHRpdGxlPSJHU1RfVkVSU0lPTl9NQUpPUiI+R1NUX1ZFUlNJT05fTUFKT1I8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sI0dTVC1WRVJTSU9OLU1JTk9SOkNBUFMiIHRpdGxlPSJHU1RfVkVSU0lPTl9NSU5PUiI+R1NUX1ZFUlNJT05fTUlOT1I8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sI0dTVC1WRVJTSU9OLU1JQ1JPOkNBUFMiIHRpdGxlPSJHU1RfVkVSU0lPTl9NSUNSTyI+R1NUX1ZFUlNJT05fTUlDUk88L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sI0dTVC1WRVJTSU9OLU5BTk86Q0FQUyIgdGl0bGU9IkdTVF9WRVJTSU9OX05BTk8iPkdTVF9WRVJTSU9OX05BTk88L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sI0dTVC1DSEVDSy1WRVJTSU9OOkNBUFMiIHRpdGxlPSJHU1RfQ0hFQ0tfVkVSU0lPTigpIj5HU1RfQ0hFQ0tfVkVSU0lPTjwvYT4gICAgICAgICAgICAgICAgICAgKG1ham9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlub3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWNybykKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK1VzZSB0aGUgR1NUX1ZFUlNJT05fKiBtYWNyb3MgZS5nLiB3aGVuIGRlZmluaW5nIG93biBwbHVnaW5zLiBUaGUgR1N0cmVhbWVyCitydW50aW1lIGNoZWNrcyBpZiB0aGVzZSBwbHVnaW4gYW5kIGNvcmUgdmVyc2lvbiBtYXRjaCBhbmQgcmVmdXNlcyB0byB1c2UgYQorcGx1Z2luIGNvbXBpbGVkIGFnYWluc3QgYSBkaWZmZXJlbnQgdmVyc2lvbiBvZiBHU3RyZWFtZXIuCitZb3UgY2FuIGFsc28gdXNlIHRoZSBtYWNyb3MgdG8ga2VlcCB0aGUgR1N0cmVhbWVyIHZlcnNpb24gaW5mb3JtYXRpb24gaW4KK3lvdXIgYXBwbGljYXRpb24uCis8L3A+Cis8cD4KK1VzZSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtdmVyc2lvbiIgdGl0bGU9ImdzdF92ZXJzaW9uICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF92ZXJzaW9uKCk8L2NvZGU+PC9hPiBmdW5jdGlvbiBpZiB5b3Ugd2FudCB0byBrbm93IHdoaWNoIHZlcnNpb24gb2YKK0dTdHJlYW1lciB5b3UgYXJlIGN1cnJlbnRseSBsaW5rZWQgYWdhaW5zdC4KKzwvcD4KKzxwPgorVGhlIHZlcnNpb24gbWFjcm9zIGdldCBkZWZpbmVkIGJ5IGluY2x1ZGluZyAiZ3N0L2dzdC5oIi4KKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFZlcnNpb24uZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1WRVJTSU9OLU1BSk9SOkNBUFMiPjwvYT48aDM+R1NUX1ZFUlNJT05fTUFKT1I8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1ZFUlNJT05fTUFKT1IgKDApCis8L3ByZT4KKzxwPgorVGhlIG1ham9yIHZlcnNpb24gb2YgR1N0cmVhbWVyIGF0IGNvbXBpbGUgdGltZToKKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVZFUlNJT04tTUlOT1I6Q0FQUyI+PC9hPjxoMz5HU1RfVkVSU0lPTl9NSU5PUjwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVkVSU0lPTl9NSU5PUiAoMTEpCis8L3ByZT4KKzxwPgorVGhlIG1pbm9yIHZlcnNpb24gb2YgR1N0cmVhbWVyIGF0IGNvbXBpbGUgdGltZToKKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVZFUlNJT04tTUlDUk86Q0FQUyI+PC9hPjxoMz5HU1RfVkVSU0lPTl9NSUNSTzwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVkVSU0lPTl9NSUNSTyAoMSkKKzwvcHJlPgorPHA+CitUaGUgbWljcm8gdmVyc2lvbiBvZiBHU3RyZWFtZXIgYXQgY29tcGlsZSB0aW1lOgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtVkVSU0lPTi1OQU5POkNBUFMiPjwvYT48aDM+R1NUX1ZFUlNJT05fTkFOTzwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVkVSU0lPTl9OQU5PICgwKQorPC9wcmU+Cis8cD4KK1RoZSBuYW5vIHZlcnNpb24gb2YgR1N0cmVhbWVyIGF0IGNvbXBpbGUgdGltZToKK0FjdHVhbCByZWxlYXNlcyBoYXZlIDAsIEdJVCB2ZXJzaW9ucyBoYXZlIDEsIHByZXJlbGVhc2UgdmVyc2lvbnMgaGF2ZSAyLS4uLgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQ0hFQ0stVkVSU0lPTjpDQVBTIj48L2E+PGgzPkdTVF9DSEVDS19WRVJTSU9OKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX0NIRUNLX1ZFUlNJT04obWFqb3IsbWlub3IsbWljcm8pPC9wcmU+Cis8cD4KK0NoZWNrIHdoZXRoZXIgYSBHU3RyZWFtZXIgdmVyc2lvbiBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4KK21ham9yLm1pbm9yLm1pY3JvIGlzIHByZXNlbnQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWFqb3I8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBudW1iZXIgaW5kaWNhdGluZyB0aGUgbWFqb3IgdmVyc2lvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWlub3I8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBudW1iZXIgaW5kaWNhdGluZyB0aGUgbWlub3IgdmVyc2lvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWljcm88L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBudW1iZXIgaW5kaWNhdGluZyB0aGUgbWljcm8gdmVyc2lvbjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTg8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItZ3N0Y29uZmlnLmh0bWwgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1nc3Rjb25maWcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWIwMGNlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItZ3N0Y29uZmlnLmh0bWwKQEAgLTAsMCArMSwxNDMgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5nc3Rjb25maWc8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RDbG9jay5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNnc3RyZWFtZXItZ3N0Y29uZmlnLnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLWdzdGNvbmZpZy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItZ3N0Y29uZmlnIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLWdzdGNvbmZpZy50b3Bfb2ZfcGFnZSI+PC9hPmdzdGNvbmZpZzwvc3Bhbj48L2gyPgorPHA+Z3N0Y29uZmlnIOKAlCBCdWlsZCBjb25maWd1cmF0aW9uIG9wdGlvbnM8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItZ3N0Y29uZmlnLnN5bm9wc2lzIj48L2E+PGgyPlN5bm9wc2lzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7CisKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1nc3Rjb25maWcuaHRtbCNHU1QtRElTQUJMRS1HU1QtREVCVUc6Q0FQUyIgdGl0bGU9IkdTVF9ESVNBQkxFX0dTVF9ERUJVRyI+R1NUX0RJU0FCTEVfR1NUX0RFQlVHPC9hPgorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWdzdGNvbmZpZy5odG1sI0dTVC1ESVNBQkxFLVBBUlNFOkNBUFMiIHRpdGxlPSJHU1RfRElTQUJMRV9QQVJTRSI+R1NUX0RJU0FCTEVfUEFSU0U8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItZ3N0Y29uZmlnLmh0bWwjR1NULURJU0FCTEUtVFJBQ0U6Q0FQUyIgdGl0bGU9IkdTVF9ESVNBQkxFX1RSQUNFIj5HU1RfRElTQUJMRV9UUkFDRTwvYT4KKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1nc3Rjb25maWcuaHRtbCNHU1QtRElTQUJMRS1BTExPQy1UUkFDRTpDQVBTIiB0aXRsZT0iR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0UiPkdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFPC9hPgorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWdzdGNvbmZpZy5odG1sI0dTVC1ESVNBQkxFLVJFR0lTVFJZOkNBUFMiIHRpdGxlPSJHU1RfRElTQUJMRV9SRUdJU1RSWSI+R1NUX0RJU0FCTEVfUkVHSVNUUlk8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItZ3N0Y29uZmlnLmh0bWwjR1NULURJU0FCTEUtUExVR0lOOkNBUFMiIHRpdGxlPSJHU1RfRElTQUJMRV9QTFVHSU4iPkdTVF9ESVNBQkxFX1BMVUdJTjwvYT4KKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItZ3N0Y29uZmlnLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPgorVGhpcyBkZXNjcmliZXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgR1N0cmVhbWVyLiBXaGVuIGJ1aWxkaW5nCitHU3RyZWFtZXIgdGhlcmUgYXJlIGEgbG90IG9mIHBhcnRzIChrbm93biBpbnRlcm5hbGx5IGFzICJzdWJzeXN0ZW1zIiApIHRoYXQKK2NhbiBiZSBkaXNhYmxlZCBmb3IgdmFyaW91cyByZWFzb25zLiBUaGUgbW9zdCBjb21tb24gcmVhc29ucyBhcmUgc3BlZWQgYW5kCitzaXplLCB3aGljaCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBHU3RyZWFtZXIgaXMgZGVzaWduZWQgdG8gcnVuIG9uIGVtYmVkZGVkCitzeXN0ZW1zLgorPC9wPgorPHA+CitJZiBhIHN1YnN5c3RlbSBpcyBkaXNhYmxlZCwgbW9zdCBvZiB0aGlzIGNoYW5nZXMgYXJlIGRvbmUgaW4gYW4gQVBJCitjb21wYXRpYmxlIHdheSwgc28geW91IGRvbid0IG5lZWQgdG8gYWRhcHQgeW91ciBjb2RlIGluIG1vc3QgY2FzZXMuIEl0IGlzCituZXZlciBkb25lIGluIGFuIEFCSSBjb21wYXRpYmxlIHdheSB0aG91Z2guIFNvIGlmIHlvdSB3YW50IHRvIGRpc2FibGUgYQorc3V5YnN5c3RlbSwgeW91IGhhdmUgdG8gcmVidWlsZCBhbGwgcHJvZ3JhbXMgZGVwZW5kaW5nIG9uIEdTdHJlYW1lciwgdG9vLgorPC9wPgorPHA+CitJZiBhIHN1YnN5c3RlbSBpcyBkaXNhYmxlZCBpbiBHU3RyZWFtZXIsIGEgdmFsdWUgaXMgZGVmaW5lZCBpbgorJmx0O2dzdC9nc3QuaCZndDsuIFlvdSBjYW4gY2hlY2sgdGhpcyBpZiB5b3UgZG8gc3Vic3lzdGVtLXNwZWNpZmljIHN0dWZmLgorPC9wPgorPGRpdiBjbGFzcz0iZXhhbXBsZSI+Cis8YSBuYW1lPSJleGFtcGxlLWdzdGNvbmZpZyI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZcKgNS7CoERvaW5nIHN1YnN5c3RlbSBzcGVjaWZpYyB0aGluZ3M8L2I+PC9wPgorPGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgorI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKy8vIGRvIHN0dWZmIHNwZWNpZmljIHRvIHRoZSBkZWJ1Z2dpbmcgc3Vic3lzdGVtCisjZW5kaWYgLy8gR1NUX0RJU0FCTEVfR1NUX0RFQlVHCis8L3ByZT48L2Rpdj4KKzwvZGl2PgorPHA+PGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj4KKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLWdzdGNvbmZpZy5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULURJU0FCTEUtR1NULURFQlVHOkNBUFMiPjwvYT48aDM+R1NUX0RJU0FCTEVfR1NUX0RFQlVHPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9ESVNBQkxFX0dTVF9ERUJVRyAxCis8L3ByZT4KKzxwPgorQ29uZmlndXJlcyB0aGUgaW5jbHVzaW9uIG9mIHRoZSBkZWJ1Z2dpbmcgc3Vic3lzdGVtCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1ESVNBQkxFLVBBUlNFOkNBUFMiPjwvYT48aDM+R1NUX0RJU0FCTEVfUEFSU0U8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0RJU0FCTEVfUEFSU0UgMQorPC9wcmU+Cis8cD4KK0NvbmZpZ3VyZXMgdGhlIGluY2x1c2lvbiBvZiB0aGUgZ3N0LWxhdWNoIHBhcnNlcgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtRElTQUJMRS1UUkFDRTpDQVBTIj48L2E+PGgzPkdTVF9ESVNBQkxFX1RSQUNFPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9ESVNBQkxFX1RSQUNFIDEKKzwvcHJlPgorPHA+CitDb25maWd1cmVzIHRoZSBpbmNsdXNpb24gb2YgYSByZXNvdXJjZSB0cmFjaW5nIGZhY2lsbGl0eQorKHNlZW1zIHRvIGJlIHVudXNlZCkKKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULURJU0FCTEUtQUxMT0MtVFJBQ0U6Q0FQUyI+PC9hPjxoMz5HU1RfRElTQUJMRV9BTExPQ19UUkFDRTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRElTQUJMRV9BTExPQ19UUkFDRSAxCis8L3ByZT4KKzxwPgorQ29uZmlndXJlcyB0aGUgdXNlIG9mIGEgbWVtb3J5IHRyYWNlciBiYXNlZCBvbiB0aGUgcmVzb3VyY2UgdHJhY2VyCitpZiBUUkFDRSBpcyBkaXNhYmxlZCwgQUxMT0NfVFJBQ0UgaXMgZGlzYWJsZWQgYXMgd2VsbAorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtRElTQUJMRS1SRUdJU1RSWTpDQVBTIj48L2E+PGgzPkdTVF9ESVNBQkxFX1JFR0lTVFJZPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9ESVNBQkxFX1JFR0lTVFJZIDEKKzwvcHJlPgorPHA+CitDb25maWd1cmVzIHRoZSB1c2Ugb2YgdGhlIHBsdWdpbiByZWdpc3RyeS4KK0lmIG9uZSBkaXNhYmxlcyB0aGlzLCByZXF1aXJlZCBwbHVnaW5zIG5lZWQgdG8gYmUgbG9hZGVkIGFuZCByZWdpc3RlcmVkCittYW51YWxseQorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtRElTQUJMRS1QTFVHSU46Q0FQUyI+PC9hPjxoMz5HU1RfRElTQUJMRV9QTFVHSU48L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0RJU0FCTEVfUExVR0lOIDEKKzwvcHJlPgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLWhpZXJhcmNoeS5odG1sIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItaGllcmFyY2h5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNiZDBhMQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLWhpZXJhcmNoeS5odG1sCkBAIC0wLDAgKzEsNTkgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5PYmplY3QgSGllcmFyY2h5PC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sIiB0aXRsZT0iR3N0VHJhY2UiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJhcGktaW5kZXgtZnVsbC5odG1sIiB0aXRsZT0iQVBJIEluZGV4Ij4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj48dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+wqA8L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImFwaS1pbmRleC1mdWxsLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj48L3RhYmxlPgorPGRpdiBjbGFzcz0iY2hhcHRlciI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1oaWVyYXJjaHkiPjwvYT5PYmplY3QgSGllcmFyY2h5PC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KKzxwcmUgY2xhc3M9InNjcmVlbiI+CisgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPkdPYmplY3Q8L2E+CisgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+CisgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KKyAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KKyAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjR3N0UHJveHlQYWQiPkdzdFByb3h5UGFkPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RHaG9zdFBhZCI+R3N0R2hvc3RQYWQ8L2E+CisgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+R3N0UGFkVGVtcGxhdGU8L2E+CisgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPkdzdFBsdWdpbkZlYXR1cmU8L2E+CisgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPkdzdEVsZW1lbnRGYWN0b3J5PC9hPgorICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHlwZUZpbmRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RUeXBlRmluZEZhY3RvcnkiPkdzdFR5cGVGaW5kRmFjdG9yeTwvYT4KKyAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEluZGV4RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0SW5kZXhGYWN0b3J5Ij5Hc3RJbmRleEZhY3Rvcnk8L2E+CisgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+CisgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+R3N0QmluPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+R3N0UGlwZWxpbmU8L2E+CisgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj5Hc3RCdXM8L2E+CisgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPkdzdFRhc2s8L2E+CisgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwiIHRpdGxlPSJHc3RUYXNrUG9vbCI+R3N0VGFza1Bvb2w8L2E+CisgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+CisgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTeXN0ZW1DbG9jay5odG1sIiB0aXRsZT0iR3N0U3lzdGVtQ2xvY2siPkdzdFN5c3RlbUNsb2NrPC9hPgorICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgorICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPkdzdFJlZ2lzdHJ5PC9hPgorICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbmRleC5odG1sIiB0aXRsZT0iR3N0SW5kZXgiPkdzdEluZGV4PC9hPgorICAgIEdJbnRlcmZhY2UKKyAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCIgdGl0bGU9IkdzdENoaWxkUHJveHkiPkdzdENoaWxkUHJveHk8L2E+CisgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSUhhbmRsZXIiPkdzdFVSSUhhbmRsZXI8L2E+CisgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+R3N0UHJlc2V0PC9hPgorICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPkdzdFRhZ1NldHRlcjwvYT4KKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItc3VwcG9ydC5odG1sIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItc3VwcG9ydC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxN2Q5OGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1zdXBwb3J0Lmh0bWwKQEAgLTAsMCArMSw0MiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdTdHJlYW1lciBDb3JlIFN1cHBvcnQ8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZlcnNpb24uaHRtbCIgdGl0bGU9IkdzdFZlcnNpb24iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1Hc3RWZXJzaW9uLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+wqA8L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj48L3RhYmxlPgorPGRpdiBjbGFzcz0iY2hhcHRlciI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1zdXBwb3J0Ij48L2E+R1N0cmVhbWVyIENvcmUgU3VwcG9ydDwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Cis8ZGl2IGNsYXNzPSJ0b2MiPjxkbD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIj5Hc3RJbmZvPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBEZWJ1Z2dpbmcgYW5kIGxvZ2dpbmcgZmFjaWxpdGllczwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwiPkdzdFRyYWNlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBUcmFjaW5nIGZ1bmN0aW9uYWxpdHk8L3NwYW4+Cis8L2R0PgorPC9kbD48L2Rpdj4KKzxwPgorICAgICAgVGhlc2VzIG1vZHVsZXMgc3VwcG9ydCB0aGUgZ3N0cmVhbWVyIGNvcmUgYW5kIHBsdWdpbiBkZXZlbG9wbWVudC4KKyAgICAgIEFwcGxpY2F0aW9uIGRldmVsb3BlcnMgd2lsbCByYXJlbHkgbmVlZCB0byBrbm93IGFib3V0IGl0LgorICAgIDwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLmRldmhlbHAyIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXIuZGV2aGVscDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM4YTMyNgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLmRldmhlbHAyCkBAIC0wLDAgKzEsMjI3MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiIj4KKzxib29rIHhtbG5zPSJodHRwOi8vd3d3LmRldmhlbHAubmV0L2Jvb2siIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiIGxpbms9ImluZGV4Lmh0bWwiIGF1dGhvcj0iIiBuYW1lPSJnc3RyZWFtZXIiIHZlcnNpb249IjIiIGxhbmd1YWdlPSJjIj4KKyAgPGNoYXB0ZXJzPgorICAgIDxzdWIgbmFtZT0iR1N0cmVhbWVyIE92ZXJ2aWV3IiBsaW5rPSJnc3RyZWFtZXIuaHRtbCI+CisgICAgICA8c3ViIG5hbWU9IkJ1aWxkaW5nIEdTdHJlYW1lciBhbmQgR1N0cmVhbWVyIEFwcGxpY2F0aW9ucyIgbGluaz0iZ3N0LWJ1aWxkaW5nLmh0bWwiLz4KKyAgICAgIDxzdWIgbmFtZT0iUnVubmluZyBHU3RyZWFtZXIgQXBwbGljYXRpb25zIiBsaW5rPSJnc3QtcnVubmluZy5odG1sIi8+CisgICAgPC9zdWI+CisgICAgPHN1YiBuYW1lPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5IiBsaW5rPSJsaWJnc3RyZWFtZXIuaHRtbCI+CisgICAgICA8c3ViIG5hbWU9IkdzdCIgbGluaz0iZ3N0cmVhbWVyLUdzdC5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9IkdzdEF0b21pY1F1ZXVlIiBsaW5rPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCIvPgorICAgICAgPHN1YiBuYW1lPSJHc3RCaW4iIGxpbms9IkdzdEJpbi5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9IkdzdEJ1ZmZlciIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9IkdzdEJ1ZmZlckxpc3QiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwiLz4KKyAgICAgIDxzdWIgbmFtZT0iR3N0QnVmZmVyUG9vbCIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCIvPgorICAgICAgPHN1YiBuYW1lPSJHc3RCdXMiIGxpbms9IkdzdEJ1cy5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9IkdzdENhcHMiIGxpbms9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwiLz4KKyAgICAgIDxzdWIgbmFtZT0iR3N0Q2hpbGRQcm94eSIgbGluaz0iR3N0Q2hpbGRQcm94eS5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9IkdzdENsb2NrIiBsaW5rPSJHc3RDbG9jay5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9ImdzdGNvbmZpZyIgbGluaz0iZ3N0cmVhbWVyLWdzdGNvbmZpZy5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9IkdzdERhdGVUaW1lIiBsaW5rPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCIvPgorICAgICAgPHN1YiBuYW1lPSJHc3RFbGVtZW50IiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwiLz4KKyAgICAgIDxzdWIgbmFtZT0iR3N0RWxlbWVudEZhY3RvcnkiIGxpbms9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiLz4KKyAgICAgIDxzdWIgbmFtZT0iR3N0R0Vycm9yIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwiLz4KKyAgICAgIDxzdWIgbmFtZT0iR3N0RXZlbnQiIGxpbms9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9IkdzdEZpbHRlciIgbGluaz0iZ3N0cmVhbWVyLUdzdEZpbHRlci5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9IkdzdEZvcm1hdCIgbGluaz0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9IkdzdEdob3N0UGFkIiBsaW5rPSJHc3RHaG9zdFBhZC5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9IkdzdEluZGV4IiBsaW5rPSJHc3RJbmRleC5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9IkdzdEluZGV4RmFjdG9yeSIgbGluaz0iR3N0SW5kZXhGYWN0b3J5Lmh0bWwiLz4KKyAgICAgIDxzdWIgbmFtZT0iR3N0SXRlcmF0b3IiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9IkdzdE1lbW9yeSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9IkdzdE1lc3NhZ2UiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiLz4KKyAgICAgIDxzdWIgbmFtZT0iR3N0TWV0YSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCIvPgorICAgICAgPHN1YiBuYW1lPSJHc3RNaW5pT2JqZWN0IiBsaW5rPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9IkdzdE9iamVjdCIgbGluaz0iR3N0T2JqZWN0Lmh0bWwiLz4KKyAgICAgIDxzdWIgbmFtZT0iR3N0UGFkIiBsaW5rPSJHc3RQYWQuaHRtbCIvPgorICAgICAgPHN1YiBuYW1lPSJHc3RQYWRUZW1wbGF0ZSIgbGluaz0iR3N0UGFkVGVtcGxhdGUuaHRtbCIvPgorICAgICAgPHN1YiBuYW1lPSJHc3RQYXJhbVNwZWMiIGxpbms9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCIvPgorICAgICAgPHN1YiBuYW1lPSJHc3RQYXJzZSIgbGluaz0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwiLz4KKyAgICAgIDxzdWIgbmFtZT0iR3N0UGlwZWxpbmUiIGxpbms9IkdzdFBpcGVsaW5lLmh0bWwiLz4KKyAgICAgIDxzdWIgbmFtZT0iR3N0UGx1Z2luIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCIvPgorICAgICAgPHN1YiBuYW1lPSJHc3RQbHVnaW5GZWF0dXJlIiBsaW5rPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiLz4KKyAgICAgIDxzdWIgbmFtZT0iR3N0UG9sbCIgbGluaz0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCIvPgorICAgICAgPHN1YiBuYW1lPSJHc3RQcmVzZXQiIGxpbms9IkdzdFByZXNldC5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9IkdzdFF1ZXJ5IiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCIvPgorICAgICAgPHN1YiBuYW1lPSJHc3RSZWdpc3RyeSIgbGluaz0iR3N0UmVnaXN0cnkuaHRtbCIvPgorICAgICAgPHN1YiBuYW1lPSJHc3RTZWdtZW50IiBsaW5rPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9IkdzdFN0cnVjdHVyZSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9IkdzdFN5c3RlbUNsb2NrIiBsaW5rPSJHc3RTeXN0ZW1DbG9jay5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9IkdzdFRhZ0xpc3QiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiLz4KKyAgICAgIDxzdWIgbmFtZT0iR3N0VGFnU2V0dGVyIiBsaW5rPSJHc3RUYWdTZXR0ZXIuaHRtbCIvPgorICAgICAgPHN1YiBuYW1lPSJHc3RUYXNrIiBsaW5rPSJHc3RUYXNrLmh0bWwiLz4KKyAgICAgIDxzdWIgbmFtZT0iR3N0VGFza1Bvb2wiIGxpbms9IkdzdFRhc2tQb29sLmh0bWwiLz4KKyAgICAgIDxzdWIgbmFtZT0iR3N0VHlwZUZpbmQiIGxpbms9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9IkdzdFR5cGVGaW5kRmFjdG9yeSIgbGluaz0iR3N0VHlwZUZpbmRGYWN0b3J5Lmh0bWwiLz4KKyAgICAgIDxzdWIgbmFtZT0iR3N0VXJpSGFuZGxlciIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCIvPgorICAgICAgPHN1YiBuYW1lPSJHc3RVdGlscyIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiLz4KKyAgICAgIDxzdWIgbmFtZT0iR3N0VmFsdWUiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9IkdzdFZlcnNpb24iIGxpbms9ImdzdHJlYW1lci1Hc3RWZXJzaW9uLmh0bWwiLz4KKyAgICA8L3N1Yj4KKyAgICA8c3ViIG5hbWU9IkdTdHJlYW1lciBDb3JlIFN1cHBvcnQiIGxpbms9ImdzdHJlYW1lci1zdXBwb3J0Lmh0bWwiPgorICAgICAgPHN1YiBuYW1lPSJHc3RJbmZvIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9IkdzdFRyYWNlIiBsaW5rPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCIvPgorICAgIDwvc3ViPgorICAgIDxzdWIgbmFtZT0iT2JqZWN0IEhpZXJhcmNoeSIgbGluaz0iZ3N0cmVhbWVyLWhpZXJhcmNoeS5odG1sIi8+CisgICAgPHN1YiBuYW1lPSJBUEkgSW5kZXgiIGxpbms9ImFwaS1pbmRleC1mdWxsLmh0bWwiLz4KKyAgICA8c3ViIG5hbWU9IkluZGV4IG9mIGRlcHJlY2F0ZWQgQVBJIiBsaW5rPSJhcGktaW5kZXgtZGVwcmVjYXRlZC5odG1sIi8+CisgICAgPHN1YiBuYW1lPSJBbm5vdGF0aW9uIEdsb3NzYXJ5IiBsaW5rPSJhbm5vdGF0aW9uLWdsb3NzYXJ5Lmh0bWwiLz4KKyAgPC9jaGFwdGVycz4KKyAgPGZ1bmN0aW9ucz4KKyAgICA8a2V5d29yZCB0eXBlPSIiIG5hbWU9IkVudmlyb25tZW50IHZhcmlhYmxlcyIgbGluaz0iZ3N0LXJ1bm5pbmcuaHRtbCNpZDQ0NTkxOCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaW5pdCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1pbml0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9pbml0X2NoZWNrICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LWluaXQtY2hlY2siLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1pbml0LWdldC1vcHRpb24tZ3JvdXAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2lzX2luaXRpYWxpemVkICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LWlzLWluaXRpYWxpemVkIiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGVpbml0ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LWRlaW5pdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmVyc2lvbiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC12ZXJzaW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92ZXJzaW9uX3N0cmluZyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC12ZXJzaW9uLXN0cmluZyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc2VndHJhcF9pc19lbmFibGVkICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LXNlZ3RyYXAtaXMtZW5hYmxlZCIgc2luY2U9IjAuMTAuMTAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3NlZ3RyYXBfc2V0X2VuYWJsZWQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3Qtc2VndHJhcC1zZXQtZW5hYmxlZCIgc2luY2U9IjAuMTAuMTAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3JlZ2lzdHJ5X2ZvcmtfaXNfZW5hYmxlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1yZWdpc3RyeS1mb3JrLWlzLWVuYWJsZWQiIHNpbmNlPSIwLjEwLjEwIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9yZWdpc3RyeV9mb3JrX3NldF9lbmFibGVkICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWZvcmstc2V0LWVuYWJsZWQiIHNpbmNlPSIwLjEwLjEwIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91cGRhdGVfcmVnaXN0cnkgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtdXBkYXRlLXJlZ2lzdHJ5IiBzaW5jZT0iMC4xMC4xMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0iR3N0QXRvbWljUXVldWUiIGxpbms9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI0dzdEF0b21pY1F1ZXVlIiBzaW5jZT0iMC4xMC4zMyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYXRvbWljX3F1ZXVlX25ldyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjZ3N0LWF0b21pYy1xdWV1ZS1uZXciIHNpbmNlPSIwLjEwLjMzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9hdG9taWNfcXVldWVfcmVmICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNnc3QtYXRvbWljLXF1ZXVlLXJlZiIgc2luY2U9IjAuMTAuMzMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2F0b21pY19xdWV1ZV91bnJlZiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjZ3N0LWF0b21pYy1xdWV1ZS11bnJlZiIgc2luY2U9IjAuMTAuMzMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2F0b21pY19xdWV1ZV9wdXNoICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNnc3QtYXRvbWljLXF1ZXVlLXB1c2giIHNpbmNlPSIwLjEwLjMzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9hdG9taWNfcXVldWVfcGVlayAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjZ3N0LWF0b21pYy1xdWV1ZS1wZWVrIiBzaW5jZT0iMC4xMC4zMyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYXRvbWljX3F1ZXVlX3BvcCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjZ3N0LWF0b21pYy1xdWV1ZS1wb3AiIHNpbmNlPSIwLjEwLjMzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9hdG9taWNfcXVldWVfbGVuZ3RoICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNnc3QtYXRvbWljLXF1ZXVlLWxlbmd0aCIgc2luY2U9IjAuMTAuMzMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSIiIG5hbWU9Ik5vdGVzIiBsaW5rPSJHc3RCaW4uaHRtbCNpZDQ3Mjc0OCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEJpbiIgbGluaz0iR3N0QmluLmh0bWwjR3N0QmluLXN0cnVjdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEJpbkNsYXNzIiBsaW5rPSJHc3RCaW4uaHRtbCNHc3RCaW5DbGFzcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmluX25ldyAoKSIgbGluaz0iR3N0QmluLmh0bWwjZ3N0LWJpbi1uZXciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jpbl9hZGQgKCkiIGxpbms9IkdzdEJpbi5odG1sI2dzdC1iaW4tYWRkIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iaW5fcmVtb3ZlICgpIiBsaW5rPSJHc3RCaW4uaHRtbCNnc3QtYmluLXJlbW92ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmluX2dldF9ieV9uYW1lICgpIiBsaW5rPSJHc3RCaW4uaHRtbCNnc3QtYmluLWdldC1ieS1uYW1lIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iaW5fZ2V0X2J5X25hbWVfcmVjdXJzZV91cCAoKSIgbGluaz0iR3N0QmluLmh0bWwjZ3N0LWJpbi1nZXQtYnktbmFtZS1yZWN1cnNlLXVwIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iaW5fZ2V0X2J5X2ludGVyZmFjZSAoKSIgbGluaz0iR3N0QmluLmh0bWwjZ3N0LWJpbi1nZXQtYnktaW50ZXJmYWNlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iaW5faXRlcmF0ZV9lbGVtZW50cyAoKSIgbGluaz0iR3N0QmluLmh0bWwjZ3N0LWJpbi1pdGVyYXRlLWVsZW1lbnRzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iaW5faXRlcmF0ZV9yZWN1cnNlICgpIiBsaW5rPSJHc3RCaW4uaHRtbCNnc3QtYmluLWl0ZXJhdGUtcmVjdXJzZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmluX2l0ZXJhdGVfc2lua3MgKCkiIGxpbms9IkdzdEJpbi5odG1sI2dzdC1iaW4taXRlcmF0ZS1zaW5rcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmluX2l0ZXJhdGVfc29ydGVkICgpIiBsaW5rPSJHc3RCaW4uaHRtbCNnc3QtYmluLWl0ZXJhdGUtc29ydGVkIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iaW5faXRlcmF0ZV9zb3VyY2VzICgpIiBsaW5rPSJHc3RCaW4uaHRtbCNnc3QtYmluLWl0ZXJhdGUtc291cmNlcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmluX2l0ZXJhdGVfYWxsX2J5X2ludGVyZmFjZSAoKSIgbGluaz0iR3N0QmluLmh0bWwjZ3N0LWJpbi1pdGVyYXRlLWFsbC1ieS1pbnRlcmZhY2UiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jpbl9yZWNhbGN1bGF0ZV9sYXRlbmN5ICgpIiBsaW5rPSJHc3RCaW4uaHRtbCNnc3QtYmluLXJlY2FsY3VsYXRlLWxhdGVuY3kiIHNpbmNlPSIwLjEwLjIyLiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmluX2FkZF9tYW55ICgpIiBsaW5rPSJHc3RCaW4uaHRtbCNnc3QtYmluLWFkZC1tYW55Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iaW5fcmVtb3ZlX21hbnkgKCkiIGxpbms9IkdzdEJpbi5odG1sI2dzdC1iaW4tcmVtb3ZlLW1hbnkiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jpbl9maW5kX3VubGlua2VkX3BhZCAoKSIgbGluaz0iR3N0QmluLmh0bWwjZ3N0LWJpbi1maW5kLXVubGlua2VkLXBhZCIgc2luY2U9IjAuMTAuMjAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdEJpbkZsYWdzIiBsaW5rPSJHc3RCaW4uaHRtbCNHc3RCaW5GbGFncyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQklOX0NISUxEUkVOKCkiIGxpbms9IkdzdEJpbi5odG1sI0dTVC1CSU4tQ0hJTERSRU46Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQklOX0NISUxEUkVOX0NPT0tJRSgpIiBsaW5rPSJHc3RCaW4uaHRtbCNHU1QtQklOLUNISUxEUkVOLUNPT0tJRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CSU5fTlVNQ0hJTERSRU4oKSIgbGluaz0iR3N0QmluLmh0bWwjR1NULUJJTi1OVU1DSElMRFJFTjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDthc3luYy1oYW5kbGluZyZxdW90OyBwcm9wZXJ0eSIgbGluaz0iR3N0QmluLmh0bWwjR3N0QmluLS1hc3luYy1oYW5kbGluZyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7bWVzc2FnZS1mb3J3YXJkJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJHc3RCaW4uaHRtbCNHc3RCaW4tLW1lc3NhZ2UtZm9yd2FyZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlICZxdW90O2RvLWxhdGVuY3kmcXVvdDsgc2lnbmFsIiBsaW5rPSJHc3RCaW4uaHRtbCNHc3RCaW4tZG8tbGF0ZW5jeSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlICZxdW90O2VsZW1lbnQtYWRkZWQmcXVvdDsgc2lnbmFsIiBsaW5rPSJHc3RCaW4uaHRtbCNHc3RCaW4tZWxlbWVudC1hZGRlZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlICZxdW90O2VsZW1lbnQtcmVtb3ZlZCZxdW90OyBzaWduYWwiIGxpbms9IkdzdEJpbi5odG1sI0dzdEJpbi1lbGVtZW50LXJlbW92ZWQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RCdWZmZXIiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdEJ1ZmZlckZsYWdzIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyRmxhZ3MiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdEJ1ZmZlckNvcHlGbGFncyIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlckNvcHlGbGFncyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQlVGRkVSX0ZMQUdTKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUdTOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHLUlTLVNFVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CVUZGRVJfRkxBR19TRVQoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItRkxBRy1TRVQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQlVGRkVSX0ZMQUdfVU5TRVQoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItRkxBRy1VTlNFVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9NRVRBX1RJTUlOR19JTkZPIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULU1FVEEtVElNSU5HLUlORk86Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdE1ldGFUaW1pbmciIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RNZXRhVGltaW5nIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CVUZGRVJfVElNRVNUQU1QKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLVRJTUVTVEFNUDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CVUZGRVJfRFVSQVRJT04oKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItRFVSQVRJT046Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQlVGRkVSX09GRlNFVCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1PRkZTRVQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQlVGRkVSX09GRlNFVF9FTkQoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItT0ZGU0VULUVORDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CVUZGRVJfT0ZGU0VUX05PTkUiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLU9GRlNFVC1OT05FOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JVRkZFUl9EVVJBVElPTl9JU19WQUxJRCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1EVVJBVElPTi1JUy1WQUxJRDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CVUZGRVJfVElNRVNUQU1QX0lTX1ZBTElEKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLVRJTUVTVEFNUC1JUy1WQUxJRDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CVUZGRVJfT0ZGU0VUX0lTX1ZBTElEKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLU9GRlNFVC1JUy1WQUxJRDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CVUZGRVJfT0ZGU0VUX0VORF9JU19WQUxJRCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1PRkZTRVQtRU5ELUlTLVZBTElEOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JVRkZFUl9JU19ESVNDT05UKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUlTLURJU0NPTlQ6Q0FQUyIgc2luY2U9IjAuMTAuOSIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQlVGRkVSX1RSQUNFX05BTUUiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLVRSQUNFLU5BTUU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX25ldyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbmV3Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYygpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1uZXctYW5kLWFsbG9jIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfbmV3X2FsbG9jYXRlICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1uZXctYWxsb2NhdGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbmV3LXdyYXBwZWQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9mdWxsICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1uZXctd3JhcHBlZC1mdWxsIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfcmVmICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZWYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl91bnJlZiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItdW5yZWYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9nZXRfc2l6ZXMgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWdldC1zaXplcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfYnVmZmVyX2dldF9zaXplKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWdldC1zaXplIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfcmVzaXplICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZXNpemUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2J1ZmZlcl9zZXRfc2l6ZSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1zZXQtc2l6ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX25fbWVtb3J5ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1uLW1lbW9yeSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX3Rha2VfbWVtb3J5ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci10YWtlLW1lbW9yeSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX3BlZWtfbWVtb3J5ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1wZWVrLW1lbW9yeSIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfYnVmZmVyX3JlbW92ZV9tZW1vcnkoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItcmVtb3ZlLW1lbW9yeSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX3JlbW92ZV9tZW1vcnlfcmFuZ2UgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXJlbW92ZS1tZW1vcnktcmFuZ2UiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9qb2luICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1qb2luIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfbWVyZ2UgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLW1lcmdlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfbWFwICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1tYXAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl91bm1hcCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItdW5tYXAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9tZW1jbXAgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLW1lbWNtcCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX2V4dHJhY3QgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWV4dHJhY3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9maWxsICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1maWxsIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfbWVtc2V0ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1tZW1zZXQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JVRkZFUl9DT1BZX01FVEFEQVRBIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1DT1BZLU1FVEFEQVRBOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JVRkZFUl9DT1BZX0FMTCIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItQ09QWS1BTEw6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX2NvcHkgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWNvcHkiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9jb3B5X2ludG8gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWNvcHktaW50byIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX2NvcHlfcmVnaW9uICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1jb3B5LXJlZ2lvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfYnVmZmVyX2lzX3dyaXRhYmxlKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWlzLXdyaXRhYmxlIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9idWZmZXJfbWFrZV93cml0YWJsZSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1tYWtlLXdyaXRhYmxlIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9idWZmZXJfcmVwbGFjZSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZXBsYWNlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfaXNfc3Bhbl9mYXN0ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1pcy1zcGFuLWZhc3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9zcGFuICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1zcGFuIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfZ2V0X21ldGEgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWdldC1tZXRhIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfYWRkX21ldGEgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWFkZC1tZXRhIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfcmVtb3ZlX21ldGEgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXJlbW92ZS1tZXRhIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfaXRlcmF0ZV9tZXRhICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1pdGVyYXRlLW1ldGEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2J1ZmZlcl9hZGRfbWV0YV90aW1pbmcoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItYWRkLW1ldGEtdGltaW5nIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9idWZmZXJfZ2V0X21ldGFfdGltaW5nKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWdldC1tZXRhLXRpbWluZyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWV0YV90aW1pbmdfZ2V0X2luZm8gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtbWV0YS10aW1pbmctZ2V0LWluZm8iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9IkdzdEJ1ZmZlckxpc3QiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjR3N0QnVmZmVyTGlzdCIgc2luY2U9IjAuMTAuMjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9saXN0X25ldyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtbmV3IiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX2xpc3Rfc2l6ZWRfbmV3ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1zaXplZC1uZXciIHNpbmNlPSIwLjEwLjI0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfbGlzdF9sZW4gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LWxlbiIgc2luY2U9IjAuMTAuMjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2J1ZmZlcl9saXN0X2FkZCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1hZGQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9saXN0X2luc2VydCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtaW5zZXJ0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfbGlzdF9yZW1vdmUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LXJlbW92ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX2xpc3RfcmVmICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1yZWYiIHNpbmNlPSIwLjEwLjI0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfbGlzdF91bnJlZiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtdW5yZWYiIHNpbmNlPSIwLjEwLjI0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfbGlzdF9jb3B5ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1jb3B5IiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfYnVmZmVyX2xpc3RfaXNfd3JpdGFibGUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtaXMtd3JpdGFibGUiIHNpbmNlPSIwLjEwLjI0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9idWZmZXJfbGlzdF9tYWtlX3dyaXRhYmxlKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LW1ha2Utd3JpdGFibGUiIHNpbmNlPSIwLjEwLjI0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdEJ1ZmZlckxpc3RGdW5jICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3RGdW5jIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfbGlzdF9mb3JlYWNoICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1mb3JlYWNoIiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX2xpc3RfZ2V0ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1nZXQiIHNpbmNlPSIwLjEwLjI0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJHc3RCdWZmZXJQb29sIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2wiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RCdWZmZXJQb29sQ2xhc3MiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbENsYXNzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RCdWZmZXJQb29sRmxhZ3MiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbEZsYWdzIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CVUZGRVJfUE9PTF9JU19GTFVTSElORygpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI0dTVC1CVUZGRVItUE9PTC1JUy1GTFVTSElORzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJHc3RCdWZmZXJQb29sUGFyYW1zIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2xQYXJhbXMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9wb29sX25ldyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtbmV3Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfcG9vbF9jb25maWdfZ2V0ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1jb25maWctZ2V0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1jb25maWctc2V0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfcG9vbF9jb25maWdfYWRkX29wdGlvbiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtY29uZmlnLWFkZC1vcHRpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19nZXRfb3B0aW9uICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1jb25maWctZ2V0LW9wdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2hhc19vcHRpb24gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1oYXMtb3B0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfcG9vbF9jb25maWdfbl9vcHRpb25zICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1jb25maWctbi1vcHRpb25zIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfcG9vbF9nZXRfb3B0aW9ucyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtZ2V0LW9wdGlvbnMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9wb29sX2hhc19vcHRpb24gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWhhcy1vcHRpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9wb29sX2dldF9jb25maWcgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWdldC1jb25maWciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWcgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLXNldC1jb25maWciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLXNldC1hY3RpdmUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9wb29sX2lzX2FjdGl2ZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtaXMtYWN0aXZlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlciAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtYWNxdWlyZS1idWZmZXIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9wb29sX3JlbGVhc2VfYnVmZmVyICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1yZWxlYXNlLWJ1ZmZlciIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEJ1cyIgbGluaz0iR3N0QnVzLmh0bWwjR3N0QnVzLXN0cnVjdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0QnVzRmxhZ3MiIGxpbms9IkdzdEJ1cy5odG1sI0dzdEJ1c0ZsYWdzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RCdXNTeW5jUmVwbHkiIGxpbms9IkdzdEJ1cy5odG1sI0dzdEJ1c1N5bmNSZXBseSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RCdXNGdW5jICgpIiBsaW5rPSJHc3RCdXMuaHRtbCNHc3RCdXNGdW5jIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdEJ1c1N5bmNIYW5kbGVyICgpIiBsaW5rPSJHc3RCdXMuaHRtbCNHc3RCdXNTeW5jSGFuZGxlciIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVzX25ldyAoKSIgbGluaz0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1uZXciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1c19wb3N0ICgpIiBsaW5rPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXBvc3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1c19oYXZlX3BlbmRpbmcgKCkiIGxpbms9IkdzdEJ1cy5odG1sI2dzdC1idXMtaGF2ZS1wZW5kaW5nIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idXNfcGVlayAoKSIgbGluaz0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1wZWVrIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idXNfcG9wICgpIiBsaW5rPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXBvcCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVzX3BvcF9maWx0ZXJlZCAoKSIgbGluaz0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1wb3AtZmlsdGVyZWQiIHNpbmNlPSIwLjEwLjE1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idXNfdGltZWRfcG9wICgpIiBsaW5rPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXRpbWVkLXBvcCIgc2luY2U9IjAuMTAuMTIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQgKCkiIGxpbms9IkdzdEJ1cy5odG1sI2dzdC1idXMtdGltZWQtcG9wLWZpbHRlcmVkIiBzaW5jZT0iMC4xMC4xNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVzX3NldF9mbHVzaGluZyAoKSIgbGluaz0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1zZXQtZmx1c2hpbmciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyICgpIiBsaW5rPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXNldC1zeW5jLWhhbmRsZXIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1c19zeW5jX3NpZ25hbF9oYW5kbGVyICgpIiBsaW5rPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXN5bmMtc2lnbmFsLWhhbmRsZXIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1c19jcmVhdGVfd2F0Y2ggKCkiIGxpbms9IkdzdEJ1cy5odG1sI2dzdC1idXMtY3JlYXRlLXdhdGNoIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idXNfYWRkX3dhdGNoX2Z1bGwgKCkiIGxpbms9IkdzdEJ1cy5odG1sI2dzdC1idXMtYWRkLXdhdGNoLWZ1bGwiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1c19hZGRfd2F0Y2ggKCkiIGxpbms9IkdzdEJ1cy5odG1sI2dzdC1idXMtYWRkLXdhdGNoIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idXNfZGlzYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24gKCkiIGxpbms9IkdzdEJ1cy5odG1sI2dzdC1idXMtZGlzYWJsZS1zeW5jLW1lc3NhZ2UtZW1pc3Npb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1c19lbmFibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uICgpIiBsaW5rPSJHc3RCdXMuaHRtbCNnc3QtYnVzLWVuYWJsZS1zeW5jLW1lc3NhZ2UtZW1pc3Npb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1c19hc3luY19zaWduYWxfZnVuYyAoKSIgbGluaz0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1hc3luYy1zaWduYWwtZnVuYyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2ggKCkiIGxpbms9IkdzdEJ1cy5odG1sI2dzdC1idXMtYWRkLXNpZ25hbC13YXRjaCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2hfZnVsbCAoKSIgbGluaz0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1hZGQtc2lnbmFsLXdhdGNoLWZ1bGwiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNoICgpIiBsaW5rPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXJlbW92ZS1zaWduYWwtd2F0Y2giLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1c19wb2xsICgpIiBsaW5rPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXBvbGwiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O2VuYWJsZS1hc3luYyZxdW90OyBwcm9wZXJ0eSIgbGluaz0iR3N0QnVzLmh0bWwjR3N0QnVzLS1lbmFibGUtYXN5bmMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSAmcXVvdDttZXNzYWdlJnF1b3Q7IHNpZ25hbCIgbGluaz0iR3N0QnVzLmh0bWwjR3N0QnVzLW1lc3NhZ2UiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSAmcXVvdDtzeW5jLW1lc3NhZ2UmcXVvdDsgc2lnbmFsIiBsaW5rPSJHc3RCdXMuaHRtbCNHc3RCdXMtc3luYy1tZXNzYWdlIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0Q2FwcyIgbGluaz0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0U3RhdGljQ2FwcyIgbGluaz0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RTdGF0aWNDYXBzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RDYXBzSW50ZXJzZWN0TW9kZSIgbGluaz0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzSW50ZXJzZWN0TW9kZSIgc2luY2U9IjAuMTAuMzMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdENhcHNGbGFncyIgbGluaz0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzRmxhZ3MiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0NBUFNfQU5ZIiBsaW5rPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dTVC1DQVBTLUFOWTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DQVBTX05PTkUiIGxpbms9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR1NULUNBUFMtTk9ORTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DQVBTX1JFRkNPVU5UKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR1NULUNBUFMtUkVGQ09VTlQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ0FQU19SRUZDT1VOVF9WQUxVRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dTVC1DQVBTLVJFRkNPVU5ULVZBTFVFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1NUQVRJQ19DQVBTX0FOWSIgbGluaz0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHU1QtU1RBVElDLUNBUFMtQU5ZOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1NUQVRJQ19DQVBTX05PTkUiIGxpbms9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR1NULVNUQVRJQy1DQVBTLU5PTkU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ0FQU19JU19TSU1QTEUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHU1QtQ0FQUy1JUy1TSU1QTEU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfU1RBVElDX0NBUFMoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHU1QtU1RBVElDLUNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0NBUFNfRkxBR1MoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHU1QtQ0FQUy1GTEFHUzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DQVBTX0ZMQUdfSVNfU0VUKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR1NULUNBUFMtRkxBRy1JUy1TRVQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ0FQU19GTEFHX1NFVCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dTVC1DQVBTLUZMQUctU0VUOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0NBUFNfRkxBR19VTlNFVCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dTVC1DQVBTLUZMQUctVU5TRVQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19uZXdfZW1wdHkgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbmV3LWVtcHR5Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX25ld19hbnkgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbmV3LWFueSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19uZXdfc2ltcGxlICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW5ldy1zaW1wbGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfbmV3X2Z1bGwgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbmV3LWZ1bGwiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfbmV3X2Z1bGxfdmFsaXN0ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW5ldy1mdWxsLXZhbGlzdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfY2Fwc19pc193cml0YWJsZSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWlzLXdyaXRhYmxlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX2NvcHkgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtY29weSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19jb3B5X250aCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1jb3B5LW50aCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RhdGljX2NhcHNfZ2V0ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1zdGF0aWMtY2Fwcy1nZXQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0YXRpY19jYXBzX2NsZWFudXAgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LXN0YXRpYy1jYXBzLWNsZWFudXAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfYXBwZW5kICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWFwcGVuZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19tZXJnZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1tZXJnZSIgc2luY2U9IjAuMTAuMTAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1hcHBlbmQtc3RydWN0dXJlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX3JlbW92ZV9zdHJ1Y3R1cmUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtcmVtb3ZlLXN0cnVjdHVyZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19zdGVhbF9zdHJ1Y3R1cmUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtc3RlYWwtc3RydWN0dXJlIiBzaW5jZT0iMC4xMC4zMCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19tZXJnZV9zdHJ1Y3R1cmUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbWVyZ2Utc3RydWN0dXJlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX2dldF9zaXplICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWdldC1zaXplIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtZ2V0LXN0cnVjdHVyZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19zZXRfdmFsdWUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtc2V0LXZhbHVlIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19zZXRfc2ltcGxlICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXNldC1zaW1wbGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfc2V0X3NpbXBsZV92YWxpc3QgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtc2V0LXNpbXBsZS12YWxpc3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfaXNfYW55ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWlzLWFueSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19pc19lbXB0eSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1lbXB0eSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19pc19maXhlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1maXhlZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19pc19lcXVhbCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1lcXVhbCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19pc19lcXVhbF9maXhlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1lcXVhbC1maXhlZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19pc19hbHdheXNfY29tcGF0aWJsZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1hbHdheXMtY29tcGF0aWJsZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19pc19zdWJzZXQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtc3Vic2V0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX2lzX3N1YnNldF9zdHJ1Y3R1cmUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtc3Vic2V0LXN0cnVjdHVyZSIgc2luY2U9IjAuMTAuMzUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfY2FuX2ludGVyc2VjdCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1jYW4taW50ZXJzZWN0IiBzaW5jZT0iMC4xMC4yNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19pbnRlcnNlY3QgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaW50ZXJzZWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX2ludGVyc2VjdF9mdWxsICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWludGVyc2VjdC1mdWxsIiBzaW5jZT0iMC4xMC4zMyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc191bmlvbiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy11bmlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19ub3JtYWxpemUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbm9ybWFsaXplIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX2RvX3NpbXBsaWZ5ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWRvLXNpbXBsaWZ5Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9jYXBzX3JlcGxhY2UoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1yZXBsYWNlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX3RvX3N0cmluZyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy10by1zdHJpbmciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtZnJvbS1zdHJpbmciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfc3VidHJhY3QgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtc3VidHJhY3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2NhcHNfbWFrZV93cml0YWJsZSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW1ha2Utd3JpdGFibGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfcmVmICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXJlZiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc190cnVuY2F0ZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy10cnVuY2F0ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19maXhhdGUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtZml4YXRlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX3VucmVmICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXVucmVmIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJHc3RDaGlsZFByb3h5IiBsaW5rPSJHc3RDaGlsZFByb3h5Lmh0bWwjR3N0Q2hpbGRQcm94eS1zdHJ1Y3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RDaGlsZFByb3h5SW50ZXJmYWNlIiBsaW5rPSJHc3RDaGlsZFByb3h5Lmh0bWwjR3N0Q2hpbGRQcm94eUludGVyZmFjZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkcmVuX2NvdW50ICgpIiBsaW5rPSJHc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LWdldC1jaGlsZHJlbi1jb3VudCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X25hbWUgKCkiIGxpbms9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktZ2V0LWNoaWxkLWJ5LW5hbWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9pbmRleCAoKSIgbGluaz0iR3N0Q2hpbGRQcm94eS5odG1sI2dzdC1jaGlsZC1wcm94eS1nZXQtY2hpbGQtYnktaW5kZXgiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NoaWxkX3Byb3h5X2xvb2t1cCAoKSIgbGluaz0iR3N0Q2hpbGRQcm94eS5odG1sI2dzdC1jaGlsZC1wcm94eS1sb29rdXAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NoaWxkX3Byb3h5X2dldF9wcm9wZXJ0eSAoKSIgbGluaz0iR3N0Q2hpbGRQcm94eS5odG1sI2dzdC1jaGlsZC1wcm94eS1nZXQtcHJvcGVydHkiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NoaWxkX3Byb3h5X2dldF92YWxpc3QgKCkiIGxpbms9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktZ2V0LXZhbGlzdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2hpbGRfcHJveHlfZ2V0ICgpIiBsaW5rPSJHc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LWdldCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2hpbGRfcHJveHlfc2V0X3Byb3BlcnR5ICgpIiBsaW5rPSJHc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LXNldC1wcm9wZXJ0eSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2hpbGRfcHJveHlfc2V0X3ZhbGlzdCAoKSIgbGluaz0iR3N0Q2hpbGRQcm94eS5odG1sI2dzdC1jaGlsZC1wcm94eS1zZXQtdmFsaXN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jaGlsZF9wcm94eV9zZXQgKCkiIGxpbms9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktc2V0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jaGlsZF9wcm94eV9jaGlsZF9hZGRlZCAoKSIgbGluaz0iR3N0Q2hpbGRQcm94eS5odG1sI2dzdC1jaGlsZC1wcm94eS1jaGlsZC1hZGRlZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2hpbGRfcHJveHlfY2hpbGRfcmVtb3ZlZCAoKSIgbGluaz0iR3N0Q2hpbGRQcm94eS5odG1sI2dzdC1jaGlsZC1wcm94eS1jaGlsZC1yZW1vdmVkIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUgJnF1b3Q7Y2hpbGQtYWRkZWQmcXVvdDsgc2lnbmFsIiBsaW5rPSJHc3RDaGlsZFByb3h5Lmh0bWwjR3N0Q2hpbGRQcm94eS1jaGlsZC1hZGRlZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlICZxdW90O2NoaWxkLXJlbW92ZWQmcXVvdDsgc2lnbmFsIiBsaW5rPSJHc3RDaGlsZFByb3h5Lmh0bWwjR3N0Q2hpbGRQcm94eS1jaGlsZC1yZW1vdmVkIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0Q2xvY2siIGxpbms9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2stc3RydWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0Q2xvY2tDbGFzcyIgbGluaz0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0NsYXNzIi8+CisgICAgPGtleXdvcmQgdHlwZT0idHlwZWRlZiIgbmFtZT0iR3N0Q2xvY2tUaW1lIiBsaW5rPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InR5cGVkZWYiIG5hbWU9IkdzdENsb2NrVGltZURpZmYiIGxpbms9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lRGlmZiIvPgorICAgIDxrZXl3b3JkIHR5cGU9InR5cGVkZWYiIG5hbWU9IkdzdENsb2NrSUQiIGxpbms9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ0xPQ0tfVElNRV9OT05FIiBsaW5rPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1USU1FLU5PTkU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCgpIiBsaW5rPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1USU1FLUlTLVZBTElEOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1NFQ09ORCIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtU0VDT05EOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX01TRUNPTkQiIGxpbms9IkdzdENsb2NrLmh0bWwjR1NULU1TRUNPTkQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVVNFQ09ORCIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtVVNFQ09ORDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9OU0VDT05EIiBsaW5rPSJHc3RDbG9jay5odG1sI0dTVC1OU0VDT05EOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RJTUVfQVNfU0VDT05EUygpIiBsaW5rPSJHc3RDbG9jay5odG1sI0dTVC1USU1FLUFTLVNFQ09ORFM6Q0FQUyIgc2luY2U9IjAuMTAuMTYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RJTUVfQVNfTVNFQ09ORFMoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtVElNRS1BUy1NU0VDT05EUzpDQVBTIiBzaW5jZT0iMC4xMC4xNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVElNRV9BU19VU0VDT05EUygpIiBsaW5rPSJHc3RDbG9jay5odG1sI0dTVC1USU1FLUFTLVVTRUNPTkRTOkNBUFMiIHNpbmNlPSIwLjEwLjE2Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9USU1FX0FTX05TRUNPTkRTKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjR1NULVRJTUUtQVMtTlNFQ09ORFM6Q0FQUyIgc2luY2U9IjAuMTAuMTYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0NMT0NLX0RJRkYoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRElGRjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9USU1FVkFMX1RPX1RJTUUoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtVElNRVZBTC1UTy1USU1FOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RJTUVfVE9fVElNRVZBTCgpIiBsaW5rPSJHc3RDbG9jay5odG1sI0dTVC1USU1FLVRPLVRJTUVWQUw6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVElNRVNQRUNfVE9fVElNRSgpIiBsaW5rPSJHc3RDbG9jay5odG1sI0dTVC1USU1FU1BFQy1UTy1USU1FOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RJTUVfVE9fVElNRVNQRUMoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtVElNRS1UTy1USU1FU1BFQzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DTE9DS19FTlRSWV9UUkFDRV9OQU1FIiBsaW5rPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1FTlRSWS1UUkFDRS1OQU1FOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RDbG9ja0VudHJ5IiBsaW5rPSJHc3RDbG9jay5odG1sI0dzdENsb2NrRW50cnkiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0Q2xvY2tDYWxsYmFjayAoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0NhbGxiYWNrIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RDbG9ja0VudHJ5VHlwZSIgbGluaz0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0VudHJ5VHlwZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ0xPQ0tfRU5UUlkoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRU5UUlk6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ0xPQ0tfRU5UUllfQ0xPQ0soKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRU5UUlktQ0xPQ0s6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ0xPQ0tfRU5UUllfVFlQRSgpIiBsaW5rPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1FTlRSWS1UWVBFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0NMT0NLX0VOVFJZX1RJTUUoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRU5UUlktVElNRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DTE9DS19FTlRSWV9JTlRFUlZBTCgpIiBsaW5rPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1FTlRSWS1JTlRFUlZBTDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DTE9DS19FTlRSWV9TVEFUVVMoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRU5UUlktU1RBVFVTOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdENsb2NrUmV0dXJuIiBsaW5rPSJHc3RDbG9jay5odG1sI0dzdENsb2NrUmV0dXJuIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RDbG9ja0ZsYWdzIiBsaW5rPSJHc3RDbG9jay5odG1sI0dzdENsb2NrRmxhZ3MiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0NMT0NLX0ZMQUdTKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLUZMQUdTOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0NMT0NLX0JST0FEQ0FTVCgpIiBsaW5rPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1CUk9BRENBU1Q6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ0xPQ0tfQ09ORCgpIiBsaW5rPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1DT05EOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0NMT0NLX1RJTUVEX1dBSVQoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stVElNRUQtV0FJVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DTE9DS19XQUlUKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLVdBSVQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2xvY2tfYWRkX29ic2VydmF0aW9uICgpIiBsaW5rPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1hZGQtb2JzZXJ2YXRpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Nsb2NrX3NldF9tYXN0ZXIgKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLXNldC1tYXN0ZXIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Nsb2NrX2dldF9tYXN0ZXIgKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWdldC1tYXN0ZXIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Nsb2NrX3NldF9yZXNvbHV0aW9uICgpIiBsaW5rPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1zZXQtcmVzb2x1dGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2xvY2tfZ2V0X3Jlc29sdXRpb24gKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWdldC1yZXNvbHV0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jbG9ja19nZXRfdGltZSAoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stZ2V0LXRpbWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stbmV3LXNpbmdsZS1zaG90LWlkIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jbG9ja19uZXdfcGVyaW9kaWNfaWQgKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLW5ldy1wZXJpb2RpYy1pZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2xvY2tfc2luZ2xlX3Nob3RfaWRfcmVpbml0ICgpIiBsaW5rPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1zaW5nbGUtc2hvdC1pZC1yZWluaXQiIHNpbmNlPSIwLjEwLjMyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jbG9ja19wZXJpb2RpY19pZF9yZWluaXQgKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLXBlcmlvZGljLWlkLXJlaW5pdCIgc2luY2U9IjAuMTAuMzMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lICgpIiBsaW5rPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1nZXQtaW50ZXJuYWwtdGltZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2xvY2tfYWRqdXN0X3VubG9ja2VkICgpIiBsaW5rPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1hZGp1c3QtdW5sb2NrZWQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Nsb2NrX3VuYWRqdXN0X3VubG9ja2VkICgpIiBsaW5rPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay11bmFkanVzdC11bmxvY2tlZCIgc2luY2U9IjAuMTAuMTMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Nsb2NrX2dldF9jYWxpYnJhdGlvbiAoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stZ2V0LWNhbGlicmF0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jbG9ja19zZXRfY2FsaWJyYXRpb24gKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLXNldC1jYWxpYnJhdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2xvY2tfaWRfZ2V0X3RpbWUgKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLWdldC10aW1lIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jbG9ja19pZF93YWl0ICgpIiBsaW5rPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1pZC13YWl0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jbG9ja19pZF93YWl0X2FzeW5jICgpIiBsaW5rPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1pZC13YWl0LWFzeW5jIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jbG9ja19pZF93YWl0X2FzeW5jX2Z1bGwgKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLXdhaXQtYXN5bmMtZnVsbCIgc2luY2U9IjAuMTAuMzAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUgKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLXVuc2NoZWR1bGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Nsb2NrX2lkX2NvbXBhcmVfZnVuYyAoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2staWQtY29tcGFyZS1mdW5jIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jbG9ja19pZF9yZWYgKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLXJlZiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2xvY2tfaWRfdW5yZWYgKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLXVucmVmIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtzdGF0cyZxdW90OyBwcm9wZXJ0eSIgbGluaz0iR3N0Q2xvY2suaHRtbCNHc3RDbG9jay0tc3RhdHMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O3RpbWVvdXQmcXVvdDsgcHJvcGVydHkiIGxpbms9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2stLXRpbWVvdXQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O3dpbmRvdy1zaXplJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJHc3RDbG9jay5odG1sI0dzdENsb2NrLS13aW5kb3ctc2l6ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7d2luZG93LXRocmVzaG9sZCZxdW90OyBwcm9wZXJ0eSIgbGluaz0iR3N0Q2xvY2suaHRtbCNHc3RDbG9jay0td2luZG93LXRocmVzaG9sZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRElTQUJMRV9HU1RfREVCVUciIGxpbms9ImdzdHJlYW1lci1nc3Rjb25maWcuaHRtbCNHU1QtRElTQUJMRS1HU1QtREVCVUc6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRElTQUJMRV9QQVJTRSIgbGluaz0iZ3N0cmVhbWVyLWdzdGNvbmZpZy5odG1sI0dTVC1ESVNBQkxFLVBBUlNFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0RJU0FCTEVfVFJBQ0UiIGxpbms9ImdzdHJlYW1lci1nc3Rjb25maWcuaHRtbCNHU1QtRElTQUJMRS1UUkFDRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFIiBsaW5rPSJnc3RyZWFtZXItZ3N0Y29uZmlnLmh0bWwjR1NULURJU0FCTEUtQUxMT0MtVFJBQ0U6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRElTQUJMRV9SRUdJU1RSWSIgbGluaz0iZ3N0cmVhbWVyLWdzdGNvbmZpZy5odG1sI0dTVC1ESVNBQkxFLVJFR0lTVFJZOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0RJU0FCTEVfUExVR0lOIiBsaW5rPSJnc3RyZWFtZXItZ3N0Y29uZmlnLmh0bWwjR1NULURJU0FCTEUtUExVR0lOOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9IkdzdERhdGVUaW1lIiBsaW5rPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHc3REYXRlVGltZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVFlQRV9EQVRFX1RJTUUiIGxpbms9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI0dTVC1UWVBFLURBVEUtVElNRTpDQVBTIiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0ZV90aW1lX2dldF9kYXkgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtZ2V0LWRheSIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RhdGVfdGltZV9nZXRfbW9udGggKCkiIGxpbms9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtZ2V0LW1vbnRoIiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0ZV90aW1lX2dldF9ob3VyICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLWdldC1ob3VyIiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0ZV90aW1lX2dldF9taWNyb3NlY29uZCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1nZXQtbWljcm9zZWNvbmQiIHNpbmNlPSIwLjEwLjMxIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1nZXQtbWludXRlIiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0ZV90aW1lX2dldF90aW1lX3pvbmVfb2Zmc2V0ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLWdldC10aW1lLXpvbmUtb2Zmc2V0IiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0ZV90aW1lX2dldF9zZWNvbmQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtZ2V0LXNlY29uZCIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1nZXQteWVhciIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RhdGVfdGltZV9uZXcgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtbmV3IiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0ZV90aW1lX25ld19mcm9tX3VuaXhfZXBvY2hfbG9jYWxfdGltZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1uZXctZnJvbS11bml4LWVwb2NoLWxvY2FsLXRpbWUiIHNpbmNlPSIwLjEwLjMxIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF91dGMgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtbmV3LWZyb20tdW5peC1lcG9jaC11dGMiIHNpbmNlPSIwLjEwLjMxIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kYXRlX3RpbWVfbmV3X2xvY2FsX3RpbWUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtbmV3LWxvY2FsLXRpbWUiIHNpbmNlPSIwLjEwLjMxIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kYXRlX3RpbWVfbmV3X25vd19sb2NhbF90aW1lICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLW5ldy1ub3ctbG9jYWwtdGltZSIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RhdGVfdGltZV9uZXdfbm93X3V0YyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1uZXctbm93LXV0YyIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RhdGVfdGltZV9yZWYgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtcmVmIiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0ZV90aW1lX3VucmVmICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLXVucmVmIiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEVsZW1lbnQiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEVsZW1lbnRDbGFzcyIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnRDbGFzcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0RWxlbWVudEZsYWdzIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudEZsYWdzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RTdGF0ZSIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RTdGF0ZUNoYW5nZSIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlQ2hhbmdlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RTdGF0ZUNoYW5nZVJldHVybiIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlQ2hhbmdlUmV0dXJuIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9TVEFURSgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1NUQVRFX0dFVF9ORVhUKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtR0VULU5FWFQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfU1RBVEVfTkVYVCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLU5FWFQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfU1RBVEVfUEVORElORygpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVBFTkRJTkc6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfU1RBVEVfUkVUVVJOKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtUkVUVVJOOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1NUQVRFX1RBUkdFVCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVRBUkdFVDpDQVBTIiBzaW5jZT0iMC4xMC4xMyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfU1RBVEVfVFJBTlNJVElPTigpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVRSQU5TSVRJT046Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfU1RBVEVfVFJBTlNJVElPTl9DVVJSRU5UKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtVFJBTlNJVElPTi1DVVJSRU5UOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1NUQVRFX1RSQU5TSVRJT05fTkVYVCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVRSQU5TSVRJT04tTkVYVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9TVEFURV9HRVRfTE9DSygpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUdFVC1MT0NLOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1NUQVRFX0dFVF9DT05EKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtR0VULUNPTkQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRUxFTUVOVF9OQU1FKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1OQU1FOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfUEFSRU5UKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1QQVJFTlQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRUxFTUVOVF9CVVMoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULUJVUzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX0NMT0NLKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1DTE9DSzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX1BBRFMoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULVBBRFM6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRUxFTUVOVF9TVEFSVF9USU1FKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1TVEFSVC1USU1FOkNBUFMiIHNpbmNlPSIwLjEwLjI0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX0VSUk9SKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1FUlJPUjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX1dBUk5JTkcoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULVdBUk5JTkc6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRUxFTUVOVF9JTkZPKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1JTkZPOkNBUFMiIHNpbmNlPSIwLjEwLjEyIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX0lTX0xPQ0tFRF9TVEFURSgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtSVMtTE9DS0VELVNUQVRFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfTUVUQURBVEFfQVVUSE9SIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtTUVUQURBVEEtQVVUSE9SOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfTUVUQURBVEFfREVTQ1JJUFRJT04iIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1NRVRBREFUQS1ERVNDUklQVElPTjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX01FVEFEQVRBX0RPQ19VUkkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1NRVRBREFUQS1ET0MtVVJJOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfTUVUQURBVEFfSUNPTl9OQU1FIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtTUVUQURBVEEtSUNPTi1OQU1FOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfTUVUQURBVEFfS0xBU1MiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1NRVRBREFUQS1LTEFTUzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX01FVEFEQVRBX0xPTkdOQU1FIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtTUVUQURBVEEtTE9OR05BTUU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY2xhc3MtYWRkLXBhZC10ZW1wbGF0ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY2xhc3MtZ2V0LXBhZC10ZW1wbGF0ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlX2xpc3QgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jbGFzcy1nZXQtcGFkLXRlbXBsYXRlLWxpc3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfY2xhc3NfaW5zdGFsbF9zdGRfcHJvcHMgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jbGFzcy1pbnN0YWxsLXN0ZC1wcm9wcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9jbGFzc19zZXRfbWV0YWRhdGEgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jbGFzcy1zZXQtbWV0YWRhdGEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX21ldGFkYXRhICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY2xhc3MtYWRkLW1ldGFkYXRhIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2FkZF9wYWQgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1hZGQtcGFkIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2NyZWF0ZV9hbGxfcGFkcyAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNyZWF0ZS1hbGwtcGFkcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWQgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtY29tcGF0aWJsZS1wYWQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkX3RlbXBsYXRlICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWNvbXBhdGlibGUtcGFkLXRlbXBsYXRlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1yZXF1ZXN0LXBhZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1zdGF0aWMtcGFkIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X3JlcXVlc3RfcGFkICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcmVxdWVzdC1wYWQiIHNpbmNlPSIwLjEwLjMyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X25vX21vcmVfcGFkcyAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LW5vLW1vcmUtcGFkcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcmVsZWFzZS1yZXF1ZXN0LXBhZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9yZW1vdmVfcGFkICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcmVtb3ZlLXBhZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9pdGVyYXRlX3BhZHMgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1pdGVyYXRlLXBhZHMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zaW5rX3BhZHMgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1pdGVyYXRlLXNpbmstcGFkcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9pdGVyYXRlX3NyY19wYWRzICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtaXRlcmF0ZS1zcmMtcGFkcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9saW5rICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbGluayIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF91bmxpbmsgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC11bmxpbmsiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfbGlua19tYW55ICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbGluay1tYW55Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X3VubGlua19tYW55ICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtdW5saW5rLW1hbnkiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfbGlua19wYWRzICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbGluay1wYWRzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbGluay1wYWRzLWZ1bGwiIHNpbmNlPSIwLjEwLjMwIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X3VubGlua19wYWRzICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtdW5saW5rLXBhZHMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfbGlua19wYWRzX2ZpbHRlcmVkICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbGluay1wYWRzLWZpbHRlcmVkIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2xpbmtfZmlsdGVyZWQgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1saW5rLWZpbHRlcmVkIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2NsYXNzX2dldF9tZXRhZGF0YSAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNsYXNzLWdldC1tZXRhZGF0YSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9zZXRfYmFzZV90aW1lICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LWJhc2UtdGltZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9nZXRfYmFzZV90aW1lICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWJhc2UtdGltZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9zZXRfc3RhcnRfdGltZSAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1zdGFydC10aW1lIiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9nZXRfc3RhcnRfdGltZSAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1zdGFydC10aW1lIiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9zZXRfYnVzICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LWJ1cyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9nZXRfYnVzICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWJ1cyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9nZXRfZmFjdG9yeSAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1mYWN0b3J5Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X3NldF9pbmRleCAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1pbmRleCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9nZXRfaW5kZXggKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtaW5kZXgiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfaXNfaW5kZXhhYmxlICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtaXMtaW5kZXhhYmxlIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9lbGVtZW50X3NldF9uYW1lKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZXQtbmFtZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfZWxlbWVudF9nZXRfbmFtZSgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LW5hbWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2VsZW1lbnRfc2V0X3BhcmVudCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LXBhcmVudCIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfZWxlbWVudF9nZXRfcGFyZW50KCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtcGFyZW50Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X3JlcXVpcmVzX2Nsb2NrICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcmVxdWlyZXMtY2xvY2siLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfc2V0X2Nsb2NrICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LWNsb2NrIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2dldF9jbG9jayAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1jbG9jayIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9wcm92aWRlc19jbG9jayAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXByb3ZpZGVzLWNsb2NrIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X3Byb3ZpZGVfY2xvY2sgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1wcm92aWRlLWNsb2NrIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X3NldF9zdGF0ZSAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1zdGF0ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9nZXRfc3RhdGUgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtc3RhdGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZSAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1sb2NrZWQtc3RhdGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfaXNfbG9ja2VkX3N0YXRlICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtaXMtbG9ja2VkLXN0YXRlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2Fib3J0X3N0YXRlICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtYWJvcnQtc3RhdGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfY29udGludWVfc3RhdGUgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jb250aW51ZS1zdGF0ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9sb3N0X3N0YXRlICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbG9zdC1zdGF0ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXN0YXRlLWdldC1uYW1lIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X3N0YXRlX2NoYW5nZV9yZXR1cm5fZ2V0X25hbWUgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zdGF0ZS1jaGFuZ2UtcmV0dXJuLWdldC1uYW1lIiBzaW5jZT0iMC4xMC4xMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50ICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc3luYy1zdGF0ZS13aXRoLXBhcmVudCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jaGFuZ2Utc3RhdGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfZm91bmRfdGFncyAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWZvdW5kLXRhZ3MiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfZm91bmRfdGFnc19mb3JfcGFkICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZm91bmQtdGFncy1mb3ItcGFkIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X21lc3NhZ2VfZnVsbCAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LW1lc3NhZ2UtZnVsbCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1wb3N0LW1lc3NhZ2UiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfZ2V0X3F1ZXJ5X3R5cGVzICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LXF1ZXJ5LXR5cGVzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X3F1ZXJ5ICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcXVlcnkiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfcXVlcnlfY29udmVydCAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXF1ZXJ5LWNvbnZlcnQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24gKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1xdWVyeS1wb3NpdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9xdWVyeV9kdXJhdGlvbiAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXF1ZXJ5LWR1cmF0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZW5kLWV2ZW50Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X3NlZWtfc2ltcGxlICgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2Vlay1zaW1wbGUiIHNpbmNlPSIwLjEwLjciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfc2VlayAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNlZWsiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSAmcXVvdDtuby1tb3JlLXBhZHMmcXVvdDsgc2lnbmFsIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1uby1tb3JlLXBhZHMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSAmcXVvdDtwYWQtYWRkZWQmcXVvdDsgc2lnbmFsIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1wYWQtYWRkZWQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSAmcXVvdDtwYWQtcmVtb3ZlZCZxdW90OyBzaWduYWwiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXBhZC1yZW1vdmVkIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0RWxlbWVudEZhY3RvcnkiIGxpbms9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR3N0RWxlbWVudEZhY3Rvcnktc3RydWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X3JlZ2lzdGVyICgpIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LXJlZ2lzdGVyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZCAoKSIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWZpbmQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfZWxlbWVudF90eXBlICgpIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktZ2V0LWVsZW1lbnQtdHlwZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YSAoKSIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWdldC1tZXRhZGF0YSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9udW1fcGFkX3RlbXBsYXRlcyAoKSIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWdldC1udW0tcGFkLXRlbXBsYXRlcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9mYWN0b3J5X2dldF91cmlfdHlwZSAoKSIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWdldC11cmktdHlwZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9mYWN0b3J5X2dldF91cmlfcHJvdG9jb2xzICgpIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktZ2V0LXVyaS1wcm90b2NvbHMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9oYXNfaW50ZXJmYWNlICgpIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktaGFzLWludGVyZmFjZSIgc2luY2U9IjAuMTAuMTQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9jcmVhdGUgKCkiIGxpbms9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1jcmVhdGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgpIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktbWFrZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zaW5rX2FsbF9jYXBzICgpIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktY2FuLXNpbmstYWxsLWNhcHMiIHNpbmNlPSIwLjEwLjMzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NyY19hbGxfY2FwcyAoKSIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWNhbi1zcmMtYWxsLWNhcHMiIHNpbmNlPSIwLjEwLjMzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NpbmtfYW55X2NhcHMgKCkiIGxpbms9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1jYW4tc2luay1hbnktY2FwcyIgc2luY2U9IjAuMTAuMzMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc3JjX2FueV9jYXBzICgpIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktY2FuLXNyYy1hbnktY2FwcyIgc2luY2U9IjAuMTAuMzMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfc3RhdGljX3BhZF90ZW1wbGF0ZXMgKCkiIGxpbms9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1nZXQtc3RhdGljLXBhZC10ZW1wbGF0ZXMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJ0eXBlZGVmIiBuYW1lPSJHc3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0FOWSIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtQU5ZOkNBUFMiIHNpbmNlPSIwLjEwLjMxIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9BVURJT1ZJREVPX1NJTktTIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1BVURJT1ZJREVPLVNJTktTOkNBUFMiIHNpbmNlPSIwLjEwLjMxIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9BVURJT19FTkNPREVSIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1BVURJTy1FTkNPREVSOkNBUFMiIHNpbmNlPSIwLjEwLjMxIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNPREFCTEUiIGxpbms9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLURFQ09EQUJMRTpDQVBTIiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVDT0RFUiIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtREVDT0RFUjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERU1VWEVSIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1ERU1VWEVSOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFUEFZTE9BREVSIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1ERVBBWUxPQURFUjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9FTkNPREVSIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1FTkNPREVSOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0ZPUk1BVFRFUiIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtRk9STUFUVEVSOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01BWF9FTEVNRU5UUyIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUFYLUVMRU1FTlRTOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX0FVRElPIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NRURJQS1BVURJTzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9JTUFHRSIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtSU1BR0U6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfTUVUQURBVEEiIGxpbms9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLU1FRElBLU1FVEFEQVRBOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX1NVQlRJVExFIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NRURJQS1TVUJUSVRMRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9WSURFTyIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtVklERU86Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQU5ZIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NRURJQS1BTlk6Q0FQUyIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01VWEVSIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NVVhFUjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVJTRVIiIGxpbms9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLVBBUlNFUjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVlMT0FERVIiIGxpbms9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLVBBWUxPQURFUjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9TSU5LIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1TSU5LOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1NSQyIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtU1JDOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1ZJREVPX0VOQ09ERVIiIGxpbms9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLVZJREVPLUVOQ09ERVI6Q0FQUyIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2ZpbHRlciAoKSIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWxpc3QtZmlsdGVyIiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZ2V0X2VsZW1lbnRzICgpIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktbGlzdC1nZXQtZWxlbWVudHMiIHNpbmNlPSIwLjEwLjMxIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9pc190eXBlICgpIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktbGlzdC1pcy10eXBlIiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0Q29yZUVycm9yIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR3N0Q29yZUVycm9yIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RMaWJyYXJ5RXJyb3IiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHc3RMaWJyYXJ5RXJyb3IiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFJlc291cmNlRXJyb3IiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHc3RSZXNvdXJjZUVycm9yIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RTdHJlYW1FcnJvciIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dzdFN0cmVhbUVycm9yIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DT1JFX0VSUk9SIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUNPUkUtRVJST1I6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfTElCUkFSWV9FUlJPUiIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1MSUJSQVJZLUVSUk9SOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1JFU09VUkNFX0VSUk9SIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVJFU09VUkNFLUVSUk9SOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1NUUkVBTV9FUlJPUiIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1TVFJFQU0tRVJST1I6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRVJST1JfU1lTVEVNIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUVSUk9SLVNZU1RFTTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lcnJvcl9nZXRfbWVzc2FnZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI2dzdC1lcnJvci1nZXQtbWVzc2FnZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEV2ZW50IiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0RXZlbnRUeXBlRmxhZ3MiIGxpbms9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50VHlwZUZsYWdzIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FVkVOVF9UWVBFX0JPVEgiIGxpbms9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1UWVBFLUJPVEg6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRVZFTlRfTUFLRV9UWVBFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1NQUtFLVRZUEU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0RXZlbnRUeXBlIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudFR5cGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VWRU5UX1RSQUNFX05BTUUiIGxpbms9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1UUkFDRS1OQU1FOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VWRU5UX1RZUEUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULVRZUEU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRVZFTlRfVFlQRV9OQU1FKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1UWVBFLU5BTUU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRVZFTlRfVElNRVNUQU1QKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1USU1FU1RBTVA6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRVZFTlRfU0VRTlVNKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1TRVFOVU06Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRVZFTlRfSVNfVVBTVFJFQU0oKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUlTLVVQU1RSRUFNOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VWRU5UX0lTX0RPV05TVFJFQU0oKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUlTLURPV05TVFJFQU06Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRVZFTlRfSVNfU0VSSUFMSVpFRCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtSVMtU0VSSUFMSVpFRDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FVkVOVF9JU19TVElDS1koKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUlTLVNUSUNLWTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF90eXBlX2dldF9mbGFncyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXR5cGUtZ2V0LWZsYWdzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF90eXBlX2dldF9uYW1lICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtdHlwZS1nZXQtbmFtZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfdHlwZV90b19xdWFyayAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXR5cGUtdG8tcXVhcmsiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X3JlZiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXJlZiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfdW5yZWYgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC11bnJlZiIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfZXZlbnRfcmVwbGFjZSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcmVwbGFjZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfY29weSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LWNvcHkiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2V2ZW50X3N0ZWFsKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1zdGVhbCIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfZXZlbnRfdGFrZSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtdGFrZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfZXZlbnRfaXNfd3JpdGFibGUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LWlzLXdyaXRhYmxlIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9ldmVudF9tYWtlX3dyaXRhYmxlKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1tYWtlLXdyaXRhYmxlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF93cml0YWJsZV9zdHJ1Y3R1cmUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC13cml0YWJsZS1zdHJ1Y3R1cmUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X25ld19jdXN0b20gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctY3VzdG9tIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9nZXRfc3RydWN0dXJlICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtZ2V0LXN0cnVjdHVyZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfaGFzX25hbWUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1oYXMtbmFtZSIgc2luY2U9IjAuMTAuMjAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X2dldF9zZXFudW0gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1nZXQtc2VxbnVtIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfc2V0X3NlcW51bSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXNldC1zZXFudW0iIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctZmx1c2gtc3RhcnQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LWZsdXNoLXN0b3AiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X3BhcnNlX2ZsdXNoX3N0b3AgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1mbHVzaC1zdG9wIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9uZXdfZW9zICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LWVvcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc2VnbWVudCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfcGFyc2Vfc2VnbWVudCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLXNlZ21lbnQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X2NvcHlfc2VnbWVudCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LWNvcHktc2VnbWVudCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfbmV3X3RhZyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy10YWciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X3BhcnNlX3RhZyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLXRhZyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfbmV3X2J1ZmZlcl9zaXplICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LWJ1ZmZlci1zaXplIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9wYXJzZV9idWZmZXJfc2l6ZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLWJ1ZmZlci1zaXplIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RRT1NUeXBlIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RRT1NUeXBlIiBzaW5jZT0iMC4xMC4zMyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfbmV3X3FvcyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1xb3MiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X3BhcnNlX3FvcyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLXFvcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0U2Vla1R5cGUiIGxpbms9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdFNlZWtUeXBlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RTZWVrRmxhZ3MiIGxpbms9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdFNlZWtGbGFncyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfbmV3X3NlZWsgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc2VlayIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfcGFyc2Vfc2VlayAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLXNlZWsiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X25ld19uYXZpZ2F0aW9uICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LW5hdmlnYXRpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X25ld19sYXRlbmN5ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LWxhdGVuY3kiIHNpbmNlPSIwLjEwLjEyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9wYXJzZV9sYXRlbmN5ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2UtbGF0ZW5jeSIgc2luY2U9IjAuMTAuMTIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X25ld19zdGVwICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXN0ZXAiIHNpbmNlPSIwLjEwLjI0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9wYXJzZV9zdGVwICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2Utc3RlcCIgc2luY2U9IjAuMTAuMjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X25ld19zaW5rX21lc3NhZ2UgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc2luay1tZXNzYWdlIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfcGFyc2Vfc2lua19tZXNzYWdlICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2Utc2luay1tZXNzYWdlIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfbmV3X3JlY29uZmlndXJlICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXJlY29uZmlndXJlIiBzaW5jZT0iMC4xMS4wIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9uZXdfY2FwcyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1jYXBzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9wYXJzZV9jYXBzICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2UtY2FwcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RGaWx0ZXJGdW5jICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RmlsdGVyLmh0bWwjR3N0RmlsdGVyRnVuYyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZmlsdGVyX3J1biAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEZpbHRlci5odG1sI2dzdC1maWx0ZXItcnVuIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RGb3JtYXQiIGxpbms9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0ZPUk1BVF9QRVJDRU5UX01BWCIgbGluaz0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dTVC1GT1JNQVQtUEVSQ0VOVC1NQVg6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRk9STUFUX1BFUkNFTlRfU0NBTEUiIGxpbms9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHU1QtRk9STUFULVBFUkNFTlQtU0NBTEU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEZvcm1hdERlZmluaXRpb24iIGxpbms9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXREZWZpbml0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9mb3JtYXRfZ2V0X25hbWUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNnc3QtZm9ybWF0LWdldC1uYW1lIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9mb3JtYXRfdG9fcXVhcmsgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNnc3QtZm9ybWF0LXRvLXF1YXJrIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9mb3JtYXRfcmVnaXN0ZXIgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNnc3QtZm9ybWF0LXJlZ2lzdGVyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9mb3JtYXRfZ2V0X2J5X25pY2sgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNnc3QtZm9ybWF0LWdldC1ieS1uaWNrIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9mb3JtYXRzX2NvbnRhaW5zICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjZ3N0LWZvcm1hdHMtY29udGFpbnMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Zvcm1hdF9nZXRfZGV0YWlscyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI2dzdC1mb3JtYXQtZ2V0LWRldGFpbHMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Zvcm1hdF9pdGVyYXRlX2RlZmluaXRpb25zICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjZ3N0LWZvcm1hdC1pdGVyYXRlLWRlZmluaXRpb25zIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UHJveHlQYWQiIGxpbms9IkdzdEdob3N0UGFkLmh0bWwjR3N0UHJveHlQYWQtc3RydWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0R2hvc3RQYWQiIGxpbms9IkdzdEdob3N0UGFkLmh0bWwjR3N0R2hvc3RQYWQtc3RydWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9naG9zdF9wYWRfbmV3ICgpIiBsaW5rPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1naG9zdC1wYWQtbmV3Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldCAoKSIgbGluaz0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLW5ldy1uby10YXJnZXQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2dob3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoKSIgbGluaz0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLW5ldy1mcm9tLXRlbXBsYXRlIiBzaW5jZT0iMC4xMC4xMCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXRfZnJvbV90ZW1wbGF0ZSAoKSIgbGluaz0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLW5ldy1uby10YXJnZXQtZnJvbS10ZW1wbGF0ZSIgc2luY2U9IjAuMTAuMTAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0ICgpIiBsaW5rPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1naG9zdC1wYWQtc2V0LXRhcmdldCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZ2hvc3RfcGFkX2dldF90YXJnZXQgKCkiIGxpbms9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1nZXQtdGFyZ2V0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9naG9zdF9wYWRfY29uc3RydWN0ICgpIiBsaW5rPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1naG9zdC1wYWQtY29uc3RydWN0IiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZ2hvc3RfcGFkX3VubGlua19kZWZhdWx0ICgpIiBsaW5rPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1naG9zdC1wYWQtdW5saW5rLWRlZmF1bHQiIHNpbmNlPSIwLjEwLjM1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9naG9zdF9wYWRfbGlua19kZWZhdWx0ICgpIiBsaW5rPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1naG9zdC1wYWQtbGluay1kZWZhdWx0IiBzaW5jZT0iMC4xMC4zNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZ2hvc3RfcGFkX2FjdGl2YXRlX3B1bGxfZGVmYXVsdCAoKSIgbGluaz0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLWFjdGl2YXRlLXB1bGwtZGVmYXVsdCIgc2luY2U9IjAuMTAuMzUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2dob3N0X3BhZF9hY3RpdmF0ZV9wdXNoX2RlZmF1bHQgKCkiIGxpbms9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1hY3RpdmF0ZS1wdXNoLWRlZmF1bHQiIHNpbmNlPSIwLjEwLjM1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9naG9zdF9wYWRfaW50ZXJuYWxfYWN0aXZhdGVfcHVzaF9kZWZhdWx0ICgpIiBsaW5rPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1naG9zdC1wYWQtaW50ZXJuYWwtYWN0aXZhdGUtcHVzaC1kZWZhdWx0IiBzaW5jZT0iMC4xMC4zNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZ2hvc3RfcGFkX2ludGVybmFsX2FjdGl2YXRlX3B1bGxfZGVmYXVsdCAoKSIgbGluaz0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLWludGVybmFsLWFjdGl2YXRlLXB1bGwtZGVmYXVsdCIgc2luY2U9IjAuMTAuMzUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3Byb3h5X3BhZF9nZXRfaW50ZXJuYWwgKCkiIGxpbms9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LXByb3h5LXBhZC1nZXQtaW50ZXJuYWwiIHNpbmNlPSIwLjEwLjM1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wcm94eV9wYWRfcXVlcnlfdHlwZV9kZWZhdWx0ICgpIiBsaW5rPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1wcm94eS1wYWQtcXVlcnktdHlwZS1kZWZhdWx0IiBzaW5jZT0iMC4xMC4zNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcHJveHlfcGFkX2V2ZW50X2RlZmF1bHQgKCkiIGxpbms9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LXByb3h5LXBhZC1ldmVudC1kZWZhdWx0IiBzaW5jZT0iMC4xMC4zNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcHJveHlfcGFkX3F1ZXJ5X2RlZmF1bHQgKCkiIGxpbms9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LXByb3h5LXBhZC1xdWVyeS1kZWZhdWx0IiBzaW5jZT0iMC4xMC4zNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcHJveHlfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZGVmYXVsdCAoKSIgbGluaz0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtcHJveHktcGFkLWl0ZXJhdGUtaW50ZXJuYWwtbGlua3MtZGVmYXVsdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcHJveHlfcGFkX2NoYWluX2RlZmF1bHQgKCkiIGxpbms9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LXByb3h5LXBhZC1jaGFpbi1kZWZhdWx0IiBzaW5jZT0iMC4xMC4zNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcHJveHlfcGFkX2NoYWluX2xpc3RfZGVmYXVsdCAoKSIgbGluaz0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtcHJveHktcGFkLWNoYWluLWxpc3QtZGVmYXVsdCIgc2luY2U9IjAuMTAuMzUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3Byb3h5X3BhZF9nZXRyYW5nZV9kZWZhdWx0ICgpIiBsaW5rPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1wcm94eS1wYWQtZ2V0cmFuZ2UtZGVmYXVsdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcHJveHlfcGFkX2dldGNhcHNfZGVmYXVsdCAoKSIgbGluaz0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtcHJveHktcGFkLWdldGNhcHMtZGVmYXVsdCIgc2luY2U9IjAuMTAuMzUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3Byb3h5X3BhZF9hY2NlcHRjYXBzX2RlZmF1bHQgKCkiIGxpbms9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LXByb3h5LXBhZC1hY2NlcHRjYXBzLWRlZmF1bHQiIHNpbmNlPSIwLjEwLjM1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wcm94eV9wYWRfZml4YXRlY2Fwc19kZWZhdWx0ICgpIiBsaW5rPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1wcm94eS1wYWQtZml4YXRlY2Fwcy1kZWZhdWx0IiBzaW5jZT0iMC4xMC4zNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcHJveHlfcGFkX3VubGlua19kZWZhdWx0ICgpIiBsaW5rPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1wcm94eS1wYWQtdW5saW5rLWRlZmF1bHQiIHNpbmNlPSIwLjEwLjM1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0SW5kZXgiIGxpbms9IkdzdEluZGV4Lmh0bWwjR3N0SW5kZXgtc3RydWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0SW5kZXhFbnRyeSIgbGluaz0iR3N0SW5kZXguaHRtbCNHc3RJbmRleEVudHJ5Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0SW5kZXhHcm91cCIgbGluaz0iR3N0SW5kZXguaHRtbCNHc3RJbmRleEdyb3VwIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RJbmRleENlcnRhaW50eSIgbGluaz0iR3N0SW5kZXguaHRtbCNHc3RJbmRleENlcnRhaW50eSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0SW5kZXhFbnRyeVR5cGUiIGxpbms9IkdzdEluZGV4Lmh0bWwjR3N0SW5kZXhFbnRyeVR5cGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdEluZGV4TG9va3VwTWV0aG9kIiBsaW5rPSJHc3RJbmRleC5odG1sI0dzdEluZGV4TG9va3VwTWV0aG9kIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9JTkRFWF9OQVNTT0NTKCkiIGxpbms9IkdzdEluZGV4Lmh0bWwjR1NULUlOREVYLU5BU1NPQ1M6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfSU5ERVhfQVNTT0NfRkxBR1MoKSIgbGluaz0iR3N0SW5kZXguaHRtbCNHU1QtSU5ERVgtQVNTT0MtRkxBR1M6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfSU5ERVhfQVNTT0NfRk9STUFUKCkiIGxpbms9IkdzdEluZGV4Lmh0bWwjR1NULUlOREVYLUFTU09DLUZPUk1BVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9JTkRFWF9BU1NPQ19WQUxVRSgpIiBsaW5rPSJHc3RJbmRleC5odG1sI0dTVC1JTkRFWC1BU1NPQy1WQUxVRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0SW5kZXhBc3NvY2lhdGlvbiIgbGluaz0iR3N0SW5kZXguaHRtbCNHc3RJbmRleEFzc29jaWF0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RBc3NvY0ZsYWdzIiBsaW5rPSJHc3RJbmRleC5odG1sI0dzdEFzc29jRmxhZ3MiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0lOREVYX0ZPUk1BVF9GT1JNQVQoKSIgbGluaz0iR3N0SW5kZXguaHRtbCNHU1QtSU5ERVgtRk9STUFULUZPUk1BVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9JTkRFWF9GT1JNQVRfS0VZKCkiIGxpbms9IkdzdEluZGV4Lmh0bWwjR1NULUlOREVYLUZPUk1BVC1LRVk6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfSU5ERVhfSURfSU5WQUxJRCIgbGluaz0iR3N0SW5kZXguaHRtbCNHU1QtSU5ERVgtSUQtSU5WQUxJRDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9JTkRFWF9JRF9ERVNDUklQVElPTigpIiBsaW5rPSJHc3RJbmRleC5odG1sI0dTVC1JTkRFWC1JRC1ERVNDUklQVElPTjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdEluZGV4RmlsdGVyICgpIiBsaW5rPSJHc3RJbmRleC5odG1sI0dzdEluZGV4RmlsdGVyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RJbmRleFJlc29sdmVyTWV0aG9kIiBsaW5rPSJHc3RJbmRleC5odG1sI0dzdEluZGV4UmVzb2x2ZXJNZXRob2QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0SW5kZXhSZXNvbHZlciAoKSIgbGluaz0iR3N0SW5kZXguaHRtbCNHc3RJbmRleFJlc29sdmVyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RJbmRleEZsYWdzIiBsaW5rPSJHc3RJbmRleC5odG1sI0dzdEluZGV4RmxhZ3MiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0lOREVYX0lTX1JFQURBQkxFKCkiIGxpbms9IkdzdEluZGV4Lmh0bWwjR1NULUlOREVYLUlTLVJFQURBQkxFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0lOREVYX0lTX1dSSVRBQkxFKCkiIGxpbms9IkdzdEluZGV4Lmh0bWwjR1NULUlOREVYLUlTLVdSSVRBQkxFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2luZGV4X25ldyAoKSIgbGluaz0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtbmV3Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9pbmRleF9jb21taXQgKCkiIGxpbms9IkdzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LWNvbW1pdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaW5kZXhfZ2V0X2dyb3VwICgpIiBsaW5rPSJHc3RJbmRleC5odG1sI2dzdC1pbmRleC1nZXQtZ3JvdXAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2luZGV4X25ld19ncm91cCAoKSIgbGluaz0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtbmV3LWdyb3VwIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9pbmRleF9zZXRfZ3JvdXAgKCkiIGxpbms9IkdzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LXNldC1ncm91cCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaW5kZXhfc2V0X2NlcnRhaW50eSAoKSIgbGluaz0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtc2V0LWNlcnRhaW50eSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaW5kZXhfZ2V0X2NlcnRhaW50eSAoKSIgbGluaz0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtZ2V0LWNlcnRhaW50eSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaW5kZXhfc2V0X2ZpbHRlciAoKSIgbGluaz0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtc2V0LWZpbHRlciIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaW5kZXhfc2V0X2ZpbHRlcl9mdWxsICgpIiBsaW5rPSJHc3RJbmRleC5odG1sI2dzdC1pbmRleC1zZXQtZmlsdGVyLWZ1bGwiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2luZGV4X3NldF9yZXNvbHZlciAoKSIgbGluaz0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtc2V0LXJlc29sdmVyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9pbmRleF9zZXRfcmVzb2x2ZXJfZnVsbCAoKSIgbGluaz0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtc2V0LXJlc29sdmVyLWZ1bGwiIHNpbmNlPSIwLjEwLjE4Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9pbmRleF9nZXRfd3JpdGVyX2lkICgpIiBsaW5rPSJHc3RJbmRleC5odG1sI2dzdC1pbmRleC1nZXQtd3JpdGVyLWlkIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9pbmRleF9hZGRfZm9ybWF0ICgpIiBsaW5rPSJHc3RJbmRleC5odG1sI2dzdC1pbmRleC1hZGQtZm9ybWF0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9pbmRleF9hZGRfYXNzb2NpYXRpb24gKCkiIGxpbms9IkdzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LWFkZC1hc3NvY2lhdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaW5kZXhfYWRkX2Fzc29jaWF0aW9udiAoKSIgbGluaz0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtYWRkLWFzc29jaWF0aW9udiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaW5kZXhfYWRkX29iamVjdCAoKSIgbGluaz0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtYWRkLW9iamVjdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaW5kZXhfYWRkX2lkICgpIiBsaW5rPSJHc3RJbmRleC5odG1sI2dzdC1pbmRleC1hZGQtaWQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2luZGV4X2dldF9hc3NvY19lbnRyeSAoKSIgbGluaz0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtZ2V0LWFzc29jLWVudHJ5Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9pbmRleF9nZXRfYXNzb2NfZW50cnlfZnVsbCAoKSIgbGluaz0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtZ2V0LWFzc29jLWVudHJ5LWZ1bGwiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2luZGV4X2VudHJ5X2NvcHkgKCkiIGxpbms9IkdzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LWVudHJ5LWNvcHkiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2luZGV4X2VudHJ5X2ZyZWUgKCkiIGxpbms9IkdzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LWVudHJ5LWZyZWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2luZGV4X2VudHJ5X2Fzc29jX21hcCAoKSIgbGluaz0iR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtZW50cnktYXNzb2MtbWFwIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtyZXNvbHZlciZxdW90OyBwcm9wZXJ0eSIgbGluaz0iR3N0SW5kZXguaHRtbCNHc3RJbmRleC0tcmVzb2x2ZXIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSAmcXVvdDtlbnRyeS1hZGRlZCZxdW90OyBzaWduYWwiIGxpbms9IkdzdEluZGV4Lmh0bWwjR3N0SW5kZXgtZW50cnktYWRkZWQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RJbmRleEZhY3RvcnkiIGxpbms9IkdzdEluZGV4RmFjdG9yeS5odG1sI0dzdEluZGV4RmFjdG9yeS1zdHJ1Y3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2luZGV4X2ZhY3RvcnlfbmV3ICgpIiBsaW5rPSJHc3RJbmRleEZhY3RvcnkuaHRtbCNnc3QtaW5kZXgtZmFjdG9yeS1uZXciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2luZGV4X2ZhY3RvcnlfZGVzdHJveSAoKSIgbGluaz0iR3N0SW5kZXhGYWN0b3J5Lmh0bWwjZ3N0LWluZGV4LWZhY3RvcnktZGVzdHJveSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaW5kZXhfZmFjdG9yeV9maW5kICgpIiBsaW5rPSJHc3RJbmRleEZhY3RvcnkuaHRtbCNnc3QtaW5kZXgtZmFjdG9yeS1maW5kIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9pbmRleF9mYWN0b3J5X2NyZWF0ZSAoKSIgbGluaz0iR3N0SW5kZXhGYWN0b3J5Lmh0bWwjZ3N0LWluZGV4LWZhY3RvcnktY3JlYXRlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9pbmRleF9mYWN0b3J5X21ha2UgKCkiIGxpbms9IkdzdEluZGV4RmFjdG9yeS5odG1sI2dzdC1pbmRleC1mYWN0b3J5LW1ha2UiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RJdGVyYXRvciIgbGluaz0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdEl0ZXJhdG9ySXRlbSIgbGluaz0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JJdGVtIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RJdGVyYXRvclJlc3VsdCIgbGluaz0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JSZXN1bHQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0SXRlcmF0b3JDb3B5RnVuY3Rpb24gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yQ29weUZ1bmN0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdEl0ZXJhdG9yTmV4dEZ1bmN0aW9uICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvck5leHRGdW5jdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RJdGVyYXRvckl0ZW1GdW5jdGlvbiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JJdGVtRnVuY3Rpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0SXRlcmF0b3JSZXN5bmNGdW5jdGlvbiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JSZXN5bmNGdW5jdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RJdGVyYXRvckZyZWVGdW5jdGlvbiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JGcmVlRnVuY3Rpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0SXRlcmF0b3JGb3JlYWNoRnVuY3Rpb24gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yRm9yZWFjaEZ1bmN0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdEl0ZXJhdG9yRm9sZEZ1bmN0aW9uICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvckZvbGRGdW5jdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfSVRFUkFUT1IoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR1NULUlURVJBVE9SOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0lURVJBVE9SX0xPQ0soKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR1NULUlURVJBVE9SLUxPQ0s6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfSVRFUkFUT1JfQ09PS0lFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dTVC1JVEVSQVRPUi1DT09LSUU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfSVRFUkFUT1JfT1JJR19DT09LSUUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR1NULUlURVJBVE9SLU9SSUctQ09PS0lFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2l0ZXJhdG9yX25ldyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLW5ldyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaXRlcmF0b3JfbmV3X2xpc3QgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1uZXctbGlzdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaXRlcmF0b3JfbmV3X3NpbmdsZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLW5ldy1zaW5nbGUiIHNpbmNlPSIwLjEwLjI1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9pdGVyYXRvcl9jb3B5ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItY29weSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaXRlcmF0b3JfZnJlZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLWZyZWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2l0ZXJhdG9yX25leHQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1uZXh0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9pdGVyYXRvcl9yZXN5bmMgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1yZXN5bmMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2l0ZXJhdG9yX3B1c2ggKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1wdXNoIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9pdGVyYXRvcl9maWx0ZXIgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1maWx0ZXIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2l0ZXJhdG9yX2ZvbGQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1mb2xkIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9pdGVyYXRvcl9mb3JlYWNoICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItZm9yZWFjaCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaXRlcmF0b3JfZmluZF9jdXN0b20gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1maW5kLWN1c3RvbSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdE1lbW9yeSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdE1lbW9yeUluZm8iIGxpbms9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnlJbmZvIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJHc3RBbGxvY2F0b3IiIGxpbms9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RBbGxvY2F0b3IiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX01FTU9SWV9JU19XUklUQUJMRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR1NULU1FTU9SWS1JUy1XUklUQUJMRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RNZW1vcnlGbGFncyIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeUZsYWdzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RNYXBGbGFncyIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1hcEZsYWdzIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9NQVBfUkVBRFdSSVRFIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR1NULU1BUC1SRUFEV1JJVEU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RNZW1vcnlBbGxvY0Z1bmN0aW9uICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5QWxsb2NGdW5jdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RNZW1vcnlHZXRTaXplc0Z1bmN0aW9uICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5R2V0U2l6ZXNGdW5jdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RNZW1vcnlSZXNpemVGdW5jdGlvbiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeVJlc2l6ZUZ1bmN0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdE1lbW9yeU1hcEZ1bmN0aW9uICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5TWFwRnVuY3Rpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0TWVtb3J5VW5tYXBGdW5jdGlvbiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeVVubWFwRnVuY3Rpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0TWVtb3J5RnJlZUZ1bmN0aW9uICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5RnJlZUZ1bmN0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdE1lbW9yeUNvcHlGdW5jdGlvbiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeUNvcHlGdW5jdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RNZW1vcnlTaGFyZUZ1bmN0aW9uICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5U2hhcmVGdW5jdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RNZW1vcnlJc1NwYW5GdW5jdGlvbiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeUlzU3BhbkZ1bmN0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0idmFyaWFibGUiIG5hbWU9ImdzdF9tZW1vcnlfYWxpZ25tZW50IiBsaW5rPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS1hbGlnbm1lbnQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2FsbG9jYXRvcl9hbGxvYyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1hbGxvY2F0b3ItYWxsb2MiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lbW9yeV9uZXdfd3JhcHBlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktbmV3LXdyYXBwZWQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lbW9yeV9yZWYgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LXJlZiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVtb3J5X3VucmVmICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS11bnJlZiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVtb3J5X2dldF9zaXplcyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktZ2V0LXNpemVzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZW1vcnlfcmVzaXplICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS1yZXNpemUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lbW9yeV9tYXAgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LW1hcCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVtb3J5X3VubWFwICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS11bm1hcCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVtb3J5X2NvcHkgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LWNvcHkiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lbW9yeV9zaGFyZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktc2hhcmUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lbW9yeV9pc19zcGFuICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS1pcy1zcGFuIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9BTExPQ0FUT1JfU1lTTUVNIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR1NULUFMTE9DQVRPUi1TWVNNRU06Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYWxsb2NhdG9yX2ZpbmQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNnc3QtYWxsb2NhdG9yLWZpbmQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2FsbG9jYXRvcl9yZWdpc3RlciAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1hbGxvY2F0b3ItcmVnaXN0ZXIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2FsbG9jYXRvcl9zZXRfZGVmYXVsdCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1hbGxvY2F0b3Itc2V0LWRlZmF1bHQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RNZXNzYWdlIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdE1lc3NhZ2VUeXBlIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2VUeXBlIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9NRVNTQUdFX1NSQygpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVNSQzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9NRVNTQUdFX1NSQ19OQU1FKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtU1JDLU5BTUU6Q0FQUyIgc2luY2U9IjAuMTAuMjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX01FU1NBR0VfVElNRVNUQU1QKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtVElNRVNUQU1QOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX01FU1NBR0VfU0VRTlVNKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtU0VRTlVNOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX01FU1NBR0VfVFlQRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVRZUEU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfTUVTU0FHRV9UWVBFX05BTUUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1UWVBFLU5BTUU6Q0FQUyIgc2luY2U9IjAuMTAuNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfTUVTU0FHRV9UUkFDRV9OQU1FIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVRSQUNFLU5BTUU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV90eXBlX3RvX3F1YXJrICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXR5cGUtdG8tcXVhcmsiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfdHlwZV9nZXRfbmFtZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS10eXBlLWdldC1uYW1lIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX3JlZiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1yZWYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfdW5yZWYgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtdW5yZWYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfY29weSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1jb3B5Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtZ2V0LXN0cnVjdHVyZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfbWVzc2FnZV9tYWtlX3dyaXRhYmxlKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbWFrZS13cml0YWJsZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9nZXRfc2VxbnVtICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLWdldC1zZXFudW0iIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX3NldF9zZXFudW0gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2Utc2V0LXNlcW51bSIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfaGFzX25hbWUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtaGFzLW5hbWUiIHNpbmNlPSIwLjEwLjIwIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9tZXNzYWdlX2lzX3dyaXRhYmxlKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtaXMtd3JpdGFibGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X21lc3NhZ2VfcmVwbGFjZSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXJlcGxhY2UiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfbmV3X2VvcyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctZW9zIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX25ld19lcnJvciAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctZXJyb3IiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtZXJyb3IiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfbmV3X3dhcm5pbmcgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXdhcm5pbmciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfcGFyc2Vfd2FybmluZyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS13YXJuaW5nIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX25ld19pbmZvICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1pbmZvIiBzaW5jZT0iMC4xMC4xMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9wYXJzZV9pbmZvICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWluZm8iIHNpbmNlPSIwLjEwLjEyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX25ld190YWcgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXRhZyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9wYXJzZV90YWcgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtdGFnIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX25ld19idWZmZXJpbmcgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWJ1ZmZlcmluZyIgc2luY2U9IjAuMTAuMTEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWJ1ZmZlcmluZyIgc2luY2U9IjAuMTAuMTEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2Vfc2V0X2J1ZmZlcmluZ19zdGF0cyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1zZXQtYnVmZmVyaW5nLXN0YXRzIiBzaW5jZT0iMC4xMC4yMCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9wYXJzZV9idWZmZXJpbmdfc3RhdHMgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtYnVmZmVyaW5nLXN0YXRzIiBzaW5jZT0iMC4xMC4yMCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9uZXdfc3RhdGVfY2hhbmdlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctc3RhdGUtY2hhbmdlZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXN0YXRlLWNoYW5nZWQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfbmV3X3N0YXRlX2RpcnR5ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1zdGF0ZS1kaXJ0eSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9uZXdfc3RlcF9kb25lICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1zdGVwLWRvbmUiIHNpbmNlPSIwLjEwLjI0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX3BhcnNlX3N0ZXBfZG9uZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1zdGVwLWRvbmUiIHNpbmNlPSIwLjEwLjI0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX25ld19jbG9ja19wcm92aWRlICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1jbG9jay1wcm92aWRlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX3BhcnNlX2Nsb2NrX3Byb3ZpZGUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtY2xvY2stcHJvdmlkZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9uZXdfY2xvY2tfbG9zdCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctY2xvY2stbG9zdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9wYXJzZV9jbG9ja19sb3N0ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWNsb2NrLWxvc3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfbmV3X25ld19jbG9jayAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctbmV3LWNsb2NrIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX3BhcnNlX25ld19jbG9jayAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1uZXctY2xvY2siLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9uICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1hcHBsaWNhdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9uZXdfZWxlbWVudCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctZWxlbWVudCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9uZXdfY3VzdG9tICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1jdXN0b20iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfc3RhcnQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXNlZ21lbnQtc3RhcnQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfcGFyc2Vfc2VnbWVudF9zdGFydCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1zZWdtZW50LXN0YXJ0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX25ld19zZWdtZW50X2RvbmUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXNlZ21lbnQtZG9uZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9wYXJzZV9zZWdtZW50X2RvbmUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2Utc2VnbWVudC1kb25lIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX25ld19kdXJhdGlvbiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctZHVyYXRpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfcGFyc2VfZHVyYXRpb24gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtZHVyYXRpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfbmV3X2xhdGVuY3kgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWxhdGVuY3kiIHNpbmNlPSIwLjEwLjEyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX25ld19hc3luY19zdGFydCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctYXN5bmMtc3RhcnQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfbmV3X2FzeW5jX2RvbmUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWFzeW5jLWRvbmUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfcGFyc2VfYXN5bmNfZG9uZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1hc3luYy1kb25lIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX25ld19zdGVwX3N0YXJ0ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1zdGVwLXN0YXJ0IiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9wYXJzZV9zdGVwX3N0YXJ0ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXN0ZXAtc3RhcnQiIHNpbmNlPSIwLjEwLjI0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX25ld19xb3MgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXFvcyIgc2luY2U9IjAuMTAuMjkiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2Vfc2V0X3Fvc192YWx1ZXMgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2Utc2V0LXFvcy12YWx1ZXMiIHNpbmNlPSIwLjEwLjI5Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX3NldF9xb3Nfc3RhdHMgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2Utc2V0LXFvcy1zdGF0cyIgc2luY2U9IjAuMTAuMjkiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfcGFyc2VfcW9zICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXFvcyIgc2luY2U9IjAuMTAuMjkiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfcGFyc2VfcW9zX3ZhbHVlcyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1xb3MtdmFsdWVzIiBzaW5jZT0iMC4xMC4yOSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9wYXJzZV9xb3Nfc3RhdHMgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtcW9zLXN0YXRzIiBzaW5jZT0iMC4xMC4yOSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0U3RydWN0dXJlQ2hhbmdlVHlwZSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RTdHJ1Y3R1cmVDaGFuZ2VUeXBlIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9uZXdfc3RydWN0dXJlX2NoYW5nZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctc3RydWN0dXJlLWNoYW5nZSIgc2luY2U9IjAuMTAuMjIuIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX3BhcnNlX3N0cnVjdHVyZV9jaGFuZ2UgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2Utc3RydWN0dXJlLWNoYW5nZSIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfbmV3X3JlcXVlc3Rfc3RhdGUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXJlcXVlc3Qtc3RhdGUiIHNpbmNlPSIwLjEwLjIzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX3BhcnNlX3JlcXVlc3Rfc3RhdGUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtcmVxdWVzdC1zdGF0ZSIgc2luY2U9IjAuMTAuMjMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFN0cmVhbVN0YXR1c1R5cGUiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0U3RyZWFtU3RhdHVzVHlwZSIgc2luY2U9IjAuMTAuMjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfbmV3X3N0cmVhbV9zdGF0dXMgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXN0cmVhbS1zdGF0dXMiIHNpbmNlPSIwLjEwLjI0LiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1fc3RhdHVzICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXN0cmVhbS1zdGF0dXMiIHNpbmNlPSIwLjEwLjI0LiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9zZXRfc3RyZWFtX3N0YXR1c19vYmplY3QgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2Utc2V0LXN0cmVhbS1zdGF0dXMtb2JqZWN0IiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9nZXRfc3RyZWFtX3N0YXR1c19vYmplY3QgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtZ2V0LXN0cmVhbS1zdGF0dXMtb2JqZWN0IiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0UHJvZ3Jlc3NUeXBlIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdFByb2dyZXNzVHlwZSIgc2luY2U9IjAuMTAuMzMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfbmV3X3Byb2dyZXNzICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1wcm9ncmVzcyIgc2luY2U9IjAuMTAuMzMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfcGFyc2VfcHJvZ3Jlc3MgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtcHJvZ3Jlc3MiIHNpbmNlPSIwLjEwLjMzIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0TWV0YSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0TWV0YUluZm8iIGxpbms9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YUluZm8iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX01FVEFfVFJBQ0VfTkFNRSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHU1QtTUVUQS1UUkFDRS1OQU1FOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0TWV0YUluaXRGdW5jdGlvbiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhSW5pdEZ1bmN0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdE1ldGFGcmVlRnVuY3Rpb24gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YUZyZWVGdW5jdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RNZXRhQ29weUZ1bmN0aW9uICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFDb3B5RnVuY3Rpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0TWV0YVRyYW5zZm9ybUZ1bmN0aW9uICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFUcmFuc2Zvcm1GdW5jdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWV0YV9yZWdpc3RlciAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNnc3QtbWV0YS1yZWdpc3RlciIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWV0YV9nZXRfaW5mbyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNnc3QtbWV0YS1nZXQtaW5mbyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiIGxpbms9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0TWluaU9iamVjdEZsYWdzIiBsaW5rPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3RGbGFncyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3RDb3B5RnVuY3Rpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0TWluaU9iamVjdERpc3Bvc2VGdW5jdGlvbiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0RGlzcG9zZUZ1bmN0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdE1pbmlPYmplY3RGcmVlRnVuY3Rpb24gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdEZyZWVGdW5jdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RNaW5pT2JqZWN0V2Vha05vdGlmeSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0V2Vha05vdGlmeSIgc2luY2U9IjAuMTAuMzUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX01JTklfT0JKRUNUX1RZUEUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHU1QtTUlOSS1PQkpFQ1QtVFlQRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9NSU5JX09CSkVDVF9GTEFHUygpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1NSU5JLU9CSkVDVC1GTEFHUzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9NSU5JX09CSkVDVF9GTEFHX0lTX1NFVCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1NSU5JLU9CSkVDVC1GTEFHLUlTLVNFVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9NSU5JX09CSkVDVF9GTEFHX1NFVCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1NSU5JLU9CSkVDVC1GTEFHLVNFVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9NSU5JX09CSkVDVF9GTEFHX1VOU0VUKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR1NULU1JTkktT0JKRUNULUZMQUctVU5TRVQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlQoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHU1QtTUlOSS1PQkpFQ1QtUkVGQ09VTlQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHU1QtTUlOSS1PQkpFQ1QtUkVGQ09VTlQtVkFMVUU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfTUlOSV9PQkpFQ1RfU0laRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1NSU5JLU9CSkVDVC1TSVpFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0RFRklORV9NSU5JX09CSkVDVF9UWVBFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR1NULURFRklORS1NSU5JLU9CSkVDVC1UWVBFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21pbmlfb2JqZWN0X2luaXQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LWluaXQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21pbmlfb2JqZWN0X2NvcHkgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LWNvcHkiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21pbmlfb2JqZWN0X2lzX3dyaXRhYmxlICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC1pcy13cml0YWJsZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtbWFrZS13cml0YWJsZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWluaV9vYmplY3RfcmVmICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC1yZWYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21pbmlfb2JqZWN0X3VucmVmICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC11bnJlZiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWluaV9vYmplY3Rfd2Vha19yZWYgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LXdlYWstcmVmIiBzaW5jZT0iMC4xMC4zNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWluaV9vYmplY3Rfd2Vha191bnJlZiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3Qtd2Vhay11bnJlZiIgc2luY2U9IjAuMTAuMzUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21pbmlfb2JqZWN0X3JlcGxhY2UgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LXJlcGxhY2UiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21pbmlfb2JqZWN0X3N0ZWFsICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC1zdGVhbCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWluaV9vYmplY3RfdGFrZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtdGFrZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdE9iamVjdCIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdE9iamVjdENsYXNzIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNHc3RPYmplY3RDbGFzcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0T2JqZWN0RmxhZ3MiIGxpbms9IkdzdE9iamVjdC5odG1sI0dzdE9iamVjdEZsYWdzIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9PQkpFQ1RfRkxBR1MoKSIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1GTEFHUzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9PQkpFQ1RfRkxBR19JU19TRVQoKSIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1GTEFHLUlTLVNFVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9PQkpFQ1RfRkxBR19TRVQoKSIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1GTEFHLVNFVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9PQkpFQ1RfRkxBR19VTlNFVCgpIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULUZMQUctVU5TRVQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfT0JKRUNUX05BTUUoKSIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1OQU1FOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX09CSkVDVF9QQVJFTlQoKSIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1QQVJFTlQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfT0JKRUNUX1JFRkNPVU5UKCkiIGxpbms9IkdzdE9iamVjdC5odG1sI0dTVC1PQkpFQ1QtUkVGQ09VTlQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFKCkiIGxpbms9IkdzdE9iamVjdC5odG1sI0dTVC1PQkpFQ1QtUkVGQ09VTlQtVkFMVUU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfT0JKRUNUX0xPQ0soKSIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1MT0NLOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX09CSkVDVF9UUllMT0NLKCkiIGxpbms9IkdzdE9iamVjdC5odG1sI0dTVC1PQkpFQ1QtVFJZTE9DSzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9PQkpFQ1RfVU5MT0NLKCkiIGxpbms9IkdzdE9iamVjdC5odG1sI0dTVC1PQkpFQ1QtVU5MT0NLOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX09CSkVDVF9HRVRfTE9DSygpIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULUdFVC1MT0NLOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X29iamVjdF9zZXRfbmFtZSAoKSIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1zZXQtbmFtZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfb2JqZWN0X2dldF9uYW1lICgpIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC1uYW1lIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9vYmplY3Rfc2V0X3BhcmVudCAoKSIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1zZXQtcGFyZW50Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9vYmplY3RfZ2V0X3BhcmVudCAoKSIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1nZXQtcGFyZW50Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9vYmplY3RfdW5wYXJlbnQgKCkiIGxpbms9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtdW5wYXJlbnQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X29iamVjdF9kZWZhdWx0X2RlZXBfbm90aWZ5ICgpIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWRlZmF1bHQtZGVlcC1ub3RpZnkiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X29iamVjdF9kZWZhdWx0X2Vycm9yICgpIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWRlZmF1bHQtZXJyb3IiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X29iamVjdF9jaGVja191bmlxdWVuZXNzICgpIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWNoZWNrLXVuaXF1ZW5lc3MiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X29iamVjdF9oYXNfYW5jZXN0b3IgKCkiIGxpbms9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtaGFzLWFuY2VzdG9yIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9vYmplY3RfcmVmICgpIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXJlZiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfb2JqZWN0X3VucmVmICgpIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucmVmIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9vYmplY3RfcmVmX3NpbmsgKCkiIGxpbms9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtcmVmLXNpbmsiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X29iamVjdF9yZXBsYWNlICgpIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXJlcGxhY2UiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X29iamVjdF9nZXRfcGF0aF9zdHJpbmcgKCkiIGxpbms9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtZ2V0LXBhdGgtc3RyaW5nIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtuYW1lJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJHc3RPYmplY3QuaHRtbCNHc3RPYmplY3QtLW5hbWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O3BhcmVudCZxdW90OyBwcm9wZXJ0eSIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LS1wYXJlbnQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSAmcXVvdDtkZWVwLW5vdGlmeSZxdW90OyBzaWduYWwiIGxpbms9IkdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1kZWVwLW5vdGlmeSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFBhZCIgbGluaz0iR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0UGFkRGlyZWN0aW9uIiBsaW5rPSJHc3RQYWQuaHRtbCNHc3RQYWREaXJlY3Rpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFBhZEZsYWdzIiBsaW5rPSJHc3RQYWQuaHRtbCNHc3RQYWRGbGFncyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0UGFkTGlua1JldHVybiIgbGluaz0iR3N0UGFkLmh0bWwjR3N0UGFkTGlua1JldHVybiIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX0xJTktfRkFJTEVEKCkiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtTElOSy1GQUlMRUQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX0xJTktfU1VDQ0VTU0ZVTCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUxJTkstU1VDQ0VTU0ZVTDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RQYWRMaW5rQ2hlY2siIGxpbms9IkdzdFBhZC5odG1sI0dzdFBhZExpbmtDaGVjayIgc2luY2U9IjAuMTAuMzAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBRF9MSU5LX0NIRUNLX0RFRkFVTFQiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtTElOSy1DSEVDSy1ERUZBVUxUOkNBUFMiIHNpbmNlPSIwLjEwLjMwIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RGbG93UmV0dXJuIiBsaW5rPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RBY3RpdmF0ZU1vZGUiIGxpbms9IkdzdFBhZC5odG1sI0dzdEFjdGl2YXRlTW9kZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0UHJvYmVSZXR1cm4iIGxpbms9IkdzdFBhZC5odG1sI0dzdFByb2JlUmV0dXJuIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RQcm9iZVR5cGUiIGxpbms9IkdzdFBhZC5odG1sI0dzdFByb2JlVHlwZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUFJPQkVfVFlQRV9CTE9DS0lORyIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBST0JFLVRZUEUtQkxPQ0tJTkc6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUFJPQkVfVFlQRV9EQVRBIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUFJPQkUtVFlQRS1EQVRBOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BST0JFX1RZUEVfU0NIRURVTElORyIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBST0JFLVRZUEUtU0NIRURVTElORzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9wYWRfZ2V0X25hbWUoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtbmFtZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX2dldF9kaXJlY3Rpb24gKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LWRpcmVjdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfcGFkX2dldF9wYXJlbnQoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtcGFyZW50Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50ICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1wYXJlbnQtZWxlbWVudCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGUgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXBhZC10ZW1wbGF0ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX2xpbmsgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtbGluayIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX2xpbmtfZnVsbCAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1saW5rLWZ1bGwiIHNpbmNlPSIwLjEwLjMwIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfdW5saW5rICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXVubGluayIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX2lzX2xpbmtlZCAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1pcy1saW5rZWQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9jYW5fbGluayAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1jYW4tbGluayIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX2dldF9jYXBzICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1jYXBzIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9wYWRfZ2V0X2NhcHNfcmVmZmVkKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LWNhcHMtcmVmZmVkIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwcyAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtYWxsb3dlZC1jYXBzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtY3VycmVudC1jYXBzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1wYWQtdGVtcGxhdGUtY2FwcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3NldF9jYXBzICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1jYXBzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfZ2V0X3BlZXIgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXBlZXIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9wZWVyX2dldF9jYXBzICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXBlZXItZ2V0LWNhcHMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X3BhZF9wZWVyX2dldF9jYXBzX3JlZmZlZCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXBlZXItZ2V0LWNhcHMtcmVmZmVkIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtdXNlLWZpeGVkLWNhcHMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9oYXNfY3VycmVudF9jYXBzICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWhhcy1jdXJyZW50LWNhcHMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9nZXRfc3RpY2t5X2V2ZW50ICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1zdGlja3ktZXZlbnQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0UGFkU3RpY2t5RXZlbnRzRm9yZWFjaEZ1bmN0aW9uICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNHc3RQYWRTdGlja3lFdmVudHNGb3JlYWNoRnVuY3Rpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9zdGlja3lfZXZlbnRzX2ZvcmVhY2ggKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtc3RpY2t5LWV2ZW50cy1mb3JlYWNoIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfaXNfYWN0aXZlICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWlzLWFjdGl2ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX2lzX2Jsb2NrZWQgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtaXMtYmxvY2tlZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX2lzX2Jsb2NraW5nICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWlzLWJsb2NraW5nIiBzaW5jZT0iMC4xMC4xMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RQYWRQcm9iZUNhbGxiYWNrICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNHc3RQYWRQcm9iZUNhbGxiYWNrIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfYWRkX3Byb2JlICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWFkZC1wcm9iZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3JlbW92ZV9wcm9iZSAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1yZW1vdmUtcHJvYmUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9nZXRfb2Zmc2V0ICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1vZmZzZXQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9zZXRfb2Zmc2V0ICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1vZmZzZXQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9uZXcgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtbmV3Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtbmV3LWZyb20tdGVtcGxhdGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtbmV3LWZyb20tc3RhdGljLXRlbXBsYXRlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1jaGFpbi1mdW5jdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RQYWRDaGFpbkZ1bmN0aW9uICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNHc3RQYWRDaGFpbkZ1bmN0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfc2V0X2NoYWluX2xpc3RfZnVuY3Rpb24gKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWNoYWluLWxpc3QtZnVuY3Rpb24iIHNpbmNlPSIwLjEwLjI0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFBhZENoYWluTGlzdEZ1bmN0aW9uICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNHc3RQYWRDaGFpbkxpc3RGdW5jdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX2dldF9yYW5nZSAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtcmFuZ2UiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9zZXRfZ2V0cmFuZ2VfZnVuY3Rpb24gKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWdldHJhbmdlLWZ1bmN0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFBhZEdldFJhbmdlRnVuY3Rpb24gKCkiIGxpbms9IkdzdFBhZC5odG1sI0dzdFBhZEdldFJhbmdlRnVuY3Rpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWV2ZW50LWZ1bmN0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFBhZEV2ZW50RnVuY3Rpb24gKCkiIGxpbms9IkdzdFBhZC5odG1sI0dzdFBhZEV2ZW50RnVuY3Rpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9zZXRfbGlua19mdW5jdGlvbiAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtbGluay1mdW5jdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RQYWRMaW5rRnVuY3Rpb24gKCkiIGxpbms9IkdzdFBhZC5odG1sI0dzdFBhZExpbmtGdW5jdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3NldF91bmxpbmtfZnVuY3Rpb24gKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LXVubGluay1mdW5jdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RQYWRVbmxpbmtGdW5jdGlvbiAoKSIgbGluaz0iR3N0UGFkLmh0bWwjR3N0UGFkVW5saW5rRnVuY3Rpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9hY2NlcHRfY2FwcyAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1hY2NlcHQtY2FwcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3NldF9hY2NlcHRjYXBzX2Z1bmN0aW9uICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1hY2NlcHRjYXBzLWZ1bmN0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFBhZEFjY2VwdENhcHNGdW5jdGlvbiAoKSIgbGluaz0iR3N0UGFkLmh0bWwjR3N0UGFkQWNjZXB0Q2Fwc0Z1bmN0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfc2V0X2dldGNhcHNfZnVuY3Rpb24gKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWdldGNhcHMtZnVuY3Rpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0UGFkR2V0Q2Fwc0Z1bmN0aW9uICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNHc3RQYWRHZXRDYXBzRnVuY3Rpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9wcm94eV9nZXRjYXBzICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXByb3h5LWdldGNhcHMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9maXhhdGVfY2FwcyAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1maXhhdGUtY2FwcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3NldF9maXhhdGVjYXBzX2Z1bmN0aW9uICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1maXhhdGVjYXBzLWZ1bmN0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFBhZEZpeGF0ZUNhcHNGdW5jdGlvbiAoKSIgbGluaz0iR3N0UGFkLmh0bWwjR3N0UGFkRml4YXRlQ2Fwc0Z1bmN0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfcGVlcl9hY2NlcHRfY2FwcyAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1wZWVyLWFjY2VwdC1jYXBzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfc2V0X2FjdGl2YXRlX2Z1bmN0aW9uICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1hY3RpdmF0ZS1mdW5jdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNHc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfc2V0X2FjdGl2YXRlcHVzaF9mdW5jdGlvbiAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtYWN0aXZhdGVwdXNoLWZ1bmN0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfc2V0X2FjdGl2YXRlcHVsbF9mdW5jdGlvbiAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtYWN0aXZhdGVwdWxsLWZ1bmN0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFBhZEFjdGl2YXRlTW9kZUZ1bmN0aW9uICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNHc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX2NoZWNrX3JlY29uZmlndXJlICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWNoZWNrLXJlY29uZmlndXJlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfbWFya19yZWNvbmZpZ3VyZSAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1tYXJrLXJlY29uZmlndXJlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfcHVzaCAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1wdXNoIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfcHVzaF9ldmVudCAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1wdXNoLWV2ZW50Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfcHVzaF9saXN0ICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1c2gtbGlzdCIgc2luY2U9IjAuMTAuMjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9wdWxsX3JhbmdlICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1bGwtcmFuZ2UiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9hY3RpdmF0ZV9wdWxsICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWFjdGl2YXRlLXB1bGwiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9hY3RpdmF0ZV9wdXNoICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWFjdGl2YXRlLXB1c2giLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9zZW5kX2V2ZW50ICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNlbmQtZXZlbnQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9ldmVudF9kZWZhdWx0ICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWV2ZW50LWRlZmF1bHQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9xdWVyeSAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1xdWVyeSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3BlZXJfcXVlcnkgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtcGVlci1xdWVyeSIgc2luY2U9IjAuMTAuMTUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9xdWVyeV9kZWZhdWx0ICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXF1ZXJ5LWRlZmF1bHQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9xdWVyeV9wb3NpdGlvbiAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1xdWVyeS1wb3NpdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3F1ZXJ5X2R1cmF0aW9uICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXF1ZXJ5LWR1cmF0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfcXVlcnlfY29udmVydCAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1xdWVyeS1jb252ZXJ0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfcXVlcnlfcGVlcl9wb3NpdGlvbiAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1xdWVyeS1wZWVyLXBvc2l0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfcXVlcnlfcGVlcl9kdXJhdGlvbiAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1xdWVyeS1wZWVyLWR1cmF0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfcXVlcnlfcGVlcl9jb252ZXJ0ICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXF1ZXJ5LXBlZXItY29udmVydCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtcXVlcnktZnVuY3Rpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0UGFkUXVlcnlGdW5jdGlvbiAoKSIgbGluaz0iR3N0UGFkLmh0bWwjR3N0UGFkUXVlcnlGdW5jdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3NldF9xdWVyeV90eXBlX2Z1bmN0aW9uICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1xdWVyeS10eXBlLWZ1bmN0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFBhZFF1ZXJ5VHlwZUZ1bmN0aW9uICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNHc3RQYWRRdWVyeVR5cGVGdW5jdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX2dldF9xdWVyeV90eXBlcyAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtcXVlcnktdHlwZXMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9nZXRfcXVlcnlfdHlwZXNfZGVmYXVsdCAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtcXVlcnktdHlwZXMtZGVmYXVsdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3NldF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2Z1bmN0aW9uICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1pdGVyYXRlLWludGVybmFsLWxpbmtzLWZ1bmN0aW9uIiBzaW5jZT0iMC4xMC4yMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNHc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rcyAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1pdGVyYXRlLWludGVybmFsLWxpbmtzIiBzaW5jZT0iMC4xMC4yMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZGVmYXVsdCAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1pdGVyYXRlLWludGVybmFsLWxpbmtzLWRlZmF1bHQiIHNpbmNlPSIwLjEwLjIxIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfc2V0X2VsZW1lbnRfcHJpdmF0ZSAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtZWxlbWVudC1wcml2YXRlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtZWxlbWVudC1wcml2YXRlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFBhZEZvcndhcmRGdW5jdGlvbiAoKSIgbGluaz0iR3N0UGFkLmh0bWwjR3N0UGFkRm9yd2FyZEZ1bmN0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfZm9yd2FyZCAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1mb3J3YXJkIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfY2hhaW4gKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtY2hhaW4iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9jaGFpbl9saXN0ICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWNoYWluLWxpc3QiIHNpbmNlPSIwLjEwLjI0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfc3RhcnRfdGFzayAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zdGFydC10YXNrIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfcGF1c2VfdGFzayAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1wYXVzZS10YXNrIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfc3RvcF90YXNrICgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXN0b3AtdGFzayIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3NldF9hY3RpdmUgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWFjdGl2ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX0dFVF9TVFJFQU1fTE9DSygpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUdFVC1TVFJFQU0tTE9DSzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfU1RSRUFNX0xPQ0soKSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1TVFJFQU0tTE9DSzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfU1RSRUFNX0xPQ0tfRlVMTCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELVNUUkVBTS1MT0NLLUZVTEw6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX1NUUkVBTV9UUllMT0NLKCkiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtU1RSRUFNLVRSWUxPQ0s6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX1NUUkVBTV9VTkxPQ0soKSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1TVFJFQU0tVU5MT0NLOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBRF9TVFJFQU1fVU5MT0NLX0ZVTEwoKSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1TVFJFQU0tVU5MT0NLLUZVTEw6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7Y2FwcyZxdW90OyBwcm9wZXJ0eSIgbGluaz0iR3N0UGFkLmh0bWwjR3N0UGFkLS1jYXBzIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtkaXJlY3Rpb24mcXVvdDsgcHJvcGVydHkiIGxpbms9IkdzdFBhZC5odG1sI0dzdFBhZC0tZGlyZWN0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDt0ZW1wbGF0ZSZxdW90OyBwcm9wZXJ0eSIgbGluaz0iR3N0UGFkLmh0bWwjR3N0UGFkLS10ZW1wbGF0ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlICZxdW90O2xpbmtlZCZxdW90OyBzaWduYWwiIGxpbms9IkdzdFBhZC5odG1sI0dzdFBhZC1saW5rZWQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSAmcXVvdDt1bmxpbmtlZCZxdW90OyBzaWduYWwiIGxpbms9IkdzdFBhZC5odG1sI0dzdFBhZC11bmxpbmtlZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFN0YXRpY1BhZFRlbXBsYXRlIiBsaW5rPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFN0YXRpY1BhZFRlbXBsYXRlIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCkiIGxpbms9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR1NULVNUQVRJQy1QQUQtVEVNUExBVEU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgKCkiIGxpbms9IkdzdFBhZFRlbXBsYXRlLmh0bWwjZ3N0LXN0YXRpYy1wYWQtdGVtcGxhdGUtZ2V0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldF9jYXBzICgpIiBsaW5rPSJHc3RQYWRUZW1wbGF0ZS5odG1sI2dzdC1zdGF0aWMtcGFkLXRlbXBsYXRlLWdldC1jYXBzIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UGFkVGVtcGxhdGUiIGxpbms9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkVGVtcGxhdGUtc3RydWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RQYWRUZW1wbGF0ZUZsYWdzIiBsaW5rPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFRlbXBsYXRlRmxhZ3MiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFBhZFByZXNlbmNlIiBsaW5rPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFByZXNlbmNlIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfVEVNUExBVEVfTkFNRV9URU1QTEFURSgpIiBsaW5rPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1QQUQtVEVNUExBVEUtTkFNRS1URU1QTEFURTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfVEVNUExBVEVfRElSRUNUSU9OKCkiIGxpbms9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR1NULVBBRC1URU1QTEFURS1ESVJFQ1RJT046Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX1RFTVBMQVRFX1BSRVNFTkNFKCkiIGxpbms9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR1NULVBBRC1URU1QTEFURS1QUkVTRU5DRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfVEVNUExBVEVfQ0FQUygpIiBsaW5rPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1QQUQtVEVNUExBVEUtQ0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX1RFTVBMQVRFX0lTX0ZJWEVEKCkiIGxpbms9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR1NULVBBRC1URU1QTEFURS1JUy1GSVhFRDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfdGVtcGxhdGVfbmV3ICgpIiBsaW5rPSJHc3RQYWRUZW1wbGF0ZS5odG1sI2dzdC1wYWQtdGVtcGxhdGUtbmV3Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfdGVtcGxhdGVfZ2V0X2NhcHMgKCkiIGxpbms9IkdzdFBhZFRlbXBsYXRlLmh0bWwjZ3N0LXBhZC10ZW1wbGF0ZS1nZXQtY2FwcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7Y2FwcyZxdW90OyBwcm9wZXJ0eSIgbGluaz0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RQYWRUZW1wbGF0ZS0tY2FwcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7ZGlyZWN0aW9uJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFRlbXBsYXRlLS1kaXJlY3Rpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O25hbWUtdGVtcGxhdGUmcXVvdDsgcHJvcGVydHkiIGxpbms9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkVGVtcGxhdGUtLW5hbWUtdGVtcGxhdGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O3ByZXNlbmNlJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFRlbXBsYXRlLS1wcmVzZW5jZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlICZxdW90O3BhZC1jcmVhdGVkJnF1b3Q7IHNpZ25hbCIgbGluaz0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RQYWRUZW1wbGF0ZS1wYWQtY3JlYXRlZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFSQU1fQ09OVFJPTExBQkxFIiBsaW5rPSJnc3RyZWFtZXItR3N0UGFyYW1TcGVjLmh0bWwjR1NULVBBUkFNLUNPTlRST0xMQUJMRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQVJBTV9VU0VSX1NISUZUIiBsaW5rPSJnc3RyZWFtZXItR3N0UGFyYW1TcGVjLmh0bWwjR1NULVBBUkFNLVVTRVItU0hJRlQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFSQU1fTVVUQUJMRV9QQVVTRUQiIGxpbms9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCNHU1QtUEFSQU0tTVVUQUJMRS1QQVVTRUQ6Q0FQUyIgc2luY2U9IjAuMTAuMjMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBUkFNX01VVEFCTEVfUExBWUlORyIgbGluaz0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sI0dTVC1QQVJBTS1NVVRBQkxFLVBMQVlJTkc6Q0FQUyIgc2luY2U9IjAuMTAuMjMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBUkFNX01VVEFCTEVfUkVBRFkiIGxpbms9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCNHU1QtUEFSQU0tTVVUQUJMRS1SRUFEWTpDQVBTIiBzaW5jZT0iMC4xMC4yMyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFBhcmFtU3BlY0ZyYWN0aW9uIiBsaW5rPSJnc3RyZWFtZXItR3N0UGFyYW1TcGVjLmh0bWwjR3N0UGFyYW1TcGVjRnJhY3Rpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhcmFtX3NwZWNfZnJhY3Rpb24gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCNnc3QtcGFyYW0tc3BlYy1mcmFjdGlvbiIgc2luY2U9IjAuMTAuMTQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhcnNlX2Vycm9yX3F1YXJrICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtZXJyb3ItcXVhcmsiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBUlNFX0VSUk9SIiBsaW5rPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHU1QtUEFSU0UtRVJST1I6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0UGFyc2VFcnJvciIgbGluaz0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR3N0UGFyc2VFcnJvciIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0iR3N0UGFyc2VDb250ZXh0IiBsaW5rPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHc3RQYXJzZUNvbnRleHQiIHNpbmNlPSIwLjEwLjIwIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RQYXJzZUZsYWdzIiBsaW5rPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHc3RQYXJzZUZsYWdzIiBzaW5jZT0iMC4xMC4yMCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFyc2VfbGF1bmNoICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtbGF1bmNoIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYXJzZV9sYXVuY2hfZnVsbCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWxhdW5jaC1mdWxsIiBzaW5jZT0iMC4xMC4yMCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFyc2VfbGF1bmNodiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWxhdW5jaHYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhcnNlX2xhdW5jaHZfZnVsbCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWxhdW5jaHYtZnVsbCIgc2luY2U9IjAuMTAuMjAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtYmluLWZyb20tZGVzY3JpcHRpb24iIHNpbmNlPSIwLjEwLjMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uX2Z1bGwgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1iaW4tZnJvbS1kZXNjcmlwdGlvbi1mdWxsIiBzaW5jZT0iMC4xMC4yMCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFyc2VfY29udGV4dF9uZXcgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1jb250ZXh0LW5ldyIgc2luY2U9IjAuMTAuMjAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhcnNlX2NvbnRleHRfZnJlZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWNvbnRleHQtZnJlZSIgc2luY2U9IjAuMTAuMjAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhcnNlX2NvbnRleHRfZ2V0X21pc3NpbmdfZWxlbWVudHMgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1jb250ZXh0LWdldC1taXNzaW5nLWVsZW1lbnRzIiBzaW5jZT0iMC4xMC4yMCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFBpcGVsaW5lIiBsaW5rPSJHc3RQaXBlbGluZS5odG1sI0dzdFBpcGVsaW5lLXN0cnVjdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0UGlwZWxpbmVGbGFncyIgbGluaz0iR3N0UGlwZWxpbmUuaHRtbCNHc3RQaXBlbGluZUZsYWdzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9waXBlbGluZV9uZXcgKCkiIGxpbms9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLW5ldyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGlwZWxpbmVfZ2V0X2J1cyAoKSIgbGluaz0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtZ2V0LWJ1cyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGlwZWxpbmVfc2V0X2Nsb2NrICgpIiBsaW5rPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1zZXQtY2xvY2siLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BpcGVsaW5lX2dldF9jbG9jayAoKSIgbGluaz0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtZ2V0LWNsb2NrIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9waXBlbGluZV91c2VfY2xvY2sgKCkiIGxpbms9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLXVzZS1jbG9jayIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGlwZWxpbmVfYXV0b19jbG9jayAoKSIgbGluaz0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtYXV0by1jbG9jayIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGlwZWxpbmVfc2V0X2F1dG9fZmx1c2hfYnVzICgpIiBsaW5rPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1zZXQtYXV0by1mbHVzaC1idXMiIHNpbmNlPSIwLjEwLjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BpcGVsaW5lX2dldF9hdXRvX2ZsdXNoX2J1cyAoKSIgbGluaz0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtZ2V0LWF1dG8tZmx1c2gtYnVzIiBzaW5jZT0iMC4xMC40Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9waXBlbGluZV9zZXRfZGVsYXkgKCkiIGxpbms9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLXNldC1kZWxheSIgc2luY2U9IjAuMTAuNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGlwZWxpbmVfZ2V0X2RlbGF5ICgpIiBsaW5rPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1nZXQtZGVsYXkiIHNpbmNlPSIwLjEwLjUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O2F1dG8tZmx1c2gtYnVzJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJHc3RQaXBlbGluZS5odG1sI0dzdFBpcGVsaW5lLS1hdXRvLWZsdXNoLWJ1cyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7ZGVsYXkmcXVvdDsgcHJvcGVydHkiIGxpbms9IkdzdFBpcGVsaW5lLmh0bWwjR3N0UGlwZWxpbmUtLWRlbGF5Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wbHVnaW5fZXJyb3JfcXVhcmsgKCkiIGxpbms9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tZXJyb3ItcXVhcmsiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BMVUdJTl9FUlJPUiIgbGluaz0iR3N0UGx1Z2luLmh0bWwjR1NULVBMVUdJTi1FUlJPUjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RQbHVnaW5FcnJvciIgbGluaz0iR3N0UGx1Z2luLmh0bWwjR3N0UGx1Z2luRXJyb3IiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RQbHVnaW4iIGxpbms9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbi1zdHJ1Y3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RQbHVnaW5EZXNjIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5EZXNjIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFBsdWdpbkluaXRGdW5jICgpIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5Jbml0RnVuYyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RQbHVnaW5Jbml0RnVsbEZ1bmMgKCkiIGxpbms9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkluaXRGdWxsRnVuYyIgc2luY2U9IjAuMTAuMjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BMVUdJTl9ERUZJTkUoKSIgbGluaz0iR3N0UGx1Z2luLmh0bWwjR1NULVBMVUdJTi1ERUZJTkU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfTElDRU5TRV9VTktOT1dOIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNHU1QtTElDRU5TRS1VTktOT1dOOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0UGx1Z2luRmlsdGVyICgpIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5GaWx0ZXIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BsdWdpbl9nZXRfbmFtZSAoKSIgbGluaz0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1nZXQtbmFtZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGx1Z2luX2dldF9kZXNjcmlwdGlvbiAoKSIgbGluaz0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1nZXQtZGVzY3JpcHRpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BsdWdpbl9nZXRfZmlsZW5hbWUgKCkiIGxpbms9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tZ2V0LWZpbGVuYW1lIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wbHVnaW5fZ2V0X2xpY2Vuc2UgKCkiIGxpbms9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tZ2V0LWxpY2Vuc2UiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BsdWdpbl9nZXRfcGFja2FnZSAoKSIgbGluaz0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1nZXQtcGFja2FnZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGx1Z2luX2dldF9vcmlnaW4gKCkiIGxpbms9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tZ2V0LW9yaWdpbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGx1Z2luX2dldF9zb3VyY2UgKCkiIGxpbms9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tZ2V0LXNvdXJjZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGx1Z2luX2dldF92ZXJzaW9uICgpIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWdldC12ZXJzaW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wbHVnaW5fZ2V0X21vZHVsZSAoKSIgbGluaz0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1nZXQtbW9kdWxlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wbHVnaW5faXNfbG9hZGVkICgpIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWlzLWxvYWRlZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGx1Z2luX2dldF9jYWNoZV9kYXRhICgpIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWdldC1jYWNoZS1kYXRhIiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGx1Z2luX3NldF9jYWNoZV9kYXRhICgpIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLXNldC1jYWNoZS1kYXRhIiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGx1Z2luX25hbWVfZmlsdGVyICgpIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLW5hbWUtZmlsdGVyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wbHVnaW5fbG9hZF9maWxlICgpIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWxvYWQtZmlsZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGx1Z2luX2xvYWQgKCkiIGxpbms9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tbG9hZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGx1Z2luX2xvYWRfYnlfbmFtZSAoKSIgbGluaz0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1sb2FkLWJ5LW5hbWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BsdWdpbl9saXN0X2ZyZWUgKCkiIGxpbms9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tbGlzdC1mcmVlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljICgpIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLXJlZ2lzdGVyLXN0YXRpYyIgc2luY2U9IjAuMTAuMTYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWNfZnVsbCAoKSIgbGluaz0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1yZWdpc3Rlci1zdGF0aWMtZnVsbCIgc2luY2U9IjAuMTAuMjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFBsdWdpbkZsYWdzIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5GbGFncyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0UGx1Z2luRGVwZW5kZW5jeUZsYWdzIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3MiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wbHVnaW5fYWRkX2RlcGVuZGVuY3kgKCkiIGxpbms9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tYWRkLWRlcGVuZGVuY3kiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wbHVnaW5fYWRkX2RlcGVuZGVuY3lfc2ltcGxlICgpIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWFkZC1kZXBlbmRlbmN5LXNpbXBsZSIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RQbHVnaW5GZWF0dXJlIiBsaW5rPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjR3N0UGx1Z2luRmVhdHVyZS1zdHJ1Y3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9IkdzdFR5cGVOYW1lRGF0YSIgbGluaz0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI0dzdFR5cGVOYW1lRGF0YSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RQbHVnaW5GZWF0dXJlRmlsdGVyICgpIiBsaW5rPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjR3N0UGx1Z2luRmVhdHVyZUZpbHRlciIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0UmFuayIgbGluaz0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI0dzdFJhbmsiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BsdWdpbl9mZWF0dXJlX3R5cGVfbmFtZV9maWx0ZXIgKCkiIGxpbms9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtdHlwZS1uYW1lLWZpbHRlciIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGx1Z2luX2ZlYXR1cmVfc2V0X3JhbmsgKCkiIGxpbms9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtc2V0LXJhbmsiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X3BsdWdpbl9mZWF0dXJlX3NldF9uYW1lKCkiIGxpbms9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtc2V0LW5hbWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9yYW5rICgpIiBsaW5rPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLWdldC1yYW5rIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfbmFtZSgpIiBsaW5rPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLWdldC1uYW1lIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wbHVnaW5fZmVhdHVyZV9sb2FkICgpIiBsaW5rPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLWxvYWQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfY29weSAoKSIgbGluaz0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI2dzdC1wbHVnaW4tZmVhdHVyZS1saXN0LWNvcHkiIHNpbmNlPSIwLjEwLjI2Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUgKCkiIGxpbms9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtbGlzdC1mcmVlIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QTFVHSU5fRkVBVFVSRV9MSVNUX0RFQlVHKCkiIGxpbms9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNHU1QtUExVR0lOLUZFQVRVUkUtTElTVC1ERUJVRzpDQVBTIiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGx1Z2luX2ZlYXR1cmVfY2hlY2tfdmVyc2lvbiAoKSIgbGluaz0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI2dzdC1wbHVnaW4tZmVhdHVyZS1jaGVjay12ZXJzaW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wbHVnaW5fZmVhdHVyZV9yYW5rX2NvbXBhcmVfZnVuYyAoKSIgbGluaz0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI2dzdC1wbHVnaW4tZmVhdHVyZS1yYW5rLWNvbXBhcmUtZnVuYyIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9IkdzdFBvbGwiIGxpbms9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0iR3N0UG9sbEZEIiBsaW5rPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGxGRCIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUE9MTF9GRF9JTklUIiBsaW5rPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dTVC1QT0xMLUZELUlOSVQ6Q0FQUyIgc2luY2U9IjAuMTAuMTgiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BvbGxfYWRkX2ZkICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWFkZC1mZCIgc2luY2U9IjAuMTAuMTgiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BvbGxfZmRfY2FuX3JlYWQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtY2FuLXJlYWQiIHNpbmNlPSIwLjEwLjE4Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wb2xsX2ZkX2Nhbl93cml0ZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1mZC1jYW4td3JpdGUiIHNpbmNlPSIwLjEwLjE4Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wb2xsX2ZkX2N0bF9yZWFkICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWZkLWN0bC1yZWFkIiBzaW5jZT0iMC4xMC4xOCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcG9sbF9mZF9jdGxfd3JpdGUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtY3RsLXdyaXRlIiBzaW5jZT0iMC4xMC4xOCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcG9sbF9mZF9oYXNfY2xvc2VkICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWZkLWhhcy1jbG9zZWQiIHNpbmNlPSIwLjEwLjE4Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wb2xsX2ZkX2hhc19lcnJvciAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1mZC1oYXMtZXJyb3IiIHNpbmNlPSIwLjEwLjE4Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wb2xsX2ZkX2lnbm9yZWQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtaWdub3JlZCIgc2luY2U9IjAuMTAuMTgiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BvbGxfZmRfaW5pdCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1mZC1pbml0IiBzaW5jZT0iMC4xMC4xOCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcG9sbF9mcmVlICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWZyZWUiIHNpbmNlPSIwLjEwLjE4Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wb2xsX25ldyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1uZXciIHNpbmNlPSIwLjEwLjE4Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wb2xsX25ld190aW1lciAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1uZXctdGltZXIiIHNpbmNlPSIwLjEwLjIzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wb2xsX2dldF9yZWFkX2dwb2xsZmQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZ2V0LXJlYWQtZ3BvbGxmZCIgc2luY2U9IjAuMTAuMzIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BvbGxfcmVtb3ZlX2ZkICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXJlbW92ZS1mZCIgc2luY2U9IjAuMTAuMTgiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BvbGxfcmVzdGFydCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1yZXN0YXJ0IiBzaW5jZT0iMC4xMC4xOCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcG9sbF9zZXRfY29udHJvbGxhYmxlICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXNldC1jb250cm9sbGFibGUiIHNpbmNlPSIwLjEwLjE4Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wb2xsX3NldF9mbHVzaGluZyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1zZXQtZmx1c2hpbmciIHNpbmNlPSIwLjEwLjE4Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wb2xsX3dhaXQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtd2FpdCIgc2luY2U9IjAuMTAuMTgiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BvbGxfcmVhZF9jb250cm9sICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXJlYWQtY29udHJvbCIgc2luY2U9IjAuMTAuMjMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BvbGxfd3JpdGVfY29udHJvbCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC13cml0ZS1jb250cm9sIiBzaW5jZT0iMC4xMC4yMyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0iR3N0UHJlc2V0IiBsaW5rPSJHc3RQcmVzZXQuaHRtbCNHc3RQcmVzZXQtc3RydWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UHJlc2V0SW50ZXJmYWNlIiBsaW5rPSJHc3RQcmVzZXQuaHRtbCNHc3RQcmVzZXRJbnRlcmZhY2UiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ByZXNldF9nZXRfcHJlc2V0X25hbWVzICgpIiBsaW5rPSJHc3RQcmVzZXQuaHRtbCNnc3QtcHJlc2V0LWdldC1wcmVzZXQtbmFtZXMiIHNpbmNlPSIwLjEwLjIwIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wcmVzZXRfZ2V0X3Byb3BlcnR5X25hbWVzICgpIiBsaW5rPSJHc3RQcmVzZXQuaHRtbCNnc3QtcHJlc2V0LWdldC1wcm9wZXJ0eS1uYW1lcyIgc2luY2U9IjAuMTAuMjAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ByZXNldF9sb2FkX3ByZXNldCAoKSIgbGluaz0iR3N0UHJlc2V0Lmh0bWwjZ3N0LXByZXNldC1sb2FkLXByZXNldCIgc2luY2U9IjAuMTAuMjAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ByZXNldF9zYXZlX3ByZXNldCAoKSIgbGluaz0iR3N0UHJlc2V0Lmh0bWwjZ3N0LXByZXNldC1zYXZlLXByZXNldCIgc2luY2U9IjAuMTAuMjAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ByZXNldF9yZW5hbWVfcHJlc2V0ICgpIiBsaW5rPSJHc3RQcmVzZXQuaHRtbCNnc3QtcHJlc2V0LXJlbmFtZS1wcmVzZXQiIHNpbmNlPSIwLjEwLjIwIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wcmVzZXRfZGVsZXRlX3ByZXNldCAoKSIgbGluaz0iR3N0UHJlc2V0Lmh0bWwjZ3N0LXByZXNldC1kZWxldGUtcHJlc2V0IiBzaW5jZT0iMC4xMC4yMCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcHJlc2V0X3NldF9tZXRhICgpIiBsaW5rPSJHc3RQcmVzZXQuaHRtbCNnc3QtcHJlc2V0LXNldC1tZXRhIiBzaW5jZT0iMC4xMC4yMCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcHJlc2V0X2dldF9tZXRhICgpIiBsaW5rPSJHc3RQcmVzZXQuaHRtbCNnc3QtcHJlc2V0LWdldC1tZXRhIiBzaW5jZT0iMC4xMC4yMCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFF1ZXJ5IiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0UXVlcnlUeXBlIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1FVRVJZX1RZUEVfTkFNRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHU1QtUVVFUlktVFlQRS1OQU1FOkNBUFMiIHNpbmNlPSIwLjEwLjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RRdWVyeVR5cGVEZWZpbml0aW9uIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGVEZWZpbml0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV90eXBlX2dldF9uYW1lICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktdHlwZS1nZXQtbmFtZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfdHlwZV90b19xdWFyayAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXR5cGUtdG8tcXVhcmsiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3R5cGVfcmVnaXN0ZXIgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS10eXBlLXJlZ2lzdGVyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV90eXBlX2dldF9ieV9uaWNrICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktdHlwZS1nZXQtYnktbmljayIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfdHlwZXNfY29udGFpbnMgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS10eXBlcy1jb250YWlucyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfdHlwZV9nZXRfZGV0YWlscyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXR5cGUtZ2V0LWRldGFpbHMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3R5cGVfaXRlcmF0ZV9kZWZpbml0aW9ucyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXR5cGUtaXRlcmF0ZS1kZWZpbml0aW9ucyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfcmVmICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcmVmIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV91bnJlZiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXVucmVmIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9jb3B5ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktY29weSIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfcXVlcnlfbWFrZV93cml0YWJsZSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbWFrZS13cml0YWJsZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfcXVlcnlfaXNfd3JpdGFibGUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWlzLXdyaXRhYmxlIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9xdWVyeV9yZXBsYWNlKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1yZXBsYWNlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV93cml0YWJsZV9zdHJ1Y3R1cmUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS13cml0YWJsZS1zdHJ1Y3R1cmUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X25ld19jdXN0b20gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctY3VzdG9tIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9nZXRfc3RydWN0dXJlICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktZ2V0LXN0cnVjdHVyZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfbmV3X2NvbnZlcnQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctY29udmVydCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfc2V0X2NvbnZlcnQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtY29udmVydCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfcGFyc2VfY29udmVydCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLWNvbnZlcnQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X25ld19wb3NpdGlvbiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1wb3NpdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfc2V0X3Bvc2l0aW9uICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LXBvc2l0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLXBvc2l0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9uZXdfZHVyYXRpb24gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctZHVyYXRpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1kdXJhdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfcGFyc2VfZHVyYXRpb24gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1kdXJhdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfbmV3X2xhdGVuY3kgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctbGF0ZW5jeSIgc2luY2U9IjAuMTAuMTIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3BhcnNlX2xhdGVuY3kgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1sYXRlbmN5IiBzaW5jZT0iMC4xMC4xMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfc2V0X2xhdGVuY3kgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtbGF0ZW5jeSIgc2luY2U9IjAuMTAuMTIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X25ld19zZWVraW5nICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbmV3LXNlZWtpbmciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3NldF9zZWVraW5nICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LXNlZWtpbmciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmcgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1zZWVraW5nIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9uZXdfZm9ybWF0cyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1mb3JtYXRzIiBzaW5jZT0iMC4xMC40Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9zZXRfZm9ybWF0cyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1mb3JtYXRzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9zZXRfZm9ybWF0c3YgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtZm9ybWF0c3YiIHNpbmNlPSIwLjEwLjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3BhcnNlX25fZm9ybWF0cyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLW4tZm9ybWF0cyIgc2luY2U9IjAuMTAuNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfcGFyc2VfbnRoX2Zvcm1hdCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLW50aC1mb3JtYXQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X25ld19zZWdtZW50ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbmV3LXNlZ21lbnQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3NldF9zZWdtZW50ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LXNlZ21lbnQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3BhcnNlX3NlZ21lbnQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1zZWdtZW50Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RCdWZmZXJpbmdNb2RlIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RCdWZmZXJpbmdNb2RlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9uZXdfYnVmZmVyaW5nICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbmV3LWJ1ZmZlcmluZyIgc2luY2U9IjAuMTAuMjAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfcGVyY2VudCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1idWZmZXJpbmctcGVyY2VudCIgc2luY2U9IjAuMTAuMjAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19wZXJjZW50ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtYnVmZmVyaW5nLXBlcmNlbnQiIHNpbmNlPSIwLjEwLjIwIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3N0YXRzICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LWJ1ZmZlcmluZy1zdGF0cyIgc2luY2U9IjAuMTAuMjAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19zdGF0cyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLWJ1ZmZlcmluZy1zdGF0cyIgc2luY2U9IjAuMTAuMjAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfcmFuZ2UgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtYnVmZmVyaW5nLXJhbmdlIiBzaW5jZT0iMC4xMC4yMCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3JhbmdlICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtYnVmZmVyaW5nLXJhbmdlIiBzaW5jZT0iMC4xMC4yMCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfYWRkX2J1ZmZlcmluZ19yYW5nZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWFkZC1idWZmZXJpbmctcmFuZ2UiIHNpbmNlPSIwLjEwLjMxIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9nZXRfbl9idWZmZXJpbmdfcmFuZ2VzICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktZ2V0LW4tYnVmZmVyaW5nLXJhbmdlcyIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3BhcnNlX250aF9idWZmZXJpbmdfcmFuZ2UgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1udGgtYnVmZmVyaW5nLXJhbmdlIiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfbmV3X3VyaSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy11cmkiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9wYXJzZV91cmkgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS11cmkiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9zZXRfdXJpICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LXVyaSIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X25ld19hbGxvY2F0aW9uICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbmV3LWFsbG9jYXRpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3BhcnNlX2FsbG9jYXRpb24gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1hbGxvY2F0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9wYXJzZV9hbGxvY2F0aW9uX3BhcmFtcyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLWFsbG9jYXRpb24tcGFyYW1zIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9tZW1vcnkgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1udGgtYWxsb2NhdGlvbi1tZW1vcnkiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX21ldGEgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1udGgtYWxsb2NhdGlvbi1tZXRhIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9zZXRfYWxsb2NhdGlvbl9wYXJhbXMgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtYWxsb2NhdGlvbi1wYXJhbXMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21lbW9yeSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWFkZC1hbGxvY2F0aW9uLW1lbW9yeSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fbWV0YSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWFkZC1hbGxvY2F0aW9uLW1ldGEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X2hhc19hbGxvY2F0aW9uX21ldGEgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1oYXMtYWxsb2NhdGlvbi1tZXRhIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX21lbW9yaWVzICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktZ2V0LW4tYWxsb2NhdGlvbi1tZW1vcmllcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9tZXRhcyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWdldC1uLWFsbG9jYXRpb24tbWV0YXMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X25ld19zY2hlZHVsaW5nICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbmV3LXNjaGVkdWxpbmciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3BhcnNlX3NjaGVkdWxpbmcgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1zY2hlZHVsaW5nIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9zZXRfc2NoZWR1bGluZyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1zY2hlZHVsaW5nIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UmVnaXN0cnkiIGxpbms9IkdzdFJlZ2lzdHJ5Lmh0bWwjR3N0UmVnaXN0cnktc3RydWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9yZWdpc3RyeV9nZXRfZGVmYXVsdCAoKSIgbGluaz0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktZ2V0LWRlZmF1bHQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3QgKCkiIGxpbms9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWdldC1mZWF0dXJlLWxpc3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3RfY29va2llICgpIiBsaW5rPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1nZXQtZmVhdHVyZS1saXN0LWNvb2tpZSIgc2luY2U9IjAuMTAuMjYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3RfYnlfcGx1Z2luICgpIiBsaW5rPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1nZXQtZmVhdHVyZS1saXN0LWJ5LXBsdWdpbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcmVnaXN0cnlfZ2V0X3BhdGhfbGlzdCAoKSIgbGluaz0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktZ2V0LXBhdGgtbGlzdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcmVnaXN0cnlfZ2V0X3BsdWdpbl9saXN0ICgpIiBsaW5rPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1nZXQtcGx1Z2luLWxpc3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3JlZ2lzdHJ5X2FkZF9wbHVnaW4gKCkiIGxpbms9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWFkZC1wbHVnaW4iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9wbHVnaW4gKCkiIGxpbms9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LXJlbW92ZS1wbHVnaW4iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3JlZ2lzdHJ5X3BsdWdpbl9maWx0ZXIgKCkiIGxpbms9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LXBsdWdpbi1maWx0ZXIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3JlZ2lzdHJ5X2ZlYXR1cmVfZmlsdGVyICgpIiBsaW5rPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1mZWF0dXJlLWZpbHRlciIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcmVnaXN0cnlfZmluZF9wbHVnaW4gKCkiIGxpbms9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWZpbmQtcGx1Z2luIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9yZWdpc3RyeV9maW5kX2ZlYXR1cmUgKCkiIGxpbms9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWZpbmQtZmVhdHVyZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcmVnaXN0cnlfbG9va3VwX2ZlYXR1cmUgKCkiIGxpbms9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWxvb2t1cC1mZWF0dXJlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9yZWdpc3RyeV9hZGRfcGF0aCAoKSIgbGluaz0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktYWRkLXBhdGgiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aCAoKSIgbGluaz0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktc2Nhbi1wYXRoIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9yZWdpc3RyeV9sb29rdXAgKCkiIGxpbms9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWxvb2t1cCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcmVnaXN0cnlfcmVtb3ZlX2ZlYXR1cmUgKCkiIGxpbms9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LXJlbW92ZS1mZWF0dXJlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9yZWdpc3RyeV9hZGRfZmVhdHVyZSAoKSIgbGluaz0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktYWRkLWZlYXR1cmUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RlZmF1bHRfcmVnaXN0cnlfY2hlY2tfZmVhdHVyZV92ZXJzaW9uICgpIiBsaW5rPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1kZWZhdWx0LXJlZ2lzdHJ5LWNoZWNrLWZlYXR1cmUtdmVyc2lvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfZGVmYXVsdF9yZWdpc3RyeV9nZXRfcGF0aF9saXN0IiBsaW5rPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1kZWZhdWx0LXJlZ2lzdHJ5LWdldC1wYXRoLWxpc3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2RlZmF1bHRfcmVnaXN0cnlfYWRkX3BsdWdpbigpIiBsaW5rPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1kZWZhdWx0LXJlZ2lzdHJ5LWFkZC1wbHVnaW4iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2RlZmF1bHRfcmVnaXN0cnlfYWRkX3BhdGgoKSIgbGluaz0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtZGVmYXVsdC1yZWdpc3RyeS1hZGQtcGF0aCIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfZGVmYXVsdF9yZWdpc3RyeV9maW5kX3BsdWdpbigpIiBsaW5rPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1kZWZhdWx0LXJlZ2lzdHJ5LWZpbmQtcGx1Z2luIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2ZpbmRfZmVhdHVyZSgpIiBsaW5rPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1kZWZhdWx0LXJlZ2lzdHJ5LWZpbmQtZmVhdHVyZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfZGVmYXVsdF9yZWdpc3RyeV9nZXRfcGx1Z2luX2xpc3QiIGxpbms9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LWRlZmF1bHQtcmVnaXN0cnktZ2V0LXBsdWdpbi1saXN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3RfY29va2llIiBsaW5rPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1kZWZhdWx0LXJlZ2lzdHJ5LWdldC1mZWF0dXJlLWxpc3QtY29va2llIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfZGVmYXVsdF9yZWdpc3RyeV9mZWF0dXJlX2ZpbHRlcigpIiBsaW5rPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1kZWZhdWx0LXJlZ2lzdHJ5LWZlYXR1cmUtZmlsdGVyIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUgJnF1b3Q7ZmVhdHVyZS1hZGRlZCZxdW90OyBzaWduYWwiIGxpbms9IkdzdFJlZ2lzdHJ5Lmh0bWwjR3N0UmVnaXN0cnktZmVhdHVyZS1hZGRlZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlICZxdW90O3BsdWdpbi1hZGRlZCZxdW90OyBzaWduYWwiIGxpbms9IkdzdFJlZ2lzdHJ5Lmh0bWwjR3N0UmVnaXN0cnktcGx1Z2luLWFkZGVkIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0U2VnbWVudCIgbGluaz0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNHc3RTZWdtZW50Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RTZWdtZW50RmxhZ3MiIGxpbms9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudEZsYWdzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zZWdtZW50X2NsaXAgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtY2xpcCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc2VnbWVudF9pbml0ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LWluaXQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3NlZ21lbnRfbmV3ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LW5ldyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc2VnbWVudF9jb3B5ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LWNvcHkiIHNpbmNlPSIwLjEwLjIwIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zZWdtZW50X2ZyZWUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtZnJlZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc2VnbWVudF9kb19zZWVrICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LWRvLXNlZWsiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LXRvLXJ1bm5pbmctdGltZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC10by1zdHJlYW0tdGltZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc2VnbWVudF90b19wb3NpdGlvbiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC10by1wb3NpdGlvbiIgc2luY2U9IjAuMTAuMjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3NlZ21lbnRfc2V0X3J1bm5pbmdfdGltZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1zZXQtcnVubmluZy10aW1lIiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc2VnbWVudF9jb3B5X2ludG8gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtY29weS1pbnRvIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFN0cnVjdHVyZUZvcmVhY2hGdW5jICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlRm9yZWFjaEZ1bmMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0U3RydWN0dXJlTWFwRnVuYyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZU1hcEZ1bmMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9lbXB0eV9uZXcgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWVtcHR5LW5ldyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2lkX2VtcHR5X25ldyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaWQtZW1wdHktbmV3Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfbmV3ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1uZXciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9uZXdfdmFsaXN0ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1uZXctdmFsaXN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfaWRfbmV3ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1uZXciIHNpbmNlPSIwLjEwLjI0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfY29weSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtY29weSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2ZyZWUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZyZWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LW5hbWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaGFzLW5hbWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9zZXRfbmFtZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtc2V0LW5hbWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZV9pZCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LW5hbWUtaWQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWlkLWdldCIgc2luY2U9IjAuMTAuMjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsaXN0ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1nZXQtdmFsaXN0IiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaWQtZ2V0LXZhbHVlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1zZXQtdmFsdWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9pZF90YWtlX3ZhbHVlICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC10YWtlLXZhbHVlIiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2dldCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0IiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2dldF92YWxpc3QgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC12YWxpc3QiIHNpbmNlPSIwLjEwLjI0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtdmFsdWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9zZXRfdmFsdWUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXNldC12YWx1ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX3Rha2VfdmFsdWUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXRha2UtdmFsdWUiIHNpbmNlPSIwLjEwLjMxIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfc2V0ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1zZXQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9zZXRfdmFsaXN0ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1zZXQtdmFsaXN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfaWRfc2V0ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1zZXQiIHNpbmNlPSIwLjEwLjEwIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbGlzdCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaWQtc2V0LXZhbGlzdCIgc2luY2U9IjAuMTAuMTAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXJlbW92ZS1maWVsZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZHMgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXJlbW92ZS1maWVsZHMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzX3ZhbGlzdCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtcmVtb3ZlLWZpZWxkcy12YWxpc3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9yZW1vdmVfYWxsX2ZpZWxkcyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtcmVtb3ZlLWFsbC1maWVsZHMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9nZXRfZmllbGRfdHlwZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LWZpZWxkLXR5cGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9mb3JlYWNoICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1mb3JlYWNoIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfbl9maWVsZHMgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLW4tZmllbGRzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1oYXMtZmllbGQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGRfdHlwZWQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWhhcy1maWVsZC10eXBlZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2lzX2VxdWFsICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pcy1lcXVhbCIgc2luY2U9IjAuMTAuMzUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9pc19zdWJzZXQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWlzLXN1YnNldCIgc2luY2U9IjAuMTAuMzUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9jYW5faW50ZXJzZWN0ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1jYW4taW50ZXJzZWN0IiBzaW5jZT0iMC4xMC4zNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2ludGVyc2VjdCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaW50ZXJzZWN0IiBzaW5jZT0iMC4xMC4zNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2lkX2hhc19maWVsZCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaWQtaGFzLWZpZWxkIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2lkX2hhc19maWVsZF90eXBlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaWQtaGFzLWZpZWxkLXR5cGVkIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2dldF9ib29sZWFuICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtYm9vbGVhbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2dldF9pbnQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1pbnQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9nZXRfdWludCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LXVpbnQiIHNpbmNlPSIwLjEwLjE1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LWRvdWJsZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1zdHJpbmciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9nZXRfZGF0ZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LWRhdGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9nZXRfZGF0ZV90aW1lICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtZGF0ZS10aW1lIiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2dldF9jbG9ja190aW1lICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtY2xvY2stdGltZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2dldF9lbnVtICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtZW51bSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2dldF9mcmFjdGlvbiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LWZyYWN0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfbWFwX2luX3BsYWNlICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1tYXAtaW4tcGxhY2UiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9udGhfZmllbGRfbmFtZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtbnRoLWZpZWxkLW5hbWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9zZXRfcGFyZW50X3JlZmNvdW50ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1zZXQtcGFyZW50LXJlZmNvdW50Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS10by1zdHJpbmciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZnJvbS1zdHJpbmciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9maXhhdGUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZpeGF0ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZml4YXRlLWZpZWxkIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfaW50ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1maXhhdGUtZmllbGQtbmVhcmVzdC1pbnQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9kb3VibGUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZC1uZWFyZXN0LWRvdWJsZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ZyYWN0aW9uICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1maXhhdGUtZmllbGQtbmVhcmVzdC1mcmFjdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9ib29sZWFuICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1maXhhdGUtZmllbGQtYm9vbGVhbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9zdHJpbmcgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZC1zdHJpbmciIHNpbmNlPSIwLjEwLjMwIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RDbG9ja1R5cGUiIGxpbms9IkdzdFN5c3RlbUNsb2NrLmh0bWwjR3N0Q2xvY2tUeXBlIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0U3lzdGVtQ2xvY2siIGxpbms9IkdzdFN5c3RlbUNsb2NrLmh0bWwjR3N0U3lzdGVtQ2xvY2stc3RydWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zeXN0ZW1fY2xvY2tfb2J0YWluICgpIiBsaW5rPSJHc3RTeXN0ZW1DbG9jay5odG1sI2dzdC1zeXN0ZW0tY2xvY2stb2J0YWluIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtjbG9jay10eXBlJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJHc3RTeXN0ZW1DbG9jay5odG1sI0dzdFN5c3RlbUNsb2NrLS1jbG9jay10eXBlIi8+CisgICAgPGtleXdvcmQgdHlwZT0idHlwZWRlZiIgbmFtZT0iR3N0VGFnTGlzdCIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RUYWdNZXJnZU1vZGUiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VNb2RlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RUYWdGbGFnIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0ZsYWciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0VGFnRm9yZWFjaEZ1bmMgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnRm9yZWFjaEZ1bmMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0VGFnTWVyZ2VGdW5jICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ01lcmdlRnVuYyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX1RJVExFIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVElUTEU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX1RJVExFX1NPUlROQU1FIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVElUTEUtU09SVE5BTUU6Q0FQUyIgc2luY2U9IjAuMTAuMTUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19BUlRJU1QiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BUlRJU1Q6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0FSVElTVF9TT1JUTkFNRSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFSVElTVC1TT1JUTkFNRTpDQVBTIiBzaW5jZT0iMC4xMC4xNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0FMQlVNIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQUxCVU06Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0FMQlVNX1NPUlROQU1FIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQUxCVU0tU09SVE5BTUU6Q0FQUyIgc2luY2U9IjAuMTAuMTUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19BTEJVTV9BUlRJU1QiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BTEJVTS1BUlRJU1Q6Q0FQUyIgc2luY2U9IjAuMTAuMjUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19BTEJVTV9BUlRJU1RfU09SVE5BTUUiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BTEJVTS1BUlRJU1QtU09SVE5BTUU6Q0FQUyIgc2luY2U9IjAuMTAuMjUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19EQVRFIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctREFURTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfREFURV9USU1FIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctREFURS1USU1FOkNBUFMiIHNpbmNlPSIwLjEwLjMxIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfR0VOUkUiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1HRU5SRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfQ09NTUVOVCIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUNPTU1FTlQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0VYVEVOREVEX0NPTU1FTlQiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1FWFRFTkRFRC1DT01NRU5UOkNBUFMiIHNpbmNlPSIwLjEwLjEwIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfVFJBQ0tfTlVNQkVSIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVFJBQ0stTlVNQkVSOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19UUkFDS19DT1VOVCIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVRSQUNLLUNPVU5UOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19BTEJVTV9WT0xVTUVfTlVNQkVSIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQUxCVU0tVk9MVU1FLU5VTUJFUjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfQUxCVU1fVk9MVU1FX0NPVU5UIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQUxCVU0tVk9MVU1FLUNPVU5UOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19MT0NBVElPTiIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUxPQ0FUSU9OOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19IT01FUEFHRSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUhPTUVQQUdFOkNBUFMiIHNpbmNlPSIwLjEwLjIzIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfREVTQ1JJUFRJT04iIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1ERVNDUklQVElPTjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfVkVSU0lPTiIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVZFUlNJT046Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0lTUkMiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1JU1JDOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19PUkdBTklaQVRJT04iIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1PUkdBTklaQVRJT046Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0NPUFlSSUdIVCIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUNPUFlSSUdIVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfQ09QWVJJR0hUX1VSSSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUNPUFlSSUdIVC1VUkk6Q0FQUyIgc2luY2U9IjAuMTAuMTQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19FTkNPREVEX0JZIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctRU5DT0RFRC1CWTpDQVBTIiBzaW5jZT0iMC4xMC4zMyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0NPTVBPU0VSIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQ09NUE9TRVI6Q0FQUyIgc2luY2U9IjAuMTAuMTUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19DT05UQUNUIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQ09OVEFDVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfTElDRU5TRSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUxJQ0VOU0U6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0xJQ0VOU0VfVVJJIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTElDRU5TRS1VUkk6Q0FQUyIgc2luY2U9IjAuMTAuMTQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19QRVJGT1JNRVIiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1QRVJGT1JNRVI6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0RVUkFUSU9OIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctRFVSQVRJT046Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0NPREVDIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQ09ERUM6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX1ZJREVPX0NPREVDIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVklERU8tQ09ERUM6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0FVRElPX0NPREVDIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQVVESU8tQ09ERUM6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX1NVQlRJVExFX0NPREVDIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctU1VCVElUTEUtQ09ERUM6Q0FQUyIgc2luY2U9IjAuMTAuMjMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19DT05UQUlORVJfRk9STUFUIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQ09OVEFJTkVSLUZPUk1BVDpDQVBTIiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0JJVFJBVEUiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1CSVRSQVRFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19OT01JTkFMX0JJVFJBVEUiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1OT01JTkFMLUJJVFJBVEU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX01JTklNVU1fQklUUkFURSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLU1JTklNVU0tQklUUkFURTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfTUFYSU1VTV9CSVRSQVRFIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTUFYSU1VTS1CSVRSQVRFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19TRVJJQUwiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1TRVJJQUw6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0VOQ09ERVIiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1FTkNPREVSOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19FTkNPREVSX1ZFUlNJT04iIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1FTkNPREVSLVZFUlNJT046Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX1RSQUNLX0dBSU4iIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1UUkFDSy1HQUlOOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19UUkFDS19QRUFLIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVFJBQ0stUEVBSzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfQUxCVU1fR0FJTiIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFMQlVNLUdBSU46Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0FMQlVNX1BFQUsiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BTEJVTS1QRUFLOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19SRUZFUkVOQ0VfTEVWRUwiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1SRUZFUkVOQ0UtTEVWRUw6Q0FQUyIgc2luY2U9IjAuMTAuMTIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19MQU5HVUFHRV9DT0RFIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTEFOR1VBR0UtQ09ERTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfSU1BR0UiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1JTUFHRTpDQVBTIiBzaW5jZT0iMC4xMC42Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfUFJFVklFV19JTUFHRSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVBSRVZJRVctSU1BR0U6Q0FQUyIgc2luY2U9IjAuMTAuNyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0FUVEFDSE1FTlQiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BVFRBQ0hNRU5UOkNBUFMiIHNpbmNlPSIwLjEwLjIxIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfQkVBVFNfUEVSX01JTlVURSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUJFQVRTLVBFUi1NSU5VVEU6Q0FQUyIgc2luY2U9IjAuMTAuMTIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19LRVlXT1JEUyIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUtFWVdPUkRTOkNBUFMiIHNpbmNlPSIwLjEwLjIxIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfR0VPX0xPQ0FUSU9OX05BTUUiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1HRU8tTE9DQVRJT04tTkFNRTpDQVBTIiBzaW5jZT0iMC4xMC4yMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0dFT19MT0NBVElPTl9MQVRJVFVERSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1MQVRJVFVERTpDQVBTIiBzaW5jZT0iMC4xMC4yMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0dFT19MT0NBVElPTl9MT05HSVRVREUiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1HRU8tTE9DQVRJT04tTE9OR0lUVURFOkNBUFMiIHNpbmNlPSIwLjEwLjIxIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfR0VPX0xPQ0FUSU9OX0VMRVZBVElPTiIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1FTEVWQVRJT046Q0FQUyIgc2luY2U9IjAuMTAuMjEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19HRU9fTE9DQVRJT05fQ0lUWSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1DSVRZOkNBUFMiIHNpbmNlPSIwLjEwLjI5Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfR0VPX0xPQ0FUSU9OX0NPVU5UUlkiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1HRU8tTE9DQVRJT04tQ09VTlRSWTpDQVBTIiBzaW5jZT0iMC4xMC4yOSIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0dFT19MT0NBVElPTl9TVUJMT0NBVElPTiIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1TVUJMT0NBVElPTjpDQVBTIiBzaW5jZT0iMC4xMC4yOSIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0dFT19MT0NBVElPTl9IT1JJWk9OVEFMX0VSUk9SIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLUhPUklaT05UQUwtRVJST1I6Q0FQUyIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19HRU9fTE9DQVRJT05fTU9WRU1FTlRfRElSRUNUSU9OIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLU1PVkVNRU5ULURJUkVDVElPTjpDQVBTIiBzaW5jZT0iMC4xMC4zMCIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0dFT19MT0NBVElPTl9NT1ZFTUVOVF9TUEVFRCIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1NT1ZFTUVOVC1TUEVFRDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfR0VPX0xPQ0FUSU9OX0NBUFRVUkVfRElSRUNUSU9OIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLUNBUFRVUkUtRElSRUNUSU9OOkNBUFMiIHNpbmNlPSIwLjEwLjMwIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfU0hPV19OQU1FIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctU0hPVy1OQU1FOkNBUFMiIHNpbmNlPSIwLjEwLjI2Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfU0hPV19TT1JUTkFNRSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVNIT1ctU09SVE5BTUU6Q0FQUyIgc2luY2U9IjAuMTAuMjYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19TSE9XX0VQSVNPREVfTlVNQkVSIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctU0hPVy1FUElTT0RFLU5VTUJFUjpDQVBTIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX1NIT1dfU0VBU09OX05VTUJFUiIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVNIT1ctU0VBU09OLU5VTUJFUjpDQVBTIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0xZUklDUyIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUxZUklDUzpDQVBTIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0NPTVBPU0VSX1NPUlROQU1FIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQ09NUE9TRVItU09SVE5BTUU6Q0FQUyIgc2luY2U9IjAuMTAuMjYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19HUk9VUElORyIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdST1VQSU5HOkNBUFMiIHNpbmNlPSIwLjEwLjI2Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfVVNFUl9SQVRJTkciIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1VU0VSLVJBVElORzpDQVBTIiBzaW5jZT0iMC4xMC4yOSIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0RFVklDRV9NQU5VRkFDVFVSRVIiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1ERVZJQ0UtTUFOVUZBQ1RVUkVSOkNBUFMiIHNpbmNlPSIwLjEwLjMwIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfREVWSUNFX01PREVMIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctREVWSUNFLU1PREVMOkNBUFMiIHNpbmNlPSIwLjEwLjMwIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfQVBQTElDQVRJT05fTkFNRSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFQUExJQ0FUSU9OLU5BTUU6Q0FQUyIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19BUFBMSUNBVElPTl9EQVRBIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQVBQTElDQVRJT04tREFUQTpDQVBTIiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0lNQUdFX09SSUVOVEFUSU9OIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctSU1BR0UtT1JJRU5UQVRJT046Q0FQUyIgc2luY2U9IjAuMTAuMzAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19yZWdpc3RlciAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLXJlZ2lzdGVyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbWVyZ2VfdXNlX2ZpcnN0ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbWVyZ2UtdXNlLWZpcnN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbWVyZ2Vfc3RyaW5nc193aXRoX2NvbW1hICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbWVyZ2Utc3RyaW5ncy13aXRoLWNvbW1hIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfZXhpc3RzICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctZXhpc3RzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfZ2V0X3R5cGUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1nZXQtdHlwZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2dldF9uaWNrICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctZ2V0LW5pY2siLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19nZXRfZGVzY3JpcHRpb24gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1nZXQtZGVzY3JpcHRpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19nZXRfZmxhZyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWdldC1mbGFnIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfaXNfZml4ZWQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1pcy1maXhlZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfbmV3ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1uZXciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X25ld19mdWxsICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1uZXctZnVsbCIgc2luY2U9IjAuMTAuMjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X25ld19mdWxsX3ZhbGlzdCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtbmV3LWZ1bGwtdmFsaXN0IiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaXNfdGFnX2xpc3QgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LWlzLXRhZy1saXN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9pc19lbXB0eSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtaXMtZW1wdHkiIHNpbmNlPSIwLjEwLjExIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9jb3B5ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1jb3B5Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9pbnNlcnQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWluc2VydCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfbWVyZ2UgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LW1lcmdlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9mcmVlICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1mcmVlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9nZXRfdGFnX3NpemUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC10YWctc2l6ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfYWRkICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1hZGQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2FkZF92YWx1ZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtYWRkLXZhbHVlIiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfYWRkX3ZhbHVlcyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtYWRkLXZhbHVlcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfYWRkX3ZhbGlzdCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtYWRkLXZhbGlzdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfYWRkX3ZhbGlzdF92YWx1ZXMgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWFkZC12YWxpc3QtdmFsdWVzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9yZW1vdmVfdGFnICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1yZW1vdmUtdGFnIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9mb3JlYWNoICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1mb3JlYWNoIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9nZXRfdmFsdWVfaW5kZXggKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC12YWx1ZS1pbmRleCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfY29weV92YWx1ZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtY29weS12YWx1ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfZ2V0X2NoYXIgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1jaGFyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9nZXRfY2hhcl9pbmRleCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWNoYXItaW5kZXgiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2dldF91Y2hhciAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXVjaGFyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9nZXRfdWNoYXJfaW5kZXggKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC11Y2hhci1pbmRleCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfZ2V0X2Jvb2xlYW4gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1ib29sZWFuIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9nZXRfYm9vbGVhbl9pbmRleCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWJvb2xlYW4taW5kZXgiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2dldF9pbnQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1pbnQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2dldF9pbnRfaW5kZXggKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1pbnQtaW5kZXgiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2dldF91aW50ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtdWludCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfZ2V0X3VpbnRfaW5kZXggKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC11aW50LWluZGV4Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9nZXRfbG9uZyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWxvbmciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2dldF9sb25nX2luZGV4ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtbG9uZy1pbmRleCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfZ2V0X3Vsb25nICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtdWxvbmciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2dldF91bG9uZ19pbmRleCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXVsb25nLWluZGV4Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9nZXRfaW50NjQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1pbnQ2NCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfZ2V0X2ludDY0X2luZGV4ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtaW50NjQtaW5kZXgiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2dldF91aW50NjQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC11aW50NjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2dldF91aW50NjRfaW5kZXggKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC11aW50NjQtaW5kZXgiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2dldF9mbG9hdCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWZsb2F0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9nZXRfZmxvYXRfaW5kZXggKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1mbG9hdC1pbmRleCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWRvdWJsZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZV9pbmRleCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWRvdWJsZS1pbmRleCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXN0cmluZyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZ19pbmRleCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXN0cmluZy1pbmRleCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfcGVla19zdHJpbmdfaW5kZXggKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LXBlZWstc3RyaW5nLWluZGV4Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9nZXRfcG9pbnRlciAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXBvaW50ZXIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2dldF9wb2ludGVyX2luZGV4ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtcG9pbnRlci1pbmRleCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfZ2V0X2RhdGUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1kYXRlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9nZXRfZGF0ZV9pbmRleCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWRhdGUtaW5kZXgiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2dldF9kYXRlX3RpbWUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1kYXRlLXRpbWUiIHNpbmNlPSIwLjEwLjMxIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9nZXRfZGF0ZV90aW1lX2luZGV4ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtZGF0ZS10aW1lLWluZGV4IiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfZ2V0X2J1ZmZlciAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWJ1ZmZlciIgc2luY2U9IjAuMTAuMjMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2dldF9idWZmZXJfaW5kZXggKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1idWZmZXItaW5kZXgiIHNpbmNlPSIwLjEwLjIzIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJHc3RUYWdTZXR0ZXIiIGxpbms9IkdzdFRhZ1NldHRlci5odG1sI0dzdFRhZ1NldHRlci1zdHJ1Y3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RUYWdTZXR0ZXJJRmFjZSIgbGluaz0iR3N0VGFnU2V0dGVyLmh0bWwjR3N0VGFnU2V0dGVySUZhY2UiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19zZXR0ZXJfcmVzZXRfdGFncyAoKSIgbGluaz0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItcmVzZXQtdGFncyIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19zZXR0ZXJfbWVyZ2VfdGFncyAoKSIgbGluaz0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItbWVyZ2UtdGFncyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX3NldHRlcl9hZGRfdGFncyAoKSIgbGluaz0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZ3MiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWx1ZSAoKSIgbGluaz0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZy12YWx1ZSIgc2luY2U9IjAuMTAuMjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWx1ZXMgKCkiIGxpbms9IkdzdFRhZ1NldHRlci5odG1sI2dzdC10YWctc2V0dGVyLWFkZC10YWctdmFsdWVzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsaXN0ICgpIiBsaW5rPSJHc3RUYWdTZXR0ZXIuaHRtbCNnc3QtdGFnLXNldHRlci1hZGQtdGFnLXZhbGlzdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbGlzdF92YWx1ZXMgKCkiIGxpbms9IkdzdFRhZ1NldHRlci5odG1sI2dzdC10YWctc2V0dGVyLWFkZC10YWctdmFsaXN0LXZhbHVlcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX3NldHRlcl9nZXRfdGFnX2xpc3QgKCkiIGxpbms9IkdzdFRhZ1NldHRlci5odG1sI2dzdC10YWctc2V0dGVyLWdldC10YWctbGlzdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX3NldHRlcl9zZXRfdGFnX21lcmdlX21vZGUgKCkiIGxpbms9IkdzdFRhZ1NldHRlci5odG1sI2dzdC10YWctc2V0dGVyLXNldC10YWctbWVyZ2UtbW9kZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX3NldHRlcl9nZXRfdGFnX21lcmdlX21vZGUgKCkiIGxpbms9IkdzdFRhZ1NldHRlci5odG1sI2dzdC10YWctc2V0dGVyLWdldC10YWctbWVyZ2UtbW9kZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFRhc2siIGxpbms9IkdzdFRhc2suaHRtbCNHc3RUYXNrLXN0cnVjdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RUYXNrRnVuY3Rpb24gKCkiIGxpbms9IkdzdFRhc2suaHRtbCNHc3RUYXNrRnVuY3Rpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFRhc2tTdGF0ZSIgbGluaz0iR3N0VGFzay5odG1sI0dzdFRhc2tTdGF0ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFTS19CUk9BRENBU1QoKSIgbGluaz0iR3N0VGFzay5odG1sI0dTVC1UQVNLLUJST0FEQ0FTVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQVNLX0dFVF9DT05EKCkiIGxpbms9IkdzdFRhc2suaHRtbCNHU1QtVEFTSy1HRVQtQ09ORDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQVNLX0dFVF9MT0NLKCkiIGxpbms9IkdzdFRhc2suaHRtbCNHU1QtVEFTSy1HRVQtTE9DSzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQVNLX1NJR05BTCgpIiBsaW5rPSJHc3RUYXNrLmh0bWwjR1NULVRBU0stU0lHTkFMOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBU0tfU1RBVEUoKSIgbGluaz0iR3N0VGFzay5odG1sI0dTVC1UQVNLLVNUQVRFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBU0tfV0FJVCgpIiBsaW5rPSJHc3RUYXNrLmh0bWwjR1NULVRBU0stV0FJVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YXNrX2NyZWF0ZSAoKSIgbGluaz0iR3N0VGFzay5odG1sI2dzdC10YXNrLWNyZWF0ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFza19zZXRfbG9jayAoKSIgbGluaz0iR3N0VGFzay5odG1sI2dzdC10YXNrLXNldC1sb2NrIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YXNrX3NldF9wcmlvcml0eSAoKSIgbGluaz0iR3N0VGFzay5odG1sI2dzdC10YXNrLXNldC1wcmlvcml0eSIgc2luY2U9IjAuMTAuMjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3Rhc2tfc2V0X3Bvb2wgKCkiIGxpbms9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1zZXQtcG9vbCIgc2luY2U9IjAuMTAuMjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3Rhc2tfZ2V0X3Bvb2wgKCkiIGxpbms9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1nZXQtcG9vbCIgc2luY2U9IjAuMTAuMjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9IkdzdFRhc2tUaHJlYWRDYWxsYmFja3MiIGxpbms9IkdzdFRhc2suaHRtbCNHc3RUYXNrVGhyZWFkQ2FsbGJhY2tzIiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFza19zZXRfdGhyZWFkX2NhbGxiYWNrcyAoKSIgbGluaz0iR3N0VGFzay5odG1sI2dzdC10YXNrLXNldC10aHJlYWQtY2FsbGJhY2tzIiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFza19nZXRfc3RhdGUgKCkiIGxpbms9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1nZXQtc3RhdGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3Rhc2tfc2V0X3N0YXRlICgpIiBsaW5rPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stc2V0LXN0YXRlIiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFza19wYXVzZSAoKSIgbGluaz0iR3N0VGFzay5odG1sI2dzdC10YXNrLXBhdXNlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YXNrX3N0YXJ0ICgpIiBsaW5rPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stc3RhcnQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3Rhc2tfc3RvcCAoKSIgbGluaz0iR3N0VGFzay5odG1sI2dzdC10YXNrLXN0b3AiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3Rhc2tfam9pbiAoKSIgbGluaz0iR3N0VGFzay5odG1sI2dzdC10YXNrLWpvaW4iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3Rhc2tfY2xlYW51cF9hbGwgKCkiIGxpbms9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1jbGVhbnVwLWFsbCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFRhc2tQb29sIiBsaW5rPSJHc3RUYXNrUG9vbC5odG1sI0dzdFRhc2tQb29sLXN0cnVjdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFRhc2tQb29sQ2xhc3MiIGxpbms9IkdzdFRhc2tQb29sLmh0bWwjR3N0VGFza1Bvb2xDbGFzcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RUYXNrUG9vbEZ1bmN0aW9uICgpIiBsaW5rPSJHc3RUYXNrUG9vbC5odG1sI0dzdFRhc2tQb29sRnVuY3Rpb24iIHNpbmNlPSIwLjEwLjI0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YXNrX3Bvb2xfbmV3ICgpIiBsaW5rPSJHc3RUYXNrUG9vbC5odG1sI2dzdC10YXNrLXBvb2wtbmV3IiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFza19wb29sX3ByZXBhcmUgKCkiIGxpbms9IkdzdFRhc2tQb29sLmh0bWwjZ3N0LXRhc2stcG9vbC1wcmVwYXJlIiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFza19wb29sX3B1c2ggKCkiIGxpbms9IkdzdFRhc2tQb29sLmh0bWwjZ3N0LXRhc2stcG9vbC1wdXNoIiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFza19wb29sX2pvaW4gKCkiIGxpbms9IkdzdFRhc2tQb29sLmh0bWwjZ3N0LXRhc2stcG9vbC1qb2luIiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFza19wb29sX2NsZWFudXAgKCkiIGxpbms9IkdzdFRhc2tQb29sLmh0bWwjZ3N0LXRhc2stcG9vbC1jbGVhbnVwIiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFR5cGVGaW5kIiBsaW5rPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RUeXBlRmluZEZ1bmN0aW9uICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZEZ1bmN0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RUeXBlRmluZFByb2JhYmlsaXR5IiBsaW5rPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZFByb2JhYmlsaXR5Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90eXBlX2ZpbmRfcGVlayAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjZ3N0LXR5cGUtZmluZC1wZWVrIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90eXBlX2ZpbmRfc3VnZ2VzdCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjZ3N0LXR5cGUtZmluZC1zdWdnZXN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90eXBlX2ZpbmRfc3VnZ2VzdF9zaW1wbGUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI2dzdC10eXBlLWZpbmQtc3VnZ2VzdC1zaW1wbGUiIHNpbmNlPSIwLjEwLjIwIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90eXBlX2ZpbmRfZ2V0X2xlbmd0aCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjZ3N0LXR5cGUtZmluZC1nZXQtbGVuZ3RoIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90eXBlX2ZpbmRfcmVnaXN0ZXIgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI2dzdC10eXBlLWZpbmQtcmVnaXN0ZXIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RUeXBlRmluZEZhY3RvcnkiIGxpbms9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sI0dzdFR5cGVGaW5kRmFjdG9yeS1zdHJ1Y3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9saXN0ICgpIiBsaW5rPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCNnc3QtdHlwZS1maW5kLWZhY3RvcnktZ2V0LWxpc3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9leHRlbnNpb25zICgpIiBsaW5rPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCNnc3QtdHlwZS1maW5kLWZhY3RvcnktZ2V0LWV4dGVuc2lvbnMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9jYXBzICgpIiBsaW5rPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCNnc3QtdHlwZS1maW5kLWZhY3RvcnktZ2V0LWNhcHMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2NhbGxfZnVuY3Rpb24gKCkiIGxpbms9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sI2dzdC10eXBlLWZpbmQtZmFjdG9yeS1jYWxsLWZ1bmN0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJHc3RVUklIYW5kbGVyIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSUhhbmRsZXItc3RydWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0VVJJSGFuZGxlckludGVyZmFjZSIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklIYW5kbGVySW50ZXJmYWNlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RVUklUeXBlIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSVR5cGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1VSSV9UWVBFX0lTX1ZBTElEKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR1NULVVSSS1UWVBFLUlTLVZBTElEOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3VyaV9wcm90b2NvbF9pc192YWxpZCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLXByb3RvY29sLWlzLXZhbGlkIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91cmlfcHJvdG9jb2xfaXNfc3VwcG9ydGVkICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC11cmktcHJvdG9jb2wtaXMtc3VwcG9ydGVkIiBzaW5jZT0iMC4xMC4xMyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXJpX2lzX3ZhbGlkICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC11cmktaXMtdmFsaWQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3VyaV9oYXNfcHJvdG9jb2wgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1oYXMtcHJvdG9jb2wiIHNpbmNlPSIwLjEwLjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3VyaV9nZXRfcHJvdG9jb2wgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1nZXQtcHJvdG9jb2wiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3VyaV9nZXRfbG9jYXRpb24gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1nZXQtbG9jYXRpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3VyaV9jb25zdHJ1Y3QgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1jb25zdHJ1Y3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2ZpbGVuYW1lX3RvX3VyaSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtZmlsZW5hbWUtdG8tdXJpIiBzaW5jZT0iMC4xMC4zMyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC1lbGVtZW50LW1ha2UtZnJvbS11cmkiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3VyaV9oYW5kbGVyX2dldF91cmlfdHlwZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLWhhbmRsZXItZ2V0LXVyaS10eXBlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91cmlfaGFuZGxlcl9nZXRfcHJvdG9jb2xzICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC11cmktaGFuZGxlci1nZXQtcHJvdG9jb2xzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91cmlfaGFuZGxlcl9nZXRfdXJpICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC11cmktaGFuZGxlci1nZXQtdXJpIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91cmlfaGFuZGxlcl9zZXRfdXJpICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC11cmktaGFuZGxlci1zZXQtdXJpIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91cmlfaGFuZGxlcl9uZXdfdXJpICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC11cmktaGFuZGxlci1uZXctdXJpIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUgJnF1b3Q7bmV3LXVyaSZxdW90OyBzaWduYWwiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJSGFuZGxlci1uZXctdXJpIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DQUxMX1BBUkVOVCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtQ0FMTC1QQVJFTlQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ0FMTF9QQVJFTlRfV0lUSF9ERUZBVUxUKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1DQUxMLVBBUkVOVC1XSVRILURFRkFVTFQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUkVBRF9VSU5UOCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1VSU5UODpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9SRUFEX1VJTlQxNl9MRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1VSU5UMTYtTEU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUkVBRF9VSU5UMTZfQkUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJFQUQtVUlOVDE2LUJFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1JFQURfVUlOVDI0X0xFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELVVJTlQyNC1MRTpDQVBTIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUkVBRF9VSU5UMjRfQkUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJFQUQtVUlOVDI0LUJFOkNBUFMiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9SRUFEX1VJTlQzMl9MRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1VSU5UMzItTEU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUkVBRF9VSU5UMzJfQkUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJFQUQtVUlOVDMyLUJFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1JFQURfVUlOVDY0X0xFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELVVJTlQ2NC1MRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9SRUFEX1VJTlQ2NF9CRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1VSU5UNjQtQkU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHU1RfUkVBRF9GTE9BVF9MRSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJFQUQtRkxPQVQtTEU6Q0FQUyIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR1NUX1JFQURfRkxPQVRfQkUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELUZMT0FULUJFOkNBUFMiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdTVF9SRUFEX0RPVUJMRV9MRSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJFQUQtRE9VQkxFLUxFOkNBUFMiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdTVF9SRUFEX0RPVUJMRV9CRSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJFQUQtRE9VQkxFLUJFOkNBUFMiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9XUklURV9VSU5UOCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtV1JJVEUtVUlOVDg6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfV1JJVEVfVUlOVDE2X0xFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1VSU5UMTYtTEU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfV1JJVEVfVUlOVDE2X0JFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1VSU5UMTYtQkU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfV1JJVEVfVUlOVDI0X0xFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1VSU5UMjQtTEU6Q0FQUyIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1dSSVRFX1VJTlQyNF9CRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtV1JJVEUtVUlOVDI0LUJFOkNBUFMiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9XUklURV9VSU5UMzJfTEUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLVVJTlQzMi1MRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9XUklURV9VSU5UMzJfQkUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLVVJTlQzMi1CRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9XUklURV9VSU5UNjRfTEUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLVVJTlQ2NC1MRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9XUklURV9VSU5UNjRfQkUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLVVJTlQ2NC1CRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdTVF9XUklURV9GTE9BVF9MRSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLUZMT0FULUxFOkNBUFMiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdTVF9XUklURV9GTE9BVF9CRSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLUZMT0FULUJFOkNBUFMiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdTVF9XUklURV9ET1VCTEVfTEUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1ET1VCTEUtTEU6Q0FQUyIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR1NUX1dSSVRFX0RPVUJMRV9CRSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLURPVUJMRS1CRTpDQVBTIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUk9VTkRfVVBfMigpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtVVAtMjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9ST1VORF9VUF80KCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1VUC00OkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1JPVU5EX1VQXzgoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELVVQLTg6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUk9VTkRfVVBfMTYoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELVVQLTE2OkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1JPVU5EX1VQXzMyKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1VUC0zMjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9ST1VORF9VUF82NCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtVVAtNjQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUk9VTkRfRE9XTl8yKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1ET1dOLTI6Q0FQUyIgc2luY2U9IjAuMTAuMTIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1JPVU5EX0RPV05fNCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtRE9XTi00OkNBUFMiIHNpbmNlPSIwLjEwLjEyIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9ST1VORF9ET1dOXzgoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELURPV04tODpDQVBTIiBzaW5jZT0iMC4xMC4xMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUk9VTkRfRE9XTl8xNigpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtRE9XTi0xNjpDQVBTIiBzaW5jZT0iMC4xMC4xMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUk9VTkRfRE9XTl8zMigpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtRE9XTi0zMjpDQVBTIiBzaW5jZT0iMC4xMC4xMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUk9VTkRfRE9XTl82NCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtRE9XTi02NDpDQVBTIiBzaW5jZT0iMC4xMC4xMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHRE9VQkxFX0ZST01fQkUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR0RPVUJMRS1GUk9NLUJFOkNBUFMiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdET1VCTEVfRlJPTV9MRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRE9VQkxFLUZST00tTEU6Q0FQUyIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR0RPVUJMRV9TV0FQX0xFX0JFICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRE9VQkxFLVNXQVAtTEUtQkU6Q0FQUyIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR0RPVUJMRV9UT19CRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRE9VQkxFLVRPLUJFOkNBUFMiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdET1VCTEVfVE9fTEUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR0RPVUJMRS1UTy1MRTpDQVBTIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHRkxPQVRfRlJPTV9CRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRkxPQVQtRlJPTS1CRTpDQVBTIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHRkxPQVRfRlJPTV9MRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRkxPQVQtRlJPTS1MRTpDQVBTIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHRkxPQVRfU1dBUF9MRV9CRSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR0ZMT0FULVNXQVAtTEUtQkU6Q0FQUyIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR0ZMT0FUX1RPX0JFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dGTE9BVC1UTy1CRTpDQVBTIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHRkxPQVRfVE9fTEUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR0ZMT0FULVRPLUxFOkNBUFMiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9mbG93X2dldF9uYW1lICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtZmxvdy1nZXQtbmFtZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZmxvd190b19xdWFyayAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LWZsb3ctdG8tcXVhcmsiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ByaW50X2VsZW1lbnRfYXJncyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXByaW50LWVsZW1lbnQtYXJncyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcHJpbnRfcGFkX2NhcHMgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC1wcmludC1wYWQtY2FwcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfZ3VpbnQ2NF90b19nZG91YmxlKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC1ndWludDY0LXRvLWdkb3VibGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2dkb3VibGVfdG9fZ3VpbnQ2NCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtZ2RvdWJsZS10by1ndWludDY0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90eXBlX3JlZ2lzdGVyX3N0YXRpY19mdWxsICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdHlwZS1yZWdpc3Rlci1zdGF0aWMtZnVsbCIgc2luY2U9IjAuMTAuMTQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3V0aWxfZHVtcF9tZW0gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWR1bXAtbWVtIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtdWludDY0LXNjYWxlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtdWludDY0LXNjYWxlLXJvdW5kIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlsICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUtY2VpbCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUtaW50Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1pbnQtcm91bmQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9jZWlsICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUtaW50LWNlaWwiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWdyZWF0ZXN0LWNvbW1vbi1kaXZpc29yIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXRpbF9mcmFjdGlvbl90b19kb3VibGUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWZyYWN0aW9uLXRvLWRvdWJsZSIgc2luY2U9IjAuMTAuMjYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3V0aWxfZG91YmxlX3RvX2ZyYWN0aW9uICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1kb3VibGUtdG8tZnJhY3Rpb24iIHNpbmNlPSIwLjEwLjI2Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91dGlsX2ZyYWN0aW9uX211bHRpcGx5ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1mcmFjdGlvbi1tdWx0aXBseSIgc2luY2U9IjAuMTAuMjYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3V0aWxfZnJhY3Rpb25fYWRkICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1mcmFjdGlvbi1hZGQiIHNpbmNlPSIwLjEwLjI2Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91dGlsX2ZyYWN0aW9uX2NvbXBhcmUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWZyYWN0aW9uLWNvbXBhcmUiIHNpbmNlPSIwLjEwLjMxIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91dGlsX3NlcW51bV9uZXh0ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1zZXFudW0tbmV4dCIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3V0aWxfc2VxbnVtX2NvbXBhcmUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXNlcW51bS1jb21wYXJlIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXRpbF9zZXRfb2JqZWN0X2FyZyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtc2V0LW9iamVjdC1hcmciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1zZXQtdmFsdWUtZnJvbS1zdHJpbmciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtZ2V0LXRpbWVzdGFtcCIgc2luY2U9IjAuMTAuMTYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFNlYXJjaE1vZGUiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dzdFNlYXJjaE1vZGUiIHNpbmNlPSIwLjEwLjIzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91dGlsX2FycmF5X2JpbmFyeV9zZWFyY2ggKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWFycmF5LWJpbmFyeS1zZWFyY2giIHNpbmNlPSIwLjEwLjIzIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9NQUtFX0ZPVVJDQygpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtTUFLRS1GT1VSQ0M6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfU1RSX0ZPVVJDQygpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtU1RSLUZPVVJDQzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9GT1VSQ0NfRk9STUFUIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtRk9VUkNDLUZPUk1BVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9GT1VSQ0NfQVJHUygpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtRk9VUkNDLUFSR1M6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVkFMVUVfSE9MRFNfSU5UX1JBTkdFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1JTlQtUkFOR0U6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVFlQRV9JTlRfUkFOR0UiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUlOVC1SQU5HRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9zZXRfaW50X3JhbmdlICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWludC1yYW5nZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW4gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtaW50LXJhbmdlLW1pbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXggKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtaW50LXJhbmdlLW1heCIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVkFMVUVfSE9MRFNfSU5UNjRfUkFOR0UoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLUlOVDY0LVJBTkdFOkNBUFMiIHNpbmNlPSIwLjEwLjMxIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UWVBFX0lOVDY0X1JBTkdFIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1JTlQ2NC1SQU5HRTpDQVBTIiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWludDY0LXJhbmdlIiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21pbiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1pbnQ2NC1yYW5nZS1taW4iIHNpbmNlPSIwLjEwLjMxIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWF4ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWludDY0LXJhbmdlLW1heCIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1ZBTFVFX0hPTERTX0RPVUJMRV9SQU5HRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtRE9VQkxFLVJBTkdFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RZUEVfRE9VQkxFX1JBTkdFIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1ET1VCTEUtUkFOR0U6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfc2V0X2RvdWJsZV9yYW5nZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXNldC1kb3VibGUtcmFuZ2UiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWluICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWRvdWJsZS1yYW5nZS1taW4iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWF4ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWRvdWJsZS1yYW5nZS1tYXgiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1ZBTFVFX0hPTERTX0xJU1QoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLUxJU1Q6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVFlQRV9MSVNUIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1MSVNUOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1ZBTFVFX0hPTERTX0FSUkFZKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1BUlJBWTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UWVBFX0FSUkFZIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1BUlJBWTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWxpc3QtYXBwZW5kLXZhbHVlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9saXN0X3ByZXBlbmRfdmFsdWUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1saXN0LXByZXBlbmQtdmFsdWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2xpc3RfY29uY2F0ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtbGlzdC1jb25jYXQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2xpc3RfbWVyZ2UgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1saXN0LW1lcmdlIiBzaW5jZT0iMC4xMC4zMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWxpc3QtZ2V0LXNpemUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtbGlzdC1nZXQtdmFsdWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1GUkFDVElPTjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UWVBFX0ZSQUNUSU9OIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1GUkFDVElPTjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXQtZnJhY3Rpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9udW1lcmF0b3IgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtZnJhY3Rpb24tbnVtZXJhdG9yIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3IgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtZnJhY3Rpb24tZGVub21pbmF0b3IiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2ZyYWN0aW9uX211bHRpcGx5ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZnJhY3Rpb24tbXVsdGlwbHkiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2ZyYWN0aW9uX3N1YnRyYWN0ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZnJhY3Rpb24tc3VidHJhY3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OX1JBTkdFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1GUkFDVElPTi1SQU5HRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1GUkFDVElPTi1SQU5HRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2UgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXQtZnJhY3Rpb24tcmFuZ2UiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9taW4gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtZnJhY3Rpb24tcmFuZ2UtbWluIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWF4ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWZyYWN0aW9uLXJhbmdlLW1heCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlX2Z1bGwgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXQtZnJhY3Rpb24tcmFuZ2UtZnVsbCIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVkFMVUVfSE9MRFNfREFURSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtREFURTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UWVBFX0RBVEUiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLURBVEU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfc2V0X2RhdGUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXQtZGF0ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfZ2V0X2RhdGUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtZGF0ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVkFMVUVfSE9MRFNfREFURV9USU1FKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1EQVRFLVRJTUU6Q0FQUyIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1ZBTFVFX0hPTERTX0NBUFMoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLUNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX3NldF9jYXBzICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWNhcHMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2dldF9jYXBzICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWNhcHMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1ZBTFVFX0hPTERTX1NUUlVDVFVSRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtU1RSVUNUVVJFOkNBUFMiIHNpbmNlPSIwLjEwLjE1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9zZXRfc3RydWN0dXJlICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LXN0cnVjdHVyZSIgc2luY2U9IjAuMTAuMTUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2dldF9zdHJ1Y3R1cmUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtc3RydWN0dXJlIiBzaW5jZT0iMC4xMC4xNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVkFMVUVfSE9MRFNfQlVGRkVSKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1CVUZGRVI6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfdmFsdWVfZ2V0X2J1ZmZlcigpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWJ1ZmZlciIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfdmFsdWVfc2V0X2J1ZmZlcigpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWJ1ZmZlciIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfdmFsdWVfdGFrZV9idWZmZXIoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXRha2UtYnVmZmVyIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9WQUxVRV9MRVNTX1RIQU4iIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1MRVNTLVRIQU46Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVkFMVUVfRVFVQUwiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1FUVVBTDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9WQUxVRV9HUkVBVEVSX1RIQU4iIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1HUkVBVEVSLVRIQU46Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVkFMVUVfVU5PUkRFUkVEIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtVU5PUkRFUkVEOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0VmFsdWVDb21wYXJlRnVuYyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR3N0VmFsdWVDb21wYXJlRnVuYyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RWYWx1ZVNlcmlhbGl6ZUZ1bmMgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dzdFZhbHVlU2VyaWFsaXplRnVuYyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RWYWx1ZURlc2VyaWFsaXplRnVuYyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR3N0VmFsdWVEZXNlcmlhbGl6ZUZ1bmMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0VmFsdWVVbmlvbkZ1bmMgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dzdFZhbHVlVW5pb25GdW5jIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFZhbHVlSW50ZXJzZWN0RnVuYyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR3N0VmFsdWVJbnRlcnNlY3RGdW5jIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFZhbHVlU3VidHJhY3RGdW5jICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHc3RWYWx1ZVN1YnRyYWN0RnVuYyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFZhbHVlVGFibGUiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dzdFZhbHVlVGFibGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2lzX2ZpeGVkICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtaXMtZml4ZWQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX3JlZ2lzdGVyICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtcmVnaXN0ZXIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1pbml0LWFuZC1jb3B5Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9zZXJpYWxpemUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXJpYWxpemUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZGVzZXJpYWxpemUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2NvbXBhcmUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1jb21wYXJlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9jYW5fY29tcGFyZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWNhbi1jb21wYXJlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV91bmlvbiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXVuaW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9jYW5fdW5pb24gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1jYW4tdW5pb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX3JlZ2lzdGVyX3VuaW9uX2Z1bmMgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1yZWdpc3Rlci11bmlvbi1mdW5jIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9zdWJ0cmFjdCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXN1YnRyYWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9jYW5fc3VidHJhY3QgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1jYW4tc3VidHJhY3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX3JlZ2lzdGVyX3N1YnRyYWN0X2Z1bmMgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1yZWdpc3Rlci1zdWJ0cmFjdC1mdW5jIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9pbnRlcnNlY3QgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1pbnRlcnNlY3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2Nhbl9pbnRlcnNlY3QgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1jYW4taW50ZXJzZWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9yZWdpc3Rlcl9pbnRlcnNlY3RfZnVuYyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXJlZ2lzdGVyLWludGVyc2VjdC1mdW5jIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9hcnJheV9hcHBlbmRfdmFsdWUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1hcnJheS1hcHBlbmQtdmFsdWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2FycmF5X2dldF9zaXplICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtYXJyYXktZ2V0LXNpemUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2FycmF5X2dldF92YWx1ZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWFycmF5LWdldC12YWx1ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfYXJyYXlfcHJlcGVuZF92YWx1ZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWFycmF5LXByZXBlbmQtdmFsdWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2ZpeGF0ZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWZpeGF0ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVkVSU0lPTl9NQUpPUiIgbGluaz0iZ3N0cmVhbWVyLUdzdFZlcnNpb24uaHRtbCNHU1QtVkVSU0lPTi1NQUpPUjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9WRVJTSU9OX01JTk9SIiBsaW5rPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sI0dTVC1WRVJTSU9OLU1JTk9SOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1ZFUlNJT05fTUlDUk8iIGxpbms9ImdzdHJlYW1lci1Hc3RWZXJzaW9uLmh0bWwjR1NULVZFUlNJT04tTUlDUk86Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVkVSU0lPTl9OQU5PIiBsaW5rPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sI0dTVC1WRVJTSU9OLU5BTk86Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ0hFQ0tfVkVSU0lPTigpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sI0dTVC1DSEVDSy1WRVJTSU9OOkNBUFMiIHNpbmNlPSIwLjEwLjE4Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3REZWJ1Z0xldmVsIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnTGV2ZWwiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0xFVkVMX0RFRkFVTFQiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUxFVkVMLURFRkFVTFQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0RGVidWdDb2xvckZsYWdzIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnQ29sb3JGbGFncyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdERlYnVnQ2F0ZWdvcnkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdDYXRlZ29yeSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0RGVidWdHcmFwaERldGFpbHMiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdHcmFwaERldGFpbHMiIHNpbmNlPSIwLjEwLjE1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9TVFJfTlVMTCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1TVFItTlVMTDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9ERUJVR19QQURfTkFNRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1QQUQtTkFNRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9GVU5DVElPTiIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtRlVOQ1RJT046Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RMb2dGdW5jdGlvbiAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3RMb2dGdW5jdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGVidWdfbG9nICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1sb2ciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RlYnVnX2xvZ192YWxpc3QgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWxvZy12YWxpc3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RlYnVnX21lc3NhZ2VfZ2V0ICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1tZXNzYWdlLWdldCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGVidWdfbG9nX2RlZmF1bHQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWxvZy1kZWZhdWx0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZWJ1Z19sZXZlbF9nZXRfbmFtZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctbGV2ZWwtZ2V0LW5hbWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RlYnVnX2FkZF9sb2dfZnVuY3Rpb24gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWFkZC1sb2ctZnVuY3Rpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb24gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLXJlbW92ZS1sb2ctZnVuY3Rpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb25fYnlfZGF0YSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctcmVtb3ZlLWxvZy1mdW5jdGlvbi1ieS1kYXRhIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZWJ1Z19zZXRfYWN0aXZlICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1zZXQtYWN0aXZlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZWJ1Z19pc19hY3RpdmUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWlzLWFjdGl2ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGVidWdfc2V0X2NvbG9yZWQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLXNldC1jb2xvcmVkIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZWJ1Z19pc19jb2xvcmVkICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1pcy1jb2xvcmVkIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLXNldC1kZWZhdWx0LXRocmVzaG9sZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGVidWdfZ2V0X2RlZmF1bHRfdGhyZXNob2xkICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1nZXQtZGVmYXVsdC10aHJlc2hvbGQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RlYnVnX3NldF90aHJlc2hvbGRfZm9yX25hbWUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLXNldC10aHJlc2hvbGQtZm9yLW5hbWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RlYnVnX3Vuc2V0X3RocmVzaG9sZF9mb3JfbmFtZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctdW5zZXQtdGhyZXNob2xkLWZvci1uYW1lIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9ERUJVR19DQVRFR09SWSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1DQVRFR09SWTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4oKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctQ0FURUdPUlktRVhURVJOOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQygpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1DQVRFR09SWS1TVEFUSUM6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfREVCVUdfQ0FURUdPUllfSU5JVCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1DQVRFR09SWS1JTklUOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0RFQlVHX0NBVEVHT1JZX0dFVCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1DQVRFR09SWS1HRVQ6Q0FQUyIgc2luY2U9IjAuMTAuMjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RlYnVnX2NhdGVnb3J5X2ZyZWUgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWNhdGVnb3J5LWZyZWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RlYnVnX2NhdGVnb3J5X3NldF90aHJlc2hvbGQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWNhdGVnb3J5LXNldC10aHJlc2hvbGQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RlYnVnX2NhdGVnb3J5X3Jlc2V0X3RocmVzaG9sZCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctY2F0ZWdvcnktcmVzZXQtdGhyZXNob2xkIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfdGhyZXNob2xkICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1jYXRlZ29yeS1nZXQtdGhyZXNob2xkIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfbmFtZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctY2F0ZWdvcnktZ2V0LW5hbWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9jb2xvciAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctY2F0ZWdvcnktZ2V0LWNvbG9yIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfZGVzY3JpcHRpb24gKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWNhdGVnb3J5LWdldC1kZXNjcmlwdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGVidWdfZ2V0X2FsbF9jYXRlZ29yaWVzICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1nZXQtYWxsLWNhdGVnb3JpZXMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RlYnVnX2NvbnN0cnVjdF90ZXJtX2NvbG9yICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1jb25zdHJ1Y3QtdGVybS1jb2xvciIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGVidWdfY29uc3RydWN0X3dpbl9jb2xvciAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctY29uc3RydWN0LXdpbi1jb2xvciIgc2luY2U9IjAuMTAuMjMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0NBVF9MRVZFTF9MT0coKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULUxFVkVMLUxPRzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DQVRfRVJST1JfT0JKRUNUKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUNBVC1FUlJPUi1PQkpFQ1Q6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ0FUX1dBUk5JTkdfT0JKRUNUKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUNBVC1XQVJOSU5HLU9CSkVDVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DQVRfSU5GT19PQkpFQ1QoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULUlORk8tT0JKRUNUOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0NBVF9ERUJVR19PQkpFQ1QoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULURFQlVHLU9CSkVDVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DQVRfTE9HX09CSkVDVCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtTE9HLU9CSkVDVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DQVRfRklYTUVfT0JKRUNUKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUNBVC1GSVhNRS1PQkpFQ1Q6Q0FQUyIgc2luY2U9IjAuMTAuMjMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0NBVF9UUkFDRV9PQkpFQ1QoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULVRSQUNFLU9CSkVDVDpDQVBTIiBzaW5jZT0iMC4xMC4zMCIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ0FUX01FTURVTVBfT0JKRUNUKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUNBVC1NRU1EVU1QLU9CSkVDVDpDQVBTIiBzaW5jZT0iMC4xMC4yMyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ0FUX0VSUk9SKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUNBVC1FUlJPUjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DQVRfV0FSTklORygpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtV0FSTklORzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DQVRfSU5GTygpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtSU5GTzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DQVRfREVCVUcoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULURFQlVHOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0NBVF9MT0coKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULUxPRzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DQVRfRklYTUUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULUZJWE1FOkNBUFMiIHNpbmNlPSIwLjEwLjIzIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DQVRfVFJBQ0UoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULVRSQUNFOkNBUFMiIHNpbmNlPSIwLjEwLjMwIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DQVRfTUVNRFVNUCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtTUVNRFVNUDpDQVBTIiBzaW5jZT0iMC4xMC4yMyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRVJST1JfT0JKRUNUKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUVSUk9SLU9CSkVDVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9XQVJOSU5HX09CSkVDVCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1XQVJOSU5HLU9CSkVDVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9JTkZPX09CSkVDVCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1JTkZPLU9CSkVDVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9ERUJVR19PQkpFQ1QoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctT0JKRUNUOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0xPR19PQkpFQ1QoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTE9HLU9CSkVDVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9GSVhNRV9PQkpFQ1QoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtRklYTUUtT0JKRUNUOkNBUFMiIHNpbmNlPSIwLjEwLjIzIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UUkFDRV9PQkpFQ1QoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtVFJBQ0UtT0JKRUNUOkNBUFMiIHNpbmNlPSIwLjEwLjMwIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9NRU1EVU1QX09CSkVDVCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1NRU1EVU1QLU9CSkVDVDpDQVBTIiBzaW5jZT0iMC4xMC4yMyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRVJST1IoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtRVJST1I6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfV0FSTklORygpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1XQVJOSU5HOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0lORk8oKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtSU5GTzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9ERUJVRygpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9MT0coKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTE9HOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0ZJWE1FKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUZJWE1FOkNBUFMiIHNpbmNlPSIwLjEwLjIzIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UUkFDRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1UUkFDRTpDQVBTIiBzaW5jZT0iMC4xMC4zMCIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfTUVNRFVNUCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1NRU1EVU1QOkNBUFMiIHNpbmNlPSIwLjEwLjIzIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLVJFR0lTVEVSLUZVTkNQVFI6Q0FQUyIgc2luY2U9IjAuMTAuMjYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0RFQlVHX0ZVTkNQVFIoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctRlVOQ1BUUjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9ERUJVR19GVU5DUFRSX05BTUUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctRlVOQ1BUUi1OQU1FOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1CSU4tVE8tRE9ULUZJTEU6Q0FQUyIgc2luY2U9IjAuMTAuMTUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUJJTi1UTy1ET1QtRklMRS1XSVRILVRTOkNBUFMiIHNpbmNlPSIwLjEwLjE1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZWJ1Z19wcmludF9zdGFja190cmFjZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctcHJpbnQtc3RhY2stdHJhY2UiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RJTUVfRk9STUFUIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1USU1FLUZPUk1BVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9USU1FX0FSR1MoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtVElNRS1BUkdTOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RUcmFjZSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjR3N0VHJhY2UiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RyYWNlX25ldyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LXRyYWNlLW5ldyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdHJhY2VfZGVzdHJveSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LXRyYWNlLWRlc3Ryb3kiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RyYWNlX2ZsdXNoICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtdHJhY2UtZmx1c2giLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RyYWNlX3RleHRfZmx1c2ggKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI2dzdC10cmFjZS10ZXh0LWZsdXNoIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF90cmFjZV9hZGRfZW50cnkoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LXRyYWNlLWFkZC1lbnRyeSIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfdHJhY2VfZ2V0X3NpemUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LXRyYWNlLWdldC1zaXplIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF90cmFjZV9nZXRfb2Zmc2V0KCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI2dzdC10cmFjZS1nZXQtb2Zmc2V0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF90cmFjZV9nZXRfcmVtYWluaW5nKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI2dzdC10cmFjZS1nZXQtcmVtYWluaW5nIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90cmFjZV9zZXRfZGVmYXVsdCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LXRyYWNlLXNldC1kZWZhdWx0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90cmFjZV9yZWFkX3RzYyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LXRyYWNlLXJlYWQtdHNjIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RBbGxvY1RyYWNlRmxhZ3MiIGxpbms9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI0dzdEFsbG9jVHJhY2VGbGFncyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEFsbG9jVHJhY2UiIGxpbms9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI0dzdEFsbG9jVHJhY2UiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2FsbG9jX3RyYWNlX2F2YWlsYWJsZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LWFsbG9jLXRyYWNlLWF2YWlsYWJsZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYWxsb2NfdHJhY2VfbGlzdCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LWFsbG9jLXRyYWNlLWxpc3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2FsbG9jX3RyYWNlX2xpdmVfYWxsICgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtYWxsb2MtdHJhY2UtbGl2ZS1hbGwiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2FsbG9jX3RyYWNlX3ByaW50X2FsbCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LWFsbG9jLXRyYWNlLXByaW50LWFsbCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYWxsb2NfdHJhY2Vfc2V0X2ZsYWdzX2FsbCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LWFsbG9jLXRyYWNlLXNldC1mbGFncy1hbGwiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2FsbG9jX3RyYWNlX2dldCAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LWFsbG9jLXRyYWNlLWdldCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYWxsb2NfdHJhY2VfcHJpbnQgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI2dzdC1hbGxvYy10cmFjZS1wcmludCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYWxsb2NfdHJhY2VfcHJpbnRfbGl2ZSAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LWFsbG9jLXRyYWNlLXByaW50LWxpdmUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2FsbG9jX3RyYWNlX3NldF9mbGFncyAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LWFsbG9jLXRyYWNlLXNldC1mbGFncyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfYWxsb2NfdHJhY2VfcmVnaXN0ZXIoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LWFsbG9jLXRyYWNlLXJlZ2lzdGVyIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9hbGxvY190cmFjZV9uZXcoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LWFsbG9jLXRyYWNlLW5ldyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfYWxsb2NfdHJhY2VfZnJlZSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtYWxsb2MtdHJhY2UtZnJlZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQklOX0ZMQUdfTEFTVCIgbGluaz0iR3N0QmluLmh0bWwjR1NULUJJTi1GTEFHLUxBU1Q6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQlVGRkVSX0ZMQUdfTElWRSIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItRkxBRy1MSVZFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0JVRkZFUl9GTEFHX0RFQ09ERV9PTkxZIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHLURFQ09ERS1PTkxZOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUctRElTQ09OVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9CVUZGRVJfRkxBR19SRVNZTkMiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUctUkVTWU5DOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0JVRkZFUl9GTEFHX0NPUlJVUFRFRCIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItRkxBRy1DT1JSVVBURUQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQlVGRkVSX0ZMQUdfTUFSS0VSIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHLU1BUktFUjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9CVUZGRVJfRkxBR19IRUFERVIiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUctSEVBREVSOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0JVRkZFUl9GTEFHX0dBUCIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItRkxBRy1HQVA6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQlVGRkVSX0ZMQUdfRFJPUFBBQkxFIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHLURST1BQQUJMRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHLURFTFRBLVVOSVQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQlVGRkVSX0ZMQUdfSU5fQ0FQUyIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItRkxBRy1JTi1DQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9CVUZGRVJfRkxBR19MQVNUIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHLUxBU1Q6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQlVGRkVSX0NPUFlfTk9ORSIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItQ09QWS1OT05FOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0JVRkZFUl9DT1BZX0ZMQUdTIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1DT1BZLUZMQUdTOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0JVRkZFUl9DT1BZX1RJTUVTVEFNUFMiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUNPUFktVElNRVNUQU1QUzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9CVUZGRVJfQ09QWV9NRU1PUlkiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUNPUFktTUVNT1JZOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0JVRkZFUl9DT1BZX01FUkdFIiBsaW5rPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1DT1BZLU1FUkdFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0JVRkZFUl9QT09MX0ZMQUdfTk9ORSIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNHU1QtQlVGRkVSLVBPT0wtRkxBRy1OT05FOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0JVRkZFUl9QT09MX0ZMQUdfS0VZX1VOSVQiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR1NULUJVRkZFUi1QT09MLUZMQUctS0VZLVVOSVQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQlVGRkVSX1BPT0xfRkxBR19ET05UV0FJVCIgbGluaz0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNHU1QtQlVGRkVSLVBPT0wtRkxBRy1ET05UV0FJVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9CVUZGRVJfUE9PTF9GTEFHX0RJU0NPTlQiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR1NULUJVRkZFUi1QT09MLUZMQUctRElTQ09OVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9CVUZGRVJfUE9PTF9GTEFHX0xBU1QiIGxpbms9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR1NULUJVRkZFUi1QT09MLUZMQUctTEFTVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9CVVNfRkxVU0hJTkciIGxpbms9IkdzdEJ1cy5odG1sI0dTVC1CVVMtRkxVU0hJTkc6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQlVTX0ZMQUdfTEFTVCIgbGluaz0iR3N0QnVzLmh0bWwjR1NULUJVUy1GTEFHLUxBU1Q6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQlVTX0RST1AiIGxpbms9IkdzdEJ1cy5odG1sI0dTVC1CVVMtRFJPUDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9CVVNfUEFTUyIgbGluaz0iR3N0QnVzLmh0bWwjR1NULUJVUy1QQVNTOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0JVU19BU1lOQyIgbGluaz0iR3N0QnVzLmh0bWwjR1NULUJVUy1BU1lOQzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9DQVBTX0lOVEVSU0VDVF9aSUdfWkFHIiBsaW5rPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dTVC1DQVBTLUlOVEVSU0VDVC1aSUctWkFHOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUIiBsaW5rPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dTVC1DQVBTLUlOVEVSU0VDVC1GSVJTVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9DQVBTX0ZMQUdTX0FOWSIgbGluaz0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHU1QtQ0FQUy1GTEFHUy1BTlk6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQ0xPQ0tfRU5UUllfU0lOR0xFIiBsaW5rPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1FTlRSWS1TSU5HTEU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQ0xPQ0tfRU5UUllfUEVSSU9ESUMiIGxpbms9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLUVOVFJZLVBFUklPRElDOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NMT0NLX09LIiBsaW5rPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1PSzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9DTE9DS19FQVJMWSIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRUFSTFk6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQiIGxpbms9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLVVOU0NIRURVTEVEOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NMT0NLX0JVU1kiIGxpbms9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLUJVU1k6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQ0xPQ0tfQkFEVElNRSIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stQkFEVElNRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9DTE9DS19FUlJPUiIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRVJST1I6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQ0xPQ0tfVU5TVVBQT1JURUQiIGxpbms9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLVVOU1VQUE9SVEVEOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NMT0NLX0RPTkUiIGxpbms9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLURPTkU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQ0xPQ0tfRkxBR19DQU5fRE9fU0lOR0xFX1NZTkMiIGxpbms9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLUZMQUctQ0FOLURPLVNJTkdMRS1TWU5DOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1NJTkdMRV9BU1lOQyIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRkxBRy1DQU4tRE8tU0lOR0xFLUFTWU5DOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1BFUklPRElDX1NZTkMiIGxpbms9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLUZMQUctQ0FOLURPLVBFUklPRElDLVNZTkM6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQ0xPQ0tfRkxBR19DQU5fRE9fUEVSSU9ESUNfQVNZTkMiIGxpbms9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLUZMQUctQ0FOLURPLVBFUklPRElDLUFTWU5DOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NMT0NLX0ZMQUdfQ0FOX1NFVF9SRVNPTFVUSU9OIiBsaW5rPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1GTEFHLUNBTi1TRVQtUkVTT0xVVElPTjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9DTE9DS19GTEFHX0NBTl9TRVRfTUFTVEVSIiBsaW5rPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1GTEFHLUNBTi1TRVQtTUFTVEVSOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NMT0NLX0ZMQUdfTEFTVCIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRkxBRy1MQVNUOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0VMRU1FTlRfTE9DS0VEX1NUQVRFIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtTE9DS0VELVNUQVRFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0VMRU1FTlRfSVNfU0lOSyIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULUlTLVNJTks6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRUxFTUVOVF9VTlBBUkVOVElORyIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULVVOUEFSRU5USU5HOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0VMRU1FTlRfSVNfU09VUkNFIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtSVMtU09VUkNFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0VMRU1FTlRfRkxBR19MQVNUIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtRkxBRy1MQVNUOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUQVRFX1ZPSURfUEVORElORyIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1WT0lELVBFTkRJTkc6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RBVEVfTlVMTCIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1OVUxMOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUQVRFX1JFQURZIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVJFQURZOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUQVRFX1BBVVNFRCIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1QQVVTRUQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RBVEVfUExBWUlORyIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1QTEFZSU5HOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUNIQU5HRS1OVUxMLVRPLVJFQURZOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLVJFQURZLVRPLVBBVVNFRDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1BMQVlJTkciIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLVBBVVNFRC1UTy1QTEFZSU5HOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRCIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1DSEFOR0UtUExBWUlORy1UTy1QQVVTRUQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWSIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1DSEFOR0UtUEFVU0VELVRPLVJFQURZOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUNIQU5HRS1SRUFEWS1UTy1OVUxMOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUNIQU5HRS1GQUlMVVJFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUNIQU5HRS1TVUNDRVNTOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1DSEFOR0UtQVNZTkM6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLU5PLVBSRVJPTEw6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQ09SRV9FUlJPUl9GQUlMRUQiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtQ09SRS1FUlJPUi1GQUlMRUQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQ09SRV9FUlJPUl9UT09fTEFaWSIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1DT1JFLUVSUk9SLVRPTy1MQVpZOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NPUkVfRVJST1JfTk9UX0lNUExFTUVOVEVEIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUNPUkUtRVJST1ItTk9ULUlNUExFTUVOVEVEOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NPUkVfRVJST1JfU1RBVEVfQ0hBTkdFIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUNPUkUtRVJST1ItU1RBVEUtQ0hBTkdFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NPUkVfRVJST1JfUEFEIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUNPUkUtRVJST1ItUEFEOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NPUkVfRVJST1JfVEhSRUFEIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUNPUkUtRVJST1ItVEhSRUFEOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NPUkVfRVJST1JfTkVHT1RJQVRJT04iIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtQ09SRS1FUlJPUi1ORUdPVElBVElPTjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9DT1JFX0VSUk9SX0VWRU5UIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUNPUkUtRVJST1ItRVZFTlQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQ09SRV9FUlJPUl9TRUVLIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUNPUkUtRVJST1ItU0VFSzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9DT1JFX0VSUk9SX0NBUFMiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtQ09SRS1FUlJPUi1DQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9DT1JFX0VSUk9SX1RBRyIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1DT1JFLUVSUk9SLVRBRzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9DT1JFX0VSUk9SX01JU1NJTkdfUExVR0lOIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUNPUkUtRVJST1ItTUlTU0lORy1QTFVHSU46Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQ09SRV9FUlJPUl9DTE9DSyIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1DT1JFLUVSUk9SLUNMT0NLOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NPUkVfRVJST1JfRElTQUJMRUQiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtQ09SRS1FUlJPUi1ESVNBQkxFRDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9DT1JFX0VSUk9SX05VTV9FUlJPUlMiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtQ09SRS1FUlJPUi1OVU0tRVJST1JTOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0xJQlJBUllfRVJST1JfRkFJTEVEIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUxJQlJBUlktRVJST1ItRkFJTEVEOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0xJQlJBUllfRVJST1JfVE9PX0xBWlkiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtTElCUkFSWS1FUlJPUi1UT08tTEFaWTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9MSUJSQVJZX0VSUk9SX0lOSVQiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtTElCUkFSWS1FUlJPUi1JTklUOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0xJQlJBUllfRVJST1JfU0hVVERPV04iIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtTElCUkFSWS1FUlJPUi1TSFVURE9XTjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9MSUJSQVJZX0VSUk9SX1NFVFRJTkdTIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUxJQlJBUlktRVJST1ItU0VUVElOR1M6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTElCUkFSWV9FUlJPUl9FTkNPREUiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtTElCUkFSWS1FUlJPUi1FTkNPREU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTElCUkFSWV9FUlJPUl9OVU1fRVJST1JTIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUxJQlJBUlktRVJST1ItTlVNLUVSUk9SUzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9SRVNPVVJDRV9FUlJPUl9GQUlMRUQiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtUkVTT1VSQ0UtRVJST1ItRkFJTEVEOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1JFU09VUkNFX0VSUk9SX1RPT19MQVpZIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVJFU09VUkNFLUVSUk9SLVRPTy1MQVpZOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1JFU09VUkNFX0VSUk9SX05PVF9GT1VORCIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1SRVNPVVJDRS1FUlJPUi1OT1QtRk9VTkQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUkVTT1VSQ0VfRVJST1JfQlVTWSIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1SRVNPVVJDRS1FUlJPUi1CVVNZOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1JFU09VUkNFX0VSUk9SX09QRU5fUkVBRCIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1SRVNPVVJDRS1FUlJPUi1PUEVOLVJFQUQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUkVTT1VSQ0VfRVJST1JfT1BFTl9XUklURSIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1SRVNPVVJDRS1FUlJPUi1PUEVOLVdSSVRFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1JFU09VUkNFX0VSUk9SX09QRU5fUkVBRF9XUklURSIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1SRVNPVVJDRS1FUlJPUi1PUEVOLVJFQUQtV1JJVEU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUkVTT1VSQ0VfRVJST1JfQ0xPU0UiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtUkVTT1VSQ0UtRVJST1ItQ0xPU0U6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUkVTT1VSQ0VfRVJST1JfUkVBRCIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1SRVNPVVJDRS1FUlJPUi1SRUFEOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1JFU09VUkNFX0VSUk9SX1dSSVRFIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVJFU09VUkNFLUVSUk9SLVdSSVRFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1JFU09VUkNFX0VSUk9SX1NFRUsiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtUkVTT1VSQ0UtRVJST1ItU0VFSzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9SRVNPVVJDRV9FUlJPUl9TWU5DIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVJFU09VUkNFLUVSUk9SLVNZTkM6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUkVTT1VSQ0VfRVJST1JfU0VUVElOR1MiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtUkVTT1VSQ0UtRVJST1ItU0VUVElOR1M6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUkVTT1VSQ0VfRVJST1JfTk9fU1BBQ0VfTEVGVCIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1SRVNPVVJDRS1FUlJPUi1OTy1TUEFDRS1MRUZUOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1JFU09VUkNFX0VSUk9SX05VTV9FUlJPUlMiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtUkVTT1VSQ0UtRVJST1ItTlVNLUVSUk9SUzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9TVFJFQU1fRVJST1JfRkFJTEVEIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVNUUkVBTS1FUlJPUi1GQUlMRUQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RSRUFNX0VSUk9SX1RPT19MQVpZIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVNUUkVBTS1FUlJPUi1UT08tTEFaWTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9TVFJFQU1fRVJST1JfTk9UX0lNUExFTUVOVEVEIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVNUUkVBTS1FUlJPUi1OT1QtSU1QTEVNRU5URUQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RSRUFNX0VSUk9SX1RZUEVfTk9UX0ZPVU5EIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVNUUkVBTS1FUlJPUi1UWVBFLU5PVC1GT1VORDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9TVFJFQU1fRVJST1JfV1JPTkdfVFlQRSIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1TVFJFQU0tRVJST1ItV1JPTkctVFlQRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9TVFJFQU1fRVJST1JfQ09ERUNfTk9UX0ZPVU5EIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVNUUkVBTS1FUlJPUi1DT0RFQy1OT1QtRk9VTkQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RSRUFNX0VSUk9SX0RFQ09ERSIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1TVFJFQU0tRVJST1ItREVDT0RFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUUkVBTV9FUlJPUl9FTkNPREUiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtU1RSRUFNLUVSUk9SLUVOQ09ERTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9TVFJFQU1fRVJST1JfREVNVVgiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtU1RSRUFNLUVSUk9SLURFTVVYOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUUkVBTV9FUlJPUl9NVVgiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtU1RSRUFNLUVSUk9SLU1VWDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9TVFJFQU1fRVJST1JfRk9STUFUIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVNUUkVBTS1FUlJPUi1GT1JNQVQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RSRUFNX0VSUk9SX0RFQ1JZUFQiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtU1RSRUFNLUVSUk9SLURFQ1JZUFQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RSRUFNX0VSUk9SX0RFQ1JZUFRfTk9LRVkiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtU1RSRUFNLUVSUk9SLURFQ1JZUFQtTk9LRVk6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RSRUFNX0VSUk9SX05VTV9FUlJPUlMiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtU1RSRUFNLUVSUk9SLU5VTS1FUlJPUlM6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRVZFTlRfVFlQRV9VUFNUUkVBTSIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULVRZUEUtVVBTVFJFQU06Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRVZFTlRfVFlQRV9ET1dOU1RSRUFNIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtVFlQRS1ET1dOU1RSRUFNOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0VWRU5UX1RZUEVfU0VSSUFMSVpFRCIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULVRZUEUtU0VSSUFMSVpFRDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9FVkVOVF9UWVBFX1NUSUNLWSIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULVRZUEUtU1RJQ0tZOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0VWRU5UX1VOS05PV04iIGxpbms9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1VTktOT1dOOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0VWRU5UX0ZMVVNIX1NUQVJUIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtRkxVU0gtU1RBUlQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRVZFTlRfRkxVU0hfU1RPUCIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUZMVVNILVNUT1A6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRVZFTlRfQ0FQUyIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0VWRU5UX1NFR01FTlQiIGxpbms9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1TRUdNRU5UOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0VWRU5UX1RBRyIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULVRBRzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9FVkVOVF9CVUZGRVJTSVpFIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtQlVGRkVSU0laRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9FVkVOVF9TSU5LX01FU1NBR0UiIGxpbms9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1TSU5LLU1FU1NBR0U6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRVZFTlRfRU9TIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtRU9TOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0VWRU5UX1FPUyIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULVFPUzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9FVkVOVF9TRUVLIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtU0VFSzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9FVkVOVF9OQVZJR0FUSU9OIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtTkFWSUdBVElPTjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9FVkVOVF9MQVRFTkNZIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtTEFURU5DWTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9FVkVOVF9TVEVQIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtU1RFUDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9FVkVOVF9SRUNPTkZJR1VSRSIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULVJFQ09ORklHVVJFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0VWRU5UX0NVU1RPTV9VUFNUUkVBTSIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUNVU1RPTS1VUFNUUkVBTTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTSIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUNVU1RPTS1ET1dOU1RSRUFNOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX09PQiIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUNVU1RPTS1ET1dOU1RSRUFNLU9PQjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9FVkVOVF9DVVNUT01fQk9USCIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUNVU1RPTS1CT1RIOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0VWRU5UX0NVU1RPTV9CT1RIX09PQiIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUNVU1RPTS1CT1RILU9PQjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9RT1NfVFlQRV9PVkVSRkxPVyIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULVFPUy1UWVBFLU9WRVJGTE9XOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1FPU19UWVBFX1VOREVSRkxPVyIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULVFPUy1UWVBFLVVOREVSRkxPVzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9RT1NfVFlQRV9USFJPVFRMRSIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULVFPUy1UWVBFLVRIUk9UVExFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NFRUtfVFlQRV9OT05FIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtU0VFSy1UWVBFLU5PTkU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU0VFS19UWVBFX0NVUiIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULVNFRUstVFlQRS1DVVI6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU0VFS19UWVBFX1NFVCIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULVNFRUstVFlQRS1TRVQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU0VFS19UWVBFX0VORCIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULVNFRUstVFlQRS1FTkQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU0VFS19GTEFHX05PTkUiIGxpbms9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1TRUVLLUZMQUctTk9ORTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9TRUVLX0ZMQUdfRkxVU0giIGxpbms9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1TRUVLLUZMQUctRkxVU0g6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU0VFS19GTEFHX0FDQ1VSQVRFIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtU0VFSy1GTEFHLUFDQ1VSQVRFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NFRUtfRkxBR19LRVlfVU5JVCIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULVNFRUstRkxBRy1LRVktVU5JVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9TRUVLX0ZMQUdfU0VHTUVOVCIgbGluaz0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULVNFRUstRkxBRy1TRUdNRU5UOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NFRUtfRkxBR19TS0lQIiBsaW5rPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtU0VFSy1GTEFHLVNLSVA6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRk9STUFUX1VOREVGSU5FRCIgbGluaz0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dTVC1GT1JNQVQtVU5ERUZJTkVEOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0ZPUk1BVF9ERUZBVUxUIiBsaW5rPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR1NULUZPUk1BVC1ERUZBVUxUOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0ZPUk1BVF9CWVRFUyIgbGluaz0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dTVC1GT1JNQVQtQllURVM6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRk9STUFUX1RJTUUiIGxpbms9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHU1QtRk9STUFULVRJTUU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRk9STUFUX0JVRkZFUlMiIGxpbms9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHU1QtRk9STUFULUJVRkZFUlM6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRk9STUFUX1BFUkNFTlQiIGxpbms9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHU1QtRk9STUFULVBFUkNFTlQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfSU5ERVhfVU5LTk9XTiIgbGluaz0iR3N0SW5kZXguaHRtbCNHU1QtSU5ERVgtVU5LTk9XTjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9JTkRFWF9DRVJUQUlOIiBsaW5rPSJHc3RJbmRleC5odG1sI0dTVC1JTkRFWC1DRVJUQUlOOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0lOREVYX0ZVWlpZIiBsaW5rPSJHc3RJbmRleC5odG1sI0dTVC1JTkRFWC1GVVpaWTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9JTkRFWF9FTlRSWV9JRCIgbGluaz0iR3N0SW5kZXguaHRtbCNHU1QtSU5ERVgtRU5UUlktSUQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfSU5ERVhfRU5UUllfQVNTT0NJQVRJT04iIGxpbms9IkdzdEluZGV4Lmh0bWwjR1NULUlOREVYLUVOVFJZLUFTU09DSUFUSU9OOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0lOREVYX0VOVFJZX09CSkVDVCIgbGluaz0iR3N0SW5kZXguaHRtbCNHU1QtSU5ERVgtRU5UUlktT0JKRUNUOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0lOREVYX0VOVFJZX0ZPUk1BVCIgbGluaz0iR3N0SW5kZXguaHRtbCNHU1QtSU5ERVgtRU5UUlktRk9STUFUOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0lOREVYX0xPT0tVUF9FWEFDVCIgbGluaz0iR3N0SW5kZXguaHRtbCNHU1QtSU5ERVgtTE9PS1VQLUVYQUNUOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0lOREVYX0xPT0tVUF9CRUZPUkUiIGxpbms9IkdzdEluZGV4Lmh0bWwjR1NULUlOREVYLUxPT0tVUC1CRUZPUkU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfSU5ERVhfTE9PS1VQX0FGVEVSIiBsaW5rPSJHc3RJbmRleC5odG1sI0dTVC1JTkRFWC1MT09LVVAtQUZURVI6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQVNTT0NJQVRJT05fRkxBR19OT05FIiBsaW5rPSJHc3RJbmRleC5odG1sI0dTVC1BU1NPQ0lBVElPTi1GTEFHLU5PTkU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQVNTT0NJQVRJT05fRkxBR19LRVlfVU5JVCIgbGluaz0iR3N0SW5kZXguaHRtbCNHU1QtQVNTT0NJQVRJT04tRkxBRy1LRVktVU5JVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9BU1NPQ0lBVElPTl9GTEFHX0RFTFRBX1VOSVQiIGxpbms9IkdzdEluZGV4Lmh0bWwjR1NULUFTU09DSUFUSU9OLUZMQUctREVMVEEtVU5JVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9BU1NPQ0lBVElPTl9GTEFHX0xBU1QiIGxpbms9IkdzdEluZGV4Lmh0bWwjR1NULUFTU09DSUFUSU9OLUZMQUctTEFTVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9JTkRFWF9SRVNPTFZFUl9DVVNUT00iIGxpbms9IkdzdEluZGV4Lmh0bWwjR1NULUlOREVYLVJFU09MVkVSLUNVU1RPTTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9JTkRFWF9SRVNPTFZFUl9HVFlQRSIgbGluaz0iR3N0SW5kZXguaHRtbCNHU1QtSU5ERVgtUkVTT0xWRVItR1RZUEU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfSU5ERVhfUkVTT0xWRVJfUEFUSCIgbGluaz0iR3N0SW5kZXguaHRtbCNHU1QtSU5ERVgtUkVTT0xWRVItUEFUSDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9JTkRFWF9XUklUQUJMRSIgbGluaz0iR3N0SW5kZXguaHRtbCNHU1QtSU5ERVgtV1JJVEFCTEU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfSU5ERVhfUkVBREFCTEUiIGxpbms9IkdzdEluZGV4Lmh0bWwjR1NULUlOREVYLVJFQURBQkxFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0lOREVYX0ZMQUdfTEFTVCIgbGluaz0iR3N0SW5kZXguaHRtbCNHU1QtSU5ERVgtRkxBRy1MQVNUOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0lURVJBVE9SX0lURU1fU0tJUCIgbGluaz0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR1NULUlURVJBVE9SLUlURU0tU0tJUDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9JVEVSQVRPUl9JVEVNX1BBU1MiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dTVC1JVEVSQVRPUi1JVEVNLVBBU1M6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfSVRFUkFUT1JfSVRFTV9FTkQiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dTVC1JVEVSQVRPUi1JVEVNLUVORDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9JVEVSQVRPUl9ET05FIiBsaW5rPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHU1QtSVRFUkFUT1ItRE9ORTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9JVEVSQVRPUl9PSyIgbGluaz0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR1NULUlURVJBVE9SLU9LOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0lURVJBVE9SX1JFU1lOQyIgbGluaz0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR1NULUlURVJBVE9SLVJFU1lOQzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9JVEVSQVRPUl9FUlJPUiIgbGluaz0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR1NULUlURVJBVE9SLUVSUk9SOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR1NULU1FTU9SWS1GTEFHLVJFQURPTkxZOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FTU9SWV9GTEFHX05PX1NIQVJFIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR1NULU1FTU9SWS1GTEFHLU5PLVNIQVJFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FTU9SWV9GTEFHX0xBU1QiIGxpbms9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHU1QtTUVNT1JZLUZMQUctTEFTVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NQVBfUkVBRCIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dTVC1NQVAtUkVBRDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NQVBfV1JJVEUiIGxpbms9ImdzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHU1QtTUFQLVdSSVRFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FU1NBR0VfVU5LTk9XTiIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1VTktOT1dOOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FU1NBR0VfRU9TIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLUVPUzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NRVNTQUdFX0VSUk9SIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLUVSUk9SOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FU1NBR0VfV0FSTklORyIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1XQVJOSU5HOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FU1NBR0VfSU5GTyIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1JTkZPOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FU1NBR0VfVEFHIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVRBRzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NRVNTQUdFX0JVRkZFUklORyIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1CVUZGRVJJTkc6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVNUQVRFLUNIQU5HRUQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUVTU0FHRV9TVEFURV9ESVJUWSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1TVEFURS1ESVJUWTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NRVNTQUdFX1NURVBfRE9ORSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1TVEVQLURPTkU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUVTU0FHRV9DTE9DS19QUk9WSURFIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLUNMT0NLLVBST1ZJREU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUVTU0FHRV9DTE9DS19MT1NUIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLUNMT0NLLUxPU1Q6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUVTU0FHRV9ORVdfQ0xPQ0siIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtTkVXLUNMT0NLOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FU1NBR0VfU1RSVUNUVVJFX0NIQU5HRSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1TVFJVQ1RVUkUtQ0hBTkdFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FU1NBR0VfU1RSRUFNX1NUQVRVUyIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1TVFJFQU0tU1RBVFVTOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FU1NBR0VfQVBQTElDQVRJT04iIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtQVBQTElDQVRJT046Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUVTU0FHRV9FTEVNRU5UIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLUVMRU1FTlQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUVTU0FHRV9TRUdNRU5UX1NUQVJUIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVNFR01FTlQtU1RBUlQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUVTU0FHRV9TRUdNRU5UX0RPTkUiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtU0VHTUVOVC1ET05FOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FU1NBR0VfRFVSQVRJT04iIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtRFVSQVRJT046Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUVTU0FHRV9MQVRFTkNZIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLUxBVEVOQ1k6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUVTU0FHRV9BU1lOQ19TVEFSVCIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1BU1lOQy1TVEFSVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NRVNTQUdFX0FTWU5DX0RPTkUiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtQVNZTkMtRE9ORTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NRVNTQUdFX1JFUVVFU1RfU1RBVEUiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtUkVRVUVTVC1TVEFURTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NRVNTQUdFX1NURVBfU1RBUlQiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtU1RFUC1TVEFSVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NRVNTQUdFX1FPUyIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1RT1M6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUVTU0FHRV9QUk9HUkVTUyIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1QUk9HUkVTUzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NRVNTQUdFX0FOWSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1BTlk6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RSVUNUVVJFX0NIQU5HRV9UWVBFX1BBRF9MSU5LIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1TVFJVQ1RVUkUtQ0hBTkdFLVRZUEUtUEFELUxJTks6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RSVUNUVVJFX0NIQU5HRV9UWVBFX1BBRF9VTkxJTksiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULVNUUlVDVFVSRS1DSEFOR0UtVFlQRS1QQUQtVU5MSU5LOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9DUkVBVEUiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULVNUUkVBTS1TVEFUVVMtVFlQRS1DUkVBVEU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RSRUFNX1NUQVRVU19UWVBFX0VOVEVSIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1TVFJFQU0tU1RBVFVTLVRZUEUtRU5URVI6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RSRUFNX1NUQVRVU19UWVBFX0xFQVZFIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1TVFJFQU0tU1RBVFVTLVRZUEUtTEVBVkU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RSRUFNX1NUQVRVU19UWVBFX0RFU1RST1kiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULVNUUkVBTS1TVEFUVVMtVFlQRS1ERVNUUk9ZOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9TVEFSVCIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtU1RSRUFNLVNUQVRVUy1UWVBFLVNUQVJUOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9QQVVTRSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtU1RSRUFNLVNUQVRVUy1UWVBFLVBBVVNFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9TVE9QIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1TVFJFQU0tU1RBVFVTLVRZUEUtU1RPUDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QUk9HUkVTU19UWVBFX1NUQVJUIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1QUk9HUkVTUy1UWVBFLVNUQVJUOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BST0dSRVNTX1RZUEVfQ09OVElOVUUiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULVBST0dSRVNTLVRZUEUtQ09OVElOVUU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUFJPR1JFU1NfVFlQRV9DT01QTEVURSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtUFJPR1JFU1MtVFlQRS1DT01QTEVURTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QUk9HUkVTU19UWVBFX0NBTkNFTEVEIiBsaW5rPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1QUk9HUkVTUy1UWVBFLUNBTkNFTEVEOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BST0dSRVNTX1RZUEVfRVJST1IiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULVBST0dSRVNTLVRZUEUtRVJST1I6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUlOSV9PQkpFQ1RfRkxBR19MQVNUIiBsaW5rPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1NSU5JLU9CSkVDVC1GTEFHLUxBU1Q6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfT0JKRUNUX0ZMQUdfTEFTVCIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1GTEFHLUxBU1Q6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX1VOS05PV04iIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtVU5LTk9XTjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfU1JDIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELVNSQzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfU0lOSyIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1TSU5LOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9CTE9DS0VEIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUJMT0NLRUQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX0ZMVVNISU5HIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUZMVVNISU5HOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9JTl9HRVRDQVBTIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUlOLUdFVENBUFM6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX0JMT0NLSU5HIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUJMT0NLSU5HOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9ORUVEX1JFQ09ORklHVVJFIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELU5FRUQtUkVDT05GSUdVUkU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX05FRURfRVZFTlRTIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELU5FRUQtRVZFTlRTOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9GSVhFRF9DQVBTIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUZJWEVELUNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9GTEFHX0xBU1QiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtRkxBRy1MQVNUOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9MSU5LX09LIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUxJTkstT0s6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX0xJTktfV1JPTkdfSElFUkFSQ0hZIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUxJTkstV1JPTkctSElFUkFSQ0hZOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9MSU5LX1dBU19MSU5LRUQiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtTElOSy1XQVMtTElOS0VEOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9MSU5LX1dST05HX0RJUkVDVElPTiIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1MSU5LLVdST05HLURJUkVDVElPTjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfTElOS19OT0ZPUk1BVCIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1MSU5LLU5PRk9STUFUOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9MSU5LX05PU0NIRUQiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtTElOSy1OT1NDSEVEOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9MSU5LX1JFRlVTRUQiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtTElOSy1SRUZVU0VEOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkciIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtTElOSy1DSEVDSy1OT1RISU5HOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9MSU5LX0NIRUNLX0hJRVJBUkNIWSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1MSU5LLUNIRUNLLUhJRVJBUkNIWTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfTElOS19DSEVDS19URU1QTEFURV9DQVBTIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUxJTkstQ0hFQ0stVEVNUExBVEUtQ0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX0xJTktfQ0hFQ0tfQ0FQUyIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1MSU5LLUNIRUNLLUNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0ZMT1dfQ1VTVE9NX1NVQ0NFU1NfMiIgbGluaz0iR3N0UGFkLmh0bWwjR1NULUZMT1ctQ1VTVE9NLVNVQ0NFU1MtMjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTXzEiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1GTE9XLUNVU1RPTS1TVUNDRVNTLTE6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRkxPV19DVVNUT01fU1VDQ0VTUyIgbGluaz0iR3N0UGFkLmh0bWwjR1NULUZMT1ctQ1VTVE9NLVNVQ0NFU1M6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRkxPV19SRVNFTkQiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1GTE9XLVJFU0VORDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9GTE9XX09LIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1PSzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9GTE9XX05PVF9MSU5LRUQiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1GTE9XLU5PVC1MSU5LRUQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRkxPV19XUk9OR19TVEFURSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULUZMT1ctV1JPTkctU1RBVEU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRkxPV19VTkVYUEVDVEVEIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1VTkVYUEVDVEVEOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0ZMT1dfTk9UX05FR09USUFURUQiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1GTE9XLU5PVC1ORUdPVElBVEVEOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0ZMT1dfRVJST1IiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1GTE9XLUVSUk9SOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRCIgbGluaz0iR3N0UGFkLmh0bWwjR1NULUZMT1ctTk9ULVNVUFBPUlRFRDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9GTE9XX0NVU1RPTV9FUlJPUiIgbGluaz0iR3N0UGFkLmh0bWwjR1NULUZMT1ctQ1VTVE9NLUVSUk9SOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SXzEiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1GTE9XLUNVU1RPTS1FUlJPUi0xOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SXzIiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1GTE9XLUNVU1RPTS1FUlJPUi0yOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0FDVElWQVRFX05PTkUiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1BQ1RJVkFURS1OT05FOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0FDVElWQVRFX1BVU0giIGxpbms9IkdzdFBhZC5odG1sI0dTVC1BQ1RJVkFURS1QVVNIOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0FDVElWQVRFX1BVTEwiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1BQ1RJVkFURS1QVUxMOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BST0JFX0RST1AiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QUk9CRS1EUk9QOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BST0JFX09LIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUFJPQkUtT0s6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUFJPQkVfUkVNT1ZFIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUFJPQkUtUkVNT1ZFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BST0JFX1BBU1MiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QUk9CRS1QQVNTOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BST0JFX1RZUEVfSU5WQUxJRCIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBST0JFLVRZUEUtSU5WQUxJRDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QUk9CRV9UWVBFX0lETEUiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QUk9CRS1UWVBFLUlETEU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUFJPQkVfVFlQRV9CTE9DSyIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBST0JFLVRZUEUtQkxPQ0s6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUFJPQkVfVFlQRV9CVUZGRVIiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QUk9CRS1UWVBFLUJVRkZFUjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QUk9CRV9UWVBFX0JVRkZFUl9MSVNUIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUFJPQkUtVFlQRS1CVUZGRVItTElTVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QUk9CRV9UWVBFX0VWRU5UIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUFJPQkUtVFlQRS1FVkVOVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QUk9CRV9UWVBFX1BVU0giIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QUk9CRS1UWVBFLVBVU0g6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUFJPQkVfVFlQRV9QVUxMIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUFJPQkUtVFlQRS1QVUxMOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9URU1QTEFURV9GTEFHX0xBU1QiIGxpbms9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR1NULVBBRC1URU1QTEFURS1GTEFHLUxBU1Q6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX0FMV0FZUyIgbGluaz0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHU1QtUEFELUFMV0FZUzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfU09NRVRJTUVTIiBsaW5rPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1QQUQtU09NRVRJTUVTOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9SRVFVRVNUIiBsaW5rPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1QQUQtUkVRVUVTVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQVJTRV9FUlJPUl9TWU5UQVgiIGxpbms9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dTVC1QQVJTRS1FUlJPUi1TWU5UQVg6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFSU0VfRVJST1JfTk9fU1VDSF9FTEVNRU5UIiBsaW5rPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHU1QtUEFSU0UtRVJST1ItTk8tU1VDSC1FTEVNRU5UOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBUlNFX0VSUk9SX05PX1NVQ0hfUFJPUEVSVFkiIGxpbms9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dTVC1QQVJTRS1FUlJPUi1OTy1TVUNILVBST1BFUlRZOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBUlNFX0VSUk9SX0xJTksiIGxpbms9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dTVC1QQVJTRS1FUlJPUi1MSU5LOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBUlNFX0VSUk9SX0NPVUxEX05PVF9TRVRfUFJPUEVSVFkiIGxpbms9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dTVC1QQVJTRS1FUlJPUi1DT1VMRC1OT1QtU0VULVBST1BFUlRZOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBUlNFX0VSUk9SX0VNUFRZX0JJTiIgbGluaz0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR1NULVBBUlNFLUVSUk9SLUVNUFRZLUJJTjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQVJTRV9FUlJPUl9FTVBUWSIgbGluaz0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR1NULVBBUlNFLUVSUk9SLUVNUFRZOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBUlNFX0ZMQUdfTk9ORSIgbGluaz0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR1NULVBBUlNFLUZMQUctTk9ORTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQVJTRV9GTEFHX0ZBVEFMX0VSUk9SUyIgbGluaz0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR1NULVBBUlNFLUZMQUctRkFUQUwtRVJST1JTOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BJUEVMSU5FX0ZMQUdfRklYRURfQ0xPQ0siIGxpbms9IkdzdFBpcGVsaW5lLmh0bWwjR1NULVBJUEVMSU5FLUZMQUctRklYRUQtQ0xPQ0s6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUElQRUxJTkVfRkxBR19MQVNUIiBsaW5rPSJHc3RQaXBlbGluZS5odG1sI0dTVC1QSVBFTElORS1GTEFHLUxBU1Q6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUExVR0lOX0VSUk9SX01PRFVMRSIgbGluaz0iR3N0UGx1Z2luLmh0bWwjR1NULVBMVUdJTi1FUlJPUi1NT0RVTEU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUExVR0lOX0VSUk9SX0RFUEVOREVOQ0lFUyIgbGluaz0iR3N0UGx1Z2luLmh0bWwjR1NULVBMVUdJTi1FUlJPUi1ERVBFTkRFTkNJRVM6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUExVR0lOX0VSUk9SX05BTUVfTUlTTUFUQ0giIGxpbms9IkdzdFBsdWdpbi5odG1sI0dTVC1QTFVHSU4tRVJST1ItTkFNRS1NSVNNQVRDSDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QTFVHSU5fRkxBR19DQUNIRUQiIGxpbms9IkdzdFBsdWdpbi5odG1sI0dTVC1QTFVHSU4tRkxBRy1DQUNIRUQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUExVR0lOX0ZMQUdfQkxBQ0tMSVNURUQiIGxpbms9IkdzdFBsdWdpbi5odG1sI0dTVC1QTFVHSU4tRkxBRy1CTEFDS0xJU1RFRDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX05PTkUiIGxpbms9IkdzdFBsdWdpbi5odG1sI0dTVC1QTFVHSU4tREVQRU5ERU5DWS1GTEFHLU5PTkU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUExVR0lOX0RFUEVOREVOQ1lfRkxBR19SRUNVUlNFIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNHU1QtUExVR0lOLURFUEVOREVOQ1ktRkxBRy1SRUNVUlNFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfUEFUSFNfQVJFX0RFRkFVTFRfT05MWSIgbGluaz0iR3N0UGx1Z2luLmh0bWwjR1NULVBMVUdJTi1ERVBFTkRFTkNZLUZMQUctUEFUSFMtQVJFLURFRkFVTFQtT05MWTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX0ZJTEVfTkFNRV9JU19TVUZGSVgiIGxpbms9IkdzdFBsdWdpbi5odG1sI0dTVC1QTFVHSU4tREVQRU5ERU5DWS1GTEFHLUZJTEUtTkFNRS1JUy1TVUZGSVg6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUkFOS19OT05FIiBsaW5rPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjR1NULVJBTkstTk9ORTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9SQU5LX01BUkdJTkFMIiBsaW5rPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjR1NULVJBTkstTUFSR0lOQUw6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUkFOS19TRUNPTkRBUlkiIGxpbms9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNHU1QtUkFOSy1TRUNPTkRBUlk6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUkFOS19QUklNQVJZIiBsaW5rPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjR1NULVJBTkstUFJJTUFSWTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9RVUVSWV9OT05FIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHU1QtUVVFUlktTk9ORTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9RVUVSWV9QT1NJVElPTiIgbGluaz0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR1NULVFVRVJZLVBPU0lUSU9OOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1FVRVJZX0RVUkFUSU9OIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHU1QtUVVFUlktRFVSQVRJT046Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUVVFUllfTEFURU5DWSIgbGluaz0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR1NULVFVRVJZLUxBVEVOQ1k6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUVVFUllfSklUVEVSIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHU1QtUVVFUlktSklUVEVSOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1FVRVJZX1JBVEUiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1SQVRFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1FVRVJZX1NFRUtJTkciIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1TRUVLSU5HOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1FVRVJZX1NFR01FTlQiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1TRUdNRU5UOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1FVRVJZX0NPTlZFUlQiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1DT05WRVJUOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1FVRVJZX0ZPUk1BVFMiIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1GT1JNQVRTOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1FVRVJZX0JVRkZFUklORyIgbGluaz0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR1NULVFVRVJZLUJVRkZFUklORzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9RVUVSWV9DVVNUT00iIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1DVVNUT006Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUVVFUllfVVJJIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHU1QtUVVFUlktVVJJOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1FVRVJZX0FMTE9DQVRJT04iIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1BTExPQ0FUSU9OOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1FVRVJZX1NDSEVEVUxJTkciIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1TQ0hFRFVMSU5HOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0JVRkZFUklOR19TVFJFQU0iIGxpbms9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dTVC1CVUZGRVJJTkctU1RSRUFNOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0JVRkZFUklOR19ET1dOTE9BRCIgbGluaz0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR1NULUJVRkZFUklORy1ET1dOTE9BRDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9CVUZGRVJJTkdfVElNRVNISUZUIiBsaW5rPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHU1QtQlVGRkVSSU5HLVRJTUVTSElGVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9CVUZGRVJJTkdfTElWRSIgbGluaz0iZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR1NULUJVRkZFUklORy1MSVZFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NFR01FTlRfRkxBR19OT05FIiBsaW5rPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI0dTVC1TRUdNRU5ULUZMQUctTk9ORTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9TRUdNRU5UX0ZMQUdfUkVTRVQiIGxpbms9ImdzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjR1NULVNFR01FTlQtRkxBRy1SRVNFVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9TRUdNRU5UX0ZMQUdfU0tJUCIgbGluaz0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNHU1QtU0VHTUVOVC1GTEFHLVNLSVA6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQ0xPQ0tfVFlQRV9SRUFMVElNRSIgbGluaz0iR3N0U3lzdGVtQ2xvY2suaHRtbCNHU1QtQ0xPQ0stVFlQRS1SRUFMVElNRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9DTE9DS19UWVBFX01PTk9UT05JQyIgbGluaz0iR3N0U3lzdGVtQ2xvY2suaHRtbCNHU1QtQ0xPQ0stVFlQRS1NT05PVE9OSUM6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVEFHX01FUkdFX1VOREVGSU5FRCIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLU1FUkdFLVVOREVGSU5FRDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9UQUdfTUVSR0VfUkVQTEFDRV9BTEwiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1NRVJHRS1SRVBMQUNFLUFMTDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9UQUdfTUVSR0VfUkVQTEFDRSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLU1FUkdFLVJFUExBQ0U6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVEFHX01FUkdFX0FQUEVORCIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLU1FUkdFLUFQUEVORDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9UQUdfTUVSR0VfUFJFUEVORCIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLU1FUkdFLVBSRVBFTkQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVEFHX01FUkdFX0tFRVAiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1NRVJHRS1LRUVQOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1RBR19NRVJHRV9LRUVQX0FMTCIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLU1FUkdFLUtFRVAtQUxMOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1RBR19NRVJHRV9DT1VOVCIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLU1FUkdFLUNPVU5UOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1RBR19GTEFHX1VOREVGSU5FRCIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUZMQUctVU5ERUZJTkVEOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1RBR19GTEFHX01FVEEiIGxpbms9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1GTEFHLU1FVEE6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVEFHX0ZMQUdfRU5DT0RFRCIgbGluaz0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUZMQUctRU5DT0RFRDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9UQUdfRkxBR19ERUNPREVEIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctRkxBRy1ERUNPREVEOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1RBR19GTEFHX0NPVU5UIiBsaW5rPSJnc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctRkxBRy1DT1VOVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9UQVNLX1NUQVJURUQiIGxpbms9IkdzdFRhc2suaHRtbCNHU1QtVEFTSy1TVEFSVEVEOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1RBU0tfU1RPUFBFRCIgbGluaz0iR3N0VGFzay5odG1sI0dTVC1UQVNLLVNUT1BQRUQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVEFTS19QQVVTRUQiIGxpbms9IkdzdFRhc2suaHRtbCNHU1QtVEFTSy1QQVVTRUQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVFlQRV9GSU5EX05PTkUiIGxpbms9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dTVC1UWVBFLUZJTkQtTk9ORTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9UWVBFX0ZJTkRfTUlOSU1VTSIgbGluaz0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR1NULVRZUEUtRklORC1NSU5JTVVNOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1RZUEVfRklORF9QT1NTSUJMRSIgbGluaz0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR1NULVRZUEUtRklORC1QT1NTSUJMRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9UWVBFX0ZJTkRfTElLRUxZIiBsaW5rPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHU1QtVFlQRS1GSU5ELUxJS0VMWTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9UWVBFX0ZJTkRfTkVBUkxZX0NFUlRBSU4iIGxpbms9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dTVC1UWVBFLUZJTkQtTkVBUkxZLUNFUlRBSU46Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVFlQRV9GSU5EX01BWElNVU0iIGxpbms9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dTVC1UWVBFLUZJTkQtTUFYSU1VTTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9VUklfVU5LTk9XTiIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHU1QtVVJJLVVOS05PV046Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVVJJX1NJTksiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR1NULVVSSS1TSU5LOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1VSSV9TUkMiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR1NULVVSSS1TUkM6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU0VBUkNIX01PREVfRVhBQ1QiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1TRUFSQ0gtTU9ERS1FWEFDVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9TRUFSQ0hfTU9ERV9CRUZPUkUiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1TRUFSQ0gtTU9ERS1CRUZPUkU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU0VBUkNIX01PREVfQUZURVIiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1TRUFSQ0gtTU9ERS1BRlRFUjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9MRVZFTF9OT05FIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1MRVZFTC1OT05FOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0xFVkVMX0VSUk9SIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1MRVZFTC1FUlJPUjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9MRVZFTF9XQVJOSU5HIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1MRVZFTC1XQVJOSU5HOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0xFVkVMX0lORk8iIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUxFVkVMLUlORk86Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTEVWRUxfREVCVUciIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUxFVkVMLURFQlVHOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0xFVkVMX0xPRyIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTEVWRUwtTE9HOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0xFVkVMX0ZJWE1FIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1MRVZFTC1GSVhNRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9MRVZFTF9UUkFDRSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTEVWRUwtVFJBQ0U6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTEVWRUxfTUVNRFVNUCIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTEVWRUwtTUVNRFVNUDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9MRVZFTF9DT1VOVCIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTEVWRUwtQ09VTlQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfREVCVUdfRkdfQkxBQ0siIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUZHLUJMQUNLOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0RFQlVHX0ZHX1JFRCIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctRkctUkVEOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0RFQlVHX0ZHX0dSRUVOIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1GRy1HUkVFTjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9ERUJVR19GR19ZRUxMT1ciIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUZHLVlFTExPVzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9ERUJVR19GR19CTFVFIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1GRy1CTFVFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0RFQlVHX0ZHX01BR0VOVEEiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUZHLU1BR0VOVEE6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfREVCVUdfRkdfQ1lBTiIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctRkctQ1lBTjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9ERUJVR19GR19XSElURSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctRkctV0hJVEU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfREVCVUdfQkdfQkxBQ0siIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUJHLUJMQUNLOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0RFQlVHX0JHX1JFRCIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctQkctUkVEOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0RFQlVHX0JHX0dSRUVOIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1CRy1HUkVFTjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9ERUJVR19CR19ZRUxMT1ciIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUJHLVlFTExPVzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9ERUJVR19CR19CTFVFIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1CRy1CTFVFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0RFQlVHX0JHX01BR0VOVEEiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUJHLU1BR0VOVEE6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfREVCVUdfQkdfQ1lBTiIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctQkctQ1lBTjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9ERUJVR19CR19XSElURSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctQkctV0hJVEU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfREVCVUdfQk9MRCIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctQk9MRDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9ERUJVR19VTkRFUkxJTkUiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLVVOREVSTElORTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9ERUJVR19HUkFQSF9TSE9XX01FRElBX1RZUEUiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUdSQVBILVNIT1ctTUVESUEtVFlQRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9ERUJVR19HUkFQSF9TSE9XX0NBUFNfREVUQUlMUyIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctR1JBUEgtU0hPVy1DQVBTLURFVEFJTFM6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfREVCVUdfR1JBUEhfU0hPV19OT05fREVGQVVMVF9QQVJBTVMiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUdSQVBILVNIT1ctTk9OLURFRkFVTFQtUEFSQU1TOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0RFQlVHX0dSQVBIX1NIT1dfU1RBVEVTIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1HUkFQSC1TSE9XLVNUQVRFUzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctR1JBUEgtU0hPVy1BTEw6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQUxMT0NfVFJBQ0VfTk9ORSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjR1NULUFMTE9DLVRSQUNFLU5PTkU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQUxMT0NfVFJBQ0VfTElWRSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjR1NULUFMTE9DLVRSQUNFLUxJVkU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQUxMT0NfVFJBQ0VfTUVNX0xJVkUiIGxpbms9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sI0dTVC1BTExPQy1UUkFDRS1NRU0tTElWRTpDQVBTIi8+CisgIDwvZnVuY3Rpb25zPgorPC9ib29rPgpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXIuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2MGQwOAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLmh0bWwKQEAgLTAsMCArMSw1NyBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdTdHJlYW1lciBPdmVydmlldzwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LWJ1aWxkaW5nLmh0bWwiIHRpdGxlPSJCdWlsZGluZyBHU3RyZWFtZXIgYW5kIEdTdHJlYW1lciBBcHBsaWNhdGlvbnMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPjx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPsKgPC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtYnVpbGRpbmcuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8ZGl2IGNsYXNzPSJjaGFwdGVyIj4KKzxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiPgorPGEgbmFtZT0iZ3N0cmVhbWVyIj48L2E+R1N0cmVhbWVyIE92ZXJ2aWV3PC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KKzxkaXYgY2xhc3M9InRvYyI+PGRsPgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1idWlsZGluZy5odG1sIj5CdWlsZGluZyBHU3RyZWFtZXIgYW5kIEdTdHJlYW1lciBBcHBsaWNhdGlvbnM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIAorSG93IHRvIGJ1aWxkIHRoZSBHU3RyZWFtZXIgZnJhbWV3b3JrIGFuZCBhcHBsaWNhdGlvbnMgdXNpbmcgaXQuCis8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1ydW5uaW5nLmh0bWwiPlJ1bm5pbmcgR1N0cmVhbWVyIEFwcGxpY2F0aW9uczwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgCitIb3cgdG8gcnVuIGFuZCBkZWJ1ZyB5b3VyIEdTdHJlYW1lciBhcHBsaWNhdGlvbgorPC9zcGFuPgorPC9kdD4KKzwvZGw+PC9kaXY+Cis8cD4KK0dTdHJlYW1lciBpcyBhIHN0cmVhbWluZyBtZWRpYSBmcmFtZXdvcmsuCitJdCB1c2VzIGdyYXBocyBvZiBlbGVtZW50cyB3aGljaCBvcGVyYXRlIG9uIGRhdGEuCitUaGUgZnVuY3Rpb25hbGl0eSB0byBwcm9jZXNzIG1lZGlhIGlzIHByb3ZpZGVkIGJ5IHBsdWctaW5zIHdoaWNoIHByb3ZpZGUKK2ZlYXR1cmVzIGxpa2UgZWxlbWVudHMsIHR5cGVmaW5kaW5nLCBhbmQgc28gb24uCitUaGlzIGFsbG93cyBuZXcgZnVuY3Rpb25hbGl0eSB0byBiZSBhZGRlZCBzaW1wbHkgYnkgaW5zdGFsbGluZyBuZXcgcGx1Zy1pbnMuCisgICAgPC9wPgorPHA+CitHU3RyZWFtZXIgaXMgY3Jvc3MtcGxhdGZvcm0gYW5kIHdvcmtzIG9uIG1vc3QgVU5JWC1saWtlIHBsYXRmb3JtcyBhcyB3ZWxsIGFzCitXaW5kb3dzLiAgSXQgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyhHTlUgTEdQTCkuCisgICAgPC9wPgorPGRpdiBjbGFzcz0ibWVkaWFvYmplY3QiPgorPG9iamVjdCB0eXBlPSJpbWFnZS9zdmcreG1sIiBkYXRhPSJnc3QtdW5pdmVyc2Uuc3ZnIj48L29iamVjdD48ZGl2IGNsYXNzPSJjYXB0aW9uIj48cD5SZWxhdGlvbiBiZXR3ZWVuIGdzdHJlYW1lciBjb3JlIG9iamVjdHMuPC9wPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2hvbWUucG5nIGIvZG9jcy9nc3QvaHRtbC9ob21lLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzAwMzYxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9nc3QvaHRtbC9ob21lLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2luZGV4Lmh0bWwgYi9kb2NzL2dzdC9odG1sL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI5NGZhNAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2h0bWwvaW5kZXguaHRtbApAQCAtMCwwICsxLDIyNiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgT3ZlcnZpZXciPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzxkaXYgY2xhc3M9ImJvb2siPgorPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKzxkaXY+Cis8ZGl2Pjx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMCI+PHRyPjx0aCB2YWxpZ249Im1pZGRsZSI+PHAgY2xhc3M9InRpdGxlIj5HU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3A+PC90aD48L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2PjxwIGNsYXNzPSJyZWxlYXNlaW5mbyI+CisgICAgICBmb3IgR1N0cmVhbWVyIENvcmUgMC4xMSAoMC4xMS4xKQorICAgICAgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgb24tbGluZSBhdAorICAgICAgPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXIvaHRtbC8iIHRhcmdldD0iX3RvcCI+aHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyL2h0bWwvPC9hPi4KKyAgICA8L3A+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzwvZGl2PgorPGRpdiBjbGFzcz0idG9jIj48ZGw+Cis8ZHQ+PHNwYW4gY2xhc3M9ImNoYXB0ZXIiPjxhIGhyZWY9ImdzdHJlYW1lci5odG1sIj5HU3RyZWFtZXIgT3ZlcnZpZXc8L2E+PC9zcGFuPjwvZHQ+Cis8ZGQ+PGRsPgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1idWlsZGluZy5odG1sIj5CdWlsZGluZyBHU3RyZWFtZXIgYW5kIEdTdHJlYW1lciBBcHBsaWNhdGlvbnM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIAorSG93IHRvIGJ1aWxkIHRoZSBHU3RyZWFtZXIgZnJhbWV3b3JrIGFuZCBhcHBsaWNhdGlvbnMgdXNpbmcgaXQuCis8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1ydW5uaW5nLmh0bWwiPlJ1bm5pbmcgR1N0cmVhbWVyIEFwcGxpY2F0aW9uczwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgCitIb3cgdG8gcnVuIGFuZCBkZWJ1ZyB5b3VyIEdTdHJlYW1lciBhcHBsaWNhdGlvbgorPC9zcGFuPgorPC9kdD4KKzwvZGw+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0iY2hhcHRlciI+PGEgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPkdTdHJlYW1lciBDb3JlIExpYnJhcnk8L2E+PC9zcGFuPjwvZHQ+Cis8ZGQ+PGRsPgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCI+R3N0PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBNZWRpYSBsaWJyYXJ5IHN1cHBvcnRpbmcgYXJiaXRyYXJ5IGZvcm1hdHMgYW5kIGZpbHRlcgorICAgICAgICAgICAgICAgICAgICBncmFwaHMuPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCI+R3N0QXRvbWljUXVldWU8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEFuIGF0b21pYyBxdWV1ZSBpbXBsZW1lbnRhdGlvbjwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0QmluLmh0bWwiPkdzdEJpbjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQmFzZSBjbGFzcyBhbmQgZWxlbWVudCB0aGF0IGNhbiBjb250YWluIG90aGVyIGVsZW1lbnRzPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwiPkdzdEJ1ZmZlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgRGF0YS1wYXNzaW5nIGJ1ZmZlciB0eXBlLCBzdXBwb3J0aW5nIHN1Yi1idWZmZXJzLjwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCI+R3N0QnVmZmVyTGlzdDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgTGlzdHMgb2YgYnVmZmVycyBmb3IgZGF0YS1wYXNzaW5nPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sIj5Hc3RCdWZmZXJQb29sPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBQb29sIGZvciBidWZmZXJzPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RCdXMuaHRtbCI+R3N0QnVzPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBBc3luY2hyb25vdXMgbWVzc2FnZSBidXMgc3Vic3lzdGVtPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0Q2Fwcy5odG1sIj5Hc3RDYXBzPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBTdHJ1Y3R1cmUgZGVzY3JpYmluZyBzZXRzIG9mIG1lZGlhIGZvcm1hdHM8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCI+R3N0Q2hpbGRQcm94eTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgSW50ZXJmYWNlIGZvciBtdWx0aSBjaGlsZCBlbGVtZW50cy48L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdENsb2NrLmh0bWwiPkdzdENsb2NrPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBBYnN0cmFjdCBjbGFzcyBmb3IgZ2xvYmFsIGNsb2Nrczwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWdzdGNvbmZpZy5odG1sIj5nc3Rjb25maWc8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEJ1aWxkIGNvbmZpZ3VyYXRpb24gb3B0aW9uczwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwiPkdzdERhdGVUaW1lPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBBIGRhdGUsIHRpbWUgYW5kIHRpbWV6b25lIHN0cnVjdHVyZTwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0RWxlbWVudC5odG1sIj5Hc3RFbGVtZW50PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBhbGwgcGlwZWxpbmUgZWxlbWVudHM8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiPkdzdEVsZW1lbnRGYWN0b3J5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBDcmVhdGUgR3N0RWxlbWVudHMgZnJvbSBhIGZhY3Rvcnk8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCI+R3N0R0Vycm9yPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBDYXRlZ29yaXplZCBlcnJvciBtZXNzYWdlczwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwiPkdzdEV2ZW50PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBTdHJ1Y3R1cmUgZGVzY3JpYmluZyBldmVudHMgdGhhdCBhcmUgcGFzc2VkIHVwIGFuZCBkb3duCisgICAgICAgICAgICAgICAgICAgIGEgcGlwZWxpbmU8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RGaWx0ZXIuaHRtbCI+R3N0RmlsdGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBBIHV0aWxpdHkgZnVuY3Rpb24gdG8gZmlsdGVyIEdMaXN0cy48L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCI+R3N0Rm9ybWF0PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBEeW5hbWljYWxseSByZWdpc3RlciBuZXcgZGF0YSBmb3JtYXRzPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RHaG9zdFBhZC5odG1sIj5Hc3RHaG9zdFBhZDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgUHNldWRvIGxpbmsgcGFkczwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0SW5kZXguaHRtbCI+R3N0SW5kZXg8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEdlbmVyYXRlIGluZGV4ZXMgb24gb2JqZWN0czwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0SW5kZXhGYWN0b3J5Lmh0bWwiPkdzdEluZGV4RmFjdG9yeTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQ3JlYXRlIEdzdEluZGV4ZXMgZnJvbSBhIGZhY3Rvcnk8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sIj5Hc3RJdGVyYXRvcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgT2JqZWN0IHRvIHJldHJpZXZlIG11bHRpcGxlIGVsZW1lbnRzIGluIGEgdGhyZWFkc2FmZQord2F5Ljwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sIj5Hc3RNZW1vcnk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIHJlZmNvdW50ZWQgd3JhcHBlciBmb3IgbWVtb3J5IGJsb2Nrczwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCI+R3N0TWVzc2FnZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgTGlnaHR3ZWlnaHQgb2JqZWN0cyB0byBzaWduYWwgdGhlIGFwcGxpY2F0aW9uIG9mCisgICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lIGV2ZW50czwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCI+R3N0TWV0YTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQnVmZmVyIG1ldGFkYXRhPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sIj5Hc3RNaW5pT2JqZWN0PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBMaWdodHdlaWdodCBiYXNlIGNsYXNzIGZvciB0aGUgR1N0cmVhbWVyIG9iamVjdCBoaWVyYXJjaHk8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdE9iamVjdC5odG1sIj5Hc3RPYmplY3Q8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEJhc2UgY2xhc3MgZm9yIHRoZSBHU3RyZWFtZXIgb2JqZWN0IGhpZXJhcmNoeTwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0UGFkLmh0bWwiPkdzdFBhZDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgT2JqZWN0IGNvbnRhaW5lZCBieSBlbGVtZW50cyB0aGF0IGFsbG93cyBsaW5rcyB0bworICAgICAgICAgICAgICAgICAgICBvdGhlciBlbGVtZW50czwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCI+R3N0UGFkVGVtcGxhdGU8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIERlc2NyaWJlIHRoZSBtZWRpYSB0eXBlIG9mIGEgcGFkLjwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sIj5Hc3RQYXJhbVNwZWM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEdQYXJhbVNwZWMgaW1wbGVtZW50YXRpb25zIHNwZWNpZmljCit0byBHU3RyZWFtZXI8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sIj5Hc3RQYXJzZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgR2V0IGEgcGlwZWxpbmUgZnJvbSBhIHRleHQgcGlwZWxpbmUgZGVzY3JpcHRpb248L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiPkdzdFBpcGVsaW5lPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBUb3AtbGV2ZWwgYmluIHdpdGggY2xvY2tpbmcgYW5kIGJ1cyBtYW5hZ2VtZW50CisgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkuPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RQbHVnaW4uaHRtbCI+R3N0UGx1Z2luPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBDb250YWluZXIgZm9yIGZlYXR1cmVzIGxvYWRlZCBmcm9tIGEgc2hhcmVkIG9iamVjdCBtb2R1bGU8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCI+R3N0UGx1Z2luRmVhdHVyZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQmFzZSBjbGFzcyBmb3IgY29udGVudHMgb2YgYSBHc3RQbHVnaW48L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwiPkdzdFBvbGw8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEtlZXAgdHJhY2sgb2YgZmlsZSBkZXNjcmlwdG9ycyBhbmQgbWFrZSBpdCBwb3NzaWJsZQorICAgICAgICAgICAgICAgICAgICB0byB3YWl0IG9uIHRoZW0gaW4gYSBjYW5jZWxhYmxlIHdheTwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiPkdzdFByZXNldDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgaGVscGVyIGludGVyZmFjZSBmb3IgZWxlbWVudCBwcmVzZXRzPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCI+R3N0UXVlcnk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIER5bmFtaWNhbGx5IHJlZ2lzdGVyIG5ldyBxdWVyeSB0eXBlcy4gUHJvdmlkZSBmdW5jdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgdG8gY3JlYXRlIHF1ZXJpZXMsIGFuZCB0byBzZXQgYW5kIHBhcnNlIHZhbHVlcyBpbiB0aGVtLjwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCI+R3N0UmVnaXN0cnk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIG1hbmFnZW1lbnQgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gb2JqZWN0czwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCI+R3N0U2VnbWVudDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgU3RydWN0dXJlIGRlc2NyaWJpbmcgdGhlIGNvbmZpZ3VyZWQgcmVnaW9uIG9mIGludGVyZXN0CisgICAgICAgICAgICAgICAgICAgIGluIGEgbWVkaWEgZmlsZS48L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCI+R3N0U3RydWN0dXJlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBHZW5lcmljIHN0cnVjdHVyZSBjb250YWluaW5nIGZpZWxkcyBvZiBuYW1lcyBhbmQgdmFsdWVzPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RTeXN0ZW1DbG9jay5odG1sIj5Hc3RTeXN0ZW1DbG9jazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgRGVmYXVsdCBjbG9jayB0aGF0IHVzZXMgdGhlIGN1cnJlbnQgc3lzdGVtIHRpbWU8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwiPkdzdFRhZ0xpc3Q8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIExpc3Qgb2YgdGFncyBhbmQgdmFsdWVzIHVzZWQgdG8gZGVzY3JpYmUgbWVkaWEgbWV0YWRhdGE8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIj5Hc3RUYWdTZXR0ZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEVsZW1lbnQgaW50ZXJmYWNlIHRoYXQgYWxsb3dzIHNldHRpbmcgYW5kIHJldHJpZXZhbAorICAgICAgICAgICAgICAgICAgICBvZiBtZWRpYSBtZXRhZGF0YTwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0VGFzay5odG1sIj5Hc3RUYXNrPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBBYnN0cmFjdGlvbiBvZiBHU3RyZWFtZXIgc3RyZWFtaW5nIHRocmVhZHMuPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RUYXNrUG9vbC5odG1sIj5Hc3RUYXNrUG9vbDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgUG9vbCBvZiBHU3RyZWFtZXIgc3RyZWFtaW5nIHRocmVhZHM8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sIj5Hc3RUeXBlRmluZDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgU3RyZWFtIHR5cGUgZGV0ZWN0aW9uPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCI+R3N0VHlwZUZpbmRGYWN0b3J5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBJbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlcmVkIHR5cGVmaW5kIGZ1bmN0aW9uczwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCI+R3N0VXJpSGFuZGxlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgSW50ZXJmYWNlIHRvIGVhc2UgVVJJIGhhbmRsaW5nIGluIHBsdWdpbnMuPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCI+R3N0VXRpbHM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnM8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIj5Hc3RWYWx1ZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgR1ZhbHVlIGltcGxlbWVudGF0aW9ucyBzcGVjaWZpYwordG8gR1N0cmVhbWVyPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sIj5Hc3RWZXJzaW9uPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBHU3RyZWFtZXIgdmVyc2lvbiBtYWNyb3MuPC9zcGFuPgorPC9kdD4KKzwvZGw+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0iY2hhcHRlciI+PGEgaHJlZj0iZ3N0cmVhbWVyLXN1cHBvcnQuaHRtbCI+R1N0cmVhbWVyIENvcmUgU3VwcG9ydDwvYT48L3NwYW4+PC9kdD4KKzxkZD48ZGw+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCI+R3N0SW5mbzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgRGVidWdnaW5nIGFuZCBsb2dnaW5nIGZhY2lsaXRpZXM8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RUcmFjZS5odG1sIj5Hc3RUcmFjZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgVHJhY2luZyBmdW5jdGlvbmFsaXR5PC9zcGFuPgorPC9kdD4KKzwvZGw+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0iY2hhcHRlciI+PGEgaHJlZj0iZ3N0cmVhbWVyLWhpZXJhcmNoeS5odG1sIj5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48L2R0PgorPGR0PjxzcGFuIGNsYXNzPSJpbmRleCI+PGEgaHJlZj0iYXBpLWluZGV4LWZ1bGwuaHRtbCI+QVBJIEluZGV4PC9hPjwvc3Bhbj48L2R0PgorPGR0PjxzcGFuIGNsYXNzPSJpbmRleCI+PGEgaHJlZj0iYXBpLWluZGV4LWRlcHJlY2F0ZWQuaHRtbCI+SW5kZXggb2YgZGVwcmVjYXRlZCBBUEk8L2E+PC9zcGFuPjwvZHQ+Cis8ZHQ+PHNwYW4gY2xhc3M9Imdsb3NzYXJ5Ij48YSBocmVmPSJhbm5vdGF0aW9uLWdsb3NzYXJ5Lmh0bWwiPkFubm90YXRpb24gR2xvc3Nhcnk8L2E+PC9zcGFuPjwvZHQ+Cis8L2RsPjwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9pbmRleC5zZ21sIGIvZG9jcy9nc3QvaHRtbC9pbmRleC5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMGQ3NjkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dzdC9odG1sL2luZGV4LnNnbWwKQEAgLTAsMCArMSwyNTI2IEBACis8T05MSU5FIGhyZWY9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sLyI+Cis8QU5DSE9SIGlkPSJnc3QtYnVpbGRpbmciIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdC1idWlsZGluZy5odG1sIj4KKzxBTkNIT1IgaWQ9ImdzdC1ydW5uaW5nIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3QtcnVubmluZy5odG1sIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3QiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3QuaHRtbCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0LnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Lmh0bWwjZ3N0cmVhbWVyLUdzdC5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0LmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Lmh0bWwjZ3N0cmVhbWVyLUdzdC5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0LmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3QuaHRtbCNnc3RyZWFtZXItR3N0LmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iZ3N0LWluaXQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3QuaHRtbCNnc3QtaW5pdCI+Cis8QU5DSE9SIGlkPSJnc3QtaW5pdC1jaGVjayIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1pbml0LWNoZWNrIj4KKzxBTkNIT1IgaWQ9ImdzdC1pbml0LWdldC1vcHRpb24tZ3JvdXAiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3QuaHRtbCNnc3QtaW5pdC1nZXQtb3B0aW9uLWdyb3VwIj4KKzxBTkNIT1IgaWQ9ImdzdC1pcy1pbml0aWFsaXplZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1pcy1pbml0aWFsaXplZCI+Cis8QU5DSE9SIGlkPSJnc3QtZGVpbml0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LWRlaW5pdCI+Cis8QU5DSE9SIGlkPSJnc3QtdmVyc2lvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC12ZXJzaW9uIj4KKzxBTkNIT1IgaWQ9ImdzdC12ZXJzaW9uLXN0cmluZyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC12ZXJzaW9uLXN0cmluZyI+Cis8QU5DSE9SIGlkPSJnc3Qtc2VndHJhcC1pcy1lbmFibGVkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LXNlZ3RyYXAtaXMtZW5hYmxlZCI+Cis8QU5DSE9SIGlkPSJnc3Qtc2VndHJhcC1zZXQtZW5hYmxlZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1zZWd0cmFwLXNldC1lbmFibGVkIj4KKzxBTkNIT1IgaWQ9ImdzdC1yZWdpc3RyeS1mb3JrLWlzLWVuYWJsZWQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3QuaHRtbCNnc3QtcmVnaXN0cnktZm9yay1pcy1lbmFibGVkIj4KKzxBTkNIT1IgaWQ9ImdzdC1yZWdpc3RyeS1mb3JrLXNldC1lbmFibGVkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWZvcmstc2V0LWVuYWJsZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LXVwZGF0ZS1yZWdpc3RyeSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC11cGRhdGUtcmVnaXN0cnkiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI2dzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI2dzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0QXRvbWljUXVldWUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI0dzdEF0b21pY1F1ZXVlIj4KKzxBTkNIT1IgaWQ9ImdzdC1hdG9taWMtcXVldWUtbmV3IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNnc3QtYXRvbWljLXF1ZXVlLW5ldyI+Cis8QU5DSE9SIGlkPSJnc3QtYXRvbWljLXF1ZXVlLXJlZiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjZ3N0LWF0b21pYy1xdWV1ZS1yZWYiPgorPEFOQ0hPUiBpZD0iZ3N0LWF0b21pYy1xdWV1ZS11bnJlZiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjZ3N0LWF0b21pYy1xdWV1ZS11bnJlZiI+Cis8QU5DSE9SIGlkPSJnc3QtYXRvbWljLXF1ZXVlLXB1c2giIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI2dzdC1hdG9taWMtcXVldWUtcHVzaCI+Cis8QU5DSE9SIGlkPSJnc3QtYXRvbWljLXF1ZXVlLXBlZWsiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI2dzdC1hdG9taWMtcXVldWUtcGVlayI+Cis8QU5DSE9SIGlkPSJnc3QtYXRvbWljLXF1ZXVlLXBvcCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjZ3N0LWF0b21pYy1xdWV1ZS1wb3AiPgorPEFOQ0hPUiBpZD0iZ3N0LWF0b21pYy1xdWV1ZS1sZW5ndGgiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI2dzdC1hdG9taWMtcXVldWUtbGVuZ3RoIj4KKzxBTkNIT1IgaWQ9IkdzdEJpbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QmluLmh0bWwiPgorPEFOQ0hPUiBpZD0iR3N0QmluLnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCaW4uaHRtbCNHc3RCaW4uc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iR3N0QmluLm9iamVjdC1oaWVyYXJjaHkiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEJpbi5odG1sI0dzdEJpbi5vYmplY3QtaGllcmFyY2h5Ij4KKzxBTkNIT1IgaWQ9IkdzdEJpbi5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCaW4uaHRtbCNHc3RCaW4uaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+Cis8QU5DSE9SIGlkPSJHc3RCaW4ucHJvcGVydGllcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QmluLmh0bWwjR3N0QmluLnByb3BlcnRpZXMiPgorPEFOQ0hPUiBpZD0iR3N0QmluLnNpZ25hbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEJpbi5odG1sI0dzdEJpbi5zaWduYWxzIj4KKzxBTkNIT1IgaWQ9IkdzdEJpbi5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QmluLmh0bWwjR3N0QmluLmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdEJpbi5kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCaW4uaHRtbCNHc3RCaW4uZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RCaW4tc3RydWN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCaW4uaHRtbCNHc3RCaW4tc3RydWN0Ij4KKzxBTkNIT1IgaWQ9IkdzdEJpbkNsYXNzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCaW4uaHRtbCNHc3RCaW5DbGFzcyI+Cis8QU5DSE9SIGlkPSJnc3QtYmluLW5ldyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QmluLmh0bWwjZ3N0LWJpbi1uZXciPgorPEFOQ0hPUiBpZD0iZ3N0LWJpbi1hZGQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEJpbi5odG1sI2dzdC1iaW4tYWRkIj4KKzxBTkNIT1IgaWQ9ImdzdC1iaW4tcmVtb3ZlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCaW4uaHRtbCNnc3QtYmluLXJlbW92ZSI+Cis8QU5DSE9SIGlkPSJnc3QtYmluLWdldC1ieS1uYW1lIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCaW4uaHRtbCNnc3QtYmluLWdldC1ieS1uYW1lIj4KKzxBTkNIT1IgaWQ9ImdzdC1iaW4tZ2V0LWJ5LW5hbWUtcmVjdXJzZS11cCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QmluLmh0bWwjZ3N0LWJpbi1nZXQtYnktbmFtZS1yZWN1cnNlLXVwIj4KKzxBTkNIT1IgaWQ9ImdzdC1iaW4tZ2V0LWJ5LWludGVyZmFjZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QmluLmh0bWwjZ3N0LWJpbi1nZXQtYnktaW50ZXJmYWNlIj4KKzxBTkNIT1IgaWQ9ImdzdC1iaW4taXRlcmF0ZS1lbGVtZW50cyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QmluLmh0bWwjZ3N0LWJpbi1pdGVyYXRlLWVsZW1lbnRzIj4KKzxBTkNIT1IgaWQ9ImdzdC1iaW4taXRlcmF0ZS1yZWN1cnNlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCaW4uaHRtbCNnc3QtYmluLWl0ZXJhdGUtcmVjdXJzZSI+Cis8QU5DSE9SIGlkPSJnc3QtYmluLWl0ZXJhdGUtc2lua3MiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEJpbi5odG1sI2dzdC1iaW4taXRlcmF0ZS1zaW5rcyI+Cis8QU5DSE9SIGlkPSJnc3QtYmluLWl0ZXJhdGUtc29ydGVkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCaW4uaHRtbCNnc3QtYmluLWl0ZXJhdGUtc29ydGVkIj4KKzxBTkNIT1IgaWQ9ImdzdC1iaW4taXRlcmF0ZS1zb3VyY2VzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCaW4uaHRtbCNnc3QtYmluLWl0ZXJhdGUtc291cmNlcyI+Cis8QU5DSE9SIGlkPSJnc3QtYmluLWl0ZXJhdGUtYWxsLWJ5LWludGVyZmFjZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QmluLmh0bWwjZ3N0LWJpbi1pdGVyYXRlLWFsbC1ieS1pbnRlcmZhY2UiPgorPEFOQ0hPUiBpZD0iZ3N0LWJpbi1yZWNhbGN1bGF0ZS1sYXRlbmN5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCaW4uaHRtbCNnc3QtYmluLXJlY2FsY3VsYXRlLWxhdGVuY3kiPgorPEFOQ0hPUiBpZD0iZ3N0LWJpbi1hZGQtbWFueSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QmluLmh0bWwjZ3N0LWJpbi1hZGQtbWFueSI+Cis8QU5DSE9SIGlkPSJnc3QtYmluLXJlbW92ZS1tYW55IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCaW4uaHRtbCNnc3QtYmluLXJlbW92ZS1tYW55Ij4KKzxBTkNIT1IgaWQ9ImdzdC1iaW4tZmluZC11bmxpbmtlZC1wYWQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEJpbi5odG1sI2dzdC1iaW4tZmluZC11bmxpbmtlZC1wYWQiPgorPEFOQ0hPUiBpZD0iR3N0QmluRmxhZ3MiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEJpbi5odG1sI0dzdEJpbkZsYWdzIj4KKzxBTkNIT1IgaWQ9IkdTVC1CSU4tRkxBRy1MQVNUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEJpbi5odG1sI0dTVC1CSU4tRkxBRy1MQVNUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUJJTi1DSElMRFJFTjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCaW4uaHRtbCNHU1QtQklOLUNISUxEUkVOOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUJJTi1DSElMRFJFTi1DT09LSUU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QmluLmh0bWwjR1NULUJJTi1DSElMRFJFTi1DT09LSUU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQklOLU5VTUNISUxEUkVOOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEJpbi5odG1sI0dTVC1CSU4tTlVNQ0hJTERSRU46Q0FQUyI+Cis8QU5DSE9SIGlkPSJHc3RCaW4ucHJvcGVydHktZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QmluLmh0bWwjR3N0QmluLnByb3BlcnR5LWRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0QmluLS1hc3luYy1oYW5kbGluZyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QmluLmh0bWwjR3N0QmluLS1hc3luYy1oYW5kbGluZyI+Cis8QU5DSE9SIGlkPSJHc3RCaW4tLW1lc3NhZ2UtZm9yd2FyZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QmluLmh0bWwjR3N0QmluLS1tZXNzYWdlLWZvcndhcmQiPgorPEFOQ0hPUiBpZD0iR3N0QmluLnNpZ25hbC1kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCaW4uaHRtbCNHc3RCaW4uc2lnbmFsLWRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0QmluLWRvLWxhdGVuY3kiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEJpbi5odG1sI0dzdEJpbi1kby1sYXRlbmN5Ij4KKzxBTkNIT1IgaWQ9IkdzdEJpbi1lbGVtZW50LWFkZGVkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCaW4uaHRtbCNHc3RCaW4tZWxlbWVudC1hZGRlZCI+Cis8QU5DSE9SIGlkPSJHc3RCaW4tZWxlbWVudC1yZW1vdmVkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCaW4uaHRtbCNHc3RCaW4tZWxlbWVudC1yZW1vdmVkIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RCdWZmZXIiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0QnVmZmVyLnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0cmVhbWVyLUdzdEJ1ZmZlci5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0QnVmZmVyLmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0cmVhbWVyLUdzdEJ1ZmZlci5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0QnVmZmVyLmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3RyZWFtZXItR3N0QnVmZmVyLmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0QnVmZmVyIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIj4KKzxBTkNIT1IgaWQ9IkdzdEJ1ZmZlckZsYWdzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyRmxhZ3MiPgorPEFOQ0hPUiBpZD0iR1NULUJVRkZFUi1GTEFHLUxJVkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItRkxBRy1MSVZFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUJVRkZFUi1GTEFHLURFQ09ERS1PTkxZOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUctREVDT0RFLU9OTFk6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQlVGRkVSLUZMQUctRElTQ09OVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHLURJU0NPTlQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQlVGRkVSLUZMQUctUkVTWU5DOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUctUkVTWU5DOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUJVRkZFUi1GTEFHLUNPUlJVUFRFRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHLUNPUlJVUFRFRDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1CVUZGRVItRkxBRy1NQVJLRVI6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItRkxBRy1NQVJLRVI6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQlVGRkVSLUZMQUctSEVBREVSOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUctSEVBREVSOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUJVRkZFUi1GTEFHLUdBUDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHLUdBUDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1CVUZGRVItRkxBRy1EUk9QUEFCTEU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItRkxBRy1EUk9QUEFCTEU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQlVGRkVSLUZMQUctREVMVEEtVU5JVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHLURFTFRBLVVOSVQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQlVGRkVSLUZMQUctSU4tQ0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItRkxBRy1JTi1DQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1CVUZGRVItRkxBRy1MQVNUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUctTEFTVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdzdEJ1ZmZlckNvcHlGbGFncyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlckNvcHlGbGFncyI+Cis8QU5DSE9SIGlkPSJHU1QtQlVGRkVSLUNPUFktTk9ORTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1DT1BZLU5PTkU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQlVGRkVSLUNPUFktRkxBR1M6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItQ09QWS1GTEFHUzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1CVUZGRVItQ09QWS1USU1FU1RBTVBTOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUNPUFktVElNRVNUQU1QUzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1CVUZGRVItQ09QWS1NRU1PUlk6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItQ09QWS1NRU1PUlk6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQlVGRkVSLUNPUFktTUVSR0U6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItQ09QWS1NRVJHRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1CVUZGRVItRkxBR1M6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItRkxBR1M6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQlVGRkVSLUZMQUctSVMtU0VUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUctSVMtU0VUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUJVRkZFUi1GTEFHLVNFVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHLVNFVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1CVUZGRVItRkxBRy1VTlNFVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHLVVOU0VUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULU1FVEEtVElNSU5HLUlORk86Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1NRVRBLVRJTUlORy1JTkZPOkNBUFMiPgorPEFOQ0hPUiBpZD0iR3N0TWV0YVRpbWluZyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdE1ldGFUaW1pbmciPgorPEFOQ0hPUiBpZD0iR1NULUJVRkZFUi1USU1FU1RBTVA6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItVElNRVNUQU1QOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUJVRkZFUi1EVVJBVElPTjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1EVVJBVElPTjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1CVUZGRVItT0ZGU0VUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLU9GRlNFVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1CVUZGRVItT0ZGU0VULUVORDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1PRkZTRVQtRU5EOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUJVRkZFUi1PRkZTRVQtTk9ORTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1PRkZTRVQtTk9ORTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1CVUZGRVItRFVSQVRJT04tSVMtVkFMSUQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItRFVSQVRJT04tSVMtVkFMSUQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQlVGRkVSLVRJTUVTVEFNUC1JUy1WQUxJRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1USU1FU1RBTVAtSVMtVkFMSUQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQlVGRkVSLU9GRlNFVC1JUy1WQUxJRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1PRkZTRVQtSVMtVkFMSUQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQlVGRkVSLU9GRlNFVC1FTkQtSVMtVkFMSUQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItT0ZGU0VULUVORC1JUy1WQUxJRDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1CVUZGRVItSVMtRElTQ09OVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1JUy1ESVNDT05UOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUJVRkZFUi1UUkFDRS1OQU1FOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLVRSQUNFLU5BTUU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJnc3QtYnVmZmVyLW5ldyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbmV3Ij4KKzxBTkNIT1IgaWQ9ImdzdC1idWZmZXItbmV3LWFuZC1hbGxvYyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbmV3LWFuZC1hbGxvYyI+Cis8QU5DSE9SIGlkPSJnc3QtYnVmZmVyLW5ldy1hbGxvY2F0ZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbmV3LWFsbG9jYXRlIj4KKzxBTkNIT1IgaWQ9ImdzdC1idWZmZXItbmV3LXdyYXBwZWQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLW5ldy13cmFwcGVkIj4KKzxBTkNIT1IgaWQ9ImdzdC1idWZmZXItbmV3LXdyYXBwZWQtZnVsbCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbmV3LXdyYXBwZWQtZnVsbCI+Cis8QU5DSE9SIGlkPSJnc3QtYnVmZmVyLXJlZiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItcmVmIj4KKzxBTkNIT1IgaWQ9ImdzdC1idWZmZXItdW5yZWYiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXVucmVmIj4KKzxBTkNIT1IgaWQ9ImdzdC1idWZmZXItZ2V0LXNpemVzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1nZXQtc2l6ZXMiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ1ZmZlci1nZXQtc2l6ZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItZ2V0LXNpemUiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ1ZmZlci1yZXNpemUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXJlc2l6ZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnVmZmVyLXNldC1zaXplIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1zZXQtc2l6ZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnVmZmVyLW4tbWVtb3J5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1uLW1lbW9yeSI+Cis8QU5DSE9SIGlkPSJnc3QtYnVmZmVyLXRha2UtbWVtb3J5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci10YWtlLW1lbW9yeSI+Cis8QU5DSE9SIGlkPSJnc3QtYnVmZmVyLXBlZWstbWVtb3J5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1wZWVrLW1lbW9yeSI+Cis8QU5DSE9SIGlkPSJnc3QtYnVmZmVyLXJlbW92ZS1tZW1vcnkiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXJlbW92ZS1tZW1vcnkiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ1ZmZlci1yZW1vdmUtbWVtb3J5LXJhbmdlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZW1vdmUtbWVtb3J5LXJhbmdlIj4KKzxBTkNIT1IgaWQ9ImdzdC1idWZmZXItam9pbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItam9pbiI+Cis8QU5DSE9SIGlkPSJnc3QtYnVmZmVyLW1lcmdlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1tZXJnZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnVmZmVyLW1hcCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbWFwIj4KKzxBTkNIT1IgaWQ9ImdzdC1idWZmZXItdW5tYXAiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXVubWFwIj4KKzxBTkNIT1IgaWQ9ImdzdC1idWZmZXItbWVtY21wIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1tZW1jbXAiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ1ZmZlci1leHRyYWN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1leHRyYWN0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1idWZmZXItZmlsbCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItZmlsbCI+Cis8QU5DSE9SIGlkPSJnc3QtYnVmZmVyLW1lbXNldCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbWVtc2V0Ij4KKzxBTkNIT1IgaWQ9IkdTVC1CVUZGRVItQ09QWS1NRVRBREFUQTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1DT1BZLU1FVEFEQVRBOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUJVRkZFUi1DT1BZLUFMTDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1DT1BZLUFMTDpDQVBTIj4KKzxBTkNIT1IgaWQ9ImdzdC1idWZmZXItY29weSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItY29weSI+Cis8QU5DSE9SIGlkPSJnc3QtYnVmZmVyLWNvcHktaW50byIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItY29weS1pbnRvIj4KKzxBTkNIT1IgaWQ9ImdzdC1idWZmZXItY29weS1yZWdpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWNvcHktcmVnaW9uIj4KKzxBTkNIT1IgaWQ9ImdzdC1idWZmZXItaXMtd3JpdGFibGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWlzLXdyaXRhYmxlIj4KKzxBTkNIT1IgaWQ9ImdzdC1idWZmZXItbWFrZS13cml0YWJsZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbWFrZS13cml0YWJsZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnVmZmVyLXJlcGxhY2UiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXJlcGxhY2UiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ1ZmZlci1pcy1zcGFuLWZhc3QiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWlzLXNwYW4tZmFzdCI+Cis8QU5DSE9SIGlkPSJnc3QtYnVmZmVyLXNwYW4iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXNwYW4iPgorPEFOQ0hPUiBpZD0iZ3N0LWJ1ZmZlci1nZXQtbWV0YSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItZ2V0LW1ldGEiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ1ZmZlci1hZGQtbWV0YSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItYWRkLW1ldGEiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ1ZmZlci1yZW1vdmUtbWV0YSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItcmVtb3ZlLW1ldGEiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ1ZmZlci1pdGVyYXRlLW1ldGEiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWl0ZXJhdGUtbWV0YSI+Cis8QU5DSE9SIGlkPSJnc3QtYnVmZmVyLWFkZC1tZXRhLXRpbWluZyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItYWRkLW1ldGEtdGltaW5nIj4KKzxBTkNIT1IgaWQ9ImdzdC1idWZmZXItZ2V0LW1ldGEtdGltaW5nIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1nZXQtbWV0YS10aW1pbmciPgorPEFOQ0hPUiBpZD0iZ3N0LW1ldGEtdGltaW5nLWdldC1pbmZvIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LW1ldGEtdGltaW5nLWdldC1pbmZvIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RCdWZmZXIuc2VlLWFsc28iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3RyZWFtZXItR3N0QnVmZmVyLnNlZS1hbHNvIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0LnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdHJlYW1lci1Hc3RCdWZmZXJMaXN0LnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0LmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdHJlYW1lci1Hc3RCdWZmZXJMaXN0LmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RCdWZmZXJMaXN0LmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RCdWZmZXJMaXN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3QiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ1ZmZlci1saXN0LW5ldyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtbmV3Ij4KKzxBTkNIT1IgaWQ9ImdzdC1idWZmZXItbGlzdC1zaXplZC1uZXciIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LXNpemVkLW5ldyI+Cis8QU5DSE9SIGlkPSJnc3QtYnVmZmVyLWxpc3QtbGVuIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1sZW4iPgorPEFOQ0hPUiBpZD0iZ3N0LWJ1ZmZlci1saXN0LWFkZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtYWRkIj4KKzxBTkNIT1IgaWQ9ImdzdC1idWZmZXItbGlzdC1pbnNlcnQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LWluc2VydCI+Cis8QU5DSE9SIGlkPSJnc3QtYnVmZmVyLWxpc3QtcmVtb3ZlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1yZW1vdmUiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ1ZmZlci1saXN0LXJlZiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtcmVmIj4KKzxBTkNIT1IgaWQ9ImdzdC1idWZmZXItbGlzdC11bnJlZiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtdW5yZWYiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ1ZmZlci1saXN0LWNvcHkiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LWNvcHkiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ1ZmZlci1saXN0LWlzLXdyaXRhYmxlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1pcy13cml0YWJsZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnVmZmVyLWxpc3QtbWFrZS13cml0YWJsZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtbWFrZS13cml0YWJsZSI+Cis8QU5DSE9SIGlkPSJHc3RCdWZmZXJMaXN0RnVuYyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNHc3RCdWZmZXJMaXN0RnVuYyI+Cis8QU5DSE9SIGlkPSJnc3QtYnVmZmVyLWxpc3QtZm9yZWFjaCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtZm9yZWFjaCI+Cis8QU5DSE9SIGlkPSJnc3QtYnVmZmVyLWxpc3QtZ2V0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1nZXQiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3Quc2VlLWFsc28iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0cmVhbWVyLUdzdEJ1ZmZlckxpc3Quc2VlLWFsc28iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdEJ1ZmZlclBvb2wiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbCI+Cis8QU5DSE9SIGlkPSJHc3RCdWZmZXJQb29sQ2xhc3MiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbENsYXNzIj4KKzxBTkNIT1IgaWQ9IkdzdEJ1ZmZlclBvb2xGbGFncyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNHc3RCdWZmZXJQb29sRmxhZ3MiPgorPEFOQ0hPUiBpZD0iR1NULUJVRkZFUi1QT09MLUZMQUctTk9ORTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI0dTVC1CVUZGRVItUE9PTC1GTEFHLU5PTkU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQlVGRkVSLVBPT0wtRkxBRy1LRVktVU5JVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI0dTVC1CVUZGRVItUE9PTC1GTEFHLUtFWS1VTklUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUJVRkZFUi1QT09MLUZMQUctRE9OVFdBSVQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNHU1QtQlVGRkVSLVBPT0wtRkxBRy1ET05UV0FJVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1CVUZGRVItUE9PTC1GTEFHLURJU0NPTlQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNHU1QtQlVGRkVSLVBPT0wtRkxBRy1ESVNDT05UOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUJVRkZFUi1QT09MLUZMQUctTEFTVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI0dTVC1CVUZGRVItUE9PTC1GTEFHLUxBU1Q6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQlVGRkVSLVBPT0wtSVMtRkxVU0hJTkc6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNHU1QtQlVGRkVSLVBPT0wtSVMtRkxVU0hJTkc6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHc3RCdWZmZXJQb29sUGFyYW1zIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2xQYXJhbXMiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ1ZmZlci1wb29sLW5ldyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtbmV3Ij4KKzxBTkNIT1IgaWQ9ImdzdC1idWZmZXItcG9vbC1jb25maWctZ2V0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1jb25maWctZ2V0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1idWZmZXItcG9vbC1jb25maWctc2V0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1jb25maWctc2V0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1idWZmZXItcG9vbC1jb25maWctYWRkLW9wdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtY29uZmlnLWFkZC1vcHRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1nZXQtb3B0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1jb25maWctZ2V0LW9wdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3QtYnVmZmVyLXBvb2wtY29uZmlnLWhhcy1vcHRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1oYXMtb3B0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdC1idWZmZXItcG9vbC1jb25maWctbi1vcHRpb25zIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1jb25maWctbi1vcHRpb25zIj4KKzxBTkNIT1IgaWQ9ImdzdC1idWZmZXItcG9vbC1nZXQtb3B0aW9ucyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtZ2V0LW9wdGlvbnMiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ1ZmZlci1wb29sLWhhcy1vcHRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWhhcy1vcHRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0LWJ1ZmZlci1wb29sLWdldC1jb25maWciIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWdldC1jb25maWciPgorPEFOQ0hPUiBpZD0iZ3N0LWJ1ZmZlci1wb29sLXNldC1jb25maWciIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLXNldC1jb25maWciPgorPEFOQ0hPUiBpZD0iZ3N0LWJ1ZmZlci1wb29sLXNldC1hY3RpdmUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLXNldC1hY3RpdmUiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ1ZmZlci1wb29sLWlzLWFjdGl2ZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtaXMtYWN0aXZlIj4KKzxBTkNIT1IgaWQ9ImdzdC1idWZmZXItcG9vbC1hY3F1aXJlLWJ1ZmZlciIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtYWNxdWlyZS1idWZmZXIiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ1ZmZlci1wb29sLXJlbGVhc2UtYnVmZmVyIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1yZWxlYXNlLWJ1ZmZlciI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5zZWUtYWxzbyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlclBvb2wuaHRtbCNnc3RyZWFtZXItR3N0QnVmZmVyUG9vbC5zZWUtYWxzbyI+Cis8QU5DSE9SIGlkPSJHc3RCdXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEJ1cy5odG1sIj4KKzxBTkNIT1IgaWQ9IkdzdEJ1cy5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QnVzLmh0bWwjR3N0QnVzLnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9IkdzdEJ1cy5vYmplY3QtaGllcmFyY2h5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCdXMuaHRtbCNHc3RCdXMub2JqZWN0LWhpZXJhcmNoeSI+Cis8QU5DSE9SIGlkPSJHc3RCdXMucHJvcGVydGllcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QnVzLmh0bWwjR3N0QnVzLnByb3BlcnRpZXMiPgorPEFOQ0hPUiBpZD0iR3N0QnVzLnNpZ25hbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEJ1cy5odG1sI0dzdEJ1cy5zaWduYWxzIj4KKzxBTkNIT1IgaWQ9IkdzdEJ1cy5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QnVzLmh0bWwjR3N0QnVzLmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdEJ1cy5kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCdXMuaHRtbCNHc3RCdXMuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RCdXMtc3RydWN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCdXMuaHRtbCNHc3RCdXMtc3RydWN0Ij4KKzxBTkNIT1IgaWQ9IkdzdEJ1c0ZsYWdzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCdXMuaHRtbCNHc3RCdXNGbGFncyI+Cis8QU5DSE9SIGlkPSJHU1QtQlVTLUZMVVNISU5HOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEJ1cy5odG1sI0dTVC1CVVMtRkxVU0hJTkc6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQlVTLUZMQUctTEFTVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCdXMuaHRtbCNHU1QtQlVTLUZMQUctTEFTVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdzdEJ1c1N5bmNSZXBseSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QnVzLmh0bWwjR3N0QnVzU3luY1JlcGx5Ij4KKzxBTkNIT1IgaWQ9IkdTVC1CVVMtRFJPUDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCdXMuaHRtbCNHU1QtQlVTLURST1A6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQlVTLVBBU1M6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QnVzLmh0bWwjR1NULUJVUy1QQVNTOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUJVUy1BU1lOQzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCdXMuaHRtbCNHU1QtQlVTLUFTWU5DOkNBUFMiPgorPEFOQ0hPUiBpZD0iR3N0QnVzRnVuYyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QnVzLmh0bWwjR3N0QnVzRnVuYyI+Cis8QU5DSE9SIGlkPSJHc3RCdXNTeW5jSGFuZGxlciIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QnVzLmh0bWwjR3N0QnVzU3luY0hhbmRsZXIiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ1cy1uZXciIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEJ1cy5odG1sI2dzdC1idXMtbmV3Ij4KKzxBTkNIT1IgaWQ9ImdzdC1idXMtcG9zdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QnVzLmh0bWwjZ3N0LWJ1cy1wb3N0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1idXMtaGF2ZS1wZW5kaW5nIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCdXMuaHRtbCNnc3QtYnVzLWhhdmUtcGVuZGluZyI+Cis8QU5DSE9SIGlkPSJnc3QtYnVzLXBlZWsiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEJ1cy5odG1sI2dzdC1idXMtcGVlayI+Cis8QU5DSE9SIGlkPSJnc3QtYnVzLXBvcCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QnVzLmh0bWwjZ3N0LWJ1cy1wb3AiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ1cy1wb3AtZmlsdGVyZWQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEJ1cy5odG1sI2dzdC1idXMtcG9wLWZpbHRlcmVkIj4KKzxBTkNIT1IgaWQ9ImdzdC1idXMtdGltZWQtcG9wIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCdXMuaHRtbCNnc3QtYnVzLXRpbWVkLXBvcCI+Cis8QU5DSE9SIGlkPSJnc3QtYnVzLXRpbWVkLXBvcC1maWx0ZXJlZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QnVzLmh0bWwjZ3N0LWJ1cy10aW1lZC1wb3AtZmlsdGVyZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ1cy1zZXQtZmx1c2hpbmciIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEJ1cy5odG1sI2dzdC1idXMtc2V0LWZsdXNoaW5nIj4KKzxBTkNIT1IgaWQ9ImdzdC1idXMtc2V0LXN5bmMtaGFuZGxlciIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QnVzLmh0bWwjZ3N0LWJ1cy1zZXQtc3luYy1oYW5kbGVyIj4KKzxBTkNIT1IgaWQ9ImdzdC1idXMtc3luYy1zaWduYWwtaGFuZGxlciIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QnVzLmh0bWwjZ3N0LWJ1cy1zeW5jLXNpZ25hbC1oYW5kbGVyIj4KKzxBTkNIT1IgaWQ9ImdzdC1idXMtY3JlYXRlLXdhdGNoIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCdXMuaHRtbCNnc3QtYnVzLWNyZWF0ZS13YXRjaCI+Cis8QU5DSE9SIGlkPSJnc3QtYnVzLWFkZC13YXRjaC1mdWxsIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCdXMuaHRtbCNnc3QtYnVzLWFkZC13YXRjaC1mdWxsIj4KKzxBTkNIT1IgaWQ9ImdzdC1idXMtYWRkLXdhdGNoIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCdXMuaHRtbCNnc3QtYnVzLWFkZC13YXRjaCI+Cis8QU5DSE9SIGlkPSJnc3QtYnVzLWRpc2FibGUtc3luYy1tZXNzYWdlLWVtaXNzaW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCdXMuaHRtbCNnc3QtYnVzLWRpc2FibGUtc3luYy1tZXNzYWdlLWVtaXNzaW9uIj4KKzxBTkNIT1IgaWQ9ImdzdC1idXMtZW5hYmxlLXN5bmMtbWVzc2FnZS1lbWlzc2lvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QnVzLmh0bWwjZ3N0LWJ1cy1lbmFibGUtc3luYy1tZXNzYWdlLWVtaXNzaW9uIj4KKzxBTkNIT1IgaWQ9ImdzdC1idXMtYXN5bmMtc2lnbmFsLWZ1bmMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEJ1cy5odG1sI2dzdC1idXMtYXN5bmMtc2lnbmFsLWZ1bmMiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ1cy1hZGQtc2lnbmFsLXdhdGNoIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCdXMuaHRtbCNnc3QtYnVzLWFkZC1zaWduYWwtd2F0Y2giPgorPEFOQ0hPUiBpZD0iZ3N0LWJ1cy1hZGQtc2lnbmFsLXdhdGNoLWZ1bGwiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEJ1cy5odG1sI2dzdC1idXMtYWRkLXNpZ25hbC13YXRjaC1mdWxsIj4KKzxBTkNIT1IgaWQ9ImdzdC1idXMtcmVtb3ZlLXNpZ25hbC13YXRjaCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QnVzLmh0bWwjZ3N0LWJ1cy1yZW1vdmUtc2lnbmFsLXdhdGNoIj4KKzxBTkNIT1IgaWQ9ImdzdC1idXMtcG9sbCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QnVzLmh0bWwjZ3N0LWJ1cy1wb2xsIj4KKzxBTkNIT1IgaWQ9IkdzdEJ1cy5wcm9wZXJ0eS1kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCdXMuaHRtbCNHc3RCdXMucHJvcGVydHktZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RCdXMtLWVuYWJsZS1hc3luYyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0QnVzLmh0bWwjR3N0QnVzLS1lbmFibGUtYXN5bmMiPgorPEFOQ0hPUiBpZD0iR3N0QnVzLnNpZ25hbC1kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCdXMuaHRtbCNHc3RCdXMuc2lnbmFsLWRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0QnVzLW1lc3NhZ2UiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEJ1cy5odG1sI0dzdEJ1cy1tZXNzYWdlIj4KKzxBTkNIT1IgaWQ9IkdzdEJ1cy1zeW5jLW1lc3NhZ2UiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEJ1cy5odG1sI0dzdEJ1cy1zeW5jLW1lc3NhZ2UiPgorPEFOQ0hPUiBpZD0iR3N0QnVzLnNlZS1hbHNvIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RCdXMuaHRtbCNHc3RCdXMuc2VlLWFsc28iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdENhcHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdENhcHMuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0cmVhbWVyLUdzdENhcHMuc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdENhcHMuZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0cmVhbWVyLUdzdENhcHMuZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdENhcHMuZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3RyZWFtZXItR3N0Q2Fwcy5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdENhcHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyI+Cis8QU5DSE9SIGlkPSJHc3RTdGF0aWNDYXBzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdFN0YXRpY0NhcHMiPgorPEFOQ0hPUiBpZD0iR3N0Q2Fwc0ludGVyc2VjdE1vZGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2Fwc0ludGVyc2VjdE1vZGUiPgorPEFOQ0hPUiBpZD0iR1NULUNBUFMtSU5URVJTRUNULVpJRy1aQUc6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHU1QtQ0FQUy1JTlRFUlNFQ1QtWklHLVpBRzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1DQVBTLUlOVEVSU0VDVC1GSVJTVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dTVC1DQVBTLUlOVEVSU0VDVC1GSVJTVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdzdENhcHNGbGFncyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzRmxhZ3MiPgorPEFOQ0hPUiBpZD0iR1NULUNBUFMtRkxBR1MtQU5ZOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR1NULUNBUFMtRkxBR1MtQU5ZOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNBUFMtQU5ZOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR1NULUNBUFMtQU5ZOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNBUFMtTk9ORTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dTVC1DQVBTLU5PTkU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQ0FQUy1SRUZDT1VOVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dTVC1DQVBTLVJFRkNPVU5UOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNBUFMtUkVGQ09VTlQtVkFMVUU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHU1QtQ0FQUy1SRUZDT1VOVC1WQUxVRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1TVEFUSUMtQ0FQUy1BTlk6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHU1QtU1RBVElDLUNBUFMtQU5ZOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVNUQVRJQy1DQVBTLU5PTkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHU1QtU1RBVElDLUNBUFMtTk9ORTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1DQVBTLUlTLVNJTVBMRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dTVC1DQVBTLUlTLVNJTVBMRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1TVEFUSUMtQ0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHU1QtU1RBVElDLUNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNBUFMtRkxBR1M6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHU1QtQ0FQUy1GTEFHUzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1DQVBTLUZMQUctSVMtU0VUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR1NULUNBUFMtRkxBRy1JUy1TRVQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQ0FQUy1GTEFHLVNFVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dTVC1DQVBTLUZMQUctU0VUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNBUFMtRkxBRy1VTlNFVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dTVC1DQVBTLUZMQUctVU5TRVQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJnc3QtY2Fwcy1uZXctZW1wdHkiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbmV3LWVtcHR5Ij4KKzxBTkNIT1IgaWQ9ImdzdC1jYXBzLW5ldy1hbnkiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbmV3LWFueSI+Cis8QU5DSE9SIGlkPSJnc3QtY2Fwcy1uZXctc2ltcGxlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW5ldy1zaW1wbGUiPgorPEFOQ0hPUiBpZD0iZ3N0LWNhcHMtbmV3LWZ1bGwiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbmV3LWZ1bGwiPgorPEFOQ0hPUiBpZD0iZ3N0LWNhcHMtbmV3LWZ1bGwtdmFsaXN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW5ldy1mdWxsLXZhbGlzdCI+Cis8QU5DSE9SIGlkPSJnc3QtY2Fwcy1pcy13cml0YWJsZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy13cml0YWJsZSI+Cis8QU5DSE9SIGlkPSJnc3QtY2Fwcy1jb3B5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWNvcHkiPgorPEFOQ0hPUiBpZD0iZ3N0LWNhcHMtY29weS1udGgiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtY29weS1udGgiPgorPEFOQ0hPUiBpZD0iZ3N0LXN0YXRpYy1jYXBzLWdldCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3Qtc3RhdGljLWNhcHMtZ2V0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1zdGF0aWMtY2Fwcy1jbGVhbnVwIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1zdGF0aWMtY2Fwcy1jbGVhbnVwIj4KKzxBTkNIT1IgaWQ9ImdzdC1jYXBzLWFwcGVuZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1hcHBlbmQiPgorPEFOQ0hPUiBpZD0iZ3N0LWNhcHMtbWVyZ2UiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbWVyZ2UiPgorPEFOQ0hPUiBpZD0iZ3N0LWNhcHMtYXBwZW5kLXN0cnVjdHVyZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1hcHBlbmQtc3RydWN0dXJlIj4KKzxBTkNIT1IgaWQ9ImdzdC1jYXBzLXJlbW92ZS1zdHJ1Y3R1cmUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtcmVtb3ZlLXN0cnVjdHVyZSI+Cis8QU5DSE9SIGlkPSJnc3QtY2Fwcy1zdGVhbC1zdHJ1Y3R1cmUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtc3RlYWwtc3RydWN0dXJlIj4KKzxBTkNIT1IgaWQ9ImdzdC1jYXBzLW1lcmdlLXN0cnVjdHVyZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1tZXJnZS1zdHJ1Y3R1cmUiPgorPEFOQ0hPUiBpZD0iZ3N0LWNhcHMtZ2V0LXNpemUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtZ2V0LXNpemUiPgorPEFOQ0hPUiBpZD0iZ3N0LWNhcHMtZ2V0LXN0cnVjdHVyZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1nZXQtc3RydWN0dXJlIj4KKzxBTkNIT1IgaWQ9ImdzdC1jYXBzLXNldC12YWx1ZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1zZXQtdmFsdWUiPgorPEFOQ0hPUiBpZD0iZ3N0LWNhcHMtc2V0LXNpbXBsZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1zZXQtc2ltcGxlIj4KKzxBTkNIT1IgaWQ9ImdzdC1jYXBzLXNldC1zaW1wbGUtdmFsaXN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXNldC1zaW1wbGUtdmFsaXN0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1jYXBzLWlzLWFueSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1hbnkiPgorPEFOQ0hPUiBpZD0iZ3N0LWNhcHMtaXMtZW1wdHkiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtZW1wdHkiPgorPEFOQ0hPUiBpZD0iZ3N0LWNhcHMtaXMtZml4ZWQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtZml4ZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWNhcHMtaXMtZXF1YWwiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtZXF1YWwiPgorPEFOQ0hPUiBpZD0iZ3N0LWNhcHMtaXMtZXF1YWwtZml4ZWQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtZXF1YWwtZml4ZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWNhcHMtaXMtYWx3YXlzLWNvbXBhdGlibGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtYWx3YXlzLWNvbXBhdGlibGUiPgorPEFOQ0hPUiBpZD0iZ3N0LWNhcHMtaXMtc3Vic2V0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWlzLXN1YnNldCI+Cis8QU5DSE9SIGlkPSJnc3QtY2Fwcy1pcy1zdWJzZXQtc3RydWN0dXJlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWlzLXN1YnNldC1zdHJ1Y3R1cmUiPgorPEFOQ0hPUiBpZD0iZ3N0LWNhcHMtY2FuLWludGVyc2VjdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1jYW4taW50ZXJzZWN0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1jYXBzLWludGVyc2VjdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pbnRlcnNlY3QiPgorPEFOQ0hPUiBpZD0iZ3N0LWNhcHMtaW50ZXJzZWN0LWZ1bGwiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaW50ZXJzZWN0LWZ1bGwiPgorPEFOQ0hPUiBpZD0iZ3N0LWNhcHMtdW5pb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtdW5pb24iPgorPEFOQ0hPUiBpZD0iZ3N0LWNhcHMtbm9ybWFsaXplIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW5vcm1hbGl6ZSI+Cis8QU5DSE9SIGlkPSJnc3QtY2Fwcy1kby1zaW1wbGlmeSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1kby1zaW1wbGlmeSI+Cis8QU5DSE9SIGlkPSJnc3QtY2Fwcy1yZXBsYWNlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXJlcGxhY2UiPgorPEFOQ0hPUiBpZD0iZ3N0LWNhcHMtdG8tc3RyaW5nIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXRvLXN0cmluZyI+Cis8QU5DSE9SIGlkPSJnc3QtY2Fwcy1mcm9tLXN0cmluZyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1mcm9tLXN0cmluZyI+Cis8QU5DSE9SIGlkPSJnc3QtY2Fwcy1zdWJ0cmFjdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy1zdWJ0cmFjdCI+Cis8QU5DSE9SIGlkPSJnc3QtY2Fwcy1tYWtlLXdyaXRhYmxlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW1ha2Utd3JpdGFibGUiPgorPEFOQ0hPUiBpZD0iZ3N0LWNhcHMtcmVmIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXJlZiI+Cis8QU5DSE9SIGlkPSJnc3QtY2Fwcy10cnVuY2F0ZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNnc3QtY2Fwcy10cnVuY2F0ZSI+Cis8QU5DSE9SIGlkPSJnc3QtY2Fwcy1maXhhdGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtZml4YXRlIj4KKzxBTkNIT1IgaWQ9ImdzdC1jYXBzLXVucmVmIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXVucmVmIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RDYXBzLnNlZS1hbHNvIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI2dzdHJlYW1lci1Hc3RDYXBzLnNlZS1hbHNvIj4KKzxBTkNIT1IgaWQ9IkdzdENoaWxkUHJveHkiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENoaWxkUHJveHkuaHRtbCI+Cis8QU5DSE9SIGlkPSJHc3RDaGlsZFByb3h5LnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDaGlsZFByb3h5Lmh0bWwjR3N0Q2hpbGRQcm94eS5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJHc3RDaGlsZFByb3h5Lm9iamVjdC1oaWVyYXJjaHkiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENoaWxkUHJveHkuaHRtbCNHc3RDaGlsZFByb3h5Lm9iamVjdC1oaWVyYXJjaHkiPgorPEFOQ0hPUiBpZD0iR3N0Q2hpbGRQcm94eS5wcmVyZXF1aXNpdGVzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDaGlsZFByb3h5Lmh0bWwjR3N0Q2hpbGRQcm94eS5wcmVyZXF1aXNpdGVzIj4KKzxBTkNIT1IgaWQ9IkdzdENoaWxkUHJveHkuaW1wbGVtZW50YXRpb25zIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDaGlsZFByb3h5Lmh0bWwjR3N0Q2hpbGRQcm94eS5pbXBsZW1lbnRhdGlvbnMiPgorPEFOQ0hPUiBpZD0iR3N0Q2hpbGRQcm94eS5zaWduYWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDaGlsZFByb3h5Lmh0bWwjR3N0Q2hpbGRQcm94eS5zaWduYWxzIj4KKzxBTkNIT1IgaWQ9IkdzdENoaWxkUHJveHkuZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENoaWxkUHJveHkuaHRtbCNHc3RDaGlsZFByb3h5LmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdENoaWxkUHJveHkuZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2hpbGRQcm94eS5odG1sI0dzdENoaWxkUHJveHkuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RDaGlsZFByb3h5LXN0cnVjdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2hpbGRQcm94eS5odG1sI0dzdENoaWxkUHJveHktc3RydWN0Ij4KKzxBTkNIT1IgaWQ9IkdzdENoaWxkUHJveHlJbnRlcmZhY2UiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENoaWxkUHJveHkuaHRtbCNHc3RDaGlsZFByb3h5SW50ZXJmYWNlIj4KKzxBTkNIT1IgaWQ9ImdzdC1jaGlsZC1wcm94eS1nZXQtY2hpbGRyZW4tY291bnQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktZ2V0LWNoaWxkcmVuLWNvdW50Ij4KKzxBTkNIT1IgaWQ9ImdzdC1jaGlsZC1wcm94eS1nZXQtY2hpbGQtYnktbmFtZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2hpbGRQcm94eS5odG1sI2dzdC1jaGlsZC1wcm94eS1nZXQtY2hpbGQtYnktbmFtZSI+Cis8QU5DSE9SIGlkPSJnc3QtY2hpbGQtcHJveHktZ2V0LWNoaWxkLWJ5LWluZGV4IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LWdldC1jaGlsZC1ieS1pbmRleCI+Cis8QU5DSE9SIGlkPSJnc3QtY2hpbGQtcHJveHktbG9va3VwIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LWxvb2t1cCI+Cis8QU5DSE9SIGlkPSJnc3QtY2hpbGQtcHJveHktZ2V0LXByb3BlcnR5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LWdldC1wcm9wZXJ0eSI+Cis8QU5DSE9SIGlkPSJnc3QtY2hpbGQtcHJveHktZ2V0LXZhbGlzdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2hpbGRQcm94eS5odG1sI2dzdC1jaGlsZC1wcm94eS1nZXQtdmFsaXN0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1jaGlsZC1wcm94eS1nZXQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktZ2V0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1jaGlsZC1wcm94eS1zZXQtcHJvcGVydHkiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktc2V0LXByb3BlcnR5Ij4KKzxBTkNIT1IgaWQ9ImdzdC1jaGlsZC1wcm94eS1zZXQtdmFsaXN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LXNldC12YWxpc3QiPgorPEFOQ0hPUiBpZD0iZ3N0LWNoaWxkLXByb3h5LXNldCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2hpbGRQcm94eS5odG1sI2dzdC1jaGlsZC1wcm94eS1zZXQiPgorPEFOQ0hPUiBpZD0iZ3N0LWNoaWxkLXByb3h5LWNoaWxkLWFkZGVkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LWNoaWxkLWFkZGVkIj4KKzxBTkNIT1IgaWQ9ImdzdC1jaGlsZC1wcm94eS1jaGlsZC1yZW1vdmVkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LWNoaWxkLXJlbW92ZWQiPgorPEFOQ0hPUiBpZD0iR3N0Q2hpbGRQcm94eS5zaWduYWwtZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2hpbGRQcm94eS5odG1sI0dzdENoaWxkUHJveHkuc2lnbmFsLWRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0Q2hpbGRQcm94eS1jaGlsZC1hZGRlZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2hpbGRQcm94eS5odG1sI0dzdENoaWxkUHJveHktY2hpbGQtYWRkZWQiPgorPEFOQ0hPUiBpZD0iR3N0Q2hpbGRQcm94eS1jaGlsZC1yZW1vdmVkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDaGlsZFByb3h5Lmh0bWwjR3N0Q2hpbGRQcm94eS1jaGlsZC1yZW1vdmVkIj4KKzxBTkNIT1IgaWQ9IkdzdENoaWxkUHJveHkuc2VlLWFsc28iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENoaWxkUHJveHkuaHRtbCNHc3RDaGlsZFByb3h5LnNlZS1hbHNvIj4KKzxBTkNIT1IgaWQ9IkdzdENsb2NrIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sIj4KKzxBTkNIT1IgaWQ9IkdzdENsb2NrLnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrLnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9IkdzdENsb2NrLm9iamVjdC1oaWVyYXJjaHkiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2sub2JqZWN0LWhpZXJhcmNoeSI+Cis8QU5DSE9SIGlkPSJHc3RDbG9jay5wcm9wZXJ0aWVzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrLnByb3BlcnRpZXMiPgorPEFOQ0hPUiBpZD0iR3N0Q2xvY2suZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2suZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iR3N0Q2xvY2suZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9jay5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdENsb2NrLXN0cnVjdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9jay1zdHJ1Y3QiPgorPEFOQ0hPUiBpZD0iR3N0Q2xvY2tDbGFzcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0NsYXNzIj4KKzxBTkNIT1IgaWQ9IkdzdENsb2NrVGltZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPgorPEFOQ0hPUiBpZD0iR3N0Q2xvY2tUaW1lRGlmZiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWVEaWZmIj4KKzxBTkNIT1IgaWQ9IkdzdENsb2NrSUQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCI+Cis8QU5DSE9SIGlkPSJHU1QtQ0xPQ0stVElNRS1OT05FOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR1NULUNMT0NLLVRJTUUtTk9ORTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1DTE9DSy1USU1FLUlTLVZBTElEOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR1NULUNMT0NLLVRJTUUtSVMtVkFMSUQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtU0VDT05EOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR1NULVNFQ09ORDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1NU0VDT05EOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR1NULU1TRUNPTkQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVVNFQ09ORDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dTVC1VU0VDT05EOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULU5TRUNPTkQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHU1QtTlNFQ09ORDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1USU1FLUFTLVNFQ09ORFM6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHU1QtVElNRS1BUy1TRUNPTkRTOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRJTUUtQVMtTVNFQ09ORFM6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHU1QtVElNRS1BUy1NU0VDT05EUzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1USU1FLUFTLVVTRUNPTkRTOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR1NULVRJTUUtQVMtVVNFQ09ORFM6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVElNRS1BUy1OU0VDT05EUzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dTVC1USU1FLUFTLU5TRUNPTkRTOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNMT0NLLURJRkY6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRElGRjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1USU1FVkFMLVRPLVRJTUU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHU1QtVElNRVZBTC1UTy1USU1FOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRJTUUtVE8tVElNRVZBTDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dTVC1USU1FLVRPLVRJTUVWQUw6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVElNRVNQRUMtVE8tVElNRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dTVC1USU1FU1BFQy1UTy1USU1FOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRJTUUtVE8tVElNRVNQRUM6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHU1QtVElNRS1UTy1USU1FU1BFQzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1DTE9DSy1FTlRSWS1UUkFDRS1OQU1FOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR1NULUNMT0NLLUVOVFJZLVRSQUNFLU5BTUU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHc3RDbG9ja0VudHJ5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrRW50cnkiPgorPEFOQ0hPUiBpZD0iR3N0Q2xvY2tDYWxsYmFjayIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0NhbGxiYWNrIj4KKzxBTkNIT1IgaWQ9IkdzdENsb2NrRW50cnlUeXBlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrRW50cnlUeXBlIj4KKzxBTkNIT1IgaWQ9IkdTVC1DTE9DSy1FTlRSWS1TSU5HTEU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRU5UUlktU0lOR0xFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNMT0NLLUVOVFJZLVBFUklPRElDOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR1NULUNMT0NLLUVOVFJZLVBFUklPRElDOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNMT0NLLUVOVFJZOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR1NULUNMT0NLLUVOVFJZOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNMT0NLLUVOVFJZLUNMT0NLOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR1NULUNMT0NLLUVOVFJZLUNMT0NLOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNMT0NLLUVOVFJZLVRZUEU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRU5UUlktVFlQRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1DTE9DSy1FTlRSWS1USU1FOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR1NULUNMT0NLLUVOVFJZLVRJTUU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQ0xPQ0stRU5UUlktSU5URVJWQUw6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRU5UUlktSU5URVJWQUw6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQ0xPQ0stRU5UUlktU1RBVFVTOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR1NULUNMT0NLLUVOVFJZLVNUQVRVUzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdzdENsb2NrUmV0dXJuIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrUmV0dXJuIj4KKzxBTkNIT1IgaWQ9IkdTVC1DTE9DSy1PSzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dTVC1DTE9DSy1PSzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1DTE9DSy1FQVJMWTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dTVC1DTE9DSy1FQVJMWTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1DTE9DSy1VTlNDSEVEVUxFRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dTVC1DTE9DSy1VTlNDSEVEVUxFRDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1DTE9DSy1CVVNZOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR1NULUNMT0NLLUJVU1k6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQ0xPQ0stQkFEVElNRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dTVC1DTE9DSy1CQURUSU1FOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNMT0NLLUVSUk9SOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR1NULUNMT0NLLUVSUk9SOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNMT0NLLVVOU1VQUE9SVEVEOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR1NULUNMT0NLLVVOU1VQUE9SVEVEOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNMT0NLLURPTkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRE9ORTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdzdENsb2NrRmxhZ3MiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tGbGFncyI+Cis8QU5DSE9SIGlkPSJHU1QtQ0xPQ0stRkxBRy1DQU4tRE8tU0lOR0xFLVNZTkM6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRkxBRy1DQU4tRE8tU0lOR0xFLVNZTkM6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQ0xPQ0stRkxBRy1DQU4tRE8tU0lOR0xFLUFTWU5DOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR1NULUNMT0NLLUZMQUctQ0FOLURPLVNJTkdMRS1BU1lOQzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1DTE9DSy1GTEFHLUNBTi1ETy1QRVJJT0RJQy1TWU5DOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR1NULUNMT0NLLUZMQUctQ0FOLURPLVBFUklPRElDLVNZTkM6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQ0xPQ0stRkxBRy1DQU4tRE8tUEVSSU9ESUMtQVNZTkM6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRkxBRy1DQU4tRE8tUEVSSU9ESUMtQVNZTkM6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQ0xPQ0stRkxBRy1DQU4tU0VULVJFU09MVVRJT046Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRkxBRy1DQU4tU0VULVJFU09MVVRJT046Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQ0xPQ0stRkxBRy1DQU4tU0VULU1BU1RFUjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dTVC1DTE9DSy1GTEFHLUNBTi1TRVQtTUFTVEVSOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNMT0NLLUZMQUctTEFTVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dTVC1DTE9DSy1GTEFHLUxBU1Q6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQ0xPQ0stRkxBR1M6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRkxBR1M6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQ0xPQ0stQlJPQURDQVNUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR1NULUNMT0NLLUJST0FEQ0FTVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1DTE9DSy1DT05EOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR1NULUNMT0NLLUNPTkQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQ0xPQ0stVElNRUQtV0FJVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dTVC1DTE9DSy1USU1FRC1XQUlUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNMT0NLLVdBSVQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stV0FJVDpDQVBTIj4KKzxBTkNIT1IgaWQ9ImdzdC1jbG9jay1hZGQtb2JzZXJ2YXRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWFkZC1vYnNlcnZhdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3QtY2xvY2stc2V0LW1hc3RlciIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stc2V0LW1hc3RlciI+Cis8QU5DSE9SIGlkPSJnc3QtY2xvY2stZ2V0LW1hc3RlciIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stZ2V0LW1hc3RlciI+Cis8QU5DSE9SIGlkPSJnc3QtY2xvY2stc2V0LXJlc29sdXRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLXNldC1yZXNvbHV0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdC1jbG9jay1nZXQtcmVzb2x1dGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stZ2V0LXJlc29sdXRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0LWNsb2NrLWdldC10aW1lIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI2dzdC1jbG9jay1nZXQtdGltZSI+Cis8QU5DSE9SIGlkPSJnc3QtY2xvY2stbmV3LXNpbmdsZS1zaG90LWlkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI2dzdC1jbG9jay1uZXctc2luZ2xlLXNob3QtaWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWNsb2NrLW5ldy1wZXJpb2RpYy1pZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stbmV3LXBlcmlvZGljLWlkIj4KKzxBTkNIT1IgaWQ9ImdzdC1jbG9jay1zaW5nbGUtc2hvdC1pZC1yZWluaXQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLXNpbmdsZS1zaG90LWlkLXJlaW5pdCI+Cis8QU5DSE9SIGlkPSJnc3QtY2xvY2stcGVyaW9kaWMtaWQtcmVpbml0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI2dzdC1jbG9jay1wZXJpb2RpYy1pZC1yZWluaXQiPgorPEFOQ0hPUiBpZD0iZ3N0LWNsb2NrLWdldC1pbnRlcm5hbC10aW1lIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI2dzdC1jbG9jay1nZXQtaW50ZXJuYWwtdGltZSI+Cis8QU5DSE9SIGlkPSJnc3QtY2xvY2stYWRqdXN0LXVubG9ja2VkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI2dzdC1jbG9jay1hZGp1c3QtdW5sb2NrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWNsb2NrLXVuYWRqdXN0LXVubG9ja2VkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI2dzdC1jbG9jay11bmFkanVzdC11bmxvY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtY2xvY2stZ2V0LWNhbGlicmF0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI2dzdC1jbG9jay1nZXQtY2FsaWJyYXRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0LWNsb2NrLXNldC1jYWxpYnJhdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stc2V0LWNhbGlicmF0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdC1jbG9jay1pZC1nZXQtdGltZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2staWQtZ2V0LXRpbWUiPgorPEFOQ0hPUiBpZD0iZ3N0LWNsb2NrLWlkLXdhaXQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLXdhaXQiPgorPEFOQ0hPUiBpZD0iZ3N0LWNsb2NrLWlkLXdhaXQtYXN5bmMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLXdhaXQtYXN5bmMiPgorPEFOQ0hPUiBpZD0iZ3N0LWNsb2NrLWlkLXdhaXQtYXN5bmMtZnVsbCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2staWQtd2FpdC1hc3luYy1mdWxsIj4KKzxBTkNIT1IgaWQ9ImdzdC1jbG9jay1pZC11bnNjaGVkdWxlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI2dzdC1jbG9jay1pZC11bnNjaGVkdWxlIj4KKzxBTkNIT1IgaWQ9ImdzdC1jbG9jay1pZC1jb21wYXJlLWZ1bmMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLWNvbXBhcmUtZnVuYyI+Cis8QU5DSE9SIGlkPSJnc3QtY2xvY2staWQtcmVmIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI2dzdC1jbG9jay1pZC1yZWYiPgorPEFOQ0hPUiBpZD0iZ3N0LWNsb2NrLWlkLXVucmVmIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI2dzdC1jbG9jay1pZC11bnJlZiI+Cis8QU5DSE9SIGlkPSJHc3RDbG9jay5wcm9wZXJ0eS1kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrLnByb3BlcnR5LWRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0Q2xvY2stLXN0YXRzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrLS1zdGF0cyI+Cis8QU5DSE9SIGlkPSJHc3RDbG9jay0tdGltZW91dCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9jay0tdGltZW91dCI+Cis8QU5DSE9SIGlkPSJHc3RDbG9jay0td2luZG93LXNpemUiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2stLXdpbmRvdy1zaXplIj4KKzxBTkNIT1IgaWQ9IkdzdENsb2NrLS13aW5kb3ctdGhyZXNob2xkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrLS13aW5kb3ctdGhyZXNob2xkIj4KKzxBTkNIT1IgaWQ9IkdzdENsb2NrLnNlZS1hbHNvIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrLnNlZS1hbHNvIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1nc3Rjb25maWciIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1nc3Rjb25maWcuaHRtbCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItZ3N0Y29uZmlnLnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItZ3N0Y29uZmlnLmh0bWwjZ3N0cmVhbWVyLWdzdGNvbmZpZy5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItZ3N0Y29uZmlnLmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItZ3N0Y29uZmlnLmh0bWwjZ3N0cmVhbWVyLWdzdGNvbmZpZy5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItZ3N0Y29uZmlnLmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1nc3Rjb25maWcuaHRtbCNnc3RyZWFtZXItZ3N0Y29uZmlnLmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR1NULURJU0FCTEUtR1NULURFQlVHOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1nc3Rjb25maWcuaHRtbCNHU1QtRElTQUJMRS1HU1QtREVCVUc6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRElTQUJMRS1QQVJTRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItZ3N0Y29uZmlnLmh0bWwjR1NULURJU0FCTEUtUEFSU0U6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRElTQUJMRS1UUkFDRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItZ3N0Y29uZmlnLmh0bWwjR1NULURJU0FCTEUtVFJBQ0U6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRElTQUJMRS1BTExPQy1UUkFDRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItZ3N0Y29uZmlnLmh0bWwjR1NULURJU0FCTEUtQUxMT0MtVFJBQ0U6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRElTQUJMRS1SRUdJU1RSWTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItZ3N0Y29uZmlnLmh0bWwjR1NULURJU0FCTEUtUkVHSVNUUlk6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRElTQUJMRS1QTFVHSU46Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLWdzdGNvbmZpZy5odG1sI0dTVC1ESVNBQkxFLVBMVUdJTjpDQVBTIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3REYXRlVGltZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3RyZWFtZXItR3N0RGF0ZVRpbWUuc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3RyZWFtZXItR3N0RGF0ZVRpbWUuZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI2dzdHJlYW1lci1Hc3REYXRlVGltZS5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdERhdGVUaW1lIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNHc3REYXRlVGltZSI+Cis8QU5DSE9SIGlkPSJHU1QtVFlQRS1EQVRFLVRJTUU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjR1NULVRZUEUtREFURS1USU1FOkNBUFMiPgorPEFOQ0hPUiBpZD0iZ3N0LWRhdGUtdGltZS1nZXQtZGF5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLWdldC1kYXkiPgorPEFOQ0hPUiBpZD0iZ3N0LWRhdGUtdGltZS1nZXQtbW9udGgiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtZ2V0LW1vbnRoIj4KKzxBTkNIT1IgaWQ9ImdzdC1kYXRlLXRpbWUtZ2V0LWhvdXIiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtZ2V0LWhvdXIiPgorPEFOQ0hPUiBpZD0iZ3N0LWRhdGUtdGltZS1nZXQtbWljcm9zZWNvbmQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtZ2V0LW1pY3Jvc2Vjb25kIj4KKzxBTkNIT1IgaWQ9ImdzdC1kYXRlLXRpbWUtZ2V0LW1pbnV0ZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1nZXQtbWludXRlIj4KKzxBTkNIT1IgaWQ9ImdzdC1kYXRlLXRpbWUtZ2V0LXRpbWUtem9uZS1vZmZzZXQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtZ2V0LXRpbWUtem9uZS1vZmZzZXQiPgorPEFOQ0hPUiBpZD0iZ3N0LWRhdGUtdGltZS1nZXQtc2Vjb25kIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLWdldC1zZWNvbmQiPgorPEFOQ0hPUiBpZD0iZ3N0LWRhdGUtdGltZS1nZXQteWVhciIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1nZXQteWVhciI+Cis8QU5DSE9SIGlkPSJnc3QtZGF0ZS10aW1lLW5ldyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1uZXciPgorPEFOQ0hPUiBpZD0iZ3N0LWRhdGUtdGltZS1uZXctZnJvbS11bml4LWVwb2NoLWxvY2FsLXRpbWUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtbmV3LWZyb20tdW5peC1lcG9jaC1sb2NhbC10aW1lIj4KKzxBTkNIT1IgaWQ9ImdzdC1kYXRlLXRpbWUtbmV3LWZyb20tdW5peC1lcG9jaC11dGMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtbmV3LWZyb20tdW5peC1lcG9jaC11dGMiPgorPEFOQ0hPUiBpZD0iZ3N0LWRhdGUtdGltZS1uZXctbG9jYWwtdGltZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1uZXctbG9jYWwtdGltZSI+Cis8QU5DSE9SIGlkPSJnc3QtZGF0ZS10aW1lLW5ldy1ub3ctbG9jYWwtdGltZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1uZXctbm93LWxvY2FsLXRpbWUiPgorPEFOQ0hPUiBpZD0iZ3N0LWRhdGUtdGltZS1uZXctbm93LXV0YyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1uZXctbm93LXV0YyI+Cis8QU5DSE9SIGlkPSJnc3QtZGF0ZS10aW1lLXJlZiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1yZWYiPgorPEFOQ0hPUiBpZD0iZ3N0LWRhdGUtdGltZS11bnJlZiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS11bnJlZiI+Cis8QU5DSE9SIGlkPSJHc3RFbGVtZW50IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwiPgorPEFOQ0hPUiBpZD0iR3N0RWxlbWVudC5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQuc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iR3N0RWxlbWVudC5vYmplY3QtaGllcmFyY2h5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC5vYmplY3QtaGllcmFyY2h5Ij4KKzxBTkNIT1IgaWQ9IkdzdEVsZW1lbnQuZGVyaXZlZC1pbnRlcmZhY2VzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC5kZXJpdmVkLWludGVyZmFjZXMiPgorPEFOQ0hPUiBpZD0iR3N0RWxlbWVudC5zaWduYWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC5zaWduYWxzIj4KKzxBTkNIT1IgaWQ9IkdzdEVsZW1lbnQuZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdEVsZW1lbnQuZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RFbGVtZW50LXN0cnVjdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij4KKzxBTkNIT1IgaWQ9IkdzdEVsZW1lbnRDbGFzcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnRDbGFzcyI+Cis8QU5DSE9SIGlkPSJHc3RFbGVtZW50RmxhZ3MiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50RmxhZ3MiPgorPEFOQ0hPUiBpZD0iR1NULUVMRU1FTlQtTE9DS0VELVNUQVRFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1MT0NLRUQtU1RBVEU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRUxFTUVOVC1JUy1TSU5LOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1JUy1TSU5LOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVMRU1FTlQtVU5QQVJFTlRJTkc6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULVVOUEFSRU5USU5HOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVMRU1FTlQtSVMtU09VUkNFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1JUy1TT1VSQ0U6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRUxFTUVOVC1GTEFHLUxBU1Q6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULUZMQUctTEFTVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdzdFN0YXRlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiPgorPEFOQ0hPUiBpZD0iR1NULVNUQVRFLVZPSUQtUEVORElORzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVZPSUQtUEVORElORzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1TVEFURS1OVUxMOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtTlVMTDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1TVEFURS1SRUFEWTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVJFQURZOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVNUQVRFLVBBVVNFRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVBBVVNFRDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1TVEFURS1QTEFZSU5HOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtUExBWUlORzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdzdFN0YXRlQ2hhbmdlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGVDaGFuZ2UiPgorPEFOQ0hPUiBpZD0iR1NULVNUQVRFLUNIQU5HRS1OVUxMLVRPLVJFQURZOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLU5VTEwtVE8tUkVBRFk6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtU1RBVEUtQ0hBTkdFLVJFQURZLVRPLVBBVVNFRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUNIQU5HRS1SRUFEWS1UTy1QQVVTRUQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtU1RBVEUtQ0hBTkdFLVBBVVNFRC1UTy1QTEFZSU5HOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLVBBVVNFRC1UTy1QTEFZSU5HOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVNUQVRFLUNIQU5HRS1QTEFZSU5HLVRPLVBBVVNFRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUNIQU5HRS1QTEFZSU5HLVRPLVBBVVNFRDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1TVEFURS1DSEFOR0UtUEFVU0VELVRPLVJFQURZOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLVBBVVNFRC1UTy1SRUFEWTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1TVEFURS1DSEFOR0UtUkVBRFktVE8tTlVMTDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUNIQU5HRS1SRUFEWS1UTy1OVUxMOkNBUFMiPgorPEFOQ0hPUiBpZD0iR3N0U3RhdGVDaGFuZ2VSZXR1cm4iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZUNoYW5nZVJldHVybiI+Cis8QU5DSE9SIGlkPSJHU1QtU1RBVEUtQ0hBTkdFLUZBSUxVUkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1DSEFOR0UtRkFJTFVSRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1TVEFURS1DSEFOR0UtU1VDQ0VTUzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUNIQU5HRS1TVUNDRVNTOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVNUQVRFLUNIQU5HRS1BU1lOQzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUNIQU5HRS1BU1lOQzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1TVEFURS1DSEFOR0UtTk8tUFJFUk9MTDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUNIQU5HRS1OTy1QUkVST0xMOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVNUQVRFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtU1RBVEUtR0VULU5FWFQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1HRVQtTkVYVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1TVEFURS1ORVhUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtTkVYVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1TVEFURS1QRU5ESU5HOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtUEVORElORzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1TVEFURS1SRVRVUk46Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1SRVRVUk46Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtU1RBVEUtVEFSR0VUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtVEFSR0VUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVNUQVRFLVRSQU5TSVRJT046Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1UUkFOU0lUSU9OOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVNUQVRFLVRSQU5TSVRJT04tQ1VSUkVOVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVRSQU5TSVRJT04tQ1VSUkVOVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1TVEFURS1UUkFOU0lUSU9OLU5FWFQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1UUkFOU0lUSU9OLU5FWFQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtU1RBVEUtR0VULUxPQ0s6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1HRVQtTE9DSzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1TVEFURS1HRVQtQ09ORDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUdFVC1DT05EOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVMRU1FTlQtTkFNRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtTkFNRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1FTEVNRU5ULVBBUkVOVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtUEFSRU5UOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVMRU1FTlQtQlVTOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1CVVM6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRUxFTUVOVC1DTE9DSzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtQ0xPQ0s6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRUxFTUVOVC1QQURTOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1QQURTOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVMRU1FTlQtU1RBUlQtVElNRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtU1RBUlQtVElNRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1FTEVNRU5ULUVSUk9SOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1FUlJPUjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1FTEVNRU5ULVdBUk5JTkc6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULVdBUk5JTkc6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRUxFTUVOVC1JTkZPOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1JTkZPOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVMRU1FTlQtSVMtTE9DS0VELVNUQVRFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1JUy1MT0NLRUQtU1RBVEU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRUxFTUVOVC1NRVRBREFUQS1BVVRIT1I6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULU1FVEFEQVRBLUFVVEhPUjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1FTEVNRU5ULU1FVEFEQVRBLURFU0NSSVBUSU9OOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1NRVRBREFUQS1ERVNDUklQVElPTjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1FTEVNRU5ULU1FVEFEQVRBLURPQy1VUkk6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULU1FVEFEQVRBLURPQy1VUkk6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRUxFTUVOVC1NRVRBREFUQS1JQ09OLU5BTUU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULU1FVEFEQVRBLUlDT04tTkFNRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1FTEVNRU5ULU1FVEFEQVRBLUtMQVNTOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1NRVRBREFUQS1LTEFTUzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1FTEVNRU5ULU1FVEFEQVRBLUxPTkdOQU1FOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1NRVRBREFUQS1MT05HTkFNRTpDQVBTIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWNsYXNzLWFkZC1wYWQtdGVtcGxhdGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jbGFzcy1hZGQtcGFkLXRlbXBsYXRlIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWNsYXNzLWdldC1wYWQtdGVtcGxhdGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jbGFzcy1nZXQtcGFkLXRlbXBsYXRlIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWNsYXNzLWdldC1wYWQtdGVtcGxhdGUtbGlzdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNsYXNzLWdldC1wYWQtdGVtcGxhdGUtbGlzdCI+Cis8QU5DSE9SIGlkPSJnc3QtZWxlbWVudC1jbGFzcy1pbnN0YWxsLXN0ZC1wcm9wcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNsYXNzLWluc3RhbGwtc3RkLXByb3BzIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWNsYXNzLXNldC1tZXRhZGF0YSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNsYXNzLXNldC1tZXRhZGF0YSI+Cis8QU5DSE9SIGlkPSJnc3QtZWxlbWVudC1jbGFzcy1hZGQtbWV0YWRhdGEiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jbGFzcy1hZGQtbWV0YWRhdGEiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtYWRkLXBhZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWFkZC1wYWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtY3JlYXRlLWFsbC1wYWRzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY3JlYXRlLWFsbC1wYWRzIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWdldC1jb21wYXRpYmxlLXBhZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1jb21wYXRpYmxlLXBhZCI+Cis8QU5DSE9SIGlkPSJnc3QtZWxlbWVudC1nZXQtY29tcGF0aWJsZS1wYWQtdGVtcGxhdGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtY29tcGF0aWJsZS1wYWQtdGVtcGxhdGUiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtZ2V0LXJlcXVlc3QtcGFkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LXJlcXVlc3QtcGFkIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWdldC1zdGF0aWMtcGFkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LXN0YXRpYy1wYWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtcmVxdWVzdC1wYWQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1yZXF1ZXN0LXBhZCI+Cis8QU5DSE9SIGlkPSJnc3QtZWxlbWVudC1uby1tb3JlLXBhZHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1uby1tb3JlLXBhZHMiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtcmVsZWFzZS1yZXF1ZXN0LXBhZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXJlbGVhc2UtcmVxdWVzdC1wYWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtcmVtb3ZlLXBhZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXJlbW92ZS1wYWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtaXRlcmF0ZS1wYWRzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtaXRlcmF0ZS1wYWRzIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWl0ZXJhdGUtc2luay1wYWRzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtaXRlcmF0ZS1zaW5rLXBhZHMiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtaXRlcmF0ZS1zcmMtcGFkcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWl0ZXJhdGUtc3JjLXBhZHMiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtbGluayIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWxpbmsiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtdW5saW5rIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtdW5saW5rIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWxpbmstbWFueSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWxpbmstbWFueSI+Cis8QU5DSE9SIGlkPSJnc3QtZWxlbWVudC11bmxpbmstbWFueSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXVubGluay1tYW55Ij4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWxpbmstcGFkcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWxpbmstcGFkcyI+Cis8QU5DSE9SIGlkPSJnc3QtZWxlbWVudC1saW5rLXBhZHMtZnVsbCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWxpbmstcGFkcy1mdWxsIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LXVubGluay1wYWRzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtdW5saW5rLXBhZHMiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtbGluay1wYWRzLWZpbHRlcmVkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbGluay1wYWRzLWZpbHRlcmVkIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWxpbmstZmlsdGVyZWQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1saW5rLWZpbHRlcmVkIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWNsYXNzLWdldC1tZXRhZGF0YSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNsYXNzLWdldC1tZXRhZGF0YSI+Cis8QU5DSE9SIGlkPSJnc3QtZWxlbWVudC1zZXQtYmFzZS10aW1lIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LWJhc2UtdGltZSI+Cis8QU5DSE9SIGlkPSJnc3QtZWxlbWVudC1nZXQtYmFzZS10aW1lIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWJhc2UtdGltZSI+Cis8QU5DSE9SIGlkPSJnc3QtZWxlbWVudC1zZXQtc3RhcnQtdGltZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1zdGFydC10aW1lIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWdldC1zdGFydC10aW1lIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LXN0YXJ0LXRpbWUiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtc2V0LWJ1cyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1idXMiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtZ2V0LWJ1cyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1idXMiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtZ2V0LWZhY3RvcnkiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtZmFjdG9yeSI+Cis8QU5DSE9SIGlkPSJnc3QtZWxlbWVudC1zZXQtaW5kZXgiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZXQtaW5kZXgiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtZ2V0LWluZGV4IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWluZGV4Ij4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWlzLWluZGV4YWJsZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWlzLWluZGV4YWJsZSI+Cis8QU5DSE9SIGlkPSJnc3QtZWxlbWVudC1zZXQtbmFtZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1uYW1lIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWdldC1uYW1lIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LW5hbWUiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtc2V0LXBhcmVudCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1wYXJlbnQiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtZ2V0LXBhcmVudCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1wYXJlbnQiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtcmVxdWlyZXMtY2xvY2siIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1yZXF1aXJlcy1jbG9jayI+Cis8QU5DSE9SIGlkPSJnc3QtZWxlbWVudC1zZXQtY2xvY2siIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZXQtY2xvY2siPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtZ2V0LWNsb2NrIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWNsb2NrIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LXByb3ZpZGVzLWNsb2NrIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcHJvdmlkZXMtY2xvY2siPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtcHJvdmlkZS1jbG9jayIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXByb3ZpZGUtY2xvY2siPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtc2V0LXN0YXRlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LXN0YXRlIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWdldC1zdGF0ZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1zdGF0ZSI+Cis8QU5DSE9SIGlkPSJnc3QtZWxlbWVudC1zZXQtbG9ja2VkLXN0YXRlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LWxvY2tlZC1zdGF0ZSI+Cis8QU5DSE9SIGlkPSJnc3QtZWxlbWVudC1pcy1sb2NrZWQtc3RhdGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1pcy1sb2NrZWQtc3RhdGUiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtYWJvcnQtc3RhdGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1hYm9ydC1zdGF0ZSI+Cis8QU5DSE9SIGlkPSJnc3QtZWxlbWVudC1jb250aW51ZS1zdGF0ZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNvbnRpbnVlLXN0YXRlIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWxvc3Qtc3RhdGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1sb3N0LXN0YXRlIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LXN0YXRlLWdldC1uYW1lIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc3RhdGUtZ2V0LW5hbWUiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtc3RhdGUtY2hhbmdlLXJldHVybi1nZXQtbmFtZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXN0YXRlLWNoYW5nZS1yZXR1cm4tZ2V0LW5hbWUiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtc3luYy1zdGF0ZS13aXRoLXBhcmVudCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXN5bmMtc3RhdGUtd2l0aC1wYXJlbnQiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtY2hhbmdlLXN0YXRlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY2hhbmdlLXN0YXRlIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWZvdW5kLXRhZ3MiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1mb3VuZC10YWdzIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWZvdW5kLXRhZ3MtZm9yLXBhZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWZvdW5kLXRhZ3MtZm9yLXBhZCI+Cis8QU5DSE9SIGlkPSJnc3QtZWxlbWVudC1tZXNzYWdlLWZ1bGwiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1tZXNzYWdlLWZ1bGwiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtcG9zdC1tZXNzYWdlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcG9zdC1tZXNzYWdlIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWdldC1xdWVyeS10eXBlcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1xdWVyeS10eXBlcyI+Cis8QU5DSE9SIGlkPSJnc3QtZWxlbWVudC1xdWVyeSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXF1ZXJ5Ij4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LXF1ZXJ5LWNvbnZlcnQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1xdWVyeS1jb252ZXJ0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LXF1ZXJ5LXBvc2l0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcXVlcnktcG9zaXRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtcXVlcnktZHVyYXRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1xdWVyeS1kdXJhdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3QtZWxlbWVudC1zZW5kLWV2ZW50IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2VuZC1ldmVudCI+Cis8QU5DSE9SIGlkPSJnc3QtZWxlbWVudC1zZWVrLXNpbXBsZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNlZWstc2ltcGxlIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LXNlZWsiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZWVrIj4KKzxBTkNIT1IgaWQ9IkdzdEVsZW1lbnQuc2lnbmFsLWRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LnNpZ25hbC1kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdEVsZW1lbnQtbm8tbW9yZS1wYWRzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1uby1tb3JlLXBhZHMiPgorPEFOQ0hPUiBpZD0iR3N0RWxlbWVudC1wYWQtYWRkZWQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXBhZC1hZGRlZCI+Cis8QU5DSE9SIGlkPSJHc3RFbGVtZW50LXBhZC1yZW1vdmVkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1wYWQtcmVtb3ZlZCI+Cis8QU5DSE9SIGlkPSJHc3RFbGVtZW50LnNlZS1hbHNvIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC5zZWUtYWxzbyI+Cis8QU5DSE9SIGlkPSJHc3RFbGVtZW50RmFjdG9yeSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCI+Cis8QU5DSE9SIGlkPSJHc3RFbGVtZW50RmFjdG9yeS5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHc3RFbGVtZW50RmFjdG9yeS5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJHc3RFbGVtZW50RmFjdG9yeS5vYmplY3QtaGllcmFyY2h5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50RmFjdG9yeS5odG1sI0dzdEVsZW1lbnRGYWN0b3J5Lm9iamVjdC1oaWVyYXJjaHkiPgorPEFOQ0hPUiBpZD0iR3N0RWxlbWVudEZhY3RvcnkuZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR3N0RWxlbWVudEZhY3RvcnkuZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iR3N0RWxlbWVudEZhY3RvcnkuZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHc3RFbGVtZW50RmFjdG9yeS5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdEVsZW1lbnRGYWN0b3J5LXN0cnVjdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHc3RFbGVtZW50RmFjdG9yeS1zdHJ1Y3QiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtcmVnaXN0ZXIiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtcmVnaXN0ZXIiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1maW5kIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktZmluZCI+Cis8QU5DSE9SIGlkPSJnc3QtZWxlbWVudC1mYWN0b3J5LWdldC1lbGVtZW50LXR5cGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1nZXQtZWxlbWVudC10eXBlIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWZhY3RvcnktZ2V0LW1ldGFkYXRhIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktZ2V0LW1ldGFkYXRhIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWZhY3RvcnktZ2V0LW51bS1wYWQtdGVtcGxhdGVzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktZ2V0LW51bS1wYWQtdGVtcGxhdGVzIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWZhY3RvcnktZ2V0LXVyaS10eXBlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktZ2V0LXVyaS10eXBlIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWZhY3RvcnktZ2V0LXVyaS1wcm90b2NvbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1nZXQtdXJpLXByb3RvY29scyI+Cis8QU5DSE9SIGlkPSJnc3QtZWxlbWVudC1mYWN0b3J5LWhhcy1pbnRlcmZhY2UiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1oYXMtaW50ZXJmYWNlIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWZhY3RvcnktY3JlYXRlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktY3JlYXRlIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWZhY3RvcnktbWFrZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LW1ha2UiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1jYW4tc2luay1hbGwtY2FwcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWNhbi1zaW5rLWFsbC1jYXBzIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWZhY3RvcnktY2FuLXNyYy1hbGwtY2FwcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWNhbi1zcmMtYWxsLWNhcHMiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1jYW4tc2luay1hbnktY2FwcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWNhbi1zaW5rLWFueS1jYXBzIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWZhY3RvcnktY2FuLXNyYy1hbnktY2FwcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWNhbi1zcmMtYW55LWNhcHMiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1nZXQtc3RhdGljLXBhZC10ZW1wbGF0ZXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1nZXQtc3RhdGljLXBhZC10ZW1wbGF0ZXMiPgorPEFOQ0hPUiBpZD0iR3N0RWxlbWVudEZhY3RvcnlMaXN0VHlwZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHc3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlIj4KKzxBTkNIT1IgaWQ9IkdTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1BTlk6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtQU5ZOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLUFVRElPVklERU8tU0lOS1M6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtQVVESU9WSURFTy1TSU5LUzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1BVURJTy1FTkNPREVSOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLUFVRElPLUVOQ09ERVI6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtREVDT0RBQkxFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLURFQ09EQUJMRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1ERUNPREVSOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLURFQ09ERVI6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtREVNVVhFUjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1ERU1VWEVSOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLURFUEFZTE9BREVSOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLURFUEFZTE9BREVSOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLUVOQ09ERVI6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtRU5DT0RFUjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1GT1JNQVRURVI6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtRk9STUFUVEVSOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLU1BWC1FTEVNRU5UUzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NQVgtRUxFTUVOVFM6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtQVVESU86Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtQVVESU86Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtSU1BR0U6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtSU1BR0U6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtTUVUQURBVEE6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtTUVUQURBVEE6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtU1VCVElUTEU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtU1VCVElUTEU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtVklERU86Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtVklERU86Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtQU5ZOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLU1FRElBLUFOWTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NVVhFUjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NVVhFUjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1QQVJTRVI6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtUEFSU0VSOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLVBBWUxPQURFUjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1QQVlMT0FERVI6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtU0lOSzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1TSU5LOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLVNSQzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1TUkM6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtVklERU8tRU5DT0RFUjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1WSURFTy1FTkNPREVSOkNBUFMiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1saXN0LWZpbHRlciIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWxpc3QtZmlsdGVyIj4KKzxBTkNIT1IgaWQ9ImdzdC1lbGVtZW50LWZhY3RvcnktbGlzdC1nZXQtZWxlbWVudHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1saXN0LWdldC1lbGVtZW50cyI+Cis8QU5DSE9SIGlkPSJnc3QtZWxlbWVudC1mYWN0b3J5LWxpc3QtaXMtdHlwZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWxpc3QtaXMtdHlwZSI+Cis8QU5DSE9SIGlkPSJHc3RFbGVtZW50RmFjdG9yeS5zZWUtYWxzbyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHc3RFbGVtZW50RmFjdG9yeS5zZWUtYWxzbyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0R0Vycm9yIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdEdFcnJvci5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI2dzdHJlYW1lci1Hc3RHRXJyb3Iuc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdEdFcnJvci5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI2dzdHJlYW1lci1Hc3RHRXJyb3IuZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdEdFcnJvci5kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjZ3N0cmVhbWVyLUdzdEdFcnJvci5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdENvcmVFcnJvciIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dzdENvcmVFcnJvciI+Cis8QU5DSE9SIGlkPSJHU1QtQ09SRS1FUlJPUi1GQUlMRUQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1DT1JFLUVSUk9SLUZBSUxFRDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1DT1JFLUVSUk9SLVRPTy1MQVpZOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtQ09SRS1FUlJPUi1UT08tTEFaWTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1DT1JFLUVSUk9SLU5PVC1JTVBMRU1FTlRFRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUNPUkUtRVJST1ItTk9ULUlNUExFTUVOVEVEOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNPUkUtRVJST1ItU1RBVEUtQ0hBTkdFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtQ09SRS1FUlJPUi1TVEFURS1DSEFOR0U6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQ09SRS1FUlJPUi1QQUQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1DT1JFLUVSUk9SLVBBRDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1DT1JFLUVSUk9SLVRIUkVBRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUNPUkUtRVJST1ItVEhSRUFEOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNPUkUtRVJST1ItTkVHT1RJQVRJT046Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1DT1JFLUVSUk9SLU5FR09USUFUSU9OOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNPUkUtRVJST1ItRVZFTlQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1DT1JFLUVSUk9SLUVWRU5UOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNPUkUtRVJST1ItU0VFSzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUNPUkUtRVJST1ItU0VFSzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1DT1JFLUVSUk9SLUNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtQ09SRS1FUlJPUi1DQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1DT1JFLUVSUk9SLVRBRzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUNPUkUtRVJST1ItVEFHOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNPUkUtRVJST1ItTUlTU0lORy1QTFVHSU46Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1DT1JFLUVSUk9SLU1JU1NJTkctUExVR0lOOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNPUkUtRVJST1ItQ0xPQ0s6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1DT1JFLUVSUk9SLUNMT0NLOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNPUkUtRVJST1ItRElTQUJMRUQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1DT1JFLUVSUk9SLURJU0FCTEVEOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNPUkUtRVJST1ItTlVNLUVSUk9SUzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUNPUkUtRVJST1ItTlVNLUVSUk9SUzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdzdExpYnJhcnlFcnJvciIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dzdExpYnJhcnlFcnJvciI+Cis8QU5DSE9SIGlkPSJHU1QtTElCUkFSWS1FUlJPUi1GQUlMRUQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1MSUJSQVJZLUVSUk9SLUZBSUxFRDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1MSUJSQVJZLUVSUk9SLVRPTy1MQVpZOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtTElCUkFSWS1FUlJPUi1UT08tTEFaWTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1MSUJSQVJZLUVSUk9SLUlOSVQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1MSUJSQVJZLUVSUk9SLUlOSVQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtTElCUkFSWS1FUlJPUi1TSFVURE9XTjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUxJQlJBUlktRVJST1ItU0hVVERPV046Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtTElCUkFSWS1FUlJPUi1TRVRUSU5HUzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUxJQlJBUlktRVJST1ItU0VUVElOR1M6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtTElCUkFSWS1FUlJPUi1FTkNPREU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1MSUJSQVJZLUVSUk9SLUVOQ09ERTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1MSUJSQVJZLUVSUk9SLU5VTS1FUlJPUlM6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1MSUJSQVJZLUVSUk9SLU5VTS1FUlJPUlM6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHc3RSZXNvdXJjZUVycm9yIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR3N0UmVzb3VyY2VFcnJvciI+Cis8QU5DSE9SIGlkPSJHU1QtUkVTT1VSQ0UtRVJST1ItRkFJTEVEOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtUkVTT1VSQ0UtRVJST1ItRkFJTEVEOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVJFU09VUkNFLUVSUk9SLVRPTy1MQVpZOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtUkVTT1VSQ0UtRVJST1ItVE9PLUxBWlk6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUkVTT1VSQ0UtRVJST1ItTk9ULUZPVU5EOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtUkVTT1VSQ0UtRVJST1ItTk9ULUZPVU5EOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVJFU09VUkNFLUVSUk9SLUJVU1k6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1SRVNPVVJDRS1FUlJPUi1CVVNZOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVJFU09VUkNFLUVSUk9SLU9QRU4tUkVBRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVJFU09VUkNFLUVSUk9SLU9QRU4tUkVBRDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1SRVNPVVJDRS1FUlJPUi1PUEVOLVdSSVRFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtUkVTT1VSQ0UtRVJST1ItT1BFTi1XUklURTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1SRVNPVVJDRS1FUlJPUi1PUEVOLVJFQUQtV1JJVEU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1SRVNPVVJDRS1FUlJPUi1PUEVOLVJFQUQtV1JJVEU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUkVTT1VSQ0UtRVJST1ItQ0xPU0U6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1SRVNPVVJDRS1FUlJPUi1DTE9TRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1SRVNPVVJDRS1FUlJPUi1SRUFEOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtUkVTT1VSQ0UtRVJST1ItUkVBRDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1SRVNPVVJDRS1FUlJPUi1XUklURTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVJFU09VUkNFLUVSUk9SLVdSSVRFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVJFU09VUkNFLUVSUk9SLVNFRUs6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1SRVNPVVJDRS1FUlJPUi1TRUVLOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVJFU09VUkNFLUVSUk9SLVNZTkM6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1SRVNPVVJDRS1FUlJPUi1TWU5DOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVJFU09VUkNFLUVSUk9SLVNFVFRJTkdTOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtUkVTT1VSQ0UtRVJST1ItU0VUVElOR1M6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUkVTT1VSQ0UtRVJST1ItTk8tU1BBQ0UtTEVGVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVJFU09VUkNFLUVSUk9SLU5PLVNQQUNFLUxFRlQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUkVTT1VSQ0UtRVJST1ItTlVNLUVSUk9SUzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVJFU09VUkNFLUVSUk9SLU5VTS1FUlJPUlM6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHc3RTdHJlYW1FcnJvciIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dzdFN0cmVhbUVycm9yIj4KKzxBTkNIT1IgaWQ9IkdTVC1TVFJFQU0tRVJST1ItRkFJTEVEOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtU1RSRUFNLUVSUk9SLUZBSUxFRDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1TVFJFQU0tRVJST1ItVE9PLUxBWlk6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1TVFJFQU0tRVJST1ItVE9PLUxBWlk6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtU1RSRUFNLUVSUk9SLU5PVC1JTVBMRU1FTlRFRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVNUUkVBTS1FUlJPUi1OT1QtSU1QTEVNRU5URUQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtU1RSRUFNLUVSUk9SLVRZUEUtTk9ULUZPVU5EOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtU1RSRUFNLUVSUk9SLVRZUEUtTk9ULUZPVU5EOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVNUUkVBTS1FUlJPUi1XUk9ORy1UWVBFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtU1RSRUFNLUVSUk9SLVdST05HLVRZUEU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtU1RSRUFNLUVSUk9SLUNPREVDLU5PVC1GT1VORDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVNUUkVBTS1FUlJPUi1DT0RFQy1OT1QtRk9VTkQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtU1RSRUFNLUVSUk9SLURFQ09ERTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVNUUkVBTS1FUlJPUi1ERUNPREU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtU1RSRUFNLUVSUk9SLUVOQ09ERTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVNUUkVBTS1FUlJPUi1FTkNPREU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtU1RSRUFNLUVSUk9SLURFTVVYOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtU1RSRUFNLUVSUk9SLURFTVVYOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVNUUkVBTS1FUlJPUi1NVVg6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1TVFJFQU0tRVJST1ItTVVYOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVNUUkVBTS1FUlJPUi1GT1JNQVQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1TVFJFQU0tRVJST1ItRk9STUFUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVNUUkVBTS1FUlJPUi1ERUNSWVBUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtU1RSRUFNLUVSUk9SLURFQ1JZUFQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtU1RSRUFNLUVSUk9SLURFQ1JZUFQtTk9LRVk6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1TVFJFQU0tRVJST1ItREVDUllQVC1OT0tFWTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1TVFJFQU0tRVJST1ItTlVNLUVSUk9SUzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVNUUkVBTS1FUlJPUi1OVU0tRVJST1JTOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNPUkUtRVJST1I6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1DT1JFLUVSUk9SOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUxJQlJBUlktRVJST1I6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1MSUJSQVJZLUVSUk9SOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVJFU09VUkNFLUVSUk9SOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtUkVTT1VSQ0UtRVJST1I6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtU1RSRUFNLUVSUk9SOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtU1RSRUFNLUVSUk9SOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVSUk9SLVNZU1RFTTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUVSUk9SLVNZU1RFTTpDQVBTIj4KKzxBTkNIT1IgaWQ9ImdzdC1lcnJvci1nZXQtbWVzc2FnZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI2dzdC1lcnJvci1nZXQtbWVzc2FnZSI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0R0Vycm9yLnNlZS1hbHNvIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjZ3N0cmVhbWVyLUdzdEdFcnJvci5zZWUtYWxzbyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0RXZlbnQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RFdmVudC5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0cmVhbWVyLUdzdEV2ZW50LnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RFdmVudC5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0cmVhbWVyLUdzdEV2ZW50LmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RFdmVudC5kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3RyZWFtZXItR3N0RXZlbnQuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RFdmVudCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiPgorPEFOQ0hPUiBpZD0iR3N0RXZlbnRUeXBlRmxhZ3MiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dzdEV2ZW50VHlwZUZsYWdzIj4KKzxBTkNIT1IgaWQ9IkdTVC1FVkVOVC1UWVBFLVVQU1RSRUFNOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1UWVBFLVVQU1RSRUFNOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVWRU5ULVRZUEUtRE9XTlNUUkVBTTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtVFlQRS1ET1dOU1RSRUFNOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVWRU5ULVRZUEUtU0VSSUFMSVpFRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtVFlQRS1TRVJJQUxJWkVEOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVWRU5ULVRZUEUtU1RJQ0tZOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1UWVBFLVNUSUNLWTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1FVkVOVC1UWVBFLUJPVEg6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULVRZUEUtQk9USDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1FVkVOVC1NQUtFLVRZUEU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULU1BS0UtVFlQRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdzdEV2ZW50VHlwZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnRUeXBlIj4KKzxBTkNIT1IgaWQ9IkdTVC1FVkVOVC1VTktOT1dOOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1VTktOT1dOOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVWRU5ULUZMVVNILVNUQVJUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1GTFVTSC1TVEFSVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1FVkVOVC1GTFVTSC1TVE9QOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1GTFVTSC1TVE9QOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVWRU5ULUNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1DQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1FVkVOVC1TRUdNRU5UOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1TRUdNRU5UOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVWRU5ULVRBRzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtVEFHOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVWRU5ULUJVRkZFUlNJWkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUJVRkZFUlNJWkU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRVZFTlQtU0lOSy1NRVNTQUdFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1TSU5LLU1FU1NBR0U6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRVZFTlQtRU9TOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1FT1M6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRVZFTlQtUU9TOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1RT1M6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRVZFTlQtU0VFSzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtU0VFSzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1FVkVOVC1OQVZJR0FUSU9OOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1OQVZJR0FUSU9OOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVWRU5ULUxBVEVOQ1k6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUxBVEVOQ1k6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRVZFTlQtU1RFUDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtU1RFUDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1FVkVOVC1SRUNPTkZJR1VSRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtUkVDT05GSUdVUkU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRVZFTlQtQ1VTVE9NLVVQU1RSRUFNOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1DVVNUT00tVVBTVFJFQU06Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRVZFTlQtQ1VTVE9NLURPV05TVFJFQU06Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUNVU1RPTS1ET1dOU1RSRUFNOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVWRU5ULUNVU1RPTS1ET1dOU1RSRUFNLU9PQjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtQ1VTVE9NLURPV05TVFJFQU0tT09COkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVWRU5ULUNVU1RPTS1CT1RIOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1DVVNUT00tQk9USDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1FVkVOVC1DVVNUT00tQk9USC1PT0I6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUNVU1RPTS1CT1RILU9PQjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1FVkVOVC1UUkFDRS1OQU1FOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1UUkFDRS1OQU1FOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVWRU5ULVRZUEU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULVRZUEU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRVZFTlQtVFlQRS1OQU1FOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1UWVBFLU5BTUU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRVZFTlQtVElNRVNUQU1QOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1USU1FU1RBTVA6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRVZFTlQtU0VRTlVNOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1TRVFOVU06Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRVZFTlQtSVMtVVBTVFJFQU06Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUlTLVVQU1RSRUFNOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVWRU5ULUlTLURPV05TVFJFQU06Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUlTLURPV05TVFJFQU06Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRVZFTlQtSVMtU0VSSUFMSVpFRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtSVMtU0VSSUFMSVpFRDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1FVkVOVC1JUy1TVElDS1k6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUlTLVNUSUNLWTpDQVBTIj4KKzxBTkNIT1IgaWQ9ImdzdC1ldmVudC10eXBlLWdldC1mbGFncyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXR5cGUtZ2V0LWZsYWdzIj4KKzxBTkNIT1IgaWQ9ImdzdC1ldmVudC10eXBlLWdldC1uYW1lIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtdHlwZS1nZXQtbmFtZSI+Cis8QU5DSE9SIGlkPSJnc3QtZXZlbnQtdHlwZS10by1xdWFyayIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXR5cGUtdG8tcXVhcmsiPgorPEFOQ0hPUiBpZD0iZ3N0LWV2ZW50LXJlZiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXJlZiI+Cis8QU5DSE9SIGlkPSJnc3QtZXZlbnQtdW5yZWYiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC11bnJlZiI+Cis8QU5DSE9SIGlkPSJnc3QtZXZlbnQtcmVwbGFjZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXJlcGxhY2UiPgorPEFOQ0hPUiBpZD0iZ3N0LWV2ZW50LWNvcHkiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1jb3B5Ij4KKzxBTkNIT1IgaWQ9ImdzdC1ldmVudC1zdGVhbCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXN0ZWFsIj4KKzxBTkNIT1IgaWQ9ImdzdC1ldmVudC10YWtlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtdGFrZSI+Cis8QU5DSE9SIGlkPSJnc3QtZXZlbnQtaXMtd3JpdGFibGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1pcy13cml0YWJsZSI+Cis8QU5DSE9SIGlkPSJnc3QtZXZlbnQtbWFrZS13cml0YWJsZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW1ha2Utd3JpdGFibGUiPgorPEFOQ0hPUiBpZD0iZ3N0LWV2ZW50LXdyaXRhYmxlLXN0cnVjdHVyZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXdyaXRhYmxlLXN0cnVjdHVyZSI+Cis8QU5DSE9SIGlkPSJnc3QtZXZlbnQtbmV3LWN1c3RvbSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1jdXN0b20iPgorPEFOQ0hPUiBpZD0iZ3N0LWV2ZW50LWdldC1zdHJ1Y3R1cmUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1nZXQtc3RydWN0dXJlIj4KKzxBTkNIT1IgaWQ9ImdzdC1ldmVudC1oYXMtbmFtZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LWhhcy1uYW1lIj4KKzxBTkNIT1IgaWQ9ImdzdC1ldmVudC1nZXQtc2VxbnVtIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtZ2V0LXNlcW51bSI+Cis8QU5DSE9SIGlkPSJnc3QtZXZlbnQtc2V0LXNlcW51bSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXNldC1zZXFudW0iPgorPEFOQ0hPUiBpZD0iZ3N0LWV2ZW50LW5ldy1mbHVzaC1zdGFydCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1mbHVzaC1zdGFydCI+Cis8QU5DSE9SIGlkPSJnc3QtZXZlbnQtbmV3LWZsdXNoLXN0b3AiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctZmx1c2gtc3RvcCI+Cis8QU5DSE9SIGlkPSJnc3QtZXZlbnQtcGFyc2UtZmx1c2gtc3RvcCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLWZsdXNoLXN0b3AiPgorPEFOQ0hPUiBpZD0iZ3N0LWV2ZW50LW5ldy1lb3MiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctZW9zIj4KKzxBTkNIT1IgaWQ9ImdzdC1ldmVudC1uZXctc2VnbWVudCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1zZWdtZW50Ij4KKzxBTkNIT1IgaWQ9ImdzdC1ldmVudC1wYXJzZS1zZWdtZW50IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2Utc2VnbWVudCI+Cis8QU5DSE9SIGlkPSJnc3QtZXZlbnQtY29weS1zZWdtZW50IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtY29weS1zZWdtZW50Ij4KKzxBTkNIT1IgaWQ9ImdzdC1ldmVudC1uZXctdGFnIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXRhZyI+Cis8QU5DSE9SIGlkPSJnc3QtZXZlbnQtcGFyc2UtdGFnIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2UtdGFnIj4KKzxBTkNIT1IgaWQ9ImdzdC1ldmVudC1uZXctYnVmZmVyLXNpemUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctYnVmZmVyLXNpemUiPgorPEFOQ0hPUiBpZD0iZ3N0LWV2ZW50LXBhcnNlLWJ1ZmZlci1zaXplIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2UtYnVmZmVyLXNpemUiPgorPEFOQ0hPUiBpZD0iR3N0UU9TVHlwZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0UU9TVHlwZSI+Cis8QU5DSE9SIGlkPSJHU1QtUU9TLVRZUEUtT1ZFUkZMT1c6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULVFPUy1UWVBFLU9WRVJGTE9XOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVFPUy1UWVBFLVVOREVSRkxPVzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtUU9TLVRZUEUtVU5ERVJGTE9XOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVFPUy1UWVBFLVRIUk9UVExFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1RT1MtVFlQRS1USFJPVFRMRTpDQVBTIj4KKzxBTkNIT1IgaWQ9ImdzdC1ldmVudC1uZXctcW9zIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXFvcyI+Cis8QU5DSE9SIGlkPSJnc3QtZXZlbnQtcGFyc2UtcW9zIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2UtcW9zIj4KKzxBTkNIT1IgaWQ9IkdzdFNlZWtUeXBlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RTZWVrVHlwZSI+Cis8QU5DSE9SIGlkPSJHU1QtU0VFSy1UWVBFLU5PTkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULVNFRUstVFlQRS1OT05FOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVNFRUstVFlQRS1DVVI6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULVNFRUstVFlQRS1DVVI6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtU0VFSy1UWVBFLVNFVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtU0VFSy1UWVBFLVNFVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1TRUVLLVRZUEUtRU5EOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1TRUVLLVRZUEUtRU5EOkNBUFMiPgorPEFOQ0hPUiBpZD0iR3N0U2Vla0ZsYWdzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RTZWVrRmxhZ3MiPgorPEFOQ0hPUiBpZD0iR1NULVNFRUstRkxBRy1OT05FOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1TRUVLLUZMQUctTk9ORTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1TRUVLLUZMQUctRkxVU0g6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULVNFRUstRkxBRy1GTFVTSDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1TRUVLLUZMQUctQUNDVVJBVEU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULVNFRUstRkxBRy1BQ0NVUkFURTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1TRUVLLUZMQUctS0VZLVVOSVQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULVNFRUstRkxBRy1LRVktVU5JVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1TRUVLLUZMQUctU0VHTUVOVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtU0VFSy1GTEFHLVNFR01FTlQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtU0VFSy1GTEFHLVNLSVA6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR1NULVNFRUstRkxBRy1TS0lQOkNBUFMiPgorPEFOQ0hPUiBpZD0iZ3N0LWV2ZW50LW5ldy1zZWVrIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXNlZWsiPgorPEFOQ0hPUiBpZD0iZ3N0LWV2ZW50LXBhcnNlLXNlZWsiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1zZWVrIj4KKzxBTkNIT1IgaWQ9ImdzdC1ldmVudC1uZXctbmF2aWdhdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1uYXZpZ2F0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdC1ldmVudC1uZXctbGF0ZW5jeSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1sYXRlbmN5Ij4KKzxBTkNIT1IgaWQ9ImdzdC1ldmVudC1wYXJzZS1sYXRlbmN5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2UtbGF0ZW5jeSI+Cis8QU5DSE9SIGlkPSJnc3QtZXZlbnQtbmV3LXN0ZXAiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc3RlcCI+Cis8QU5DSE9SIGlkPSJnc3QtZXZlbnQtcGFyc2Utc3RlcCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLXN0ZXAiPgorPEFOQ0hPUiBpZD0iZ3N0LWV2ZW50LW5ldy1zaW5rLW1lc3NhZ2UiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc2luay1tZXNzYWdlIj4KKzxBTkNIT1IgaWQ9ImdzdC1ldmVudC1wYXJzZS1zaW5rLW1lc3NhZ2UiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1zaW5rLW1lc3NhZ2UiPgorPEFOQ0hPUiBpZD0iZ3N0LWV2ZW50LW5ldy1yZWNvbmZpZ3VyZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1yZWNvbmZpZ3VyZSI+Cis8QU5DSE9SIGlkPSJnc3QtZXZlbnQtbmV3LWNhcHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctY2FwcyI+Cis8QU5DSE9SIGlkPSJnc3QtZXZlbnQtcGFyc2UtY2FwcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLWNhcHMiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdEV2ZW50LnNlZS1hbHNvIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNnc3RyZWFtZXItR3N0RXZlbnQuc2VlLWFsc28iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdEZpbHRlciIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEZpbHRlci5odG1sIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RGaWx0ZXIuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RGaWx0ZXIuaHRtbCNnc3RyZWFtZXItR3N0RmlsdGVyLnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RGaWx0ZXIuZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RGaWx0ZXIuaHRtbCNnc3RyZWFtZXItR3N0RmlsdGVyLmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RGaWx0ZXIuZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEZpbHRlci5odG1sI2dzdHJlYW1lci1Hc3RGaWx0ZXIuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RGaWx0ZXJGdW5jIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RmlsdGVyLmh0bWwjR3N0RmlsdGVyRnVuYyI+Cis8QU5DSE9SIGlkPSJnc3QtZmlsdGVyLXJ1biIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEZpbHRlci5odG1sI2dzdC1maWx0ZXItcnVuIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RGb3JtYXQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0Rm9ybWF0LnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjZ3N0cmVhbWVyLUdzdEZvcm1hdC5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0Rm9ybWF0LmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjZ3N0cmVhbWVyLUdzdEZvcm1hdC5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0Rm9ybWF0LmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNnc3RyZWFtZXItR3N0Rm9ybWF0LmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0Rm9ybWF0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0Ij4KKzxBTkNIT1IgaWQ9IkdTVC1GT1JNQVQtVU5ERUZJTkVEOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHU1QtRk9STUFULVVOREVGSU5FRDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1GT1JNQVQtREVGQVVMVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR1NULUZPUk1BVC1ERUZBVUxUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUZPUk1BVC1CWVRFUzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR1NULUZPUk1BVC1CWVRFUzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1GT1JNQVQtVElNRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR1NULUZPUk1BVC1USU1FOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUZPUk1BVC1CVUZGRVJTOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHU1QtRk9STUFULUJVRkZFUlM6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRk9STUFULVBFUkNFTlQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dTVC1GT1JNQVQtUEVSQ0VOVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1GT1JNQVQtUEVSQ0VOVC1NQVg6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dTVC1GT1JNQVQtUEVSQ0VOVC1NQVg6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRk9STUFULVBFUkNFTlQtU0NBTEU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dTVC1GT1JNQVQtUEVSQ0VOVC1TQ0FMRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdzdEZvcm1hdERlZmluaXRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXREZWZpbml0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdC1mb3JtYXQtZ2V0LW5hbWUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNnc3QtZm9ybWF0LWdldC1uYW1lIj4KKzxBTkNIT1IgaWQ9ImdzdC1mb3JtYXQtdG8tcXVhcmsiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNnc3QtZm9ybWF0LXRvLXF1YXJrIj4KKzxBTkNIT1IgaWQ9ImdzdC1mb3JtYXQtcmVnaXN0ZXIiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNnc3QtZm9ybWF0LXJlZ2lzdGVyIj4KKzxBTkNIT1IgaWQ9ImdzdC1mb3JtYXQtZ2V0LWJ5LW5pY2siIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNnc3QtZm9ybWF0LWdldC1ieS1uaWNrIj4KKzxBTkNIT1IgaWQ9ImdzdC1mb3JtYXRzLWNvbnRhaW5zIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjZ3N0LWZvcm1hdHMtY29udGFpbnMiPgorPEFOQ0hPUiBpZD0iZ3N0LWZvcm1hdC1nZXQtZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI2dzdC1mb3JtYXQtZ2V0LWRldGFpbHMiPgorPEFOQ0hPUiBpZD0iZ3N0LWZvcm1hdC1pdGVyYXRlLWRlZmluaXRpb25zIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjZ3N0LWZvcm1hdC1pdGVyYXRlLWRlZmluaXRpb25zIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RGb3JtYXQuc2VlLWFsc28iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNnc3RyZWFtZXItR3N0Rm9ybWF0LnNlZS1hbHNvIj4KKzxBTkNIT1IgaWQ9IkdzdEdob3N0UGFkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RHaG9zdFBhZC5odG1sIj4KKzxBTkNIT1IgaWQ9IkdzdEdob3N0UGFkLnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RHaG9zdFBhZC5odG1sI0dzdEdob3N0UGFkLnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9IkdzdFByb3h5UGFkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RHaG9zdFBhZC5odG1sI0dzdFByb3h5UGFkIj4KKzxBTkNIT1IgaWQ9IkdzdEdob3N0UGFkLm9iamVjdC1oaWVyYXJjaHkiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEdob3N0UGFkLmh0bWwjR3N0R2hvc3RQYWQub2JqZWN0LWhpZXJhcmNoeSI+Cis8QU5DSE9SIGlkPSJHc3RHaG9zdFBhZC5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0R2hvc3RQYWQuaHRtbCNHc3RHaG9zdFBhZC5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJHc3RHaG9zdFBhZC5kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RHaG9zdFBhZC5odG1sI0dzdEdob3N0UGFkLmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0UHJveHlQYWQtc3RydWN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RHaG9zdFBhZC5odG1sI0dzdFByb3h5UGFkLXN0cnVjdCI+Cis8QU5DSE9SIGlkPSJHc3RHaG9zdFBhZC1zdHJ1Y3QiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEdob3N0UGFkLmh0bWwjR3N0R2hvc3RQYWQtc3RydWN0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1naG9zdC1wYWQtbmV3IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RHaG9zdFBhZC5odG1sI2dzdC1naG9zdC1wYWQtbmV3Ij4KKzxBTkNIT1IgaWQ9ImdzdC1naG9zdC1wYWQtbmV3LW5vLXRhcmdldCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLW5ldy1uby10YXJnZXQiPgorPEFOQ0hPUiBpZD0iZ3N0LWdob3N0LXBhZC1uZXctZnJvbS10ZW1wbGF0ZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLW5ldy1mcm9tLXRlbXBsYXRlIj4KKzxBTkNIT1IgaWQ9ImdzdC1naG9zdC1wYWQtbmV3LW5vLXRhcmdldC1mcm9tLXRlbXBsYXRlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RHaG9zdFBhZC5odG1sI2dzdC1naG9zdC1wYWQtbmV3LW5vLXRhcmdldC1mcm9tLXRlbXBsYXRlIj4KKzxBTkNIT1IgaWQ9ImdzdC1naG9zdC1wYWQtc2V0LXRhcmdldCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLXNldC10YXJnZXQiPgorPEFOQ0hPUiBpZD0iZ3N0LWdob3N0LXBhZC1nZXQtdGFyZ2V0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RHaG9zdFBhZC5odG1sI2dzdC1naG9zdC1wYWQtZ2V0LXRhcmdldCI+Cis8QU5DSE9SIGlkPSJnc3QtZ2hvc3QtcGFkLWNvbnN0cnVjdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLWNvbnN0cnVjdCI+Cis8QU5DSE9SIGlkPSJnc3QtZ2hvc3QtcGFkLXVubGluay1kZWZhdWx0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RHaG9zdFBhZC5odG1sI2dzdC1naG9zdC1wYWQtdW5saW5rLWRlZmF1bHQiPgorPEFOQ0hPUiBpZD0iZ3N0LWdob3N0LXBhZC1saW5rLWRlZmF1bHQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1saW5rLWRlZmF1bHQiPgorPEFOQ0hPUiBpZD0iZ3N0LWdob3N0LXBhZC1hY3RpdmF0ZS1wdWxsLWRlZmF1bHQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1hY3RpdmF0ZS1wdWxsLWRlZmF1bHQiPgorPEFOQ0hPUiBpZD0iZ3N0LWdob3N0LXBhZC1hY3RpdmF0ZS1wdXNoLWRlZmF1bHQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1hY3RpdmF0ZS1wdXNoLWRlZmF1bHQiPgorPEFOQ0hPUiBpZD0iZ3N0LWdob3N0LXBhZC1pbnRlcm5hbC1hY3RpdmF0ZS1wdXNoLWRlZmF1bHQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1pbnRlcm5hbC1hY3RpdmF0ZS1wdXNoLWRlZmF1bHQiPgorPEFOQ0hPUiBpZD0iZ3N0LWdob3N0LXBhZC1pbnRlcm5hbC1hY3RpdmF0ZS1wdWxsLWRlZmF1bHQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1pbnRlcm5hbC1hY3RpdmF0ZS1wdWxsLWRlZmF1bHQiPgorPEFOQ0hPUiBpZD0iZ3N0LXByb3h5LXBhZC1nZXQtaW50ZXJuYWwiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEdob3N0UGFkLmh0bWwjZ3N0LXByb3h5LXBhZC1nZXQtaW50ZXJuYWwiPgorPEFOQ0hPUiBpZD0iZ3N0LXByb3h5LXBhZC1xdWVyeS10eXBlLWRlZmF1bHQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEdob3N0UGFkLmh0bWwjZ3N0LXByb3h5LXBhZC1xdWVyeS10eXBlLWRlZmF1bHQiPgorPEFOQ0hPUiBpZD0iZ3N0LXByb3h5LXBhZC1ldmVudC1kZWZhdWx0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RHaG9zdFBhZC5odG1sI2dzdC1wcm94eS1wYWQtZXZlbnQtZGVmYXVsdCI+Cis8QU5DSE9SIGlkPSJnc3QtcHJveHktcGFkLXF1ZXJ5LWRlZmF1bHQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEdob3N0UGFkLmh0bWwjZ3N0LXByb3h5LXBhZC1xdWVyeS1kZWZhdWx0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1wcm94eS1wYWQtaXRlcmF0ZS1pbnRlcm5hbC1saW5rcy1kZWZhdWx0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RHaG9zdFBhZC5odG1sI2dzdC1wcm94eS1wYWQtaXRlcmF0ZS1pbnRlcm5hbC1saW5rcy1kZWZhdWx0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1wcm94eS1wYWQtY2hhaW4tZGVmYXVsdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0R2hvc3RQYWQuaHRtbCNnc3QtcHJveHktcGFkLWNoYWluLWRlZmF1bHQiPgorPEFOQ0hPUiBpZD0iZ3N0LXByb3h5LXBhZC1jaGFpbi1saXN0LWRlZmF1bHQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEdob3N0UGFkLmh0bWwjZ3N0LXByb3h5LXBhZC1jaGFpbi1saXN0LWRlZmF1bHQiPgorPEFOQ0hPUiBpZD0iZ3N0LXByb3h5LXBhZC1nZXRyYW5nZS1kZWZhdWx0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RHaG9zdFBhZC5odG1sI2dzdC1wcm94eS1wYWQtZ2V0cmFuZ2UtZGVmYXVsdCI+Cis8QU5DSE9SIGlkPSJnc3QtcHJveHktcGFkLWdldGNhcHMtZGVmYXVsdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0R2hvc3RQYWQuaHRtbCNnc3QtcHJveHktcGFkLWdldGNhcHMtZGVmYXVsdCI+Cis8QU5DSE9SIGlkPSJnc3QtcHJveHktcGFkLWFjY2VwdGNhcHMtZGVmYXVsdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0R2hvc3RQYWQuaHRtbCNnc3QtcHJveHktcGFkLWFjY2VwdGNhcHMtZGVmYXVsdCI+Cis8QU5DSE9SIGlkPSJnc3QtcHJveHktcGFkLWZpeGF0ZWNhcHMtZGVmYXVsdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0R2hvc3RQYWQuaHRtbCNnc3QtcHJveHktcGFkLWZpeGF0ZWNhcHMtZGVmYXVsdCI+Cis8QU5DSE9SIGlkPSJnc3QtcHJveHktcGFkLXVubGluay1kZWZhdWx0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RHaG9zdFBhZC5odG1sI2dzdC1wcm94eS1wYWQtdW5saW5rLWRlZmF1bHQiPgorPEFOQ0hPUiBpZD0iR3N0R2hvc3RQYWQuc2VlLWFsc28iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEdob3N0UGFkLmh0bWwjR3N0R2hvc3RQYWQuc2VlLWFsc28iPgorPEFOQ0hPUiBpZD0iR3N0SW5kZXgiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4Lmh0bWwiPgorPEFOQ0hPUiBpZD0iR3N0SW5kZXguc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4Lmh0bWwjR3N0SW5kZXguc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iR3N0SW5kZXgub2JqZWN0LWhpZXJhcmNoeSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0SW5kZXguaHRtbCNHc3RJbmRleC5vYmplY3QtaGllcmFyY2h5Ij4KKzxBTkNIT1IgaWQ9IkdzdEluZGV4LnByb3BlcnRpZXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4Lmh0bWwjR3N0SW5kZXgucHJvcGVydGllcyI+Cis8QU5DSE9SIGlkPSJHc3RJbmRleC5zaWduYWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleC5odG1sI0dzdEluZGV4LnNpZ25hbHMiPgorPEFOQ0hPUiBpZD0iR3N0SW5kZXguZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4Lmh0bWwjR3N0SW5kZXguZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iR3N0SW5kZXguZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0SW5kZXguaHRtbCNHc3RJbmRleC5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdEluZGV4LXN0cnVjdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0SW5kZXguaHRtbCNHc3RJbmRleC1zdHJ1Y3QiPgorPEFOQ0hPUiBpZD0iR3N0SW5kZXhFbnRyeSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0SW5kZXguaHRtbCNHc3RJbmRleEVudHJ5Ij4KKzxBTkNIT1IgaWQ9IkdzdEluZGV4R3JvdXAiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4Lmh0bWwjR3N0SW5kZXhHcm91cCI+Cis8QU5DSE9SIGlkPSJHc3RJbmRleENlcnRhaW50eSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0SW5kZXguaHRtbCNHc3RJbmRleENlcnRhaW50eSI+Cis8QU5DSE9SIGlkPSJHU1QtSU5ERVgtVU5LTk9XTjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleC5odG1sI0dTVC1JTkRFWC1VTktOT1dOOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUlOREVYLUNFUlRBSU46Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0SW5kZXguaHRtbCNHU1QtSU5ERVgtQ0VSVEFJTjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1JTkRFWC1GVVpaWTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleC5odG1sI0dTVC1JTkRFWC1GVVpaWTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdzdEluZGV4RW50cnlUeXBlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleC5odG1sI0dzdEluZGV4RW50cnlUeXBlIj4KKzxBTkNIT1IgaWQ9IkdTVC1JTkRFWC1FTlRSWS1JRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleC5odG1sI0dTVC1JTkRFWC1FTlRSWS1JRDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1JTkRFWC1FTlRSWS1BU1NPQ0lBVElPTjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleC5odG1sI0dTVC1JTkRFWC1FTlRSWS1BU1NPQ0lBVElPTjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1JTkRFWC1FTlRSWS1PQkpFQ1Q6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0SW5kZXguaHRtbCNHU1QtSU5ERVgtRU5UUlktT0JKRUNUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUlOREVYLUVOVFJZLUZPUk1BVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleC5odG1sI0dTVC1JTkRFWC1FTlRSWS1GT1JNQVQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHc3RJbmRleExvb2t1cE1ldGhvZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0SW5kZXguaHRtbCNHc3RJbmRleExvb2t1cE1ldGhvZCI+Cis8QU5DSE9SIGlkPSJHU1QtSU5ERVgtTE9PS1VQLUVYQUNUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4Lmh0bWwjR1NULUlOREVYLUxPT0tVUC1FWEFDVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1JTkRFWC1MT09LVVAtQkVGT1JFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4Lmh0bWwjR1NULUlOREVYLUxPT0tVUC1CRUZPUkU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtSU5ERVgtTE9PS1VQLUFGVEVSOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4Lmh0bWwjR1NULUlOREVYLUxPT0tVUC1BRlRFUjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1JTkRFWC1OQVNTT0NTOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4Lmh0bWwjR1NULUlOREVYLU5BU1NPQ1M6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtSU5ERVgtQVNTT0MtRkxBR1M6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0SW5kZXguaHRtbCNHU1QtSU5ERVgtQVNTT0MtRkxBR1M6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtSU5ERVgtQVNTT0MtRk9STUFUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4Lmh0bWwjR1NULUlOREVYLUFTU09DLUZPUk1BVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1JTkRFWC1BU1NPQy1WQUxVRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleC5odG1sI0dTVC1JTkRFWC1BU1NPQy1WQUxVRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdzdEluZGV4QXNzb2NpYXRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4Lmh0bWwjR3N0SW5kZXhBc3NvY2lhdGlvbiI+Cis8QU5DSE9SIGlkPSJHc3RBc3NvY0ZsYWdzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleC5odG1sI0dzdEFzc29jRmxhZ3MiPgorPEFOQ0hPUiBpZD0iR1NULUFTU09DSUFUSU9OLUZMQUctTk9ORTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleC5odG1sI0dTVC1BU1NPQ0lBVElPTi1GTEFHLU5PTkU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQVNTT0NJQVRJT04tRkxBRy1LRVktVU5JVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleC5odG1sI0dTVC1BU1NPQ0lBVElPTi1GTEFHLUtFWS1VTklUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUFTU09DSUFUSU9OLUZMQUctREVMVEEtVU5JVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleC5odG1sI0dTVC1BU1NPQ0lBVElPTi1GTEFHLURFTFRBLVVOSVQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQVNTT0NJQVRJT04tRkxBRy1MQVNUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4Lmh0bWwjR1NULUFTU09DSUFUSU9OLUZMQUctTEFTVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1JTkRFWC1GT1JNQVQtRk9STUFUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4Lmh0bWwjR1NULUlOREVYLUZPUk1BVC1GT1JNQVQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtSU5ERVgtRk9STUFULUtFWTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleC5odG1sI0dTVC1JTkRFWC1GT1JNQVQtS0VZOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUlOREVYLUlELUlOVkFMSUQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0SW5kZXguaHRtbCNHU1QtSU5ERVgtSUQtSU5WQUxJRDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1JTkRFWC1JRC1ERVNDUklQVElPTjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleC5odG1sI0dTVC1JTkRFWC1JRC1ERVNDUklQVElPTjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdzdEluZGV4RmlsdGVyIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleC5odG1sI0dzdEluZGV4RmlsdGVyIj4KKzxBTkNIT1IgaWQ9IkdzdEluZGV4UmVzb2x2ZXJNZXRob2QiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4Lmh0bWwjR3N0SW5kZXhSZXNvbHZlck1ldGhvZCI+Cis8QU5DSE9SIGlkPSJHU1QtSU5ERVgtUkVTT0xWRVItQ1VTVE9NOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4Lmh0bWwjR1NULUlOREVYLVJFU09MVkVSLUNVU1RPTTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1JTkRFWC1SRVNPTFZFUi1HVFlQRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleC5odG1sI0dTVC1JTkRFWC1SRVNPTFZFUi1HVFlQRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1JTkRFWC1SRVNPTFZFUi1QQVRIOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4Lmh0bWwjR1NULUlOREVYLVJFU09MVkVSLVBBVEg6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHc3RJbmRleFJlc29sdmVyIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleC5odG1sI0dzdEluZGV4UmVzb2x2ZXIiPgorPEFOQ0hPUiBpZD0iR3N0SW5kZXhGbGFncyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0SW5kZXguaHRtbCNHc3RJbmRleEZsYWdzIj4KKzxBTkNIT1IgaWQ9IkdTVC1JTkRFWC1XUklUQUJMRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleC5odG1sI0dTVC1JTkRFWC1XUklUQUJMRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1JTkRFWC1SRUFEQUJMRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleC5odG1sI0dTVC1JTkRFWC1SRUFEQUJMRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1JTkRFWC1GTEFHLUxBU1Q6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0SW5kZXguaHRtbCNHU1QtSU5ERVgtRkxBRy1MQVNUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUlOREVYLUlTLVJFQURBQkxFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4Lmh0bWwjR1NULUlOREVYLUlTLVJFQURBQkxFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUlOREVYLUlTLVdSSVRBQkxFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4Lmh0bWwjR1NULUlOREVYLUlTLVdSSVRBQkxFOkNBUFMiPgorPEFOQ0hPUiBpZD0iZ3N0LWluZGV4LW5ldyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtbmV3Ij4KKzxBTkNIT1IgaWQ9ImdzdC1pbmRleC1jb21taXQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LWNvbW1pdCI+Cis8QU5DSE9SIGlkPSJnc3QtaW5kZXgtZ2V0LWdyb3VwIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleC5odG1sI2dzdC1pbmRleC1nZXQtZ3JvdXAiPgorPEFOQ0hPUiBpZD0iZ3N0LWluZGV4LW5ldy1ncm91cCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtbmV3LWdyb3VwIj4KKzxBTkNIT1IgaWQ9ImdzdC1pbmRleC1zZXQtZ3JvdXAiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LXNldC1ncm91cCI+Cis8QU5DSE9SIGlkPSJnc3QtaW5kZXgtc2V0LWNlcnRhaW50eSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtc2V0LWNlcnRhaW50eSI+Cis8QU5DSE9SIGlkPSJnc3QtaW5kZXgtZ2V0LWNlcnRhaW50eSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtZ2V0LWNlcnRhaW50eSI+Cis8QU5DSE9SIGlkPSJnc3QtaW5kZXgtc2V0LWZpbHRlciIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtc2V0LWZpbHRlciI+Cis8QU5DSE9SIGlkPSJnc3QtaW5kZXgtc2V0LWZpbHRlci1mdWxsIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleC5odG1sI2dzdC1pbmRleC1zZXQtZmlsdGVyLWZ1bGwiPgorPEFOQ0hPUiBpZD0iZ3N0LWluZGV4LXNldC1yZXNvbHZlciIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtc2V0LXJlc29sdmVyIj4KKzxBTkNIT1IgaWQ9ImdzdC1pbmRleC1zZXQtcmVzb2x2ZXItZnVsbCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtc2V0LXJlc29sdmVyLWZ1bGwiPgorPEFOQ0hPUiBpZD0iZ3N0LWluZGV4LWdldC13cml0ZXItaWQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LWdldC13cml0ZXItaWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWluZGV4LWFkZC1mb3JtYXQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LWFkZC1mb3JtYXQiPgorPEFOQ0hPUiBpZD0iZ3N0LWluZGV4LWFkZC1hc3NvY2lhdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtYWRkLWFzc29jaWF0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdC1pbmRleC1hZGQtYXNzb2NpYXRpb252IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleC5odG1sI2dzdC1pbmRleC1hZGQtYXNzb2NpYXRpb252Ij4KKzxBTkNIT1IgaWQ9ImdzdC1pbmRleC1hZGQtb2JqZWN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleC5odG1sI2dzdC1pbmRleC1hZGQtb2JqZWN0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1pbmRleC1hZGQtaWQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4Lmh0bWwjZ3N0LWluZGV4LWFkZC1pZCI+Cis8QU5DSE9SIGlkPSJnc3QtaW5kZXgtZ2V0LWFzc29jLWVudHJ5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleC5odG1sI2dzdC1pbmRleC1nZXQtYXNzb2MtZW50cnkiPgorPEFOQ0hPUiBpZD0iZ3N0LWluZGV4LWdldC1hc3NvYy1lbnRyeS1mdWxsIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleC5odG1sI2dzdC1pbmRleC1nZXQtYXNzb2MtZW50cnktZnVsbCI+Cis8QU5DSE9SIGlkPSJnc3QtaW5kZXgtZW50cnktY29weSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtZW50cnktY29weSI+Cis8QU5DSE9SIGlkPSJnc3QtaW5kZXgtZW50cnktZnJlZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0SW5kZXguaHRtbCNnc3QtaW5kZXgtZW50cnktZnJlZSI+Cis8QU5DSE9SIGlkPSJnc3QtaW5kZXgtZW50cnktYXNzb2MtbWFwIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleC5odG1sI2dzdC1pbmRleC1lbnRyeS1hc3NvYy1tYXAiPgorPEFOQ0hPUiBpZD0iR3N0SW5kZXgucHJvcGVydHktZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0SW5kZXguaHRtbCNHc3RJbmRleC5wcm9wZXJ0eS1kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdEluZGV4LS1yZXNvbHZlciIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0SW5kZXguaHRtbCNHc3RJbmRleC0tcmVzb2x2ZXIiPgorPEFOQ0hPUiBpZD0iR3N0SW5kZXguc2lnbmFsLWRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4Lmh0bWwjR3N0SW5kZXguc2lnbmFsLWRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0SW5kZXgtZW50cnktYWRkZWQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4Lmh0bWwjR3N0SW5kZXgtZW50cnktYWRkZWQiPgorPEFOQ0hPUiBpZD0iR3N0SW5kZXguc2VlLWFsc28iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4Lmh0bWwjR3N0SW5kZXguc2VlLWFsc28iPgorPEFOQ0hPUiBpZD0iR3N0SW5kZXhGYWN0b3J5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleEZhY3RvcnkuaHRtbCI+Cis8QU5DSE9SIGlkPSJHc3RJbmRleEZhY3Rvcnkuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4RmFjdG9yeS5odG1sI0dzdEluZGV4RmFjdG9yeS5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJHc3RJbmRleEZhY3Rvcnkub2JqZWN0LWhpZXJhcmNoeSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0SW5kZXhGYWN0b3J5Lmh0bWwjR3N0SW5kZXhGYWN0b3J5Lm9iamVjdC1oaWVyYXJjaHkiPgorPEFOQ0hPUiBpZD0iR3N0SW5kZXhGYWN0b3J5LmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleEZhY3RvcnkuaHRtbCNHc3RJbmRleEZhY3RvcnkuZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iR3N0SW5kZXhGYWN0b3J5LmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4RmFjdG9yeS5odG1sI0dzdEluZGV4RmFjdG9yeS5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdEluZGV4RmFjdG9yeS1zdHJ1Y3QiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4RmFjdG9yeS5odG1sI0dzdEluZGV4RmFjdG9yeS1zdHJ1Y3QiPgorPEFOQ0hPUiBpZD0iZ3N0LWluZGV4LWZhY3RvcnktbmV3IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleEZhY3RvcnkuaHRtbCNnc3QtaW5kZXgtZmFjdG9yeS1uZXciPgorPEFOQ0hPUiBpZD0iZ3N0LWluZGV4LWZhY3RvcnktZGVzdHJveSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0SW5kZXhGYWN0b3J5Lmh0bWwjZ3N0LWluZGV4LWZhY3RvcnktZGVzdHJveSI+Cis8QU5DSE9SIGlkPSJnc3QtaW5kZXgtZmFjdG9yeS1maW5kIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleEZhY3RvcnkuaHRtbCNnc3QtaW5kZXgtZmFjdG9yeS1maW5kIj4KKzxBTkNIT1IgaWQ9ImdzdC1pbmRleC1mYWN0b3J5LWNyZWF0ZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0SW5kZXhGYWN0b3J5Lmh0bWwjZ3N0LWluZGV4LWZhY3RvcnktY3JlYXRlIj4KKzxBTkNIT1IgaWQ9ImdzdC1pbmRleC1mYWN0b3J5LW1ha2UiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdEluZGV4RmFjdG9yeS5odG1sI2dzdC1pbmRleC1mYWN0b3J5LW1ha2UiPgorPEFOQ0hPUiBpZD0iR3N0SW5kZXhGYWN0b3J5LnNlZS1hbHNvIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RJbmRleEZhY3RvcnkuaHRtbCNHc3RJbmRleEZhY3Rvcnkuc2VlLWFsc28iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0SXRlcmF0b3Iuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdHJlYW1lci1Hc3RJdGVyYXRvci5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdHJlYW1lci1Hc3RJdGVyYXRvci5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0SXRlcmF0b3IiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIj4KKzxBTkNIT1IgaWQ9IkdzdEl0ZXJhdG9ySXRlbSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JJdGVtIj4KKzxBTkNIT1IgaWQ9IkdTVC1JVEVSQVRPUi1JVEVNLVNLSVA6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR1NULUlURVJBVE9SLUlURU0tU0tJUDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1JVEVSQVRPUi1JVEVNLVBBU1M6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR1NULUlURVJBVE9SLUlURU0tUEFTUzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1JVEVSQVRPUi1JVEVNLUVORDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHU1QtSVRFUkFUT1ItSVRFTS1FTkQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHc3RJdGVyYXRvclJlc3VsdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JSZXN1bHQiPgorPEFOQ0hPUiBpZD0iR1NULUlURVJBVE9SLURPTkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR1NULUlURVJBVE9SLURPTkU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtSVRFUkFUT1ItT0s6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR1NULUlURVJBVE9SLU9LOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUlURVJBVE9SLVJFU1lOQzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHU1QtSVRFUkFUT1ItUkVTWU5DOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUlURVJBVE9SLUVSUk9SOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dTVC1JVEVSQVRPUi1FUlJPUjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdzdEl0ZXJhdG9yQ29weUZ1bmN0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvckNvcHlGdW5jdGlvbiI+Cis8QU5DSE9SIGlkPSJHc3RJdGVyYXRvck5leHRGdW5jdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JOZXh0RnVuY3Rpb24iPgorPEFOQ0hPUiBpZD0iR3N0SXRlcmF0b3JJdGVtRnVuY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9ySXRlbUZ1bmN0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdEl0ZXJhdG9yUmVzeW5jRnVuY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yUmVzeW5jRnVuY3Rpb24iPgorPEFOQ0hPUiBpZD0iR3N0SXRlcmF0b3JGcmVlRnVuY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yRnJlZUZ1bmN0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdEl0ZXJhdG9yRm9yZWFjaEZ1bmN0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvckZvcmVhY2hGdW5jdGlvbiI+Cis8QU5DSE9SIGlkPSJHc3RJdGVyYXRvckZvbGRGdW5jdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JGb2xkRnVuY3Rpb24iPgorPEFOQ0hPUiBpZD0iR1NULUlURVJBVE9SOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dTVC1JVEVSQVRPUjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1JVEVSQVRPUi1MT0NLOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dTVC1JVEVSQVRPUi1MT0NLOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUlURVJBVE9SLUNPT0tJRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHU1QtSVRFUkFUT1ItQ09PS0lFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUlURVJBVE9SLU9SSUctQ09PS0lFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dTVC1JVEVSQVRPUi1PUklHLUNPT0tJRTpDQVBTIj4KKzxBTkNIT1IgaWQ9ImdzdC1pdGVyYXRvci1uZXciIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1uZXciPgorPEFOQ0hPUiBpZD0iZ3N0LWl0ZXJhdG9yLW5ldy1saXN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItbmV3LWxpc3QiPgorPEFOQ0hPUiBpZD0iZ3N0LWl0ZXJhdG9yLW5ldy1zaW5nbGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1uZXctc2luZ2xlIj4KKzxBTkNIT1IgaWQ9ImdzdC1pdGVyYXRvci1jb3B5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItY29weSI+Cis8QU5DSE9SIGlkPSJnc3QtaXRlcmF0b3ItZnJlZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLWZyZWUiPgorPEFOQ0hPUiBpZD0iZ3N0LWl0ZXJhdG9yLW5leHQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1uZXh0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1pdGVyYXRvci1yZXN5bmMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1yZXN5bmMiPgorPEFOQ0hPUiBpZD0iZ3N0LWl0ZXJhdG9yLXB1c2giIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1wdXNoIj4KKzxBTkNIT1IgaWQ9ImdzdC1pdGVyYXRvci1maWx0ZXIiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1maWx0ZXIiPgorPEFOQ0hPUiBpZD0iZ3N0LWl0ZXJhdG9yLWZvbGQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1mb2xkIj4KKzxBTkNIT1IgaWQ9ImdzdC1pdGVyYXRvci1mb3JlYWNoIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItZm9yZWFjaCI+Cis8QU5DSE9SIGlkPSJnc3QtaXRlcmF0b3ItZmluZC1jdXN0b20iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1maW5kLWN1c3RvbSI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0SXRlcmF0b3Iuc2VlLWFsc28iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdHJlYW1lci1Hc3RJdGVyYXRvci5zZWUtYWxzbyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0TWVtb3J5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdHJlYW1lci1Hc3RNZW1vcnkuc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdHJlYW1lci1Hc3RNZW1vcnkuZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjZ3N0cmVhbWVyLUdzdE1lbW9yeS5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdE1lbW9yeSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeSI+Cis8QU5DSE9SIGlkPSJHc3RNZW1vcnlJbmZvIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5SW5mbyI+Cis8QU5DSE9SIGlkPSJHc3RBbGxvY2F0b3IiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RBbGxvY2F0b3IiPgorPEFOQ0hPUiBpZD0iR1NULU1FTU9SWS1JUy1XUklUQUJMRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR1NULU1FTU9SWS1JUy1XUklUQUJMRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdzdE1lbW9yeUZsYWdzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5RmxhZ3MiPgorPEFOQ0hPUiBpZD0iR1NULU1FTU9SWS1GTEFHLVJFQURPTkxZOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHU1QtTUVNT1JZLUZMQUctUkVBRE9OTFk6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtTUVNT1JZLUZMQUctTk8tU0hBUkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dTVC1NRU1PUlktRkxBRy1OTy1TSEFSRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1NRU1PUlktRkxBRy1MQVNUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHU1QtTUVNT1JZLUZMQUctTEFTVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdzdE1hcEZsYWdzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR3N0TWFwRmxhZ3MiPgorPEFOQ0hPUiBpZD0iR1NULU1BUC1SRUFEOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHU1QtTUFQLVJFQUQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtTUFQLVdSSVRFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHU1QtTUFQLVdSSVRFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULU1BUC1SRUFEV1JJVEU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dTVC1NQVAtUkVBRFdSSVRFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR3N0TWVtb3J5QWxsb2NGdW5jdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeUFsbG9jRnVuY3Rpb24iPgorPEFOQ0hPUiBpZD0iR3N0TWVtb3J5R2V0U2l6ZXNGdW5jdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeUdldFNpemVzRnVuY3Rpb24iPgorPEFOQ0hPUiBpZD0iR3N0TWVtb3J5UmVzaXplRnVuY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnlSZXNpemVGdW5jdGlvbiI+Cis8QU5DSE9SIGlkPSJHc3RNZW1vcnlNYXBGdW5jdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeU1hcEZ1bmN0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdE1lbW9yeVVubWFwRnVuY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnlVbm1hcEZ1bmN0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdE1lbW9yeUZyZWVGdW5jdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeUZyZWVGdW5jdGlvbiI+Cis8QU5DSE9SIGlkPSJHc3RNZW1vcnlDb3B5RnVuY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnlDb3B5RnVuY3Rpb24iPgorPEFOQ0hPUiBpZD0iR3N0TWVtb3J5U2hhcmVGdW5jdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeVNoYXJlRnVuY3Rpb24iPgorPEFOQ0hPUiBpZD0iR3N0TWVtb3J5SXNTcGFuRnVuY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnlJc1NwYW5GdW5jdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3QtbWVtb3J5LWFsaWdubWVudCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktYWxpZ25tZW50Ij4KKzxBTkNIT1IgaWQ9ImdzdC1hbGxvY2F0b3ItYWxsb2MiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNnc3QtYWxsb2NhdG9yLWFsbG9jIj4KKzxBTkNIT1IgaWQ9ImdzdC1tZW1vcnktbmV3LXdyYXBwZWQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LW5ldy13cmFwcGVkIj4KKzxBTkNIT1IgaWQ9ImdzdC1tZW1vcnktcmVmIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS1yZWYiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lbW9yeS11bnJlZiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktdW5yZWYiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lbW9yeS1nZXQtc2l6ZXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LWdldC1zaXplcyI+Cis8QU5DSE9SIGlkPSJnc3QtbWVtb3J5LXJlc2l6ZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktcmVzaXplIj4KKzxBTkNIT1IgaWQ9ImdzdC1tZW1vcnktbWFwIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS1tYXAiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lbW9yeS11bm1hcCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktdW5tYXAiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lbW9yeS1jb3B5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS1jb3B5Ij4KKzxBTkNIT1IgaWQ9ImdzdC1tZW1vcnktc2hhcmUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LXNoYXJlIj4KKzxBTkNIT1IgaWQ9ImdzdC1tZW1vcnktaXMtc3BhbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktaXMtc3BhbiI+Cis8QU5DSE9SIGlkPSJHU1QtQUxMT0NBVE9SLVNZU01FTTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwjR1NULUFMTE9DQVRPUi1TWVNNRU06Q0FQUyI+Cis8QU5DSE9SIGlkPSJnc3QtYWxsb2NhdG9yLWZpbmQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZW1vcnkuaHRtbCNnc3QtYWxsb2NhdG9yLWZpbmQiPgorPEFOQ0hPUiBpZD0iZ3N0LWFsbG9jYXRvci1yZWdpc3RlciIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1hbGxvY2F0b3ItcmVnaXN0ZXIiPgorPEFOQ0hPUiBpZD0iZ3N0LWFsbG9jYXRvci1zZXQtZGVmYXVsdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdC1hbGxvY2F0b3Itc2V0LWRlZmF1bHQiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdE1lbW9yeS5zZWUtYWxzbyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lbW9yeS5odG1sI2dzdHJlYW1lci1Hc3RNZW1vcnkuc2VlLWFsc28iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2Uuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0cmVhbWVyLUdzdE1lc3NhZ2Uuc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3RyZWFtZXItR3N0TWVzc2FnZS5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdE1lc3NhZ2UiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSI+Cis8QU5DSE9SIGlkPSJHc3RNZXNzYWdlVHlwZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlVHlwZSI+Cis8QU5DSE9SIGlkPSJHU1QtTUVTU0FHRS1VTktOT1dOOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtVU5LTk9XTjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1NRVNTQUdFLUVPUzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLUVPUzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1NRVNTQUdFLUVSUk9SOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtRVJST1I6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtTUVTU0FHRS1XQVJOSU5HOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtV0FSTklORzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1NRVNTQUdFLUlORk86Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1JTkZPOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULU1FU1NBR0UtVEFHOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtVEFHOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULU1FU1NBR0UtQlVGRkVSSU5HOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtQlVGRkVSSU5HOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULU1FU1NBR0UtU1RBVEUtQ0hBTkdFRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVNUQVRFLUNIQU5HRUQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtTUVTU0FHRS1TVEFURS1ESVJUWTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVNUQVRFLURJUlRZOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULU1FU1NBR0UtU1RFUC1ET05FOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtU1RFUC1ET05FOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULU1FU1NBR0UtQ0xPQ0stUFJPVklERTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLUNMT0NLLVBST1ZJREU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtTUVTU0FHRS1DTE9DSy1MT1NUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtQ0xPQ0stTE9TVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1NRVNTQUdFLU5FVy1DTE9DSzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLU5FVy1DTE9DSzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1NRVNTQUdFLVNUUlVDVFVSRS1DSEFOR0U6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1TVFJVQ1RVUkUtQ0hBTkdFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULU1FU1NBR0UtU1RSRUFNLVNUQVRVUzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVNUUkVBTS1TVEFUVVM6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtTUVTU0FHRS1BUFBMSUNBVElPTjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLUFQUExJQ0FUSU9OOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULU1FU1NBR0UtRUxFTUVOVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLUVMRU1FTlQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtTUVTU0FHRS1TRUdNRU5ULVNUQVJUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtU0VHTUVOVC1TVEFSVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1NRVNTQUdFLVNFR01FTlQtRE9ORTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVNFR01FTlQtRE9ORTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1NRVNTQUdFLURVUkFUSU9OOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtRFVSQVRJT046Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtTUVTU0FHRS1MQVRFTkNZOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtTEFURU5DWTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1NRVNTQUdFLUFTWU5DLVNUQVJUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtQVNZTkMtU1RBUlQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtTUVTU0FHRS1BU1lOQy1ET05FOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtQVNZTkMtRE9ORTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1NRVNTQUdFLVJFUVVFU1QtU1RBVEU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1SRVFVRVNULVNUQVRFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULU1FU1NBR0UtU1RFUC1TVEFSVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVNURVAtU1RBUlQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtTUVTU0FHRS1RT1M6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1RT1M6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtTUVTU0FHRS1QUk9HUkVTUzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVBST0dSRVNTOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULU1FU1NBR0UtQU5ZOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtQU5ZOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULU1FU1NBR0UtU1JDOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtU1JDOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULU1FU1NBR0UtU1JDLU5BTUU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1TUkMtTkFNRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1NRVNTQUdFLVRJTUVTVEFNUDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVRJTUVTVEFNUDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1NRVNTQUdFLVNFUU5VTTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVNFUU5VTTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1NRVNTQUdFLVRZUEU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1UWVBFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULU1FU1NBR0UtVFlQRS1OQU1FOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtVFlQRS1OQU1FOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULU1FU1NBR0UtVFJBQ0UtTkFNRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVRSQUNFLU5BTUU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJnc3QtbWVzc2FnZS10eXBlLXRvLXF1YXJrIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXR5cGUtdG8tcXVhcmsiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2UtdHlwZS1nZXQtbmFtZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS10eXBlLWdldC1uYW1lIj4KKzxBTkNIT1IgaWQ9ImdzdC1tZXNzYWdlLXJlZiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1yZWYiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2UtdW5yZWYiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtdW5yZWYiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2UtY29weSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1jb3B5Ij4KKzxBTkNIT1IgaWQ9ImdzdC1tZXNzYWdlLWdldC1zdHJ1Y3R1cmUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtZ2V0LXN0cnVjdHVyZSI+Cis8QU5DSE9SIGlkPSJnc3QtbWVzc2FnZS1tYWtlLXdyaXRhYmxlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW1ha2Utd3JpdGFibGUiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2UtZ2V0LXNlcW51bSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1nZXQtc2VxbnVtIj4KKzxBTkNIT1IgaWQ9ImdzdC1tZXNzYWdlLXNldC1zZXFudW0iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2Utc2V0LXNlcW51bSI+Cis8QU5DSE9SIGlkPSJnc3QtbWVzc2FnZS1oYXMtbmFtZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1oYXMtbmFtZSI+Cis8QU5DSE9SIGlkPSJnc3QtbWVzc2FnZS1pcy13cml0YWJsZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1pcy13cml0YWJsZSI+Cis8QU5DSE9SIGlkPSJnc3QtbWVzc2FnZS1yZXBsYWNlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXJlcGxhY2UiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2UtbmV3LWVvcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctZW9zIj4KKzxBTkNIT1IgaWQ9ImdzdC1tZXNzYWdlLW5ldy1lcnJvciIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctZXJyb3IiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2UtcGFyc2UtZXJyb3IiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtZXJyb3IiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2UtbmV3LXdhcm5pbmciIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXdhcm5pbmciPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2UtcGFyc2Utd2FybmluZyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS13YXJuaW5nIj4KKzxBTkNIT1IgaWQ9ImdzdC1tZXNzYWdlLW5ldy1pbmZvIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1pbmZvIj4KKzxBTkNIT1IgaWQ9ImdzdC1tZXNzYWdlLXBhcnNlLWluZm8iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtaW5mbyI+Cis8QU5DSE9SIGlkPSJnc3QtbWVzc2FnZS1uZXctdGFnIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy10YWciPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2UtcGFyc2UtdGFnIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXRhZyI+Cis8QU5DSE9SIGlkPSJnc3QtbWVzc2FnZS1uZXctYnVmZmVyaW5nIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1idWZmZXJpbmciPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2UtcGFyc2UtYnVmZmVyaW5nIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWJ1ZmZlcmluZyI+Cis8QU5DSE9SIGlkPSJnc3QtbWVzc2FnZS1zZXQtYnVmZmVyaW5nLXN0YXRzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXNldC1idWZmZXJpbmctc3RhdHMiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2UtcGFyc2UtYnVmZmVyaW5nLXN0YXRzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWJ1ZmZlcmluZy1zdGF0cyI+Cis8QU5DSE9SIGlkPSJnc3QtbWVzc2FnZS1uZXctc3RhdGUtY2hhbmdlZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctc3RhdGUtY2hhbmdlZCI+Cis8QU5DSE9SIGlkPSJnc3QtbWVzc2FnZS1wYXJzZS1zdGF0ZS1jaGFuZ2VkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXN0YXRlLWNoYW5nZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2UtbmV3LXN0YXRlLWRpcnR5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1zdGF0ZS1kaXJ0eSI+Cis8QU5DSE9SIGlkPSJnc3QtbWVzc2FnZS1uZXctc3RlcC1kb25lIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1zdGVwLWRvbmUiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2UtcGFyc2Utc3RlcC1kb25lIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXN0ZXAtZG9uZSI+Cis8QU5DSE9SIGlkPSJnc3QtbWVzc2FnZS1uZXctY2xvY2stcHJvdmlkZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctY2xvY2stcHJvdmlkZSI+Cis8QU5DSE9SIGlkPSJnc3QtbWVzc2FnZS1wYXJzZS1jbG9jay1wcm92aWRlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWNsb2NrLXByb3ZpZGUiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2UtbmV3LWNsb2NrLWxvc3QiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWNsb2NrLWxvc3QiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2UtcGFyc2UtY2xvY2stbG9zdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1jbG9jay1sb3N0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1tZXNzYWdlLW5ldy1uZXctY2xvY2siIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LW5ldy1jbG9jayI+Cis8QU5DSE9SIGlkPSJnc3QtbWVzc2FnZS1wYXJzZS1uZXctY2xvY2siIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtbmV3LWNsb2NrIj4KKzxBTkNIT1IgaWQ9ImdzdC1tZXNzYWdlLW5ldy1hcHBsaWNhdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctYXBwbGljYXRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2UtbmV3LWVsZW1lbnQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWVsZW1lbnQiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2UtbmV3LWN1c3RvbSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctY3VzdG9tIj4KKzxBTkNIT1IgaWQ9ImdzdC1tZXNzYWdlLW5ldy1zZWdtZW50LXN0YXJ0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1zZWdtZW50LXN0YXJ0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1tZXNzYWdlLXBhcnNlLXNlZ21lbnQtc3RhcnQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2Utc2VnbWVudC1zdGFydCI+Cis8QU5DSE9SIGlkPSJnc3QtbWVzc2FnZS1uZXctc2VnbWVudC1kb25lIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1zZWdtZW50LWRvbmUiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2UtcGFyc2Utc2VnbWVudC1kb25lIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXNlZ21lbnQtZG9uZSI+Cis8QU5DSE9SIGlkPSJnc3QtbWVzc2FnZS1uZXctZHVyYXRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWR1cmF0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdC1tZXNzYWdlLXBhcnNlLWR1cmF0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWR1cmF0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdC1tZXNzYWdlLW5ldy1sYXRlbmN5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1sYXRlbmN5Ij4KKzxBTkNIT1IgaWQ9ImdzdC1tZXNzYWdlLW5ldy1hc3luYy1zdGFydCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctYXN5bmMtc3RhcnQiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2UtbmV3LWFzeW5jLWRvbmUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWFzeW5jLWRvbmUiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2UtcGFyc2UtYXN5bmMtZG9uZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1hc3luYy1kb25lIj4KKzxBTkNIT1IgaWQ9ImdzdC1tZXNzYWdlLW5ldy1zdGVwLXN0YXJ0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1zdGVwLXN0YXJ0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1tZXNzYWdlLXBhcnNlLXN0ZXAtc3RhcnQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2Utc3RlcC1zdGFydCI+Cis8QU5DSE9SIGlkPSJnc3QtbWVzc2FnZS1uZXctcW9zIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1xb3MiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2Utc2V0LXFvcy12YWx1ZXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2Utc2V0LXFvcy12YWx1ZXMiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2Utc2V0LXFvcy1zdGF0cyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1zZXQtcW9zLXN0YXRzIj4KKzxBTkNIT1IgaWQ9ImdzdC1tZXNzYWdlLXBhcnNlLXFvcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1xb3MiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2UtcGFyc2UtcW9zLXZhbHVlcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1xb3MtdmFsdWVzIj4KKzxBTkNIT1IgaWQ9ImdzdC1tZXNzYWdlLXBhcnNlLXFvcy1zdGF0cyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1xb3Mtc3RhdHMiPgorPEFOQ0hPUiBpZD0iR3N0U3RydWN0dXJlQ2hhbmdlVHlwZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RTdHJ1Y3R1cmVDaGFuZ2VUeXBlIj4KKzxBTkNIT1IgaWQ9IkdTVC1TVFJVQ1RVUkUtQ0hBTkdFLVRZUEUtUEFELUxJTks6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtU1RSVUNUVVJFLUNIQU5HRS1UWVBFLVBBRC1MSU5LOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVNUUlVDVFVSRS1DSEFOR0UtVFlQRS1QQUQtVU5MSU5LOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULVNUUlVDVFVSRS1DSEFOR0UtVFlQRS1QQUQtVU5MSU5LOkNBUFMiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2UtbmV3LXN0cnVjdHVyZS1jaGFuZ2UiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXN0cnVjdHVyZS1jaGFuZ2UiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2UtcGFyc2Utc3RydWN0dXJlLWNoYW5nZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1zdHJ1Y3R1cmUtY2hhbmdlIj4KKzxBTkNIT1IgaWQ9ImdzdC1tZXNzYWdlLW5ldy1yZXF1ZXN0LXN0YXRlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1yZXF1ZXN0LXN0YXRlIj4KKzxBTkNIT1IgaWQ9ImdzdC1tZXNzYWdlLXBhcnNlLXJlcXVlc3Qtc3RhdGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtcmVxdWVzdC1zdGF0ZSI+Cis8QU5DSE9SIGlkPSJHc3RTdHJlYW1TdGF0dXNUeXBlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdFN0cmVhbVN0YXR1c1R5cGUiPgorPEFOQ0hPUiBpZD0iR1NULVNUUkVBTS1TVEFUVVMtVFlQRS1DUkVBVEU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtU1RSRUFNLVNUQVRVUy1UWVBFLUNSRUFURTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1TVFJFQU0tU1RBVFVTLVRZUEUtRU5URVI6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtU1RSRUFNLVNUQVRVUy1UWVBFLUVOVEVSOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVNUUkVBTS1TVEFUVVMtVFlQRS1MRUFWRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1TVFJFQU0tU1RBVFVTLVRZUEUtTEVBVkU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtU1RSRUFNLVNUQVRVUy1UWVBFLURFU1RST1k6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtU1RSRUFNLVNUQVRVUy1UWVBFLURFU1RST1k6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtU1RSRUFNLVNUQVRVUy1UWVBFLVNUQVJUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULVNUUkVBTS1TVEFUVVMtVFlQRS1TVEFSVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1TVFJFQU0tU1RBVFVTLVRZUEUtUEFVU0U6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtU1RSRUFNLVNUQVRVUy1UWVBFLVBBVVNFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVNUUkVBTS1TVEFUVVMtVFlQRS1TVE9QOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULVNUUkVBTS1TVEFUVVMtVFlQRS1TVE9QOkNBUFMiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2UtbmV3LXN0cmVhbS1zdGF0dXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXN0cmVhbS1zdGF0dXMiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2UtcGFyc2Utc3RyZWFtLXN0YXR1cyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1zdHJlYW0tc3RhdHVzIj4KKzxBTkNIT1IgaWQ9ImdzdC1tZXNzYWdlLXNldC1zdHJlYW0tc3RhdHVzLW9iamVjdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1zZXQtc3RyZWFtLXN0YXR1cy1vYmplY3QiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2UtZ2V0LXN0cmVhbS1zdGF0dXMtb2JqZWN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLWdldC1zdHJlYW0tc3RhdHVzLW9iamVjdCI+Cis8QU5DSE9SIGlkPSJHc3RQcm9ncmVzc1R5cGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0UHJvZ3Jlc3NUeXBlIj4KKzxBTkNIT1IgaWQ9IkdTVC1QUk9HUkVTUy1UWVBFLVNUQVJUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULVBST0dSRVNTLVRZUEUtU1RBUlQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUFJPR1JFU1MtVFlQRS1DT05USU5VRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1QUk9HUkVTUy1UWVBFLUNPTlRJTlVFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVBST0dSRVNTLVRZUEUtQ09NUExFVEU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHU1QtUFJPR1JFU1MtVFlQRS1DT01QTEVURTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1QUk9HUkVTUy1UWVBFLUNBTkNFTEVEOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULVBST0dSRVNTLVRZUEUtQ0FOQ0VMRUQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUFJPR1JFU1MtVFlQRS1FUlJPUjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dTVC1QUk9HUkVTUy1UWVBFLUVSUk9SOkNBUFMiPgorPEFOQ0hPUiBpZD0iZ3N0LW1lc3NhZ2UtbmV3LXByb2dyZXNzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1wcm9ncmVzcyI+Cis8QU5DSE9SIGlkPSJnc3QtbWVzc2FnZS1wYXJzZS1wcm9ncmVzcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1wcm9ncmVzcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5zZWUtYWxzbyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNnc3RyZWFtZXItR3N0TWVzc2FnZS5zZWUtYWxzbyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0TWV0YSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0TWV0YS5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNnc3RyZWFtZXItR3N0TWV0YS5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0TWV0YS5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNnc3RyZWFtZXItR3N0TWV0YS5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0TWV0YS5kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWV0YS5odG1sI2dzdHJlYW1lci1Hc3RNZXRhLmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0TWV0YSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhIj4KKzxBTkNIT1IgaWQ9IkdzdE1ldGFJbmZvIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFJbmZvIj4KKzxBTkNIT1IgaWQ9IkdTVC1NRVRBLVRSQUNFLU5BTUU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHU1QtTUVUQS1UUkFDRS1OQU1FOkNBUFMiPgorPEFOQ0hPUiBpZD0iR3N0TWV0YUluaXRGdW5jdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhSW5pdEZ1bmN0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdE1ldGFGcmVlRnVuY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YUZyZWVGdW5jdGlvbiI+Cis8QU5DSE9SIGlkPSJHc3RNZXRhQ29weUZ1bmN0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFDb3B5RnVuY3Rpb24iPgorPEFOQ0hPUiBpZD0iR3N0TWV0YVRyYW5zZm9ybUZ1bmN0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFUcmFuc2Zvcm1GdW5jdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3QtbWV0YS1yZWdpc3RlciIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNnc3QtbWV0YS1yZWdpc3RlciI+Cis8QU5DSE9SIGlkPSJnc3QtbWV0YS1nZXQtaW5mbyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNnc3QtbWV0YS1nZXQtaW5mbyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3RyZWFtZXItR3N0TWluaU9iamVjdC5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3RyZWFtZXItR3N0TWluaU9iamVjdC5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdHJlYW1lci1Hc3RNaW5pT2JqZWN0LmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0TWluaU9iamVjdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0Ij4KKzxBTkNIT1IgaWQ9IkdzdE1pbmlPYmplY3RGbGFncyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0RmxhZ3MiPgorPEFOQ0hPUiBpZD0iR1NULU1JTkktT0JKRUNULUZMQUctTEFTVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1NSU5JLU9CSkVDVC1GTEFHLUxBU1Q6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3RDb3B5RnVuY3Rpb24iPgorPEFOQ0hPUiBpZD0iR3N0TWluaU9iamVjdERpc3Bvc2VGdW5jdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0RGlzcG9zZUZ1bmN0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdE1pbmlPYmplY3RGcmVlRnVuY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdEZyZWVGdW5jdGlvbiI+Cis8QU5DSE9SIGlkPSJHc3RNaW5pT2JqZWN0V2Vha05vdGlmeSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0V2Vha05vdGlmeSI+Cis8QU5DSE9SIGlkPSJHU1QtTUlOSS1PQkpFQ1QtVFlQRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1NSU5JLU9CSkVDVC1UWVBFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULU1JTkktT0JKRUNULUZMQUdTOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR1NULU1JTkktT0JKRUNULUZMQUdTOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULU1JTkktT0JKRUNULUZMQUctSVMtU0VUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR1NULU1JTkktT0JKRUNULUZMQUctSVMtU0VUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULU1JTkktT0JKRUNULUZMQUctU0VUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR1NULU1JTkktT0JKRUNULUZMQUctU0VUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULU1JTkktT0JKRUNULUZMQUctVU5TRVQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHU1QtTUlOSS1PQkpFQ1QtRkxBRy1VTlNFVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1NSU5JLU9CSkVDVC1SRUZDT1VOVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1NSU5JLU9CSkVDVC1SRUZDT1VOVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1NSU5JLU9CSkVDVC1SRUZDT1VOVC1WQUxVRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1NSU5JLU9CSkVDVC1SRUZDT1VOVC1WQUxVRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1NSU5JLU9CSkVDVC1TSVpFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR1NULU1JTkktT0JKRUNULVNJWkU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtREVGSU5FLU1JTkktT0JKRUNULVRZUEU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHU1QtREVGSU5FLU1JTkktT0JKRUNULVRZUEU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJnc3QtbWluaS1vYmplY3QtaW5pdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtaW5pdCI+Cis8QU5DSE9SIGlkPSJnc3QtbWluaS1vYmplY3QtY29weSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtY29weSI+Cis8QU5DSE9SIGlkPSJnc3QtbWluaS1vYmplY3QtaXMtd3JpdGFibGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LWlzLXdyaXRhYmxlIj4KKzxBTkNIT1IgaWQ9ImdzdC1taW5pLW9iamVjdC1tYWtlLXdyaXRhYmxlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC1tYWtlLXdyaXRhYmxlIj4KKzxBTkNIT1IgaWQ9ImdzdC1taW5pLW9iamVjdC1yZWYiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LXJlZiI+Cis8QU5DSE9SIGlkPSJnc3QtbWluaS1vYmplY3QtdW5yZWYiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LXVucmVmIj4KKzxBTkNIT1IgaWQ9ImdzdC1taW5pLW9iamVjdC13ZWFrLXJlZiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3Qtd2Vhay1yZWYiPgorPEFOQ0hPUiBpZD0iZ3N0LW1pbmktb2JqZWN0LXdlYWstdW5yZWYiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LXdlYWstdW5yZWYiPgorPEFOQ0hPUiBpZD0iZ3N0LW1pbmktb2JqZWN0LXJlcGxhY2UiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LXJlcGxhY2UiPgorPEFOQ0hPUiBpZD0iZ3N0LW1pbmktb2JqZWN0LXN0ZWFsIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC1zdGVhbCI+Cis8QU5DSE9SIGlkPSJnc3QtbWluaS1vYmplY3QtdGFrZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtdGFrZSI+Cis8QU5DSE9SIGlkPSJHc3RPYmplY3QiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdE9iamVjdC5odG1sIj4KKzxBTkNIT1IgaWQ9IkdzdE9iamVjdC5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9IkdzdE9iamVjdC5vYmplY3QtaGllcmFyY2h5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qub2JqZWN0LWhpZXJhcmNoeSI+Cis8QU5DSE9SIGlkPSJHc3RPYmplY3QuZGVyaXZlZC1pbnRlcmZhY2VzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCNHc3RPYmplY3QuZGVyaXZlZC1pbnRlcmZhY2VzIj4KKzxBTkNIT1IgaWQ9IkdzdE9iamVjdC5wcm9wZXJ0aWVzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCNHc3RPYmplY3QucHJvcGVydGllcyI+Cis8QU5DSE9SIGlkPSJHc3RPYmplY3Quc2lnbmFscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LnNpZ25hbHMiPgorPEFOQ0hPUiBpZD0iR3N0T2JqZWN0LmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCNHc3RPYmplY3QuZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iR3N0T2JqZWN0LmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdE9iamVjdC5odG1sI0dzdE9iamVjdC5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdE9iamVjdC1zdHJ1Y3QiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPgorPEFOQ0hPUiBpZD0iR3N0T2JqZWN0Q2xhc3MiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdE9iamVjdC5odG1sI0dzdE9iamVjdENsYXNzIj4KKzxBTkNIT1IgaWQ9IkdzdE9iamVjdEZsYWdzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCNHc3RPYmplY3RGbGFncyI+Cis8QU5DSE9SIGlkPSJHU1QtT0JKRUNULUZMQUctTEFTVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULUZMQUctTEFTVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1PQkpFQ1QtRkxBR1M6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1GTEFHUzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1PQkpFQ1QtRkxBRy1JUy1TRVQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1GTEFHLUlTLVNFVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1PQkpFQ1QtRkxBRy1TRVQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1GTEFHLVNFVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1PQkpFQ1QtRkxBRy1VTlNFVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULUZMQUctVU5TRVQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtT0JKRUNULU5BTUU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1OQU1FOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULU9CSkVDVC1QQVJFTlQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1QQVJFTlQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtT0JKRUNULVJFRkNPVU5UOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdE9iamVjdC5odG1sI0dTVC1PQkpFQ1QtUkVGQ09VTlQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtT0JKRUNULVJFRkNPVU5ULVZBTFVFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdE9iamVjdC5odG1sI0dTVC1PQkpFQ1QtUkVGQ09VTlQtVkFMVUU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtT0JKRUNULUxPQ0s6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1MT0NLOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULU9CSkVDVC1UUllMT0NLOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdE9iamVjdC5odG1sI0dTVC1PQkpFQ1QtVFJZTE9DSzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1PQkpFQ1QtVU5MT0NLOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdE9iamVjdC5odG1sI0dTVC1PQkpFQ1QtVU5MT0NLOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULU9CSkVDVC1HRVQtTE9DSzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULUdFVC1MT0NLOkNBUFMiPgorPEFOQ0hPUiBpZD0iZ3N0LW9iamVjdC1zZXQtbmFtZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1zZXQtbmFtZSI+Cis8QU5DSE9SIGlkPSJnc3Qtb2JqZWN0LWdldC1uYW1lIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC1uYW1lIj4KKzxBTkNIT1IgaWQ9ImdzdC1vYmplY3Qtc2V0LXBhcmVudCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1zZXQtcGFyZW50Ij4KKzxBTkNIT1IgaWQ9ImdzdC1vYmplY3QtZ2V0LXBhcmVudCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1nZXQtcGFyZW50Ij4KKzxBTkNIT1IgaWQ9ImdzdC1vYmplY3QtdW5wYXJlbnQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtdW5wYXJlbnQiPgorPEFOQ0hPUiBpZD0iZ3N0LW9iamVjdC1kZWZhdWx0LWRlZXAtbm90aWZ5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWRlZmF1bHQtZGVlcC1ub3RpZnkiPgorPEFOQ0hPUiBpZD0iZ3N0LW9iamVjdC1kZWZhdWx0LWVycm9yIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWRlZmF1bHQtZXJyb3IiPgorPEFOQ0hPUiBpZD0iZ3N0LW9iamVjdC1jaGVjay11bmlxdWVuZXNzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWNoZWNrLXVuaXF1ZW5lc3MiPgorPEFOQ0hPUiBpZD0iZ3N0LW9iamVjdC1oYXMtYW5jZXN0b3IiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtaGFzLWFuY2VzdG9yIj4KKzxBTkNIT1IgaWQ9ImdzdC1vYmplY3QtcmVmIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXJlZiI+Cis8QU5DSE9SIGlkPSJnc3Qtb2JqZWN0LXVucmVmIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucmVmIj4KKzxBTkNIT1IgaWQ9ImdzdC1vYmplY3QtcmVmLXNpbmsiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtcmVmLXNpbmsiPgorPEFOQ0hPUiBpZD0iZ3N0LW9iamVjdC1yZXBsYWNlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXJlcGxhY2UiPgorPEFOQ0hPUiBpZD0iZ3N0LW9iamVjdC1nZXQtcGF0aC1zdHJpbmciIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtZ2V0LXBhdGgtc3RyaW5nIj4KKzxBTkNIT1IgaWQ9IkdzdE9iamVjdC5wcm9wZXJ0eS1kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCNHc3RPYmplY3QucHJvcGVydHktZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RPYmplY3QtLW5hbWUiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdE9iamVjdC5odG1sI0dzdE9iamVjdC0tbmFtZSI+Cis8QU5DSE9SIGlkPSJHc3RPYmplY3QtLXBhcmVudCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LS1wYXJlbnQiPgorPEFOQ0hPUiBpZD0iR3N0T2JqZWN0LnNpZ25hbC1kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCNHc3RPYmplY3Quc2lnbmFsLWRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0T2JqZWN0LWRlZXAtbm90aWZ5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCNHc3RPYmplY3QtZGVlcC1ub3RpZnkiPgorPEFOQ0hPUiBpZD0iR3N0UGFkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCI+Cis8QU5DSE9SIGlkPSJHc3RQYWQuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dzdFBhZC5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJHc3RQYWQub2JqZWN0LWhpZXJhcmNoeSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR3N0UGFkLm9iamVjdC1oaWVyYXJjaHkiPgorPEFOQ0hPUiBpZD0iR3N0UGFkLnByb3BlcnRpZXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dzdFBhZC5wcm9wZXJ0aWVzIj4KKzxBTkNIT1IgaWQ9IkdzdFBhZC5zaWduYWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHc3RQYWQuc2lnbmFscyI+Cis8QU5DSE9SIGlkPSJHc3RQYWQuZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dzdFBhZC5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJHc3RQYWQuZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR3N0UGFkLmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0UGFkLXN0cnVjdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCI+Cis8QU5DSE9SIGlkPSJHc3RQYWREaXJlY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dzdFBhZERpcmVjdGlvbiI+Cis8QU5DSE9SIGlkPSJHU1QtUEFELVVOS05PV046Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULVBBRC1VTktOT1dOOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVBBRC1TUkM6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULVBBRC1TUkM6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUEFELVNJTks6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULVBBRC1TSU5LOkNBUFMiPgorPEFOQ0hPUiBpZD0iR3N0UGFkRmxhZ3MiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dzdFBhZEZsYWdzIj4KKzxBTkNIT1IgaWQ9IkdTVC1QQUQtQkxPQ0tFRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHU1QtUEFELUJMT0NLRUQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUEFELUZMVVNISU5HOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dTVC1QQUQtRkxVU0hJTkc6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUEFELUlOLUdFVENBUFM6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULVBBRC1JTi1HRVRDQVBTOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVBBRC1CTE9DS0lORzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHU1QtUEFELUJMT0NLSU5HOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVBBRC1ORUVELVJFQ09ORklHVVJFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dTVC1QQUQtTkVFRC1SRUNPTkZJR1VSRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1QQUQtTkVFRC1FVkVOVFM6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULVBBRC1ORUVELUVWRU5UUzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1QQUQtRklYRUQtQ0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULVBBRC1GSVhFRC1DQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1QQUQtRkxBRy1MQVNUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dTVC1QQUQtRkxBRy1MQVNUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR3N0UGFkTGlua1JldHVybiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR3N0UGFkTGlua1JldHVybiI+Cis8QU5DSE9SIGlkPSJHU1QtUEFELUxJTkstT0s6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULVBBRC1MSU5LLU9LOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVBBRC1MSU5LLVdST05HLUhJRVJBUkNIWTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHU1QtUEFELUxJTkstV1JPTkctSElFUkFSQ0hZOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVBBRC1MSU5LLVdBUy1MSU5LRUQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULVBBRC1MSU5LLVdBUy1MSU5LRUQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUEFELUxJTkstV1JPTkctRElSRUNUSU9OOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dTVC1QQUQtTElOSy1XUk9ORy1ESVJFQ1RJT046Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUEFELUxJTkstTk9GT1JNQVQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULVBBRC1MSU5LLU5PRk9STUFUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVBBRC1MSU5LLU5PU0NIRUQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULVBBRC1MSU5LLU5PU0NIRUQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUEFELUxJTkstUkVGVVNFRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHU1QtUEFELUxJTkstUkVGVVNFRDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1QQUQtTElOSy1GQUlMRUQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULVBBRC1MSU5LLUZBSUxFRDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1QQUQtTElOSy1TVUNDRVNTRlVMOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dTVC1QQUQtTElOSy1TVUNDRVNTRlVMOkNBUFMiPgorPEFOQ0hPUiBpZD0iR3N0UGFkTGlua0NoZWNrIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHc3RQYWRMaW5rQ2hlY2siPgorPEFOQ0hPUiBpZD0iR1NULVBBRC1MSU5LLUNIRUNLLU5PVEhJTkc6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULVBBRC1MSU5LLUNIRUNLLU5PVEhJTkc6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUEFELUxJTkstQ0hFQ0stSElFUkFSQ0hZOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dTVC1QQUQtTElOSy1DSEVDSy1ISUVSQVJDSFk6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUEFELUxJTkstQ0hFQ0stVEVNUExBVEUtQ0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULVBBRC1MSU5LLUNIRUNLLVRFTVBMQVRFLUNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVBBRC1MSU5LLUNIRUNLLUNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dTVC1QQUQtTElOSy1DSEVDSy1DQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1QQUQtTElOSy1DSEVDSy1ERUZBVUxUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dTVC1QQUQtTElOSy1DSEVDSy1ERUZBVUxUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR3N0Rmxvd1JldHVybiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+Cis8QU5DSE9SIGlkPSJHU1QtRkxPVy1DVVNUT00tU1VDQ0VTUy0yOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dTVC1GTE9XLUNVU1RPTS1TVUNDRVNTLTI6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRkxPVy1DVVNUT00tU1VDQ0VTUy0xOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dTVC1GTE9XLUNVU1RPTS1TVUNDRVNTLTE6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRkxPVy1DVVNUT00tU1VDQ0VTUzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHU1QtRkxPVy1DVVNUT00tU1VDQ0VTUzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1GTE9XLVJFU0VORDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHU1QtRkxPVy1SRVNFTkQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRkxPVy1PSzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHU1QtRkxPVy1PSzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1GTE9XLU5PVC1MSU5LRUQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULUZMT1ctTk9ULUxJTktFRDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1GTE9XLVdST05HLVNUQVRFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dTVC1GTE9XLVdST05HLVNUQVRFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUZMT1ctVU5FWFBFQ1RFRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHU1QtRkxPVy1VTkVYUEVDVEVEOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUZMT1ctTk9ULU5FR09USUFURUQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULUZMT1ctTk9ULU5FR09USUFURUQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRkxPVy1FUlJPUjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHU1QtRkxPVy1FUlJPUjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1GTE9XLU5PVC1TVVBQT1JURUQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULUZMT1ctTk9ULVNVUFBPUlRFRDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1GTE9XLUNVU1RPTS1FUlJPUjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHU1QtRkxPVy1DVVNUT00tRVJST1I6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRkxPVy1DVVNUT00tRVJST1ItMTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHU1QtRkxPVy1DVVNUT00tRVJST1ItMTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1GTE9XLUNVU1RPTS1FUlJPUi0yOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dTVC1GTE9XLUNVU1RPTS1FUlJPUi0yOkNBUFMiPgorPEFOQ0hPUiBpZD0iR3N0QWN0aXZhdGVNb2RlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHc3RBY3RpdmF0ZU1vZGUiPgorPEFOQ0hPUiBpZD0iR1NULUFDVElWQVRFLU5PTkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULUFDVElWQVRFLU5PTkU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQUNUSVZBVEUtUFVTSDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHU1QtQUNUSVZBVEUtUFVTSDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1BQ1RJVkFURS1QVUxMOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dTVC1BQ1RJVkFURS1QVUxMOkNBUFMiPgorPEFOQ0hPUiBpZD0iR3N0UHJvYmVSZXR1cm4iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dzdFByb2JlUmV0dXJuIj4KKzxBTkNIT1IgaWQ9IkdTVC1QUk9CRS1EUk9QOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dTVC1QUk9CRS1EUk9QOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVBST0JFLU9LOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dTVC1QUk9CRS1PSzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1QUk9CRS1SRU1PVkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULVBST0JFLVJFTU9WRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1QUk9CRS1QQVNTOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dTVC1QUk9CRS1QQVNTOkNBUFMiPgorPEFOQ0hPUiBpZD0iR3N0UHJvYmVUeXBlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHc3RQcm9iZVR5cGUiPgorPEFOQ0hPUiBpZD0iR1NULVBST0JFLVRZUEUtSU5WQUxJRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHU1QtUFJPQkUtVFlQRS1JTlZBTElEOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVBST0JFLVRZUEUtSURMRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHU1QtUFJPQkUtVFlQRS1JRExFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVBST0JFLVRZUEUtQkxPQ0s6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULVBST0JFLVRZUEUtQkxPQ0s6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUFJPQkUtVFlQRS1CVUZGRVI6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULVBST0JFLVRZUEUtQlVGRkVSOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVBST0JFLVRZUEUtQlVGRkVSLUxJU1Q6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULVBST0JFLVRZUEUtQlVGRkVSLUxJU1Q6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUFJPQkUtVFlQRS1FVkVOVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHU1QtUFJPQkUtVFlQRS1FVkVOVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1QUk9CRS1UWVBFLVBVU0g6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULVBST0JFLVRZUEUtUFVTSDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1QUk9CRS1UWVBFLVBVTEw6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULVBST0JFLVRZUEUtUFVMTDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1QUk9CRS1UWVBFLUJMT0NLSU5HOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dTVC1QUk9CRS1UWVBFLUJMT0NLSU5HOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVBST0JFLVRZUEUtREFUQTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHU1QtUFJPQkUtVFlQRS1EQVRBOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVBST0JFLVRZUEUtU0NIRURVTElORzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHU1QtUFJPQkUtVFlQRS1TQ0hFRFVMSU5HOkNBUFMiPgorPEFOQ0hPUiBpZD0iZ3N0LXBhZC1nZXQtbmFtZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtbmFtZSI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLWdldC1kaXJlY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LWRpcmVjdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLWdldC1wYXJlbnQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXBhcmVudCI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLWdldC1wYXJlbnQtZWxlbWVudCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtcGFyZW50LWVsZW1lbnQiPgorPEFOQ0hPUiBpZD0iZ3N0LXBhZC1nZXQtcGFkLXRlbXBsYXRlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1wYWQtdGVtcGxhdGUiPgorPEFOQ0hPUiBpZD0iZ3N0LXBhZC1saW5rIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNnc3QtcGFkLWxpbmsiPgorPEFOQ0hPUiBpZD0iZ3N0LXBhZC1saW5rLWZ1bGwiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtbGluay1mdWxsIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtdW5saW5rIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNnc3QtcGFkLXVubGluayI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLWlzLWxpbmtlZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1pcy1saW5rZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LXBhZC1jYW4tbGluayIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1jYW4tbGluayI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLWdldC1jYXBzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1jYXBzIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtZ2V0LWNhcHMtcmVmZmVkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1jYXBzLXJlZmZlZCI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLWdldC1hbGxvd2VkLWNhcHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LWFsbG93ZWQtY2FwcyI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLWdldC1jdXJyZW50LWNhcHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LWN1cnJlbnQtY2FwcyI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLWdldC1wYWQtdGVtcGxhdGUtY2FwcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtcGFkLXRlbXBsYXRlLWNhcHMiPgorPEFOQ0hPUiBpZD0iZ3N0LXBhZC1zZXQtY2FwcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtY2FwcyI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLWdldC1wZWVyIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1wZWVyIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtcGVlci1nZXQtY2FwcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1wZWVyLWdldC1jYXBzIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtcGVlci1nZXQtY2Fwcy1yZWZmZWQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtcGVlci1nZXQtY2Fwcy1yZWZmZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LXBhZC11c2UtZml4ZWQtY2FwcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC11c2UtZml4ZWQtY2FwcyI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLWhhcy1jdXJyZW50LWNhcHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtaGFzLWN1cnJlbnQtY2FwcyI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLWdldC1zdGlja3ktZXZlbnQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXN0aWNreS1ldmVudCI+Cis8QU5DSE9SIGlkPSJHc3RQYWRTdGlja3lFdmVudHNGb3JlYWNoRnVuY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dzdFBhZFN0aWNreUV2ZW50c0ZvcmVhY2hGdW5jdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLXN0aWNreS1ldmVudHMtZm9yZWFjaCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1zdGlja3ktZXZlbnRzLWZvcmVhY2giPgorPEFOQ0hPUiBpZD0iZ3N0LXBhZC1pcy1hY3RpdmUiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtaXMtYWN0aXZlIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtaXMtYmxvY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1pcy1ibG9ja2VkIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtaXMtYmxvY2tpbmciIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtaXMtYmxvY2tpbmciPgorPEFOQ0hPUiBpZD0iR3N0UGFkUHJvYmVDYWxsYmFjayIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR3N0UGFkUHJvYmVDYWxsYmFjayI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLWFkZC1wcm9iZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1hZGQtcHJvYmUiPgorPEFOQ0hPUiBpZD0iZ3N0LXBhZC1yZW1vdmUtcHJvYmUiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtcmVtb3ZlLXByb2JlIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtZ2V0LW9mZnNldCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtb2Zmc2V0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtc2V0LW9mZnNldCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtb2Zmc2V0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtbmV3IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNnc3QtcGFkLW5ldyI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLW5ldy1mcm9tLXRlbXBsYXRlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNnc3QtcGFkLW5ldy1mcm9tLXRlbXBsYXRlIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtbmV3LWZyb20tc3RhdGljLXRlbXBsYXRlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNnc3QtcGFkLW5ldy1mcm9tLXN0YXRpYy10ZW1wbGF0ZSI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLXNldC1jaGFpbi1mdW5jdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtY2hhaW4tZnVuY3Rpb24iPgorPEFOQ0hPUiBpZD0iR3N0UGFkQ2hhaW5GdW5jdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR3N0UGFkQ2hhaW5GdW5jdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLXNldC1jaGFpbi1saXN0LWZ1bmN0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1jaGFpbi1saXN0LWZ1bmN0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdFBhZENoYWluTGlzdEZ1bmN0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHc3RQYWRDaGFpbkxpc3RGdW5jdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLWdldC1yYW5nZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtcmFuZ2UiPgorPEFOQ0hPUiBpZD0iZ3N0LXBhZC1zZXQtZ2V0cmFuZ2UtZnVuY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWdldHJhbmdlLWZ1bmN0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdFBhZEdldFJhbmdlRnVuY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dzdFBhZEdldFJhbmdlRnVuY3Rpb24iPgorPEFOQ0hPUiBpZD0iZ3N0LXBhZC1zZXQtZXZlbnQtZnVuY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWV2ZW50LWZ1bmN0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdFBhZEV2ZW50RnVuY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dzdFBhZEV2ZW50RnVuY3Rpb24iPgorPEFOQ0hPUiBpZD0iZ3N0LXBhZC1zZXQtbGluay1mdW5jdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtbGluay1mdW5jdGlvbiI+Cis8QU5DSE9SIGlkPSJHc3RQYWRMaW5rRnVuY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dzdFBhZExpbmtGdW5jdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLXNldC11bmxpbmstZnVuY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtc2V0LXVubGluay1mdW5jdGlvbiI+Cis8QU5DSE9SIGlkPSJHc3RQYWRVbmxpbmtGdW5jdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR3N0UGFkVW5saW5rRnVuY3Rpb24iPgorPEFOQ0hPUiBpZD0iZ3N0LXBhZC1hY2NlcHQtY2FwcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1hY2NlcHQtY2FwcyI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLXNldC1hY2NlcHRjYXBzLWZ1bmN0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1hY2NlcHRjYXBzLWZ1bmN0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdFBhZEFjY2VwdENhcHNGdW5jdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR3N0UGFkQWNjZXB0Q2Fwc0Z1bmN0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtc2V0LWdldGNhcHMtZnVuY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWdldGNhcHMtZnVuY3Rpb24iPgorPEFOQ0hPUiBpZD0iR3N0UGFkR2V0Q2Fwc0Z1bmN0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHc3RQYWRHZXRDYXBzRnVuY3Rpb24iPgorPEFOQ0hPUiBpZD0iZ3N0LXBhZC1wcm94eS1nZXRjYXBzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNnc3QtcGFkLXByb3h5LWdldGNhcHMiPgorPEFOQ0hPUiBpZD0iZ3N0LXBhZC1maXhhdGUtY2FwcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1maXhhdGUtY2FwcyI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLXNldC1maXhhdGVjYXBzLWZ1bmN0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1maXhhdGVjYXBzLWZ1bmN0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdFBhZEZpeGF0ZUNhcHNGdW5jdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR3N0UGFkRml4YXRlQ2Fwc0Z1bmN0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtcGVlci1hY2NlcHQtY2FwcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1wZWVyLWFjY2VwdC1jYXBzIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtc2V0LWFjdGl2YXRlLWZ1bmN0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1hY3RpdmF0ZS1mdW5jdGlvbiI+Cis8QU5DSE9SIGlkPSJHc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtc2V0LWFjdGl2YXRlcHVzaC1mdW5jdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtYWN0aXZhdGVwdXNoLWZ1bmN0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtc2V0LWFjdGl2YXRlcHVsbC1mdW5jdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtYWN0aXZhdGVwdWxsLWZ1bmN0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdFBhZEFjdGl2YXRlTW9kZUZ1bmN0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLWNoZWNrLXJlY29uZmlndXJlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNnc3QtcGFkLWNoZWNrLXJlY29uZmlndXJlIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtbWFyay1yZWNvbmZpZ3VyZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1tYXJrLXJlY29uZmlndXJlIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtcHVzaCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1wdXNoIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtcHVzaC1ldmVudCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1wdXNoLWV2ZW50Ij4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtcHVzaC1saXN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNnc3QtcGFkLXB1c2gtbGlzdCI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLXB1bGwtcmFuZ2UiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtcHVsbC1yYW5nZSI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLWFjdGl2YXRlLXB1bGwiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtYWN0aXZhdGUtcHVsbCI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLWFjdGl2YXRlLXB1c2giIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtYWN0aXZhdGUtcHVzaCI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLXNlbmQtZXZlbnQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtc2VuZC1ldmVudCI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLWV2ZW50LWRlZmF1bHQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtZXZlbnQtZGVmYXVsdCI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLXF1ZXJ5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNnc3QtcGFkLXF1ZXJ5Ij4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtcGVlci1xdWVyeSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1wZWVyLXF1ZXJ5Ij4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtcXVlcnktZGVmYXVsdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1xdWVyeS1kZWZhdWx0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtcXVlcnktcG9zaXRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtcXVlcnktcG9zaXRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0LXBhZC1xdWVyeS1kdXJhdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1xdWVyeS1kdXJhdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLXF1ZXJ5LWNvbnZlcnQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtcXVlcnktY29udmVydCI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLXF1ZXJ5LXBlZXItcG9zaXRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtcXVlcnktcGVlci1wb3NpdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLXF1ZXJ5LXBlZXItZHVyYXRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtcXVlcnktcGVlci1kdXJhdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLXF1ZXJ5LXBlZXItY29udmVydCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1xdWVyeS1wZWVyLWNvbnZlcnQiPgorPEFOQ0hPUiBpZD0iZ3N0LXBhZC1zZXQtcXVlcnktZnVuY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtc2V0LXF1ZXJ5LWZ1bmN0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdFBhZFF1ZXJ5RnVuY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dzdFBhZFF1ZXJ5RnVuY3Rpb24iPgorPEFOQ0hPUiBpZD0iZ3N0LXBhZC1zZXQtcXVlcnktdHlwZS1mdW5jdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtcXVlcnktdHlwZS1mdW5jdGlvbiI+Cis8QU5DSE9SIGlkPSJHc3RQYWRRdWVyeVR5cGVGdW5jdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR3N0UGFkUXVlcnlUeXBlRnVuY3Rpb24iPgorPEFOQ0hPUiBpZD0iZ3N0LXBhZC1nZXQtcXVlcnktdHlwZXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXF1ZXJ5LXR5cGVzIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtZ2V0LXF1ZXJ5LXR5cGVzLWRlZmF1bHQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXF1ZXJ5LXR5cGVzLWRlZmF1bHQiPgorPEFOQ0hPUiBpZD0iZ3N0LXBhZC1zZXQtaXRlcmF0ZS1pbnRlcm5hbC1saW5rcy1mdW5jdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtaXRlcmF0ZS1pbnRlcm5hbC1saW5rcy1mdW5jdGlvbiI+Cis8QU5DSE9SIGlkPSJHc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtaXRlcmF0ZS1pbnRlcm5hbC1saW5rcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1pdGVyYXRlLWludGVybmFsLWxpbmtzIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtaXRlcmF0ZS1pbnRlcm5hbC1saW5rcy1kZWZhdWx0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNnc3QtcGFkLWl0ZXJhdGUtaW50ZXJuYWwtbGlua3MtZGVmYXVsdCI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLXNldC1lbGVtZW50LXByaXZhdGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWVsZW1lbnQtcHJpdmF0ZSI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLWdldC1lbGVtZW50LXByaXZhdGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LWVsZW1lbnQtcHJpdmF0ZSI+Cis8QU5DSE9SIGlkPSJHc3RQYWRGb3J3YXJkRnVuY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dzdFBhZEZvcndhcmRGdW5jdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLWZvcndhcmQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtZm9yd2FyZCI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLWNoYWluIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNnc3QtcGFkLWNoYWluIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtY2hhaW4tbGlzdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1jaGFpbi1saXN0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtc3RhcnQtdGFzayIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1zdGFydC10YXNrIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtcGF1c2UtdGFzayIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjZ3N0LXBhZC1wYXVzZS10YXNrIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtc3RvcC10YXNrIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNnc3QtcGFkLXN0b3AtdGFzayI+Cis8QU5DSE9SIGlkPSJnc3QtcGFkLXNldC1hY3RpdmUiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWFjdGl2ZSI+Cis8QU5DSE9SIGlkPSJHU1QtUEFELUdFVC1TVFJFQU0tTE9DSzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHU1QtUEFELUdFVC1TVFJFQU0tTE9DSzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1QQUQtU1RSRUFNLUxPQ0s6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULVBBRC1TVFJFQU0tTE9DSzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1QQUQtU1RSRUFNLUxPQ0stRlVMTDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHU1QtUEFELVNUUkVBTS1MT0NLLUZVTEw6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUEFELVNUUkVBTS1UUllMT0NLOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dTVC1QQUQtU1RSRUFNLVRSWUxPQ0s6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUEFELVNUUkVBTS1VTkxPQ0s6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULVBBRC1TVFJFQU0tVU5MT0NLOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVBBRC1TVFJFQU0tVU5MT0NLLUZVTEw6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULVBBRC1TVFJFQU0tVU5MT0NLLUZVTEw6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHc3RQYWQucHJvcGVydHktZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR3N0UGFkLnByb3BlcnR5LWRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0UGFkLS1jYXBzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHc3RQYWQtLWNhcHMiPgorPEFOQ0hPUiBpZD0iR3N0UGFkLS1kaXJlY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dzdFBhZC0tZGlyZWN0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdFBhZC0tdGVtcGxhdGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dzdFBhZC0tdGVtcGxhdGUiPgorPEFOQ0hPUiBpZD0iR3N0UGFkLnNpZ25hbC1kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHc3RQYWQuc2lnbmFsLWRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0UGFkLWxpbmtlZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR3N0UGFkLWxpbmtlZCI+Cis8QU5DSE9SIGlkPSJHc3RQYWQtdW5saW5rZWQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dzdFBhZC11bmxpbmtlZCI+Cis8QU5DSE9SIGlkPSJHc3RQYWQuc2VlLWFsc28iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dzdFBhZC5zZWUtYWxzbyI+Cis8QU5DSE9SIGlkPSJHc3RQYWRUZW1wbGF0ZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkVGVtcGxhdGUuaHRtbCI+Cis8QU5DSE9SIGlkPSJHc3RQYWRUZW1wbGF0ZS5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RQYWRUZW1wbGF0ZS5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJHc3RQYWRUZW1wbGF0ZS5vYmplY3QtaGllcmFyY2h5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFRlbXBsYXRlLm9iamVjdC1oaWVyYXJjaHkiPgorPEFOQ0hPUiBpZD0iR3N0UGFkVGVtcGxhdGUucHJvcGVydGllcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RQYWRUZW1wbGF0ZS5wcm9wZXJ0aWVzIj4KKzxBTkNIT1IgaWQ9IkdzdFBhZFRlbXBsYXRlLnNpZ25hbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkVGVtcGxhdGUuc2lnbmFscyI+Cis8QU5DSE9SIGlkPSJHc3RQYWRUZW1wbGF0ZS5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RQYWRUZW1wbGF0ZS5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJHc3RQYWRUZW1wbGF0ZS5kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFRlbXBsYXRlLmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0U3RhdGljUGFkVGVtcGxhdGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZFRlbXBsYXRlLmh0bWwjR3N0U3RhdGljUGFkVGVtcGxhdGUiPgorPEFOQ0hPUiBpZD0iR1NULVNUQVRJQy1QQUQtVEVNUExBVEU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkVGVtcGxhdGUuaHRtbCNHU1QtU1RBVElDLVBBRC1URU1QTEFURTpDQVBTIj4KKzxBTkNIT1IgaWQ9ImdzdC1zdGF0aWMtcGFkLXRlbXBsYXRlLWdldCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkVGVtcGxhdGUuaHRtbCNnc3Qtc3RhdGljLXBhZC10ZW1wbGF0ZS1nZXQiPgorPEFOQ0hPUiBpZD0iZ3N0LXN0YXRpYy1wYWQtdGVtcGxhdGUtZ2V0LWNhcHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZFRlbXBsYXRlLmh0bWwjZ3N0LXN0YXRpYy1wYWQtdGVtcGxhdGUtZ2V0LWNhcHMiPgorPEFOQ0hPUiBpZD0iR3N0UGFkVGVtcGxhdGUtc3RydWN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFRlbXBsYXRlLXN0cnVjdCI+Cis8QU5DSE9SIGlkPSJHc3RQYWRUZW1wbGF0ZUZsYWdzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFRlbXBsYXRlRmxhZ3MiPgorPEFOQ0hPUiBpZD0iR1NULVBBRC1URU1QTEFURS1GTEFHLUxBU1Q6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkVGVtcGxhdGUuaHRtbCNHU1QtUEFELVRFTVBMQVRFLUZMQUctTEFTVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdzdFBhZFByZXNlbmNlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFByZXNlbmNlIj4KKzxBTkNIT1IgaWQ9IkdTVC1QQUQtQUxXQVlTOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZFRlbXBsYXRlLmh0bWwjR1NULVBBRC1BTFdBWVM6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUEFELVNPTUVUSU1FUzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1QQUQtU09NRVRJTUVTOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVBBRC1SRVFVRVNUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZFRlbXBsYXRlLmh0bWwjR1NULVBBRC1SRVFVRVNUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVBBRC1URU1QTEFURS1OQU1FLVRFTVBMQVRFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZFRlbXBsYXRlLmh0bWwjR1NULVBBRC1URU1QTEFURS1OQU1FLVRFTVBMQVRFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVBBRC1URU1QTEFURS1ESVJFQ1RJT046Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkVGVtcGxhdGUuaHRtbCNHU1QtUEFELVRFTVBMQVRFLURJUkVDVElPTjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1QQUQtVEVNUExBVEUtUFJFU0VOQ0U6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkVGVtcGxhdGUuaHRtbCNHU1QtUEFELVRFTVBMQVRFLVBSRVNFTkNFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVBBRC1URU1QTEFURS1DQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1QQUQtVEVNUExBVEUtQ0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUEFELVRFTVBMQVRFLUlTLUZJWEVEOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZFRlbXBsYXRlLmh0bWwjR1NULVBBRC1URU1QTEFURS1JUy1GSVhFRDpDQVBTIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtdGVtcGxhdGUtbmV3IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWRUZW1wbGF0ZS5odG1sI2dzdC1wYWQtdGVtcGxhdGUtbmV3Ij4KKzxBTkNIT1IgaWQ9ImdzdC1wYWQtdGVtcGxhdGUtZ2V0LWNhcHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZFRlbXBsYXRlLmh0bWwjZ3N0LXBhZC10ZW1wbGF0ZS1nZXQtY2FwcyI+Cis8QU5DSE9SIGlkPSJHc3RQYWRUZW1wbGF0ZS5wcm9wZXJ0eS1kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFRlbXBsYXRlLnByb3BlcnR5LWRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0UGFkVGVtcGxhdGUtLWNhcHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkVGVtcGxhdGUtLWNhcHMiPgorPEFOQ0hPUiBpZD0iR3N0UGFkVGVtcGxhdGUtLWRpcmVjdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RQYWRUZW1wbGF0ZS0tZGlyZWN0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdFBhZFRlbXBsYXRlLS1uYW1lLXRlbXBsYXRlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFRlbXBsYXRlLS1uYW1lLXRlbXBsYXRlIj4KKzxBTkNIT1IgaWQ9IkdzdFBhZFRlbXBsYXRlLS1wcmVzZW5jZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RQYWRUZW1wbGF0ZS0tcHJlc2VuY2UiPgorPEFOQ0hPUiBpZD0iR3N0UGFkVGVtcGxhdGUuc2lnbmFsLWRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkVGVtcGxhdGUuc2lnbmFsLWRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0UGFkVGVtcGxhdGUtcGFkLWNyZWF0ZWQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkVGVtcGxhdGUtcGFkLWNyZWF0ZWQiPgorPEFOQ0hPUiBpZD0iR3N0UGFkVGVtcGxhdGUuc2VlLWFsc28iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkVGVtcGxhdGUuc2VlLWFsc28iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCNnc3RyZWFtZXItR3N0UGFyYW1TcGVjLnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCNnc3RyZWFtZXItR3N0UGFyYW1TcGVjLmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sI2dzdHJlYW1lci1Hc3RQYXJhbVNwZWMuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHU1QtUEFSQU0tQ09OVFJPTExBQkxFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCNHU1QtUEFSQU0tQ09OVFJPTExBQkxFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVBBUkFNLVVTRVItU0hJRlQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sI0dTVC1QQVJBTS1VU0VSLVNISUZUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVBBUkFNLU1VVEFCTEUtUEFVU0VEOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCNHU1QtUEFSQU0tTVVUQUJMRS1QQVVTRUQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUEFSQU0tTVVUQUJMRS1QTEFZSU5HOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCNHU1QtUEFSQU0tTVVUQUJMRS1QTEFZSU5HOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVBBUkFNLU1VVEFCTEUtUkVBRFk6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sI0dTVC1QQVJBTS1NVVRBQkxFLVJFQURZOkNBUFMiPgorPEFOQ0hPUiBpZD0iR3N0UGFyYW1TcGVjRnJhY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCNHc3RQYXJhbVNwZWNGcmFjdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3QtcGFyYW0tc3BlYy1mcmFjdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sI2dzdC1wYXJhbS1zcGVjLWZyYWN0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RQYXJzZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdFBhcnNlLnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3RyZWFtZXItR3N0UGFyc2Uuc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdFBhcnNlLmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3RyZWFtZXItR3N0UGFyc2UuZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdFBhcnNlLmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdHJlYW1lci1Hc3RQYXJzZS5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYXJzZS1lcnJvci1xdWFyayIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWVycm9yLXF1YXJrIj4KKzxBTkNIT1IgaWQ9IkdTVC1QQVJTRS1FUlJPUjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHU1QtUEFSU0UtRVJST1I6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHc3RQYXJzZUVycm9yIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHc3RQYXJzZUVycm9yIj4KKzxBTkNIT1IgaWQ9IkdTVC1QQVJTRS1FUlJPUi1TWU5UQVg6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR1NULVBBUlNFLUVSUk9SLVNZTlRBWDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1QQVJTRS1FUlJPUi1OTy1TVUNILUVMRU1FTlQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR1NULVBBUlNFLUVSUk9SLU5PLVNVQ0gtRUxFTUVOVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1QQVJTRS1FUlJPUi1OTy1TVUNILVBST1BFUlRZOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dTVC1QQVJTRS1FUlJPUi1OTy1TVUNILVBST1BFUlRZOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVBBUlNFLUVSUk9SLUxJTks6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR1NULVBBUlNFLUVSUk9SLUxJTks6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUEFSU0UtRVJST1ItQ09VTEQtTk9ULVNFVC1QUk9QRVJUWTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHU1QtUEFSU0UtRVJST1ItQ09VTEQtTk9ULVNFVC1QUk9QRVJUWTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1QQVJTRS1FUlJPUi1FTVBUWS1CSU46Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR1NULVBBUlNFLUVSUk9SLUVNUFRZLUJJTjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1QQVJTRS1FUlJPUi1FTVBUWTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHU1QtUEFSU0UtRVJST1ItRU1QVFk6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHc3RQYXJzZUNvbnRleHQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dzdFBhcnNlQ29udGV4dCI+Cis8QU5DSE9SIGlkPSJHc3RQYXJzZUZsYWdzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHc3RQYXJzZUZsYWdzIj4KKzxBTkNIT1IgaWQ9IkdTVC1QQVJTRS1GTEFHLU5PTkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR1NULVBBUlNFLUZMQUctTk9ORTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1QQVJTRS1GTEFHLUZBVEFMLUVSUk9SUzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHU1QtUEFSU0UtRkxBRy1GQVRBTC1FUlJPUlM6Q0FQUyI+Cis8QU5DSE9SIGlkPSJnc3QtcGFyc2UtbGF1bmNoIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtbGF1bmNoIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYXJzZS1sYXVuY2gtZnVsbCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWxhdW5jaC1mdWxsIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYXJzZS1sYXVuY2h2IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtbGF1bmNodiI+Cis8QU5DSE9SIGlkPSJnc3QtcGFyc2UtbGF1bmNodi1mdWxsIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtbGF1bmNodi1mdWxsIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYXJzZS1iaW4tZnJvbS1kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWJpbi1mcm9tLWRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYXJzZS1iaW4tZnJvbS1kZXNjcmlwdGlvbi1mdWxsIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtYmluLWZyb20tZGVzY3JpcHRpb24tZnVsbCI+Cis8QU5DSE9SIGlkPSJnc3QtcGFyc2UtY29udGV4dC1uZXciIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1jb250ZXh0LW5ldyI+Cis8QU5DSE9SIGlkPSJnc3QtcGFyc2UtY29udGV4dC1mcmVlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtY29udGV4dC1mcmVlIj4KKzxBTkNIT1IgaWQ9ImdzdC1wYXJzZS1jb250ZXh0LWdldC1taXNzaW5nLWVsZW1lbnRzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtY29udGV4dC1nZXQtbWlzc2luZy1lbGVtZW50cyI+Cis8QU5DSE9SIGlkPSJHc3RQaXBlbGluZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGlwZWxpbmUuaHRtbCI+Cis8QU5DSE9SIGlkPSJHc3RQaXBlbGluZS5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGlwZWxpbmUuaHRtbCNHc3RQaXBlbGluZS5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJHc3RQaXBlbGluZS5vYmplY3QtaGllcmFyY2h5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQaXBlbGluZS5odG1sI0dzdFBpcGVsaW5lLm9iamVjdC1oaWVyYXJjaHkiPgorPEFOQ0hPUiBpZD0iR3N0UGlwZWxpbmUuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGlwZWxpbmUuaHRtbCNHc3RQaXBlbGluZS5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIj4KKzxBTkNIT1IgaWQ9IkdzdFBpcGVsaW5lLnByb3BlcnRpZXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBpcGVsaW5lLmh0bWwjR3N0UGlwZWxpbmUucHJvcGVydGllcyI+Cis8QU5DSE9SIGlkPSJHc3RQaXBlbGluZS5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGlwZWxpbmUuaHRtbCNHc3RQaXBlbGluZS5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJHc3RQaXBlbGluZS5kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQaXBlbGluZS5odG1sI0dzdFBpcGVsaW5lLmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0UGlwZWxpbmUtc3RydWN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQaXBlbGluZS5odG1sI0dzdFBpcGVsaW5lLXN0cnVjdCI+Cis8QU5DSE9SIGlkPSJHc3RQaXBlbGluZUZsYWdzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQaXBlbGluZS5odG1sI0dzdFBpcGVsaW5lRmxhZ3MiPgorPEFOQ0hPUiBpZD0iR1NULVBJUEVMSU5FLUZMQUctRklYRUQtQ0xPQ0s6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGlwZWxpbmUuaHRtbCNHU1QtUElQRUxJTkUtRkxBRy1GSVhFRC1DTE9DSzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1QSVBFTElORS1GTEFHLUxBU1Q6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGlwZWxpbmUuaHRtbCNHU1QtUElQRUxJTkUtRkxBRy1MQVNUOkNBUFMiPgorPEFOQ0hPUiBpZD0iZ3N0LXBpcGVsaW5lLW5ldyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtbmV3Ij4KKzxBTkNIT1IgaWQ9ImdzdC1waXBlbGluZS1nZXQtYnVzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1nZXQtYnVzIj4KKzxBTkNIT1IgaWQ9ImdzdC1waXBlbGluZS1zZXQtY2xvY2siIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLXNldC1jbG9jayI+Cis8QU5DSE9SIGlkPSJnc3QtcGlwZWxpbmUtZ2V0LWNsb2NrIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1nZXQtY2xvY2siPgorPEFOQ0hPUiBpZD0iZ3N0LXBpcGVsaW5lLXVzZS1jbG9jayIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtdXNlLWNsb2NrIj4KKzxBTkNIT1IgaWQ9ImdzdC1waXBlbGluZS1hdXRvLWNsb2NrIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1hdXRvLWNsb2NrIj4KKzxBTkNIT1IgaWQ9ImdzdC1waXBlbGluZS1zZXQtYXV0by1mbHVzaC1idXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLXNldC1hdXRvLWZsdXNoLWJ1cyI+Cis8QU5DSE9SIGlkPSJnc3QtcGlwZWxpbmUtZ2V0LWF1dG8tZmx1c2gtYnVzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1nZXQtYXV0by1mbHVzaC1idXMiPgorPEFOQ0hPUiBpZD0iZ3N0LXBpcGVsaW5lLXNldC1kZWxheSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtc2V0LWRlbGF5Ij4KKzxBTkNIT1IgaWQ9ImdzdC1waXBlbGluZS1nZXQtZGVsYXkiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLWdldC1kZWxheSI+Cis8QU5DSE9SIGlkPSJHc3RQaXBlbGluZS5wcm9wZXJ0eS1kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQaXBlbGluZS5odG1sI0dzdFBpcGVsaW5lLnByb3BlcnR5LWRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0UGlwZWxpbmUtLWF1dG8tZmx1c2gtYnVzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQaXBlbGluZS5odG1sI0dzdFBpcGVsaW5lLS1hdXRvLWZsdXNoLWJ1cyI+Cis8QU5DSE9SIGlkPSJHc3RQaXBlbGluZS0tZGVsYXkiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBpcGVsaW5lLmh0bWwjR3N0UGlwZWxpbmUtLWRlbGF5Ij4KKzxBTkNIT1IgaWQ9IkdzdFBpcGVsaW5lLnNlZS1hbHNvIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQaXBlbGluZS5odG1sI0dzdFBpcGVsaW5lLnNlZS1hbHNvIj4KKzxBTkNIT1IgaWQ9IkdzdFBsdWdpbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGx1Z2luLmh0bWwiPgorPEFOQ0hPUiBpZD0iR3N0UGx1Z2luLnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW4uc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iR3N0UGx1Z2luLm9iamVjdC1oaWVyYXJjaHkiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBsdWdpbi5odG1sI0dzdFBsdWdpbi5vYmplY3QtaGllcmFyY2h5Ij4KKzxBTkNIT1IgaWQ9IkdzdFBsdWdpbi5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGx1Z2luLmh0bWwjR3N0UGx1Z2luLmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdFBsdWdpbi5kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW4uZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJnc3QtcGx1Z2luLWVycm9yLXF1YXJrIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWVycm9yLXF1YXJrIj4KKzxBTkNIT1IgaWQ9IkdTVC1QTFVHSU4tRVJST1I6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGx1Z2luLmh0bWwjR1NULVBMVUdJTi1FUlJPUjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdzdFBsdWdpbkVycm9yIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5FcnJvciI+Cis8QU5DSE9SIGlkPSJHU1QtUExVR0lOLUVSUk9SLU1PRFVMRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW4uaHRtbCNHU1QtUExVR0lOLUVSUk9SLU1PRFVMRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1QTFVHSU4tRVJST1ItREVQRU5ERU5DSUVTOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBsdWdpbi5odG1sI0dTVC1QTFVHSU4tRVJST1ItREVQRU5ERU5DSUVTOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVBMVUdJTi1FUlJPUi1OQU1FLU1JU01BVENIOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBsdWdpbi5odG1sI0dTVC1QTFVHSU4tRVJST1ItTkFNRS1NSVNNQVRDSDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdzdFBsdWdpbi1zdHJ1Y3QiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBsdWdpbi5odG1sI0dzdFBsdWdpbi1zdHJ1Y3QiPgorPEFOQ0hPUiBpZD0iR3N0UGx1Z2luRGVzYyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGx1Z2luLmh0bWwjR3N0UGx1Z2luRGVzYyI+Cis8QU5DSE9SIGlkPSJHc3RQbHVnaW5Jbml0RnVuYyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGx1Z2luLmh0bWwjR3N0UGx1Z2luSW5pdEZ1bmMiPgorPEFOQ0hPUiBpZD0iR3N0UGx1Z2luSW5pdEZ1bGxGdW5jIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5Jbml0RnVsbEZ1bmMiPgorPEFOQ0hPUiBpZD0iR1NULVBMVUdJTi1ERUZJTkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGx1Z2luLmh0bWwjR1NULVBMVUdJTi1ERUZJTkU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtTElDRU5TRS1VTktOT1dOOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBsdWdpbi5odG1sI0dTVC1MSUNFTlNFLVVOS05PV046Q0FQUyI+Cis8QU5DSE9SIGlkPSJHc3RQbHVnaW5GaWx0ZXIiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkZpbHRlciI+Cis8QU5DSE9SIGlkPSJnc3QtcGx1Z2luLWdldC1uYW1lIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWdldC1uYW1lIj4KKzxBTkNIT1IgaWQ9ImdzdC1wbHVnaW4tZ2V0LWRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWdldC1kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3QtcGx1Z2luLWdldC1maWxlbmFtZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1nZXQtZmlsZW5hbWUiPgorPEFOQ0hPUiBpZD0iZ3N0LXBsdWdpbi1nZXQtbGljZW5zZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1nZXQtbGljZW5zZSI+Cis8QU5DSE9SIGlkPSJnc3QtcGx1Z2luLWdldC1wYWNrYWdlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWdldC1wYWNrYWdlIj4KKzxBTkNIT1IgaWQ9ImdzdC1wbHVnaW4tZ2V0LW9yaWdpbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1nZXQtb3JpZ2luIj4KKzxBTkNIT1IgaWQ9ImdzdC1wbHVnaW4tZ2V0LXNvdXJjZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1nZXQtc291cmNlIj4KKzxBTkNIT1IgaWQ9ImdzdC1wbHVnaW4tZ2V0LXZlcnNpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tZ2V0LXZlcnNpb24iPgorPEFOQ0hPUiBpZD0iZ3N0LXBsdWdpbi1nZXQtbW9kdWxlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWdldC1tb2R1bGUiPgorPEFOQ0hPUiBpZD0iZ3N0LXBsdWdpbi1pcy1sb2FkZWQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4taXMtbG9hZGVkIj4KKzxBTkNIT1IgaWQ9ImdzdC1wbHVnaW4tZ2V0LWNhY2hlLWRhdGEiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tZ2V0LWNhY2hlLWRhdGEiPgorPEFOQ0hPUiBpZD0iZ3N0LXBsdWdpbi1zZXQtY2FjaGUtZGF0YSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1zZXQtY2FjaGUtZGF0YSI+Cis8QU5DSE9SIGlkPSJnc3QtcGx1Z2luLW5hbWUtZmlsdGVyIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLW5hbWUtZmlsdGVyIj4KKzxBTkNIT1IgaWQ9ImdzdC1wbHVnaW4tbG9hZC1maWxlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWxvYWQtZmlsZSI+Cis8QU5DSE9SIGlkPSJnc3QtcGx1Z2luLWxvYWQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tbG9hZCI+Cis8QU5DSE9SIGlkPSJnc3QtcGx1Z2luLWxvYWQtYnktbmFtZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1sb2FkLWJ5LW5hbWUiPgorPEFOQ0hPUiBpZD0iZ3N0LXBsdWdpbi1saXN0LWZyZWUiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tbGlzdC1mcmVlIj4KKzxBTkNIT1IgaWQ9ImdzdC1wbHVnaW4tcmVnaXN0ZXItc3RhdGljIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLXJlZ2lzdGVyLXN0YXRpYyI+Cis8QU5DSE9SIGlkPSJnc3QtcGx1Z2luLXJlZ2lzdGVyLXN0YXRpYy1mdWxsIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLXJlZ2lzdGVyLXN0YXRpYy1mdWxsIj4KKzxBTkNIT1IgaWQ9IkdzdFBsdWdpbkZsYWdzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5GbGFncyI+Cis8QU5DSE9SIGlkPSJHU1QtUExVR0lOLUZMQUctQ0FDSEVEOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBsdWdpbi5odG1sI0dTVC1QTFVHSU4tRkxBRy1DQUNIRUQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUExVR0lOLUZMQUctQkxBQ0tMSVNURUQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGx1Z2luLmh0bWwjR1NULVBMVUdJTi1GTEFHLUJMQUNLTElTVEVEOkNBUFMiPgorPEFOQ0hPUiBpZD0iR3N0UGx1Z2luRGVwZW5kZW5jeUZsYWdzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3MiPgorPEFOQ0hPUiBpZD0iR1NULVBMVUdJTi1ERVBFTkRFTkNZLUZMQUctTk9ORTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW4uaHRtbCNHU1QtUExVR0lOLURFUEVOREVOQ1ktRkxBRy1OT05FOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVBMVUdJTi1ERVBFTkRFTkNZLUZMQUctUkVDVVJTRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW4uaHRtbCNHU1QtUExVR0lOLURFUEVOREVOQ1ktRkxBRy1SRUNVUlNFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVBMVUdJTi1ERVBFTkRFTkNZLUZMQUctUEFUSFMtQVJFLURFRkFVTFQtT05MWTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW4uaHRtbCNHU1QtUExVR0lOLURFUEVOREVOQ1ktRkxBRy1QQVRIUy1BUkUtREVGQVVMVC1PTkxZOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVBMVUdJTi1ERVBFTkRFTkNZLUZMQUctRklMRS1OQU1FLUlTLVNVRkZJWDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW4uaHRtbCNHU1QtUExVR0lOLURFUEVOREVOQ1ktRkxBRy1GSUxFLU5BTUUtSVMtU1VGRklYOkNBUFMiPgorPEFOQ0hPUiBpZD0iZ3N0LXBsdWdpbi1hZGQtZGVwZW5kZW5jeSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1hZGQtZGVwZW5kZW5jeSI+Cis8QU5DSE9SIGlkPSJnc3QtcGx1Z2luLWFkZC1kZXBlbmRlbmN5LXNpbXBsZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1hZGQtZGVwZW5kZW5jeS1zaW1wbGUiPgorPEFOQ0hPUiBpZD0iR3N0UGx1Z2luLnNlZS1hbHNvIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW4uc2VlLWFsc28iPgorPEFOQ0hPUiBpZD0iR3N0UGx1Z2luRmVhdHVyZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGx1Z2luRmVhdHVyZS5odG1sIj4KKzxBTkNIT1IgaWQ9IkdzdFBsdWdpbkZlYXR1cmUuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBsdWdpbkZlYXR1cmUuaHRtbCNHc3RQbHVnaW5GZWF0dXJlLnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9IkdzdFBsdWdpbkZlYXR1cmUub2JqZWN0LWhpZXJhcmNoeSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGx1Z2luRmVhdHVyZS5odG1sI0dzdFBsdWdpbkZlYXR1cmUub2JqZWN0LWhpZXJhcmNoeSI+Cis8QU5DSE9SIGlkPSJHc3RQbHVnaW5GZWF0dXJlLmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW5GZWF0dXJlLmh0bWwjR3N0UGx1Z2luRmVhdHVyZS5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJHc3RQbHVnaW5GZWF0dXJlLmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBsdWdpbkZlYXR1cmUuaHRtbCNHc3RQbHVnaW5GZWF0dXJlLmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0UGx1Z2luRmVhdHVyZS1zdHJ1Y3QiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBsdWdpbkZlYXR1cmUuaHRtbCNHc3RQbHVnaW5GZWF0dXJlLXN0cnVjdCI+Cis8QU5DSE9SIGlkPSJHc3RUeXBlTmFtZURhdGEiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBsdWdpbkZlYXR1cmUuaHRtbCNHc3RUeXBlTmFtZURhdGEiPgorPEFOQ0hPUiBpZD0iR3N0UGx1Z2luRmVhdHVyZUZpbHRlciIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGx1Z2luRmVhdHVyZS5odG1sI0dzdFBsdWdpbkZlYXR1cmVGaWx0ZXIiPgorPEFOQ0hPUiBpZD0iR3N0UmFuayIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGx1Z2luRmVhdHVyZS5odG1sI0dzdFJhbmsiPgorPEFOQ0hPUiBpZD0iR1NULVJBTkstTk9ORTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW5GZWF0dXJlLmh0bWwjR1NULVJBTkstTk9ORTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1SQU5LLU1BUkdJTkFMOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBsdWdpbkZlYXR1cmUuaHRtbCNHU1QtUkFOSy1NQVJHSU5BTDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1SQU5LLVNFQ09OREFSWTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW5GZWF0dXJlLmh0bWwjR1NULVJBTkstU0VDT05EQVJZOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVJBTkstUFJJTUFSWTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW5GZWF0dXJlLmh0bWwjR1NULVJBTkstUFJJTUFSWTpDQVBTIj4KKzxBTkNIT1IgaWQ9ImdzdC1wbHVnaW4tZmVhdHVyZS10eXBlLW5hbWUtZmlsdGVyIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLXR5cGUtbmFtZS1maWx0ZXIiPgorPEFOQ0hPUiBpZD0iZ3N0LXBsdWdpbi1mZWF0dXJlLXNldC1yYW5rIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLXNldC1yYW5rIj4KKzxBTkNIT1IgaWQ9ImdzdC1wbHVnaW4tZmVhdHVyZS1zZXQtbmFtZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGx1Z2luRmVhdHVyZS5odG1sI2dzdC1wbHVnaW4tZmVhdHVyZS1zZXQtbmFtZSI+Cis8QU5DSE9SIGlkPSJnc3QtcGx1Z2luLWZlYXR1cmUtZ2V0LXJhbmsiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtZ2V0LXJhbmsiPgorPEFOQ0hPUiBpZD0iZ3N0LXBsdWdpbi1mZWF0dXJlLWdldC1uYW1lIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLWdldC1uYW1lIj4KKzxBTkNIT1IgaWQ9ImdzdC1wbHVnaW4tZmVhdHVyZS1sb2FkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLWxvYWQiPgorPEFOQ0hPUiBpZD0iZ3N0LXBsdWdpbi1mZWF0dXJlLWxpc3QtY29weSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGx1Z2luRmVhdHVyZS5odG1sI2dzdC1wbHVnaW4tZmVhdHVyZS1saXN0LWNvcHkiPgorPEFOQ0hPUiBpZD0iZ3N0LXBsdWdpbi1mZWF0dXJlLWxpc3QtZnJlZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGx1Z2luRmVhdHVyZS5odG1sI2dzdC1wbHVnaW4tZmVhdHVyZS1saXN0LWZyZWUiPgorPEFOQ0hPUiBpZD0iR1NULVBMVUdJTi1GRUFUVVJFLUxJU1QtREVCVUc6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGx1Z2luRmVhdHVyZS5odG1sI0dTVC1QTFVHSU4tRkVBVFVSRS1MSVNULURFQlVHOkNBUFMiPgorPEFOQ0hPUiBpZD0iZ3N0LXBsdWdpbi1mZWF0dXJlLWNoZWNrLXZlcnNpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtY2hlY2stdmVyc2lvbiI+Cis8QU5DSE9SIGlkPSJnc3QtcGx1Z2luLWZlYXR1cmUtcmFuay1jb21wYXJlLWZ1bmMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtcmFuay1jb21wYXJlLWZ1bmMiPgorPEFOQ0hPUiBpZD0iR3N0UGx1Z2luRmVhdHVyZS5zZWUtYWxzbyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UGx1Z2luRmVhdHVyZS5odG1sI0dzdFBsdWdpbkZlYXR1cmUuc2VlLWFsc28iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdFBvbGwiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RQb2xsLmh0bWwiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdFBvbGwuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0cmVhbWVyLUdzdFBvbGwuc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdFBvbGwuZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0cmVhbWVyLUdzdFBvbGwuZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdFBvbGwuZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3RyZWFtZXItR3N0UG9sbC5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdFBvbGwiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCI+Cis8QU5DSE9SIGlkPSJHc3RQb2xsRkQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbEZEIj4KKzxBTkNIT1IgaWQ9IkdTVC1QT0xMLUZELUlOSVQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHU1QtUE9MTC1GRC1JTklUOkNBUFMiPgorPEFOQ0hPUiBpZD0iZ3N0LXBvbGwtYWRkLWZkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWFkZC1mZCI+Cis8QU5DSE9SIGlkPSJnc3QtcG9sbC1mZC1jYW4tcmVhZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1mZC1jYW4tcmVhZCI+Cis8QU5DSE9SIGlkPSJnc3QtcG9sbC1mZC1jYW4td3JpdGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtY2FuLXdyaXRlIj4KKzxBTkNIT1IgaWQ9ImdzdC1wb2xsLWZkLWN0bC1yZWFkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWZkLWN0bC1yZWFkIj4KKzxBTkNIT1IgaWQ9ImdzdC1wb2xsLWZkLWN0bC13cml0ZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1mZC1jdGwtd3JpdGUiPgorPEFOQ0hPUiBpZD0iZ3N0LXBvbGwtZmQtaGFzLWNsb3NlZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1mZC1oYXMtY2xvc2VkIj4KKzxBTkNIT1IgaWQ9ImdzdC1wb2xsLWZkLWhhcy1lcnJvciIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1mZC1oYXMtZXJyb3IiPgorPEFOQ0hPUiBpZD0iZ3N0LXBvbGwtZmQtaWdub3JlZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1mZC1pZ25vcmVkIj4KKzxBTkNIT1IgaWQ9ImdzdC1wb2xsLWZkLWluaXQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtaW5pdCI+Cis8QU5DSE9SIGlkPSJnc3QtcG9sbC1mcmVlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWZyZWUiPgorPEFOQ0hPUiBpZD0iZ3N0LXBvbGwtbmV3IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLW5ldyI+Cis8QU5DSE9SIGlkPSJnc3QtcG9sbC1uZXctdGltZXIiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtbmV3LXRpbWVyIj4KKzxBTkNIT1IgaWQ9ImdzdC1wb2xsLWdldC1yZWFkLWdwb2xsZmQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZ2V0LXJlYWQtZ3BvbGxmZCI+Cis8QU5DSE9SIGlkPSJnc3QtcG9sbC1yZW1vdmUtZmQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtcmVtb3ZlLWZkIj4KKzxBTkNIT1IgaWQ9ImdzdC1wb2xsLXJlc3RhcnQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtcmVzdGFydCI+Cis8QU5DSE9SIGlkPSJnc3QtcG9sbC1zZXQtY29udHJvbGxhYmxlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXNldC1jb250cm9sbGFibGUiPgorPEFOQ0hPUiBpZD0iZ3N0LXBvbGwtc2V0LWZsdXNoaW5nIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXNldC1mbHVzaGluZyI+Cis8QU5DSE9SIGlkPSJnc3QtcG9sbC13YWl0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXdhaXQiPgorPEFOQ0hPUiBpZD0iZ3N0LXBvbGwtcmVhZC1jb250cm9sIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXJlYWQtY29udHJvbCI+Cis8QU5DSE9SIGlkPSJnc3QtcG9sbC13cml0ZS1jb250cm9sIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXdyaXRlLWNvbnRyb2wiPgorPEFOQ0hPUiBpZD0iR3N0UHJlc2V0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQcmVzZXQuaHRtbCI+Cis8QU5DSE9SIGlkPSJHc3RQcmVzZXQuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFByZXNldC5odG1sI0dzdFByZXNldC5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJHc3RQcmVzZXQub2JqZWN0LWhpZXJhcmNoeSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UHJlc2V0Lmh0bWwjR3N0UHJlc2V0Lm9iamVjdC1oaWVyYXJjaHkiPgorPEFOQ0hPUiBpZD0iR3N0UHJlc2V0LmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQcmVzZXQuaHRtbCNHc3RQcmVzZXQuZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iR3N0UHJlc2V0LmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFByZXNldC5odG1sI0dzdFByZXNldC5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdFByZXNldC1zdHJ1Y3QiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFByZXNldC5odG1sI0dzdFByZXNldC1zdHJ1Y3QiPgorPEFOQ0hPUiBpZD0iR3N0UHJlc2V0SW50ZXJmYWNlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQcmVzZXQuaHRtbCNHc3RQcmVzZXRJbnRlcmZhY2UiPgorPEFOQ0hPUiBpZD0iZ3N0LXByZXNldC1nZXQtcHJlc2V0LW5hbWVzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQcmVzZXQuaHRtbCNnc3QtcHJlc2V0LWdldC1wcmVzZXQtbmFtZXMiPgorPEFOQ0hPUiBpZD0iZ3N0LXByZXNldC1nZXQtcHJvcGVydHktbmFtZXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFByZXNldC5odG1sI2dzdC1wcmVzZXQtZ2V0LXByb3BlcnR5LW5hbWVzIj4KKzxBTkNIT1IgaWQ9ImdzdC1wcmVzZXQtbG9hZC1wcmVzZXQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFByZXNldC5odG1sI2dzdC1wcmVzZXQtbG9hZC1wcmVzZXQiPgorPEFOQ0hPUiBpZD0iZ3N0LXByZXNldC1zYXZlLXByZXNldCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UHJlc2V0Lmh0bWwjZ3N0LXByZXNldC1zYXZlLXByZXNldCI+Cis8QU5DSE9SIGlkPSJnc3QtcHJlc2V0LXJlbmFtZS1wcmVzZXQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFByZXNldC5odG1sI2dzdC1wcmVzZXQtcmVuYW1lLXByZXNldCI+Cis8QU5DSE9SIGlkPSJnc3QtcHJlc2V0LWRlbGV0ZS1wcmVzZXQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFByZXNldC5odG1sI2dzdC1wcmVzZXQtZGVsZXRlLXByZXNldCI+Cis8QU5DSE9SIGlkPSJnc3QtcHJlc2V0LXNldC1tZXRhIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RQcmVzZXQuaHRtbCNnc3QtcHJlc2V0LXNldC1tZXRhIj4KKzxBTkNIT1IgaWQ9ImdzdC1wcmVzZXQtZ2V0LW1ldGEiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFByZXNldC5odG1sI2dzdC1wcmVzZXQtZ2V0LW1ldGEiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdFF1ZXJ5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0UXVlcnkuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdHJlYW1lci1Hc3RRdWVyeS5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0UXVlcnkuZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdHJlYW1lci1Hc3RRdWVyeS5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0UXVlcnkuZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0cmVhbWVyLUdzdFF1ZXJ5LmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0UXVlcnkiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5Ij4KKzxBTkNIT1IgaWQ9IkdzdFF1ZXJ5VHlwZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnlUeXBlIj4KKzxBTkNIT1IgaWQ9IkdTVC1RVUVSWS1OT05FOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1OT05FOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVFVRVJZLVBPU0lUSU9OOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1QT1NJVElPTjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1RVUVSWS1EVVJBVElPTjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHU1QtUVVFUlktRFVSQVRJT046Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUVVFUlktTEFURU5DWTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHU1QtUVVFUlktTEFURU5DWTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1RVUVSWS1KSVRURVI6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR1NULVFVRVJZLUpJVFRFUjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1RVUVSWS1SQVRFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1SQVRFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVFVRVJZLVNFRUtJTkc6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR1NULVFVRVJZLVNFRUtJTkc6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUVVFUlktU0VHTUVOVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHU1QtUVVFUlktU0VHTUVOVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1RVUVSWS1DT05WRVJUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1DT05WRVJUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVFVRVJZLUZPUk1BVFM6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR1NULVFVRVJZLUZPUk1BVFM6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUVVFUlktQlVGRkVSSU5HOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1CVUZGRVJJTkc6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUVVFUlktQ1VTVE9NOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1DVVNUT006Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUVVFUlktVVJJOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1VUkk6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUVVFUlktQUxMT0NBVElPTjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHU1QtUVVFUlktQUxMT0NBVElPTjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1RVUVSWS1TQ0hFRFVMSU5HOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1TQ0hFRFVMSU5HOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVFVRVJZLVRZUEUtTkFNRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHU1QtUVVFUlktVFlQRS1OQU1FOkNBUFMiPgorPEFOQ0hPUiBpZD0iR3N0UXVlcnlUeXBlRGVmaW5pdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnlUeXBlRGVmaW5pdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3QtcXVlcnktdHlwZS1nZXQtbmFtZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXR5cGUtZ2V0LW5hbWUiPgorPEFOQ0hPUiBpZD0iZ3N0LXF1ZXJ5LXR5cGUtdG8tcXVhcmsiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS10eXBlLXRvLXF1YXJrIj4KKzxBTkNIT1IgaWQ9ImdzdC1xdWVyeS10eXBlLXJlZ2lzdGVyIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktdHlwZS1yZWdpc3RlciI+Cis8QU5DSE9SIGlkPSJnc3QtcXVlcnktdHlwZS1nZXQtYnktbmljayIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXR5cGUtZ2V0LWJ5LW5pY2siPgorPEFOQ0hPUiBpZD0iZ3N0LXF1ZXJ5LXR5cGVzLWNvbnRhaW5zIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktdHlwZXMtY29udGFpbnMiPgorPEFOQ0hPUiBpZD0iZ3N0LXF1ZXJ5LXR5cGUtZ2V0LWRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS10eXBlLWdldC1kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9ImdzdC1xdWVyeS10eXBlLWl0ZXJhdGUtZGVmaW5pdGlvbnMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS10eXBlLWl0ZXJhdGUtZGVmaW5pdGlvbnMiPgorPEFOQ0hPUiBpZD0iZ3N0LXF1ZXJ5LXJlZiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXJlZiI+Cis8QU5DSE9SIGlkPSJnc3QtcXVlcnktdW5yZWYiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS11bnJlZiI+Cis8QU5DSE9SIGlkPSJnc3QtcXVlcnktY29weSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWNvcHkiPgorPEFOQ0hPUiBpZD0iZ3N0LXF1ZXJ5LW1ha2Utd3JpdGFibGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1tYWtlLXdyaXRhYmxlIj4KKzxBTkNIT1IgaWQ9ImdzdC1xdWVyeS1pcy13cml0YWJsZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWlzLXdyaXRhYmxlIj4KKzxBTkNIT1IgaWQ9ImdzdC1xdWVyeS1yZXBsYWNlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcmVwbGFjZSI+Cis8QU5DSE9SIGlkPSJnc3QtcXVlcnktd3JpdGFibGUtc3RydWN0dXJlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktd3JpdGFibGUtc3RydWN0dXJlIj4KKzxBTkNIT1IgaWQ9ImdzdC1xdWVyeS1uZXctY3VzdG9tIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbmV3LWN1c3RvbSI+Cis8QU5DSE9SIGlkPSJnc3QtcXVlcnktZ2V0LXN0cnVjdHVyZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWdldC1zdHJ1Y3R1cmUiPgorPEFOQ0hPUiBpZD0iZ3N0LXF1ZXJ5LW5ldy1jb252ZXJ0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbmV3LWNvbnZlcnQiPgorPEFOQ0hPUiBpZD0iZ3N0LXF1ZXJ5LXNldC1jb252ZXJ0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LWNvbnZlcnQiPgorPEFOQ0hPUiBpZD0iZ3N0LXF1ZXJ5LXBhcnNlLWNvbnZlcnQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1jb252ZXJ0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1xdWVyeS1uZXctcG9zaXRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctcG9zaXRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0LXF1ZXJ5LXNldC1wb3NpdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1wb3NpdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3QtcXVlcnktcGFyc2UtcG9zaXRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1wb3NpdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3QtcXVlcnktbmV3LWR1cmF0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbmV3LWR1cmF0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdC1xdWVyeS1zZXQtZHVyYXRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtZHVyYXRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0LXF1ZXJ5LXBhcnNlLWR1cmF0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtZHVyYXRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0LXF1ZXJ5LW5ldy1sYXRlbmN5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbmV3LWxhdGVuY3kiPgorPEFOQ0hPUiBpZD0iZ3N0LXF1ZXJ5LXBhcnNlLWxhdGVuY3kiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1sYXRlbmN5Ij4KKzxBTkNIT1IgaWQ9ImdzdC1xdWVyeS1zZXQtbGF0ZW5jeSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1sYXRlbmN5Ij4KKzxBTkNIT1IgaWQ9ImdzdC1xdWVyeS1uZXctc2Vla2luZyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1zZWVraW5nIj4KKzxBTkNIT1IgaWQ9ImdzdC1xdWVyeS1zZXQtc2Vla2luZyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1zZWVraW5nIj4KKzxBTkNIT1IgaWQ9ImdzdC1xdWVyeS1wYXJzZS1zZWVraW5nIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2Utc2Vla2luZyI+Cis8QU5DSE9SIGlkPSJnc3QtcXVlcnktbmV3LWZvcm1hdHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctZm9ybWF0cyI+Cis8QU5DSE9SIGlkPSJnc3QtcXVlcnktc2V0LWZvcm1hdHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtZm9ybWF0cyI+Cis8QU5DSE9SIGlkPSJnc3QtcXVlcnktc2V0LWZvcm1hdHN2IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LWZvcm1hdHN2Ij4KKzxBTkNIT1IgaWQ9ImdzdC1xdWVyeS1wYXJzZS1uLWZvcm1hdHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1uLWZvcm1hdHMiPgorPEFOQ0hPUiBpZD0iZ3N0LXF1ZXJ5LXBhcnNlLW50aC1mb3JtYXQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1udGgtZm9ybWF0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1xdWVyeS1uZXctc2VnbWVudCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1zZWdtZW50Ij4KKzxBTkNIT1IgaWQ9ImdzdC1xdWVyeS1zZXQtc2VnbWVudCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1zZWdtZW50Ij4KKzxBTkNIT1IgaWQ9ImdzdC1xdWVyeS1wYXJzZS1zZWdtZW50IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2Utc2VnbWVudCI+Cis8QU5DSE9SIGlkPSJHc3RCdWZmZXJpbmdNb2RlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHc3RCdWZmZXJpbmdNb2RlIj4KKzxBTkNIT1IgaWQ9IkdTVC1CVUZGRVJJTkctU1RSRUFNOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dTVC1CVUZGRVJJTkctU1RSRUFNOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUJVRkZFUklORy1ET1dOTE9BRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNHU1QtQlVGRkVSSU5HLURPV05MT0FEOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUJVRkZFUklORy1USU1FU0hJRlQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR1NULUJVRkZFUklORy1USU1FU0hJRlQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQlVGRkVSSU5HLUxJVkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjR1NULUJVRkZFUklORy1MSVZFOkNBUFMiPgorPEFOQ0hPUiBpZD0iZ3N0LXF1ZXJ5LW5ldy1idWZmZXJpbmciIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctYnVmZmVyaW5nIj4KKzxBTkNIT1IgaWQ9ImdzdC1xdWVyeS1zZXQtYnVmZmVyaW5nLXBlcmNlbnQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtYnVmZmVyaW5nLXBlcmNlbnQiPgorPEFOQ0hPUiBpZD0iZ3N0LXF1ZXJ5LXBhcnNlLWJ1ZmZlcmluZy1wZXJjZW50IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtYnVmZmVyaW5nLXBlcmNlbnQiPgorPEFOQ0hPUiBpZD0iZ3N0LXF1ZXJ5LXNldC1idWZmZXJpbmctc3RhdHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtYnVmZmVyaW5nLXN0YXRzIj4KKzxBTkNIT1IgaWQ9ImdzdC1xdWVyeS1wYXJzZS1idWZmZXJpbmctc3RhdHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1idWZmZXJpbmctc3RhdHMiPgorPEFOQ0hPUiBpZD0iZ3N0LXF1ZXJ5LXNldC1idWZmZXJpbmctcmFuZ2UiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtYnVmZmVyaW5nLXJhbmdlIj4KKzxBTkNIT1IgaWQ9ImdzdC1xdWVyeS1wYXJzZS1idWZmZXJpbmctcmFuZ2UiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1idWZmZXJpbmctcmFuZ2UiPgorPEFOQ0hPUiBpZD0iZ3N0LXF1ZXJ5LWFkZC1idWZmZXJpbmctcmFuZ2UiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1hZGQtYnVmZmVyaW5nLXJhbmdlIj4KKzxBTkNIT1IgaWQ9ImdzdC1xdWVyeS1nZXQtbi1idWZmZXJpbmctcmFuZ2VzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktZ2V0LW4tYnVmZmVyaW5nLXJhbmdlcyI+Cis8QU5DSE9SIGlkPSJnc3QtcXVlcnktcGFyc2UtbnRoLWJ1ZmZlcmluZy1yYW5nZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLW50aC1idWZmZXJpbmctcmFuZ2UiPgorPEFOQ0hPUiBpZD0iZ3N0LXF1ZXJ5LW5ldy11cmkiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctdXJpIj4KKzxBTkNIT1IgaWQ9ImdzdC1xdWVyeS1wYXJzZS11cmkiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS11cmkiPgorPEFOQ0hPUiBpZD0iZ3N0LXF1ZXJ5LXNldC11cmkiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtdXJpIj4KKzxBTkNIT1IgaWQ9ImdzdC1xdWVyeS1uZXctYWxsb2NhdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1hbGxvY2F0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdC1xdWVyeS1wYXJzZS1hbGxvY2F0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtYWxsb2NhdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3QtcXVlcnktcGFyc2UtYWxsb2NhdGlvbi1wYXJhbXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1hbGxvY2F0aW9uLXBhcmFtcyI+Cis8QU5DSE9SIGlkPSJnc3QtcXVlcnktcGFyc2UtbnRoLWFsbG9jYXRpb24tbWVtb3J5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtbnRoLWFsbG9jYXRpb24tbWVtb3J5Ij4KKzxBTkNIT1IgaWQ9ImdzdC1xdWVyeS1wYXJzZS1udGgtYWxsb2NhdGlvbi1tZXRhIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtbnRoLWFsbG9jYXRpb24tbWV0YSI+Cis8QU5DSE9SIGlkPSJnc3QtcXVlcnktc2V0LWFsbG9jYXRpb24tcGFyYW1zIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LWFsbG9jYXRpb24tcGFyYW1zIj4KKzxBTkNIT1IgaWQ9ImdzdC1xdWVyeS1hZGQtYWxsb2NhdGlvbi1tZW1vcnkiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1hZGQtYWxsb2NhdGlvbi1tZW1vcnkiPgorPEFOQ0hPUiBpZD0iZ3N0LXF1ZXJ5LWFkZC1hbGxvY2F0aW9uLW1ldGEiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1hZGQtYWxsb2NhdGlvbi1tZXRhIj4KKzxBTkNIT1IgaWQ9ImdzdC1xdWVyeS1oYXMtYWxsb2NhdGlvbi1tZXRhIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktaGFzLWFsbG9jYXRpb24tbWV0YSI+Cis8QU5DSE9SIGlkPSJnc3QtcXVlcnktZ2V0LW4tYWxsb2NhdGlvbi1tZW1vcmllcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWdldC1uLWFsbG9jYXRpb24tbWVtb3JpZXMiPgorPEFOQ0hPUiBpZD0iZ3N0LXF1ZXJ5LWdldC1uLWFsbG9jYXRpb24tbWV0YXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1nZXQtbi1hbGxvY2F0aW9uLW1ldGFzIj4KKzxBTkNIT1IgaWQ9ImdzdC1xdWVyeS1uZXctc2NoZWR1bGluZyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1zY2hlZHVsaW5nIj4KKzxBTkNIT1IgaWQ9ImdzdC1xdWVyeS1wYXJzZS1zY2hlZHVsaW5nIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2Utc2NoZWR1bGluZyI+Cis8QU5DSE9SIGlkPSJnc3QtcXVlcnktc2V0LXNjaGVkdWxpbmciIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtc2NoZWR1bGluZyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0UXVlcnkuc2VlLWFsc28iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI2dzdHJlYW1lci1Hc3RRdWVyeS5zZWUtYWxzbyI+Cis8QU5DSE9SIGlkPSJHc3RSZWdpc3RyeSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UmVnaXN0cnkuaHRtbCI+Cis8QU5DSE9SIGlkPSJHc3RSZWdpc3RyeS5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UmVnaXN0cnkuaHRtbCNHc3RSZWdpc3RyeS5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJHc3RSZWdpc3RyeS5vYmplY3QtaGllcmFyY2h5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RSZWdpc3RyeS5odG1sI0dzdFJlZ2lzdHJ5Lm9iamVjdC1oaWVyYXJjaHkiPgorPEFOQ0hPUiBpZD0iR3N0UmVnaXN0cnkuc2lnbmFscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UmVnaXN0cnkuaHRtbCNHc3RSZWdpc3RyeS5zaWduYWxzIj4KKzxBTkNIT1IgaWQ9IkdzdFJlZ2lzdHJ5LmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RSZWdpc3RyeS5odG1sI0dzdFJlZ2lzdHJ5LmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdFJlZ2lzdHJ5LmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFJlZ2lzdHJ5Lmh0bWwjR3N0UmVnaXN0cnkuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RSZWdpc3RyeS1zdHJ1Y3QiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFJlZ2lzdHJ5Lmh0bWwjR3N0UmVnaXN0cnktc3RydWN0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1yZWdpc3RyeS1nZXQtZGVmYXVsdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktZ2V0LWRlZmF1bHQiPgorPEFOQ0hPUiBpZD0iZ3N0LXJlZ2lzdHJ5LWdldC1mZWF0dXJlLWxpc3QiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWdldC1mZWF0dXJlLWxpc3QiPgorPEFOQ0hPUiBpZD0iZ3N0LXJlZ2lzdHJ5LWdldC1mZWF0dXJlLWxpc3QtY29va2llIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1nZXQtZmVhdHVyZS1saXN0LWNvb2tpZSI+Cis8QU5DSE9SIGlkPSJnc3QtcmVnaXN0cnktZ2V0LWZlYXR1cmUtbGlzdC1ieS1wbHVnaW4iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWdldC1mZWF0dXJlLWxpc3QtYnktcGx1Z2luIj4KKzxBTkNIT1IgaWQ9ImdzdC1yZWdpc3RyeS1nZXQtcGF0aC1saXN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1nZXQtcGF0aC1saXN0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1yZWdpc3RyeS1nZXQtcGx1Z2luLWxpc3QiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWdldC1wbHVnaW4tbGlzdCI+Cis8QU5DSE9SIGlkPSJnc3QtcmVnaXN0cnktYWRkLXBsdWdpbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktYWRkLXBsdWdpbiI+Cis8QU5DSE9SIGlkPSJnc3QtcmVnaXN0cnktcmVtb3ZlLXBsdWdpbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktcmVtb3ZlLXBsdWdpbiI+Cis8QU5DSE9SIGlkPSJnc3QtcmVnaXN0cnktcGx1Z2luLWZpbHRlciIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktcGx1Z2luLWZpbHRlciI+Cis8QU5DSE9SIGlkPSJnc3QtcmVnaXN0cnktZmVhdHVyZS1maWx0ZXIiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWZlYXR1cmUtZmlsdGVyIj4KKzxBTkNIT1IgaWQ9ImdzdC1yZWdpc3RyeS1maW5kLXBsdWdpbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktZmluZC1wbHVnaW4iPgorPEFOQ0hPUiBpZD0iZ3N0LXJlZ2lzdHJ5LWZpbmQtZmVhdHVyZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktZmluZC1mZWF0dXJlIj4KKzxBTkNIT1IgaWQ9ImdzdC1yZWdpc3RyeS1sb29rdXAtZmVhdHVyZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktbG9va3VwLWZlYXR1cmUiPgorPEFOQ0hPUiBpZD0iZ3N0LXJlZ2lzdHJ5LWFkZC1wYXRoIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1hZGQtcGF0aCI+Cis8QU5DSE9SIGlkPSJnc3QtcmVnaXN0cnktc2Nhbi1wYXRoIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1zY2FuLXBhdGgiPgorPEFOQ0hPUiBpZD0iZ3N0LXJlZ2lzdHJ5LWxvb2t1cCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktbG9va3VwIj4KKzxBTkNIT1IgaWQ9ImdzdC1yZWdpc3RyeS1yZW1vdmUtZmVhdHVyZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktcmVtb3ZlLWZlYXR1cmUiPgorPEFOQ0hPUiBpZD0iZ3N0LXJlZ2lzdHJ5LWFkZC1mZWF0dXJlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1hZGQtZmVhdHVyZSI+Cis8QU5DSE9SIGlkPSJnc3QtZGVmYXVsdC1yZWdpc3RyeS1jaGVjay1mZWF0dXJlLXZlcnNpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LWRlZmF1bHQtcmVnaXN0cnktY2hlY2stZmVhdHVyZS12ZXJzaW9uIj4KKzxBTkNIT1IgaWQ9ImdzdC1kZWZhdWx0LXJlZ2lzdHJ5LWdldC1wYXRoLWxpc3QiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LWRlZmF1bHQtcmVnaXN0cnktZ2V0LXBhdGgtbGlzdCI+Cis8QU5DSE9SIGlkPSJnc3QtZGVmYXVsdC1yZWdpc3RyeS1hZGQtcGx1Z2luIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RSZWdpc3RyeS5odG1sI2dzdC1kZWZhdWx0LXJlZ2lzdHJ5LWFkZC1wbHVnaW4iPgorPEFOQ0hPUiBpZD0iZ3N0LWRlZmF1bHQtcmVnaXN0cnktYWRkLXBhdGgiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LWRlZmF1bHQtcmVnaXN0cnktYWRkLXBhdGgiPgorPEFOQ0hPUiBpZD0iZ3N0LWRlZmF1bHQtcmVnaXN0cnktZmluZC1wbHVnaW4iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LWRlZmF1bHQtcmVnaXN0cnktZmluZC1wbHVnaW4iPgorPEFOQ0hPUiBpZD0iZ3N0LWRlZmF1bHQtcmVnaXN0cnktZmluZC1mZWF0dXJlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RSZWdpc3RyeS5odG1sI2dzdC1kZWZhdWx0LXJlZ2lzdHJ5LWZpbmQtZmVhdHVyZSI+Cis8QU5DSE9SIGlkPSJnc3QtZGVmYXVsdC1yZWdpc3RyeS1nZXQtcGx1Z2luLWxpc3QiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LWRlZmF1bHQtcmVnaXN0cnktZ2V0LXBsdWdpbi1saXN0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1kZWZhdWx0LXJlZ2lzdHJ5LWdldC1mZWF0dXJlLWxpc3QtY29va2llIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RSZWdpc3RyeS5odG1sI2dzdC1kZWZhdWx0LXJlZ2lzdHJ5LWdldC1mZWF0dXJlLWxpc3QtY29va2llIj4KKzxBTkNIT1IgaWQ9ImdzdC1kZWZhdWx0LXJlZ2lzdHJ5LWZlYXR1cmUtZmlsdGVyIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RSZWdpc3RyeS5odG1sI2dzdC1kZWZhdWx0LXJlZ2lzdHJ5LWZlYXR1cmUtZmlsdGVyIj4KKzxBTkNIT1IgaWQ9IkdzdFJlZ2lzdHJ5LnNpZ25hbC1kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RSZWdpc3RyeS5odG1sI0dzdFJlZ2lzdHJ5LnNpZ25hbC1kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdFJlZ2lzdHJ5LWZlYXR1cmUtYWRkZWQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFJlZ2lzdHJ5Lmh0bWwjR3N0UmVnaXN0cnktZmVhdHVyZS1hZGRlZCI+Cis8QU5DSE9SIGlkPSJHc3RSZWdpc3RyeS1wbHVnaW4tYWRkZWQiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFJlZ2lzdHJ5Lmh0bWwjR3N0UmVnaXN0cnktcGx1Z2luLWFkZGVkIj4KKzxBTkNIT1IgaWQ9IkdzdFJlZ2lzdHJ5LnNlZS1hbHNvIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RSZWdpc3RyeS5odG1sI0dzdFJlZ2lzdHJ5LnNlZS1hbHNvIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RTZWdtZW50IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U2VnbWVudC5odG1sIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RTZWdtZW50LnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI2dzdHJlYW1lci1Hc3RTZWdtZW50LnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RTZWdtZW50LmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI2dzdHJlYW1lci1Hc3RTZWdtZW50LmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RTZWdtZW50LmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjZ3N0cmVhbWVyLUdzdFNlZ21lbnQuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RTZWdtZW50IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnQiPgorPEFOQ0hPUiBpZD0iR3N0U2VnbWVudEZsYWdzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnRGbGFncyI+Cis8QU5DSE9SIGlkPSJHU1QtU0VHTUVOVC1GTEFHLU5PTkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNHU1QtU0VHTUVOVC1GTEFHLU5PTkU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtU0VHTUVOVC1GTEFHLVJFU0VUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjR1NULVNFR01FTlQtRkxBRy1SRVNFVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1TRUdNRU5ULUZMQUctU0tJUDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI0dTVC1TRUdNRU5ULUZMQUctU0tJUDpDQVBTIj4KKzxBTkNIT1IgaWQ9ImdzdC1zZWdtZW50LWNsaXAiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtY2xpcCI+Cis8QU5DSE9SIGlkPSJnc3Qtc2VnbWVudC1pbml0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LWluaXQiPgorPEFOQ0hPUiBpZD0iZ3N0LXNlZ21lbnQtbmV3IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LW5ldyI+Cis8QU5DSE9SIGlkPSJnc3Qtc2VnbWVudC1jb3B5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LWNvcHkiPgorPEFOQ0hPUiBpZD0iZ3N0LXNlZ21lbnQtZnJlZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1mcmVlIj4KKzxBTkNIT1IgaWQ9ImdzdC1zZWdtZW50LWRvLXNlZWsiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtZG8tc2VlayI+Cis8QU5DSE9SIGlkPSJnc3Qtc2VnbWVudC10by1ydW5uaW5nLXRpbWUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtdG8tcnVubmluZy10aW1lIj4KKzxBTkNIT1IgaWQ9ImdzdC1zZWdtZW50LXRvLXN0cmVhbS10aW1lIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LXRvLXN0cmVhbS10aW1lIj4KKzxBTkNIT1IgaWQ9ImdzdC1zZWdtZW50LXRvLXBvc2l0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LXRvLXBvc2l0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdC1zZWdtZW50LXNldC1ydW5uaW5nLXRpbWUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtc2V0LXJ1bm5pbmctdGltZSI+Cis8QU5DSE9SIGlkPSJnc3Qtc2VnbWVudC1jb3B5LWludG8iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtY29weS1pbnRvIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RTZWdtZW50LnNlZS1hbHNvIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U2VnbWVudC5odG1sI2dzdHJlYW1lci1Hc3RTZWdtZW50LnNlZS1hbHNvIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0U3RydWN0dXJlLmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3RyZWFtZXItR3N0U3RydWN0dXJlLmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0U3RydWN0dXJlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlIj4KKzxBTkNIT1IgaWQ9IkdzdFN0cnVjdHVyZUZvcmVhY2hGdW5jIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlRm9yZWFjaEZ1bmMiPgorPEFOQ0hPUiBpZD0iR3N0U3RydWN0dXJlTWFwRnVuYyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZU1hcEZ1bmMiPgorPEFOQ0hPUiBpZD0iZ3N0LXN0cnVjdHVyZS1lbXB0eS1uZXciIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWVtcHR5LW5ldyI+Cis8QU5DSE9SIGlkPSJnc3Qtc3RydWN0dXJlLWlkLWVtcHR5LW5ldyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaWQtZW1wdHktbmV3Ij4KKzxBTkNIT1IgaWQ9ImdzdC1zdHJ1Y3R1cmUtbmV3IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1uZXciPgorPEFOQ0hPUiBpZD0iZ3N0LXN0cnVjdHVyZS1uZXctdmFsaXN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1uZXctdmFsaXN0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1zdHJ1Y3R1cmUtaWQtbmV3IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1uZXciPgorPEFOQ0hPUiBpZD0iZ3N0LXN0cnVjdHVyZS1jb3B5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1jb3B5Ij4KKzxBTkNIT1IgaWQ9ImdzdC1zdHJ1Y3R1cmUtZnJlZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZnJlZSI+Cis8QU5DSE9SIGlkPSJnc3Qtc3RydWN0dXJlLWdldC1uYW1lIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtbmFtZSI+Cis8QU5DSE9SIGlkPSJnc3Qtc3RydWN0dXJlLWhhcy1uYW1lIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1oYXMtbmFtZSI+Cis8QU5DSE9SIGlkPSJnc3Qtc3RydWN0dXJlLXNldC1uYW1lIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1zZXQtbmFtZSI+Cis8QU5DSE9SIGlkPSJnc3Qtc3RydWN0dXJlLWdldC1uYW1lLWlkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtbmFtZS1pZCI+Cis8QU5DSE9SIGlkPSJnc3Qtc3RydWN0dXJlLWlkLWdldCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaWQtZ2V0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1zdHJ1Y3R1cmUtaWQtZ2V0LXZhbGlzdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaWQtZ2V0LXZhbGlzdCI+Cis8QU5DSE9SIGlkPSJnc3Qtc3RydWN0dXJlLWlkLWdldC12YWx1ZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaWQtZ2V0LXZhbHVlIj4KKzxBTkNIT1IgaWQ9ImdzdC1zdHJ1Y3R1cmUtaWQtc2V0LXZhbHVlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1zZXQtdmFsdWUiPgorPEFOQ0hPUiBpZD0iZ3N0LXN0cnVjdHVyZS1pZC10YWtlLXZhbHVlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC10YWtlLXZhbHVlIj4KKzxBTkNIT1IgaWQ9ImdzdC1zdHJ1Y3R1cmUtZ2V0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQiPgorPEFOQ0hPUiBpZD0iZ3N0LXN0cnVjdHVyZS1nZXQtdmFsaXN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtdmFsaXN0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1zdHJ1Y3R1cmUtZ2V0LXZhbHVlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtdmFsdWUiPgorPEFOQ0hPUiBpZD0iZ3N0LXN0cnVjdHVyZS1zZXQtdmFsdWUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXNldC12YWx1ZSI+Cis8QU5DSE9SIGlkPSJnc3Qtc3RydWN0dXJlLXRha2UtdmFsdWUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXRha2UtdmFsdWUiPgorPEFOQ0hPUiBpZD0iZ3N0LXN0cnVjdHVyZS1zZXQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXNldCI+Cis8QU5DSE9SIGlkPSJnc3Qtc3RydWN0dXJlLXNldC12YWxpc3QiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXNldC12YWxpc3QiPgorPEFOQ0hPUiBpZD0iZ3N0LXN0cnVjdHVyZS1pZC1zZXQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWlkLXNldCI+Cis8QU5DSE9SIGlkPSJnc3Qtc3RydWN0dXJlLWlkLXNldC12YWxpc3QiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWlkLXNldC12YWxpc3QiPgorPEFOQ0hPUiBpZD0iZ3N0LXN0cnVjdHVyZS1yZW1vdmUtZmllbGQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXJlbW92ZS1maWVsZCI+Cis8QU5DSE9SIGlkPSJnc3Qtc3RydWN0dXJlLXJlbW92ZS1maWVsZHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXJlbW92ZS1maWVsZHMiPgorPEFOQ0hPUiBpZD0iZ3N0LXN0cnVjdHVyZS1yZW1vdmUtZmllbGRzLXZhbGlzdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtcmVtb3ZlLWZpZWxkcy12YWxpc3QiPgorPEFOQ0hPUiBpZD0iZ3N0LXN0cnVjdHVyZS1yZW1vdmUtYWxsLWZpZWxkcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtcmVtb3ZlLWFsbC1maWVsZHMiPgorPEFOQ0hPUiBpZD0iZ3N0LXN0cnVjdHVyZS1nZXQtZmllbGQtdHlwZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LWZpZWxkLXR5cGUiPgorPEFOQ0hPUiBpZD0iZ3N0LXN0cnVjdHVyZS1mb3JlYWNoIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1mb3JlYWNoIj4KKzxBTkNIT1IgaWQ9ImdzdC1zdHJ1Y3R1cmUtbi1maWVsZHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLW4tZmllbGRzIj4KKzxBTkNIT1IgaWQ9ImdzdC1zdHJ1Y3R1cmUtaGFzLWZpZWxkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1oYXMtZmllbGQiPgorPEFOQ0hPUiBpZD0iZ3N0LXN0cnVjdHVyZS1oYXMtZmllbGQtdHlwZWQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWhhcy1maWVsZC10eXBlZCI+Cis8QU5DSE9SIGlkPSJnc3Qtc3RydWN0dXJlLWlzLWVxdWFsIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pcy1lcXVhbCI+Cis8QU5DSE9SIGlkPSJnc3Qtc3RydWN0dXJlLWlzLXN1YnNldCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaXMtc3Vic2V0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1zdHJ1Y3R1cmUtY2FuLWludGVyc2VjdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtY2FuLWludGVyc2VjdCI+Cis8QU5DSE9SIGlkPSJnc3Qtc3RydWN0dXJlLWludGVyc2VjdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaW50ZXJzZWN0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1zdHJ1Y3R1cmUtaWQtaGFzLWZpZWxkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1oYXMtZmllbGQiPgorPEFOQ0hPUiBpZD0iZ3N0LXN0cnVjdHVyZS1pZC1oYXMtZmllbGQtdHlwZWQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWlkLWhhcy1maWVsZC10eXBlZCI+Cis8QU5DSE9SIGlkPSJnc3Qtc3RydWN0dXJlLWdldC1ib29sZWFuIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtYm9vbGVhbiI+Cis8QU5DSE9SIGlkPSJnc3Qtc3RydWN0dXJlLWdldC1pbnQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1pbnQiPgorPEFOQ0hPUiBpZD0iZ3N0LXN0cnVjdHVyZS1nZXQtdWludCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LXVpbnQiPgorPEFOQ0hPUiBpZD0iZ3N0LXN0cnVjdHVyZS1nZXQtZG91YmxlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtZG91YmxlIj4KKzxBTkNIT1IgaWQ9ImdzdC1zdHJ1Y3R1cmUtZ2V0LXN0cmluZyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LXN0cmluZyI+Cis8QU5DSE9SIGlkPSJnc3Qtc3RydWN0dXJlLWdldC1kYXRlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtZGF0ZSI+Cis8QU5DSE9SIGlkPSJnc3Qtc3RydWN0dXJlLWdldC1kYXRlLXRpbWUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1kYXRlLXRpbWUiPgorPEFOQ0hPUiBpZD0iZ3N0LXN0cnVjdHVyZS1nZXQtY2xvY2stdGltZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LWNsb2NrLXRpbWUiPgorPEFOQ0hPUiBpZD0iZ3N0LXN0cnVjdHVyZS1nZXQtZW51bSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LWVudW0iPgorPEFOQ0hPUiBpZD0iZ3N0LXN0cnVjdHVyZS1nZXQtZnJhY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1mcmFjdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3Qtc3RydWN0dXJlLW1hcC1pbi1wbGFjZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtbWFwLWluLXBsYWNlIj4KKzxBTkNIT1IgaWQ9ImdzdC1zdHJ1Y3R1cmUtbnRoLWZpZWxkLW5hbWUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLW50aC1maWVsZC1uYW1lIj4KKzxBTkNIT1IgaWQ9ImdzdC1zdHJ1Y3R1cmUtc2V0LXBhcmVudC1yZWZjb3VudCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtc2V0LXBhcmVudC1yZWZjb3VudCI+Cis8QU5DSE9SIGlkPSJnc3Qtc3RydWN0dXJlLXRvLXN0cmluZyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtdG8tc3RyaW5nIj4KKzxBTkNIT1IgaWQ9ImdzdC1zdHJ1Y3R1cmUtZnJvbS1zdHJpbmciIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZyb20tc3RyaW5nIj4KKzxBTkNIT1IgaWQ9ImdzdC1zdHJ1Y3R1cmUtZml4YXRlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1maXhhdGUiPgorPEFOQ0hPUiBpZD0iZ3N0LXN0cnVjdHVyZS1maXhhdGUtZmllbGQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZCI+Cis8QU5DSE9SIGlkPSJnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZC1uZWFyZXN0LWludCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZml4YXRlLWZpZWxkLW5lYXJlc3QtaW50Ij4KKzxBTkNIT1IgaWQ9ImdzdC1zdHJ1Y3R1cmUtZml4YXRlLWZpZWxkLW5lYXJlc3QtZG91YmxlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1maXhhdGUtZmllbGQtbmVhcmVzdC1kb3VibGUiPgorPEFOQ0hPUiBpZD0iZ3N0LXN0cnVjdHVyZS1maXhhdGUtZmllbGQtbmVhcmVzdC1mcmFjdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZml4YXRlLWZpZWxkLW5lYXJlc3QtZnJhY3Rpb24iPgorPEFOQ0hPUiBpZD0iZ3N0LXN0cnVjdHVyZS1maXhhdGUtZmllbGQtYm9vbGVhbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZml4YXRlLWZpZWxkLWJvb2xlYW4iPgorPEFOQ0hPUiBpZD0iZ3N0LXN0cnVjdHVyZS1maXhhdGUtZmllbGQtc3RyaW5nIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1maXhhdGUtZmllbGQtc3RyaW5nIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuc2VlLWFsc28iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCNnc3RyZWFtZXItR3N0U3RydWN0dXJlLnNlZS1hbHNvIj4KKzxBTkNIT1IgaWQ9IkdzdFN5c3RlbUNsb2NrIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RTeXN0ZW1DbG9jay5odG1sIj4KKzxBTkNIT1IgaWQ9IkdzdFN5c3RlbUNsb2NrLnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RTeXN0ZW1DbG9jay5odG1sI0dzdFN5c3RlbUNsb2NrLnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9IkdzdFN5c3RlbUNsb2NrLm9iamVjdC1oaWVyYXJjaHkiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFN5c3RlbUNsb2NrLmh0bWwjR3N0U3lzdGVtQ2xvY2sub2JqZWN0LWhpZXJhcmNoeSI+Cis8QU5DSE9SIGlkPSJHc3RTeXN0ZW1DbG9jay5wcm9wZXJ0aWVzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RTeXN0ZW1DbG9jay5odG1sI0dzdFN5c3RlbUNsb2NrLnByb3BlcnRpZXMiPgorPEFOQ0hPUiBpZD0iR3N0U3lzdGVtQ2xvY2suZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFN5c3RlbUNsb2NrLmh0bWwjR3N0U3lzdGVtQ2xvY2suZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iR3N0U3lzdGVtQ2xvY2suZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0U3lzdGVtQ2xvY2suaHRtbCNHc3RTeXN0ZW1DbG9jay5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdENsb2NrVHlwZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0U3lzdGVtQ2xvY2suaHRtbCNHc3RDbG9ja1R5cGUiPgorPEFOQ0hPUiBpZD0iR1NULUNMT0NLLVRZUEUtUkVBTFRJTUU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0U3lzdGVtQ2xvY2suaHRtbCNHU1QtQ0xPQ0stVFlQRS1SRUFMVElNRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1DTE9DSy1UWVBFLU1PTk9UT05JQzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RTeXN0ZW1DbG9jay5odG1sI0dTVC1DTE9DSy1UWVBFLU1PTk9UT05JQzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdzdFN5c3RlbUNsb2NrLXN0cnVjdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0U3lzdGVtQ2xvY2suaHRtbCNHc3RTeXN0ZW1DbG9jay1zdHJ1Y3QiPgorPEFOQ0hPUiBpZD0iZ3N0LXN5c3RlbS1jbG9jay1vYnRhaW4iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFN5c3RlbUNsb2NrLmh0bWwjZ3N0LXN5c3RlbS1jbG9jay1vYnRhaW4iPgorPEFOQ0hPUiBpZD0iR3N0U3lzdGVtQ2xvY2sucHJvcGVydHktZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0U3lzdGVtQ2xvY2suaHRtbCNHc3RTeXN0ZW1DbG9jay5wcm9wZXJ0eS1kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdFN5c3RlbUNsb2NrLS1jbG9jay10eXBlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RTeXN0ZW1DbG9jay5odG1sI0dzdFN5c3RlbUNsb2NrLS1jbG9jay10eXBlIj4KKzxBTkNIT1IgaWQ9IkdzdFN5c3RlbUNsb2NrLnNlZS1hbHNvIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RTeXN0ZW1DbG9jay5odG1sI0dzdFN5c3RlbUNsb2NrLnNlZS1hbHNvIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RUYWdMaXN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RUYWdMaXN0LnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdHJlYW1lci1Hc3RUYWdMaXN0LnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RUYWdMaXN0LmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdHJlYW1lci1Hc3RUYWdMaXN0LmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RUYWdMaXN0LmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RUYWdMaXN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3QiPgorPEFOQ0hPUiBpZD0iR3N0VGFnTWVyZ2VNb2RlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ01lcmdlTW9kZSI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLU1FUkdFLVVOREVGSU5FRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTUVSR0UtVU5ERUZJTkVEOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1NRVJHRS1SRVBMQUNFLUFMTDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTUVSR0UtUkVQTEFDRS1BTEw6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLU1FUkdFLVJFUExBQ0U6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLU1FUkdFLVJFUExBQ0U6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLU1FUkdFLUFQUEVORDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTUVSR0UtQVBQRU5EOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1NRVJHRS1QUkVQRU5EOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1NRVJHRS1QUkVQRU5EOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1NRVJHRS1LRUVQOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1NRVJHRS1LRUVQOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1NRVJHRS1LRUVQLUFMTDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTUVSR0UtS0VFUC1BTEw6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLU1FUkdFLUNPVU5UOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1NRVJHRS1DT1VOVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdzdFRhZ0ZsYWciIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnRmxhZyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLUZMQUctVU5ERUZJTkVEOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1GTEFHLVVOREVGSU5FRDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UQUctRkxBRy1NRVRBOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1GTEFHLU1FVEE6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLUZMQUctRU5DT0RFRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctRkxBRy1FTkNPREVEOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1GTEFHLURFQ09ERUQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUZMQUctREVDT0RFRDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UQUctRkxBRy1DT1VOVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctRkxBRy1DT1VOVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdzdFRhZ0ZvcmVhY2hGdW5jIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0ZvcmVhY2hGdW5jIj4KKzxBTkNIT1IgaWQ9IkdzdFRhZ01lcmdlRnVuYyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdNZXJnZUZ1bmMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1USVRMRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVElUTEU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLVRJVExFLVNPUlROQU1FOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1USVRMRS1TT1JUTkFNRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UQUctQVJUSVNUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BUlRJU1Q6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLUFSVElTVC1TT1JUTkFNRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQVJUSVNULVNPUlROQU1FOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1BTEJVTTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQUxCVU06Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLUFMQlVNLVNPUlROQU1FOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BTEJVTS1TT1JUTkFNRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UQUctQUxCVU0tQVJUSVNUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BTEJVTS1BUlRJU1Q6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLUFMQlVNLUFSVElTVC1TT1JUTkFNRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQUxCVU0tQVJUSVNULVNPUlROQU1FOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1EQVRFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1EQVRFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1EQVRFLVRJTUU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLURBVEUtVElNRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UQUctR0VOUkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTlJFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1DT01NRU5UOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1DT01NRU5UOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1FWFRFTkRFRC1DT01NRU5UOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1FWFRFTkRFRC1DT01NRU5UOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1UUkFDSy1OVU1CRVI6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVRSQUNLLU5VTUJFUjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UQUctVFJBQ0stQ09VTlQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVRSQUNLLUNPVU5UOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1BTEJVTS1WT0xVTUUtTlVNQkVSOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BTEJVTS1WT0xVTUUtTlVNQkVSOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1BTEJVTS1WT0xVTUUtQ09VTlQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFMQlVNLVZPTFVNRS1DT1VOVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UQUctTE9DQVRJT046Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUxPQ0FUSU9OOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1IT01FUEFHRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctSE9NRVBBR0U6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLURFU0NSSVBUSU9OOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1ERVNDUklQVElPTjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UQUctVkVSU0lPTjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVkVSU0lPTjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UQUctSVNSQzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctSVNSQzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UQUctT1JHQU5JWkFUSU9OOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1PUkdBTklaQVRJT046Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLUNPUFlSSUdIVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQ09QWVJJR0hUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1DT1BZUklHSFQtVVJJOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1DT1BZUklHSFQtVVJJOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1FTkNPREVELUJZOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1FTkNPREVELUJZOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1DT01QT1NFUjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQ09NUE9TRVI6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLUNPTlRBQ1Q6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUNPTlRBQ1Q6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLUxJQ0VOU0U6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUxJQ0VOU0U6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLUxJQ0VOU0UtVVJJOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1MSUNFTlNFLVVSSTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UQUctUEVSRk9STUVSOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1QRVJGT1JNRVI6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLURVUkFUSU9OOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1EVVJBVElPTjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UQUctQ09ERUM6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUNPREVDOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1WSURFTy1DT0RFQzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVklERU8tQ09ERUM6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLUFVRElPLUNPREVDOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BVURJTy1DT0RFQzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UQUctU1VCVElUTEUtQ09ERUM6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVNVQlRJVExFLUNPREVDOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1DT05UQUlORVItRk9STUFUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1DT05UQUlORVItRk9STUFUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1CSVRSQVRFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1CSVRSQVRFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1OT01JTkFMLUJJVFJBVEU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLU5PTUlOQUwtQklUUkFURTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UQUctTUlOSU1VTS1CSVRSQVRFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1NSU5JTVVNLUJJVFJBVEU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLU1BWElNVU0tQklUUkFURTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTUFYSU1VTS1CSVRSQVRFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1TRVJJQUw6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVNFUklBTDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UQUctRU5DT0RFUjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctRU5DT0RFUjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UQUctRU5DT0RFUi1WRVJTSU9OOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1FTkNPREVSLVZFUlNJT046Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLVRSQUNLLUdBSU46Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVRSQUNLLUdBSU46Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLVRSQUNLLVBFQUs6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVRSQUNLLVBFQUs6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLUFMQlVNLUdBSU46Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFMQlVNLUdBSU46Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLUFMQlVNLVBFQUs6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFMQlVNLVBFQUs6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLVJFRkVSRU5DRS1MRVZFTDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctUkVGRVJFTkNFLUxFVkVMOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1MQU5HVUFHRS1DT0RFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1MQU5HVUFHRS1DT0RFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1JTUFHRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctSU1BR0U6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLVBSRVZJRVctSU1BR0U6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVBSRVZJRVctSU1BR0U6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLUFUVEFDSE1FTlQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFUVEFDSE1FTlQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLUJFQVRTLVBFUi1NSU5VVEU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUJFQVRTLVBFUi1NSU5VVEU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLUtFWVdPUkRTOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1LRVlXT1JEUzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UQUctR0VPLUxPQ0FUSU9OLU5BTUU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1OQU1FOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1HRU8tTE9DQVRJT04tTEFUSVRVREU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1MQVRJVFVERTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UQUctR0VPLUxPQ0FUSU9OLUxPTkdJVFVERTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLUxPTkdJVFVERTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UQUctR0VPLUxPQ0FUSU9OLUVMRVZBVElPTjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLUVMRVZBVElPTjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UQUctR0VPLUxPQ0FUSU9OLUNJVFk6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1DSVRZOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1HRU8tTE9DQVRJT04tQ09VTlRSWTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLUNPVU5UUlk6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLUdFTy1MT0NBVElPTi1TVUJMT0NBVElPTjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLVNVQkxPQ0FUSU9OOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1HRU8tTE9DQVRJT04tSE9SSVpPTlRBTC1FUlJPUjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLUhPUklaT05UQUwtRVJST1I6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLUdFTy1MT0NBVElPTi1NT1ZFTUVOVC1ESVJFQ1RJT046Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1NT1ZFTUVOVC1ESVJFQ1RJT046Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLUdFTy1MT0NBVElPTi1NT1ZFTUVOVC1TUEVFRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLU1PVkVNRU5ULVNQRUVEOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1HRU8tTE9DQVRJT04tQ0FQVFVSRS1ESVJFQ1RJT046Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1DQVBUVVJFLURJUkVDVElPTjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UQUctU0hPVy1OQU1FOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1TSE9XLU5BTUU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLVNIT1ctU09SVE5BTUU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVNIT1ctU09SVE5BTUU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLVNIT1ctRVBJU09ERS1OVU1CRVI6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVNIT1ctRVBJU09ERS1OVU1CRVI6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLVNIT1ctU0VBU09OLU5VTUJFUjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctU0hPVy1TRUFTT04tTlVNQkVSOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1MWVJJQ1M6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUxZUklDUzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UQUctQ09NUE9TRVItU09SVE5BTUU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUNPTVBPU0VSLVNPUlROQU1FOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBRy1HUk9VUElORzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR1JPVVBJTkc6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLVVTRVItUkFUSU5HOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1VU0VSLVJBVElORzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UQUctREVWSUNFLU1BTlVGQUNUVVJFUjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctREVWSUNFLU1BTlVGQUNUVVJFUjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UQUctREVWSUNFLU1PREVMOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1ERVZJQ0UtTU9ERUw6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLUFQUExJQ0FUSU9OLU5BTUU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFQUExJQ0FUSU9OLU5BTUU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLUFQUExJQ0FUSU9OLURBVEE6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFQUExJQ0FUSU9OLURBVEE6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFHLUlNQUdFLU9SSUVOVEFUSU9OOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1JTUFHRS1PUklFTlRBVElPTjpDQVBTIj4KKzxBTkNIT1IgaWQ9ImdzdC10YWctcmVnaXN0ZXIiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1yZWdpc3RlciI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLW1lcmdlLXVzZS1maXJzdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLW1lcmdlLXVzZS1maXJzdCI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLW1lcmdlLXN0cmluZ3Mtd2l0aC1jb21tYSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLW1lcmdlLXN0cmluZ3Mtd2l0aC1jb21tYSI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLWV4aXN0cyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWV4aXN0cyI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLWdldC10eXBlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctZ2V0LXR5cGUiPgorPEFOQ0hPUiBpZD0iZ3N0LXRhZy1nZXQtbmljayIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWdldC1uaWNrIj4KKzxBTkNIT1IgaWQ9ImdzdC10YWctZ2V0LWRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctZ2V0LWRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdC10YWctZ2V0LWZsYWciIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1nZXQtZmxhZyI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLWlzLWZpeGVkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctaXMtZml4ZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LXRhZy1saXN0LW5ldyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtbmV3Ij4KKzxBTkNIT1IgaWQ9ImdzdC10YWctbGlzdC1uZXctZnVsbCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtbmV3LWZ1bGwiPgorPEFOQ0hPUiBpZD0iZ3N0LXRhZy1saXN0LW5ldy1mdWxsLXZhbGlzdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtbmV3LWZ1bGwtdmFsaXN0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1pcy10YWctbGlzdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtaXMtdGFnLWxpc3QiPgorPEFOQ0hPUiBpZD0iZ3N0LXRhZy1saXN0LWlzLWVtcHR5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1pcy1lbXB0eSI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLWxpc3QtY29weSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtY29weSI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLWxpc3QtaW5zZXJ0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1pbnNlcnQiPgorPEFOQ0hPUiBpZD0iZ3N0LXRhZy1saXN0LW1lcmdlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1tZXJnZSI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLWxpc3QtZnJlZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZnJlZSI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLWxpc3QtZ2V0LXRhZy1zaXplIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtdGFnLXNpemUiPgorPEFOQ0hPUiBpZD0iZ3N0LXRhZy1saXN0LWFkZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtYWRkIj4KKzxBTkNIT1IgaWQ9ImdzdC10YWctbGlzdC1hZGQtdmFsdWUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWFkZC12YWx1ZSI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLWxpc3QtYWRkLXZhbHVlcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtYWRkLXZhbHVlcyI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLWxpc3QtYWRkLXZhbGlzdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtYWRkLXZhbGlzdCI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLWxpc3QtYWRkLXZhbGlzdC12YWx1ZXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWFkZC12YWxpc3QtdmFsdWVzIj4KKzxBTkNIT1IgaWQ9ImdzdC10YWctbGlzdC1yZW1vdmUtdGFnIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1yZW1vdmUtdGFnIj4KKzxBTkNIT1IgaWQ9ImdzdC10YWctbGlzdC1mb3JlYWNoIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1mb3JlYWNoIj4KKzxBTkNIT1IgaWQ9ImdzdC10YWctbGlzdC1nZXQtdmFsdWUtaW5kZXgiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC12YWx1ZS1pbmRleCI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLWxpc3QtY29weS12YWx1ZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtY29weS12YWx1ZSI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLWxpc3QtZ2V0LWNoYXIiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1jaGFyIj4KKzxBTkNIT1IgaWQ9ImdzdC10YWctbGlzdC1nZXQtY2hhci1pbmRleCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWNoYXItaW5kZXgiPgorPEFOQ0hPUiBpZD0iZ3N0LXRhZy1saXN0LWdldC11Y2hhciIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXVjaGFyIj4KKzxBTkNIT1IgaWQ9ImdzdC10YWctbGlzdC1nZXQtdWNoYXItaW5kZXgiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC11Y2hhci1pbmRleCI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLWxpc3QtZ2V0LWJvb2xlYW4iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1ib29sZWFuIj4KKzxBTkNIT1IgaWQ9ImdzdC10YWctbGlzdC1nZXQtYm9vbGVhbi1pbmRleCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWJvb2xlYW4taW5kZXgiPgorPEFOQ0hPUiBpZD0iZ3N0LXRhZy1saXN0LWdldC1pbnQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1pbnQiPgorPEFOQ0hPUiBpZD0iZ3N0LXRhZy1saXN0LWdldC1pbnQtaW5kZXgiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1pbnQtaW5kZXgiPgorPEFOQ0hPUiBpZD0iZ3N0LXRhZy1saXN0LWdldC11aW50IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtdWludCI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLWxpc3QtZ2V0LXVpbnQtaW5kZXgiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC11aW50LWluZGV4Ij4KKzxBTkNIT1IgaWQ9ImdzdC10YWctbGlzdC1nZXQtbG9uZyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWxvbmciPgorPEFOQ0hPUiBpZD0iZ3N0LXRhZy1saXN0LWdldC1sb25nLWluZGV4IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtbG9uZy1pbmRleCI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLWxpc3QtZ2V0LXVsb25nIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtdWxvbmciPgorPEFOQ0hPUiBpZD0iZ3N0LXRhZy1saXN0LWdldC11bG9uZy1pbmRleCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXVsb25nLWluZGV4Ij4KKzxBTkNIT1IgaWQ9ImdzdC10YWctbGlzdC1nZXQtaW50NjQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1pbnQ2NCI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLWxpc3QtZ2V0LWludDY0LWluZGV4IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtaW50NjQtaW5kZXgiPgorPEFOQ0hPUiBpZD0iZ3N0LXRhZy1saXN0LWdldC11aW50NjQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC11aW50NjQiPgorPEFOQ0hPUiBpZD0iZ3N0LXRhZy1saXN0LWdldC11aW50NjQtaW5kZXgiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC11aW50NjQtaW5kZXgiPgorPEFOQ0hPUiBpZD0iZ3N0LXRhZy1saXN0LWdldC1mbG9hdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWZsb2F0Ij4KKzxBTkNIT1IgaWQ9ImdzdC10YWctbGlzdC1nZXQtZmxvYXQtaW5kZXgiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1mbG9hdC1pbmRleCI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLWxpc3QtZ2V0LWRvdWJsZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWRvdWJsZSI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLWxpc3QtZ2V0LWRvdWJsZS1pbmRleCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWRvdWJsZS1pbmRleCI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLWxpc3QtZ2V0LXN0cmluZyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXN0cmluZyI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLWxpc3QtZ2V0LXN0cmluZy1pbmRleCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXN0cmluZy1pbmRleCI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLWxpc3QtcGVlay1zdHJpbmctaW5kZXgiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LXBlZWstc3RyaW5nLWluZGV4Ij4KKzxBTkNIT1IgaWQ9ImdzdC10YWctbGlzdC1nZXQtcG9pbnRlciIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXBvaW50ZXIiPgorPEFOQ0hPUiBpZD0iZ3N0LXRhZy1saXN0LWdldC1wb2ludGVyLWluZGV4IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtcG9pbnRlci1pbmRleCI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLWxpc3QtZ2V0LWRhdGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1kYXRlIj4KKzxBTkNIT1IgaWQ9ImdzdC10YWctbGlzdC1nZXQtZGF0ZS1pbmRleCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWRhdGUtaW5kZXgiPgorPEFOQ0hPUiBpZD0iZ3N0LXRhZy1saXN0LWdldC1kYXRlLXRpbWUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1kYXRlLXRpbWUiPgorPEFOQ0hPUiBpZD0iZ3N0LXRhZy1saXN0LWdldC1kYXRlLXRpbWUtaW5kZXgiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1kYXRlLXRpbWUtaW5kZXgiPgorPEFOQ0hPUiBpZD0iZ3N0LXRhZy1saXN0LWdldC1idWZmZXIiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1idWZmZXIiPgorPEFOQ0hPUiBpZD0iZ3N0LXRhZy1saXN0LWdldC1idWZmZXItaW5kZXgiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1idWZmZXItaW5kZXgiPgorPEFOQ0hPUiBpZD0iR3N0VGFnU2V0dGVyIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RUYWdTZXR0ZXIuaHRtbCI+Cis8QU5DSE9SIGlkPSJHc3RUYWdTZXR0ZXIuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFRhZ1NldHRlci5odG1sI0dzdFRhZ1NldHRlci5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJHc3RUYWdTZXR0ZXIub2JqZWN0LWhpZXJhcmNoeSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0VGFnU2V0dGVyLmh0bWwjR3N0VGFnU2V0dGVyLm9iamVjdC1oaWVyYXJjaHkiPgorPEFOQ0hPUiBpZD0iR3N0VGFnU2V0dGVyLnByZXJlcXVpc2l0ZXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFRhZ1NldHRlci5odG1sI0dzdFRhZ1NldHRlci5wcmVyZXF1aXNpdGVzIj4KKzxBTkNIT1IgaWQ9IkdzdFRhZ1NldHRlci5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0VGFnU2V0dGVyLmh0bWwjR3N0VGFnU2V0dGVyLmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdFRhZ1NldHRlci5kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RUYWdTZXR0ZXIuaHRtbCNHc3RUYWdTZXR0ZXIuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RUYWdTZXR0ZXItc3RydWN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RUYWdTZXR0ZXIuaHRtbCNHc3RUYWdTZXR0ZXItc3RydWN0Ij4KKzxBTkNIT1IgaWQ9IkdzdFRhZ1NldHRlcklGYWNlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RUYWdTZXR0ZXIuaHRtbCNHc3RUYWdTZXR0ZXJJRmFjZSI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLXNldHRlci1yZXNldC10YWdzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RUYWdTZXR0ZXIuaHRtbCNnc3QtdGFnLXNldHRlci1yZXNldC10YWdzIj4KKzxBTkNIT1IgaWQ9ImdzdC10YWctc2V0dGVyLW1lcmdlLXRhZ3MiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFRhZ1NldHRlci5odG1sI2dzdC10YWctc2V0dGVyLW1lcmdlLXRhZ3MiPgorPEFOQ0hPUiBpZD0iZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZ3MiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFRhZ1NldHRlci5odG1sI2dzdC10YWctc2V0dGVyLWFkZC10YWdzIj4KKzxBTkNIT1IgaWQ9ImdzdC10YWctc2V0dGVyLWFkZC10YWctdmFsdWUiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFRhZ1NldHRlci5odG1sI2dzdC10YWctc2V0dGVyLWFkZC10YWctdmFsdWUiPgorPEFOQ0hPUiBpZD0iZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZy12YWx1ZXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFRhZ1NldHRlci5odG1sI2dzdC10YWctc2V0dGVyLWFkZC10YWctdmFsdWVzIj4KKzxBTkNIT1IgaWQ9ImdzdC10YWctc2V0dGVyLWFkZC10YWctdmFsaXN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RUYWdTZXR0ZXIuaHRtbCNnc3QtdGFnLXNldHRlci1hZGQtdGFnLXZhbGlzdCI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLXNldHRlci1hZGQtdGFnLXZhbGlzdC12YWx1ZXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFRhZ1NldHRlci5odG1sI2dzdC10YWctc2V0dGVyLWFkZC10YWctdmFsaXN0LXZhbHVlcyI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLXNldHRlci1nZXQtdGFnLWxpc3QiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFRhZ1NldHRlci5odG1sI2dzdC10YWctc2V0dGVyLWdldC10YWctbGlzdCI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLXNldHRlci1zZXQtdGFnLW1lcmdlLW1vZGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFRhZ1NldHRlci5odG1sI2dzdC10YWctc2V0dGVyLXNldC10YWctbWVyZ2UtbW9kZSI+Cis8QU5DSE9SIGlkPSJnc3QtdGFnLXNldHRlci1nZXQtdGFnLW1lcmdlLW1vZGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFRhZ1NldHRlci5odG1sI2dzdC10YWctc2V0dGVyLWdldC10YWctbWVyZ2UtbW9kZSI+Cis8QU5DSE9SIGlkPSJHc3RUYXNrIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RUYXNrLmh0bWwiPgorPEFOQ0hPUiBpZD0iR3N0VGFzay5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0VGFzay5odG1sI0dzdFRhc2suc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iR3N0VGFzay5vYmplY3QtaGllcmFyY2h5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RUYXNrLmh0bWwjR3N0VGFzay5vYmplY3QtaGllcmFyY2h5Ij4KKzxBTkNIT1IgaWQ9IkdzdFRhc2suZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFRhc2suaHRtbCNHc3RUYXNrLmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdFRhc2suZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0VGFzay5odG1sI0dzdFRhc2suZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RUYXNrLXN0cnVjdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0VGFzay5odG1sI0dzdFRhc2stc3RydWN0Ij4KKzxBTkNIT1IgaWQ9IkdzdFRhc2tGdW5jdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0VGFzay5odG1sI0dzdFRhc2tGdW5jdGlvbiI+Cis8QU5DSE9SIGlkPSJHc3RUYXNrU3RhdGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFRhc2suaHRtbCNHc3RUYXNrU3RhdGUiPgorPEFOQ0hPUiBpZD0iR1NULVRBU0stU1RBUlRFRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RUYXNrLmh0bWwjR1NULVRBU0stU1RBUlRFRDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UQVNLLVNUT1BQRUQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0VGFzay5odG1sI0dTVC1UQVNLLVNUT1BQRUQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFTSy1QQVVTRUQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0VGFzay5odG1sI0dTVC1UQVNLLVBBVVNFRDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UQVNLLUJST0FEQ0FTVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RUYXNrLmh0bWwjR1NULVRBU0stQlJPQURDQVNUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBU0stR0VULUNPTkQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0VGFzay5odG1sI0dTVC1UQVNLLUdFVC1DT05EOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBU0stR0VULUxPQ0s6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0VGFzay5odG1sI0dTVC1UQVNLLUdFVC1MT0NLOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRBU0stU0lHTkFMOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFRhc2suaHRtbCNHU1QtVEFTSy1TSUdOQUw6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFTSy1TVEFURTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RUYXNrLmh0bWwjR1NULVRBU0stU1RBVEU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEFTSy1XQUlUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFRhc2suaHRtbCNHU1QtVEFTSy1XQUlUOkNBUFMiPgorPEFOQ0hPUiBpZD0iZ3N0LXRhc2stY3JlYXRlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RUYXNrLmh0bWwjZ3N0LXRhc2stY3JlYXRlIj4KKzxBTkNIT1IgaWQ9ImdzdC10YXNrLXNldC1sb2NrIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RUYXNrLmh0bWwjZ3N0LXRhc2stc2V0LWxvY2siPgorPEFOQ0hPUiBpZD0iZ3N0LXRhc2stc2V0LXByaW9yaXR5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RUYXNrLmh0bWwjZ3N0LXRhc2stc2V0LXByaW9yaXR5Ij4KKzxBTkNIT1IgaWQ9ImdzdC10YXNrLXNldC1wb29sIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RUYXNrLmh0bWwjZ3N0LXRhc2stc2V0LXBvb2wiPgorPEFOQ0hPUiBpZD0iZ3N0LXRhc2stZ2V0LXBvb2wiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFRhc2suaHRtbCNnc3QtdGFzay1nZXQtcG9vbCI+Cis8QU5DSE9SIGlkPSJHc3RUYXNrVGhyZWFkQ2FsbGJhY2tzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RUYXNrLmh0bWwjR3N0VGFza1RocmVhZENhbGxiYWNrcyI+Cis8QU5DSE9SIGlkPSJnc3QtdGFzay1zZXQtdGhyZWFkLWNhbGxiYWNrcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0VGFzay5odG1sI2dzdC10YXNrLXNldC10aHJlYWQtY2FsbGJhY2tzIj4KKzxBTkNIT1IgaWQ9ImdzdC10YXNrLWdldC1zdGF0ZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0VGFzay5odG1sI2dzdC10YXNrLWdldC1zdGF0ZSI+Cis8QU5DSE9SIGlkPSJnc3QtdGFzay1zZXQtc3RhdGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFRhc2suaHRtbCNnc3QtdGFzay1zZXQtc3RhdGUiPgorPEFOQ0hPUiBpZD0iZ3N0LXRhc2stcGF1c2UiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFRhc2suaHRtbCNnc3QtdGFzay1wYXVzZSI+Cis8QU5DSE9SIGlkPSJnc3QtdGFzay1zdGFydCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0VGFzay5odG1sI2dzdC10YXNrLXN0YXJ0Ij4KKzxBTkNIT1IgaWQ9ImdzdC10YXNrLXN0b3AiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFRhc2suaHRtbCNnc3QtdGFzay1zdG9wIj4KKzxBTkNIT1IgaWQ9ImdzdC10YXNrLWpvaW4iIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFRhc2suaHRtbCNnc3QtdGFzay1qb2luIj4KKzxBTkNIT1IgaWQ9ImdzdC10YXNrLWNsZWFudXAtYWxsIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RUYXNrLmh0bWwjZ3N0LXRhc2stY2xlYW51cC1hbGwiPgorPEFOQ0hPUiBpZD0iR3N0VGFzay5zZWUtYWxzbyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0VGFzay5odG1sI0dzdFRhc2suc2VlLWFsc28iPgorPEFOQ0hPUiBpZD0iR3N0VGFza1Bvb2wiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFRhc2tQb29sLmh0bWwiPgorPEFOQ0hPUiBpZD0iR3N0VGFza1Bvb2wuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFRhc2tQb29sLmh0bWwjR3N0VGFza1Bvb2wuc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iR3N0VGFza1Bvb2wub2JqZWN0LWhpZXJhcmNoeSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0VGFza1Bvb2wuaHRtbCNHc3RUYXNrUG9vbC5vYmplY3QtaGllcmFyY2h5Ij4KKzxBTkNIT1IgaWQ9IkdzdFRhc2tQb29sLmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RUYXNrUG9vbC5odG1sI0dzdFRhc2tQb29sLmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdFRhc2tQb29sLmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFRhc2tQb29sLmh0bWwjR3N0VGFza1Bvb2wuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RUYXNrUG9vbC1zdHJ1Y3QiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFRhc2tQb29sLmh0bWwjR3N0VGFza1Bvb2wtc3RydWN0Ij4KKzxBTkNIT1IgaWQ9IkdzdFRhc2tQb29sQ2xhc3MiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFRhc2tQb29sLmh0bWwjR3N0VGFza1Bvb2xDbGFzcyI+Cis8QU5DSE9SIGlkPSJHc3RUYXNrUG9vbEZ1bmN0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RUYXNrUG9vbC5odG1sI0dzdFRhc2tQb29sRnVuY3Rpb24iPgorPEFOQ0hPUiBpZD0iZ3N0LXRhc2stcG9vbC1uZXciIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFRhc2tQb29sLmh0bWwjZ3N0LXRhc2stcG9vbC1uZXciPgorPEFOQ0hPUiBpZD0iZ3N0LXRhc2stcG9vbC1wcmVwYXJlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RUYXNrUG9vbC5odG1sI2dzdC10YXNrLXBvb2wtcHJlcGFyZSI+Cis8QU5DSE9SIGlkPSJnc3QtdGFzay1wb29sLXB1c2giIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFRhc2tQb29sLmh0bWwjZ3N0LXRhc2stcG9vbC1wdXNoIj4KKzxBTkNIT1IgaWQ9ImdzdC10YXNrLXBvb2wtam9pbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0VGFza1Bvb2wuaHRtbCNnc3QtdGFzay1wb29sLWpvaW4iPgorPEFOQ0hPUiBpZD0iZ3N0LXRhc2stcG9vbC1jbGVhbnVwIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RUYXNrUG9vbC5odG1sI2dzdC10YXNrLXBvb2wtY2xlYW51cCI+Cis8QU5DSE9SIGlkPSJHc3RUYXNrUG9vbC5zZWUtYWxzbyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0VGFza1Bvb2wuaHRtbCNHc3RUYXNrUG9vbC5zZWUtYWxzbyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNnc3RyZWFtZXItR3N0VHlwZUZpbmQuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RUeXBlRmluZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmQiPgorPEFOQ0hPUiBpZD0iR3N0VHlwZUZpbmRGdW5jdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmRGdW5jdGlvbiI+Cis8QU5DSE9SIGlkPSJHc3RUeXBlRmluZFByb2JhYmlsaXR5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZFByb2JhYmlsaXR5Ij4KKzxBTkNIT1IgaWQ9IkdTVC1UWVBFLUZJTkQtTk9ORTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHU1QtVFlQRS1GSU5ELU5PTkU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVFlQRS1GSU5ELU1JTklNVU06Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR1NULVRZUEUtRklORC1NSU5JTVVNOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRZUEUtRklORC1QT1NTSUJMRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHU1QtVFlQRS1GSU5ELVBPU1NJQkxFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRZUEUtRklORC1MSUtFTFk6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR1NULVRZUEUtRklORC1MSUtFTFk6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVFlQRS1GSU5ELU5FQVJMWS1DRVJUQUlOOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dTVC1UWVBFLUZJTkQtTkVBUkxZLUNFUlRBSU46Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVFlQRS1GSU5ELU1BWElNVU06Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR1NULVRZUEUtRklORC1NQVhJTVVNOkNBUFMiPgorPEFOQ0hPUiBpZD0iZ3N0LXR5cGUtZmluZC1wZWVrIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNnc3QtdHlwZS1maW5kLXBlZWsiPgorPEFOQ0hPUiBpZD0iZ3N0LXR5cGUtZmluZC1zdWdnZXN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNnc3QtdHlwZS1maW5kLXN1Z2dlc3QiPgorPEFOQ0hPUiBpZD0iZ3N0LXR5cGUtZmluZC1zdWdnZXN0LXNpbXBsZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjZ3N0LXR5cGUtZmluZC1zdWdnZXN0LXNpbXBsZSI+Cis8QU5DSE9SIGlkPSJnc3QtdHlwZS1maW5kLWdldC1sZW5ndGgiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI2dzdC10eXBlLWZpbmQtZ2V0LWxlbmd0aCI+Cis8QU5DSE9SIGlkPSJnc3QtdHlwZS1maW5kLXJlZ2lzdGVyIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNnc3QtdHlwZS1maW5kLXJlZ2lzdGVyIj4KKzxBTkNIT1IgaWQ9IkdzdFR5cGVGaW5kRmFjdG9yeSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0VHlwZUZpbmRGYWN0b3J5Lmh0bWwiPgorPEFOQ0hPUiBpZD0iR3N0VHlwZUZpbmRGYWN0b3J5LnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RUeXBlRmluZEZhY3RvcnkuaHRtbCNHc3RUeXBlRmluZEZhY3Rvcnkuc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iR3N0VHlwZUZpbmRGYWN0b3J5Lm9iamVjdC1oaWVyYXJjaHkiIGhyZWY9ImdzdHJlYW1lci0wLjExL0dzdFR5cGVGaW5kRmFjdG9yeS5odG1sI0dzdFR5cGVGaW5kRmFjdG9yeS5vYmplY3QtaGllcmFyY2h5Ij4KKzxBTkNIT1IgaWQ9IkdzdFR5cGVGaW5kRmFjdG9yeS5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0VHlwZUZpbmRGYWN0b3J5Lmh0bWwjR3N0VHlwZUZpbmRGYWN0b3J5LmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdFR5cGVGaW5kRmFjdG9yeS5kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RUeXBlRmluZEZhY3RvcnkuaHRtbCNHc3RUeXBlRmluZEZhY3RvcnkuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RUeXBlRmluZEZhY3Rvcnktc3RydWN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RUeXBlRmluZEZhY3RvcnkuaHRtbCNHc3RUeXBlRmluZEZhY3Rvcnktc3RydWN0Ij4KKzxBTkNIT1IgaWQ9ImdzdC10eXBlLWZpbmQtZmFjdG9yeS1nZXQtbGlzdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0VHlwZUZpbmRGYWN0b3J5Lmh0bWwjZ3N0LXR5cGUtZmluZC1mYWN0b3J5LWdldC1saXN0Ij4KKzxBTkNIT1IgaWQ9ImdzdC10eXBlLWZpbmQtZmFjdG9yeS1nZXQtZXh0ZW5zaW9ucyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0VHlwZUZpbmRGYWN0b3J5Lmh0bWwjZ3N0LXR5cGUtZmluZC1mYWN0b3J5LWdldC1leHRlbnNpb25zIj4KKzxBTkNIT1IgaWQ9ImdzdC10eXBlLWZpbmQtZmFjdG9yeS1nZXQtY2FwcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvR3N0VHlwZUZpbmRGYWN0b3J5Lmh0bWwjZ3N0LXR5cGUtZmluZC1mYWN0b3J5LWdldC1jYXBzIj4KKzxBTkNIT1IgaWQ9ImdzdC10eXBlLWZpbmQtZmFjdG9yeS1jYWxsLWZ1bmN0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9Hc3RUeXBlRmluZEZhY3RvcnkuaHRtbCNnc3QtdHlwZS1maW5kLWZhY3RvcnktY2FsbC1mdW5jdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlciIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJHc3RVUklIYW5kbGVyIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSUhhbmRsZXIiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIub2JqZWN0LWhpZXJhcmNoeSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5vYmplY3QtaGllcmFyY2h5Ij4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLnNpZ25hbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuc2lnbmFscyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0VVJJSGFuZGxlci1zdHJ1Y3QiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJSGFuZGxlci1zdHJ1Y3QiPgorPEFOQ0hPUiBpZD0iR3N0VVJJSGFuZGxlckludGVyZmFjZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklIYW5kbGVySW50ZXJmYWNlIj4KKzxBTkNIT1IgaWQ9IkdzdFVSSVR5cGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJVHlwZSI+Cis8QU5DSE9SIGlkPSJHU1QtVVJJLVVOS05PV046Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHU1QtVVJJLVVOS05PV046Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVVJJLVNJTks6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHU1QtVVJJLVNJTks6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVVJJLVNSQzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dTVC1VUkktU1JDOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVVSSS1UWVBFLUlTLVZBTElEOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR1NULVVSSS1UWVBFLUlTLVZBTElEOkNBUFMiPgorPEFOQ0hPUiBpZD0iZ3N0LXVyaS1wcm90b2NvbC1pcy12YWxpZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLXByb3RvY29sLWlzLXZhbGlkIj4KKzxBTkNIT1IgaWQ9ImdzdC11cmktcHJvdG9jb2wtaXMtc3VwcG9ydGVkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC11cmktcHJvdG9jb2wtaXMtc3VwcG9ydGVkIj4KKzxBTkNIT1IgaWQ9ImdzdC11cmktaXMtdmFsaWQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1pcy12YWxpZCI+Cis8QU5DSE9SIGlkPSJnc3QtdXJpLWhhcy1wcm90b2NvbCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLWhhcy1wcm90b2NvbCI+Cis8QU5DSE9SIGlkPSJnc3QtdXJpLWdldC1wcm90b2NvbCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLWdldC1wcm90b2NvbCI+Cis8QU5DSE9SIGlkPSJnc3QtdXJpLWdldC1sb2NhdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLWdldC1sb2NhdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3QtdXJpLWNvbnN0cnVjdCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLWNvbnN0cnVjdCI+Cis8QU5DSE9SIGlkPSJnc3QtZmlsZW5hbWUtdG8tdXJpIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC1maWxlbmFtZS10by11cmkiPgorPEFOQ0hPUiBpZD0iZ3N0LWVsZW1lbnQtbWFrZS1mcm9tLXVyaSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtZWxlbWVudC1tYWtlLWZyb20tdXJpIj4KKzxBTkNIT1IgaWQ9ImdzdC11cmktaGFuZGxlci1nZXQtdXJpLXR5cGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1oYW5kbGVyLWdldC11cmktdHlwZSI+Cis8QU5DSE9SIGlkPSJnc3QtdXJpLWhhbmRsZXItZ2V0LXByb3RvY29scyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLWhhbmRsZXItZ2V0LXByb3RvY29scyI+Cis8QU5DSE9SIGlkPSJnc3QtdXJpLWhhbmRsZXItZ2V0LXVyaSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLWhhbmRsZXItZ2V0LXVyaSI+Cis8QU5DSE9SIGlkPSJnc3QtdXJpLWhhbmRsZXItc2V0LXVyaSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLWhhbmRsZXItc2V0LXVyaSI+Cis8QU5DSE9SIGlkPSJnc3QtdXJpLWhhbmRsZXItbmV3LXVyaSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLWhhbmRsZXItbmV3LXVyaSI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5zaWduYWwtZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5zaWduYWwtZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RVUklIYW5kbGVyLW5ldy11cmkiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJSGFuZGxlci1uZXctdXJpIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RVdGlscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdFV0aWxzLnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3RyZWFtZXItR3N0VXRpbHMuc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdFV0aWxzLmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3RyZWFtZXItR3N0VXRpbHMuZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdFV0aWxzLmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdHJlYW1lci1Hc3RVdGlscy5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdTVC1DQUxMLVBBUkVOVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtQ0FMTC1QQVJFTlQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQ0FMTC1QQVJFTlQtV0lUSC1ERUZBVUxUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1DQUxMLVBBUkVOVC1XSVRILURFRkFVTFQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUkVBRC1VSU5UODpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1VSU5UODpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1SRUFELVVJTlQxNi1MRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1VSU5UMTYtTEU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUkVBRC1VSU5UMTYtQkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJFQUQtVUlOVDE2LUJFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVJFQUQtVUlOVDI0LUxFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELVVJTlQyNC1MRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1SRUFELVVJTlQyNC1CRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1VSU5UMjQtQkU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUkVBRC1VSU5UMzItTEU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJFQUQtVUlOVDMyLUxFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVJFQUQtVUlOVDMyLUJFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELVVJTlQzMi1CRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1SRUFELVVJTlQ2NC1MRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1VSU5UNjQtTEU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUkVBRC1VSU5UNjQtQkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJFQUQtVUlOVDY0LUJFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVJFQUQtRkxPQVQtTEU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJFQUQtRkxPQVQtTEU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUkVBRC1GTE9BVC1CRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1GTE9BVC1CRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1SRUFELURPVUJMRS1MRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1ET1VCTEUtTEU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUkVBRC1ET1VCTEUtQkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJFQUQtRE9VQkxFLUJFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVdSSVRFLVVJTlQ4OkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1VSU5UODpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1XUklURS1VSU5UMTYtTEU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLVVJTlQxNi1MRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1XUklURS1VSU5UMTYtQkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLVVJTlQxNi1CRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1XUklURS1VSU5UMjQtTEU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLVVJTlQyNC1MRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1XUklURS1VSU5UMjQtQkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLVVJTlQyNC1CRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1XUklURS1VSU5UMzItTEU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLVVJTlQzMi1MRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1XUklURS1VSU5UMzItQkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLVVJTlQzMi1CRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1XUklURS1VSU5UNjQtTEU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLVVJTlQ2NC1MRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1XUklURS1VSU5UNjQtQkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLVVJTlQ2NC1CRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1XUklURS1GTE9BVC1MRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtV1JJVEUtRkxPQVQtTEU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtV1JJVEUtRkxPQVQtQkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLUZMT0FULUJFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVdSSVRFLURPVUJMRS1MRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtV1JJVEUtRE9VQkxFLUxFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVdSSVRFLURPVUJMRS1CRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtV1JJVEUtRE9VQkxFLUJFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVJPVU5ELVVQLTI6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELVVQLTI6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUk9VTkQtVVAtNDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtVVAtNDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1ST1VORC1VUC04OkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1VUC04OkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVJPVU5ELVVQLTE2OkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1VUC0xNjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1ST1VORC1VUC0zMjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtVVAtMzI6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUk9VTkQtVVAtNjQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELVVQLTY0OkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVJPVU5ELURPV04tMjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtRE9XTi0yOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVJPVU5ELURPV04tNDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtRE9XTi00OkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVJPVU5ELURPV04tODpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtRE9XTi04OkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVJPVU5ELURPV04tMTY6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELURPV04tMTY6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtUk9VTkQtRE9XTi0zMjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtRE9XTi0zMjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1ST1VORC1ET1dOLTY0OkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1ET1dOLTY0OkNBUFMiPgorPEFOQ0hPUiBpZD0iR0RPVUJMRS1GUk9NLUJFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dET1VCTEUtRlJPTS1CRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdET1VCTEUtRlJPTS1MRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRE9VQkxFLUZST00tTEU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHRE9VQkxFLVNXQVAtTEUtQkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR0RPVUJMRS1TV0FQLUxFLUJFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR0RPVUJMRS1UTy1CRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRE9VQkxFLVRPLUJFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR0RPVUJMRS1UTy1MRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRE9VQkxFLVRPLUxFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR0ZMT0FULUZST00tQkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR0ZMT0FULUZST00tQkU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHRkxPQVQtRlJPTS1MRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRkxPQVQtRlJPTS1MRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdGTE9BVC1TV0FQLUxFLUJFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dGTE9BVC1TV0FQLUxFLUJFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR0ZMT0FULVRPLUJFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dGTE9BVC1UTy1CRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdGTE9BVC1UTy1MRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRkxPQVQtVE8tTEU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJnc3QtZmxvdy1nZXQtbmFtZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LWZsb3ctZ2V0LW5hbWUiPgorPEFOQ0hPUiBpZD0iZ3N0LWZsb3ctdG8tcXVhcmsiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC1mbG93LXRvLXF1YXJrIj4KKzxBTkNIT1IgaWQ9ImdzdC1wcmludC1lbGVtZW50LWFyZ3MiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC1wcmludC1lbGVtZW50LWFyZ3MiPgorPEFOQ0hPUiBpZD0iZ3N0LXByaW50LXBhZC1jYXBzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtcHJpbnQtcGFkLWNhcHMiPgorPEFOQ0hPUiBpZD0iZ3N0LWd1aW50NjQtdG8tZ2RvdWJsZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LWd1aW50NjQtdG8tZ2RvdWJsZSI+Cis8QU5DSE9SIGlkPSJnc3QtZ2RvdWJsZS10by1ndWludDY0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtZ2RvdWJsZS10by1ndWludDY0Ij4KKzxBTkNIT1IgaWQ9ImdzdC10eXBlLXJlZ2lzdGVyLXN0YXRpYy1mdWxsIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdHlwZS1yZWdpc3Rlci1zdGF0aWMtZnVsbCI+Cis8QU5DSE9SIGlkPSJnc3QtdXRpbC1kdW1wLW1lbSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtZHVtcC1tZW0iPgorPEFOQ0hPUiBpZD0iZ3N0LXV0aWwtdWludDY0LXNjYWxlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUiPgorPEFOQ0hPUiBpZD0iZ3N0LXV0aWwtdWludDY0LXNjYWxlLXJvdW5kIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUtcm91bmQiPgorPEFOQ0hPUiBpZD0iZ3N0LXV0aWwtdWludDY0LXNjYWxlLWNlaWwiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1jZWlsIj4KKzxBTkNIT1IgaWQ9ImdzdC11dGlsLXVpbnQ2NC1zY2FsZS1pbnQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1pbnQiPgorPEFOQ0hPUiBpZD0iZ3N0LXV0aWwtdWludDY0LXNjYWxlLWludC1yb3VuZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtdWludDY0LXNjYWxlLWludC1yb3VuZCI+Cis8QU5DSE9SIGlkPSJnc3QtdXRpbC11aW50NjQtc2NhbGUtaW50LWNlaWwiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1pbnQtY2VpbCI+Cis8QU5DSE9SIGlkPSJnc3QtdXRpbC1ncmVhdGVzdC1jb21tb24tZGl2aXNvciIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtZ3JlYXRlc3QtY29tbW9uLWRpdmlzb3IiPgorPEFOQ0hPUiBpZD0iZ3N0LXV0aWwtZnJhY3Rpb24tdG8tZG91YmxlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1mcmFjdGlvbi10by1kb3VibGUiPgorPEFOQ0hPUiBpZD0iZ3N0LXV0aWwtZG91YmxlLXRvLWZyYWN0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1kb3VibGUtdG8tZnJhY3Rpb24iPgorPEFOQ0hPUiBpZD0iZ3N0LXV0aWwtZnJhY3Rpb24tbXVsdGlwbHkiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWZyYWN0aW9uLW11bHRpcGx5Ij4KKzxBTkNIT1IgaWQ9ImdzdC11dGlsLWZyYWN0aW9uLWFkZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtZnJhY3Rpb24tYWRkIj4KKzxBTkNIT1IgaWQ9ImdzdC11dGlsLWZyYWN0aW9uLWNvbXBhcmUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWZyYWN0aW9uLWNvbXBhcmUiPgorPEFOQ0hPUiBpZD0iZ3N0LXV0aWwtc2VxbnVtLW5leHQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXNlcW51bS1uZXh0Ij4KKzxBTkNIT1IgaWQ9ImdzdC11dGlsLXNlcW51bS1jb21wYXJlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1zZXFudW0tY29tcGFyZSI+Cis8QU5DSE9SIGlkPSJnc3QtdXRpbC1zZXQtb2JqZWN0LWFyZyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtc2V0LW9iamVjdC1hcmciPgorPEFOQ0hPUiBpZD0iZ3N0LXV0aWwtc2V0LXZhbHVlLWZyb20tc3RyaW5nIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1zZXQtdmFsdWUtZnJvbS1zdHJpbmciPgorPEFOQ0hPUiBpZD0iZ3N0LXV0aWwtZ2V0LXRpbWVzdGFtcCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtZ2V0LXRpbWVzdGFtcCI+Cis8QU5DSE9SIGlkPSJHc3RTZWFyY2hNb2RlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHc3RTZWFyY2hNb2RlIj4KKzxBTkNIT1IgaWQ9IkdTVC1TRUFSQ0gtTU9ERS1FWEFDVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtU0VBUkNILU1PREUtRVhBQ1Q6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtU0VBUkNILU1PREUtQkVGT1JFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1TRUFSQ0gtTU9ERS1CRUZPUkU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtU0VBUkNILU1PREUtQUZURVI6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVNFQVJDSC1NT0RFLUFGVEVSOkNBUFMiPgorPEFOQ0hPUiBpZD0iZ3N0LXV0aWwtYXJyYXktYmluYXJ5LXNlYXJjaCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtYXJyYXktYmluYXJ5LXNlYXJjaCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0VmFsdWUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RWYWx1ZS5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0cmVhbWVyLUdzdFZhbHVlLnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RWYWx1ZS5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0cmVhbWVyLUdzdFZhbHVlLmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RWYWx1ZS5kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3RyZWFtZXItR3N0VmFsdWUuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHU1QtTUFLRS1GT1VSQ0M6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULU1BS0UtRk9VUkNDOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVNUUi1GT1VSQ0M6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVNUUi1GT1VSQ0M6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRk9VUkNDLUZPUk1BVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtRk9VUkNDLUZPUk1BVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1GT1VSQ0MtQVJHUzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtRk9VUkNDLUFSR1M6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVkFMVUUtSE9MRFMtSU5ULVJBTkdFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1JTlQtUkFOR0U6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVFlQRS1JTlQtUkFOR0U6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtSU5ULVJBTkdFOkNBUFMiPgorPEFOQ0hPUiBpZD0iZ3N0LXZhbHVlLXNldC1pbnQtcmFuZ2UiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXQtaW50LXJhbmdlIj4KKzxBTkNIT1IgaWQ9ImdzdC12YWx1ZS1nZXQtaW50LXJhbmdlLW1pbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1pbnQtcmFuZ2UtbWluIj4KKzxBTkNIT1IgaWQ9ImdzdC12YWx1ZS1nZXQtaW50LXJhbmdlLW1heCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1pbnQtcmFuZ2UtbWF4Ij4KKzxBTkNIT1IgaWQ9IkdTVC1WQUxVRS1IT0xEUy1JTlQ2NC1SQU5HRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtSU5UNjQtUkFOR0U6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVFlQRS1JTlQ2NC1SQU5HRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1JTlQ2NC1SQU5HRTpDQVBTIj4KKzxBTkNIT1IgaWQ9ImdzdC12YWx1ZS1zZXQtaW50NjQtcmFuZ2UiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXQtaW50NjQtcmFuZ2UiPgorPEFOQ0hPUiBpZD0iZ3N0LXZhbHVlLWdldC1pbnQ2NC1yYW5nZS1taW4iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtaW50NjQtcmFuZ2UtbWluIj4KKzxBTkNIT1IgaWQ9ImdzdC12YWx1ZS1nZXQtaW50NjQtcmFuZ2UtbWF4IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWludDY0LXJhbmdlLW1heCI+Cis8QU5DSE9SIGlkPSJHU1QtVkFMVUUtSE9MRFMtRE9VQkxFLVJBTkdFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1ET1VCTEUtUkFOR0U6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVFlQRS1ET1VCTEUtUkFOR0U6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtRE9VQkxFLVJBTkdFOkNBUFMiPgorPEFOQ0hPUiBpZD0iZ3N0LXZhbHVlLXNldC1kb3VibGUtcmFuZ2UiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXQtZG91YmxlLXJhbmdlIj4KKzxBTkNIT1IgaWQ9ImdzdC12YWx1ZS1nZXQtZG91YmxlLXJhbmdlLW1pbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1kb3VibGUtcmFuZ2UtbWluIj4KKzxBTkNIT1IgaWQ9ImdzdC12YWx1ZS1nZXQtZG91YmxlLXJhbmdlLW1heCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1kb3VibGUtcmFuZ2UtbWF4Ij4KKzxBTkNIT1IgaWQ9IkdTVC1WQUxVRS1IT0xEUy1MSVNUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1MSVNUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRZUEUtTElTVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1MSVNUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVZBTFVFLUhPTERTLUFSUkFZOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1BUlJBWTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UWVBFLUFSUkFZOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUFSUkFZOkNBUFMiPgorPEFOQ0hPUiBpZD0iZ3N0LXZhbHVlLWxpc3QtYXBwZW5kLXZhbHVlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtbGlzdC1hcHBlbmQtdmFsdWUiPgorPEFOQ0hPUiBpZD0iZ3N0LXZhbHVlLWxpc3QtcHJlcGVuZC12YWx1ZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWxpc3QtcHJlcGVuZC12YWx1ZSI+Cis8QU5DSE9SIGlkPSJnc3QtdmFsdWUtbGlzdC1jb25jYXQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1saXN0LWNvbmNhdCI+Cis8QU5DSE9SIGlkPSJnc3QtdmFsdWUtbGlzdC1tZXJnZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWxpc3QtbWVyZ2UiPgorPEFOQ0hPUiBpZD0iZ3N0LXZhbHVlLWxpc3QtZ2V0LXNpemUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1saXN0LWdldC1zaXplIj4KKzxBTkNIT1IgaWQ9ImdzdC12YWx1ZS1saXN0LWdldC12YWx1ZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWxpc3QtZ2V0LXZhbHVlIj4KKzxBTkNIT1IgaWQ9IkdTVC1WQUxVRS1IT0xEUy1GUkFDVElPTjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtRlJBQ1RJT046Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVFlQRS1GUkFDVElPTjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1GUkFDVElPTjpDQVBTIj4KKzxBTkNIT1IgaWQ9ImdzdC12YWx1ZS1zZXQtZnJhY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXQtZnJhY3Rpb24iPgorPEFOQ0hPUiBpZD0iZ3N0LXZhbHVlLWdldC1mcmFjdGlvbi1udW1lcmF0b3IiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtZnJhY3Rpb24tbnVtZXJhdG9yIj4KKzxBTkNIT1IgaWQ9ImdzdC12YWx1ZS1nZXQtZnJhY3Rpb24tZGVub21pbmF0b3IiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtZnJhY3Rpb24tZGVub21pbmF0b3IiPgorPEFOQ0hPUiBpZD0iZ3N0LXZhbHVlLWZyYWN0aW9uLW11bHRpcGx5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZnJhY3Rpb24tbXVsdGlwbHkiPgorPEFOQ0hPUiBpZD0iZ3N0LXZhbHVlLWZyYWN0aW9uLXN1YnRyYWN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZnJhY3Rpb24tc3VidHJhY3QiPgorPEFOQ0hPUiBpZD0iR1NULVZBTFVFLUhPTERTLUZSQUNUSU9OLVJBTkdFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1GUkFDVElPTi1SQU5HRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UWVBFLUZSQUNUSU9OLVJBTkdFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUZSQUNUSU9OLVJBTkdFOkNBUFMiPgorPEFOQ0hPUiBpZD0iZ3N0LXZhbHVlLXNldC1mcmFjdGlvbi1yYW5nZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXNldC1mcmFjdGlvbi1yYW5nZSI+Cis8QU5DSE9SIGlkPSJnc3QtdmFsdWUtZ2V0LWZyYWN0aW9uLXJhbmdlLW1pbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1mcmFjdGlvbi1yYW5nZS1taW4iPgorPEFOQ0hPUiBpZD0iZ3N0LXZhbHVlLWdldC1mcmFjdGlvbi1yYW5nZS1tYXgiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtZnJhY3Rpb24tcmFuZ2UtbWF4Ij4KKzxBTkNIT1IgaWQ9ImdzdC12YWx1ZS1zZXQtZnJhY3Rpb24tcmFuZ2UtZnVsbCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXNldC1mcmFjdGlvbi1yYW5nZS1mdWxsIj4KKzxBTkNIT1IgaWQ9IkdTVC1WQUxVRS1IT0xEUy1EQVRFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1EQVRFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVRZUEUtREFURTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1EQVRFOkNBUFMiPgorPEFOQ0hPUiBpZD0iZ3N0LXZhbHVlLXNldC1kYXRlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWRhdGUiPgorPEFOQ0hPUiBpZD0iZ3N0LXZhbHVlLWdldC1kYXRlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWRhdGUiPgorPEFOQ0hPUiBpZD0iR1NULVZBTFVFLUhPTERTLURBVEUtVElNRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtREFURS1USU1FOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVZBTFVFLUhPTERTLUNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1DQVBTIj4KKzxBTkNIT1IgaWQ9ImdzdC12YWx1ZS1zZXQtY2FwcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXNldC1jYXBzIj4KKzxBTkNIT1IgaWQ9ImdzdC12YWx1ZS1nZXQtY2FwcyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1jYXBzIj4KKzxBTkNIT1IgaWQ9IkdTVC1WQUxVRS1IT0xEUy1TVFJVQ1RVUkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLVNUUlVDVFVSRTpDQVBTIj4KKzxBTkNIT1IgaWQ9ImdzdC12YWx1ZS1zZXQtc3RydWN0dXJlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LXN0cnVjdHVyZSI+Cis8QU5DSE9SIGlkPSJnc3QtdmFsdWUtZ2V0LXN0cnVjdHVyZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1zdHJ1Y3R1cmUiPgorPEFOQ0hPUiBpZD0iR1NULVZBTFVFLUhPTERTLUJVRkZFUjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtQlVGRkVSOkNBUFMiPgorPEFOQ0hPUiBpZD0iZ3N0LXZhbHVlLWdldC1idWZmZXIiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtYnVmZmVyIj4KKzxBTkNIT1IgaWQ9ImdzdC12YWx1ZS1zZXQtYnVmZmVyIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWJ1ZmZlciI+Cis8QU5DSE9SIGlkPSJnc3QtdmFsdWUtdGFrZS1idWZmZXIiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS10YWtlLWJ1ZmZlciI+Cis8QU5DSE9SIGlkPSJHU1QtVkFMVUUtTEVTUy1USEFOOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1MRVNTLVRIQU46Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVkFMVUUtRVFVQUw6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUVRVUFMOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVZBTFVFLUdSRUFURVItVEhBTjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtR1JFQVRFUi1USEFOOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVZBTFVFLVVOT1JERVJFRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtVU5PUkRFUkVEOkNBUFMiPgorPEFOQ0hPUiBpZD0iR3N0VmFsdWVDb21wYXJlRnVuYyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR3N0VmFsdWVDb21wYXJlRnVuYyI+Cis8QU5DSE9SIGlkPSJHc3RWYWx1ZVNlcmlhbGl6ZUZ1bmMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dzdFZhbHVlU2VyaWFsaXplRnVuYyI+Cis8QU5DSE9SIGlkPSJHc3RWYWx1ZURlc2VyaWFsaXplRnVuYyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR3N0VmFsdWVEZXNlcmlhbGl6ZUZ1bmMiPgorPEFOQ0hPUiBpZD0iR3N0VmFsdWVVbmlvbkZ1bmMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dzdFZhbHVlVW5pb25GdW5jIj4KKzxBTkNIT1IgaWQ9IkdzdFZhbHVlSW50ZXJzZWN0RnVuYyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR3N0VmFsdWVJbnRlcnNlY3RGdW5jIj4KKzxBTkNIT1IgaWQ9IkdzdFZhbHVlU3VidHJhY3RGdW5jIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHc3RWYWx1ZVN1YnRyYWN0RnVuYyI+Cis8QU5DSE9SIGlkPSJHc3RWYWx1ZVRhYmxlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHc3RWYWx1ZVRhYmxlIj4KKzxBTkNIT1IgaWQ9ImdzdC12YWx1ZS1pcy1maXhlZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWlzLWZpeGVkIj4KKzxBTkNIT1IgaWQ9ImdzdC12YWx1ZS1yZWdpc3RlciIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXJlZ2lzdGVyIj4KKzxBTkNIT1IgaWQ9ImdzdC12YWx1ZS1pbml0LWFuZC1jb3B5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtaW5pdC1hbmQtY29weSI+Cis8QU5DSE9SIGlkPSJnc3QtdmFsdWUtc2VyaWFsaXplIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2VyaWFsaXplIj4KKzxBTkNIT1IgaWQ9ImdzdC12YWx1ZS1kZXNlcmlhbGl6ZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWRlc2VyaWFsaXplIj4KKzxBTkNIT1IgaWQ9ImdzdC12YWx1ZS1jb21wYXJlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtY29tcGFyZSI+Cis8QU5DSE9SIGlkPSJnc3QtdmFsdWUtY2FuLWNvbXBhcmUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1jYW4tY29tcGFyZSI+Cis8QU5DSE9SIGlkPSJnc3QtdmFsdWUtdW5pb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS11bmlvbiI+Cis8QU5DSE9SIGlkPSJnc3QtdmFsdWUtY2FuLXVuaW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtY2FuLXVuaW9uIj4KKzxBTkNIT1IgaWQ9ImdzdC12YWx1ZS1yZWdpc3Rlci11bmlvbi1mdW5jIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtcmVnaXN0ZXItdW5pb24tZnVuYyI+Cis8QU5DSE9SIGlkPSJnc3QtdmFsdWUtc3VidHJhY3QiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zdWJ0cmFjdCI+Cis8QU5DSE9SIGlkPSJnc3QtdmFsdWUtY2FuLXN1YnRyYWN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtY2FuLXN1YnRyYWN0Ij4KKzxBTkNIT1IgaWQ9ImdzdC12YWx1ZS1yZWdpc3Rlci1zdWJ0cmFjdC1mdW5jIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtcmVnaXN0ZXItc3VidHJhY3QtZnVuYyI+Cis8QU5DSE9SIGlkPSJnc3QtdmFsdWUtaW50ZXJzZWN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtaW50ZXJzZWN0Ij4KKzxBTkNIT1IgaWQ9ImdzdC12YWx1ZS1jYW4taW50ZXJzZWN0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtY2FuLWludGVyc2VjdCI+Cis8QU5DSE9SIGlkPSJnc3QtdmFsdWUtcmVnaXN0ZXItaW50ZXJzZWN0LWZ1bmMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1yZWdpc3Rlci1pbnRlcnNlY3QtZnVuYyI+Cis8QU5DSE9SIGlkPSJnc3QtdmFsdWUtYXJyYXktYXBwZW5kLXZhbHVlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtYXJyYXktYXBwZW5kLXZhbHVlIj4KKzxBTkNIT1IgaWQ9ImdzdC12YWx1ZS1hcnJheS1nZXQtc2l6ZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWFycmF5LWdldC1zaXplIj4KKzxBTkNIT1IgaWQ9ImdzdC12YWx1ZS1hcnJheS1nZXQtdmFsdWUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1hcnJheS1nZXQtdmFsdWUiPgorPEFOQ0hPUiBpZD0iZ3N0LXZhbHVlLWFycmF5LXByZXBlbmQtdmFsdWUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1hcnJheS1wcmVwZW5kLXZhbHVlIj4KKzxBTkNIT1IgaWQ9ImdzdC12YWx1ZS1maXhhdGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1maXhhdGUiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdFZlcnNpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWZXJzaW9uLmh0bWwiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdFZlcnNpb24uc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWZXJzaW9uLmh0bWwjZ3N0cmVhbWVyLUdzdFZlcnNpb24uc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdFZlcnNpb24uZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWZXJzaW9uLmh0bWwjZ3N0cmVhbWVyLUdzdFZlcnNpb24uZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdFZlcnNpb24uZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZlcnNpb24uaHRtbCNnc3RyZWFtZXItR3N0VmVyc2lvbi5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdTVC1WRVJTSU9OLU1BSk9SOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RWZXJzaW9uLmh0bWwjR1NULVZFUlNJT04tTUFKT1I6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVkVSU0lPTi1NSU5PUjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sI0dTVC1WRVJTSU9OLU1JTk9SOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVZFUlNJT04tTUlDUk86Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZlcnNpb24uaHRtbCNHU1QtVkVSU0lPTi1NSUNSTzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1WRVJTSU9OLU5BTk86Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZlcnNpb24uaHRtbCNHU1QtVkVSU0lPTi1OQU5POkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNIRUNLLVZFUlNJT046Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFZlcnNpb24uaHRtbCNHU1QtQ0hFQ0stVkVSU0lPTjpDQVBTIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RJbmZvIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RJbmZvLnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdHJlYW1lci1Hc3RJbmZvLnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RJbmZvLmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdHJlYW1lci1Hc3RJbmZvLmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1Hc3RJbmZvLmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0cmVhbWVyLUdzdEluZm8uZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3REZWJ1Z0xldmVsIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnTGV2ZWwiPgorPEFOQ0hPUiBpZD0iR1NULUxFVkVMLU5PTkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTEVWRUwtTk9ORTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1MRVZFTC1FUlJPUjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1MRVZFTC1FUlJPUjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1MRVZFTC1XQVJOSU5HOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUxFVkVMLVdBUk5JTkc6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtTEVWRUwtSU5GTzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1MRVZFTC1JTkZPOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUxFVkVMLURFQlVHOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUxFVkVMLURFQlVHOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUxFVkVMLUxPRzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1MRVZFTC1MT0c6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtTEVWRUwtRklYTUU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTEVWRUwtRklYTUU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtTEVWRUwtVFJBQ0U6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTEVWRUwtVFJBQ0U6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtTEVWRUwtTUVNRFVNUDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1MRVZFTC1NRU1EVU1QOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUxFVkVMLUNPVU5UOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUxFVkVMLUNPVU5UOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUxFVkVMLURFRkFVTFQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTEVWRUwtREVGQVVMVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdzdERlYnVnQ29sb3JGbGFncyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NvbG9yRmxhZ3MiPgorPEFOQ0hPUiBpZD0iR1NULURFQlVHLUZHLUJMQUNLOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUZHLUJMQUNLOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULURFQlVHLUZHLVJFRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1GRy1SRUQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtREVCVUctRkctR1JFRU46Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctRkctR1JFRU46Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtREVCVUctRkctWUVMTE9XOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUZHLVlFTExPVzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1ERUJVRy1GRy1CTFVFOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUZHLUJMVUU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtREVCVUctRkctTUFHRU5UQTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1GRy1NQUdFTlRBOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULURFQlVHLUZHLUNZQU46Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctRkctQ1lBTjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1ERUJVRy1GRy1XSElURTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1GRy1XSElURTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1ERUJVRy1CRy1CTEFDSzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1CRy1CTEFDSzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1ERUJVRy1CRy1SRUQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctQkctUkVEOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULURFQlVHLUJHLUdSRUVOOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUJHLUdSRUVOOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULURFQlVHLUJHLVlFTExPVzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1CRy1ZRUxMT1c6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtREVCVUctQkctQkxVRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1CRy1CTFVFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULURFQlVHLUJHLU1BR0VOVEE6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctQkctTUFHRU5UQTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1ERUJVRy1CRy1DWUFOOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUJHLUNZQU46Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtREVCVUctQkctV0hJVEU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctQkctV0hJVEU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtREVCVUctQk9MRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1CT0xEOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULURFQlVHLVVOREVSTElORTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1VTkRFUkxJTkU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHc3REZWJ1Z0NhdGVnb3J5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnQ2F0ZWdvcnkiPgorPEFOQ0hPUiBpZD0iR3N0RGVidWdHcmFwaERldGFpbHMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdHcmFwaERldGFpbHMiPgorPEFOQ0hPUiBpZD0iR1NULURFQlVHLUdSQVBILVNIT1ctTUVESUEtVFlQRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1HUkFQSC1TSE9XLU1FRElBLVRZUEU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtREVCVUctR1JBUEgtU0hPVy1DQVBTLURFVEFJTFM6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctR1JBUEgtU0hPVy1DQVBTLURFVEFJTFM6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtREVCVUctR1JBUEgtU0hPVy1OT04tREVGQVVMVC1QQVJBTVM6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctR1JBUEgtU0hPVy1OT04tREVGQVVMVC1QQVJBTVM6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtREVCVUctR1JBUEgtU0hPVy1TVEFURVM6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctR1JBUEgtU0hPVy1TVEFURVM6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtREVCVUctR1JBUEgtU0hPVy1BTEw6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctR1JBUEgtU0hPVy1BTEw6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtU1RSLU5VTEw6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtU1RSLU5VTEw6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtREVCVUctUEFELU5BTUU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctUEFELU5BTUU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRlVOQ1RJT046Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtRlVOQ1RJT046Q0FQUyI+Cis8QU5DSE9SIGlkPSJHc3RMb2dGdW5jdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3RMb2dGdW5jdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3QtZGVidWctbG9nIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1sb2ciPgorPEFOQ0hPUiBpZD0iZ3N0LWRlYnVnLWxvZy12YWxpc3QiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWxvZy12YWxpc3QiPgorPEFOQ0hPUiBpZD0iZ3N0LWRlYnVnLW1lc3NhZ2UtZ2V0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1tZXNzYWdlLWdldCI+Cis8QU5DSE9SIGlkPSJnc3QtZGVidWctbG9nLWRlZmF1bHQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWxvZy1kZWZhdWx0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1kZWJ1Zy1sZXZlbC1nZXQtbmFtZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctbGV2ZWwtZ2V0LW5hbWUiPgorPEFOQ0hPUiBpZD0iZ3N0LWRlYnVnLWFkZC1sb2ctZnVuY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWFkZC1sb2ctZnVuY3Rpb24iPgorPEFOQ0hPUiBpZD0iZ3N0LWRlYnVnLXJlbW92ZS1sb2ctZnVuY3Rpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLXJlbW92ZS1sb2ctZnVuY3Rpb24iPgorPEFOQ0hPUiBpZD0iZ3N0LWRlYnVnLXJlbW92ZS1sb2ctZnVuY3Rpb24tYnktZGF0YSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctcmVtb3ZlLWxvZy1mdW5jdGlvbi1ieS1kYXRhIj4KKzxBTkNIT1IgaWQ9ImdzdC1kZWJ1Zy1zZXQtYWN0aXZlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1zZXQtYWN0aXZlIj4KKzxBTkNIT1IgaWQ9ImdzdC1kZWJ1Zy1pcy1hY3RpdmUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWlzLWFjdGl2ZSI+Cis8QU5DSE9SIGlkPSJnc3QtZGVidWctc2V0LWNvbG9yZWQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLXNldC1jb2xvcmVkIj4KKzxBTkNIT1IgaWQ9ImdzdC1kZWJ1Zy1pcy1jb2xvcmVkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1pcy1jb2xvcmVkIj4KKzxBTkNIT1IgaWQ9ImdzdC1kZWJ1Zy1zZXQtZGVmYXVsdC10aHJlc2hvbGQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLXNldC1kZWZhdWx0LXRocmVzaG9sZCI+Cis8QU5DSE9SIGlkPSJnc3QtZGVidWctZ2V0LWRlZmF1bHQtdGhyZXNob2xkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1nZXQtZGVmYXVsdC10aHJlc2hvbGQiPgorPEFOQ0hPUiBpZD0iZ3N0LWRlYnVnLXNldC10aHJlc2hvbGQtZm9yLW5hbWUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLXNldC10aHJlc2hvbGQtZm9yLW5hbWUiPgorPEFOQ0hPUiBpZD0iZ3N0LWRlYnVnLXVuc2V0LXRocmVzaG9sZC1mb3ItbmFtZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctdW5zZXQtdGhyZXNob2xkLWZvci1uYW1lIj4KKzxBTkNIT1IgaWQ9IkdTVC1ERUJVRy1DQVRFR09SWTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1DQVRFR09SWTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1ERUJVRy1DQVRFR09SWS1FWFRFUk46Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctQ0FURUdPUlktRVhURVJOOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULURFQlVHLUNBVEVHT1JZLVNUQVRJQzpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1DQVRFR09SWS1TVEFUSUM6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtREVCVUctQ0FURUdPUlktSU5JVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1DQVRFR09SWS1JTklUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULURFQlVHLUNBVEVHT1JZLUdFVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1DQVRFR09SWS1HRVQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJnc3QtZGVidWctY2F0ZWdvcnktZnJlZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctY2F0ZWdvcnktZnJlZSI+Cis8QU5DSE9SIGlkPSJnc3QtZGVidWctY2F0ZWdvcnktc2V0LXRocmVzaG9sZCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctY2F0ZWdvcnktc2V0LXRocmVzaG9sZCI+Cis8QU5DSE9SIGlkPSJnc3QtZGVidWctY2F0ZWdvcnktcmVzZXQtdGhyZXNob2xkIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1jYXRlZ29yeS1yZXNldC10aHJlc2hvbGQiPgorPEFOQ0hPUiBpZD0iZ3N0LWRlYnVnLWNhdGVnb3J5LWdldC10aHJlc2hvbGQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWNhdGVnb3J5LWdldC10aHJlc2hvbGQiPgorPEFOQ0hPUiBpZD0iZ3N0LWRlYnVnLWNhdGVnb3J5LWdldC1uYW1lIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1jYXRlZ29yeS1nZXQtbmFtZSI+Cis8QU5DSE9SIGlkPSJnc3QtZGVidWctY2F0ZWdvcnktZ2V0LWNvbG9yIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1jYXRlZ29yeS1nZXQtY29sb3IiPgorPEFOQ0hPUiBpZD0iZ3N0LWRlYnVnLWNhdGVnb3J5LWdldC1kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctY2F0ZWdvcnktZ2V0LWRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdC1kZWJ1Zy1nZXQtYWxsLWNhdGVnb3JpZXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWdldC1hbGwtY2F0ZWdvcmllcyI+Cis8QU5DSE9SIGlkPSJnc3QtZGVidWctY29uc3RydWN0LXRlcm0tY29sb3IiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWNvbnN0cnVjdC10ZXJtLWNvbG9yIj4KKzxBTkNIT1IgaWQ9ImdzdC1kZWJ1Zy1jb25zdHJ1Y3Qtd2luLWNvbG9yIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1jb25zdHJ1Y3Qtd2luLWNvbG9yIj4KKzxBTkNIT1IgaWQ9IkdTVC1DQVQtTEVWRUwtTE9HOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUNBVC1MRVZFTC1MT0c6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQ0FULUVSUk9SLU9CSkVDVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtRVJST1ItT0JKRUNUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNBVC1XQVJOSU5HLU9CSkVDVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtV0FSTklORy1PQkpFQ1Q6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQ0FULUlORk8tT0JKRUNUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUNBVC1JTkZPLU9CSkVDVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1DQVQtREVCVUctT0JKRUNUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUNBVC1ERUJVRy1PQkpFQ1Q6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQ0FULUxPRy1PQkpFQ1Q6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULUxPRy1PQkpFQ1Q6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQ0FULUZJWE1FLU9CSkVDVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtRklYTUUtT0JKRUNUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNBVC1UUkFDRS1PQkpFQ1Q6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULVRSQUNFLU9CSkVDVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1DQVQtTUVNRFVNUC1PQkpFQ1Q6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULU1FTURVTVAtT0JKRUNUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNBVC1FUlJPUjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtRVJST1I6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQ0FULVdBUk5JTkc6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULVdBUk5JTkc6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQ0FULUlORk86Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULUlORk86Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQ0FULURFQlVHOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUNBVC1ERUJVRzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1DQVQtTE9HOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUNBVC1MT0c6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQ0FULUZJWE1FOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUNBVC1GSVhNRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1DQVQtVFJBQ0U6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULVRSQUNFOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUNBVC1NRU1EVU1QOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUNBVC1NRU1EVU1QOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVSUk9SLU9CSkVDVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1FUlJPUi1PQkpFQ1Q6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtV0FSTklORy1PQkpFQ1Q6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtV0FSTklORy1PQkpFQ1Q6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtSU5GTy1PQkpFQ1Q6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtSU5GTy1PQkpFQ1Q6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtREVCVUctT0JKRUNUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLU9CSkVDVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1MT0ctT0JKRUNUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUxPRy1PQkpFQ1Q6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRklYTUUtT0JKRUNUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUZJWE1FLU9CSkVDVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UUkFDRS1PQkpFQ1Q6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtVFJBQ0UtT0JKRUNUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULU1FTURVTVAtT0JKRUNUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULU1FTURVTVAtT0JKRUNUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVSUk9SOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUVSUk9SOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULVdBUk5JTkc6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtV0FSTklORzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1JTkZPOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUlORk86Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtREVCVUc6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUc6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtTE9HOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUxPRzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1GSVhNRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1GSVhNRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1UUkFDRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1UUkFDRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1NRU1EVU1QOkNBUFMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULU1FTURVTVA6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtREVCVUctUkVHSVNURVItRlVOQ1BUUjpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1SRUdJU1RFUi1GVU5DUFRSOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULURFQlVHLUZVTkNQVFI6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctRlVOQ1BUUjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1ERUJVRy1GVU5DUFRSLU5BTUU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctRlVOQ1BUUi1OQU1FOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULURFQlVHLUJJTi1UTy1ET1QtRklMRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1CSU4tVE8tRE9ULUZJTEU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtREVCVUctQklOLVRPLURPVC1GSUxFLVdJVEgtVFM6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctQklOLVRPLURPVC1GSUxFLVdJVEgtVFM6Q0FQUyI+Cis8QU5DSE9SIGlkPSJnc3QtZGVidWctcHJpbnQtc3RhY2stdHJhY2UiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLXByaW50LXN0YWNrLXRyYWNlIj4KKzxBTkNIT1IgaWQ9IkdTVC1USU1FLUZPUk1BVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1USU1FLUZPUk1BVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1USU1FLUFSR1M6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtVElNRS1BUkdTOkNBUFMiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdEluZm8uc2VlLWFsc28iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0cmVhbWVyLUdzdEluZm8uc2VlLWFsc28iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLUdzdFRyYWNlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VHJhY2UuaHRtbCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0VHJhY2Uuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUcmFjZS5odG1sI2dzdHJlYW1lci1Hc3RUcmFjZS5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0VHJhY2UuZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUcmFjZS5odG1sI2dzdHJlYW1lci1Hc3RUcmFjZS5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItR3N0VHJhY2UuZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0cmVhbWVyLUdzdFRyYWNlLmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0VHJhY2UiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUcmFjZS5odG1sI0dzdFRyYWNlIj4KKzxBTkNIT1IgaWQ9ImdzdC10cmFjZS1uZXciIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUcmFjZS5odG1sI2dzdC10cmFjZS1uZXciPgorPEFOQ0hPUiBpZD0iZ3N0LXRyYWNlLWRlc3Ryb3kiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUcmFjZS5odG1sI2dzdC10cmFjZS1kZXN0cm95Ij4KKzxBTkNIT1IgaWQ9ImdzdC10cmFjZS1mbHVzaCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LXRyYWNlLWZsdXNoIj4KKzxBTkNIT1IgaWQ9ImdzdC10cmFjZS10ZXh0LWZsdXNoIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtdHJhY2UtdGV4dC1mbHVzaCI+Cis8QU5DSE9SIGlkPSJnc3QtdHJhY2UtYWRkLWVudHJ5IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtdHJhY2UtYWRkLWVudHJ5Ij4KKzxBTkNIT1IgaWQ9ImdzdC10cmFjZS1nZXQtc2l6ZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LXRyYWNlLWdldC1zaXplIj4KKzxBTkNIT1IgaWQ9ImdzdC10cmFjZS1nZXQtb2Zmc2V0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtdHJhY2UtZ2V0LW9mZnNldCI+Cis8QU5DSE9SIGlkPSJnc3QtdHJhY2UtZ2V0LXJlbWFpbmluZyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LXRyYWNlLWdldC1yZW1haW5pbmciPgorPEFOQ0hPUiBpZD0iZ3N0LXRyYWNlLXNldC1kZWZhdWx0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtdHJhY2Utc2V0LWRlZmF1bHQiPgorPEFOQ0hPUiBpZD0iZ3N0LXRyYWNlLXJlYWQtdHNjIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtdHJhY2UtcmVhZC10c2MiPgorPEFOQ0hPUiBpZD0iR3N0QWxsb2NUcmFjZUZsYWdzIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNHc3RBbGxvY1RyYWNlRmxhZ3MiPgorPEFOQ0hPUiBpZD0iR1NULUFMTE9DLVRSQUNFLU5PTkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjR1NULUFMTE9DLVRSQUNFLU5PTkU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQUxMT0MtVFJBQ0UtTElWRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNHU1QtQUxMT0MtVFJBQ0UtTElWRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1BTExPQy1UUkFDRS1NRU0tTElWRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNHU1QtQUxMT0MtVFJBQ0UtTUVNLUxJVkU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHc3RBbGxvY1RyYWNlIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNHc3RBbGxvY1RyYWNlIj4KKzxBTkNIT1IgaWQ9ImdzdC1hbGxvYy10cmFjZS1hdmFpbGFibGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUcmFjZS5odG1sI2dzdC1hbGxvYy10cmFjZS1hdmFpbGFibGUiPgorPEFOQ0hPUiBpZD0iZ3N0LWFsbG9jLXRyYWNlLWxpc3QiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUcmFjZS5odG1sI2dzdC1hbGxvYy10cmFjZS1saXN0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1hbGxvYy10cmFjZS1saXZlLWFsbCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LWFsbG9jLXRyYWNlLWxpdmUtYWxsIj4KKzxBTkNIT1IgaWQ9ImdzdC1hbGxvYy10cmFjZS1wcmludC1hbGwiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUcmFjZS5odG1sI2dzdC1hbGxvYy10cmFjZS1wcmludC1hbGwiPgorPEFOQ0hPUiBpZD0iZ3N0LWFsbG9jLXRyYWNlLXNldC1mbGFncy1hbGwiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUcmFjZS5odG1sI2dzdC1hbGxvYy10cmFjZS1zZXQtZmxhZ3MtYWxsIj4KKzxBTkNIT1IgaWQ9ImdzdC1hbGxvYy10cmFjZS1nZXQiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUcmFjZS5odG1sI2dzdC1hbGxvYy10cmFjZS1nZXQiPgorPEFOQ0hPUiBpZD0iZ3N0LWFsbG9jLXRyYWNlLXByaW50IiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtYWxsb2MtdHJhY2UtcHJpbnQiPgorPEFOQ0hPUiBpZD0iZ3N0LWFsbG9jLXRyYWNlLXByaW50LWxpdmUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUcmFjZS5odG1sI2dzdC1hbGxvYy10cmFjZS1wcmludC1saXZlIj4KKzxBTkNIT1IgaWQ9ImdzdC1hbGxvYy10cmFjZS1zZXQtZmxhZ3MiIGhyZWY9ImdzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUcmFjZS5odG1sI2dzdC1hbGxvYy10cmFjZS1zZXQtZmxhZ3MiPgorPEFOQ0hPUiBpZD0iZ3N0LWFsbG9jLXRyYWNlLXJlZ2lzdGVyIiBocmVmPSJnc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VHJhY2UuaHRtbCNnc3QtYWxsb2MtdHJhY2UtcmVnaXN0ZXIiPgorPEFOQ0hPUiBpZD0iZ3N0LWFsbG9jLXRyYWNlLW5ldyIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LWFsbG9jLXRyYWNlLW5ldyI+Cis8QU5DSE9SIGlkPSJnc3QtYWxsb2MtdHJhY2UtZnJlZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFRyYWNlLmh0bWwjZ3N0LWFsbG9jLXRyYWNlLWZyZWUiPgorPEFOQ0hPUiBpZD0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0tb3V0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9hbm5vdGF0aW9uLWdsb3NzYXJ5Lmh0bWwjYW5ub3RhdGlvbi1nbG9zc3Rlcm0tb3V0Ij4KKzxBTkNIT1IgaWQ9ImFubm90YXRpb24tZ2xvc3N0ZXJtLWFsbG93LW5vbmUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2Fubm90YXRpb24tZ2xvc3NhcnkuaHRtbCNhbm5vdGF0aW9uLWdsb3NzdGVybS1hbGxvdy1ub25lIj4KKzxBTkNIT1IgaWQ9ImFubm90YXRpb24tZ2xvc3N0ZXJtLWlub3V0IiBocmVmPSJnc3RyZWFtZXItMC4xMS9hbm5vdGF0aW9uLWdsb3NzYXJ5Lmh0bWwjYW5ub3RhdGlvbi1nbG9zc3Rlcm0taW5vdXQiPgorPEFOQ0hPUiBpZD0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0tY2xvc3VyZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvYW5ub3RhdGlvbi1nbG9zc2FyeS5odG1sI2Fubm90YXRpb24tZ2xvc3N0ZXJtLWNsb3N1cmUiPgorPEFOQ0hPUiBpZD0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0tdHJhbnNmZXIgbm9uZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvYW5ub3RhdGlvbi1nbG9zc2FyeS5odG1sI2Fubm90YXRpb24tZ2xvc3N0ZXJtLXRyYW5zZmVyIG5vbmUiPgorPEFOQ0hPUiBpZD0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0tYXJyYXkiIGhyZWY9ImdzdHJlYW1lci0wLjExL2Fubm90YXRpb24tZ2xvc3NhcnkuaHRtbCNhbm5vdGF0aW9uLWdsb3NzdGVybS1hcnJheSI+Cis8QU5DSE9SIGlkPSJhbm5vdGF0aW9uLWdsb3NzdGVybS1lbGVtZW50LXR5cGUiIGhyZWY9ImdzdHJlYW1lci0wLjExL2Fubm90YXRpb24tZ2xvc3NhcnkuaHRtbCNhbm5vdGF0aW9uLWdsb3NzdGVybS1lbGVtZW50LXR5cGUiPgorPEFOQ0hPUiBpZD0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0taW4iIGhyZWY9ImdzdHJlYW1lci0wLjExL2Fubm90YXRpb24tZ2xvc3NhcnkuaHRtbCNhbm5vdGF0aW9uLWdsb3NzdGVybS1pbiI+Cis8QU5DSE9SIGlkPSJhbm5vdGF0aW9uLWdsb3NzdGVybS10cmFuc2ZlciBjb250YWluZXIiIGhyZWY9ImdzdHJlYW1lci0wLjExL2Fubm90YXRpb24tZ2xvc3NhcnkuaHRtbCNhbm5vdGF0aW9uLWdsb3NzdGVybS10cmFuc2ZlciBjb250YWluZXIiPgorPEFOQ0hPUiBpZD0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0tdHJhbnNmZXIgZnVsbCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvYW5ub3RhdGlvbi1nbG9zc2FyeS5odG1sI2Fubm90YXRpb24tZ2xvc3N0ZXJtLXRyYW5zZmVyIGZ1bGwiPgorPEFOQ0hPUiBpZD0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0tc2NvcGUgY2FsbCIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvYW5ub3RhdGlvbi1nbG9zc2FyeS5odG1sI2Fubm90YXRpb24tZ2xvc3N0ZXJtLXNjb3BlIGNhbGwiPgorPEFOQ0hPUiBpZD0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0tdHlwZSIgaHJlZj0iZ3N0cmVhbWVyLTAuMTEvYW5ub3RhdGlvbi1nbG9zc2FyeS5odG1sI2Fubm90YXRpb24tZ2xvc3N0ZXJtLXR5cGUiPgpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9sZWZ0LnBuZyBiL2RvY3MvZ3N0L2h0bWwvbGVmdC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQwNWIzZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2h0bWwvbGVmdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9saWJnc3RyZWFtZXIuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvbGliZ3N0cmVhbWVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQyMGRlZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3N0L2h0bWwvbGliZ3N0cmVhbWVyLmh0bWwKQEAgLTAsMCArMSwyMDMgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5HU3RyZWFtZXIgQ29yZSBMaWJyYXJ5PC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1ydW5uaW5nLmh0bWwiIHRpdGxlPSJSdW5uaW5nIEdTdHJlYW1lciBBcHBsaWNhdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwiIHRpdGxlPSJHc3QiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPjx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcnVubmluZy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPsKgPC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj48L3RhYmxlPgorPGRpdiBjbGFzcz0iY2hhcHRlciI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIj4KKzxhIG5hbWU9ImxpYmdzdHJlYW1lciI+PC9hPkdTdHJlYW1lciBDb3JlIExpYnJhcnk8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgorPGRpdiBjbGFzcz0idG9jIj48ZGw+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sIj5Hc3Q8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIE1lZGlhIGxpYnJhcnkgc3VwcG9ydGluZyBhcmJpdHJhcnkgZm9ybWF0cyBhbmQgZmlsdGVyCisgICAgICAgICAgICAgICAgICAgIGdyYXBocy48L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sIj5Hc3RBdG9taWNRdWV1ZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQW4gYXRvbWljIHF1ZXVlIGltcGxlbWVudGF0aW9uPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RCaW4uaHRtbCI+R3N0QmluPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBCYXNlIGNsYXNzIGFuZCBlbGVtZW50IHRoYXQgY2FuIGNvbnRhaW4gb3RoZXIgZWxlbWVudHM8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCI+R3N0QnVmZmVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBEYXRhLXBhc3NpbmcgYnVmZmVyIHR5cGUsIHN1cHBvcnRpbmcgc3ViLWJ1ZmZlcnMuPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0QnVmZmVyTGlzdC5odG1sIj5Hc3RCdWZmZXJMaXN0PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBMaXN0cyBvZiBidWZmZXJzIGZvciBkYXRhLXBhc3Npbmc8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXJQb29sLmh0bWwiPkdzdEJ1ZmZlclBvb2w8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFBvb2wgZm9yIGJ1ZmZlcnM8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdEJ1cy5odG1sIj5Hc3RCdXM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEFzeW5jaHJvbm91cyBtZXNzYWdlIGJ1cyBzdWJzeXN0ZW08L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RDYXBzLmh0bWwiPkdzdENhcHM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFN0cnVjdHVyZSBkZXNjcmliaW5nIHNldHMgb2YgbWVkaWEgZm9ybWF0czwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIj5Hc3RDaGlsZFByb3h5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBJbnRlcmZhY2UgZm9yIG11bHRpIGNoaWxkIGVsZW1lbnRzLjwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0Q2xvY2suaHRtbCI+R3N0Q2xvY2s8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEFic3RyYWN0IGNsYXNzIGZvciBnbG9iYWwgY2xvY2tzPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItZ3N0Y29uZmlnLmh0bWwiPmdzdGNvbmZpZzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQnVpbGQgY29uZmlndXJhdGlvbiBvcHRpb25zPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0RGF0ZVRpbWUuaHRtbCI+R3N0RGF0ZVRpbWU8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEEgZGF0ZSwgdGltZSBhbmQgdGltZXpvbmUgc3RydWN0dXJlPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RFbGVtZW50Lmh0bWwiPkdzdEVsZW1lbnQ8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGFsbCBwaXBlbGluZSBlbGVtZW50czwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCI+R3N0RWxlbWVudEZhY3Rvcnk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIENyZWF0ZSBHc3RFbGVtZW50cyBmcm9tIGEgZmFjdG9yeTwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sIj5Hc3RHRXJyb3I8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIENhdGVnb3JpemVkIGVycm9yIG1lc3NhZ2VzPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCI+R3N0RXZlbnQ8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFN0cnVjdHVyZSBkZXNjcmliaW5nIGV2ZW50cyB0aGF0IGFyZSBwYXNzZWQgdXAgYW5kIGRvd24KKyAgICAgICAgICAgICAgICAgICAgYSBwaXBlbGluZTwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdEZpbHRlci5odG1sIj5Hc3RGaWx0ZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEEgdXRpbGl0eSBmdW5jdGlvbiB0byBmaWx0ZXIgR0xpc3RzLjwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sIj5Hc3RGb3JtYXQ8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIER5bmFtaWNhbGx5IHJlZ2lzdGVyIG5ldyBkYXRhIGZvcm1hdHM8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiPkdzdEdob3N0UGFkPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBQc2V1ZG8gbGluayBwYWRzPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RJbmRleC5odG1sIj5Hc3RJbmRleDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgR2VuZXJhdGUgaW5kZXhlcyBvbiBvYmplY3RzPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RJbmRleEZhY3RvcnkuaHRtbCI+R3N0SW5kZXhGYWN0b3J5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBDcmVhdGUgR3N0SW5kZXhlcyBmcm9tIGEgZmFjdG9yeTwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwiPkdzdEl0ZXJhdG9yPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBPYmplY3QgdG8gcmV0cmlldmUgbXVsdGlwbGUgZWxlbWVudHMgaW4gYSB0aHJlYWRzYWZlCit3YXkuPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0TWVtb3J5Lmh0bWwiPkdzdE1lbW9yeTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgcmVmY291bnRlZCB3cmFwcGVyIGZvciBtZW1vcnkgYmxvY2tzPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIj5Hc3RNZXNzYWdlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBMaWdodHdlaWdodCBvYmplY3RzIHRvIHNpZ25hbCB0aGUgYXBwbGljYXRpb24gb2YKKyAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmUgZXZlbnRzPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sIj5Hc3RNZXRhPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBCdWZmZXIgbWV0YWRhdGE8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwiPkdzdE1pbmlPYmplY3Q8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIExpZ2h0d2VpZ2h0IGJhc2UgY2xhc3MgZm9yIHRoZSBHU3RyZWFtZXIgb2JqZWN0IGhpZXJhcmNoeTwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiPkdzdE9iamVjdDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQmFzZSBjbGFzcyBmb3IgdGhlIEdTdHJlYW1lciBvYmplY3QgaGllcmFyY2h5PC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RQYWQuaHRtbCI+R3N0UGFkPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBPYmplY3QgY29udGFpbmVkIGJ5IGVsZW1lbnRzIHRoYXQgYWxsb3dzIGxpbmtzIHRvCisgICAgICAgICAgICAgICAgICAgIG90aGVyIGVsZW1lbnRzPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIj5Hc3RQYWRUZW1wbGF0ZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgRGVzY3JpYmUgdGhlIG1lZGlhIHR5cGUgb2YgYSBwYWQuPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0UGFyYW1TcGVjLmh0bWwiPkdzdFBhcmFtU3BlYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgR1BhcmFtU3BlYyBpbXBsZW1lbnRhdGlvbnMgc3BlY2lmaWMKK3RvIEdTdHJlYW1lcjwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwiPkdzdFBhcnNlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBHZXQgYSBwaXBlbGluZSBmcm9tIGEgdGV4dCBwaXBlbGluZSBkZXNjcmlwdGlvbjwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCI+R3N0UGlwZWxpbmU8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFRvcC1sZXZlbCBiaW4gd2l0aCBjbG9ja2luZyBhbmQgYnVzIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25hbGl0eS48L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFBsdWdpbi5odG1sIj5Hc3RQbHVnaW48L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIENvbnRhaW5lciBmb3IgZmVhdHVyZXMgbG9hZGVkIGZyb20gYSBzaGFyZWQgb2JqZWN0IG1vZHVsZTwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIj5Hc3RQbHVnaW5GZWF0dXJlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBCYXNlIGNsYXNzIGZvciBjb250ZW50cyBvZiBhIEdzdFBsdWdpbjwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCI+R3N0UG9sbDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgS2VlcCB0cmFjayBvZiBmaWxlIGRlc2NyaXB0b3JzIGFuZCBtYWtlIGl0IHBvc3NpYmxlCisgICAgICAgICAgICAgICAgICAgIHRvIHdhaXQgb24gdGhlbSBpbiBhIGNhbmNlbGFibGUgd2F5PC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RQcmVzZXQuaHRtbCI+R3N0UHJlc2V0PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBoZWxwZXIgaW50ZXJmYWNlIGZvciBlbGVtZW50IHByZXNldHM8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIj5Hc3RRdWVyeTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgRHluYW1pY2FsbHkgcmVnaXN0ZXIgbmV3IHF1ZXJ5IHR5cGVzLiBQcm92aWRlIGZ1bmN0aW9ucworICAgICAgICAgICAgICAgICAgICB0byBjcmVhdGUgcXVlcmllcywgYW5kIHRvIHNldCBhbmQgcGFyc2UgdmFsdWVzIGluIHRoZW0uPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RSZWdpc3RyeS5odG1sIj5Hc3RSZWdpc3RyeTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgbWFuYWdlbWVudCBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiBvYmplY3RzPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0U2VnbWVudC5odG1sIj5Hc3RTZWdtZW50PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBTdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgY29uZmlndXJlZCByZWdpb24gb2YgaW50ZXJlc3QKKyAgICAgICAgICAgICAgICAgICAgaW4gYSBtZWRpYSBmaWxlLjwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIj5Hc3RTdHJ1Y3R1cmU8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEdlbmVyaWMgc3RydWN0dXJlIGNvbnRhaW5pbmcgZmllbGRzIG9mIG5hbWVzIGFuZCB2YWx1ZXM8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFN5c3RlbUNsb2NrLmh0bWwiPkdzdFN5c3RlbUNsb2NrPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBEZWZhdWx0IGNsb2NrIHRoYXQgdXNlcyB0aGUgY3VycmVudCBzeXN0ZW0gdGltZTwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCI+R3N0VGFnTGlzdDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgTGlzdCBvZiB0YWdzIGFuZCB2YWx1ZXMgdXNlZCB0byBkZXNjcmliZSBtZWRpYSBtZXRhZGF0YTwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiPkdzdFRhZ1NldHRlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgRWxlbWVudCBpbnRlcmZhY2UgdGhhdCBhbGxvd3Mgc2V0dGluZyBhbmQgcmV0cmlldmFsCisgICAgICAgICAgICAgICAgICAgIG9mIG1lZGlhIG1ldGFkYXRhPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RUYXNrLmh0bWwiPkdzdFRhc2s8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEFic3RyYWN0aW9uIG9mIEdTdHJlYW1lciBzdHJlYW1pbmcgdGhyZWFkcy48L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwiPkdzdFRhc2tQb29sPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBQb29sIG9mIEdTdHJlYW1lciBzdHJlYW1pbmcgdGhyZWFkczwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwiPkdzdFR5cGVGaW5kPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBTdHJlYW0gdHlwZSBkZXRlY3Rpb248L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sIj5Hc3RUeXBlRmluZEZhY3Rvcnk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEluZm9ybWF0aW9uIGFib3V0IHJlZ2lzdGVyZWQgdHlwZWZpbmQgZnVuY3Rpb25zPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sIj5Hc3RVcmlIYW5kbGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBJbnRlcmZhY2UgdG8gZWFzZSBVUkkgaGFuZGxpbmcgaW4gcGx1Z2lucy48L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIj5Hc3RVdGlsczwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgVmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9uczwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiPkdzdFZhbHVlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBHVmFsdWUgaW1wbGVtZW50YXRpb25zIHNwZWNpZmljCit0byBHU3RyZWFtZXI8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RWZXJzaW9uLmh0bWwiPkdzdFZlcnNpb248L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEdTdHJlYW1lciB2ZXJzaW9uIG1hY3Jvcy48L3NwYW4+Cis8L2R0PgorPC9kbD48L2Rpdj4KKzxwPgorICAgICAgbGliZ3N0cmVhbWVyLTAuMTEuc28gcHJvdmlkZXMgYWxsIHRoZSBjb3JlIEdTdHJlYW1lciBzZXJ2aWNlcywKKyAgICAgIGluY2x1ZGluZyBpbml0aWFsaXphdGlvbiwgcGx1Z2luIG1hbmFnZW1lbnQgYW5kIHR5cGVzLAorICAgICAgYXMgd2VsbCBhcyB0aGUgb2JqZWN0IGhpZXJhcmNoeSB0aGF0IGRlZmluZXMgZWxlbWVudHMgYW5kIGJpbnMsCisgICAgICBhbG9uZyB3aXRoIHNvbWUgbW9yZSBzcGVjaWFsaXplZCBlbGVtZW50cy4KKyAgICA8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL3JpZ2h0LnBuZyBiL2RvY3MvZ3N0L2h0bWwvcmlnaHQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyODMyZTMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dzdC9odG1sL3JpZ2h0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL3N0eWxlLmNzcyBiL2RvY3MvZ3N0L2h0bWwvc3R5bGUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZjZjMjYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dzdC9odG1sL3N0eWxlLmNzcwpAQCAtMCwwICsxLDI2NiBAQAorLnN5bm9wc2lzLCAuY2xhc3NzeW5vcHNpcworeworICAvKiB0YW5nbzphbHVtaW5pdW0gMS8yICovCisgIGJhY2tncm91bmQ6ICNlZWVlZWM7CisgIGJvcmRlcjogc29saWQgMXB4ICNkM2Q3Y2Y7CisgIHBhZGRpbmc6IDAuNWVtOworfQorLnByb2dyYW1saXN0aW5nCit7CisgIC8qIHRhbmdvOnNreSBibHVlIDAvMSAqLworICBiYWNrZ3JvdW5kOiAjZTZmM2ZmOworICBib3JkZXI6IHNvbGlkIDFweCAjNzI5ZmNmOworICBwYWRkaW5nOiAwLjVlbTsKK30KKy52YXJpYWJsZWxpc3QKK3sKKyAgcGFkZGluZzogNHB4OworICBtYXJnaW4tbGVmdDogM2VtOworfQorLnZhcmlhYmxlbGlzdCB0ZDpmaXJzdC1jaGlsZAoreworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCitAbWVkaWEgc2NyZWVuIHsKKyAgc3VwIGEuZm9vdG5vdGUKKyAgeworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICB0b3A6IDBlbSAhIGltcG9ydGFudDsKKyAgICAKKyAgfQorICAvKiB0aGlzIGlzIG5lZWRlZCBzbyB0aGF0IHRoZSBsb2NhbCBhbmNob3JzIGFyZSBkaXNwbGF5ZWQgYmVsb3cgdGhlIG5hdmlhZ3Rpb24gKi8KKyAgZGl2LmZvb3Rub3RlIGFbbmFtZV0sIGRpdi5yZWZuYW1lZGl2IGFbbmFtZV0sIGRpdi5yZWZzZWN0MSBhW25hbWVdLCBkaXYucmVmc2VjdDIgYVtuYW1lXSwgZGl2LmluZGV4IGFbbmFtZV0sIGRpdi5nbG9zc2FyeSBhW25hbWVdLCBkaXYuc2VjdDEgYVtuYW1lXQorICB7CisgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICB0b3A6LTVlbTsKKyAgfQorICAvKiB0aGlzIHNlZW1zIHRvIGJlIGEgYnVnIGluIHRoZSB4c2wgc3R5bGUgc2hlZXRzIHdoZW4gZ2VuZXJhdGluZyBpbmRleGVzICovCisgIGRpdi5pbmRleCBkaXYuaW5kZXgKKyAgeworICAgIHRvcDogMGVtOworICB9CisgIC8qIG1ha2Ugc3BhY2UgZm9yIHRoZSBmaXhlZCBuYXZpZ2F0aW9uIGJhciBhbmQgYWRkIHNwYWNlIGF0IHRoZSBib3R0b20gc28gdGhhdAorICAgKiBsaW5rIHRhcmdldHMgYXBwZWFyIHNvbWV3aGF0IGNsb3NlIHRvIHRvcAorICAgKi8KKyAgYm9keQorICB7CisgICAgcGFkZGluZy10b3A6IDMuMmVtOworICAgIHBhZGRpbmctYm90dG9tOiAyMGVtOworICB9CisgIC8qIHN0eWxlIGFuZCBzaXplIHRoZSBuYXZpZ2F0aW9uIGJhciAqLworICB0YWJsZS5uYXZpZ2F0aW9uI3RvcAorICB7CisgICAgcG9zaXRpb246IGZpeGVkOworICAgIC8qIHRhbmdvOnNjYXJsZXQgcmVkIDAvMSAqLworICAgIGJhY2tncm91bmQ6ICNmZmU2ZTY7CisgICAgYm9yZGVyOiBzb2xpZCAxcHggI2VmMjkyOTsKKyAgICBtYXJnaW4tdG9wOiAwOworICAgIG1hcmdpbi1ib3R0b206IDA7CisgICAgdG9wOiAwOworICAgIGxlZnQ6IDA7CisgICAgaGVpZ2h0OiAzZW07CisgICAgei1pbmRleDogMTA7CisgIH0KKyAgLm5hdmlnYXRpb24gYSwgLm5hdmlnYXRpb24gYTp2aXNpdGVkCisgIHsKKyAgICAvKiB0YW5nbzpzY2FybGV0IHJlZCAzICovCisgICAgY29sb3I6ICNhNDAwMDA7CisgIH0KKyAgLm5hdmlnYXRpb24gYTpob3ZlcgorICB7CisgICAgLyogdGFuZ286c2NhcmxldCByZWQgMSAqLworICAgIGNvbG9yOiAjZWYyOTI5OworICB9CisgIHRkLnNob3J0Y3V0cworICB7CisgICAgLyogdGFuZ286c2NhcmxldCByZWQgMSAqLworICAgIGNvbG9yOiAjZWYyOTI5OworICAgIGZvbnQtc2l6ZTogODAlOworICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgIH0KK30KK0BtZWRpYSBwcmludCB7CisgIHRhYmxlLm5hdmlnYXRpb24geworICAgIHZpc2liaWxpdHk6IGNvbGxhcHNlOworICAgIGRpc3BsYXk6IG5vbmU7CisgIH0KKyAgZGl2LnRpdGxlcGFnZSB0YWJsZS5uYXZpZ2F0aW9uIHsKKyAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOworICAgIGRpc3BsYXk6IHRhYmxlOworICAgIC8qIHRhbmdvOnNjYXJsZXQgcmVkIDAvMSAqLworICAgIGJhY2tncm91bmQ6ICNmZmU2ZTY7CisgICAgYm9yZGVyOiBzb2xpZCAxcHggI2VmMjkyOTsKKyAgICBtYXJnaW4tdG9wOiAwOworICAgIG1hcmdpbi1ib3R0b206IDA7CisgICAgdG9wOiAwOworICAgIGxlZnQ6IDA7CisgICAgaGVpZ2h0OiAzZW07CisgIH0KK30KKworLm5hdmlnYXRpb24gLnRpdGxlCit7CisgIGZvbnQtc2l6ZTogMjAwJTsKK30KKworZGl2LmdhbGxlcnktZmxvYXQKK3sKKyAgZmxvYXQ6IGxlZnQ7CisgIHBhZGRpbmc6IDEwcHg7Cit9CitkaXYuZ2FsbGVyeS1mbG9hdCBpbWcKK3sKKyAgYm9yZGVyLXN0eWxlOiBub25lOworfQorZGl2LmdhbGxlcnktc3BhY2VyCit7CisgIGNsZWFyOiBib3RoOworfQorCithLCBhOnZpc2l0ZWQKK3sKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAvKiB0YW5nbzpza3kgYmx1ZSAyICovCisgIGNvbG9yOiAjMzQ2NWE0OworfQorYTpob3ZlcgoreworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgLyogdGFuZ286c2t5IGJsdWUgMSAqLworICBjb2xvcjogIzcyOWZjZjsKK30KKworZGl2LnRhYmxlIHRhYmxlCit7CisgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CisgIGJvcmRlci1zcGFjaW5nOiAwcHg7CisgIC8qIHRhbmdvOmFsdW1pbml1bSAzICovCisgIGJvcmRlcjogc29saWQgMXB4ICNiYWJkYjY7Cit9CisKK2Rpdi50YWJsZSB0YWJsZSB0ZCwgZGl2LnRhYmxlIHRhYmxlIHRoCit7CisgIC8qIHRhbmdvOmFsdW1pbml1bSAzICovCisgIGJvcmRlcjogc29saWQgMXB4ICNiYWJkYjY7CisgIHBhZGRpbmc6IDNweDsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKworZGl2LnRhYmxlIHRhYmxlIHRoCit7CisgIC8qIHRhbmdvOmFsdW1pbml1bSAyICovCisgIGJhY2tncm91bmQtY29sb3I6ICNkM2Q3Y2Y7Cit9CisKK2hyCit7CisgIC8qIHRhbmdvOmFsdW1pbml1bSAzICovCisgIGNvbG9yOiAjYmFiZGI2OworICBiYWNrZ3JvdW5kOiAjYmFiZGI2OworICBib3JkZXI6IG5vbmUgMHB4OworICBoZWlnaHQ6IDFweDsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5mb290ZXIKK3sKKyAgcGFkZGluZy10b3A6IDMuNWVtOworICAvKiB0YW5nbzphbHVtaW5pdW0gMyAqLworICBjb2xvcjogI2JhYmRiNjsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICBmb250LXNpemU6IDgwJTsKK30KKworLndhcm5pbmcKK3sKKyAgLyogdGFuZ286b3JhbmdlIDAvMSAqLworICBiYWNrZ3JvdW5kOiAjZmZlZWQ5OworICBib3JkZXItY29sb3I6ICNmZmIwNGY7Cit9Cisubm90ZQoreworICAvKiB0YW5nbzpjaGFtZWxlb24gMC8wLjUgKi8KKyAgYmFja2dyb3VuZDogI2Q4ZmZiMjsKKyAgYm9yZGVyLWNvbG9yOiAjYWJmNTYyOworfQorLm5vdGUsIC53YXJuaW5nCit7CisgIHBhZGRpbmc6IDAuNWVtOworICBib3JkZXItd2lkdGg6IDFweDsKKyAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKK30KKy5ub3RlIGgzLCAud2FybmluZyBoMworeworICBtYXJnaW4tdG9wOiAwLjBlbQorfQorLm5vdGUgcCwgLndhcm5pbmcgcAoreworICBtYXJnaW4tYm90dG9tOiAwLjBlbQorfQorCisvKiBibG9iIGxpbmtzICovCitoMiAuZXh0cmFsaW5rcywgaDMgLmV4dHJhbGlua3MKK3sKKyAgZmxvYXQ6IHJpZ2h0OworICAvKiB0YW5nbzphbHVtaW5pdW0gMyAqLworICBjb2xvcjogI2JhYmRiNjsKKyAgZm9udC1zaXplOiA4MCU7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cit9CisKKy5hbm5vdGF0aW9uCit7CisgIC8qIHRhbmdvOmFsdW1pbml1bSA1ICovCisgIGNvbG9yOiAjNTU1NzUzOworICBmb250LXNpemU6IDgwJTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKK30KKworLyogY29kZSBsaXN0aW5ncyAqLworCisubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyAuY2JyYWNrZXQgICB7IGNvbG9yOiAjYTQwMDAwOyB9IC8qIHRhbmdvOiBzY2FybGV0IHJlZCAzICovCisubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyAuY29tbWVudCAgICB7IGNvbG9yOiAjYTFhMzlkOyB9IC8qIHRhbmdvOiBhbHVtaW5pdW0gNCAqLworLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLmZ1bmN0aW9uICAgeyBjb2xvcjogIzAwMDAwMDsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KKy5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5mdW5jdGlvbiBhIHsgY29sb3I6ICMxMTMyNmI7IGZvbnQtd2VpZ2h0OiBib2xkOyB9IC8qIHRhbmdvOiBza3kgYmx1ZSA0ICovCisubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyAua2V5d29yZCAgICB7IGNvbG9yOiAjNGU5YTA2OyB9IC8qIHRhbmdvOiBjaGFtZWxlb24gMyAgKi8KKy5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5saW5lbnVtICAgIHsgY29sb3I6ICNiYWJkYjY7IH0gLyogdGFuZ286IGFsdW1pbml1bSAzICovCisubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyAubm9ybWFsICAgICB7IGNvbG9yOiAjMDAwMDAwOyB9CisubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyAubnVtYmVyICAgICB7IGNvbG9yOiAjNzU1MDdiOyB9IC8qIHRhbmdvOiBwbHVtIDIgKi8KKy5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5wcmVwcm9jICAgIHsgY29sb3I6ICMyMDRhODc7IH0gLyogdGFuZ286IHNreSBibHVlIDMgICovCisubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyAuc3RyaW5nICAgICB7IGNvbG9yOiAjYzE3ZDExOyB9IC8qIHRhbmdvOiBjaG9jb2xhdGUgMiAqLworLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLnR5cGUgICAgICAgeyBjb2xvcjogIzAwMDAwMDsgfQorLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLnR5cGUgYSAgICAgeyBjb2xvcjogIzExMzI2YjsgfSAvKiB0YW5nbzogc2t5IGJsdWUgNCAqLworLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLnN5bWJvbCAgICAgeyBjb2xvcjogI2NlNWMwMDsgfSAvKiB0YW5nbzogb3JhbmdlIDMgKi8KKworLmxpc3RpbmdfZnJhbWUgeworICAvKiB0YW5nbzpza3kgYmx1ZSAxICovCisgIGJvcmRlcjogc29saWQgMXB4ICM3MjlmY2Y7CisgIHBhZGRpbmc6IDBweDsKK30KKworLmxpc3RpbmdfbGluZXMsIC5saXN0aW5nX2NvZGUgeworICBtYXJnaW4tdG9wOiAwcHg7CisgIG1hcmdpbi1ib3R0b206IDBweDsKKyAgcGFkZGluZzogMC41ZW07Cit9CisubGlzdGluZ19saW5lcyB7CisgIC8qIHRhbmdvOnNreSBibHVlIDAuNSAqLworICBiYWNrZ3JvdW5kOiAjYTZjNWUzOworICAvKiB0YW5nbzphbHVtaW5pdW0gNiAqLworICBjb2xvcjogIzJlMzQzNjsKK30KKy5saXN0aW5nX2NvZGUgeworICAvKiB0YW5nbzpza3kgYmx1ZSAwICovCisgIGJhY2tncm91bmQ6ICNlNmYzZmY7Cit9CisubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyB7CisgIC8qIG92ZXJyaWRlIGZyb20gcHJldmlvdXMgKi8KKyAgYm9yZGVyOiBub25lIDBweDsKKyAgcGFkZGluZzogMHB4OworfQorLmxpc3RpbmdfbGluZXMgcHJlLCAubGlzdGluZ19jb2RlIHByZSB7CisgIG1hcmdpbjogMHB4OworfQorCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL3VwLnBuZyBiL2RvY3MvZ3N0L2h0bWwvdXAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YjNlMmEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dzdC9odG1sL3VwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9ydW5uaW5nLnhtbCBiL2RvY3MvZ3N0L3J1bm5pbmcueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MDA0MzcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dzdC9ydW5uaW5nLnhtbApAQCAtMCwwICsxLDI4MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgcmVmZW50cnkgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjMvL0VOIgorICAgICAgICAgICAgICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4zL2RvY2Jvb2t4LmR0ZCIgWworPCFFTlRJVFkgJSB2ZXJzaW9uLWVudGl0aWVzIFNZU1RFTSAidmVyc2lvbi5lbnRpdGllcyI+CisldmVyc2lvbi1lbnRpdGllczsKKzwhRU5USVRZICUgbG9jYWwuY29tbW9uLmF0dHJpYiAieG1sbnM6eGkgIENEQVRBICAjRklYRUQgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUnIj4KK10+Cis8cmVmZW50cnkgaWQ9ImdzdC1ydW5uaW5nIiByZXZpc2lvbj0iMDggT2N0IDIwMDUiPgorPHJlZm1ldGE+Cis8cmVmZW50cnl0aXRsZT5SdW5uaW5nIEdTdHJlYW1lciBBcHBsaWNhdGlvbnM8L3JlZmVudHJ5dGl0bGU+Cis8bWFudm9sbnVtPjM8L21hbnZvbG51bT4KKzxyZWZtaXNjaW5mbz5HU3RyZWFtZXIgQ29yZTwvcmVmbWlzY2luZm8+Cis8L3JlZm1ldGE+CisKKzxyZWZuYW1lZGl2PgorPHJlZm5hbWU+UnVubmluZyBHU3RyZWFtZXIgQXBwbGljYXRpb25zPC9yZWZuYW1lPgorPHJlZnB1cnBvc2U+CitIb3cgdG8gcnVuIGFuZCBkZWJ1ZyB5b3VyIEdTdHJlYW1lciBhcHBsaWNhdGlvbgorPC9yZWZwdXJwb3NlPgorPC9yZWZuYW1lZGl2PgorCis8cmVmc2VjdDE+Cis8dGl0bGU+UnVubmluZyBhbmQgZGVidWdnaW5nIEdTdHJlYW1lciBBcHBsaWNhdGlvbnM8L3RpdGxlPgorCis8cmVmc2VjdDI+Cis8dGl0bGU+RW52aXJvbm1lbnQgdmFyaWFibGVzPC90aXRsZT4KKworPHBhcmE+IAorR1N0cmVhbWVyIGluc3BlY3RzIGEgZmV3IG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZAordmFyaWFibGVzIGxpa2UgPGVudmFyPkxBTkc8L2VudmFyPiwgPGVudmFyPlBBVEg8L2VudmFyPiBvciA8ZW52YXI+SE9NRTwvZW52YXI+LiAKKzwvcGFyYT4KKworPGZvcm1hbHBhcmEgaWQ9IkdTVF9QTFVHSU5fU1lTVEVNX1BBVEgiPgorICA8dGl0bGU+PGVudmFyPkdTVF9QTFVHSU5fU1lTVEVNX1BBVEg8L2VudmFyPjwvdGl0bGU+CisKKyAgPHBhcmE+CisKK1RoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgY2FuIGJlIHNldCB0byBhIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIHBhdGhzLgorSWYgdGhpcyB2YXJpYWJsZSBpcyBub3Qgc2V0LCBHU3RyZWFtZXIgd2lsbCBmaWxsIGluIHRoaXMgbGlzdCBmb3IgeW91Cit3aXRoCis8aXRlbWl6ZWRsaXN0PgorICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CitwbHVnLWlucyBpbiB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5LiAgVGhlc2UgYXJlIHN0b3JlZCBpbiBhIGRpcmVjdG9yeSBjYWxsZWQKKzxmaWxlbmFtZT5wbHVnaW5zPC9maWxlbmFtZT4gaW5zaWRlIHRoZQorPGZpbGVuYW1lPi5nc3RyZWFtZXItJkdTVF9NQUpPUk1JTk9SOzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpbiB0aGUgdXNlcidzCitob21lIGRpcmVjdG9yeS4KKyAgICA8L3BhcmE+CisgIDwvbGlzdGl0ZW0+CisgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KK3BsdWctaW5zIGluc3RhbGxlZCBzeXN0ZW0td2lkZS4gIE9uIHRoaXMgc3lzdGVtLCB0aGV5IGFyZSBzdG9yZWQgaW4KKzxmaWxlbmFtZT4mR1NUX1BMVUdJTlNfRElSOzwvZmlsZW5hbWU+LgorICAgIDwvcGFyYT4KKworPC9saXN0aXRlbT4KKzwvaXRlbWl6ZWRsaXN0PgorICAgPC9wYXJhPgorCisgICAgPHBhcmE+CitHU3RyZWFtZXIgd2lsbCBzY2FuIHRoZXNlIHBhdGhzIGZvciBHU3RyZWFtZXIgcGx1Zy1pbnMuICBUaGVzZSBwbHVnLWlucyB3aWxsCitiZSBsb2FkZWQgYWZ0ZXIgdGhlIHBsdWctaW5zIGluIHRoZSBHU1RfUExVR0lOX1BBVEggdmFyaWFibGUgYmVsb3cuCisKK1RoZSBwYXRocyBhcmUgc2Nhbm5lZCBpbiB0aGUgZ2l2ZW4gb3JkZXIuICBUaGlzIGFsbG93cyBhIHVzZXIgdG8gb3ZlcnJpZGUKK3N5c3RlbS1pbnN0YWxsZWQgcGx1Zy1pbnMgd2l0aCBoaXMgb3duIHZlcnNpb25zLgorICAgPC9wYXJhPgorCisgICAgPHBhcmE+CitTZXR0aW5nIHRoaXMgdmFyaWFibGUgdG8gYW4gZW1wdHkgc3RyaW5nIHdpbGwgY2F1c2UgR1N0cmVhbWVyIG5vdCB0byBzY2FuIGFueQorc3lzdGVtIHBhdGhzIGF0IGFsbCBmb3IgcGx1Zy1pbnMuICBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91J3JlIHJ1bm5pbmcKK3VuaW5zdGFsbGVkIChmb3IgZGV2ZWxvcG1lbnQgcHVycG9zZXMpIG9yIHdoaWxlIHJ1bm5pbmcgdGVzdHN1aXRlcy4KKyAgIDwvcGFyYT4KKworPC9mb3JtYWxwYXJhPgorCis8Zm9ybWFscGFyYSBpZD0iR1NUX1BMVUdJTl9QQVRIIj4KKyAgPHRpdGxlPjxlbnZhcj5HU1RfUExVR0lOX1BBVEg8L2VudmFyPjwvdGl0bGU+CisKKyAgPHBhcmE+CitUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBwYXRocy4KK0dTdHJlYW1lciB3aWxsIHNjYW4gdGhlc2UgcGF0aHMgZm9yIEdTdHJlYW1lciBwbHVnLWlucy4gIFRoZXNlIHBsdWctaW5zIHdpbGwKK2JlIGxvYWRlZCBpbiBhZGRpdGlvbiB0bywgYW5kIGJlZm9yZSwgdGhlIHBsdWctaW5zIGluIHRoZSBzeXN0ZW0gcGF0aHMuCisgIDwvcGFyYT4KKworPC9mb3JtYWxwYXJhPgorCis8Zm9ybWFscGFyYSBpZD0iR1NUX0RFQlVHIj4KKyAgPHRpdGxlPjxlbnZhcj5HU1RfREVCVUc8L2VudmFyPjwvdGl0bGU+CisKKyAgPHBhcmE+CitJZiBHU3RyZWFtZXIgaGFzIGJlZW4gY29uZmlndXJlZCB3aXRoIDxvcHRpb24+LS1lbmFibGUtZ3N0LWRlYnVnPXllczwvb3B0aW9uPiwKK3RoaXMgdmFyaWFibGUgY2FuIGJlIHNldCB0byBhIGxpc3Qgb2YgZGVidWcgb3B0aW9ucywgd2hpY2ggY2F1c2UgR1N0cmVhbWVyCit0byBwcmludCBvdXQgZGlmZmVyZW50IHR5cGVzIG9mIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiB0byBzdGRlcnIuCisgIDwvcGFyYT4KKyAgPHBhcmE+CitUaGUgdmFyaWFibGUgdGFrZXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiAiY2F0ZWdvcnlfbmFtZTpsZXZlbCIgcGFpcnMKK3RvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yIHRoZSBpbmRpdmlkdWFsIGNhdGVnb3JpZXMuCitUaGUgbGV2ZWwgdmFsdWUgcmFuZ2VzIGZyb20gMCAobm90aGluZykgdG8gNSAoTE9HKS4KKyAgICA8dmFyaWFibGVsaXN0PgorCisgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICA8dGVybT4xIC0gPG9wdGlvbj5FUlJPUjwvb3B0aW9uPjwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPgorPHBhcmE+CitMb2dzIGFsbCBmYXRhbCBlcnJvcnMuICBUaGVzZSBhcmUgZXJyb3JzIHRoYXQgZG8gbm90IGFsbG93IHRoZSBjb3JlIG9yIGVsZW1lbnRzCit0byBwZXJmb3JtIHRoZSByZXF1ZXN0ZWQgYWN0aW9uLiAgVGhlIGFwcGxpY2F0aW9uIGNhbiBzdGlsbCByZWNvdmVyIGlmCitwcm9ncmFtbWVkIHRvIGhhbmRsZSB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXJlZCB0aGUgZXJyb3IuCis8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgPHRlcm0+MiAtIDxvcHRpb24+V0FSTklORzwvb3B0aW9uPjwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPgorPHBhcmE+CitMb2dzIGFsbCB3YXJuaW5ncy4gIFR5cGljYWxseSB0aGVzZSBhcmUgbm9uLWZhdGFsLCBidXQgdXNlci12aXNpYmxlIHByb2JsZW1zCithcmUgZXhwZWN0ZWQgdG8gaGFwcGVuLgorPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgIDx0ZXJtPjMgLSA8b3B0aW9uPklORk88L29wdGlvbj48L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT4KKzxwYXJhPgorTG9ncyBhbGwgaW5mb3JtYXRpb25hbCBtZXNzYWdlcy4gIFRoZXNlIGFyZSB0eXBpY2FsbHkgdXNlZCBmb3IgZXZlbnRzIGluCit0aGUgc3lzdGVtIHRoYXQgb25seSBoYXBwZW4gb25jZSwgb3IgYXJlIGltcG9ydGFudCBhbmQgcmFyZSBlbm91Z2ggdG8gYmUKK2xvZ2dlZCBhdCB0aGlzIGxldmVsLgorPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgIDx0ZXJtPjQgLSA8b3B0aW9uPkRFQlVHPC9vcHRpb24+PC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+Cis8cGFyYT4KK0xvZ3MgYWxsIGRlYnVnIG1lc3NhZ2VzLiAgVGhlc2UgYXJlIGdlbmVyYWwgZGVidWcgbWVzc2FnZXMgZm9yIGV2ZW50cwordGhhdCBoYXBwZW4gb25seSBhIGxpbWl0ZWQgbnVtYmVyIG9mIHRpbWVzIGR1cmluZyBhbiBvYmplY3QncyBsaWZldGltZTsKK3RoZXNlIGluY2x1ZGUgc2V0dXAsIHRlYXJkb3duLCBjaGFuZ2Ugb2YgcGFyYW1ldGVycywgLi4uCis8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgPHRlcm0+NSAtIDxvcHRpb24+TE9HPC9vcHRpb24+PC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+Cis8cGFyYT4KK0xvZ3MgYWxsIGxvZyBtZXNzYWdlcy4gIFRoZXNlIGFyZSBtZXNzYWdlcyBmb3IgZXZlbnRzCit0aGF0IGhhcHBlbiByZXBlYXRlZGx5IGR1cmluZyBhbiBvYmplY3QncyBsaWZldGltZTsKK3RoZXNlIGluY2x1ZGUgc3RyZWFtaW5nIGFuZCBzdGVhZHktc3RhdGUgY29uZGl0aW9ucy4KKzwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorCisgVGhlIGNhdGVnb3J5X25hbWUgY2FuIGNvbnRhaW4gIjxvcHRpb24+KiI8L29wdGlvbj4gYXMgYSB3aWxkY2FyZC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorRm9yIGV4YW1wbGUsIHNldHRpbmcgPGVudmFyPkdTVF9ERUJVRzwvZW52YXI+IHRvCis8b3B0aW9uPkdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6Mzwvb3B0aW9uPiwgd2lsbCBjYXVzZSB0aGUKKzxvcHRpb24+R1NUX0FVVE9QTFVHPC9vcHRpb24+IGNhdGVnb3J5IHRvIGJlIGxvZ2dlZCBhdCBmdWxsCis8b3B0aW9uPkxPRzwvb3B0aW9uPiBsZXZlbCwgd2hpbGUgYWxsIGNhdGVnb3JpZXMgc3RhcnRpbmcgd2l0aAorPG9wdGlvbj5HU1RfRUxFTUVOVF88L29wdGlvbj4gd2lsbCBiZSBsb2dnZWQgYXQgPG9wdGlvbj5JTkZPPC9vcHRpb24+IGxldmVsLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CitUbyBnZXQgYWxsIHBvc3NpYmxlIGRlYnVnIG91dHB1dCwgc2V0Cis8ZW52YXI+R1NUX0RFQlVHPC9lbnZhcj4KK3RvIDxvcHRpb24+Kjo1PC9vcHRpb24+CisgIDwvcGFyYT4KKworPC9mb3JtYWxwYXJhPgorCis8Zm9ybWFscGFyYSBpZD0iR1NUX0RFQlVHX05PX0NPTE9SIj4KKyAgPHRpdGxlPjxlbnZhcj5HU1RfREVCVUdfTk9fQ09MT1I8L2VudmFyPjwvdGl0bGU+CisKKyAgPHBhcmE+CitTZXQgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBhbnkgdmFsdWUgKCIxIiB0eXBpY2FsbHkpIHRvIHN3aXRjaCBvZmYKK2NvbG91cmluZyBpbiBHU1RfREVCVUcgb3V0cHV0LiBUaGlzIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgc3BlY2lmeWluZyB0aGUKKzxvcHRpb24+LS1nc3QtZGVidWctbm8tY29sb3I8L29wdGlvbj4gY29tbWFuZCBsaW5lIG9wdGlvbiB0byB3ZWxsLWJlaGF2ZWQKK0dTdHJlYW1lciBhcHBsaWNhdGlvbnMgKGllLiB0aG9zZSB0aGF0IHBhc3MgY29tbWFuZC1saW5lIG9wdGlvbnMgY29ycmVjdGx5IHRvCitHU3RyZWFtZXIpLgorVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiBkZWJ1ZyBvdXRwdXQgYW5kIGFsc28gYWxsb3dzCitmb3IgdGhlIG91dHB1dCB0byBiZSBjb21wcmVzc2VkIG11Y2ggYmV0dGVyIHRoYW4gd2l0aCBjb2xvdXJzIHR1cm5lZCBvbi4KKyAgPC9wYXJhPgorCis8L2Zvcm1hbHBhcmE+CisKKzxmb3JtYWxwYXJhIGlkPSJHU1RfREVCVUdfT1BUSU9OUyI+CisgIDx0aXRsZT48ZW52YXI+R1NUX0RFQlVHX09QVElPTlM8L2VudmFyPjwvdGl0bGU+CisKKyAgPHBhcmE+CitUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIHR3ZWFrIHRoZSBiZWhhdmlvdXIgb2YgdGhlIGRlYnVnZ2luZworc3lzdGVtLiBDdXJyZW50bHkgdGhlIG9ubHkgb3B0aW9ucyBzdXBwb3J0ZWQgYXJlICJwcmV0dHktdGFncyIgYW5kICJmdWxsLXRhZ3MiLgorSW4gInByZXR0eS10YWdzIiBtb2RlICh0aGUgZGVmYXVsdCksIHRhZ2xpc3RzIGluIHRoZSBkZWJ1ZyBsb2cgd2lsbCBiZQorc2VyaWFsaXplZCBzbyB0aGF0IG9ubHkgdGhlIGZpcnN0IGZldyBhbmQgbGFzdCBmZXcgYnl0ZXMgb2YgYSBidWZmZXItdHlwZSB0YWcKK3dpbGwgYmUgc2VyaWFsaXplZCBpbnRvIHRoZSBsb2csIHRvIGF2b2lkIGR1bXBpbmcgaHVuZHJlZHMgb2YgbGluZXMgb2YgdXNlbGVzcworb3V0cHV0IGludG8gdGhlIGxvZyBpbiBjYXNlIG9mIGxhcmdlIGltYWdlIHRhZ3MgYW5kIHRoZSBsaWtlLgorICA8L3BhcmE+CisKKzwvZm9ybWFscGFyYT4KKworPGZvcm1hbHBhcmEgaWQ9IkdTVF9ERUJVR19EVU1QX0RPVF9ESVIiPgorICA8dGl0bGU+PGVudmFyPkdTVF9ERUJVR19EVU1QX0RPVF9ESVI8L2VudmFyPjwvdGl0bGU+CisKKyAgPHBhcmE+CitTZXQgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBhIHBhdGggdG8gdHVybiBvbiBhbGwKKyNHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFIG9yICNHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFX1dJVEhfVFMgY2FsbHMKK2FuZCBoYXZlIHRoZSBkb3QgZmlsZXMgaW4gdGhhdCBsb2NhdGlvbi4KKyAgPC9wYXJhPgorCis8L2Zvcm1hbHBhcmE+CisKKzxmb3JtYWxwYXJhIGlkPSJHU1RfUkVHSVNUUllfRk9SSyI+CisgIDx0aXRsZT48ZW52YXI+R1NUX1JFR0lTVFJZX0ZPUks8L2VudmFyPjwvdGl0bGU+CisKKyAgPHBhcmE+CitTZXQgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byAibm8iIHRvIHByZXZlbnQgR1N0cmVhbWVyIGZyb20gZm9ya2luZyBvbgorc3RhcnR1cCBpbiBvcmRlciB0byB1cGRhdGUgdGhlIHBsdWdpbiByZWdpc3RyeS4gVGhpcyBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZworcHVycG9zZXMsIGJ1dCBzaG91bGQgbm90IGJlIHVzZWQgdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMsIHNpbmNlIGl0IG1lYW5zCit0aGF0IHBsdWdpbnMgbWF5IGJlIGxvYWRlZCBpbnRvIG1lbW9yeSBldmVuIGlmIHRoZXkgYXJlIG5vdCBuZWVkZWQgYnkgdGhlCithcHBsaWNhdGlvbi4KKyAgPC9wYXJhPgorCis8L2Zvcm1hbHBhcmE+CisKKzxmb3JtYWxwYXJhIGlkPSJHU1RfUkVHSVNUUllfVVBEQVRFIj4KKyAgPHRpdGxlPjxlbnZhcj5HU1RfUkVHSVNUUllfVVBEQVRFPC9lbnZhcj48L3RpdGxlPgorCisgIDxwYXJhPgorU2V0IHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gIm5vIiB0byBwcmV2ZW50IEdTdHJlYW1lciBmcm9tIHVwZGF0aW5nIHRoZQorcGx1Z2luIHJlZ2lzdHJ5LiBUaGlzIGlzIHVzZWZ1bCBmb3IgZW1iZWRkZWQgZGV2aWNlIHdoaWNoIGlzIG5vdCB1cGRhdGluZyB0aGUKK3BsdWdpbnMgZnJlcXVlbnRseSwgaXQgd2lsbCBzYXZlIHRpbWUgd2hlbiBkb2luZyBnc3RfaW5pdCgpLgorICA8L3BhcmE+CisKKzwvZm9ybWFscGFyYT4KKworPGZvcm1hbHBhcmEgaWQ9Ik9SQ19DT0RFIj4KKyAgPHRpdGxlPjxlbnZhcj5PUkNfQ09ERTwvZW52YXI+PC90aXRsZT4KKworICA8cGFyYT4KK1VzZWZ1bCBPcmMgZW52aXJvbm1lbnQgdmFyaWFibGUuIFNldCBPUkNfQ09ERT1kZWJ1ZyB0byBlbmFibGUgZGVidWdnZXJzCitzdWNoIGFzIGdkYiB0byBjcmVhdGUgdXNlZnVsIGJhY2t0cmFjZXMgZnJvbSBPcmMtZ2VuZXJhdGVkIGNvZGUuICBTZXQKK09SQ19DT0RFPWJhY2t1cCBvciBPUkNfQ09ERT1lbXVsYXRlIGlmIHlvdSBzdXNwZWN0IE9yYydzIFNJTUQgY29kZQorZ2VuZXJhdG9yIGlzIHByb2R1Y2luZyBpbmNvcnJlY3QgY29kZSAoUXVpdGUgYSBmZXcgaW1wb3J0YW50CitHU3RyZWFtZXIgcGx1Z2lucyBsaWtlIHZpZGVvdGVzdHNyYywgYXVkaW9jb252ZXJ0IG9yIGF1ZGlvcmVzYW1wbGUgdXNlIE9yYykuCitPbmUgY2FuIGFsc28gY29tYmluZSBmbGFncyBsaWtlIE9SQ19DT0RFPWJhY2t1cCxkZWJ1Zy4KKyAgPC9wYXJhPgorCis8L2Zvcm1hbHBhcmE+CisKKzxmb3JtYWxwYXJhIGlkPSJHX0RFQlVHIj4KKyAgPHRpdGxlPjxlbnZhcj5HX0RFQlVHPC9lbnZhcj48L3RpdGxlPgorCisgIDxwYXJhPgorVXNlZnVsIEdMaWIgZW52aXJvbm1lbnQgdmFyaWFibGUuIFNldCBHX0RFQlVHPWZhdGFsX3dhcm5pbmdzIHRvIG1ha2UKK0dTdHJlYW1lciBwcm9ncmFtcyBhYm9ydCB3aGVuIGEgY3JpdGljYWwgd2FybmluZyBzdWNoIGFzIGFuIGFzc2VydGlvbiBmYWlsdXJlCitvY2N1cnMuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGZpbmQgb3V0IHdoaWNoIHBhcnQgb2YgdGhlIGNvZGUgY2F1c2VkCit0aGF0IHdhcm5pbmcgdG8gYmUgdHJpZ2dlcmVkIGFuZCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMuIFNpbXBseSBzZXQgR19ERUJVRworYXMgbWVudGlvbmVkIGFib3ZlIGFuZCBydW4gdGhlIHByb2dyYW0gaW4gZ2RiIChvciBsZXQgaXQgY29yZSBkdW1wKS4gVGhlbiBnZXQKK2Egc3RhY2sgdHJhY2UgaW4gdGhlIHVzdWFsIHdheS4KKyAgPC9wYXJhPgorCis8L2Zvcm1hbHBhcmE+CisKKzxmb3JtYWxwYXJhIGlkPSJHX1NMSUNFIj4KKyAgPHRpdGxlPjxlbnZhcj5HX1NMSUNFPC9lbnZhcj48L3RpdGxlPgorCisgIDxwYXJhPgorVXNlZnVsIEdMaWIgZW52aXJvbm1lbnQgdmFyaWFibGUuIFNldCBHX1NMSUNFPWFsd2F5cy1tYWxsb2Mgd2hlbiBydW5uaW5nCitHU3RyZWFtZXIgcHJvZ3JhbXMgaW4gdmFsZ3JpbmQsIG9yIGRlYnVnZ2luZyBtZW1vcnkgbGVha3Mgd2l0aCBvdGhlciB0b29scy4KK1NlZSB0aGUgR0xpYiBBUEkgcmVmZXJlbmNlIGZvciBtb3JlIGRldGFpbHMuCisgIDwvcGFyYT4KKworPC9mb3JtYWxwYXJhPgorCis8L3JlZnNlY3QyPgorCis8L3JlZnNlY3QxPgorCis8L3JlZmVudHJ5PgpkaWZmIC0tZ2l0IGEvZG9jcy9odG1saW5zdGFsbC5tYWsgYi9kb2NzL2h0bWxpbnN0YWxsLm1hawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzA2MjMyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9odG1saW5zdGFsbC5tYWsKQEAgLTAsMCArMSwxNSBAQAorIyB0aGlzIGZpbGUgYWRkcyBydWxlcyBmb3IgaW5zdGFsbGluZyBodG1sIHN1YnRyZWVzCisjIEkgcmVhbGx5IGRvbid0IGxpa2UgdGhpcyBoYWNrLCBidXQgYXV0b21ha2UgZG9lc24ndCBzZWVtIHRvIHdhbnQgdG8KKyMgaW5zdGFsbCBkaXJlY3RvcnkgdHJlZXMgOigKKworaWYgRE9DX0hUTUwKK2luc3RhbGwtZGF0YS1sb2NhbDogaHRtbAorCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQoZG9jZGlyKS8kKERPQykKKwljcCAtcHIgJChIVE1MX0RBVCkgJChERVNURElSKSQoZG9jZGlyKS8kKERPQykKKwordW5pbnN0YWxsLWxvY2FsOgorCWZvciBwYXJ0IGluICQoSFRNTF9EQVQpOyBkbyBybSAtcmYgJChERVNURElSKSQoZG9jZGlyKS8kKERPQykvJCRwYXJ0OyBkb25lCitlbHNlCitpbnN0YWxsLWRhdGEtbG9jYWw6Cit1bmluc3RhbGwtbG9jYWw6CitlbmRpZgpkaWZmIC0tZ2l0IGEvZG9jcy9pbWFnZS1lcHMgYi9kb2NzL2ltYWdlLWVwcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmM4ZTA0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9pbWFnZS1lcHMKQEAgLTAsMCArMSwyIEBACis8IUVOVElUWSBpbWFnZSAicHMiPgorPCFFTlRJVFkgSU1BR0UgIkVQUyI+CmRpZmYgLS1naXQgYS9kb2NzL2ltYWdlLXBkZiBiL2RvY3MvaW1hZ2UtcGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMmRhNGQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2ltYWdlLXBkZgpAQCAtMCwwICsxLDIgQEAKKzwhRU5USVRZIGltYWdlICJwZGYiPgorPCFFTlRJVFkgSU1BR0UgIkVQUyI+CmRpZmYgLS1naXQgYS9kb2NzL2ltYWdlLXBuZyBiL2RvY3MvaW1hZ2UtcG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiODk0M2UKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2ltYWdlLXBuZwpAQCAtMCwwICsxLDIgQEAKKzwhRU5USVRZIGltYWdlICJwbmciPgorPCFFTlRJVFkgSU1BR0UgIlBORyI+CmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvTWFrZWZpbGUuYW0gYi9kb2NzL2xpYnMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY5NmY5NgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbGlicy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDc4IEBACisjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KKworIyBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlLCBlLmcuICdnbGliJy4KKyNET0NfTU9EVUxFPWdzdHJlYW1lci1saWJzLUBHU1RfTUFKT1JNSU5PUkAKK0RPQ19NT0RVTEU9Z3N0cmVhbWVyLWxpYnMKKworIyBkb24ndCB3YW50ICQoRE9DX01PRFVMRSktc2Nhbi5jIHRvIGJlIGJ1aWx0IHdpdGggLVdlcnJvcgorRVJST1JfQ0ZMQUdTPQorCisjIGZvciB1cGxvYWQtZG9jLm1haworRE9DPWdzdHJlYW1lci1saWJzCitGT1JNQVRTPWh0bWwKK2h0bWw6IGh0bWwtYnVpbGQuc3RhbXAKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb21tb24vdXBsb2FkLWRvYy5tYWsKKworIyBUaGUgdG9wLWxldmVsIFNHTUwgZmlsZS4gQ2hhbmdlIGl0IGlmIHlvdSB3YW50LgorRE9DX01BSU5fU0dNTF9GSUxFPSQoRE9DX01PRFVMRSktZG9jcy5zZ21sCisKKyMgVGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBzb3VyY2UgY29kZS4KKyMgZ3RrLWRvYyB3aWxsIHNlYXJjaCBhbGwgLmMgJiAuaCBmaWxlcyBiZW5lYXRoIGhlcmUgZm9yIGlubGluZSBjb21tZW50cworIyBkb2N1bWVudGluZyBmdW5jdGlvbnMgYW5kIG1hY3Jvcy4KK0RPQ19TT1VSQ0VfRElSPSQodG9wX3NyY2RpcikvbGlicy9nc3QKKworIyBFeHRyYSBvcHRpb25zIHRvIHN1cHBseSB0byBndGtkb2Mtc2Nhbi4KK1NDQU5fT1BUSU9OUz0tLWRlcHJlY2F0ZWQtZ3VhcmRzPSJHU1RfRElTQUJMRV9ERVBSRUNBVEVEIgorCisjIEV4dHJhIG9wdGlvbnMgdG8gc3VwcGx5IHRvIGd0a2RvYy1ta2RiLgorTUtEQl9PUFRJT05TPS0tc2dtbC1tb2RlIC0tb3V0cHV0LWZvcm1hdD14bWwKKworIyBFeHRyYSBvcHRpb25zIHRvIHN1cHBseSB0byBndGtkb2MtZml4cmVmLgorRklYWFJFRl9PUFRJT05TPS0tZXh0cmEtZGlyPSQodG9wX2J1aWxkZGlyKS9kb2NzL2dzdC9odG1sIFwKKwktLWV4dHJhLWRpcj0kKEdMSUJfUFJFRklYKS9zaGFyZS9ndGstZG9jL2h0bWwgXAorCS0tZXh0cmEtZGlyPSQoZGF0YWRpcikvZ3RrLWRvYy9odG1sCisKKyMgVXNlZCBmb3IgZGVwZW5kZW5jaWVzLgorSEZJTEVfR0xPQj0kKHRvcF9zcmNkaXIpL2xpYnMvZ3N0LyovKi5oCitDRklMRV9HTE9CPSQodG9wX3NyY2RpcikvbGlicy9nc3QvKi8qLmMKKworIyBFeHRyYSBvcHRpb25zIHRvIHBhc3MgdG8gZ3RrZG9jLXNjYW5vYmogb3IgZ3RrZG9jLXNjYW5nb2JqLgorU0NBTk9CSl9PUFRJT05TPS0tdHlwZS1pbml0LWZ1bmM9ImdfdHlwZV9pbml0KCk7Z3N0X2luaXQoJmFyZ2MsJmFyZ3YpIgorCisjIEhlYWRlciBmaWxlcyB0byBpZ25vcmUgd2hlbiBzY2FubmluZy4KK0lHTk9SRV9IRklMRVMgPSBcCisJZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2Vwcml2YXRlLmggXAorCWdzdGxmb2NvbnRyb2xzb3VyY2Vwcml2YXRlLmggXAorCWdzdGNvbnRyb2xsZXJwcml2YXRlLmggXAorCWdzdGdldGJpdHNfaW5sLmggXAorCWRwLXByaXZhdGUuaAorCisjIEltYWdlcyB0byBjb3B5IGludG8gSFRNTCBkaXJlY3RvcnkuCitIVE1MX0lNQUdFUyA9IGdkcC1oZWFkZXIucG5nCisKKyMgRXh0cmEgU0dNTCBmaWxlcyB0aGF0IGFyZSBpbmNsdWRlZCBieSAkKERPQ19NQUlOX1NHTUxfRklMRSkuCitjb250ZW50X2ZpbGVzID0KKworIyBPdGhlciBmaWxlcyB0byBkaXN0cmlidXRlLgorZXh0cmFfZmlsZXMgPQorCisjIENGTEFHUyBhbmQgTERGTEFHUyBmb3IgY29tcGlsaW5nIHNjYW4gcHJvZ3JhbS4gT25seSBuZWVkZWQgaWYgeW91ciBhcHAvbGliCisjIGNvbnRhaW5zIEd0a09iamVjdHMvR09iamVjdHMgYW5kIHlvdSB3YW50IHRvIGRvY3VtZW50IHNpZ25hbHMgYW5kIHByb3BlcnRpZXMuCitHVEtET0NfQ0ZMQUdTID0gLUkkKHRvcF9idWlsZGRpcikgLUkkKHRvcF9idWlsZGRpcikvbGlicyAkKEdTVF9PQkpfQ0ZMQUdTKQorR1RLRE9DX0xJQlMgPSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NvbnRyb2xsZXIvbGliZ3N0Y29udHJvbGxlci1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9uZXQvbGliZ3N0bmV0LUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoR1NUX09CSl9MSUJTKQorCitHVEtET0NfQ0M9JChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKQorR1RLRE9DX0xEPSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWxpbmsgJChDQykKKworR1RLRE9DX0VYVFJBX0VOVklST05NRU5UPSBcCisgICAgR1NUX1BMVUdJTl9TQ0FOTkVSPSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9oZWxwZXJzL2dzdC1wbHVnaW4tc2Nhbm5lcgorCisjIElmIHlvdSBuZWVkIHRvIG92ZXJyaWRlIHNvbWUgb2YgdGhlIGRlY2xhcmF0aW9ucywgcGxhY2UgdGhlbSBpbiB0aGlzIGZpbGUKKyMgYW5kIHVuY29tbWVudCB0aGlzIGxpbmUuCitET0NfT1ZFUlJJREVTID0gJChET0NfTU9EVUxFKS1vdmVycmlkZXMudHh0CisKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb21tb24vZ3RrLWRvYy5tYWsKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9NYWtlZmlsZS5pbiBiL2RvY3MvbGlicy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDkzYWI2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9saWJzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsOTEwIEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCisjIHRoaXMgc25pcHBldCBpcyB0byBiZSBpbmNsdWRlZCBieSBib3RoIG91ciBkb2Nib29rIG1hbnVhbHMKKyMgYW5kIGd0ay1kb2MgQVBJIHJlZmVyZW5jZXMKKworIyBpdCBhZGRzIGFuIHVwbG9hZCB0YXJnZXQgdG8gZWFjaCBvZiB0aGVzZSBkaXIncyBNYWtlZmlsZXMKKworIyBlYWNoIE1ha2VmaWxlLmFtIHNob3VsZCBkZWZpbmUgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CisjIC0gRE9DOiB0aGUgYmFzZSBuYW1lIG9mIHRoZSBkb2N1bWVudGF0aW9uCisjICAgICAgICAoZmFxLCBtYW51YWwsIHB3ZywgZ3N0cmVhbWVyLCBnc3RyZWFtZXItbGlicykKKyMgLSBGT1JNQVRTOiB0aGUgZm9ybWF0cyBpbiB3aGljaCBET0MgaXMgb3V0cHV0CisjICAgICAgICAgICAgKGh0bWwgcHMgcGRmKQorCisjIGlmIHlvdSB3YW50IHRvIHVzZSBpdCwgbWFrZSBzdXJlIHlvdXIgJEhPTUUvLnNzaC9jb25maWcgZmlsZSBjb250YWlucyB0aGUKKyMgY29ycmVjdCBVc2VyIGVudHJ5IGZvciB0aGUgSG9zdCBlbnRyeSBmb3IgdGhlIERPQ19TRVJWRVIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEV2ZXJ5dGhpbmcgYmVsb3cgaGVyZSBpcyBnZW5lcmljIGFuZCB5b3Ugc2hvdWxkbid0IG5lZWQgdG8gY2hhbmdlIGl0LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHRob21hczogZXhjZXB0IG9mIGNvdXJzZSB0aGF0IHdlIGRpZAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluIFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9ndGstZG9jLm1hayBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vdXBsb2FkLWRvYy5tYWsKK3N1YmRpciA9IGRvY3MvbGlicworQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXB5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtc2NydWItaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOXyQoVikpCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF8kKFYpKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X2F0XzAgPSBACitTT1VSQ0VTID0KK0RJU1RfU09VUkNFUyA9CitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKK0NDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKK0NIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKK0NIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKK0NIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUiA9IEBEQVRBRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAorRExMVE9PTCA9IEBETExUT09MQAorRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKKworIyBkb24ndCB3YW50ICQoRE9DX01PRFVMRSktc2Nhbi5jIHRvIGJlIGJ1aWx0IHdpdGggLVdlcnJvcgorRVJST1JfQ0ZMQUdTID0gCitFWEVFWFQgPSBARVhFRVhUQAorRkZMQUdTID0gQEZGTEFHU0AKK0ZHUkVQID0gQEZHUkVQQAorRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKK0dDT1YgPSBAR0NPVkAKK0dDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAorR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACitHTElCX0xJQlMgPSBAR0xJQl9MSUJTQAorR0xJQl9PTkxZX0NGTEFHUyA9IEBHTElCX09OTFlfQ0ZMQUdTQAorR0xJQl9PTkxZX0xJQlMgPSBAR0xJQl9PTkxZX0xJQlNACitHTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKK0dMSUJfUkVRID0gQEdMSUJfUkVRQAorR01QX0xJQlMgPSBAR01QX0xJQlNACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dSRVAgPSBAR1JFUEAKK0dTTF9MSUJTID0gQEdTTF9MSUJTQAorR1NUX0FHRSA9IEBHU1RfQUdFQAorR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACitHU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACitHU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAorR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKK0dTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAorR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORUAKK0dTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKK0dTVF9ESVNBQkxFX05FVF9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfTkVUX0RFRklORUAKK0dTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACitHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAorR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAorR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKK0dTVF9ESVNBQkxFX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkVACitHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACitHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACitHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORSA9IEBHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORUAKK0dTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAorR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACitHU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAorR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACitHU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKK0dTVF9NQUpPUk1JTk9SID0gQEdTVF9NQUpPUk1JTk9SQAorR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACitHU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACitHU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAorR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACitHU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACitHU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACitHU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAorR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAorR1NUX1BLR19ERVBTID0gQEdTVF9QS0dfREVQU0AKK0dTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACitHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FQAorR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORUAKK0dTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKK0dTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACitHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkUgPSBAR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FQAorR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKK0hBVkVfRE9DQk9PSzJIVE1MID0gQEhBVkVfRE9DQk9PSzJIVE1MQAorSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKK0hBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKK0hBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKK0hBVkVfRklHMkRFViA9IEBIQVZFX0ZJRzJERVZACitIQVZFX0dNUCA9IEBIQVZFX0dNUEAKK0hBVkVfR1NMID0gQEhBVkVfR1NMQAorSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKK0hBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKK0hBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACitIQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKK0hBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACitIT1NUX0NQVSA9IEBIT1NUX0NQVUAKK0hUTUxfRElSID0gQEhUTUxfRElSQAorSU5FVF9BVE9OX0xJQlMgPSBASU5FVF9BVE9OX0xJQlNACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCRElSID0gQExJQkRJUkAKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCTSA9IEBMSUJNQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTE9DQUxFRElSID0gQExPQ0FMRURJUkAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACitQQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAorUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKK1BBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAorUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BFUkxfUEFUSCA9IEBQRVJMX1BBVEhACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQTFVHSU5ESVIgPSBAUExVR0lORElSQAorUE9TVUIgPSBAUE9TVUJACitQUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAorVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAorVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACitXSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACitYTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKK1hTTFRQUk9DID0gQFhTTFRQUk9DQAorWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3BsdWdpbmRpciA9IEBwbHVnaW5kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorCisjIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUsIGUuZy4gJ2dsaWInLgorI0RPQ19NT0RVTEU9Z3N0cmVhbWVyLWxpYnMtQEdTVF9NQUpPUk1JTk9SQAorRE9DX01PRFVMRSA9IGdzdHJlYW1lci1saWJzCisKKyMgZm9yIHVwbG9hZC1kb2MubWFrCitET0MgPSBnc3RyZWFtZXItbGlicworRk9STUFUUyA9IGh0bWwKKworIyB0aGVzZSB2YXJpYWJsZXMgZGVmaW5lIHRoZSBsb2NhdGlvbiBvZiB0aGUgb25saW5lIGRvY3MKK0RPQ19TRVJWRVIgPSBnc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnCitET0NfQkFTRSA9IC9zcnYvZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy93d3cvZGF0YS9kb2MKK0RPQ19VUkwgPSAkKERPQ19TRVJWRVIpOiQoRE9DX0JBU0UpCisKKyMgVGhlIHRvcC1sZXZlbCBTR01MIGZpbGUuIENoYW5nZSBpdCBpZiB5b3Ugd2FudC4KK0RPQ19NQUlOX1NHTUxfRklMRSA9ICQoRE9DX01PRFVMRSktZG9jcy5zZ21sCisKKyMgVGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBzb3VyY2UgY29kZS4KKyMgZ3RrLWRvYyB3aWxsIHNlYXJjaCBhbGwgLmMgJiAuaCBmaWxlcyBiZW5lYXRoIGhlcmUgZm9yIGlubGluZSBjb21tZW50cworIyBkb2N1bWVudGluZyBmdW5jdGlvbnMgYW5kIG1hY3Jvcy4KK0RPQ19TT1VSQ0VfRElSID0gJCh0b3Bfc3JjZGlyKS9saWJzL2dzdAorCisjIEV4dHJhIG9wdGlvbnMgdG8gc3VwcGx5IHRvIGd0a2RvYy1zY2FuLgorU0NBTl9PUFRJT05TID0gLS1kZXByZWNhdGVkLWd1YXJkcz0iR1NUX0RJU0FCTEVfREVQUkVDQVRFRCIKKworIyBFeHRyYSBvcHRpb25zIHRvIHN1cHBseSB0byBndGtkb2MtbWtkYi4KK01LREJfT1BUSU9OUyA9IC0tc2dtbC1tb2RlIC0tb3V0cHV0LWZvcm1hdD14bWwKKworIyBFeHRyYSBvcHRpb25zIHRvIHN1cHBseSB0byBndGtkb2MtZml4cmVmLgorRklYWFJFRl9PUFRJT05TID0gLS1leHRyYS1kaXI9JCh0b3BfYnVpbGRkaXIpL2RvY3MvZ3N0L2h0bWwgXAorCS0tZXh0cmEtZGlyPSQoR0xJQl9QUkVGSVgpL3NoYXJlL2d0ay1kb2MvaHRtbCBcCisJLS1leHRyYS1kaXI9JChkYXRhZGlyKS9ndGstZG9jL2h0bWwKKworCisjIFVzZWQgZm9yIGRlcGVuZGVuY2llcy4KK0hGSUxFX0dMT0IgPSAkKHRvcF9zcmNkaXIpL2xpYnMvZ3N0LyovKi5oCitDRklMRV9HTE9CID0gJCh0b3Bfc3JjZGlyKS9saWJzL2dzdC8qLyouYworCisjIEV4dHJhIG9wdGlvbnMgdG8gcGFzcyB0byBndGtkb2Mtc2Nhbm9iaiBvciBndGtkb2Mtc2NhbmdvYmouCitTQ0FOT0JKX09QVElPTlMgPSAtLXR5cGUtaW5pdC1mdW5jPSJnX3R5cGVfaW5pdCgpO2dzdF9pbml0KCZhcmdjLCZhcmd2KSIKKworIyBIZWFkZXIgZmlsZXMgdG8gaWdub3JlIHdoZW4gc2Nhbm5pbmcuCitJR05PUkVfSEZJTEVTID0gXAorCWdzdGludGVycG9sYXRpb25jb250cm9sc291cmNlcHJpdmF0ZS5oIFwKKwlnc3RsZm9jb250cm9sc291cmNlcHJpdmF0ZS5oIFwKKwlnc3Rjb250cm9sbGVycHJpdmF0ZS5oIFwKKwlnc3RnZXRiaXRzX2lubC5oIFwKKwlkcC1wcml2YXRlLmgKKworCisjIEltYWdlcyB0byBjb3B5IGludG8gSFRNTCBkaXJlY3RvcnkuCitIVE1MX0lNQUdFUyA9IGdkcC1oZWFkZXIucG5nCisKKyMgRXh0cmEgU0dNTCBmaWxlcyB0aGF0IGFyZSBpbmNsdWRlZCBieSAkKERPQ19NQUlOX1NHTUxfRklMRSkuCitjb250ZW50X2ZpbGVzID0gCisKKyMgT3RoZXIgZmlsZXMgdG8gZGlzdHJpYnV0ZS4KK2V4dHJhX2ZpbGVzID0gCisKKyMgQ0ZMQUdTIGFuZCBMREZMQUdTIGZvciBjb21waWxpbmcgc2NhbiBwcm9ncmFtLiBPbmx5IG5lZWRlZCBpZiB5b3VyIGFwcC9saWIKKyMgY29udGFpbnMgR3RrT2JqZWN0cy9HT2JqZWN0cyBhbmQgeW91IHdhbnQgdG8gZG9jdW1lbnQgc2lnbmFscyBhbmQgcHJvcGVydGllcy4KK0dUS0RPQ19DRkxBR1MgPSAtSSQodG9wX2J1aWxkZGlyKSAtSSQodG9wX2J1aWxkZGlyKS9saWJzICQoR1NUX09CSl9DRkxBR1MpCitHVEtET0NfTElCUyA9IFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY29udHJvbGxlci9saWJnc3Rjb250cm9sbGVyLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L25ldC9saWJnc3RuZXQtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChHU1RfT0JKX0xJQlMpCisKK0dUS0RPQ19DQyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykKK0dUS0RPQ19MRCA9ICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWxpbmsgJChDQykKK0dUS0RPQ19FWFRSQV9FTlZJUk9OTUVOVCA9IFwKKyAgICBHU1RfUExVR0lOX1NDQU5ORVI9JCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2hlbHBlcnMvZ3N0LXBsdWdpbi1zY2FubmVyCisKKworIyBJZiB5b3UgbmVlZCB0byBvdmVycmlkZSBzb21lIG9mIHRoZSBkZWNsYXJhdGlvbnMsIHBsYWNlIHRoZW0gaW4gdGhpcyBmaWxlCisjIGFuZCB1bmNvbW1lbnQgdGhpcyBsaW5lLgorRE9DX09WRVJSSURFUyA9ICQoRE9DX01PRFVMRSktb3ZlcnJpZGVzLnR4dAorCisjIHRob21hczogY29waWVkIGZyb20gZ2xpYi0yCisjIFdlIHNldCBHUEFUSCBoZXJlOyB0aGlzIGdpdmVzIHVzIHNlbWFudGljcyBmb3IgR05VIG1ha2UKKyMgd2hpY2ggYXJlIG1vcmUgbGlrZSBvdGhlciBtYWtlJ3MgVlBBVEgsIHdoZW4gaXQgY29tZXMgdG8KKyMgd2hldGhlciBhIHNvdXJjZSB0aGF0IGlzIGEgdGFyZ2V0IG9mIG9uZSBydWxlIGlzIHRoZW4KKyMgc2VhcmNoZWQgZm9yIGluIFZQQVRIL0dQQVRILgorIworR1BBVEggPSAkKHNyY2RpcikKKworIyB0aG9tYXM6IG1ha2UgZG9jcyBwYXJhbGxlbCBpbnN0YWxsYWJsZQorVEFSR0VUX0RJUiA9ICQoSFRNTF9ESVIpLyQoRE9DX01PRFVMRSktQEdTVF9NQUpPUk1JTk9SQAorRVhUUkFfRElTVCA9IFwKKwkkKGNvbnRlbnRfZmlsZXMpCQlcCisJJChleHRyYV9maWxlcykJCQlcCisJJChIVE1MX0lNQUdFUykJCQlcCisJJChET0NfTUFJTl9TR01MX0ZJTEUpCQlcCisJJChET0NfTU9EVUxFKS50eXBlcwkJXAorCSQoRE9DX09WRVJSSURFUykJCVwKKwkkKERPQ19NT0RVTEUpLXNlY3Rpb25zLnR4dAorCitET0NfU1RBTVBTID0gXAorCXNldHVwLWJ1aWxkLnN0YW1wCQlcCisJc2Nhbi1idWlsZC5zdGFtcAkJXAorCXNnbWwtYnVpbGQuc3RhbXAJCVwKKwlodG1sLWJ1aWxkLnN0YW1wCQlcCisJc2dtbC5zdGFtcAkJXAorCWh0bWwuc3RhbXAKKworU0NBTk9CSl9GSUxFUyA9IFwKKwkkKERPQ19NT0RVTEUpLmFyZ3MJCVwKKwkkKERPQ19NT0RVTEUpLmhpZXJhcmNoeQkJXAorCSQoRE9DX01PRFVMRSkuaW50ZXJmYWNlcwkJXAorCSQoRE9DX01PRFVMRSkucHJlcmVxdWlzaXRlcwlcCisJJChET0NfTU9EVUxFKS5zaWduYWxzCQlcCisJLmxpYnMvJChET0NfTU9EVUxFKS1zY2FuLm8KKworUkVQT1JUX0ZJTEVTID0gXAorCSQoRE9DX01PRFVMRSktdW5kb2N1bWVudGVkLnR4dCBcCisJJChET0NfTU9EVUxFKS11bmRlY2xhcmVkLnR4dCBcCisJJChET0NfTU9EVUxFKS11bnVzZWQudHh0CisKK0NMRUFORklMRVMgPSAkKFNDQU5PQkpfRklMRVMpICQoUkVQT1JUX0ZJTEVTKSAkKERPQ19TVEFNUFMpIGRvYy1yZWdpc3RyeS54bWwKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJCh0b3Bfc3JjZGlyKS9jb21tb24vdXBsb2FkLWRvYy5tYWsgJCh0b3Bfc3JjZGlyKS9jb21tb24vZ3RrLWRvYy5tYWsgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZG9jcy9saWJzL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251IGRvY3MvbGlicy9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKK3RhZ3M6IFRBR1MKK1RBR1M6CisKK2N0YWdzOiBDVEFHUworQ1RBR1M6CisKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgdG9wX2Rpc3RkaXI9IiQodG9wX2Rpc3RkaXIpIiBkaXN0ZGlyPSIkKGRpc3RkaXIpIiBcCisJICBkaXN0LWhvb2sKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSBhbGwtbG9jYWwKK2luc3RhbGxkaXJzOgoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbG9jYWwgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxvY2FsCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtZGF0YS1sb2NhbAorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIFwKKwltYWludGFpbmVyLWNsZWFuLWxvY2FsCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1sb2NhbAorCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogYWxsIGFsbC1hbSBhbGwtbG9jYWwgY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCisJY2xlYW4tbGlidG9vbCBjbGVhbi1sb2NhbCBkaXN0LWhvb2sgZGlzdGNsZWFuIFwKKwlkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tbG9jYWwgZGlzdGRpciBcCisJZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCisJaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWRhdGEtbG9jYWwgaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIFwKKwltYWludGFpbmVyLWNsZWFuLWxvY2FsIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKKwl1bmluc3RhbGwtbG9jYWwKKworaHRtbDogaHRtbC1idWlsZC5zdGFtcAorCit1cGxvYWQ6ICQoRk9STUFUUykKKwlAaWYgZWNobyAkKEZPUk1BVFMpIHwgZ3JlcCBodG1sID4gL2Rldi9udWxsOyB0aGVuIFwKKwkgIGVjaG8gIlByZXBhcmluZyBkb2NzIGZvciB1cGxvYWQgKHJlYmFzaW5nIGNyb3NzLXJlZmVyZW5jZXMpIC4uLiIgOyBcCisJICBpZiB0ZXN0IHgkKGJ1aWxkZGlyKSAhPSB4JChzcmNkaXIpOyB0aGVuIFwKKwkgICAgZWNobyAibWFrZSB1cGxvYWQgY2FuIG9ubHkgYmUgdXNlZCBpZiBzcmNkaXIgPT0gYnVpbGRkaXIiOyBcCisJICAgIGV4aXQgMTsgXAorCSAgZmk7IFwKKwkgICMgZ3RrZG9jLXJlYmFzZSBzb21ldGltZXMgZ2V0cyBjb25mdXNlZCwgc28gcmVzZXQgZXZlcnl0aGluZyB0byBcCisJICAjIGxvY2FsIGxpbmtzIGJlZm9yZSByZWJhc2luZyB0byBvbmxpbmUgbGlua3MgICAgICAgICAgICAgICAgICAgXAorCSAgZ3RrZG9jLXJlYmFzZSAtLWh0bWwtZGlyPSQoYnVpbGRkaXIpL2h0bWwgMj4vZGV2L251bGwgMj4vZGV2L251bGwgOyBcCisJICByZWJhc2U9YGd0a2RvYy1yZWJhc2UgLS12ZXJib3NlIC0tb25saW5lIC0taHRtbC1kaXI9JChidWlsZGRpcikvaHRtbGAgOyBcCisJICBlY2hvICIkJHJlYmFzZSIgfCBncmVwIC1lICJPbi0qbGluZSI7IFwKKwkgIGZvciByZXEgaW4gZ2xpYiBnb2JqZWN0IGdzdHJlYW1lciBnc3RyZWFtZXItbGlicyBnc3QtcGx1Z2lucy1iYXNlLWxpYnM7IGRvIFwKKwkgICAgaWYgISAoIGVjaG8gIiQkcmViYXNlIiB8IGdyZXAgLWkgLWUgIk9uLSpsaW5lLiovJCRyZXEvIiApOyB0aGVuIFwKKwkgICAgICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiA7IFwKKwkgICAgICBlY2hvICIgQ291bGQgbm90IGRldGVybWluZSBvbmxpbmUgbG9jYXRpb24gZm9yICQkcmVxIGRvY3MuIENyb3NzLXJlZmVyZW5jaW5nIHdpbGwgYmUgIiA7IFwKKwkgICAgICBlY2hvICIgYnJva2VuLCBzbyBub3QgdXBsb2FkaW5nLiBNYWtlIHN1cmUgdGhlIGxpYnJhcnkncyBndGstZG9jIGRvY3VtZW50YXRpb24gaXMgICAgIiA7IFwKKwkgICAgICBlY2hvICIgaW5zdGFsbGVkIHNvbWV3aGVyZSBpbiAvdXNyL3NoYXJlL2d0ay1kb2MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiA7IFwKKwkgICAgICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiA7IFwKKwkgICAgICBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgIGRvbmU7IFwKKwkgIGV4cG9ydCBTUkM9IiQkU1JDIGh0bWwiOyBcCisJZmk7IFwKKwlpZiBlY2hvICQoRk9STUFUUykgfCBncmVwIHBzID4gL2Rldi9udWxsOyB0aGVuIGV4cG9ydCBTUkM9IiQkU1JDICQoRE9DKS5wcyI7IGZpOyBcCisJaWYgZWNobyAkKEZPUk1BVFMpIHwgZ3JlcCBwZGYgPiAvZGV2L251bGw7IHRoZW4gZXhwb3J0IFNSQz0iJCRTUkMgJChET0MpLnBkZiI7IGZpOyBcCisJXAorCSMgdXBsb2FkIHJlbGVhc2VzIHRvIGJvdGggMC4xMC5YLyBhbmQgaGVhZC8gc3ViZGlyZWN0b3JpZXMgXAorCWlmIHRlc3QgIngkKFBBQ0tBR0VfVkVSU0lPTl9OQU5PKSIgPSB4MDsgdGhlbiBcCisJICBleHBvcnQgRElSPSQoRE9DX0JBU0UpL2dzdHJlYW1lci8kKFZFUlNJT04pLyQoRE9DKTsgXAorCSAgZWNobyBVcGxvYWRpbmcgJCRTUkMgdG8gJChET0NfU0VSVkVSKTokJERJUjsgXAorCSAgc3NoICQoRE9DX1NFUlZFUikgbWtkaXIgLXAgJCRESVI7IFwKKwkgIHJzeW5jIC1ydiAtZSBzc2ggLS1kZWxldGUgJCRTUkMgJChET0NfU0VSVkVSKTokJERJUjsgXAorCSAgc3NoICQoRE9DX1NFUlZFUikgY2htb2QgLVIgZyt3ICQkRElSOyBcCisJZmk7IFwKKwlcCisJZXhwb3J0IERJUj0kKERPQ19CQVNFKS9nc3RyZWFtZXIvaGVhZC8kKERPQyk7IFwKKwllY2hvIFVwbG9hZGluZyAkJFNSQyB0byAkKERPQ19TRVJWRVIpOiQkRElSOyBcCisJc3NoICQoRE9DX1NFUlZFUikgbWtkaXIgLXAgJCRESVI7IFwKKwlyc3luYyAtcnYgLWUgc3NoIC0tZGVsZXRlICQkU1JDICQoRE9DX1NFUlZFUik6JCRESVI7IFwKKwlzc2ggJChET0NfU0VSVkVSKSBjaG1vZCAtUiBnK3cgJCRESVI7IFwKKwlcCisJaWYgZWNobyAkKEZPUk1BVFMpIHwgZ3JlcCBodG1sID4gL2Rldi9udWxsOyB0aGVuIFwKKwkgIGVjaG8gIlVuLXByZXBhcmluZyBkb2NzIGZvciB1cGxvYWQgKHJlYmFzaW5nIGNyb3NzLXJlZmVyZW5jZXMpIC4uLiIgOyBcCisJICBndGtkb2MtcmViYXNlIC0taHRtbC1kaXI9JChidWlsZGRpcikvaHRtbCA7IFwKKwlmaTsgXAorCWVjaG8gRG9uZQorCitARU5BQkxFX0dUS19ET0NfVFJVRUBhbGwtbG9jYWw6IGh0bWwtYnVpbGQuc3RhbXAKKworIyMjIyBzZXR1cCAjIyMjCisKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQHNldHVwLWJ1aWxkLnN0YW1wOiAkKGNvbnRlbnRfZmlsZXMpCitARU5BQkxFX0dUS19ET0NfVFJVRUAJLUBpZiB0ZXN0ICIkKGFic19zcmNkaXIpIiAhPSAiJChhYnNfYnVpbGRkaXIpIiA7IHRoZW4gXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBlY2hvICcgIERPQyAgIFByZXBhcmluZyBidWlsZCc7IFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgZmlsZXM9YGVjaG8gJChET0NfTUFJTl9TR01MX0ZJTEUpICQoRE9DX09WRVJSSURFUykgJChET0NfTU9EVUxFKS1zZWN0aW9ucy50eHQgJChET0NfTU9EVUxFKS50eXBlcyAkKGNvbnRlbnRfZmlsZXMpYDsgXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBpZiB0ZXN0ICJ4JCRmaWxlcyIgIT0gIngiIDsgdGhlbiBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICAgICBmb3IgZmlsZSBpbiAkJGZpbGVzIDsgZG8gXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICAgICAgICAgIHRlc3QgLWYgJChhYnNfc3JjZGlyKS8kJGZpbGUgJiYgXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICAgICAgICAgICAgICBjcCAtcHUgJChhYnNfc3JjZGlyKS8kJGZpbGUgJChhYnNfYnVpbGRkaXIpLyB8fCB0cnVlOyBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICAgICBkb25lOyBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGZpOyBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJZmkKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAdG91Y2ggc2V0dXAtYnVpbGQuc3RhbXAKKworIyMjIyBzY2FuICMjIyMKKworIyBpbiB0aGUgY2FzZSBvZiBub24tc3JjZGlyIGJ1aWxkcywgdGhlIGJ1aWx0IGdzdCBkaXJlY3RvcnkgZ2V0cyBhZGRlZAorIyB0byBndGstZG9jIHNjYW5uaW5nOyBidXQgb25seSB0aGVuLCB0byBhdm9pZCBkdXBsaWNhdGVzCitARU5BQkxFX0dUS19ET0NfVFJVRUBzY2FuLWJ1aWxkLnN0YW1wOiAkKEhGSUxFX0dMT0IpICQoQ0ZJTEVfR0xPQikKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAZWNobyAnICBET0MgICBTY2FubmluZyBoZWFkZXIgZmlsZXMnCitARU5BQkxFX0dUS19ET0NfVFJVRUAJQF9zb3VyY2VfZGlyPScnIDsJCQkJCQlcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJZm9yIGkgaW4gJChET0NfU09VUkNFX0RJUikgOyBkbwkJCQkJXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBfc291cmNlX2Rpcj0iJCR7X3NvdXJjZV9kaXJ9IC0tc291cmNlLWRpcj0kJGkiIDsJICAgICAgICBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJZG9uZSA7CQkJCQkJCSAgICAgICAgXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACWd0a2RvYy1zY2FuCQkJCQkJCVwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkJJChTQ0FOX09QVElPTlMpICQoRVhUUkFfSEZJTEVTKQkJCQlcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJCS0tbW9kdWxlPSQoRE9DX01PRFVMRSkJCQkJCVwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkJJCR7X3NvdXJjZV9kaXJ9ICAgICAgICAgCQkJCVwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkJLS1pZ25vcmUtaGVhZGVycz0iJChJR05PUkVfSEZJTEVTKSIKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAaWYgZ3JlcCAtbCAnXi4uKiQkJyAkKERPQ19NT0RVTEUpLnR5cGVzID4gL2Rldi9udWxsOyB0aGVuCVwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgZWNobyAiICBET0MgICBJbnRyb3NwZWN0aW5nIGdvYmplY3RzIjsgXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBHU1RfUExVR0lOX1NZU1RFTV9QQVRIPWBjZCAkKHRvcF9idWlsZGRpcikgJiYgcHdkYAkJXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBHU1RfUExVR0lOX1BBVEg9CQkJCQkJXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBHU1RfUkVHSVNUUlk9ZG9jLXJlZ2lzdHJ5LnhtbAkJCQlcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICQoR1RLRE9DX0VYVFJBX0VOVklST05NRU5UKQkJCQkJXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBDQz0iJChHVEtET0NfQ0MpIiBMRD0iJChHVEtET0NfTEQpIgkJCQlcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIENGTEFHUz0iJChHVEtET0NfQ0ZMQUdTKSAkKENGTEFHUykiCQkJCVwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgTERGTEFHUz0iJChHVEtET0NfTElCUykgJChMREZMQUdTKSIJCQkJXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBndGtkb2Mtc2NhbmdvYmogLS10eXBlLWluaXQtZnVuYz0iZ3N0X2luaXQoTlVMTCxOVUxMKSIJXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICAgICAgLS1tb2R1bGU9JChET0NfTU9EVUxFKSA7CQkJCVwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAllbHNlCQkJCQkJCQlcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGZvciBpIGluICQoU0NBTk9CSl9GSUxFUykgOyBkbwkJCQlcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICAgIHRlc3QgLWYgJCRpIHx8IHRvdWNoICQkaSA7CQkJCVwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgZG9uZQkJCQkJCQlcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJZmkKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAdG91Y2ggc2Nhbi1idWlsZC5zdGFtcAorCitARU5BQkxFX0dUS19ET0NfVFJVRUAkKERPQ19NT0RVTEUpLWRlY2wudHh0ICQoU0NBTk9CSl9GSUxFUykgJChET0NfTU9EVUxFKS1zZWN0aW9ucy50eHQgJChET0NfTU9EVUxFKS1vdmVycmlkZXMudHh0OiBzY2FuLWJ1aWxkLnN0YW1wCitARU5BQkxFX0dUS19ET0NfVFJVRUAJQHRydWUKKworIyMjIyB4bWwgIyMjIworCitARU5BQkxFX0dUS19ET0NfVFJVRUBzZ21sLWJ1aWxkLnN0YW1wOiBzZXR1cC1idWlsZC5zdGFtcCAkKERPQ19NT0RVTEUpLWRlY2wudHh0ICQoU0NBTk9CSl9GSUxFUykgJChET0NfTU9EVUxFKS1zZWN0aW9ucy50eHQgJChleHBhbmRfY29udGVudF9maWxlcykKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAZWNobyAnICBET0MgICBCdWlsZGluZyBYTUwnCitARU5BQkxFX0dUS19ET0NfVFJVRUAJQGd0a2RvYy1ta2RiIC0tbW9kdWxlPSQoRE9DX01PRFVMRSkgLS1zb3VyY2UtZGlyPSQoRE9DX1NPVVJDRV9ESVIpICAtLWV4cGFuZC1jb250ZW50LWZpbGVzPSIkKGV4cGFuZF9jb250ZW50X2ZpbGVzKSIgLS1tYWluLXNnbWwtZmlsZT0kKERPQ19NQUlOX1NHTUxfRklMRSkgLS1vdXRwdXQtZm9ybWF0PXhtbCAkKE1LREJfT1BUSU9OUykKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAY3AgLi4vdmVyc2lvbi5lbnRpdGllcyB4bWwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAdG91Y2ggc2dtbC1idWlsZC5zdGFtcAorCitARU5BQkxFX0dUS19ET0NfVFJVRUBzZ21sLnN0YW1wOiBzZ21sLWJ1aWxkLnN0YW1wCitARU5BQkxFX0dUS19ET0NfVFJVRUAJQHRydWUKKworIyMjIyBodG1sICMjIyMKKworQEVOQUJMRV9HVEtfRE9DX1RSVUVAaHRtbC1idWlsZC5zdGFtcDogc2dtbC5zdGFtcCAkKERPQ19NQUlOX1NHTUxfRklMRSkgJChjb250ZW50X2ZpbGVzKQorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBlY2hvICcgIERPQyAgIEJ1aWxkaW5nIEhUTUwnCitARU5BQkxFX0dUS19ET0NfVFJVRUAJQHJtIC1yZiBodG1sCitARU5BQkxFX0dUS19ET0NfVFJVRUAJQG1rZGlyIGh0bWwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAY3AgLXByIHhtbCBodG1sCitARU5BQkxFX0dUS19ET0NfVFJVRUAJQGNwIC4uL3ZlcnNpb24uZW50aXRpZXMgLi8KK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAbWtodG1sX29wdGlvbnM9IiI7IFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlndGtkb2MtbWtodG1sIDI+JjEgLS1oZWxwIHwgZ3JlcCAgPi9kZXYvbnVsbCAiXC1cLXZlcmJvc2UiOyBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJaWYgdGVzdCAiJCg/KSIgPSAiMCI7IHRoZW4gXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgaWYgdGVzdCAieCQoVikiID0gIngxIjsgdGhlbiBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIG1raHRtbF9vcHRpb25zPSIkJG1raHRtbF9vcHRpb25zIC0tdmVyYm9zZSI7IFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkgIGZpOyBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJZmk7IFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAZ3RrZG9jLW1raHRtbCAyPiYxIC0taGVscCB8IGdyZXAgID4vZGV2L251bGwgIlwtXC1wYXRoIjsgXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACWlmIHRlc3QgIiQoPykiID0gIjAiOyB0aGVuIFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkgIG1raHRtbF9vcHRpb25zPS0tcGF0aD0iJChhYnNfc3JjZGlyKSI7IFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlmaTsgXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACWNkIGh0bWwgJiYgZ3RrZG9jLW1raHRtbCAkJG1raHRtbF9vcHRpb25zICQoTUtIVE1MX09QVElPTlMpICQoRE9DX01PRFVMRSkgLi4vJChET0NfTUFJTl9TR01MX0ZJTEUpCitARU5BQkxFX0dUS19ET0NfVFJVRUAJQG12IGh0bWwvaW5kZXguc2dtbCBodG1sL2luZGV4LnNnbWwuYmFrCitARU5BQkxFX0dUS19ET0NfVFJVRUAJQCQoU0VEKSAicy8gaHJlZj1cIiQoRE9DX01PRFVMRSlcLy8gaHJlZj1cIiQoRE9DX01PRFVMRSktQEdTVF9NQUpPUk1JTk9SQFwvL2ciIGh0bWwvaW5kZXguc2dtbC5iYWsgPmh0bWwvaW5kZXguc2dtbAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBybSAtZiBodG1sL2luZGV4LnNnbWwuYmFrCitARU5BQkxFX0dUS19ET0NfVFJVRUAJQHJtIC1yZiBodG1sL3htbAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBybSAtZiB2ZXJzaW9uLmVudGl0aWVzCitARU5BQkxFX0dUS19ET0NfVFJVRUAJQHRlc3QgIngkKEhUTUxfSU1BR0VTKSIgPSAieCIgfHwgICggY2QgJChzcmNkaXIpICYmIGNwICQoSFRNTF9JTUFHRVMpICQoYWJzX2J1aWxkZGlyKS9odG1sICkKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAZWNobyAnICBET0MgICBGaXhpbmcgY3Jvc3MtcmVmZXJlbmNlcycKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAZ3RrZG9jLWZpeHhyZWYgLS1tb2R1bGU9JChET0NfTU9EVUxFKSAtLW1vZHVsZS1kaXI9aHRtbCAtLWh0bWwtZGlyPSQoSFRNTF9ESVIpICQoRklYWFJFRl9PUFRJT05TKQorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUB0b3VjaCBodG1sLWJ1aWxkLnN0YW1wCisKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQGNsZWFuLWxvY2FsLWd0a2RvYzoKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAcm0gLXJmIHhtbCB0bXBsIGh0bWwKKyMgY2xlYW4gZmlsZXMgY29waWVkIGZvciBub25zcmNkaXIgdGVtcGxhdGVzIGJ1aWxkCitARU5BQkxFX0dUS19ET0NfVFJVRUAJQGlmIHRlc3QgeCIkKHNyY2RpcikiICE9IHguIDsgdGhlbiBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICAgICBybSAtcmYgJChET0NfTU9EVUxFKS50eXBlczsgXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACWZpCitARU5BQkxFX0dUS19ET0NfRkFMU0VAYWxsLWxvY2FsOgorQEVOQUJMRV9HVEtfRE9DX0ZBTFNFQGNsZWFuLWxvY2FsLWd0a2RvYzoKKworY2xlYW4tbG9jYWw6IGNsZWFuLWxvY2FsLWd0a2RvYworCUBybSAtZiAqfiAqLmJhaworCUBybSAtcmYgLmxpYnMKKworZGlzdGNsZWFuLWxvY2FsOgorCUBybSAtZiAkKFJFUE9SVF9GSUxFUykgXAorCSAgICAgICAgJChET0NfTU9EVUxFKS1kZWNsLWxpc3QudHh0ICQoRE9DX01PRFVMRSktZGVjbC50eHQKKwlAcm0gLXJmIHRtcGwvKi5zZ21sLmJhaworCUBybSAtZiAkKERPQ19NT0RVTEUpLmhpZXJhcmNoeQorCUBybSAtZiAqLnN0YW1wIHx8IHRydWUKKwlAaWYgdGVzdCAiJChhYnNfc3JjZGlyKSIgIT0gIiQoYWJzX2J1aWxkZGlyKSIgOyB0aGVuIFwKKwkgICAgcm0gLWYgJChET0NfTUFJTl9TR01MX0ZJTEUpIDsgXAorCSAgICBybSAtZiAkKERPQ19PVkVSUklERVMpIDsgXAorCSAgICBybSAtZiAkKERPQ19NT0RVTEUpLnR5cGVzIDsgXAorCSAgICBybSAtZiAkKERPQ19NT0RVTEUpLmludGVyZmFjZXMgOyBcCisJICAgIHJtIC1mICQoRE9DX01PRFVMRSkucHJlcmVxdWlzaXRlcyA7IFwKKwkgICAgcm0gLWYgJChET0NfTU9EVUxFKS1zZWN0aW9ucy50eHQgOyBcCisJICAgIHJtIC1mICQoY29udGVudF9maWxlcykgOyBcCisJICAgIHJtIC1yZiB0bXBsLyouc2dtbCA7IFwKKwlmaQorCUBybSAtcmYgKi5vCisKK21haW50YWluZXItY2xlYW4tbG9jYWw6IGNsZWFuCisJQGNkICQoc3JjZGlyKSAmJiBybSAtcmYgaHRtbCBcCisJCXhtbCAkKERPQ19NT0RVTEUpLWRlY2wtbGlzdC50eHQgJChET0NfTU9EVUxFKS1kZWNsLnR4dAorCisjIHRob21hczogbWFrZSBkb2NzIHBhcmFsbGVsIGluc3RhbGxhYmxlOyBkZXZoZWxwIHJlcXVpcmVzIG1ham9ybWlub3IgdG9vCitpbnN0YWxsLWRhdGEtbG9jYWw6CisJKGluc3RhbGxmaWxlcz1gZWNobyAkKGJ1aWxkZGlyKS9odG1sLyouc2dtbCAkKGJ1aWxkZGlyKS9odG1sLyouaHRtbCAkKGJ1aWxkZGlyKS9odG1sLyoucG5nICQoYnVpbGRkaXIpL2h0bWwvKi5jc3NgOyBcCisJaWYgdGVzdCAiJCRpbnN0YWxsZmlsZXMiID0gJyQoYnVpbGRkaXIpL2h0bWwvKi5zZ21sICQoYnVpbGRkaXIpL2h0bWwvKi5odG1sICQoYnVpbGRkaXIpL2h0bWwvKi5wbmcgJChidWlsZGRpcikvaHRtbC8qLmNzcyc7IFwKKwl0aGVuIGVjaG8gJy0tIE5vdGhpbmcgdG8gaW5zdGFsbCcgOyBcCisJZWxzZSBcCisJICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKFRBUkdFVF9ESVIpOyBcCisJICBmb3IgaSBpbiAkJGluc3RhbGxmaWxlczsgZG8gXAorCSAgICBlY2hvICctLSBJbnN0YWxsaW5nICckJGkgOyBcCisJICAgICQoSU5TVEFMTF9EQVRBKSAkJGkgJChERVNURElSKSQoVEFSR0VUX0RJUik7IFwKKwkgIGRvbmU7IFwKKwkgIGVjaG8gJy0tIEluc3RhbGxpbmcgJChidWlsZGRpcikvaHRtbC8kKERPQ19NT0RVTEUpLmRldmhlbHAyJyA7IFwKKwkgIGlmIHRlc3QgLWUgJChidWlsZGRpcikvaHRtbC8kKERPQ19NT0RVTEUpLmRldmhlbHAyOyB0aGVuIFwKKwkgICAgICAgICAgICAkKElOU1RBTExfREFUQSkgJChidWlsZGRpcikvaHRtbC8kKERPQ19NT0RVTEUpLmRldmhlbHAyIFwKKwkgICAgICAgICAgICAkKERFU1RESVIpJChUQVJHRVRfRElSKS8kKERPQ19NT0RVTEUpLUBHU1RfTUFKT1JNSU5PUkAuZGV2aGVscDI7IFwKKwkgIGZpOyBcCisJICAod2hpY2ggZ3RrZG9jLXJlYmFzZSA+L2Rldi9udWxsICYmIFwKKwkgICAgZ3RrZG9jLXJlYmFzZSAtLXJlbGF0aXZlIC0tZGVzdC1kaXI9JChERVNURElSKSAtLWh0bWwtZGlyPSQoREVTVERJUikkKFRBUkdFVF9ESVIpKSB8fCB0cnVlIDsgXAorCWZpKQordW5pbnN0YWxsLWxvY2FsOgorCWlmIHRlc3QgLWQgJChERVNURElSKSQoVEFSR0VUX0RJUik7IHRoZW4gXAorCSAgcm0gLXJmICQoREVTVERJUikkKFRBUkdFVF9ESVIpLyo7IFwKKwkgIHJtZGlyIC1wICQoREVTVERJUikkKFRBUkdFVF9ESVIpIDI+L2Rldi9udWxsIHx8IHRydWU7IFwKKwllbHNlIFwKKwkgIGVjaG8gJy0tIE5vdGhpbmcgdG8gdW5pbnN0YWxsJyA7IFwKKwlmaTsKKworIworIyBSZXF1aXJlIGd0ay1kb2Mgd2hlbiBtYWtpbmcgZGlzdAorIworQEVOQUJMRV9HVEtfRE9DX1RSVUVAZGlzdC1jaGVjay1ndGtkb2M6CitARU5BQkxFX0dUS19ET0NfRkFMU0VAZGlzdC1jaGVjay1ndGtkb2M6CitARU5BQkxFX0dUS19ET0NfRkFMU0VACUBlY2hvICIqKiogZ3RrLWRvYyBtdXN0IGJlIGluc3RhbGxlZCBhbmQgZW5hYmxlZCBpbiBvcmRlciB0byBtYWtlIGRpc3QiCitARU5BQkxFX0dUS19ET0NfRkFMU0VACUBmYWxzZQorCitkaXN0LWhvb2s6IGRpc3QtY2hlY2stZ3RrZG9jIGRpc3QtaG9vay1sb2NhbAorCW1rZGlyICQoZGlzdGRpcikvaHRtbAorCWNwIGh0bWwvKiAkKGRpc3RkaXIpL2h0bWwKKwktY3AgJChzcmNkaXIpLyQoRE9DX01PRFVMRSkudHlwZXMgJChkaXN0ZGlyKS8KKwktY3AgJChzcmNkaXIpLyQoRE9DX01PRFVMRSktc2VjdGlvbnMudHh0ICQoZGlzdGRpcikvCisJY2QgJChkaXN0ZGlyKSAmJiBybSAtZiAkKERJU1RDTEVBTkZJTEVTKQorCS1ndGtkb2MtcmViYXNlIC0tb25saW5lIC0tcmVsYXRpdmUgLS1odG1sLWRpcj0kKGRpc3RkaXIpL2h0bWwKKworLlBIT05ZIDogZGlzdC1ob29rLWxvY2FsIGRvY3MKKworIyBhdm9pZCBzcHVyaW91cyBidWlsZCBlcnJvcnMgd2hlbiBkaXN0Y2hlY2tpbmcgd2l0aCAtak4KKy5OT1RQQVJBTExFTDoKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2dkcC1oZWFkZXIucG5nIGIvZG9jcy9saWJzL2dkcC1oZWFkZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZDA4ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2xpYnMvZ2RwLWhlYWRlci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbCBiL2RvY3MvbGlicy9nc3RyZWFtZXItbGlicy1kb2NzLnNnbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY4NDk2NgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbGlicy9nc3RyZWFtZXItbGlicy1kb2NzLnNnbWwKQEAgLTAsMCArMSwxMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCisgICAgICAgICAgICAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFsKKzwhRU5USVRZICUgdmVyc2lvbi1lbnRpdGllcyBTWVNURU0gInZlcnNpb24uZW50aXRpZXMiPgorJXZlcnNpb24tZW50aXRpZXM7Cis8IUVOVElUWSAlIGxvY2FsLmNvbW1vbi5hdHRyaWIgInhtbG5zOnhpICBDREFUQSAgI0ZJWEVEICdodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlJyI+Cis8IUVOVElUWSBoYXNoICIjIj4KK10+Cis8Ym9vayBpZD0iaW5kZXgiIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIj4KKyAgPGJvb2tpbmZvPgorICAgIDx0aXRsZT5HU3RyZWFtZXIgJkdTVF9NQUpPUk1JTk9SOyBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgorICAgIDxyZWxlYXNlaW5mbz4KKyAgICAgIGZvciBHU3RyZWFtZXIgTGlicmFyeSAmR1NUX01BSk9STUlOT1I7ICgmR1NUX1ZFUlNJT047KQorICAgICAgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgb24tbGluZSBhdAorICAgICAgPHVsaW5rIHJvbGU9Im9ubGluZS1sb2NhdGlvbiIgdXJsPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXItbGlicy9odG1sLyI+aHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyLWxpYnMvaHRtbC88L3VsaW5rPi4KKyAgICA8L3JlbGVhc2VpbmZvPgorICA8L2Jvb2tpbmZvPgorICA8cGFydCBpZD0iZ3N0cmVhbWVyLWxpYnMiPgorICAgIDx0aXRsZT5HU3RyZWFtZXIgTGlicmFyaWVzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgVG8gZWFzZSB0aGUgY3JlYXRpb24gb2YgcGx1Z2lucywgYSBsaWJyYXJ5IHN5c3RlbSB3YXMgY3JlYXRlZC4gVGhlIG1vc3QgY29tbW9uCisgICAgICBmdW5jdGlvbnMgZm9yIGEgcGx1Z2luIGNhbiBiZSBmb3VuZCBpbiBhIGxpYnJhcnkuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgR1N0cmVhbWVyIHByb3ZpZGVzIHNvbWUgc3RhbmRhcmQgbGlicmFyaWVzIHlvdSBjYW4gdXNlIHRvIGNyZWF0ZSBwbHVnaW5zLgorICAgIDwvcGFyYT4KKworICAgIDxjaGFwdGVyIGlkPSJnc3RyZWFtZXItYmFzZSI+CisgICAgICA8dGl0bGU+R1N0cmVhbWVyIEJhc2UgYW5kIFV0aWxsaXR5IENsYXNzZXM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIGxpYmdzdGJhc2UtJkdTVF9NQUpPUk1JTk9SOy5zbyBwcm92aWRlcyBzb21lIGJhc2UgY2xhc3NlcyB0byBiZSBleHRlbmRlZAorICAgICAgICBieSBlbGVtZW50cyBhbmQgdXRpbGxpdHkgY2xhc3NlcyB0aGF0IGFyZSBtb3N0IHVzZWZ1bCBmb3IgcGx1Z2luIGRldmVsb3BlcnMuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RiYXNlcGFyc2UueG1sIiAvPgorICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGJhc2VzcmMueG1sIiAvPgorICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGJhc2VzaW5rLnhtbCIgLz4KKyAgICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RiYXNldHJhbnNmb3JtLnhtbCIgLz4KKyAgICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RwdXNoc3JjLnhtbCIgLz4KKworICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGFkYXB0ZXIueG1sIiAvPgorICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGJpdHJlYWRlci54bWwiIC8+CisgICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0Ynl0ZXJlYWRlci54bWwiIC8+CisgICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0Ynl0ZXdyaXRlci54bWwiIC8+CisgICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0Y29sbGVjdHBhZHMueG1sIiAvPgorICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdHR5cGVmaW5kaGVscGVyLnhtbCIgLz4KKyAgICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RkYXRhcXVldWUueG1sIiAvPgorICAgIDwvY2hhcHRlcj4KKworICAgIDxjaGFwdGVyIGlkPSJnc3RyZWFtZXItY29udHJvbCI+CisgICAgICA8dGl0bGU+R1N0cmVhbWVyIER5bmFtaWMgUGFyYW1ldGVyIENvbnRyb2w8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIGxpYmdzdGNvbnRyb2xsZXItJkdTVF9NQUpPUk1JTk9SOy5zbyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHRvIGFuaW1hdGUKKyAgICAgICAgZWxlbWVudCBwcm9wZXJ0aWVzIG92ZXIgdGltZS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGNvbnRyb2xsZXIueG1sIiAvPgorICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGNvbnRyb2xzb3VyY2UueG1sIiAvPgorICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLnhtbCIgLz4KKyAgICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RsZm9jb250cm9sc291cmNlLnhtbCIgLz4KKyAgICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3Rjb250cm9sbGVyZ29iamVjdC54bWwiIC8+CisgICAgPC9jaGFwdGVyPgorCisgICAgPGNoYXB0ZXIgaWQ9ImdzdHJlYW1lci1kYXRhcHJvdG9jb2wiPgorICAgICAgPHRpdGxlPkdTdHJlYW1lciBEYXRhIFByb3RvY29sPC90aXRsZT4KKyAgICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RkYXRhcHJvdG9jb2wueG1sIiAvPgorICAgIDwvY2hhcHRlcj4KKworICAgIDxjaGFwdGVyIGlkPSJnc3RyZWFtZXItbmV0Ij4KKyAgICAgIDx0aXRsZT5HU3RyZWFtZXIgTmV0d29yayBDbGFzc2VzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBsaWJnc3RuZXQtJkdTVF9NQUpPUk1JTk9SOy5zbyBwcm92aWRlcyBuZXR3b3JrIGVsZW1lbnRzIGFuZCBvYmplY3RzLgorICAgICAgPC9wYXJhPgorCisgICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0bmV0Y2xpZW50Y2xvY2sueG1sIiAvPgorICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdG5ldHRpbWVwYWNrZXQueG1sIiAvPgorICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdG5ldHRpbWVwcm92aWRlci54bWwiIC8+CisgICAgPC9jaGFwdGVyPgorCisgICAgPGNoYXB0ZXIgaWQ9ImdzdHJlYW1lci1jaGVjayI+CisgICAgICA8dGl0bGU+R1N0cmVhbWVyIENoZWNrIFVuaXQgVGVzdGluZzwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgbGliZ3N0Y2hlY2stJkdTVF9NQUpPUk1JTk9SOy5zbyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IGZvciB3cml0aW5nCisgICAgICAgIHVuaXQgdGVzdHMgdGhhdCB1c2UgdGhlIGNoZWNrIGZyYW1ld29yay4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGNoZWNrLnhtbCIgLz4KKyAgICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RjaGVja2J1ZmZlcnN0cmF3LnhtbCIgLz4KKyAgICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RjaGVja2NvbnNpc3RlbmN5Y2hlY2tlci54bWwiIC8+CisgICAgPC9jaGFwdGVyPgorICA8L3BhcnQ+CisKKyAgPGNoYXB0ZXIgaWQ9ImdzdHJlYW1lci1oaWVyYXJjaHkiPgorICAgIDx0aXRsZT5PYmplY3QgSGllcmFyY2h5PC90aXRsZT4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvdHJlZV9pbmRleC5zZ21sIi8+CisgIDwvY2hhcHRlcj4KKworICA8aW5kZXggaWQ9ImFwaS1pbmRleC1mdWxsIj4KKyAgICA8dGl0bGU+QVBJIEluZGV4PC90aXRsZT4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvYXBpLWluZGV4LWZ1bGwueG1sIj48eGk6ZmFsbGJhY2sgLz48L3hpOmluY2x1ZGU+CisgIDwvaW5kZXg+CisgIDxpbmRleCBpZD0iYXBpLWluZGV4LWRlcHJlY2F0ZWQiIHJvbGU9ImRlcHJlY2F0ZWQiPgorICAgIDx0aXRsZT5JbmRleCBvZiBkZXByZWNhdGVkIEFQSTwvdGl0bGU+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2FwaS1pbmRleC1kZXByZWNhdGVkLnhtbCI+PHhpOmZhbGxiYWNrIC8+PC94aTppbmNsdWRlPgorICA8L2luZGV4PgorCisgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9hbm5vdGF0aW9uLWdsb3NzYXJ5LnhtbCI+PHhpOmZhbGxiYWNrIC8+PC94aTppbmNsdWRlPgorCis8L2Jvb2s+CmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtb3ZlcnJpZGVzLnR4dCBiL2RvY3MvbGlicy9nc3RyZWFtZXItbGlicy1vdmVycmlkZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtb3ZlcnJpZGVzLnR4dApkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dCBiL2RvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU5ZTk2OAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQKQEAgLTAsMCArMSwxMDQzIEBACisjIEdTdHJlYW1lciBMaWJyYXJpZXMgQVBJIHJlZmVyZW5jZSBzZWN0aW9ucworCisjIyBwbGVhc2UgYWRkIHNlY3Rpb25zIGluIGFscGhhYmV0aWNhbCBvcmRlciB1c2luZyB0aGUgZm9sbG93aW5nIHRlbXBsYXRlCisjIGxlYXZlIHR3byBlbXB0eSBsaW5lcyBiZXR3ZWVuIHNlY3Rpb25zCisjIDxTRUNUSU9OPgorIyA8RklMRT5nc3R4eHg8L0ZJTEU+CisjIDxUSVRMRT5Hc3RYeHg8L1RJVExFPgorIyB0eXBlZGVmcworIyBtYWNyb3MKKyMgY29uc3RydWN0b3IKKyMgbWV0aG9kcworIyA8U1VCU0VDVElPTiBTdGFuZGFyZD4KKyMgPFNVQlNFQ1RJT04gUHJpdmF0ZT4KKyMgPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPmdzdGRhdGFwcm90b2NvbDwvRklMRT4KKzxJTkNMVURFPmdzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmg8L0lOQ0xVREU+CitHc3REUEhlYWRlckZsYWcKK0dzdERQUGF5bG9hZFR5cGUKKworR1NUX0RQX0hFQURFUl9MRU5HVEgKK0dzdERQVmVyc2lvbgorR1NUX0RQX1ZFUlNJT05fTUFKT1IKK0dTVF9EUF9WRVJTSU9OX01JTk9SCisKK2dzdF9kcF9pbml0CisKK0dzdERQSGVhZGVyRnJvbUJ1ZmZlckZ1bmN0aW9uCitHc3REUFBhY2tldEZyb21DYXBzRnVuY3Rpb24KK0dzdERQUGFja2V0RnJvbUV2ZW50RnVuY3Rpb24KK0dzdERQUGFja2V0aXplcgorZ3N0X2RwX3BhY2tldGl6ZXJfbmV3Citnc3RfZHBfcGFja2V0aXplcl9mcmVlCisKK2dzdF9kcF9jcmMKKworZ3N0X2RwX2hlYWRlcl9wYXlsb2FkX2xlbmd0aAorZ3N0X2RwX2hlYWRlcl9wYXlsb2FkX3R5cGUKKworZ3N0X2RwX2J1ZmZlcl9mcm9tX2hlYWRlcgorZ3N0X2RwX2NhcHNfZnJvbV9wYWNrZXQKK2dzdF9kcF9ldmVudF9mcm9tX3BhY2tldAorCitnc3RfZHBfdmFsaWRhdGVfaGVhZGVyCitnc3RfZHBfdmFsaWRhdGVfcGF5bG9hZAorZ3N0X2RwX3ZhbGlkYXRlX3BhY2tldAorPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitHU1RfVFlQRV9EUF9WRVJTSU9OCitnc3RfZHBfdmVyc2lvbl9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPmdzdGNvbnRyb2xsZXI8L0ZJTEU+Cis8VElUTEU+R3N0Q29udHJvbGxlcjwvVElUTEU+Cis8SU5DTFVERT5nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmg8L0lOQ0xVREU+CitHc3RDb250cm9sbGVyCitnc3RfY29udHJvbGxlcl9pbml0Citnc3RfY29udHJvbGxlcl9uZXcKK2dzdF9jb250cm9sbGVyX25ld19saXN0Citnc3RfY29udHJvbGxlcl9uZXdfdmFsaXN0Citnc3RfY29udHJvbGxlcl9yZW1vdmVfcHJvcGVydGllcworZ3N0X2NvbnRyb2xsZXJfcmVtb3ZlX3Byb3BlcnRpZXNfbGlzdAorZ3N0X2NvbnRyb2xsZXJfcmVtb3ZlX3Byb3BlcnRpZXNfdmFsaXN0Citnc3RfY29udHJvbGxlcl9zZXRfZGlzYWJsZWQKK2dzdF9jb250cm9sbGVyX3NldF9wcm9wZXJ0eV9kaXNhYmxlZAorZ3N0X2NvbnRyb2xsZXJfc3VnZ2VzdF9uZXh0X3N5bmMKK2dzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzCitnc3RfY29udHJvbGxlcl9nZXRfY29udHJvbF9zb3VyY2UKK2dzdF9jb250cm9sbGVyX3NldF9jb250cm9sX3NvdXJjZQorZ3N0X2NvbnRyb2xsZXJfZ2V0Citnc3RfY29udHJvbGxlcl9nZXRfdmFsdWVfYXJyYXlzCitnc3RfY29udHJvbGxlcl9nZXRfdmFsdWVfYXJyYXkKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR3N0Q29udHJvbGxlckNsYXNzCitHc3RDb250cm9sbGVyUHJpdmF0ZQorR1NUX0NPTlRST0xMRVIKK0dTVF9JU19DT05UUk9MTEVSCitHU1RfQ09OVFJPTExFUl9DTEFTUworR1NUX0lTX0NPTlRST0xMRVJfQ0xBU1MKK0dTVF9DT05UUk9MTEVSX0dFVF9DTEFTUworR1NUX1RZUEVfQ09OVFJPTExFUgorPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK2dzdF9jb250cm9sbGVyX2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0Y29udHJvbHNvdXJjZTwvRklMRT4KKzxUSVRMRT5Hc3RDb250cm9sU291cmNlPC9USVRMRT4KKzxJTkNMVURFPmxpYnMvY29udHJvbGxlci9nc3Rjb250cm9sc291cmNlLmg8L0lOQ0xVREU+CitHc3RDb250cm9sU291cmNlCitHc3RDb250cm9sU291cmNlQ2xhc3MKK0dzdENvbnRyb2xTb3VyY2VCaW5kCitHc3RDb250cm9sU291cmNlR2V0VmFsdWUKK0dzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5CitHc3RUaW1lZFZhbHVlCitHc3RWYWx1ZUFycmF5Citnc3RfY29udHJvbF9zb3VyY2VfYmluZAorZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZQorZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZV9hcnJheQorPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitHU1RfQ09OVFJPTF9TT1VSQ0UKK0dTVF9JU19DT05UUk9MX1NPVVJDRQorR1NUX0NPTlRST0xfU09VUkNFX0NMQVNTCitHU1RfSVNfQ09OVFJPTF9TT1VSQ0VfQ0xBU1MKK0dTVF9DT05UUk9MX1NPVVJDRV9HRVRfQ0xBU1MKK0dTVF9UWVBFX0NPTlRST0xfU09VUkNFCis8U1VCU0VDVElPTiBQcml2YXRlPgorZ3N0X2NvbnRyb2xfc291cmNlX2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2U8L0ZJTEU+Cis8VElUTEU+R3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2U8L1RJVExFPgorPElOQ0xVREU+bGlicy9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmg8L0lOQ0xVREU+CitHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZQorR3N0SW50ZXJwb2xhdGVNb2RlCitnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcKK2dzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldAorZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0X2Zyb21fbGlzdAorZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0X2ludGVycG9sYXRpb25fbW9kZQorZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfZ2V0X2FsbAorZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfdW5zZXQKK2dzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3Vuc2V0X2FsbAorZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfZ2V0X2NvdW50Cis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK0dzdEludGVycG9sYXRpb25Db250cm9sU291cmNlQ2xhc3MKK0dzdEludGVycG9sYXRpb25Db250cm9sU291cmNlUHJpdmF0ZQorR1NUX0lOVEVSUE9MQVRJT05fQ09OVFJPTF9TT1VSQ0UKK0dTVF9JU19JTlRFUlBPTEFUSU9OX0NPTlRST0xfU09VUkNFCitHU1RfSU5URVJQT0xBVElPTl9DT05UUk9MX1NPVVJDRV9DTEFTUworR1NUX0lTX0lOVEVSUE9MQVRJT05fQ09OVFJPTF9TT1VSQ0VfQ0xBU1MKK0dTVF9JTlRFUlBPTEFUSU9OX0NPTlRST0xfU09VUkNFX0dFVF9DTEFTUworR1NUX1RZUEVfSU5URVJQT0xBVElPTl9DT05UUk9MX1NPVVJDRQorPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK2dzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0bGZvY29udHJvbHNvdXJjZTwvRklMRT4KKzxUSVRMRT5Hc3RMRk9Db250cm9sU291cmNlPC9USVRMRT4KKzxJTkNMVURFPmxpYnMvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmg8L0lOQ0xVREU+CitHc3RMRk9Db250cm9sU291cmNlCitHc3RMRk9XYXZlZm9ybQorZ3N0X2xmb19jb250cm9sX3NvdXJjZV9uZXcKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR3N0TEZPQ29udHJvbFNvdXJjZUNsYXNzCitHc3RMRk9Db250cm9sU291cmNlUHJpdmF0ZQorR1NUX0lTX0xGT19DT05UUk9MX1NPVVJDRQorR1NUX0lTX0xGT19DT05UUk9MX1NPVVJDRV9DTEFTUworR1NUX0xGT19DT05UUk9MX1NPVVJDRQorR1NUX0xGT19DT05UUk9MX1NPVVJDRV9DTEFTUworR1NUX0xGT19DT05UUk9MX1NPVVJDRV9HRVRfQ0xBU1MKK0dTVF9UWVBFX0xGT19DT05UUk9MX1NPVVJDRQorR1NUX1RZUEVfTEZPX1dBVkVGT1JNCis8U1VCU0VDVElPTiBQcml2YXRlPgorZ3N0X2xmb19jb250cm9sX3NvdXJjZV9nZXRfdHlwZQorZ3N0X2xmb193YXZlZm9ybV9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPmdzdGNvbnRyb2xsZXJnb2JqZWN0PC9GSUxFPgorPFRJVExFPkdzdENvbnRyb2xsZXJHT2JqZWN0PC9USVRMRT4KKzxJTkNMVURFPmxpYnMvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmg8L0lOQ0xVREU+Citnc3Rfb2JqZWN0X2NvbnRyb2xfcHJvcGVydGllcworZ3N0X29iamVjdF91bmNvbnRyb2xfcHJvcGVydGllcworZ3N0X29iamVjdF9nZXRfY29udHJvbGxlcgorZ3N0X29iamVjdF9zZXRfY29udHJvbGxlcgorZ3N0X29iamVjdF9zdWdnZXN0X25leHRfc3luYworZ3N0X29iamVjdF9zeW5jX3ZhbHVlcworZ3N0X29iamVjdF9nZXRfY29udHJvbF9zb3VyY2UKK2dzdF9vYmplY3Rfc2V0X2NvbnRyb2xfc291cmNlCitnc3Rfb2JqZWN0X2dldF92YWx1ZV9hcnJheXMKK2dzdF9vYmplY3RfZ2V0X3ZhbHVlX2FycmF5Citnc3Rfb2JqZWN0X2dldF9jb250cm9sX3JhdGUKK2dzdF9vYmplY3Rfc2V0X2NvbnRyb2xfcmF0ZQorPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Cis8U1VCU0VDVElPTiBQcml2YXRlPgorPC9TRUNUSU9OPgorCisjIGJhc2UgY2xhc3NlcworCis8U0VDVElPTj4KKzxGSUxFPmdzdGFkYXB0ZXI8L0ZJTEU+Cis8VElUTEU+R3N0QWRhcHRlcjwvVElUTEU+Cis8SU5DTFVERT5nc3QvYmFzZS9nc3RhZGFwdGVyLmg8L0lOQ0xVREU+CitHc3RBZGFwdGVyCitnc3RfYWRhcHRlcl9uZXcKK2dzdF9hZGFwdGVyX2NsZWFyCitnc3RfYWRhcHRlcl9wdXNoCitnc3RfYWRhcHRlcl9tYXAKK2dzdF9hZGFwdGVyX3VubWFwCitnc3RfYWRhcHRlcl9jb3B5Citnc3RfYWRhcHRlcl9mbHVzaAorZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlCitnc3RfYWRhcHRlcl9hdmFpbGFibGVfZmFzdAorZ3N0X2FkYXB0ZXJfdGFrZQorZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIKK2dzdF9hZGFwdGVyX3Rha2VfbGlzdAorZ3N0X2FkYXB0ZXJfcHJldl90aW1lc3RhbXAKK2dzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMgorZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyX3BlZWsKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR3N0QWRhcHRlckNsYXNzCitHc3RBZGFwdGVyUHJpdmF0ZQorR1NUX0FEQVBURVIKK0dTVF9JU19BREFQVEVSCitHU1RfVFlQRV9BREFQVEVSCitHU1RfQURBUFRFUl9DTEFTUworR1NUX0lTX0FEQVBURVJfQ0xBU1MKK0dTVF9BREFQVEVSX0dFVF9DTEFTUworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK2dzdF9hZGFwdGVyX2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0YmFzZXBhcnNlPC9GSUxFPgorPFRJVExFPkdzdEJhc2VQYXJzZTwvVElUTEU+Cis8SU5DTFVERT5nc3QvYmFzZS9nc3RiYXNlcGFyc2UuaDwvSU5DTFVERT4KK0dzdEJhc2VQYXJzZQorR3N0QmFzZVBhcnNlQ2xhc3MKKworZ3N0X2Jhc2VfcGFyc2Vfc2V0X2R1cmF0aW9uCitnc3RfYmFzZV9wYXJzZV9zZXRfYXZlcmFnZV9iaXRyYXRlCitnc3RfYmFzZV9wYXJzZV9zZXRfbWluX2ZyYW1lX3NpemUKK2dzdF9iYXNlX3BhcnNlX3NldF9wYXNzdGhyb3VnaAorZ3N0X2Jhc2VfcGFyc2Vfc2V0X3N5bmNhYmxlCitnc3RfYmFzZV9wYXJzZV9zZXRfaGFzX3RpbWluZ19pbmZvCitnc3RfYmFzZV9wYXJzZV9zZXRfZnJhbWVfcmF0ZQorZ3N0X2Jhc2VfcGFyc2Vfc2V0X2xhdGVuY3kKK2dzdF9iYXNlX3BhcnNlX2NvbnZlcnRfZGVmYXVsdAorZ3N0X2Jhc2VfcGFyc2VfYWRkX2luZGV4X2VudHJ5CisKK0dzdEJhc2VQYXJzZUZyYW1lCitHc3RCYXNlUGFyc2VGcmFtZUZsYWdzCitnc3RfYmFzZV9wYXJzZV9mcmFtZV9uZXcKK2dzdF9iYXNlX3BhcnNlX2ZyYW1lX2luaXQKK2dzdF9iYXNlX3BhcnNlX2ZyYW1lX2ZyZWUKKworZ3N0X2Jhc2VfcGFyc2VfcHVzaF9mcmFtZQorCitHU1RfQkFTRV9QQVJTRV9EUkFJTklORworR1NUX0JBU0VfUEFSU0VfRkxBR19EUkFJTklORworR1NUX0JBU0VfUEFSU0VfRkxBR19MT1NUX1NZTkMKK0dTVF9CQVNFX1BBUlNFX0ZMT1dfRFJPUFBFRAorR1NUX0JBU0VfUEFSU0VfRkxPV19RVUVVRUQKK0dTVF9CQVNFX1BBUlNFX0xPU1RfU1lOQworR1NUX0JBU0VfUEFSU0VfU0lOS19QQUQKK0dTVF9CQVNFX1BBUlNFX1NSQ19QQUQKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR3N0QmFzZVBhcnNlUHJpdmF0ZQorR1NUX0JBU0VfUEFSU0UKK0dTVF9CQVNFX1BBUlNFX0NBU1QKK0dTVF9JU19CQVNFX1BBUlNFCitHU1RfVFlQRV9CQVNFX1BBUlNFCitHU1RfQkFTRV9QQVJTRV9DTEFTUworR1NUX0lTX0JBU0VfUEFSU0VfQ0xBU1MKK0dTVF9CQVNFX1BBUlNFX0dFVF9DTEFTUworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK2dzdF9iYXNlX3BhcnNlX2dldF90eXBlCitnc3RfYmFzZV9wYXJzZV9mcmFtZV9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPmdzdGJhc2VzcmM8L0ZJTEU+Cis8VElUTEU+R3N0QmFzZVNyYzwvVElUTEU+Cis8SU5DTFVERT5nc3QvYmFzZS9nc3RiYXNlc3JjLmg8L0lOQ0xVREU+CitHc3RCYXNlU3JjCitHc3RCYXNlU3JjQ2xhc3MKK0dzdEJhc2VTcmNGbGFncworCitnc3RfYmFzZV9zcmNfd2FpdF9wbGF5aW5nCitnc3RfYmFzZV9zcmNfaXNfbGl2ZQorZ3N0X2Jhc2Vfc3JjX3NldF9saXZlCitnc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdAorZ3N0X2Jhc2Vfc3JjX3F1ZXJ5X2xhdGVuY3kKK2dzdF9iYXNlX3NyY19nZXRfYmxvY2tzaXplCitnc3RfYmFzZV9zcmNfc2V0X2Jsb2Nrc2l6ZQorZ3N0X2Jhc2Vfc3JjX2dldF9kb190aW1lc3RhbXAKK2dzdF9iYXNlX3NyY19zZXRfZG9fdGltZXN0YW1wCitnc3RfYmFzZV9zcmNfc2V0X2R5bmFtaWNfc2l6ZQorZ3N0X2Jhc2Vfc3JjX25ld19zZWFtbGVzc19zZWdtZW50Citnc3RfYmFzZV9zcmNfc2V0X2NhcHMKKworR1NUX0JBU0VfU1JDX1BBRAorPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitHc3RCYXNlU3JjUHJpdmF0ZQorR1NUX0JBU0VfU1JDCitHU1RfQkFTRV9TUkNfQ0FTVAorR1NUX0lTX0JBU0VfU1JDCitHU1RfVFlQRV9CQVNFX1NSQworR1NUX0JBU0VfU1JDX0NMQVNTCitHU1RfSVNfQkFTRV9TUkNfQ0xBU1MKK0dTVF9CQVNFX1NSQ19HRVRfQ0xBU1MKKzxTVUJTRUNUSU9OIFByaXZhdGU+Citnc3RfYmFzZV9zcmNfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5nc3RiYXNlc2luazwvRklMRT4KKzxUSVRMRT5Hc3RCYXNlU2luazwvVElUTEU+Cis8SU5DTFVERT5nc3QvYmFzZS9nc3RiYXNlc2luay5oPC9JTkNMVURFPgorR3N0QmFzZVNpbmsKK0dzdEJhc2VTaW5rQ2xhc3MKKworZ3N0X2Jhc2Vfc2lua19xdWVyeV9sYXRlbmN5Citnc3RfYmFzZV9zaW5rX2dldF9sYXRlbmN5Citnc3RfYmFzZV9zaW5rX2RvX3ByZXJvbGwKK2dzdF9iYXNlX3Npbmtfd2FpdF9wcmVyb2xsCitnc3RfYmFzZV9zaW5rX3dhaXRfY2xvY2sKK2dzdF9iYXNlX3Npbmtfd2FpdF9lb3MKK2dzdF9iYXNlX3Npbmtfc2V0X3N5bmMKK2dzdF9iYXNlX3NpbmtfZ2V0X3N5bmMKK2dzdF9iYXNlX3Npbmtfc2V0X21heF9sYXRlbmVzcworZ3N0X2Jhc2Vfc2lua19nZXRfbWF4X2xhdGVuZXNzCitnc3RfYmFzZV9zaW5rX3NldF9xb3NfZW5hYmxlZAorZ3N0X2Jhc2Vfc2lua19pc19xb3NfZW5hYmxlZAorZ3N0X2Jhc2Vfc2lua19zZXRfYXN5bmNfZW5hYmxlZAorZ3N0X2Jhc2Vfc2lua19pc19hc3luY19lbmFibGVkCitnc3RfYmFzZV9zaW5rX3NldF90c19vZmZzZXQKK2dzdF9iYXNlX3NpbmtfZ2V0X3RzX29mZnNldAorZ3N0X2Jhc2Vfc2lua19zZXRfcmVuZGVyX2RlbGF5Citnc3RfYmFzZV9zaW5rX2dldF9yZW5kZXJfZGVsYXkKK2dzdF9iYXNlX3Npbmtfc2V0X2xhc3RfYnVmZmVyX2VuYWJsZWQKK2dzdF9iYXNlX3NpbmtfaXNfbGFzdF9idWZmZXJfZW5hYmxlZAorZ3N0X2Jhc2Vfc2lua19nZXRfbGFzdF9idWZmZXIKK2dzdF9iYXNlX3Npbmtfc2V0X2Jsb2Nrc2l6ZQorZ3N0X2Jhc2Vfc2lua19nZXRfYmxvY2tzaXplCitnc3RfYmFzZV9zaW5rX2dldF90aHJvdHRsZV90aW1lCitnc3RfYmFzZV9zaW5rX3NldF90aHJvdHRsZV90aW1lCisKK0dTVF9CQVNFX1NJTktfUEFECitHU1RfQkFTRV9TSU5LX0dFVF9QUkVST0xMX0NPTkQKK0dTVF9CQVNFX1NJTktfR0VUX1BSRVJPTExfTE9DSworR1NUX0JBU0VfU0lOS19QUkVST0xMX0JST0FEQ0FTVAorR1NUX0JBU0VfU0lOS19QUkVST0xMX0xPQ0sKK0dTVF9CQVNFX1NJTktfUFJFUk9MTF9TSUdOQUwKK0dTVF9CQVNFX1NJTktfUFJFUk9MTF9USU1FRF9XQUlUCitHU1RfQkFTRV9TSU5LX1BSRVJPTExfVFJZTE9DSworR1NUX0JBU0VfU0lOS19QUkVST0xMX1VOTE9DSworR1NUX0JBU0VfU0lOS19QUkVST0xMX1dBSVQKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitHU1RfQkFTRV9TSU5LCitHU1RfQkFTRV9TSU5LX0NBU1QKK0dTVF9JU19CQVNFX1NJTksKK0dTVF9UWVBFX0JBU0VfU0lOSworR1NUX0JBU0VfU0lOS19DTEFTUworR1NUX0lTX0JBU0VfU0lOS19DTEFTUworR1NUX0JBU0VfU0lOS19HRVRfQ0xBU1MKKzxTVUJTRUNUSU9OIFByaXZhdGU+CitHc3RCYXNlU2lua1ByaXZhdGUKK2dzdF9iYXNlX3NpbmtfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworCis8U0VDVElPTj4KKzxGSUxFPmdzdGJhc2V0cmFuc2Zvcm08L0ZJTEU+Cis8VElUTEU+R3N0QmFzZVRyYW5zZm9ybTwvVElUTEU+Cis8SU5DTFVERT5nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg8L0lOQ0xVREU+CitHc3RCYXNlVHJhbnNmb3JtCitHc3RCYXNlVHJhbnNmb3JtQ2xhc3MKKworZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Bhc3N0aHJvdWdoCitnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Bhc3N0aHJvdWdoCitnc3RfYmFzZV90cmFuc2Zvcm1faXNfaW5fcGxhY2UKK2dzdF9iYXNlX3RyYW5zZm9ybV9zZXRfaW5fcGxhY2UKK2dzdF9iYXNlX3RyYW5zZm9ybV9pc19xb3NfZW5hYmxlZAorZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9xb3NfZW5hYmxlZAorZ3N0X2Jhc2VfdHJhbnNmb3JtX3VwZGF0ZV9xb3MKK2dzdF9iYXNlX3RyYW5zZm9ybV9zZXRfZ2FwX2F3YXJlCitnc3RfYmFzZV90cmFuc2Zvcm1fc3VnZ2VzdAorZ3N0X2Jhc2VfdHJhbnNmb3JtX3JlY29uZmlndXJlCisKK0dTVF9CQVNFX1RSQU5TRk9STV9TSU5LX05BTUUKK0dTVF9CQVNFX1RSQU5TRk9STV9TUkNfTkFNRQorR1NUX0JBU0VfVFJBTlNGT1JNX1NJTktfUEFECitHU1RfQkFTRV9UUkFOU0ZPUk1fU1JDX1BBRAorCitHU1RfQkFTRV9UUkFOU0ZPUk1fRkxPV19EUk9QUEVECisKK0dTVF9CQVNFX1RSQU5TRk9STV9MT0NLCitHU1RfQkFTRV9UUkFOU0ZPUk1fVU5MT0NLCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR1NUX0JBU0VfVFJBTlNGT1JNCitHU1RfSVNfQkFTRV9UUkFOU0ZPUk0KK0dTVF9UWVBFX0JBU0VfVFJBTlNGT1JNCitHU1RfQkFTRV9UUkFOU0ZPUk1fQ0xBU1MKK0dTVF9JU19CQVNFX1RSQU5TRk9STV9DTEFTUworR1NUX0JBU0VfVFJBTlNGT1JNX0dFVF9DTEFTUworR1NUX0JBU0VfVFJBTlNGT1JNX0NBU1QKKzxTVUJTRUNUSU9OIFByaXZhdGU+CitHc3RCYXNlVHJhbnNmb3JtUHJpdmF0ZQorZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldF90eXBlCis8L1NFQ1RJT04+CisKKworPFNFQ1RJT04+Cis8RklMRT5nc3RiaXRyZWFkZXI8L0ZJTEU+Cis8VElUTEU+R3N0Qml0UmVhZGVyPC9USVRMRT4KKzxJTkNMVURFPmdzdC9iYXNlL2dzdGJpdHJlYWRlci5oPC9JTkNMVURFPgorR3N0Qml0UmVhZGVyCisKK0dTVF9CSVRfUkVBREVSX0lOSVQKKworZ3N0X2JpdF9yZWFkZXJfbmV3Citnc3RfYml0X3JlYWRlcl9mcmVlCisKK2dzdF9iaXRfcmVhZGVyX2luaXQKKworZ3N0X2JpdF9yZWFkZXJfZ2V0X3BvcworZ3N0X2JpdF9yZWFkZXJfZ2V0X3JlbWFpbmluZworZ3N0X2JpdF9yZWFkZXJfc2V0X3BvcworZ3N0X2JpdF9yZWFkZXJfZ2V0X3NpemUKK2dzdF9iaXRfcmVhZGVyX3NraXAKK2dzdF9iaXRfcmVhZGVyX3NraXBfdG9fYnl0ZQorCitnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MTYKK2dzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQzMgorZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDY0Citnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OAorCitnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDE2Citnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDMyCitnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDY0Citnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDgKKworZ3N0X2JpdF9yZWFkZXJfc2tpcF91bmNoZWNrZWQKK2dzdF9iaXRfcmVhZGVyX3NraXBfdG9fYnl0ZV91bmNoZWNrZWQKKworZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDE2X3VuY2hlY2tlZAorZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDMyX3VuY2hlY2tlZAorZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDY0X3VuY2hlY2tlZAorZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDhfdW5jaGVja2VkCisKK2dzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MTZfdW5jaGVja2VkCitnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDMyX3VuY2hlY2tlZAorZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ2NF91bmNoZWNrZWQKK2dzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50OF91bmNoZWNrZWQKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK0dTVF9CSVRfUkVBREVSCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0Ynl0ZXJlYWRlcjwvRklMRT4KKzxUSVRMRT5Hc3RCeXRlUmVhZGVyPC9USVRMRT4KKzxJTkNMVURFPmdzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaDwvSU5DTFVERT4KK0dzdEJ5dGVSZWFkZXIKKworR1NUX0JZVEVfUkVBREVSX0lOSVQKKworZ3N0X2J5dGVfcmVhZGVyX25ldworZ3N0X2J5dGVfcmVhZGVyX2ZyZWUKKworZ3N0X2J5dGVfcmVhZGVyX2luaXQKKworZ3N0X2J5dGVfcmVhZGVyX2dldF9wb3MKK2dzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nCitnc3RfYnl0ZV9yZWFkZXJfc2V0X3BvcworZ3N0X2J5dGVfcmVhZGVyX2dldF9zaXplCitnc3RfYnl0ZV9yZWFkZXJfc2tpcAorCitnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDgKK2dzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfYmUKK2dzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfbGUKK2dzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfYmUKK2dzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfbGUKK2dzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfYmUKK2dzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfbGUKK2dzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfYmUKK2dzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfbGUKKworZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OAorZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmUKK2dzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2xlCitnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9iZQorZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfbGUKK2dzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlCitnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9sZQorZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmUKK2dzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2xlCisKK2dzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDgKK2dzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2JlCitnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQxNl9sZQorZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfYmUKK2dzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2xlCitnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9iZQorZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfbGUKK2dzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2JlCitnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9sZQorCitnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50OAorZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2JlCitnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfbGUKK2dzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9iZQorZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2xlCitnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfYmUKK2dzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9sZQorZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2JlCitnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfbGUKKworCitnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0MzJfbGUKK2dzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9iZQorZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDY0X2xlCitnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfYmUKKworZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQzMl9sZQorZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQzMl9iZQorZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9sZQorZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9iZQorCitnc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGEKK2dzdF9ieXRlX3JlYWRlcl9kdXBfZGF0YQorZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YQorCitnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyCisKK2dzdF9ieXRlX3JlYWRlcl9nZXRfc3RyaW5nCitnc3RfYnl0ZV9yZWFkZXJfZ2V0X3N0cmluZ191dGY4CisKK2dzdF9ieXRlX3JlYWRlcl9wZWVrX3N0cmluZworZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3RyaW5nX3V0ZjgKKworZ3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmcKK2dzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjgKK2dzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjE2Citnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGYzMgorCitnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmcKK2dzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGY4Citnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmMTYKK2dzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGYzMgorCitnc3RfYnl0ZV9yZWFkZXJfc2tpcF91bmNoZWNrZWQKKworZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ4X3VuY2hlY2tlZAorZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9iZV91bmNoZWNrZWQKK2dzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfbGVfdW5jaGVja2VkCitnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDI0X2JlX3VuY2hlY2tlZAorZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9sZV91bmNoZWNrZWQKK2dzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfYmVfdW5jaGVja2VkCitnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2xlX3VuY2hlY2tlZAorZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9iZV91bmNoZWNrZWQKK2dzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfbGVfdW5jaGVja2VkCisKK2dzdF9ieXRlX3JlYWRlcl9nZXRfdWludDhfdW5jaGVja2VkCitnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9iZV91bmNoZWNrZWQKK2dzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2xlX3VuY2hlY2tlZAorZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfYmVfdW5jaGVja2VkCitnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9sZV91bmNoZWNrZWQKK2dzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlX3VuY2hlY2tlZAorZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfbGVfdW5jaGVja2VkCitnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9iZV91bmNoZWNrZWQKK2dzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2xlX3VuY2hlY2tlZAorCitnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ4X3VuY2hlY2tlZAorZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfYmVfdW5jaGVja2VkCitnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQxNl9sZV91bmNoZWNrZWQKK2dzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2JlX3VuY2hlY2tlZAorZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfbGVfdW5jaGVja2VkCitnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9iZV91bmNoZWNrZWQKK2dzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2xlX3VuY2hlY2tlZAorZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfYmVfdW5jaGVja2VkCitnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9sZV91bmNoZWNrZWQKKworZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDhfdW5jaGVja2VkCitnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfYmVfdW5jaGVja2VkCitnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfbGVfdW5jaGVja2VkCitnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfYmVfdW5jaGVja2VkCitnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfbGVfdW5jaGVja2VkCitnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfYmVfdW5jaGVja2VkCitnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfbGVfdW5jaGVja2VkCitnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfYmVfdW5jaGVja2VkCitnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfbGVfdW5jaGVja2VkCisKK2dzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9sZV91bmNoZWNrZWQKK2dzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9iZV91bmNoZWNrZWQKK2dzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9sZV91bmNoZWNrZWQKK2dzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9iZV91bmNoZWNrZWQKKworZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQzMl9sZV91bmNoZWNrZWQKK2dzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfYmVfdW5jaGVja2VkCitnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2xlX3VuY2hlY2tlZAorZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9iZV91bmNoZWNrZWQKKworZ3N0X2J5dGVfcmVhZGVyX2R1cF9kYXRhX3VuY2hlY2tlZAorZ3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhX3VuY2hlY2tlZAorZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YV91bmNoZWNrZWQKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK0dTVF9CWVRFX1JFQURFUgorIyBzZWVtcyB0byBiZSBhIGhlYWRlciBwYXJzaW5nIGJ1ZworZ19tZW1kdXAKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5nc3RieXRld3JpdGVyPC9GSUxFPgorPFRJVExFPkdzdEJ5dGVXcml0ZXI8L1RJVExFPgorPElOQ0xVREU+Z3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5oPC9JTkNMVURFPgorR3N0Qnl0ZVdyaXRlcgorCitnc3RfYnl0ZV93cml0ZXJfbmV3Citnc3RfYnl0ZV93cml0ZXJfbmV3X3dpdGhfZGF0YQorZ3N0X2J5dGVfd3JpdGVyX25ld193aXRoX3NpemUKKworZ3N0X2J5dGVfd3JpdGVyX2luaXQKK2dzdF9ieXRlX3dyaXRlcl9pbml0X3dpdGhfZGF0YQorZ3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9zaXplCisKK2dzdF9ieXRlX3dyaXRlcl9mcmVlCitnc3RfYnl0ZV93cml0ZXJfZnJlZV9hbmRfZ2V0X2J1ZmZlcgorZ3N0X2J5dGVfd3JpdGVyX2ZyZWVfYW5kX2dldF9kYXRhCisKK2dzdF9ieXRlX3dyaXRlcl9yZXNldAorZ3N0X2J5dGVfd3JpdGVyX3Jlc2V0X2FuZF9nZXRfZGF0YQorZ3N0X2J5dGVfd3JpdGVyX3Jlc2V0X2FuZF9nZXRfYnVmZmVyCisKK2dzdF9ieXRlX3dyaXRlcl9nZXRfcG9zCitnc3RfYnl0ZV93cml0ZXJfc2V0X3BvcworZ3N0X2J5dGVfd3JpdGVyX2dldF9yZW1haW5pbmcKK2dzdF9ieXRlX3dyaXRlcl9nZXRfc2l6ZQorZ3N0X2J5dGVfd3JpdGVyX2Vuc3VyZV9mcmVlX3NwYWNlCisKK2dzdF9ieXRlX3dyaXRlcl9wdXRfaW50OAorZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9iZQorZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9sZQorZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9iZQorZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9sZQorZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9iZQorZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9sZQorZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9iZQorZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9sZQorCitnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4Citnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9iZQorZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfbGUKK2dzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2JlCitnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9sZQorZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfYmUKK2dzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlCitnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9iZQorZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfbGUKKworZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDMyX2JlCitnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfbGUKK2dzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9iZQorZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDY0X2xlCisKK2dzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nCitnc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZ191dGYxNgorZ3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmdfdXRmMzIKK2dzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nX3V0ZjgKKworZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhCitnc3RfYnl0ZV93cml0ZXJfZmlsbAorCitnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDhfdW5jaGVja2VkCitnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2JlX3VuY2hlY2tlZAorZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9sZV91bmNoZWNrZWQKK2dzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfYmVfdW5jaGVja2VkCitnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2xlX3VuY2hlY2tlZAorZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9iZV91bmNoZWNrZWQKK2dzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfbGVfdW5jaGVja2VkCitnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2JlX3VuY2hlY2tlZAorZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9sZV91bmNoZWNrZWQKKworZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50OF91bmNoZWNrZWQKK2dzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2JlX3VuY2hlY2tlZAorZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfbGVfdW5jaGVja2VkCitnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9iZV91bmNoZWNrZWQKK2dzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2xlX3VuY2hlY2tlZAorZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfYmVfdW5jaGVja2VkCitnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZV91bmNoZWNrZWQKK2dzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2JlX3VuY2hlY2tlZAorZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfbGVfdW5jaGVja2VkCisKK2dzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9iZV91bmNoZWNrZWQKK2dzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9sZV91bmNoZWNrZWQKK2dzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9iZV91bmNoZWNrZWQKK2dzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9sZV91bmNoZWNrZWQKKworZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhX3VuY2hlY2tlZAorZ3N0X2J5dGVfd3JpdGVyX2ZpbGxfdW5jaGVja2VkCis8U1VCU0VDVElPTiBQcml2YXRlPgorR1NUX0JZVEVfV1JJVEVSCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0Y29sbGVjdHBhZHM8L0ZJTEU+Cis8VElUTEU+R3N0Q29sbGVjdFBhZHM8L1RJVExFPgorPElOQ0xVREU+Z3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDwvSU5DTFVERT4KK0dzdENvbGxlY3REYXRhCitHc3RDb2xsZWN0UGFkcworR3N0Q29sbGVjdFBhZHNGdW5jdGlvbgorR3N0Q29sbGVjdFBhZHNDbGlwRnVuY3Rpb24KK0dzdENvbGxlY3REYXRhRGVzdHJveU5vdGlmeQorZ3N0X2NvbGxlY3RfcGFkc19uZXcKK2dzdF9jb2xsZWN0X3BhZHNfc2V0X2Z1bmN0aW9uCitnc3RfY29sbGVjdF9wYWRzX3NldF9jbGlwX2Z1bmN0aW9uCitnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQKK2dzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZF9mdWxsCitnc3RfY29sbGVjdF9wYWRzX3JlbW92ZV9wYWQKK2dzdF9jb2xsZWN0X3BhZHNfaXNfYWN0aXZlCitnc3RfY29sbGVjdF9wYWRzX2NvbGxlY3QKK2dzdF9jb2xsZWN0X3BhZHNfY29sbGVjdF9yYW5nZQorZ3N0X2NvbGxlY3RfcGFkc19zdGFydAorZ3N0X2NvbGxlY3RfcGFkc19zdG9wCitnc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaGluZworZ3N0X2NvbGxlY3RfcGFkc19wZWVrCitnc3RfY29sbGVjdF9wYWRzX3BvcAorZ3N0X2NvbGxlY3RfcGFkc19hdmFpbGFibGUKK2dzdF9jb2xsZWN0X3BhZHNfcmVhZF9idWZmZXIKK2dzdF9jb2xsZWN0X3BhZHNfdGFrZV9idWZmZXIKK2dzdF9jb2xsZWN0X3BhZHNfZmx1c2gKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR3N0Q29sbGVjdFBhZHNDbGFzcworR3N0Q29sbGVjdFBhZHNQcml2YXRlCitHU1RfQ09MTEVDVF9QQURTCitHU1RfSVNfQ09MTEVDVF9QQURTCitHU1RfVFlQRV9DT0xMRUNUX1BBRFMKK0dTVF9DT0xMRUNUX1BBRFNfQ0xBU1MKK0dTVF9JU19DT0xMRUNUX1BBRFNfQ0xBU1MKK0dTVF9DT0xMRUNUX1BBRFNfR0VUX0NMQVNTCis8U1VCU0VDVElPTiBQcml2YXRlPgorZ3N0X2NvbGxlY3RfcGFkc19nZXRfdHlwZQorR1NUX0NPTExFQ1RfUEFEU19HRVRfUEFEX0xPQ0sKK0dTVF9DT0xMRUNUX1BBRFNfUEFEX0xPQ0sKK0dTVF9DT0xMRUNUX1BBRFNfUEFEX1VOTE9DSworR1NUX0NPTExFQ1RfUEFEU19CUk9BRENBU1QKK0dTVF9DT0xMRUNUX1BBRFNfR0VUX0NPTkQKK0dTVF9DT0xMRUNUX1BBRFNfU0lHTkFMCitHU1RfQ09MTEVDVF9QQURTX1dBSVQKKzwvU0VDVElPTj4KKworCis8U0VDVElPTj4KKzxGSUxFPmdzdHB1c2hzcmM8L0ZJTEU+Cis8VElUTEU+R3N0UHVzaFNyYzwvVElUTEU+Cis8SU5DTFVERT5nc3QvYmFzZS9nc3RwdXNoc3JjLmg8L0lOQ0xVREU+CitHc3RQdXNoU3JjCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK0dzdFB1c2hTcmNDbGFzcworR1NUX1BVU0hfU1JDCitHU1RfSVNfUFVTSF9TUkMKK0dTVF9UWVBFX1BVU0hfU1JDCitHU1RfUFVTSF9TUkNfQ0xBU1MKK0dTVF9JU19QVVNIX1NSQ19DTEFTUworR1NUX1BVU0hfU1JDX0dFVF9DTEFTUworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK2dzdF9wdXNoX3NyY19nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPmdzdHR5cGVmaW5kaGVscGVyPC9GSUxFPgorPFRJVExFPkdzdFR5cGVGaW5kSGVscGVyPC9USVRMRT4KKzxJTkNMVURFPmdzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmg8L0lOQ0xVREU+Citnc3RfdHlwZV9maW5kX2hlbHBlcgorZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2J1ZmZlcgorZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2V4dGVuc2lvbgorZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2RhdGEKK0dzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbgorZ3N0X3R5cGVfZmluZF9oZWxwZXJfZ2V0X3JhbmdlCitnc3RfdHlwZV9maW5kX2hlbHBlcl9nZXRfcmFuZ2VfZXh0Cis8U1VCU0VDVElPTiBQcml2YXRlPgorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPmdzdGRhdGFxdWV1ZTwvRklMRT4KKzxUSVRMRT5Hc3REYXRhUXVldWU8L1RJVExFPgorPElOQ0xVREU+Z3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmg8L0lOQ0xVREU+CitHc3REYXRhUXVldWUKK0dzdERhdGFRdWV1ZVNpemUKK0dzdERhdGFRdWV1ZUNoZWNrRnVsbEZ1bmN0aW9uCitHc3REYXRhUXVldWVJdGVtCitHc3REYXRhUXVldWVFbXB0eUNhbGxiYWNrCitHc3REYXRhUXVldWVGdWxsQ2FsbGJhY2sKK2dzdF9kYXRhX3F1ZXVlX25ldworZ3N0X2RhdGFfcXVldWVfbmV3X2Z1bGwKK2dzdF9kYXRhX3F1ZXVlX3B1c2gKK2dzdF9kYXRhX3F1ZXVlX3BvcAorZ3N0X2RhdGFfcXVldWVfZmx1c2gKK2dzdF9kYXRhX3F1ZXVlX3NldF9mbHVzaGluZworZ3N0X2RhdGFfcXVldWVfZHJvcF9oZWFkCitnc3RfZGF0YV9xdWV1ZV9pc19mdWxsCitnc3RfZGF0YV9xdWV1ZV9pc19lbXB0eQorZ3N0X2RhdGFfcXVldWVfZ2V0X2xldmVsCitnc3RfZGF0YV9xdWV1ZV9saW1pdHNfY2hhbmdlZAorPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitHc3REYXRhUXVldWVDbGFzcworR1NUX0RBVEFfUVVFVUUKK0dTVF9JU19EQVRBX1FVRVVFCitHU1RfVFlQRV9EQVRBX1FVRVVFCitHU1RfREFUQV9RVUVVRV9DTEFTUworR1NUX0lTX0RBVEFfUVVFVUVfQ0xBU1MKKzxTVUJTRUNUSU9OIFByaXZhdGU+Citnc3RfZGF0YV9xdWV1ZV9nZXRfdHlwZQorPC9TRUNUSU9OPgorCisjIG5ldAorCis8U0VDVElPTj4KKzxGSUxFPmdzdG5ldGNsaWVudGNsb2NrPC9GSUxFPgorPFRJVExFPkdzdE5ldENsaWVudENsb2NrPC9USVRMRT4KKzxJTkNMVURFPmdzdC9uZXQvZ3N0bmV0Lmg8L0lOQ0xVREU+CitHc3ROZXRDbGllbnRDbG9jaworZ3N0X25ldF9jbGllbnRfY2xvY2tfbmV3Cis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK0dzdE5ldENsaWVudENsb2NrQ2xhc3MKK0dzdE5ldENsaWVudENsb2NrUHJpdmF0ZQorR1NUX05FVF9DTElFTlRfQ0xPQ0sKK0dTVF9JU19ORVRfQ0xJRU5UX0NMT0NLCitHU1RfVFlQRV9ORVRfQ0xJRU5UX0NMT0NLCitHU1RfTkVUX0NMSUVOVF9DTE9DS19DTEFTUworR1NUX0lTX05FVF9DTElFTlRfQ0xPQ0tfQ0xBU1MKKzxTVUJTRUNUSU9OIFByaXZhdGU+Citnc3RfbmV0X2NsaWVudF9jbG9ja19nZXRfdHlwZQorPC9TRUNUSU9OPgorCisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0bmV0dGltZXBhY2tldDwvRklMRT4KKzxUSVRMRT5Hc3ROZXRUaW1lUGFja2V0PC9USVRMRT4KKzxJTkNMVURFPmdzdC9uZXQvZ3N0bmV0Lmg8L0lOQ0xVREU+CitHc3ROZXRUaW1lUGFja2V0CitHU1RfTkVUX1RJTUVfUEFDS0VUX1NJWkUKK2dzdF9uZXRfdGltZV9wYWNrZXRfbmV3Citnc3RfbmV0X3RpbWVfcGFja2V0X3JlY2VpdmUKK2dzdF9uZXRfdGltZV9wYWNrZXRfc2VuZAorZ3N0X25ldF90aW1lX3BhY2tldF9zZXJpYWxpemUKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3NvY2tsZW5fdAorPC9TRUNUSU9OPgorCisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0bmV0dGltZXByb3ZpZGVyPC9GSUxFPgorPFRJVExFPkdzdE5ldFRpbWVQcm92aWRlcjwvVElUTEU+Cis8SU5DTFVERT5nc3QvbmV0L2dzdG5ldC5oPC9JTkNMVURFPgorR3N0TmV0VGltZVByb3ZpZGVyCitnc3RfbmV0X3RpbWVfcHJvdmlkZXJfbmV3Cis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK0dzdE5ldFRpbWVQcm92aWRlckNsYXNzCitHc3ROZXRUaW1lUHJvdmlkZXJQcml2YXRlCitHU1RfTkVUX1RJTUVfUFJPVklERVIKK0dTVF9JU19ORVRfVElNRV9QUk9WSURFUgorR1NUX1RZUEVfTkVUX1RJTUVfUFJPVklERVIKK0dTVF9ORVRfVElNRV9QUk9WSURFUl9DTEFTUworR1NUX0lTX05FVF9USU1FX1BST1ZJREVSX0NMQVNTCis8U1VCU0VDVElPTiBQcml2YXRlPgorZ3N0X25ldF90aW1lX3Byb3ZpZGVyX2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0Y2hlY2s8L0ZJTEU+Cis8VElUTEU+R3N0Q2hlY2s8L1RJVExFPgorPElOQ0xVREU+Z3N0L2NoZWNrL2dzdGNoZWNrLmg8L0lOQ0xVREU+CitHU1RfU1RBUlRfVEVTVAorR1NUX0VORF9URVNUCisKK0FTU0VSVF9CVUZGRVJfUkVGQ09VTlQKK0FTU0VSVF9DQVBTX1JFRkNPVU5UCitBU1NFUlRfQ1JJVElDQUwKK0FTU0VSVF9XQVJOSU5HCitBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQKK0FTU0VSVF9PQkpFQ1RfUkVGQ09VTlQKK0FTU0VSVF9PQkpFQ1RfUkVGQ09VTlRfQkVUV0VFTgorQVNTRVJUX1NFVF9TVEFURQorCitmYWlsX3VubGVzc19lcXVhbHNfaW50CitmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQKK2ZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcKK2ZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQKK2ZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NAorZmFpbF91bmxlc3NfbWVzc2FnZV9lcnJvcgorCithc3NlcnRfZXF1YWxzX2ludAorYXNzZXJ0X2VxdWFsc19mbG9hdAorYXNzZXJ0X2VxdWFsc19zdHJpbmcKK2Fzc2VydF9lcXVhbHNfdWludDY0Cithc3NlcnRfZXF1YWxzX2ludDY0Cithc3NlcnRfbWVzc2FnZV9lcnJvcgorCitnc3RfY2hlY2tfaW5pdAorZ3N0X2NoZWNrX21lc3NhZ2VfZXJyb3IKK2dzdF9jaGVja19zZXR1cF9lbGVtZW50Citnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQKK2dzdF9jaGVja19zZXR1cF9zcmNfcGFkCitnc3RfY2hlY2tfc2V0dXBfc2lua19wYWRfYnlfbmFtZQorZ3N0X2NoZWNrX3NldHVwX3NyY19wYWRfYnlfbmFtZQorZ3N0X2NoZWNrX3RlYXJkb3duX3BhZF9ieV9uYW1lCitnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudAorZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkCitnc3RfY2hlY2tfdGVhcmRvd25fc3JjX3BhZAorZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycworZ3N0X2NoZWNrX2J1ZmZlcl9kYXRhCitnc3RfY2hlY2tfY2Fwc19lcXVhbAorZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXJfbGlzdAorZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXIKK2dzdF9jaGVja19ydW5fc3VpdGUKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK01BSU5fSU5JVAorTUFJTl9TVEFSVF9USFJFQURTCitNQUlOX1NUQVJUX1RIUkVBRF9GVU5DVElPTgorTUFJTl9TVEFSVF9USFJFQURfRlVOQ1RJT05TCitNQUlOX1NUT1BfVEhSRUFEUworTUFJTl9TWU5DSFJPTklaRQorVEhSRUFEX1NUQVJUCitUSFJFQURfU1RBUlRFRAorVEhSRUFEX1NXSVRDSAorVEhSRUFEX1NZTkNIUk9OSVpFCitUSFJFQURfVEVTVF9SVU5OSU5HCisKK3N5bmNfY29uZAorbXV0ZXgKK0dTVF9DQVRfREVGQVVMVAordGhyZWFkX2xpc3QKK3N0YXJ0X2NvbmQKK0dTVF9DSEVDS19NQUlOCisKK2dzdF9jaGVja19jaGFpbl9mdW5jCitnc3RfY2hlY2tfYWJpX2xpc3QKKworYnVmZmVycworY2hlY2tfY29uZAorY2hlY2tfbXV0ZXgKKworQ0hFQ0tfTUFKT1JfVkVSU0lPTgorQ0hFQ0tfTUlDUk9fVkVSU0lPTgorQ0hFQ0tfTUlOT1JfVkVSU0lPTgorQ0tfQVRUUklCVVRFX1VOVVNFRAorQ0tfQ1BQRU5ECitDS19DUFBTVEFSVAorQ0tfRVhQT1JUCitFTkRfVEVTVAorR0NDX1ZFUlNJT05fQVRfTEVBU1QKK0xGdW4KK0xpc3QKK0xvZworTlVMTAorU0Z1bgorU1J1bm5lcgorU1RBUlRfVEVTVAorU3VpdGUKK1RDYXNlCitURgorVEZ1bgorVGVzdFJlc3VsdAorVGVzdFN0YXRzCitjaGVja19saXN0X2NyZWF0ZQorY2tfYWJvcnQKK2NrX2Fib3J0X21zZworY2tfYXNzZXJ0Citja19hc3NlcnRfaW50X2VxCitja19hc3NlcnRfaW50X25lCitja19hc3NlcnRfbXNnCitja19hc3NlcnRfc3RyX2VxCitja19hc3NlcnRfc3RyX25lCitja19zdHJkdXBfcHJpbnRmCitjdXJfZm9ya19zdGF0dXMKK2VtYWxsb2MKK2VwcmludGYKK2VyZWFsbG9jCitmYWlsCitmYWlsX2lmCitmYWlsX3VubGVzcworZ2V0X2Vudl9wcmludG1vZGUKK2xmaWxlX2xmdW4KK2xpc3RfYWRkX2VuZAorbGlzdF9hZGRfZnJvbnQKK2xpc3RfYWR2YW5jZQorbGlzdF9hcHBseQorbGlzdF9hdF9lbmQKK2xpc3RfZnJlZQorbGlzdF9mcm9udAorbGlzdF92YWwKK2xvZ19zcnVubmVyX2VuZAorbG9nX3NydW5uZXJfc3RhcnQKK2xvZ19zdWl0ZV9lbmQKK2xvZ19zdWl0ZV9zdGFydAorbG9nX3Rlc3Rfc3RhcnQKK2xvZ190ZXN0X2VuZAorbWFya19wb2ludAorcGFjaworcHBhY2sKK3B1bnBhY2sKK3Jjdm1zZ19mcmVlCityZWNlaXZlX3Rlc3RfcmVzdWx0CitzZW5kX2N0eF9pbmZvCitzZW5kX2ZhaWx1cmVfaW5mbworc2VuZF9sb2NfaW5mbworc2V0X2Zvcmtfc3RhdHVzCitzZXR1cF9tZXNzYWdpbmcKK3NyX3N0YXRfc3RyCitzcnVubmVyX2VuZF9sb2dnaW5nCitzcnVubmVyX2ZwcmludAorc3J1bm5lcl9pbml0X2xvZ2dpbmcKK3NydW5uZXJfb3Blbl9sZmlsZQorc3J1bm5lcl9vcGVuX3htbGZpbGUKK3NydW5uZXJfcmVnaXN0ZXJfbGZ1bgorc3Rkb3V0X2xmdW4KK3N1YnVuaXRfbGZ1bgordGNhc2VfYWRkX2V4aXRfdGVzdAordGNhc2VfYWRkX2xvb3BfZXhpdF90ZXN0Cit0Y2FzZV9hZGRfbG9vcF90ZXN0Cit0Y2FzZV9hZGRfbG9vcF90ZXN0X3JhaXNlX3NpZ25hbAordGNhc2VfYWRkX3Rlc3QKK3RjYXNlX2FkZF90ZXN0X3JhaXNlX3NpZ25hbAordGVhcmRvd25fbWVzc2FnaW5nCit0cl9jcmVhdGUKK3RyX2ZwcmludAordHJfcmVzZXQKK3RyX3Nob3J0X3N0cgordHJfc3RyCit0cl94bWxwcmludAordXBhY2sKK3htbF9sZnVuCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0Y2hlY2tidWZmZXJzdHJhdzwvRklMRT4KKzxUSVRMRT5Hc3RCdWZmZXJTdHJhdzwvVElUTEU+Cis8SU5DTFVERT5nc3QvY2hlY2svZ3N0YnVmZmVyc3RyYXcuaDwvSU5DTFVERT4KK2dzdF9idWZmZXJfc3RyYXdfc3RhcnRfcGlwZWxpbmUKK2dzdF9idWZmZXJfc3RyYXdfZ2V0X2J1ZmZlcgorZ3N0X2J1ZmZlcl9zdHJhd19zdG9wX3BpcGVsaW5lCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+Z3N0Y2hlY2tjb25zaXN0ZW5jeWNoZWNrZXI8L0ZJTEU+Cis8VElUTEU+R3N0U3RyZWFtQ29uc2lzdGVuY3k8L1RJVExFPgorPElOQ0xVREU+Z3N0L2NoZWNrL2dzdGNvbnNpc3RlbmN5Y2hlY2tlci5oPC9JTkNMVURFPgorR3N0U3RyZWFtQ29uc2lzdGVuY3kKK2dzdF9jb25zaXN0ZW5jeV9jaGVja2VyX25ldworZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfcmVzZXQKK2dzdF9jb25zaXN0ZW5jeV9jaGVja2VyX2ZyZWUKKzwvU0VDVElPTj4KKwpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLnR5cGVzIGIvZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLnR5cGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MWU1ODQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMudHlwZXMKQEAgLTAsMCArMSwzNiBAQAorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworJSBiYXNlIGNsYXNzZXMKKworI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGFkYXB0ZXIuaD4KKyNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNlc3JjLmg+CisjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaD4KKyNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg+CisjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaD4KKyNpbmNsdWRlIDxnc3QvYmFzZS9nc3RwdXNoc3JjLmg+CisKK2dzdF9hZGFwdGVyX2dldF90eXBlCitnc3RfYmFzZV9zcmNfZ2V0X3R5cGUKK2dzdF9iYXNlX3NpbmtfZ2V0X3R5cGUKK2dzdF9iYXNlX3RyYW5zZm9ybV9nZXRfdHlwZQorZ3N0X2NvbGxlY3RfcGFkc19nZXRfdHlwZQorZ3N0X3B1c2hfc3JjX2dldF90eXBlCisKKyUgY29udHJvbGxlcgorCisjaW5jbHVkZSA8Z3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5oPgorI2luY2x1ZGUgPGdzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xzb3VyY2UuaD4KKyNpbmNsdWRlIDxnc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5oPgorI2luY2x1ZGUgPGdzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuaD4KKworZ3N0X2NvbnRyb2xsZXJfZ2V0X3R5cGUKK2dzdF9jb250cm9sX3NvdXJjZV9nZXRfdHlwZQorZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfZ2V0X3R5cGUKK2dzdF9sZm9fY29udHJvbF9zb3VyY2VfZ2V0X3R5cGUKKworJSBuZXQKKworI2luY2x1ZGUgPGdzdC9uZXQvZ3N0bmV0Lmg+CisKK2dzdF9uZXRfY2xpZW50X2Nsb2NrX2dldF90eXBlCitnc3RfbmV0X3RpbWVfcHJvdmlkZXJfZ2V0X3R5cGUKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL0dzdEFkYXB0ZXIuaHRtbCBiL2RvY3MvbGlicy9odG1sL0dzdEFkYXB0ZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTM4ZDYxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9saWJzL2h0bWwvR3N0QWRhcHRlci5odG1sCkBAIC0wLDAgKzEsNzQzIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0QWRhcHRlcjwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImdzdHJlYW1lci1iYXNlLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQmFzZSBhbmQgVXRpbGxpdHkgQ2xhc3NlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkdzdFB1c2hTcmMuaHRtbCIgdGl0bGU9IkdzdFB1c2hTcmMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJpdFJlYWRlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0UHVzaFNyYy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iZ3N0cmVhbWVyLWJhc2UuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIDAuMTEgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI0dzdEFkYXB0ZXIuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RBZGFwdGVyLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RBZGFwdGVyLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJHc3RBZGFwdGVyIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0QWRhcHRlci50b3Bfb2ZfcGFnZSI+PC9hPkdzdEFkYXB0ZXI8L3NwYW4+PC9oMj4KKzxwPkdzdEFkYXB0ZXIg4oCUIGFkYXB0cyBpbmNvbWluZyBkYXRhIG9uIGEgc2luayBwYWQgaW50byBjaHVua3Mgb2YgTiBieXRlczwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9IkdzdEFkYXB0ZXIuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2dzdC9iYXNlL2dzdGFkYXB0ZXIuaCZndDsKKworc3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI0dzdEFkYXB0ZXItc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEFkYXB0ZXIiPkdzdEFkYXB0ZXI8L2E+OworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+ICogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItbmV3IiB0aXRsZT0iZ3N0X2FkYXB0ZXJfbmV3ICgpIj5nc3RfYWRhcHRlcl9uZXc8L2E+ICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLWNsZWFyIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfY2xlYXIgKCkiPmdzdF9hZGFwdGVyX2NsZWFyPC9hPiAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+ICphZGFwdGVyPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1wdXNoIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfcHVzaCAoKSI+Z3N0X2FkYXB0ZXJfcHVzaDwvYT4gICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT4gKmFkYXB0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWY8L2NvZGU+PC9lbT4pOworY29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDg8L3NwYW4+PC9hPiAqICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1tYXAiIHRpdGxlPSJnc3RfYWRhcHRlcl9tYXAgKCkiPmdzdF9hZGFwdGVyX21hcDwvYT4gICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+ICphZGFwdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItdW5tYXAiIHRpdGxlPSJnc3RfYWRhcHRlcl91bm1hcCAoKSI+Z3N0X2FkYXB0ZXJfdW5tYXA8L2E+ICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT4gKmFkYXB0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBmbHVzaDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItY29weSIgdGl0bGU9ImdzdF9hZGFwdGVyX2NvcHkgKCkiPmdzdF9hZGFwdGVyX2NvcHk8L2E+ICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+ICphZGFwdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLWZsdXNoIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfZmx1c2ggKCkiPmdzdF9hZGFwdGVyX2ZsdXNoPC9hPiAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+ICphZGFwdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gZmx1c2g8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdzaXplPC9zcGFuPjwvYT4gICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLWF2YWlsYWJsZSIgdGl0bGU9ImdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoKSI+Z3N0X2FkYXB0ZXJfYXZhaWxhYmxlPC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT4gKmFkYXB0ZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdzaXplPC9zcGFuPjwvYT4gICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLWF2YWlsYWJsZS1mYXN0IiB0aXRsZT0iZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlX2Zhc3QgKCkiPmdzdF9hZGFwdGVyX2F2YWlsYWJsZV9mYXN0PC9hPiAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+ICphZGFwdGVyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItdGFrZSIgdGl0bGU9ImdzdF9hZGFwdGVyX3Rha2UgKCkiPmdzdF9hZGFwdGVyX3Rha2U8L2E+ICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+ICphZGFwdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gbmJ5dGVzPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKiAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItdGFrZS1idWZmZXIiIHRpdGxlPSJnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAoKSI+Z3N0X2FkYXB0ZXJfdGFrZV9idWZmZXI8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT4gKmFkYXB0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBuYnl0ZXM8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPiAqICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItdGFrZS1saXN0IiB0aXRsZT0iZ3N0X2FkYXB0ZXJfdGFrZV9saXN0ICgpIj5nc3RfYWRhcHRlcl90YWtlX2xpc3Q8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPiAqYWRhcHRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IG5ieXRlczwvY29kZT48L2VtPik7Cis8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1wcmV2LXRpbWVzdGFtcCIgdGl0bGU9ImdzdF9hZGFwdGVyX3ByZXZfdGltZXN0YW1wICgpIj5nc3RfYWRhcHRlcl9wcmV2X3RpbWVzdGFtcDwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPiAqYWRhcHRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqZGlzdGFuY2U8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdzaXplPC9zcGFuPjwvYT4gICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLW1hc2tlZC1zY2FuLXVpbnQzMiIgdGl0bGU9ImdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoKSI+Z3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyPC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT4gKmFkYXB0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gbWFzazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiBwYXR0ZXJuPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gb2Zmc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3NpemU8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItbWFza2VkLXNjYW4tdWludDMyLXBlZWsiIHRpdGxlPSJnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzJfcGVlayAoKSI+Z3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyX3BlZWs8L2E+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT4gKmFkYXB0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gbWFzazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiBwYXR0ZXJuPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gb2Zmc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdEFkYXB0ZXIub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPkdPYmplY3Q8L2E+CisgICArLS0tLUdzdEFkYXB0ZXIKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RBZGFwdGVyLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPgorVGhpcyBjbGFzcyBpcyBmb3IgZWxlbWVudHMgdGhhdCByZWNlaXZlIGJ1ZmZlcnMgaW4gYW4gdW5kZXNpcmVkIHNpemUuCitXaGlsZSBmb3IgZXhhbXBsZSByYXcgdmlkZW8gY29udGFpbnMgb25lIGltYWdlIHBlciBidWZmZXIsIHRoZSBzYW1lIGlzIG5vdAordHJ1ZSBmb3IgYSBsb3Qgb2Ygb3RoZXIgZm9ybWF0cywgZXNwZWNpYWxseSB0aG9zZSB0aGF0IGNvbWUgZGlyZWN0bHkgZnJvbQorYSBmaWxlLiBTbyBpZiB5b3UgaGF2ZSB1bmRlZmluZWQgYnVmZmVyIHNpemVzIGFuZCByZXF1aXJlIGEgc3BlY2lmaWMgc2l6ZSwKK3RoaXMgb2JqZWN0IGlzIGZvciB5b3UuCis8L3A+Cis8cD4KK0FuIGFkYXB0ZXIgaXMgY3JlYXRlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItbmV3IiB0aXRsZT0iZ3N0X2FkYXB0ZXJfbmV3ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hZGFwdGVyX25ldygpPC9jb2RlPjwvYT4uIEl0IGNhbiBiZSBmcmVlZCBhZ2FpbiB3aXRoCis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjZy1vYmplY3QtdW5yZWYiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19vYmplY3RfdW5yZWYoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitUaGUgdGhlb3J5IG9mIG9wZXJhdGlvbiBpcyBsaWtlIHRoaXM6IEFsbCBidWZmZXJzIHJlY2VpdmVkIGFyZSBwdXQKK2ludG8gdGhlIGFkYXB0ZXIgdXNpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1wdXNoIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfcHVzaCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYWRhcHRlcl9wdXNoKCk8L2NvZGU+PC9hPiBhbmQgdGhlIGRhdGEgaXMgdGhlbiByZWFkIGJhY2sKK2luIGNodW5rcyBvZiB0aGUgZGVzaXJlZCBzaXplIHVzaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItbWFwIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfbWFwICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hZGFwdGVyX21hcCgpPC9jb2RlPjwvYT4vPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci11bm1hcCIgdGl0bGU9ImdzdF9hZGFwdGVyX3VubWFwICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hZGFwdGVyX3VubWFwKCk8L2NvZGU+PC9hPgorYW5kL29yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItY29weSIgdGl0bGU9ImdzdF9hZGFwdGVyX2NvcHkgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2FkYXB0ZXJfY29weSgpPC9jb2RlPjwvYT4uIEFmdGVyIHRoZSBkYXRhIGhhcyBiZWVuIHByb2Nlc3NlZCwgaXQgaXMgZnJlZWQKK3VzaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItdW5tYXAiIHRpdGxlPSJnc3RfYWRhcHRlcl91bm1hcCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYWRhcHRlcl91bm1hcCgpPC9jb2RlPjwvYT4uCis8L3A+Cis8cD4KK090aGVyIG1ldGhvZHMgc3VjaCBhcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXRha2UiIHRpdGxlPSJnc3RfYWRhcHRlcl90YWtlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hZGFwdGVyX3Rha2UoKTwvY29kZT48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXRha2UtYnVmZmVyIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIoKTwvY29kZT48L2E+Citjb21iaW5lIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItbWFwIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfbWFwICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hZGFwdGVyX21hcCgpPC9jb2RlPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItdW5tYXAiIHRpdGxlPSJnc3RfYWRhcHRlcl91bm1hcCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYWRhcHRlcl91bm1hcCgpPC9jb2RlPjwvYT4gaW4gb25lIG1ldGhvZCBhbmQgYXJlCitwb3RlbnRpYWxseSBtb3JlIGNvbnZlbmllbnQgZm9yIHNvbWUgdXNlIGNhc2VzLgorPC9wPgorPHA+CitGb3IgZXhhbXBsZSwgYSBzaW5rIHBhZCdzIGNoYWluIGZ1bmN0aW9uIHRoYXQgbmVlZHMgdG8gcGFzcyBkYXRhIHRvIGEgbGlicmFyeQoraW4gNTEyLWJ5dGUgY2h1bmtzIGNvdWxkIGJlIGltcGxlbWVudGVkIGxpa2UgdGhpczoKKzwvcD4KKzxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgorc3RhdGljIEdzdEZsb3dSZXR1cm4KK3NpbmtfcGFkX2NoYWluIChHc3RQYWQgKnBhZCwgR3N0QnVmZmVyICpidWZmZXIpCit7CisgIE15RWxlbWVudCAqdGhpczsKKyAgR3N0QWRhcHRlciAqYWRhcHRlcjsKKyAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKKworICAvLyB3aWxsIGdpdmUgdGhlIGVsZW1lbnQgYW4gZXh0cmEgcmVmOyByZW1lbWJlciB0byBkcm9wIGl0CisgIHRoaXMgPSBNWV9FTEVNRU5UIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOworICBhZGFwdGVyID0gdGhpcy0mZ3Q7YWRhcHRlcjsKKworICAvLyBwdXQgYnVmZmVyIGludG8gYWRhcHRlcgorICBnc3RfYWRhcHRlcl9wdXNoIChhZGFwdGVyLCBidWZmZXIpOworICAvLyB3aGlsZSB3ZSBjYW4gcmVhZCBvdXQgNTEyIGJ5dGVzLCBwcm9jZXNzIHRoZW0KKyAgd2hpbGUgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcikgJmd0Oz0gNTEyICZhbXA7JmFtcDsgcmV0ID09IEdTVF9GTE9XX09LKSB7CisgICAgY29uc3QgZ3VpbnQ4ICpkYXRhID0gZ3N0X2FkYXB0ZXJfbWFwIChhZGFwdGVyLCA1MTIpOworICAgIC8vIHVzZSBmbG93cmV0dXJuIGFzIGFuIGVycm9yIHZhbHVlCisgICAgcmV0ID0gbXlfbGlicmFyeV9mb28gKGRhdGEpOworICAgIGdzdF9hZGFwdGVyX3VubWFwIChhZGFwdGVyLCA1MTIpOworICB9CisKKyAgZ3N0X29iamVjdF91bnJlZiAodGhpcyk7CisgIHJldHVybiByZXQ7Cit9Cis8L3ByZT48L2Rpdj4KKzxwPgorPC9wPgorPHA+CitGb3IgYW5vdGhlciBleGFtcGxlLCBhIHNpbXBsZSBlbGVtZW50IGluc2lkZSBHU3RyZWFtZXIgdGhhdCB1c2VzIEdzdEFkYXB0ZXIKK2lzIHRoZSBsaWJ2aXN1YWwgZWxlbWVudC4KKzwvcD4KKzxwPgorQW4gZWxlbWVudCB1c2luZyBHc3RBZGFwdGVyIGluIGl0cyBzaW5rIHBhZCBjaGFpbiBmdW5jdGlvbiBzaG91bGQgZW5zdXJlIHRoYXQKK3doZW4gdGhlIEZMVVNIX1NUT1AgZXZlbnQgaXMgcmVjZWl2ZWQsIHRoYXQgYW55IHF1ZXVlZCBkYXRhIGlzIGNsZWFyZWQgdXNpbmcKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItY2xlYXIiIHRpdGxlPSJnc3RfYWRhcHRlcl9jbGVhciAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYWRhcHRlcl9jbGVhcigpPC9jb2RlPjwvYT4uIERhdGEgc2hvdWxkIGFsc28gYmUgY2xlYXJlZCBvciBwcm9jZXNzZWQgb24gRU9TIGFuZAord2hlbiBjaGFuZ2luZyBzdGF0ZSBmcm9tIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtUEFVU0VEOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfU1RBVEVfUEFVU0VEPC9zcGFuPjwvYT4gdG8gPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1SRUFEWTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1NUQVRFX1JFQURZPC9zcGFuPjwvYT4uCis8L3A+Cis8cD4KK0Fsc28gY2hlY2sgdGhlIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UIGZsYWcgb24gdGhlIGJ1ZmZlci4gU29tZSBlbGVtZW50cyBtaWdodAorbmVlZCB0byBjbGVhciB0aGUgYWRhcHRlciBhZnRlciBhIGRpc2NvbnRpbnVpdHkuCis8L3A+Cis8cD4KK1NpbmNlIDAuMTAuMjQsIHRoZSBhZGFwdGVyIHdpbGwga2VlcCB0cmFjayBvZiB0aGUgdGltZXN0YW1wcyBvZiB0aGUgYnVmZmVycwordGhhdCB3ZXJlIHB1c2hlZC4gVGhlIGxhc3Qgc2VlbiB0aW1lc3RhbXAgYmVmb3JlIHRoZSBjdXJyZW50IHBvc2l0aW9uCitjYW4gYmUgcXVlcmllZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItcHJldi10aW1lc3RhbXAiIHRpdGxlPSJnc3RfYWRhcHRlcl9wcmV2X3RpbWVzdGFtcCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYWRhcHRlcl9wcmV2X3RpbWVzdGFtcCgpPC9jb2RlPjwvYT4uIFRoaXMgZnVuY3Rpb24gY2FuCitvcHRpb25hbGx5IHJldHVybiB0aGUgYW1vdW50IG9mIGJ5dGVzIGJldHdlZW4gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIgdGhhdAorY2FycmllZCB0aGUgdGltZXN0YW1wIGFuZCB0aGUgY3VycmVudCBhZGFwdGVyIHBvc2l0aW9uLiBUaGUgZGlzdGFuY2UgaXMKK3VzZWZ1bCB3aGVuIGRlYWxpbmcgd2l0aCwgZm9yIGV4YW1wbGUsIHJhdyBhdWRpbyBzYW1wbGVzIGJlY2F1c2UgaXQgYWxsb3dzCit5b3UgdG8gY2FsY3VsYXRlIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGN1cnJlbnQgYWRhcHRlciBwb3NpdGlvbiBieSB1c2luZyB0aGUKK2xhc3Qgc2VlbiB0aW1lc3RhbXAgYW5kIHRoZSBhbW91bnQgb2YgYnl0ZXMgc2luY2UuCis8L3A+Cis8cD4KK0EgbGFzdCB0aGluZyB0byBub3RlIGlzIHRoYXQgd2hpbGUgR3N0QWRhcHRlciBpcyBwcmV0dHkgb3B0aW1pemVkLAorbWVyZ2luZyBidWZmZXJzIHN0aWxsIG1pZ2h0IGJlIGFuIG9wZXJhdGlvbiB0aGF0IHJlcXVpcmVzIGEgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5tYWxsb2MoKTwvY29kZT4gYW5kCis8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPm1lbWNweSgpPC9jb2RlPiBvcGVyYXRpb24sIGFuZCB0aGVzZSBvcGVyYXRpb25zIGFyZSBub3QgdGhlIGZhc3Rlc3QuIEJlY2F1c2Ugb2YKK3RoaXMsIHNvbWUgZnVuY3Rpb25zIGxpa2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1hdmFpbGFibGUtZmFzdCIgdGl0bGU9ImdzdF9hZGFwdGVyX2F2YWlsYWJsZV9mYXN0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hZGFwdGVyX2F2YWlsYWJsZV9mYXN0KCk8L2NvZGU+PC9hPiBhcmUgcHJvdmlkZWQgdG8gaGVscAorc3BlZWQgdXAgc3VjaCBjYXNlcyBzaG91bGQgeW91IHdhbnQgdG8uIFRvIGF2b2lkIHJlcGVhdGVkIG1lbW9yeSBhbGxvY2F0aW9ucywKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItY29weSIgdGl0bGU9ImdzdF9hZGFwdGVyX2NvcHkgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2FkYXB0ZXJfY29weSgpPC9jb2RlPjwvYT4gY2FuIGJlIHVzZWQgdG8gY29weSBkYXRhIGludG8gYSAoc3RhdGljYWxseSBhbGxvY2F0ZWQpCit1c2VyIHByb3ZpZGVkIGJ1ZmZlci4KKzwvcD4KKzxwPgorR3N0QWRhcHRlciBpcyBub3QgTVQgc2FmZS4gQWxsIG9wZXJhdGlvbnMgb24gYW4gYWRhcHRlciBtdXN0IGJlIHNlcmlhbGl6ZWQgYnkKK3RoZSBjYWxsZXIuIFRoaXMgaXMgbm90IG5vcm1hbGx5IGEgcHJvYmxlbSwgaG93ZXZlciwgYXMgdGhlIG5vcm1hbCB1c2UgY2FzZQorb2YgR3N0QWRhcHRlciBpcyBpbnNpZGUgb25lIHBhZCdzIGNoYWluIGZ1bmN0aW9uLCBpbiB3aGljaCBjYXNlIGFjY2VzcyBpcworc2VyaWFsaXplZCB2aWEgdGhlIHBhZCdzIFNUUkVBTV9MT0NLLgorPC9wPgorPHA+CitOb3RlIHRoYXQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1wdXNoIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfcHVzaCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYWRhcHRlcl9wdXNoKCk8L2NvZGU+PC9hPiB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIGJ1ZmZlciBwYXNzZWQuIFVzZQorPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItcmVmIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfcmVmKCk8L2NvZGU+PC9hPiBiZWZvcmUgcHVzaGluZyBpdCBpbnRvIHRoZSBhZGFwdGVyIGlmIHlvdSBzdGlsbCB3YW50IHRvCithY2Nlc3MgdGhlIGJ1ZmZlciBsYXRlci4gVGhlIGFkYXB0ZXIgd2lsbCBuZXZlciBtb2RpZnkgdGhlIGRhdGEgaW4gdGhlCitidWZmZXIgcHVzaGVkIGluIGl0LgorPC9wPgorPHA+CitMYXN0IHJldmlld2VkIG9uIDIwMDktMDUtMTMgKDAuMTAuMjQpLgorPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RBZGFwdGVyLmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RBZGFwdGVyLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0QWRhcHRlcjwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEFkYXB0ZXI7PC9wcmU+Cis8cD4KK1RoZSBvcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT4gZGF0YSBzdHJ1Y3R1cmUuCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1hZGFwdGVyLW5ldyI+PC9hPjxoMz5nc3RfYWRhcHRlcl9uZXcgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPiAqICAgICAgICBnc3RfYWRhcHRlcl9uZXcgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT4uIEZyZWUgd2l0aCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjZy1vYmplY3QtdW5yZWYiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19vYmplY3RfdW5yZWYoKTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT4uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWFkYXB0ZXItY2xlYXIiPjwvYT48aDM+Z3N0X2FkYXB0ZXJfY2xlYXIgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfY2xlYXIgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPiAqYWRhcHRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlbW92ZXMgYWxsIGJ1ZmZlcnMgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWRhcHRlcjwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWRhcHRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWFkYXB0ZXItcHVzaCI+PC9hPjxoMz5nc3RfYWRhcHRlcl9wdXNoICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9hZGFwdGVyX3B1c2ggICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT4gKmFkYXB0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWY8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBZGRzIHRoZSBkYXRhIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZjwvY29kZT48L2VtPiB0byB0aGUgZGF0YSBzdG9yZWQgaW5zaWRlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hZGFwdGVyPC9jb2RlPjwvZW0+IGFuZCB0YWtlcworb3duZXJzaGlwIG9mIHRoZSBidWZmZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWRhcHRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiB0byBhZGQgdG8gcXVldWUgaW4gdGhlIGFkYXB0ZXIuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYWRhcHRlci1tYXAiPjwvYT48aDM+Z3N0X2FkYXB0ZXJfbWFwICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50ODwvc3Bhbj48L2E+ICogICAgICBnc3RfYWRhcHRlcl9tYXAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+ICphZGFwdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIGZpcnN0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+IGJ5dGVzIHN0b3JlZCBpbiB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFkYXB0ZXI8L2NvZGU+PC9lbT4uIFRoZSByZXR1cm5lZCBwb2ludGVyIGlzCit2YWxpZCB1bnRpbCB0aGUgbmV4dCBmdW5jdGlvbiBpcyBjYWxsZWQgb24gdGhlIGFkYXB0ZXIuCis8L3A+Cis8cD4KK05vdGUgdGhhdCBzZXR0aW5nIHRoZSByZXR1cm5lZCBwb2ludGVyIGFzIHRoZSBkYXRhIG9mIGEgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IGlzCitpbmNvcnJlY3QgZm9yIGdlbmVyYWwtcHVycG9zZSBwbHVnaW5zLiBUaGUgcmVhc29uIGlzIHRoYXQgaWYgYSBkb3duc3RyZWFtCitlbGVtZW50IHN0b3JlcyB0aGUgYnVmZmVyIHNvIHRoYXQgaXQgaGFzIGFjY2VzcyB0byBpdCBvdXRzaWRlIG9mIHRoZSBib3VuZHMKK29mIGl0cyBjaGFpbiBmdW5jdGlvbiwgdGhlIGJ1ZmZlciB3aWxsIGhhdmUgYW4gaW52YWxpZCBkYXRhIHBvaW50ZXIgYWZ0ZXIKK3lvdXIgZWxlbWVudCBmbHVzaGVzIHRoZSBieXRlcy4gSW4gdGhhdCBjYXNlIHlvdSBzaG91bGQgdXNlCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXRha2UiIHRpdGxlPSJnc3RfYWRhcHRlcl90YWtlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hZGFwdGVyX3Rha2UoKTwvY29kZT48L2E+LCB3aGljaCByZXR1cm5zIGEgZnJlc2hseS1hbGxvY2F0ZWQgYnVmZmVyIHRoYXQgeW91IGNhbiBzZXQKK2FzIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiBtYWxsb2NfZGF0YSBvciB0aGUgcG90ZW50aWFsbHkgbW9yZSBwZXJmb3JtYW50Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXRha2UtYnVmZmVyIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitSZXR1cm5zIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+TlVMTDwvc3Bhbj48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+IGJ5dGVzIGFyZSBub3QgYXZhaWxhYmxlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFkYXB0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gbWFwL3BlZWs8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gdGhlIGZpcnN0Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPiBieXRlcyBvZiBkYXRhLCBvciBOVUxMLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gbGVuZ3RoPXNpemVdPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWFkYXB0ZXItdW5tYXAiPjwvYT48aDM+Z3N0X2FkYXB0ZXJfdW5tYXAgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfdW5tYXAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPiAqYWRhcHRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IGZsdXNoPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVsZWFzZXMgdGhlIG1lbW9yeSBvYnRhaW5lZCB3aXRoIHRoZSBsYXN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItbWFwIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfbWFwICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hZGFwdGVyX21hcCgpPC9jb2RlPjwvYT4gYW5kIGZsdXNoZXMKKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+IGJ5dGVzIGZyb20gdGhlIGFkYXB0ZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWRhcHRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZsdXNoPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBhbW91bnQgb2YgYnl0ZXMgdG8gZmx1c2g8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYWRhcHRlci1jb3B5Ij48L2E+PGgzPmdzdF9hZGFwdGVyX2NvcHkgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfY29weSAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPiAqYWRhcHRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmRlc3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ29waWVzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+IGJ5dGVzIG9mIGRhdGEgc3RhcnRpbmcgYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPiBvdXQgb2YgdGhlIGJ1ZmZlcnMKK2NvbnRhaW5lZCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+R3N0QWRhcHRlcjwvY29kZT48L2VtPiBpbnRvIGFuIGFycmF5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0PC9jb2RlPjwvZW0+IHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIuCis8L3A+Cis8cD4KK1RoZSBhcnJheSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdDwvY29kZT48L2VtPiBzaG91bGQgYmUgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4gYnl0ZXMuCitUaGUgdXNlciBzaG91bGQgY2hlY2sgdGhhdCB0aGUgYWRhcHRlciBoYXMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4gKyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPikgYnl0ZXMKK2F2YWlsYWJsZSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFkYXB0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtZW1vcnkgdG8gY29weSBpbnRvLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT4gY2FsbGVyLWFsbG9jYXRlc11bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiBsZW5ndGg9c2l6ZV08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgYnl0ZXMgb2Zmc2V0IGluIHRoZSBhZGFwdGVyIHRvIHN0YXJ0IGZyb208L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG51bWJlciBvZiBieXRlcyB0byBjb3B5PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWFkYXB0ZXItZmx1c2giPjwvYT48aDM+Z3N0X2FkYXB0ZXJfZmx1c2ggKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfZmx1c2ggICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPiAqYWRhcHRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IGZsdXNoPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRmx1c2hlcyB0aGUgZmlyc3QgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZsdXNoPC9jb2RlPjwvZW0+IGJ5dGVzIGluIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWRhcHRlcjwvY29kZT48L2VtPi4gVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0CithdCBsZWFzdCB0aGlzIG1hbnkgYnl0ZXMgYXJlIGF2YWlsYWJsZS4KKzwvcD4KKzxwPgorU2VlIGFsc286IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItbWFwIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfbWFwICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hZGFwdGVyX21hcCgpPC9jb2RlPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItdW5tYXAiIHRpdGxlPSJnc3RfYWRhcHRlcl91bm1hcCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYWRhcHRlcl91bm1hcCgpPC9jb2RlPjwvYT4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hZGFwdGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zmx1c2g8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG51bWJlciBvZiBieXRlcyB0byBmbHVzaDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1hZGFwdGVyLWF2YWlsYWJsZSI+PC9hPjxoMz5nc3RfYWRhcHRlcl9hdmFpbGFibGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nc2l6ZTwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPiAqYWRhcHRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIG1heGltdW0gYW1vdW50IG9mIGJ5dGVzIGF2YWlsYWJsZSwgdGhhdCBpcyBpdCByZXR1cm5zIHRoZSBtYXhpbXVtCit2YWx1ZSB0aGF0IGNhbiBiZSBzdXBwbGllZCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLW1hcCIgdGl0bGU9ImdzdF9hZGFwdGVyX21hcCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYWRhcHRlcl9tYXAoKTwvY29kZT48L2E+IHdpdGhvdXQgdGhhdCBmdW5jdGlvbgorcmV0dXJuaW5nIE5VTEwuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWRhcHRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5udW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hZGFwdGVyPC9jb2RlPjwvZW0+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYWRhcHRlci1hdmFpbGFibGUtZmFzdCI+PC9hPjxoMz5nc3RfYWRhcHRlcl9hdmFpbGFibGVfZmFzdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdzaXplPC9zcGFuPjwvYT4gICAgICAgICAgICAgICBnc3RfYWRhcHRlcl9hdmFpbGFibGVfZmFzdCAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+ICphZGFwdGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBhcmUgaW1tZWRpYXRlbHkgYXZhaWxhYmxlIHdpdGhvdXQKK3JlcXVpcmluZyBhbnkgZXhwZW5zaXZlIG9wZXJhdGlvbnMgKGxpa2UgY29weWluZyB0aGUgZGF0YSBpbnRvIGEKK3RlbXBvcmFyeSBidWZmZXIpLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFkYXB0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bnVtYmVyIG9mIGJ5dGVzIHRoYXQgYXJlIGF2YWlsYWJsZSBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWRhcHRlcjwvY29kZT48L2VtPiB3aXRob3V0IGV4cGVuc2l2ZQorb3BlcmF0aW9uczwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1hZGFwdGVyLXRha2UiPjwvYT48aDM+Z3N0X2FkYXB0ZXJfdGFrZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDg8L3NwYW4+PC9hPiAqICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfdGFrZSAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPiAqYWRhcHRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IG5ieXRlczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JldHVybnMgYSBmcmVzaGx5IGFsbG9jYXRlZCBidWZmZXIgY29udGFpbmluZyB0aGUgZmlyc3QgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ieXRlczwvY29kZT48L2VtPiBieXRlcyBvZiB0aGUKKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hZGFwdGVyPC9jb2RlPjwvZW0+LiBUaGUgcmV0dXJuZWQgYnl0ZXMgd2lsbCBiZSBmbHVzaGVkIGZyb20gdGhlIGFkYXB0ZXIuCis8L3A+Cis8cD4KK0NhbGxlciBvd25zIHJldHVybmVkIHZhbHVlLiBnX2ZyZWUgYWZ0ZXIgdXNhZ2UuCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdfZnJlZQorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFkYXB0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYnl0ZXM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG51bWJlciBvZiBieXRlcyB0byB0YWtlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+b3Zlbi1mcmVzaCBob3QgZGF0YSwgb3IKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+TlVMTDwvc3Bhbj48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYnl0ZXM8L2NvZGU+PC9lbT4gYnl0ZXMgYXJlIG5vdCBhdmFpbGFibGUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiBsZW5ndGg9bmJ5dGVzXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1hZGFwdGVyLXRha2UtYnVmZmVyIj48L2E+PGgzPmdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICogICAgICAgICBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+ICphZGFwdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gbmJ5dGVzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0dXJucyBhIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiBjb250YWluaW5nIHRoZSBmaXJzdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJ5dGVzPC9jb2RlPjwvZW0+IGJ5dGVzIG9mIHRoZQorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFkYXB0ZXI8L2NvZGU+PC9lbT4uIFRoZSByZXR1cm5lZCBieXRlcyB3aWxsIGJlIGZsdXNoZWQgZnJvbSB0aGUgYWRhcHRlci4KK1RoaXMgZnVuY3Rpb24gaXMgcG90ZW50aWFsbHkgbW9yZSBwZXJmb3JtYW50IHRoYW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci10YWtlIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfdGFrZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYWRhcHRlcl90YWtlKCk8L2NvZGU+PC9hPgorc2luY2UgaXQgY2FuIHJldXNlIHRoZSBtZW1vcnkgaW4gcHVzaGVkIGJ1ZmZlcnMgYnkgc3ViYnVmZmVyaW5nCitvciBtZXJnaW5nLgorPC9wPgorPHA+CitDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZS4gPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItdW5yZWYiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl91bnJlZigpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNhZ2UuCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdzdF9idWZmZXJfdW5yZWYKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hZGFwdGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJ5dGVzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdGFrZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IGNvbnRhaW5pbmcgdGhlIGZpcnN0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYnl0ZXM8L2NvZGU+PC9lbT4gb2YKK3RoZSBhZGFwdGVyLCBvciA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPk5VTEw8L3NwYW4+PC9hPiBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJ5dGVzPC9jb2RlPjwvZW0+IGJ5dGVzIGFyZSBub3QgYXZhaWxhYmxlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC42PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYWRhcHRlci10YWtlLWxpc3QiPjwvYT48aDM+Z3N0X2FkYXB0ZXJfdGFrZV9saXN0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HTGlzdDwvc3Bhbj48L2E+ICogICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfdGFrZV9saXN0ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPiAqYWRhcHRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IG5ieXRlczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JldHVybnMgYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gb2YgYnVmZmVycyBjb250YWluaW5nIHRoZSBmaXJzdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJ5dGVzPC9jb2RlPjwvZW0+IGJ5dGVzIG9mIHRoZQorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFkYXB0ZXI8L2NvZGU+PC9lbT4uIFRoZSByZXR1cm5lZCBieXRlcyB3aWxsIGJlIGZsdXNoZWQgZnJvbSB0aGUgYWRhcHRlci4KK1doZW4gdGhlIGNhbGxlciBjYW4gZGVhbCB3aXRoIGluZGl2aWR1YWwgYnVmZmVycywgdGhpcyBmdW5jdGlvbiBpcyBtb3JlCitwZXJmb3JtYW50IGJlY2F1c2Ugbm8gbWVtb3J5IHNob3VsZCBiZSBjb3BpZWQuCis8L3A+Cis8cD4KK0NhbGxlciBvd25zIHJldHVybmVkIGxpc3QgYW5kIGNvbnRhaW5lZCBidWZmZXJzLiA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci11bnJlZiI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3VucmVmKCk8L2NvZGU+PC9hPiBlYWNoCitidWZmZXIgaW4gdGhlIGxpc3QgYmVmb3JlIGZyZWVpbmcgdGhlIGxpc3QgYWZ0ZXIgdXNhZ2UuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWRhcHRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ieXRlczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHRha2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiBvZiBidWZmZXJzCitjb250YWluaW5nIHRoZSBmaXJzdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJ5dGVzPC9jb2RlPjwvZW0+IG9mIHRoZSBhZGFwdGVyLCBvciA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPk5VTEw8L3NwYW4+PC9hPiBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJ5dGVzPC9jb2RlPjwvZW0+IGJ5dGVzCithcmUgbm90IGF2YWlsYWJsZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3QuQnVmZmVyXVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1hZGFwdGVyLXByZXYtdGltZXN0YW1wIj48L2E+PGgzPmdzdF9hZGFwdGVyX3ByZXZfdGltZXN0YW1wICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAgICAgICAgZ3N0X2FkYXB0ZXJfcHJldl90aW1lc3RhbXAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPiAqYWRhcHRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqZGlzdGFuY2U8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgdGhlIHRpbWVzdGFtcCB0aGF0IHdhcyBiZWZvcmUgdGhlIGN1cnJlbnQgYnl0ZSBpbiB0aGUgYWRhcHRlci4gV2hlbgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRpc3RhbmNlPC9jb2RlPjwvZW0+IGlzIGdpdmVuLCB0aGUgYW1vdW50IG9mIGJ5dGVzIGJldHdlZW4gdGhlIHRpbWVzdGFtcCBhbmQgdGhlIGN1cnJlbnQKK3Bvc2l0aW9uIGlzIHJldHVybmVkLgorPC9wPgorPHA+CitUaGUgdGltZXN0YW1wIGlzIHJlc2V0IHRvIEdTVF9DTE9DS19USU1FX05PTkUgYW5kIHRoZSBkaXN0YW5jZSBpcyBzZXQgdG8gMCB3aGVuCit0aGUgYWRhcHRlciBpcyBmaXJzdCBjcmVhdGVkIG9yIHdoZW4gaXQgaXMgY2xlYXJlZC4gVGhpcyBhbHNvIG1lYW5zIHRoYXQgYmVmb3JlCit0aGUgZmlyc3QgYnl0ZSB3aXRoIGEgdGltZXN0YW1wIGlzIHJlbW92ZWQgZnJvbSB0aGUgYWRhcHRlciwgdGhlIHRpbWVzdGFtcAorYW5kIGRpc3RhbmNlIHJldHVybmVkIGFyZSBHU1RfQ0xPQ0tfVElNRV9OT05FIGFuZCAwIHJlc3BlY3RpdmVseS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hZGFwdGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGlzdGFuY2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9pbnRlciB0byBsb2NhdGlvbiBmb3IgZGlzdGFuY2UsIG9yIE5VTEwuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBwcmV2aW91c2x5IHNlZW4gdGltZXN0YW1wLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1hZGFwdGVyLW1hc2tlZC1zY2FuLXVpbnQzMiI+PC9hPjxoMz5nc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nc2l6ZTwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPiAqYWRhcHRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiBtYXNrPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+IHBhdHRlcm48L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2NhbiBmb3IgcGF0dGVybiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGF0dGVybjwvY29kZT48L2VtPiB3aXRoIGFwcGxpZWQgbWFzayA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWFzazwvY29kZT48L2VtPiBpbiB0aGUgYWRhcHRlciBkYXRhLAorc3RhcnRpbmcgZnJvbSBvZmZzZXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPi4KKzwvcD4KKzxwPgorVGhlIGJ5dGVzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXR0ZXJuPC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWFzazwvY29kZT48L2VtPiBhcmUgaW50ZXJwcmV0ZWQgbGVmdC10by1yaWdodCwgcmVnYXJkbGVzcworb2YgZW5kaWFubmVzcy4gIEFsbCBmb3VyIGJ5dGVzIG9mIHRoZSBwYXR0ZXJuIG11c3QgYmUgcHJlc2VudCBpbiB0aGUKK2FkYXB0ZXIgZm9yIGl0IHRvIG1hdGNoLCBldmVuIGlmIHRoZSBmaXJzdCBvciBsYXN0IGJ5dGVzIGFyZSBtYXNrZWQgb3V0LgorPC9wPgorPHA+CitJdCBpcyBhbiBlcnJvciB0byBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aG91dCBtYWtpbmcgc3VyZSB0aGF0IHRoZXJlIGlzCitlbm91Z2ggZGF0YSAob2Zmc2V0K3NpemUgYnl0ZXMpIGluIHRoZSBhZGFwdGVyLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIGNhbGxzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItbWFza2VkLXNjYW4tdWludDMyLXBlZWsiIHRpdGxlPSJnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzJfcGVlayAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzJfcGVlaygpPC9jb2RlPjwvYT4gcGFzc2luZyBOVUxMCitmb3IgdmFsdWUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWRhcHRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1hc2s8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bWFzayB0byBhcHBseSB0byBkYXRhIGJlZm9yZSBtYXRjaGluZyBhZ2FpbnN0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXR0ZXJuPC9jb2RlPjwvZW0+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhdHRlcm48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cGF0dGVybiB0byBtYXRjaCAoYWZ0ZXIgbWFzayBpcyBhcHBsaWVkKTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm9mZnNldCBpbnRvIHRoZSBhZGFwdGVyIGRhdGEgZnJvbSB3aGljaCB0byBzdGFydCBzY2FubmluZywgcmV0dXJucwordGhlIGxhc3Qgc2Nhbm5lZCBwb3NpdGlvbi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bnVtYmVyIG9mIGJ5dGVzIHRvIHNjYW4gZnJvbSBvZmZzZXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5vZmZzZXQgb2YgdGhlIGZpcnN0IG1hdGNoLCBvciAtMSBpZiBubyBtYXRjaCB3YXMgZm91bmQuCitFeGFtcGxlOgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgorLy8gQXNzdW1lIHRoZSBhZGFwdGVyIGNvbnRhaW5zIDB4MDAgMHgwMSAweDAyIC4uLiAweGZlIDB4ZmYKK2dzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmZmZmZiwgMHgwMDAxMDIwMywgMCwgMjU2KTsKKy8vIC0mZ3Q7IHJldHVybnMgMAorZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmZmZmZmLCAweDAwMDEwMjAzLCAxLCAyNTUpOworLy8gLSZndDsgcmV0dXJucyAtMQorZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmZmZmZmLCAweDAxMDIwMzA0LCAxLCAyNTUpOworLy8gLSZndDsgcmV0dXJucyAxCitnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZiwgMHgwMDAxLCAwLCAyNTYpOworLy8gLSZndDsgcmV0dXJucyAtMQorZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmYsIDB4MDIwMywgMCwgMjU2KTsKKy8vIC0mZ3Q7IHJldHVybnMgMAorZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmYwMDAwLCAweDAyMDMwMDAwLCAwLCAyNTYpOworLy8gLSZndDsgcmV0dXJucyAyCitnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZjAwMDAsIDB4MDIwMzAwMDAsIDAsIDQpOworLy8gLSZndDsgcmV0dXJucyAtMQorPC9wcmU+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI0PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYWRhcHRlci1tYXNrZWQtc2Nhbi11aW50MzItcGVlayI+PC9hPjxoMz5nc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzJfcGVlayAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdzaXplPC9zcGFuPjwvYT4gICAgICAgICAgICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzJfcGVlayAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+ICphZGFwdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+IG1hc2s8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gcGF0dGVybjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2NhbiBmb3IgcGF0dGVybiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGF0dGVybjwvY29kZT48L2VtPiB3aXRoIGFwcGxpZWQgbWFzayA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWFzazwvY29kZT48L2VtPiBpbiB0aGUgYWRhcHRlciBkYXRhLAorc3RhcnRpbmcgZnJvbSBvZmZzZXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPi4gIElmIGEgbWF0Y2ggaXMgZm91bmQsIHRoZSB2YWx1ZSB0aGF0IG1hdGNoZWQKK2lzIHJldHVybmVkIHRocm91Z2ggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+LCBvdGhlcndpc2UgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+IGlzIGxlZnQgdW50b3VjaGVkLgorPC9wPgorPHA+CitUaGUgYnl0ZXMgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhdHRlcm48L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYXNrPC9jb2RlPjwvZW0+IGFyZSBpbnRlcnByZXRlZCBsZWZ0LXRvLXJpZ2h0LCByZWdhcmRsZXNzCitvZiBlbmRpYW5uZXNzLiAgQWxsIGZvdXIgYnl0ZXMgb2YgdGhlIHBhdHRlcm4gbXVzdCBiZSBwcmVzZW50IGluIHRoZQorYWRhcHRlciBmb3IgaXQgdG8gbWF0Y2gsIGV2ZW4gaWYgdGhlIGZpcnN0IG9yIGxhc3QgYnl0ZXMgYXJlIG1hc2tlZCBvdXQuCis8L3A+Cis8cD4KK0l0IGlzIGFuIGVycm9yIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRob3V0IG1ha2luZyBzdXJlIHRoYXQgdGhlcmUgaXMKK2Vub3VnaCBkYXRhIChvZmZzZXQrc2l6ZSBieXRlcykgaW4gdGhlIGFkYXB0ZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWRhcHRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1hc2s8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bWFzayB0byBhcHBseSB0byBkYXRhIGJlZm9yZSBtYXRjaGluZyBhZ2FpbnN0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXR0ZXJuPC9jb2RlPjwvZW0+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhdHRlcm48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cGF0dGVybiB0byBtYXRjaCAoYWZ0ZXIgbWFzayBpcyBhcHBsaWVkKTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm9mZnNldCBpbnRvIHRoZSBhZGFwdGVyIGRhdGEgZnJvbSB3aGljaCB0byBzdGFydCBzY2FubmluZywgcmV0dXJucwordGhlIGxhc3Qgc2Nhbm5lZCBwb3NpdGlvbi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bnVtYmVyIG9mIGJ5dGVzIHRvIHNjYW4gZnJvbSBvZmZzZXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnBvaW50ZXIgdG8gdWludDMyIHRvIHJldHVybiBtYXRjaGluZyBkYXRhPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+b2Zmc2V0IG9mIHRoZSBmaXJzdCBtYXRjaCwgb3IgLTEgaWYgbm8gbWF0Y2ggd2FzIGZvdW5kLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzA8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvR3N0QmFzZVNpbmsuaHRtbCBiL2RvY3MvbGlicy9odG1sL0dzdEJhc2VTaW5rLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk1MTcyZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbGlicy9odG1sL0dzdEJhc2VTaW5rLmh0bWwKQEAgLTAsMCArMSwxMzIyIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0QmFzZVNpbms8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJnc3RyZWFtZXItYmFzZS5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEJhc2UgYW5kIFV0aWxsaXR5IENsYXNzZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iZ3N0cmVhbWVyLWJhc2UuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIDAuMTEgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNHc3RCYXNlU2luay5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEJhc2VTaW5rLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RCYXNlU2luay5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEJhc2VTaW5rLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJHc3RCYXNlU2luayI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9IkdzdEJhc2VTaW5rLnRvcF9vZl9wYWdlIj48L2E+R3N0QmFzZVNpbms8L3NwYW4+PC9oMj4KKzxwPkdzdEJhc2VTaW5rIOKAlCBCYXNlIGNsYXNzIGZvciBzaW5rIGVsZW1lbnRzPC9wPgorPC90ZD4KKzx0ZCB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgorPC90cj48L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGEgbmFtZT0iR3N0QmFzZVNpbmsuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2dzdC9iYXNlL2dzdGJhc2VzaW5rLmgmZ3Q7CisKK3N0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT47CitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rQ2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0QmFzZVNpbmtDbGFzcyI+R3N0QmFzZVNpbmtDbGFzczwvYT47Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstcXVlcnktbGF0ZW5jeSIgdGl0bGU9ImdzdF9iYXNlX3NpbmtfcXVlcnlfbGF0ZW5jeSAoKSI+Z3N0X2Jhc2Vfc2lua19xdWVyeV9sYXRlbmN5PC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAqbGl2ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICp1cHN0cmVhbV9saXZlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gKm1pbl9sYXRlbmN5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gKm1heF9sYXRlbmN5PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+ICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWdldC1sYXRlbmN5IiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19nZXRfbGF0ZW5jeSAoKSI+Z3N0X2Jhc2Vfc2lua19nZXRfbGF0ZW5jeTwvYT4gICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4gICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1kby1wcmVyb2xsIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19kb19wcmVyb2xsICgpIj5nc3RfYmFzZV9zaW5rX2RvX3ByZXJvbGw8L2E+ICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiAqc2luazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKm9iajwvY29kZT48L2VtPik7Cis8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXdhaXQtcHJlcm9sbCIgdGl0bGU9ImdzdF9iYXNlX3Npbmtfd2FpdF9wcmVyb2xsICgpIj5nc3RfYmFzZV9zaW5rX3dhaXRfcHJlcm9sbDwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiAqc2luazwvY29kZT48L2VtPik7Cis8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrUmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrUmV0dXJuPC9zcGFuPjwvYT4gICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXdhaXQtY2xvY2siIHRpdGxlPSJnc3RfYmFzZV9zaW5rX3dhaXRfY2xvY2sgKCkiPmdzdF9iYXNlX3Npbmtfd2FpdF9jbG9jazwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+ICpzaW5rPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZURpZmYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWVEaWZmPC9zcGFuPjwvYT4gKmppdHRlcjwvY29kZT48L2VtPik7Cis8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXdhaXQtZW9zIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua193YWl0X2VvcyAoKSI+Z3N0X2Jhc2Vfc2lua193YWl0X2VvczwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lRGlmZiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZURpZmY8L3NwYW4+PC9hPiAqaml0dGVyPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1zZXQtc3luYyIgdGl0bGU9ImdzdF9iYXNlX3Npbmtfc2V0X3N5bmMgKCkiPmdzdF9iYXNlX3Npbmtfc2V0X3N5bmM8L2E+ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+ICpzaW5rPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gc3luYzwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstZ2V0LXN5bmMiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX2dldF9zeW5jICgpIj5nc3RfYmFzZV9zaW5rX2dldF9zeW5jPC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiAqc2luazwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstc2V0LW1heC1sYXRlbmVzcyIgdGl0bGU9ImdzdF9iYXNlX3Npbmtfc2V0X21heF9sYXRlbmVzcyAoKSI+Z3N0X2Jhc2Vfc2lua19zZXRfbWF4X2xhdGVuZXNzPC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IG1heF9sYXRlbmVzczwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ2NDwvc3Bhbj48L2E+ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWdldC1tYXgtbGF0ZW5lc3MiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX2dldF9tYXhfbGF0ZW5lc3MgKCkiPmdzdF9iYXNlX3NpbmtfZ2V0X21heF9sYXRlbmVzczwvYT4gICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+ICpzaW5rPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1zZXQtcW9zLWVuYWJsZWQiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX3NldF9xb3NfZW5hYmxlZCAoKSI+Z3N0X2Jhc2Vfc2lua19zZXRfcW9zX2VuYWJsZWQ8L2E+ICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBlbmFibGVkPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1pcy1xb3MtZW5hYmxlZCIgdGl0bGU9ImdzdF9iYXNlX3NpbmtfaXNfcW9zX2VuYWJsZWQgKCkiPmdzdF9iYXNlX3NpbmtfaXNfcW9zX2VuYWJsZWQ8L2E+ICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+ICpzaW5rPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1zZXQtYXN5bmMtZW5hYmxlZCIgdGl0bGU9ImdzdF9iYXNlX3Npbmtfc2V0X2FzeW5jX2VuYWJsZWQgKCkiPmdzdF9iYXNlX3Npbmtfc2V0X2FzeW5jX2VuYWJsZWQ8L2E+ICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+ICpzaW5rPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gZW5hYmxlZDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstaXMtYXN5bmMtZW5hYmxlZCIgdGl0bGU9ImdzdF9iYXNlX3NpbmtfaXNfYXN5bmNfZW5hYmxlZCAoKSI+Z3N0X2Jhc2Vfc2lua19pc19hc3luY19lbmFibGVkPC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXNldC10cy1vZmZzZXQiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX3NldF90c19vZmZzZXQgKCkiPmdzdF9iYXNlX3Npbmtfc2V0X3RzX29mZnNldDwvYT4gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+ICpzaW5rPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lRGlmZiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZURpZmY8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWVEaWZmIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZURpZmY8L3NwYW4+PC9hPiAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWdldC10cy1vZmZzZXQiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX2dldF90c19vZmZzZXQgKCkiPmdzdF9iYXNlX3NpbmtfZ2V0X3RzX29mZnNldDwvYT4gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+ICpzaW5rPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1zZXQtcmVuZGVyLWRlbGF5IiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19zZXRfcmVuZGVyX2RlbGF5ICgpIj5nc3RfYmFzZV9zaW5rX3NldF9yZW5kZXJfZGVsYXk8L2E+ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiAqc2luazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IGRlbGF5PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+ICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWdldC1yZW5kZXItZGVsYXkiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX2dldF9yZW5kZXJfZGVsYXkgKCkiPmdzdF9iYXNlX3NpbmtfZ2V0X3JlbmRlcl9kZWxheTwvYT4gICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+ICpzaW5rPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1zZXQtbGFzdC1idWZmZXItZW5hYmxlZCIgdGl0bGU9ImdzdF9iYXNlX3Npbmtfc2V0X2xhc3RfYnVmZmVyX2VuYWJsZWQgKCkiPmdzdF9iYXNlX3Npbmtfc2V0X2xhc3RfYnVmZmVyX2VuYWJsZWQ8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBlbmFibGVkPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1pcy1sYXN0LWJ1ZmZlci1lbmFibGVkIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19pc19sYXN0X2J1ZmZlcl9lbmFibGVkICgpIj5nc3RfYmFzZV9zaW5rX2lzX2xhc3RfYnVmZmVyX2VuYWJsZWQ8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1nZXQtbGFzdC1idWZmZXIiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX2dldF9sYXN0X2J1ZmZlciAoKSI+Z3N0X2Jhc2Vfc2lua19nZXRfbGFzdF9idWZmZXI8L2E+ICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXNldC1ibG9ja3NpemUiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX3NldF9ibG9ja3NpemUgKCkiPmdzdF9iYXNlX3Npbmtfc2V0X2Jsb2Nrc2l6ZTwvYT4gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+ICpzaW5rPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gYmxvY2tzaXplPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1nZXQtYmxvY2tzaXplIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19nZXRfYmxvY2tzaXplICgpIj5nc3RfYmFzZV9zaW5rX2dldF9ibG9ja3NpemU8L2E+ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiAqc2luazwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1nZXQtdGhyb3R0bGUtdGltZSIgdGl0bGU9ImdzdF9iYXNlX3NpbmtfZ2V0X3Rocm90dGxlX3RpbWUgKCkiPmdzdF9iYXNlX3NpbmtfZ2V0X3Rocm90dGxlX3RpbWU8L2E+ICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+ICpzaW5rPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1zZXQtdGhyb3R0bGUtdGltZSIgdGl0bGU9ImdzdF9iYXNlX3Npbmtfc2V0X3Rocm90dGxlX3RpbWUgKCkiPmdzdF9iYXNlX3Npbmtfc2V0X3Rocm90dGxlX3RpbWU8L2E+ICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+ICpzaW5rPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHRocm90dGxlPC9jb2RlPjwvZW0+KTsKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR1NULUJBU0UtU0lOSy1QQUQ6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1NJTktfUEFEKCkiPkdTVF9CQVNFX1NJTktfUEFEPC9hPiAgICAgICAgICAgICAgICAgICAob2JqKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHU1QtQkFTRS1TSU5LLUdFVC1QUkVST0xMLUNPTkQ6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1NJTktfR0VUX1BSRVJPTExfQ09ORCgpIj5HU1RfQkFTRV9TSU5LX0dFVF9QUkVST0xMX0NPTkQ8L2E+ICAgICAgKHBhZCkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR1NULUJBU0UtU0lOSy1HRVQtUFJFUk9MTC1MT0NLOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9TSU5LX0dFVF9QUkVST0xMX0xPQ0soKSI+R1NUX0JBU0VfU0lOS19HRVRfUFJFUk9MTF9MT0NLPC9hPiAgICAgIChwYWQpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dTVC1CQVNFLVNJTkstUFJFUk9MTC1CUk9BRENBU1Q6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1NJTktfUFJFUk9MTF9CUk9BRENBU1QoKSI+R1NUX0JBU0VfU0lOS19QUkVST0xMX0JST0FEQ0FTVDwvYT4gICAgIChwYWQpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dTVC1CQVNFLVNJTkstUFJFUk9MTC1MT0NLOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9TSU5LX1BSRVJPTExfTE9DSygpIj5HU1RfQkFTRV9TSU5LX1BSRVJPTExfTE9DSzwvYT4gICAgICAgICAgKHBhZCkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR1NULUJBU0UtU0lOSy1QUkVST0xMLVNJR05BTDpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfU0lOS19QUkVST0xMX1NJR05BTCgpIj5HU1RfQkFTRV9TSU5LX1BSRVJPTExfU0lHTkFMPC9hPiAgICAgICAgKHBhZCkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR1NULUJBU0UtU0lOSy1QUkVST0xMLVRJTUVELVdBSVQ6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1NJTktfUFJFUk9MTF9USU1FRF9XQUlUKCkiPkdTVF9CQVNFX1NJTktfUFJFUk9MTF9USU1FRF9XQUlUPC9hPiAgICAocGFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXZhbCkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR1NULUJBU0UtU0lOSy1QUkVST0xMLVRSWUxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1NJTktfUFJFUk9MTF9UUllMT0NLKCkiPkdTVF9CQVNFX1NJTktfUFJFUk9MTF9UUllMT0NLPC9hPiAgICAgICAocGFkKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHU1QtQkFTRS1TSU5LLVBSRVJPTEwtVU5MT0NLOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9TSU5LX1BSRVJPTExfVU5MT0NLKCkiPkdTVF9CQVNFX1NJTktfUFJFUk9MTF9VTkxPQ0s8L2E+ICAgICAgICAocGFkKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHU1QtQkFTRS1TSU5LLVBSRVJPTEwtV0FJVDpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfU0lOS19QUkVST0xMX1dBSVQoKSI+R1NUX0JBU0VfU0lOS19QUkVST0xMX1dBSVQ8L2E+ICAgICAgICAgIChwYWQpCis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0QmFzZVNpbmsub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPkdPYmplY3Q8L2E+CisgICArLS0tLTxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+CisgICAgICAgICArLS0tLTxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdE9iamVjdC5odG1sIj5Hc3RPYmplY3Q8L2E+CisgICAgICAgICAgICAgICArLS0tLTxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCI+R3N0RWxlbWVudDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICstLS0tR3N0QmFzZVNpbmsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RCYXNlU2luay5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstLWFzeW5jIiB0aXRsZT0nVGhlICJhc3luYyIgcHJvcGVydHknPmFzeW5jPC9hPiIgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay0tYmxvY2tzaXplIiB0aXRsZT0nVGhlICJibG9ja3NpemUiIHByb3BlcnR5Jz5ibG9ja3NpemU8L2E+IiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstLWVuYWJsZS1sYXN0LWJ1ZmZlciIgdGl0bGU9J1RoZSAiZW5hYmxlLWxhc3QtYnVmZmVyIiBwcm9wZXJ0eSc+ZW5hYmxlLWxhc3QtYnVmZmVyPC9hPiIgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1sYXN0LWJ1ZmZlciIgdGl0bGU9J1RoZSAibGFzdC1idWZmZXIiIHByb3BlcnR5Jz5sYXN0LWJ1ZmZlcjwvYT4iICAgICAgICAgICAgICA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4qICAgICAgICAgICAgOiBSZWFkCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay0tbWF4LWxhdGVuZXNzIiB0aXRsZT0nVGhlICJtYXgtbGF0ZW5lc3MiIHByb3BlcnR5Jz5tYXgtbGF0ZW5lc3M8L2E+IiAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1xb3MiIHRpdGxlPSdUaGUgInFvcyIgcHJvcGVydHknPnFvczwvYT4iICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay0tcmVuZGVyLWRlbGF5IiB0aXRsZT0nVGhlICJyZW5kZXItZGVsYXkiIHByb3BlcnR5Jz5yZW5kZXItZGVsYXk8L2E+IiAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay0tc3luYyIgdGl0bGU9J1RoZSAic3luYyIgcHJvcGVydHknPnN5bmM8L2E+IiAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay0tdGhyb3R0bGUtdGltZSIgdGl0bGU9J1RoZSAidGhyb3R0bGUtdGltZSIgcHJvcGVydHknPnRocm90dGxlLXRpbWU8L2E+IiAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS10cy1vZmZzZXQiIHRpdGxlPSdUaGUgInRzLW9mZnNldCIgcHJvcGVydHknPnRzLW9mZnNldDwvYT4iICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdEJhc2VTaW5rLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gaXMgdGhlIGJhc2UgY2xhc3MgZm9yIHNpbmsgZWxlbWVudHMgaW4gR1N0cmVhbWVyLCBzdWNoIGFzCit4dmltYWdlc2luayBvciBmaWxlc2luay4gSXQgaXMgYSBsYXllciBvbiB0b3Agb2YgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRoYXQgcHJvdmlkZXMgYQorc2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gcGx1Z2luIHdyaXRlcnMuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+IGhhbmRsZXMgbWFueSBkZXRhaWxzCitmb3IgeW91LCBmb3IgZXhhbXBsZTogcHJlcm9sbCwgY2xvY2sgc3luY2hyb25pemF0aW9uLCBzdGF0ZSBjaGFuZ2VzLAorYWN0aXZhdGlvbiBpbiBwdXNoIG9yIHB1bGwgbW9kZSwgYW5kIHF1ZXJpZXMuCis8L3A+Cis8cD4KK0luIG1vc3QgY2FzZXMsIHdoZW4gd3JpdGluZyBzaW5rIGVsZW1lbnRzLCB0aGVyZSBpcyBubyBuZWVkIHRvIGltcGxlbWVudAorY2xhc3MgbWV0aG9kcyBmcm9tIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBvciB0byBzZXQgZnVuY3Rpb25zIG9uIHBhZHMsIGJlY2F1c2UgdGhlCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiBpbmZyYXN0cnVjdHVyZSBzaG91bGQgYmUgc3VmZmljaWVudC4KKzwvcD4KKzxwPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gcHJvdmlkZXMgc3VwcG9ydCBmb3IgZXhhY3RseSBvbmUgc2luayBwYWQsIHdoaWNoIHNob3VsZCBiZQorbmFtZWQgInNpbmsiLiBBIHNpbmsgaW1wbGVtZW50YXRpb24gKHN1YmNsYXNzIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+KSBzaG91bGQKK2luc3RhbGwgYSBwYWQgdGVtcGxhdGUgaW4gaXRzIGNsYXNzX2luaXQgZnVuY3Rpb24sIGxpa2Ugc286Cis8L3A+Cis8ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KK3N0YXRpYyB2b2lkCitteV9lbGVtZW50X2NsYXNzX2luaXQgKEdzdE15RWxlbWVudENsYXNzICprbGFzcykKK3sKKyAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKKworICAvLyBzaW5rdGVtcGxhdGUgc2hvdWxkIGJlIGEgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RTdGF0aWNQYWRUZW1wbGF0ZSI+R3N0U3RhdGljUGFkVGVtcGxhdGU8L2E+IHdpdGggZGlyZWN0aW9uCisgIC8vIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dTVC1QQUQtU0lOSzpDQVBTIj5HU1RfUEFEX1NJTks8L2E+IGFuZCBuYW1lICJzaW5rIgorICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAorICAgICAgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0ICgmYW1wO3Npbmt0ZW1wbGF0ZSkpOworICAvLyBzZWUgPGEgaHJlZj0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyL2h0bWwvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHc3RFbGVtZW50RGV0YWlscyI+R3N0RWxlbWVudERldGFpbHM8L2E+CisgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzIChnc3RlbGVtZW50X2NsYXNzLCAmYW1wO2RldGFpbHMpOworfQorPC9wcmU+PC9kaXY+Cis8cD4KKzwvcD4KKzxwPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gd2lsbCBoYW5kbGUgdGhlIHByZXJvbGxpbmcgY29ycmVjdGx5LiBUaGlzIG1lYW5zIHRoYXQgaXQgd2lsbAorcmV0dXJuIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLUFTWU5DOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfU1RBVEVfQ0hBTkdFX0FTWU5DPC9zcGFuPjwvYT4gZnJvbSBhIHN0YXRlIGNoYW5nZSB0byBQQVVTRUQgdW50aWwgdGhlIGZpcnN0CitidWZmZXIgYXJyaXZlcyBpbiB0aGlzIGVsZW1lbnQuIFRoZSBiYXNlIGNsYXNzIHdpbGwgY2FsbCB0aGUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rQ2xhc3MucHJlcm9sbCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU2lua0NsYXNzLnByZXJvbGwoKTwvY29kZT48L2E+IHZtZXRob2Qgd2l0aCB0aGlzIHByZXJvbGwgYnVmZmVyIGFuZCB3aWxsIHRoZW4KK2NvbW1pdCB0aGUgc3RhdGUgY2hhbmdlIHRvIHRoZSBuZXh0IGFzeW5jaHJvbm91c2x5IHBlbmRpbmcgc3RhdGUuCis8L3A+Cis8cD4KK1doZW4gdGhlIGVsZW1lbnQgaXMgc2V0IHRvIFBMQVlJTkcsIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+IHdpbGwgc3luY2hyb25pc2Ugb24gdGhlCitjbG9jayB1c2luZyB0aGUgdGltZXMgcmV0dXJuZWQgZnJvbSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2lua0NsYXNzLmdldC10aW1lcyI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU2lua0NsYXNzLmdldF90aW1lcygpPC9jb2RlPjwvYT4uIElmIHRoaXMKK2Z1bmN0aW9uIHJldHVybnMgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stVElNRS1OT05FOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfQ0xPQ0tfVElNRV9OT05FPC9zcGFuPjwvYT4gZm9yIHRoZSBzdGFydCB0aW1lLCBubyBzeW5jaHJvbmlzYXRpb24KK3dpbGwgYmUgZG9uZS4gU3luY2hyb25pc2F0aW9uIGNhbiBiZSBkaXNhYmxlZCBlbnRpcmVseSBieSBzZXR0aW5nIHRoZSBvYmplY3QKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1zeW5jIiB0aXRsZT0nVGhlICJzeW5jIiBwcm9wZXJ0eSc+PHNwYW4gY2xhc3M9InR5cGUiPiJzeW5jIjwvc3Bhbj48L2E+IHByb3BlcnR5IHRvIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4uCis8L3A+Cis8cD4KK0FmdGVyIHN5bmNocm9uaXNhdGlvbiB0aGUgdmlydHVhbCBtZXRob2QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmtDbGFzcy5yZW5kZXIiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R3N0QmFzZVNpbmtDbGFzcy5yZW5kZXIoKTwvY29kZT48L2E+IHdpbGwgYmUKK2NhbGxlZC4gU3ViY2xhc3NlcyBzaG91bGQgbWluaW1hbGx5IGltcGxlbWVudCB0aGlzIG1ldGhvZC4KKzwvcD4KKzxwPgorU2luY2UgMC4xMC4zIHN1YmNsYXNzZXMgdGhhdCBzeW5jaHJvbmlzZSBvbiB0aGUgY2xvY2sgaW4gdGhlCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2lua0NsYXNzLnJlbmRlciI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU2lua0NsYXNzLnJlbmRlcigpPC9jb2RlPjwvYT4gbWV0aG9kIGFyZSBzdXBwb3J0ZWQgYXMgd2VsbC4gVGhlc2UgY2xhc3NlcwordHlwaWNhbGx5IHJlY2VpdmUgYSBidWZmZXIgaW4gdGhlIHJlbmRlciBtZXRob2QgYW5kIGNhbiB0aGVuIHBvdGVudGlhbGx5CitibG9jayBvbiB0aGUgY2xvY2sgd2hpbGUgcmVuZGVyaW5nLiBBIHR5cGljYWwgZXhhbXBsZSBpcyBhbiBhdWRpb3NpbmsuCitTaW5jZSAwLjEwLjExIHRoZXNlIHN1YmNsYXNzZXMgY2FuIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXdhaXQtcHJlcm9sbCIgdGl0bGU9ImdzdF9iYXNlX3Npbmtfd2FpdF9wcmVyb2xsICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iYXNlX3Npbmtfd2FpdF9wcmVyb2xsKCk8L2NvZGU+PC9hPiB0bworcGVyZm9ybSB0aGUgYmxvY2tpbmcgd2FpdC4KKzwvcD4KKzxwPgorVXBvbiByZWNlaXZpbmcgdGhlIEVPUyBldmVudCBpbiB0aGUgUExBWUlORyBzdGF0ZSwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gd2lsbCB3YWl0Citmb3IgdGhlIGNsb2NrIHRvIHJlYWNoIHRoZSB0aW1lIGluZGljYXRlZCBieSB0aGUgc3RvcCB0aW1lIG9mIHRoZSBsYXN0Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2lua0NsYXNzLmdldC10aW1lcyI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU2lua0NsYXNzLmdldF90aW1lcygpPC9jb2RlPjwvYT4gY2FsbCBiZWZvcmUgcG9zdGluZyBhbiBFT1MgbWVzc2FnZS4gV2hlbiB0aGUKK2VsZW1lbnQgcmVjZWl2ZXMgRU9TIGluIFBBVVNFRCwgcHJlcm9sbCBjb21wbGV0ZXMsIHRoZSBldmVudCBpcyBxdWV1ZWQgYW5kIGFuCitFT1MgbWVzc2FnZSBpcyBwb3N0ZWQgd2hlbiBnb2luZyB0byBQTEFZSU5HLgorPC9wPgorPHA+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiB3aWxsIGludGVybmFsbHkgdXNlIHRoZSA8YSBocmVmPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXIvaHRtbC9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtTkVXU0VHTUVOVDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0VWRU5UX05FV1NFR01FTlQ8L3NwYW4+PC9hPiBldmVudHMgdG8gc2NoZWR1bGUKK3N5bmNocm9uaXNhdGlvbiBhbmQgY2xpcHBpbmcgb2YgYnVmZmVycy4gQnVmZmVycyB0aGF0IGZhbGwgY29tcGxldGVseSBvdXRzaWRlCitvZiB0aGUgY3VycmVudCBzZWdtZW50IGFyZSBkcm9wcGVkLiBCdWZmZXJzIHRoYXQgZmFsbCBwYXJ0aWFsbHkgaW4gdGhlCitzZWdtZW50IGFyZSByZW5kZXJlZCAoYW5kIHByZXJvbGxlZCkuIFN1YmNsYXNzZXMgc2hvdWxkIGRvIGFueSBzdWJidWZmZXIKK2NsaXBwaW5nIHRoZW1zZWx2ZXMgd2hlbiBuZWVkZWQuCis8L3A+Cis8cD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+IHdpbGwgYnkgZGVmYXVsdCByZXBvcnQgdGhlIGN1cnJlbnQgcGxheWJhY2sgcG9zaXRpb24gaW4KKzxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHU1QtRk9STUFULVRJTUU6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GT1JNQVRfVElNRTwvc3Bhbj48L2E+IGJhc2VkIG9uIHRoZSBjdXJyZW50IGNsb2NrIHRpbWUgYW5kIHNlZ21lbnQgaW5mb3JtYXRpb24uCitJZiBubyBjbG9jayBoYXMgYmVlbiBzZXQgb24gdGhlIGVsZW1lbnQsIHRoZSBxdWVyeSB3aWxsIGJlIGZvcndhcmRlZAordXBzdHJlYW0uCis8L3A+Cis8cD4KK1RoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2lua0NsYXNzLnNldC1jYXBzIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdzdEJhc2VTaW5rQ2xhc3Muc2V0X2NhcHMoKTwvY29kZT48L2E+IGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHN1YmNsYXNzCitzaG91bGQgY29uZmlndXJlIGl0c2VsZiB0byBwcm9jZXNzIGEgc3BlY2lmaWMgbWVkaWEgdHlwZS4KKzwvcD4KKzxwPgorVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rQ2xhc3Muc3RhcnQiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R3N0QmFzZVNpbmtDbGFzcy5zdGFydCgpPC9jb2RlPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rQ2xhc3Muc3RvcCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU2lua0NsYXNzLnN0b3AoKTwvY29kZT48L2E+IHZpcnR1YWwgbWV0aG9kcword2lsbCBiZSBjYWxsZWQgd2hlbiByZXNvdXJjZXMgc2hvdWxkIGJlIGFsbG9jYXRlZC4gQW55IAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmtDbGFzcy5wcmVyb2xsIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdzdEJhc2VTaW5rQ2xhc3MucHJlcm9sbCgpPC9jb2RlPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rQ2xhc3MucmVuZGVyIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdzdEJhc2VTaW5rQ2xhc3MucmVuZGVyKCk8L2NvZGU+PC9hPiBhbmQKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rQ2xhc3Muc2V0LWNhcHMiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R3N0QmFzZVNpbmtDbGFzcy5zZXRfY2FwcygpPC9jb2RlPjwvYT4gZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYmV0d2VlbiB0aGUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rQ2xhc3Muc3RhcnQiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R3N0QmFzZVNpbmtDbGFzcy5zdGFydCgpPC9jb2RlPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rQ2xhc3Muc3RvcCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU2lua0NsYXNzLnN0b3AoKTwvY29kZT48L2E+IGNhbGxzLgorPC9wPgorPHA+CitUaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmtDbGFzcy5ldmVudCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU2lua0NsYXNzLmV2ZW50KCk8L2NvZGU+PC9hPiB2aXJ0dWFsIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCB3aGVuIGFuIGV2ZW50IGlzCityZWNlaXZlZCBieSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPi4gTm9ybWFsbHkgdGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgb3ZlcnJpZGVuIGJ5Cit2ZXJ5IHNwZWNpZmljIGVsZW1lbnRzIChzdWNoIGFzIGZpbGUgc2lua3MpIHdoaWNoIG5lZWQgdG8gaGFuZGxlIHRoZQorbmV3c2VnbWVudCBldmVudCBzcGVjaWFsbHkuCis8L3A+Cis8cD4KK1RoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2lua0NsYXNzLnVubG9jayI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU2lua0NsYXNzLnVubG9jaygpPC9jb2RlPjwvYT4gbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBlbGVtZW50cyBzaG91bGQKK3VuYmxvY2sgYW55IGJsb2NraW5nIG9wZXJhdGlvbnMgdGhleSBwZXJmb3JtIGluIHRoZQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmtDbGFzcy5yZW5kZXIiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R3N0QmFzZVNpbmtDbGFzcy5yZW5kZXIoKTwvY29kZT48L2E+IG1ldGhvZC4gVGhpcyBpcyBtb3N0bHkgdXNlZnVsIHdoZW4gdGhlCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2lua0NsYXNzLnJlbmRlciI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU2lua0NsYXNzLnJlbmRlcigpPC9jb2RlPjwvYT4gbWV0aG9kIHBlcmZvcm1zIGEgYmxvY2tpbmcgd3JpdGUgb24gYSBmaWxlCitkZXNjcmlwdG9yLCBmb3IgZXhhbXBsZS4KKzwvcD4KKzxwPgorVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1tYXgtbGF0ZW5lc3MiIHRpdGxlPSdUaGUgIm1heC1sYXRlbmVzcyIgcHJvcGVydHknPjxzcGFuIGNsYXNzPSJ0eXBlIj4ibWF4LWxhdGVuZXNzIjwvc3Bhbj48L2E+IHByb3BlcnR5IGFmZmVjdHMgaG93IHRoZSBzaW5rIGRlYWxzIHdpdGgKK2J1ZmZlcnMgdGhhdCBhcnJpdmUgdG9vIGxhdGUgaW4gdGhlIHNpbmsuIEEgYnVmZmVyIGFycml2ZXMgdG9vIGxhdGUgaW4gdGhlCitzaW5rIHdoZW4gdGhlIHByZXNlbnRhdGlvbiB0aW1lIChhcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBsYXN0IHNlZ21lbnQsIGJ1ZmZlcgordGltZXN0YW1wIGFuZCBlbGVtZW50IGJhc2VfdGltZSkgcGx1cyB0aGUgZHVyYXRpb24gaXMgYmVmb3JlIHRoZSBjdXJyZW50Cit0aW1lIG9mIHRoZSBjbG9jay4KK0lmIHRoZSBmcmFtZSBpcyBsYXRlciB0aGFuIG1heC1sYXRlbmVzcywgdGhlIHNpbmsgd2lsbCBkcm9wIHRoZSBidWZmZXIKK3dpdGhvdXQgY2FsbGluZyB0aGUgcmVuZGVyIG1ldGhvZC4KK1RoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCBpZiBzeW5jIGlzIGRpc2FibGVkLCB0aGUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rQ2xhc3MuZ2V0LXRpbWVzIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdzdEJhc2VTaW5rQ2xhc3MuZ2V0X3RpbWVzKCk8L2NvZGU+PC9hPiBtZXRob2QgZG9lcyBub3QgcmV0dXJuIGEgdmFsaWQgc3RhcnQgdGltZSBvcgorbWF4LWxhdGVuZXNzIGlzIHNldCB0byAtMSAodGhlIGRlZmF1bHQpLgorU3ViY2xhc3NlcyBjYW4gdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstc2V0LW1heC1sYXRlbmVzcyIgdGl0bGU9ImdzdF9iYXNlX3Npbmtfc2V0X21heF9sYXRlbmVzcyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmFzZV9zaW5rX3NldF9tYXhfbGF0ZW5lc3MoKTwvY29kZT48L2E+IHRvIGNvbmZpZ3VyZSB0aGUKK21heC1sYXRlbmVzcyB2YWx1ZS4KKzwvcD4KKzxwPgorVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1xb3MiIHRpdGxlPSdUaGUgInFvcyIgcHJvcGVydHknPjxzcGFuIGNsYXNzPSJ0eXBlIj4icW9zIjwvc3Bhbj48L2E+IHByb3BlcnR5IHdpbGwgZW5hYmxlIHRoZSBxdWFsaXR5LW9mLXNlcnZpY2UgZmVhdHVyZXMgb2YKK3RoZSBiYXNlc2luayB3aGljaCBnYXRoZXIgc3RhdGlzdGljcyBhYm91dCB0aGUgcmVhbC10aW1lIHBlcmZvcm1hbmNlIG9mIHRoZQorY2xvY2sgc3luY2hyb25pc2F0aW9uLiBGb3IgZWFjaCBidWZmZXIgcmVjZWl2ZWQgaW4gdGhlIHNpbmssIHN0YXRpc3RpY3MgYXJlCitnYXRoZXJlZCBhbmQgYSBRT1MgZXZlbnQgaXMgc2VudCB1cHN0cmVhbSB3aXRoIHRoZXNlIG51bWJlcnMuIFRoaXMKK2luZm9ybWF0aW9uIGNhbiB0aGVuIGJlIHVzZWQgYnkgdXBzdHJlYW0gZWxlbWVudHMgdG8gcmVkdWNlIHRoZWlyIHByb2Nlc3NpbmcKK3JhdGUsIGZvciBleGFtcGxlLgorPC9wPgorPHA+CitTaW5jZSAwLjEwLjE1IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay0tYXN5bmMiIHRpdGxlPSdUaGUgImFzeW5jIiBwcm9wZXJ0eSc+PHNwYW4gY2xhc3M9InR5cGUiPiJhc3luYyI8L3NwYW4+PC9hPiBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBpbnN0cnVjdCB0aGUKK3NpbmsgdG8gbmV2ZXIgcGVyZm9ybSBhbiBBU1lOQyBzdGF0ZSBjaGFuZ2UuIFRoaXMgZmVhdHVyZSBpcyBtb3N0bHkgdXNhYmxlCit3aGVuIGRlYWxpbmcgd2l0aCBub24tc3luY2hyb25pemVkIHN0cmVhbXMgb3Igc3BhcnNlIHN0cmVhbXMuCis8L3A+Cis8cD4KK0xhc3QgcmV2aWV3ZWQgb24gMjAwNy0wOC0yOSAoMC4xMC4xNSkKKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0QmFzZVNpbmsuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEJhc2VTaW5rLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0QmFzZVNpbms8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RCYXNlU2luazs8L3ByZT4KKzxwPgorVGhlIG9wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiBkYXRhIHN0cnVjdHVyZS4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0QmFzZVNpbmtDbGFzcyI+PC9hPjxoMz5zdHJ1Y3QgR3N0QmFzZVNpbmtDbGFzczwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEJhc2VTaW5rQ2xhc3MgeworICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworCisgIC8qIGdldCBjYXBzIGZyb20gc3ViY2xhc3MgKi8KKyAgR3N0Q2FwcyogICAgICAoKmdldF9jYXBzKSAgICAgKEdzdEJhc2VTaW5rICpzaW5rLCBHc3RDYXBzICpmaWx0ZXIpOworICAvKiBub3RpZnkgc3ViY2xhc3Mgb2YgbmV3IGNhcHMgKi8KKyAgZ2Jvb2xlYW4gICAgICAoKnNldF9jYXBzKSAgICAgKEdzdEJhc2VTaW5rICpzaW5rLCBHc3RDYXBzICpjYXBzKTsKKworICAvKiBmaXhhdGUgc2luayBjYXBzIGR1cmluZyBwdWxsLW1vZGUgbmVnb3RpYXRpb24gKi8KKyAgdm9pZCAgICAgICAgICAoKmZpeGF0ZSkgICAgICAgKEdzdEJhc2VTaW5rICpzaW5rLCBHc3RDYXBzICpjYXBzKTsKKyAgLyogc3RhcnQgb3Igc3RvcCBhIHB1bGxpbmcgdGhyZWFkICovCisgIGdib29sZWFuICAgICAgKCphY3RpdmF0ZV9wdWxsKShHc3RCYXNlU2luayAqc2luaywgZ2Jvb2xlYW4gYWN0aXZlKTsKKworICAvKiBnZXQgdGhlIHN0YXJ0IGFuZCBlbmQgdGltZXMgZm9yIHN5bmNpbmcgb24gdGhpcyBidWZmZXIgKi8KKyAgdm9pZCAgICAgICAgICAoKmdldF90aW1lcykgICAgKEdzdEJhc2VTaW5rICpzaW5rLCBHc3RCdWZmZXIgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZSAqc3RhcnQsIEdzdENsb2NrVGltZSAqZW5kKTsKKworICAvKiBwcm9wb3NlIGFsbG9jYXRpb24gcGFyYW1ldGVycyBmb3IgdXBzdHJlYW0gKi8KKyAgZ2Jvb2xlYW4gICAgICAoKnByb3Bvc2VfYWxsb2NhdGlvbikgICAoR3N0QmFzZVNpbmsgKnNpbmssIEdzdFF1ZXJ5ICpxdWVyeSk7CisKKyAgLyogc3RhcnQgYW5kIHN0b3AgcHJvY2Vzc2luZywgaWRlYWwgZm9yIG9wZW5pbmcvY2xvc2luZyB0aGUgcmVzb3VyY2UgKi8KKyAgZ2Jvb2xlYW4gICAgICAoKnN0YXJ0KSAgICAgICAgKEdzdEJhc2VTaW5rICpzaW5rKTsKKyAgZ2Jvb2xlYW4gICAgICAoKnN0b3ApICAgICAgICAgKEdzdEJhc2VTaW5rICpzaW5rKTsKKworICAvKiB1bmxvY2sgYW55IHBlbmRpbmcgYWNjZXNzIHRvIHRoZSByZXNvdXJjZS4gc3ViY2xhc3NlcyBzaG91bGQgdW5sb2NrCisgICAqIGFueSBmdW5jdGlvbiBBU0FQLiAqLworICBnYm9vbGVhbiAgICAgICgqdW5sb2NrKSAgICAgICAoR3N0QmFzZVNpbmsgKnNpbmspOworICAvKiBDbGVhciBhIHByZXZpb3VzbHkgaW5kaWNhdGVkIHVubG9jayByZXF1ZXN0IG5vdCB0aGF0IHVubG9ja2luZyBpcworICAgKiBjb21wbGV0ZS4gU3ViLWNsYXNzZXMgc2hvdWxkIGNsZWFyIGFueSBjb21tYW5kIHF1ZXVlIG9yIGluZGljYXRvciB0aGV5CisgICAqIHNldCBkdXJpbmcgdW5sb2NrICovCisgIGdib29sZWFuICAgICAgKCp1bmxvY2tfc3RvcCkgIChHc3RCYXNlU2luayAqc2luayk7CisKKyAgLyogbm90aWZ5IHN1YmNsYXNzIG9mIHF1ZXJ5ICovCisgIGdib29sZWFuICAgICAgKCpxdWVyeSkgICAgICAgIChHc3RCYXNlU2luayAqc2luaywgR3N0UXVlcnkgKnF1ZXJ5KTsKKworICAvKiBub3RpZnkgc3ViY2xhc3Mgb2YgZXZlbnQsIHByZXJvbGwgYnVmZmVyIG9yIHJlYWwgYnVmZmVyICovCisgIGdib29sZWFuICAgICAgKCpldmVudCkgICAgICAgIChHc3RCYXNlU2luayAqc2luaywgR3N0RXZlbnQgKmV2ZW50KTsKKworICBHc3RGbG93UmV0dXJuICgqcHJlcm9sbCkgICAgICAoR3N0QmFzZVNpbmsgKnNpbmssIEdzdEJ1ZmZlciAqYnVmZmVyKTsKKyAgR3N0Rmxvd1JldHVybiAoKnJlbmRlcikgICAgICAgKEdzdEJhc2VTaW5rICpzaW5rLCBHc3RCdWZmZXIgKmJ1ZmZlcik7CisgIC8qIFJlbmRlciBhIEJ1ZmZlckxpc3QgKi8KKyAgR3N0Rmxvd1JldHVybiAoKnJlbmRlcl9saXN0KSAgKEdzdEJhc2VTaW5rICpzaW5rLCBHc3RCdWZmZXJMaXN0ICpidWZmZXJfbGlzdCk7Cit9OworPC9wcmU+Cis8cD4KK1N1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIGFueSBvZiB0aGUgYXZhaWxhYmxlIHZpcnR1YWwgbWV0aG9kcyBvciBub3QsIGFzCituZWVkZWQuIEF0IHRoZSBtaW5pbXVtLCB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlbmRlcjwvY29kZT48L2VtPiBtZXRob2Qgc2hvdWxkIGJlIG92ZXJyaWRkZW4gdG8KK291dHB1dC9wcmVzZW50IGJ1ZmZlcnMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudENsYXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudENsYXNzPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VTaW5rQ2xhc3MucGFyZW50LWNsYXNzIj48L2E+cGFyZW50X2NsYXNzPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5FbGVtZW50IHBhcmVudCBjbGFzczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlU2lua0NsYXNzLmdldC1jYXBzIj48L2E+Z2V0X2NhcHM8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPkNhbGxlZCB0byBnZXQgc2luayBwYWQgY2FwcyBmcm9tIHRoZSBzdWJjbGFzczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlU2lua0NsYXNzLnNldC1jYXBzIj48L2E+c2V0X2NhcHM8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPk5vdGlmeSBzdWJjbGFzcyBvZiBjaGFuZ2VkIGNhcHM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNpbmtDbGFzcy5maXhhdGUiPjwvYT5maXhhdGU8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPk9ubHkgdXNlZnVsIGluIHB1bGwgbW9kZSwgdGhpcyB2bWV0aG9kIHdpbGwgYmUgY2FsbGVkIGluIHJlc3BvbnNlIHRvCis8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNnc3QtcGFkLWZpeGF0ZS1jYXBzIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfZml4YXRlX2NhcHMoKTwvY29kZT48L2E+IGJlaW5nIGNhbGxlZCBvbiB0aGUgc2luayBwYWQuIEltcGxlbWVudCBpZiB5b3UgaGF2ZQoraWRlYXMgYWJvdXQgd2hhdCBzaG91bGQgYmUgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgY2FwcyB5b3Ugc3VwcG9ydC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNpbmtDbGFzcy5hY3RpdmF0ZS1wdWxsIj48L2E+YWN0aXZhdGVfcHVsbDwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+U3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyB3aGVuIHRoZXkgY2FuIHByb3ZpZGUgYW4KK2FsdGVybmF0ZSBtZXRob2Qgb2Ygc3Bhd25pbmcgYSB0aHJlYWQgdG8gZHJpdmUgdGhlIHBpcGVsaW5lIGluIHB1bGwgbW9kZS4KK1Nob3VsZCBzdGFydCBvciBzdG9wIHRoZSBwdWxsaW5nIHRocmVhZCwgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiB0aGUKKyJhY3RpdmUiIGFyZ3VtZW50LiBDYWxsZWQgYWZ0ZXIgYWN0dWFsbHkgYWN0aXZhdGluZyB0aGUgc2luayBwYWQgaW4gcHVsbAorbW9kZS4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc3RhcnRzIGEgdGFzayBvbiB0aGUgc2luayBwYWQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VTaW5rQ2xhc3MuZ2V0LXRpbWVzIj48L2E+Z2V0X3RpbWVzPC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5DYWxsZWQgdG8gZ2V0IHRoZSBzdGFydCBhbmQgZW5kIHRpbWVzIGZvciBzeW5jaHJvbmlzaW5nCit0aGUgcGFzc2VkIGJ1ZmZlciB0byB0aGUgY2xvY2s8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNpbmtDbGFzcy5wcm9wb3NlLWFsbG9jYXRpb24iPjwvYT5wcm9wb3NlX2FsbG9jYXRpb248L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPmNvbmZpZ3VyZSB0aGUgYWxsb2NhdGlvbiBxdWVyeTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlU2lua0NsYXNzLnN0YXJ0Ij48L2E+c3RhcnQ8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPlN0YXJ0IHByb2Nlc3NpbmcuIElkZWFsIGZvciBvcGVuaW5nIHJlc291cmNlcyBpbiB0aGUgc3ViY2xhc3M8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNpbmtDbGFzcy5zdG9wIj48L2E+c3RvcDwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+U3RvcCBwcm9jZXNzaW5nLiBTdWJjbGFzc2VzIHNob3VsZCB1c2UgdGhpcyB0byBjbG9zZSByZXNvdXJjZXMuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VTaW5rQ2xhc3MudW5sb2NrIj48L2E+dW5sb2NrPC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5VbmxvY2sgYW55IHBlbmRpbmcgYWNjZXNzIHRvIHRoZSByZXNvdXJjZS4gU3ViY2xhc3NlcyBzaG91bGQKK3VuYmxvY2sgYW55IGJsb2NrZWQgZnVuY3Rpb24gQVNBUDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlU2lua0NsYXNzLnVubG9jay1zdG9wIj48L2E+dW5sb2NrX3N0b3A8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPkNsZWFyIHRoZSBwcmV2aW91cyB1bmxvY2sgcmVxdWVzdC4gU3ViY2xhc3NlcyBzaG91bGQgY2xlYXIKK2FueSBzdGF0ZSB0aGV5IHNldCBkdXJpbmcgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj51bmxvY2soKTwvY29kZT4sIHN1Y2ggYXMgY2xlYXJpbmcgY29tbWFuZCBxdWV1ZXMuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VTaW5rQ2xhc3MucXVlcnkiPjwvYT5xdWVyeTwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cGVyZm9ybSBhIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiBvbiB0aGUgZWxlbWVudC4gU2luY2U6IDAuMTAuMzY8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNpbmtDbGFzcy5ldmVudCI+PC9hPmV2ZW50PC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5PdmVycmlkZSB0aGlzIHRvIGhhbmRsZSBldmVudHMgYXJyaXZpbmcgb24gdGhlIHNpbmsgcGFkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VTaW5rQ2xhc3MucHJlcm9sbCI+PC9hPnByZXJvbGw8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPkNhbGxlZCB0byBwcmVzZW50IHRoZSBwcmVyb2xsIGJ1ZmZlciBpZiBkZXNpcmVkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VTaW5rQ2xhc3MucmVuZGVyIj48L2E+cmVuZGVyPC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5DYWxsZWQgd2hlbiBhIGJ1ZmZlciBzaG91bGQgYmUgcHJlc2VudGVkIG9yIG91dHB1dCwgYXQgdGhlCitjb3JyZWN0IG1vbWVudCBpZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gaGFzIGJlZW4gc2V0IHRvIHN5bmMgdG8gdGhlIGNsb2NrLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlU2lua0NsYXNzLnJlbmRlci1saXN0Ij48L2E+cmVuZGVyX2xpc3Q8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPlNhbWUgYXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlbmRlcjwvY29kZT48L2VtPiBidXQgdXNlZCB3aGl0aCBidWZmZXIgbGlzdHMgaW5zdGVhZCBvZgorYnVmZmVycy4gU2luY2U6IDAuMTAuMjQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYmFzZS1zaW5rLXF1ZXJ5LWxhdGVuY3kiPjwvYT48aDM+Z3N0X2Jhc2Vfc2lua19xdWVyeV9sYXRlbmN5ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9iYXNlX3NpbmtfcXVlcnlfbGF0ZW5jeSAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAqbGl2ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICp1cHN0cmVhbV9saXZlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gKm1pbl9sYXRlbmN5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gKm1heF9sYXRlbmN5PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUXVlcnkgdGhlIHNpbmsgZm9yIHRoZSBsYXRlbmN5IHBhcmFtZXRlcnMuIFRoZSBsYXRlbmN5IHdpbGwgYmUgcXVlcmllZCBmcm9tCit0aGUgdXBzdHJlYW0gZWxlbWVudHMuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXZlPC9jb2RlPjwvZW0+IHdpbGwgYmUgVFJVRSBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2luazwvY29kZT48L2VtPiBpcyBjb25maWd1cmVkIHRvCitzeW5jaHJvbml6ZSBhZ2FpbnN0IHRoZSBjbG9jay4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVwc3RyZWFtX2xpdmU8L2NvZGU+PC9lbT4gd2lsbCBiZSBUUlVFIGlmIGFuIHVwc3RyZWFtCitlbGVtZW50IGlzIGxpdmUuCis8L3A+Cis8cD4KK0lmIGJvdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpdmU8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51cHN0cmVhbV9saXZlPC9jb2RlPjwvZW0+IGFyZSBUUlVFLCB0aGUgc2luayB3aWxsIHdhbnQgdG8gY29tcGVuc2F0ZQorZm9yIHRoZSBsYXRlbmN5IGludHJvZHVjZWQgYnkgdGhlIHVwc3RyZWFtIGVsZW1lbnRzIGJ5IHNldHRpbmcgdGhlCis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWluX2xhdGVuY3k8L2NvZGU+PC9lbT4gdG8gYSBzdHJpY3RseSBwb3NzaXRpdmUgdmFsdWUuCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gaXMgbW9zdGx5IHVzZWQgYnkgc3ViY2xhc3Nlcy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaW5rPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzaW5rPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXZlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmlmIHRoZSBzaW5rIGlzIGxpdmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXBzdHJlYW1fbGl2ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5pZiBhbiB1cHN0cmVhbSBlbGVtZW50IGlzIGxpdmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWluX2xhdGVuY3k8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG1pbiBsYXRlbmN5IG9mIHRoZSB1cHN0cmVhbSBlbGVtZW50cy4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYXhfbGF0ZW5jeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbWF4IGxhdGVuY3kgb2YgdGhlIHVwc3RyZWFtIGVsZW1lbnRzLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBxdWVyeSBzdWNjZWVkZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1nZXQtbGF0ZW5jeSI+PC9hPjxoMz5nc3RfYmFzZV9zaW5rX2dldF9sYXRlbmN5ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAgICAgICAgZ3N0X2Jhc2Vfc2lua19nZXRfbGF0ZW5jeSAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiAqc2luazwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQgbGF0ZW5jeS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaW5rPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzaW5rPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGNvbmZpZ3VyZWQgbGF0ZW5jeS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjEyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYmFzZS1zaW5rLWRvLXByZXJvbGwiPjwvYT48aDM+Z3N0X2Jhc2Vfc2lua19kb19wcmVyb2xsICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiAgICAgICBnc3RfYmFzZV9zaW5rX2RvX3ByZXJvbGwgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+ICpzaW5rPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiAqb2JqPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSWYgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaW5rPC9jb2RlPjwvZW0+IHNwYXducyBpdHMgb3duIHRocmVhZCBmb3IgcHVsbGluZyBidWZmZXJzIGZyb20gdXBzdHJlYW0gaXQKK3Nob3VsZCBjYWxsIHRoaXMgbWV0aG9kIGFmdGVyIGl0IGhhcyBwdWxsZWQgYSBidWZmZXIuIElmIHRoZSBlbGVtZW50IG5lZWRlZAordG8gcHJlcm9sbCwgdGhpcyBmdW5jdGlvbiB3aWxsIHBlcmZvcm0gdGhlIHByZXJvbGwgYW5kIHdpbGwgdGhlbiBibG9jawordW50aWwgdGhlIGVsZW1lbnQgc3RhdGUgaXMgY2hhbmdlZC4KKzwvcD4KKzxwPgorVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIFBSRVJPTExfTE9DSyBoZWxkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpbms8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNpbms8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iajwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbWluaSBvYmplY3QgdGhhdCBjYXVzZWQgdGhlIHByZXJvbGwuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dTVC1GTE9XLU9LOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRkxPV19PSzwvc3Bhbj48L2E+IGlmIHRoZSBwcmVyb2xsIGNvbXBsZXRlZCBhbmQgcHJvY2Vzc2luZyBjYW4KK2NvbnRpbnVlLiBBbnkgb3RoZXIgcmV0dXJuIHZhbHVlIHNob3VsZCBiZSByZXR1cm5lZCBmcm9tIHRoZSByZW5kZXIgdm1ldGhvZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYmFzZS1zaW5rLXdhaXQtcHJlcm9sbCI+PC9hPjxoMz5nc3RfYmFzZV9zaW5rX3dhaXRfcHJlcm9sbCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4gICAgICAgZ3N0X2Jhc2Vfc2lua193YWl0X3ByZXJvbGwgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiAqc2luazwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0lmIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2lua0NsYXNzLnJlbmRlciI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU2lua0NsYXNzLnJlbmRlcigpPC9jb2RlPjwvYT4gbWV0aG9kIHBlcmZvcm1zIGl0cyBvd24gc3luY2hyb25pc2F0aW9uCithZ2FpbnN0IHRoZSBjbG9jayBpdCBtdXN0IHVuYmxvY2sgd2hlbiBnb2luZyBmcm9tIFBMQVlJTkcgdG8gdGhlIFBBVVNFRCBzdGF0ZQorYW5kIGNhbGwgdGhpcyBtZXRob2QgYmVmb3JlIGNvbnRpbnVpbmcgdG8gcmVuZGVyIHRoZSByZW1haW5pbmcgZGF0YS4KKzwvcD4KKzxwPgorVGhpcyBmdW5jdGlvbiB3aWxsIGJsb2NrIHVudGlsIGEgc3RhdGUgY2hhbmdlIHRvIFBMQVlJTkcgaGFwcGVucyAoaW4gd2hpY2gKK2Nhc2UgdGhpcyBmdW5jdGlvbiByZXR1cm5zIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dTVC1GTE9XLU9LOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRkxPV19PSzwvc3Bhbj48L2E+KSBvciB0aGUgcHJvY2Vzc2luZyBtdXN0IGJlIHN0b3BwZWQgZHVlCit0byBhIHN0YXRlIGNoYW5nZSB0byBSRUFEWSBvciBhIEZMVVNIIGV2ZW50IChpbiB3aGljaCBjYXNlIHRoaXMgZnVuY3Rpb24KK3JldHVybnMgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULUZMT1ctV1JPTkctU1RBVEU6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GTE9XX1dST05HX1NUQVRFPC9zcGFuPjwvYT4pLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aXRoIHRoZSBQUkVST0xMX0xPQ0sgaGVsZCwgbGlrZSBpbiB0aGUKK3JlbmRlciBmdW5jdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaW5rPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzaW5rPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHU1QtRkxPVy1PSzpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0ZMT1dfT0s8L3NwYW4+PC9hPiBpZiB0aGUgcHJlcm9sbCBjb21wbGV0ZWQgYW5kIHByb2Nlc3NpbmcgY2FuCitjb250aW51ZS4gQW55IG90aGVyIHJldHVybiB2YWx1ZSBzaG91bGQgYmUgcmV0dXJuZWQgZnJvbSB0aGUgcmVuZGVyIHZtZXRob2QuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJhc2Utc2luay13YWl0LWNsb2NrIj48L2E+PGgzPmdzdF9iYXNlX3Npbmtfd2FpdF9jbG9jayAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1JldHVybjwvc3Bhbj48L2E+ICAgICAgZ3N0X2Jhc2Vfc2lua193YWl0X2Nsb2NrICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiAqc2luazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRpbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWVEaWZmIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lRGlmZjwvc3Bhbj48L2E+ICpqaXR0ZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitUaGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgdW50aWwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWU8L2NvZGU+PC9lbT4gaXMgcmVhY2hlZC4gSXQgaXMgdXN1YWxseSBjYWxsZWQgYnkKK3N1YmNsYXNzZXMgdGhhdCB1c2UgdGhlaXIgb3duIGludGVybmFsIHN5bmNocm9uaXNhdGlvbi4KKzwvcD4KKzxwPgorSWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWU8L2NvZGU+PC9lbT4gaXMgbm90IHZhbGlkLCBubyBzeWNuaHJvbmlzYXRpb24gaXMgZG9uZSBhbmQgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stQkFEVElNRTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0NMT0NLX0JBRFRJTUU8L3NwYW4+PC9hPiBpcworcmV0dXJuZWQuIExpa2V3aXNlLCBpZiBzeW5jaHJvbmlzYXRpb24gaXMgZGlzYWJsZWQgaW4gdGhlIGVsZW1lbnQgb3IgdGhlcmUKK2lzIG5vIGNsb2NrLCBubyBzeW5jaHJvbmlzYXRpb24gaXMgZG9uZSBhbmQgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stQkFEVElNRTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0NMT0NLX0JBRFRJTUU8L3NwYW4+PC9hPiBpcyByZXR1cm5lZC4KKzwvcD4KKzxwPgorVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgd2l0aCB0aGUgUFJFUk9MTF9MT0NLIGhlbGQsIGxpa2Ugd2hlbgorcmVjZWl2aW5nIGFuIEVPUyBldmVudCBpbiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmtDbGFzcy5ldmVudCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU2lua0NsYXNzLmV2ZW50KCk8L2NvZGU+PC9hPiB2bWV0aG9kIG9yIHdoZW4KK3JlY2VpdmluZyBhIGJ1ZmZlciBpbgordGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rQ2xhc3MucmVuZGVyIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdzdEJhc2VTaW5rQ2xhc3MucmVuZGVyKCk8L2NvZGU+PC9hPiB2bWV0aG9kLgorPC9wPgorPHA+CitUaGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWU8L2NvZGU+PC9lbT4gYXJndW1lbnQgc2hvdWxkIGJlIHRoZSBydW5uaW5nX3RpbWUgb2Ygd2hlbiB0aGlzIG1ldGhvZCBzaG91bGQKK3JldHVybiBhbmQgaXMgbm90IGFkanVzdGVkIHdpdGggYW55IGxhdGVuY3kgb3Igb2Zmc2V0IGNvbmZpZ3VyZWQgaW4gdGhlCitzaW5rLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpbms8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNpbms8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHJ1bm5pbmdfdGltZSB0byBiZSByZWFjaGVkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5qaXR0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGppdHRlciB0byBiZSBmaWxsZWQgd2l0aCB0aW1lIGRpZmYsIG9yIE5VTEwuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1JldHVybjwvc3Bhbj48L2E+PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJhc2Utc2luay13YWl0LWVvcyI+PC9hPjxoMz5nc3RfYmFzZV9zaW5rX3dhaXRfZW9zICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiAgICAgICBnc3RfYmFzZV9zaW5rX3dhaXRfZW9zICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+ICpzaW5rPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZURpZmYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWVEaWZmPC9zcGFuPjwvYT4gKmppdHRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1RoaXMgZnVuY3Rpb24gd2lsbCBibG9jayB1bnRpbCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZTwvY29kZT48L2VtPiBpcyByZWFjaGVkLiBJdCBpcyB1c3VhbGx5IGNhbGxlZCBieQorc3ViY2xhc3NlcyB0aGF0IHVzZSB0aGVpciBvd24gaW50ZXJuYWwgc3luY2hyb25pc2F0aW9uIGJ1dCB3YW50IHRvIGxldCB0aGUKK0VPUyBiZSBoYW5kbGVkIGJ5IHRoZSBiYXNlIGNsYXNzLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aXRoIHRoZSBQUkVST0xMX0xPQ0sgaGVsZCwgbGlrZSB3aGVuCityZWNlaXZpbmcgYW4gRU9TIGV2ZW50IGluIHRoZSA6OmV2ZW50IHZtZXRob2QuCis8L3A+Cis8cD4KK1RoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZTwvY29kZT48L2VtPiBhcmd1bWVudCBzaG91bGQgYmUgdGhlIHJ1bm5pbmdfdGltZSBvZiB3aGVuIHRoZSBFT1Mgc2hvdWxkIGhhcHBlbgorYW5kIHdpbGwgYmUgYWRqdXN0ZWQgd2l0aCBhbnkgbGF0ZW5jeSBhbmQgb2Zmc2V0IGNvbmZpZ3VyZWQgaW4gdGhlIHNpbmsuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2luazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2luazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcnVubmluZ190aW1lIHRvIGJlIHJlYWNoZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmppdHRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgaml0dGVyIHRvIGJlIGZpbGxlZCB3aXRoIHRpbWUgZGlmZiwgb3IgTlVMTC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iYXNlLXNpbmstc2V0LXN5bmMiPjwvYT48aDM+Z3N0X2Jhc2Vfc2lua19zZXRfc3luYyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYmFzZV9zaW5rX3NldF9zeW5jICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+ICpzaW5rPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gc3luYzwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NvbmZpZ3VyZXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpbms8L2NvZGU+PC9lbT4gdG8gc3luY2hyb25pemUgb24gdGhlIGNsb2NrIG9yIG5vdC4gV2hlbgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN5bmM8L2NvZGU+PC9lbT4gaXMgRkFMU0UsIGluY29taW5nIHNhbXBsZXMgd2lsbCBiZSBwbGF5ZWQgYXMgZmFzdCBhcworcG9zc2libGUuIElmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zeW5jPC9jb2RlPjwvZW0+IGlzIFRSVUUsIHRoZSB0aW1lc3RhbXBzIG9mIHRoZSBpbmNvbW1pbmcKK2J1ZmZlcnMgd2lsbCBiZSB1c2VkIHRvIHNjaGVkdWxlIHRoZSBleGFjdCByZW5kZXIgdGltZSBvZiBpdHMKK2NvbnRlbnRzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpbms8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNpbms8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN5bmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5ldyBzeW5jIHZhbHVlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1nZXQtc3luYyI+PC9hPjxoMz5nc3RfYmFzZV9zaW5rX2dldF9zeW5jICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9iYXNlX3NpbmtfZ2V0X3N5bmMgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDaGVja3MgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpbms8L2NvZGU+PC9lbT4gaXMgY3VycmVudGx5IGNvbmZpZ3VyZWQgdG8gc3luY2hyb25pemUgYWdhaW5zdCB0aGUKK2Nsb2NrLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpbms8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNpbms8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBzaW5rIGlzIGNvbmZpZ3VyZWQgdG8gc3luY2hyb25pemUgYWdhaW5zdCB0aGUgY2xvY2suPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC40PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYmFzZS1zaW5rLXNldC1tYXgtbGF0ZW5lc3MiPjwvYT48aDM+Z3N0X2Jhc2Vfc2lua19zZXRfbWF4X2xhdGVuZXNzICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X21heF9sYXRlbmVzcyAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IG1heF9sYXRlbmVzczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgdGhlIG5ldyBtYXggbGF0ZW5lc3MgdmFsdWUgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1heF9sYXRlbmVzczwvY29kZT48L2VtPi4gVGhpcyB2YWx1ZSBpcwordXNlZCB0byBkZWNpZGUgaWYgYSBidWZmZXIgc2hvdWxkIGJlIGRyb3BwZWQgb3Igbm90IGJhc2VkIG9uIHRoZQorYnVmZmVyIHRpbWVzdGFtcCBhbmQgdGhlIGN1cnJlbnQgY2xvY2sgdGltZS4gQSB2YWx1ZSBvZiAtMSBtZWFucworYW4gdW5saW1pdGVkIHRpbWUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2luazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2luazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWF4X2xhdGVuZXNzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXcgbWF4IGxhdGVuZXNzIHZhbHVlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1nZXQtbWF4LWxhdGVuZXNzIj48L2E+PGgzPmdzdF9iYXNlX3NpbmtfZ2V0X21heF9sYXRlbmVzcyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgZ3N0X2Jhc2Vfc2lua19nZXRfbWF4X2xhdGVuZXNzICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiAqc2luazwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIG1heCBsYXRlbmVzcyB2YWx1ZS4gU2VlIGdzdF9iYXNlX3Npbmtfc2V0X21heF9sYXRlbmVzcyBmb3IKK21vcmUgZGV0YWlscy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaW5rPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzaW5rPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIG1heGltdW0gdGltZSBpbiBuYW5vc2Vjb25kcyB0aGF0IGEgYnVmZmVyIGNhbiBiZSBsYXRlCitiZWZvcmUgaXQgaXMgZHJvcHBlZCBhbmQgbm90IHJlbmRlcmVkLiBBIHZhbHVlIG9mIC0xIG1lYW5zIGFuCit1bmxpbWl0ZWQgdGltZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iYXNlLXNpbmstc2V0LXFvcy1lbmFibGVkIj48L2E+PGgzPmdzdF9iYXNlX3Npbmtfc2V0X3Fvc19lbmFibGVkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X3Fvc19lbmFibGVkICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBlbmFibGVkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ29uZmlndXJlcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2luazwvY29kZT48L2VtPiB0byBzZW5kIFF1YWxpdHktb2YtU2VydmljZSBldmVudHMgdXBzdHJlYW0uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2luazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2luazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW5hYmxlZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3IHFvcyB2YWx1ZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iYXNlLXNpbmstaXMtcW9zLWVuYWJsZWQiPjwvYT48aDM+Z3N0X2Jhc2Vfc2lua19pc19xb3NfZW5hYmxlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYmFzZV9zaW5rX2lzX3Fvc19lbmFibGVkICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+ICpzaW5rPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2tzIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaW5rPC9jb2RlPjwvZW0+IGlzIGN1cnJlbnRseSBjb25maWd1cmVkIHRvIHNlbmQgUXVhbGl0eS1vZi1TZXJ2aWNlIGV2ZW50cwordXBzdHJlYW0uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2luazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2luazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHNpbmsgaXMgY29uZmlndXJlZCB0byBwZXJmb3JtIFF1YWxpdHktb2YtU2VydmljZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iYXNlLXNpbmstc2V0LWFzeW5jLWVuYWJsZWQiPjwvYT48aDM+Z3N0X2Jhc2Vfc2lua19zZXRfYXN5bmNfZW5hYmxlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYmFzZV9zaW5rX3NldF9hc3luY19lbmFibGVkICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+ICpzaW5rPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gZW5hYmxlZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NvbmZpZ3VyZXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpbms8L2NvZGU+PC9lbT4gdG8gcGVyZm9ybSBhbGwgc3RhdGUgY2hhbmdlcyBhc3luY2hyb251c2x5LiBXaGVuIGFzeW5jIGlzCitkaXNhYmxlZCwgdGhlIHNpbmsgd2lsbCBpbW1lZGlhdGVseSBnbyB0byBQQVVTRUQgaW5zdGVhZCBvZiB3YWl0aW5nIGZvciBhCitwcmVyb2xsIGJ1ZmZlci4gVGhpcyBmZWF0dXJlIGlzIHVzZWZ1bCBpZiB0aGUgc2luayBkb2VzIG5vdCBzeW5jaHJvbml6ZQorYWdhaW5zdCB0aGUgY2xvY2sgb3Igd2hlbiBpdCBpcyBkZWFsaW5nIHdpdGggc3BhcnNlIHN0cmVhbXMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2luazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2luazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW5hYmxlZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3IGFzeW5jIHZhbHVlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iYXNlLXNpbmstaXMtYXN5bmMtZW5hYmxlZCI+PC9hPjxoMz5nc3RfYmFzZV9zaW5rX2lzX2FzeW5jX2VuYWJsZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2Jhc2Vfc2lua19pc19hc3luY19lbmFibGVkICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiAqc2luazwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NoZWNrcyBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2luazwvY29kZT48L2VtPiBpcyBjdXJyZW50bHkgY29uZmlndXJlZCB0byBwZXJmb3JtIGFzeW5jaHJvbm91cyBzdGF0ZQorY2hhbmdlcyB0byBQQVVTRUQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2luazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2luazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHNpbmsgaXMgY29uZmlndXJlZCB0byBwZXJmb3JtIGFzeW5jaHJvbm91cyBzdGF0ZQorY2hhbmdlcy48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjE1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYmFzZS1zaW5rLXNldC10cy1vZmZzZXQiPjwvYT48aDM+Z3N0X2Jhc2Vfc2lua19zZXRfdHNfb2Zmc2V0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X3RzX29mZnNldCAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWVEaWZmIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lRGlmZjwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0FkanVzdCB0aGUgc3luY2hyb25pc2F0aW9uIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaW5rPC9jb2RlPjwvZW0+IHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPi4gQSBuZWdhdGl2ZSB2YWx1ZSB3aWxsCityZW5kZXIgYnVmZmVycyBlYXJsaWVyIHRoYW4gdGhlaXIgdGltZXN0YW1wLiBBIHBvc2l0aXZlIHZhbHVlIHdpbGwgZGVsYXkKK3JlbmRlcmluZy4gVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBmaXggcGxheWJhY2sgb2YgYmFkbHkgdGltZXN0YW1wZWQKK2J1ZmZlcnMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2luazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2luazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXcgb2Zmc2V0PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1nZXQtdHMtb2Zmc2V0Ij48L2E+PGgzPmdzdF9iYXNlX3NpbmtfZ2V0X3RzX29mZnNldCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWVEaWZmIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZURpZmY8L3NwYW4+PC9hPiAgICBnc3RfYmFzZV9zaW5rX2dldF90c19vZmZzZXQgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+ICpzaW5rPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0IHRoZSBzeW5jaHJvbmlzYXRpb24gb2Zmc2V0IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaW5rPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpbms8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNpbms8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgc3luY2hyb25pc2F0aW9uIG9mZnNldC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjE1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYmFzZS1zaW5rLXNldC1yZW5kZXItZGVsYXkiPjwvYT48aDM+Z3N0X2Jhc2Vfc2lua19zZXRfcmVuZGVyX2RlbGF5ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X3JlbmRlcl9kZWxheSAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiBkZWxheTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldCB0aGUgcmVuZGVyIGRlbGF5IGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaW5rPC9jb2RlPjwvZW0+IHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZWxheTwvY29kZT48L2VtPi4gVGhlIHJlbmRlciBkZWxheSBpcyB0aGUgdGltZQorYmV0d2VlbiBhY3R1YWwgcmVuZGVyaW5nIG9mIGEgYnVmZmVyIGFuZCBpdHMgc3luY2hyb25pc2F0aW9uIHRpbWUuIFNvbWUKK2RldmljZXMgbWlnaHQgZGVsYXkgbWVkaWEgcmVuZGVyaW5nIHdoaWNoIGNhbiBiZSBjb21wZW5zYXRlZCBmb3Igd2l0aCB0aGlzCitmdW5jdGlvbi4KKzwvcD4KKzxwPgorQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB0aGlzIHNpbmsgd2lsbCByZXBvcnQgYWRkaXRpb25hbCBsYXRlbmN5IGFuZAorb3RoZXIgc2lua3Mgd2lsbCBhZGp1c3QgdGhlaXIgbGF0ZW5jeSB0byBkZWxheSB0aGUgcmVuZGVyaW5nIG9mIHRoZWlyIG1lZGlhLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkIGJ5IHN1YmNsYXNzZXMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2luazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlbGF5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXcgZGVsYXk8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIxPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYmFzZS1zaW5rLWdldC1yZW5kZXItZGVsYXkiPjwvYT48aDM+Z3N0X2Jhc2Vfc2lua19nZXRfcmVuZGVyX2RlbGF5ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAgICAgICAgZ3N0X2Jhc2Vfc2lua19nZXRfcmVuZGVyX2RlbGF5ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiAqc2luazwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCB0aGUgcmVuZGVyIGRlbGF5IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaW5rPC9jb2RlPjwvZW0+LiBzZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1zZXQtcmVuZGVyLWRlbGF5IiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19zZXRfcmVuZGVyX2RlbGF5ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iYXNlX3Npbmtfc2V0X3JlbmRlcl9kZWxheSgpPC9jb2RlPjwvYT4gZm9yIG1vcmUKK2luZm9ybWF0aW9uIGFib3V0IHRoZSByZW5kZXIgZGVsYXkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2luazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcmVuZGVyIGRlbGF5IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaW5rPC9jb2RlPjwvZW0+LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iYXNlLXNpbmstc2V0LWxhc3QtYnVmZmVyLWVuYWJsZWQiPjwvYT48aDM+Z3N0X2Jhc2Vfc2lua19zZXRfbGFzdF9idWZmZXJfZW5hYmxlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYmFzZV9zaW5rX3NldF9sYXN0X2J1ZmZlcl9lbmFibGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBlbmFibGVkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ29uZmlndXJlcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2luazwvY29kZT48L2VtPiB0byBzdG9yZSB0aGUgbGFzdCByZWNlaXZlZCBidWZmZXIgaW4gdGhlIGxhc3QtYnVmZmVyCitwcm9wZXJ0eS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaW5rPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzaW5rPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbmFibGVkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXcgZW5hYmxlLWxhc3QtYnVmZmVyIHZhbHVlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iYXNlLXNpbmstaXMtbGFzdC1idWZmZXItZW5hYmxlZCI+PC9hPjxoMz5nc3RfYmFzZV9zaW5rX2lzX2xhc3RfYnVmZmVyX2VuYWJsZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2Jhc2Vfc2lua19pc19sYXN0X2J1ZmZlcl9lbmFibGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDaGVja3MgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpbms8L2NvZGU+PC9lbT4gaXMgY3VycmVudGx5IGNvbmZpZ3VyZWQgdG8gc3RvcmUgdGhlIGxhc3QgcmVjZWl2ZWQgYnVmZmVyIGluCit0aGUgbGFzdC1idWZmZXIgcHJvcGVydHkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2luazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2luazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgdGhlIHNpbmsgaXMgY29uZmlndXJlZCB0byBzdG9yZSB0aGUgbGFzdCByZWNlaXZlZCBidWZmZXIuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1nZXQtbGFzdC1idWZmZXIiPjwvYT48aDM+Z3N0X2Jhc2Vfc2lua19nZXRfbGFzdF9idWZmZXIgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKiAgICAgICAgIGdzdF9iYXNlX3NpbmtfZ2V0X2xhc3RfYnVmZmVyICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgdGhlIGxhc3QgYnVmZmVyIHRoYXQgYXJyaXZlZCBpbiB0aGUgc2luayBhbmQgd2FzIHVzZWQgZm9yIHByZXJvbGwgb3IgZm9yCityZW5kZXJpbmcuIFRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUgdGh1bWJuYWlscy4KKzwvcD4KKzxwPgorVGhlIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBvbiB0aGUgYnVmZmVyIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgdHlwZSBvZiB0aGUgYnVmZmVyLgorPC9wPgorPHA+CitGcmVlLWZ1bmN0aW9uOiBnc3RfYnVmZmVyX3VucmVmCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2luazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2luazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LiA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci11bnJlZiI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3VucmVmKCk8L2NvZGU+PC9hPiBhZnRlciB1c2FnZS4KK1RoaXMgZnVuY3Rpb24gcmV0dXJucyBOVUxMIHdoZW4gbm8gYnVmZmVyIGhhcyBhcnJpdmVkIGluIHRoZSBzaW5rIHlldAorb3Igd2hlbiB0aGUgc2luayBpcyBub3QgaW4gUEFVU0VEIG9yIFBMQVlJTkcuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjE1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYmFzZS1zaW5rLXNldC1ibG9ja3NpemUiPjwvYT48aDM+Z3N0X2Jhc2Vfc2lua19zZXRfYmxvY2tzaXplICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X2Jsb2Nrc2l6ZSAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBibG9ja3NpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXQgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHRoZSBzaW5rIHdpbGwgcHVsbCB3aGVuIGl0IGlzIG9wZXJhdGluZyBpbiBwdWxsCittb2RlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpbms8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ibG9ja3NpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGJsb2Nrc2l6ZSBpbiBieXRlczwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iYXNlLXNpbmstZ2V0LWJsb2Nrc2l6ZSI+PC9hPjxoMz5nc3RfYmFzZV9zaW5rX2dldF9ibG9ja3NpemUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgZ3N0X2Jhc2Vfc2lua19nZXRfYmxvY2tzaXplICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiAqc2luazwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgdGhlIHNpbmsgd2lsbCBwdWxsIHdoZW4gaXQgaXMgb3BlcmF0aW5nIGluIHB1bGwKK21vZGUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2luazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbnVtYmVyIG9mIGJ5dGVzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaW5rPC9jb2RlPjwvZW0+IHdpbGwgcHVsbCBpbiBwdWxsIG1vZGUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1nZXQtdGhyb3R0bGUtdGltZSI+PC9hPjxoMz5nc3RfYmFzZV9zaW5rX2dldF90aHJvdHRsZV90aW1lICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgZ3N0X2Jhc2Vfc2lua19nZXRfdGhyb3R0bGVfdGltZSAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiAqc2luazwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCB0aGUgdGltZSB0aGF0IHdpbGwgYmUgaW5zZXJ0ZWQgYmV0d2VlbiBmcmFtZXMgdG8gY29udHJvbCB0aGUgCittYXhpbXVtIGJ1ZmZlcnMgcGVyIHNlY29uZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaW5rPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBudW1iZXIgb2YgbmFub3NlY29uZHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpbms8L2NvZGU+PC9lbT4gd2lsbCBwdXQgYmV0d2VlbiBmcmFtZXMuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1zZXQtdGhyb3R0bGUtdGltZSI+PC9hPjxoMz5nc3RfYmFzZV9zaW5rX3NldF90aHJvdHRsZV90aW1lICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X3Rocm90dGxlX3RpbWUgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gdGhyb3R0bGU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXQgdGhlIHRpbWUgdGhhdCB3aWxsIGJlIGluc2VydGVkIGJldHdlZW4gcmVuZGVyZWQgYnVmZmVycy4gVGhpcworY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgbWF4aW11bSBidWZmZXJzIHBlciBzZWNvbmQgdGhhdCB0aGUgc2luaword2lsbCByZW5kZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2luazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRocm90dGxlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB0aHJvdHRsZSB0aW1lIGluIG5hbm9zZWNvbmRzPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUJBU0UtU0lOSy1QQUQ6Q0FQUyI+PC9hPjxoMz5HU1RfQkFTRV9TSU5LX1BBRCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CQVNFX1NJTktfUEFEKG9iaikgICAgICAgICAgKEdTVF9CQVNFX1NJTktfQ0FTVCAob2JqKS0mZ3Q7c2lua3BhZCkKKzwvcHJlPgorPHA+CitHaXZlcyB0aGUgcG9pbnRlciB0byB0aGUgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBvYmplY3Qgb2YgdGhlIGVsZW1lbnQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iajwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5iYXNlIHNpbmsgaW5zdGFuY2U8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUJBU0UtU0lOSy1HRVQtUFJFUk9MTC1DT05EOkNBUFMiPjwvYT48aDM+R1NUX0JBU0VfU0lOS19HRVRfUFJFUk9MTF9DT05EKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0JBU0VfU0lOS19HRVRfUFJFUk9MTF9DT05EKHBhZCkgICAoR1NUX0JBU0VfU0lOS19DQVNUKHBhZCktJmd0O3ByZXJvbGxfY29uZCkKKzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQkFTRS1TSU5LLUdFVC1QUkVST0xMLUxPQ0s6Q0FQUyI+PC9hPjxoMz5HU1RfQkFTRV9TSU5LX0dFVF9QUkVST0xMX0xPQ0soKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQkFTRV9TSU5LX0dFVF9QUkVST0xMX0xPQ0socGFkKSAgIChHU1RfQkFTRV9TSU5LX0NBU1QocGFkKS0mZ3Q7cHJlcm9sbF9sb2NrKQorPC9wcmU+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1CQVNFLVNJTkstUFJFUk9MTC1CUk9BRENBU1Q6Q0FQUyI+PC9hPjxoMz5HU1RfQkFTRV9TSU5LX1BSRVJPTExfQlJPQURDQVNUKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0JBU0VfU0lOS19QUkVST0xMX0JST0FEQ0FTVChwYWQpICBnX2NvbmRfYnJvYWRjYXN0IChHU1RfQkFTRV9TSU5LX0dFVF9QUkVST0xMX0NPTkQgKHBhZCkpOworPC9wcmU+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1CQVNFLVNJTkstUFJFUk9MTC1MT0NLOkNBUFMiPjwvYT48aDM+R1NUX0JBU0VfU0lOS19QUkVST0xMX0xPQ0soKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQkFTRV9TSU5LX1BSRVJPTExfTE9DSyhwYWQpICAgICAgIChnX211dGV4X2xvY2soR1NUX0JBU0VfU0lOS19HRVRfUFJFUk9MTF9MT0NLKHBhZCkpKQorPC9wcmU+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1CQVNFLVNJTkstUFJFUk9MTC1TSUdOQUw6Q0FQUyI+PC9hPjxoMz5HU1RfQkFTRV9TSU5LX1BSRVJPTExfU0lHTkFMKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0JBU0VfU0lOS19QUkVST0xMX1NJR05BTChwYWQpICAgICBnX2NvbmRfc2lnbmFsIChHU1RfQkFTRV9TSU5LX0dFVF9QUkVST0xMX0NPTkQgKHBhZCkpOworPC9wcmU+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1CQVNFLVNJTkstUFJFUk9MTC1USU1FRC1XQUlUOkNBUFMiPjwvYT48aDM+R1NUX0JBU0VfU0lOS19QUkVST0xMX1RJTUVEX1dBSVQoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfQkFTRV9TSU5LX1BSRVJPTExfVElNRURfV0FJVChwYWQsIHRpbWV2YWwpPC9wcmU+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1CQVNFLVNJTkstUFJFUk9MTC1UUllMT0NLOkNBUFMiPjwvYT48aDM+R1NUX0JBU0VfU0lOS19QUkVST0xMX1RSWUxPQ0soKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQkFTRV9TSU5LX1BSRVJPTExfVFJZTE9DSyhwYWQpICAgIChnX211dGV4X3RyeWxvY2soR1NUX0JBU0VfU0lOS19HRVRfUFJFUk9MTF9MT0NLKHBhZCkpKQorPC9wcmU+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1CQVNFLVNJTkstUFJFUk9MTC1VTkxPQ0s6Q0FQUyI+PC9hPjxoMz5HU1RfQkFTRV9TSU5LX1BSRVJPTExfVU5MT0NLKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0JBU0VfU0lOS19QUkVST0xMX1VOTE9DSyhwYWQpICAgICAoZ19tdXRleF91bmxvY2soR1NUX0JBU0VfU0lOS19HRVRfUFJFUk9MTF9MT0NLKHBhZCkpKQorPC9wcmU+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1CQVNFLVNJTkstUFJFUk9MTC1XQUlUOkNBUFMiPjwvYT48aDM+R1NUX0JBU0VfU0lOS19QUkVST0xMX1dBSVQoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfQkFTRV9TSU5LX1BSRVJPTExfV0FJVChwYWQpPC9wcmU+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0QmFzZVNpbmsucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEJhc2VTaW5rLS1hc3luYyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJhc3luYyI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJhc3luYyIgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD4KK0lmIHNldCB0byA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPlRSVUU8L3NwYW4+PC9hPiwgdGhlIGJhc2VzaW5rIHdpbGwgcGVyZm9ybSBhc3luY2hyb25vdXMgc3RhdGUgY2hhbmdlcy4KK1doZW4gc2V0IHRvIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkZBTFNFPC9zcGFuPjwvYT4sIHRoZSBzaW5rIHdpbGwgbm90IHNpZ25hbCB0aGUgcGFyZW50IHdoZW4gaXQgcHJlcm9sbHMuCitVc2UgdGhpcyBvcHRpb24gd2hlbiBkZWFsaW5nIHdpdGggc3BhcnNlIHN0cmVhbXMgb3Igd2hlbiBzeW5jaHJvbmlzYXRpb24gaXMKK25vdCByZXF1aXJlZC4KKzwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEJhc2VTaW5rLS1ibG9ja3NpemUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4iYmxvY2tzaXplIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgImJsb2Nrc2l6ZSIgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPgorVGhlIGFtb3VudCBvZiBieXRlcyB0byBwdWxsIHdoZW4gb3BlcmF0aW5nIGluIHB1bGwgbW9kZS4KKzwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IDQwOTY8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEJhc2VTaW5rLS1lbmFibGUtbGFzdC1idWZmZXIiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4iZW5hYmxlLWxhc3QtYnVmZmVyIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgImVuYWJsZS1sYXN0LWJ1ZmZlciIgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPgorRW5hYmxlIHRoZSBsYXN0LWJ1ZmZlciBwcm9wZXJ0eS4gSWYgRkFMU0UsIGJhc2VzaW5rIGRvZXNuJ3Qga2VlcCBhCityZWZlcmVuY2UgdG8gdGhlIGxhc3QgYnVmZmVyIGFycml2ZWQgYW5kIHRoZSBsYXN0LWJ1ZmZlciBwcm9wZXJ0eSBpcyBhbHdheXMKK3NldCB0byBOVUxMLiBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91IG5lZWQgYnVmZmVycyB0byBiZSByZWxlYXNlZCBhcyBzb29uCithcyBwb3NzaWJsZSwgZWcuIGlmIHlvdSdyZSB1c2luZyBhIGJ1ZmZlciBwb29sLgorPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0QmFzZVNpbmstLWxhc3QtYnVmZmVyIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Imxhc3QtYnVmZmVyIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgImxhc3QtYnVmZmVyIiAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+KiAgICAgICAgICAgIDogUmVhZDwvcHJlPgorPHA+CitUaGUgbGFzdCBidWZmZXIgdGhhdCBhcnJpdmVkIGluIHRoZSBzaW5rIGFuZCB3YXMgdXNlZCBmb3IgcHJlcm9sbCBvciBmb3IKK3JlbmRlcmluZy4gVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSB0aHVtYm5haWxzLiBUaGlzIHByb3BlcnR5CitjYW4gYmUgTlVMTCB3aGVuIHRoZSBzaW5rIGhhcyBub3QgeWV0IHJlY2VpdmVkIGEgYnVmZXIuCis8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEJhc2VTaW5rLS1tYXgtbGF0ZW5lc3MiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4ibWF4LWxhdGVuZXNzIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgIm1heC1sYXRlbmVzcyIgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5NYXhpbXVtIG51bWJlciBvZiBuYW5vc2Vjb25kcyB0aGF0IGEgYnVmZmVyIGNhbiBiZSBsYXRlIGJlZm9yZSBpdCBpcyBkcm9wcGVkICgtMSB1bmxpbWl0ZWQpLjwvcD4KKzxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAtMTwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IC0xPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RCYXNlU2luay0tcW9zIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+InFvcyI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJxb3MiICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5HZW5lcmF0ZSBRdWFsaXR5LW9mLVNlcnZpY2UgZXZlbnRzIHVwc3RyZWFtLjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RCYXNlU2luay0tcmVuZGVyLWRlbGF5Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+InJlbmRlci1kZWxheSI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJyZW5kZXItZGVsYXkiICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPgorVGhlIGFkZGl0aW9uYWwgZGVsYXkgYmV0d2VlbiBzeW5jaHJvbmlzYXRpb24gYW5kIGFjdHVhbCByZW5kZXJpbmcgb2YgdGhlCittZWRpYS4gVGhpcyBwcm9wZXJ0eSB3aWxsIGFkZCBhZGRpdGlvbmFsIGxhdGVuY3kgdG8gdGhlIGRldmljZSBpbiBvcmRlciB0bworbWFrZSBvdGhlciBzaW5rcyBjb21wZW5zYXRlIGZvciB0aGUgZGVsYXkuCis8L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RCYXNlU2luay0tc3luYyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJzeW5jIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgInN5bmMiICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPlN5bmMgb24gdGhlIGNsb2NrLjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEJhc2VTaW5rLS10aHJvdHRsZS10aW1lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+InRocm90dGxlLXRpbWUiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAidGhyb3R0bGUtdGltZSIgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD4KK1RoZSB0aW1lIHRvIGluc2VydCBiZXR3ZWVuIGJ1ZmZlcnMuIFRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gY29udHJvbAordGhlIG1heGltdW0gYW1vdW50IG9mIGJ1ZmZlcnMgcGVyIHNlY29uZCB0byByZW5kZXIuIFNldHRpbmcgdGhpcyBwcm9wZXJ0eQordG8gYSB2YWx1ZSBiaWdnZXIgdGhhbiAwIHdpbGwgbWFrZSB0aGUgc2luayBjcmVhdGUgVEhST1RUTEUgUW9TIGV2ZW50cy4KKzwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzM8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEJhc2VTaW5rLS10cy1vZmZzZXQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4idHMtb2Zmc2V0IjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgInRzLW9mZnNldCIgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD4KK0NvbnRyb2xzIHRoZSBmaW5hbCBzeW5jaHJvbmlzYXRpb24sIGEgbmVnYXRpdmUgdmFsdWUgd2lsbCByZW5kZXIgdGhlIGJ1ZmZlcgorZWFybGllciB3aGlsZSBhIHBvc2l0aXZlIHZhbHVlIGRlbGF5cyBwbGF5YmFjay4gVGhpcyBwcm9wZXJ0eSBjYW4gYmUKK3VzZWQgdG8gZml4IHN5bmNocm9uaXNhdGlvbiBpbiBiYWQgZmlsZXMuCis8L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjE1PC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdEJhc2VTaW5rLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVRyYW5zZm9ybTwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9Hc3RCYXNlU3JjLmh0bWwgYi9kb2NzL2xpYnMvaHRtbC9Hc3RCYXNlU3JjLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JlMGU1OAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbGlicy9odG1sL0dzdEJhc2VTcmMuaHRtbApAQCAtMCwwICsxLDg3NyBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdzdEJhc2VTcmM8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJnc3RyZWFtZXItYmFzZS5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEJhc2UgYW5kIFV0aWxsaXR5IENsYXNzZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItYmFzZS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNHc3RCYXNlU3JjLnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0QmFzZVNyYy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0QmFzZVNyYy5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEJhc2VTcmMucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9IkdzdEJhc2VTcmMiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RCYXNlU3JjLnRvcF9vZl9wYWdlIj48L2E+R3N0QmFzZVNyYzwvc3Bhbj48L2gyPgorPHA+R3N0QmFzZVNyYyDigJQgQmFzZSBjbGFzcyBmb3IgZ2V0cmFuZ2UgYmFzZWQgc291cmNlIGVsZW1lbnRzPC9wPgorPC90ZD4KKzx0ZCB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgorPC90cj48L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGEgbmFtZT0iR3N0QmFzZVNyYy5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisjaW5jbHVkZSAmbHQ7Z3N0L2Jhc2UvZ3N0YmFzZXNyYy5oJmd0OworCitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyYy1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0QmFzZVNyYyI+R3N0QmFzZVNyYzwvYT47CitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyY0NsYXNzIiB0aXRsZT0ic3RydWN0IEdzdEJhc2VTcmNDbGFzcyI+R3N0QmFzZVNyY0NsYXNzPC9hPjsKK2VudW0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEJhc2VTcmNGbGFncyI+R3N0QmFzZVNyY0ZsYWdzPC9hPjsKKzxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+ICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLXdhaXQtcGxheWluZyIgdGl0bGU9ImdzdF9iYXNlX3NyY193YWl0X3BsYXlpbmcgKCkiPmdzdF9iYXNlX3NyY193YWl0X3BsYXlpbmc8L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNyYzwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1pcy1saXZlIiB0aXRsZT0iZ3N0X2Jhc2Vfc3JjX2lzX2xpdmUgKCkiPmdzdF9iYXNlX3NyY19pc19saXZlPC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNyYzwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1zZXQtbGl2ZSIgdGl0bGU9ImdzdF9iYXNlX3NyY19zZXRfbGl2ZSAoKSI+Z3N0X2Jhc2Vfc3JjX3NldF9saXZlPC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU3JjPC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGxpdmU8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1zZXQtZm9ybWF0IiB0aXRsZT0iZ3N0X2Jhc2Vfc3JjX3NldF9mb3JtYXQgKCkiPmdzdF9iYXNlX3NyY19zZXRfZm9ybWF0PC9hPiAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNyYzwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLXF1ZXJ5LWxhdGVuY3kiIHRpdGxlPSJnc3RfYmFzZV9zcmNfcXVlcnlfbGF0ZW5jeSAoKSI+Z3N0X2Jhc2Vfc3JjX3F1ZXJ5X2xhdGVuY3k8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU3JjPC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICpsaXZlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gKm1pbl9sYXRlbmN5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gKm1heF9sYXRlbmN5PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtZ2V0LWJsb2Nrc2l6ZSIgdGl0bGU9ImdzdF9iYXNlX3NyY19nZXRfYmxvY2tzaXplICgpIj5nc3RfYmFzZV9zcmNfZ2V0X2Jsb2Nrc2l6ZTwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtc2V0LWJsb2Nrc2l6ZSIgdGl0bGU9ImdzdF9iYXNlX3NyY19zZXRfYmxvY2tzaXplICgpIj5nc3RfYmFzZV9zcmNfc2V0X2Jsb2Nrc2l6ZTwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gYmxvY2tzaXplPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtZ2V0LWRvLXRpbWVzdGFtcCIgdGl0bGU9ImdzdF9iYXNlX3NyY19nZXRfZG9fdGltZXN0YW1wICgpIj5nc3RfYmFzZV9zcmNfZ2V0X2RvX3RpbWVzdGFtcDwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtc2V0LWRvLXRpbWVzdGFtcCIgdGl0bGU9ImdzdF9iYXNlX3NyY19zZXRfZG9fdGltZXN0YW1wICgpIj5nc3RfYmFzZV9zcmNfc2V0X2RvX3RpbWVzdGFtcDwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gdGltZXN0YW1wPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtc2V0LWR5bmFtaWMtc2l6ZSIgdGl0bGU9ImdzdF9iYXNlX3NyY19zZXRfZHluYW1pY19zaXplICgpIj5nc3RfYmFzZV9zcmNfc2V0X2R5bmFtaWNfc2l6ZTwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gZHluYW1pYzwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLW5ldy1zZWFtbGVzcy1zZWdtZW50IiB0aXRsZT0iZ3N0X2Jhc2Vfc3JjX25ld19zZWFtbGVzc19zZWdtZW50ICgpIj5nc3RfYmFzZV9zcmNfbmV3X3NlYW1sZXNzX3NlZ21lbnQ8L2E+ICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBzdGFydDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc3RvcDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gcG9zaXRpb248L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1zZXQtY2FwcyIgdGl0bGU9ImdzdF9iYXNlX3NyY19zZXRfY2FwcyAoKSI+Z3N0X2Jhc2Vfc3JjX3NldF9jYXBzPC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU3JjPC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI0dTVC1CQVNFLVNSQy1QQUQ6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1NSQ19QQUQoKSI+R1NUX0JBU0VfU1JDX1BBRDwvYT4gICAgICAgICAgICAgICAgICAgIChvYmopCis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0QmFzZVNyYy5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+R09iamVjdDwvYT4KKyAgICstLS0tPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KKyAgICAgICAgICstLS0tPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwiPkdzdE9iamVjdDwvYT4KKyAgICAgICAgICAgICAgICstLS0tPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sIj5Hc3RFbGVtZW50PC9hPgorICAgICAgICAgICAgICAgICAgICAgKy0tLS1Hc3RCYXNlU3JjCisgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdXNoU3JjLmh0bWwiIHRpdGxlPSJHc3RQdXNoU3JjIj5Hc3RQdXNoU3JjPC9hPgorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdEJhc2VTcmMucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyYy0tYmxvY2tzaXplIiB0aXRsZT0nVGhlICJibG9ja3NpemUiIHByb3BlcnR5Jz5ibG9ja3NpemU8L2E+IiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjLS1kby10aW1lc3RhbXAiIHRpdGxlPSdUaGUgImRvLXRpbWVzdGFtcCIgcHJvcGVydHknPmRvLXRpbWVzdGFtcDwvYT4iICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmMtLW51bS1idWZmZXJzIiB0aXRsZT0nVGhlICJudW0tYnVmZmVycyIgcHJvcGVydHknPm51bS1idWZmZXJzPC9hPiIgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyYy0tdHlwZWZpbmQiIHRpdGxlPSdUaGUgInR5cGVmaW5kIiBwcm9wZXJ0eSc+dHlwZWZpbmQ8L2E+IiAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RCYXNlU3JjLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPgorVGhpcyBpcyBhIGdlbmVyaWNlIGJhc2UgY2xhc3MgZm9yIHNvdXJjZSBlbGVtZW50cy4gVGhlIGZvbGxvd2luZwordHlwZXMgb2Ygc291cmNlcyBhcmUgc3VwcG9ydGVkOgorPC9wPgorPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5yYW5kb20gYWNjZXNzIHNvdXJjZXMgbGlrZSBmaWxlczwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+c2Vla2FibGUgc291cmNlczwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+bGl2ZSBzb3VyY2VzPC9wPjwvbGk+Cis8L3VsPjwvZGl2PgorPHA+Cis8L3A+Cis8cD4KK1RoZSBzb3VyY2UgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gb3BlcmF0ZSBpbiBhbnkgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IHdpdGggdGhlCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1zZXQtZm9ybWF0IiB0aXRsZT0iZ3N0X2Jhc2Vfc3JjX3NldF9mb3JtYXQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Jhc2Vfc3JjX3NldF9mb3JtYXQoKTwvY29kZT48L2E+IG1ldGhvZC4gVGhlIGN1cnJlbnRseSBzZXQgZm9ybWF0IGRldGVybWluZXMKK3RoZSBmb3JtYXQgb2YgdGhlIGludGVybmFsIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiBhbmQgYW55IDxhIGhyZWY9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sL2dzdHJlYW1lci1Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1ORVdTRUdNRU5UOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRVZFTlRfTkVXU0VHTUVOVDwvc3Bhbj48L2E+CitldmVudHMuIFRoZSBkZWZhdWx0IGZvcm1hdCBmb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU3JjPC9zcGFuPjwvYT4gaXMgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dTVC1GT1JNQVQtQllURVM6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GT1JNQVRfQllURVM8L3NwYW4+PC9hPi4KKzwvcD4KKzxwPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU3JjPC9zcGFuPjwvYT4gYWx3YXlzIHN1cHBvcnRzIHB1c2ggbW9kZSBzY2hlZHVsaW5nLiBJZiB0aGUgZm9sbG93aW5nCitjb25kaXRpb25zIGFyZSBtZXQsIGl0IGFsc28gc3VwcG9ydHMgcHVsbCBtb2RlIHNjaGVkdWxpbmc6Cis8L3A+Cis8ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiB0eXBlPSJkaXNjIj4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPlRoZSBmb3JtYXQgaXMgc2V0IHRvIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHU1QtRk9STUFULUJZVEVTOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRk9STUFUX0JZVEVTPC9zcGFuPjwvYT4gKGRlZmF1bHQpLjwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjQ2xhc3MuaXMtc2Vla2FibGUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R3N0QmFzZVNyY0NsYXNzLmlzX3NlZWthYmxlKCk8L2NvZGU+PC9hPiByZXR1cm5zIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LjwvcD48L2xpPgorPC91bD48L2Rpdj4KKzxwPgorPC9wPgorPHA+CitJZiBhbGwgdGhlIGNvbmRpdGlvbnMgYXJlIG1ldCBmb3Igb3BlcmF0aW5nIGluIHB1bGwgbW9kZSwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU3JjPC9zcGFuPjwvYT4gaXMKK2F1dG9tYXRpY2FsbHkgc2Vla2FibGUgaW4gcHVzaCBtb2RlIGFzIHdlbGwuIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBtdXN0CitiZSBtZXQgdG8gbWFrZSB0aGUgZWxlbWVudCBzZWVrYWJsZSBpbiBwdXNoIG1vZGUgd2hlbiB0aGUgZm9ybWF0IGlzIG5vdAorPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dTVC1GT1JNQVQtQllURVM6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GT1JNQVRfQllURVM8L3NwYW4+PC9hPjoKKzwvcD4KKzxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjQ2xhc3MuaXMtc2Vla2FibGUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R3N0QmFzZVNyY0NsYXNzLmlzX3NlZWthYmxlKCk8L2NvZGU+PC9hPiByZXR1cm5zIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LgorICA8L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyY0NsYXNzLnF1ZXJ5Ij48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdzdEJhc2VTcmNDbGFzcy5xdWVyeSgpPC9jb2RlPjwvYT4gY2FuIGNvbnZlcnQgYWxsIHN1cHBvcnRlZCBzZWVrIGZvcm1hdHMgdG8gdGhlCisgICAgaW50ZXJuYWwgZm9ybWF0IGFzIHNldCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLXNldC1mb3JtYXQiIHRpdGxlPSJnc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdCgpPC9jb2RlPjwvYT4uCisgIDwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjQ2xhc3MuZG8tc2VlayI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU3JjQ2xhc3MuZG9fc2VlaygpPC9jb2RlPjwvYT4gaXMgaW1wbGVtZW50ZWQsIHBlcmZvcm1zIHRoZSBzZWVrIGFuZCByZXR1cm5zCisgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LgorICA8L3A+PC9saT4KKzwvdWw+PC9kaXY+Cis8cD4KKzwvcD4KKzxwPgorV2hlbiB0aGUgZWxlbWVudCBkb2VzIG5vdCBtZWV0IHRoZSByZXF1aXJlbWVudHMgdG8gb3BlcmF0ZSBpbiBwdWxsIG1vZGUsIHRoZQorb2Zmc2V0IGFuZCBsZW5ndGggaW4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyY0NsYXNzLmNyZWF0ZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU3JjQ2xhc3MuY3JlYXRlKCk8L2NvZGU+PC9hPiBtZXRob2Qgc2hvdWxkIGJlIGlnbm9yZWQuCitJdCBpcyByZWNvbW1lbmRlZCB0byBzdWJjbGFzcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHVzaFNyYy5odG1sIiB0aXRsZT0iR3N0UHVzaFNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFB1c2hTcmM8L3NwYW4+PC9hPiBpbnN0ZWFkLCBpbiB0aGlzIHNpdHVhdGlvbi4gSWYgdGhlCitlbGVtZW50IGNhbiBvcGVyYXRlIGluIHB1bGwgbW9kZSBidXQgb25seSB3aXRoIHNwZWNpZmljIG9mZnNldHMgYW5kCitsZW5ndGhzLCBpdCBpcyBhbGxvd2VkIHRvIGdlbmVyYXRlIGFuIGVycm9yIHdoZW4gdGhlIHdyb25nIHZhbHVlcyBhcmUgcGFzc2VkCit0byB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjQ2xhc3MuY3JlYXRlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdzdEJhc2VTcmNDbGFzcy5jcmVhdGUoKTwvY29kZT48L2E+IGZ1bmN0aW9uLgorPC9wPgorPHA+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPiBoYXMgc3VwcG9ydCBmb3IgbGl2ZSBzb3VyY2VzLiBMaXZlIHNvdXJjZXMgYXJlIHNvdXJjZXMgdGhhdCB3aGVuCitwYXVzZWQgZGlzY2FyZCBkYXRhLCBzdWNoIGFzIGF1ZGlvIG9yIHZpZGVvIGNhcHR1cmUgZGV2aWNlcy4gQSB0eXBpY2FsIGxpdmUKK3NvdXJjZSBhbHNvIHByb2R1Y2VzIGRhdGEgYXQgYSBmaXhlZCByYXRlIGFuZCB0aHVzIHByb3ZpZGVzIGEgY2xvY2sgdG8gcHVibGlzaAordGhpcyByYXRlLgorVXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLXNldC1saXZlIiB0aXRsZT0iZ3N0X2Jhc2Vfc3JjX3NldF9saXZlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iYXNlX3NyY19zZXRfbGl2ZSgpPC9jb2RlPjwvYT4gdG8gYWN0aXZhdGUgdGhlIGxpdmUgc291cmNlIG1vZGUuCis8L3A+Cis8cD4KK0EgbGl2ZSBzb3VyY2UgZG9lcyBub3QgcHJvZHVjZSBkYXRhIGluIHRoZSBQQVVTRUQgc3RhdGUuIFRoaXMgbWVhbnMgdGhhdCB0aGUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyY0NsYXNzLmNyZWF0ZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU3JjQ2xhc3MuY3JlYXRlKCk8L2NvZGU+PC9hPiBtZXRob2Qgd2lsbCBub3QgYmUgY2FsbGVkIGluIFBBVVNFRCBidXQgb25seSBpbgorUExBWUlORy4gVG8gc2lnbmFsIHRoZSBwaXBlbGluZSB0aGF0IHRoZSBlbGVtZW50IHdpbGwgbm90IHByb2R1Y2UgZGF0YSwgdGhlCityZXR1cm4gdmFsdWUgZnJvbSB0aGUgUkVBRFkgdG8gUEFVU0VEIHN0YXRlIHdpbGwgYmUKKzxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLU5PLVBSRVJPTEw6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTDwvc3Bhbj48L2E+LgorPC9wPgorPHA+CitBIHR5cGljYWwgbGl2ZSBzb3VyY2Ugd2lsbCB0aW1lc3RhbXAgdGhlIGJ1ZmZlcnMgaXQgY3JlYXRlcyB3aXRoIHRoZQorY3VycmVudCBydW5uaW5nIHRpbWUgb2YgdGhlIHBpcGVsaW5lLiBUaGlzIGlzIG9uZSByZWFzb24gd2h5IGEgbGl2ZSBzb3VyY2UKK2NhbiBvbmx5IHByb2R1Y2UgZGF0YSBpbiB0aGUgUExBWUlORyBzdGF0ZSwgd2hlbiB0aGUgY2xvY2sgaXMgYWN0dWFsbHkKK2Rpc3RyaWJ1dGVkIGFuZCBydW5uaW5nLgorPC9wPgorPHA+CitMaXZlIHNvdXJjZXMgdGhhdCBzeW5jaHJvbml6ZSBhbmQgYmxvY2sgb24gdGhlIGNsb2NrIChhbiBhdWRpbyBzb3VyY2UsIGZvcgorZXhhbXBsZSkgY2FuIHNpbmNlIDAuMTAuMTIgdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLXdhaXQtcGxheWluZyIgdGl0bGU9ImdzdF9iYXNlX3NyY193YWl0X3BsYXlpbmcgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Jhc2Vfc3JjX3dhaXRfcGxheWluZygpPC9jb2RlPjwvYT4gd2hlbiB0aGUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyY0NsYXNzLmNyZWF0ZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU3JjQ2xhc3MuY3JlYXRlKCk8L2NvZGU+PC9hPiBmdW5jdGlvbiB3YXMgaW50ZXJydXB0ZWQgYnkgYSBzdGF0ZSBjaGFuZ2UgdG8KK1BBVVNFRC4KKzwvcD4KKzxwPgorVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyY0NsYXNzLmdldC10aW1lcyI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU3JjQ2xhc3MuZ2V0X3RpbWVzKCk8L2NvZGU+PC9hPiBtZXRob2QgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IHBzZXVkby1saXZlCitzb3VyY2VzLiBJdCBvbmx5IG1ha2VzIHNlbnNlIHRvIGltcGxlbWVudCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjQ2xhc3MuZ2V0LXRpbWVzIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdzdEJhc2VTcmNDbGFzcy5nZXRfdGltZXMoKTwvY29kZT48L2E+CitmdW5jdGlvbiBpZiB0aGUgc291cmNlIGlzIGEgbGl2ZSBzb3VyY2UuIFRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmNDbGFzcy5nZXQtdGltZXMiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R3N0QmFzZVNyY0NsYXNzLmdldF90aW1lcygpPC9jb2RlPjwvYT4KK2Z1bmN0aW9uIHNob3VsZCByZXR1cm4gdGltZXN0YW1wcyBzdGFydGluZyBmcm9tIDAsIGFzIGlmIGl0IHdlcmUgYSBub24tbGl2ZQorc291cmNlLiBUaGUgYmFzZSBjbGFzcyB3aWxsIG1ha2Ugc3VyZSB0aGF0IHRoZSB0aW1lc3RhbXBzIGFyZSB0cmFuc2Zvcm1lZAoraW50byB0aGUgY3VycmVudCBydW5uaW5nX3RpbWUuIFRoZSBiYXNlIHNvdXJjZSB3aWxsIHRoZW4gd2FpdCBmb3IgdGhlCitjYWxjdWxhdGVkIHJ1bm5pbmdfdGltZSBiZWZvcmUgcHVzaGluZyBvdXQgdGhlIGJ1ZmZlci4KKzwvcD4KKzxwPgorRm9yIGxpdmUgc291cmNlcywgdGhlIGJhc2UgY2xhc3Mgd2lsbCBieSBkZWZhdWx0IHJlcG9ydCBhIGxhdGVuY3kgb2YgMC4KK0ZvciBwc2V1ZG8gbGl2ZSBzb3VyY2VzLCB0aGUgYmFzZSBjbGFzcyB3aWxsIGJ5IGRlZmF1bHQgbWVhc3VyZSB0aGUgZGlmZmVyZW5jZQorYmV0d2VlbiB0aGUgZmlyc3QgYnVmZmVyIHRpbWVzdGFtcCBhbmQgdGhlIHN0YXJ0IHRpbWUgb2YgZ2V0X3RpbWVzIGFuZCB3aWxsCityZXBvcnQgdGhpcyB2YWx1ZSBhcyB0aGUgbGF0ZW5jeS4KK1N1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoZSBxdWVyeSBmdW5jdGlvbiB3aGVuIHRoaXMgYmVoYXZpb3VyIGlzIG5vdAorYWNjZXB0YWJsZS4KKzwvcD4KKzxwPgorVGhlcmUgaXMgb25seSBzdXBwb3J0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNyYzwvc3Bhbj48L2E+IGZvciBleGFjdGx5IG9uZSBzb3VyY2UgcGFkLCB3aGljaAorc2hvdWxkIGJlIG5hbWVkICJzcmMiLiBBIHNvdXJjZSBpbXBsZW1lbnRhdGlvbiAoc3ViY2xhc3Mgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU3JjPC9zcGFuPjwvYT4pCitzaG91bGQgaW5zdGFsbCBhIHBhZCB0ZW1wbGF0ZSBpbiBpdHMgY2xhc3NfaW5pdCBmdW5jdGlvbiwgbGlrZSBzbzoKKzwvcD4KKzxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgorc3RhdGljIHZvaWQKK215X2VsZW1lbnRfY2xhc3NfaW5pdCAoR3N0TXlFbGVtZW50Q2xhc3MgKmtsYXNzKQoreworICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOworICAvLyBzcmN0ZW1wbGF0ZSBzaG91bGQgYmUgYSA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFN0YXRpY1BhZFRlbXBsYXRlIj5Hc3RTdGF0aWNQYWRUZW1wbGF0ZTwvYT4gd2l0aCBkaXJlY3Rpb24KKyAgLy8gPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULVBBRC1TUkM6Q0FQUyI+R1NUX1BBRF9TUkM8L2E+IGFuZCBuYW1lICJzcmMiCisgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCisgICAgICBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgKCZhbXA7c3JjdGVtcGxhdGUpKTsKKyAgLy8gc2VlIDxhIGhyZWY9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sL0dzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR3N0RWxlbWVudERldGFpbHMiPkdzdEVsZW1lbnREZXRhaWxzPC9hPgorICBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlscyAoZ3N0ZWxlbWVudF9jbGFzcywgJmFtcDtkZXRhaWxzKTsKK30KKzwvcHJlPjwvZGl2PgorPHA+Cis8L3A+Cis8cD4KKzwvcD4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImlkNTIzNjg2Ij48L2E+PGgzPkNvbnRyb2xsZWQgc2h1dGRvd24gb2YgbGl2ZSBzb3VyY2VzIGluIGFwcGxpY2F0aW9uczwvaDM+Cis8cD4KK0FwcGxpY2F0aW9ucyB0aGF0IHJlY29yZCBmcm9tIGEgbGl2ZSBzb3VyY2UgbWF5IHdhbnQgdG8gc3RvcCByZWNvcmRpbmcKK2luIGEgY29udHJvbGxlZCB3YXksIHNvIHRoYXQgdGhlIHJlY29yZGluZyBpcyBzdG9wcGVkLCBidXQgdGhlIGRhdGEKK2FscmVhZHkgaW4gdGhlIHBpcGVsaW5lIGlzIHByb2Nlc3NlZCB0byB0aGUgZW5kIChyZW1lbWJlciB0aGF0IG1hbnkgbGl2ZQorc291cmNlcyB3b3VsZCBnbyBvbiByZWNvcmRpbmcgZm9yZXZlciBvdGhlcndpc2UpLiBGb3IgdGhhdCB0byBoYXBwZW4gdGhlCithcHBsaWNhdGlvbiBuZWVkcyB0byBtYWtlIHRoZSBzb3VyY2Ugc3RvcCByZWNvcmRpbmcgYW5kIHNlbmQgYW4gRU9TCitldmVudCBkb3duIHRoZSBwaXBlbGluZS4gVGhlIGFwcGxpY2F0aW9uIHdvdWxkIHRoZW4gd2FpdCBmb3IgYW4KK0VPUyBtZXNzYWdlIHBvc3RlZCBvbiB0aGUgcGlwZWxpbmUncyBidXMgdG8ga25vdyB3aGVuIGFsbCBkYXRhIGhhcworYmVlbiBwcm9jZXNzZWQgYW5kIHRoZSBwaXBlbGluZSBjYW4gc2FmZWx5IGJlIHN0b3BwZWQuCis8L3A+Cis8cD4KK1NpbmNlIEdTdHJlYW1lciAwLjEwLjE2IGFuIGFwcGxpY2F0aW9uIG1heSBzZW5kIGFuIEVPUyBldmVudCB0byBhIHNvdXJjZQorZWxlbWVudCB0byBtYWtlIGl0IHBlcmZvcm0gdGhlIEVPUyBsb2dpYyAoc2VuZCBFT1MgZXZlbnQgZG93bnN0cmVhbSBvciBwb3N0IGEKKzxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtU0VHTUVOVC1ET05FOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfTUVTU0FHRV9TRUdNRU5UX0RPTkU8L3NwYW4+PC9hPiBvbiB0aGUgYnVzKS4gVGhpcyBjYW4gdHlwaWNhbGx5IGJlIGRvbmUKK3dpdGggdGhlIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZW5kLWV2ZW50Ij48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3NlbmRfZXZlbnQoKTwvY29kZT48L2E+IGZ1bmN0aW9uIG9uIHRoZSBlbGVtZW50IG9yIGl0cyBwYXJlbnQgYmluLgorPC9wPgorPHA+CitBZnRlciB0aGUgRU9TIGhhcyBiZWVuIHNlbnQgdG8gdGhlIGVsZW1lbnQsIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgd2FpdCBmb3IKK2FuIEVPUyBtZXNzYWdlIHRvIGJlIHBvc3RlZCBvbiB0aGUgcGlwZWxpbmUncyBidXMuIE9uY2UgdGhpcyBFT1MgbWVzc2FnZSBpcworcmVjZWl2ZWQsIGl0IG1heSBzYWZlbHkgc2h1dCBkb3duIHRoZSBlbnRpcmUgcGlwZWxpbmUuCis8L3A+Cis8cD4KK0xhc3QgcmV2aWV3ZWQgb24gMjAwNy0xMi0xOSAoMC4xMC4xNikKKzwvcD4KKzwvZGl2PgorPHA+Cis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdEJhc2VTcmMuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEJhc2VTcmMtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RCYXNlU3JjPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0QmFzZVNyYzs8L3ByZT4KKzxwPgorVGhlIG9wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPiBkYXRhIHN0cnVjdHVyZS4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0QmFzZVNyY0NsYXNzIj48L2E+PGgzPnN0cnVjdCBHc3RCYXNlU3JjQ2xhc3M8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RCYXNlU3JjQ2xhc3MgeworICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworCisgIC8qIHZpcnR1YWwgbWV0aG9kcyBmb3Igc3ViY2xhc3NlcyAqLworCisgIC8qIGdldCBjYXBzIGZyb20gc3ViY2xhc3MgKi8KKyAgR3N0Q2FwcyogICAgICAoKmdldF9jYXBzKSAgICAgKEdzdEJhc2VTcmMgKnNyYywgR3N0Q2FwcyAqZmlsdGVyKTsKKyAgLyogZGVjaWRlIG9uIGNhcHMgKi8KKyAgZ2Jvb2xlYW4gICAgICAoKm5lZ290aWF0ZSkgICAgKEdzdEJhc2VTcmMgKnNyYyk7CisgIC8qIGNhbGxlZCBpZiwgaW4gbmVnb3RpYXRpb24sIGNhcHMgbmVlZCBmaXhhdGluZyAqLworICB2b2lkICAgICAgICAgICgqZml4YXRlKSAgICAgICAoR3N0QmFzZVNyYyAqc3JjLCBHc3RDYXBzICpjYXBzKTsKKyAgLyogbm90aWZ5IHRoZSBzdWJjbGFzcyBvZiBuZXcgY2FwcyAqLworICBnYm9vbGVhbiAgICAgICgqc2V0X2NhcHMpICAgICAoR3N0QmFzZVNyYyAqc3JjLCBHc3RDYXBzICpjYXBzKTsKKworICAvKiBzZXR1cCBhbGxvY2F0aW9uIHF1ZXJ5ICovCisgIGdib29sZWFuICAgICAgKCpkZWNpZGVfYWxsb2NhdGlvbikgICAoR3N0QmFzZVNyYyAqc3JjLCBHc3RRdWVyeSAqcXVlcnkpOworCisgIC8qIHN0YXJ0IGFuZCBzdG9wIHByb2Nlc3NpbmcsIGlkZWFsIGZvciBvcGVuaW5nL2Nsb3NpbmcgdGhlIHJlc291cmNlICovCisgIGdib29sZWFuICAgICAgKCpzdGFydCkgICAgICAgIChHc3RCYXNlU3JjICpzcmMpOworICBnYm9vbGVhbiAgICAgICgqc3RvcCkgICAgICAgICAoR3N0QmFzZVNyYyAqc3JjKTsKKworICAvKiBnaXZlbiBhIGJ1ZmZlciwgcmV0dXJuIHN0YXJ0IGFuZCBzdG9wIHRpbWUgd2hlbiBpdCBzaG91bGQgYmUgcHVzaGVkCisgICAqIG91dC4gVGhlIGJhc2UgY2xhc3Mgd2lsbCBzeW5jIG9uIHRoZSBjbG9jayB1c2luZyB0aGVzZSB0aW1lcy4gKi8KKyAgdm9pZCAgICAgICAgICAoKmdldF90aW1lcykgICAgKEdzdEJhc2VTcmMgKnNyYywgR3N0QnVmZmVyICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgKnN0YXJ0LCBHc3RDbG9ja1RpbWUgKmVuZCk7CisKKyAgLyogZ2V0IHRoZSB0b3RhbCBzaXplIG9mIHRoZSByZXNvdXJjZSBpbiBieXRlcyAqLworICBnYm9vbGVhbiAgICAgICgqZ2V0X3NpemUpICAgICAoR3N0QmFzZVNyYyAqc3JjLCBndWludDY0ICpzaXplKTsKKworICAvKiBjaGVjayBpZiB0aGUgcmVzb3VyY2UgaXMgc2Vla2FibGUgKi8KKyAgZ2Jvb2xlYW4gICAgICAoKmlzX3NlZWthYmxlKSAgKEdzdEJhc2VTcmMgKnNyYyk7CisKKyAgLyogUHJlcGFyZSB0aGUgc2VnbWVudCBvbiB3aGljaCB0byBwZXJmb3JtIGRvX3NlZWsoKSwgY29udmVydGluZyB0byB0aGUKKyAgICogY3VycmVudCBiYXNlc3JjIGZvcm1hdC4gKi8KKyAgZ2Jvb2xlYW4gICAgICAoKnByZXBhcmVfc2Vla19zZWdtZW50KSAoR3N0QmFzZVNyYyAqc3JjLCBHc3RFdmVudCAqc2VlaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U2VnbWVudCAqc2VnbWVudCk7CisgIC8qIG5vdGlmeSBzdWJjbGFzc2VzIG9mIGEgc2VlayAqLworICBnYm9vbGVhbiAgICAgICgqZG9fc2VlaykgICAgICAoR3N0QmFzZVNyYyAqc3JjLCBHc3RTZWdtZW50ICpzZWdtZW50KTsKKworICAvKiB1bmxvY2sgYW55IHBlbmRpbmcgYWNjZXNzIHRvIHRoZSByZXNvdXJjZS4gc3ViY2xhc3NlcyBzaG91bGQgdW5sb2NrCisgICAqIGFueSBmdW5jdGlvbiBBU0FQLiAqLworICBnYm9vbGVhbiAgICAgICgqdW5sb2NrKSAgICAgICAoR3N0QmFzZVNyYyAqc3JjKTsKKyAgLyogQ2xlYXIgYW55IHBlbmRpbmcgdW5sb2NrIHJlcXVlc3QsIGFzIHdlIHN1Y2NlZWRlZCBpbiB1bmxvY2tpbmcgKi8KKyAgZ2Jvb2xlYW4gICAgICAoKnVubG9ja19zdG9wKSAgKEdzdEJhc2VTcmMgKnNyYyk7CisKKyAgLyogbm90aWZ5IHN1YmNsYXNzZXMgb2YgYSBxdWVyeSAqLworICBnYm9vbGVhbiAgICAgICgqcXVlcnkpICAgICAgICAoR3N0QmFzZVNyYyAqc3JjLCBHc3RRdWVyeSAqcXVlcnkpOworCisgIC8qIG5vdGlmeSBzdWJjbGFzc2VzIG9mIGFuIGV2ZW50ICovCisgIGdib29sZWFuICAgICAgKCpldmVudCkgICAgICAgIChHc3RCYXNlU3JjICpzcmMsIEdzdEV2ZW50ICpldmVudCk7CisKKyAgLyogYXNrIHRoZSBzdWJjbGFzcyB0byBjcmVhdGUgYSBidWZmZXIgd2l0aCBvZmZzZXQgYW5kIHNpemUsIHRoZSBkZWZhdWx0CisgICAqIGltcGxlbWVudGF0aW9uIHdpbGwgY2FsbCBhbGxvYyBhbmQgZmlsbC4gKi8KKyAgR3N0Rmxvd1JldHVybiAoKmNyZWF0ZSkgICAgICAgKEdzdEJhc2VTcmMgKnNyYywgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCdWZmZXIgKipidWYpOworICAvKiBhc2sgdGhlIHN1YmNsYXNzIHRvIGFsbG9jYXRlIGFuIG91dHB1dCBidWZmZXIuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCisgICAqIHdpbGwgdXNlIHRoZSBuZWdvdGlhdGVkIGFsbG9jYXRvci4gKi8KKyAgR3N0Rmxvd1JldHVybiAoKmFsbG9jKSAgICAgICAgKEdzdEJhc2VTcmMgKnNyYywgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCdWZmZXIgKipidWYpOworICAvKiBhc2sgdGhlIHN1YmNsYXNzIHRvIGZpbGwgdGhlIGJ1ZmZlciB3aXRoIGRhdGEgZnJvbSBvZmZzZXQgYW5kIHNpemUgKi8KKyAgR3N0Rmxvd1JldHVybiAoKmZpbGwpICAgICAgICAgKEdzdEJhc2VTcmMgKnNyYywgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCdWZmZXIgKmJ1Zik7Cit9OworPC9wcmU+Cis8cD4KK1N1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIGFueSBvZiB0aGUgYXZhaWxhYmxlIHZpcnR1YWwgbWV0aG9kcyBvciBub3QsIGFzCituZWVkZWQuIEF0IHRoZSBtaW5pbXVtLCB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNyZWF0ZTwvY29kZT48L2VtPiBtZXRob2Qgc2hvdWxkIGJlIG92ZXJyaWRkZW4gdG8gcHJvZHVjZQorYnVmZmVycy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50Q2xhc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50Q2xhc3M8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNyY0NsYXNzLnBhcmVudC1jbGFzcyI+PC9hPnBhcmVudF9jbGFzczwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+RWxlbWVudCBwYXJlbnQgY2xhc3M8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNyY0NsYXNzLmdldC1jYXBzIj48L2E+Z2V0X2NhcHM8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPkNhbGxlZCB0byBnZXQgdGhlIGNhcHMgdG8gcmVwb3J0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VTcmNDbGFzcy5uZWdvdGlhdGUiPjwvYT5uZWdvdGlhdGU8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPk5lZ290aWF0ZWQgdGhlIGNhcHMgd2l0aCB0aGUgcGVlci48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNyY0NsYXNzLmZpeGF0ZSI+PC9hPmZpeGF0ZTwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Q2FsbGVkIGR1cmluZyBuZWdvdGlhdGlvbiBpZiBjYXBzIG5lZWQgZml4YXRpbmcuIEltcGxlbWVudCBpbnN0ZWFkIG9mCitzZXR0aW5nIGEgZml4YXRlIGZ1bmN0aW9uIG9uIHRoZSBzb3VyY2UgcGFkLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlU3JjQ2xhc3Muc2V0LWNhcHMiPjwvYT5zZXRfY2FwczwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Tm90aWZ5IHN1YmNsYXNzIG9mIGNoYW5nZWQgb3V0cHV0IGNhcHM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNyY0NsYXNzLmRlY2lkZS1hbGxvY2F0aW9uIj48L2E+ZGVjaWRlX2FsbG9jYXRpb248L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPmNvbmZpZ3VyZSB0aGUgYWxsb2NhdGlvbiBxdWVyeTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlU3JjQ2xhc3Muc3RhcnQiPjwvYT5zdGFydDwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+U3RhcnQgcHJvY2Vzc2luZy4gU3ViY2xhc3NlcyBzaG91bGQgb3BlbiByZXNvdXJjZXMgYW5kIHByZXBhcmUKK3RvIHByb2R1Y2UgZGF0YS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNyY0NsYXNzLnN0b3AiPjwvYT5zdG9wPC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5TdG9wIHByb2Nlc3NpbmcuIFN1YmNsYXNzZXMgc2hvdWxkIHVzZSB0aGlzIHRvIGNsb3NlIHJlc291cmNlcy48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNyY0NsYXNzLmdldC10aW1lcyI+PC9hPmdldF90aW1lczwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+R2l2ZW4gYSBidWZmZXIsIHJldHVybiB0aGUgc3RhcnQgYW5kIHN0b3AgdGltZSB3aGVuIGl0CitzaG91bGQgYmUgcHVzaGVkIG91dC4gVGhlIGJhc2UgY2xhc3Mgd2lsbCBzeW5jIG9uIHRoZSBjbG9jayB1c2luZwordGhlc2UgdGltZXMuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VTcmNDbGFzcy5nZXQtc2l6ZSI+PC9hPmdldF9zaXplPC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5SZXR1cm4gdGhlIHRvdGFsIHNpemUgb2YgdGhlIHJlc291cmNlLCBpbiB0aGUgY29uZmlndXJlZCBmb3JtYXQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VTcmNDbGFzcy5pcy1zZWVrYWJsZSI+PC9hPmlzX3NlZWthYmxlPC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5DaGVjayBpZiB0aGUgc291cmNlIGNhbiBzZWVrPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VTcmNDbGFzcy5wcmVwYXJlLXNlZWstc2VnbWVudCI+PC9hPnByZXBhcmVfc2Vla19zZWdtZW50PC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5QcmVwYXJlIHRoZSBHc3RTZWdtZW50IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlCitkb19zZWVrIHZtZXRob2QgZm9yIGV4ZWN1dGluZyBhIHNlZWsgcmVxdWVzdC4gU3ViLWNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlCit0aGlzIGlmIHRoZXkgc3VwcG9ydCBzZWVraW5nIGluIGZvcm1hdHMgb3RoZXIgdGhhbiB0aGUgY29uZmlndXJlZCBuYXRpdmUKK2Zvcm1hdC4gQnkgZGVmYXVsdCwgaXQgdHJpZXMgdG8gY29udmVydCB0aGUgc2VlayBhcmd1bWVudHMgdG8gdGhlCitjb25maWd1cmVkIG5hdGl2ZSBmb3JtYXQgYW5kIHByZXBhcmUgYSBzZWdtZW50IGluIHRoYXQgZm9ybWF0LgorU2luY2U6IDAuMTAuMTM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNyY0NsYXNzLmRvLXNlZWsiPjwvYT5kb19zZWVrPC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5QZXJmb3JtIHNlZWtpbmcgb24gdGhlIHJlc291cmNlIHRvIHRoZSBpbmRpY2F0ZWQgc2VnbWVudC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNyY0NsYXNzLnVubG9jayI+PC9hPnVubG9jazwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VW5sb2NrIGFueSBwZW5kaW5nIGFjY2VzcyB0byB0aGUgcmVzb3VyY2UuIFN1YmNsYXNzZXMgc2hvdWxkCit1bmJsb2NrIGFueSBibG9ja2VkIGZ1bmN0aW9uIEFTQVAuIEluIHBhcnRpY3VsYXIsIGFueSA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmNyZWF0ZSgpPC9jb2RlPiBmdW5jdGlvbiBpbgorcHJvZ3Jlc3Mgc2hvdWxkIGJlIHVuYmxvY2tlZCBhbmQgc2hvdWxkIHJldHVybiBHU1RfRkxPV19XUk9OR19TVEFURS4gQW55CitmdXR1cmUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNyZWF0ZTwvY29kZT48L2VtPigpIGZ1bmN0aW9uIGNhbGwgc2hvdWxkIGFsc28gcmV0dXJuIEdTVF9GTE9XX1dST05HX1NUQVRFCit1bnRpbCB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVubG9ja19zdG9wPC9jb2RlPjwvZW0+KCkgZnVuY3Rpb24gaGFzIGJlZW4gY2FsbGVkLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlU3JjQ2xhc3MudW5sb2NrLXN0b3AiPjwvYT51bmxvY2tfc3RvcDwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Q2xlYXIgdGhlIHByZXZpb3VzIHVubG9jayByZXF1ZXN0LiBTdWJjbGFzc2VzIHNob3VsZCBjbGVhcgorYW55IHN0YXRlIHRoZXkgc2V0IGR1cmluZyA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPnVubG9jaygpPC9jb2RlPiwgc3VjaCBhcyBjbGVhcmluZyBjb21tYW5kIHF1ZXVlcy48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNyY0NsYXNzLnF1ZXJ5Ij48L2E+cXVlcnk8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPkhhbmRsZSBhIHJlcXVlc3RlZCBxdWVyeS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNyY0NsYXNzLmV2ZW50Ij48L2E+ZXZlbnQ8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPk92ZXJyaWRlIHRoaXMgdG8gaW1wbGVtZW50IGN1c3RvbSBldmVudCBoYW5kbGluZy48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNyY0NsYXNzLmNyZWF0ZSI+PC9hPmNyZWF0ZTwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QXNrIHRoZSBzdWJjbGFzcyB0byBjcmVhdGUgYSBidWZmZXIgd2l0aCBvZmZzZXQgYW5kIHNpemUuCitXaGVuIHRoZSBzdWJjbGFzcyByZXR1cm5zIEdTVF9GTE9XX09LLCBpdCBNVVNUIHJldHVybiBhIGJ1ZmZlciBvZiB0aGUKK3JlcXVlc3RlZCBzaXplIHVubGVzcyBmZXdlciBieXRlcyBhcmUgYXZhaWxhYmxlIGJlY2F1c2UgYW4gRU9TIGNvbmRpdGlvbgoraXMgbmVhci4gTm8gYnVmZmVyIHNob3VsZCBiZSByZXR1cm5lZCB3aGVuIHRoZSByZXR1cm4gdmFsdWUgaXMgZGlmZmVyZW50Citmcm9tIEdTVF9GTE9XX09LLiBBIHJldHVybiB2YWx1ZSBvZiBHU1RfRkxPV19VTkVYUEVDVEVEIHNpZ25pZmllcyB0aGF0IHRoZQorZW5kIG9mIHN0cmVhbSBpcyByZWFjaGVkLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aWxsIGNhbGwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFsbG9jPC9jb2RlPjwvZW0+IGFuZAordGhlbiBjYWxsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWxsPC9jb2RlPjwvZW0+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlU3JjQ2xhc3MuYWxsb2MiPjwvYT5hbGxvYzwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QXNrIHRoZSBzdWJjbGFzcyB0byBhbGxvY2F0ZSBhIGJ1ZmZlciB3aXRoIGZvciBvZmZzZXQgYW5kIHNpemUuIFRoZQorZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aWxsIGNyZWF0ZSBhIG5ldyBidWZmZXIgZnJvbSB0aGUgbmVnb3RpYXRlZCBhbGxvY2F0b3IuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VTcmNDbGFzcy5maWxsIj48L2E+ZmlsbDwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QXNrIHRoZSBzdWJjbGFzcyB0byBmaWxsIHRoZSBidWZmZXIgd2l0aCBkYXRhIGZvciBvZmZzZXQgYW5kIHNpemUuIFRoZQorcGFzc2VkIGJ1ZmZlciBpcyBndWFyYW50ZWVkIHRvIGhvbGQgdGhlIHJlcXVlc3RlZCBhbW91bnQgb2YgYnl0ZXMuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0QmFzZVNyY0ZsYWdzIj48L2E+PGgzPmVudW0gR3N0QmFzZVNyY0ZsYWdzPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGVudW0geworICBHU1RfQkFTRV9TUkNfU1RBUlRFRCAgICAgICAgICAgPSAoR1NUX0VMRU1FTlRfRkxBR19MQVNUICZsdDsmbHQ7IDApLAorICAvKiBwYWRkaW5nICovCisgIEdTVF9CQVNFX1NSQ19GTEFHX0xBU1QgICAgICAgICA9IChHU1RfRUxFTUVOVF9GTEFHX0xBU1QgJmx0OyZsdDsgMikKK30gR3N0QmFzZVNyY0ZsYWdzOworPC9wcmU+Cis8cD4KK1RoZSA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gZmxhZ3MgdGhhdCBhIGJhc2VzcmMgZWxlbWVudCBtYXkgaGF2ZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUJBU0UtU1JDLVNUQVJURUQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0JBU0VfU1JDX1NUQVJURUQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmhhcyBzb3VyY2UgYmVlbiBzdGFydGVkCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtQkFTRS1TUkMtRkxBRy1MQVNUOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9CQVNFX1NSQ19GTEFHX0xBU1Q8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPm9mZnNldCB0byBkZWZpbmUgbW9yZSBmbGFncworPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJhc2Utc3JjLXdhaXQtcGxheWluZyI+PC9hPjxoMz5nc3RfYmFzZV9zcmNfd2FpdF9wbGF5aW5nICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiAgICAgICBnc3RfYmFzZV9zcmNfd2FpdF9wbGF5aW5nICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNyYzwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitJZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjQ2xhc3MuY3JlYXRlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdzdEJhc2VTcmNDbGFzcy5jcmVhdGUoKTwvY29kZT48L2E+IG1ldGhvZCBwZXJmb3JtcyBpdHMgb3duIHN5bmNocm9uaXNhdGlvbgorYWdhaW5zdCB0aGUgY2xvY2sgaXQgbXVzdCB1bmJsb2NrIHdoZW4gZ29pbmcgZnJvbSBQTEFZSU5HIHRvIHRoZSBQQVVTRUQgc3RhdGUKK2FuZCBjYWxsIHRoaXMgbWV0aG9kIGJlZm9yZSBjb250aW51aW5nIHRvIHByb2R1Y2UgdGhlIHJlbWFpbmluZyBkYXRhLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgdW50aWwgYSBzdGF0ZSBjaGFuZ2UgdG8gUExBWUlORyBoYXBwZW5zIChpbiB3aGljaAorY2FzZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULUZMT1ctT0s6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GTE9XX09LPC9zcGFuPjwvYT4pIG9yIHRoZSBwcm9jZXNzaW5nIG11c3QgYmUgc3RvcHBlZCBkdWUKK3RvIGEgc3RhdGUgY2hhbmdlIHRvIFJFQURZIG9yIGEgRkxVU0ggZXZlbnQgKGluIHdoaWNoIGNhc2UgdGhpcyBmdW5jdGlvbgorcmV0dXJucyA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHU1QtRkxPVy1XUk9ORy1TVEFURTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0ZMT1dfV1JPTkdfU1RBVEU8L3NwYW4+PC9hPikuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzcmM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dTVC1GTE9XLU9LOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRkxPV19PSzwvc3Bhbj48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT4gaXMgUExBWUlORyBhbmQgcHJvY2Vzc2luZyBjYW4KK2NvbnRpbnVlLiBBbnkgb3RoZXIgcmV0dXJuIHZhbHVlIHNob3VsZCBiZSByZXR1cm5lZCBmcm9tIHRoZSBjcmVhdGUgdm1ldGhvZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjEyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYmFzZS1zcmMtaXMtbGl2ZSI+PC9hPjxoMz5nc3RfYmFzZV9zcmNfaXNfbGl2ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYmFzZV9zcmNfaXNfbGl2ZSAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNyYzwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDaGVjayBpZiBhbiBlbGVtZW50IGlzIGluIGxpdmUgbW9kZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YmFzZSBzb3VyY2UgaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIGVsZW1lbnQgaXMgaW4gbGl2ZSBtb2RlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iYXNlLXNyYy1zZXQtbGl2ZSI+PC9hPjxoMz5nc3RfYmFzZV9zcmNfc2V0X2xpdmUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2Jhc2Vfc3JjX3NldF9saXZlICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gbGl2ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0lmIHRoZSBlbGVtZW50IGxpc3RlbnMgdG8gYSBsaXZlIHNvdXJjZSwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpdmU8L2NvZGU+PC9lbT4gc2hvdWxkCitiZSBzZXQgdG8gPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4uCis8L3A+Cis8cD4KK0EgbGl2ZSBzb3VyY2Ugd2lsbCBub3QgcHJvZHVjZSBkYXRhIGluIHRoZSBQQVVTRUQgc3RhdGUgYW5kCit3aWxsIHRoZXJlZm9yZSBub3QgYmUgYWJsZSB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgUFJFUk9MTCBwaGFzZQorb2YgYSBwaXBlbGluZS4gVG8gc2lnbmFsIHRoaXMgZmFjdCB0byB0aGUgYXBwbGljYXRpb24gYW5kIHRoZQorcGlwZWxpbmUsIHRoZSBzdGF0ZSBjaGFuZ2UgcmV0dXJuIHZhbHVlIG9mIHRoZSBsaXZlIHNvdXJjZSB3aWxsCitiZSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmJhc2Ugc291cmNlIGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXZlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm5ldyBsaXZlLW1vZGU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYmFzZS1zcmMtc2V0LWZvcm1hdCI+PC9hPjxoMz5nc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdCAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNyYzwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgdGhlIGRlZmF1bHQgZm9ybWF0IG9mIHRoZSBzb3VyY2UuIFRoaXMgd2lsbCBiZSB0aGUgZm9ybWF0IHVzZWQKK2ZvciBzZW5kaW5nIE5FV19TRUdNRU5UIGV2ZW50cyBhbmQgZm9yIHBlcmZvcm1pbmcgc2Vla3MuCis8L3A+Cis8cD4KK0lmIGEgZm9ybWF0IG9mIEdTVF9GT1JNQVRfQllURVMgaXMgc2V0LCB0aGUgZWxlbWVudCB3aWxsIGJlIGFibGUgdG8KK29wZXJhdGUgaW4gcHVsbCBtb2RlIGlmIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmNDbGFzcy5pcy1zZWVrYWJsZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU3JjQ2xhc3MuaXNfc2Vla2FibGUoKTwvY29kZT48L2E+IHJldHVybnMgVFJVRS4KKzwvcD4KKzxwPgorVGhpcyBmdW5jdGlvbiBtdXN0IG9ubHkgYmUgY2FsbGVkIGluIHN0YXRlcyAmbHQ7IDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtUEFVU0VEOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RBVEVfUEFVU0VEPC9jb2RlPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmJhc2Ugc291cmNlIGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGZvcm1hdCB0byB1c2U8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iYXNlLXNyYy1xdWVyeS1sYXRlbmN5Ij48L2E+PGgzPmdzdF9iYXNlX3NyY19xdWVyeV9sYXRlbmN5ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9iYXNlX3NyY19xdWVyeV9sYXRlbmN5ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU3JjPC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICpsaXZlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gKm1pbl9sYXRlbmN5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gKm1heF9sYXRlbmN5PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUXVlcnkgdGhlIHNvdXJjZSBmb3IgdGhlIGxhdGVuY3kgcGFyYW1ldGVycy4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpdmU8L2NvZGU+PC9lbT4gd2lsbCBiZSBUUlVFIHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPiBpcworY29uZmlndXJlZCBhcyBhIGxpdmUgc291cmNlLiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWluX2xhdGVuY3k8L2NvZGU+PC9lbT4gd2lsbCBiZSBzZXQgdG8gdGhlIGRpZmZlcmVuY2UKK2JldHdlZW4gdGhlIHJ1bm5pbmcgdGltZSBhbmQgdGhlIHRpbWVzdGFtcCBvZiB0aGUgZmlyc3QgYnVmZmVyLgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1heF9sYXRlbmN5PC9jb2RlPjwvZW0+IGlzIGFsd2F5cyB0aGUgdW5kZWZpbmVkIHZhbHVlIG9mIC0xLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIGlzIG1vc3RseSB1c2VkIGJ5IHN1YmNsYXNzZXMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzb3VyY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpdmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+aWYgdGhlIHNvdXJjZSBpcyBsaXZlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1pbl9sYXRlbmN5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtaW4gbGF0ZW5jeSBvZiB0aGUgc291cmNlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1heF9sYXRlbmN5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtYXggbGF0ZW5jeSBvZiB0aGUgc291cmNlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIHRoZSBxdWVyeSBzdWNjZWVkZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xMzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJhc2Utc3JjLWdldC1ibG9ja3NpemUiPjwvYT48aDM+Z3N0X2Jhc2Vfc3JjX2dldF9ibG9ja3NpemUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgZ3N0X2Jhc2Vfc3JjX2dldF9ibG9ja3NpemUgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0IHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+IHdpbGwgcHVzaCBvdXQgd2l0aCBlYWNoIGJ1ZmZlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNvdXJjZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBudW1iZXIgb2YgYnl0ZXMgcHVzaGVkIHdpdGggZWFjaCBidWZmZXIuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJhc2Utc3JjLXNldC1ibG9ja3NpemUiPjwvYT48aDM+Z3N0X2Jhc2Vfc3JjX3NldF9ibG9ja3NpemUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2Jhc2Vfc3JjX3NldF9ibG9ja3NpemUgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gYmxvY2tzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0IHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+IHdpbGwgcHVzaCBvdXQgd2l0aCBlYWNoIGJ1ZmZlci4gV2hlbgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJsb2Nrc2l6ZTwvY29kZT48L2VtPiBpcyBzZXQgdG8gLTEsIGEgZGVmYXVsdCBsZW5ndGggd2lsbCBiZSB1c2VkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc291cmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ibG9ja3NpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5ldyBibG9ja3NpemUgaW4gYnl0ZXM8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYmFzZS1zcmMtZ2V0LWRvLXRpbWVzdGFtcCI+PC9hPjxoMz5nc3RfYmFzZV9zcmNfZ2V0X2RvX3RpbWVzdGFtcCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYmFzZV9zcmNfZ2V0X2RvX3RpbWVzdGFtcCAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNyYzwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitRdWVyeSBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+IHRpbWVzdGFtcHMgb3V0Z29pbmcgYnVmZmVycyBiYXNlZCBvbiB0aGUgY3VycmVudCBydW5uaW5nX3RpbWUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzb3VyY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBiYXNlIGNsYXNzIHdpbGwgYXV0b21hdGljYWxseSB0aW1lc3RhbXAgb3V0Z29pbmcgYnVmZmVycy48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjE1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYmFzZS1zcmMtc2V0LWRvLXRpbWVzdGFtcCI+PC9hPjxoMz5nc3RfYmFzZV9zcmNfc2V0X2RvX3RpbWVzdGFtcCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYmFzZV9zcmNfc2V0X2RvX3RpbWVzdGFtcCAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNyYzwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiB0aW1lc3RhbXA8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb25maWd1cmUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPiB0byBhdXRvbWF0aWNhbGx5IHRpbWVzdGFtcCBvdXRnb2luZyBidWZmZXJzIGJhc2VkIG9uIHRoZQorY3VycmVudCBydW5uaW5nX3RpbWUgb2YgdGhlIHBpcGVsaW5lLiBUaGlzIHByb3BlcnR5IGlzIG1vc3RseSB1c2VmdWwgZm9yIGxpdmUKK3NvdXJjZXMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzb3VyY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWVzdGFtcDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5lbmFibGUgb3IgZGlzYWJsZSB0aW1lc3RhbXBpbmc8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjE1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYmFzZS1zcmMtc2V0LWR5bmFtaWMtc2l6ZSI+PC9hPjxoMz5nc3RfYmFzZV9zcmNfc2V0X2R5bmFtaWNfc2l6ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYmFzZV9zcmNfc2V0X2R5bmFtaWNfc2l6ZSAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNyYzwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBkeW5hbWljPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSWYgbm90IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5keW5hbWljPC9jb2RlPjwvZW0+LCBzaXplIGlzIG9ubHkgdXBkYXRlZCB3aGVuIG5lZWRlZCwgc3VjaCBhcyB3aGVuIHRyeWluZyB0bworcmVhZCBwYXN0IGN1cnJlbnQgdHJhY2tlZCBzaXplLiAgT3RoZXJ3aXNlLCBzaXplIGlzIGNoZWNrZWQgZm9yIHVwb24gZWFjaAorcmVhZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YmFzZSBzb3VyY2UgaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmR5bmFtaWM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bmV3IGR5bmFtaWMgc2l6ZSBtb2RlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJhc2Utc3JjLW5ldy1zZWFtbGVzcy1zZWdtZW50Ij48L2E+PGgzPmdzdF9iYXNlX3NyY19uZXdfc2VhbWxlc3Nfc2VnbWVudCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYmFzZV9zcmNfbmV3X3NlYW1sZXNzX3NlZ21lbnQgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNyYzwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHN0YXJ0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBzdG9wPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBwb3NpdGlvbjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1ByZXBhcmUgYSBuZXcgc2VhbWxlc3Mgc2VnbWVudCBmb3IgZW1pc3Npb24gZG93bnN0cmVhbS4gVGhpcyBmdW5jdGlvbiBtdXN0Citvbmx5IGJlIGNhbGxlZCBieSBkZXJpdmVkIHN1Yi1jbGFzc2VzLCBhbmQgb25seSBmcm9tIHRoZSA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmNyZWF0ZSgpPC9jb2RlPiBmdW5jdGlvbiwKK2FzIHRoZSBzdHJlYW0tbG9jayBuZWVkcyB0byBiZSBoZWxkLgorPC9wPgorPHA+CitUaGUgZm9ybWF0IGZvciB0aGUgbmV3IHNlZ21lbnQgd2lsbCBiZSB0aGUgY3VycmVudCBmb3JtYXQgb2YgdGhlIHNvdXJjZSwgYXMKK2NvbmZpZ3VyZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1zZXQtZm9ybWF0IiB0aXRsZT0iZ3N0X2Jhc2Vfc3JjX3NldF9mb3JtYXQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Jhc2Vfc3JjX3NldF9mb3JtYXQoKTwvY29kZT48L2E+Cis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBzb3VyY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBuZXcgc3RhcnQgdmFsdWUgZm9yIHRoZSBzZWdtZW50PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdG9wPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlN0b3AgdmFsdWUgZm9yIHRoZSBuZXcgc2VnbWVudDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9zaXRpb248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIHBvc2l0aW9uIHZhbHVlIGZvciB0aGUgbmV3IHNlZ2VudDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgcHJlcGFyYXRpb24gb2YgdGhlIHNlYW1sZXNzIHNlZ21lbnQgc3VjY2VlZGVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iYXNlLXNyYy1zZXQtY2FwcyI+PC9hPjxoMz5nc3RfYmFzZV9zcmNfc2V0X2NhcHMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2Jhc2Vfc3JjX3NldF9jYXBzICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldCBuZXcgY2FwcyBvbiB0aGUgYmFzZXNyYyBzb3VyY2UgcGFkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNyYzwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGNhcHMgY291bGQgYmUgc2V0PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUJBU0UtU1JDLVBBRDpDQVBTIj48L2E+PGgzPkdTVF9CQVNFX1NSQ19QQUQoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQkFTRV9TUkNfUEFEKG9iaikgICAgICAgICAgICAgICAgIChHU1RfQkFTRV9TUkNfQ0FTVCAob2JqKS0mZ3Q7c3JjcGFkKQorPC9wcmU+Cis8cD4KK0dpdmVzIHRoZSBwb2ludGVyIHRvIHRoZSA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IG9iamVjdCBvZiB0aGUgZWxlbWVudC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmJhc2Ugc291cmNlIGluc3RhbmNlPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0QmFzZVNyYy5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0QmFzZVNyYy0tYmxvY2tzaXplIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImJsb2Nrc2l6ZSI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJibG9ja3NpemUiICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5TaXplIGluIGJ5dGVzIHRvIHJlYWQgcGVyIGJ1ZmZlciAoLTEgPSBkZWZhdWx0KS48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiA0MDk2PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RCYXNlU3JjLS1kby10aW1lc3RhbXAiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4iZG8tdGltZXN0YW1wIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgImRvLXRpbWVzdGFtcCIgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPkFwcGx5IGN1cnJlbnQgc3RyZWFtIHRpbWUgdG8gYnVmZmVycy48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0QmFzZVNyYy0tbnVtLWJ1ZmZlcnMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4ibnVtLWJ1ZmZlcnMiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAibnVtLWJ1ZmZlcnMiICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5OdW1iZXIgb2YgYnVmZmVycyB0byBvdXRwdXQgYmVmb3JlIHNlbmRpbmcgRU9TICgtMSA9IHVubGltaXRlZCkuPC9wPgorPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IEdfTUFYVUxPTkc8L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiAtMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0QmFzZVNyYy0tdHlwZWZpbmQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4idHlwZWZpbmQiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAidHlwZWZpbmQiICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+UnVuIHR5cGVmaW5kIGJlZm9yZSBuZWdvdGlhdGluZy48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RCYXNlU3JjLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdXNoU3JjLmh0bWwiIHRpdGxlPSJHc3RQdXNoU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UHVzaFNyYzwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VUcmFuc2Zvcm08L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvR3N0QmFzZVRyYW5zZm9ybS5odG1sIGIvZG9jcy9saWJzL2h0bWwvR3N0QmFzZVRyYW5zZm9ybS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NDE0MmIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2xpYnMvaHRtbC9Hc3RCYXNlVHJhbnNmb3JtLmh0bWwKQEAgLTAsMCArMSw5MTUgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5Hc3RCYXNlVHJhbnNmb3JtPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZ3N0cmVhbWVyLWJhc2UuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBCYXNlIGFuZCBVdGlsbGl0eSBDbGFzc2VzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0UHVzaFNyYy5odG1sIiB0aXRsZT0iR3N0UHVzaFNyYyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImdzdHJlYW1lci1iYXNlLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RQdXNoU3JjLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjR3N0QmFzZVRyYW5zZm9ybS5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEJhc2VUcmFuc2Zvcm0uZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEJhc2VUcmFuc2Zvcm0ub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RCYXNlVHJhbnNmb3JtLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybS50b3Bfb2ZfcGFnZSI+PC9hPkdzdEJhc2VUcmFuc2Zvcm08L3NwYW4+PC9oMj4KKzxwPkdzdEJhc2VUcmFuc2Zvcm0g4oCUIEJhc2UgY2xhc3MgZm9yIHNpbXBsZSB0cmFuc2Zvcm0gZmlsdGVyczwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm0uc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaCZndDsKKworc3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm0tc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEJhc2VUcmFuc2Zvcm0iPkdzdEJhc2VUcmFuc2Zvcm08L2E+Oworc3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm1DbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MiPkdzdEJhc2VUcmFuc2Zvcm1DbGFzczwvYT47Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjZ3N0LWJhc2UtdHJhbnNmb3JtLWlzLXBhc3N0aHJvdWdoIiB0aXRsZT0iZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Bhc3N0aHJvdWdoICgpIj5nc3RfYmFzZV90cmFuc2Zvcm1faXNfcGFzc3Rocm91Z2g8L2E+ICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VUcmFuc2Zvcm08L3NwYW4+PC9hPiAqdHJhbnM8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1zZXQtcGFzc3Rocm91Z2giIHRpdGxlPSJnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Bhc3N0aHJvdWdoICgpIj5nc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Bhc3N0aHJvdWdoPC9hPiAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VUcmFuc2Zvcm08L3NwYW4+PC9hPiAqdHJhbnM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBwYXNzdGhyb3VnaDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjZ3N0LWJhc2UtdHJhbnNmb3JtLWlzLWluLXBsYWNlIiB0aXRsZT0iZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX2luX3BsYWNlICgpIj5nc3RfYmFzZV90cmFuc2Zvcm1faXNfaW5fcGxhY2U8L2E+ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VUcmFuc2Zvcm08L3NwYW4+PC9hPiAqdHJhbnM8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1zZXQtaW4tcGxhY2UiIHRpdGxlPSJnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2luX3BsYWNlICgpIj5nc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2luX3BsYWNlPC9hPiAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VUcmFuc2Zvcm08L3NwYW4+PC9hPiAqdHJhbnM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBpbl9wbGFjZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjZ3N0LWJhc2UtdHJhbnNmb3JtLWlzLXFvcy1lbmFibGVkIiB0aXRsZT0iZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Fvc19lbmFibGVkICgpIj5nc3RfYmFzZV90cmFuc2Zvcm1faXNfcW9zX2VuYWJsZWQ8L2E+ICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VUcmFuc2Zvcm08L3NwYW4+PC9hPiAqdHJhbnM8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1zZXQtcW9zLWVuYWJsZWQiIHRpdGxlPSJnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Fvc19lbmFibGVkICgpIj5nc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Fvc19lbmFibGVkPC9hPiAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VUcmFuc2Zvcm08L3NwYW4+PC9hPiAqdHJhbnM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBlbmFibGVkPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0tdXBkYXRlLXFvcyIgdGl0bGU9ImdzdF9iYXNlX3RyYW5zZm9ybV91cGRhdGVfcW9zICgpIj5nc3RfYmFzZV90cmFuc2Zvcm1fdXBkYXRlX3FvczwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VUcmFuc2Zvcm08L3NwYW4+PC9hPiAqdHJhbnM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gcHJvcG9ydGlvbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZURpZmYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWVEaWZmPC9zcGFuPjwvYT4gZGlmZjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRpbWVzdGFtcDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjZ3N0LWJhc2UtdHJhbnNmb3JtLXNldC1nYXAtYXdhcmUiIHRpdGxlPSJnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2dhcF9hd2FyZSAoKSI+Z3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9nYXBfYXdhcmU8L2E+ICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlVHJhbnNmb3JtPC9zcGFuPjwvYT4gKnRyYW5zPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gZ2FwX2F3YXJlPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0tc3VnZ2VzdCIgdGl0bGU9ImdzdF9iYXNlX3RyYW5zZm9ybV9zdWdnZXN0ICgpIj5nc3RfYmFzZV90cmFuc2Zvcm1fc3VnZ2VzdDwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VUcmFuc2Zvcm08L3NwYW4+PC9hPiAqdHJhbnM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjZ3N0LWJhc2UtdHJhbnNmb3JtLXJlY29uZmlndXJlIiB0aXRsZT0iZ3N0X2Jhc2VfdHJhbnNmb3JtX3JlY29uZmlndXJlICgpIj5nc3RfYmFzZV90cmFuc2Zvcm1fcmVjb25maWd1cmU8L2E+ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VUcmFuc2Zvcm08L3NwYW4+PC9hPiAqdHJhbnM8L2NvZGU+PC9lbT4pOworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dTVC1CQVNFLVRSQU5TRk9STS1TSU5LLU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1RSQU5TRk9STV9TSU5LX05BTUUiPkdTVF9CQVNFX1RSQU5TRk9STV9TSU5LX05BTUU8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR1NULUJBU0UtVFJBTlNGT1JNLVNSQy1OQU1FOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9UUkFOU0ZPUk1fU1JDX05BTUUiPkdTVF9CQVNFX1RSQU5TRk9STV9TUkNfTkFNRTwvYT4KKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHU1QtQkFTRS1UUkFOU0ZPUk0tU0lOSy1QQUQ6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1RSQU5TRk9STV9TSU5LX1BBRCgpIj5HU1RfQkFTRV9UUkFOU0ZPUk1fU0lOS19QQUQ8L2E+ICAgICAgICAgKG9iaikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHU1QtQkFTRS1UUkFOU0ZPUk0tU1JDLVBBRDpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfVFJBTlNGT1JNX1NSQ19QQUQoKSI+R1NUX0JBU0VfVFJBTlNGT1JNX1NSQ19QQUQ8L2E+ICAgICAgICAgIChvYmopCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR1NULUJBU0UtVFJBTlNGT1JNLUZMT1ctRFJPUFBFRDpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfVFJBTlNGT1JNX0ZMT1dfRFJPUFBFRCI+R1NUX0JBU0VfVFJBTlNGT1JNX0ZMT1dfRFJPUFBFRDwvYT4KKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHU1QtQkFTRS1UUkFOU0ZPUk0tTE9DSzpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfVFJBTlNGT1JNX0xPQ0soKSI+R1NUX0JBU0VfVFJBTlNGT1JNX0xPQ0s8L2E+ICAgICAgICAgICAgIChvYmopCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR1NULUJBU0UtVFJBTlNGT1JNLVVOTE9DSzpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfVFJBTlNGT1JNX1VOTE9DSygpIj5HU1RfQkFTRV9UUkFOU0ZPUk1fVU5MT0NLPC9hPiAgICAgICAgICAgKG9iaikKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij5HT2JqZWN0PC9hPgorICAgKy0tLS08YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgorICAgICAgICAgKy0tLS08YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCI+R3N0T2JqZWN0PC9hPgorICAgICAgICAgICAgICAgKy0tLS08YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwiPkdzdEVsZW1lbnQ8L2E+CisgICAgICAgICAgICAgICAgICAgICArLS0tLUdzdEJhc2VUcmFuc2Zvcm0KKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm0tLXFvcyIgdGl0bGU9J1RoZSAicW9zIiBwcm9wZXJ0eSc+cW9zPC9hPiIgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPgorVGhpcyBiYXNlIGNsYXNzIGlzIGZvciBmaWx0ZXIgZWxlbWVudHMgdGhhdCBwcm9jZXNzIGRhdGEuCis8L3A+Cis8cD4KK0l0IHByb3ZpZGVzIGZvcjoKKzwvcD4KKzxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+b25lIHNpbmtwYWQgYW5kIG9uZSBzcmNwYWQ8L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgICBQb3NzaWJsZSBmb3JtYXRzIG9uIHNpbmsgYW5kIHNvdXJjZSBwYWQgaW1wbGVtZW50ZWQKKyAgICAgd2l0aCBjdXN0b20gdHJhbnNmb3JtX2NhcHMgZnVuY3Rpb24uIEJ5IGRlZmF1bHQgdXNlcworICAgICBzYW1lIGZvcm1hdCBvbiBzaW5rIGFuZCBzb3VyY2UuCisgIDwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+SGFuZGxlcyBzdGF0ZSBjaGFuZ2VzPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5Eb2VzIGZsdXNoaW5nPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5QdXNoIG1vZGU8L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgICAgUHVsbCBtb2RlIGlmIHRoZSBzdWItY2xhc3MgdHJhbnNmb3JtIGNhbiBvcGVyYXRlIG9uIGFyYml0cmFyeSBkYXRhCisgICA8L3A+PC9saT4KKzwvdWw+PC9kaXY+Cis8cD4KKzwvcD4KKzxwPgorPC9wPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iaWQ1Mjk5ODQiPjwvYT48aDM+VXNlIENhc2VzPC9oMz4KKzxwPgorPC9wPgorPGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCBjbGFzcz0ib3JkZXJlZGxpc3QiIHR5cGU9IjEiPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+Cis8ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPgorPHAgY2xhc3M9InRpdGxlIj48Yj5QYXNzdGhyb3VnaCBtb2RlPC9iPjwvcD4KKzx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiB0eXBlPSJkaXNjIj4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgIEVsZW1lbnQgaGFzIG5vIGludGVyZXN0IGluIG1vZGlmeWluZyB0aGUgYnVmZmVyLiBJdCBtYXkgd2FudCB0byBpbnNwZWN0IGl0LAorICAgIGluIHdoaWNoIGNhc2UgdGhlIGVsZW1lbnQgc2hvdWxkIGhhdmUgYSB0cmFuc2Zvcm1faXAgZnVuY3Rpb24uIElmIHRoZXJlCisgICAgaXMgbm8gdHJhbnNmb3JtX2lwIGZ1bmN0aW9uIGluIHBhc3N0aHJvdWdoIG1vZGUsIHRoZSBidWZmZXIgaXMgcHVzaGVkCisgICAgaW50YWN0LgorICA8L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgIE9uIHRoZSBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgaXMgdGhlIHBhc3N0aHJvdWdoX29uX3NhbWVfY2FwcyB2YXJpYWJsZQorICAgIHdoaWNoIHdpbGwgYXV0b21hdGljYWxseSBzZXQvdW5zZXQgcGFzc3Rocm91Z2ggYmFzZWQgb24gd2hldGhlciB0aGUKKyAgICBlbGVtZW50IG5lZ290aWF0ZXMgdGhlIHNhbWUgY2FwcyBvbiBib3RoIHBhZHMuCisgIDwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgICAgcGFzc3Rocm91Z2hfb25fc2FtZV9jYXBzIG9uIGFuIGVsZW1lbnQgdGhhdCBkb2Vzbid0IGltcGxlbWVudCBhCisgICAgdHJhbnNmb3JtX2NhcHMgZnVuY3Rpb24gaXMgdXNlZnVsIGZvciBlbGVtZW50cyB0aGF0IG9ubHkgaW5zcGVjdCBkYXRhCisgICAgKHN1Y2ggYXMgbGV2ZWwpCisgIDwvcD48L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij4KKzxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZSBlbGVtZW50czwvYj48L3A+Cis8dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj5MZXZlbDwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj5WaWRlb3NjYWxlLCBhdWRpb2NvbnZlcnQsIGZmbXBlZ2NvbG9yc3BhY2UsIGF1ZGlvcmVzYW1wbGUgaW4KKyAgICBjZXJ0YWluIG1vZGVzLjwvbGk+Cis8L3VsPgorPC9kaXY+Cis8L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+Cis8ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPgorPHAgY2xhc3M9InRpdGxlIj48Yj5Nb2RpZmljYXRpb25zIGluLXBsYWNlIC0gaW5wdXQgYnVmZmVyIGFuZCBvdXRwdXQgYnVmZmVyIGFyZSB0aGUKKyAgICBzYW1lIHRoaW5nLjwvYj48L3A+Cis8dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICBUaGUgZWxlbWVudCBtdXN0IGltcGxlbWVudCBhIHRyYW5zZm9ybV9pcCBmdW5jdGlvbi4KKyAgPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICBPdXRwdXQgYnVmZmVyIHNpemUgbXVzdCAmbHQ7PSBpbnB1dCBidWZmZXIgc2l6ZQorICA8L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgIElmIHRoZSBhbHdheXNfaW5fcGxhY2UgZmxhZyBpcyBzZXQsIG5vbi13cml0YWJsZSBidWZmZXJzIHdpbGwgYmUgY29waWVkCisgICAgYW5kIHBhc3NlZCB0byB0aGUgdHJhbnNmb3JtX2lwIGZ1bmN0aW9uLCBvdGhlcndpc2UgYSBuZXcgYnVmZmVyIHdpbGwgYmUKKyAgICBjcmVhdGVkIGFuZCB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uIGNhbGxlZC4KKyAgPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICBJbmNvbWluZyB3cml0YWJsZSBidWZmZXJzIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSB0cmFuc2Zvcm1faXAgZnVuY3Rpb24KKyAgICBpbW1lZGlhdGVseS4gIDwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgICAgb25seSBpbXBsZW1lbnRpbmcgdHJhbnNmb3JtX2lwIGFuZCBub3QgdHJhbnNmb3JtIGltcGxpZXMgYWx3YXlzX2luX3BsYWNlCisgICAgPSBUUlVFCisgIDwvcD48L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij4KKzxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZSBlbGVtZW50czwvYj48L3A+Cis8dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj5Wb2x1bWU8L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+QXVkaW9jb252ZXJ0IGluIGNlcnRhaW4gbW9kZXMgKHNpZ25lZC91bnNpZ25lZAorICAgIGNvbnZlcnNpb24pPC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPmZmbXBlZ2NvbG9yc3BhY2UgaW4gY2VydGFpbiBtb2RlcyAoZW5kaWFubmVzcworICAgIHN3YXBwaW5nKTwvbGk+Cis8L3VsPgorPC9kaXY+Cis8L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+Cis8ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPgorPHAgY2xhc3M9InRpdGxlIj48Yj5Nb2RpZmljYXRpb25zIG9ubHkgdG8gdGhlIGNhcHMvbWV0YWRhdGEgb2YgYSBidWZmZXI8L2I+PC9wPgorPHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgICAgVGhlIGVsZW1lbnQgZG9lcyBub3QgcmVxdWlyZSB3cml0YWJsZSBkYXRhLCBidXQgbm9uLXdyaXRhYmxlIGJ1ZmZlcnMKKyAgICBzaG91bGQgYmUgc3ViYnVmZmVyZWQgc28gdGhhdCB0aGUgbWV0YS1pbmZvcm1hdGlvbiBjYW4gYmUgcmVwbGFjZWQuCisgIDwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgICAgRWxlbWVudHMgd2lzaGluZyB0byBvcGVyYXRlIGluIHRoaXMgbW9kZSBzaG91bGQgcmVwbGFjZSB0aGUKKyAgICBwcmVwYXJlX291dHB1dF9idWZmZXIgbWV0aG9kIHRvIGNyZWF0ZSBzdWJidWZmZXJzIG9mIHRoZSBpbnB1dCBidWZmZXIKKyAgICBhbmQgc2V0IGFsd2F5c19pbl9wbGFjZSB0byBUUlVFCisgIDwvcD48L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij4KKzxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZSBlbGVtZW50czwvYj48L3A+Cis8dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj5DYXBzZmlsdGVyIHdoZW4gc2V0dGluZyBjYXBzIG9uIG91dGdvaW5nIGJ1ZmZlcnMgdGhhdCBoYXZlCisgICAgbm9uZS48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+aWRlbnRpdHkgd2hlbiBpdCBpcyBnb2luZyB0byByZS10aW1lc3RhbXAgYnVmZmVycyBieQorICAgIGRhdGFyYXRlLjwvbGk+Cis8L3VsPgorPC9kaXY+Cis8L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+Cis8ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPgorPHAgY2xhc3M9InRpdGxlIj48Yj5Ob3JtYWwgbW9kZTwvYj48L3A+Cis8dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICBhbHdheXNfaW5fcGxhY2UgZmxhZyBpcyBub3Qgc2V0LCBvciB0aGVyZSBpcyBubyB0cmFuc2Zvcm1faXAgZnVuY3Rpb24KKyAgPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICBFbGVtZW50IHdpbGwgcmVjZWl2ZSBhbiBpbnB1dCBidWZmZXIgYW5kIG91dHB1dCBidWZmZXIgdG8gb3BlcmF0ZSBvbi4KKyAgPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICBPdXRwdXQgYnVmZmVyIGlzIGFsbG9jYXRlZCBieSBjYWxsaW5nIHRoZSBwcmVwYXJlX291dHB1dF9idWZmZXIgZnVuY3Rpb24uCisgIDwvcD48L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij4KKzxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZSBlbGVtZW50czwvYj48L3A+Cis8dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+VmlkZW9zY2FsZSwgZmZtcGVnY29sb3JzcGFjZSwgYXVkaW9jb252ZXJ0IHdoZW4gZG9pbmcKKyAgICBzY2FsaW5nL2NvbnZlcnNpb25zPC9saT48L3VsPgorPC9kaXY+Cis8L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+Cis8ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPgorPHAgY2xhc3M9InRpdGxlIj48Yj5TcGVjaWFsIG91dHB1dCBidWZmZXIgYWxsb2NhdGlvbnM8L2I+PC9wPgorPHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgIEVsZW1lbnRzIHdoaWNoIG5lZWQgdG8gZG8gc3BlY2lhbCBhbGxvY2F0aW9uIG9mIHRoZWlyIG91dHB1dCBidWZmZXJzCisgICAgb3RoZXIgdGhhbiB3aGF0IGdzdF9idWZmZXJfcGFkX2FsbG9jIGFsbG93cyBzaG91bGQgaW1wbGVtZW50IGEKKyAgICBwcmVwYXJlX291dHB1dF9idWZmZXIgbWV0aG9kLCB3aGljaCBjYWxscyB0aGUgcGFyZW50IGltcGxlbWVudGF0aW9uIGFuZAorICAgIHBhc3NlcyB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlci4KKyAgPC9wPjwvbGk+PC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij4KKzxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZSBlbGVtZW50czwvYj48L3A+Cis8dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+ZWZlbmNlPC9saT48L3VsPgorPC9kaXY+Cis8L2xpPgorPC9vbD48L2Rpdj4KKzxwPgorPC9wPgorPC9kaXY+Cis8cD4KKzwvcD4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImlkNDk0NTQ4Ij48L2E+PGgzPlN1Yi1jbGFzcyBzZXR0YWJsZSBmbGFncyBvbiBHc3RCYXNlVHJhbnNmb3JtPC9oMz4KKzxwPgorPC9wPgorPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKzxwPgorICA8L3A+Cis8ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPgorPHAgY2xhc3M9InRpdGxlIj48Yj5wYXNzdGhyb3VnaDwvYj48L3A+Cis8dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iY2lyY2xlIj4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgICAgSW1wbGllcyB0aGF0IGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIHRoZSBzdWItY2xhc3MgaXMgbm90CisgICAgICBpbnRlcmVzdGVkIGluIG1vZGlmeWluZyB0aGUgYnVmZmVycy4KKyAgICA8L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgICAgRWxlbWVudHMgd2hpY2ggYXJlIGFsd2F5cyBpbiBwYXNzdGhyb3VnaCBtb2RlIHdoZW5ldmVyIHRoZSBzYW1lIGNhcHMKKyAgICAgIGhhcyBiZWVuIG5lZ290aWF0ZWQgb24gYm90aCBwYWRzIGNhbiBzZXQgdGhlIGNsYXNzIHZhcmlhYmxlCisgICAgICBwYXNzdGhyb3VnaF9vbl9zYW1lX2NhcHMgdG8gaGF2ZSB0aGlzIGJlaGF2aW91ciBhdXRvbWF0aWNhbGx5LgorICAgIDwvcD48L2xpPgorPC91bD4KKzwvZGl2PgorPHA+Cis8L3A+Cis8L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+Cis8cD4KKyAgPC9wPgorPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij4KKzxwIGNsYXNzPSJ0aXRsZSI+PGI+YWx3YXlzX2luX3BsYWNlPC9iPjwvcD4KKzx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiB0eXBlPSJjaXJjbGUiPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgICAgICBEZXRlcm1pbmVzIHdoZXRoZXIgYSBub24td3JpdGFibGUgYnVmZmVyIHdpbGwgYmUgY29waWVkIGJlZm9yZSBwYXNzaW5nCisgICAgICB0byB0aGUgdHJhbnNmb3JtX2lwIGZ1bmN0aW9uLgorICAgIDwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgICAgICBJbXBsaWVkIFRSVUUgaWYgbm8gdHJhbnNmb3JtIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkLgorICAgIDwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgICAgICBJbXBsaWVkIEZBTFNFIGlmIE9OTFkgdHJhbnNmb3JtIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkLgorICAgIDwvcD48L2xpPgorPC91bD4KKzwvZGl2PgorPHA+Cis8L3A+Cis8L2xpPgorPC91bD48L2Rpdj4KKzxwPgorPC9wPgorPC9kaXY+Cis8cD4KKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybS5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdEJhc2VUcmFuc2Zvcm08L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RCYXNlVHJhbnNmb3JtOzwvcHJlPgorPHA+CitUaGUgb3BhcXVlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVRyYW5zZm9ybTwvc3Bhbj48L2E+IGRhdGEgc3RydWN0dXJlLgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtQ2xhc3MiPjwvYT48aDM+c3RydWN0IEdzdEJhc2VUcmFuc2Zvcm1DbGFzczwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyB7CisgIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgZ2Jvb2xlYW4gICAgICAgcGFzc3Rocm91Z2hfb25fc2FtZV9jYXBzOworCisgIC8qIHZpcnR1YWwgbWV0aG9kcyBmb3Igc3ViY2xhc3NlcyAqLworICBHc3RDYXBzKsKgKCp0cmFuc2Zvcm1fY2FwcykgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzICpjYXBzLCBHc3RDYXBzICpmaWx0ZXIpOworICB2b2lkCQkoKmZpeGF0ZV9jYXBzKQkgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwgR3N0Q2FwcyAqY2FwcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2FwcyAqb3RoZXJjYXBzKTsKKyAgZ2Jvb2xlYW4gICAgICAoKmFjY2VwdF9jYXBzKSAgICAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMsIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENhcHMgKmNhcHMpOworICBnYm9vbGVhbiAgICAgICgqc2V0X2NhcHMpICAgICAgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywgR3N0Q2FwcyAqaW5jYXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzICpvdXRjYXBzKTsKKyAgZ2Jvb2xlYW4gICAgICAoKnF1ZXJ5KSAgICAgICAgICAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMsIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFF1ZXJ5ICpxdWVyeSk7CisKKyAgLyogcHJvcG9zZSBhbGxvY2F0aW9uIHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIGlucHV0IGJ1ZmZlcnMgKi8KKyAgZ2Jvb2xlYW4gICAgICAoKnByb3Bvc2VfYWxsb2NhdGlvbikgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zLCBHc3RRdWVyeSAqcXVlcnkpOworICAvKiBkZWNpZGUgYWxsb2NhdGlvbiBxdWVyeSBmb3Igb3V0cHV0IGJ1ZmZlcnMgKi8KKyAgZ2Jvb2xlYW4gICAgICAoKmRlY2lkZV9hbGxvY2F0aW9uKSAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMsIEdzdFF1ZXJ5ICpxdWVyeSk7CisKKyAgLyogdHJhbnNmb3JtIHNpemUgKi8KKyAgZ2Jvb2xlYW4gICAgICAoKnRyYW5zZm9ybV9zaXplKSAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENhcHMgKmNhcHMsIGdzaXplIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENhcHMgKm90aGVyY2FwcywgZ3NpemUgKm90aGVyc2l6ZSk7CisKKyAgZ2Jvb2xlYW4gICAgICAoKmdldF91bml0X3NpemUpICAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMsIEdzdENhcHMgKmNhcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplICpzaXplKTsKKworICAvKiBzdGF0ZXMgKi8KKyAgZ2Jvb2xlYW4gICAgICAoKnN0YXJ0KSAgICAgICAgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zKTsKKyAgZ2Jvb2xlYW4gICAgICAoKnN0b3ApICAgICAgICAgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zKTsKKworICAvKiBzaW5rIGFuZCBzcmMgcGFkIGV2ZW50IGhhbmRsZXJzICovCisgIGdib29sZWFuICAgICAgKCpzaW5rX2V2ZW50KSAgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywgR3N0RXZlbnQgKmV2ZW50KTsKKyAgZ2Jvb2xlYW4gICAgICAoKnNyY19ldmVudCkgICAgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zLCBHc3RFdmVudCAqZXZlbnQpOworCisgIEdzdEZsb3dSZXR1cm4gKCpwcmVwYXJlX291dHB1dF9idWZmZXIpIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCdWZmZXIgKmlucHV0LCBHc3RCdWZmZXIgKipvdXRidWYpOworCisgIGdib29sZWFuICAgICAgKCpjb3B5X21ldGFkYXRhKSAgICAgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0QnVmZmVyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyICpvdXRidWYpOworCisgIHZvaWQgICAgICAgICAgKCpiZWZvcmVfdHJhbnNmb3JtKSAgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zLCBHc3RCdWZmZXIgKmJ1ZmZlcik7CisKKyAgLyogdHJhbnNmb3JtICovCisgIEdzdEZsb3dSZXR1cm4gKCp0cmFuc2Zvcm0pICAgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywgR3N0QnVmZmVyICppbmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEJ1ZmZlciAqb3V0YnVmKTsKKyAgR3N0Rmxvd1JldHVybiAoKnRyYW5zZm9ybV9pcCkgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zLCBHc3RCdWZmZXIgKmJ1Zik7Cit9OworPC9wcmU+Cis8cD4KK1N1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIGFueSBvZiB0aGUgYXZhaWxhYmxlIHZpcnR1YWwgbWV0aG9kcyBvciBub3QsIGFzCituZWVkZWQuIEF0IG1pbmltdW0gZWl0aGVyIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50cmFuc2Zvcm08L2NvZGU+PC9lbT4gb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRyYW5zZm9ybV9pcDwvY29kZT48L2VtPiBuZWVkIHRvIGJlIG92ZXJyaWRkZW4uCitJZiB0aGUgZWxlbWVudCBjYW4gb3ZlcndyaXRlIHRoZSBpbnB1dCBkYXRhIHdpdGggdGhlIHJlc3VsdHMgKGRhdGEgaXMgb2YgdGhlCitzYW1lIHR5cGUgYW5kIHF1YW50aXR5KSBpdCBzaG91bGQgcHJvdmlkZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHJhbnNmb3JtX2lwPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnRDbGFzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRDbGFzczwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtQ2xhc3MucGFyZW50LWNsYXNzIj48L2E+cGFyZW50X2NsYXNzPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5FbGVtZW50IHBhcmVudCBjbGFzczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtQ2xhc3MucGFzc3Rocm91Z2gtb24tc2FtZS1jYXBzIj48L2E+cGFzc3Rocm91Z2hfb25fc2FtZV9jYXBzPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5JZiBzZXQgdG8gVFJVRSwgcGFzc3Rocm91Z2ggbW9kZSB3aWxsIGJlCithdXRvbWF0aWNhbGx5IGVuYWJsZWQgaWYgdGhlIGNhcHMgYXJlIHRoZSBzYW1lLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtQ2xhc3MudHJhbnNmb3JtLWNhcHMiPjwvYT50cmFuc2Zvcm1fY2FwczwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+T3B0aW9uYWwuICBHaXZlbiB0aGUgcGFkIGluIHRoaXMgZGlyZWN0aW9uIGFuZCB0aGUgZ2l2ZW4KK2NhcHMsIHdoYXQgY2FwcyBhcmUgYWxsb3dlZCBvbiB0aGUgb3RoZXIgcGFkIGluIHRoaXMKK2VsZW1lbnQgPzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtQ2xhc3MuZml4YXRlLWNhcHMiPjwvYT5maXhhdGVfY2FwczwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+T3B0aW9uYWwuIEdpdmVuIHRoZSBwYWQgaW4gdGhpcyBkaXJlY3Rpb24gYW5kIHRoZSBnaXZlbgorY2FwcywgZml4YXRlIHRoZSBjYXBzIG9uIHRoZSBvdGhlciBwYWQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm1DbGFzcy5hY2NlcHQtY2FwcyI+PC9hPmFjY2VwdF9jYXBzPC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5PcHRpb25hbC4gU2luY2UgMC4xMC4zMAorU3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gY2hlY2sgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4gY2FuIGJlCitoYW5kbGVkIGJ5IHRoZSBlbGVtZW50LiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBtaWdodCBub3QgYmUKK3RoZSBtb3N0IG9wdGltYWwgd2F5IHRvIGNoZWNrIHRoaXMgaW4gYWxsIGNhc2VzLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtQ2xhc3Muc2V0LWNhcHMiPjwvYT5zZXRfY2FwczwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YWxsb3dzIHRoZSBzdWJjbGFzcyB0byBiZSBub3RpZmllZCBvZiB0aGUgYWN0dWFsIGNhcHMgc2V0LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtQ2xhc3MucXVlcnkiPjwvYT5xdWVyeTwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+T3B0aW9uYWwgU2luY2UgMC4xMC4zNgorSGFuZGxlIGEgcmVxdWVzdGVkIHF1ZXJ5LiBTdWJjbGFzc2VzIHRoYXQgaW1wbGVtZW50IHRoaXMKK3Nob3VsZCBtdXN0IGNoYWluIHVwIHRvIHRoZSBwYXJlbnQgaWYgdGhleSBkaWRuJ3QgaGFuZGxlIHRoZQorcXVlcnk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybUNsYXNzLnByb3Bvc2UtYWxsb2NhdGlvbiI+PC9hPnByb3Bvc2VfYWxsb2NhdGlvbjwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UHJvcG9zZSBidWZmZXIgYWxsb2NhdGlvbiBwYXJhbWV0ZXJzIGZvciB1cHN0cmVhbSBlbGVtZW50cy4KK1RoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgd2hlbiBub3Qgb3BlcmF0aW5nIGluCitwYXNzdGhyb3VnaCBtb2RlLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBOVUxMLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtQ2xhc3MuZGVjaWRlLWFsbG9jYXRpb24iPjwvYT5kZWNpZGVfYWxsb2NhdGlvbjwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+U2V0dXAgdGhlIGFsbG9jYXRpb24gcGFyYW1ldGVycyBmb3IgYWxsb2NhdGluZyBvdXRwdXQKK2J1ZmZlcnMuIFRoZSBwYXNzZWQgaW4gcXVlcnkgY29udGFpbnMgdGhlIHJlc3VsdCBvZiB0aGUKK2Rvd25zdHJlYW0gYWxsb2NhdGlvbiBxdWVyeS4gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZAord2hlbiBub3Qgb3BlcmF0aW5nIGluIHBhc3N0aHJvdWdoIG1vZGUuIFRoZSBkZWZhdWx0CitpbXBsZW1lbnRhdGlvbiBpcyBOVUxMLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtQ2xhc3MudHJhbnNmb3JtLXNpemUiPjwvYT50cmFuc2Zvcm1fc2l6ZTwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+T3B0aW9uYWwuIEdpdmVuIHRoZSBzaXplIG9mIGEgYnVmZmVyIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24KK3dpdGggdGhlIGdpdmVuIGNhcHMsIGNhbGN1bGF0ZSB0aGUgc2l6ZSBpbiBieXRlcyBvZiBhIGJ1ZmZlcgorb24gdGhlIG90aGVyIHBhZCB3aXRoIHRoZSBnaXZlbiBvdGhlciBjYXBzLgorVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdXNlcyBnZXRfdW5pdF9zaXplIGFuZCBrZWVwcwordGhlIG51bWJlciBvZiB1bml0cyB0aGUgc2FtZS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybUNsYXNzLmdldC11bml0LXNpemUiPjwvYT5nZXRfdW5pdF9zaXplPC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5SZXF1aXJlZCBpZiB0aGUgdHJhbnNmb3JtIGlzIG5vdCBpbi1wbGFjZS4KK2dldCB0aGUgc2l6ZSBpbiBieXRlcyBvZiBvbmUgdW5pdCBmb3IgdGhlIGdpdmVuIGNhcHMuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm1DbGFzcy5zdGFydCI+PC9hPnN0YXJ0PC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5PcHRpb25hbC4KK0NhbGxlZCB3aGVuIHRoZSBlbGVtZW50IHN0YXJ0cyBwcm9jZXNzaW5nLgorQWxsb3dzIG9wZW5pbmcgZXh0ZXJuYWwgcmVzb3VyY2VzLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtQ2xhc3Muc3RvcCI+PC9hPnN0b3A8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPk9wdGlvbmFsLgorQ2FsbGVkIHdoZW4gdGhlIGVsZW1lbnQgc3RvcHMgcHJvY2Vzc2luZy4KK0FsbG93cyBjbG9zaW5nIGV4dGVybmFsIHJlc291cmNlcy48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybUNsYXNzLnNpbmstZXZlbnQiPjwvYT5zaW5rX2V2ZW50PC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5PcHRpb25hbC4KK0V2ZW50IGhhbmRsZXIgb24gdGhlIHNpbmsgcGFkLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgoraGFuZGxlcyB0aGUgZXZlbnQgYW5kIGZvcndhcmRzIGl0IGRvd25zdHJlYW0uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm1DbGFzcy5zcmMtZXZlbnQiPjwvYT5zcmNfZXZlbnQ8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPk9wdGlvbmFsLgorRXZlbnQgaGFuZGxlciBvbiB0aGUgc291cmNlIHBhZC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KK2hhbmRsZXMgdGhlIGV2ZW50IGFuZCBmb3J3YXJkcyBpdCB1cHN0cmVhbS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybUNsYXNzLnByZXBhcmUtb3V0cHV0LWJ1ZmZlciI+PC9hPnByZXBhcmVfb3V0cHV0X2J1ZmZlcjwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+T3B0aW9uYWwuCitTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSB0aGlzIHRvIGRvIHRoZWlyIG93bgorYWxsb2NhdGlvbiBvZiBvdXRwdXQgYnVmZmVycy4gIEVsZW1lbnRzIHRoYXQgb25seSBkbworYW5hbHlzaXMgY2FuIHJldHVybiBhIHN1YmJ1ZmZlciBvciBldmVuIGp1c3QKK3JldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgaW5wdXQgYnVmZmVyIChpZiBpbgorcGFzc3Rocm91Z2ggbW9kZSkuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdpbGwKK3VzZSB0aGUgbmVnb3RpYXRlZCBhbGxvY2F0b3Igb3IgYnVmZmVycG9vbCBhbmQKK3RyYW5zZm9ybV9zaXplIHRvIGFsbG9jYXRlIGFuIG91dHB1dCBidWZmZXIgb3IgaXQKK3dpbGwgcmV0dXJuIHRoZSBpbnB1dCBidWZmZXIgaW4gcGFzc3Rocm91Z2ggbW9kZS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybUNsYXNzLmNvcHktbWV0YWRhdGEiPjwvYT5jb3B5X21ldGFkYXRhPC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5PcHRpb25hbC4KK0NvcHkgdGhlIG1ldGFkYXRhIGZyb20gdGhlIGlucHV0IGJ1ZmZlciB0byB0aGUgb3V0cHV0IGJ1ZmZlci4KK1RoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdpbGwgY29weSB0aGUgZmxhZ3MsIHRpbWVzdGFtcHMgYW5kCitvZmZzZXRzIG9mIHRoZSBidWZmZXIuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm1DbGFzcy5iZWZvcmUtdHJhbnNmb3JtIj48L2E+YmVmb3JlX3RyYW5zZm9ybTwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+T3B0aW9uYWwuIFNpbmNlIDAuMTAuMjIKK1RoaXMgbWV0aG9kIGlzIGNhbGxlZCByaWdodCBiZWZvcmUgdGhlIGJhc2UgY2xhc3Mgd2lsbAorc3RhcnQgcHJvY2Vzc2luZy4gRHluYW1pYyBwcm9wZXJ0aWVzIG9yIG90aGVyIGRlbGF5ZWQKK2NvbmZpZ3VyYXRpb24gY291bGQgYmUgcGVyZm9ybWVkIGluIHRoaXMgbWV0aG9kLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtQ2xhc3MudHJhbnNmb3JtIj48L2E+dHJhbnNmb3JtPC9jb2RlPjwvZW0+wqAoKTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5SZXF1aXJlZCBpZiB0aGUgZWxlbWVudCBkb2VzIG5vdCBvcGVyYXRlIGluLXBsYWNlLgorVHJhbnNmb3JtcyBvbmUgaW5jb21pbmcgYnVmZmVyIHRvIG9uZSBvdXRnb2luZyBidWZmZXIuCitUaGUgZnVuY3Rpb24gaXMgYWxsb3dlZCB0byBjaGFuZ2Ugc2l6ZS90aW1lc3RhbXAvZHVyYXRpb24KK29mIHRoZSBvdXRnb2luZyBidWZmZXIuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm1DbGFzcy50cmFuc2Zvcm0taXAiPjwvYT50cmFuc2Zvcm1faXA8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPlJlcXVpcmVkIGlmIHRoZSBlbGVtZW50IG9wZXJhdGVzIGluLXBsYWNlLgorVHJhbnNmb3JtIHRoZSBpbmNvbWluZyBidWZmZXIgaW4tcGxhY2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJhc2UtdHJhbnNmb3JtLWlzLXBhc3N0aHJvdWdoIj48L2E+PGgzPmdzdF9iYXNlX3RyYW5zZm9ybV9pc19wYXNzdGhyb3VnaCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYmFzZV90cmFuc2Zvcm1faXNfcGFzc3Rocm91Z2ggICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVRyYW5zZm9ybTwvc3Bhbj48L2E+ICp0cmFuczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NlZSBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHJhbnM8L2NvZGU+PC9lbT4gaXMgY29uZmlndXJlZCBhcyBhIHBhc3N0aHJvdWdoIHRyYW5zZm9ybS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50cmFuczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlVHJhbnNmb3JtPC9zcGFuPjwvYT4gdG8gcXVlcnk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlzIHRoZSB0cmFuc2Zvcm0gaXMgY29uZmlndXJlZCBpbiBwYXNzdGhyb3VnaCBtb2RlLgorTVQgc2FmZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYmFzZS10cmFuc2Zvcm0tc2V0LXBhc3N0aHJvdWdoIj48L2E+PGgzPmdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcGFzc3Rocm91Z2ggKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wYXNzdGhyb3VnaCAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VUcmFuc2Zvcm08L3NwYW4+PC9hPiAqdHJhbnM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBwYXNzdGhyb3VnaDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldCBwYXNzdGhyb3VnaCBtb2RlIGZvciB0aGlzIGZpbHRlciBieSBkZWZhdWx0LiBUaGlzIGlzIG1vc3RseQordXNlZnVsIGZvciBmaWx0ZXJzIHRoYXQgZG8gbm90IGNhcmUgYWJvdXQgbmVnb3RpYXRpb24uCis8L3A+Cis8cD4KK0Fsd2F5cyBUUlVFIGZvciBmaWx0ZXJzIHdoaWNoIGRvbid0IGltcGxlbWVudCBlaXRoZXIgYSB0cmFuc2Zvcm0KK29yIHRyYW5zZm9ybV9pcCBtZXRob2QuCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHJhbnM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVRyYW5zZm9ybTwvc3Bhbj48L2E+IHRvIHNldDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFzc3Rocm91Z2g8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Ym9vbGVhbiBpbmRpY2F0aW5nIHBhc3N0aHJvdWdoIG1vZGUuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJhc2UtdHJhbnNmb3JtLWlzLWluLXBsYWNlIj48L2E+PGgzPmdzdF9iYXNlX3RyYW5zZm9ybV9pc19pbl9wbGFjZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYmFzZV90cmFuc2Zvcm1faXNfaW5fcGxhY2UgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVRyYW5zZm9ybTwvc3Bhbj48L2E+ICp0cmFuczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NlZSBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHJhbnM8L2NvZGU+PC9lbT4gaXMgY29uZmlndXJlZCBhcyBhIGluX3BsYWNlIHRyYW5zZm9ybS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50cmFuczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlVHJhbnNmb3JtPC9zcGFuPjwvYT4gdG8gcXVlcnk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlzIHRoZSB0cmFuc2Zvcm0gaXMgY29uZmlndXJlZCBpbiBpbl9wbGFjZSBtb2RlLgorTVQgc2FmZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYmFzZS10cmFuc2Zvcm0tc2V0LWluLXBsYWNlIj48L2E+PGgzPmdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfaW5fcGxhY2UgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9pbl9wbGFjZSAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VUcmFuc2Zvcm08L3NwYW4+PC9hPiAqdHJhbnM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBpbl9wbGFjZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0RldGVybWluZXMgd2hldGhlciBhIG5vbi13cml0YWJsZSBidWZmZXIgd2lsbCBiZSBjb3BpZWQgYmVmb3JlIHBhc3NpbmcKK3RvIHRoZSB0cmFuc2Zvcm1faXAgZnVuY3Rpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiB0eXBlPSJkaXNjIj4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPkFsd2F5cyBUUlVFIGlmIG5vIHRyYW5zZm9ybSBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZC48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+QWx3YXlzIEZBTFNFIGlmIE9OTFkgdHJhbnNmb3JtIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkLjwvbGk+Cis8L3VsPjwvZGl2PgorPHA+Cis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHJhbnM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVRyYW5zZm9ybTwvc3Bhbj48L2E+IHRvIG1vZGlmeTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5fcGxhY2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Qm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgd2Ugd291bGQgbGlrZSB0byBvcGVyYXRlCitvbiBpbl9wbGFjZSBidWZmZXJzLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iYXNlLXRyYW5zZm9ybS1pcy1xb3MtZW5hYmxlZCI+PC9hPjxoMz5nc3RfYmFzZV90cmFuc2Zvcm1faXNfcW9zX2VuYWJsZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Fvc19lbmFibGVkICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VUcmFuc2Zvcm08L3NwYW4+PC9hPiAqdHJhbnM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitRdWVyaWVzIGlmIHRoZSB0cmFuc2Zvcm0gd2lsbCBoYW5kbGUgUW9TLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRyYW5zPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlVHJhbnNmb3JtPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRSVUUgaWYgUW9TIGlzIGVuYWJsZWQuCitNVCBzYWZlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJhc2UtdHJhbnNmb3JtLXNldC1xb3MtZW5hYmxlZCI+PC9hPjxoMz5nc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Fvc19lbmFibGVkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcW9zX2VuYWJsZWQgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlVHJhbnNmb3JtPC9zcGFuPjwvYT4gKnRyYW5zPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gZW5hYmxlZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0VuYWJsZSBvciBkaXNhYmxlIFFvUyBoYW5kbGluZyBpbiB0aGUgdHJhbnNmb3JtLgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRyYW5zPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlVHJhbnNmb3JtPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW5hYmxlZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5uZXcgc3RhdGU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iYXNlLXRyYW5zZm9ybS11cGRhdGUtcW9zIj48L2E+PGgzPmdzdF9iYXNlX3RyYW5zZm9ybV91cGRhdGVfcW9zICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9iYXNlX3RyYW5zZm9ybV91cGRhdGVfcW9zICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlVHJhbnNmb3JtPC9zcGFuPjwvYT4gKnRyYW5zPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IHByb3BvcnRpb248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWVEaWZmIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lRGlmZjwvc3Bhbj48L2E+IGRpZmY8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lc3RhbXA8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXQgdGhlIFFvUyBwYXJhbWV0ZXJzIGluIHRoZSB0cmFuc2Zvcm0uIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGludGVybmFsbHkKK3doZW4gYSBRT1MgZXZlbnQgaXMgcmVjZWl2ZWQgYnV0IHN1YmNsYXNzZXMgY2FuIHByb3ZpZGUgY3VzdG9tIGluZm9ybWF0aW9uCit3aGVuIG5lZWRlZC4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50cmFuczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVRyYW5zZm9ybTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByb3BvcnRpb248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHByb3BvcnRpb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRpZmY8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGRpZmYgYWdhaW5zdCB0aGUgY2xvY2s8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWVzdGFtcDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdGltZXN0YW1wIG9mIHRoZSBidWZmZXIgZ2VuZXJhdGluZyB0aGUgUW9TIGV4cHJlc3NlZCBpbgorcnVubmluZ190aW1lLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJhc2UtdHJhbnNmb3JtLXNldC1nYXAtYXdhcmUiPjwvYT48aDM+Z3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9nYXBfYXdhcmUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9nYXBfYXdhcmUgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VUcmFuc2Zvcm08L3NwYW4+PC9hPiAqdHJhbnM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBnYXBfYXdhcmU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitJZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Z2FwX2F3YXJlPC9jb2RlPjwvZW0+IGlzIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gKHRoZSBkZWZhdWx0KSwgb3V0cHV0IGJ1ZmZlcnMgd2lsbCBoYXZlIHRoZQorPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItRkxBRy1HQVA6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9CVUZGRVJfRkxBR19HQVA8L2NvZGU+PC9hPiBmbGFnIHVuc2V0LgorPC9wPgorPHA+CitJZiBzZXQgdG8gPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4sIHRoZSBlbGVtZW50IG11c3QgaGFuZGxlIG91dHB1dCBidWZmZXJzIHdpdGggdGhpcyBmbGFnIHNldAorY29ycmVjdGx5LCBpLmUuIGl0IGNhbiBhc3N1bWUgdGhhdCB0aGUgYnVmZmVyIGNvbnRhaW5zIG5ldXRyYWwgZGF0YSBidXQgbXVzdAordW5zZXQgdGhlIGZsYWcgaWYgdGhlIG91dHB1dCBpcyBubyBuZXV0cmFsIGRhdGEuCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHJhbnM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VUcmFuc2Zvcm08L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5nYXBfYXdhcmU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+TmV3IHN0YXRlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xNjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJhc2UtdHJhbnNmb3JtLXN1Z2dlc3QiPjwvYT48aDM+Z3N0X2Jhc2VfdHJhbnNmb3JtX3N1Z2dlc3QgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3N1Z2dlc3QgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VUcmFuc2Zvcm08L3NwYW4+PC9hPiAqdHJhbnM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0luc3RydWN0cyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHJhbnM8L2NvZGU+PC9lbT4gdG8gc3VnZ2VzdCBuZXcgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4gdXBzdHJlYW0uIEEgY29weSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPiB3aWxsIGJlCit0YWtlbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50cmFuczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVRyYW5zZm9ybTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Y2FwcyB0byBzdWdnZXN0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmJ1ZmZlciBzaXplIHRvIHN1Z2dlc3Q8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIxPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYmFzZS10cmFuc2Zvcm0tcmVjb25maWd1cmUiPjwvYT48aDM+Z3N0X2Jhc2VfdHJhbnNmb3JtX3JlY29uZmlndXJlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9iYXNlX3RyYW5zZm9ybV9yZWNvbmZpZ3VyZSAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlVHJhbnNmb3JtPC9zcGFuPjwvYT4gKnRyYW5zPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSW5zdHJ1Y3RzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50cmFuczwvY29kZT48L2VtPiB0byByZW5lZ290aWF0ZSBhIG5ldyBkb3duc3RyZWFtIHRyYW5zZm9ybSBvbiB0aGUgbmV4dAorYnVmZmVyLiBUaGlzIGZ1bmN0aW9uIGlzIHR5cGljYWxseSBjYWxsZWQgYWZ0ZXIgcHJvcGVydGllcyBvbiB0aGUgdHJhbnNmb3JtCit3ZXJlIHNldCB0aGF0IGluZmx1ZW5jZSB0aGUgb3V0cHV0IGZvcm1hdC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHJhbnM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VUcmFuc2Zvcm08L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1CQVNFLVRSQU5TRk9STS1TSU5LLU5BTUU6Q0FQUyI+PC9hPjxoMz5HU1RfQkFTRV9UUkFOU0ZPUk1fU0lOS19OQU1FPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CQVNFX1RSQU5TRk9STV9TSU5LX05BTUXCoCJzaW5rIgorPC9wcmU+Cis8cD4KK1RoZSBuYW1lIG9mIHRoZSB0ZW1wbGF0ZXMgZm9yIHRoZSBzaW5rIHBhZC4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUJBU0UtVFJBTlNGT1JNLVNSQy1OQU1FOkNBUFMiPjwvYT48aDM+R1NUX0JBU0VfVFJBTlNGT1JNX1NSQ19OQU1FPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CQVNFX1RSQU5TRk9STV9TUkNfTkFNRcKgInNyYyIKKzwvcHJlPgorPHA+CitUaGUgbmFtZSBvZiB0aGUgdGVtcGxhdGVzIGZvciB0aGUgc291cmNlIHBhZC4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUJBU0UtVFJBTlNGT1JNLVNJTkstUEFEOkNBUFMiPjwvYT48aDM+R1NUX0JBU0VfVFJBTlNGT1JNX1NJTktfUEFEKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0JBU0VfVFJBTlNGT1JNX1NJTktfUEFEKG9iainCoChHU1RfQkFTRV9UUkFOU0ZPUk1fQ0FTVCAob2JqKS0mZ3Q7c2lua3BhZCkKKzwvcHJlPgorPHA+CitHaXZlcyB0aGUgcG9pbnRlciB0byB0aGUgc2luayA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IG9iamVjdCBvZiB0aGUgZWxlbWVudC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmJhc2UgdHJhbnNmb3JtIGluc3RhbmNlPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUJBU0UtVFJBTlNGT1JNLVNSQy1QQUQ6Q0FQUyI+PC9hPjxoMz5HU1RfQkFTRV9UUkFOU0ZPUk1fU1JDX1BBRCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CQVNFX1RSQU5TRk9STV9TUkNfUEFEKG9iaikJCShHU1RfQkFTRV9UUkFOU0ZPUk1fQ0FTVCAob2JqKS0mZ3Q7c3JjcGFkKQorPC9wcmU+Cis8cD4KK0dpdmVzIHRoZSBwb2ludGVyIHRvIHRoZSBzb3VyY2UgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBvYmplY3Qgb2YgdGhlIGVsZW1lbnQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iajwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5iYXNlIHRyYW5zZm9ybSBpbnN0YW5jZTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1CQVNFLVRSQU5TRk9STS1GTE9XLURST1BQRUQ6Q0FQUyI+PC9hPjxoMz5HU1RfQkFTRV9UUkFOU0ZPUk1fRkxPV19EUk9QUEVEPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CQVNFX1RSQU5TRk9STV9GTE9XX0RST1BQRUQgICBHU1RfRkxPV19DVVNUT01fU1VDQ0VTUworPC9wcmU+Cis8cD4KK0EgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiB0aGF0IGNhbiBiZSByZXR1cm5lZCBmcm9tIHRyYW5zZm9ybSBhbmQgdHJhbnNmb3JtX2lwIHRvCitpbmRpY2F0ZSB0aGF0IG5vIG91dHB1dCBidWZmZXIgd2FzIGdlbmVyYXRlZC4KKzwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xMzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUJBU0UtVFJBTlNGT1JNLUxPQ0s6Q0FQUyI+PC9hPjxoMz5HU1RfQkFTRV9UUkFOU0ZPUk1fTE9DSygpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CQVNFX1RSQU5TRk9STV9MT0NLKG9iaikgICBnX211dGV4X2xvY2sgKEdTVF9CQVNFX1RSQU5TRk9STV9DQVNUIChvYmopLSZndDt0cmFuc2Zvcm1fbG9jaykKKzwvcHJlPgorPHA+CitPYnRhaW4gYSBsb2NrIHRvIHByb3RlY3QgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbiBmcm9tIGNvbmN1cnJlbnQgYWNjZXNzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmo8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YmFzZSB0cmFuc2Zvcm0gaW5zdGFuY2U8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xMzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUJBU0UtVFJBTlNGT1JNLVVOTE9DSzpDQVBTIj48L2E+PGgzPkdTVF9CQVNFX1RSQU5TRk9STV9VTkxPQ0soKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQkFTRV9UUkFOU0ZPUk1fVU5MT0NLKG9iaikgZ19tdXRleF91bmxvY2sgKEdTVF9CQVNFX1RSQU5TRk9STV9DQVNUIChvYmopLSZndDt0cmFuc2Zvcm1fbG9jaykKKzwvcHJlPgorPHA+CitSZWxlYXNlIHRoZSBsb2NrIHRoYXQgcHJvdGVjdHMgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbiBmcm9tIGNvbmN1cnJlbnQgYWNjZXNzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmo8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YmFzZSB0cmFuc2Zvcm0gaW5zdGFuY2U8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xMzwvcD4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtLS1xb3MiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4icW9zIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgInFvcyIgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPkhhbmRsZSBRdWFsaXR5LW9mLVNlcnZpY2UgZXZlbnRzLjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm0uc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU3JjPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL0dzdENvbGxlY3RQYWRzLmh0bWwgYi9kb2NzL2xpYnMvaHRtbC9Hc3RDb2xsZWN0UGFkcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMzY4ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2xpYnMvaHRtbC9Hc3RDb2xsZWN0UGFkcy5odG1sCkBAIC0wLDAgKzEsOTUyIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0Q29sbGVjdFBhZHM8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJnc3RyZWFtZXItYmFzZS5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEJhc2UgYW5kIFV0aWxsaXR5IENsYXNzZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kSGVscGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItYmFzZS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNHc3RDb2xsZWN0UGFkcy5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdENvbGxlY3RQYWRzLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RDb2xsZWN0UGFkcy5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iR3N0Q29sbGVjdFBhZHMiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RDb2xsZWN0UGFkcy50b3Bfb2ZfcGFnZSI+PC9hPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvaDI+Cis8cD5Hc3RDb2xsZWN0UGFkcyDigJQgbWFuYWdlcyBhIHNldCBvZiBwYWRzIHRoYXQgb3BlcmF0ZSBpbiBjb2xsZWN0IG1vZGU8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJHc3RDb2xsZWN0UGFkcy5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisjaW5jbHVkZSAmbHQ7Z3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaCZndDsKKworc3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0RGF0YSIgdGl0bGU9InN0cnVjdCBHc3RDb2xsZWN0RGF0YSI+R3N0Q29sbGVjdERhdGE8L2E+Oworc3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0UGFkcy1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29sbGVjdFBhZHMiPkdzdENvbGxlY3RQYWRzPC9hPjsKKzxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+ICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0UGFkc0Z1bmN0aW9uIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHNGdW5jdGlvbiAoKSI+KkdzdENvbGxlY3RQYWRzRnVuY3Rpb248L2E+KSAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPiAqcGFkczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7Cis8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICogICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdFBhZHNDbGlwRnVuY3Rpb24iIHRpdGxlPSJHc3RDb2xsZWN0UGFkc0NsaXBGdW5jdGlvbiAoKSI+KkdzdENvbGxlY3RQYWRzQ2xpcEZ1bmN0aW9uPC9hPikgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPiAqcGFkczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0RGF0YSIgdGl0bGU9InN0cnVjdCBHc3RDb2xsZWN0RGF0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3REYXRhPC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5IiB0aXRsZT0iR3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5ICgpIj4qR3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5PC9hPikgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4gKiAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLW5ldyIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfbmV3ICgpIj5nc3RfY29sbGVjdF9wYWRzX25ldzwvYT4gICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXNldC1mdW5jdGlvbiIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfc2V0X2Z1bmN0aW9uICgpIj5nc3RfY29sbGVjdF9wYWRzX3NldF9mdW5jdGlvbjwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPiAqcGFkczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0UGFkc0Z1bmN0aW9uIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHNGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzRnVuY3Rpb248L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1zZXQtY2xpcC1mdW5jdGlvbiIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfc2V0X2NsaXBfZnVuY3Rpb24gKCkiPmdzdF9jb2xsZWN0X3BhZHNfc2V0X2NsaXBfZnVuY3Rpb248L2E+ICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3RQYWRzQ2xpcEZ1bmN0aW9uIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHNDbGlwRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkc0NsaXBGdW5jdGlvbjwvc3Bhbj48L2E+IGNsaXBmdW5jPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENvbGxlY3REYXRhPC9zcGFuPjwvYT4gKiAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLWFkZC1wYWQiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQgKCkiPmdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZDwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGEiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29sbGVjdERhdGEiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPiAqICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtYWRkLXBhZC1mdWxsIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkX2Z1bGwgKCkiPmdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZF9mdWxsPC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5IiB0aXRsZT0iR3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5ICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT4gZGVzdHJveV9ub3RpZnk8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXJlbW92ZS1wYWQiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3JlbW92ZV9wYWQgKCkiPmdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZDwvYT4gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtaXMtYWN0aXZlIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19pc19hY3RpdmUgKCkiPmdzdF9jb2xsZWN0X3BhZHNfaXNfYWN0aXZlPC9hPiAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7Cis8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLWNvbGxlY3QiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX2NvbGxlY3QgKCkiPmdzdF9jb2xsZWN0X3BhZHNfY29sbGVjdDwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+ICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtY29sbGVjdC1yYW5nZSIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfY29sbGVjdF9yYW5nZSAoKSI+Z3N0X2NvbGxlY3RfcGFkc19jb2xsZWN0X3JhbmdlPC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4gKnBhZHM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gb2Zmc2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbGVuZ3RoPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1zdGFydCIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfc3RhcnQgKCkiPmdzdF9jb2xsZWN0X3BhZHNfc3RhcnQ8L2E+ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1zdG9wIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19zdG9wICgpIj5nc3RfY29sbGVjdF9wYWRzX3N0b3A8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPiAqcGFkczwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtc2V0LWZsdXNoaW5nIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19zZXRfZmx1c2hpbmcgKCkiPmdzdF9jb2xsZWN0X3BhZHNfc2V0X2ZsdXNoaW5nPC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gZmx1c2hpbmc8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1wZWVrIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19wZWVrICgpIj5nc3RfY29sbGVjdF9wYWRzX3BlZWs8L2E+ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPiAqcGFkczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0RGF0YSIgdGl0bGU9InN0cnVjdCBHc3RDb2xsZWN0RGF0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3REYXRhPC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1wb3AiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3BvcCAoKSI+Z3N0X2NvbGxlY3RfcGFkc19wb3A8L2E+ICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4gKnBhZHM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGEiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29sbGVjdERhdGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0RGF0YTwvc3Bhbj48L2E+ICpkYXRhPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1hdmFpbGFibGUiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX2F2YWlsYWJsZSAoKSI+Z3N0X2NvbGxlY3RfcGFkc19hdmFpbGFibGU8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4gKnBhZHM8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1yZWFkLWJ1ZmZlciIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfcmVhZF9idWZmZXIgKCkiPmdzdF9jb2xsZWN0X3BhZHNfcmVhZF9idWZmZXI8L2E+ICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy10YWtlLWJ1ZmZlciIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfdGFrZV9idWZmZXIgKCkiPmdzdF9jb2xsZWN0X3BhZHNfdGFrZV9idWZmZXI8L2E+ICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLWZsdXNoIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19mbHVzaCAoKSI+Z3N0X2NvbGxlY3RfcGFkc19mbHVzaDwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4gKnBhZHM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGEiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29sbGVjdERhdGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0RGF0YTwvc3Bhbj48L2E+ICpkYXRhPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0Q29sbGVjdFBhZHMub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPkdPYmplY3Q8L2E+CisgICArLS0tLTxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+CisgICAgICAgICArLS0tLTxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdE9iamVjdC5odG1sIj5Hc3RPYmplY3Q8L2E+CisgICAgICAgICAgICAgICArLS0tLUdzdENvbGxlY3RQYWRzCis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0Q29sbGVjdFBhZHMuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitNYW5hZ2VzIGEgc2V0IG9mIHBhZHMgdGhhdCBvcGVyYXRlIGluIGNvbGxlY3QgbW9kZS4gVGhpcyBtZWFucyB0aGF0IGNvbnRyb2wKK2lzIGdpdmVuIHRvIHRoZSBtYW5hZ2VyIG9mIHRoaXMgb2JqZWN0IHdoZW4gYWxsIHBhZHMgaGF2ZSBkYXRhLgorPC9wPgorPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICBDb2xsZWN0cGFkcyBhcmUgY3JlYXRlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtbmV3IiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19uZXcgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NvbGxlY3RfcGFkc19uZXcoKTwvY29kZT48L2E+LiBBIGNhbGxiYWNrIHNob3VsZCB0aGVuCisgICAgYmUgaW5zdGFsbGVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1zZXQtZnVuY3Rpb24iIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3NldF9mdW5jdGlvbiAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY29sbGVjdF9wYWRzX3NldF9mdW5jdGlvbigpPC9jb2RlPjwvYT4uCisgIDwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgICAgUGFkcyBhcmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24gd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLWFkZC1wYWQiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkKCk8L2NvZGU+PC9hPi8KKyAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXJlbW92ZS1wYWQiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3JlbW92ZV9wYWQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NvbGxlY3RfcGFkc19yZW1vdmVfcGFkKCk8L2NvZGU+PC9hPi4gVGhlIHBhZAorICAgIGhhcyB0byBiZSBhIHNpbmtwYWQuIFRoZSBjaGFpbiBhbmQgZXZlbnQgZnVuY3Rpb25zIG9mIHRoZSBwYWQgYXJlCisgICAgb3ZlcnJpZGRlbi4gVGhlIGVsZW1lbnRfcHJpdmF0ZSBvZiB0aGUgcGFkIGlzIHVzZWQgdG8gc3RvcmUKKyAgICBwcml2YXRlIGluZm9ybWF0aW9uIGZvciB0aGUgY29sbGVjdHBhZHMuCisgIDwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgICAgRm9yIGVhY2ggcGFkLCBkYXRhIGlzIHF1ZXVlZCBpbiB0aGUgX2NoYWluIGZ1bmN0aW9uIG9yIGJ5CisgICAgcGVyZm9ybWluZyBhIHB1bGxfcmFuZ2UuCisgIDwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgICAgV2hlbiBkYXRhIGlzIHF1ZXVlZCBvbiBhbGwgcGFkcywgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAgPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICBEYXRhIGNhbiBiZSBkZXF1ZXVlZCBmcm9tIHRoZSBwYWQgd2l0aCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1wb3AiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3BvcCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY29sbGVjdF9wYWRzX3BvcCgpPC9jb2RlPjwvYT4gbWV0aG9kLgorICAgIE9uZSBjYW4gcGVlayBhdCB0aGUgZGF0YSB3aXRoIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXBlZWsiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3BlZWsgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NvbGxlY3RfcGFkc19wZWVrKCk8L2NvZGU+PC9hPiBmdW5jdGlvbi4KKyAgICBUaGVzZSBmdW5jdGlvbnMgd2lsbCByZXR1cm4gTlVMTCBpZiB0aGUgcGFkIHJlY2VpdmVkIGFuIEVPUyBldmVudC4gV2hlbiBhbGwKKyAgICBwYWRzIHJldHVybiBOVUxMIGZyb20gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXBlZWsiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3BlZWsgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NvbGxlY3RfcGFkc19wZWVrKCk8L2NvZGU+PC9hPiwgdGhlIGVsZW1lbnQgY2FuIGVtaXQgYW4gRU9TCisgICAgZXZlbnQgaXRzZWxmLgorICA8L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgIERhdGEgY2FuIGFsc28gYmUgZGVxdWV1ZWQgaW4gYnl0ZSB1bml0cyB1c2luZyB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1hdmFpbGFibGUiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX2F2YWlsYWJsZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY29sbGVjdF9wYWRzX2F2YWlsYWJsZSgpPC9jb2RlPjwvYT4sCisgICAgPGEgaHJlZj0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyLWxpYnMvaHRtbC9Hc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtcmVhZCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY29sbGVjdF9wYWRzX3JlYWQoKTwvY29kZT48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLWZsdXNoIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19mbHVzaCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY29sbGVjdF9wYWRzX2ZsdXNoKCk8L2NvZGU+PC9hPiBjYWxscy4KKyAgPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICBFbGVtZW50cyBzaG91bGQgY2FsbCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXN0YXJ0IiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19zdGFydCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY29sbGVjdF9wYWRzX3N0YXJ0KCk8L2NvZGU+PC9hPiBhbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1zdG9wIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19zdG9wICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jb2xsZWN0X3BhZHNfc3RvcCgpPC9jb2RlPjwvYT4gaW4KKyAgICB0aGVpciBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb25zIHRvIHN0YXJ0IGFuZCBzdG9wIHRoZSBwcm9jZXNzaW5nIG9mIHRoZSBjb2xsZWNwYWRzLgorICAgIFRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXN0b3AiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3N0b3AgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NvbGxlY3RfcGFkc19zdG9wKCk8L2NvZGU+PC9hPiBjYWxsIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgdGhlIHBhcmVudAorICAgIGVsZW1lbnQgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIGluIHRoZSBQQVVTRURfVE9fUkVBRFkgc3RhdGUgY2hhbmdlIHRvIGVuc3VyZQorICAgIG5vIHBhZCBpcyBibG9ja2VkIGFuZCB0aGUgZWxlbWVudCBjYW4gZmluaXNoIHN0cmVhbWluZy4KKyAgPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLWNvbGxlY3QiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX2NvbGxlY3QgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NvbGxlY3RfcGFkc19jb2xsZWN0KCk8L2NvZGU+PC9hPiBhbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1jb2xsZWN0LXJhbmdlIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19jb2xsZWN0X3JhbmdlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jb2xsZWN0X3BhZHNfY29sbGVjdF9yYW5nZSgpPC9jb2RlPjwvYT4gY2FuIGJlIHVzZWQgYnkKKyAgICBlbGVtZW50cyB0aGF0IHN0YXJ0IGEgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0VGFzay5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+IHRvIGRyaXZlIHRoZSBjb2xsZWN0X3BhZHMuIFRoaXMgZmVhdHVyZSBpcyBob3dldmVyCisgICAgbm90IHlldCBpbXBsZW1lbnRlZC4KKyAgPC9wPjwvbGk+Cis8L3VsPjwvZGl2PgorPHA+Cis8L3A+Cis8cD4KK0xhc3QgcmV2aWV3ZWQgb24gMjAwNi0wNS0xMCAoMC4xMC42KQorPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RDb2xsZWN0UGFkcy5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0Q29sbGVjdERhdGEiPjwvYT48aDM+c3RydWN0IEdzdENvbGxlY3REYXRhPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0Q29sbGVjdERhdGEgeworICAvKiB3aXRoIExPQ0sgb2YgQGNvbGxlY3QgKi8KKyAgR3N0Q29sbGVjdFBhZHMgICAgICAgICpjb2xsZWN0OworICBHc3RQYWQgICAgICAgICAgICAgICAgKnBhZDsKKyAgR3N0QnVmZmVyICAgICAgICAgICAgICpidWZmZXI7CisgIGd1aW50ICAgICAgICAgICAgICAgICAgcG9zOworICBHc3RTZWdtZW50ICAgICAgICAgICAgIHNlZ21lbnQ7Cit9OworPC9wcmU+Cis8cD4KK1N0cnVjdHVyZSB1c2VkIGJ5IHRoZSBjb2xsZWN0X3BhZHMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdENvbGxlY3REYXRhLmNvbGxlY3QiPjwvYT5jb2xsZWN0PC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5vd25lciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RDb2xsZWN0RGF0YS5wYWQiPjwvYT5wYWQ8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBtYW5hZ2VkIGJ5IHRoaXMgZGF0YTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RDb2xsZWN0RGF0YS5idWZmZXIiPjwvYT5idWZmZXI8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPmN1cnJlbnRseSBxdWV1ZWQgYnVmZmVyLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RDb2xsZWN0RGF0YS5wb3MiPjwvYT5wb3M8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnBvc2l0aW9uIGluIHRoZSBidWZmZXI8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFNlZ21lbnQuaHRtbCNHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RDb2xsZWN0RGF0YS5zZWdtZW50Ij48L2E+c2VnbWVudDwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bGFzdCBzZWdtZW50IHJlY2VpdmVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdENvbGxlY3RQYWRzLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0Q29sbGVjdFBhZHM8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RDb2xsZWN0UGFkcyB7CisgIEdTTGlzdCAgICAgICAgKmRhdGE7ICAgICAgICAgICAgICAgICAgLyogbGlzdCBvZiBDb2xsZWN0RGF0YSBpdGVtcyAqLworfTsKKzwvcHJlPgorPHA+CitDb2xsZWN0cGFkcyBvYmplY3QuCitOb3RlIHRoYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4gaXMgb25seSByZWxpYWJsZSBmb3IgaXRlcmF0aW5nIHRoZSBsaXN0IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPgord2hlbiBpbnNpZGUgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3RQYWRzRnVuY3Rpb24iIHRpdGxlPSJHc3RDb2xsZWN0UGFkc0Z1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHNGdW5jdGlvbjwvc3Bhbj48L2E+IGNhbGxiYWNrLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU2luZ2x5LUxpbmtlZC1MaXN0cy5odG1sI0dTTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTTGlzdDwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0Q29sbGVjdFBhZHMtc3RydWN0LmRhdGEiPjwvYT5kYXRhPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0RGF0YSIgdGl0bGU9InN0cnVjdCBHc3RDb2xsZWN0RGF0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3REYXRhPC9zcGFuPjwvYT4gbWFuYWdlZCBieSB0aGlzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RDb2xsZWN0UGFkc0Z1bmN0aW9uIj48L2E+PGgzPkdzdENvbGxlY3RQYWRzRnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+ICAgICAgICgqR3N0Q29sbGVjdFBhZHNGdW5jdGlvbikgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4gKnBhZHM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBhbGwgcGFkcyBoYXZlIHJlY2VpdmVkIGRhdGEuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4gdGhhdCB0cmlnZ2VyZWQgdGhlIGNhbGxiYWNrPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhIHBhc3NlZCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXNldC1mdW5jdGlvbiIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfc2V0X2Z1bmN0aW9uICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jb2xsZWN0X3BhZHNfc2V0X2Z1bmN0aW9uKCk8L2NvZGU+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHU1QtRkxPVy1PSzpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0ZMT1dfT0s8L3NwYW4+PC9hPiBmb3Igc3VjY2VzczwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdENvbGxlY3RQYWRzQ2xpcEZ1bmN0aW9uIj48L2E+PGgzPkdzdENvbGxlY3RQYWRzQ2xpcEZ1bmN0aW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICogICAgICAgICAoKkdzdENvbGxlY3RQYWRzQ2xpcEZ1bmN0aW9uKSAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0EgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4gaXMgcmVjZWl2ZWQgb24gdGhlIHBhZCBtYW5hZ2VkCitieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPiBpbiB0aGUgY29sbGVjcGFkIG9iamVjdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkczwvY29kZT48L2VtPi4KKzwvcD4KKzxwPgorVGhlIGZ1bmN0aW9uIHNob3VsZCB1c2UgdGhlIHNlZ21lbnQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4gYW5kIHRoZSBuZWdvdGlhdGVkIG1lZGlhIHR5cGUgb24KK3RoZSBwYWQgdG8gcGVyZm9ybSBjbGlwcGluZyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+LiAKKzwvcD4KKzxwPgorVGhpcyBmdW5jdGlvbiB0YWtlcyBvd25lcnNoaXAgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWRzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZXIgZGF0YTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IHRoYXQgY29udGFpbnMgdGhlIGNsaXBwZWQgZGF0YSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+IG9yIE5VTEwgd2hlbgordGhlIGJ1ZmZlciBoYXMgYmVlbiBjbGlwcGVkIGNvbXBsZXRlbHkuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5Ij48L2E+PGgzPkdzdENvbGxlY3REYXRhRGVzdHJveU5vdGlmeSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICAoKkdzdENvbGxlY3REYXRhRGVzdHJveU5vdGlmeSkgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0EgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0RGF0YSIgdGl0bGU9InN0cnVjdCBHc3RDb2xsZWN0RGF0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3REYXRhPC9zcGFuPjwvYT4gd2lsbCBiZSBmcmVlZC4KK0l0IGlzIHBhc3NlZCB0aGUgcG9pbnRlciB0byB0aGUgc3RydWN0dXJlIGFuZCBzaG91bGQgZnJlZSBhbnkgY3VzdG9tCittZW1vcnkgYW5kIHJlc291cmNlcyBhbGxvY2F0ZWQgZm9yIGl0LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0RGF0YSIgdGl0bGU9InN0cnVjdCBHc3RDb2xsZWN0RGF0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3REYXRhPC9zcGFuPjwvYT4gdGhhdCB3aWxsIGJlIGZyZWVkPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jb2xsZWN0LXBhZHMtbmV3Ij48L2E+PGgzPmdzdF9jb2xsZWN0X3BhZHNfbmV3ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4gKiAgICBnc3RfY29sbGVjdF9wYWRzX25ldyAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPi4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+LCBvciBOVUxMIGluIGNhc2Ugb2YgYW4gZXJyb3IuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1zZXQtZnVuY3Rpb24iPjwvYT48aDM+Z3N0X2NvbGxlY3RfcGFkc19zZXRfZnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2NvbGxlY3RfcGFkc19zZXRfZnVuY3Rpb24gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPiAqcGFkczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0UGFkc0Z1bmN0aW9uIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHNGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzRnVuY3Rpb248L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0IHRoZSBjYWxsYmFjayBmdW5jdGlvbiBhbmQgdXNlciBkYXRhIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbgorYWxsIHRoZSBwYWRzIGFkZGVkIHRvIHRoZSBjb2xsZWN0aW9uIGhhdmUgYnVmZmVycyBxdWV1ZWQuCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY29sbGVjdHNwYWRzIHRvIHVzZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZnVuY3Rpb24gdG8gc2V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoaXMgcGFyYW1ldGVyIGlzIGEgJ3VzZXJfZGF0YScsIGZvciBjYWxsYmFja3M7IG1hbnkgYmluZGluZ3MgY2FuIHBhc3MgTlVMTCBoZXJlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmNsb3N1cmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY29sbGVjdC1wYWRzLXNldC1jbGlwLWZ1bmN0aW9uIj48L2E+PGgzPmdzdF9jb2xsZWN0X3BhZHNfc2V0X2NsaXBfZnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2NvbGxlY3RfcGFkc19zZXRfY2xpcF9mdW5jdGlvbiAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPiAqcGFkczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0UGFkc0NsaXBGdW5jdGlvbiIgdGl0bGU9IkdzdENvbGxlY3RQYWRzQ2xpcEZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHNDbGlwRnVuY3Rpb248L3NwYW4+PC9hPiBjbGlwZnVuYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0luc3RhbGwgYSBjbGlwcGluZyBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCByaWdodCBhZnRlciBhIGJ1ZmZlciBpcyByZWNlaXZlZAorb24gYSBwYWQgbWFuYWdlZCBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkczwvY29kZT48L2VtPi4gU2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3RQYWRzQ2xpcEZ1bmN0aW9uIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHNDbGlwRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkc0NsaXBGdW5jdGlvbjwvc3Bhbj48L2E+IGZvciBtb3JlIGluZm8uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY29sbGVjdHNwYWRzIHRvIHVzZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xpcGZ1bmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Y2xpcCBmdW5jdGlvbiB0byBpbnN0YWxsPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhIHRvIHBhc3MgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsaXBfZnVuYzwvY29kZT48L2VtPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iVGhpcyBwYXJhbWV0ZXIgaXMgYSAndXNlcl9kYXRhJywgZm9yIGNhbGxiYWNrczsgbWFueSBiaW5kaW5ncyBjYW4gcGFzcyBOVUxMIGhlcmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+Y2xvc3VyZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jb2xsZWN0LXBhZHMtYWRkLXBhZCI+PC9hPjxoMz5nc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENvbGxlY3REYXRhPC9zcGFuPjwvYT4gKiAgICBnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBZGQgYSBwYWQgdG8gdGhlIGNvbGxlY3Rpb24gb2YgY29sbGVjdCBwYWRzLiBUaGUgcGFkIGhhcyB0byBiZQorYSBzaW5rcGFkLiBUaGUgcmVmY291bnQgb2YgdGhlIHBhZCBpcyBpbmNyZW1lbnRlZC4gVXNlCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXJlbW92ZS1wYWQiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3JlbW92ZV9wYWQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NvbGxlY3RfcGFkc19yZW1vdmVfcGFkKCk8L2NvZGU+PC9hPiB0byByZW1vdmUgdGhlIHBhZCBmcm9tIHRoZSBjb2xsZWN0aW9uCithZ2Fpbi4KKzwvcD4KKzxwPgorVGhpcyBmdW5jdGlvbiB3aWxsIG92ZXJyaWRlIHRoZSBjaGFpbiBhbmQgZXZlbnQgZnVuY3Rpb25zIG9mIHRoZSBwYWQKK2Fsb25nIHdpdGggdGhlIGVsZW1lbnRfcHJpdmF0ZSBkYXRhLCB3aGljaCBpcyB1c2VkIHRvIHN0b3JlIHByaXZhdGUKK2luZm9ybWF0aW9uIGZvciB0aGUgY29sbGVjdHBhZHMuCis8L3A+Cis8cD4KK1lvdSBzcGVjaWZ5IGEgc2l6ZSBmb3IgdGhlIHJldHVybmVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUKK3NvIHRoYXQgeW91IGNhbiB1c2UgaXQgdG8gc3RvcmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKzwvcD4KKzxwPgorVGhlIHBhZCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYWN0aXZhdGVkIGluIHB1c2ggbW9kZSB3aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWRzPC9jb2RlPjwvZW0+IGlzCitzdGFydGVkLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIGNhbGxzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtYWRkLXBhZC1mdWxsIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkX2Z1bGwgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkX2Z1bGwoKTwvY29kZT48L2E+IHBhc3NpbmcgYSB2YWx1ZSBvZiBOVUxMCitmb3IgZGVzdHJveV9ub3RpZnkuCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY29sbGVjdHNwYWRzIHRvIHVzZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwYWQgdG8gYWRkLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBzaXplIG9mIHRoZSByZXR1cm5lZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0RGF0YSIgdGl0bGU9InN0cnVjdCBHc3RDb2xsZWN0RGF0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3REYXRhPC9zcGFuPjwvYT4gc3RydWN0dXJlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGEiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29sbGVjdERhdGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0RGF0YTwvc3Bhbj48L2E+IHRvIGlkZW50aWZ5IHRoZSBuZXcgcGFkLiBPciBOVUxMCitpZiB3cm9uZyBwYXJhbWV0ZXJzIGFyZSBzdXBwbGllZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY29sbGVjdC1wYWRzLWFkZC1wYWQtZnVsbCI+PC9hPjxoMz5nc3RfY29sbGVjdF9wYWRzX2FkZF9wYWRfZnVsbCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGEiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29sbGVjdERhdGEiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPiAqICAgIGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZF9mdWxsICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4gKnBhZHM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0RGF0YURlc3Ryb3lOb3RpZnkiIHRpdGxlPSJHc3RDb2xsZWN0RGF0YURlc3Ryb3lOb3RpZnkgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0RGF0YURlc3Ryb3lOb3RpZnk8L3NwYW4+PC9hPiBkZXN0cm95X25vdGlmeTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0FkZCBhIHBhZCB0byB0aGUgY29sbGVjdGlvbiBvZiBjb2xsZWN0IHBhZHMuIFRoZSBwYWQgaGFzIHRvIGJlCithIHNpbmtwYWQuIFRoZSByZWZjb3VudCBvZiB0aGUgcGFkIGlzIGluY3JlbWVudGVkLiBVc2UKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtcmVtb3ZlLXBhZCIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY29sbGVjdF9wYWRzX3JlbW92ZV9wYWQoKTwvY29kZT48L2E+IHRvIHJlbW92ZSB0aGUgcGFkIGZyb20gdGhlIGNvbGxlY3Rpb24KK2FnYWluLgorPC9wPgorPHA+CitZb3Ugc3BlY2lmeSBhIHNpemUgZm9yIHRoZSByZXR1cm5lZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0RGF0YSIgdGl0bGU9InN0cnVjdCBHc3RDb2xsZWN0RGF0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3REYXRhPC9zcGFuPjwvYT4gc3RydWN0dXJlCitzbyB0aGF0IHlvdSBjYW4gdXNlIGl0IHRvIHN0b3JlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCis8L3A+Cis8cD4KK1lvdSBjYW4gYWxzbyBzcGVjaWZ5IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5IiB0aXRsZT0iR3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5ICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT4gdGhhdCB3aWxsIGJlIGNhbGxlZAoranVzdCBiZWZvcmUgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUgaXMgZnJlZWQuIEl0IGlzIHBhc3NlZCB0aGUKK3BvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSBhbmQgc2hvdWxkIGZyZWUgYW55IGN1c3RvbSBtZW1vcnkgYW5kIHJlc291cmNlcworYWxsb2NhdGVkIGZvciBpdC4KKzwvcD4KKzxwPgorVGhlIHBhZCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYWN0aXZhdGVkIGluIHB1c2ggbW9kZSB3aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWRzPC9jb2RlPjwvZW0+IGlzCitzdGFydGVkLgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGNvbGxlY3RzcGFkcyB0byB1c2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGFkIHRvIGFkZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2l6ZSBvZiB0aGUgcmV0dXJuZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGEiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29sbGVjdERhdGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0RGF0YTwvc3Bhbj48L2E+IHN0cnVjdHVyZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdHJveV9ub3RpZnk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGJlZm9yZSB0aGUgcmV0dXJuZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGEiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29sbGVjdERhdGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0RGF0YTwvc3Bhbj48L2E+CitzdHJ1Y3R1cmUgaXMgZnJlZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0RGF0YSIgdGl0bGU9InN0cnVjdCBHc3RDb2xsZWN0RGF0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3REYXRhPC9zcGFuPjwvYT4gdG8gaWRlbnRpZnkgdGhlIG5ldyBwYWQuIE9yIE5VTEwKK2lmIHdyb25nIHBhcmFtZXRlcnMgYXJlIHN1cHBsaWVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jb2xsZWN0LXBhZHMtcmVtb3ZlLXBhZCI+PC9hPjxoMz5nc3RfY29sbGVjdF9wYWRzX3JlbW92ZV9wYWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2NvbGxlY3RfcGFkc19yZW1vdmVfcGFkICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPiAqcGFkczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZW1vdmUgYSBwYWQgZnJvbSB0aGUgY29sbGVjdGlvbiBvZiBjb2xsZWN0IHBhZHMuIFRoaXMgZnVuY3Rpb24gd2lsbCBhbHNvCitmcmVlIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0RGF0YSIgdGl0bGU9InN0cnVjdCBHc3RDb2xsZWN0RGF0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3REYXRhPC9zcGFuPjwvYT4gYW5kIGFsbCB0aGUgcmVzb3VyY2VzIHRoYXQgd2VyZSBhbGxvY2F0ZWQgd2l0aAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1hZGQtcGFkIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZCgpPC9jb2RlPjwvYT4uCis8L3A+Cis8cD4KK1RoZSBwYWQgd2lsbCBiZSBkZWFjdGl2YXRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZHM8L2NvZGU+PC9lbT4gaXMgc3RvcHBlZC4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWRzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjb2xsZWN0c3BhZHMgdG8gdXNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBhZCB0byByZW1vdmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBwYWQgY291bGQgYmUgcmVtb3ZlZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY29sbGVjdC1wYWRzLWlzLWFjdGl2ZSI+PC9hPjxoMz5nc3RfY29sbGVjdF9wYWRzX2lzX2FjdGl2ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfY29sbGVjdF9wYWRzX2lzX2FjdGl2ZSAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NoZWNrIGlmIGEgcGFkIGlzIGFjdGl2ZS4KKzwvcD4KKzxwPgorVGhpcyBmdW5jdGlvbiBpcyBjdXJyZW50bHkgbm90IGltcGxlbWVudGVkLgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGNvbGxlY3RzcGFkcyB0byB1c2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGFkIHRvIGNoZWNrPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgcGFkIGlzIGFjdGl2ZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY29sbGVjdC1wYWRzLWNvbGxlY3QiPjwvYT48aDM+Z3N0X2NvbGxlY3RfcGFkc19jb2xsZWN0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiAgICAgICBnc3RfY29sbGVjdF9wYWRzX2NvbGxlY3QgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ29sbGVjdCBkYXRhIG9uIGFsbCBwYWRzLiBUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkCitmcm9tIGEgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0VGFzay5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+IGZ1bmN0aW9uIGluIGFuIGVsZW1lbnQuCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gaXMgY3VycmVudGx5IG5vdCBpbXBsZW1lbnRlZC4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWRzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjb2xsZWN0c3BhZHMgdG8gdXNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+IG9mIHRoZSBvcGVyYXRpb24uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1jb2xsZWN0LXJhbmdlIj48L2E+PGgzPmdzdF9jb2xsZWN0X3BhZHNfY29sbGVjdF9yYW5nZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4gICAgICAgZ3N0X2NvbGxlY3RfcGFkc19jb2xsZWN0X3JhbmdlICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPiAqcGFkczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBsZW5ndGg8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb2xsZWN0IGRhdGEgd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGVuZ3RoPC9jb2RlPjwvZW0+IG9uIGFsbCBwYWRzLiBUaGlzIGZ1bmN0aW9uCitpcyB0eXBpY2FsbHkgY2FsbGVkIGluIHRoZSBnZXRyYW5nZSBmdW5jdGlvbiBvZiBhbiBlbGVtZW50LgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIGlzIGN1cnJlbnRseSBub3QgaW1wbGVtZW50ZWQuCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY29sbGVjdHNwYWRzIHRvIHVzZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBvZmZzZXQgdG8gY29sbGVjdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGVuZ3RoPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBsZW5ndGggdG8gY29sbGVjdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiBvZiB0aGUgb3BlcmF0aW9uLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jb2xsZWN0LXBhZHMtc3RhcnQiPjwvYT48aDM+Z3N0X2NvbGxlY3RfcGFkc19zdGFydCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfY29sbGVjdF9wYWRzX3N0YXJ0ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU3RhcnRzIHRoZSBwcm9jZXNzaW5nIG9mIGRhdGEgaW4gdGhlIGNvbGxlY3RfcGFkcy4KKzwvcD4KKzxwPgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY29sbGVjdHNwYWRzIHRvIHVzZTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY29sbGVjdC1wYWRzLXN0b3AiPjwvYT48aDM+Z3N0X2NvbGxlY3RfcGFkc19zdG9wICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9jb2xsZWN0X3BhZHNfc3RvcCAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4gKnBhZHM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTdG9wcyB0aGUgcHJvY2Vzc2luZyBvZiBkYXRhIGluIHRoZSBjb2xsZWN0X3BhZHMuIHRoaXMgZnVuY3Rpb24KK3dpbGwgYWxzbyB1bmJsb2NrIGFueSBibG9ja2luZyBvcGVyYXRpb25zLgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWRzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjb2xsZWN0c3BhZHMgdG8gdXNlPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jb2xsZWN0LXBhZHMtc2V0LWZsdXNoaW5nIj48L2E+PGgzPmdzdF9jb2xsZWN0X3BhZHNfc2V0X2ZsdXNoaW5nICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9jb2xsZWN0X3BhZHNfc2V0X2ZsdXNoaW5nICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4gKnBhZHM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBmbHVzaGluZzwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NoYW5nZSB0aGUgZmx1c2hpbmcgc3RhdGUgb2YgYWxsIHRoZSBwYWRzIGluIHRoZSBjb2xsZWN0aW9uLiBObyBwYWQKK2lzIGFibGUgdG8gYWNjZXB0IGFueW1vcmUgZGF0YSB3aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbHVzaGluZzwvY29kZT48L2VtPiBpcyA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPi4gQ2FsbGluZyB0aGlzCitmdW5jdGlvbiB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbHVzaGluZzwvY29kZT48L2VtPiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG1ha2VzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWRzPC9jb2RlPjwvZW0+IGFjY2VwdCBkYXRhIGFnYWluLgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGNvbGxlY3RzcGFkcyB0byB1c2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZsdXNoaW5nPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmRlc2lyZWQgc3RhdGUgb2YgdGhlIHBhZHM8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjcuPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY29sbGVjdC1wYWRzLXBlZWsiPjwvYT48aDM+Z3N0X2NvbGxlY3RfcGFkc19wZWVrICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICogICAgICAgICBnc3RfY29sbGVjdF9wYWRzX3BlZWsgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1BlZWsgYXQgdGhlIGJ1ZmZlciBjdXJyZW50bHkgcXVldWVkIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+LiBUaGlzIGZ1bmN0aW9uCitzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWRzPC9jb2RlPjwvZW0+IExPQ0sgaGVsZCwgc3VjaCBhcyBpbiB0aGUgY2FsbGJhY2sKK2hhbmRsZXIuCis8L3A+Cis8cD4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY29sbGVjdHNwYWRzIHRvIHBlZWs8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGRhdGEgdG8gdXNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGJ1ZmZlciBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPiBvciBOVUxMIGlmIG5vIGJ1ZmZlciBpcyBxdWV1ZWQuCitzaG91bGQgdW5yZWYgdGhlIGJ1ZmZlciBhZnRlciB1c2FnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jb2xsZWN0LXBhZHMtcG9wIj48L2E+PGgzPmdzdF9jb2xsZWN0X3BhZHNfcG9wICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICogICAgICAgICBnc3RfY29sbGVjdF9wYWRzX3BvcCAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1BvcCB0aGUgYnVmZmVyIGN1cnJlbnRseSBxdWV1ZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4uIFRoaXMgZnVuY3Rpb24KK3Nob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZHM8L2NvZGU+PC9lbT4gTE9DSyBoZWxkLCBzdWNoIGFzIGluIHRoZSBjYWxsYmFjaworaGFuZGxlci4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ3N0X2J1ZmZlcl91bnJlZgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGNvbGxlY3RzcGFkcyB0byBwb3A8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGRhdGEgdG8gdXNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGJ1ZmZlciBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPiBvciBOVUxMIGlmIG5vIGJ1ZmZlciB3YXMKK3F1ZXVlZC4gWW91IHNob3VsZCB1bnJlZiB0aGUgYnVmZmVyIGFmdGVyIHVzYWdlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1hdmFpbGFibGUiPjwvYT48aDM+Z3N0X2NvbGxlY3RfcGFkc19hdmFpbGFibGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgZ3N0X2NvbGxlY3RfcGFkc19hdmFpbGFibGUgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPiAqcGFkczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1F1ZXJ5IGhvdyBtdWNoIGJ5dGVzIGNhbiBiZSByZWFkIGZyb20gZWFjaCBxdWV1ZWQgYnVmZmVyLiBUaGlzIG1lYW5zCit0aGF0IHRoZSByZXN1bHQgb2YgdGhpcyBjYWxsIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGF0IGNhbgorYmUgcmVhZCBmcm9tIGVhY2ggb2YgdGhlIHBhZHMuCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWRzPC9jb2RlPjwvZW0+IExPQ0sgaGVsZCwgc3VjaCBhcworaW4gdGhlIGNhbGxiYWNrLgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGNvbGxlY3RzcGFkcyB0byBxdWVyeTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBxdWV1ZWQgb24gYWxsIHBhZHMuIFRoaXMgZnVuY3Rpb24KK3JldHVybnMgMCBpZiBhIHBhZCBoYXMgbm8gcXVldWVkIGJ1ZmZlci48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY29sbGVjdC1wYWRzLXJlYWQtYnVmZmVyIj48L2E+PGgzPmdzdF9jb2xsZWN0X3BhZHNfcmVhZF9idWZmZXIgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKiAgICAgICAgIGdzdF9jb2xsZWN0X3BhZHNfcmVhZF9idWZmZXIgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4gKnBhZHM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGEiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29sbGVjdERhdGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0RGF0YTwvc3Bhbj48L2E+ICpkYXRhPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCBhIGJ1ZmZlciBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPiBieXRlcyBmcm9tIHRoZSBnaXZlbiBwYWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4uCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWRzPC9jb2RlPjwvZW0+IExPQ0sgaGVsZCwgc3VjaCBhcyBpbiB0aGUgY2FsbGJhY2suCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdzdF9idWZmZXJfdW5yZWYKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWRzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjb2xsZWN0c3BhZHMgdG8gcXVlcnk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGRhdGEgdG8gdXNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGNhbiBiZSBsZXNzCit0aGF0IHJlcXVlc3RlZC4gQSByZXR1cm4gb2YgTlVMTCBzaWduYWxzIHRoYXQgdGhlIHBhZCBpcyBlbmQtb2Ytc3RyZWFtLgorVW5yZWYgdGhlIGJ1ZmZlciB3aXRoIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXVucmVmIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfdW5yZWYoKTwvY29kZT48L2E+IGFmdGVyIHVzZS4KK01UIHNhZmUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjE4PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY29sbGVjdC1wYWRzLXRha2UtYnVmZmVyIj48L2E+PGgzPmdzdF9jb2xsZWN0X3BhZHNfdGFrZV9idWZmZXIgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKiAgICAgICAgIGdzdF9jb2xsZWN0X3BhZHNfdGFrZV9idWZmZXIgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4gKnBhZHM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGEiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29sbGVjdERhdGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0RGF0YTwvc3Bhbj48L2E+ICpkYXRhPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldCBhIGJ1ZmZlciBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPiBieXRlcyBmcm9tIHRoZSBnaXZlbiBwYWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4uIEZsdXNoZXMgdGhlIGFtb3VudAorb2YgcmVhZCBieXRlcy4KKzwvcD4KKzxwPgorVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZHM8L2NvZGU+PC9lbT4gTE9DSyBoZWxkLCBzdWNoIGFzIGluIHRoZSBjYWxsYmFjay4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ3N0X2J1ZmZlcl91bnJlZgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGNvbGxlY3RzcGFkcyB0byBxdWVyeTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZGF0YSB0byB1c2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgY2FuIGJlIGxlc3MKK3RoYXQgcmVxdWVzdGVkLiBBIHJldHVybiBvZiBOVUxMIHNpZ25hbHMgdGhhdCB0aGUgcGFkIGlzIGVuZC1vZi1zdHJlYW0uCitVbnJlZiB0aGUgYnVmZmVyIGFmdGVyIHVzZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTg8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jb2xsZWN0LXBhZHMtZmx1c2giPjwvYT48aDM+Z3N0X2NvbGxlY3RfcGFkc19mbHVzaCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICBnc3RfY29sbGVjdF9wYWRzX2ZsdXNoICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitGbHVzaCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPiBieXRlcyBmcm9tIHRoZSBwYWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4uCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWRzPC9jb2RlPjwvZW0+IExPQ0sgaGVsZCwgc3VjaCBhcworaW4gdGhlIGNhbGxiYWNrLgorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGNvbGxlY3RzcGFkcyB0byBxdWVyeTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZGF0YSB0byB1c2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG51bWJlciBvZiBieXRlcyB0byBmbHVzaDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBudW1iZXIgb2YgYnl0ZXMgZmx1c2hlZC4gVGhpcyBjYW4gYmUgbGVzcyB0aGFuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+IGFuZAoraXMgMCBpZiB0aGUgcGFkIHdhcyBlbmQtb2Ytc3RyZWFtLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvR3N0Q29udHJvbFNvdXJjZS5odG1sIGIvZG9jcy9saWJzL2h0bWwvR3N0Q29udHJvbFNvdXJjZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMjU4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2xpYnMvaHRtbC9Hc3RDb250cm9sU291cmNlLmh0bWwKQEAgLTAsMCArMSw0MDcgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5Hc3RDb250cm9sU291cmNlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZ3N0cmVhbWVyLWNvbnRyb2wuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBEeW5hbWljIFBhcmFtZXRlciBDb250cm9sIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sIiB0aXRsZT0iR3N0Q29udHJvbGxlciI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iZ3N0cmVhbWVyLWNvbnRyb2wuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIDAuMTEgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjR3N0Q29udHJvbFNvdXJjZS5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdENvbnRyb2xTb3VyY2UuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdENvbnRyb2xTb3VyY2Uub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9IkdzdENvbnRyb2xTb3VyY2UiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RDb250cm9sU291cmNlLnRvcF9vZl9wYWdlIj48L2E+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2gyPgorPHA+R3N0Q29udHJvbFNvdXJjZSDigJQgYmFzZSBjbGFzcyBmb3IgY29udHJvbCBzb3VyY2Ugc291cmNlczwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9IkdzdENvbnRyb2xTb3VyY2Uuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2xpYnMvY29udHJvbGxlci9nc3Rjb250cm9sc291cmNlLmgmZ3Q7CisKK3N0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sU291cmNlLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RDb250cm9sU291cmNlIj5Hc3RDb250cm9sU291cmNlPC9hPjsKK3N0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sU291cmNlQ2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29udHJvbFNvdXJjZUNsYXNzIj5Hc3RDb250cm9sU291cmNlQ2xhc3M8L2E+OworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sU291cmNlQmluZCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2VCaW5kICgpIj4qR3N0Q29udHJvbFNvdXJjZUJpbmQ8L2E+KSAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR1BhcmFtU3BlYy5odG1sI0dQYXJhbVNwZWMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUGFyYW1TcGVjPC9zcGFuPjwvYT4gKnBzcGVjPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlICgpIj4qR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlPC9hPikgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZXN0YW1wPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5ICgpIj4qR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXk8L2E+KSAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZXN0YW1wPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0VmFsdWVBcnJheSIgdGl0bGU9InN0cnVjdCBHc3RWYWx1ZUFycmF5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VmFsdWVBcnJheTwvc3Bhbj48L2E+ICp2YWx1ZV9hcnJheTwvY29kZT48L2VtPik7CitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0VGltZWRWYWx1ZSIgdGl0bGU9InN0cnVjdCBHc3RUaW1lZFZhbHVlIj5Hc3RUaW1lZFZhbHVlPC9hPjsKK3N0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RWYWx1ZUFycmF5IiB0aXRsZT0ic3RydWN0IEdzdFZhbHVlQXJyYXkiPkdzdFZhbHVlQXJyYXk8L2E+OworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sI2dzdC1jb250cm9sLXNvdXJjZS1iaW5kIiB0aXRsZT0iZ3N0X2NvbnRyb2xfc291cmNlX2JpbmQgKCkiPmdzdF9jb250cm9sX3NvdXJjZV9iaW5kPC9hPiAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR1BhcmFtU3BlYy5odG1sI0dQYXJhbVNwZWMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUGFyYW1TcGVjPC9zcGFuPjwvYT4gKnBzcGVjPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNnc3QtY29udHJvbC1zb3VyY2UtZ2V0LXZhbHVlIiB0aXRsZT0iZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZSAoKSI+Z3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZTwvYT4gICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lc3RhbXA8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjZ3N0LWNvbnRyb2wtc291cmNlLWdldC12YWx1ZS1hcnJheSIgdGl0bGU9ImdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWVfYXJyYXkgKCkiPmdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWVfYXJyYXk8L2E+ICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZXN0YW1wPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0VmFsdWVBcnJheSIgdGl0bGU9InN0cnVjdCBHc3RWYWx1ZUFycmF5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VmFsdWVBcnJheTwvc3Bhbj48L2E+ICp2YWx1ZV9hcnJheTwvY29kZT48L2VtPik7Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0Q29udHJvbFNvdXJjZS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+R09iamVjdDwvYT4KKyAgICstLS0tR3N0Q29udHJvbFNvdXJjZQorICAgICAgICAgKy0tLS08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlIj5Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZTwvYT4KKyAgICAgICAgICstLS0tPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdExGT0NvbnRyb2xTb3VyY2UiPkdzdExGT0NvbnRyb2xTb3VyY2U8L2E+Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0Q29udHJvbFNvdXJjZS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK1RoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiBpcyBhIGJhc2UgY2xhc3MgZm9yIGNvbnRyb2wgdmFsdWUgc291cmNlcyB0aGF0IGNvdWxkCitiZSB1c2VkIGJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sbGVyLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sbGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbGxlcjwvc3Bhbj48L2E+IHRvIGdldCB0aW1lc3RhbXAtdmFsdWUgcGFpcnMuCis8L3A+Cis8cD4KK0EgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4gaXMgdXNlZCBieSBmaXJzdCBnZXR0aW5nIGFuIGluc3RhbmNlLCBiaW5kaW5nIGl0IHRvIGEKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR1BhcmFtU3BlYy5odG1sI0dQYXJhbVNwZWMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUGFyYW1TcGVjPC9zcGFuPjwvYT4gKGZvciBleGFtcGxlIGJ5IHVzaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sbGVyLmh0bWwjZ3N0LWNvbnRyb2xsZXItc2V0LWNvbnRyb2wtc291cmNlIiB0aXRsZT0iZ3N0X2NvbnRyb2xsZXJfc2V0X2NvbnRyb2xfc291cmNlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jb250cm9sbGVyX3NldF9jb250cm9sX3NvdXJjZSgpPC9jb2RlPjwvYT4pIGFuZAordGhlbiBieSBoYXZpbmcgaXQgdXNlZCBieSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sbGVyPC9zcGFuPjwvYT4gb3IgY2FsbGluZworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNnc3QtY29udHJvbC1zb3VyY2UtZ2V0LXZhbHVlIiB0aXRsZT0iZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY29udHJvbF9zb3VyY2VfZ2V0X3ZhbHVlKCk8L2NvZGU+PC9hPiBvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sI2dzdC1jb250cm9sLXNvdXJjZS1nZXQtdmFsdWUtYXJyYXkiIHRpdGxlPSJnc3RfY29udHJvbF9zb3VyY2VfZ2V0X3ZhbHVlX2FycmF5ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWVfYXJyYXkoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitGb3IgaW1wbGVtZW50aW5nIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+IG9uZSBoYXMgdG8gaW1wbGVtZW50IGEKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZUJpbmQiIHRpdGxlPSJHc3RDb250cm9sU291cmNlQmluZCAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2VCaW5kPC9zcGFuPjwvYT4gbWV0aG9kLCB3aGljaCB3aWxsIGRlcGVuZGluZyBvbiB0aGUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HUGFyYW1TcGVjLmh0bWwjR1BhcmFtU3BlYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdQYXJhbVNwZWM8L3NwYW4+PC9hPiBzZXQgdXAKK3RoZSBjb250cm9sIHNvdXJjZSBmb3IgdXNlIGFuZCBzZXRzIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZTwvc3Bhbj48L2E+IGFuZAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5ICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXk8L3NwYW4+PC9hPiBmdW5jdGlvbnMuIFRoZXNlIGFyZSB0aGVuIHVzZWQgYnkKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjZ3N0LWNvbnRyb2wtc291cmNlLWdldC12YWx1ZSIgdGl0bGU9ImdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZSgpPC9jb2RlPjwvYT4gb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNnc3QtY29udHJvbC1zb3VyY2UtZ2V0LXZhbHVlLWFycmF5IiB0aXRsZT0iZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZV9hcnJheSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY29udHJvbF9zb3VyY2VfZ2V0X3ZhbHVlX2FycmF5KCk8L2NvZGU+PC9hPgordG8gZ2V0IHZhbHVlcyBmb3Igc3BlY2lmaWMgdGltZXN0YW1wcy4KKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0Q29udHJvbFNvdXJjZS5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0Q29udHJvbFNvdXJjZS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdENvbnRyb2xTb3VyY2U8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RDb250cm9sU291cmNlIHsKKyAgR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlIGdldF92YWx1ZTsgICAgICAgICAgICAgLyogUmV0dXJucyB0aGUgdmFsdWUgZm9yIGEgcHJvcGVydHkgYXQgYSBnaXZlbiB0aW1lc3RhbXAgKi8KKyAgR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkgZ2V0X3ZhbHVlX2FycmF5OyAgLyogUmV0dXJucyB2YWx1ZXMgZm9yIGEgcHJvcGVydHkgaW4gYSBnaXZlbiB0aW1lc3BhbiAqLworfTsKKzwvcHJlPgorPHA+CitUaGUgaW5zdGFuY2Ugc3RydWN0dXJlIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sU291cmNlR2V0VmFsdWUiIHRpdGxlPSJHc3RDb250cm9sU291cmNlR2V0VmFsdWUgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlR2V0VmFsdWU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0Q29udHJvbFNvdXJjZS1zdHJ1Y3QuZ2V0LXZhbHVlIj48L2E+Z2V0X3ZhbHVlPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5GdW5jdGlvbiBmb3IgcmV0dXJuaW5nIGEgdmFsdWUgZm9yIGEgZ2l2ZW4gdGltZXN0YW1wPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkiIHRpdGxlPSJHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdENvbnRyb2xTb3VyY2Utc3RydWN0LmdldC12YWx1ZS1hcnJheSI+PC9hPmdldF92YWx1ZV9hcnJheTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+RnVuY3Rpb24gZm9yIHJldHVybmluZyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0VmFsdWVBcnJheSIgdGl0bGU9InN0cnVjdCBHc3RWYWx1ZUFycmF5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VmFsdWVBcnJheTwvc3Bhbj48L2E+IGZvciBhIGdpdmVuIHRpbWVzdGFtcDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdENvbnRyb2xTb3VyY2VDbGFzcyI+PC9hPjxoMz5zdHJ1Y3QgR3N0Q29udHJvbFNvdXJjZUNsYXNzPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0Q29udHJvbFNvdXJjZUNsYXNzIHsKKyAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKyAgCisgIEdzdENvbnRyb2xTb3VyY2VCaW5kIGJpbmQ7ICAvKiBCaW5kcyB0aGUgR3N0Q29udHJvbFNvdXJjZSB0byBhIHNwZWNpZmljIEdQYXJhbVNwZWMgKi8KK307Cis8L3ByZT4KKzxwPgorVGhlIGNsYXNzIHN0cnVjdHVyZSBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Q2xhc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0Q2xhc3M8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0Q29udHJvbFNvdXJjZUNsYXNzLnBhcmVudC1jbGFzcyI+PC9hPnBhcmVudF9jbGFzczwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UGFyZW50IGNsYXNzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZUJpbmQiIHRpdGxlPSJHc3RDb250cm9sU291cmNlQmluZCAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2VCaW5kPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdENvbnRyb2xTb3VyY2VDbGFzcy5iaW5kIj48L2E+YmluZDwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Q2xhc3MgbWV0aG9kIGZvciBiaW5kaW5nIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiB0byBhIHNwZWNpZmljIEdQYXJhbVNwZWM8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RDb250cm9sU291cmNlQmluZCI+PC9hPjxoMz5Hc3RDb250cm9sU291cmNlQmluZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAoKkdzdENvbnRyb2xTb3VyY2VCaW5kKSAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR1BhcmFtU3BlYy5odG1sI0dQYXJhbVNwZWMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUGFyYW1TcGVjPC9zcGFuPjwvYT4gKnBzcGVjPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRnVuY3Rpb24gZm9yIGJpbmRpbmcgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiB0byBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR1BhcmFtU3BlYy5odG1sI0dQYXJhbVNwZWMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUGFyYW1TcGVjPC9zcGFuPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VsZjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBzcGVjPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HUGFyYW1TcGVjLmh0bWwjR1BhcmFtU3BlYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdQYXJhbVNwZWM8L3NwYW4+PC9hPiB0aGF0IHNob3VsZCBiZSBib3VuZCB0bzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHByb3BlcnR5IGNvdWxkIGJlIGJvdW5kIHRvIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlIj48L2E+PGgzPkdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAoKkdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZXN0YW1wPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitGdW5jdGlvbiBmb3IgcmV0dXJuaW5nIGEgdmFsdWUgZm9yIGEgZ2l2ZW4gdGltZXN0YW1wLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlbGY8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50aW1lc3RhbXA8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGltZXN0YW1wIGZvciB3aGljaCBhIHZhbHVlIHNob3VsZCBiZSBjYWxjdWxhdGVkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB3aGljaCB3aWxsIGJlIHNldCB0byB0aGUgcmVzdWx0LiBJdCBtdXN0IGJlIGluaXRpYWxpemVkIHRvIHRoZSBjb3JyZWN0IHR5cGUuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdmFsdWUgd2FzIHN1Y2Nlc3NmdWxseSBjYWxjdWxhdGVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5Ij48L2E+PGgzPkdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICgqR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkpICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lc3RhbXA8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RWYWx1ZUFycmF5IiB0aXRsZT0ic3RydWN0IEdzdFZhbHVlQXJyYXkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWYWx1ZUFycmF5PC9zcGFuPjwvYT4gKnZhbHVlX2FycmF5PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRnVuY3Rpb24gZm9yIHJldHVybmluZyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0VmFsdWVBcnJheSIgdGl0bGU9InN0cnVjdCBHc3RWYWx1ZUFycmF5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VmFsdWVBcnJheTwvc3Bhbj48L2E+IGZvciBhIGdpdmVuIHRpbWVzdGFtcC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWxmPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZXN0YW1wPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRpbWVzdGFtcCBmb3Igd2hpY2ggYSB2YWx1ZSBzaG91bGQgYmUgY2FsY3VsYXRlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWVfYXJyYXk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YXJyYXkgdG8gcHV0IGNvbnRyb2wtdmFsdWVzIGluPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdmFsdWVzIHdlcmUgc3VjY2Vzc2Z1bGx5IGNhbGN1bGF0ZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0VGltZWRWYWx1ZSI+PC9hPjxoMz5zdHJ1Y3QgR3N0VGltZWRWYWx1ZTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFRpbWVkVmFsdWUgeworICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wOworICBHVmFsdWUgdmFsdWU7Cit9OworPC9wcmU+Cis8cD4KK1N0cnVjdHVyZSBmb3Igc2F2aW5nIGEgdGltZXN0YW1wIGFuZCBhIHZhbHVlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0VGltZWRWYWx1ZS50aW1lc3RhbXAiPjwvYT50aW1lc3RhbXA8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnRpbWVzdGFtcCBvZiB0aGUgdmFsdWUgY2hhbmdlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0VGltZWRWYWx1ZS52YWx1ZSI+PC9hPnZhbHVlPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY29ycmVzcG9uZGluZyB2YWx1ZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFZhbHVlQXJyYXkiPjwvYT48aDM+c3RydWN0IEdzdFZhbHVlQXJyYXk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RWYWx1ZUFycmF5IHsKKyAgY29uc3QgZ2NoYXIgKnByb3BlcnR5X25hbWU7CisgIGdpbnQgbmJzYW1wbGVzOworICBHc3RDbG9ja1RpbWUgc2FtcGxlX2ludGVydmFsOworICBncG9pbnRlciAqdmFsdWVzOworfTsKKzwvcHJlPgorPHA+CitTdHJ1Y3R1cmUgdG8gcmVjZWl2ZSBtdWx0aXBsZSB2YWx1ZXMgYXQgb25jZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNvbnN0wqA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0VmFsdWVBcnJheS5wcm9wZXJ0eS1uYW1lIj48L2E+cHJvcGVydHlfbmFtZTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRoaXMgYXJyYXkgYmVsb25ncyB0bzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0VmFsdWVBcnJheS5uYnNhbXBsZXMiPjwvYT5uYnNhbXBsZXM8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPm51bWJlciBvZiBzYW1wbGVzIHJlcXVlc3RlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RWYWx1ZUFycmF5LnNhbXBsZS1pbnRlcnZhbCI+PC9hPnNhbXBsZV9pbnRlcnZhbDwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+aW50ZXJ2YWwgYmV0d2VlbiBlYWNoIHNhbXBsZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0VmFsdWVBcnJheS52YWx1ZXMiPjwvYT52YWx1ZXM8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnBvaW50ZXIgdG8gdGhlIGFycmF5PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNvbnRyb2wtc291cmNlLWJpbmQiPjwvYT48aDM+Z3N0X2NvbnRyb2xfc291cmNlX2JpbmQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2NvbnRyb2xfc291cmNlX2JpbmQgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdQYXJhbVNwZWMuaHRtbCNHUGFyYW1TcGVjIj48c3BhbiBjbGFzcz0idHlwZSI+R1BhcmFtU3BlYzwvc3Bhbj48L2E+ICpwc3BlYzwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0JpbmRzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4gdG8gYSBzcGVjaWZpYyBwcm9wZXJ0eS4gVGhpcyBtdXN0IGJlIGNhbGxlZCBvbmx5IG9uY2UgZm9yIGEKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlbGY8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+IG9iamVjdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHNwZWM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdQYXJhbVNwZWMuaHRtbCNHUGFyYW1TcGVjIj48c3BhbiBjbGFzcz0idHlwZSI+R1BhcmFtU3BlYzwvc3Bhbj48L2E+IGZvciB0aGUgcHJvcGVydHkgZm9yIHdoaWNoIHRoaXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4gc2hvdWxkIGdlbmVyYXRlIHZhbHVlcy48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiB3YXMgYm91bmQgY29ycmVjdGx5LCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY29udHJvbC1zb3VyY2UtZ2V0LXZhbHVlIj48L2E+PGgzPmdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZSAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRpbWVzdGFtcDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgdmFsdWUgZm9yIHRoaXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4gYXQgYSBnaXZlbiB0aW1lc3RhbXAuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VsZjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4gb2JqZWN0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50aW1lc3RhbXA8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHRpbWUgZm9yIHdoaWNoIHRoZSB2YWx1ZSBzaG91bGQgYmUgcmV0dXJuZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB2YWx1ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkZBTFNFIGlmIHRoZSB2YWx1ZSBjb3VsZG4ndCBiZSByZXR1cm5lZCwgVFJVRSBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNvbnRyb2wtc291cmNlLWdldC12YWx1ZS1hcnJheSI+PC9hPjxoMz5nc3RfY29udHJvbF9zb3VyY2VfZ2V0X3ZhbHVlX2FycmF5ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWVfYXJyYXkgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lc3RhbXA8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RWYWx1ZUFycmF5IiB0aXRsZT0ic3RydWN0IEdzdFZhbHVlQXJyYXkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWYWx1ZUFycmF5PC9zcGFuPjwvYT4gKnZhbHVlX2FycmF5PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyBhbiBhcnJheSBvZiB2YWx1ZXMgZm9yIG9uZSBlbGVtZW50IHByb3BlcnR5LgorPC9wPgorPHA+CitBbGwgZmllbGRzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZV9hcnJheTwvY29kZT48L2VtPiBtdXN0IGJlIGZpbGxlZCBjb3JyZWN0bHkuIEVzcGVjaWFsbHkgdGhlCis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWVfYXJyYXktJmd0O3ZhbHVlczwvY29kZT48L2VtPiBhcnJheSBtdXN0IGJlIGJpZyBlbm91Z2ggdG8ga2VlcCB0aGUgcmVxdWVzdGVkIGFtb3VudAorb2YgdmFsdWVzLgorPC9wPgorPHA+CitUaGUgdHlwZSBvZiB0aGUgdmFsdWVzIGluIHRoZSBhcnJheSBpcyB0aGUgc2FtZSBhcyB0aGUgcHJvcGVydHkncyB0eXBlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlbGY8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+IG9iamVjdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZXN0YW1wPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB0aW1lIHRoYXQgc2hvdWxkIGJlIHByb2Nlc3NlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWVfYXJyYXk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YXJyYXkgdG8gcHV0IGNvbnRyb2wtdmFsdWVzIGluPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgZ2l2ZW4gYXJyYXkgY291bGQgYmUgZmlsbGVkLCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvR3N0Q29udHJvbGxlci5odG1sIGIvZG9jcy9saWJzL2h0bWwvR3N0Q29udHJvbGxlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZWY0MmIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2xpYnMvaHRtbC9Hc3RDb250cm9sbGVyLmh0bWwKQEAgLTAsMCArMSw2ODEgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5Hc3RDb250cm9sbGVyPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZ3N0cmVhbWVyLWNvbnRyb2wuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBEeW5hbWljIFBhcmFtZXRlciBDb250cm9sIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLWNvbnRyb2wuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBEeW5hbWljIFBhcmFtZXRlciBDb250cm9sIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLWNvbnRyb2wuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImdzdHJlYW1lci1jb250cm9sLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjR3N0Q29udHJvbGxlci5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdENvbnRyb2xsZXIuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdENvbnRyb2xsZXIub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RDb250cm9sbGVyLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJHc3RDb250cm9sbGVyIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0Q29udHJvbGxlci50b3Bfb2ZfcGFnZSI+PC9hPkdzdENvbnRyb2xsZXI8L3NwYW4+PC9oMj4KKzxwPkdzdENvbnRyb2xsZXIg4oCUIGR5bmFtaWMgcGFyYW1ldGVyIGNvbnRyb2wgc3Vic3lzdGVtPC9wPgorPC90ZD4KKzx0ZCB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgorPC90cj48L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGEgbmFtZT0iR3N0Q29udHJvbGxlci5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisjaW5jbHVkZSAmbHQ7Z3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5oJmd0OworCitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sbGVyLmh0bWwjR3N0Q29udHJvbGxlci1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29udHJvbGxlciI+R3N0Q29udHJvbGxlcjwvYT47Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sbGVyLmh0bWwjZ3N0LWNvbnRyb2xsZXItaW5pdCIgdGl0bGU9ImdzdF9jb250cm9sbGVyX2luaXQgKCkiPmdzdF9jb250cm9sbGVyX2luaXQ8L2E+ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj5pbnQ8L3NwYW4+ICphcmdjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj5jaGFyPC9zcGFuPiAqKiphcmd2PC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sbGVyLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sbGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENvbnRyb2xsZXI8L3NwYW4+PC9hPiAqICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLW5ldyIgdGl0bGU9ImdzdF9jb250cm9sbGVyX25ldyAoKSI+Z3N0X2NvbnRyb2xsZXJfbmV3PC9hPiAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q29udHJvbGxlcjwvc3Bhbj48L2E+ICogICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sbGVyLmh0bWwjZ3N0LWNvbnRyb2xsZXItbmV3LWxpc3QiIHRpdGxlPSJnc3RfY29udHJvbGxlcl9uZXdfbGlzdCAoKSI+Z3N0X2NvbnRyb2xsZXJfbmV3X2xpc3Q8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q29udHJvbGxlcjwvc3Bhbj48L2E+ICogICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sbGVyLmh0bWwjZ3N0LWNvbnRyb2xsZXItbmV3LXZhbGlzdCIgdGl0bGU9ImdzdF9jb250cm9sbGVyX25ld192YWxpc3QgKCkiPmdzdF9jb250cm9sbGVyX25ld192YWxpc3Q8L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZhX2xpc3Q8L3NwYW4+IHZhcl9hcmdzPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCNnc3QtY29udHJvbGxlci1yZW1vdmUtcHJvcGVydGllcyIgdGl0bGU9ImdzdF9jb250cm9sbGVyX3JlbW92ZV9wcm9wZXJ0aWVzICgpIj5nc3RfY29udHJvbGxlcl9yZW1vdmVfcHJvcGVydGllczwvYT4gICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sIiB0aXRsZT0iR3N0Q29udHJvbGxlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xsZXI8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLXJlbW92ZS1wcm9wZXJ0aWVzLWxpc3QiIHRpdGxlPSJnc3RfY29udHJvbGxlcl9yZW1vdmVfcHJvcGVydGllc19saXN0ICgpIj5nc3RfY29udHJvbGxlcl9yZW1vdmVfcHJvcGVydGllc19saXN0PC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sbGVyLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sbGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbGxlcjwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sbGVyLmh0bWwjZ3N0LWNvbnRyb2xsZXItcmVtb3ZlLXByb3BlcnRpZXMtdmFsaXN0IiB0aXRsZT0iZ3N0X2NvbnRyb2xsZXJfcmVtb3ZlX3Byb3BlcnRpZXNfdmFsaXN0ICgpIj5nc3RfY29udHJvbGxlcl9yZW1vdmVfcHJvcGVydGllc192YWxpc3Q8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sbGVyPC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZhX2xpc3Q8L3NwYW4+IHZhcl9hcmdzPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCNnc3QtY29udHJvbGxlci1zZXQtZGlzYWJsZWQiIHRpdGxlPSJnc3RfY29udHJvbGxlcl9zZXRfZGlzYWJsZWQgKCkiPmdzdF9jb250cm9sbGVyX3NldF9kaXNhYmxlZDwvYT4gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sbGVyLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sbGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbGxlcjwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gZGlzYWJsZWQ8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLXNldC1wcm9wZXJ0eS1kaXNhYmxlZCIgdGl0bGU9ImdzdF9jb250cm9sbGVyX3NldF9wcm9wZXJ0eV9kaXNhYmxlZCAoKSI+Z3N0X2NvbnRyb2xsZXJfc2V0X3Byb3BlcnR5X2Rpc2FibGVkPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sbGVyLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sbGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbGxlcjwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnByb3BlcnR5X25hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBkaXNhYmxlZDwvY29kZT48L2VtPik7Cis8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCNnc3QtY29udHJvbGxlci1zdWdnZXN0LW5leHQtc3luYyIgdGl0bGU9ImdzdF9jb250cm9sbGVyX3N1Z2dlc3RfbmV4dF9zeW5jICgpIj5nc3RfY29udHJvbGxlcl9zdWdnZXN0X25leHRfc3luYzwvYT4gICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sIiB0aXRsZT0iR3N0Q29udHJvbGxlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xsZXI8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sbGVyLmh0bWwjZ3N0LWNvbnRyb2xsZXItc3luYy12YWx1ZXMiIHRpdGxlPSJnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoKSI+Z3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXM8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sbGVyPC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lc3RhbXA8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+ICogIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sbGVyLmh0bWwjZ3N0LWNvbnRyb2xsZXItZ2V0LWNvbnRyb2wtc291cmNlIiB0aXRsZT0iZ3N0X2NvbnRyb2xsZXJfZ2V0X2NvbnRyb2xfc291cmNlICgpIj5nc3RfY29udHJvbGxlcl9nZXRfY29udHJvbF9zb3VyY2U8L2E+ICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sIiB0aXRsZT0iR3N0Q29udHJvbGxlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xsZXI8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwcm9wZXJ0eV9uYW1lPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCNnc3QtY29udHJvbGxlci1zZXQtY29udHJvbC1zb3VyY2UiIHRpdGxlPSJnc3RfY29udHJvbGxlcl9zZXRfY29udHJvbF9zb3VyY2UgKCkiPmdzdF9jb250cm9sbGVyX3NldF9jb250cm9sX3NvdXJjZTwvYT4gICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sbGVyLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sbGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbGxlcjwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnByb3BlcnR5X25hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4gKmNzb3VyY2U8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HVmFsdWU8L3NwYW4+PC9hPiAqICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCNnc3QtY29udHJvbGxlci1nZXQiIHRpdGxlPSJnc3RfY29udHJvbGxlcl9nZXQgKCkiPmdzdF9jb250cm9sbGVyX2dldDwvYT4gICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sbGVyLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sbGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbGxlcjwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnByb3BlcnR5X25hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lc3RhbXA8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLWdldC12YWx1ZS1hcnJheXMiIHRpdGxlPSJnc3RfY29udHJvbGxlcl9nZXRfdmFsdWVfYXJyYXlzICgpIj5nc3RfY29udHJvbGxlcl9nZXRfdmFsdWVfYXJyYXlzPC9hPiAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sIiB0aXRsZT0iR3N0Q29udHJvbGxlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xsZXI8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRpbWVzdGFtcDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVNpbmdseS1MaW5rZWQtTGlzdHMuaHRtbCNHU0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU0xpc3Q8L3NwYW4+PC9hPiAqdmFsdWVfYXJyYXlzPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCNnc3QtY29udHJvbGxlci1nZXQtdmFsdWUtYXJyYXkiIHRpdGxlPSJnc3RfY29udHJvbGxlcl9nZXRfdmFsdWVfYXJyYXkgKCkiPmdzdF9jb250cm9sbGVyX2dldF92YWx1ZV9hcnJheTwvYT4gICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sbGVyLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sbGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbGxlcjwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZXN0YW1wPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0VmFsdWVBcnJheSIgdGl0bGU9InN0cnVjdCBHc3RWYWx1ZUFycmF5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VmFsdWVBcnJheTwvc3Bhbj48L2E+ICp2YWx1ZV9hcnJheTwvY29kZT48L2VtPik7Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0Q29udHJvbGxlci5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+R09iamVjdDwvYT4KKyAgICstLS0tR3N0Q29udHJvbGxlcgorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdENvbnRyb2xsZXIucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sbGVyLmh0bWwjR3N0Q29udHJvbGxlci0tY29udHJvbC1yYXRlIiB0aXRsZT0nVGhlICJjb250cm9sLXJhdGUiIHByb3BlcnR5Jz5jb250cm9sLXJhdGU8L2E+IiAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0Q29udHJvbGxlci5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK1RoZSBjb250cm9sbGVyIHN1YnN5c3RlbSBvZmZlcnMgYSBsaWdodHdlaWdodCB3YXkgdG8gYWRqdXN0IGdvYmplY3QKK3Byb3BlcnRpZXMgb3ZlciBzdHJlYW0tdGltZS4gSXQgd29ya3MgYnkgdXNpbmcgdGltZS1zdGFtcGVkIHZhbHVlIHBhaXJzIHRoYXQKK2FyZSBxdWV1ZWQgZm9yIGVsZW1lbnQtcHJvcGVydGllcy4gQXQgcnVuLXRpbWUgdGhlIGVsZW1lbnRzIGNvbnRpbm91c2x5IHB1bGwKK3ZhbHVlcyBjaGFuZ2VzIGZvciB0aGUgY3VycmVudCBzdHJlYW0tdGltZS4KKzwvcD4KKzxwPgorV2hhdCBuZWVkcyB0byBiZSBjaGFuZ2VkIGluIGEgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+PworVmVyeSBsaXR0bGUgLSBpdCBpcyBqdXN0IHR3byBzdGVwcyB0byBtYWtlIGEgcGx1Z2luIGNvbnRyb2xsYWJsZSEKKzwvcD4KKzxkaXYgY2xhc3M9Im9yZGVyZWRsaXN0Ij48b2wgY2xhc3M9Im9yZGVyZWRsaXN0IiB0eXBlPSIxIj4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgIG1hcmsgZ29iamVjdC1wcm9wZXJ0aWVzIHBhcmFtc3BlY3MgdGhhdCBtYWtlIHNlbnNlIHRvIGJlIGNvbnRyb2xsZWQsCisgICAgYnkgR1NUX1BBUkFNX0NPTlRST0xMQUJMRS4KKyAgPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICB3aGVuIHByb2Nlc3NpbmcgZGF0YSAoZ2V0LCBjaGFpbiwgbG9vcCBmdW5jdGlvbikgYXQgdGhlIGJlZ2lubmluZyBjYWxsCisgICAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyhlbGVtZW50LHRpbWVzdGFtcCkuCisgICAgVGhpcyB3aWxsIG1hZGUgdGhlIGNvbnRyb2xsZXIgdG8gdXBkYXRlIGFsbCBnb2JqZWN0IHByb3BlcnRpZXMgdGhhdCBhcmUgdW5kZXIKKyAgICBjb250cm9sIHdpdGggdGhlIGN1cnJlbnQgdmFsdWVzIGJhc2VkIG9uIHRpbWVzdGFtcC4KKyAgPC9wPjwvbGk+Cis8L29sPjwvZGl2PgorPHA+Cis8L3A+Cis8cD4KK1doYXQgbmVlZHMgdG8gYmUgZG9uZSBpbiBhcHBsaWNhdGlvbnM/CitBZ2FpbiBpdHMgbm90IGEgbG90IHRvIGNoYW5nZS4KKzwvcD4KKzxkaXYgY2xhc3M9Im9yZGVyZWRsaXN0Ij48b2wgY2xhc3M9Im9yZGVyZWRsaXN0IiB0eXBlPSIxIj4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgIGZpcnN0IHB1dCBzb21lIHByb3BlcnRpZXMgdW5kZXIgY29udHJvbCwgYnkgY2FsbGluZworICAgIGNvbnRyb2xsZXIgPSBnc3Rfb2JqZWN0X2NvbnRyb2xfcHJvcGVydGllcyAob2JqZWN0LCAicHJvcDEiLCAicHJvcDIiLC4uLik7CisgIDwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgICAgR2V0IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4gZm9yIHRoZSBwcm9wZXJ0eSBhbmQgc2V0IGl0IHVwLgorICAgIGNzb3VyY2UgPSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtaW50ZXJwb2xhdGlvbi1jb250cm9sLXNvdXJjZS1uZXciIHRpdGxlPSJnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfbmV3KCk8L2NvZGU+PC9hPjsKKyAgICBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXRfaW50ZXJwb2xhdGlvbl9tb2RlKGNzb3VyY2UsIG1vZGUpOworICAgIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldCAoY3NvdXJjZSwwICogR1NUX1NFQ09ORCwgdmFsdWUxKTsKKyAgICBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXQgKGNzb3VyY2UsMSAqIEdTVF9TRUNPTkQsIHZhbHVlMik7CisgIDwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgICAgU2V0IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiBpbiB0aGUgY29udHJvbGxlci4KKyAgICBnc3RfY29udHJvbGxlcl9zZXRfY29udHJvbF9zb3VyY2UgKGNvbnRyb2xsZXIsICJwcm9wMSIsIGNzb3VyY2UpOworICA8L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgIHN0YXJ0IHlvdXIgcGlwZWxpbmUKKyAgPC9wPjwvbGk+Cis8L29sPjwvZGl2PgorPHA+Cis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdENvbnRyb2xsZXIuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdENvbnRyb2xsZXItc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RDb250cm9sbGVyPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0Q29udHJvbGxlcjs8L3ByZT4KKzxwPgorVGhlIGluc3RhbmNlIHN0cnVjdHVyZSBvZiBHc3RDb250cm9sbGVyCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jb250cm9sbGVyLWluaXQiPjwvYT48aDM+Z3N0X2NvbnRyb2xsZXJfaW5pdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfY29udHJvbGxlcl9pbml0ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj5pbnQ8L3NwYW4+ICphcmdjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj5jaGFyPC9zcGFuPiAqKiphcmd2PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSW5pdGlhbGl6ZXMgdGhlIHVzZSBvZiB0aGUgY29udHJvbGxlciBsaWJyYXJ5LiBTdWdnZXN0ZWQgdG8gYmUgY2FsbGVkIHJpZ2h0CithZnRlciA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LWluaXQiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2luaXQoKTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFyZ2M8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9pbnRlciB0byB0aGUgY29tbWFuZGxpbmUgYXJndW1lbnQgY291bnQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFyZ3Y8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cG9pbnRlciB0byB0aGUgY29tbWFuZGxpbmUgYXJndW1lbnQgdmFsdWVzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGZvciBzdWNjZXNzLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jb250cm9sbGVyLW5ldyI+PC9hPjxoMz5nc3RfY29udHJvbGxlcl9uZXcgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sbGVyLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sbGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENvbnRyb2xsZXI8L3NwYW4+PC9hPiAqICAgICBnc3RfY29udHJvbGxlcl9uZXcgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlcyBhIG5ldyBHc3RDb250cm9sbGVyIGZvciB0aGUgZ2l2ZW4gb2JqZWN0J3MgcHJvcGVydGllcworPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgb2JqZWN0IG9mIHdoaWNoIHNvbWUgcHJvcGVydGllcyBzaG91bGQgYmUgY29udHJvbGxlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gdGVybWluYXRlZCBsaXN0IG9mIHByb3BlcnR5IG5hbWVzIHRoYXQgc2hvdWxkIGJlIGNvbnRyb2xsZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3IGNvbnRyb2xsZXIuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNvbnRyb2xsZXItbmV3LWxpc3QiPjwvYT48aDM+Z3N0X2NvbnRyb2xsZXJfbmV3X2xpc3QgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sbGVyLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sbGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENvbnRyb2xsZXI8L3NwYW4+PC9hPiAqICAgICBnc3RfY29udHJvbGxlcl9uZXdfbGlzdCAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlcyBhIG5ldyBHc3RDb250cm9sbGVyIGZvciB0aGUgZ2l2ZW4gb2JqZWN0J3MgcHJvcGVydGllcworPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgb2JqZWN0IG9mIHdoaWNoIHNvbWUgcHJvcGVydGllcyBzaG91bGQgYmUgY29udHJvbGxlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5saXN0IG9mIHByb3BlcnR5IG5hbWVzIHRoYXQgc2hvdWxkIGJlIGNvbnRyb2xsZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3IGNvbnRyb2xsZXIuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNvbnRyb2xsZXItbmV3LXZhbGlzdCI+PC9hPjxoMz5nc3RfY29udHJvbGxlcl9uZXdfdmFsaXN0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sIiB0aXRsZT0iR3N0Q29udHJvbGxlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDb250cm9sbGVyPC9zcGFuPjwvYT4gKiAgICAgZ3N0X2NvbnRyb2xsZXJfbmV3X3ZhbGlzdCAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52YV9saXN0PC9zcGFuPiB2YXJfYXJnczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZXMgYSBuZXcgR3N0Q29udHJvbGxlciBmb3IgdGhlIGdpdmVuIG9iamVjdCdzIHByb3BlcnRpZXMKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG9iamVjdCBvZiB3aGljaCBzb21lIHByb3BlcnRpZXMgc2hvdWxkIGJlIGNvbnRyb2xsZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhcl9hcmdzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gdGVybWluYXRlZCBsaXN0IG9mIHByb3BlcnR5IG5hbWVzIHRoYXQgc2hvdWxkIGJlIGNvbnRyb2xsZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbmV3IGNvbnRyb2xsZXIuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNvbnRyb2xsZXItcmVtb3ZlLXByb3BlcnRpZXMiPjwvYT48aDM+Z3N0X2NvbnRyb2xsZXJfcmVtb3ZlX3Byb3BlcnRpZXMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2NvbnRyb2xsZXJfcmVtb3ZlX3Byb3BlcnRpZXMgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sIiB0aXRsZT0iR3N0Q29udHJvbGxlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xsZXI8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZW1vdmVzIHRoZSBnaXZlbiBvYmplY3QgcHJvcGVydGllcyBmcm9tIHRoZSBjb250cm9sbGVyCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VsZjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY29udHJvbGxlciBvYmplY3QgZnJvbSB3aGljaCBzb21lIHByb3BlcnRpZXMgc2hvdWxkIGJlIHJlbW92ZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHRlcm1pbmF0ZWQgbGlzdCBvZiBwcm9wZXJ0eSBuYW1lcyB0aGF0IHNob3VsZCBiZSByZW1vdmVkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIG9uZSBvZiB0aGUgZ2l2ZW4gcHJvcGVydHkgaXNuJ3QgaGFuZGxlZCBieSB0aGUgY29udHJvbGxlciwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNvbnRyb2xsZXItcmVtb3ZlLXByb3BlcnRpZXMtbGlzdCI+PC9hPjxoMz5nc3RfY29udHJvbGxlcl9yZW1vdmVfcHJvcGVydGllc19saXN0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9jb250cm9sbGVyX3JlbW92ZV9wcm9wZXJ0aWVzX2xpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sIiB0aXRsZT0iR3N0Q29udHJvbGxlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xsZXI8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZW1vdmVzIHRoZSBnaXZlbiBvYmplY3QgcHJvcGVydGllcyBmcm9tIHRoZSBjb250cm9sbGVyCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VsZjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY29udHJvbGxlciBvYmplY3QgZnJvbSB3aGljaCBzb21lIHByb3BlcnRpZXMgc2hvdWxkIGJlIHJlbW92ZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gb2YgcHJvcGVydHkgbmFtZXMgdGhhdCBzaG91bGQgYmUgcmVtb3ZlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZiBvbmUgb2YgdGhlIGdpdmVuIHByb3BlcnR5IGlzbid0IGhhbmRsZWQgYnkgdGhlIGNvbnRyb2xsZXIsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IG90aGVyd2lzZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jb250cm9sbGVyLXJlbW92ZS1wcm9wZXJ0aWVzLXZhbGlzdCI+PC9hPjxoMz5nc3RfY29udHJvbGxlcl9yZW1vdmVfcHJvcGVydGllc192YWxpc3QgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2NvbnRyb2xsZXJfcmVtb3ZlX3Byb3BlcnRpZXNfdmFsaXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sbGVyPC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZhX2xpc3Q8L3NwYW4+IHZhcl9hcmdzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVtb3ZlcyB0aGUgZ2l2ZW4gb2JqZWN0IHByb3BlcnRpZXMgZnJvbSB0aGUgY29udHJvbGxlcgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlbGY8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGNvbnRyb2xsZXIgb2JqZWN0IGZyb20gd2hpY2ggc29tZSBwcm9wZXJ0aWVzIHNob3VsZCBiZSByZW1vdmVkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YXJfYXJnczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHRlcm1pbmF0ZWQgbGlzdCBvZiBwcm9wZXJ0eSBuYW1lcyB0aGF0IHNob3VsZCBiZSByZW1vdmVkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIG9uZSBvZiB0aGUgZ2l2ZW4gcHJvcGVydHkgaXNuJ3QgaGFuZGxlZCBieSB0aGUgY29udHJvbGxlciwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNvbnRyb2xsZXItc2V0LWRpc2FibGVkIj48L2E+PGgzPmdzdF9jb250cm9sbGVyX3NldF9kaXNhYmxlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfY29udHJvbGxlcl9zZXRfZGlzYWJsZWQgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sbGVyLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sbGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbGxlcjwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gZGlzYWJsZWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBhbGwgcHJvcGVydGllcyBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sbGVyPC9zcGFuPjwvYT4KK2ZvciBzb21lIHRpbWUsIGkuZS4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCNnc3QtY29udHJvbGxlci1zeW5jLXZhbHVlcyIgdGl0bGU9ImdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzKCk8L2NvZGU+PC9hPiB3aWxsIGRvIG5vdGhpbmcuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VsZjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sbGVyPC9zcGFuPjwvYT4gd2hpY2ggc2hvdWxkIGJlIGRpc2FibGVkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kaXNhYmxlZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5ib29sZWFuIHRoYXQgc3BlY2lmaWVzIHdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgY29udHJvbGxlcgorb3Igbm90LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jb250cm9sbGVyLXNldC1wcm9wZXJ0eS1kaXNhYmxlZCI+PC9hPjxoMz5nc3RfY29udHJvbGxlcl9zZXRfcHJvcGVydHlfZGlzYWJsZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2NvbnRyb2xsZXJfc2V0X3Byb3BlcnR5X2Rpc2FibGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sbGVyPC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqcHJvcGVydHlfbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGRpc2FibGVkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sbGVyLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sbGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbGxlcjwvc3Bhbj48L2E+IG9uIGEgcHJvcGVydHkgZm9yCitzb21lIHRpbWUsIGkuZS4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCNnc3QtY29udHJvbGxlci1zeW5jLXZhbHVlcyIgdGl0bGU9ImdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzKCk8L2NvZGU+PC9hPiB3aWxsIGRvIG5vdGhpbmcgZm9yIHRoZQorcHJvcGVydHkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VsZjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sbGVyPC9zcGFuPjwvYT4gd2hpY2ggc2hvdWxkIGJlIGRpc2FibGVkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcm9wZXJ0eV9uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnByb3BlcnR5IHRvIGRpc2FibGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRpc2FibGVkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmJvb2xlYW4gdGhhdCBzcGVjaWZpZXMgd2hldGhlciB0byBkaXNhYmxlIHRoZSBjb250cm9sbGVyCitvciBub3QuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNvbnRyb2xsZXItc3VnZ2VzdC1uZXh0LXN5bmMiPjwvYT48aDM+Z3N0X2NvbnRyb2xsZXJfc3VnZ2VzdF9uZXh0X3N5bmMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+ICAgICAgICBnc3RfY29udHJvbGxlcl9zdWdnZXN0X25leHRfc3luYyAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sbGVyLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sbGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbGxlcjwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0dXJucyBhIHN1Z2dlc3Rpb24gZm9yIHRpbWVzdGFtcHMgd2hlcmUgYnVmZmVycyBzaG91bGQgYmUgc3BsaXQKK3RvIGdldCBiZXN0IGNvbnRyb2xsZXIgcmVzdWx0cy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWxmPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjb250cm9sbGVyIHRoYXQgaGFuZGxlcyB0aGUgdmFsdWVzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UmV0dXJucyB0aGUgc3VnZ2VzdGVkIHRpbWVzdGFtcCBvciA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dTVC1DTE9DSy1USU1FLU5PTkU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9DTE9DS19USU1FX05PTkU8L2NvZGU+PC9hPgoraWYgbm8gY29udHJvbC1yYXRlIHdhcyBzZXQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xMzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNvbnRyb2xsZXItc3luYy12YWx1ZXMiPjwvYT48aDM+Z3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sIiB0aXRsZT0iR3N0Q29udHJvbGxlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xsZXI8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRpbWVzdGFtcDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGVsZW1lbnQsIGFjY29yZGluZyB0byB0aGUgY29udHJvbGxlciB0aGF0IChtYXliZSkKK2hhbmRsZXMgdGhlbSBhbmQgZm9yIHRoZSBnaXZlbiB0aW1lc3RhbXAuCis8L3A+Cis8cD4KK0lmIHRoaXMgZnVuY3Rpb24gZmFpbHMsIGl0IGlzIG1vc3QgbGlrZWx5IHRoZSBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzIGZhdWx0LgorTW9zdCBwcm9iYWJseSB0aGUgY29udHJvbCBzb3VyY2VzIGFyZSBub3Qgc2V0dXAgY29ycmVjdGx5LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlbGY8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGNvbnRyb2xsZXIgdGhhdCBoYW5kbGVzIHRoZSB2YWx1ZXM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWVzdGFtcDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdGltZSB0aGF0IHNob3VsZCBiZSBwcm9jZXNzZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBjb250cm9sbGVyIHZhbHVlcyBjb3VsZCBiZSBhcHBsaWVkIHRvIHRoZSBvYmplY3QKK3Byb3BlcnRpZXMsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNvbnRyb2xsZXItZ2V0LWNvbnRyb2wtc291cmNlIj48L2E+PGgzPmdzdF9jb250cm9sbGVyX2dldF9jb250cm9sX3NvdXJjZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+ICogIGdzdF9jb250cm9sbGVyX2dldF9jb250cm9sX3NvdXJjZSAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sbGVyPC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqcHJvcGVydHlfbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIGNvcnJlc3BvbmRpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4gZm9yIHRoZSBwcm9wZXJ0eS4gVGhpcyBzaG91bGQgYmUgdW5yZWZlcmVuY2VkCithZ2FpbiBhZnRlciB1c2UuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VsZjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY29udHJvbGxlciBvYmplY3Q8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByb3BlcnR5X25hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bmFtZSBvZiB0aGUgcHJvcGVydHkgZm9yIHdoaWNoIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiBzaG91bGQgYmUgZ2V0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+IGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJvcGVydHlfbmFtZTwvY29kZT48L2VtPiBvciBOVUxMIGlmIHRoZSBwcm9wZXJ0eSBpcyBub3QKK2NvbnRyb2xsZWQgYnkgdGhpcyBjb250cm9sbGVyIG9yIG5vIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+IHdhcyBhc3NpZ25lZCB5ZXQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNvbnRyb2xsZXItc2V0LWNvbnRyb2wtc291cmNlIj48L2E+PGgzPmdzdF9jb250cm9sbGVyX3NldF9jb250cm9sX3NvdXJjZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfY29udHJvbGxlcl9zZXRfY29udHJvbF9zb3VyY2UgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sbGVyLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sbGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbGxlcjwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnByb3BlcnR5X25hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4gKmNzb3VyY2U8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXRzIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByb3BlcnR5X25hbWU8L2NvZGU+PC9lbT4uIElmIHRoZXJlIGFscmVhZHkgd2FzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4KK2ZvciB0aGlzIHByb3BlcnR5IGl0IHdpbGwgYmUgdW5yZWZlcmVuY2VkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlbGY8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGNvbnRyb2xsZXIgb2JqZWN0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcm9wZXJ0eV9uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm5hbWUgb2YgdGhlIHByb3BlcnR5IGZvciB3aGljaCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4gc2hvdWxkIGJlIHNldDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y3NvdXJjZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4gdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgdGhlIHByb3BlcnR5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIHRoZSBnaXZlbiBwcm9wZXJ0eSBpc24ndCBoYW5kbGVkIGJ5IHRoZSBjb250cm9sbGVyIG9yIHRoZSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4KK2NvdWxkbid0IGJlIGJvdW5kIHRvIHRoZSBwcm9wZXJ0eSwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgZXZlcnl0aGluZyB3b3JrZWQgYXMgZXhwZWN0ZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNvbnRyb2xsZXItZ2V0Ij48L2E+PGgzPmdzdF9jb250cm9sbGVyX2dldCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HVmFsdWU8L3NwYW4+PC9hPiAqICAgICAgICAgICAgZ3N0X2NvbnRyb2xsZXJfZ2V0ICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sIiB0aXRsZT0iR3N0Q29udHJvbGxlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xsZXI8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwcm9wZXJ0eV9uYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZXN0YW1wPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgdmFsdWUgZm9yIHRoZSBnaXZlbiBjb250cm9sbGVyLWhhbmRsZWQgcHJvcGVydHkgYXQgdGhlIHJlcXVlc3RlZAordGltZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWxmPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjb250cm9sbGVyIG9iamVjdCB3aGljaCBoYW5kbGVzIHRoZSBwcm9wZXJ0aWVzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcm9wZXJ0eV9uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWVzdGFtcDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdGltZSB0aGUgY29udHJvbC1jaGFuZ2Ugc2hvdWxkIGJlIHJlYWQgZnJvbTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBHVmFsdWUgb2YgdGhlIHByb3BlcnR5IGF0IHRoZSBnaXZlbiB0aW1lLCBvciA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiB0aGUKK3Byb3BlcnR5IGlzbid0IGhhbmRsZWQgYnkgdGhlIGNvbnRyb2xsZXI8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY29udHJvbGxlci1nZXQtdmFsdWUtYXJyYXlzIj48L2E+PGgzPmdzdF9jb250cm9sbGVyX2dldF92YWx1ZV9hcnJheXMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2NvbnRyb2xsZXJfZ2V0X3ZhbHVlX2FycmF5cyAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sIiB0aXRsZT0iR3N0Q29udHJvbGxlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xsZXI8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRpbWVzdGFtcDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVNpbmdseS1MaW5rZWQtTGlzdHMuaHRtbCNHU0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU0xpc3Q8L3NwYW4+PC9hPiAqdmFsdWVfYXJyYXlzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRnVuY3Rpb24gdG8gYmUgYWJsZSB0byBnZXQgYW4gYXJyYXkgb2YgdmFsdWVzIGZvciBvbmUgb3IgbW9yZSBnaXZlbiBlbGVtZW50Citwcm9wZXJ0aWVzLgorPC9wPgorPHA+CitBbGwgZmllbGRzIG9mIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdFZhbHVlQXJyYXkiIHRpdGxlPSJzdHJ1Y3QgR3N0VmFsdWVBcnJheSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdzdFZhbHVlQXJyYXk8L2NvZGU+PC9hPiBpbiB0aGUgbGlzdCBtdXN0IGJlIGZpbGxlZCBjb3JyZWN0bHkuCitFc3BlY2lhbGx5IHRoZSBHc3RWYWx1ZUFycmF5LSZndDt2YWx1ZXMgYXJyYXlzIG11c3QgYmUgYmlnIGVub3VnaCB0byBrZWVwCit0aGUgcmVxdWVzdGVkIGFtb3VudCBvZiB2YWx1ZXMuCis8L3A+Cis8cD4KK1RoZSB0eXBlcyBvZiB0aGUgdmFsdWVzIGluIHRoZSBhcnJheSBhcmUgdGhlIHNhbWUgYXMgdGhlIHByb3BlcnR5J3MgdHlwZS4KKzwvcD4KKzxwPgorPC9wPgorPGRpdiBjbGFzcz0ibm90ZSIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPgorPGgzIGNsYXNzPSJ0aXRsZSI+Tm90ZTwvaDM+Cis8cD5UaGlzIGRvZXNuJ3QgbW9kaWZ5IHRoZSBjb250cm9sbGVkIEdPYmplY3QgcHJvcGVydGllcyE8L3A+Cis8L2Rpdj4KKzxwPgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlbGY8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGNvbnRyb2xsZXIgdGhhdCBoYW5kbGVzIHRoZSB2YWx1ZXM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWVzdGFtcDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdGltZSB0aGF0IHNob3VsZCBiZSBwcm9jZXNzZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlX2FycmF5czwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5saXN0IHRvIHJldHVybiB0aGUgY29udHJvbC12YWx1ZXMgaW48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBnaXZlbiBhcnJheShzKSBjb3VsZCBiZSBmaWxsZWQsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNvbnRyb2xsZXItZ2V0LXZhbHVlLWFycmF5Ij48L2E+PGgzPmdzdF9jb250cm9sbGVyX2dldF92YWx1ZV9hcnJheSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfY29udHJvbGxlcl9nZXRfdmFsdWVfYXJyYXkgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sbGVyLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sbGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbGxlcjwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZXN0YW1wPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0VmFsdWVBcnJheSIgdGl0bGU9InN0cnVjdCBHc3RWYWx1ZUFycmF5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VmFsdWVBcnJheTwvc3Bhbj48L2E+ICp2YWx1ZV9hcnJheTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0Z1bmN0aW9uIHRvIGJlIGFibGUgdG8gZ2V0IGFuIGFycmF5IG9mIHZhbHVlcyBmb3Igb25lIGVsZW1lbnQgcHJvcGVydHkuCis8L3A+Cis8cD4KK0FsbCBmaWVsZHMgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlX2FycmF5PC9jb2RlPjwvZW0+IG11c3QgYmUgZmlsbGVkIGNvcnJlY3RseS4gRXNwZWNpYWxseSB0aGUKKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZV9hcnJheS0mZ3Q7dmFsdWVzPC9jb2RlPjwvZW0+IGFycmF5IG11c3QgYmUgYmlnIGVub3VnaCB0byBrZWVwIHRoZSByZXF1ZXN0ZWQgYW1vdW50CitvZiB2YWx1ZXMgKGFzIGluZGljYXRlZCBieSB0aGUgbmJzYW1wbGVzIGZpZWxkKS4KKzwvcD4KKzxwPgorVGhlIHR5cGUgb2YgdGhlIHZhbHVlcyBpbiB0aGUgYXJyYXkgaXMgdGhlIHNhbWUgYXMgdGhlIHByb3BlcnR5J3MgdHlwZS4KKzwvcD4KKzxwPgorPC9wPgorPGRpdiBjbGFzcz0ibm90ZSIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPgorPGgzIGNsYXNzPSJ0aXRsZSI+Tm90ZTwvaDM+Cis8cD5UaGlzIGRvZXNuJ3QgbW9kaWZ5IHRoZSBjb250cm9sbGVkIEdPYmplY3QgcHJvcGVydHkhPC9wPgorPC9kaXY+Cis8cD4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWxmPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjb250cm9sbGVyIHRoYXQgaGFuZGxlcyB0aGUgdmFsdWVzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50aW1lc3RhbXA8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHRpbWUgdGhhdCBzaG91bGQgYmUgcHJvY2Vzc2VkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZV9hcnJheTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hcnJheSB0byBwdXQgY29udHJvbC12YWx1ZXMgaW48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBnaXZlbiBhcnJheSBjb3VsZCBiZSBmaWxsZWQsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RDb250cm9sbGVyLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RDb250cm9sbGVyLS1jb250cm9sLXJhdGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4iY29udHJvbC1yYXRlIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgImNvbnRyb2wtcmF0ZSIgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+Q29udHJvbGxlZCBwcm9wZXJ0aWVzIHdpbGwgYmUgdXBkYXRlZCBhdCBsZWFzdCBldmVyeSBjb250cm9sLXJhdGUgbmFub3NlY29uZHMuPC9wPgorPHA+QWxsb3dlZCB2YWx1ZXM6IFsxLDQyOTQ5NjcyOTVdPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogMTAwMDAwMDAwPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL0dzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwgYi9kb2NzL2xpYnMvaHRtbC9Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YjZhNmUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2xpYnMvaHRtbC9Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sCkBAIC0wLDAgKzEsMzYyIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2U8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJnc3RyZWFtZXItY29udHJvbC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIER5bmFtaWMgUGFyYW1ldGVyIENvbnRyb2wiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0TEZPQ29udHJvbFNvdXJjZSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iZ3N0cmVhbWVyLWNvbnRyb2wuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIDAuMTEgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS50b3Bfb2ZfcGFnZSI+PC9hPkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlPC9zcGFuPjwvaDI+Cis8cD5Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSDigJQgaW50ZXJwb2xhdGlvbiBjb250cm9sIHNvdXJjZTwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLnN5bm9wc2lzIj48L2E+PGgyPlN5bm9wc2lzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyNpbmNsdWRlICZsdDtsaWJzL2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuaCZndDsKKworc3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UiPkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlPC9hPjsKK2VudW0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwjR3N0SW50ZXJwb2xhdGVNb2RlIiB0aXRsZT0iZW51bSBHc3RJbnRlcnBvbGF0ZU1vZGUiPkdzdEludGVycG9sYXRlTW9kZTwvYT47Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlPC9zcGFuPjwvYT4gKiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtaW50ZXJwb2xhdGlvbi1jb250cm9sLXNvdXJjZS1uZXciIHRpdGxlPSJnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKCkiPmdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX25ldzwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtaW50ZXJwb2xhdGlvbi1jb250cm9sLXNvdXJjZS1zZXQiIHRpdGxlPSJnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXQgKCkiPmdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRpbWVzdGFtcDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwjZ3N0LWludGVycG9sYXRpb24tY29udHJvbC1zb3VyY2Utc2V0LWZyb20tbGlzdCIgdGl0bGU9ImdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldF9mcm9tX2xpc3QgKCkiPmdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldF9mcm9tX2xpc3Q8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlPC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TaW5nbHktTGlua2VkLUxpc3RzLmh0bWwjR1NMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R1NMaXN0PC9zcGFuPjwvYT4gKnRpbWVkdmFsdWVzPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwjZ3N0LWludGVycG9sYXRpb24tY29udHJvbC1zb3VyY2Utc2V0LWludGVycG9sYXRpb24tbW9kZSIgdGl0bGU9ImdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldF9pbnRlcnBvbGF0aW9uX21vZGUgKCkiPmdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldF9pbnRlcnBvbGF0aW9uX21vZGU8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlPC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwjR3N0SW50ZXJwb2xhdGVNb2RlIiB0aXRsZT0iZW51bSBHc3RJbnRlcnBvbGF0ZU1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbnRlcnBvbGF0ZU1vZGU8L3NwYW4+PC9hPiBtb2RlPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdMaXN0PC9zcGFuPjwvYT4gKiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtaW50ZXJwb2xhdGlvbi1jb250cm9sLXNvdXJjZS1nZXQtYWxsIiB0aXRsZT0iZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfZ2V0X2FsbCAoKSI+Z3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfZ2V0X2FsbDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sI2dzdC1pbnRlcnBvbGF0aW9uLWNvbnRyb2wtc291cmNlLXVuc2V0IiB0aXRsZT0iZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfdW5zZXQgKCkiPmdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3Vuc2V0PC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZTwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZXN0YW1wPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwjZ3N0LWludGVycG9sYXRpb24tY29udHJvbC1zb3VyY2UtdW5zZXQtYWxsIiB0aXRsZT0iZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfdW5zZXRfYWxsICgpIj5nc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV91bnNldF9hbGw8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlPC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sI2dzdC1pbnRlcnBvbGF0aW9uLWNvbnRyb2wtc291cmNlLWdldC1jb3VudCIgdGl0bGU9ImdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2dldF9jb3VudCAoKSI+Z3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfZ2V0X2NvdW50PC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZTwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+KTsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+R09iamVjdDwvYT4KKyAgICstLS0tPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPkdzdENvbnRyb2xTb3VyY2U8L2E+CisgICAgICAgICArLS0tLUdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlCis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiBpcyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+LCB0aGF0IGludGVycG9sYXRlcyB2YWx1ZXMgYmV0d2VlbiB1c2VyLWdpdmVuCitjb250cm9sIHBvaW50cy4gSXQgc3VwcG9ydHMgc2V2ZXJhbCBpbnRlcnBvbGF0aW9uIG1vZGVzIGFuZCBwcm9wZXJ0eSB0eXBlcy4KKzwvcD4KKzxwPgorVG8gdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZTwvc3Bhbj48L2E+IGdldCBhIG5ldyBpbnN0YW5jZSBieSBjYWxsaW5nCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtaW50ZXJwb2xhdGlvbi1jb250cm9sLXNvdXJjZS1uZXciIHRpdGxlPSJnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfbmV3KCk8L2NvZGU+PC9hPiwgYmluZCBpdCB0byBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR1BhcmFtU3BlYy5odG1sI0dQYXJhbVNwZWMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUGFyYW1TcGVjPC9zcGFuPjwvYT4sIHNlbGVjdCBhIGludGVycG9sYXRpb24gbW9kZSB3aXRoCis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtaW50ZXJwb2xhdGlvbi1jb250cm9sLXNvdXJjZS1zZXQtaW50ZXJwb2xhdGlvbi1tb2RlIiB0aXRsZT0iZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0X2ludGVycG9sYXRpb25fbW9kZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXRfaW50ZXJwb2xhdGlvbl9tb2RlKCk8L2NvZGU+PC9hPiBhbmQgc2V0IHNvbWUgY29udHJvbCBwb2ludHMgYnkgY2FsbGluZworPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwjZ3N0LWludGVycG9sYXRpb24tY29udHJvbC1zb3VyY2Utc2V0IiB0aXRsZT0iZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldCgpPC9jb2RlPjwvYT4uCis8L3A+Cis8cD4KK0FsbCBmdW5jdGlvbnMgYXJlIE1ULXNhZmUuCis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2U7PC9wcmU+Cis8cD4KK1RoZSBpbnN0YW5jZSBzdHJ1Y3R1cmUgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4uCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEludGVycG9sYXRlTW9kZSI+PC9hPjxoMz5lbnVtIEdzdEludGVycG9sYXRlTW9kZTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBlbnVtIHsKKyAgR1NUX0lOVEVSUE9MQVRFX05PTkUsCisgIEdTVF9JTlRFUlBPTEFURV9UUklHR0VSLAorICBHU1RfSU5URVJQT0xBVEVfTElORUFSLAorICBHU1RfSU5URVJQT0xBVEVfUVVBRFJBVElDLAorICBHU1RfSU5URVJQT0xBVEVfQ1VCSUMsCisgIEdTVF9JTlRFUlBPTEFURV9VU0VSCit9IEdzdEludGVycG9sYXRlTW9kZTsKKzwvcHJlPgorPHA+CitUaGUgdmFyaW91cyBpbnRlcnBvbGF0aW9uIG1vZGVzIGF2YWlsYWJsZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUlOVEVSUE9MQVRFLU5PTkU6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0lOVEVSUE9MQVRFX05PTkU8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnN0ZXBzLWxpa2UgaW50ZXJwb2xhdGlvbiwgZGVmYXVsdAorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUlOVEVSUE9MQVRFLVRSSUdHRVI6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0lOVEVSUE9MQVRFX1RSSUdHRVI8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnJldHVybnMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHByb3BlcnR5LAorZXhjZXB0IGZvciB0aW1lcyB3aXRoIHNwZWNpZmljIHZhbHVlcworPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUlOVEVSUE9MQVRFLUxJTkVBUjpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfSU5URVJQT0xBVEVfTElORUFSPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5saW5lYXIgaW50ZXJwb2xhdGlvbgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUlOVEVSUE9MQVRFLVFVQURSQVRJQzpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfSU5URVJQT0xBVEVfUVVBRFJBVElDPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zcXVhcmUgaW50ZXJwb2xhdGlvbiAoZGVwcmVjYXRlZCwgbWFwcyB0byBjdWJpYykKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1JTlRFUlBPTEFURS1DVUJJQzpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfSU5URVJQT0xBVEVfQ1VCSUM8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmN1YmljIGludGVycG9sYXRpb24KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1JTlRFUlBPTEFURS1VU0VSOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9JTlRFUlBPTEFURV9VU0VSPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VyLXByb3ZpZGVkIGludGVycG9sYXRpb24gKG5vdCB5ZXQgYXZhaWxhYmxlKQorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWludGVycG9sYXRpb24tY29udHJvbC1zb3VyY2UtbmV3Ij48L2E+PGgzPmdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX25ldyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZTwvc3Bhbj48L2E+ICogZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfbmV3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVGhpcyByZXR1cm5zIGEgbmV3LCB1bmJvdW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZTwvc3Bhbj48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXcsIHVuYm91bmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1pbnRlcnBvbGF0aW9uLWNvbnRyb2wtc291cmNlLXNldCI+PC9hPjxoMz5nc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlPC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lc3RhbXA8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldCB0aGUgdmFsdWUgb2YgZ2l2ZW4gY29udHJvbGxlci1oYW5kbGVkIHByb3BlcnR5IGF0IGEgY2VydGFpbiB0aW1lLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlbGY8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZTwvc3Bhbj48L2E+IG9iamVjdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZXN0YW1wPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB0aW1lIHRoZSBjb250cm9sLWNoYW5nZSBpcyBzY2hlZHVsZWQgZm9yPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY29udHJvbC12YWx1ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkZBTFNFIGlmIHRoZSB2YWx1ZXMgY291bGRuJ3QgYmUgc2V0LCBUUlVFIG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtaW50ZXJwb2xhdGlvbi1jb250cm9sLXNvdXJjZS1zZXQtZnJvbS1saXN0Ij48L2E+PGgzPmdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldF9mcm9tX2xpc3QgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0X2Zyb21fbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZTwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU2luZ2x5LUxpbmtlZC1MaXN0cy5odG1sI0dTTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTTGlzdDwvc3Bhbj48L2E+ICp0aW1lZHZhbHVlczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgbXVsdGlwbGUgdGltZWQgdmFsdWVzIGF0IG9uY2UuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VsZjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlPC9zcGFuPjwvYT4gb2JqZWN0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50aW1lZHZhbHVlczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGxpc3Qgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdFRpbWVkVmFsdWUiIHRpdGxlPSJzdHJ1Y3QgR3N0VGltZWRWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRpbWVkVmFsdWU8L3NwYW4+PC9hPiBpdGVtczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkZBTFNFIGlmIHRoZSB2YWx1ZXMgY291bGRuJ3QgYmUgc2V0LCBUUlVFIG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtaW50ZXJwb2xhdGlvbi1jb250cm9sLXNvdXJjZS1zZXQtaW50ZXJwb2xhdGlvbi1tb2RlIj48L2E+PGgzPmdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldF9pbnRlcnBvbGF0aW9uX21vZGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0X2ludGVycG9sYXRpb25fbW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZTwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sI0dzdEludGVycG9sYXRlTW9kZSIgdGl0bGU9ImVudW0gR3N0SW50ZXJwb2xhdGVNb2RlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW50ZXJwb2xhdGVNb2RlPC9zcGFuPjwvYT4gbW9kZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgdGhlIGdpdmVuIGludGVycG9sYXRpb24gbW9kZS4KKzwvcD4KKzxwPgorPC9wPgorPGRpdiBjbGFzcz0ibm90ZSIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPgorPGgzIGNsYXNzPSJ0aXRsZSI+Tm90ZTwvaDM+Cis8cD5Vc2VyIGludGVycG9sYXRpb24gaXMgbm90IHlldCBhdmFpbGFibGUgYW5kIHF1YWRyYXRpYyBpbnRlcnBvbGF0aW9uCitpcyBkZXByZWNhdGVkIGFuZCBtYXBzIHRvIGN1YmljIGludGVycG9sYXRpb24uPC9wPgorPC9kaXY+Cis8cD4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWxmPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiBvYmplY3Q8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1vZGU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+aW50ZXJwb2xhdGlvbiBtb2RlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgaW50ZXJwb2xhdGlvbiBtb2RlIGNvdWxkIGJlIHNldCwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2U8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtaW50ZXJwb2xhdGlvbi1jb250cm9sLXNvdXJjZS1nZXQtYWxsIj48L2E+PGgzPmdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2dldF9hbGwgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdMaXN0PC9zcGFuPjwvYT4gKiAgICAgICAgICAgICBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9nZXRfYWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlPC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZXR1cm5zIGEgcmVhZC1vbmx5IGNvcHkgb2YgdGhlIGxpc3Qgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RUaW1lZFZhbHVlIiB0aXRsZT0ic3RydWN0IEdzdFRpbWVkVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUaW1lZFZhbHVlPC9zcGFuPjwvYT4gZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS4KK0ZyZWUgdGhlIGxpc3QgYWZ0ZXIgZG9uZSB3aXRoIGl0LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlbGY8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZTwvc3Bhbj48L2E+IHRvIGdldCB0aGUgbGlzdCBmcm9tPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBjb3B5IG9mIHRoZSBsaXN0LCBvciA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiB0aGUgcHJvcGVydHkgaXNuJ3QgaGFuZGxlZCBieSB0aGUgY29udHJvbGxlcjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1pbnRlcnBvbGF0aW9uLWNvbnRyb2wtc291cmNlLXVuc2V0Ij48L2E+PGgzPmdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3Vuc2V0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3Vuc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlPC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lc3RhbXA8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitVc2VkIHRvIHJlbW92ZSB0aGUgdmFsdWUgb2YgZ2l2ZW4gY29udHJvbGxlci1oYW5kbGVkIHByb3BlcnR5IGF0IGEgY2VydGFpbgordGltZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWxmPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiBvYmplY3Q8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWVzdGFtcDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgdGltZSB0aGUgY29udHJvbC1jaGFuZ2Ugc2hvdWxkIGJlIHJlbW92ZWQgZnJvbTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkZBTFNFIGlmIHRoZSB2YWx1ZSBjb3VsZG4ndCBiZSB1bnNldCAoaS5lLiBub3QgZm91bmQsIFRSVUUgb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1pbnRlcnBvbGF0aW9uLWNvbnRyb2wtc291cmNlLXVuc2V0LWFsbCI+PC9hPjxoMz5nc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV91bnNldF9hbGwgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfdW5zZXRfYWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlPC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitVc2VkIHRvIHJlbW92ZSBhbGwgdGltZS1zdGFtcGVkIHZhbHVlcyBvZiBnaXZlbiBjb250cm9sbGVyLWhhbmRsZWQgcHJvcGVydHkKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VsZjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlPC9zcGFuPjwvYT4gb2JqZWN0PC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1pbnRlcnBvbGF0aW9uLWNvbnRyb2wtc291cmNlLWdldC1jb3VudCI+PC9hPjxoMz5nc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9nZXRfY291bnQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9nZXRfY291bnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JldHVybnMgdGhlIG51bWJlciBvZiBjb250cm9sIHBvaW50cyB0aGF0IGFyZSBzZXQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VsZjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlPC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSBudW1iZXIgb2YgdmFsdWVzIGZyb208L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbnVtYmVyIG9mIGNvbnRyb2wgcG9pbnRzIHRoYXQgYXJlIHNldC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL0dzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCBiL2RvY3MvbGlicy9odG1sL0dzdExGT0NvbnRyb2xTb3VyY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGM5NjNkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9saWJzL2h0bWwvR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sCkBAIC0wLDAgKzEsMjIxIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0TEZPQ29udHJvbFNvdXJjZTwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImdzdHJlYW1lci1jb250cm9sLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgRHluYW1pYyBQYXJhbWV0ZXIgQ29udHJvbCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RDb250cm9sbGVyR09iamVjdCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImdzdHJlYW1lci1jb250cm9sLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDb250cm9sbGVyR09iamVjdC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI0dzdExGT0NvbnRyb2xTb3VyY2Uuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RMRk9Db250cm9sU291cmNlLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RMRk9Db250cm9sU291cmNlLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0TEZPQ29udHJvbFNvdXJjZS5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iR3N0TEZPQ29udHJvbFNvdXJjZSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9IkdzdExGT0NvbnRyb2xTb3VyY2UudG9wX29mX3BhZ2UiPjwvYT5Hc3RMRk9Db250cm9sU291cmNlPC9zcGFuPjwvaDI+Cis8cD5Hc3RMRk9Db250cm9sU291cmNlIOKAlCBMRk8gY29udHJvbCBzb3VyY2U8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJHc3RMRk9Db250cm9sU291cmNlLnN5bm9wc2lzIj48L2E+PGgyPlN5bm9wc2lzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyNpbmNsdWRlICZsdDtsaWJzL2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5oJmd0OworCitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPQ29udHJvbFNvdXJjZS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TEZPQ29udHJvbFNvdXJjZSI+R3N0TEZPQ29udHJvbFNvdXJjZTwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPV2F2ZWZvcm0iIHRpdGxlPSJlbnVtIEdzdExGT1dhdmVmb3JtIj5Hc3RMRk9XYXZlZm9ybTwvYT47Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0TEZPQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RMRk9Db250cm9sU291cmNlPC9zcGFuPjwvYT4gKiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sI2dzdC1sZm8tY29udHJvbC1zb3VyY2UtbmV3IiB0aXRsZT0iZ3N0X2xmb19jb250cm9sX3NvdXJjZV9uZXcgKCkiPmdzdF9sZm9fY29udHJvbF9zb3VyY2VfbmV3PC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdExGT0NvbnRyb2xTb3VyY2Uub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPkdPYmplY3Q8L2E+CisgICArLS0tLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj5Hc3RDb250cm9sU291cmNlPC9hPgorICAgICAgICAgKy0tLS1Hc3RMRk9Db250cm9sU291cmNlCis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0TEZPQ29udHJvbFNvdXJjZS5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNHc3RMRk9Db250cm9sU291cmNlLS1hbXBsaXR1ZGUiIHRpdGxlPSdUaGUgImFtcGxpdHVkZSIgcHJvcGVydHknPmFtcGxpdHVkZTwvYT4iICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiogICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNHc3RMRk9Db250cm9sU291cmNlLS1mcmVxdWVuY3kiIHRpdGxlPSdUaGUgImZyZXF1ZW5jeSIgcHJvcGVydHknPmZyZXF1ZW5jeTwvYT4iICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPQ29udHJvbFNvdXJjZS0tb2Zmc2V0IiB0aXRsZT0nVGhlICJvZmZzZXQiIHByb3BlcnR5Jz5vZmZzZXQ8L2E+IiAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4qICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPQ29udHJvbFNvdXJjZS0tdGltZXNoaWZ0IiB0aXRsZT0nVGhlICJ0aW1lc2hpZnQiIHByb3BlcnR5Jz50aW1lc2hpZnQ8L2E+IiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sI0dzdExGT0NvbnRyb2xTb3VyY2UtLXdhdmVmb3JtIiB0aXRsZT0nVGhlICJ3YXZlZm9ybSIgcHJvcGVydHknPndhdmVmb3JtPC9hPiIgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPV2F2ZWZvcm0iIHRpdGxlPSJlbnVtIEdzdExGT1dhdmVmb3JtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TEZPV2F2ZWZvcm08L3NwYW4+PC9hPiAgICAgICAgOiBSZWFkIC8gV3JpdGUKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RMRk9Db250cm9sU291cmNlLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdExGT0NvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RMRk9Db250cm9sU291cmNlPC9zcGFuPjwvYT4gaXMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiwgdGhhdCBwcm92aWRlcyBzZXZlcmFsIHBlcmlvZGljIHdhdmVmb3JtcworYXMgY29udHJvbCB2YWx1ZXMuIEl0IHN1cHBvcnRzIGFsbCBmdW5kYW1lbnRhbCwgbnVtZXJpYyBHVmFsdWUgdHlwZXMgYXMgcHJvcGVydHkuCis8L3A+Cis8cD4KK1RvIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0TEZPQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdExGT0NvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiBnZXQgYSBuZXcgaW5zdGFuY2UgYnkgY2FsbGluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sI2dzdC1sZm8tY29udHJvbC1zb3VyY2UtbmV3IiB0aXRsZT0iZ3N0X2xmb19jb250cm9sX3NvdXJjZV9uZXcgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2xmb19jb250cm9sX3NvdXJjZV9uZXcoKTwvY29kZT48L2E+LAorYmluZCBpdCB0byBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtR1BhcmFtU3BlYy5odG1sI0dQYXJhbVNwZWMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUGFyYW1TcGVjPC9zcGFuPjwvYT4gYW5kIHNldCB0aGUgcmVsZXZhbnQgcHJvcGVydGllcyBvciB1c2UKK2dzdF9sZm9fY29udHJvbF9zb3VyY2Vfc2V0X3dhdmVmb3JtLgorPC9wPgorPHA+CitBbGwgZnVuY3Rpb25zIGFyZSBNVC1zYWZlLgorPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RMRk9Db250cm9sU291cmNlLmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RMRk9Db250cm9sU291cmNlLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0TEZPQ29udHJvbFNvdXJjZTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdExGT0NvbnRyb2xTb3VyY2U7PC9wcmU+Cis8cD4KK1RoZSBpbnN0YW5jZSBzdHJ1Y3R1cmUgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4uCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdExGT1dhdmVmb3JtIj48L2E+PGgzPmVudW0gR3N0TEZPV2F2ZWZvcm08L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEdTVF9MRk9fV0FWRUZPUk1fU0lORSwKKyAgR1NUX0xGT19XQVZFRk9STV9TUVVBUkUsCisgIEdTVF9MRk9fV0FWRUZPUk1fU0FXLAorICBHU1RfTEZPX1dBVkVGT1JNX1JFVkVSU0VfU0FXLAorICBHU1RfTEZPX1dBVkVGT1JNX1RSSUFOR0xFCit9IEdzdExGT1dhdmVmb3JtOworPC9wcmU+Cis8cD4KK1RoZSB2YXJpb3VzIHdhdmVmb3JtIG1vZGVzIGF2YWlsYWJsZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUxGTy1XQVZFRk9STS1TSU5FOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9MRk9fV0FWRUZPUk1fU0lORTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2luZSB3YXZlZm9ybQorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUxGTy1XQVZFRk9STS1TUVVBUkU6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0xGT19XQVZFRk9STV9TUVVBUkU8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnNxdWFyZSB3YXZlZm9ybQorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUxGTy1XQVZFRk9STS1TQVc6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0xGT19XQVZFRk9STV9TQVc8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnNhdyB3YXZlZm9ybQorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUxGTy1XQVZFRk9STS1SRVZFUlNFLVNBVzpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTEZPX1dBVkVGT1JNX1JFVkVSU0VfU0FXPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5yZXZlcnNlIHNhdyB3YXZlZm9ybQorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUxGTy1XQVZFRk9STS1UUklBTkdMRTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTEZPX1dBVkVGT1JNX1RSSUFOR0xFPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50cmlhbmdsZSB3YXZlZm9ybQorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWxmby1jb250cm9sLXNvdXJjZS1uZXciPjwvYT48aDM+Z3N0X2xmb19jb250cm9sX3NvdXJjZV9uZXcgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RMRk9Db250cm9sU291cmNlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdExGT0NvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiAqIGdzdF9sZm9fY29udHJvbF9zb3VyY2VfbmV3ICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1RoaXMgcmV0dXJucyBhIG5ldywgdW5ib3VuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0TEZPQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdExGT0NvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3LCB1bmJvdW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RMRk9Db250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TEZPQ29udHJvbFNvdXJjZTwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdExGT0NvbnRyb2xTb3VyY2UucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdExGT0NvbnRyb2xTb3VyY2UtLWFtcGxpdHVkZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJhbXBsaXR1ZGUiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiYW1wbGl0dWRlIiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4qICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPgorU3BlY2lmaWVzIHRoZSBhbXBsaXR1ZGUgZm9yIHRoZSB3YXZlZm9ybSBvZiB0aGlzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RMRk9Db250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TEZPQ29udHJvbFNvdXJjZTwvc3Bhbj48L2E+LgorPC9wPgorPHA+CitJdCBzaG91bGQgYmUgZ2l2ZW4gYXMgYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gd2l0aCBhIHR5cGUgdGhhdCBjYW4gYmUgdHJhbnNmb3JtZWQKK3RvIHRoZSB0eXBlIG9mIHRoZSBib3VuZCBwcm9wZXJ0eS4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0TEZPQ29udHJvbFNvdXJjZS0tZnJlcXVlbmN5Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImZyZXF1ZW5jeSI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJmcmVxdWVuY3kiICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPgorU3BlY2lmaWVzIHRoZSBmcmVxdWVuY3kgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgdGhlIHdhdmVmb3JtCitvZiB0aGlzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RMRk9Db250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TEZPQ29udHJvbFNvdXJjZTwvc3Bhbj48L2E+LiBJdCBzaG91bGQgYmUgbGFyZ2UgZW5vdWdoCitzbyB0aGF0IHRoZSBwZXJpb2QgaXMgbG9uZ2VyIHRoYW4gb25lIG5hbm9zZWNvbmQuCis8L3A+Cis8cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMDwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IDE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdExGT0NvbnRyb2xTb3VyY2UtLW9mZnNldCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJvZmZzZXQiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAib2Zmc2V0IiAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4qICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPgorU3BlY2lmaWVzIHRoZSBvZmZzZXQgZm9yIHRoZSB3YXZlZm9ybSBvZiB0aGlzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RMRk9Db250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TEZPQ29udHJvbFNvdXJjZTwvc3Bhbj48L2E+LgorPC9wPgorPHA+CitJdCBzaG91bGQgYmUgZ2l2ZW4gYXMgYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gd2l0aCBhIHR5cGUgdGhhdCBjYW4gYmUgdHJhbnNmb3JtZWQKK3RvIHRoZSB0eXBlIG9mIHRoZSBib3VuZCBwcm9wZXJ0eS4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0TEZPQ29udHJvbFNvdXJjZS0tdGltZXNoaWZ0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+InRpbWVzaGlmdCI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJ0aW1lc2hpZnQiICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPgorU3BlY2lmaWVzIHRoZSB0aW1lc2hpZnQgdG8gdGhlIHJpZ2h0IHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHRoZSB3YXZlZm9ybQorb2YgdGhpcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0TEZPQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdExGT0NvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiBpbiBuYW5vc2Vjb25kcy4KKzwvcD4KKzxwPgorVG8gZ2V0IGEgbiBuYW5vc2Vjb25kIHNoaWZ0IHRvIHRoZSBsZWZ0IHVzZQorIihHU1RfU0VDT05EIC8gZnJlcXVlbmN5KSAtIG4iLgorPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0TEZPQ29udHJvbFNvdXJjZS0td2F2ZWZvcm0iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4id2F2ZWZvcm0iPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAid2F2ZWZvcm0iICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sI0dzdExGT1dhdmVmb3JtIiB0aXRsZT0iZW51bSBHc3RMRk9XYXZlZm9ybSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdExGT1dhdmVmb3JtPC9zcGFuPjwvYT4gICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD4KK1NwZWNpZmllcyB0aGUgd2F2ZWZvcm0gdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgdGhpcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0TEZPQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdExGT0NvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPi4KKzwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IEdTVF9MRk9fV0FWRUZPUk1fU0lORTwvcD4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9Hc3ROZXRDbGllbnRDbG9jay5odG1sIGIvZG9jcy9saWJzL2h0bWwvR3N0TmV0Q2xpZW50Q2xvY2suaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTE3NTdhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9saWJzL2h0bWwvR3N0TmV0Q2xpZW50Q2xvY2suaHRtbApAQCAtMCwwICsxLDE3NSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdzdE5ldENsaWVudENsb2NrPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZ3N0cmVhbWVyLW5ldC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIE5ldHdvcmsgQ2xhc3NlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1uZXQuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBOZXR3b3JrIENsYXNzZXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwiIHRpdGxlPSJHc3ROZXRUaW1lUGFja2V0Ij4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItbmV0Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItbmV0Lmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjR3N0TmV0Q2xpZW50Q2xvY2suc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3ROZXRDbGllbnRDbG9jay5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0TmV0Q2xpZW50Q2xvY2sub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3ROZXRDbGllbnRDbG9jay5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iR3N0TmV0Q2xpZW50Q2xvY2siPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3ROZXRDbGllbnRDbG9jay50b3Bfb2ZfcGFnZSI+PC9hPkdzdE5ldENsaWVudENsb2NrPC9zcGFuPjwvaDI+Cis8cD5Hc3ROZXRDbGllbnRDbG9jayDigJQgU3BlY2lhbCBjbG9jayB0aGF0IHN5bmNocm9uaXplcyB0byBhIHJlbW90ZSB0aW1lCisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyLjwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9IkdzdE5ldENsaWVudENsb2NrLnN5bm9wc2lzIj48L2E+PGgyPlN5bm9wc2lzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyNpbmNsdWRlICZsdDtnc3QvbmV0L2dzdG5ldC5oJmd0OworCitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sI0dzdE5ldENsaWVudENsb2NrLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3ROZXRDbGllbnRDbG9jayI+R3N0TmV0Q2xpZW50Q2xvY2s8L2E+OworPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICogICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldENsaWVudENsb2NrLmh0bWwjZ3N0LW5ldC1jbGllbnQtY2xvY2stbmV3IiB0aXRsZT0iZ3N0X25ldF9jbGllbnRfY2xvY2tfbmV3ICgpIj5nc3RfbmV0X2NsaWVudF9jbG9ja19uZXc8L2E+ICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnJlbW90ZV9hZGRyZXNzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IHJlbW90ZV9wb3J0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gYmFzZV90aW1lPC9jb2RlPjwvZW0+KTsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3ROZXRDbGllbnRDbG9jay5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+R09iamVjdDwvYT4KKyAgICstLS0tPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KKyAgICAgICAgICstLS0tPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwiPkdzdE9iamVjdDwvYT4KKyAgICAgICAgICAgICAgICstLS0tPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCI+R3N0Q2xvY2s8L2E+CisgICAgICAgICAgICAgICAgICAgICArLS0tLTxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFN5c3RlbUNsb2NrLmh0bWwiPkdzdFN5c3RlbUNsb2NrPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS1Hc3ROZXRDbGllbnRDbG9jaworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdE5ldENsaWVudENsb2NrLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCNHc3ROZXRDbGllbnRDbG9jay0tYWRkcmVzcyIgdGl0bGU9J1RoZSAiYWRkcmVzcyIgcHJvcGVydHknPmFkZHJlc3M8L2E+IiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4qICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCNHc3ROZXRDbGllbnRDbG9jay0tcG9ydCIgdGl0bGU9J1RoZSAicG9ydCIgcHJvcGVydHknPnBvcnQ8L2E+IiAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3ROZXRDbGllbnRDbG9jay5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK1RoaXMgb2JqZWN0IGltcGxlbWVudHMgYSBjdXN0b20gPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gdGhhdCBzeW5jaHJvbml6ZXMgaXRzIHRpbWUKK3RvIGEgcmVtb3RlIHRpbWUgcHJvdmlkZXIgc3VjaCBhcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3ROZXRUaW1lUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRUaW1lUHJvdmlkZXI8L3NwYW4+PC9hPi4KKzwvcD4KKzxwPgorQSBuZXcgY2xvY2sgaXMgY3JlYXRlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sI2dzdC1uZXQtY2xpZW50LWNsb2NrLW5ldyIgdGl0bGU9ImdzdF9uZXRfY2xpZW50X2Nsb2NrX25ldyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbmV0X2NsaWVudF9jbG9ja19uZXcoKTwvY29kZT48L2E+IHdoaWNoIHRha2VzIHRoZQorYWRkcmVzcyBhbmQgcG9ydCBvZiB0aGUgcmVtb3RlIHRpbWUgcHJvdmlkZXIgYWxvbmcgd2l0aCBhIG5hbWUgYW5kCithbiBpbml0aWFsIHRpbWUuCis8L3A+Cis8cD4KK1RoaXMgY2xvY2sgd2lsbCBwb2xsIHRoZSB0aW1lIHByb3ZpZGVyIGFuZCB3aWxsIHVwZGF0ZSBpdHMgY2FsaWJyYXRpb24KK3BhcmFtZXRlcnMgYmFzZWQgb24gdGhlIGxvY2FsIGFuZCByZW1vdGUgb2JzZXJ2YXRpb25zLgorPC9wPgorPHA+CitWYXJpb3VzIHBhcmFtZXRlcnMgb2YgdGhlIGNsb2NrIGNhbiBiZSBjb25maWd1cmVkIHdpdGggdGhlIHBhcmVudCA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPgorInRpbWVvdXQiLCAid2luZG93LXNpemUiIGFuZCAid2luZG93LXRocmVzaG9sZCIgb2JqZWN0IHByb3BlcnRpZXMuCis8L3A+Cis8cD4KK0EgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldENsaWVudENsb2NrLmh0bWwiIHRpdGxlPSJHc3ROZXRDbGllbnRDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE5ldENsaWVudENsb2NrPC9zcGFuPjwvYT4gaXMgdHlwaWNhbGx5IHNldCBvbiBhIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBpcGVsaW5lLmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+IHdpdGggCis8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS11c2UtY2xvY2siPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BpcGVsaW5lX3VzZV9jbG9jaygpPC9jb2RlPjwvYT4uCis8L3A+Cis8cD4KK0xhc3QgcmV2aWV3ZWQgb24gMjAwNS0xMS0yMyAoMC45LjUpCis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdE5ldENsaWVudENsb2NrLmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3ROZXRDbGllbnRDbG9jay1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdE5ldENsaWVudENsb2NrPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0TmV0Q2xpZW50Q2xvY2s7PC9wcmU+Cis8cD4KK09wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCIgdGl0bGU9IkdzdE5ldENsaWVudENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TmV0Q2xpZW50Q2xvY2s8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUuCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1uZXQtY2xpZW50LWNsb2NrLW5ldyI+PC9hPjxoMz5nc3RfbmV0X2NsaWVudF9jbG9ja19uZXcgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqICAgICAgICAgIGdzdF9uZXRfY2xpZW50X2Nsb2NrX25ldyAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpyZW1vdGVfYWRkcmVzczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiByZW1vdGVfcG9ydDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IGJhc2VfdGltZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZSBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCIgdGl0bGU9IkdzdE5ldENsaWVudENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TmV0Q2xpZW50Q2xvY2s8L3NwYW4+PC9hPiB0aGF0IHdpbGwgcmVwb3J0IHRoZSB0aW1lCitwcm92aWRlZCBieSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sIiB0aXRsZT0iR3N0TmV0VGltZVByb3ZpZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TmV0VGltZVByb3ZpZGVyPC9zcGFuPjwvYT4gb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlbW90ZV9hZGRyZXNzPC9jb2RlPjwvZW0+IGFuZCAKKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZW1vdGVfcG9ydDwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmFtZSBmb3IgdGhlIGNsb2NrPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZW1vdGVfYWRkcmVzczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgYWRkcmVzcyBvZiB0aGUgcmVtb3RlIGNsb2NrIHByb3ZpZGVyPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZW1vdGVfcG9ydDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcG9ydCBvZiB0aGUgcmVtb3RlIGNsb2NrIHByb3ZpZGVyPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iYXNlX3RpbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+aW5pdGlhbCB0aW1lIG9mIHRoZSBjbG9jazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IHRoYXQgcmVjZWl2ZXMgYSB0aW1lIGZyb20gdGhlIHJlbW90ZQorY2xvY2suPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3ROZXRDbGllbnRDbG9jay5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0TmV0Q2xpZW50Q2xvY2stLWFkZHJlc3MiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4iYWRkcmVzcyI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJhZGRyZXNzIiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4qICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5UaGUgYWRkcmVzcyBvZiB0aGUgbWFjaGluZSBwcm92aWRpbmcgYSB0aW1lIHNlcnZlciwgYXMgYSBkb3R0ZWQgcXVhZCAoeC54LngueCkuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogIjEyNy4wLjAuMSI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdE5ldENsaWVudENsb2NrLS1wb3J0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+InBvcnQiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAicG9ydCIgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5UaGUgcG9ydCBvbiB3aGljaCB0aGUgcmVtb3RlIHNlcnZlciBpcyBsaXN0ZW5pbmcuPC9wPgorPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDY1NTM1XTwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IDU2Mzc8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0TmV0Q2xpZW50Q2xvY2suc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgorPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCIgdGl0bGU9IkdzdE5ldFRpbWVQcm92aWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE5ldFRpbWVQcm92aWRlcjwvc3Bhbj48L2E+LCA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQaXBlbGluZS5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9Hc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCBiL2RvY3MvbGlicy9odG1sL0dzdE5ldFRpbWVQcm92aWRlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MzQyYzgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2xpYnMvaHRtbC9Hc3ROZXRUaW1lUHJvdmlkZXIuaHRtbApAQCAtMCwwICsxLDE3MyBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdzdE5ldFRpbWVQcm92aWRlcjwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImdzdHJlYW1lci1uZXQuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBOZXR3b3JrIENsYXNzZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwiIHRpdGxlPSJHc3ROZXRUaW1lUGFja2V0Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLWNoZWNrLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ2hlY2sgVW5pdCBUZXN0aW5nIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItbmV0Lmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItY2hlY2suaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNHc3ROZXRUaW1lUHJvdmlkZXIuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3ROZXRUaW1lUHJvdmlkZXIuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdE5ldFRpbWVQcm92aWRlci5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdE5ldFRpbWVQcm92aWRlci5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iR3N0TmV0VGltZVByb3ZpZGVyIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0TmV0VGltZVByb3ZpZGVyLnRvcF9vZl9wYWdlIj48L2E+R3N0TmV0VGltZVByb3ZpZGVyPC9zcGFuPjwvaDI+Cis8cD5Hc3ROZXRUaW1lUHJvdmlkZXIg4oCUIFNwZWNpYWwgb2JqZWN0IHRoYXQgZXhwb3NlZCB0aGUgdGltZSBvZiBhIGNsb2NrCisgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBuZXR3b3JrLjwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9IkdzdE5ldFRpbWVQcm92aWRlci5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisjaW5jbHVkZSAmbHQ7Z3N0L25ldC9nc3RuZXQuaCZndDsKKworc3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwjR3N0TmV0VGltZVByb3ZpZGVyLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3ROZXRUaW1lUHJvdmlkZXIiPkdzdE5ldFRpbWVQcm92aWRlcjwvYT47Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3ROZXRUaW1lUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TmV0VGltZVByb3ZpZGVyPC9zcGFuPjwvYT4gKiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwjZ3N0LW5ldC10aW1lLXByb3ZpZGVyLW5ldyIgdGl0bGU9ImdzdF9uZXRfdGltZV9wcm92aWRlcl9uZXcgKCkiPmdzdF9uZXRfdGltZV9wcm92aWRlcl9uZXc8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKmNsb2NrPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmFkZHJlc3M8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gcG9ydDwvY29kZT48L2VtPik7Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0TmV0VGltZVByb3ZpZGVyLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij5HT2JqZWN0PC9hPgorICAgKy0tLS08YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgorICAgICAgICAgKy0tLS08YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCI+R3N0T2JqZWN0PC9hPgorICAgICAgICAgICAgICAgKy0tLS1Hc3ROZXRUaW1lUHJvdmlkZXIKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3ROZXRUaW1lUHJvdmlkZXIucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCNHc3ROZXRUaW1lUHJvdmlkZXItLWFjdGl2ZSIgdGl0bGU9J1RoZSAiYWN0aXZlIiBwcm9wZXJ0eSc+YWN0aXZlPC9hPiIgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCNHc3ROZXRUaW1lUHJvdmlkZXItLWFkZHJlc3MiIHRpdGxlPSdUaGUgImFkZHJlc3MiIHByb3BlcnR5Jz5hZGRyZXNzPC9hPiIgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+KiAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sI0dzdE5ldFRpbWVQcm92aWRlci0tY2xvY2siIHRpdGxlPSdUaGUgImNsb2NrIiBwcm9wZXJ0eSc+Y2xvY2s8L2E+IiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4qICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwjR3N0TmV0VGltZVByb3ZpZGVyLS1wb3J0IiB0aXRsZT0nVGhlICJwb3J0IiBwcm9wZXJ0eSc+cG9ydDwvYT4iICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdE5ldFRpbWVQcm92aWRlci5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK1RoaXMgb2JqZWN0IGV4cG9zZXMgdGhlIHRpbWUgb2YgYSA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiBvbiB0aGUgbmV0d29yay4KKzwvcD4KKzxwPgorQSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3ROZXRUaW1lUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRUaW1lUHJvdmlkZXI8L3NwYW4+PC9hPiBpcyBjcmVhdGVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sI2dzdC1uZXQtdGltZS1wcm92aWRlci1uZXciIHRpdGxlPSJnc3RfbmV0X3RpbWVfcHJvdmlkZXJfbmV3ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9uZXRfdGltZV9wcm92aWRlcl9uZXcoKTwvY29kZT48L2E+IHdoaWNoCit0YWtlcyBhIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+LCBhbiBhZGRyZXNzIGFuZCBhIHBvcnQgbnVtYmVyIGFzIGFyZ3VtZW50cy4KKzwvcD4KKzxwPgorQWZ0ZXIgY3JlYXRpbmcgdGhlIG9iamVjdCwgYSBjbGllbnQgY2xvY2sgc3VjaCBhcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCIgdGl0bGU9IkdzdE5ldENsaWVudENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TmV0Q2xpZW50Q2xvY2s8L3NwYW4+PC9hPiBjYW4KK3F1ZXJ5IHRoZSBleHBvc2VkIGNsb2NrIG92ZXIgdGhlIG5ldHdvcmsgZm9yIGl0cyB2YWx1ZXMuCis8L3A+Cis8cD4KK1RoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3ROZXRUaW1lUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRUaW1lUHJvdmlkZXI8L3NwYW4+PC9hPiB0eXBpY2FsbHkgd3JhcHMgdGhlIGNsb2NrIHVzZWQgYnkgYSA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQaXBlbGluZS5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPi4KKzwvcD4KKzxwPgorTGFzdCByZXZpZXdlZCBvbiAyMDA1LTExLTIzICgwLjkuNSkKKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0TmV0VGltZVByb3ZpZGVyLmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3ROZXRUaW1lUHJvdmlkZXItc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3ROZXRUaW1lUHJvdmlkZXI8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3ROZXRUaW1lUHJvdmlkZXI7PC9wcmU+Cis8cD4KK09wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3ROZXRUaW1lUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRUaW1lUHJvdmlkZXI8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUuCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1uZXQtdGltZS1wcm92aWRlci1uZXciPjwvYT48aDM+Z3N0X25ldF90aW1lX3Byb3ZpZGVyX25ldyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sIiB0aXRsZT0iR3N0TmV0VGltZVByb3ZpZGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE5ldFRpbWVQcm92aWRlcjwvc3Bhbj48L2E+ICogZ3N0X25ldF90aW1lX3Byb3ZpZGVyX25ldyAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICphZGRyZXNzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IHBvcnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBbGxvd3MgbmV0d29yayBjbGllbnRzIHRvIGdldCB0aGUgY3VycmVudCB0aW1lIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jbG9jazwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jbG9jazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IHRvIGV4cG9ydCBvdmVyIHRoZSBuZXR3b3JrPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hZGRyZXNzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFuIGFkZHJlc3MgdG8gYmluZCBvbiBhcyBhIGRvdHRlZCBxdWFkICh4eHgueHh4Lnh4eC54eHgpLCBvciBOVUxMCit0byBiaW5kIHRvIGFsbCBhZGRyZXNzZXM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBvcnQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBwb3J0IHRvIGJpbmQgb24sIG9yIDAgdG8gbGV0IHRoZSBrZXJuZWwgY2hvb3NlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3ROZXRUaW1lUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRUaW1lUHJvdmlkZXI8L3NwYW4+PC9hPiwgb3IgTlVMTCBvbiBlcnJvcjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0TmV0VGltZVByb3ZpZGVyLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3ROZXRUaW1lUHJvdmlkZXItLWFjdGl2ZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJhY3RpdmUiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiYWN0aXZlIiAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+VFJVRSBpZiB0aGUgY2xvY2sgd2lsbCByZXNwb25kIHRvIHF1ZXJpZXMgb3ZlciB0aGUgbmV0d29yay48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3ROZXRUaW1lUHJvdmlkZXItLWFkZHJlc3MiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4iYWRkcmVzcyI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJhZGRyZXNzIiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4qICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5UaGUgYWRkcmVzcyB0byBiaW5kIG9uLCBhcyBhIGRvdHRlZCBxdWFkICh4LngueC54KS48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiAiMC4wLjAuMCI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdE5ldFRpbWVQcm92aWRlci0tY2xvY2siPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4iY2xvY2siPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiY2xvY2siICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiogICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPlRoZSBjbG9jayB0byBleHBvcnQgb3ZlciB0aGUgbmV0d29yay48L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdE5ldFRpbWVQcm92aWRlci0tcG9ydCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJwb3J0IjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgInBvcnQiICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+VGhlIHBvcnQgdG8gcmVjZWl2ZSB0aGUgcGFja2V0cyBmcm9tLCAwPWFsbG9jYXRlLjwvcD4KKzxwPkFsbG93ZWQgdmFsdWVzOiBbMCw2NTUzNV08L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiA1NjM3PC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdE5ldFRpbWVQcm92aWRlci5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Cis8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldENsaWVudENsb2NrLmh0bWwiIHRpdGxlPSJHc3ROZXRDbGllbnRDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE5ldENsaWVudENsb2NrPC9zcGFuPjwvYT4sIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBpcGVsaW5lLmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL0dzdFB1c2hTcmMuaHRtbCBiL2RvY3MvbGlicy9odG1sL0dzdFB1c2hTcmMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTg4ZjQxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9saWJzL2h0bWwvR3N0UHVzaFNyYy5odG1sCkBAIC0wLDAgKzEsMTA5IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0UHVzaFNyYzwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImdzdHJlYW1lci1iYXNlLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQmFzZSBhbmQgVXRpbGxpdHkgQ2xhc3NlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItYmFzZS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0QWRhcHRlci5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI0dzdFB1c2hTcmMuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RQdXNoU3JjLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RQdXNoU3JjLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJHc3RQdXNoU3JjIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0UHVzaFNyYy50b3Bfb2ZfcGFnZSI+PC9hPkdzdFB1c2hTcmM8L3NwYW4+PC9oMj4KKzxwPkdzdFB1c2hTcmMg4oCUIEJhc2UgY2xhc3MgZm9yIHB1c2ggYmFzZWQgc291cmNlIGVsZW1lbnRzPC9wPgorPC90ZD4KKzx0ZCB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgorPC90cj48L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGEgbmFtZT0iR3N0UHVzaFNyYy5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisjaW5jbHVkZSAmbHQ7Z3N0L2Jhc2UvZ3N0cHVzaHNyYy5oJmd0OworCitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdXNoU3JjLmh0bWwjR3N0UHVzaFNyYy1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UHVzaFNyYyI+R3N0UHVzaFNyYzwvYT47Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iR3N0UHVzaFNyYy5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+R09iamVjdDwvYT4KKyAgICstLS0tPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KKyAgICAgICAgICstLS0tPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwiPkdzdE9iamVjdDwvYT4KKyAgICAgICAgICAgICAgICstLS0tPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sIj5Hc3RFbGVtZW50PC9hPgorICAgICAgICAgICAgICAgICAgICAgKy0tLS08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+R3N0QmFzZVNyYzwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tR3N0UHVzaFNyYworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdFB1c2hTcmMuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitUaGlzIGNsYXNzIGlzIG1vc3RseSB1c2VmdWwgZm9yIGVsZW1lbnRzIHRoYXQgY2Fubm90IGRvCityYW5kb20gYWNjZXNzLCBvciBhdCBsZWFzdCB2ZXJ5IHNsb3dseS4gVGhlIHNvdXJjZSB1c3VhbGx5CitwcmVmZXJzIHRvIHB1c2ggb3V0IGEgZml4ZWQgc2l6ZSBidWZmZXIuCis8L3A+Cis8cD4KK1N1YmNsYXNzZXMgdXN1YWxseSBvcGVyYXRlIGluIGEgZm9ybWF0IHRoYXQgaXMgZGlmZmVyZW50IGZyb20gdGhlCitkZWZhdWx0IEdTVF9GT1JNQVRfQllURVMgZm9ybWF0IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNyYzwvc3Bhbj48L2E+LgorPC9wPgorPHA+CitDbGFzc2VzIGV4dGVuZGluZyB0aGlzIGJhc2UgY2xhc3Mgd2lsbCB1c3VhbGx5IGJlIHNjaGVkdWxlZAoraW4gYSBwdXNoIGJhc2VkIG1vZGUuIElmIHRoZSBwZWVyIGFjY2VwdHMgdG8gb3BlcmF0ZSB3aXRob3V0CitvZmZzZXRzIGFuZCB3aXRoaW4gdGhlIGxpbWl0cyBvZiB0aGUgYWxsb3dlZCBibG9jayBzaXplLCB0aGlzCitjbGFzcyBjYW4gb3BlcmF0ZSBpbiBnZXRyYW5nZSBiYXNlZCBtb2RlIGF1dG9tYXRpY2FsbHkuIFRvIG1ha2UKK3RoaXMgcG9zc2libGUsIHRoZSBzdWJjbGFzcyBzaG91bGQgaW1wbGVtZW50IGFuZCBvdmVycmlkZSB0aGUKK1NDSEVEVUxJTkcgcXVlcnkuCis8L3A+Cis8cD4KK1RoZSBzdWJjbGFzcyBzaG91bGQgZXh0ZW5kIHRoZSBtZXRob2RzIGZyb20gdGhlIGJhc2VjbGFzcyBpbgorYWRkaXRpb24gdG8gdGhlIDo6Y3JlYXRlIG1ldGhvZC4KKzwvcD4KKzxwPgorU2Vla2luZywgZmx1c2hpbmcsIHNjaGVkdWxpbmcgYW5kIHN5bmMgaXMgYWxsIGhhbmRsZWQgYnkgdGhpcworYmFzZSBjbGFzcy4KKzwvcD4KKzxwPgorTGFzdCByZXZpZXdlZCBvbiAyMDA2LTA3LTA0ICgwLjEwLjkpCis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9IkdzdFB1c2hTcmMuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFB1c2hTcmMtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RQdXNoU3JjPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UHVzaFNyYzs8L3ByZT4KKzxwPgorVGhlIG9wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHVzaFNyYy5odG1sIiB0aXRsZT0iR3N0UHVzaFNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFB1c2hTcmM8L3NwYW4+PC9hPiBkYXRhIHN0cnVjdHVyZS4KKzwvcD4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJHc3RQdXNoU3JjLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNyYzwvc3Bhbj48L2E+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL2Fubm90YXRpb24tZ2xvc3NhcnkuaHRtbCBiL2RvY3MvbGlicy9odG1sL2Fubm90YXRpb24tZ2xvc3NhcnkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjBmMjFkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9saWJzL2h0bWwvYW5ub3RhdGlvbi1nbG9zc2FyeS5odG1sCkBAIC0wLDAgKzEsODkgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5Bbm5vdGF0aW9uIEdsb3NzYXJ5PC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImFwaS1pbmRleC1kZXByZWNhdGVkLmh0bWwiIHRpdGxlPSJJbmRleCBvZiBkZXByZWNhdGVkIEFQSSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iYXBpLWluZGV4LWRlcHJlY2F0ZWQuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD7CoDwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPsKgPC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjZ2xzTyI+TzwvYT4KKyAgICAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjZ2xzQSI+QTwvYT4KKyAgICAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjZ2xzQyI+QzwvYT4KKyAgICAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjZ2xzVCI+VDwvYT4KKyAgICAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjZ2xzQSI+QTwvYT4KKyAgICAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjZ2xzRSI+RTwvYT4KKyAgICAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjZ2xzSSI+STwvYT4KKyAgICAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjZ2xzUyI+UzwvYT4KKyAgICAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjZ2xzVCI+VDwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJnbG9zc2FyeSI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIj4KKzxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3NhcnkiPjwvYT5Bbm5vdGF0aW9uIEdsb3NzYXJ5PC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KKzxhIG5hbWU9Imdsc08iPjwvYT48aDMgY2xhc3M9InRpdGxlIj5PPC9oMz4KKzxkdD4KKzxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3N0ZXJtLW91dCI+PC9hPm91dDwvZHQ+Cis8ZGQ+PHA+UGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyA8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+LjwvcD48L2RkPgorPGEgbmFtZT0iZ2xzQSI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkE8L2gzPgorPGR0PgorPGEgbmFtZT0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0tYWxsb3ctbm9uZSI+PC9hPmFsbG93LW5vbmU8L2R0PgorPGRkPjxwPk5VTEwgaXMgb2ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuPC9wPjwvZGQ+Cis8YSBuYW1lPSJnbHNDIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+QzwvaDM+Cis8ZHQ+Cis8YSBuYW1lPSJhbm5vdGF0aW9uLWdsb3NzdGVybS1jbG9zdXJlIj48L2E+Y2xvc3VyZTwvZHQ+Cis8ZGQ+PHA+VGhpcyBwYXJhbWV0ZXIgaXMgYSAndXNlcl9kYXRhJywgZm9yIGNhbGxiYWNrczsgbWFueSBiaW5kaW5ncyBjYW4gcGFzcyBOVUxMIGhlcmUuPC9wPjwvZGQ+Cis8YSBuYW1lPSJnbHNUIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+VDwvaDM+Cis8ZHQ+Cis8YSBuYW1lPSJhbm5vdGF0aW9uLWdsb3NzdGVybS10cmFuc2ZlciUyMG5vbmUiPjwvYT50cmFuc2ZlciBub25lPC9kdD4KKzxkZD48cD5Eb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS48L3A+PC9kZD4KKzxhIG5hbWU9Imdsc0EiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5BPC9oMz4KKzxkdD4KKzxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3N0ZXJtLWFycmF5Ij48L2E+YXJyYXk8L2R0PgorPGRkPjxwPlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuPC9wPjwvZGQ+Cis8YSBuYW1lPSJnbHNFIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+RTwvaDM+Cis8ZHQ+Cis8YSBuYW1lPSJhbm5vdGF0aW9uLWdsb3NzdGVybS1lbGVtZW50LXR5cGUiPjwvYT5lbGVtZW50LXR5cGU8L2R0PgorPGRkPjxwPkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuPC9wPjwvZGQ+Cis8YSBuYW1lPSJnbHNJIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+STwvaDM+Cis8ZHQ+Cis8YSBuYW1lPSJhbm5vdGF0aW9uLWdsb3NzdGVybS1pbiI+PC9hPmluPC9kdD4KKzxkZD48cD5QYXJhbWV0ZXIgZm9yIGlucHV0LiBEZWZhdWx0IGlzIDxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT4uPC9wPjwvZGQ+Cis8YSBuYW1lPSJnbHNTIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+UzwvaDM+Cis8ZHQ+Cis8YSBuYW1lPSJhbm5vdGF0aW9uLWdsb3NzdGVybS1zY29wZSUyMGNhbGwiPjwvYT5zY29wZSBjYWxsPC9kdD4KKzxkZD48cD5UaGUgY2FsbGJhY2sgaXMgdmFsaWQgb25seSBkdXJpbmcgdGhlIGNhbGwgdG8gdGhlIG1ldGhvZC48L3A+PC9kZD4KKzxhIG5hbWU9Imdsc1QiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5UPC9oMz4KKzxkdD4KKzxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3N0ZXJtLXRyYW5zZmVyJTIwZnVsbCI+PC9hPnRyYW5zZmVyIGZ1bGw8L2R0PgorPGRkPjxwPkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLjwvcD48L2RkPgorPGR0PgorPGEgbmFtZT0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0tdHlwZSI+PC9hPnR5cGU8L2R0PgorPGRkPjxwPk92ZXJyaWRlIHRoZSBwYXJzZWQgQyB0eXBlIHdpdGggZ2l2ZW4gdHlwZTwvcD48L2RkPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvYXBpLWluZGV4LWRlcHJlY2F0ZWQuaHRtbCBiL2RvY3MvbGlicy9odG1sL2FwaS1pbmRleC1kZXByZWNhdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYzNzNmYQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbGlicy9odG1sL2FwaS1pbmRleC1kZXByZWNhdGVkLmh0bWwKQEAgLTAsMCArMSwzMSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkluZGV4IG9mIGRlcHJlY2F0ZWQgQVBJPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImFwaS1pbmRleC1mdWxsLmh0bWwiIHRpdGxlPSJBUEkgSW5kZXgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJhbm5vdGF0aW9uLWdsb3NzYXJ5Lmh0bWwiIHRpdGxlPSJBbm5vdGF0aW9uIEdsb3NzYXJ5Ij4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj48dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iYXBpLWluZGV4LWZ1bGwuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD7CoDwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iYW5ub3RhdGlvbi1nbG9zc2FyeS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxkaXYgY2xhc3M9ImluZGV4Ij4KKzxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiPgorPGEgbmFtZT0iYXBpLWluZGV4LWRlcHJlY2F0ZWQiPjwvYT5JbmRleCBvZiBkZXByZWNhdGVkIEFQSTwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Cis8YSBuYW1lPSJpZHgiPjwvYT4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL2FwaS1pbmRleC1mdWxsLmh0bWwgYi9kb2NzL2xpYnMvaHRtbC9hcGktaW5kZXgtZnVsbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MmIwYTIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2xpYnMvaHRtbC9hcGktaW5kZXgtZnVsbC5odG1sCkBAIC0wLDAgKzEsMjIxOSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkFQSSBJbmRleDwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItaGllcmFyY2h5Lmh0bWwiIHRpdGxlPSJPYmplY3QgSGllcmFyY2h5Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iYXBpLWluZGV4LWRlcHJlY2F0ZWQuaHRtbCIgdGl0bGU9IkluZGV4IG9mIGRlcHJlY2F0ZWQgQVBJIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItaGllcmFyY2h5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+wqA8L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIDAuMTEgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImFwaS1pbmRleC1kZXByZWNhdGVkLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhBIj5BPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhCIj5CPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhDIj5DPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhEIj5EPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhFIj5FPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhGIj5GPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhJIj5JPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhMIj5MPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhOIj5OPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhPIj5PPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhQIj5QPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhTIj5TPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhUIj5UPC9hPgorICAgICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhWIj5WPC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9ImluZGV4Ij4KKzxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiPgorPGEgbmFtZT0iYXBpLWluZGV4LWZ1bGwiPjwvYT5BUEkgSW5kZXg8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgorPGEgbmFtZT0iaWR4Ij48L2E+PGEgbmFtZT0iaWR4QSI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkE8L2gzPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNHc3RBZGFwdGVyLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1hdmFpbGFibGUiIHRpdGxlPSJnc3RfYWRhcHRlcl9hdmFpbGFibGUgKCkiPmdzdF9hZGFwdGVyX2F2YWlsYWJsZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1hdmFpbGFibGUtZmFzdCIgdGl0bGU9ImdzdF9hZGFwdGVyX2F2YWlsYWJsZV9mYXN0ICgpIj5nc3RfYWRhcHRlcl9hdmFpbGFibGVfZmFzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1jbGVhciIgdGl0bGU9ImdzdF9hZGFwdGVyX2NsZWFyICgpIj5nc3RfYWRhcHRlcl9jbGVhcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1jb3B5IiB0aXRsZT0iZ3N0X2FkYXB0ZXJfY29weSAoKSI+Z3N0X2FkYXB0ZXJfY29weTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1mbHVzaCIgdGl0bGU9ImdzdF9hZGFwdGVyX2ZsdXNoICgpIj5nc3RfYWRhcHRlcl9mbHVzaDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1tYXAiIHRpdGxlPSJnc3RfYWRhcHRlcl9tYXAgKCkiPmdzdF9hZGFwdGVyX21hcDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1tYXNrZWQtc2Nhbi11aW50MzIiIHRpdGxlPSJnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKCkiPmdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1tYXNrZWQtc2Nhbi11aW50MzItcGVlayIgdGl0bGU9ImdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMl9wZWVrICgpIj5nc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzJfcGVlazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1uZXciIHRpdGxlPSJnc3RfYWRhcHRlcl9uZXcgKCkiPmdzdF9hZGFwdGVyX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1wcmV2LXRpbWVzdGFtcCIgdGl0bGU9ImdzdF9hZGFwdGVyX3ByZXZfdGltZXN0YW1wICgpIj5nc3RfYWRhcHRlcl9wcmV2X3RpbWVzdGFtcDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1wdXNoIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfcHVzaCAoKSI+Z3N0X2FkYXB0ZXJfcHVzaDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci10YWtlIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfdGFrZSAoKSI+Z3N0X2FkYXB0ZXJfdGFrZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci10YWtlLWJ1ZmZlciIgdGl0bGU9ImdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyICgpIj5nc3RfYWRhcHRlcl90YWtlX2J1ZmZlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci10YWtlLWxpc3QiIHRpdGxlPSJnc3RfYWRhcHRlcl90YWtlX2xpc3QgKCkiPmdzdF9hZGFwdGVyX3Rha2VfbGlzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci11bm1hcCIgdGl0bGU9ImdzdF9hZGFwdGVyX3VubWFwICgpIj5nc3RfYWRhcHRlcl91bm1hcDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjQVNTRVJULUJVRkZFUi1SRUZDT1VOVDpDQVBTIiB0aXRsZT0iQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCgpIj5BU1NFUlRfQlVGRkVSX1JFRkNPVU5UPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNBU1NFUlQtQ0FQUy1SRUZDT1VOVDpDQVBTIiB0aXRsZT0iQVNTRVJUX0NBUFNfUkVGQ09VTlQoKSI+QVNTRVJUX0NBUFNfUkVGQ09VTlQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCIgdGl0bGU9IkdzdENoZWNrIj5Hc3RDaGVjazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0FTU0VSVC1DUklUSUNBTDpDQVBTIiB0aXRsZT0iQVNTRVJUX0NSSVRJQ0FMKCkiPkFTU0VSVF9DUklUSUNBTDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjYXNzZXJ0LWVxdWFscy1mbG9hdCIgdGl0bGU9ImFzc2VydF9lcXVhbHNfZmxvYXQoKSI+YXNzZXJ0X2VxdWFsc19mbG9hdDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjYXNzZXJ0LWVxdWFscy1pbnQiIHRpdGxlPSJhc3NlcnRfZXF1YWxzX2ludCgpIj5hc3NlcnRfZXF1YWxzX2ludDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjYXNzZXJ0LWVxdWFscy1pbnQ2NCIgdGl0bGU9ImFzc2VydF9lcXVhbHNfaW50NjQoKSI+YXNzZXJ0X2VxdWFsc19pbnQ2NDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjYXNzZXJ0LWVxdWFscy1zdHJpbmciIHRpdGxlPSJhc3NlcnRfZXF1YWxzX3N0cmluZygpIj5hc3NlcnRfZXF1YWxzX3N0cmluZzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjYXNzZXJ0LWVxdWFscy11aW50NjQiIHRpdGxlPSJhc3NlcnRfZXF1YWxzX3VpbnQ2NCgpIj5hc3NlcnRfZXF1YWxzX3VpbnQ2NDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjYXNzZXJ0LW1lc3NhZ2UtZXJyb3IiIHRpdGxlPSJhc3NlcnRfbWVzc2FnZV9lcnJvcigpIj5hc3NlcnRfbWVzc2FnZV9lcnJvcjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjQVNTRVJULU1JTkktT0JKRUNULVJFRkNPVU5UOkNBUFMiIHRpdGxlPSJBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQoKSI+QVNTRVJUX01JTklfT0JKRUNUX1JFRkNPVU5UPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNBU1NFUlQtT0JKRUNULVJFRkNPVU5UOkNBUFMiIHRpdGxlPSJBU1NFUlRfT0JKRUNUX1JFRkNPVU5UKCkiPkFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCIgdGl0bGU9IkdzdENoZWNrIj5Hc3RDaGVjazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0FTU0VSVC1PQkpFQ1QtUkVGQ09VTlQtQkVUV0VFTjpDQVBTIiB0aXRsZT0iQVNTRVJUX09CSkVDVF9SRUZDT1VOVF9CRVRXRUVOKCkiPkFTU0VSVF9PQkpFQ1RfUkVGQ09VTlRfQkVUV0VFTjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjQVNTRVJULVNFVC1TVEFURTpDQVBTIiB0aXRsZT0iQVNTRVJUX1NFVF9TVEFURSgpIj5BU1NFUlRfU0VUX1NUQVRFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNBU1NFUlQtV0FSTklORzpDQVBTIiB0aXRsZT0iQVNTRVJUX1dBUk5JTkcoKSI+QVNTRVJUX1dBUk5JTkc8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCIgdGl0bGU9IkdzdENoZWNrIj5Hc3RDaGVjazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxhIG5hbWU9ImlkeEIiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5CPC9oMz4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2UiIHRpdGxlPSJzdHJ1Y3QgR3N0QmFzZVBhcnNlIj5Hc3RCYXNlUGFyc2U8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj5Hc3RCYXNlUGFyc2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlQ2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0QmFzZVBhcnNlQ2xhc3MiPkdzdEJhc2VQYXJzZUNsYXNzPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUZyYW1lIiB0aXRsZT0iR3N0QmFzZVBhcnNlRnJhbWUiPkdzdEJhc2VQYXJzZUZyYW1lPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUZyYW1lRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEJhc2VQYXJzZUZyYW1lRmxhZ3MiPkdzdEJhc2VQYXJzZUZyYW1lRmxhZ3M8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1hc3luYyIgdGl0bGU9J1RoZSAiYXN5bmMiIHByb3BlcnR5Jz5Hc3RCYXNlU2luazphc3luYzwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1ibG9ja3NpemUiIHRpdGxlPSdUaGUgImJsb2Nrc2l6ZSIgcHJvcGVydHknPkdzdEJhc2VTaW5rOmJsb2Nrc2l6ZTwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1lbmFibGUtbGFzdC1idWZmZXIiIHRpdGxlPSdUaGUgImVuYWJsZS1sYXN0LWJ1ZmZlciIgcHJvcGVydHknPkdzdEJhc2VTaW5rOmVuYWJsZS1sYXN0LWJ1ZmZlcjwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1sYXN0LWJ1ZmZlciIgdGl0bGU9J1RoZSAibGFzdC1idWZmZXIiIHByb3BlcnR5Jz5Hc3RCYXNlU2luazpsYXN0LWJ1ZmZlcjwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1tYXgtbGF0ZW5lc3MiIHRpdGxlPSdUaGUgIm1heC1sYXRlbmVzcyIgcHJvcGVydHknPkdzdEJhc2VTaW5rOm1heC1sYXRlbmVzczwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1xb3MiIHRpdGxlPSdUaGUgInFvcyIgcHJvcGVydHknPkdzdEJhc2VTaW5rOnFvczwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1yZW5kZXItZGVsYXkiIHRpdGxlPSdUaGUgInJlbmRlci1kZWxheSIgcHJvcGVydHknPkdzdEJhc2VTaW5rOnJlbmRlci1kZWxheTwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1zeW5jIiB0aXRsZT0nVGhlICJzeW5jIiBwcm9wZXJ0eSc+R3N0QmFzZVNpbms6c3luYzwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS10aHJvdHRsZS10aW1lIiB0aXRsZT0nVGhlICJ0aHJvdHRsZS10aW1lIiBwcm9wZXJ0eSc+R3N0QmFzZVNpbms6dGhyb3R0bGUtdGltZTwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS10cy1vZmZzZXQiIHRpdGxlPSdUaGUgInRzLW9mZnNldCIgcHJvcGVydHknPkdzdEJhc2VTaW5rOnRzLW9mZnNldDwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rQ2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0QmFzZVNpbmtDbGFzcyI+R3N0QmFzZVNpbmtDbGFzczwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyYy1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0QmFzZVNyYyI+R3N0QmFzZVNyYzwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+R3N0QmFzZVNyYzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyYy0tYmxvY2tzaXplIiB0aXRsZT0nVGhlICJibG9ja3NpemUiIHByb3BlcnR5Jz5Hc3RCYXNlU3JjOmJsb2Nrc2l6ZTwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+R3N0QmFzZVNyYzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyYy0tZG8tdGltZXN0YW1wIiB0aXRsZT0nVGhlICJkby10aW1lc3RhbXAiIHByb3BlcnR5Jz5Hc3RCYXNlU3JjOmRvLXRpbWVzdGFtcDwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+R3N0QmFzZVNyYzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyYy0tbnVtLWJ1ZmZlcnMiIHRpdGxlPSdUaGUgIm51bS1idWZmZXJzIiBwcm9wZXJ0eSc+R3N0QmFzZVNyYzpudW0tYnVmZmVyczwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+R3N0QmFzZVNyYzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyYy0tdHlwZWZpbmQiIHRpdGxlPSdUaGUgInR5cGVmaW5kIiBwcm9wZXJ0eSc+R3N0QmFzZVNyYzp0eXBlZmluZDwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+R3N0QmFzZVNyYzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyY0NsYXNzIiB0aXRsZT0ic3RydWN0IEdzdEJhc2VTcmNDbGFzcyI+R3N0QmFzZVNyY0NsYXNzPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj5Hc3RCYXNlU3JjPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEJhc2VTcmNGbGFncyI+R3N0QmFzZVNyY0ZsYWdzPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+R3N0QmFzZVNyYzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0QmFzZVRyYW5zZm9ybSI+R3N0QmFzZVRyYW5zZm9ybTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybS0tcW9zIiB0aXRsZT0nVGhlICJxb3MiIHByb3BlcnR5Jz5Hc3RCYXNlVHJhbnNmb3JtOnFvczwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybUNsYXNzIiB0aXRsZT0ic3RydWN0IEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyI+R3N0QmFzZVRyYW5zZm9ybUNsYXNzPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj5Hc3RCYXNlVHJhbnNmb3JtPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLWFkZC1pbmRleC1lbnRyeSIgdGl0bGU9ImdzdF9iYXNlX3BhcnNlX2FkZF9pbmRleF9lbnRyeSAoKSI+Z3N0X2Jhc2VfcGFyc2VfYWRkX2luZGV4X2VudHJ5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj5Hc3RCYXNlUGFyc2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2UtY29udmVydC1kZWZhdWx0IiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2VfY29udmVydF9kZWZhdWx0ICgpIj5nc3RfYmFzZV9wYXJzZV9jb252ZXJ0X2RlZmF1bHQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwiIHRpdGxlPSJHc3RCYXNlUGFyc2UiPkdzdEJhc2VQYXJzZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHU1QtQkFTRS1QQVJTRS1EUkFJTklORzpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfUEFSU0VfRFJBSU5JTkcoKSI+R1NUX0JBU0VfUEFSU0VfRFJBSU5JTkc8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwiIHRpdGxlPSJHc3RCYXNlUGFyc2UiPkdzdEJhc2VQYXJzZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHU1QtQkFTRS1QQVJTRS1GTEFHLURSQUlOSU5HOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9QQVJTRV9GTEFHX0RSQUlOSU5HIj5HU1RfQkFTRV9QQVJTRV9GTEFHX0RSQUlOSU5HPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj5Hc3RCYXNlUGFyc2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR1NULUJBU0UtUEFSU0UtRkxBRy1MT1NULVNZTkM6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1BBUlNFX0ZMQUdfTE9TVF9TWU5DIj5HU1RfQkFTRV9QQVJTRV9GTEFHX0xPU1RfU1lOQzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dTVC1CQVNFLVBBUlNFLUZMT1ctRFJPUFBFRDpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfUEFSU0VfRkxPV19EUk9QUEVEIj5HU1RfQkFTRV9QQVJTRV9GTE9XX0RST1BQRUQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwiIHRpdGxlPSJHc3RCYXNlUGFyc2UiPkdzdEJhc2VQYXJzZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHU1QtQkFTRS1QQVJTRS1GTE9XLVFVRVVFRDpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfUEFSU0VfRkxPV19RVUVVRUQiPkdTVF9CQVNFX1BBUlNFX0ZMT1dfUVVFVUVEPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj5Hc3RCYXNlUGFyc2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2UtZnJhbWUtZnJlZSIgdGl0bGU9ImdzdF9iYXNlX3BhcnNlX2ZyYW1lX2ZyZWUgKCkiPmdzdF9iYXNlX3BhcnNlX2ZyYW1lX2ZyZWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwiIHRpdGxlPSJHc3RCYXNlUGFyc2UiPkdzdEJhc2VQYXJzZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1mcmFtZS1pbml0IiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfaW5pdCAoKSI+Z3N0X2Jhc2VfcGFyc2VfZnJhbWVfaW5pdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLWZyYW1lLW5ldyIgdGl0bGU9ImdzdF9iYXNlX3BhcnNlX2ZyYW1lX25ldyAoKSI+Z3N0X2Jhc2VfcGFyc2VfZnJhbWVfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj5Hc3RCYXNlUGFyc2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR1NULUJBU0UtUEFSU0UtTE9TVC1TWU5DOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9QQVJTRV9MT1NUX1NZTkMoKSI+R1NUX0JBU0VfUEFSU0VfTE9TVF9TWU5DPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj5Hc3RCYXNlUGFyc2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2UtcHVzaC1mcmFtZSIgdGl0bGU9ImdzdF9iYXNlX3BhcnNlX3B1c2hfZnJhbWUgKCkiPmdzdF9iYXNlX3BhcnNlX3B1c2hfZnJhbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwiIHRpdGxlPSJHc3RCYXNlUGFyc2UiPkdzdEJhc2VQYXJzZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtYXZlcmFnZS1iaXRyYXRlIiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2Vfc2V0X2F2ZXJhZ2VfYml0cmF0ZSAoKSI+Z3N0X2Jhc2VfcGFyc2Vfc2V0X2F2ZXJhZ2VfYml0cmF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLXNldC1kdXJhdGlvbiIgdGl0bGU9ImdzdF9iYXNlX3BhcnNlX3NldF9kdXJhdGlvbiAoKSI+Z3N0X2Jhc2VfcGFyc2Vfc2V0X2R1cmF0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj5Hc3RCYXNlUGFyc2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2Utc2V0LWZyYW1lLXJhdGUiIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9zZXRfZnJhbWVfcmF0ZSAoKSI+Z3N0X2Jhc2VfcGFyc2Vfc2V0X2ZyYW1lX3JhdGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwiIHRpdGxlPSJHc3RCYXNlUGFyc2UiPkdzdEJhc2VQYXJzZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtaGFzLXRpbWluZy1pbmZvIiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2Vfc2V0X2hhc190aW1pbmdfaW5mbyAoKSI+Z3N0X2Jhc2VfcGFyc2Vfc2V0X2hhc190aW1pbmdfaW5mbzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLXNldC1sYXRlbmN5IiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2Vfc2V0X2xhdGVuY3kgKCkiPmdzdF9iYXNlX3BhcnNlX3NldF9sYXRlbmN5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj5Hc3RCYXNlUGFyc2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2Utc2V0LW1pbi1mcmFtZS1zaXplIiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2Vfc2V0X21pbl9mcmFtZV9zaXplICgpIj5nc3RfYmFzZV9wYXJzZV9zZXRfbWluX2ZyYW1lX3NpemU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwiIHRpdGxlPSJHc3RCYXNlUGFyc2UiPkdzdEJhc2VQYXJzZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtcGFzc3Rocm91Z2giIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9zZXRfcGFzc3Rocm91Z2ggKCkiPmdzdF9iYXNlX3BhcnNlX3NldF9wYXNzdGhyb3VnaDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLXNldC1zeW5jYWJsZSIgdGl0bGU9ImdzdF9iYXNlX3BhcnNlX3NldF9zeW5jYWJsZSAoKSI+Z3N0X2Jhc2VfcGFyc2Vfc2V0X3N5bmNhYmxlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj5Hc3RCYXNlUGFyc2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR1NULUJBU0UtUEFSU0UtU0lOSy1QQUQ6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1BBUlNFX1NJTktfUEFEKCkiPkdTVF9CQVNFX1BBUlNFX1NJTktfUEFEPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj5Hc3RCYXNlUGFyc2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR1NULUJBU0UtUEFSU0UtU1JDLVBBRDpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCgpIj5HU1RfQkFTRV9QQVJTRV9TUkNfUEFEPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj5Hc3RCYXNlUGFyc2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWRvLXByZXJvbGwiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX2RvX3ByZXJvbGwgKCkiPmdzdF9iYXNlX3NpbmtfZG9fcHJlcm9sbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1nZXQtYmxvY2tzaXplIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19nZXRfYmxvY2tzaXplICgpIj5nc3RfYmFzZV9zaW5rX2dldF9ibG9ja3NpemU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstZ2V0LWxhc3QtYnVmZmVyIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19nZXRfbGFzdF9idWZmZXIgKCkiPmdzdF9iYXNlX3NpbmtfZ2V0X2xhc3RfYnVmZmVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWdldC1sYXRlbmN5IiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19nZXRfbGF0ZW5jeSAoKSI+Z3N0X2Jhc2Vfc2lua19nZXRfbGF0ZW5jeTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1nZXQtbWF4LWxhdGVuZXNzIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19nZXRfbWF4X2xhdGVuZXNzICgpIj5nc3RfYmFzZV9zaW5rX2dldF9tYXhfbGF0ZW5lc3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dTVC1CQVNFLVNJTkstR0VULVBSRVJPTEwtQ09ORDpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfU0lOS19HRVRfUFJFUk9MTF9DT05EKCkiPkdTVF9CQVNFX1NJTktfR0VUX1BSRVJPTExfQ09ORDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR1NULUJBU0UtU0lOSy1HRVQtUFJFUk9MTC1MT0NLOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9TSU5LX0dFVF9QUkVST0xMX0xPQ0soKSI+R1NUX0JBU0VfU0lOS19HRVRfUFJFUk9MTF9MT0NLPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWdldC1yZW5kZXItZGVsYXkiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX2dldF9yZW5kZXJfZGVsYXkgKCkiPmdzdF9iYXNlX3NpbmtfZ2V0X3JlbmRlcl9kZWxheTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1nZXQtc3luYyIgdGl0bGU9ImdzdF9iYXNlX3NpbmtfZ2V0X3N5bmMgKCkiPmdzdF9iYXNlX3NpbmtfZ2V0X3N5bmM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstZ2V0LXRocm90dGxlLXRpbWUiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX2dldF90aHJvdHRsZV90aW1lICgpIj5nc3RfYmFzZV9zaW5rX2dldF90aHJvdHRsZV90aW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWdldC10cy1vZmZzZXQiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX2dldF90c19vZmZzZXQgKCkiPmdzdF9iYXNlX3NpbmtfZ2V0X3RzX29mZnNldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1pcy1hc3luYy1lbmFibGVkIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19pc19hc3luY19lbmFibGVkICgpIj5nc3RfYmFzZV9zaW5rX2lzX2FzeW5jX2VuYWJsZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstaXMtbGFzdC1idWZmZXItZW5hYmxlZCIgdGl0bGU9ImdzdF9iYXNlX3NpbmtfaXNfbGFzdF9idWZmZXJfZW5hYmxlZCAoKSI+Z3N0X2Jhc2Vfc2lua19pc19sYXN0X2J1ZmZlcl9lbmFibGVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWlzLXFvcy1lbmFibGVkIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19pc19xb3NfZW5hYmxlZCAoKSI+Z3N0X2Jhc2Vfc2lua19pc19xb3NfZW5hYmxlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR1NULUJBU0UtU0lOSy1QQUQ6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1NJTktfUEFEKCkiPkdTVF9CQVNFX1NJTktfUEFEPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHU1QtQkFTRS1TSU5LLVBSRVJPTEwtQlJPQURDQVNUOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9TSU5LX1BSRVJPTExfQlJPQURDQVNUKCkiPkdTVF9CQVNFX1NJTktfUFJFUk9MTF9CUk9BRENBU1Q8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dTVC1CQVNFLVNJTkstUFJFUk9MTC1MT0NLOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9TSU5LX1BSRVJPTExfTE9DSygpIj5HU1RfQkFTRV9TSU5LX1BSRVJPTExfTE9DSzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR1NULUJBU0UtU0lOSy1QUkVST0xMLVNJR05BTDpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfU0lOS19QUkVST0xMX1NJR05BTCgpIj5HU1RfQkFTRV9TSU5LX1BSRVJPTExfU0lHTkFMPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHU1QtQkFTRS1TSU5LLVBSRVJPTEwtVElNRUQtV0FJVDpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfU0lOS19QUkVST0xMX1RJTUVEX1dBSVQoKSI+R1NUX0JBU0VfU0lOS19QUkVST0xMX1RJTUVEX1dBSVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dTVC1CQVNFLVNJTkstUFJFUk9MTC1UUllMT0NLOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9TSU5LX1BSRVJPTExfVFJZTE9DSygpIj5HU1RfQkFTRV9TSU5LX1BSRVJPTExfVFJZTE9DSzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR1NULUJBU0UtU0lOSy1QUkVST0xMLVVOTE9DSzpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfU0lOS19QUkVST0xMX1VOTE9DSygpIj5HU1RfQkFTRV9TSU5LX1BSRVJPTExfVU5MT0NLPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHU1QtQkFTRS1TSU5LLVBSRVJPTEwtV0FJVDpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfU0lOS19QUkVST0xMX1dBSVQoKSI+R1NUX0JBU0VfU0lOS19QUkVST0xMX1dBSVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstcXVlcnktbGF0ZW5jeSIgdGl0bGU9ImdzdF9iYXNlX3NpbmtfcXVlcnlfbGF0ZW5jeSAoKSI+Z3N0X2Jhc2Vfc2lua19xdWVyeV9sYXRlbmN5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXNldC1hc3luYy1lbmFibGVkIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19zZXRfYXN5bmNfZW5hYmxlZCAoKSI+Z3N0X2Jhc2Vfc2lua19zZXRfYXN5bmNfZW5hYmxlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1zZXQtYmxvY2tzaXplIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19zZXRfYmxvY2tzaXplICgpIj5nc3RfYmFzZV9zaW5rX3NldF9ibG9ja3NpemU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstc2V0LWxhc3QtYnVmZmVyLWVuYWJsZWQiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX3NldF9sYXN0X2J1ZmZlcl9lbmFibGVkICgpIj5nc3RfYmFzZV9zaW5rX3NldF9sYXN0X2J1ZmZlcl9lbmFibGVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXNldC1tYXgtbGF0ZW5lc3MiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX3NldF9tYXhfbGF0ZW5lc3MgKCkiPmdzdF9iYXNlX3Npbmtfc2V0X21heF9sYXRlbmVzczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1zZXQtcW9zLWVuYWJsZWQiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX3NldF9xb3NfZW5hYmxlZCAoKSI+Z3N0X2Jhc2Vfc2lua19zZXRfcW9zX2VuYWJsZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstc2V0LXJlbmRlci1kZWxheSIgdGl0bGU9ImdzdF9iYXNlX3Npbmtfc2V0X3JlbmRlcl9kZWxheSAoKSI+Z3N0X2Jhc2Vfc2lua19zZXRfcmVuZGVyX2RlbGF5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXNldC1zeW5jIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19zZXRfc3luYyAoKSI+Z3N0X2Jhc2Vfc2lua19zZXRfc3luYzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1zZXQtdGhyb3R0bGUtdGltZSIgdGl0bGU9ImdzdF9iYXNlX3Npbmtfc2V0X3Rocm90dGxlX3RpbWUgKCkiPmdzdF9iYXNlX3Npbmtfc2V0X3Rocm90dGxlX3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstc2V0LXRzLW9mZnNldCIgdGl0bGU9ImdzdF9iYXNlX3Npbmtfc2V0X3RzX29mZnNldCAoKSI+Z3N0X2Jhc2Vfc2lua19zZXRfdHNfb2Zmc2V0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXdhaXQtY2xvY2siIHRpdGxlPSJnc3RfYmFzZV9zaW5rX3dhaXRfY2xvY2sgKCkiPmdzdF9iYXNlX3Npbmtfd2FpdF9jbG9jazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay13YWl0LWVvcyIgdGl0bGU9ImdzdF9iYXNlX3Npbmtfd2FpdF9lb3MgKCkiPmdzdF9iYXNlX3Npbmtfd2FpdF9lb3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstd2FpdC1wcmVyb2xsIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua193YWl0X3ByZXJvbGwgKCkiPmdzdF9iYXNlX3Npbmtfd2FpdF9wcmVyb2xsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1nZXQtYmxvY2tzaXplIiB0aXRsZT0iZ3N0X2Jhc2Vfc3JjX2dldF9ibG9ja3NpemUgKCkiPmdzdF9iYXNlX3NyY19nZXRfYmxvY2tzaXplPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPkdzdEJhc2VTcmM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1nZXQtZG8tdGltZXN0YW1wIiB0aXRsZT0iZ3N0X2Jhc2Vfc3JjX2dldF9kb190aW1lc3RhbXAgKCkiPmdzdF9iYXNlX3NyY19nZXRfZG9fdGltZXN0YW1wPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPkdzdEJhc2VTcmM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1pcy1saXZlIiB0aXRsZT0iZ3N0X2Jhc2Vfc3JjX2lzX2xpdmUgKCkiPmdzdF9iYXNlX3NyY19pc19saXZlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPkdzdEJhc2VTcmM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1uZXctc2VhbWxlc3Mtc2VnbWVudCIgdGl0bGU9ImdzdF9iYXNlX3NyY19uZXdfc2VhbWxlc3Nfc2VnbWVudCAoKSI+Z3N0X2Jhc2Vfc3JjX25ld19zZWFtbGVzc19zZWdtZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPkdzdEJhc2VTcmM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI0dTVC1CQVNFLVNSQy1QQUQ6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1NSQ19QQUQoKSI+R1NUX0JBU0VfU1JDX1BBRDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj5Hc3RCYXNlU3JjPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtcXVlcnktbGF0ZW5jeSIgdGl0bGU9ImdzdF9iYXNlX3NyY19xdWVyeV9sYXRlbmN5ICgpIj5nc3RfYmFzZV9zcmNfcXVlcnlfbGF0ZW5jeTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj5Hc3RCYXNlU3JjPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtc2V0LWJsb2Nrc2l6ZSIgdGl0bGU9ImdzdF9iYXNlX3NyY19zZXRfYmxvY2tzaXplICgpIj5nc3RfYmFzZV9zcmNfc2V0X2Jsb2Nrc2l6ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj5Hc3RCYXNlU3JjPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtc2V0LWNhcHMiIHRpdGxlPSJnc3RfYmFzZV9zcmNfc2V0X2NhcHMgKCkiPmdzdF9iYXNlX3NyY19zZXRfY2FwczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj5Hc3RCYXNlU3JjPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtc2V0LWRvLXRpbWVzdGFtcCIgdGl0bGU9ImdzdF9iYXNlX3NyY19zZXRfZG9fdGltZXN0YW1wICgpIj5nc3RfYmFzZV9zcmNfc2V0X2RvX3RpbWVzdGFtcDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj5Hc3RCYXNlU3JjPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtc2V0LWR5bmFtaWMtc2l6ZSIgdGl0bGU9ImdzdF9iYXNlX3NyY19zZXRfZHluYW1pY19zaXplICgpIj5nc3RfYmFzZV9zcmNfc2V0X2R5bmFtaWNfc2l6ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj5Hc3RCYXNlU3JjPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtc2V0LWZvcm1hdCIgdGl0bGU9ImdzdF9iYXNlX3NyY19zZXRfZm9ybWF0ICgpIj5nc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj5Hc3RCYXNlU3JjPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtc2V0LWxpdmUiIHRpdGxlPSJnc3RfYmFzZV9zcmNfc2V0X2xpdmUgKCkiPmdzdF9iYXNlX3NyY19zZXRfbGl2ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj5Hc3RCYXNlU3JjPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtd2FpdC1wbGF5aW5nIiB0aXRsZT0iZ3N0X2Jhc2Vfc3JjX3dhaXRfcGxheWluZyAoKSI+Z3N0X2Jhc2Vfc3JjX3dhaXRfcGxheWluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj5Hc3RCYXNlU3JjPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHU1QtQkFTRS1UUkFOU0ZPUk0tRkxPVy1EUk9QUEVEOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9UUkFOU0ZPUk1fRkxPV19EUk9QUEVEIj5HU1RfQkFTRV9UUkFOU0ZPUk1fRkxPV19EUk9QUEVEPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPkdzdEJhc2VUcmFuc2Zvcm08L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1pcy1pbi1wbGFjZSIgdGl0bGU9ImdzdF9iYXNlX3RyYW5zZm9ybV9pc19pbl9wbGFjZSAoKSI+Z3N0X2Jhc2VfdHJhbnNmb3JtX2lzX2luX3BsYWNlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPkdzdEJhc2VUcmFuc2Zvcm08L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1pcy1wYXNzdGhyb3VnaCIgdGl0bGU9ImdzdF9iYXNlX3RyYW5zZm9ybV9pc19wYXNzdGhyb3VnaCAoKSI+Z3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Bhc3N0aHJvdWdoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPkdzdEJhc2VUcmFuc2Zvcm08L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1pcy1xb3MtZW5hYmxlZCIgdGl0bGU9ImdzdF9iYXNlX3RyYW5zZm9ybV9pc19xb3NfZW5hYmxlZCAoKSI+Z3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Fvc19lbmFibGVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPkdzdEJhc2VUcmFuc2Zvcm08L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dTVC1CQVNFLVRSQU5TRk9STS1MT0NLOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9UUkFOU0ZPUk1fTE9DSygpIj5HU1RfQkFTRV9UUkFOU0ZPUk1fTE9DSzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj5Hc3RCYXNlVHJhbnNmb3JtPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0tcmVjb25maWd1cmUiIHRpdGxlPSJnc3RfYmFzZV90cmFuc2Zvcm1fcmVjb25maWd1cmUgKCkiPmdzdF9iYXNlX3RyYW5zZm9ybV9yZWNvbmZpZ3VyZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj5Hc3RCYXNlVHJhbnNmb3JtPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0tc2V0LWdhcC1hd2FyZSIgdGl0bGU9ImdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfZ2FwX2F3YXJlICgpIj5nc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2dhcF9hd2FyZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj5Hc3RCYXNlVHJhbnNmb3JtPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0tc2V0LWluLXBsYWNlIiB0aXRsZT0iZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9pbl9wbGFjZSAoKSI+Z3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9pbl9wbGFjZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj5Hc3RCYXNlVHJhbnNmb3JtPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0tc2V0LXBhc3N0aHJvdWdoIiB0aXRsZT0iZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wYXNzdGhyb3VnaCAoKSI+Z3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wYXNzdGhyb3VnaDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj5Hc3RCYXNlVHJhbnNmb3JtPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0tc2V0LXFvcy1lbmFibGVkIiB0aXRsZT0iZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9xb3NfZW5hYmxlZCAoKSI+Z3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9xb3NfZW5hYmxlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj5Hc3RCYXNlVHJhbnNmb3JtPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHU1QtQkFTRS1UUkFOU0ZPUk0tU0lOSy1OQU1FOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9UUkFOU0ZPUk1fU0lOS19OQU1FIj5HU1RfQkFTRV9UUkFOU0ZPUk1fU0lOS19OQU1FPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPkdzdEJhc2VUcmFuc2Zvcm08L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dTVC1CQVNFLVRSQU5TRk9STS1TSU5LLVBBRDpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfVFJBTlNGT1JNX1NJTktfUEFEKCkiPkdTVF9CQVNFX1RSQU5TRk9STV9TSU5LX1BBRDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj5Hc3RCYXNlVHJhbnNmb3JtPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHU1QtQkFTRS1UUkFOU0ZPUk0tU1JDLU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1RSQU5TRk9STV9TUkNfTkFNRSI+R1NUX0JBU0VfVFJBTlNGT1JNX1NSQ19OQU1FPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPkdzdEJhc2VUcmFuc2Zvcm08L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dTVC1CQVNFLVRSQU5TRk9STS1TUkMtUEFEOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9UUkFOU0ZPUk1fU1JDX1BBRCgpIj5HU1RfQkFTRV9UUkFOU0ZPUk1fU1JDX1BBRDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj5Hc3RCYXNlVHJhbnNmb3JtPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0tc3VnZ2VzdCIgdGl0bGU9ImdzdF9iYXNlX3RyYW5zZm9ybV9zdWdnZXN0ICgpIj5nc3RfYmFzZV90cmFuc2Zvcm1fc3VnZ2VzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj5Hc3RCYXNlVHJhbnNmb3JtPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHU1QtQkFTRS1UUkFOU0ZPUk0tVU5MT0NLOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9UUkFOU0ZPUk1fVU5MT0NLKCkiPkdTVF9CQVNFX1RSQU5TRk9STV9VTkxPQ0s8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjZ3N0LWJhc2UtdHJhbnNmb3JtLXVwZGF0ZS1xb3MiIHRpdGxlPSJnc3RfYmFzZV90cmFuc2Zvcm1fdXBkYXRlX3FvcyAoKSI+Z3N0X2Jhc2VfdHJhbnNmb3JtX3VwZGF0ZV9xb3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1mcmVlIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfZnJlZSAoKSI+Z3N0X2JpdF9yZWFkZXJfZnJlZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJpdFJlYWRlciI+R3N0Qml0UmVhZGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQxNiIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQxNiAoKSI+Z3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDE2PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj5Hc3RCaXRSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDE2LXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQxNl91bmNoZWNrZWQgKCkiPmdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQxNl91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50MzIiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MzIgKCkiPmdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQzMjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJpdFJlYWRlciI+R3N0Qml0UmVhZGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQzMi11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MzJfdW5jaGVja2VkICgpIj5nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MzJfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj5Hc3RCaXRSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDY0IiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDY0ICgpIj5nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50NjQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50NjQtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDY0X3VuY2hlY2tlZCAoKSI+Z3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDY0X3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJpdFJlYWRlciI+R3N0Qml0UmVhZGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQ4IiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDggKCkiPmdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj5Hc3RCaXRSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDgtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDhfdW5jaGVja2VkICgpIj5nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OF91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtcG9zIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfZ2V0X3BvcyAoKSI+Z3N0X2JpdF9yZWFkZXJfZ2V0X3BvczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJpdFJlYWRlciI+R3N0Qml0UmVhZGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWdldC1yZW1haW5pbmciIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9nZXRfcmVtYWluaW5nICgpIj5nc3RfYml0X3JlYWRlcl9nZXRfcmVtYWluaW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj5Hc3RCaXRSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItZ2V0LXNpemUiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9nZXRfc2l6ZSAoKSI+Z3N0X2JpdF9yZWFkZXJfZ2V0X3NpemU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHU1QtQklULVJFQURFUi1JTklUOkNBUFMiIHRpdGxlPSJHU1RfQklUX1JFQURFUl9JTklUKCkiPkdTVF9CSVRfUkVBREVSX0lOSVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1pbml0IiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfaW5pdCAoKSI+Z3N0X2JpdF9yZWFkZXJfaW5pdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJpdFJlYWRlciI+R3N0Qml0UmVhZGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLW5ldyIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX25ldyAoKSI+Z3N0X2JpdF9yZWFkZXJfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj5Hc3RCaXRSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQxNiIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MTYgKCkiPmdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MTY8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDE2LXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MTZfdW5jaGVja2VkICgpIj5nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDE2X3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJpdFJlYWRlciI+R3N0Qml0UmVhZGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLXBlZWstYml0cy11aW50MzIiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDMyICgpIj5nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDMyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj5Hc3RCaXRSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQzMi11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDMyX3VuY2hlY2tlZCAoKSI+Z3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQzMl91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDY0IiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ2NCAoKSI+Z3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ2NDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJpdFJlYWRlciI+R3N0Qml0UmVhZGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLXBlZWstYml0cy11aW50NjQtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ2NF91bmNoZWNrZWQgKCkiPmdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50NjRfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj5Hc3RCaXRSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQ4IiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ4ICgpIj5nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDgtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ4X3VuY2hlY2tlZCAoKSI+Z3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ4X3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJpdFJlYWRlciI+R3N0Qml0UmVhZGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLXNldC1wb3MiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9zZXRfcG9zICgpIj5nc3RfYml0X3JlYWRlcl9zZXRfcG9zPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj5Hc3RCaXRSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItc2tpcCIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX3NraXAgKCkiPmdzdF9iaXRfcmVhZGVyX3NraXA8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1za2lwLXRvLWJ5dGUiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGUgKCkiPmdzdF9iaXRfcmVhZGVyX3NraXBfdG9fYnl0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJpdFJlYWRlciI+R3N0Qml0UmVhZGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLXNraXAtdG8tYnl0ZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGVfdW5jaGVja2VkICgpIj5nc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj5Hc3RCaXRSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItc2tpcC11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9za2lwX3VuY2hlY2tlZCAoKSI+Z3N0X2JpdF9yZWFkZXJfc2tpcF91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5odG1sI2dzdC1idWZmZXItc3RyYXctZ2V0LWJ1ZmZlciIgdGl0bGU9ImdzdF9idWZmZXJfc3RyYXdfZ2V0X2J1ZmZlciAoKSI+Z3N0X2J1ZmZlcl9zdHJhd19nZXRfYnVmZmVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJTdHJhdyI+R3N0QnVmZmVyU3RyYXc8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcuaHRtbCNnc3QtYnVmZmVyLXN0cmF3LXN0YXJ0LXBpcGVsaW5lIiB0aXRsZT0iZ3N0X2J1ZmZlcl9zdHJhd19zdGFydF9waXBlbGluZSAoKSI+Z3N0X2J1ZmZlcl9zdHJhd19zdGFydF9waXBlbGluZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5odG1sIiB0aXRsZT0iR3N0QnVmZmVyU3RyYXciPkdzdEJ1ZmZlclN0cmF3PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3Lmh0bWwjZ3N0LWJ1ZmZlci1zdHJhdy1zdG9wLXBpcGVsaW5lIiB0aXRsZT0iZ3N0X2J1ZmZlcl9zdHJhd19zdG9wX3BpcGVsaW5lICgpIj5nc3RfYnVmZmVyX3N0cmF3X3N0b3BfcGlwZWxpbmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclN0cmF3Ij5Hc3RCdWZmZXJTdHJhdzwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZHVwLWRhdGEiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZHVwX2RhdGEgKCkiPmdzdF9ieXRlX3JlYWRlcl9kdXBfZGF0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZHVwLWRhdGEtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2R1cF9kYXRhX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfcmVhZGVyX2R1cF9kYXRhX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZHVwLXN0cmluZyIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nKCkiPmdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1kdXAtc3RyaW5nLXV0ZjE2IiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmdfdXRmMTYgKCkiPmdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjE2PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1kdXAtc3RyaW5nLXV0ZjMyIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmdfdXRmMzIgKCkiPmdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjMyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1kdXAtc3RyaW5nLXV0ZjgiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGY4ICgpIj5nc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGY4PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1mcmVlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2ZyZWUgKCkiPmdzdF9ieXRlX3JlYWRlcl9mcmVlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZGF0YSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfZGF0YSAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZGF0YS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGFfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGFfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQzMi1iZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9iZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDMyX2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQzMi1iZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0MzJfYmVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0MzJfYmVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQzMi1sZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9sZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDMyX2xlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQzMi1sZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0MzJfbGVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0MzJfbGVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQ2NC1iZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9iZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDY0X2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQ2NC1iZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfYmVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfYmVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQ2NC1sZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9sZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDY0X2xlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQ2NC1sZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfbGVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfbGVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MTYtYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2JlICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MTYtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9iZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfYmVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MTYtbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2xlICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2xlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MTYtbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9sZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfbGVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MjQtYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDI0X2JlICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDI0X2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MjQtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9iZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfYmVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MjQtbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDI0X2xlICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDI0X2xlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MjQtbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9sZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfbGVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MzItYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2JlICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MzItYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9iZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfYmVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MzItbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2xlICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2xlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MzItbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9sZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfbGVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50NjQtYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2JlICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50NjQtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9iZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfYmVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50NjQtbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2xlICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2xlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50NjQtbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9sZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfbGVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50OCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50OCAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ4PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50OC11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDhfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDhfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtcG9zIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9wb3MgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfcG9zPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtcmVtYWluaW5nIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtc2l6ZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfc2l6ZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9zaXplPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtc3RyaW5nIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9zdHJpbmcoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9zdHJpbmc8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1zdHJpbmctdXRmOCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfc3RyaW5nX3V0ZjggKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfc3RyaW5nX3V0Zjg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MTYtYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9iZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MTYtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9iZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MTYtbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9sZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfbGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MTYtbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfbGVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9sZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MjQtYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9iZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfYmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MjQtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfYmVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9iZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MjQtbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9sZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfbGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MjQtbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfbGVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9sZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MzItYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MzItYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MzItbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9sZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfbGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MzItbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfbGVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9sZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50NjQtYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9iZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50NjQtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9iZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50NjQtbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9sZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfbGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50NjQtbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfbGVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9sZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50OCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDggKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50OC11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4X3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50OF91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR1NULUJZVEUtUkVBREVSLUlOSVQ6Q0FQUyIgdGl0bGU9IkdTVF9CWVRFX1JFQURFUl9JTklUKCkiPkdTVF9CWVRFX1JFQURFUl9JTklUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1pbml0IiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2luaXQgKCkiPmdzdF9ieXRlX3JlYWRlcl9pbml0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1tYXNrZWQtc2Nhbi11aW50MzIiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyICgpIj5nc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1uZXciIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfbmV3ICgpIj5nc3RfYnl0ZV9yZWFkZXJfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWRhdGEiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19kYXRhICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19kYXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWRhdGEtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2RhdGFfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0MzItYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2JlICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0MzItYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQzMl9iZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfYmVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0MzItbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2xlICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2xlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0MzItbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQzMl9sZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfbGVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0NjQtYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2JlICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0NjQtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9iZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfYmVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0NjQtbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2xlICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2xlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0NjQtbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9sZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfbGVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDE2LWJlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfYmUgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDE2LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2JlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfYmVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDE2LWxlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfbGUgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2xlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDE2LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2xlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfbGVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDI0LWJlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfYmUgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDI0LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2JlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfYmVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDI0LWxlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfbGUgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2xlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDI0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2xlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfbGVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDMyLWJlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfYmUgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDMyLWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2JlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfYmVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDMyLWxlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfbGUgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2xlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDMyLWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2xlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfbGVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDY0LWJlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfYmUgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDY0LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2JlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfYmVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDY0LWxlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfbGUgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2xlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDY0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2xlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfbGVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDgiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ4ICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ4PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDgtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50OF91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDhfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXN0cmluZyIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3N0cmluZygpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19zdHJpbmc8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstc3RyaW5nLXV0ZjgiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19zdHJpbmdfdXRmOCAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfc3RyaW5nX3V0Zjg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDE2LWJlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2JlICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfYmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDE2LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQxNl9iZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQxNl9iZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDE2LWxlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2xlICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfbGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDE2LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQxNl9sZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQxNl9sZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDI0LWJlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2JlICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfYmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDI0LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9iZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9iZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDI0LWxlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2xlICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfbGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDI0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9sZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9sZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDMyLWJlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2JlICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfYmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDMyLWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9iZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9iZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDMyLWxlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2xlICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfbGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDMyLWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9sZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9sZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDY0LWJlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2JlICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfYmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDY0LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9iZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9iZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDY0LWxlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2xlICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfbGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDY0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9sZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9sZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDgiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50OCAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDgtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDhfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50OF91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXNldC1wb3MiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfc2V0X3BvcyAoKSI+Z3N0X2J5dGVfcmVhZGVyX3NldF9wb3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXNraXAiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfc2tpcCAoKSI+Z3N0X2J5dGVfcmVhZGVyX3NraXA8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXNraXAtc3RyaW5nIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nKCkiPmdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItc2tpcC1zdHJpbmctdXRmMTYiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmMTYgKCkiPmdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGYxNjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItc2tpcC1zdHJpbmctdXRmMzIiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmMzIgKCkiPmdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGYzMjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItc2tpcC1zdHJpbmctdXRmOCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGY4ICgpIj5nc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmODwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItc2tpcC11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfc2tpcF91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9za2lwX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItZW5zdXJlLWZyZWUtc3BhY2UiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfZW5zdXJlX2ZyZWVfc3BhY2UgKCkiPmdzdF9ieXRlX3dyaXRlcl9lbnN1cmVfZnJlZV9zcGFjZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItZmlsbCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9maWxsICgpIj5nc3RfYnl0ZV93cml0ZXJfZmlsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItZmlsbC11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfZmlsbF91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3dyaXRlcl9maWxsX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItZnJlZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9mcmVlICgpIj5nc3RfYnl0ZV93cml0ZXJfZnJlZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItZnJlZS1hbmQtZ2V0LWJ1ZmZlciIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9mcmVlX2FuZF9nZXRfYnVmZmVyICgpIj5nc3RfYnl0ZV93cml0ZXJfZnJlZV9hbmRfZ2V0X2J1ZmZlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItZnJlZS1hbmQtZ2V0LWRhdGEiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfZnJlZV9hbmRfZ2V0X2RhdGEgKCkiPmdzdF9ieXRlX3dyaXRlcl9mcmVlX2FuZF9nZXRfZGF0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItZ2V0LXBvcyIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9nZXRfcG9zICgpIj5nc3RfYnl0ZV93cml0ZXJfZ2V0X3BvczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItZ2V0LXJlbWFpbmluZyIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9nZXRfcmVtYWluaW5nICgpIj5nc3RfYnl0ZV93cml0ZXJfZ2V0X3JlbWFpbmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItZ2V0LXNpemUiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfZ2V0X3NpemUgKCkiPmdzdF9ieXRlX3dyaXRlcl9nZXRfc2l6ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItaW5pdCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9pbml0ICgpIj5nc3RfYnl0ZV93cml0ZXJfaW5pdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItaW5pdC13aXRoLWRhdGEiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfaW5pdF93aXRoX2RhdGEgKCkiPmdzdF9ieXRlX3dyaXRlcl9pbml0X3dpdGhfZGF0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItaW5pdC13aXRoLXNpemUiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfaW5pdF93aXRoX3NpemUgKCkiPmdzdF9ieXRlX3dyaXRlcl9pbml0X3dpdGhfc2l6ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItbmV3IiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX25ldyAoKSI+Z3N0X2J5dGVfd3JpdGVyX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItbmV3LXdpdGgtZGF0YSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9uZXdfd2l0aF9kYXRhICgpIj5nc3RfYnl0ZV93cml0ZXJfbmV3X3dpdGhfZGF0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItbmV3LXdpdGgtc2l6ZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9uZXdfd2l0aF9zaXplICgpIj5nc3RfYnl0ZV93cml0ZXJfbmV3X3dpdGhfc2l6ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWRhdGEiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGEgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfZGF0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWRhdGEtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0MzItYmUiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfYmUgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9iZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0MzItYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDMyX2JlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDMyX2JlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0MzItbGUiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfbGUgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9sZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0MzItbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDMyX2xlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDMyX2xlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0NjQtYmUiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfYmUgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9iZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0NjQtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDY0X2JlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDY0X2JlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0NjQtbGUiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfbGUgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9sZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0NjQtbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDY0X2xlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDY0X2xlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDE2LWJlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9iZSAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9iZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDE2LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfYmVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2JlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDE2LWxlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9sZSAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9sZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDE2LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfbGVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2xlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDI0LWJlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9iZSAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9iZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDI0LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfYmVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2JlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDI0LWxlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9sZSAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9sZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDI0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfbGVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2xlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDMyLWJlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9iZSAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9iZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDMyLWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfYmVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDMyX2JlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDMyLWxlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9sZSAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9sZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDMyLWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfbGVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDMyX2xlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDY0LWJlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9iZSAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9iZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDY0LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfYmVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2JlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDY0LWxlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9sZSAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9sZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDY0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfbGVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2xlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDgiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDggKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfaW50ODwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDgtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ4X3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ4X3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXN0cmluZyIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtc3RyaW5nLXV0ZjE2IiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmdfdXRmMTYgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nX3V0ZjE2PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtc3RyaW5nLXV0ZjMyIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmdfdXRmMzIgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nX3V0ZjMyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtc3RyaW5nLXV0ZjgiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZ191dGY4ICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZ191dGY4PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDE2LWJlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfYmUgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDE2LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2JlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfYmVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDE2LWxlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfbGUgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2xlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDE2LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2xlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfbGVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDI0LWJlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfYmUgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDI0LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2JlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfYmVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDI0LWxlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfbGUgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2xlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDI0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2xlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfbGVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDMyLWJlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfYmUgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDMyLWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2JlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfYmVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDMyLWxlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDMyLWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDY0LWJlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfYmUgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDY0LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2JlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfYmVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDY0LWxlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfbGUgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2xlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDY0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2xlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfbGVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDgiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4ICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDgtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50OF91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDhfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1yZXNldCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9yZXNldCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3Jlc2V0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1yZXNldC1hbmQtZ2V0LWJ1ZmZlciIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9yZXNldF9hbmRfZ2V0X2J1ZmZlciAoKSI+Z3N0X2J5dGVfd3JpdGVyX3Jlc2V0X2FuZF9nZXRfYnVmZmVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1yZXNldC1hbmQtZ2V0LWRhdGEiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9kYXRhICgpIj5nc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9kYXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1zZXQtcG9zIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3NldF9wb3MgKCkiPmdzdF9ieXRlX3dyaXRlcl9zZXRfcG9zPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8YSBuYW1lPSJpZHhDIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+QzwvaDM+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stYnVmZmVyLWRhdGEiIHRpdGxlPSJnc3RfY2hlY2tfYnVmZmVyX2RhdGEgKCkiPmdzdF9jaGVja19idWZmZXJfZGF0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLWNhcHMtZXF1YWwiIHRpdGxlPSJnc3RfY2hlY2tfY2Fwc19lcXVhbCAoKSI+Z3N0X2NoZWNrX2NhcHNfZXF1YWw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCIgdGl0bGU9IkdzdENoZWNrIj5Hc3RDaGVjazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1kcm9wLWJ1ZmZlcnMiIHRpdGxlPSJnc3RfY2hlY2tfZHJvcF9idWZmZXJzICgpIj5nc3RfY2hlY2tfZHJvcF9idWZmZXJzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stZWxlbWVudC1wdXNoLWJ1ZmZlciIgdGl0bGU9ImdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVyICgpIj5nc3RfY2hlY2tfZWxlbWVudF9wdXNoX2J1ZmZlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLWVsZW1lbnQtcHVzaC1idWZmZXItbGlzdCIgdGl0bGU9ImdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVyX2xpc3QgKCkiPmdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVyX2xpc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCIgdGl0bGU9IkdzdENoZWNrIj5Hc3RDaGVjazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1pbml0IiB0aXRsZT0iZ3N0X2NoZWNrX2luaXQgKCkiPmdzdF9jaGVja19pbml0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stbWVzc2FnZS1lcnJvciIgdGl0bGU9ImdzdF9jaGVja19tZXNzYWdlX2Vycm9yICgpIj5nc3RfY2hlY2tfbWVzc2FnZV9lcnJvcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXJ1bi1zdWl0ZSIgdGl0bGU9ImdzdF9jaGVja19ydW5fc3VpdGUgKCkiPmdzdF9jaGVja19ydW5fc3VpdGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCIgdGl0bGU9IkdzdENoZWNrIj5Hc3RDaGVjazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1zZXR1cC1lbGVtZW50IiB0aXRsZT0iZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCkiPmdzdF9jaGVja19zZXR1cF9lbGVtZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stc2V0dXAtc2luay1wYWQiIHRpdGxlPSJnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQgKCkiPmdzdF9jaGVja19zZXR1cF9zaW5rX3BhZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXNldHVwLXNpbmstcGFkLWJ5LW5hbWUiIHRpdGxlPSJnc3RfY2hlY2tfc2V0dXBfc2lua19wYWRfYnlfbmFtZSAoKSI+Z3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkX2J5X25hbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCIgdGl0bGU9IkdzdENoZWNrIj5Hc3RDaGVjazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1zZXR1cC1zcmMtcGFkIiB0aXRsZT0iZ3N0X2NoZWNrX3NldHVwX3NyY19wYWQgKCkiPmdzdF9jaGVja19zZXR1cF9zcmNfcGFkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stc2V0dXAtc3JjLXBhZC1ieS1uYW1lIiB0aXRsZT0iZ3N0X2NoZWNrX3NldHVwX3NyY19wYWRfYnlfbmFtZSAoKSI+Z3N0X2NoZWNrX3NldHVwX3NyY19wYWRfYnlfbmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXRlYXJkb3duLWVsZW1lbnQiIHRpdGxlPSJnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAoKSI+Z3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCIgdGl0bGU9IkdzdENoZWNrIj5Hc3RDaGVjazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay10ZWFyZG93bi1wYWQtYnktbmFtZSIgdGl0bGU9ImdzdF9jaGVja190ZWFyZG93bl9wYWRfYnlfbmFtZSAoKSI+Z3N0X2NoZWNrX3RlYXJkb3duX3BhZF9ieV9uYW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stdGVhcmRvd24tc2luay1wYWQiIHRpdGxlPSJnc3RfY2hlY2tfdGVhcmRvd25fc2lua19wYWQgKCkiPmdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXRlYXJkb3duLXNyYy1wYWQiIHRpdGxlPSJnc3RfY2hlY2tfdGVhcmRvd25fc3JjX3BhZCAoKSI+Z3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCIgdGl0bGU9IkdzdENoZWNrIj5Hc3RDaGVjazwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj5Hc3RDb2xsZWN0RGF0YTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj5Hc3RDb2xsZWN0UGFkczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhRGVzdHJveU5vdGlmeSIgdGl0bGU9IkdzdENvbGxlY3REYXRhRGVzdHJveU5vdGlmeSAoKSI+R3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5PC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj5Hc3RDb2xsZWN0UGFkczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3RQYWRzLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RDb2xsZWN0UGFkcyI+R3N0Q29sbGVjdFBhZHM8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+R3N0Q29sbGVjdFBhZHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0UGFkc0NsaXBGdW5jdGlvbiIgdGl0bGU9IkdzdENvbGxlY3RQYWRzQ2xpcEZ1bmN0aW9uICgpIj5Hc3RDb2xsZWN0UGFkc0NsaXBGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+R3N0Q29sbGVjdFBhZHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0UGFkc0Z1bmN0aW9uIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHNGdW5jdGlvbiAoKSI+R3N0Q29sbGVjdFBhZHNGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+R3N0Q29sbGVjdFBhZHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLWFkZC1wYWQiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQgKCkiPmdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPkdzdENvbGxlY3RQYWRzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1hZGQtcGFkLWZ1bGwiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWRfZnVsbCAoKSI+Z3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkX2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj5Hc3RDb2xsZWN0UGFkczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtYXZhaWxhYmxlIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19hdmFpbGFibGUgKCkiPmdzdF9jb2xsZWN0X3BhZHNfYXZhaWxhYmxlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+R3N0Q29sbGVjdFBhZHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLWNvbGxlY3QiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX2NvbGxlY3QgKCkiPmdzdF9jb2xsZWN0X3BhZHNfY29sbGVjdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPkdzdENvbGxlY3RQYWRzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1jb2xsZWN0LXJhbmdlIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19jb2xsZWN0X3JhbmdlICgpIj5nc3RfY29sbGVjdF9wYWRzX2NvbGxlY3RfcmFuZ2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj5Hc3RDb2xsZWN0UGFkczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtZmx1c2giIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX2ZsdXNoICgpIj5nc3RfY29sbGVjdF9wYWRzX2ZsdXNoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+R3N0Q29sbGVjdFBhZHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLWlzLWFjdGl2ZSIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfaXNfYWN0aXZlICgpIj5nc3RfY29sbGVjdF9wYWRzX2lzX2FjdGl2ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPkdzdENvbGxlY3RQYWRzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1uZXciIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX25ldyAoKSI+Z3N0X2NvbGxlY3RfcGFkc19uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj5Hc3RDb2xsZWN0UGFkczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtcGVlayIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfcGVlayAoKSI+Z3N0X2NvbGxlY3RfcGFkc19wZWVrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+R3N0Q29sbGVjdFBhZHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXBvcCIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfcG9wICgpIj5nc3RfY29sbGVjdF9wYWRzX3BvcDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPkdzdENvbGxlY3RQYWRzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1yZWFkLWJ1ZmZlciIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfcmVhZF9idWZmZXIgKCkiPmdzdF9jb2xsZWN0X3BhZHNfcmVhZF9idWZmZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj5Hc3RDb2xsZWN0UGFkczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtcmVtb3ZlLXBhZCIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZCAoKSI+Z3N0X2NvbGxlY3RfcGFkc19yZW1vdmVfcGFkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+R3N0Q29sbGVjdFBhZHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXNldC1jbGlwLWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19zZXRfY2xpcF9mdW5jdGlvbiAoKSI+Z3N0X2NvbGxlY3RfcGFkc19zZXRfY2xpcF9mdW5jdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPkdzdENvbGxlY3RQYWRzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1zZXQtZmx1c2hpbmciIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaGluZyAoKSI+Z3N0X2NvbGxlY3RfcGFkc19zZXRfZmx1c2hpbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj5Hc3RDb2xsZWN0UGFkczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtc2V0LWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19zZXRfZnVuY3Rpb24gKCkiPmdzdF9jb2xsZWN0X3BhZHNfc2V0X2Z1bmN0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+R3N0Q29sbGVjdFBhZHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXN0YXJ0IiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19zdGFydCAoKSI+Z3N0X2NvbGxlY3RfcGFkc19zdGFydDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPkdzdENvbGxlY3RQYWRzPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1zdG9wIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19zdG9wICgpIj5nc3RfY29sbGVjdF9wYWRzX3N0b3A8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj5Hc3RDb2xsZWN0UGFkczwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtdGFrZS1idWZmZXIiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3Rha2VfYnVmZmVyICgpIj5nc3RfY29sbGVjdF9wYWRzX3Rha2VfYnVmZmVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+R3N0Q29sbGVjdFBhZHM8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCNnc3QtY29uc2lzdGVuY3ktY2hlY2tlci1mcmVlIiB0aXRsZT0iZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfZnJlZSAoKSI+Z3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfZnJlZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5odG1sIiB0aXRsZT0iR3N0U3RyZWFtQ29uc2lzdGVuY3kiPkdzdFN0cmVhbUNvbnNpc3RlbmN5PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5Lmh0bWwjZ3N0LWNvbnNpc3RlbmN5LWNoZWNrZXItbmV3IiB0aXRsZT0iZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfbmV3ICgpIj5nc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCIgdGl0bGU9IkdzdFN0cmVhbUNvbnNpc3RlbmN5Ij5Hc3RTdHJlYW1Db25zaXN0ZW5jeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5odG1sI2dzdC1jb25zaXN0ZW5jeS1jaGVja2VyLXJlc2V0IiB0aXRsZT0iZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfcmVzZXQgKCkiPmdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX3Jlc2V0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5Lmh0bWwiIHRpdGxlPSJHc3RTdHJlYW1Db25zaXN0ZW5jeSI+R3N0U3RyZWFtQ29uc2lzdGVuY3k8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sI0dzdENvbnRyb2xsZXItc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdENvbnRyb2xsZXIiPkdzdENvbnRyb2xsZXI8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPkdzdENvbnRyb2xsZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sI0dzdENvbnRyb2xsZXItLWNvbnRyb2wtcmF0ZSIgdGl0bGU9J1RoZSAiY29udHJvbC1yYXRlIiBwcm9wZXJ0eSc+R3N0Q29udHJvbGxlcjpjb250cm9sLXJhdGU8L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPkdzdENvbnRyb2xsZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLWdldCIgdGl0bGU9ImdzdF9jb250cm9sbGVyX2dldCAoKSI+Z3N0X2NvbnRyb2xsZXJfZ2V0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPkdzdENvbnRyb2xsZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLWdldC1jb250cm9sLXNvdXJjZSIgdGl0bGU9ImdzdF9jb250cm9sbGVyX2dldF9jb250cm9sX3NvdXJjZSAoKSI+Z3N0X2NvbnRyb2xsZXJfZ2V0X2NvbnRyb2xfc291cmNlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPkdzdENvbnRyb2xsZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLWdldC12YWx1ZS1hcnJheSIgdGl0bGU9ImdzdF9jb250cm9sbGVyX2dldF92YWx1ZV9hcnJheSAoKSI+Z3N0X2NvbnRyb2xsZXJfZ2V0X3ZhbHVlX2FycmF5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPkdzdENvbnRyb2xsZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLWdldC12YWx1ZS1hcnJheXMiIHRpdGxlPSJnc3RfY29udHJvbGxlcl9nZXRfdmFsdWVfYXJyYXlzICgpIj5nc3RfY29udHJvbGxlcl9nZXRfdmFsdWVfYXJyYXlzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPkdzdENvbnRyb2xsZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLWluaXQiIHRpdGxlPSJnc3RfY29udHJvbGxlcl9pbml0ICgpIj5nc3RfY29udHJvbGxlcl9pbml0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPkdzdENvbnRyb2xsZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLW5ldyIgdGl0bGU9ImdzdF9jb250cm9sbGVyX25ldyAoKSI+Z3N0X2NvbnRyb2xsZXJfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPkdzdENvbnRyb2xsZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLW5ldy1saXN0IiB0aXRsZT0iZ3N0X2NvbnRyb2xsZXJfbmV3X2xpc3QgKCkiPmdzdF9jb250cm9sbGVyX25ld19saXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPkdzdENvbnRyb2xsZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLW5ldy12YWxpc3QiIHRpdGxlPSJnc3RfY29udHJvbGxlcl9uZXdfdmFsaXN0ICgpIj5nc3RfY29udHJvbGxlcl9uZXdfdmFsaXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPkdzdENvbnRyb2xsZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLXJlbW92ZS1wcm9wZXJ0aWVzIiB0aXRsZT0iZ3N0X2NvbnRyb2xsZXJfcmVtb3ZlX3Byb3BlcnRpZXMgKCkiPmdzdF9jb250cm9sbGVyX3JlbW92ZV9wcm9wZXJ0aWVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPkdzdENvbnRyb2xsZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLXJlbW92ZS1wcm9wZXJ0aWVzLWxpc3QiIHRpdGxlPSJnc3RfY29udHJvbGxlcl9yZW1vdmVfcHJvcGVydGllc19saXN0ICgpIj5nc3RfY29udHJvbGxlcl9yZW1vdmVfcHJvcGVydGllc19saXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPkdzdENvbnRyb2xsZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLXJlbW92ZS1wcm9wZXJ0aWVzLXZhbGlzdCIgdGl0bGU9ImdzdF9jb250cm9sbGVyX3JlbW92ZV9wcm9wZXJ0aWVzX3ZhbGlzdCAoKSI+Z3N0X2NvbnRyb2xsZXJfcmVtb3ZlX3Byb3BlcnRpZXNfdmFsaXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPkdzdENvbnRyb2xsZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLXNldC1jb250cm9sLXNvdXJjZSIgdGl0bGU9ImdzdF9jb250cm9sbGVyX3NldF9jb250cm9sX3NvdXJjZSAoKSI+Z3N0X2NvbnRyb2xsZXJfc2V0X2NvbnRyb2xfc291cmNlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPkdzdENvbnRyb2xsZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLXNldC1kaXNhYmxlZCIgdGl0bGU9ImdzdF9jb250cm9sbGVyX3NldF9kaXNhYmxlZCAoKSI+Z3N0X2NvbnRyb2xsZXJfc2V0X2Rpc2FibGVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPkdzdENvbnRyb2xsZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLXNldC1wcm9wZXJ0eS1kaXNhYmxlZCIgdGl0bGU9ImdzdF9jb250cm9sbGVyX3NldF9wcm9wZXJ0eV9kaXNhYmxlZCAoKSI+Z3N0X2NvbnRyb2xsZXJfc2V0X3Byb3BlcnR5X2Rpc2FibGVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPkdzdENvbnRyb2xsZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLXN1Z2dlc3QtbmV4dC1zeW5jIiB0aXRsZT0iZ3N0X2NvbnRyb2xsZXJfc3VnZ2VzdF9uZXh0X3N5bmMgKCkiPmdzdF9jb250cm9sbGVyX3N1Z2dlc3RfbmV4dF9zeW5jPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPkdzdENvbnRyb2xsZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLXN5bmMtdmFsdWVzIiB0aXRsZT0iZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKCkiPmdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPkdzdENvbnRyb2xsZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2Utc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdENvbnRyb2xTb3VyY2UiPkdzdENvbnRyb2xTb3VyY2U8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPkdzdENvbnRyb2xTb3VyY2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2VCaW5kIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZUJpbmQgKCkiPkdzdENvbnRyb2xTb3VyY2VCaW5kPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+R3N0Q29udHJvbFNvdXJjZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZUNsYXNzIiB0aXRsZT0ic3RydWN0IEdzdENvbnRyb2xTb3VyY2VDbGFzcyI+R3N0Q29udHJvbFNvdXJjZUNsYXNzPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj5Hc3RDb250cm9sU291cmNlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sU291cmNlR2V0VmFsdWUiIHRpdGxlPSJHc3RDb250cm9sU291cmNlR2V0VmFsdWUgKCkiPkdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZTwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPkdzdENvbnRyb2xTb3VyY2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5IiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkgKCkiPkdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5PC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+R3N0Q29udHJvbFNvdXJjZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjZ3N0LWNvbnRyb2wtc291cmNlLWJpbmQiIHRpdGxlPSJnc3RfY29udHJvbF9zb3VyY2VfYmluZCAoKSI+Z3N0X2NvbnRyb2xfc291cmNlX2JpbmQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+R3N0Q29udHJvbFNvdXJjZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjZ3N0LWNvbnRyb2wtc291cmNlLWdldC12YWx1ZSIgdGl0bGU9ImdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWUgKCkiPmdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+R3N0Q29udHJvbFNvdXJjZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjZ3N0LWNvbnRyb2wtc291cmNlLWdldC12YWx1ZS1hcnJheSIgdGl0bGU9ImdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWVfYXJyYXkgKCkiPmdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWVfYXJyYXk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+R3N0Q29udHJvbFNvdXJjZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxhIG5hbWU9ImlkeEQiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5EPC9oMz4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj5Hc3REYXRhUXVldWU8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sIiB0aXRsZT0iR3N0RGF0YVF1ZXVlIj5Hc3REYXRhUXVldWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlQ2hlY2tGdWxsRnVuY3Rpb24iIHRpdGxlPSJHc3REYXRhUXVldWVDaGVja0Z1bGxGdW5jdGlvbiAoKSI+R3N0RGF0YVF1ZXVlQ2hlY2tGdWxsRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCIgdGl0bGU9IkdzdERhdGFRdWV1ZSI+R3N0RGF0YVF1ZXVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZUVtcHR5Q2FsbGJhY2siIHRpdGxlPSJHc3REYXRhUXVldWVFbXB0eUNhbGxiYWNrICgpIj5Hc3REYXRhUXVldWVFbXB0eUNhbGxiYWNrPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwiIHRpdGxlPSJHc3REYXRhUXVldWUiPkdzdERhdGFRdWV1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVGdWxsQ2FsbGJhY2siIHRpdGxlPSJHc3REYXRhUXVldWVGdWxsQ2FsbGJhY2sgKCkiPkdzdERhdGFRdWV1ZUZ1bGxDYWxsYmFjazwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sIiB0aXRsZT0iR3N0RGF0YVF1ZXVlIj5Hc3REYXRhUXVldWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlSXRlbSIgdGl0bGU9InN0cnVjdCBHc3REYXRhUXVldWVJdGVtIj5Hc3REYXRhUXVldWVJdGVtPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCIgdGl0bGU9IkdzdERhdGFRdWV1ZSI+R3N0RGF0YVF1ZXVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZVNpemUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlU2l6ZSI+R3N0RGF0YVF1ZXVlU2l6ZTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwiIHRpdGxlPSJHc3REYXRhUXVldWUiPkdzdERhdGFRdWV1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1kcm9wLWhlYWQiIHRpdGxlPSJnc3RfZGF0YV9xdWV1ZV9kcm9wX2hlYWQgKCkiPmdzdF9kYXRhX3F1ZXVlX2Ryb3BfaGVhZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCIgdGl0bGU9IkdzdERhdGFRdWV1ZSI+R3N0RGF0YVF1ZXVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLWZsdXNoIiB0aXRsZT0iZ3N0X2RhdGFfcXVldWVfZmx1c2ggKCkiPmdzdF9kYXRhX3F1ZXVlX2ZsdXNoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sIiB0aXRsZT0iR3N0RGF0YVF1ZXVlIj5Hc3REYXRhUXVldWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjZ3N0LWRhdGEtcXVldWUtZ2V0LWxldmVsIiB0aXRsZT0iZ3N0X2RhdGFfcXVldWVfZ2V0X2xldmVsICgpIj5nc3RfZGF0YV9xdWV1ZV9nZXRfbGV2ZWw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwiIHRpdGxlPSJHc3REYXRhUXVldWUiPkdzdERhdGFRdWV1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1pcy1lbXB0eSIgdGl0bGU9ImdzdF9kYXRhX3F1ZXVlX2lzX2VtcHR5ICgpIj5nc3RfZGF0YV9xdWV1ZV9pc19lbXB0eTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCIgdGl0bGU9IkdzdERhdGFRdWV1ZSI+R3N0RGF0YVF1ZXVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLWlzLWZ1bGwiIHRpdGxlPSJnc3RfZGF0YV9xdWV1ZV9pc19mdWxsICgpIj5nc3RfZGF0YV9xdWV1ZV9pc19mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sIiB0aXRsZT0iR3N0RGF0YVF1ZXVlIj5Hc3REYXRhUXVldWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjZ3N0LWRhdGEtcXVldWUtbGltaXRzLWNoYW5nZWQiIHRpdGxlPSJnc3RfZGF0YV9xdWV1ZV9saW1pdHNfY2hhbmdlZCAoKSI+Z3N0X2RhdGFfcXVldWVfbGltaXRzX2NoYW5nZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwiIHRpdGxlPSJHc3REYXRhUXVldWUiPkdzdERhdGFRdWV1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1uZXciIHRpdGxlPSJnc3RfZGF0YV9xdWV1ZV9uZXcgKCkiPmdzdF9kYXRhX3F1ZXVlX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCIgdGl0bGU9IkdzdERhdGFRdWV1ZSI+R3N0RGF0YVF1ZXVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLW5ldy1mdWxsIiB0aXRsZT0iZ3N0X2RhdGFfcXVldWVfbmV3X2Z1bGwgKCkiPmdzdF9kYXRhX3F1ZXVlX25ld19mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sIiB0aXRsZT0iR3N0RGF0YVF1ZXVlIj5Hc3REYXRhUXVldWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjZ3N0LWRhdGEtcXVldWUtcG9wIiB0aXRsZT0iZ3N0X2RhdGFfcXVldWVfcG9wICgpIj5nc3RfZGF0YV9xdWV1ZV9wb3A8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwiIHRpdGxlPSJHc3REYXRhUXVldWUiPkdzdERhdGFRdWV1ZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1wdXNoIiB0aXRsZT0iZ3N0X2RhdGFfcXVldWVfcHVzaCAoKSI+Z3N0X2RhdGFfcXVldWVfcHVzaDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCIgdGl0bGU9IkdzdERhdGFRdWV1ZSI+R3N0RGF0YVF1ZXVlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLXNldC1mbHVzaGluZyIgdGl0bGU9ImdzdF9kYXRhX3F1ZXVlX3NldF9mbHVzaGluZyAoKSI+Z3N0X2RhdGFfcXVldWVfc2V0X2ZsdXNoaW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sIiB0aXRsZT0iR3N0RGF0YVF1ZXVlIj5Hc3REYXRhUXVldWU8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR3N0RFBIZWFkZXJGbGFnIiB0aXRsZT0iZW51bSBHc3REUEhlYWRlckZsYWciPkdzdERQSGVhZGVyRmxhZzwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sIiB0aXRsZT0iZ3N0ZGF0YXByb3RvY29sIj5nc3RkYXRhcHJvdG9jb2w8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR3N0RFBIZWFkZXJGcm9tQnVmZmVyRnVuY3Rpb24iIHRpdGxlPSJHc3REUEhlYWRlckZyb21CdWZmZXJGdW5jdGlvbiAoKSI+R3N0RFBIZWFkZXJGcm9tQnVmZmVyRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCIgdGl0bGU9ImdzdGRhdGFwcm90b2NvbCI+Z3N0ZGF0YXByb3RvY29sPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dzdERQUGFja2V0RnJvbUNhcHNGdW5jdGlvbiIgdGl0bGU9IkdzdERQUGFja2V0RnJvbUNhcHNGdW5jdGlvbiAoKSI+R3N0RFBQYWNrZXRGcm9tQ2Fwc0Z1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwiIHRpdGxlPSJnc3RkYXRhcHJvdG9jb2wiPmdzdGRhdGFwcm90b2NvbDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNHc3REUFBhY2tldEZyb21FdmVudEZ1bmN0aW9uIiB0aXRsZT0iR3N0RFBQYWNrZXRGcm9tRXZlbnRGdW5jdGlvbiAoKSI+R3N0RFBQYWNrZXRGcm9tRXZlbnRGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sIiB0aXRsZT0iZ3N0ZGF0YXByb3RvY29sIj5nc3RkYXRhcHJvdG9jb2w8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR3N0RFBQYWNrZXRpemVyIiB0aXRsZT0iR3N0RFBQYWNrZXRpemVyIj5Hc3REUFBhY2tldGl6ZXI8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sIiB0aXRsZT0iZ3N0ZGF0YXByb3RvY29sIj5nc3RkYXRhcHJvdG9jb2w8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR3N0RFBQYXlsb2FkVHlwZSIgdGl0bGU9ImVudW0gR3N0RFBQYXlsb2FkVHlwZSI+R3N0RFBQYXlsb2FkVHlwZTwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sIiB0aXRsZT0iZ3N0ZGF0YXByb3RvY29sIj5nc3RkYXRhcHJvdG9jb2w8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR3N0RFBWZXJzaW9uIiB0aXRsZT0iZW51bSBHc3REUFZlcnNpb24iPkdzdERQVmVyc2lvbjwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sIiB0aXRsZT0iZ3N0ZGF0YXByb3RvY29sIj5nc3RkYXRhcHJvdG9jb2w8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjZ3N0LWRwLWJ1ZmZlci1mcm9tLWhlYWRlciIgdGl0bGU9ImdzdF9kcF9idWZmZXJfZnJvbV9oZWFkZXIgKCkiPmdzdF9kcF9idWZmZXJfZnJvbV9oZWFkZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwiIHRpdGxlPSJnc3RkYXRhcHJvdG9jb2wiPmdzdGRhdGFwcm90b2NvbDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNnc3QtZHAtY2Fwcy1mcm9tLXBhY2tldCIgdGl0bGU9ImdzdF9kcF9jYXBzX2Zyb21fcGFja2V0ICgpIj5nc3RfZHBfY2Fwc19mcm9tX3BhY2tldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCIgdGl0bGU9ImdzdGRhdGFwcm90b2NvbCI+Z3N0ZGF0YXByb3RvY29sPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI2dzdC1kcC1jcmMiIHRpdGxlPSJnc3RfZHBfY3JjICgpIj5nc3RfZHBfY3JjPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sIiB0aXRsZT0iZ3N0ZGF0YXByb3RvY29sIj5nc3RkYXRhcHJvdG9jb2w8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjZ3N0LWRwLWV2ZW50LWZyb20tcGFja2V0IiB0aXRsZT0iZ3N0X2RwX2V2ZW50X2Zyb21fcGFja2V0ICgpIj5nc3RfZHBfZXZlbnRfZnJvbV9wYWNrZXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwiIHRpdGxlPSJnc3RkYXRhcHJvdG9jb2wiPmdzdGRhdGFwcm90b2NvbDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNHU1QtRFAtSEVBREVSLUxFTkdUSDpDQVBTIiB0aXRsZT0iR1NUX0RQX0hFQURFUl9MRU5HVEgiPkdTVF9EUF9IRUFERVJfTEVOR1RIPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sIiB0aXRsZT0iZ3N0ZGF0YXByb3RvY29sIj5nc3RkYXRhcHJvdG9jb2w8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjZ3N0LWRwLWhlYWRlci1wYXlsb2FkLWxlbmd0aCIgdGl0bGU9ImdzdF9kcF9oZWFkZXJfcGF5bG9hZF9sZW5ndGggKCkiPmdzdF9kcF9oZWFkZXJfcGF5bG9hZF9sZW5ndGg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwiIHRpdGxlPSJnc3RkYXRhcHJvdG9jb2wiPmdzdGRhdGFwcm90b2NvbDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNnc3QtZHAtaGVhZGVyLXBheWxvYWQtdHlwZSIgdGl0bGU9ImdzdF9kcF9oZWFkZXJfcGF5bG9hZF90eXBlICgpIj5nc3RfZHBfaGVhZGVyX3BheWxvYWRfdHlwZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCIgdGl0bGU9ImdzdGRhdGFwcm90b2NvbCI+Z3N0ZGF0YXByb3RvY29sPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI2dzdC1kcC1pbml0IiB0aXRsZT0iZ3N0X2RwX2luaXQgKCkiPmdzdF9kcF9pbml0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sIiB0aXRsZT0iZ3N0ZGF0YXByb3RvY29sIj5nc3RkYXRhcHJvdG9jb2w8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjZ3N0LWRwLXBhY2tldGl6ZXItZnJlZSIgdGl0bGU9ImdzdF9kcF9wYWNrZXRpemVyX2ZyZWUgKCkiPmdzdF9kcF9wYWNrZXRpemVyX2ZyZWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwiIHRpdGxlPSJnc3RkYXRhcHJvdG9jb2wiPmdzdGRhdGFwcm90b2NvbDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNnc3QtZHAtcGFja2V0aXplci1uZXciIHRpdGxlPSJnc3RfZHBfcGFja2V0aXplcl9uZXcgKCkiPmdzdF9kcF9wYWNrZXRpemVyX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCIgdGl0bGU9ImdzdGRhdGFwcm90b2NvbCI+Z3N0ZGF0YXByb3RvY29sPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI2dzdC1kcC12YWxpZGF0ZS1oZWFkZXIiIHRpdGxlPSJnc3RfZHBfdmFsaWRhdGVfaGVhZGVyICgpIj5nc3RfZHBfdmFsaWRhdGVfaGVhZGVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sIiB0aXRsZT0iZ3N0ZGF0YXByb3RvY29sIj5nc3RkYXRhcHJvdG9jb2w8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjZ3N0LWRwLXZhbGlkYXRlLXBhY2tldCIgdGl0bGU9ImdzdF9kcF92YWxpZGF0ZV9wYWNrZXQgKCkiPmdzdF9kcF92YWxpZGF0ZV9wYWNrZXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwiIHRpdGxlPSJnc3RkYXRhcHJvdG9jb2wiPmdzdGRhdGFwcm90b2NvbDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNnc3QtZHAtdmFsaWRhdGUtcGF5bG9hZCIgdGl0bGU9ImdzdF9kcF92YWxpZGF0ZV9wYXlsb2FkICgpIj5nc3RfZHBfdmFsaWRhdGVfcGF5bG9hZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCIgdGl0bGU9ImdzdGRhdGFwcm90b2NvbCI+Z3N0ZGF0YXByb3RvY29sPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dTVC1EUC1WRVJTSU9OLU1BSk9SOkNBUFMiIHRpdGxlPSJHU1RfRFBfVkVSU0lPTl9NQUpPUiI+R1NUX0RQX1ZFUlNJT05fTUFKT1I8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwiIHRpdGxlPSJnc3RkYXRhcHJvdG9jb2wiPmdzdGRhdGFwcm90b2NvbDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNHU1QtRFAtVkVSU0lPTi1NSU5PUjpDQVBTIiB0aXRsZT0iR1NUX0RQX1ZFUlNJT05fTUlOT1IiPkdTVF9EUF9WRVJTSU9OX01JTk9SPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sIiB0aXRsZT0iZ3N0ZGF0YXByb3RvY29sIj5nc3RkYXRhcHJvdG9jb2w8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8YSBuYW1lPSJpZHhFIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+RTwvaDM+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNHU1QtRU5ELVRFU1Q6Q0FQUyIgdGl0bGU9IkdTVF9FTkRfVEVTVCI+R1NUX0VORF9URVNUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8YSBuYW1lPSJpZHhGIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+RjwvaDM+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNmYWlsLXVubGVzcy1lcXVhbHMtZmxvYXQiIHRpdGxlPSJmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQoKSI+ZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0PC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNmYWlsLXVubGVzcy1lcXVhbHMtaW50IiB0aXRsZT0iZmFpbF91bmxlc3NfZXF1YWxzX2ludCgpIj5mYWlsX3VubGVzc19lcXVhbHNfaW50PC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNmYWlsLXVubGVzcy1lcXVhbHMtaW50NjQiIHRpdGxlPSJmYWlsX3VubGVzc19lcXVhbHNfaW50NjQoKSI+ZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0PC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNmYWlsLXVubGVzcy1lcXVhbHMtc3RyaW5nIiB0aXRsZT0iZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZygpIj5mYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNmYWlsLXVubGVzcy1lcXVhbHMtdWludDY0IiB0aXRsZT0iZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCgpIj5mYWlsX3VubGVzc19lcXVhbHNfdWludDY0PC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNmYWlsLXVubGVzcy1tZXNzYWdlLWVycm9yIiB0aXRsZT0iZmFpbF91bmxlc3NfbWVzc2FnZV9lcnJvcigpIj5mYWlsX3VubGVzc19tZXNzYWdlX2Vycm9yPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8YSBuYW1lPSJpZHhJIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+STwvaDM+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNHc3RJbnRlcnBvbGF0ZU1vZGUiIHRpdGxlPSJlbnVtIEdzdEludGVycG9sYXRlTW9kZSI+R3N0SW50ZXJwb2xhdGVNb2RlPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlIj5Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sI0dzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSI+R3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2U8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSI+R3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtaW50ZXJwb2xhdGlvbi1jb250cm9sLXNvdXJjZS1nZXQtYWxsIiB0aXRsZT0iZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfZ2V0X2FsbCAoKSI+Z3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfZ2V0X2FsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UiPkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwjZ3N0LWludGVycG9sYXRpb24tY29udHJvbC1zb3VyY2UtZ2V0LWNvdW50IiB0aXRsZT0iZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfZ2V0X2NvdW50ICgpIj5nc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9nZXRfY291bnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlIj5Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sI2dzdC1pbnRlcnBvbGF0aW9uLWNvbnRyb2wtc291cmNlLW5ldyIgdGl0bGU9ImdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX25ldyAoKSI+Z3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSI+R3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtaW50ZXJwb2xhdGlvbi1jb250cm9sLXNvdXJjZS1zZXQiIHRpdGxlPSJnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXQgKCkiPmdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UiPkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwjZ3N0LWludGVycG9sYXRpb24tY29udHJvbC1zb3VyY2Utc2V0LWZyb20tbGlzdCIgdGl0bGU9ImdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldF9mcm9tX2xpc3QgKCkiPmdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldF9mcm9tX2xpc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlIj5Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sI2dzdC1pbnRlcnBvbGF0aW9uLWNvbnRyb2wtc291cmNlLXNldC1pbnRlcnBvbGF0aW9uLW1vZGUiIHRpdGxlPSJnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXRfaW50ZXJwb2xhdGlvbl9tb2RlICgpIj5nc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXRfaW50ZXJwb2xhdGlvbl9tb2RlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSI+R3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtaW50ZXJwb2xhdGlvbi1jb250cm9sLXNvdXJjZS11bnNldCIgdGl0bGU9ImdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3Vuc2V0ICgpIj5nc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV91bnNldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UiPkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwjZ3N0LWludGVycG9sYXRpb24tY29udHJvbC1zb3VyY2UtdW5zZXQtYWxsIiB0aXRsZT0iZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfdW5zZXRfYWxsICgpIj5nc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV91bnNldF9hbGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlIj5Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxhIG5hbWU9ImlkeEwiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5MPC9oMz4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPQ29udHJvbFNvdXJjZS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TEZPQ29udHJvbFNvdXJjZSI+R3N0TEZPQ29udHJvbFNvdXJjZTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0TEZPQ29udHJvbFNvdXJjZSI+R3N0TEZPQ29udHJvbFNvdXJjZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPQ29udHJvbFNvdXJjZS0tYW1wbGl0dWRlIiB0aXRsZT0nVGhlICJhbXBsaXR1ZGUiIHByb3BlcnR5Jz5Hc3RMRk9Db250cm9sU291cmNlOmFtcGxpdHVkZTwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0TEZPQ29udHJvbFNvdXJjZSI+R3N0TEZPQ29udHJvbFNvdXJjZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPQ29udHJvbFNvdXJjZS0tZnJlcXVlbmN5IiB0aXRsZT0nVGhlICJmcmVxdWVuY3kiIHByb3BlcnR5Jz5Hc3RMRk9Db250cm9sU291cmNlOmZyZXF1ZW5jeTwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0TEZPQ29udHJvbFNvdXJjZSI+R3N0TEZPQ29udHJvbFNvdXJjZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPQ29udHJvbFNvdXJjZS0tb2Zmc2V0IiB0aXRsZT0nVGhlICJvZmZzZXQiIHByb3BlcnR5Jz5Hc3RMRk9Db250cm9sU291cmNlOm9mZnNldDwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0TEZPQ29udHJvbFNvdXJjZSI+R3N0TEZPQ29udHJvbFNvdXJjZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPQ29udHJvbFNvdXJjZS0tdGltZXNoaWZ0IiB0aXRsZT0nVGhlICJ0aW1lc2hpZnQiIHByb3BlcnR5Jz5Hc3RMRk9Db250cm9sU291cmNlOnRpbWVzaGlmdDwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0TEZPQ29udHJvbFNvdXJjZSI+R3N0TEZPQ29udHJvbFNvdXJjZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPQ29udHJvbFNvdXJjZS0td2F2ZWZvcm0iIHRpdGxlPSdUaGUgIndhdmVmb3JtIiBwcm9wZXJ0eSc+R3N0TEZPQ29udHJvbFNvdXJjZTp3YXZlZm9ybTwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0TEZPQ29udHJvbFNvdXJjZSI+R3N0TEZPQ29udHJvbFNvdXJjZTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPV2F2ZWZvcm0iIHRpdGxlPSJlbnVtIEdzdExGT1dhdmVmb3JtIj5Hc3RMRk9XYXZlZm9ybTwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdExGT0NvbnRyb2xTb3VyY2UiPkdzdExGT0NvbnRyb2xTb3VyY2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sI2dzdC1sZm8tY29udHJvbC1zb3VyY2UtbmV3IiB0aXRsZT0iZ3N0X2xmb19jb250cm9sX3NvdXJjZV9uZXcgKCkiPmdzdF9sZm9fY29udHJvbF9zb3VyY2VfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdExGT0NvbnRyb2xTb3VyY2UiPkdzdExGT0NvbnRyb2xTb3VyY2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8YSBuYW1lPSJpZHhOIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+TjwvaDM+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCNHc3ROZXRDbGllbnRDbG9jay1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TmV0Q2xpZW50Q2xvY2siPkdzdE5ldENsaWVudENsb2NrPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sIiB0aXRsZT0iR3N0TmV0Q2xpZW50Q2xvY2siPkdzdE5ldENsaWVudENsb2NrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldENsaWVudENsb2NrLmh0bWwjR3N0TmV0Q2xpZW50Q2xvY2stLWFkZHJlc3MiIHRpdGxlPSdUaGUgImFkZHJlc3MiIHByb3BlcnR5Jz5Hc3ROZXRDbGllbnRDbG9jazphZGRyZXNzPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sIiB0aXRsZT0iR3N0TmV0Q2xpZW50Q2xvY2siPkdzdE5ldENsaWVudENsb2NrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldENsaWVudENsb2NrLmh0bWwjR3N0TmV0Q2xpZW50Q2xvY2stLXBvcnQiIHRpdGxlPSdUaGUgInBvcnQiIHByb3BlcnR5Jz5Hc3ROZXRDbGllbnRDbG9jazpwb3J0PC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sIiB0aXRsZT0iR3N0TmV0Q2xpZW50Q2xvY2siPkdzdE5ldENsaWVudENsb2NrPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHc3ROZXRUaW1lUGFja2V0IiB0aXRsZT0ic3RydWN0IEdzdE5ldFRpbWVQYWNrZXQiPkdzdE5ldFRpbWVQYWNrZXQ8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCIgdGl0bGU9IkdzdE5ldFRpbWVQYWNrZXQiPkdzdE5ldFRpbWVQYWNrZXQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwjR3N0TmV0VGltZVByb3ZpZGVyLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3ROZXRUaW1lUHJvdmlkZXIiPkdzdE5ldFRpbWVQcm92aWRlcjwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3ROZXRUaW1lUHJvdmlkZXIiPkdzdE5ldFRpbWVQcm92aWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCNHc3ROZXRUaW1lUHJvdmlkZXItLWFjdGl2ZSIgdGl0bGU9J1RoZSAiYWN0aXZlIiBwcm9wZXJ0eSc+R3N0TmV0VGltZVByb3ZpZGVyOmFjdGl2ZTwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3ROZXRUaW1lUHJvdmlkZXIiPkdzdE5ldFRpbWVQcm92aWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCNHc3ROZXRUaW1lUHJvdmlkZXItLWFkZHJlc3MiIHRpdGxlPSdUaGUgImFkZHJlc3MiIHByb3BlcnR5Jz5Hc3ROZXRUaW1lUHJvdmlkZXI6YWRkcmVzczwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3ROZXRUaW1lUHJvdmlkZXIiPkdzdE5ldFRpbWVQcm92aWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCNHc3ROZXRUaW1lUHJvdmlkZXItLWNsb2NrIiB0aXRsZT0nVGhlICJjbG9jayIgcHJvcGVydHknPkdzdE5ldFRpbWVQcm92aWRlcjpjbG9jazwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3ROZXRUaW1lUHJvdmlkZXIiPkdzdE5ldFRpbWVQcm92aWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCNHc3ROZXRUaW1lUHJvdmlkZXItLXBvcnQiIHRpdGxlPSdUaGUgInBvcnQiIHByb3BlcnR5Jz5Hc3ROZXRUaW1lUHJvdmlkZXI6cG9ydDwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3ROZXRUaW1lUHJvdmlkZXIiPkdzdE5ldFRpbWVQcm92aWRlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sI2dzdC1uZXQtY2xpZW50LWNsb2NrLW5ldyIgdGl0bGU9ImdzdF9uZXRfY2xpZW50X2Nsb2NrX25ldyAoKSI+Z3N0X25ldF9jbGllbnRfY2xvY2tfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldENsaWVudENsb2NrLmh0bWwiIHRpdGxlPSJHc3ROZXRDbGllbnRDbG9jayI+R3N0TmV0Q2xpZW50Q2xvY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI2dzdC1uZXQtdGltZS1wYWNrZXQtbmV3IiB0aXRsZT0iZ3N0X25ldF90aW1lX3BhY2tldF9uZXcgKCkiPmdzdF9uZXRfdGltZV9wYWNrZXRfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCIgdGl0bGU9IkdzdE5ldFRpbWVQYWNrZXQiPkdzdE5ldFRpbWVQYWNrZXQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI2dzdC1uZXQtdGltZS1wYWNrZXQtcmVjZWl2ZSIgdGl0bGU9ImdzdF9uZXRfdGltZV9wYWNrZXRfcmVjZWl2ZSAoKSI+Z3N0X25ldF90aW1lX3BhY2tldF9yZWNlaXZlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCIgdGl0bGU9IkdzdE5ldFRpbWVQYWNrZXQiPkdzdE5ldFRpbWVQYWNrZXQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI2dzdC1uZXQtdGltZS1wYWNrZXQtc2VuZCIgdGl0bGU9ImdzdF9uZXRfdGltZV9wYWNrZXRfc2VuZCAoKSI+Z3N0X25ldF90aW1lX3BhY2tldF9zZW5kPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCIgdGl0bGU9IkdzdE5ldFRpbWVQYWNrZXQiPkdzdE5ldFRpbWVQYWNrZXQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI2dzdC1uZXQtdGltZS1wYWNrZXQtc2VyaWFsaXplIiB0aXRsZT0iZ3N0X25ldF90aW1lX3BhY2tldF9zZXJpYWxpemUgKCkiPmdzdF9uZXRfdGltZV9wYWNrZXRfc2VyaWFsaXplPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCIgdGl0bGU9IkdzdE5ldFRpbWVQYWNrZXQiPkdzdE5ldFRpbWVQYWNrZXQ8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI0dTVC1ORVQtVElNRS1QQUNLRVQtU0laRTpDQVBTIiB0aXRsZT0iR1NUX05FVF9USU1FX1BBQ0tFVF9TSVpFIj5HU1RfTkVUX1RJTUVfUEFDS0VUX1NJWkU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sIiB0aXRsZT0iR3N0TmV0VGltZVBhY2tldCI+R3N0TmV0VGltZVBhY2tldDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCNnc3QtbmV0LXRpbWUtcHJvdmlkZXItbmV3IiB0aXRsZT0iZ3N0X25ldF90aW1lX3Byb3ZpZGVyX25ldyAoKSI+Z3N0X25ldF90aW1lX3Byb3ZpZGVyX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCIgdGl0bGU9IkdzdE5ldFRpbWVQcm92aWRlciI+R3N0TmV0VGltZVByb3ZpZGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGEgbmFtZT0iaWR4TyI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPk88L2gzPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1jb250cm9sLXByb3BlcnRpZXMiIHRpdGxlPSJnc3Rfb2JqZWN0X2NvbnRyb2xfcHJvcGVydGllcyAoKSI+Z3N0X29iamVjdF9jb250cm9sX3Byb3BlcnRpZXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXJHT2JqZWN0Ij5Hc3RDb250cm9sbGVyR09iamVjdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDb250cm9sbGVyR09iamVjdC5odG1sI2dzdC1vYmplY3QtZ2V0LWNvbnRyb2xsZXIiIHRpdGxlPSJnc3Rfb2JqZWN0X2dldF9jb250cm9sbGVyICgpIj5nc3Rfb2JqZWN0X2dldF9jb250cm9sbGVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RDb250cm9sbGVyR09iamVjdCI+R3N0Q29udHJvbGxlckdPYmplY3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC1jb250cm9sLXJhdGUiIHRpdGxlPSJnc3Rfb2JqZWN0X2dldF9jb250cm9sX3JhdGUgKCkiPmdzdF9vYmplY3RfZ2V0X2NvbnRyb2xfcmF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDb250cm9sbGVyR09iamVjdC5odG1sIiB0aXRsZT0iR3N0Q29udHJvbGxlckdPYmplY3QiPkdzdENvbnRyb2xsZXJHT2JqZWN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1nZXQtY29udHJvbC1zb3VyY2UiIHRpdGxlPSJnc3Rfb2JqZWN0X2dldF9jb250cm9sX3NvdXJjZSAoKSI+Z3N0X29iamVjdF9nZXRfY29udHJvbF9zb3VyY2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXJHT2JqZWN0Ij5Hc3RDb250cm9sbGVyR09iamVjdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDb250cm9sbGVyR09iamVjdC5odG1sI2dzdC1vYmplY3QtZ2V0LXZhbHVlLWFycmF5IiB0aXRsZT0iZ3N0X29iamVjdF9nZXRfdmFsdWVfYXJyYXkgKCkiPmdzdF9vYmplY3RfZ2V0X3ZhbHVlX2FycmF5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RDb250cm9sbGVyR09iamVjdCI+R3N0Q29udHJvbGxlckdPYmplY3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC12YWx1ZS1hcnJheXMiIHRpdGxlPSJnc3Rfb2JqZWN0X2dldF92YWx1ZV9hcnJheXMgKCkiPmdzdF9vYmplY3RfZ2V0X3ZhbHVlX2FycmF5czwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDb250cm9sbGVyR09iamVjdC5odG1sIiB0aXRsZT0iR3N0Q29udHJvbGxlckdPYmplY3QiPkdzdENvbnRyb2xsZXJHT2JqZWN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1zZXQtY29udHJvbGxlciIgdGl0bGU9ImdzdF9vYmplY3Rfc2V0X2NvbnRyb2xsZXIgKCkiPmdzdF9vYmplY3Rfc2V0X2NvbnRyb2xsZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXJHT2JqZWN0Ij5Hc3RDb250cm9sbGVyR09iamVjdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDb250cm9sbGVyR09iamVjdC5odG1sI2dzdC1vYmplY3Qtc2V0LWNvbnRyb2wtcmF0ZSIgdGl0bGU9ImdzdF9vYmplY3Rfc2V0X2NvbnRyb2xfcmF0ZSAoKSI+Z3N0X29iamVjdF9zZXRfY29udHJvbF9yYXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RDb250cm9sbGVyR09iamVjdCI+R3N0Q29udHJvbGxlckdPYmplY3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXNldC1jb250cm9sLXNvdXJjZSIgdGl0bGU9ImdzdF9vYmplY3Rfc2V0X2NvbnRyb2xfc291cmNlICgpIj5nc3Rfb2JqZWN0X3NldF9jb250cm9sX3NvdXJjZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDb250cm9sbGVyR09iamVjdC5odG1sIiB0aXRsZT0iR3N0Q29udHJvbGxlckdPYmplY3QiPkdzdENvbnRyb2xsZXJHT2JqZWN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1zdWdnZXN0LW5leHQtc3luYyIgdGl0bGU9ImdzdF9vYmplY3Rfc3VnZ2VzdF9uZXh0X3N5bmMgKCkiPmdzdF9vYmplY3Rfc3VnZ2VzdF9uZXh0X3N5bmM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXJHT2JqZWN0Ij5Hc3RDb250cm9sbGVyR09iamVjdDwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDb250cm9sbGVyR09iamVjdC5odG1sI2dzdC1vYmplY3Qtc3luYy12YWx1ZXMiIHRpdGxlPSJnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzICgpIj5nc3Rfb2JqZWN0X3N5bmNfdmFsdWVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RDb250cm9sbGVyR09iamVjdCI+R3N0Q29udHJvbGxlckdPYmplY3Q8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVuY29udHJvbC1wcm9wZXJ0aWVzIiB0aXRsZT0iZ3N0X29iamVjdF91bmNvbnRyb2xfcHJvcGVydGllcyAoKSI+Z3N0X29iamVjdF91bmNvbnRyb2xfcHJvcGVydGllczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDb250cm9sbGVyR09iamVjdC5odG1sIiB0aXRsZT0iR3N0Q29udHJvbGxlckdPYmplY3QiPkdzdENvbnRyb2xsZXJHT2JqZWN0PC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGEgbmFtZT0iaWR4UCI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPlA8L2gzPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB1c2hTcmMuaHRtbCNHc3RQdXNoU3JjLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RQdXNoU3JjIj5Hc3RQdXNoU3JjPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdXNoU3JjLmh0bWwiIHRpdGxlPSJHc3RQdXNoU3JjIj5Hc3RQdXNoU3JjPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGEgbmFtZT0iaWR4UyI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPlM8L2gzPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjR1NULVNUQVJULVRFU1Q6Q0FQUyIgdGl0bGU9IkdTVF9TVEFSVF9URVNUKCkiPkdTVF9TVEFSVF9URVNUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCNHc3RTdHJlYW1Db25zaXN0ZW5jeSIgdGl0bGU9IkdzdFN0cmVhbUNvbnNpc3RlbmN5Ij5Hc3RTdHJlYW1Db25zaXN0ZW5jeTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCIgdGl0bGU9IkdzdFN0cmVhbUNvbnNpc3RlbmN5Ij5Hc3RTdHJlYW1Db25zaXN0ZW5jeTwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxhIG5hbWU9ImlkeFQiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5UPC9oMz4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0VGltZWRWYWx1ZSIgdGl0bGU9InN0cnVjdCBHc3RUaW1lZFZhbHVlIj5Hc3RUaW1lZFZhbHVlPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj5Hc3RDb250cm9sU291cmNlPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwjR3N0VHlwZUZpbmRIZWxwZXJHZXRSYW5nZUZ1bmN0aW9uIiB0aXRsZT0iR3N0VHlwZUZpbmRIZWxwZXJHZXRSYW5nZUZ1bmN0aW9uICgpIj5Hc3RUeXBlRmluZEhlbHBlckdldFJhbmdlRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sIiB0aXRsZT0iR3N0VHlwZUZpbmRIZWxwZXIiPkdzdFR5cGVGaW5kSGVscGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwjZ3N0LXR5cGUtZmluZC1oZWxwZXIiIHRpdGxlPSJnc3RfdHlwZV9maW5kX2hlbHBlciAoKSI+Z3N0X3R5cGVfZmluZF9oZWxwZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kSGVscGVyIj5Hc3RUeXBlRmluZEhlbHBlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI2dzdC10eXBlLWZpbmQtaGVscGVyLWZvci1idWZmZXIiIHRpdGxlPSJnc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfYnVmZmVyICgpIj5nc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfYnVmZmVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwiIHRpdGxlPSJHc3RUeXBlRmluZEhlbHBlciI+R3N0VHlwZUZpbmRIZWxwZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCNnc3QtdHlwZS1maW5kLWhlbHBlci1mb3ItZGF0YSIgdGl0bGU9ImdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9kYXRhICgpIj5nc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfZGF0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sIiB0aXRsZT0iR3N0VHlwZUZpbmRIZWxwZXIiPkdzdFR5cGVGaW5kSGVscGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwjZ3N0LXR5cGUtZmluZC1oZWxwZXItZm9yLWV4dGVuc2lvbiIgdGl0bGU9ImdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9leHRlbnNpb24gKCkiPmdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9leHRlbnNpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kSGVscGVyIj5Hc3RUeXBlRmluZEhlbHBlcjwvYT4KKzwvZHQ+Cis8ZGQ+PC9kZD4KKzxkdD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI2dzdC10eXBlLWZpbmQtaGVscGVyLWdldC1yYW5nZSIgdGl0bGU9ImdzdF90eXBlX2ZpbmRfaGVscGVyX2dldF9yYW5nZSAoKSI+Z3N0X3R5cGVfZmluZF9oZWxwZXJfZ2V0X3JhbmdlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwiIHRpdGxlPSJHc3RUeXBlRmluZEhlbHBlciI+R3N0VHlwZUZpbmRIZWxwZXI8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8ZHQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCNnc3QtdHlwZS1maW5kLWhlbHBlci1nZXQtcmFuZ2UtZXh0IiB0aXRsZT0iZ3N0X3R5cGVfZmluZF9oZWxwZXJfZ2V0X3JhbmdlX2V4dCAoKSI+Z3N0X3R5cGVfZmluZF9oZWxwZXJfZ2V0X3JhbmdlX2V4dDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sIiB0aXRsZT0iR3N0VHlwZUZpbmRIZWxwZXIiPkdzdFR5cGVGaW5kSGVscGVyPC9hPgorPC9kdD4KKzxkZD48L2RkPgorPGEgbmFtZT0iaWR4ViI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPlY8L2gzPgorPGR0PgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RWYWx1ZUFycmF5IiB0aXRsZT0ic3RydWN0IEdzdFZhbHVlQXJyYXkiPkdzdFZhbHVlQXJyYXk8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPkdzdENvbnRyb2xTb3VyY2U8L2E+Cis8L2R0PgorPGRkPjwvZGQ+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9nZHAtaGVhZGVyLnBuZyBiL2RvY3MvbGlicy9odG1sL2dkcC1oZWFkZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZDA4ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2xpYnMvaHRtbC9nZHAtaGVhZGVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItYmFzZS5odG1sIGIvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWJhc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjEyMTExCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWJhc2UuaHRtbApAQCAtMCwwICsxLDc0IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R1N0cmVhbWVyIEJhc2UgYW5kIFV0aWxsaXR5IENsYXNzZXM8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJnc3RyZWFtZXItbGlicy5odG1sIiB0aXRsZT0iUGFydMKgSS7CoEdTdHJlYW1lciBMaWJyYXJpZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItbGlicy5odG1sIiB0aXRsZT0iUGFydMKgSS7CoEdTdHJlYW1lciBMaWJyYXJpZXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1saWJzLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItbGlicy5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj48L3RhYmxlPgorPGRpdiBjbGFzcz0iY2hhcHRlciI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1iYXNlIj48L2E+R1N0cmVhbWVyIEJhc2UgYW5kIFV0aWxsaXR5IENsYXNzZXM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgorPGRpdiBjbGFzcz0idG9jIj48ZGw+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwiPkdzdEJhc2VQYXJzZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQmFzZSBjbGFzcyBmb3Igc3RyZWFtIHBhcnNlcnM8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCI+R3N0QmFzZVNyYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQmFzZSBjbGFzcyBmb3IgZ2V0cmFuZ2UgYmFzZWQgc291cmNlIGVsZW1lbnRzPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RCYXNlU2luay5odG1sIj5Hc3RCYXNlU2luazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQmFzZSBjbGFzcyBmb3Igc2luayBlbGVtZW50czwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIj5Hc3RCYXNlVHJhbnNmb3JtPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBCYXNlIGNsYXNzIGZvciBzaW1wbGUgdHJhbnNmb3JtIGZpbHRlcnM8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFB1c2hTcmMuaHRtbCI+R3N0UHVzaFNyYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQmFzZSBjbGFzcyBmb3IgcHVzaCBiYXNlZCBzb3VyY2UgZWxlbWVudHM8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCI+R3N0QWRhcHRlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgYWRhcHRzIGluY29taW5nIGRhdGEgb24gYSBzaW5rIHBhZCBpbnRvIGNodW5rcyBvZiBOIGJ5dGVzPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCI+R3N0Qml0UmVhZGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBSZWFkcyBhbnkgbnVtYmVyIG9mIGJpdHMgZnJvbSBhIG1lbW9yeSBidWZmZXI8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCI+R3N0Qnl0ZVJlYWRlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgUmVhZHMgZGlmZmVyZW50IGludGVnZXIsIHN0cmluZyBhbmQgZmxvYXRpbmcgcG9pbnQKKyAgICB0eXBlcyBmcm9tIGEgbWVtb3J5IGJ1ZmZlcjwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIj5Hc3RCeXRlV3JpdGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBXcml0ZXMgZGlmZmVyZW50IGludGVnZXIsIHN0cmluZyBhbmQgZmxvYXRpbmcgcG9pbnQKKyAgICB0eXBlcyB0byBhIG1lbW9yeSBidWZmZXIgYW5kIGFsbG93cyByZWFkaW5nPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIj5Hc3RDb2xsZWN0UGFkczwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgbWFuYWdlcyBhIHNldCBvZiBwYWRzIHRoYXQgb3BlcmF0ZSBpbiBjb2xsZWN0IG1vZGU8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwiPkdzdFR5cGVGaW5kSGVscGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgdHlwZWZpbmRpbmc8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sIj5Hc3REYXRhUXVldWU8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFRocmVhZHNhZmUgcXVldWVpbmcgb2JqZWN0PC9zcGFuPgorPC9kdD4KKzwvZGw+PC9kaXY+Cis8cD4KKyAgICAgICAgbGliZ3N0YmFzZS0wLjExLnNvIHByb3ZpZGVzIHNvbWUgYmFzZSBjbGFzc2VzIHRvIGJlIGV4dGVuZGVkCisgICAgICAgIGJ5IGVsZW1lbnRzIGFuZCB1dGlsbGl0eSBjbGFzc2VzIHRoYXQgYXJlIG1vc3QgdXNlZnVsIGZvciBwbHVnaW4gZGV2ZWxvcGVycy4KKyAgICAgIDwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1jaGVjay5odG1sIGIvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWNoZWNrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM1ZmRiYgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1jaGVjay5odG1sCkBAIC0wLDAgKzEsNDUgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5HU3RyZWFtZXIgQ2hlY2sgVW5pdCBUZXN0aW5nPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMuaHRtbCIgdGl0bGU9IlBhcnTCoEkuwqBHU3RyZWFtZXIgTGlicmFyaWVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3ROZXRUaW1lUHJvdmlkZXIiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPjx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImdzdHJlYW1lci1saWJzLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxkaXYgY2xhc3M9ImNoYXB0ZXIiPgorPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItY2hlY2siPjwvYT5HU3RyZWFtZXIgQ2hlY2sgVW5pdCBUZXN0aW5nPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KKzxkaXYgY2xhc3M9InRvYyI+PGRsPgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiPkdzdENoZWNrPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBDb21tb24gY29kZSBmb3IgR1N0cmVhbWVyIHVuaXQgdGVzdHM8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3Lmh0bWwiPkdzdEJ1ZmZlclN0cmF3PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBCdWZmZXIgaW50ZXJjZXB0aW9uIGNvZGUgZm9yIEdTdHJlYW1lciB1bml0IHRlc3RzPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5odG1sIj5Hc3RTdHJlYW1Db25zaXN0ZW5jeTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgRGF0YSBmbG93IGNvbnNpc3RlbmN5IGNoZWNrZXIgZm9yIEdTdHJlYW1lciB1bml0IHRlc3RzLjwvc3Bhbj4KKzwvZHQ+Cis8L2RsPjwvZGl2PgorPHA+CisgICAgICAgIGxpYmdzdGNoZWNrLTAuMTEuc28gcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSBmb3Igd3JpdGluZworICAgICAgICB1bml0IHRlc3RzIHRoYXQgdXNlIHRoZSBjaGVjayBmcmFtZXdvcmsuCisgICAgICA8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItY29udHJvbC5odG1sIGIvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWNvbnRyb2wuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzNiNGQxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWNvbnRyb2wuaHRtbApAQCAtMCwwICsxLDUxIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R1N0cmVhbWVyIER5bmFtaWMgUGFyYW1ldGVyIENvbnRyb2w8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJnc3RyZWFtZXItbGlicy5odG1sIiB0aXRsZT0iUGFydMKgSS7CoEdTdHJlYW1lciBMaWJyYXJpZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCIgdGl0bGU9IkdzdERhdGFRdWV1ZSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPjx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImdzdHJlYW1lci1saWJzLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RDb250cm9sbGVyLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj48L3RhYmxlPgorPGRpdiBjbGFzcz0iY2hhcHRlciI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1jb250cm9sIj48L2E+R1N0cmVhbWVyIER5bmFtaWMgUGFyYW1ldGVyIENvbnRyb2w8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgorPGRpdiBjbGFzcz0idG9jIj48ZGw+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sIj5Hc3RDb250cm9sbGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBkeW5hbWljIHBhcmFtZXRlciBjb250cm9sIHN1YnN5c3RlbTwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIj5Hc3RDb250cm9sU291cmNlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBiYXNlIGNsYXNzIGZvciBjb250cm9sIHNvdXJjZSBzb3VyY2VzPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sIj5Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgaW50ZXJwb2xhdGlvbiBjb250cm9sIHNvdXJjZTwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIj5Hc3RMRk9Db250cm9sU291cmNlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBMRk8gY29udHJvbCBzb3VyY2U8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwiPkdzdENvbnRyb2xsZXJHT2JqZWN0PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiBjb252ZW5pZW5jZSBtZXRob2RzIGZvciB1c2luZyBkeW5hbWljIHByb3BlcnRpZXM8L3NwYW4+Cis8L2R0PgorPC9kbD48L2Rpdj4KKzxwPgorICAgICAgICBsaWJnc3Rjb250cm9sbGVyLTAuMTEuc28gcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSB0byBhbmltYXRlCisgICAgICAgIGVsZW1lbnQgcHJvcGVydGllcyBvdmVyIHRpbWUuCisgICAgICA8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItZGF0YXByb3RvY29sLmh0bWwgYi9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItZGF0YXByb3RvY29sLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkwMDU0MAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1kYXRhcHJvdG9jb2wuaHRtbApAQCAtMCwwICsxLDMzIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R1N0cmVhbWVyIERhdGEgUHJvdG9jb2w8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJnc3RyZWFtZXItbGlicy5odG1sIiB0aXRsZT0iUGFydMKgSS7CoEdTdHJlYW1lciBMaWJyYXJpZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDb250cm9sbGVyR09iamVjdC5odG1sIiB0aXRsZT0iR3N0Q29udHJvbGxlckdPYmplY3QiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCIgdGl0bGU9ImdzdGRhdGFwcm90b2NvbCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItbGlicy5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj48L3RhYmxlPgorPGRpdiBjbGFzcz0iY2hhcHRlciI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1kYXRhcHJvdG9jb2wiPjwvYT5HU3RyZWFtZXIgRGF0YSBQcm90b2NvbDwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Cis8ZGl2IGNsYXNzPSJ0b2MiPjxkbD48ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwiPmdzdGRhdGFwcm90b2NvbDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgU2VyaWFsaXphdGlvbiBvZiBjYXBzLCBidWZmZXJzIGFuZCBldmVudHMuPC9zcGFuPgorPC9kdD48L2RsPjwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWhpZXJhcmNoeS5odG1sIGIvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWhpZXJhcmNoeS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NjdmOTUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItaGllcmFyY2h5Lmh0bWwKQEAgLTAsMCArMSw1MCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPk9iamVjdCBIaWVyYXJjaHk8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCIgdGl0bGU9IkdzdFN0cmVhbUNvbnNpc3RlbmN5Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iYXBpLWluZGV4LWZ1bGwuaHRtbCIgdGl0bGU9IkFQSSBJbmRleCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+wqA8L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIDAuMTEgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImFwaS1pbmRleC1mdWxsLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj48L3RhYmxlPgorPGRpdiBjbGFzcz0iY2hhcHRlciI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1oaWVyYXJjaHkiPjwvYT5PYmplY3QgSGllcmFyY2h5PC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KKzxwcmUgY2xhc3M9InNjcmVlbiI+CisgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPkdPYmplY3Q8L2E+CisgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+CisgICAgICAgICAgICA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCI+R3N0T2JqZWN0PC9hPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCI+R3N0RWxlbWVudDwvYT4KKyAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPkdzdEJhc2VTcmM8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHVzaFNyYy5odG1sIiB0aXRsZT0iR3N0UHVzaFNyYyI+R3N0UHVzaFNyYzwvYT4KKyAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+CisgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj5Hc3RCYXNlVHJhbnNmb3JtPC9hPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwiPkdzdENsb2NrPC9hPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RTeXN0ZW1DbG9jay5odG1sIj5Hc3RTeXN0ZW1DbG9jazwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sIiB0aXRsZT0iR3N0TmV0Q2xpZW50Q2xvY2siPkdzdE5ldENsaWVudENsb2NrPC9hPgorICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPkdzdENvbGxlY3RQYWRzPC9hPgorICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCIgdGl0bGU9IkdzdE5ldFRpbWVQcm92aWRlciI+R3N0TmV0VGltZVByb3ZpZGVyPC9hPgorICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+R3N0QWRhcHRlcjwvYT4KKyAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPkdzdENvbnRyb2xsZXI8L2E+CisgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj5Hc3RDb250cm9sU291cmNlPC9hPgorICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSI+R3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2U8L2E+CisgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0TEZPQ29udHJvbFNvdXJjZSI+R3N0TEZPQ29udHJvbFNvdXJjZTwvYT4KKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwgYi9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzE3Nzc0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwKQEAgLTAsMCArMSwxMDQyIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0QmFzZVBhcnNlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZ3N0cmVhbWVyLWJhc2UuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBCYXNlIGFuZCBVdGlsbGl0eSBDbGFzc2VzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLWJhc2UuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBCYXNlIGFuZCBVdGlsbGl0eSBDbGFzc2VzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLWJhc2UuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImdzdHJlYW1lci1iYXNlLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS50b3Bfb2ZfcGFnZSI+PC9hPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2gyPgorPHA+R3N0QmFzZVBhcnNlIOKAlCBCYXNlIGNsYXNzIGZvciBzdHJlYW0gcGFyc2VyczwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisjaW5jbHVkZSAmbHQ7Z3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmgmZ3Q7CisKK3N0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZSIgdGl0bGU9InN0cnVjdCBHc3RCYXNlUGFyc2UiPkdzdEJhc2VQYXJzZTwvYT47CitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2VDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RCYXNlUGFyc2VDbGFzcyI+R3N0QmFzZVBhcnNlQ2xhc3M8L2E+OworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2Utc2V0LWR1cmF0aW9uIiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2Vfc2V0X2R1cmF0aW9uICgpIj5nc3RfYmFzZV9wYXJzZV9zZXRfZHVyYXRpb248L2E+ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlIiB0aXRsZT0ic3RydWN0IEdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+ICpwYXJzZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm10PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBkdXJhdGlvbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBpbnRlcnZhbDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtYXZlcmFnZS1iaXRyYXRlIiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2Vfc2V0X2F2ZXJhZ2VfYml0cmF0ZSAoKSI+Z3N0X2Jhc2VfcGFyc2Vfc2V0X2F2ZXJhZ2VfYml0cmF0ZTwvYT4gICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZSIgdGl0bGU9InN0cnVjdCBHc3RCYXNlUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2U8L3NwYW4+PC9hPiAqcGFyc2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBiaXRyYXRlPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLXNldC1taW4tZnJhbWUtc2l6ZSIgdGl0bGU9ImdzdF9iYXNlX3BhcnNlX3NldF9taW5fZnJhbWVfc2l6ZSAoKSI+Z3N0X2Jhc2VfcGFyc2Vfc2V0X21pbl9mcmFtZV9zaXplPC9hPiAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZSIgdGl0bGU9InN0cnVjdCBHc3RCYXNlUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2U8L3NwYW4+PC9hPiAqcGFyc2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBtaW5fc2l6ZTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtcGFzc3Rocm91Z2giIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9zZXRfcGFzc3Rocm91Z2ggKCkiPmdzdF9iYXNlX3BhcnNlX3NldF9wYXNzdGhyb3VnaDwvYT4gICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2UiIHRpdGxlPSJzdHJ1Y3QgR3N0QmFzZVBhcnNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlPC9zcGFuPjwvYT4gKnBhcnNlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gcGFzc3Rocm91Z2g8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2Utc2V0LXN5bmNhYmxlIiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2Vfc2V0X3N5bmNhYmxlICgpIj5nc3RfYmFzZV9wYXJzZV9zZXRfc3luY2FibGU8L2E+ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlIiB0aXRsZT0ic3RydWN0IEdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+ICpwYXJzZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IHN5bmNhYmxlPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLXNldC1oYXMtdGltaW5nLWluZm8iIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9zZXRfaGFzX3RpbWluZ19pbmZvICgpIj5nc3RfYmFzZV9wYXJzZV9zZXRfaGFzX3RpbWluZ19pbmZvPC9hPiAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlIiB0aXRsZT0ic3RydWN0IEdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+ICpwYXJzZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGhhc190aW1pbmc8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2Utc2V0LWZyYW1lLXJhdGUiIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9zZXRfZnJhbWVfcmF0ZSAoKSI+Z3N0X2Jhc2VfcGFyc2Vfc2V0X2ZyYW1lX3JhdGU8L2E+ICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZSIgdGl0bGU9InN0cnVjdCBHc3RCYXNlUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2U8L3NwYW4+PC9hPiAqcGFyc2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBmcHNfbnVtPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gZnBzX2RlbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGxlYWRfaW48L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBsZWFkX291dDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtbGF0ZW5jeSIgdGl0bGU9ImdzdF9iYXNlX3BhcnNlX3NldF9sYXRlbmN5ICgpIj5nc3RfYmFzZV9wYXJzZV9zZXRfbGF0ZW5jeTwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlIiB0aXRsZT0ic3RydWN0IEdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+ICpwYXJzZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IG1pbl9sYXRlbmN5PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gbWF4X2xhdGVuY3k8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2UtY29udmVydC1kZWZhdWx0IiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2VfY29udmVydF9kZWZhdWx0ICgpIj5nc3RfYmFzZV9wYXJzZV9jb252ZXJ0X2RlZmF1bHQ8L2E+ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlIiB0aXRsZT0ic3RydWN0IEdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+ICpwYXJzZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gc3JjX2Zvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc3JjX3ZhbHVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBkZXN0X2Zvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKmRlc3RfdmFsdWU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2UtYWRkLWluZGV4LWVudHJ5IiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2VfYWRkX2luZGV4X2VudHJ5ICgpIj5nc3RfYmFzZV9wYXJzZV9hZGRfaW5kZXhfZW50cnk8L2E+ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlIiB0aXRsZT0ic3RydWN0IEdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+ICpwYXJzZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0czwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGtleTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGZvcmNlPC9jb2RlPjwvZW0+KTsKKyAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUZyYW1lIiB0aXRsZT0iR3N0QmFzZVBhcnNlRnJhbWUiPkdzdEJhc2VQYXJzZUZyYW1lPC9hPjsKK2VudW0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUZyYW1lRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEJhc2VQYXJzZUZyYW1lRmxhZ3MiPkdzdEJhc2VQYXJzZUZyYW1lRmxhZ3M8L2E+OworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUZyYW1lIiB0aXRsZT0iR3N0QmFzZVBhcnNlRnJhbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QmFzZVBhcnNlRnJhbWU8L3NwYW4+PC9hPiAqIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1mcmFtZS1uZXciIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9mcmFtZV9uZXcgKCkiPmdzdF9iYXNlX3BhcnNlX2ZyYW1lX25ldzwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2VGcmFtZUZsYWdzIiB0aXRsZT0iZW51bSBHc3RCYXNlUGFyc2VGcmFtZUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlRnJhbWVGbGFnczwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG92ZXJoZWFkPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLWZyYW1lLWluaXQiIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9mcmFtZV9pbml0ICgpIj5nc3RfYmFzZV9wYXJzZV9mcmFtZV9pbml0PC9hPiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlRnJhbWUiIHRpdGxlPSJHc3RCYXNlUGFyc2VGcmFtZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZUZyYW1lPC9zcGFuPjwvYT4gKmZyYW1lPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLWZyYW1lLWZyZWUiIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9mcmFtZV9mcmVlICgpIj5nc3RfYmFzZV9wYXJzZV9mcmFtZV9mcmVlPC9hPiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlRnJhbWUiIHRpdGxlPSJHc3RCYXNlUGFyc2VGcmFtZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZUZyYW1lPC9zcGFuPjwvYT4gKmZyYW1lPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+ICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1wdXNoLWZyYW1lIiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2VfcHVzaF9mcmFtZSAoKSI+Z3N0X2Jhc2VfcGFyc2VfcHVzaF9mcmFtZTwvYT4gICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZSIgdGl0bGU9InN0cnVjdCBHc3RCYXNlUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2U8L3NwYW4+PC9hPiAqcGFyc2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUZyYW1lIiB0aXRsZT0iR3N0QmFzZVBhcnNlRnJhbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2VGcmFtZTwvc3Bhbj48L2E+ICpmcmFtZTwvY29kZT48L2VtPik7CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHU1QtQkFTRS1QQVJTRS1EUkFJTklORzpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfUEFSU0VfRFJBSU5JTkcoKSI+R1NUX0JBU0VfUEFSU0VfRFJBSU5JTkc8L2E+ICAgICAgICAgICAgIChwYXJzZSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dTVC1CQVNFLVBBUlNFLUZMQUctRFJBSU5JTkc6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1BBUlNFX0ZMQUdfRFJBSU5JTkciPkdTVF9CQVNFX1BBUlNFX0ZMQUdfRFJBSU5JTkc8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHU1QtQkFTRS1QQVJTRS1GTEFHLUxPU1QtU1lOQzpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfUEFSU0VfRkxBR19MT1NUX1NZTkMiPkdTVF9CQVNFX1BBUlNFX0ZMQUdfTE9TVF9TWU5DPC9hPgorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR1NULUJBU0UtUEFSU0UtRkxPVy1EUk9QUEVEOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9QQVJTRV9GTE9XX0RST1BQRUQiPkdTVF9CQVNFX1BBUlNFX0ZMT1dfRFJPUFBFRDwvYT4KKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dTVC1CQVNFLVBBUlNFLUZMT1ctUVVFVUVEOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9QQVJTRV9GTE9XX1FVRVVFRCI+R1NUX0JBU0VfUEFSU0VfRkxPV19RVUVVRUQ8L2E+CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHU1QtQkFTRS1QQVJTRS1MT1NULVNZTkM6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1BBUlNFX0xPU1RfU1lOQygpIj5HU1RfQkFTRV9QQVJTRV9MT1NUX1NZTkM8L2E+ICAgICAgICAgICAgKHBhcnNlKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR1NULUJBU0UtUEFSU0UtU0lOSy1QQUQ6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1BBUlNFX1NJTktfUEFEKCkiPkdTVF9CQVNFX1BBUlNFX1NJTktfUEFEPC9hPiAgICAgICAgICAgICAob2JqKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR1NULUJBU0UtUEFSU0UtU1JDLVBBRDpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCgpIj5HU1RfQkFTRV9QQVJTRV9TUkNfUEFEPC9hPiAgICAgICAgICAgICAgKG9iaikKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitUaGlzIGJhc2UgY2xhc3MgaXMgZm9yIHBhcnNlciBlbGVtZW50cyB0aGF0IHByb2Nlc3MgZGF0YSBhbmQgc3BsaXRzIGl0CitpbnRvIHNlcGFyYXRlIGF1ZGlvL3ZpZGVvL3doYXRldmVyIGZyYW1lcy4KKzwvcD4KKzxwPgorSXQgcHJvdmlkZXMgZm9yOgorPC9wPgorPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5wcm92aWRlcyBvbmUgc2luayBwYWQgYW5kIG9uZSBzb3VyY2UgcGFkPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5oYW5kbGVzIHN0YXRlIGNoYW5nZXM8L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPmNhbiBvcGVyYXRlIGluIHB1bGwgbW9kZSBvciBwdXNoIG1vZGU8L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPmhhbmRsZXMgc2Vla2luZyBpbiBib3RoIG1vZGVzPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5oYW5kbGVzIGV2ZW50cyAoTkVXU0VHTUVOVC9FT1MvRkxVU0gpPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICAgICBoYW5kbGVzIHF1ZXJpZXMgKFBPU0lUSU9OL0RVUkFUSU9OL1NFRUtJTkcvRk9STUFUL0NPTlZFUlQpCisgIDwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+aGFuZGxlcyBmbHVzaGluZzwvcD48L2xpPgorPC91bD48L2Rpdj4KKzxwPgorPC9wPgorPHA+CitUaGUgcHVycG9zZSBvZiB0aGlzIGJhc2UgY2xhc3MgaXMgdG8gcHJvdmlkZSB0aGUgYmFzaWMgZnVuY3Rpb25hbGl0eSBvZgorYSBwYXJzZXIgYW5kIHNoYXJlIGEgbG90IG9mIHJhdGhlciBjb21wbGV4IGNvZGUuCis8L3A+Cis8cD4KK0Rlc2NyaXB0aW9uIG9mIHRoZSBwYXJzaW5nIG1lY2hhbmlzbToKKzwvcD4KKzxkaXYgY2xhc3M9Im9yZGVyZWRsaXN0Ij48b2wgY2xhc3M9Im9yZGVyZWRsaXN0IiB0eXBlPSIxIj4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+Cis8cCBjbGFzcz0idGl0bGUiPjxiPlNldC11cCBwaGFzZTwvYj48L3A+Cis8dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICBHc3RCYXNlUGFyc2UgY2xhc3MgY2FsbHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNldF9zaW5rX2NhcHM8L2NvZGU+PC9lbT4gdG8gaW5mb3JtIHRoZSBzdWJjbGFzcyBhYm91dAorICAgIGluY29taW5nIHNpbmtwYWQgY2Fwcy4gU3ViY2xhc3Mgc2hvdWxkIHNldCB0aGUgc3JjcGFkIGNhcHMgYWNjb3JkaW5nbHkuCisgIDwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgICAgR3N0QmFzZVBhcnNlIGNhbGxzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydDwvY29kZT48L2VtPiB0byBpbmZvcm0gc3ViY2xhc3MgdGhhdCBkYXRhIHByb2Nlc3NpbmcgaXMKKyAgICBhYm91dCB0byBzdGFydCBub3cuCisgIDwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgICAgIEF0IGxlYXN0IGF0IHRoaXMgcG9pbnQgc3ViY2xhc3MgbmVlZHMgdG8gdGVsbCB0aGUgR3N0QmFzZVBhcnNlIGNsYXNzCisgICAgIGhvdyBiaWcgZGF0YSBjaHVua3MgaXQgd2FudHMgdG8gcmVjZWl2ZSAobWluX2ZyYW1lX3NpemUpLiBJdCBjYW4gZG8KKyAgICAgdGhpcyB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtbWluLWZyYW1lLXNpemUiIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9zZXRfbWluX2ZyYW1lX3NpemUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Jhc2VfcGFyc2Vfc2V0X21pbl9mcmFtZV9zaXplKCk8L2NvZGU+PC9hPi4KKyAgPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICAgR3N0QmFzZVBhcnNlIGNsYXNzIHNldHMgdXAgYXBwcm9wcmlhdGUgZGF0YSBwYXNzaW5nIG1vZGUgKHB1bGwvcHVzaCkKKyAgICAgYW5kIHN0YXJ0cyB0byBwcm9jZXNzIHRoZSBkYXRhLgorICA8L3A+PC9saT4KKzwvdWw+Cis8L2Rpdj48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij4KKzxwIGNsYXNzPSJ0aXRsZSI+PGI+UGFyc2luZyBwaGFzZTwvYj48L3A+Cis8dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICAgIEdzdEJhc2VQYXJzZSBnYXRoZXJzIGF0IGxlYXN0IG1pbl9mcmFtZV9zaXplIGJ5dGVzIG9mIGRhdGEgZWl0aGVyCisgICAgICBieSBwdWxsaW5nIGl0IGZyb20gdXBzdHJlYW0gb3IgY29sbGVjdGluZyBidWZmZXJzIGluIGFuIGludGVybmFsCisgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPi4KKyAgICA8L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgICAgQSBidWZmZXIgb2YgKGF0IGxlYXN0KSBtaW5fZnJhbWVfc2l6ZSBieXRlcyBpcyBwYXNzZWQgdG8gc3ViY2xhc3Mgd2l0aAorICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNoZWNrX3ZhbGlkX2ZyYW1lPC9jb2RlPjwvZW0+LiBTdWJjbGFzcyBjaGVja3MgdGhlIGNvbnRlbnRzIGFuZCByZXR1cm5zIFRSVUUKKyAgICAgIGlmIHRoZSBidWZmZXIgY29udGFpbnMgYSB2YWxpZCBmcmFtZS4gSXQgYWxzbyBuZWVkcyB0byBzZXQgdGhlCisgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnJhbWVzaXplPC9jb2RlPjwvZW0+IGFjY29yZGluZyB0byB0aGUgZGV0ZWN0ZWQgZnJhbWUgc2l6ZS4gSWYgYnVmZmVyIGRpZG4ndAorICAgICAgY29udGFpbiBhIHZhbGlkIGZyYW1lLCB0aGlzIGNhbGwgbXVzdCByZXR1cm4gRkFMU0UgYW5kIG9wdGlvbmFsbHkKKyAgICAgIHNldCB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNraXBzaXplPC9jb2RlPjwvZW0+IHZhbHVlIHRvIGluZm9ybSBiYXNlIGNsYXNzIHRoYXQgaG93IG1hbnkgYnl0ZXMKKyAgICAgIGl0IG5lZWRzIHRvIHNraXAgaW4gb3JkZXIgdG8gZmluZCBhIHZhbGlkIGZyYW1lLiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnJhbWVzaXplPC9jb2RlPjwvZW0+IGNhbiBhbHdheXMKKyAgICAgIGluZGljYXRlIGEgbmV3IG1pbmltdW0gZm9yIGN1cnJlbnQgZnJhbWUgcGFyc2luZy4gIEluZGljYXRpbmcgR19NQVhVSU5UCisgICAgICBmb3IgcmVxdWVzdGVkIGFtb3VudCBtZWFucyBzdWJjbGFzcyBzaW1wbHkgbmVlZHMgYmVzdCBhdmFpbGFibGUKKyAgICAgIHN1YnNlcXVlbnQgZGF0YS4gIEluIHB1c2ggbW9kZSB0aGlzIGFtb3VudHMgdG8gYW4gYWRkaXRpb25hbCBpbnB1dCBidWZmZXIKKyAgICAgICh0aHVzIG1pbmltYWwgYWRkaXRpb25hbCBsYXRlbmN5KSwgaW4gcHVsbCBtb2RlIHRoaXMgYW1vdW50cyB0byBzb21lCisgICAgICBhcmJpdHJhcnkgcmVhc29uYWJsZSBidWZmZXIgc2l6ZSBpbmNyZWFzZS4gIFRoZSBwYXNzZWQgYnVmZmVyCisgICAgICBpcyByZWFkLW9ubHkuICBOb3RlIHRoYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNoZWNrX3ZhbGlkX2ZyYW1lPC9jb2RlPjwvZW0+IG1pZ2h0IHJlY2VpdmUgYW55IHNtYWxsCisgICAgICBhbW91bnQgb2YgaW5wdXQgZGF0YSB3aGVuIGxlZnRvdmVyIGRhdGEgaXMgYmVpbmcgZHJhaW5lZCAoZS5nLiBhdCBFT1MpLgorICAgIDwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgICAgICBBZnRlciB2YWxpZCBmcmFtZSBpcyBmb3VuZCwgaXQgd2lsbCBiZSBwYXNzZWQgYWdhaW4gdG8gc3ViY2xhc3Mgd2l0aAorICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhcnNlX2ZyYW1lPC9jb2RlPjwvZW0+IGNhbGwuIE5vdyBzdWJjbGFzcyBpcyByZXNwb25zaWJsZSBmb3IgcGFyc2luZyB0aGUKKyAgICAgIGZyYW1lIGNvbnRlbnRzIGFuZCBzZXR0aW5nIHRoZSBjYXBzLCBhbmQgYnVmZmVyIG1ldGFkYXRhIChlLmcuCisgICAgICBidWZmZXIgdGltZXN0YW1wIGFuZCBkdXJhdGlvbiwgb3Iga2V5ZnJhbWUgaWYgYXBwbGljYWJsZSkuCisgICAgICAoYWx0aG91Z2ggdGhlIGxhdHRlciBjYW4gYWxzbyBiZSBkb25lIGJ5IEdzdEJhc2VQYXJzZSBpZiBpdCBpcworICAgICAgYXBwcm9wcmlhdGVseSBjb25maWd1cmVkLCBzZWUgYmVsb3cpLiAgRnJhbWUgaXMgcHJvdmlkZWQgd2l0aAorICAgICAgdGltZXN0YW1wIGRlcml2ZWQgZnJvbSB1cHN0cmVhbSAoYXMgbXVjaCBhcyBnZW5lcmFsbHkgcG9zc2libGUpLAorICAgICAgZHVyYXRpb24gb2J0YWluZWQgZnJvbSBjb25maWd1cmF0aW9uIChzZWUgYmVsb3cpLCBhbmQgb2Zmc2V0CisgICAgICBpZiBtZWFuaW5nZnVsIChpbiBwdWxsIG1vZGUpLgorICAgIDwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgICAgICBGaW5hbGx5IHRoZSBidWZmZXIgY2FuIGJlIHB1c2hlZCBkb3duc3RyZWFtIGFuZCB0aGUgcGFyc2luZyBsb29wIHN0YXJ0cworICAgICAgb3ZlciBhZ2Fpbi4gIEp1c3QgcHJpb3IgdG8gYWN0dWFsbHkgcHVzaGluZyB0aGUgYnVmZmVyIGluIHF1ZXN0aW9uLAorICAgICAgaXQgaXMgcGFzc2VkIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcmVfcHVzaF9idWZmZXI8L2NvZGU+PC9lbT4gd2hpY2ggZ2l2ZXMgc3ViY2xhc3MgeWV0IG9uZQorICAgICAgbGFzdCBjaGFuY2UgdG8gZXhhbWluZSBidWZmZXIgbWV0YWRhdGEsIG9yIHRvIHNlbmQgc29tZSBjdXN0b20gKHRhZykKKyAgICAgIGV2ZW50cywgb3IgdG8gcGVyZm9ybSBjdXN0b20gKHNlZ21lbnQpIGZpbHRlcmluZy4KKyAgICA8L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgICAgRHVyaW5nIHRoZSBwYXJzaW5nIHByb2Nlc3MgR3N0QmFzZVBhcnNlQ2xhc3Mgd2lsbCBoYW5kbGUgYm90aCBzcmNwYWQKKyAgICAgIGFuZCBzaW5rcGFkIGV2ZW50cy4gVGhleSB3aWxsIGJlIHBhc3NlZCB0byBzdWJjbGFzcyBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT4gb3IKKyAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmNfZXZlbnQ8L2NvZGU+PC9lbT4gY2FsbGJhY2tzIGhhdmUgYmVlbiBwcm92aWRlZC4KKyAgICA8L3A+PC9saT4KKzwvdWw+Cis8L2Rpdj48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij4KKzxwIGNsYXNzPSJ0aXRsZSI+PGI+U2h1dGRvd24gcGhhc2U8L2I+PC9wPgorPHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgIEdzdEJhc2VQYXJzZSBjbGFzcyBjYWxscyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RvcDwvY29kZT48L2VtPiB0byBpbmZvcm0gdGhlIHN1YmNsYXNzIHRoYXQgZGF0YQorICAgIHBhcnNpbmcgd2lsbCBiZSBzdG9wcGVkLgorICA8L3A+PC9saT48L3VsPgorPC9kaXY+PC9saT4KKzwvb2w+PC9kaXY+Cis8cD4KKzwvcD4KKzxwPgorU3ViY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyBwYWQgdGVtcGxhdGUgY2FwcyBmb3IKK3NvdXJjZSBhbmQgc2luayBwYWRzLiBUaGUgcGFkcyBuZWVkIHRvIGJlIG5hbWVkICJzaW5rIiBhbmQgInNyYyIuIEl0IGFsc28KK25lZWRzIHRvIHNldCB0aGUgZml4ZWQgY2FwcyBvbiBzcmNwYWQsIHdoZW4gdGhlIGZvcm1hdCBpcyBlbnN1cmVkIChlLmcuCit3aGVuIGJhc2UgY2xhc3MgY2FsbHMgc3ViY2xhc3MnIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXRfc2lua19jYXBzPC9jb2RlPjwvZW0+IGZ1bmN0aW9uKS4KKzwvcD4KKzxwPgorVGhpcyBiYXNlIGNsYXNzIHVzZXMgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dTVC1GT1JNQVQtREVGQVVMVDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0ZPUk1BVF9ERUZBVUxUPC9zcGFuPjwvYT4gYXMgYSBtZWFuaW5nIG9mIGZyYW1lcy4gU28sCitzdWJjbGFzcyBjb252ZXJzaW9uIHJvdXRpbmUgbmVlZHMgdG8ga25vdyB0aGF0IGNvbnZlcnNpb24gZnJvbQorPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dTVC1GT1JNQVQtVElNRTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0ZPUk1BVF9USU1FPC9zcGFuPjwvYT4gdG8gPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dTVC1GT1JNQVQtREVGQVVMVDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0ZPUk1BVF9ERUZBVUxUPC9zcGFuPjwvYT4gbXVzdCByZXR1cm4gdGhlCitmcmFtZSBudW1iZXIgdGhhdCBjYW4gYmUgZm91bmQgZnJvbSB0aGUgZ2l2ZW4gYnl0ZSBwb3NpdGlvbi4KKzwvcD4KKzxwPgorR3N0QmFzZVBhcnNlIHVzZXMgc3ViY2xhc3NlcyBjb252ZXJzaW9uIG1ldGhvZHMgYWxzbyBmb3Igc2Vla2luZyAob3IKK290aGVyd2lzZSB1c2VzIGl0cyBvd24gZGVmYXVsdCBvbmUsIHNlZSBhbHNvIGJlbG93KS4KKzwvcD4KKzxwPgorU3ViY2xhc3MgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0PC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RvcDwvY29kZT48L2VtPiBmdW5jdGlvbnMgd2lsbCBiZSBjYWxsZWQgdG8gaW5mb3JtIHRoZSBiZWdpbm5pbmcKK2FuZCBlbmQgb2YgZGF0YSBwcm9jZXNzaW5nLgorPC9wPgorPHA+CitUaGluZ3MgdGhhdCBzdWJjbGFzcyBuZWVkIHRvIHRha2UgY2FyZSBvZjoKKzwvcD4KKzxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+UHJvdmlkZSBwYWQgdGVtcGxhdGVzPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICAgRml4YXRlIHRoZSBzb3VyY2UgcGFkIGNhcHMgd2hlbiBhcHByb3ByaWF0ZQorICA8L3A+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgorICAgICBJbmZvcm0gYmFzZSBjbGFzcyBob3cgYmlnIGRhdGEgY2h1bmtzIHNob3VsZCBiZSByZXRyaWV2ZWQuIFRoaXMgaXMKKyAgICAgZG9uZSB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtbWluLWZyYW1lLXNpemUiIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9zZXRfbWluX2ZyYW1lX3NpemUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Jhc2VfcGFyc2Vfc2V0X21pbl9mcmFtZV9zaXplKCk8L2NvZGU+PC9hPiBmdW5jdGlvbi4KKyAgPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICAgRXhhbWluZSBkYXRhIGNodW5rcyBwYXNzZWQgdG8gc3ViY2xhc3Mgd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2hlY2tfdmFsaWRfZnJhbWU8L2NvZGU+PC9lbT4KKyAgICAgYW5kIHRlbGwgaWYgdGhleSBjb250YWluIGEgdmFsaWQgZnJhbWUKKyAgPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICAgU2V0IHRoZSBjYXBzIGFuZCB0aW1lc3RhbXAgdG8gZnJhbWUgdGhhdCBpcyBwYXNzZWQgdG8gc3ViY2xhc3Mgd2l0aAorICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyc2VfZnJhbWU8L2NvZGU+PC9lbT4gZnVuY3Rpb24uCisgIDwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+UHJvdmlkZSBjb252ZXJzaW9uIGZ1bmN0aW9uczwvcD48L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgICAgIFVwZGF0ZSB0aGUgZHVyYXRpb24gaW5mb3JtYXRpb24gd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2Utc2V0LWR1cmF0aW9uIiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2Vfc2V0X2R1cmF0aW9uICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iYXNlX3BhcnNlX3NldF9kdXJhdGlvbigpPC9jb2RlPjwvYT4KKyAgPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICAgT3B0aW9uYWxseSBwYXNzdGhyb3VnaCB1c2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2Utc2V0LXBhc3N0aHJvdWdoIiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2Vfc2V0X3Bhc3N0aHJvdWdoICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iYXNlX3BhcnNlX3NldF9wYXNzdGhyb3VnaCgpPC9jb2RlPjwvYT4KKyAgPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICAgQ29uZmlndXJlIHZhcmlvdXMgYmFzZXBhcnNlIHBhcmFtZXRlcnMgdXNpbmcKKyAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLXNldC1hdmVyYWdlLWJpdHJhdGUiIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9zZXRfYXZlcmFnZV9iaXRyYXRlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iYXNlX3BhcnNlX3NldF9hdmVyYWdlX2JpdHJhdGUoKTwvY29kZT48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2Utc2V0LXN5bmNhYmxlIiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2Vfc2V0X3N5bmNhYmxlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iYXNlX3BhcnNlX3NldF9zeW5jYWJsZSgpPC9jb2RlPjwvYT4KKyAgICAgYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtZnJhbWUtcmF0ZSIgdGl0bGU9ImdzdF9iYXNlX3BhcnNlX3NldF9mcmFtZV9yYXRlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iYXNlX3BhcnNlX3NldF9mcmFtZV9yYXRlKCk8L2NvZGU+PC9hPi4KKyAgPC9wPjwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KKyAgICAgSW4gcGFydGljdWxhciwgaWYgc3ViY2xhc3MgaXMgdW5hYmxlIHRvIGRldGVybWluZSBhIGR1cmF0aW9uLCBidXQKKyAgICAgcGFyc2luZyAob3Igc3BlY3MpIHlpZWxkcyBhIGZyYW1lcyBwZXIgc2Vjb25kcyByYXRlLCB0aGVuIHRoaXMgY2FuIGJlCisgICAgIHByb3ZpZGVkIHRvIEdzdEJhc2VQYXJzZSB0byBlbmFibGUgaXQgdG8gY2F0ZXIgZm9yCisgICAgIGJ1ZmZlciB0aW1lIG1ldGFkYXRhICh3aGljaCB3aWxsIGJlIHRha2VuIGZyb20gdXBzdHJlYW0gYXMgbXVjaCBhcworICAgICBwb3NzaWJsZSkuIEludGVybmFsbHkga2VlcGluZyB0cmFjayBvZiBmcmFtZSBkdXJhdGlvbnMgYW5kIHJlc3BlY3RpdmUKKyAgICAgc2l6ZXMgdGhhdCBoYXZlIGJlZW4gcHVzaGVkIHByb3ZpZGVzIEdzdEJhc2VQYXJzZSB3aXRoIGFuIGVzdGltYXRlZAorICAgICBiaXRyYXRlLiBBIGRlZmF1bHQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnZlcnQ8L2NvZGU+PC9lbT4gKHVzZWQgaWYgbm90IG92ZXJyaWRlbikgd2lsbCB0aGVuIHVzZSB0aGVzZQorICAgICByYXRlcyB0byBwZXJmb3JtIG9idmlvdXMgY29udmVyc2lvbnMuICBUaGVzZSByYXRlcyBhcmUgYWxzbyB1c2VkIHRvCisgICAgIHVwZGF0ZSAoZXN0aW1hdGVkKSBkdXJhdGlvbiBhdCByZWd1bGFyIGZyYW1lIGludGVydmFscy4KKyAgPC9wPjwvbGk+Cis8L3VsPjwvZGl2PgorPHA+Cis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0QmFzZVBhcnNlIj48L2E+PGgzPnN0cnVjdCBHc3RCYXNlUGFyc2U8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RCYXNlUGFyc2UgeworICBHc3RFbGVtZW50ICAgICBlbGVtZW50OworfTsKKzwvcHJlPgorPHA+CitUaGUgb3BhcXVlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2UiIHRpdGxlPSJzdHJ1Y3QgR3N0QmFzZVBhcnNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlPC9zcGFuPjwvYT4gZGF0YSBzdHJ1Y3R1cmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlUGFyc2UuZWxlbWVudCI+PC9hPmVsZW1lbnQ8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwYXJlbnQgZWxlbWVudC48L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0QmFzZVBhcnNlQ2xhc3MiPjwvYT48aDM+c3RydWN0IEdzdEJhc2VQYXJzZUNsYXNzPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0QmFzZVBhcnNlQ2xhc3MgeworICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworCisgIC8qIHZpcnR1YWwgbWV0aG9kcyBmb3Igc3ViY2xhc3NlcyAqLworCisgIGdib29sZWFuICAgICAgKCpzdGFydCkgICAgICAgICAgICAgIChHc3RCYXNlUGFyc2UgKiBwYXJzZSk7CisKKyAgZ2Jvb2xlYW4gICAgICAoKnN0b3ApICAgICAgICAgICAgICAgKEdzdEJhc2VQYXJzZSAqIHBhcnNlKTsKKworICBnYm9vbGVhbiAgICAgICgqc2V0X3NpbmtfY2FwcykgICAgICAoR3N0QmFzZVBhcnNlICogcGFyc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzICAgICAgKiBjYXBzKTsKKworICBnYm9vbGVhbiAgICAgICgqY2hlY2tfdmFsaWRfZnJhbWUpICAoR3N0QmFzZVBhcnNlICAgICAgKiBwYXJzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEJhc2VQYXJzZUZyYW1lICogZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAqIGZyYW1lc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgICAgICogc2tpcHNpemUpOworCisgIEdzdEZsb3dSZXR1cm4gKCpwYXJzZV9mcmFtZSkgICAgICAgIChHc3RCYXNlUGFyc2UgICAgICAqIHBhcnNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QmFzZVBhcnNlRnJhbWUgKiBmcmFtZSk7CisKKyAgR3N0Rmxvd1JldHVybiAoKnByZV9wdXNoX2ZyYW1lKSAgICAgKEdzdEJhc2VQYXJzZSAgICAgICogcGFyc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lKTsKKworICBnYm9vbGVhbiAgICAgICgqY29udmVydCkgICAgICAgICAgICAoR3N0QmFzZVBhcnNlICogcGFyc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RGb3JtYXQgICAgICBzcmNfZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0ICAgICAgICAgc3JjX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Rm9ybWF0ICAgICAgZGVzdF9mb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50NjQgICAgICAgKiBkZXN0X3ZhbHVlKTsKKworICBnYm9vbGVhbiAgICAgICgqZXZlbnQpICAgICAgICAgICAgICAoR3N0QmFzZVBhcnNlICogcGFyc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RFdmVudCAgICAgKiBldmVudCk7CisKKyAgZ2Jvb2xlYW4gICAgICAoKnNyY19ldmVudCkgICAgICAgICAgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0RXZlbnQgICAgICogZXZlbnQpOworfTsKKzwvcHJlPgorPHA+CitTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSBhbnkgb2YgdGhlIGF2YWlsYWJsZSB2aXJ0dWFsIG1ldGhvZHMgb3Igbm90LCBhcworbmVlZGVkLiBBdCBtaW5pbXVtIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jaGVja192YWxpZF9mcmFtZTwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhcnNlX2ZyYW1lPC9jb2RlPjwvZW0+IG5lZWRzIHRvIGJlCitvdmVycmlkZGVuLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnRDbGFzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRDbGFzczwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlUGFyc2VDbGFzcy5wYXJlbnQtY2xhc3MiPjwvYT5wYXJlbnRfY2xhc3M8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwYXJlbnQgY2xhc3M8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVBhcnNlQ2xhc3Muc3RhcnQiPjwvYT5zdGFydDwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+T3B0aW9uYWwuCitDYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBzdGFydHMgcHJvY2Vzc2luZy4KK0FsbG93cyBvcGVuaW5nIGV4dGVybmFsIHJlc291cmNlcy48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVBhcnNlQ2xhc3Muc3RvcCI+PC9hPnN0b3A8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPk9wdGlvbmFsLgorQ2FsbGVkIHdoZW4gdGhlIGVsZW1lbnQgc3RvcHMgcHJvY2Vzc2luZy4KK0FsbG93cyBjbG9zaW5nIGV4dGVybmFsIHJlc291cmNlcy48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVBhcnNlQ2xhc3Muc2V0LXNpbmstY2FwcyI+PC9hPnNldF9zaW5rX2NhcHM8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPmFsbG93cyB0aGUgc3ViY2xhc3MgdG8gYmUgbm90aWZpZWQgb2YgdGhlIGFjdHVhbCBjYXBzIHNldC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVBhcnNlQ2xhc3MuY2hlY2stdmFsaWQtZnJhbWUiPjwvYT5jaGVja192YWxpZF9mcmFtZTwvY29kZT48L2VtPsKgKCk8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Q2hlY2sgaWYgdGhlIGdpdmVuIHBpZWNlIG9mIGRhdGEgY29udGFpbnMgYSB2YWxpZAorZnJhbWUuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VQYXJzZUNsYXNzLnBhcnNlLWZyYW1lIj48L2E+cGFyc2VfZnJhbWU8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPlBhcnNlIHRoZSBhbHJlYWR5IGNoZWNrZWQgZnJhbWUuIFN1YmNsYXNzIG5lZWQgdG8KK3NldCB0aGUgYnVmZmVyIHRpbWVzdGFtcCwgZHVyYXRpb24sIGNhcHMgYW5kIHBvc3NpYmx5CitvdGhlciBuZWNlc3NhcnkgbWV0YWRhdGEuIFRoaXMgaXMgY2FsbGVkIHdpdGggc3JjcGFkJ3MKK1NUUkVBTV9MT0NLIGhlbGQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VQYXJzZUNsYXNzLnByZS1wdXNoLWZyYW1lIj48L2E+cHJlX3B1c2hfZnJhbWU8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPk9wdGlvbmFsLgorQ2FsbGVkIGp1c3QgcHJpb3IgdG8gcHVzaGluZyBhIGZyYW1lIChhZnRlciBhbnkgcGVuZGluZworZXZlbnRzIGhhdmUgYmVlbiBzZW50KSB0byBnaXZlIHN1YmNsYXNzIGEgY2hhbmNlIHRvIHBlcmZvcm0KK2FkZGl0aW9uYWwgYWN0aW9ucyBhdCB0aGlzIHRpbWUgKGUuZy4gdGFnIHNlbmRpbmcpIG9yIHRvCitkZWNpZGUgd2hldGhlciB0aGlzIGJ1ZmZlciBzaG91bGQgYmUgZHJvcHBlZCBvciBub3QKKyhlLmcuIGN1c3RvbSBzZWdtZW50IGNsaXBwaW5nKS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVBhcnNlQ2xhc3MuY29udmVydCI+PC9hPmNvbnZlcnQ8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPk9wdGlvbmFsLgorQ29udmVydCBiZXR3ZWVuIGZvcm1hdHMuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VQYXJzZUNsYXNzLmV2ZW50Ij48L2E+ZXZlbnQ8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPk9wdGlvbmFsLgorRXZlbnQgaGFuZGxlciBvbiB0aGUgc2luayBwYWQuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybgorVFJVRSBpZiB0aGUgZXZlbnQgd2FzIGhhbmRsZWQgYW5kIGNhbiBiZSBkcm9wcGVkLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlUGFyc2VDbGFzcy5zcmMtZXZlbnQiPjwvYT5zcmNfZXZlbnQ8L2NvZGU+PC9lbT7CoCgpPC9zcGFuPjwvcD48L3RkPgorPHRkPk9wdGlvbmFsLgorRXZlbnQgaGFuZGxlciBvbiB0aGUgc291cmNlIHBhZC4gU2hvdWxkIHJldHVybiBUUlVFCitpZiB0aGUgZXZlbnQgd2FzIGhhbmRsZWQgYW5kIGNhbiBiZSBkcm9wcGVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iYXNlLXBhcnNlLXNldC1kdXJhdGlvbiI+PC9hPjxoMz5nc3RfYmFzZV9wYXJzZV9zZXRfZHVyYXRpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X2R1cmF0aW9uICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlIiB0aXRsZT0ic3RydWN0IEdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+ICpwYXJzZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm10PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBkdXJhdGlvbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBpbnRlcnZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgdGhlIGR1cmF0aW9uIG9mIHRoZSBjdXJyZW50bHkgcGxheWluZyBtZWRpYS4gU3ViY2xhc3MgY2FuIHVzZSB0aGlzCit3aGVuIGl0IGlzIGFibGUgdG8gZGV0ZXJtaW5lIGR1cmF0aW9uIGFuZC9vciBub3RpY2VzIGEgY2hhbmdlIGluIHRoZSBtZWRpYQorZHVyYXRpb24uICBBbHRlcm5hdGl2ZWx5LCBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW50ZXJ2YWw8L2NvZGU+PC9lbT4gaXMgbm9uLXplcm8gKGRlZmF1bHQpLCB0aGVuIHN0cmVhbQorZHVyYXRpb24gaXMgZGV0ZXJtaW5lZCBiYXNlZCBvbiBlc3RpbWF0ZWQgYml0cmF0ZSwgYW5kIHVwZGF0ZWQgZXZlcnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmludGVydmFsPC9jb2RlPjwvZW0+CitmcmFtZXMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyc2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlIiB0aXRsZT0ic3RydWN0IEdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm10PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZHVyYXRpb248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZHVyYXRpb24gdmFsdWUuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbnRlcnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5ob3cgb2Z0ZW4gdG8gdXBkYXRlIHRoZSBkdXJhdGlvbiBlc3RpbWF0ZSBiYXNlZCBvbiBiaXRyYXRlLCBvciAwLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzM8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iYXNlLXBhcnNlLXNldC1hdmVyYWdlLWJpdHJhdGUiPjwvYT48aDM+Z3N0X2Jhc2VfcGFyc2Vfc2V0X2F2ZXJhZ2VfYml0cmF0ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYmFzZV9wYXJzZV9zZXRfYXZlcmFnZV9iaXRyYXRlICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2UiIHRpdGxlPSJzdHJ1Y3QgR3N0QmFzZVBhcnNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlPC9zcGFuPjwvYT4gKnBhcnNlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gYml0cmF0ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK09wdGlvbmFsbHkgc2V0cyB0aGUgYXZlcmFnZSBiaXRyYXRlIGRldGVjdGVkIGluIG1lZGlhIChpZiBub24temVybyksCitlLmcuIGJhc2VkIG9uIG1ldGFkYXRhLCBhcyBpdCB3aWxsIGJlIHBvc3RlZCB0byB0aGUgYXBwbGljYXRpb24uCis8L3A+Cis8cD4KK0J5IGRlZmF1bHQsIGFubm91bmNlZCBhdmVyYWdlIGJpdHJhdGUgaXMgZXN0aW1hdGVkLiBUaGUgYXZlcmFnZSBiaXRyYXRlCitpcyB1c2VkIHRvIGVzdGltYXRlIHRoZSB0b3RhbCBkdXJhdGlvbiBvZiB0aGUgc3RyZWFtIGFuZCB0byBlc3RpbWF0ZQorYSBzZWVrIHBvc2l0aW9uLCBpZiB0aGVyZSdzIG5vIGluZGV4IGFuZCB0aGUgZm9ybWF0IGlzIHN5bmNhYmxlCisoc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtc3luY2FibGUiIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9zZXRfc3luY2FibGUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Jhc2VfcGFyc2Vfc2V0X3N5bmNhYmxlKCk8L2NvZGU+PC9hPikuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyc2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlIiB0aXRsZT0ic3RydWN0IEdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Yml0cmF0ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hdmVyYWdlIGJpdHJhdGUgaW4gYml0cy9zZWNvbmQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYmFzZS1wYXJzZS1zZXQtbWluLWZyYW1lLXNpemUiPjwvYT48aDM+Z3N0X2Jhc2VfcGFyc2Vfc2V0X21pbl9mcmFtZV9zaXplICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9iYXNlX3BhcnNlX3NldF9taW5fZnJhbWVfc2l6ZSAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZSIgdGl0bGU9InN0cnVjdCBHc3RCYXNlUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2U8L3NwYW4+PC9hPiAqcGFyc2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBtaW5fc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1N1YmNsYXNzIGNhbiB1c2UgdGhpcyBmdW5jdGlvbiB0byB0ZWxsIHRoZSBiYXNlIGNsYXNzIHRoYXQgaXQgbmVlZHMgdG8KK2dpdmUgYXQgbGVhc3QgPHNwYW4gY2xhc3M9InR5cGUiPm1pbl9zaXplPC9zcGFuPiBidWZmZXJzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhcnNlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZSIgdGl0bGU9InN0cnVjdCBHc3RCYXNlUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2U8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1pbl9zaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPk1pbmltdW0gc2l6ZSBvZiB0aGUgZGF0YSB0aGF0IHRoaXMgYmFzZSBjbGFzcyBzaG91bGQgZ2l2ZSB0bworc3ViY2xhc3MuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJhc2UtcGFyc2Utc2V0LXBhc3N0aHJvdWdoIj48L2E+PGgzPmdzdF9iYXNlX3BhcnNlX3NldF9wYXNzdGhyb3VnaCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYmFzZV9wYXJzZV9zZXRfcGFzc3Rocm91Z2ggICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2UiIHRpdGxlPSJzdHJ1Y3QgR3N0QmFzZVBhcnNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlPC9zcGFuPjwvYT4gKnBhcnNlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gcGFzc3Rocm91Z2g8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXQgaWYgdGhlIG5hdHVyZSBvZiB0aGUgZm9ybWF0IG9yIGNvbmZpZ3VyYXRpb24gZG9lcyBub3QgYWxsb3cgKG11Y2gpCitwYXJzaW5nLCBhbmQgdGhlIHBhcnNlciBzaG91bGQgb3BlcmF0ZSBpbiBwYXNzdGhyb3VnaCBtb2RlICh3aGljaCBvbmx5CithcHBsaWVzIHdoZW4gb3BlcmF0aW5nIGluIHB1c2ggbW9kZSkuIFRoYXQgaXMsIGluY29taW5nIGJ1ZmZlcnMgYXJlCitwdXNoZWQgdGhyb3VnaCB1bm1vZGlmaWVkLCBpLmUuIG5vIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jaGVja192YWxpZF9mcmFtZTwvY29kZT48L2VtPiBvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyc2VfZnJhbWU8L2NvZGU+PC9lbT4KK2NhbGxiYWNrcyB3aWxsIGJlIGludm9rZWQsIGJ1dCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJlX3B1c2hfYnVmZmVyPC9jb2RlPjwvZW0+IHdpbGwgc3RpbGwgYmUgaW52b2tlZCwKK3NvIHN1YmNsYXNzIGNhbiBwZXJmb3JtIGFzIG11Y2ggb3IgYXMgbGl0dGxlIGlzIGFwcHJvcHJpYXRlIGZvcgorcGFzc3Rocm91Z2ggc2VtYW50aWNzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcmVfcHVzaF9idWZmZXI8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyc2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlIiB0aXRsZT0ic3RydWN0IEdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhc3N0aHJvdWdoPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgcGFyc2VyIHNob3VsZCBydW4gaW4gcGFzc3Rocm91Z2ggbW9kZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzM8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iYXNlLXBhcnNlLXNldC1zeW5jYWJsZSI+PC9hPjxoMz5nc3RfYmFzZV9wYXJzZV9zZXRfc3luY2FibGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X3N5bmNhYmxlICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlIiB0aXRsZT0ic3RydWN0IEdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+ICpwYXJzZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IHN5bmNhYmxlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0IGlmIGZyYW1lIHN0YXJ0cyBjYW4gYmUgaWRlbnRpZmllZC4gVGhpcyBpcyBzZXQgYnkgZGVmYXVsdCBhbmQKK2RldGVybWluZXMgd2hldGhlciBzZWVraW5nIGJhc2VkIG9uIGJpdHJhdGUgYXZlcmFnZXMKK2lzIHBvc3NpYmxlIGZvciBhIGZvcm1hdC9zdHJlYW0uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyc2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlIiB0aXRsZT0ic3RydWN0IEdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN5bmNhYmxlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnNldCBpZiBmcmFtZSBzdGFydHMgY2FuIGJlIGlkZW50aWZpZWQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYmFzZS1wYXJzZS1zZXQtaGFzLXRpbWluZy1pbmZvIj48L2E+PGgzPmdzdF9iYXNlX3BhcnNlX3NldF9oYXNfdGltaW5nX2luZm8gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X2hhc190aW1pbmdfaW5mbyAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlIiB0aXRsZT0ic3RydWN0IEdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+ICpwYXJzZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGhhc190aW1pbmc8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXQgaWYgZnJhbWVzIGNhcnJ5IHRpbWluZyBpbmZvcm1hdGlvbiB3aGljaCB0aGUgc3ViY2xhc3MgY2FuIChnZW5lcmFsbHkpCitwYXJzZSBhbmQgcHJvdmlkZS4gIEluIHBhcnRpY3VsYXIsIGludHJpbnNpYyAocmF0aGVyIHRoYW4gZXN0aW1hdGVkKSB0aW1lCitjYW4gYmUgb2J0YWluZWQgZm9sbG93aW5nIGEgc2Vlay4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXJzZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2UiIHRpdGxlPSJzdHJ1Y3QgR3N0QmFzZVBhcnNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aGFzX3RpbWluZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD53aGV0aGVyIGZyYW1lcyBjYXJyeSB0aW1pbmcgaW5mb3JtYXRpb248L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYmFzZS1wYXJzZS1zZXQtZnJhbWUtcmF0ZSI+PC9hPjxoMz5nc3RfYmFzZV9wYXJzZV9zZXRfZnJhbWVfcmF0ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYmFzZV9wYXJzZV9zZXRfZnJhbWVfcmF0ZSAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2UiIHRpdGxlPSJzdHJ1Y3QgR3N0QmFzZVBhcnNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlPC9zcGFuPjwvYT4gKnBhcnNlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gZnBzX251bTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGZwc19kZW48L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBsZWFkX2luPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbGVhZF9vdXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitJZiBmcmFtZXMgcGVyIHNlY29uZCBpcyBjb25maWd1cmVkLCBwYXJzZXIgY2FuIHRha2UgY2FyZSBvZiBidWZmZXIgZHVyYXRpb24KK2FuZCB0aW1lc3RhbXBpbmcuICBXaGVuIHBlcmZvcm1pbmcgc2VnbWVudCBjbGlwcGluZywgb3Igc2Vla2luZyB0byBhIHNwZWNpZmljCitsb2NhdGlvbiwgYSBjb3JyZXNwb25kaW5nIGRlY29kZXIgbWlnaHQgbmVlZCBhbiBpbml0aWFsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sZWFkX2luPC9jb2RlPjwvZW0+IGFuZCBhCitmb2xsb3dpbmcgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxlYWRfb3V0PC9jb2RlPjwvZW0+IG51bWJlciBvZiBmcmFtZXMgdG8gZW5zdXJlIHRoZSBkZXNpcmVkIHNlZ21lbnQgaXMKK2VudGlyZWx5IGZpbGxlZCB1cG9uIGRlY29kaW5nLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhcnNlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlIiB0aXRsZT0ic3RydWN0IEdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+IHRvIHNldDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnBzX251bTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5mcmFtZXMgcGVyIHNlY29uZCAobnVtZXJhdG9yKS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZwc19kZW48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZnJhbWVzIHBlciBzZWNvbmQgKGRlbm9taW5hdG9yKS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxlYWRfaW48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZnJhbWVzIG5lZWRlZCBiZWZvcmUgYSBzZWdtZW50IGZvciBzdWJzZXF1ZW50IGRlY29kZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGVhZF9vdXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZnJhbWVzIG5lZWRlZCBhZnRlciBhIHNlZ21lbnQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYmFzZS1wYXJzZS1zZXQtbGF0ZW5jeSI+PC9hPjxoMz5nc3RfYmFzZV9wYXJzZV9zZXRfbGF0ZW5jeSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYmFzZV9wYXJzZV9zZXRfbGF0ZW5jeSAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2UiIHRpdGxlPSJzdHJ1Y3QgR3N0QmFzZVBhcnNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlPC9zcGFuPjwvYT4gKnBhcnNlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gbWluX2xhdGVuY3k8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiBtYXhfbGF0ZW5jeTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gKHdoaWNoIG1heSBsaWtlbHkgYmUgZXF1YWwpIGxhdGVuY3kgaW50cm9kdWNlZAorYnkgdGhlIHBhcnNpbmcgcHJvY2Vzcy4gIElmIHRoZXJlIGlzIHN1Y2ggYSBsYXRlbmN5LCB3aGljaCBkZXBlbmRzIG9uIHRoZQorcGFydGljdWxhciBwYXJzaW5nIG9mIHRoZSBmb3JtYXQsIGl0IHR5cGljYWxseSBjb3JyZXNwb25kcyB0byAxIGZyYW1lIGR1cmF0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhcnNlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZSIgdGl0bGU9InN0cnVjdCBHc3RCYXNlUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2U8L3NwYW4+PC9hPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5taW5fbGF0ZW5jeTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5taW5pbXVtIHBhcnNlIGxhdGVuY3k8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1heF9sYXRlbmN5PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm1heGltdW0gcGFyc2UgbGF0ZW5jeTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iYXNlLXBhcnNlLWNvbnZlcnQtZGVmYXVsdCI+PC9hPjxoMz5nc3RfYmFzZV9wYXJzZV9jb252ZXJ0X2RlZmF1bHQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2Jhc2VfcGFyc2VfY29udmVydF9kZWZhdWx0ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlIiB0aXRsZT0ic3RydWN0IEdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+ICpwYXJzZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gc3JjX2Zvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc3JjX3ZhbHVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBkZXN0X2Zvcm1hdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKmRlc3RfdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mICJjb252ZXJ0IiB2bWV0aG9kIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2UiIHRpdGxlPSJzdHJ1Y3QgR3N0QmFzZVBhcnNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlPC9zcGFuPjwvYT4gY2xhc3MuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyc2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlIiB0aXRsZT0ic3RydWN0IEdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjX2Zvcm1hdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBkZXNjcmliaW5nIHRoZSBzb3VyY2UgZm9ybWF0LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjX3ZhbHVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlNvdXJjZSB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0X2Zvcm1hdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBkZWZpbmluZyB0aGUgY29udmVydGVkIGZvcm1hdC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3RfdmFsdWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UG9pbnRlciB3aGVyZSB0aGUgY29udmVyc2lvbiByZXN1bHQgd2lsbCBiZSBwdXQuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VFJVRSBpZiBjb252ZXJzaW9uIHdhcyBzdWNjZXNzZnVsLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzM8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iYXNlLXBhcnNlLWFkZC1pbmRleC1lbnRyeSI+PC9hPjxoMz5nc3RfYmFzZV9wYXJzZV9hZGRfaW5kZXhfZW50cnkgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2Jhc2VfcGFyc2VfYWRkX2luZGV4X2VudHJ5ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlIiB0aXRsZT0ic3RydWN0IEdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+ICpwYXJzZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0czwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGtleTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGZvcmNlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQWRkcyBhbiBlbnRyeSB0byB0aGUgaW5kZXggYXNzb2NpYXRpbmcgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPiB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHM8L2NvZGU+PC9lbT4uICBJdCBpcyByZWNvbW1lbmRlZAordG8gb25seSBhZGQga2V5ZnJhbWUgZW50cmllcy4gIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JjZTwvY29kZT48L2VtPiBhbGxvd3MgdG8gYnlwYXNzIGNoZWNrcywgc3VjaCBhcword2hldGhlciB0aGUgc3RyZWFtIGlzICh1cHN0cmVhbSkgc2Vla2FibGUsIGFub3RoZXIgZW50cnkgaXMgYWxyZWFkeSAiY2xvc2UiCit0byB0aGUgbmV3IGVudHJ5LCBldGMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyc2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlIiB0aXRsZT0ic3RydWN0IEdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm9mZnNldCBvZiBlbnRyeTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGltZXN0YW1wIGFzc29jaWF0ZWQgd2l0aCBvZmZzZXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmtleTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD53aGV0aGVyIGVudHJ5IHJlZmVycyB0byBrZXlmcmFtZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9yY2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YWRkIGVudHJ5IGRpc3JlZ2FyZGluZyBzYW5pdHkgY2hlY2tzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGluZGljYXRpbmcgd2hldGhlciBlbnRyeSB3YXMgYWRkZWQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RCYXNlUGFyc2VGcmFtZSI+PC9hPjxoMz5Hc3RCYXNlUGFyc2VGcmFtZTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBzdHJ1Y3QgeworICBHc3RCdWZmZXIgKiBidWZmZXI7CisgIGd1aW50ICAgICAgIGZsYWdzOworICBnaW50ICAgICAgICBvdmVyaGVhZDsKK30gR3N0QmFzZVBhcnNlRnJhbWU7Cis8L3ByZT4KKzxwPgorRnJhbWUgKGNvbnRleHQpIGRhdGEgcGFzc2VkIHRvIGVhY2ggZnJhbWUgcGFyc2luZyB2aXJ0dWFsIG1ldGhvZHMuICBJbgorYWRkaXRpb24gdG8gcHJvdmlkaW5nIHRoZSBkYXRhIHRvIGJlIGNoZWNrZWQgZm9yIGEgdmFsaWQgZnJhbWUgb3IgYW4gYWxyZWFkeQoraWRlbnRpZmllZCBmcmFtZSwgaXQgY29udmV5cyBhZGRpdGlvbmFsIG1ldGFkYXRhIG9yIGNvbnRyb2wgaW5mb3JtYXRpb24KK2Zyb20gYW5kIHRvIHRoZSBzdWJjbGFzcyB3LnIudC4gdGhlIHBhcnRpY3VsYXIgZnJhbWUgaW4gcXVlc3Rpb24gKHJhdGhlcgordGhhbiBnbG9iYWwgcGFyYW1ldGVycykuICBTb21lIG9mIHRoZXNlIG1heSBhcHBseSB0byBlYWNoIHBhcnNpbmcgc3RhZ2UsIG90aGVycworb25seSB0byBzb21lIGEgcGFydGljdWxhciBvbmUuICBUaGVzZSBwYXJhbWV0ZXJzIGFyZSBlZmZlY3RpdmVseSB6ZXJvZWQgYXQgc3RhcnQKK29mIGVhY2ggZnJhbWUncyBwcm9jZXNzaW5nLCBpLmUuIHBhcnNpbmcgdmlydHVhbCBtZXRob2QgaW52b2NhdGlvbiBzZXF1ZW5jZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VQYXJzZUZyYW1lLmJ1ZmZlciI+PC9hPmJ1ZmZlcjwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZGF0YSB0byBjaGVjayBmb3IgdmFsaWQgZnJhbWUgb3IgcGFyc2VkIGZyYW1lLgorU3ViY2xhc3MgaXMgYWxsb3dlZCB0byByZXBsYWNlIHRoaXMgYnVmZmVyLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlUGFyc2VGcmFtZS5mbGFncyI+PC9hPmZsYWdzPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGNvbWJpbmF0aW9uIG9mIGlucHV0IGFuZCBvdXRwdXQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUZyYW1lRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEJhc2VQYXJzZUZyYW1lRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2VGcmFtZUZsYWdzPC9zcGFuPjwvYT4gdGhhdAorY29udmV5IGFkZGl0aW9uYWwgY29udGV4dCB0byBzdWJjbGFzcyBvciBhbGxvdyBzdWJjbGFzcyB0byB0dW5lCitzdWJzZXF1ZW50IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2UiIHRpdGxlPSJzdHJ1Y3QgR3N0QmFzZVBhcnNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlPC9zcGFuPjwvYT4gYWN0aW9ucy48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VQYXJzZUZyYW1lLm92ZXJoZWFkIj48L2E+b3ZlcmhlYWQ8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPnN1YmNsYXNzIGNhbiBzZXQgdGhpcyB0byBpbmRpY2F0ZXMgdGhlIG1ldGFkYXRhIG92ZXJoZWFkCitmb3IgdGhlIGdpdmVuIGZyYW1lLCB3aGljaCBpcyB0aGVuIHVzZWQgdG8gZW5hYmxlIG1vcmUgYWNjdXJhdGUgYml0cmF0ZQorY29tcHV0YXRpb25zLiBJZiB0aGlzIGlzIC0xLCBpdCBpcyBhc3N1bWVkIHRoYXQgdGhpcyBmcmFtZSBzaG91bGQgYmUKK3NraXBwZWQgaW4gYml0cmF0ZSBjYWxjdWxhdGlvbi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RCYXNlUGFyc2VGcmFtZUZsYWdzIj48L2E+PGgzPmVudW0gR3N0QmFzZVBhcnNlRnJhbWVGbGFnczwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBlbnVtIHsKKyAgR1NUX0JBU0VfUEFSU0VfRlJBTUVfRkxBR19OT05FICAgICAgICAgPSAwLAorICBHU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX05PX0ZSQU1FICAgICA9ICgxICZsdDsmbHQ7IDApLAorICBHU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX0NMSVAgICAgICAgICA9ICgxICZsdDsmbHQ7IDEpCit9IEdzdEJhc2VQYXJzZUZyYW1lRmxhZ3M7Cis8L3ByZT4KKzxwPgorRmxhZ3MgdG8gYmUgdXNlZCBpbiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2VGcmFtZSIgdGl0bGU9IkdzdEJhc2VQYXJzZUZyYW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlRnJhbWU8L3NwYW4+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUJBU0UtUEFSU0UtRlJBTUUtRkxBRy1OT05FOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9CQVNFX1BBUlNFX0ZSQU1FX0ZMQUdfTk9ORTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bm8gZmxhZworPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULUJBU0UtUEFSU0UtRlJBTUUtRkxBRy1OTy1GUkFNRTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX05PX0ZSQU1FPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zZXQgdG8gaW5kaWNhdGUgdGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZQorICBjb3VudGVkIGFzIGZyYW1lLCBlLmcuIGlmIHRoaXMgZnJhbWUgaXMgZGVwZW5kZW50IG9uIGEgcHJldmlvdXMgb25lLgorICBBcyBpdCBpcyBub3QgY291bnRlZCBhcyBhIGZyYW1lLCBiaXRyYXRlIGluY3JlYXNlcyBidXQgZnJhbWUgdG8gdGltZQorICBjb252ZXJzaW9ucyBhcmUgbWFpbnRhaW5lZC4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1CQVNFLVBBUlNFLUZSQU1FLUZMQUctQ0xJUDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX0NMSVA8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByZV9wdXNoX2J1ZmZlcjwvY29kZT48L2VtPiBjYW4gc2V0IHRoaXMgdG8gaW5kaWNhdGUKKyAgIHRoYXQgcmVndWxhciBzZWdtZW50IGNsaXBwaW5nIGNhbiBzdGlsbCBiZSBwZXJmb3JtZWQgKGFzIG9wcG9zZWQgdG8KKyAgIGFueSBjdXN0b20gb25lIGhhdmluZyBiZWVuIGRvbmUpLgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJhc2UtcGFyc2UtZnJhbWUtbmV3Ij48L2E+PGgzPmdzdF9iYXNlX3BhcnNlX2ZyYW1lX25ldyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUZyYW1lIiB0aXRsZT0iR3N0QmFzZVBhcnNlRnJhbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QmFzZVBhcnNlRnJhbWU8L3NwYW4+PC9hPiAqIGdzdF9iYXNlX3BhcnNlX2ZyYW1lX25ldyAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUZyYW1lRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEJhc2VQYXJzZUZyYW1lRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2VGcmFtZUZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gb3ZlcmhlYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitBbGxvY2F0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUZyYW1lIiB0aXRsZT0iR3N0QmFzZVBhcnNlRnJhbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2VGcmFtZTwvc3Bhbj48L2E+LiBUaGlzIGZ1bmN0aW9uIGlzIG1haW5seSBmb3IgYmluZGluZ3MsCitlbGVtZW50cyB3cml0dGVuIGluIEMgc2hvdWxkIHVzdWFsbHkgYWxsb2NhdGUgdGhlIGZyYW1lIG9uIHRoZSBzdGFjayBhbmQKK3RoZW4gdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1mcmFtZS1pbml0IiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfaW5pdCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmFzZV9wYXJzZV9mcmFtZV9pbml0KCk8L2NvZGU+PC9hPiB0byBpbml0aWFsaXNlIGl0LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZ3M8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGZsYWdzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vdmVyaGVhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5udW1iZXIgb2YgYnl0ZXMgaW4gdGhpcyBmcmFtZSB3aGljaCBzaG91bGQgYmUgY291bnRlZCBhcworbWV0YWRhdGEgb3ZlcmhlYWQsIGllLiBub3QgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGF2ZXJhZ2UgYml0cmF0ZS4KK1NldCB0byAtMSB0byBtYXJrIHRoZSBlbnRpcmUgZnJhbWUgYXMgbWV0YWRhdGEuIElmIGluIGRvdWJ0LCBzZXQgdG8gMC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ld2x5LWFsbG9jYXRlZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlRnJhbWUiIHRpdGxlPSJHc3RCYXNlUGFyc2VGcmFtZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZUZyYW1lPC9zcGFuPjwvYT4uIEZyZWUgd2l0aAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLWZyYW1lLWZyZWUiIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9mcmFtZV9mcmVlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iYXNlX3BhcnNlX2ZyYW1lX2ZyZWUoKTwvY29kZT48L2E+IHdoZW4gbm8gbG9uZ2VyIG5lZWRlZCwgdW5sZXNzIHlvdSBnYXZlCithd2F5IG93bmVyc2hpcCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2UtcHVzaC1mcmFtZSIgdGl0bGU9ImdzdF9iYXNlX3BhcnNlX3B1c2hfZnJhbWUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Jhc2VfcGFyc2VfcHVzaF9mcmFtZSgpPC9jb2RlPjwvYT4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJhc2UtcGFyc2UtZnJhbWUtaW5pdCI+PC9hPjxoMz5nc3RfYmFzZV9wYXJzZV9mcmFtZV9pbml0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9iYXNlX3BhcnNlX2ZyYW1lX2luaXQgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUZyYW1lIiB0aXRsZT0iR3N0QmFzZVBhcnNlRnJhbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2VGcmFtZTwvc3Bhbj48L2E+ICpmcmFtZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlRnJhbWUiIHRpdGxlPSJHc3RCYXNlUGFyc2VGcmFtZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZUZyYW1lPC9zcGFuPjwvYT4gdG8gaW5pdGlhbCBzdGF0ZS4gIEN1cnJlbnRseSB0aGlzIG1lYW5zCithbGwgcHVibGljIGZpZWxkcyBhcmUgemVyby1lZCBhbmQgYSBwcml2YXRlIGZsYWcgaXMgc2V0IHRvIG1ha2UKK3N1cmUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLWZyYW1lLWZyZWUiIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9mcmFtZV9mcmVlICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iYXNlX3BhcnNlX2ZyYW1lX2ZyZWUoKTwvY29kZT48L2E+IG9ubHkgZnJlZXMgdGhlIGNvbnRlbnRzIGJ1dCBub3QKK3RoZSBhY3R1YWwgZnJhbWUuIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGluaXRpYWxpc2UgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlRnJhbWUiIHRpdGxlPSJHc3RCYXNlUGFyc2VGcmFtZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZUZyYW1lPC9zcGFuPjwvYT4KK2FsbG9jYXRlZCBvbiB0aGUgc3RhY2suCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZyYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUZyYW1lIiB0aXRsZT0iR3N0QmFzZVBhcnNlRnJhbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2VGcmFtZTwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYmFzZS1wYXJzZS1mcmFtZS1mcmVlIj48L2E+PGgzPmdzdF9iYXNlX3BhcnNlX2ZyYW1lX2ZyZWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfZnJlZSAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlRnJhbWUiIHRpdGxlPSJHc3RCYXNlUGFyc2VGcmFtZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZUZyYW1lPC9zcGFuPjwvYT4gKmZyYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJhc2UtcGFyc2UtcHVzaC1mcmFtZSI+PC9hPjxoMz5nc3RfYmFzZV9wYXJzZV9wdXNoX2ZyYW1lICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiAgICAgICBnc3RfYmFzZV9wYXJzZV9wdXNoX2ZyYW1lICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2UiIHRpdGxlPSJzdHJ1Y3QgR3N0QmFzZVBhcnNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlPC9zcGFuPjwvYT4gKnBhcnNlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2VGcmFtZSIgdGl0bGU9IkdzdEJhc2VQYXJzZUZyYW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlRnJhbWU8L3NwYW4+PC9hPiAqZnJhbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitQdXNoZXMgdGhlIGZyYW1lIGRvd25zdHJlYW0sIHNlbmRzIGFueSBwZW5kaW5nIGV2ZW50cyBhbmQKK2RvZXMgc29tZSB0aW1lc3RhbXAgYW5kIHNlZ21lbnQgaGFuZGxpbmcuIFRha2VzIG93bmVyc2hpcAorb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZyYW1lPC9jb2RlPjwvZW0+IGFuZCB3aWxsIGNsZWFyIGl0IChpZiBpdCB3YXMgaW5pdGlhbGlzZWQgd2l0aAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLWZyYW1lLWluaXQiIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9mcmFtZV9pbml0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iYXNlX3BhcnNlX2ZyYW1lX2luaXQoKTwvY29kZT48L2E+KSBvciBmcmVlIGl0LgorPC9wPgorPHA+CitUaGlzIG11c3QgYmUgY2FsbGVkIHdpdGggc2lua3BhZCBTVFJFQU1fTE9DSyBoZWxkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhcnNlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZSIgdGl0bGU9InN0cnVjdCBHc3RCYXNlUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2U8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZyYW1lPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUZyYW1lIiB0aXRsZT0iR3N0QmFzZVBhcnNlRnJhbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2VGcmFtZTwvc3Bhbj48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzM8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1CQVNFLVBBUlNFLURSQUlOSU5HOkNBUFMiPjwvYT48aDM+R1NUX0JBU0VfUEFSU0VfRFJBSU5JTkcoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQkFTRV9QQVJTRV9EUkFJTklORyhwYXJzZSkgICghIShHU1RfQkFTRV9QQVJTRV9DQVNUKHBhcnNlKS0mZ3Q7ZmxhZ3MgJmFtcDsgR1NUX0JBU0VfUEFSU0VfRkxBR19EUkFJTklORykpCis8L3ByZT4KKzxwPgorT2J0YWlucyBjdXJyZW50IGRyYWluIHN0YXR1cyAoaWUuIHdoZXRoZXIgRU9TIGhhcyBiZWVuIHJlY2VpdmVkIGFuZAordGhlIHBhcnNlciBpcyBub3cgcHJvY2Vzc2luZyB0aGUgZnJhbWVzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmVhbSkKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyc2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YmFzZSBwYXJzZSBpbnN0YW5jZTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQkFTRS1QQVJTRS1GTEFHLURSQUlOSU5HOkNBUFMiPjwvYT48aDM+R1NUX0JBU0VfUEFSU0VfRkxBR19EUkFJTklORzwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQkFTRV9QQVJTRV9GTEFHX0RSQUlOSU5HICAoMSAmbHQ7Jmx0OyAxKQorPC9wcmU+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1CQVNFLVBBUlNFLUZMQUctTE9TVC1TWU5DOkNBUFMiPjwvYT48aDM+R1NUX0JBU0VfUEFSU0VfRkxBR19MT1NUX1NZTkM8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0JBU0VfUEFSU0VfRkxBR19MT1NUX1NZTkMgKDEgJmx0OyZsdDsgMCkKKzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQkFTRS1QQVJTRS1GTE9XLURST1BQRUQ6Q0FQUyI+PC9hPjxoMz5HU1RfQkFTRV9QQVJTRV9GTE9XX0RST1BQRUQ8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0JBU0VfUEFSU0VfRkxPV19EUk9QUEVEICAgICBHU1RfRkxPV19DVVNUT01fU1VDQ0VTUworPC9wcmU+Cis8cD4KK0EgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiB0aGF0IGNhbiBiZSByZXR1cm5lZCBmcm9tIHBhcnNlX2ZyYW1lIHRvCitpbmRpY2F0ZSB0aGF0IG5vIG91dHB1dCBidWZmZXIgd2FzIGdlbmVyYXRlZCwgb3IgZnJvbSBwcmVfcHVzaF9idWZmZXIgdG8KK3RvIGZvcmVnbyBwdXNoaW5nIGJ1ZmZlci4KKzwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUJBU0UtUEFSU0UtRkxPVy1RVUVVRUQ6Q0FQUyI+PC9hPjxoMz5HU1RfQkFTRV9QQVJTRV9GTE9XX1FVRVVFRDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQkFTRV9QQVJTRV9GTE9XX1FVRVVFRCAgICAgIEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTXzEKKzwvcHJlPgorPHA+CitBIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4gdGhhdCBjYW4gYmUgcmV0dXJuZWQgZnJvbSBwYXJzZSBmcmFtZSB0byBpbmRpY2F0ZSB0aGF0Cit0aGUgYnVmZmVyIHdpbGwgYmUgcXVldWVkIHRvIGJlIHB1c2hlZCB3aGVuIHRoZSBuZXh0IE9LCis8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzM8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1CQVNFLVBBUlNFLUxPU1QtU1lOQzpDQVBTIj48L2E+PGgzPkdTVF9CQVNFX1BBUlNFX0xPU1RfU1lOQygpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CQVNFX1BBUlNFX0xPU1RfU1lOQyhwYXJzZSkgKCEhKEdTVF9CQVNFX1BBUlNFX0NBU1QocGFyc2UpLSZndDtmbGFncyAmYW1wOyBHU1RfQkFTRV9QQVJTRV9GTEFHX0xPU1RfU1lOQykpCis8L3ByZT4KKzxwPgorT2J0YWlucyBjdXJyZW50IHN5bmMgc3RhdHVzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXJzZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5iYXNlIHBhcnNlIGluc3RhbmNlPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzM8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1CQVNFLVBBUlNFLVNJTkstUEFEOkNBUFMiPjwvYT48aDM+R1NUX0JBU0VfUEFSU0VfU0lOS19QQUQoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQkFTRV9QQVJTRV9TSU5LX1BBRChvYmopICAgIChHU1RfQkFTRV9QQVJTRV9DQVNUIChvYmopLSZndDtzaW5rcGFkKQorPC9wcmU+Cis8cD4KK0dpdmVzIHRoZSBwb2ludGVyIHRvIHRoZSBzaW5rIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gb2JqZWN0IG9mIHRoZSBlbGVtZW50LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmo8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YmFzZSBwYXJzZSBpbnN0YW5jZTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQkFTRS1QQVJTRS1TUkMtUEFEOkNBUFMiPjwvYT48aDM+R1NUX0JBU0VfUEFSU0VfU1JDX1BBRCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CQVNFX1BBUlNFX1NSQ19QQUQob2JqKSAgICAoR1NUX0JBU0VfUEFSU0VfQ0FTVCAob2JqKS0mZ3Q7c3JjcGFkKQorPC9wcmU+Cis8cD4KK0dpdmVzIHRoZSBwb2ludGVyIHRvIHRoZSBzb3VyY2UgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBvYmplY3Qgb2YgdGhlIGVsZW1lbnQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iajwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5iYXNlIHBhcnNlIGluc3RhbmNlPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzM8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVRyYW5zZm9ybTwvc3Bhbj48L2E+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sIGIvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U2NWJiZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sCkBAIC0wLDAgKzEsOTQwIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0Qml0UmVhZGVyPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZ3N0cmVhbWVyLWJhc2UuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBCYXNlIGFuZCBVdGlsbGl0eSBDbGFzc2VzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImdzdHJlYW1lci1iYXNlLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlciI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci50b3Bfb2ZfcGFnZSI+PC9hPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2gyPgorPHA+R3N0Qml0UmVhZGVyIOKAlCBSZWFkcyBhbnkgbnVtYmVyIG9mIGJpdHMgZnJvbSBhIG1lbW9yeSBidWZmZXI8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2dzdC9iYXNlL2dzdGJpdHJlYWRlci5oJmd0OworCisgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT47CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHU1QtQklULVJFQURFUi1JTklUOkNBUFMiIHRpdGxlPSJHU1RfQklUX1JFQURFUl9JTklUKCkiPkdTVF9CSVRfUkVBREVSX0lOSVQ8L2E+ICAgICAgICAgICAgICAgICAoZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUpCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+ICogICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItbmV3IiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfbmV3ICgpIj5nc3RfYml0X3JlYWRlcl9uZXc8L2E+ICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWZyZWUiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9mcmVlICgpIj5nc3RfYml0X3JlYWRlcl9mcmVlPC9hPiAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1pbml0IiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfaW5pdCAoKSI+Z3N0X2JpdF9yZWFkZXJfaW5pdDwvYT4gICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICpkYXRhPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtcG9zIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfZ2V0X3BvcyAoKSI+Z3N0X2JpdF9yZWFkZXJfZ2V0X3BvczwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItZ2V0LXJlbWFpbmluZyIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX2dldF9yZW1haW5pbmcgKCkiPmdzdF9iaXRfcmVhZGVyX2dldF9yZW1haW5pbmc8L2E+ICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLXNldC1wb3MiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9zZXRfcG9zICgpIj5nc3RfYml0X3JlYWRlcl9zZXRfcG9zPC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHBvczwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtc2l6ZSIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX2dldF9zaXplICgpIj5nc3RfYml0X3JlYWRlcl9nZXRfc2l6ZTwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1za2lwIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfc2tpcCAoKSI+Z3N0X2JpdF9yZWFkZXJfc2tpcDwvYT4gICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBuYml0czwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1za2lwLXRvLWJ5dGUiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGUgKCkiPmdzdF9iaXRfcmVhZGVyX3NraXBfdG9fYnl0ZTwvYT4gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQxNiIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQxNiAoKSI+Z3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDE2PC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDE2PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG5iaXRzPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQzMiIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQzMiAoKSI+Z3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDMyPC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG5iaXRzPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQ2NCIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ2NCAoKSI+Z3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDY0PC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG5iaXRzPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQ4IiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDggKCkiPmdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4PC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbmJpdHM8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQxNiIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MTYgKCkiPmdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MTY8L2E+ICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQxNjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBuYml0czwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDMyIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQzMiAoKSI+Z3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQzMjwvYT4gICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG5iaXRzPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLXBlZWstYml0cy11aW50NjQiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDY0ICgpIj5nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDY0PC9hPiAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbmJpdHM8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQ4IiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ4ICgpIj5nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDg8L2E+ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG5iaXRzPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLXNraXAtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfc2tpcF91bmNoZWNrZWQgKCkiPmdzdF9iaXRfcmVhZGVyX3NraXBfdW5jaGVja2VkPC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbmJpdHM8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItc2tpcC10by1ieXRlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX3NraXBfdG9fYnl0ZV91bmNoZWNrZWQgKCkiPmdzdF9iaXRfcmVhZGVyX3NraXBfdG9fYnl0ZV91bmNoZWNrZWQ8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQxNjwvc3Bhbj48L2E+ICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50MTYtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDE2X3VuY2hlY2tlZCAoKSI+Z3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDE2X3VuY2hlY2tlZDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG5iaXRzPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MzI8L3NwYW4+PC9hPiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDMyLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQzMl91bmNoZWNrZWQgKCkiPmdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQzMl91bmNoZWNrZWQ8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBuYml0czwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQ2NC11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50NjRfdW5jaGVja2VkICgpIj5nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50NjRfdW5jaGVja2VkPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbmJpdHM8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDg8L3NwYW4+PC9hPiAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQ4LXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4X3VuY2hlY2tlZCAoKSI+Z3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDhfdW5jaGVja2VkPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbmJpdHM8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQxNjwvc3Bhbj48L2E+ICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDE2LXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MTZfdW5jaGVja2VkICgpIj5nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDE2X3VuY2hlY2tlZDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG5iaXRzPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MzI8L3NwYW4+PC9hPiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQzMi11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDMyX3VuY2hlY2tlZCAoKSI+Z3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQzMl91bmNoZWNrZWQ8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBuYml0czwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLXBlZWstYml0cy11aW50NjQtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ2NF91bmNoZWNrZWQgKCkiPmdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50NjRfdW5jaGVja2VkPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbmJpdHM8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDg8L3NwYW4+PC9hPiAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLXBlZWstYml0cy11aW50OC11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDhfdW5jaGVja2VkICgpIj5nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDhfdW5jaGVja2VkPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbmJpdHM8L2NvZGU+PC9lbT4pOworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBwcm92aWRlcyBhIGJpdCByZWFkZXIgdGhhdCBjYW4gcmVhZCBhbnkgbnVtYmVyIG9mIGJpdHMKK2Zyb20gYSBtZW1vcnkgYnVmZmVyLiBJdCBwcm92aWRlcyBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgYW55IG51bWJlciBvZiBiaXRzCitpbnRvIDgsIDE2LCAzMiBhbmQgNjQgYml0IHZhcmlhYmxlcy4KKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RCaXRSZWFkZXIiPjwvYT48aDM+R3N0Qml0UmVhZGVyPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGd1aW50OCAqZGF0YTsKKyAgZ3VpbnQgc2l6ZTsKKworICBndWludCBieXRlOyAgLyogQnl0ZSBwb3NpdGlvbiAqLworICBndWludCBiaXQ7ICAgLyogQml0IHBvc2l0aW9uIGluIHRoZSBjdXJyZW50IGJ5dGUgKi8KK30gR3N0Qml0UmVhZGVyOworPC9wcmU+Cis8cD4KK0EgYml0IHJlYWRlciBpbnN0YW5jZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNvbnN0wqA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCaXRSZWFkZXIuZGF0YSI+PC9hPmRhdGE8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPkRhdGEgZnJvbSB3aGljaCB0aGUgYml0IHJlYWRlciB3aWxsIHJlYWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0Qml0UmVhZGVyLnNpemUiPjwvYT5zaXplPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5TaXplIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+IGluIGJ5dGVzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJpdFJlYWRlci5ieXRlIj48L2E+Ynl0ZTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Q3VycmVudCBieXRlIHBvc2l0aW9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJpdFJlYWRlci5iaXQiPjwvYT5iaXQ8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPkJpdCBwb3NpdGlvbiBpbiB0aGUgY3VycmVudCBieXRlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULUJJVC1SRUFERVItSU5JVDpDQVBTIj48L2E+PGgzPkdTVF9CSVRfUkVBREVSX0lOSVQoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQklUX1JFQURFUl9JTklUKGRhdGEsIHNpemUpIHtkYXRhLCBzaXplLCAwLCAwfQorPC9wcmU+Cis8cD4KK0EgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IG11c3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCB0aGlzIG1hY3JvLCBiZWZvcmUgaXQgY2FuIGJlCit1c2VkLiBUaGlzIG1hY3JvIGNhbiB1c2VkIGJlIHRvIGluaXRpYWxpemUgYSB2YXJpYWJsZSwgYnV0IGl0IGNhbm5vdAorYmUgYXNzaWduZWQgdG8gYSB2YXJpYWJsZS4gSW4gdGhhdCBjYXNlIHlvdSBoYXZlIHRvIHVzZQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWluaXQiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9pbml0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iaXRfcmVhZGVyX2luaXQoKTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+RGF0YSBmcm9tIHdoaWNoIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gc2hvdWxkIHJlYWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+U2l6ZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPiBpbiBieXRlczwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLW5ldyI+PC9hPjxoMz5nc3RfYml0X3JlYWRlcl9uZXcgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKiAgICAgIGdzdF9iaXRfcmVhZGVyX25ldyAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICpkYXRhPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZSBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2UsIHdoaWNoIHdpbGwgcmVhZCBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+LgorPC9wPgorPHA+CitGcmVlLWZ1bmN0aW9uOiBnc3RfYml0X3JlYWRlcl9mcmVlCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5EYXRhIGZyb20gd2hpY2ggdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBzaG91bGQgcmVhZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5TaXplIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+IGluIGJ5dGVzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItZnJlZSI+PC9hPjxoMz5nc3RfYml0X3JlYWRlcl9mcmVlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9iaXRfcmVhZGVyX2ZyZWUgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitGcmVlcyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZSwgd2hpY2ggd2FzIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItbmV3IiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfbmV3ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iaXRfcmVhZGVyX25ldygpPC9jb2RlPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dC4gRGVmYXVsdCBpcyB0cmFuc2ZlciBub25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmluPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLWluaXQiPjwvYT48aDM+Z3N0X2JpdF9yZWFkZXJfaW5pdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYml0X3JlYWRlcl9pbml0ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitJbml0aWFsaXplcyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZSB0byByZWFkIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4uIFRoaXMgZnVuY3Rpb24KK2NhbiBiZSBjYWxsZWQgb24gYWxyZWFkeSBpbml0aWFsaXplZCBpbnN0YW5jZXMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmRhdGEgZnJvbSB3aGljaCB0aGUgYml0IHJlYWRlciBzaG91bGQgcmVhZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dC4gRGVmYXVsdCBpcyB0cmFuc2ZlciBub25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmluPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gbGVuZ3RoPXNpemVdPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlNpemUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4gaW4gYnl0ZXM8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYml0LXJlYWRlci1nZXQtcG9zIj48L2E+PGgzPmdzdF9iaXRfcmVhZGVyX2dldF9wb3MgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgZ3N0X2JpdF9yZWFkZXJfZ2V0X3BvcyAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JldHVybnMgdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2UgaW4gYml0cy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgY3VycmVudCBwb3NpdGlvbiBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+IGluIGJpdHMuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItZ2V0LXJlbWFpbmluZyI+PC9hPjxoMz5nc3RfYml0X3JlYWRlcl9nZXRfcmVtYWluaW5nICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIGdzdF9iaXRfcmVhZGVyX2dldF9yZW1haW5pbmcgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZXR1cm5zIHRoZSByZW1haW5pbmcgbnVtYmVyIG9mIGJpdHMgb2YgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2UuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIHJlbWFpbmluZyBudW1iZXIgb2YgYml0cyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+IGluc3RhbmNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLXNldC1wb3MiPjwvYT48aDM+Z3N0X2JpdF9yZWFkZXJfc2V0X3BvcyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYml0X3JlYWRlcl9zZXRfcG9zICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gcG9zPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0cyB0aGUgbmV3IHBvc2l0aW9uIG9mIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wb3M8L2NvZGU+PC9lbT4gaW4gYml0cy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBvczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgbmV3IHBvc2l0aW9uIGluIGJpdHM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBwb3NpdGlvbiBjb3VsZCBiZSBzZXQgc3VjY2Vzc2Z1bGx5LCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+CitvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItZ2V0LXNpemUiPjwvYT48aDM+Z3N0X2JpdF9yZWFkZXJfZ2V0X3NpemUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgZ3N0X2JpdF9yZWFkZXJfZ2V0X3NpemUgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBiaXRzIG9mIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSB0b3RhbCBudW1iZXIgb2YgYml0cyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+IGluc3RhbmNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLXNraXAiPjwvYT48aDM+Z3N0X2JpdF9yZWFkZXJfc2tpcCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYml0X3JlYWRlcl9za2lwICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbmJpdHM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTa2lwcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJpdHM8L2NvZGU+PC9lbT4gYml0cyBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJpdHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG51bWJlciBvZiBiaXRzIHRvIHNraXA8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYml0czwvY29kZT48L2VtPiBiaXRzIGNvdWxkIGJlIHNraXBwZWQsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLXNraXAtdG8tYnl0ZSI+PC9hPjxoMz5nc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2JpdF9yZWFkZXJfc2tpcF90b19ieXRlICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NraXBzIHVudGlsIHRoZSBuZXh0IGJ5dGUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50MTYiPjwvYT48aDM+Z3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDE2ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQxNiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDE2PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG5iaXRzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJpdHM8L2NvZGU+PC9lbT4gYml0cyBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4gYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Qb2ludGVyIHRvIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDE2PC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJpdHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bnVtYmVyIG9mIGJpdHMgdG8gcmVhZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDMyIj48L2E+PGgzPmdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQzMiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MzIgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBuYml0czwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5iaXRzPC9jb2RlPjwvZW0+IGJpdHMgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+IGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UG9pbnRlciB0byBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5iaXRzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm51bWJlciBvZiBiaXRzIHRvIHJlYWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQ2NCI+PC9hPjxoMz5nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50NjQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDY0ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbmJpdHM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYml0czwvY29kZT48L2VtPiBiaXRzIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPiBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlBvaW50ZXIgdG8gYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYml0czwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5udW1iZXIgb2YgYml0cyB0byByZWFkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50OCI+PC9hPjxoMz5nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OCAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbmJpdHM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYml0czwvY29kZT48L2VtPiBiaXRzIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPiBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlBvaW50ZXIgdG8gYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJpdHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bnVtYmVyIG9mIGJpdHMgdG8gcmVhZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQxNiI+PC9hPjxoMz5nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDE2ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MTYgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDE2PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG5iaXRzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJpdHM8L2NvZGU+PC9lbT4gYml0cyBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4gYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UG9pbnRlciB0byBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQxNjwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5iaXRzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm51bWJlciBvZiBiaXRzIHRvIHJlYWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLXBlZWstYml0cy11aW50MzIiPjwvYT48aDM+Z3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQzMiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDMyICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBuYml0czwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5iaXRzPC9jb2RlPjwvZW0+IGJpdHMgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+IGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlBvaW50ZXIgdG8gYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYml0czwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5udW1iZXIgb2YgYml0cyB0byByZWFkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDY0Ij48L2E+PGgzPmdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50NjQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ2NCAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbmJpdHM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYml0czwvY29kZT48L2VtPiBiaXRzIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPiBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Qb2ludGVyIHRvIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJpdHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bnVtYmVyIG9mIGJpdHMgdG8gcmVhZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQ4Ij48L2E+PGgzPmdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50OCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDggICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbmJpdHM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYml0czwvY29kZT48L2VtPiBiaXRzIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPiBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Qb2ludGVyIHRvIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5iaXRzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm51bWJlciBvZiBiaXRzIHRvIHJlYWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLXNraXAtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9iaXRfcmVhZGVyX3NraXBfdW5jaGVja2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9iaXRfcmVhZGVyX3NraXBfdW5jaGVja2VkICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBuYml0czwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NraXBzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYml0czwvY29kZT48L2VtPiBiaXRzIG9mIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2Ugd2l0aG91dCBjaGVja2luZyBpZiB0aGVyZQorYXJlIGVub3VnaCBiaXRzIGF2YWlsYWJsZSBpbiB0aGUgYml0IHJlYWRlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5iaXRzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBudW1iZXIgb2YgYml0cyB0byBza2lwPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItc2tpcC10by1ieXRlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGVfdW5jaGVja2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9iaXRfcmVhZGVyX3NraXBfdG9fYnl0ZV91bmNoZWNrZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NraXBzIHVudGlsIHRoZSBuZXh0IGJ5dGUgd2l0aG91dCBjaGVja2luZyBpZiB0aGVyZSBhcmUgZW5vdWdoIGJpdHMKK2F2YWlsYWJsZSBpbiB0aGUgYml0IHJlYWRlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQxNi11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDE2X3VuY2hlY2tlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQxNjwvc3Bhbj48L2E+ICAgICAgICAgICAgIGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQxNl91bmNoZWNrZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG5iaXRzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJpdHM8L2NvZGU+PC9lbT4gYml0cyBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4gYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbiB3aXRob3V0CitjaGVja2luZyBpZiB0aGVyZSBhcmUgZW5vdWdoIGJpdHMgYXZhaWxhYmxlIGluIHRoZSBiaXQgcmVhZGVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJpdHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bnVtYmVyIG9mIGJpdHMgdG8gcmVhZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVuc2lnbmVkIDE2IGJpdCBpbnRlZ2VyIHdpdGggdGhlIGJpdHMuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDMyLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MzJfdW5jaGVja2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDMyPC9zcGFuPjwvYT4gICAgICAgICAgICAgZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDMyX3VuY2hlY2tlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbmJpdHM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYml0czwvY29kZT48L2VtPiBiaXRzIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPiBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uIHdpdGhvdXQKK2NoZWNraW5nIGlmIHRoZXJlIGFyZSBlbm91Z2ggYml0cyBhdmFpbGFibGUgaW4gdGhlIGJpdCByZWFkZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYml0czwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5udW1iZXIgb2YgYml0cyB0byByZWFkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dW5zaWduZWQgMzIgYml0IGludGVnZXIgd2l0aCB0aGUgYml0cy48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMxPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50NjQtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ2NF91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50NjRfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBuYml0czwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5iaXRzPC9jb2RlPjwvZW0+IGJpdHMgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+IGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24gd2l0aG91dAorY2hlY2tpbmcgaWYgdGhlcmUgYXJlIGVub3VnaCBiaXRzIGF2YWlsYWJsZSBpbiB0aGUgYml0IHJlYWRlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5iaXRzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm51bWJlciBvZiBiaXRzIHRvIHJlYWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51bnNpZ25lZCA2NCBiaXQgaW50ZWdlciB3aXRoIHRoZSBiaXRzLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQ4LXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OF91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gICAgICAgICAgICAgIGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4X3VuY2hlY2tlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbmJpdHM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYml0czwvY29kZT48L2VtPiBiaXRzIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPiBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uIHdpdGhvdXQKK2NoZWNraW5nIGlmIHRoZXJlIGFyZSBlbm91Z2ggYml0cyBhdmFpbGFibGUgaW4gdGhlIGJpdCByZWFkZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYml0czwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5udW1iZXIgb2YgYml0cyB0byByZWFkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dW5zaWduZWQgOCBiaXQgaW50ZWdlciB3aXRoIHRoZSBiaXRzLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLXBlZWstYml0cy11aW50MTYtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MTZfdW5jaGVja2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDE2PC9zcGFuPjwvYT4gICAgICAgICAgICAgZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQxNl91bmNoZWNrZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG5iaXRzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJpdHM8L2NvZGU+PC9lbT4gYml0cyBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4gYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24gd2l0aG91dAorY2hlY2tpbmcgaWYgdGhlcmUgYXJlIGVub3VnaCBiaXRzIGF2YWlsYWJsZSBpbiB0aGUgYml0IHJlYWRlcgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJpdHM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bnVtYmVyIG9mIGJpdHMgdG8gcmVhZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVuc2lnbmVkIDY0IGJpdCBpbnRlZ2VyIHdpdGggdGhlIGJpdHMuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQzMi11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQzMl91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MzI8L3NwYW4+PC9hPiAgICAgICAgICAgICBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDMyX3VuY2hlY2tlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbmJpdHM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYml0czwvY29kZT48L2VtPiBiaXRzIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPiBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbiB3aXRob3V0CitjaGVja2luZyBpZiB0aGVyZSBhcmUgZW5vdWdoIGJpdHMgYXZhaWxhYmxlIGluIHRoZSBiaXQgcmVhZGVyCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYml0czwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5udW1iZXIgb2YgYml0cyB0byByZWFkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dW5zaWduZWQgMzIgYml0IGludGVnZXIgd2l0aCB0aGUgYml0cy48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMxPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDY0LXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDY0X3VuY2hlY2tlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICAgICAgICAgICAgIGdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50NjRfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBuYml0czwvY29kZT48L2VtPik7PC9wcmU+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLXBlZWstYml0cy11aW50OC11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ4X3VuY2hlY2tlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDg8L3NwYW4+PC9hPiAgICAgICAgICAgICAgZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ4X3VuY2hlY2tlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbmJpdHM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYml0czwvY29kZT48L2VtPiBiaXRzIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPiBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbiB3aXRob3V0CitjaGVja2luZyBpZiB0aGVyZSBhcmUgZW5vdWdoIGJpdHMgYXZhaWxhYmxlIGluIHRoZSBiaXQgcmVhZGVyCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYml0czwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5udW1iZXIgb2YgYml0cyB0byByZWFkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dW5zaWduZWQgOCBiaXQgaW50ZWdlciB3aXRoIHRoZSBiaXRzLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcuaHRtbCBiL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg1NTg2NwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3Lmh0bWwKQEAgLTAsMCArMSwxNjkgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5Hc3RCdWZmZXJTdHJhdzwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImdzdHJlYW1lci1jaGVjay5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENoZWNrIFVuaXQgVGVzdGluZyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5Lmh0bWwiIHRpdGxlPSJHc3RTdHJlYW1Db25zaXN0ZW5jeSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImdzdHJlYW1lci1jaGVjay5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcudG9wX29mX3BhZ2UiPjwvYT5Hc3RCdWZmZXJTdHJhdzwvc3Bhbj48L2gyPgorPHA+R3N0QnVmZmVyU3RyYXcg4oCUIEJ1ZmZlciBpbnRlcmNlcHRpb24gY29kZSBmb3IgR1N0cmVhbWVyIHVuaXQgdGVzdHM8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisjaW5jbHVkZSAmbHQ7Z3N0L2NoZWNrL2dzdGJ1ZmZlcnN0cmF3LmgmZ3Q7CisKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3Lmh0bWwjZ3N0LWJ1ZmZlci1zdHJhdy1zdGFydC1waXBlbGluZSIgdGl0bGU9ImdzdF9idWZmZXJfc3RyYXdfc3RhcnRfcGlwZWxpbmUgKCkiPmdzdF9idWZmZXJfc3RyYXdfc3RhcnRfcGlwZWxpbmU8L2E+ICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqYmluPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7Cis8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICogICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcuaHRtbCNnc3QtYnVmZmVyLXN0cmF3LWdldC1idWZmZXIiIHRpdGxlPSJnc3RfYnVmZmVyX3N0cmF3X2dldF9idWZmZXIgKCkiPmdzdF9idWZmZXJfc3RyYXdfZ2V0X2J1ZmZlcjwvYT4gICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqYmluPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5odG1sI2dzdC1idWZmZXItc3RyYXctc3RvcC1waXBlbGluZSIgdGl0bGU9ImdzdF9idWZmZXJfc3RyYXdfc3RvcF9waXBlbGluZSAoKSI+Z3N0X2J1ZmZlcl9zdHJhd19zdG9wX3BpcGVsaW5lPC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICpiaW48L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK1RoZXNlIG1hY3JvcyBhbmQgZnVuY3Rpb25zIGFyZSBmb3IgaW50ZXJuYWwgdXNlIG9mIHRoZSB1bml0IHRlc3RzIGZvdW5kCitpbnNpZGUgdGhlICdjaGVjaycgZGlyZWN0b3JpZXMgb2YgdmFyaW91cyBHU3RyZWFtZXIgcGFja2FnZXMuCis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3LmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnVmZmVyLXN0cmF3LXN0YXJ0LXBpcGVsaW5lIj48L2E+PGgzPmdzdF9idWZmZXJfc3RyYXdfc3RhcnRfcGlwZWxpbmUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl9zdHJhd19zdGFydF9waXBlbGluZSAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmJpbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXRzIHVwIGEgcGlwZWxpbmUgZm9yIGJ1ZmZlciBzdWNraW5nLiBUaGlzIHdpbGwgYWxsb3cgeW91IHRvIGNhbGwKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5odG1sI2dzdC1idWZmZXItc3RyYXctZ2V0LWJ1ZmZlciIgdGl0bGU9ImdzdF9idWZmZXJfc3RyYXdfZ2V0X2J1ZmZlciAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3N0cmF3X2dldF9idWZmZXIoKTwvY29kZT48L2E+IHRvIGFjY2VzcyBidWZmZXJzIGFzIHRoZXkgcGFzcyBvdmVyIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4uCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gaXMgbm9ybWFsbHkgdXNlZCBpbiB1bml0IHRlc3RzIHRoYXQgd2FudCB0byB2ZXJpZnkgdGhhdCBhCitwYXJ0aWN1bGFyIGVsZW1lbnQgaXMgb3V0cHV0dGluZyBjb3JyZWN0IGJ1ZmZlcnMuIEZvciBleGFtcGxlLCB5b3Ugd291bGQgbWFrZQorYSBwaXBlbGluZSB2aWEgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWxhdW5jaCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFyc2VfbGF1bmNoKCk8L2NvZGU+PC9hPiwgcHVsbCBvdXQgdGhlIHBhZCB5b3Ugd2FudCB0byBtb25pdG9yLCB0aGVuCitjYWxsIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5odG1sI2dzdC1idWZmZXItc3RyYXctZ2V0LWJ1ZmZlciIgdGl0bGU9ImdzdF9idWZmZXJfc3RyYXdfZ2V0X2J1ZmZlciAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3N0cmF3X2dldF9idWZmZXIoKTwvY29kZT48L2E+IHRvIGdldCB0aGUgYnVmZmVycyB0aGF0IHBhc3MgdGhyb3VnaCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+LgorVGhlIHBpcGVsaW5lIHdpbGwgYmxvY2sgdW50aWwgeW91IGhhdmUgc3Vja2VkIG9mZiB0aGUgYnVmZmVycy4KKzwvcD4KKzxwPgorVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgc3RhdGUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJpbjwvY29kZT48L2VtPiB0byBQTEFZSU5HOyB0byBjbGVhbiB1cCwgYmUgc3VyZSB0bworY2FsbCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcuaHRtbCNnc3QtYnVmZmVyLXN0cmF3LXN0b3AtcGlwZWxpbmUiIHRpdGxlPSJnc3RfYnVmZmVyX3N0cmF3X3N0b3BfcGlwZWxpbmUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9zdHJhd19zdG9wX3BpcGVsaW5lKCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxwPgorTm90ZSB0aGF0IHlvdSBtYXkgbm90IHN0YXJ0IHR3byBidWZmZXIgc3RyYXdzIGF0IHRoZSBzYW1lIHRpbWUuIFRoaXMgZnVuY3Rpb24KK2lzIGludGVuZGVkIGZvciB1bml0IHRlc3RzLCBub3QgZ2VuZXJhbCBBUEkgdXNlLiBJbiBmYWN0IGl0IGNhbGxzIGZhaWxfaWYKK2Zyb20gbGliY2hlY2ssIHNvIHlvdSBjYW5ub3QgdXNlIGl0IG91dHNpZGUgdW5pdCB0ZXN0cy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iaW48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBpcGVsaW5lIHRvIHJ1bjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgcGFkIG9uIGFuIGVsZW1lbnQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJpbjwvY29kZT48L2VtPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1zdHJhdy1nZXQtYnVmZmVyIj48L2E+PGgzPmdzdF9idWZmZXJfc3RyYXdfZ2V0X2J1ZmZlciAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqICAgICAgICAgZ3N0X2J1ZmZlcl9zdHJhd19nZXRfYnVmZmVyICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmJpbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgb25lIGJ1ZmZlciBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4uIEltcGxlbWVudGVkIHZpYSBidWZmZXIgcHJvYmVzLiBUaGlzIGZ1bmN0aW9uIHdpbGwKK2Jsb2NrIHVudGlsIHRoZSBwaXBlbGluZSBwYXNzZXMgYSBidWZmZXIgb3ZlciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+LCBzbyBmb3Igcm9idXN0IGJlaGF2aW9yCitpbiB1bml0IHRlc3RzLCB5b3UgbmVlZCB0byB1c2UgY2hlY2sncyB0aW1lb3V0IHRvIGZhaWwgb3V0IGluIHRoZSBjYXNlIHRoYXQgYQorYnVmZmVyIG5ldmVyIGFycml2ZXMuCis8L3A+Cis8cD4KK1lvdSBtdXN0IGhhdmUgcHJldmlvdXNseSBjYWxsZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3Lmh0bWwjZ3N0LWJ1ZmZlci1zdHJhdy1zdGFydC1waXBlbGluZSIgdGl0bGU9ImdzdF9idWZmZXJfc3RyYXdfc3RhcnRfcGlwZWxpbmUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9zdHJhd19zdGFydF9waXBlbGluZSgpPC9jb2RlPjwvYT4gb24KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5waXBlbGluZTwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iaW48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBpcGVsaW5lIHByZXZpb3VzbHkgc3RhcnRlZCB2aWEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3Lmh0bWwjZ3N0LWJ1ZmZlci1zdHJhdy1zdGFydC1waXBlbGluZSIgdGl0bGU9ImdzdF9idWZmZXJfc3RyYXdfc3RhcnRfcGlwZWxpbmUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9zdHJhd19zdGFydF9waXBlbGluZSgpPC9jb2RlPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwYWQgcHJldmlvdXNseSBwYXNzZWQgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3Lmh0bWwjZ3N0LWJ1ZmZlci1zdHJhdy1zdGFydC1waXBlbGluZSIgdGl0bGU9ImdzdF9idWZmZXJfc3RyYXdfc3RhcnRfcGlwZWxpbmUgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9zdHJhd19zdGFydF9waXBlbGluZSgpPC9jb2RlPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjYXB0dXJlZCA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ1ZmZlci1zdHJhdy1zdG9wLXBpcGVsaW5lIj48L2E+PGgzPmdzdF9idWZmZXJfc3RyYXdfc3RvcF9waXBlbGluZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYnVmZmVyX3N0cmF3X3N0b3BfcGlwZWxpbmUgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqYmluPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YmluPC9jb2RlPjwvZW0+IHRvIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtTlVMTDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1NUQVRFX05VTEw8L3NwYW4+PC9hPiBhbmQgcmVsZWFzZSByZXNvdXJjZSBhbGxvY2F0ZWQgaW4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5odG1sI2dzdC1idWZmZXItc3RyYXctc3RhcnQtcGlwZWxpbmUiIHRpdGxlPSJnc3RfYnVmZmVyX3N0cmF3X3N0YXJ0X3BpcGVsaW5lICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfc3RyYXdfc3RhcnRfcGlwZWxpbmUoKTwvY29kZT48L2E+LgorPC9wPgorPHA+CitZb3UgbXVzdCBoYXZlIHByZXZpb3VzbHkgY2FsbGVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5odG1sI2dzdC1idWZmZXItc3RyYXctc3RhcnQtcGlwZWxpbmUiIHRpdGxlPSJnc3RfYnVmZmVyX3N0cmF3X3N0YXJ0X3BpcGVsaW5lICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfc3RyYXdfc3RhcnRfcGlwZWxpbmUoKTwvY29kZT48L2E+IG9uCis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGlwZWxpbmU8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YmluPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwaXBlbGluZSBwcmV2aW91c2x5IHN0YXJ0ZWQgdmlhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5odG1sI2dzdC1idWZmZXItc3RyYXctc3RhcnQtcGlwZWxpbmUiIHRpdGxlPSJnc3RfYnVmZmVyX3N0cmF3X3N0YXJ0X3BpcGVsaW5lICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfc3RyYXdfc3RhcnRfcGlwZWxpbmUoKTwvY29kZT48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGFkIHByZXZpb3VzbHkgcGFzc2VkIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5odG1sI2dzdC1idWZmZXItc3RyYXctc3RhcnQtcGlwZWxpbmUiIHRpdGxlPSJnc3RfYnVmZmVyX3N0cmF3X3N0YXJ0X3BpcGVsaW5lICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfc3RyYXdfc3RhcnRfcGlwZWxpbmUoKTwvY29kZT48L2E+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCBiL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzJjMTk1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sCkBAIC0wLDAgKzEsMzYzNSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdzdEJ5dGVSZWFkZXI8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJnc3RyZWFtZXItYmFzZS5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEJhc2UgYW5kIFV0aWxsaXR5IENsYXNzZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJpdFJlYWRlciI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iZ3N0cmVhbWVyLWJhc2UuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIDAuMTEgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci50b3Bfb2ZfcGFnZSI+PC9hPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9oMj4KKzxwPkdzdEJ5dGVSZWFkZXIg4oCUIFJlYWRzIGRpZmZlcmVudCBpbnRlZ2VyLCBzdHJpbmcgYW5kIGZsb2F0aW5nIHBvaW50CisgICAgdHlwZXMgZnJvbSBhIG1lbW9yeSBidWZmZXI8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLnN5bm9wc2lzIj48L2E+PGgyPlN5bm9wc2lzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyNpbmNsdWRlICZsdDtnc3QvYmFzZS9nc3RieXRlcmVhZGVyLmgmZ3Q7CisKKyAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT47CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR1NULUJZVEUtUkVBREVSLUlOSVQ6Q0FQUyIgdGl0bGU9IkdTVF9CWVRFX1JFQURFUl9JTklUKCkiPkdTVF9CWVRFX1JFQURFUl9JTklUPC9hPiAgICAgICAgICAgICAgICAoZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUpCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1uZXciIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfbmV3ICgpIj5nc3RfYnl0ZV9yZWFkZXJfbmV3PC9hPiAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZnJlZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9mcmVlICgpIj5nc3RfYnl0ZV9yZWFkZXJfZnJlZTwvYT4gICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1pbml0IiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2luaXQgKCkiPmdzdF9ieXRlX3JlYWRlcl9pbml0PC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXBvcyIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfcG9zICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3BvczwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtcmVtYWluaW5nIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nPC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXNldC1wb3MiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfc2V0X3BvcyAoKSI+Z3N0X2J5dGVfcmVhZGVyX3NldF9wb3M8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gcG9zPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXNpemUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3NpemUgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfc2l6ZTwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXNraXAiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfc2tpcCAoKSI+Z3N0X2J5dGVfcmVhZGVyX3NraXA8L2E+ICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbmJ5dGVzPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDgiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDggKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50ODwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50ODwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MTYtYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2JlICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2JlPC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQxNjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MTYtbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2xlICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2xlPC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQxNjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MjQtYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDI0X2JlICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDI0X2JlPC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQzMjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MjQtbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDI0X2xlICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDI0X2xlPC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQzMjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MzItYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2JlICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2JlPC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQzMjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MzItbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2xlICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2xlPC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQzMjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50NjQtYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2JlICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2JlPC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50NjQtbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2xlICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2xlPC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDgiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4ICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4PC9hPiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDE2LWJlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmUgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlPC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MTY8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQxNi1sZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2xlICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9sZTwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDE2PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MjQtYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9iZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfYmU8L2E+ICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDI0LWxlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfbGUgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2xlPC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQzMi1iZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZTwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MzItbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9sZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfbGU8L2E+ICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDY0LWJlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmUgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2JlPC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQ2NC1sZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2xlICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9sZTwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50OCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDggKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDg8L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50ODwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDE2LWJlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfYmUgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2JlPC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDE2PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MTYtbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQxNl9sZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfbGU8L2E+ICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MTY8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQyNC1iZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2JlICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9iZTwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQzMjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDI0LWxlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfbGUgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2xlPC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDMyPC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MzItYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9iZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfYmU8L2E+ICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MzI8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQzMi1sZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2xlICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9sZTwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQzMjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDY0LWJlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfYmUgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2JlPC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50NjQtbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9sZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfbGU8L2E+ICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50OCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ4ICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50ODwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQxNi1iZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQxNl9iZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2JlPC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQxNjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQxNi1sZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQxNl9sZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2xlPC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQxNjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQyNC1iZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9iZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2JlPC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQyNC1sZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9sZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2xlPC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQzMi1iZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9iZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2JlPC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQzMi1sZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9sZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2xlPC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQ2NC1iZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9iZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2JlPC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQ2NC1sZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9sZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2xlPC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQzMi1sZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9sZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDMyX2xlPC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0MzItYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0MzJfYmUgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9iZTwvYT4gICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1mbG9hdDY0LWxlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDY0X2xlICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfbGU8L2E+ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1mbG9hdDY0LWJlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDY0X2JlICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfYmU8L2E+ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZmxvYXQzMi1sZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfbGUgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfbGU8L2E+ICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZmxvYXQzMi1iZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfYmUgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfYmU8L2E+ICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZmxvYXQ2NC1sZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfbGUgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfbGU8L2E+ICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDY0LWJlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9iZSAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9iZTwvYT4gICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZGF0YSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfZGF0YSAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhPC9hPiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKip2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1kdXAtZGF0YSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9kdXBfZGF0YSAoKSI+Z3N0X2J5dGVfcmVhZGVyX2R1cF9kYXRhPC9hPiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKip2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWRhdGEiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19kYXRhICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19kYXRhPC9hPiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqKnZhbDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLW1hc2tlZC1zY2FuLXVpbnQzMiIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKCkiPmdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzI8L2E+ICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiBtYXNrPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+IHBhdHRlcm48L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTsKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXN0cmluZyIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfc3RyaW5nKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfc3RyaW5nPC9hPiAgICAgICAgICAocmVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKQorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtc3RyaW5nLXV0ZjgiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3N0cmluZ191dGY4ICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3N0cmluZ191dGY4PC9hPiAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKnN0cjwvY29kZT48L2VtPik7CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstc3RyaW5nIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3RyaW5nKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3N0cmluZzwvYT4gICAgICAgICAocmVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKQorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXN0cmluZy11dGY4IiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3RyaW5nX3V0ZjggKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3N0cmluZ191dGY4PC9hPiAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqc3RyPC9jb2RlPjwvZW0+KTsKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZHVwLXN0cmluZyIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nKCkiPmdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nPC9hPiAgICAgICAgICAocmVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKQorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1kdXAtc3RyaW5nLXV0ZjgiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGY4ICgpIj5nc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGY4PC9hPiAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKnN0cjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWR1cC1zdHJpbmctdXRmMTYiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGYxNiAoKSI+Z3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmdfdXRmMTY8L2E+ICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQxNjwvc3Bhbj48L2E+ICoqc3RyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZHVwLXN0cmluZy11dGYzMiIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjMyICgpIj5nc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGYzMjwvYT4gICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gKipzdHI8L2NvZGU+PC9lbT4pOworI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1za2lwLXN0cmluZyIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZygpIj5nc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmc8L2E+ICAgICAgICAgKHJlYWRlcikKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItc2tpcC1zdHJpbmctdXRmOCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGY4ICgpIj5nc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmODwvYT4gICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1za2lwLXN0cmluZy11dGYxNiIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGYxNiAoKSI+Z3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjE2PC9hPiAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItc2tpcC1zdHJpbmctdXRmMzIiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmMzIgKCkiPmdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGYzMjwvYT4gICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXNraXAtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3NraXBfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfc2tpcF91bmNoZWNrZWQ8L2E+ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBuYnl0ZXM8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ4PC9zcGFuPjwvYT4gICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50OC11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDhfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDhfdW5jaGVja2VkPC9hPiAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQxNiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50MTY8L3NwYW4+PC9hPiAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDE2LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfYmVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2JlX3VuY2hlY2tlZDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQxNiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50MTY8L3NwYW4+PC9hPiAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDE2LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfbGVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2xlX3VuY2hlY2tlZDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50MzI8L3NwYW4+PC9hPiAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDI0LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfYmVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDI0X2JlX3VuY2hlY2tlZDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50MzI8L3NwYW4+PC9hPiAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDI0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfbGVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDI0X2xlX3VuY2hlY2tlZDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50MzI8L3NwYW4+PC9hPiAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDMyLWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfYmVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2JlX3VuY2hlY2tlZDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50MzI8L3NwYW4+PC9hPiAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDMyLWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfbGVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2xlX3VuY2hlY2tlZDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDY0LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfYmVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2JlX3VuY2hlY2tlZDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDY0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfbGVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2xlX3VuY2hlY2tlZDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDg8L3NwYW4+PC9hPiAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQ4LXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDhfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4X3VuY2hlY2tlZDwvYT4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQxNjwvc3Bhbj48L2E+ICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MTYtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9iZV91bmNoZWNrZWQ8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDE2Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MTY8L3NwYW4+PC9hPiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDE2LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2xlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfbGVfdW5jaGVja2VkPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDMyPC9zcGFuPjwvYT4gICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQyNC1iZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9iZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2JlX3VuY2hlY2tlZDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MjQtbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfbGVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9sZV91bmNoZWNrZWQ8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MzI8L3NwYW4+PC9hPiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDMyLWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmVfdW5jaGVja2VkPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDMyPC9zcGFuPjwvYT4gICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQzMi1sZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9sZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlX3VuY2hlY2tlZDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50NjQtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9iZV91bmNoZWNrZWQ8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDY0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2xlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfbGVfdW5jaGVja2VkPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDgiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDg8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50OC11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ4X3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50OF91bmNoZWNrZWQ8L2E+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MTYiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDE2PC9zcGFuPjwvYT4gICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MTYtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfYmVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQxNl9iZV91bmNoZWNrZWQ8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MTYiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDE2PC9zcGFuPjwvYT4gICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MTYtbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfbGVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQxNl9sZV91bmNoZWNrZWQ8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDMyPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MjQtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfYmVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9iZV91bmNoZWNrZWQ8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDMyPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MjQtbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfbGVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9sZV91bmNoZWNrZWQ8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDMyPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MzItYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfYmVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9iZV91bmNoZWNrZWQ8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDMyPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MzItbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfbGVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9sZV91bmNoZWNrZWQ8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50NjQtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfYmVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9iZV91bmNoZWNrZWQ8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50NjQtbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfbGVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9sZV91bmNoZWNrZWQ8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDgtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDhfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50OF91bmNoZWNrZWQ8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDE2Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MTY8L3NwYW4+PC9hPiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQxNi1iZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfYmVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfYmVfdW5jaGVja2VkPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDE2PC9zcGFuPjwvYT4gICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MTYtbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2xlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2xlX3VuY2hlY2tlZDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDI0LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9iZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9iZV91bmNoZWNrZWQ8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MzI8L3NwYW4+PC9hPiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQyNC1sZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfbGVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfbGVfdW5jaGVja2VkPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDMyPC9zcGFuPjwvYT4gICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MzItYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2JlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2JlX3VuY2hlY2tlZDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDMyLWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9sZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9sZV91bmNoZWNrZWQ8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQ2NC1iZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfYmVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfYmVfdW5jaGVja2VkPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50NjQtbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2xlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2xlX3VuY2hlY2tlZDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nZmxvYXQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0MzItbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDMyX2xlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDMyX2xlX3VuY2hlY2tlZDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nZmxvYXQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0MzItYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDMyX2JlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDMyX2JlX3VuY2hlY2tlZDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1mbG9hdDY0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9sZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9sZV91bmNoZWNrZWQ8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdkb3VibGU8L3NwYW4+PC9hPiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQ2NC1iZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfYmVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfYmVfdW5jaGVja2VkPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdmbG9hdDwvc3Bhbj48L2E+ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0MzItbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQzMl9sZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfbGVfdW5jaGVja2VkPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdmbG9hdDwvc3Bhbj48L2E+ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0MzItYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQzMl9iZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfYmVfdW5jaGVja2VkPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nZG91YmxlPC9zcGFuPjwvYT4gICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDY0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfbGVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2xlX3VuY2hlY2tlZDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZmxvYXQ2NC1iZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2JlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9iZV91bmNoZWNrZWQ8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWR1cC1kYXRhLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9kdXBfZGF0YV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9kdXBfZGF0YV91bmNoZWNrZWQ8L2E+ICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOworY29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDg8L3NwYW4+PC9hPiAqICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWRhdGEtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhX3VuY2hlY2tlZDwvYT4gICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7Citjb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50ODwvc3Bhbj48L2E+ICogICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWRhdGEtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2RhdGFfdW5jaGVja2VkPC9hPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gcHJvdmlkZXMgYSBieXRlIHJlYWRlciB0aGF0IGNhbiByZWFkIGRpZmZlcmVudCBpbnRlZ2VyIGFuZAorZmxvYXRpbmcgcG9pbnQgdHlwZXMgZnJvbSBhIG1lbW9yeSBidWZmZXIuIEl0IHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgcmVhZGluZworc2lnbmVkL3Vuc2lnbmVkLCBsaXR0bGUvYmlnIGVuZGlhbiBpbnRlZ2VycyBvZiA4LCAxNiwgMjQsIDMyIGFuZCA2NCBiaXRzCithbmQgZnVuY3Rpb25zIGZvciByZWFkaW5nIGxpdHRsZS9iaWcgZW5kaWFuIGZsb2F0aW5nIHBvaW50cyBudW1iZXJzIG9mCiszMiBhbmQgNjQgYml0cy4gSXQgYWxzbyBwcm92aWRlcyBmdW5jdGlvbnMgdG8gcmVhZCBOVUwtdGVybWluYXRlZCBzdHJpbmdzCitpbiB2YXJpb3VzIGNoYXJhY3RlciBlbmNvZGluZ3MuCis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEJ5dGVSZWFkZXIiPjwvYT48aDM+R3N0Qnl0ZVJlYWRlcjwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBndWludDggKmRhdGE7CisgIGd1aW50IHNpemU7CisKKyAgZ3VpbnQgYnl0ZTsgIC8qIEJ5dGUgcG9zaXRpb24gKi8KK30gR3N0Qnl0ZVJlYWRlcjsKKzwvcHJlPgorPHA+CitBIGJ5dGUgcmVhZGVyIGluc3RhbmNlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y29uc3TCoDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJ5dGVSZWFkZXIuZGF0YSI+PC9hPmRhdGE8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPkRhdGEgZnJvbSB3aGljaCB0aGUgYml0IHJlYWRlciB3aWxsIHJlYWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0Qnl0ZVJlYWRlci5zaXplIj48L2E+c2l6ZTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+U2l6ZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPiBpbiBieXRlczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCeXRlUmVhZGVyLmJ5dGUiPjwvYT5ieXRlPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5DdXJyZW50IGJ5dGUgcG9zaXRpb248L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHU1QtQllURS1SRUFERVItSU5JVDpDQVBTIj48L2E+PGgzPkdTVF9CWVRFX1JFQURFUl9JTklUKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0JZVEVfUkVBREVSX0lOSVQoZGF0YSwgc2l6ZSkge2RhdGEsIHNpemUsIDB9Cis8L3ByZT4KKzxwPgorQSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IG11c3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCB0aGlzIG1hY3JvLCBiZWZvcmUgaXQgY2FuIGJlCit1c2VkLiBUaGlzIG1hY3JvIGNhbiB1c2VkIGJlIHRvIGluaXRpYWxpemUgYSB2YXJpYWJsZSwgYnV0IGl0IGNhbm5vdAorYmUgYXNzaWduZWQgdG8gYSB2YXJpYWJsZS4gSW4gdGhhdCBjYXNlIHlvdSBoYXZlIHRvIHVzZQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItaW5pdCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9pbml0ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9ieXRlX3JlYWRlcl9pbml0KCk8L2NvZGU+PC9hPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkRhdGEgZnJvbSB3aGljaCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBzaG91bGQgcmVhZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5TaXplIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+IGluIGJ5dGVzPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLW5ldyI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfbmV3ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqICAgICBnc3RfYnl0ZV9yZWFkZXJfbmV3ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGUgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZSwgd2hpY2ggd2lsbCByZWFkIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4uCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdzdF9ieXRlX3JlYWRlcl9mcmVlCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5kYXRhIGZyb20gd2hpY2ggdGhlCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IHNob3VsZCByZWFkLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIGlucHV0LiBEZWZhdWx0IGlzIHRyYW5zZmVyIG5vbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+aW48L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiBsZW5ndGg9c2l6ZV08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+U2l6ZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPiBpbiBieXRlczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZnJlZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZnJlZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZnJlZSAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0ZyZWVzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZSwgd2hpY2ggd2FzIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1uZXciIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfbmV3ICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9ieXRlX3JlYWRlcl9uZXcoKTwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIGlucHV0LiBEZWZhdWx0IGlzIHRyYW5zZmVyIG5vbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+aW48L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWluaXQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2luaXQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2luaXQgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICpkYXRhPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0luaXRpYWxpemVzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZSB0byByZWFkIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4uIFRoaXMgZnVuY3Rpb24KK2NhbiBiZSBjYWxsZWQgb24gYWxyZWFkeSBpbml0aWFsaXplZCBpbnN0YW5jZXMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5kYXRhIGZyb20gd2hpY2gKK3RoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IHNob3VsZCByZWFkLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIGlucHV0LiBEZWZhdWx0IGlzIHRyYW5zZmVyIG5vbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+aW48L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiBsZW5ndGg9c2l6ZV08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+U2l6ZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPiBpbiBieXRlczwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtcG9zIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfcG9zICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfcG9zICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0dXJucyB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2UgaW4gYnl0ZXMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT4gaW4gYnl0ZXMuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1yZW1haW5pbmciPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZXR1cm5zIHRoZSByZW1haW5pbmcgbnVtYmVyIG9mIGJ5dGVzIG9mIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIHJlbWFpbmluZyBudW1iZXIgb2YgYnl0ZXMgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPiBpbnN0YW5jZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItc2V0LXBvcyI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfc2V0X3BvcyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfc2V0X3BvcyAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHBvczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgdGhlIG5ldyBwb3NpdGlvbiBvZiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2UgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBvczwvY29kZT48L2VtPiBpbiBieXRlcy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wb3M8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIG5ldyBwb3NpdGlvbiBpbiBieXRlczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHBvc2l0aW9uIGNvdWxkIGJlIHNldCBzdWNjZXNzZnVsbHksIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4KK290aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXNpemUiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF9zaXplICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfc2l6ZSAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIG9mIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+IGluc3RhbmNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1za2lwIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9za2lwICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9za2lwICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbmJ5dGVzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2tpcHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ieXRlczwvY29kZT48L2VtPiBieXRlcyBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYnl0ZXM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG51bWJlciBvZiBieXRlcyB0byBza2lwPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJ5dGVzPC9jb2RlPjwvZW0+IGJ5dGVzIGNvdWxkIGJlIHNraXBwZWQsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50OCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDggKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ4ICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDg8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhIHNpZ25lZCA4IGJpdCBpbnRlZ2VyIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPiBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Qb2ludGVyIHRvIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDg8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDE2LWJlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfYmUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9iZSAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQxNjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGEgc2lnbmVkIDE2IGJpdCBiaWcgZW5kaWFuIGludGVnZXIgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+CithbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Qb2ludGVyIHRvIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQxNjwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50MTYtbGUiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9sZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2xlICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDE2PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYSBzaWduZWQgMTYgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KK2FuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlBvaW50ZXIgdG8gYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDE2PC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQyNC1iZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDI0X2JlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfYmUgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MzI8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhIHNpZ25lZCAyNCBiaXQgYmlnIGVuZGlhbiBpbnRlZ2VyIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgorYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UG9pbnRlciB0byBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MzI8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDI0LWxlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfbGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9sZSAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQzMjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGEgc2lnbmVkIDI0IGJpdCBsaXR0bGUgZW5kaWFuIGludGVnZXIgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+CithbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Qb2ludGVyIHRvIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQzMjwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50MzItYmUiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9iZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2JlICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDMyPC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYSBzaWduZWQgMzIgYml0IGJpZyBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KK2FuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlBvaW50ZXIgdG8gYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDMyPC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQzMi1sZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2xlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfbGUgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MzI8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhIHNpZ25lZCAzMiBiaXQgbGl0dGxlIGVuZGlhbiBpbnRlZ2VyIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgorYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UG9pbnRlciB0byBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MzI8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDY0LWJlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfYmUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9iZSAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGEgc2lnbmVkIDY0IGJpdCBiaWcgZW5kaWFuIGludGVnZXIgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+CithbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Qb2ludGVyIHRvIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50NjQtbGUiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9sZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2xlICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYSBzaWduZWQgNjQgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KK2FuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlBvaW50ZXIgdG8gYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50OCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDggICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhbiB1bnNpZ25lZCA4IGJpdCBpbnRlZ2VyIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPiBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Qb2ludGVyIHRvIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDE2LWJlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQxNjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGFuIHVuc2lnbmVkIDE2IGJpdCBiaWcgZW5kaWFuIGludGVnZXIgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+CithbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Qb2ludGVyIHRvIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDE2PC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MTYtbGUiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfbGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfbGUgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDE2PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYW4gdW5zaWduZWQgMTYgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KK2FuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlBvaW50ZXIgdG8gYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MTY8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQyNC1iZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9iZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9iZSAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhbiB1bnNpZ25lZCAyNCBiaXQgYmlnIGVuZGlhbiBpbnRlZ2VyIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgorYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UG9pbnRlciB0byBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDI0LWxlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2xlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2xlICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGFuIHVuc2lnbmVkIDI0IGJpdCBsaXR0bGUgZW5kaWFuIGludGVnZXIgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+CithbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Qb2ludGVyIHRvIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MzItYmUiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYW4gdW5zaWduZWQgMzIgYml0IGJpZyBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KK2FuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlBvaW50ZXIgdG8gYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQzMi1sZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9sZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9sZSAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhbiB1bnNpZ25lZCAzMiBiaXQgbGl0dGxlIGVuZGlhbiBpbnRlZ2VyIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgorYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UG9pbnRlciB0byBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDY0LWJlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2JlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2JlICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGFuIHVuc2lnbmVkIDY0IGJpdCBiaWcgZW5kaWFuIGludGVnZXIgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+CithbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Qb2ludGVyIHRvIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50NjQtbGUiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfbGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfbGUgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYW4gdW5zaWduZWQgNjQgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KK2FuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlBvaW50ZXIgdG8gYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQ4Ij48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDggKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50OCAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDg8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhIHNpZ25lZCA4IGJpdCBpbnRlZ2VyIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPiBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UG9pbnRlciB0byBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ4PC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MTYtYmUiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfYmUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfYmUgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQxNjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGEgc2lnbmVkIDE2IGJpdCBiaWcgZW5kaWFuIGludGVnZXIgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+CitidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UG9pbnRlciB0byBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MTY8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQxNi1sZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQxNl9sZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQxNl9sZSAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDE2PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYSBzaWduZWQgMTYgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KK2J1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Qb2ludGVyIHRvIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQxNjwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWludDI0LWJlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2JlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2JlICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MzI8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhIHNpZ25lZCAyNCBiaXQgYmlnIGVuZGlhbiBpbnRlZ2VyIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgorYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlBvaW50ZXIgdG8gYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDMyPC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MjQtbGUiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfbGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfbGUgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQzMjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGEgc2lnbmVkIDI0IGJpdCBsaXR0bGUgZW5kaWFuIGludGVnZXIgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+CitidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UG9pbnRlciB0byBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MzI8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQzMi1iZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9iZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9iZSAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDMyPC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYSBzaWduZWQgMzIgYml0IGJpZyBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KK2J1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Qb2ludGVyIHRvIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQzMjwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWludDMyLWxlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2xlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2xlICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MzI8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhIHNpZ25lZCAzMiBiaXQgbGl0dGxlIGVuZGlhbiBpbnRlZ2VyIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgorYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlBvaW50ZXIgdG8gYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDMyPC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50NjQtYmUiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfYmUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfYmUgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGEgc2lnbmVkIDY0IGJpdCBiaWcgZW5kaWFuIGludGVnZXIgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+CitidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UG9pbnRlciB0byBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQ2NC1sZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9sZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9sZSAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYSBzaWduZWQgNjQgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KK2J1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Qb2ludGVyIHRvIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQ4Ij48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ4ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ4ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhbiB1bnNpZ25lZCA4IGJpdCBpbnRlZ2VyIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPiBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UG9pbnRlciB0byBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MTYtYmUiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2JlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQxNl9iZSAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQxNjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGFuIHVuc2lnbmVkIDE2IGJpdCBiaWcgZW5kaWFuIGludGVnZXIgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+CitidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UG9pbnRlciB0byBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQxNjwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQxNi1sZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfbGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2xlICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDE2PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYW4gdW5zaWduZWQgMTYgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KK2J1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Qb2ludGVyIHRvIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDE2PC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDI0LWJlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9iZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfYmUgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhbiB1bnNpZ25lZCAyNCBiaXQgYmlnIGVuZGlhbiBpbnRlZ2VyIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgorYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlBvaW50ZXIgdG8gYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MjQtbGUiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2xlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9sZSAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGFuIHVuc2lnbmVkIDI0IGJpdCBsaXR0bGUgZW5kaWFuIGludGVnZXIgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+CitidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UG9pbnRlciB0byBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQzMi1iZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfYmUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2JlICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYW4gdW5zaWduZWQgMzIgYml0IGJpZyBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KK2J1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Qb2ludGVyIHRvIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDMyLWxlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9sZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfbGUgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhbiB1bnNpZ25lZCAzMiBiaXQgbGl0dGxlIGVuZGlhbiBpbnRlZ2VyIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgorYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlBvaW50ZXIgdG8gYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50NjQtYmUiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2JlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9iZSAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGFuIHVuc2lnbmVkIDY0IGJpdCBiaWcgZW5kaWFuIGludGVnZXIgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+CitidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UG9pbnRlciB0byBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQ2NC1sZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfbGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2xlICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYW4gdW5zaWduZWQgNjQgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KK2J1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Qb2ludGVyIHRvIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1mbG9hdDMyLWxlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9sZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0MzJfbGUgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYSAzMiBiaXQgbGl0dGxlIGVuZGlhbiBmbG9hdGluZyBwb2ludCB2YWx1ZSBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KK2FuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlBvaW50ZXIgdG8gYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1mbG9hdDMyLWJlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9iZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0MzJfYmUgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYSAzMiBiaXQgYmlnIGVuZGlhbiBmbG9hdGluZyBwb2ludCB2YWx1ZSBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KK2FuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlBvaW50ZXIgdG8gYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1mbG9hdDY0LWxlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9sZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfbGUgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhIDY0IGJpdCBsaXR0bGUgZW5kaWFuIGZsb2F0aW5nIHBvaW50IHZhbHVlIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgorYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UG9pbnRlciB0byBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQ2NC1iZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfYmUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDY0X2JlICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYSA2NCBiaXQgYmlnIGVuZGlhbiBmbG9hdGluZyBwb2ludCB2YWx1ZSBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KK2FuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlBvaW50ZXIgdG8gYSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDMyLWxlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfbGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQzMl9sZSAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGEgMzIgYml0IGxpdHRsZSBlbmRpYW4gZmxvYXRpbmcgcG9pbnQgdmFsdWUgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+CitidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UG9pbnRlciB0byBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDMyLWJlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfYmUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQzMl9iZSAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGEgMzIgYml0IGJpZyBlbmRpYW4gZmxvYXRpbmcgcG9pbnQgdmFsdWUgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+CitidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UG9pbnRlciB0byBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDY0LWxlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfbGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9sZSAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYSA2NCBiaXQgbGl0dGxlIGVuZGlhbiBmbG9hdGluZyBwb2ludCB2YWx1ZSBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KK2J1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Qb2ludGVyIHRvIGEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZmxvYXQ2NC1iZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2JlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfYmUgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGEgNjQgYml0IGJpZyBlbmRpYW4gZmxvYXRpbmcgcG9pbnQgdmFsdWUgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+CitidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UG9pbnRlciB0byBhIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtZGF0YSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGEgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JldHVybnMgYSBjb25zdGFudCBwb2ludGVyIHRvIHRoZSBjdXJyZW50IGRhdGEKK3Bvc2l0aW9uIGlmIGF0IGxlYXN0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+IGJ5dGVzIGFyZSBsZWZ0IGFuZAordXBkYXRlcyB0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlNpemUgaW4gYnl0ZXM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hZGRyZXNzIG9mIGEKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiBwb2ludGVyIHZhcmlhYmxlIGluIHdoaWNoIHRvIHN0b3JlIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiBsZW5ndGg9c2l6ZV08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1kdXAtZGF0YSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZHVwX2RhdGEgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2R1cF9kYXRhICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdfZnJlZQorPC9wPgorPHA+CitSZXR1cm5zIGEgbmV3bHktYWxsb2NhdGVkIGNvcHkgb2YgdGhlIGN1cnJlbnQgZGF0YQorcG9zaXRpb24gaWYgYXQgbGVhc3QgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4gYnl0ZXMgYXJlIGxlZnQgYW5kCit1cGRhdGVzIHRoZSBjdXJyZW50IHBvc2l0aW9uLiBGcmVlIHdpdGggPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1NZW1vcnktQWxsb2NhdGlvbi5odG1sI2ctZnJlZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX2ZyZWUoKTwvY29kZT48L2E+IHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlNpemUgaW4gYnl0ZXM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hZGRyZXNzIG9mIGEKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiBwb2ludGVyIHZhcmlhYmxlIGluIHdoaWNoIHRvIHN0b3JlIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiBsZW5ndGg9c2l6ZV08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWRhdGEiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfcGVla19kYXRhICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICoqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0dXJucyBhIGNvbnN0YW50IHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZGF0YQorcG9zaXRpb24gaWYgYXQgbGVhc3QgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4gYnl0ZXMgYXJlIGxlZnQgYW5kCitrZWVwcyB0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlNpemUgaW4gYnl0ZXM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hZGRyZXNzIG9mIGEKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiBwb2ludGVyIHZhcmlhYmxlIGluIHdoaWNoIHRvIHN0b3JlIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiBsZW5ndGg9c2l6ZV08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjI8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1tYXNrZWQtc2Nhbi11aW50MzIiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiBtYXNrPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+IHBhdHRlcm48L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2NhbiBmb3IgcGF0dGVybiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGF0dGVybjwvY29kZT48L2VtPiB3aXRoIGFwcGxpZWQgbWFzayA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWFzazwvY29kZT48L2VtPiBpbiB0aGUgYnl0ZSByZWFkZXIgZGF0YSwKK3N0YXJ0aW5nIGZyb20gb2Zmc2V0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4gcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8cD4KK1RoZSBieXRlcyBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGF0dGVybjwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1hc2s8L2NvZGU+PC9lbT4gYXJlIGludGVycHJldGVkIGxlZnQtdG8tcmlnaHQsIHJlZ2FyZGxlc3MKK29mIGVuZGlhbm5lc3MuICBBbGwgZm91ciBieXRlcyBvZiB0aGUgcGF0dGVybiBtdXN0IGJlIHByZXNlbnQgaW4gdGhlCitieXRlIHJlYWRlciBkYXRhIGZvciBpdCB0byBtYXRjaCwgZXZlbiBpZiB0aGUgZmlyc3Qgb3IgbGFzdCBieXRlcyBhcmUgbWFza2VkCitvdXQuCis8L3A+Cis8cD4KK0l0IGlzIGFuIGVycm9yIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRob3V0IG1ha2luZyBzdXJlIHRoYXQgdGhlcmUgaXMKK2Vub3VnaCBkYXRhIChvZmZzZXQrc2l6ZSBieXRlcykgaW4gdGhlIGJ5dGUgcmVhZGVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWFzazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5tYXNrIHRvIGFwcGx5IHRvIGRhdGEgYmVmb3JlIG1hdGNoaW5nIGFnYWluc3QgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhdHRlcm48L2NvZGU+PC9lbT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGF0dGVybjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wYXR0ZXJuIHRvIG1hdGNoIChhZnRlciBtYXNrIGlzIGFwcGxpZWQpPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+b2Zmc2V0IGZyb20gd2hpY2ggdG8gc3RhcnQgc2Nhbm5pbmcsIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50Citwb3NpdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5udW1iZXIgb2YgYnl0ZXMgdG8gc2NhbiBmcm9tIG9mZnNldDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm9mZnNldCBvZiB0aGUgZmlyc3QgbWF0Y2gsIG9yIC0xIGlmIG5vIG1hdGNoIHdhcyBmb3VuZC4KK0V4YW1wbGU6Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CisvLyBBc3N1bWUgdGhlIHJlYWRlciBjb250YWlucyAweDAwIDB4MDEgMHgwMiAuLi4gMHhmZSAweGZmCitnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyIChyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4MDAwMTAyMDMsIDAsIDI1Nik7CisvLyAtJmd0OyByZXR1cm5zIDAKK2dzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKHJlYWRlciwgMHhmZmZmZmZmZiwgMHgwMDAxMDIwMywgMSwgMjU1KTsKKy8vIC0mZ3Q7IHJldHVybnMgLTEKK2dzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKHJlYWRlciwgMHhmZmZmZmZmZiwgMHgwMTAyMDMwNCwgMSwgMjU1KTsKKy8vIC0mZ3Q7IHJldHVybnMgMQorZ3N0X2J5dGVfcmVhZGVyX21hc2tlZF9zY2FuX3VpbnQzMiAocmVhZGVyLCAweGZmZmYsIDB4MDAwMSwgMCwgMjU2KTsKKy8vIC0mZ3Q7IHJldHVybnMgLTEKK2dzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKHJlYWRlciwgMHhmZmZmLCAweDAyMDMsIDAsIDI1Nik7CisvLyAtJmd0OyByZXR1cm5zIDAKK2dzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKHJlYWRlciwgMHhmZmZmMDAwMCwgMHgwMjAzMDAwMCwgMCwgMjU2KTsKKy8vIC0mZ3Q7IHJldHVybnMgMgorZ3N0X2J5dGVfcmVhZGVyX21hc2tlZF9zY2FuX3VpbnQzMiAocmVhZGVyLCAweGZmZmYwMDAwLCAweDAyMDMwMDAwLCAwLCA0KTsKKy8vIC0mZ3Q7IHJldHVybnMgLTEKKzwvcHJlPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1zdHJpbmciPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF9zdHJpbmcoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3N0cmluZyhyZWFkZXIsc3RyKTwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXN0cmluZy11dGY4Ij48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfc3RyaW5nX3V0ZjggKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF9zdHJpbmdfdXRmOCAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKnN0cjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JldHVybnMgYSBjb25zdGFudCBwb2ludGVyIHRvIHRoZSBjdXJyZW50IGRhdGEgcG9zaXRpb24gaWYgdGhlcmUgaXMKK2EgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIGluIHRoZSBkYXRhICh0aGlzIGNvdWxkIGJlIGp1c3QgYSBOVUwgdGVybWluYXRvciksCithZHZhbmNpbmcgdGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIGJ5dGUgYWZ0ZXIgdGhlIHN0cmluZy4gVGhpcyB3aWxsIHdvcmsKK2ZvciBhbnkgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggYSBjaGFyYWN0ZXIgd2lkdGggb2YgOCBiaXRzLCBzbyBBU0NJSSwKK1VURi04LCBJU08tODg1OS1OIGV0Yy4KKzwvcD4KKzxwPgorTm8gaW5wdXQgY2hlY2tpbmcgZm9yIHZhbGlkIFVURi04IGlzIGRvbmUuCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gd2lsbCBmYWlsIGlmIG5vIE5VTC10ZXJtaW5hdG9yIHdhcyBmb3VuZCBpbiBpbiB0aGUgZGF0YS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YWRkcmVzcyBvZiBhCis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+IHBvaW50ZXIgdmFyaWVibGUgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IHplcm8tdGVybWluYXRlZD0xXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgYSBzdHJpbmcgY291bGQgYmUgZm91bmQsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXN0cmluZyI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla19zdHJpbmcoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfcGVla19zdHJpbmcocmVhZGVyLHN0cik8L3ByZT4KKzxwPgorUmV0dXJucyBhIGNvbnN0YW50IHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZGF0YSBwb3NpdGlvbiBpZiB0aGVyZSBpcworYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgaW4gdGhlIGRhdGEgKHRoaXMgY291bGQgYmUganVzdCBhIE5VTCB0ZXJtaW5hdG9yKS4KK1RoZSBjdXJyZW50IHBvc2l0aW9uIHdpbGwgYmUgbWFpbnRhaW5lZC4gVGhpcyB3aWxsIHdvcmsgZm9yIGFueQorTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggYSBjaGFyYWN0ZXIgd2lkdGggb2YgOCBiaXRzLCBzbyBBU0NJSSwKK1VURi04LCBJU08tODg1OS1OIGV0Yy4KKzwvcD4KKzxwPgorVGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwgaWYgbm8gTlVMLXRlcm1pbmF0b3Igd2FzIGZvdW5kIGluIGluIHRoZSBkYXRhLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hZGRyZXNzIG9mIGEKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gcG9pbnRlciB2YXJpZWJsZSBpbiB3aGljaCB0byBzdG9yZSB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gemVyby10ZXJtaW5hdGVkPTFdPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBhIHN0cmluZyBjb3VsZCBiZSBza2lwcGVkLCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI0PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1zdHJpbmctdXRmOCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla19zdHJpbmdfdXRmOCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfcGVla19zdHJpbmdfdXRmOCAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqc3RyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0dXJucyBhIGNvbnN0YW50IHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZGF0YSBwb3NpdGlvbiBpZiB0aGVyZSBpcworYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgaW4gdGhlIGRhdGEgKHRoaXMgY291bGQgYmUganVzdCBhIE5VTCB0ZXJtaW5hdG9yKS4KK1RoZSBjdXJyZW50IHBvc2l0aW9uIHdpbGwgYmUgbWFpbnRhaW5lZC4gVGhpcyB3aWxsIHdvcmsgZm9yIGFueQorTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggYSBjaGFyYWN0ZXIgd2lkdGggb2YgOCBiaXRzLCBzbyBBU0NJSSwKK1VURi04LCBJU08tODg1OS1OIGV0Yy4KKzwvcD4KKzxwPgorTm8gaW5wdXQgY2hlY2tpbmcgZm9yIHZhbGlkIFVURi04IGlzIGRvbmUuCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gd2lsbCBmYWlsIGlmIG5vIE5VTC10ZXJtaW5hdG9yIHdhcyBmb3VuZCBpbiBpbiB0aGUgZGF0YS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YWRkcmVzcyBvZiBhCis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+IHBvaW50ZXIgdmFyaWVibGUgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHJlc3VsdC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IHplcm8tdGVybWluYXRlZD0xXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgYSBzdHJpbmcgY291bGQgYmUgc2tpcHBlZCwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWR1cC1zdHJpbmciPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmcoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZyhyZWFkZXIsc3RyKTwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZHVwLXN0cmluZy11dGY4Ij48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjggKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmdfdXRmOCAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKnN0cjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdfZnJlZQorPC9wPgorPHA+CitGSVhNRTpSZWFkcyAoY29waWVzKSBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyBpbiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZSwKK2FkdmFuY2luZyB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUgYnl0ZSBhZnRlciB0aGUgc3RyaW5nLiBUaGlzIHdpbGwgd29yaworZm9yIGFueSBOVUwtdGVybWluYXRlZCBzdHJpbmcgd2l0aCBhIGNoYXJhY3RlciB3aWR0aCBvZiA4IGJpdHMsIHNvIEFTQ0lJLAorVVRGLTgsIElTTy04ODU5LU4gZXRjLiBObyBpbnB1dCBjaGVja2luZyBmb3IgdmFsaWQgVVRGLTggaXMgZG9uZS4KKzwvcD4KKzxwPgorVGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwgaWYgbm8gTlVMLXRlcm1pbmF0b3Igd2FzIGZvdW5kIGluIGluIHRoZSBkYXRhLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hZGRyZXNzIG9mIGEKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gcG9pbnRlciB2YXJpZWJsZSBpbiB3aGljaCB0byBzdG9yZSB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gemVyby10ZXJtaW5hdGVkPTFdPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBhIHN0cmluZyBjb3VsZCBiZSByZWFkIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cjwvY29kZT48L2VtPiwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuIFRoZQorc3RyaW5nIHB1dCBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHI8L2NvZGU+PC9lbT4gbXVzdCBiZSBmcmVlZCB3aXRoIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItTWVtb3J5LUFsbG9jYXRpb24uaHRtbCNnLWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19mcmVlKCk8L2NvZGU+PC9hPiB3aGVuIG5vIGxvbmdlciBuZWVkZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWR1cC1zdHJpbmctdXRmMTYiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmdfdXRmMTYgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmdfdXRmMTYgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDE2PC9zcGFuPjwvYT4gKipzdHI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitGcmVlLWZ1bmN0aW9uOiBnX2ZyZWUKKzwvcD4KKzxwPgorUmV0dXJucyBhIG5ld2x5LWFsbG9jYXRlZCBjb3B5IG9mIHRoZSBjdXJyZW50IGRhdGEgcG9zaXRpb24gaWYgdGhlcmUgaXMKK2EgTlVMLXRlcm1pbmF0ZWQgVVRGLTE2IHN0cmluZyBpbiB0aGUgZGF0YSAodGhpcyBjb3VsZCBiZSBhbiBlbXB0eSBzdHJpbmcKK2FzIHdlbGwpLCBhbmQgYWR2YW5jZXMgdGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8cD4KK05vIGlucHV0IGNoZWNraW5nIGZvciB2YWxpZCBVVEYtMTYgaXMgZG9uZS4gVGhpcyBmdW5jdGlvbiBpcyBlbmRpYW5uZXNzCithZ25vc3RpYyAtIHlvdSBzaG91bGQgbm90IGFzc3VtZSB0aGUgVVRGLTE2IGNoYXJhY3RlcnMgYXJlIGluIGhvc3QKK2VuZGlhbm5lc3MuCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gd2lsbCBmYWlsIGlmIG5vIE5VTC10ZXJtaW5hdG9yIHdhcyBmb3VuZCBpbiBpbiB0aGUgZGF0YS4KKzwvcD4KKzxwPgorTm90ZTogdGhlcmUgaXMgbm8gcGVlayBvciBnZXQgdmFyaWFudCBvZiB0aGlzIGZ1bmN0aW9uIHRvIGVuc3VyZSBjb3JyZWN0CitieXRlIGFsaWdubWVudCBvZiB0aGUgVVRGLTE2IHN0cmluZy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YWRkcmVzcyBvZiBhCis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MTY8L3NwYW4+PC9hPiBwb2ludGVyIHZhcmllYmxlIGluIHdoaWNoIHRvIHN0b3JlIHRoZSByZXN1bHQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiB6ZXJvLXRlcm1pbmF0ZWQ9MV08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIGEgc3RyaW5nIGNvdWxkIGJlIHJlYWQsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLiBUaGUKK3N0cmluZyBwdXQgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RyPC9jb2RlPjwvZW0+IG11c3QgYmUgZnJlZWQgd2l0aCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLU1lbW9yeS1BbGxvY2F0aW9uLmh0bWwjZy1mcmVlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfZnJlZSgpPC9jb2RlPjwvYT4gd2hlbiBubyBsb25nZXIgbmVlZGVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1kdXAtc3RyaW5nLXV0ZjMyIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjMyICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjMyICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICoqc3RyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ19mcmVlCis8L3A+Cis8cD4KK1JldHVybnMgYSBuZXdseS1hbGxvY2F0ZWQgY29weSBvZiB0aGUgY3VycmVudCBkYXRhIHBvc2l0aW9uIGlmIHRoZXJlIGlzCithIE5VTC10ZXJtaW5hdGVkIFVURi0zMiBzdHJpbmcgaW4gdGhlIGRhdGEgKHRoaXMgY291bGQgYmUgYW4gZW1wdHkgc3RyaW5nCithcyB3ZWxsKSwgYW5kIGFkdmFuY2VzIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPHA+CitObyBpbnB1dCBjaGVja2luZyBmb3IgdmFsaWQgVVRGLTMyIGlzIGRvbmUuIFRoaXMgZnVuY3Rpb24gaXMgZW5kaWFubmVzcworYWdub3N0aWMgLSB5b3Ugc2hvdWxkIG5vdCBhc3N1bWUgdGhlIFVURi0zMiBjaGFyYWN0ZXJzIGFyZSBpbiBob3N0CitlbmRpYW5uZXNzLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIHdpbGwgZmFpbCBpZiBubyBOVUwtdGVybWluYXRvciB3YXMgZm91bmQgaW4gaW4gdGhlIGRhdGEuCis8L3A+Cis8cD4KK05vdGU6IHRoZXJlIGlzIG5vIHBlZWsgb3IgZ2V0IHZhcmlhbnQgb2YgdGhpcyBmdW5jdGlvbiB0byBlbnN1cmUgY29ycmVjdAorYnl0ZSBhbGlnbm1lbnQgb2YgdGhlIFVURi0zMiBzdHJpbmcuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmFkZHJlc3Mgb2YgYQorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gcG9pbnRlciB2YXJpZWJsZSBpbiB3aGljaCB0byBzdG9yZSB0aGUgcmVzdWx0LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gemVyby10ZXJtaW5hdGVkPTFdPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBhIHN0cmluZyBjb3VsZCBiZSByZWFkLCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS4gVGhlCitzdHJpbmcgcHV0IGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cjwvY29kZT48L2VtPiBtdXN0IGJlIGZyZWVkIHdpdGggPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1NZW1vcnktQWxsb2NhdGlvbi5odG1sI2ctZnJlZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX2ZyZWUoKTwvY29kZT48L2E+IHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI0PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItc2tpcC1zdHJpbmciPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nKHJlYWRlcik8L3ByZT4KKzxwPgorU2tpcHMgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgaW4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2UsIGFkdmFuY2luZwordGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIGJ5dGUgYWZ0ZXIgdGhlIHN0cmluZy4gVGhpcyB3aWxsIHdvcmsgZm9yCithbnkgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggYSBjaGFyYWN0ZXIgd2lkdGggb2YgOCBiaXRzLCBzbyBBU0NJSSwKK1VURi04LCBJU08tODg1OS1OIGV0Yy4KKzwvcD4KKzxwPgorVGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwgaWYgbm8gTlVMLXRlcm1pbmF0b3Igd2FzIGZvdW5kIGluIGluIHRoZSBkYXRhLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIGEgc3RyaW5nIGNvdWxkIGJlIHNraXBwZWQsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1za2lwLXN0cmluZy11dGY4Ij48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGY4ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGY4ICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2tpcHMgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgaW4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2UsIGFkdmFuY2luZwordGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIGJ5dGUgYWZ0ZXIgdGhlIHN0cmluZy4gVGhpcyB3aWxsIHdvcmsgZm9yCithbnkgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggYSBjaGFyYWN0ZXIgd2lkdGggb2YgOCBiaXRzLCBzbyBBU0NJSSwKK1VURi04LCBJU08tODg1OS1OIGV0Yy4gTm8gaW5wdXQgY2hlY2tpbmcgZm9yIHZhbGlkIFVURi04IGlzIGRvbmUuCis8L3A+Cis8cD4KK1RoaXMgZnVuY3Rpb24gd2lsbCBmYWlsIGlmIG5vIE5VTC10ZXJtaW5hdG9yIHdhcyBmb3VuZCBpbiBpbiB0aGUgZGF0YS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBhIHN0cmluZyBjb3VsZCBiZSBza2lwcGVkLCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI0PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItc2tpcC1zdHJpbmctdXRmMTYiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjE2ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGYxNiAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2tpcHMgYSBOVUwtdGVybWluYXRlZCBVVEYtMTYgc3RyaW5nIGluIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlLAorYWR2YW5jaW5nIHRoZSBjdXJyZW50IHBvc2l0aW9uIHRvIHRoZSBieXRlIGFmdGVyIHRoZSBzdHJpbmcuCis8L3A+Cis8cD4KK05vIGlucHV0IGNoZWNraW5nIGZvciB2YWxpZCBVVEYtMTYgaXMgZG9uZS4KKzwvcD4KKzxwPgorVGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwgaWYgbm8gTlVMLXRlcm1pbmF0b3Igd2FzIGZvdW5kIGluIGluIHRoZSBkYXRhLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIGEgc3RyaW5nIGNvdWxkIGJlIHNraXBwZWQsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1za2lwLXN0cmluZy11dGYzMiI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmMzIgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjMyICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTa2lwcyBhIE5VTC10ZXJtaW5hdGVkIFVURi0zMiBzdHJpbmcgaW4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2UsCithZHZhbmNpbmcgdGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIGJ5dGUgYWZ0ZXIgdGhlIHN0cmluZy4KKzwvcD4KKzxwPgorTm8gaW5wdXQgY2hlY2tpbmcgZm9yIHZhbGlkIFVURi0zMiBpcyBkb25lLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIHdpbGwgZmFpbCBpZiBubyBOVUwtdGVybWluYXRvciB3YXMgZm91bmQgaW4gaW4gdGhlIGRhdGEuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgYSBzdHJpbmcgY291bGQgYmUgc2tpcHBlZCwgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXNraXAtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9za2lwX3VuY2hlY2tlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfc2tpcF91bmNoZWNrZWQgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG5ieXRlczwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NraXBzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYnl0ZXM8L2NvZGU+PC9lbT4gYnl0ZXMgb2YgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2Ugd2l0aG91dCBjaGVja2luZyBpZgordGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ieXRlczwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNraXA8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDgtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50OF91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50OCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50ODwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ4X3VuY2hlY2tlZCAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGFuIHNpZ25lZCA4IGJpdCBpbnRlZ2VyIHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcworYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zaWduZWQgOCBiaXQgaW50ZWdlci48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDE2LWJlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2JlX3VuY2hlY2tlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQxNiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50MTY8L3NwYW4+PC9hPiAgICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9iZV91bmNoZWNrZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGEgc2lnbmVkIDE2IGJpdCBpbnRlZ2VyIGluIGJpZyBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKK2lmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciBhbmQgdXBkYXRlIHRoZQorY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2lnbmVkIDE2IGJpdCBpbnRlZ2VyLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50MTYtbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfbGVfdW5jaGVja2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDE2Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQxNjwvc3Bhbj48L2E+ICAgICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2xlX3VuY2hlY2tlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYSBzaWduZWQgMTYgYml0IGludGVnZXIgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZworaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyIGFuZCB1cGRhdGUgdGhlCitjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zaWduZWQgMTYgYml0IGludGVnZXIuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQyNC1iZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9iZV91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDMyPC9zcGFuPjwvYT4gICAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfYmVfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhIHNpZ25lZCAyNCBiaXQgaW50ZWdlciBpbiBiaWcgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCitpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIgYW5kIHVwZGF0ZSB0aGUKK2N1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnNpZ25lZCAyNCBiaXQgaW50ZWdlciAoYXMgZ2ludDMyKTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50MjQtbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfbGVfdW5jaGVja2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQzMjwvc3Bhbj48L2E+ICAgICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDI0X2xlX3VuY2hlY2tlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYSBzaWduZWQgMjQgYml0IGludGVnZXIgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZworaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyIGFuZCB1cGRhdGUgdGhlCitjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zaWduZWQgMjQgYml0IGludGVnZXIgKGFzIGdpbnQzMik8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDMyLWJlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2JlX3VuY2hlY2tlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50MzI8L3NwYW4+PC9hPiAgICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9iZV91bmNoZWNrZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGEgc2lnbmVkIDMyIGJpdCBpbnRlZ2VyIGluIGJpZyBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKK2lmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciBhbmQgdXBkYXRlIHRoZQorY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2lnbmVkIDMyIGJpdCBpbnRlZ2VyLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50MzItbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfbGVfdW5jaGVja2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQzMjwvc3Bhbj48L2E+ICAgICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2xlX3VuY2hlY2tlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYSBzaWduZWQgMzIgYml0IGludGVnZXIgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZworaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyIGFuZCB1cGRhdGUgdGhlCitjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zaWduZWQgMzIgYml0IGludGVnZXIuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQ2NC1iZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9iZV91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfYmVfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhIHNpZ25lZCA2NCBiaXQgaW50ZWdlciBpbiBiaWcgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCitpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIgYW5kIHVwZGF0ZSB0aGUKK2N1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnNpZ25lZCA2NCBiaXQgaW50ZWdlci48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDY0LWxlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2xlX3VuY2hlY2tlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9sZV91bmNoZWNrZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGEgc2lnbmVkIDY0IGJpdCBpbnRlZ2VyIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKK2lmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciBhbmQgdXBkYXRlIHRoZQorY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2lnbmVkIDY0IGJpdCBpbnRlZ2VyLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDgtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDhfdW5jaGVja2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50ODwvc3Bhbj48L2E+ICAgICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4X3VuY2hlY2tlZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYW4gdW5zaWduZWQgOCBiaXQgaW50ZWdlciB3aXRob3V0IGNoZWNraW5nIGlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMKK2F2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIgYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dW5zaWduZWQgOCBiaXQgaW50ZWdlci48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQxNi1iZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmVfdW5jaGVja2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDE2PC9zcGFuPjwvYT4gICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmVfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhbiB1bnNpZ25lZCAxNiBiaXQgaW50ZWdlciBpbiBiaWcgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCitpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIgYW5kIHVwZGF0ZSB0aGUKK2N1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVuc2lnbmVkIDE2IGJpdCBpbnRlZ2VyLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDE2LWxlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9sZV91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDE2Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MTY8L3NwYW4+PC9hPiAgICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9sZV91bmNoZWNrZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGFuIHVuc2lnbmVkIDE2IGJpdCBpbnRlZ2VyIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKK2lmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciBhbmQgdXBkYXRlIHRoZQorY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dW5zaWduZWQgMTYgYml0IGludGVnZXIuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MjQtYmUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2JlX3VuY2hlY2tlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2JlX3VuY2hlY2tlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYW4gdW5zaWduZWQgMjQgYml0IGludGVnZXIgaW4gYmlnIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZworaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyIGFuZCB1cGRhdGUgdGhlCitjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51bnNpZ25lZCAyNCBiaXQgaW50ZWdlciAoYXMgZ3VpbnQzMik8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQyNC1sZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfbGVfdW5jaGVja2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDMyPC9zcGFuPjwvYT4gICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfbGVfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhbiB1bnNpZ25lZCAyNCBiaXQgaW50ZWdlciBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCitpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIgYW5kIHVwZGF0ZSB0aGUKK2N1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVuc2lnbmVkIDI0IGJpdCBpbnRlZ2VyIChhcyBndWludDMyKTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDMyLWJlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZV91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MzI8L3NwYW4+PC9hPiAgICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZV91bmNoZWNrZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGFuIHVuc2lnbmVkIDMyIGJpdCBpbnRlZ2VyIGluIGJpZyBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKK2lmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciBhbmQgdXBkYXRlIHRoZQorY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dW5zaWduZWQgMzIgYml0IGludGVnZXIuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MzItbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlX3VuY2hlY2tlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlX3VuY2hlY2tlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYW4gdW5zaWduZWQgMzIgYml0IGludGVnZXIgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZworaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyIGFuZCB1cGRhdGUgdGhlCitjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51bnNpZ25lZCAzMiBiaXQgaW50ZWdlci48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQ2NC1iZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmVfdW5jaGVja2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmVfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhbiB1bnNpZ25lZCA2NCBiaXQgaW50ZWdlciBpbiBiaWcgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCitpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIgYW5kIHVwZGF0ZSB0aGUKK2N1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVuc2lnbmVkIDY0IGJpdCBpbnRlZ2VyLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDY0LWxlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9sZV91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9sZV91bmNoZWNrZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGFuIHVuc2lnbmVkIDY0IGJpdCBpbnRlZ2VyIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKK2lmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciBhbmQgdXBkYXRlIHRoZQorY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dW5zaWduZWQgNjQgYml0IGludGVnZXIuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50OC11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50OF91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50OCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50ODwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50OF91bmNoZWNrZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGFuIHNpZ25lZCA4IGJpdCBpbnRlZ2VyIHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcworYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciwgYnV0IGRvIG5vdCBhZHZhbmNlIHRoZSBjdXJyZW50IHJlYWQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnNpZ25lZCA4IGJpdCBpbnRlZ2VyLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWludDE2LWJlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQxNl9iZV91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MTYiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDE2PC9zcGFuPjwvYT4gICAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2JlX3VuY2hlY2tlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYSBzaWduZWQgMTYgYml0IGludGVnZXIgaW4gYmlnIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZworaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyLCBidXQgZG8gbm90IGFkdmFuY2UKK3RoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zaWduZWQgMTYgYml0IGludGVnZXIuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MTYtbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2xlX3VuY2hlY2tlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQxNiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50MTY8L3NwYW4+PC9hPiAgICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfbGVfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhIHNpZ25lZCAxNiBiaXQgaW50ZWdlciBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCitpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZQordGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnNpZ25lZCAxNiBiaXQgaW50ZWdlci48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQyNC1iZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfYmVfdW5jaGVja2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQzMjwvc3Bhbj48L2E+ICAgICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9iZV91bmNoZWNrZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGEgc2lnbmVkIDI0IGJpdCBpbnRlZ2VyIGluIGJpZyBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKK2lmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciwgYnV0IGRvIG5vdCBhZHZhbmNlCit0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2lnbmVkIDI0IGJpdCBpbnRlZ2VyIChhcyBnaW50MzIpPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MjQtbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2xlX3VuY2hlY2tlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50MzI8L3NwYW4+PC9hPiAgICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfbGVfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhIHNpZ25lZCAyNCBiaXQgaW50ZWdlciBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCitpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZQordGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnNpZ25lZCAyNCBiaXQgaW50ZWdlciAoYXMgZ2ludDMyKTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWludDMyLWJlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9iZV91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDMyPC9zcGFuPjwvYT4gICAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2JlX3VuY2hlY2tlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYSBzaWduZWQgMzIgYml0IGludGVnZXIgaW4gYmlnIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZworaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyLCBidXQgZG8gbm90IGFkdmFuY2UKK3RoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zaWduZWQgMzIgYml0IGludGVnZXIuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MzItbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2xlX3VuY2hlY2tlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50MzI8L3NwYW4+PC9hPiAgICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfbGVfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhIHNpZ25lZCAzMiBiaXQgaW50ZWdlciBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCitpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZQordGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnNpZ25lZCAzMiBiaXQgaW50ZWdlci48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQ2NC1iZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfYmVfdW5jaGVja2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ2NDwvc3Bhbj48L2E+ICAgICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9iZV91bmNoZWNrZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGEgc2lnbmVkIDY0IGJpdCBpbnRlZ2VyIGluIGJpZyBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKK2lmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciwgYnV0IGRvIG5vdCBhZHZhbmNlCit0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2lnbmVkIDY0IGJpdCBpbnRlZ2VyLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWludDY0LWxlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9sZV91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2xlX3VuY2hlY2tlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYSBzaWduZWQgNjQgYml0IGludGVnZXIgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZworaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyLCBidXQgZG8gbm90IGFkdmFuY2UKK3RoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zaWduZWQgNjQgYml0IGludGVnZXIuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDgtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ4X3VuY2hlY2tlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDg8L3NwYW4+PC9hPiAgICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDhfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhbiB1bnNpZ25lZCA4IGJpdCBpbnRlZ2VyIHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcworYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciwgYnV0IGRvIG5vdCBhZHZhbmNlIHRoZSBjdXJyZW50IHJlYWQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVuc2lnbmVkIDggYml0IGludGVnZXIuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDE2LWJlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfYmVfdW5jaGVja2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDE2PC9zcGFuPjwvYT4gICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2JlX3VuY2hlY2tlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYW4gdW5zaWduZWQgMTYgYml0IGludGVnZXIgaW4gYmlnIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZworaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyLCBidXQgZG8gbm90IGFkdmFuY2UKK3RoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51bnNpZ25lZCAxNiBiaXQgaW50ZWdlci48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MTYtbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQxNl9sZV91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDE2Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MTY8L3NwYW4+PC9hPiAgICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfbGVfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhbiB1bnNpZ25lZCAxNiBiaXQgaW50ZWdlciBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCitpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZQordGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVuc2lnbmVkIDE2IGJpdCBpbnRlZ2VyLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQyNC1iZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2JlX3VuY2hlY2tlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9iZV91bmNoZWNrZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGFuIHVuc2lnbmVkIDI0IGJpdCBpbnRlZ2VyIGluIGJpZyBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKK2lmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciwgYnV0IGRvIG5vdCBhZHZhbmNlCit0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dW5zaWduZWQgMjQgYml0IGludGVnZXIgKGFzIGd1aW50MzIpPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDI0LWxlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfbGVfdW5jaGVja2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDMyPC9zcGFuPjwvYT4gICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2xlX3VuY2hlY2tlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYW4gdW5zaWduZWQgMjQgYml0IGludGVnZXIgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZworaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyLCBidXQgZG8gbm90IGFkdmFuY2UKK3RoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51bnNpZ25lZCAyNCBiaXQgaW50ZWdlciAoYXMgZ3VpbnQzMik8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MzItYmUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9iZV91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MzI8L3NwYW4+PC9hPiAgICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfYmVfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhbiB1bnNpZ25lZCAzMiBiaXQgaW50ZWdlciBpbiBiaWcgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCitpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZQordGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVuc2lnbmVkIDMyIGJpdCBpbnRlZ2VyLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQzMi1sZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2xlX3VuY2hlY2tlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9sZV91bmNoZWNrZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGFuIHVuc2lnbmVkIDMyIGJpdCBpbnRlZ2VyIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKK2lmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciwgYnV0IGRvIG5vdCBhZHZhbmNlCit0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dW5zaWduZWQgMzIgYml0IGludGVnZXIuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDY0LWJlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfYmVfdW5jaGVja2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2JlX3VuY2hlY2tlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYW4gdW5zaWduZWQgNjQgYml0IGludGVnZXIgaW4gYmlnIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZworaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyLCBidXQgZG8gbm90IGFkdmFuY2UKK3RoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51bnNpZ25lZCA2NCBiaXQgaW50ZWdlci48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50NjQtbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9sZV91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfbGVfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhbiB1bnNpZ25lZCA2NCBiaXQgaW50ZWdlciBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCitpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZQordGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVuc2lnbmVkIDY0IGJpdCBpbnRlZ2VyLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQzMi1sZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDMyX2xlX3VuY2hlY2tlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nZmxvYXQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDMyX2xlX3VuY2hlY2tlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYSAzMiBiaXQgbGl0dGxlIGVuZGlhbiBmbG9hdCB3aXRob3V0IGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaAorZGF0YSBhdmFpbGFibGUgYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZmxvYXRpbmcgcG9pbnQgdmFsdWUgcmVhZDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQzMi1iZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDMyX2JlX3VuY2hlY2tlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nZmxvYXQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDMyX2JlX3VuY2hlY2tlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYSAzMiBiaXQgYmlnIGVuZGlhbiBmbG9hdCB3aXRob3V0IGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaAorZGF0YSBhdmFpbGFibGUgYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZmxvYXRpbmcgcG9pbnQgdmFsdWUgcmVhZDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQ2NC1sZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDY0X2xlX3VuY2hlY2tlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9sZV91bmNoZWNrZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGEgNjQgYml0IGxpdHRsZSBlbmRpYW4gZmxvYXQgd2l0aG91dCBjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2gKK2RhdGEgYXZhaWxhYmxlIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgdmFsdWUgcmVhZDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQ2NC1iZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDY0X2JlX3VuY2hlY2tlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9iZV91bmNoZWNrZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGEgNjQgYml0IGJpZyBlbmRpYW4gZmxvYXQgd2l0aG91dCBjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2gKK2RhdGEgYXZhaWxhYmxlIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgdmFsdWUgcmVhZDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0MzItbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfbGVfdW5jaGVja2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdmbG9hdDwvc3Bhbj48L2E+ICAgICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2xlX3VuY2hlY2tlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JlYWQgYSAzMiBiaXQgbGl0dGxlIGVuZGlhbiBmbG9hdCB3aXRob3V0IGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaAorZGF0YSBhdmFpbGFibGUsIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5mbG9hdGluZyBwb2ludCB2YWx1ZSByZWFkPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZmxvYXQzMi1iZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQzMl9iZV91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gICAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfYmVfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhIDMyIGJpdCBiaWcgZW5kaWFuIGZsb2F0IHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoCitkYXRhIGF2YWlsYWJsZSwgYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmZsb2F0aW5nIHBvaW50IHZhbHVlIHJlYWQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDY0LWxlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2xlX3VuY2hlY2tlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfbGVfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVhZCBhIDY0IGJpdCBsaXR0bGUgZW5kaWFuIGZsb2F0IHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoCitkYXRhIGF2YWlsYWJsZSwgYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgdmFsdWUgcmVhZDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0NjQtYmUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfYmVfdW5jaGVja2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nZG91YmxlPC9zcGFuPjwvYT4gICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9iZV91bmNoZWNrZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZWFkIGEgNjQgYml0IGJpZyBlbmRpYW4gZmxvYXQgd2l0aG91dCBjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2gKK2RhdGEgYXZhaWxhYmxlLCBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCB2YWx1ZSByZWFkPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWR1cC1kYXRhLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZHVwX2RhdGFfdW5jaGVja2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50ODwvc3Bhbj48L2E+ICogICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZHVwX2RhdGFfdW5jaGVja2VkICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZXR1cm5zIGEgbmV3bHktYWxsb2NhdGVkIGNvcHkgb2YgdGhlIGRhdGEgYXQgdGhlIGN1cnJlbnQgZGF0YSBwb3NpdGlvbgord2l0aG91dCBjaGVja2luZyBpZiBhdCBsZWFzdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPiBieXRlcyBhcmUgbGVmdC4gQWR2YW5jZXMgdGhlIGN1cnJlbnQgcmVhZAorcG9zaXRpb24gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4gYnl0ZXMuCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdfZnJlZQorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+U2l6ZSBpbiBieXRlczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3bHktYWxsb2NhdGVkIGNvcHkgb2YgdGhlCitkYXRhIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+IGJ5dGVzIGluIHNpemUuIEZyZWUgd2l0aCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLU1lbW9yeS1BbGxvY2F0aW9uLmh0bWwjZy1mcmVlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfZnJlZSgpPC9jb2RlPjwvYT4gd2hlbiBubyBsb25nZXIgbmVlZGVkLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gbGVuZ3RoPXNpemVdPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1kYXRhLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGFfdW5jaGVja2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50ODwvc3Bhbj48L2E+ICogICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGFfdW5jaGVja2VkICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZXR1cm5zIGEgY29uc3RhbnQgcG9pbnRlciB0byB0aGUgY3VycmVudCBkYXRhIHBvc2l0aW9uIHdpdGhvdXQgY2hlY2tpbmcKK2lmIGF0IGxlYXN0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+IGJ5dGVzIGFyZSBsZWZ0LiBBZHZhbmNlcyB0aGUgY3VycmVudCByZWFkIHBvc2l0aW9uIGJ5Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPiBieXRlcy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlNpemUgaW4gYnl0ZXM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGNvbnN0YW50IHBvaW50ZXIgdG8gdGhlCitjdXJyZW50IGRhdGEgcG9zaXRpb24uIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiBsZW5ndGg9c2l6ZV08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1kYXRhLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla19kYXRhX3VuY2hlY2tlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDg8L3NwYW4+PC9hPiAqICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YV91bmNoZWNrZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGNvbnN0YW50IHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZGF0YSBwb3NpdGlvbi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjU8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIGIvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYzY1OWIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwKQEAgLTAsMCArMSwyMTQ5IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0Qnl0ZVdyaXRlcjwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImdzdHJlYW1lci1iYXNlLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQmFzZSBhbmQgVXRpbGxpdHkgQ2xhc3NlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImdzdHJlYW1lci1iYXNlLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI2dzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLnRvcF9vZl9wYWdlIj48L2E+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2gyPgorPHA+R3N0Qnl0ZVdyaXRlciDigJQgV3JpdGVzIGRpZmZlcmVudCBpbnRlZ2VyLCBzdHJpbmcgYW5kIGZsb2F0aW5nIHBvaW50CisgICAgdHlwZXMgdG8gYSBtZW1vcnkgYnVmZmVyIGFuZCBhbGxvd3MgcmVhZGluZzwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuaCZndDsKKworICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPjsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICogICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLW5ldyIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9uZXcgKCkiPmdzdF9ieXRlX3dyaXRlcl9uZXc8L2E+ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1uZXctd2l0aC1kYXRhIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX25ld193aXRoX2RhdGEgKCkiPmdzdF9ieXRlX3dyaXRlcl9uZXdfd2l0aF9kYXRhPC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBpbml0aWFsaXplZDwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1uZXctd2l0aC1zaXplIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX25ld193aXRoX3NpemUgKCkiPmdzdF9ieXRlX3dyaXRlcl9uZXdfd2l0aF9zaXplPC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGZpeGVkPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItaW5pdCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9pbml0ICgpIj5nc3RfYnl0ZV93cml0ZXJfaW5pdDwvYT4gICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1pbml0LXdpdGgtZGF0YSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9pbml0X3dpdGhfZGF0YSAoKSI+Z3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9kYXRhPC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBpbml0aWFsaXplZDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLWluaXQtd2l0aC1zaXplIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9zaXplICgpIj5nc3RfYnl0ZV93cml0ZXJfaW5pdF93aXRoX3NpemU8L2E+ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gZml4ZWQ8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1mcmVlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX2ZyZWUgKCkiPmdzdF9ieXRlX3dyaXRlcl9mcmVlPC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPik7Cis8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICogICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1mcmVlLWFuZC1nZXQtYnVmZmVyIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX2ZyZWVfYW5kX2dldF9idWZmZXIgKCkiPmdzdF9ieXRlX3dyaXRlcl9mcmVlX2FuZF9nZXRfYnVmZmVyPC9hPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50ODwvc3Bhbj48L2E+ICogICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1mcmVlLWFuZC1nZXQtZGF0YSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9mcmVlX2FuZF9nZXRfZGF0YSAoKSI+Z3N0X2J5dGVfd3JpdGVyX2ZyZWVfYW5kX2dldF9kYXRhPC9hPiAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcmVzZXQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcmVzZXQgKCkiPmdzdF9ieXRlX3dyaXRlcl9yZXNldDwvYT4gICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50ODwvc3Bhbj48L2E+ICogICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1yZXNldC1hbmQtZ2V0LWRhdGEiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9kYXRhICgpIj5nc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9kYXRhPC9hPiAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcmVzZXQtYW5kLWdldC1idWZmZXIiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9idWZmZXIgKCkiPmdzdF9ieXRlX3dyaXRlcl9yZXNldF9hbmRfZ2V0X2J1ZmZlcjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1nZXQtcG9zIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX2dldF9wb3MgKCkiPmdzdF9ieXRlX3dyaXRlcl9nZXRfcG9zPC9hPiAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXNldC1wb3MiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfc2V0X3BvcyAoKSI+Z3N0X2J5dGVfd3JpdGVyX3NldF9wb3M8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gcG9zPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItZ2V0LXJlbWFpbmluZyIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9nZXRfcmVtYWluaW5nICgpIj5nc3RfYnl0ZV93cml0ZXJfZ2V0X3JlbWFpbmluZzwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1nZXQtc2l6ZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9nZXRfc2l6ZSAoKSI+Z3N0X2J5dGVfd3JpdGVyX2dldF9zaXplPC9hPiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItZW5zdXJlLWZyZWUtc3BhY2UiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfZW5zdXJlX2ZyZWVfc3BhY2UgKCkiPmdzdF9ieXRlX3dyaXRlcl9lbnN1cmVfZnJlZV9zcGFjZTwvYT4gICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50OCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50OCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ4PC9hPiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ4PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDE2LWJlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9iZSAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9iZTwvYT4gICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MTY8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MTYtbGUiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2xlICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2xlPC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQxNjwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQyNC1iZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfYmUgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfYmU8L2E+ICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDMyPC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDI0LWxlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9sZSAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9sZTwvYT4gICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MzI8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MzItYmUiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDMyX2JlICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDMyX2JlPC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQzMjwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQzMi1sZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfbGUgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfbGU8L2E+ICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDMyPC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDY0LWJlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9iZSAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9iZTwvYT4gICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50NjQtbGUiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2xlICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2xlPC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50OCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDggKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDg8L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQxNi1iZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2JlICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9iZTwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDE2PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQxNi1sZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2xlICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9sZTwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDE2PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQyNC1iZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2JlICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9iZTwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQyNC1sZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2xlICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9sZTwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQzMi1iZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2JlICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9iZTwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQzMi1sZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZTwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQ2NC1iZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2JlICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9iZTwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQ2NC1sZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2xlICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9sZTwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0MzItYmUiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfYmUgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9iZTwvYT4gICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0MzItbGUiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfbGUgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9sZTwvYT4gICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0NjQtYmUiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfYmUgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9iZTwvYT4gICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQ2NC1sZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9sZSAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDY0X2xlPC9hPiAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1zdHJpbmciIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZygpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZzwvYT4gICAgICAgICAgKHdyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEpCis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1zdHJpbmctdXRmMTYiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZ191dGYxNiAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmdfdXRmMTY8L2E+ICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQxNjwvc3Bhbj48L2E+ICpkYXRhPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXN0cmluZy11dGYzMiIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nX3V0ZjMyICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZ191dGYzMjwvYT4gICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtc3RyaW5nLXV0ZjgiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZ191dGY4ICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZ191dGY4PC9hPiAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1kYXRhIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGE8L2E+ICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICpkYXRhPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLWZpbGwiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfZmlsbCAoKSI+Z3N0X2J5dGVfd3JpdGVyX2ZpbGw8L2E+ICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiB2YWx1ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50OC11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDhfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDhfdW5jaGVja2VkPC9hPiAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDg8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MTYtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9iZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfYmVfdW5jaGVja2VkPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDE2PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDE2LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfbGVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2xlX3VuY2hlY2tlZDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQxNjwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQyNC1iZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2JlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9iZV91bmNoZWNrZWQ8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MzI8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MjQtbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9sZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfbGVfdW5jaGVja2VkPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDMyPC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDMyLWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfYmVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDMyX2JlX3VuY2hlY2tlZDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQzMjwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQzMi1sZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDMyX2xlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9sZV91bmNoZWNrZWQ8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MzI8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50NjQtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9iZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfYmVfdW5jaGVja2VkPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDY0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfbGVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2xlX3VuY2hlY2tlZDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50OC11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4X3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50OF91bmNoZWNrZWQ8L2E+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDE2LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2JlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfYmVfdW5jaGVja2VkPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MTY8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDE2LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2xlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfbGVfdW5jaGVja2VkPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MTY8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDI0LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2JlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfYmVfdW5jaGVja2VkPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDI0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2xlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfbGVfdW5jaGVja2VkPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDMyLWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2JlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfYmVfdW5jaGVja2VkPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDMyLWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGVfdW5jaGVja2VkPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDY0LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2JlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfYmVfdW5jaGVja2VkPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDY0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2xlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfbGVfdW5jaGVja2VkPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQzMi1iZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfYmVfdW5jaGVja2VkICgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfYmVfdW5jaGVja2VkPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0MzItbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDMyX2xlX3VuY2hlY2tlZCAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDMyX2xlX3VuY2hlY2tlZDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1mbG9hdDY0LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9iZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9iZV91bmNoZWNrZWQ8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1mbG9hdDY0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9sZV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9sZV91bmNoZWNrZWQ8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1kYXRhLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfZGF0YV91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfZGF0YV91bmNoZWNrZWQ8L2E+ICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItZmlsbC11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfZmlsbF91bmNoZWNrZWQgKCkiPmdzdF9ieXRlX3dyaXRlcl9maWxsX3VuY2hlY2tlZDwvYT4gICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gdmFsdWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBwcm92aWRlcyBhIGJ5dGUgd3JpdGVyIGFuZCByZWFkZXIgdGhhdCBjYW4gd3JpdGUvcmVhZCBkaWZmZXJlbnQKK2ludGVnZXIgYW5kIGZsb2F0aW5nIHBvaW50IHR5cGVzIHRvL2Zyb20gYSBtZW1vcnkgYnVmZmVyLiBJdCBwcm92aWRlcyBmdW5jdGlvbnMKK2ZvciB3cml0aW5nL3JlYWRpbmcgc2lnbmVkL3Vuc2lnbmVkLCBsaXR0bGUvYmlnIGVuZGlhbiBpbnRlZ2VycyBvZiA4LCAxNiwgMjQsCiszMiBhbmQgNjQgYml0cyBhbmQgZnVuY3Rpb25zIGZvciByZWFkaW5nIGxpdHRsZS9iaWcgZW5kaWFuIGZsb2F0aW5nIHBvaW50cyBudW1iZXJzIG9mCiszMiBhbmQgNjQgYml0cy4gSXQgYWxzbyBwcm92aWRlcyBmdW5jdGlvbnMgdG8gd3JpdGUvcmVhZCBOVUwtdGVybWluYXRlZCBzdHJpbmdzCitpbiB2YXJpb3VzIGNoYXJhY3RlciBlbmNvZGluZ3MuCis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEJ5dGVXcml0ZXIiPjwvYT48aDM+R3N0Qnl0ZVdyaXRlcjwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBzdHJ1Y3QgeworICBHc3RCeXRlUmVhZGVyIHBhcmVudDsKKworICBndWludCBhbGxvY19zaXplOworCisgIGdib29sZWFuIGZpeGVkOworICBnYm9vbGVhbiBvd25lZDsKK30gR3N0Qnl0ZVdyaXRlcjsKKzwvcHJlPgorPHA+CitBIGJ5dGUgd3JpdGVyIGluc3RhbmNlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0Qnl0ZVdyaXRlci5wYXJlbnQiPjwvYT5wYXJlbnQ8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBwYXJlbnQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0Qnl0ZVdyaXRlci5hbGxvYy1zaXplIj48L2E+YWxsb2Nfc2l6ZTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QWxsb2NhdGlvbiBzaXplIG9mIHRoZSBkYXRhPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJ5dGVXcml0ZXIuZml4ZWQiPjwvYT5maXhlZDwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+SWYgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gbm8gcmVhbGxvY2F0aW9ucyBhcmUgYWxsb3dlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCeXRlV3JpdGVyLm93bmVkIj48L2E+b3duZWQ8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPklmIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gbm8gcmVhbGxvY2F0aW9ucyBhcmUgYWxsb3dlZCBhbmQgY29waWVzIG9mIGRhdGEgYXJlIHJldHVybmVkPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLW5ldyI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfbmV3ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqICAgICBnc3RfYnl0ZV93cml0ZXJfbmV3ICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZXMgYSBuZXcsIGVtcHR5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2UKKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ3N0X2J5dGVfd3JpdGVyX2ZyZWUKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3LCBlbXB0eSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1uZXctd2l0aC1kYXRhIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9uZXdfd2l0aF9kYXRhICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqICAgICBnc3RfYnl0ZV93cml0ZXJfbmV3X3dpdGhfZGF0YSAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBpbml0aWFsaXplZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZSB3aXRoIHRoZSBnaXZlbgorbWVtb3J5IGFyZWEuIElmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbml0aWFsaXplZDwvY29kZT48L2VtPiBpcyA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpdCBpcyBwb3NzaWJsZSB0bworcmVhZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPiBieXRlcyBmcm9tIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGZyb20gdGhlIGJlZ2lubmluZy4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ3N0X2J5dGVfd3JpdGVyX2ZyZWUKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPk1lbW9yeSBhcmVhIGZvciB3cml0aW5nPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlNpemUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4gaW4gYnl0ZXM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluaXRpYWxpemVkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPklmIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IHRoZSBjb21wbGV0ZSBkYXRhIGNhbiBiZSByZWFkIGZyb20gdGhlIGJlZ2lubmluZzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI2PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItbmV3LXdpdGgtc2l6ZSI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfbmV3X3dpdGhfc2l6ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKiAgICAgZ3N0X2J5dGVfd3JpdGVyX25ld193aXRoX3NpemUgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBmaXhlZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZSB3aXRoIHRoZSBnaXZlbgoraW5pdGlhbCBkYXRhIHNpemUuCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdzdF9ieXRlX3dyaXRlcl9mcmVlCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Jbml0aWFsIHNpemUgb2YgZGF0YTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zml4ZWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+SWYgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gdGhlIGRhdGEgY2FuJ3QgYmUgcmVhbGxvY2F0ZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLWluaXQiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX2luaXQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX2luaXQgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitJbml0aWFsaXplcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+IHRvIGFuIGVtcHR5IGluc3RhbmNlCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLWluaXQtd2l0aC1kYXRhIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9pbml0X3dpdGhfZGF0YSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYnl0ZV93cml0ZXJfaW5pdF93aXRoX2RhdGEgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gaW5pdGlhbGl6ZWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitJbml0aWFsaXplcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+IHdpdGggdGhlIGdpdmVuCittZW1vcnkgYXJlYS4gSWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluaXRpYWxpemVkPC9jb2RlPjwvZW0+IGlzIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGl0IGlzIHBvc3NpYmxlIHRvCityZWFkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+IGJ5dGVzIGZyb20gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gZnJvbSB0aGUgYmVnaW5uaW5nLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+TWVtb3J5CithcmVhIGZvciB3cml0aW5nLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIGlucHV0LiBEZWZhdWx0IGlzIHRyYW5zZmVyIG5vbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+aW48L3NwYW4+PC9hY3JvbnltPiBjYWxsZWUtYWxsb2NhdGVkXVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IGxlbmd0aD1zaXplXVs8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5TaXplIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+IGluIGJ5dGVzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbml0aWFsaXplZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5JZiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiB0aGUgY29tcGxldGUgZGF0YSBjYW4gYmUgcmVhZCBmcm9tIHRoZSBiZWdpbm5pbmc8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI2PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItaW5pdC13aXRoLXNpemUiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9zaXplICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9ieXRlX3dyaXRlcl9pbml0X3dpdGhfc2l6ZSAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGZpeGVkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSW5pdGlhbGl6ZXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPiB3aXRoIHRoZSBnaXZlbiBpbml0aWFsIGRhdGEgc2l6ZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkluaXRpYWwgc2l6ZSBvZiBkYXRhPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maXhlZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5JZiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiB0aGUgZGF0YSBjYW4ndCBiZSByZWFsbG9jYXRlZDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1mcmVlIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9mcmVlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9ieXRlX3dyaXRlcl9mcmVlICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorRnJlZXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPiBhbmQgYWxsIG1lbW9yeSBhbGxvY2F0ZWQgYnkgaXQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQuIERlZmF1bHQgaXMgdHJhbnNmZXIgbm9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbjwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI2PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItZnJlZS1hbmQtZ2V0LWJ1ZmZlciI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfZnJlZV9hbmRfZ2V0X2J1ZmZlciAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX2ZyZWVfYW5kX2dldF9idWZmZXIgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitGcmVlcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+IGFuZCBhbGwgbWVtb3J5IGFsbG9jYXRlZCBieSBpdCBleGNlcHQKK3RoZSBjdXJyZW50IGRhdGEsIHdoaWNoIGlzIHJldHVybmVkIGFzIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ3N0X2J1ZmZlcl91bnJlZgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQuIERlZmF1bHQgaXMgdHJhbnNmZXIgbm9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbjwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjdXJyZW50IGRhdGEgYXMgYnVmZmVyLiA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci11bnJlZiI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3VucmVmKCk8L2NvZGU+PC9hPgorYWZ0ZXIgdXNhZ2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI2PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItZnJlZS1hbmQtZ2V0LWRhdGEiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX2ZyZWVfYW5kX2dldF9kYXRhICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50ODwvc3Bhbj48L2E+ICogICAgICAgICAgICBnc3RfYnl0ZV93cml0ZXJfZnJlZV9hbmRfZ2V0X2RhdGEgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0ZyZWVzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4gYW5kIGFsbCBtZW1vcnkgYWxsb2NhdGVkIGJ5IGl0IGV4Y2VwdAordGhlIGN1cnJlbnQgZGF0YSwgd2hpY2ggaXMgcmV0dXJuZWQuCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdfZnJlZQorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQuIERlZmF1bHQgaXMgdHJhbnNmZXIgbm9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbjwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjdXJyZW50IGRhdGEuIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItTWVtb3J5LUFsbG9jYXRpb24uaHRtbCNnLWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19mcmVlKCk8L2NvZGU+PC9hPiBhZnRlciB1c2FnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1yZXNldCI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcmVzZXQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3Jlc2V0ICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZXNldHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPiBhbmQgZnJlZXMgdGhlIGRhdGEgaWYgaXQncworb3duZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+PHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI2PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcmVzZXQtYW5kLWdldC1kYXRhIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9yZXNldF9hbmRfZ2V0X2RhdGEgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKiAgICAgICAgICAgIGdzdF9ieXRlX3dyaXRlcl9yZXNldF9hbmRfZ2V0X2RhdGEgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVzZXRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4gYW5kIHJldHVybnMgdGhlIGN1cnJlbnQgZGF0YS4KKzwvcD4KKzxwPgorRnJlZS1mdW5jdGlvbjogZ19mcmVlCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjdXJyZW50IGRhdGEuIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItTWVtb3J5LUFsbG9jYXRpb24uaHRtbCNnLWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19mcmVlKCk8L2NvZGU+PC9hPiBhZnRlciB1c2FnZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1yZXNldC1hbmQtZ2V0LWJ1ZmZlciI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9idWZmZXIgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKiAgICAgICAgIGdzdF9ieXRlX3dyaXRlcl9yZXNldF9hbmRfZ2V0X2J1ZmZlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1Jlc2V0cyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+IGFuZCByZXR1cm5zIHRoZSBjdXJyZW50IGRhdGEgYXMgYnVmZmVyLgorPC9wPgorPHA+CitGcmVlLWZ1bmN0aW9uOiBnc3RfYnVmZmVyX3VucmVmCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjdXJyZW50IGRhdGEgYXMgYnVmZmVyLiA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci11bnJlZiI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3VucmVmKCk8L2NvZGU+PC9hPgorYWZ0ZXIgdXNhZ2UuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI2PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItZ2V0LXBvcyI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfZ2V0X3BvcyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICBnc3RfYnl0ZV93cml0ZXJfZ2V0X3BvcyAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSByZWFkL3dyaXRlIGN1cnNvcjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1zZXQtcG9zIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9zZXRfcG9zICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ieXRlX3dyaXRlcl9zZXRfcG9zICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gcG9zPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorU2V0cyB0aGUgY3VycmVudCByZWFkL3dyaXRlIGN1cnNvciBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+LiBUaGUgbmV3IHBvc2l0aW9uCitjYW4gb25seSBiZSBiZXR3ZWVuIDAgYW5kIHRoZSBjdXJyZW50IHNpemUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9zPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm5ldyBwb3NpdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIG5ldyBwb3NpdGlvbiBjb3VsZCBiZSBzZXQ8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI2PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItZ2V0LXJlbWFpbmluZyI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfZ2V0X3JlbWFpbmluZyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICBnc3RfYnl0ZV93cml0ZXJfZ2V0X3JlbWFpbmluZyAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1JldHVybnMgdGhlIHJlbWFpbmluZyBzaXplIG9mIGRhdGEgdGhhdCBjYW4gc3RpbGwgYmUgd3JpdHRlbi4gSWYKKy0xIGlzIHJldHVybmVkIHRoZSByZW1haW5pbmcgc2l6ZSBpcyBvbmx5IGxpbWl0ZWQgYnkgc3lzdGVtIHJlc291cmNlcy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHJlbWFpbmluZyBzaXplIG9mIGRhdGEgdGhhdCBjYW4gc3RpbGwgYmUgd3JpdHRlbjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1nZXQtc2l6ZSI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfZ2V0X3NpemUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX2dldF9zaXplICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgY3VycmVudCwgaW5pdGlhbGl6ZWQgc2l6ZSBvZiB0aGUgZGF0YTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1lbnN1cmUtZnJlZS1zcGFjZSI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfZW5zdXJlX2ZyZWVfc3BhY2UgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX2Vuc3VyZV9mcmVlX3NwYWNlICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hlY2tzIGlmIGVub3VnaCBmcmVlIHNwYWNlIGZyb20gdGhlIGN1cnJlbnQgd3JpdGUgY3Vyc29yIGlzCithdmFpbGFibGUgYW5kIHJlYWxsb2NhdGVzIGlmIG5lY2Vzc2FyeS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPk51bWJlciBvZiBieXRlcyB0aGF0IHNob3VsZCBiZSBhdmFpbGFibGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIGF0IGxlYXN0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+IGJ5dGVzIGFyZSBzdGlsbCBhdmFpbGFibGU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI2PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDgiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ4ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50OCAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ4PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorV3JpdGVzIGEgc2lnbmVkIDggYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VmFsdWUgdG8gd3JpdGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQxNi1iZSI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2JlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfYmUgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MTY8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitXcml0ZXMgYSBzaWduZWQgYmlnIGVuZGlhbiAxNiBiaXQgaW50ZWdlciB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5WYWx1ZSB0byB3cml0ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI2PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDE2LWxlIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfbGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9sZSAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQxNjwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1dyaXRlcyBhIHNpZ25lZCBsaXR0bGUgZW5kaWFuIDE2IGJpdCBpbnRlZ2VyIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlZhbHVlIHRvIHdyaXRlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtaW50MjQtYmUiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9iZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2JlICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDMyPC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorV3JpdGVzIGEgc2lnbmVkIGJpZyBlbmRpYW4gMjQgYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VmFsdWUgdG8gd3JpdGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQyNC1sZSI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2xlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfbGUgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MzI8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitXcml0ZXMgYSBzaWduZWQgbGl0dGxlIGVuZGlhbiAyNCBiaXQgaW50ZWdlciB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5WYWx1ZSB0byB3cml0ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI2PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDMyLWJlIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfYmUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9iZSAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQzMjwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1dyaXRlcyBhIHNpZ25lZCBiaWcgZW5kaWFuIDMyIGJpdCBpbnRlZ2VyIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlZhbHVlIHRvIHdyaXRlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtaW50MzItbGUiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9sZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDMyX2xlICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDMyPC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorV3JpdGVzIGEgc2lnbmVkIGxpdHRsZSBlbmRpYW4gMzIgYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VmFsdWUgdG8gd3JpdGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQ2NC1iZSI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2JlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfYmUgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitXcml0ZXMgYSBzaWduZWQgYmlnIGVuZGlhbiA2NCBiaXQgaW50ZWdlciB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5WYWx1ZSB0byB3cml0ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI2PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDY0LWxlIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfbGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9sZSAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1dyaXRlcyBhIHNpZ25lZCBsaXR0bGUgZW5kaWFuIDY0IGJpdCBpbnRlZ2VyIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlZhbHVlIHRvIHdyaXRlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDgiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50OCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorV3JpdGVzIGEgdW5zaWduZWQgOCBiaXQgaW50ZWdlciB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5WYWx1ZSB0byB3cml0ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI2PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQxNi1iZSI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9iZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9iZSAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MTY8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitXcml0ZXMgYSB1bnNpZ25lZCBiaWcgZW5kaWFuIDE2IGJpdCBpbnRlZ2VyIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlZhbHVlIHRvIHdyaXRlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDE2LWxlIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2xlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2xlICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQxNjwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1dyaXRlcyBhIHVuc2lnbmVkIGxpdHRsZSBlbmRpYW4gMTYgYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VmFsdWUgdG8gd3JpdGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MjQtYmUiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfYmUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfYmUgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorV3JpdGVzIGEgdW5zaWduZWQgYmlnIGVuZGlhbiAyNCBiaXQgaW50ZWdlciB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5WYWx1ZSB0byB3cml0ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI2PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQyNC1sZSI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9sZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9sZSAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitXcml0ZXMgYSB1bnNpZ25lZCBsaXR0bGUgZW5kaWFuIDI0IGJpdCBpbnRlZ2VyIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlZhbHVlIHRvIHdyaXRlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDMyLWJlIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2JlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2JlICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1dyaXRlcyBhIHVuc2lnbmVkIGJpZyBlbmRpYW4gMzIgYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VmFsdWUgdG8gd3JpdGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MzItbGUiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorV3JpdGVzIGEgdW5zaWduZWQgbGl0dGxlIGVuZGlhbiAzMiBiaXQgaW50ZWdlciB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5WYWx1ZSB0byB3cml0ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI2PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQ2NC1iZSI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9iZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9iZSAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitXcml0ZXMgYSB1bnNpZ25lZCBiaWcgZW5kaWFuIDY0IGJpdCBpbnRlZ2VyIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlZhbHVlIHRvIHdyaXRlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDY0LWxlIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2xlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2xlICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1dyaXRlcyBhIHVuc2lnbmVkIGxpdHRsZSBlbmRpYW4gNjQgYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VmFsdWUgdG8gd3JpdGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1mbG9hdDMyLWJlIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9iZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfYmUgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorV3JpdGVzIGEgYmlnIGVuZGlhbiAzMiBiaXQgZmxvYXQgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VmFsdWUgdG8gd3JpdGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1mbG9hdDMyLWxlIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9sZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfbGUgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorV3JpdGVzIGEgbGl0dGxlIGVuZGlhbiAzMiBiaXQgZmxvYXQgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VmFsdWUgdG8gd3JpdGU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1mbG9hdDY0LWJlIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9iZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfYmUgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitXcml0ZXMgYSBiaWcgZW5kaWFuIDY0IGJpdCBmbG9hdCB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5WYWx1ZSB0byB3cml0ZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI3PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0NjQtbGUiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDY0X2xlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9sZSAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1dyaXRlcyBhIGxpdHRsZSBlbmRpYW4gNjQgYml0IGZsb2F0IHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlZhbHVlIHRvIHdyaXRlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjc8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtc3RyaW5nIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmcod3JpdGVyLCBkYXRhKTwvcHJlPgorPHA+CitXcml0ZSBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+IChpbmNsdWRpbmcgdGhlIHRlcm1pbmF0b3IpLiBUaGUKK3N0cmluZyBpcyBhc3N1bWVkIHRvIGJlIGluIGFuIDgtYml0IGVuY29kaW5nIChlLmcuIEFTQ0lJLFVURi04IG9yCitJU08tODg1OS0xKS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPk51bGwgdGVybWluYXRlZCBzdHJpbmcuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQuIERlZmF1bHQgaXMgdHJhbnNmZXIgbm9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbjwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IHplcm8tdGVybWluYXRlZD0xXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHN0cmluZyBjb3VsZCBiZSB3cml0dGVuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1zdHJpbmctdXRmMTYiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmdfdXRmMTYgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmdfdXRmMTYgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDE2PC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitXcml0ZXMgYSBOVUwtdGVybWluYXRlZCBVVEYxNiBzdHJpbmcgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPiAoaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdG9yKS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlVURjE2IHN0cmluZyB0byB3cml0ZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IHplcm8tdGVybWluYXRlZD0xXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI2PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LXN0cmluZy11dGYzMiI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZ191dGYzMiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZ191dGYzMiAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1dyaXRlcyBhIE5VTC10ZXJtaW5hdGVkIFVURjMyIHN0cmluZyB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+IChpbmNsdWRpbmcgdGhlIHRlcm1pbmF0b3IpLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VVRGMzIgc3RyaW5nIHRvIHdyaXRlLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gemVyby10ZXJtaW5hdGVkPTFdPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtc3RyaW5nLXV0ZjgiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmdfdXRmOCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZ191dGY4ICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpkYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorV3JpdGVzIGEgTlVMLXRlcm1pbmF0ZWQgVVRGOCBzdHJpbmcgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPiAoaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdG9yKS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlVURjggc3RyaW5nIHRvCit3cml0ZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IHplcm8tdGVybWluYXRlZD0xXVs8YWNyb255bSB0aXRsZT0iT3ZlcnJpZGUgdGhlIHBhcnNlZCBDIHR5cGUgd2l0aCBnaXZlbiB0eXBlIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHlwZTwvc3Bhbj48L2Fjcm9ueW0+IHV0ZjhdPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtZGF0YSI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGEgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICpkYXRhPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1dyaXRlcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPiBieXRlcyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPiB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+RGF0YSB0byB3cml0ZS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IGxlbmd0aD1zaXplXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5TaXplIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+IGluIGJ5dGVzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1maWxsIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9maWxsICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9ieXRlX3dyaXRlcl9maWxsICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiB2YWx1ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitXcml0ZXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4gYnl0ZXMgY29udGFpbmluZyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4gdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5WYWx1ZSB0byBiZSB3cml0ZW48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+TnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXRlbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI3PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDgtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfaW50OF91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ4X3VuY2hlY2tlZCAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDg8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDE2LWJlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2JlX3VuY2hlY2tlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2JlX3VuY2hlY2tlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDE2PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorV3JpdGVzIGEgc2lnbmVkIGJpZyBlbmRpYW4gMTYgYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPiB3aXRob3V0CitjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5WYWx1ZSB0byB3cml0ZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtaW50MTYtbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfbGVfdW5jaGVja2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfbGVfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MTY8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitXcml0ZXMgYSBzaWduZWQgbGl0dGxlIGVuZGlhbiAxNiBiaXQgaW50ZWdlciB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+IHdpdGhvdXQKK2NoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSB3cml0ZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlZhbHVlIHRvIHdyaXRlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQyNC1iZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9iZV91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9iZV91bmNoZWNrZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQzMjwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1dyaXRlcyBhIHNpZ25lZCBiaWcgZW5kaWFuIDI0IGJpdCBpbnRlZ2VyIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4gd2l0aG91dAorY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBieXRlIHdyaXRlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VmFsdWUgdG8gd3JpdGU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMxPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDI0LWxlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2xlX3VuY2hlY2tlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2xlX3VuY2hlY2tlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDMyPC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorV3JpdGVzIGEgc2lnbmVkIGxpdHRsZSBlbmRpYW4gMjQgYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPiB3aXRob3V0CitjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5WYWx1ZSB0byB3cml0ZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtaW50MzItYmUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfYmVfdW5jaGVja2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfYmVfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MzI8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitXcml0ZXMgYSBzaWduZWQgYmlnIGVuZGlhbiAzMiBiaXQgaW50ZWdlciB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+IHdpdGhvdXQKK2NoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSB3cml0ZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlZhbHVlIHRvIHdyaXRlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQzMi1sZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9sZV91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9sZV91bmNoZWNrZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQzMjwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1dyaXRlcyBhIHNpZ25lZCBsaXR0bGUgZW5kaWFuIDMyIGJpdCBpbnRlZ2VyIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4gd2l0aG91dAorY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBieXRlIHdyaXRlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VmFsdWUgdG8gd3JpdGU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMxPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDY0LWJlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2JlX3VuY2hlY2tlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2JlX3VuY2hlY2tlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorV3JpdGVzIGEgc2lnbmVkIGJpZyBlbmRpYW4gNjQgYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPiB3aXRob3V0CitjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5WYWx1ZSB0byB3cml0ZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtaW50NjQtbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfbGVfdW5jaGVja2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfbGVfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitXcml0ZXMgYSBzaWduZWQgbGl0dGxlIGVuZGlhbiA2NCBiaXQgaW50ZWdlciB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+IHdpdGhvdXQKK2NoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSB3cml0ZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlZhbHVlIHRvIHdyaXRlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50OC11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50OF91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50OF91bmNoZWNrZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1dyaXRlcyBhIHVuc2lnbmVkIDggYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPiB3aXRob3V0IGNoZWNraW5nIGlmIHRoZXJlCitpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5WYWx1ZSB0byB3cml0ZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDE2LWJlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9iZV91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfYmVfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQxNjwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1dyaXRlcyBhIHVuc2lnbmVkIGJpZyBlbmRpYW4gMTYgYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPiB3aXRob3V0CitjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5WYWx1ZSB0byB3cml0ZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDE2LWxlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9sZV91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfbGVfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQxNjwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1dyaXRlcyBhIHVuc2lnbmVkIGxpdHRsZSBlbmRpYW4gMTYgYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPiB3aXRob3V0CitjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5WYWx1ZSB0byB3cml0ZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDI0LWJlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9iZV91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfYmVfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1dyaXRlcyBhIHVuc2lnbmVkIGJpZyBlbmRpYW4gMjQgYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPiB3aXRob3V0CitjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5WYWx1ZSB0byB3cml0ZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDI0LWxlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9sZV91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfbGVfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1dyaXRlcyBhIHVuc2lnbmVkIGxpdHRsZSBlbmRpYW4gMjQgYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPiB3aXRob3V0CitjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5WYWx1ZSB0byB3cml0ZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDMyLWJlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9iZV91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfYmVfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1dyaXRlcyBhIHVuc2lnbmVkIGJpZyBlbmRpYW4gMzIgYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPiB3aXRob3V0CitjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5WYWx1ZSB0byB3cml0ZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDMyLWxlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZV91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGVfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1dyaXRlcyBhIHVuc2lnbmVkIGxpdHRsZSBlbmRpYW4gMzIgYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPiB3aXRob3V0CitjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5WYWx1ZSB0byB3cml0ZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDY0LWJlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9iZV91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfYmVfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1dyaXRlcyBhIHVuc2lnbmVkIGJpZyBlbmRpYW4gNjQgYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPiB3aXRob3V0CitjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5WYWx1ZSB0byB3cml0ZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDY0LWxlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9sZV91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfbGVfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1dyaXRlcyBhIHVuc2lnbmVkIGxpdHRsZSBlbmRpYW4gNjQgYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPiB3aXRob3V0CitjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5WYWx1ZSB0byB3cml0ZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQzMi1iZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDMyX2JlX3VuY2hlY2tlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfYmVfdW5jaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitXcml0ZXMgYSBiaWcgZW5kaWFuIDMyIGJpdCBmbG9hdCB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+IHdpdGhvdXQKK2NoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSB3cml0ZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlZhbHVlIHRvIHdyaXRlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1mbG9hdDMyLWxlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfbGVfdW5jaGVja2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9sZV91bmNoZWNrZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1dyaXRlcyBhIGxpdHRsZSBlbmRpYW4gMzIgYml0IGZsb2F0IHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4gd2l0aG91dAorY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBieXRlIHdyaXRlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VmFsdWUgdG8gd3JpdGU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMxPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0NjQtYmUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9iZV91bmNoZWNrZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDY0X2JlX3VuY2hlY2tlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitXcml0ZXMgYSBiaWcgZW5kaWFuIDY0IGJpdCBmbG9hdCB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+IHdpdGhvdXQKK2NoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSB3cml0ZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlZhbHVlIHRvIHdyaXRlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1mbG9hdDY0LWxlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfbGVfdW5jaGVja2VkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9sZV91bmNoZWNrZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorV3JpdGVzIGEgbGl0dGxlIGVuZGlhbiA2NCBiaXQgZmxvYXQgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPiB3aXRob3V0CitjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5WYWx1ZSB0byB3cml0ZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtZGF0YS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhX3VuY2hlY2tlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGFfdW5jaGVja2VkICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorV3JpdGVzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+IGJ5dGVzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+IHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4gd2l0aG91dAorY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBieXRlIHdyaXRlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkRhdGEgdG8gd3JpdGUuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQuIERlZmF1bHQgaXMgdHJhbnNmZXIgbm9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbjwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IGxlbmd0aD1zaXplXTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5TaXplIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+IGluIGJ5dGVzPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4zMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLWZpbGwtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9maWxsX3VuY2hlY2tlZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfYnl0ZV93cml0ZXJfZmlsbF91bmNoZWNrZWQgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gdmFsdWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorV3JpdGVzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+IGJ5dGVzIGNvbnRhaW5pbmcgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+IHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4gd2l0aG91dAorY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBieXRlIHdyaXRlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5WYWx1ZSB0byBiZSB3cml0ZW48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+TnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXRlbjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMzE8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCBiL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcyYmJmYwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwKQEAgLTAsMCArMSw2NjYgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5Hc3RDaGVjazwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImdzdHJlYW1lci1jaGVjay5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENoZWNrIFVuaXQgVGVzdGluZyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1jaGVjay5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENoZWNrIFVuaXQgVGVzdGluZyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJTdHJhdyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLWNoZWNrLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItY2hlY2suaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIDAuMTEgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjayI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLnRvcF9vZl9wYWdlIj48L2E+R3N0Q2hlY2s8L3NwYW4+PC9oMj4KKzxwPkdzdENoZWNrIOKAlCBDb21tb24gY29kZSBmb3IgR1N0cmVhbWVyIHVuaXQgdGVzdHM8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisjaW5jbHVkZSAmbHQ7Z3N0L2NoZWNrL2dzdGNoZWNrLmgmZ3Q7CisKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjR1NULVNUQVJULVRFU1Q6Q0FQUyIgdGl0bGU9IkdTVF9TVEFSVF9URVNUKCkiPkdTVF9TVEFSVF9URVNUPC9hPiAgICAgICAgICAgICAgICAgICAgICAoX190ZXN0bmFtZSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjR1NULUVORC1URVNUOkNBUFMiIHRpdGxlPSJHU1RfRU5EX1RFU1QiPkdTVF9FTkRfVEVTVDwvYT4KKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjQVNTRVJULUJVRkZFUi1SRUZDT1VOVDpDQVBTIiB0aXRsZT0iQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCgpIj5BU1NFUlRfQlVGRkVSX1JFRkNPVU5UPC9hPiAgICAgICAgICAgICAgKGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjQVNTRVJULUNBUFMtUkVGQ09VTlQ6Q0FQUyIgdGl0bGU9IkFTU0VSVF9DQVBTX1JFRkNPVU5UKCkiPkFTU0VSVF9DQVBTX1JFRkNPVU5UPC9hPiAgICAgICAgICAgICAgICAoY2FwcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSkKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjQVNTRVJULUNSSVRJQ0FMOkNBUFMiIHRpdGxlPSJBU1NFUlRfQ1JJVElDQUwoKSI+QVNTRVJUX0NSSVRJQ0FMPC9hPiAgICAgICAgICAgICAgICAgICAgIChjb2RlKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNBU1NFUlQtV0FSTklORzpDQVBTIiB0aXRsZT0iQVNTRVJUX1dBUk5JTkcoKSI+QVNTRVJUX1dBUk5JTkc8L2E+ICAgICAgICAgICAgICAgICAgICAgIChjb2RlKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNBU1NFUlQtTUlOSS1PQkpFQ1QtUkVGQ09VTlQ6Q0FQUyIgdGl0bGU9IkFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCgpIj5BU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQ8L2E+ICAgICAgICAgKGNhcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0FTU0VSVC1PQkpFQ1QtUkVGQ09VTlQ6Q0FQUyIgdGl0bGU9IkFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQoKSI+QVNTRVJUX09CSkVDVF9SRUZDT1VOVDwvYT4gICAgICAgICAgICAgIChvYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0FTU0VSVC1PQkpFQ1QtUkVGQ09VTlQtQkVUV0VFTjpDQVBTIiB0aXRsZT0iQVNTRVJUX09CSkVDVF9SRUZDT1VOVF9CRVRXRUVOKCkiPkFTU0VSVF9PQkpFQ1RfUkVGQ09VTlRfQkVUV0VFTjwvYT4gICAgICAob2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvd2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXIpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0FTU0VSVC1TRVQtU1RBVEU6Q0FQUyIgdGl0bGU9IkFTU0VSVF9TRVRfU1RBVEUoKSI+QVNTRVJUX1NFVF9TVEFURTwvYT4gICAgICAgICAgICAgICAgICAgIChlbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2ZhaWwtdW5sZXNzLWVxdWFscy1pbnQiIHRpdGxlPSJmYWlsX3VubGVzc19lcXVhbHNfaW50KCkiPmZhaWxfdW5sZXNzX2VxdWFsc19pbnQ8L2E+ICAgICAgICAgICAgICAoYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2ZhaWwtdW5sZXNzLWVxdWFscy1mbG9hdCIgdGl0bGU9ImZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCgpIj5mYWlsX3VubGVzc19lcXVhbHNfZmxvYXQ8L2E+ICAgICAgICAgICAgKGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNmYWlsLXVubGVzcy1lcXVhbHMtc3RyaW5nIiB0aXRsZT0iZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZygpIj5mYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nPC9hPiAgICAgICAgICAgKGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNmYWlsLXVubGVzcy1lcXVhbHMtdWludDY0IiB0aXRsZT0iZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCgpIj5mYWlsX3VubGVzc19lcXVhbHNfdWludDY0PC9hPiAgICAgICAgICAgKGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNmYWlsLXVubGVzcy1lcXVhbHMtaW50NjQiIHRpdGxlPSJmYWlsX3VubGVzc19lcXVhbHNfaW50NjQoKSI+ZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0PC9hPiAgICAgICAgICAgIChhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZmFpbC11bmxlc3MtbWVzc2FnZS1lcnJvciIgdGl0bGU9ImZhaWxfdW5sZXNzX21lc3NhZ2VfZXJyb3IoKSI+ZmFpbF91bmxlc3NfbWVzc2FnZV9lcnJvcjwvYT4gICAgICAgICAgIChtc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNhc3NlcnQtZXF1YWxzLWludCIgdGl0bGU9ImFzc2VydF9lcXVhbHNfaW50KCkiPmFzc2VydF9lcXVhbHNfaW50PC9hPiAgICAgICAgICAgICAgICAgICAoYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2Fzc2VydC1lcXVhbHMtZmxvYXQiIHRpdGxlPSJhc3NlcnRfZXF1YWxzX2Zsb2F0KCkiPmFzc2VydF9lcXVhbHNfZmxvYXQ8L2E+ICAgICAgICAgICAgICAgICAoYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIpCisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2Fzc2VydC1lcXVhbHMtc3RyaW5nIiB0aXRsZT0iYXNzZXJ0X2VxdWFsc19zdHJpbmcoKSI+YXNzZXJ0X2VxdWFsc19zdHJpbmc8L2E+ICAgICAgICAgICAgICAgIChhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYikKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjYXNzZXJ0LWVxdWFscy11aW50NjQiIHRpdGxlPSJhc3NlcnRfZXF1YWxzX3VpbnQ2NCgpIj5hc3NlcnRfZXF1YWxzX3VpbnQ2NDwvYT4gICAgICAgICAgICAgICAgKGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNhc3NlcnQtZXF1YWxzLWludDY0IiB0aXRsZT0iYXNzZXJ0X2VxdWFsc19pbnQ2NCgpIj5hc3NlcnRfZXF1YWxzX2ludDY0PC9hPiAgICAgICAgICAgICAgICAgKGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiKQorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNhc3NlcnQtbWVzc2FnZS1lcnJvciIgdGl0bGU9ImFzc2VydF9tZXNzYWdlX2Vycm9yKCkiPmFzc2VydF9tZXNzYWdlX2Vycm9yPC9hPiAgICAgICAgICAgICAgICAobSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKQorPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2staW5pdCIgdGl0bGU9ImdzdF9jaGVja19pbml0ICgpIj5nc3RfY2hlY2tfaW5pdDwvYT4gICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+aW50PC9zcGFuPiAqYXJnYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+Y2hhcjwvc3Bhbj4gKiphcmd2W108L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stbWVzc2FnZS1lcnJvciIgdGl0bGU9ImdzdF9jaGVja19tZXNzYWdlX2Vycm9yICgpIj5nc3RfY2hlY2tfbWVzc2FnZV9lcnJvcjwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2VUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IGRvbWFpbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBjb2RlPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXNldHVwLWVsZW1lbnQiIHRpdGxlPSJnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoKSI+Z3N0X2NoZWNrX3NldHVwX2VsZW1lbnQ8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmFjdG9yeTwvY29kZT48L2VtPik7Cis8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXNldHVwLXNpbmstcGFkIiB0aXRsZT0iZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkICgpIj5nc3RfY2hlY2tfc2V0dXBfc2lua19wYWQ8L2E+ICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RTdGF0aWNQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRpY1BhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKnRtcGw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+ICogICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stc2V0dXAtc3JjLXBhZCIgdGl0bGU9ImdzdF9jaGVja19zZXR1cF9zcmNfcGFkICgpIj5nc3RfY2hlY2tfc2V0dXBfc3JjX3BhZDwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RTdGF0aWNQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRpY1BhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKnRtcGw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+ICogICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stc2V0dXAtc2luay1wYWQtYnktbmFtZSIgdGl0bGU9ImdzdF9jaGVja19zZXR1cF9zaW5rX3BhZF9ieV9uYW1lICgpIj5nc3RfY2hlY2tfc2V0dXBfc2lua19wYWRfYnlfbmFtZTwvYT4gICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RTdGF0aWNQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRpY1BhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKnRtcGw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXNldHVwLXNyYy1wYWQtYnktbmFtZSIgdGl0bGU9ImdzdF9jaGVja19zZXR1cF9zcmNfcGFkX2J5X25hbWUgKCkiPmdzdF9jaGVja19zZXR1cF9zcmNfcGFkX2J5X25hbWU8L2E+ICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFN0YXRpY1BhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGljUGFkVGVtcGxhdGU8L3NwYW4+PC9hPiAqdG1wbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXRlYXJkb3duLXBhZC1ieS1uYW1lIiB0aXRsZT0iZ3N0X2NoZWNrX3RlYXJkb3duX3BhZF9ieV9uYW1lICgpIj5nc3RfY2hlY2tfdGVhcmRvd25fcGFkX2J5X25hbWU8L2E+ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay10ZWFyZG93bi1lbGVtZW50IiB0aXRsZT0iZ3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQgKCkiPmdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50PC9hPiAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay10ZWFyZG93bi1zaW5rLXBhZCIgdGl0bGU9ImdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZCAoKSI+Z3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkPC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXRlYXJkb3duLXNyYy1wYWQiIHRpdGxlPSJnc3RfY2hlY2tfdGVhcmRvd25fc3JjX3BhZCAoKSI+Z3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQ8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLWRyb3AtYnVmZmVycyIgdGl0bGU9ImdzdF9jaGVja19kcm9wX2J1ZmZlcnMgKCkiPmdzdF9jaGVja19kcm9wX2J1ZmZlcnM8L2E+ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1idWZmZXItZGF0YSIgdGl0bGU9ImdzdF9jaGVja19idWZmZXJfZGF0YSAoKSI+Z3N0X2NoZWNrX2J1ZmZlcl9kYXRhPC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djb25zdHBvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY29uc3Rwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stY2Fwcy1lcXVhbCIgdGl0bGU9ImdzdF9jaGVja19jYXBzX2VxdWFsICgpIj5nc3RfY2hlY2tfY2Fwc19lcXVhbDwvYT4gICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHMxPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczI8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stZWxlbWVudC1wdXNoLWJ1ZmZlci1saXN0IiB0aXRsZT0iZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXJfbGlzdCAoKSI+Z3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXJfbGlzdDwvYT4gICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZWxlbWVudF9uYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiAqYnVmZmVyX2luPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiAqYnVmZmVyX291dDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+IGxhc3RfZmxvd19yZXR1cm48L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stZWxlbWVudC1wdXNoLWJ1ZmZlciIgdGl0bGU9ImdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVyICgpIj5nc3RfY2hlY2tfZWxlbWVudF9wdXNoX2J1ZmZlcjwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICplbGVtZW50X25hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXJfaW48L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXJfb3V0PC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stcnVuLXN1aXRlIiB0aXRsZT0iZ3N0X2NoZWNrX3J1bl9zdWl0ZSAoKSI+Z3N0X2NoZWNrX3J1bl9zdWl0ZTwvYT4gICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPlN1aXRlPC9zcGFuPiAqc3VpdGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmbmFtZTwvY29kZT48L2VtPik7Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitUaGVzZSBtYWNyb3MgYW5kIGZ1bmN0aW9ucyBhcmUgZm9yIGludGVybmFsIHVzZSBvZiB0aGUgdW5pdCB0ZXN0cyBmb3VuZAoraW5zaWRlIHRoZSAnY2hlY2snIGRpcmVjdG9yaWVzIG9mIHZhcmlvdXMgR1N0cmVhbWVyIHBhY2thZ2VzLgorPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULVNUQVJULVRFU1Q6Q0FQUyI+PC9hPjxoMz5HU1RfU1RBUlRfVEVTVCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9TVEFSVF9URVNUKF9fdGVzdG5hbWUpPC9wcmU+Cis8cD4KK3dyYXBwZXIgZm9yIGNoZWNrcyBTVEFSVF9URVNUCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPl9fdGVzdG5hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGVzdCBmdW5jdGlvbiBuYW1lPC90ZD4KKzwvdHI+PC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1FTkQtVEVTVDpDQVBTIj48L2E+PGgzPkdTVF9FTkRfVEVTVDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfRU5EX1RFU1Q8L3ByZT4KKzxwPgord3JhcHBlciBmb3IgY2hlY2tzIEVORF9URVNUCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkFTU0VSVC1CVUZGRVItUkVGQ09VTlQ6Q0FQUyI+PC9hPjxoMz5BU1NFUlRfQlVGRkVSX1JFRkNPVU5UKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVChidWZmZXIsIG5hbWUsIHZhbHVlKTwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJBU1NFUlQtQ0FQUy1SRUZDT1VOVDpDQVBTIj48L2E+PGgzPkFTU0VSVF9DQVBTX1JFRkNPVU5UKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgQVNTRVJUX0NBUFNfUkVGQ09VTlQoY2FwcywgbmFtZSwgdmFsdWUpPC9wcmU+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkFTU0VSVC1DUklUSUNBTDpDQVBTIj48L2E+PGgzPkFTU0VSVF9DUklUSUNBTCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEFTU0VSVF9DUklUSUNBTChjb2RlKTwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJBU1NFUlQtV0FSTklORzpDQVBTIj48L2E+PGgzPkFTU0VSVF9XQVJOSU5HKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgQVNTRVJUX1dBUk5JTkcoY29kZSk8L3ByZT4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iQVNTRVJULU1JTkktT0JKRUNULVJFRkNPVU5UOkNBUFMiPjwvYT48aDM+QVNTRVJUX01JTklfT0JKRUNUX1JFRkNPVU5UKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgQVNTRVJUX01JTklfT0JKRUNUX1JFRkNPVU5UKGNhcHMsIG5hbWUsIHZhbHVlKTwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJBU1NFUlQtT0JKRUNULVJFRkNPVU5UOkNBUFMiPjwvYT48aDM+QVNTRVJUX09CSkVDVF9SRUZDT1VOVCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQob2JqZWN0LCBuYW1lLCB2YWx1ZSk8L3ByZT4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iQVNTRVJULU9CSkVDVC1SRUZDT1VOVC1CRVRXRUVOOkNBUFMiPjwvYT48aDM+QVNTRVJUX09CSkVDVF9SRUZDT1VOVF9CRVRXRUVOKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVF9CRVRXRUVOKG9iamVjdCwgbmFtZSwgbG93ZXIsIHVwcGVyKTwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJBU1NFUlQtU0VULVNUQVRFOkNBUFMiPjwvYT48aDM+QVNTRVJUX1NFVF9TVEFURSgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEFTU0VSVF9TRVRfU1RBVEUoZWxlbWVudCwgc3RhdGUsIHJldCk8L3ByZT4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZmFpbC11bmxlc3MtZXF1YWxzLWludCI+PC9hPjxoMz5mYWlsX3VubGVzc19lcXVhbHNfaW50KCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludChhLCBiKTwvcHJlPgorPHA+CitUaGlzIG1hY3JvIGNoZWNrcyB0aGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hPC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPiBhcmUgZXF1YWwgYW5kIGFib3J0cyBpZiB0aGlzIGlzIG5vdCB0aGUKK2Nhc2UsIHByaW50aW5nIGJvdGggZXhwcmVzc2lvbnMgYW5kIHRoZSB2YWx1ZXMgdGhleSBldmFsdWF0ZWQgdG8uIFRoaXMKK21hY3JvIGlzIGZvciB1c2UgaW4gdW5pdCB0ZXN0cy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gdmFsdWUgb3IgZXhwcmVzc2lvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IHZhbHVlIG9yIGV4cHJlc3Npb248L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJmYWlsLXVubGVzcy1lcXVhbHMtZmxvYXQiPjwvYT48aDM+ZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0KCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0KGEsIGIpPC9wcmU+Cis8cD4KK1RoaXMgbWFjcm8gY2hlY2tzIHRoYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmE8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iPC9jb2RlPjwvZW0+IGFyZSAoYWxtb3N0KSBlcXVhbCBhbmQgYWJvcnRzIGlmIHRoaXMKK2lzIG5vdCB0aGUgY2FzZSwgcHJpbnRpbmcgYm90aCBleHByZXNzaW9ucyBhbmQgdGhlIHZhbHVlcyB0aGV5IGV2YWx1YXRlZAordG8uIFRoaXMgbWFjcm8gaXMgZm9yIHVzZSBpbiB1bml0IHRlc3RzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiBvciA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gdmFsdWUgb3IgZXhwcmVzc2lvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IG9yIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPiB2YWx1ZSBvciBleHByZXNzaW9uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xNDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZmFpbC11bmxlc3MtZXF1YWxzLXN0cmluZyI+PC9hPjxoMz5mYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyhhLCBiKTwvcHJlPgorPHA+CitUaGlzIG1hY3JvIGNoZWNrcyB0aGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hPC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPiBhcmUgZXF1YWwgKGFzIHBlciBzdHJjbXApIGFuZCBhYm9ydHMgaWYKK3RoaXMgaXMgbm90IHRoZSBjYXNlLCBwcmludGluZyBib3RoIGV4cHJlc3Npb25zIGFuZCB0aGUgdmFsdWVzIHRoZXkKK2V2YWx1YXRlZCB0by4gVGhpcyBtYWNybyBpcyBmb3IgdXNlIGluIHVuaXQgdGVzdHMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHN0cmluZyBsaXRlcmFsIG9yIGV4cHJlc3Npb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBzdHJpbmcgbGl0ZXJhbCBvciBleHByZXNzaW9uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZmFpbC11bmxlc3MtZXF1YWxzLXVpbnQ2NCI+PC9hPjxoMz5mYWlsX3VubGVzc19lcXVhbHNfdWludDY0KCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NChhLCBiKTwvcHJlPgorPHA+CitUaGlzIG1hY3JvIGNoZWNrcyB0aGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hPC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPiBhcmUgZXF1YWwgYW5kIGFib3J0cyBpZiB0aGlzIGlzIG5vdCB0aGUKK2Nhc2UsIHByaW50aW5nIGJvdGggZXhwcmVzc2lvbnMgYW5kIHRoZSB2YWx1ZXMgdGhleSBldmFsdWF0ZWQgdG8uIFRoaXMKK21hY3JvIGlzIGZvciB1c2UgaW4gdW5pdCB0ZXN0cy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gdmFsdWUgb3IgZXhwcmVzc2lvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHZhbHVlIG9yIGV4cHJlc3Npb248L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJmYWlsLXVubGVzcy1lcXVhbHMtaW50NjQiPjwvYT48aDM+ZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0KCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0KGEsIGIpPC9wcmU+Cis8cD4KK1RoaXMgbWFjcm8gY2hlY2tzIHRoYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmE8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iPC9jb2RlPjwvZW0+IGFyZSBlcXVhbCBhbmQgYWJvcnRzIGlmIHRoaXMgaXMgbm90IHRoZQorY2FzZSwgcHJpbnRpbmcgYm90aCBleHByZXNzaW9ucyBhbmQgdGhlIHZhbHVlcyB0aGV5IGV2YWx1YXRlZCB0by4gVGhpcworbWFjcm8gaXMgZm9yIHVzZSBpbiB1bml0IHRlc3RzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gdmFsdWUgb3IgZXhwcmVzc2lvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiB2YWx1ZSBvciBleHByZXNzaW9uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZmFpbC11bmxlc3MtbWVzc2FnZS1lcnJvciI+PC9hPjxoMz5mYWlsX3VubGVzc19tZXNzYWdlX2Vycm9yKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgZmFpbF91bmxlc3NfbWVzc2FnZV9lcnJvcihtc2csIGRvbWFpbiwgY29kZSk8L3ByZT4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iYXNzZXJ0LWVxdWFscy1pbnQiPjwvYT48aDM+YXNzZXJ0X2VxdWFsc19pbnQoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBhc3NlcnRfZXF1YWxzX2ludChhLCBiKSBmYWlsX3VubGVzc19lcXVhbHNfaW50KGEsIGIpCis8L3ByZT4KKzxwPgorVGhpcyBtYWNybyBjaGVja3MgdGhhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YTwvY29kZT48L2VtPiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmI8L2NvZGU+PC9lbT4gYXJlIGVxdWFsIGFuZCBhYm9ydHMgaWYgdGhpcyBpcyBub3QgdGhlCitjYXNlLCBwcmludGluZyBib3RoIGV4cHJlc3Npb25zIGFuZCB0aGUgdmFsdWVzIHRoZXkgZXZhbHVhdGVkIHRvLiBUaGlzCittYWNybyBpcyBmb3IgdXNlIGluIHVuaXQgdGVzdHMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IHZhbHVlIG9yIGV4cHJlc3Npb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiB2YWx1ZSBvciBleHByZXNzaW9uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iYXNzZXJ0LWVxdWFscy1mbG9hdCI+PC9hPjxoMz5hc3NlcnRfZXF1YWxzX2Zsb2F0KCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgYXNzZXJ0X2VxdWFsc19mbG9hdChhLCBiKSBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQoYSwgYikKKzwvcHJlPgorPHA+CitUaGlzIG1hY3JvIGNoZWNrcyB0aGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hPC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPiBhcmUgKGFsbW9zdCkgZXF1YWwgYW5kIGFib3J0cyBpZiB0aGlzCitpcyBub3QgdGhlIGNhc2UsIHByaW50aW5nIGJvdGggZXhwcmVzc2lvbnMgYW5kIHRoZSB2YWx1ZXMgdGhleSBldmFsdWF0ZWQKK3RvLiBUaGlzIG1hY3JvIGlzIGZvciB1c2UgaW4gdW5pdCB0ZXN0cy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gb3IgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+IHZhbHVlIG9yIGV4cHJlc3Npb248L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiBvciA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gdmFsdWUgb3IgZXhwcmVzc2lvbjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImFzc2VydC1lcXVhbHMtc3RyaW5nIj48L2E+PGgzPmFzc2VydF9lcXVhbHNfc3RyaW5nKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgYXNzZXJ0X2VxdWFsc19zdHJpbmcoYSwgYikgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyhhLCBiKQorPC9wcmU+Cis8cD4KK1RoaXMgbWFjcm8gY2hlY2tzIHRoYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmE8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iPC9jb2RlPjwvZW0+IGFyZSBlcXVhbCAoYXMgcGVyIHN0cmNtcCkgYW5kIGFib3J0cyBpZgordGhpcyBpcyBub3QgdGhlIGNhc2UsIHByaW50aW5nIGJvdGggZXhwcmVzc2lvbnMgYW5kIHRoZSB2YWx1ZXMgdGhleQorZXZhbHVhdGVkIHRvLiBUaGlzIG1hY3JvIGlzIGZvciB1c2UgaW4gdW5pdCB0ZXN0cy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgc3RyaW5nIGxpdGVyYWwgb3IgZXhwcmVzc2lvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHN0cmluZyBsaXRlcmFsIG9yIGV4cHJlc3Npb248L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJhc3NlcnQtZXF1YWxzLXVpbnQ2NCI+PC9hPjxoMz5hc3NlcnRfZXF1YWxzX3VpbnQ2NCgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIGFzc2VydF9lcXVhbHNfdWludDY0KGEsIGIpIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQoYSwgYikKKzwvcHJlPgorPHA+CitUaGlzIG1hY3JvIGNoZWNrcyB0aGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hPC9jb2RlPjwvZW0+IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPiBhcmUgZXF1YWwgYW5kIGFib3J0cyBpZiB0aGlzIGlzIG5vdCB0aGUKK2Nhc2UsIHByaW50aW5nIGJvdGggZXhwcmVzc2lvbnMgYW5kIHRoZSB2YWx1ZXMgdGhleSBldmFsdWF0ZWQgdG8uIFRoaXMKK21hY3JvIGlzIGZvciB1c2UgaW4gdW5pdCB0ZXN0cy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gdmFsdWUgb3IgZXhwcmVzc2lvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHZhbHVlIG9yIGV4cHJlc3Npb248L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJhc3NlcnQtZXF1YWxzLWludDY0Ij48L2E+PGgzPmFzc2VydF9lcXVhbHNfaW50NjQoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBhc3NlcnRfZXF1YWxzX2ludDY0KGEsIGIpIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NChhLCBiKQorPC9wcmU+Cis8cD4KK1RoaXMgbWFjcm8gY2hlY2tzIHRoYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmE8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iPC9jb2RlPjwvZW0+IGFyZSBlcXVhbCBhbmQgYWJvcnRzIGlmIHRoaXMgaXMgbm90IHRoZQorY2FzZSwgcHJpbnRpbmcgYm90aCBleHByZXNzaW9ucyBhbmQgdGhlIHZhbHVlcyB0aGV5IGV2YWx1YXRlZCB0by4gVGhpcworbWFjcm8gaXMgZm9yIHVzZSBpbiB1bml0IHRlc3RzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gdmFsdWUgb3IgZXhwcmVzc2lvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiB2YWx1ZSBvciBleHByZXNzaW9uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iYXNzZXJ0LW1lc3NhZ2UtZXJyb3IiPjwvYT48aDM+YXNzZXJ0X21lc3NhZ2VfZXJyb3IoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBhc3NlcnRfbWVzc2FnZV9lcnJvcihtLCBkLCBjKSBmYWlsX3VubGVzc19tZXNzYWdlX2Vycm9yKG0sIGQsIGMpCis8L3ByZT4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNoZWNrLWluaXQiPjwvYT48aDM+Z3N0X2NoZWNrX2luaXQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2NoZWNrX2luaXQgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+aW50PC9zcGFuPiAqYXJnYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+Y2hhcjwvc3Bhbj4gKiphcmd2W108L2NvZGU+PC9lbT4pOzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2hlY2stbWVzc2FnZS1lcnJvciI+PC9hPjxoMz5nc3RfY2hlY2tfbWVzc2FnZV9lcnJvciAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfY2hlY2tfbWVzc2FnZV9lcnJvciAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2VUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZVR5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gZG9tYWluPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGNvZGU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2hlY2stc2V0dXAtZWxlbWVudCI+PC9hPjxoMz5nc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqICAgICAgICBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZhY3Rvcnk8L2NvZGU+PC9lbT4pOzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2hlY2stc2V0dXAtc2luay1wYWQiPjwvYT48aDM+Z3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqICAgICAgICAgICAgZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RTdGF0aWNQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRpY1BhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKnRtcGw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNoZWNrLXNldHVwLXNyYy1wYWQiPjwvYT48aDM+Z3N0X2NoZWNrX3NldHVwX3NyY19wYWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+ICogICAgICAgICAgICBnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFN0YXRpY1BhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGljUGFkVGVtcGxhdGU8L3NwYW4+PC9hPiAqdG1wbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2hlY2stc2V0dXAtc2luay1wYWQtYnktbmFtZSI+PC9hPjxoMz5nc3RfY2hlY2tfc2V0dXBfc2lua19wYWRfYnlfbmFtZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkPC9zcGFuPjwvYT4gKiAgICAgICAgICAgIGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZF9ieV9uYW1lICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZFRlbXBsYXRlLmh0bWwjR3N0U3RhdGljUGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0aWNQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+ICp0bXBsPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2hlY2stc2V0dXAtc3JjLXBhZC1ieS1uYW1lIj48L2E+PGgzPmdzdF9jaGVja19zZXR1cF9zcmNfcGFkX2J5X25hbWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+ICogICAgICAgICAgICBnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZF9ieV9uYW1lICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFN0YXRpY1BhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGljUGFkVGVtcGxhdGU8L3NwYW4+PC9hPiAqdG1wbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNoZWNrLXRlYXJkb3duLXBhZC1ieS1uYW1lIj48L2E+PGgzPmdzdF9jaGVja190ZWFyZG93bl9wYWRfYnlfbmFtZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfY2hlY2tfdGVhcmRvd25fcGFkX2J5X25hbWUgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNoZWNrLXRlYXJkb3duLWVsZW1lbnQiPjwvYT48aDM+Z3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2hlY2stdGVhcmRvd24tc2luay1wYWQiPjwvYT48aDM+Z3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZCAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNoZWNrLXRlYXJkb3duLXNyYy1wYWQiPjwvYT48aDM+Z3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2hlY2stZHJvcC1idWZmZXJzIj48L2E+PGgzPmdzdF9jaGVja19kcm9wX2J1ZmZlcnMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycyAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitVbnJlZiBhbmQgcmVtb3ZlIGFsbCBidWZmZXJzIHRoYXQgYXJlIGluIHRoZSBnbG9iYWwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcnM8L2NvZGU+PC9lbT4gR0xpc3QsCitlbXB0eWluZyB0aGUgbGlzdC4KKzwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xODwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNoZWNrLWJ1ZmZlci1kYXRhIj48L2E+PGgzPmdzdF9jaGVja19idWZmZXJfZGF0YSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfY2hlY2tfYnVmZmVyX2RhdGEgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY29uc3Rwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NvbnN0cG9pbnRlcjwvc3Bhbj48L2E+IGRhdGE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ29tcGFyZSB0aGUgYnVmZmVyIGNvbnRlbnRzIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5idWZmZXIgdG8gY29tcGFyZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5kYXRhIHRvIGNvbXBhcmUgdG88L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2l6ZSBvZiBkYXRhIHRvIGNvbXBhcmU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY2hlY2stY2Fwcy1lcXVhbCI+PC9hPjxoMz5nc3RfY2hlY2tfY2Fwc19lcXVhbCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfY2hlY2tfY2Fwc19lcXVhbCAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczE8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzMjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NvbXBhcmUgdHdvIGNhcHMgd2l0aCBnc3RfY2Fwc19pc19lcXVhbCBhbmQgZmFpbCB1bmxlc3MgdGhleSBhcmUKK2VxdWFsLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHMxPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmZpcnN0IGNhcHMgdG8gY29tcGFyZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2Vjb25kIGNhcHMgdG8gY29tcGFyZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTg8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jaGVjay1lbGVtZW50LXB1c2gtYnVmZmVyLWxpc3QiPjwvYT48aDM+Z3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXJfbGlzdCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfY2hlY2tfZWxlbWVudF9wdXNoX2J1ZmZlcl9saXN0ICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmVsZW1lbnRfbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gKmJ1ZmZlcl9pbjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gKmJ1ZmZlcl9vdXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiBsYXN0X2Zsb3dfcmV0dXJuPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlIGFuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50PC9jb2RlPjwvZW0+IHdpdGggdGhlIGZhY3Rvcnkgd2l0aCB0aGUgbmFtZSBhbmQgcHVzaCB0aGUgYnVmZmVycyBpbgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcl9pbjwvY29kZT48L2VtPiB0byB0aGlzIGVsZW1lbnQuIFRoZSBlbGVtZW50IHNob3VsZCBjcmVhdGUgdGhlIGJ1ZmZlcnMgZXF1YWwgdG8KK3RoZSBidWZmZXJzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXJfb3V0PC9jb2RlPjwvZW0+LiBXZSBvbmx5IGNoZWNrIHRoZSBjYXBzLCBzaXplIGFuZCB0aGUgZGF0YSBvZiB0aGUKK2J1ZmZlcnMuIFRoaXMgZnVuY3Rpb24gdW5yZWZzIHRoZSBidWZmZXJzIGluIHRoZSB0d28gbGlzdHMuCitUaGUgbGFzdF9mbG93X3JldHVybiBwYXJhbWV0ZXIgaW5kaWNhdGVzIHRoZSBleHBlY3RlZCBmbG93IHJldHVybiB2YWx1ZSBmcm9tCitwdXNoaW5nIHRoZSBmaW5hbCBidWZmZXIgaW4gdGhlIGxpc3QuCitUaGlzIGNhbiBiZSB1c2VkIHRvIHNldCB1cCBhIHRlc3Qgd2hpY2ggcHVzaGVzIHNvbWUgYnVmZmVycyBhbmQgdGhlbiBhbgoraW52YWxpZCBidWZmZXIsIHdoZW4gdGhlIGZpbmFsIGJ1ZmZlciBpcyBleHBlY3RlZCB0byBmYWlsLCBmb3IgZXhhbXBsZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50X25hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bmFtZSBvZiB0aGUgZWxlbWVudCB0aGF0IG5lZWRzIHRvIGJlIGNyZWF0ZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcl9pbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGxpc3Qgb2YgYnVmZmVycyB0aGF0IG5lZWRzIHRvIGJlIHB1Y2hlZCB0byB0aGUgZWxlbWVudDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyX291dDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGxpc3Qgb2YgYnVmZmVycyB0aGF0IHdlIGV4cGVjdCBmcm9tIHRoZSBlbGVtZW50PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sYXN0X2Zsb3dfcmV0dXJuPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBsYXN0IGJ1ZmZlciBwdXNoIG5lZWRzIHRvIGdpdmUgdGhpcyBHc3RGbG93UmV0dXJuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xODwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNoZWNrLWVsZW1lbnQtcHVzaC1idWZmZXIiPjwvYT48aDM+Z3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXIgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXIgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICplbGVtZW50X25hbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXJfaW48L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXJfb3V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlIGFuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50PC9jb2RlPjwvZW0+IHdpdGggdGhlIGZhY3Rvcnkgd2l0aCB0aGUgbmFtZSBhbmQgcHVzaCB0aGUKKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXJfaW48L2NvZGU+PC9lbT4gdG8gdGhpcyBlbGVtZW50LiBUaGUgZWxlbWVudCBzaG91bGQgY3JlYXRlIG9uZSBidWZmZXIKK2FuZCB0aGlzIHdpbGwgYmUgY29tcGFyZWQgd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyX291dDwvY29kZT48L2VtPi4gV2Ugb25seSBjaGVjayB0aGUgY2FwcworYW5kIHRoZSBkYXRhIG9mIHRoZSBidWZmZXJzLiBUaGlzIGZ1bmN0aW9uIHVucmVmcyB0aGUgYnVmZmVycy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50X25hbWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bmFtZSBvZiB0aGUgZWxlbWVudCB0aGF0IG5lZWRzIHRvIGJlIGNyZWF0ZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcl9pbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wdXNoIHRoaXMgYnVmZmVyIHRvIHRoZSBlbGVtZW50PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXJfb3V0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmNvbXBhcmUgdGhlIHJlc3VsdCB3aXRoIHRoaXMgYnVmZmVyPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xODwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWNoZWNrLXJ1bi1zdWl0ZSI+PC9hPjxoMz5nc3RfY2hlY2tfcnVuX3N1aXRlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgZ3N0X2NoZWNrX3J1bl9zdWl0ZSAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+U3VpdGU8L3NwYW4+ICpzdWl0ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy1Hc3RDb250cm9sbGVyR09iamVjdC5odG1sIGIvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmQ1YWY0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbApAQCAtMCwwICsxLDQ2NCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdzdENvbnRyb2xsZXJHT2JqZWN0PC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZ3N0cmVhbWVyLWNvbnRyb2wuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBEeW5hbWljIFBhcmFtZXRlciBDb250cm9sIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0TEZPQ29udHJvbFNvdXJjZSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1kYXRhcHJvdG9jb2wuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBEYXRhIFByb3RvY29sIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItY29udHJvbC5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLWRhdGFwcm90b2NvbC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI2dzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0LnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RDb250cm9sbGVyR09iamVjdC50b3Bfb2ZfcGFnZSI+PC9hPkdzdENvbnRyb2xsZXJHT2JqZWN0PC9zcGFuPjwvaDI+Cis8cD5Hc3RDb250cm9sbGVyR09iamVjdCDigJQgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gY29udmVuaWVuY2UgbWV0aG9kcyBmb3IgdXNpbmcgZHluYW1pYyBwcm9wZXJ0aWVzPC9wPgorPC90ZD4KKzx0ZCB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgorPC90cj48L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3Quc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2xpYnMvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmgmZ3Q7CisKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sbGVyLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sbGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENvbnRyb2xsZXI8L3NwYW4+PC9hPiAqICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWNvbnRyb2wtcHJvcGVydGllcyIgdGl0bGU9ImdzdF9vYmplY3RfY29udHJvbF9wcm9wZXJ0aWVzICgpIj5nc3Rfb2JqZWN0X2NvbnRyb2xfcHJvcGVydGllczwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDb250cm9sbGVyR09iamVjdC5odG1sI2dzdC1vYmplY3QtdW5jb250cm9sLXByb3BlcnRpZXMiIHRpdGxlPSJnc3Rfb2JqZWN0X3VuY29udHJvbF9wcm9wZXJ0aWVzICgpIj5nc3Rfb2JqZWN0X3VuY29udHJvbF9wcm9wZXJ0aWVzPC9hPiAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sIiB0aXRsZT0iR3N0Q29udHJvbGxlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDb250cm9sbGVyPC9zcGFuPjwvYT4gKiAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1nZXQtY29udHJvbGxlciIgdGl0bGU9ImdzdF9vYmplY3RfZ2V0X2NvbnRyb2xsZXIgKCkiPmdzdF9vYmplY3RfZ2V0X2NvbnRyb2xsZXI8L2E+ICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXNldC1jb250cm9sbGVyIiB0aXRsZT0iZ3N0X29iamVjdF9zZXRfY29udHJvbGxlciAoKSI+Z3N0X29iamVjdF9zZXRfY29udHJvbGxlcjwvYT4gICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sIiB0aXRsZT0iR3N0Q29udHJvbGxlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xsZXI8L3NwYW4+PC9hPiAqY29udHJvbGxlcjwvY29kZT48L2VtPik7Cis8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1zdWdnZXN0LW5leHQtc3luYyIgdGl0bGU9ImdzdF9vYmplY3Rfc3VnZ2VzdF9uZXh0X3N5bmMgKCkiPmdzdF9vYmplY3Rfc3VnZ2VzdF9uZXh0X3N5bmM8L2E+ICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXN5bmMtdmFsdWVzIiB0aXRsZT0iZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoKSI+Z3N0X29iamVjdF9zeW5jX3ZhbHVlczwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRpbWVzdGFtcDwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4gKiAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1nZXQtY29udHJvbC1zb3VyY2UiIHRpdGxlPSJnc3Rfb2JqZWN0X2dldF9jb250cm9sX3NvdXJjZSAoKSI+Z3N0X29iamVjdF9nZXRfY29udHJvbF9zb3VyY2U8L2E+ICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwcm9wZXJ0eV9uYW1lPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1zZXQtY29udHJvbC1zb3VyY2UiIHRpdGxlPSJnc3Rfb2JqZWN0X3NldF9jb250cm9sX3NvdXJjZSAoKSI+Z3N0X29iamVjdF9zZXRfY29udHJvbF9zb3VyY2U8L2E+ICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwcm9wZXJ0eV9uYW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+ICpjc291cmNlPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1nZXQtdmFsdWUtYXJyYXlzIiB0aXRsZT0iZ3N0X29iamVjdF9nZXRfdmFsdWVfYXJyYXlzICgpIj5nc3Rfb2JqZWN0X2dldF92YWx1ZV9hcnJheXM8L2E+ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZXN0YW1wPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU2luZ2x5LUxpbmtlZC1MaXN0cy5odG1sI0dTTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTTGlzdDwvc3Bhbj48L2E+ICp2YWx1ZV9hcnJheXM8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC12YWx1ZS1hcnJheSIgdGl0bGU9ImdzdF9vYmplY3RfZ2V0X3ZhbHVlX2FycmF5ICgpIj5nc3Rfb2JqZWN0X2dldF92YWx1ZV9hcnJheTwvYT4gICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZXN0YW1wPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0VmFsdWVBcnJheSIgdGl0bGU9InN0cnVjdCBHc3RWYWx1ZUFycmF5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VmFsdWVBcnJheTwvc3Bhbj48L2E+ICp2YWx1ZV9hcnJheTwvY29kZT48L2VtPik7Cis8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1nZXQtY29udHJvbC1yYXRlIiB0aXRsZT0iZ3N0X29iamVjdF9nZXRfY29udHJvbF9yYXRlICgpIj5nc3Rfb2JqZWN0X2dldF9jb250cm9sX3JhdGU8L2E+ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1zZXQtY29udHJvbC1yYXRlIiB0aXRsZT0iZ3N0X29iamVjdF9zZXRfY29udHJvbF9yYXRlICgpIj5nc3Rfb2JqZWN0X3NldF9jb250cm9sX3JhdGU8L2E+ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gY29udHJvbF9yYXRlPC9jb2RlPjwvZW0+KTsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RDb250cm9sbGVyR09iamVjdC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK1RoZXNlIG1ldGhvZHMgYWxsb3cgdG8gdXNlIHNvbWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sbGVyPC9zcGFuPjwvYT4gZnVuY3Rpb25hbGl0eSBkaXJlY3RseSBmcm9tCit0aGUgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gY2xhc3MuCis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0LmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtb2JqZWN0LWNvbnRyb2wtcHJvcGVydGllcyI+PC9hPjxoMz5nc3Rfb2JqZWN0X2NvbnRyb2xfcHJvcGVydGllcyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q29udHJvbGxlcjwvc3Bhbj48L2E+ICogICAgIGdzdF9vYmplY3RfY29udHJvbF9wcm9wZXJ0aWVzICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgR09iamVjdAorPC9wPgorPHA+CitDcmVhdGVzIGEgR3N0Q29udHJvbGxlciB0aGF0IGFsbG93cyB5b3UgdG8gZHluYW1pY2FsbHkgY29udHJvbCBvbmUsIG9yIG1vcmUsIEdPYmplY3QgcHJvcGVydGllcy4KK0lmIHRoZSBnaXZlbiBHT2JqZWN0IGFscmVhZHkgaGFzIGEgR3N0Q29udHJvbGxlciwgaXQgYWRkcyB0aGUgZ2l2ZW4gcHJvcGVydGllcyB0byB0aGUgZXhpc3RpbmcKK2NvbnRyb2xsZXIgYW5kIHJldHVybnMgdGhhdCBjb250cm9sbGVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgb2JqZWN0IG9mIHdoaWNoIHNvbWUgcHJvcGVydGllcyBzaG91bGQgYmUgY29udHJvbGxlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gdGVybWluYXRlZCBsaXN0IG9mIHByb3BlcnR5IG5hbWVzIHRoYXQgc2hvdWxkIGJlIGNvbnRyb2xsZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgR3N0Q29udHJvbGxlciB3aXRoIHdoaWNoIHRoZSB1c2VyIGNhbiBjb250cm9sIHRoZSBnaXZlbiBwcm9wZXJ0aWVzIGR5bmFtaWNhbGx5IG9yIE5VTEwgaWYKK29uZSBvciBtb3JlIG9mIHRoZSBnaXZlbiBwcm9wZXJ0aWVzIGFyZW4ndCBhdmFpbGFibGUsIG9yIGNhbm5vdCBiZSBjb250cm9sbGVkLCBmb3IgdGhlIGdpdmVuIGVsZW1lbnQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC45PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtb2JqZWN0LXVuY29udHJvbC1wcm9wZXJ0aWVzIj48L2E+PGgzPmdzdF9vYmplY3RfdW5jb250cm9sX3Byb3BlcnRpZXMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X29iamVjdF91bmNvbnRyb2xfcHJvcGVydGllcyAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBHT2JqZWN0Cis8L3A+Cis8cD4KK1JlbW92ZXMgdGhlIGdpdmVuIGVsZW1lbnQncyBwcm9wZXJ0aWVzIGZyb20gaXQncyBjb250cm9sbGVyCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBvYmplY3Qgb2Ygd2hpY2ggc29tZSBwcm9wZXJ0aWVzIHNob3VsZCBub3QgYmUgY29udHJvbGxlZCBhbnltb3JlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB0ZXJtaW5hdGVkIGxpc3Qgb2YgcHJvcGVydHkgbmFtZXMgdGhhdCBzaG91bGQgYmUgY29udHJvbGxlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZiBvbmUgb2YgdGhlIGdpdmVuIHByb3BlcnR5IG5hbWVzIGlzbid0IGhhbmRsZWQgYnkgdGhlCitjb250cm9sbGVyLCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBvdGhlcndpc2U8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjk8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1vYmplY3QtZ2V0LWNvbnRyb2xsZXIiPjwvYT48aDM+Z3N0X29iamVjdF9nZXRfY29udHJvbGxlciAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q29udHJvbGxlcjwvc3Bhbj48L2E+ICogICAgIGdzdF9vYmplY3RfZ2V0X2NvbnRyb2xsZXIgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0dldHMgdGhlIGNvbnRyb2xsZXIgZm9yIHRoZSBnaXZlbiBHT2JqZWN0Cis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBvYmplY3QgdGhhdCBoYXMgY29udHJvbGxlZCBwcm9wZXJ0aWVzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGNvbnRyb2xsZXIgaGFuZGxpbmcgc29tZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudCdzIHByb3BlcnRpZXMsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIG5vIGNvbnRyb2xsZXI8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjk8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1vYmplY3Qtc2V0LWNvbnRyb2xsZXIiPjwvYT48aDM+Z3N0X29iamVjdF9zZXRfY29udHJvbGxlciAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3Rfb2JqZWN0X3NldF9jb250cm9sbGVyICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sbGVyPC9zcGFuPjwvYT4gKmNvbnRyb2xsZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXRzIHRoZSBjb250cm9sbGVyIG9uIHRoZSBnaXZlbiBHT2JqZWN0Cis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBvYmplY3QgdGhhdCBzaG91bGQgZ2V0IHRoZSBjb250cm9sbGVyPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb250cm9sbGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjb250cm9sbGVyIG9iamVjdCB0byBwbHVnIGluPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIHRoZSBHT2JqZWN0IGFscmVhZHkgaGFzIGFuIGNvbnRyb2xsZXIsIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IG90aGVyd2lzZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuOTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW9iamVjdC1zdWdnZXN0LW5leHQtc3luYyI+PC9hPjxoMz5nc3Rfb2JqZWN0X3N1Z2dlc3RfbmV4dF9zeW5jICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAgICAgICAgZ3N0X29iamVjdF9zdWdnZXN0X25leHRfc3luYyAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIEdPYmplY3QKKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG9iamVjdCB0aGF0IGhhcyBjb250cm9sbGVkIHByb3BlcnRpZXM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zYW1lIHRoaW5nIGFzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sbGVyLmh0bWwjZ3N0LWNvbnRyb2xsZXItc3VnZ2VzdC1uZXh0LXN5bmMiIHRpdGxlPSJnc3RfY29udHJvbGxlcl9zdWdnZXN0X25leHRfc3luYyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY29udHJvbGxlcl9zdWdnZXN0X25leHRfc3luYygpPC9jb2RlPjwvYT4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTM8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1vYmplY3Qtc3luYy12YWx1ZXMiPjwvYT48aDM+Z3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lc3RhbXA8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgR09iamVjdAorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgb2JqZWN0IHRoYXQgaGFzIGNvbnRyb2xsZWQgcHJvcGVydGllczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZXN0YW1wPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB0aW1lIHRoYXQgc2hvdWxkIGJlIHByb2Nlc3NlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnNhbWUgdGhpbmcgYXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCNnc3QtY29udHJvbGxlci1zeW5jLXZhbHVlcyIgdGl0bGU9ImdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzKCk8L2NvZGU+PC9hPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC45PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtb2JqZWN0LWdldC1jb250cm9sLXNvdXJjZSI+PC9hPjxoMz5nc3Rfb2JqZWN0X2dldF9jb250cm9sX3NvdXJjZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+ICogIGdzdF9vYmplY3RfZ2V0X2NvbnRyb2xfc291cmNlICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwcm9wZXJ0eV9uYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorR2V0cyB0aGUgY29ycmVzcG9uZGluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiBmb3IgdGhlIHByb3BlcnR5LiBUaGlzIHNob3VsZCBiZSB1bnJlZmVyZW5jZWQKK2FnYWluIGFmdGVyIHVzZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG9iamVjdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJvcGVydHlfbmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5uYW1lIG9mIHRoZSBwcm9wZXJ0eSBmb3Igd2hpY2ggdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+IHNob3VsZCBiZSBnZXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4gZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcm9wZXJ0eV9uYW1lPC9jb2RlPjwvZW0+IG9yIE5VTEwgaWYgdGhlIHByb3BlcnR5IGlzIG5vdAorY29udHJvbGxlZCBieSB0aGlzIGNvbnRyb2xsZXIgb3Igbm8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4gd2FzIGFzc2lnbmVkIHlldC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjE0PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3Qtb2JqZWN0LXNldC1jb250cm9sLXNvdXJjZSI+PC9hPjxoMz5nc3Rfb2JqZWN0X3NldF9jb250cm9sX3NvdXJjZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3Rfb2JqZWN0X3NldF9jb250cm9sX3NvdXJjZSAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqcHJvcGVydHlfbmFtZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiAqY3NvdXJjZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+IGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJvcGVydHlfbmFtZTwvY29kZT48L2VtPi4gSWYgdGhlcmUgYWxyZWFkeSB3YXMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPgorZm9yIHRoaXMgcHJvcGVydHkgaXQgd2lsbCBiZSB1bnJlZmVyZW5jZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjb250cm9sbGVyIG9iamVjdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJvcGVydHlfbmFtZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5uYW1lIG9mIHRoZSBwcm9wZXJ0eSBmb3Igd2hpY2ggdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+IHNob3VsZCBiZSBzZXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNzb3VyY2U8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+IHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHRoZSBwcm9wZXJ0eTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZiB0aGUgZ2l2ZW4gcHJvcGVydHkgaXNuJ3QgaGFuZGxlZCBieSB0aGUgY29udHJvbGxlciBvciB0aGUgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+Citjb3VsZG4ndCBiZSBib3VuZCB0byB0aGUgcHJvcGVydHksIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIGV2ZXJ5dGhpbmcgd29ya2VkIGFzIGV4cGVjdGVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1vYmplY3QtZ2V0LXZhbHVlLWFycmF5cyI+PC9hPjxoMz5nc3Rfb2JqZWN0X2dldF92YWx1ZV9hcnJheXMgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X29iamVjdF9nZXRfdmFsdWVfYXJyYXlzICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZXN0YW1wPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU2luZ2x5LUxpbmtlZC1MaXN0cy5odG1sI0dTTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTTGlzdDwvc3Bhbj48L2E+ICp2YWx1ZV9hcnJheXM8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitGdW5jdGlvbiB0byBiZSBhYmxlIHRvIGdldCBhbiBhcnJheSBvZiB2YWx1ZXMgZm9yIG9uZSBvciBtb3JlIGdpdmVuIGVsZW1lbnQKK3Byb3BlcnRpZXMuCis8L3A+Cis8cD4KK0lmIHRoZSBHc3RWYWx1ZUFycmF5LSZndDt2YWx1ZXMgYXJyYXkgaW4gbGlzdCBub2RlcyBpcyBOVUxMLCBpdCB3aWxsIGJlIGNyZWF0ZWQKK2J5IHRoZSBmdW5jdGlvbi4KK1RoZSB0eXBlIG9mIHRoZSB2YWx1ZXMgaW4gdGhlIGFycmF5IGFyZSB0aGUgc2FtZSBhcyB0aGUgcHJvcGVydHkncyB0eXBlLgorPC9wPgorPHA+CitUaGUgZ19vYmplY3RfKiBmdW5jdGlvbnMgYXJlIGp1c3QgY29udmVuaWVuY2UgZnVuY3Rpb25zIGZvciBHT2JqZWN0Cis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBvYmplY3QgdGhhdCBoYXMgY29udHJvbGxlZCBwcm9wZXJ0aWVzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50aW1lc3RhbXA8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHRpbWUgdGhhdCBzaG91bGQgYmUgcHJvY2Vzc2VkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZV9hcnJheXM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bGlzdCB0byByZXR1cm4gdGhlIGNvbnRyb2wtdmFsdWVzIGluPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgZ2l2ZW4gYXJyYXkocykgY291bGQgYmUgZmlsbGVkLCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuOTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW9iamVjdC1nZXQtdmFsdWUtYXJyYXkiPjwvYT48aDM+Z3N0X29iamVjdF9nZXRfdmFsdWVfYXJyYXkgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X29iamVjdF9nZXRfdmFsdWVfYXJyYXkgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZXN0YW1wPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0VmFsdWVBcnJheSIgdGl0bGU9InN0cnVjdCBHc3RWYWx1ZUFycmF5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VmFsdWVBcnJheTwvc3Bhbj48L2E+ICp2YWx1ZV9hcnJheTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0Z1bmN0aW9uIHRvIGJlIGFibGUgdG8gZ2V0IGFuIGFycmF5IG9mIHZhbHVlcyBmb3Igb25lIGVsZW1lbnQgcHJvcGVydGllcworPC9wPgorPHA+CitJZiB0aGUgR3N0VmFsdWVBcnJheS0mZ3Q7dmFsdWVzIGFycmF5IGlzIE5VTEwsIGl0IHdpbGwgYmUgY3JlYXRlZCBieSB0aGUgZnVuY3Rpb24uCitUaGUgdHlwZSBvZiB0aGUgdmFsdWVzIGluIHRoZSBhcnJheSBhcmUgdGhlIHNhbWUgYXMgdGhlIHByb3BlcnR5J3MgdHlwZS4KKzwvcD4KKzxwPgorVGhlIGdfb2JqZWN0XyogZnVuY3Rpb25zIGFyZSBqdXN0IGNvbnZlbmllbmNlIGZ1bmN0aW9ucyBmb3IgR09iamVjdAorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgb2JqZWN0IHRoYXQgaGFzIGNvbnRyb2xsZWQgcHJvcGVydGllczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZXN0YW1wPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB0aW1lIHRoYXQgc2hvdWxkIGJlIHByb2Nlc3NlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWVfYXJyYXk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YXJyYXkgdG8gcHV0IGNvbnRyb2wtdmFsdWVzIGluPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgZ2l2ZW4gYXJyYXkocykgY291bGQgYmUgZmlsbGVkLCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuOTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW9iamVjdC1nZXQtY29udHJvbC1yYXRlIj48L2E+PGgzPmdzdF9vYmplY3RfZ2V0X2NvbnRyb2xfcmF0ZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gICAgICAgIGdzdF9vYmplY3RfZ2V0X2NvbnRyb2xfcmF0ZSAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK09idGFpbiB0aGUgY29udHJvbC1yYXRlIGZvciB0aGlzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4uIEF1ZGlvIHByb2Nlc3NpbmcgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+CitvYmplY3RzIHdpbGwgdXNlIHRoaXMgcmF0ZSB0byBzdWItZGl2aWRlIHRoZWlyIHByb2Nlc3NpbmcgbG9vcCBhbmQgY2FsbAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1zeW5jLXZhbHVlcyIgdGl0bGU9ImdzdF9vYmplY3Rfc3luY192YWx1ZXMgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X29iamVjdF9zeW5jX3ZhbHVlcygpPC9jb2RlPjwvYT4gaW5iZXR3ZWVuLiBUaGUgbGVuZ3RoIG9mIHRoZSBwcm9jZXNzaW5nIHNlZ21lbnQKK3Nob3VsZCBiZSB1cCB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29udHJvbDwvY29kZT48L2VtPi1yYXRlIG5hbm9zZWNvbmRzLgorPC9wPgorPHA+CitJZiB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPiBpcyBub3QgdW5kZXIgcHJvcGVydHkgY29udHJvbCwgdGhpcyB3aWxsIHJldHVybgorPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stVElNRS1OT05FOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQ0xPQ0tfVElNRV9OT05FPC9jb2RlPjwvYT4uIFRoaXMgYWxsb3dzIHRoZSBlbGVtZW50IHRvIGF2b2lkIHRoZSBzdWItZGl2aWRpbmcuCis8L3A+Cis8cD4KK1RoZSBjb250cm9sLXJhdGUgaXMgbm90IGV4cGVjdGVkIHRvIGNoYW5nZSBpZiB0aGUgZWxlbWVudCBpcyBpbgorPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1QQVVTRUQ6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9QQVVTRUQ8L2NvZGU+PC9hPiBvciA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVBMQVlJTkc6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9QTEFZSU5HPC9jb2RlPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBvYmplY3QgdGhhdCBoYXMgY29udHJvbGxlZCBwcm9wZXJ0aWVzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGNvbnRyb2wgcmF0ZSBpbiBuYW5vc2Vjb25kczwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1vYmplY3Qtc2V0LWNvbnRyb2wtcmF0ZSI+PC9hPjxoMz5nc3Rfb2JqZWN0X3NldF9jb250cm9sX3JhdGUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X29iamVjdF9zZXRfY29udHJvbF9yYXRlICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gY29udHJvbF9yYXRlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ2hhbmdlIHRoZSBjb250cm9sLXJhdGUgZm9yIHRoaXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPi4gQXVkaW8gcHJvY2Vzc2luZyA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4KK29iamVjdHMgd2lsbCB1c2UgdGhpcyByYXRlIHRvIHN1Yi1kaXZpZGUgdGhlaXIgcHJvY2Vzc2luZyBsb29wIGFuZCBjYWxsCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXN5bmMtdmFsdWVzIiB0aXRsZT0iZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X3N5bmNfdmFsdWVzKCk8L2NvZGU+PC9hPiBpbmJldHdlZW4uIFRoZSBsZW5ndGggb2YgdGhlIHByb2Nlc3Npbmcgc2VnbWVudAorc2hvdWxkIGJlIHVwIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb250cm9sPC9jb2RlPjwvZW0+LXJhdGUgbmFub3NlY29uZHMuCis8L3A+Cis8cD4KK1RoZSBjb250cm9sLXJhdGUgc2hvdWxkIG5vdCBjaGFuZ2UgaWYgdGhlIGVsZW1lbnQgaXMgaW4gPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1QQVVTRUQ6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9QQVVTRUQ8L2NvZGU+PC9hPiBvcgorPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1QTEFZSU5HOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RBVEVfUExBWUlORzwvY29kZT48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgb2JqZWN0IHRoYXQgaGFzIGNvbnRyb2xsZWQgcHJvcGVydGllczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29udHJvbF9yYXRlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBuZXcgY29udHJvbC1yYXRlIGluIG5hbm9zZWNvbmRzLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTA8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3Quc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xsZXIuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xsZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sbGVyPC9zcGFuPjwvYT4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwgYi9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzllZTJjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwKQEAgLTAsMCArMSw1NDQgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5Hc3REYXRhUXVldWU8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJnc3RyZWFtZXItYmFzZS5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEJhc2UgYW5kIFV0aWxsaXR5IENsYXNzZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sIiB0aXRsZT0iR3N0VHlwZUZpbmRIZWxwZXIiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItY29udHJvbC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIER5bmFtaWMgUGFyYW1ldGVyIENvbnRyb2wiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItYmFzZS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLWNvbnRyb2wuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLnRvcF9vZl9wYWdlIj48L2E+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvaDI+Cis8cD5Hc3REYXRhUXVldWUg4oCUIFRocmVhZHNhZmUgcXVldWVpbmcgb2JqZWN0PC9wPgorPC90ZD4KKzx0ZCB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgorPC90cj48L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLnN5bm9wc2lzIj48L2E+PGgyPlN5bm9wc2lzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyNpbmNsdWRlICZsdDtnc3QvYmFzZS9nc3RkYXRhcXVldWUuaCZndDsKKworc3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+R3N0RGF0YVF1ZXVlPC9hPjsKK3N0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZVNpemUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlU2l6ZSI+R3N0RGF0YVF1ZXVlU2l6ZTwvYT47Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlQ2hlY2tGdWxsRnVuY3Rpb24iIHRpdGxlPSJHc3REYXRhUXVldWVDaGVja0Z1bGxGdW5jdGlvbiAoKSI+KkdzdERhdGFRdWV1ZUNoZWNrRnVsbEZ1bmN0aW9uPC9hPikgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZTwvc3Bhbj48L2E+ICpxdWV1ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHZpc2libGU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBieXRlczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiB0aW1lPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gY2hlY2tkYXRhPC9jb2RlPjwvZW0+KTsKK3N0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZUl0ZW0iIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlSXRlbSI+R3N0RGF0YVF1ZXVlSXRlbTwvYT47Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlRW1wdHlDYWxsYmFjayIgdGl0bGU9IkdzdERhdGFRdWV1ZUVtcHR5Q2FsbGJhY2sgKCkiPipHc3REYXRhUXVldWVFbXB0eUNhbGxiYWNrPC9hPikgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZSIgdGl0bGU9InN0cnVjdCBHc3REYXRhUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWU8L3NwYW4+PC9hPiAqcXVldWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBjaGVja2RhdGE8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZUZ1bGxDYWxsYmFjayIgdGl0bGU9IkdzdERhdGFRdWV1ZUZ1bGxDYWxsYmFjayAoKSI+KkdzdERhdGFRdWV1ZUZ1bGxDYWxsYmFjazwvYT4pICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZTwvc3Bhbj48L2E+ICpxdWV1ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGNoZWNrZGF0YTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3REYXRhUXVldWU8L3NwYW4+PC9hPiAqICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLW5ldyIgdGl0bGU9ImdzdF9kYXRhX3F1ZXVlX25ldyAoKSI+Z3N0X2RhdGFfcXVldWVfbmV3PC9hPiAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZUNoZWNrRnVsbEZ1bmN0aW9uIiB0aXRsZT0iR3N0RGF0YVF1ZXVlQ2hlY2tGdWxsRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWVDaGVja0Z1bGxGdW5jdGlvbjwvc3Bhbj48L2E+IGNoZWNrZnVsbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGNoZWNrZGF0YTwvY29kZT48L2VtPik7Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3REYXRhUXVldWU8L3NwYW4+PC9hPiAqICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLW5ldy1mdWxsIiB0aXRsZT0iZ3N0X2RhdGFfcXVldWVfbmV3X2Z1bGwgKCkiPmdzdF9kYXRhX3F1ZXVlX25ld19mdWxsPC9hPiAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVDaGVja0Z1bGxGdW5jdGlvbiIgdGl0bGU9IkdzdERhdGFRdWV1ZUNoZWNrRnVsbEZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlQ2hlY2tGdWxsRnVuY3Rpb248L3NwYW4+PC9hPiBjaGVja2Z1bGw8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZUZ1bGxDYWxsYmFjayIgdGl0bGU9IkdzdERhdGFRdWV1ZUZ1bGxDYWxsYmFjayAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZUZ1bGxDYWxsYmFjazwvc3Bhbj48L2E+IGZ1bGxjYWxsYmFjazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlRW1wdHlDYWxsYmFjayIgdGl0bGU9IkdzdERhdGFRdWV1ZUVtcHR5Q2FsbGJhY2sgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWVFbXB0eUNhbGxiYWNrPC9zcGFuPjwvYT4gZW1wdHljYWxsYmFjazwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGNoZWNrZGF0YTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1wdXNoIiB0aXRsZT0iZ3N0X2RhdGFfcXVldWVfcHVzaCAoKSI+Z3N0X2RhdGFfcXVldWVfcHVzaDwvYT4gICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZSIgdGl0bGU9InN0cnVjdCBHc3REYXRhUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWU8L3NwYW4+PC9hPiAqcXVldWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZUl0ZW0iIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlSXRlbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZUl0ZW08L3NwYW4+PC9hPiAqaXRlbTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1wb3AiIHRpdGxlPSJnc3RfZGF0YV9xdWV1ZV9wb3AgKCkiPmdzdF9kYXRhX3F1ZXVlX3BvcDwvYT4gICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVJdGVtIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZUl0ZW0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWVJdGVtPC9zcGFuPjwvYT4gKippdGVtPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLWZsdXNoIiB0aXRsZT0iZ3N0X2RhdGFfcXVldWVfZmx1c2ggKCkiPmdzdF9kYXRhX3F1ZXVlX2ZsdXNoPC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLXNldC1mbHVzaGluZyIgdGl0bGU9ImdzdF9kYXRhX3F1ZXVlX3NldF9mbHVzaGluZyAoKSI+Z3N0X2RhdGFfcXVldWVfc2V0X2ZsdXNoaW5nPC9hPiAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZSIgdGl0bGU9InN0cnVjdCBHc3REYXRhUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWU8L3NwYW4+PC9hPiAqcXVldWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBmbHVzaGluZzwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1kcm9wLWhlYWQiIHRpdGxlPSJnc3RfZGF0YV9xdWV1ZV9kcm9wX2hlYWQgKCkiPmdzdF9kYXRhX3F1ZXVlX2Ryb3BfaGVhZDwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLWlzLWZ1bGwiIHRpdGxlPSJnc3RfZGF0YV9xdWV1ZV9pc19mdWxsICgpIj5nc3RfZGF0YV9xdWV1ZV9pc19mdWxsPC9hPiAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZTwvc3Bhbj48L2E+ICpxdWV1ZTwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1pcy1lbXB0eSIgdGl0bGU9ImdzdF9kYXRhX3F1ZXVlX2lzX2VtcHR5ICgpIj5nc3RfZGF0YV9xdWV1ZV9pc19lbXB0eTwvYT4gICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZTwvc3Bhbj48L2E+ICpxdWV1ZTwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1nZXQtbGV2ZWwiIHRpdGxlPSJnc3RfZGF0YV9xdWV1ZV9nZXRfbGV2ZWwgKCkiPmdzdF9kYXRhX3F1ZXVlX2dldF9sZXZlbDwvYT4gICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVTaXplIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZVNpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWVTaXplPC9zcGFuPjwvYT4gKmxldmVsPC9jb2RlPjwvZW0+KTsKKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLWxpbWl0cy1jaGFuZ2VkIiB0aXRsZT0iZ3N0X2RhdGFfcXVldWVfbGltaXRzX2NoYW5nZWQgKCkiPmdzdF9kYXRhX3F1ZXVlX2xpbWl0c19jaGFuZ2VkPC9hPiAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlPC9jb2RlPjwvZW0+KTsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZTwvc3Bhbj48L2E+IGlzIGFuIG9iamVjdCB0aGF0IGhhbmRsZXMgdGhyZWFkc2FmZSBxdWV1ZWluZyBvZiBvYmplY3RzLiBJdAorYWxzbyBwcm92aWRlcyBzaXplLXJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gVGhpcyBvYmplY3Qgc2hvdWxkIGJlIHVzZWQgZm9yCithbnkgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRoYXQgd2lzaGVzIHRvIHByb3ZpZGUgc29tZSBzb3J0IG9mIHF1ZXVlaW5nIGZ1bmN0aW9uYWxpdHkuCis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RGF0YVF1ZXVlIj48L2E+PGgzPnN0cnVjdCBHc3REYXRhUXVldWU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3REYXRhUXVldWUgeworICBHT2JqZWN0IG9iamVjdDsKK307Cis8L3ByZT4KKzxwPgorT3BhcXVlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4gc3RydWN0dXJlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3REYXRhUXVldWUub2JqZWN0Ij48L2E+b2JqZWN0PC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcGFyZW50IHN0cnVjdHVyZTwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjExPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3REYXRhUXVldWVTaXplIj48L2E+PGgzPnN0cnVjdCBHc3REYXRhUXVldWVTaXplPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0RGF0YVF1ZXVlU2l6ZSB7CisgIGd1aW50IHZpc2libGU7CisgIGd1aW50IGJ5dGVzOworICBndWludDY0IHRpbWU7Cit9OworPC9wcmU+Cis8cD4KK1N0cnVjdHVyZSBkZXNjcmliaW5nIHRoZSBzaXplIG9mIGEgcXVldWUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3REYXRhUXVldWVTaXplLnZpc2libGUiPjwvYT52aXNpYmxlPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5udW1iZXIgb2YgYnVmZmVyczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3REYXRhUXVldWVTaXplLmJ5dGVzIj48L2E+Ynl0ZXM8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPm51bWJlciBvZiBieXRlczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RGF0YVF1ZXVlU2l6ZS50aW1lIj48L2E+dGltZTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YW1vdW50IG9mIHRpbWU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjExPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3REYXRhUXVldWVDaGVja0Z1bGxGdW5jdGlvbiI+PC9hPjxoMz5Hc3REYXRhUXVldWVDaGVja0Z1bGxGdW5jdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAoKkdzdERhdGFRdWV1ZUNoZWNrRnVsbEZ1bmN0aW9uKSAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gdmlzaWJsZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGJ5dGVzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHRpbWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBjaGVja2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitUaGUgcHJvdG90eXBlIG9mIHRoZSBmdW5jdGlvbiB1c2VkIHRvIGluZm9ybSB0aGUgcXVldWUgdGhhdCBpdCBzaG91bGQgYmUKK2NvbnNpZGVyZWQgYXMgZnVsbC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWV1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52aXNpYmxlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSBudW1iZXIgb2YgdmlzaWJsZSBpdGVtcyBjdXJyZW50bHkgaW4gdGhlIHF1ZXVlLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Ynl0ZXM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGFtb3VudCBvZiBieXRlcyBjdXJyZW50bHkgaW4gdGhlIHF1ZXVlLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgYWNjdW11bGF0ZWQgZHVyYXRpb24gb2YgdGhlIGl0ZW1zIGN1cnJlbnRseSBpbiB0aGUgcXVldWUuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jaGVja2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gcmVnaXN0ZXJlZCB3aGVuIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZTwvc3Bhbj48L2E+IHdhcyBjcmVhdGVkLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5UUlVFPC9zcGFuPjwvYT4gaWYgdGhlIHF1ZXVlIHNob3VsZCBiZSBjb25zaWRlcmVkIGZ1bGwuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RGF0YVF1ZXVlSXRlbSI+PC9hPjxoMz5zdHJ1Y3QgR3N0RGF0YVF1ZXVlSXRlbTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdERhdGFRdWV1ZUl0ZW0geworICBHc3RNaW5pT2JqZWN0ICpvYmplY3Q7CisgIGd1aW50IHNpemU7CisgIGd1aW50NjQgZHVyYXRpb247CisgIGdib29sZWFuIHZpc2libGU7CisKKyAgLyogdXNlciBzdXBwbGllZCBkZXN0cm95IGZ1bmN0aW9uICovCisgIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3k7Cit9OworPC9wcmU+Cis8cD4KK1N0cnVjdHVyZSB1c2VkIGJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4uIFlvdSBjYW4gc3VwcGx5IGEgZGlmZmVyZW50IHN0cnVjdHVyZSwgYXMKK2xvbmcgYXMgdGhlIHRvcCBvZiB0aGUgc3RydWN0dXJlIGlzIGlkZW50aWNhbCB0byB0aGlzIHN0cnVjdHVyZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdERhdGFRdWV1ZUl0ZW0ub2JqZWN0Ij48L2E+b2JqZWN0PC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+IHRvIHF1ZXVlLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3REYXRhUXVldWVJdGVtLnNpemUiPjwvYT5zaXplPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgbWluaW9iamVjdC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdERhdGFRdWV1ZUl0ZW0uZHVyYXRpb24iPjwvYT5kdXJhdGlvbjwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGR1cmF0aW9uIGluIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gb2YgdGhlIG1pbmlvYmplY3QuIENhbiBub3QgYmUKKzxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR1NULUNMT0NLLVRJTUUtTk9ORTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0NMT0NLX1RJTUVfTk9ORTwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3REYXRhUXVldWVJdGVtLnZpc2libGUiPjwvYT52aXNpYmxlPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+VFJVRTwvc3Bhbj48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4gc2hvdWxkIGJlIGNvbnNpZGVyZWQgYXMgYSB2aXNpYmxlIG9iamVjdC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1EYXRhc2V0cy5odG1sI0dEZXN0cm95Tm90aWZ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R0Rlc3Ryb3lOb3RpZnk8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RGF0YVF1ZXVlSXRlbS5kZXN0cm95Ij48L2E+ZGVzdHJveTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItRGF0YXNldHMuaHRtbCNHRGVzdHJveU5vdGlmeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT4gZnVuY3Rpb24gdG8gdXNlIHRvIGZyZWUgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVJdGVtIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZUl0ZW0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWVJdGVtPC9zcGFuPjwvYT4uCitUaGlzIGZ1bmN0aW9uIHNob3VsZCBhbHNvIGRyb3AgdGhlIHJlZmVyZW5jZSB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+IHRoZSBvd25lciBvZiB0aGUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVJdGVtIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZUl0ZW0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWVJdGVtPC9zcGFuPjwvYT4gaXMgYXNzdW1lZCB0byBob2xkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMTE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdERhdGFRdWV1ZUVtcHR5Q2FsbGJhY2siPjwvYT48aDM+R3N0RGF0YVF1ZXVlRW1wdHlDYWxsYmFjayAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICAoKkdzdERhdGFRdWV1ZUVtcHR5Q2FsbGJhY2spICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gY2hlY2tkYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RGF0YVF1ZXVlRnVsbENhbGxiYWNrIj48L2E+PGgzPkdzdERhdGFRdWV1ZUZ1bGxDYWxsYmFjayAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICAoKkdzdERhdGFRdWV1ZUZ1bGxDYWxsYmFjaykgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gY2hlY2tkYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRhdGEtcXVldWUtbmV3Ij48L2E+PGgzPmdzdF9kYXRhX3F1ZXVlX25ldyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZSIgdGl0bGU9InN0cnVjdCBHc3REYXRhUXVldWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4gKiAgICAgIGdzdF9kYXRhX3F1ZXVlX25ldyAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZUNoZWNrRnVsbEZ1bmN0aW9uIiB0aXRsZT0iR3N0RGF0YVF1ZXVlQ2hlY2tGdWxsRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWVDaGVja0Z1bGxGdW5jdGlvbjwvc3Bhbj48L2E+IGNoZWNrZnVsbDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGNoZWNrZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2hlY2tmdWxsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjYWxsYmFjayB1c2VkIHRvIHRlbGwgaWYgdGhlIGVsZW1lbnQgY29uc2lkZXJzIHRoZSBxdWV1ZSBmdWxsCitvciBub3QuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jaGVja2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHRoYXQgd2lsbCBiZSBnaXZlbiBpbiB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNoZWNrZnVsbDwvY29kZT48L2VtPiBjYWxsYmFjay48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZTwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1kYXRhLXF1ZXVlLW5ldy1mdWxsIj48L2E+PGgzPmdzdF9kYXRhX3F1ZXVlX25ld19mdWxsICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3REYXRhUXVldWU8L3NwYW4+PC9hPiAqICAgICAgZ3N0X2RhdGFfcXVldWVfbmV3X2Z1bGwgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlQ2hlY2tGdWxsRnVuY3Rpb24iIHRpdGxlPSJHc3REYXRhUXVldWVDaGVja0Z1bGxGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZUNoZWNrRnVsbEZ1bmN0aW9uPC9zcGFuPjwvYT4gY2hlY2tmdWxsPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVGdWxsQ2FsbGJhY2siIHRpdGxlPSJHc3REYXRhUXVldWVGdWxsQ2FsbGJhY2sgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWVGdWxsQ2FsbGJhY2s8L3NwYW4+PC9hPiBmdWxsY2FsbGJhY2s8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZUVtcHR5Q2FsbGJhY2siIHRpdGxlPSJHc3REYXRhUXVldWVFbXB0eUNhbGxiYWNrICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlRW1wdHlDYWxsYmFjazwvc3Bhbj48L2E+IGVtcHR5Y2FsbGJhY2s8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBjaGVja2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGVzIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4uIFRoZSBkaWZmZXJlbmNlIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmdzdF9kYXRhX3F1ZXVlX25ldzwvY29kZT48L2VtPiBpcyB0aGF0IGl0IHdpbGwKK25vdCBlbWl0IHRoZSAnZnVsbCcgYW5kICdlbXB0eScgc2lnbmFscywgYnV0IGluc3RlYWQgY2FsbGluZyBkaXJlY3RseSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVsbGNhbGxiYWNrPC9jb2RlPjwvZW0+CitvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW1wdHljYWxsYmFjazwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jaGVja2Z1bGw8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGNhbGxiYWNrIHVzZWQgdG8gdGVsbCBpZiB0aGUgZWxlbWVudCBjb25zaWRlcnMgdGhlIHF1ZXVlIGZ1bGwKK29yIG5vdC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bGxjYWxsYmFjazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY2FsbGJhY2sgd2hpY2ggd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgcXVldWUgaXMgY29uc2lkZXJlZCBmdWxsLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW1wdHljYWxsYmFjazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgY2FsbGJhY2sgd2hpY2ggd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgcXVldWUgaXMgY29uc2lkZXJlZCBlbXB0eS48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNoZWNrZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdGhhdCB3aWxsIGJlIGdpdmVuIGluIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2hlY2tmdWxsPC9jb2RlPjwvZW0+IGNhbGxiYWNrLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRhdGEtcXVldWUtcHVzaCI+PC9hPjxoMz5nc3RfZGF0YV9xdWV1ZV9wdXNoICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9kYXRhX3F1ZXVlX3B1c2ggICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZSIgdGl0bGU9InN0cnVjdCBHc3REYXRhUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWU8L3NwYW4+PC9hPiAqcXVldWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZUl0ZW0iIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlSXRlbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZUl0ZW08L3NwYW4+PC9hPiAqaXRlbTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1B1c2hlcyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVJdGVtIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZUl0ZW0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWVJdGVtPC9zcGFuPjwvYT4gKG9yIGEgc3RydWN0dXJlIHRoYXQgYmVnaW5zIHdpdGggdGhlIHNhbWUgZmllbGRzKQorb24gdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWV1ZTwvY29kZT48L2VtPi4gSWYgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWV1ZTwvY29kZT48L2VtPiBpcyBmdWxsLCB0aGUgY2FsbCB3aWxsIGJsb2NrIHVudGlsIHNwYWNlIGlzCithdmFpbGFibGUsIE9SIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVldWU8L2NvZGU+PC9lbT4gaXMgc2V0IHRvIGZsdXNoaW5nIHN0YXRlLgorTVQgc2FmZS4KKzwvcD4KKzxwPgorTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaGFzIHNsaWdodGx5IGRpZmZlcmVudCBzZW1hbnRpY3MgdGhhbiA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNnc3QtcGFkLXB1c2giPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9wdXNoKCk8L2NvZGU+PC9hPgorYW5kIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI2dzdC1wYWQtcHVzaC1ldmVudCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3B1c2hfZXZlbnQoKTwvY29kZT48L2E+OiB0aGlzIGZ1bmN0aW9uIG9ubHkgdGFrZXMgb3duZXJzaGlwIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdGVtPC9jb2RlPjwvZW0+IGFuZAordGhlIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiBjb250YWluZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPml0ZW08L2NvZGU+PC9lbT4gaWYgdGhlIHB1c2ggd2FzIHN1Y2Nlc3NmdWwuIElmIEZBTFNFCitpcyByZXR1cm5lZCwgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aXRlbTwvY29kZT48L2VtPiBhbmQgaXRzIGNvbnRlbnRzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZSIgdGl0bGU9InN0cnVjdCBHc3REYXRhUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWU8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPml0ZW08L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlSXRlbSIgdGl0bGU9InN0cnVjdCBHc3REYXRhUXVldWVJdGVtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlSXRlbTwvc3Bhbj48L2E+LjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPgorPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5UUlVFPC9zcGFuPjwvYT4gaWYgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdGVtPC9jb2RlPjwvZW0+IHdhcyBzdWNjZXNzZnVsbHkgcHVzaGVkIG9uIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVldWU8L2NvZGU+PC9lbT4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRhdGEtcXVldWUtcG9wIj48L2E+PGgzPmdzdF9kYXRhX3F1ZXVlX3BvcCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfZGF0YV9xdWV1ZV9wb3AgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVJdGVtIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZUl0ZW0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWVJdGVtPC9zcGFuPjwvYT4gKippdGVtPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmV0cmlldmVzIHRoZSBmaXJzdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aXRlbTwvY29kZT48L2VtPiBhdmFpbGFibGUgb24gdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWV1ZTwvY29kZT48L2VtPi4gSWYgdGhlIHF1ZXVlIGlzIGN1cnJlbnRseQorZW1wdHksIHRoZSBjYWxsIHdpbGwgYmxvY2sgdW50aWwgYXQgbGVhc3Qgb25lIGl0ZW0gaXMgYXZhaWxhYmxlLCBPUiB0aGUKKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWV1ZTwvY29kZT48L2VtPiBpcyBzZXQgdG8gdGhlIGZsdXNoaW5nIHN0YXRlLgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWV1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdGVtPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnBvaW50ZXIgdG8gc3RvcmUgdGhlIHJldHVybmVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVJdGVtIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZUl0ZW0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWVJdGVtPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPlRSVUU8L3NwYW4+PC9hPiBpZiBhbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aXRlbTwvY29kZT48L2VtPiB3YXMgc3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCBmcm9tIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVldWU8L2NvZGU+PC9lbT4uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRhdGEtcXVldWUtZmx1c2giPjwvYT48aDM+Z3N0X2RhdGFfcXVldWVfZmx1c2ggKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2RhdGFfcXVldWVfZmx1c2ggICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZTwvc3Bhbj48L2E+ICpxdWV1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0ZsdXNoZXMgYWxsIHRoZSBjb250ZW50cyBvZiB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXVlPC9jb2RlPjwvZW0+LiBBbnkgY2FsbCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjZ3N0LWRhdGEtcXVldWUtcHVzaCIgdGl0bGU9ImdzdF9kYXRhX3F1ZXVlX3B1c2ggKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc3RfZGF0YV9xdWV1ZV9wdXNoPC9zcGFuPjwvYT4gYW5kCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjZ3N0LWRhdGEtcXVldWUtcG9wIiB0aXRsZT0iZ3N0X2RhdGFfcXVldWVfcG9wICgpIj48c3BhbiBjbGFzcz0idHlwZSI+Z3N0X2RhdGFfcXVldWVfcG9wPC9zcGFuPjwvYT4gd2lsbCBiZSByZWxlYXNlZC4KK01UIHNhZmUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZSIgdGl0bGU9InN0cnVjdCBHc3REYXRhUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWU8L3NwYW4+PC9hPi48L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRhdGEtcXVldWUtc2V0LWZsdXNoaW5nIj48L2E+PGgzPmdzdF9kYXRhX3F1ZXVlX3NldF9mbHVzaGluZyAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICBnc3RfZGF0YV9xdWV1ZV9zZXRfZmx1c2hpbmcgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gZmx1c2hpbmc8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitTZXRzIHRoZSBxdWV1ZSB0byBmbHVzaGluZyBzdGF0ZSBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zmx1c2hpbmc8L2NvZGU+PC9lbT4gaXMgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5UUlVFPC9zcGFuPjwvYT4uIElmIHNldCB0byBmbHVzaGluZworc3RhdGUsIGFueSBpbmNvbWluZyBkYXRhIG9uIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVldWU8L2NvZGU+PC9lbT4gd2lsbCBiZSBkaXNjYXJkZWQuIEFueSBjYWxsIGN1cnJlbnRseQorYmxvY2tpbmcgb24gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLXB1c2giIHRpdGxlPSJnc3RfZGF0YV9xdWV1ZV9wdXNoICgpIj48c3BhbiBjbGFzcz0idHlwZSI+Z3N0X2RhdGFfcXVldWVfcHVzaDwvc3Bhbj48L2E+IG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1wb3AiIHRpdGxlPSJnc3RfZGF0YV9xdWV1ZV9wb3AgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc3RfZGF0YV9xdWV1ZV9wb3A8L3NwYW4+PC9hPiB3aWxsIHJldHVybiBzdHJhaWdodAorYXdheSB3aXRoIGEgcmV0dXJuIHZhbHVlIG9mIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkZBTFNFPC9zcGFuPjwvYT4uIFdoaWxlIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVldWU8L2NvZGU+PC9lbT4gaXMgaW4gZmx1c2hpbmcgc3RhdGUsIAorYWxsIGNhbGxzIHRvIHRob3NlIHR3byBmdW5jdGlvbnMgd2lsbCByZXR1cm4gPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+RkFMU0U8L3NwYW4+PC9hPi4KKzwvcD4KKzxwPgorTVQgU2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWV1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbHVzaGluZzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gc3RhdGluZyBpZiB0aGUgcXVldWUgd2lsbCBiZSBmbHVzaGluZyBvciBub3QuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRhdGEtcXVldWUtZHJvcC1oZWFkIj48L2E+PGgzPmdzdF9kYXRhX3F1ZXVlX2Ryb3BfaGVhZCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfZGF0YV9xdWV1ZV9kcm9wX2hlYWQgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUG9wIGFuZCB1bnJlZiB0aGUgaGVhZC1tb3N0IDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiB3aXRoIHRoZSBnaXZlbiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVldWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4gdG8gZHJvcCBhbiBpdGVtIGZyb20uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gb2YgdGhlIGl0ZW0gdG8gZHJvcC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UUlVFIGlmIGFuIGVsZW1lbnQgd2FzIHJlbW92ZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRhdGEtcXVldWUtaXMtZnVsbCI+PC9hPjxoMz5nc3RfZGF0YV9xdWV1ZV9pc19mdWxsICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9kYXRhX3F1ZXVlX2lzX2Z1bGwgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZSIgdGl0bGU9InN0cnVjdCBHc3REYXRhUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWU8L3NwYW4+PC9hPiAqcXVldWU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitRdWVyaWVzIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWV1ZTwvY29kZT48L2VtPiBpcyBmdWxsLiBUaGlzIGNoZWNrIHdpbGwgYmUgZG9uZSB1c2luZyB0aGUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVDaGVja0Z1bGxGdW5jdGlvbiIgdGl0bGU9IkdzdERhdGFRdWV1ZUNoZWNrRnVsbEZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlQ2hlY2tGdWxsRnVuY3Rpb248L3NwYW4+PC9hPiByZWdpc3RlcmVkIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXVlPC9jb2RlPjwvZW0+LgorTVQgc2FmZS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWV1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPlRSVUU8L3NwYW4+PC9hPiBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVldWU8L2NvZGU+PC9lbT4gaXMgZnVsbC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjExPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZGF0YS1xdWV1ZS1pcy1lbXB0eSI+PC9hPjxoMz5nc3RfZGF0YV9xdWV1ZV9pc19lbXB0eSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICBnc3RfZGF0YV9xdWV1ZV9pc19lbXB0eSAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUXVlcmllcyBpZiB0aGVyZSBhcmUgYW55IGl0ZW1zIGluIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVldWU8L2NvZGU+PC9lbT4uCitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZSIgdGl0bGU9InN0cnVjdCBHc3REYXRhUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWU8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+VFJVRTwvc3Bhbj48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWV1ZTwvY29kZT48L2VtPiBpcyBlbXB0eS48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjExPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZGF0YS1xdWV1ZS1nZXQtbGV2ZWwiPjwvYT48aDM+Z3N0X2RhdGFfcXVldWVfZ2V0X2xldmVsICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9kYXRhX3F1ZXVlX2dldF9sZXZlbCAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZSIgdGl0bGU9InN0cnVjdCBHc3REYXRhUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWU8L3NwYW4+PC9hPiAqcXVldWU8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZVNpemUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlU2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZVNpemU8L3NwYW4+PC9hPiAqbGV2ZWw8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgdGhlIGN1cnJlbnQgbGV2ZWwgb2YgdGhlIHF1ZXVlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxldmVsPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBsb2NhdGlvbiB0byBzdG9yZSB0aGUgcmVzdWx0PC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xMTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRhdGEtcXVldWUtbGltaXRzLWNoYW5nZWQiPjwvYT48aDM+Z3N0X2RhdGFfcXVldWVfbGltaXRzX2NoYW5nZWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2RhdGFfcXVldWVfbGltaXRzX2NoYW5nZWQgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZTwvc3Bhbj48L2E+ICpxdWV1ZTwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0luZm9ybSB0aGUgcXVldWUgdGhhdCB0aGUgbGltaXRzIGZvciB0aGUgZnVsbG5lc3MgY2hlY2sgaGF2ZSBjaGFuZ2VkIGFuZCB0aGF0CithbnkgYmxvY2tpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLXB1c2giIHRpdGxlPSJnc3RfZGF0YV9xdWV1ZV9wdXNoICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9kYXRhX3F1ZXVlX3B1c2goKTwvY29kZT48L2E+IHNob3VsZCBiZSB1bmJsb2NrZWQgdG8gcmVjaGVjayB0aGUgbGltdHMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZTwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xMTwvcD4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwgYi9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZmMGMyZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbApAQCAtMCwwICsxLDI0OSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdzdE5ldFRpbWVQYWNrZXQ8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJnc3RyZWFtZXItbmV0Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgTmV0d29yayBDbGFzc2VzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCIgdGl0bGU9IkdzdE5ldENsaWVudENsb2NrIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3ROZXRUaW1lUHJvdmlkZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdE5ldENsaWVudENsb2NrLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItbmV0Lmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0LnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC50b3Bfb2ZfcGFnZSI+PC9hPkdzdE5ldFRpbWVQYWNrZXQ8L3NwYW4+PC9oMj4KKzxwPkdzdE5ldFRpbWVQYWNrZXQg4oCUIEhlbHBlciBzdHJ1Y3R1cmUgdG8gY29uc3RydWN0IGNsb2NrIHBhY2tldHMgdXNlZAorICAgICAgICAgICAgICAgICAgICBieSBuZXR3b3JrIGNsb2Nrcy48L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0LnN5bm9wc2lzIj48L2E+PGgyPlN5bm9wc2lzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyNpbmNsdWRlICZsdDtnc3QvbmV0L2dzdG5ldC5oJmd0OworCitzdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjR3N0TmV0VGltZVBhY2tldCIgdGl0bGU9InN0cnVjdCBHc3ROZXRUaW1lUGFja2V0Ij5Hc3ROZXRUaW1lUGFja2V0PC9hPjsKKyNkZWZpbmUgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHU1QtTkVULVRJTUUtUEFDS0VULVNJWkU6Q0FQUyIgdGl0bGU9IkdTVF9ORVRfVElNRV9QQUNLRVRfU0laRSI+R1NUX05FVF9USU1FX1BBQ0tFVF9TSVpFPC9hPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHc3ROZXRUaW1lUGFja2V0IiB0aXRsZT0ic3RydWN0IEdzdE5ldFRpbWVQYWNrZXQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TmV0VGltZVBhY2tldDwvc3Bhbj48L2E+ICogIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjZ3N0LW5ldC10aW1lLXBhY2tldC1uZXciIHRpdGxlPSJnc3RfbmV0X3RpbWVfcGFja2V0X25ldyAoKSI+Z3N0X25ldF90aW1lX3BhY2tldF9uZXc8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4pOworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHc3ROZXRUaW1lUGFja2V0IiB0aXRsZT0ic3RydWN0IEdzdE5ldFRpbWVQYWNrZXQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TmV0VGltZVBhY2tldDwvc3Bhbj48L2E+ICogIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjZ3N0LW5ldC10aW1lLXBhY2tldC1yZWNlaXZlIiB0aXRsZT0iZ3N0X25ldF90aW1lX3BhY2tldF9yZWNlaXZlICgpIj5nc3RfbmV0X3RpbWVfcGFja2V0X3JlY2VpdmU8L2E+ICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBmZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+c3RydWN0IHNvY2thZGRyPC9zcGFuPiAqYWRkcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+c29ja2xlbl90PC9zcGFuPiAqbGVuPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI2dzdC1uZXQtdGltZS1wYWNrZXQtc2VuZCIgdGl0bGU9ImdzdF9uZXRfdGltZV9wYWNrZXRfc2VuZCAoKSI+Z3N0X25ldF90aW1lX3BhY2tldF9zZW5kPC9hPiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHc3ROZXRUaW1lUGFja2V0IiB0aXRsZT0ic3RydWN0IEdzdE5ldFRpbWVQYWNrZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRUaW1lUGFja2V0PC9zcGFuPjwvYT4gKnBhY2tldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBmZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+c3RydWN0IHNvY2thZGRyPC9zcGFuPiAqYWRkcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+c29ja2xlbl90PC9zcGFuPiBsZW48L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDg8L3NwYW4+PC9hPiAqICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNnc3QtbmV0LXRpbWUtcGFja2V0LXNlcmlhbGl6ZSIgdGl0bGU9ImdzdF9uZXRfdGltZV9wYWNrZXRfc2VyaWFsaXplICgpIj5nc3RfbmV0X3RpbWVfcGFja2V0X3NlcmlhbGl6ZTwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI0dzdE5ldFRpbWVQYWNrZXQiIHRpdGxlPSJzdHJ1Y3QgR3N0TmV0VGltZVBhY2tldCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE5ldFRpbWVQYWNrZXQ8L3NwYW4+PC9hPiAqcGFja2V0PC9jb2RlPjwvZW0+KTsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPgorVmFyaW91cyBmdW5jdGlvbnMgZm9yIHJlY2VpdmluZywgc2VuZGluZyBhbiBzZXJpYWxpemluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI0dzdE5ldFRpbWVQYWNrZXQiIHRpdGxlPSJzdHJ1Y3QgR3N0TmV0VGltZVBhY2tldCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE5ldFRpbWVQYWNrZXQ8L3NwYW4+PC9hPgorc3RydWN0dXJlcy4KKzwvcD4KKzxwPgorTGFzdCByZXZpZXdlZCBvbiAyMDA1LTExLTIzICgwLjkuNSkKKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0TmV0VGltZVBhY2tldCI+PC9hPjxoMz5zdHJ1Y3QgR3N0TmV0VGltZVBhY2tldDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdE5ldFRpbWVQYWNrZXQgeworICBHc3RDbG9ja1RpbWUgbG9jYWxfdGltZTsKKyAgR3N0Q2xvY2tUaW1lIHJlbW90ZV90aW1lOworfTsKKzwvcHJlPgorPHA+CitDb250ZW50IG9mIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHc3ROZXRUaW1lUGFja2V0IiB0aXRsZT0ic3RydWN0IEdzdE5ldFRpbWVQYWNrZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRUaW1lUGFja2V0PC9zcGFuPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3ROZXRUaW1lUGFja2V0LmxvY2FsLXRpbWUiPjwvYT5sb2NhbF90aW1lPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbG9jYWwgdGltZSB3aGVuIHRoaXMgcGFja2V0IHdhcyBzZW50PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdE5ldFRpbWVQYWNrZXQucmVtb3RlLXRpbWUiPjwvYT5yZW1vdGVfdGltZTwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHJlbW90ZSB0aW1lIG9ic2VydmF0aW9uPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR1NULU5FVC1USU1FLVBBQ0tFVC1TSVpFOkNBUFMiPjwvYT48aDM+R1NUX05FVF9USU1FX1BBQ0tFVF9TSVpFPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9ORVRfVElNRV9QQUNLRVRfU0laRSAxNgorPC9wcmU+Cis8cD4KK1RoZSBzaXplIG9mIHRoZSBwYWNrZXRzIHNlbnQgYmV0d2VlbiBuZXR3b3JrIGNsb2Nrcy4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW5ldC10aW1lLXBhY2tldC1uZXciPjwvYT48aDM+Z3N0X25ldF90aW1lX3BhY2tldF9uZXcgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjR3N0TmV0VGltZVBhY2tldCIgdGl0bGU9InN0cnVjdCBHc3ROZXRUaW1lUGFja2V0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE5ldFRpbWVQYWNrZXQ8L3NwYW4+PC9hPiAqICBnc3RfbmV0X3RpbWVfcGFja2V0X25ldyAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlcyBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI0dzdE5ldFRpbWVQYWNrZXQiIHRpdGxlPSJzdHJ1Y3QgR3N0TmV0VGltZVBhY2tldCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE5ldFRpbWVQYWNrZXQ8L3NwYW4+PC9hPiBmcm9tIGEgYnVmZmVyIHJlY2VpdmVkIG92ZXIgdGhlIG5ldHdvcmsuIFRoZQorY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4gaXMgYXQgbGVhc3QKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjR1NULU5FVC1USU1FLVBBQ0tFVC1TSVpFOkNBUFMiIHRpdGxlPSJHU1RfTkVUX1RJTUVfUEFDS0VUX1NJWkUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfTkVUX1RJTUVfUEFDS0VUX1NJWkU8L3NwYW4+PC9hPiBieXRlcyBsb25nLgorPC9wPgorPHA+CitJZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+IGlzIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+TlVMTDwvc3Bhbj48L2E+LCB0aGUgbG9jYWwgYW5kIHJlbW90ZSB0aW1lcyB3aWxsIGJlIHNldCB0bworPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stVElNRS1OT05FOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfQ0xPQ0tfVElNRV9OT05FPC9zcGFuPjwvYT4uCis8L3A+Cis8cD4KK01UIHNhZmUuIENhbGxlciBvd25zIHJldHVybiB2YWx1ZSAoZ19mcmVlIHRvIGZyZWUpLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGJ1ZmZlciBmcm9tIHdoaWNoIHRvIGNvbnN0cnVjdCB0aGUgcGFja2V0LCBvciBOVUxMPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI0dzdE5ldFRpbWVQYWNrZXQiIHRpdGxlPSJzdHJ1Y3QgR3N0TmV0VGltZVBhY2tldCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE5ldFRpbWVQYWNrZXQ8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbmV0LXRpbWUtcGFja2V0LXJlY2VpdmUiPjwvYT48aDM+Z3N0X25ldF90aW1lX3BhY2tldF9yZWNlaXZlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI0dzdE5ldFRpbWVQYWNrZXQiIHRpdGxlPSJzdHJ1Y3QgR3N0TmV0VGltZVBhY2tldCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3ROZXRUaW1lUGFja2V0PC9zcGFuPjwvYT4gKiAgZ3N0X25ldF90aW1lX3BhY2tldF9yZWNlaXZlICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBmZDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+c3RydWN0IHNvY2thZGRyPC9zcGFuPiAqYWRkcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+c29ja2xlbl90PC9zcGFuPiAqbGVuPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorUmVjZWl2ZXMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI0dzdE5ldFRpbWVQYWNrZXQiIHRpdGxlPSJzdHJ1Y3QgR3N0TmV0VGltZVBhY2tldCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE5ldFRpbWVQYWNrZXQ8L3NwYW4+PC9hPiBvdmVyIGEgc29ja2V0LiBIYW5kbGVzIGludGVycnVwdGVkIHN5c3RlbSBjYWxscywKK2J1dCBvdGhlcndpc2UgcmV0dXJucyBOVUxMIG9uIGVycm9yLiBTZWUgcmVjdmZyb20oMikgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24KK2hvdyB0byBpbnRlcnByZXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNvY2thZGRyPC9jb2RlPjwvZW0+LgorPC9wPgorPHA+CitNVCBzYWZlLiBDYWxsZXIgb3ducyByZXR1cm4gdmFsdWUgKGdfZnJlZSB0byBmcmVlKS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGZpbGUgZGVzY3JpcHRvciBjcmVhdGVkIGJ5IHNvY2tldCgyKTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWRkcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gYSBzb2NrYWRkciB0byBob2xkIHRoZSBhZGRyZXNzIG9mIHRoZSBzZW5kZXI8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxlbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIHBvaW50ZXIgdG8gdGhlIHNpemUgb2YgdGhlIGRhdGEgcG9pbnRlZCB0byBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWRkcjwvY29kZT48L2VtPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI0dzdE5ldFRpbWVQYWNrZXQiIHRpdGxlPSJzdHJ1Y3QgR3N0TmV0VGltZVBhY2tldCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE5ldFRpbWVQYWNrZXQ8L3NwYW4+PC9hPi48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtbmV0LXRpbWUtcGFja2V0LXNlbmQiPjwvYT48aDM+Z3N0X25ldF90aW1lX3BhY2tldF9zZW5kICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgZ3N0X25ldF90aW1lX3BhY2tldF9zZW5kICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI0dzdE5ldFRpbWVQYWNrZXQiIHRpdGxlPSJzdHJ1Y3QgR3N0TmV0VGltZVBhY2tldCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE5ldFRpbWVQYWNrZXQ8L3NwYW4+PC9hPiAqcGFja2V0PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGZkPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj5zdHJ1Y3Qgc29ja2FkZHI8L3NwYW4+ICphZGRyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj5zb2NrbGVuX3Q8L3NwYW4+IGxlbjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NlbmRzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHc3ROZXRUaW1lUGFja2V0IiB0aXRsZT0ic3RydWN0IEdzdE5ldFRpbWVQYWNrZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRUaW1lUGFja2V0PC9zcGFuPjwvYT4gb3ZlciBhIHNvY2tldC4gRXNzZW50aWFsbHkgYSB0aGluIHdyYXBwZXIgYXJvdW5kCitzZW5kdG8oMikgYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjZ3N0LW5ldC10aW1lLXBhY2tldC1zZXJpYWxpemUiIHRpdGxlPSJnc3RfbmV0X3RpbWVfcGFja2V0X3NlcmlhbGl6ZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbmV0X3RpbWVfcGFja2V0X3NlcmlhbGl6ZSgpPC9jb2RlPjwvYT4uIAorPC9wPgorPHA+CitNVCBzYWZlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhY2tldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHc3ROZXRUaW1lUGFja2V0IiB0aXRsZT0ic3RydWN0IEdzdE5ldFRpbWVQYWNrZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRUaW1lUGFja2V0PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBmaWxlIGRlc2NyaXB0b3IgY3JlYXRlZCBieSBzb2NrZXQoMik8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFkZHI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBwb2ludGVyIHRvIGEgc29ja2FkZHIgdG8gaG9sZCB0aGUgYWRkcmVzcyBvZiB0aGUgc2VuZGVyPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sZW48L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHNpemUgb2YgdGhlIGRhdGEgcG9pbnRlZCB0byBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWRkcjwvY29kZT48L2VtPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIHJldHVybiB2YWx1ZSBvZiBzZW5kdG8oMikuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LW5ldC10aW1lLXBhY2tldC1zZXJpYWxpemUiPjwvYT48aDM+Z3N0X25ldF90aW1lX3BhY2tldF9zZXJpYWxpemUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKiAgICAgICAgICAgIGdzdF9uZXRfdGltZV9wYWNrZXRfc2VyaWFsaXplICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHc3ROZXRUaW1lUGFja2V0IiB0aXRsZT0ic3RydWN0IEdzdE5ldFRpbWVQYWNrZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRUaW1lUGFja2V0PC9zcGFuPjwvYT4gKnBhY2tldDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NlcmlhbGl6ZWQgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI0dzdE5ldFRpbWVQYWNrZXQiIHRpdGxlPSJzdHJ1Y3QgR3N0TmV0VGltZVBhY2tldCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE5ldFRpbWVQYWNrZXQ8L3NwYW4+PC9hPiBpbnRvIGEgbmV3bHktYWxsb2NhdGVkIHNlcXVlbmNlIG9mCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI0dTVC1ORVQtVElNRS1QQUNLRVQtU0laRTpDQVBTIiB0aXRsZT0iR1NUX05FVF9USU1FX1BBQ0tFVF9TSVpFIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX05FVF9USU1FX1BBQ0tFVF9TSVpFPC9zcGFuPjwvYT4gYnl0ZXMsIGluIG5ldHdvcmsgYnl0ZSBvcmRlci4gVGhlIHZhbHVlIHJldHVybmVkIGlzCitzdWl0YWJsZSBmb3IgcGFzc2luZyB0byB3cml0ZSgyKSBvciBzZW5kdG8oMikgZm9yIGNvbW11bmljYXRpb24gb3ZlciB0aGUKK25ldHdvcmsuCis8L3A+Cis8cD4KK01UIHNhZmUuIENhbGxlciBvd25zIHJldHVybiB2YWx1ZSAoZ19mcmVlIHRvIGZyZWUpLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhY2tldDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHc3ROZXRUaW1lUGFja2V0IiB0aXRsZT0ic3RydWN0IEdzdE5ldFRpbWVQYWNrZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRUaW1lUGFja2V0PC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgbmV3bHkgYWxsb2NhdGVkIHNlcXVlbmNlIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjR1NULU5FVC1USU1FLVBBQ0tFVC1TSVpFOkNBUFMiIHRpdGxlPSJHU1RfTkVUX1RJTUVfUEFDS0VUX1NJWkUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfTkVUX1RJTUVfUEFDS0VUX1NJWkU8L3NwYW4+PC9hPiBieXRlcy48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgorPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0Q2xvY2suaHRtbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sIiB0aXRsZT0iR3N0TmV0Q2xpZW50Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRDbGllbnRDbG9jazwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3ROZXRUaW1lUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRUaW1lUHJvdmlkZXI8L3NwYW4+PC9hPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5odG1sIGIvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTQxNDlkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbApAQCAtMCwwICsxLDEzMCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdzdFN0cmVhbUNvbnNpc3RlbmN5PC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZ3N0cmVhbWVyLWNoZWNrLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ2hlY2sgVW5pdCBUZXN0aW5nIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclN0cmF3Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLWhpZXJhcmNoeS5odG1sIiB0aXRsZT0iT2JqZWN0IEhpZXJhcmNoeSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImdzdHJlYW1lci1jaGVjay5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgMC4xMSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLWhpZXJhcmNoeS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI2dzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5LnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS50b3Bfb2ZfcGFnZSI+PC9hPkdzdFN0cmVhbUNvbnNpc3RlbmN5PC9zcGFuPjwvaDI+Cis8cD5Hc3RTdHJlYW1Db25zaXN0ZW5jeSDigJQgRGF0YSBmbG93IGNvbnNpc3RlbmN5IGNoZWNrZXIgZm9yIEdTdHJlYW1lciB1bml0IHRlc3RzLjwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5LnN5bm9wc2lzIj48L2E+PGgyPlN5bm9wc2lzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyNpbmNsdWRlICZsdDtnc3QvY2hlY2svZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmgmZ3Q7CisKKyAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5Lmh0bWwjR3N0U3RyZWFtQ29uc2lzdGVuY3kiIHRpdGxlPSJHc3RTdHJlYW1Db25zaXN0ZW5jeSI+R3N0U3RyZWFtQ29uc2lzdGVuY3k8L2E+OworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5Lmh0bWwjR3N0U3RyZWFtQ29uc2lzdGVuY3kiIHRpdGxlPSJHc3RTdHJlYW1Db25zaXN0ZW5jeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJlYW1Db25zaXN0ZW5jeTwvc3Bhbj48L2E+ICogPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5Lmh0bWwjZ3N0LWNvbnNpc3RlbmN5LWNoZWNrZXItbmV3IiB0aXRsZT0iZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfbmV3ICgpIj5nc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9uZXc8L2E+ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOworPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCNnc3QtY29uc2lzdGVuY3ktY2hlY2tlci1yZXNldCIgdGl0bGU9ImdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX3Jlc2V0ICgpIj5nc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9yZXNldDwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCNHc3RTdHJlYW1Db25zaXN0ZW5jeSIgdGl0bGU9IkdzdFN0cmVhbUNvbnNpc3RlbmN5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtQ29uc2lzdGVuY3k8L3NwYW4+PC9hPiAqY29uc2lzdDwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5odG1sI2dzdC1jb25zaXN0ZW5jeS1jaGVja2VyLWZyZWUiIHRpdGxlPSJnc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9mcmVlICgpIj5nc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9mcmVlPC9hPiAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCNHc3RTdHJlYW1Db25zaXN0ZW5jeSIgdGl0bGU9IkdzdFN0cmVhbUNvbnNpc3RlbmN5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtQ29uc2lzdGVuY3k8L3NwYW4+PC9hPiAqY29uc2lzdDwvY29kZT48L2VtPik7Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitUaGVzZSBtYWNyb3MgYW5kIGZ1bmN0aW9ucyBhcmUgZm9yIGludGVybmFsIHVzZSBvZiB0aGUgdW5pdCB0ZXN0cyBmb3VuZAoraW5zaWRlIHRoZSAnY2hlY2snIGRpcmVjdG9yaWVzIG9mIHZhcmlvdXMgR1N0cmVhbWVyIHBhY2thZ2VzLgorPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0U3RyZWFtQ29uc2lzdGVuY3kiPjwvYT48aDM+R3N0U3RyZWFtQ29uc2lzdGVuY3k8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgc3RydWN0IF9Hc3RTdHJlYW1Db25zaXN0ZW5jeSBHc3RTdHJlYW1Db25zaXN0ZW5jeTs8L3ByZT4KKzxwPgorT3BhcXVlIGNvbnNpc3RlbmN5IGNoZWNrZXIgaGFuZGxlLgorPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI0PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY29uc2lzdGVuY3ktY2hlY2tlci1uZXciPjwvYT48aDM+Z3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfbmV3ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCNHc3RTdHJlYW1Db25zaXN0ZW5jeSIgdGl0bGU9IkdzdFN0cmVhbUNvbnNpc3RlbmN5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cmVhbUNvbnNpc3RlbmN5PC9zcGFuPjwvYT4gKiBnc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9uZXcgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1NldHMgdXAgYSBkYXRhIHByb2JlIG9uIHRoZSBnaXZlbiBwYWQgd2hpY2ggd2lsbCByYWlzZSBhc3NlcnRpb25zIGlmIHRoZQorZGF0YSBmbG93IGlzIGluY29uc2lzdGVudC4KKzwvcD4KKzxwPgorQ3VycmVudGx5IG9ubHkgd29ya3MgZm9yIHNvdXJjZSBwYWRzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBvbiB3aGljaCB0aGUgZGF0YWZsb3cgd2lsbCBiZSBjaGVja2VkLjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5Lmh0bWwjR3N0U3RyZWFtQ29uc2lzdGVuY3kiIHRpdGxlPSJHc3RTdHJlYW1Db25zaXN0ZW5jeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbUNvbnNpc3RlbmN5PC9zcGFuPjwvYT4gc3RydWN0dXJlIHVzZWQgdG8gdHJhY2sgZGF0YSBmbG93LjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjQ8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1jb25zaXN0ZW5jeS1jaGVja2VyLXJlc2V0Ij48L2E+PGgzPmdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX3Jlc2V0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX3Jlc2V0ICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5Lmh0bWwjR3N0U3RyZWFtQ29uc2lzdGVuY3kiIHRpdGxlPSJHc3RTdHJlYW1Db25zaXN0ZW5jeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbUNvbnNpc3RlbmN5PC9zcGFuPjwvYT4gKmNvbnNpc3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitSZXNldCB0aGUgc3RyZWFtIGNoZWNrZXIncyBpbnRlcm5hbCB2YXJpYWJsZXMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5Pjx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnNpc3Q8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5odG1sI0dzdFN0cmVhbUNvbnNpc3RlbmN5IiB0aXRsZT0iR3N0U3RyZWFtQ29uc2lzdGVuY3kiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW1Db25zaXN0ZW5jeTwvc3Bhbj48L2E+IHRvIHJlc2V0LjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI0PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtY29uc2lzdGVuY3ktY2hlY2tlci1mcmVlIj48L2E+PGgzPmdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX2ZyZWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfZnJlZSAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCNHc3RTdHJlYW1Db25zaXN0ZW5jeSIgdGl0bGU9IkdzdFN0cmVhbUNvbnNpc3RlbmN5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtQ29uc2lzdGVuY3k8L3NwYW4+PC9hPiAqY29uc2lzdDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0ZyZWVzIHRoZSBhbGxvY2F0ZWQgZGF0YSBhbmQgcHJvYmUgYXNzb2NpYXRlZCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zaXN0PC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zaXN0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCNHc3RTdHJlYW1Db25zaXN0ZW5jeSIgdGl0bGU9IkdzdFN0cmVhbUNvbnNpc3RlbmN5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtQ29uc2lzdGVuY3k8L3NwYW4+PC9hPiB0byBmcmVlLjwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI0PC9wPgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwgYi9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYzZkZDYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sCkBAIC0wLDAgKzEsNDI0IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+R3N0VHlwZUZpbmRIZWxwZXI8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJnc3RyZWFtZXItYmFzZS5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEJhc2UgYW5kIFV0aWxsaXR5IENsYXNzZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCIgdGl0bGU9IkdzdERhdGFRdWV1ZSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImdzdHJlYW1lci1iYXNlLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIudG9wX29mX3BhZ2UiPjwvYT5Hc3RUeXBlRmluZEhlbHBlcjwvc3Bhbj48L2gyPgorPHA+R3N0VHlwZUZpbmRIZWxwZXIg4oCUIFV0aWxpdHkgZnVuY3Rpb25zIGZvciB0eXBlZmluZGluZzwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLnN5bm9wc2lzIj48L2E+PGgyPlN5bm9wc2lzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyNpbmNsdWRlICZsdDtnc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5oJmd0OworCis8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI2dzdC10eXBlLWZpbmQtaGVscGVyIiB0aXRsZT0iZ3N0X3R5cGVfZmluZF9oZWxwZXIgKCkiPmdzdF90eXBlX2ZpbmRfaGVscGVyPC9hPiAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKiAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwjZ3N0LXR5cGUtZmluZC1oZWxwZXItZm9yLWJ1ZmZlciIgdGl0bGU9ImdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9idWZmZXIgKCkiPmdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9idWZmZXI8L2E+ICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdE9iamVjdC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKm9iajwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZFByb2JhYmlsaXR5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmRQcm9iYWJpbGl0eTwvc3Bhbj48L2E+ICpwcm9iPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKiAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwjZ3N0LXR5cGUtZmluZC1oZWxwZXItZm9yLWV4dGVuc2lvbiIgdGl0bGU9ImdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9leHRlbnNpb24gKCkiPmdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9leHRlbnNpb248L2E+ICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdE9iamVjdC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKm9iajwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpleHRlbnNpb248L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPiAqICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCNnc3QtdHlwZS1maW5kLWhlbHBlci1mb3ItZGF0YSIgdGl0bGU9ImdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9kYXRhICgpIj5nc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfZGF0YTwvYT4gICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmo8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICpkYXRhPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZFByb2JhYmlsaXR5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmRQcm9iYWJpbGl0eTwvc3Bhbj48L2E+ICpwcm9iPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+ICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCNHc3RUeXBlRmluZEhlbHBlckdldFJhbmdlRnVuY3Rpb24iIHRpdGxlPSJHc3RUeXBlRmluZEhlbHBlckdldFJhbmdlRnVuY3Rpb24gKCkiPipHc3RUeXBlRmluZEhlbHBlckdldFJhbmdlRnVuY3Rpb248L2E+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdE9iamVjdC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKm9iajwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBsZW5ndGg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICoqYnVmZmVyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKiAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwjZ3N0LXR5cGUtZmluZC1oZWxwZXItZ2V0LXJhbmdlIiB0aXRsZT0iZ3N0X3R5cGVfZmluZF9oZWxwZXJfZ2V0X3JhbmdlICgpIj5nc3RfdHlwZV9maW5kX2hlbHBlcl9nZXRfcmFuZ2U8L2E+ICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmo8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwjR3N0VHlwZUZpbmRIZWxwZXJHZXRSYW5nZUZ1bmN0aW9uIiB0aXRsZT0iR3N0VHlwZUZpbmRIZWxwZXJHZXRSYW5nZUZ1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmRIZWxwZXJHZXRSYW5nZUZ1bmN0aW9uPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dzdFR5cGVGaW5kUHJvYmFiaWxpdHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZFByb2JhYmlsaXR5PC9zcGFuPjwvYT4gKnByb2I8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPiAqICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCNnc3QtdHlwZS1maW5kLWhlbHBlci1nZXQtcmFuZ2UtZXh0IiB0aXRsZT0iZ3N0X3R5cGVfZmluZF9oZWxwZXJfZ2V0X3JhbmdlX2V4dCAoKSI+Z3N0X3R5cGVfZmluZF9oZWxwZXJfZ2V0X3JhbmdlX2V4dDwvYT4gICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqb2JqPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI0dzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbiIgdGl0bGU9IkdzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbjwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpleHRlbnNpb248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmRQcm9iYWJpbGl0eSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kUHJvYmFiaWxpdHk8L3NwYW4+PC9hPiAqcHJvYjwvY29kZT48L2VtPik7Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgZWxlbWVudHMgZG9pbmcgdHlwZWZpbmRpbmc6Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCNnc3QtdHlwZS1maW5kLWhlbHBlciIgdGl0bGU9ImdzdF90eXBlX2ZpbmRfaGVscGVyICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90eXBlX2ZpbmRfaGVscGVyKCk8L2NvZGU+PC9hPiBkb2VzIHR5cGVmaW5kaW5nIGluIHB1bGwgbW9kZSwgd2hpbGUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI2dzdC10eXBlLWZpbmQtaGVscGVyLWZvci1idWZmZXIiIHRpdGxlPSJnc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfYnVmZmVyICgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9idWZmZXIoKTwvY29kZT48L2E+IGlzIHVzZWZ1bCBmb3IgZWxlbWVudHMgbmVlZGluZyB0byBkbwordHlwZWZpbmRpbmcgaW4gcHVzaCBtb2RlIGZyb20gYSBjaGFpbiBmdW5jdGlvbi4KKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC10eXBlLWZpbmQtaGVscGVyIj48L2E+PGgzPmdzdF90eXBlX2ZpbmRfaGVscGVyICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgIGdzdF90eXBlX2ZpbmRfaGVscGVyICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitUcmllcyB0byBmaW5kIHdoYXQgdHlwZSBvZiBkYXRhIGlzIGZsb3dpbmcgZnJvbSB0aGUgZ2l2ZW4gc291cmNlIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4uCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdzdF9jYXBzX3VucmVmCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgc291cmNlIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgbGVuZ3RoIGluIGJ5dGVzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBjb3JyZXNwb25kaW5nIHRvIHRoZSBkYXRhIHN0cmVhbS4KK1JldHVybnMgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5OVUxMPC9zcGFuPjwvYT4gaWYgbm8gPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IG1hdGNoZXMgdGhlIGRhdGEgc3RyZWFtLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXR5cGUtZmluZC1oZWxwZXItZm9yLWJ1ZmZlciI+PC9hPjxoMz5nc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfYnVmZmVyICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgIGdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9idWZmZXIgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqb2JqPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dzdFR5cGVGaW5kUHJvYmFiaWxpdHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZFByb2JhYmlsaXR5PC9zcGFuPjwvYT4gKnByb2I8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitUcmllcyB0byBmaW5kIHdoYXQgdHlwZSBvZiBkYXRhIGlzIGNvbnRhaW5lZCBpbiB0aGUgZ2l2ZW4gPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LCB0aGUKK2Fzc3VtcHRpb24gYmVpbmcgdGhhdCB0aGUgYnVmZmVyIHJlcHJlc2VudHMgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyZWFtIG9yCitmaWxlLgorPC9wPgorPHA+CitBbGwgYXZhaWxhYmxlIHR5cGVmaW5kZXJzIHdpbGwgYmUgY2FsbGVkIG9uIHRoZSBkYXRhIGluIG9yZGVyIG9mIHJhbmsuIElmCithIHR5cGVmaW5kaW5nIGZ1bmN0aW9uIHJldHVybnMgYSBwcm9iYWJpbGl0eSBvZiA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHU1QtVFlQRS1GSU5ELU1BWElNVU06Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UWVBFX0ZJTkRfTUFYSU1VTTwvc3Bhbj48L2E+LAordHlwZWZpbmRpbmcgaXMgc3RvcHBlZCBpbW1lZGlhdGVseSBhbmQgdGhlIGZvdW5kIGNhcHMgd2lsbCBiZSByZXR1cm5lZAorcmlnaHQgYXdheS4gT3RoZXJ3aXNlLCBhbGwgYXZhaWxhYmxlIHR5cGVmaW5kIGZ1bmN0aW9ucyB3aWxsIHRoZSB0cmllZCwKK2FuZCB0aGUgY2FwcyB3aXRoIHRoZSBoaWdoZXN0IHByb2JhYmlsaXR5IHdpbGwgYmUgcmV0dXJuZWQsIG9yIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+TlVMTDwvc3Bhbj48L2E+IGlmCit0aGUgY29udGVudCBvZiB0aGUgYnVmZmVyIGNvdWxkIG5vdCBiZSBpZGVudGlmaWVkLgorPC9wPgorPHA+CitGcmVlLWZ1bmN0aW9uOiBnc3RfY2Fwc191bnJlZgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iajwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5vYmplY3QgZG9pbmcgdGhlIHR5cGVmaW5kaW5nLCBvciBOVUxMICh1c2VkIGZvciBsb2dnaW5nKTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IHdpdGggZGF0YSB0byB0eXBlZmluZC4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dC4gRGVmYXVsdCBpcyB0cmFuc2ZlciBub25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmluPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcm9iPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmxvY2F0aW9uIHRvIHN0b3JlIHRoZSBwcm9iYWJpbGl0eSBvZiB0aGUgZm91bmQKK2NhcHMsIG9yIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+TlVMTDwvc3Bhbj48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRhdGEsIG9yIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+TlVMTDwvc3Bhbj48L2E+CitpZiBubyB0eXBlIGNvdWxkIGJlIGZvdW5kLiBUaGUgY2FsbGVyIHNob3VsZCBmcmVlIHRoZSBjYXBzIHJldHVybmVkCit3aXRoIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtdW5yZWYiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NhcHNfdW5yZWYoKTwvY29kZT48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXR5cGUtZmluZC1oZWxwZXItZm9yLWV4dGVuc2lvbiI+PC9hPjxoMz5nc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfZXh0ZW5zaW9uICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgIGdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9leHRlbnNpb24gICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqb2JqPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmV4dGVuc2lvbjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1RyaWVzIHRvIGZpbmQgdGhlIGJlc3QgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IGFzc29jaWF0ZWQgd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXh0ZW5zaW9uPC9jb2RlPjwvZW0+LgorPC9wPgorPHA+CitBbGwgYXZhaWxhYmxlIHR5cGVmaW5kZXJzIHdpbGwgYmUgY2hlY2tlZCBhZ2FpbnN0IHRoZSBleHRlbnNpb24gaW4gb3JkZXIKK29mIHJhbmsuIFRoZSBjYXBzIG9mIHRoZSBmaXJzdCB0eXBlZmluZGVyIHRoYXQgY2FuIGhhbmRsZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXh0ZW5zaW9uPC9jb2RlPjwvZW0+IHdpbGwgYmUKK3JldHVybmVkLgorPC9wPgorPHA+CitGcmVlLWZ1bmN0aW9uOiBnc3RfY2Fwc191bnJlZgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iajwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5vYmplY3QgZG9pbmcgdGhlIHR5cGVmaW5kaW5nLCBvciBOVUxMICh1c2VkIGZvciBsb2dnaW5nKS4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5leHRlbnNpb248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YW4gZXh0ZW5zaW9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBjb3JyZXNwb25kaW5nIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5leHRlbnNpb248L2NvZGU+PC9lbT4sIG9yCis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPk5VTEw8L3NwYW4+PC9hPiBpZiBubyB0eXBlIGNvdWxkIGJlIGZvdW5kLiBUaGUgY2FsbGVyIHNob3VsZCBmcmVlIHRoZSBjYXBzCityZXR1cm5lZCB3aXRoIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtdW5yZWYiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NhcHNfdW5yZWYoKTwvY29kZT48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yMzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXR5cGUtZmluZC1oZWxwZXItZm9yLWRhdGEiPjwvYT48aDM+Z3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2RhdGEgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKiAgICAgICAgICAgZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2RhdGEgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmo8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICpkYXRhPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZFByb2JhYmlsaXR5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmRQcm9iYWJpbGl0eTwvc3Bhbj48L2E+ICpwcm9iPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVHJpZXMgdG8gZmluZCB3aGF0IHR5cGUgb2YgZGF0YSBpcyBjb250YWluZWQgaW4gdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+LCB0aGUKK2Fzc3VtcHRpb24gYmVpbmcgdGhhdCB0aGUgZGF0YSByZXByZXNlbnRzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmVhbSBvcgorZmlsZS4KKzwvcD4KKzxwPgorQWxsIGF2YWlsYWJsZSB0eXBlZmluZGVycyB3aWxsIGJlIGNhbGxlZCBvbiB0aGUgZGF0YSBpbiBvcmRlciBvZiByYW5rLiBJZgorYSB0eXBlZmluZGluZyBmdW5jdGlvbiByZXR1cm5zIGEgcHJvYmFiaWxpdHkgb2YgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR1NULVRZUEUtRklORC1NQVhJTVVNOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVFlQRV9GSU5EX01BWElNVU08L3NwYW4+PC9hPiwKK3R5cGVmaW5kaW5nIGlzIHN0b3BwZWQgaW1tZWRpYXRlbHkgYW5kIHRoZSBmb3VuZCBjYXBzIHdpbGwgYmUgcmV0dXJuZWQKK3JpZ2h0IGF3YXkuIE90aGVyd2lzZSwgYWxsIGF2YWlsYWJsZSB0eXBlZmluZCBmdW5jdGlvbnMgd2lsbCB0aGUgdHJpZWQsCithbmQgdGhlIGNhcHMgd2l0aCB0aGUgaGlnaGVzdCBwcm9iYWJpbGl0eSB3aWxsIGJlIHJldHVybmVkLCBvciA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPk5VTEw8L3NwYW4+PC9hPiBpZgordGhlIGNvbnRlbnQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4gY291bGQgbm90IGJlIGlkZW50aWZpZWQuCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdzdF9jYXBzX3VucmVmCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPm9iamVjdCBkb2luZyB0aGUgdHlwZWZpbmRpbmcsIG9yIE5VTEwgKHVzZWQgZm9yIGxvZ2dpbmcpPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgcG9pbnRlciB3aXRoIGRhdGEgdG8gdHlwZWZpbmQuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQuIERlZmF1bHQgaXMgdHJhbnNmZXIgbm9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbjwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgc2l6ZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dC4gRGVmYXVsdCBpcyB0cmFuc2ZlciBub25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmluPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcm9iPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmxvY2F0aW9uIHRvIHN0b3JlIHRoZSBwcm9iYWJpbGl0eSBvZiB0aGUgZm91bmQKK2NhcHMsIG9yIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+TlVMTDwvc3Bhbj48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIG9rLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRhdGEsIG9yIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+TlVMTDwvc3Bhbj48L2E+CitpZiBubyB0eXBlIGNvdWxkIGJlIGZvdW5kLiBUaGUgY2FsbGVyIHNob3VsZCBmcmVlIHRoZSBjYXBzIHJldHVybmVkCit3aXRoIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjZ3N0LWNhcHMtdW5yZWYiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NhcHNfdW5yZWYoKTwvY29kZT48L2E+LiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0VHlwZUZpbmRIZWxwZXJHZXRSYW5nZUZ1bmN0aW9uIj48L2E+PGgzPkdzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4gICAgICAgKCpHc3RUeXBlRmluZEhlbHBlckdldFJhbmdlRnVuY3Rpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqb2JqPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGxlbmd0aDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKipidWZmZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI2dzdC10eXBlLWZpbmQtaGVscGVyLWdldC1yYW5nZSIgdGl0bGU9ImdzdF90eXBlX2ZpbmRfaGVscGVyX2dldF9yYW5nZSAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdHlwZV9maW5kX2hlbHBlcl9nZXRfcmFuZ2UoKTwvY29kZT48L2E+IHdoZW4KK3R5cGVmaW5kaW5nIGZ1bmN0aW9ucyByZXF1ZXN0IHRvIHBlZWsgYXQgdGhlIGRhdGEgb2YgYSBzdHJlYW0gYXQgY2VydGFpbgorb2Zmc2V0cy4gSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIEdTVF9GTE9XX09LLCB0aGUgcmVzdWx0IGJ1ZmZlciB3aWxsIGJlCitzdG9yZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPi4gVGhlICBjb250ZW50cyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+IGlzIGludmFsaWQgZm9yIGFueSBvdGhlcgorcmV0dXJuIHZhbHVlLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlaGF2ZSBleGFjdGx5IGxpa2UgYSA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCNHc3RQYWRHZXRSYW5nZUZ1bmN0aW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkR2V0UmFuZ2VGdW5jdGlvbjwvc3Bhbj48L2E+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iajwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdE9iamVjdC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gdGhhdCB3aWxsIGhhbmRsZSB0aGUgZ2V0cmFuZ2UgcmVxdWVzdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBvZmZzZXQgb2YgdGhlIHJhbmdlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sZW5ndGg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGxlbmd0aCBvZiB0aGUgcmFuZ2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIG1lbW9yeSBsb2NhdGlvbiB0byBob2xkIHRoZSByZXN1bHQgYnVmZmVyPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+R1NUX0ZMT1dfT0sgZm9yIHN1Y2Nlc3M8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtdHlwZS1maW5kLWhlbHBlci1nZXQtcmFuZ2UiPjwvYT48aDM+Z3N0X3R5cGVfZmluZF9oZWxwZXJfZ2V0X3JhbmdlICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgIGdzdF90eXBlX2ZpbmRfaGVscGVyX2dldF9yYW5nZSAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqb2JqPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI0dzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbiIgdGl0bGU9IkdzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbjwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZFByb2JhYmlsaXR5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmRQcm9iYWJpbGl0eTwvc3Bhbj48L2E+ICpwcm9iPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVXRpbGl0eSBmdW5jdGlvbiB0byBkbyBwdWxsLWJhc2VkIHR5cGVmaW5kaW5nLiBVbmxpa2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwjZ3N0LXR5cGUtZmluZC1oZWxwZXIiIHRpdGxlPSJnc3RfdHlwZV9maW5kX2hlbHBlciAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdHlwZV9maW5kX2hlbHBlcigpPC9jb2RlPjwvYT4KK2hvd2V2ZXIsIHRoaXMgZnVuY3Rpb24gd2lsbCB1c2UgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPiB0byBvYnRhaW4gdGhlCitkYXRhIG5lZWRlZCBieSB0aGUgdHlwZWZpbmQgZnVuY3Rpb25zLCByYXRoZXIgdGhhbiBvcGVyYXRpbmcgb24gYSBnaXZlbgorc291cmNlIHBhZC4gVGhpcyBpcyB1c2VmdWwgbW9zdGx5IGZvciBlbGVtZW50cyBsaWtlIHRhZyBkZW11eGVycyB3aGljaAorc3RyaXAgb2ZmIGRhdGEgYXQgdGhlIGJlZ2lubmluZyBhbmQvb3IgZW5kIG9mIGEgZmlsZSBhbmQgd2FudCB0byB0eXBlZmluZAordGhlIHN0cmlwcGVkIGRhdGEgc3RyZWFtIGJlZm9yZSBhZGRpbmcgdGhlaXIgb3duIHNvdXJjZSBwYWQgKHRoZSBzcGVjaWZpZWQKK2NhbGxiYWNrIGNhbiB0aGVuIGNhbGwgdGhlIHVwc3RyZWFtIHBlZXIgcGFkIHdpdGggb2Zmc2V0cyBhZGp1c3RlZCBmb3IgdGhlCit0YWcgc2l6ZSwgZm9yIGV4YW1wbGUpLgorPC9wPgorPHA+CitGcmVlLWZ1bmN0aW9uOiBnc3RfY2Fwc191bnJlZgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iajwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdE9iamVjdC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gdGhhdCB3aWxsIGJlIHBhc3NlZCBhcyBmaXJzdCBhcmd1bWVudCB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgZ2VuZXJpYyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCNHc3RUeXBlRmluZEhlbHBlckdldFJhbmdlRnVuY3Rpb24iIHRpdGxlPSJHc3RUeXBlRmluZEhlbHBlckdldFJhbmdlRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZEhlbHBlckdldFJhbmdlRnVuY3Rpb248L3NwYW4+PC9hPiB0aGF0IHdpbGwKK2JlIHVzZWQgdG8gYWNjZXNzIGRhdGEgYXQgcmFuZG9tIG9mZnNldHMgd2hlbiBkb2luZyB0aGUgdHlwZWZpbmRpbmcuIDxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoZSBjYWxsYmFjayBpcyB2YWxpZCBvbmx5IGR1cmluZyB0aGUgY2FsbCB0byB0aGUgbWV0aG9kLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNjb3BlIGNhbGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhlIGxlbmd0aCBpbiBieXRlczwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJvYjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5sb2NhdGlvbiB0byBzdG9yZSB0aGUgcHJvYmFiaWxpdHkgb2YgdGhlIGZvdW5kCitjYXBzLCBvciA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPk5VTEw8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBjb3JyZXNwb25kaW5nIHRvIHRoZSBkYXRhIHN0cmVhbS4KK1JldHVybnMgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5OVUxMPC9zcGFuPjwvYT4gaWYgbm8gPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IG1hdGNoZXMgdGhlIGRhdGEgc3RyZWFtLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LXR5cGUtZmluZC1oZWxwZXItZ2V0LXJhbmdlLWV4dCI+PC9hPjxoMz5nc3RfdHlwZV9maW5kX2hlbHBlcl9nZXRfcmFuZ2VfZXh0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICogICAgICAgICAgIGdzdF90eXBlX2ZpbmRfaGVscGVyX2dldF9yYW5nZV9leHQgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqb2JqPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI0dzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbiIgdGl0bGU9IkdzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbjwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpleHRlbnNpb248L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmRQcm9iYWJpbGl0eSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kUHJvYmFiaWxpdHk8L3NwYW4+PC9hPiAqcHJvYjwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1V0aWxpdHkgZnVuY3Rpb24gdG8gZG8gcHVsbC1iYXNlZCB0eXBlZmluZGluZy4gVW5saWtlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI2dzdC10eXBlLWZpbmQtaGVscGVyIiB0aXRsZT0iZ3N0X3R5cGVfZmluZF9oZWxwZXIgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3R5cGVfZmluZF9oZWxwZXIoKTwvY29kZT48L2E+Citob3dldmVyLCB0aGlzIGZ1bmN0aW9uIHdpbGwgdXNlIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT4gdG8gb2J0YWluIHRoZQorZGF0YSBuZWVkZWQgYnkgdGhlIHR5cGVmaW5kIGZ1bmN0aW9ucywgcmF0aGVyIHRoYW4gb3BlcmF0aW5nIG9uIGEgZ2l2ZW4KK3NvdXJjZSBwYWQuIFRoaXMgaXMgdXNlZnVsIG1vc3RseSBmb3IgZWxlbWVudHMgbGlrZSB0YWcgZGVtdXhlcnMgd2hpY2gKK3N0cmlwIG9mZiBkYXRhIGF0IHRoZSBiZWdpbm5pbmcgYW5kL29yIGVuZCBvZiBhIGZpbGUgYW5kIHdhbnQgdG8gdHlwZWZpbmQKK3RoZSBzdHJpcHBlZCBkYXRhIHN0cmVhbSBiZWZvcmUgYWRkaW5nIHRoZWlyIG93biBzb3VyY2UgcGFkICh0aGUgc3BlY2lmaWVkCitjYWxsYmFjayBjYW4gdGhlbiBjYWxsIHRoZSB1cHN0cmVhbSBwZWVyIHBhZCB3aXRoIG9mZnNldHMgYWRqdXN0ZWQgZm9yIHRoZQordGFnIHNpemUsIGZvciBleGFtcGxlKS4KKzwvcD4KKzxwPgorV2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXh0ZW5zaW9uPC9jb2RlPjwvZW0+IGlzIG5vdCBOVUxMLCB0aGlzIGZ1bmN0aW9uIHdpbGwgZmlyc3QgdHJ5IHRoZSB0eXBlZmluZAorZnVuY3Rpb25zIGZvciB0aGUgZ2l2ZW4gZXh0ZW5zaW9uLCB3aGljaCBtaWdodCBzcGVlZCB1cCB0aGUgdHlwZWZpbmRpbmcKK2luIG1hbnkgY2FzZXMuCis8L3A+Cis8cD4KK0ZyZWUtZnVuY3Rpb246IGdzdF9jYXBzX3VucmVmCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiB0aGF0IHdpbGwgYmUgcGFzc2VkIGFzIGZpcnN0IGFyZ3VtZW50IHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSBnZW5lcmljIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI0dzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbiIgdGl0bGU9IkdzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbjwvc3Bhbj48L2E+IHRoYXQgd2lsbAorYmUgdXNlZCB0byBhY2Nlc3MgZGF0YSBhdCByYW5kb20gb2Zmc2V0cyB3aGVuIGRvaW5nIHRoZSB0eXBlZmluZGluZy4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iVGhlIGNhbGxiYWNrIGlzIHZhbGlkIG9ubHkgZHVyaW5nIHRoZSBjYWxsIHRvIHRoZSBtZXRob2QuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2NvcGUgY2FsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5UaGUgbGVuZ3RoIGluIGJ5dGVzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5leHRlbnNpb248L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZXh0ZW5zaW9uIG9mIHRoZSBtZWRpYTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJvYjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5sb2NhdGlvbiB0byBzdG9yZSB0aGUgcHJvYmFiaWxpdHkgb2YgdGhlIGZvdW5kCitjYXBzLCBvciA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPk5VTEw8L3NwYW4+PC9hPi4gPHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBvaywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBjb3JyZXNwb25kaW5nIHRvIHRoZSBkYXRhIHN0cmVhbS4KK1JldHVybnMgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5OVUxMPC9zcGFuPjwvYT4gaWYgbm8gPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IG1hdGNoZXMgdGhlIGRhdGEgc3RyZWFtLiA8c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPgorPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNjwvcD4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCBiL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MjM2YzcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbApAQCAtMCwwICsxLDY3MSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPmdzdGRhdGFwcm90b2NvbDwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImdzdHJlYW1lci1kYXRhcHJvdG9jb2wuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBEYXRhIFByb3RvY29sIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLWRhdGFwcm90b2NvbC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIERhdGEgUHJvdG9jb2wiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItbmV0Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgTmV0d29yayBDbGFzc2VzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItZGF0YXByb3RvY29sLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItZGF0YXByb3RvY29sLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItbmV0Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC50b3Bfb2ZfcGFnZSI+PC9hPmdzdGRhdGFwcm90b2NvbDwvc3Bhbj48L2gyPgorPHA+Z3N0ZGF0YXByb3RvY29sIOKAlCBTZXJpYWxpemF0aW9uIG9mIGNhcHMsIGJ1ZmZlcnMgYW5kIGV2ZW50cy48L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorI2luY2x1ZGUgJmx0O2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmgmZ3Q7CisKK2VudW0gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dzdERQSGVhZGVyRmxhZyIgdGl0bGU9ImVudW0gR3N0RFBIZWFkZXJGbGFnIj5Hc3REUEhlYWRlckZsYWc8L2E+OworZW51bSAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR3N0RFBQYXlsb2FkVHlwZSIgdGl0bGU9ImVudW0gR3N0RFBQYXlsb2FkVHlwZSI+R3N0RFBQYXlsb2FkVHlwZTwvYT47CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNHU1QtRFAtSEVBREVSLUxFTkdUSDpDQVBTIiB0aXRsZT0iR1NUX0RQX0hFQURFUl9MRU5HVEgiPkdTVF9EUF9IRUFERVJfTEVOR1RIPC9hPgorZW51bSAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR3N0RFBWZXJzaW9uIiB0aXRsZT0iZW51bSBHc3REUFZlcnNpb24iPkdzdERQVmVyc2lvbjwvYT47CisjZGVmaW5lICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNHU1QtRFAtVkVSU0lPTi1NQUpPUjpDQVBTIiB0aXRsZT0iR1NUX0RQX1ZFUlNJT05fTUFKT1IiPkdTVF9EUF9WRVJTSU9OX01BSk9SPC9hPgorI2RlZmluZSAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR1NULURQLVZFUlNJT04tTUlOT1I6Q0FQUyIgdGl0bGU9IkdTVF9EUF9WRVJTSU9OX01JTk9SIj5HU1RfRFBfVkVSU0lPTl9NSU5PUjwvYT4KKzxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI2dzdC1kcC1pbml0IiB0aXRsZT0iZ3N0X2RwX2luaXQgKCkiPmdzdF9kcF9pbml0PC9hPiAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR3N0RFBIZWFkZXJGcm9tQnVmZmVyRnVuY3Rpb24iIHRpdGxlPSJHc3REUEhlYWRlckZyb21CdWZmZXJGdW5jdGlvbiAoKSI+KkdzdERQSGVhZGVyRnJvbUJ1ZmZlckZ1bmN0aW9uPC9hPikgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR3N0RFBIZWFkZXJGbGFnIiB0aXRsZT0iZW51bSBHc3REUEhlYWRlckZsYWciPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REUEhlYWRlckZsYWc8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICpsZW5ndGg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICoqaGVhZGVyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNHc3REUFBhY2tldEZyb21DYXBzRnVuY3Rpb24iIHRpdGxlPSJHc3REUFBhY2tldEZyb21DYXBzRnVuY3Rpb24gKCkiPipHc3REUFBhY2tldEZyb21DYXBzRnVuY3Rpb248L2E+KSAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNHc3REUEhlYWRlckZsYWciIHRpdGxlPSJlbnVtIEdzdERQSGVhZGVyRmxhZyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERQSGVhZGVyRmxhZzwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gKmxlbmd0aDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKipoZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICoqcGF5bG9hZDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR3N0RFBQYWNrZXRGcm9tRXZlbnRGdW5jdGlvbiIgdGl0bGU9IkdzdERQUGFja2V0RnJvbUV2ZW50RnVuY3Rpb24gKCkiPipHc3REUFBhY2tldEZyb21FdmVudEZ1bmN0aW9uPC9hPikgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR3N0RFBIZWFkZXJGbGFnIiB0aXRsZT0iZW51bSBHc3REUEhlYWRlckZsYWciPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REUEhlYWRlckZsYWc8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICpsZW5ndGg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICoqaGVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqKnBheWxvYWQ8L2NvZGU+PC9lbT4pOworICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR3N0RFBQYWNrZXRpemVyIiB0aXRsZT0iR3N0RFBQYWNrZXRpemVyIj5Hc3REUFBhY2tldGl6ZXI8L2E+OworPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dzdERQUGFja2V0aXplciIgdGl0bGU9IkdzdERQUGFja2V0aXplciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3REUFBhY2tldGl6ZXI8L3NwYW4+PC9hPiAqICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI2dzdC1kcC1wYWNrZXRpemVyLW5ldyIgdGl0bGU9ImdzdF9kcF9wYWNrZXRpemVyX25ldyAoKSI+Z3N0X2RwX3BhY2tldGl6ZXJfbmV3PC9hPiAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dzdERQVmVyc2lvbiIgdGl0bGU9ImVudW0gR3N0RFBWZXJzaW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RFBWZXJzaW9uPC9zcGFuPjwvYT4gdmVyc2lvbjwvY29kZT48L2VtPik7Cis8c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNnc3QtZHAtcGFja2V0aXplci1mcmVlIiB0aXRsZT0iZ3N0X2RwX3BhY2tldGl6ZXJfZnJlZSAoKSI+Z3N0X2RwX3BhY2tldGl6ZXJfZnJlZTwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dzdERQUGFja2V0aXplciIgdGl0bGU9IkdzdERQUGFja2V0aXplciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERQUGFja2V0aXplcjwvc3Bhbj48L2E+ICpwYWNrZXRpemVyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDE2Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MTY8L3NwYW4+PC9hPiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjZ3N0LWRwLWNyYyIgdGl0bGU9ImdzdF9kcF9jcmMgKCkiPmdzdF9kcF9jcmM8L2E+ICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbGVuZ3RoPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MzI8L3NwYW4+PC9hPiAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjZ3N0LWRwLWhlYWRlci1wYXlsb2FkLWxlbmd0aCIgdGl0bGU9ImdzdF9kcF9oZWFkZXJfcGF5bG9hZF9sZW5ndGggKCkiPmdzdF9kcF9oZWFkZXJfcGF5bG9hZF9sZW5ndGg8L2E+ICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqaGVhZGVyPC9jb2RlPjwvZW0+KTsKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNHc3REUFBheWxvYWRUeXBlIiB0aXRsZT0iZW51bSBHc3REUFBheWxvYWRUeXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdERQUGF5bG9hZFR5cGU8L3NwYW4+PC9hPiAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjZ3N0LWRwLWhlYWRlci1wYXlsb2FkLXR5cGUiIHRpdGxlPSJnc3RfZHBfaGVhZGVyX3BheWxvYWRfdHlwZSAoKSI+Z3N0X2RwX2hlYWRlcl9wYXlsb2FkX3R5cGU8L2E+ICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICpoZWFkZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI2dzdC1kcC1idWZmZXItZnJvbS1oZWFkZXIiIHRpdGxlPSJnc3RfZHBfYnVmZmVyX2Zyb21faGVhZGVyICgpIj5nc3RfZHBfYnVmZmVyX2Zyb21faGVhZGVyPC9hPiAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGhlYWRlcl9sZW5ndGg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICpoZWFkZXI8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPiAqICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjZ3N0LWRwLWNhcHMtZnJvbS1wYWNrZXQiIHRpdGxlPSJnc3RfZHBfY2Fwc19mcm9tX3BhY2tldCAoKSI+Z3N0X2RwX2NhcHNfZnJvbV9wYWNrZXQ8L2E+ICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBoZWFkZXJfbGVuZ3RoPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqaGVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqcGF5bG9hZDwvY29kZT48L2VtPik7Cis8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICogICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI2dzdC1kcC1ldmVudC1mcm9tLXBhY2tldCIgdGl0bGU9ImdzdF9kcF9ldmVudF9mcm9tX3BhY2tldCAoKSI+Z3N0X2RwX2V2ZW50X2Zyb21fcGFja2V0PC9hPiAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBoZWFkZXJfbGVuZ3RoPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqaGVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqcGF5bG9hZDwvY29kZT48L2VtPik7Cis8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNnc3QtZHAtdmFsaWRhdGUtaGVhZGVyIiB0aXRsZT0iZ3N0X2RwX3ZhbGlkYXRlX2hlYWRlciAoKSI+Z3N0X2RwX3ZhbGlkYXRlX2hlYWRlcjwvYT4gICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBoZWFkZXJfbGVuZ3RoPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqaGVhZGVyPC9jb2RlPjwvZW0+KTsKKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI2dzdC1kcC12YWxpZGF0ZS1wYXlsb2FkIiB0aXRsZT0iZ3N0X2RwX3ZhbGlkYXRlX3BheWxvYWQgKCkiPmdzdF9kcF92YWxpZGF0ZV9wYXlsb2FkPC9hPiAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaGVhZGVyX2xlbmd0aDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmhlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKnBheWxvYWQ8L2NvZGU+PC9lbT4pOworPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjZ3N0LWRwLXZhbGlkYXRlLXBhY2tldCIgdGl0bGU9ImdzdF9kcF92YWxpZGF0ZV9wYWNrZXQgKCkiPmdzdF9kcF92YWxpZGF0ZV9wYWNrZXQ8L2E+ICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaGVhZGVyX2xlbmd0aDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmhlYWRlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKnBheWxvYWQ8L2NvZGU+PC9lbT4pOworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK1RoaXMgaGVscGVyIGxpYnJhcnkgcHJvdmlkZXMgc2VyaWFsaXphdGlvbiBvZiBHc3RCdWZmZXIsIEdzdENhcHMgYW5kCitHc3RFdmVudCBzdHJ1Y3R1cmVzLgorPC9wPgorPHA+CitUaGlzIHNlcmlhbGl6YXRpb24gaXMgdXNlZnVsIHdoZW4gR1N0cmVhbWVyIG5lZWRzIHRvIGludGVyZmFjZSB3aXRoCit0aGUgb3V0c2lkZSB3b3JsZCB0byB0cmFuc3BvcnQgZGF0YSBiZXR3ZWVuIGRpc3RpbmN0IEdTdHJlYW1lciBwaXBlbGluZXMuCitUaGUgY29ubmVjdGlvbnMgd2l0aCB0aGUgb3V0c2lkZSB3b3JsZCBnZW5lcmFsbHkgZG9uJ3QgaGF2ZSBtZWNoYW5pc21zCit0byB0cmFuc3BvcnQgcHJvcGVydGllcyBvZiB0aGVzZSBzdHJ1Y3R1cmVzLgorPC9wPgorPHA+CitGb3IgZXhhbXBsZSwgdHJhbnNwb3J0aW5nIGJ1ZmZlcnMgYWNyb3NzIG5hbWVkIHBpcGVzIG9yIG5ldHdvcmsgY29ubmVjdGlvbnMKK2RvZXNuJ3QgbWFpbnRhaW4gdGhlIGJ1ZmZlciBzaXplIGFuZCBzZXBhcmF0aW9uLgorPC9wPgorPHA+CitUaGlzIGRhdGEgcHJvdG9jb2wgYXNzdW1lcyBhIHJlbGlhYmxlIGNvbm5lY3Rpb24tb3JpZW50ZWQgdHJhbnNwb3J0LCBzdWNoIGFzCitUQ1AsIGEgcGlwZSwgb3IgYSBmaWxlLiAgVGhlIHByb3RvY29sIGRvZXMgbm90IHNlcmlhbGl6ZSB0aGUgY2FwcyBmb3IKK2VhY2ggYnVmZmVyOyBpbnN0ZWFkLCBpdCB0cmFuc3BvcnQgdGhlIGNhcHMgb25seSB3aGVuIHRoZXkgY2hhbmdlIGluIHRoZQorc3RyZWFtLiAgVGhpcyBpbXBsaWVzIHRoYXQgdGhlcmUgd2lsbCBhbHdheXMgYmUgYSBjYXBzIHBhY2tldCBiZWZvcmUgYW55CitidWZmZXIgcGFja2V0cy4KKzwvcD4KKzxwPgorVGhlIHZlcnNpb25pbmcgb2YgdGhlIHByb3RvY29sIGlzIGluZGVwZW5kZW50IG9mIEdTdHJlYW1lcidzIHZlcnNpb24uCitUaGUgbWFqb3IgbnVtYmVyIGdldHMgaW5jcmVtZW50ZWQsIGFuZCB0aGUgbWlub3IgcmVzZXQsIGZvciBpbmNvbXBhdGlibGUKK2NoYW5nZXMuICBUaGUgbWlub3IgbnVtYmVyIGdldHMgaW5jcmVtZW50ZWQgZm9yIGNvbXBhdGlibGUgY2hhbmdlcyB0aGF0CithbGxvdyBjbGllbnRzIHdobyBkbyBub3QgY29tcGxldGVseSB1bmRlcnN0YW5kIHRoZSBuZXdlciBwcm90b2NvbCB2ZXJzaW9uCit0byBzdGlsbCBkZWNvZGUgd2hhdCB0aGV5IGRvIHVuZGVyc3RhbmQuCis8L3A+Cis8cD4KK1ZlcnNpb24gMC4yIHNlcmlhbGl6ZXMgb25seSBhIHNtYWxsIHN1YnNldCBvZiBhbGwgZXZlbnRzLCB3aXRoIGEgY3VzdG9tCitwYXlsb2FkIGZvciBlYWNoIHR5cGUuICBBbHNvLCBhbGwgR0RQIHN0cmVhbXMgc3RhcnQgd2l0aCB0aGUgaW5pdGlhbCBjYXBzCitwYWNrZXQuCis8L3A+Cis8cD4KK1ZlcnNpb24gMS4wIHNlcmlhbGl6ZXMgYWxsIGV2ZW50cyBieSB0YWtpbmcgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZgordGhlIGV2ZW50IGFzIHRoZSBwYXlsb2FkLiAgSW4gYWRkaXRpb24sIEdEUCBzdHJlYW1zIGNhbiBub3cgc3RhcnQgd2l0aAorZXZlbnRzIGFzIHdlbGwsIGFzIHJlcXVpcmVkIGJ5IHRoZSBuZXcgZGF0YSBzdHJlYW0gbW9kZWwgaW4gR1N0cmVhbWVyIDAuMTAuCis8L3A+Cis8cD4KK0NvbnZlcnRpbmcgYnVmZmVycywgY2FwcyBhbmQgZXZlbnRzIHRvIEdEUCBidWZmZXJzIGlzIGRvbmUgdXNpbmcgYQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dzdERQUGFja2V0aXplciIgdGl0bGU9IkdzdERQUGFja2V0aXplciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERQUGFja2V0aXplcjwvc3Bhbj48L2E+IG9iamVjdCBhbmQgaW52b2tpbmcgaXRzIHBhY2tldGl6ZXIgZnVuY3Rpb25zLgorRm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHJlYXNvbnMsIHRoZSBvbGQgMC4yIG1ldGhvZHMgYXJlIHN0aWxsCithdmFpbGFibGUgYnV0IGRlcHJlY2F0ZWQuCis8L3A+Cis8cD4KK0ZvciByZWZlcmVuY2UsIHRoaXMgaW1hZ2Ugc2hvd3MgdGhlIGJ5dGUgbGF5b3V0IG9mIHRoZSBHRFAgaGVhZGVyOgorPC9wPgorPHA+Cis8aW1nIHNyYz0iZ2RwLWhlYWRlci5wbmciPgorPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdERQSGVhZGVyRmxhZyI+PC9hPjxoMz5lbnVtIEdzdERQSGVhZGVyRmxhZzwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBlbnVtIHsKKyAgR1NUX0RQX0hFQURFUl9GTEFHX05PTkUgICAgICAgID0gMCwKKyAgR1NUX0RQX0hFQURFUl9GTEFHX0NSQ19IRUFERVIgID0gKDEgJmx0OyZsdDsgMCksCisgIEdTVF9EUF9IRUFERVJfRkxBR19DUkNfUEFZTE9BRCA9ICgxICZsdDsmbHQ7IDEpLAorICBHU1RfRFBfSEVBREVSX0ZMQUdfQ1JDICAgICAgICAgPSAoMSAmbHQ7Jmx0OyAxKSB8ICgxICZsdDsmbHQ7IDApLAorfSBHc3REUEhlYWRlckZsYWc7Cis8L3ByZT4KKzxwPgoraGVhZGVyIGZsYWdzIGZvciB0aGUgZGF0YXByb3RvY29sLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtRFAtSEVBREVSLUZMQUctTk9ORTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRFBfSEVBREVSX0ZMQUdfTk9ORTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Tm8gZmxhZyBwcmVzZW50LgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULURQLUhFQURFUi1GTEFHLUNSQy1IRUFERVI6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0RQX0hFQURFUl9GTEFHX0NSQ19IRUFERVI8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgaGVhZGVyIENSQyBmaWVsZCBpcyBwcmVzZW50LgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULURQLUhFQURFUi1GTEFHLUNSQy1QQVlMT0FEOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9EUF9IRUFERVJfRkxBR19DUkNfUEFZTE9BRDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBwYXlsb2FkIENSQyBmaWVsZCBpcyBwcmVzZW50LgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULURQLUhFQURFUi1GTEFHLUNSQzpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRFBfSEVBREVSX0ZMQUdfQ1JDPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIENSQyBmb3IgaGVhZGVyIGFuZCBwYXlsb2FkIGlzIHByZXNlbnQuCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3REUFBheWxvYWRUeXBlIj48L2E+PGgzPmVudW0gR3N0RFBQYXlsb2FkVHlwZTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBlbnVtIHsKKyAgR1NUX0RQX1BBWUxPQURfTk9ORSAgICAgICAgICAgID0gMCwKKyAgR1NUX0RQX1BBWUxPQURfQlVGRkVSLAorICBHU1RfRFBfUEFZTE9BRF9DQVBTLAorICBHU1RfRFBfUEFZTE9BRF9FVkVOVF9OT05FICAgICAgPSA2NCwKK30gR3N0RFBQYXlsb2FkVHlwZTsKKzwvcHJlPgorPHA+CitUaGUgR0RQIHBheWxvYWQgdHlwZXMuIGEgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+IHBheWxvYWQgdHlwZSBpcyBlbmNvZGVkIHdpdGggdGhlCitldmVudCB0eXBlIG51bWJlciBzdGFydGluZyBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5HU1RfRFBfUEFZTE9BRF9FVkVOVF9OT05FPC9jb2RlPjwvZW0+LgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtRFAtUEFZTE9BRC1OT05FOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9EUF9QQVlMT0FEX05PTkU8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPkludmFsaWQgcGF5bG9hZCB0eXBlLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULURQLVBBWUxPQUQtQlVGRkVSOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9EUF9QQVlMT0FEX0JVRkZFUjwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Cis8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gcGF5bG9hZCBwYWNrZXQuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtRFAtUEFZTE9BRC1DQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRFBfUEFZTE9BRF9DQVBTPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBwYXlsb2FkIHBhY2tldC4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1EUC1QQVlMT0FELUVWRU5ULU5PTkU6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0RQX1BBWUxPQURfRVZFTlRfTk9ORTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Rmlyc3QgdmFsdWUgb2YgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+IHBheWxvYWQgcGFja2V0cy4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1EUC1IRUFERVItTEVOR1RIOkNBUFMiPjwvYT48aDM+R1NUX0RQX0hFQURFUl9MRU5HVEg8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0RQX0hFQURFUl9MRU5HVEggNjIKKzwvcHJlPgorPHA+CitUaGUgaGVhZGVyIHNpemUgaW4gYnl0ZXMuCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdERQVmVyc2lvbiI+PC9hPjxoMz5lbnVtIEdzdERQVmVyc2lvbjwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBlbnVtIHsKKyAgR1NUX0RQX1ZFUlNJT05fMF8yID0gMSwKKyAgR1NUX0RQX1ZFUlNJT05fMV8wLAorfSBHc3REUFZlcnNpb247Cis8L3ByZT4KKzxwPgorVGhlIHZlcnNpb24gb2YgdGhlIEdEUCBwcm90b2NvbCBiZWluZyB1c2VkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtRFAtVkVSU0lPTi0wLTI6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0RQX1ZFUlNJT05fMF8yPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5wcm90b2NvbCB2ZXJzaW9uIDAuMgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULURQLVZFUlNJT04tMS0wOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9EUF9WRVJTSU9OXzFfMDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cHJvdG9jb2wgdmVyc2lvbiAxLjAKKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1EUC1WRVJTSU9OLU1BSk9SOkNBUFMiPjwvYT48aDM+R1NUX0RQX1ZFUlNJT05fTUFKT1I8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0RQX1ZFUlNJT05fTUFKT1IgMAorPC9wcmU+Cis8cD4KK1RoZSBtYWpvciB2ZXJzaW9uIG51bWJlciBvZiB0aGUgR1N0cmVhbWVyIERhdGEgUHJvdG9jb2wuCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdTVC1EUC1WRVJTSU9OLU1JTk9SOkNBUFMiPjwvYT48aDM+R1NUX0RQX1ZFUlNJT05fTUlOT1I8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0RQX1ZFUlNJT05fTUlOT1IgMgorPC9wcmU+Cis8cD4KK1RoZSBtaW5vciB2ZXJzaW9uIG51bWJlciBvZiB0aGUgR1N0cmVhbWVyIERhdGEgUHJvdG9jb2wuCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1kcC1pbml0Ij48L2E+PGgzPmdzdF9kcF9pbml0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIGdzdF9kcF9pbml0ICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorSW5pdGlhbGl6ZSBHU3RyZWFtZXIgRGF0YSBQcm90b2NvbCBsaWJyYXJ5LgorPC9wPgorPHA+CitTaG91bGQgYmUgY2FsbGVkIGJlZm9yZSB1c2luZyB0aGVzZSBmdW5jdGlvbnMgZnJvbSBzb3VyY2UgbGlua2luZwordG8gdGhpcyBzb3VyY2UgZmlsZS4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RFBIZWFkZXJGcm9tQnVmZmVyRnVuY3Rpb24iPjwvYT48aDM+R3N0RFBIZWFkZXJGcm9tQnVmZmVyRnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgKCpHc3REUEhlYWRlckZyb21CdWZmZXJGdW5jdGlvbikgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR3N0RFBIZWFkZXJGbGFnIiB0aXRsZT0iZW51bSBHc3REUEhlYWRlckZsYWciPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REUEhlYWRlckZsYWc8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICpsZW5ndGg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICoqaGVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RFBQYWNrZXRGcm9tQ2Fwc0Z1bmN0aW9uIj48L2E+PGgzPkdzdERQUGFja2V0RnJvbUNhcHNGdW5jdGlvbiAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAoKkdzdERQUGFja2V0RnJvbUNhcHNGdW5jdGlvbikgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR3N0RFBIZWFkZXJGbGFnIiB0aXRsZT0iZW51bSBHc3REUEhlYWRlckZsYWciPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REUEhlYWRlckZsYWc8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICpsZW5ndGg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICoqaGVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqKnBheWxvYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3REUFBhY2tldEZyb21FdmVudEZ1bmN0aW9uIj48L2E+PGgzPkdzdERQUGFja2V0RnJvbUV2ZW50RnVuY3Rpb24gKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgKCpHc3REUFBhY2tldEZyb21FdmVudEZ1bmN0aW9uKSAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCNHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNHc3REUEhlYWRlckZsYWciIHRpdGxlPSJlbnVtIEdzdERQSGVhZGVyRmxhZyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERQSGVhZGVyRmxhZzwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gKmxlbmd0aDwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKipoZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICoqcGF5bG9hZDwvY29kZT48L2VtPik7PC9wcmU+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdERQUGFja2V0aXplciI+PC9hPjxoMz5Hc3REUFBhY2tldGl6ZXI8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgc3RydWN0IHsKKyAgR3N0RFBWZXJzaW9uIHZlcnNpb247CisKKyAgR3N0RFBIZWFkZXJGcm9tQnVmZmVyRnVuY3Rpb24gaGVhZGVyX2Zyb21fYnVmZmVyOworICBHc3REUFBhY2tldEZyb21DYXBzRnVuY3Rpb24gcGFja2V0X2Zyb21fY2FwczsKKyAgR3N0RFBQYWNrZXRGcm9tRXZlbnRGdW5jdGlvbiBwYWNrZXRfZnJvbV9ldmVudDsKK30gR3N0RFBQYWNrZXRpemVyOworPC9wcmU+Cis8cD4KK0RhdGEgcHJvdG9jb2wgcGFja2V0aXplciBoYW5kbGUuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR3N0RFBWZXJzaW9uIiB0aXRsZT0iZW51bSBHc3REUFZlcnNpb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REUFZlcnNpb248L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RFBQYWNrZXRpemVyLnZlcnNpb24iPjwvYT52ZXJzaW9uPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dzdERQVmVyc2lvbiIgdGl0bGU9ImVudW0gR3N0RFBWZXJzaW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RFBWZXJzaW9uPC9zcGFuPjwvYT4gb2YgdGhlIHByb3RvY29sIHRvIGJlIHVzZWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dzdERQSGVhZGVyRnJvbUJ1ZmZlckZ1bmN0aW9uIiB0aXRsZT0iR3N0RFBIZWFkZXJGcm9tQnVmZmVyRnVuY3Rpb24gKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REUEhlYWRlckZyb21CdWZmZXJGdW5jdGlvbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3REUFBhY2tldGl6ZXIuaGVhZGVyLWZyb20tYnVmZmVyIj48L2E+aGVhZGVyX2Zyb21fYnVmZmVyPC9jb2RlPjwvZW0+Ozwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5idWZmZXIgc2VyaWFsaXplciBmdW5jdGlvbjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR3N0RFBQYWNrZXRGcm9tQ2Fwc0Z1bmN0aW9uIiB0aXRsZT0iR3N0RFBQYWNrZXRGcm9tQ2Fwc0Z1bmN0aW9uICgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RFBQYWNrZXRGcm9tQ2Fwc0Z1bmN0aW9uPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdERQUGFja2V0aXplci5wYWNrZXQtZnJvbS1jYXBzIj48L2E+cGFja2V0X2Zyb21fY2FwczwvY29kZT48L2VtPjs8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Y2FwcyBzZXJpYWxpemVyIGZ1bmN0aW9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNHc3REUFBhY2tldEZyb21FdmVudEZ1bmN0aW9uIiB0aXRsZT0iR3N0RFBQYWNrZXRGcm9tRXZlbnRGdW5jdGlvbiAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERQUGFja2V0RnJvbUV2ZW50RnVuY3Rpb248L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RFBQYWNrZXRpemVyLnBhY2tldC1mcm9tLWV2ZW50Ij48L2E+cGFja2V0X2Zyb21fZXZlbnQ8L2NvZGU+PC9lbT47PC9zcGFuPjwvcD48L3RkPgorPHRkPmV2ZW50IHNlcmlhbGl6ZXIgZnVuY3Rpb248L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZHAtcGFja2V0aXplci1uZXciPjwvYT48aDM+Z3N0X2RwX3BhY2tldGl6ZXJfbmV3ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR3N0RFBQYWNrZXRpemVyIiB0aXRsZT0iR3N0RFBQYWNrZXRpemVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdERQUGFja2V0aXplcjwvc3Bhbj48L2E+ICogICBnc3RfZHBfcGFja2V0aXplcl9uZXcgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNHc3REUFZlcnNpb24iIHRpdGxlPSJlbnVtIEdzdERQVmVyc2lvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERQVmVyc2lvbjwvc3Bhbj48L2E+IHZlcnNpb248L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitDcmVhdGVzIGEgbmV3IHBhY2tldGl6ZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmVyc2lvbjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dzdERQVmVyc2lvbiIgdGl0bGU9ImVudW0gR3N0RFBWZXJzaW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RFBWZXJzaW9uPC9zcGFuPjwvYT4gb2YgdGhlIHByb3RvY29sIHRvIHBhY2tldGl6ZSBmb3IuPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YSBuZXdseSBhbGxvY2F0ZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dzdERQUGFja2V0aXplciIgdGl0bGU9IkdzdERQUGFja2V0aXplciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERQUGFja2V0aXplcjwvc3Bhbj48L2E+Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZHAtcGFja2V0aXplci1mcmVlIj48L2E+PGgzPmdzdF9kcF9wYWNrZXRpemVyX2ZyZWUgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgZ3N0X2RwX3BhY2tldGl6ZXJfZnJlZSAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR3N0RFBQYWNrZXRpemVyIiB0aXRsZT0iR3N0RFBQYWNrZXRpemVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RFBQYWNrZXRpemVyPC9zcGFuPjwvYT4gKnBhY2tldGl6ZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitGcmVlIHRoZSBnaXZlbiBwYWNrZXRpemVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT48dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWNrZXRpemVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR3N0RFBQYWNrZXRpemVyIiB0aXRsZT0iR3N0RFBQYWNrZXRpemVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RFBQYWNrZXRpemVyPC9zcGFuPjwvYT4gdG8gZnJlZS48L3RkPgorPC90cj48L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRwLWNyYyI+PC9hPjxoMz5nc3RfZHBfY3JjICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDE2PC9zcGFuPjwvYT4gICAgICAgICAgICAgZ3N0X2RwX2NyYyAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGxlbmd0aDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NhbGN1bGF0ZSBhIENSQyBmb3IgdGhlIGdpdmVuIGJ1ZmZlciBvdmVyIHRoZSBnaXZlbiBudW1iZXIgb2YgYnl0ZXMuCitUaGlzIGlzIG9ubHkgcHJvdmlkZWQgZm9yIHZlcmlmaWNhdGlvbiBwdXJwb3NlczsgdHlwaWNhbCBHRFAgdXNlcnMKK3dpbGwgbm90IG5lZWQgdGhpcyBmdW5jdGlvbi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YXJyYXkgb2YgYnl0ZXM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxlbmd0aDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbGVuZ3RoIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPmEgdHdvLWJ5dGUgQ1JDIGNoZWNrc3VtLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImdzdC1kcC1oZWFkZXItcGF5bG9hZC1sZW5ndGgiPjwvYT48aDM+Z3N0X2RwX2hlYWRlcl9wYXlsb2FkX2xlbmd0aCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICAgICAgICAgICAgIGdzdF9kcF9oZWFkZXJfcGF5bG9hZF9sZW5ndGggICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICpoZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgdGhlIGxlbmd0aCBvZiB0aGUgcGF5bG9hZCBkZXNjcmliZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmhlYWRlcjwvY29kZT48L2VtPi4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5oZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGJ5dGUgaGVhZGVyIG9mIHRoZSBwYWNrZXQgYXJyYXk8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbGVuZ3RoIG9mIHRoZSBwYXlsb2FkIHRoaXMgaGVhZGVyIGRlc2NyaWJlcy48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZHAtaGVhZGVyLXBheWxvYWQtdHlwZSI+PC9hPjxoMz5nc3RfZHBfaGVhZGVyX3BheWxvYWRfdHlwZSAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dzdERQUGF5bG9hZFR5cGUiIHRpdGxlPSJlbnVtIEdzdERQUGF5bG9hZFR5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RFBQYXlsb2FkVHlwZTwvc3Bhbj48L2E+ICAgIGdzdF9kcF9oZWFkZXJfcGF5bG9hZF90eXBlICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICpoZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgorPHA+CitHZXQgdGhlIHR5cGUgb2YgdGhlIHBheWxvYWQgZGVzY3JpYmVkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5oZWFkZXI8L2NvZGU+PC9lbT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aGVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBieXRlIGhlYWRlciBvZiB0aGUgcGFja2V0IGFycmF5PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNHc3REUFBheWxvYWRUeXBlIiB0aXRsZT0iZW51bSBHc3REUFBheWxvYWRUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RFBQYXlsb2FkVHlwZTwvc3Bhbj48L2E+IHRoZSBwYXlsb2FkIHRoaXMgaGVhZGVyIGRlc2NyaWJlcy48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJnc3QtZHAtYnVmZmVyLWZyb20taGVhZGVyIj48L2E+PGgzPmdzdF9kcF9idWZmZXJfZnJvbV9oZWFkZXIgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKiAgICAgICAgIGdzdF9kcF9idWZmZXJfZnJvbV9oZWFkZXIgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBoZWFkZXJfbGVuZ3RoPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqaGVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlcyBhIG5ld2x5IGFsbG9jYXRlZCA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gZnJvbSB0aGUgZ2l2ZW4gaGVhZGVyLgorVGhlIGJ1ZmZlciBkYXRhIG5lZWRzIHRvIGJlIGNvcGllZCBpbnRvIGl0IGJlZm9yZSB2YWxpZGF0aW5nLgorPC9wPgorPHA+CitVc2UgdGhpcyBmdW5jdGlvbiBpZiB5b3Ugd2FudCB0byBwcmUtYWxsb2NhdGUgYSBidWZmZXIgYmFzZWQgb24gdGhlCitwYWNrZXQgaGVhZGVyIHRvIHJlYWQgdGhlIHBhY2tldCBwYXlsb2FkIGluIHRvLgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIHRoZSBoZWFkZXIgcGFzc2VkIHRvIGl0LCB1c2UKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNnc3QtZHAtdmFsaWRhdGUtaGVhZGVyIiB0aXRsZT0iZ3N0X2RwX3ZhbGlkYXRlX2hlYWRlciAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZHBfdmFsaWRhdGVfaGVhZGVyKCk8L2NvZGU+PC9hPiBmaXJzdCBpZiB0aGUgaGVhZGVyIGRhdGEgaXMgdW5jaGVja2VkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmhlYWRlcl9sZW5ndGg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGxlbmd0aCBvZiB0aGUgcGFja2V0IGhlYWRlcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aGVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBieXRlIGFycmF5IG9mIHRoZSBwYWNrZXQgaGVhZGVyPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gaWYgdGhlIGJ1ZmZlciB3YXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQsIG9yIE5VTEwuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRwLWNhcHMtZnJvbS1wYWNrZXQiPjwvYT48aDM+Z3N0X2RwX2NhcHNfZnJvbV9wYWNrZXQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKiAgICAgICAgICAgZ3N0X2RwX2NhcHNfZnJvbV9wYWNrZXQgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGhlYWRlcl9sZW5ndGg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICpoZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICpwYXlsb2FkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorQ3JlYXRlcyBhIG5ld2x5IGFsbG9jYXRlZCA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gZnJvbSB0aGUgZ2l2ZW4gcGFja2V0LgorPC9wPgorPHA+CitUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIGl0LCB1c2UKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNnc3QtZHAtdmFsaWRhdGUtcGFja2V0IiB0aXRsZT0iZ3N0X2RwX3ZhbGlkYXRlX3BhY2tldCAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZHBfdmFsaWRhdGVfcGFja2V0KCk8L2NvZGU+PC9hPiBmaXJzdCBpZiB0aGUgaGVhZGVyIGFuZCBwYXlsb2FkIGRhdGEgYXJlCit1bmNoZWNrZWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aGVhZGVyX2xlbmd0aDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbGVuZ3RoIG9mIHRoZSBwYWNrZXQgaGVhZGVyPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5oZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGJ5dGUgYXJyYXkgb2YgdGhlIHBhY2tldCBoZWFkZXI8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBheWxvYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGJ5dGUgYXJyYXkgb2YgdGhlIHBhY2tldCBwYXlsb2FkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlJldHVybnM8L2VtPjwvc3Bhbj7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QSA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gY29udGFpbmluZyB0aGUgY2FwcyByZXByZXNlbnRlZCBpbiB0aGUgcGFja2V0LAorb3IgTlVMTCBpZiB0aGUgcGFja2V0IGNvdWxkIG5vdCBiZSBjb252ZXJ0ZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRwLWV2ZW50LWZyb20tcGFja2V0Ij48L2E+PGgzPmdzdF9kcF9ldmVudF9mcm9tX3BhY2tldCAoKTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqICAgICAgICAgIGdzdF9kcF9ldmVudF9mcm9tX3BhY2tldCAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBoZWFkZXJfbGVuZ3RoPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqaGVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqcGF5bG9hZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK0NyZWF0ZXMgYSBuZXdseSBhbGxvY2F0ZWQgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+IGZyb20gdGhlIGdpdmVuIHBhY2tldC4KKzwvcD4KKzxwPgorVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byBpdCwgdXNlCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjZ3N0LWRwLXZhbGlkYXRlLXBhY2tldCIgdGl0bGU9ImdzdF9kcF92YWxpZGF0ZV9wYWNrZXQgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2RwX3ZhbGlkYXRlX3BhY2tldCgpPC9jb2RlPjwvYT4gZmlyc3QgaWYgdGhlIGhlYWRlciBhbmQgcGF5bG9hZCBkYXRhIGFyZQordW5jaGVja2VkLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmhlYWRlcl9sZW5ndGg8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGxlbmd0aCBvZiB0aGUgcGFja2V0IGhlYWRlcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aGVhZGVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBieXRlIGFycmF5IG9mIHRoZSBwYWNrZXQgaGVhZGVyPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXlsb2FkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBieXRlIGFycmF5IG9mIHRoZSBwYWNrZXQgcGF5bG9hZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SZXR1cm5zPC9lbT48L3NwYW4+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPkEgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+IGlmIHRoZSBldmVudCB3YXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQsCitvciBOVUxMIGlmIGFuIGV2ZW50IGNvdWxkIG5vdCBiZSByZWFkIGZyb20gdGhlIHBheWxvYWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRwLXZhbGlkYXRlLWhlYWRlciI+PC9hPjxoMz5nc3RfZHBfdmFsaWRhdGVfaGVhZGVyICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9kcF92YWxpZGF0ZV9oZWFkZXIgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBoZWFkZXJfbGVuZ3RoPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqaGVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVmFsaWRhdGVzIHRoZSBnaXZlbiBwYWNrZXQgaGVhZGVyIGJ5IGNoZWNraW5nIHRoZSBDUkMgY2hlY2tzdW0uCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aGVhZGVyX2xlbmd0aDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgbGVuZ3RoIG9mIHRoZSBwYWNrZXQgaGVhZGVyPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5oZWFkZXI8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIGJ5dGUgYXJyYXkgb2YgdGhlIHBhY2tldCBoZWFkZXI8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBDUkMgbWF0Y2hlcywgb3Igbm8gQ1JDIGNoZWNrc3VtIGlzIHByZXNlbnQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRwLXZhbGlkYXRlLXBheWxvYWQiPjwvYT48aDM+Z3N0X2RwX3ZhbGlkYXRlX3BheWxvYWQgKCk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgZ3N0X2RwX3ZhbGlkYXRlX3BheWxvYWQgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGhlYWRlcl9sZW5ndGg8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICpoZWFkZXI8L2NvZGU+PC9lbT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICpwYXlsb2FkPC9jb2RlPjwvZW0+KTs8L3ByZT4KKzxwPgorVmFsaWRhdGVzIHRoZSBnaXZlbiBwYWNrZXQgcGF5bG9hZCB1c2luZyB0aGUgZ2l2ZW4gcGFja2V0IGhlYWRlcgorYnkgY2hlY2tpbmcgdGhlIENSQyBjaGVja3N1bS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5oZWFkZXJfbGVuZ3RoPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBsZW5ndGggb2YgdGhlIHBhY2tldCBoZWFkZXI8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmhlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgYnl0ZSBhcnJheSBvZiB0aGUgcGFja2V0IGhlYWRlcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGF5bG9hZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgYnl0ZSBhcnJheSBvZiB0aGUgcGFja2V0IHBheWxvYWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBDUkMgbWF0Y2hlcywgb3Igbm8gQ1JDIGNoZWNrc3VtIGlzIHByZXNlbnQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iZ3N0LWRwLXZhbGlkYXRlLXBhY2tldCI+PC9hPjxoMz5nc3RfZHBfdmFsaWRhdGVfcGFja2V0ICgpPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIGdzdF9kcF92YWxpZGF0ZV9wYWNrZXQgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBoZWFkZXJfbGVuZ3RoPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqaGVhZGVyPC9jb2RlPjwvZW0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqcGF5bG9hZDwvY29kZT48L2VtPik7PC9wcmU+Cis8cD4KK1ZhbGlkYXRlcyB0aGUgZ2l2ZW4gcGFja2V0IGJ5IGNoZWNraW5nIHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGNoZWNrc3Vtcy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5oZWFkZXJfbGVuZ3RoPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBsZW5ndGggb2YgdGhlIHBhY2tldCBoZWFkZXI8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmhlYWRlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgYnl0ZSBhcnJheSBvZiB0aGUgcGFja2V0IGhlYWRlcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGF5bG9hZDwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgYnl0ZSBhcnJheSBvZiB0aGUgcGFja2V0IHBheWxvYWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+UmV0dXJuczwvZW0+PC9zcGFuPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKzxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBwYWNrZXQgdmFsaWRhdGVzLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KKzxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiwgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+LCA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMuZGV2aGVscDIgYi9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy5kZXZoZWxwMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTQ2ZDVjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMuZGV2aGVscDIKQEAgLTAsMCArMSw2MTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PgorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgIiI+Cis8Ym9vayB4bWxucz0iaHR0cDovL3d3dy5kZXZoZWxwLm5ldC9ib29rIiB0aXRsZT0iR1N0cmVhbWVyIDAuMTEgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIiBsaW5rPSJpbmRleC5odG1sIiBhdXRob3I9IiIgbmFtZT0iZ3N0cmVhbWVyLWxpYnMiIHZlcnNpb249IjIiIGxhbmd1YWdlPSJjIj4KKyAgPGNoYXB0ZXJzPgorICAgIDxzdWIgbmFtZT0iR1N0cmVhbWVyIExpYnJhcmllcyIgbGluaz0iZ3N0cmVhbWVyLWxpYnMuaHRtbCI+CisgICAgICA8c3ViIG5hbWU9IkdTdHJlYW1lciBCYXNlIGFuZCBVdGlsbGl0eSBDbGFzc2VzIiBsaW5rPSJnc3RyZWFtZXItYmFzZS5odG1sIj4KKyAgICAgICAgPHN1YiBuYW1lPSJHc3RCYXNlUGFyc2UiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sIi8+CisgICAgICAgIDxzdWIgbmFtZT0iR3N0QmFzZVNyYyIgbGluaz0iR3N0QmFzZVNyYy5odG1sIi8+CisgICAgICAgIDxzdWIgbmFtZT0iR3N0QmFzZVNpbmsiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwiLz4KKyAgICAgICAgPHN1YiBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtIiBsaW5rPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiLz4KKyAgICAgICAgPHN1YiBuYW1lPSJHc3RQdXNoU3JjIiBsaW5rPSJHc3RQdXNoU3JjLmh0bWwiLz4KKyAgICAgICAgPHN1YiBuYW1lPSJHc3RBZGFwdGVyIiBsaW5rPSJHc3RBZGFwdGVyLmh0bWwiLz4KKyAgICAgICAgPHN1YiBuYW1lPSJHc3RCaXRSZWFkZXIiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sIi8+CisgICAgICAgIDxzdWIgbmFtZT0iR3N0Qnl0ZVJlYWRlciIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIi8+CisgICAgICAgIDxzdWIgbmFtZT0iR3N0Qnl0ZVdyaXRlciIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIi8+CisgICAgICAgIDxzdWIgbmFtZT0iR3N0Q29sbGVjdFBhZHMiIGxpbms9IkdzdENvbGxlY3RQYWRzLmh0bWwiLz4KKyAgICAgICAgPHN1YiBuYW1lPSJHc3RUeXBlRmluZEhlbHBlciIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCIvPgorICAgICAgICA8c3ViIG5hbWU9IkdzdERhdGFRdWV1ZSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwiLz4KKyAgICAgIDwvc3ViPgorICAgICAgPHN1YiBuYW1lPSJHU3RyZWFtZXIgRHluYW1pYyBQYXJhbWV0ZXIgQ29udHJvbCIgbGluaz0iZ3N0cmVhbWVyLWNvbnRyb2wuaHRtbCI+CisgICAgICAgIDxzdWIgbmFtZT0iR3N0Q29udHJvbGxlciIgbGluaz0iR3N0Q29udHJvbGxlci5odG1sIi8+CisgICAgICAgIDxzdWIgbmFtZT0iR3N0Q29udHJvbFNvdXJjZSIgbGluaz0iR3N0Q29udHJvbFNvdXJjZS5odG1sIi8+CisgICAgICAgIDxzdWIgbmFtZT0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UiIGxpbms9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiLz4KKyAgICAgICAgPHN1YiBuYW1lPSJHc3RMRk9Db250cm9sU291cmNlIiBsaW5rPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwiLz4KKyAgICAgICAgPHN1YiBuYW1lPSJHc3RDb250cm9sbGVyR09iamVjdCIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCIvPgorICAgICAgPC9zdWI+CisgICAgICA8c3ViIG5hbWU9IkdTdHJlYW1lciBEYXRhIFByb3RvY29sIiBsaW5rPSJnc3RyZWFtZXItZGF0YXByb3RvY29sLmh0bWwiPgorICAgICAgICA8c3ViIG5hbWU9ImdzdGRhdGFwcm90b2NvbCIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwiLz4KKyAgICAgIDwvc3ViPgorICAgICAgPHN1YiBuYW1lPSJHU3RyZWFtZXIgTmV0d29yayBDbGFzc2VzIiBsaW5rPSJnc3RyZWFtZXItbmV0Lmh0bWwiPgorICAgICAgICA8c3ViIG5hbWU9IkdzdE5ldENsaWVudENsb2NrIiBsaW5rPSJHc3ROZXRDbGllbnRDbG9jay5odG1sIi8+CisgICAgICAgIDxzdWIgbmFtZT0iR3N0TmV0VGltZVBhY2tldCIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sIi8+CisgICAgICAgIDxzdWIgbmFtZT0iR3N0TmV0VGltZVByb3ZpZGVyIiBsaW5rPSJHc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCIvPgorICAgICAgPC9zdWI+CisgICAgICA8c3ViIG5hbWU9IkdTdHJlYW1lciBDaGVjayBVbml0IFRlc3RpbmciIGxpbms9ImdzdHJlYW1lci1jaGVjay5odG1sIj4KKyAgICAgICAgPHN1YiBuYW1lPSJHc3RDaGVjayIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCIvPgorICAgICAgICA8c3ViIG5hbWU9IkdzdEJ1ZmZlclN0cmF3IiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5odG1sIi8+CisgICAgICAgIDxzdWIgbmFtZT0iR3N0U3RyZWFtQ29uc2lzdGVuY3kiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5Lmh0bWwiLz4KKyAgICAgIDwvc3ViPgorICAgIDwvc3ViPgorICAgIDxzdWIgbmFtZT0iT2JqZWN0IEhpZXJhcmNoeSIgbGluaz0iZ3N0cmVhbWVyLWhpZXJhcmNoeS5odG1sIi8+CisgICAgPHN1YiBuYW1lPSJBUEkgSW5kZXgiIGxpbms9ImFwaS1pbmRleC1mdWxsLmh0bWwiLz4KKyAgICA8c3ViIG5hbWU9IkluZGV4IG9mIGRlcHJlY2F0ZWQgQVBJIiBsaW5rPSJhcGktaW5kZXgtZGVwcmVjYXRlZC5odG1sIi8+CisgICAgPHN1YiBuYW1lPSJBbm5vdGF0aW9uIEdsb3NzYXJ5IiBsaW5rPSJhbm5vdGF0aW9uLWdsb3NzYXJ5Lmh0bWwiLz4KKyAgPC9jaGFwdGVycz4KKyAgPGZ1bmN0aW9ucz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RCYXNlUGFyc2UiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEJhc2VQYXJzZUNsYXNzIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2VDbGFzcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9wYXJzZV9zZXRfZHVyYXRpb24gKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLXNldC1kdXJhdGlvbiIgc2luY2U9IjAuMTAuMzMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2VfcGFyc2Vfc2V0X2F2ZXJhZ2VfYml0cmF0ZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2Utc2V0LWF2ZXJhZ2UtYml0cmF0ZSIgc2luY2U9IjAuMTAuMzMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2VfcGFyc2Vfc2V0X21pbl9mcmFtZV9zaXplICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtbWluLWZyYW1lLXNpemUiIHNpbmNlPSIwLjEwLjMzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3BhcnNlX3NldF9wYXNzdGhyb3VnaCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2Utc2V0LXBhc3N0aHJvdWdoIiBzaW5jZT0iMC4xMC4zMyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9wYXJzZV9zZXRfc3luY2FibGUgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLXNldC1zeW5jYWJsZSIgc2luY2U9IjAuMTAuMzMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2VfcGFyc2Vfc2V0X2hhc190aW1pbmdfaW5mbyAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2Utc2V0LWhhcy10aW1pbmctaW5mbyIgc2luY2U9IjAuMTAuMzMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2VfcGFyc2Vfc2V0X2ZyYW1lX3JhdGUgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLXNldC1mcmFtZS1yYXRlIiBzaW5jZT0iMC4xMC4zMyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9wYXJzZV9zZXRfbGF0ZW5jeSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2Utc2V0LWxhdGVuY3kiIHNpbmNlPSIwLjEwLjM0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3BhcnNlX2NvbnZlcnRfZGVmYXVsdCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2UtY29udmVydC1kZWZhdWx0IiBzaW5jZT0iMC4xMC4zMyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9wYXJzZV9hZGRfaW5kZXhfZW50cnkgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLWFkZC1pbmRleC1lbnRyeSIgc2luY2U9IjAuMTAuMzMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9IkdzdEJhc2VQYXJzZUZyYW1lIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2VGcmFtZSIgc2luY2U9IjAuMTAuMzMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdEJhc2VQYXJzZUZyYW1lRmxhZ3MiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUZyYW1lRmxhZ3MiIHNpbmNlPSIwLjEwLjMzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3BhcnNlX2ZyYW1lX25ldyAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2UtZnJhbWUtbmV3IiBzaW5jZT0iMC4xMC4zMyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9wYXJzZV9mcmFtZV9pbml0ICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1mcmFtZS1pbml0IiBzaW5jZT0iMC4xMC4zMyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9wYXJzZV9mcmFtZV9mcmVlICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1mcmFtZS1mcmVlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3BhcnNlX3B1c2hfZnJhbWUgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLXB1c2gtZnJhbWUiIHNpbmNlPSIwLjEwLjMzIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CQVNFX1BBUlNFX0RSQUlOSU5HKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dTVC1CQVNFLVBBUlNFLURSQUlOSU5HOkNBUFMiIHNpbmNlPSIwLjEwLjMzIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CQVNFX1BBUlNFX0ZMQUdfRFJBSU5JTkciIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dTVC1CQVNFLVBBUlNFLUZMQUctRFJBSU5JTkc6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQkFTRV9QQVJTRV9GTEFHX0xPU1RfU1lOQyIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR1NULUJBU0UtUEFSU0UtRkxBRy1MT1NULVNZTkM6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQkFTRV9QQVJTRV9GTE9XX0RST1BQRUQiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dTVC1CQVNFLVBBUlNFLUZMT1ctRFJPUFBFRDpDQVBTIiBzaW5jZT0iMC4xMC4zMyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQkFTRV9QQVJTRV9GTE9XX1FVRVVFRCIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR1NULUJBU0UtUEFSU0UtRkxPVy1RVUVVRUQ6Q0FQUyIgc2luY2U9IjAuMTAuMzMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JBU0VfUEFSU0VfTE9TVF9TWU5DKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dTVC1CQVNFLVBBUlNFLUxPU1QtU1lOQzpDQVBTIiBzaW5jZT0iMC4xMC4zMyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQkFTRV9QQVJTRV9TSU5LX1BBRCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHU1QtQkFTRS1QQVJTRS1TSU5LLVBBRDpDQVBTIiBzaW5jZT0iMC4xMC4zMyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQkFTRV9QQVJTRV9TUkNfUEFEKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dTVC1CQVNFLVBBUlNFLVNSQy1QQUQ6Q0FQUyIgc2luY2U9IjAuMTAuMzMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSIiIG5hbWU9IkNvbnRyb2xsZWQgc2h1dGRvd24gb2YgbGl2ZSBzb3VyY2VzIGluIGFwcGxpY2F0aW9ucyIgbGluaz0iR3N0QmFzZVNyYy5odG1sI2lkNTIzNjg2Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0QmFzZVNyYyIgbGluaz0iR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmMtc3RydWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0QmFzZVNyY0NsYXNzIiBsaW5rPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyY0NsYXNzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RCYXNlU3JjRmxhZ3MiIGxpbms9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjRmxhZ3MiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2Vfc3JjX3dhaXRfcGxheWluZyAoKSIgbGluaz0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy13YWl0LXBsYXlpbmciIHNpbmNlPSIwLjEwLjEyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3NyY19pc19saXZlICgpIiBsaW5rPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLWlzLWxpdmUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2Vfc3JjX3NldF9saXZlICgpIiBsaW5rPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLXNldC1saXZlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3NyY19zZXRfZm9ybWF0ICgpIiBsaW5rPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLXNldC1mb3JtYXQiIHNpbmNlPSIwLjEwLjEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2Vfc3JjX3F1ZXJ5X2xhdGVuY3kgKCkiIGxpbms9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtcXVlcnktbGF0ZW5jeSIgc2luY2U9IjAuMTAuMTMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2Vfc3JjX2dldF9ibG9ja3NpemUgKCkiIGxpbms9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtZ2V0LWJsb2Nrc2l6ZSIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2Vfc3JjX3NldF9ibG9ja3NpemUgKCkiIGxpbms9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtc2V0LWJsb2Nrc2l6ZSIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2Vfc3JjX2dldF9kb190aW1lc3RhbXAgKCkiIGxpbms9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtZ2V0LWRvLXRpbWVzdGFtcCIgc2luY2U9IjAuMTAuMTUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2Vfc3JjX3NldF9kb190aW1lc3RhbXAgKCkiIGxpbms9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtc2V0LWRvLXRpbWVzdGFtcCIgc2luY2U9IjAuMTAuMTUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2Vfc3JjX3NldF9keW5hbWljX3NpemUgKCkiIGxpbms9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtc2V0LWR5bmFtaWMtc2l6ZSIgc2luY2U9IjAuMTAuMzUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2Vfc3JjX25ld19zZWFtbGVzc19zZWdtZW50ICgpIiBsaW5rPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLW5ldy1zZWFtbGVzcy1zZWdtZW50IiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9zcmNfc2V0X2NhcHMgKCkiIGxpbms9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtc2V0LWNhcHMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JBU0VfU1JDX1BBRCgpIiBsaW5rPSJHc3RCYXNlU3JjLmh0bWwjR1NULUJBU0UtU1JDLVBBRDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtibG9ja3NpemUmcXVvdDsgcHJvcGVydHkiIGxpbms9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjLS1ibG9ja3NpemUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O2RvLXRpbWVzdGFtcCZxdW90OyBwcm9wZXJ0eSIgbGluaz0iR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmMtLWRvLXRpbWVzdGFtcCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7bnVtLWJ1ZmZlcnMmcXVvdDsgcHJvcGVydHkiIGxpbms9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjLS1udW0tYnVmZmVycyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7dHlwZWZpbmQmcXVvdDsgcHJvcGVydHkiIGxpbms9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjLS10eXBlZmluZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEJhc2VTaW5rIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLXN0cnVjdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEJhc2VTaW5rQ2xhc3MiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmtDbGFzcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9zaW5rX3F1ZXJ5X2xhdGVuY3kgKCkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1xdWVyeS1sYXRlbmN5IiBzaW5jZT0iMC4xMC4xMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9zaW5rX2dldF9sYXRlbmN5ICgpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstZ2V0LWxhdGVuY3kiIHNpbmNlPSIwLjEwLjEyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3NpbmtfZG9fcHJlcm9sbCAoKSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWRvLXByZXJvbGwiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3Npbmtfd2FpdF9wcmVyb2xsICgpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstd2FpdC1wcmVyb2xsIiBzaW5jZT0iMC4xMC4xMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9zaW5rX3dhaXRfY2xvY2sgKCkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay13YWl0LWNsb2NrIiBzaW5jZT0iMC4xMC4yMCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9zaW5rX3dhaXRfZW9zICgpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstd2FpdC1lb3MiIHNpbmNlPSIwLjEwLjE1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3Npbmtfc2V0X3N5bmMgKCkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1zZXQtc3luYyIgc2luY2U9IjAuMTAuNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9zaW5rX2dldF9zeW5jICgpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstZ2V0LXN5bmMiIHNpbmNlPSIwLjEwLjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2Vfc2lua19zZXRfbWF4X2xhdGVuZXNzICgpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstc2V0LW1heC1sYXRlbmVzcyIgc2luY2U9IjAuMTAuNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9zaW5rX2dldF9tYXhfbGF0ZW5lc3MgKCkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1nZXQtbWF4LWxhdGVuZXNzIiBzaW5jZT0iMC4xMC40Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3Npbmtfc2V0X3Fvc19lbmFibGVkICgpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstc2V0LXFvcy1lbmFibGVkIiBzaW5jZT0iMC4xMC41Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3NpbmtfaXNfcW9zX2VuYWJsZWQgKCkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1pcy1xb3MtZW5hYmxlZCIgc2luY2U9IjAuMTAuNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9zaW5rX3NldF9hc3luY19lbmFibGVkICgpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstc2V0LWFzeW5jLWVuYWJsZWQiIHNpbmNlPSIwLjEwLjE1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3NpbmtfaXNfYXN5bmNfZW5hYmxlZCAoKSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWlzLWFzeW5jLWVuYWJsZWQiIHNpbmNlPSIwLjEwLjE1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3Npbmtfc2V0X3RzX29mZnNldCAoKSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXNldC10cy1vZmZzZXQiIHNpbmNlPSIwLjEwLjE1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3NpbmtfZ2V0X3RzX29mZnNldCAoKSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWdldC10cy1vZmZzZXQiIHNpbmNlPSIwLjEwLjE1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3Npbmtfc2V0X3JlbmRlcl9kZWxheSAoKSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXNldC1yZW5kZXItZGVsYXkiIHNpbmNlPSIwLjEwLjIxIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3NpbmtfZ2V0X3JlbmRlcl9kZWxheSAoKSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWdldC1yZW5kZXItZGVsYXkiIHNpbmNlPSIwLjEwLjIxIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3Npbmtfc2V0X2xhc3RfYnVmZmVyX2VuYWJsZWQgKCkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1zZXQtbGFzdC1idWZmZXItZW5hYmxlZCIgc2luY2U9IjAuMTAuMzAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2Vfc2lua19pc19sYXN0X2J1ZmZlcl9lbmFibGVkICgpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstaXMtbGFzdC1idWZmZXItZW5hYmxlZCIgc2luY2U9IjAuMTAuMzAiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2Vfc2lua19nZXRfbGFzdF9idWZmZXIgKCkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1nZXQtbGFzdC1idWZmZXIiIHNpbmNlPSIwLjEwLjE1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3Npbmtfc2V0X2Jsb2Nrc2l6ZSAoKSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXNldC1ibG9ja3NpemUiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3NpbmtfZ2V0X2Jsb2Nrc2l6ZSAoKSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWdldC1ibG9ja3NpemUiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3NpbmtfZ2V0X3Rocm90dGxlX3RpbWUgKCkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1nZXQtdGhyb3R0bGUtdGltZSIgc2luY2U9IjAuMTAuMzMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2Vfc2lua19zZXRfdGhyb3R0bGVfdGltZSAoKSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXNldC10aHJvdHRsZS10aW1lIiBzaW5jZT0iMC4xMC4zMyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQkFTRV9TSU5LX1BBRCgpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI0dTVC1CQVNFLVNJTkstUEFEOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JBU0VfU0lOS19HRVRfUFJFUk9MTF9DT05EKCkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjR1NULUJBU0UtU0lOSy1HRVQtUFJFUk9MTC1DT05EOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JBU0VfU0lOS19HRVRfUFJFUk9MTF9MT0NLKCkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjR1NULUJBU0UtU0lOSy1HRVQtUFJFUk9MTC1MT0NLOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JBU0VfU0lOS19QUkVST0xMX0JST0FEQ0FTVCgpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI0dTVC1CQVNFLVNJTkstUFJFUk9MTC1CUk9BRENBU1Q6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQkFTRV9TSU5LX1BSRVJPTExfTE9DSygpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI0dTVC1CQVNFLVNJTkstUFJFUk9MTC1MT0NLOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JBU0VfU0lOS19QUkVST0xMX1NJR05BTCgpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI0dTVC1CQVNFLVNJTkstUFJFUk9MTC1TSUdOQUw6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQkFTRV9TSU5LX1BSRVJPTExfVElNRURfV0FJVCgpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI0dTVC1CQVNFLVNJTkstUFJFUk9MTC1USU1FRC1XQUlUOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JBU0VfU0lOS19QUkVST0xMX1RSWUxPQ0soKSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNHU1QtQkFTRS1TSU5LLVBSRVJPTEwtVFJZTE9DSzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CQVNFX1NJTktfUFJFUk9MTF9VTkxPQ0soKSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNHU1QtQkFTRS1TSU5LLVBSRVJPTEwtVU5MT0NLOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JBU0VfU0lOS19QUkVST0xMX1dBSVQoKSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNHU1QtQkFTRS1TSU5LLVBSRVJPTEwtV0FJVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDthc3luYyZxdW90OyBwcm9wZXJ0eSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay0tYXN5bmMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O2Jsb2Nrc2l6ZSZxdW90OyBwcm9wZXJ0eSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay0tYmxvY2tzaXplIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtlbmFibGUtbGFzdC1idWZmZXImcXVvdDsgcHJvcGVydHkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstLWVuYWJsZS1sYXN0LWJ1ZmZlciIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7bGFzdC1idWZmZXImcXVvdDsgcHJvcGVydHkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstLWxhc3QtYnVmZmVyIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDttYXgtbGF0ZW5lc3MmcXVvdDsgcHJvcGVydHkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstLW1heC1sYXRlbmVzcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7cW9zJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1xb3MiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O3JlbmRlci1kZWxheSZxdW90OyBwcm9wZXJ0eSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay0tcmVuZGVyLWRlbGF5Ii8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtzeW5jJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1zeW5jIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDt0aHJvdHRsZS10aW1lJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS10aHJvdHRsZS10aW1lIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDt0cy1vZmZzZXQmcXVvdDsgcHJvcGVydHkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstLXRzLW9mZnNldCIvPgorICAgIDxrZXl3b3JkIHR5cGU9IiIgbmFtZT0iVXNlIENhc2VzIiBsaW5rPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjaWQ1Mjk5ODQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSIiIG5hbWU9IlN1Yi1jbGFzcyBzZXR0YWJsZSBmbGFncyBvbiBHc3RCYXNlVHJhbnNmb3JtIiBsaW5rPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjaWQ0OTQ1NDgiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RCYXNlVHJhbnNmb3JtIiBsaW5rPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybS1zdHJ1Y3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MiIGxpbms9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtQ2xhc3MiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Bhc3N0aHJvdWdoICgpIiBsaW5rPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjZ3N0LWJhc2UtdHJhbnNmb3JtLWlzLXBhc3N0aHJvdWdoIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcGFzc3Rocm91Z2ggKCkiIGxpbms9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0tc2V0LXBhc3N0aHJvdWdoIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3RyYW5zZm9ybV9pc19pbl9wbGFjZSAoKSIgbGluaz0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1pcy1pbi1wbGFjZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2luX3BsYWNlICgpIiBsaW5rPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjZ3N0LWJhc2UtdHJhbnNmb3JtLXNldC1pbi1wbGFjZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV90cmFuc2Zvcm1faXNfcW9zX2VuYWJsZWQgKCkiIGxpbms9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0taXMtcW9zLWVuYWJsZWQiIHNpbmNlPSIwLjEwLjUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9xb3NfZW5hYmxlZCAoKSIgbGluaz0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1zZXQtcW9zLWVuYWJsZWQiIHNpbmNlPSIwLjEwLjUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2VfdHJhbnNmb3JtX3VwZGF0ZV9xb3MgKCkiIGxpbms9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0tdXBkYXRlLXFvcyIgc2luY2U9IjAuMTAuNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2dhcF9hd2FyZSAoKSIgbGluaz0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1zZXQtZ2FwLWF3YXJlIiBzaW5jZT0iMC4xMC4xNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV90cmFuc2Zvcm1fc3VnZ2VzdCAoKSIgbGluaz0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1zdWdnZXN0IiBzaW5jZT0iMC4xMC4yMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV90cmFuc2Zvcm1fcmVjb25maWd1cmUgKCkiIGxpbms9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0tcmVjb25maWd1cmUiIHNpbmNlPSIwLjEwLjIxIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CQVNFX1RSQU5TRk9STV9TSU5LX05BTUUiIGxpbms9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHU1QtQkFTRS1UUkFOU0ZPUk0tU0lOSy1OQU1FOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JBU0VfVFJBTlNGT1JNX1NSQ19OQU1FIiBsaW5rPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR1NULUJBU0UtVFJBTlNGT1JNLVNSQy1OQU1FOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JBU0VfVFJBTlNGT1JNX1NJTktfUEFEKCkiIGxpbms9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHU1QtQkFTRS1UUkFOU0ZPUk0tU0lOSy1QQUQ6Q0FQUyIgc2luY2U9IjAuMTAuNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQkFTRV9UUkFOU0ZPUk1fU1JDX1BBRCgpIiBsaW5rPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR1NULUJBU0UtVFJBTlNGT1JNLVNSQy1QQUQ6Q0FQUyIgc2luY2U9IjAuMTAuNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQkFTRV9UUkFOU0ZPUk1fRkxPV19EUk9QUEVEIiBsaW5rPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR1NULUJBU0UtVFJBTlNGT1JNLUZMT1ctRFJPUFBFRDpDQVBTIiBzaW5jZT0iMC4xMC4xMyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQkFTRV9UUkFOU0ZPUk1fTE9DSygpIiBsaW5rPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR1NULUJBU0UtVFJBTlNGT1JNLUxPQ0s6Q0FQUyIgc2luY2U9IjAuMTAuMTMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JBU0VfVFJBTlNGT1JNX1VOTE9DSygpIiBsaW5rPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR1NULUJBU0UtVFJBTlNGT1JNLVVOTE9DSzpDQVBTIiBzaW5jZT0iMC4xMC4xMyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7cW9zJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybS0tcW9zIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UHVzaFNyYyIgbGluaz0iR3N0UHVzaFNyYy5odG1sI0dzdFB1c2hTcmMtc3RydWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0QWRhcHRlciIgbGluaz0iR3N0QWRhcHRlci5odG1sI0dzdEFkYXB0ZXItc3RydWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9hZGFwdGVyX25ldyAoKSIgbGluaz0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLW5ldyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYWRhcHRlcl9jbGVhciAoKSIgbGluaz0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLWNsZWFyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9hZGFwdGVyX3B1c2ggKCkiIGxpbms9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1wdXNoIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9hZGFwdGVyX21hcCAoKSIgbGluaz0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLW1hcCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYWRhcHRlcl91bm1hcCAoKSIgbGluaz0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXVubWFwIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9hZGFwdGVyX2NvcHkgKCkiIGxpbms9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1jb3B5IiBzaW5jZT0iMC4xMC4xMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYWRhcHRlcl9mbHVzaCAoKSIgbGluaz0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLWZsdXNoIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoKSIgbGluaz0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLWF2YWlsYWJsZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYWRhcHRlcl9hdmFpbGFibGVfZmFzdCAoKSIgbGluaz0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLWF2YWlsYWJsZS1mYXN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9hZGFwdGVyX3Rha2UgKCkiIGxpbms9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci10YWtlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyICgpIiBsaW5rPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItdGFrZS1idWZmZXIiIHNpbmNlPSIwLjEwLjYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2FkYXB0ZXJfdGFrZV9saXN0ICgpIiBsaW5rPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItdGFrZS1saXN0IiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYWRhcHRlcl9wcmV2X3RpbWVzdGFtcCAoKSIgbGluaz0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXByZXYtdGltZXN0YW1wIiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKCkiIGxpbms9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1tYXNrZWQtc2Nhbi11aW50MzIiIHNpbmNlPSIwLjEwLjI0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMl9wZWVrICgpIiBsaW5rPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItbWFza2VkLXNjYW4tdWludDMyLXBlZWsiIHNpbmNlPSIwLjEwLjMwIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJHc3RCaXRSZWFkZXIiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQklUX1JFQURFUl9JTklUKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dTVC1CSVQtUkVBREVSLUlOSVQ6Q0FQUyIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2JpdF9yZWFkZXJfbmV3ICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1uZXciIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iaXRfcmVhZGVyX2ZyZWUgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWZyZWUiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iaXRfcmVhZGVyX2luaXQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWluaXQiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iaXRfcmVhZGVyX2dldF9wb3MgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWdldC1wb3MiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iaXRfcmVhZGVyX2dldF9yZW1haW5pbmcgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWdldC1yZW1haW5pbmciIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iaXRfcmVhZGVyX3NldF9wb3MgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLXNldC1wb3MiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iaXRfcmVhZGVyX2dldF9zaXplICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtc2l6ZSIgc2luY2U9IjAuMTAuMjYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2JpdF9yZWFkZXJfc2tpcCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItc2tpcCIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2JpdF9yZWFkZXJfc2tpcF90b19ieXRlICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1za2lwLXRvLWJ5dGUiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQxNiAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDE2IiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MzIgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQzMiIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDY0ICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50NjQiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4ICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50OCIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQxNiAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQxNiIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQzMiAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQzMiIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ2NCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQ2NCIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ4ICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDgiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iaXRfcmVhZGVyX3NraXBfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1za2lwLXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2JpdF9yZWFkZXJfc2tpcF90b19ieXRlX3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItc2tpcC10by1ieXRlLXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDE2X3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDE2LXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDMyX3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDMyLXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDY0X3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDY0LXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDhfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50OC11bmNoZWNrZWQiIHNpbmNlPSIwLjEwLjMxIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MTZfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDE2LXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQzMl91bmNoZWNrZWQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLXBlZWstYml0cy11aW50MzItdW5jaGVja2VkIiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDY0X3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQ2NC11bmNoZWNrZWQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ4X3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQ4LXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9IkdzdEJ5dGVSZWFkZXIiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CWVRFX1JFQURFUl9JTklUKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHU1QtQllURS1SRUFERVItSU5JVDpDQVBTIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfbmV3ICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLW5ldyIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2ZyZWUgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZnJlZSIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2luaXQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItaW5pdCIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9wb3MgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXBvcyIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXJlbWFpbmluZyIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3NldF9wb3MgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItc2V0LXBvcyIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9zaXplICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1zaXplIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfc2tpcCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1za2lwIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDggKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDgiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfYmUgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDE2LWJlIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2xlICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQxNi1sZSIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9iZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MjQtYmUiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfbGUgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDI0LWxlIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2JlICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQzMi1iZSIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9sZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MzItbGUiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfYmUgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDY0LWJlIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2xlICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQ2NC1sZSIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDgiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MTYtYmUiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2xlICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MTYtbGUiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2JlICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MjQtYmUiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2xlICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MjQtbGUiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MzItYmUiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MzItbGUiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2JlICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50NjQtYmUiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2xlICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50NjQtbGUiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDggKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQ4IiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQxNl9iZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDE2LWJlIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQxNl9sZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDE2LWxlIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9iZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDI0LWJlIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9sZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDI0LWxlIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9iZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDMyLWJlIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9sZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDMyLWxlIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9iZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDY0LWJlIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9sZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDY0LWxlIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50OCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQ4IiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfYmUgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MTYtYmUiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQxNl9sZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQxNi1sZSIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2JlICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDI0LWJlIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfbGUgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MjQtbGUiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9iZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQzMi1iZSIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2xlICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDMyLWxlIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfYmUgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50NjQtYmUiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9sZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQ2NC1sZSIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDMyX2xlICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1mbG9hdDMyLWxlIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0MzJfYmUgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0MzItYmUiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9sZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQ2NC1sZSIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDY0X2JlICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1mbG9hdDY0LWJlIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2xlICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZmxvYXQzMi1sZSIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQzMl9iZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0MzItYmUiIHNpbmNlPSIwLjEwLjIyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfbGUgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDY0LWxlIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2JlICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZmxvYXQ2NC1iZSIgc2luY2U9IjAuMTAuMjIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1kYXRhIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZHVwX2RhdGEgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZHVwLWRhdGEiIHNpbmNlPSIwLjEwLjI0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2RhdGEgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1kYXRhIiBzaW5jZT0iMC4xMC4yMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLW1hc2tlZC1zY2FuLXVpbnQzMiIgc2luY2U9IjAuMTAuMjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9zdHJpbmcoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtc3RyaW5nIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfc3RyaW5nX3V0ZjggKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXN0cmluZy11dGY4IiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19zdHJpbmcoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXN0cmluZyIgc2luY2U9IjAuMTAuMjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3RyaW5nX3V0ZjggKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1zdHJpbmctdXRmOCIgc2luY2U9IjAuMTAuMjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmcoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1kdXAtc3RyaW5nIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjggKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZHVwLXN0cmluZy11dGY4IiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGYxNiAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1kdXAtc3RyaW5nLXV0ZjE2IiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGYzMiAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1kdXAtc3RyaW5nLXV0ZjMyIiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmcoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1za2lwLXN0cmluZyIgc2luY2U9IjAuMTAuMjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjggKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItc2tpcC1zdHJpbmctdXRmOCIgc2luY2U9IjAuMTAuMjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjE2ICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXNraXAtc3RyaW5nLXV0ZjE2IiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmMzIgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItc2tpcC1zdHJpbmctdXRmMzIiIHNpbmNlPSIwLjEwLjI0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9za2lwX3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1za2lwLXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMjUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ4X3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50OC11bmNoZWNrZWQiIHNpbmNlPSIwLjEwLjI1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfYmVfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQxNi1iZS11bmNoZWNrZWQiIHNpbmNlPSIwLjEwLjI1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfbGVfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQxNi1sZS11bmNoZWNrZWQiIHNpbmNlPSIwLjEwLjI1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfYmVfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQyNC1iZS11bmNoZWNrZWQiIHNpbmNlPSIwLjEwLjI1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfbGVfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQyNC1sZS11bmNoZWNrZWQiIHNpbmNlPSIwLjEwLjI1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfYmVfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQzMi1iZS11bmNoZWNrZWQiIHNpbmNlPSIwLjEwLjI1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfbGVfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQzMi1sZS11bmNoZWNrZWQiIHNpbmNlPSIwLjEwLjI1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfYmVfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQ2NC1iZS11bmNoZWNrZWQiIHNpbmNlPSIwLjEwLjI1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfbGVfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQ2NC1sZS11bmNoZWNrZWQiIHNpbmNlPSIwLjEwLjI1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDhfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50OC11bmNoZWNrZWQiIHNpbmNlPSIwLjEwLjI1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlX3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDE2LWJlLXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMjUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfbGVfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MTYtbGUtdW5jaGVja2VkIiBzaW5jZT0iMC4xMC4yNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9iZV91bmNoZWNrZWQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQyNC1iZS11bmNoZWNrZWQiIHNpbmNlPSIwLjEwLjI1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2xlX3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDI0LWxlLXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMjUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmVfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MzItYmUtdW5jaGVja2VkIiBzaW5jZT0iMC4xMC4yNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9sZV91bmNoZWNrZWQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQzMi1sZS11bmNoZWNrZWQiIHNpbmNlPSIwLjEwLjI1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2JlX3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDY0LWJlLXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMjUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfbGVfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50NjQtbGUtdW5jaGVja2VkIiBzaW5jZT0iMC4xMC4yNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ4X3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDgtdW5jaGVja2VkIiBzaW5jZT0iMC4xMC4yNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQxNl9iZV91bmNoZWNrZWQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQxNi1iZS11bmNoZWNrZWQiIHNpbmNlPSIwLjEwLjI1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2xlX3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDE2LWxlLXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMjUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfYmVfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MjQtYmUtdW5jaGVja2VkIiBzaW5jZT0iMC4xMC4yNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9sZV91bmNoZWNrZWQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQyNC1sZS11bmNoZWNrZWQiIHNpbmNlPSIwLjEwLjI1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2JlX3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDMyLWJlLXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMjUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfbGVfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MzItbGUtdW5jaGVja2VkIiBzaW5jZT0iMC4xMC4yNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9iZV91bmNoZWNrZWQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQ2NC1iZS11bmNoZWNrZWQiIHNpbmNlPSIwLjEwLjI1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2xlX3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDY0LWxlLXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMjUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDhfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDgtdW5jaGVja2VkIiBzaW5jZT0iMC4xMC4yNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfYmVfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDE2LWJlLXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMjUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2xlX3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQxNi1sZS11bmNoZWNrZWQiIHNpbmNlPSIwLjEwLjI1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9iZV91bmNoZWNrZWQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MjQtYmUtdW5jaGVja2VkIiBzaW5jZT0iMC4xMC4yNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfbGVfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDI0LWxlLXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMjUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2JlX3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQzMi1iZS11bmNoZWNrZWQiIHNpbmNlPSIwLjEwLjI1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9sZV91bmNoZWNrZWQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MzItbGUtdW5jaGVja2VkIiBzaW5jZT0iMC4xMC4yNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfYmVfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDY0LWJlLXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMjUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2xlX3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQ2NC1sZS11bmNoZWNrZWQiIHNpbmNlPSIwLjEwLjI1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9sZV91bmNoZWNrZWQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0MzItbGUtdW5jaGVja2VkIiBzaW5jZT0iMC4xMC4yNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0MzJfYmVfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1mbG9hdDMyLWJlLXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMjUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDY0X2xlX3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQ2NC1sZS11bmNoZWNrZWQiIHNpbmNlPSIwLjEwLjI1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9iZV91bmNoZWNrZWQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0NjQtYmUtdW5jaGVja2VkIiBzaW5jZT0iMC4xMC4yNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2xlX3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0MzItbGUtdW5jaGVja2VkIiBzaW5jZT0iMC4xMC4yNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2JlX3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0MzItYmUtdW5jaGVja2VkIiBzaW5jZT0iMC4xMC4yNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2xlX3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0NjQtbGUtdW5jaGVja2VkIiBzaW5jZT0iMC4xMC4yNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2JlX3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0NjQtYmUtdW5jaGVja2VkIiBzaW5jZT0iMC4xMC4yNSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZHVwX2RhdGFfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWR1cC1kYXRhLXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMjUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhX3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZGF0YS11bmNoZWNrZWQiIHNpbmNlPSIwLjEwLjI1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2RhdGFfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZGF0YS11bmNoZWNrZWQiIHNpbmNlPSIwLjEwLjI1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJHc3RCeXRlV3JpdGVyIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfbmV3ICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLW5ldyIgc2luY2U9IjAuMTAuMjYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX25ld193aXRoX2RhdGEgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItbmV3LXdpdGgtZGF0YSIgc2luY2U9IjAuMTAuMjYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX25ld193aXRoX3NpemUgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItbmV3LXdpdGgtc2l6ZSIgc2luY2U9IjAuMTAuMjYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX2luaXQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItaW5pdCIgc2luY2U9IjAuMTAuMjYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9kYXRhICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLWluaXQtd2l0aC1kYXRhIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfaW5pdF93aXRoX3NpemUgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItaW5pdC13aXRoLXNpemUiIHNpbmNlPSIwLjEwLjI2Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9mcmVlICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLWZyZWUiIHNpbmNlPSIwLjEwLjI2Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9mcmVlX2FuZF9nZXRfYnVmZmVyICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLWZyZWUtYW5kLWdldC1idWZmZXIiIHNpbmNlPSIwLjEwLjI2Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9mcmVlX2FuZF9nZXRfZGF0YSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1mcmVlLWFuZC1nZXQtZGF0YSIgc2luY2U9IjAuMTAuMjYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3Jlc2V0ICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXJlc2V0IiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9kYXRhICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXJlc2V0LWFuZC1nZXQtZGF0YSIgc2luY2U9IjAuMTAuMjYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3Jlc2V0X2FuZF9nZXRfYnVmZmVyICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXJlc2V0LWFuZC1nZXQtYnVmZmVyIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfZ2V0X3BvcyAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1nZXQtcG9zIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfc2V0X3BvcyAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1zZXQtcG9zIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfZ2V0X3JlbWFpbmluZyAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1nZXQtcmVtYWluaW5nIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfZ2V0X3NpemUgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItZ2V0LXNpemUiIHNpbmNlPSIwLjEwLjI2Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9lbnN1cmVfZnJlZV9zcGFjZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1lbnN1cmUtZnJlZS1zcGFjZSIgc2luY2U9IjAuMTAuMjYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ4ICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQ4IiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2JlICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQxNi1iZSIgc2luY2U9IjAuMTAuMjYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9sZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MTYtbGUiIHNpbmNlPSIwLjEwLjI2Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfYmUgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDI0LWJlIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2xlICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQyNC1sZSIgc2luY2U9IjAuMTAuMjYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9iZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MzItYmUiIHNpbmNlPSIwLjEwLjI2Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfbGUgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDMyLWxlIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2JlICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQ2NC1iZSIgc2luY2U9IjAuMTAuMjYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9sZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50NjQtbGUiIHNpbmNlPSIwLjEwLjI2Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDggKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQ4IiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9iZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDE2LWJlIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9sZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDE2LWxlIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9iZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDI0LWJlIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9sZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDI0LWxlIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9iZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDMyLWJlIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDMyLWxlIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9iZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDY0LWJlIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9sZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDY0LWxlIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfYmUgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0MzItYmUiIHNpbmNlPSIwLjEwLjI3Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9sZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQzMi1sZSIgc2luY2U9IjAuMTAuMjciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDY0X2JlICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1mbG9hdDY0LWJlIiBzaW5jZT0iMC4xMC4yNyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfbGUgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0NjQtbGUiIHNpbmNlPSIwLjEwLjI3Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXN0cmluZyIgc2luY2U9IjAuMTAuMjYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmdfdXRmMTYgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXN0cmluZy11dGYxNiIgc2luY2U9IjAuMTAuMjYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmdfdXRmMzIgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXN0cmluZy11dGYzMiIgc2luY2U9IjAuMTAuMjYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmdfdXRmOCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtc3RyaW5nLXV0ZjgiIHNpbmNlPSIwLjEwLjI2Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfZGF0YSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtZGF0YSIgc2luY2U9IjAuMTAuMjYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX2ZpbGwgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItZmlsbCIgc2luY2U9IjAuMTAuMjciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ4X3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50OC11bmNoZWNrZWQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9iZV91bmNoZWNrZWQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDE2LWJlLXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9sZV91bmNoZWNrZWQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDE2LWxlLXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9iZV91bmNoZWNrZWQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDI0LWJlLXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9sZV91bmNoZWNrZWQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDI0LWxlLXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9iZV91bmNoZWNrZWQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDMyLWJlLXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9sZV91bmNoZWNrZWQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDMyLWxlLXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9iZV91bmNoZWNrZWQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDY0LWJlLXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9sZV91bmNoZWNrZWQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDY0LWxlLXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50OF91bmNoZWNrZWQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQ4LXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfYmVfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MTYtYmUtdW5jaGVja2VkIiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9sZV91bmNoZWNrZWQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQxNi1sZS11bmNoZWNrZWQiIHNpbmNlPSIwLjEwLjMxIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2JlX3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDI0LWJlLXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfbGVfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MjQtbGUtdW5jaGVja2VkIiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9iZV91bmNoZWNrZWQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQzMi1iZS11bmNoZWNrZWQiIHNpbmNlPSIwLjEwLjMxIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlX3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDMyLWxlLXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfYmVfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50NjQtYmUtdW5jaGVja2VkIiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9sZV91bmNoZWNrZWQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQ2NC1sZS11bmNoZWNrZWQiIHNpbmNlPSIwLjEwLjMxIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9iZV91bmNoZWNrZWQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0MzItYmUtdW5jaGVja2VkIiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfbGVfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1mbG9hdDMyLWxlLXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDY0X2JlX3VuY2hlY2tlZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQ2NC1iZS11bmNoZWNrZWQiIHNpbmNlPSIwLjEwLjMxIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9sZV91bmNoZWNrZWQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0NjQtbGUtdW5jaGVja2VkIiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGFfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1kYXRhLXVuY2hlY2tlZCIgc2luY2U9IjAuMTAuMzEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX2ZpbGxfdW5jaGVja2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLWZpbGwtdW5jaGVja2VkIiBzaW5jZT0iMC4xMC4zMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0Q29sbGVjdFBhZHMiIGxpbms9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdFBhZHMtc3RydWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdENvbGxlY3RQYWRzRnVuY3Rpb24gKCkiIGxpbms9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdFBhZHNGdW5jdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RDb2xsZWN0UGFkc0NsaXBGdW5jdGlvbiAoKSIgbGluaz0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0UGFkc0NsaXBGdW5jdGlvbiIgc2luY2U9IjAuMTAuMjYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5ICgpIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhRGVzdHJveU5vdGlmeSIgc2luY2U9IjAuMTAuMTIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbGxlY3RfcGFkc19uZXcgKCkiIGxpbms9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1uZXciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbGxlY3RfcGFkc19zZXRfZnVuY3Rpb24gKCkiIGxpbms9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1zZXQtZnVuY3Rpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbGxlY3RfcGFkc19zZXRfY2xpcF9mdW5jdGlvbiAoKSIgbGluaz0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXNldC1jbGlwLWZ1bmN0aW9uIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQgKCkiIGxpbms9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1hZGQtcGFkIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZF9mdWxsICgpIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtYWRkLXBhZC1mdWxsIiBzaW5jZT0iMC4xMC4xMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY29sbGVjdF9wYWRzX3JlbW92ZV9wYWQgKCkiIGxpbms9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1yZW1vdmUtcGFkIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jb2xsZWN0X3BhZHNfaXNfYWN0aXZlICgpIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtaXMtYWN0aXZlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jb2xsZWN0X3BhZHNfY29sbGVjdCAoKSIgbGluaz0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLWNvbGxlY3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbGxlY3RfcGFkc19jb2xsZWN0X3JhbmdlICgpIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtY29sbGVjdC1yYW5nZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY29sbGVjdF9wYWRzX3N0YXJ0ICgpIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtc3RhcnQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbGxlY3RfcGFkc19zdG9wICgpIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtc3RvcCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaGluZyAoKSIgbGluaz0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXNldC1mbHVzaGluZyIgc2luY2U9IjAuMTAuNy4iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbGxlY3RfcGFkc19wZWVrICgpIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtcGVlayIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY29sbGVjdF9wYWRzX3BvcCAoKSIgbGluaz0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXBvcCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY29sbGVjdF9wYWRzX2F2YWlsYWJsZSAoKSIgbGluaz0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLWF2YWlsYWJsZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY29sbGVjdF9wYWRzX3JlYWRfYnVmZmVyICgpIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtcmVhZC1idWZmZXIiIHNpbmNlPSIwLjEwLjE4Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jb2xsZWN0X3BhZHNfdGFrZV9idWZmZXIgKCkiIGxpbms9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy10YWtlLWJ1ZmZlciIgc2luY2U9IjAuMTAuMTgiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbGxlY3RfcGFkc19mbHVzaCAoKSIgbGluaz0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLWZsdXNoIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90eXBlX2ZpbmRfaGVscGVyICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI2dzdC10eXBlLWZpbmQtaGVscGVyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9idWZmZXIgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwjZ3N0LXR5cGUtZmluZC1oZWxwZXItZm9yLWJ1ZmZlciIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfZXh0ZW5zaW9uICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI2dzdC10eXBlLWZpbmQtaGVscGVyLWZvci1leHRlbnNpb24iIHNpbmNlPSIwLjEwLjIzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9kYXRhICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI2dzdC10eXBlLWZpbmQtaGVscGVyLWZvci1kYXRhIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbiAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCNHc3RUeXBlRmluZEhlbHBlckdldFJhbmdlRnVuY3Rpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3R5cGVfZmluZF9oZWxwZXJfZ2V0X3JhbmdlICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI2dzdC10eXBlLWZpbmQtaGVscGVyLWdldC1yYW5nZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdHlwZV9maW5kX2hlbHBlcl9nZXRfcmFuZ2VfZXh0ICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI2dzdC10eXBlLWZpbmQtaGVscGVyLWdldC1yYW5nZS1leHQiIHNpbmNlPSIwLjEwLjI2Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHNpbmNlPSIwLjEwLjExIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlU2l6ZSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlU2l6ZSIgc2luY2U9IjAuMTAuMTEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0RGF0YVF1ZXVlQ2hlY2tGdWxsRnVuY3Rpb24gKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZUNoZWNrRnVsbEZ1bmN0aW9uIiBzaW5jZT0iMC4xMC4xMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdERhdGFRdWV1ZUl0ZW0iIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZUl0ZW0iIHNpbmNlPSIwLjEwLjExIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdERhdGFRdWV1ZUVtcHR5Q2FsbGJhY2sgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZUVtcHR5Q2FsbGJhY2siLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0RGF0YVF1ZXVlRnVsbENhbGxiYWNrICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVGdWxsQ2FsbGJhY2siLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RhdGFfcXVldWVfbmV3ICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1uZXciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RhdGFfcXVldWVfbmV3X2Z1bGwgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLW5ldy1mdWxsIiBzaW5jZT0iMC4xMC4yNiIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0YV9xdWV1ZV9wdXNoICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1wdXNoIiBzaW5jZT0iMC4xMC4xMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0YV9xdWV1ZV9wb3AgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLXBvcCIgc2luY2U9IjAuMTAuMTEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RhdGFfcXVldWVfZmx1c2ggKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLWZsdXNoIiBzaW5jZT0iMC4xMC4xMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0YV9xdWV1ZV9zZXRfZmx1c2hpbmcgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLXNldC1mbHVzaGluZyIgc2luY2U9IjAuMTAuMTEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RhdGFfcXVldWVfZHJvcF9oZWFkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1kcm9wLWhlYWQiIHNpbmNlPSIwLjEwLjExIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kYXRhX3F1ZXVlX2lzX2Z1bGwgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLWlzLWZ1bGwiIHNpbmNlPSIwLjEwLjExIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kYXRhX3F1ZXVlX2lzX2VtcHR5ICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1pcy1lbXB0eSIgc2luY2U9IjAuMTAuMTEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RhdGFfcXVldWVfZ2V0X2xldmVsICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1nZXQtbGV2ZWwiIHNpbmNlPSIwLjEwLjExIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kYXRhX3F1ZXVlX2xpbWl0c19jaGFuZ2VkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1saW1pdHMtY2hhbmdlZCIgc2luY2U9IjAuMTAuMTEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RDb250cm9sbGVyIiBsaW5rPSJHc3RDb250cm9sbGVyLmh0bWwjR3N0Q29udHJvbGxlci1zdHJ1Y3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbnRyb2xsZXJfaW5pdCAoKSIgbGluaz0iR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLWluaXQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbnRyb2xsZXJfbmV3ICgpIiBsaW5rPSJHc3RDb250cm9sbGVyLmh0bWwjZ3N0LWNvbnRyb2xsZXItbmV3Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jb250cm9sbGVyX25ld19saXN0ICgpIiBsaW5rPSJHc3RDb250cm9sbGVyLmh0bWwjZ3N0LWNvbnRyb2xsZXItbmV3LWxpc3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbnRyb2xsZXJfbmV3X3ZhbGlzdCAoKSIgbGluaz0iR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLW5ldy12YWxpc3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbnRyb2xsZXJfcmVtb3ZlX3Byb3BlcnRpZXMgKCkiIGxpbms9IkdzdENvbnRyb2xsZXIuaHRtbCNnc3QtY29udHJvbGxlci1yZW1vdmUtcHJvcGVydGllcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY29udHJvbGxlcl9yZW1vdmVfcHJvcGVydGllc19saXN0ICgpIiBsaW5rPSJHc3RDb250cm9sbGVyLmh0bWwjZ3N0LWNvbnRyb2xsZXItcmVtb3ZlLXByb3BlcnRpZXMtbGlzdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY29udHJvbGxlcl9yZW1vdmVfcHJvcGVydGllc192YWxpc3QgKCkiIGxpbms9IkdzdENvbnRyb2xsZXIuaHRtbCNnc3QtY29udHJvbGxlci1yZW1vdmUtcHJvcGVydGllcy12YWxpc3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbnRyb2xsZXJfc2V0X2Rpc2FibGVkICgpIiBsaW5rPSJHc3RDb250cm9sbGVyLmh0bWwjZ3N0LWNvbnRyb2xsZXItc2V0LWRpc2FibGVkIiBzaW5jZT0iMC4xMC4xNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY29udHJvbGxlcl9zZXRfcHJvcGVydHlfZGlzYWJsZWQgKCkiIGxpbms9IkdzdENvbnRyb2xsZXIuaHRtbCNnc3QtY29udHJvbGxlci1zZXQtcHJvcGVydHktZGlzYWJsZWQiIHNpbmNlPSIwLjEwLjE0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jb250cm9sbGVyX3N1Z2dlc3RfbmV4dF9zeW5jICgpIiBsaW5rPSJHc3RDb250cm9sbGVyLmh0bWwjZ3N0LWNvbnRyb2xsZXItc3VnZ2VzdC1uZXh0LXN5bmMiIHNpbmNlPSIwLjEwLjEzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzICgpIiBsaW5rPSJHc3RDb250cm9sbGVyLmh0bWwjZ3N0LWNvbnRyb2xsZXItc3luYy12YWx1ZXMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbnRyb2xsZXJfZ2V0X2NvbnRyb2xfc291cmNlICgpIiBsaW5rPSJHc3RDb250cm9sbGVyLmh0bWwjZ3N0LWNvbnRyb2xsZXItZ2V0LWNvbnRyb2wtc291cmNlIiBzaW5jZT0iMC4xMC4xNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY29udHJvbGxlcl9zZXRfY29udHJvbF9zb3VyY2UgKCkiIGxpbms9IkdzdENvbnRyb2xsZXIuaHRtbCNnc3QtY29udHJvbGxlci1zZXQtY29udHJvbC1zb3VyY2UiIHNpbmNlPSIwLjEwLjE0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jb250cm9sbGVyX2dldCAoKSIgbGluaz0iR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLWdldCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY29udHJvbGxlcl9nZXRfdmFsdWVfYXJyYXlzICgpIiBsaW5rPSJHc3RDb250cm9sbGVyLmh0bWwjZ3N0LWNvbnRyb2xsZXItZ2V0LXZhbHVlLWFycmF5cyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY29udHJvbGxlcl9nZXRfdmFsdWVfYXJyYXkgKCkiIGxpbms9IkdzdENvbnRyb2xsZXIuaHRtbCNnc3QtY29udHJvbGxlci1nZXQtdmFsdWUtYXJyYXkiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O2NvbnRyb2wtcmF0ZSZxdW90OyBwcm9wZXJ0eSIgbGluaz0iR3N0Q29udHJvbGxlci5odG1sI0dzdENvbnRyb2xsZXItLWNvbnRyb2wtcmF0ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdENvbnRyb2xTb3VyY2UiIGxpbms9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sU291cmNlLXN0cnVjdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdENvbnRyb2xTb3VyY2VDbGFzcyIgbGluaz0iR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2VDbGFzcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RDb250cm9sU291cmNlQmluZCAoKSIgbGluaz0iR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2VCaW5kIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSAoKSIgbGluaz0iR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSAoKSIgbGluaz0iR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0VGltZWRWYWx1ZSIgbGluaz0iR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdFRpbWVkVmFsdWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RWYWx1ZUFycmF5IiBsaW5rPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0VmFsdWVBcnJheSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY29udHJvbF9zb3VyY2VfYmluZCAoKSIgbGluaz0iR3N0Q29udHJvbFNvdXJjZS5odG1sI2dzdC1jb250cm9sLXNvdXJjZS1iaW5kIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWUgKCkiIGxpbms9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNnc3QtY29udHJvbC1zb3VyY2UtZ2V0LXZhbHVlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWVfYXJyYXkgKCkiIGxpbms9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNnc3QtY29udHJvbC1zb3VyY2UtZ2V0LXZhbHVlLWFycmF5Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UiIGxpbms9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwjR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2Utc3RydWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RJbnRlcnBvbGF0ZU1vZGUiIGxpbms9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwjR3N0SW50ZXJwb2xhdGVNb2RlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX25ldyAoKSIgbGluaz0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtaW50ZXJwb2xhdGlvbi1jb250cm9sLXNvdXJjZS1uZXciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0ICgpIiBsaW5rPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sI2dzdC1pbnRlcnBvbGF0aW9uLWNvbnRyb2wtc291cmNlLXNldCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXRfZnJvbV9saXN0ICgpIiBsaW5rPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sI2dzdC1pbnRlcnBvbGF0aW9uLWNvbnRyb2wtc291cmNlLXNldC1mcm9tLWxpc3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0X2ludGVycG9sYXRpb25fbW9kZSAoKSIgbGluaz0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtaW50ZXJwb2xhdGlvbi1jb250cm9sLXNvdXJjZS1zZXQtaW50ZXJwb2xhdGlvbi1tb2RlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2dldF9hbGwgKCkiIGxpbms9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwjZ3N0LWludGVycG9sYXRpb24tY29udHJvbC1zb3VyY2UtZ2V0LWFsbCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV91bnNldCAoKSIgbGluaz0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtaW50ZXJwb2xhdGlvbi1jb250cm9sLXNvdXJjZS11bnNldCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV91bnNldF9hbGwgKCkiIGxpbms9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwjZ3N0LWludGVycG9sYXRpb24tY29udHJvbC1zb3VyY2UtdW5zZXQtYWxsIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2dldF9jb3VudCAoKSIgbGluaz0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtaW50ZXJwb2xhdGlvbi1jb250cm9sLXNvdXJjZS1nZXQtY291bnQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RMRk9Db250cm9sU291cmNlIiBsaW5rPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPQ29udHJvbFNvdXJjZS1zdHJ1Y3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdExGT1dhdmVmb3JtIiBsaW5rPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPV2F2ZWZvcm0iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2xmb19jb250cm9sX3NvdXJjZV9uZXcgKCkiIGxpbms9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNnc3QtbGZvLWNvbnRyb2wtc291cmNlLW5ldyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7YW1wbGl0dWRlJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPQ29udHJvbFNvdXJjZS0tYW1wbGl0dWRlIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtmcmVxdWVuY3kmcXVvdDsgcHJvcGVydHkiIGxpbms9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNHc3RMRk9Db250cm9sU291cmNlLS1mcmVxdWVuY3kiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O29mZnNldCZxdW90OyBwcm9wZXJ0eSIgbGluaz0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sI0dzdExGT0NvbnRyb2xTb3VyY2UtLW9mZnNldCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7dGltZXNoaWZ0JnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPQ29udHJvbFNvdXJjZS0tdGltZXNoaWZ0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDt3YXZlZm9ybSZxdW90OyBwcm9wZXJ0eSIgbGluaz0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sI0dzdExGT0NvbnRyb2xTb3VyY2UtLXdhdmVmb3JtIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9vYmplY3RfY29udHJvbF9wcm9wZXJ0aWVzICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDb250cm9sbGVyR09iamVjdC5odG1sI2dzdC1vYmplY3QtY29udHJvbC1wcm9wZXJ0aWVzIiBzaW5jZT0iMC45Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9vYmplY3RfdW5jb250cm9sX3Byb3BlcnRpZXMgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC11bmNvbnRyb2wtcHJvcGVydGllcyIgc2luY2U9IjAuOSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfb2JqZWN0X2dldF9jb250cm9sbGVyICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDb250cm9sbGVyR09iamVjdC5odG1sI2dzdC1vYmplY3QtZ2V0LWNvbnRyb2xsZXIiIHNpbmNlPSIwLjkiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X29iamVjdF9zZXRfY29udHJvbGxlciAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXNldC1jb250cm9sbGVyIiBzaW5jZT0iMC45Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9vYmplY3Rfc3VnZ2VzdF9uZXh0X3N5bmMgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1zdWdnZXN0LW5leHQtc3luYyIgc2luY2U9IjAuMTAuMTMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXN5bmMtdmFsdWVzIiBzaW5jZT0iMC45Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9vYmplY3RfZ2V0X2NvbnRyb2xfc291cmNlICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDb250cm9sbGVyR09iamVjdC5odG1sI2dzdC1vYmplY3QtZ2V0LWNvbnRyb2wtc291cmNlIiBzaW5jZT0iMC4xMC4xNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfb2JqZWN0X3NldF9jb250cm9sX3NvdXJjZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXNldC1jb250cm9sLXNvdXJjZSIgc2luY2U9IjAuMTAuMTQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X29iamVjdF9nZXRfdmFsdWVfYXJyYXlzICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDb250cm9sbGVyR09iamVjdC5odG1sI2dzdC1vYmplY3QtZ2V0LXZhbHVlLWFycmF5cyIgc2luY2U9IjAuOSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfb2JqZWN0X2dldF92YWx1ZV9hcnJheSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC12YWx1ZS1hcnJheSIgc2luY2U9IjAuOSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfb2JqZWN0X2dldF9jb250cm9sX3JhdGUgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1nZXQtY29udHJvbC1yYXRlIiBzaW5jZT0iMC4xMC4xMCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfb2JqZWN0X3NldF9jb250cm9sX3JhdGUgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1zZXQtY29udHJvbC1yYXRlIiBzaW5jZT0iMC4xMC4xMCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0RFBIZWFkZXJGbGFnIiBsaW5rPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNHc3REUEhlYWRlckZsYWciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdERQUGF5bG9hZFR5cGUiIGxpbms9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dzdERQUGF5bG9hZFR5cGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0RQX0hFQURFUl9MRU5HVEgiIGxpbms9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dTVC1EUC1IRUFERVItTEVOR1RIOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdERQVmVyc2lvbiIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR3N0RFBWZXJzaW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9EUF9WRVJTSU9OX01BSk9SIiBsaW5rPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNHU1QtRFAtVkVSU0lPTi1NQUpPUjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9EUF9WRVJTSU9OX01JTk9SIiBsaW5rPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNHU1QtRFAtVkVSU0lPTi1NSU5PUjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kcF9pbml0ICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNnc3QtZHAtaW5pdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3REUEhlYWRlckZyb21CdWZmZXJGdW5jdGlvbiAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR3N0RFBIZWFkZXJGcm9tQnVmZmVyRnVuY3Rpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0RFBQYWNrZXRGcm9tQ2Fwc0Z1bmN0aW9uICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNHc3REUFBhY2tldEZyb21DYXBzRnVuY3Rpb24iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0RFBQYWNrZXRGcm9tRXZlbnRGdW5jdGlvbiAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR3N0RFBQYWNrZXRGcm9tRXZlbnRGdW5jdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0iR3N0RFBQYWNrZXRpemVyIiBsaW5rPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNHc3REUFBhY2tldGl6ZXIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RwX3BhY2tldGl6ZXJfbmV3ICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNnc3QtZHAtcGFja2V0aXplci1uZXciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RwX3BhY2tldGl6ZXJfZnJlZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjZ3N0LWRwLXBhY2tldGl6ZXItZnJlZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZHBfY3JjICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNnc3QtZHAtY3JjIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kcF9oZWFkZXJfcGF5bG9hZF9sZW5ndGggKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI2dzdC1kcC1oZWFkZXItcGF5bG9hZC1sZW5ndGgiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RwX2hlYWRlcl9wYXlsb2FkX3R5cGUgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI2dzdC1kcC1oZWFkZXItcGF5bG9hZC10eXBlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kcF9idWZmZXJfZnJvbV9oZWFkZXIgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI2dzdC1kcC1idWZmZXItZnJvbS1oZWFkZXIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RwX2NhcHNfZnJvbV9wYWNrZXQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI2dzdC1kcC1jYXBzLWZyb20tcGFja2V0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kcF9ldmVudF9mcm9tX3BhY2tldCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjZ3N0LWRwLWV2ZW50LWZyb20tcGFja2V0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kcF92YWxpZGF0ZV9oZWFkZXIgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI2dzdC1kcC12YWxpZGF0ZS1oZWFkZXIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RwX3ZhbGlkYXRlX3BheWxvYWQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI2dzdC1kcC12YWxpZGF0ZS1wYXlsb2FkIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kcF92YWxpZGF0ZV9wYWNrZXQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI2dzdC1kcC12YWxpZGF0ZS1wYWNrZXQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3ROZXRDbGllbnRDbG9jayIgbGluaz0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCNHc3ROZXRDbGllbnRDbG9jay1zdHJ1Y3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X25ldF9jbGllbnRfY2xvY2tfbmV3ICgpIiBsaW5rPSJHc3ROZXRDbGllbnRDbG9jay5odG1sI2dzdC1uZXQtY2xpZW50LWNsb2NrLW5ldyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7YWRkcmVzcyZxdW90OyBwcm9wZXJ0eSIgbGluaz0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCNHc3ROZXRDbGllbnRDbG9jay0tYWRkcmVzcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7cG9ydCZxdW90OyBwcm9wZXJ0eSIgbGluaz0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCNHc3ROZXRDbGllbnRDbG9jay0tcG9ydCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdE5ldFRpbWVQYWNrZXQiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHc3ROZXRUaW1lUGFja2V0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9ORVRfVElNRV9QQUNLRVRfU0laRSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI0dTVC1ORVQtVElNRS1QQUNLRVQtU0laRTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9uZXRfdGltZV9wYWNrZXRfbmV3ICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjZ3N0LW5ldC10aW1lLXBhY2tldC1uZXciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X25ldF90aW1lX3BhY2tldF9yZWNlaXZlICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjZ3N0LW5ldC10aW1lLXBhY2tldC1yZWNlaXZlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9uZXRfdGltZV9wYWNrZXRfc2VuZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI2dzdC1uZXQtdGltZS1wYWNrZXQtc2VuZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbmV0X3RpbWVfcGFja2V0X3NlcmlhbGl6ZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI2dzdC1uZXQtdGltZS1wYWNrZXQtc2VyaWFsaXplIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0TmV0VGltZVByb3ZpZGVyIiBsaW5rPSJHc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCNHc3ROZXRUaW1lUHJvdmlkZXItc3RydWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9uZXRfdGltZV9wcm92aWRlcl9uZXcgKCkiIGxpbms9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sI2dzdC1uZXQtdGltZS1wcm92aWRlci1uZXciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O2FjdGl2ZSZxdW90OyBwcm9wZXJ0eSIgbGluaz0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwjR3N0TmV0VGltZVByb3ZpZGVyLS1hY3RpdmUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O2FkZHJlc3MmcXVvdDsgcHJvcGVydHkiIGxpbms9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sI0dzdE5ldFRpbWVQcm92aWRlci0tYWRkcmVzcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7Y2xvY2smcXVvdDsgcHJvcGVydHkiIGxpbms9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sI0dzdE5ldFRpbWVQcm92aWRlci0tY2xvY2siLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O3BvcnQmcXVvdDsgcHJvcGVydHkiIGxpbms9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sI0dzdE5ldFRpbWVQcm92aWRlci0tcG9ydCIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfU1RBUlRfVEVTVCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0dTVC1TVEFSVC1URVNUOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VORF9URVNUIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0dTVC1FTkQtVEVTVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkFTU0VSVF9CVUZGRVJfUkVGQ09VTlQoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNBU1NFUlQtQlVGRkVSLVJFRkNPVU5UOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iQVNTRVJUX0NBUFNfUkVGQ09VTlQoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNBU1NFUlQtQ0FQUy1SRUZDT1VOVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkFTU0VSVF9DUklUSUNBTCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0FTU0VSVC1DUklUSUNBTDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkFTU0VSVF9XQVJOSU5HKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjQVNTRVJULVdBUk5JTkc6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNBU1NFUlQtTUlOSS1PQkpFQ1QtUkVGQ09VTlQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJBU1NFUlRfT0JKRUNUX1JFRkNPVU5UKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjQVNTRVJULU9CSkVDVC1SRUZDT1VOVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkFTU0VSVF9PQkpFQ1RfUkVGQ09VTlRfQkVUV0VFTigpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0FTU0VSVC1PQkpFQ1QtUkVGQ09VTlQtQkVUV0VFTjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkFTU0VSVF9TRVRfU1RBVEUoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNBU1NFUlQtU0VULVNUQVRFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZmFpbF91bmxlc3NfZXF1YWxzX2ludCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2ZhaWwtdW5sZXNzLWVxdWFscy1pbnQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0KCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZmFpbC11bmxlc3MtZXF1YWxzLWZsb2F0IiBzaW5jZT0iMC4xMC4xNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZmFpbC11bmxlc3MtZXF1YWxzLXN0cmluZyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJmYWlsX3VubGVzc19lcXVhbHNfdWludDY0KCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZmFpbC11bmxlc3MtZXF1YWxzLXVpbnQ2NCIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJmYWlsX3VubGVzc19lcXVhbHNfaW50NjQoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNmYWlsLXVubGVzcy1lcXVhbHMtaW50NjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZmFpbF91bmxlc3NfbWVzc2FnZV9lcnJvcigpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2ZhaWwtdW5sZXNzLW1lc3NhZ2UtZXJyb3IiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iYXNzZXJ0X2VxdWFsc19pbnQoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNhc3NlcnQtZXF1YWxzLWludCIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJhc3NlcnRfZXF1YWxzX2Zsb2F0KCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjYXNzZXJ0LWVxdWFscy1mbG9hdCIgc2luY2U9IjAuMTAuMTQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iYXNzZXJ0X2VxdWFsc19zdHJpbmcoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNhc3NlcnQtZXF1YWxzLXN0cmluZyIvPgorICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJhc3NlcnRfZXF1YWxzX3VpbnQ2NCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2Fzc2VydC1lcXVhbHMtdWludDY0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImFzc2VydF9lcXVhbHNfaW50NjQoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNhc3NlcnQtZXF1YWxzLWludDY0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImFzc2VydF9tZXNzYWdlX2Vycm9yKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjYXNzZXJ0LW1lc3NhZ2UtZXJyb3IiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NoZWNrX2luaXQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLWluaXQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NoZWNrX21lc3NhZ2VfZXJyb3IgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLW1lc3NhZ2UtZXJyb3IiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXNldHVwLWVsZW1lbnQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1zZXR1cC1zaW5rLXBhZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stc2V0dXAtc3JjLXBhZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2hlY2tfc2V0dXBfc2lua19wYWRfYnlfbmFtZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stc2V0dXAtc2luay1wYWQtYnktbmFtZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZF9ieV9uYW1lICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1zZXR1cC1zcmMtcGFkLWJ5LW5hbWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NoZWNrX3RlYXJkb3duX3BhZF9ieV9uYW1lICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay10ZWFyZG93bi1wYWQtYnktbmFtZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stdGVhcmRvd24tZWxlbWVudCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2hlY2tfdGVhcmRvd25fc2lua19wYWQgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXRlYXJkb3duLXNpbmstcGFkIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay10ZWFyZG93bi1zcmMtcGFkIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jaGVja19kcm9wX2J1ZmZlcnMgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLWRyb3AtYnVmZmVycyIgc2luY2U9IjAuMTAuMTgiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NoZWNrX2J1ZmZlcl9kYXRhICgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1idWZmZXItZGF0YSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2hlY2tfY2Fwc19lcXVhbCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stY2Fwcy1lcXVhbCIgc2luY2U9IjAuMTAuMTgiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXJfbGlzdCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stZWxlbWVudC1wdXNoLWJ1ZmZlci1saXN0IiBzaW5jZT0iMC4xMC4xOCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2hlY2tfZWxlbWVudF9wdXNoX2J1ZmZlciAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stZWxlbWVudC1wdXNoLWJ1ZmZlciIgc2luY2U9IjAuMTAuMTgiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NoZWNrX3J1bl9zdWl0ZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stcnVuLXN1aXRlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfc3RyYXdfc3RhcnRfcGlwZWxpbmUgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3Lmh0bWwjZ3N0LWJ1ZmZlci1zdHJhdy1zdGFydC1waXBlbGluZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX3N0cmF3X2dldF9idWZmZXIgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3Lmh0bWwjZ3N0LWJ1ZmZlci1zdHJhdy1nZXQtYnVmZmVyIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfc3RyYXdfc3RvcF9waXBlbGluZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcuaHRtbCNnc3QtYnVmZmVyLXN0cmF3LXN0b3AtcGlwZWxpbmUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9IkdzdFN0cmVhbUNvbnNpc3RlbmN5IiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5odG1sI0dzdFN0cmVhbUNvbnNpc3RlbmN5IiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9uZXcgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5Lmh0bWwjZ3N0LWNvbnNpc3RlbmN5LWNoZWNrZXItbmV3IiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9yZXNldCAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCNnc3QtY29uc2lzdGVuY3ktY2hlY2tlci1yZXNldCIgc2luY2U9IjAuMTAuMjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfZnJlZSAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCNnc3QtY29uc2lzdGVuY3ktY2hlY2tlci1mcmVlIiBzaW5jZT0iMC4xMC4yNCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX05PTkUiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dTVC1CQVNFLVBBUlNFLUZSQU1FLUZMQUctTk9ORTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9CQVNFX1BBUlNFX0ZSQU1FX0ZMQUdfTk9fRlJBTUUiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dTVC1CQVNFLVBBUlNFLUZSQU1FLUZMQUctTk8tRlJBTUU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX0NMSVAiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dTVC1CQVNFLVBBUlNFLUZSQU1FLUZMQUctQ0xJUDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9CQVNFX1NSQ19TVEFSVEVEIiBsaW5rPSJHc3RCYXNlU3JjLmh0bWwjR1NULUJBU0UtU1JDLVNUQVJURUQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQkFTRV9TUkNfRkxBR19MQVNUIiBsaW5rPSJHc3RCYXNlU3JjLmh0bWwjR1NULUJBU0UtU1JDLUZMQUctTEFTVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9JTlRFUlBPTEFURV9OT05FIiBsaW5rPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sI0dTVC1JTlRFUlBPTEFURS1OT05FOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0lOVEVSUE9MQVRFX1RSSUdHRVIiIGxpbms9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwjR1NULUlOVEVSUE9MQVRFLVRSSUdHRVI6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfSU5URVJQT0xBVEVfTElORUFSIiBsaW5rPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sI0dTVC1JTlRFUlBPTEFURS1MSU5FQVI6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfSU5URVJQT0xBVEVfUVVBRFJBVElDIiBsaW5rPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sI0dTVC1JTlRFUlBPTEFURS1RVUFEUkFUSUM6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfSU5URVJQT0xBVEVfQ1VCSUMiIGxpbms9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwjR1NULUlOVEVSUE9MQVRFLUNVQklDOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0lOVEVSUE9MQVRFX1VTRVIiIGxpbms9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwjR1NULUlOVEVSUE9MQVRFLVVTRVI6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTEZPX1dBVkVGT1JNX1NJTkUiIGxpbms9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNHU1QtTEZPLVdBVkVGT1JNLVNJTkU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTEZPX1dBVkVGT1JNX1NRVUFSRSIgbGluaz0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sI0dTVC1MRk8tV0FWRUZPUk0tU1FVQVJFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0xGT19XQVZFRk9STV9TQVciIGxpbms9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNHU1QtTEZPLVdBVkVGT1JNLVNBVzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9MRk9fV0FWRUZPUk1fUkVWRVJTRV9TQVciIGxpbms9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNHU1QtTEZPLVdBVkVGT1JNLVJFVkVSU0UtU0FXOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0xGT19XQVZFRk9STV9UUklBTkdMRSIgbGluaz0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sI0dTVC1MRk8tV0FWRUZPUk0tVFJJQU5HTEU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRFBfSEVBREVSX0ZMQUdfTk9ORSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR1NULURQLUhFQURFUi1GTEFHLU5PTkU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRFBfSEVBREVSX0ZMQUdfQ1JDX0hFQURFUiIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR1NULURQLUhFQURFUi1GTEFHLUNSQy1IRUFERVI6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRFBfSEVBREVSX0ZMQUdfQ1JDX1BBWUxPQUQiIGxpbms9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dTVC1EUC1IRUFERVItRkxBRy1DUkMtUEFZTE9BRDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9EUF9IRUFERVJfRkxBR19DUkMiIGxpbms9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dTVC1EUC1IRUFERVItRkxBRy1DUkM6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRFBfUEFZTE9BRF9OT05FIiBsaW5rPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNHU1QtRFAtUEFZTE9BRC1OT05FOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0RQX1BBWUxPQURfQlVGRkVSIiBsaW5rPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNHU1QtRFAtUEFZTE9BRC1CVUZGRVI6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRFBfUEFZTE9BRF9DQVBTIiBsaW5rPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNHU1QtRFAtUEFZTE9BRC1DQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9EUF9QQVlMT0FEX0VWRU5UX05PTkUiIGxpbms9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dTVC1EUC1QQVlMT0FELUVWRU5ULU5PTkU6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRFBfVkVSU0lPTl8wXzIiIGxpbms9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dTVC1EUC1WRVJTSU9OLTAtMjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9EUF9WRVJTSU9OXzFfMCIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR1NULURQLVZFUlNJT04tMS0wOkNBUFMiLz4KKyAgPC9mdW5jdGlvbnM+Cis8L2Jvb2s+CmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy5odG1sIGIvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGEyZTFiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMuaHRtbApAQCAtMCwwICsxLDEzMiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPlBhcnTCoEkuwqBHU3RyZWFtZXIgTGlicmFyaWVzPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItYmFzZS5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEJhc2UgYW5kIFV0aWxsaXR5IENsYXNzZXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPjx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPsKgPC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItYmFzZS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxkaXYgY2xhc3M9InBhcnQiPgorPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgxIGNsYXNzPSJ0aXRsZSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItbGlicyI+PC9hPlBhcnTCoEkuwqBHU3RyZWFtZXIgTGlicmFyaWVzPC9oMT48L2Rpdj48L2Rpdj48L2Rpdj4KKzxkaXYgY2xhc3M9InRvYyI+Cis8cD48Yj5UYWJsZSBvZiBDb250ZW50czwvYj48L3A+Cis8ZGw+Cis8ZHQ+PHNwYW4gY2xhc3M9ImNoYXB0ZXIiPjxhIGhyZWY9ImdzdHJlYW1lci1iYXNlLmh0bWwiPkdTdHJlYW1lciBCYXNlIGFuZCBVdGlsbGl0eSBDbGFzc2VzPC9hPjwvc3Bhbj48L2R0PgorPGRkPjxkbD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCI+R3N0QmFzZVBhcnNlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBCYXNlIGNsYXNzIGZvciBzdHJlYW0gcGFyc2Vyczwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0QmFzZVNyYy5odG1sIj5Hc3RCYXNlU3JjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBCYXNlIGNsYXNzIGZvciBnZXRyYW5nZSBiYXNlZCBzb3VyY2UgZWxlbWVudHM8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiPkdzdEJhc2VTaW5rPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBCYXNlIGNsYXNzIGZvciBzaW5rIGVsZW1lbnRzPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiPkdzdEJhc2VUcmFuc2Zvcm08L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEJhc2UgY2xhc3MgZm9yIHNpbXBsZSB0cmFuc2Zvcm0gZmlsdGVyczwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0UHVzaFNyYy5odG1sIj5Hc3RQdXNoU3JjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBCYXNlIGNsYXNzIGZvciBwdXNoIGJhc2VkIHNvdXJjZSBlbGVtZW50czwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0QWRhcHRlci5odG1sIj5Hc3RBZGFwdGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBhZGFwdHMgaW5jb21pbmcgZGF0YSBvbiBhIHNpbmsgcGFkIGludG8gY2h1bmtzIG9mIE4gYnl0ZXM8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sIj5Hc3RCaXRSZWFkZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFJlYWRzIGFueSBudW1iZXIgb2YgYml0cyBmcm9tIGEgbWVtb3J5IGJ1ZmZlcjwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIj5Hc3RCeXRlUmVhZGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBSZWFkcyBkaWZmZXJlbnQgaW50ZWdlciwgc3RyaW5nIGFuZCBmbG9hdGluZyBwb2ludAorICAgIHR5cGVzIGZyb20gYSBtZW1vcnkgYnVmZmVyPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiPkdzdEJ5dGVXcml0ZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFdyaXRlcyBkaWZmZXJlbnQgaW50ZWdlciwgc3RyaW5nIGFuZCBmbG9hdGluZyBwb2ludAorICAgIHR5cGVzIHRvIGEgbWVtb3J5IGJ1ZmZlciBhbmQgYWxsb3dzIHJlYWRpbmc8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiPkdzdENvbGxlY3RQYWRzPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBtYW5hZ2VzIGEgc2V0IG9mIHBhZHMgdGhhdCBvcGVyYXRlIGluIGNvbGxlY3QgbW9kZTwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCI+R3N0VHlwZUZpbmRIZWxwZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFV0aWxpdHkgZnVuY3Rpb25zIGZvciB0eXBlZmluZGluZzwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwiPkdzdERhdGFRdWV1ZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgVGhyZWFkc2FmZSBxdWV1ZWluZyBvYmplY3Q8L3NwYW4+Cis8L2R0PgorPC9kbD48L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJjaGFwdGVyIj48YSBocmVmPSJnc3RyZWFtZXItY29udHJvbC5odG1sIj5HU3RyZWFtZXIgRHluYW1pYyBQYXJhbWV0ZXIgQ29udHJvbDwvYT48L3NwYW4+PC9kdD4KKzxkZD48ZGw+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sIj5Hc3RDb250cm9sbGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBkeW5hbWljIHBhcmFtZXRlciBjb250cm9sIHN1YnN5c3RlbTwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIj5Hc3RDb250cm9sU291cmNlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBiYXNlIGNsYXNzIGZvciBjb250cm9sIHNvdXJjZSBzb3VyY2VzPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sIj5Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgaW50ZXJwb2xhdGlvbiBjb250cm9sIHNvdXJjZTwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIj5Hc3RMRk9Db250cm9sU291cmNlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBMRk8gY29udHJvbCBzb3VyY2U8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwiPkdzdENvbnRyb2xsZXJHT2JqZWN0PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiBjb252ZW5pZW5jZSBtZXRob2RzIGZvciB1c2luZyBkeW5hbWljIHByb3BlcnRpZXM8L3NwYW4+Cis8L2R0PgorPC9kbD48L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJjaGFwdGVyIj48YSBocmVmPSJnc3RyZWFtZXItZGF0YXByb3RvY29sLmh0bWwiPkdTdHJlYW1lciBEYXRhIFByb3RvY29sPC9hPjwvc3Bhbj48L2R0PgorPGRkPjxkbD48ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwiPmdzdGRhdGFwcm90b2NvbDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgU2VyaWFsaXphdGlvbiBvZiBjYXBzLCBidWZmZXJzIGFuZCBldmVudHMuPC9zcGFuPgorPC9kdD48L2RsPjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9ImNoYXB0ZXIiPjxhIGhyZWY9ImdzdHJlYW1lci1uZXQuaHRtbCI+R1N0cmVhbWVyIE5ldHdvcmsgQ2xhc3NlczwvYT48L3NwYW4+PC9kdD4KKzxkZD48ZGw+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCI+R3N0TmV0Q2xpZW50Q2xvY2s8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFNwZWNpYWwgY2xvY2sgdGhhdCBzeW5jaHJvbml6ZXMgdG8gYSByZW1vdGUgdGltZQorICAgICAgICAgICAgICAgICAgICBwcm92aWRlci48L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCI+R3N0TmV0VGltZVBhY2tldDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgSGVscGVyIHN0cnVjdHVyZSB0byBjb25zdHJ1Y3QgY2xvY2sgcGFja2V0cyB1c2VkCisgICAgICAgICAgICAgICAgICAgIGJ5IG5ldHdvcmsgY2xvY2tzLjwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwiPkdzdE5ldFRpbWVQcm92aWRlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgU3BlY2lhbCBvYmplY3QgdGhhdCBleHBvc2VkIHRoZSB0aW1lIG9mIGEgY2xvY2sKKyAgICAgICAgICAgICAgICAgICAgb24gdGhlIG5ldHdvcmsuPC9zcGFuPgorPC9kdD4KKzwvZGw+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0iY2hhcHRlciI+PGEgaHJlZj0iZ3N0cmVhbWVyLWNoZWNrLmh0bWwiPkdTdHJlYW1lciBDaGVjayBVbml0IFRlc3Rpbmc8L2E+PC9zcGFuPjwvZHQ+Cis8ZGQ+PGRsPgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiPkdzdENoZWNrPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBDb21tb24gY29kZSBmb3IgR1N0cmVhbWVyIHVuaXQgdGVzdHM8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3Lmh0bWwiPkdzdEJ1ZmZlclN0cmF3PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBCdWZmZXIgaW50ZXJjZXB0aW9uIGNvZGUgZm9yIEdTdHJlYW1lciB1bml0IHRlc3RzPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5odG1sIj5Hc3RTdHJlYW1Db25zaXN0ZW5jeTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgRGF0YSBmbG93IGNvbnNpc3RlbmN5IGNoZWNrZXIgZm9yIEdTdHJlYW1lciB1bml0IHRlc3RzLjwvc3Bhbj4KKzwvZHQ+Cis8L2RsPjwvZGQ+Cis8L2RsPgorPC9kaXY+Cis8cD4KKyAgICAgIFRvIGVhc2UgdGhlIGNyZWF0aW9uIG9mIHBsdWdpbnMsIGEgbGlicmFyeSBzeXN0ZW0gd2FzIGNyZWF0ZWQuIFRoZSBtb3N0IGNvbW1vbgorICAgICAgZnVuY3Rpb25zIGZvciBhIHBsdWdpbiBjYW4gYmUgZm91bmQgaW4gYSBsaWJyYXJ5LgorICAgIDwvcD4KKzxwPgorICAgICAgR1N0cmVhbWVyIHByb3ZpZGVzIHNvbWUgc3RhbmRhcmQgbGlicmFyaWVzIHlvdSBjYW4gdXNlIHRvIGNyZWF0ZSBwbHVnaW5zLgorICAgIDwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1uZXQuaHRtbCBiL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1uZXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTU0NjE1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLW5ldC5odG1sCkBAIC0wLDAgKzEsNDcgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5HU3RyZWFtZXIgTmV0d29yayBDbGFzc2VzPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMC4xMSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMuaHRtbCIgdGl0bGU9IlBhcnTCoEkuwqBHU3RyZWFtZXIgTGlicmFyaWVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwiIHRpdGxlPSJnc3RkYXRhcHJvdG9jb2wiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sIiB0aXRsZT0iR3N0TmV0Q2xpZW50Q2xvY2siPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPjx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImdzdHJlYW1lci1saWJzLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxkaXYgY2xhc3M9ImNoYXB0ZXIiPgorPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItbmV0Ij48L2E+R1N0cmVhbWVyIE5ldHdvcmsgQ2xhc3NlczwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Cis8ZGl2IGNsYXNzPSJ0b2MiPjxkbD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sIj5Hc3ROZXRDbGllbnRDbG9jazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgU3BlY2lhbCBjbG9jayB0aGF0IHN5bmNocm9uaXplcyB0byBhIHJlbW90ZSB0aW1lCisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyLjwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sIj5Hc3ROZXRUaW1lUGFja2V0PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBIZWxwZXIgc3RydWN0dXJlIHRvIGNvbnN0cnVjdCBjbG9jayBwYWNrZXRzIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgYnkgbmV0d29yayBjbG9ja3MuPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCI+R3N0TmV0VGltZVByb3ZpZGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBTcGVjaWFsIG9iamVjdCB0aGF0IGV4cG9zZWQgdGhlIHRpbWUgb2YgYSBjbG9jaworICAgICAgICAgICAgICAgICAgICBvbiB0aGUgbmV0d29yay48L3NwYW4+Cis8L2R0PgorPC9kbD48L2Rpdj4KKzxwPgorICAgICAgICBsaWJnc3RuZXQtMC4xMS5zbyBwcm92aWRlcyBuZXR3b3JrIGVsZW1lbnRzIGFuZCBvYmplY3RzLgorICAgICAgPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvaG9tZS5wbmcgYi9kb2NzL2xpYnMvaHRtbC9ob21lLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzAwMzYxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9saWJzL2h0bWwvaG9tZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvaW5kZXguaHRtbCBiL2RvY3MvbGlicy9odG1sL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NmNWI4MQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbGlicy9odG1sL2luZGV4Lmh0bWwKQEAgLTAsMCArMSwxMjkgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5HU3RyZWFtZXIgMC4xMSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1saWJzLmh0bWwiIHRpdGxlPSJQYXJ0wqBJLsKgR1N0cmVhbWVyIExpYnJhcmllcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPGRpdiBjbGFzcz0iYm9vayI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorPGRpdj4KKzxkaXY+PHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIwIj48dHI+PHRoIHZhbGlnbj0ibWlkZGxlIj48cCBjbGFzcz0idGl0bGUiPkdTdHJlYW1lciAwLjExIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvcD48L3RoPjwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXY+PHAgY2xhc3M9InJlbGVhc2VpbmZvIj4KKyAgICAgIGZvciBHU3RyZWFtZXIgTGlicmFyeSAwLjExICgwLjExLjAuMikKKyAgICAgIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50YXRpb24gY2FuIGJlIGZvdW5kIG9uLWxpbmUgYXQKKyAgICAgIDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyLWxpYnMvaHRtbC8iIHRhcmdldD0iX3RvcCI+aHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyLWxpYnMvaHRtbC88L2E+LgorICAgIDwvcD48L2Rpdj4KKzwvZGl2PgorPGhyPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJ0b2MiPjxkbD4KKzxkdD48c3BhbiBjbGFzcz0icGFydCI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMuaHRtbCI+SS4gR1N0cmVhbWVyIExpYnJhcmllczwvYT48L3NwYW4+PC9kdD4KKzxkZD48ZGw+Cis8ZHQ+PHNwYW4gY2xhc3M9ImNoYXB0ZXIiPjxhIGhyZWY9ImdzdHJlYW1lci1iYXNlLmh0bWwiPkdTdHJlYW1lciBCYXNlIGFuZCBVdGlsbGl0eSBDbGFzc2VzPC9hPjwvc3Bhbj48L2R0PgorPGRkPjxkbD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCI+R3N0QmFzZVBhcnNlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBCYXNlIGNsYXNzIGZvciBzdHJlYW0gcGFyc2Vyczwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0QmFzZVNyYy5odG1sIj5Hc3RCYXNlU3JjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBCYXNlIGNsYXNzIGZvciBnZXRyYW5nZSBiYXNlZCBzb3VyY2UgZWxlbWVudHM8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiPkdzdEJhc2VTaW5rPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBCYXNlIGNsYXNzIGZvciBzaW5rIGVsZW1lbnRzPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiPkdzdEJhc2VUcmFuc2Zvcm08L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEJhc2UgY2xhc3MgZm9yIHNpbXBsZSB0cmFuc2Zvcm0gZmlsdGVyczwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0UHVzaFNyYy5odG1sIj5Hc3RQdXNoU3JjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBCYXNlIGNsYXNzIGZvciBwdXNoIGJhc2VkIHNvdXJjZSBlbGVtZW50czwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0QWRhcHRlci5odG1sIj5Hc3RBZGFwdGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBhZGFwdHMgaW5jb21pbmcgZGF0YSBvbiBhIHNpbmsgcGFkIGludG8gY2h1bmtzIG9mIE4gYnl0ZXM8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sIj5Hc3RCaXRSZWFkZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFJlYWRzIGFueSBudW1iZXIgb2YgYml0cyBmcm9tIGEgbWVtb3J5IGJ1ZmZlcjwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIj5Hc3RCeXRlUmVhZGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBSZWFkcyBkaWZmZXJlbnQgaW50ZWdlciwgc3RyaW5nIGFuZCBmbG9hdGluZyBwb2ludAorICAgIHR5cGVzIGZyb20gYSBtZW1vcnkgYnVmZmVyPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiPkdzdEJ5dGVXcml0ZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFdyaXRlcyBkaWZmZXJlbnQgaW50ZWdlciwgc3RyaW5nIGFuZCBmbG9hdGluZyBwb2ludAorICAgIHR5cGVzIHRvIGEgbWVtb3J5IGJ1ZmZlciBhbmQgYWxsb3dzIHJlYWRpbmc8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiPkdzdENvbGxlY3RQYWRzPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBtYW5hZ2VzIGEgc2V0IG9mIHBhZHMgdGhhdCBvcGVyYXRlIGluIGNvbGxlY3QgbW9kZTwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCI+R3N0VHlwZUZpbmRIZWxwZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFV0aWxpdHkgZnVuY3Rpb25zIGZvciB0eXBlZmluZGluZzwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwiPkdzdERhdGFRdWV1ZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgVGhyZWFkc2FmZSBxdWV1ZWluZyBvYmplY3Q8L3NwYW4+Cis8L2R0PgorPC9kbD48L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJjaGFwdGVyIj48YSBocmVmPSJnc3RyZWFtZXItY29udHJvbC5odG1sIj5HU3RyZWFtZXIgRHluYW1pYyBQYXJhbWV0ZXIgQ29udHJvbDwvYT48L3NwYW4+PC9kdD4KKzxkZD48ZGw+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0Q29udHJvbGxlci5odG1sIj5Hc3RDb250cm9sbGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBkeW5hbWljIHBhcmFtZXRlciBjb250cm9sIHN1YnN5c3RlbTwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIj5Hc3RDb250cm9sU291cmNlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBiYXNlIGNsYXNzIGZvciBjb250cm9sIHNvdXJjZSBzb3VyY2VzPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sIj5Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgaW50ZXJwb2xhdGlvbiBjb250cm9sIHNvdXJjZTwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIj5Hc3RMRk9Db250cm9sU291cmNlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBMRk8gY29udHJvbCBzb3VyY2U8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwiPkdzdENvbnRyb2xsZXJHT2JqZWN0PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiBjb252ZW5pZW5jZSBtZXRob2RzIGZvciB1c2luZyBkeW5hbWljIHByb3BlcnRpZXM8L3NwYW4+Cis8L2R0PgorPC9kbD48L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJjaGFwdGVyIj48YSBocmVmPSJnc3RyZWFtZXItZGF0YXByb3RvY29sLmh0bWwiPkdTdHJlYW1lciBEYXRhIFByb3RvY29sPC9hPjwvc3Bhbj48L2R0PgorPGRkPjxkbD48ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwiPmdzdGRhdGFwcm90b2NvbDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgU2VyaWFsaXphdGlvbiBvZiBjYXBzLCBidWZmZXJzIGFuZCBldmVudHMuPC9zcGFuPgorPC9kdD48L2RsPjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9ImNoYXB0ZXIiPjxhIGhyZWY9ImdzdHJlYW1lci1uZXQuaHRtbCI+R1N0cmVhbWVyIE5ldHdvcmsgQ2xhc3NlczwvYT48L3NwYW4+PC9kdD4KKzxkZD48ZGw+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCI+R3N0TmV0Q2xpZW50Q2xvY2s8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFNwZWNpYWwgY2xvY2sgdGhhdCBzeW5jaHJvbml6ZXMgdG8gYSByZW1vdGUgdGltZQorICAgICAgICAgICAgICAgICAgICBwcm92aWRlci48L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCI+R3N0TmV0VGltZVBhY2tldDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgSGVscGVyIHN0cnVjdHVyZSB0byBjb25zdHJ1Y3QgY2xvY2sgcGFja2V0cyB1c2VkCisgICAgICAgICAgICAgICAgICAgIGJ5IG5ldHdvcmsgY2xvY2tzLjwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwiPkdzdE5ldFRpbWVQcm92aWRlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgU3BlY2lhbCBvYmplY3QgdGhhdCBleHBvc2VkIHRoZSB0aW1lIG9mIGEgY2xvY2sKKyAgICAgICAgICAgICAgICAgICAgb24gdGhlIG5ldHdvcmsuPC9zcGFuPgorPC9kdD4KKzwvZGw+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0iY2hhcHRlciI+PGEgaHJlZj0iZ3N0cmVhbWVyLWNoZWNrLmh0bWwiPkdTdHJlYW1lciBDaGVjayBVbml0IFRlc3Rpbmc8L2E+PC9zcGFuPjwvZHQ+Cis8ZGQ+PGRsPgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiPkdzdENoZWNrPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBDb21tb24gY29kZSBmb3IgR1N0cmVhbWVyIHVuaXQgdGVzdHM8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3Lmh0bWwiPkdzdEJ1ZmZlclN0cmF3PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBCdWZmZXIgaW50ZXJjZXB0aW9uIGNvZGUgZm9yIEdTdHJlYW1lciB1bml0IHRlc3RzPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5odG1sIj5Hc3RTdHJlYW1Db25zaXN0ZW5jeTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgRGF0YSBmbG93IGNvbnNpc3RlbmN5IGNoZWNrZXIgZm9yIEdTdHJlYW1lciB1bml0IHRlc3RzLjwvc3Bhbj4KKzwvZHQ+Cis8L2RsPjwvZGQ+Cis8L2RsPjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9ImNoYXB0ZXIiPjxhIGhyZWY9ImdzdHJlYW1lci1oaWVyYXJjaHkuaHRtbCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PC9kdD4KKzxkdD48c3BhbiBjbGFzcz0iaW5kZXgiPjxhIGhyZWY9ImFwaS1pbmRleC1mdWxsLmh0bWwiPkFQSSBJbmRleDwvYT48L3NwYW4+PC9kdD4KKzxkdD48c3BhbiBjbGFzcz0iaW5kZXgiPjxhIGhyZWY9ImFwaS1pbmRleC1kZXByZWNhdGVkLmh0bWwiPkluZGV4IG9mIGRlcHJlY2F0ZWQgQVBJPC9hPjwvc3Bhbj48L2R0PgorPGR0PjxzcGFuIGNsYXNzPSJnbG9zc2FyeSI+PGEgaHJlZj0iYW5ub3RhdGlvbi1nbG9zc2FyeS5odG1sIj5Bbm5vdGF0aW9uIEdsb3NzYXJ5PC9hPjwvc3Bhbj48L2R0PgorPC9kbD48L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL2luZGV4LnNnbWwgYi9kb2NzL2xpYnMvaHRtbC9pbmRleC5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YjliZDIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2xpYnMvaHRtbC9pbmRleC5zZ21sCkBAIC0wLDAgKzEsNzA1IEBACis8T05MSU5FIGhyZWY9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci1saWJzL2h0bWwvIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2Uuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0QmFzZVBhcnNlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZSI+Cis8QU5DSE9SIGlkPSJHc3RCYXNlUGFyc2VDbGFzcyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2VDbGFzcyI+Cis8QU5DSE9SIGlkPSJnc3QtYmFzZS1wYXJzZS1zZXQtZHVyYXRpb24iIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2Utc2V0LWR1cmF0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdC1iYXNlLXBhcnNlLXNldC1hdmVyYWdlLWJpdHJhdGUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2Utc2V0LWF2ZXJhZ2UtYml0cmF0ZSI+Cis8QU5DSE9SIGlkPSJnc3QtYmFzZS1wYXJzZS1zZXQtbWluLWZyYW1lLXNpemUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2Utc2V0LW1pbi1mcmFtZS1zaXplIj4KKzxBTkNIT1IgaWQ9ImdzdC1iYXNlLXBhcnNlLXNldC1wYXNzdGhyb3VnaCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtcGFzc3Rocm91Z2giPgorPEFOQ0hPUiBpZD0iZ3N0LWJhc2UtcGFyc2Utc2V0LXN5bmNhYmxlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLXNldC1zeW5jYWJsZSI+Cis8QU5DSE9SIGlkPSJnc3QtYmFzZS1wYXJzZS1zZXQtaGFzLXRpbWluZy1pbmZvIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLXNldC1oYXMtdGltaW5nLWluZm8iPgorPEFOQ0hPUiBpZD0iZ3N0LWJhc2UtcGFyc2Utc2V0LWZyYW1lLXJhdGUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2Utc2V0LWZyYW1lLXJhdGUiPgorPEFOQ0hPUiBpZD0iZ3N0LWJhc2UtcGFyc2Utc2V0LWxhdGVuY3kiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2Utc2V0LWxhdGVuY3kiPgorPEFOQ0hPUiBpZD0iZ3N0LWJhc2UtcGFyc2UtY29udmVydC1kZWZhdWx0IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLWNvbnZlcnQtZGVmYXVsdCI+Cis8QU5DSE9SIGlkPSJnc3QtYmFzZS1wYXJzZS1hZGQtaW5kZXgtZW50cnkiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2UtYWRkLWluZGV4LWVudHJ5Ij4KKzxBTkNIT1IgaWQ9IkdzdEJhc2VQYXJzZUZyYW1lIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUZyYW1lIj4KKzxBTkNIT1IgaWQ9IkdzdEJhc2VQYXJzZUZyYW1lRmxhZ3MiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlRnJhbWVGbGFncyI+Cis8QU5DSE9SIGlkPSJHU1QtQkFTRS1QQVJTRS1GUkFNRS1GTEFHLU5PTkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHU1QtQkFTRS1QQVJTRS1GUkFNRS1GTEFHLU5PTkU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQkFTRS1QQVJTRS1GUkFNRS1GTEFHLU5PLUZSQU1FOkNBUFMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR1NULUJBU0UtUEFSU0UtRlJBTUUtRkxBRy1OTy1GUkFNRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1CQVNFLVBBUlNFLUZSQU1FLUZMQUctQ0xJUDpDQVBTIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dTVC1CQVNFLVBBUlNFLUZSQU1FLUZMQUctQ0xJUDpDQVBTIj4KKzxBTkNIT1IgaWQ9ImdzdC1iYXNlLXBhcnNlLWZyYW1lLW5ldyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1mcmFtZS1uZXciPgorPEFOQ0hPUiBpZD0iZ3N0LWJhc2UtcGFyc2UtZnJhbWUtaW5pdCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1mcmFtZS1pbml0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1iYXNlLXBhcnNlLWZyYW1lLWZyZWUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2UtZnJhbWUtZnJlZSI+Cis8QU5DSE9SIGlkPSJnc3QtYmFzZS1wYXJzZS1wdXNoLWZyYW1lIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLXB1c2gtZnJhbWUiPgorPEFOQ0hPUiBpZD0iR1NULUJBU0UtUEFSU0UtRFJBSU5JTkc6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHU1QtQkFTRS1QQVJTRS1EUkFJTklORzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1CQVNFLVBBUlNFLUZMQUctRFJBSU5JTkc6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHU1QtQkFTRS1QQVJTRS1GTEFHLURSQUlOSU5HOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUJBU0UtUEFSU0UtRkxBRy1MT1NULVNZTkM6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHU1QtQkFTRS1QQVJTRS1GTEFHLUxPU1QtU1lOQzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1CQVNFLVBBUlNFLUZMT1ctRFJPUFBFRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dTVC1CQVNFLVBBUlNFLUZMT1ctRFJPUFBFRDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1CQVNFLVBBUlNFLUZMT1ctUVVFVUVEOkNBUFMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjR1NULUJBU0UtUEFSU0UtRkxPVy1RVUVVRUQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQkFTRS1QQVJTRS1MT1NULVNZTkM6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2UuaHRtbCNHU1QtQkFTRS1QQVJTRS1MT1NULVNZTkM6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQkFTRS1QQVJTRS1TSU5LLVBBRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dTVC1CQVNFLVBBUlNFLVNJTkstUEFEOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUJBU0UtUEFSU0UtU1JDLVBBRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJhc2VQYXJzZS5odG1sI0dTVC1CQVNFLVBBUlNFLVNSQy1QQUQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItbGlicy1Hc3RCYXNlUGFyc2Uuc2VlLWFsc28iIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLmh0bWwjZ3N0cmVhbWVyLWxpYnMtR3N0QmFzZVBhcnNlLnNlZS1hbHNvIj4KKzxBTkNIT1IgaWQ9IkdzdEJhc2VTcmMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNyYy5odG1sIj4KKzxBTkNIT1IgaWQ9IkdzdEJhc2VTcmMuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmMuc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iR3N0QmFzZVNyYy5vYmplY3QtaGllcmFyY2h5IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjLm9iamVjdC1oaWVyYXJjaHkiPgorPEFOQ0hPUiBpZD0iR3N0QmFzZVNyYy5wcm9wZXJ0aWVzIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjLnByb3BlcnRpZXMiPgorPEFOQ0hPUiBpZD0iR3N0QmFzZVNyYy5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyYy5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJHc3RCYXNlU3JjLmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmMuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RCYXNlU3JjLXN0cnVjdCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyYy1zdHJ1Y3QiPgorPEFOQ0hPUiBpZD0iR3N0QmFzZVNyY0NsYXNzIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjQ2xhc3MiPgorPEFOQ0hPUiBpZD0iR3N0QmFzZVNyY0ZsYWdzIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjRmxhZ3MiPgorPEFOQ0hPUiBpZD0iR1NULUJBU0UtU1JDLVNUQVJURUQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlU3JjLmh0bWwjR1NULUJBU0UtU1JDLVNUQVJURUQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQkFTRS1TUkMtRkxBRy1MQVNUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNyYy5odG1sI0dTVC1CQVNFLVNSQy1GTEFHLUxBU1Q6Q0FQUyI+Cis8QU5DSE9SIGlkPSJnc3QtYmFzZS1zcmMtd2FpdC1wbGF5aW5nIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtd2FpdC1wbGF5aW5nIj4KKzxBTkNIT1IgaWQ9ImdzdC1iYXNlLXNyYy1pcy1saXZlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtaXMtbGl2ZSI+Cis8QU5DSE9SIGlkPSJnc3QtYmFzZS1zcmMtc2V0LWxpdmUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1zZXQtbGl2ZSI+Cis8QU5DSE9SIGlkPSJnc3QtYmFzZS1zcmMtc2V0LWZvcm1hdCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLXNldC1mb3JtYXQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJhc2Utc3JjLXF1ZXJ5LWxhdGVuY3kiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1xdWVyeS1sYXRlbmN5Ij4KKzxBTkNIT1IgaWQ9ImdzdC1iYXNlLXNyYy1nZXQtYmxvY2tzaXplIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtZ2V0LWJsb2Nrc2l6ZSI+Cis8QU5DSE9SIGlkPSJnc3QtYmFzZS1zcmMtc2V0LWJsb2Nrc2l6ZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLXNldC1ibG9ja3NpemUiPgorPEFOQ0hPUiBpZD0iZ3N0LWJhc2Utc3JjLWdldC1kby10aW1lc3RhbXAiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1nZXQtZG8tdGltZXN0YW1wIj4KKzxBTkNIT1IgaWQ9ImdzdC1iYXNlLXNyYy1zZXQtZG8tdGltZXN0YW1wIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtc2V0LWRvLXRpbWVzdGFtcCI+Cis8QU5DSE9SIGlkPSJnc3QtYmFzZS1zcmMtc2V0LWR5bmFtaWMtc2l6ZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLXNldC1keW5hbWljLXNpemUiPgorPEFOQ0hPUiBpZD0iZ3N0LWJhc2Utc3JjLW5ldy1zZWFtbGVzcy1zZWdtZW50IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtbmV3LXNlYW1sZXNzLXNlZ21lbnQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJhc2Utc3JjLXNldC1jYXBzIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtc2V0LWNhcHMiPgorPEFOQ0hPUiBpZD0iR1NULUJBU0UtU1JDLVBBRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTcmMuaHRtbCNHU1QtQkFTRS1TUkMtUEFEOkNBUFMiPgorPEFOQ0hPUiBpZD0iR3N0QmFzZVNyYy5wcm9wZXJ0eS1kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjLnByb3BlcnR5LWRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0QmFzZVNyYy0tYmxvY2tzaXplIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjLS1ibG9ja3NpemUiPgorPEFOQ0hPUiBpZD0iR3N0QmFzZVNyYy0tZG8tdGltZXN0YW1wIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjLS1kby10aW1lc3RhbXAiPgorPEFOQ0hPUiBpZD0iR3N0QmFzZVNyYy0tbnVtLWJ1ZmZlcnMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmMtLW51bS1idWZmZXJzIj4KKzxBTkNIT1IgaWQ9IkdzdEJhc2VTcmMtLXR5cGVmaW5kIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjLS10eXBlZmluZCI+Cis8QU5DSE9SIGlkPSJHc3RCYXNlU3JjLnNlZS1hbHNvIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjLnNlZS1hbHNvIj4KKzxBTkNIT1IgaWQ9IkdzdEJhc2VTaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTaW5rLmh0bWwiPgorPEFOQ0hPUiBpZD0iR3N0QmFzZVNpbmsuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJHc3RCYXNlU2luay5vYmplY3QtaGllcmFyY2h5IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmsub2JqZWN0LWhpZXJhcmNoeSI+Cis8QU5DSE9SIGlkPSJHc3RCYXNlU2luay5wcm9wZXJ0aWVzIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmsucHJvcGVydGllcyI+Cis8QU5DSE9SIGlkPSJHc3RCYXNlU2luay5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdEJhc2VTaW5rLmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdEJhc2VTaW5rLXN0cnVjdCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLXN0cnVjdCI+Cis8QU5DSE9SIGlkPSJHc3RCYXNlU2lua0NsYXNzIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmtDbGFzcyI+Cis8QU5DSE9SIGlkPSJnc3QtYmFzZS1zaW5rLXF1ZXJ5LWxhdGVuY3kiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXF1ZXJ5LWxhdGVuY3kiPgorPEFOQ0hPUiBpZD0iZ3N0LWJhc2Utc2luay1nZXQtbGF0ZW5jeSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstZ2V0LWxhdGVuY3kiPgorPEFOQ0hPUiBpZD0iZ3N0LWJhc2Utc2luay1kby1wcmVyb2xsIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1kby1wcmVyb2xsIj4KKzxBTkNIT1IgaWQ9ImdzdC1iYXNlLXNpbmstd2FpdC1wcmVyb2xsIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay13YWl0LXByZXJvbGwiPgorPEFOQ0hPUiBpZD0iZ3N0LWJhc2Utc2luay13YWl0LWNsb2NrIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay13YWl0LWNsb2NrIj4KKzxBTkNIT1IgaWQ9ImdzdC1iYXNlLXNpbmstd2FpdC1lb3MiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXdhaXQtZW9zIj4KKzxBTkNIT1IgaWQ9ImdzdC1iYXNlLXNpbmstc2V0LXN5bmMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXNldC1zeW5jIj4KKzxBTkNIT1IgaWQ9ImdzdC1iYXNlLXNpbmstZ2V0LXN5bmMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWdldC1zeW5jIj4KKzxBTkNIT1IgaWQ9ImdzdC1iYXNlLXNpbmstc2V0LW1heC1sYXRlbmVzcyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstc2V0LW1heC1sYXRlbmVzcyI+Cis8QU5DSE9SIGlkPSJnc3QtYmFzZS1zaW5rLWdldC1tYXgtbGF0ZW5lc3MiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWdldC1tYXgtbGF0ZW5lc3MiPgorPEFOQ0hPUiBpZD0iZ3N0LWJhc2Utc2luay1zZXQtcW9zLWVuYWJsZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXNldC1xb3MtZW5hYmxlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYmFzZS1zaW5rLWlzLXFvcy1lbmFibGVkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1pcy1xb3MtZW5hYmxlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYmFzZS1zaW5rLXNldC1hc3luYy1lbmFibGVkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1zZXQtYXN5bmMtZW5hYmxlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYmFzZS1zaW5rLWlzLWFzeW5jLWVuYWJsZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWlzLWFzeW5jLWVuYWJsZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJhc2Utc2luay1zZXQtdHMtb2Zmc2V0IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1zZXQtdHMtb2Zmc2V0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1iYXNlLXNpbmstZ2V0LXRzLW9mZnNldCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstZ2V0LXRzLW9mZnNldCI+Cis8QU5DSE9SIGlkPSJnc3QtYmFzZS1zaW5rLXNldC1yZW5kZXItZGVsYXkiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXNldC1yZW5kZXItZGVsYXkiPgorPEFOQ0hPUiBpZD0iZ3N0LWJhc2Utc2luay1nZXQtcmVuZGVyLWRlbGF5IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1nZXQtcmVuZGVyLWRlbGF5Ij4KKzxBTkNIT1IgaWQ9ImdzdC1iYXNlLXNpbmstc2V0LWxhc3QtYnVmZmVyLWVuYWJsZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXNldC1sYXN0LWJ1ZmZlci1lbmFibGVkIj4KKzxBTkNIT1IgaWQ9ImdzdC1iYXNlLXNpbmstaXMtbGFzdC1idWZmZXItZW5hYmxlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstaXMtbGFzdC1idWZmZXItZW5hYmxlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYmFzZS1zaW5rLWdldC1sYXN0LWJ1ZmZlciIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstZ2V0LWxhc3QtYnVmZmVyIj4KKzxBTkNIT1IgaWQ9ImdzdC1iYXNlLXNpbmstc2V0LWJsb2Nrc2l6ZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstc2V0LWJsb2Nrc2l6ZSI+Cis8QU5DSE9SIGlkPSJnc3QtYmFzZS1zaW5rLWdldC1ibG9ja3NpemUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWdldC1ibG9ja3NpemUiPgorPEFOQ0hPUiBpZD0iZ3N0LWJhc2Utc2luay1nZXQtdGhyb3R0bGUtdGltZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstZ2V0LXRocm90dGxlLXRpbWUiPgorPEFOQ0hPUiBpZD0iZ3N0LWJhc2Utc2luay1zZXQtdGhyb3R0bGUtdGltZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstc2V0LXRocm90dGxlLXRpbWUiPgorPEFOQ0hPUiBpZD0iR1NULUJBU0UtU0lOSy1QQUQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlU2luay5odG1sI0dTVC1CQVNFLVNJTkstUEFEOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUJBU0UtU0lOSy1HRVQtUFJFUk9MTC1DT05EOkNBUFMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNpbmsuaHRtbCNHU1QtQkFTRS1TSU5LLUdFVC1QUkVST0xMLUNPTkQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQkFTRS1TSU5LLUdFVC1QUkVST0xMLUxPQ0s6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlU2luay5odG1sI0dTVC1CQVNFLVNJTkstR0VULVBSRVJPTEwtTE9DSzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1CQVNFLVNJTkstUFJFUk9MTC1CUk9BRENBU1Q6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlU2luay5odG1sI0dTVC1CQVNFLVNJTkstUFJFUk9MTC1CUk9BRENBU1Q6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQkFTRS1TSU5LLVBSRVJPTEwtTE9DSzpDQVBTIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTaW5rLmh0bWwjR1NULUJBU0UtU0lOSy1QUkVST0xMLUxPQ0s6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQkFTRS1TSU5LLVBSRVJPTEwtU0lHTkFMOkNBUFMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNpbmsuaHRtbCNHU1QtQkFTRS1TSU5LLVBSRVJPTEwtU0lHTkFMOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUJBU0UtU0lOSy1QUkVST0xMLVRJTUVELVdBSVQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlU2luay5odG1sI0dTVC1CQVNFLVNJTkstUFJFUk9MTC1USU1FRC1XQUlUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUJBU0UtU0lOSy1QUkVST0xMLVRSWUxPQ0s6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlU2luay5odG1sI0dTVC1CQVNFLVNJTkstUFJFUk9MTC1UUllMT0NLOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUJBU0UtU0lOSy1QUkVST0xMLVVOTE9DSzpDQVBTIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTaW5rLmh0bWwjR1NULUJBU0UtU0lOSy1QUkVST0xMLVVOTE9DSzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1CQVNFLVNJTkstUFJFUk9MTC1XQUlUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNpbmsuaHRtbCNHU1QtQkFTRS1TSU5LLVBSRVJPTEwtV0FJVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdzdEJhc2VTaW5rLnByb3BlcnR5LWRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay5wcm9wZXJ0eS1kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdEJhc2VTaW5rLS1hc3luYyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1hc3luYyI+Cis8QU5DSE9SIGlkPSJHc3RCYXNlU2luay0tYmxvY2tzaXplIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstLWJsb2Nrc2l6ZSI+Cis8QU5DSE9SIGlkPSJHc3RCYXNlU2luay0tZW5hYmxlLWxhc3QtYnVmZmVyIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstLWVuYWJsZS1sYXN0LWJ1ZmZlciI+Cis8QU5DSE9SIGlkPSJHc3RCYXNlU2luay0tbGFzdC1idWZmZXIiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay0tbGFzdC1idWZmZXIiPgorPEFOQ0hPUiBpZD0iR3N0QmFzZVNpbmstLW1heC1sYXRlbmVzcyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1tYXgtbGF0ZW5lc3MiPgorPEFOQ0hPUiBpZD0iR3N0QmFzZVNpbmstLXFvcyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1xb3MiPgorPEFOQ0hPUiBpZD0iR3N0QmFzZVNpbmstLXJlbmRlci1kZWxheSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1yZW5kZXItZGVsYXkiPgorPEFOQ0hPUiBpZD0iR3N0QmFzZVNpbmstLXN5bmMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay0tc3luYyI+Cis8QU5DSE9SIGlkPSJHc3RCYXNlU2luay0tdGhyb3R0bGUtdGltZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS10aHJvdHRsZS10aW1lIj4KKzxBTkNIT1IgaWQ9IkdzdEJhc2VTaW5rLS10cy1vZmZzZXQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay0tdHMtb2Zmc2V0Ij4KKzxBTkNIT1IgaWQ9IkdzdEJhc2VTaW5rLnNlZS1hbHNvIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmsuc2VlLWFsc28iPgorPEFOQ0hPUiBpZD0iR3N0QmFzZVRyYW5zZm9ybSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlVHJhbnNmb3JtLmh0bWwiPgorPEFOQ0hPUiBpZD0iR3N0QmFzZVRyYW5zZm9ybS5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybS5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJHc3RCYXNlVHJhbnNmb3JtLm9iamVjdC1oaWVyYXJjaHkiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm0ub2JqZWN0LWhpZXJhcmNoeSI+Cis8QU5DSE9SIGlkPSJHc3RCYXNlVHJhbnNmb3JtLnByb3BlcnRpZXMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm0ucHJvcGVydGllcyI+Cis8QU5DSE9SIGlkPSJHc3RCYXNlVHJhbnNmb3JtLmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdEJhc2VUcmFuc2Zvcm0uZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybS5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdEJhc2VUcmFuc2Zvcm0tc3RydWN0IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLXN0cnVjdCI+Cis8QU5DSE9SIGlkPSJHc3RCYXNlVHJhbnNmb3JtQ2xhc3MiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm1DbGFzcyI+Cis8QU5DSE9SIGlkPSJnc3QtYmFzZS10cmFuc2Zvcm0taXMtcGFzc3Rocm91Z2giIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1pcy1wYXNzdGhyb3VnaCI+Cis8QU5DSE9SIGlkPSJnc3QtYmFzZS10cmFuc2Zvcm0tc2V0LXBhc3N0aHJvdWdoIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0tc2V0LXBhc3N0aHJvdWdoIj4KKzxBTkNIT1IgaWQ9ImdzdC1iYXNlLXRyYW5zZm9ybS1pcy1pbi1wbGFjZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlVHJhbnNmb3JtLmh0bWwjZ3N0LWJhc2UtdHJhbnNmb3JtLWlzLWluLXBsYWNlIj4KKzxBTkNIT1IgaWQ9ImdzdC1iYXNlLXRyYW5zZm9ybS1zZXQtaW4tcGxhY2UiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1zZXQtaW4tcGxhY2UiPgorPEFOQ0hPUiBpZD0iZ3N0LWJhc2UtdHJhbnNmb3JtLWlzLXFvcy1lbmFibGVkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0taXMtcW9zLWVuYWJsZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJhc2UtdHJhbnNmb3JtLXNldC1xb3MtZW5hYmxlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlVHJhbnNmb3JtLmh0bWwjZ3N0LWJhc2UtdHJhbnNmb3JtLXNldC1xb3MtZW5hYmxlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYmFzZS10cmFuc2Zvcm0tdXBkYXRlLXFvcyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlVHJhbnNmb3JtLmh0bWwjZ3N0LWJhc2UtdHJhbnNmb3JtLXVwZGF0ZS1xb3MiPgorPEFOQ0hPUiBpZD0iZ3N0LWJhc2UtdHJhbnNmb3JtLXNldC1nYXAtYXdhcmUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1zZXQtZ2FwLWF3YXJlIj4KKzxBTkNIT1IgaWQ9ImdzdC1iYXNlLXRyYW5zZm9ybS1zdWdnZXN0IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0tc3VnZ2VzdCI+Cis8QU5DSE9SIGlkPSJnc3QtYmFzZS10cmFuc2Zvcm0tcmVjb25maWd1cmUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1yZWNvbmZpZ3VyZSI+Cis8QU5DSE9SIGlkPSJHU1QtQkFTRS1UUkFOU0ZPUk0tU0lOSy1OQU1FOkNBUFMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dTVC1CQVNFLVRSQU5TRk9STS1TSU5LLU5BTUU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQkFTRS1UUkFOU0ZPUk0tU1JDLU5BTUU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlVHJhbnNmb3JtLmh0bWwjR1NULUJBU0UtVFJBTlNGT1JNLVNSQy1OQU1FOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUJBU0UtVFJBTlNGT1JNLVNJTkstUEFEOkNBUFMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dTVC1CQVNFLVRSQU5TRk9STS1TSU5LLVBBRDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1CQVNFLVRSQU5TRk9STS1TUkMtUEFEOkNBUFMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dTVC1CQVNFLVRSQU5TRk9STS1TUkMtUEFEOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUJBU0UtVFJBTlNGT1JNLUZMT1ctRFJPUFBFRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHU1QtQkFTRS1UUkFOU0ZPUk0tRkxPVy1EUk9QUEVEOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUJBU0UtVFJBTlNGT1JNLUxPQ0s6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlVHJhbnNmb3JtLmh0bWwjR1NULUJBU0UtVFJBTlNGT1JNLUxPQ0s6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtQkFTRS1UUkFOU0ZPUk0tVU5MT0NLOkNBUFMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dTVC1CQVNFLVRSQU5TRk9STS1VTkxPQ0s6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHc3RCYXNlVHJhbnNmb3JtLnByb3BlcnR5LWRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm0ucHJvcGVydHktZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RCYXNlVHJhbnNmb3JtLS1xb3MiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm0tLXFvcyI+Cis8QU5DSE9SIGlkPSJHc3RCYXNlVHJhbnNmb3JtLnNlZS1hbHNvIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLnNlZS1hbHNvIj4KKzxBTkNIT1IgaWQ9IkdzdFB1c2hTcmMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0UHVzaFNyYy5odG1sIj4KKzxBTkNIT1IgaWQ9IkdzdFB1c2hTcmMuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0UHVzaFNyYy5odG1sI0dzdFB1c2hTcmMuc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iR3N0UHVzaFNyYy5vYmplY3QtaGllcmFyY2h5IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdFB1c2hTcmMuaHRtbCNHc3RQdXNoU3JjLm9iamVjdC1oaWVyYXJjaHkiPgorPEFOQ0hPUiBpZD0iR3N0UHVzaFNyYy5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RQdXNoU3JjLmh0bWwjR3N0UHVzaFNyYy5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJHc3RQdXNoU3JjLmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0UHVzaFNyYy5odG1sI0dzdFB1c2hTcmMuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RQdXNoU3JjLXN0cnVjdCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RQdXNoU3JjLmh0bWwjR3N0UHVzaFNyYy1zdHJ1Y3QiPgorPEFOQ0hPUiBpZD0iR3N0UHVzaFNyYy5zZWUtYWxzbyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RQdXNoU3JjLmh0bWwjR3N0UHVzaFNyYy5zZWUtYWxzbyI+Cis8QU5DSE9SIGlkPSJHc3RBZGFwdGVyIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEFkYXB0ZXIuaHRtbCI+Cis8QU5DSE9SIGlkPSJHc3RBZGFwdGVyLnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEFkYXB0ZXIuaHRtbCNHc3RBZGFwdGVyLnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9IkdzdEFkYXB0ZXIub2JqZWN0LWhpZXJhcmNoeSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RBZGFwdGVyLmh0bWwjR3N0QWRhcHRlci5vYmplY3QtaGllcmFyY2h5Ij4KKzxBTkNIT1IgaWQ9IkdzdEFkYXB0ZXIuZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QWRhcHRlci5odG1sI0dzdEFkYXB0ZXIuZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iR3N0QWRhcHRlci5kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEFkYXB0ZXIuaHRtbCNHc3RBZGFwdGVyLmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0QWRhcHRlci1zdHJ1Y3QiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QWRhcHRlci5odG1sI0dzdEFkYXB0ZXItc3RydWN0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1hZGFwdGVyLW5ldyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItbmV3Ij4KKzxBTkNIT1IgaWQ9ImdzdC1hZGFwdGVyLWNsZWFyIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1jbGVhciI+Cis8QU5DSE9SIGlkPSJnc3QtYWRhcHRlci1wdXNoIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1wdXNoIj4KKzxBTkNIT1IgaWQ9ImdzdC1hZGFwdGVyLW1hcCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItbWFwIj4KKzxBTkNIT1IgaWQ9ImdzdC1hZGFwdGVyLXVubWFwIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci11bm1hcCI+Cis8QU5DSE9SIGlkPSJnc3QtYWRhcHRlci1jb3B5IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1jb3B5Ij4KKzxBTkNIT1IgaWQ9ImdzdC1hZGFwdGVyLWZsdXNoIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1mbHVzaCI+Cis8QU5DSE9SIGlkPSJnc3QtYWRhcHRlci1hdmFpbGFibGUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLWF2YWlsYWJsZSI+Cis8QU5DSE9SIGlkPSJnc3QtYWRhcHRlci1hdmFpbGFibGUtZmFzdCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItYXZhaWxhYmxlLWZhc3QiPgorPEFOQ0hPUiBpZD0iZ3N0LWFkYXB0ZXItdGFrZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItdGFrZSI+Cis8QU5DSE9SIGlkPSJnc3QtYWRhcHRlci10YWtlLWJ1ZmZlciIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItdGFrZS1idWZmZXIiPgorPEFOQ0hPUiBpZD0iZ3N0LWFkYXB0ZXItdGFrZS1saXN0IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci10YWtlLWxpc3QiPgorPEFOQ0hPUiBpZD0iZ3N0LWFkYXB0ZXItcHJldi10aW1lc3RhbXAiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXByZXYtdGltZXN0YW1wIj4KKzxBTkNIT1IgaWQ9ImdzdC1hZGFwdGVyLW1hc2tlZC1zY2FuLXVpbnQzMiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItbWFza2VkLXNjYW4tdWludDMyIj4KKzxBTkNIT1IgaWQ9ImdzdC1hZGFwdGVyLW1hc2tlZC1zY2FuLXVpbnQzMi1wZWVrIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1tYXNrZWQtc2Nhbi11aW50MzItcGVlayI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdEJpdFJlYWRlciIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiPgorPEFOQ0hPUiBpZD0iR1NULUJJVC1SRUFERVItSU5JVDpDQVBTIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dTVC1CSVQtUkVBREVSLUlOSVQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJnc3QtYml0LXJlYWRlci1uZXciIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItbmV3Ij4KKzxBTkNIT1IgaWQ9ImdzdC1iaXQtcmVhZGVyLWZyZWUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItZnJlZSI+Cis8QU5DSE9SIGlkPSJnc3QtYml0LXJlYWRlci1pbml0IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWluaXQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJpdC1yZWFkZXItZ2V0LXBvcyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtcG9zIj4KKzxBTkNIT1IgaWQ9ImdzdC1iaXQtcmVhZGVyLWdldC1yZW1haW5pbmciIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItZ2V0LXJlbWFpbmluZyI+Cis8QU5DSE9SIGlkPSJnc3QtYml0LXJlYWRlci1zZXQtcG9zIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLXNldC1wb3MiPgorPEFOQ0hPUiBpZD0iZ3N0LWJpdC1yZWFkZXItZ2V0LXNpemUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItZ2V0LXNpemUiPgorPEFOQ0hPUiBpZD0iZ3N0LWJpdC1yZWFkZXItc2tpcCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1za2lwIj4KKzxBTkNIT1IgaWQ9ImdzdC1iaXQtcmVhZGVyLXNraXAtdG8tYnl0ZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1za2lwLXRvLWJ5dGUiPgorPEFOQ0hPUiBpZD0iZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDE2IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQxNiI+Cis8QU5DSE9SIGlkPSJnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50MzIiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDMyIj4KKzxBTkNIT1IgaWQ9ImdzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQ2NCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50NjQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDgiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDgiPgorPEFOQ0hPUiBpZD0iZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQxNiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDE2Ij4KKzxBTkNIT1IgaWQ9ImdzdC1iaXQtcmVhZGVyLXBlZWstYml0cy11aW50MzIiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQzMiI+Cis8QU5DSE9SIGlkPSJnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDY0IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLXBlZWstYml0cy11aW50NjQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQ4IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLXBlZWstYml0cy11aW50OCI+Cis8QU5DSE9SIGlkPSJnc3QtYml0LXJlYWRlci1za2lwLXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1za2lwLXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYml0LXJlYWRlci1za2lwLXRvLWJ5dGUtdW5jaGVja2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLXNraXAtdG8tYnl0ZS11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDE2LXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50MTYtdW5jaGVja2VkIj4KKzxBTkNIT1IgaWQ9ImdzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQzMi11bmNoZWNrZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDMyLXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50NjQtdW5jaGVja2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQ2NC11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDgtdW5jaGVja2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQ4LXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDE2LXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDE2LXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDMyLXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDMyLXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDY0LXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDY0LXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDgtdW5jaGVja2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLXBlZWstYml0cy11aW50OC11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlciIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdEJ5dGVSZWFkZXIiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiPgorPEFOQ0hPUiBpZD0iR1NULUJZVEUtUkVBREVSLUlOSVQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR1NULUJZVEUtUkVBREVSLUlOSVQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItbmV3IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItbmV3Ij4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXJlYWRlci1mcmVlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZnJlZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItaW5pdCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWluaXQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1wb3MiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtcG9zIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXJlYWRlci1nZXQtcmVtYWluaW5nIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXJlbWFpbmluZyI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItc2V0LXBvcyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXNldC1wb3MiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1zaXplIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXNpemUiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLXNraXAiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1za2lwIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50OCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQ4Ij4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50MTYtYmUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MTYtYmUiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQxNi1sZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQxNi1sZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDI0LWJlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDI0LWJlIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50MjQtbGUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MjQtbGUiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQzMi1iZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQzMi1iZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDMyLWxlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDMyLWxlIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50NjQtYmUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50NjQtYmUiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQ2NC1sZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQ2NC1sZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQ4IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQ4Ij4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDE2LWJlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQxNi1iZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQxNi1sZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MTYtbGUiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MjQtYmUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDI0LWJlIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDI0LWxlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQyNC1sZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQzMi1iZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MzItYmUiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MzItbGUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDMyLWxlIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDY0LWJlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQ2NC1iZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQ2NC1sZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50NjQtbGUiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50OCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50OCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQxNi1iZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MTYtYmUiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MTYtbGUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDE2LWxlIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWludDI0LWJlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQyNC1iZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQyNC1sZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MjQtbGUiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MzItYmUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDMyLWJlIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWludDMyLWxlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQzMi1sZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQ2NC1iZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50NjQtYmUiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50NjQtbGUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDY0LWxlIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQ4IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50OCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MTYtYmUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQxNi1iZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MTYtbGUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQxNi1sZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MjQtYmUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQyNC1iZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MjQtbGUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQyNC1sZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MzItYmUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQzMi1iZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MzItbGUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQzMi1sZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50NjQtYmUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQ2NC1iZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50NjQtbGUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQ2NC1sZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0MzItbGUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQzMi1sZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0MzItYmUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQzMi1iZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0NjQtbGUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQ2NC1sZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0NjQtYmUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQ2NC1iZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDMyLWxlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDMyLWxlIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0MzItYmUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0MzItYmUiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZmxvYXQ2NC1sZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZmxvYXQ2NC1sZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDY0LWJlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDY0LWJlIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXJlYWRlci1nZXQtZGF0YSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1kYXRhIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXJlYWRlci1kdXAtZGF0YSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWR1cC1kYXRhIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWRhdGEiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWRhdGEiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLW1hc2tlZC1zY2FuLXVpbnQzMiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLW1hc2tlZC1zY2FuLXVpbnQzMiI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXN0cmluZyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1zdHJpbmciPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1zdHJpbmctdXRmOCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1zdHJpbmctdXRmOCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1zdHJpbmciIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXN0cmluZyI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1zdHJpbmctdXRmOCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstc3RyaW5nLXV0ZjgiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLWR1cC1zdHJpbmciIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1kdXAtc3RyaW5nIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXJlYWRlci1kdXAtc3RyaW5nLXV0ZjgiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1kdXAtc3RyaW5nLXV0ZjgiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLWR1cC1zdHJpbmctdXRmMTYiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1kdXAtc3RyaW5nLXV0ZjE2Ij4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXJlYWRlci1kdXAtc3RyaW5nLXV0ZjMyIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZHVwLXN0cmluZy11dGYzMiI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItc2tpcC1zdHJpbmciIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1za2lwLXN0cmluZyI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItc2tpcC1zdHJpbmctdXRmOCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXNraXAtc3RyaW5nLXV0ZjgiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLXNraXAtc3RyaW5nLXV0ZjE2IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItc2tpcC1zdHJpbmctdXRmMTYiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLXNraXAtc3RyaW5nLXV0ZjMyIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItc2tpcC1zdHJpbmctdXRmMzIiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLXNraXAtdW5jaGVja2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItc2tpcC11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQ4LXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQ4LXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDE2LWJlLXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQxNi1iZS11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQxNi1sZS11bmNoZWNrZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MTYtbGUtdW5jaGVja2VkIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50MjQtYmUtdW5jaGVja2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDI0LWJlLXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDI0LWxlLXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQyNC1sZS11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQzMi1iZS11bmNoZWNrZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MzItYmUtdW5jaGVja2VkIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50MzItbGUtdW5jaGVja2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDMyLWxlLXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDY0LWJlLXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQ2NC1iZS11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQ2NC1sZS11bmNoZWNrZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50NjQtbGUtdW5jaGVja2VkIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDgtdW5jaGVja2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQ4LXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQxNi1iZS11bmNoZWNrZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDE2LWJlLXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQxNi1sZS11bmNoZWNrZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDE2LWxlLXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQyNC1iZS11bmNoZWNrZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDI0LWJlLXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQyNC1sZS11bmNoZWNrZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDI0LWxlLXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQzMi1iZS11bmNoZWNrZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDMyLWJlLXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQzMi1sZS11bmNoZWNrZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDMyLWxlLXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQ2NC1iZS11bmNoZWNrZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDY0LWJlLXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQ2NC1sZS11bmNoZWNrZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDY0LWxlLXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQ4LXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50OC11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MTYtYmUtdW5jaGVja2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQxNi1iZS11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MTYtbGUtdW5jaGVja2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQxNi1sZS11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MjQtYmUtdW5jaGVja2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQyNC1iZS11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MjQtbGUtdW5jaGVja2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQyNC1sZS11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MzItYmUtdW5jaGVja2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQzMi1iZS11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MzItbGUtdW5jaGVja2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQzMi1sZS11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50NjQtYmUtdW5jaGVja2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQ2NC1iZS11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50NjQtbGUtdW5jaGVja2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQ2NC1sZS11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDgtdW5jaGVja2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50OC11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDE2LWJlLXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDE2LWJlLXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MTYtbGUtdW5jaGVja2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MTYtbGUtdW5jaGVja2VkIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQyNC1iZS11bmNoZWNrZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQyNC1iZS11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDI0LWxlLXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDI0LWxlLXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MzItYmUtdW5jaGVja2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MzItYmUtdW5jaGVja2VkIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQzMi1sZS11bmNoZWNrZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQzMi1sZS11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDY0LWJlLXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDY0LWJlLXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50NjQtbGUtdW5jaGVja2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50NjQtbGUtdW5jaGVja2VkIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQzMi1sZS11bmNoZWNrZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQzMi1sZS11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1mbG9hdDMyLWJlLXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1mbG9hdDMyLWJlLXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0NjQtbGUtdW5jaGVja2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0NjQtbGUtdW5jaGVja2VkIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQ2NC1iZS11bmNoZWNrZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQ2NC1iZS11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZmxvYXQzMi1sZS11bmNoZWNrZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0MzItbGUtdW5jaGVja2VkIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0MzItYmUtdW5jaGVja2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDMyLWJlLXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDY0LWxlLXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZmxvYXQ2NC1sZS11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZmxvYXQ2NC1iZS11bmNoZWNrZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0NjQtYmUtdW5jaGVja2VkIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXJlYWRlci1kdXAtZGF0YS11bmNoZWNrZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1kdXAtZGF0YS11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1kYXRhLXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1kYXRhLXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1kYXRhLXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZGF0YS11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlciIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdEJ5dGVXcml0ZXIiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtd3JpdGVyLW5ldyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLW5ldyI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS13cml0ZXItbmV3LXdpdGgtZGF0YSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLW5ldy13aXRoLWRhdGEiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtd3JpdGVyLW5ldy13aXRoLXNpemUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1uZXctd2l0aC1zaXplIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXdyaXRlci1pbml0IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItaW5pdCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS13cml0ZXItaW5pdC13aXRoLWRhdGEiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1pbml0LXdpdGgtZGF0YSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS13cml0ZXItaW5pdC13aXRoLXNpemUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1pbml0LXdpdGgtc2l6ZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS13cml0ZXItZnJlZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLWZyZWUiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtd3JpdGVyLWZyZWUtYW5kLWdldC1idWZmZXIiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1mcmVlLWFuZC1nZXQtYnVmZmVyIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXdyaXRlci1mcmVlLWFuZC1nZXQtZGF0YSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLWZyZWUtYW5kLWdldC1kYXRhIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXdyaXRlci1yZXNldCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXJlc2V0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXdyaXRlci1yZXNldC1hbmQtZ2V0LWRhdGEiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1yZXNldC1hbmQtZ2V0LWRhdGEiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtd3JpdGVyLXJlc2V0LWFuZC1nZXQtYnVmZmVyIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcmVzZXQtYW5kLWdldC1idWZmZXIiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtd3JpdGVyLWdldC1wb3MiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1nZXQtcG9zIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXdyaXRlci1zZXQtcG9zIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItc2V0LXBvcyI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS13cml0ZXItZ2V0LXJlbWFpbmluZyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLWdldC1yZW1haW5pbmciPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtd3JpdGVyLWdldC1zaXplIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItZ2V0LXNpemUiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtd3JpdGVyLWVuc3VyZS1mcmVlLXNwYWNlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItZW5zdXJlLWZyZWUtc3BhY2UiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQ4IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDgiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQxNi1iZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQxNi1iZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDE2LWxlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDE2LWxlIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXdyaXRlci1wdXQtaW50MjQtYmUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MjQtYmUiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQyNC1sZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQyNC1sZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDMyLWJlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDMyLWJlIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXdyaXRlci1wdXQtaW50MzItbGUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MzItbGUiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQ2NC1iZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQ2NC1iZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDY0LWxlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDY0LWxlIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDgiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDgiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MTYtYmUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDE2LWJlIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDE2LWxlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQxNi1sZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQyNC1iZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MjQtYmUiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MjQtbGUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDI0LWxlIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDMyLWJlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQzMi1iZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQzMi1sZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MzItbGUiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50NjQtYmUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDY0LWJlIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDY0LWxlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQ2NC1sZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0MzItYmUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQzMi1iZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0MzItbGUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQzMi1sZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0NjQtYmUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQ2NC1iZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0NjQtbGUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQ2NC1sZSI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS13cml0ZXItcHV0LXN0cmluZyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1zdHJpbmciPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1zdHJpbmctdXRmMTYiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtc3RyaW5nLXV0ZjE2Ij4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXdyaXRlci1wdXQtc3RyaW5nLXV0ZjMyIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXN0cmluZy11dGYzMiI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS13cml0ZXItcHV0LXN0cmluZy11dGY4IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXN0cmluZy11dGY4Ij4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXdyaXRlci1wdXQtZGF0YSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1kYXRhIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXdyaXRlci1maWxsIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItZmlsbCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDgtdW5jaGVja2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDgtdW5jaGVja2VkIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXdyaXRlci1wdXQtaW50MTYtYmUtdW5jaGVja2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDE2LWJlLXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDE2LWxlLXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQxNi1sZS11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQyNC1iZS11bmNoZWNrZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MjQtYmUtdW5jaGVja2VkIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXdyaXRlci1wdXQtaW50MjQtbGUtdW5jaGVja2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDI0LWxlLXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDMyLWJlLXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQzMi1iZS11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQzMi1sZS11bmNoZWNrZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MzItbGUtdW5jaGVja2VkIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXdyaXRlci1wdXQtaW50NjQtYmUtdW5jaGVja2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDY0LWJlLXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDY0LWxlLXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQ2NC1sZS11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50OC11bmNoZWNrZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDgtdW5jaGVja2VkIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDE2LWJlLXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MTYtYmUtdW5jaGVja2VkIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDE2LWxlLXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MTYtbGUtdW5jaGVja2VkIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDI0LWJlLXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MjQtYmUtdW5jaGVja2VkIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDI0LWxlLXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MjQtbGUtdW5jaGVja2VkIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDMyLWJlLXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MzItYmUtdW5jaGVja2VkIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDMyLWxlLXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MzItbGUtdW5jaGVja2VkIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDY0LWJlLXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50NjQtYmUtdW5jaGVja2VkIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDY0LWxlLXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50NjQtbGUtdW5jaGVja2VkIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQzMi1iZS11bmNoZWNrZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQzMi1iZS11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1mbG9hdDMyLWxlLXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1mbG9hdDMyLWxlLXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0NjQtYmUtdW5jaGVja2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0NjQtYmUtdW5jaGVja2VkIj4KKzxBTkNIT1IgaWQ9ImdzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQ2NC1sZS11bmNoZWNrZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQ2NC1sZS11bmNoZWNrZWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1kYXRhLXVuY2hlY2tlZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1kYXRhLXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJnc3QtYnl0ZS13cml0ZXItZmlsbC11bmNoZWNrZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1maWxsLXVuY2hlY2tlZCI+Cis8QU5DSE9SIGlkPSJHc3RDb2xsZWN0UGFkcyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb2xsZWN0UGFkcy5odG1sIj4KKzxBTkNIT1IgaWQ9IkdzdENvbGxlY3RQYWRzLnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdFBhZHMuc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iR3N0Q29sbGVjdFBhZHMub2JqZWN0LWhpZXJhcmNoeSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3RQYWRzLm9iamVjdC1oaWVyYXJjaHkiPgorPEFOQ0hPUiBpZD0iR3N0Q29sbGVjdFBhZHMuZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0UGFkcy5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJHc3RDb2xsZWN0UGFkcy5kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdFBhZHMuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RDb2xsZWN0RGF0YSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIj4KKzxBTkNIT1IgaWQ9IkdzdENvbGxlY3RQYWRzLXN0cnVjdCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3RQYWRzLXN0cnVjdCI+Cis8QU5DSE9SIGlkPSJHc3RDb2xsZWN0UGFkc0Z1bmN0aW9uIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdFBhZHNGdW5jdGlvbiI+Cis8QU5DSE9SIGlkPSJHc3RDb2xsZWN0UGFkc0NsaXBGdW5jdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3RQYWRzQ2xpcEZ1bmN0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdENvbGxlY3REYXRhRGVzdHJveU5vdGlmeSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhRGVzdHJveU5vdGlmeSI+Cis8QU5DSE9SIGlkPSJnc3QtY29sbGVjdC1wYWRzLW5ldyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtbmV3Ij4KKzxBTkNIT1IgaWQ9ImdzdC1jb2xsZWN0LXBhZHMtc2V0LWZ1bmN0aW9uIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1zZXQtZnVuY3Rpb24iPgorPEFOQ0hPUiBpZD0iZ3N0LWNvbGxlY3QtcGFkcy1zZXQtY2xpcC1mdW5jdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtc2V0LWNsaXAtZnVuY3Rpb24iPgorPEFOQ0hPUiBpZD0iZ3N0LWNvbGxlY3QtcGFkcy1hZGQtcGFkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1hZGQtcGFkIj4KKzxBTkNIT1IgaWQ9ImdzdC1jb2xsZWN0LXBhZHMtYWRkLXBhZC1mdWxsIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1hZGQtcGFkLWZ1bGwiPgorPEFOQ0hPUiBpZD0iZ3N0LWNvbGxlY3QtcGFkcy1yZW1vdmUtcGFkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1yZW1vdmUtcGFkIj4KKzxBTkNIT1IgaWQ9ImdzdC1jb2xsZWN0LXBhZHMtaXMtYWN0aXZlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1pcy1hY3RpdmUiPgorPEFOQ0hPUiBpZD0iZ3N0LWNvbGxlY3QtcGFkcy1jb2xsZWN0IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1jb2xsZWN0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1jb2xsZWN0LXBhZHMtY29sbGVjdC1yYW5nZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtY29sbGVjdC1yYW5nZSI+Cis8QU5DSE9SIGlkPSJnc3QtY29sbGVjdC1wYWRzLXN0YXJ0IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1zdGFydCI+Cis8QU5DSE9SIGlkPSJnc3QtY29sbGVjdC1wYWRzLXN0b3AiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXN0b3AiPgorPEFOQ0hPUiBpZD0iZ3N0LWNvbGxlY3QtcGFkcy1zZXQtZmx1c2hpbmciIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXNldC1mbHVzaGluZyI+Cis8QU5DSE9SIGlkPSJnc3QtY29sbGVjdC1wYWRzLXBlZWsiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXBlZWsiPgorPEFOQ0hPUiBpZD0iZ3N0LWNvbGxlY3QtcGFkcy1wb3AiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXBvcCI+Cis8QU5DSE9SIGlkPSJnc3QtY29sbGVjdC1wYWRzLWF2YWlsYWJsZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtYXZhaWxhYmxlIj4KKzxBTkNIT1IgaWQ9ImdzdC1jb2xsZWN0LXBhZHMtcmVhZC1idWZmZXIiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXJlYWQtYnVmZmVyIj4KKzxBTkNIT1IgaWQ9ImdzdC1jb2xsZWN0LXBhZHMtdGFrZS1idWZmZXIiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXRha2UtYnVmZmVyIj4KKzxBTkNIT1IgaWQ9ImdzdC1jb2xsZWN0LXBhZHMtZmx1c2giIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLWZsdXNoIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCNnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI2dzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCNnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9ImdzdC10eXBlLWZpbmQtaGVscGVyIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwjZ3N0LXR5cGUtZmluZC1oZWxwZXIiPgorPEFOQ0hPUiBpZD0iZ3N0LXR5cGUtZmluZC1oZWxwZXItZm9yLWJ1ZmZlciIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI2dzdC10eXBlLWZpbmQtaGVscGVyLWZvci1idWZmZXIiPgorPEFOQ0hPUiBpZD0iZ3N0LXR5cGUtZmluZC1oZWxwZXItZm9yLWV4dGVuc2lvbiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI2dzdC10eXBlLWZpbmQtaGVscGVyLWZvci1leHRlbnNpb24iPgorPEFOQ0hPUiBpZD0iZ3N0LXR5cGUtZmluZC1oZWxwZXItZm9yLWRhdGEiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCNnc3QtdHlwZS1maW5kLWhlbHBlci1mb3ItZGF0YSI+Cis8QU5DSE9SIGlkPSJHc3RUeXBlRmluZEhlbHBlckdldFJhbmdlRnVuY3Rpb24iIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCNHc3RUeXBlRmluZEhlbHBlckdldFJhbmdlRnVuY3Rpb24iPgorPEFOQ0hPUiBpZD0iZ3N0LXR5cGUtZmluZC1oZWxwZXItZ2V0LXJhbmdlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwjZ3N0LXR5cGUtZmluZC1oZWxwZXItZ2V0LXJhbmdlIj4KKzxBTkNIT1IgaWQ9ImdzdC10eXBlLWZpbmQtaGVscGVyLWdldC1yYW5nZS1leHQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCNnc3QtdHlwZS1maW5kLWhlbHBlci1nZXQtcmFuZ2UtZXh0Ij4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0RGF0YVF1ZXVlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZSI+Cis8QU5DSE9SIGlkPSJHc3REYXRhUXVldWVTaXplIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZVNpemUiPgorPEFOQ0hPUiBpZD0iR3N0RGF0YVF1ZXVlQ2hlY2tGdWxsRnVuY3Rpb24iIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlQ2hlY2tGdWxsRnVuY3Rpb24iPgorPEFOQ0hPUiBpZD0iR3N0RGF0YVF1ZXVlSXRlbSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVJdGVtIj4KKzxBTkNIT1IgaWQ9IkdzdERhdGFRdWV1ZUVtcHR5Q2FsbGJhY2siIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlRW1wdHlDYWxsYmFjayI+Cis8QU5DSE9SIGlkPSJHc3REYXRhUXVldWVGdWxsQ2FsbGJhY2siIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlRnVsbENhbGxiYWNrIj4KKzxBTkNIT1IgaWQ9ImdzdC1kYXRhLXF1ZXVlLW5ldyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1uZXciPgorPEFOQ0hPUiBpZD0iZ3N0LWRhdGEtcXVldWUtbmV3LWZ1bGwiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjZ3N0LWRhdGEtcXVldWUtbmV3LWZ1bGwiPgorPEFOQ0hPUiBpZD0iZ3N0LWRhdGEtcXVldWUtcHVzaCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1wdXNoIj4KKzxBTkNIT1IgaWQ9ImdzdC1kYXRhLXF1ZXVlLXBvcCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1wb3AiPgorPEFOQ0hPUiBpZD0iZ3N0LWRhdGEtcXVldWUtZmx1c2giIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjZ3N0LWRhdGEtcXVldWUtZmx1c2giPgorPEFOQ0hPUiBpZD0iZ3N0LWRhdGEtcXVldWUtc2V0LWZsdXNoaW5nIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLXNldC1mbHVzaGluZyI+Cis8QU5DSE9SIGlkPSJnc3QtZGF0YS1xdWV1ZS1kcm9wLWhlYWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjZ3N0LWRhdGEtcXVldWUtZHJvcC1oZWFkIj4KKzxBTkNIT1IgaWQ9ImdzdC1kYXRhLXF1ZXVlLWlzLWZ1bGwiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjZ3N0LWRhdGEtcXVldWUtaXMtZnVsbCI+Cis8QU5DSE9SIGlkPSJnc3QtZGF0YS1xdWV1ZS1pcy1lbXB0eSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1pcy1lbXB0eSI+Cis8QU5DSE9SIGlkPSJnc3QtZGF0YS1xdWV1ZS1nZXQtbGV2ZWwiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjZ3N0LWRhdGEtcXVldWUtZ2V0LWxldmVsIj4KKzxBTkNIT1IgaWQ9ImdzdC1kYXRhLXF1ZXVlLWxpbWl0cy1jaGFuZ2VkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLWxpbWl0cy1jaGFuZ2VkIj4KKzxBTkNIT1IgaWQ9IkdzdENvbnRyb2xsZXIiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0Q29udHJvbGxlci5odG1sIj4KKzxBTkNIT1IgaWQ9IkdzdENvbnRyb2xsZXIuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0Q29udHJvbGxlci5odG1sI0dzdENvbnRyb2xsZXIuc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iR3N0Q29udHJvbGxlci5vYmplY3QtaGllcmFyY2h5IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdENvbnRyb2xsZXIuaHRtbCNHc3RDb250cm9sbGVyLm9iamVjdC1oaWVyYXJjaHkiPgorPEFOQ0hPUiBpZD0iR3N0Q29udHJvbGxlci5wcm9wZXJ0aWVzIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdENvbnRyb2xsZXIuaHRtbCNHc3RDb250cm9sbGVyLnByb3BlcnRpZXMiPgorPEFOQ0hPUiBpZD0iR3N0Q29udHJvbGxlci5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb250cm9sbGVyLmh0bWwjR3N0Q29udHJvbGxlci5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJHc3RDb250cm9sbGVyLmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0Q29udHJvbGxlci5odG1sI0dzdENvbnRyb2xsZXIuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RDb250cm9sbGVyLXN0cnVjdCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb250cm9sbGVyLmh0bWwjR3N0Q29udHJvbGxlci1zdHJ1Y3QiPgorPEFOQ0hPUiBpZD0iZ3N0LWNvbnRyb2xsZXItaW5pdCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb250cm9sbGVyLmh0bWwjZ3N0LWNvbnRyb2xsZXItaW5pdCI+Cis8QU5DSE9SIGlkPSJnc3QtY29udHJvbGxlci1uZXciIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLW5ldyI+Cis8QU5DSE9SIGlkPSJnc3QtY29udHJvbGxlci1uZXctbGlzdCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb250cm9sbGVyLmh0bWwjZ3N0LWNvbnRyb2xsZXItbmV3LWxpc3QiPgorPEFOQ0hPUiBpZD0iZ3N0LWNvbnRyb2xsZXItbmV3LXZhbGlzdCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb250cm9sbGVyLmh0bWwjZ3N0LWNvbnRyb2xsZXItbmV3LXZhbGlzdCI+Cis8QU5DSE9SIGlkPSJnc3QtY29udHJvbGxlci1yZW1vdmUtcHJvcGVydGllcyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb250cm9sbGVyLmh0bWwjZ3N0LWNvbnRyb2xsZXItcmVtb3ZlLXByb3BlcnRpZXMiPgorPEFOQ0hPUiBpZD0iZ3N0LWNvbnRyb2xsZXItcmVtb3ZlLXByb3BlcnRpZXMtbGlzdCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb250cm9sbGVyLmh0bWwjZ3N0LWNvbnRyb2xsZXItcmVtb3ZlLXByb3BlcnRpZXMtbGlzdCI+Cis8QU5DSE9SIGlkPSJnc3QtY29udHJvbGxlci1yZW1vdmUtcHJvcGVydGllcy12YWxpc3QiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLXJlbW92ZS1wcm9wZXJ0aWVzLXZhbGlzdCI+Cis8QU5DSE9SIGlkPSJnc3QtY29udHJvbGxlci1zZXQtZGlzYWJsZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLXNldC1kaXNhYmxlZCI+Cis8QU5DSE9SIGlkPSJnc3QtY29udHJvbGxlci1zZXQtcHJvcGVydHktZGlzYWJsZWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLXNldC1wcm9wZXJ0eS1kaXNhYmxlZCI+Cis8QU5DSE9SIGlkPSJnc3QtY29udHJvbGxlci1zdWdnZXN0LW5leHQtc3luYyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb250cm9sbGVyLmh0bWwjZ3N0LWNvbnRyb2xsZXItc3VnZ2VzdC1uZXh0LXN5bmMiPgorPEFOQ0hPUiBpZD0iZ3N0LWNvbnRyb2xsZXItc3luYy12YWx1ZXMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLXN5bmMtdmFsdWVzIj4KKzxBTkNIT1IgaWQ9ImdzdC1jb250cm9sbGVyLWdldC1jb250cm9sLXNvdXJjZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb250cm9sbGVyLmh0bWwjZ3N0LWNvbnRyb2xsZXItZ2V0LWNvbnRyb2wtc291cmNlIj4KKzxBTkNIT1IgaWQ9ImdzdC1jb250cm9sbGVyLXNldC1jb250cm9sLXNvdXJjZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb250cm9sbGVyLmh0bWwjZ3N0LWNvbnRyb2xsZXItc2V0LWNvbnRyb2wtc291cmNlIj4KKzxBTkNIT1IgaWQ9ImdzdC1jb250cm9sbGVyLWdldCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb250cm9sbGVyLmh0bWwjZ3N0LWNvbnRyb2xsZXItZ2V0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1jb250cm9sbGVyLWdldC12YWx1ZS1hcnJheXMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0Q29udHJvbGxlci5odG1sI2dzdC1jb250cm9sbGVyLWdldC12YWx1ZS1hcnJheXMiPgorPEFOQ0hPUiBpZD0iZ3N0LWNvbnRyb2xsZXItZ2V0LXZhbHVlLWFycmF5IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdENvbnRyb2xsZXIuaHRtbCNnc3QtY29udHJvbGxlci1nZXQtdmFsdWUtYXJyYXkiPgorPEFOQ0hPUiBpZD0iR3N0Q29udHJvbGxlci5wcm9wZXJ0eS1kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdENvbnRyb2xsZXIuaHRtbCNHc3RDb250cm9sbGVyLnByb3BlcnR5LWRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0Q29udHJvbGxlci0tY29udHJvbC1yYXRlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdENvbnRyb2xsZXIuaHRtbCNHc3RDb250cm9sbGVyLS1jb250cm9sLXJhdGUiPgorPEFOQ0hPUiBpZD0iR3N0Q29udHJvbFNvdXJjZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb250cm9sU291cmNlLmh0bWwiPgorPEFOQ0hPUiBpZD0iR3N0Q29udHJvbFNvdXJjZS5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZS5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJHc3RDb250cm9sU291cmNlLm9iamVjdC1oaWVyYXJjaHkiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2Uub2JqZWN0LWhpZXJhcmNoeSI+Cis8QU5DSE9SIGlkPSJHc3RDb250cm9sU291cmNlLmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sU291cmNlLmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdENvbnRyb2xTb3VyY2UuZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZS5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdENvbnRyb2xTb3VyY2Utc3RydWN0IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sU291cmNlLXN0cnVjdCI+Cis8QU5DSE9SIGlkPSJHc3RDb250cm9sU291cmNlQ2xhc3MiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2VDbGFzcyI+Cis8QU5DSE9SIGlkPSJHc3RDb250cm9sU291cmNlQmluZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZUJpbmQiPgorPEFOQ0hPUiBpZD0iR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sU291cmNlR2V0VmFsdWUiPgorPEFOQ0hPUiBpZD0iR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5Ij4KKzxBTkNIT1IgaWQ9IkdzdFRpbWVkVmFsdWUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdFRpbWVkVmFsdWUiPgorPEFOQ0hPUiBpZD0iR3N0VmFsdWVBcnJheSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb250cm9sU291cmNlLmh0bWwjR3N0VmFsdWVBcnJheSI+Cis8QU5DSE9SIGlkPSJnc3QtY29udHJvbC1zb3VyY2UtYmluZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb250cm9sU291cmNlLmh0bWwjZ3N0LWNvbnRyb2wtc291cmNlLWJpbmQiPgorPEFOQ0hPUiBpZD0iZ3N0LWNvbnRyb2wtc291cmNlLWdldC12YWx1ZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RDb250cm9sU291cmNlLmh0bWwjZ3N0LWNvbnRyb2wtc291cmNlLWdldC12YWx1ZSI+Cis8QU5DSE9SIGlkPSJnc3QtY29udHJvbC1zb3VyY2UtZ2V0LXZhbHVlLWFycmF5IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdENvbnRyb2xTb3VyY2UuaHRtbCNnc3QtY29udHJvbC1zb3VyY2UtZ2V0LXZhbHVlLWFycmF5Ij4KKzxBTkNIT1IgaWQ9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiPgorPEFOQ0hPUiBpZD0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2Uuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5vYmplY3QtaGllcmFyY2h5IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwjR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2Uub2JqZWN0LWhpZXJhcmNoeSI+Cis8QU5DSE9SIGlkPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sI0dzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLXN0cnVjdCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sI0dzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLXN0cnVjdCI+Cis8QU5DSE9SIGlkPSJHc3RJbnRlcnBvbGF0ZU1vZGUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNHc3RJbnRlcnBvbGF0ZU1vZGUiPgorPEFOQ0hPUiBpZD0iR1NULUlOVEVSUE9MQVRFLU5PTkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sI0dTVC1JTlRFUlBPTEFURS1OT05FOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUlOVEVSUE9MQVRFLVRSSUdHRVI6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sI0dTVC1JTlRFUlBPTEFURS1UUklHR0VSOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUlOVEVSUE9MQVRFLUxJTkVBUjpDQVBTIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwjR1NULUlOVEVSUE9MQVRFLUxJTkVBUjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1JTlRFUlBPTEFURS1RVUFEUkFUSUM6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sI0dTVC1JTlRFUlBPTEFURS1RVUFEUkFUSUM6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtSU5URVJQT0xBVEUtQ1VCSUM6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sI0dTVC1JTlRFUlBPTEFURS1DVUJJQzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1JTlRFUlBPTEFURS1VU0VSOkNBUFMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNHU1QtSU5URVJQT0xBVEUtVVNFUjpDQVBTIj4KKzxBTkNIT1IgaWQ9ImdzdC1pbnRlcnBvbGF0aW9uLWNvbnRyb2wtc291cmNlLW5ldyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sI2dzdC1pbnRlcnBvbGF0aW9uLWNvbnRyb2wtc291cmNlLW5ldyI+Cis8QU5DSE9SIGlkPSJnc3QtaW50ZXJwb2xhdGlvbi1jb250cm9sLXNvdXJjZS1zZXQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtaW50ZXJwb2xhdGlvbi1jb250cm9sLXNvdXJjZS1zZXQiPgorPEFOQ0hPUiBpZD0iZ3N0LWludGVycG9sYXRpb24tY29udHJvbC1zb3VyY2Utc2V0LWZyb20tbGlzdCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sI2dzdC1pbnRlcnBvbGF0aW9uLWNvbnRyb2wtc291cmNlLXNldC1mcm9tLWxpc3QiPgorPEFOQ0hPUiBpZD0iZ3N0LWludGVycG9sYXRpb24tY29udHJvbC1zb3VyY2Utc2V0LWludGVycG9sYXRpb24tbW9kZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sI2dzdC1pbnRlcnBvbGF0aW9uLWNvbnRyb2wtc291cmNlLXNldC1pbnRlcnBvbGF0aW9uLW1vZGUiPgorPEFOQ0hPUiBpZD0iZ3N0LWludGVycG9sYXRpb24tY29udHJvbC1zb3VyY2UtZ2V0LWFsbCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sI2dzdC1pbnRlcnBvbGF0aW9uLWNvbnRyb2wtc291cmNlLWdldC1hbGwiPgorPEFOQ0hPUiBpZD0iZ3N0LWludGVycG9sYXRpb24tY29udHJvbC1zb3VyY2UtdW5zZXQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtaW50ZXJwb2xhdGlvbi1jb250cm9sLXNvdXJjZS11bnNldCI+Cis8QU5DSE9SIGlkPSJnc3QtaW50ZXJwb2xhdGlvbi1jb250cm9sLXNvdXJjZS11bnNldC1hbGwiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtaW50ZXJwb2xhdGlvbi1jb250cm9sLXNvdXJjZS11bnNldC1hbGwiPgorPEFOQ0hPUiBpZD0iZ3N0LWludGVycG9sYXRpb24tY29udHJvbC1zb3VyY2UtZ2V0LWNvdW50IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwjZ3N0LWludGVycG9sYXRpb24tY29udHJvbC1zb3VyY2UtZ2V0LWNvdW50Ij4KKzxBTkNIT1IgaWQ9IkdzdExGT0NvbnRyb2xTb3VyY2UiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIj4KKzxBTkNIT1IgaWQ9IkdzdExGT0NvbnRyb2xTb3VyY2Uuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sI0dzdExGT0NvbnRyb2xTb3VyY2Uuc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iR3N0TEZPQ29udHJvbFNvdXJjZS5vYmplY3QtaGllcmFyY2h5IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNHc3RMRk9Db250cm9sU291cmNlLm9iamVjdC1oaWVyYXJjaHkiPgorPEFOQ0hPUiBpZD0iR3N0TEZPQ29udHJvbFNvdXJjZS5wcm9wZXJ0aWVzIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNHc3RMRk9Db250cm9sU291cmNlLnByb3BlcnRpZXMiPgorPEFOQ0hPUiBpZD0iR3N0TEZPQ29udHJvbFNvdXJjZS5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPQ29udHJvbFNvdXJjZS5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJHc3RMRk9Db250cm9sU291cmNlLmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sI0dzdExGT0NvbnRyb2xTb3VyY2UuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RMRk9Db250cm9sU291cmNlLXN0cnVjdCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPQ29udHJvbFNvdXJjZS1zdHJ1Y3QiPgorPEFOQ0hPUiBpZD0iR3N0TEZPV2F2ZWZvcm0iIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sI0dzdExGT1dhdmVmb3JtIj4KKzxBTkNIT1IgaWQ9IkdTVC1MRk8tV0FWRUZPUk0tU0lORTpDQVBTIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNHU1QtTEZPLVdBVkVGT1JNLVNJTkU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtTEZPLVdBVkVGT1JNLVNRVUFSRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNHU1QtTEZPLVdBVkVGT1JNLVNRVUFSRTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1MRk8tV0FWRUZPUk0tU0FXOkNBUFMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sI0dTVC1MRk8tV0FWRUZPUk0tU0FXOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUxGTy1XQVZFRk9STS1SRVZFUlNFLVNBVzpDQVBTIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNHU1QtTEZPLVdBVkVGT1JNLVJFVkVSU0UtU0FXOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUxGTy1XQVZFRk9STS1UUklBTkdMRTpDQVBTIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNHU1QtTEZPLVdBVkVGT1JNLVRSSUFOR0xFOkNBUFMiPgorPEFOQ0hPUiBpZD0iZ3N0LWxmby1jb250cm9sLXNvdXJjZS1uZXciIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sI2dzdC1sZm8tY29udHJvbC1zb3VyY2UtbmV3Ij4KKzxBTkNIT1IgaWQ9IkdzdExGT0NvbnRyb2xTb3VyY2UucHJvcGVydHktZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPQ29udHJvbFNvdXJjZS5wcm9wZXJ0eS1kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdExGT0NvbnRyb2xTb3VyY2UtLWFtcGxpdHVkZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPQ29udHJvbFNvdXJjZS0tYW1wbGl0dWRlIj4KKzxBTkNIT1IgaWQ9IkdzdExGT0NvbnRyb2xTb3VyY2UtLWZyZXF1ZW5jeSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPQ29udHJvbFNvdXJjZS0tZnJlcXVlbmN5Ij4KKzxBTkNIT1IgaWQ9IkdzdExGT0NvbnRyb2xTb3VyY2UtLW9mZnNldCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPQ29udHJvbFNvdXJjZS0tb2Zmc2V0Ij4KKzxBTkNIT1IgaWQ9IkdzdExGT0NvbnRyb2xTb3VyY2UtLXRpbWVzaGlmdCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPQ29udHJvbFNvdXJjZS0tdGltZXNoaWZ0Ij4KKzxBTkNIT1IgaWQ9IkdzdExGT0NvbnRyb2xTb3VyY2UtLXdhdmVmb3JtIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNHc3RMRk9Db250cm9sU291cmNlLS13YXZlZm9ybSI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItbGlicy1Hc3RDb250cm9sbGVyR09iamVjdCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RDb250cm9sbGVyR09iamVjdC5odG1sIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0LnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwjZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3Quc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCNnc3RyZWFtZXItbGlicy1Hc3RDb250cm9sbGVyR09iamVjdC5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItbGlicy1Hc3RDb250cm9sbGVyR09iamVjdC5kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwjZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJnc3Qtb2JqZWN0LWNvbnRyb2wtcHJvcGVydGllcyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RDb250cm9sbGVyR09iamVjdC5odG1sI2dzdC1vYmplY3QtY29udHJvbC1wcm9wZXJ0aWVzIj4KKzxBTkNIT1IgaWQ9ImdzdC1vYmplY3QtdW5jb250cm9sLXByb3BlcnRpZXMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVuY29udHJvbC1wcm9wZXJ0aWVzIj4KKzxBTkNIT1IgaWQ9ImdzdC1vYmplY3QtZ2V0LWNvbnRyb2xsZXIiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC1jb250cm9sbGVyIj4KKzxBTkNIT1IgaWQ9ImdzdC1vYmplY3Qtc2V0LWNvbnRyb2xsZXIiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXNldC1jb250cm9sbGVyIj4KKzxBTkNIT1IgaWQ9ImdzdC1vYmplY3Qtc3VnZ2VzdC1uZXh0LXN5bmMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXN1Z2dlc3QtbmV4dC1zeW5jIj4KKzxBTkNIT1IgaWQ9ImdzdC1vYmplY3Qtc3luYy12YWx1ZXMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXN5bmMtdmFsdWVzIj4KKzxBTkNIT1IgaWQ9ImdzdC1vYmplY3QtZ2V0LWNvbnRyb2wtc291cmNlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1nZXQtY29udHJvbC1zb3VyY2UiPgorPEFOQ0hPUiBpZD0iZ3N0LW9iamVjdC1zZXQtY29udHJvbC1zb3VyY2UiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXNldC1jb250cm9sLXNvdXJjZSI+Cis8QU5DSE9SIGlkPSJnc3Qtb2JqZWN0LWdldC12YWx1ZS1hcnJheXMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC12YWx1ZS1hcnJheXMiPgorPEFOQ0hPUiBpZD0iZ3N0LW9iamVjdC1nZXQtdmFsdWUtYXJyYXkiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC12YWx1ZS1hcnJheSI+Cis8QU5DSE9SIGlkPSJnc3Qtb2JqZWN0LWdldC1jb250cm9sLXJhdGUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC1jb250cm9sLXJhdGUiPgorPEFOQ0hPUiBpZD0iZ3N0LW9iamVjdC1zZXQtY29udHJvbC1yYXRlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1zZXQtY29udHJvbC1yYXRlIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0LnNlZS1hbHNvIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdENvbnRyb2xsZXJHT2JqZWN0Lmh0bWwjZ3N0cmVhbWVyLWxpYnMtR3N0Q29udHJvbGxlckdPYmplY3Quc2VlLWFsc28iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI2dzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3REUEhlYWRlckZsYWciIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR3N0RFBIZWFkZXJGbGFnIj4KKzxBTkNIT1IgaWQ9IkdTVC1EUC1IRUFERVItRkxBRy1OT05FOkNBUFMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR1NULURQLUhFQURFUi1GTEFHLU5PTkU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRFAtSEVBREVSLUZMQUctQ1JDLUhFQURFUjpDQVBTIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dTVC1EUC1IRUFERVItRkxBRy1DUkMtSEVBREVSOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULURQLUhFQURFUi1GTEFHLUNSQy1QQVlMT0FEOkNBUFMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjR1NULURQLUhFQURFUi1GTEFHLUNSQy1QQVlMT0FEOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULURQLUhFQURFUi1GTEFHLUNSQzpDQVBTIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dTVC1EUC1IRUFERVItRkxBRy1DUkM6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHc3REUFBheWxvYWRUeXBlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dzdERQUGF5bG9hZFR5cGUiPgorPEFOQ0hPUiBpZD0iR1NULURQLVBBWUxPQUQtTk9ORTpDQVBTIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dTVC1EUC1QQVlMT0FELU5PTkU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRFAtUEFZTE9BRC1CVUZGRVI6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNHU1QtRFAtUEFZTE9BRC1CVUZGRVI6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRFAtUEFZTE9BRC1DQVBTIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dTVC1EUC1QQVlMT0FELUNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULURQLVBBWUxPQUQtRVZFTlQtTk9ORTpDQVBTIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dTVC1EUC1QQVlMT0FELUVWRU5ULU5PTkU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRFAtSEVBREVSLUxFTkdUSDpDQVBTIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dTVC1EUC1IRUFERVItTEVOR1RIOkNBUFMiPgorPEFOQ0hPUiBpZD0iR3N0RFBWZXJzaW9uIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dzdERQVmVyc2lvbiI+Cis8QU5DSE9SIGlkPSJHU1QtRFAtVkVSU0lPTi0wLTI6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNHU1QtRFAtVkVSU0lPTi0wLTI6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRFAtVkVSU0lPTi0xLTA6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNHU1QtRFAtVkVSU0lPTi0xLTA6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtRFAtVkVSU0lPTi1NQUpPUjpDQVBTIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dTVC1EUC1WRVJTSU9OLU1BSk9SOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULURQLVZFUlNJT04tTUlOT1I6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNHU1QtRFAtVkVSU0lPTi1NSU5PUjpDQVBTIj4KKzxBTkNIT1IgaWQ9ImdzdC1kcC1pbml0IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI2dzdC1kcC1pbml0Ij4KKzxBTkNIT1IgaWQ9IkdzdERQSGVhZGVyRnJvbUJ1ZmZlckZ1bmN0aW9uIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI0dzdERQSGVhZGVyRnJvbUJ1ZmZlckZ1bmN0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdERQUGFja2V0RnJvbUNhcHNGdW5jdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNHc3REUFBhY2tldEZyb21DYXBzRnVuY3Rpb24iPgorPEFOQ0hPUiBpZD0iR3N0RFBQYWNrZXRGcm9tRXZlbnRGdW5jdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNHc3REUFBhY2tldEZyb21FdmVudEZ1bmN0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdERQUGFja2V0aXplciIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNHc3REUFBhY2tldGl6ZXIiPgorPEFOQ0hPUiBpZD0iZ3N0LWRwLXBhY2tldGl6ZXItbmV3IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI2dzdC1kcC1wYWNrZXRpemVyLW5ldyI+Cis8QU5DSE9SIGlkPSJnc3QtZHAtcGFja2V0aXplci1mcmVlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI2dzdC1kcC1wYWNrZXRpemVyLWZyZWUiPgorPEFOQ0hPUiBpZD0iZ3N0LWRwLWNyYyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNnc3QtZHAtY3JjIj4KKzxBTkNIT1IgaWQ9ImdzdC1kcC1oZWFkZXItcGF5bG9hZC1sZW5ndGgiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjZ3N0LWRwLWhlYWRlci1wYXlsb2FkLWxlbmd0aCI+Cis8QU5DSE9SIGlkPSJnc3QtZHAtaGVhZGVyLXBheWxvYWQtdHlwZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNnc3QtZHAtaGVhZGVyLXBheWxvYWQtdHlwZSI+Cis8QU5DSE9SIGlkPSJnc3QtZHAtYnVmZmVyLWZyb20taGVhZGVyIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI2dzdC1kcC1idWZmZXItZnJvbS1oZWFkZXIiPgorPEFOQ0hPUiBpZD0iZ3N0LWRwLWNhcHMtZnJvbS1wYWNrZXQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjZ3N0LWRwLWNhcHMtZnJvbS1wYWNrZXQiPgorPEFOQ0hPUiBpZD0iZ3N0LWRwLWV2ZW50LWZyb20tcGFja2V0IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI2dzdC1kcC1ldmVudC1mcm9tLXBhY2tldCI+Cis8QU5DSE9SIGlkPSJnc3QtZHAtdmFsaWRhdGUtaGVhZGVyIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5odG1sI2dzdC1kcC12YWxpZGF0ZS1oZWFkZXIiPgorPEFOQ0hPUiBpZD0iZ3N0LWRwLXZhbGlkYXRlLXBheWxvYWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtZ3N0ZGF0YXByb3RvY29sLmh0bWwjZ3N0LWRwLXZhbGlkYXRlLXBheWxvYWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWRwLXZhbGlkYXRlLXBhY2tldCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNnc3QtZHAtdmFsaWRhdGUtcGFja2V0Ij4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1saWJzLWdzdGRhdGFwcm90b2NvbC5zZWUtYWxzbyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuaHRtbCNnc3RyZWFtZXItbGlicy1nc3RkYXRhcHJvdG9jb2wuc2VlLWFsc28iPgorPEFOQ0hPUiBpZD0iR3N0TmV0Q2xpZW50Q2xvY2siIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCI+Cis8QU5DSE9SIGlkPSJHc3ROZXRDbGllbnRDbG9jay5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3ROZXRDbGllbnRDbG9jay5odG1sI0dzdE5ldENsaWVudENsb2NrLnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9IkdzdE5ldENsaWVudENsb2NrLm9iamVjdC1oaWVyYXJjaHkiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCNHc3ROZXRDbGllbnRDbG9jay5vYmplY3QtaGllcmFyY2h5Ij4KKzxBTkNIT1IgaWQ9IkdzdE5ldENsaWVudENsb2NrLnByb3BlcnRpZXMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCNHc3ROZXRDbGllbnRDbG9jay5wcm9wZXJ0aWVzIj4KKzxBTkNIT1IgaWQ9IkdzdE5ldENsaWVudENsb2NrLmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdE5ldENsaWVudENsb2NrLmh0bWwjR3N0TmV0Q2xpZW50Q2xvY2suZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iR3N0TmV0Q2xpZW50Q2xvY2suZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3ROZXRDbGllbnRDbG9jay5odG1sI0dzdE5ldENsaWVudENsb2NrLmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0TmV0Q2xpZW50Q2xvY2stc3RydWN0IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdE5ldENsaWVudENsb2NrLmh0bWwjR3N0TmV0Q2xpZW50Q2xvY2stc3RydWN0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1uZXQtY2xpZW50LWNsb2NrLW5ldyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3ROZXRDbGllbnRDbG9jay5odG1sI2dzdC1uZXQtY2xpZW50LWNsb2NrLW5ldyI+Cis8QU5DSE9SIGlkPSJHc3ROZXRDbGllbnRDbG9jay5wcm9wZXJ0eS1kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdE5ldENsaWVudENsb2NrLmh0bWwjR3N0TmV0Q2xpZW50Q2xvY2sucHJvcGVydHktZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3ROZXRDbGllbnRDbG9jay0tYWRkcmVzcyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3ROZXRDbGllbnRDbG9jay5odG1sI0dzdE5ldENsaWVudENsb2NrLS1hZGRyZXNzIj4KKzxBTkNIT1IgaWQ9IkdzdE5ldENsaWVudENsb2NrLS1wb3J0IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdE5ldENsaWVudENsb2NrLmh0bWwjR3N0TmV0Q2xpZW50Q2xvY2stLXBvcnQiPgorPEFOQ0hPUiBpZD0iR3N0TmV0Q2xpZW50Q2xvY2suc2VlLWFsc28iIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCNHc3ROZXRDbGllbnRDbG9jay5zZWUtYWxzbyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0LnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0LnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI2dzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0LmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0TmV0VGltZVBhY2tldCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjR3N0TmV0VGltZVBhY2tldCI+Cis8QU5DSE9SIGlkPSJHU1QtTkVULVRJTUUtUEFDS0VULVNJWkU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjR1NULU5FVC1USU1FLVBBQ0tFVC1TSVpFOkNBUFMiPgorPEFOQ0hPUiBpZD0iZ3N0LW5ldC10aW1lLXBhY2tldC1uZXciIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI2dzdC1uZXQtdGltZS1wYWNrZXQtbmV3Ij4KKzxBTkNIT1IgaWQ9ImdzdC1uZXQtdGltZS1wYWNrZXQtcmVjZWl2ZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjZ3N0LW5ldC10aW1lLXBhY2tldC1yZWNlaXZlIj4KKzxBTkNIT1IgaWQ9ImdzdC1uZXQtdGltZS1wYWNrZXQtc2VuZCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjZ3N0LW5ldC10aW1lLXBhY2tldC1zZW5kIj4KKzxBTkNIT1IgaWQ9ImdzdC1uZXQtdGltZS1wYWNrZXQtc2VyaWFsaXplIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNnc3QtbmV0LXRpbWUtcGFja2V0LXNlcmlhbGl6ZSI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0LnNlZS1hbHNvIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0LnNlZS1hbHNvIj4KKzxBTkNIT1IgaWQ9IkdzdE5ldFRpbWVQcm92aWRlciIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCI+Cis8QU5DSE9SIGlkPSJHc3ROZXRUaW1lUHJvdmlkZXIuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwjR3N0TmV0VGltZVByb3ZpZGVyLnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9IkdzdE5ldFRpbWVQcm92aWRlci5vYmplY3QtaGllcmFyY2h5IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdE5ldFRpbWVQcm92aWRlci5odG1sI0dzdE5ldFRpbWVQcm92aWRlci5vYmplY3QtaGllcmFyY2h5Ij4KKzxBTkNIT1IgaWQ9IkdzdE5ldFRpbWVQcm92aWRlci5wcm9wZXJ0aWVzIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL0dzdE5ldFRpbWVQcm92aWRlci5odG1sI0dzdE5ldFRpbWVQcm92aWRlci5wcm9wZXJ0aWVzIj4KKzxBTkNIT1IgaWQ9IkdzdE5ldFRpbWVQcm92aWRlci5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCNHc3ROZXRUaW1lUHJvdmlkZXIuZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iR3N0TmV0VGltZVByb3ZpZGVyLmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwjR3N0TmV0VGltZVByb3ZpZGVyLmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0TmV0VGltZVByb3ZpZGVyLXN0cnVjdCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCNHc3ROZXRUaW1lUHJvdmlkZXItc3RydWN0Ij4KKzxBTkNIT1IgaWQ9ImdzdC1uZXQtdGltZS1wcm92aWRlci1uZXciIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwjZ3N0LW5ldC10aW1lLXByb3ZpZGVyLW5ldyI+Cis8QU5DSE9SIGlkPSJHc3ROZXRUaW1lUHJvdmlkZXIucHJvcGVydHktZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCNHc3ROZXRUaW1lUHJvdmlkZXIucHJvcGVydHktZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3ROZXRUaW1lUHJvdmlkZXItLWFjdGl2ZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCNHc3ROZXRUaW1lUHJvdmlkZXItLWFjdGl2ZSI+Cis8QU5DSE9SIGlkPSJHc3ROZXRUaW1lUHJvdmlkZXItLWFkZHJlc3MiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwjR3N0TmV0VGltZVByb3ZpZGVyLS1hZGRyZXNzIj4KKzxBTkNIT1IgaWQ9IkdzdE5ldFRpbWVQcm92aWRlci0tY2xvY2siIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwjR3N0TmV0VGltZVByb3ZpZGVyLS1jbG9jayI+Cis8QU5DSE9SIGlkPSJHc3ROZXRUaW1lUHJvdmlkZXItLXBvcnQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwjR3N0TmV0VGltZVByb3ZpZGVyLS1wb3J0Ij4KKzxBTkNIT1IgaWQ9IkdzdE5ldFRpbWVQcm92aWRlci5zZWUtYWxzbyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCNHc3ROZXRUaW1lUHJvdmlkZXIuc2VlLWFsc28iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2siIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdHJlYW1lci1saWJzLUdzdENoZWNrLnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdHJlYW1lci1saWJzLUdzdENoZWNrLmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR1NULVNUQVJULVRFU1Q6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0dTVC1TVEFSVC1URVNUOkNBUFMiPgorPEFOQ0hPUiBpZD0iR1NULUVORC1URVNUOkNBUFMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNHU1QtRU5ELVRFU1Q6Q0FQUyI+Cis8QU5DSE9SIGlkPSJBU1NFUlQtQlVGRkVSLVJFRkNPVU5UOkNBUFMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNBU1NFUlQtQlVGRkVSLVJFRkNPVU5UOkNBUFMiPgorPEFOQ0hPUiBpZD0iQVNTRVJULUNBUFMtUkVGQ09VTlQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0FTU0VSVC1DQVBTLVJFRkNPVU5UOkNBUFMiPgorPEFOQ0hPUiBpZD0iQVNTRVJULUNSSVRJQ0FMOkNBUFMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNBU1NFUlQtQ1JJVElDQUw6Q0FQUyI+Cis8QU5DSE9SIGlkPSJBU1NFUlQtV0FSTklORzpDQVBTIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjQVNTRVJULVdBUk5JTkc6Q0FQUyI+Cis8QU5DSE9SIGlkPSJBU1NFUlQtTUlOSS1PQkpFQ1QtUkVGQ09VTlQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0FTU0VSVC1NSU5JLU9CSkVDVC1SRUZDT1VOVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkFTU0VSVC1PQkpFQ1QtUkVGQ09VTlQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0FTU0VSVC1PQkpFQ1QtUkVGQ09VTlQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJBU1NFUlQtT0JKRUNULVJFRkNPVU5ULUJFVFdFRU46Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0FTU0VSVC1PQkpFQ1QtUkVGQ09VTlQtQkVUV0VFTjpDQVBTIj4KKzxBTkNIT1IgaWQ9IkFTU0VSVC1TRVQtU1RBVEU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0FTU0VSVC1TRVQtU1RBVEU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJmYWlsLXVubGVzcy1lcXVhbHMtaW50IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZmFpbC11bmxlc3MtZXF1YWxzLWludCI+Cis8QU5DSE9SIGlkPSJmYWlsLXVubGVzcy1lcXVhbHMtZmxvYXQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNmYWlsLXVubGVzcy1lcXVhbHMtZmxvYXQiPgorPEFOQ0hPUiBpZD0iZmFpbC11bmxlc3MtZXF1YWxzLXN0cmluZyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2ZhaWwtdW5sZXNzLWVxdWFscy1zdHJpbmciPgorPEFOQ0hPUiBpZD0iZmFpbC11bmxlc3MtZXF1YWxzLXVpbnQ2NCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2ZhaWwtdW5sZXNzLWVxdWFscy11aW50NjQiPgorPEFOQ0hPUiBpZD0iZmFpbC11bmxlc3MtZXF1YWxzLWludDY0IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZmFpbC11bmxlc3MtZXF1YWxzLWludDY0Ij4KKzxBTkNIT1IgaWQ9ImZhaWwtdW5sZXNzLW1lc3NhZ2UtZXJyb3IiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNmYWlsLXVubGVzcy1tZXNzYWdlLWVycm9yIj4KKzxBTkNIT1IgaWQ9ImFzc2VydC1lcXVhbHMtaW50IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjYXNzZXJ0LWVxdWFscy1pbnQiPgorPEFOQ0hPUiBpZD0iYXNzZXJ0LWVxdWFscy1mbG9hdCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2Fzc2VydC1lcXVhbHMtZmxvYXQiPgorPEFOQ0hPUiBpZD0iYXNzZXJ0LWVxdWFscy1zdHJpbmciIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNhc3NlcnQtZXF1YWxzLXN0cmluZyI+Cis8QU5DSE9SIGlkPSJhc3NlcnQtZXF1YWxzLXVpbnQ2NCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2Fzc2VydC1lcXVhbHMtdWludDY0Ij4KKzxBTkNIT1IgaWQ9ImFzc2VydC1lcXVhbHMtaW50NjQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNhc3NlcnQtZXF1YWxzLWludDY0Ij4KKzxBTkNIT1IgaWQ9ImFzc2VydC1tZXNzYWdlLWVycm9yIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjYXNzZXJ0LW1lc3NhZ2UtZXJyb3IiPgorPEFOQ0hPUiBpZD0iZ3N0LWNoZWNrLWluaXQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2staW5pdCI+Cis8QU5DSE9SIGlkPSJnc3QtY2hlY2stbWVzc2FnZS1lcnJvciIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1tZXNzYWdlLWVycm9yIj4KKzxBTkNIT1IgaWQ9ImdzdC1jaGVjay1zZXR1cC1lbGVtZW50IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXNldHVwLWVsZW1lbnQiPgorPEFOQ0hPUiBpZD0iZ3N0LWNoZWNrLXNldHVwLXNpbmstcGFkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXNldHVwLXNpbmstcGFkIj4KKzxBTkNIT1IgaWQ9ImdzdC1jaGVjay1zZXR1cC1zcmMtcGFkIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXNldHVwLXNyYy1wYWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWNoZWNrLXNldHVwLXNpbmstcGFkLWJ5LW5hbWUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stc2V0dXAtc2luay1wYWQtYnktbmFtZSI+Cis8QU5DSE9SIGlkPSJnc3QtY2hlY2stc2V0dXAtc3JjLXBhZC1ieS1uYW1lIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXNldHVwLXNyYy1wYWQtYnktbmFtZSI+Cis8QU5DSE9SIGlkPSJnc3QtY2hlY2stdGVhcmRvd24tcGFkLWJ5LW5hbWUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stdGVhcmRvd24tcGFkLWJ5LW5hbWUiPgorPEFOQ0hPUiBpZD0iZ3N0LWNoZWNrLXRlYXJkb3duLWVsZW1lbnQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stdGVhcmRvd24tZWxlbWVudCI+Cis8QU5DSE9SIGlkPSJnc3QtY2hlY2stdGVhcmRvd24tc2luay1wYWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stdGVhcmRvd24tc2luay1wYWQiPgorPEFOQ0hPUiBpZD0iZ3N0LWNoZWNrLXRlYXJkb3duLXNyYy1wYWQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stdGVhcmRvd24tc3JjLXBhZCI+Cis8QU5DSE9SIGlkPSJnc3QtY2hlY2stZHJvcC1idWZmZXJzIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLWRyb3AtYnVmZmVycyI+Cis8QU5DSE9SIGlkPSJnc3QtY2hlY2stYnVmZmVyLWRhdGEiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stYnVmZmVyLWRhdGEiPgorPEFOQ0hPUiBpZD0iZ3N0LWNoZWNrLWNhcHMtZXF1YWwiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stY2Fwcy1lcXVhbCI+Cis8QU5DSE9SIGlkPSJnc3QtY2hlY2stZWxlbWVudC1wdXNoLWJ1ZmZlci1saXN0IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLWVsZW1lbnQtcHVzaC1idWZmZXItbGlzdCI+Cis8QU5DSE9SIGlkPSJnc3QtY2hlY2stZWxlbWVudC1wdXNoLWJ1ZmZlciIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1lbGVtZW50LXB1c2gtYnVmZmVyIj4KKzxBTkNIT1IgaWQ9ImdzdC1jaGVjay1ydW4tc3VpdGUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stcnVuLXN1aXRlIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3IiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3Lmh0bWwiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcuaHRtbCNnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5odG1sI2dzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3LmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3LmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcuaHRtbCNnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9ImdzdC1idWZmZXItc3RyYXctc3RhcnQtcGlwZWxpbmUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcuaHRtbCNnc3QtYnVmZmVyLXN0cmF3LXN0YXJ0LXBpcGVsaW5lIj4KKzxBTkNIT1IgaWQ9ImdzdC1idWZmZXItc3RyYXctZ2V0LWJ1ZmZlciIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5odG1sI2dzdC1idWZmZXItc3RyYXctZ2V0LWJ1ZmZlciI+Cis8QU5DSE9SIGlkPSJnc3QtYnVmZmVyLXN0cmF3LXN0b3AtcGlwZWxpbmUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcuaHRtbCNnc3QtYnVmZmVyLXN0cmF3LXN0b3AtcGlwZWxpbmUiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5odG1sI2dzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5LnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5LmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5Lmh0bWwjZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9nc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5odG1sI2dzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5LmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0U3RyZWFtQ29uc2lzdGVuY3kiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCNHc3RTdHJlYW1Db25zaXN0ZW5jeSI+Cis8QU5DSE9SIGlkPSJnc3QtY29uc2lzdGVuY3ktY2hlY2tlci1uZXciIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCNnc3QtY29uc2lzdGVuY3ktY2hlY2tlci1uZXciPgorPEFOQ0hPUiBpZD0iZ3N0LWNvbnNpc3RlbmN5LWNoZWNrZXItcmVzZXQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCNnc3QtY29uc2lzdGVuY3ktY2hlY2tlci1yZXNldCI+Cis8QU5DSE9SIGlkPSJnc3QtY29uc2lzdGVuY3ktY2hlY2tlci1mcmVlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2dzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5Lmh0bWwjZ3N0LWNvbnNpc3RlbmN5LWNoZWNrZXItZnJlZSI+Cis8QU5DSE9SIGlkPSJhbm5vdGF0aW9uLWdsb3NzdGVybS1vdXQiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvYW5ub3RhdGlvbi1nbG9zc2FyeS5odG1sI2Fubm90YXRpb24tZ2xvc3N0ZXJtLW91dCI+Cis8QU5DSE9SIGlkPSJhbm5vdGF0aW9uLWdsb3NzdGVybS1hbGxvdy1ub25lIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2Fubm90YXRpb24tZ2xvc3NhcnkuaHRtbCNhbm5vdGF0aW9uLWdsb3NzdGVybS1hbGxvdy1ub25lIj4KKzxBTkNIT1IgaWQ9ImFubm90YXRpb24tZ2xvc3N0ZXJtLWNsb3N1cmUiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvYW5ub3RhdGlvbi1nbG9zc2FyeS5odG1sI2Fubm90YXRpb24tZ2xvc3N0ZXJtLWNsb3N1cmUiPgorPEFOQ0hPUiBpZD0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0tdHJhbnNmZXIgbm9uZSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9hbm5vdGF0aW9uLWdsb3NzYXJ5Lmh0bWwjYW5ub3RhdGlvbi1nbG9zc3Rlcm0tdHJhbnNmZXIgbm9uZSI+Cis8QU5DSE9SIGlkPSJhbm5vdGF0aW9uLWdsb3NzdGVybS1hcnJheSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9hbm5vdGF0aW9uLWdsb3NzYXJ5Lmh0bWwjYW5ub3RhdGlvbi1nbG9zc3Rlcm0tYXJyYXkiPgorPEFOQ0hPUiBpZD0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0tZWxlbWVudC10eXBlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2Fubm90YXRpb24tZ2xvc3NhcnkuaHRtbCNhbm5vdGF0aW9uLWdsb3NzdGVybS1lbGVtZW50LXR5cGUiPgorPEFOQ0hPUiBpZD0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0taW4iIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvYW5ub3RhdGlvbi1nbG9zc2FyeS5odG1sI2Fubm90YXRpb24tZ2xvc3N0ZXJtLWluIj4KKzxBTkNIT1IgaWQ9ImFubm90YXRpb24tZ2xvc3N0ZXJtLXNjb3BlIGNhbGwiIGhyZWY9ImdzdHJlYW1lci1saWJzLTAuMTEvYW5ub3RhdGlvbi1nbG9zc2FyeS5odG1sI2Fubm90YXRpb24tZ2xvc3N0ZXJtLXNjb3BlIGNhbGwiPgorPEFOQ0hPUiBpZD0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0tdHJhbnNmZXIgZnVsbCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtMC4xMS9hbm5vdGF0aW9uLWdsb3NzYXJ5Lmh0bWwjYW5ub3RhdGlvbi1nbG9zc3Rlcm0tdHJhbnNmZXIgZnVsbCI+Cis8QU5DSE9SIGlkPSJhbm5vdGF0aW9uLWdsb3NzdGVybS10eXBlIiBocmVmPSJnc3RyZWFtZXItbGlicy0wLjExL2Fubm90YXRpb24tZ2xvc3NhcnkuaHRtbCNhbm5vdGF0aW9uLWdsb3NzdGVybS10eXBlIj4KZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL2xlZnQucG5nIGIvZG9jcy9saWJzL2h0bWwvbGVmdC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQwNWIzZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbGlicy9odG1sL2xlZnQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL3JpZ2h0LnBuZyBiL2RvY3MvbGlicy9odG1sL3JpZ2h0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjgzMmUzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9saWJzL2h0bWwvcmlnaHQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL3N0eWxlLmNzcyBiL2RvY3MvbGlicy9odG1sL3N0eWxlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmY2YzI2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9saWJzL2h0bWwvc3R5bGUuY3NzCkBAIC0wLDAgKzEsMjY2IEBACisuc3lub3BzaXMsIC5jbGFzc3N5bm9wc2lzCit7CisgIC8qIHRhbmdvOmFsdW1pbml1bSAxLzIgKi8KKyAgYmFja2dyb3VuZDogI2VlZWVlYzsKKyAgYm9yZGVyOiBzb2xpZCAxcHggI2QzZDdjZjsKKyAgcGFkZGluZzogMC41ZW07Cit9CisucHJvZ3JhbWxpc3RpbmcKK3sKKyAgLyogdGFuZ286c2t5IGJsdWUgMC8xICovCisgIGJhY2tncm91bmQ6ICNlNmYzZmY7CisgIGJvcmRlcjogc29saWQgMXB4ICM3MjlmY2Y7CisgIHBhZGRpbmc6IDAuNWVtOworfQorLnZhcmlhYmxlbGlzdAoreworICBwYWRkaW5nOiA0cHg7CisgIG1hcmdpbi1sZWZ0OiAzZW07Cit9CisudmFyaWFibGVsaXN0IHRkOmZpcnN0LWNoaWxkCit7CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK0BtZWRpYSBzY3JlZW4geworICBzdXAgYS5mb290bm90ZQorICB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIHRvcDogMGVtICEgaW1wb3J0YW50OworICAgIAorICB9CisgIC8qIHRoaXMgaXMgbmVlZGVkIHNvIHRoYXQgdGhlIGxvY2FsIGFuY2hvcnMgYXJlIGRpc3BsYXllZCBiZWxvdyB0aGUgbmF2aWFndGlvbiAqLworICBkaXYuZm9vdG5vdGUgYVtuYW1lXSwgZGl2LnJlZm5hbWVkaXYgYVtuYW1lXSwgZGl2LnJlZnNlY3QxIGFbbmFtZV0sIGRpdi5yZWZzZWN0MiBhW25hbWVdLCBkaXYuaW5kZXggYVtuYW1lXSwgZGl2Lmdsb3NzYXJ5IGFbbmFtZV0sIGRpdi5zZWN0MSBhW25hbWVdCisgIHsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIHRvcDotNWVtOworICB9CisgIC8qIHRoaXMgc2VlbXMgdG8gYmUgYSBidWcgaW4gdGhlIHhzbCBzdHlsZSBzaGVldHMgd2hlbiBnZW5lcmF0aW5nIGluZGV4ZXMgKi8KKyAgZGl2LmluZGV4IGRpdi5pbmRleAorICB7CisgICAgdG9wOiAwZW07CisgIH0KKyAgLyogbWFrZSBzcGFjZSBmb3IgdGhlIGZpeGVkIG5hdmlnYXRpb24gYmFyIGFuZCBhZGQgc3BhY2UgYXQgdGhlIGJvdHRvbSBzbyB0aGF0CisgICAqIGxpbmsgdGFyZ2V0cyBhcHBlYXIgc29tZXdoYXQgY2xvc2UgdG8gdG9wCisgICAqLworICBib2R5CisgIHsKKyAgICBwYWRkaW5nLXRvcDogMy4yZW07CisgICAgcGFkZGluZy1ib3R0b206IDIwZW07CisgIH0KKyAgLyogc3R5bGUgYW5kIHNpemUgdGhlIG5hdmlnYXRpb24gYmFyICovCisgIHRhYmxlLm5hdmlnYXRpb24jdG9wCisgIHsKKyAgICBwb3NpdGlvbjogZml4ZWQ7CisgICAgLyogdGFuZ286c2NhcmxldCByZWQgMC8xICovCisgICAgYmFja2dyb3VuZDogI2ZmZTZlNjsKKyAgICBib3JkZXI6IHNvbGlkIDFweCAjZWYyOTI5OworICAgIG1hcmdpbi10b3A6IDA7CisgICAgbWFyZ2luLWJvdHRvbTogMDsKKyAgICB0b3A6IDA7CisgICAgbGVmdDogMDsKKyAgICBoZWlnaHQ6IDNlbTsKKyAgICB6LWluZGV4OiAxMDsKKyAgfQorICAubmF2aWdhdGlvbiBhLCAubmF2aWdhdGlvbiBhOnZpc2l0ZWQKKyAgeworICAgIC8qIHRhbmdvOnNjYXJsZXQgcmVkIDMgKi8KKyAgICBjb2xvcjogI2E0MDAwMDsKKyAgfQorICAubmF2aWdhdGlvbiBhOmhvdmVyCisgIHsKKyAgICAvKiB0YW5nbzpzY2FybGV0IHJlZCAxICovCisgICAgY29sb3I6ICNlZjI5Mjk7CisgIH0KKyAgdGQuc2hvcnRjdXRzCisgIHsKKyAgICAvKiB0YW5nbzpzY2FybGV0IHJlZCAxICovCisgICAgY29sb3I6ICNlZjI5Mjk7CisgICAgZm9udC1zaXplOiA4MCU7CisgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKKyAgfQorfQorQG1lZGlhIHByaW50IHsKKyAgdGFibGUubmF2aWdhdGlvbiB7CisgICAgdmlzaWJpbGl0eTogY29sbGFwc2U7CisgICAgZGlzcGxheTogbm9uZTsKKyAgfQorICBkaXYudGl0bGVwYWdlIHRhYmxlLm5hdmlnYXRpb24geworICAgIHZpc2liaWxpdHk6IHZpc2libGU7CisgICAgZGlzcGxheTogdGFibGU7CisgICAgLyogdGFuZ286c2NhcmxldCByZWQgMC8xICovCisgICAgYmFja2dyb3VuZDogI2ZmZTZlNjsKKyAgICBib3JkZXI6IHNvbGlkIDFweCAjZWYyOTI5OworICAgIG1hcmdpbi10b3A6IDA7CisgICAgbWFyZ2luLWJvdHRvbTogMDsKKyAgICB0b3A6IDA7CisgICAgbGVmdDogMDsKKyAgICBoZWlnaHQ6IDNlbTsKKyAgfQorfQorCisubmF2aWdhdGlvbiAudGl0bGUKK3sKKyAgZm9udC1zaXplOiAyMDAlOworfQorCitkaXYuZ2FsbGVyeS1mbG9hdAoreworICBmbG9hdDogbGVmdDsKKyAgcGFkZGluZzogMTBweDsKK30KK2Rpdi5nYWxsZXJ5LWZsb2F0IGltZworeworICBib3JkZXItc3R5bGU6IG5vbmU7Cit9CitkaXYuZ2FsbGVyeS1zcGFjZXIKK3sKKyAgY2xlYXI6IGJvdGg7Cit9CisKK2EsIGE6dmlzaXRlZAoreworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgIC8qIHRhbmdvOnNreSBibHVlIDIgKi8KKyAgY29sb3I6ICMzNDY1YTQ7Cit9CithOmhvdmVyCit7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICAvKiB0YW5nbzpza3kgYmx1ZSAxICovCisgIGNvbG9yOiAjNzI5ZmNmOworfQorCitkaXYudGFibGUgdGFibGUKK3sKKyAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKKyAgYm9yZGVyLXNwYWNpbmc6IDBweDsKKyAgLyogdGFuZ286YWx1bWluaXVtIDMgKi8KKyAgYm9yZGVyOiBzb2xpZCAxcHggI2JhYmRiNjsKK30KKworZGl2LnRhYmxlIHRhYmxlIHRkLCBkaXYudGFibGUgdGFibGUgdGgKK3sKKyAgLyogdGFuZ286YWx1bWluaXVtIDMgKi8KKyAgYm9yZGVyOiBzb2xpZCAxcHggI2JhYmRiNjsKKyAgcGFkZGluZzogM3B4OworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCitkaXYudGFibGUgdGFibGUgdGgKK3sKKyAgLyogdGFuZ286YWx1bWluaXVtIDIgKi8KKyAgYmFja2dyb3VuZC1jb2xvcjogI2QzZDdjZjsKK30KKworaHIKK3sKKyAgLyogdGFuZ286YWx1bWluaXVtIDMgKi8KKyAgY29sb3I6ICNiYWJkYjY7CisgIGJhY2tncm91bmQ6ICNiYWJkYjY7CisgIGJvcmRlcjogbm9uZSAwcHg7CisgIGhlaWdodDogMXB4OworICBjbGVhcjogYm90aDsKK30KKworLmZvb3RlcgoreworICBwYWRkaW5nLXRvcDogMy41ZW07CisgIC8qIHRhbmdvOmFsdW1pbml1bSAzICovCisgIGNvbG9yOiAjYmFiZGI2OworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIGZvbnQtc2l6ZTogODAlOworfQorCisud2FybmluZworeworICAvKiB0YW5nbzpvcmFuZ2UgMC8xICovCisgIGJhY2tncm91bmQ6ICNmZmVlZDk7CisgIGJvcmRlci1jb2xvcjogI2ZmYjA0ZjsKK30KKy5ub3RlCit7CisgIC8qIHRhbmdvOmNoYW1lbGVvbiAwLzAuNSAqLworICBiYWNrZ3JvdW5kOiAjZDhmZmIyOworICBib3JkZXItY29sb3I6ICNhYmY1NjI7Cit9Cisubm90ZSwgLndhcm5pbmcKK3sKKyAgcGFkZGluZzogMC41ZW07CisgIGJvcmRlci13aWR0aDogMXB4OworICBib3JkZXItc3R5bGU6IHNvbGlkOworfQorLm5vdGUgaDMsIC53YXJuaW5nIGgzCit7CisgIG1hcmdpbi10b3A6IDAuMGVtCit9Cisubm90ZSBwLCAud2FybmluZyBwCit7CisgIG1hcmdpbi1ib3R0b206IDAuMGVtCit9CisKKy8qIGJsb2IgbGlua3MgKi8KK2gyIC5leHRyYWxpbmtzLCBoMyAuZXh0cmFsaW5rcworeworICBmbG9hdDogcmlnaHQ7CisgIC8qIHRhbmdvOmFsdW1pbml1bSAzICovCisgIGNvbG9yOiAjYmFiZGI2OworICBmb250LXNpemU6IDgwJTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKK30KKworLmFubm90YXRpb24KK3sKKyAgLyogdGFuZ286YWx1bWluaXVtIDUgKi8KKyAgY29sb3I6ICM1NTU3NTM7CisgIGZvbnQtc2l6ZTogODAlOworICBmb250LXdlaWdodDogbm9ybWFsOworfQorCisvKiBjb2RlIGxpc3RpbmdzICovCisKKy5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5jYnJhY2tldCAgIHsgY29sb3I6ICNhNDAwMDA7IH0gLyogdGFuZ286IHNjYXJsZXQgcmVkIDMgKi8KKy5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5jb21tZW50ICAgIHsgY29sb3I6ICNhMWEzOWQ7IH0gLyogdGFuZ286IGFsdW1pbml1bSA0ICovCisubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyAuZnVuY3Rpb24gICB7IGNvbG9yOiAjMDAwMDAwOyBmb250LXdlaWdodDogYm9sZDsgfQorLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLmZ1bmN0aW9uIGEgeyBjb2xvcjogIzExMzI2YjsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0gLyogdGFuZ286IHNreSBibHVlIDQgKi8KKy5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5rZXl3b3JkICAgIHsgY29sb3I6ICM0ZTlhMDY7IH0gLyogdGFuZ286IGNoYW1lbGVvbiAzICAqLworLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLmxpbmVudW0gICAgeyBjb2xvcjogI2JhYmRiNjsgfSAvKiB0YW5nbzogYWx1bWluaXVtIDMgKi8KKy5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5ub3JtYWwgICAgIHsgY29sb3I6ICMwMDAwMDA7IH0KKy5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5udW1iZXIgICAgIHsgY29sb3I6ICM3NTUwN2I7IH0gLyogdGFuZ286IHBsdW0gMiAqLworLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLnByZXByb2MgICAgeyBjb2xvcjogIzIwNGE4NzsgfSAvKiB0YW5nbzogc2t5IGJsdWUgMyAgKi8KKy5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5zdHJpbmcgICAgIHsgY29sb3I6ICNjMTdkMTE7IH0gLyogdGFuZ286IGNob2NvbGF0ZSAyICovCisubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyAudHlwZSAgICAgICB7IGNvbG9yOiAjMDAwMDAwOyB9CisubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyAudHlwZSBhICAgICB7IGNvbG9yOiAjMTEzMjZiOyB9IC8qIHRhbmdvOiBza3kgYmx1ZSA0ICovCisubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyAuc3ltYm9sICAgICB7IGNvbG9yOiAjY2U1YzAwOyB9IC8qIHRhbmdvOiBvcmFuZ2UgMyAqLworCisubGlzdGluZ19mcmFtZSB7CisgIC8qIHRhbmdvOnNreSBibHVlIDEgKi8KKyAgYm9yZGVyOiBzb2xpZCAxcHggIzcyOWZjZjsKKyAgcGFkZGluZzogMHB4OworfQorCisubGlzdGluZ19saW5lcywgLmxpc3RpbmdfY29kZSB7CisgIG1hcmdpbi10b3A6IDBweDsKKyAgbWFyZ2luLWJvdHRvbTogMHB4OworICBwYWRkaW5nOiAwLjVlbTsKK30KKy5saXN0aW5nX2xpbmVzIHsKKyAgLyogdGFuZ286c2t5IGJsdWUgMC41ICovCisgIGJhY2tncm91bmQ6ICNhNmM1ZTM7CisgIC8qIHRhbmdvOmFsdW1pbml1bSA2ICovCisgIGNvbG9yOiAjMmUzNDM2OworfQorLmxpc3RpbmdfY29kZSB7CisgIC8qIHRhbmdvOnNreSBibHVlIDAgKi8KKyAgYmFja2dyb3VuZDogI2U2ZjNmZjsKK30KKy5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIHsKKyAgLyogb3ZlcnJpZGUgZnJvbSBwcmV2aW91cyAqLworICBib3JkZXI6IG5vbmUgMHB4OworICBwYWRkaW5nOiAwcHg7Cit9CisubGlzdGluZ19saW5lcyBwcmUsIC5saXN0aW5nX2NvZGUgcHJlIHsKKyAgbWFyZ2luOiAwcHg7Cit9CisKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL3VwLnBuZyBiL2RvY3MvbGlicy9odG1sL3VwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWIzZTJhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9saWJzL2h0bWwvdXAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL01ha2VmaWxlLmFtIGIvZG9jcy9tYW51YWwvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjViNjAzNAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbWFudWFsL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNDEgQEAKKyMjIyB0aGlzIGlzIHRoZSBwYXJ0IHlvdSBjYW4gY3VzdG9taXplIGlmIHlvdSBuZWVkIHRvCisKKyMgcGFyYWxsZWwgYnVpbGRzIGRvbid0IHdvcmssIHByb2JhYmx5IGR1ZSB0byB0ZW1wb3JhcnkgZmlsZXMKK01BS0VGTEFHUyA9IC1qMQorCisjIGJhc2UgbmFtZSBvZiBkb2MKK0RPQyA9IG1hbnVhbAorIyBmb3JtYXRzIGRlZmluZWQgZm9yIHVwbG9hZC1kb2MubWFrCitGT1JNQVRTPWh0bWwgcHMgcGRmCisKKyMgbWFpbiB4bWwgZmlsZQorTUFJTiA9ICQoRE9DKS54bWwKKyMgYWxsIHhtbCBzb3VyY2VzCitYTUwgPSAkKG5vdGRpciAkKHdpbGRjYXJkICQoc3JjZGlyKS8qLnhtbCkpCisjIGJhc2Ugc3R5bGUgc2hlZXQKK0NTUyA9IGJhc2UuY3NzCisKKyMgaW1hZ2Ugc291cmNlcworUE5HX1NSQyA9ICQobm90ZGlyICQod2lsZGNhcmQgJChzcmNkaXIpLyoucG5nKSkKK0ZJR19TUkMgPSAkKG5vdGRpciAkKHdpbGRjYXJkICQoc3JjZGlyKS8qLmZpZykpCisKKyMgZXh0cmEgc291cmNlcyB0byBjb3B5IGluIGJ1aWxkIGRpcmVjdG9yeQorRVhUUkFfU1JDID0gCisKKyMjIyB0aGlzIGlzIHRoZSBnZW5lcmljIGJpdCBhbmQgeW91IHNob3VsZG4ndCBuZWVkIHRvIGNoYW5nZSB0aGlzCisKKyMgZ2V0IHRoZSBnZW5lcmljIGRvY2J1aWxkaW5nIE1ha2VmaWxlIHN0dWZmCitpbmNsdWRlICQoc3JjZGlyKS8uLi9tYW51YWxzLm1haworIyBnZXQgdGhlIGdlbmVyaWMgdXBsb2FkIHRhcmdldAoraW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbW1vbi91cGxvYWQtZG9jLm1haworCisjIyMgdGhpcyBpcyBzdGFuZGFyZCBhdXRvbWFrZSBzdHVmZgorCisjIHBhY2thZ2UgdXAgYWxsIHRoZSBzb3VyY2UKK0VYVFJBX0RJU1QgPSAkKFNSQykgUkVBRE1FCisKKyMgaW5zdGFsbCBkb2N1bWVudGF0aW9uCittYW51YWxkaXIgPSAkKGRvY2RpcikvJChET0MpCittYW51YWxfREFUQSA9ICQoUERGX0RBVCkgJChQU19EQVQpCisKK2luY2x1ZGUgJChzcmNkaXIpLy4uL2h0bWxpbnN0YWxsLm1hawpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvTWFrZWZpbGUuaW4gYi9kb2NzL21hbnVhbC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjg1NzMwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9tYW51YWwvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw4NzIgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMjIyB0aGlzIGlzIHRoZSBwYXJ0IHlvdSBjYW4gY3VzdG9taXplIGlmIHlvdSBuZWVkIHRvCisKKyMjIyBUaGVzZSBhcmUgYWxsIGdlbmVyaWM7IHdlIHNldCBhbGwgdGhlIHZhcmlhYmxlcyB3ZSBuZWVkCisKKyMgdGhpcyBzbmlwcGV0IGlzIHRvIGJlIGluY2x1ZGVkIGJ5IGJvdGggb3VyIGRvY2Jvb2sgbWFudWFscworIyBhbmQgZ3RrLWRvYyBBUEkgcmVmZXJlbmNlcworCisjIGl0IGFkZHMgYW4gdXBsb2FkIHRhcmdldCB0byBlYWNoIG9mIHRoZXNlIGRpcidzIE1ha2VmaWxlcworCisjIGVhY2ggTWFrZWZpbGUuYW0gc2hvdWxkIGRlZmluZSB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKKyMgLSBET0M6IHRoZSBiYXNlIG5hbWUgb2YgdGhlIGRvY3VtZW50YXRpb24KKyMgICAgICAgIChmYXEsIG1hbnVhbCwgcHdnLCBnc3RyZWFtZXIsIGdzdHJlYW1lci1saWJzKQorIyAtIEZPUk1BVFM6IHRoZSBmb3JtYXRzIGluIHdoaWNoIERPQyBpcyBvdXRwdXQKKyMgICAgICAgICAgICAoaHRtbCBwcyBwZGYpCisKKyMgaWYgeW91IHdhbnQgdG8gdXNlIGl0LCBtYWtlIHN1cmUgeW91ciAkSE9NRS8uc3NoL2NvbmZpZyBmaWxlIGNvbnRhaW5zIHRoZQorIyBjb3JyZWN0IFVzZXIgZW50cnkgZm9yIHRoZSBIb3N0IGVudHJ5IGZvciB0aGUgRE9DX1NFUlZFUgorCisjIHRoaXMgZmlsZSBhZGRzIHJ1bGVzIGZvciBpbnN0YWxsaW5nIGh0bWwgc3VidHJlZXMKKyMgSSByZWFsbHkgZG9uJ3QgbGlrZSB0aGlzIGhhY2ssIGJ1dCBhdXRvbWFrZSBkb2Vzbid0IHNlZW0gdG8gd2FudCB0bworIyBpbnN0YWxsIGRpcmVjdG9yeSB0cmVlcyA6KAorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitESVNUX0NPTU1PTiA9IFJFQURNRSAkKHNyY2RpcikvLi4vaHRtbGluc3RhbGwubWFrIFwKKwkkKHNyY2RpcikvLi4vbWFudWFscy5tYWsgJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKKwkkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9jb21tb24vdXBsb2FkLWRvYy5tYWsKK3N1YmRpciA9IGRvY3MvbWFudWFsCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtcHl0aG9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1zY3J1Yi1pbmNsdWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZnVuY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYXJzZXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2ludHJvc3BlY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jaGVjay1jaGVja3MubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ljb252Lm00ICQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00ICQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L25scy5tNCAkKHRvcF9zcmNkaXIpL200L3BvLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fJChWKSkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgIiAkQDsKK0FNX1ZfYXQgPSAkKGFtX192X2F0XyQoVikpCithbV9fdl9hdF8gPSAkKGFtX192X2F0XyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfYXRfMCA9IEAKK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxfbWF4ID0gNDAKK2FtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCisgIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKK2FtX19ub2Jhc2Vfc3RyaXAgPSBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgorYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCisgICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAorICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAorICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKK2FtX19iYXNlX2xpc3QgPSBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKK2FtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChtYW51YWxkaXIpIgorREFUQSA9ICQobWFudWFsX0RBVEEpCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKK0NDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKK0NIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKK0NIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKK0NIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUiA9IEBEQVRBRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAorRExMVE9PTCA9IEBETExUT09MQAorRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKK0VSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACitFWEVFWFQgPSBARVhFRVhUQAorRkZMQUdTID0gQEZGTEFHU0AKK0ZHUkVQID0gQEZHUkVQQAorRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKK0dDT1YgPSBAR0NPVkAKK0dDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAorR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACitHTElCX0xJQlMgPSBAR0xJQl9MSUJTQAorR0xJQl9PTkxZX0NGTEFHUyA9IEBHTElCX09OTFlfQ0ZMQUdTQAorR0xJQl9PTkxZX0xJQlMgPSBAR0xJQl9PTkxZX0xJQlNACitHTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKK0dMSUJfUkVRID0gQEdMSUJfUkVRQAorR01QX0xJQlMgPSBAR01QX0xJQlNACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dSRVAgPSBAR1JFUEAKK0dTTF9MSUJTID0gQEdTTF9MSUJTQAorR1NUX0FHRSA9IEBHU1RfQUdFQAorR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACitHU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACitHU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAorR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKK0dTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAorR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORUAKK0dTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKK0dTVF9ESVNBQkxFX05FVF9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfTkVUX0RFRklORUAKK0dTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACitHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAorR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAorR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKK0dTVF9ESVNBQkxFX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkVACitHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACitHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACitHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORSA9IEBHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORUAKK0dTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAorR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACitHU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAorR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACitHU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKK0dTVF9NQUpPUk1JTk9SID0gQEdTVF9NQUpPUk1JTk9SQAorR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACitHU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACitHU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAorR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACitHU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACitHU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACitHU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAorR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAorR1NUX1BLR19ERVBTID0gQEdTVF9QS0dfREVQU0AKK0dTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACitHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FQAorR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORUAKK0dTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKK0dTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACitHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkUgPSBAR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FQAorR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKK0hBVkVfRE9DQk9PSzJIVE1MID0gQEhBVkVfRE9DQk9PSzJIVE1MQAorSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKK0hBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKK0hBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKK0hBVkVfRklHMkRFViA9IEBIQVZFX0ZJRzJERVZACitIQVZFX0dNUCA9IEBIQVZFX0dNUEAKK0hBVkVfR1NMID0gQEhBVkVfR1NMQAorSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKK0hBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKK0hBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACitIQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKK0hBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACitIT1NUX0NQVSA9IEBIT1NUX0NQVUAKK0hUTUxfRElSID0gQEhUTUxfRElSQAorSU5FVF9BVE9OX0xJQlMgPSBASU5FVF9BVE9OX0xJQlNACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCRElSID0gQExJQkRJUkAKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCTSA9IEBMSUJNQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTE9DQUxFRElSID0gQExPQ0FMRURJUkAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACitQQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAorUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKK1BBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAorUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BFUkxfUEFUSCA9IEBQRVJMX1BBVEhACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQTFVHSU5ESVIgPSBAUExVR0lORElSQAorUE9TVUIgPSBAUE9TVUJACitQUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAorVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAorVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACitXSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACitYTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKK1hTTFRQUk9DID0gQFhTTFRQUk9DQAorWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3BsdWdpbmRpciA9IEBwbHVnaW5kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorCisjIHBhcmFsbGVsIGJ1aWxkcyBkb24ndCB3b3JrLCBwcm9iYWJseSBkdWUgdG8gdGVtcG9yYXJ5IGZpbGVzCitNQUtFRkxBR1MgPSAtajEKKworIyBiYXNlIG5hbWUgb2YgZG9jCitET0MgPSBtYW51YWwKKyMgZm9ybWF0cyBkZWZpbmVkIGZvciB1cGxvYWQtZG9jLm1haworRk9STUFUUyA9IGh0bWwgcHMgcGRmCisKKyMgbWFpbiB4bWwgZmlsZQorTUFJTiA9ICQoRE9DKS54bWwKKyMgYWxsIHhtbCBzb3VyY2VzCitYTUwgPSAkKG5vdGRpciAkKHdpbGRjYXJkICQoc3JjZGlyKS8qLnhtbCkpCisjIGJhc2Ugc3R5bGUgc2hlZXQKK0NTUyA9IGJhc2UuY3NzCisKKyMgaW1hZ2Ugc291cmNlcworUE5HX1NSQyA9ICQobm90ZGlyICQod2lsZGNhcmQgJChzcmNkaXIpLyoucG5nKSkKK0ZJR19TUkMgPSAkKG5vdGRpciAkKHdpbGRjYXJkICQoc3JjZGlyKS8qLmZpZykpCisKKyMgZXh0cmEgc291cmNlcyB0byBjb3B5IGluIGJ1aWxkIGRpcmVjdG9yeQorRVhUUkFfU1JDID0gCisKKyMgaW50ZXJtZWRpYXJ5IGJ1aWxkIHBhdGgKK0JVSUxERElSID0gYnVpbGQKKyMgc2FtZSBmb3IgaW1hZ2VzCitCVUlMRElNQUdFU0RJUiA9ICQoQlVJTERESVIpL2ltYWdlcworCisjIGltYWdlcworIyByaWdodCBub3csIHdlIG9ubHkgYWxsb3cgLnBuZyBhbmQgLmZpZyBhcyBzb3VyY2UKKyMgd2UgbWlnaHQgYWRkIG1vcmUgbGF0ZXIgaWYgd2UgZmVlbCB0aGUgbmVlZAorCisjIFBORydzIGNhbiBiZSBzb3VyY2Ugb3IgYnVpbHQgZnJvbSAuZmlnCitQTkcgPSAkKHN0cmlwICQoUE5HX1NSQykgJChGSUdfU1JDOi5maWc9LnBuZykpCisjIEVQUyAucHMgZmlsZXMgY2FuIGJlIGJ1aWx0IGZyb20gLnBuZyBvciAuZmlnCitFUFMgPSAkKHN0cmlwICQoRklHX1NSQzouZmlnPS5wcykgJChQTkdfU1JDOi5wbmc9LnBzKSkKKyMgUERGIC5wZGYgZmlsZXMgY2FuIGJlIGJ1aWx0IGZyb20gLnBuZyBvciAuZmlnCitQREYgPSAkKHN0cmlwICQoRklHX1NSQzouZmlnPS5wZGYpICQoUE5HX1NSQzoucG5nPS5wZGYpKQorCisjIHdoZXJlIHdlIGV4cGVjdCB0byBmaW5kIGltYWdlcyBkdXJpbmcgYnVpbGRpbmcsIHdoZXRoZXIgYnkgY29weWluZworIyBvciBieSBnZW5lcmF0aW5nIHRoZW0KK1BOR19CVUlMVCA9ICQoZm9yZWFjaCBmaWxlLCAkKFBORyksICQoQlVJTERJTUFHRVNESVIpLyQoZmlsZSkpCitFUFNfQlVJTFQgPSAkKGZvcmVhY2ggZmlsZSwgJChFUFMpLCAkKEJVSUxESU1BR0VTRElSKS8kKGZpbGUpKQorUERGX0JVSUxUID0gJChmb3JlYWNoIGZpbGUsICQoUERGKSwgJChCVUlMRElNQUdFU0RJUikvJChmaWxlKSkKK1NSQyA9ICQoWE1MKSAkKFBOR19TUkMpICQoRklHX1NSQykgJChDU1MpICQoRVhUUkFfU1JDKQorCisjIGdlbmVyYXRlIEE0IGRvY3MKK1BBUEVSX0xPQ0FMRSA9IG5sX05MCitARE9DX0hUTUxfRkFMU0VASFRNTF9EQVQgPSAKKworIyBjYW4gd2UgZ2VuZXJhdGUgSFRNTCA/CitARE9DX0hUTUxfVFJVRUBIVE1MX0RBVCA9IGh0bWwKK0BET0NfSFRNTF9GQUxTRUBIVE1MX1RBUkdFVCA9IAorQERPQ19IVE1MX1RSVUVASFRNTF9UQVJHRVQgPSBodG1sL2luZGV4Lmh0bWwKK0BET0NfUFNfRkFMU0VAUFNfREFUID0gCisKKyMgY2FuIHdlIGdlbmVyYXRlIFBTID8KK0BET0NfUFNfVFJVRUBQU19EQVQgPSAkKERPQykucHMKK0BET0NfUERGX0ZBTFNFQFBERl9EQVQgPSAKKworIyBjYW4gd2UgZ2VuZXJhdGUgUERGID8KK0BET0NfUERGX1RSVUVAUERGX0RBVCA9ICQoRE9DKS5wZGYKKworIyB0aGVzZSB2YXJpYWJsZXMgZGVmaW5lIHRoZSBsb2NhdGlvbiBvZiB0aGUgb25saW5lIGRvY3MKK0RPQ19TRVJWRVIgPSBnc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnCitET0NfQkFTRSA9IC9zcnYvZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy93d3cvZGF0YS9kb2MKK0RPQ19VUkwgPSAkKERPQ19TRVJWRVIpOiQoRE9DX0JBU0UpCisKKyMjIyB0aGlzIGlzIHRoZSBnZW5lcmljIGJpdCBhbmQgeW91IHNob3VsZG4ndCBuZWVkIHRvIGNoYW5nZSB0aGlzCisKKyMgZ2V0IHRoZSBnZW5lcmljIGRvY2J1aWxkaW5nIE1ha2VmaWxlIHN0dWZmCisjIGdldCB0aGUgZ2VuZXJpYyB1cGxvYWQgdGFyZ2V0CisKKyMjIyB0aGlzIGlzIHN0YW5kYXJkIGF1dG9tYWtlIHN0dWZmCisKKyMgcGFja2FnZSB1cCBhbGwgdGhlIHNvdXJjZQorRVhUUkFfRElTVCA9ICQoU1JDKSBSRUFETUUKKworIyBpbnN0YWxsIGRvY3VtZW50YXRpb24KK21hbnVhbGRpciA9ICQoZG9jZGlyKS8kKERPQykKK21hbnVhbF9EQVRBID0gJChQREZfREFUKSAkKFBTX0RBVCkKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpLy4uL21hbnVhbHMubWFrICQodG9wX3NyY2RpcikvY29tbW9uL3VwbG9hZC1kb2MubWFrICQoc3JjZGlyKS8uLi9odG1saW5zdGFsbC5tYWsgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZG9jcy9tYW51YWwvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbnUgZG9jcy9tYW51YWwvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCitpbnN0YWxsLW1hbnVhbERBVEE6ICQobWFudWFsX0RBVEEpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChtYW51YWxkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChtYW51YWxkaXIpIgorCUBsaXN0PSckKG1hbnVhbF9EQVRBKSc7IHRlc3QgLW4gIiQobWFudWFsZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChtYW51YWxkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChtYW51YWxkaXIpIiB8fCBleGl0ICQkPzsgXAorCWRvbmUKKwordW5pbnN0YWxsLW1hbnVhbERBVEE6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChtYW51YWxfREFUQSknOyB0ZXN0IC1uICIkKG1hbnVhbGRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwl0ZXN0IC1uICIkJGZpbGVzIiB8fCBleGl0IDA7IFwKKwllY2hvICIgKCBjZCAnJChERVNURElSKSQobWFudWFsZGlyKScgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisJY2QgIiQoREVTVERJUikkKG1hbnVhbGRpcikiICYmIHJtIC1mICQkZmlsZXMKK3RhZ3M6IFRBR1MKK1RBR1M6CisKK2N0YWdzOiBDVEFHUworQ1RBR1M6CisKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2stbG9jYWwKK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKERBVEEpIGFsbC1sb2NhbAoraW5zdGFsbGRpcnM6CisJZm9yIGRpciBpbiAiJChERVNURElSKSQobWFudWFsZGlyKSI7IGRvIFwKKwkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKKwlkb25lCitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbG9jYWwgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1kYXRhLWxvY2FsIGluc3RhbGwtbWFudWFsREFUQQorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZi1hbToKKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWxvY2FsIHVuaW5zdGFsbC1tYW51YWxEQVRBCisKKy5NQUtFOiBjaGVjay1hbSBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBhbGwgYWxsLWFtIGFsbC1sb2NhbCBjaGVjayBjaGVjay1hbSBjaGVjay1sb2NhbCBjbGVhbiBcCisJY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLWxvY2FsIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAorCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAorCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWRhdGEtbG9jYWwgaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gXAorCWluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBcCisJaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLW1hbnVhbERBVEEgXAorCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCisJaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKKwltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorCXVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWxvY2FsIHVuaW5zdGFsbC1tYW51YWxEQVRBCisKKworIyMjIGdlbmVyYXRlIGFsbCBkb2N1bWVudGF0aW9uIGJ5IGRlZmF1bHQKKyMgaG9vayBpbiBodG1sIGdlbmVyYXRpb24KK2FsbC1sb2NhbDogaHRtbAoraHRtbDogJChIVE1MX1RBUkdFVCkKK3BzOiAkKFBTX0RBVCkKK3BkZjogJChQREZfREFUKQorCitkZWJ1ZzoKKwlAZWNobyAib3V0cHV0dGluZyBzb21lIHVzZWZ1bCBkZWJ1ZyBpbmZvcm1hdGlvbiIKKwlAZWNobyAiU291cmNlIFhNTDoiCisJQGVjaG8gIlhNTDogJyQoWE1MKSciCisJQGVjaG8gIkNTUzogJyQoQ1NTKSciCisJQGVjaG8gIlNvdXJjZSBpbWFnZSBmaWxlczoiCisJQGVjaG8gIlBOR19TUkM6ICckKFBOR19TUkMpJyIKKwlAZWNobyAiRklHX1NSQzogJyQoRklHX1NSQyknIgorCUBlY2hvICJBbGwgdXNlZCBpbWFnZSBmaWxlczoiCisJQGVjaG8gIlBORzogJyQoUE5HKSciCisJQGVjaG8gIkVQUzogJyQoRVBTKSciCisJQGVjaG8gIlBERjogJyQoUERGKSciCisJQGVjaG8gIkFsbCB1c2VkIGltYWdlIGZpbGVzIGluIHRoZWlyIGJ1aWx0IHBhdGg6IgorCUBlY2hvICJQTkdfQlVJTFQ6ICckKFBOR19CVUlMVCknIgorCUBlY2hvICJFUFNfQlVJTFQ6ICckKEVQU19CVUlMVCknIgorCUBlY2hvICJQREZfQlVJTFQ6ICckKFBERl9CVUlMVCknIgorCUBlY2hvICJFbmQgcmVzdWx0IHByb2R1Y3RzOiIKKwlAZWNobyAiSFRNTF9EQVQ6ICckKEhUTUxfREFUKSciCisJQGVjaG8gIlBTX0RBVDogICAnJChQU19EQVQpJyIKKwlAZWNobyAiUERGX0RBVDogICckKFBERl9EQVQpJyIKKworIyBhIHJ1bGUgdG8gY29weSBhbGwgb2YgdGhlIHNvdXJjZSBmb3IgZG9jcyBpbnRvICQoYnVpbGRkaXIpL2J1aWxkCiskKEJVSUxERElSKS8kKE1BSU4pOiAkKFhNTCkgJChDU1MpICQoRVhUUkFfU1JDKQorCUAtbWtkaXIgLXAgJChCVUlMRERJUik7IFwKKwlpZiB0ZXN0ICJ4JChFWFRSQV9TUkMpIiAhPSAieCI7IHRoZW4gZm9yIGEgaW4gJChFWFRSQV9TUkMpOyBkbyBjcCAkKHNyY2RpcikvJCRhICQoQlVJTERESVIpOyBkb25lOyBmaSA7IFwKKwlmb3IgYSBpbiAkKFhNTCk7IGRvIGNwICQoc3JjZGlyKS8kJGEgJChCVUlMRERJUik7IGRvbmUgOyBcCisJZm9yIGEgaW4gJChDU1MpOyBkbyBjcCAkKHNyY2RpcikvJCRhICQoQlVJTERESVIpOyBkb25lIDsgXAorCWNwIC4uL3ZlcnNpb24uZW50aXRpZXMgJChCVUlMRERJUikgOyBcCisJY3AgJCh0b3Bfc3JjZGlyKS9kb2NzL3VybC5lbnRpdGllcyAkKEJVSUxERElSKQorCisjIHdlIHNob3VsZCBzd2l0Y2ggdG8geHNsdHByb2MKKyMgZG9jYm9vazJodG1sIGFrYSBqYWRlIGNhbid0IGFkZCB0aGUgZW5jb2RpbmcgZWFzaWx5IHRvIHRoZSBodG1sIG1ldGEKKyMgKGJ1dCB3ZSBhcmUgbGF6eSBhbmQganVzdCBhYnVzZSBzZWQgdG8gYWRkIGl0KQorIyBqdyAtZiBkb2Nib29rIC1iIGh0bWwgLWQgcHdnLmRzbCAtbyAuLi9odG1sIC1WICcldXNlLWlkLWFzLWZpbGVuYW1lJScgJChNQUlOKQorIyB0aGlzIGlzIGEgc3RhcnRpbmcgcG9pbnQKKyMgeHNsdHByb2MgLS1ub25ldCAvdXNyL3NoYXJlL3htbC9kb2Nib29rL3N0eWxlc2hlZXQvbndhbHNoL2h0bWwvZG9jYm9vay54c2wgcHdnLnhtbAorIyAKK2h0bWwvaW5kZXguaHRtbDogJChCVUlMRERJUikvJChNQUlOKSAkKFBOR19CVUlMVCkgJChGSUdfU1JDKQorCUAkKE1BS0UpIGNoZWNrLWxvY2FsCisJQGVjaG8gIioqKiBHZW5lcmF0aW5nIEhUTUwgb3V0cHV0ICoqKiIKKwlALW1rZGlyIC1wIGh0bWwKKwlAY3AgLWYgJChzcmNkaXIpLy4uL2ltYWdlLXBuZyAkKEJVSUxERElSKS9pbWFnZS5lbnRpdGllcworCUBjZCAkKEJVSUxERElSKSAmJiBTUF9FTkNPRElORz0iVVRGLTgiIGRvY2Jvb2syaHRtbCAtbyAuLi9odG1sIC1WICcldXNlLWlkLWFzLWZpbGVuYW1lJScgJChNQUlOKQorCUAkKFNFRCkgLWkgLWUgJ3MvXCheQ09OVEVOVC4qXClcKC4+XCkvXDE7Y2hhcnNldD1VVEYtOFwyLycgaHRtbC8qaHRtbAorCUB0ZXN0ICJ4JChDU1MpIiAhPSAieCIgJiYgXAorICAgICAgICAgIGVjaG8gIkNvcHlpbmcgLmNzcyBmaWxlczogJChDU1MpIiAmJiBcCisgICAgICAgICAgY3AgJChzcmNkaXIpLyQoQ1NTKSBodG1sCisJQHRlc3QgIngkKFBORykiICE9ICJ4IiAmJiBcCisgICAgICAgICAgZWNobyAiQ29weWluZyAucG5nIGltYWdlczogJChQTkdfQlVJTFQpIiAmJiBcCisJICBta2RpciAtcCBodG1sL2ltYWdlcyAmJiBcCisgICAgICAgICAgY3AgJChQTkdfQlVJTFQpIGh0bWwvaW1hZ2VzIHx8IHRydWUKKworJChET0MpLnBzOiAkKEJVSUxERElSKS8kKE1BSU4pICQoRVBTX0JVSUxUKSAkKFBOR19TUkMpICQoRklHX1NSQykKKwlAJChNQUtFKSBjaGVjay1sb2NhbAorCUBlY2hvICIqKiogR2VuZXJhdGluZyBQUyBvdXRwdXQgKioqIgorCUBjcCAtZiAkKHNyY2RpcikvLi4vaW1hZ2UtZXBzICQoQlVJTERESVIpL2ltYWdlLmVudGl0aWVzCisJY2QgJChCVUlMRERJUikgJiYgU1BfRU5DT0RJTkc9IlVURi04IiBkb2Nib29rMnBzIC1vIC4uICQoTUFJTikKKyMJZXhwb3J0IExDX1BBUEVSPSQoUEFQRVJfTE9DQUxFKSAmJiBjZCAkKEJVSUxERElSKSAmJiB4bWx0byBwcyAtbyAuLiAkKE1BSU4pCisKKyQoRE9DKS5wZGY6ICQoRE9DKS5wcworCUAkKE1BS0UpIGNoZWNrLWxvY2FsCisJQGVjaG8gIioqKiBHZW5lcmF0aW5nIFBERiBvdXRwdXQgKioqIgorCUBwczJwZGYgJChET0MpLnBzCisKKyMkKERPQykucGRmOiAkKE1BSU4pICQoUERGKSAkKEZJR19TUkMpCisjCUBlY2hvICIqKiogR2VuZXJhdGluZyBQREYgb3V0cHV0ICoqKiIKKyMJQGNwIC1mICQoc3JjZGlyKS8uLi9pbWFnZS1wZGYgaW1hZ2UuZW50aXRpZXMKKyMJQGV4cG9ydCBMQ19QQVBFUj0kKFBBUEVSX0xPQ0FMRSkgJiYgeG1sdG8gcGRmICQoTUFJTikKKyMJQHJtIGltYWdlLmVudGl0aWVzCisKK2NsZWFuLWxvY2FsOgorCS0kKFJNKSAtciAkKEJVSUxERElSKQorCS0kKFJNKSAtciBodG1sCisJLSQoUk0pICQoRE9DKS5wcworCS0kKFJNKSAkKERPQykucGRmCisJLSQoUk0pIC1yIHd3dworCisjIyMgaW1hZ2UgZ2VuZXJhdGlvbgorCisjIGNvcHkgcG5nIGZyb20gc291cmNlIGRpciBwbmcKKyQoQlVJTERJTUFHRVNESVIpLyUucG5nOiAkKHNyY2RpcikvJS5wbmcKKwlAZWNobyAiQ29weWluZyAkPCB0byAkQCIKKwlAbWtkaXIgLXAgJChCVUlMRElNQUdFU0RJUikKKwlAY3AgJDwgJEAKKyMgbWFrZSBwbmcgZnJvbSBmaWcKKyQoQlVJTERJTUFHRVNESVIpLyUucG5nOiAlLmZpZworCUBlY2hvICJHZW5lcmF0aW5nICRAIGZyb20gJDwiCisJQG1rZGlyIC1wICQoQlVJTERJTUFHRVNESVIpCisJQGZpZzJkZXYgLUxwbmcgJDwgJEAKKworIyBtYWtlIHBzKEVQUykgZnJvbSBmaWcKKyQoQlVJTERJTUFHRVNESVIpLyUucHM6ICUuZmlnCisJQGVjaG8gIkdlbmVyYXRpbmcgJEAgZnJvbSAkPCIKKwlAbWtkaXIgLXAgJChCVUlMRElNQUdFU0RJUikKKwlAZmlnMmRldiAtTGVwcyAkPCAkQAorCisjIG1ha2UgcGRmIGZyb20gZmlnCiskKEJVSUxESU1BR0VTRElSKS8lLnBkZjogJS5maWcKKwlAZWNobyAiR2VuZXJhdGluZyAkQCBmcm9tICQ8IgorCUBta2RpciAtcCAkKEJVSUxESU1BR0VTRElSKQorCUBmaWcyZGV2IC1McGRmICQ8ICRACisKKyMgbWFrZSBwZGYgZnJvbSBwbmcKKyQoQlVJTERJTUFHRVNESVIpLyUucGRmOiAlLnBuZworCUBlY2hvICJHZW5lcmF0aW5nICRAIGZyb20gJDwiCisJQG1rZGlyIC1wICQoQlVJTERJTUFHRVNESVIpCisJQGNhdCAkPCB8IHBuZ3RvcG5tIHwgcG5tdG9wcyAtbm90dXJuIDI+IC9kZXYvbnVsbCB8IGVwc3RvcGRmIC0tZmlsdGVyIC0tb3V0ZmlsZSAkQCAyPiAvZGV2L251bGwKKworIyBtYWtlIHBzKEVQUykgZnJvbSBwbmcKKyQoQlVJTERJTUFHRVNESVIpLyUucHM6ICUucG5nCisJQGVjaG8gIkdlbmVyYXRpbmcgJEAgZnJvbSAkPCIKKwlAbWtkaXIgLXAgJChCVUlMRElNQUdFU0RJUikKKwlAY2F0ICQ8IHwgcG5ndG9wbm0gfCBwbm10b3BzIC1ub3R1cm4gPiAkQCAyPiAvZGV2L251bGwKKworIyBtYWtlIHN1cmUgeG1sIHZhbGlkYXRlcyBwcm9wZXJseQorY2hlY2stbG9jYWw6ICQoQlVJTERESVIpLyQoTUFJTikKKwlAY3AgLWYgJChzcmNkaXIpLy4uL2ltYWdlLXBuZyAkKEJVSUxERElSKS9pbWFnZS5lbnRpdGllcworCWNkICQoQlVJTERESVIpICYmIHhtbGxpbnQgLW5vb3V0IC12YWxpZCAkKE1BSU4pCisKKyMgYXZvaWQgJ2NwOiBjYW5ub3QgY3JlYXRlIHJlZ3VsYXIgZmlsZSBgYnVpbGQvaW1hZ2UuZW50aXRpZXMnOiBGaWxlIGV4aXN0cycKKyMgZXJyb3JzIGR1cmluZyAnbWFrZSBkaXN0Y2hlY2snIGJ5IGRpc2FibGluZyBwYXJhbGxlbCBidWlsZHMKKy5OT1RQQVJBTExFTDoKKwordXBsb2FkOiAkKEZPUk1BVFMpCisJQGlmIGVjaG8gJChGT1JNQVRTKSB8IGdyZXAgaHRtbCA+IC9kZXYvbnVsbDsgdGhlbiBcCisJICBlY2hvICJQcmVwYXJpbmcgZG9jcyBmb3IgdXBsb2FkIChyZWJhc2luZyBjcm9zcy1yZWZlcmVuY2VzKSAuLi4iIDsgXAorCSAgaWYgdGVzdCB4JChidWlsZGRpcikgIT0geCQoc3JjZGlyKTsgdGhlbiBcCisJICAgIGVjaG8gIm1ha2UgdXBsb2FkIGNhbiBvbmx5IGJlIHVzZWQgaWYgc3JjZGlyID09IGJ1aWxkZGlyIjsgXAorCSAgICBleGl0IDE7IFwKKwkgIGZpOyBcCisJICAjIGd0a2RvYy1yZWJhc2Ugc29tZXRpbWVzIGdldHMgY29uZnVzZWQsIHNvIHJlc2V0IGV2ZXJ5dGhpbmcgdG8gXAorCSAgIyBsb2NhbCBsaW5rcyBiZWZvcmUgcmViYXNpbmcgdG8gb25saW5lIGxpbmtzICAgICAgICAgICAgICAgICAgIFwKKwkgIGd0a2RvYy1yZWJhc2UgLS1odG1sLWRpcj0kKGJ1aWxkZGlyKS9odG1sIDI+L2Rldi9udWxsIDI+L2Rldi9udWxsIDsgXAorCSAgcmViYXNlPWBndGtkb2MtcmViYXNlIC0tdmVyYm9zZSAtLW9ubGluZSAtLWh0bWwtZGlyPSQoYnVpbGRkaXIpL2h0bWxgIDsgXAorCSAgZWNobyAiJCRyZWJhc2UiIHwgZ3JlcCAtZSAiT24tKmxpbmUiOyBcCisJICBmb3IgcmVxIGluIGdsaWIgZ29iamVjdCBnc3RyZWFtZXIgZ3N0cmVhbWVyLWxpYnMgZ3N0LXBsdWdpbnMtYmFzZS1saWJzOyBkbyBcCisJICAgIGlmICEgKCBlY2hvICIkJHJlYmFzZSIgfCBncmVwIC1pIC1lICJPbi0qbGluZS4qLyQkcmVxLyIgKTsgdGhlbiBcCisJICAgICAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgOyBcCisJICAgICAgZWNobyAiIENvdWxkIG5vdCBkZXRlcm1pbmUgb25saW5lIGxvY2F0aW9uIGZvciAkJHJlcSBkb2NzLiBDcm9zcy1yZWZlcmVuY2luZyB3aWxsIGJlICIgOyBcCisJICAgICAgZWNobyAiIGJyb2tlbiwgc28gbm90IHVwbG9hZGluZy4gTWFrZSBzdXJlIHRoZSBsaWJyYXJ5J3MgZ3RrLWRvYyBkb2N1bWVudGF0aW9uIGlzICAgICIgOyBcCisJICAgICAgZWNobyAiIGluc3RhbGxlZCBzb21ld2hlcmUgaW4gL3Vzci9zaGFyZS9ndGstZG9jLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgOyBcCisJICAgICAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgOyBcCisJICAgICAgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICBkb25lOyBcCisJICBleHBvcnQgU1JDPSIkJFNSQyBodG1sIjsgXAorCWZpOyBcCisJaWYgZWNobyAkKEZPUk1BVFMpIHwgZ3JlcCBwcyA+IC9kZXYvbnVsbDsgdGhlbiBleHBvcnQgU1JDPSIkJFNSQyAkKERPQykucHMiOyBmaTsgXAorCWlmIGVjaG8gJChGT1JNQVRTKSB8IGdyZXAgcGRmID4gL2Rldi9udWxsOyB0aGVuIGV4cG9ydCBTUkM9IiQkU1JDICQoRE9DKS5wZGYiOyBmaTsgXAorCVwKKwkjIHVwbG9hZCByZWxlYXNlcyB0byBib3RoIDAuMTAuWC8gYW5kIGhlYWQvIHN1YmRpcmVjdG9yaWVzIFwKKwlpZiB0ZXN0ICJ4JChQQUNLQUdFX1ZFUlNJT05fTkFOTykiID0geDA7IHRoZW4gXAorCSAgZXhwb3J0IERJUj0kKERPQ19CQVNFKS9nc3RyZWFtZXIvJChWRVJTSU9OKS8kKERPQyk7IFwKKwkgIGVjaG8gVXBsb2FkaW5nICQkU1JDIHRvICQoRE9DX1NFUlZFUik6JCRESVI7IFwKKwkgIHNzaCAkKERPQ19TRVJWRVIpIG1rZGlyIC1wICQkRElSOyBcCisJICByc3luYyAtcnYgLWUgc3NoIC0tZGVsZXRlICQkU1JDICQoRE9DX1NFUlZFUik6JCRESVI7IFwKKwkgIHNzaCAkKERPQ19TRVJWRVIpIGNobW9kIC1SIGcrdyAkJERJUjsgXAorCWZpOyBcCisJXAorCWV4cG9ydCBESVI9JChET0NfQkFTRSkvZ3N0cmVhbWVyL2hlYWQvJChET0MpOyBcCisJZWNobyBVcGxvYWRpbmcgJCRTUkMgdG8gJChET0NfU0VSVkVSKTokJERJUjsgXAorCXNzaCAkKERPQ19TRVJWRVIpIG1rZGlyIC1wICQkRElSOyBcCisJcnN5bmMgLXJ2IC1lIHNzaCAtLWRlbGV0ZSAkJFNSQyAkKERPQ19TRVJWRVIpOiQkRElSOyBcCisJc3NoICQoRE9DX1NFUlZFUikgY2htb2QgLVIgZyt3ICQkRElSOyBcCisJXAorCWlmIGVjaG8gJChGT1JNQVRTKSB8IGdyZXAgaHRtbCA+IC9kZXYvbnVsbDsgdGhlbiBcCisJICBlY2hvICJVbi1wcmVwYXJpbmcgZG9jcyBmb3IgdXBsb2FkIChyZWJhc2luZyBjcm9zcy1yZWZlcmVuY2VzKSAuLi4iIDsgXAorCSAgZ3RrZG9jLXJlYmFzZSAtLWh0bWwtZGlyPSQoYnVpbGRkaXIpL2h0bWwgOyBcCisJZmk7IFwKKwllY2hvIERvbmUKKworQERPQ19IVE1MX1RSVUVAaW5zdGFsbC1kYXRhLWxvY2FsOiBodG1sCitARE9DX0hUTUxfVFJVRUAJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChkb2NkaXIpLyQoRE9DKQorQERPQ19IVE1MX1RSVUVACWNwIC1wciAkKEhUTUxfREFUKSAkKERFU1RESVIpJChkb2NkaXIpLyQoRE9DKQorCitARE9DX0hUTUxfVFJVRUB1bmluc3RhbGwtbG9jYWw6CitARE9DX0hUTUxfVFJVRUAJZm9yIHBhcnQgaW4gJChIVE1MX0RBVCk7IGRvIHJtIC1yZiAkKERFU1RESVIpJChkb2NkaXIpLyQoRE9DKS8kJHBhcnQ7IGRvbmUKK0BET0NfSFRNTF9GQUxTRUBpbnN0YWxsLWRhdGEtbG9jYWw6CitARE9DX0hUTUxfRkFMU0VAdW5pbnN0YWxsLWxvY2FsOgorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9kb2NzL21hbnVhbC9SRUFETUUgYi9kb2NzL21hbnVhbC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJjNGVhNgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbWFudWFsL1JFQURNRQpAQCAtMCwwICsxLDYxIEBACitDdXJyZW50IHJlcXVpcmVtZW50cyBmb3IgYnVpbGRpbmcgdGhlIGRvY3MgOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbGlieHNsdCA+PSAxLjAuNgorbGlieG1sMiA+PSAyLjQuMTIKKworCitUaGVzZSBhcmUgbm90IGluY2x1ZGVkIHdpdGggUkg3Mi4gIFRoZXkgYXJlIGluIGRlYmlhbi4gIEdERSBoYXMgZ29vZCBycG1zLgorCitUbyBidWlsZCBwZGYncyBmcm9tIHhzbHQgc3R1ZmYsIHlvdSBuZWVkIHhtbHRleCBhbmQgKG9uIHJlZGhhdCkgCitwYXNzaXZldGV4LiAgVGhleSBhcmUgbm90IGtub3duIHRvIGhhdmUgYmVlbiBidWlsdCBvbiBlaXRoZXIgcmVkaGF0IG9yIAorZGViaWFuIHlldCB0aG91Z2guCisKK1dpbmdvJ3MgbmV3IGNvbW1lbnRzIG9uIHRoZSBkb2MgYnVpbGRpbmcgOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIFdlbGwgaGUgc2hvdWxkIGFkZCB0aGVtIHNvb24gaGVyZSBzaW5jZSBoZSBvdmVyaGF1bGVkIGl0LiBBbmQgZGlkIGEgZ29vZCAKKyAgam9iIG9uIGl0IHRvbyA7KQorCitUaG9tYXMncyBuZXcgY29tbWVudHMgb24gdGhlIGRvYyBidWlsZGluZyA6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIG9yaWdpbmFsbHkgdGhlIG1hbnVhbCB3YXMgd3JpdHRlbiB3aXRoIERvY0Jvb2sgMy4wIGluIG1pbmQsIHdoaWNoIAorICBzdXBwb3J0ZWQgdGhlIGdyYXBoaWMgdGFnLiAgVGhhdCBpcyBub3cgZGVwcmVjYXRlZCwgc28gSSBjaGFuZ2VkIGl0IHRvIAorICB0aGUgbmV3IG1lZGlhb2JqZWN0IHRhZyBzZXQuCisKKyogZXBzIGZpbGVzIGluIGltYWdlcy8gc2hvdWxkIGJlIGdlbmVyYXRlZCBmcm9tIHRoZSBtYWtlZmlsZS4gIFlvdSBuZWVkIHRvIAorICBoYXZlIGZpZzJkZXYgaW5zdGFsbGVkIGZvciB0aGF0LgorCitFbnNvbmljJ3MgY29tbWVudHMgb24gdGhlIGRvYyBidWlsZCBzeXN0ZW0gOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0luIGNhc2UgeW91IGxpa2UgdG8gc2hhcmUgZmlsZXMgYmV0d2VlbiB0aGUgbWFudWFsIGFuZCB0aGUgcHdnIC0gaXQncworbm90IHRyaXZpYWwuCitCZWZvcmUgYW55dGhpbmcgaXMgZG9uZSwgdGhlIGJ1aWxkLXN5c3RlbSBjb3BpZXMgYWxsIHhtbCBmaWxlcyBpbnRvIHRoZSBidWlsZAorc3ViZGlyIGFuZCB0aGlzIGJyZWFrcyBpbmNsdWRpbmcgc2hhcmVkIGRvY3MgdmlhIGVudGl0aWVzLgorCitUaGUgZXhhbXBsZXMgc2hvdWxkIGJlIHVwZGF0ZWQgaW4gdGhlIHhtbC4gV2UgcnVuIGEgcGVybHNjcmlwdCBpbgordGVzdHMvZXhhbXBsZXMvbWFudWFsIHRoYXQgZXh0cmFjdHMgdGhlbS4KKworV3RheSdzIG9yaWdpbmFsIGNvbW1lbnRzIDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZvciBub3cgdXNlOgorCisgIGRiMmh0bWwgZ3N0cmVhbWVyLW1hbnVhbCAKKworKE9uIGRlYmlhbiwgZGIyaHRtbCBpcyBpbiB0aGUgY3lnbnVzLXN0eWxlc2hlZXRzIHBhY2thZ2UpCisKK1lvdSB3aWxsIG5lZWQgdGhlIHBuZyBzdXBwb3J0IGZvciBkb2Nib29rIChzZWUgR05PTUUgZG9jdW1lbnRhdGlvbiBwcm9qZWN0KQorCitjb252ZXJ0IHRoZSBmaWcgaW1hZ2VzIHRvIHBuZyB3aXRoOgorCisgIGZpZzJkZXYgLUwgcG5nIC1zIDE2IGZpZy88aW5wdXQgZmlsZT4uZmlnIGltYWdlcy88aW5wdXQgZmlsZT4ucG5nCisKK1B1dCBhIGxpbmsgaW4gdGhlIGdzdHJlYW1lci1tYW51YWwgZGlyZWN0b3J5IHdpdGgKKworICBsbiAtcyAuLi9pbWFnZXMgZ3N0cmVhbWVyLW1hbnVhbC9pbWFnZXMKKworcG9pbnQgeW91ciBicm93c2VyIHRvIGdzdHJlYW1lci1tYW51YWwvZ3N0cmVhbWVyLmh0bWwKKworRml4IHR5cGluZyBlcnJvcnMgYW5kIGNvcnJlY3QgYmFkIGVuZ2xpc2guCitMZXQgbWUga25vdyBhYm91dCB0aGUgc3R1ZmYgdGhhdCBuZWVkcyBzb21lIG1vcmUgZXhwbGFuYXRpb24uCitMZXQgbWUga25vdyBhYm91dCB0aGUgc3RydWN0dXJlIG9mIHRoZSBkb2N1bWVudC4KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2FkdmFuY2VkLWF1dG9wbHVnZ2luZy54bWwgYi9kb2NzL21hbnVhbC9hZHZhbmNlZC1hdXRvcGx1Z2dpbmcueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMjRmNzEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL21hbnVhbC9hZHZhbmNlZC1hdXRvcGx1Z2dpbmcueG1sCkBAIC0wLDAgKzEsNjIzIEBACis8Y2hhcHRlciBpZD0iY2hhcHRlci1hdXRvcGx1Z2dpbmciPgorICA8dGl0bGU+QXV0b3BsdWdnaW5nPC90aXRsZT4KKyAgPHBhcmE+CisgICAgSW4gPHhyZWYgbGlua2VuZD0iY2hhcHRlci1oZWxsb3dvcmxkIi8+LCB5b3UndmUgbGVhcm5lZCB0byBidWlsZCBhCisgICAgc2ltcGxlIG1lZGlhIHBsYXllciBmb3IgT2dnL1ZvcmJpcyBmaWxlcy4gQnkgdXNpbmcgYWx0ZXJuYXRpdmUgZWxlbWVudHMsCisgICAgeW91IGFyZSBhYmxlIHRvIGJ1aWxkIG1lZGlhIHBsYXllcnMgZm9yIG90aGVyIG1lZGlhIHR5cGVzLCBzdWNoIGFzCisgICAgT2dnL1NwZWV4LCBNUDMgb3IgZXZlbiB2aWRlbyBmb3JtYXRzLiBIb3dldmVyLCB5b3Ugd291bGQgcmF0aGVyIHdhbnQKKyAgICB0byBidWlsZCBhbiBhcHBsaWNhdGlvbiB0aGF0IGNhbiBhdXRvbWF0aWNhbGx5IGRldGVjdCB0aGUgbWVkaWEgdHlwZQorICAgIG9mIGEgc3RyZWFtIGFuZCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIHRoZSBiZXN0IHBvc3NpYmxlIHBpcGVsaW5lCisgICAgYnkgbG9va2luZyBhdCBhbGwgYXZhaWxhYmxlIGVsZW1lbnRzIGluIGEgc3lzdGVtLiBUaGlzIHByb2Nlc3MgaXMgY2FsbGVkCisgICAgYXV0b3BsdWdnaW5nLCBhbmQgJkdTdHJlYW1lcjsgY29udGFpbnMgaGlnaC1xdWFsaXR5IGF1dG9wbHVnZ2Vycy4gSWYKKyAgICB5b3UncmUgbG9va2luZyBmb3IgYW4gYXV0b3BsdWdnZXIsIGRvbid0IHJlYWQgYW55IGZ1cnRoZXIgYW5kIGdvIHRvCisgICAgPHhyZWYgbGlua2VuZD0iY2hhcHRlci1jb21wb25lbnRzIi8+LiBUaGlzIGNoYXB0ZXIgd2lsbCBleHBsYWluIHRoZQorICAgIDxlbXBoYXNpcz5jb25jZXB0PC9lbXBoYXNpcz4gb2YgYXV0b3BsdWdnaW5nIGFuZCB0eXBlZmluZGluZy4gSXQgd2lsbAorICAgIGV4cGxhaW4gd2hhdCBzeXN0ZW1zICZHU3RyZWFtZXI7IGluY2x1ZGVzIHRvIGR5bmFtaWNhbGx5IGRldGVjdCB0aGUKKyAgICB0eXBlIG9mIGEgbWVkaWEgc3RyZWFtLCBhbmQgaG93IHRvIGdlbmVyYXRlIGEgcGlwZWxpbmUgb2YgZGVjb2RlcgorICAgIGVsZW1lbnRzIHRvIHBsYXliYWNrIHRoaXMgbWVkaWEuIFRoZSBzYW1lIHByaW5jaXBsZXMgY2FuIGFsc28gYmUgdXNlZAorICAgIGZvciB0cmFuc2NvZGluZy4gQmVjYXVzZSBvZiB0aGUgZnVsbCBkeW5hbWljaXR5IG9mIHRoaXMgY29uY2VwdCwKKyAgICAmR1N0cmVhbWVyOyBjYW4gYmUgYXV0b21hdGljYWxseSBleHRlbmRlZCB0byBzdXBwb3J0IG5ldyBtZWRpYSB0eXBlcworICAgIHdpdGhvdXQgbmVlZGluZyBhbnkgYWRhcHRhdGlvbnMgdG8gaXRzIGF1dG9wbHVnZ2Vycy4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICBXZSB3aWxsIGZpcnN0IGludHJvZHVjZSB0aGUgY29uY2VwdCBvZiBNSU1FIHR5cGVzIGFzIGEgZHluYW1pYyBhbmQKKyAgICBleHRlbmRpYmxlIHdheSBvZiBpZGVudGlmeWluZyBtZWRpYSBzdHJlYW1zLiBBZnRlciB0aGF0LCB3ZSB3aWxsIGludHJvZHVjZQorICAgIHRoZSBjb25jZXB0IG9mIHR5cGVmaW5kaW5nIHRvIGZpbmQgdGhlIHR5cGUgb2YgYSBtZWRpYSBzdHJlYW0uIExhc3RseSwKKyAgICB3ZSB3aWxsIGV4cGxhaW4gaG93IGF1dG9wbHVnZ2luZyBhbmQgdGhlICZHU3RyZWFtZXI7IHJlZ2lzdHJ5IGNhbiBiZQorICAgIHVzZWQgdG8gc2V0dXAgYSBwaXBlbGluZSB0aGF0IHdpbGwgY29udmVydCBtZWRpYSBmcm9tIG9uZSBtaW1ldHlwZSB0bworICAgIGFub3RoZXIsIGZvciBleGFtcGxlIGZvciBtZWRpYSBkZWNvZGluZy4KKyAgPC9wYXJhPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1taW1lIj4KKyAgICA8dGl0bGU+TUlNRS10eXBlcyBhcyBhIHdheSB0byBpZGVudGlmeSBzdHJlYW1zPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFdlIGhhdmUgcHJldmlvdXNseSBpbnRyb2R1Y2VkIHRoZSBjb25jZXB0IG9mIGNhcGFiaWxpdGllcyBhcyBhIHdheQorICAgICAgZm9yIGVsZW1lbnRzIChvciwgcmF0aGVyLCBwYWRzKSB0byBhZ3JlZSBvbiBhIG1lZGlhIHR5cGUgd2hlbgorICAgICAgc3RyZWFtaW5nIGRhdGEgZnJvbSBvbmUgZWxlbWVudCB0byB0aGUgbmV4dCAoc2VlIDx4cmVmCisgICAgICBsaW5rZW5kPSJzZWN0aW9uLWNhcHMiLz4pLiBXZSBoYXZlIGV4cGxhaW5lZCB0aGF0IGEgY2FwYWJpbGl0eSBpcworICAgICAgYSBjb21iaW5hdGlvbiBvZiBhIG1pbWV0eXBlIGFuZCBhIHNldCBvZiBwcm9wZXJ0aWVzLiBGb3IgbW9zdAorICAgICAgY29udGFpbmVyIGZvcm1hdHMgKHRob3NlIGFyZSB0aGUgZmlsZXMgdGhhdCB5b3Ugd2lsbCBmaW5kIG9uIHlvdXIKKyAgICAgIGhhcmQgZGlzazsgT2dnLCBmb3IgZXhhbXBsZSwgaXMgYSBjb250YWluZXIgZm9ybWF0KSwgbm8gcHJvcGVydGllcworICAgICAgYXJlIG5lZWRlZCB0byBkZXNjcmliZSB0aGUgc3RyZWFtLiBPbmx5IGEgTUlNRS10eXBlIGlzIG5lZWRlZC4gQQorICAgICAgZnVsbCBsaXN0IG9mIE1JTUUtdHlwZXMgYW5kIGFjY29tcGFueWluZyBwcm9wZXJ0aWVzIGNhbiBiZSBmb3VuZAorICAgICAgaW4gPHVsaW5rIHR5cGU9Imh0dHAiCisgICAgICB1cmw9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL3B3Zy9odG1sL3NlY3Rpb24tdHlwZXMtZGVmaW5pdGlvbnMuaHRtbCI+dGhlCisgICAgICBQbHVnaW4gV3JpdGVyJ3MgR3VpZGU8L3VsaW5rPi4KKyAgICA8L3BhcmE+IAorICAgIDxwYXJhPgorICAgICAgQW4gZWxlbWVudCBtdXN0IGFzc29jaWF0ZSBhIE1JTUUtdHlwZSB0byBpdHMgc291cmNlIGFuZCBzaW5rIHBhZHMKKyAgICAgIHdoZW4gaXQgaXMgbG9hZGVkIGludG8gdGhlIHN5c3RlbS4gJkdTdHJlYW1lcjsga25vd3MgYWJvdXQgdGhlCisgICAgICBkaWZmZXJlbnQgZWxlbWVudHMgYW5kIHdoYXQgdHlwZSBvZiBkYXRhIHRoZXkgZXhwZWN0IGFuZCBlbWl0IHRocm91Z2gKKyAgICAgIHRoZSAmR1N0cmVhbWVyOyByZWdpc3RyeS4gVGhpcyBhbGxvd3MgZm9yIHZlcnkgZHluYW1pYyBhbmQgZXh0ZW5zaWJsZQorICAgICAgZWxlbWVudCBjcmVhdGlvbiBhcyB3ZSB3aWxsIHNlZS4KKyAgICA8L3BhcmE+IAorCisgICAgPHBhcmE+CisgICAgICBJbiA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLWhlbGxvd29ybGQiLz4sIHdlJ3ZlIGxlYXJuZWQgdG8gYnVpbGQgYQorICAgICAgbXVzaWMgcGxheWVyIGZvciBPZ2cvVm9yYmlzIGZpbGVzLiBMZXQncyBsb29rIGF0IHRoZSBNSU1FLXR5cGVzCisgICAgICBhc3NvY2lhdGVkIHdpdGggZWFjaCBwYWQgaW4gdGhpcyBwaXBlbGluZS4gPHhyZWYKKyAgICAgIGxpbmtlbmQ9InNlY3Rpb24tbWltZS1pbWciLz4gc2hvd3Mgd2hhdCBNSU1FLXR5cGUgYmVsb25ncyB0byBlYWNoCisgICAgICBwYWQgaW4gdGhpcyBwaXBlbGluZS4KKyAgICA8L3BhcmE+CisKKyAgICA8ZmlndXJlIGZsb2F0PSIxIiBpZD0ic2VjdGlvbi1taW1lLWltZyI+CisgICAgICA8dGl0bGU+VGhlIEhlbGxvIHdvcmxkIHBpcGVsaW5lIHdpdGggTUlNRSB0eXBlczwvdGl0bGU+CisgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgIDxpbWFnZW9iamVjdD4KKyAgICAgICAgICA8aW1hZ2VkYXRhIHNjYWxlPSI3NSIgZmlsZXJlZj0iaW1hZ2VzL21pbWUtd29ybGQuJmltYWdlOyIgZm9ybWF0PSImSU1BR0U7Ii8+CisgICAgICAgIDwvaW1hZ2VvYmplY3Q+CisgICAgICA8L21lZGlhb2JqZWN0PgorICAgIDwvZmlndXJlPgorCisgICAgPHBhcmE+CisgICAgICBOb3cgdGhhdCB3ZSBoYXZlIGFuIGlkZWEgaG93ICZHU3RyZWFtZXI7IGlkZW50aWZpZXMga25vd24gbWVkaWEKKyAgICAgIHN0cmVhbXMsIHdlIGNhbiBsb29rIGF0IG1ldGhvZHMgJkdTdHJlYW1lcjsgdXNlcyB0byBzZXR1cCBwaXBlbGluZXMKKyAgICAgIGZvciBtZWRpYSBoYW5kbGluZyBhbmQgZm9yIG1lZGlhIHR5cGUgZGV0ZWN0aW9uLgorICAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tdHlwZWZpbmRpbmciPgorICAgIDx0aXRsZT5NZWRpYSBzdHJlYW0gdHlwZSBkZXRlY3Rpb248L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgVXN1YWxseSwgd2hlbiBsb2FkaW5nIGEgbWVkaWEgc3RyZWFtLCB0aGUgdHlwZSBvZiB0aGUgc3RyZWFtIGlzIG5vdAorICAgICAga25vd24uIFRoaXMgbWVhbnMgdGhhdCBiZWZvcmUgd2UgY2FuIGNob29zZSBhIHBpcGVsaW5lIHRvIGRlY29kZSB0aGUKKyAgICAgIHN0cmVhbSwgd2UgZmlyc3QgbmVlZCB0byBkZXRlY3QgdGhlIHN0cmVhbSB0eXBlLiAmR1N0cmVhbWVyOyB1c2VzIHRoZQorICAgICAgY29uY2VwdCBvZiB0eXBlZmluZGluZyBmb3IgdGhpcy4gVHlwZWZpbmRpbmcgaXMgYSBub3JtYWwgcGFydCBvZiBhCisgICAgICBwaXBlbGluZSwgaXQgd2lsbCByZWFkIGRhdGEgZm9yIGFzIGxvbmcgYXMgdGhlIHR5cGUgb2YgYSBzdHJlYW0gaXMKKyAgICAgIHVua25vd24uIER1cmluZyB0aGlzIHBlcmlvZCwgaXQgd2lsbCBwcm92aWRlIGRhdGEgdG8gYWxsIHBsdWdpbnMKKyAgICAgIHRoYXQgaW1wbGVtZW50IGEgdHlwZWZpbmRlci4gV2hlbiBvbmUgb2YgdGhlIHR5cGVmaW5kZXJzIHJlY29nbml6ZXMKKyAgICAgIHRoZSBzdHJlYW0sIHRoZSB0eXBlZmluZCBlbGVtZW50IHdpbGwgZW1pdCBhIHNpZ25hbCBhbmQgYWN0IGFzIGEKKyAgICAgIHBhc3N0aHJvdWdoIG1vZHVsZSBmcm9tIHRoYXQgcG9pbnQgb24uIElmIG5vIHR5cGUgd2FzIGZvdW5kLCBpdCB3aWxsCisgICAgICBlbWl0IGFuIGVycm9yIGFuZCBmdXJ0aGVyIG1lZGlhIHByb2Nlc3Npbmcgd2lsbCBzdG9wLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIE9uY2UgdGhlIHR5cGVmaW5kIGVsZW1lbnQgaGFzIGZvdW5kIGEgdHlwZSwgdGhlIGFwcGxpY2F0aW9uIGNhbgorICAgICAgdXNlIHRoaXMgdG8gcGx1ZyB0b2dldGhlciBhIHBpcGVsaW5lIHRvIGRlY29kZSB0aGUgbWVkaWEgc3RyZWFtLgorICAgICAgVGhpcyB3aWxsIGJlIGRpc2N1c3NlZCBpbiB0aGUgbmV4dCBzZWN0aW9uLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFBsdWdpbnMgaW4gJkdTdHJlYW1lcjsgY2FuLCBhcyBtZW50aW9uZWQgYmVmb3JlLCBpbXBsZW1lbnQgdHlwZWZpbmRlcgorICAgICAgZnVuY3Rpb25hbGl0eS4gQSBwbHVnaW4gaW1wbGVtZW50aW5nIHRoaXMgZnVuY3Rpb25hbGl0eSB3aWxsIHN1Ym1pdAorICAgICAgYSBtaW1ldHlwZSwgb3B0aW9uYWxseSBhIHNldCBvZiBmaWxlIGV4dGVuc2lvbnMgY29tbW9ubHkgdXNlZCBmb3IgdGhpcworICAgICAgbWVkaWEgdHlwZSwgYW5kIGEgdHlwZWZpbmQgZnVuY3Rpb24uIE9uY2UgdGhpcyB0eXBlZmluZCBmdW5jdGlvbiBpbnNpZGUKKyAgICAgIHRoZSBwbHVnaW4gaXMgY2FsbGVkLCB0aGUgcGx1Z2luIHdpbGwgc2VlIGlmIHRoZSBkYXRhIGluIHRoaXMgbWVkaWEKKyAgICAgIHN0cmVhbSBtYXRjaGVzIGEgc3BlY2lmaWMgcGF0dGVybiB0aGF0IG1hcmtzIHRoZSBtZWRpYSB0eXBlIGlkZW50aWZpZWQKKyAgICAgIGJ5IHRoYXQgbWltZXR5cGUuIElmIGl0IGRvZXMsIGl0IHdpbGwgbm90aWZ5IHRoZSB0eXBlZmluZCBlbGVtZW50IG9mCisgICAgICB0aGlzIGZhY3QsIHRlbGxpbmcgd2hpY2ggbWVkaWF0eXBlIHdhcyByZWNvZ25pemVkIGFuZCBob3cgY2VydGFpbiB3ZQorICAgICAgYXJlIHRoYXQgdGhpcyBzdHJlYW0gaXMgaW5kZWVkIHRoYXQgbWVkaWF0eXBlLiBPbmNlIHRoaXMgcnVuIGhhcyBiZWVuCisgICAgICBjb21wbGV0ZWQgZm9yIGFsbCBwbHVnaW5zIGltcGxlbWVudGluZyBhIHR5cGVmaW5kIGZ1bmN0aW9uYWxpdHksIHRoZQorICAgICAgdHlwZWZpbmQgZWxlbWVudCB3aWxsIHRlbGwgdGhlIGFwcGxpY2F0aW9uIHdoYXQga2luZCBvZiBtZWRpYSBzdHJlYW0KKyAgICAgIGl0IHRoaW5rcyB0byBoYXZlIHJlY29nbml6ZWQuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgVGhlIGZvbGxvd2luZyBjb2RlIHNob3VsZCBleHBsYWluIGhvdyB0byB1c2UgdGhlIHR5cGVmaW5kIGVsZW1lbnQuCisgICAgICBJdCB3aWxsIHByaW50IHRoZSBkZXRlY3RlZCBtZWRpYSB0eXBlLCBvciB0ZWxsIHRoYXQgdGhlIG1lZGlhIHR5cGUKKyAgICAgIHdhcyBub3QgZm91bmQuIFRoZSBuZXh0IHNlY3Rpb24gd2lsbCBpbnRyb2R1Y2UgbW9yZSB1c2VmdWwgYmVoYXZpb3VycywKKyAgICAgIHN1Y2ggYXMgcGx1Z2dpbmcgdG9nZXRoZXIgYSBkZWNvZGluZyBwaXBlbGluZS4KKyAgICA8L3BhcmE+CisgICAgPHByb2dyYW1saXN0aW5nPjwhLS0gZXhhbXBsZS1iZWdpbiB0eXBlZmluZC5jIGEgLS0+CisjaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OworPCEtLSBleGFtcGxlLWVuZCB0eXBlZmluZC5jIGEgLS0+CitbLi4gbXlfYnVzX2NhbGxiYWNrIGdvZXMgaGVyZSAuLl08IS0tIGV4YW1wbGUtYmVnaW4gdHlwZWZpbmQuYyBiIC0tPjwhLS0KK3N0YXRpYyBnYm9vbGVhbgorbXlfYnVzX2NhbGxiYWNrIChHc3RCdXMgICAgICpidXMsCisgICAgICAgICAgICAgICAgIEdzdE1lc3NhZ2UgKm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgIGRhdGEpCit7CisgIEdNYWluTG9vcCAqbG9vcCA9IGRhdGE7CisKKyAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSkgeworICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6IHsKKyAgICAgIEdFcnJvciAqZXJyOworICAgICAgZ2NoYXIgKmRlYnVnOworCisgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobWVzc2FnZSwgJmFtcDtlcnIsICZhbXA7ZGVidWcpOworICAgICAgZ19wcmludCAoIkVycm9yOiAlc1xuIiwgZXJyLSZndDttZXNzYWdlKTsKKyAgICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKKyAgICAgIGdfZnJlZSAoZGVidWcpOworCisgICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKKyAgICAgIC8qIGVuZC1vZi1zdHJlYW0gKi8KKyAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgLyogcmVtb3ZlIGZyb20gcXVldWUgKi8KKyAgcmV0dXJuIFRSVUU7Cit9CistLT48IS0tIGV4YW1wbGUtZW5kIHR5cGVmaW5kLmMgYiAtLT4KKzwhLS0gZXhhbXBsZS1iZWdpbiB0eXBlZmluZC5jIGMgLS0+CitzdGF0aWMgZ2Jvb2xlYW4KK2lkbGVfZXhpdF9sb29wIChncG9pbnRlciBkYXRhKQoreworICBnX21haW5fbG9vcF9xdWl0ICgoR01haW5Mb29wICopIGRhdGEpOworCisgIC8qIG9uY2UgKi8KKyAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZAorY2JfdHlwZWZvdW5kIChHc3RFbGVtZW50ICp0eXBlZmluZCwKKwkgICAgICBndWludCAgICAgICBwcm9iYWJpbGl0eSwKKwkgICAgICBHc3RDYXBzICAgICpjYXBzLAorCSAgICAgIGdwb2ludGVyICAgIGRhdGEpCit7CisgIEdNYWluTG9vcCAqbG9vcCA9IGRhdGE7CisgIGdjaGFyICp0eXBlOworCisgIHR5cGUgPSBnc3RfY2Fwc190b19zdHJpbmcgKGNhcHMpOworICBnX3ByaW50ICgiTWVkaWEgdHlwZSAlcyBmb3VuZCwgcHJvYmFiaWxpdHkgJWQlJVxuIiwgdHlwZSwgcHJvYmFiaWxpdHkpOworICBnX2ZyZWUgKHR5cGUpOworCisgIC8qIHNpbmNlIHdlIGNvbm5lY3QgdG8gYSBzaWduYWwgaW4gdGhlIHBpcGVsaW5lIHRocmVhZCBjb250ZXh0LCB3ZSBuZWVkCisgICAqIHRvIHNldCBhbiBpZGxlIGhhbmRsZXIgdG8gZXhpdCB0aGUgbWFpbiBsb29wIGluIHRoZSBtYWlubG9vcCBjb250ZXh0LgorICAgKiBOb3JtYWxseSwgeW91ciBhcHAgc2hvdWxkIG5vdCBuZWVkIHRvIHdvcnJ5IGFib3V0IHN1Y2ggdGhpbmdzLiAqLworICBnX2lkbGVfYWRkIChpZGxlX2V4aXRfbG9vcCwgbG9vcCk7Cit9CisKK2dpbnQgCittYWluIChnaW50ICAgYXJnYywKKyAgICAgIGdjaGFyICphcmd2W10pCit7CisgIEdNYWluTG9vcCAqbG9vcDsKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpmaWxlc3JjLCAqdHlwZWZpbmQsICpmYWtlc2luazsKKyAgR3N0QnVzICpidXM7CisKKyAgLyogaW5pdCBHU3RyZWFtZXIgKi8KKyAgZ3N0X2luaXQgKCZhbXA7YXJnYywgJmFtcDthcmd2KTsKKyAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOworCisgIC8qIGNoZWNrIGFyZ3MgKi8KKyAgaWYgKGFyZ2MgIT0gMikgeworICAgIGdfcHJpbnQgKCJVc2FnZTogJXMgJmx0O2ZpbGVuYW1lJmd0O1xuIiwgYXJndlswXSk7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgLyogY3JlYXRlIGEgbmV3IHBpcGVsaW5lIHRvIGhvbGQgdGhlIGVsZW1lbnRzICovCisgIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGUiKTsKKworICBidXMgPSBnc3RfcGlwZWxpbmVfZ2V0X2J1cyAoR1NUX1BJUEVMSU5FIChwaXBlbGluZSkpOworICBnc3RfYnVzX2FkZF93YXRjaCAoYnVzLCBteV9idXNfY2FsbGJhY2ssIE5VTEwpOworICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOworCisgIC8qIGNyZWF0ZSBmaWxlIHNvdXJjZSBhbmQgdHlwZWZpbmQgZWxlbWVudCAqLworICBmaWxlc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmlsZXNyYyIsICJzb3VyY2UiKTsKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZmlsZXNyYyksICJsb2NhdGlvbiIsIGFyZ3ZbMV0sIE5VTEwpOworICB0eXBlZmluZCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInR5cGVmaW5kIiwgInR5cGVmaW5kZXIiKTsKKyAgZ19zaWduYWxfY29ubmVjdCAodHlwZWZpbmQsICJoYXZlLXR5cGUiLCBHX0NBTExCQUNLIChjYl90eXBlZm91bmQpLCBsb29wKTsKKyAgZmFrZXNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7CisKKyAgLyogc2V0dXAgKi8KKyAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBmaWxlc3JjLCB0eXBlZmluZCwgZmFrZXNpbmssIE5VTEwpOworICBnc3RfZWxlbWVudF9saW5rX21hbnkgKGZpbGVzcmMsIHR5cGVmaW5kLCBmYWtlc2luaywgTlVMTCk7CisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKHBpcGVsaW5lKSwgR1NUX1NUQVRFX1BMQVlJTkcpOworICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOworCisgIC8qIHVuc2V0ICovCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKHBpcGVsaW5lKSwgR1NUX1NUQVRFX05VTEwpOworICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChwaXBlbGluZSkpOworCisgIHJldHVybiAwOworfQorICAgIDwhLS0gZXhhbXBsZS1lbmQgdHlwZWZpbmQuYyBjIC0tPjwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+CisgICAgICBPbmNlIGEgbWVkaWEgdHlwZSBoYXMgYmVlbiBkZXRlY3RlZCwgeW91IGNhbiBwbHVnIGFuIGVsZW1lbnQgKGUuZy4gYQorICAgICAgZGVtdXhlciBvciBkZWNvZGVyKSB0byB0aGUgc291cmNlIHBhZCBvZiB0aGUgdHlwZWZpbmQgZWxlbWVudCwgYW5kCisgICAgICBkZWNvZGluZyBvZiB0aGUgbWVkaWEgc3RyZWFtIHdpbGwgc3RhcnQgcmlnaHQgYWZ0ZXIuCisgICAgPC9wYXJhPgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1keW5hbWljIj4KKyAgICA8dGl0bGU+UGx1Z2dpbmcgdG9nZXRoZXIgZHluYW1pYyBwaXBlbGluZXM8L3RpdGxlPgorICAgIDx3YXJuaW5nPjxwYXJhPgorICAgICAgVGhlIGNvZGUgaW4gdGhpcyBzZWN0aW9uIGlzIGJyb2tlbiwgb3V0ZGF0ZWQgYW5kIG92ZXJseSBjb21wbGljYXRlZC4KKyAgICAgIEFsc28sIHlvdSBzaG91bGQgdXNlIGRlY29kZWJpbiwgcGxheWJpbiBvciB1cmlkZWNvZGViaW4gdG8gZ2V0CisgICAgICBkZWNvZGVycyBwbHVnZ2VkIGF1dG9tYXRpY2FsbHkuCisgICAgPC9wYXJhPjwvd2FybmluZz4KKyAgICA8cGFyYT4gCisgICAgICBJbiB0aGlzIGNoYXB0ZXIgd2Ugd2lsbCBzZWUgaG93IHlvdSBjYW4gY3JlYXRlIGEgZHluYW1pYyBwaXBlbGluZS4gQQorICAgICAgZHluYW1pYyBwaXBlbGluZSBpcyBhIHBpcGVsaW5lIHRoYXQgaXMgdXBkYXRlZCBvciBjcmVhdGVkIHdoaWxlIGRhdGEKKyAgICAgaXMgZmxvd2luZyB0aHJvdWdoIGl0LiBXZSB3aWxsIGNyZWF0ZSBhIHBhcnRpYWwgcGlwZWxpbmUgZmlyc3QgYW5kIGFkZAorICAgICAgbW9yZSBlbGVtZW50cyB3aGlsZSB0aGUgcGlwZWxpbmUgaXMgcGxheWluZy4gVGhlIGJhc2lzIG9mIHRoaXMgcGxheWVyCisgICAgICB3aWxsIGJlIHRoZSBhcHBsaWNhdGlvbiB0aGF0IHdlIHdyb3RlIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uICg8eHJlZgorICAgICAgbGlua2VuZD0ic2VjdGlvbi10eXBlZmluZGluZyIvPikgdG8gaWRlbnRpZnkgdW5rbm93biBtZWRpYSBzdHJlYW1zLgorICAgIDwvcGFyYT4KKyAgICA8IS0tIGV4YW1wbGUtYmVnaW4gZHluYW1pYy5jIGEgLS0+PCEtLQorI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKKworR3N0RWxlbWVudCAqcGlwZWxpbmU7CisgICAgLS0+PCEtLSBleGFtcGxlLWVuZCBkeW5hbWljLmMgYSAtLT4KKyAgICA8cGFyYT4KKyAgICAgIE9uY2UgdGhlIHR5cGUgb2YgdGhlIG1lZGlhIGhhcyBiZWVuIGZvdW5kLCB3ZSB3aWxsIGZpbmQgZWxlbWVudHMgaW4KKyAgICAgIHRoZSByZWdpc3RyeSB0aGF0IGNhbiBkZWNvZGUgdGhpcyBzdHJlYW10eXBlLiBGb3IgdGhpcywgd2Ugd2lsbCBnZXQKKyAgICAgIGFsbCBlbGVtZW50IGZhY3RvcmllcyAod2hpY2ggd2UndmUgc2VlbiBiZWZvcmUgaW4gPHhyZWYKKyAgICAgIGxpbmtlbmQ9InNlY3Rpb24tZWxlbWVudHMtY3JlYXRlIi8+KSBhbmQgZmluZCB0aGUgb25lcyB3aXRoIHRoZQorICAgICAgZ2l2ZW4gTUlNRS10eXBlIGFuZCBjYXBhYmlsaXRpZXMgb24gdGhlaXIgc2lua3BhZC4gTm90ZSB0aGF0IHdlIHdpbGwKKyAgICAgIG9ubHkgdXNlIHBhcnNlcnMsIGRlbXV4ZXJzIGFuZCBkZWNvZGVycy4gV2Ugd2lsbCBub3QgdXNlIGZhY3RvcmllcyBmb3IKKyAgICAgIGFueSBvdGhlciBlbGVtZW50IHR5cGVzLCBvciB3ZSBtaWdodCBnZXQgaW50byBhIGxvb3Agb2YgZW5jb2RlcnMgYW5kCisgICAgICBkZWNvZGVycy4gRm9yIHRoaXMsIHdlIHdpbGwgd2FudCB0byBidWlsZCBhIGxpc3Qgb2YgPHF1b3RlPmFsbG93ZWQ8L3F1b3RlPgorICAgICAgZmFjdG9yaWVzIHJpZ2h0IGFmdGVyIGluaXRpYWxpemluZyAmR1N0cmVhbWVyOy4KKyAgICA8L3BhcmE+CisgICAgPHByb2dyYW1saXN0aW5nPjwhLS0gZXhhbXBsZS1iZWdpbiBkeW5hbWljLmMgYiAtLT4KK3N0YXRpYyBHTGlzdCAqZmFjdG9yaWVzOworCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHJlZ2lzdHJ5IGxvYWRlci4gSXRzIHJldHVybiB2YWx1ZQorICogKFRSVUUgb3IgRkFMU0UpIGRlY2lkZXMgd2hldGhlciB0aGUgZ2l2ZW4gZmVhdHVyZSB3aWxsIGJlIGluY2x1ZGVkCisgKiBpbiB0aGUgbGlzdCB0aGF0IHdlJ3JlIGdlbmVyYXRpbmcgZnVydGhlciBkb3duLgorICovCisKK3N0YXRpYyBnYm9vbGVhbgorY2JfZmVhdHVyZV9maWx0ZXIgKEdzdFBsdWdpbkZlYXR1cmUgKmZlYXR1cmUsCisJCSAgIGdwb2ludGVyICAgICAgICAgIGRhdGEpCit7CisgIGNvbnN0IGdjaGFyICprbGFzczsKKyAgZ3VpbnQgcmFuazsKKworICAvKiB3ZSBvbmx5IGNhcmUgYWJvdXQgZWxlbWVudCBmYWN0b3JpZXMgKi8KKyAgaWYgKCFHU1RfSVNfRUxFTUVOVF9GQUNUT1JZIChmZWF0dXJlKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgLyogb25seSBwYXJzZXJzLCBkZW11eGVycyBhbmQgZGVjb2RlcnMgKi8KKyAga2xhc3MgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9rbGFzcyAoR1NUX0VMRU1FTlRfRkFDVE9SWSAoZmVhdHVyZSkpOworICBpZiAoZ19zdHJyc3RyIChrbGFzcywgIkRlbXV4IikgPT0gTlVMTCAmYW1wOyZhbXA7CisgICAgICBnX3N0cnJzdHIgKGtsYXNzLCAiRGVjb2RlciIpID09IE5VTEwgJmFtcDsmYW1wOworICAgICAgZ19zdHJyc3RyIChrbGFzcywgIlBhcnNlIikgPT0gTlVMTCkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgLyogb25seSBzZWxlY3QgZWxlbWVudHMgd2l0aCBhdXRvcGx1Z2dpbmcgcmFuayAqLworICByYW5rID0gZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9yYW5rIChmZWF0dXJlKTsKKyAgaWYgKHJhbmsgJmx0OyBHU1RfUkFOS19NQVJHSU5BTCkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBzb3J0IGZlYXR1cmVzIGJ5IHJhbmsuCisgKi8KKworc3RhdGljIGdpbnQKK2NiX2NvbXBhcmVfcmFua3MgKEdzdFBsdWdpbkZlYXR1cmUgKmYxLAorCQkgIEdzdFBsdWdpbkZlYXR1cmUgKmYyKQoreworICByZXR1cm4gZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9yYW5rIChmMikgLSBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3JhbmsgKGYxKTsKK30KKworc3RhdGljIHZvaWQKK2luaXRfZmFjdG9yaWVzICh2b2lkKQoreworICAvKiBmaXJzdCBmaWx0ZXIgb3V0IHRoZSBpbnRlcmVzdGluZyBlbGVtZW50IGZhY3RvcmllcyAqLworICBmYWN0b3JpZXMgPSBnc3RfcmVnaXN0cnlfZmVhdHVyZV9maWx0ZXIgKAorICAgICAgZ3N0X3JlZ2lzdHJ5X2dldF9kZWZhdWx0ICgpLAorICAgICAgKEdzdFBsdWdpbkZlYXR1cmVGaWx0ZXIpIGNiX2ZlYXR1cmVfZmlsdGVyLCBGQUxTRSwgTlVMTCk7CisKKyAgLyogc29ydCB0aGVtIGFjY29yZGluZyB0byB0aGVpciByYW5rcyAqLworICBmYWN0b3JpZXMgPSBnX2xpc3Rfc29ydCAoZmFjdG9yaWVzLCAoR0NvbXBhcmVGdW5jKSBjYl9jb21wYXJlX3JhbmtzKTsKK30KKyAgICA8IS0tIGV4YW1wbGUtZW5kIGR5bmFtaWMuYyBiIC0tPjwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+CisgICAgICBGcm9tIHRoaXMgbGlzdCBvZiBlbGVtZW50IGZhY3Rvcmllcywgd2Ugd2lsbCBzZWxlY3QgdGhlIG9uZSB0aGF0IG1vc3QKKyAgICAgIGxpa2VseSB3aWxsIGhlbHAgdXMgZGVjb2RpbmcgYSBtZWRpYSBzdHJlYW0gdG8gYSBnaXZlbiBvdXRwdXQgdHlwZS4KKyAgICAgIEZvciBlYWNoIG5ld2x5IGNyZWF0ZWQgZWxlbWVudCwgd2Ugd2lsbCBhZ2FpbiB0cnkgdG8gYXV0b3BsdWcgbmV3CisgICAgICBlbGVtZW50cyB0byBpdHMgc291cmNlIHBhZChzKS4gQWxzbywgaWYgdGhlIGVsZW1lbnQgaGFzIGR5bmFtaWMgcGFkcworICAgICAgKHdoaWNoIHdlJ3ZlIHNlZW4gYmVmb3JlIGluIDx4cmVmIGxpbmtlbmQ9InNlY3Rpb24tcGFkcy1keW5hbWljIi8+KSwKKyAgICAgIHdlIHdpbGwgbGlzdGVuIGZvciBuZXdseSBjcmVhdGVkIHNvdXJjZSBwYWRzIGFuZCBoYW5kbGUgdGhvc2UsIHRvby4KKyAgICAgIFRoZSBmb2xsb3dpbmcgY29kZSByZXBsYWNlcyB0aGUgPGZ1bmN0aW9uPmNiX3R5cGVfZm91bmQ8L2Z1bmN0aW9uPgorICAgICAgZnJvbSB0aGUgcHJldmlvdXMgc2VjdGlvbiB3aXRoIGEgZnVuY3Rpb24gdG8gaW5pdGlhdGUgYXV0b3BsdWdnaW5nLAorICAgICAgd2hpY2ggd2lsbCBjb250aW51ZSB3aXRoIHRoZSBhYm92ZSBhcHByb2FjaC4KKyAgICA8L3BhcmE+CisgICAgPHByb2dyYW1saXN0aW5nPjwhLS0gZXhhbXBsZS1iZWdpbiBkeW5hbWljLmMgYyAtLT4KK3N0YXRpYyB2b2lkIHRyeV90b19wbHVnIChHc3RQYWQgKnBhZCwgY29uc3QgR3N0Q2FwcyAqY2Fwcyk7CisKK3N0YXRpYyBHc3RFbGVtZW50ICphdWRpb3Npbms7CisKK3N0YXRpYyB2b2lkCitjYl9uZXdwYWQgKEdzdEVsZW1lbnQgKmVsZW1lbnQsCisJICAgR3N0UGFkICAgICAqcGFkLAorCSAgIGdwb2ludGVyICAgIGRhdGEpCit7CisgIEdzdENhcHMgKmNhcHM7CisKKyAgY2FwcyA9IGdzdF9wYWRfZ2V0X2NhcHMgKHBhZCwgTlVMTCk7CisgIHRyeV90b19wbHVnIChwYWQsIGNhcHMpOworICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Cit9CisKK3N0YXRpYyB2b2lkCitjbG9zZV9saW5rIChHc3RQYWQgICAgICAqc3JjcGFkLAorCSAgICBHc3RFbGVtZW50ICAqc2lua2VsZW1lbnQsCisJICAgIGNvbnN0IGdjaGFyICpwYWRuYW1lLAorCSAgICBjb25zdCBHTGlzdCAqdGVtcGxsaXN0KQoreworICBHc3RQYWQgKnBhZDsKKyAgZ2Jvb2xlYW4gaGFzX2R5bmFtaWNfcGFkcyA9IEZBTFNFOworCisgIGdfcHJpbnQgKCJQbHVnZ2luZyBwYWQgJXM6JXMgdG8gbmV3bHkgY3JlYXRlZCAlczolc1xuIiwKKwkgICBnc3Rfb2JqZWN0X2dldF9uYW1lIChHU1RfT0JKRUNUIChnc3RfcGFkX2dldF9wYXJlbnQgKHNyY3BhZCkpKSwKKwkgICBnc3RfcGFkX2dldF9uYW1lIChzcmNwYWQpLAorCSAgIGdzdF9vYmplY3RfZ2V0X25hbWUgKEdTVF9PQkpFQ1QgKHNpbmtlbGVtZW50KSksIHBhZG5hbWUpOworCisgIC8qIGFkZCB0aGUgZWxlbWVudCB0byB0aGUgcGlwZWxpbmUgYW5kIHNldCBjb3JyZWN0IHN0YXRlICovCisgIGlmIChzaW5rZWxlbWVudCAhPSBhdWRpb3NpbmspIHsKKyAgICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzaW5rZWxlbWVudCk7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzaW5rZWxlbWVudCwgR1NUX1NUQVRFX1JFQURZKTsKKyAgfQorICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc2lua2VsZW1lbnQsIHBhZG5hbWUpOworICBnc3RfcGFkX2xpbmsgKHNyY3BhZCwgcGFkKTsKKyAgaWYgKHNpbmtlbGVtZW50ICE9IGF1ZGlvc2luaykgeworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2lua2VsZW1lbnQsIEdTVF9TVEFURV9QQVVTRUQpOworICB9CisgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKHBhZCkpOworCisgIC8qIGlmIHdlIGhhdmUgc3RhdGljIHNvdXJjZSBwYWRzLCBsaW5rIHRob3NlLiBJZiB3ZSBoYXZlIGR5bmFtaWMKKyAgICogc291cmNlIHBhZHMsIGxpc3RlbiBmb3IgcGFkLWFkZGVkIHNpZ25hbHMgb24gdGhlIGVsZW1lbnQgKi8KKyAgZm9yICggOyB0ZW1wbGxpc3QgIT0gTlVMTDsgdGVtcGxsaXN0ID0gdGVtcGxsaXN0LT5uZXh0KSB7CisgICAgR3N0U3RhdGljUGFkVGVtcGxhdGUgKnRlbXBsID0gdGVtcGxsaXN0LT5kYXRhOworCisgICAgLyogb25seSBzb3VyY2VwYWRzLCBubyByZXF1ZXN0IHBhZHMgKi8KKyAgICBpZiAodGVtcGwtPmRpcmVjdGlvbiAhPSBHU1RfUEFEX1NSQyB8fAorICAgICAgICB0ZW1wbC0+cHJlc2VuY2UgPT0gR1NUX1BBRF9SRVFVRVNUKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHRlbXBsLT5wcmVzZW5jZSkgeworICAgICAgY2FzZSBHU1RfUEFEX0FMV0FZUzogeworICAgICAgICBHc3RQYWQgKnBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rZWxlbWVudCwgdGVtcGwtPm5hbWVfdGVtcGxhdGUpOworICAgICAgICBHc3RDYXBzICpjYXBzID0gZ3N0X3BhZF9nZXRfY2FwcyAocGFkLCBOVUxMKTsKKworICAgICAgICAvKiBsaW5rICovCisgICAgICAgIHRyeV90b19wbHVnIChwYWQsIGNhcHMpOworICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChwYWQpKTsKKyAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2UgR1NUX1BBRF9TT01FVElNRVM6CisgICAgICAgIGhhc19keW5hbWljX3BhZHMgPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIC8qIGxpc3RlbiBmb3IgbmV3bHkgY3JlYXRlZCBwYWRzIGlmIHRoaXMgZWxlbWVudCBzdXBwb3J0cyB0aGF0ICovCisgIGlmIChoYXNfZHluYW1pY19wYWRzKSB7CisgICAgZ19zaWduYWxfY29ubmVjdCAoc2lua2VsZW1lbnQsICJwYWQtYWRkZWQiLCBHX0NBTExCQUNLIChjYl9uZXdwYWQpLCBOVUxMKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAordHJ5X3RvX3BsdWcgKEdzdFBhZCAgICAgICAgKnBhZCwKKwkgICAgIGNvbnN0IEdzdENhcHMgKmNhcHMpCit7CisgIEdzdE9iamVjdCAqcGFyZW50ID0gR1NUX09CSkVDVCAoR1NUX09CSkVDVF9QQVJFTlQgKHBhZCkpOworICBjb25zdCBnY2hhciAqbWltZTsKKyAgY29uc3QgR0xpc3QgKml0ZW07CisgIEdzdENhcHMgKnJlcywgKmF1ZGlvY2FwczsKKworICAvKiBkb24ndCBwbHVnIGlmIHdlJ3JlIGFscmVhZHkgcGx1Z2dlZCAtIEZJWE1FOiBtZW1sZWFrIGZvciBwYWQgKi8KKyAgaWYgKEdTVF9QQURfSVNfTElOS0VEIChnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoYXVkaW9zaW5rLCAic2luayIpKSkgeworICAgIGdfcHJpbnQgKCJPbWl0dGluZyBsaW5rIGZvciBwYWQgJXM6JXMgYmVjYXVzZSB3ZSdyZSBhbHJlYWR5IGxpbmtlZFxuIiwKKwkgICAgIEdTVF9PQkpFQ1RfTkFNRSAocGFyZW50KSwgR1NUX09CSkVDVF9OQU1FIChwYWQpKTsKKyAgICByZXR1cm47CisgIH0KKworICAvKiBhcyBzYWlkIGFib3ZlLCB3ZSBvbmx5IHRyeSB0byBwbHVnIGF1ZGlvLi4uIE9taXQgdmlkZW8gKi8KKyAgbWltZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApKTsKKyAgaWYgKGdfc3RycnN0ciAobWltZSwgInZpZGVvIikpIHsKKyAgICBnX3ByaW50ICgiT21pdHRpbmcgbGluayBmb3IgcGFkICVzOiVzIGJlY2F1c2UgbWltZXR5cGUgJXMgaXMgbm9uLWF1ZGlvXG4iLAorCSAgICAgR1NUX09CSkVDVF9OQU1FIChwYXJlbnQpLCBHU1RfT0JKRUNUX05BTUUgKHBhZCksIG1pbWUpOworICAgIHJldHVybjsKKyAgfQorCisgIC8qIGNhbiBpdCBsaW5rIHRvIHRoZSBhdWRpb3BhZD8gKi8KKyAgYXVkaW9jYXBzID0gZ3N0X3BhZF9nZXRfY2FwcyAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGF1ZGlvc2luaywgInNpbmsiKSwKKyAgTlVMTCk7CisgIHJlcyA9IGdzdF9jYXBzX2ludGVyc2VjdCAoY2FwcywgYXVkaW9jYXBzKTsKKyAgaWYgKHJlcyAmYW1wOyZhbXA7ICFnc3RfY2Fwc19pc19lbXB0eSAocmVzKSkgeworICAgIGdfcHJpbnQgKCJGb3VuZCBwYWQgdG8gbGluayB0byBhdWRpb3NpbmsgLSBwbHVnZ2luZyBpcyBub3cgZG9uZVxuIik7CisgICAgY2xvc2VfbGluayAocGFkLCBhdWRpb3NpbmssICJzaW5rIiwgTlVMTCk7CisgICAgZ3N0X2NhcHNfdW5yZWYgKGF1ZGlvY2Fwcyk7CisgICAgZ3N0X2NhcHNfdW5yZWYgKHJlcyk7CisgICAgcmV0dXJuOworICB9CisgIGdzdF9jYXBzX3VucmVmIChhdWRpb2NhcHMpOworICBnc3RfY2Fwc191bnJlZiAocmVzKTsKKworICAvKiB0cnkgdG8gcGx1ZyBmcm9tIG91ciBsaXN0ICovCisgIGZvciAoaXRlbSA9IGZhY3RvcmllczsgaXRlbSAhPSBOVUxMOyBpdGVtID0gaXRlbS0+bmV4dCkgeworICAgIEdzdEVsZW1lbnRGYWN0b3J5ICpmYWN0b3J5ID0gR1NUX0VMRU1FTlRfRkFDVE9SWSAoaXRlbS0+ZGF0YSk7CisgICAgY29uc3QgR0xpc3QgKnBhZHM7CisKKyAgICBmb3IgKHBhZHMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9zdGF0aWNfcGFkX3RlbXBsYXRlcyAoZmFjdG9yeSk7CisgICAgICAgICBwYWRzICE9IE5VTEw7IHBhZHMgPSBwYWRzLT5uZXh0KSB7CisgICAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqdGVtcGwgPSBwYWRzLT5kYXRhOworCisgICAgICAvKiBmaW5kIHRoZSBzaW5rIHRlbXBsYXRlIC0gbmVlZCBhbiBhbHdheXMgcGFkKi8KKyAgICAgIGlmICh0ZW1wbC0+ZGlyZWN0aW9uICE9IEdTVF9QQURfU0lOSyB8fAorICAgICAgICAgIHRlbXBsLT5wcmVzZW5jZSAhPSBHU1RfUEFEX0FMV0FZUykgeworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgLyogY2FuIGl0IGxpbms/ICovCisgICAgICByZXMgPSBnc3RfY2Fwc19pbnRlcnNlY3QgKGNhcHMsCisgICAgICAgICAgZ3N0X3N0YXRpY19jYXBzX2dldCAoJmFtcDt0ZW1wbC0+c3RhdGljX2NhcHMpKTsKKyAgICAgIGlmIChyZXMgJmFtcDsmYW1wOyAhZ3N0X2NhcHNfaXNfZW1wdHkgKHJlcykpIHsKKyAgICAgICAgR3N0RWxlbWVudCAqZWxlbWVudDsKKyAgICAgICAgZ2NoYXIgKm5hbWVfdGVtcGxhdGUgPSBnX3N0cmR1cCAodGVtcGwtPm5hbWVfdGVtcGxhdGUpOworCisgICAgICAgIC8qIGNsb3NlIGxpbmsgYW5kIHJldHVybiAqLworICAgICAgICBnc3RfY2Fwc191bnJlZiAocmVzKTsKKyAgICAgICAgZWxlbWVudCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlIChmYWN0b3J5LCBOVUxMKTsKKyAgICAgICAgY2xvc2VfbGluayAocGFkLCBlbGVtZW50LCBuYW1lX3RlbXBsYXRlLAorCQkgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfc3RhdGljX3BhZF90ZW1wbGF0ZXMgKGZhY3RvcnkpKTsKKyAgICAgICAgZ19mcmVlIChuYW1lX3RlbXBsYXRlKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgZ3N0X2NhcHNfdW5yZWYgKHJlcyk7CisKKyAgICAgIC8qIHdlIG9ubHkgY2hlY2sgb25lIHNpbmsgdGVtcGxhdGUgcGVyIGZhY3RvcnksIHNvIG1vdmUgb24gdG8gdGhlCisgICAgICAgKiBuZXh0IGZhY3Rvcnkgbm93ICovCisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICAvKiBpZiB3ZSBnZXQgaGVyZSwgbm8gaXRlbSB3YXMgZm91bmQgKi8KKyAgZ19wcmludCAoIk5vIGNvbXBhdGlibGUgcGFkIGZvdW5kIHRvIGRlY29kZSAlcyBvbiAlczolc1xuIiwKKwkgICBtaW1lLCBHU1RfT0JKRUNUX05BTUUgKHBhcmVudCksIEdTVF9PQkpFQ1RfTkFNRSAocGFkKSk7Cit9CisKK3N0YXRpYyB2b2lkCitjYl90eXBlZm91bmQgKEdzdEVsZW1lbnQgKnR5cGVmaW5kLAorCSAgICAgIGd1aW50ICAgICAgIHByb2JhYmlsaXR5LAorCSAgICAgIEdzdENhcHMgICAgKmNhcHMsCisJICAgICAgZ3BvaW50ZXIgICAgZGF0YSkKK3sKKyAgZ2NoYXIgKnM7CisgIEdzdFBhZCAqcGFkOworCisgIHMgPSBnc3RfY2Fwc190b19zdHJpbmcgKGNhcHMpOworICBnX3ByaW50ICgiRGV0ZWN0ZWQgbWVkaWEgdHlwZSAlc1xuIiwgcyk7CisgIGdfZnJlZSAocyk7CisKKyAgLyogYWN0dWFsbHkgcGx1ZyBub3cgKi8KKyAgcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHR5cGVmaW5kLCAic3JjIik7CisgIHRyeV90b19wbHVnIChwYWQsIGNhcHMpOworICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChwYWQpKTsKK30KKyAgICA8IS0tIGV4YW1wbGUtZW5kIGR5bmFtaWMuYyBjIC0tPjwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+CisgICAgICBCeSBkb2luZyBhbGwgdGhpcywgd2Ugd2lsbCBiZSBhYmxlIHRvIG1ha2UgYSBzaW1wbGUgYXV0b3BsdWdnZXIgdGhhdAorICAgICAgY2FuIGF1dG9tYXRpY2FsbHkgc2V0dXAgYSBwaXBlbGluZSBmb3IgYW55IG1lZGlhIHR5cGUuIEluIHRoZSBleGFtcGxlCisgICAgICBhYm92ZSwgd2UgZGlkIHRoaXMgZm9yIGF1ZGlvIG9ubHkuIEhvd2V2ZXIsIHdlIGNhbiBhbHNvIGRvIHRoaXMKKyAgICAgIGZvciB2aWRlbyB0byBjcmVhdGUgYSBwbGF5ZXIgdGhhdCBwbGF5cyBib3RoIGF1ZGlvIGFuZCB2aWRlby4KKyAgICA8L3BhcmE+CisgICAgPCEtLSBleGFtcGxlLWJlZ2luIGR5bmFtaWMuYyBkIC0tPjwhLS0KK3N0YXRpYyBnYm9vbGVhbgorbXlfYnVzX2NhbGxiYWNrIChHc3RCdXMgICAgICpidXMsCisgICAgICAgICAgICAgICAgIEdzdE1lc3NhZ2UgKm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgIGRhdGEpCit7CisgIEdNYWluTG9vcCAqbG9vcCA9IGRhdGE7CisKKyAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSkgeworICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6IHsKKyAgICAgIEdFcnJvciAqZXJyOworICAgICAgZ2NoYXIgKmRlYnVnOworCisgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobWVzc2FnZSwgJmFtcDtlcnIsICZhbXA7ZGVidWcpOworICAgICAgZ19wcmludCAoIkVycm9yOiAlc1xuIiwgZXJyLSZndDttZXNzYWdlKTsKKyAgICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKKyAgICAgIGdfZnJlZSAoZGVidWcpOworCisgICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKKyAgICAgIC8qIGVuZC1vZi1zdHJlYW0gKi8KKyAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgLyogcmVtb3ZlIGZyb20gcXVldWUgKi8KKyAgcmV0dXJuIFRSVUU7Cit9CisKK2dpbnQKK21haW4gKGdpbnQgICBhcmdjLAorICAgICAgZ2NoYXIgKmFyZ3ZbXSkKK3sKKyAgR01haW5Mb29wICpsb29wOworICBHc3RFbGVtZW50ICp0eXBlZmluZCwgKnJlYWxzaW5rOworICBHc3RCdXMgKmJ1czsKKyAgR0Vycm9yICplcnIgPSBOVUxMOworICBnY2hhciAqcDsKKworICAvKiBpbml0IEdTdHJlYW1lciBhbmQgb3Vyc2VsdmVzICovCisgIGdzdF9pbml0ICgmYW1wO2FyZ2MsICZhbXA7YXJndik7CisgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKKyAgaW5pdF9mYWN0b3JpZXMgKCk7CisKKyAgLyogYXJncyAqLworICBpZiAoYXJnYyAhPSAyKSB7CisgICAgZ19wcmludCAoIlVzYWdlOiAlcyAmbHQ7ZmlsZW5hbWUmZ3Q7XG4iLCBhcmd2WzBdKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICAvKiBwaXBlbGluZSAqLworICBwID0gZ19zdHJkdXBfcHJpbnRmICgiZmlsZXNyYyBsb2NhdGlvbj1cIiVzXCIgISB0eXBlZmluZCBuYW1lPXRmIiwgYXJndlsxXSk7CisgIHBpcGVsaW5lID0gZ3N0X3BhcnNlX2xhdW5jaCAocCwgJmFtcDtlcnIpOworICBnX2ZyZWUgKHApOworCisgIGlmIChlcnIpIHsKKyAgICBnX2Vycm9yICgiQ291bGQgbm90IGNvbnN0cnVjdCBwaXBlbGluZTogJXMiLCBlcnItJmd0O21lc3NhZ2UpOworICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBidXMgPSBnc3RfcGlwZWxpbmVfZ2V0X2J1cyAoR1NUX1BJUEVMSU5FIChwaXBlbGluZSkpOworICBnc3RfYnVzX2FkZF93YXRjaCAoYnVzLCBteV9idXNfY2FsbGJhY2ssIE5VTEwpOworICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOworCisgIHR5cGVmaW5kID0gZ3N0X2Jpbl9nZXRfYnlfbmFtZSAoR1NUX0JJTiAocGlwZWxpbmUpLCAidGYiKTsKKyAgZ19zaWduYWxfY29ubmVjdCAodHlwZWZpbmQsICJoYXZlLXR5cGUiLCBHX0NBTExCQUNLIChjYl90eXBlZm91bmQpLCBOVUxMKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAodHlwZWZpbmQpKTsKKyAgYXVkaW9zaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW9jb252ZXJ0IiwgImFjb252Iik7CisgIHJlYWxzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYWxzYXNpbmsiLCAiYXVkaW9zaW5rIik7CisgIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgYXVkaW9zaW5rLCByZWFsc2luaywgTlVMTCk7CisgIGdzdF9lbGVtZW50X2xpbmsgKGF1ZGlvc2luaywgcmVhbHNpbmspOworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7CisKKyAgLyogcnVuICovCisgIGdfbWFpbl9sb29wX3J1biAobG9vcCk7CisKKyAgLyogZXhpdCAqLworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKHBpcGVsaW5lKSk7CisKKyAgcmV0dXJuIDA7Cit9CisgICAgLS0+PCEtLSBleGFtcGxlLWVuZCBkeW5hbWljLmMgZCAtLT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSBleGFtcGxlIGFib3ZlIGlzIGEgZ29vZCBmaXJzdCB0cnkgZm9yIGFuIGF1dG9wbHVnZ2VyLiBOZXh0IHN0ZXBzCisgICAgICB3b3VsZCBiZSB0byBsaXN0ZW4gZm9yIDxxdW90ZT5wYWQtcmVtb3ZlZDwvcXVvdGU+IHNpZ25hbHMsIHNvIHdlCisgICAgICBjYW4gZHluYW1pY2FsbHkgY2hhbmdlIHRoZSBwbHVnZ2VkIHBpcGVsaW5lIGlmIHRoZSBzdHJlYW0gY2hhbmdlcworICAgICAgKHRoaXMgaGFwcGVucyBmb3IgRFZCIG9yIE9nZyByYWRpbykuIEFsc28sIHlvdSBtaWdodCB3YW50IHNwZWNpYWwtY2FzZQorICAgICAgY29kZSBmb3IgaW5wdXQgd2l0aCBrbm93biBjb250ZW50IChzdWNoIGFzIGEgRFZEIG9yIGFuIGF1ZGlvLUNEKSwKKyAgICAgIGFuZCBtdWNoLCBtdWNoIG1vcmUuIE1vcmVvdmVyLCB5b3UnbGwgd2FudCBtYW55IGNoZWNrcyB0byBwcmV2ZW50CisgICAgICBpbmZpbml0ZSBsb29wcyBkdXJpbmcgYXV0b3BsdWdnaW5nLCBtYXliZSB5b3UnbGwgd2FudCB0byBpbXBsZW1lbnQKKyAgICAgIHNob3J0ZXN0LXBhdGgtZmluZGluZyB0byBtYWtlIHN1cmUgdGhlIG1vc3Qgb3B0aW1hbCBwaXBlbGluZSBpcyBjaG9zZW4sCisgICAgICBhbmQgc28gb24uIEJhc2ljYWxseSwgdGhlIGZlYXR1cmVzIHRoYXQgeW91IGltcGxlbWVudCBpbiBhbiBhdXRvcGx1Z2dlcgorICAgICAgZGVwZW5kIG9uIHdoYXQgeW91IHdhbnQgdG8gdXNlIGl0IGZvci4gRm9yIGZ1bGwtYmxvd24gaW1wbGVtZW50YXRpb25zLAorICAgICAgc2VlIHRoZSA8cXVvdGU+cGxheWJpbjwvcXVvdGU+IGFuZCA8cXVvdGU+ZGVjb2RlYmluPC9xdW90ZT4gZWxlbWVudHMgaW4KKyAgICAgIDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItY29tcG9uZW50cyIvPi4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL21hbnVhbC9hZHZhbmNlZC1jbG9ja3MueG1sIGIvZG9jcy9tYW51YWwvYWR2YW5jZWQtY2xvY2tzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjNjZjNjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9tYW51YWwvYWR2YW5jZWQtY2xvY2tzLnhtbApAQCAtMCwwICsxLDkxIEBACis8Y2hhcHRlciBpZD0iY2hhcHRlci1jbG9ja3MiPgorICA8dGl0bGU+Q2xvY2tzIGluIEdTdHJlYW1lcjwvdGl0bGU+CisKKyAgPHBhcmE+CisgICAgVG8gbWFpbnRhaW4gc3luYyBpbiBwaXBlbGluZSBwbGF5YmFjayAod2hpY2ggaXMgdGhlIG9ubHkgY2FzZSB3aGVyZSB0aGlzCisgICAgcmVhbGx5IG1hdHRlcnMpLCAmR1N0cmVhbWVyOyB1c2VzIDxlbXBoYXNpcz5jbG9ja3M8L2VtcGhhc2lzPi4gQ2xvY2tzCisgICAgYXJlIGV4cG9zZWQgYnkgc29tZSBlbGVtZW50cywgd2hlcmVhcyBvdGhlciBlbGVtZW50cyBhcmUgbWVyZWx5IGNsb2NrCisgICAgc2xhdmVzLiBUaGUgcHJpbWFyeSB0YXNrIG9mIGEgY2xvY2sgaXMgdG8gcmVwcmVzZW50IHRoZSB0aW1lIHByb2dyZXNzCisgICAgYWNjb3JkaW5nIHRvIHRoZSBlbGVtZW50IGV4cG9zaW5nIHRoZSBjbG9jaywgYmFzZWQgb24gaXRzIG93biBwbGF5YmFjaworICAgIHJhdGUuIElmIG5vIGNsb2NrIHByb3ZpZGVyIGlzIGF2YWlsYWJsZSBpbiBhIHBpcGVsaW5lLCB0aGUgc3lzdGVtIGNsb2NrCisgICAgaXMgdXNlZCBpbnN0ZWFkLgorICA8L3BhcmE+CisgIAorICA8cGFyYT4KKyAgICAmR1N0cmVhbWVyOyBkZXJpdmVzIHNldmVyYWwgPGVtcGhhc2lzPnRpbWUgdmFsdWU8L2VtcGhhc2lzPiBmcm9tIHRoZSBjbG9jaworICAgIGFuZCB0aGUgcGxheWJhY2sgc3RhdGUuCisgICAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUsIHRoYXQgYSAgPGVtcGhhc2lzPmNsb2NrLXRpbWU8L2VtcGhhc2lzPiBpcworICAgIG1vbm90b25pY2FsbHkgcmlzaW5nLCBidXQgdGhlIHZhbHVlIGl0c2VsZiBpcyBub3QgbWVhbmluZ2Z1bC4KKyAgICBTdWJ0cmFjdGluZyB0aGUgPGVtcGhhc2lzPmJhc2UtdGltZTwvZW1waGFzaXM+IHlpZWxkcyB0aGUKKyAgICA8ZW1waGFzaXM+cnVubmluZy10aW1lPC9lbXBoYXNpcz4uIEl0IGlzIHRoZSBzYW1lIGFzIHRoZQorICAgIDxlbXBoYXNpcz5zdHJlYW0tdGltZTwvZW1waGFzaXM+IGlmIG9uZSBwbGF5cyBmcm9tIHN0YXJ0IHRvIGVuZCBhdCBvcmlnaW5hbAorICAgIHJhdGUuIFRoZSA8ZW1waGFzaXM+c3RyZWFtLXRpbWU8L2VtcGhhc2lzPiBpbmRpY2F0ZXMgdGhlIHBvc2l0aW9uIGluIHRoZQorICAgIG1lZGlhLiBUaGUgPGVtcGhhc2lzPnJ1bm5pbmctdGltZTwvZW1waGFzaXM+IGlzIChyZS0pc2V0IHRvIDAgd2hlbiB0aGUgCisgICAgcGlwZWxpbmUgc3RhcnRzIHRvIHBsYXkgYW5kIGFsc28gYWZ0ZXIgPGVtcGhhc2lzPmZsdXNoaW5nPC9lbXBoYXNpcz4gc2Vla3MuCisgIDwvcGFyYT4KKworICA8ZmlndXJlIGZsb2F0PSIxIiBpZD0iY2hhcHRlci1jbG9jay1pbWciPgorICAgIDx0aXRsZT4mR1N0cmVhbWVyOyBjbG9jayBhbmQgdmFyaW91cyB0aW1lczwvdGl0bGU+CisgICAgPG1lZGlhb2JqZWN0PgorICAgICAgPGltYWdlb2JqZWN0PgorICAgICAgICA8aW1hZ2VkYXRhIHNjYWxlPSI3NSIgZmlsZXJlZj0iaW1hZ2VzL2Nsb2Nrcy4maW1hZ2U7IiBmb3JtYXQ9IiZJTUFHRTsiIC8+CisgICAgICA8L2ltYWdlb2JqZWN0PgorICAgIDwvbWVkaWFvYmplY3Q+ICAKKyAgPC9maWd1cmU+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWNsb2Nrcy1wcm92aWRlcnMiPgorICAgIDx0aXRsZT5DbG9jayBwcm92aWRlcnM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBDbG9jayBwcm92aWRlcnMgZXhpc3QgYmVjYXVzZSB0aGV5IHBsYXkgYmFjayBtZWRpYSBhdCBzb21lIHJhdGUsIGFuZAorICAgICAgdGhpcyByYXRlIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUgc3lzdGVtIGNsb2NrIHJhdGUuIEZvcgorICAgICAgZXhhbXBsZSwgYSBzb3VuZGNhcmQgbWF5IHBsYXliYWNrIGF0IDQ0LDEga0h6LCBidXQgdGhhdCBkb2Vzbid0IG1lYW4KKyAgICAgIHRoYXQgYWZ0ZXIgPGVtcGhhc2lzPmV4YWN0bHk8L2VtcGhhc2lzPiAxIHNlY29uZCA8ZW1waGFzaXM+YWNjb3JkaW5nCisgICAgICB0byB0aGUgc3lzdGVtIGNsb2NrPC9lbXBoYXNpcz4sIHRoZSBzb3VuZGNhcmQgaGFzIHBsYXllZCBiYWNrIDQ0LjEwMAorICAgICAgc2FtcGxlcy4gVGhpcyBpcyBvbmx5IHRydWUgYnkgYXBwcm94aW1hdGlvbi4gVGhlcmVmb3JlLCBnZW5lcmFsbHksCisgICAgICBwaXBlbGluZXMgd2l0aCBhbiBhdWRpbyBvdXRwdXQgdXNlIHRoZSBhdWRpb3NpbmsgYXMgY2xvY2sgcHJvdmlkZXIuCisgICAgICBUaGlzIGVuc3VyZXMgdGhhdCBvbmUgc2Vjb25kIG9mIHZpZGVvIHdpbGwgYmUgcGxheWVkIGJhY2sgYXQgdGhlIHNhbWUKKyAgICAgIHJhdGUgYXMgdGhhdCB0aGUgc291bmRjYXJkIHBsYXlzIGJhY2sgMSBzZWNvbmQgb2YgYXVkaW8uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgV2hlbmV2ZXIgc29tZSBwYXJ0IG9mIHRoZSBwaXBlbGluZSByZXF1aXJlcyB0byBrbm93IHRoZSBjdXJyZW50IGNsb2NrCisgICAgICB0aW1lLCBpdCB3aWxsIGJlIHJlcXVlc3RlZCBmcm9tIHRoZSBjbG9jayB0aHJvdWdoCisgICAgICA8ZnVuY3Rpb24+Z3N0X2Nsb2NrX2dldF90aW1lICgpPC9mdW5jdGlvbj4uIFRoZSBjbG9jay10aW1lIGRvZXMgbm90CisgICAgICBuZWVkIHRvIHN0YXJ0IGF0IDAuIFRoZSBwaXBlbGluZSwgd2hpY2ggY29udGFpbnMgdGhlIGdsb2JhbCBjbG9jayB0aGF0CisgICAgICBhbGwgZWxlbWVudHMgaW4gdGhlIHBpcGVsaW5lIHdpbGwgdXNlLCBpbiBhZGRpdGlvbiBoYXMgYSA8cXVvdGU+YmFzZQorICAgICAgdGltZTwvcXVvdGU+LCB3aGljaCBpcyB0aGUgY2xvY2sgdGltZSBhdCB0aGUgcG9pbnQgd2hlcmUgdGhlCisgICAgICBwaXBlbGluZSB3ZW50IHRvIHRoZSBQTEFZSU5HIHN0YXRlLiBFYWNoIGVsZW1lbnQgY2FuIHN1YnRyYWN0IHRoZQorICAgICAgPHF1b3RlPmJhc2UgdGltZTwvcXVvdGU+IGZyb20gdGhlIGNsb2NrLXRpbWUgdG8ga25vdyB0aGUgY3VycmVudAorICAgICAgcnVubmluZyB0aW1lLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSBjbG9jayBwcm92aWRlciBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgdGhhdCB0aGUgY2xvY2sgdGltZQorICAgICAgYWx3YXlzIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgbWVkaWEgdGltZSBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlOyBpdAorICAgICAgaGFzIHRvIHRha2UgY2FyZSBvZiB0aGluZ3Mgc3VjaCBhcyBwbGF5YmFjayBsYXRlbmNpZXMsIGJ1ZmZlcmluZyBpbgorICAgICAgYXVkaW8ta2VybmVsIG1vZHVsZXMsIGFuZCBzbyBvbiwgc2luY2UgYWxsIHRob3NlIGNvdWxkIGFmZmVjdCBhL3Ygc3luYworICAgICAgYW5kIHRodXMgZGVjcmVhc2UgdGhlIHVzZXIgZXhwZXJpZW5jZS4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWNsb2Nrcy1zbGF2ZXMiPgorICAgIDx0aXRsZT5DbG9jayBzbGF2ZXM8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgQ2xvY2sgc2xhdmVzIGdldCBhc3NpZ25lZCBhIGNsb2NrIGJ5IHRoZWlyIGNvbnRhaW5pbmcgcGlwZWxpbmUuIFRoZWlyCisgICAgICB0YXNrIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IG1lZGlhIHBsYXliYWNrIGZvbGxvd3MgdGhlIHRpbWUgcHJvZ3Jlc3MgYXMKKyAgICAgIHJlcHJlc2VudGVkIGJ5IHRoaXMgY2xvY2sgYXMgY2xvc2VseSBhcyBwb3NzaWJsZS4gRm9yIG1vc3QgZWxlbWVudHMsCisgICAgICB0aGF0IHdpbGwgc2ltcGx5IG1lYW4gdG8gd2FpdCB1bnRpbCB0aGUgYnVmZmVyIHJ1bm5pbmctdGltZSBpcyByZWFjaGVkCisgICAgICBiZWZvcmUgcGxheWluZyBiYWNrIHRoZWlyIGN1cnJlbnQgc2FtcGxlLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSBidWZmZXIgcnVubmluZy10aW1lIGlzIGRlcml2ZWQgZnJvbSB0aGUgYnVmZmVyIHRpbWVzdGFtcCBhbmQgdGhlCisgICAgICBuZXdzZWdtZW50IGV2ZW50IHByZWNlZWRpbmcgdGhlIGJ1ZmZlci4gQSBidWZmZXIgaXMgcGxheWVkIHN5bmNocm9uaXplZAorICAgICAgd2l0aCB0aGUgY2xvY2sgd2hlbiB0aGUgY2xvY2sncyBydW5uaW5nLXRpbWUgaGFzIHJlYWNoZWQgZXhhY3RseSB0aGUKKyAgICAgIGJ1ZmZlciBydW5uaW5nLXRpbWU7IHRoaXMgY2FuIGJlIGRvbmUgd2l0aCB0aGUgZnVuY3Rpb24KKyAgICAgIDxmdW5jdGlvbj5nc3RfY2xvY2tfaWRfd2FpdCAoKTwvZnVuY3Rpb24+LgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byB3cml0ZSBlbGVtZW50cyB0aGF0IGNvbmZvcm0gdG8gdGhpcworICAgICAgcmVxdWlyZWQgYmVoYXZpb3VyLCBzZWUgdGhlIFBsdWdpbiBXcml0ZXIncyBHdWlkZS4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbCBiL2RvY3MvbWFudWFsL2FkdmFuY2VkLWRhdGFhY2Nlc3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZDFmNzIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbApAQCAtMCwwICsxLDQxMiBAQAorPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItZGF0YWFjY2VzcyI+CisgIDx0aXRsZT5QaXBlbGluZSBtYW5pcHVsYXRpb248L3RpdGxlPgorICA8cGFyYT4KKyAgICBUaGlzIGNoYXB0ZXIgd2lsbCBkaXNjdXNzIGhvdyB5b3UgY2FuIG1hbmlwdWxhdGUgeW91ciBwaXBlbGluZSBpbiBzZXZlcmFsCisgICAgd2F5cyBmcm9tIHlvdXIgYXBwbGljYXRpb24gb24uIFBhcnRzIG9mIHRoaXMgY2hhcHRlciBhcmUgZG93bnJpZ2h0CisgICAgaGFja2lzaCwgc28gYmUgYXNzdXJlZCB0aGF0IHlvdSdsbCBuZWVkIHNvbWUgcHJvZ3JhbW1pbmcga25vd2xlZGdlCisgICAgYmVmb3JlIHlvdSBzdGFydCByZWFkaW5nIHRoaXMuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgVG9waWNzIHRoYXQgd2lsbCBiZSBkaXNjdXNzZWQgaGVyZSBpbmNsdWRlIGhvdyB5b3UgY2FuIGluc2VydCBkYXRhIGludG8KKyAgICBhIHBpcGVsaW5lIGZyb20geW91ciBhcHBsaWNhdGlvbiwgaG93IHRvIHJlYWQgZGF0YSBmcm9tIGEgcGlwZWxpbmUsCisgICAgaG93IHRvIG1hbmlwdWxhdGUgdGhlIHBpcGVsaW5lJ3Mgc3BlZWQsIGxlbmd0aCwgc3RhcnRpbmcgcG9pbnQgYW5kIGhvdworICAgIHRvIGxpc3RlbiB0byBhIHBpcGVsaW5lJ3MgZGF0YSBwcm9jZXNzaW5nLgorICA8L3BhcmE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWRhdGEtcHJvYmUiPgorICAgIDx0aXRsZT5EYXRhIHByb2Jpbmc8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgUHJvYmluZyBpcyBiZXN0IGVudmlzaW9uZWQgYXMgYSBwYWQgbGlzdGVuZXIuIFRlY2huaWNhbGx5LCBhIHByb2JlIGlzCisgICAgICBub3RoaW5nIG1vcmUgdGhhbiBhIHNpZ25hbCBjYWxsYmFjayB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byBhIHBhZC4KKyAgICAgIFRob3NlIHNpZ25hbHMgYXJlIGJ5IGRlZmF1bHQgbm90IGZpcmVkIGF0IGFsbCAoc2luY2UgdGhhdCBtYXkgaGF2ZSBhCisgICAgICBuZWdhdGl2ZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UpLCBidXQgY2FuIGJlIGVuYWJsZWQgYnkgYXR0YWNoaW5nIGEKKyAgICAgIHByb2JlIHVzaW5nIDxmdW5jdGlvbj5nc3RfcGFkX2FkZF9idWZmZXJfcHJvYmUgKCk8L2Z1bmN0aW9uPiwKKyAgICAgIDxmdW5jdGlvbj5nc3RfcGFkX2FkZF9ldmVudF9wcm9iZSAoKTwvZnVuY3Rpb24+LCBvcgorICAgICAgPGZ1bmN0aW9uPmdzdF9wYWRfYWRkX2RhdGFfcHJvYmUgKCk8L2Z1bmN0aW9uPi4KKyAgICAgIFRob3NlIGZ1bmN0aW9ucyBhdHRhY2ggdGhlIHNpZ25hbCBoYW5kbGVyIGFuZAorICAgICAgZW5hYmxlIHRoZSBhY3R1YWwgc2lnbmFsIGVtaXNzaW9uLiBTaW1pbGFybHksIG9uZSBjYW4gdXNlIHRoZQorICAgICAgPGZ1bmN0aW9uPmdzdF9wYWRfcmVtb3ZlX2J1ZmZlcl9wcm9iZSAoKTwvZnVuY3Rpb24+LAorICAgICAgPGZ1bmN0aW9uPmdzdF9wYWRfcmVtb3ZlX2V2ZW50X3Byb2JlICgpPC9mdW5jdGlvbj4sIG9yCisgICAgICA8ZnVuY3Rpb24+Z3N0X3BhZF9yZW1vdmVfZGF0YV9wcm9iZSAoKTwvZnVuY3Rpb24+CisgICAgICB0byByZW1vdmUgdGhlIHNpZ25hbCBoYW5kbGVycyBhZ2Fpbi4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBQcm9iZXMgcnVuIGluIHBpcGVsaW5lIHRocmVhZGluZyBjb250ZXh0LCBzbyBjYWxsYmFja3Mgc2hvdWxkIHRyeSB0bworICAgICAgbm90IGJsb2NrIGFuZCBnZW5lcmFsbHkgbm90IGRvIGFueSB3ZWlyZCBzdHVmZiwgc2luY2UgdGhpcyBjb3VsZAorICAgICAgaGF2ZSBhIG5lZ2F0aXZlIGltcGFjdCBvbiBwaXBlbGluZSBwZXJmb3JtYW5jZSBvciwgaW4gY2FzZSBvZiBidWdzLAorICAgICAgY2F1c2UgZGVhZGxvY2tzIG9yIGNyYXNoZXMuIE1vcmUgcHJlY2lzZWx5LCBvbmUgc2hvdWxkIHVzdWFsbHkgbm90CisgICAgICBjYWxsIGFueSBHVUktcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSB3aXRoaW4gYSBwcm9iZSBjYWxsYmFjaywgbm9yIHRyeQorICAgICAgdG8gY2hhbmdlIHRoZSBzdGF0ZSBvZiB0aGUgcGlwZWxpbmUuICBBbiBhcHBsaWNhdGlvbiBtYXkgcG9zdCBjdXN0b20KKyAgICAgIG1lc3NhZ2VzIG9uIHRoZSBwaXBlbGluZSdzIGJ1cyB0aG91Z2ggdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgbWFpbgorICAgICAgYXBwbGljYXRpb24gdGhyZWFkIGFuZCBoYXZlIGl0IGRvIHRoaW5ncyBsaWtlIHN0b3AgdGhlIHBpcGVsaW5lLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIEluIGFueSBjYXNlLCBtb3N0IGNvbW1vbiBidWZmZXIgb3BlcmF0aW9ucworICAgICAgdGhhdCBlbGVtZW50cyBjYW4gZG8gaW4gPGZ1bmN0aW9uPl9jaGFpbiAoKTwvZnVuY3Rpb24+IGZ1bmN0aW9ucywgY2FuCisgICAgICBiZSBkb25lIGluIHByb2JlIGNhbGxiYWNrcyBhcyB3ZWxsLiBUaGUgZXhhbXBsZSBiZWxvdyBnaXZlcyBhIHNob3J0CisgICAgICBpbXByZXNzaW9uIG9uIGhvdyB0byB1c2UgdGhlbSAoZXZlbiBpZiB0aGlzIHVzYWdlIGlzIG5vdCBlbnRpcmVseQorICAgICAgY29ycmVjdCwgYnV0IG1vcmUgb24gdGhhdCBiZWxvdyk6CisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz48IS0tIGV4YW1wbGUtYmVnaW4gcHJvYmUuYyAtLT4KKyNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7CisKK3N0YXRpYyBnYm9vbGVhbgorY2JfaGF2ZV9kYXRhIChHc3RQYWQgICAgKnBhZCwKKwkgICAgICBHc3RCdWZmZXIgKmJ1ZmZlciwKKwkgICAgICBncG9pbnRlciAgIHVfZGF0YSkKK3sKKyAgZ2ludCB4LCB5OworICBndWludDE2ICpkYXRhLCAqcHRyLCB0OworICBnc2l6ZSBzaXplOworICAKKyAgZGF0YSA9IGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZhbXA7c2l6ZSwgTlVMTCwgR1NUX01BUF9XUklURSk7CisKKyAgcHRyID0gZGF0YTsKKyAgLyogaW52ZXJ0IGRhdGEgKi8KKyAgZm9yICh5ID0gMDsgeSAmbHQ7IDI4ODsgeSsrKSB7CisgICAgZm9yICh4ID0gMDsgeCAmbHQ7IDM4NCAvIDI7IHgrKykgeworICAgICAgdCA9IHB0clszODQgLSAxIC0geF07CisgICAgICBwdHJbMzg0IC0gMSAtIHhdID0gcHRyW3hdOworICAgICAgcHRyW3hdID0gdDsKKyAgICB9CisgICAgcHRyICs9IDM4NDsKKyAgfQorICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsIGRhdGEsIHNpemUpOworCisKKyAgcmV0dXJuIFRSVUU7Cit9CisKK2dpbnQKK21haW4gKGdpbnQgICBhcmdjLAorICAgICAgZ2NoYXIgKmFyZ3ZbXSkKK3sKKyAgR01haW5Mb29wICpsb29wOworICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKnNyYywgKnNpbmssICpmaWx0ZXIsICpjc3A7CisgIEdzdENhcHMgKmZpbHRlcmNhcHM7CisgIEdzdFBhZCAqcGFkOworCisgIC8qIGluaXQgR1N0cmVhbWVyICovCisgIGdzdF9pbml0ICgmYW1wO2FyZ2MsICZhbXA7YXJndik7CisgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKKworICAvKiBidWlsZCAqLworICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJteS1waXBlbGluZSIpOworICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ2aWRlb3Rlc3RzcmMiLCAic3JjIik7CisgIGlmIChzcmMgPT0gTlVMTCkKKyAgICBnX2Vycm9yICgiQ291bGQgbm90IGNyZWF0ZSAndmlkZW90ZXN0c3JjJyBlbGVtZW50Iik7CisKKyAgZmlsdGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiY2Fwc2ZpbHRlciIsICJmaWx0ZXIiKTsKKyAgZ19hc3NlcnQgKGZpbHRlciAhPSBOVUxMKTsgLyogc2hvdWxkIGFsd2F5cyBleGlzdCAqLworCisgIGNzcCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZmbXBlZ2NvbG9yc3BhY2UiLCAiY3NwIik7CisgIGlmIChjc3AgPT0gTlVMTCkKKyAgICBnX2Vycm9yICgiQ291bGQgbm90IGNyZWF0ZSAnZmZtcGVnY29sb3JzcGFjZScgZWxlbWVudCIpOworCisgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ4dmltYWdlc2luayIsICJzaW5rIik7CisgIGlmIChzaW5rID09IE5VTEwpIHsKKyAgICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgieGltYWdlc2luayIsICJzaW5rIik7CisgICAgaWYgKHNpbmsgPT0gTlVMTCkKKyAgICAgIGdfZXJyb3IgKCJDb3VsZCBub3QgY3JlYXRlIG5laXRoZXIgJ3h2aW1hZ2VzaW5rJyBub3IgJ3hpbWFnZXNpbmsnIGVsZW1lbnQiKTsKKyAgfQorCisgIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjLCBmaWx0ZXIsIGNzcCwgc2luaywgTlVMTCk7CisgIGdzdF9lbGVtZW50X2xpbmtfbWFueSAoc3JjLCBmaWx0ZXIsIGNzcCwgc2luaywgTlVMTCk7CisgIGZpbHRlcmNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1yYXctcmdiIiwKKwkJCSAgICJ3aWR0aCIsIEdfVFlQRV9JTlQsIDM4NCwKKwkJCSAgICJoZWlnaHQiLCBHX1RZUEVfSU5ULCAyODgsCisJCQkgICAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT04sIDI1LCAxLAorCQkJICAgImJwcCIsIEdfVFlQRV9JTlQsIDE2LAorCQkJICAgImRlcHRoIiwgR19UWVBFX0lOVCwgMTYsCisJCQkgICAiZW5kaWFubmVzcyIsIEdfVFlQRV9JTlQsIEdfQllURV9PUkRFUiwKKwkJCSAgIE5VTEwpOworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChmaWx0ZXIpLCAiY2FwcyIsIGZpbHRlcmNhcHMsIE5VTEwpOworICBnc3RfY2Fwc191bnJlZiAoZmlsdGVyY2Fwcyk7CisKKyAgcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3BhZCAoc3JjLCAic3JjIik7CisgIGdzdF9wYWRfYWRkX2J1ZmZlcl9wcm9iZSAocGFkLCBHX0NBTExCQUNLIChjYl9oYXZlX2RhdGEpLCBOVUxMKTsKKyAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKKworICAvKiBydW4gKi8KKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOworCisgIC8qIHdhaXQgdW50aWwgaXQncyB1cCBhbmQgcnVubmluZyBvciBmYWlsZWQgKi8KKyAgaWYgKGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsIE5VTEwsIE5VTEwsIC0xKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpIHsKKyAgICBnX2Vycm9yICgiRmFpbGVkIHRvIGdvIGludG8gUExBWUlORyBzdGF0ZSIpOworICB9CisKKyAgZ19wcmludCAoIlJ1bm5pbmcgLi4uXG4iKTsKKyAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKKworICAvKiBleGl0ICovCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKKyAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOworCisgIHJldHVybiAwOworfQorICAgIDwhLS0gZXhhbXBsZS1lbmQgcHJvYmUuYyAtLT48L3Byb2dyYW1saXN0aW5nPgorICAgIDxwYXJhPgorICAgICAgQ29tcGFyZSB0aGF0IG91dHB1dCB3aXRoIHRoZSBvdXRwdXQgb2YgPHF1b3RlPmdzdC1sYXVuY2gtMC4xMAorICAgICAgdmlkZW90ZXN0c3JjICEgeHZpbWFnZXNpbms8L3F1b3RlPiwganVzdCBzbyB5b3Uga25vdyB3aGF0IHlvdSdyZQorICAgICAgbG9va2luZyBmb3IuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgVGhlIGFib3ZlIGV4YW1wbGUgaXMgbm90IHJlYWxseSBjb3JyZWN0IHRob3VnaC4gIFN0cmljdGx5IHNwZWFraW5nLCBhCisgICAgICBwYWQgcHJvYmUgY2FsbGJhY2sgaXMgb25seSBhbGxvd2VkIHRvIG1vZGlmeSB0aGUgYnVmZmVyIGNvbnRlbnQgaWYgdGhlCisgICAgICBidWZmZXIgaXMgd3JpdGFibGUsIGFuZCBpdCBpcyBvbmx5IGFsbG93ZWQgdG8gbW9kaWZ5IGJ1ZmZlciBtZXRhZGF0YSBsaWtlCisgICAgICB0aW1lc3RhbXBzLCBjYXBzLCBldGMuIGlmIHRoZSBidWZmZXIgbWV0YWRhdGEgaXMgd3JpdGFibGUuICBXaGV0aGVyIHRoaXMKKyAgICAgIGlzIHRoZSBjYXNlIG9yIG5vdCBkZXBlbmRzIGEgbG90IG9uIHRoZSBwaXBlbGluZSBhbmQgdGhlIGVsZW1lbnRzCisgICAgICBpbnZvbHZlZC4gIE9mdGVuIGVub3VnaCwgdGhpcyBpcyB0aGUgY2FzZSwgYnV0IHNvbWV0aW1lcyBpdCBpcyBub3QsCisgICAgICBhbmQgaWYgaXQgaXMgbm90IHRoZW4gdW5leHBlY3RlZCBtb2RpZmljYXRpb24gb2YgdGhlIGRhdGEgb3IgbWV0YWRhdGEKKyAgICAgIGNhbiBpbnRyb2R1Y2UgYnVncyB0aGF0IGFyZSB2ZXJ5IGhhcmQgdG8gZGVidWcgYW5kIHRyYWNrIGRvd24uIFlvdSBjYW4KKyAgICAgIGNoZWNrIGlmIGEgYnVmZmVyIGFuZCBpdHMgbWV0YWRhdGEgYXJlIHdyaXRhYmxlIHdpdGgKKyAgICAgIDxmdW5jdGlvbj5nc3RfYnVmZmVyX2lzX3dyaXRhYmxlICgpPC9mdW5jdGlvbj4gYW5kCisgICAgICA8ZnVuY3Rpb24+Z3N0X2J1ZmZlcl9pc19tZXRhZGF0YV93cml0YWJsZSAoKTwvZnVuY3Rpb24+LiAgU2luY2UgeW91CisgICAgICBjYW4ndCBwYXNzIGJhY2sgYSBkaWZmZXJlbnQgYnVmZmVyIHRoYW4gdGhlIG9uZSBwYXNzZWQgaW4sIHRoZXJlIGlzIG5vCisgICAgICBwb2ludCBvZiBtYWtpbmcgYSBidWZmZXIgd3JpdGFibGUgaW4gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFBhZCBwcm9iZXMgYXJlIHN1aXRlZCBiZXN0IGZvciBsb29raW5nIGF0IGRhdGEgYXMgaXQgcGFzc2VzIHRocm91Z2gKKyAgICAgIHRoZSBwaXBlbGluZS4gSWYgeW91IG5lZWQgdG8gbW9kaWZ5IGRhdGEsIHlvdSBzaG91bGQgd3JpdGUgeW91ciBvd24KKyAgICAgIEdTdHJlYW1lciBlbGVtZW50LiBCYXNlIGNsYXNzZXMgbGlrZSBHc3RBdWRpb0ZpbHRlciwgR3N0VmlkZW9GaWx0ZXIgb3IKKyAgICAgIEdzdEJhc2VUcmFuc2Zvcm0gbWFrZSB0aGlzIGZhaXJseSBlYXN5LgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIElmIHlvdSBqdXN0IHdhbnQgdG8gaW5zcGVjdCBidWZmZXJzIGFzIHRoZXkgcGFzcyB0aHJvdWdoIHRoZSBwaXBlbGluZSwKKyAgICAgIHlvdSBkb24ndCBldmVuIG5lZWQgdG8gc2V0IHVwIHBhZCBwcm9iZXMuIFlvdSBjb3VsZCBhbHNvIGp1c3QgaW5zZXJ0CisgICAgICBhbiBpZGVudGl0eSBlbGVtZW50IGludG8gdGhlIHBpcGVsaW5lIGFuZCBjb25uZWN0IHRvIGl0cyAiaGFuZG9mZiIKKyAgICAgIHNpZ25hbC4gVGhlIGlkZW50aXR5IGVsZW1lbnQgYWxzbyBwcm92aWRlcyBhIGZldyB1c2VmdWwgZGVidWdnaW5nIHRvb2xzCisgICAgICBsaWtlIHRoZSAiZHVtcCIgcHJvcGVydHkgb3IgdGhlICJsYXN0LW1lc3NhZ2UiIHByb3BlcnR5ICh0aGUgbGF0dGVyIGlzCisgICAgICBlbmFibGVkIGJ5IHBhc3NpbmcgdGhlICctdicgc3dpdGNoIHRvIGdzdC1sYXVuY2gpLgorICAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tZGF0YS1zcG9vZiI+CisgICAgPHRpdGxlPk1hbnVhbGx5IGFkZGluZyBvciByZW1vdmluZyBkYXRhIGZyb20vdG8gYSBwaXBlbGluZTwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBNYW55IHBlb3BsZSBoYXZlIGV4cHJlc3NlZCB0aGUgd2lzaCB0byB1c2UgdGhlaXIgb3duIHNvdXJjZXMgdG8gaW5qZWN0CisgICAgICBkYXRhIGludG8gYSBwaXBlbGluZS4gU29tZSBwZW9wbGUgaGF2ZSBhbHNvIGV4cHJlc3NlZCB0aGUgd2lzaCB0byBncmFiCisgICAgICB0aGUgb3V0cHV0IGluIGEgcGlwZWxpbmUgYW5kIHRha2UgY2FyZSBvZiB0aGUgYWN0dWFsIG91dHB1dCBpbnNpZGUKKyAgICAgIHRoZWlyIGFwcGxpY2F0aW9uLiBXaGlsZSBlaXRoZXIgb2YgdGhlc2UgbWV0aG9kcyBhcmUgc3RvbmdseQorICAgICAgZGlzY291cmFnZWQsICZHU3RyZWFtZXI7IG9mZmVycyBoYWNrcyB0byBkbyB0aGlzLiA8ZW1waGFzaXM+SG93ZXZlciwKKyAgICAgIHRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIHRob3NlIG1ldGhvZHMuPC9lbXBoYXNpcz4gSWYgaXQgZG9lc24ndCB3b3JrLAorICAgICAgeW91J3JlIG9uIHlvdXIgb3duLiBBbHNvLCBzeW5jaHJvbml6YXRpb24sIHRocmVhZC1zYWZldHkgYW5kIG90aGVyCisgICAgICB0aGluZ3MgdGhhdCB5b3UndmUgYmVlbiBhYmxlIHRvIHRha2UgZm9yIGdyYW50ZWQgc28gZmFyIGFyZSBubyBsb25nZXIKKyAgICAgIGd1YXJhbnRlZWQgaWYgeW91IHVzZSBhbnkgb2YgdGhvc2UgbWV0aG9kcy4gSXQncyBhbHdheXMgYmV0dGVyIHRvCisgICAgICBzaW1wbHkgd3JpdGUgYSBwbHVnaW4gYW5kIGhhdmUgdGhlIHBpcGVsaW5lIHNjaGVkdWxlIGFuZCBtYW5hZ2UgaXQuCisgICAgICBTZWUgdGhlIFBsdWdpbiBXcml0ZXIncyBHdWlkZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIHRvcGljLiBBbHNvCisgICAgICBzZWUgdGhlIG5leHQgc2VjdGlvbiwgd2hpY2ggd2lsbCBleHBsYWluIGhvdyB0byBlbWJlZCBwbHVnaW5zIHN0YXRpY2FsbHkKKyAgICAgIGluIHlvdXIgYXBwbGljYXRpb24uCisgICAgPC9wYXJhPgorICAgIDxub3RlPjxwYXJhPgorCTx1bGluayB0eXBlPSJodHRwIgorCSAgdXJsPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMvaHRtbC9nc3RyZWFtZXItYXBwLmh0bWwiPk5ldworCSAgQVBJPC91bGluaz4gd2FzIGRldmVsb3BlZCB0byBtYWtlIGRhdGEgaW5zZXJ0aW9uIGFuZCBleHRyYWN0aW9uIGVhc3kKKwlmb3IgYXBwbGljYXRpb25zLiBJdCBjYW4gYmUgZm91bmQgYXMgR3N0QXBwU3JjIGFuZCBHc3RBcHBTaW5rIGluIHRoZQorCTx1bGluayB0eXBlPSJodHRwIgorCSAgdXJsPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9tb2R1bGVzL2dzdC1wbHVnaW5zLWJhc2UuaHRtbCI+CisJICBnc3QtcGx1Z2lucy1iYXNlPC91bGluaz4gbW9kdWxlLgorICAgIDwvcGFyYT48L25vdGU+CisgICAgPHBhcmE+CisgICAgICBBZnRlciBhbGwgdGhvc2UgZGlzY2xhaW1lcnMsIGxldCdzIHN0YXJ0LiBUaGVyZSdzIHRocmVlIHBvc3NpYmxlCisgICAgICBlbGVtZW50cyB0aGF0IHlvdSBjYW4gdXNlIGZvciB0aGUgYWJvdmUtbWVudGlvbmVkIHB1cnBvc2VzLiBUaG9zZSBhcmUKKyAgICAgIGNhbGxlZCA8cXVvdGU+ZmFrZXNyYzwvcXVvdGU+IChhbiBpbWFnaW5hcnkgc291cmNlKSwKKyAgICAgIDxxdW90ZT5mYWtlc2luazwvcXVvdGU+IChhbiBpbWFnaW5hcnkgc2luaykgYW5kIDxxdW90ZT5pZGVudGl0eTwvcXVvdGU+CisgICAgICAoYW4gaW1hZ2luYXJ5IGZpbHRlcikuIFRoZSBzYW1lIG1ldGhvZCBhcHBsaWVzIHRvIGVhY2ggb2YgdGhvc2UKKyAgICAgIGVsZW1lbnRzLiBIZXJlLCB3ZSB3aWxsIGRpc2N1c3MgaG93IHRvIHVzZSB0aG9zZSBlbGVtZW50cyB0byBpbnNlcnQKKyAgICAgICh1c2luZyBmYWtlc3JjKSBvciBncmFiICh1c2luZyBmYWtlc2luayBvciBpZGVudGl0eSkgZGF0YSBmcm9tIGEKKyAgICAgIHBpcGVsaW5lLCBhbmQgaG93IHRvIHNldCBuZWdvdGlhdGlvbi4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBUaG9zZSB3aG8ncmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB3aWxsIG5vdGljZSB0aGF0IHRoZSBwdXJwb3NlCisgICAgICBvZiBpZGVudGl0eSBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoYXQgb2YgcHJvYmVzLiBJbmRlZWQsIHRoaXMgaXMKKyAgICAgIHRydWUuIFByb2JlcyBhbGxvdyBmb3IgdGhlIHNhbWUgcHVycG9zZSwgYW5kIGEgYnVuY2ggbW9yZSwgYW5kCisgICAgICB3aXRoIGxlc3Mgb3ZlcmhlYWQgcGx1cyBkeW5hbWljIHJlbW92aW5nL2FkZGluZyBvZiBoYW5kbGVycywgYnV0CisgICAgICBhcGFydCBmcm9tIHRob3NlLCBwcm9iZXMgYW5kIGlkZW50aXR5IGhhdmUgdGhlIHNhbWUgcHVycG9zZSwganVzdAorICAgICAgaW4gYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiB0eXBlLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1zcG9vZi1oYW5kb2ZmIj4KKyAgICAgIDx0aXRsZT5JbnNlcnRpbmcgb3IgZ3JhYmJpbmcgZGF0YTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIHRocmVlIGJlZm9yZS1tZW50aW9uZWQgZWxlbWVudHMgKGZha2VzcmMsIGZha2VzaW5rIGFuZCBpZGVudGl0eSkKKyAgICAgICAgZWFjaCBoYXZlIGEgPHF1b3RlPmhhbmRvZmY8L3F1b3RlPiBzaWduYWwgdGhhdCB3aWxsIGJlIGNhbGxlZCBpbgorICAgICAgICB0aGUgPGZ1bmN0aW9uPl9nZXQgKCk8L2Z1bmN0aW9uPi0gKGZha2VzcmMpIG9yIDxmdW5jdGlvbj5fY2hhaW4KKyAgICAgICAgKCk8L2Z1bmN0aW9uPi1mdW5jdGlvbiAoaWRlbnRpdHksIGZha2VzaW5rKS4gSW4gdGhlIHNpZ25hbCBoYW5kbGVyLAorICAgICAgICB5b3UgY2FuIHNldCAoZmFrZXNyYykgb3IgZ2V0IChpZGVudGl0eSwgZmFrZXNpbmspIGRhdGEgdG8vZnJvbSB0aGUKKyAgICAgICAgcHJvdmlkZWQgYnVmZmVyLiBOb3RlIHRoYXQgaW4gdGhlIGNhc2Ugb2YgZmFrZXNyYywgeW91IGhhdmUgdG8gc2V0CisgICAgICAgIHRoZSBzaXplIG9mIHRoZSBwcm92aWRlZCBidWZmZXIgdXNpbmcgdGhlIDxxdW90ZT5zaXplbWF4PC9xdW90ZT4KKyAgICAgICAgcHJvcGVydHkuIEZvciBib3RoIGZha2VzcmMgYW5kIGZha2VzaW5rLCB5b3UgYWxzbyBoYXZlIHRvIHNldCB0aGUKKyAgICAgICAgPHF1b3RlPnNpZ25hbC1oYW5kb2ZmczwvcXVvdGU+IHByb3BlcnR5IGZvciB0aGlzIG1ldGhvZCB0byB3b3JrLgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIE5vdGUgdGhhdCB5b3VyIGhhbmRvZmYgZnVuY3Rpb24gc2hvdWxkIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPgorICAgICAgICBibG9jaywgc2luY2UgdGhpcyB3aWxsIGJsb2NrIHBpcGVsaW5lIGl0ZXJhdGlvbi4gQWxzbywgZG8gbm90IHRyeQorICAgICAgICB0byB1c2UgYWxsIHNvcnQgb2Ygd2VpcmQgaGFja3MgaW4gc3VjaCBmdW5jdGlvbnMgdG8gYWNjb21wbGlzaAorICAgICAgICBzb21ldGhpbmcgdGhhdCBsb29rcyBsaWtlIHN5bmNocm9uaXphdGlvbiBvciBzbzsgaXQncyBub3QgdGhlIHJpZ2h0CisgICAgICAgIHdheSBhbmQgd2lsbCBsZWFkIHRvIGlzc3VlcyBlbHNld2hlcmUuIElmIHlvdSdyZSBkb2luZyBhbnkgb2YgdGhpcywKKyAgICAgICAgeW91J3JlIGJhc2ljYWxseSBtaXN1bmRlcnN0YW5kaW5nIHRoZSAmR1N0cmVhbWVyOyBkZXNpZ24uCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0Mj4KKworICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1zcG9vZi1mb3JtYXQiPgorICAgICAgPHRpdGxlPkZvcmNpbmcgYSBmb3JtYXQ8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFNvbWV0aW1lcywgd2hlbiB1c2luZyBmYWtlc3JjIGFzIGEgc291cmNlIGluIHlvdXIgcGlwZWxpbmUsIHlvdSdsbAorICAgICAgICB3YW50IHRvIHNldCBhIHNwZWNpZmljIGZvcm1hdCwgZm9yIGV4YW1wbGUgYSB2aWRlbyBzaXplIGFuZCBmb3JtYXQKKyAgICAgICAgb3IgYW4gYXVkaW8gYml0c2l6ZSBhbmQgbnVtYmVyIG9mIGNoYW5uZWxzLiBZb3UgY2FuIGRvIHRoaXMgYnkKKyAgICAgICAgZm9yY2luZyBhIHNwZWNpZmljIDxjbGFzc25hbWU+R3N0Q2FwczwvY2xhc3NuYW1lPiBvbiB0aGUgcGlwZWxpbmUsCisgICAgICAgIHdoaWNoIGlzIHBvc3NpYmxlIGJ5IHVzaW5nIDxlbXBoYXNpcz5maWx0ZXJlZCBjYXBzPC9lbXBoYXNpcz4uIFlvdQorICAgICAgICBjYW4gc2V0IGEgZmlsdGVyZWQgY2FwcyBvbiBhIGxpbmsgYnkgdXNpbmcgdGhlCisgICAgICAgIDxxdW90ZT5jYXBzZmlsdGVyPC9xdW90ZT4gZWxlbWVudCBpbiBiZXR3ZWVuIHRoZSB0d28gZWxlbWVudHMsIGFuZAorICAgICAgICBzcGVjaWZ5aW5nIGEgPGNsYXNzbmFtZT5Hc3RDYXBzPC9jbGFzc25hbWU+IGFzCisgICAgICAgIDxxdW90ZT5jYXBzPC9xdW90ZT4gcHJvcGVydHkgb24gdGhpcyBlbGVtZW50LiBJdCB3aWxsIHRoZW4KKyAgICAgICAgb25seSBhbGxvdyB0eXBlcyBtYXRjaGluZyB0aGF0IHNwZWNpZmllZCBjYXBhYmlsaXR5IHNldCBmb3IKKwluZWdvdGlhdGlvbi4gIFNlZSBhbHNvIDx4cmVmIGxpbmtlbmQ9InNlY3Rpb24tY2Fwcy1maWx0ZXIiLz4uCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0Mj4KKworICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1zcG9vZi1leGFtcGxlIj4KKyAgICAgIDx0aXRsZT5FeGFtcGxlIGFwcGxpY2F0aW9uPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGV4YW1wbGUgYXBwbGljYXRpb24gd2lsbCBnZW5lcmF0ZSBibGFjay93aGl0ZSAoaXQgc3dpdGNoZXMKKyAgICAgICAgZXZlcnkgc2Vjb25kKSB2aWRlbyB0byBhbiBYLXdpbmRvdyBvdXRwdXQgYnkgdXNpbmcgZmFrZXNyYyBhcyBhCisgICAgICAgIHNvdXJjZSBhbmQgdXNpbmcgZmlsdGVyZWQgY2FwcyB0byBmb3JjZSBhIGZvcm1hdC4gU2luY2UgdGhlIGRlcHRoCisgICAgICAgIG9mIHRoZSBpbWFnZSBkZXBlbmRzIG9uIHlvdXIgWC1zZXJ2ZXIgc2V0dGluZ3MsIHdlIHVzZSBhIGNvbG9yc3BhY2UKKyAgICAgICAgY29udmVyc2lvbiBlbGVtZW50IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBvdXRwdXQgdG8geW91ciBYIHNlcnZlcgorICAgICAgICB3aWxsIGhhdmUgdGhlIGNvcnJlY3QgYml0ZGVwdGguIFlvdSBjYW4gYWxzbyBzZXQgdGltZXN0YW1wcyBvbiB0aGUKKyAgICAgICAgcHJvdmlkZWQgYnVmZmVycyB0byBvdmVycmlkZSB0aGUgZml4ZWQgZnJhbWVyYXRlLgorICAgICAgPC9wYXJhPgorICAgICAgPHByb2dyYW1saXN0aW5nPjwhLS0gZXhhbXBsZS1iZWdpbiBmYWtlc3JjLmMgLS0+CisjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7IC8qIGZvciBtZW1zZXQgKCkgKi8KKyNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7CisKK3N0YXRpYyB2b2lkCitjYl9oYW5kb2ZmIChHc3RFbGVtZW50ICpmYWtlc3JjLAorCSAgICBHc3RCdWZmZXIgICpidWZmZXIsCisJICAgIEdzdFBhZCAgICAgKnBhZCwKKwkgICAgZ3BvaW50ZXIgICAgdXNlcl9kYXRhKQoreworICBzdGF0aWMgZ2Jvb2xlYW4gd2hpdGUgPSBGQUxTRTsKKyAgZ3BvaW50ZXIgZGF0YTsKKyAgZ3NpemUgc2l6ZTsKKyAgCisgIGRhdGEgPSBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmYW1wO3NpemUsIE5VTEwsIEdTVF9NQVBfV1JJVEUpOworCisgIC8qIHRoaXMgbWFrZXMgdGhlIGltYWdlIGJsYWNrL3doaXRlICovCisgIG1lbXNldCAoZGF0YSwgd2hpdGUgPyAweGZmIDogMHgwLCBzaXplKTsKKyAgd2hpdGUgPSAhd2hpdGU7CisKKyAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCBkYXRhLCBzaXplKTsKK30KKworZ2ludAorbWFpbiAoZ2ludCAgIGFyZ2MsCisgICAgICBnY2hhciAqYXJndltdKQoreworICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKmZha2VzcmMsICpmbHQsICpjb252LCAqdmlkZW9zaW5rOworICBHTWFpbkxvb3AgKmxvb3A7CisKKyAgLyogaW5pdCBHU3RyZWFtZXIgKi8KKyAgZ3N0X2luaXQgKCZhbXA7YXJnYywgJmFtcDthcmd2KTsKKyAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOworCisgIC8qIHNldHVwIHBpcGVsaW5lICovCisgIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7CisgIGZha2VzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNvdXJjZSIpOworICBmbHQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJjYXBzZmlsdGVyIiwgImZsdCIpOworICBjb252ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmZtcGVnY29sb3JzcGFjZSIsICJjb252Iik7CisgIHZpZGVvc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInh2aW1hZ2VzaW5rIiwgInZpZGVvc2luayIpOworCisgIC8qIHNldHVwICovCisgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGZsdCksICJjYXBzIiwKKyAgCQlnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1yYXctcmdiIiwKKwkJCQkgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQsIDM4NCwKKwkJCQkgICAgICJoZWlnaHQiLCBHX1RZUEVfSU5ULCAyODgsCisJCQkJICAgICAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT04sIDEsIDEsCisJCQkJICAgICAiYnBwIiwgR19UWVBFX0lOVCwgMTYsCisJCQkJICAgICAiZGVwdGgiLCBHX1RZUEVfSU5ULCAxNiwKKwkJCQkgICAgICJlbmRpYW5uZXNzIiwgR19UWVBFX0lOVCwgR19CWVRFX09SREVSLAorCQkJCSAgICAgTlVMTCksIE5VTEwpOworICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIGZha2VzcmMsIGZsdCwgY29udiwgdmlkZW9zaW5rLCBOVUxMKTsKKyAgZ3N0X2VsZW1lbnRfbGlua19tYW55IChmYWtlc3JjLCBmbHQsIGNvbnYsIHZpZGVvc2luaywgTlVMTCk7CisKKyAgLyogc2V0dXAgZmFrZSBzb3VyY2UgKi8KKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZmFrZXNyYyksCisJCSJzaWduYWwtaGFuZG9mZnMiLCBUUlVFLAorCQkic2l6ZW1heCIsIDM4NCAqIDI4OCAqIDIsCisJCSJzaXpldHlwZSIsIDIsIE5VTEwpOworICBnX3NpZ25hbF9jb25uZWN0IChmYWtlc3JjLCAiaGFuZG9mZiIsIEdfQ0FMTEJBQ0sgKGNiX2hhbmRvZmYpLCBOVUxMKTsKKworICAvKiBwbGF5ICovCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKKworICAvKiBjbGVhbiB1cCAqLworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKHBpcGVsaW5lKSk7CisKKyAgcmV0dXJuIDA7Cit9CisgICAgICA8IS0tIGV4YW1wbGUtZW5kIGZha2VzcmMuYyAtLT48L3Byb2dyYW1saXN0aW5nPgorICAgIDwvc2VjdDI+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWRhdGEtbWFuYWdlciI+CisgICAgPHRpdGxlPkVtYmVkZGluZyBzdGF0aWMgZWxlbWVudHMgaW4geW91ciBhcHBsaWNhdGlvbjwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBUaGUgPHVsaW5rIHR5cGU9Imh0dHAiCisgICAgICB1cmw9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL3B3Zy9odG1sL2luZGV4Lmh0bWwiPlBsdWdpbgorICAgICAgV3JpdGVyJ3MgR3VpZGU8L3VsaW5rPiBkZXNjcmliZXMgaW4gZ3JlYXQgZGV0YWlsIGhvdyB0byB3cml0ZSBlbGVtZW50cworICAgICAgZm9yIHRoZSAmR1N0cmVhbWVyOyBmcmFtZXdvcmsuIEluIHRoaXMgc2VjdGlvbiwgd2Ugd2lsbCBzb2xlbHkgZGlzY3VzcworICAgICAgaG93IHRvIGVtYmVkIHN1Y2ggZWxlbWVudHMgc3RhdGljYWxseSBpbiB5b3VyIGFwcGxpY2F0aW9uLiBUaGlzIGNhbiBiZQorICAgICAgdXNlZnVsIGZvciBhcHBsaWNhdGlvbi1zcGVjaWZpYyBlbGVtZW50cyB0aGF0IGhhdmUgbm8gdXNlIGVsc2V3aGVyZSBpbgorICAgICAgJkdTdHJlYW1lcjsuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgRHluYW1pY2FsbHkgbG9hZGVkIHBsdWdpbnMgY29udGFpbiBhIHN0cnVjdHVyZSB0aGF0J3MgZGVmaW5lZCB1c2luZworICAgICAgPGZ1bmN0aW9uPkdTVF9QTFVHSU5fREVGSU5FICgpPC9mdW5jdGlvbj4uIFRoaXMgc3RydWN0dXJlIGlzIGxvYWRlZAorICAgICAgd2hlbiB0aGUgcGx1Z2luIGlzIGxvYWRlZCBieSB0aGUgJkdTdHJlYW1lcjsgY29yZS4gVGhlIHN0cnVjdHVyZQorICAgICAgY29udGFpbnMgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gKHVzdWFsbHkgY2FsbGVkCisgICAgICA8ZnVuY3Rpb24+cGx1Z2luX2luaXQ8L2Z1bmN0aW9uPikgdGhhdCB3aWxsIGJlIGNhbGxlZCByaWdodCBhZnRlciB0aGF0LgorICAgICAgSXQncyBwdXJwb3NlIGlzIHRvIHJlZ2lzdGVyIHRoZSBlbGVtZW50cyBwcm92aWRlZCBieSB0aGUgcGx1Z2luIHdpdGgKKyAgICAgIHRoZSAmR1N0cmVhbWVyOyBmcmFtZXdvcmsuIElmIHlvdSB3YW50IHRvIGVtYmVkIGVsZW1lbnRzIGRpcmVjdGx5IGluCisgICAgICB5b3VyIGFwcGxpY2F0aW9uLCB0aGUgb25seSB0aGluZyB5b3UgbmVlZCB0byBkbyBpcyB0byByZXBsYWNlCisJICA8ZnVuY3Rpb24+R1NUX1BMVUdJTl9ERUZJTkUgKCk8L2Z1bmN0aW9uPiB3aXRoCisJICA8ZnVuY3Rpb24+R1NUX1BMVUdJTl9ERUZJTkVfU1RBVElDICgpPC9mdW5jdGlvbj4uIFRoaXMgd2lsbCBjYXVzZSB0aGUKKyAgICAgIGVsZW1lbnRzIHRvIGJlIHJlZ2lzdGVyZWQgd2hlbiB5b3VyIGFwcGxpY2F0aW9uIGxvYWRzLCBhbmQgdGhlIGVsZW1lbnRzCisgICAgICB3aWxsIGZyb20gdGhlbiBvbiBiZSBhdmFpbGFibGUgbGlrZSBhbnkgb3RoZXIgZWxlbWVudCwgd2l0aG91dCB0aGVtCisgICAgICBoYXZpbmcgdG8gYmUgZHluYW1pY2FsbHkgbG9hZGFibGUgbGlicmFyaWVzLiBJbiB0aGUgZXhhbXBsZSBiZWxvdywgeW91CisgICAgICB3b3VsZCBiZSBhYmxlIHRvIGNhbGwgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZQorICAgICAgKCJteS1lbGVtZW50LW5hbWUiLCAic29tZS1uYW1lIik8L2Z1bmN0aW9uPiB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlCisgICAgICBlbGVtZW50LgorICAgIDwvcGFyYT4KKworICAgIDxwcm9ncmFtbGlzdGluZz4KKy8qCisgKiBIZXJlLCB5b3Ugd291bGQgd3JpdGUgdGhlIGFjdHVhbCBwbHVnaW4gY29kZS4KKyAqLworCitbLi5dCisKK3N0YXRpYyBnYm9vbGVhbgorcmVnaXN0ZXJfZWxlbWVudHMgKEdzdFBsdWdpbiAqcGx1Z2luKQoreworICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgIm15LWVsZW1lbnQtbmFtZSIsCisJCQkgICAgICAgR1NUX1JBTktfTk9ORSwgTVlfUExVR0lOX1RZUEUpOworfQorCitHU1RfUExVR0lOX0RFRklORV9TVEFUSUMgKAorICBHU1RfVkVSU0lPTl9NQUpPUiwKKyAgR1NUX1ZFUlNJT05fTUlOT1IsCisgICJteS1wcml2YXRlLXBsdWdpbnMiLAorICAiUHJpdmF0ZSBlbGVtZW50cyBvZiBteSBhcHBsaWNhdGlvbiIsCisgIHJlZ2lzdGVyX2VsZW1lbnRzLAorICBWRVJTSU9OLAorICAiTEdQTCIsCisgICJteS1hcHBsaWNhdGlvbiIsCisgICJodHRwOi8vd3d3Lm15LWFwcGxpY2F0aW9uLm5ldC8iCispCisgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPC9zZWN0MT4KKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2FkdmFuY2VkLWRwYXJhbXMueG1sIGIvZG9jcy9tYW51YWwvYWR2YW5jZWQtZHBhcmFtcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYzYzZhZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbWFudWFsL2FkdmFuY2VkLWRwYXJhbXMueG1sCkBAIC0wLDAgKzEsMTAwIEBACis8Y2hhcHRlciBpZD0iY2hhcHRlci1kcGFyYW1zIj4KKyAgPHRpdGxlPkR5bmFtaWMgQ29udHJvbGxhYmxlIFBhcmFtZXRlcnM8L3RpdGxlPgorICAKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWRwYXJhbXMtZ2V0dGluZy1zdGFydGVkIj4KKyAgICA8dGl0bGU+R2V0dGluZyBTdGFydGVkPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSBjb250cm9sbGVyIHN1YnN5c3RlbSBvZmZlcnMgYSBsaWdodHdlaWdodCB3YXkgdG8gYWRqdXN0IGdvYmplY3QKKyAgICAgIHByb3BlcnRpZXMgb3ZlciBzdHJlYW0tdGltZS4gTm9ybWFseSB0aGVzZSBwcm9wZXJ0aWVzIGFyZSBjaGFuZ2VkIHVzaW5nCisgICAgICA8ZnVuY3Rpb24+Z19vYmplY3Rfc2V0KCk8L2Z1bmN0aW9uPi4gVGltaW5nIHRob3NlIGNhbGxzIHJlbGlhYmx5IHNvIHRoYXQKKyAgICAgIHRoZSBjaGFuZ2VzIGFmZmVjdCBjZXJ0YWluIHN0cmVhbSB0aW1lcyBpcyBjbG9zZSB0byBpbXBvc3NpYmxlLiBUaGUKKyAgICAgIGNvbnRyb2xsZXIgdGFrZXMgdGltZSBpbnRvIGFjY291bnQuIEl0IHdvcmtzIGJ5IGF0dGFjaGluZyBjb250cm9sLXNvdXJjZXMKKyAgICAgIHRvIHByb3BlcnRpZXMuIENvbnRyb2wtc291cmNlcyBjYW4gcHJvdmlkZSBuZXcgdmFsdWVzIGZvciB0aGUgcHJvcGVydGllcworICAgICAgZm9yIGEgZ2l2ZW4gdGltZXN0YW1wLiBBdCBydW4tdGltZSB0aGUgZWxlbWVudHMgY29udGlub3VzbHkgcHVsbCB2YWx1ZXMKKyAgICAgIGNoYW5nZXMgZm9yIHRoZSBjdXJyZW50IHN0cmVhbS10aW1lLiBHU3RyZWFtZXIgaW5jbHVkZXMgYSBmZXcgZGlmZmVyZW50CisgICAgICBjb250cm9sLXNvdXJjZXMsIGJ1dCBhcHBsaWNhdGlvbnMgY2FuIGRlZmluZSB0aGVpciBvd24gYnkgc3ViY2xhc3NpbmcuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgVGhpcyBzdWJzeXN0ZW0gaXMgY29udGFpbmVkIHdpdGhpbiB0aGUKKyAgICAgIDxmaWxlbmFtZT5nc3Rjb250cm9sbGVyPC9maWxlbmFtZT4gbGlicmFyeS4KKyAgICAgIFlvdSBuZWVkIHRvIGluY2x1ZGUgdGhlIGhlYWRlciBpbiB5b3VyIGFwcGxpY2F0aW9uJ3Mgc291cmNlIGZpbGU6CisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz4KKy4uLgorI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKKyNpbmNsdWRlICZsdDtnc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmgmZ3Q7CisuLi4KKyAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDxwYXJhPgorICAgICAgWW91ciBhcHBsaWNhdGlvbiBzaG91bGQgbGluayB0byB0aGUgc2hhcmVkIGxpYnJhcnkgPGZpbGVuYW1lPmdzdHJlYW1lci1jb250cm9sbGVyPC9maWxlbmFtZT4uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgVGhlIDxmaWxlbmFtZT5nc3RyZWFtZXItY29udHJvbGxlcjwvZmlsZW5hbWU+IGxpYnJhcnkgbmVlZHMgdG8gYmUgaW5pdGlhbGl6ZWQKKyAgICAgIHdoZW4geW91ciBhcHBsaWNhdGlvbiBpcyBydW4uICBUaGlzIGNhbiBiZSBkb25lIGFmdGVyIHRoZSBHU3RyZWFtZXIKKyAgICAgIGxpYnJhcnkgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuCisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz4KKyAgLi4uCisgIGdzdF9pbml0ICgmYW1wO2FyZ2MsICZhbXA7YXJndik7CisgIGdzdF9jb250cm9sbGVyX2luaXQgKCZhbXA7YXJnYywgJmFtcDthcmd2KTsKKyAgLi4uCisgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPC9zZWN0MT4KKyAgCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1kcGFyYW1zLXBhcmFtZXRlcnMiPgorICAgIDx0aXRsZT5TZXR0aW5nIHVwIHBhcmFtZXRlciBjb250cm9sPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSBmaXJzdCBzdGVwIGlzIHRvIHNlbGVjdCB0aGUgcGFyYW1ldGVycyB0aGF0IHNob3VsZCBiZSBjb250cm9sbGVkLgorICAgICAgVGhpcyByZXR1cm5zIGEgY29udHJvbGxlciBvYmplY3QgdGhhdCBpcyBuZWVkZWQgdG8gZnVydGhlciBhZGp1c3QgdGhlCisgICAgICBiZWhhdmlvdXIuICAgICAgCisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz4KKyAgY29udHJvbGxlciA9IGdzdF9vYmplY3RfY29udHJvbF9wcm9wZXJ0aWVzKG9iamVjdCwgInByb3AxIiwgInByb3AyIiwuLi4pOworICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+CisgICAgICBOZXh0IHdlIGF0dGFjaCBhIGNvbnRyb2wtc291cmNlIHRvIGVhY2ggcGFyYW1ldGVyLiBMZXRzIHVzZSBhbiAKKyAgICAgIGludGVycG9sYXRpb24gY29udHJvbC1zb3VyY2U6CisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz4KKyAgY3NvdXJjZSA9IGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX25ldyAoKTsKKyAgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0X2ludGVycG9sYXRpb25fbW9kZShjc291cmNlLCBHU1RfSU5URVJQT0xBVEVfTElORUFSKTsKKyAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDxwYXJhPgorICAgICAgVGhpcyBjb250cm9sLXNvdXJjZSB0YWtlcyBuZXcgcHJvcGVydHkgdmFsdWVzIGZyb20gYSBsaXN0IG9mIHRpbWUtc3RhbXBlZAorICAgICAgcGFyYW1ldGVyIGNoYW5nZXMuIFRoZSBzb3VyY2UgY2FuIGUuZy4gZmlsbCBnYXBzIGJ5IHNtb290aGluZyBwYXJhbWV0ZXIKKyAgICAgIGNoYW5nZXMuIFRoaXMgYmVoYXZpb3VyIGNhbiBiZSBjb25maWd1cmVkIGJ5IHNldHRpbmcgdGhlIAorICAgICAgaW50ZXJwb2xhdGlvbi1tb2RlLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIE5vdyB3ZSBjYW4gc2V0IHNvbWUgY29udHJvbCBwb2ludHMuIFRoZXNlIGFyZSB0aW1lLXN0YW1wZWQgR1ZhbHVlcy4KKyAgICAgIFRoZSB2YWx1ZXMgYmVjb21lIGFjdGl2ZSB3aGVuIHRoZSB0aW1lc3RhbXAgaXMgcmVhY2hlZC4gVGhleSBzdGlsbCBzdGF5CisgICAgICBpbiB0aGUgbGlzdC4gSWYgZS5nLiB0aGUgcGlwZWxpbmUgcnVucyBhIGxvb3AgKHVzaW5nIGEgc2VnbWVudGVkIHNlZWspLAorICAgICAgdGhlIGNvbnRyb2wtY3VydmUgZ2V0cyByZXBlYXRlZCBhcyB3ZWxsLiBPdGhlciBjb250cm9sLXNvdXJjZXMgaGF2ZQorICAgICAgZGlmZmVyZW50IGZ1bmN0aW9ucyB0byBzcGVjaWZ5IHRoZSBjb250cm9sLWNoYW5nZXMgb3ZlciB0aW1lLgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3Rpbmc+CisgIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldCAoY3NvdXJjZSwgMCAqIEdTVF9TRUNPTkQsIHZhbHVlMSk7CisgIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldCAoY3NvdXJjZSwgMSAqIEdTVF9TRUNPTkQsIHZhbHVlMik7CisgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8cGFyYT4KKyAgICAgIEZpbmFsbHkgd2UgbmVlZCB0byBhc3NpZ24gdGhlIGNvbnRyb2wtc291cmNlIHRvIHRoZSBnb2JqZWN0IHByb3BlcnR5LiBPbmUgCisgICAgICBjb250cm9sIHNvdXJjZSBjYW4gb25seSBiZSBhc3NpZ25lZCB0byBvbmUgcHJvcGVydHkuCisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz4KKyAgICAgIGdzdF9jb250cm9sbGVyX3NldF9jb250cm9sX3NvdXJjZSAoY29udHJvbGxlciwgInByb3AxIiwgY3NvdXJjZSk7CisgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8cGFyYT4KKyAgICAgIE5vdyBldmVyeXRoaW5nIGlzIHJlYWR5IHRvIHBsYXkuIE9uZSBmaW5hbCBub3RlIC0gdGhlIGNvbnRyb2xsZXIgc3Vic3lzdGVtCisgICAgICBoYXMgYSBidWlsdGluIGxpdmUtbW9kZS4gRXZlbiB0aG91Z2ggYSBwcm9wZXJ0eSBoYXMgYSBjb250cm9sLXNvdXJjZQorICAgICAgYXNzaWduZWQgb25lIGNhbiBjaGFuZ2UgdGhlIEdPYmplY3QgcHJvcGVydHkgdGhyb3VnaCB0aGUgCisgICAgICA8ZnVuY3Rpb24+Z19vYmplY3Rfc2V0KCk8L2Z1bmN0aW9uPi4KKyAgICAgIFRoaXMgaXMgaGlnaGx5IHVzZWZ1bCB3aGVuIGJpbmRpbmcgdGhlIEdPYmplY3QgcHJvcGVydGllcyB0byBHVUkgd2lkZ2V0cy4KKyAgICAgIFdoZW4gdGhlIHVzZXIgYWRqdXN0cyB0aGUgdmFsdWUgd2l0aCB0aGUgd2lkZ2V0LCBvbmUgY2FuIHNldCB0aGUgR09iamVjdAorICAgICAgcHJvcGVydHkgYW5kIHRoaXMgcmVtYWlucyBhY3RpdmUgdW50aWwgdGhlIG5leHQgcHJvZ3JhbW1lZCBjb250cm9sLXNvdXJjZQorICAgICAgdmFsdWUgb3ZlcnJpZGVzIGl0LiBUaGlzIGFsc28gd29ya3Mgd2l0aCBzbW9vdGhlZCBwYXJhbWV0ZXJzLiBJdCBtaWdodCBub3QKKyAgICAgIHdvcmsgZm9yIGNvbnRyb2wtc291cmNlcyB0aGF0IGNvbnN0YW50bHkgdXBkYXRlIHRoZSBwcm9wZXJ0eSAoZS5nLiB0aGUgbGZvCisgICAgICBjb250cm9sLXNvdXJjZSkuCisgICAgPC9wYXJhPgorICA8L3NlY3QxPgorICAKKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2FkdmFuY2VkLWludGVyZmFjZXMueG1sIGIvZG9jcy9tYW51YWwvYWR2YW5jZWQtaW50ZXJmYWNlcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZhNTg5NwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbWFudWFsL2FkdmFuY2VkLWludGVyZmFjZXMueG1sCkBAIC0wLDAgKzEsMTc2IEBACis8Y2hhcHRlciBpZD0iY2hhcHRlci1pbnRlcmZhY2VzIj4KKyAgPHRpdGxlPkludGVyZmFjZXM8L3RpdGxlPgorCisgIDxwYXJhPgorICAgIEluIDx4cmVmIGxpbmtlbmQ9InNlY3Rpb24tZWxlbWVudHMtcHJvcGVydGllcyIvPiwgeW91IGhhdmUgbGVhcm5lZCBob3cKKyAgICB0byB1c2UgPGNsYXNzbmFtZT5HT2JqZWN0PC9jbGFzc25hbWU+IHByb3BlcnRpZXMgYXMgYSBzaW1wbGUgd2F5IHRvIGRvCisgICAgaW50ZXJhY3Rpb24gYmV0d2VlbiBhcHBsaWNhdGlvbnMgYW5kIGVsZW1lbnRzLiBUaGlzIG1ldGhvZCBzdWZmaWNlcyBmb3IKKyAgICB0aGUgc2ltcGxlJ24nc3RyYWlnaHQgc2V0dGluZ3MsIGJ1dCBmYWlscyBmb3IgYW55dGhpbmcgbW9yZSBjb21wbGljYXRlZAorICAgIHRoYW4gYSBnZXR0ZXIgYW5kIHNldHRlci4gRm9yIHRoZSBtb3JlIGNvbXBsaWNhdGVkIHVzZSBjYXNlcywgJkdTdHJlYW1lcjsKKyAgICB1c2VzIGludGVyZmFjZXMgYmFzZWQgb24gdGhlIEdPYmplY3QgPHVsaW5rIHR5cGU9Imh0dHAiCisgICAgICB1cmw9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3N0YWJsZS9ndHlwZS1ub24taW5zdGFudGlhYmxlLWNsYXNzZWQuaHRtbCI+PGNsYXNzbmFtZT5HVHlwZUludGVyZmFjZTwvY2xhc3NuYW1lPjwvdWxpbms+CisgICAgdHlwZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgIE1vc3Qgb2YgdGhlIGludGVyZmFjZXMgaGFuZGxlZCBoZXJlIHdpbGwgbm90IGNvbnRhaW4gYW55IGV4YW1wbGUgY29kZS4KKyAgICBTZWUgdGhlIEFQSSByZWZlcmVuY2VzIGZvciBkZXRhaWxzLiBIZXJlLCB3ZSB3aWxsIGp1c3QgZGVzY3JpYmUgdGhlCisgICAgc2NvcGUgYW5kIHB1cnBvc2Ugb2YgZWFjaCBpbnRlcmZhY2UuCisgIDwvcGFyYT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24taW50ZXJmYWNlcy11cmkiPgorICAgIDx0aXRsZT5UaGUgVVJJIGludGVyZmFjZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIEluIGFsbCBleGFtcGxlcyBzbyBmYXIsIHdlIGhhdmUgb25seSBzdXBwb3J0ZWQgbG9jYWwgZmlsZXMgdGhyb3VnaCB0aGUKKyAgICAgIDxxdW90ZT5maWxlc3JjPC9xdW90ZT4gZWxlbWVudC4gJkdTdHJlYW1lcjssIG9idmlvdXNseSwgc3VwcG9ydHMgbWFueQorICAgICAgbW9yZSBsb2NhdGlvbiBzb3VyY2VzLiBIb3dldmVyLCB3ZSBkb24ndCB3YW50IGFwcGxpY2F0aW9ucyB0byBuZWVkIHRvCisgICAgICBrbm93IGFueSBwYXJ0aWN1bGFyIGVsZW1lbnQgaW1wbGVtZW50YXRpb24gZGV0YWlscywgc3VjaCBhcyBlbGVtZW50CisgICAgICBuYW1lcyBmb3IgcGFydGljdWxhciBuZXR3b3JrIHNvdXJjZSB0eXBlcyBhbmQgc28gb24uIFRoZXJlZm9yZSwgdGhlcmUKKyAgICAgIGlzIGEgVVJJIGludGVyZmFjZSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZ2V0IHRoZSBzb3VyY2UgZWxlbWVudCB0aGF0CisgICAgICBzdXBwb3J0cyBhIHBhcnRpY3VsYXIgVVJJIHR5cGUuIFRoZXJlIGlzIG5vIHN0cmljdCBydWxlIGZvciBVUkkgbmFtaW5nLAorICAgICAgYnV0IGluIGdlbmVyYWwgd2UgZm9sbG93IG5hbWluZyBjb252ZW50aW9ucyB0aGF0IG90aGVycyB1c2UsIHRvby4gRm9yCisgICAgICBleGFtcGxlLCBhc3N1bWluZyB5b3UgaGF2ZSB0aGUgY29ycmVjdCBwbHVnaW5zIGluc3RhbGxlZCwgJkdTdHJlYW1lcjsKKyAgICAgIHN1cHBvcnRzIDxxdW90ZT5maWxlOi8vLyZsdDtwYXRoJmd0Oy8mbHQ7ZmlsZSZndDs8L3F1b3RlPiwKKyAgICAgIDxxdW90ZT5odHRwOi8vJmx0O2hvc3QmZ3Q7LyZsdDtwYXRoJmd0Oy8mbHQ7ZmlsZSZndDs8L3F1b3RlPiwKKyAgICAgIDxxdW90ZT5tbXM6Ly8mbHQ7aG9zdCZndDsvJmx0O3BhdGgmZ3Q7LyZsdDtmaWxlJmd0OzwvcXVvdGU+LCBhbmQgc28gb24uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgSW4gb3JkZXIgdG8gZ2V0IHRoZSBzb3VyY2Ugb3Igc2luayBlbGVtZW50IHN1cHBvcnRpbmcgYSBwYXJ0aWN1bGFyIFVSSSwKKyAgICAgIHVzZSA8ZnVuY3Rpb24+Z3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaSAoKTwvZnVuY3Rpb24+LCB3aXRoIHRoZSBVUkkKKyAgICAgIHR5cGUgYmVpbmcgZWl0aGVyIDxjbGFzc25hbWU+R1NUX1VSSV9TUkM8L2NsYXNzbmFtZT4gZm9yIGEgc291cmNlCisgICAgICBlbGVtZW50LCBvciA8Y2xhc3NuYW1lPkdTVF9VUklfU0lOSzwvY2xhc3NuYW1lPiBmb3IgYSBzaW5rIGVsZW1lbnQuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgWW91IGNhbiBjb252ZXJ0IGZpbGVuYW1lcyB0byBhbmQgZnJvbSBVUklzIHVzaW5nIEdMaWIncworICAgICAgPGZ1bmN0aW9uPmdfZmlsZW5hbWVfdG9fdXJpICgpPC9mdW5jdGlvbj4gYW5kCisgICAgICA8ZnVuY3Rpb24+Z191cmlfdG9fZmlsZW5hbWUgKCk8L2Z1bmN0aW9uPi4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWludGVyZmFjZXMtbWl4ZXIiPgorICAgIDx0aXRsZT5UaGUgTWl4ZXIgaW50ZXJmYWNlPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgVGhlIG1peGVyIGludGVyZmFjZSBwcm92aWRlcyBhIHVuaWZvcm0gd2F5IHRvIGNvbnRyb2wgdGhlIHZvbHVtZSBvbiBhCisgICAgICBoYXJkd2FyZSAob3Igc29mdHdhcmUpIG1peGVyLiBUaGUgaW50ZXJmYWNlIGlzIHByaW1hcmlseSBpbnRlbmRlZCB0bworICAgICAgYmUgaW1wbGVtZW50ZWQgYnkgZWxlbWVudHMgZm9yIGF1ZGlvIGlucHV0cyBhbmQgb3V0cHV0cyB0aGF0IHRhbGsKKyAgICAgIGRpcmVjdGx5IHRvIHRoZSBoYXJkd2FyZSAoZS5nLiBPU1Mgb3IgQUxTQSBwbHVnaW5zKS4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBVc2luZyB0aGlzIGludGVyZmFjZSwgaXQgaXMgcG9zc2libGUgdG8gY29udHJvbCBhIGxpc3Qgb2YgdHJhY2tzCisgICAgICAoc3VjaCBhcyBMaW5lLWluLCBNaWNyb3Bob25lLCBldGMuKSBmcm9tIGEgbWl4ZXIgZWxlbWVudC4gVGhleSBjYW4KKyAgICAgIGJlIG11dGVkLCB0aGVpciB2b2x1bWUgY2FuIGJlIGNoYW5nZWQgYW5kLCBmb3IgaW5wdXQgdHJhY2tzLCB0aGVpcgorICAgICAgcmVjb3JkIGZsYWcgY2FuIGJlIHNldCBhcyB3ZWxsLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIEV4YW1wbGUgcGx1Z2lucyBpbXBsZW1lbnRpbmcgdGhpcyBpbnRlcmZhY2UgaW5jbHVkZSB0aGUgT1NTIGVsZW1lbnRzCisgICAgICAob3Nzc3JjLCBvc3NzaW5rLCBvc3NtaXhlcikgYW5kIHRoZSBBTFNBIHBsdWdpbnMgKGFsc2FzcmMsIGFsc2FzaW5rCisgICAgICBhbmQgYWxzYW1peGVyKS4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBpbnRlcmZhY2UgZm9yIHZvbHVtZSBjb250cm9sIGluIGEgcGxheWJhY2sKKyAgICAgIGFwcGxpY2F0aW9uLiBFaXRoZXIgdXNlIGEgPGNsYXNzbmFtZT52b2x1bWU8L2NsYXNzbmFtZT4gZWxlbWVudCBvciB1c2UKKyAgICAgIDxjbGFzc25hbWU+cGxheWJpbjwvY2xhc3NuYW1lPidzIDxxdW90ZT52b2x1bWU8L3F1b3RlPiBwcm9wZXJ0eSwgb3IgdXNlCisgICAgICB0aGUgPGNsYXNzbmFtZT5hdWRpb3Npbms8L2NsYXNzbmFtZT4ncyA8cXVvdGU+dm9sdW1lPC9xdW90ZT4gcHJvcGVydHkgKGlmIGl0IGhhcyBvbmUpLgorICAgIDwvcGFyYT4KKyAgICA8bm90ZT4KKyAgICAgIDxwYXJhPgorCUluIG9yZGVyIGZvciB0aGUgPHVsaW5rIHR5cGU9Imh0dHAiCisJICB1cmw9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdC1wbHVnaW5zLWJhc2UtbGlicy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RtaXhlci5odG1sIj48Y2xhc3NuYW1lPkdzdE1peGVyPC9jbGFzc25hbWU+PC91bGluaz4KKwlpbnRlcmZhY2UgdG8gYmUKKyAgICAgICAgdXNhYmxlLCB0aGUgZWxlbWVudCBpbXBsZW1lbnRpbmcgaXQgbmVlZHMgdG8gYmUgaW4gdGhlIHJpZ2h0IHN0YXRlLAorICAgICAgICBzbyB0aGF0IHRoZSB1bmRlcmx5aW5nIG1peGVyIGRldmljZSBpcyBvcGVuLiBUaGlzIHVzdWFsbHkgbWVhbnMgdGhlCisgICAgICAgIGVsZW1lbnQgbmVlZHMgdG8gYmUgYXQgbGVhc3QgaW4gPGNsYXNzbmFtZT5HU1RfU1RBVEVfUkVBRFk8L2NsYXNzbmFtZT4KKyAgICAgICAgYmVmb3JlIHlvdSBjYW4gdXNlIHRoaXMgaW50ZXJmYWNlLiBZb3Ugd2lsbCBnZXQgY29uZnVzaW5nIHdhcm5pbmdzCisgICAgICAgIGlmIHRoZSBlbGVtZW50IGlzIG5vdCBpbiB0aGUgcmlnaHQgc3RhdGUgd2hlbiB0aGUgaW50ZXJmYWNlIGlzIHVzZWQuCisgICAgICA8L3BhcmE+CisgICAgPC9ub3RlPgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1pbnRlcmZhY2VzLXR1bmVyIj4KKyAgICA8dGl0bGU+VGhlIFR1bmVyIGludGVyZmFjZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoZSB0dW5lciBpbnRlcmZhY2UgaXMgYSB1bmlmb3JtIHdheSB0byBjb250cm9sIGlucHV0cyBhbmQgb3V0cHV0cworICAgICAgb24gYSBtdWx0aS1pbnB1dCBzZWxlY3Rpb24gZGV2aWNlLiBUaGlzIGlzIHByaW1hcmlseSB1c2VkIGZvciBpbnB1dAorICAgICAgc2VsZWN0aW9uIG9uIGVsZW1lbnRzIGZvciBUVi0gYW5kIGNhcHR1cmUtY2FyZHMuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgVXNpbmcgdGhpcyBpbnRlcmZhY2UsIGl0IGlzIHBvc3NpYmxlIHRvIHNlbGVjdCBvbmUgdHJhY2sgZnJvbSBhIGxpc3QKKyAgICAgIG9mIHRyYWNrcyBzdXBwb3J0ZWQgYnkgdGhhdCB0dW5lci1lbGVtZW50LiBUaGUgdHVuZXIgd2lsbCB0aGVuIHNlbGVjdAorICAgICAgdGhhdCB0cmFjayBmb3IgbWVkaWEtcHJvY2Vzc2luZyBpbnRlcm5hbGx5LiBUaGlzIGNhbiwgZm9yIGV4YW1wbGUsIGJlCisgICAgICB1c2VkIHRvIHN3aXRjaCBpbnB1dHMgb24gYSBUVi1jYXJkIChlLmcuIGZyb20gQ29tcG9zaXRlIHRvIFMtdmlkZW8pLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFRoaXMgaW50ZXJmYWNlIGlzIGN1cnJlbnRseSBvbmx5IGltcGxlbWVudGVkIGJ5IHRoZSBWaWRlbzRsaW51eCBhbmQKKyAgICAgIFZpZGVvNGxpbnV4MiBlbGVtZW50cy4KKyAgICA8L3BhcmE+CisgICAgPG5vdGU+CisgICAgICA8cGFyYT4KKwlJbiBvcmRlciBmb3IgdGhlIDx1bGluayB0eXBlPSJodHRwIgorCSAgdXJsPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0dHVuZXIuaHRtbCI+PGNsYXNzbmFtZT5Hc3RUdW5lcjwvY2xhc3NuYW1lPjwvdWxpbms+CisJaW50ZXJmYWNlIHRvIGJlCisgICAgICAgIHVzYWJsZSwgdGhlIGVsZW1lbnQgaW1wbGVtZW50aW5nIGl0IG5lZWRzIHRvIGJlIGluIHRoZSByaWdodCBzdGF0ZSwKKyAgICAgICAgc28gdGhhdCB0aGUgdW5kZXJseWluZyBkZXZpY2UgaXMgb3Blbi4gVGhpcyB1c3VhbGx5IG1lYW5zIHRoZQorICAgICAgICBlbGVtZW50IG5lZWRzIHRvIGJlIGF0IGxlYXN0IGluIDxjbGFzc25hbWU+R1NUX1NUQVRFX1JFQURZPC9jbGFzc25hbWU+CisgICAgICAgIGJlZm9yZSB5b3UgY2FuIHVzZSB0aGlzIGludGVyZmFjZS4gWW91IHdpbGwgZ2V0IGNvbmZ1c2luZyB3YXJuaW5ncworICAgICAgICBpZiB0aGUgZWxlbWVudCBpcyBub3QgaW4gdGhlIHJpZ2h0IHN0YXRlIHdoZW4gdGhlIGludGVyZmFjZSBpcyB1c2VkLgorICAgICAgPC9wYXJhPgorICAgIDwvbm90ZT4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24taW50ZXJmYWNlcy1jb2xvcmJhbGFuY2UiPgorICAgIDx0aXRsZT5UaGUgQ29sb3IgQmFsYW5jZSBpbnRlcmZhY2U8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBUaGUgY29sb3JiYWxhbmNlIGludGVyZmFjZSBpcyBhIHdheSB0byBjb250cm9sIHZpZGVvLXJlbGF0ZWQgcHJvcGVydGllcworICAgICAgb24gYW4gZWxlbWVudCwgc3VjaCBhcyBicmlnaHRuZXNzLCBjb250cmFzdCBhbmQgc28gb24uIEl0J3Mgc29sZQorICAgICAgcmVhc29uIGZvciBleGlzdGVuY2UgaXMgdGhhdCwgYXMgZmFyIGFzIGl0cyBhdXRob3JzIGtub3csIHRoZXJlJ3Mgbm8KKyAgICAgIHdheSB0byBkeW5hbWljYWxseSByZWdpc3RlciBwcm9wZXJ0aWVzIHVzaW5nCisgICAgICA8Y2xhc3NuYW1lPkdPYmplY3Q8L2NsYXNzbmFtZT4uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgVGhlIGNvbG9yYmFsYW5jZSBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgc2V2ZXJhbCBwbHVnaW5zLCBpbmNsdWRpbmcKKyAgICAgIHh2aW1hZ2VzaW5rIGFuZCB0aGUgVmlkZW80bGludXggYW5kIFZpZGVvNGxpbnV4MiBlbGVtZW50cy4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWludGVyZmFjZXMtcHJvcHJvYmUiPgorICAgIDx0aXRsZT5UaGUgUHJvcGVydHkgUHJvYmUgaW50ZXJmYWNlPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgVGhlIHByb3BlcnR5IHByb2JlIGlzIGEgd2F5IHRvIGF1dG9kZXRlY3QgYWxsb3dlZCB2YWx1ZXMgZm9yIGEKKyAgICAgIDxjbGFzc25hbWU+R09iamVjdDwvY2xhc3NuYW1lPiBwcm9wZXJ0eS4gSXQncyBwcmltYXJ5IHVzZSBpcyB0byBhdXRvZGV0ZWN0CisgICAgICBkZXZpY2VzIGluIHNldmVyYWwgZWxlbWVudHMuIEZvciBleGFtcGxlLCB0aGUgT1NTIGVsZW1lbnRzIHVzZSB0aGlzCisgICAgICBpbnRlcmZhY2UgdG8gZGV0ZWN0IGFsbCBPU1MgZGV2aWNlcyBvbiBhIHN5c3RlbS4gQXBwbGljYXRpb25zIGNhbiB0aGVuCisgICAgICA8cXVvdGU+cHJvYmU8L3F1b3RlPiB0aGlzIHByb3BlcnR5IGFuZCBnZXQgYSBsaXN0IG9mIGRldGVjdGVkIGRldmljZXMuCisgICAgPC9wYXJhPgorICAgIDxub3RlPgorICAgICAgPHBhcmE+CisgICAgICAgIEdpdmVuIHRoZSBvdmVybGFwIGJldHdlZW4gSEFMIGFuZCB0aGUgcHJhY3RpY2FsIGltcGxlbWVudGF0aW9ucyBvZiB0aGlzCisgICAgICAgIGludGVyZmFjZSwgdGhpcyBtaWdodCBpbiB0aW1lIGJlIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIEhBTC4KKyAgICAgIDwvcGFyYT4KKyAgICA8L25vdGU+CisgICAgPHBhcmE+CisgICAgICBUaGlzIGludGVyZmFjZSBpcyBjdXJyZW50bHkgaW1wbGVtZW50ZWQgYnkgbWFueSBlbGVtZW50cywgaW5jbHVkaW5nCisgICAgICB0aGUgQUxTQSwgT1NTLCBYVmlkZW8sIFZpZGVvNGxpbnV4IGFuZCBWaWRlbzRsaW51eDIgZWxlbWVudHMuCisgICAgPC9wYXJhPgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1pbnRlcmZhY2VzLXhvdmVybGF5Ij4KKyAgICA8dGl0bGU+VGhlIFggT3ZlcmxheSBpbnRlcmZhY2U8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBUaGUgWCBPdmVybGF5IGludGVyZmFjZSB3YXMgY3JlYXRlZCB0byBzb2x2ZSB0aGUgcHJvYmxlbSBvZiBlbWJlZGRpbmcKKyAgICAgIHZpZGVvIHN0cmVhbXMgaW4gYW4gYXBwbGljYXRpb24gd2luZG93LiBUaGUgYXBwbGljYXRpb24gcHJvdmlkZXMgYW4KKyAgICAgIFgtd2luZG93IHRvIHRoZSBlbGVtZW50IGltcGxlbWVudGluZyB0aGlzIGludGVyZmFjZSB0byBkcmF3IG9uLCBhbmQKKyAgICAgIHRoZSBlbGVtZW50IHdpbGwgdGhlbiB1c2UgdGhpcyBYLXdpbmRvdyB0byBkcmF3IG9uIHJhdGhlciB0aGFuIGNyZWF0aW5nCisgICAgICBhIG5ldyB0b3BsZXZlbCB3aW5kb3cuIFRoaXMgaXMgdXNlZnVsIHRvIGVtYmVkIHZpZGVvIGluIHZpZGVvIHBsYXllcnMuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnksIGFtb25nc3Qgb3RoZXJzLCB0aGUgVmlkZW80bGludXggYW5kCisgICAgICBWaWRlbzRsaW51eDIgZWxlbWVudHMgYW5kIGJ5IHhpbWFnZXNpbmssIHh2aW1hZ2VzaW5rIGFuZCBzZGx2aWRlb3NpbmsuCisgICAgPC9wYXJhPgorICA8L3NlY3QxPgorPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvYWR2YW5jZWQtbWV0YWRhdGEueG1sIGIvZG9jcy9tYW51YWwvYWR2YW5jZWQtbWV0YWRhdGEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4Njk1ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL21hbnVhbC9hZHZhbmNlZC1tZXRhZGF0YS54bWwKQEAgLTAsMCArMSwxNzcgQEAKKzxjaGFwdGVyIGlkPSJjaGFwdGVyLW1ldGFkYXRhIj4KKyAgPHRpdGxlPk1ldGFkYXRhPC90aXRsZT4KKworICA8cGFyYT4KKyAgICAmR1N0cmVhbWVyOyBtYWtlcyBhIGNsZWFyIGRpc3RpbmN0aW9uIGJldHdlZW4gdHdvIHR5cGVzIG9mIG1ldGFkYXRhLCBhbmQKKyAgICBoYXMgc3VwcG9ydCBmb3IgYm90aCB0eXBlcy4gVGhlIGZpcnN0IGlzIHN0cmVhbSB0YWdzLCB3aGljaCBkZXNjcmliZSB0aGUKKyAgICBjb250ZW50IG9mIGEgc3RyZWFtIGluIGEgbm9uLXRlY2huaWNhbCB3YXkuIEV4YW1wbGVzIGluY2x1ZGUgdGhlIGF1dGhvcgorICAgIG9mIGEgc29uZywgdGhlIHRpdGxlIG9mIHRoYXQgdmVyeSBzYW1lIHNvbmcgb3IgdGhlIGFsYnVtIGl0IGlzIGEgcGFydCBvZi4KKyAgICBUaGUgb3RoZXIgdHlwZSBvZiBtZXRhZGF0YSBpcyBzdHJlYW0taW5mbywgd2hpY2ggaXMgYSBzb21ld2hhdCB0ZWNobmljYWwKKyAgICBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvcGVydGllcyBvZiBhIHN0cmVhbS4gVGhpcyBjYW4gaW5jbHVkZSB2aWRlbyBzaXplLAorICAgIGF1ZGlvIHNhbXBsZXJhdGUsIGNvZGVjcyB1c2VkIGFuZCBzbyBvbi4gVGFncyBhcmUgaGFuZGxlZCB1c2luZyB0aGUKKyAgICAmR1N0cmVhbWVyOyB0YWdnaW5nIHN5c3RlbS4gU3RyZWFtLWluZm8gY2FuIGJlIHJldHJpZXZlZCBmcm9tIGEKKyAgICA8Y2xhc3NuYW1lPkdzdFBhZDwvY2xhc3NuYW1lPi4KKyAgPC9wYXJhPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi10YWdzLXJlYWQiPgorICAgIDx0aXRsZT5NZXRhZGF0YSByZWFkaW5nPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgU3RyZWFtIGluZm9ybWF0aW9uIGNhbiBtb3N0IGVhc2lseSBiZSByZWFkIGJ5IHJlYWRpbmcgaXQgZnJvbSBhCisgICAgICA8Y2xhc3NuYW1lPkdzdFBhZDwvY2xhc3NuYW1lPi4gVGhpcyBoYXMgYWxyZWFkeSBiZWVuIGRpc2N1c3NlZCBiZWZvcmUKKyAgICAgIGluIDx4cmVmIGxpbmtlbmQ9InNlY3Rpb24tY2Fwcy1tZXRhZGF0YSIvPi4gVGhlcmVmb3JlLCB3ZSB3aWxsIHNraXAKKyAgICAgIGl0IGhlcmUuIE5vdGUgdGhhdCB0aGlzIHJlcXVpcmVzIGFjY2VzcyB0byBhbGwgcGFkcyBvZiB3aGljaCB5b3UKKyAgICAgIHdhbnQgc3RyZWFtIGluZm9ybWF0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgVGFnIHJlYWRpbmcgaXMgZG9uZSB0aHJvdWdoIGEgYnVzIGluICZHU3RyZWFtZXI7LCB3aGljaCBoYXMgYmVlbgorICAgICAgZGlzY3Vzc2VkIHByZXZpb3VzbHkgaW4gPHhyZWYgbGlua2VuZD0iY2hhcHRlci1idXMiLz4uIFlvdSBjYW4KKyAgICAgIGxpc3RlbiBmb3IgPGNsYXNzbmFtZT5HU1RfTUVTU0FHRV9UQUc8L2NsYXNzbmFtZT4gbWVzc2FnZXMgYW5kIGhhbmRsZQorICAgICAgdGhlbSBhcyB5b3Ugd2lzaC4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBOb3RlLCBob3dldmVyLCB0aGF0IHRoZSA8Y2xhc3NuYW1lPkdTVF9NRVNTQUdFX1RBRzwvY2xhc3NuYW1lPgorICAgICAgbWVzc2FnZSBtYXkgYmUgZmlyZWQgbXVsdGlwbGUgdGltZXMgaW4gdGhlIHBpcGVsaW5lLiBJdCBpcyB0aGUKKyAgICAgIGFwcGxpY2F0aW9uJ3MgcmVzcG9uc2liaWxpdHkgdG8gcHV0IGFsbCB0aG9zZSB0YWdzIHRvZ2V0aGVyIGFuZAorICAgICAgZGlzcGxheSB0aGVtIHRvIHRoZSB1c2VyIGluIGEgbmljZSwgY29oZXJlbnQgd2F5LiBVc3VhbGx5LCB1c2luZworICAgICAgPGZ1bmN0aW9uPmdzdF90YWdfbGlzdF9tZXJnZSAoKTwvZnVuY3Rpb24+IGlzIGEgZ29vZCBlbm91Z2ggd2F5CisgICAgICBvZiBkb2luZyB0aGlzOyBtYWtlIHN1cmUgdG8gZW1wdHkgdGhlIGNhY2hlIHdoZW4gbG9hZGluZyBhIG5ldyBzb25nLAorICAgICAgb3IgYWZ0ZXIgZXZlcnkgZmV3IG1pbnV0ZXMgd2hlbiBsaXN0ZW5pbmcgdG8gaW50ZXJuZXQgcmFkaW8uIEFsc28sCisgICAgICBtYWtlIHN1cmUgeW91IHVzZSA8Y2xhc3NuYW1lPkdTVF9UQUdfTUVSR0VfUFJFUEVORDwvY2xhc3NuYW1lPiBhcworICAgICAgbWVyZ2luZyBtb2RlLCBzbyB0aGF0IGEgbmV3IHRpdGxlICh3aGljaCBjYW1lIGluIGxhdGVyKSBoYXMgYQorICAgICAgcHJlZmVyZW5jZSBvdmVyIHRoZSBvbGQgb25lIGZvciBkaXNwbGF5LgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSB3aWxsIGV4dHJhY3QgdGFncyBmcm9tIGEgZmlsZSBhbmQgcHJpbnQgdGhlbToKKyAgICA8L3BhcmE+CisgICAgPHByb2dyYW1saXN0aW5nPgorLyogY29tcGlsZSB3aXRoOgorICogZ2NjIC1vIHRhZ3MgdGFncy5jIGBwa2ctY29uZmlnIC0tY2ZsYWdzIC0tbGlicyBnc3RyZWFtZXItMC4xMGAgKi8KKyNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7CisKK3N0YXRpYyB2b2lkCitwcmludF9vbmVfdGFnIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwgY29uc3QgZ2NoYXIgKiB0YWcsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgaW50IGksIG51bTsKKworICBudW0gPSBnc3RfdGFnX2xpc3RfZ2V0X3RhZ19zaXplIChsaXN0LCB0YWcpOworICBmb3IgKGkgPSAwOyBpICZsdDsgbnVtOyArK2kpIHsKKyAgICBjb25zdCBHVmFsdWUgKnZhbDsKKworICAgIC8qIE5vdGU6IHdoZW4gbG9va2luZyBmb3Igc3BlY2lmaWMgdGFncywgdXNlIHRoZSBnX3RhZ19saXN0X2dldF94eXooKSBBUEksCisgICAgICogd2Ugb25seSB1c2UgdGhlIEdWYWx1ZSBhcHByb2FjaCBoZXJlIGJlY2F1c2UgaXQgaXMgbW9yZSBnZW5lcmljICovCisgICAgdmFsID0gZ3N0X3RhZ19saXN0X2dldF92YWx1ZV9pbmRleCAobGlzdCwgdGFnLCBpKTsKKyAgICBpZiAoR19WQUxVRV9IT0xEU19TVFJJTkcgKHZhbCkpIHsKKyAgICAgIGdfcHJpbnQgKCJcdCUyMHMgOiAlc1xuIiwgdGFnLCBnX3ZhbHVlX2dldF9zdHJpbmcgKHZhbCkpOworICAgIH0gZWxzZSBpZiAoR19WQUxVRV9IT0xEU19VSU5UICh2YWwpKSB7CisgICAgICBnX3ByaW50ICgiXHQlMjBzIDogJXVcbiIsIHRhZywgZ192YWx1ZV9nZXRfdWludCAodmFsKSk7CisgICAgfSBlbHNlIGlmIChHX1ZBTFVFX0hPTERTX0RPVUJMRSAodmFsKSkgeworICAgICAgZ19wcmludCAoIlx0JTIwcyA6ICVnXG4iLCB0YWcsIGdfdmFsdWVfZ2V0X2RvdWJsZSAodmFsKSk7CisgICAgfSBlbHNlIGlmIChHX1ZBTFVFX0hPTERTX0JPT0xFQU4gKHZhbCkpIHsKKyAgICAgIGdfcHJpbnQgKCJcdCUyMHMgOiAlc1xuIiwgdGFnLAorICAgICAgICAgIChnX3ZhbHVlX2dldF9ib29sZWFuICh2YWwpKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworICAgIH0gZWxzZSBpZiAoR1NUX1ZBTFVFX0hPTERTX0JVRkZFUiAodmFsKSkgeworICAgICAgZ19wcmludCAoIlx0JTIwcyA6IGJ1ZmZlciBvZiBzaXplICV1XG4iLCB0YWcsCisgICAgICAgICAgR1NUX0JVRkZFUl9TSVpFIChnc3RfdmFsdWVfZ2V0X2J1ZmZlciAodmFsKSkpOworICAgIH0gZWxzZSBpZiAoR1NUX1ZBTFVFX0hPTERTX0RBVEUgKHZhbCkpIHsKKyAgICAgIGdfcHJpbnQgKCJcdCUyMHMgOiBkYXRlICh5ZWFyPSV1LC4uLilcbiIsIHRhZywKKyAgICAgICAgICBnX2RhdGVfZ2V0X3llYXIgKGdzdF92YWx1ZV9nZXRfZGF0ZSAodmFsKSkpOworICAgIH0gZWxzZSB7CisgICAgICBnX3ByaW50ICgiXHQlMjBzIDogdGFnIG9mIHR5cGUgJyVzJ1xuIiwgdGFnLCBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsKSk7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyB2b2lkCitvbl9uZXdfcGFkIChHc3RFbGVtZW50ICogZGVjLCBHc3RQYWQgKiBwYWQsIEdzdEVsZW1lbnQgKiBmYWtlc2luaykKK3sKKyAgR3N0UGFkICpzaW5rcGFkOworCisgIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZmFrZXNpbmssICJzaW5rIik7CisgIGlmICghZ3N0X3BhZF9pc19saW5rZWQgKHNpbmtwYWQpKSB7CisgICAgaWYgKGdzdF9wYWRfbGluayAocGFkLCBzaW5rcGFkKSAhPSBHU1RfUEFEX0xJTktfT0spCisgICAgICBnX2Vycm9yICgiRmFpbGVkIHRvIGxpbmsgcGFkcyEiKTsKKyAgfQorICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKK30KKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqKiBhcmd2KQoreworICBHc3RFbGVtZW50ICpwaXBlLCAqZGVjLCAqc2luazsKKyAgR3N0TWVzc2FnZSAqbXNnOworCisgIGdzdF9pbml0ICgmYW1wO2FyZ2MsICZhbXA7YXJndik7CisKKyAgaWYgKGFyZ2MgJmx0OyAyIHx8ICFnc3RfdXJpX2lzX3ZhbGlkIChhcmd2WzFdKSkKKyAgICBnX2Vycm9yICgiVXNhZ2U6ICVzIGZpbGU6Ly8vcGF0aC90by9maWxlIiwgYXJndlswXSk7CisKKyAgcGlwZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOworCisgIGRlYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInVyaWRlY29kZWJpbiIsIE5VTEwpOworICBnX29iamVjdF9zZXQgKGRlYywgInVyaSIsIGFyZ3ZbMV0sIE5VTEwpOworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZSksIGRlYyk7CisKKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7CisgIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlKSwgc2luayk7CisKKyAgZ19zaWduYWxfY29ubmVjdCAoZGVjLCAicGFkLWFkZGVkIiwgR19DQUxMQkFDSyAob25fbmV3X3BhZCksIHNpbmspOworCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX1BBVVNFRCk7CisKKyAgd2hpbGUgKFRSVUUpIHsKKyAgICBHc3RUYWdMaXN0ICp0YWdzID0gTlVMTDsKKworICAgIG1zZyA9IGdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkIChHU1RfRUxFTUVOVF9CVVMgKHBpcGUpLAorICAgICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FLAorICAgICAgICBHU1RfTUVTU0FHRV9BU1lOQ19ET05FIHwgR1NUX01FU1NBR0VfVEFHIHwgR1NUX01FU1NBR0VfRVJST1IpOworCisgICAgaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgIT0gR1NUX01FU1NBR0VfVEFHKSAvKiBlcnJvciBvciBhc3luY19kb25lICovCisgICAgICBicmVhazsKKworICAgIGdzdF9tZXNzYWdlX3BhcnNlX3RhZyAobXNnLCAmYW1wO3RhZ3MpOworCisgICAgZ19wcmludCAoIkdvdCB0YWdzIGZyb20gZWxlbWVudCAlczpcbiIsIEdTVF9PQkpFQ1RfTkFNRSAobXNnLSZndDtzcmMpKTsKKyAgICBnc3RfdGFnX2xpc3RfZm9yZWFjaCAodGFncywgcHJpbnRfb25lX3RhZywgTlVMTCk7CisgICAgZ19wcmludCAoIlxuIik7CisgICAgZ3N0X3RhZ19saXN0X2ZyZWUgKHRhZ3MpOworCisgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7CisgIH07CisKKyAgaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfRVJST1IpCisgICAgZ19lcnJvciAoIkdvdCBlcnJvciIpOworCisgIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9OVUxMKTsKKyAgZ3N0X29iamVjdF91bnJlZiAocGlwZSk7CisgIHJldHVybiAwOworfQorICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLXRhZ3Mtd3JpdGUiPgorICAgIDx0aXRsZT5UYWcgd3JpdGluZzwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIFRhZyB3cml0aW5nIGlzIGRvbmUgdXNpbmcgdGhlIDx1bGluayB0eXBlPSJodHRwIgorCXVybD0iJlVSTEFQSTtHc3RUYWdTZXR0ZXIuaHRtbCI+PGNsYXNzbmFtZT5Hc3RUYWdTZXR0ZXI8L2NsYXNzbmFtZT48L3VsaW5rPgorICAgICAgaW50ZXJmYWNlLiBBbGwgdGhhdCdzIHJlcXVpcmVkIGlzIGEgdGFnLXNldC1zdXBwb3J0aW5nIGVsZW1lbnQgaW4KKyAgICAgIHlvdXIgcGlwZWxpbmUuIEluIG9yZGVyIHRvIHNlZSBpZiBhbnkgb2YgdGhlIGVsZW1lbnRzIGluIHlvdXIKKyAgICAgIHBpcGVsaW5lIHN1cHBvcnRzIHRhZyB3cml0aW5nLCB5b3UgY2FuIHVzZSB0aGUgZnVuY3Rpb24KKyAgICAgIDxmdW5jdGlvbj5nc3RfYmluX2l0ZXJhdGVfYWxsX2J5X2ludGVyZmFjZSAocGlwZWxpbmUsCisgICAgICBHU1RfVFlQRV9UQUdfU0VUVEVSKTwvZnVuY3Rpb24+LiBPbiB0aGUgcmVzdWx0aW5nIGVsZW1lbnQsIHVzdWFsbHkKKyAgICAgIGFuIGVuY29kZXIgb3IgbXV4ZXIsIHlvdSBjYW4gdXNlIDxmdW5jdGlvbj5nc3RfdGFnX3NldHRlcl9tZXJnZQorICAgICAgKCk8L2Z1bmN0aW9uPiAod2l0aCBhIHRhZ2xpc3QpIG9yIDxmdW5jdGlvbj5nc3RfdGFnX3NldHRlcl9hZGQKKyAgICAgICgpPC9mdW5jdGlvbj4gKHdpdGggaW5kaXZpZHVhbCB0YWdzKSB0byBzZXQgdGFncyBvbiBpdC4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBBIG5pY2UgZXh0cmEgZmVhdHVyZSBpbiAmR1N0cmVhbWVyOyB0YWcgc3VwcG9ydCBpcyB0aGF0IHRhZ3MgYXJlCisgICAgICBwcmVzZXJ2ZWQgaW4gcGlwZWxpbmVzLiBUaGlzIG1lYW5zIHRoYXQgaWYgeW91IHRyYW5zY29kZSBvbmUgZmlsZQorICAgICAgY29udGFpbmluZyB0YWdzIGludG8gYW5vdGhlciBtZWRpYSB0eXBlLCBhbmQgdGhhdCBuZXcgbWVkaWEgdHlwZQorICAgICAgc3VwcG9ydHMgdGFncyB0b28sIHRoZW4gdGhlIHRhZ3Mgd2lsbCBiZSBoYW5kbGVkIGFzIHBhcnQgb2YgdGhlCisgICAgICBkYXRhIHN0cmVhbSBhbmQgYmUgbWVyZ2VkIGludG8gdGhlIG5ld2x5IHdyaXR0ZW4gbWVkaWEgZmlsZSwgdG9vLgorICAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2FkdmFuY2VkLXBvc2l0aW9uLnhtbCBiL2RvY3MvbWFudWFsL2FkdmFuY2VkLXBvc2l0aW9uLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzg2MzM5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9tYW51YWwvYWR2YW5jZWQtcG9zaXRpb24ueG1sCkBAIC0wLDAgKzEsMjM1IEBACis8Y2hhcHRlciBpZD0iY2hhcHRlci1xdWVyeWV2ZW50cyI+CisgIDx0aXRsZT5Qb3NpdGlvbiB0cmFja2luZyBhbmQgc2Vla2luZzwvdGl0bGU+CisKKyAgPHBhcmE+CisgICAgU28gZmFyLCB3ZSd2ZSBsb29rZWQgYXQgaG93IHRvIGNyZWF0ZSBhIHBpcGVsaW5lIHRvIGRvIG1lZGlhIHByb2Nlc3NpbmcKKyAgICBhbmQgaG93IHRvIG1ha2UgaXQgcnVuLiBNb3N0IGFwcGxpY2F0aW9uIGRldmVsb3BlcnMgd2lsbCBiZSBpbnRlcmVzdGVkCisgICAgaW4gcHJvdmlkaW5nIGZlZWRiYWNrIHRvIHRoZSB1c2VyIG9uIG1lZGlhIHByb2dyZXNzLiBNZWRpYSBwbGF5ZXJzLCBmb3IKKyAgICBleGFtcGxlLCB3aWxsIHdhbnQgdG8gc2hvdyBhIHNsaWRlciBzaG93aW5nIHRoZSBwcm9ncmVzcyBpbiB0aGUgc29uZywKKyAgICBhbmQgdXN1YWxseSBhbHNvIGEgbGFiZWwgaW5kaWNhdGluZyBzdHJlYW0gbGVuZ3RoLiBUcmFuc2NvZGluZworICAgIGFwcGxpY2F0aW9ucyB3aWxsIHdhbnQgdG8gc2hvdyBhIHByb2dyZXNzIGJhciBvbiBob3cgbXVjaCBwZXJjZW50IG9mCisgICAgdGhlIHRhc2sgaXMgZG9uZS4gJkdTdHJlYW1lcjsgaGFzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIGRvaW5nIGFsbCB0aGlzCisgICAgdXNpbmcgYSBjb25jZXB0IGtub3duIGFzIDxlbXBoYXNpcz5xdWVyeWluZzwvZW1waGFzaXM+LiBTaW5jZSBzZWVraW5nCisgICAgaXMgdmVyeSBzaW1pbGFyLCBpdCB3aWxsIGJlIGRpc2N1c3NlZCBoZXJlIGFzIHdlbGwuIFNlZWtpbmcgaXMgZG9uZQorICAgIHVzaW5nIHRoZSBjb25jZXB0IG9mIDxlbXBoYXNpcz5ldmVudHM8L2VtcGhhc2lzPi4KKyAgPC9wYXJhPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1xdWVyeWluZyI+CisgICAgPHRpdGxlPlF1ZXJ5aW5nOiBnZXR0aW5nIHRoZSBwb3NpdGlvbiBvciBsZW5ndGggb2YgYSBzdHJlYW08L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBRdWVyeWluZyBpcyBkZWZpbmVkIGFzIHJlcXVlc3RpbmcgYSBzcGVjaWZpYyBzdHJlYW0gcHJvcGVydHkgcmVsYXRlZAorICAgICAgdG8gcHJvZ3Jlc3MgdHJhY2tpbmcuIFRoaXMgaW5jbHVkZXMgZ2V0dGluZyB0aGUgbGVuZ3RoIG9mIGEgc3RyZWFtIChpZgorICAgICAgYXZhaWxhYmxlKSBvciBnZXR0aW5nIHRoZSBjdXJyZW50IHBvc2l0aW9uLiBUaG9zZSBzdHJlYW0gcHJvcGVydGllcworICAgICAgY2FuIGJlIHJldHJpZXZlZCBpbiB2YXJpb3VzIGZvcm1hdHMgc3VjaCBhcyB0aW1lLCBhdWRpbyBzYW1wbGVzLCB2aWRlbworICAgICAgZnJhbWVzIG9yIGJ5dGVzLiBUaGUgZnVuY3Rpb24gbW9zdCBjb21tb25seSB1c2VkIGZvciB0aGlzIGlzCisgICAgICA8ZnVuY3Rpb24+Z3N0X2VsZW1lbnRfcXVlcnkgKCk8L2Z1bmN0aW9uPiwgYWx0aG91Z2ggc29tZSBjb252ZW5pZW5jZQorICAgICAgd3JhcHBlcnMgYXJlIHByb3ZpZGVkIGFzIHdlbGwgKHN1Y2ggYXMKKyAgICAgIDxmdW5jdGlvbj5nc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbiAoKTwvZnVuY3Rpb24+IGFuZAorICAgICAgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uICgpPC9mdW5jdGlvbj4pLiBZb3UgY2FuIGdlbmVyYWxseQorICAgICAgcXVlcnkgdGhlIHBpcGVsaW5lIGRpcmVjdGx5LCBhbmQgaXQnbGwgZmlndXJlIG91dCB0aGUgaW50ZXJuYWwgZGV0YWlscworICAgICAgZm9yIHlvdSwgbGlrZSB3aGljaCBlbGVtZW50IHRvIHF1ZXJ5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgSW50ZXJuYWxseSwgcXVlcmllcyB3aWxsIGJlIHNlbnQgdG8gdGhlIHNpbmtzLCBhbmQKKyAgICAgIDxxdW90ZT5kaXNwYXRjaGVkPC9xdW90ZT4gYmFja3dhcmRzIHVudGlsIG9uZSBlbGVtZW50IGNhbiBoYW5kbGUgaXQ7CisgICAgICB0aGF0IHJlc3VsdCB3aWxsIGJlIHNlbnQgYmFjayB0byB0aGUgZnVuY3Rpb24gY2FsbGVyLiBVc3VhbGx5LCB0aGF0CisgICAgICBpcyB0aGUgZGVtdXhlciwgYWx0aG91Z2ggd2l0aCBsaXZlIHNvdXJjZXMgKGZyb20gYSB3ZWJjYW0pLCBpdCBpcyB0aGUKKyAgICAgIHNvdXJjZSBpdHNlbGYuCisgICAgPC9wYXJhPgorCisgICAgPHByb2dyYW1saXN0aW5nPgorPCEtLSBleGFtcGxlLWJlZ2luIHF1ZXJ5LmMgYSAtLT4KKyNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Cis8IS0tIGV4YW1wbGUtZW5kIHF1ZXJ5LmMgYSAtLT4KKzwhLS0gZXhhbXBsZS1iZWdpbiBxdWVyeS5jIGIgLS0+PCEtLQorc3RhdGljIHZvaWQKK215X2J1c19tZXNzYWdlX2NiIChHc3RCdXMgICAgICpidXMsCisgICAgICAgICAgICAgICAgICAgR3N0TWVzc2FnZSAqbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICBkYXRhKQoreworICBHTWFpbkxvb3AgKmxvb3AgPSAoR01haW5Mb29wICopIGRhdGE7CisKKyAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSkgeworICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6IHsKKyAgICAgIEdFcnJvciAqZXJyOworICAgICAgZ2NoYXIgKmRlYnVnOworCisgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobWVzc2FnZSwgJmFtcDtlcnIsICZhbXA7ZGVidWcpOworICAgICAgZ19wcmludCAoIkVycm9yOiAlc1xuIiwgZXJyLSZndDttZXNzYWdlKTsKKyAgICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKKyAgICAgIGdfZnJlZSAoZGVidWcpOworCisgICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKKyAgICAgIC8qIGVuZC1vZi1zdHJlYW0gKi8KKyAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9Cit9CistLT4KKzwhLS0gZXhhbXBsZS1lbmQgcXVlcnkuYyBiIC0tPgorPCEtLSBleGFtcGxlLWJlZ2luIHF1ZXJ5LmMgYyAtLT4KK3N0YXRpYyBnYm9vbGVhbgorY2JfcHJpbnRfcG9zaXRpb24gKEdzdEVsZW1lbnQgKnBpcGVsaW5lKQoreworICBnaW50NjQgcG9zLCBsZW47CisKKyAgaWYgKGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uIChwaXBlbGluZSwgR1NUX0ZPUk1BVF9USU1FLCAmYW1wO3BvcykKKyAgICAmYW1wOyZhbXA7IGdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uIChwaXBlbGluZSwgR1NUX0ZPUk1BVF9USU1FLCAmYW1wO2xlbikpIHsKKyAgICBnX3ByaW50ICgiVGltZTogJSIgR1NUX1RJTUVfRk9STUFUICIgLyAlIiBHU1RfVElNRV9GT1JNQVQgIlxyIiwKKwkgICAgIEdTVF9USU1FX0FSR1MgKHBvcyksIEdTVF9USU1FX0FSR1MgKGxlbikpOworICB9CisKKyAgLyogY2FsbCBtZSBhZ2FpbiAqLworICByZXR1cm4gVFJVRTsKK30KKworZ2ludAorbWFpbiAoZ2ludCAgIGFyZ2MsCisgICAgICBnY2hhciAqYXJndltdKQoreworICBHc3RFbGVtZW50ICpwaXBlbGluZTsKKzwhLS0gZXhhbXBsZS1lbmQgcXVlcnkuYyBjIC0tPgorWy4uXTwhLS0gZXhhbXBsZS1iZWdpbiBxdWVyeS5jIGQgLS0+PCEtLQorICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7CisgIEdNYWluTG9vcCAqbG9vcDsKKyAgR0Vycm9yICplcnIgPSBOVUxMOworICBHc3RCdXMgKmJ1czsKKyAgZ2NoYXIgKmw7CisKKyAgLyogaW5pdCAqLworICBnc3RfaW5pdCAoJmFtcDthcmdjLCAmYW1wO2FyZ3YpOworCisgIC8qIGFyZ3MgKi8KKyAgaWYgKGFyZ2MgIT0gMikgeworICAgIGdfcHJpbnQgKCJVc2FnZTogJXMgJmx0O2ZpbGVuYW1lJmd0O1xuIiwgYXJndlswXSk7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOworCisgIC8qIGJ1aWxkIHBpcGVsaW5lLCB0aGUgZWFzeSB3YXkgKi8KKyAgbCA9IGdfc3RyZHVwX3ByaW50ZiAoImZpbGVzcmMgbG9jYXRpb249XCIlc1wiICEgb2dnZGVtdXggISB2b3JiaXNkZWMgISAiCisJCSAgICAgICAiYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSAhIGFsc2FzaW5rIiwKKwkJICAgICAgIGFyZ3ZbMV0pOworICBwaXBlbGluZSA9IGdzdF9wYXJzZV9sYXVuY2ggKGwsICZhbXA7ZXJyKTsKKyAgaWYgKHBpcGVsaW5lID09IE5VTEwgfHwgZXJyICE9IE5VTEwpIHsKKyAgICBnX3ByaW50ZXJyICgiQ2Fubm90IGJ1aWxkIHBpcGVsaW5lOiAlc1xuIiwgZXJyLT5tZXNzYWdlKTsKKyAgICBnX2Vycm9yX2ZyZWUgKGVycik7CisgICAgZ19mcmVlIChsKTsKKyAgICBpZiAocGlwZWxpbmUpCisgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7CisgICAgcmV0dXJuIC0xOworICB9CisgIGdfZnJlZSAobCk7CisKKyAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKEdTVF9QSVBFTElORSAocGlwZWxpbmUpKTsKKyAgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoIChidXMpOworICBnX3NpZ25hbF9jb25uZWN0IChidXMsICJtZXNzYWdlIiwgR19DQUxMQkFDSyAobXlfYnVzX21lc3NhZ2VfY2IpLCBsb29wKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKKworICAvKiBwbGF5ICovCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpCisgICAgZ19lcnJvciAoIkZhaWxlZCB0byBzZXQgcGlwZWxpbmUgdG8gUExBWUlORy5cbiIpOworLS0+PCEtLSBleGFtcGxlLWVuZCBxdWVyeS5jIGQgLS0+Cis8IS0tIGV4YW1wbGUtYmVnaW4gcXVlcnkuYyBlIC0tPgorICAvKiBydW4gcGlwZWxpbmUgKi8KKyAgZ190aW1lb3V0X2FkZCAoMjAwLCAoR1NvdXJjZUZ1bmMpIGNiX3ByaW50X3Bvc2l0aW9uLCBwaXBlbGluZSk7CisgIGdfbWFpbl9sb29wX3J1biAobG9vcCk7Cis8IS0tIGV4YW1wbGUtZW5kIHF1ZXJ5LmMgZSAtLT4KK1suLl08IS0tIGV4YW1wbGUtYmVnaW4gcXVlcnkuYyBmIC0tPjwhLS0KKyAgLyogY2xlYW4gdXAgKi8KKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOworICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChwaXBlbGluZSkpOworCisgIHJldHVybiAwOworLS0+PCEtLSBleGFtcGxlLWVuZCBxdWVyeS5jIGYgLS0+Cis8IS0tIGV4YW1wbGUtYmVnaW4gcXVlcnkuYyBnIC0tPgorfQorICAgIDwhLS0gZXhhbXBsZS1lbmQgcXVlcnkuYyBnIC0tPjwvcHJvZ3JhbWxpc3Rpbmc+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWV2ZW50c3NlZWsiPgorICAgIDx0aXRsZT5FdmVudHM6IHNlZWtpbmcgKGFuZCBtb3JlKTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIEV2ZW50cyB3b3JrIGluIGEgdmVyeSBzaW1pbGFyIHdheSBhcyBxdWVyaWVzLiBEaXNwYXRjaGluZywgZm9yCisgICAgICBleGFtcGxlLCB3b3JrcyBleGFjdGx5IHRoZSBzYW1lIGZvciBldmVudHMgKGFuZCBhbHNvIGhhcyB0aGUgc2FtZQorICAgICAgbGltaXRhdGlvbnMpLCBhbmQgdGhleSBjYW4gc2ltaWxhcmx5IGJlIHNlbnQgdG8gdGhlIHRvcGxldmVsIHBpcGVsaW5lCisgICAgICBhbmQgaXQgd2lsbCBmaWd1cmUgb3V0IGV2ZXJ5dGhpbmcgZm9yIHlvdS4gQWx0aG91Z2ggdGhlcmUgYXJlIG1vcmUKKyAgICAgIHdheXMgaW4gd2hpY2ggYXBwbGljYXRpb25zIGFuZCBlbGVtZW50cyBjYW4gaW50ZXJhY3QgdXNpbmcgZXZlbnRzLAorICAgICAgd2Ugd2lsbCBvbmx5IGZvY3VzIG9uIHNlZWtpbmcgaGVyZS4gVGhpcyBpcyBkb25lIHVzaW5nIHRoZSBzZWVrLWV2ZW50LgorICAgICAgQSBzZWVrLWV2ZW50IGNvbnRhaW5zIGEgcGxheWJhY2sgcmF0ZSwgYSBzZWVrIG9mZnNldCBmb3JtYXQgKHdoaWNoIGlzCisgICAgICB0aGUgdW5pdCBvZiB0aGUgb2Zmc2V0cyB0byBmb2xsb3csIGUuZy4gdGltZSwgYXVkaW8gc2FtcGxlcywgdmlkZW8KKyAgICAgIGZyYW1lcyBvciBieXRlcyksIG9wdGlvbmFsbHkgYSBzZXQgb2Ygc2Vla2luZy1yZWxhdGVkIGZsYWdzIChlLmcuCisgICAgICB3aGV0aGVyIGludGVybmFsIGJ1ZmZlcnMgc2hvdWxkIGJlIGZsdXNoZWQpLCBhIHNlZWsgbWV0aG9kICh3aGljaAorICAgICAgaW5kaWNhdGVzIHJlbGF0aXZlIHRvIHdoYXQgdGhlIG9mZnNldCB3YXMgZ2l2ZW4pLCBhbmQgc2VlayBvZmZzZXRzLgorICAgICAgVGhlIGZpcnN0IG9mZnNldCAoY3VyKSBpcyB0aGUgbmV3IHBvc2l0aW9uIHRvIHNlZWsgdG8sIHdoaWxlCisgICAgICB0aGUgc2Vjb25kIG9mZnNldCAoc3RvcCkgaXMgb3B0aW9uYWwgYW5kIHNwZWNpZmllcyBhIHBvc2l0aW9uIHdoZXJlCisgICAgICBzdHJlYW1pbmcgaXMgc3VwcG9zZWQgdG8gc3RvcC4gVXN1YWxseSBpdCBpcyBmaW5lIHRvIGp1c3Qgc3BlY2lmeQorICAgICAgR1NUX1NFRUtfVFlQRV9OT05FIGFuZCAtMSBhcyBlbmRfbWV0aG9kIGFuZCBlbmQgb2Zmc2V0LiBUaGUgYmVoYXZpb3VyCisgICAgICBvZiBhIHNlZWsgaXMgYWxzbyB3cmFwcGVkIGluIHRoZSA8ZnVuY3Rpb24+Z3N0X2VsZW1lbnRfc2VlayAoKTwvZnVuY3Rpb24+LgorICAgIDwvcGFyYT4KKworICAgIDxwcm9ncmFtbGlzdGluZz4KK3N0YXRpYyB2b2lkCitzZWVrX3RvX3RpbWUgKEdzdEVsZW1lbnQgKnBpcGVsaW5lLAorCSAgICAgIGdpbnQ2NCAgICAgIHRpbWVfbmFub3NlY29uZHMpCit7CisgIGlmICghZ3N0X2VsZW1lbnRfc2VlayAocGlwZWxpbmUsIDEuMCwgR1NUX0ZPUk1BVF9USU1FLCBHU1RfU0VFS19GTEFHX0ZMVVNILAorICAgICAgICAgICAgICAgICAgICAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCB0aW1lX25hbm9zZWNvbmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEdTVF9TRUVLX1RZUEVfTk9ORSwgR1NUX0NMT0NLX1RJTUVfTk9ORSkpIHsKKyAgICBnX3ByaW50ICgiU2VlayBmYWlsZWQhXG4iKTsKKyAgfQorfQorICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+CisgICAgICBTZWVrcyB3aXRoIHRoZSBHU1RfU0VFS19GTEFHX0ZMVVNIIHNob3VsZCBiZSBkb25lIHdoZW4gdGhlIHBpcGVsaW5lIGlzCisgICAgICBpbiBQQVVTRUQgb3IgUExBWUlORyBzdGF0ZS4gVGhlIHBpcGVsaW5lIHdpbGwgYXV0b21hdGljYWxseSBnbyB0byBwcmVyb2xsCisgICAgICBzdGF0ZSB1bnRpbCB0aGUgbmV3IGRhdGEgYWZ0ZXIgdGhlIHNlZWsgd2lsbCBjYXVzZSB0aGUgcGlwZWxpbmUgdG8gcHJlcm9sbAorICAgICAgYWdhaW4uIEFmdGVyIHRoZSBwaXBlbGluZSBpcyBwcmVyb2xsZWQsIGl0IHdpbGwgZ28gYmFjayB0byB0aGUgc3RhdGUKKyAgICAgIChQQVVTRUQgb3IgUExBWUlORykgaXQgd2FzIGluIHdoZW4gdGhlIHNlZWsgd2FzIGV4ZWN1dGVkLiBZb3UgY2FuIHdhaXQKKyAgICAgIChibG9ja2luZykgZm9yIHRoZSBzZWVrIHRvIGNvbXBsZXRlIHdpdGgKKyAgICAgIDxmdW5jdGlvbj5nc3RfZWxlbWVudF9nZXRfc3RhdGUoKTwvZnVuY3Rpb24+IG9yIGJ5IHdhaXRpbmcgZm9yIHRoZQorICAgICAgQVNZTkNfRE9ORSBtZXNzYWdlIHRvIGFwcGVhciBvbiB0aGUgYnVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgU2Vla3Mgd2l0aG91dCB0aGUgR1NUX1NFRUtfRkxBR19GTFVTSCBzaG91bGQgb25seSBiZSBkb25lIHdoZW4gdGhlCisgICAgICBwaXBlbGluZSBpcyBpbiB0aGUgUExBWUlORyBzdGF0ZS4gRXhlY3V0aW5nIGEgbm9uLWZsdXNoaW5nIHNlZWsgaW4gdGhlCisgICAgICBQQVVTRUQgc3RhdGUgbWlnaHQgZGVhZGxvY2sgYmVjYXVzZSB0aGUgcGlwZWxpbmUgc3RyZWFtaW5nIHRocmVhZHMgbWlnaHQKKyAgICAgIGJlIGJsb2NrZWQgaW4gdGhlIHNpbmtzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIHJlYWxpc2UgdGhhdCBzZWVrcyB3aWxsIG5vdCBoYXBwZW4gaW5zdGFudGx5IGluIHRoZQorICAgICAgc2Vuc2UgdGhhdCB0aGV5IGFyZSBmaW5pc2hlZCB3aGVuIHRoZSBmdW5jdGlvbgorICAgICAgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X3NlZWsgKCk8L2Z1bmN0aW9uPiByZXR1cm5zLiBEZXBlbmRpbmcgb24gdGhlCisgICAgICBzcGVjaWZpYyBlbGVtZW50cyBpbnZvbHZlZCwgdGhlIGFjdHVhbCBzZWVraW5nIG1pZ2h0IGJlIGRvbmUgbGF0ZXIgaW4KKyAgICAgIGFub3RoZXIgdGhyZWFkICh0aGUgc3RyZWFtaW5nIHRocmVhZCksIGFuZCBpdCBtaWdodCB0YWtlIGEgc2hvcnQgdGltZQorICAgICAgdW50aWwgYnVmZmVycyBmcm9tIHRoZSBuZXcgc2VlayBwb3NpdGlvbiB3aWxsIHJlYWNoIGRvd25zdHJlYW0gZWxlbWVudHMKKyAgICAgIHN1Y2ggYXMgc2lua3MgKGlmIHRoZSBzZWVrIHdhcyBub24tZmx1c2hpbmcgdGhlbiBpdCBtaWdodCB0YWtlIGEgYml0CisgICAgICBsb25nZXIpLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgSXQgaXMgcG9zc2libGUgdG8gZG8gbXVsdGlwbGUgc2Vla3MgaW4gc2hvcnQgdGltZS1pbnRlcnZhbHMsIHN1Y2ggYXMKKyAgICAgIGEgZGlyZWN0IHJlc3BvbnNlIHRvIHNsaWRlciBtb3ZlbWVudC4gQWZ0ZXIgYSBzZWVrLCBpbnRlcm5hbGx5LCB0aGUKKyAgICAgIHBpcGVsaW5lIHdpbGwgYmUgcGF1c2VkIChpZiBpdCB3YXMgcGxheWluZyksIHRoZSBwb3NpdGlvbiB3aWxsIGJlCisgICAgICByZS1zZXQgaW50ZXJuYWxseSwgdGhlIGRlbXV4ZXJzIGFuZCBkZWNvZGVycyB3aWxsIGRlY29kZSBmcm9tIHRoZSBuZXcKKyAgICAgIHBvc2l0aW9uIG9ud2FyZHMgYW5kIHRoaXMgd2lsbCBjb250aW51ZSB1bnRpbCBhbGwgc2lua3MgaGF2ZSBkYXRhCisgICAgICBhZ2Fpbi4gSWYgaXQgd2FzIHBsYXlpbmcgb3JpZ2luYWxseSwgaXQgd2lsbCBiZSBzZXQgdG8gcGxheWluZyBhZ2FpbiwKKyAgICAgIHRvby4gU2luY2UgdGhlIG5ldyBwb3NpdGlvbiBpcyBpbW1lZGlhdGVseSBhdmFpbGFibGUgaW4gYSB2aWRlbyBvdXRwdXQsCisgICAgICB5b3Ugd2lsbCBzZWUgdGhlIG5ldyBmcmFtZSwgZXZlbiBpZiB5b3VyIHBpcGVsaW5lIGlzIG5vdCBpbiB0aGUgcGxheWluZworICAgICAgc3RhdGUuCisgICAgPC9wYXJhPgorICA8L3NlY3QxPgorPC9jaGFwdGVyPgorCmRpZmYgLS1naXQgYS9kb2NzL21hbnVhbC9hZHZhbmNlZC10aHJlYWRzLnhtbCBiL2RvY3MvbWFudWFsL2FkdmFuY2VkLXRocmVhZHMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxODYwNmUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL21hbnVhbC9hZHZhbmNlZC10aHJlYWRzLnhtbApAQCAtMCwwICsxLDEwMCBAQAorPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItdGhyZWFkcyI+CisgIDx0aXRsZT5UaHJlYWRzPC90aXRsZT4KKyAgPHBhcmE+IAorICAgICZHU3RyZWFtZXI7IGlzIGluaGVyZW50bHkgbXVsdGktdGhyZWFkZWQsIGFuZCBpcyBmdWxseSB0aHJlYWQtc2FmZS4KKyAgICBNb3N0IHRocmVhZGluZyBpbnRlcm5hbHMgYXJlIGhpZGRlbiBmcm9tIHRoZSBhcHBsaWNhdGlvbiwgd2hpY2ggc2hvdWxkCisgICAgbWFrZSBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCBlYXNpZXIuIEhvd2V2ZXIsIGluIHNvbWUgY2FzZXMsIGFwcGxpY2F0aW9ucworICAgIG1heSB3YW50IHRvIGhhdmUgaW5mbHVlbmNlIG9uIHNvbWUgcGFydHMgb2YgdGhvc2UuICZHU3RyZWFtZXI7IGFsbG93cworICAgIGFwcGxpY2F0aW9ucyB0byBmb3JjZSB0aGUgdXNlIG9mIG11bHRpcGxlIHRocmVhZHMgb3ZlciBzb21lIHBhcnRzIG9mCisgICAgYSBwaXBlbGluZS4KKyAgPC9wYXJhPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi10aHJlYWRzLXVzZXMiPgorICAgIDx0aXRsZT5XaGVuIHdvdWxkIHlvdSB3YW50IHRvIGZvcmNlIGEgdGhyZWFkPzwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBUaGVyZSBhcmUgc2V2ZXJhbCByZWFzb25zIHRvIGZvcmNlIHRoZSB1c2Ugb2YgdGhyZWFkcy4gSG93ZXZlciwKKyAgICAgIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLCB5b3UgbmV2ZXIgd2FudCB0byB1c2Ugb25lIHRocmVhZCBmb3IgZXZlcnkKKyAgICAgIGVsZW1lbnQgb3V0IHRoZXJlLCBzaW5jZSB0aGF0IHdpbGwgY3JlYXRlIHNvbWUgb3ZlcmhlYWQuCisgICAgICBMZXQncyBub3cgbGlzdCBzb21lIHNpdHVhdGlvbnMgd2hlcmUgdGhyZWFkcyBjYW4gYmUgcGFydGljdWxhcmx5CisgICAgICB1c2VmdWw6CisgICAgPC9wYXJhPgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIERhdGEgYnVmZmVyaW5nLCBmb3IgZXhhbXBsZSB3aGVuIGRlYWxpbmcgd2l0aCBuZXR3b3JrIHN0cmVhbXMgb3IKKyAgICAgICAgICB3aGVuIHJlY29yZGluZyBkYXRhIGZyb20gYSBsaXZlIHN0cmVhbSBzdWNoIGFzIGEgdmlkZW8gb3IgYXVkaW8KKyAgICAgICAgICBjYXJkLiBTaG9ydCBoaWNrdXBzIGVsc2V3aGVyZSBpbiB0aGUgcGlwZWxpbmUgd2lsbCBub3QgY2F1c2UgZGF0YQorICAgICAgICAgIGxvc3MuCisgICAgICAgIDwvcGFyYT4KKwk8ZmlndXJlIGZsb2F0PSIxIiBpZD0ic2VjdGlvbi10aHJlYWQtYnVmZmVyaW5nLWltZyI+CisJICA8dGl0bGU+RGF0YSBidWZmZXJpbmcsIGZyb20gYSBuZXR3b3JrZWQgc291cmNlPC90aXRsZT4KKwkgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgICAgIDxpbWFnZW9iamVjdD4KKyAgICAgICAgICAgICAgPGltYWdlZGF0YSBzY2FsZT0iNzUiIGZpbGVyZWY9ImltYWdlcy90aHJlYWQtYnVmZmVyaW5nLiZpbWFnZTsiIGZvcm1hdD0iJklNQUdFOyIvPgorICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KKwkgIDwvbWVkaWFvYmplY3Q+CisJPC9maWd1cmU+CisKKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFN5bmNocm9uaXppbmcgb3V0cHV0IGRldmljZXMsIGUuZy4gd2hlbiBwbGF5aW5nIGEgc3RyZWFtIGNvbnRhaW5pbmcKKyAgICAgICAgICBib3RoIHZpZGVvIGFuZCBhdWRpbyBkYXRhLiBCeSB1c2luZyB0aHJlYWRzIGZvciBib3RoIG91dHB1dHMsIHRoZXkKKyAgICAgICAgICB3aWxsIHJ1biBpbmRlcGVuZGVudGx5IGFuZCB0aGVpciBzeW5jaHJvbml6YXRpb24gd2lsbCBiZSBiZXR0ZXIuCisgICAgICAgIDwvcGFyYT4KKwk8ZmlndXJlIGZsb2F0PSIxIiBpZD0ic2VjdGlvbi10aHJlYWQtc3luY2hyb25pemluZy1pbWciPgorCSAgPHRpdGxlPlN5bmNocm9uaXppbmcgYXVkaW8gYW5kIHZpZGVvIHNpbmtzPC90aXRsZT4KKwkgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgICAgIDxpbWFnZW9iamVjdD4KKyAgICAgICAgICAgICAgPGltYWdlZGF0YSBzY2FsZT0iNzUiIGZpbGVyZWY9ImltYWdlcy90aHJlYWQtc3luY2hyb25pemluZy4maW1hZ2U7IiBmb3JtYXQ9IiZJTUFHRTsiLz4KKyAgICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+CisJICA8L21lZGlhb2JqZWN0PgorCTwvZmlndXJlPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKworCisgICAgPHBhcmE+CisgICAgICBBYm92ZSwgd2UndmUgbWVudGlvbmVkIHRoZSA8cXVvdGU+cXVldWU8L3F1b3RlPiBlbGVtZW50IHNldmVyYWwgdGltZXMKKyAgICAgIG5vdy4gQSBxdWV1ZSBpcyB0aGUgdGhyZWFkIGJvdW5kYXJ5IGVsZW1lbnQgdGhyb3VnaCB3aGljaCB5b3UgY2FuCisgICAgICBmb3JjZSB0aGUgdXNlIG9mIHRocmVhZHMuIEl0IGRvZXMgc28gYnkgdXNpbmcgYSBjbGFzc2ljCisgICAgICBwcm92aWRlci9yZWNlaXZlciBtb2RlbCBhcyBsZWFybmVkIGluIHRocmVhZGluZyBjbGFzc2VzIGF0CisgICAgICB1bml2ZXJzaXRpZXMgYWxsIGFyb3VuZCB0aGUgd29ybGQuIEJ5IGRvaW5nIHRoaXMsIGl0IGFjdHMgYm90aCBhcyBhCisgICAgICBtZWFucyB0byBtYWtlIGRhdGEgdGhyb3VnaHB1dCBiZXR3ZWVuIHRocmVhZHMgdGhyZWFkc2FmZSwgYW5kIGl0IGNhbgorICAgICAgYWxzbyBhY3QgYXMgYSBidWZmZXIuIFF1ZXVlcyBoYXZlIHNldmVyYWwgPGNsYXNzbmFtZT5HT2JqZWN0PC9jbGFzc25hbWU+CisgICAgICBwcm9wZXJ0aWVzIHRvIGJlIGNvbmZpZ3VyZWQgZm9yIHNwZWNpZmljIHVzZXMuIEZvciBleGFtcGxlLCB5b3UgY2FuIHNldAorICAgICAgbG93ZXIgYW5kIHVwcGVyIHRocmVzaG9sZHMgZm9yIHRoZSBlbGVtZW50LiBJZiB0aGVyZSdzIGxlc3MgZGF0YSB0aGFuCisgICAgICB0aGUgbG93ZXIgdGhyZXNob2xkIChkZWZhdWx0OiBkaXNhYmxlZCksIGl0IHdpbGwgYmxvY2sgb3V0cHV0LiBJZgorICAgICAgdGhlcmUncyBtb3JlIGRhdGEgdGhhbiB0aGUgdXBwZXIgdGhyZXNob2xkLCBpdCB3aWxsIGJsb2NrIGlucHV0IG9yCisgICAgICAoaWYgY29uZmlndXJlZCB0byBkbyBzbykgZHJvcCBkYXRhLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFRvIHVzZSBhIHF1ZXVlIChhbmQgdGhlcmVmb3JlIGZvcmNlIHRoZSB1c2Ugb2YgdHdvIGRpc3RpbmN0IHRocmVhZHMKKyAgICAgIGluIHRoZSBwaXBlbGluZSksIG9uZSBjYW4gc2ltcGx5IGNyZWF0ZSBhIDxxdW90ZT5xdWV1ZTwvcXVvdGU+IGVsZW1lbnQKKyAgICAgIGFuZCBwdXQgdGhpcyBpbiBhcyBwYXJ0IG9mIHRoZSBwaXBlbGluZS4gJkdTdHJlYW1lcjsgd2lsbCB0YWtlIGNhcmUgb2YKKyAgICAgIGFsbCB0aHJlYWRpbmcgZGV0YWlscyBpbnRlcm5hbGx5LgorICAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tdGhyZWFkcy1zY2hlZHVsaW5nIj4KKyAgICA8dGl0bGU+U2NoZWR1bGluZyBpbiAmR1N0cmVhbWVyOzwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIFNjaGVkdWxpbmcgb2YgcGlwZWxpbmVzIGluICZHU3RyZWFtZXI7IGlzIGRvbmUgYnkgdXNpbmcgYSB0aHJlYWQgZm9yCisgICAgICBlYWNoIDxxdW90ZT5ncm91cDwvcXVvdGU+LCB3aGVyZSBhIGdyb3VwIGlzIGEgc2V0IG9mIGVsZW1lbnRzIHNlcGFyYXRlZAorICAgICAgYnkgPHF1b3RlPnF1ZXVlPC9xdW90ZT4gZWxlbWVudHMuIFdpdGhpbiBzdWNoIGEgZ3JvdXAsIHNjaGVkdWxpbmcgaXMKKyAgICAgIGVpdGhlciBwdXNoLWJhc2VkIG9yIHB1bGwtYmFzZWQsIGRlcGVuZGluZyBvbiB3aGljaCBtb2RlIGlzIHN1cHBvcnRlZAorICAgICAgYnkgdGhlIHBhcnRpY3VsYXIgZWxlbWVudC4gSWYgZWxlbWVudHMgc3VwcG9ydCByYW5kb20gYWNjZXNzIHRvIGRhdGEsCisgICAgICBzdWNoIGFzIGZpbGUgc291cmNlcywgdGhlbiBlbGVtZW50cyBkb3duc3RyZWFtIGluIHRoZSBwaXBlbGluZSBiZWNvbWUKKyAgICAgIHRoZSBlbnRyeSBwb2ludCBvZiB0aGlzIGdyb3VwIChpLmUuIHRoZSBlbGVtZW50IGNvbnRyb2xsaW5nIHRoZQorICAgICAgc2NoZWR1bGluZyBvZiBvdGhlciBlbGVtZW50cykuIFRoZSBlbnRyeSBwb2ludCBwdWxscyBkYXRhIGZyb20gdXBzdHJlYW0KKyAgICAgIGFuZCBwdXNoZXMgZGF0YSBkb3duc3RyZWFtLCB0aGVyZWJ5IGNhbGxpbmcgZGF0YSBoYW5kbGluZyBmdW5jdGlvbnMgb24KKyAgICAgIGVpdGhlciB0eXBlIG9mIGVsZW1lbnQuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgSW4gcHJhY3RpY2UsIG1vc3QgZWxlbWVudHMgaW4gJkdTdHJlYW1lcjssIHN1Y2ggYXMgZGVjb2RlcnMsIGVuY29kZXJzLAorICAgICAgZXRjLiBvbmx5IHN1cHBvcnQgcHVzaC1iYXNlZCBzY2hlZHVsaW5nLCB3aGljaCBtZWFucyB0aGF0IGluIHByYWN0aWNlLAorICAgICAgJkdTdHJlYW1lcjsgdXNlcyBhIHB1c2gtYmFzZWQgc2NoZWR1bGluZyBtb2RlbC4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL21hbnVhbC9hcHBlbmRpeC1jaGVja2xpc3QueG1sIGIvZG9jcy9tYW51YWwvYXBwZW5kaXgtY2hlY2tsaXN0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjlhMjM5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9tYW51YWwvYXBwZW5kaXgtY2hlY2tsaXN0LnhtbApAQCAtMCwwICsxLDE5OSBAQAorPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItY2hlY2tsaXN0LWVsZW1lbnQiPgorICA8dGl0bGU+VGhpbmdzIHRvIGNoZWNrIHdoZW4gd3JpdGluZyBhbiBhcHBsaWNhdGlvbjwvdGl0bGU+CisgIDxwYXJhPgorICAgIFRoaXMgY2hhcHRlciBjb250YWlucyBhIGZhaXJseSByYW5kb20gc2VsZWN0aW9uIG9mIHRoaW5ncyB0aGF0IGNhbiBiZQorICAgIHVzZWZ1bCB0byBrZWVwIGluIG1pbmQgd2hlbiB3cml0aW5nICZHU3RyZWFtZXI7LWJhc2VkIGFwcGxpY2F0aW9ucy4gSXQncworICAgIHVwIHRvIHlvdSBob3cgbXVjaCB5b3UncmUgZ29pbmcgdG8gdXNlIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCBoZXJlLgorICAgIFdlIHdpbGwgc2hvcnRseSBkaXNjdXNzIGhvdyB0byBkZWJ1ZyBwaXBlbGluZSBwcm9ibGVtcyB1c2luZyAmR1N0cmVhbWVyOworICAgIGFwcGxpY2F0aW9ucy4gQWxzbywgd2Ugd2lsbCB0b3VjaCB1cG9uIGhvdyB0byBhY3F1aXJlIGtub3dsZWRnZSBhYm91dAorICAgIHBsdWdpbnMgYW5kIGVsZW1lbnRzIGFuZCBob3cgdG8gdGVzdCBzaW1wbGUgcGlwZWxpbmVzIGJlZm9yZSBidWlsZGluZworICAgIGFwcGxpY2F0aW9ucyBhcm91bmQgdGhlbS4KKyAgPC9wYXJhPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1jaGVja2xpc3QtcHJvZ3JhbW1pbmciPgorICAgIDx0aXRsZT5Hb29kIHByb2dyYW1taW5nIGhhYml0czwvdGl0bGU+CisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQWx3YXlzIGFkZCBhIDxjbGFzc25hbWU+R3N0QnVzPC9jbGFzc25hbWU+IGhhbmRsZXIgdG8geW91cgorICAgICAgICAgIHBpcGVsaW5lLiBBbHdheXMgcmVwb3J0IGVycm9ycyBpbiB5b3VyIGFwcGxpY2F0aW9uLCBhbmQgdHJ5CisgICAgICAgICAgdG8gZG8gc29tZXRoaW5nIHdpdGggd2FybmluZ3MgYW5kIGluZm9ybWF0aW9uIG1lc3NhZ2VzLCB0b28uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEFsd2F5cyBjaGVjayByZXR1cm4gdmFsdWVzIG9mICZHU3RyZWFtZXI7IGZ1bmN0aW9ucy4gRXNwZWNpYWxseSwKKyAgICAgICAgICBjaGVjayByZXR1cm4gdmFsdWVzIG9mIDxmdW5jdGlvbj5nc3RfZWxlbWVudF9saW5rICgpPC9mdW5jdGlvbj4KKyAgICAgICAgICBhbmQgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X3NldF9zdGF0ZSAoKTwvZnVuY3Rpb24+LgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBEZXJlZmVyZW5jZSByZXR1cm4gdmFsdWVzIG9mIGFsbCBmdW5jdGlvbnMgcmV0dXJuaW5nIGEgbm9uLWJhc2UKKyAgICAgICAgICB0eXBlLCBzdWNoIGFzIDxmdW5jdGlvbj5nc3RfZWxlbWVudF9nZXRfcGFkICgpPC9mdW5jdGlvbj4uIEFsc28sCisgICAgICAgICAgYWx3YXlzIGZyZWUgbm9uLWNvbnN0IHN0cmluZyByZXR1cm5zLCBzdWNoIGFzCisgICAgICAgICAgPGZ1bmN0aW9uPmdzdF9vYmplY3RfZ2V0X25hbWUgKCk8L2Z1bmN0aW9uPi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQWx3YXlzIHVzZSB5b3VyIHBpcGVsaW5lIG9iamVjdCB0byBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IHN0YXRlCisgICAgICAgICAgb2YgeW91ciBwaXBlbGluZS4gRG9uJ3Qga2VlcCBwcml2YXRlIHZhcmlhYmxlcyBpbiB5b3VyIGFwcGxpY2F0aW9uLgorICAgICAgICAgIEFsc28sIGRvbid0IHVwZGF0ZSB5b3VyIHVzZXIgaW50ZXJmYWNlIGlmIGEgdXNlciBwcmVzc2VzIHRoZQorICAgICAgICAgIDxxdW90ZT5wbGF5PC9xdW90ZT4gYnV0dG9uLiBJbnN0ZWFkLCBsaXN0ZW4gZm9yIHRoZQorICAgICAgICAgIDxxdW90ZT5zdGF0ZS1jaGFuZ2VkPC9xdW90ZT4gbWVzc2FnZSBvbiB0aGUKKyAgICAgICAgICA8Y2xhc3NuYW1lPkdzdEJ1czwvY2xhc3NuYW1lPiBhbmQgb25seSB1cGRhdGUgdGhlIHVzZXIgaW50ZXJmYWNlCisgICAgICAgICAgd2hlbmV2ZXIgdGhpcyBtZXNzYWdlIGlzIHJlY2VpdmVkLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBSZXBvcnQgYWxsIGJ1Z3MgdGhhdCB5b3UgZmluZCBpbiAmR1N0cmVhbWVyOyBidWd6aWxsYSBhdAorICAgICAgICAgIDx1bGluayB0eXBlPSJodHRwIgorICAgICAgICAgIHVybD0iaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZyI+aHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy88L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tY2hlY2tsaXN0LWRlYnVnIj4KKyAgICA8dGl0bGU+RGVidWdnaW5nPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIEFwcGxpY2F0aW9ucyBjYW4gbWFrZSB1c2Ugb2YgdGhlIGV4dGVuc2l2ZSAmR1N0cmVhbWVyOyBkZWJ1Z2dpbmcgc3lzdGVtCisgICAgICB0byBkZWJ1ZyBwaXBlbGluZSBwcm9ibGVtcy4gRWxlbWVudHMgd2lsbCB3cml0ZSBvdXRwdXQgdG8gdGhpcyBzeXN0ZW0KKyAgICAgIHRvIGxvZyB3aGF0IHRoZXkncmUgZG9pbmcuIEl0J3Mgbm90IHVzZWQgZm9yIGVycm9yIHJlcG9ydGluZywgYnV0IGl0CisgICAgICBpcyB2ZXJ5IHVzZWZ1bCBmb3IgdHJhY2tpbmcgd2hhdCBhbiBlbGVtZW50IGlzIGRvaW5nIGV4YWN0bHksIHdoaWNoCisgICAgICBjYW4gY29tZSBpbiBoYW5keSB3aGVuIGRlYnVnZ2luZyBhcHBsaWNhdGlvbiBpc3N1ZXMgKHN1Y2ggYXMgZmFpbGluZworICAgICAgc2Vla3MsIG91dC1vZi1zeW5jIG1lZGlhLCBldGMuKS4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBNb3N0ICZHU3RyZWFtZXI7LWJhc2VkIGFwcGxpY2F0aW9ucyBhY2NlcHQgdGhlIGNvbW1hbmRsaW5lIG9wdGlvbgorICAgICAgPG9wdGlvbj4tLWdzdC1kZWJ1Zz1MSVNUPC9vcHRpb24+IGFuZCByZWxhdGVkIGZhbWlseSBtZW1iZXJzLiBUaGUKKyAgICAgIGxpc3QgY29uc2lzdHMgb2YgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeS9sZXZlbCBwYWlycywKKyAgICAgIHdoaWNoIGNhbiBzZXQgdGhlIGRlYnVnZ2luZyBsZXZlbCBmb3IgYSBzcGVjaWZpYyBkZWJ1Z2dpbmcgY2F0ZWdvcnkuCisgICAgICBGb3IgZXhhbXBsZSwgPG9wdGlvbj4tLWdzdC1kZWJ1Zz1vZ2dkZW11eDo1PC9vcHRpb24+IHdvdWxkIHR1cm4KKyAgICAgIG9uIGRlYnVnZ2luZyBmb3IgdGhlIE9nZyBkZW11eGVyIGVsZW1lbnQuIFlvdSBjYW4gdXNlIHdpbGRjYXJkcyBhcworICAgICAgd2VsbC4gQSBkZWJ1Z2dpbmcgbGV2ZWwgb2YgMCB3aWxsIHR1cm4gb2ZmIGFsbCBkZWJ1Z2dpbmcsIGFuZCBhIGxldmVsCisgICAgICBvZiA1IHdpbGwgdHVybiBvbiBhbGwgZGVidWdnaW5nLiBJbnRlcm1lZGlhdGUgdmFsdWVzIG9ubHkgdHVybiBvbgorICAgICAgc29tZSBkZWJ1Z2dpbmcgKGJhc2VkIG9uIG1lc3NhZ2Ugc2V2ZXJpdHk7IDIsIGZvciBleGFtcGxlLCB3aWxsIG9ubHkKKyAgICAgIGRpc3BsYXkgZXJyb3JzIGFuZCB3YXJuaW5ncykuIEhlcmUncyBhIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSBvcHRpb25zOgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8b3B0aW9uPi0tZ3N0LWRlYnVnLWhlbHA8L29wdGlvbj4gd2lsbCBwcmludCBhdmFpbGFibGUgZGVidWcKKyAgICAgICAgICBjYXRlZ29yaWVzIGFuZCBleGl0LgorICAgICAgICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgPHBhcmE+CisgICAgICAgICAgPG9wdGlvbj4tLWdzdC1kZWJ1Zy1sZXZlbD08cmVwbGFjZWFibGU+TEVWRUw8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPiAKKwkgIHdpbGwgc2V0IHRoZSBkZWZhdWx0IGRlYnVnIGxldmVsICh3aGljaCBjYW4gcmFuZ2UgZnJvbSAwIChubworICAgICAgICAgIG91dHB1dCkgdG8gNSAoZXZlcnl0aGluZykpLgorICAgICAgICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgPHBhcmE+CisgICAgICAgICAgPG9wdGlvbj4tLWdzdC1kZWJ1Zz08cmVwbGFjZWFibGU+TElTVDwvcmVwbGFjZWFibGU+PC9vcHRpb24+IAorCSAgdGFrZXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvCisgICAgICAgICAgc2V0IHNwZWNpZmljIGxldmVscyBmb3IgdGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZToKKyAgICAgICAgICA8b3B0aW9uPkdTVF9BVVRPUExVRzo1LGF2aWRlbXV4OjM8L29wdGlvbj4uIEFsdGVybmF0aXZlbHksIHlvdQorICAgICAgICAgIGNhbiBhbHNvIHNldCB0aGUgPGNsYXNzbmFtZT5HU1RfREVCVUc8L2NsYXNzbmFtZT4gZW52aXJvbm1lbnQKKyAgICAgICAgICB2YXJpYWJsZSwgd2hpY2ggaGFzIHRoZSBzYW1lIGVmZmVjdC4KKyAgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xpc3RpdGVtPgorICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxvcHRpb24+LS1nc3QtZGVidWctbm8tY29sb3I8L29wdGlvbj4gd2lsbCBkaXNhYmxlIGNvbG9yIGRlYnVnZ2luZy4KKyAgICAgICAgICBZb3UgY2FuIGFsc28gc2V0IHRoZSBHU1RfREVCVUdfTk9fQ09MT1IgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gMQorICAgICAgICAgIGlmIHlvdSB3YW50IHRvIGRpc2FibGUgY29sb3JlZCBkZWJ1ZyBvdXRwdXQgcGVybWFuZW50bHkuIE5vdGUgdGhhdAorICAgICAgICAgIGlmIHlvdSBhcmUgZGlzYWJsaW5nIGNvbG9yIHB1cmVseSB0byBhdm9pZCBtZXNzaW5nIHVwIHlvdXIgcGFnZXIKKyAgICAgICAgICBvdXRwdXQsIHRyeSB1c2luZyA8Y29tbWFuZD5sZXNzIC1SPC9jb21tYW5kPi4KKyAgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xpc3RpdGVtPgorICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxvcHRpb24+LS1nc3QtZGVidWctZGlzYWJsZTwvb3B0aW9uPiBkaXNhYmxlcyBkZWJ1Z2dpbmcgYWx0b2dldGhlci4KKyAgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xpc3RpdGVtPgorICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxvcHRpb24+LS1nc3QtcGx1Z2luLXNwZXc8L29wdGlvbj4gZW5hYmxlcyBwcmludG91dCBvZiBlcnJvcnMgd2hpbGUKKyAgICAgICAgICBsb2FkaW5nICZHU3RyZWFtZXI7IHBsdWdpbnMuCisgICAgICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1jaGVja2xpc3QtY29udmVyc2lvbiI+CisgICAgPHRpdGxlPkNvbnZlcnNpb24gcGx1Z2luczwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICAmR1N0cmVhbWVyOyBjb250YWlucyBhIGJ1bmNoIG9mIGNvbnZlcnNpb24gcGx1Z2lucyB0aGF0IG1vc3QKKyAgICAgIGFwcGxpY2F0aW9ucyB3aWxsIGZpbmQgdXNlZnVsLiBTcGVjaWZpY2FsbHksIHRob3NlIGFyZSB2aWRlb3NjYWxlcnMKKyAgICAgICh2aWRlb3NjYWxlKSwgY29sb3JzcGFjZSBjb252ZXJ0b3JzIChmZm1wZWdjb2xvcnNwYWNlKSwgYXVkaW8gZm9ybWF0CisgICAgICBjb252ZXJ0b3JzIGFuZCBjaGFubmVsIHJlc2FtcGxlcnMgKGF1ZGlvY29udmVydCkgYW5kIGF1ZGlvIHNhbXBsZXJhdGUKKyAgICAgIGNvbnZlcnRvcnMgKGF1ZGlvcmVzYW1wbGUpLiBUaG9zZSBjb252ZXJ0b3JzIGRvbid0IGRvIGFueXRoaW5nIHdoZW4gbm90CisgICAgICByZXF1aXJlZCwgdGhleSB3aWxsIGFjdCBpbiBwYXNzdGhyb3VnaCBtb2RlLiBUaGV5IHdpbGwgYWN0aXZhdGUgd2hlbgorICAgICAgdGhlIGhhcmR3YXJlIGRvZXNuJ3Qgc3VwcG9ydCBhIHNwZWNpZmljIHJlcXVlc3QsIHRob3VnaC4gQWxsCisgICAgICBhcHBsaWNhdGlvbnMgYXJlIHJlY29tbWVuZGVkIHRvIHVzZSB0aG9zZSBlbGVtZW50cy4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWNoZWNrbGlzdC1hcHBsaWNhdGlvbnMiPgorICAgIDx0aXRsZT5VdGlsaXR5IGFwcGxpY2F0aW9ucyBwcm92aWRlZCB3aXRoICZHU3RyZWFtZXI7PC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgICZHU3RyZWFtZXI7IGNvbWVzIHdpdGggYSBkZWZhdWx0IHNldCBvZiBjb21tYW5kLWxpbmUgdXRpbGl0aWVzIHRoYXQKKyAgICAgIGNhbiBoZWxwIGluIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50LiBXZSB3aWxsIGRpc2N1c3Mgb25seQorICAgICAgPGNvbW1hbmQ+Z3N0LWxhdW5jaDwvY29tbWFuZD4gYW5kIDxjb21tYW5kPmdzdC1pbnNwZWN0PC9jb21tYW5kPiBoZXJlLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1hcHBsaWNhdGlvbnMtbGF1bmNoIj4KKyAgICAgIDx0aXRsZT48Y29tbWFuZD5nc3QtbGF1bmNoPC9jb21tYW5kPjwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgPGNvbW1hbmQ+Z3N0LWxhdW5jaDwvY29tbWFuZD4gaXMgYSBzaW1wbGUgc2NyaXB0LWxpa2UgY29tbWFuZGxpbmUKKyAgICAgICAgYXBwbGljYXRpb24gdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0IHBpcGVsaW5lcy4gRm9yIGV4YW1wbGUsIHRoZQorICAgICAgICBjb21tYW5kIDxjb21tYW5kPmdzdC1sYXVuY2ggYXVkaW90ZXN0c3JjICEgYXVkaW9jb252ZXJ0ICEgCisgICAgICAgIGF1ZGlvL3gtcmF3LWludCxjaGFubmVscz0yICEgYWxzYXNpbms8L2NvbW1hbmQ+IHdpbGwgcnVuCisgICAgICAgIGEgcGlwZWxpbmUgd2hpY2ggZ2VuZXJhdGVzIGEgc2luZS13YXZlIGF1ZGlvIHN0cmVhbSBhbmQgcGxheXMgaXQKKyAgICAgICAgdG8geW91ciBBTFNBIGF1ZGlvIGNhcmQuIDxjb21tYW5kPmdzdC1sYXVuY2g8L2NvbW1hbmQ+IGFsc28gYWxsb3dzCisgICAgICAgIHRoZSB1c2Ugb2YgdGhyZWFkcyAod2lsbCBiZSB1c2VkIGF1dG9tYXRpY2FsbHkgYXMgcmVxdWlyZWQgb3IgYXMgcXVldWUKKyAgICAgICAgZWxlbWVudHMgYXJlIGluc2VydGVkIGluIHRoZSBwaXBlbGluZSkgYW5kIGJpbnMgKHVzaW5nIGJyYWNrZXRzLCBzbyAKKyAgICAgICAgPHF1b3RlPig8L3F1b3RlPiBhbmQgPHF1b3RlPik8L3F1b3RlPikuIFlvdSBjYW4gdXNlIGRvdHMgdG8gaW1wbHkKKyAgICAgICAgcGFkbmFtZXMgb24gZWxlbWVudHMsCisgICAgICAgIG9yIGV2ZW4gb21pdCB0aGUgcGFkbmFtZSB0byBhdXRvbWF0aWNhbGx5IHNlbGVjdCBhIHBhZC4gVXNpbmcKKyAgICAgICAgYWxsIHRoaXMsIHRoZSBwaXBlbGluZQorICAgICAgICA8Y29tbWFuZD5nc3QtbGF1bmNoIGZpbGVzcmMgbG9jYXRpb249ZmlsZS5vZ2cgISBvZ2dkZW11eCBuYW1lPWQKKyAgICAgICAgIGQuICEgcXVldWUgISB0aGVvcmFkZWMgISBmZm1wZWdjb2xvcnNwYWNlICEgeHZpbWFnZXNpbmsKKyAgICAgICAgIGQuICEgcXVldWUgISB2b3JiaXNkZWMgISBhdWRpb2NvbnZlcnQgISBhdWRpb3Jlc2FtcGxlICEgYWxzYXNpbmsKKyAgICAgICAgPC9jb21tYW5kPiB3aWxsIHBsYXkgYW4gT2dnIGZpbGUKKyAgICAgICAgY29udGFpbmluZyBhIFRoZW9yYSB2aWRlby1zdHJlYW0gYW5kIGEgVm9yYmlzIGF1ZGlvLXN0cmVhbS4gWW91IGNhbgorICAgICAgICBhbHNvIHVzZSBhdXRvcGx1Z2dlcnMgc3VjaCBhcyBkZWNvZGViaW4gb24gdGhlIGNvbW1hbmRsaW5lLiBTZWUgdGhlCisgICAgICAgIG1hbnVhbCBwYWdlIG9mIDxjb21tYW5kPmdzdC1sYXVuY2g8L2NvbW1hbmQ+IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdDI+CisKKyAgICA8c2VjdDIgaWQ9InNlY3Rpb24tYXBwbGljYXRpb25zLWluc3BlY3QiPgorICAgICAgPHRpdGxlPjxjb21tYW5kPmdzdC1pbnNwZWN0PC9jb21tYW5kPjwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgPGNvbW1hbmQ+Z3N0LWluc3BlY3Q8L2NvbW1hbmQ+IGNhbiBiZSB1c2VkIHRvIGluc3BlY3QgYWxsIHByb3BlcnRpZXMsCisgICAgICAgIHNpZ25hbHMsIGR5bmFtaWMgcGFyYW1ldGVycyBhbmQgdGhlIG9iamVjdCBoaWVyYXJjaHkgb2YgYW4gZWxlbWVudC4KKyAgICAgICAgVGhpcyBjYW4gYmUgdmVyeSB1c2VmdWwgdG8gc2VlIHdoaWNoIDxjbGFzc25hbWU+R09iamVjdDwvY2xhc3NuYW1lPgorICAgICAgICBwcm9wZXJ0aWVzIG9yIHdoaWNoIHNpZ25hbHMgKGFuZCB1c2luZyB3aGF0IGFyZ3VtZW50cykgYW4gZWxlbWVudAorICAgICAgICBzdXBwb3J0cy4gUnVuIDxjb21tYW5kPmdzdC1pbnNwZWN0IGZha2VzcmM8L2NvbW1hbmQ+IHRvIGdldCBhbiBpZGVhCisgICAgICAgIG9mIHdoYXQgaXQgZG9lcy4gU2VlIHRoZSBtYW51YWwgcGFnZSBvZiA8Y29tbWFuZD5nc3QtaW5zcGVjdDwvY29tbWFuZD4KKyAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0Mj4KKworICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1hcHBsaWNhdGlvbnMtZ3N0LWVkaXRvciI+CisgICAgICA8dGl0bGU+R3N0RWRpdG9yPC90aXRsZT4KKyAgICAgIDxwYXJhPiAKKyAgICAgICAgR3N0RWRpdG9yIGlzIGEgc2V0IG9mIHdpZGdldHMgdG8gZGlzcGxheSBhIGdyYXBoaWNhbCByZXByZXNlbnRhdGlvbiBvZiBhIAorICAgICAgICBwaXBlbGluZS4KKyAgICAgIDwvcGFyYT4gCisgICAgPC9zZWN0Mj4KKworICA8L3NlY3QxPgorPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvYXBwZW5kaXgtaW50ZWdyYXRpb24ueG1sIGIvZG9jcy9tYW51YWwvYXBwZW5kaXgtaW50ZWdyYXRpb24ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NWVkYjgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL21hbnVhbC9hcHBlbmRpeC1pbnRlZ3JhdGlvbi54bWwKQEAgLTAsMCArMSwzNDEgQEAKKzxjaGFwdGVyIGlkPSJjaGFwdGVyLWludGdyYXRpb24iPgorICA8dGl0bGU+SW50ZWdyYXRpb248L3RpdGxlPgorICA8cGFyYT4KKyAgICAmR1N0cmVhbWVyOyB0cmllcyB0byBpbnRlZ3JhdGUgY2xvc2VseSB3aXRoIG9wZXJhdGluZyBzeXN0ZW1zIChzdWNoCisgICAgYXMgTGludXggYW5kIFVOSVgtbGlrZSBvcGVyYXRpbmcgc3lzdGVtcywgT1MgWCBvciBXaW5kb3dzKSBhbmQgZGVza3RvcAorICAgIGVudmlyb25tZW50cyAoc3VjaCBhcyBHTk9NRSBvciBLREUpLiBJbiB0aGlzIGNoYXB0ZXIsIHdlJ2xsIG1lbnRpb24KKyAgICBzb21lIHNwZWNpZmljIHRlY2huaXF1ZXMgdG8gaW50ZWdyYXRlIHlvdXIgYXBwbGljYXRpb24gd2l0aCB5b3VyCisgICAgb3BlcmF0aW5nIHN5c3RlbSBvciBkZXNrdG9wIGVudmlyb25tZW50IG9mIGNob2ljZS4KKyAgPC9wYXJhPgorIAorPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KKzwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+Cis8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1pbnRlZ3JhdGlvbi1uaXgiPgorICAgIDx0aXRsZT5MaW51eCBhbmQgVU5JWC1saWtlIG9wZXJhdGluZyBzeXN0ZW1zPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgICZHU3RyZWFtZXI7IHByb3ZpZGVzIGEgYmFzaWMgc2V0IG9mIGVsZW1lbnRzIHRoYXQgYXJlIHVzZWZ1bCB3aGVuCisgICAgICBpbnRlZ3JhdGluZyB3aXRoIExpbnV4IG9yIGEgVU5JWC1saWtlIG9wZXJhdGluZyBzeXN0ZW0uCisgICAgPC9wYXJhPgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEZvciBhdWRpbyBpbnB1dCBhbmQgb3V0cHV0LCAmR1N0cmVhbWVyOyBwcm92aWRlcyBpbnB1dCBhbmQKKyAgICAgICAgICBvdXRwdXQgZWxlbWVudHMgZm9yIHNldmVyYWwgYXVkaW8gc3Vic3lzdGVtcy4gQW1vbmdzdCBvdGhlcnMsCisgICAgICAgICAgJkdTdHJlYW1lcjsgaW5jbHVkZXMgZWxlbWVudHMgZm9yIEFMU0EgKGFsc2FzcmMsIGFsc2FtaXhlciwKKyAgICAgICAgICBhbHNhc2luayksIE9TUyAob3Nzc3JjLCBvc3NtaXhlciwgb3Nzc2luaykgYW5kIFN1biBhdWRpbworICAgICAgICAgIChzdW5hdWRpb3NyYywgc3VuYXVkaW9taXhlciwgc3VuYXVkaW9zaW5rKS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgRm9yIHZpZGVvIGlucHV0LCAmR1N0cmVhbWVyOyBjb250YWlucyBzb3VyY2UgZWxlbWVudHMgZm9yCisgICAgICAgICAgVmlkZW80bGludXggKHY0bHNyYywgdjRsbWpwZWdzcmMsIHY0bGVsZW1lbnQgYW5kIHY0bG1qcGVnaXNuaykKKyAgICAgICAgICBhbmQgVmlkZW80bGludXgyICh2NGwyc3JjLCB2NGwyZWxlbWVudCkuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEZvciB2aWRlbyBvdXRwdXQsICZHU3RyZWFtZXI7IHByb3ZpZGVzIGVsZW1lbnRzIGZvciBvdXRwdXQKKyAgICAgICAgICB0byBYLXdpbmRvd3MgKHhpbWFnZXNpbmspLCBYdi13aW5kb3dzICh4dmltYWdlc2luazsgZm9yCisgICAgICAgICAgaGFyZHdhcmUtYWNjZWxlcmF0ZWQgdmlkZW8pLCBkaXJlY3QtZnJhbWVidWZmZXIgKGRmYmltYWdlc2luaykKKyAgICAgICAgICBhbmQgb3BlbkdMIGltYWdlIGNvbnRleHRzIChnbHNpbmspLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICA8L3NlY3QxPgorCis8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgorPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KKzwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWludGVncmF0aW9uLWdub21lIj4KKyAgICA8dGl0bGU+R05PTUUgZGVza3RvcDwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICAmR1N0cmVhbWVyOyBoYXMgYmVlbiB0aGUgbWVkaWEgYmFja2VuZCBvZiB0aGUgPHVsaW5rIHR5cGU9Imh0dHAiCisgICAgICB1cmw9Imh0dHA6Ly93d3cuZ25vbWUub3JnLyI+R05PTUU8L3VsaW5rPiBkZXNrdG9wIHNpbmNlIEdOT01FLTIuMgorICAgICAgb253YXJkcy4gTm93YWRheXMsIGEgd2hvbGUgYnVuY2ggb2YgR05PTUUgYXBwbGljYXRpb25zIG1ha2UgdXNlIG9mCisgICAgICAmR1N0cmVhbWVyOyBmb3IgbWVkaWEtcHJvY2Vzc2luZywgaW5jbHVkaW5nIChidXQgbm90IGxpbWl0ZWQgdG8pCisgICAgICA8dWxpbmsgdHlwZT0iaHR0cCIgdXJsPSJodHRwOi8vd3d3LnJoeXRobWJveC5vcmcvIj5SaHl0aG1ib3g8L3VsaW5rPiwKKyAgICAgIDx1bGluayB0eXBlPSJodHRwIiB1cmw9Imh0dHA6Ly93d3cuaGFkZXNzLm5ldC90b3RlbS5waHAzIj5Ub3RlbTwvdWxpbms+CisgICAgICBhbmQgPHVsaW5rIHR5cGU9Imh0dHAiCisgICAgICB1cmw9Imh0dHA6Ly93d3cuYnVydG9uaW5pLmNvbS9ibG9nL2NvbXB1dGVycy9zb3VuZC1qdWljZXIiPlNvdW5kCisgICAgICBKdWljZXI8L3VsaW5rPi4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBNb3N0IG9mIHRoZXNlIEdOT01FIGFwcGxpY2F0aW9ucyBtYWtlIHVzZSBvZiBzb21lIHNwZWNpZmljIHRlY2huaXF1ZXMKKyAgICAgIHRvIGludGVncmF0ZSBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlIHdpdGggdGhlIEdOT01FIGRlc2t0b3A6CisgICAgPC9wYXJhPgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEdOT01FIGFwcGxpY2F0aW9ucyB1c3VhbGx5IGNhbGwgPGZ1bmN0aW9uPmd0a19pbml0ICgpPC9mdW5jdGlvbj4KKyAgICAgICAgICB0byBwYXJzZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBhbmQgaW5pdGlhbGl6ZSBHVEsuICZHU3RyZWFtZXI7CisgICAgICAgICAgYXBwbGljYXRpb25zIHdvdWxkIG5vcm1hbGx5IGNhbGwgPGZ1bmN0aW9uPmdzdF9pbml0ICgpPC9mdW5jdGlvbj4KKyAgICAgICAgICB0byBkbyB0aGUgc2FtZSBmb3IgR1N0cmVhbWVyLgorICAgICAgICAgIFRoaXMgd291bGQgbWVhbiB0aGF0IG9ubHkgb25lIG9mIHRoZSB0d28gY2FuIHBhcnNlIGNvbW1hbmQtbGluZQorICAgICAgICAgIG9wdGlvbnMuIFRvIHdvcmsgYXJvdW5kIHRoaXMgaXNzdWUsICZHU3RyZWFtZXI7IGNhbiBwcm92aWRlIGEKKyAgICAgICAgICBHTGliIDxjbGFzc25hbWU+R09wdGlvbkdyb3VwPC9jbGFzc25hbWU+IHdoaWNoIGNhbiBiZSBwYXNzZWQgdG8KKyAgICAgICAgICA8ZnVuY3Rpb24+Z25vbWVfcHJvZ3JhbV9pbml0ICgpPC9mdW5jdGlvbj4uIFRoZSBmb2xsb3dpbmcKKyAgICAgICAgICBleGFtcGxlIHJlcXVpcmVzIEdUSyAyLjYgb3IgbmV3ZXIgKHByZXZpb3VzIEdUSyB2ZXJzaW9ucworICAgICAgICAgIGRvIG5vdCBzdXBwb3J0IGNvbW1hbmQgbGluZSBwYXJzaW5nIHZpYSBHT3B0aW9uIHlldCkKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+PCEtLSBleGFtcGxlLWJlZ2luIGdub21lLmMgYSAtLT4KKyNpbmNsdWRlICZsdDtndGsvZ3RrLmgmZ3Q7CisjaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OworCitzdGF0aWMgZ2NoYXIgKipjbWRfZmlsZW5hbWVzID0gTlVMTDsKKworc3RhdGljIEdPcHRpb25FbnRyaWVzIGNtZF9vcHRpb25zW10gPSB7CisgIC8qIGhlcmUgeW91IGNhbiBhZGQgY29tbWFuZCBsaW5lIG9wdGlvbnMgZm9yIHlvdXIgYXBwbGljYXRpb24uIENoZWNrCisgICAqIHRoZSBHT3B0aW9uIHNlY3Rpb24gaW4gdGhlIEdMaWIgQVBJIHJlZmVyZW5jZSBmb3IgYSBtb3JlIGVsYWJvcmF0ZQorICAgKiBleGFtcGxlIG9mIGhvdyB0byBhZGQgeW91ciBvd24gY29tbWFuZCBsaW5lIG9wdGlvbnMgaGVyZSAqLworCisgIC8qIGF0IHRoZSBlbmQgd2UgaGF2ZSBhIHNwZWNpYWwgb3B0aW9uIHRoYXQgY29sbGVjdHMgYWxsIHJlbWFpbmluZyAKKyAgICogY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAobGlrZSBmaWxlbmFtZXMpIGZvciB1cy4gSWYgeW91IGRvbiZhcG9zO3QKKyAgICogbmVlZCB0aGlzLCB5b3UgY2FuIHNhZmVseSByZW1vdmUgaXQgKi8KKyAgeyBHX09QVElPTl9SRU1BSU5JTkcsIDAsIDAsIEdfT1BUSU9OX0FSR19GSUxFTkFNRV9BUlJBWSwgJmFtcDtjbWRfZmlsZW5hbWVzLAorICAgICJTcGVjaWFsIG9wdGlvbiB0aGF0IGNvbGxlY3RzIGFueSByZW1haW5pbmcgYXJndW1lbnRzIGZvciB1cyIgfSwKKworICAvKiBtYXJrIHRoZSBlbmQgb2YgdGhlIG9wdGlvbnMgYXJyYXkgd2l0aCBhIE5VTEwgb3B0aW9uICovCisgIHsgTlVMTCwgfQorfTsKKworLyogdGhpcyBzaG91bGQgdXN1YWxseSBiZSBkZWZpbmVkIGluIHlvdXIgY29uZmlnLmggKi8KKyNkZWZpbmUgVkVSU0lPTiAiMC4wLjEiCisKK2dpbnQKK21haW4gKGdpbnQgYXJnYywgZ2NoYXIgKiphcmd2KQoreworICBHT3B0aW9uQ29udGV4dCAqY29udGV4dDsKKyAgR09wdGlvbkdyb3VwICpnc3RyZWFtZXJfZ3JvdXAsICpndGtfZ3JvdXA7CisgIEdFcnJvciAqZXJyID0gTlVMTDsKKworICAvKiB3ZSBtdXN0IGluaXRpYWxpc2UgdGhlIHRocmVhZGluZyBzeXN0ZW0gYmVmb3JlIHVzaW5nIGFueQorICAgKiBvdGhlciBHTGliIGZ1bnRpb24sIHN1Y2ggYXMgZ19vcHRpb25fY29udGV4dF9uZXcoKSAqLworICBpZiAoIWdfdGhyZWFkX3N1cHBvcnRlZCAoKSkKKyAgICBnX3RocmVhZF9pbml0IChOVUxMKTsKKworICBjb250ZXh0ID0gZ19vcHRpb25fY29udGV4dF9uZXcgKCJndGstZGVtby1hcHAiKTsKKworICAvKiBnZXQgY29tbWFuZCBsaW5lIG9wdGlvbnMgZnJvbSBHU3RyZWFtZXIgYW5kIGFkZCB0aGVtIHRvIHRoZSBncm91cCAqLworICBnc3RyZWFtZXJfZ3JvdXAgPSBnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwICgpOworICBnX29wdGlvbl9jb250ZXh0X2FkZF9ncm91cCAoY29udGV4dCwgZ3N0cmVhbWVyX2dyb3VwKTsKKyAgZ3RrX2dyb3VwID0gZ3RrX2dldF9vcHRpb25fZ3JvdXAgKFRSVUUpOworICBnX29wdGlvbl9jb250ZXh0X2FkZF9ncm91cCAoY29udGV4dCwgZ3RrX2dyb3VwKTsKKworICAvKiBhZGQgb3VyIG93biBvcHRpb25zLiBJZiB5b3UgYXJlIHVzaW5nIGdldHRleHQgZm9yIHRyYW5zbGF0aW9uIG9mIHlvdXIKKyAgICogc3RyaW5ncywgdXNlIEdFVFRFWFRfUEFDS0FHRSBoZXJlIGluc3RlYWQgb2YgTlVMTCAqLworICBnX29wdGlvbl9jb250ZXh0X2FkZF9tYWluX2VudHJpZXMgKGNvbnRleHQsIGNtZF9vcHRpb25zLCBOVUxMKTsKKworICAvKiBub3cgcGFyc2UgdGhlIGNvbW1hbmRsaW5lIG9wdGlvbnMsIG5vdGUgdGhhdCB0aGlzIGFscmVhZHkKKyAgICogY2FsbHMgZ3RrX2luaXQoKSBhbmQgZ3N0X2luaXQoKSAqLworICBpZiAoIWdfb3B0aW9uX2NvbnRleHRfcGFyc2UgKGN0eCwgJmFtcDthcmdjLCAmYW1wO2FyZ3YsICZhbXA7ZXJyKSkgeworICAgIGdfcHJpbnQgKCJFcnJvciBpbml0aWFsaXppbmc6ICVzXG4iLCBlcnItPm1lc3NhZ2UpOworICAgIGV4aXQgKDEpOworICB9CisKKyAgLyogYW55IGZpbGVuYW1lcyB3ZSBnb3QgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmU/IHBhcnNlIHRoZW0hICovCisgIGlmIChjbWRfZmlsZW5hbWVzICE9IE5VTEwpIHsKKyAgICBndWludCBpLCBudW07CisKKyAgICBudW0gPSBnX3N0cnZfbGVuZ3RoIChjbWRfZmlsZW5hbWVzKTsKKyAgICBmb3IgKGkgPSAwOyBpICZsdDsgbnVtOyArK2kpIHsKKyAgICAgIC8qIGRvIHNvbWV0aGluZyB3aXRoIHRoZSBmaWxlbmFtZSAuLi4gKi8KKyAgICAgIGdfcHJpbnQgKCJBZGRpbmcgdG8gcGxheSBxdWV1ZTogJXNcbiIsIGNtZF9maWxlbmFtZXNbaV0pOworICAgIH0KKworICAgIGdfc3RyZnJlZXYgKGNtZF9maWxlbmFtZXMpOworICAgIGNtZF9maWxlbmFtZXMgPSBOVUxMOworICB9Cis8IS0tIGV4YW1wbGUtZW5kIGdub21lLmMgYSAtLT4KK1suLl08IS0tIGV4YW1wbGUtYmVnaW4gZ25vbWUuYyBiIC0tPjwhLS0KKyAgcmV0dXJuIDA7CistLT48IS0tIGV4YW1wbGUtZW5kIGdub21lLmMgYiAtLT4KKzwhLS0gZXhhbXBsZS1iZWdpbiBnbm9tZS5jIGMgLS0+Cit9CisgICAgICAgIDwhLS0gZXhhbXBsZS1lbmQgZ25vbWUuYyBjIC0tPjwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBHTk9NRSBzdG9yZXMgdGhlIGRlZmF1bHQgdmlkZW8gYW5kIGF1ZGlvIHNvdXJjZXMgYW5kIHNpbmtzIGluIEdDb25mLgorICAgICAgICAgICZHU3RyZWFtZXI7IHByb3ZpZGVzIGEgbnVtYmVyIG9mIGVsZW1lbnRzIHRoYXQgY3JlYXRlIGF1ZGlvIGFuZAorICAgICAgICAgIHZpZGVvIHNvdXJjZXMgYW5kIHNpbmtzIGRpcmVjdGx5IGJhc2VkIG9uIHRob3NlIEdDb25mIHNldHRpbmdzLiAKKyAgICAgICAgICBUaG9zZSBlbGVtZW50cyBhcmU6IGdjb25mYXVkaW9zaW5rLCBnY29uZnZpZGVvc2luaywgZ2NvbmZhdWRpb3NyYworICAgICAgICAgIGFuZCBnY29uZnZpZGVvc3JjLiBZb3UgY2FuIGNyZWF0ZSB0aGVtIHdpdGgKKyAgICAgICAgICA8ZnVuY3Rpb24+Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgpPC9mdW5jdGlvbj4gYW5kIHVzZSB0aGVtCisgICAgICAgICAgZGlyZWN0bHkganVzdCBsaWtlIHlvdSB3b3VsZCB1c2UgYW55IG90aGVyIHNvdXJjZSBvciBzaW5rIGVsZW1lbnQuCisgICAgICAgICAgQWxsIEdOT01FIGFwcGxpY2F0aW9ucyBhcmUgcmVjb21tZW5kZWQgdG8gdXNlIHRob3NlIGVsZW1lbnRzLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAmR1N0cmVhbWVyOyBwcm92aWRlcyBkYXRhIGlucHV0L291dHB1dCBlbGVtZW50cyBmb3IgdXNlIHdpdGggdGhlCisgICAgICAgICAgR0lPIFZGUyBzeXN0ZW0uIFRoZXNlIGVsZW1lbnRzIGFyZSBjYWxsZWQgPHF1b3RlPmdpb3NyYzwvcXVvdGU+CisgICAgICAgICAgYW5kIDxxdW90ZT5naW9zaW5rPC9xdW90ZT4uCisgICAgICAgICAgVGhlIGRlcHJlY2F0ZWQgR05PTUUtVkZTIHN5c3RlbSBpcyBzdXBwb3J0ZWQgdG9vIGJ1dCBzaG91bGRuJ3QgYmUKKyAgICAgICAgICB1c2VkIGZvciBhbnkgbmV3IGFwcGxpY2F0aW9ucy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKyAgPC9zZWN0MT4KKworPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KKzwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+Cis8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgorCisKKworICA8c2VjdDEgaWQ9InNlY3Rpb24taW50ZWdyYXRpb24ta2RlIj4KKyAgICA8dGl0bGU+S0RFIGRlc2t0b3A8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgJkdTdHJlYW1lcjsgaGFzIGJlZW4gcHJvcG9zZWQgZm9yIGluY2x1c2lvbiBpbiBLREUtNC4wLiBDdXJyZW50bHksCisgICAgICAmR1N0cmVhbWVyOyBpcyBpbmNsdWRlZCBhcyBhbiBvcHRpb25hbCBjb21wb25lbnQsIGFuZCBpdCdzIHVzZWQgYnkKKyAgICAgIHNldmVyYWwgS0RFIGFwcGxpY2F0aW9ucywgaW5jbHVkaW5nIDx1bGluayB0eXBlPSJodHRwIgorICAgICAgdXJsPSJodHRwOi8vYW1hcm9rLmtkZS5vcmcvIj5BbWFyb0s8L3VsaW5rPiwgPHVsaW5rIHR5cGU9Imh0dHAiCisgICAgICB1cmw9Imh0dHA6Ly9kZXZlbG9wZXIua2RlLm9yZy9+d2hlZWxlci9qdWsuaHRtbCI+SnVLPC91bGluaz4sCisgICAgICA8dWxpbmsgdHlwZT0iaHR0cCIKKyAgICAgIHVybD0iaHR0cDovL3d3dy54czRhbGwubmwvfmpqdnJpZXplL2ttcGxheWVyLmh0bWwiPktNUGxheWVyPC91bGluaz4gYW5kCisgICAgICA8dWxpbmsgdHlwZT0iaHR0cCIKKyAgICAgIHVybD0iaHR0cDovL2thZmZlaW5lLnNvdXJjZWZvcmdlLm5ldC8iPkthZmZlaW5lPC91bGluaz4uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgQWx0aG91Z2ggbm90IHlldCBhcyBjb21wbGV0ZSBhcyB0aGUgR05PTUUgaW50ZWdyYXRpb24gYml0cywgdGhlcmUKKyAgICAgIGFyZSBhbHJlYWR5IHNvbWUgS0RFIGludGVncmF0aW9uIHNwZWNpZmljcyBhdmFpbGFibGUuIFRoaXMgbGlzdCB3aWxsCisgICAgICBwcm9iYWJseSBncm93IGFzICZHU3RyZWFtZXI7IHN0YXJ0cyB0byBiZSB1c2VkIGluIEtERS00LjA6CisgICAgPC9wYXJhPgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEFtYXJvSyBjb250YWlucyBhIGtpb3NyYyBlbGVtZW50LCB3aGljaCBpcyBhIHNvdXJjZSBlbGVtZW50IHRoYXQKKyAgICAgICAgICBpbnRlZ3JhdGVzIHdpdGggdGhlIEtERSBWRlMgc3Vic3lzdGVtIEtJTy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKyAgPC9zZWN0MT4KKworPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KKzwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+Cis8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1pbnRlZ3JhdGlvbi1vc3giPgorICAgIDx0aXRsZT5PUyBYPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgICZHU3RyZWFtZXI7IHByb3ZpZGVzIG5hdGl2ZSB2aWRlbyBhbmQgYXVkaW8gb3V0cHV0IGVsZW1lbnRzIGZvciBPUyBYLgorICAgICAgSXQgYnVpbGRzIHVzaW5nIHRoZSBzdGFuZGFyZCBkZXZlbG9wbWVudCB0b29scyBmb3IgT1MgWC4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKzwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+Cis8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgorPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24taW50ZWdyYXRpb24td2luMzIiPgorICAgIDx0aXRsZT5XaW5kb3dzPC90aXRsZT4KKworICAgIDx3YXJuaW5nPgorPHBhcmE+CitOb3RlOiB0aGlzIHNlY3Rpb24gaXMgb3V0IG9mIGRhdGUuIEdTdHJlYW1lci0wLjEwIGhhcyBtdWNoIGJldHRlcgorc3VwcG9ydCBmb3Igd2luMzIgdGhhbiBwcmV2aW91cyB2ZXJzaW9ucyB0aG91Z2ggYW5kIHNob3VsZCB1c3VhbGx5IGNvbXBpbGUKK2FuZCB3b3JrIG91dC1vZi10aGUtYm94IGJvdGggdXNpbmcgTVNZUy9NaW5HVyBvciBNaWNyb3NvZnQgY29tcGlsZXJzLiBUaGUKKzx1bGluayB1cmw9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnIj5HU3RyZWFtZXIgd2ViIHNpdGU8L3VsaW5rPiBhbmQgdGhlCis8dWxpbmsgdXJsPSJodHRwOi8vbmV3cy5nbWFuZS5vcmcvZ21hbmUuY29tcC52aWRlby5nc3RyZWFtZXIuZGV2ZWwiPm1haWxpbmcgbGlzdAorYXJjaGl2ZXM8L3VsaW5rPiBhcmUgYSBnb29kIHBsYWNlIHRvIGNoZWNrIHRoZSBsYXRlc3Qgd2luMzItcmVsYXRlZCBuZXdzLgorPC9wYXJhPgorICAgIDwvd2FybmluZz4KKworCisgICAgPHBhcmE+CisgICAgICAmR1N0cmVhbWVyOyBidWlsZHMgdXNpbmcgTWljcm9zb2Z0IFZpc3VhbCBDIC5ORVQgMjAwMyBhbmQgdXNpbmcgQ3lnd2luLgorICAgIDwvcGFyYT4KKworICA8c2VjdDIgaWQ9InNlY3Rpb24td2luMzItYnVpbGQiPgorICA8dGl0bGU+QnVpbGRpbmcgPGFwcGxpY2F0aW9uPkdTdHJlYW1lcjwvYXBwbGljYXRpb24+IHVuZGVyIFdpbjMyPC90aXRsZT4KKworPHBhcmE+VGhlcmUgYXJlIGRpZmZlcmVudCBtYWtlZmlsZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBidWlsZCBHU3RyZWFtZXIgd2l0aCB0aGUgdXN1YWwgTWljcm9zb2Z0IAorY29tcGlsaW5nIHRvb2xzLjwvcGFyYT4KKworPHBhcmE+VGhlIE1ha2VmaWxlIGlzIG1lYW50IHRvIGJlIHVzZWQgd2l0aCB0aGUgR05VIG1ha2UgcHJvZ3JhbSBhbmQgdGhlIGZyZWUgCit2ZXJzaW9uIG9mIHRoZSBNaWNyb3NvZnQgY29tcGlsZXIgKDx1bGluayB1cmw9Imh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vdmlzdWFsYy92Y3Rvb2xraXQyMDAzLyI+aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS92aXN1YWxjL3ZjdG9vbGtpdDIwMDMvPC91bGluaz4pLiBZb3UgYWxzbyAKK2hhdmUgdG8gbW9kaWZ5IHlvdXIgc3lzdGVtIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byB1c2UgaXQgZnJvbSB0aGUgY29tbWFuZC1saW5lLiBZb3Ugd2lsbCBhbHNvIAorbmVlZCBhIHdvcmtpbmcgUGxhdGZvcm0gU0RLIGZvciBXaW5kb3dzIHRoYXQgaXMgYXZhaWxhYmxlIGZvciBmcmVlIGZyb20gTWljcm9zb2Z0LjwvcGFyYT4KKworPHBhcmE+VGhlIHByb2plY3RzL21ha2VmaWxlcyB3aWxsIGdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgc29tZSBzb3VyY2UgZmlsZXMgbmVlZGVkIHRvIGNvbXBpbGUgCitHU3RyZWFtZXIuIFRoYXQgcmVxdWlyZXMgdGhhdCB5b3UgaGF2ZSBpbnN0YWxsZWQgb24geW91ciBzeXN0ZW0gc29tZSBHTlUgdG9vbHMgYW5kIHRoYXQgdGhleSBhcmUgCithdmFpbGFibGUgaW4geW91ciBzeXN0ZW0gUEFUSC48L3BhcmE+CisKKzxwYXJhPlRoZSBHU3RyZWFtZXIgcHJvamVjdCBkZXBlbmRzIG9uIG90aGVyIGxpYnJhcmllcywgbmFtZWx5IDo8L3BhcmE+Cis8aXRlbWl6ZWRsaXN0PgorPGxpc3RpdGVtPjxwYXJhPkdMaWI8L3BhcmE+PC9saXN0aXRlbT4KKzxsaXN0aXRlbT48cGFyYT5saWJ4bWwyPC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+bGliaW50bDwvcGFyYT48L2xpc3RpdGVtPgorPGxpc3RpdGVtPjxwYXJhPmxpYmljb252PC9wYXJhPjwvbGlzdGl0ZW0+Cis8L2l0ZW1pemVkbGlzdD4KKworPHBhcmE+V29yayBpcyBiZWluZyBkb25lIHRvIHByb3ZpZGUgcHJlLWNvbXBpbGVkIEdTdHJlYW1lci0wLjEwIGxpYnJhcmllcyBhcworYSBwYWNrYWdlcyBmb3Igd2luMzIuIENoZWNrIHRoZSA8dWxpbmsgdXJsPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZyI+CitHU3RyZWFtZXIgd2ViIHNpdGU8L3VsaW5rPiBhbmQgY2hlY2sgb3VyCis8dWxpbmsgdXJsPSJodHRwOi8vbmV3cy5nbWFuZS5vcmcvZ21hbmUuY29tcC52aWRlby5nc3RyZWFtZXIuZGV2ZWwiPm1haWxpbmcgbGlzdAorPC91bGluaz4gZm9yIHRoZSBsYXRlc3QgZGV2ZWxvcG1lbnRzIGluIHRoaXMgcmVzcGVjdC48L3BhcmE+CisKKzxub3RlPgorPHRpdGxlPk5vdGVzPC90aXRsZT4KKworPHBhcmE+R05VIHRvb2xzIG5lZWRlZCB0aGF0IHlvdSBjYW4gZmluZCBvbiA8dWxpbmsgdXJsPSJodHRwOi8vZ251d2luMzIuc291cmNlZm9yZ2UubmV0LyI+aHR0cDovL2dudXdpbjMyLnNvdXJjZWZvcmdlLm5ldC88L3VsaW5rPjwvcGFyYT4KKzxpdGVtaXplZGxpc3Q+Cis8bGlzdGl0ZW0+PHBhcmE+R05VIGZsZXggICAgICAodGVzdGVkIHdpdGggMi41LjQpPC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+R05VIGJpc29uICAgICAodGVzdGVkIHdpdGggMS4zNSk8L3BhcmE+PC9saXN0aXRlbT4KKzwvaXRlbWl6ZWRsaXN0PgorCis8cGFyYT5hbmQgPHVsaW5rIHVybD0iaHR0cDovL3d3dy5taW5ndy5vcmcvIj5odHRwOi8vd3d3Lm1pbmd3Lm9yZy88L3VsaW5rPjwvcGFyYT4KKzxpdGVtaXplZGxpc3Q+Cis8bGlzdGl0ZW0+PHBhcmE+R05VIG1ha2UgICAgICAodGVzdGVkIHdpdGggMy44MCk8L3BhcmE+PC9saXN0aXRlbT4KKzwvaXRlbWl6ZWRsaXN0PgorCis8cGFyYT50aGUgZ2VuZXJhdGVkIGZpbGVzIGZyb20gdGhlIC1hdXRvIG1ha2VmaWxlcyB3aWxsIGJlIGF2YWlsYWJsZSBzb29uIHNlcGFyYXRlbHkgb24gdGhlIG5ldCAKK2ZvciBjb252ZW5pZW5jZSAocGVvcGxlIHdobyBkb24ndCB3YW50IHRvIGluc3RhbGwgR05VIHRvb2xzKS48L3BhcmE+Cis8L25vdGU+Cis8L3NlY3QyPgorCisgIDxzZWN0MiBpZD0ic2VjdGlvbi13aW4zMi1pbnN0YWxsIj4KKzx0aXRsZT5JbnN0YWxsYXRpb24gb24gdGhlIHN5c3RlbTwvdGl0bGU+CisKKzxwYXJhPkZJWE1FOiBUaGlzIHNlY3Rpb24gbmVlZHMgYmUgdXBkYXRlZCBmb3IgR1N0cmVhbWVyLTAuMTAuPC9wYXJhPgorCis8IS0tCis8cGFyYT5CeSBkZWZhdWx0LCBHU3RyZWFtZXIgbmVlZHMgYSByZWdpc3RyeS4gWW91IGhhdmUgdG8gZ2VuZXJhdGUgaXQgdXNpbmcgImdzdC1yZWdpc3Rlci5leGUiLiBJdCB3aWxsIGNyZWF0ZQordGhlIGZpbGUgaW4gYzpcZ3N0cmVhbWVyXHJlZ2lzdHJ5LnhtbCB0aGF0IHdpbGwgaG9sZCBhbGwgdGhlIHBsdWdpbnMgeW91IGNhbiB1c2UuPC9wYXJhPgorCis8cGFyYT5Zb3Ugc2hvdWxkIGluc3RhbGwgdGhlIEdTdHJlYW1lciBjb3JlIGluIGM6XGdzdHJlYW1lclxiaW4gYW5kIHRoZSBwbHVnaW5zIGluIGM6XGdzdHJlYW1lclxwbHVnaW5zLiAgQm90aAorZGlyZWN0b3JpZXMgc2hvdWxkIGJlIGFkZGVkIHRvIHlvdXIgc3lzdGVtIFBBVEguIFRoZSBsaWJyYXJ5IGRlcGVuZGVuY2llcyBzaG91bGQgYmUgaW5zdGFsbGVkIGluIGM6XHVzcjwvcGFyYT4KKworPHBhcmE+Rm9yIGV4YW1wbGUsIG15IGN1cnJlbnQgc2V0dXAgaXMgOjwvcGFyYT4KKworPGl0ZW1pemVkbGlzdD4KKzxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YzpcZ3N0cmVhbWVyXHJlZ2lzdHJ5LnhtbDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmM6XGdzdHJlYW1lclxiaW5cZ3N0LWluc3BlY3QuZXhlPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKzxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YzpcZ3N0cmVhbWVyXGJpblxnc3QtbGF1bmNoLmV4ZTwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmM6XGdzdHJlYW1lclxiaW5cZ3N0LXJlZ2lzdGVyLmV4ZTwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmM6XGdzdHJlYW1lclxiaW5cZ3N0Ynl0ZXN0cmVhbS5kbGw8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jOlxnc3RyZWFtZXJcYmluXGdzdGVsZW1lbnRzLmRsbDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmM6XGdzdHJlYW1lclxiaW5cZ3N0b3B0aW1hbHNjaGVkdWxlci5kbGw8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jOlxnc3RyZWFtZXJcYmluXGdzdHNwaWRlci5kbGw8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jOlxnc3RyZWFtZXJcYmluXGxpYmd0cmVhbWVyLTAuOC5kbGw8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jOlxnc3RyZWFtZXJccGx1Z2luc1xnc3QtbGlicy5kbGw8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jOlxnc3RyZWFtZXJccGx1Z2luc1xnc3RtYXRyb3NrYS5kbGw8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jOlx1c3JcYmluXGljb252LmRsbDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmM6XHVzclxiaW5caW50bC5kbGw8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jOlx1c3JcYmluXGxpYmdsaWItMi4wLTAuZGxsPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKzxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YzpcdXNyXGJpblxsaWJnbW9kdWxlLTIuMC0wLmRsbDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmM6XHVzclxiaW5cbGliZ29iamVjdC0yLjAtMC5kbGw8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jOlx1c3JcYmluXGxpYmd0aHJlYWQtMi4wLTAuZGxsPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKzxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YzpcdXNyXGJpblxsaWJ4bWwyLmRsbDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+Cis8L2l0ZW1pemVkbGlzdD4KKy0tPgorCisgIDwvc2VjdDI+CisKKyAgPC9zZWN0MT4KKworPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvYXBwZW5kaXgtbGljZW5zaW5nLnhtbCBiL2RvY3MvbWFudWFsL2FwcGVuZGl4LWxpY2Vuc2luZy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI4YTZjYwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbWFudWFsL2FwcGVuZGl4LWxpY2Vuc2luZy54bWwKQEAgLTAsMCArMSwxMDEgQEAKKzxjaGFwdGVyIGlkPSJjaGFwdGVyLWxpY2Vuc2luZyI+Cis8dGl0bGU+TGljZW5zaW5nIGFkdmlzb3J5PC90aXRsZT4KKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWFwcGxpY2F0aW9uLWxpY2Vuc2luZyI+CisgIDx0aXRsZT5Ib3cgdG8gbGljZW5zZSB0aGUgYXBwbGljYXRpb25zIHlvdSBidWlsZCB3aXRoIDxhcHBsaWNhdGlvbj5HU3RyZWFtZXI8L2FwcGxpY2F0aW9uPjwvdGl0bGU+Cis8cGFyYT4KK1RoZSBsaWNlbnNpbmcgb2YgR1N0cmVhbWVyIGlzIG5vIGRpZmZlcmVudCBmcm9tIGEgbG90IG9mIG90aGVyIGxpYnJhcmllcyAKK291dCB0aGVyZSBsaWtlIEdUSysgb3IgZ2xpYmM6IHdlIHVzZSB0aGUgTEdQTC4gV2hhdCBjb21wbGljYXRlcyB0aGluZ3MgCit3aXRoIHJlZ2FyZHMgdG8gR1N0cmVhbWVyIGlzIGl0cyBwbHVnaW4tYmFzZWQgZGVzaWduIGFuZCB0aGUgaGVhdmlseSAKK3BhdGVudGVkIGFuZCBwcm9wcmlldGFyeSBuYXR1cmUgb2YgbWFueSBtdWx0aW1lZGlhIGNvZGVjcy4gV2hpbGUgcGF0ZW50cyAKK29uIHNvZnR3YXJlIGFyZSBjdXJyZW50bHkgb25seSBhbGxvd2VkIGluIGEgc21hbGwgbWlub3JpdHkgb2Ygd29ybGQgCitjb3VudHJpZXMgKHRoZSBVUyBhbmQgQXVzdHJhbGlhIGJlaW5nIHRoZSBtb3N0IGltcG9ydGFudCBvZiB0aG9zZSksIHRoZSAKK3Byb2JsZW0gaXMgdGhhdCBkdWUgdG8gdGhlIGNlbnRyYWwgcGxhY2UgdGhlIFVTIGhvbGQgaW4gdGhlIHdvcmxkIGVjb25vbXkgCithbmQgdGhlIGNvbXB1dGluZyBpbmR1c3RyeSwgc29mdHdhcmUgcGF0ZW50cyBhcmUgaGFyZCB0byBpZ25vcmUgd2hlcmV2ZXIgCit5b3UgYXJlLgorCitEdWUgdG8gdGhpcyBzaXR1YXRpb24sIG1hbnkgY29tcGFuaWVzLCBpbmNsdWRpbmcgbWFqb3IgR05VL0xpbnV4IAorZGlzdHJpYnV0aW9ucywgZ2V0IHRyYXBwZWQgaW4gYSBzaXR1YXRpb24gd2hlcmUgdGhleSBlaXRoZXIgZ2V0IGJhZCAKK3Jldmlld3MgZHVlIHRvIGxhY2tpbmcgb3V0LW9mLXRoZS1ib3ggbWVkaWEgcGxheWJhY2sgY2FwYWJpbGl0aWVzIChhbmQgCithdHRlbXB0cyB0byBlZHVjYXRlIHRoZSByZXZpZXdlcnMgaGF2ZSBtZXQgd2l0aCBsaXR0bGUgc3VjY2VzcyBzbyBmYXIpLCBvciAKK2dvIGFnYWluc3QgdGhlaXIgb3duIC0gYW5kIHRoZSBmcmVlIHNvZnR3YXJlIG1vdmVtZW50J3MgLSB3aXNoIHRvIGF2b2lkIAorcHJvcHJpZXRhcnkgc29mdHdhcmUuIER1ZSB0byBjb21wZXRpdGl2ZSBwcmVzc3VyZSwgbW9zdCBjaG9vc2UgdG8gYWRkIHNvbWUgCitzdXBwb3J0LiBEb2luZyB0aGF0IHRocm91Z2ggcHVyZSBmcmVlIHNvZnR3YXJlIHNvbHV0aW9ucyB3b3VsZCBoYXZlIHRoZW0gCityaXNrIGhlYXZ5IGxpdGlnYXRpb24gYW5kIHB1bmlzaG1lbnQgZnJvbSBwYXRlbnQgb3duZXJzLiBTbyB3aGVuIHRoZSAKK2RlY2lzaW9uIGlzIG1hZGUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBwYXRlbnRlZCBjb2RlY3MsIGl0IGxlYXZlcyB0aGVtIAordGhlIGNob2ljZSBvZiBlaXRoZXIgdXNpbmcgc3BlY2lhbCBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMsIG9yIHRyeSB0byAKK2ludGVncmF0ZSB0aGUgc3VwcG9ydCBmb3IgdGhlc2UgY29kZWNzIHRocm91Z2ggcHJvcHJpZXRhcnkgcGx1Z2lucyBpbnRvIAordGhlIG11bHRpbWVkaWEgaW5mcmFzdHJ1Y3R1cmUgcHJvdmlkZWQgYnkgR1N0cmVhbWVyLiBGYWNlZCB3aXRoIG9uZSBvZiAKK3RoZXNlIHR3byBldmlscyB0aGUgR1N0cmVhbWVyIGNvbW11bml0eSBvZiBjb3Vyc2UgcHJlZmVyIHRoZSBzZWNvbmQgb3B0aW9uLgorPC9wYXJhPgorPHBhcmE+CitUaGUgcHJvYmxlbSB3aGljaCBhcmlzZXMgaXMgdGhhdCBtb3N0IGZyZWUgc29mdHdhcmUgYW5kIG9wZW4gc291cmNlIAorYXBwbGljYXRpb25zIGRldmVsb3BlZCB1c2UgdGhlIEdQTCBhcyB0aGVpciBsaWNlbnNlLiBXaGlsZSB0aGlzIGlzIAorZ2VuZXJhbGx5IGEgZ29vZCB0aGluZywgaXQgY3JlYXRlcyBhIGRpbGVtbWEgZm9yIHBlb3BsZSB3aG8gd2FudCB0byBwdXQgCit0b2dldGhlciBhIGRpc3RyaWJ1dGlvbi4gVGhlIGRpbGVtbWEgdGhleSBmYWNlIGlzIHRoYXQgaWYgdGhleSBpbmNsdWRlIAorcHJvcHJpZXRhcnkgcGx1Z2lucyBpbiBHU3RyZWFtZXIgdG8gc3VwcG9ydCBwYXRlbnRlZCBmb3JtYXRzIGluIGEgd2F5IHRoYXQgCitpcyBsZWdhbCBmb3IgdGhlbSwgdGhleSBkbyByaXNrIHJ1bm5pbmcgYWZvdWwgb2YgdGhlIEdQTCBsaWNlbnNlIG9mIHRoZSAKK2FwcGxpY2F0aW9ucy4gV2UgaGF2ZSBnb3R0ZW4gc29tZSBjb25mbGljdGluZyByZXBvcnRzIGZyb20gbGF3eWVycyBvbiAKK3doZXRoZXIgdGhpcyBpcyBhY3R1YWxseSBhIHByb2JsZW0sIGJ1dCB0aGUgb2ZmaWNpYWwgc3RhbmNlIG9mIHRoZSBGU0YgaXMgCit0aGF0IGl0IGlzIGEgcHJvYmxlbS4gV2UgdmlldyB0aGUgRlNGIGFzIGFuIGF1dGhvcml0eSBvbiB0aGlzIG1hdHRlciwgc28gCit3ZSBhcmUgaW5jbGluZWQgdG8gZm9sbG93IHRoZWlyIGludGVycHJldGF0aW9uIG9mIHRoZSBHUEwgbGljZW5zZS4KKzwvcGFyYT4KKzxwYXJhPgorU28gd2hhdCBkb2VzIHRoaXMgbWVhbiBmb3IgeW91IGFzIGFuIGFwcGxpY2F0aW9uIGRldmVsb3Blcj8gV2VsbCwgaXQgbWVhbnMgCit5b3UgaGF2ZSB0byBtYWtlIGFuIGFjdGl2ZSBkZWNpc2lvbiBvbiB3aGV0aGVyIHlvdSB3YW50IHlvdXIgYXBwbGljYXRpb24gCit0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggcHJvcHJpZXRhcnkgcGx1Z2lucyBvciBub3QuIFdoYXQgeW91IGRlY2lkZSBoZXJlIAord2lsbCBhbHNvIGluZmx1ZW5jZSB0aGUgY2hhbmNlcyBvZiBjb21tZXJjaWFsIGRpc3RyaWJ1dGlvbnMgYW5kIFVuaXggCit2ZW5kb3JzIHNoaXBwaW5nIHlvdXIgYXBwbGljYXRpb24uIFRoZSBHU3RyZWFtZXIgY29tbXVuaXR5IHN1Z2dlc3QgeW91IAorbGljZW5zZSB5b3VyIHNvZnR3YXJlIHVzaW5nIGEgbGljZW5zZSB0aGF0IHdpbGwgYWxsb3cgcHJvcHJpZXRhcnkgcGx1Z2lucyAKK3RvIGJlIGJ1bmRsZWQgd2l0aCBHU3RyZWFtZXIgYW5kIHlvdXIgYXBwbGljYXRpb25zLCBpbiBvcmRlciB0byBtYWtlIHN1cmUgCit0aGF0IGFzIG1hbnkgdmVuZG9ycyBhcyBwb3NzaWJsZSBnbyB3aXRoIEdTdHJlYW1lciBpbnN0ZWFkIG9mIGxlc3MgZnJlZSAKK3NvbHV0aW9ucy4gVGhpcyBpbiB0dXJuIHdlIGhvcGUgYW5kIHRoaW5rIHdpbGwgbGV0IEdTdHJlYW1lciBiZSBhIHZlaGljbGUgCitmb3Igd2lkZXIgdXNlIG9mIGZyZWUgZm9ybWF0cyBsaWtlIHRoZSBYaXBoLm9yZyBmb3JtYXRzLgorPC9wYXJhPgorPHBhcmE+CitJZiB5b3UgZG8gZGVjaWRlIHRoYXQgeW91IHdhbnQgdG8gYWxsb3cgZm9yIG5vbi1mcmVlIHBsdWdpbnMgdG8gYmUgdXNlZCAKK3dpdGggeW91ciBhcHBsaWNhdGlvbiB5b3UgaGF2ZSBhIHZhcmlldHkgb2YgY2hvaWNlcy4gT25lIG9mIHRoZSBzaW1wbGVzdCAKK2lzIHVzaW5nIGxpY2Vuc2VzIGxpa2UgTEdQTCwgTVBMIG9yIEJTRCBmb3IgeW91ciBhcHBsaWNhdGlvbiBpbnN0ZWFkIG9mIAordGhlIEdQTC4gT3IgeW91IGNhbiBhZGQgYW4gZXhjZXB0aW9uIGNsYXVzZSB0byB5b3VyIEdQTCBsaWNlbnNlIHN0YXRpbmcgCit0aGF0IHlvdSBleGNlcHQgR1N0cmVhbWVyIHBsdWdpbnMgZnJvbSB0aGUgb2JsaWdhdGlvbnMgb2YgdGhlIEdQTC4KKzwvcGFyYT4KKzxwYXJhPgorQSBnb29kIGV4YW1wbGUgb2Ygc3VjaCBhIEdQTCBleGNlcHRpb24gY2xhdXNlIHdvdWxkIGJlLCB1c2luZyB0aGUKK1RvdGVtIHZpZGVvIHBsYXllciBwcm9qZWN0IGFzIGFuIGV4YW1wbGU6CitUaGUgYXV0aG9ycyBvZiB0aGUgVG90ZW0gdmlkZW8gcGxheWVyIHByb2plY3QgaGVyZWJ5IGdyYW50cyBwZXJtaXNzaW9uIAorZm9yIG5vbi1HUEwtY29tcGF0aWJsZSBHU3RyZWFtZXIgcGx1Z2lucyB0byBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCAKK3RvZ2V0aGVyIHdpdGggR1N0cmVhbWVyIGFuZCBUb3RlbS4gVGhpcyBwZXJtaXNzaW9uIGdvZXMgYWJvdmUgYW5kIGJleW9uZCAKK3RoZSBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoZSBHUEwgbGljZW5zZSBUb3RlbSBpcyBjb3ZlcmVkIGJ5LgorPC9wYXJhPgorPHBhcmE+CitPdXIgc3VnZ2VzdGlvbiBhbW9uZyB0aGVzZSBjaG9pY2VzIGlzIHRvIHVzZSB0aGUgTEdQTCBsaWNlbnNlLCBhcyBpdCBpcyAKK3doYXQgcmVzZW1ibGVzIHRoZSBHUEwgbW9zdCBhbmQgaXQgbWFrZXMgaXQgYSBnb29kIGxpY2Vuc2luZyBmaXQgd2l0aCB0aGUgCittYWpvciBHTlUvTGludXggZGVza3RvcCBwcm9qZWN0cyBsaWtlIEdOT01FIGFuZCBLREUuIEl0IGFsc28gYWxsb3dzIHlvdSB0byAKK3NoYXJlIGNvZGUgbW9yZSBvcGVubHkgd2l0aCBwcm9qZWN0cyB0aGF0IGhhdmUgY29tcGF0aWJsZSBsaWNlbnNlcy4gCitPYnZpb3VzbHksIHB1cmUgR1BMIGNvZGUgd2l0aG91dCB0aGUgYWJvdmUtbWVudGlvbmVkIGNsYXVzZSBpcyBub3QgdXNhYmxlIAoraW4geW91ciBhcHBsaWNhdGlvbiBhcyBzdWNoLiBCeSBjaG9vc2luZyB0aGUgTEdQTCwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYW4gCitleGNlcHRpb24gY2xhdXNlIGFuZCB0aHVzIGNvZGUgY2FuIGJlIHNoYXJlZCBtb3JlIGZyZWVseS4KKzwvcGFyYT4KKzxwYXJhPgorSSBoYXZlIGFib3ZlIG91dGxpbmVkIHRoZSBwcmFjdGljYWwgcmVhc29ucyBmb3Igd2h5IHRoZSBHU3RyZWFtZXIgCitjb21tdW5pdHkgc3VnZ2VzdHMgeW91IGFsbG93IG5vbi1mcmVlIHBsdWdpbnMgdG8gYmUgdXNlZCB3aXRoIHlvdXIgCithcHBsaWNhdGlvbnMuIFdlIGZlZWwgdGhhdCBpbiB0aGUgbXVsdGltZWRpYSBhcmVuYSwgdGhlIGZyZWUgc29mdHdhcmUgCitjb21tdW5pdHkgaXMgc3RpbGwgbm90IHN0cm9uZyBlbm91Z2ggdG8gc2V0IHRoZSBhZ2VuZGEgYW5kIHRoYXQgYmxvY2tpbmcgCitub24tZnJlZSBwbHVnaW5zIHRvIGJlIHVzZWQgaW4gb3VyIGluZnJhc3RydWN0dXJlIGh1cnRzIHVzIG1vcmUgdGhhbiBpdCAKK2h1cnRzIHRoZSBwYXRlbnQgb3duZXJzIGFuZCB0aGVpciBpbGsuCis8L3BhcmE+Cis8cGFyYT4KK1RoaXMgdmlldyBpcyBub3Qgc2hhcmVkIGJ5IGV2ZXJ5b25lLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHVyZ2VzIAoreW91IHRvIHVzZSBhbiB1bm1vZGlmaWVkIEdQTCBmb3IgeW91ciBhcHBsaWNhdGlvbnMsIHNvIGFzIHRvIHB1c2ggYmFjayAKK2FnYWluc3QgdGhlIHRlbXB0YXRpb24gdG8gdXNlIG5vbi1mcmVlIHBsdWctaW5zLiBUaGV5IHNheSB0aGF0IHNpbmNlIG5vdCAKK2V2ZXJ5b25lIGVsc2UgaGFzIHRoZSBzdHJlbmd0aCB0byByZWplY3QgdGhlbSBiZWNhdXNlIHRoZXkgYXJlIHVuZXRoaWNhbCwgCit0aGV5IGFzayB5b3VyIGhlbHAgdG8gZ2l2ZSB0aGVtIGEgbGVnYWwgcmVhc29uIHRvIGRvIHNvLiAKKzwvcGFyYT4KKzxwYXJhPgorVGhpcyBhZHZpc29yeSBpcyBwYXJ0IG9mIGEgYmlnZ2VyIGFkdmlzb3J5IHdpdGggYSBGQVEgd2hpY2ggeW91IGNhbiBmaW5kCitvbiB0aGUgPHVsaW5rIHVybD0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZG9jdW1lbnRhdGlvbi9saWNlbnNpbmcuaHRtbCI+R1N0cmVhbWVyIHdlYnNpdGU8L3VsaW5rPgorPC9wYXJhPgorCisKKzwvc2VjdDE+CisKKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2FwcGVuZGl4LXBvcnRpbmcueG1sIGIvZG9jcy9tYW51YWwvYXBwZW5kaXgtcG9ydGluZy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUyYzhjYgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbWFudWFsL2FwcGVuZGl4LXBvcnRpbmcueG1sCkBAIC0wLDAgKzEsMTMwIEBACis8Y2hhcHRlciBpZD0iY2hhcHRlci1wb3J0aW5nIj4KKyAgPHRpdGxlPlBvcnRpbmcgMC44IGFwcGxpY2F0aW9ucyB0byAwLjEwPC90aXRsZT4KKyAgPHBhcmE+CisgICAgVGhpcyBzZWN0aW9uIG9mIHRoZSBhcHBlbmRpeCB3aWxsIGRpc2N1c3Mgc2hvcnRseSB3aGF0IGNoYW5nZXMgdG8KKyAgICBhcHBsaWNhdGlvbnMgd2lsbCBiZSBuZWVkZWQgdG8gcXVpY2tseSBhbmQgY29udmVuaWVudGx5IHBvcnQgbW9zdAorICAgIGFwcGxpY2F0aW9ucyBmcm9tICZHU3RyZWFtZXI7LTAuOCB0byAmR1N0cmVhbWVyOy0wLjEwLCB3aXRoIHJlZmVyZW5jZXMKKyAgICB0byB0aGUgcmVsZXZhbnQgc2VjdGlvbnMgaW4gdGhpcyBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBNYW51YWwKKyAgICB3aGVyZSBuZWVkZWQuIFdpdGggdGhpcyBsaXN0LCBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcG9ydCBzaW1wbGUKKyAgICBhcHBsaWNhdGlvbnMgdG8gJkdTdHJlYW1lcjstMC4xMCBpbiBsZXNzIHRoYW4gYSBkYXkuCisgIDwvcGFyYT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tcG9ydGluZy1vYmplY3RzIj4KKyAgICA8dGl0bGU+TGlzdCBvZiBjaGFuZ2VzPC90aXRsZT4KKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBNb3N0IGZ1bmN0aW9ucyByZXR1cm5pbmcgYW4gb2JqZWN0IG9yIGFuIG9iamVjdCBwcm9wZXJ0eSBoYXZlCisgICAgICAgICAgYmVlbiBjaGFuZ2VkIHRvIHJldHVybiBpdHMgb3duIHJlZmVyZW5jZSByYXRoZXIgdGhhbiBhIGNvbnN0YW50CisgICAgICAgICAgcmVmZXJlbmNlIG9mIHRoZSBvbmUgb3duZWQgYnkgdGhlIG9iamVjdCBpdHNlbGYuIFRoZSByZWFzb24gZm9yCisgICAgICAgICAgdGhpcyBjaGFuZ2UgaXMgcHJpbWFyaWx5IHRocmVhZCBzYWZldHkuIFRoaXMgbWVhbnMsIGVmZmVjdGl2ZWx5LAorICAgICAgICAgIHRoYXQgcmV0dXJuIHZhbHVlcyBvZiBmdW5jdGlvbnMgc3VjaCBhcworICAgICAgICAgIDxmdW5jdGlvbj5nc3RfZWxlbWVudF9nZXRfcGFkICgpPC9mdW5jdGlvbj4sCisgICAgICAgICAgPGZ1bmN0aW9uPmdzdF9wYWRfZ2V0X25hbWUgKCk8L2Z1bmN0aW9uPiBhbmQgbWFueSBtb3JlIGxpa2UgdGhlc2UKKyAgICAgICAgICBoYXZlIHRvIGJlIGZyZWUnZWQgb3IgdW5yZWZlcmVuY2VkIGFmdGVyIHVzZS4gQ2hlY2sgdGhlIEFQSQorICAgICAgICAgIHJlZmVyZW5jZXMgb2YgZWFjaCBmdW5jdGlvbiB0byBrbm93IGZvciBzdXJlIHdoZXRoZXIgcmV0dXJuCisgICAgICAgICAgdmFsdWVzIHNob3VsZCBiZSBmcmVlJ2VkIG9yIG5vdC4gSXQgaXMgaW1wb3J0YW50IHRoYXQgYWxsIG9iamVjdHMKKyAgICAgICAgICBkZXJpdmVkIGZyb20gR3N0T2JqZWN0IGFyZSByZWYnZWQvdW5yZWYnZWQgdXNpbmcgZ3N0X29iamVjdF9yZWYoKQorICAgICAgICAgIGFuZCBnc3Rfb2JqZWN0X3VucmVmKCkgcmVzcGVjdGl2ZWx5IChpbnN0ZWFkIG9mIGdfb2JqZWN0X3JlZi91bnJlZikuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEFwcGxpY2F0aW9ucyBzaG91bGQgbm8gbG9uZ2VyIHVzZSBzaWduYWwgaGFuZGxlcnMgdG8gYmUgbm90aWZpZWQKKyAgICAgICAgICBvZiBlcnJvcnMsIGVuZC1vZi1zdHJlYW0gYW5kIG90aGVyIHNpbWlsYXIgcGlwZWxpbmUgZXZlbnRzLgorICAgICAgICAgIEluc3RlYWQsIHRoZXkgc2hvdWxkIHVzZSB0aGUgPGNsYXNzbmFtZT5Hc3RCdXM8L2NsYXNzbmFtZT4sIHdoaWNoCisgICAgICAgICAgaGFzIGJlZW4gZGlzY3Vzc2VkIGluIDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItYnVzIi8+LiBUaGUgYnVzIHdpbGwKKyAgICAgICAgICB0YWtlIGNhcmUgdGhhdCB0aGUgbWVzc2FnZXMgd2lsbCBiZSBkZWxpdmVyZWQgaW4gdGhlIGNvbnRleHQgb2YgYQorICAgICAgICAgIG1haW4gbG9vcCwgd2hpY2ggaXMgYWxtb3N0IGNlcnRhaW5seSB0aGUgYXBwbGljYXRpb24ncyBtYWluIHRocmVhZC4KKyAgICAgICAgICBUaGUgYmlnIGFkdmFudGFnZSBvZiB0aGlzIGlzIHRoYXQgYXBwbGljYXRpb25zIG5vIGxvbmdlciBuZWVkIHRvCisgICAgICAgICAgYmUgdGhyZWFkLWF3YXJlOyB0aGV5IGRvbid0IG5lZWQgdG8gdXNlIDxmdW5jdGlvbj5nX2lkbGVfYWRkCisgICAgICAgICAgKCk8L2Z1bmN0aW9uPiBpbiB0aGUgc2lnbmFsIGhhbmRsZXIgYW5kIGRvIHRoZSBhY3R1YWwgcmVhbCB3b3JrCisgICAgICAgICAgaW4gdGhlIGlkbGUtY2FsbGJhY2suICZHU3RyZWFtZXI7IG5vdyBkb2VzIGFsbCB0aGF0IGludGVybmFsbHkuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFJlbGF0ZWQgdG8gdGhpcywgPGZ1bmN0aW9uPmdzdF9iaW5faXRlcmF0ZSAoKTwvZnVuY3Rpb24+IGhhcyBiZWVuCisgICAgICAgICAgcmVtb3ZlZC4gUGlwZWxpbmVzIHdpbGwgaXRlcmF0ZSBpbiB0aGVpciBvd24gdGhyZWFkLCBhbmQgYXBwbGljYXRpb25zCisgICAgICAgICAgY2FuIHNpbXBseSBydW4gYSA8Y2xhc3NuYW1lPkdNYWluTG9vcDwvY2xhc3NuYW1lPiAob3IgY2FsbCB0aGUKKyAgICAgICAgICBtYWlubG9vcCBvZiB0aGVpciBVSSB0b29sa2l0LCBzdWNoIGFzIDxmdW5jdGlvbj5ndGtfbWFpbgorICAgICAgICAgICgpPC9mdW5jdGlvbj4pLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBTdGF0ZSBjaGFuZ2VzIGNhbiBiZSBkZWxheWVkIChBU1lOQykuIER1ZSB0byB0aGUgbmV3IGZ1bGx5IHRocmVhZGVkCisgICAgICAgICAgbmF0dXJlIG9mIEdTdHJlYW1lci0wLjEwLCBzdGF0ZSBjaGFuZ2VzIGFyZSBub3QgYWx3YXlzIGltbWVkaWF0ZSwKKyAgICAgICAgICBpbiBwYXJ0aWN1bGFyIGNoYW5nZXMgaW5jbHVkaW5nIHRoZSB0cmFuc2l0aW9uIGZyb20gUkVBRFkgdG8gUEFVU0VECisgICAgICAgICAgc3RhdGUuIFRoaXMgbWVhbnMgdHdvIHRoaW5ncyBpbiB0aGUgY29udGV4dCBvZiBwb3J0aW5nIGFwcGxpY2F0aW9uczoKKyAgICAgICAgICBmaXJzdCBvZiBhbGwsIGl0IGlzIG5vIGxvbmdlciBhbHdheXMgcG9zc2libGUgdG8gZG8KKyAgICAgICAgICA8ZnVuY3Rpb24+Z3N0X2VsZW1lbnRfc2V0X3N0YXRlICgpPC9mdW5jdGlvbj4gYW5kIGNoZWNrIGZvciBhIHJldHVybgorICAgICAgICAgIHZhbHVlIG9mIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgYXMgdGhlIHN0YXRlIGNoYW5nZSBtaWdodCBiZQorICAgICAgICAgIGRlbGF5ZWQgKEFTWU5DKSBhbmQgdGhlIHJlc3VsdCB3aWxsIG5vdCBiZSBrbm93biB1bnRpbCBsYXRlci4gWW91CisgICAgICAgICAgc2hvdWxkIHN0aWxsIGNoZWNrIGZvciBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUgcmlnaHQgYXdheSwgaXQgaXMKKyAgICAgICAgICBqdXN0IG5vIGxvbmdlciBwb3NzaWJsZSB0byBhc3N1bWUgdGhhdCBldmVyeXRoaW5nIHRoYXQgaXMgbm90IFNVQ0NFU1MKKyAgICAgICAgICBtZWFucyBmYWlsdXJlLiBTZWNvbmRseSwgc3RhdGUgY2hhbmdlcyBtaWdodCBub3QgYmUgaW1tZWRpYXRlLCBzbworICAgICAgICAgIHlvdXIgY29kZSBuZWVkcyB0byB0YWtlIHRoYXQgaW50byBhY2NvdW50LiBZb3UgY2FuIHdhaXQgZm9yIGEgc3RhdGUKKyAgICAgICAgICBjaGFuZ2UgdG8gY29tcGxldGUgaWYgeW91IHVzZSBHU1RfQ0xPQ0tfVElNRV9OT05FIGFzIHRpbWVvdXQgaW50ZXJ2YWwKKyAgICAgICAgICB3aXRoIDxmdW5jdGlvbj5nc3RfZWxlbWVudF9nZXRfc3RhdGUgKCk8L2Z1bmN0aW9uPi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSW4gMC44LCBldmVudHMgYW5kIHF1ZXJpZXMgaGFkIHRvIG1hbnVhbGx5IGJlIHNlbnQgdG8gc2lua3MgaW4KKyAgICAgICAgICBwaXBlbGluZXMgKHVubGVzcyB5b3Ugd2VyZSB1c2luZyBwbGF5YmluKS4gVGhpcyBpcyBubyBsb25nZXIKKyAgICAgICAgICB0aGUgY2FzZSBpbiAwLjEwLiBJbiAwLjEwLCBxdWVyaWVzIGFuZCBldmVudHMgY2FuIGJlIHNlbnQgdG8KKyAgICAgICAgICB0b3BsZXZlbCBwaXBlbGluZXMsIGFuZCB0aGUgcGlwZWxpbmUgd2lsbCBkbyB0aGUgZGlzcGF0Y2hpbmcKKyAgICAgICAgICBpbnRlcm5hbGx5IGZvciB5b3UuIFRoaXMgbWVhbnMgbGVzcyBib29ra2VlcGluZyBpbiB5b3VyCisgICAgICAgICAgYXBwbGljYXRpb24uIEZvciBhIHNob3J0IGNvZGUgZXhhbXBsZSwgc2VlIDx4cmVmCisgICAgICAgICAgbGlua2VuZD0iY2hhcHRlci1xdWVyeWV2ZW50cyIvPi4gUmVsYXRlZCwgc2Vla2luZyBpcyBub3cKKyAgICAgICAgICB0aHJlYWRzYWZlLCBhbmQgeW91ciB2aWRlbyBvdXRwdXQgd2lsbCBzaG93IHRoZSBuZXcgdmlkZW8KKyAgICAgICAgICBwb3NpdGlvbidzIGZyYW1lIHdoaWxlIHNlZWtpbmcsIHByb3ZpZGluZyBhIGJldHRlciB1c2VyCisgICAgICAgICAgZXhwZXJpZW5jZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIDxjbGFzc25hbWU+R3N0VGhyZWFkPC9jbGFzc25hbWU+IG9iamVjdCBoYXMgYmVlbiByZW1vdmVkLgorICAgICAgICAgIEFwcGxpY2F0aW9ucyBjYW4gbm93IHNpbXBseSBwdXQgZWxlbWVudHMgaW4gYSBwaXBlbGluZSB3aXRoCisgICAgICAgICAgb3B0aW9uYWxseSBzb21lIDxxdW90ZT5xdWV1ZTwvcXVvdGU+IGVsZW1lbnRzIGluIGJldHdlZW4gZm9yCisgICAgICAgICAgYnVmZmVyaW5nLCBhbmQgJkdTdHJlYW1lcjsgd2lsbCB0YWtlIGNhcmUgb2YgY3JlYXRpbmcgdGhyZWFkcworICAgICAgICAgIGludGVybmFsbHkuIEl0IGlzIHN0aWxsIHBvc3NpYmxlIHRvIGhhdmUgcGFydHMgb2YgYSBwaXBlbGluZQorICAgICAgICAgIHJ1biBpbiBkaWZmZXJlbnQgdGhyZWFkcyB0aGFuIG90aGVycywgYnkgdXNpbmcgdGhlCisgICAgICAgICAgPHF1b3RlPnF1ZXVlPC9xdW90ZT4gZWxlbWVudC4gU2VlIDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItdGhyZWFkcyIvPgorICAgICAgICAgIGZvciBkZXRhaWxzLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBGaWx0ZXJlZCBjYXBzIC0+IGNhcHNmaWx0ZXIgZWxlbWVudCAodGhlIHBpcGVsaW5lIHN5bnRheCBmb3IKKyAgICAgICAgICBnc3QtbGF1bmNoIGhhcyBub3QgY2hhbmdlZCB0aG91Z2gpLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBsaWJnc3RnY29uZi0wLjEwLmxhIGRvZXMgbm90IGV4aXN0LiBVc2UgdGhlCisgICAgICAgICAgPHF1b3RlPmdjb25mdmlkZW9zaW5rPC9xdW90ZT4gYW5kIDxxdW90ZT5nY29uZmF1ZGlvc2luazwvcXVvdGU+CisgICAgICAgICAgZWxlbWVudHMgaW5zdGVhZCwgd2hpY2ggd2lsbCBkbyBsaXZlLXVwZGF0ZXMgYW5kIHJlcXVpcmUgbm8gbGlicmFyeQorICAgICAgICAgIGxpbmtpbmcuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSA8cXVvdGU+bmV3LXBhZDwvcXVvdGU+IGFuZCA8cXVvdGU+c3RhdGUtY2hhbmdlPC9xdW90ZT4gc2lnbmFscyBvbgorICAgICAgICAgIDxjbGFzc25hbWU+R3N0RWxlbWVudDwvY2xhc3NuYW1lPiB3ZXJlIHJlbmFtZWQgdG8KKyAgICAgICAgICA8cXVvdGU+cGFkLWFkZGVkPC9xdW90ZT4gYW5kIDxxdW90ZT5zdGF0ZS1jaGFuZ2VkPC9xdW90ZT4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxmdW5jdGlvbj5nc3RfaW5pdF9nZXRfcG9wdF90YWJsZSAoKTwvZnVuY3Rpb24+IGhhcyBiZWVuIHJlbW92ZWQKKyAgICAgICAgICBpbiBmYXZvdXIgb2YgdGhlIG5ldyBHT3B0aW9uIGNvbW1hbmQgbGluZSBvcHRpb24gQVBJIHRoYXQgd2FzCisgICAgICAgICAgYWRkZWQgdG8gR0xpYiAyLjYuIDxmdW5jdGlvbj5nc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwICgpPC9mdW5jdGlvbj4KKyAgICAgICAgICBpcyB0aGUgbmV3IEdPcHRpb24tYmFzZWQgZXF1aXZhbGVudCB0bworICAgICAgICAgIDxmdW5jdGlvbj5nc3RfaW5pdF9nZXRfcHRvcF90YWJsZSAoKTwvZnVuY3Rpb24+LgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICA8L3NlY3QxPgorPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvYXBwZW5kaXgtcHJvZ3JhbXMueG1sIGIvZG9jcy9tYW51YWwvYXBwZW5kaXgtcHJvZ3JhbXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlODRhNzUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL21hbnVhbC9hcHBlbmRpeC1wcm9ncmFtcy54bWwKQEAgLTAsMCArMSwyNzcgQEAKKzxjaGFwdGVyIGlkPSJjaGFwdGVyLXByb2dyYW1zIj4KKyAgPHRpdGxlPlByb2dyYW1zPC90aXRsZT4KKyAgPHBhcmE+IAorICA8L3BhcmE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLXByb2dyYW1zLWdzdC1sYXVuY2giPgorICAgIDx0aXRsZT48Y29tbWFuZD5nc3QtbGF1bmNoPC9jb21tYW5kPjwvdGl0bGU+CisgICAgPHBhcmE+IAorICAgICAgVGhpcyBpcyBhIHRvb2wgdGhhdCB3aWxsIGNvbnN0cnVjdCBwaXBlbGluZXMgYmFzZWQgb24gYSBjb21tYW5kLWxpbmUKKyAgICAgIHN5bnRheC4KKyAgICA8L3BhcmE+IAorICAgIDxwYXJhPiAKKyAgICAgIEEgc2ltcGxlIGNvbW1hbmRsaW5lIGxvb2tzIGxpa2U6CisKKyAgICA8c2NyZWVuPgorZ3N0LWxhdW5jaCBmaWxlc3JjIGxvY2F0aW9uPWhlbGxvLm1wMyAhIG1hZCAhIGF1ZGlvcmVzYW1wbGUgISBvc3NzaW5rCisgICAgPC9zY3JlZW4+CisKKyAgICAgIEEgbW9yZSBjb21wbGV4IHBpcGVsaW5lIGxvb2tzIGxpa2U6CisKKyAgICA8c2NyZWVuPgorZ3N0LWxhdW5jaCBmaWxlc3JjIGxvY2F0aW9uPXJlZHBpbGwudm9iICEgZHZkZGVtdXggbmFtZT1kZW11eCBcCisgZGVtdXguYXVkaW9fMDAgISBxdWV1ZSAhIGE1MmRlYyAhIGF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUgISBvc3NzaW5rIFwKKyBkZW11eC52aWRlb18wMCAhIHF1ZXVlICEgbXBlZzJkZWMgISBmZm1wZWdjb2xvcnNwYWNlICEgeHZpbWFnZXNpbmsKKyAgICA8L3NjcmVlbj4KKworICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFlvdSBjYW4gYWxzbyB1c2UgdGhlIHBhcnNlciBpbiB5b3Ugb3duCisgICAgICBjb2RlLiA8YXBwbGljYXRpb24+R1N0cmVhbWVyPC9hcHBsaWNhdGlvbj4gcHJvdmlkZXMgYSBmdW5jdGlvbgorICAgICAgZ3N0X3BhcnNlX2xhdW5jaCAoKSB0aGF0IHlvdSBjYW4gdXNlIHRvIGNvbnN0cnVjdCBhIHBpcGVsaW5lLgorICAgICAgVGhlIGZvbGxvd2luZyBwcm9ncmFtIGxldHMgeW91IGNyZWF0ZSBhbiBNUDMgcGlwZWxpbmUgdXNpbmcgdGhlCisgICAgICBnc3RfcGFyc2VfbGF1bmNoICgpIGZ1bmN0aW9uOgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3Rpbmc+CisjaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIEdzdEVsZW1lbnQgKnBpcGVsaW5lOworICBHc3RFbGVtZW50ICpmaWxlc3JjOworICBHc3RNZXNzYWdlICptc2c7CisgIEdzdEJ1cyAqYnVzOworICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKworICBnc3RfaW5pdCAoJmFtcDthcmdjLCAmYW1wO2FyZ3YpOworCisgIGlmIChhcmdjICE9IDIpIHsKKyAgICBnX3ByaW50ICgidXNhZ2U6ICVzICZsdDtmaWxlbmFtZSZndDtcbiIsIGFyZ3ZbMF0pOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIHBpcGVsaW5lID0gZ3N0X3BhcnNlX2xhdW5jaCAoImZpbGVzcmMgbmFtZT1teV9maWxlc3JjICEgbWFkICEgb3Nzc2luayIsICZhbXA7ZXJyb3IpOworICBpZiAoIXBpcGVsaW5lKSB7CisgICAgZ19wcmludCAoIlBhcnNlIGVycm9yOiAlc1xuIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgIGV4aXQgKDEpOworICB9CisgIAorICBmaWxlc3JjID0gZ3N0X2Jpbl9nZXRfYnlfbmFtZSAoR1NUX0JJTiAocGlwZWxpbmUpLCAibXlfZmlsZXNyYyIpOworICBnX29iamVjdF9zZXQgKGZpbGVzcmMsICJsb2NhdGlvbiIsIGFyZ3ZbMV0sIE5VTEwpOworCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKKworICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChwaXBlbGluZSk7CisKKyAgLyogd2FpdCB1bnRpbCB3ZSBlaXRoZXIgZ2V0IGFuIEVPUyBvciBhbiBFUlJPUiBtZXNzYWdlLiBOb3RlIHRoYXQgaW4gYSByZWFsCisgICAqIHByb2dyYW0geW91IHdvdWxkIHByb2JhYmx5IG5vdCB1c2UgZ3N0X2J1c19wb2xsKCksIGJ1dCByYXRoZXIgc2V0IHVwIGFuCisgICAqIGFzeW5jIHNpZ25hbCB3YXRjaCBvbiB0aGUgYnVzIGFuZCBydW4gYSBtYWluIGxvb3AgYW5kIGNvbm5lY3QgdG8gdGhlCisgICAqIGJ1cydzIHNpZ25hbHMgdG8gY2F0Y2ggY2VydGFpbiBtZXNzYWdlcyBvciBhbGwgbWVzc2FnZXMgKi8KKyAgbXNnID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0VPUyB8IEdTVF9NRVNTQUdFX0VSUk9SLCAtMSk7CisKKyAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpKSB7CisgICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6IHsKKyAgICAgIGdfcHJpbnQgKCJFT1NcbiIpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6IHsKKyAgICAgIEdFcnJvciAqZXJyID0gTlVMTDsgLyogZXJyb3IgdG8gc2hvdyB0byB1c2VycyAgICAgICAgICAgICAgICAgKi8KKyAgICAgIGdjaGFyICpkYmcgPSBOVUxMOyAgLyogYWRkaXRpb25hbCBkZWJ1ZyBzdHJpbmcgZm9yIGRldmVsb3BlcnMgKi8KKworICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1zZywgJmVyciwgJmRiZyk7CisgICAgICBpZiAoZXJyKSB7CisgICAgICAgIGdfcHJpbnRlcnIgKCJFUlJPUjogJXNcbiIsIGVyci0mZ3Q7bWVzc2FnZSk7CisgICAgICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKKyAgICAgIH0KKyAgICAgIGlmIChkYmcpIHsKKyAgICAgICAgZ19wcmludGVyciAoIltEZWJ1ZyBkZXRhaWxzOiAlc11cbiIsIGRiZyk7CisgICAgICAgIGdfZnJlZSAoZGJnKTsKKyAgICAgIH0KKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgIGdfcHJpbnRlcnIgKCJVbmV4cGVjdGVkIG1lc3NhZ2Ugb2YgdHlwZSAlZCIsIEdTVF9NRVNTQUdFX1RZUEUgKG1zZykpOworICAgICAgYnJlYWs7CisgIH0KKyAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOworICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7CisKKyAgcmV0dXJuIDA7Cit9CisgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8cGFyYT4KKyAgICAgIE5vdGUgaG93IHdlIGNhbiByZXRyaWV2ZSB0aGUgZmlsZXNyYyBlbGVtZW50IGZyb20gdGhlIGNvbnN0cnVjdGVkIGJpbiB1c2luZyB0aGUKKyAgICAgIGVsZW1lbnQgbmFtZS4KKyAgICA8L3BhcmE+CisgICAgPHNlY3QyPgorICAgICAgPHRpdGxlPkdyYW1tYXIgUmVmZXJlbmNlPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPGNvbW1hbmQ+Z3N0LWxhdW5jaDwvY29tbWFuZD4gc3ludGF4IGlzIHByb2Nlc3NlZCBieSBhIGZsZXgvYmlzb24gcGFyc2VyLiBUaGlzIHNlY3Rpb24KKyAgICAgICAgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBhIGZ1bGwgc3BlY2lmaWNhdGlvbiBvZiB0aGUgZ3JhbW1hcjsgYW55IGRldmlhdGlvbnMgZnJvbSB0aGlzCisgICAgICAgIHNwZWNpZmljYXRpb24gaXMgY29uc2lkZXJlZCBhIGJ1Zy4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxzZWN0Mz4KKyAgICAgICAgPHRpdGxlPkVsZW1lbnRzPC90aXRsZT4KKyAgICAgICAgPHNjcmVlbj4KKyAgICAgICAgICAuLi4gbWFkIC4uLgorICAgICAgICA8L3NjcmVlbj4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQSBiYXJlIGlkZW50aWZpZXIgKGEgc3RyaW5nIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBjb250YWluaW5nCisgICAgICAgICAgb25seSBsZXR0ZXJzLCBudW1iZXJzLCBkYXNoZXMsIHVuZGVyc2NvcmVzLCBwZXJjZW50IHNpZ25zLCBvciBjb2xvbnMpCisgICAgICAgICAgd2lsbCBjcmVhdGUgYW4gZWxlbWVudCBmcm9tIGEgZ2l2ZW4gZWxlbWVudCBmYWN0b3J5LiBJbiB0aGlzIGV4YW1wbGUsCisgICAgICAgICAgYW4gaW5zdGFuY2Ugb2YgdGhlICJtYWQiIE1QMyBkZWNvZGluZyBwbHVnaW4gd2lsbCBiZSBjcmVhdGVkLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3QzPiAgICAgICAgICAKKyAgICAgIDxzZWN0Mz4KKyAgICAgICAgPHRpdGxlPkxpbmtzPC90aXRsZT4KKyAgICAgICAgPHNjcmVlbj4KKyAgICAgICAgICAuLi4gIXNpbmsgLi4uCisgICAgICAgIDwvc2NyZWVuPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBbiBleGNsYW1hdGlvbiBwb2ludCwgb3B0aW9uYWxseSBoYXZpbmcgYSBxdWFsaWZpZWQgcGFkIG5hbWUgKGFuIHRoZSBuYW1lIG9mIHRoZSBwYWQsCisgICAgICAgICAgb3B0aW9uYWxseSBwcmVjZWRlZCBieSB0aGUgbmFtZSBvZiB0aGUgZWxlbWVudCkgb24gYm90aCBzaWRlcywgd2lsbCBsaW5rIHR3byBwYWRzLiBJZgorICAgICAgICAgIHRoZSBzb3VyY2UgcGFkIGlzIG5vdCBzcGVjaWZpZWQsIGEgc291cmNlIHBhZCBmcm9tIHRoZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcgZWxlbWVudAorICAgICAgICAgIHdpbGwgYmUgYXV0b21hdGljYWxseSBjaG9zZW4uIElmIHRoZSBzaW5rIHBhZCBpcyBub3Qgc3BlY2lmaWVkLCBhIHNpbmsgcGFkIGZyb20gdGhlIG5leHQKKyAgICAgICAgICBlbGVtZW50IHRvIGJlIGNvbnN0cnVjdGVkIHdpbGwgYmUgY2hvc2VuLiBBbiBhdHRlbXB0IHdpbGwgYmUgbWFkZSB0byBmaW5kIGNvbXBhdGlibGUKKyAgICAgICAgICBwYWRzLiBQYWQgbmFtZXMgbWF5IGJlIHByZWNlZGVkIGJ5IGFuIGVsZW1lbnQgbmFtZSwgYXMgaW4KKyAgICAgICAgICA8Y29tcHV0ZXJvdXRwdXQ+bXlfZWxlbWVudF9uYW1lLnNpbmtfcGFkPC9jb21wdXRlcm91dHB1dD4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdDM+ICAgICAgICAgIAorICAgICAgPHNlY3QzPgorICAgICAgICA8dGl0bGU+UHJvcGVydGllczwvdGl0bGU+CisgICAgICAgIDxzY3JlZW4+CisgICAgICAgICAgLi4uIGxvY2F0aW9uPSJodHRwOi8vZ3N0cmVhbWVyLm5ldCIgLi4uCisgICAgICAgIDwvc2NyZWVuPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgbmFtZSBvZiBhIHByb3BlcnR5LCBvcHRpb25hbGx5IHF1YWxpZmllZCB3aXRoIGFuIGVsZW1lbnQgbmFtZSwgYW5kIGEgdmFsdWUsCisgICAgICAgICAgc2VwYXJhdGVkIGJ5IGFuIGVxdWFscyBzaWduLCB3aWxsIHNldCBhIHByb3BlcnR5IG9uIGFuIGVsZW1lbnQuIElmIHRoZSBlbGVtZW50IGlzIG5vdAorICAgICAgICAgIHNwZWNpZmllZCwgdGhlIHByZXZpb3VzIGVsZW1lbnQgaXMgYXNzdW1lZC4gU3RyaW5ncyBjYW4gb3B0aW9uYWxseSBiZSBlbmNsb3NlZCBpbgorICAgICAgICAgIHF1b3RhdGlvbiBtYXJrcy4gQ2hhcmFjdGVycyBpbiBzdHJpbmdzIG1heSBiZSBlc2NhcGVkIHdpdGggdGhlIGJhY2t0aWNrCisgICAgICAgICAgKDxsaXRlcmFsPlw8L2xpdGVyYWw+KS4gSWYgdGhlIHJpZ2h0LWhhbmQgc2lkZSBpcyBhbGwgZGlnaXRzLCBpdCBpcyBjb25zaWRlcmVkIHRvIGJlIGFuCisgICAgICAgICAgaW50ZWdlci4gSWYgaXQgaXMgYWxsIGRpZ2l0cyBhbmQgYSBkZWNpbWFsIHBvaW50LCBpdCBpcyBhIGRvdWJsZS4gSWYgaXQgaXMgInRydWUiLAorICAgICAgICAgICJmYWxzZSIsICJUUlVFIiwgb3IgIkZBTFNFIiBpdCBpcyBjb25zaWRlcmVkIHRvIGJlIGJvb2xlYW4uIE90aGVyd2lzZSwgaXQgaXMgcGFyc2VkIGFzIGEKKyAgICAgICAgICBzdHJpbmcuIFRoZSB0eXBlIG9mIHRoZSBwcm9wZXJ0eSBpcyBkZXRlcm1pbmVkIGxhdGVyIG9uIGluIHRoZSBwYXJzaW5nLCBhbmQgdGhlIHZhbHVlIGlzCisgICAgICAgICAgY29udmVydGVkIHRvIHRoZSB0YXJnZXQgdHlwZS4gVGhpcyBjb252ZXJzaW9uIGlzIG5vdCBndWFyYW50ZWVkIHRvIHdvcmssIGl0IHJlbGllcyBvbgorICAgICAgICAgIHRoZSBnX3ZhbHVlX2NvbnZlcnQgcm91dGluZXMuIE5vIGVycm9yIG1lc3NhZ2Ugd2lsbCBiZSBkaXNwbGF5ZWQgb24gYW4gaW52YWxpZAorICAgICAgICAgIGNvbnZlcnNpb24sIGR1ZSB0byBsaW1pdGF0aW9ucyBpbiB0aGUgdmFsdWUgY29udmVydCBBUEkuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdDM+ICAgICAgICAgIAorICAgICAgPHNlY3QzPgorICAgICAgICA8dGl0bGU+QmlucywgVGhyZWFkcywgYW5kIFBpcGVsaW5lczwvdGl0bGU+CisgICAgICAgIDxzY3JlZW4+CisgICAgICAgICAgKCAuLi4gKQorICAgICAgICA8L3NjcmVlbj4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQSBwaXBlbGluZSBkZXNjcmlwdGlvbiBiZXR3ZWVuIHBhcmVudGhlc2VzIGlzIHBsYWNlZCBpbnRvIGEgYmluLiBUaGUgb3BlbiBwYXJlbiBtYXkgYmUKKyAgICAgICAgICBwcmVjZWRlZCBieSBhIHR5cGUgbmFtZSwgYXMgaW4gPGNvbXB1dGVyb3V0cHV0PmphY2tiaW4uKCAuLi4gKTwvY29tcHV0ZXJvdXRwdXQ+IHRvIG1ha2UKKyAgICAgICAgICBhIGJpbiBvZiBhIHNwZWNpZmllZCB0eXBlLiBTcXVhcmUgYnJhY2tldHMgbWFrZSBwaXBlbGluZXMsIGFuZCBjdXJseSBicmFjZXMgbWFrZQorICAgICAgICAgIHRocmVhZHMuIFRoZSBkZWZhdWx0IHRvcGxldmVsIGJpbiB0eXBlIGlzIGEgcGlwZWxpbmUsIGFsdGhvdWdoIHB1dHRpbmcgdGhlIHdob2xlCisgICAgICAgICAgZGVzY3JpcHRpb24gd2l0aGluIHBhcmVudGhlc2VzIG9yIGJyYWNlcyBjYW4gb3ZlcnJpZGUgdGhpcyBkZWZhdWx0LgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3QzPiAgICAgICAgICAKKyAgICA8L3NlY3QyPgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1wcm9ncmFtcy1nc3QtaW5zcGVjdCI+CisgICAgPHRpdGxlPjxjb21tYW5kPmdzdC1pbnNwZWN0PC9jb21tYW5kPjwvdGl0bGU+CisgICAgPHBhcmE+IAorICAgICAgVGhpcyBpcyBhIHRvb2wgdG8gcXVlcnkgYSBwbHVnaW4gb3IgYW4gZWxlbWVudCBhYm91dCBpdHMgcHJvcGVydGllcy4KKyAgICA8L3BhcmE+IAorICAgIDxwYXJhPiAKKyAgICAgIFRvIHF1ZXJ5IHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZWxlbWVudCBtYWQsIHlvdSB3b3VsZCBzcGVjaWZ5OgorICAgIDwvcGFyYT4gCisKKyAgICA8c2NyZWVuPgorZ3N0LWluc3BlY3QgbWFkCisgICAgPC9zY3JlZW4+CisKKyAgICA8cGFyYT4gCisgICAgICBCZWxvdyBpcyB0aGUgb3V0cHV0IG9mIGEgcXVlcnkgZm9yIHRoZSBvc3NzaW5rIGVsZW1lbnQ6CisgICAgPC9wYXJhPiAKKworICAgIDxzY3JlZW4+CitGYWN0b3J5IERldGFpbHM6CisgIExvbmcgbmFtZToJQXVkaW8gU2luayAoT1NTKQorICBDbGFzczoJU2luay9BdWRpbworICBEZXNjcmlwdGlvbjoJT3V0cHV0IHRvIGEgc291bmQgY2FyZCB2aWEgT1NTCisgIFZlcnNpb246CTAuMy4zLjEKKyAgQXV0aG9yKHMpOglFcmlrIFdhbHRoaW5zZW4gJmx0O29tZWdhQGNzZS5vZ2kuZWR1Jmd0OywgV2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGNoZWxsby5iZSZndDsKKyAgQ29weXJpZ2h0OgkoQykgMTk5OQorCitHT2JqZWN0CisgKy0tLS1Hc3RPYmplY3QKKyAgICAgICArLS0tLUdzdEVsZW1lbnQKKyAgICAgICAgICAgICArLS0tLUdzdE9zc1NpbmsKKworUGFkIFRlbXBsYXRlczoKKyAgU0lOSyB0ZW1wbGF0ZTogJ3NpbmsnCisgICAgQXZhaWxhYmlsaXR5OiBBbHdheXMKKyAgICBDYXBhYmlsaXRpZXM6CisgICAgICAnb3Nzc2lua19zaW5rJzoKKyAgICAgICAgTUlNRSB0eXBlOiAnYXVkaW8vcmF3JzoKKyAgICAgICAgZm9ybWF0OiBTdHJpbmc6IGludAorICAgICAgICBlbmRpYW5uZXNzOiBJbnRlZ2VyOiAxMjM0CisgICAgICAgIHdpZHRoOiBMaXN0OgorICAgICAgICAgIEludGVnZXI6IDgKKyAgICAgICAgICBJbnRlZ2VyOiAxNgorICAgICAgICBkZXB0aDogTGlzdDoKKyAgICAgICAgICBJbnRlZ2VyOiA4CisgICAgICAgICAgSW50ZWdlcjogMTYKKyAgICAgICAgY2hhbm5lbHM6IEludGVnZXIgcmFuZ2U6IDEgLSAyCisgICAgICAgIGxhdzogSW50ZWdlcjogMAorICAgICAgICBzaWduZWQ6IExpc3Q6CisgICAgICAgICAgQm9vbGVhbjogRkFMU0UKKyAgICAgICAgICBCb29sZWFuOiBUUlVFCisgICAgICAgIHJhdGU6IEludGVnZXIgcmFuZ2U6IDEwMDAgLSA0ODAwMAorCisKK0VsZW1lbnQgRmxhZ3M6CisgIEdTVF9FTEVNRU5UX1RIUkVBRFNVR0dFU1RFRAorCitFbGVtZW50IEltcGxlbWVudGF0aW9uOgorICBObyBsb29wZnVuYygpLCBtdXN0IGJlIGNoYWluLWJhc2VkIG9yIG5vdCBjb25maWd1cmVkIHlldAorICBIYXMgY2hhbmdlX3N0YXRlKCkgZnVuY3Rpb246IGdzdF9vc3NzaW5rX2NoYW5nZV9zdGF0ZQorICBIYXMgY3VzdG9tIHNhdmVfdGh5c2VsZigpIGZ1bmN0aW9uOiBnc3RfZWxlbWVudF9zYXZlX3RoeXNlbGYKKyAgSGFzIGN1c3RvbSByZXN0b3JlX3RoeXNlbGYoKSBmdW5jdGlvbjogZ3N0X2VsZW1lbnRfcmVzdG9yZV90aHlzZWxmCisKK0Nsb2NraW5nIEludGVyYWN0aW9uOgorICBlbGVtZW50IHJlcXVpcmVzIGEgY2xvY2sKKyAgZWxlbWVudCBwcm92aWRlcyBhIGNsb2NrOiBHc3RPc3NDbG9jaworCitQYWRzOgorICBTSU5LOiAnc2luaycKKyAgICBJbXBsZW1lbnRhdGlvbjoKKyAgICAgIEhhcyBjaGFpbmZ1bmMoKTogMHg0MDA1NmZjMAorICAgIFBhZCBUZW1wbGF0ZTogJ3NpbmsnCisKK0VsZW1lbnQgQXJndW1lbnRzOgorICBuYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTdHJpbmcgKERlZmF1bHQgImVsZW1lbnQiKQorICBkZXZpY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTdHJpbmcgKERlZmF1bHQgIi9kZXYvZHNwIikKKyAgbXV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQm9vbGVhbiAoRGVmYXVsdCBmYWxzZSkKKyAgZm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogSW50ZWdlciAoRGVmYXVsdCAxNikKKyAgY2hhbm5lbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogRW51bSAiR3N0QXVkaW9zaW5rQ2hhbm5lbHMiIChkZWZhdWx0IDEpCisgICAgKDApOiAJU2lsZW5jZQorICAgICgxKTogCU1vbm8KKyAgICAoMik6IAlTdGVyZW8KKyAgZnJlcXVlbmN5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogSW50ZWdlciAoRGVmYXVsdCAxMTAyNSkKKyAgZnJhZ21lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogSW50ZWdlciAoRGVmYXVsdCA2KQorICBidWZmZXItc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBJbnRlZ2VyIChEZWZhdWx0IDQwOTYpCisKK0VsZW1lbnQgU2lnbmFsczoKKyAgImhhbmRvZmYiIDoJIHZvaWQgdXNlcl9mdW5jdGlvbiAoR3N0T3NzU2luayogb2JqZWN0LCAKKyAgICAJCQkJZ3BvaW50ZXIgdXNlcl9kYXRhKTsKKyAgICA8L3NjcmVlbj4KKworICAgIDxwYXJhPiAKKyAgICAgIFRvIHF1ZXJ5IHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhIHBsdWdpbiwgeW91IHdvdWxkIGRvOgorICAgIDwvcGFyYT4gCisKKyAgICA8c2NyZWVuPgorZ3N0LWluc3BlY3QgZ3N0ZWxlbWVudHMKKyAgICA8L3NjcmVlbj4KKyAgPC9zZWN0MT4KKworPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvYXBwZW5kaXgtcXVvdGVzLnhtbCBiL2RvY3MvbWFudWFsL2FwcGVuZGl4LXF1b3Rlcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA2NTZhZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbWFudWFsL2FwcGVuZGl4LXF1b3Rlcy54bWwKQEAgLTAsMCArMSwzNTAgQEAKKzxjaGFwdGVyIGlkPSJjaGFwdGVyLXF1b3RlcyI+CisgIDx0aXRsZT5RdW90ZXMgZnJvbSB0aGUgRGV2ZWxvcGVyczwvdGl0bGU+CisgIDxwYXJhPgorICAgIEFzIHdlbGwgYXMgYmVpbmcgYSBjb29sIHBpZWNlIG9mIHNvZnR3YXJlLAorICAgIDxhcHBsaWNhdGlvbj5HU3RyZWFtZXI8L2FwcGxpY2F0aW9uPiBpcyBhIGxpdmVseSBwcm9qZWN0LCB3aXRoCisgICAgZGV2ZWxvcGVycyBmcm9tIGFyb3VuZCB0aGUgZ2xvYmUgdmVyeSBhY3RpdmVseSBjb250cmlidXRpbmcuCisgICAgV2Ugb2Z0ZW4gaGFuZyBvdXQgb24gdGhlICNnc3RyZWFtZXIgSVJDIGNoYW5uZWwgb24KKyAgICBpcmMuZnJlZW5vZGUubmV0OiB0aGUgZm9sbG93aW5nIGFyZSBhIHNlbGVjdGlvbiBvZiBhbXVzaW5nPGZvb3Rub3RlPgorICAgIDxwYXJhPk5vIGd1YXJhbnRlZSBvZiBzZW5zZSBvZiBodW1vdXIgY29tcGF0aWJpbGl0eSBpcyBnaXZlbi48L3BhcmE+CisgICAgPC9mb290bm90ZT4gcXVvdGVzIGZyb20gb3VyIGNvbnZlcnNhdGlvbnMuCisgIDwvcGFyYT4KKworICA8dmFyaWFibGVsaXN0PgorCisgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjYgTWFyIDIwMDY8L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+Cis8cGFyYT4KK1doZW4gSSBvcGVuZWQgbXkgZXllcyBJIHdhcyBpbiBhIGNvdXJ0IHJvb20uIFRoZXJlIHdlcmUgbWFzdGVycyBNY0lscm95IGFuZAorVGhvbXBzb24gc2l0dGluZyBpbiB0aGUganVyeSBhbmQgbWFzdGVyIEtlcm5pZ2hhbiB0b28uIFRoZXJlIHdlcmUgdGhlIEdTdHJlYW1lcgorZGV2ZWxvcGVycyBzdGFuZGluZyBpbiB0aGUgZGVmZW5kYW50J3MgcGxhY2UsIGFjY3VzZWQgb2YgdmlvbGF0aW5nIHNldmVyYWwgbGF3cworb2YgVW5peCBwaGlsb3NvcGh5IGFuZCBjdXN0b21lciBsb2NrLWRvd24gdmlhIHJ1bm5pbmcgb24gYSBwcm9wcmlldGFyeQorcGlwZWxpbmUsIGRpZmZlcmVudCBmcm9tIHRoYXQgb2YgdGhlIFVuaXggc3lzdGVtcy4gSSBoZWFyZCBFcmljIFJheW1vbmQKK3doaXNwZXJpbmcgImdvdCB0byBhZGQgdGhpcyBjYXNlIHRvIG15IGJvb2suCis8L3BhcmE+Cis8cGFyYT48ZW1waGFzaXM+YmVoZGFkJ3MgYmxvZzwvZW1waGFzaXM+PC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT4yMiBNYXkgMjAwNzwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKzxwYXJhPjxlbXBoYXNpcz4mbHQ7X190aW0mZ3Q7PC9lbXBoYXNpcz4KK1VyYWV1czogYW11c2luZywgaXNuJ3QgaXQ/Cis8L3BhcmE+Cis8cGFyYT48ZW1waGFzaXM+Jmx0O1VyYWV1cyZndDs8L2VtcGhhc2lzPgorX190aW06IEkgd3JvdGUgdGhhdCA6KQorPC9wYXJhPgorPHBhcmE+PGVtcGhhc2lzPiZsdDtfX3RpbSZndDs8L2VtcGhhc2lzPgorVXJhZXVzOiBvZiBjb3Vyc2UgeW91IGRpZDsgeW91ciByZWZ1c2FsIHRvIHN1cnJlbmRlciB0byB0aGUgb3BwcmVzc2l2ZSByZWdpbWUKK29mIHRoZSB0aGlyZC1wZXJzb24tc2luZ3VsYXItcnVsZSBpcyBzbyB1bmlxdWUgaW4gaXRzIHBlcnNpc3RlbmNlIHRoYXQgaXQncworaGFyZCB0byBtaXNzIDopCisgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L3Zhcmxpc3RlbnRyeT4KKworCisgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjEyIFNlcCAyMDA1PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorPHBhcmE+PGVtcGhhc2lzPiZsdDt3aW5nbyZndDs8L2VtcGhhc2lzPgord2UganVzdCBuZWVkIHRvIGdldCByaWQgb2YgdGhhdCBtbWFwIHN0dWZmCis8L3BhcmE+Cis8cGFyYT48ZW1waGFzaXM+Jmx0O3dpbmdvJmd0OzwvZW1waGFzaXM+CitpIHRoaW5rIGdub21ldmZzc3JjIGlzIGZhc3RlciBmb3IgZmlsZXMgZXZlbgorPC9wYXJhPgorPHBhcmE+PGVtcGhhc2lzPiZsdDtCQkImZ3Q7PC9lbXBoYXNpcz4KK3dpbmdvLCBubworPC9wYXJhPgorPHBhcmE+PGVtcGhhc2lzPiZsdDtCQkImZ3Q7PC9lbXBoYXNpcz4KK2FuZCBubworPC9wYXJhPgorPHBhcmE+PGVtcGhhc2lzPiZsdDt3aW5nbyZndDs8L2VtcGhhc2lzPgorZ29vZCBwb2ludHMgcm9uYWxkCis8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjIzIEp1biAyMDA1PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorCis8cGFyYT48ZW1waGFzaXM+KiB3aW5nbzwvZW1waGFzaXM+IGJhY2s8L3BhcmE+Cis8cGFyYT48ZW1waGFzaXM+KiB0aG9tYXN2czwvZW1waGFzaXM+IGJhY2s8L3BhcmE+Cis8cGFyYT4tLS0gWW91IGFyZSBub3cga25vd24gYXMgZXZlcnlib2R5PC9wYXJhPgorPHBhcmE+PGVtcGhhc2lzPiogZXZlcnlib2R5PC9lbXBoYXNpcz4gYmFjayBiYWNrPC9wYXJhPgorPHBhcmE+PGVtcGhhc2lzPiZsdDtldmVyeWJvZHkmZ3Q7PC9lbXBoYXNpcz4gbm93IGJyZWFrIGl0IGRvd248L3BhcmE+Cis8cGFyYT4tLS0gWW91IGFyZSBub3cga25vd24gYXMgdGhvbWFzdnM8L3BhcmE+Cis8cGFyYT48ZW1waGFzaXM+KiBiaWxib2VkPC9lbXBoYXNpcz4gYmFjazwvcGFyYT4KKzxwYXJhPi0tLSBiaWxib2VkIGlzIG5vdyBrbm93biBhcyBqb2huLXNlYmFzdGlhbjwvcGFyYT4KKzxwYXJhPjxlbXBoYXNpcz4qIGpvaG4tc2ViYXN0aWFuPC9lbXBoYXNpcz4gYmFjaDwvcGFyYT4KKzxwYXJhPi0tLSBqb2huLXNlYmFzdGlhbiBpcyBub3cga25vd24gYXMgYmlsYm9lZDwvcGFyYT4KKzxwYXJhPi0tLSBZb3UgYXJlIG5vdyBrbm93biBhcyBzY3JhdGNoX215PC9wYXJhPgorPHBhcmE+PGVtcGhhc2lzPiogc2NyYXRjaF9teTwvZW1waGFzaXM+IGJhY2s8L3BhcmE+Cis8cGFyYT4tLS0gYmlsYm9lZCBpcyBub3cga25vd24gYXMgSWxsYmU8L3BhcmE+Cis8cGFyYT4tLS0gWW91IGFyZSBub3cga25vd24gYXMgdGhvbWFzdnM8L3BhcmE+Cis8cGFyYT48ZW1waGFzaXM+KiBJbGxiZTwvZW1waGFzaXM+IGJhY2s8L3BhcmE+Cis8cGFyYT4tLS0gSWxsYmUgaXMgbm93IGtub3duIGFzIGJpbGJvZWQ8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjIwIEFwciAyMDA1PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8ZW1waGFzaXM+dGhvbWFzPC9lbXBoYXNpcz46CitqcmIsIHNvbWVob3cgaGlzIHNjcmVlbnNob3RzcmMgZ3JhYnMgd2hhdGV2ZXIgWCBpcyBzaG93aW5nIGFuZCBtYWtlcyBpdAorYXZhaWxhYmxlIGFzIGEgc3RyZWFtIG9mIGZyYW1lcworCTwvcGFyYT4KKwk8cGFyYT4KKwkgIDxlbXBoYXNpcz5qcmI8L2VtcGhhc2lzPjoKK3Rob21hczogc28sIGlzIHRoZSBwb2ludCB0aGF0IHRoZSBzY3JlZW5zaG9vdGVyIHRha2VzIGEgdmlkZW8/CitidXQgd29uJ3QgdGhlIGRpYWxvZyBiZSBpbiB0aGUgdmlkZW8/ICBvaCwgbmV2ZXJtaW5kLiAgSSdsbCBqdXN0IHNlbmQgbWFpbC4uLgorCTwvcGFyYT4KKwk8cGFyYT4KKyAgICAgICAgICA8ZW1waGFzaXM+dGhvbWFzPC9lbXBoYXNpcz46CitqcmIsIHdlbGwsIGl0IHdvdWxkIHNob290IGZpcnN0IGFuZCBhc2sgcXVlc3Rpb25zIGxhdGVyCisJPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT4yIE5vdiAyMDA0PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8ZW1waGFzaXM+emFoZWVybTwvZW1waGFzaXM+Ogord3RheTogdW5mYWlyIHUgZml4ZWQgdGhlIGJ1ZyBpIHdhcyB1c2luZyBhcyBhIGZlYXR1cmUhCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+MTQgT2N0IDIwMDQ8L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxlbXBoYXNpcz4qIHphaGVlcm08L2VtcGhhc2lzPgord29uZGVycyBob3cgaGUgY2FuIGJyZWFrIGdzdHJlYW1lciB0b2RheSA6KQorCTwvcGFyYT4KKwk8cGFyYT4KKwkgIDxlbXBoYXNpcz5lbnNvbmljPC9lbXBoYXNpcz46Cit6YWhlZXJtLCBzcGlkZXIgaXMgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludAorCTwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+MTQgSnVuIDIwMDQ8L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxlbXBoYXNpcz50ZXVmPC9lbXBoYXNpcz46IG9rLCB0aGluZ3Mgd29yayBtdWNoIGJldHRlciB3aGVuIEkgZG9uJ3Qgd3JpdGUgaW5jcmVkaWJseSBzdHVwaWQgYW5kIGJ1Z2d5IGNvZGUKKwk8L3BhcmE+CisJPHBhcmE+CisJICA8ZW1waGFzaXM+dGhheXRhbjwvZW1waGFzaXM+OiBJIGZpbmQgdGhhdCB0b28KKwk8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT4yMyBOb3YgMjAwMzwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGVtcGhhc2lzPlVyYWV1czwvZW1waGFzaXM+OiBhaCB5ZXMsIHRoZSBzbGVlcGluZyBwYXJ0LCBteSBtaW5kCisgICAgICAgICAgaXMgbm90IG11bHRpdGFza2luZyBzbyBJIHdhcyBzdGlsbCB0aGlua2luZyBhYm91dCBleGVyY2lzZQorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxlbXBoYXNpcz5kb2xwaHk8L2VtcGhhc2lzPjogVXJhZXVzOiB5b3VyIG1pbmQgaXMgbXVsdGl0YXNraW5nCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGVtcGhhc2lzPmRvbHBoeTwvZW1waGFzaXM+OiBVcmFldXM6IHlvdSBqdXN0IG1pc3MgbG93IGxhdGVuY3kgcGF0Y2hlcworICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjE0IFNlcCAyMDAyPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAtLS0gPGVtcGhhc2lzPndpbmdvLXBhcnR5PC9lbXBoYXNpcz4gaXMgbm93IGtub3duIGFzIAorICAgICAgICAgIDxlbXBoYXNpcz53aW5nbzwvZW1waGFzaXM+CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAqIDxlbXBoYXNpcz53aW5nbzwvZW1waGFzaXM+IGhvbGRzIGhlYWQKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT40IEp1biAyMDAxPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT48ZW1waGFzaXM+dGFhejo8L2VtcGhhc2lzPiB5b3Ugd2l0Y2hkb2N0b3JzIGFuZCB5b3VyIHZvb2RvbyBtcGVnMiBibGFjayBtYWdpYy4uLiA8L3BhcmE+CisgICAgICAgIDxwYXJhPjxlbXBoYXNpcz5vbWVnYV86PC9lbXBoYXNpcz4gdW0uICBJIGNvdW50IHRocmVlLCBubyBmb3VyIGRpZmZlcmVudCBjdWx0cyB0aGVyZSAmbHQ7ZyZndDsgPC9wYXJhPgorICAgICAgICA8cGFyYT48ZW1waGFzaXM+YWptaXRjaDo8L2VtcGhhc2lzPiBoZWhlIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+PGVtcGhhc2lzPm9tZWdhXzo8L2VtcGhhc2lzPiB3aXRjaGRvY3RvcnMsIHZvb2RvbywgYmxhY2sgbWFnaWMsIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+PGVtcGhhc2lzPm9tZWdhXzo8L2VtcGhhc2lzPiBhbmQgbXBlZyA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjE2IEZlYiAyMDAxPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgPGVtcGhhc2lzPnd0YXk6PC9lbXBoYXNpcz4KKyAgICAgICAgSSBzaGlwcGVkIGEgZmV3IGNvbW1lcmljYWwgcHJvZHVjdHMgdG8gJmd0OzQwMDAwIHBlb3BsZSBub3cgYnV0IAorICAgICAgICBHU3RyZWFtZXIgaXMgd2F5IG1vcmUgZXhjaXRpbmcuLi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+MTYgRmViIDIwMDE8L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAqCisgICAgICAgIDxlbXBoYXNpcz50b29sLW1hbjwvZW1waGFzaXM+CisgICAgICAgIGlzIGEgZ3N0cmVhbWVyIGdyb3VwaWUKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+MTQgSmFuIDIwMDE8L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICA8ZW1waGFzaXM+T21lZ2E6PC9lbXBoYXNpcz4KKyAgICAgICAgICBkaWQgeW91IHJ1biBsZGNvbmZpZz8gIG1heWJlIGl0IHRhbGtzIHRvIGluaXQ/CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgIDxlbXBoYXNpcz53dGF5OjwvZW1waGFzaXM+CisgICAgICAgICAgbm90IHN1cmUsIGRvbid0IHRoaW5rIHNvLi4uCisgICAgICAgICAgSSBkaWQgcnVuIGdzdHJlYW1lci1yZWdpc3RlciB0aG91Z2ggOi0pCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgIDxlbXBoYXNpcz5PbWVnYTo8L2VtcGhhc2lzPgorICAgICAgICAgIGFoLCB0aGF0IGRpZCBpdCB0aGVuIDstKQorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICA8ZW1waGFzaXM+d3RheTo8L2VtcGhhc2lzPgorICAgICAgICAgIHJpZ2h0CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgIDxlbXBoYXNpcz5PbWVnYTo8L2VtcGhhc2lzPgorICAgICAgICAgIHByb2JhYmx5IG5vdCwgYnV0IGluIGNhc2UgR1N0cmVhbWVyIHN0YXJ0cyB0dXJuaW5nIGludG8gYW4gT1MsIHNvbWVvbmUgcGxlYXNlIGxldCBtZSBrbm93PworICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT45IEphbiAyMDAxPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgPGVtcGhhc2lzPnd0YXk6PC9lbXBoYXNpcz4KKyAgICAgICAgbWUgdGFyLCB5b3UgcnBtPworICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICA8ZW1waGFzaXM+d3RheTo8L2VtcGhhc2lzPgorICAgICAgICBoZWhlLCBmb3Jnb3QgJnF1b3Q7emFuJnF1b3Q7CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgIDxlbXBoYXNpcz5PbWVnYTo8L2VtcGhhc2lzPgorICAgICAgICA/CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgIDxlbXBoYXNpcz53dGF5OjwvZW1waGFzaXM+CisgICAgICAgIG1lIHRhciZxdW90O3phbiZxdW90OywgeW91IC4uLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT43IEphbiAyMDAxPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorCTxwYXJhPgorCTxlbXBoYXNpcz5PbWVnYTo8L2VtcGhhc2lzPgorCXRoYXQgbWVhbnMgcHJvYmFibHkgYnVpbGRpbmcgYW4gYWdyZWdnYXRpbmcsIGNhY2hlLW1hc3NhZ2luZworCXF1ZXVlIHRvIHNob3ZlIE4gYnVmZmVycyBhY3Jvc3MgYWxsIGF0IG9uY2UsIGZvcmNpbmcgY2FjaGUKKwl0cmFuc2Zlci4KKwk8L3BhcmE+CisJPHBhcmE+CisJPGVtcGhhc2lzPnd0YXk6PC9lbXBoYXNpcz4KKyAgICAgICAgbmV2ZXIgZG9uZSB0aGF0IGJlZm9yZS4uLgorCTwvcGFyYT4KKwk8cGFyYT4KKwk8ZW1waGFzaXM+T21lZ2E6PC9lbXBoYXNpcz4KKwlub3BlLCBidXQgaXQncyBlYXN5IHRvIGRvIGluIGdzdHJlYW1lciAmbHQ7ZyZndDsKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKwk8ZW1waGFzaXM+d3RheTo8L2VtcGhhc2lzPgorCXN1cmUsIEkgbmVlZCB0byByZXdyaXRlIGNwIHdpdGggZ3N0cmVhbWVyIHRvbywgc29tZWRheSA6LSkKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+NyBKYW4gMjAwMTwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgIDxlbXBoYXNpcz53dGF5OjwvZW1waGFzaXM+CisJR1N0cmVhbWVyOyBhbHdheXMgYXQgbGVhc3Qgb25lIGRldmVsb3BlciBpcyBhd2FrZS4uLgorCTwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjUvNiBKYW4gMjAwMTwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgIDxlbXBoYXNpcz53dGF5OjwvZW1waGFzaXM+CisJd2UgbmVlZCB0byBjdXQgZG93biB0aGUgdGltZSB0byBjcmVhdGUgYW4gbXAzIHBsYXllciBkb3duIHRvCisJc2Vjb25kcy4uLgorCTwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgIDxlbXBoYXNpcz5yaWNoYXJkYjo8L2VtcGhhc2lzPgorCTopCisJPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgPGVtcGhhc2lzPk9tZWdhOjwvZW1waGFzaXM+CisJSSdtIHdhbnRpbmcgdG8gc29tZXRoaW5nIG1vcmUgaW50ZXJlc3Rpbmcgc29vbiwgSSBkaWQgdGhlICJkcmF3IGFuIG1wMyAKKwlwbGF5ZXIgaW4gMTVzZWMiIGJhY2sgaW4gT2N0b2JlciAnOTkuCisJPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgPGVtcGhhc2lzPnd0YXk6PC9lbXBoYXNpcz4KKwlieSB0aGUgdGltZSBPbWVnYSBnZXRzIGhpcyBoYW5kcyBvbiB0aGUgZWRpdG9yLCB5b3UnbGwgc2VlIGEKKwljb21wbGV0ZSBhdWRpbyBtaXhlciBpbiB0aGUgZWRpdG9yIDotKQorCTwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgIDxlbXBoYXNpcz5yaWNoYXJkYjo8L2VtcGhhc2lzPgorCVdlbGwsIGl0IGNsZWFybHkgaGFzIHRoZSBwb3RlbnRpYWwuLi4KKwk8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICA8ZW1waGFzaXM+T21lZ2E6PC9lbXBoYXNpcz4KKwlXb3JraW5nIG9uIGl0Li4uIDstKQorCTwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjI4IERlYyAyMDAwPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgPGVtcGhhc2lzPk1QQUE6PC9lbXBoYXNpcz4KKyAgICAgICAgV2Ugd2lsbCBzdWUgeW91IG5vdywgeW91IGhhdmUgdmlvbGF0ZWQgb3VyIElQIHJpZ2h0cyEKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgPGVtcGhhc2lzPnd0YXk6PC9lbXBoYXNpcz4KKyAgICAgICAgaGVoZWhlCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgIDxlbXBoYXNpcz5NUEFBOjwvZW1waGFzaXM+CisgICAgICAgIEhvdyBkYXJlIHlvdSBsYXVnaCBhdCB1cz8gV2UgaGF2ZSBsYXd5ZXJzISBXZSBoYXZlIENvbmdyZXNzbWVuISAgV2UgaGF2ZSA8ZW1waGFzaXM+TEFSUzwvZW1waGFzaXM+IQorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICA8ZW1waGFzaXM+d3RheTo8L2VtcGhhc2lzPgorICAgICAgICBJJ20gc28gc29ycnkgeW91ciBob25vcgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICA8ZW1waGFzaXM+TVBBQTo8L2VtcGhhc2lzPgorICAgICAgICBIcnVtcGguCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICoKKyAgICAgICAgPGVtcGhhc2lzPnd0YXk8L2VtcGhhc2lzPgorICAgICAgICBib3dzIGJlZm9yZSB0aHkKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L3Zhcmxpc3RlbnRyeT4KKworICA8L3ZhcmlhYmxlbGlzdD4KKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2Jhc2UuY3NzIGIvZG9jcy9tYW51YWwvYmFzZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI0YzA3OAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbWFudWFsL2Jhc2UuY3NzCkBAIC0wLDAgKzEsMyBAQAorcHJlLnByb2dyYW1saXN0aW5nIHsgCisJIGJhY2tncm91bmQ6ICNFOEU4RkY7Cit9CmRpZmYgLS1naXQgYS9kb2NzL21hbnVhbC9iYXNpY3MtYmlucy54bWwgYi9kb2NzL21hbnVhbC9iYXNpY3MtYmlucy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEwOWM4YwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbWFudWFsL2Jhc2ljcy1iaW5zLnhtbApAQCAtMCwwICsxLDE3NyBAQAorPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItYmlucyI+CisgIDx0aXRsZT5CaW5zPC90aXRsZT4KKyAgPHBhcmE+IAorICAgIEEgYmluIGlzIGEgY29udGFpbmVyIGVsZW1lbnQuIFlvdSBjYW4gYWRkIGVsZW1lbnRzIHRvIGEgYmluLiBTaW5jZSBhCisgICAgYmluIGlzIGFuIGVsZW1lbnQgaXRzZWxmLCBhIGJpbiBjYW4gYmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgYW55CisgICAgb3RoZXIgZWxlbWVudC4gVGhlcmVmb3JlLCB0aGUgd2hvbGUgcHJldmlvdXMgY2hhcHRlciAoPHhyZWYKKyAgICBsaW5rZW5kPSJjaGFwdGVyLWVsZW1lbnRzIi8+KSBhcHBsaWVzIHRvIGJpbnMgYXMgd2VsbC4KKyAgPC9wYXJhPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1iaW5zIj4KKyAgICA8dGl0bGU+V2hhdCBhcmUgYmluczwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBCaW5zIGFsbG93IHlvdSB0byBjb21iaW5lIGEgZ3JvdXAgb2YgbGlua2VkIGVsZW1lbnRzIGludG8gb25lCisgICAgICBsb2dpY2FsIGVsZW1lbnQuIFlvdSBkbyBub3QgZGVhbCB3aXRoIHRoZSBpbmRpdmlkdWFsIGVsZW1lbnRzCisgICAgICBhbnltb3JlIGJ1dCB3aXRoIGp1c3Qgb25lIGVsZW1lbnQsIHRoZSBiaW4uIFdlIHdpbGwgc2VlIHRoYXQKKyAgICAgIHRoaXMgaXMgZXh0cmVtZWx5IHBvd2VyZnVsIHdoZW4geW91IGFyZSBnb2luZyB0byBjb25zdHJ1Y3QKKyAgICAgIGNvbXBsZXggcGlwZWxpbmVzIHNpbmNlIGl0IGFsbG93cyB5b3UgdG8gYnJlYWsgdXAgdGhlIHBpcGVsaW5lCisgICAgICBpbiBzbWFsbGVyIGNodW5rcy4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+IAorICAgICAgVGhlIGJpbiB3aWxsIGFsc28gbWFuYWdlIHRoZSBlbGVtZW50cyBjb250YWluZWQgaW4gaXQuIEl0IHdpbGwKKyAgICAgIGZpZ3VyZSBvdXQgaG93IHRoZSBkYXRhIHdpbGwgZmxvdyBpbiB0aGUgYmluIGFuZCBnZW5lcmF0ZSBhbgorICAgICAgb3B0aW1hbCBwbGFuIGZvciB0aGF0IGRhdGEgZmxvdy4gUGxhbiBnZW5lcmF0aW9uIGlzIG9uZSBvZiB0aGUKKyAgICAgIG1vc3QgY29tcGxpY2F0ZWQgcHJvY2VkdXJlcyBpbiAmR1N0cmVhbWVyOy4gWW91IHdpbGwgbGVhcm4gbW9yZQorICAgICAgYWJvdXQgdGhpcyBwcm9jZXNzLCBjYWxsZWQgc2NoZWR1bGluZywgaW4gPHhyZWYKKyAgICAgIGxpbmtlbmQ9InNlY3Rpb24tdGhyZWFkcy1zY2hlZHVsaW5nIi8+LgorICAgIDwvcGFyYT4KKworICAgIDxmaWd1cmUgZmxvYXQ9IjEiIGlkPSJzZWN0aW9uLWJpbi1pbWciPgorICAgICAgPHRpdGxlPlZpc3VhbGlzYXRpb24gb2YgYSBiaW4gd2l0aCBzb21lIGVsZW1lbnRzIGluIGl0PC90aXRsZT4KKyAgICAgICAgPG1lZGlhb2JqZWN0PiAgCisgICAgICAgICAgPGltYWdlb2JqZWN0PgorICAgICAgICAgICAgPGltYWdlZGF0YSBzY2FsZT0iNzUiIGZpbGVyZWY9ImltYWdlcy9iaW4tZWxlbWVudC4maW1hZ2U7IiBmb3JtYXQ9IiZJTUFHRTsiLz4KKyAgICAgICAgICA8L2ltYWdlb2JqZWN0PgorICAgICAgICA8L21lZGlhb2JqZWN0PgorICAgIDwvZmlndXJlPgorCisgICAgPHBhcmE+IAorICAgICAgVGhlcmUgaXMgb25lIHNwZWNpYWxpemVkIHR5cGUgb2YgYmluIGF2YWlsYWJsZSB0byB0aGUKKyAgICAgICZHU3RyZWFtZXI7IHByb2dyYW1tZXI6CisgICAgPC9wYXJhPgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEEgcGlwZWxpbmU6IGEgZ2VuZXJpYyBjb250YWluZXIgdGhhdCBhbGxvd3Mgc2NoZWR1bGluZyBvZiB0aGUKKyAgICAgICAgICBjb250YWluaW5nIGVsZW1lbnRzLiAgVGhlIHRvcGxldmVsIGJpbiBoYXMgdG8gYmUgYSBwaXBlbGluZSwKKyAgICAgICAgICBldmVyeSBhcHBsaWNhdGlvbiB0aHVzIG5lZWRzIGF0IGxlYXN0IG9uZSBvZiB0aGVzZS4gUGlwZWxpbmVzIHdpbGwKKyAgICAgICAgICBhdXRvbWF0aWNhbGx5IHJ1biB0aGVtc2VsdmVzIGluIGEgYmFja2dyb3VuZCB0aHJlYWQgd2hlbiBzdGFydGVkLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1iaW4tY3JlYXRlIj4KKyAgICA8dGl0bGU+Q3JlYXRpbmcgYSBiaW48L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgQmlucyBhcmUgY3JlYXRlZCBpbiB0aGUgc2FtZSB3YXkgdGhhdCBvdGhlciBlbGVtZW50cyBhcmUgY3JlYXRlZCwKKyAgICAgIGkuZS4gdXNpbmcgYW4gZWxlbWVudCBmYWN0b3J5LiBUaGVyZSBhcmUgYWxzbyBjb252ZW5pZW5jZSBmdW5jdGlvbnMKKyAgICAgIGF2YWlsYWJsZSAoPGZ1bmN0aW9uPmdzdF9iaW5fbmV3ICgpPC9mdW5jdGlvbj4gYW5kIAorICAgICAgPGZ1bmN0aW9uPmdzdF9waXBlbGluZV9uZXcgKCk8L2Z1bmN0aW9uPikuCisgICAgICBUbyBhZGQgZWxlbWVudHMgdG8gYSBiaW4gb3IgcmVtb3ZlIGVsZW1lbnRzIGZyb20gYQorICAgICAgYmluLCB5b3UgY2FuIHVzZSA8ZnVuY3Rpb24+Z3N0X2Jpbl9hZGQgKCk8L2Z1bmN0aW9uPiBhbmQKKyAgICAgIDxmdW5jdGlvbj5nc3RfYmluX3JlbW92ZSAoKTwvZnVuY3Rpb24+LiBOb3RlIHRoYXQgdGhlIGJpbiB0aGF0IHlvdQorICAgICAgYWRkIGFuIGVsZW1lbnQgdG8gd2lsbCB0YWtlIG93bmVyc2hpcCBvZiB0aGF0IGVsZW1lbnQuIElmIHlvdQorICAgICAgZGVzdHJveSB0aGUgYmluLCB0aGUgZWxlbWVudCB3aWxsIGJlIGRlcmVmZXJlbmNlZCB3aXRoIGl0LiBJZiB5b3UKKyAgICAgIHJlbW92ZSBhbiBlbGVtZW50IGZyb20gYSBiaW4sIGl0IHdpbGwgYmUgZGVyZWZlcmVuY2VkIGF1dG9tYXRpY2FsbHkuCisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz48IS0tIGV4YW1wbGUtYmVnaW4gYmluLmMgYSAtLT4KKyNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7CisKK2ludAorbWFpbiAoaW50ICAgYXJnYywKKyAgICAgIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgR3N0RWxlbWVudCAqYmluLCAqcGlwZWxpbmUsICpzb3VyY2UsICpzaW5rOworCisgIC8qIGluaXQgKi8KKyAgZ3N0X2luaXQgKCZhbXA7YXJnYywgJmFtcDthcmd2KTsKKworICAvKiBjcmVhdGUgKi8KKyAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgibXlfcGlwZWxpbmUiKTsKKyAgYmluID0gZ3N0X2Jpbl9uZXcgKCJteV9iaW4iKTsKKyAgc291cmNlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzb3VyY2UiKTsKKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKKworICAvKiBGaXJzdCBhZGQgdGhlIGVsZW1lbnRzIHRvIHRoZSBiaW4gKi8KKyAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAoYmluKSwgc291cmNlLCBzaW5rLCBOVUxMKTsKKyAgLyogYWRkIHRoZSBiaW4gdG8gdGhlIHBpcGVsaW5lICovCisgIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIGJpbik7CisKKyAgLyogbGluayB0aGUgZWxlbWVudHMgKi8KKyAgZ3N0X2VsZW1lbnRfbGluayAoc291cmNlLCBzaW5rKTsKKzwhLS0gZXhhbXBsZS1lbmQgYmluLmMgYSAtLT4KK1suLl08IS0tIGV4YW1wbGUtYmVnaW4gYmluLmMgYiAtLT48IS0tCisgIHJldHVybiAwOworLS0+PCEtLSBleGFtcGxlLWVuZCBiaW4uYyBiIC0tPgorPCEtLSBleGFtcGxlLWJlZ2luIGJpbi5jIGMgLS0+Cit9CisgICAgPCEtLSBleGFtcGxlLWVuZCBiaW4uYyBjIC0tPjwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+CisgICAgICBUaGVyZSBhcmUgdmFyaW91cyBmdW5jdGlvbnMgdG8gbG9va3VwIGVsZW1lbnRzIGluIGEgYmluLiBZb3UgY2FuCisgICAgICBhbHNvIGdldCBhIGxpc3Qgb2YgYWxsIGVsZW1lbnRzIHRoYXQgYSBiaW4gY29udGFpbnMgdXNpbmcgdGhlIGZ1bmN0aW9uCisgICAgICA8ZnVuY3Rpb24+Z3N0X2Jpbl9nZXRfbGlzdCAoKTwvZnVuY3Rpb24+LiBTZWUgdGhlIEFQSSByZWZlcmVuY2VzIG9mCisgICAgICA8dWxpbmsgdHlwZT0iaHR0cCIKKyAgICAgIHVybD0iJlVSTEFQSTtHc3RCaW4uaHRtbCI+PGNsYXNzbmFtZT5Hc3RCaW48L2NsYXNzbmFtZT48L3VsaW5rPgorICAgICAgZm9yIGRldGFpbHMuCisgICAgPC9wYXJhPgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1iaW4tY3VzdG9tIj4KKyAgICA8dGl0bGU+Q3VzdG9tIGJpbnM8L3RpdGxlPgorICAgIDxwYXJhPiAKKyAgICAgIFRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWVyIGNhbiBjcmVhdGUgY3VzdG9tIGJpbnMgcGFja2VkIHdpdGggZWxlbWVudHMKKyAgICAgIHRvIHBlcmZvcm0gYSBzcGVjaWZpYyB0YXNrLiBUaGlzIGFsbG93cyB5b3UsIGZvciBleGFtcGxlLCB0byB3cml0ZQorICAgICAgYW4gT2dnL1ZvcmJpcyBkZWNvZGVyIHdpdGgganVzdCB0aGUgZm9sbG93aW5nIGxpbmVzIG9mIGNvZGU6CisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz4KK2ludAorbWFpbiAoaW50ICAgYXJnYywKKyAgICAgIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgR3N0RWxlbWVudCAqcGxheWVyOworCisgIC8qIGluaXQgKi8KKyAgZ3N0X2luaXQgKCZhbXA7YXJnYywgJmFtcDthcmd2KTsKKworICAvKiBjcmVhdGUgcGxheWVyICovCisgIHBsYXllciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoIm9nZ3ZvcmJpc3BsYXllciIsICJwbGF5ZXIiKTsKKworICAvKiBzZXQgdGhlIHNvdXJjZSBhdWRpbyBmaWxlICovCisgIGdfb2JqZWN0X3NldCAocGxheWVyLCAibG9jYXRpb24iLCAiaGVsbG93b3JsZC5vZ2ciLCBOVUxMKTsKKworICAvKiBzdGFydCBwbGF5YmFjayAqLworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChwbGF5ZXIpLCBHU1RfU1RBVEVfUExBWUlORyk7CitbLi5dCit9CisgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8cGFyYT4KKyAgICAgIChUaGlzIGlzIGEgc2lsbHkgZXhhbXBsZSBvZiBjb3Vyc2UsIHRoZXJlIGFscmVhZHkgZXhpc3RzIGEgbXVjaCBtb3JlCisgICAgICBwb3dlcmZ1bCBhbmQgdmVyc2F0aWxlIGN1c3RvbSBiaW4gbGlrZSB0aGlzOiB0aGUgcGxheWJpbjIgZWxlbWVudC4pCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgQ3VzdG9tIGJpbnMgY2FuIGJlIGNyZWF0ZWQgd2l0aCBhIHBsdWdpbiBvciBhbiBYTUwgZGVzY3JpcHRpb24uIFlvdQorICAgICAgd2lsbCBmaW5kIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY3JlYXRpbmcgY3VzdG9tIGJpbiBpbiB0aGUgPHVsaW5rCisgICAgICB0eXBlPSJodHRwIgorICAgICAgdXJsPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9wd2cvaHRtbC9pbmRleC5odG1sIj5QbHVnaW4KKyAgICAgIFdyaXRlcnMgR3VpZGU8L3VsaW5rPi4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBFeGFtcGxlcyBvZiBzdWNoIGN1c3RvbSBiaW5zIGFyZSB0aGUgcGxheWJpbjIgYW5kIHVyaWRlY29kZWJpbiBlbGVtZW50cyBmcm9tPHVsaW5rCisgICAgICB0eXBlPSJodHRwIgorICAgICAgdXJsPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3QtcGx1Z2lucy1iYXNlLXBsdWdpbnMvaHRtbC9pbmRleC5odG1sIj4KKyAgICAgIGdzdC1wbHVnaW5zLWJhc2U8L3VsaW5rPi4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisgIDxzZWN0MSBpZD0ic2VjdGlvbi1iaW4tc3RhdGUtY2hhbmdlLWhhbmRsaW5nIj4KKyAgICA8dGl0bGU+QmlucyBtYW5hZ2Ugc3RhdGVzIG9mIHRoZWlyIGNoaWxkcmVuPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIEJpbnMgbWFuYWdlIHRoZSBzdGF0ZSBvZiBhbGwgZWxlbWVudHMgY29udGFpbmVkIGluIHRoZW0uIElmIHlvdSBzZXQKKyAgICAgIGEgYmluIChvciBhIHBpcGVsaW5lLCB3aGljaCBpcyBhIHNwZWNpYWwgdG9wLWxldmVsIHR5cGUgb2YgYmluKSB0bworICAgICAgYSBjZXJ0YWluIHRhcmdldCBzdGF0ZSB1c2luZyA8ZnVuY3Rpb24+Z3N0X2VsZW1lbnRfc2V0X3N0YXRlICgpPC9mdW5jdGlvbj4sCisgICAgICBpdCB3aWxsIG1ha2Ugc3VyZSBhbGwgZWxlbWVudHMgY29udGFpbmVkIHdpdGhpbiBpdCB3aWxsIGFsc28gYmUgc2V0CisgICAgICB0byB0aGlzIHN0YXRlLiBUaGlzIG1lYW5zIGl0J3MgdXN1YWxseSBvbmx5IG5lY2Vzc2FyeSB0byBzZXQgdGhlIHN0YXRlCisgICAgICBvZiB0aGUgdG9wLWxldmVsIHBpcGVsaW5lIHRvIHN0YXJ0IHVwIHRoZSBwaXBlbGluZSBvciBzaHV0IGl0IGRvd24uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgTm90ZSwgaG93ZXZlciwgdGhhdCBpZiBlbGVtZW50cyBhcmUgYWRkZWQgdG8gYSBiaW4gb3IgcGlwZWxpbmUgdGhhdCdzCisgICAgICBhbHJlYWR5IHJ1bm5pbmcsICwgZS5nLiBmcm9tIHdpdGhpbiBhICJwYWQtYWRkZWQiIG9yICJuZXctZGVjb2RlZC1wYWQiCisgICAgICBzaWduYWwgY2FsbGJhY2ssIGl0cyBzdGF0ZSB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJlIGJyb3VnaHQgaW4gbGluZSB3aXRoCisgICAgICB0aGUgY3VycmVudCBzdGF0ZSBvciB0YXJnZXQgc3RhdGUgb2YgdGhlIGJpbiBvciBwaXBlbGluZSBpdCB3YXMgYWRkZWQgdG8uCisgICAgICBJbnN0ZWFkLCB5b3UgaGF2ZSB0byBuZWVkIHRvIHNldCBpdCB0byB0aGUgZGVzaXJlZCB0YXJnZXQgc3RhdGUgeW91cnNlbGYKKyAgICAgIHVzaW5nIDxmdW5jdGlvbj5nc3RfZWxlbWVudF9zZXRfc3RhdGUgKCk8L2Z1bmN0aW9uPiBvcgorICAgICAgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQgKCk8L2Z1bmN0aW9uPiB3aGVuIGFkZGluZworICAgICAgZWxlbWVudHMgdG8gYW4gYWxyZWFkeS1ydW5uaW5nIHBpcGVsaW5lLgorICAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2Jhc2ljcy1idXMueG1sIGIvZG9jcy9tYW51YWwvYmFzaWNzLWJ1cy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI4YmJjMQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbWFudWFsL2Jhc2ljcy1idXMueG1sCkBAIC0wLDAgKzEsMjg3IEBACis8Y2hhcHRlciBpZD0iY2hhcHRlci1idXMiPgorICA8dGl0bGU+QnVzPC90aXRsZT4KKyAgPHBhcmE+CisgICAgQSBidXMgaXMgYSBzaW1wbGUgc3lzdGVtIHRoYXQgdGFrZXMgY2FyZSBvZiBmb3J3YXJkaW5nIG1lc3NhZ2VzIGZyb20KKyAgICB0aGUgcGlwZWxpbmUgdGhyZWFkcyB0byBhbiBhcHBsaWNhdGlvbiBpbiBpdHMgb3duIHRocmVhZCBjb250ZXh0LiBUaGUKKyAgICBhZHZhbnRhZ2Ugb2YgYSBidXMgaXMgdGhhdCBhbiBhcHBsaWNhdGlvbiBkb2VzIG5vdCBuZWVkIHRvIGJlCisgICAgdGhyZWFkLWF3YXJlIGluIG9yZGVyIHRvIHVzZSAmR1N0cmVhbWVyOywgZXZlbiB0aG91Z2ggJkdTdHJlYW1lcjsKKyAgICBpdHNlbGYgaXMgaGVhdmlseSB0aHJlYWRlZC4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICBFdmVyeSBwaXBlbGluZSBjb250YWlucyBhIGJ1cyBieSBkZWZhdWx0LCBzbyBhcHBsaWNhdGlvbnMgZG8gbm90IG5lZWQKKyAgICB0byBjcmVhdGUgYSBidXMgb3IgYW55dGhpbmcuIFRoZSBvbmx5IHRoaW5nIGFwcGxpY2F0aW9ucyBzaG91bGQgZG8gaXMKKyAgICBzZXQgYSBtZXNzYWdlIGhhbmRsZXIgb24gYSBidXMsIHdoaWNoIGlzIHNpbWlsYXIgdG8gYSBzaWduYWwgaGFuZGxlcgorICAgIHRvIGFuIG9iamVjdC4gV2hlbiB0aGUgbWFpbmxvb3AgaXMgcnVubmluZywgdGhlIGJ1cyB3aWxsIHBlcmlvZGljYWxseQorICAgIGJlIGNoZWNrZWQgZm9yIG5ldyBtZXNzYWdlcywgYW5kIHRoZSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCB3aGVuIGFueQorICAgIG1lc3NhZ2UgaXMgYXZhaWxhYmxlLgorICA8L3BhcmE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWJ1cy1ob3d0byI+CisgICAgPHRpdGxlPkhvdyB0byB1c2UgYSBidXM8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgVGhlcmUgYXJlIHR3byBkaWZmZXJlbnQgd2F5cyB0byB1c2UgYSBidXM6CisgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBSdW4gYSBHTGliL0d0aysgbWFpbiBsb29wIChvciBpdGVyYXRlIHRoZSBkZWZhdWx0IEdMaWIgbWFpbgorICAgICAgICAgICAgY29udGV4dCB5b3Vyc2VsZiByZWd1bGFybHkpIGFuZCBhdHRhY2ggc29tZSBraW5kIG9mIHdhdGNoIHRvIHRoZQorICAgICAgICAgICAgYnVzLiBUaGlzIHdheSB0aGUgR0xpYiBtYWluIGxvb3Agd2lsbCBjaGVjayB0aGUgYnVzIGZvciBuZXcKKyAgICAgICAgICAgIG1lc3NhZ2VzIGFuZCBub3RpZnkgeW91IHdoZW5ldmVyIHRoZXJlIGFyZSBtZXNzYWdlcy4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUeXBpY2FsbHkgeW91IHdvdWxkIHVzZSA8ZnVuY3Rpb24+Z3N0X2J1c19hZGRfd2F0Y2ggKCk8L2Z1bmN0aW9uPgorICAgICAgICAgICAgb3IgPGZ1bmN0aW9uPmdzdF9idXNfYWRkX3NpZ25hbF93YXRjaCAoKTwvZnVuY3Rpb24+IGluIHRoaXMgY2FzZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyB1c2UgYSBidXMsIGF0dGFjaCBhIG1lc3NhZ2UgaGFuZGxlciB0byB0aGUgYnVzIG9mIGEgcGlwZWxpbmUKKyAgICAgICAgICAgIHVzaW5nIDxmdW5jdGlvbj5nc3RfYnVzX2FkZF93YXRjaCAoKTwvZnVuY3Rpb24+LiBUaGlzIGhhbmRsZXIgd2lsbAorICAgICAgICAgICAgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBwaXBlbGluZSBlbWl0cyBhIG1lc3NhZ2UgdG8gdGhlIGJ1cy4gSW4gdGhpcworICAgICAgICAgICAgaGFuZGxlciwgY2hlY2sgdGhlIHNpZ25hbCB0eXBlIChzZWUgbmV4dCBzZWN0aW9uKSBhbmQgZG8gc29tZXRoaW5nCisgICAgICAgICAgICBhY2NvcmRpbmdseS4gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgaGFuZGxlciBzaG91bGQgYmUgVFJVRSB0bworICAgICAgICAgICAga2VlcCB0aGUgaGFuZGxlciBhdHRhY2hlZCB0byB0aGUgYnVzLCByZXR1cm4gRkFMU0UgdG8gcmVtb3ZlIGl0LgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ2hlY2sgZm9yIG1lc3NhZ2VzIG9uIHRoZSBidXMgeW91cnNlbGYuIFRoaXMgY2FuIGJlIGRvbmUgdXNpbmcKKyAgICAgICAgICAgIDxmdW5jdGlvbj5nc3RfYnVzX3BlZWsgKCk8L2Z1bmN0aW9uPiBhbmQvb3IKKyAgICAgICAgICAgIDxmdW5jdGlvbj5nc3RfYnVzX3BvbGwgKCk8L2Z1bmN0aW9uPi4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisgICAgPHByb2dyYW1saXN0aW5nPjwhLS0gZXhhbXBsZS1iZWdpbiBidXMuYyBhIC0tPgorI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKKworc3RhdGljIEdNYWluTG9vcCAqbG9vcDsKKworc3RhdGljIGdib29sZWFuCitteV9idXNfY2FsbGJhY2sgKEdzdEJ1cyAgICAgKmJ1cywKKwkJIEdzdE1lc3NhZ2UgKm1lc3NhZ2UsCisJCSBncG9pbnRlciAgICBkYXRhKQoreworICBnX3ByaW50ICgiR290ICVzIG1lc3NhZ2VcbiIsIEdTVF9NRVNTQUdFX1RZUEVfTkFNRSAobWVzc2FnZSkpOworCisgIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkpIHsKKyAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOiB7CisgICAgICBHRXJyb3IgKmVycjsKKyAgICAgIGdjaGFyICpkZWJ1ZzsKKworICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1lc3NhZ2UsICZhbXA7ZXJyLCAmYW1wO2RlYnVnKTsKKyAgICAgIGdfcHJpbnQgKCJFcnJvcjogJXNcbiIsIGVyci0mZ3Q7bWVzc2FnZSk7CisgICAgICBnX2Vycm9yX2ZyZWUgKGVycik7CisgICAgICBnX2ZyZWUgKGRlYnVnKTsKKworICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6CisgICAgICAvKiBlbmQtb2Ytc3RyZWFtICovCisgICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAvKiB1bmhhbmRsZWQgbWVzc2FnZSAqLworICAgICAgYnJlYWs7CisgIH0KKworICAvKiB3ZSB3YW50IHRvIGJlIG5vdGlmaWVkIGFnYWluIHRoZSBuZXh0IHRpbWUgdGhlcmUgaXMgYSBtZXNzYWdlCisgICAqIG9uIHRoZSBidXMsIHNvIHJldHVybmluZyBUUlVFIChGQUxTRSBtZWFucyB3ZSB3YW50IHRvIHN0b3Agd2F0Y2hpbmcKKyAgICogZm9yIG1lc3NhZ2VzIG9uIHRoZSBidXMgYW5kIG91ciBjYWxsYmFjayBzaG91bGQgbm90IGJlIGNhbGxlZCBhZ2FpbikKKyAgICovCisgIHJldHVybiBUUlVFOworfQorCitnaW50CittYWluIChnaW50ICAgYXJnYywKKyAgICAgIGdjaGFyICphcmd2W10pCit7CisgIEdzdEVsZW1lbnQgKnBpcGVsaW5lOworICBHc3RCdXMgKmJ1czsKKworICAvKiBpbml0ICovCisgIGdzdF9pbml0ICgmYW1wO2FyZ2MsICZhbXA7YXJndik7CisKKyAgLyogY3JlYXRlIHBpcGVsaW5lLCBhZGQgaGFuZGxlciAqLworICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJteV9waXBlbGluZSIpOworCisgIC8qIGFkZHMgYSB3YXRjaCBmb3IgbmV3IG1lc3NhZ2Ugb24gb3VyIHBpcGVsaW5lJmFwb3M7cyBtZXNzYWdlIGJ1cyB0bworICAgKiB0aGUgZGVmYXVsdCBHTGliIG1haW4gY29udGV4dCwgd2hpY2ggaXMgdGhlIG1haW4gY29udGV4dCB0aGF0IG91cgorICAgKiBHTGliIG1haW4gbG9vcCBpcyBhdHRhY2hlZCB0byBiZWxvdworICAgKi8KKyAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKEdTVF9QSVBFTElORSAocGlwZWxpbmUpKTsKKyAgZ3N0X2J1c19hZGRfd2F0Y2ggKGJ1cywgbXlfYnVzX2NhbGxiYWNrLCBOVUxMKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKKzwhLS0gZXhhbXBsZS1lbmQgYnVzLmMgYSAtLT4KK1suLl08IS0tIGV4YW1wbGUtYmVnaW4gYnVzLmMgYiAtLT4KKzwhLS0gZXhhbXBsZS1iZWdpbiBidXMuYyBjIC0tPgorICAvKiBjcmVhdGUgYSBtYWlubG9vcCB0aGF0IHJ1bnMvaXRlcmF0ZXMgdGhlIGRlZmF1bHQgR0xpYiBtYWluIGNvbnRleHQKKyAgICogKGNvbnRleHQgTlVMTCksIGluIG90aGVyIHdvcmRzOiBtYWtlcyB0aGUgY29udGV4dCBjaGVjayBpZiBhbnl0aGluZworICAgKiBpdCB3YXRjaGVzIGZvciBoYXMgaGFwcGVuZWQuIFdoZW4gYSBtZXNzYWdlIGhhcyBiZWVuIHBvc3RlZCBvbiB0aGUKKyAgICogYnVzLCB0aGUgZGVmYXVsdCBtYWluIGNvbnRleHQgd2lsbCBhdXRvbWF0aWNhbGx5IGNhbGwgb3VyCisgICAqIG15X2J1c19jYWxsYmFjaygpIGZ1bmN0aW9uIHRvIG5vdGlmeSB1cyBvZiB0aGF0IG1lc3NhZ2UuCisgICAqIFRoZSBtYWluIGxvb3Agd2lsbCBiZSBydW4gdW50aWwgc29tZW9uZSBjYWxscyBnX21haW5fbG9vcF9xdWl0KCkKKyAgICovCisgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKKyAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKKworICAvKiBjbGVhbiB1cCAqLworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKKyAgZ19tYWluX2xvb3BfdW5yZWYgKGxvb3ApOworCisgIHJldHVybiAwOworfQorICAgIDwhLS0gZXhhbXBsZS1lbmQgYnVzLmMgYyAtLT4KKyAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDxwYXJhPgorICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgdGhhdCB0aGUgaGFuZGxlciB3aWxsIGJlIGNhbGxlZCBpbiB0aGUgdGhyZWFkCisgICAgICBjb250ZXh0IG9mIHRoZSBtYWlubG9vcC4gVGhpcyBtZWFucyB0aGF0IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZQorICAgICAgcGlwZWxpbmUgYW5kIGFwcGxpY2F0aW9uIG92ZXIgdGhlIGJ1cyBpcworICAgICAgPGVtcGhhc2lzPmFzeW5jaHJvbm91czwvZW1waGFzaXM+LCBhbmQgdGh1cyBub3Qgc3VpdGVkIGZvciBzb21lCisgICAgICByZWFsLXRpbWUgcHVycG9zZXMsIHN1Y2ggYXMgY3Jvc3MtZmFkaW5nIGJldHdlZW4gYXVkaW8gdHJhY2tzLCBkb2luZworICAgICAgKHRoZW9yZXRpY2FsbHkpIGdhcGxlc3MgcGxheWJhY2sgb3IgdmlkZW8gZWZmZWN0cy4gQWxsIHN1Y2ggdGhpbmdzCisgICAgICBzaG91bGQgYmUgZG9uZSBpbiB0aGUgcGlwZWxpbmUgY29udGV4dCwgd2hpY2ggaXMgZWFzaWVzdCBieSB3cml0aW5nCisgICAgICBhICZHU3RyZWFtZXI7IHBsdWctaW4uIEl0IGlzIHZlcnkgdXNlZnVsIGZvciBpdHMgcHJpbWFyeSBwdXJwb3NlLAorICAgICAgdGhvdWdoOiBwYXNzaW5nIG1lc3NhZ2VzIGZyb20gcGlwZWxpbmUgdG8gYXBwbGljYXRpb24uCisgICAgICBUaGUgYWR2YW50YWdlIG9mIHRoaXMgYXBwcm9hY2ggaXMgdGhhdCBhbGwgdGhlIHRocmVhZGluZyB0aGF0CisgICAgICAmR1N0cmVhbWVyOyBkb2VzIGludGVybmFsbHkgaXMgaGlkZGVuIGZyb20gdGhlIGFwcGxpY2F0aW9uIGFuZCB0aGUKKyAgICAgIGFwcGxpY2F0aW9uIGRldmVsb3BlciBkb2VzIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRocmVhZCBpc3N1ZXMgYXQKKyAgICAgIGFsbC4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBOb3RlIHRoYXQgaWYgeW91J3JlIHVzaW5nIHRoZSBkZWZhdWx0IEdMaWIgbWFpbmxvb3AgaW50ZWdyYXRpb24sIHlvdQorICAgICAgY2FuLCBpbnN0ZWFkIG9mIGF0dGFjaGluZyBhIHdhdGNoLCBjb25uZWN0IHRvIHRoZSA8cXVvdGU+bWVzc2FnZTwvcXVvdGU+IAorICAgICAgc2lnbmFsIG9uIHRoZSBidXMuIFRoaXMgd2F5IHlvdSBkb24ndCBoYXZlIHRvCisgICAgICA8ZnVuY3Rpb24+c3dpdGNoKCk8L2Z1bmN0aW9uPiAKKyAgICAgIG9uIGFsbCBwb3NzaWJsZSBtZXNzYWdlIHR5cGVzOyBqdXN0IGNvbm5lY3QgdG8gdGhlIGludGVyZXN0aW5nIHNpZ25hbHMKKyAgICAgIGluIGZvcm0gb2YgPHF1b3RlPm1lc3NhZ2U6OiZsdDt0eXBlJmd0OzwvcXVvdGU+LCB3aGVyZSAmbHQ7dHlwZSZndDsgCisgICAgICBpcyBhIHNwZWNpZmljIG1lc3NhZ2UgdHlwZSAoc2VlIHRoZSBuZXh0IHNlY3Rpb24gZm9yIGFuIGV4cGxhbmF0aW9uIG9mIAorICAgICAgbWVzc2FnZSB0eXBlcykuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgVGhlIGFib3ZlIHNuaXBwZXQgY291bGQgdGhlbiBhbHNvIGJlIHdyaXR0ZW4gYXM6CisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz4KK0dzdEJ1cyAqYnVzOworCitbLi5dCisKK2J1cyA9IGdzdF9waXBlbGluZV9nZXRfYnVzIChHU1RfUElQRUxJTkUgKHBpcGVsaW5lKTsKK2dzdF9idXNfYWRkX3NpZ25hbF93YXRjaCAoYnVzKTsKK2dfc2lnbmFsX2Nvbm5lY3QgKGJ1cywgIm1lc3NhZ2U6OmVycm9yIiwgR19DQUxMQkFDSyAoY2JfbWVzc2FnZV9lcnJvciksIE5VTEwpOworZ19zaWduYWxfY29ubmVjdCAoYnVzLCAibWVzc2FnZTo6ZW9zIiwgR19DQUxMQkFDSyAoY2JfbWVzc2FnZV9lb3MpLCBOVUxMKTsKKworWy4uXQorICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+CisgICAgICBJZiB5b3UgYXJlbid0IHVzaW5nIEdMaWIgbWFpbmxvb3AsIHRoZSBhc3luY2hyb25vdXMgbWVzc2FnZSBzaWduYWxzIHdvbid0CisgICAgICBiZSBhdmFpbGFibGUgYnkgZGVmYXVsdC4gWW91IGNhbiBob3dldmVyIGluc3RhbGwgYSBjdXN0b20gc3luYyBoYW5kbGVyCisgICAgICB0aGF0IHdha2VzIHVwIHRoZSBjdXN0b20gbWFpbmxvb3AgYW5kIHRoYXQgdXNlcworICAgICAgPGZ1bmN0aW9uPmdzdF9idXNfYXN5bmNfc2lnbmFsX2Z1bmMgKCk8L2Z1bmN0aW9uPiB0byBlbWl0IHRoZSBzaWduYWxzLgorICAgICAgKHNlZSBhbHNvIDx1bGluayB0eXBlPSJodHRwIgorICAgICAgdXJsPSImVVJMQVBJO0dzdEJ1cy5odG1sIj5kb2N1bWVudGF0aW9uPC91bGluaz4gZm9yIGRldGFpbHMpCisgICAgPC9wYXJhPgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1idXMtbWVzc2FnZS10eXBlcyI+CisgICAgPHRpdGxlPk1lc3NhZ2UgdHlwZXM8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgJkdTdHJlYW1lcjsgaGFzIGEgZmV3IHByZS1kZWZpbmVkIG1lc3NhZ2UgdHlwZXMgdGhhdCBjYW4gYmUgcGFzc2VkCisgICAgICBvdmVyIHRoZSBidXMuIFRoZSBtZXNzYWdlcyBhcmUgZXh0ZW5zaWJsZSwgaG93ZXZlci4gUGx1Zy1pbnMgY2FuCisgICAgICBkZWZpbmUgYWRkaXRpb25hbCBtZXNzYWdlcywgYW5kIGFwcGxpY2F0aW9ucyBjYW4gZGVjaWRlIHRvIGVpdGhlcgorICAgICAgaGF2ZSBzcGVjaWZpYyBjb2RlIGZvciB0aG9zZSBvciBpZ25vcmUgdGhlbS4gQWxsIGFwcGxpY2F0aW9ucyBhcmUKKyAgICAgIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIGF0IGxlYXN0IGhhbmRsZSBlcnJvciBtZXNzYWdlcyBieSBwcm92aWRpbmcKKyAgICAgIHZpc3VhbCBmZWVkYmFjayB0byB0aGUgdXNlci4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBBbGwgbWVzc2FnZXMgaGF2ZSBhIG1lc3NhZ2Ugc291cmNlLCB0eXBlIGFuZCB0aW1lc3RhbXAuIFRoZSBtZXNzYWdlCisgICAgICBzb3VyY2UgY2FuIGJlIHVzZWQgdG8gc2VlIHdoaWNoIGVsZW1lbnQgZW1pdHRlZCB0aGUgbWVzc2FnZS4gRm9yIHNvbWUKKyAgICAgIG1lc3NhZ2VzLCBmb3IgZXhhbXBsZSwgb25seSB0aGUgb25lcyBlbWl0dGVkIGJ5IHRoZSB0b3AtbGV2ZWwgcGlwZWxpbmUKKyAgICAgIHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gbW9zdCBhcHBsaWNhdGlvbnMgKGUuZy4gZm9yIHN0YXRlLWNoYW5nZQorICAgICAgbm90aWZpY2F0aW9ucykuIEJlbG93IGlzIGEgbGlzdCBvZiBhbGwgbWVzc2FnZXMgYW5kIGEgc2hvcnQgZXhwbGFuYXRpb24KKyAgICAgIG9mIHdoYXQgdGhleSBkbyBhbmQgaG93IHRvIHBhcnNlIG1lc3NhZ2Utc3BlY2lmaWMgY29udGVudC4KKyAgICA8L3BhcmE+CisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgRXJyb3IsIHdhcm5pbmcgYW5kIGluZm9ybWF0aW9uIG5vdGlmaWNhdGlvbnM6IHRob3NlIGFyZSB1c2VkCisgICAgICAgICAgYnkgZWxlbWVudHMgaWYgYSBtZXNzYWdlIHNob3VsZCBiZSBzaG93biB0byB0aGUgdXNlciBhYm91dCB0aGUKKyAgICAgICAgICBzdGF0ZSBvZiB0aGUgcGlwZWxpbmUuIEVycm9yIG1lc3NhZ2VzIGFyZSBmYXRhbCBhbmQgdGVybWluYXRlCisgICAgICAgICAgdGhlIGRhdGEtcGFzc2luZy4gVGhlIGVycm9yIHNob3VsZCBiZSByZXBhaXJlZCB0byByZXN1bWUgcGlwZWxpbmUKKyAgICAgICAgICBhY3Rpdml0eS4gV2FybmluZ3MgYXJlIG5vdCBmYXRhbCwgYnV0IGltcGx5IGEgcHJvYmxlbSBuZXZlcnRoZWxlc3MuCisgICAgICAgICAgSW5mb3JtYXRpb24gbWVzc2FnZXMgYXJlIGZvciBub24tcHJvYmxlbSBub3RpZmljYXRpb25zLiBBbGwgdGhvc2UKKyAgICAgICAgICBtZXNzYWdlcyBjb250YWluIGEgPGNsYXNzbmFtZT5HRXJyb3I8L2NsYXNzbmFtZT4gd2l0aCB0aGUgbWFpbgorICAgICAgICAgIGVycm9yIHR5cGUgYW5kIG1lc3NhZ2UsIGFuZCBvcHRpb25hbGx5IGEgZGVidWcgc3RyaW5nLiBCb3RoCisgICAgICAgICAgY2FuIGJlIGV4dHJhY3RlZCB1c2luZyA8ZnVuY3Rpb24+Z3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IKKyAgICAgICAgICAoKTwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+X3BhcnNlX3dhcm5pbmcgKCk8L2Z1bmN0aW9uPiBhbmQKKyAgICAgICAgICA8ZnVuY3Rpb24+X3BhcnNlX2luZm8gKCk8L2Z1bmN0aW9uPi4gQm90aCBlcnJvciBhbmQgZGVidWcgc3RyaW5ncworICAgICAgICAgIHNob3VsZCBiZSBmcmVlZCBhZnRlciB1c2UuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEVuZC1vZi1zdHJlYW0gbm90aWZpY2F0aW9uOiB0aGlzIGlzIGVtaXR0ZWQgd2hlbiB0aGUgc3RyZWFtIGhhcworICAgICAgICAgIGVuZGVkLiBUaGUgc3RhdGUgb2YgdGhlIHBpcGVsaW5lIHdpbGwgbm90IGNoYW5nZSwgYnV0IGZ1cnRoZXIKKyAgICAgICAgICBtZWRpYSBoYW5kbGluZyB3aWxsIHN0YWxsLiBBcHBsaWNhdGlvbnMgY2FuIHVzZSB0aGlzIHRvIHNraXAgdG8KKyAgICAgICAgICB0aGUgbmV4dCBzb25nIGluIHRoZWlyIHBsYXlsaXN0LiBBZnRlciBlbmQtb2Ytc3RyZWFtLCBpdCBpcyBhbHNvCisgICAgICAgICAgcG9zc2libGUgdG8gc2VlayBiYWNrIGluIHRoZSBzdHJlYW0uIFBsYXliYWNrIHdpbGwgdGhlbiBjb250aW51ZQorICAgICAgICAgIGF1dG9tYXRpY2FsbHkuIFRoaXMgbWVzc2FnZSBoYXMgbm8gc3BlY2lmaWMgYXJndW1lbnRzLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUYWdzOiBlbWl0dGVkIHdoZW4gbWV0YWRhdGEgd2FzIGZvdW5kIGluIHRoZSBzdHJlYW0uIFRoaXMgY2FuIGJlCisgICAgICAgICAgZW1pdHRlZCBtdWx0aXBsZSB0aW1lcyBmb3IgYSBwaXBlbGluZSAoZS5nLiBvbmNlIGZvciBkZXNjcmlwdGl2ZQorICAgICAgICAgIG1ldGFkYXRhIHN1Y2ggYXMgYXJ0aXN0IG5hbWUgb3Igc29uZyB0aXRsZSwgYW5kIGFub3RoZXIgb25lIGZvcgorICAgICAgICAgIHN0cmVhbS1pbmZvcm1hdGlvbiwgc3VjaCBhcyBzYW1wbGVyYXRlIGFuZCBiaXRyYXRlKS4gQXBwbGljYXRpb25zCisgICAgICAgICAgc2hvdWxkIGNhY2hlIG1ldGFkYXRhIGludGVybmFsbHkuIDxmdW5jdGlvbj5nc3RfbWVzc2FnZV9wYXJzZV90YWcKKyAgICAgICAgICAoKTwvZnVuY3Rpb24+IHNob3VsZCBiZSB1c2VkIHRvIHBhcnNlIHRoZSB0YWdsaXN0LCB3aGljaCBzaG91bGQKKyAgICAgICAgICBiZSA8ZnVuY3Rpb24+Z3N0X3RhZ19saXN0X2ZyZWUgKCk8L2Z1bmN0aW9uPidlZCB3aGVuIG5vIGxvbmdlcgorICAgICAgICAgIG5lZWRlZC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgU3RhdGUtY2hhbmdlczogZW1pdHRlZCBhZnRlciBhIHN1Y2Nlc3NmdWwgc3RhdGUgY2hhbmdlLgorICAgICAgICAgIDxmdW5jdGlvbj5nc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkICgpPC9mdW5jdGlvbj4gY2FuIGJlCisgICAgICAgICAgdXNlZCB0byBwYXJzZSB0aGUgb2xkIGFuZCBuZXcgc3RhdGUgb2YgdGhpcyB0cmFuc2l0aW9uLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBCdWZmZXJpbmc6IGVtaXR0ZWQgZHVyaW5nIGNhY2hpbmcgb2YgbmV0d29yay1zdHJlYW1zLiBPbmUgY2FuCisgICAgICAgICAgbWFudWFsbHkgZXh0cmFjdCB0aGUgcHJvZ3Jlc3MgKGluIHBlcmNlbnQpIGZyb20gdGhlIG1lc3NhZ2UgYnkKKyAgICAgICAgICBleHRyYWN0aW5nIHRoZSA8cXVvdGU+YnVmZmVyLXBlcmNlbnQ8L3F1b3RlPiBwcm9wZXJ0eSBmcm9tIHRoZQorICAgICAgICAgIHN0cnVjdHVyZSByZXR1cm5lZCBieSA8ZnVuY3Rpb24+Z3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZQorICAgICAgICAgICgpPC9mdW5jdGlvbj4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEVsZW1lbnQgbWVzc2FnZXM6IHRoZXNlIGFyZSBzcGVjaWFsIG1lc3NhZ2VzIHRoYXQgYXJlIHVuaXF1ZSB0bworICAgICAgICAgIGNlcnRhaW4gZWxlbWVudHMgYW5kIHVzdWFsbHkgcmVwcmVzZW50IGFkZGl0aW9uYWwgZmVhdHVyZXMuIFRoZQorICAgICAgICAgIGVsZW1lbnQncyBkb2N1bWVudGF0aW9uIHNob3VsZCBtZW50aW9uIGluIGRldGFpbCB3aGljaAorICAgICAgICAgIGVsZW1lbnQgbWVzc2FnZXMgYSBwYXJ0aWN1bGFyIGVsZW1lbnQgbWF5IHNlbmQuIEFzIGFuIGV4YW1wbGUsCisgICAgICAgICAgdGhlICdxdGRlbXV4JyBRdWlja1RpbWUgZGVtdXhlciBlbGVtZW50IG1heSBzZW5kIGEgJ3JlZGlyZWN0JworICAgICAgICAgIGVsZW1lbnQgbWVzc2FnZSBvbiBjZXJ0YWluIG9jY2FzaW9ucyBpZiB0aGUgc3RyZWFtIGNvbnRhaW5zIGEKKyAgICAgICAgICByZWRpcmVjdCBpbnN0cnVjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQXBwbGljYXRpb24tc3BlY2lmaWMgbWVzc2FnZXM6IGFueSBpbmZvcm1hdGlvbiBvbiB0aG9zZSBjYW4KKyAgICAgICAgICBiZSBleHRyYWN0ZWQgYnkgZ2V0dGluZyB0aGUgbWVzc2FnZSBzdHJ1Y3R1cmUgKHNlZSBhYm92ZSkgYW5kCisgICAgICAgICAgcmVhZGluZyBpdHMgZmllbGRzLiBVc3VhbGx5IHRoZXNlIG1lc3NhZ2VzIGNhbiBzYWZlbHkgYmUgaWdub3JlZC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBcHBsaWNhdGlvbiBtZXNzYWdlcyBhcmUgcHJpbWFyaWx5IG1lYW50IGZvciBpbnRlcm5hbAorICAgICAgICAgIHVzZSBpbiBhcHBsaWNhdGlvbnMgaW4gY2FzZSB0aGUgYXBwbGljYXRpb24gbmVlZHMgdG8gbWFyc2hhbAorICAgICAgICAgIGluZm9ybWF0aW9uIGZyb20gc29tZSB0aHJlYWQgaW50byB0aGUgbWFpbiB0aHJlYWQuIFRoaXMgaXMKKyAgICAgICAgICBwYXJ0aWN1bGFybHkgdXNlZnVsIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGlzIG1ha2luZyB1c2Ugb2YgZWxlbWVudAorICAgICAgICAgIHNpZ25hbHMgKGFzIHRob3NlIHNpZ25hbHMgd2lsbCBiZSBlbWl0dGVkIGluIHRoZSBjb250ZXh0IG9mIHRoZQorICAgICAgICAgIHN0cmVhbWluZyB0aHJlYWQpLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICA8L3NlY3QxPgorPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvYmFzaWNzLWRhdGEueG1sIGIvZG9jcy9tYW51YWwvYmFzaWNzLWRhdGEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZGI0YTYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL21hbnVhbC9iYXNpY3MtZGF0YS54bWwKQEAgLTAsMCArMSwxMDUgQEAKKzxjaGFwdGVyIGlkPSJjaGFwdGVyLWRhdGEiPgorICA8dGl0bGU+QnVmZmVycyBhbmQgRXZlbnRzPC90aXRsZT4KKyAgPHBhcmE+CisgICAgVGhlIGRhdGEgZmxvd2luZyB0aHJvdWdoIGEgcGlwZWxpbmUgY29uc2lzdHMgb2YgYSBjb21iaW5hdGlvbiBvZgorICAgIGJ1ZmZlcnMgYW5kIGV2ZW50cy4gQnVmZmVycyBjb250YWluIHRoZSBhY3R1YWwgbWVkaWEgZGF0YS4gRXZlbnRzCisgICAgY29udGFpbiBjb250cm9sIGluZm9ybWF0aW9uLCBzdWNoIGFzIHNlZWtpbmcgaW5mb3JtYXRpb24gYW5kCisgICAgZW5kLW9mLXN0cmVhbSBub3RpZmllcnMuIEFsbCB0aGlzIHdpbGwgZmxvdyB0aHJvdWdoIHRoZSBwaXBlbGluZQorICAgIGF1dG9tYXRpY2FsbHkgd2hlbiBpdCdzIHJ1bm5pbmcuIFRoaXMgY2hhcHRlciBpcyBtb3N0bHkgbWVhbnQgdG8KKyAgICBleHBsYWluIHRoZSBjb25jZXB0IHRvIHlvdTsgeW91IGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgZm9yIHRoaXMuCisgIDwvcGFyYT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tYnVmZmVycyI+CisgICAgPHRpdGxlPkJ1ZmZlcnM8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgQnVmZmVycyBjb250YWluIHRoZSBkYXRhIHRoYXQgd2lsbCBmbG93IHRocm91Z2ggdGhlIHBpcGVsaW5lIHlvdSBoYXZlCisgICAgICBjcmVhdGVkLiBBIHNvdXJjZSBlbGVtZW50IHdpbGwgdHlwaWNhbGx5IGNyZWF0ZSBhIG5ldyBidWZmZXIgYW5kIHBhc3MKKyAgICAgIGl0IHRocm91Z2ggYSBwYWQgdG8gdGhlIG5leHQgZWxlbWVudCBpbiB0aGUgY2hhaW4uICBXaGVuIHVzaW5nIHRoZQorICAgICAgR1N0cmVhbWVyIGluZnJhc3RydWN0dXJlIHRvIGNyZWF0ZSBhIG1lZGlhIHBpcGVsaW5lIHlvdSB3aWxsIG5vdCBoYXZlCisgICAgICB0byBkZWFsIHdpdGggYnVmZmVycyB5b3Vyc2VsZjsgdGhlIGVsZW1lbnRzIHdpbGwgZG8gdGhhdCBmb3IgeW91LgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4gCisgICAgICBBIGJ1ZmZlciBjb25zaXN0cywgYW1vbmdzdCBvdGhlcnMsIG9mOgorICAgIDwvcGFyYT4KKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBIHBvaW50ZXIgdG8gYSBwaWVjZSBvZiBtZW1vcnkuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBzaXplIG9mIHRoZSBtZW1vcnkuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEEgdGltZXN0YW1wIGZvciB0aGUgYnVmZmVyLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBIHJlZmNvdW50IHRoYXQgaW5kaWNhdGVzIGhvdyBtYW55IGVsZW1lbnRzIGFyZSB1c2luZyB0aGlzCisgICAgICAgICAgYnVmZmVyLiBUaGlzIHJlZmNvdW50IHdpbGwgYmUgdXNlZCB0byBkZXN0cm95IHRoZSBidWZmZXIgd2hlbiBubworICAgICAgICAgIGVsZW1lbnQgaGFzIGEgcmVmZXJlbmNlIHRvIGl0LgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBCdWZmZXIgZmxhZ3MuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPHBhcmE+CisgICAgICBUaGUgc2ltcGxlIGNhc2UgaXMgdGhhdCBhIGJ1ZmZlciBpcyBjcmVhdGVkLCBtZW1vcnkgYWxsb2NhdGVkLCBkYXRhCisgICAgICBwdXQgaW4gaXQsIGFuZCBwYXNzZWQgdG8gdGhlIG5leHQgZWxlbWVudC4gIFRoYXQgZWxlbWVudCByZWFkcyB0aGUKKyAgICAgIGRhdGEsIGRvZXMgc29tZXRoaW5nIChsaWtlIGNyZWF0aW5nIGEgbmV3IGJ1ZmZlciBhbmQgZGVjb2RpbmcgaW50bworICAgICAgaXQpLCBhbmQgdW5yZWZlcmVuY2VzIHRoZSBidWZmZXIuICBUaGlzIGNhdXNlcyB0aGUgZGF0YSB0byBiZSBmcmVlJ2VkCisgICAgICBhbmQgdGhlIGJ1ZmZlciB0byBiZSBkZXN0cm95ZWQuIEEgdHlwaWNhbCB2aWRlbyBvciBhdWRpbyBkZWNvZGVyCisgICAgICB3b3JrcyBsaWtlIHRoaXMuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgVGhlcmUgYXJlIG1vcmUgY29tcGxleCBzY2VuYXJpb3MsIHRob3VnaC4gRWxlbWVudHMgY2FuIG1vZGlmeSBidWZmZXJzCisgICAgICBpbi1wbGFjZSwgaS5lLiB3aXRob3V0IGFsbG9jYXRpbmcgYSBuZXcgb25lLiBFbGVtZW50cyBjYW4gYWxzbyB3cml0ZQorICAgICAgdG8gaGFyZHdhcmUgbWVtb3J5IChzdWNoIGFzIGZyb20gdmlkZW8tY2FwdHVyZSBzb3VyY2VzKSBvciBtZW1vcnkKKyAgICAgIGFsbG9jYXRlZCBmcm9tIHRoZSBYLXNlcnZlciAodXNpbmcgWFNobSkuIEJ1ZmZlcnMgY2FuIGJlIHJlYWQtb25seSwKKyAgICAgIGFuZCBzbyBvbi4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWV2ZW50cyI+CisgICAgPHRpdGxlPkV2ZW50czwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBFdmVudHMgYXJlIGNvbnRyb2wgcGFydGljbGVzIHRoYXQgYXJlIHNlbnQgYm90aCB1cC0gYW5kIGRvd25zdHJlYW0gaW4KKyAgICAgIGEgcGlwZWxpbmUgYWxvbmcgd2l0aCBidWZmZXJzLiBEb3duc3RyZWFtIGV2ZW50cyBub3RpZnkgZmVsbG93IGVsZW1lbnRzCisgICAgICBvZiBzdHJlYW0gc3RhdGVzLiBQb3NzaWJsZSBldmVudHMgaW5jbHVkZSBzZWVraW5nLCBmbHVzaGVzLAorICAgICAgZW5kLW9mLXN0cmVhbSBub3RpZmljYXRpb25zIGFuZCBzbyBvbi4gVXBzdHJlYW0gZXZlbnRzIGFyZSB1c2VkIGJvdGgKKyAgICAgIGluIGFwcGxpY2F0aW9uLWVsZW1lbnQgaW50ZXJhY3Rpb24gYXMgd2VsbCBhcyBlbGVtZW50LWVsZW1lbnQgaW50ZXJhY3Rpb24KKyAgICAgIHRvIHJlcXVlc3QgY2hhbmdlcyBpbiBzdHJlYW0gc3RhdGUsIHN1Y2ggYXMgc2Vla3MuIEZvciBhcHBsaWNhdGlvbnMsCisgICAgICBvbmx5IHVwc3RyZWFtIGV2ZW50cyBhcmUgaW1wb3J0YW50LiBEb3duc3RyZWFtIGV2ZW50cyBhcmUganVzdAorICAgICAgZXhwbGFpbmVkIHRvIGdldCBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgZGF0YSBjb25jZXB0LgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFNpbmNlIG1vc3QgYXBwbGljYXRpb25zIHNlZWsgaW4gdGltZSB1bml0cywgb3VyIGV4YW1wbGUgYmVsb3cgZG9lcyBzbworICAgICAgdG9vOgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3Rpbmc+CitzdGF0aWMgdm9pZAorc2Vla190b190aW1lIChHc3RFbGVtZW50ICplbGVtZW50LAorCSAgICAgIGd1aW50NjQgICAgIHRpbWVfbnMpCit7CisgIEdzdEV2ZW50ICpldmVudDsKKworICBldmVudCA9IGdzdF9ldmVudF9uZXdfc2VlayAoMS4wLCBHU1RfRk9STUFUX1RJTUUsCisJCQkgICAgICBHU1RfU0VFS19GTEFHX05PTkUsCisJCQkgICAgICBHU1RfU0VFS19NRVRIT0RfU0VULCB0aW1lX25zLAorCQkJICAgICAgR1NUX1NFRUtfVFlQRV9OT05FLCBHX0dVSU5UNjRfQ09OU1RBTlQgKDApKTsKKyAgZ3N0X2VsZW1lbnRfc2VuZF9ldmVudCAoZWxlbWVudCwgZXZlbnQpOworfQorICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+CisgICAgICBUaGUgZnVuY3Rpb24gPGZ1bmN0aW9uPmdzdF9lbGVtZW50X3NlZWsgKCk8L2Z1bmN0aW9uPiBpcyBhIHNob3J0Y3V0CisgICAgICBmb3IgdGhpcy4gVGhpcyBpcyBtb3N0bHkganVzdCB0byBzaG93IGhvdyBpdCBhbGwgd29ya3MuCisgICAgPC9wYXJhPgorICA8L3NlY3QxPgorPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvYmFzaWNzLWVsZW1lbnRzLnhtbCBiL2RvY3MvbWFudWFsL2Jhc2ljcy1lbGVtZW50cy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI4MzhmOQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbWFudWFsL2Jhc2ljcy1lbGVtZW50cy54bWwKQEAgLTAsMCArMSw1NjkgQEAKKzxjaGFwdGVyIGlkPSJjaGFwdGVyLWVsZW1lbnRzIiB4cmVmbGFiZWw9IkVsZW1lbnRzIj4KKyAgPHRpdGxlPkVsZW1lbnRzPC90aXRsZT4KKyAgPHBhcmE+IAorICAgIFRoZSBtb3N0IGltcG9ydGFudCBvYmplY3QgaW4gJkdTdHJlYW1lcjsgZm9yIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWVyCisgICAgaXMgdGhlIDx1bGluayB0eXBlPSJodHRwIgorICAgIHVybD0iLi4vLi4vZ3N0cmVhbWVyL2h0bWwvR3N0RWxlbWVudC5odG1sIj48Y2xhc3NuYW1lPkdzdEVsZW1lbnQ8L2NsYXNzbmFtZT48L3VsaW5rPgorICAgIG9iamVjdC4gQW4gZWxlbWVudCBpcyB0aGUgYmFzaWMgYnVpbGRpbmcgYmxvY2sgZm9yIGEgbWVkaWEgcGlwZWxpbmUuIEFsbAorICAgIHRoZSBkaWZmZXJlbnQgaGlnaC1sZXZlbCBjb21wb25lbnRzIHlvdSB3aWxsIHVzZSBhcmUgZGVyaXZlZCBmcm9tCisgICAgPGNsYXNzbmFtZT5Hc3RFbGVtZW50PC9jbGFzc25hbWU+LiBFdmVyeSBkZWNvZGVyLCBlbmNvZGVyLCBkZW11eGVyLCB2aWRlbworICAgIG9yIGF1ZGlvIG91dHB1dCBpcyBpbiBmYWN0IGEgPGNsYXNzbmFtZT5Hc3RFbGVtZW50PC9jbGFzc25hbWU+CisgIDwvcGFyYT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tZWxlbWVudHMtZGVzaWduIiB4cmVmbGFiZWw9IldoYXQgYXJlIGVsZW1lbnRzPyI+CisgICAgPHRpdGxlPldoYXQgYXJlIGVsZW1lbnRzPzwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBGb3IgdGhlIGFwcGxpY2F0aW9uIHByb2dyYW1tZXIsIGVsZW1lbnRzIGFyZSBiZXN0IHZpc3VhbGl6ZWQgYXMgYmxhY2sKKyAgICAgIGJveGVzLiBPbiB0aGUgb25lIGVuZCwgeW91IG1pZ2h0IHB1dCBzb21ldGhpbmcgaW4sIHRoZSBlbGVtZW50IGRvZXMKKyAgICAgIHNvbWV0aGluZyB3aXRoIGl0IGFuZCBzb21ldGhpbmcgZWxzZSBjb21lcyBvdXQgYXQgdGhlIG90aGVyIHNpZGUuIEZvcgorICAgICAgYSBkZWNvZGVyIGVsZW1lbnQsIGZvciBleGFtcGxlLCB5b3UnZCBwdXQgaW4gZW5jb2RlZCBkYXRhLCBhbmQgdGhlCisgICAgICBlbGVtZW50IHdvdWxkIG91dHB1dCBkZWNvZGVkIGRhdGEuIEluIHRoZSBuZXh0IGNoYXB0ZXIgKHNlZSA8eHJlZgorICAgICAgbGlua2VuZD0iY2hhcHRlci1wYWRzIi8+KSwgeW91IHdpbGwgbGVhcm4gbW9yZSBhYm91dCBkYXRhIGlucHV0IGFuZAorICAgICAgb3V0cHV0IGluIGVsZW1lbnRzLCBhbmQgaG93IHlvdSBjYW4gc2V0IHRoYXQgdXAgaW4geW91ciBhcHBsaWNhdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdDIgaWQ9InNlY3Rpb24tZWxlbWVudHMtc3JjIj4KKyAgICAgIDx0aXRsZT5Tb3VyY2UgZWxlbWVudHM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFNvdXJjZSBlbGVtZW50cyBnZW5lcmF0ZSBkYXRhIGZvciB1c2UgYnkgYSBwaXBlbGluZSwgZm9yIGV4YW1wbGUKKyAgICAgICAgcmVhZGluZyBmcm9tIGRpc2sgb3IgZnJvbSBhIHNvdW5kIGNhcmQuIDx4cmVmCisgICAgICAgIGxpbmtlbmQ9InNlY3Rpb24tZWxlbWVudC1zcmNpbWciLz4gc2hvd3MgaG93IHdlIHdpbGwgdmlzdWFsaXNlCisgICAgICAgIGEgc291cmNlIGVsZW1lbnQuIFdlIGFsd2F5cyBkcmF3IGEgc291cmNlIHBhZCB0byB0aGUgcmlnaHQgb2YKKyAgICAgICAgdGhlIGVsZW1lbnQuCisgICAgICA8L3BhcmE+CisgICAgICA8ZmlndXJlIGZsb2F0PSIxIiBpZD0ic2VjdGlvbi1lbGVtZW50LXNyY2ltZyI+CisgICAgICAgIDx0aXRsZT5WaXN1YWxpc2F0aW9uIG9mIGEgc291cmNlIGVsZW1lbnQ8L3RpdGxlPgorICAgICAgICAgIDxtZWRpYW9iamVjdD4gIAorICAgICAgICAgICAgPGltYWdlb2JqZWN0PgorICAgICAgICAgICAgICA8aW1hZ2VkYXRhIHNjYWxlPSI3NSIgZmlsZXJlZj0iaW1hZ2VzL3NyYy1lbGVtZW50LiZpbWFnZTsiCisgICAgICAgICAgICAgIGZvcm1hdD0iJklNQUdFOyIvPgorICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KKyAgICAgICAgICA8L21lZGlhb2JqZWN0PgorICAgICAgPC9maWd1cmU+CisgICAgICA8cGFyYT4KKyAgICAgICAgU291cmNlIGVsZW1lbnRzIGRvIG5vdCBhY2NlcHQgZGF0YSwgdGhleSBvbmx5IGdlbmVyYXRlIGRhdGEuIFlvdSBjYW4KKyAgICAgICAgc2VlIHRoaXMgaW4gdGhlIGZpZ3VyZSBiZWNhdXNlIGl0IG9ubHkgaGFzIGEgc291cmNlIHBhZCAob24gdGhlCisgICAgICAgIHJpZ2h0KS4gQSBzb3VyY2UgcGFkIGNhbiBvbmx5IGdlbmVyYXRlIGRhdGEuCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0Mj4KKworICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1lbGVtZW50cy1maWx0ZXIiPgorICAgICAgPHRpdGxlPkZpbHRlcnMsIGNvbnZlcnRvcnMsIGRlbXV4ZXJzLCBtdXhlcnMgYW5kIGNvZGVjczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgRmlsdGVycyBhbmQgZmlsdGVyLWxpa2UgZWxlbWVudHMgaGF2ZSBib3RoIGlucHV0IGFuZCBvdXRwdXRzIHBhZHMuCisgICAgICAgIFRoZXkgb3BlcmF0ZSBvbiBkYXRhIHRoYXQgdGhleSByZWNlaXZlIG9uIHRoZWlyIGlucHV0IChzaW5rKSBwYWRzLAorICAgICAgICBhbmQgd2lsbCBwcm92aWRlIGRhdGEgb24gdGhlaXIgb3V0cHV0IChzb3VyY2UpIHBhZHMuIEV4YW1wbGVzIG9mCisgICAgICAgIHN1Y2ggZWxlbWVudHMgYXJlIGEgdm9sdW1lIGVsZW1lbnQgKGZpbHRlciksIGEgdmlkZW8gc2NhbGVyCisgICAgICAgIChjb252ZXJ0b3IpLCBhbiBPZ2cgZGVtdXhlciBvciBhIFZvcmJpcyBkZWNvZGVyLgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIEZpbHRlci1saWtlIGVsZW1lbnRzIGNhbiBoYXZlIGFueSBudW1iZXIgb2Ygc291cmNlIG9yIHNpbmsgcGFkcy4gQQorICAgICAgICB2aWRlbyBkZW11eGVyLCBmb3IgZXhhbXBsZSwgd291bGQgaGF2ZSBvbmUgc2luayBwYWQgYW5kIHNldmVyYWwKKyAgICAgICAgKDEtTikgc291cmNlIHBhZHMsIG9uZSBmb3IgZWFjaCBlbGVtZW50YXJ5IHN0cmVhbSBjb250YWluZWQgaW4gdGhlCisgICAgICAgIGNvbnRhaW5lciBmb3JtYXQuIERlY29kZXJzLCBvbiB0aGUgb3RoZXIgaGFuZCwgd2lsbCBvbmx5IGhhdmUgb25lCisgICAgICAgIHNvdXJjZSBhbmQgc2luayBwYWRzLgorICAgICAgPC9wYXJhPgorICAgICAgPGZpZ3VyZSBmbG9hdD0iMSIgaWQ9InNlY3Rpb24tZWxlbWVudC1maWx0ZXJpbWciPgorICAgICAgICA8dGl0bGU+VmlzdWFsaXNhdGlvbiBvZiBhIGZpbHRlciBlbGVtZW50PC90aXRsZT4KKyAgICAgICAgICA8bWVkaWFvYmplY3Q+ICAKKyAgICAgICAgICAgIDxpbWFnZW9iamVjdD4KKyAgICAgICAgICAgICAgPGltYWdlZGF0YSBzY2FsZT0iNzUiIGZpbGVyZWY9ImltYWdlcy9maWx0ZXItZWxlbWVudC4maW1hZ2U7IgorICAgICAgICAgICAgICBmb3JtYXQ9IiZJTUFHRTsiLz4KKyAgICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+CisgICAgICAgICAgPC9tZWRpYW9iamVjdD4KKyAgICAgIDwvZmlndXJlPgorICAgICAgPHBhcmE+CisgICAgICAgIDx4cmVmIGxpbmtlbmQ9InNlY3Rpb24tZWxlbWVudC1maWx0ZXJpbWciLz4gc2hvd3MgaG93IHdlIHdpbGwKKyAgICAgICAgdmlzdWFsaXNlIGEgZmlsdGVyLWxpa2UgZWxlbWVudC4gVGhpcyBzcGVjaWZpYyBlbGVtZW50IGhhcyBvbmUgc291cmNlCisgICAgICAgIGFuZCBvbmUgc2luayBlbGVtZW50LiBTaW5rIHBhZHMsIHJlY2VpdmluZyBpbnB1dCBkYXRhLCBhcmUgZGVwaWN0ZWQKKyAgICAgICAgYXQgdGhlIGxlZnQgb2YgdGhlIGVsZW1lbnQ7IHNvdXJjZSBwYWRzIGFyZSBzdGlsbCBvbiB0aGUgcmlnaHQuCisgICAgICA8L3BhcmE+IAorICAgICAgPGZpZ3VyZSBmbG9hdD0iMSIgaWQ9InNlY3Rpb24tZWxlbWVudC1tdWx0aWZpbHRlcmltZyI+CisgICAgICAgIDx0aXRsZT5WaXN1YWxpc2F0aW9uIG9mIGEgZmlsdGVyIGVsZW1lbnQgd2l0aAorCSAgbW9yZSB0aGFuIG9uZSBvdXRwdXQgcGFkPC90aXRsZT4KKyAgICAgICAgPG1lZGlhb2JqZWN0PiAgCisgICAgICAgICAgPGltYWdlb2JqZWN0PgorICAgICAgICAgICAgPGltYWdlZGF0YSBzY2FsZT0iNzUiIGZpbGVyZWY9ImltYWdlcy9maWx0ZXItZWxlbWVudC1tdWx0aS4maW1hZ2U7IiAKKyAgICAgICAgICAgIGZvcm1hdD0iJklNQUdFOyIgLz4KKyAgICAgICAgICA8L2ltYWdlb2JqZWN0PgorICAgICAgICA8L21lZGlhb2JqZWN0PgorICAgICAgPC9maWd1cmU+CisgICAgICA8cGFyYT4KKyAgICAgICAgPHhyZWYgbGlua2VuZD0ic2VjdGlvbi1lbGVtZW50LW11bHRpZmlsdGVyaW1nIi8+IHNob3dzIGFub3RoZXIKKyAgICAgICAgZmlsdGVyLWxpa2UgZWxlbWVudCwgdGhpcyBvbmUgaGF2aW5nIG1vcmUgdGhhbiBvbmUgb3V0cHV0IChzb3VyY2UpCisgICAgICAgIHBhZC4gQW4gZXhhbXBsZSBvZiBvbmUgc3VjaCBlbGVtZW50IGNvdWxkLCBmb3IgZXhhbXBsZSwgYmUgYW4gT2dnCisgICAgICAgIGRlbXV4ZXIgZm9yIGFuIE9nZyBzdHJlYW0gY29udGFpbmluZyBib3RoIGF1ZGlvIGFuZCB2aWRlby4gT25lCisgICAgICAgIHNvdXJjZSBwYWQgd2lsbCBjb250YWluIHRoZSBlbGVtZW50YXJ5IHZpZGVvIHN0cmVhbSwgYW5vdGhlciB3aWxsCisgICAgICAgIGNvbnRhaW4gdGhlIGVsZW1lbnRhcnkgYXVkaW8gc3RyZWFtLiBEZW11eGVycyB3aWxsIGdlbmVyYWxseSBmaXJlCisgICAgICAgIHNpZ25hbHMgd2hlbiBhIG5ldyBwYWQgaXMgY3JlYXRlZC4gVGhlIGFwcGxpY2F0aW9uIHByb2dyYW1tZXIgY2FuCisgICAgICAgIHRoZW4gaGFuZGxlIHRoZSBuZXcgZWxlbWVudGFyeSBzdHJlYW0gaW4gdGhlIHNpZ25hbCBoYW5kbGVyLgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdDI+CisgIAorICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1lbGVtZW50cy1zaW5rIj4KKyAgICAgIDx0aXRsZT5TaW5rIGVsZW1lbnRzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBTaW5rIGVsZW1lbnRzIGFyZSBlbmQgcG9pbnRzIGluIGEgbWVkaWEgcGlwZWxpbmUuIFRoZXkgYWNjZXB0IAorICAgICAgICBkYXRhIGJ1dCBkbyBub3QgcHJvZHVjZSBhbnl0aGluZy4gRGlzayB3cml0aW5nLCBzb3VuZGNhcmQgcGxheWJhY2ssIAorICAgICAgICBhbmQgdmlkZW8gb3V0cHV0IHdvdWxkIGFsbCBiZSBpbXBsZW1lbnRlZCBieSBzaW5rIGVsZW1lbnRzLgorICAgICAgICA8eHJlZiBsaW5rZW5kPSJzZWN0aW9uLWVsZW1lbnQtc2lua2ltZyIvPiBzaG93cyBhIHNpbmsgZWxlbWVudC4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxmaWd1cmUgZmxvYXQ9IjEiIGlkPSJzZWN0aW9uLWVsZW1lbnQtc2lua2ltZyI+CisgICAgICAgIDx0aXRsZT5WaXN1YWxpc2F0aW9uIG9mIGEgc2luayBlbGVtZW50PC90aXRsZT4KKyAgICAgICAgPG1lZGlhb2JqZWN0PiAgCisgICAgICAgICAgPGltYWdlb2JqZWN0PgorICAgICAgICAgICAgPGltYWdlZGF0YSBzY2FsZT0iNzUiIGZpbGVyZWY9ImltYWdlcy9zaW5rLWVsZW1lbnQuJmltYWdlOyIKKyAgICAgICAgICAgIGZvcm1hdD0iJklNQUdFOyIgLz4KKyAgICAgICAgICA8L2ltYWdlb2JqZWN0PgorICAgICAgICA8L21lZGlhb2JqZWN0PgorICAgICAgPC9maWd1cmU+CisgICAgPC9zZWN0Mj4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tZWxlbWVudHMtY3JlYXRlIj4KKyAgICA8dGl0bGU+Q3JlYXRpbmcgYSA8Y2xhc3NuYW1lPkdzdEVsZW1lbnQ8L2NsYXNzbmFtZT48L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgVGhlIHNpbXBsZXN0IHdheSB0byBjcmVhdGUgYW4gZWxlbWVudCBpcyB0byB1c2UgPHVsaW5rIHR5cGU9Imh0dHAiCisgICAgICB1cmw9IiZVUkxBUEk7R3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LW1ha2UiPjxmdW5jdGlvbj5nc3RfZWxlbWVudF9mYWN0b3J5X21ha2UKKyAgICAgICgpPC9mdW5jdGlvbj48L3VsaW5rPi4gVGhpcyBmdW5jdGlvbiB0YWtlcyBhIGZhY3RvcnkgbmFtZSBhbmQgYW4KKyAgICAgIGVsZW1lbnQgbmFtZSBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgZWxlbWVudC4gVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQKKyAgICAgIGlzIHNvbWV0aGluZyB5b3UgY2FuIHVzZSBsYXRlciBvbiB0byBsb29rIHVwIHRoZSBlbGVtZW50IGluIGEgYmluLAorICAgICAgZm9yIGV4YW1wbGUuIFRoZSBuYW1lIHdpbGwgYWxzbyBiZSB1c2VkIGluIGRlYnVnIG91dHB1dC4gWW91IGNhbgorICAgICAgcGFzcyA8c3ltYm9sPk5VTEw8L3N5bWJvbD4gYXMgdGhlIG5hbWUgYXJndW1lbnQgdG8gZ2V0IGEgdW5pcXVlLAorICAgICAgZGVmYXVsdCBuYW1lLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFdoZW4geW91IGRvbid0IG5lZWQgdGhlIGVsZW1lbnQgYW55bW9yZSwgeW91IG5lZWQgdG8gdW5yZWYgaXQgdXNpbmcKKyAgICAgIDx1bGluayB0eXBlPSJodHRwIgorICAgICAgdXJsPSImVVJMQVBJO0dzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtdW5yZWYiPjxmdW5jdGlvbj5nc3Rfb2JqZWN0X3VucmVmIAorICAgICAgKCk8L2Z1bmN0aW9uPjwvdWxpbms+LiBUaGlzIGRlY3JlYXNlcyB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciB0aGUKKyAgICAgIGVsZW1lbnQgYnkgMS4gQW4gZWxlbWVudCBoYXMgYSByZWZjb3VudCBvZiAxIHdoZW4gaXQgZ2V0cyBjcmVhdGVkLgorICAgICAgQW4gZWxlbWVudCBnZXRzIGRlc3Ryb3llZCBjb21wbGV0ZWx5IHdoZW4gdGhlIHJlZmNvdW50IGlzIGRlY3JlYXNlZAorICAgICAgdG8gMC4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgJkVYQUZPT1Q7IHNob3dzIGhvdyB0byBjcmVhdGUgYW4gZWxlbWVudCBuYW1lZAorICAgICAgPGVtcGhhc2lzPnNvdXJjZTwvZW1waGFzaXM+IGZyb20gdGhlIGVsZW1lbnQgZmFjdG9yeSBuYW1lZAorICAgICAgPGVtcGhhc2lzPmZha2VzcmM8L2VtcGhhc2lzPi4gIEl0IGNoZWNrcyBpZiB0aGUgY3JlYXRpb24gc3VjY2VlZGVkLgorICAgICAgQWZ0ZXIgY2hlY2tpbmcsIGl0IHVucmVmcyB0aGUgZWxlbWVudC4KKyAgICA8L3BhcmE+CisgICAgPHByb2dyYW1saXN0aW5nPjwhLS0gZXhhbXBsZS1iZWdpbiBlbGVtZW50bWFrZS5jIC0tPjwhW0NEQVRBWworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworaW50CittYWluIChpbnQgICBhcmdjLAorICAgICAgY2hhciAqYXJndltdKQoreworICBHc3RFbGVtZW50ICplbGVtZW50OworCisgIC8qIGluaXQgR1N0cmVhbWVyICovCisgIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOworCisgIC8qIGNyZWF0ZSBlbGVtZW50ICovCisgIGVsZW1lbnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNvdXJjZSIpOworICBpZiAoIWVsZW1lbnQpIHsKKyAgICBnX3ByaW50ICgiRmFpbGVkIHRvIGNyZWF0ZSBlbGVtZW50IG9mIHR5cGUgJ2Zha2VzcmMnXG4iKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChlbGVtZW50KSk7CisKKyAgcmV0dXJuIDA7Cit9CisgICAgXV0+PCEtLSBleGFtcGxlLWVuZCBlbGVtZW50bWFrZS5jIC0tPjwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+IAorICAgICAgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZTwvZnVuY3Rpb24+IGlzIGFjdHVhbGx5IGEgc2hvcnRoYW5kCisgICAgICBmb3IgYSBjb21iaW5hdGlvbiBvZiB0d28gZnVuY3Rpb25zLiBBIDx1bGluayB0eXBlPSJodHRwIgorICAgICAgdXJsPSImVVJMQVBJO0dzdEVsZW1lbnQuaHRtbCI+PGNsYXNzbmFtZT5Hc3RFbGVtZW50PC9jbGFzc25hbWU+PC91bGluaz4KKyAgICAgIG9iamVjdCBpcyBjcmVhdGVkIGZyb20gYSBmYWN0b3J5LiBUbyBjcmVhdGUgdGhlIGVsZW1lbnQsIHlvdSBoYXZlIHRvCisgICAgICBnZXQgYWNjZXNzIHRvIGEgPHVsaW5rIHR5cGU9Imh0dHAiCisgICAgICB1cmw9IiZVUkxBUEk7R3N0RWxlbWVudEZhY3RvcnkuaHRtbCI+PGNsYXNzbmFtZT5Hc3RFbGVtZW50RmFjdG9yeTwvY2xhc3NuYW1lPjwvdWxpbms+CisgICAgICBvYmplY3QgdXNpbmcgYSB1bmlxdWUgZmFjdG9yeSBuYW1lLiBUaGlzIGlzIGRvbmUgd2l0aCA8dWxpbmsgdHlwZT0iaHR0cCIKKyAgICAgIHVybD0iJlVSTEFQSTtHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktZmluZCI+PGZ1bmN0aW9uPmdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZAorICAgICAgKCk8L2Z1bmN0aW9uPjwvdWxpbms+LgorICAgIDwvcGFyYT4gCisgICAgPHBhcmE+IAorICAgICAgVGhlIGZvbGxvd2luZyBjb2RlIGZyYWdtZW50IGlzIHVzZWQgdG8gZ2V0IGEgZmFjdG9yeSB0aGF0IGNhbiBiZSB1c2VkIAorICAgICAgdG8gY3JlYXRlIHRoZSA8ZW1waGFzaXM+ZmFrZXNyYzwvZW1waGFzaXM+IGVsZW1lbnQsIGEgZmFrZSBkYXRhIHNvdXJjZS4KKyAgICAgIFRoZSBmdW5jdGlvbiA8dWxpbmsgdHlwZT0iaHR0cCIKKyAgICAgIHVybD0iJlVSTEFQSTtHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktY3JlYXRlIj48ZnVuY3Rpb24+Z3N0X2VsZW1lbnRfZmFjdG9yeV9jcmVhdGUKKyAgICAgICgpPC9mdW5jdGlvbj48L3VsaW5rPiB3aWxsIHVzZSB0aGUgZWxlbWVudCBmYWN0b3J5IHRvIGNyZWF0ZSBhbgorICAgICAgZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBuYW1lLgorICAgIDwvcGFyYT4gCisgICAgPHByb2dyYW1saXN0aW5nPjwhLS0gZXhhbXBsZS1iZWdpbiBlbGVtZW50Y3JlYXRlLmMgLS0+PCFbQ0RBVEFbCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCitpbnQKK21haW4gKGludCAgIGFyZ2MsCisgICAgICBjaGFyICphcmd2W10pCit7CisgIEdzdEVsZW1lbnRGYWN0b3J5ICpmYWN0b3J5OworICBHc3RFbGVtZW50ICogZWxlbWVudDsKKworICAvKiBpbml0IEdTdHJlYW1lciAqLworICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKKworICAvKiBjcmVhdGUgZWxlbWVudCwgbWV0aG9kICMyICovCisgIGZhY3RvcnkgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmQgKCJmYWtlc3JjIik7CisgIGlmICghZmFjdG9yeSkgeworICAgIGdfcHJpbnQgKCJGYWlsZWQgdG8gZmluZCBmYWN0b3J5IG9mIHR5cGUgJ2Zha2VzcmMnXG4iKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgZWxlbWVudCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlIChmYWN0b3J5LCAic291cmNlIik7CisgIGlmICghZWxlbWVudCkgeworICAgIGdfcHJpbnQgKCJGYWlsZWQgdG8gY3JlYXRlIGVsZW1lbnQsIGV2ZW4gdGhvdWdoIGl0cyBmYWN0b3J5IGV4aXN0cyFcbiIpOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKGVsZW1lbnQpKTsKKworICByZXR1cm4gMDsKK30KKyAgICBdXT48IS0tIGV4YW1wbGUtZW5kIGVsZW1lbnRjcmVhdGUuYyAtLT48L3Byb2dyYW1saXN0aW5nPgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1lbGVtZW50cy1wcm9wZXJ0aWVzIj4KKyAgICA8dGl0bGU+VXNpbmcgYW4gZWxlbWVudCBhcyBhIDxjbGFzc25hbWU+R09iamVjdDwvY2xhc3NuYW1lPjwvdGl0bGU+CisgICAgPHBhcmE+IAorICAgICAgQSA8dWxpbmsgdHlwZT0iaHR0cCIKKyAgICAgIHVybD0iJlVSTEFQSTtHc3RFbGVtZW50Lmh0bWwiPjxjbGFzc25hbWU+R3N0RWxlbWVudDwvY2xhc3NuYW1lPjwvdWxpbms+CisgICAgICBjYW4gaGF2ZSBzZXZlcmFsIHByb3BlcnRpZXMgd2hpY2ggYXJlIGltcGxlbWVudGVkIHVzaW5nIHN0YW5kYXJkCisgICAgICA8Y2xhc3NuYW1lPkdPYmplY3Q8L2NsYXNzbmFtZT4gcHJvcGVydGllcy4gVGhlIHVzdWFsCisgICAgICA8Y2xhc3NuYW1lPkdPYmplY3Q8L2NsYXNzbmFtZT4gbWV0aG9kcyB0byBxdWVyeSwgc2V0IGFuZCBnZXQKKyAgICAgIHByb3BlcnR5IHZhbHVlcyBhbmQgPGNsYXNzbmFtZT5HUGFyYW1TcGVjczwvY2xhc3NuYW1lPiBhcmUKKyAgICAgIHRoZXJlZm9yZSBzdXBwb3J0ZWQuCisgICAgPC9wYXJhPiAKKyAgICA8cGFyYT4gCisgICAgICBFdmVyeSA8Y2xhc3NuYW1lPkdzdEVsZW1lbnQ8L2NsYXNzbmFtZT4gaW5oZXJpdHMgYXQgbGVhc3Qgb25lCisgICAgICBwcm9wZXJ0eSBmcm9tIGl0cyBwYXJlbnQgPGNsYXNzbmFtZT5Hc3RPYmplY3Q8L2NsYXNzbmFtZT46IHRoZQorICAgICAgIm5hbWUiIHByb3BlcnR5LiBUaGlzIGlzIHRoZSBuYW1lIHlvdSBwcm92aWRlIHRvIHRoZSBmdW5jdGlvbnMKKyAgICAgIDxmdW5jdGlvbj5nc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCk8L2Z1bmN0aW9uPiBvcgorICAgICAgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlICgpPC9mdW5jdGlvbj4uIFlvdSBjYW4gZ2V0CisgICAgICBhbmQgc2V0IHRoaXMgcHJvcGVydHkgdXNpbmcgdGhlIGZ1bmN0aW9ucyAKKyAgICAgIDxmdW5jdGlvbj5nc3Rfb2JqZWN0X3NldF9uYW1lPC9mdW5jdGlvbj4gYW5kCisgICAgICA8ZnVuY3Rpb24+Z3N0X29iamVjdF9nZXRfbmFtZTwvZnVuY3Rpb24+IG9yIHVzZSB0aGUKKyAgICAgIDxjbGFzc25hbWU+R09iamVjdDwvY2xhc3NuYW1lPiBwcm9wZXJ0eSBtZWNoYW5pc20gYXMgc2hvd24gYmVsb3cuCisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz48IS0tIGV4YW1wbGUtYmVnaW4gZWxlbWVudGdldC5jIC0tPjwhW0NEQVRBWworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworaW50CittYWluIChpbnQgICBhcmdjLAorICAgICAgY2hhciAqYXJndltdKQoreworICBHc3RFbGVtZW50ICplbGVtZW50OworICBnY2hhciAqbmFtZTsKKworICAvKiBpbml0IEdTdHJlYW1lciAqLworICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKKworICAvKiBjcmVhdGUgZWxlbWVudCAqLworICBlbGVtZW50ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzb3VyY2UiKTsKKworICAvKiBnZXQgbmFtZSAqLworICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChlbGVtZW50KSwgIm5hbWUiLCAmbmFtZSwgTlVMTCk7CisgIGdfcHJpbnQgKCJUaGUgbmFtZSBvZiB0aGUgZWxlbWVudCBpcyAnJXMnLlxuIiwgbmFtZSk7CisgIGdfZnJlZSAobmFtZSk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAoZWxlbWVudCkpOworCisgIHJldHVybiAwOworfQorICAgIF1dPjwhLS0gZXhhbXBsZS1lbmQgZWxlbWVudGdldC5jIC0tPjwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+CisgICAgICBNb3N0IHBsdWdpbnMgcHJvdmlkZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gcHJvdmlkZSBtb3JlIGluZm9ybWF0aW9uCisgICAgICBhYm91dCB0aGVpciBjb25maWd1cmF0aW9uIG9yIHRvIGNvbmZpZ3VyZSB0aGUgZWxlbWVudC4KKyAgICAgIDxjb21tYW5kPmdzdC1pbnNwZWN0PC9jb21tYW5kPiBpcyBhIHVzZWZ1bCB0b29sIHRvIHF1ZXJ5IHRoZSBwcm9wZXJ0aWVzCisgICAgICBvZiBhIHBhcnRpY3VsYXIgZWxlbWVudCwgaXQgd2lsbCBhbHNvIHVzZSBwcm9wZXJ0eSBpbnRyb3NwZWN0aW9uIHRvIGdpdmUKKyAgICAgIGEgc2hvcnQgZXhwbGFuYXRpb24gYWJvdXQgdGhlIGZ1bmN0aW9uIG9mIHRoZSBwcm9wZXJ0eSBhbmQgYWJvdXQgdGhlCisgICAgICBwYXJhbWV0ZXIgdHlwZXMgYW5kIHJhbmdlcyBpdCBzdXBwb3J0cy4gU2VlCisgICAgICA8eHJlZiBsaW5rZW5kPSJzZWN0aW9uLWFwcGxpY2F0aW9ucy1pbnNwZWN0Ii8+CisgICAgICBpbiB0aGUgYXBwZW5kaXggZm9yIGRldGFpbHMgYWJvdXQgPGNvbW1hbmQ+Z3N0LWluc3BlY3Q8L2NvbW1hbmQ+LgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IDxjbGFzc25hbWU+R09iamVjdDwvY2xhc3NuYW1lPgorICAgICAgcHJvcGVydGllcyB3ZSByZWNvbW1lbmQgeW91IHJlYWQgdGhlIDx1bGluaworICAgICAgdXJsPSJodHRwOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9kb2MvQVBJLzIuMC9nb2JqZWN0L2luZGV4Lmh0bWwiCisgICAgICB0eXBlPSJodHRwIj5HT2JqZWN0IG1hbnVhbDwvdWxpbms+IGFuZCBhbiBpbnRyb2R1Y3Rpb24gdG8gPHVsaW5rCisgICAgICB1cmw9Imh0dHA6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2RvYy9BUEkvMi4wL2dvYmplY3QvcHIwMS5odG1sIiB0eXBlPSJodHRwIj4KKwlUaGUgR2xpYiBPYmplY3Qgc3lzdGVtPC91bGluaz4uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgQSA8dWxpbmsgdHlwZT0iaHR0cCIgdXJsPSImVVJMQVBJO0dzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiPgorICAgICAgPGNsYXNzbmFtZT5Hc3RFbGVtZW50PC9jbGFzc25hbWU+PC91bGluaz4gYWxzbyBwcm92aWRlcyB2YXJpb3VzIAorICAgICAgPGNsYXNzbmFtZT5HT2JqZWN0PC9jbGFzc25hbWU+IHNpZ25hbHMgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIGZsZXhpYmxlCisgICAgICBjYWxsYmFjayBtZWNoYW5pc20uIEhlcmUsIHRvbywgeW91IGNhbiB1c2UgPGNvbW1hbmQ+Z3N0LWluc3BlY3Q8L2NvbW1hbmQ+CisgICAgICB0byBzZWUgd2hpY2ggc2lnbmFscyBhIHNwZWNpZmljIGVsZW1lbnQgc3VwcG9ydHMuIFRvZ2V0aGVyLCBzaWduYWxzCisgICAgICBhbmQgcHJvcGVydGllcyBhcmUgdGhlIG1vc3QgYmFzaWMgd2F5IGluIHdoaWNoIGVsZW1lbnRzIGFuZAorICAgICAgYXBwbGljYXRpb25zIGludGVyYWN0LgorICAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tZWxlbWVudHMtZmFjdG9yaWVzIj4KKyAgICA8dGl0bGU+TW9yZSBhYm91dCBlbGVtZW50IGZhY3RvcmllczwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBJbiB0aGUgcHJldmlvdXMgc2VjdGlvbiwgd2UgYnJpZWZseSBpbnRyb2R1Y2VkIHRoZSA8dWxpbmsgdHlwZT0iaHR0cCIKKyAgICAgIHVybD0iJlVSTEFQSTtHc3RFbGVtZW50Lmh0bWwiPjxjbGFzc25hbWU+R3N0RWxlbWVudEZhY3Rvcnk8L2NsYXNzbmFtZT48L3VsaW5rPgorICAgICAgb2JqZWN0IGFscmVhZHkgYXMgYSB3YXkgdG8gY3JlYXRlIGluc3RhbmNlcyBvZiBhbiBlbGVtZW50LiBFbGVtZW50CisgICAgICBmYWN0b3JpZXMsIGhvd2V2ZXIsIGFyZSBtdWNoIG1vcmUgdGhhbiBqdXN0IHRoYXQuIEVsZW1lbnQgZmFjdG9yaWVzCisgICAgICBhcmUgdGhlIGJhc2ljIHR5cGVzIHJldHJpZXZlZCBmcm9tIHRoZSAmR1N0cmVhbWVyOyByZWdpc3RyeSwgdGhleQorICAgICAgZGVzY3JpYmUgYWxsIHBsdWdpbnMgYW5kIGVsZW1lbnRzIHRoYXQgJkdTdHJlYW1lcjsgY2FuIGNyZWF0ZS4gVGhpcworICAgICAgbWVhbnMgdGhhdCBlbGVtZW50IGZhY3RvcmllcyBhcmUgdXNlZnVsIGZvciBhdXRvbWF0ZWQgZWxlbWVudAorICAgICAgaW5zdGFuY2luZywgc3VjaCBhcyB3aGF0IGF1dG9wbHVnZ2VycyBkbywgYW5kIGZvciBjcmVhdGluZyBsaXN0cworICAgICAgb2YgYXZhaWxhYmxlIGVsZW1lbnRzLCBzdWNoIGFzIHdoYXQgcGlwZWxpbmUgZWRpdGluZyBhcHBsaWNhdGlvbnMKKyAgICAgIChlLmcuIDx1bGluayB0eXBlPSJodHRwIgorICAgICAgdXJsPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9tb2R1bGVzL2dzdC1lZGl0b3IuaHRtbCI+JkdTdHJlYW1lcjsKKyAgICAgIEVkaXRvcjwvdWxpbms+KSBkby4KKyAgICA8L3BhcmE+CisgICAgCisgICAgPHNlY3QyIGlkPSJzZWN0aW9uLWVsZW1lbnRzLWZhY3Rvcmllcy1kZXRhaWxzIj4KKyAgICAgIDx0aXRsZT5HZXR0aW5nIGluZm9ybWF0aW9uIGFib3V0IGFuIGVsZW1lbnQgdXNpbmcgYSBmYWN0b3J5PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUb29scyBsaWtlIDxjb21tYW5kPmdzdC1pbnNwZWN0PC9jb21tYW5kPiB3aWxsIHByb3ZpZGUgc29tZSBnZW5lcmljCisgICAgICAgIGluZm9ybWF0aW9uIGFib3V0IGFuIGVsZW1lbnQsIHN1Y2ggYXMgdGhlIHBlcnNvbiB0aGF0IHdyb3RlIHRoZQorICAgICAgICBwbHVnaW4sIGEgZGVzY3JpcHRpdmUgbmFtZSAoYW5kIGEgc2hvcnRuYW1lKSwgYSByYW5rIGFuZCBhIGNhdGVnb3J5LgorICAgICAgICBUaGUgY2F0ZWdvcnkgY2FuIGJlIHVzZWQgdG8gZ2V0IHRoZSB0eXBlIG9mIHRoZSBlbGVtZW50IHRoYXQgY2FuCisgICAgICAgIGJlIGNyZWF0ZWQgdXNpbmcgdGhpcyBlbGVtZW50IGZhY3RvcnkuIEV4YW1wbGVzIG9mIGNhdGVnb3JpZXMgaW5jbHVkZQorICAgICAgICA8Y2xhc3NuYW1lPkNvZGVjL0RlY29kZXIvVmlkZW88L2NsYXNzbmFtZT4gKHZpZGVvIGRlY29kZXIpLAorICAgICAgICA8Y2xhc3NuYW1lPkNvZGVjL0VuY29kZXIvVmlkZW88L2NsYXNzbmFtZT4gKHZpZGVvIGVuY29kZXIpLAorICAgICAgICA8Y2xhc3NuYW1lPlNvdXJjZS9WaWRlbzwvY2xhc3NuYW1lPiAoYSB2aWRlbyBnZW5lcmF0b3IpLAorICAgICAgICA8Y2xhc3NuYW1lPlNpbmsvVmlkZW88L2NsYXNzbmFtZT4gKGEgdmlkZW8gb3V0cHV0KSwgYW5kIGFsbCB0aGVzZQorICAgICAgICBleGlzdCBmb3IgYXVkaW8gYXMgd2VsbCwgb2YgY291cnNlLiBUaGVuLCB0aGVyZSdzIGFsc28KKyAgICAgICAgPGNsYXNzbmFtZT5Db2RlYy9EZW11eGVyPC9jbGFzc25hbWU+IGFuZAorICAgICAgICA8Y2xhc3NuYW1lPkNvZGVjL011eGVyPC9jbGFzc25hbWU+IGFuZCBhIHdob2xlIGxvdCBtb3JlLgorICAgICAgICA8Y29tbWFuZD5nc3QtaW5zcGVjdDwvY29tbWFuZD4gd2lsbCBnaXZlIGEgbGlzdCBvZiBhbGwgZmFjdG9yaWVzLCBhbmQKKyAgICAgICAgPGNvbW1hbmQ+Z3N0LWluc3BlY3QgJmx0O2ZhY3RvcnktbmFtZSZndDs8L2NvbW1hbmQ+IHdpbGwgbGlzdCBhbGwKKyAgICAgICAgb2YgdGhlIGFib3ZlIGluZm9ybWF0aW9uLCBhbmQgYSBsb3QgbW9yZS4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwcm9ncmFtbGlzdGluZz48IS0tIGV4YW1wbGUtYmVnaW4gZWxlbWVudGZhY3RvcnkuYyAtLT48IVtDREFUQVsKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKK2ludAorbWFpbiAoaW50ICAgYXJnYywKKyAgICAgIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgR3N0RWxlbWVudEZhY3RvcnkgKmZhY3Rvcnk7CisKKyAgLyogaW5pdCBHU3RyZWFtZXIgKi8KKyAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7CisKKyAgLyogZ2V0IGZhY3RvcnkgKi8KKyAgZmFjdG9yeSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZCAoImZha2VzcmMiKTsKKyAgaWYgKCFmYWN0b3J5KSB7CisgICAgZ19wcmludCAoIllvdSBkb24ndCBoYXZlIHRoZSAnZmFrZXNyYycgZWxlbWVudCBpbnN0YWxsZWQhXG4iKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICAvKiBkaXNwbGF5IGluZm9ybWF0aW9uICovCisgIGdfcHJpbnQgKCJUaGUgJyVzJyBlbGVtZW50IGlzIGEgbWVtYmVyIG9mIHRoZSBjYXRlZ29yeSAlcy5cbiIKKyAgICAgICAgICAgIkRlc2NyaXB0aW9uOiAlc1xuIiwKKyAgICAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9uYW1lIChHU1RfUExVR0lOX0ZFQVRVUkUgKGZhY3RvcnkpKSwKKyAgICAgICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfa2xhc3MgKGZhY3RvcnkpLAorICAgICAgICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9kZXNjcmlwdGlvbiAoZmFjdG9yeSkpOworCisgIHJldHVybiAwOworfQorICAgICAgXV0+PCEtLSBleGFtcGxlLWVuZCBlbGVtZW50ZmFjdG9yeS5jIC0tPjwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiB1c2UgPGZ1bmN0aW9uPmdzdF9yZWdpc3RyeV9wb29sX2ZlYXR1cmVfbGlzdCAoR1NUX1RZUEVfRUxFTUVOVF9GQUNUT1JZKTwvZnVuY3Rpb24+CisgICAgICAgIHRvIGdldCBhIGxpc3Qgb2YgYWxsIHRoZSBlbGVtZW50IGZhY3RvcmllcyB0aGF0ICZHU3RyZWFtZXI7IGtub3dzCisgICAgICAgIGFib3V0LgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdDI+CisgICAgCisgICAgPHNlY3QyIGlkPSJzZWN0aW9uLWVsZW1lbnRzLWZhY3Rvcmllcy1wYWR0ZW1wbGF0ZXMiPgorICAgICAgPHRpdGxlPkZpbmRpbmcgb3V0IHdoYXQgcGFkcyBhbiBlbGVtZW50IGNhbiBjb250YWluPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBQZXJoYXBzIHRoZSBtb3N0IHBvd2VyZnVsIGZlYXR1cmUgb2YgZWxlbWVudCBmYWN0b3JpZXMgaXMgdGhhdAorICAgICAgICB0aGV5IGNvbnRhaW4gYSBmdWxsIGRlc2NyaXB0aW9uIG9mIHRoZSBwYWRzIHRoYXQgdGhlIGVsZW1lbnQKKyAgICAgICAgY2FuIGdlbmVyYXRlLCBhbmQgdGhlIGNhcGFiaWxpdGllcyBvZiB0aG9zZSBwYWRzIChpbiBsYXltYW4gd29yZHM6CisgICAgICAgIHdoYXQgdHlwZXMgb2YgbWVkaWEgY2FuIHN0cmVhbSBvdmVyIHRob3NlIHBhZHMpLCB3aXRob3V0IGFjdHVhbGx5CisgICAgICAgIGhhdmluZyB0byBsb2FkIHRob3NlIHBsdWdpbnMgaW50byBtZW1vcnkuIFRoaXMgY2FuIGJlIHVzZWQKKyAgICAgICAgdG8gcHJvdmlkZSBhIGNvZGVjIHNlbGVjdGlvbiBsaXN0IGZvciBlbmNvZGVycywgb3IgaXQgY2FuIGJlIHVzZWQKKyAgICAgICAgZm9yIGF1dG9wbHVnZ2luZyBwdXJwb3NlcyBmb3IgbWVkaWEgcGxheWVycy4gQWxsIGN1cnJlbnQKKyAgICAgICAgJkdTdHJlYW1lcjstYmFzZWQgbWVkaWEgcGxheWVycyBhbmQgYXV0b3BsdWdnZXJzIHdvcmsgdGhpcyB3YXkuCisgICAgICAgIFdlJ2xsIGxvb2sgY2xvc2VyIGF0IHRoZXNlIGZlYXR1cmVzIGFzIHdlIGxlYXJuIGFib3V0CisgICAgICAgIDxjbGFzc25hbWU+R3N0UGFkPC9jbGFzc25hbWU+IGFuZCA8Y2xhc3NuYW1lPkdzdENhcHM8L2NsYXNzbmFtZT4KKyAgICAgICAgaW4gdGhlIG5leHQgY2hhcHRlcjogPHhyZWYgbGlua2VuZD0iY2hhcHRlci1wYWRzIi8+CisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0Mj4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tZWxlbWVudHMtbGluayIgeHJlZmxhYmVsPSJMaW5raW5nIGVsZW1lbnRzIj4KKyAgICA8dGl0bGU+TGlua2luZyBlbGVtZW50czwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBCeSBsaW5raW5nIGEgc291cmNlIGVsZW1lbnQgd2l0aCB6ZXJvIG9yIG1vcmUgZmlsdGVyLWxpa2UKKyAgICAgIGVsZW1lbnRzIGFuZCBmaW5hbGx5IGEgc2luayBlbGVtZW50LCB5b3Ugc2V0IHVwIGEgbWVkaWEKKyAgICAgIHBpcGVsaW5lLiBEYXRhIHdpbGwgZmxvdyB0aHJvdWdoIHRoZSBlbGVtZW50cy4gVGhpcyBpcyB0aGUKKyAgICAgIGJhc2ljIGNvbmNlcHQgb2YgbWVkaWEgaGFuZGxpbmcgaW4gJkdTdHJlYW1lcjsuCisgICAgPC9wYXJhPgorICAgIDxmaWd1cmUgZmxvYXQ9IjEiIGlkPSJzZWN0aW9uLWxpbmsiPgorICAgICAgPHRpdGxlPlZpc3VhbGlzYXRpb24gb2YgdGhyZWUgbGlua2VkIGVsZW1lbnRzPC90aXRsZT4KKyAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgIDxpbWFnZW9iamVjdD4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgc2NhbGU9Ijc1IiBmaWxlcmVmPSJpbWFnZXMvbGlua2VkLWVsZW1lbnRzLiZpbWFnZTsiCisgICAgICAgICAgICBmb3JtYXQ9IiZJTUFHRTsiLz4KKyAgICAgICAgICA8L2ltYWdlb2JqZWN0PgorICAgICAgICA8L21lZGlhb2JqZWN0PgorICAgIDwvZmlndXJlPgorICAgIDxwYXJhPgorICAgICAgQnkgbGlua2luZyB0aGVzZSB0aHJlZSBlbGVtZW50cywgd2UgaGF2ZSBjcmVhdGVkIGEgdmVyeSBzaW1wbGUKKyAgICAgIGNoYWluIG9mIGVsZW1lbnRzLiBUaGUgZWZmZWN0IG9mIHRoaXMgd2lsbCBiZSB0aGF0IHRoZSBvdXRwdXQgb2YKKyAgICAgIHRoZSBzb3VyY2UgZWxlbWVudCAoPHF1b3RlPmVsZW1lbnQxPC9xdW90ZT4pIHdpbGwgYmUgdXNlZCBhcyBpbnB1dAorICAgICAgZm9yIHRoZSBmaWx0ZXItbGlrZSBlbGVtZW50ICg8cXVvdGU+ZWxlbWVudDI8L3F1b3RlPikuIFRoZQorICAgICAgZmlsdGVyLWxpa2UgZWxlbWVudCB3aWxsIGRvIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhIGFuZCBzZW5kIHRoZQorICAgICAgcmVzdWx0IHRvIHRoZSBmaW5hbCBzaW5rIGVsZW1lbnQgKDxxdW90ZT5lbGVtZW50MzwvcXVvdGU+KS4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBJbWFnaW5lIHRoZSBhYm92ZSBncmFwaCBhcyBhIHNpbXBsZSBPZ2cvVm9yYmlzIGF1ZGlvIGRlY29kZXIuIFRoZQorICAgICAgc291cmNlIGlzIGEgZGlzayBzb3VyY2Ugd2hpY2ggcmVhZHMgdGhlIGZpbGUgZnJvbSBkaXNjLiBUaGUgc2Vjb25kCisgICAgICBlbGVtZW50IGlzIGEgT2dnL1ZvcmJpcyBhdWRpbyBkZWNvZGVyLiBUaGUgc2luayBlbGVtZW50IGlzIHlvdXIKKyAgICAgIHNvdW5kY2FyZCwgcGxheWluZyBiYWNrIHRoZSBkZWNvZGVkIGF1ZGlvIGRhdGEuIFdlIHdpbGwgdXNlIHRoaXMKKyAgICAgIHNpbXBsZSBncmFwaCB0byBjb25zdHJ1Y3QgYW4gT2dnL1ZvcmJpcyBwbGF5ZXIgbGF0ZXIgaW4gdGhpcyBtYW51YWwuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgSW4gY29kZSwgdGhlIGFib3ZlIGdyYXBoIGlzIHdyaXR0ZW4gbGlrZSB0aGlzOgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3Rpbmc+PCEtLSBleGFtcGxlLWJlZ2luIGVsZW1lbnRsaW5rLmMgYSAtLT4KKyNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7CisKK2ludAorbWFpbiAoaW50ICAgYXJnYywKKyAgICAgIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmU7CisgIEdzdEVsZW1lbnQgKnNvdXJjZSwgKmZpbHRlciwgKnNpbms7CisKKyAgLyogaW5pdCAqLworICBnc3RfaW5pdCAoJmFtcDthcmdjLCAmYW1wO2FyZ3YpOworCisgIC8qIGNyZWF0ZSBwaXBlbGluZSAqLworICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJteS1waXBlbGluZSIpOworCisgIC8qIGNyZWF0ZSBlbGVtZW50cyAqLworICBzb3VyY2UgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNvdXJjZSIpOworICBmaWx0ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpZGVudGl0eSIsICJmaWx0ZXIiKTsKKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKKworICAvKiBtdXN0IGFkZCBlbGVtZW50cyB0byBwaXBlbGluZSBiZWZvcmUgbGlua2luZyB0aGVtICovCisgIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc291cmNlLCBmaWx0ZXIsIHNpbmssIE5VTEwpOworCisgIC8qIGxpbmsgKi8KKyAgaWYgKCFnc3RfZWxlbWVudF9saW5rX21hbnkgKHNvdXJjZSwgZmlsdGVyLCBzaW5rLCBOVUxMKSkgeworICAgIGdfd2FybmluZyAoIkZhaWxlZCB0byBsaW5rIGVsZW1lbnRzISIpOworICB9Cis8IS0tIGV4YW1wbGUtZW5kIGVsZW1lbnRsaW5rLmMgYSAtLT4KK1suLl08IS0tIGV4YW1wbGUtYmVnaW4gZWxlbWVudGxpbmsuYyBiIC0tPjwhLS0KKyAgcmV0dXJuIDA7CistLT48IS0tIGV4YW1wbGUtZW5kIGVsZW1lbnRsaW5rLmMgYiAtLT4KKzwhLS0gZXhhbXBsZS1iZWdpbiBlbGVtZW50bGluay5jIGMgLS0+Cit9CisgICAgPCEtLSBleGFtcGxlLWVuZCBlbGVtZW50bGluay5jIGMgLS0+PC9wcm9ncmFtbGlzdGluZz4KKyAgICA8cGFyYT4KKyAgICAgIEZvciBtb3JlIHNwZWNpZmljIGJlaGF2aW91ciwgdGhlcmUgYXJlIGFsc28gdGhlIGZ1bmN0aW9ucworICAgICAgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X2xpbmsgKCk8L2Z1bmN0aW9uPiBhbmQKKyAgICAgIDxmdW5jdGlvbj5nc3RfZWxlbWVudF9saW5rX3BhZHMgKCk8L2Z1bmN0aW9uPi4gWW91IGNhbiBhbHNvIG9idGFpbgorICAgICAgcmVmZXJlbmNlcyB0byBpbmRpdmlkdWFsIHBhZHMgYW5kIGxpbmsgdGhvc2UgdXNpbmcgdmFyaW91cworICAgICAgPGZ1bmN0aW9uPmdzdF9wYWRfbGlua18qICgpPC9mdW5jdGlvbj4gZnVuY3Rpb25zLiBTZWUgdGhlIEFQSQorICAgICAgcmVmZXJlbmNlcyBmb3IgbW9yZSBkZXRhaWxzLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIEltcG9ydGFudDogeW91IG11c3QgYWRkIGVsZW1lbnRzIHRvIGEgYmluIG9yIHBpcGVsaW5lCisgICAgICA8ZW1waGFzaXM+YmVmb3JlPC9lbXBoYXNpcz4gbGlua2luZyB0aGVtLCBzaW5jZSBhZGRpbmcgYW4gZWxlbWVudCB0bworICAgICAgYSBiaW4gd2lsbCBkaXNjb25uZWN0IGFueSBhbHJlYWR5IGV4aXN0aW5nIGxpbmtzLiBBbHNvLCB5b3UgY2Fubm90CisgICAgICBkaXJlY3RseSBsaW5rIGVsZW1lbnRzIHRoYXQgYXJlIG5vdCBpbiB0aGUgc2FtZSBiaW4gb3IgcGlwZWxpbmU7IGlmCisgICAgICB5b3Ugd2FudCB0byBsaW5rIGVsZW1lbnRzIG9yIHBhZHMgYXQgZGlmZmVyZW50IGhpZXJhcmNoeSBsZXZlbHMsIHlvdQorICAgICAgd2lsbCBuZWVkIHRvIHVzZSBnaG9zdCBwYWRzIChtb3JlIGFib3V0IGdob3N0IHBhZHMgbGF0ZXIpLgorICAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tZWxlbWVudHMtc3RhdGVzIj4KKyAgICA8dGl0bGU+RWxlbWVudCBTdGF0ZXM8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgQWZ0ZXIgYmVpbmcgY3JlYXRlZCwgYW4gZWxlbWVudCB3aWxsIG5vdCBhY3R1YWxseSBwZXJmb3JtIGFueSBhY3Rpb25zCisgICAgICB5ZXQuIFlvdSBuZWVkIHRvIGNoYW5nZSBlbGVtZW50cyBzdGF0ZSB0byBtYWtlIGl0IGRvIHNvbWV0aGluZy4KKyAgICAgICZHU3RyZWFtZXI7IGtub3dzIGZvdXIgZWxlbWVudCBzdGF0ZXMsIGVhY2ggd2l0aCBhIHZlcnkgc3BlY2lmaWMKKyAgICAgIG1lYW5pbmcuIFRob3NlIGZvdXIgc3RhdGVzIGFyZToKKyAgICA8L3BhcmE+CisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGNsYXNzbmFtZT5HU1RfU1RBVEVfTlVMTDwvY2xhc3NuYW1lPjogdGhpcyBpcyB0aGUgZGVmYXVsdCBzdGF0ZS4KKyAgICAgICAgICBObyByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCBpbiB0aGlzIHN0YXRlLCBzbywgdHJhbnNpdGlvbmluZyB0byBpdAorICAgICAgICAgIHdpbGwgZnJlZSBhbGwgcmVzb3VyY2VzLiBUaGUgZWxlbWVudCBtdXN0IGJlIGluIHRoaXMgc3RhdGUgd2hlbgorICAgICAgICAgIGl0cyByZWZjb3VudCByZWFjaGVzIDAgYW5kIGl0IGlzIGZyZWVkLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8Y2xhc3NuYW1lPkdTVF9TVEFURV9SRUFEWTwvY2xhc3NuYW1lPjogaW4gdGhlIHJlYWR5IHN0YXRlLCBhbgorICAgICAgICAgIGVsZW1lbnQgaGFzIGFsbG9jYXRlZCBhbGwgb2YgaXRzIGdsb2JhbCByZXNvdXJjZXMsIHRoYXQgaXMsCisgICAgICAgICAgcmVzb3VyY2VzIHRoYXQgY2FuIGJlIGtlcHQgd2l0aGluIHN0cmVhbXMuIFlvdSBjYW4gdGhpbmsgYWJvdXQKKyAgICAgICAgICBvcGVuaW5nIGRldmljZXMsIGFsbG9jYXRpbmcgYnVmZmVycyBhbmQgc28gb24uIEhvd2V2ZXIsIHRoZQorICAgICAgICAgIHN0cmVhbSBpcyBub3Qgb3BlbmVkIGluIHRoaXMgc3RhdGUsIHNvIHRoZSBzdHJlYW0gcG9zaXRpb25zIGlzCisgICAgICAgICAgYXV0b21hdGljYWxseSB6ZXJvLiBJZiBhIHN0cmVhbSB3YXMgcHJldmlvdXNseSBvcGVuZWQsIGl0IHNob3VsZAorICAgICAgICAgIGJlIGNsb3NlZCBpbiB0aGlzIHN0YXRlLCBhbmQgcG9zaXRpb24sIHByb3BlcnRpZXMgYW5kIHN1Y2ggc2hvdWxkCisgICAgICAgICAgYmUgcmVzZXQuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxjbGFzc25hbWU+R1NUX1NUQVRFX1BBVVNFRDwvY2xhc3NuYW1lPjogaW4gdGhpcyBzdGF0ZSwgYW4KKyAgICAgICAgICBlbGVtZW50IGhhcyBvcGVuZWQgdGhlIHN0cmVhbSwgYnV0IGlzIG5vdCBhY3RpdmVseSBwcm9jZXNzaW5nCisgICAgICAgICAgaXQuIEFuIGVsZW1lbnQgaXMgYWxsb3dlZCB0byBtb2RpZnkgYSBzdHJlYW0ncyBwb3NpdGlvbiwgcmVhZAorICAgICAgICAgIGFuZCBwcm9jZXNzIGRhdGEgYW5kIHN1Y2ggdG8gcHJlcGFyZSBmb3IgcGxheWJhY2sgYXMgc29vbiBhcworICAgICAgICAgIHN0YXRlIGlzIGNoYW5nZWQgdG8gUExBWUlORywgYnV0IGl0IGlzIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPgorICAgICAgICAgIGFsbG93ZWQgdG8gcGxheSB0aGUgZGF0YSB3aGljaCB3b3VsZCBtYWtlIHRoZSBjbG9jayBydW4uCisgICAgICAgICAgSW4gc3VtbWFyeSwgUEFVU0VEIGlzIHRoZSBzYW1lIGFzIFBMQVlJTkcgYnV0IHdpdGhvdXQgYSBydW5uaW5nCisgICAgICAgICAgY2xvY2suCisgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8cGFyYT4KKyAgICAgICAgICBFbGVtZW50cyBnb2luZyBpbnRvIHRoZSBQQVVTRUQgc3RhdGUgc2hvdWxkIHByZXBhcmUgdGhlbXNlbHZlcworICAgICAgICAgIGZvciBtb3Zpbmcgb3ZlciB0byB0aGUgUExBWUlORyBzdGF0ZSBhcyBzb29uIGFzIHBvc3NpYmxlLiBWaWRlbworICAgICAgICAgIG9yIGF1ZGlvIG91dHB1dHMgd291bGQsIGZvciBleGFtcGxlLCB3YWl0IGZvciBkYXRhIHRvIGFycml2ZSBhbmQKKyAgICAgICAgICBxdWV1ZSBpdCBzbyB0aGV5IGNhbiBwbGF5IGl0IHJpZ2h0IGFmdGVyIHRoZSBzdGF0ZSBjaGFuZ2UuIEFsc28sCisgICAgICAgICAgdmlkZW8gc2lua3MgY2FuIGFscmVhZHkgcGxheSB0aGUgZmlyc3QgZnJhbWUgKHNpbmNlIHRoaXMgZG9lcworICAgICAgICAgIG5vdCBhZmZlY3QgdGhlIGNsb2NrIHlldCkuIEF1dG9wbHVnZ2VycyBjb3VsZCB1c2UgdGhpcyBzYW1lCisgICAgICAgICAgc3RhdGUgdHJhbnNpdGlvbiB0byBhbHJlYWR5IHBsdWcgdG9nZXRoZXIgYSBwaXBlbGluZS4gTW9zdCBvdGhlcgorICAgICAgICAgIGVsZW1lbnRzLCBzdWNoIGFzIGNvZGVjcyBvciBmaWx0ZXJzLCBkbyBub3QgbmVlZCB0byBleHBsaWNpdGx5CisgICAgICAgICAgZG8gYW55dGhpbmcgaW4gdGhpcyBzdGF0ZSwgaG93ZXZlci4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGNsYXNzbmFtZT5HU1RfU1RBVEVfUExBWUlORzwvY2xhc3NuYW1lPjogaW4gdGhlIFBMQVlJTkcgc3RhdGUsCisgICAgICAgICAgYW4gZWxlbWVudCBkb2VzIGV4YWN0bHkgdGhlIHNhbWUgYXMgaW4gdGhlIFBBVVNFRCBzdGF0ZSwgZXhjZXB0CisgICAgICAgICAgdGhhdCB0aGUgY2xvY2sgbm93IHJ1bnMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPHBhcmE+CisgICAgICBZb3UgY2FuIGNoYW5nZSB0aGUgc3RhdGUgb2YgYW4gZWxlbWVudCB1c2luZyB0aGUgZnVuY3Rpb24KKyAgICAgIDxmdW5jdGlvbj5nc3RfZWxlbWVudF9zZXRfc3RhdGUgKCk8L2Z1bmN0aW9uPi4gSWYgeW91IHNldCBhbiBlbGVtZW50CisgICAgICB0byBhbm90aGVyIHN0YXRlLCAmR1N0cmVhbWVyOyB3aWxsIGludGVybmFsbHkgdHJhdmVyc2UgYWxsIGludGVybWVkaWF0ZQorICAgICAgc3RhdGVzLiBTbyBpZiB5b3Ugc2V0IGFuIGVsZW1lbnQgZnJvbSBOVUxMIHRvIFBMQVlJTkcsICZHU3RyZWFtZXI7CisgICAgICB3aWxsIGludGVybmFsbHkgc2V0IHRoZSBlbGVtZW50IHRvIFJFQURZIGFuZCBQQVVTRUQgaW4gYmV0d2Vlbi4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBXaGVuIG1vdmVkIHRvIDxjbGFzc25hbWU+R1NUX1NUQVRFX1BMQVlJTkc8L2NsYXNzbmFtZT4sIHBpcGVsaW5lcworICAgICAgd2lsbCBwcm9jZXNzIGRhdGEgYXV0b21hdGljYWxseS4gVGhleSBkbyBub3QgbmVlZCB0byBiZSBpdGVyYXRlZCBpbgorICAgICAgYW55IGZvcm0uIEludGVybmFsbHksICZHU3RyZWFtZXI7IHdpbGwgc3RhcnQgdGhyZWFkcyB0aGF0IHRha2UgdGhpcworICAgICAgdGFzayBvbiB0byB0aGVtLiAmR1N0cmVhbWVyOyB3aWxsIGFsc28gdGFrZSBjYXJlIG9mIHN3aXRjaGluZworICAgICAgbWVzc2FnZXMgZnJvbSB0aGUgcGlwZWxpbmUncyB0aHJlYWQgaW50byB0aGUgYXBwbGljYXRpb24ncyBvd24KKyAgICAgIHRocmVhZCwgYnkgdXNpbmcgYSA8dWxpbmsgdHlwZT0iaHR0cCIKKyAgICAgIHVybD0iJlVSTEFQSTtHc3RCdXMuaHRtbCI+PGNsYXNzbmFtZT5Hc3RCdXM8L2NsYXNzbmFtZT48L3VsaW5rPi4gU2VlCisgICAgICA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLWJ1cyIvPiBmb3IgZGV0YWlscy4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBXaGVuIHlvdSBzZXQgYSBiaW4gb3IgcGlwZWxpbmUgdG8gYSBjZXJ0YWluIHRhcmdldCBzdGF0ZSwgaXQgd2lsbCB1c3VhbGx5CisgICAgICBwcm9wYWdhdGUgdGhlIHN0YXRlIGNoYW5nZSB0byBhbGwgZWxlbWVudHMgd2l0aGluIHRoZSBiaW4gb3IgcGlwZWxpbmUKKyAgICAgIGF1dG9tYXRpY2FsbHksIHNvIGl0J3MgdXN1YWxseSBvbmx5IG5lY2Vzc2FyeSB0byBzZXQgdGhlIHN0YXRlIG9mIHRoZQorICAgICAgdG9wLWxldmVsIHBpcGVsaW5lIHRvIHN0YXJ0IHVwIHRoZSBwaXBlbGluZSBvciBzaHV0IGl0IGRvd24uIEhvd2V2ZXIsCisgICAgICB3aGVuIGFkZGluZyBlbGVtZW50cyBkeW5hbWljYWxseSB0byBhbiBhbHJlYWR5LXJ1bm5pbmcgcGlwZWxpbmUsIGUuZy4KKyAgICAgIGZyb20gd2l0aGluIGEgInBhZC1hZGRlZCIgb3IgIm5ldy1kZWNvZGVkLXBhZCIgc2lnbmFsIGNhbGxiYWNrLCB5b3UKKyAgICAgIG5lZWQgdG8gc2V0IGl0IHRvIHRoZSBkZXNpcmVkIHRhcmdldCBzdGF0ZSB5b3Vyc2VsZiB1c2luZworICAgICAgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X3NldF9zdGF0ZSAoKTwvZnVuY3Rpb24+IG9yCisgICAgICA8ZnVuY3Rpb24+Z3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudCAoKTwvZnVuY3Rpb24+LgorICAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2Jhc2ljcy1oZWxsb3dvcmxkLnhtbCBiL2RvY3MvbWFudWFsL2Jhc2ljcy1oZWxsb3dvcmxkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTM5OWZiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9tYW51YWwvYmFzaWNzLWhlbGxvd29ybGQueG1sCkBAIC0wLDAgKzEsMjc0IEBACis8Y2hhcHRlciBpZD0iY2hhcHRlci1oZWxsb3dvcmxkIj4KKyAgPHRpdGxlPllvdXIgZmlyc3QgYXBwbGljYXRpb248L3RpdGxlPgorICA8cGFyYT4KKyAgICBUaGlzIGNoYXB0ZXIgd2lsbCBzdW1tYXJpemUgZXZlcnl0aGluZyB5b3UndmUgbGVhcm5lZCBpbiB0aGUgcHJldmlvdXMKKyAgICBjaGFwdGVycy4gSXQgZGVzY3JpYmVzIGFsbCBhc3BlY3RzIG9mIGEgc2ltcGxlICZHU3RyZWFtZXI7IGFwcGxpY2F0aW9uLAorICAgIGluY2x1ZGluZyBpbml0aWFsaXppbmcgbGlicmFyaWVzLCBjcmVhdGluZyBlbGVtZW50cywgcGFja2luZyBlbGVtZW50cworICAgIHRvZ2V0aGVyIGluIGEgcGlwZWxpbmUgYW5kIHBsYXlpbmcgdGhpcyBwaXBlbGluZS4gQnkgZG9pbmcgYWxsIHRoaXMsCisgICAgeW91IHdpbGwgYmUgYWJsZSB0byBidWlsZCBhIHNpbXBsZSBPZ2cvVm9yYmlzIGF1ZGlvIHBsYXllci4KKyAgPC9wYXJhPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1oZWxsb3dvcmxkIj4KKyAgICA8dGl0bGU+SGVsbG8gd29ybGQ8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgV2UncmUgZ29pbmcgdG8gY3JlYXRlIGEgc2ltcGxlIGZpcnN0IGFwcGxpY2F0aW9uLCBhIHNpbXBsZSBPZ2cvVm9yYmlzCisgICAgICBjb21tYW5kLWxpbmUgYXVkaW8gcGxheWVyLiBGb3IgdGhpcywgd2Ugd2lsbCB1c2Ugb25seSBzdGFuZGFyZAorICAgICAgJkdTdHJlYW1lcjsgY29tcG9uZW50cy4gVGhlIHBsYXllciB3aWxsIHJlYWQgYSBmaWxlIHNwZWNpZmllZCBvbgorICAgICAgdGhlIGNvbW1hbmQtbGluZS4gTGV0J3MgZ2V0IHN0YXJ0ZWQhCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgV2UndmUgbGVhcm5lZCwgaW4gPHhyZWYgbGlua2VuZD0iY2hhcHRlci1pbml0Ii8+LCB0aGF0IHRoZSBmaXJzdCB0aGluZworICAgICAgdG8gZG8gaW4geW91ciBhcHBsaWNhdGlvbiBpcyB0byBpbml0aWFsaXplICZHU3RyZWFtZXI7IGJ5IGNhbGxpbmcKKyAgICAgIDxmdW5jdGlvbj5nc3RfaW5pdCAoKTwvZnVuY3Rpb24+LiBBbHNvLCBtYWtlIHN1cmUgdGhhdCB0aGUgYXBwbGljYXRpb24KKyAgICAgIGluY2x1ZGVzIDxmaWxlbmFtZT5nc3QvZ3N0Lmg8L2ZpbGVuYW1lPiBzbyBhbGwgZnVuY3Rpb24gbmFtZXMgYW5kCisgICAgICBvYmplY3RzIGFyZSBwcm9wZXJseSBkZWZpbmVkLiBVc2UgPGZ1bmN0aW9uPiNpbmNsdWRlCisgICAgICAmbHQ7Z3N0L2dzdC5oJmd0OzwvZnVuY3Rpb24+IHRvIGRvIHRoYXQuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgTmV4dCwgeW91J2xsIHdhbnQgdG8gY3JlYXRlIHRoZSBkaWZmZXJlbnQgZWxlbWVudHMgdXNpbmcKKyAgICAgIDxmdW5jdGlvbj5nc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCk8L2Z1bmN0aW9uPi4gRm9yIGFuIE9nZy9Wb3JiaXMKKyAgICAgIGF1ZGlvIHBsYXllciwgd2UnbGwgbmVlZCBhIHNvdXJjZSBlbGVtZW50IHRoYXQgcmVhZHMgZmlsZXMgZnJvbSBhCisgICAgICBkaXNrLiAmR1N0cmVhbWVyOyBpbmNsdWRlcyB0aGlzIGVsZW1lbnQgdW5kZXIgdGhlIG5hbWUKKyAgICAgIDxxdW90ZT5maWxlc3JjPC9xdW90ZT4uIE5leHQsIHdlJ2xsIG5lZWQgc29tZXRoaW5nIHRvIHBhcnNlIHRoZQorICAgICAgZmlsZSBhbmQgZGVjb2RlIGl0IGludG8gcmF3IGF1ZGlvLiAmR1N0cmVhbWVyOyBoYXMgdHdvIGVsZW1lbnRzCisgICAgICBmb3IgdGhpczogdGhlIGZpcnN0IHBhcnNlcyBPZ2cgc3RyZWFtcyBpbnRvIGVsZW1lbnRhcnkgc3RyZWFtcyAodmlkZW8sCisgICAgICBhdWRpbykgYW5kIGlzIGNhbGxlZCA8cXVvdGU+b2dnZGVtdXg8L3F1b3RlPi4gVGhlIHNlY29uZCBpcyBhIFZvcmJpcworICAgICAgYXVkaW8gZGVjb2RlciwgaXQncyBjb252ZW5pZW50bHkgY2FsbGVkIDxxdW90ZT52b3JiaXNkZWM8L3F1b3RlPi4KKyAgICAgIFNpbmNlIDxxdW90ZT5vZ2dkZW11eDwvcXVvdGU+IGNyZWF0ZXMgZHluYW1pYyBwYWRzIGZvciBlYWNoIGVsZW1lbnRhcnkKKyAgICAgIHN0cmVhbSwgeW91J2xsIG5lZWQgdG8gc2V0IGEgPHF1b3RlPnBhZC1hZGRlZDwvcXVvdGU+IGV2ZW50IGhhbmRsZXIKKyAgICAgIG9uIHRoZSA8cXVvdGU+b2dnZGVtdXg8L3F1b3RlPiBlbGVtZW50LCBsaWtlIHlvdSd2ZSBsZWFybmVkIGluCisgICAgICA8eHJlZiBsaW5rZW5kPSJzZWN0aW9uLXBhZHMtZHluYW1pYyIvPiwgdG8gbGluayB0aGUgT2dnIGRlbXV4ZXIgYW5kCisgICAgICB0aGUgVm9yYmlzIGRlY29kZXIgZWxlbWVudHMgdG9nZXRoZXIuIEF0IGxhc3QsIHdlJ2xsIGFsc28gbmVlZCBhbgorICAgICAgYXVkaW8gb3V0cHV0IGVsZW1lbnQsIHdlIHdpbGwgdXNlIDxxdW90ZT5hdXRvYXVkaW9zaW5rPC9xdW90ZT4sIHdoaWNoCisgICAgICBhdXRvbWF0aWNhbGx5IGRldGVjdHMgeW91ciBhdWRpbyBkZXZpY2UuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgVGhlIGxhc3QgdGhpbmcgbGVmdCB0byBkbyBpcyB0byBhZGQgYWxsIGVsZW1lbnRzIGludG8gYSBjb250YWluZXIKKyAgICAgIGVsZW1lbnQsIGEgPGNsYXNzbmFtZT5Hc3RQaXBlbGluZTwvY2xhc3NuYW1lPiwgYW5kIGl0ZXJhdGUgdGhpcworICAgICAgcGlwZWxpbmUgdW50aWwgd2UndmUgcGxheWVkIHRoZSB3aG9sZSBzb25nLiBXZSd2ZSBwcmV2aW91c2x5CisgICAgICBsZWFybmVkIGhvdyB0byBhZGQgZWxlbWVudHMgdG8gYSBjb250YWluZXIgYmluIGluIDx4cmVmCisgICAgICBsaW5rZW5kPSJjaGFwdGVyLWJpbnMiLz4sIGFuZCB3ZSd2ZSBsZWFybmVkIGFib3V0IGVsZW1lbnQgc3RhdGVzCisgICAgICBpbiA8eHJlZiBsaW5rZW5kPSJzZWN0aW9uLWVsZW1lbnRzLXN0YXRlcyIvPi4gV2Ugd2lsbCBhbHNvIGF0dGFjaAorICAgICAgYSBtZXNzYWdlIGhhbmRsZXIgdG8gdGhlIHBpcGVsaW5lIGJ1cyBzbyB3ZSBjYW4gcmV0cmlldmUgZXJyb3JzCisgICAgICBhbmQgZGV0ZWN0IHRoZSBlbmQtb2Ytc3RyZWFtLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIExldCdzIG5vdyBhZGQgYWxsIHRoZSBjb2RlIHRvZ2V0aGVyIHRvIGdldCBvdXIgdmVyeSBmaXJzdCBhdWRpbworICAgICAgcGxheWVyOgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IS0tIGV4YW1wbGUtYmVnaW4gaGVsbG93b3JsZC5jIC0tPgorI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKKyNpbmNsdWRlICZsdDtnbGliLmgmZ3Q7CisKKworc3RhdGljIGdib29sZWFuCitidXNfY2FsbCAoR3N0QnVzICAgICAqYnVzLAorICAgICAgICAgIEdzdE1lc3NhZ2UgKm1zZywKKyAgICAgICAgICBncG9pbnRlciAgICBkYXRhKQoreworICBHTWFpbkxvb3AgKmxvb3AgPSAoR01haW5Mb29wICopIGRhdGE7CisKKyAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpKSB7CisKKyAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKKyAgICAgIGdfcHJpbnQgKCJFbmQgb2Ygc3RyZWFtXG4iKTsKKyAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOiB7CisgICAgICBnY2hhciAgKmRlYnVnOworICAgICAgR0Vycm9yICplcnJvcjsKKworICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1zZywgJmFtcDtlcnJvciwgJmFtcDtkZWJ1Zyk7CisgICAgICBnX2ZyZWUgKGRlYnVnKTsKKworICAgICAgZ19wcmludGVyciAoIkVycm9yOiAlc1xuIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgZ19lcnJvcl9mcmVlIChlcnJvcik7CisKKyAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiBUUlVFOworfQorCisKK3N0YXRpYyB2b2lkCitvbl9wYWRfYWRkZWQgKEdzdEVsZW1lbnQgKmVsZW1lbnQsCisgICAgICAgICAgICAgIEdzdFBhZCAgICAgKnBhZCwKKyAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgZGF0YSkKK3sKKyAgR3N0UGFkICpzaW5rcGFkOworICBHc3RFbGVtZW50ICpkZWNvZGVyID0gKEdzdEVsZW1lbnQgKikgZGF0YTsKKworICAvKiBXZSBjYW4gbm93IGxpbmsgdGhpcyBwYWQgd2l0aCB0aGUgdm9yYmlzLWRlY29kZXIgc2luayBwYWQgKi8KKyAgZ19wcmludCAoIkR5bmFtaWMgcGFkIGNyZWF0ZWQsIGxpbmtpbmcgZGVtdXhlci9kZWNvZGVyXG4iKTsKKworICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGRlY29kZXIsICJzaW5rIik7CisKKyAgZ3N0X3BhZF9saW5rIChwYWQsIHNpbmtwYWQpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOworfQorCisKKworaW50CittYWluIChpbnQgICBhcmdjLAorICAgICAgY2hhciAqYXJndltdKQoreworICBHTWFpbkxvb3AgKmxvb3A7CisKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpzb3VyY2UsICpkZW11eGVyLCAqZGVjb2RlciwgKmNvbnYsICpzaW5rOworICBHc3RCdXMgKmJ1czsKKworICAvKiBJbml0aWFsaXNhdGlvbiAqLworICBnc3RfaW5pdCAoJmFtcDthcmdjLCAmYW1wO2FyZ3YpOworCisgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKKworCisgIC8qIENoZWNrIGlucHV0IGFyZ3VtZW50cyAqLworICBpZiAoYXJnYyAhPSAyKSB7CisgICAgZ19wcmludGVyciAoIlVzYWdlOiAlcyAmbHQ7T2dnL1ZvcmJpcyBmaWxlbmFtZSZndDtcbiIsIGFyZ3ZbMF0pOworICAgIHJldHVybiAtMTsKKyAgfQorCisKKyAgLyogQ3JlYXRlIGdzdHJlYW1lciBlbGVtZW50cyAqLworICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJhdWRpby1wbGF5ZXIiKTsKKyAgc291cmNlICAgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmaWxlc3JjIiwgICAgICAgImZpbGUtc291cmNlIik7CisgIGRlbXV4ZXIgID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgib2dnZGVtdXgiLCAgICAgICJvZ2ctZGVtdXhlciIpOworICBkZWNvZGVyICA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZvcmJpc2RlYyIsICAgICAidm9yYmlzLWRlY29kZXIiKTsKKyAgY29udiAgICAgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhdWRpb2NvbnZlcnQiLCAgImNvbnZlcnRlciIpOworICBzaW5rICAgICA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1dG9hdWRpb3NpbmsiLCAiYXVkaW8tb3V0cHV0Iik7CisKKyAgaWYgKCFwaXBlbGluZSB8fCAhc291cmNlIHx8ICFkZW11eGVyIHx8ICFkZWNvZGVyIHx8ICFjb252IHx8ICFzaW5rKSB7CisgICAgZ19wcmludGVyciAoIk9uZSBlbGVtZW50IGNvdWxkIG5vdCBiZSBjcmVhdGVkLiBFeGl0aW5nLlxuIik7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgLyogU2V0IHVwIHRoZSBwaXBlbGluZSAqLworCisgIC8qIHdlIHNldCB0aGUgaW5wdXQgZmlsZW5hbWUgdG8gdGhlIHNvdXJjZSBlbGVtZW50ICovCisgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNvdXJjZSksICJsb2NhdGlvbiIsIGFyZ3ZbMV0sIE5VTEwpOworCisgIC8qIHdlIGFkZCBhIG1lc3NhZ2UgaGFuZGxlciAqLworICBidXMgPSBnc3RfcGlwZWxpbmVfZ2V0X2J1cyAoR1NUX1BJUEVMSU5FIChwaXBlbGluZSkpOworICBnc3RfYnVzX2FkZF93YXRjaCAoYnVzLCBidXNfY2FsbCwgbG9vcCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7CisKKyAgLyogd2UgYWRkIGFsbCBlbGVtZW50cyBpbnRvIHRoZSBwaXBlbGluZSAqLworICAvKiBmaWxlLXNvdXJjZSB8IG9nZy1kZW11eGVyIHwgdm9yYmlzLWRlY29kZXIgfCBjb252ZXJ0ZXIgfCBhbHNhLW91dHB1dCAqLworICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgZGVtdXhlciwgZGVjb2RlciwgY29udiwgc2luaywgTlVMTCk7CisKKyAgLyogd2UgbGluayB0aGUgZWxlbWVudHMgdG9nZXRoZXIgKi8KKyAgLyogZmlsZS1zb3VyY2UgLSZndDsgb2dnLWRlbXV4ZXIgfiZndDsgdm9yYmlzLWRlY29kZXIgLSZndDsgY29udmVydGVyIC0mZ3Q7IGFsc2Etb3V0cHV0ICovCisgIGdzdF9lbGVtZW50X2xpbmsgKHNvdXJjZSwgZGVtdXhlcik7CisgIGdzdF9lbGVtZW50X2xpbmtfbWFueSAoZGVjb2RlciwgY29udiwgc2luaywgTlVMTCk7CisgIGdfc2lnbmFsX2Nvbm5lY3QgKGRlbXV4ZXIsICJwYWQtYWRkZWQiLCBHX0NBTExCQUNLIChvbl9wYWRfYWRkZWQpLCBkZWNvZGVyKTsKKworICAvKiBub3RlIHRoYXQgdGhlIGRlbXV4ZXIgd2lsbCBiZSBsaW5rZWQgdG8gdGhlIGRlY29kZXIgZHluYW1pY2FsbHkuCisgICAgIFRoZSByZWFzb24gaXMgdGhhdCBPZ2cgbWF5IGNvbnRhaW4gdmFyaW91cyBzdHJlYW1zIChmb3IgZXhhbXBsZQorICAgICBhdWRpbyBhbmQgdmlkZW8pLiBUaGUgc291cmNlIHBhZChzKSB3aWxsIGJlIGNyZWF0ZWQgYXQgcnVuIHRpbWUsCisgICAgIGJ5IHRoZSBkZW11eGVyIHdoZW4gaXQgZGV0ZWN0cyB0aGUgYW1vdW50IGFuZCBuYXR1cmUgb2Ygc3RyZWFtcy4KKyAgICAgVGhlcmVmb3JlIHdlIGNvbm5lY3QgYSBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIGV4ZWN1dGVkCisgICAgIHdoZW4gdGhlICJwYWQtYWRkZWQiIGlzIGVtaXR0ZWQuKi8KKworCisgIC8qIFNldCB0aGUgcGlwZWxpbmUgdG8gInBsYXlpbmciIHN0YXRlKi8KKyAgZ19wcmludCAoIk5vdyBwbGF5aW5nOiAlc1xuIiwgYXJndlsxXSk7CisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKKworCisgIC8qIEl0ZXJhdGUgKi8KKyAgZ19wcmludCAoIlJ1bm5pbmcuLi5cbiIpOworICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOworCisKKyAgLyogT3V0IG9mIHRoZSBtYWluIGxvb3AsIGNsZWFuIHVwIG5pY2VseSAqLworICBnX3ByaW50ICgiUmV0dXJuZWQsIHN0b3BwaW5nIHBsYXliYWNrXG4iKTsKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOworCisgIGdfcHJpbnQgKCJEZWxldGluZyBwaXBlbGluZVxuIik7CisgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKHBpcGVsaW5lKSk7CisKKyAgcmV0dXJuIDA7Cit9Cis8IS0tIGV4YW1wbGUtZW5kIGhlbGxvd29ybGQuYyAtLT4KKyAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDxwYXJhPgorICAgICAgV2Ugbm93IGhhdmUgY3JlYXRlZCBhIGNvbXBsZXRlIHBpcGVsaW5lLiAgV2UgY2FuIHZpc3VhbGlzZSB0aGUKKyAgICAgIHBpcGVsaW5lIGFzIGZvbGxvd3M6CisgICAgPC9wYXJhPgorCisgICAgPGZpZ3VyZSBmbG9hdD0iMSIgaWQ9InNlY3Rpb24taGVsbG8taW1nIj4KKyAgICAgIDx0aXRsZT5UaGUgImhlbGxvIHdvcmxkIiBwaXBlbGluZTwvdGl0bGU+CisgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgIDxpbWFnZW9iamVjdD4KKyAgICAgICAgICA8aW1hZ2VkYXRhIHNjYWxlPSI3NSIgZmlsZXJlZj0iaW1hZ2VzL2hlbGxvLXdvcmxkLiZpbWFnZTsiIGZvcm1hdD0iJklNQUdFOyIgLz4KKyAgICAgICAgPC9pbWFnZW9iamVjdD4KKyAgICAgIDwvbWVkaWFvYmplY3Q+ICAKKyAgICA8L2ZpZ3VyZT4KKworICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1oZWxsb3dvcmxkLWNvbXBpbGVydW4iPgorICAgIDx0aXRsZT5Db21waWxpbmcgYW5kIFJ1bm5pbmcgaGVsbG93b3JsZC5jPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFRvIGNvbXBpbGUgdGhlIGhlbGxvd29ybGQgZXhhbXBsZSwgdXNlOiA8Y29tbWFuZD5nY2MgLVdhbGwKKyAgICAgIGhlbGxvd29ybGQuYyAtbyBoZWxsb3dvcmxkCisgICAgICAkKHBrZy1jb25maWcgLS1jZmxhZ3MgLS1saWJzIGdzdHJlYW1lci0mR1NUX01BSk9STUlOT1I7KTwvY29tbWFuZD4uCisgICAgICAmR1N0cmVhbWVyOyBtYWtlcyB1c2Ugb2YgPGNvbW1hbmQ+cGtnLWNvbmZpZzwvY29tbWFuZD4gdG8gZ2V0IGNvbXBpbGVyCisgICAgICBhbmQgbGlua2VyIGZsYWdzIG5lZWRlZCB0byBjb21waWxlIHRoaXMgYXBwbGljYXRpb24uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgSWYgeW91J3JlIHJ1bm5pbmcgYSBub24tc3RhbmRhcmQgaW5zdGFsbGF0aW9uIChpZS4geW91J3ZlIGluc3RhbGxlZAorICAgICAgR1N0cmVhbWVyIGZyb20gc291cmNlIHlvdXJzZWxmIGluc3RlYWQgb2YgdXNpbmcgcHJlLWJ1aWx0IHBhY2thZ2VzKSwKKyAgICAgIG1ha2Ugc3VyZSB0aGUgPGNsYXNzbmFtZT5QS0dfQ09ORklHX1BBVEg8L2NsYXNzbmFtZT4gZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgICAgIGlzIHNldCB0byB0aGUgY29ycmVjdCBsb2NhdGlvbiAoPGZpbGVuYW1lPiRsaWJkaXIvcGtnY29uZmlnPC9maWxlbmFtZT4pLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIEluIHRoZSB1bmxpa2VseSBjYXNlIHRoYXQgeW91IGFyZSB1c2luZyBhbiB1bmluc3RhbGxlZCBHU3RyZWFtZXIKKyAgICAgIHNldHVwIChpZS4gZ3N0LXVuaW5zdGFsbGVkKSwgeW91IHdpbGwgbmVlZCB0byB1c2UgbGlidG9vbCB0byBidWlsZCB0aGUKKyAgICAgIGhlbGxvIHdvcmxkIHByb2dyYW0sIGxpa2UgdGhpczogPGNvbW1hbmQ+bGlidG9vbCAtLW1vZGU9bGluayBnY2MgLVdhbGwKKyAgICAgIGhlbGxvd29ybGQuYyAtbyBoZWxsb3dvcmxkCisgICAgICAkKHBrZy1jb25maWcgLS1jZmxhZ3MgLS1saWJzIGdzdHJlYW1lci0mR1NUX01BSk9STUlOT1I7KTwvY29tbWFuZD4uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgWW91IGNhbiBydW4gdGhpcyBleGFtcGxlIGFwcGxpY2F0aW9uIHdpdGggPGNvbW1hbmQ+Li9oZWxsb3dvcmxkCisgICAgICBmaWxlLm9nZzwvY29tbWFuZD4uIFN1YnN0aXR1dGUgPGZpbGVuYW1lPmZpbGUub2dnPC9maWxlbmFtZT4KKyAgICAgIHdpdGggeW91ciBmYXZvdXJpdGUgT2dnL1ZvcmJpcyBmaWxlLgorICAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24taGVsbG8td29ybGQtY29uY2x1c2lvbiI+CisgICAgPHRpdGxlPkNvbmNsdXNpb248L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgVGhpcyBjb25jbHVkZXMgb3VyIGZpcnN0IGV4YW1wbGUuIEFzIHlvdSBzZWUsIHNldHRpbmcgdXAgYSBwaXBlbGluZQorICAgICAgaXMgdmVyeSBsb3ctbGV2ZWwgYnV0IHBvd2VyZnVsLiBZb3Ugd2lsbCBzZWUgbGF0ZXIgaW4gdGhpcyBtYW51YWwgaG93CisgICAgICB5b3UgY2FuIGNyZWF0ZSBhIG1vcmUgcG93ZXJmdWwgbWVkaWEgcGxheWVyIHdpdGggZXZlbiBsZXNzIGVmZm9ydAorICAgICAgdXNpbmcgaGlnaGVyLWxldmVsIGludGVyZmFjZXMuIFdlIHdpbGwgZGlzY3VzcyBhbGwgdGhhdCBpbiA8eHJlZgorICAgICAgbGlua2VuZD0icGFydC1oaWdobGV2ZWwiLz4uIFdlIHdpbGwgZmlyc3QsIGhvd2V2ZXIsIGdvIG1vcmUgaW4tZGVwdGgKKyAgICAgIGludG8gbW9yZSBhZHZhbmNlZCAmR1N0cmVhbWVyOyBpbnRlcm5hbHMuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgSXQgc2hvdWxkIGJlIGNsZWFyIGZyb20gdGhlIGV4YW1wbGUgdGhhdCB3ZSBjYW4gdmVyeSBlYXNpbHkgcmVwbGFjZQorICAgICAgdGhlIDxxdW90ZT5maWxlc3JjPC9xdW90ZT4gZWxlbWVudCB3aXRoIHNvbWUgb3RoZXIgZWxlbWVudCB0aGF0CisgICAgICByZWFkcyBkYXRhIGZyb20gYSBuZXR3b3JrLCBvciBzb21lIG90aGVyIGRhdGEgc291cmNlIGVsZW1lbnQgdGhhdAorICAgICAgaXMgYmV0dGVyIGludGVncmF0ZWQgd2l0aCB5b3VyIGRlc2t0b3AgZW52aXJvbm1lbnQuIEFsc28sIHlvdSBjYW4KKyAgICAgIHVzZSBvdGhlciBkZWNvZGVycyBhbmQgcGFyc2Vycy9kZW11eGVycyB0byBzdXBwb3J0IG90aGVyIG1lZGlhIHR5cGVzLiBZb3UKKyAgICAgIGNhbiB1c2UgYW5vdGhlciBhdWRpbyBzaW5rIGlmIHlvdSdyZSBub3QgcnVubmluZyBMaW51eCwgYnV0IE1hYyBPUyBYLAorICAgICAgV2luZG93cyBvciBGcmVlQlNELCBvciB5b3UgY2FuIGluc3RlYWQgdXNlIGEgZmlsZXNpbmsgdG8gd3JpdGUgYXVkaW8KKyAgICAgIGZpbGVzIHRvIGRpc2sgaW5zdGVhZCBvZiBwbGF5aW5nIHRoZW0gYmFjay4gQnkgdXNpbmcgYW4gYXVkaW8gY2FyZAorICAgICAgc291cmNlLCB5b3UgY2FuIGV2ZW4gZG8gYXVkaW8gY2FwdHVyZSBpbnN0ZWFkIG9mIHBsYXliYWNrLiBBbGwgdGhpcworICAgICAgc2hvd3MgdGhlIHJldXNhYmlsaXR5IG9mICZHU3RyZWFtZXI7IGVsZW1lbnRzLCB3aGljaCBpcyBpdHMgZ3JlYXRlc3QKKyAgICAgIGFkdmFudGFnZS4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL21hbnVhbC9iYXNpY3MtaW5pdC54bWwgYi9kb2NzL21hbnVhbC9iYXNpY3MtaW5pdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMxYWU4YQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbWFudWFsL2Jhc2ljcy1pbml0LnhtbApAQCAtMCwwICsxLDEzMiBAQAorPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItaW5pdCI+CisgIDx0aXRsZT5Jbml0aWFsaXppbmcgJkdTdHJlYW1lcjs8L3RpdGxlPgorICA8cGFyYT4gCisgICAgV2hlbiB3cml0aW5nIGEgJkdTdHJlYW1lcjsgYXBwbGljYXRpb24sIHlvdSBjYW4gc2ltcGx5IGluY2x1ZGUKKyAgICA8ZmlsZW5hbWU+Z3N0L2dzdC5oPC9maWxlbmFtZT4gdG8gZ2V0IGFjY2VzcyB0byB0aGUgbGlicmFyeQorICAgIGZ1bmN0aW9ucy4gQmVzaWRlcyB0aGF0LCB5b3Ugd2lsbCBhbHNvIG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUKKyAgICAmR1N0cmVhbWVyOyBsaWJyYXJ5LgorICA8L3BhcmE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWluaXQtYyI+CisgICAgPHRpdGxlPlNpbXBsZSBpbml0aWFsaXphdGlvbjwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBCZWZvcmUgdGhlICZHU3RyZWFtZXI7IGxpYnJhcmllcyBjYW4gYmUgdXNlZCwKKyAgICAgIDxmdW5jdGlvbj5nc3RfaW5pdDwvZnVuY3Rpb24+IGhhcyB0byBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbgorICAgICAgYXBwbGljYXRpb24uIFRoaXMgY2FsbCB3aWxsIHBlcmZvcm0gdGhlIG5lY2Vzc2FyeSBpbml0aWFsaXphdGlvbgorICAgICAgb2YgdGhlIGxpYnJhcnkgYXMgd2VsbCBhcyBwYXJzZSB0aGUgJkdTdHJlYW1lcjstc3BlY2lmaWMgY29tbWFuZAorICAgICAgbGluZSBvcHRpb25zLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4gCisgICAgICBBIHR5cGljYWwgcHJvZ3JhbSAmRVhBRk9PVDsgd291bGQgaGF2ZSBjb2RlIHRvIGluaXRpYWxpemUKKyAgICAgICZHU3RyZWFtZXI7IHRoYXQgbG9va3MgbGlrZSB0aGlzOgorICAgIDwvcGFyYT4KKyAgICA8ZXhhbXBsZSBpZD0iZXgtaW5pdC1jIj4KKyAgICAgIDx0aXRsZT5Jbml0aWFsaXppbmcgR1N0cmVhbWVyPC90aXRsZT4KKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhLS0gZXhhbXBsZS1iZWdpbiBpbml0LmMgLS0+CisjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7CisKK2ludAorbWFpbiAoaW50ICAgYXJnYywKKyAgICAgIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgY29uc3QgZ2NoYXIgKm5hbm9fc3RyOworICBndWludCBtYWpvciwgbWlub3IsIG1pY3JvLCBuYW5vOworCisgIGdzdF9pbml0ICgmYW1wO2FyZ2MsICZhbXA7YXJndik7CisKKyAgZ3N0X3ZlcnNpb24gKCZhbXA7bWFqb3IsICZhbXA7bWlub3IsICZhbXA7bWljcm8sICZhbXA7bmFubyk7CisKKyAgaWYgKG5hbm8gPT0gMSkKKyAgICBuYW5vX3N0ciA9ICIoQ1ZTKSI7CisgIGVsc2UgaWYgKG5hbm8gPT0gMikKKyAgICBuYW5vX3N0ciA9ICIoUHJlcmVsZWFzZSkiOworICBlbHNlCisgICAgbmFub19zdHIgPSAiIjsKKworICBwcmludGYgKCJUaGlzIHByb2dyYW0gaXMgbGlua2VkIGFnYWluc3QgR1N0cmVhbWVyICVkLiVkLiVkICVzXG4iLAorICAgICAgICAgIG1ham9yLCBtaW5vciwgbWljcm8sIG5hbm9fc3RyKTsKKworICByZXR1cm4gMDsKK30KKzwhLS0gZXhhbXBsZS1lbmQgaW5pdC5jIC0tPgorICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8L2V4YW1wbGU+CisgICAgPHBhcmE+CisgICAgICBVc2UgdGhlIDxzeW1ib2w+R1NUX1ZFUlNJT05fTUFKT1I8L3N5bWJvbD4sCisgICAgICA8c3ltYm9sPkdTVF9WRVJTSU9OX01JTk9SPC9zeW1ib2w+IGFuZCA8c3ltYm9sPkdTVF9WRVJTSU9OX01JQ1JPPC9zeW1ib2w+CisgICAgICBtYWNyb3MgdG8gZ2V0IHRoZSAmR1N0cmVhbWVyOyB2ZXJzaW9uIHlvdSBhcmUgYnVpbGRpbmcgYWdhaW5zdCwgb3IKKyAgICAgIHVzZSB0aGUgZnVuY3Rpb24gPGZ1bmN0aW9uPmdzdF92ZXJzaW9uPC9mdW5jdGlvbj4gdG8gZ2V0IHRoZSB2ZXJzaW9uCisgICAgICB5b3VyIGFwcGxpY2F0aW9uIGlzIGxpbmtlZCBhZ2FpbnN0LiAmR1N0cmVhbWVyOyBjdXJyZW50bHkgdXNlcyBhCisgICAgICBzY2hlbWUgd2hlcmUgdmVyc2lvbnMgd2l0aCB0aGUgc2FtZSBtYWpvciBhbmQgbWlub3IgdmVyc2lvbnMgYXJlCisgICAgICBBUEktLyBhbmQgQUJJLWNvbXBhdGlibGUuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjYWxsIHRoZSA8ZnVuY3Rpb24+Z3N0X2luaXQ8L2Z1bmN0aW9uPiBmdW5jdGlvbgorICAgICAgd2l0aCB0d28gPHN5bWJvbD5OVUxMPC9zeW1ib2w+IGFyZ3VtZW50cywgaW4gd2hpY2ggY2FzZSBubyBjb21tYW5kIGxpbmUKKyAgICAgIG9wdGlvbnMgd2lsbCBiZSBwYXJzZWQgYnkgPGFwcGxpY2F0aW9uPkdTdHJlYW1lcjwvYXBwbGljYXRpb24+LgorICAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKworICA8c2VjdDE+CisgICAgPHRpdGxlPlRoZSBHT3B0aW9uIGludGVyZmFjZTwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBZb3UgY2FuIGFsc28gdXNlIGEgR09wdGlvbiB0YWJsZSB0byBpbml0aWFsaXplIHlvdXIgb3duIHBhcmFtZXRlcnMgYXMKKyAgICAgIHNob3duIGluIHRoZSBuZXh0IGV4YW1wbGU6CisgICAgPC9wYXJhPgorICAgIDxleGFtcGxlIGlkPSJleC1nb3B0aW9uLWMiPgorICAgICAgPHRpdGxlPkluaXRpYWxpc2F0aW9uIHVzaW5nIHRoZSBHT3B0aW9uIGludGVyZmFjZTwvdGl0bGU+CisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IS0tIGV4YW1wbGUtYmVnaW4gZ29wdGlvbi5jIC0tPgorI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKKworaW50CittYWluIChpbnQgICBhcmdjLAorICAgICAgY2hhciAqYXJndltdKQoreworICBnYm9vbGVhbiBzaWxlbnQgPSBGQUxTRTsKKyAgZ2NoYXIgKnNhdmVmaWxlID0gTlVMTDsKKyAgR09wdGlvbkNvbnRleHQgKmN0eDsKKyAgR0Vycm9yICplcnIgPSBOVUxMOworICBHT3B0aW9uRW50cnkgZW50cmllc1tdID0geworICAgIHsgInNpbGVudCIsICdzJywgMCwgR19PUFRJT05fQVJHX05PTkUsICZhbXA7c2lsZW50LAorICAgICAgImRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIiwgTlVMTCB9LAorICAgIHsgIm91dHB1dCIsICdvJywgMCwgR19PUFRJT05fQVJHX1NUUklORywgJmFtcDtzYXZlZmlsZSwKKyAgICAgICJzYXZlIHhtbCByZXByZXNlbnRhdGlvbiBvZiBwaXBlbGluZSB0byBGSUxFIGFuZCBleGl0IiwgIkZJTEUiIH0sCisgICAgeyBOVUxMIH0KKyAgfTsKKworICAvKiB3ZSBtdXN0IGluaXRpYWxpc2UgdGhlIHRocmVhZGluZyBzeXN0ZW0gYmVmb3JlIHVzaW5nIGFueQorICAgKiBvdGhlciBHTGliIGZ1bnRpb24sIHN1Y2ggYXMgZ19vcHRpb25fY29udGV4dF9uZXcoKSAqLworICBpZiAoIWdfdGhyZWFkX3N1cHBvcnRlZCAoKSkKKyAgICBnX3RocmVhZF9pbml0IChOVUxMKTsKKworICBjdHggPSBnX29wdGlvbl9jb250ZXh0X25ldyAoIi0gWW91ciBhcHBsaWNhdGlvbiIpOworICBnX29wdGlvbl9jb250ZXh0X2FkZF9tYWluX2VudHJpZXMgKGN0eCwgZW50cmllcywgTlVMTCk7CisgIGdfb3B0aW9uX2NvbnRleHRfYWRkX2dyb3VwIChjdHgsIGdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXAgKCkpOworICBpZiAoIWdfb3B0aW9uX2NvbnRleHRfcGFyc2UgKGN0eCwgJmFtcDthcmdjLCAmYW1wO2FyZ3YsICZhbXA7ZXJyKSkgeworICAgIGdfcHJpbnQgKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZTogJXNcbiIsIGVyci0+bWVzc2FnZSk7CisgICAgZ19lcnJvcl9mcmVlIChlcnIpOworICAgIHJldHVybiAxOworICB9CisKKyAgcHJpbnRmICgiUnVuIG1lIHdpdGggLS1oZWxwIHRvIHNlZSB0aGUgQXBwbGljYXRpb24gb3B0aW9ucyBhcHBlbmRlZC5cbiIpOworCisgIHJldHVybiAwOworfQorPCEtLSBleGFtcGxlLWVuZCBnb3B0aW9uLmMgLS0+CisgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDwvZXhhbXBsZT4KKyAgICA8cGFyYT4KKyAgICAgIEFzIHNob3duIGluIHRoaXMgZnJhZ21lbnQsIHlvdSBjYW4gdXNlIGEgPHVsaW5rCisgICAgICB1cmw9Imh0dHA6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2RvYy9BUEkvMi4wL2dsaWIvZ2xpYi1Db21tYW5kbGluZS1vcHRpb24tcGFyc2VyLmh0bWwiCisgICAgICB0eXBlPSJodHRwIj5HT3B0aW9uPC91bGluaz4gdGFibGUgdG8gZGVmaW5lIHlvdXIgYXBwbGljYXRpb24tc3BlY2lmaWMKKyAgICAgIGNvbW1hbmQgbGluZSBvcHRpb25zLCBhbmQgcGFzcyB0aGlzIHRhYmxlIHRvIHRoZSBHTGliIGluaXRpYWxpemF0aW9uCisgICAgICBmdW5jdGlvbiBhbG9uZyB3aXRoIHRoZSBvcHRpb24gZ3JvdXAgcmV0dXJuZWQgZnJvbSB0aGUKKyAgICAgIGZ1bmN0aW9uIDxmdW5jdGlvbj5nc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwPC9mdW5jdGlvbj4uIFlvdXIKKyAgICAgIGFwcGxpY2F0aW9uIG9wdGlvbnMgd2lsbCBiZSBwYXJzZWQgaW4gYWRkaXRpb24gdG8gdGhlIHN0YW5kYXJkCisgICAgICA8YXBwbGljYXRpb24+R1N0cmVhbWVyPC9hcHBsaWNhdGlvbj4gb3B0aW9ucy4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL21hbnVhbC9iYXNpY3MtcGFkcy54bWwgYi9kb2NzL21hbnVhbC9iYXNpY3MtcGFkcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU2ZWUwMAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbWFudWFsL2Jhc2ljcy1wYWRzLnhtbApAQCAtMCwwICsxLDY4NyBAQAorPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItcGFkcyIgeHJlZmxhYmVsPSJQYWRzIGFuZCBjYXBhYmlsaXRpZXMiPgorICA8dGl0bGU+UGFkcyBhbmQgY2FwYWJpbGl0aWVzPC90aXRsZT4KKyAgPHBhcmE+CisgICAgQXMgd2UgaGF2ZSBzZWVuIGluIDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItZWxlbWVudHMiLz4sIHRoZSBwYWRzIGFyZQorICAgIHRoZSBlbGVtZW50J3MgaW50ZXJmYWNlIHRvIHRoZSBvdXRzaWRlIHdvcmxkLiBEYXRhIHN0cmVhbXMgZnJvbSBvbmUKKyAgICBlbGVtZW50J3Mgc291cmNlIHBhZCB0byBhbm90aGVyIGVsZW1lbnQncyBzaW5rIHBhZC4gVGhlIHNwZWNpZmljCisgICAgdHlwZSBvZiBtZWRpYSB0aGF0IHRoZSBlbGVtZW50IGNhbiBoYW5kbGUgd2lsbCBiZSBleHBvc2VkIGJ5IHRoZQorICAgIHBhZCdzIGNhcGFiaWxpdGllcy4gV2Ugd2lsbCB0YWxrIG1vcmUgb24gY2FwYWJpbGl0aWVzIGxhdGVyIGluIHRoaXMKKyAgICBjaGFwdGVyIChzZWUgPHhyZWYgbGlua2VuZD0ic2VjdGlvbi1jYXBzIi8+KS4KKyAgPC9wYXJhPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1wYWRzIj4KKyAgICA8dGl0bGU+UGFkczwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBBIHBhZCB0eXBlIGlzIGRlZmluZWQgYnkgdHdvIHByb3BlcnRpZXM6IGl0cyBkaXJlY3Rpb24gYW5kIGl0cworICAgICAgYXZhaWxhYmlsaXR5LiBBcyB3ZSd2ZSBtZW50aW9uZWQgYmVmb3JlLCAmR1N0cmVhbWVyOyBkZWZpbmVzIHR3bworICAgICAgcGFkIGRpcmVjdGlvbnM6IHNvdXJjZSBwYWRzIGFuZCBzaW5rIHBhZHMuIFRoaXMgdGVybWlub2xvZ3kgaXMKKyAgICAgIGRlZmluZWQgZnJvbSB0aGUgdmlldyBvZiB3aXRoaW4gdGhlIGVsZW1lbnQ6IGVsZW1lbnRzIHJlY2VpdmUgZGF0YQorICAgICAgb24gdGhlaXIgc2luayBwYWRzIGFuZCBnZW5lcmF0ZSBkYXRhIG9uIHRoZWlyIHNvdXJjZSBwYWRzLgorICAgICAgU2NoZW1hdGljYWxseSwgc2luayBwYWRzIGFyZSBkcmF3biBvbiB0aGUgbGVmdCBzaWRlIG9mIGFuIGVsZW1lbnQsCisgICAgICB3aGVyZWFzIHNvdXJjZSBwYWRzIGFyZSBkcmF3biBvbiB0aGUgcmlnaHQgc2lkZSBvZiBhbiBlbGVtZW50LiBJbgorICAgICAgc3VjaCBncmFwaHMsIGRhdGEgZmxvd3MgZnJvbSBsZWZ0IHRvIHJpZ2h0LgorICAgICAgPGZvb3Rub3RlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJbiByZWFsaXR5LCB0aGVyZSBpcyBubyBvYmplY3Rpb24gdG8gZGF0YSBmbG93aW5nIGZyb20gYQorICAgICAgICAgIHNvdXJjZSBwYWQgdG8gdGhlIHNpbmsgcGFkIG9mIGFuIGVsZW1lbnQgdXBzdHJlYW0gKHRvIHRoZQorICAgICAgICAgIGxlZnQgb2YgdGhpcyBlbGVtZW50IGluIGRyYXdpbmdzKS4gRGF0YSB3aWxsLCBob3dldmVyLCBhbHdheXMKKyAgICAgICAgICBmbG93IGZyb20gYSBzb3VyY2UgcGFkIG9mIG9uZSBlbGVtZW50IHRvIHRoZSBzaW5rIHBhZCBvZgorICAgICAgICAgIGFub3RoZXIuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvZm9vdG5vdGU+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBQYWQgZGlyZWN0aW9ucyBhcmUgdmVyeSBzaW1wbGUgY29tcGFyZWQgdG8gcGFkIGF2YWlsYWJpbGl0eS4gQSBwYWQKKyAgICAgIGNhbiBoYXZlIGFueSBvZiB0aHJlZSBhdmFpbGFiaWxpdGllczogYWx3YXlzLCBzb21ldGltZXMgYW5kIG9uCisgICAgICByZXF1ZXN0LiBUaGUgbWVhbmluZyBvZiB0aG9zZSB0aHJlZSB0eXBlcyBpcyBleGFjdGx5IGFzIGl0IHNheXM6CisgICAgICBhbHdheXMgcGFkcyBhbHdheXMgZXhpc3QsIHNvbWV0aW1lcyBwYWQgZXhpc3Qgb25seSBpbiBjZXJ0YWluCisgICAgICBjYXNlcyAoYW5kIGNhbiBkaXNhcHBlYXIgcmFuZG9tbHkpLCBhbmQgb24tcmVxdWVzdCBwYWRzIGFwcGVhcgorICAgICAgb25seSBpZiBleHBsaWNpdGx5IHJlcXVlc3RlZCBieSBhcHBsaWNhdGlvbnMuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3QyIGlkPSJzZWN0aW9uLXBhZHMtZHluYW1pYyI+CisgICAgICA8dGl0bGU+RHluYW1pYyAob3Igc29tZXRpbWVzKSBwYWRzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBTb21lIGVsZW1lbnRzIG1pZ2h0IG5vdCBoYXZlIGFsbCBvZiB0aGVpciBwYWRzIHdoZW4gdGhlIGVsZW1lbnQgaXMKKyAgICAgICAgY3JlYXRlZC4gVGhpcyBjYW4gaGFwcGVuLCBmb3IgZXhhbXBsZSwgd2l0aCBhbiBPZ2cgZGVtdXhlciBlbGVtZW50LgorICAgICAgICBUaGUgZWxlbWVudCB3aWxsIHJlYWQgdGhlIE9nZyBzdHJlYW0gYW5kIGNyZWF0ZSBkeW5hbWljIHBhZHMgZm9yCisgICAgICAgIGVhY2ggY29udGFpbmVkIGVsZW1lbnRhcnkgc3RyZWFtICh2b3JiaXMsIHRoZW9yYSkgd2hlbiBpdCBkZXRlY3RzCisgICAgICAgIHN1Y2ggYSBzdHJlYW0gaW4gdGhlIE9nZyBzdHJlYW0uIExpa2V3aXNlLCBpdCB3aWxsIGRlbGV0ZSB0aGUgcGFkCisgICAgICAgIHdoZW4gdGhlIHN0cmVhbSBlbmRzLiBUaGlzIHByaW5jaXBsZSBpcyB2ZXJ5IHVzZWZ1bCBmb3IgZGVtdXhlcgorICAgICAgICBlbGVtZW50cywgZm9yIGV4YW1wbGUuCisgICAgICA8L3BhcmE+IAorICAgICAgPHBhcmE+IAorICAgICAgICBSdW5uaW5nIDxhcHBsaWNhdGlvbj5nc3QtaW5zcGVjdCBvZ2dkZW11eDwvYXBwbGljYXRpb24+IHdpbGwgc2hvdworICAgICAgICB0aGF0IHRoZSBlbGVtZW50IGhhcyBvbmx5IG9uZSBwYWQ6IGEgc2luayBwYWQgY2FsbGVkICdzaW5rJy4gVGhlCisgICAgICAgIG90aGVyIHBhZHMgYXJlIDxxdW90ZT5kb3JtYW50PC9xdW90ZT4uIFlvdSBjYW4gc2VlIHRoaXMgaW4gdGhlIHBhZAorICAgICAgICB0ZW1wbGF0ZSBiZWNhdXNlIHRoZXJlIGlzIGFuIDxxdW90ZT5FeGlzdHM6IFNvbWV0aW1lczwvcXVvdGU+CisJcHJvcGVydHkuIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBPZ2cgZmlsZSB5b3UgcGxheSwgdGhlIHBhZHMgd2lsbAorICAgICAgICBiZSBjcmVhdGVkLiBXZSB3aWxsIHNlZSB0aGF0IHRoaXMgaXMgdmVyeSBpbXBvcnRhbnQgd2hlbiB5b3UgYXJlCisgICAgICAgIGdvaW5nIHRvIGNyZWF0ZSBkeW5hbWljIHBpcGVsaW5lcy4gWW91IGNhbiBhdHRhY2ggYSBzaWduYWwgaGFuZGxlcgorICAgICAgICB0byBhbiBlbGVtZW50IHRvIGluZm9ybSB5b3Ugd2hlbiB0aGUgZWxlbWVudCBoYXMgY3JlYXRlZCBhIG5ldyBwYWQKKyAgICAgICAgZnJvbSBvbmUgb2YgaXRzIDxxdW90ZT5zb21ldGltZXM8L3F1b3RlPiBwYWQgdGVtcGxhdGVzLiBUaGUKKyAgICAgICAgZm9sbG93aW5nIHBpZWNlIG9mIGNvZGUgaXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gZG8gdGhpczoKKyAgICAgIDwvcGFyYT4gCisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+PCEtLSBleGFtcGxlLWJlZ2luIHBhZC5jIGEgLS0+CisjaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OworCitzdGF0aWMgdm9pZAorY2JfbmV3X3BhZCAoR3N0RWxlbWVudCAqZWxlbWVudCwKKwkgICAgR3N0UGFkICAgICAqcGFkLAorCSAgICBncG9pbnRlciAgICBkYXRhKQoreworICBnY2hhciAqbmFtZTsKKworICBuYW1lID0gZ3N0X3BhZF9nZXRfbmFtZSAocGFkKTsKKyAgZ19wcmludCAoIkEgbmV3IHBhZCAlcyB3YXMgY3JlYXRlZFxuIiwgbmFtZSk7CisgIGdfZnJlZSAobmFtZSk7CisKKyAgLyogaGVyZSwgeW91IHdvdWxkIHNldHVwIGEgbmV3IHBhZCBsaW5rIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBwYWQgKi8KKzwhLS0gZXhhbXBsZS1lbmQgcGFkLmMgYSAtLT5bLi5dCis8IS0tIGV4YW1wbGUtYmVnaW4gcGFkLmMgYiAtLT4KK30KKworaW50IAorbWFpbiAoaW50ICAgYXJnYywKKyAgICAgIGNoYXIgKmFyZ3ZbXSkgCit7CisgIEdzdEVsZW1lbnQgKnBpcGVsaW5lLCAqc291cmNlLCAqZGVtdXg7CisgIEdNYWluTG9vcCAqbG9vcDsKKworICAvKiBpbml0ICovCisgIGdzdF9pbml0ICgmYW1wO2FyZ2MsICZhbXA7YXJndik7CisKKyAgLyogY3JlYXRlIGVsZW1lbnRzICovCisgIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoIm15X3BpcGVsaW5lIik7CisgIHNvdXJjZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZpbGVzcmMiLCAic291cmNlIik7CisgIGdfb2JqZWN0X3NldCAoc291cmNlLCAibG9jYXRpb24iLCBhcmd2WzFdLCBOVUxMKTsKKyAgZGVtdXggPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJvZ2dkZW11eCIsICJkZW11eGVyIik7CisKKyAgLyogeW91IHdvdWxkIG5vcm1hbGx5IGNoZWNrIHRoYXQgdGhlIGVsZW1lbnRzIHdlcmUgY3JlYXRlZCBwcm9wZXJseSAqLworCisgIC8qIHB1dCB0b2dldGhlciBhIHBpcGVsaW5lICovCisgIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc291cmNlLCBkZW11eCwgTlVMTCk7CisgIGdzdF9lbGVtZW50X2xpbmtfcGFkcyAoc291cmNlLCAic3JjIiwgZGVtdXgsICJzaW5rIik7CisKKyAgLyogbGlzdGVuIGZvciBuZXdseSBjcmVhdGVkIHBhZHMgKi8KKyAgZ19zaWduYWxfY29ubmVjdCAoZGVtdXgsICJwYWQtYWRkZWQiLCBHX0NBTExCQUNLIChjYl9uZXdfcGFkKSwgTlVMTCk7CisKKyAgLyogc3RhcnQgdGhlIHBpcGVsaW5lICovCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKHBpcGVsaW5lKSwgR1NUX1NUQVRFX1BMQVlJTkcpOworICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7CisgIGdfbWFpbl9sb29wX3J1biAobG9vcCk7Cis8IS0tZXhhbXBsZS1lbmQgcGFkLmMgYiAtLT4KK1suLl08IS0tIGV4YW1wbGUtYmVnaW4gcGFkLmMgYyAtLT48IS0tCisgIHJldHVybiAwOworLS0+PCEtLSBleGFtcGxlLWVuZCBwYWQuYyBjIC0tPgorPCEtLSBleGFtcGxlLWJlZ2luIHBhZC5jIGQgLS0+Cit9CisgICAgICA8IS0tIGV4YW1wbGUtZW5kIHBhZC5jIGQgLS0+PC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDxwYXJhPgorICAgICAgICBJdCBpcyBub3QgdW5jb21tb24gdG8gYWRkIGVsZW1lbnRzIHRvIHRoZSBwaXBlbGluZSBvbmx5IGZyb20gd2l0aGluCisgICAgICAgIHRoZSAicGFkLWFkZGVkIiBvciAibmV3LWRlY29kZWQtcGFkIiBjYWxsYmFjay4gSWYgeW91IGRvIHRoaXMsIGRvbid0CisgICAgICAgIGZvcmdldCB0byBzZXQgdGhlIHN0YXRlIG9mIHRoZSBuZXdseS1hZGRlZCBlbGVtZW50cyB0byB0aGUgdGFyZ2V0CisgICAgICAgIHN0YXRlIG9mIHRoZSBwaXBlbGluZSB1c2luZworICAgICAgICA8ZnVuY3Rpb24+Z3N0X2VsZW1lbnRfc2V0X3N0YXRlICgpPC9mdW5jdGlvbj4gb3IKKyAgICAgICAgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQgKCk8L2Z1bmN0aW9uPi4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3QyPgorCisgICAgPHNlY3QyIGlkPSJzZWN0aW9uLXBhZHMtcmVxdWVzdCI+CisgICAgICA8dGl0bGU+UmVxdWVzdCBwYWRzPC90aXRsZT4KKyAgICAgIDxwYXJhPiAKKyAgICAgICAgQW4gZWxlbWVudCBjYW4gYWxzbyBoYXZlIHJlcXVlc3QgcGFkcy4gVGhlc2UgcGFkcyBhcmUgbm90IGNyZWF0ZWQKKyAgICAgICAgYXV0b21hdGljYWxseSBidXQgYXJlIG9ubHkgY3JlYXRlZCBvbiBkZW1hbmQuIFRoaXMgaXMgdmVyeSB1c2VmdWwKKyAgICAgICAgZm9yIG11bHRpcGxleGVycywgYWdncmVnYXRvcnMgYW5kIHRlZSBlbGVtZW50cy4gQWdncmVnYXRvcnMgYXJlCisgICAgICAgIGVsZW1lbnRzIHRoYXQgbWVyZ2UgdGhlIGNvbnRlbnQgb2Ygc2V2ZXJhbCBpbnB1dCBzdHJlYW1zIHRvZ2V0aGVyCisgICAgICAgIGludG8gb25lIG91dHB1dCBzdHJlYW0uIFRlZSBlbGVtZW50cyBhcmUgdGhlIHJldmVyc2U6IHRoZXkgYXJlCisgICAgICAgIGVsZW1lbnRzIHRoYXQgaGF2ZSBvbmUgaW5wdXQgc3RyZWFtIGFuZCBjb3B5IHRoaXMgc3RyZWFtIHRvIGVhY2gKKyAgICAgICAgb2YgdGhlaXIgb3V0cHV0IHBhZHMsIHdoaWNoIGFyZSBjcmVhdGVkIG9uIHJlcXVlc3QuIFdoZW5ldmVyIGFuCisgICAgICAgIGFwcGxpY2F0aW9uIG5lZWRzIGFub3RoZXIgY29weSBvZiB0aGUgc3RyZWFtLCBpdCBjYW4gc2ltcGx5IHJlcXVlc3QKKyAgICAgICAgYSBuZXcgb3V0cHV0IHBhZCBmcm9tIHRoZSB0ZWUgZWxlbWVudC4KKyAgICAgIDwvcGFyYT4gCisgICAgICA8cGFyYT4gCisgICAgICAgIFRoZSBmb2xsb3dpbmcgcGllY2Ugb2YgY29kZSBzaG93cyBob3cgeW91IGNhbiByZXF1ZXN0IGEgbmV3IG91dHB1dAorICAgICAgICBwYWQgZnJvbSBhIDxxdW90ZT50ZWU8L3F1b3RlPiBlbGVtZW50OgorICAgICAgPC9wYXJhPgorICAgICAgPHByb2dyYW1saXN0aW5nPgorc3RhdGljIHZvaWQKK3NvbWVfZnVuY3Rpb24gKEdzdEVsZW1lbnQgKnRlZSkKK3sKKyAgR3N0UGFkICogcGFkOworICBnY2hhciAqbmFtZTsKKworICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKHRlZSwgInNyYyVkIik7CisgIG5hbWUgPSBnc3RfcGFkX2dldF9uYW1lIChwYWQpOworICBnX3ByaW50ICgiQSBuZXcgcGFkICVzIHdhcyBjcmVhdGVkXG4iLCBuYW1lKTsKKyAgZ19mcmVlIChuYW1lKTsKKworICAvKiBoZXJlLCB5b3Ugd291bGQgbGluayB0aGUgcGFkICovCitbLi5dCisKKyAgLyogYW5kLCBhZnRlciBkb2luZyB0aGF0LCBmcmVlIG91ciByZWZlcmVuY2UgKi8KKyAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAocGFkKSk7Cit9CisgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPHBhcmE+IAorICAgICAgICBUaGUgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoKTwvZnVuY3Rpb24+IG1ldGhvZAorICAgICAgICBjYW4gYmUgdXNlZCB0byBnZXQgYSBwYWQgZnJvbSB0aGUgZWxlbWVudCBiYXNlZCBvbiB0aGUgbmFtZSBvZgorICAgICAgICB0aGUgcGFkIHRlbXBsYXRlLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHJlcXVlc3QgYSBwYWQgdGhhdCBpcworICAgICAgICBjb21wYXRpYmxlIHdpdGggYW5vdGhlciBwYWQgdGVtcGxhdGUuIFRoaXMgaXMgdmVyeSB1c2VmdWwgaWYKKyAgICAgICAgeW91IHdhbnQgdG8gbGluayBhbiBlbGVtZW50IHRvIGEgbXVsdGlwbGV4ZXIgZWxlbWVudCBhbmQgeW91CisgICAgICAgIG5lZWQgdG8gcmVxdWVzdCBhIHBhZCB0aGF0IGlzIGNvbXBhdGlibGUuIFRoZSBtZXRob2QKKyAgICAgICAgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X2dldF9jb21wYXRpYmxlX3BhZCAoKTwvZnVuY3Rpb24+IGNhbiBiZQorICAgICAgICB1c2VkIHRvIHJlcXVlc3QgYSBjb21wYXRpYmxlIHBhZCwgYXMgc2hvd24gaW4gdGhlIG5leHQgZXhhbXBsZS4KKyAgICAgICAgSXQgd2lsbCByZXF1ZXN0IGEgY29tcGF0aWJsZSBwYWQgZnJvbSBhbiBPZ2cgbXVsdGlwbGV4ZXIgZnJvbQorICAgICAgICBhbnkgaW5wdXQuCisgICAgICA8L3BhcmE+IAorICAgICAgPHByb2dyYW1saXN0aW5nPgorc3RhdGljIHZvaWQKK2xpbmtfdG9fbXVsdGlwbGV4ZXIgKEdzdFBhZCAgICAgKnRvbGlua19wYWQsCisJCSAgICAgR3N0RWxlbWVudCAqbXV4KQoreworICBHc3RQYWQgKnBhZDsKKyAgZ2NoYXIgKnNyY25hbWUsICpzaW5rbmFtZTsKKworICBzcmNuYW1lID0gZ3N0X3BhZF9nZXRfbmFtZSAodG9saW5rX3BhZCk7CisgIHBhZCA9IGdzdF9lbGVtZW50X2dldF9jb21wYXRpYmxlX3BhZCAobXV4LCB0b2xpbmtfcGFkKTsKKyAgZ3N0X3BhZF9saW5rICh0b2xpbmtwYWQsIHBhZCk7CisgIHNpbmtuYW1lID0gZ3N0X3BhZF9nZXRfbmFtZSAocGFkKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAocGFkKSk7CisKKyAgZ19wcmludCAoIkEgbmV3IHBhZCAlcyB3YXMgY3JlYXRlZCBhbmQgbGlua2VkIHRvICVzXG4iLCBzcmNuYW1lLCBzaW5rbmFtZSk7CisgIGdfZnJlZSAoc2lua25hbWUpOworICBnX2ZyZWUgKHNyY25hbWUpOworfQorICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8L3NlY3QyPgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1jYXBzIj4KKyAgICA8dGl0bGU+Q2FwYWJpbGl0aWVzIG9mIGEgcGFkPC90aXRsZT4KKyAgICA8cGFyYT4gCisgICAgICBTaW5jZSB0aGUgcGFkcyBwbGF5IGEgdmVyeSBpbXBvcnRhbnQgcm9sZSBpbiBob3cgdGhlIGVsZW1lbnQgaXMKKyAgICAgIHZpZXdlZCBieSB0aGUgb3V0c2lkZSB3b3JsZCwgYSBtZWNoYW5pc20gaXMgaW1wbGVtZW50ZWQgdG8gZGVzY3JpYmUKKyAgICAgIHRoZSBkYXRhIHRoYXQgY2FuIGZsb3cgb3IgY3VycmVudGx5IGZsb3dzIHRocm91Z2ggdGhlIHBhZCBieSB1c2luZworICAgICAgY2FwYWJpbGl0aWVzLiBIZXJlLCB3ZSB3aWxsIGJyaWVmbHkgZGVzY3JpYmUgd2hhdCBjYXBhYmlsaXRpZXMgYXJlCisgICAgICBhbmQgaG93IHRvIHVzZSB0aGVtLCBlbm91Z2ggdG8gZ2V0IGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmNlcHQuCisgICAgICBGb3IgYW4gaW4tZGVwdGggbG9vayBpbnRvIGNhcGFiaWxpdGllcyBhbmQgYSBsaXN0IG9mIGFsbCBjYXBhYmlsaXRpZXMKKyAgICAgIGRlZmluZWQgaW4gJkdTdHJlYW1lcjssIHNlZSB0aGUgPHVsaW5rIHR5cGU9Imh0dHAiCisgICAgICB1cmw9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL3B3Zy9odG1sL2luZGV4Lmh0bWwiPlBsdWdpbgorICAgICAgV3JpdGVycyBHdWlkZTwvdWxpbms+LgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIENhcGFiaWxpdGllcyBhcmUgYXR0YWNoZWQgdG8gcGFkIHRlbXBsYXRlcyBhbmQgdG8gcGFkcy4gRm9yIHBhZAorICAgICAgdGVtcGxhdGVzLCBpdCB3aWxsIGRlc2NyaWJlIHRoZSB0eXBlcyBvZiBtZWRpYSB0aGF0IG1heSBzdHJlYW0KKyAgICAgIG92ZXIgYSBwYWQgY3JlYXRlZCBmcm9tIHRoaXMgdGVtcGxhdGUuIEZvciBwYWRzLCBpdCBjYW4gZWl0aGVyCisgICAgICBiZSBhIGxpc3Qgb2YgcG9zc2libGUgY2FwcyAodXN1YWxseSBhIGNvcHkgb2YgdGhlIHBhZCB0ZW1wbGF0ZSdzCisgICAgICBjYXBhYmlsaXRpZXMpLCBpbiB3aGljaCBjYXNlIHRoZSBwYWQgaXMgbm90IHlldCBuZWdvdGlhdGVkLCBvciBpdAorICAgICAgaXMgdGhlIHR5cGUgb2YgbWVkaWEgdGhhdCBjdXJyZW50bHkgc3RyZWFtcyBvdmVyIHRoaXMgcGFkLCBpbgorICAgICAgd2hpY2ggY2FzZSB0aGUgcGFkIGhhcyBiZWVuIG5lZ290aWF0ZWQgYWxyZWFkeS4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdDIgaWQ9InNlY3Rpb24tY2Fwcy1zdHJ1Y3R1cmUiPgorICAgICAgPHRpdGxlPkRpc3NlY3RpbmcgY2FwYWJpbGl0aWVzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBBIHBhZCdzIGNhcGFiaWxpdGllcyBhcmUgZGVzY3JpYmVkIGluIGEgPGNsYXNzbmFtZT5Hc3RDYXBzPC9jbGFzc25hbWU+CisgICAgICAgIG9iamVjdC4gSW50ZXJuYWxseSwgYSA8dWxpbmsgdHlwZT0iaHR0cCIKKyAgICAgICAgdXJsPSIuLi8uLi9nc3RyZWFtZXIvaHRtbC9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sIj48Y2xhc3NuYW1lPkdzdENhcHM8L2NsYXNzbmFtZT48L3VsaW5rPgorICAgICAgICB3aWxsIGNvbnRhaW4gb25lIG9yIG1vcmUgPHVsaW5rIHR5cGU9Imh0dHAiCisgICAgICAgIHVybD0iLi4vLi4vZ3N0cmVhbWVyL2h0bWwvZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIj48Y2xhc3NuYW1lPkdzdFN0cnVjdHVyZTwvY2xhc3NuYW1lPjwvdWxpbms+CisgICAgICAgIHRoYXQgd2lsbCBkZXNjcmliZSBvbmUgbWVkaWEgdHlwZS4gQSBuZWdvdGlhdGVkIHBhZCB3aWxsIGhhdmUKKyAgICAgICAgY2FwYWJpbGl0aWVzIHNldCB0aGF0IGNvbnRhaW4gZXhhY3RseSA8ZW1waGFzaXM+b25lPC9lbXBoYXNpcz4KKyAgICAgICAgc3RydWN0dXJlLiBBbHNvLCB0aGlzIHN0cnVjdHVyZSB3aWxsIGNvbnRhaW4gb25seQorICAgICAgICA8ZW1waGFzaXM+Zml4ZWQ8L2VtcGhhc2lzPiB2YWx1ZXMuIFRoZXNlIGNvbnN0cmFpbnRzIGFyZSBub3QKKyAgICAgICAgdHJ1ZSBmb3IgdW5uZWdvdGlhdGVkIHBhZHMgb3IgcGFkIHRlbXBsYXRlcy4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBBcyBhbiBleGFtcGxlLCBiZWxvdyBpcyBhIGR1bXAgb2YgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUKKyAgICAgICAgPHF1b3RlPnZvcmJpc2RlYzwvcXVvdGU+IGVsZW1lbnQsIHdoaWNoIHlvdSB3aWxsIGdldCBieSBydW5uaW5nCisgICAgICAgIDxjb21tYW5kPmdzdC1pbnNwZWN0IHZvcmJpc2RlYzwvY29tbWFuZD4uIFlvdSB3aWxsIHNlZSB0d28gcGFkczoKKyAgICAgICAgYSBzb3VyY2UgYW5kIGEgc2luayBwYWQuIEJvdGggb2YgdGhlc2UgcGFkcyBhcmUgYWx3YXlzIGF2YWlsYWJsZSwKKyAgICAgICAgYW5kIGJvdGggaGF2ZSBjYXBhYmlsaXRpZXMgYXR0YWNoZWQgdG8gdGhlbS4gVGhlIHNpbmsgcGFkIHdpbGwKKyAgICAgICAgYWNjZXB0IHZvcmJpcy1lbmNvZGVkIGF1ZGlvIGRhdGEsIHdpdGggdGhlIG1pbWUtdHlwZQorICAgICAgICA8cXVvdGU+YXVkaW8veC12b3JiaXM8L3F1b3RlPi4gVGhlIHNvdXJjZSBwYWQgd2lsbCBiZSB1c2VkCisgICAgICAgIHRvIHNlbmQgcmF3IChkZWNvZGVkKSBhdWRpbyBzYW1wbGVzIHRvIHRoZSBuZXh0IGVsZW1lbnQsIHdpdGgKKyAgICAgICAgYSByYXcgYXVkaW8gbWltZS10eXBlIChpbiB0aGlzIGNhc2UsCisJPHF1b3RlPmF1ZGlvL3gtcmF3LWZsb2F0PC9xdW90ZT4pLiAgVGhlIHNvdXJjZSBwYWQgd2lsbCBhbHNvCisgICAgICAgIGNvbnRhaW4gcHJvcGVydGllcyBmb3IgdGhlIGF1ZGlvIHNhbXBsZXJhdGUgYW5kIHRoZSBhbW91bnQgb2YKKyAgICAgICAgY2hhbm5lbHMsIHBsdXMgc29tZSBtb3JlIHRoYXQgeW91IGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQKKyAgICAgICAgZm9yIG5vdy4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KK1BhZCBUZW1wbGF0ZXM6CisgIFNSQyB0ZW1wbGF0ZTogJ3NyYycKKyAgICBBdmFpbGFiaWxpdHk6IEFsd2F5cworICAgIENhcGFiaWxpdGllczoKKyAgICAgIGF1ZGlvL3gtcmF3LWZsb2F0CisgICAgICAgICAgICAgICAgICAgcmF0ZTogWyA4MDAwLCA1MDAwMCBdCisgICAgICAgICAgICAgICBjaGFubmVsczogWyAxLCAyIF0KKyAgICAgICAgICAgICBlbmRpYW5uZXNzOiAxMjM0CisgICAgICAgICAgICAgICAgICB3aWR0aDogMzIKKyAgICAgICAgICBidWZmZXItZnJhbWVzOiAwCisgCisgIFNJTksgdGVtcGxhdGU6ICdzaW5rJworICAgIEF2YWlsYWJpbGl0eTogQWx3YXlzCisgICAgQ2FwYWJpbGl0aWVzOgorICAgICAgYXVkaW8veC12b3JiaXMKKyAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPC9zZWN0Mj4KKworICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1jYXBzLXByb3BzIj4KKyAgICAgIDx0aXRsZT5Qcm9wZXJ0aWVzIGFuZCB2YWx1ZXM8L3RpdGxlPgorICAgICAgPHBhcmE+IAorICAgICAgICBQcm9wZXJ0aWVzIGFyZSB1c2VkIHRvIGRlc2NyaWJlIGV4dHJhIGluZm9ybWF0aW9uIGZvciAKKyAgICAgICAgY2FwYWJpbGl0aWVzLiBBIHByb3BlcnR5IGNvbnNpc3RzIG9mIGEga2V5IChhIHN0cmluZykgYW5kCisgICAgICAgIGEgdmFsdWUuIFRoZXJlIGFyZSBkaWZmZXJlbnQgcG9zc2libGUgdmFsdWUgdHlwZXMgdGhhdCBjYW4gYmUgdXNlZDoKKyAgICAgIDwvcGFyYT4gCisgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCYXNpYyB0eXBlcywgdGhpcyBjYW4gYmUgcHJldHR5IG11Y2ggYW55CisgICAgICAgICAgICA8Y2xhc3NuYW1lPkdUeXBlPC9jbGFzc25hbWU+IHJlZ2lzdGVyZWQgd2l0aCBHbGliLiBUaG9zZQorICAgICAgICAgICAgcHJvcGVydGllcyBpbmRpY2F0ZSBhIHNwZWNpZmljLCBub24tZHluYW1pYyB2YWx1ZSBmb3IgdGhpcworICAgICAgICAgICAgcHJvcGVydHkuIEV4YW1wbGVzIGluY2x1ZGU6CisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFuIGludGVnZXIgdmFsdWUgKDxjbGFzc25hbWU+R19UWVBFX0lOVDwvY2xhc3NuYW1lPik6CisgICAgICAgICAgICAgICAgdGhlIHByb3BlcnR5IGhhcyB0aGlzIGV4YWN0IHZhbHVlLiAKKyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgCSAgICAgICAgQSBib29sZWFuIHZhbHVlICg8Y2xhc3NuYW1lPkdfVFlQRV9CT09MRUFOPC9jbGFzc25hbWU+KToKKyAgICAgICAgICAgICAgICB0aGUgcHJvcGVydHkgaXMgZWl0aGVyIFRSVUUgb3IgRkFMU0UuCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgZmxvYXQgdmFsdWUgKDxjbGFzc25hbWU+R19UWVBFX0ZMT0FUPC9jbGFzc25hbWU+KToKKyAgICAgICAgICAgICAgICB0aGUgcHJvcGVydHkgaGFzIHRoaXMgZXhhY3QgZmxvYXRpbmcgcG9pbnQgdmFsdWUuCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgc3RyaW5nIHZhbHVlICg8Y2xhc3NuYW1lPkdfVFlQRV9TVFJJTkc8L2NsYXNzbmFtZT4pOgorICAgICAgICAgICAgICAgIHRoZSBwcm9wZXJ0eSBjb250YWlucyBhIFVURi04IHN0cmluZy4KKyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBmcmFjdGlvbiB2YWx1ZSAoPGNsYXNzbmFtZT5HU1RfVFlQRV9GUkFDVElPTjwvY2xhc3NuYW1lPik6CisgICAgICAgICAgICAgICAgY29udGFpbnMgYSBmcmFjdGlvbiBleHByZXNzZWQgYnkgYW4gaW50ZWdlciBudW1lcmF0b3IgYW5kCisgICAgICAgICAgICAgICAgZGVub21pbmF0b3IuCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFJhbmdlIHR5cGVzIGFyZSA8Y2xhc3NuYW1lPkdUeXBlPC9jbGFzc25hbWU+cyByZWdpc3RlcmVkIGJ5CisgICAgICAgICAgICAmR1N0cmVhbWVyOyB0byBpbmRpY2F0ZSBhIHJhbmdlIG9mIHBvc3NpYmxlIHZhbHVlcy4gVGhleSBhcmUKKyAgICAgICAgICAgIHVzZWQgZm9yIGluZGljYXRpbmcgYWxsb3dlZCBhdWRpbyBzYW1wbGVyYXRlIHZhbHVlcyBvcgorICAgICAgICAgICAgc3VwcG9ydGVkIHZpZGVvIHNpemVzLiBUaGUgdHdvIHR5cGVzIGRlZmluZWQgaW4gJkdTdHJlYW1lcjsKKyAgICAgICAgICAgIGFyZToKKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBbiBpbnRlZ2VyIHJhbmdlIHZhbHVlCisgICAgICAgICAgICAgICAgKDxjbGFzc25hbWU+R1NUX1RZUEVfSU5UX1JBTkdFPC9jbGFzc25hbWU+KTogdGhlIHByb3BlcnR5CisgICAgICAgICAgICAgICAgZGVub3RlcyBhIHJhbmdlIG9mIHBvc3NpYmxlIGludGVnZXJzLCB3aXRoIGEgbG93ZXIgYW5kIGFuCisgICAgICAgICAgICAgICAgdXBwZXIgYm91bmRhcnkuIFRoZSA8cXVvdGU+dm9yYmlzZGVjPC9xdW90ZT4gZWxlbWVudCwgZm9yCisgICAgICAgICAgICAgICAgZXhhbXBsZSwgaGFzIGEgcmF0ZSBwcm9wZXJ0eSB0aGF0IGNhbiBiZSBiZXR3ZWVuIDgwMDAgYW5kCisgICAgICAgICAgICAgICAgNTAwMDAuCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgIAkgICAgICAgIEEgZmxvYXQgcmFuZ2UgdmFsdWUKKyAgICAgICAgICAgICAgICAoPGNsYXNzbmFtZT5HU1RfVFlQRV9GTE9BVF9SQU5HRTwvY2xhc3NuYW1lPik6IHRoZSBwcm9wZXJ0eQorICAgICAgICAgICAgICAgIGRlbm90ZXMgYSByYW5nZSBvZiBwb3NzaWJsZSBmbG9hdGluZyBwb2ludCB2YWx1ZXMsIHdpdGggYQorICAgICAgICAgICAgICAgIGxvd2VyIGFuZCBhbiB1cHBlciBib3VuZGFyeS4KKyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgCSAgICAgICAgQSBmcmFjdGlvbiByYW5nZSB2YWx1ZQorICAgICAgICAgICAgICAgICg8Y2xhc3NuYW1lPkdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFPC9jbGFzc25hbWU+KTogdGhlIHByb3BlcnR5CisgICAgICAgICAgICAgICAgZGVub3RlcyBhIHJhbmdlIG9mIHBvc3NpYmxlIGZyYWN0aW9uIHZhbHVlcywgd2l0aCBhCisgICAgICAgICAgICAgICAgbG93ZXIgYW5kIGFuIHVwcGVyIGJvdW5kYXJ5LgorICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgCSAgICBBIGxpc3QgdmFsdWUgKDxjbGFzc25hbWU+R1NUX1RZUEVfTElTVDwvY2xhc3NuYW1lPik6IHRoZQorICAgICAgICAgICAgcHJvcGVydHkgY2FuIHRha2UgYW55IHZhbHVlIGZyb20gYSBsaXN0IG9mIGJhc2ljIHZhbHVlcworICAgICAgICAgICAgZ2l2ZW4gaW4gdGhpcyBsaXN0LgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEV4YW1wbGU6IGNhcHMgdGhhdCBleHByZXNzIHRoYXQgZWl0aGVyCisgICAgICAgICAgICBhIHNhbXBsZSByYXRlIG9mIDQ0MTAwIEh6IGFuZCBhIHNhbXBsZSByYXRlIG9mIDQ4MDAwIEh6CisgICAgICAgICAgICBpcyBzdXBwb3J0ZWQgd291bGQgdXNlIGEgbGlzdCBvZiBpbnRlZ2VyIHZhbHVlcywgd2l0aAorICAgICAgICAgICAgb25lIHZhbHVlIGJlaW5nIDQ0MTAwIGFuZCBvbmUgdmFsdWUgYmVpbmcgNDgwMDAuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBbiBhcnJheSB2YWx1ZSAoPGNsYXNzbmFtZT5HU1RfVFlQRV9BUlJBWTwvY2xhc3NuYW1lPik6IHRoZQorICAgICAgICAgICAgcHJvcGVydHkgaXMgYW4gYXJyYXkgb2YgdmFsdWVzLiBFYWNoIHZhbHVlIGluIHRoZSBhcnJheSBpcyBhCisgICAgICAgICAgICBmdWxsIHZhbHVlIG9uIGl0cyBvd24sIHRvby4gQWxsIHZhbHVlcyBpbiB0aGUgYXJyYXkgc2hvdWxkIGJlCisgICAgICAgICAgICBvZiB0aGUgc2FtZSBlbGVtZW50YXJ5IHR5cGUuIFRoaXMgbWVhbnMgdGhhdCBhbiBhcnJheSBjYW4KKyAgICAgICAgICAgIGNvbnRhaW4gYW55IGNvbWJpbmF0aW9uIG9mIGludGVnZXJzLCBsaXN0cyBvZiBpbnRlZ2VycywgaW50ZWdlcgorICAgICAgICAgICAgcmFuZ2VzIHRvZ2V0aGVyLCBhbmQgdGhlIHNhbWUgZm9yIGZsb2F0cyBvciBzdHJpbmdzLCBidXQgaXQgY2FuCisgICAgICAgICAgICBub3QgY29udGFpbiBib3RoIGZsb2F0cyBhbmQgaW50cyBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEV4YW1wbGU6IGZvciBhdWRpbyB3aGVyZSB0aGVyZSBhcmUgbW9yZSB0aGFuIHR3byBjaGFubmVscyBpbnZvbHZlZAorICAgICAgICAgICAgdGhlIGNoYW5uZWwgbGF5b3V0IG5lZWRzIHRvIGJlIHNwZWNpZmllZCAoZm9yIG9uZSBhbmQgdHdvIGNoYW5uZWwKKyAgICAgICAgICAgIGF1ZGlvIHRoZSBjaGFubmVsIGxheW91dCBpcyBpbXBsaWNpdCB1bmxlc3Mgc3RhdGVkIG90aGVyd2lzZSBpbiB0aGUKKyAgICAgICAgICAgIGNhcHMpLiBTbyB0aGUgY2hhbm5lbCBsYXlvdXQgd291bGQgYmUgYW4gYXJyYXkgb2YgaW50ZWdlciBlbnVtCisgICAgICAgICAgICB2YWx1ZXMgd2hlcmUgZWFjaCBlbnVtIHZhbHVlIHJlcHJlc2VudHMgYSBsb3Vkc3BlYWtlciBwb3NpdGlvbi4KKyAgICAgICAgICAgIFVubGlrZSBhIDxjbGFzc25hbWU+R1NUX1RZUEVfTElTVDwvY2xhc3NuYW1lPiwgdGhlIHZhbHVlcyBpbiBhbgorICAgICAgICAgICAgYXJyYXkgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhIHdob2xlLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvc2VjdDI+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWNhcHMtYXBpIj4KKyAgICA8dGl0bGU+V2hhdCBjYXBhYmlsaXRpZXMgYXJlIHVzZWQgZm9yPC90aXRsZT4KKyAgICA8cGFyYT4gCisgICAgICBDYXBhYmlsaXRpZXMgKHNob3J0OiBjYXBzKSBkZXNjcmliZSB0aGUgdHlwZSBvZiBkYXRhIHRoYXQgaXMgc3RyZWFtZWQKKyAgICAgIGJldHdlZW4gdHdvIHBhZHMsIG9yIHRoYXQgb25lIHBhZCAodGVtcGxhdGUpIHN1cHBvcnRzLiBUaGlzIG1ha2VzIHRoZW0KKyAgICAgIHZlcnkgdXNlZnVsIGZvciB2YXJpb3VzIHB1cnBvc2VzOgorICAgIDwvcGFyYT4gCisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQXV0b3BsdWdnaW5nOiBhdXRvbWF0aWNhbGx5IGZpbmRpbmcgZWxlbWVudHMgdG8gbGluayB0byBhCisgICAgICAgICAgcGFkIGJhc2VkIG9uIGl0cyBjYXBhYmlsaXRpZXMuIEFsbCBhdXRvcGx1Z2dlcnMgdXNlIHRoaXMKKyAgICAgICAgICBtZXRob2QuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIENvbXBhdGliaWxpdHkgZGV0ZWN0aW9uOiB3aGVuIHR3byBwYWRzIGFyZSBsaW5rZWQsICZHU3RyZWFtZXI7CisgICAgICAgICAgY2FuIHZlcmlmeSBpZiB0aGUgdHdvIHBhZHMgYXJlIHRhbGtpbmcgYWJvdXQgdGhlIHNhbWUgbWVkaWEKKyAgICAgICAgICB0eXBlLiBUaGUgcHJvY2VzcyBvZiBsaW5raW5nIHR3byBwYWRzIGFuZCBjaGVja2luZyBpZiB0aGV5CisgICAgICAgICAgYXJlIGNvbXBhdGlibGUgaXMgY2FsbGVkIDxxdW90ZT5jYXBzIG5lZ290aWF0aW9uPC9xdW90ZT4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIE1ldGFkYXRhOiBieSByZWFkaW5nIHRoZSBjYXBhYmlsaXRpZXMgZnJvbSBhIHBhZCwgYXBwbGljYXRpb25zCisgICAgICAgICAgY2FuIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHR5cGUgb2YgbWVkaWEgdGhhdCBpcyBiZWluZworICAgICAgICAgIHN0cmVhbWVkIG92ZXIgdGhlIHBhZCwgd2hpY2ggaXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0cmVhbQorICAgICAgICAgIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIHBsYXllZCBiYWNrLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBGaWx0ZXJpbmc6IGFuIGFwcGxpY2F0aW9uIGNhbiB1c2UgY2FwYWJpbGl0aWVzIHRvIGxpbWl0IHRoZQorICAgICAgICAgIHBvc3NpYmxlIG1lZGlhIHR5cGVzIHRoYXQgY2FuIHN0cmVhbSBiZXR3ZWVuIHR3byBwYWRzIHRvIGEKKyAgICAgICAgICBzcGVjaWZpYyBzdWJzZXQgb2YgdGhlaXIgc3VwcG9ydGVkIHN0cmVhbSB0eXBlcy4gQW4gYXBwbGljYXRpb24KKyAgICAgICAgICBjYW4sIGZvciBleGFtcGxlLCB1c2UgPHF1b3RlPmZpbHRlcmVkIGNhcHM8L3F1b3RlPiB0byBzZXQgYQorICAgICAgICAgIHNwZWNpZmljIChmaXhlZCBvciBub24tZml4ZWQpIHZpZGVvIHNpemUgdGhhdCBzaG91bGQgc3RyZWFtCisgICAgICAgICAgYmV0d2VlbiB0d28gcGFkcy4gWW91IHdpbGwgc2VlIGFuIGV4YW1wbGUgb2YgZmlsdGVyZWQgY2FwcworICAgICAgICAgIGxhdGVyIGluIHRoaXMgbWFudWFsLCBpbiA8eHJlZiBsaW5rZW5kPSJzZWN0aW9uLWRhdGEtc3Bvb2YiLz4uCisgICAgICAgICAgWW91IGNhbiBkbyBjYXBzIGZpbHRlcmluZyBieSBpbnNlcnRpbmcgYSBjYXBzZmlsdGVyIGVsZW1lbnQgaW50bworICAgICAgICAgIHlvdXIgcGlwZWxpbmUgYW5kIHNldHRpbmcgaXRzIDxxdW90ZT5jYXBzPC9xdW90ZT4gcHJvcGVydHkuIENhcHMKKyAgICAgICAgICBmaWx0ZXJzIGFyZSBvZnRlbiBwbGFjZWQgYWZ0ZXIgY29udmVydGVyIGVsZW1lbnRzIGxpa2UgYXVkaW9jb252ZXJ0LAorICAgICAgICAgIGF1ZGlvcmVzYW1wbGUsIGZmbXBlZ2NvbG9yc3BhY2Ugb3IgdmlkZW9zY2FsZSB0byBmb3JjZSB0aG9zZQorICAgICAgICAgIGNvbnZlcnRlcnMgdG8gY29udmVydCBkYXRhIHRvIGEgc3BlY2lmaWMgb3V0cHV0IGZvcm1hdCBhdCBhCisgICAgICAgICAgY2VydGFpbiBwb2ludCBpbiBhIHN0cmVhbS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKworICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1jYXBzLW1ldGFkYXRhIj4KKyAgICAgIDx0aXRsZT5Vc2luZyBjYXBhYmlsaXRpZXMgZm9yIG1ldGFkYXRhPC90aXRsZT4KKyAgICAgIDxwYXJhPiAKKyAgICAgICAgQSBwYWQgY2FuIGhhdmUgYSBzZXQgKGkuZS4gb25lIG9yIG1vcmUpIG9mIGNhcGFiaWxpdGllcyBhdHRhY2hlZAorICAgICAgICB0byBpdC4gQ2FwYWJpbGl0aWVzICg8Y2xhc3NuYW1lPkdzdENhcHM8L2NsYXNzbmFtZT4pIGFyZSByZXByZXNlbnRlZAorICAgICAgICBhcyBhbiBhcnJheSBvZiBvbmUgb3IgbW9yZSA8Y2xhc3NuYW1lPkdzdFN0cnVjdHVyZTwvY2xhc3NuYW1lPnMsIGFuZAorICAgICAgICBlYWNoIDxjbGFzc25hbWU+R3N0U3RydWN0dXJlPC9jbGFzc25hbWU+IGlzIGFuIGFycmF5IG9mIGZpZWxkcyB3aGVyZQorICAgICAgICBlYWNoIGZpZWxkIGNvbnNpc3RzIG9mIGEgZmllbGQgbmFtZSBzdHJpbmcgKGUuZy4gIndpZHRoIikgYW5kIGEKKyAgICAgICAgdHlwZWQgdmFsdWUgKGUuZy4gPGNsYXNzbmFtZT5HX1RZUEVfSU5UPC9jbGFzc25hbWU+IG9yCisgICAgICAgIDxjbGFzc25hbWU+R1NUX1RZUEVfSU5UX1JBTkdFPC9jbGFzc25hbWU+KS4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBOb3RlIHRoYXQgdGhlcmUgaXMgYSBkaXN0aW5jdCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlCisgICAgICAgIDxlbXBoYXNpcz5wb3NzaWJsZTwvZW1waGFzaXM+IGNhcGFiaWxpdGllcyBvZiBhIHBhZCAoaWUuIHVzdWFsbHkgd2hhdAorICAgICAgICB5b3UgZmluZCBhcyBjYXBzIG9mIHBhZCB0ZW1wbGF0ZXMgYXMgdGhleSBhcmUgc2hvd24gaW4gZ3N0LWluc3BlY3QpLAorICAgICAgICB0aGUgPGVtcGhhc2lzPmFsbG93ZWQ8L2VtcGhhc2lzPiBjYXBzIG9mIGEgcGFkIChjYW4gYmUgdGhlIHNhbWUgYXMKKyAgICAgICAgdGhlIHBhZCdzIHRlbXBsYXRlIGNhcHMgb3IgYSBzdWJzZXQgb2YgdGhlbSwgZGVwZW5kaW5nIG9uIHRoZSBwb3NzaWJsZQorICAgICAgICBjYXBzIG9mIHRoZSBwZWVyIHBhZCkgYW5kIGxhc3RseSA8ZW1waGFzaXM+bmVnb3RpYXRlZDwvZW1waGFzaXM+IGNhcHMKKyAgICAgICAgKHRoZXNlIGRlc2NyaWJlIHRoZSBleGFjdCBmb3JtYXQgb2YgYSBzdHJlYW0gb3IgYnVmZmVyIGFuZCBjb250YWluCisgICAgICAgIGV4YWN0bHkgb25lIHN0cnVjdHVyZSBhbmQgaGF2ZSBubyB2YXJpYWJsZSBiaXRzIGxpa2UgcmFuZ2VzIG9yIGxpc3RzLAorICAgICAgICBpZS4gdGhleSBhcmUgZml4ZWQgY2FwcykuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiBnZXQgdmFsdWVzIG9mIHByb3BlcnRpZXMgaW4gYSBzZXQgb2YgY2FwYWJpbGl0aWVzCisgICAgICAgIGJ5IHF1ZXJ5aW5nIGluZGl2aWR1YWwgcHJvcGVydGllcyBvZiBvbmUgc3RydWN0dXJlLiBZb3UgY2FuIGdldAorICAgICAgICBhIHN0cnVjdHVyZSBmcm9tIGEgY2FwcyB1c2luZworICAgICAgICA8ZnVuY3Rpb24+Z3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoKTwvZnVuY3Rpb24+IGFuZCB0aGUgbnVtYmVyIG9mCisgICAgICAgIHN0cnVjdHVyZXMgaW4gYSA8Y2xhc3NuYW1lPkdzdENhcHM8L2NsYXNzbmFtZT4gdXNpbmcKKyAgICAgICAgPGZ1bmN0aW9uPmdzdF9jYXBzX2dldF9zaXplICgpPC9mdW5jdGlvbj4uCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgQ2FwcyBhcmUgY2FsbGVkIDxlbXBoYXNpcz5zaW1wbGUgY2FwczwvZW1waGFzaXM+IHdoZW4gdGhleSBjb250YWluCisgICAgICAgIG9ubHkgb25lIHN0cnVjdHVyZSwgYW5kIDxlbXBoYXNpcz5maXhlZCBjYXBzPC9lbXBoYXNpcz4gd2hlbiB0aGV5CisgICAgICAgIGNvbnRhaW4gb25seSBvbmUgc3RydWN0dXJlIGFuZCBoYXZlIG5vIHZhcmlhYmxlIGZpZWxkIHR5cGVzIChsaWtlCisgICAgICAgIHJhbmdlcyBvciBsaXN0cyBvZiBwb3NzaWJsZSB2YWx1ZXMpLiBUd28gb3RoZXIgc3BlY2lhbCB0eXBlcyBvZiBjYXBzCisgICAgICAgIGFyZSA8ZW1waGFzaXM+QU5ZIGNhcHM8L2VtcGhhc2lzPiBhbmQgPGVtcGhhc2lzPmVtcHR5IGNhcHM8L2VtcGhhc2lzPi4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIGV4dHJhY3QgdGhlIHdpZHRoIGFuZCBoZWlnaHQgZnJvbQorICAgICAgICBhIHNldCBvZiBmaXhlZCB2aWRlbyBjYXBzOgorICAgICAgPHByb2dyYW1saXN0aW5nPgorc3RhdGljIHZvaWQKK3JlYWRfdmlkZW9fcHJvcHMgKEdzdENhcHMgKmNhcHMpCit7CisgIGdpbnQgd2lkdGgsIGhlaWdodDsKKyAgY29uc3QgR3N0U3RydWN0dXJlICpzdHI7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X2NhcHNfaXNfZml4ZWQgKGNhcHMpKTsKKworICBzdHIgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKKyAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0ciwgIndpZHRoIiwgJmFtcDt3aWR0aCkgfHwKKyAgICAgICFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0ciwgImhlaWdodCIsICZhbXA7aGVpZ2h0KSkgeworICAgIGdfcHJpbnQgKCJObyB3aWR0aC9oZWlnaHQgYXZhaWxhYmxlXG4iKTsKKyAgICByZXR1cm47CisgIH0KKworICBnX3ByaW50ICgiVGhlIHZpZGVvIHNpemUgb2YgdGhpcyBzZXQgb2YgY2FwYWJpbGl0aWVzIGlzICVkeCVkXG4iLAorCSAgIHdpZHRoLCBoZWlnaHQpOworfQorICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3QyPgorCisgICAgPHNlY3QyIGlkPSJzZWN0aW9uLWNhcHMtZmlsdGVyIj4KKyAgICAgIDx0aXRsZT5DcmVhdGluZyBjYXBhYmlsaXRpZXMgZm9yIGZpbHRlcmluZzwvdGl0bGU+CisgICAgICA8cGFyYT4gCisgICAgICAgIFdoaWxlIGNhcGFiaWxpdGllcyBhcmUgbWFpbmx5IHVzZWQgaW5zaWRlIGEgcGx1Z2luIHRvIGRlc2NyaWJlIHRoZQorICAgICAgICBtZWRpYSB0eXBlIG9mIHRoZSBwYWRzLCB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbW1lciBvZnRlbiBhbHNvIGhhcworICAgICAgICB0byBoYXZlIGJhc2ljIHVuZGVyc3RhbmRpbmcgb2YgY2FwYWJpbGl0aWVzIGluIG9yZGVyIHRvIGludGVyZmFjZQorICAgICAgICB3aXRoIHRoZSBwbHVnaW5zLCBlc3BlY2lhbGx5IHdoZW4gdXNpbmcgZmlsdGVyZWQgY2Fwcy4gV2hlbiB5b3UncmUKKyAgICAgICAgdXNpbmcgZmlsdGVyZWQgY2FwcyBvciBmaXhhdGlvbiwgeW91J3JlIGxpbWl0aW5nIHRoZSBhbGxvd2VkIHR5cGVzIG9mCisgICAgICAgIG1lZGlhIHRoYXQgY2FuIHN0cmVhbSBiZXR3ZWVuIHR3byBwYWRzIHRvIGEgc3Vic2V0IG9mIHRoZWlyIHN1cHBvcnRlZAorICAgICAgICBtZWRpYSB0eXBlcy4gWW91IGRvIHRoaXMgdXNpbmcgYSA8Y2xhc3NuYW1lPmNhcHNmaWx0ZXI8L2NsYXNzbmFtZT4KKyAgICAgICAgZWxlbWVudCBpbiB5b3VyIHBpcGVsaW5lLiBJbiBvcmRlciB0byBkbyB0aGlzLCB5b3UgYWxzbyBuZWVkIHRvCisgICAgICAgIGNyZWF0ZSB5b3VyIG93biA8Y2xhc3NuYW1lPkdzdENhcHM8L2NsYXNzbmFtZT4uIFRoZSBlYXNpZXN0IHdheSB0bworICAgICAgICBkbyB0aGlzIGlzIGJ5IHVzaW5nIHRoZSBjb252ZW5pZW5jZSBmdW5jdGlvbgorICAgICAgICA8ZnVuY3Rpb24+Z3N0X2NhcHNfbmV3X3NpbXBsZSAoKTwvZnVuY3Rpb24+OgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitzdGF0aWMgZ2Jvb2xlYW4KK2xpbmtfZWxlbWVudHNfd2l0aF9maWx0ZXIgKEdzdEVsZW1lbnQgKmVsZW1lbnQxLCBHc3RFbGVtZW50ICplbGVtZW50MikKK3sKKyAgZ2Jvb2xlYW4gbGlua19vazsKKyAgR3N0Q2FwcyAqY2FwczsKKworICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtcmF3LXl1diIsCisgIAkgICAgICAiZm9ybWF0IiwgR1NUX1RZUEVfRk9VUkNDLCBHU1RfTUFLRV9GT1VSQ0MgKCdJJywgJzQnLCAnMicsICcwJyksCisJICAgICAgIndpZHRoIiwgR19UWVBFX0lOVCwgMzg0LAorCSAgICAgICJoZWlnaHQiLCBHX1RZUEVfSU5ULCAyODgsCisJICAgICAgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OLCAyNSwgMSwKKwkgICAgICBOVUxMKTsKKworICBsaW5rX29rID0gZ3N0X2VsZW1lbnRfbGlua19maWx0ZXJlZCAoZWxlbWVudDEsIGVsZW1lbnQyLCBjYXBzKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOworCisgIGlmICghbGlua19vaykgeworICAgIGdfd2FybmluZyAoIkZhaWxlZCB0byBsaW5rIGVsZW1lbnQxIGFuZCBlbGVtZW50MiEiKTsKKyAgfQorCisgIHJldHVybiBsaW5rX29rOworfQorICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIFRoaXMgd2lsbCBmb3JjZSB0aGUgZGF0YSBmbG93IGJldHdlZW4gdGhvc2UgdHdvIGVsZW1lbnRzIHRvCisgICAgICBhIGNlcnRhaW4gdmlkZW8gZm9ybWF0LCB3aWR0aCwgaGVpZ2h0IGFuZCBmcmFtZXJhdGUgKG9yIHRoZSBsaW5raW5nCisgICAgICB3aWxsIGZhaWwgaWYgdGhhdCBjYW5ub3QgYmUgYWNoaWV2ZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGVsZW1lbnRzCisgICAgICBpbnZvbHZlZCkuIEtlZXAgaW4gbWluZCB0aGF0IHdoZW4geW91IHVzZSA8ZnVuY3Rpb24+CisgICAgICBnc3RfZWxlbWVudF9saW5rX2ZpbHRlcmVkICgpPC9mdW5jdGlvbj4gaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGNyZWF0ZQorICAgICAgYSA8Y2xhc3NuYW1lPmNhcHNmaWx0ZXI8L2NsYXNzbmFtZT4gZWxlbWVudCBmb3IgeW91IGFuZCBpbnNlcnQgaXQgaW50bworICAgICAgeW91ciBiaW4gb3IgcGlwZWxpbmUgYmV0d2VlbiB0aGUgdHdvIGVsZW1lbnRzIHlvdSB3YW50IHRvIGNvbm5lY3QgKHRoaXMKKyAgICAgIGlzIGltcG9ydGFudCBpZiB5b3UgZXZlciB3YW50IHRvIGRpc2Nvbm5lY3QgdGhvc2UgZWxlbWVudHMgYmVjYXVzZSB0aGVuCisgICAgICB5b3Ugd2lsbCBoYXZlIHRvIGRpc2Nvbm5lY3QgYm90aCBlbGVtZW50cyBmcm9tIHRoZSBjYXBzZmlsdGVyIGluc3RlYWQpLgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIEluIHNvbWUgY2FzZXMsIHlvdSB3aWxsIHdhbnQgdG8gY3JlYXRlIGEgbW9yZSBlbGFib3JhdGUgc2V0IG9mCisgICAgICAgIGNhcGFiaWxpdGllcyB0byBmaWx0ZXIgYSBsaW5rIGJldHdlZW4gdHdvIHBhZHMuIFRoZW4sIHRoaXMgZnVuY3Rpb24KKyAgICAgICAgaXMgdG9vIHNpbXBsaXN0aWMgYW5kIHlvdSdsbCB3YW50IHRvIHVzZSB0aGUgbWV0aG9kCisgICAgICAgIDxmdW5jdGlvbj5nc3RfY2Fwc19uZXdfZnVsbCAoKTwvZnVuY3Rpb24+OgorICAgICAgPC9wYXJhPgorICAgICAgPHByb2dyYW1saXN0aW5nPgorc3RhdGljIGdib29sZWFuCitsaW5rX2VsZW1lbnRzX3dpdGhfZmlsdGVyIChHc3RFbGVtZW50ICplbGVtZW50MSwgR3N0RWxlbWVudCAqZWxlbWVudDIpCit7CisgIGdib29sZWFuIGxpbmtfb2s7CisgIEdzdENhcHMgKmNhcHM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBjYXBzID0gZ3N0X2NhcHNfbmV3X2Z1bGwgKAorICAgICAgZ3N0X3N0cnVjdHVyZV9uZXcgKCJ2aWRlby94LXJhdy15dXYiLAorCQkJICJ3aWR0aCIsIEdfVFlQRV9JTlQsIDM4NCwKKwkJCSAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgMjg4LAorCQkJICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTiwgMjUsIDEsCisJCQkgTlVMTCksCisgICAgICBnc3Rfc3RydWN0dXJlX25ldyAoInZpZGVvL3gtcmF3LXJnYiIsCisJCQkgIndpZHRoIiwgR19UWVBFX0lOVCwgMzg0LAorCQkJICJoZWlnaHQiLCBHX1RZUEVfSU5ULCAyODgsCisJCQkgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OLCAyNSwgMSwKKwkJCSBOVUxMKSwKKyAgICAgIE5VTEwpOworCisgIGxpbmtfb2sgPSBnc3RfZWxlbWVudF9saW5rX2ZpbHRlcmVkIChlbGVtZW50MSwgZWxlbWVudDIsIGNhcHMpOworICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7CisKKyAgaWYgKCFsaW5rX29rKSB7CisgICAgZ193YXJuaW5nICgiRmFpbGVkIHRvIGxpbmsgZWxlbWVudDEgYW5kIGVsZW1lbnQyISIpOworICB9CisKKyAgcmV0dXJuIGxpbmtfb2s7Cit9CisgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPHBhcmE+CisgICAgICAgIFNlZSB0aGUgQVBJIHJlZmVyZW5jZXMgZm9yIHRoZSBmdWxsIEFQSSBvZgorCTx1bGluayB0eXBlPSJodHRwIgorCSAgdXJsPSImVVJMQVBJO0dzdFN0cnVjdHVyZS5odG1sIj48Y2xhc3NuYW1lPkdzdFN0cnVjdHVyZTwvY2xhc3NuYW1lPjwvdWxpbms+CisJYW5kIDx1bGluayB0eXBlPSJodHRwIgorCSAgdXJsPSImVVJMQVBJO0dzdENhcHMuaHRtbCI+PGNsYXNzbmFtZT5Hc3RDYXBzPC9jbGFzc25hbWU+PC91bGluaz4uCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0Mj4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tcGFkcy1naG9zdCI+CisgICAgPHRpdGxlPkdob3N0IHBhZHM8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgWW91IGNhbiBzZWUgZnJvbSA8eHJlZiBsaW5rZW5kPSJzZWN0aW9uLWJpbi1ub2dob3N0LWltZyIvPiBob3cgYSBiaW4KKyAgICAgIGhhcyBubyBwYWRzIG9mIGl0cyBvd24uIFRoaXMgaXMgd2hlcmUgImdob3N0IHBhZHMiIGNvbWUgaW50byBwbGF5LgorICAgIDwvcGFyYT4KKyAgICA8ZmlndXJlIGZsb2F0PSIxIiBpZD0ic2VjdGlvbi1iaW4tbm9naG9zdC1pbWciPgorICAgICAgPHRpdGxlPlZpc3VhbGlzYXRpb24gb2YgYSA8dWxpbmsgdHlwZT0iaHR0cCIKKyAgICAgIHVybD0iLi4vLi4vZ3N0cmVhbWVyL2h0bWwvR3N0QmluLmh0bWwiPjxjbGFzc25hbWU+R3N0QmluPC9jbGFzc25hbWU+PC91bGluaz4KKyAgICAgIGVsZW1lbnQgd2l0aG91dCBnaG9zdCBwYWRzPC90aXRsZT4KKyAgICAgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgPGltYWdlb2JqZWN0PgorICAgICAgICAgIDxpbWFnZWRhdGEgc2NhbGU9Ijc1IiBmaWxlcmVmPSJpbWFnZXMvYmluLWVsZW1lbnQtbm9naG9zdC4maW1hZ2U7IgorICAgICAgICAgIGZvcm1hdD0iJklNQUdFOyIvPgorICAgICAgICA8L2ltYWdlb2JqZWN0PgorICAgICAgPC9tZWRpYW9iamVjdD4gIAorICAgIDwvZmlndXJlPgorICAgIDxwYXJhPgorICAgICAgQSBnaG9zdCBwYWQgaXMgYSBwYWQgZnJvbSBzb21lIGVsZW1lbnQgaW4gdGhlIGJpbiB0aGF0IGNhbiBiZQorICAgICAgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSB0aGUgYmluIGFzIHdlbGwuIENvbXBhcmUgaXQgdG8gYSBzeW1ib2xpYworICAgICAgbGluayBpbiBVTklYIGZpbGVzeXN0ZW1zLiBVc2luZyBnaG9zdCBwYWRzIG9uIGJpbnMsIHRoZSBiaW4gYWxzbworICAgICAgaGFzIGEgcGFkIGFuZCBjYW4gdHJhbnNwYXJlbnRseSBiZSB1c2VkIGFzIGFuIGVsZW1lbnQgaW4gb3RoZXIKKyAgICAgIHBhcnRzIG9mIHlvdXIgY29kZS4KKyAgICA8L3BhcmE+CisgICAgCisgICAgPGZpZ3VyZSBmbG9hdD0iMSIgaWQ9InNlY3Rpb24tYmluLWdob3N0LWltZyI+CisgICAgICA8dGl0bGU+VmlzdWFsaXNhdGlvbiBvZiBhIDx1bGluayB0eXBlPSJodHRwIgorICAgICAgdXJsPSIuLi8uLi9nc3RyZWFtZXIvaHRtbC9Hc3RCaW4uaHRtbCI+PGNsYXNzbmFtZT5Hc3RCaW48L2NsYXNzbmFtZT48L3VsaW5rPgorICAgICAgZWxlbWVudCB3aXRoIGEgZ2hvc3QgcGFkPC90aXRsZT4KKyAgICAgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgPGltYWdlb2JqZWN0PgorICAgICAgICAgIDxpbWFnZWRhdGEgc2NhbGU9Ijc1IiBmaWxlcmVmPSJpbWFnZXMvYmluLWVsZW1lbnQtZ2hvc3QuJmltYWdlOyIKKyAgICAgICAgICBmb3JtYXQ9IiZJTUFHRTsiLz4KKyAgICAgICAgPC9pbWFnZW9iamVjdD4KKyAgICAgIDwvbWVkaWFvYmplY3Q+ICAKKyAgICA8L2ZpZ3VyZT4KKyAgICA8cGFyYT4KKyAgICAgIDx4cmVmIGxpbmtlbmQ9InNlY3Rpb24tYmluLWdob3N0LWltZyIvPiBpcyBhIHJlcHJlc2VudGF0aW9uIG9mIGEKKyAgICAgIGdob3N0IHBhZC4gVGhlIHNpbmsgcGFkIG9mIGVsZW1lbnQgb25lIGlzIG5vdyBhbHNvIGEgcGFkIG9mIHRoZSBiaW4uCisgICAgICBCZWNhdXNlIGdob3N0IHBhZHMgbG9vayBhbmQgd29yayBsaWtlIGFueSBvdGhlciBwYWRzLCB0aGV5IGNhbiBiZSBhZGRlZCAKKyAgICAgIHRvIGFueSB0eXBlIG9mIGVsZW1lbnRzLCBub3QganVzdCB0byBhIDxjbGFzc25hbWU+R3N0QmluPC9jbGFzc25hbWU+LAorICAgICAganVzdCBsaWtlIG9yZGluYXJ5IHBhZHMuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgQSBnaG9zdHBhZCBpcyBjcmVhdGVkIHVzaW5nIHRoZSBmdW5jdGlvbgorICAgICAgPGZ1bmN0aW9uPmdzdF9naG9zdF9wYWRfbmV3ICgpPC9mdW5jdGlvbj46CisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz48IS0tIGV4YW1wbGUtYmVnaW4gZ2hvc3RwYWQuYyBhIC0tPgorI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKKworaW50CittYWluIChpbnQgICBhcmdjLAorICAgICAgY2hhciAqYXJndltdKQoreworICBHc3RFbGVtZW50ICpiaW4sICpzaW5rOworICBHc3RQYWQgKnBhZDsKKworICAvKiBpbml0ICovCisgIGdzdF9pbml0ICgmYW1wO2FyZ2MsICZhbXA7YXJndik7CisKKyAgLyogY3JlYXRlIGVsZW1lbnQsIGFkZCB0byBiaW4gKi8KKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKKyAgYmluID0gZ3N0X2Jpbl9uZXcgKCJteWJpbiIpOworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAoYmluKSwgc2luayk7CisKKyAgLyogYWRkIGdob3N0cGFkICovCisgIHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rLCAic2luayIpOworICBnc3RfZWxlbWVudF9hZGRfcGFkIChiaW4sIGdzdF9naG9zdF9wYWRfbmV3ICgic2luayIsIHBhZCkpOworICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChwYWQpKTsKKzwhLS0gZXhhbXBsZS1lbmQgZ2hvc3RwYWQuYyBhIC0tPgorWy4uXTwhLS0gZXhhbXBsZS1iZWdpbiBnaG9zdHBhZC5jIGIgLS0+PCEtLQorICByZXR1cm4gMDsKKy0tPjwhLS0gZXhhbXBsZS1lbmQgZ2hvc3RwYWQuYyBiIC0tPgorPCEtLSBleGFtcGxlLWJlZ2luIGdob3N0cGFkLmMgYyAtLT4KK30KKyAgICA8IS0tIGV4YW1wbGUtZW5kIGdob3N0cGFkLmMgYyAtLT48L3Byb2dyYW1saXN0aW5nPgorICAgIDxwYXJhPgorICAgICAgSW4gdGhlIGFib3ZlIGV4YW1wbGUsIHRoZSBiaW4gbm93IGFsc28gaGFzIGEgcGFkOiB0aGUgcGFkIGNhbGxlZAorICAgICAgPHF1b3RlPnNpbms8L3F1b3RlPiBvZiB0aGUgZ2l2ZW4gZWxlbWVudC4gVGhlIGJpbiBjYW4sIGZyb20gaGVyZQorICAgICAgb24sIGJlIHVzZWQgYXMgYSBzdWJzdGl0dXRlIGZvciB0aGUgc2luayBlbGVtZW50LiBZb3UgY291bGQsIGZvcgorICAgICAgZXhhbXBsZSwgbGluayBhbm90aGVyIGVsZW1lbnQgdG8gdGhlIGJpbi4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL21hbnVhbC9iYXNpY3MtcGx1Z2lucy54bWwgYi9kb2NzL21hbnVhbC9iYXNpY3MtcGx1Z2lucy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyNjNlMQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbWFudWFsL2Jhc2ljcy1wbHVnaW5zLnhtbApAQCAtMCwwICsxLDg1IEBACis8Y2hhcHRlciBpZD0iY2hhcHRlci1wbHVnaW5zIj4KKyAgPHRpdGxlPlBsdWdpbnM8L3RpdGxlPgorICA8IS0tIEZJWE1FOiBpbnRyb2R1Y2UgdHlwZSBkZWZpbml0aW9ucyBiZWZvcmUgdGhpcyBjaGFwdGVyIC0tPgorICA8cGFyYT4gCisgICAgQSBwbHVnaW4gaXMgYSBzaGFyZWQgbGlicmFyeSB0aGF0IGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nCisgICAgaXRlbXM6CisgIDwvcGFyYT4KKworICA8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAgICBvbmUgb3IgbW9yZSBlbGVtZW50IGZhY3RvcmllcworICAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgIG9uZSBvciBtb3JlIHR5cGUgZGVmaW5pdGlvbnMKKyAgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAgICBvbmUgb3IgbW9yZSBhdXRvLXBsdWdnZXJzCisgICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICAgZXhwb3J0ZWQgc3ltYm9scyBmb3IgdXNlIGluIG90aGVyIHBsdWdpbnMKKyAgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICA8L2l0ZW1pemVkbGlzdD4KKworICA8cGFyYT4gCisgICAgQWxsIHBsdWdpbnMgc2hvdWxkIGltcGxlbWVudCBvbmUgZnVuY3Rpb24sIDxmdW5jdGlvbj5wbHVnaW5faW5pdDwvZnVuY3Rpb24+LAorICAgIHRoYXQgY3JlYXRlcyBhbGwgdGhlIGVsZW1lbnQgZmFjdG9yaWVzIGFuZCByZWdpc3RlcnMgYWxsIHRoZSB0eXBlCisgICAgZGVmaW5pdGlvbnMgY29udGFpbmVkIGluIHRoZSBwbHVnaW4uCisgICAgV2l0aG91dCB0aGlzIGZ1bmN0aW9uLCBhIHBsdWdpbiBjYW5ub3QgYmUgcmVnaXN0ZXJlZC4KKyAgPC9wYXJhPiAKKyAgPHBhcmE+IAorICAgIFRoZSBwbHVnaW5zIGFyZSBtYWludGFpbmVkIGluIHRoZSBwbHVnaW4gc3lzdGVtLiBPcHRpb25hbGx5LCB0aGUKKyAgICB0eXBlIGRlZmluaXRpb25zIGFuZCB0aGUgZWxlbWVudCBmYWN0b3JpZXMgY2FuIGJlIHNhdmVkIGludG8gYW4gWE1MCisgICAgcmVwcmVzZW50YXRpb24gc28gdGhhdCB0aGUgcGx1Z2luIHN5c3RlbSBkb2VzIG5vdCBoYXZlIHRvIGxvYWQgYWxsCisgICAgYXZhaWxhYmxlIHBsdWdpbnMgaW4gb3JkZXIgdG8ga25vdyB0aGVpciBkZWZpbml0aW9uLgorICA8L3BhcmE+IAorCQkJCQkJCQkJCQkJCQkgIAorICA8cGFyYT4gCisgICAgVGhlIGJhc2ljIHBsdWdpbiBzdHJ1Y3R1cmUgaGFzIHRoZSBmb2xsb3dpbmcgZmllbGRzOgorICA8L3BhcmE+IAorICA8cHJvZ3JhbWxpc3Rpbmc+Cit0eXBlZGVmIHN0cnVjdCBfR3N0UGx1Z2luICAgR3N0UGx1Z2luOworCitzdHJ1Y3QgX0dzdFBsdWdpbiB7CisgIGdjaGFyICpuYW1lOyAgICAgICAgICAgICAgICAgIC8qIG5hbWUgb2YgdGhlIHBsdWdpbiAqLworICBnY2hhciAqbG9uZ25hbWU7ICAgICAgICAgICAgICAvKiBsb25nIG5hbWUgb2YgcGx1Z2luICovCisgIGdjaGFyICpmaWxlbmFtZTsgICAgICAgICAgICAgIC8qIGZpbGVuYW1lIGl0IGNhbWUgZnJvbSAqLworCisgIEdMaXN0ICp0eXBlczsgICAgICAgICAgICAgICAgIC8qIGxpc3Qgb2YgdHlwZXMgcHJvdmlkZWQgKi8KKyAgZ2ludCBudW10eXBlczsKKyAgR0xpc3QgKmVsZW1lbnRzOyAgICAgICAgICAgICAgLyogbGlzdCBvZiBlbGVtZW50cyBwcm92aWRlZCAqLworICBnaW50IG51bWVsZW1lbnRzOworICBHTGlzdCAqYXV0b3BsdWdnZXJzOyAgICAgICAgICAvKiBsaXN0IG9mIGF1dG9wbHVnZ2VycyBwcm92aWRlZCAqLworICBnaW50IG51bWF1dG9wbHVnZ2VyczsKKworICBnYm9vbGVhbiBsb2FkZWQ7ICAgICAgICAgICAgICAvKiBpZiB0aGUgcGx1Z2luIGlzIGluIG1lbW9yeSAqLworfTsKKyAgPC9wcm9ncmFtbGlzdGluZz4KKworICA8cGFyYT4gCisgICAgWW91IGNhbiBxdWVyeSBhIDxjbGFzc25hbWU+R0xpc3Q8L2NsYXNzbmFtZT4gb2YgYXZhaWxhYmxlIHBsdWdpbnMgd2l0aCB0aGUKKyAgICBmdW5jdGlvbiA8ZnVuY3Rpb24+Z3N0X3JlZ2lzdHJ5X3Bvb2xfcGx1Z2luX2xpc3Q8L2Z1bmN0aW9uPiBhcyB0aGlzIGV4YW1wbGUKKyAgICBzaG93czoKKyAgPC9wYXJhPiAKKyAgPHByb2dyYW1saXN0aW5nPgorICAgIEdMaXN0ICpwbHVnaW5zOworICAgIAorICAgIHBsdWdpbnMgPSBnc3RfcmVnaXN0cnlfcG9vbF9wbHVnaW5fbGlzdCAoKTsKKworICAgIHdoaWxlIChwbHVnaW5zKSB7CisgICAgICBHc3RQbHVnaW4gKnBsdWdpbiA9IChHc3RQbHVnaW4gKilwbHVnaW5zLSZndDtkYXRhOworCisgICAgICBnX3ByaW50ICgicGx1Z2luOiAlc1xuIiwgZ3N0X3BsdWdpbl9nZXRfbmFtZSAocGx1Z2luKSk7CisKKyAgICAgIHBsdWdpbnMgPSBnX2xpc3RfbmV4dCAocGx1Z2lucyk7CisgICAgfQorICA8L3Byb2dyYW1saXN0aW5nPgorPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvYmluLWVsZW1lbnQtZ2hvc3QucG5nIGIvZG9jcy9tYW51YWwvYmluLWVsZW1lbnQtZ2hvc3QucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYTU1ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL21hbnVhbC9iaW4tZWxlbWVudC1naG9zdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvYmluLWVsZW1lbnQtbm9naG9zdC5wbmcgYi9kb2NzL21hbnVhbC9iaW4tZWxlbWVudC1ub2dob3N0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWRjYjY1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9tYW51YWwvYmluLWVsZW1lbnQtbm9naG9zdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvYmluLWVsZW1lbnQucG5nIGIvZG9jcy9tYW51YWwvYmluLWVsZW1lbnQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjN2Y4MGQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL21hbnVhbC9iaW4tZWxlbWVudC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvY2xvY2tzLnBuZyBiL2RvY3MvbWFudWFsL2Nsb2Nrcy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk2ZGU0ZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbWFudWFsL2Nsb2Nrcy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvY29tbXVuaWNhdGlvbi5wbmcgYi9kb2NzL21hbnVhbC9jb21tdW5pY2F0aW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDEzNmM2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9tYW51YWwvY29tbXVuaWNhdGlvbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvZmlsdGVyLWVsZW1lbnQtbXVsdGkucG5nIGIvZG9jcy9tYW51YWwvZmlsdGVyLWVsZW1lbnQtbXVsdGkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYmJjYjEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL21hbnVhbC9maWx0ZXItZWxlbWVudC1tdWx0aS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvZmlsdGVyLWVsZW1lbnQucG5nIGIvZG9jcy9tYW51YWwvZmlsdGVyLWVsZW1lbnQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMmVhMzIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL21hbnVhbC9maWx0ZXItZWxlbWVudC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvZ3N0cmVhbWVyLW92ZXJ2aWV3LnBuZyBiL2RvY3MvbWFudWFsL2dzdHJlYW1lci1vdmVydmlldy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc2MmFiMgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbWFudWFsL2dzdHJlYW1lci1vdmVydmlldy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvaGVsbG8td29ybGQucG5nIGIvZG9jcy9tYW51YWwvaGVsbG8td29ybGQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZjg3NDQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL21hbnVhbC9oZWxsby13b3JsZC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvaGlnaGxldmVsLWNvbXBvbmVudHMueG1sIGIvZG9jcy9tYW51YWwvaGlnaGxldmVsLWNvbXBvbmVudHMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNzEwMjUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL21hbnVhbC9oaWdobGV2ZWwtY29tcG9uZW50cy54bWwKQEAgLTAsMCArMSwzODMgQEAKKzxjaGFwdGVyIGlkPSJjaGFwdGVyLWNvbXBvbmVudHMiPgorICA8dGl0bGU+Q29tcG9uZW50czwvdGl0bGU+CisKKyAgPHBhcmE+CisgICAgJkdTdHJlYW1lcjsgaW5jbHVkZXMgc2V2ZXJhbCBoaWdoZXItbGV2ZWwgY29tcG9uZW50cyB0byBzaW1wbGlmeSBhbgorICAgIGFwcGxpY2F0aW9uIGRldmVsb3BlcidzIGxpZmUuIEFsbCBvZiB0aGUgY29tcG9uZW50cyBkaXNjdXNzZWQgaGVyZSAoZm9yIG5vdykgYXJlCisgICAgdGFyZ2V0dGVkIGF0IG1lZGlhIHBsYXliYWNrLiBUaGUgaWRlYSBvZiBlYWNoIG9mIHRoZXNlIGNvbXBvbmVudHMgaXMKKyAgICB0byBpbnRlZ3JhdGUgYXMgY2xvc2VseSBhcyBwb3NzaWJsZSB3aXRoIGEgJkdTdHJlYW1lcjsgcGlwZWxpbmUsIGJ1dAorICAgIHRvIGhpZGUgdGhlIGNvbXBsZXhpdHkgb2YgbWVkaWEgdHlwZSBkZXRlY3Rpb24gYW5kIHNldmVyYWwgb3RoZXIKKyAgICByYXRoZXIgY29tcGxleCB0b3BpY3MgdGhhdCBoYXZlIGJlZW4gZGlzY3Vzc2VkIGluIDx4cmVmCisgICAgbGlua2VuZD0icGFydC1hZHZhbmNlZCIvPi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgIFdlIGN1cnJlbnRseSByZWNvbW1lbmQgcGVvcGxlIHRvIHVzZSBlaXRoZXIgcGxheWJpbiAoc2VlIDx4cmVmCisgICAgbGlua2VuZD0ic2VjdGlvbi1jb21wb25lbnRzLXBsYXliaW4iLz4pIG9yIGRlY29kZWJpbiAoc2VlIDx4cmVmCisgICAgbGlua2VuZD0ic2VjdGlvbi1jb21wb25lbnRzLWRlY29kZWJpbiIvPiksIGRlcGVuZGluZyBvbiB0aGVpciBuZWVkcy4KKyAgICBQbGF5YmluIGlzIHRoZSByZWNvbW1lbmRlZCBzb2x1dGlvbiBmb3IgZXZlcnl0aGluZyByZWxhdGVkIHRvIHNpbXBsZQorICAgIHBsYXliYWNrIG9mIG1lZGlhIHRoYXQgc2hvdWxkIGp1c3Qgd29yay4gRGVjb2RlYmluIGlzIGEgbW9yZSBmbGV4aWJsZQorICAgIGF1dG9wbHVnZ2VyIHRoYXQgY291bGQgYmUgdXNlZCB0byBhZGQgbW9yZSBhZHZhbmNlZCBmZWF0dXJlcywgc3VjaAorICAgIGFzIHBsYXlsaXN0IHN1cHBvcnQsIGNyb3NzZmFkaW5nIG9mIGF1ZGlvIHRyYWNrcyBhbmQgc28gb24uIEl0cworICAgIHByb2dyYW1taW5nIGludGVyZmFjZSBpcyBtb3JlIGxvdy1sZXZlbCB0aGFuIHRoYXQgb2YgcGxheWJpbiwgdGhvdWdoLgorICA8L3BhcmE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWNvbXBvbmVudHMtcGxheWJpbiI+CisgICAgPHRpdGxlPlBsYXliaW48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBQbGF5YmluIGlzIGFuIGVsZW1lbnQgdGhhdCBjYW4gYmUgY3JlYXRlZCB1c2luZyB0aGUgc3RhbmRhcmQgJkdTdHJlYW1lcjsKKyAgICAgIEFQSSAoZS5nLiA8ZnVuY3Rpb24+Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgpPC9mdW5jdGlvbj4pLiBUaGUgZmFjdG9yeQorICAgICAgaXMgY29udmVuaWVudGx5IGNhbGxlZCA8cXVvdGU+cGxheWJpbjwvcXVvdGU+LiBCeSBiZWluZyBhCisgICAgICA8Y2xhc3NuYW1lPkdzdFBpcGVsaW5lPC9jbGFzc25hbWU+IChhbmQgdGh1cyBhCisgICAgICA8Y2xhc3NuYW1lPkdzdEVsZW1lbnQ8L2NsYXNzbmFtZT4pLCBwbGF5YmluIGF1dG9tYXRpY2FsbHkgc3VwcG9ydHMgYWxsCisgICAgICBvZiB0aGUgZmVhdHVyZXMgb2YgdGhpcyBjbGFzcywgaW5jbHVkaW5nIGVycm9yIGhhbmRsaW5nLCB0YWcgc3VwcG9ydCwKKyAgICAgIHN0YXRlIGhhbmRsaW5nLCBnZXR0aW5nIHN0cmVhbSBwb3NpdGlvbnMsIHNlZWtpbmcsIGFuZCBzbyBvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFNldHRpbmcgdXAgYSBwbGF5YmluIHBpcGVsaW5lIGlzIGFzIHNpbXBsZSBhcyBjcmVhdGluZyBhbiBpbnN0YW5jZSBvZgorICAgICAgdGhlIHBsYXliaW4gZWxlbWVudCwgc2V0dGluZyBhIGZpbGUgbG9jYXRpb24gdXNpbmcgdGhlCisgICAgICA8cXVvdGU+dXJpPC9xdW90ZT4gcHJvcGVydHkgb24gcGxheWJpbiwgYW5kIHRoZW4gc2V0dGluZyB0aGUgZWxlbWVudAorICAgICAgdG8gdGhlIDxjbGFzc25hbWU+R1NUX1NUQVRFX1BMQVlJTkc8L2NsYXNzbmFtZT4gc3RhdGUgKHRoZSBsb2NhdGlvbiBoYXMgdG8gYmUgYSB2YWxpZAorICAgICAgVVJJLCBzbyA8cXVvdGU+Jmx0O3Byb3RvY29sJmd0OzovLyZsdDtsb2NhdGlvbiZndDs8L3F1b3RlPiwgZS5nLgorICAgICAgZmlsZTovLy90bXAvbXkub2dnIG9yIGh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc3RyZWFtLm9nZykuIEludGVybmFsbHksCisgICAgICBwbGF5YmluIHdpbGwgc2V0IHVwIGEgcGlwZWxpbmUgdG8gcGxheWJhY2sgdGhlIG1lZGlhIGxvY2F0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxwcm9ncmFtbGlzdGluZz48IS0tIGV4YW1wbGUtYmVnaW4gcGxheWJpbi5jIGEgLS0+CisjaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OworPCEtLSBleGFtcGxlLWVuZCBwbGF5YmluLmMgYSAtLT4KK1suLiBteV9idXNfY2FsbGJhY2sgZ29lcyBoZXJlIC4uXTwhLS0gZXhhbXBsZS1iZWdpbiBwbGF5YmluLmMgYiAtLT48IS0tCitzdGF0aWMgZ2Jvb2xlYW4KK215X2J1c19jYWxsYmFjayAoR3N0QnVzICAgICAqYnVzLAorCQkgR3N0TWVzc2FnZSAqbWVzc2FnZSwKKwkJIGdwb2ludGVyICAgIGRhdGEpCit7CisgIEdNYWluTG9vcCAqbG9vcCA9IGRhdGE7CisKKyAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSkgeworICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6IHsKKyAgICAgIEdFcnJvciAqZXJyOworICAgICAgZ2NoYXIgKmRlYnVnOworCisgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobWVzc2FnZSwgJmFtcDtlcnIsICZhbXA7ZGVidWcpOworICAgICAgZ19wcmludCAoIkVycm9yOiAlc1xuIiwgZXJyLSZndDttZXNzYWdlKTsKKyAgICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKKyAgICAgIGdfZnJlZSAoZGVidWcpOworCisgICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKKyAgICAgIC8qIGVuZC1vZi1zdHJlYW0gKi8KKyAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIC8qIHVuaGFuZGxlZCBtZXNzYWdlICovCisgICAgICBicmVhazsKKyAgfQorCisgIC8qIHJlbW92ZSBtZXNzYWdlIGZyb20gdGhlIHF1ZXVlICovCisgIHJldHVybiBUUlVFOworfQorLS0+PCEtLSBleGFtcGxlLWVuZCBwbGF5YmluLmMgYiAtLT4KKzwhLS0gZXhhbXBsZS1iZWdpbiBwbGF5YmluLmMgYyAtLT4KK2dpbnQKK21haW4gKGdpbnQgICBhcmdjLAorICAgICAgZ2NoYXIgKmFyZ3ZbXSkKK3sKKyAgR01haW5Mb29wICpsb29wOworICBHc3RFbGVtZW50ICpwbGF5OworICBHc3RCdXMgKmJ1czsKKworICAvKiBpbml0IEdTdHJlYW1lciAqLworICBnc3RfaW5pdCAoJmFtcDthcmdjLCAmYW1wO2FyZ3YpOworICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7CisKKyAgLyogbWFrZSBzdXJlIHdlIGhhdmUgYSBVUkkgKi8KKyAgaWYgKGFyZ2MgIT0gMikgeworICAgIGdfcHJpbnQgKCJVc2FnZTogJXMgJmx0O1VSSSZndDtcbiIsIGFyZ3ZbMF0pOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIC8qIHNldCB1cCAqLworICBwbGF5ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicGxheWJpbiIsICJwbGF5Iik7CisgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHBsYXkpLCAidXJpIiwgYXJndlsxXSwgTlVMTCk7CisKKyAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKEdTVF9QSVBFTElORSAocGxheSkpOworICBnc3RfYnVzX2FkZF93YXRjaCAoYnVzLCBteV9idXNfY2FsbGJhY2ssIGxvb3ApOworICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOworCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGxheSwgR1NUX1NUQVRFX1BMQVlJTkcpOworCisgIC8qIG5vdyBydW4gKi8KKyAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKKworICAvKiBhbHNvIGNsZWFuIHVwICovCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGxheSwgR1NUX1NUQVRFX05VTEwpOworICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChwbGF5KSk7CisKKyAgcmV0dXJuIDA7Cit9CisgICAgPCEtLSBleGFtcGxlLWVuZCBwbGF5YmluLmMgYyAtLT48L3Byb2dyYW1saXN0aW5nPgorCisgICAgPHBhcmE+CisgICAgICBQbGF5YmluIGhhcyBzZXZlcmFsIGZlYXR1cmVzIHRoYXQgaGF2ZSBiZWVuIGRpc2N1c3NlZCBwcmV2aW91c2x5OgorICAgIDwvcGFyYT4KKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBTZXR0YWJsZSB2aWRlbyBhbmQgYXVkaW8gb3V0cHV0ICh1c2luZyB0aGUgPHF1b3RlPnZpZGVvLXNpbms8L3F1b3RlPgorICAgICAgICAgIGFuZCA8cXVvdGU+YXVkaW8tc2luazwvcXVvdGU+IHByb3BlcnRpZXMpLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBNb3N0bHkgY29udHJvbGxhYmxlIGFuZCB0cmFja2FibGUgYXMgYQorICAgICAgICAgIDxjbGFzc25hbWU+R3N0RWxlbWVudDwvY2xhc3NuYW1lPiwgaW5jbHVkaW5nIGVycm9yIGhhbmRsaW5nLCBlb3MKKyAgICAgICAgICBoYW5kbGluZywgdGFnIGhhbmRsaW5nLCBzdGF0ZSBoYW5kbGluZyAodGhyb3VnaCB0aGUKKyAgICAgICAgICA8Y2xhc3NuYW1lPkdzdEJ1czwvY2xhc3NuYW1lPiksIG1lZGlhIHBvc2l0aW9uIGhhbmRsaW5nIGFuZAorICAgICAgICAgIHNlZWtpbmcuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEJ1ZmZlcnMgbmV0d29yay1zb3VyY2VzLCB3aXRoIGJ1ZmZlciBmdWxsbmVzcyBub3RpZmljYXRpb25zIGJlaW5nCisgICAgICAgICAgcGFzc2VkIHRocm91Z2ggdGhlIDxjbGFzc25hbWU+R3N0QnVzPC9jbGFzc25hbWU+LgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBTdXBwb3J0cyB2aXN1YWxpemF0aW9ucyBmb3IgYXVkaW8tb25seSBtZWRpYS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgU3VwcG9ydHMgc3VidGl0bGVzLCBib3RoIGluIHRoZSBtZWRpYSBhcyB3ZWxsIGFzIGZyb20gc2VwYXJhdGUKKyAgICAgICAgICBmaWxlcy4gRm9yIHNlcGFyYXRlIHN1YnRpdGxlIGZpbGVzLCB1c2UgdGhlIDxxdW90ZT5zdWJ1cmk8L3F1b3RlPgorICAgICAgICAgIHByb3BlcnR5LgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBTdXBwb3J0cyBzdHJlYW0gc2VsZWN0aW9uIGFuZCBkaXNhYmxpbmcuIElmIHlvdXIgbWVkaWEgaGFzCisgICAgICAgICAgbXVsdGlwbGUgYXVkaW8gb3Igc3VidGl0bGUgdHJhY2tzLCB5b3UgY2FuIGR5bmFtaWNhbGx5IGNob29zZQorICAgICAgICAgIHdoaWNoIG9uZSB0byBwbGF5IGJhY2ssIG9yIGRlY2lkZSB0byB0dXJuIGl0IG9mZiBhbHRvZ2V0aGVyCisgICAgICAgICAgKHdoaWNoIGlzIGVzcGVjaWFsbHkgdXNlZnVsIHRvIHR1cm4gb2ZmIHN1YnRpdGxlcykuIEZvciBlYWNoCisgICAgICAgICAgb2YgdGhvc2UsIHVzZSB0aGUgPHF1b3RlPmN1cnJlbnQtdGV4dDwvcXVvdGU+IGFuZCBvdGhlciByZWxhdGVkCisgICAgICAgICAgcHJvcGVydGllcy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8cGFyYT4KKyAgICAgIEZvciBjb252ZW5pZW5jZSwgaXQgaXMgcG9zc2libGUgdG8gdGVzdCA8cXVvdGU+cGxheWJpbjwvcXVvdGU+IG9uCisgICAgICB0aGUgY29tbWFuZGxpbmUsIHVzaW5nIHRoZSBjb21tYW5kIDxxdW90ZT5nc3QtbGF1bmNoLTAuMTAgcGxheWJpbgorICAgICAgdXJpPWZpbGU6Ly8vcGF0aC90by9maWxlPC9xdW90ZT4uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgTmV3IGFwcGxpY2F0aW9ucyBzaG91bGQgdXNlIHBsYXliaW4yIGluc3RlYWQgb2YgdGhlIG9sZCBwbGF5YmluLgorICAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tY29tcG9uZW50cy1kZWNvZGViaW4iPgorICAgIDx0aXRsZT5EZWNvZGViaW48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBEZWNvZGViaW4gaXMgdGhlIGFjdHVhbCBhdXRvcGx1Z2dlciBiYWNrZW5kIG9mIHBsYXliaW4sIHdoaWNoIHdhcworICAgICAgZGlzY3Vzc2VkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLiBEZWNvZGViaW4gd2lsbCwgaW4gc2hvcnQsIGFjY2VwdAorICAgICAgaW5wdXQgZnJvbSBhIHNvdXJjZSB0aGF0IGlzIGxpbmtlZCB0byBpdHMgc2lua3BhZCBhbmQgd2lsbCB0cnkgdG8KKyAgICAgIGRldGVjdCB0aGUgbWVkaWEgdHlwZSBjb250YWluZWQgaW4gdGhlIHN0cmVhbSwgYW5kIHNldCB1cCBkZWNvZGVyCisgICAgICByb3V0aW5lcyBmb3IgZWFjaCBvZiB0aG9zZS4gSXQgd2lsbCBhdXRvbWF0aWNhbGx5IHNlbGVjdCBkZWNvZGVycy4KKyAgICAgIEZvciBlYWNoIGRlY29kZWQgc3RyZWFtLCBpdCB3aWxsIGVtaXQgdGhlIDxxdW90ZT5uZXctZGVjb2RlZC1wYWQ8L3F1b3RlPgorICAgICAgc2lnbmFsLCB0byBsZXQgdGhlIGNsaWVudCBrbm93IGFib3V0IHRoZSBuZXdseSBmb3VuZCBkZWNvZGVkIHN0cmVhbS4KKyAgICAgIEZvciB1bmtub3duIHN0cmVhbXMgKHdoaWNoIG1pZ2h0IGJlIHRoZSB3aG9sZSBzdHJlYW0pLCBpdCB3aWxsIGVtaXQKKyAgICAgIHRoZSA8cXVvdGU+dW5rbm93bi10eXBlPC9xdW90ZT4gc2lnbmFsLiBUaGUgYXBwbGljYXRpb24gaXMgdGhlbgorICAgICAgcmVzcG9uc2libGUgZm9yIHJlcG9ydGluZyB0aGUgZXJyb3IgdG8gdGhlIHVzZXIuCisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz48IS0tIGV4YW1wbGUtYmVnaW4gZGVjb2RlYmluLmMgYSAtLT4KKyNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Cis8IS0tIGV4YW1wbGUtZW5kIGRlY29kZWJpbi5jIGEgLS0+CitbLi4gbXlfYnVzX2NhbGxiYWNrIGdvZXMgaGVyZSAuLl08IS0tIGV4YW1wbGUtYmVnaW4gZGVjb2RlYmluLmMgYiAtLT48IS0tCitzdGF0aWMgZ2Jvb2xlYW4KK215X2J1c19jYWxsYmFjayAoR3N0QnVzICAgICAqYnVzLAorCQkgR3N0TWVzc2FnZSAqbWVzc2FnZSwKKwkJIGdwb2ludGVyICAgIGRhdGEpCit7CisgIEdNYWluTG9vcCAqbG9vcCA9IGRhdGE7CisKKyAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSkgeworICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6IHsKKyAgICAgIEdFcnJvciAqZXJyOworICAgICAgZ2NoYXIgKmRlYnVnOworCisgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobWVzc2FnZSwgJmFtcDtlcnIsICZhbXA7ZGVidWcpOworICAgICAgZ19wcmludCAoIkVycm9yOiAlc1xuIiwgZXJyLSZndDttZXNzYWdlKTsKKyAgICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKKyAgICAgIGdfZnJlZSAoZGVidWcpOworCisgICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKKyAgICAgIC8qIGVuZC1vZi1zdHJlYW0gKi8KKyAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIC8qIHVuaGFuZGxlZCBtZXNzYWdlICovCisgICAgICBicmVhazsKKyAgfQorCisgIC8qIHJlbW92ZSBtZXNzYWdlIGZyb20gdGhlIHF1ZXVlICovCisgIHJldHVybiBUUlVFOworfQorLS0+PCEtLSBleGFtcGxlLWVuZCBkZWNvZGViaW4uYyBiIC0tPgorPCEtLSBleGFtcGxlLWJlZ2luIGRlY29kZWJpbi5jIGMgLS0+CitHc3RFbGVtZW50ICpwaXBlbGluZSwgKmF1ZGlvOworCitzdGF0aWMgdm9pZAorY2JfbmV3cGFkIChHc3RFbGVtZW50ICpkZWNvZGViaW4sCisJICAgR3N0UGFkICAgICAqcGFkLAorCSAgIGdib29sZWFuICAgIGxhc3QsCisJICAgZ3BvaW50ZXIgICAgZGF0YSkKK3sKKyAgR3N0Q2FwcyAqY2FwczsKKyAgR3N0U3RydWN0dXJlICpzdHI7CisgIEdzdFBhZCAqYXVkaW9wYWQ7CisKKyAgLyogb25seSBsaW5rIG9uY2UgKi8KKyAgYXVkaW9wYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoYXVkaW8sICJzaW5rIik7CisgIGlmIChHU1RfUEFEX0lTX0xJTktFRCAoYXVkaW9wYWQpKSB7CisgICAgZ19vYmplY3RfdW5yZWYgKGF1ZGlvcGFkKTsKKyAgICByZXR1cm47CisgIH0KKworICAvKiBjaGVjayBtZWRpYSB0eXBlICovCisgIGNhcHMgPSBnc3RfcGFkX2dldF9jYXBzIChwYWQsIE5VTEwpOworICBzdHIgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKKyAgaWYgKCFnX3N0cnJzdHIgKGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKHN0ciksICJhdWRpbyIpKSB7CisgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKGF1ZGlvcGFkKTsKKyAgICByZXR1cm47CisgIH0KKyAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOworCisgIC8qIGxpbmsnbidwbGF5ICovCisgIGdzdF9wYWRfbGluayAocGFkLCBhdWRpb3BhZCk7CisKKyAgZ19vYmplY3RfdW5yZWYgKGF1ZGlvcGFkKTsKK30KKworZ2ludAorbWFpbiAoZ2ludCAgIGFyZ2MsCisgICAgICBnY2hhciAqYXJndltdKQoreworICBHTWFpbkxvb3AgKmxvb3A7CisgIEdzdEVsZW1lbnQgKnNyYywgKmRlYywgKmNvbnYsICpzaW5rOworICBHc3RQYWQgKmF1ZGlvcGFkOworICBHc3RCdXMgKmJ1czsKKworICAvKiBpbml0IEdTdHJlYW1lciAqLworICBnc3RfaW5pdCAoJmFtcDthcmdjLCAmYW1wO2FyZ3YpOworICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7CisKKyAgLyogbWFrZSBzdXJlIHdlIGhhdmUgaW5wdXQgKi8KKyAgaWYgKGFyZ2MgIT0gMikgeworICAgIGdfcHJpbnQgKCJVc2FnZTogJXMgJmx0O2ZpbGVuYW1lJmd0O1xuIiwgYXJndlswXSk7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgLyogc2V0dXAgKi8KKyAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKKworICBidXMgPSBnc3RfcGlwZWxpbmVfZ2V0X2J1cyAoR1NUX1BJUEVMSU5FIChwaXBlbGluZSkpOworICBnc3RfYnVzX2FkZF93YXRjaCAoYnVzLCBteV9idXNfY2FsbGJhY2ssIGxvb3ApOworICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOworCisgIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZpbGVzcmMiLCAic291cmNlIik7CisgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJsb2NhdGlvbiIsIGFyZ3ZbMV0sIE5VTEwpOworICBkZWMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJkZWNvZGViaW4iLCAiZGVjb2RlciIpOworICBnX3NpZ25hbF9jb25uZWN0IChkZWMsICJuZXctZGVjb2RlZC1wYWQiLCBHX0NBTExCQUNLIChjYl9uZXdwYWQpLCBOVUxMKTsKKyAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMsIGRlYywgTlVMTCk7CisgIGdzdF9lbGVtZW50X2xpbmsgKHNyYywgZGVjKTsKKworICAvKiBjcmVhdGUgYXVkaW8gb3V0cHV0ICovCisgIGF1ZGlvID0gZ3N0X2Jpbl9uZXcgKCJhdWRpb2JpbiIpOworICBjb252ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW9jb252ZXJ0IiwgImFjb252Iik7CisgIGF1ZGlvcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGNvbnYsICJzaW5rIik7CisgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhbHNhc2luayIsICJzaW5rIik7CisgIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKGF1ZGlvKSwgY29udiwgc2luaywgTlVMTCk7CisgIGdzdF9lbGVtZW50X2xpbmsgKGNvbnYsIHNpbmspOworICBnc3RfZWxlbWVudF9hZGRfcGFkIChhdWRpbywKKyAgICAgIGdzdF9naG9zdF9wYWRfbmV3ICgic2luayIsIGF1ZGlvcGFkKSk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGF1ZGlvcGFkKTsKKyAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgYXVkaW8pOworCisgIC8qIHJ1biAqLworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7CisgIGdfbWFpbl9sb29wX3J1biAobG9vcCk7CisKKyAgLyogY2xlYW51cCAqLworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKHBpcGVsaW5lKSk7CisKKyAgcmV0dXJuIDA7Cit9CisgICAgPCEtLSBleGFtcGxlLWVuZCBkZWNvZGViaW4uYyBjIC0tPjwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgICA8cGFyYT4KKyAgICAgIERlY29kZWJpbiwgc2ltaWxhciB0byBwbGF5YmluLCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGZlYXR1cmVzOgorICAgIDwvcGFyYT4KKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBDYW4gZGVjb2RlIGFuIHVubGltaXRlZCBudW1iZXIgb2YgY29udGFpbmVkIHN0cmVhbXMgdG8gZGVjb2RlZAorICAgICAgICAgIG91dHB1dCBwYWRzLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJcyBoYW5kbGVkIGFzIGEgPGNsYXNzbmFtZT5Hc3RFbGVtZW50PC9jbGFzc25hbWU+IGluIGFsbCB3YXlzLAorICAgICAgICAgIGluY2x1ZGluZyB0YWcgb3IgZXJyb3IgZm9yd2FyZGluZyBhbmQgc3RhdGUgaGFuZGxpbmcuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPHBhcmE+CisgICAgICBBbHRob3VnaCBkZWNvZGViaW4gaXMgYSBnb29kIGF1dG9wbHVnZ2VyLCB0aGVyZSdzIGEgd2hvbGUgbG90IG9mCisgICAgICB0aGluZ3MgdGhhdCBpdCBkb2VzIG5vdCBkbyBhbmQgaXMgbm90IGludGVuZGVkIHRvIGRvOgorICAgIDwvcGFyYT4KKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUYWtpbmcgY2FyZSBvZiBpbnB1dCBzdHJlYW1zIHdpdGggYSBrbm93biBtZWRpYSB0eXBlIChlLmcuIGEgRFZELAorICAgICAgICAgIGFuIGF1ZGlvLUNEIG9yIHN1Y2gpLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBTZWxlY3Rpb24gb2Ygc3RyZWFtcyAoZS5nLiB3aGljaCBhdWRpbyB0cmFjayB0byBwbGF5IGluIGNhc2Ugb2YKKyAgICAgICAgICBtdWx0aS1sYW5ndWFnZSBtZWRpYSBzdHJlYW1zKS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgT3ZlcmxheWluZyBzdWJ0aXRsZXMgb3ZlciBhIGRlY29kZWQgdmlkZW8gc3RyZWFtLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDxwYXJhPgorICAgICAgRGVjb2RlYmluIGNhbiBiZSBlYXNpbHkgdGVzdGVkIG9uIHRoZSBjb21tYW5kbGluZSwgZS5nLiBieSB1c2luZyB0aGUKKyAgICAgIGNvbW1hbmQgPGNvbW1hbmQ+Z3N0LWxhdW5jaC0wLjEwIGZpbGVzcmMgbG9jYXRpb249ZmlsZS5vZ2cgISBkZWNvZGViaW4KKyAgICAgICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSAhIGF1dG9hdWRpb3Npbms8L2NvbW1hbmQ+LgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIE5ldyBhcHBsaWNhdGlvbnMgc2hvdWxkIHVzZSBkZWNvZGViaW4yIGluc3RlYWQgb2YgdGhlIG9sZCBkZWNvZGViaW4uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgVGhlIHVyaWRlY29kZWJpbiBlbGVtZW50IGlzIHZlcnkgc2ltaWxhciB0byBkZWNvZGViaW4yLCBvbmx5IHRoYXQgaXQKKyAgICAgIGF1dG9tYXRpY2FsbHkgcGx1Z3MgYSBzb3VyY2UgcGx1Z2luIGJhc2VkIG9uIHRoZSBwcm90b2NvbCBvZiB0aGUgVVJJCisgICAgICBnaXZlbi4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2hpZ2hsZXZlbC14bWwueG1sIGIvZG9jcy9tYW51YWwvaGlnaGxldmVsLXhtbC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMzMDYxNgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbWFudWFsL2hpZ2hsZXZlbC14bWwueG1sCkBAIC0wLDAgKzEsMTcgQEAKKzxjaGFwdGVyIGlkPSJjaGFwdGVyLXhtbCI+CisgIDx0aXRsZT5YTUwgaW4gPGFwcGxpY2F0aW9uPkdTdHJlYW1lcjwvYXBwbGljYXRpb24+IChkZXByZWNhdGVkKTwvdGl0bGU+CisgIDxwYXJhPiAKKyAgICA8YXBwbGljYXRpb24+R1N0cmVhbWVyPC9hcHBsaWNhdGlvbj4gdXNlZCB0byBwcm92aWRlIGZ1bmN0aW9ucyB0bworICAgIHNhdmUgcGlwZWxpbmUgZGVmaW5pdGlvbnMgaW50byBYTUwgZm9ybWF0IGFuZCBsYXRlciByZXN0b3JlIHRoZW0KKyAgICBhZ2FpbiBmcm9tIFhNTC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgIFRoaXMgbmV2ZXIgcmVhbGx5IHdvcmtlZCBwcm9wZXJseSBmb3IgYWxsIGJ1dCB0aGUgbW9zdCBzaW1wbGUgdXNlIGNhc2VzCisgICAgdGhvdWdoLCBhbmQgaXMgYWxzbyBwcmV0dHkgbXVjaCBpbXBvc3NpYmxlIHRvIG1ha2Ugd29yayBjb3JyZWN0bHkgaW4gYQorICAgIHVzZWZ1bCB3YXkgZHVlIHRvIHRoZSBkeW5hbWljIG5hdHVyZSBvZiBhbG1vc3QgYWxsIG5vbi10cml2aWFsIEdTdHJlYW1lcgorICAgIHBpcGVsaW5lcy4gQ29uc2VxdWVudGx5LCB0aGlzIEFQSSBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCB3aWxsIGJlCisgICAgcmVtb3ZlZCBhdCBzb21lIHBvaW50LiBEb24ndCB1c2UgaXQuCisgIDwvcGFyYT4KKworPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvaW50cm8tYmFzaWNzLnhtbCBiL2RvY3MvbWFudWFsL2ludHJvLWJhc2ljcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBjMjgwNgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbWFudWFsL2ludHJvLWJhc2ljcy54bWwKQEAgLTAsMCArMSwxNTggQEAKKzxjaGFwdGVyIGlkPSJjaGFwdGVyLWludHJvLWJhc2ljcyI+CisgIDx0aXRsZT5Gb3VuZGF0aW9uczwvdGl0bGU+CisgIDxwYXJhPjwhLS0gc3luY2hyb25pemUgd2l0aCBQV0cgLS0+CisgICAgVGhpcyBjaGFwdGVyIG9mIHRoZSBndWlkZSBpbnRyb2R1Y2VzIHRoZSBiYXNpYyBjb25jZXB0cyBvZiAmR1N0cmVhbWVyOy4KKyAgICBVbmRlcnN0YW5kaW5nIHRoZXNlIGNvbmNlcHRzIHdpbGwgYmUgaW1wb3J0YW50IGluIHJlYWRpbmcgYW55IG9mIHRoZQorICAgIHJlc3Qgb2YgdGhpcyBndWlkZSwgYWxsIG9mIHRoZW0gYXNzdW1lIHVuZGVyc3RhbmRpbmcgb2YgdGhlc2UgYmFzaWMKKyAgICBjb25jZXB0cy4KKyAgPC9wYXJhPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1pbnRyby1iYXNpY3MtZWxlbWVudHMiPgorICAgIDx0aXRsZT5FbGVtZW50czwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBBbiA8ZW1waGFzaXM+ZWxlbWVudDwvZW1waGFzaXM+IGlzIHRoZSBtb3N0IGltcG9ydGFudCBjbGFzcyBvZiBvYmplY3RzCisgICAgICBpbiAmR1N0cmVhbWVyOy4gWW91IHdpbGwgdXN1YWxseSBjcmVhdGUgYSBjaGFpbiBvZiBlbGVtZW50cyBsaW5rZWQKKyAgICAgIHRvZ2V0aGVyIGFuZCBsZXQgZGF0YSBmbG93IHRocm91Z2ggdGhpcyBjaGFpbiBvZiBlbGVtZW50cy4gQW4gZWxlbWVudAorICAgICAgaGFzIG9uZSBzcGVjaWZpYyBmdW5jdGlvbiwgd2hpY2ggY2FuIGJlIHRoZSByZWFkaW5nIG9mIGRhdGEgZnJvbSBhCisgICAgICBmaWxlLCBkZWNvZGluZyBvZiB0aGlzIGRhdGEgb3Igb3V0cHV0dGluZyB0aGlzIGRhdGEgdG8geW91ciBzb3VuZAorICAgICAgY2FyZCAob3IgYW55dGhpbmcgZWxzZSkuIEJ5IGNoYWluaW5nIHRvZ2V0aGVyIHNldmVyYWwgc3VjaCBlbGVtZW50cywKKyAgICAgIHlvdSBjcmVhdGUgYSA8ZW1waGFzaXM+cGlwZWxpbmU8L2VtcGhhc2lzPiB0aGF0IGNhbiBkbyBhIHNwZWNpZmljIHRhc2ssCisgICAgICBmb3IgZXhhbXBsZSBtZWRpYSBwbGF5YmFjayBvciBjYXB0dXJlLiAmR1N0cmVhbWVyOyBzaGlwcyB3aXRoIGEgbGFyZ2UKKyAgICAgIGNvbGxlY3Rpb24gb2YgZWxlbWVudHMgYnkgZGVmYXVsdCwgbWFraW5nIHRoZSBkZXZlbG9wbWVudCBvZiBhIGxhcmdlCisgICAgICB2YXJpZXR5IG9mIG1lZGlhIGFwcGxpY2F0aW9ucyBwb3NzaWJsZS4gSWYgbmVlZGVkLCB5b3UgY2FuIGFsc28gd3JpdGUKKyAgICAgIG5ldyBlbGVtZW50cy4gVGhhdCB0b3BpYyBpcyBleHBsYWluZWQgaW4gZ3JlYXQgZGVhbCBpbiB0aGUgJkdzdFBXRzsuCisgICAgPC9wYXJhPgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1pbnRyby1iYXNpY3MtcGFkcyI+CisgICAgPHRpdGxlPlBhZHM8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgPGVtcGhhc2lzPlBhZHM8L2VtcGhhc2lzPiBhcmUgZWxlbWVudCdzIGlucHV0IGFuZCBvdXRwdXQsIHdoZXJlCisgICAgICB5b3UgY2FuIGNvbm5lY3Qgb3RoZXIgZWxlbWVudHMuIFRoZXkgYXJlIHVzZWQgdG8gbmVnb3RpYXRlIGxpbmtzIGFuZAorICAgICAgZGF0YSBmbG93CisgICAgICBiZXR3ZWVuIGVsZW1lbnRzIGluICZHU3RyZWFtZXI7LiBBIHBhZCBjYW4gYmUgdmlld2VkIGFzIGEKKyAgICAgIDxxdW90ZT5wbHVnPC9xdW90ZT4gb3IgPHF1b3RlPnBvcnQ8L3F1b3RlPiBvbiBhbiBlbGVtZW50IHdoZXJlCisgICAgICBsaW5rcyBtYXkgYmUgbWFkZSB3aXRoIG90aGVyIGVsZW1lbnRzLCBhbmQgdGhyb3VnaCB3aGljaCBkYXRhIGNhbgorICAgICAgZmxvdyB0byBvciBmcm9tIHRob3NlIGVsZW1lbnRzLiBQYWRzIGhhdmUgc3BlY2lmaWMgZGF0YSBoYW5kbGluZworICAgICAgY2FwYWJpbGl0aWVzOiBhIHBhZCBjYW4gcmVzdHJpY3QgdGhlIHR5cGUgb2YgZGF0YSB0aGF0IGZsb3dzCisgICAgICB0aHJvdWdoIGl0LiBMaW5rcyBhcmUgb25seSBhbGxvd2VkIGJldHdlZW4gdHdvIHBhZHMgd2hlbiB0aGUKKyAgICAgIGFsbG93ZWQgZGF0YSB0eXBlcyBvZiB0aGUgdHdvIHBhZHMgYXJlIGNvbXBhdGlibGUuIERhdGEgdHlwZXMgYXJlCisgICAgICBuZWdvdGlhdGVkIGJldHdlZW4gcGFkcyB1c2luZyBhIHByb2Nlc3MgY2FsbGVkIDxlbXBoYXNpcz5jYXBzCisgICAgICBuZWdvdGlhdGlvbjwvZW1waGFzaXM+LiBEYXRhIHR5cGVzIGFyZSBkZXNjcmliZWQgYXMgYQorICAgICAgPGNsYXNzbmFtZT5Hc3RDYXBzPC9jbGFzc25hbWU+LgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIEFuIGFuYWxvZ3kgbWF5IGJlIGhlbHBmdWwgaGVyZS4gQSBwYWQgaXMgc2ltaWxhciB0byBhIHBsdWcgb3IgamFjayBvbiBhCisgICAgICBwaHlzaWNhbCBkZXZpY2UuIENvbnNpZGVyLCBmb3IgZXhhbXBsZSwgYSBob21lIHRoZWF0ZXIgc3lzdGVtIGNvbnNpc3RpbmcKKyAgICAgIG9mIGFuIGFtcGxpZmllciwgYSBEVkQgcGxheWVyLCBhbmQgYSAoc2lsZW50KSB2aWRlbyBwcm9qZWN0b3IuIExpbmtpbmcKKyAgICAgIHRoZSBEVkQgcGxheWVyIHRvIHRoZSBhbXBsaWZpZXIgaXMgYWxsb3dlZCBiZWNhdXNlIGJvdGggZGV2aWNlcyBoYXZlIGF1ZGlvCisgICAgICBqYWNrcywgYW5kIGxpbmtpbmcgdGhlIHByb2plY3RvciB0byB0aGUgRFZEIHBsYXllciBpcyBhbGxvd2VkIGJlY2F1c2UKKyAgICAgIGJvdGggZGV2aWNlcyBoYXZlIGNvbXBhdGlibGUgdmlkZW8gamFja3MuIExpbmtzIGJldHdlZW4gdGhlCisgICAgICBwcm9qZWN0b3IgYW5kIHRoZSBhbXBsaWZpZXIgbWF5IG5vdCBiZSBtYWRlIGJlY2F1c2UgdGhlIHByb2plY3RvciBhbmQKKyAgICAgIGFtcGxpZmllciBoYXZlIGRpZmZlcmVudCB0eXBlcyBvZiBqYWNrcy4gUGFkcyBpbiAmR1N0cmVhbWVyOyBzZXJ2ZSB0aGUKKyAgICAgIHNhbWUgcHVycG9zZSBhcyB0aGUgamFja3MgaW4gdGhlIGhvbWUgdGhlYXRlciBzeXN0ZW0uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgRm9yIHRoZSBtb3N0IHBhcnQsIGFsbCBkYXRhIGluICZHU3RyZWFtZXI7IGZsb3dzIG9uZSB3YXkgdGhyb3VnaCBhIGxpbmsKKyAgICAgIGJldHdlZW4gZWxlbWVudHMuIERhdGEgZmxvd3Mgb3V0IG9mIG9uZSBlbGVtZW50IHRocm91Z2ggb25lIG9yIG1vcmUKKyAgICAgIDxlbXBoYXNpcz5zb3VyY2UgcGFkczwvZW1waGFzaXM+LCBhbmQgZWxlbWVudHMgYWNjZXB0IGluY29taW5nIGRhdGEKKyAgICAgIHRocm91Z2ggb25lIG9yIG1vcmUgPGVtcGhhc2lzPnNpbmsgcGFkczwvZW1waGFzaXM+LiBTb3VyY2UgYW5kIHNpbmsKKyAgICAgIGVsZW1lbnRzIGhhdmUgb25seSBzb3VyY2UgYW5kIHNpbmsgcGFkcywgcmVzcGVjdGl2ZWx5LiBEYXRhIHVzdWFsbHkKKyAgICAgIG1lYW5zIGJ1ZmZlcnMgKGRlc2NyaWJlZCBieSB0aGUgPHVsaW5rIHR5cGU9Imh0dHAiCisgICAgICB1cmw9IiZVUkxBUEk7Z3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sIj48Y2xhc3NuYW1lPkdzdEJ1ZmZlcgorICAgICAgPC9jbGFzc25hbWU+PC91bGluaz4gb2JqZWN0KSBhbmQgZXZlbnRzIChkZXNjcmliZWQgYnkgdGhlIDx1bGluaworICAgICAgdHlwZT0iaHR0cCIgdXJsPSImVVJMQVBJO2dzdHJlYW1lci1Hc3RFdmVudC5odG1sIj48Y2xhc3NuYW1lPgorICAgICAgR3N0RXZlbnQ8L2NsYXNzbmFtZT48L3VsaW5rPiBvYmplY3QpLgorICAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24taW50cm8tYmFzaWNzLWJpbnMiPgorICAgIDx0aXRsZT5CaW5zIGFuZCBwaXBlbGluZXM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBBIDxlbXBoYXNpcz5iaW48L2VtcGhhc2lzPiBpcyBhIGNvbnRhaW5lciBmb3IgYSBjb2xsZWN0aW9uIG9mIGVsZW1lbnRzLgorICAgICAgQSA8ZW1waGFzaXM+cGlwZWxpbmU8L2VtcGhhc2lzPiBpcyBhIHNwZWNpYWwgc3VidHlwZSBvZiBhIGJpbiB0aGF0IGFsbG93cyBleGVjdXRpb24gb2YgYWxsCisgICAgICBvZiBpdHMgY29udGFpbmVkIGNoaWxkIGVsZW1lbnRzLiBTaW5jZSBiaW5zIGFyZSBzdWJjbGFzc2VzIG9mIGVsZW1lbnRzCisgICAgICB0aGVtc2VsdmVzLCB5b3UgY2FuIG1vc3RseSBjb250cm9sIGEgYmluIGFzIGlmIGl0IHdlcmUgYW4gZWxlbWVudCwKKyAgICAgIHRoZXJlYnkgYWJzdHJhY3RpbmcgYXdheSBhIGxvdCBvZiBjb21wbGV4aXR5IGZvciB5b3VyIGFwcGxpY2F0aW9uLiBZb3UKKyAgICAgIGNhbiwgZm9yIGV4YW1wbGUgY2hhbmdlIHN0YXRlIG9uIGFsbCBlbGVtZW50cyBpbiBhIGJpbiBieSBjaGFuZ2luZyB0aGUKKyAgICAgIHN0YXRlIG9mIHRoYXQgYmluIGl0c2VsZi4gQmlucyBhbHNvIGZvcndhcmQgYnVzIG1lc3NhZ2VzIGZyb20gdGhlaXIKKyAgICAgIGNvbnRhaW5lZCBjaGlsZHJlbiAoc3VjaCBhcyBlcnJvciBtZXNzYWdlcywgdGFnIG1lc3NhZ2VzIG9yIEVPUyBtZXNzYWdlcykuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgQSA8ZW1waGFzaXM+cGlwZWxpbmU8L2VtcGhhc2lzPiBpcyBhIHRvcC1sZXZlbCBiaW4uIEFzIHlvdSBzZXQgaXQgdG8gUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUsCisgICAgICBkYXRhIGZsb3cgd2lsbCBzdGFydCBhbmQgbWVkaWEgcHJvY2Vzc2luZyB3aWxsIHRha2UgcGxhY2UuIE9uY2Ugc3RhcnRlZCwKKyAgICAgIHBpcGVsaW5lcyB3aWxsIHJ1biBpbiBhIHNlcGFyYXRlIHRocmVhZCB1bnRpbCB5b3Ugc3RvcCB0aGVtIG9yIHRoZSBlbmQKKyAgICAgIG9mIHRoZSBkYXRhIHN0cmVhbSBpcyByZWFjaGVkLgorICAgIDwvcGFyYT4KKworICAgIDxmaWd1cmUgZmxvYXQ9IjEiIGlkPSJzZWN0aW9uLXBpcGVsaW5lLWltZyI+CisgICAgICA8dGl0bGU+JkdTdHJlYW1lcjsgcGlwZWxpbmUgZm9yIGEgc2ltcGxlIG9nZyBwbGF5ZXI8L3RpdGxlPgorICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICA8aW1hZ2VvYmplY3Q+CisgICAgICAgICAgPGltYWdlZGF0YSBzY2FsZT0iNzUiIGZpbGVyZWY9ImltYWdlcy9zaW1wbGUtcGxheWVyLiZpbWFnZTsiIGZvcm1hdD0iJklNQUdFOyIgLz4KKyAgICAgICAgPC9pbWFnZW9iamVjdD4KKyAgICAgIDwvbWVkaWFvYmplY3Q+ICAKKyAgICA8L2ZpZ3VyZT4KKworICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1pbnRyby1iYXNpY3MtY29tbXVuaWNhdGlvbiI+CisgICAgPHRpdGxlPkNvbW11bmljYXRpb248L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAmR1N0cmVhbWVyOyBwcm92aWRlcyBzZXZlcmFsIG1lY2hhbmlzbXMgZm9yIGNvbW11bmljYXRpb24gYW5kIGRhdGEgZXhjaGFuZ2UKKyAgICAgIGJldHdlZW4gdGhlIDxlbXBoYXNpcz5hcHBsaWNhdGlvbjwvZW1waGFzaXM+IGFuZCB0aGUgPGVtcGhhc2lzPnBpcGVsaW5lPC9lbXBoYXNpcz4uCisgICAgPC9wYXJhPgorCisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGVtcGhhc2lzPmJ1ZmZlcnM8L2VtcGhhc2lzPiBhcmUgb2JqZWN0cyBmb3IgcGFzc2luZyBzdHJlYW1pbmcgZGF0YQorICAgICAgICAgIGJldHdlZW4gZWxlbWVudHMgaW4gdGhlIHBpcGVsaW5lLiBCdWZmZXJzIGFsd2F5cyB0cmF2ZWwgZnJvbSBzb3VyY2VzCisgICAgICAgICAgdG8gc2lua3MgKGRvd25zdHJlYW0pLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8ZW1waGFzaXM+ZXZlbnRzPC9lbXBoYXNpcz4gYXJlIG9iamVjdHMgc2VudCBiZXR3ZWVuIGVsZW1lbnRzIG9yIGZyb20KKyAgICAgICAgICB0aGUgYXBwbGljYXRpb24gdG8gZWxlbWVudHMuIEV2ZW50cyBjYW4gdHJhdmVsIHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtLgorICAgICAgICAgIERvd25zdHJlYW0gZXZlbnRzIGNhbiBiZSBzeW5jaHJvbmlzZWQgdG8gdGhlIGRhdGEgZmxvdy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGVtcGhhc2lzPm1lc3NhZ2VzPC9lbXBoYXNpcz4gYXJlIG9iamVjdHMgcG9zdGVkIGJ5IGVsZW1lbnRzIG9uCisgICAgICAgICAgdGhlIHBpcGVsaW5lJ3MgbWVzc2FnZSBidXMsIHdoZXJlIHRoZXkgd2lsbCBiZSBoZWxkIGZvciBjb2xsZWN0aW9uCisgICAgICAgICAgYnkgdGhlIGFwcGxpY2F0aW9uLiBNZXNzYWdlcyBjYW4gYmUgaW50ZXJjZXB0ZWQgc3luY2hyb25vdXNseSBmcm9tCisgICAgICAgICAgdGhlIHN0cmVhbWluZyB0aHJlYWQgY29udGV4dCBvZiB0aGUgZWxlbWVudCBwb3N0aW5nIHRoZSBtZXNzYWdlLCBidXQKKyAgICAgICAgICBhcmUgdXN1YWxseSBoYW5kbGVkIGFzeW5jaHJvbm91c2x5IGJ5IHRoZSBhcHBsaWNhdGlvbiBmcm9tIHRoZQorICAgICAgICAgIGFwcGxpY2F0aW9uJ3MgbWFpbiB0aHJlYWQuIE1lc3NhZ2VzIGFyZSB1c2VkIHRvIHRyYW5zbWl0IGluZm9ybWF0aW9uCisgICAgICAgICAgc3VjaCBhcyBlcnJvcnMsIHRhZ3MsIHN0YXRlIGNoYW5nZXMsIGJ1ZmZlcmluZyBzdGF0ZSwgcmVkaXJlY3RzIGV0Yy4KKyAgICAgICAgICBmcm9tIGVsZW1lbnRzIHRvIHRoZSBhcHBsaWNhdGlvbiBpbiBhIHRocmVhZC1zYWZlIHdheS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGVtcGhhc2lzPnF1ZXJpZXM8L2VtcGhhc2lzPiBhbGxvdyBhcHBsaWNhdGlvbnMgdG8gcmVxdWVzdCBpbmZvcm1hdGlvbgorICAgICAgICAgIHN1Y2ggYXMgZHVyYXRpb24gb3IgY3VycmVudCBwbGF5YmFjayBwb3NpdGlvbiBmcm9tIHRoZSBwaXBlbGluZS4KKyAgICAgICAgICBRdWVyaWVzIGFyZSBhbHdheXMgYW5zd2VyZWQgc3luY2hyb25vdXNseS4gRWxlbWVudHMgY2FuIGFsc28gdXNlCisgICAgICAgICAgcXVlcmllcyB0byByZXF1ZXN0IGluZm9ybWF0aW9uIGZyb20gdGhlaXIgcGVlciBlbGVtZW50cyAoc3VjaCBhcyB0aGUKKyAgICAgICAgICBmaWxlIHNpemUgb3IgZHVyYXRpb24pLiBUaGV5IGNhbiBiZSB1c2VkIGJvdGggd2F5cyB3aXRoaW4gYSBwaXBlbGluZSwKKyAgICAgICAgICBidXQgdXBzdHJlYW0gcXVlcmllcyBhcmUgbW9yZSBjb21tb24uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisKKyAgICA8ZmlndXJlIGZsb2F0PSIxIiBpZD0ic2VjdGlvbi1jb21tdW5pY2F0aW9uLWltZyI+CisgICAgICA8dGl0bGU+JkdTdHJlYW1lcjsgcGlwZWxpbmUgd2l0aCBkaWZmZXJlbnQgY29tbXVuaWNhdGlvbiBmbG93czwvdGl0bGU+CisgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgIDxpbWFnZW9iamVjdD4KKyAgICAgICAgICA8aW1hZ2VkYXRhIHNjYWxlPSI3NSIgZmlsZXJlZj0iaW1hZ2VzL2NvbW11bmljYXRpb24uJmltYWdlOyIgZm9ybWF0PSImSU1BR0U7IiAvPgorICAgICAgICA8L2ltYWdlb2JqZWN0PgorICAgICAgPC9tZWRpYW9iamVjdD4gIAorICAgIDwvZmlndXJlPgorCisgIDwvc2VjdDE+CisKKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2ludHJvLWdzdHJlYW1lci54bWwgYi9kb2NzL21hbnVhbC9pbnRyby1nc3RyZWFtZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YWY5N2QKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL21hbnVhbC9pbnRyby1nc3RyZWFtZXIueG1sCkBAIC0wLDAgKzEsOTggQEAKKzxjaGFwdGVyIGlkPSJjaGFwdGVyLWdzdHJlYW1lciI+CisgIDx0aXRsZT5XaGF0IGlzICZHU3RyZWFtZXI7PzwvdGl0bGU+CisKKyAgPCEtLSAjIyMjIyMjIyMjIyMgc2VjdDEgIyMjIyMjIyMjIyMjIyAtLT4KKworPCEtLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWludHJvLXdoYXQiPiAtLT48IS0tIHN5bmNocm9uaXplIHdpdGggUFdHIC0tPgorICAgIDxwYXJhPiAKKyAgICAgICZHU3RyZWFtZXI7IGlzIGEgZnJhbWV3b3JrIGZvciBjcmVhdGluZyBzdHJlYW1pbmcgbWVkaWEgYXBwbGljYXRpb25zLgorICAgICAgVGhlIGZ1bmRhbWVudGFsIGRlc2lnbiBjb21lcyBmcm9tIHRoZSB2aWRlbyBwaXBlbGluZSBhdCBPcmVnb24gR3JhZHVhdGUKKyAgICAgIEluc3RpdHV0ZSwgYXMgd2VsbCBhcyBzb21lIGlkZWFzIGZyb20gRGlyZWN0U2hvdy4gIAorICAgIDwvcGFyYT4KKyAKKyAgICA8cGFyYT4KKyAgICAgICZHU3RyZWFtZXI7J3MgZGV2ZWxvcG1lbnQgZnJhbWV3b3JrIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHdyaXRlIGFueQorICAgICAgdHlwZSBvZiBzdHJlYW1pbmcgbXVsdGltZWRpYSBhcHBsaWNhdGlvbi4gVGhlICZHU3RyZWFtZXI7IGZyYW1ld29yaworICAgICAgaXMgZGVzaWduZWQgdG8gbWFrZSBpdCBlYXN5IHRvIHdyaXRlIGFwcGxpY2F0aW9ucyB0aGF0IGhhbmRsZSBhdWRpbworICAgICAgb3IgdmlkZW8gb3IgYm90aC4gSXQgaXNuJ3QgcmVzdHJpY3RlZCB0byBhdWRpbyBhbmQgdmlkZW8sIGFuZCBjYW4KKyAgICAgIHByb2Nlc3MgYW55IGtpbmQgb2YgZGF0YSBmbG93LgorICAgICAgVGhlIHBpcGVsaW5lIGRlc2lnbiBpcyBtYWRlIHRvIGhhdmUgbGl0dGxlIG92ZXJoZWFkIGFib3ZlIHdoYXQgdGhlCisgICAgICBhcHBsaWVkIGZpbHRlcnMgaW5kdWNlLiBUaGlzIG1ha2VzICZHU3RyZWFtZXI7IGEgZ29vZCBmcmFtZXdvcmsgZm9yCisgICAgICBkZXNpZ25pbmcgZXZlbiBoaWdoLWVuZCBhdWRpbyBhcHBsaWNhdGlvbnMgd2hpY2ggcHV0IGhpZ2ggZGVtYW5kcyBvbgorICAgICAgbGF0ZW5jeS4gCisgICAgPC9wYXJhPiAKKworICAgIDxwYXJhPgorICAgICAgT25lIG9mIHRoZSBtb3N0IG9idmlvdXMgdXNlcyBvZiAmR1N0cmVhbWVyOyBpcyB1c2luZyBpdCB0byBidWlsZAorICAgICAgYSBtZWRpYSBwbGF5ZXIuICZHU3RyZWFtZXI7IGFscmVhZHkgaW5jbHVkZXMgY29tcG9uZW50cyBmb3IgYnVpbGRpbmcgYQorICAgICAgbWVkaWEgcGxheWVyIHRoYXQgY2FuIHN1cHBvcnQgYSB2ZXJ5IHdpZGUgdmFyaWV0eSBvZiBmb3JtYXRzLCBpbmNsdWRpbmcKKyAgICAgIE1QMywgT2dnL1ZvcmJpcywgTVBFRy0xLzIsIEFWSSwgUXVpY2t0aW1lLCBtb2QsIGFuZCBtb3JlLiAmR1N0cmVhbWVyOywKKyAgICAgIGhvd2V2ZXIsIGlzIG11Y2ggbW9yZSB0aGFuIGp1c3QgYW5vdGhlciBtZWRpYSBwbGF5ZXIuIEl0cyBtYWluIGFkdmFudGFnZXMKKyAgICAgIGFyZSB0aGF0IHRoZSBwbHVnZ2FibGUgY29tcG9uZW50cyBjYW4gYmUgbWl4ZWQgYW5kIG1hdGNoZWQgaW50byBhcmJpdHJhcnkKKyAgICAgIHBpcGVsaW5lcyBzbyB0aGF0IGl0J3MgcG9zc2libGUgdG8gd3JpdGUgYSBmdWxsLWZsZWRnZWQgdmlkZW8gb3IgYXVkaW8KKyAgICAgIGVkaXRpbmcgYXBwbGljYXRpb24uCisgICAgPC9wYXJhPiAKKworICAgIDxwYXJhPgorICAgICAgVGhlIGZyYW1ld29yayBpcyBiYXNlZCBvbiBwbHVnaW5zIHRoYXQgd2lsbCBwcm92aWRlIHRoZSB2YXJpb3VzIGNvZGVjIAorICAgICAgYW5kIG90aGVyIGZ1bmN0aW9uYWxpdHkuIFRoZSBwbHVnaW5zIGNhbiBiZSBsaW5rZWQgYW5kIGFycmFuZ2VkIGluCisgICAgICBhIHBpcGVsaW5lLiBUaGlzIHBpcGVsaW5lIGRlZmluZXMgdGhlIGZsb3cgb2YgdGhlIGRhdGEuIFBpcGVsaW5lcyBjYW4gCisgICAgICBhbHNvIGJlIGVkaXRlZCB3aXRoIGEgR1VJIGVkaXRvciBhbmQgc2F2ZWQgYXMgWE1MIHNvIHRoYXQgcGlwZWxpbmUKKyAgICAgIGxpYnJhcmllcyBjYW4gYmUgbWFkZSB3aXRoIGEgbWluaW11bSBvZiBlZmZvcnQuCisgICAgPC9wYXJhPiAKKworICAgIDxwYXJhPgorICAgICAgVGhlICZHU3RyZWFtZXI7IGNvcmUgZnVuY3Rpb24gaXMgdG8gcHJvdmlkZSBhIGZyYW1ld29yayBmb3IgcGx1Z2lucywKKyAgICAgIGRhdGEgZmxvdyBhbmQgbWVkaWEgdHlwZSBoYW5kbGluZy9uZWdvdGlhdGlvbi4gSXQgYWxzbyBwcm92aWRlcyBhbgorICAgICAgQVBJIHRvIHdyaXRlIGFwcGxpY2F0aW9ucyB1c2luZyB0aGUgdmFyaW91cyBwbHVnaW5zLgorICAgIDwvcGFyYT4gCisKKworICAgIDxwYXJhPgorICAgICAgU3BlY2lmaWNhbGx5LCAmR1N0cmVhbWVyOyBwcm92aWRlcworICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPmFuIEFQSSBmb3IgbXVsdGltZWRpYSBhcHBsaWNhdGlvbnM8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPmEgcGx1Z2luIGFyY2hpdGVjdHVyZTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+YSBwaXBlbGluZSBhcmNoaXRlY3R1cmU8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPmEgbWVjaGFuaXNtIGZvciBtZWRpYSB0eXBlIGhhbmRsaW5nL25lZ290aWF0aW9uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5vdmVyIDE1MCBwbHVnLWluczwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+YSBzZXQgb2YgdG9vbHM8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4gCisKKyAgICA8cGFyYT4KKyAgICAgICZHU3RyZWFtZXI7IHBsdWctaW5zIGNvdWxkIGJlIGNsYXNzaWZpZWQgaW50bworICAgICAgPGl0ZW1pemVkbGlzdD4KKwk8bGlzdGl0ZW0+PHBhcmE+cHJvdG9jb2xzIGhhbmRsaW5nPC9wYXJhPjwvbGlzdGl0ZW0+CisJPGxpc3RpdGVtPjxwYXJhPnNvdXJjZXM6IGZvciBhdWRpbyBhbmQgdmlkZW8gKGludm9sdmVzIHByb3RvY29sIHBsdWdpbnMpPC9wYXJhPjwvbGlzdGl0ZW0+CisJPGxpc3RpdGVtPjxwYXJhPmZvcm1hdHM6IHBhcnNlcnMsIGZvcm1hdGVycywgbXV4ZXJzLCBkZW11eGVycywgbWV0YWRhdGEsIHN1YnRpdGxlczwvcGFyYT48L2xpc3RpdGVtPgorCTxsaXN0aXRlbT48cGFyYT5jb2RlY3M6IGNvZGVycyBhbmQgZGVjb2RlcnM8L3BhcmE+PC9saXN0aXRlbT4KKwk8bGlzdGl0ZW0+PHBhcmE+ZmlsdGVyczogY29udmVydGVycywgbWl4ZXJzLCBlZmZlY3RzLCAuLi48L3BhcmE+PC9saXN0aXRlbT4KKwk8bGlzdGl0ZW0+PHBhcmE+c2lua3M6IGZvciBhdWRpbyBhbmQgdmlkZW8gKGludm9sdmVzIHByb3RvY29sIHBsdWdpbnMpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+IAorICAgIAorICAgIDxmaWd1cmUgZmxvYXQ9IjEiIGlkPSJzZWN0aW9uLWdzdHJlYW1lci1pbWciPgorICAgICAgPHRpdGxlPkdzdHJlYW1lciBvdmVydmlldzwvdGl0bGU+CisgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgIDxpbWFnZW9iamVjdD4KKyAgICAgICAgICA8aW1hZ2VkYXRhIHNjYWxlPSI3NSIgZmlsZXJlZj0iaW1hZ2VzL2dzdHJlYW1lci1vdmVydmlldy4maW1hZ2U7IiBmb3JtYXQ9IiZJTUFHRTsiIC8+CisgICAgICAgIDwvaW1hZ2VvYmplY3Q+CisgICAgICA8L21lZGlhb2JqZWN0PiAgCisgICAgPC9maWd1cmU+CisKKyAgICA8cGFyYT4KKyAgICAgICZHU3RyZWFtZXI7IGlzIHBhY2thZ2VkIGludG8KKyAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5nc3RyZWFtZXI6IHRoZSBjb3JlIHBhY2thZ2U8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPmdzdC1wbHVnaW5zLWJhc2U6IGFuIGVzc2VudGlhbCBleGVtcGxhcnkgc2V0IG9mIGVsZW1lbnRzPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5nc3QtcGx1Z2lucy1nb29kOiBhIHNldCBvZiBnb29kLXF1YWxpdHkgcGx1Zy1pbnMgdW5kZXIgTEdQTDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Z3N0LXBsdWdpbnMtdWdseTogYSBzZXQgb2YgZ29vZC1xdWFsaXR5IHBsdWctaW5zIHRoYXQgbWlnaHQgcG9zZSBkaXN0cmlidXRpb24gcHJvYmxlbXM8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPmdzdC1wbHVnaW5zLWJhZDogYSBzZXQgb2YgcGx1Zy1pbnMgdGhhdCBuZWVkIG1vcmUgcXVhbGl0eTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Z3N0LXB5dGhvbjogdGhlIHB5dGhvbiBiaW5kaW5nczwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+YSBmZXcgb3RoZXJzIHBhY2thZ2VzPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+IAorCisKKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2ludHJvLW1vdGl2YXRpb24ueG1sIGIvZG9jcy9tYW51YWwvaW50cm8tbW90aXZhdGlvbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgwNjBmYQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbWFudWFsL2ludHJvLW1vdGl2YXRpb24ueG1sCkBAIC0wLDAgKzEsMzAwIEBACis8Y2hhcHRlciBpZD0iY2hhcHRlci1tb3RpdmF0aW9uIj4KKyAgPHRpdGxlPkRlc2lnbiBwcmluY2lwbGVzPC90aXRsZT4KKworPCEtLQorICA8cGFyYT4gCisgICAgTGludXggaGFzIGhpc3RvcmljYWxseSBsYWdnZWQgYmVoaW5kIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zIGluIHRoZQorICAgIG11bHRpbWVkaWEgYXJlbmEuIE1pY3Jvc29mdCdzIDx0cmFkZW1hcms+V2luZG93czwvdHJhZGVtYXJrPiBhbmQKKyAgICBBcHBsZSdzIDx0cmFkZW1hcms+TWFjT1M8L3RyYWRlbWFyaz4gYm90aCBoYXZlIHN0cm9uZyBzdXBwb3J0IGZvcgorICAgIG11bHRpbWVkaWEgZGV2aWNlcywgbXVsdGltZWRpYSBjb250ZW50IGNyZWF0aW9uLCBwbGF5YmFjaywgYW5kCisgICAgcmVhbHRpbWUgcHJvY2Vzc2luZy4gTGludXgsIG9uIHRoZSBvdGhlciBoYW5kLCBoYXMgYSBwb29ybHkgaW50ZWdyYXRlZAorICAgIGNvbGxlY3Rpb24gb2YgbXVsdGltZWRpYSB1dGlsaXRpZXMgYW5kIGFwcGxpY2F0aW9ucyBhdmFpbGFibGUsIHdoaWNoCisgICAgY2FuIGhhcmRseSBjb21wZXRlIHdpdGggdGhlIHByb2Zlc3Npb25hbCBsZXZlbCBvZiBzb2Z0d2FyZSBhdmFpbGFibGUKKyAgICBmb3IgTVMgV2luZG93cyBhbmQgTWFjT1MuCisgIDwvcGFyYT4KKyAgPHBhcmE+IAorICAgIEdTdHJlYW1lciB3YXMgZGVzaWduZWQgdG8gcHJvdmlkZSBhIHNvbHV0aW9uIHRvIHRoZSBjdXJyZW50IExpbnV4IG1lZGlhCisgICAgcHJvYmxlbXMuCisgIDwvcGFyYT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tbW90aXZhdGlvbi1wcm9ibGVtcyI+CisgICAgPHRpdGxlPkN1cnJlbnQgcHJvYmxlbXM8L3RpdGxlPgorICAgIDxwYXJhPiAKKyAgICAgIFdlIGRlc2NyaWJlIHRoZSB0eXBpY2FsIHByb2JsZW1zIGluIHRvZGF5J3MgbWVkaWEgaGFuZGxpbmcgb24gTGludXguCisgICAgPC9wYXJhPgorICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1tb3RpdmF0aW9uLWR1cGxpY2F0ZSI+CisgICAgICA8dGl0bGU+TXVsdGl0dWRlIG9mIGR1cGxpY2F0ZSBjb2RlPC90aXRsZT4KKyAgICAgIDxwYXJhPiAKKyAgICAgICAgVGhlIExpbnV4IHVzZXIgd2hvIHdpc2hlcyB0byBoZWFyIGEgc291bmQgZmlsZSBtdXN0IGh1bnQgdGhyb3VnaAorICAgICAgICB0aGVpciBjb2xsZWN0aW9uIG9mIHNvdW5kIGZpbGUgcGxheWVycyBpbiBvcmRlciB0byBwbGF5IHRoZSB0ZW5zCisgICAgICAgIG9mIHNvdW5kIGZpbGUgZm9ybWF0cyBpbiB3aWRlIHVzZSB0b2RheS4gTW9zdCBvZiB0aGVzZSBwbGF5ZXJzCisgICAgICAgIGJhc2ljYWxseSByZWltcGxlbWVudCB0aGUgc2FtZSBjb2RlIG92ZXIgYW5kIG92ZXIgYWdhaW4uCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIExpbnV4IGRldmVsb3BlciB3aG8gd2lzaGVzIHRvIGVtYmVkIGEgdmlkZW8gY2xpcCBpbiB0aGVpcgorICAgICAgICBhcHBsaWNhdGlvbiBtdXN0IHVzZSBjcnVkZSBoYWNrcyB0byBydW4gYW4gZXh0ZXJuYWwgdmlkZW8gcGxheWVyLgorICAgICAgICBUaGVyZSBpcyBubyBsaWJyYXJ5IGF2YWlsYWJsZSB0aGF0IGEgZGV2ZWxvcGVyIGNhbiB1c2UgdG8gY3JlYXRlCisgICAgICAgIGEgY3VzdG9tIG1lZGlhIHBsYXllci4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3QyPgorCisgICAgPHNlY3QyIGlkPSJzZWN0aW9uLW1vdGl2YXRpb24tZ29hbCI+CisgICAgICA8dGl0bGU+J09uZSBnb2FsJyBtZWRpYSBwbGF5ZXJzL2xpYnJhcmllczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgWW91ciB0eXBpY2FsIE1QRUcgcGxheWVyIHdhcyBkZXNpZ25lZCB0byBwbGF5IE1QRUcgdmlkZW8gYW5kIGF1ZGlvLgorICAgICAgICBNb3N0IG9mIHRoZXNlIHBsYXllcnMgaGF2ZSBpbXBsZW1lbnRlZCBhIGNvbXBsZXRlIGluZnJhc3RydWN0dXJlCisgICAgICAgIGZvY3VzZWQgb24gYWNoaWV2aW5nIHRoZWlyIG9ubHkgZ29hbDogcGxheWJhY2suIE5vIHByb3Zpc2lvbnMgd2VyZQorICAgICAgICBtYWRlIHRvIGFkZCBmaWx0ZXJzIG9yIHNwZWNpYWwgZWZmZWN0cyB0byB0aGUgdmlkZW8gb3IgYXVkaW8gZGF0YS4KKyAgICAgIDwvcGFyYT4gCisgICAgICA8cGFyYT4KKyAgICAgICAgSWYgeW91IHdhbnQgdG8gY29udmVydCBhbiBNUEVHLTIgdmlkZW8gc3RyZWFtIGludG8gYW4gQVZJIGZpbGUsCisgICAgICAgIHlvdXIgYmVzdCBvcHRpb24gd291bGQgYmUgdG8gdGFrZSBhbGwgb2YgdGhlIE1QRUctMiBkZWNvZGluZworICAgICAgICBhbGdvcml0aG1zIG91dCBvZiB0aGUgcGxheWVyIGFuZCBkdXBsaWNhdGUgdGhlbSBpbnRvIHlvdXIgb3duCisgICAgICAgIEFWSSBlbmNvZGVyLiBUaGVzZSBhbGdvcml0aG1zIGNhbm5vdCBlYXNpbHkgYmUgc2hhcmVkIGFjcm9zcworICAgICAgICBhcHBsaWNhdGlvbnMuCisgICAgICA8L3BhcmE+IAorICAgICAgPHBhcmE+CisgICAgICAgIEF0dGVtcHRzIGhhdmUgYmVlbiBtYWRlIHRvIGNyZWF0ZSBsaWJyYXJpZXMgZm9yIGhhbmRsaW5nIHZhcmlvdXMKKyAgICAgICAgbWVkaWEgdHlwZXMuIEJlY2F1c2UgdGhleSBmb2N1cyBvbiBhIHZlcnkgc3BlY2lmaWMgbWVkaWEgdHlwZQorICAgICAgICAoYXZpZmlsZSwgbGlibXBlZzIsIC4uLiksIHNpZ25pZmljYW50IHdvcmsgaXMgbmVlZGVkIHRvIGludGVncmF0ZQorICAgICAgICB0aGVtIGR1ZSB0byBhIGxhY2sgb2YgYSBjb21tb24gQVBJLiAmR1N0cmVhbWVyOyBhbGxvd3MgeW91IHRvCisgICAgICAgIHdyYXAgdGhlc2UgbGlicmFyaWVzIHdpdGggYSBjb21tb24gQVBJLCB3aGljaCBzaWduaWZpY2FudGx5CisgICAgICAgIHNpbXBsaWZpZXMgaW50ZWdyYXRpb24gYW5kIHJldXNlLgorICAgICAgPC9wYXJhPiAKKyAgICA8L3NlY3QyPgorICAKKyAgICA8c2VjdDIgaWQ9InNlY3Rpb24tbW90aXZhdGlvbi1wbHVnaW4iPgorICAgICAgPHRpdGxlPk5vbiB1bmlmaWVkIHBsdWdpbiBtZWNoYW5pc21zPC90aXRsZT4KKyAgICAgIDxwYXJhPiAKKyAgICAgICAgWW91ciB0eXBpY2FsIG1lZGlhIHBsYXllciBtaWdodCBoYXZlIGEgcGx1Z2luIGZvciBkaWZmZXJlbnQgbWVkaWEKKyAgICAgICAgdHlwZXMuIFR3byBtZWRpYSBwbGF5ZXJzIHdpbGwgdHlwaWNhbGx5IGltcGxlbWVudCB0aGVpciBvd24gcGx1Z2luCisgICAgICAgIG1lY2hhbmlzbSBzbyB0aGF0IHRoZSBjb2RlY3MgY2Fubm90IGJlIGVhc2lseSBleGNoYW5nZWQuIFRoZSBwbHVnaW4KKyAgICAgICAgc3lzdGVtIG9mIHRoZSB0eXBpY2FsIG1lZGlhIHBsYXllciBpcyBhbHNvIHZlcnkgdGFpbG9yZWQgdG8gdGhlCisgICAgICAgIHNwZWNpZmljIG5lZWRzIG9mIHRoZSBhcHBsaWNhdGlvbi4KKyAgICAgIDwvcGFyYT4gCisgICAgICA8cGFyYT4gCisgICAgICAgIFRoZSBsYWNrIG9mIGEgdW5pZmllZCBwbHVnaW4gbWVjaGFuaXNtIGFsc28gc2VyaW91c2x5IGhpbmRlcnMgdGhlIAorCWNyZWF0aW9uIG9mIGJpbmFyeSBvbmx5IGNvZGVjcy4gTm8gY29tcGFueSBpcyB3aWxsaW5nIHRvIHBvcnQgdGhlaXIKKwljb2RlIHRvIGFsbCB0aGUgZGlmZmVyZW50IHBsdWdpbiBtZWNoYW5pc21zLgorICAgICAgPC9wYXJhPiAKKyAgICAgIDxwYXJhPiAKKyAgICAgICAgV2hpbGUgJkdTdHJlYW1lcjsgYWxzbyB1c2VzIGl0IG93biBwbHVnaW4gc3lzdGVtIGl0IG9mZmVycyBhIHZlcnkgcmljaAorCWZyYW1ld29yayBmb3IgdGhlIHBsdWdpbiBkZXZlbG9wZXIgYW5kIGVuc3VyZXMgdGhlIHBsdWdpbiBjYW4gYmUgdXNlZAorCWluIGEgd2lkZSByYW5nZSBvZiBhcHBsaWNhdGlvbnMsIHRyYW5zcGFyZW50bHkgaW50ZXJhY3Rpbmcgd2l0aCBvdGhlcgorCXBsdWdpbnMuIFRoZSBmcmFtZXdvcmsgdGhhdCAmR1N0cmVhbWVyOyBwcm92aWRlcyBmb3IgdGhlIHBsdWdpbnMgaXMKKwlmbGV4aWJsZSBlbm91Z2ggdG8gaG9zdCBldmVuIHRoZSBtb3N0IGRlbWFuZGluZyBwbHVnaW5zLgorICAgICAgPC9wYXJhPiAKKyAgICA8L3NlY3QyPgorCisgICAgPHNlY3QyIGlkPSJzZWN0aW9uLW1vdGl2YXRpb24tZXhwZXJpZW5jZSI+CisgICAgICA8dGl0bGU+UG9vciB1c2VyIGV4cGVyaWVuY2U8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIEJlY2F1c2Ugb2YgdGhlIHByb2JsZW1zIG1lbnRpb25lZCBhYm92ZSwgYXBwbGljYXRpb24gYXV0aG9ycyBoYXZlCisgICAgICAgIHNvIGZhciBvZnRlbiBiZWVuIHVyZ2VkIHRvIHNwZW5kIGEgY29uc2lkZXJhYmxlIGFtb3VudCBvZiB0aW1lIGluCisgICAgICAgIHdyaXRpbmcgdGhlaXIgb3duIGJhY2tlbmRzLCBwbHVnaW4gbWVjaGFuaXNtcyBhbmQgc28gb24uIFRoZSByZXN1bHQKKyAgICAgICAgaGFzIG9mdGVuIGJlZW4sIHVuZm9ydHVuYXRlbHksIHRoYXQgYm90aCB0aGUgYmFja2VuZCBhcyB3ZWxsIGFzIHRoZQorICAgICAgICB1c2VyIGludGVyZmFjZSB3ZXJlIG9ubHkgaGFsZi1maW5pc2hlZC4gRGVtb3RpdmF0ZWQsIHRoZSBhcHBsaWNhdGlvbgorICAgICAgICBhdXRob3JzIHdvdWxkIHN0YXJ0IHJld3JpdGluZyB0aGUgd2hvbGUgdGhpbmcgYW5kIGNvbXBsZXRlIHRoZSBjaXJjbGUuCisgICAgICAgIFRoaXMgbGVhZHMgdG8gYSA8ZW1waGFzaXM+cG9vciBlbmQgdXNlciBleHBlcmllbmNlPC9lbXBoYXNpcz4uCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0Mj4KKworICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1tb3RpdmF0aW9uLW5ldHdvcmsiPgorICAgICAgPHRpdGxlPlByb3Zpc2lvbiBmb3IgbmV0d29yayB0cmFuc3BhcmVuY3k8L3RpdGxlPgorICAgICAgPHBhcmE+IAorICAgICAgICBObyBpbmZyYXN0cnVjdHVyZSBpcyBwcmVzZW50IHRvIGFsbG93IG5ldHdvcmsgdHJhbnNwYXJlbnQgbWVkaWEKKyAgICAgICAgaGFuZGxpbmcuIEEgZGlzdHJpYnV0ZWQgTVBFRyBlbmNvZGVyIHdpbGwgdHlwaWNhbGx5IGR1cGxpY2F0ZSB0aGUKKyAgICAgICAgc2FtZSBlbmNvZGVyIGFsZ29yaXRobXMgZm91bmQgaW4gYSBub24tZGlzdHJpYnV0ZWQgZW5jb2Rlci4KKyAgICAgIDwvcGFyYT4gCisgICAgICA8cGFyYT4gCisgICAgICAgIE5vIHByb3Zpc2lvbnMgaGF2ZSBiZWVuIG1hZGUgZm9yIHVzZSBieSBhbmQgdXNlIG9mIHRlY2hub2xvZ2llcyBzdWNoIAorCWFzIHRoZSA8dWxpbmsgdXJsPSJodHRwOi8vZ25vbWUub3JnLyIgdHlwZT0iaHR0cCI+R05PTUU8L3VsaW5rPgorCWRlc2t0b3AgcGxhdGZvcm0uIEJlY2F1c2UgdGhlIHdoZWVsIGlzIHJlLWludmVudGVkIGFsbCB0aGUgdGltZSwKKwlpdCdzIGhhcmQgdG8gcHJvcGVybHkgaW50ZWdyYXRlIG11bHRpbWVkaWEgaW50byB0aGUgYmlnZ2VyIHdob2xlIG9mCisJdXNlcidzIGVudmlyb25tZW50LgorICAgICAgPC9wYXJhPiAKKyAgICAgIDxwYXJhPiAKKyAgICAgICAgVGhlICZHU3RyZWFtZXI7IGNvcmUgZG9lcyBub3QgdXNlIG5ldHdvcmsgdHJhbnNwYXJlbnQgdGVjaG5vbG9naWVzCisgICAgICAgIGF0IHRoZSBsb3dlc3QgbGV2ZWwgYXMgaXQgb25seSBhZGRzIG92ZXJoZWFkIGZvciB0aGUgbG9jYWwgY2FzZS4gCisJVGhhdCBzYWlkLCBpdCBzaG91bGRuJ3QgYmUgaGFyZCB0byBjcmVhdGUgYSB3cmFwcGVyIGFyb3VuZCB0aGUKKwljb3JlIGNvbXBvbmVudHMuIFRoZXJlIGFyZSB0Y3AgcGx1Z2lucyBub3cgdGhhdCBpbXBsZW1lbnQgYQorICAgICAgICAmR1N0cmVhbWVyOyBEYXRhIFByb3RvY29sIHRoYXQgYWxsb3dzIHBpcGVsaW5lcyB0byBiZSBzcGxpdCBvdmVyCisgICAgICAgIFRDUC4gVGhlc2UgYXJlIGxvY2F0ZWQgaW4gdGhlIGdzdC1wbHVnaW5zIG1vZHVsZSBkaXJlY3RvcnkgZ3N0L3RjcC4KKyAgICAgIDwvcGFyYT4gCisgICAgPC9zZWN0Mj4KKworICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1tb3RpdmF0aW9uLWNhdGNodXAiPgorICAgICAgPHRpdGxlPkNhdGNoIHVwIHdpdGggdGhlIDx0cmFkZW1hcms+V2luZG93czwvdHJhZGVtYXJrPiB3b3JsZDwvdGl0bGU+CisgICAgICA8cGFyYT4gCisgICAgICAgIFdlIG5lZWQgc29saWQgbWVkaWEgaGFuZGxpbmcgaWYgd2Ugd2FudCB0byBzZWUgTGludXggc3VjY2VlZCBvbgorCXRoZSBkZXNrdG9wLgorICAgICAgPC9wYXJhPiAKKyAgICAgIDxwYXJhPiAKKyAgICAgICAgV2UgbXVzdCBjbGVhciB0aGUgcm9hZCBmb3IgY29tbWVyY2lhbGx5IGJhY2tlZCBjb2RlY3MgYW5kIG11bHRpbWVkaWEgCisJYXBwbGljYXRpb25zIHNvIHRoYXQgTGludXggY2FuIGJlY29tZSBhbiBvcHRpb24gZm9yIGRvaW5nIG11bHRpbWVkaWEuCisgICAgICA8L3BhcmE+IAorICAgIDwvc2VjdDI+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWdvYWxzLWRlc2lnbiI+CisgICAgPHRpdGxlPlRoZSBkZXNpZ24gZ29hbHM8L3RpdGxlPgorICAgIDxwYXJhPiAKKyAgICAgIFdlIGRlc2NyaWJlIHdoYXQgd2UgdHJ5IHRvIGFjaGlldmUgd2l0aCAmR1N0cmVhbWVyOy4KKyAgICA8L3BhcmE+CistLT4KKworICAgIDxzZWN0aW9uIGlkPSJzZWN0aW9uLWdvYWxzLWNsZWFuIj4KKyAgICAgIDx0aXRsZT5DbGVhbiBhbmQgcG93ZXJmdWw8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgICZHU3RyZWFtZXI7IHByb3ZpZGVzIGEgY2xlYW4gaW50ZXJmYWNlIHRvOgorICAgICAgPC9wYXJhPgorICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgPGxpc3RpdGVtPgorCSAgPHBhcmE+CisJICAgIFRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWVyIHdobyB3YW50cyB0byBidWlsZCBhIG1lZGlhIHBpcGVsaW5lLiAKKwkgICAgVGhlIHByb2dyYW1tZXIgY2FuIHVzZSBhbiBleHRlbnNpdmUgc2V0IG9mIHBvd2VyZnVsIHRvb2xzIHRvIGNyZWF0ZQorCSAgICBtZWRpYSBwaXBlbGluZXMgd2l0aG91dCB3cml0aW5nIGEgc2luZ2xlIGxpbmUgb2YgY29kZS4gUGVyZm9ybWluZyAKKwkgICAgY29tcGxleCBtZWRpYSBtYW5pcHVsYXRpb25zIGJlY29tZXMgdmVyeSBlYXN5LgorCSAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisJICA8cGFyYT4KKwkgICAgVGhlIHBsdWdpbiBwcm9ncmFtbWVyLiBQbHVnaW4gcHJvZ3JhbW1lcnMgYXJlIHByb3ZpZGVkIGEgY2xlYW4gYW5kCisJICAgIHNpbXBsZSBBUEkgdG8gY3JlYXRlIHNlbGYtY29udGFpbmVkIHBsdWdpbnMuIEFuIGV4dGVuc2l2ZSBkZWJ1Z2dpbmcKKwkgICAgYW5kIHRyYWNpbmcgbWVjaGFuaXNtIGhhcyBiZWVuIGludGVncmF0ZWQuIEdTdHJlYW1lciBhbHNvIGNvbWVzIHdpdGgKKwkgICAgYW4gZXh0ZW5zaXZlIHNldCBvZiByZWFsLWxpZmUgcGx1Z2lucyB0aGF0IHNlcnZlIGFzIGV4YW1wbGVzIHRvby4KKwkgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvaXRlbWl6ZWRsaXN0PgorCisgICAgPC9zZWN0aW9uPgorICAgIDxzZWN0aW9uIGlkPSJzZWN0aW9uLWdvYWxzLW9iamVjdCI+CisgICAgICA8dGl0bGU+T2JqZWN0IG9yaWVudGVkPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICAmR1N0cmVhbWVyOyBhZGhlcmVzIHRvIEdPYmplY3QsIHRoZSBHTGliIDIuMCBvYmplY3QgbW9kZWwuIEEgcHJvZ3JhbW1lcgorICAgICAgICBmYW1pbGlhciB3aXRoIEdMaWIgMi4wIG9yIEdUSysgd2lsbCBiZQorICAgICAgICBjb21mb3J0YWJsZSB3aXRoICZHU3RyZWFtZXI7LgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgICZHU3RyZWFtZXI7IHVzZXMgdGhlIG1lY2hhbmlzbSBvZiBzaWduYWxzIGFuZCBvYmplY3QgcHJvcGVydGllcy4gCisgICAgICA8L3BhcmE+IAorICAgICAgPHBhcmE+CisgICAgICAgIEFsbCBvYmplY3RzIGNhbiBiZSBxdWVyaWVkIGF0IHJ1bnRpbWUgZm9yIHRoZWlyIHZhcmlvdXMgcHJvcGVydGllcyBhbmQKKwljYXBhYmlsaXRpZXMuCisgICAgICA8L3BhcmE+IAorICAgICAgPHBhcmE+CisgICAgICAgICZHU3RyZWFtZXI7IGludGVuZHMgdG8gYmUgc2ltaWxhciBpbiBwcm9ncmFtbWluZyBtZXRob2RvbG9neSB0byBHVEsrLgorCVRoaXMgYXBwbGllcyB0byB0aGUgb2JqZWN0IG1vZGVsLCBvd25lcnNoaXAgb2Ygb2JqZWN0cywgcmVmZXJlbmNlCisgICAgICAgIGNvdW50aW5nLCBldGMuCisgICAgICA8L3BhcmE+IAorICAgIDwvc2VjdGlvbj4KKyAgCisgICAgPHNlY3Rpb24gaWQ9InNlY3Rpb24tZ29hbHMtZXh0ZW5zaWJsZSI+CisgICAgICA8dGl0bGU+RXh0ZW5zaWJsZTwvdGl0bGU+CisgICAgICA8cGFyYT4gCisJQWxsICZHU3RyZWFtZXI7IE9iamVjdHMgY2FuIGJlIGV4dGVuZGVkIHVzaW5nIHRoZSBHT2JqZWN0CisgICAgICAgIGluaGVyaXRhbmNlIG1ldGhvZHMuCisgICAgICA8L3BhcmE+IAorICAgICAgPHBhcmE+IAorICAgICAgICBBbGwgcGx1Z2lucyBhcmUgbG9hZGVkIGR5bmFtaWNhbGx5IGFuZCBjYW4gYmUgZXh0ZW5kZWQgYW5kIHVwZ3JhZGVkCisJaW5kZXBlbmRlbnRseS4KKyAgICAgIDwvcGFyYT4gCisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InNlY3Rpb24tZ29hbHMtYmluYXJ5Ij4KKyAgICAgIDx0aXRsZT5BbGxvdyBiaW5hcnktb25seSBwbHVnaW5zPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBQbHVnaW5zIGFyZSBzaGFyZWQgbGlicmFyaWVzIHRoYXQgYXJlIGxvYWRlZCBhdCBydW50aW1lLiBTaW5jZSBhbGwKKyAgICAgICAgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHBsdWdpbiBjYW4gYmUgc2V0IHVzaW5nIHRoZSBHT2JqZWN0IHByb3BlcnRpZXMsCisgICAgICAgIHRoZXJlIGlzIG5vIG5lZWQgKGFuZCBpbiBmYWN0IG5vIHdheSkgdG8gaGF2ZSBhbnkgaGVhZGVyIGZpbGVzCisgICAgICAgIGluc3RhbGxlZCBmb3IgdGhlIHBsdWdpbnMuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4gCisgICAgICAgIFNwZWNpYWwgY2FyZSBoYXMgYmVlbiB0YWtlbiB0byBtYWtlIHBsdWdpbnMgY29tcGxldGVseSBzZWxmLWNvbnRhaW5lZC4gCisgICAgICAgIEFsbCByZWxldmFudCBhc3BlY3RzIG9mIHBsdWdpbnMgY2FuIGJlIHF1ZXJpZWQgYXQgcnVuLXRpbWUuCisgICAgICA8L3BhcmE+IAorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJzZWN0aW9uLWdvYWxzLXBlcmZvcm1hbmNlIj4KKyAgICAgIDx0aXRsZT5IaWdoIHBlcmZvcm1hbmNlPC90aXRsZT4KKyAgICAgIDxwYXJhPiAKKyAgICAgICAgSGlnaCBwZXJmb3JtYW5jZSBpcyBvYnRhaW5lZCBieToKKyAgICAgIDwvcGFyYT4gCisgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+CisJICA8cGFyYT4KKwkgICAgdXNpbmcgR0xpYidzIDxjbGFzc25hbWU+R1NsaWNlPC9jbGFzc25hbWU+IGFsbG9jYXRvcgorCSAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisJICA8cGFyYT4KKwkgICAgZXh0cmVtZWx5IGxpZ2h0LXdlaWdodCBsaW5rcyBiZXR3ZWVuIHBsdWdpbnMuIERhdGEgY2FuIHRyYXZlbAorCSAgICB0aGUgcGlwZWxpbmUgd2l0aCBtaW5pbWFsIG92ZXJoZWFkLiBEYXRhIHBhc3NpbmcgYmV0d2VlbgorICAgICAgICAgICAgcGx1Z2lucyBvbmx5IGludm9sdmVzIGEgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBhIHR5cGljYWwKKyAgICAgICAgICAgIHBpcGVsaW5lLgorCSAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisJICA8cGFyYT4KKwkgICAgcHJvdmlkaW5nIGEgbWVjaGFuaXNtIHRvIGRpcmVjdGx5IHdvcmsgb24gdGhlIHRhcmdldCBtZW1vcnkuCisgICAgICAgICAgICBBIHBsdWdpbiBjYW4gZm9yIGV4YW1wbGUgZGlyZWN0bHkgd3JpdGUgdG8gdGhlIFggc2VydmVyJ3MKKyAgICAgICAgICAgIHNoYXJlZCBtZW1vcnkgc3BhY2UuIEJ1ZmZlcnMgY2FuIGFsc28gcG9pbnQgdG8gYXJiaXRyYXJ5CisgICAgICAgICAgICBtZW1vcnksIHN1Y2ggYXMgYSBzb3VuZCBjYXJkJ3MgaW50ZXJuYWwgaGFyZHdhcmUgYnVmZmVyLgorCSAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisJICA8cGFyYT4KKwkgICAgcmVmY291bnRpbmcgYW5kIGNvcHkgb24gd3JpdGUgbWluaW1pemUgdXNhZ2Ugb2YgbWVtY3B5LgorCSAgICBTdWItYnVmZmVycyBlZmZpY2llbnRseSBzcGxpdCBidWZmZXJzIGludG8gbWFuYWdlYWJsZSBwaWVjZXMuCisJICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKwkgIDxwYXJhPgorCSAgICBkZWRpY2F0ZWQgc3RyZWFtaW5nIHRocmVhZHMsIHdpdGggc2NoZWR1bGluZyBoYW5kbGVkIGJ5IHRoZSBrZXJuZWwuCisJICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKwkgIDxwYXJhPgorCSAgICBhbGxvd2luZyBoYXJkd2FyZSBhY2NlbGVyYXRpb24gYnkgdXNpbmcgc3BlY2lhbGl6ZWQgcGx1Z2lucy4KKwkgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorCSAgPHBhcmE+CisJICAgIHVzaW5nIGEgcGx1Z2luIHJlZ2lzdHJ5IHdpdGggdGhlIHNwZWNpZmljYXRpb25zIG9mIHRoZSBwbHVnaW5zIHNvIAorCSAgICB0aGF0IHRoZSBwbHVnaW4gbG9hZGluZyBjYW4gYmUgZGVsYXllZCB1bnRpbCB0aGUgcGx1Z2luIGlzIGFjdHVhbGx5CisJICAgIHVzZWQuCisJICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ic2VjdGlvbi1nb2Fscy1zZXBhcmF0aW9uIj4KKyAgICAgIDx0aXRsZT5DbGVhbiBjb3JlL3BsdWdpbnMgc2VwYXJhdGlvbjwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGNvcmUgb2YgJkdTdHJlYW1lcjsgaXMgZXNzZW50aWFsbHkgbWVkaWEtYWdub3N0aWMuIEl0IG9ubHkga25vd3MKKyAgICAgICAgYWJvdXQgYnl0ZXMgYW5kIGJsb2NrcywgYW5kIG9ubHkgY29udGFpbnMgYmFzaWMgZWxlbWVudHMuCisgICAgICAgIFRoZSBjb3JlIG9mICZHU3RyZWFtZXI7IGlzIGZ1bmN0aW9uYWwgZW5vdWdoIHRvIGV2ZW4gaW1wbGVtZW50CisgICAgICAgIGxvdy1sZXZlbCBzeXN0ZW0gdG9vbHMsIGxpa2UgY3AuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgQWxsIG9mIHRoZSBtZWRpYSBoYW5kbGluZyBmdW5jdGlvbmFsaXR5IGlzIHByb3ZpZGVkIGJ5IHBsdWdpbnMKKyAgICAgICAgZXh0ZXJuYWwgdG8gdGhlIGNvcmUuIFRoZXNlIHRlbGwgdGhlIGNvcmUgaG93IHRvIGhhbmRsZSBzcGVjaWZpYworICAgICAgICB0eXBlcyBvZiBtZWRpYS4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ic2VjdGlvbi1nb2Fscy10ZXN0YmVkIj4KKyAgICAgIDx0aXRsZT5Qcm92aWRlIGEgZnJhbWV3b3JrIGZvciBjb2RlYyBleHBlcmltZW50YXRpb248L3RpdGxlPgorICAgICAgPHBhcmE+CisJJkdTdHJlYW1lcjsgYWxzbyB3YW50cyB0byBiZSBhbiBlYXN5IGZyYW1ld29yayB3aGVyZSBjb2RlYworCWRldmVsb3BlcnMgY2FuIGV4cGVyaW1lbnQgd2l0aCBkaWZmZXJlbnQgYWxnb3JpdGhtcywgc3BlZWRpbmcgdXAKKwl0aGUgZGV2ZWxvcG1lbnQgb2Ygb3BlbiBhbmQgZnJlZSBtdWx0aW1lZGlhIGNvZGVjcyBsaWtlIDx1bGluaworCXVybD0iaHR0cDovL3d3dy54aXBoLm9yZy9vZ2cvaW5kZXguaHRtbCIgdHlwZT0iaHR0cCI+VGhlb3JhIGFuZAorCVZvcmJpczwvdWxpbms+LgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworPCEtLQorICA8L3NlY3QxPgorLS0+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL21hbnVhbC9pbnRyby1wcmVmYWNlLnhtbCBiL2RvY3MvbWFudWFsL2ludHJvLXByZWZhY2UueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMjMzOWUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL21hbnVhbC9pbnRyby1wcmVmYWNlLnhtbApAQCAtMCwwICsxLDkzIEBACisgIDwhLS0gIyMjIyMjIyMjIyMjIHNlY3QxICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWludHJvLXdobyIgeHJlZmxhYmVsPSJXaG8gU2hvdWxkIFJlYWQgVGhpcyBNYW51YWw/Ij4KKyAgICA8dGl0bGU+V2hvIHNob3VsZCByZWFkIHRoaXMgbWFudWFsPzwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBUaGlzIGJvb2sgaXMgYWJvdXQgJkdTdHJlYW1lcjsgZnJvbSBhbiBhcHBsaWNhdGlvbiBkZXZlbG9wZXIncyBwb2ludCBvZiB2aWV3OyBpdAorICAgICAgZGVzY3JpYmVzIGhvdyB0byB3cml0ZSBhICZHU3RyZWFtZXI7IGFwcGxpY2F0aW9uIHVzaW5nIHRoZSAmR1N0cmVhbWVyOworICAgICAgbGlicmFyaWVzIGFuZCB0b29scy4gRm9yIGFuIGV4cGxhbmF0aW9uIGFib3V0IHdyaXRpbmcgcGx1Z2lucywgd2UKKyAgICAgIHN1Z2dlc3QgdGhlIDx1bGluayB0eXBlPSJodHRwIgorICAgICAgdXJsPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9wd2cvaHRtbC9pbmRleC5odG1sIj5QbHVnaW4KKyAgICAgIFdyaXRlcnMgR3VpZGU8L3VsaW5rPi4KKyAgICA8L3BhcmE+ICAgICAKKyAgICA8cGFyYT4KKyAgICAgIEFsc28gY2hlY2sgb3V0IHRoZSBvdGhlciBkb2N1bWVudGF0aW9uIGF2YWlsYWJsZSBvbiB0aGUgPHVsaW5rIHR5cGU9Imh0dHAiCisgICAgICB1cmw9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RvY3VtZW50YXRpb24vIj4mR1N0cmVhbWVyOyB3ZWIgc2l0ZTwvdWxpbms+LgorICAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKyAgCisgIDwhLS0gIyMjIyMjIyMjIyMjIHNlY3QxICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWludHJvLXJlYWRpbmciIHhyZWZsYWJlbD0iUHJlbGltaW5hcnkgUmVhZGluZyI+CisgICAgPHRpdGxlPlByZWxpbWluYXJ5IHJlYWRpbmc8L3RpdGxlPgorICAgIDxwYXJhPjwhLS0gc3luY2hyb25pemUgd2l0aCBQV0cgLS0+CisgICAgICBJbiBvcmRlciB0byB1bmRlcnN0YW5kIHRoaXMgbWFudWFsLCB5b3UgbmVlZCB0byBoYXZlIGEgYmFzaWMKKyAgICAgIHVuZGVyc3RhbmRpbmcgb2YgdGhlIDxlbXBoYXNpcz5DIGxhbmd1YWdlPC9lbXBoYXNpcz4uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgU2luY2UgJkdTdHJlYW1lcjsgYWRoZXJlcyB0byB0aGUgR09iamVjdCBwcm9ncmFtbWluZyBtb2RlbCwgdGhpcyBndWlkZQorICAgICAgYWxzbyBhc3N1bWVzIHRoYXQgeW91IHVuZGVyc3RhbmQgdGhlIGJhc2ljcyBvZiA8dWxpbmsgdHlwZT0iaHR0cCIKKyAgICAgIHVybD0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3Qvc3RhYmxlLyI+R09iamVjdDwvdWxpbms+IGFuZCA8dWxpbmsgdHlwZT0iaHR0cCIKKyAgICAgIHVybD0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvc3RhYmxlLyI+Z2xpYjwvdWxpbms+IHByb2dyYW1taW5nLgorCisgICAgICBFc3BlY2lhbGx5LAorICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkdPYmplY3QgaW5zdGFudGlhdGlvbjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R09iamVjdCBwcm9wZXJ0aWVzIChzZXQvZ2V0KTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R09iamVjdCBjYXN0aW5nPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5HT2JqZWN0IHJlZmVyZWNpbmcvZGVyZWZlcmVuY2luZzwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Z2xpYiBtZW1vcnkgbWFuYWdlbWVudDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Z2xpYiBzaWduYWxzIGFuZCBjYWxsYmFja3M8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPmdsaWIgbWFpbiBsb29wPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisgIAorICA8IS0tICMjIyMjIyMjIyMjIyBzZWN0MSAjIyMjIyMjIyMjIyMjIC0tPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1pbnRyby1zdHJ1Y3R1cmUiPgorICAgIDx0aXRsZT5TdHJ1Y3R1cmUgb2YgdGhpcyBtYW51YWw8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgVG8gaGVscCB5b3UgbmF2aWdhdGUgdGhyb3VnaCB0aGlzIGd1aWRlLCBpdCBpcyBkaXZpZGVkIGludG8gc2V2ZXJhbCBsYXJnZQorICAgICAgcGFydHMuIEVhY2ggcGFydCBhZGRyZXNzZXMgYSBwYXJ0aWN1bGFyIGJyb2FkIHRvcGljIGNvbmNlcm5pbmcgJkdTdHJlYW1lcjsKKyAgICAgIGFwcGxpY3Rpb24gZGV2ZWxvcG1lbnQuIFRoZSBwYXJ0cyBvZiB0aGlzIGd1aWRlIGFyZSBsYWlkIG91dCBpbiB0aGUgZm9sbG93aW5nCisgICAgICBvcmRlcjoKKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIDx4cmVmIGxpbmtlbmQ9InBhcnQtaW50cm9kdWN0aW9uIi8+IGdpdmVzIHlvdSBhbiBvdmVydmlldyBvZiAmR1N0cmVhbWVyOywKKyAgICAgIGl0J3MgZGVzaWduIHByaW5jaXBsZXMgYW5kIGZvdW5kYXRpb25zLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgPHhyZWYgbGlua2VuZD0icGFydC1idWlsZGluZyIvPiBjb3ZlcnMgdGhlIGJhc2ljcyBvZiAmR1N0cmVhbWVyOworICAgICAgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcuIEF0IHRoZSBlbmQgb2YgdGhpcyBwYXJ0LCB5b3Ugc2hvdWxkIGJlCisgICAgICBhYmxlIHRvIGJ1aWxkIHlvdXIgb3duIGF1ZGlvIHBsYXllciB1c2luZyAmR1N0cmVhbWVyOworICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgSW4gPHhyZWYgbGlua2VuZD0icGFydC1hZHZhbmNlZCIvPiwgd2Ugd2lsbCBtb3ZlIG9uIHRvIGFkdmFuY2VkCisgICAgICBzdWJqZWN0cyB3aGljaCBtYWtlICZHU3RyZWFtZXI7IHN0YW5kIG91dCBvZiBpdHMgY29tcGV0aXRvcnMuIFdlCisgICAgICB3aWxsIGRpc2N1c3MgYXBwbGljYXRpb24tcGlwZWxpbmUgaW50ZXJhY3Rpb24gdXNpbmcgZHluYW1pYyBwYXJhbWV0ZXJzCisgICAgICBhbmQgaW50ZXJmYWNlcywgd2Ugd2lsbCBkaXNjdXNzIHRocmVhZGluZyBhbmQgdGhyZWFkZWQgcGlwZWxpbmVzLAorICAgICAgc2NoZWR1bGluZyBhbmQgY2xvY2tzIChhbmQgc3luY2hyb25pemF0aW9uKS4gTW9zdCBvZiB0aG9zZSB0b3BpY3MgYXJlCisgICAgICBub3QganVzdCB0aGVyZSB0byBpbnRyb2R1Y2UgeW91IHRvIHRoZWlyIEFQSSwgYnV0IHByaW1hcmlseSB0byBnaXZlCisgICAgICBhIGRlZXBlciBpbnNpZ2h0IGluIHNvbHZpbmcgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgcHJvYmxlbXMgd2l0aAorICAgICAgJkdTdHJlYW1lcjsgYW5kIHVuZGVyc3RhbmRpbmcgdGhlaXIgY29uY2VwdHMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBOZXh0LCBpbiA8eHJlZiBsaW5rZW5kPSJwYXJ0LWhpZ2hsZXZlbCIvPiwgd2Ugd2lsbCBnbyBpbnRvIGhpZ2hlci1sZXZlbAorICAgICAgcHJvZ3JhbW1pbmcgQVBJcyBmb3IgJkdTdHJlYW1lcjsuIFlvdSBkb24ndCBleGFjdGx5IG5lZWQgdG8ga25vdyBhbGwKKyAgICAgIHRoZSBkZXRhaWxzIGZyb20gdGhlIHByZXZpb3VzIHBhcnRzIHRvIHVuZGVyc3RhbmQgdGhpcywgYnV0IHlvdSB3aWxsCisgICAgICBuZWVkIHRvIHVuZGVyc3RhbmQgYmFzaWMgJkdTdHJlYW1lcjsgY29uY2VwdHMgbmV2ZXJ0aGVsZXNzLiBXZSB3aWxsLAorICAgICAgYW1vbmdzdCBvdGhlcnMsIGRpc2N1c3MgWE1MLCBwbGF5YmluIGFuZCBhdXRvcGx1Z2dlcnMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBGaW5hbGx5IGluIDx4cmVmIGxpbmtlbmQ9InBhcnQtYXBwZW5kaWNlcyIvPiwgeW91IHdpbGwgZmluZCBzb21lIHJhbmRvbQorICAgICAgaW5mb3JtYXRpb24gb24gaW50ZWdyYXRpbmcgd2l0aCBHTk9NRSwgS0RFLCBPUyBYIG9yIFdpbmRvd3MsIHNvbWUKKyAgICAgIGRlYnVnZ2luZyBoZWxwIGFuZCBnZW5lcmFsIHRpcHMgdG8gaW1wcm92ZSBhbmQgc2ltcGxpZnkgJkdTdHJlYW1lcjsKKyAgICAgIHByb2dyYW1taW5nLgorICAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2xpbmtlZC1lbGVtZW50cy5wbmcgYi9kb2NzL21hbnVhbC9saW5rZWQtZWxlbWVudHMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNzVhZGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL21hbnVhbC9saW5rZWQtZWxlbWVudHMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL21hbnVhbC54bWwgYi9kb2NzL21hbnVhbC9tYW51YWwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNjQ2NmUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL21hbnVhbC9tYW51YWwueG1sCkBAIC0wLDAgKzEsMjY1IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyAgICAgICAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIiBbCis8IUVOVElUWSAlIGltYWdlLWVudGl0aWVzIFNZU1RFTSAiaW1hZ2UuZW50aXRpZXMiPgorJWltYWdlLWVudGl0aWVzOworPCFFTlRJVFkgJSB2ZXJzaW9uLWVudGl0aWVzIFNZU1RFTSAidmVyc2lvbi5lbnRpdGllcyI+CisldmVyc2lvbi1lbnRpdGllczsKKzwhRU5USVRZICUgdXJsLWVudGl0aWVzIFNZU1RFTSAidXJsLmVudGl0aWVzIj4KKyV1cmwtZW50aXRpZXM7CisKKzwhRU5USVRZIEVYQUZPT1QgIgorPGZvb3Rub3RlPgorICA8cGFyYT4KKyAgICBUaGUgY29kZSBmb3IgdGhpcyBleGFtcGxlIGlzIGF1dG9tYXRpY2FsbHkgZXh0cmFjdGVkIGZyb20KKyAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgYnVpbHQgdW5kZXIgPGZpbGVuYW1lPmV4YW1wbGVzL21hbnVhbDwvZmlsZW5hbWU+CisgICAgaW4gdGhlIEdTdHJlYW1lciB0YXJiYWxsLgorICA8L3BhcmE+Cis8L2Zvb3Rub3RlPgorIj4KKworPCFFTlRJVFkgVElUTEVQQUdFICAgICAgICAgICAgU1lTVEVNICJ0aXRsZXBhZ2UueG1sIj4KKworPCEtLSBQYXJ0IDE6IE92ZXJ2aWV3IC0tPgorPCFFTlRJVFkgSU5UUk8gICAgICAgICAgICAgICAgU1lTVEVNICJpbnRyby1wcmVmYWNlLnhtbCI+CisKKzwhRU5USVRZIEdTVFJFQU1FUiAgICAgICAgICAgIFNZU1RFTSAiaW50cm8tZ3N0cmVhbWVyLnhtbCI+Cis8IUVOVElUWSBNT1RJVkFUSU9OICAgICAgICAgICBTWVNURU0gImludHJvLW1vdGl2YXRpb24ueG1sIj4KKzwhRU5USVRZIENPTkNFUFRTICAgICAgICAgICAgIFNZU1RFTSAiaW50cm8tYmFzaWNzLnhtbCI+CisKKzwhLS0gUGFydCAyOiBCYXNpYyBDb25jZXB0cyAtLT4KKzwhRU5USVRZIElOSVQgICAgICAgICAgICAgICAgIFNZU1RFTSAiYmFzaWNzLWluaXQueG1sIj4KKzwhRU5USVRZIEVMRU1FTlRTICAgICAgICAgICAgIFNZU1RFTSAiYmFzaWNzLWVsZW1lbnRzLnhtbCI+Cis8IUVOVElUWSBCSU5TICAgICAgICAgICAgICAgICBTWVNURU0gImJhc2ljcy1iaW5zLnhtbCI+Cis8IUVOVElUWSBCVVMgICAgICAgICAgICAgICAgICBTWVNURU0gImJhc2ljcy1idXMueG1sIj4KKzwhRU5USVRZIFBBRFMgICAgICAgICAgICAgICAgIFNZU1RFTSAiYmFzaWNzLXBhZHMueG1sIj4KKzwhRU5USVRZIERBVEEgICAgICAgICAgICAgICAgIFNZU1RFTSAiYmFzaWNzLWRhdGEueG1sIj4KKzwhRU5USVRZIEhFTExPV09STEQgICAgICAgICAgIFNZU1RFTSAiYmFzaWNzLWhlbGxvd29ybGQueG1sIj4KKworPCEtLSBQYXJ0IDM6IEFkdmFuY2VkIENvbmNlcHRzIC0tPgorPCFFTlRJVFkgUVVFUllFVkVOVFMgICAgICAgICAgU1lTVEVNICJhZHZhbmNlZC1wb3NpdGlvbi54bWwiPgorPCFFTlRJVFkgTUVUQURBVEEgICAgICAgICAgICAgU1lTVEVNICJhZHZhbmNlZC1tZXRhZGF0YS54bWwiPgorPCFFTlRJVFkgSU5URVJGQUNFUyAgICAgICAgICAgU1lTVEVNICJhZHZhbmNlZC1pbnRlcmZhY2VzLnhtbCI+Cis8IUVOVElUWSBDTE9DS1MgICAgICAgICAgICAgICBTWVNURU0gImFkdmFuY2VkLWNsb2Nrcy54bWwiPgorPCFFTlRJVFkgRFBBUkFNUyAgICAgICAgICAgICAgU1lTVEVNICJhZHZhbmNlZC1kcGFyYW1zLnhtbCI+Cis8IUVOVElUWSBUSFJFQURTICAgICAgICAgICAgICBTWVNURU0gImFkdmFuY2VkLXRocmVhZHMueG1sIj4KKzwhRU5USVRZIEFVVE9QTFVHR0lORyAgICAgICAgIFNZU1RFTSAiYWR2YW5jZWQtYXV0b3BsdWdnaW5nLnhtbCI+Cis8IUVOVElUWSBEQVRBQUNDRVNTICAgICAgICAgICBTWVNURU0gImFkdmFuY2VkLWRhdGFhY2Nlc3MueG1sIj4KKworPCEtLSBQYXJ0IDQ6IEhpZ2hlci1sZXZlbCBpbnRlcmZhY2VzIC0tPgorPCFFTlRJVFkgWE1MICAgICAgICAgICAgICAgICAgU1lTVEVNICJoaWdobGV2ZWwteG1sLnhtbCI+Cis8IUVOVElUWSBDT01QT05FTlRTICAgICAgICAgICBTWVNURU0gImhpZ2hsZXZlbC1jb21wb25lbnRzLnhtbCI+CisKKzwhLS0gQXBwZW5kaWNlcyAtLT4KKzwhRU5USVRZIENIRUNLTElTVCAgICAgICAgICAgIFNZU1RFTSAiYXBwZW5kaXgtY2hlY2tsaXN0LnhtbCI+Cis8IUVOVElUWSBQT1JUSU5HICAgICAgICAgICAgICBTWVNURU0gImFwcGVuZGl4LXBvcnRpbmcueG1sIj4KKzwhRU5USVRZIElOVEVHUkFUSU9OICAgICAgICAgIFNZU1RFTSAiYXBwZW5kaXgtaW50ZWdyYXRpb24ueG1sIj4KKzwhRU5USVRZIExJQ0VOU0lORyAgICAgICAgICAgIFNZU1RFTSAiYXBwZW5kaXgtbGljZW5zaW5nLnhtbCI+Cis8IUVOVElUWSBRVU9URVMgICAgICAgICAgICAgICBTWVNURU0gImFwcGVuZGl4LXF1b3Rlcy54bWwiPgorCis8IUVOVElUWSBHU3RyZWFtZXIgICAgIjxhcHBsaWNhdGlvbj5HU3RyZWFtZXI8L2FwcGxpY2F0aW9uPiI+Cis8IUVOVElUWSBHc3RQV0cgICAgICAgIjxlbXBoYXNpcz5HU3RyZWFtZXIgUGx1Z2luIFdyaXRlcidzIEd1aWRlPC9lbXBoYXNpcz4iPgorXT4KKworPGJvb2sgaWQ9ImluZGV4Ij4KKyAgJlRJVExFUEFHRTsKKyAgCis8IS0tICMjIyMjIyMjIyMjIyMgSW50cm9kdWN0aW9uICMjIyMjIyMjIyMjIyMjIyAtLT4KKworPHByZWZhY2U+PHRpdGxlPkZvcmV3b3JkPC90aXRsZT4KKyAgICAgIDxwYXJhPjwhLS0gc3luY2hyb25pemUgd2l0aCBQV0cgLS0+CisgICAgICAgICZHU3RyZWFtZXI7IGlzIGFuIGV4dHJlbWVseSBwb3dlcmZ1bCBhbmQgdmVyc2F0aWxlIGZyYW1ld29yayBmb3IKKyAgICAgICAgY3JlYXRpbmcgc3RyZWFtaW5nIG1lZGlhIGFwcGxpY2F0aW9ucy4gTWFueSBvZiB0aGUgdmlydHVlcyBvZiB0aGUKKyAgICAgICAgJkdTdHJlYW1lcjsgZnJhbWV3b3JrIGNvbWUgZnJvbSBpdHMgbW9kdWxhcml0eTogJkdTdHJlYW1lcjsgY2FuCisgICAgICAgIHNlYW1sZXNzbHkgaW5jb3Jwb3JhdGUgbmV3IHBsdWdpbiBtb2R1bGVzLiBCdXQgYmVjYXVzZSBtb2R1bGFyaXR5CisgICAgICAgIGFuZCBwb3dlciBvZnRlbiBjb21lIGF0IGEgY29zdCBvZiBncmVhdGVyIGNvbXBsZXhpdHksIHdyaXRpbmcgbmV3CisgICAgICAgIGFwcGxpY2F0aW9ucyBpcyBub3QgYWx3YXlzIGVhc3kuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBndWlkZSBpcyBpbnRlbmRlZCB0byBoZWxwIHlvdSB1bmRlcnN0YW5kIHRoZSAmR1N0cmVhbWVyOworICAgICAgICBmcmFtZXdvcmsgKHZlcnNpb24gJkdTVF9WRVJTSU9OOykgc28geW91IGNhbiBkZXZlbG9wIGFwcGxpY2F0aW9ucworICAgICAgICBiYXNlZCBvbiBpdC4gVGhlIGZpcnN0IGNoYXB0ZXJzIHdpbGwgZm9jdXMgb24gZGV2ZWxvcG1lbnQgb2YgYQorICAgICAgICBzaW1wbGUgYXVkaW8gcGxheWVyLCB3aXRoIG11Y2ggZWZmb3J0IGdvaW5nIGludG8gaGVscGluZyB5b3UKKyAgICAgICAgdW5kZXJzdGFuZCAmR1N0cmVhbWVyOyBjb25jZXB0cy4gTGF0ZXIgY2hhcHRlcnMgd2lsbCBnbyBpbnRvCisgICAgICAgIG1vcmUgYWR2YW5jZWQgdG9waWNzIHJlbGF0ZWQgdG8gbWVkaWEgcGxheWJhY2ssIGJ1dCBhbHNvIGF0CisgICAgICAgIG90aGVyIGZvcm1zIG9mIG1lZGlhIHByb2Nlc3NpbmcgKGNhcHR1cmUsIGVkaXRpbmcsIGV0Yy4pLgorICAgICAgPC9wYXJhPgorPC9wcmVmYWNlPgorCisKKzxwcmVmYWNlPjx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorCisgICZJTlRSTzsKKworPC9wcmVmYWNlPgorCis8IS0tICMjIyMjIyMjIyMjIyMgT3ZlcnZpZXcgLSBwYXJ0ICMjIyMjIyMjIyMjIyMjIyAtLT4KKworICA8cGFydCBpZD0icGFydC1pbnRyb2R1Y3Rpb24iPgorICAgIDx0aXRsZT5BYm91dCBHU3RyZWFtZXI8L3RpdGxlPgorICAgIDxwYXJ0aW50cm8+CisgICAgICA8cGFyYT4KKyAgICBUaGlzIHBhcnQgZ2l2ZXMgeW91IGFuIG92ZXJ2aWV3IG9mIHRoZSB0ZWNobm9sb2dpZXMgZGVzY3JpYmVkIGluCisgICAgdGhpcyBib29rLgorICAgICAgPC9wYXJhPgorICAgIDwvcGFydGludHJvPgorCisgICAgJkdTVFJFQU1FUjsKKyAgICAmTU9USVZBVElPTjsKKyAgICAmQ09OQ0VQVFM7CisKKyAgPC9wYXJ0PgorCis8IS0tICMjIyMjIyMjIyMjIyBCYXNpYyBjb25jZXB0cyAtIHBhcnQgIyMjIyMjIyMjIyMjIyAtLT4KKworICA8cGFydCBpZD0icGFydC1idWlsZGluZyI+CisgICAgPHRpdGxlPkJ1aWxkaW5nIGFuIEFwcGxpY2F0aW9uPC90aXRsZT4KKyAgICA8cGFydGludHJvPgorICAgICAgPHBhcmE+CisgICAgICAgIEluIHRoZXNlIGNoYXB0ZXJzLCB3ZSB3aWxsIGRpc2N1c3MgdGhlIGJhc2ljIGNvbmNlcHRzIG9mICZHU3RyZWFtZXI7CisgICAgICAgIGFuZCB0aGUgbW9zdC11c2VkIG9iamVjdHMsIHN1Y2ggYXMgZWxlbWVudHMsIHBhZHMgYW5kIGJ1ZmZlcnMuIFdlCisgICAgICAgIHdpbGwgdXNlIGEgdmlzdWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZXNlIG9iamVjdHMgc28gdGhhdCB3ZSBjYW4KKyAgICAgICAgdmlzdWFsaXplIHRoZSBtb3JlIGNvbXBsZXggcGlwZWxpbmVzIHlvdSB3aWxsIGxlYXJuIHRvIGJ1aWxkIGxhdGVyCisgICAgICAgIG9uLiBZb3Ugd2lsbCBnZXQgYSBmaXJzdCBnbGFuY2UgYXQgdGhlICZHU3RyZWFtZXI7IEFQSSwgd2hpY2ggc2hvdWxkCisgICAgICAgIGJlIGVub3VnaCBmb3IgYnVpbGRpbmcgZWxlbWVudGFyeSBhcHBsaWNhdGlvbnMuIExhdGVyIG9uIGluIHRoaXMKKyAgICAgICAgcGFydCwgeW91IHdpbGwgYWxzbyBsZWFybiB0byBidWlsZCBhIGJhc2ljIGNvbW1hbmQtbGluZSBhcHBsaWNhdGlvbi4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBOb3RlIHRoYXQgdGhpcyBwYXJ0IHdpbGwgZ2l2ZSBhIGxvb2sgaW50byB0aGUgbG93LWxldmVsIEFQSSBhbmQKKyAgICAgICAgY29uY2VwdHMgb2YgJkdTdHJlYW1lcjsuIE9uY2UgeW91J3JlIGdvaW5nIHRvIGJ1aWxkIGFwcGxpY2F0aW9ucywKKyAgICAgICAgeW91IG1pZ2h0IHdhbnQgdG8gdXNlIGhpZ2hlci1sZXZlbCBBUElzLiBUaG9zZSB3aWxsIGJlIGRpc2N1c3NlZAorICAgICAgICBsYXRlciBvbiBpbiB0aGlzIG1hbnVhbC4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3BhcnRpbnRybz4KKworICAgICZJTklUOworICAgICZFTEVNRU5UUzsKKyAgICAmQklOUzsKKyAgICAmQlVTOworICAgICZQQURTOworICAgICZEQVRBOworICAgICZIRUxMT1dPUkxEOworCisgIDwvcGFydD4KKworPCEtLSAjIyMjIyMjIyMjIyMgQWR2YW5jZWQgR1N0cmVhbWVyIC0gcGFydCAjIyMjIyMjIyMjIyMjIC0tPgorCisgIDxwYXJ0IGlkPSJwYXJ0LWFkdmFuY2VkIj4KKyAgICA8dGl0bGU+QWR2YW5jZWQgJkdTdHJlYW1lcjsgY29uY2VwdHM8L3RpdGxlPgorICAgIDxwYXJ0aW50cm8+CisgICAgICA8cGFyYT4KKyAgICAgICAgSW4gdGhpcyBwYXJ0IHdlIHdpbGwgY292ZXIgdGhlIG1vcmUgYWR2YW5jZWQgZmVhdHVyZXMgb2YgJkdTdHJlYW1lcjsuCisJV2l0aCB0aGUgYmFzaWNzIHlvdSBsZWFybmVkIGluIHRoZSBwcmV2aW91cyBwYXJ0IHlvdSBzaG91bGQgYmUgCisJYWJsZSB0byBjcmVhdGUgYSA8ZW1waGFzaXM+c2ltcGxlPC9lbXBoYXNpcz4gYXBwbGljYXRpb24uIEhvd2V2ZXIsCisgICAgICAgICZHU3RyZWFtZXI7IHByb3ZpZGVzIG11Y2ggbW9yZSBjYW5keSB0aGFuIGp1c3QgdGhlIGJhc2ljcyBvZiBwbGF5aW5nCisgICAgICAgIGJhY2sgYXVkaW8gZmlsZXMuIEluIHRoaXMgY2hhcHRlciwgeW91IHdpbGwgbGVhcm4gbW9yZSBvZiB0aGUKKwlsb3ctbGV2ZWwgZmVhdHVyZXMgYW5kIGludGVybmFscyBvZiAmR1N0cmVhbWVyOy4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBTb21lIHBhcnRzIG9mIHRoaXMgcGFydCB3aWxsIHNlcnZlIG1vc3RseSBhcyBhbiBleHBsYW5hdGlvbiBvZgorICAgICAgICBob3cgJkdTdHJlYW1lcjsgd29ya3MgaW50ZXJuYWxseTsgdGhleSBhcmUgbm90IGFjdHVhbGx5IG5lZWRlZCBmb3IKKyAgICAgICAgYWN0dWFsIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50LiBUaGlzIGluY2x1ZGVzIGNoYXB0ZXJzIHN1Y2ggYXMgdGhlCisgICAgICAgIG9uZXMgY292ZXJpbmcgc2NoZWR1bGluZywgYXV0b3BsdWdnaW5nIGFuZCBzeW5jaHJvbml6YXRpb24uIE90aGVyCisgICAgICAgIGNoYXB0ZXJzLCBob3dldmVyLCBkaXNjdXNzIG1vcmUgYWR2YW5jZWQgd2F5cyBvZgorICAgICAgICBwaXBlbGluZS1hcHBsaWNhdGlvbiBpbnRlcmFjdGlvbiwgYW5kIGNhbiB0dXJuIG91dCB0byBiZSB2ZXJ5IHVzZWZ1bAorICAgICAgICBmb3IgY2VydGFpbiBhcHBsaWNhdGlvbnMuIFRoaXMgaW5jbHVkZXMgdGhlIGNoYXB0ZXJzIG9uIG1ldGFkYXRhLAorICAgICAgICBxdWVyeWluZyBhbmQgZXZlbnRzLCBpbnRlcmZhY2VzLCBkeW5hbWljIHBhcmFtZXRlcnMgYW5kIHBpcGVsaW5lCisgICAgICAgIGRhdGEgbWFuaXB1bGF0aW9uLgorICAgICAgPC9wYXJhPgorICAgIDwvcGFydGludHJvPgorCisgICAgJlFVRVJZRVZFTlRTOworICAgICZNRVRBREFUQTsKKyAgICAmSU5URVJGQUNFUzsKKyAgICAmQ0xPQ0tTOworICAgICZEUEFSQU1TOworICAgICZUSFJFQURTOworICAgICZBVVRPUExVR0dJTkc7CisgICAgJkRBVEFBQ0NFU1M7CisKKyAgPC9wYXJ0PgorCis8IS0tICMjIyMjIyMjIyMjIyBIaWdoZXItbGV2ZWwgQVBJcyBpbiBHU3RyZWFtZXIgLSBwYXJ0ICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgPHBhcnQgaWQ9InBhcnQtaGlnaGxldmVsIj4KKyAgICA8dGl0bGU+SGlnaGVyLWxldmVsIGludGVyZmFjZXMgZm9yICZHU3RyZWFtZXI7IGFwcGxpY2F0aW9uczwvdGl0bGU+CisgICAgPHBhcnRpbnRybz4KKyAgICAgIDxwYXJhPgorICAgICAgICBJbiB0aGUgcHJldmlvdXMgdHdvIHBhcnRzLCB5b3UgaGF2ZSBsZWFybmVkIG1hbnkgb2YgdGhlIGludGVybmFscworICAgICAgICBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBsb3ctbGV2ZWwgaW50ZXJmYWNlcyBpbnRvICZHU3RyZWFtZXI7CisgICAgICAgIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nLiBNYW55IHBlb3BsZSB3aWxsLCBob3dldmVyLCBub3QgbmVlZCBzbworICAgICAgICBtdWNoIGNvbnRyb2wgKGFuZCBhcyBtdWNoIGNvZGUpLCBidXQgd2lsbCBwcmVmZXIgdG8gdXNlIGEgc3RhbmRhcmQKKyAgICAgICAgcGxheWJhY2sgaW50ZXJmYWNlIHRoYXQgZG9lcyBtb3N0IG9mIHRoZSBkaWZmaWN1bHQgaW50ZXJuYWxzIGZvcgorICAgICAgICB0aGVtLiBJbiB0aGlzIGNoYXB0ZXIsIHdlIHdpbGwgaW50cm9kdWNlIHlvdSBpbnRvIHRoZSBjb25jZXB0IG9mCisgICAgICAgIGF1dG9wbHVnZ2VycywgcGxheWJhY2sgbWFuYWdpbmcgZWxlbWVudHMsIFhNTC1iYXNlZCBwaXBlbGluZXMgYW5kCisgICAgICAgIG90aGVyIHN1Y2ggdGhpbmdzLiBUaG9zZSBoaWdoZXItbGV2ZWwgaW50ZXJmYWNlcyBhcmUgaW50ZW5kZWQgdG8KKyAgICAgICAgc2ltcGxpZnkgJkdTdHJlYW1lcjstYmFzZWQgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcuIFRoZXkgZG8sIGhvd2V2ZXIsCisgICAgICAgIGFsc28gcmVkdWNlIHRoZSBmbGV4aWJpbGl0eS4gSXQgaXMgdXAgdG8gdGhlIGFwcGxpY2F0aW9uIGRldmVsb3BlcgorICAgICAgICB0byBjaG9vc2Ugd2hpY2ggaW50ZXJmYWNlIGhlIHdpbGwgd2FudCB0byB1c2UuCisgICAgICA8L3BhcmE+CisgICAgPC9wYXJ0aW50cm8+CisKKyAgICAmQ09NUE9ORU5UUzsKKyAgICAmWE1MOworCisgIDwvcGFydD4KKworPCEtLSAjIyMjIyMjIyMjIyMgQXBwZW5kaWNlcyAtIHBhcnQgIyMjIyMjIyMjIyMjIyAtLT4KKworICA8cGFydCBpZD0icGFydC1hcHBlbmRpY2VzIj4KKyAgICA8dGl0bGU+QXBwZW5kaWNlczwvdGl0bGU+CisgICAgPHBhcnRpbnRybz4KKyAgICAgIDxwYXJhPgorICAgICAgICBCeSBub3csIHlvdSd2ZSBsZWFybmVkIGFsbCBhYm91dCB0aGUgaW50ZXJuYWxzIG9mICZHU3RyZWFtZXI7IGFuZAorICAgICAgICBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyB1c2luZyB0aGUgJkdTdHJlYW1lcjsgZnJhbWV3b3JrLiBUaGlzIHBhcnQKKyAgICAgICAgd2lsbCBnbyBpbnRvIHNvbWUgcmFuZG9tIGJpdHMgdGhhdCBhcmUgdXNlZnVsIHRvIGtub3cgaWYgeW91J3JlCisgICAgICAgIGdvaW5nIHRvIHVzZSAmR1N0cmVhbWVyOyBmb3Igc2VyaW91cyBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZy4gSXQKKyAgICAgICAgd2lsbCB0b3VjaCB1cG9uIHRoaW5ncyByZWxhdGVkIHRvIGludGVncmF0aW9uIHdpdGggcG9wdWxhciBkZXNrdG9wCisgICAgICAgIGVudmlyb25tZW50cyB0aGF0IHdlIHJ1biBvbiAoR05PTUUsIEtERSwgT1MgWCwgV2luZG93cyksIGl0IHdpbGwKKyAgICAgICAgc2hvcnRseSBleHBsYWluIGhvdyBhcHBsaWNhdGlvbnMgaW5jbHVkZWQgd2l0aCAmR1N0cmVhbWVyOyBjYW4gaGVscAorICAgICAgICBtYWtpbmcgeW91ciBsaWZlIGVhc2llciwgYW5kIHNvbWUgaW5mb3JtYXRpb24gb24gZGVidWdnaW5nLgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIEluIGFkZGl0aW9uLCB3ZSBhbHNvIHByb3ZpZGUgYSBwb3J0aW5nIGd1aWRlIHdoaWNoIHdpbGwgZXhwbGFpbgorICAgICAgICBlYXNpbHkgaG93IHRvIHBvcnQgJkdTdHJlYW1lcjstMC44IGFwcGxpY2F0aW9ucyB0byAmR1N0cmVhbWVyOy0wLjEwLgorICAgICAgPC9wYXJhPgorICAgIDwvcGFydGludHJvPgorCisgICAgPCEtLQorICAgIElkZWE6CisgICAgKiBEZWJ1Z2dpbmcgYW5kIGVycm9yIGhhbmRsaW5nCisgICAgIC0gJ2Vycm9yJyBzaWduYWwgaW4gcGlwZWxpbmVzCisgICAgIC0gY2hlY2tpbmcgcmV0dXJuIHZhbHVlcyBhbmQgaG93IHRvIGhhbmRsZSB0aGVtCisgICAgIC0gdXNpbmcgc2lnbmFscyBmb3IgcGlwZWxpbmUgc3RhdGVzCisgICAgIC0gZ3N0LWRlYnVnCisgICAgIC0gcHJvZ3JhbXMKKyAgICAqIERlc2t0b3AgaW50ZWdyYXRpb24KKyAgICAgLSBMaW51eC9VTklYCisJLiB7eCx4dn1pbWFnZXNpbmsKKwkuIHtvc3MsYWxzYX1zaW5rCisJLiB7djRsLHY0bDIsb3NzLGFsc2F9c3JjCisgICAgIC0gR05PTUUKKwkuIEdDb25mICh7dmlkZW8sYXVkaW99e3NyYyxzaW5rfSkKKwkuIGdub21ldmZzc3JjLCBnbm9tZXZmc3NpbmsKKwkuIHBvcHQKKwkuIGFwcCBleGFtcGxlcyAoUkIsIFRvdGVtLCBnbm9tZS1tZWRpYSwgLi4uKQorICAgICAtIEtERQorCS4ga2lvc3JjCisJLiBhcHAgZXhhbXBsZXMgKEp1SywgQW1hcm9LKQorCS4gYXNrIFNjb3R0L01hcmsKKyAgICAgLSBNYWMgT1MgWAorCS4gbmF0aXZlIHZpZGVvL2F1ZGlvIHNpbmsKKyAgICAgLSBXaW5kb3dzCisJLiBidWlsZCBldGMuCisgICAgKiBRdW90ZXMgZnJvbSBkZXZzCisgICAgIC0gdGFibGUgcGxlYXNlLi4uCisgICAgLS0+CisKKyAgICAmQ0hFQ0tMSVNUOworICAgICZQT1JUSU5HOworICAgICZJTlRFR1JBVElPTjsKKyAgICAmTElDRU5TSU5HOworICAgICZRVU9URVM7CisKKyAgPC9wYXJ0PgorPC9ib29rPgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvbWltZS13b3JsZC5wbmcgYi9kb2NzL21hbnVhbC9taW1lLXdvcmxkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2I5NTU3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9tYW51YWwvbWltZS13b3JsZC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvc2ltcGxlLXBsYXllci5wbmcgYi9kb2NzL21hbnVhbC9zaW1wbGUtcGxheWVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2IzY2ExCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9tYW51YWwvc2ltcGxlLXBsYXllci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvc2luay1lbGVtZW50LnBuZyBiL2RvY3MvbWFudWFsL3NpbmstZWxlbWVudC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE0ZWFhMQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbWFudWFsL3NpbmstZWxlbWVudC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvc3JjLWVsZW1lbnQucG5nIGIvZG9jcy9tYW51YWwvc3JjLWVsZW1lbnQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3Njk5ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL21hbnVhbC9zcmMtZWxlbWVudC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvc3RhdGUtZGlhZ3JhbS5maWcgYi9kb2NzL21hbnVhbC9zdGF0ZS1kaWFncmFtLmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjEwZTVkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9tYW51YWwvc3RhdGUtZGlhZ3JhbS5maWcKQEAgLTAsMCArMSw0NiBAQAorI0ZJRyAzLjIKK0xhbmRzY2FwZQorQ2VudGVyCitJbmNoZXMKK0xldHRlciAgCisxMDAuMDAKK1NpbmdsZQorLTIKKzEyMDAgMgorMSAzIDAgMSAwIDcgNTAgMCAtMSAwLjAwMCAxIDAuMDAwMCAzNjAwIDE5NTAgNDgwIDQ4MCAzNjAwIDE5NTAgMzk3NSAyMjUwCisxIDMgMCAxIDAgNyA1MCAwIC0xIDAuMDAwIDEgMC4wMDAwIDM2MDAgMzE1MCA0ODAgNDgwIDM2MDAgMzE1MCAzOTc1IDM0NTAKKzEgMyAwIDEgMCA3IDUwIDAgLTEgMC4wMDAgMSAwLjAwMDAgMzYwMCA0MzUwIDQ4MCA0ODAgMzYwMCA0MzUwIDM5NzUgNDY1MAorMSAzIDAgMSAwIDcgNTAgMCAtMSAwLjAwMCAxIDAuMDAwMCA0ODc1IDQzNTAgNDgwIDQ4MCA0ODc1IDQzNTAgNTI1MCA0NjUwCisyIDEgMCAxIDAgNyA1MCAwIC0xIDAuMDAwIDAgMCAtMSAxIDAgMgorCTEgMSAxLjAwIDYwLjAwIDEyMC4wMAorCSAzNjAwIDkwMCAzNjAwIDE1MDAKKzIgMiAwIDEgNyA3IDUwIDAgLTEgMC4wMDAgMCAwIC0xIDAgMCA1CisJIDEzNTAgNzUwIDU1NTAgNzUwIDU1NTAgNTEwMCAxMzUwIDUxMDAgMTM1MCA3NTAKKzMgMiAwIDEgMCA3IDUwIDAgLTEgMC4wMDAgMCAxIDAgMworCTEgMSAxLjAwIDYwLjAwIDEyMC4wMAorCSAzMTUwIDE4NzUgMjcwMCAyNDAwIDMxNTAgMjkyNQorCSAwLjAwMCAtMS4wMDAgMC4wMDAKKzMgMiAwIDEgMCA3IDUwIDAgLTEgMC4wMDAgMCAxIDAgMworCTEgMSAxLjAwIDYwLjAwIDEyMC4wMAorCSAzMTUwIDMxNTAgMjcwMCAzNjc1IDMxNTAgNDIwMAorCSAwLjAwMCAtMS4wMDAgMC4wMDAKKzMgMiAwIDEgMCA3IDUwIDAgLTEgMC4wMDAgMCAxIDAgMworCTEgMSAxLjAwIDYwLjAwIDEyMC4wMAorCSAzNzUwIDM5MDAgNDI3NSAzNjc1IDQ4MDAgMzkwMAorCSAwLjAwMCAtMS4wMDAgMC4wMDAKKzMgMiAwIDEgMCA3IDUwIDAgLTEgMC4wMDAgMCAxIDAgMworCTEgMSAxLjAwIDYwLjAwIDEyMC4wMAorCSA0ODAwIDQ4MDAgNDI3NSA1MDI1IDM3NTAgNDgwMAorCSAwLjAwMCAtMS4wMDAgMC4wMDAKKzMgMiAwIDEgMCA3IDUwIDAgLTEgMC4wMDAgMCAxIDAgMworCTEgMSAxLjAwIDYwLjAwIDEyMC4wMAorCSA1MTc1IDM5NzUgNTE3NSAyNDc1IDQwNTAgMTcyNQorCSAwLjAwMCAtMS4wMDAgMC4wMDAKKzMgMiAwIDEgMCA3IDUwIDAgLTEgMC4wMDAgMCAxIDAgMworCTEgMSAxLjAwIDYwLjAwIDEyMC4wMAorCSAzMjI1IDQ2NTAgMTU3NSAzMzAwIDMxNTAgMTcyNQorCSAwLjAwMCAtMS4wMDAgMC4wMDAKKzQgMCAwIDUwIDAgMCAxMiAwLjAwMDAgNCAxMzUgNDgwIDMzNzUgMjAyNSBOVUxMXDAwMQorNCAwIDAgNTAgMCAwIDEyIDAuMDAwMCA0IDEzNSA2NDUgMzMwMCAzMjI1IFJFQURZXDAwMQorNCAwIDAgNTAgMCAwIDEyIDAuMDAwMCA0IDEzNSA4MTAgMzIyNSA0NDI1IFBMQVlJTkdcMDAxCis0IDAgMCA1MCAwIDAgMTIgMC4wMDAwIDQgMTM1IDczNSA0NTAwIDQ0MjUgUEFVU0VEXDAwMQpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvdGhyZWFkLWJ1ZmZlcmluZy5wbmcgYi9kb2NzL21hbnVhbC90aHJlYWQtYnVmZmVyaW5nLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDg4NmMxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9tYW51YWwvdGhyZWFkLWJ1ZmZlcmluZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvdGhyZWFkLXN5bmNocm9uaXppbmcucG5nIGIvZG9jcy9tYW51YWwvdGhyZWFkLXN5bmNocm9uaXppbmcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YzBhN2IKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL21hbnVhbC90aHJlYWQtc3luY2hyb25pemluZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvdGl0bGVwYWdlLnhtbCBiL2RvY3MvbWFudWFsL3RpdGxlcGFnZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg4MzM4NAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbWFudWFsL3RpdGxlcGFnZS54bWwKQEAgLTAsMCArMSw2OSBAQAorPGJvb2tpbmZvPgorICAKKyAgPGF1dGhvcmdyb3VwPgorICAgIDxhdXRob3I+CisgICAgICA8Zmlyc3RuYW1lPldpbTwvZmlyc3RuYW1lPgorICAgICAgPHN1cm5hbWU+VGF5bWFuczwvc3VybmFtZT4KKyAgICAgIDxhdXRob3JibHVyYj4KKwk8cGFyYT4KKwkgIDxlbWFpbD53aW0udGF5bWFuc0BjaGVsbG8uYmU8L2VtYWlsPgorCTwvcGFyYT4KKyAgICAgIDwvYXV0aG9yYmx1cmI+CisgICAgPC9hdXRob3I+CisgICAgCisgICAgPGF1dGhvcj4KKyAgICAgIDxmaXJzdG5hbWU+U3RldmU8L2ZpcnN0bmFtZT4KKyAgICAgIDxzdXJuYW1lPkJha2VyPC9zdXJuYW1lPgorICAgICAgPGF1dGhvcmJsdXJiPgorCTxwYXJhPgorCSAgPGVtYWlsPnN0ZXZlYmFrZXJfb3JnQHlhaG9vLmNvLnVrPC9lbWFpbD4KKwk8L3BhcmE+CisgICAgICA8L2F1dGhvcmJsdXJiPgorICAgIDwvYXV0aG9yPgorICAgIAorICAgIDxhdXRob3I+CisgICAgICA8Zmlyc3RuYW1lPkFuZHk8L2ZpcnN0bmFtZT4KKyAgICAgIDxzdXJuYW1lPldpbmdvPC9zdXJuYW1lPgorICAgICAgPGF1dGhvcmJsdXJiPgorCTxwYXJhPgorCSAgPGVtYWlsPndpbmdvQHBvYm94LmNvbTwvZW1haWw+CisJPC9wYXJhPgorICAgICAgPC9hdXRob3JibHVyYj4KKyAgICA8L2F1dGhvcj4KKyAgICAKKyAgICA8YXV0aG9yPgorICAgICAgPGZpcnN0bmFtZT5Sb25hbGQ8L2ZpcnN0bmFtZT4KKyAgICAgIDxvdGhlcm5hbWU+Uy48L290aGVybmFtZT4KKyAgICAgIDxzdXJuYW1lPkJ1bHRqZTwvc3VybmFtZT4KKyAgICAgIDxhdXRob3JibHVyYj4KKwk8cGFyYT4KKwkgIDxlbWFpbD5yYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ8L2VtYWlsPgorCTwvcGFyYT4KKyAgICAgIDwvYXV0aG9yYmx1cmI+CisgICAgPC9hdXRob3I+CisKKyAgICA8YXV0aG9yPgorICAgICAgPGZpcnN0bmFtZT5TdGVmYW48L2ZpcnN0bmFtZT4KKyAgICAgIDxzdXJuYW1lPktvc3Q8L3N1cm5hbWU+CisgICAgICA8YXV0aG9yYmx1cmI+CisJPHBhcmE+CisJICA8ZW1haWw+ZW5zb25pY0B1c2Vycy5zZi5uZXQ8L2VtYWlsPgorCTwvcGFyYT4KKyAgICAgIDwvYXV0aG9yYmx1cmI+CisgICAgPC9hdXRob3I+CisgIDwvYXV0aG9yZ3JvdXA+CisKKyAgPGxlZ2Fsbm90aWNlIGlkPSJtaXNjLWxlZ2Fsbm90aWNlIj4KKyAgICA8cGFyYT4KKyAgICAgIFRoaXMgbWF0ZXJpYWwgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kCisgICAgICBjb25kaXRpb25zIHNldCBmb3J0aCBpbiB0aGUgT3BlbiBQdWJsaWNhdGlvbiBMaWNlbnNlLCB2MS4wIG9yIGxhdGVyICh0aGUKKyAgICAgIGxhdGVzdCB2ZXJzaW9uIGlzIHByZXNlbnRseSBhdmFpbGFibGUgYXQgPHVsaW5rIHVybD0iCisgICAgICBodHRwOi8vd3d3Lm9wZW5jb250ZW50Lm9yZy9vcGwuc2h0bWwiCisgICAgICB0eXBlPSJodHRwIj5odHRwOi8vd3d3Lm9wZW5jb250ZW50Lm9yZy9vcGwuc2h0bWw8L3VsaW5rPikuCisgICAgPC9wYXJhPgorICA8L2xlZ2Fsbm90aWNlPgorCisgIDx0aXRsZT4mR1N0cmVhbWVyOyBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBNYW51YWwgKCZHU1RfVkVSU0lPTjspPC90aXRsZT4KKworPC9ib29raW5mbz4KKwpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWxzLm1hayBiL2RvY3MvbWFudWFscy5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJmNjVlNAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbWFudWFscy5tYWsKQEAgLTAsMCArMSwxODEgQEAKKyMjIyBUaGVzZSBhcmUgYWxsIGdlbmVyaWM7IHdlIHNldCBhbGwgdGhlIHZhcmlhYmxlcyB3ZSBuZWVkCisKKyMgaW50ZXJtZWRpYXJ5IGJ1aWxkIHBhdGgKK0JVSUxERElSID0gYnVpbGQKKyMgc2FtZSBmb3IgaW1hZ2VzCitCVUlMRElNQUdFU0RJUiA9ICQoQlVJTERESVIpL2ltYWdlcworCisjIGltYWdlcworIyByaWdodCBub3csIHdlIG9ubHkgYWxsb3cgLnBuZyBhbmQgLmZpZyBhcyBzb3VyY2UKKyMgd2UgbWlnaHQgYWRkIG1vcmUgbGF0ZXIgaWYgd2UgZmVlbCB0aGUgbmVlZAorCisjIFBORydzIGNhbiBiZSBzb3VyY2Ugb3IgYnVpbHQgZnJvbSAuZmlnCitQTkcgPSAkKHN0cmlwICQoUE5HX1NSQykgJChGSUdfU1JDOi5maWc9LnBuZykpCisjIEVQUyAucHMgZmlsZXMgY2FuIGJlIGJ1aWx0IGZyb20gLnBuZyBvciAuZmlnCitFUFMgPSAkKHN0cmlwICQoRklHX1NSQzouZmlnPS5wcykgJChQTkdfU1JDOi5wbmc9LnBzKSkKKyMgUERGIC5wZGYgZmlsZXMgY2FuIGJlIGJ1aWx0IGZyb20gLnBuZyBvciAuZmlnCitQREYgPSAkKHN0cmlwICQoRklHX1NSQzouZmlnPS5wZGYpICQoUE5HX1NSQzoucG5nPS5wZGYpKQorCisjIHdoZXJlIHdlIGV4cGVjdCB0byBmaW5kIGltYWdlcyBkdXJpbmcgYnVpbGRpbmcsIHdoZXRoZXIgYnkgY29weWluZworIyBvciBieSBnZW5lcmF0aW5nIHRoZW0KK1BOR19CVUlMVCA9ICQoZm9yZWFjaCBmaWxlLCAkKFBORyksICQoQlVJTERJTUFHRVNESVIpLyQoZmlsZSkpCitFUFNfQlVJTFQgPSAkKGZvcmVhY2ggZmlsZSwgJChFUFMpLCAkKEJVSUxESU1BR0VTRElSKS8kKGZpbGUpKQorUERGX0JVSUxUID0gJChmb3JlYWNoIGZpbGUsICQoUERGKSwgJChCVUlMRElNQUdFU0RJUikvJChmaWxlKSkKKworU1JDID0gJChYTUwpICQoUE5HX1NSQykgJChGSUdfU1JDKSAkKENTUykgJChFWFRSQV9TUkMpCisKKyMgZ2VuZXJhdGUgQTQgZG9jcworUEFQRVJfTE9DQUxFID0gbmxfTkwKKworIyMjIGdlbmVyYXRlIGFsbCBkb2N1bWVudGF0aW9uIGJ5IGRlZmF1bHQKKyMgaG9vayBpbiBodG1sIGdlbmVyYXRpb24KK2FsbC1sb2NhbDogaHRtbAorCisjIGNhbiB3ZSBnZW5lcmF0ZSBIVE1MID8KK2lmICAgICBET0NfSFRNTAorSFRNTF9EQVQgPSBodG1sCitIVE1MX1RBUkdFVCA9IGh0bWwvaW5kZXguaHRtbAorZWxzZSAgIyFET0NfSFRNTAorSFRNTF9EQVQgPQorSFRNTF9UQVJHRVQgPQorZW5kaWYgI0RPQ19IVE1MCitodG1sOiAkKEhUTUxfVEFSR0VUKQorCisjIGNhbiB3ZSBnZW5lcmF0ZSBQUyA/CitpZiAgICAgRE9DX1BTCitQU19EQVQgPSAkKERPQykucHMKK2Vsc2UgICMhRE9DX1BTCitQU19EQVQgPQorZW5kaWYgI0RPQ19QUworcHM6ICQoUFNfREFUKQorCisjIGNhbiB3ZSBnZW5lcmF0ZSBQREYgPworaWYgICAgIERPQ19QREYKK1BERl9EQVQgPSAkKERPQykucGRmCitlbHNlICAjIURPQ19QREYKK1BERl9EQVQgPQorZW5kaWYgI0RPQ19QREYKK3BkZjogJChQREZfREFUKQorCitkZWJ1ZzoKKwlAZWNobyAib3V0cHV0dGluZyBzb21lIHVzZWZ1bCBkZWJ1ZyBpbmZvcm1hdGlvbiIKKwlAZWNobyAiU291cmNlIFhNTDoiCisJQGVjaG8gIlhNTDogJyQoWE1MKSciCisJQGVjaG8gIkNTUzogJyQoQ1NTKSciCisJQGVjaG8gIlNvdXJjZSBpbWFnZSBmaWxlczoiCisJQGVjaG8gIlBOR19TUkM6ICckKFBOR19TUkMpJyIKKwlAZWNobyAiRklHX1NSQzogJyQoRklHX1NSQyknIgorCUBlY2hvICJBbGwgdXNlZCBpbWFnZSBmaWxlczoiCisJQGVjaG8gIlBORzogJyQoUE5HKSciCisJQGVjaG8gIkVQUzogJyQoRVBTKSciCisJQGVjaG8gIlBERjogJyQoUERGKSciCisJQGVjaG8gIkFsbCB1c2VkIGltYWdlIGZpbGVzIGluIHRoZWlyIGJ1aWx0IHBhdGg6IgorCUBlY2hvICJQTkdfQlVJTFQ6ICckKFBOR19CVUlMVCknIgorCUBlY2hvICJFUFNfQlVJTFQ6ICckKEVQU19CVUlMVCknIgorCUBlY2hvICJQREZfQlVJTFQ6ICckKFBERl9CVUlMVCknIgorCUBlY2hvICJFbmQgcmVzdWx0IHByb2R1Y3RzOiIKKwlAZWNobyAiSFRNTF9EQVQ6ICckKEhUTUxfREFUKSciCisJQGVjaG8gIlBTX0RBVDogICAnJChQU19EQVQpJyIKKwlAZWNobyAiUERGX0RBVDogICckKFBERl9EQVQpJyIKKworIyBhIHJ1bGUgdG8gY29weSBhbGwgb2YgdGhlIHNvdXJjZSBmb3IgZG9jcyBpbnRvICQoYnVpbGRkaXIpL2J1aWxkCiskKEJVSUxERElSKS8kKE1BSU4pOiAkKFhNTCkgJChDU1MpICQoRVhUUkFfU1JDKQorCUAtbWtkaXIgLXAgJChCVUlMRERJUik7IFwKKwlpZiB0ZXN0ICJ4JChFWFRSQV9TUkMpIiAhPSAieCI7IHRoZW4gZm9yIGEgaW4gJChFWFRSQV9TUkMpOyBkbyBjcCAkKHNyY2RpcikvJCRhICQoQlVJTERESVIpOyBkb25lOyBmaSA7IFwKKwlmb3IgYSBpbiAkKFhNTCk7IGRvIGNwICQoc3JjZGlyKS8kJGEgJChCVUlMRERJUik7IGRvbmUgOyBcCisJZm9yIGEgaW4gJChDU1MpOyBkbyBjcCAkKHNyY2RpcikvJCRhICQoQlVJTERESVIpOyBkb25lIDsgXAorCWNwIC4uL3ZlcnNpb24uZW50aXRpZXMgJChCVUlMRERJUikgOyBcCisJY3AgJCh0b3Bfc3JjZGlyKS9kb2NzL3VybC5lbnRpdGllcyAkKEJVSUxERElSKQorCisjIHdlIHNob3VsZCBzd2l0Y2ggdG8geHNsdHByb2MKKyMgZG9jYm9vazJodG1sIGFrYSBqYWRlIGNhbid0IGFkZCB0aGUgZW5jb2RpbmcgZWFzaWx5IHRvIHRoZSBodG1sIG1ldGEKKyMgKGJ1dCB3ZSBhcmUgbGF6eSBhbmQganVzdCBhYnVzZSBzZWQgdG8gYWRkIGl0KQorIyBqdyAtZiBkb2Nib29rIC1iIGh0bWwgLWQgcHdnLmRzbCAtbyAuLi9odG1sIC1WICcldXNlLWlkLWFzLWZpbGVuYW1lJScgJChNQUlOKQorIyB0aGlzIGlzIGEgc3RhcnRpbmcgcG9pbnQKKyMgeHNsdHByb2MgLS1ub25ldCAvdXNyL3NoYXJlL3htbC9kb2Nib29rL3N0eWxlc2hlZXQvbndhbHNoL2h0bWwvZG9jYm9vay54c2wgcHdnLnhtbAorIyAKK2h0bWwvaW5kZXguaHRtbDogJChCVUlMRERJUikvJChNQUlOKSAkKFBOR19CVUlMVCkgJChGSUdfU1JDKQorCUAkKE1BS0UpIGNoZWNrLWxvY2FsCisJQGVjaG8gIioqKiBHZW5lcmF0aW5nIEhUTUwgb3V0cHV0ICoqKiIKKwlALW1rZGlyIC1wIGh0bWwKKwlAY3AgLWYgJChzcmNkaXIpLy4uL2ltYWdlLXBuZyAkKEJVSUxERElSKS9pbWFnZS5lbnRpdGllcworCUBjZCAkKEJVSUxERElSKSAmJiBTUF9FTkNPRElORz0iVVRGLTgiIGRvY2Jvb2syaHRtbCAtbyAuLi9odG1sIC1WICcldXNlLWlkLWFzLWZpbGVuYW1lJScgJChNQUlOKQorCUAkKFNFRCkgLWkgLWUgJ3MvXCheQ09OVEVOVC4qXClcKC4+XCkvXDE7Y2hhcnNldD1VVEYtOFwyLycgaHRtbC8qaHRtbAorCUB0ZXN0ICJ4JChDU1MpIiAhPSAieCIgJiYgXAorICAgICAgICAgIGVjaG8gIkNvcHlpbmcgLmNzcyBmaWxlczogJChDU1MpIiAmJiBcCisgICAgICAgICAgY3AgJChzcmNkaXIpLyQoQ1NTKSBodG1sCisJQHRlc3QgIngkKFBORykiICE9ICJ4IiAmJiBcCisgICAgICAgICAgZWNobyAiQ29weWluZyAucG5nIGltYWdlczogJChQTkdfQlVJTFQpIiAmJiBcCisJICBta2RpciAtcCBodG1sL2ltYWdlcyAmJiBcCisgICAgICAgICAgY3AgJChQTkdfQlVJTFQpIGh0bWwvaW1hZ2VzIHx8IHRydWUKKworJChET0MpLnBzOiAkKEJVSUxERElSKS8kKE1BSU4pICQoRVBTX0JVSUxUKSAkKFBOR19TUkMpICQoRklHX1NSQykKKwlAJChNQUtFKSBjaGVjay1sb2NhbAorCUBlY2hvICIqKiogR2VuZXJhdGluZyBQUyBvdXRwdXQgKioqIgorCUBjcCAtZiAkKHNyY2RpcikvLi4vaW1hZ2UtZXBzICQoQlVJTERESVIpL2ltYWdlLmVudGl0aWVzCisJY2QgJChCVUlMRERJUikgJiYgU1BfRU5DT0RJTkc9IlVURi04IiBkb2Nib29rMnBzIC1vIC4uICQoTUFJTikKKyMJZXhwb3J0IExDX1BBUEVSPSQoUEFQRVJfTE9DQUxFKSAmJiBjZCAkKEJVSUxERElSKSAmJiB4bWx0byBwcyAtbyAuLiAkKE1BSU4pCisKKyQoRE9DKS5wZGY6ICQoRE9DKS5wcworCUAkKE1BS0UpIGNoZWNrLWxvY2FsCisJQGVjaG8gIioqKiBHZW5lcmF0aW5nIFBERiBvdXRwdXQgKioqIgorCUBwczJwZGYgJChET0MpLnBzCisKKyMkKERPQykucGRmOiAkKE1BSU4pICQoUERGKSAkKEZJR19TUkMpCisjCUBlY2hvICIqKiogR2VuZXJhdGluZyBQREYgb3V0cHV0ICoqKiIKKyMJQGNwIC1mICQoc3JjZGlyKS8uLi9pbWFnZS1wZGYgaW1hZ2UuZW50aXRpZXMKKyMJQGV4cG9ydCBMQ19QQVBFUj0kKFBBUEVSX0xPQ0FMRSkgJiYgeG1sdG8gcGRmICQoTUFJTikKKyMJQHJtIGltYWdlLmVudGl0aWVzCisKK2NsZWFuLWxvY2FsOgorCS0kKFJNKSAtciAkKEJVSUxERElSKQorCS0kKFJNKSAtciBodG1sCisJLSQoUk0pICQoRE9DKS5wcworCS0kKFJNKSAkKERPQykucGRmCisJLSQoUk0pIC1yIHd3dworCisjIyMgaW1hZ2UgZ2VuZXJhdGlvbgorCisjIGNvcHkgcG5nIGZyb20gc291cmNlIGRpciBwbmcKKyQoQlVJTERJTUFHRVNESVIpLyUucG5nOiAkKHNyY2RpcikvJS5wbmcKKwlAZWNobyAiQ29weWluZyAkPCB0byAkQCIKKwlAbWtkaXIgLXAgJChCVUlMRElNQUdFU0RJUikKKwlAY3AgJDwgJEAKKyMgbWFrZSBwbmcgZnJvbSBmaWcKKyQoQlVJTERJTUFHRVNESVIpLyUucG5nOiAlLmZpZworCUBlY2hvICJHZW5lcmF0aW5nICRAIGZyb20gJDwiCisJQG1rZGlyIC1wICQoQlVJTERJTUFHRVNESVIpCisJQGZpZzJkZXYgLUxwbmcgJDwgJEAKKworIyBtYWtlIHBzKEVQUykgZnJvbSBmaWcKKyQoQlVJTERJTUFHRVNESVIpLyUucHM6ICUuZmlnCisJQGVjaG8gIkdlbmVyYXRpbmcgJEAgZnJvbSAkPCIKKwlAbWtkaXIgLXAgJChCVUlMRElNQUdFU0RJUikKKwlAZmlnMmRldiAtTGVwcyAkPCAkQAorCisjIG1ha2UgcGRmIGZyb20gZmlnCiskKEJVSUxESU1BR0VTRElSKS8lLnBkZjogJS5maWcKKwlAZWNobyAiR2VuZXJhdGluZyAkQCBmcm9tICQ8IgorCUBta2RpciAtcCAkKEJVSUxESU1BR0VTRElSKQorCUBmaWcyZGV2IC1McGRmICQ8ICRACisKKyMgbWFrZSBwZGYgZnJvbSBwbmcKKyQoQlVJTERJTUFHRVNESVIpLyUucGRmOiAlLnBuZworCUBlY2hvICJHZW5lcmF0aW5nICRAIGZyb20gJDwiCisJQG1rZGlyIC1wICQoQlVJTERJTUFHRVNESVIpCisJQGNhdCAkPCB8IHBuZ3RvcG5tIHwgcG5tdG9wcyAtbm90dXJuIDI+IC9kZXYvbnVsbCB8IGVwc3RvcGRmIC0tZmlsdGVyIC0tb3V0ZmlsZSAkQCAyPiAvZGV2L251bGwKKworIyBtYWtlIHBzKEVQUykgZnJvbSBwbmcKKyQoQlVJTERJTUFHRVNESVIpLyUucHM6ICUucG5nCisJQGVjaG8gIkdlbmVyYXRpbmcgJEAgZnJvbSAkPCIKKwlAbWtkaXIgLXAgJChCVUlMRElNQUdFU0RJUikKKwlAY2F0ICQ8IHwgcG5ndG9wbm0gfCBwbm10b3BzIC1ub3R1cm4gPiAkQCAyPiAvZGV2L251bGwKKworIyBtYWtlIHN1cmUgeG1sIHZhbGlkYXRlcyBwcm9wZXJseQorY2hlY2stbG9jYWw6ICQoQlVJTERESVIpLyQoTUFJTikKKwlAY3AgLWYgJChzcmNkaXIpLy4uL2ltYWdlLXBuZyAkKEJVSUxERElSKS9pbWFnZS5lbnRpdGllcworCWNkICQoQlVJTERESVIpICYmIHhtbGxpbnQgLW5vb3V0IC12YWxpZCAkKE1BSU4pCisKKyMgYXZvaWQgJ2NwOiBjYW5ub3QgY3JlYXRlIHJlZ3VsYXIgZmlsZSBgYnVpbGQvaW1hZ2UuZW50aXRpZXMnOiBGaWxlIGV4aXN0cycKKyMgZXJyb3JzIGR1cmluZyAnbWFrZSBkaXN0Y2hlY2snIGJ5IGRpc2FibGluZyBwYXJhbGxlbCBidWlsZHMKKy5OT1RQQVJBTExFTDoKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbSBiL2RvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDZlYTYzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsOTYgQEAKK0dTVF9ET0NfU0NBTk9CSiA9ICQodG9wX3NyY2RpcikvY29tbW9uL2dzdGRvYy1zY2FuZ29iagorCisjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KKworIyBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlLCBlLmcuICdnbGliJy4KKyNET0NfTU9EVUxFPWdzdC1wbHVnaW5zLWxpYnMtQEdTVF9NQUpPUk1JTk9SQAorTU9EVUxFPWdzdHJlYW1lcgorRE9DX01PRFVMRT0kKE1PRFVMRSktcGx1Z2lucworCisjIGZvciB1cGxvYWQtZG9jLm1haworRE9DPSQoTU9EVUxFKS1wbHVnaW5zCitGT1JNQVRTPWh0bWwKK2h0bWw6IGh0bWwtYnVpbGQuc3RhbXAKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb21tb24vdXBsb2FkLWRvYy5tYWsKKworIyBFeHRyYSBlbnZpcm9ubWVudCBuZWVkZWQgZm9yIENvcmUgb25seS4uLgorSU5TUEVDVF9FWFRSQV9FTlZJUk9OTUVOVD0gXAorICAgIEdTVF9QTFVHSU5fU0NBTk5FUj0kKHRvcF9idWlsZGRpcikvbGlicy9nc3QvaGVscGVycy9nc3QtcGx1Z2luLXNjYW5uZXIKKworIyBUaGUgdG9wLWxldmVsIFNHTUwgZmlsZS4gQ2hhbmdlIGl0IGlmIHlvdSB3YW50LgorRE9DX01BSU5fU0dNTF9GSUxFPSQoRE9DX01PRFVMRSktZG9jcy5zZ21sCisKKyMgVGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBzb3VyY2UgY29kZS4KKyMgZ3RrLWRvYyB3aWxsIHNlYXJjaCBhbGwgLmMgJiAuaCBmaWxlcyBiZW5lYXRoIGhlcmUgZm9yIGlubGluZSBjb21tZW50cworIyBkb2N1bWVudGluZyBmdW5jdGlvbnMgYW5kIG1hY3Jvcy4KK0RPQ19TT1VSQ0VfRElSID0gJCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzCisKKyMgRXh0cmEgb3B0aW9ucyB0byBzdXBwbHkgdG8gZ3RrZG9jLXNjYW4uCitTQ0FOX09QVElPTlM9CisKKyMgRXh0cmEgb3B0aW9ucyB0byBzdXBwbHkgdG8gZ3RrZG9jLW1rZGIuCitNS0RCX09QVElPTlM9LS1zZ21sLW1vZGUKKworIyBFeHRyYSBvcHRpb25zIHRvIHN1cHBseSB0byBndGtkb2MtZml4cmVmLgorRklYWFJFRl9PUFRJT05TPS0tZXh0cmEtZGlyPSQodG9wX2J1aWxkZGlyKS9kb2NzL2dzdC9odG1sIFwKKwktLWV4dHJhLWRpcj0kKHRvcF9idWlsZGRpcikvZG9jcy9saWJzL2h0bWwgXAorCS0tZXh0cmEtZGlyPSQoR0xJQl9QUkVGSVgpL3NoYXJlL2d0ay1kb2MvaHRtbCBcCisJLS1leHRyYS1kaXI9JChkYXRhZGlyKS9ndGstZG9jL2h0bWwKKworIyBVc2VkIGZvciBkZXBlbmRlbmNpZXMuCitIRklMRV9HTE9CPSQodG9wX3NyY2RpcikvcGx1Z2lucy9lbGVtZW50cy8qLmgKK0NGSUxFX0dMT0I9JCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzLyouYworCisjIEhlYWRlciBmaWxlcyB0byBpZ25vcmUgd2hlbiBzY2FubmluZy4KK0lHTk9SRV9IRklMRVMgPQorSUdOT1JFX0NGSUxFUyA9CisKKyMgd2UgYWRkIGFsbCAuaCBmaWxlcyBvZiBlbGVtZW50cyB0aGF0IGhhdmUgc2lnbmFscy9hcmdzIHdlIHdhbnQKKyMgc2FkbHkgdGhpcyBhbHNvIHB1bGxzIGluIHRoZSBwcml2YXRlIG1ldGhvZHMgLSBtYXliZSB3ZSBzaG91bGQKKyMgbW92ZSB0aG9zZSBhcm91bmQgaW4gdGhlIHNvdXJjZSA/CisjIGFsc28sIHdlIHNob3VsZCBhZGQgc29tZSBzdHVmZiBoZXJlIGNvbmRpdGlvbmFsbHkgYmFzZWQgb24gd2hldGhlcgorIyBvciBub3QgdGhlIHBsdWdpbiB3aWxsIGFjdHVhbGx5IGJ1aWxkCisjIGJ1dCBJJ20gbm90IHN1cmUgYWJvdXQgdGhhdCAtIGl0IG1pZ2h0IGJlIHRoaXMgSnVzdCBXb3JrcyBnaXZlbiB0aGF0CisjIHRoZSByZWdpc3RyeSB3b24ndCBoYXZlIHRoZSBlbGVtZW50CisKK0VYVFJBX0hGSUxFUyA9IFwKKwkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5oIFwKKwkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5oIFwKKwkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuaCBcCisJJCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5oIFwKKwkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuaCBcCisJJCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuaCBcCisJJCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmggXAorCSQodG9wX3NyY2RpcikvcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5oIFwKKwkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5oIFwKKwkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5oIFwKKwkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuaCBcCisJJCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmggXAorCSQodG9wX3NyY2RpcikvcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuaCBcCisJJCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5oIFwKKwkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmggXAorCSQodG9wX3NyY2RpcikvcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5oCisKKyMgSW1hZ2VzIHRvIGNvcHkgaW50byBIVE1MIGRpcmVjdG9yeS4KK0hUTUxfSU1BR0VTID0KKworIyBFeHRyYSBTR01MIGZpbGVzIHRoYXQgYXJlIGluY2x1ZGVkIGJ5ICQoRE9DX01BSU5fU0dNTF9GSUxFKS4KK2NvbnRlbnRfZmlsZXMgPQorCisjIE90aGVyIGZpbGVzIHRvIGRpc3RyaWJ1dGUuCitleHRyYV9maWxlcyA9CisKKyMgQ0ZMQUdTIGFuZCBMREZMQUdTIGZvciBjb21waWxpbmcgc2NhbiBwcm9ncmFtLiBPbmx5IG5lZWRlZCBpZiB5b3VyIGFwcC9saWIKKyMgY29udGFpbnMgR3RrT2JqZWN0cy9HT2JqZWN0cyBhbmQgeW91IHdhbnQgdG8gZG9jdW1lbnQgc2lnbmFscyBhbmQgcHJvcGVydGllcy4KK0dUS0RPQ19DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKSAtSSQodG9wX2J1aWxkZGlyKSAtSSQodG9wX2J1aWxkZGlyKS9saWJzCitHVEtET0NfTElCUyA9ICQoR1NUX09CSl9MSUJTKQorCitHVEtET0NfQ0M9JChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKQorR1RLRE9DX0xEPSQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWxpbmsgJChDQykKKworIyBJZiB5b3UgbmVlZCB0byBvdmVycmlkZSBzb21lIG9mIHRoZSBkZWNsYXJhdGlvbnMsIHBsYWNlIHRoZW0gaW4gdGhpcyBmaWxlCisjIGFuZCB1bmNvbW1lbnQgdGhpcyBsaW5lLgorI0RPQ19PVkVSUklERVMgPSAkKERPQ19NT0RVTEUpLW92ZXJyaWRlcy50eHQKK0RPQ19PVkVSUklERVMgPQorCitpbmNsdWRlICQodG9wX3NyY2RpcikvY29tbW9uL2d0ay1kb2MtcGx1Z2lucy5tYWsKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9NYWtlZmlsZS5pbiBiL2RvY3MvcGx1Z2lucy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWVkMmUxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wbHVnaW5zL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMTA4MyBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4xIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIyB0aGlzIHNuaXBwZXQgaXMgdG8gYmUgaW5jbHVkZWQgYnkgYm90aCBvdXIgZG9jYm9vayBtYW51YWxzCisjIGFuZCBndGstZG9jIEFQSSByZWZlcmVuY2VzCisKKyMgaXQgYWRkcyBhbiB1cGxvYWQgdGFyZ2V0IHRvIGVhY2ggb2YgdGhlc2UgZGlyJ3MgTWFrZWZpbGVzCisKKyMgZWFjaCBNYWtlZmlsZS5hbSBzaG91bGQgZGVmaW5lIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgorIyAtIERPQzogdGhlIGJhc2UgbmFtZSBvZiB0aGUgZG9jdW1lbnRhdGlvbgorIyAgICAgICAgKGZhcSwgbWFudWFsLCBwd2csIGdzdHJlYW1lciwgZ3N0cmVhbWVyLWxpYnMpCisjIC0gRk9STUFUUzogdGhlIGZvcm1hdHMgaW4gd2hpY2ggRE9DIGlzIG91dHB1dAorIyAgICAgICAgICAgIChodG1sIHBzIHBkZikKKworIyBpZiB5b3Ugd2FudCB0byB1c2UgaXQsIG1ha2Ugc3VyZSB5b3VyICRIT01FLy5zc2gvY29uZmlnIGZpbGUgY29udGFpbnMgdGhlCisjIGNvcnJlY3QgVXNlciBlbnRyeSBmb3IgdGhlIEhvc3QgZW50cnkgZm9yIHRoZSBET0NfU0VSVkVSCisKKyMgVGhpcyBpcyBhbiBpbmNsdWRlIGZpbGUgc3BlY2lmaWNhbGx5IHR1bmVkIGZvciBidWlsZGluZyBkb2N1bWVudGF0aW9uCisjIGZvciBHU3RyZWFtZXIgcGx1Zy1pbnMKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbiBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vZ3RrLWRvYy1wbHVnaW5zLm1hayBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vdXBsb2FkLWRvYy5tYWsKK3N1YmRpciA9IGRvY3MvcGx1Z2lucworQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXB5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtc2NydWItaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOXyQoVikpCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF8kKFYpKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X2F0XzAgPSBACitTT1VSQ0VTID0KK0RJU1RfU09VUkNFUyA9CitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKK0NDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKK0NIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKK0NIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKK0NIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUiA9IEBEQVRBRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAorRExMVE9PTCA9IEBETExUT09MQAorRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKK0VSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACitFWEVFWFQgPSBARVhFRVhUQAorRkZMQUdTID0gQEZGTEFHU0AKK0ZHUkVQID0gQEZHUkVQQAorRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKK0dDT1YgPSBAR0NPVkAKK0dDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAorR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACitHTElCX0xJQlMgPSBAR0xJQl9MSUJTQAorR0xJQl9PTkxZX0NGTEFHUyA9IEBHTElCX09OTFlfQ0ZMQUdTQAorR0xJQl9PTkxZX0xJQlMgPSBAR0xJQl9PTkxZX0xJQlNACitHTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKK0dMSUJfUkVRID0gQEdMSUJfUkVRQAorR01QX0xJQlMgPSBAR01QX0xJQlNACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dSRVAgPSBAR1JFUEAKK0dTTF9MSUJTID0gQEdTTF9MSUJTQAorR1NUX0FHRSA9IEBHU1RfQUdFQAorR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACitHU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACitHU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAorR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKK0dTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAorR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORUAKK0dTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKK0dTVF9ESVNBQkxFX05FVF9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfTkVUX0RFRklORUAKK0dTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACitHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAorR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAorR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKK0dTVF9ESVNBQkxFX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkVACitHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACitHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACitHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORSA9IEBHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORUAKK0dTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAorR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACitHU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAorR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACitHU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKK0dTVF9NQUpPUk1JTk9SID0gQEdTVF9NQUpPUk1JTk9SQAorR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACitHU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACitHU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAorR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACitHU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACitHU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACitHU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAorR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAorR1NUX1BLR19ERVBTID0gQEdTVF9QS0dfREVQU0AKK0dTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACitHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FQAorR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORUAKK0dTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKK0dTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACitHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkUgPSBAR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FQAorR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKK0hBVkVfRE9DQk9PSzJIVE1MID0gQEhBVkVfRE9DQk9PSzJIVE1MQAorSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKK0hBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKK0hBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKK0hBVkVfRklHMkRFViA9IEBIQVZFX0ZJRzJERVZACitIQVZFX0dNUCA9IEBIQVZFX0dNUEAKK0hBVkVfR1NMID0gQEhBVkVfR1NMQAorSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKK0hBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKK0hBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACitIQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKK0hBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACitIT1NUX0NQVSA9IEBIT1NUX0NQVUAKK0hUTUxfRElSID0gQEhUTUxfRElSQAorSU5FVF9BVE9OX0xJQlMgPSBASU5FVF9BVE9OX0xJQlNACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCRElSID0gQExJQkRJUkAKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCTSA9IEBMSUJNQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTE9DQUxFRElSID0gQExPQ0FMRURJUkAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACitQQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAorUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKK1BBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAorUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BFUkxfUEFUSCA9IEBQRVJMX1BBVEhACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQTFVHSU5ESVIgPSBAUExVR0lORElSQAorUE9TVUIgPSBAUE9TVUJACitQUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAorVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAorVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACitXSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACitYTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKK1hTTFRQUk9DID0gQFhTTFRQUk9DQAorWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3BsdWdpbmRpciA9IEBwbHVnaW5kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorR1NUX0RPQ19TQ0FOT0JKID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vZ3N0ZG9jLXNjYW5nb2JqCisKKyMgVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSwgZS5nLiAnZ2xpYicuCisjRE9DX01PRFVMRT1nc3QtcGx1Z2lucy1saWJzLUBHU1RfTUFKT1JNSU5PUkAKK01PRFVMRSA9IGdzdHJlYW1lcgorRE9DX01PRFVMRSA9ICQoTU9EVUxFKS1wbHVnaW5zCisKKyMgZm9yIHVwbG9hZC1kb2MubWFrCitET0MgPSAkKE1PRFVMRSktcGx1Z2lucworRk9STUFUUyA9IGh0bWwKKworIyB0aGVzZSB2YXJpYWJsZXMgZGVmaW5lIHRoZSBsb2NhdGlvbiBvZiB0aGUgb25saW5lIGRvY3MKK0RPQ19TRVJWRVIgPSBnc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnCitET0NfQkFTRSA9IC9zcnYvZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy93d3cvZGF0YS9kb2MKK0RPQ19VUkwgPSAkKERPQ19TRVJWRVIpOiQoRE9DX0JBU0UpCisKKyMgRXh0cmEgZW52aXJvbm1lbnQgbmVlZGVkIGZvciBDb3JlIG9ubHkuLi4KK0lOU1BFQ1RfRVhUUkFfRU5WSVJPTk1FTlQgPSBcCisgICAgR1NUX1BMVUdJTl9TQ0FOTkVSPSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9oZWxwZXJzL2dzdC1wbHVnaW4tc2Nhbm5lcgorCisKKyMgVGhlIHRvcC1sZXZlbCBTR01MIGZpbGUuIENoYW5nZSBpdCBpZiB5b3Ugd2FudC4KK0RPQ19NQUlOX1NHTUxfRklMRSA9ICQoRE9DX01PRFVMRSktZG9jcy5zZ21sCisKKyMgVGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBzb3VyY2UgY29kZS4KKyMgZ3RrLWRvYyB3aWxsIHNlYXJjaCBhbGwgLmMgJiAuaCBmaWxlcyBiZW5lYXRoIGhlcmUgZm9yIGlubGluZSBjb21tZW50cworIyBkb2N1bWVudGluZyBmdW5jdGlvbnMgYW5kIG1hY3Jvcy4KK0RPQ19TT1VSQ0VfRElSID0gJCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzCisKKyMgRXh0cmEgb3B0aW9ucyB0byBzdXBwbHkgdG8gZ3RrZG9jLXNjYW4uCitTQ0FOX09QVElPTlMgPSAKKworIyBFeHRyYSBvcHRpb25zIHRvIHN1cHBseSB0byBndGtkb2MtbWtkYi4KK01LREJfT1BUSU9OUyA9IC0tc2dtbC1tb2RlCisKKyMgRXh0cmEgb3B0aW9ucyB0byBzdXBwbHkgdG8gZ3RrZG9jLWZpeHJlZi4KK0ZJWFhSRUZfT1BUSU9OUyA9IC0tZXh0cmEtZGlyPSQodG9wX2J1aWxkZGlyKS9kb2NzL2dzdC9odG1sIFwKKwktLWV4dHJhLWRpcj0kKHRvcF9idWlsZGRpcikvZG9jcy9saWJzL2h0bWwgXAorCS0tZXh0cmEtZGlyPSQoR0xJQl9QUkVGSVgpL3NoYXJlL2d0ay1kb2MvaHRtbCBcCisJLS1leHRyYS1kaXI9JChkYXRhZGlyKS9ndGstZG9jL2h0bWwKKworCisjIFVzZWQgZm9yIGRlcGVuZGVuY2llcy4KK0hGSUxFX0dMT0IgPSAkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvKi5oCitDRklMRV9HTE9CID0gJCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzLyouYworCisjIEhlYWRlciBmaWxlcyB0byBpZ25vcmUgd2hlbiBzY2FubmluZy4KK0lHTk9SRV9IRklMRVMgPSAKK0lHTk9SRV9DRklMRVMgPSAKKworIyB3ZSBhZGQgYWxsIC5oIGZpbGVzIG9mIGVsZW1lbnRzIHRoYXQgaGF2ZSBzaWduYWxzL2FyZ3Mgd2Ugd2FudAorIyBzYWRseSB0aGlzIGFsc28gcHVsbHMgaW4gdGhlIHByaXZhdGUgbWV0aG9kcyAtIG1heWJlIHdlIHNob3VsZAorIyBtb3ZlIHRob3NlIGFyb3VuZCBpbiB0aGUgc291cmNlID8KKyMgYWxzbywgd2Ugc2hvdWxkIGFkZCBzb21lIHN0dWZmIGhlcmUgY29uZGl0aW9uYWxseSBiYXNlZCBvbiB3aGV0aGVyCisjIG9yIG5vdCB0aGUgcGx1Z2luIHdpbGwgYWN0dWFsbHkgYnVpbGQKKyMgYnV0IEknbSBub3Qgc3VyZSBhYm91dCB0aGF0IC0gaXQgbWlnaHQgYmUgdGhpcyBKdXN0IFdvcmtzIGdpdmVuIHRoYXQKKyMgdGhlIHJlZ2lzdHJ5IHdvbid0IGhhdmUgdGhlIGVsZW1lbnQKK0VYVFJBX0hGSUxFUyA9IFwKKwkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5oIFwKKwkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5oIFwKKwkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuaCBcCisJJCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5oIFwKKwkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuaCBcCisJJCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuaCBcCisJJCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmggXAorCSQodG9wX3NyY2RpcikvcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5oIFwKKwkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5oIFwKKwkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5oIFwKKwkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuaCBcCisJJCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmggXAorCSQodG9wX3NyY2RpcikvcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuaCBcCisJJCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5oIFwKKwkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmggXAorCSQodG9wX3NyY2RpcikvcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5oCisKKworIyBJbWFnZXMgdG8gY29weSBpbnRvIEhUTUwgZGlyZWN0b3J5LgorSFRNTF9JTUFHRVMgPSAKKworIyBFeHRyYSBTR01MIGZpbGVzIHRoYXQgYXJlIGluY2x1ZGVkIGJ5ICQoRE9DX01BSU5fU0dNTF9GSUxFKS4KK2NvbnRlbnRfZmlsZXMgPSAKKworIyBPdGhlciBmaWxlcyB0byBkaXN0cmlidXRlLgorZXh0cmFfZmlsZXMgPSAKKworIyBDRkxBR1MgYW5kIExERkxBR1MgZm9yIGNvbXBpbGluZyBzY2FuIHByb2dyYW0uIE9ubHkgbmVlZGVkIGlmIHlvdXIgYXBwL2xpYgorIyBjb250YWlucyBHdGtPYmplY3RzL0dPYmplY3RzIGFuZCB5b3Ugd2FudCB0byBkb2N1bWVudCBzaWduYWxzIGFuZCBwcm9wZXJ0aWVzLgorR1RLRE9DX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpIC1JJCh0b3BfYnVpbGRkaXIpIC1JJCh0b3BfYnVpbGRkaXIpL2xpYnMKK0dUS0RPQ19MSUJTID0gJChHU1RfT0JKX0xJQlMpCitHVEtET0NfQ0MgPSAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpCitHVEtET0NfTEQgPSAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1saW5rICQoQ0MpCisKKyMgSWYgeW91IG5lZWQgdG8gb3ZlcnJpZGUgc29tZSBvZiB0aGUgZGVjbGFyYXRpb25zLCBwbGFjZSB0aGVtIGluIHRoaXMgZmlsZQorIyBhbmQgdW5jb21tZW50IHRoaXMgbGluZS4KKyNET0NfT1ZFUlJJREVTID0gJChET0NfTU9EVUxFKS1vdmVycmlkZXMudHh0CitET0NfT1ZFUlJJREVTID0gCisKKyMgV2Ugc2V0IEdQQVRIIGhlcmU7IHRoaXMgZ2l2ZXMgdXMgc2VtYW50aWNzIGZvciBHTlUgbWFrZQorIyB3aGljaCBhcmUgbW9yZSBsaWtlIG90aGVyIG1ha2UncyBWUEFUSCwgd2hlbiBpdCBjb21lcyB0bworIyB3aGV0aGVyIGEgc291cmNlIHRoYXQgaXMgYSB0YXJnZXQgb2Ygb25lIHJ1bGUgaXMgdGhlbgorIyBzZWFyY2hlZCBmb3IgaW4gVlBBVEgvR1BBVEguCisjCitHUEFUSCA9ICQoc3JjZGlyKQorCisjIHRob21hczogbWFrZSBkb2NzIHBhcmFsbGVsIGluc3RhbGxhYmxlCitUQVJHRVRfRElSID0gJChIVE1MX0RJUikvJChET0NfTU9EVUxFKS1AR1NUX01BSk9STUlOT1JACitNQUlOVEFJTkVSX0RPQ19TVEFNUFMgPSBcCisJc2Nhbm9iai1idWlsZC5zdGFtcAorCitFWFRSQV9ESVNUID0gXAorCSQoTUFJTlRBSU5FUl9ET0NfU1RBTVBTKQkJXAorCSQoc3JjZGlyKS9pbnNwZWN0LyoueG1sCQlcCisJJChTQ0FOT0JKX0ZJTEVTKQkJXAorCSQoY29udGVudF9maWxlcykJCVwKKwkkKGV4dHJhX2ZpbGVzKQkJCVwKKwkkKEhUTUxfSU1BR0VTKQkJCVwKKwkkKERPQ19NQUlOX1NHTUxfRklMRSkJXAorCSQoRE9DX09WRVJSSURFUykJCVwKKwkkKERPQ19NT0RVTEUpLXNlY3Rpb25zLnR4dAorCisKKyMgd2UgZG9uJ3QgYWRkIHNjYW5vYmotYnVpbGQuc3RhbXAgaGVyZSBzaW5jZSB0aGV5IGFyZSBidWlsdCBtYW51YWxseSBieSBkb2NzCisjIG1haW50YWluZXJzIGFuZCByZXN1bHQgaXMgY29tbWl0ZWQgdG8gZ2l0CitET0NfU1RBTVBTID0gXAorCXNjYW4tYnVpbGQuc3RhbXAJCVwKKwl0bXBsLWJ1aWxkLnN0YW1wCQlcCisJc2dtbC1idWlsZC5zdGFtcAkJXAorCWh0bWwtYnVpbGQuc3RhbXAJCVwKKwlzY2FuLnN0YW1wCQkJXAorCXRtcGwuc3RhbXAJCQlcCisJc2dtbC5zdGFtcAkJCVwKKwlodG1sLnN0YW1wCisKKworIyBmaWxlcyBnZW5lcmF0ZWQvdXBkYXRlZCBieSBndGtkb2Mtc2NhbmdvYmoKK1NDQU5PQkpfRklMRVMgPSBcCisJJChET0NfTU9EVUxFKS5hcmdzICAgICAgICAgICAgICBcCisJJChET0NfTU9EVUxFKS5oaWVyYXJjaHkgICAgICAgICBcCisJJChET0NfTU9EVUxFKS5pbnRlcmZhY2VzICAgICAgICBcCisJJChET0NfTU9EVUxFKS5wcmVyZXF1aXNpdGVzICAgICBcCisJJChET0NfTU9EVUxFKS5zaWduYWxzICAgICAgICAgICBcCisJJChET0NfTU9EVUxFKS50eXBlcworCitTQ0FOT0JKX0ZJTEVTX08gPSBcCisJLmxpYnMvJChET0NfTU9EVUxFKS1zY2FuLm8KKworCisjIGZpbGVzIGdlbmVyYXRlZC91cGRhdGVkIGJ5IGd0a2RvYy1zY2FuCitTQ0FOX0ZJTEVTID0gXAorCSQoRE9DX01PRFVMRSktc2VjdGlvbnMudHh0CVwKKwkkKERPQ19NT0RVTEUpLW92ZXJyaWRlcy50eHQJXAorCSQoRE9DX01PRFVMRSktZGVjbC50eHQJCVwKKwkkKERPQ19NT0RVTEUpLWRlY2wtbGlzdC50eHQKKworUkVQT1JUX0ZJTEVTID0gXAorCSQoRE9DX01PRFVMRSktdW5kb2N1bWVudGVkLnR4dCBcCisJJChET0NfTU9EVUxFKS11bmRlY2xhcmVkLnR4dCBcCisJJChET0NfTU9EVUxFKS11bnVzZWQudHh0CisKK0NMRUFORklMRVMgPSBcCisJJChTQ0FOT0JKX0ZJTEVTX08pIFwKKwkkKFJFUE9SVF9GSUxFUykgXAorCSQoRE9DX1NUQU1QUykgXAorCWluc3BlY3QtcmVnaXN0cnkueG1sCisKK0lOU1BFQ1RfRElSID0gaW5zcGVjdAorCisjIyMgaW5zcGVjdCBHU3RyZWFtZXIgcGx1Zy1pbnM7IGRvbmUgYnkgZG9jdW1lbnRhdGlvbiBtYWludGFpbmVyICMjIworCisjIG9ubHkgbG9vayBhdCB0aGUgcGx1Z2lucyBpbiB0aGlzIG1vZHVsZSB3aGVuIGJ1aWxkaW5nIGluc3BlY3QgLnhtbCBzdHVmZgorQEVOQUJMRV9HVEtfRE9DX1RSVUVASU5TUEVDVF9SRUdJU1RSWSA9ICQodG9wX2J1aWxkZGlyKS9kb2NzL3BsdWdpbnMvaW5zcGVjdC1yZWdpc3RyeS54bWwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQElOU1BFQ1RfRU5WSVJPTk1FTlQgPSBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJTENfQUxMPUMgXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUdTVF9QTFVHSU5fU1lTVEVNX1BBVEg9IFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlHU1RfUExVR0lOX1BBVEg9JCh0b3BfYnVpbGRkaXIpL2dzdDokKHRvcF9idWlsZGRpcikvc3lzOiQodG9wX2J1aWxkZGlyKS9leHQ6JCh0b3BfYnVpbGRkaXIpL3BsdWdpbnM6JCh0b3BfYnVpbGRkaXIpL3NyYzokKHRvcF9idWlsZGRpcikvZ25sIFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlHU1RfUkVHSVNUUlk9JChJTlNQRUNUX1JFR0lTVFJZKSBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJUEtHX0NPTkZJR19QQVRIPSIkKEdTVF9QS0dfQ09ORklHX1BBVEgpIiBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJJChJTlNQRUNUX0VYVFJBX0VOVklST05NRU5UKQorCitNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9ICQoTUFJTlRBSU5FUl9ET0NfU1RBTVBTKQorCisjIHdpbGRjYXJkIGlzIGFwcGFyZW50bHkgbm90IHBvcnRhYmxlIHRvIG90aGVyIG1ha2VzLCBoZW5jZSB0aGUgdXNlIG9mIGZpbmQKK2luc3BlY3RfZmlsZXMgPSAkKHNoZWxsIGZpbmQgJChzcmNkaXIpLyQoSU5TUEVDVF9ESVIpIC1uYW1lICcqLnhtbCcpCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICQodG9wX3NyY2RpcikvY29tbW9uL3VwbG9hZC1kb2MubWFrICQodG9wX3NyY2RpcikvY29tbW9uL2d0ay1kb2MtcGx1Z2lucy5tYWsgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZG9jcy9wbHVnaW5zL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251IGRvY3MvcGx1Z2lucy9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKK3RhZ3M6IFRBR1MKK1RBR1M6CisKK2N0YWdzOiBDVEFHUworQ1RBR1M6CisKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgdG9wX2Rpc3RkaXI9IiQodG9wX2Rpc3RkaXIpIiBkaXN0ZGlyPSIkKGRpc3RkaXIpIiBcCisJICBkaXN0LWhvb2sKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSBhbGwtbG9jYWwKK2luc3RhbGxkaXJzOgoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorCS10ZXN0IC16ICIkKE1BSU5UQUlORVJDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChNQUlOVEFJTkVSQ0xFQU5GSUxFUykKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLWxvY2FsIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1sb2NhbAorCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWRhdGEtbG9jYWwKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtbG9jYWwKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IGFsbCBhbGwtYW0gYWxsLWxvY2FsIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYnRvb2wgY2xlYW4tbG9jYWwgZGlzdC1ob29rIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLWxvY2FsIGRpc3RkaXIgXAorCWR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kYXRhLWxvY2FsIGluc3RhbGwtZHZpIFwKKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCisJaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCisJaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKKwltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorCXVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWxvY2FsCisKK2h0bWw6IGh0bWwtYnVpbGQuc3RhbXAKKwordXBsb2FkOiAkKEZPUk1BVFMpCisJQGlmIGVjaG8gJChGT1JNQVRTKSB8IGdyZXAgaHRtbCA+IC9kZXYvbnVsbDsgdGhlbiBcCisJICBlY2hvICJQcmVwYXJpbmcgZG9jcyBmb3IgdXBsb2FkIChyZWJhc2luZyBjcm9zcy1yZWZlcmVuY2VzKSAuLi4iIDsgXAorCSAgaWYgdGVzdCB4JChidWlsZGRpcikgIT0geCQoc3JjZGlyKTsgdGhlbiBcCisJICAgIGVjaG8gIm1ha2UgdXBsb2FkIGNhbiBvbmx5IGJlIHVzZWQgaWYgc3JjZGlyID09IGJ1aWxkZGlyIjsgXAorCSAgICBleGl0IDE7IFwKKwkgIGZpOyBcCisJICAjIGd0a2RvYy1yZWJhc2Ugc29tZXRpbWVzIGdldHMgY29uZnVzZWQsIHNvIHJlc2V0IGV2ZXJ5dGhpbmcgdG8gXAorCSAgIyBsb2NhbCBsaW5rcyBiZWZvcmUgcmViYXNpbmcgdG8gb25saW5lIGxpbmtzICAgICAgICAgICAgICAgICAgIFwKKwkgIGd0a2RvYy1yZWJhc2UgLS1odG1sLWRpcj0kKGJ1aWxkZGlyKS9odG1sIDI+L2Rldi9udWxsIDI+L2Rldi9udWxsIDsgXAorCSAgcmViYXNlPWBndGtkb2MtcmViYXNlIC0tdmVyYm9zZSAtLW9ubGluZSAtLWh0bWwtZGlyPSQoYnVpbGRkaXIpL2h0bWxgIDsgXAorCSAgZWNobyAiJCRyZWJhc2UiIHwgZ3JlcCAtZSAiT24tKmxpbmUiOyBcCisJICBmb3IgcmVxIGluIGdsaWIgZ29iamVjdCBnc3RyZWFtZXIgZ3N0cmVhbWVyLWxpYnMgZ3N0LXBsdWdpbnMtYmFzZS1saWJzOyBkbyBcCisJICAgIGlmICEgKCBlY2hvICIkJHJlYmFzZSIgfCBncmVwIC1pIC1lICJPbi0qbGluZS4qLyQkcmVxLyIgKTsgdGhlbiBcCisJICAgICAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgOyBcCisJICAgICAgZWNobyAiIENvdWxkIG5vdCBkZXRlcm1pbmUgb25saW5lIGxvY2F0aW9uIGZvciAkJHJlcSBkb2NzLiBDcm9zcy1yZWZlcmVuY2luZyB3aWxsIGJlICIgOyBcCisJICAgICAgZWNobyAiIGJyb2tlbiwgc28gbm90IHVwbG9hZGluZy4gTWFrZSBzdXJlIHRoZSBsaWJyYXJ5J3MgZ3RrLWRvYyBkb2N1bWVudGF0aW9uIGlzICAgICIgOyBcCisJICAgICAgZWNobyAiIGluc3RhbGxlZCBzb21ld2hlcmUgaW4gL3Vzci9zaGFyZS9ndGstZG9jLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgOyBcCisJICAgICAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgOyBcCisJICAgICAgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICBkb25lOyBcCisJICBleHBvcnQgU1JDPSIkJFNSQyBodG1sIjsgXAorCWZpOyBcCisJaWYgZWNobyAkKEZPUk1BVFMpIHwgZ3JlcCBwcyA+IC9kZXYvbnVsbDsgdGhlbiBleHBvcnQgU1JDPSIkJFNSQyAkKERPQykucHMiOyBmaTsgXAorCWlmIGVjaG8gJChGT1JNQVRTKSB8IGdyZXAgcGRmID4gL2Rldi9udWxsOyB0aGVuIGV4cG9ydCBTUkM9IiQkU1JDICQoRE9DKS5wZGYiOyBmaTsgXAorCVwKKwkjIHVwbG9hZCByZWxlYXNlcyB0byBib3RoIDAuMTAuWC8gYW5kIGhlYWQvIHN1YmRpcmVjdG9yaWVzIFwKKwlpZiB0ZXN0ICJ4JChQQUNLQUdFX1ZFUlNJT05fTkFOTykiID0geDA7IHRoZW4gXAorCSAgZXhwb3J0IERJUj0kKERPQ19CQVNFKS9nc3RyZWFtZXIvJChWRVJTSU9OKS8kKERPQyk7IFwKKwkgIGVjaG8gVXBsb2FkaW5nICQkU1JDIHRvICQoRE9DX1NFUlZFUik6JCRESVI7IFwKKwkgIHNzaCAkKERPQ19TRVJWRVIpIG1rZGlyIC1wICQkRElSOyBcCisJICByc3luYyAtcnYgLWUgc3NoIC0tZGVsZXRlICQkU1JDICQoRE9DX1NFUlZFUik6JCRESVI7IFwKKwkgIHNzaCAkKERPQ19TRVJWRVIpIGNobW9kIC1SIGcrdyAkJERJUjsgXAorCWZpOyBcCisJXAorCWV4cG9ydCBESVI9JChET0NfQkFTRSkvZ3N0cmVhbWVyL2hlYWQvJChET0MpOyBcCisJZWNobyBVcGxvYWRpbmcgJCRTUkMgdG8gJChET0NfU0VSVkVSKTokJERJUjsgXAorCXNzaCAkKERPQ19TRVJWRVIpIG1rZGlyIC1wICQkRElSOyBcCisJcnN5bmMgLXJ2IC1lIHNzaCAtLWRlbGV0ZSAkJFNSQyAkKERPQ19TRVJWRVIpOiQkRElSOyBcCisJc3NoICQoRE9DX1NFUlZFUikgY2htb2QgLVIgZyt3ICQkRElSOyBcCisJXAorCWlmIGVjaG8gJChGT1JNQVRTKSB8IGdyZXAgaHRtbCA+IC9kZXYvbnVsbDsgdGhlbiBcCisJICBlY2hvICJVbi1wcmVwYXJpbmcgZG9jcyBmb3IgdXBsb2FkIChyZWJhc2luZyBjcm9zcy1yZWZlcmVuY2VzKSAuLi4iIDsgXAorCSAgZ3RrZG9jLXJlYmFzZSAtLWh0bWwtZGlyPSQoYnVpbGRkaXIpL2h0bWwgOyBcCisJZmk7IFwKKwllY2hvIERvbmUKKworaGVscDoKKwlAZWNobworCUBlY2hvICJJZiB5b3UgYXJlIGEgZG9jIG1haW50YWluZXIsIHJ1biAnbWFrZSB1cGRhdGUnIHRvIHVwZGF0ZSIKKwlAZWNobyAidGhlIGRvY3VtZW50YXRpb24gZmlsZXMgbWFpbnRhaW5lZCBpbiBnaXQiCisJQGVjaG8KKwlAZWNobyBPdGhlciB1c2VmdWwgbWFrZSB0YXJnZXRzOgorCUBlY2hvCisJQGVjaG8gIGNoZWNrLWluc3BlY3RlZC12ZXJzaW9uczogbWFrZSBzdXJlIHRoZSBpbnNwZWN0ZWQgcGx1Z2luIGluZm8KKwlAZWNobyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyB1cCB0byBkYXRlIGJlZm9yZSBhIHJlbGVhc2UKKwlAZWNobworCisjIHVwZGF0ZSB0aGUgc3R1ZmYgbWFpbnRhaW5lZCBieSBkb2MgbWFpbnRhaW5lcnMKK3VwZGF0ZToKKwkkKE1BS0UpIHNjYW5vYmotdXBkYXRlCisJJChNQUtFKSBjaGVjay1vdXRkYXRlZC1kb2NzCisKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQGFsbC1sb2NhbDogaHRtbC1idWlsZC5zdGFtcAorCisjIyMjIHNjYW4gZ29iamVjdHM7IGRvbmUgYnkgZG9jdW1lbnRhdGlvbiBtYWludGFpbmVyICMjIyMKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQHNjYW5vYmotdXBkYXRlOgorQEVOQUJMRV9HVEtfRE9DX1RSVUVACS1ybSBzY2Fub2JqLWJ1aWxkLnN0YW1wCitARU5BQkxFX0dUS19ET0NfVFJVRUAJJChNQUtFKSBzY2Fub2JqLWJ1aWxkLnN0YW1wCisKKyMgZ3N0ZG9jLXNjYW5vYmogcHJvZHVjZXMgNSBvdXRwdXQgZmlsZXMgKC5uZXcpCisjIHNjYW5nb2JqLW1lcmdlLnB5IG1lcmdlcyB0aGVtIGludG8gdGhlIGZpbGUgd2hpY2ggd2UgY29tbWl0IGxhdGVyCisjIFRPRE86IGFsc28gbWVyZ2UgdGhlIGhpZXJhcmNoeQorQEVOQUJMRV9HVEtfRE9DX1RSVUVAc2Nhbm9iai1idWlsZC5zdGFtcDogJChTQ0FOT0JKX0RFUFMpICQoYmFzZWZpbGVzKQorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBlY2hvICIgIERPQyAgIEludHJvc3BlY3RpbmcgZ29iamVjdHMiCitARU5BQkxFX0dUS19ET0NfVFJVRUAJQGlmIHRlc3QgeCIkKHNyY2RpcikiICE9IHguIDsgdGhlbgkJCQlcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGZvciBmIGluICQoU0NBTk9CSl9GSUxFUykgJChTQ0FOX0ZJTEVTKTsJCQlcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGRvCQkJCQkJCQlcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICAgICBpZiB0ZXN0IC1lICQoc3JjZGlyKS8kJGY7IHRoZW4gY3AgLXUgJChzcmNkaXIpLyQkZiAuIDsgZmk7CVwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgZG9uZTsJCQkJCQkJXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACWZpOwkJCQkJCQkJXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACW1rZGlyIC1wICQoSU5TUEVDVF9ESVIpOyBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJc2Nhbm9ial9vcHRpb25zPSIiOyBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJaWYgdGVzdCAieCQoVikiID0gIngxIjsgdGhlbiBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIHNjYW5vYmpfb3B0aW9ucz0iLS12ZXJib3NlIjsgXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACWZpOyBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJJChJTlNQRUNUX0VOVklST05NRU5UKSAJCQkJCVwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlDQz0iJChHVEtET0NfQ0MpIiBMRD0iJChHVEtET0NfTEQpIgkJCQlcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJQ0ZMQUdTPSIkKEdUS0RPQ19DRkxBR1MpICQoQ0ZMQUdTKSAkKFdBUk5JTkdfQ0ZMQUdTKSIJXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUxERkxBR1M9IiQoR1RLRE9DX0xJQlMpICQoTERGTEFHUykiCQkJCVwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkkKEdTVF9ET0NfU0NBTk9CSikgJCRzY2Fub2JqX29wdGlvbnMgLS10eXBlLWluaXQtZnVuYz0iZ3N0X2luaXQoTlVMTCxOVUxMKSIJXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICAtLW1vZHVsZT0kKERPQ19NT0RVTEUpIC0tc291cmNlPSQoUEFDS0FHRSkgLS1pbnNwZWN0LWRpcj0kKElOU1BFQ1RfRElSKSAmJgkJXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBlY2hvICIgIERPQyAgIE1lcmdpbmcgaW50cm9zcGVjdGlvbiBkYXRhIiAmJiBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICQoUFlUSE9OKQkJCQkJCVwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgJCh0b3Bfc3JjZGlyKS9jb21tb24vc2NhbmdvYmotbWVyZ2UucHkgJChET0NfTU9EVUxFKTsJXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACWlmIHRlc3QgeCIkKHNyY2RpcikiICE9IHguIDsgdGhlbgkJCQlcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGZvciBmIGluICQoU0NBTk9CSl9GSUxFUyk7CQkJCQlcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGRvCQkJCQkJCQlcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICAgICBjbXAgLXMgLi8kJGYgJChzcmNkaXIpLyQkZiB8fCBjcCAuLyQkZiAkKHNyY2RpcikvIDsJCVwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgZG9uZTsJCQkJCQkJXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACWZpOwkJCQkJCQkJXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACXRvdWNoIHNjYW5vYmotYnVpbGQuc3RhbXAKKworQEVOQUJMRV9HVEtfRE9DX1RSVUVAJChET0NfTU9EVUxFKS1kZWNsLnR4dCAkKFNDQU5PQkpfRklMRVMpICQoU0NBTk9CSl9GSUxFU19PKTogc2Nhbi1idWlsZC5zdGFtcAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUB0cnVlCisKKyMjIyBzY2FuIGhlYWRlcnM7IGRvbmUgb24gZXZlcnkgYnVpbGQgIyMjCitARU5BQkxFX0dUS19ET0NfVFJVRUBzY2FuLWJ1aWxkLnN0YW1wOiAkKEhGSUxFX0dMT0IpICQoRVhUUkFfSEZJTEVTKSAkKGJhc2VmaWxlcykgc2Nhbm9iai1idWlsZC5zdGFtcAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBlY2hvICcgIERPQyAgIFNjYW5uaW5nIGhlYWRlciBmaWxlcycKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAaWYgdGVzdCB4IiQoc3JjZGlyKSIgIT0geC4gOyB0aGVuCQkJCVwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgZm9yIGYgaW4gJChTQ0FOT0JKX0ZJTEVTKSAkKFNDQU5fRklMRVMpOwkJCVwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgZG8JCQkJCQkJCVwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgICAgIGlmIHRlc3QgLWUgJChzcmNkaXIpLyQkZjsgdGhlbiBjcCAtdSAkKHNyY2RpcikvJCRmIC4gOyBmaTsJXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBkb25lOwkJCQkJCQlcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJZmkKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAX3NvdXJjZV9kaXI9JycgOwkJCQkJCVwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlmb3IgaSBpbiAkKERPQ19TT1VSQ0VfRElSKSA7IGRvCQkJCQlcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIF9zb3VyY2VfZGlyPSIkJHtfc291cmNlX2Rpcn0gLS1zb3VyY2UtZGlyPSQkaSIgOwkgICAgICAgIFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlkb25lIDsJCQkJCQkJICAgICAgICBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJZ3RrZG9jLXNjYW4JCQkJCQkJXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICAkKFNDQU5fT1BUSU9OUykgJChFWFRSQV9IRklMRVMpCQkJCVwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgLS1tb2R1bGU9JChET0NfTU9EVUxFKQkJCQkJXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICAkJHtfc291cmNlX2Rpcn0gICAgICAgICAgICAgCQkJCVwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgLS1pZ25vcmUtaGVhZGVycz0iJChJR05PUkVfSEZJTEVTKSI7CQkJXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACXRvdWNoIHNjYW4tYnVpbGQuc3RhbXAKKworIyMjIyB1cGRhdGUgdGVtcGxhdGVzOyBkb25lIG9uIGV2ZXJ5IGJ1aWxkICMjIyMKKworIyBpbiBhIG5vbi1zcmNkaXIgYnVpbGQsIHdlIG5lZWQgdG8gY29weSBmaWxlcyBmcm9tIHRoZSBwcmV2aW91cyBzdGVwCisjIGFuZCB0aGUgZmlsZXMgZnJvbSBwcmV2aW91cyBydW5zIG9mIHRoaXMgc3RlcAorQEVOQUJMRV9HVEtfRE9DX1RSVUVAdG1wbC1idWlsZC5zdGFtcDogJChET0NfTU9EVUxFKS1kZWNsLnR4dCAkKFNDQU5PQkpfRklMRVMpICQoRE9DX01PRFVMRSktc2VjdGlvbnMudHh0ICQoRE9DX09WRVJSSURFUykKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAZWNobyAnICBET0MgICBSZWJ1aWxkaW5nIHRlbXBsYXRlIGZpbGVzJworQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBpZiB0ZXN0IHgiJChzcmNkaXIpIiAhPSB4LiA7IHRoZW4JCQkJXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBmb3IgZiBpbiAkKFNDQU5PQkpfRklMRVMpICQoU0NBTl9GSUxFUyk7CQkJXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBkbwkJCQkJCQkJXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICAgICAgaWYgdGVzdCAtZSAkKHNyY2RpcikvJCRmOyB0aGVuIGNwIC11ICQoc3JjZGlyKS8kJGYgLiA7IGZpOwlcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGRvbmU7CQkJCQkJCVwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlmaQorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBndGtkb2MtbWt0bXBsIC0tbW9kdWxlPSQoRE9DX01PRFVMRSkKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAJChQWVRIT04pIFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkJJCh0b3Bfc3JjZGlyKS9jb21tb24vbWFuZ2xlLXRtcGwucHkgJChzcmNkaXIpLyQoSU5TUEVDVF9ESVIpIHRtcGwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAdG91Y2ggdG1wbC1idWlsZC5zdGFtcAorCitARU5BQkxFX0dUS19ET0NfVFJVRUB0bXBsLnN0YW1wOiB0bXBsLWJ1aWxkLnN0YW1wCitARU5BQkxFX0dUS19ET0NfVFJVRUAJQHRydWUKKworIyMjIyB4bWwgIyMjIworCitARU5BQkxFX0dUS19ET0NfVFJVRUBzZ21sLWJ1aWxkLnN0YW1wOiB0bXBsLnN0YW1wIHNjYW4tYnVpbGQuc3RhbXAgJChDRklMRV9HTE9CKSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9wbHVnaW5zLnhzbCAkKGV4cGFuZF9jb250ZW50X2ZpbGVzKQorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBlY2hvICcgIERPQyAgIEJ1aWxkaW5nIFhNTCcKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlALW1rZGlyIC1wIHhtbAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBmb3IgYSBpbiAkKHNyY2RpcikvJChJTlNQRUNUX0RJUikvKi54bWw7IGRvIFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgeHNsdHByb2MgLS1zdHJpbmdwYXJhbSBtb2R1bGUgJChNT0RVTEUpIFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkJJCh0b3Bfc3JjZGlyKS9jb21tb24vcGx1Z2lucy54c2wgJCRhID4geG1sL2BiYXNlbmFtZSAkJGFgOyBkb25lCitARU5BQkxFX0dUS19ET0NfVFJVRUAJQGZvciBmIGluICQoRVhBTVBMRV9DRklMRVMpOyBkbyBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJCSQoUFlUSE9OKSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9jLXRvLXhtbC5weSAkJGYgPiB4bWwvZWxlbWVudC1gYmFzZW5hbWUgJCRmIC5jYC54bWw7IGRvbmUKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAZ3RrZG9jLW1rZGIgXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACQktLW1vZHVsZT0kKERPQ19NT0RVTEUpIFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkJLS1zb3VyY2UtZGlyPSQoRE9DX1NPVVJDRV9ESVIpIFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkJIC0tZXhwYW5kLWNvbnRlbnQtZmlsZXM9IiQoZXhwYW5kX2NvbnRlbnRfZmlsZXMpIiBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJCS0tbWFpbi1zZ21sLWZpbGU9JChzcmNkaXIpLyQoRE9DX01BSU5fU0dNTF9GSUxFKSBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJCS0tb3V0cHV0LWZvcm1hdD14bWwgXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACQktLWlnbm9yZS1maWxlcz0iJChJR05PUkVfSEZJTEVTKSAkKElHTk9SRV9DRklMRVMpIiBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJCSQoTUtEQl9PUFRJT05TKQorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBjcCAuLi92ZXJzaW9uLmVudGl0aWVzIHhtbAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUB0b3VjaCBzZ21sLWJ1aWxkLnN0YW1wCisKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQHNnbWwuc3RhbXA6IHNnbWwtYnVpbGQuc3RhbXAKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAdHJ1ZQorCisjIyMjIGh0bWwgIyMjIworCitARU5BQkxFX0dUS19ET0NfVFJVRUBodG1sLWJ1aWxkLnN0YW1wOiBzZ21sLnN0YW1wICQoRE9DX01BSU5fU0dNTF9GSUxFKSAkKGNvbnRlbnRfZmlsZXMpCitARU5BQkxFX0dUS19ET0NfVFJVRUAJQGVjaG8gJyAgRE9DICAgQnVpbGRpbmcgSFRNTCcKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAcm0gLXJmIGh0bWwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAbWtkaXIgaHRtbAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBjcCAkKHNyY2RpcikvJChET0NfTUFJTl9TR01MX0ZJTEUpIGh0bWwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAZm9yIGYgaW4gJChjb250ZW50X2ZpbGVzKTsgZG8gY3AgJChzcmNkaXIpLyQkZiBodG1sOyBkb25lCitARU5BQkxFX0dUS19ET0NfVFJVRUAJQGNwIC1wciB4bWwgaHRtbAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBjcCAuLi92ZXJzaW9uLmVudGl0aWVzIGh0bWwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAbWtodG1sX29wdGlvbnM9IiI7IFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlndGtkb2MtbWtodG1sIDI+JjEgLS1oZWxwIHwgZ3JlcCAgPi9kZXYvbnVsbCAiXC1cLXZlcmJvc2UiOyBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJaWYgdGVzdCAiJCg/KSIgPSAiMCI7IHRoZW4gXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgaWYgdGVzdCAieCQoVikiID0gIngxIjsgdGhlbiBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIG1raHRtbF9vcHRpb25zPSIkJG1raHRtbF9vcHRpb25zIC0tdmVyYm9zZSI7IFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkgIGZpOyBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJZmk7IFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAljZCBodG1sICYmIGd0a2RvYy1ta2h0bWwgJCRta2h0bWxfb3B0aW9ucyAkKERPQ19NT0RVTEUpICQoRE9DX01BSU5fU0dNTF9GSUxFKQorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBtdiBodG1sL2luZGV4LnNnbWwgaHRtbC9pbmRleC5zZ21sLmJhaworQEVOQUJMRV9HVEtfRE9DX1RSVUVACUAkKFNFRCkgInMvIGhyZWY9XCIkKERPQ19NT0RVTEUpXC8vIGhyZWY9XCIkKERPQ19NT0RVTEUpLUBHU1RfTUFKT1JNSU5PUkBcLy9nIiBodG1sL2luZGV4LnNnbWwuYmFrID5odG1sL2luZGV4LnNnbWwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAcm0gLWYgaHRtbC9pbmRleC5zZ21sLmJhaworQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBybSAtZiBodG1sLyQoRE9DX01BSU5fU0dNTF9GSUxFKQorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBybSAtcmYgaHRtbC94bWwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAcm0gLWYgaHRtbC92ZXJzaW9uLmVudGl0aWVzCitARU5BQkxFX0dUS19ET0NfVFJVRUAJQHRlc3QgIngkKEhUTUxfSU1BR0VTKSIgPSAieCIgfHwgZm9yIGkgaW4gIiIgJChIVE1MX0lNQUdFUykgOyBkbyBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGlmIHRlc3QgIiQkaSIgIT0gIiI7IHRoZW4gY3AgJChzcmNkaXIpLyQkaSBodG1sIDsgZmk7IGRvbmUKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAZWNobyAnICBET0MgICBGaXhpbmcgY3Jvc3MtcmVmZXJlbmNlcycKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAZ3RrZG9jLWZpeHhyZWYgLS1tb2R1bGU9JChET0NfTU9EVUxFKSAtLW1vZHVsZS1kaXI9aHRtbCAtLWh0bWwtZGlyPSQoSFRNTF9ESVIpICQoRklYWFJFRl9PUFRJT05TKQorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUB0b3VjaCBodG1sLWJ1aWxkLnN0YW1wCisKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQGNsZWFuLWxvY2FsLWd0a2RvYzoKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlAcm0gLXJmIHhtbCB0bXBsIGh0bWwKKyMgY2xlYW4gZmlsZXMgY29waWVkIGZvciBub25zcmNkaXIgdGVtcGxhdGVzIGJ1aWxkCitARU5BQkxFX0dUS19ET0NfVFJVRUAJQGlmIHRlc3QgeCIkKHNyY2RpcikiICE9IHguIDsgdGhlbiBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIHJtIC1yZiAkKFNDQU5PQkpfRklMRVMpICQoU0NBTl9GSUxFUykgJChSRVBPUlRfRklMRVMpIFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgICAgICQoTUFJTlRBSU5FUl9ET0NfU1RBTVBTKTsgXAorQEVOQUJMRV9HVEtfRE9DX1RSVUVACWZpCitARU5BQkxFX0dUS19ET0NfRkFMU0VAYWxsLWxvY2FsOgorQEVOQUJMRV9HVEtfRE9DX0ZBTFNFQGNsZWFuLWxvY2FsLWd0a2RvYzoKKworY2xlYW4tbG9jYWw6IGNsZWFuLWxvY2FsLWd0a2RvYworCUBybSAtZiAqfiAqLmJhaworCUBybSAtcmYgLmxpYnMKKworZGlzdGNsZWFuLWxvY2FsOgorCUBybSAtZiAkKFJFUE9SVF9GSUxFUykgXAorCSAgICAgICAgJChET0NfTU9EVUxFKS1kZWNsLWxpc3QudHh0ICQoRE9DX01PRFVMRSktZGVjbC50eHQKKwlAcm0gLXJmIHRtcGwvKi5zZ21sLmJhaworCUBybSAtZiAkKERPQ19NT0RVTEUpLmhpZXJhcmNoeQorCUBybSAtZiAqLnN0YW1wIHx8IHRydWUKKwlAaWYgdGVzdCAiJChhYnNfc3JjZGlyKSIgIT0gIiQoYWJzX2J1aWxkZGlyKSIgOyB0aGVuIFwKKwkgICAgcm0gLWYgJChET0NfTU9EVUxFKS1kb2NzLnNnbWwgOyBcCisJICAgIHJtIC1mICQoRE9DX01PRFVMRSkudHlwZXMgOyBcCisJICAgIHJtIC1mICQoRE9DX01PRFVMRSkuaW50ZXJmYWNlcyA7IFwKKwkgICAgcm0gLWYgJChET0NfTU9EVUxFKS1vdmVycmlkZXMudHh0IDsgXAorCSAgICBybSAtZiAkKERPQ19NT0RVTEUpLnByZXJlcXVpc2l0ZXMgOyBcCisJICAgIHJtIC1mICQoRE9DX01PRFVMRSktc2VjdGlvbnMudHh0IDsgXAorCSAgICBybSAtcmYgdG1wbC8qLnNnbWwgOyBcCisJICAgIHJtIC1yZiAkKElOU1BFQ1RfRElSKTsgXAorCWZpCisJQHJtIC1yZiAqLm8KKworIyB0aG9tYXM6IG1ha2UgZG9jcyBwYXJhbGxlbCBpbnN0YWxsYWJsZTsgZGV2aGVscCByZXF1aXJlcyBtYWpvcm1pbm9yIHRvbworaW5zdGFsbC1kYXRhLWxvY2FsOgorCShpbnN0YWxsZmlsZXM9YGVjaG8gJChidWlsZGRpcikvaHRtbC8qLnNnbWwgJChidWlsZGRpcikvaHRtbC8qLmh0bWwgJChidWlsZGRpcikvaHRtbC8qLnBuZyAkKGJ1aWxkZGlyKS9odG1sLyouY3NzYDsgXAorCWlmIHRlc3QgIiQkaW5zdGFsbGZpbGVzIiA9ICckKGJ1aWxkZGlyKS9odG1sLyouc2dtbCAkKGJ1aWxkZGlyKS9odG1sLyouaHRtbCAkKGJ1aWxkZGlyKS9odG1sLyoucG5nICQoYnVpbGRkaXIpL2h0bWwvKi5jc3MnOyBcCisJdGhlbiBlY2hvICctLSBOb3RoaW5nIHRvIGluc3RhbGwnIDsgXAorCWVsc2UgXAorCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChUQVJHRVRfRElSKTsgXAorCSAgZm9yIGkgaW4gJCRpbnN0YWxsZmlsZXM7IGRvIFwKKwkgICAgZWNobyAnLS0gSW5zdGFsbGluZyAnJCRpIDsgXAorCSAgICAkKElOU1RBTExfREFUQSkgJCRpICQoREVTVERJUikkKFRBUkdFVF9ESVIpOyBcCisJICBkb25lOyBcCisJICBwbmdmaWxlcz1gZWNobyAuL2h0bWwvKi5wbmdgOyBcCisJICBpZiB0ZXN0ICIkJHBuZ2ZpbGVzIiAhPSAnLi9odG1sLyoucG5nJzsgdGhlbiBcCisJICAgIGZvciBpIGluICQkcG5nZmlsZXM7IGRvIFwKKwkgICAgICBlY2hvICctLSBJbnN0YWxsaW5nICckJGkgOyBcCisJICAgICAgJChJTlNUQUxMX0RBVEEpICQkaSAkKERFU1RESVIpJChUQVJHRVRfRElSKTsgXAorCSAgICBkb25lOyBcCisJICBmaTsgXAorCSAgZWNobyAnLS0gSW5zdGFsbGluZyAkKGJ1aWxkZGlyKS9odG1sLyQoRE9DX01PRFVMRSkuZGV2aGVscDInIDsgXAorCSAgaWYgdGVzdCAtZSAkKGJ1aWxkZGlyKS9odG1sLyQoRE9DX01PRFVMRSkuZGV2aGVscDI7IHRoZW4gXAorCSAgICAgICAgICAgICQoSU5TVEFMTF9EQVRBKSAkKGJ1aWxkZGlyKS9odG1sLyQoRE9DX01PRFVMRSkuZGV2aGVscDIgXAorCSAgICAgICAgICAgICQoREVTVERJUikkKFRBUkdFVF9ESVIpLyQoRE9DX01PRFVMRSktQEdTVF9NQUpPUk1JTk9SQC5kZXZoZWxwMjsgXAorCSAgZmk7IFwKKwkgICh3aGljaCBndGtkb2MtcmViYXNlID4vZGV2L251bGwgJiYgXAorCSAgICBndGtkb2MtcmViYXNlIC0tcmVsYXRpdmUgLS1kZXN0LWRpcj0kKERFU1RESVIpIC0taHRtbC1kaXI9JChERVNURElSKSQoVEFSR0VUX0RJUikpIHx8IHRydWUgOyBcCisJZmkpCit1bmluc3RhbGwtbG9jYWw6CisJaWYgdGVzdCAtZCAkKERFU1RESVIpJChUQVJHRVRfRElSKTsgdGhlbiBcCisJICBybSAtcmYgJChERVNURElSKSQoVEFSR0VUX0RJUikvKjsgXAorCSAgcm1kaXIgLXAgJChERVNURElSKSQoVEFSR0VUX0RJUikgMj4vZGV2L251bGwgfHwgdHJ1ZTsgXAorCWVsc2UgXAorCSAgZWNobyAnLS0gTm90aGluZyB0byB1bmluc3RhbGwnIDsgXAorCWZpOworCisjCisjIENoZWNrcworIworQEVOQUJMRV9HVEtfRE9DX1RSVUVAY2hlY2staGllcmFyY2h5OiAkKERPQ19NT0RVTEUpLmhpZXJhcmNoeQorQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBpZiBncmVwICcJJyAkKERPQ19NT0RVTEUpLmhpZXJhcmNoeTsgdGhlbiBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGVjaG8gIiQoRE9DX01PRFVMRSkuaGllcmFyY2h5IGNvbnRhaW5zIHRhYnMsIHBsZWFzZSBmaXgiOyBcCitARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIC9iaW4vZmFsc2U7IFwKK0BFTkFCTEVfR1RLX0RPQ19UUlVFQAlmaQorCitARU5BQkxFX0dUS19ET0NfVFJVRUBjaGVjazogY2hlY2staGllcmFyY2h5CisKK2NoZWNrLWluc3BlY3RlZC12ZXJzaW9uczoKKwlAZWNobyBDaGVja2luZyBwbHVnaW4gdmVyc2lvbnMgb2YgaW5zcGVjdGVkIHBsdWdpbiBkYXRhIC4uLjsgXAorCWZhaWw9MCA7IFwKKwlmb3IgZWFjaCBpbiAkKGluc3BlY3RfZmlsZXMpIDsgZG8gXAorCSAgaWYgKGdyZXAgLUggJzx2ZXJzaW9uPicgJCRlYWNoIHwgZ3JlcCAtdiAnPHZlcnNpb24+JChWRVJTSU9OKScpOyB0aGVuIFwKKwkgICAgZWNobyAkJGVhY2ggc2hvdWxkIGJlIGZpeGVkIHRvIHNheSB2ZXJzaW9uICQoVkVSU0lPTikgb3IgYmUgcmVtb3ZlZCA7IFwKKwkgICAgZWNobyAic2VkIC1pIC1lICdzLzx2ZXJzaW9uLip2ZXJzaW9uPi88dmVyc2lvbj4kKFZFUlNJT04pPFwvdmVyc2lvbj4vJyIgJCRlYWNoOyBcCisJICAgIGVjaG8gOyBcCisJICAgIGZhaWw9MTsgXAorCSAgZmkgOyBcCisJZG9uZSA7IFwKKwlleGl0ICQkZmFpbAorCitjaGVjay1vdXRkYXRlZC1kb2NzOgorCSQoQU1fVl9HRU4pZWNobyBDaGVja2luZyBmb3Igb3V0ZGF0ZWQgcGx1Z2luIGluc3BlY3QgZGF0YSAuLi47IFwKKwlmYWlsPTAgOyBcCisJaWYgWyAtZCAkKHRvcF9zcmNkaXIpLy5naXQvIF07IHRoZW4gXAorCSAgZmlsZXM9YGZpbmQgJChzcmNkaXIpL2luc3BlY3QvIC1uYW1lICcqeG1sJ2A7IFwKKwkgIGZvciBmIGluICQkZmlsZXM7IGRvIFwKKwkgICAgdmVyPWBncmVwICc8dmVyc2lvbj4kKFBBQ0tBR0VfVkVSU0lPTik8L3ZlcnNpb24+JyAkJGZgOyBcCisJICAgIGlmIHRlc3QgIngkJHZlciIgPSAieCI7IHRoZW4gXAorCSAgICAgIHBsdWdpbj1gZWNobyAkJGYgfCBzZWQgLWUgJ3MvXi4qcGx1Z2luLS8vJyAtZSAncy8ueG1sLy8nYDsgXAorCSAgICAgICMgZWNobyAiQ2hlY2tpbmcgJCRwbHVnaW4gJCRmIjsgXAorCSAgICAgIHB1c2hkICIkKHRvcF9zcmNkaXIpIiA+L2Rldi9udWxsOyBcCisJICAgICAgcGluaXQ9YGdpdCBncmVwIC1BMyBHU1RfUExVR0lOX0RFRklORSAtLSBleHQvIGdzdC8gc3lzLyB8IGdyZXAgIlwiJCRwbHVnaW5cIiJgOyBcCisJICAgICAgcG9wZCA+L2Rldi9udWxsOyBcCisJICAgICAgIyBlY2hvICJbJCRwaW5pdF0iOyBcCisJICAgICAgaWYgdGVzdCAieCQkcGluaXQiID0gIngiOyB0aGVuIFwKKwkgICAgICAgIHByaW50ZiAiICoqKiogb3V0ZGF0ZWQgZG9jcyBmb3IgcGx1Z2luICUtMTVzOiAlc1xuIiAkJHBsdWdpbiAkJGY7IFwKKwkgICAgICAgIGZhaWw9MTsgXAorCSAgICAgIGZpOyBcCisJICAgIGZpOyBcCisJICBkb25lOyBcCisJZmkgOyBcCisJZXhpdCAkJGZhaWwKKworIworIyBSZXF1aXJlIGd0ay1kb2Mgd2hlbiBtYWtpbmcgZGlzdAorIworQEVOQUJMRV9HVEtfRE9DX1RSVUVAZGlzdC1jaGVjay1ndGtkb2M6CitARU5BQkxFX0dUS19ET0NfRkFMU0VAZGlzdC1jaGVjay1ndGtkb2M6CitARU5BQkxFX0dUS19ET0NfRkFMU0VACUBlY2hvICIqKiogZ3RrLWRvYyBtdXN0IGJlIGluc3RhbGxlZCBhbmQgZW5hYmxlZCBpbiBvcmRlciB0byBtYWtlIGRpc3QiCitARU5BQkxFX0dUS19ET0NfRkFMU0VACUBmYWxzZQorCisjIEZJWE1FOiBkZWNpZGUgd2hldGhlciB3ZSB3YW50IHRvIGRpc3QgZ2VuZXJhdGVkIGh0bWwgb3Igbm90CisjIGFsc28gdGhpcyBvbmx5IHdvcmtzLCBpZiB0aGUgcHJvamVjdCBoYXMgYmVlbiBidWlsZCBiZWZvcmUKKyMgd2UgY291bGQgZGlzdCBodG1sIG9ubHkgaWYgaXRzIHRoZXJlLCBidXQgdGhhdCBtaWdodCBsZWFkIHRvIG1pc3NpbmcgaHRtbCBpbgorIyB0YXJiYWxscworZGlzdC1ob29rOiBkaXN0LWNoZWNrLWd0a2RvYyBkaXN0LWhvb2stbG9jYWwKKwlta2RpciAkKGRpc3RkaXIpL2h0bWwKKwljcCBodG1sLyogJChkaXN0ZGlyKS9odG1sCisJLWNwICQoc3JjZGlyKS8kKERPQ19NT0RVTEUpLnR5cGVzICQoZGlzdGRpcikvCisJLWNwICQoc3JjZGlyKS8kKERPQ19NT0RVTEUpLXNlY3Rpb25zLnR4dCAkKGRpc3RkaXIpLworCWNkICQoZGlzdGRpcikgJiYgcm0gLWYgJChESVNUQ0xFQU5GSUxFUykKKwktZ3RrZG9jLXJlYmFzZSAtLW9ubGluZSAtLXJlbGF0aXZlIC0taHRtbC1kaXI9JChkaXN0ZGlyKS9odG1sCisKKy5QSE9OWSA6IGRpc3QtaG9vay1sb2NhbCBkb2NzIGNoZWNrLW91dGRhdGVkLWRvY3MgaW5zcGVjdAorCisjIGF2b2lkIHNwdXJpb3VzIGJ1aWxkIGVycm9ycyB3aGVuIGRpc3RjaGVja2luZyB3aXRoIC1qTgorLk5PVFBBUkFMTEVMOgorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMtZG9jcy5zZ21sIGIvZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLWRvY3Muc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmMzNGU5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLWRvY3Muc2dtbApAQCAtMCwwICsxLDQ1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgorICAgICAgICAgICAgICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBbCis8IUVOVElUWSAlIHZlcnNpb24tZW50aXRpZXMgU1lTVEVNICJ2ZXJzaW9uLmVudGl0aWVzIj4KKyV2ZXJzaW9uLWVudGl0aWVzOworXT4KKworPGJvb2sgaWQ9ImluZGV4IiB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSI+CisgIDxib29raW5mbz4KKyAgICA8dGl0bGU+R1N0cmVhbWVyIENvcmUgUGx1Z2lucyAmR1NUX01BSk9STUlOT1I7IFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+CisgICAgPHJlbGVhc2VpbmZvPgorICAgICAgZm9yIEdTdHJlYW1lciBDb3JlIFBsdWdpbnMgJkdTVF9NQUpPUk1JTk9SOyAoJkdTVF9WRVJTSU9OOykKKyAgICAgIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50YXRpb24gY2FuIGJlIGZvdW5kIG9uLWxpbmUgYXQKKyAgICAgIDx1bGluayByb2xlPSJvbmxpbmUtbG9jYXRpb24iIHVybD0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyLXBsdWdpbnMvaHRtbC8iPmh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci1wbHVnaW5zL2h0bWwvPC91bGluaz4uCisgICAgPC9yZWxlYXNlaW5mbz4KKyAgPC9ib29raW5mbz4KKworICA8Y2hhcHRlcj4KKyAgICA8dGl0bGU+Z3N0cmVhbWVyIEVsZW1lbnRzPC90aXRsZT4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1jYXBzZmlsdGVyLnhtbCIgLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1mYWtlc3JjLnhtbCIgLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1mYWtlc2luay54bWwiIC8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtZmRzaW5rLnhtbCIgLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1mZHNyYy54bWwiIC8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtZmlsZXNyYy54bWwiIC8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtZmlsZXNpbmsueG1sIiAvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWZ1bm5lbC54bWwiIC8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtaWRlbnRpdHkueG1sIiAvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWlucHV0LXNlbGVjdG9yLnhtbCIgLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1tdWx0aXF1ZXVlLnhtbCIgLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1vdXRwdXQtc2VsZWN0b3IueG1sIiAvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXF1ZXVlLnhtbCIgLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1xdWV1ZTIueG1sIiAvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXRlZS54bWwiIC8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtdHlwZWZpbmQueG1sIiAvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXZhbHZlLnhtbCIgLz4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyPgorICAgIDx0aXRsZT5nc3RyZWFtZXIgUGx1Z2luczwvdGl0bGU+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL3BsdWdpbi1jb3JlZWxlbWVudHMueG1sIiAvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbCIgLz4KKyAgPC9jaGFwdGVyPgorPC9ib29rPgorCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMtc2VjdGlvbnMudHh0IGIvZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLXNlY3Rpb25zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODYyYTEzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLXNlY3Rpb25zLnR4dApAQCAtMCwwICsxLDI3NSBAQAorPFNFQ1RJT04+Cis8RklMRT5lbGVtZW50LWZha2VzcmM8L0ZJTEU+Cis8VElUTEU+ZmFrZXNyYzwvVElUTEU+CitHc3RGYWtlU3JjCitHc3RGYWtlU3JjRGF0YVR5cGUKK0dzdEZha2VTcmNGaWxsVHlwZQorR3N0RmFrZVNyY091dHB1dFR5cGUKK0dzdEZha2VTcmNTaXplVHlwZQorPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitHc3RGYWtlU3JjQ2xhc3MKK0dTVF9GQUtFX1NSQworR1NUX0lTX0ZBS0VfU1JDCitHU1RfVFlQRV9GQUtFX1NSQworR1NUX0ZBS0VfU1JDX0NMQVNTCitHU1RfSVNfRkFLRV9TUkNfQ0xBU1MKKzxTVUJTRUNUSU9OIFByaXZhdGU+Citnc3RfZmFrZV9zcmNfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5lbGVtZW50LWZha2VzaW5rPC9GSUxFPgorPFRJVExFPmZha2VzaW5rPC9USVRMRT4KK0dzdEZha2VTaW5rCitHc3RGYWtlU2lua1N0YXRlRXJyb3IKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR3N0RmFrZVNpbmtDbGFzcworR1NUX0ZBS0VfU0lOSworR1NUX0ZBS0VfU0lOS19DQVNUCitHU1RfSVNfRkFLRV9TSU5LCitHU1RfVFlQRV9GQUtFX1NJTksKK0dTVF9GQUtFX1NJTktfQ0xBU1MKK0dTVF9JU19GQUtFX1NJTktfQ0xBU1MKKzxTVUJTRUNUSU9OIFByaXZhdGU+Citnc3RfZmFrZV9zaW5rX2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+ZWxlbWVudC1mZHNpbms8L0ZJTEU+Cis8VElUTEU+ZmRzaW5rPC9USVRMRT4KK0dzdEZkU2luaworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitHc3RGZFNpbmtDbGFzcworR1NUX0ZEX1NJTksKK0dTVF9JU19GRF9TSU5LCitHU1RfVFlQRV9GRF9TSU5LCitHU1RfRkRfU0lOS19DTEFTUworR1NUX0lTX0ZEX1NJTktfQ0xBU1MKKzxTVUJTRUNUSU9OIFByaXZhdGU+Citnc3RfZmRfc2lua19nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPmVsZW1lbnQtZmRzcmM8L0ZJTEU+Cis8VElUTEU+ZmRzcmM8L1RJVExFPgorR3N0RmRTcmMKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR3N0RmRTcmNDbGFzcworR1NUX0ZEX1NSQworR1NUX0lTX0ZEX1NSQworR1NUX1RZUEVfRkRfU1JDCitHU1RfRkRfU1JDX0NMQVNTCitHU1RfSVNfRkRfU1JDX0NMQVNTCis8U1VCU0VDVElPTiBQcml2YXRlPgorZ3N0X2ZkX3NyY19nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPmVsZW1lbnQtZmlsZXNyYzwvRklMRT4KKzxUSVRMRT5maWxlc3JjPC9USVRMRT4KK0dzdEZpbGVTcmMKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR3N0RmlsZVNyY0NsYXNzCitHU1RfRklMRV9TUkMKK0dTVF9GSUxFX1NSQ19DQVNUCitHU1RfSVNfRklMRV9TUkMKK0dTVF9UWVBFX0ZJTEVfU1JDCitHU1RfRklMRV9TUkNfQ0xBU1MKK0dTVF9JU19GSUxFX1NSQ19DTEFTUworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK2dzdF9maWxlX3NyY19nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPmVsZW1lbnQtZmlsZXNpbms8L0ZJTEU+Cis8VElUTEU+ZmlsZXNpbms8L1RJVExFPgorR3N0RmlsZVNpbmsKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR3N0RmlsZVNpbmtDbGFzcworR1NUX0ZJTEVfU0lOSworR1NUX0lTX0ZJTEVfU0lOSworR1NUX1RZUEVfRklMRV9TSU5LCitHU1RfRklMRV9TSU5LX0NMQVNTCitHU1RfSVNfRklMRV9TSU5LX0NMQVNTCis8U1VCU0VDVElPTiBQcml2YXRlPgorZ3N0X2ZpbGVfc2lua19nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPmVsZW1lbnQtZnVubmVsPC9GSUxFPgorPFRJVExFPmZ1bm5lbDwvVElUTEU+CitHc3RGdW5uZWwKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR3N0RnVubmVsQ2xhc3MKK0dTVF9GVU5ORUwKK0dTVF9JU19GVU5ORUwKK0dTVF9UWVBFX0ZVTk5FTAorR1NUX0ZVTk5FTF9DTEFTUworR1NUX0lTX0ZVTk5FTF9DTEFTUworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK2dzdF9mdW5uZWxfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5lbGVtZW50LWNhcHNmaWx0ZXI8L0ZJTEU+Cis8VElUTEU+Y2Fwc2ZpbHRlcjwvVElUTEU+CitHc3RDYXBzRmlsdGVyCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK0dzdENhcHNGaWx0ZXJDbGFzcworR1NUX0NBUFNGSUxURVIKK0dTVF9JU19DQVBTRklMVEVSCitHU1RfVFlQRV9DQVBTRklMVEVSCitHU1RfQ0FQU0ZJTFRFUl9DTEFTUworR1NUX0lTX0NBUFNGSUxURVJfQ0xBU1MKKzxTVUJTRUNUSU9OIFByaXZhdGU+Citnc3RfY2Fwc2ZpbHRlcl9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPmVsZW1lbnQtaWRlbnRpdHk8L0ZJTEU+Cis8VElUTEU+aWRlbnRpdHk8L1RJVExFPgorR3N0SWRlbnRpdHkKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR3N0SWRlbnRpdHlDbGFzcworR1NUX0lERU5USVRZCitHU1RfSVNfSURFTlRJVFkKK0dTVF9UWVBFX0lERU5USVRZCitHU1RfSURFTlRJVFlfQ0xBU1MKK0dTVF9JU19JREVOVElUWV9DTEFTUworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK2dzdF9pZGVudGl0eV9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPmVsZW1lbnQtaW5wdXQtc2VsZWN0b3I8L0ZJTEU+Cis8VElUTEU+aW5wdXQtc2VsZWN0b3I8L1RJVExFPgorR3N0SW5wdXRTZWxlY3RvcgorPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitHc3RJbnB1dFNlbGVjdG9yQ2xhc3MKK0dTVF9JTlBVVF9TRUxFQ1RPUgorR1NUX0lOUFVUX1NFTEVDVE9SX0NMQVNTCitHU1RfSVNfSU5QVVRfU0VMRUNUT1IKK0dTVF9JU19JTlBVVF9TRUxFQ1RPUl9DTEFTUworR1NUX1RZUEVfSU5QVVRfU0VMRUNUT1IKK2dzdF9pbnB1dF9zZWxlY3Rvcl9nZXRfdHlwZQorR1NUX0lOUFVUX1NFTEVDVE9SX0JST0FEQ0FTVAorR1NUX0lOUFVUX1NFTEVDVE9SX0dFVF9DT05ECitHU1RfSU5QVVRfU0VMRUNUT1JfR0VUX0xPQ0sKK0dTVF9JTlBVVF9TRUxFQ1RPUl9MT0NLCitHU1RfSU5QVVRfU0VMRUNUT1JfVU5MT0NLCitHU1RfSU5QVVRfU0VMRUNUT1JfV0FJVAorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPmVsZW1lbnQtcXVldWU8L0ZJTEU+Cis8VElUTEU+cXVldWU8L1RJVExFPgorR3N0UXVldWUKK0dzdFF1ZXVlTGVha3kKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR3N0UXVldWVDbGFzcworR1NUX1FVRVVFCitHU1RfSVNfUVVFVUUKK0dTVF9RVUVVRV9DTEFTUworR1NUX0lTX1FVRVVFX0NMQVNTCitHU1RfVFlQRV9RVUVVRQorPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK0dzdFF1ZXVlU2l6ZQorZ3N0X3F1ZXVlX2dldF90eXBlCitHU1RfUVVFVUVfQ0xFQVJfTEVWRUwKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5lbGVtZW50LXF1ZXVlMjwvRklMRT4KKzxUSVRMRT5xdWV1ZTI8L1RJVExFPgorR3N0UXVldWUyCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK0dzdFF1ZXVlMkNsYXNzCitHU1RfUVVFVUUyCitHU1RfUVVFVUUyX0NBU1QKK0dTVF9JU19RVUVVRTIKK0dTVF9RVUVVRTJfQ0xBU1MKK0dTVF9JU19RVUVVRTJfQ0xBU1MKK0dTVF9UWVBFX1FVRVVFMgorPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK0dzdFF1ZXVlMlNpemUKK0dzdFF1ZXVlMlJhbmdlCitnc3RfcXVldWUyX2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+ZWxlbWVudC1tdWx0aXF1ZXVlPC9GSUxFPgorPFRJVExFPm11bHRpcXVldWU8L1RJVExFPgorR3N0TXVsdGlRdWV1ZQorPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitHc3RNdWx0aVF1ZXVlQ2xhc3MKK0dTVF9NVUxUSV9RVUVVRQorR1NUX0lTX01VTFRJX1FVRVVFCitHU1RfTVVMVElfUVVFVUVfQ0xBU1MKK0dTVF9JU19NVUxUSV9RVUVVRV9DTEFTUworR1NUX1RZUEVfTVVMVElfUVVFVUUKKzxTVUJTRUNUSU9OIFByaXZhdGU+Citnc3RfbXVsdGlfcXVldWVfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5lbGVtZW50LW91dHB1dC1zZWxlY3RvcjwvRklMRT4KKzxUSVRMRT5vdXRwdXQtc2VsZWN0b3I8L1RJVExFPgorR3N0T3V0cHV0U2VsZWN0b3IKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR3N0T3V0cHV0U2VsZWN0b3JDbGFzcworR1NUX09VVFBVVF9TRUxFQ1RPUgorR1NUX09VVFBVVF9TRUxFQ1RPUl9DTEFTUworR1NUX0lTX09VVFBVVF9TRUxFQ1RPUgorR1NUX0lTX09VVFBVVF9TRUxFQ1RPUl9DTEFTUworR1NUX1RZUEVfT1VUUFVUX1NFTEVDVE9SCitnc3Rfb3V0cHV0X3NlbGVjdG9yX2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+ZWxlbWVudC10eXBlZmluZDwvRklMRT4KKzxUSVRMRT50eXBlZmluZDwvVElUTEU+CitHc3RUeXBlRmluZEVsZW1lbnQKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorR3N0VHlwZUZpbmRFbGVtZW50Q2xhc3MKK0dTVF9UWVBFX0ZJTkRfRUxFTUVOVAorR1NUX0lTX1RZUEVfRklORF9FTEVNRU5UCitHU1RfVFlQRV9UWVBFX0ZJTkRfRUxFTUVOVAorR1NUX1RZUEVfRklORF9FTEVNRU5UX0NMQVNTCitHU1RfSVNfVFlQRV9GSU5EX0VMRU1FTlRfQ0xBU1MKK0dTVF9UWVBFX0ZJTkRfRUxFTUVOVF9HRVRfQ0xBU1MKKzxTVUJTRUNUSU9OIFByaXZhdGU+Citnc3RfdHlwZV9maW5kX2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5lbGVtZW50LXRlZTwvRklMRT4KKzxUSVRMRT50ZWU8L1RJVExFPgorR3N0VGVlCitHc3RUZWVQdWxsTW9kZQorPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitHc3RUZWVDbGFzcworR1NUX1RFRQorR1NUX1RFRV9DQVNUCitHU1RfSVNfVEVFCitHU1RfVFlQRV9URUUKK0dTVF9URUVfQ0xBU1MKK0dTVF9JU19URUVfQ0xBU1MKKzxTVUJTRUNUSU9OIFByaXZhdGU+Citnc3RfdGVlX2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+ZWxlbWVudC12YWx2ZTwvRklMRT4KKzxUSVRMRT52YWx2ZTwvVElUTEU+CitHc3RWYWx2ZQorPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitHc3RWYWx2ZUNsYXNzCitHU1RfVkFMVkUKK0dTVF9JU19WQUxWRQorR1NUX1RZUEVfVkFMVkUKK0dTVF9WQUxWRV9DTEFTUworR1NUX0lTX1ZBTFZFX0NMQVNTCis8U1VCU0VDVElPTiBQcml2YXRlPgorZ3N0X3ZhbHZlX2dldF90eXBlCis8L1NFQ1RJT04+CisKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzIGIvZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmFyZ3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE5ODI4MAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzCkBAIC0wLDAgKzEsMTA5MCBAQAorPEFSRz4KKzxOQU1FPkdzdFBpcGVsaW5lOjpkZWxheTwvTkFNRT4KKzxUWVBFPmd1aW50NjQ8L1RZUEU+Cis8UkFOR0U+PC9SQU5HRT4KKzxGTEFHUz5ydzwvRkxBR1M+Cis8TklDSz5EZWxheTwvTklDSz4KKzxCTFVSQj5FeHBlY3RlZCBkZWxheSBuZWVkZWQgZm9yIGVsZW1lbnRzIHRvIHNwaW4gdXAgdG8gUExBWUlORyBpbiBuYW5vc2Vjb25kcy48L0JMVVJCPgorPERFRkFVTFQ+MDwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0UGlwZWxpbmU6OmF1dG8tZmx1c2gtYnVzPC9OQU1FPgorPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Cis8UkFOR0U+PC9SQU5HRT4KKzxGTEFHUz5ydzwvRkxBR1M+Cis8TklDSz5BdXRvIEZsdXNoIEJ1czwvTklDSz4KKzxCTFVSQj5XaGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgZmx1c2ggdGhlIHBpcGVsaW5lJ3MgYnVzIHdoZW4gZ29pbmcgZnJvbSBSRUFEWSBpbnRvIE5VTEwgc3RhdGUuPC9CTFVSQj4KKzxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdENhcHNGaWx0ZXI6OmNhcHM8L05BTUU+Cis8VFlQRT5Hc3RDYXBzKjwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPkZpbHRlciBjYXBzPC9OSUNLPgorPEJMVVJCPlJlc3RyaWN0IHRoZSBwb3NzaWJsZSBhbGxvd2VkIGNhcGFiaWxpdGllcyAoTlVMTCBtZWFucyBBTlkpLiBTZXR0aW5nIHRoaXMgcHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LjwvQkxVUkI+Cis8REVGQVVMVD48L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdEZha2VTcmM6OmNhbi1hY3RpdmF0ZS1wdWxsPC9OQU1FPgorPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Cis8UkFOR0U+PC9SQU5HRT4KKzxGTEFHUz5yd3g8L0ZMQUdTPgorPE5JQ0s+Q2FuIGFjdGl2YXRlIHB1bGw8L05JQ0s+Cis8QkxVUkI+Q2FuIGFjdGl2YXRlIGluIHB1bGwgbW9kZS48L0JMVVJCPgorPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0RmFrZVNyYzo6Y2FuLWFjdGl2YXRlLXB1c2g8L05BTUU+Cis8VFlQRT5nYm9vbGVhbjwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3eDwvRkxBR1M+Cis8TklDSz5DYW4gYWN0aXZhdGUgcHVzaDwvTklDSz4KKzxCTFVSQj5DYW4gYWN0aXZhdGUgaW4gcHVzaCBtb2RlLjwvQkxVUkI+Cis8REVGQVVMVD5UUlVFPC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RGYWtlU3JjOjpkYXRhPC9OQU1FPgorPFRZUEU+R3N0RmFrZVNyY0RhdGFUeXBlPC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cnc8L0ZMQUdTPgorPE5JQ0s+ZGF0YTwvTklDSz4KKzxCTFVSQj5EYXRhIGFsbG9jYXRpb24gbWV0aG9kLjwvQkxVUkI+Cis8REVGQVVMVD5BbGxvY2F0ZSBkYXRhPC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RGYWtlU3JjOjpkYXRhcmF0ZTwvTkFNRT4KKzxUWVBFPmdpbnQ8L1RZUEU+Cis8UkFOR0U+Pj0gMDwvUkFOR0U+Cis8RkxBR1M+cnc8L0ZMQUdTPgorPE5JQ0s+RGF0YXJhdGU8L05JQ0s+Cis8QkxVUkI+VGltZXN0YW1wcyBidWZmZXJzIHdpdGggbnVtYmVyIG9mIGJ5dGVzIHBlciBzZWNvbmQgKDAgPSBub25lKS48L0JMVVJCPgorPERFRkFVTFQ+MDwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0RmFrZVNyYzo6ZHVtcDwvTkFNRT4KKzxUWVBFPmdib29sZWFuPC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cnc8L0ZMQUdTPgorPE5JQ0s+RHVtcDwvTklDSz4KKzxCTFVSQj5EdW1wIGJ1ZmZlciBjb250ZW50cyB0byBzdGRvdXQuPC9CTFVSQj4KKzxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RGYWtlU3JjOjpmaWxsdHlwZTwvTkFNRT4KKzxUWVBFPkdzdEZha2VTcmNGaWxsVHlwZTwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPmZpbGx0eXBlPC9OSUNLPgorPEJMVVJCPkhvdyB0byBmaWxsIHRoZSBidWZmZXIsIGlmIGF0IGFsbC48L0JMVVJCPgorPERFRkFVTFQ+RmlsbCBidWZmZXJzIHdpdGggemVyb3M8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdEZha2VTcmM6OmlzLWxpdmU8L05BTUU+Cis8VFlQRT5nYm9vbGVhbjwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3eDwvRkxBR1M+Cis8TklDSz5JcyB0aGlzIGEgbGl2ZSBzb3VyY2U8L05JQ0s+Cis8QkxVUkI+VHJ1ZSBpZiB0aGUgZWxlbWVudCBjYW5ub3QgcHJvZHVjZSBkYXRhIGluIFBBVVNFRC48L0JMVVJCPgorPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdEZha2VTcmM6Omxhc3QtbWVzc2FnZTwvTkFNRT4KKzxUWVBFPmdjaGFyKjwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnI8L0ZMQUdTPgorPE5JQ0s+bGFzdC1tZXNzYWdlPC9OSUNLPgorPEJMVVJCPlRoZSBsYXN0IHN0YXR1cyBtZXNzYWdlLjwvQkxVUkI+Cis8REVGQVVMVD5OVUxMPC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RGYWtlU3JjOjpwYXJlbnRzaXplPC9OQU1FPgorPFRZUEU+Z2ludDwvVFlQRT4KKzxSQU5HRT4+PSAwPC9SQU5HRT4KKzxGTEFHUz5ydzwvRkxBR1M+Cis8TklDSz5wYXJlbnRzaXplPC9OSUNLPgorPEJMVVJCPlNpemUgb2YgcGFyZW50IGJ1ZmZlciBmb3Igc3ViLWJ1ZmZlcmVkIGFsbG9jYXRpb24uPC9CTFVSQj4KKzxERUZBVUxUPjQwOTYwPC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RGYWtlU3JjOjpwYXR0ZXJuPC9OQU1FPgorPFRZUEU+Z2NoYXIqPC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cnc8L0ZMQUdTPgorPE5JQ0s+cGF0dGVybjwvTklDSz4KKzxCTFVSQj5wYXR0ZXJuLjwvQkxVUkI+Cis8REVGQVVMVD5OVUxMPC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RGYWtlU3JjOjpzaWduYWwtaGFuZG9mZnM8L05BTUU+Cis8VFlQRT5nYm9vbGVhbjwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPlNpZ25hbCBoYW5kb2ZmczwvTklDSz4KKzxCTFVSQj5TZW5kIGEgc2lnbmFsIGJlZm9yZSBwdXNoaW5nIHRoZSBidWZmZXIuPC9CTFVSQj4KKzxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RGYWtlU3JjOjpzaWxlbnQ8L05BTUU+Cis8VFlQRT5nYm9vbGVhbjwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPlNpbGVudDwvTklDSz4KKzxCTFVSQj5Eb24ndCBwcm9kdWNlIGxhc3RfbWVzc2FnZSBldmVudHMuPC9CTFVSQj4KKzxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RGYWtlU3JjOjpzaXplbWF4PC9OQU1FPgorPFRZUEU+Z2ludDwvVFlQRT4KKzxSQU5HRT4+PSAwPC9SQU5HRT4KKzxGTEFHUz5ydzwvRkxBR1M+Cis8TklDSz5zaXplbWF4PC9OSUNLPgorPEJMVVJCPk1heGltdW0gYnVmZmVyIHNpemUuPC9CTFVSQj4KKzxERUZBVUxUPjQwOTY8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdEZha2VTcmM6OnNpemVtaW48L05BTUU+Cis8VFlQRT5naW50PC9UWVBFPgorPFJBTkdFPj49IDA8L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPnNpemVtaW48L05JQ0s+Cis8QkxVUkI+TWluaW11bSBidWZmZXIgc2l6ZS48L0JMVVJCPgorPERFRkFVTFQ+MDwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0RmFrZVNyYzo6c2l6ZXR5cGU8L05BTUU+Cis8VFlQRT5Hc3RGYWtlU3JjU2l6ZVR5cGU8L1RZUEU+Cis8UkFOR0U+PC9SQU5HRT4KKzxGTEFHUz5ydzwvRkxBR1M+Cis8TklDSz5zaXpldHlwZTwvTklDSz4KKzxCTFVSQj5Ib3cgdG8gZGV0ZXJtaW5lIGJ1ZmZlciBzaXplcy48L0JMVVJCPgorPERFRkFVTFQ+U2VuZCBlbXB0eSBidWZmZXJzPC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RGYWtlU3JjOjpzeW5jPC9OQU1FPgorPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Cis8UkFOR0U+PC9SQU5HRT4KKzxGTEFHUz5ydzwvRkxBR1M+Cis8TklDSz5TeW5jPC9OSUNLPgorPEJMVVJCPlN5bmMgdG8gdGhlIGNsb2NrIHRvIHRoZSBkYXRhcmF0ZS48L0JMVVJCPgorPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdEZha2VTcmM6OmZvcm1hdDwvTkFNRT4KKzxUWVBFPkdzdEZvcm1hdDwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPkZvcm1hdDwvTklDSz4KKzxCTFVSQj5UaGUgZm9ybWF0IG9mIHRoZSBzZWdtZW50IGV2ZW50cy48L0JMVVJCPgorPERFRkFVTFQ+R1NUX0ZPUk1BVF9CWVRFUzwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0RmFrZVNpbms6OmNhbi1hY3RpdmF0ZS1wdWxsPC9OQU1FPgorPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Cis8UkFOR0U+PC9SQU5HRT4KKzxGTEFHUz5ydzwvRkxBR1M+Cis8TklDSz5DYW4gYWN0aXZhdGUgcHVsbDwvTklDSz4KKzxCTFVSQj5DYW4gYWN0aXZhdGUgaW4gcHVsbCBtb2RlLjwvQkxVUkI+Cis8REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0RmFrZVNpbms6OmNhbi1hY3RpdmF0ZS1wdXNoPC9OQU1FPgorPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Cis8UkFOR0U+PC9SQU5HRT4KKzxGTEFHUz5ydzwvRkxBR1M+Cis8TklDSz5DYW4gYWN0aXZhdGUgcHVzaDwvTklDSz4KKzxCTFVSQj5DYW4gYWN0aXZhdGUgaW4gcHVzaCBtb2RlLjwvQkxVUkI+Cis8REVGQVVMVD5UUlVFPC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RGYWtlU2luazo6ZHVtcDwvTkFNRT4KKzxUWVBFPmdib29sZWFuPC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cnc8L0ZMQUdTPgorPE5JQ0s+RHVtcDwvTklDSz4KKzxCTFVSQj5EdW1wIGJ1ZmZlciBjb250ZW50cyB0byBzdGRvdXQuPC9CTFVSQj4KKzxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RGYWtlU2luazo6bGFzdC1tZXNzYWdlPC9OQU1FPgorPFRZUEU+Z2NoYXIqPC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cjwvRkxBR1M+Cis8TklDSz5MYXN0IE1lc3NhZ2U8L05JQ0s+Cis8QkxVUkI+VGhlIG1lc3NhZ2UgZGVzY3JpYmluZyBjdXJyZW50IHN0YXR1cy48L0JMVVJCPgorPERFRkFVTFQ+TlVMTDwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0RmFrZVNpbms6OnNpZ25hbC1oYW5kb2ZmczwvTkFNRT4KKzxUWVBFPmdib29sZWFuPC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cnc8L0ZMQUdTPgorPE5JQ0s+U2lnbmFsIGhhbmRvZmZzPC9OSUNLPgorPEJMVVJCPlNlbmQgYSBzaWduYWwgYmVmb3JlIHVucmVmZmluZyB0aGUgYnVmZmVyLjwvQkxVUkI+Cis8REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0RmFrZVNpbms6OnNpbGVudDwvTkFNRT4KKzxUWVBFPmdib29sZWFuPC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cnc8L0ZMQUdTPgorPE5JQ0s+U2lsZW50PC9OSUNLPgorPEJMVVJCPkRvbid0IHByb2R1Y2UgbGFzdF9tZXNzYWdlIGV2ZW50cy48L0JMVVJCPgorPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdEZha2VTaW5rOjpzdGF0ZS1lcnJvcjwvTkFNRT4KKzxUWVBFPkdzdEZha2VTaW5rU3RhdGVFcnJvcjwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPlN0YXRlIEVycm9yPC9OSUNLPgorPEJMVVJCPkdlbmVyYXRlIGEgc3RhdGUgY2hhbmdlIGVycm9yLjwvQkxVUkI+Cis8REVGQVVMVD5ObyBzdGF0ZSBjaGFuZ2UgZXJyb3JzPC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RGYWtlU2luazo6bnVtLWJ1ZmZlcnM8L05BTUU+Cis8VFlQRT5naW50PC9UWVBFPgorPFJBTkdFPj49IC0xPC9SQU5HRT4KKzxGTEFHUz5ydzwvRkxBR1M+Cis8TklDSz5udW0tYnVmZmVyczwvTklDSz4KKzxCTFVSQj5OdW1iZXIgb2YgYnVmZmVycyB0byBhY2NlcHQgZ29pbmcgRU9TLjwvQkxVUkI+Cis8REVGQVVMVD4tMTwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0RmRTcmM6OmZkPC9OQU1FPgorPFRZUEU+Z2ludDwvVFlQRT4KKzxSQU5HRT4+PSAwPC9SQU5HRT4KKzxGTEFHUz5ydzwvRkxBR1M+Cis8TklDSz5mZDwvTklDSz4KKzxCTFVSQj5BbiBvcGVuIGZpbGUgZGVzY3JpcHRvciB0byByZWFkIGZyb20uPC9CTFVSQj4KKzxERUZBVUxUPjA8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdEZkU3JjOjp0aW1lb3V0PC9OQU1FPgorPFRZUEU+Z3VpbnQ2NDwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPlRpbWVvdXQ8L05JQ0s+Cis8QkxVUkI+UG9zdCBhIG1lc3NhZ2UgYWZ0ZXIgdGltZW91dCBtaWNyb3NlY29uZHMgKDAgPSBkaXNhYmxlZCkuPC9CTFVSQj4KKzxERUZBVUxUPjA8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdEZpbGVTcmM6OmZkPC9OQU1FPgorPFRZUEU+Z2ludDwvVFlQRT4KKzxSQU5HRT4+PSAwPC9SQU5HRT4KKzxGTEFHUz5yPC9GTEFHUz4KKzxOSUNLPkZpbGUtZGVzY3JpcHRvcjwvTklDSz4KKzxCTFVSQj5GaWxlLWRlc2NyaXB0b3IgZm9yIHRoZSBmaWxlIGJlaW5nIG1tYXAoKWQuPC9CTFVSQj4KKzxERUZBVUxUPjA8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdEZpbGVTcmM6OmxvY2F0aW9uPC9OQU1FPgorPFRZUEU+Z2NoYXIqPC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cnc8L0ZMQUdTPgorPE5JQ0s+RmlsZSBMb2NhdGlvbjwvTklDSz4KKzxCTFVSQj5Mb2NhdGlvbiBvZiB0aGUgZmlsZSB0byByZWFkLjwvQkxVUkI+Cis8REVGQVVMVD5OVUxMPC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RGaWxlU3JjOjptbWFwc2l6ZTwvTkFNRT4KKzxUWVBFPmd1bG9uZzwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPm1tYXAoKSBCbG9jayBTaXplPC9OSUNLPgorPEJMVVJCPlNpemUgaW4gYnl0ZXMgb2YgbW1hcCgpZCByZWdpb25zLjwvQkxVUkI+Cis8REVGQVVMVD48L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdEZpbGVTcmM6OnRvdWNoPC9OQU1FPgorPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Cis8UkFOR0U+PC9SQU5HRT4KKzxGTEFHUz5ydzwvRkxBR1M+Cis8TklDSz5Ub3VjaCBtYXBwZWQgcmVnaW9uIHJlYWQgZGF0YTwvTklDSz4KKzxCTFVSQj5Ub3VjaCBtbWFwcGVkIGRhdGEgcmVnaW9ucyB0byBmb3JjZSB0aGVtIHRvIGJlIHJlYWQgZnJvbSBkaXNrLjwvQkxVUkI+Cis8REVGQVVMVD5UUlVFPC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RGaWxlU3JjOjp1c2UtbW1hcDwvTkFNRT4KKzxUWVBFPmdib29sZWFuPC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cnc8L0ZMQUdTPgorPE5JQ0s+VXNlIG1tYXAgdG8gcmVhZCBkYXRhPC9OSUNLPgorPEJMVVJCPldoZXRoZXIgdG8gdXNlIG1tYXAoKSBpbnN0ZWFkIG9mIHJlYWQoKS48L0JMVVJCPgorPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdEZpbGVTcmM6OnNlcXVlbnRpYWw8L05BTUU+Cis8VFlQRT5nYm9vbGVhbjwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPk9wdGltaXNlIGZvciBzZXF1ZW50aWFsIG1tYXAgYWNjZXNzPC9OSUNLPgorPEJMVVJCPldoZXRoZXIgdG8gdXNlIG1hZHZpc2UgdG8gaGludCB0byB0aGUga2VybmVsIHRoYXQgYWNjZXNzIHRvIG1tYXAgcGFnZXMgd2lsbCBiZSBzZXF1ZW50aWFsLjwvQkxVUkI+Cis8REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0SWRlbnRpdHk6OmNoZWNrLXBlcmZlY3Q8L05BTUU+Cis8VFlQRT5nYm9vbGVhbjwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPkNoZWNrIEZvciBQZXJmZWN0IFN0cmVhbTwvTklDSz4KKzxCTFVSQj5WZXJpZnkgdGhhdCB0aGUgc3RyZWFtIGlzIHRpbWUtIGFuZCBkYXRhLWNvbnRpZ3VvdXMuIFRoaXMgb25seSBsb2dzIGluIHRoZSBkZWJ1ZyBsb2cuICBUaGlzIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB0aGUgY2hlY2staW1wZXJmZWN0LXRpbWVzdGFtcC9vZmZzZXQgcHJvcGVydGllcy48L0JMVVJCPgorPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdElkZW50aXR5OjpkYXRhcmF0ZTwvTkFNRT4KKzxUWVBFPmdpbnQ8L1RZUEU+Cis8UkFOR0U+Pj0gMDwvUkFOR0U+Cis8RkxBR1M+cnc8L0ZMQUdTPgorPE5JQ0s+RGF0YXJhdGU8L05JQ0s+Cis8QkxVUkI+KFJlKXRpbWVzdGFtcHMgYnVmZmVycyB3aXRoIG51bWJlciBvZiBieXRlcyBwZXIgc2Vjb25kICgwID0gaW5hY3RpdmUpLjwvQkxVUkI+Cis8REVGQVVMVD4wPC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RJZGVudGl0eTo6ZHJvcC1wcm9iYWJpbGl0eTwvTkFNRT4KKzxUWVBFPmdmbG9hdDwvVFlQRT4KKzxSQU5HRT5bMCwxXTwvUkFOR0U+Cis8RkxBR1M+cnc8L0ZMQUdTPgorPE5JQ0s+RHJvcCBQcm9iYWJpbGl0eTwvTklDSz4KKzxCTFVSQj5UaGUgUHJvYmFiaWxpdHkgYSBidWZmZXIgaXMgZHJvcHBlZC48L0JMVVJCPgorPERFRkFVTFQ+MDwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0SWRlbnRpdHk6OmR1bXA8L05BTUU+Cis8VFlQRT5nYm9vbGVhbjwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPkR1bXA8L05JQ0s+Cis8QkxVUkI+RHVtcCBidWZmZXIgY29udGVudHMgdG8gc3Rkb3V0LjwvQkxVUkI+Cis8REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0SWRlbnRpdHk6OmVycm9yLWFmdGVyPC9OQU1FPgorPFRZUEU+Z2ludDwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPkVycm9yIEFmdGVyPC9OSUNLPgorPEJMVVJCPkVycm9yIGFmdGVyIE4gYnVmZmVycy48L0JMVVJCPgorPERFRkFVTFQ+LTE8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdElkZW50aXR5OjpsYXN0LW1lc3NhZ2U8L05BTUU+Cis8VFlQRT5nY2hhcio8L1RZUEU+Cis8UkFOR0U+PC9SQU5HRT4KKzxGTEFHUz5yPC9GTEFHUz4KKzxOSUNLPmxhc3QtbWVzc2FnZTwvTklDSz4KKzxCTFVSQj5sYXN0LW1lc3NhZ2UuPC9CTFVSQj4KKzxERUZBVUxUPk5VTEw8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdElkZW50aXR5OjpzaWxlbnQ8L05BTUU+Cis8VFlQRT5nYm9vbGVhbjwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPnNpbGVudDwvTklDSz4KKzxCTFVSQj5zaWxlbnQuPC9CTFVSQj4KKzxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RJZGVudGl0eTo6c2luZ2xlLXNlZ21lbnQ8L05BTUU+Cis8VFlQRT5nYm9vbGVhbjwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPlNpbmdsZSBTZWdtZW50PC9OSUNLPgorPEJMVVJCPlRpbWVzdGFtcCBidWZmZXJzIGFuZCBlYXQgc2VnbWVudHMgc28gYXMgdG8gYXBwZWFyIGFzIG9uZSBzZWdtZW50LjwvQkxVUkI+Cis8REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0SWRlbnRpdHk6OnNsZWVwLXRpbWU8L05BTUU+Cis8VFlQRT5ndWludDwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPlNsZWVwIHRpbWU8L05JQ0s+Cis8QkxVUkI+TWljcm9zZWNvbmRzIHRvIHNsZWVwIGJldHdlZW4gcHJvY2Vzc2luZy48L0JMVVJCPgorPERFRkFVTFQ+MDwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0SWRlbnRpdHk6OnN5bmM8L05BTUU+Cis8VFlQRT5nYm9vbGVhbjwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPlN5bmNocm9uaXplPC9OSUNLPgorPEJMVVJCPlN5bmNocm9uaXplIHRvIHBpcGVsaW5lIGNsb2NrLjwvQkxVUkI+Cis8REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0SWRlbnRpdHk6OmNoZWNrLWltcGVyZmVjdC1vZmZzZXQ8L05BTUU+Cis8VFlQRT5nYm9vbGVhbjwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPkNoZWNrIGZvciBkaXNjb250aWd1b3VzIG9mZnNldDwvTklDSz4KKzxCTFVSQj5TZW5kIGVsZW1lbnQgbWVzc2FnZXMgaWYgb2Zmc2V0IGFuZCBvZmZzZXRfZW5kIGRvIG5vdCBtYXRjaCB1cC48L0JMVVJCPgorPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdElkZW50aXR5OjpjaGVjay1pbXBlcmZlY3QtdGltZXN0YW1wPC9OQU1FPgorPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Cis8UkFOR0U+PC9SQU5HRT4KKzxGTEFHUz5ydzwvRkxBR1M+Cis8TklDSz5DaGVjayBmb3IgZGlzY29udGlndW91cyB0aW1lc3RhbXBzPC9OSUNLPgorPEJMVVJCPlNlbmQgZWxlbWVudCBtZXNzYWdlcyBpZiB0aW1lc3RhbXBzIGFuZCBkdXJhdGlvbnMgZG8gbm90IG1hdGNoIHVwLjwvQkxVUkI+Cis8REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0SWRlbnRpdHk6OnNpZ25hbC1oYW5kb2ZmczwvTkFNRT4KKzxUWVBFPmdib29sZWFuPC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cnc8L0ZMQUdTPgorPE5JQ0s+U2lnbmFsIGhhbmRvZmZzPC9OSUNLPgorPEJMVVJCPlNlbmQgYSBzaWduYWwgYmVmb3JlIHB1c2hpbmcgdGhlIGJ1ZmZlci48L0JMVVJCPgorPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0UXVldWU6OmN1cnJlbnQtbGV2ZWwtYnVmZmVyczwvTkFNRT4KKzxUWVBFPmd1aW50PC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cjwvRkxBR1M+Cis8TklDSz5DdXJyZW50IGxldmVsIChidWZmZXJzKTwvTklDSz4KKzxCTFVSQj5DdXJyZW50IG51bWJlciBvZiBidWZmZXJzIGluIHRoZSBxdWV1ZS48L0JMVVJCPgorPERFRkFVTFQ+MDwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0UXVldWU6OmN1cnJlbnQtbGV2ZWwtYnl0ZXM8L05BTUU+Cis8VFlQRT5ndWludDwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnI8L0ZMQUdTPgorPE5JQ0s+Q3VycmVudCBsZXZlbCAoa0IpPC9OSUNLPgorPEJMVVJCPkN1cnJlbnQgYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIChieXRlcykuPC9CTFVSQj4KKzxERUZBVUxUPjA8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdFF1ZXVlOjpjdXJyZW50LWxldmVsLXRpbWU8L05BTUU+Cis8VFlQRT5ndWludDY0PC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cjwvRkxBR1M+Cis8TklDSz5DdXJyZW50IGxldmVsIChucyk8L05JQ0s+Cis8QkxVUkI+Q3VycmVudCBhbW91bnQgb2YgZGF0YSBpbiB0aGUgcXVldWUgKGluIG5zKS48L0JMVVJCPgorPERFRkFVTFQ+MDwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0UXVldWU6OmxlYWt5PC9OQU1FPgorPFRZUEU+R3N0UXVldWVMZWFreTwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPkxlYWt5PC9OSUNLPgorPEJMVVJCPldoZXJlIHRoZSBxdWV1ZSBsZWFrcywgaWYgYXQgYWxsLjwvQkxVUkI+Cis8REVGQVVMVD5Ob3QgTGVha3k8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdFF1ZXVlOjptYXgtc2l6ZS1idWZmZXJzPC9OQU1FPgorPFRZUEU+Z3VpbnQ8L1RZUEU+Cis8UkFOR0U+PC9SQU5HRT4KKzxGTEFHUz5ydzwvRkxBR1M+Cis8TklDSz5NYXguIHNpemUgKGJ1ZmZlcnMpPC9OSUNLPgorPEJMVVJCPk1heC4gbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdGhlIHF1ZXVlICgwPWRpc2FibGUpLjwvQkxVUkI+Cis8REVGQVVMVD4yMDA8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdFF1ZXVlOjptYXgtc2l6ZS1ieXRlczwvTkFNRT4KKzxUWVBFPmd1aW50PC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cnc8L0ZMQUdTPgorPE5JQ0s+TWF4LiBzaXplIChrQik8L05JQ0s+Cis8QkxVUkI+TWF4LiBhbW91bnQgb2YgZGF0YSBpbiB0aGUgcXVldWUgKGJ5dGVzLCAwPWRpc2FibGUpLjwvQkxVUkI+Cis8REVGQVVMVD4xMDQ4NTc2MDwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0UXVldWU6Om1heC1zaXplLXRpbWU8L05BTUU+Cis8VFlQRT5ndWludDY0PC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cnc8L0ZMQUdTPgorPE5JQ0s+TWF4LiBzaXplIChucyk8L05JQ0s+Cis8QkxVUkI+TWF4LiBhbW91bnQgb2YgZGF0YSBpbiB0aGUgcXVldWUgKGluIG5zLCAwPWRpc2FibGUpLjwvQkxVUkI+Cis8REVGQVVMVD4xMDAwMDAwMDAwPC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RRdWV1ZTo6bWluLXRocmVzaG9sZC1idWZmZXJzPC9OQU1FPgorPFRZUEU+Z3VpbnQ8L1RZUEU+Cis8UkFOR0U+PC9SQU5HRT4KKzxGTEFHUz5ydzwvRkxBR1M+Cis8TklDSz5NaW4uIHRocmVzaG9sZCAoYnVmZmVycyk8L05JQ0s+Cis8QkxVUkI+TWluLiBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgcXVldWUgdG8gYWxsb3cgcmVhZGluZyAoMD1kaXNhYmxlKS48L0JMVVJCPgorPERFRkFVTFQ+MDwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0UXVldWU6Om1pbi10aHJlc2hvbGQtYnl0ZXM8L05BTUU+Cis8VFlQRT5ndWludDwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPk1pbi4gdGhyZXNob2xkIChrQik8L05JQ0s+Cis8QkxVUkI+TWluLiBhbW91bnQgb2YgZGF0YSBpbiB0aGUgcXVldWUgdG8gYWxsb3cgcmVhZGluZyAoYnl0ZXMsIDA9ZGlzYWJsZSkuPC9CTFVSQj4KKzxERUZBVUxUPjA8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdFF1ZXVlOjptaW4tdGhyZXNob2xkLXRpbWU8L05BTUU+Cis8VFlQRT5ndWludDY0PC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cnc8L0ZMQUdTPgorPE5JQ0s+TWluLiB0aHJlc2hvbGQgKG5zKTwvTklDSz4KKzxCTFVSQj5NaW4uIGFtb3VudCBvZiBkYXRhIGluIHRoZSBxdWV1ZSB0byBhbGxvdyByZWFkaW5nIChpbiBucywgMD1kaXNhYmxlKS48L0JMVVJCPgorPERFRkFVTFQ+MDwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0UXVldWU6OnNpbGVudDwvTkFNRT4KKzxUWVBFPmdib29sZWFuPC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cnc8L0ZMQUdTPgorPE5JQ0s+U2lsZW50PC9OSUNLPgorPEJMVVJCPkRvbid0IGVtaXQgcXVldWUgc2lnbmFscy48L0JMVVJCPgorPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdEZpbGVTaW5rOjpsb2NhdGlvbjwvTkFNRT4KKzxUWVBFPmdjaGFyKjwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPkZpbGUgTG9jYXRpb248L05JQ0s+Cis8QkxVUkI+TG9jYXRpb24gb2YgdGhlIGZpbGUgdG8gd3JpdGUuPC9CTFVSQj4KKzxERUZBVUxUPk5VTEw8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdEZpbGVTaW5rOjpidWZmZXItbW9kZTwvTkFNRT4KKzxUWVBFPkdzdEZpbGVTaW5rQnVmZmVyTW9kZTwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPkJ1ZmZlcmluZyBtb2RlPC9OSUNLPgorPEJMVVJCPlRoZSBidWZmZXJpbmcgbW9kZSB0byB1c2UuPC9CTFVSQj4KKzxERUZBVUxUPkRlZmF1bHQgYnVmZmVyaW5nPC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RGaWxlU2luazo6YnVmZmVyLXNpemU8L05BTUU+Cis8VFlQRT5ndWludDwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPkJ1ZmZlcmluZyBzaXplPC9OSUNLPgorPEJMVVJCPlNpemUgb2YgYnVmZmVyIGluIG51bWJlciBvZiBieXRlcyBmb3IgbGluZSBvciBmdWxsIGJ1ZmZlci1tb2RlLjwvQkxVUkI+Cis8REVGQVVMVD42NTUzNjwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0RmlsZVNpbms6OmFwcGVuZDwvTkFNRT4KKzxUWVBFPmdib29sZWFuPC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cnc8L0ZMQUdTPgorPE5JQ0s+QXBwZW5kPC9OSUNLPgorPEJMVVJCPkFwcGVuZCB0byBhbiBhbHJlYWR5IGV4aXN0aW5nIGZpbGUuPC9CTFVSQj4KKzxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RUZWU6Omhhcy1jaGFpbjwvTkFNRT4KKzxUWVBFPmdib29sZWFuPC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cnd4PC9GTEFHUz4KKzxOSUNLPkhhcyBDaGFpbjwvTklDSz4KKzxCTFVSQj5JZiB0aGUgZWxlbWVudCBjYW4gb3BlcmF0ZSBpbiBwdXNoIG1vZGUuPC9CTFVSQj4KKzxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdFRlZTo6aGFzLXNpbmstbG9vcDwvTkFNRT4KKzxUWVBFPmdib29sZWFuPC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cnd4PC9GTEFHUz4KKzxOSUNLPkhhcyBTaW5rIExvb3A8L05JQ0s+Cis8QkxVUkI+SWYgdGhlIGVsZW1lbnQgc2hvdWxkIHNwYXduIGEgdGhyZWFkICh1bmltcGxlbWVudGVkIGFuZCBkZXByZWNhdGVkKS48L0JMVVJCPgorPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdFRlZTo6bGFzdC1tZXNzYWdlPC9OQU1FPgorPFRZUEU+Z2NoYXIqPC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cjwvRkxBR1M+Cis8TklDSz5MYXN0IE1lc3NhZ2U8L05JQ0s+Cis8QkxVUkI+VGhlIG1lc3NhZ2UgZGVzY3JpYmluZyBjdXJyZW50IHN0YXR1cy48L0JMVVJCPgorPERFRkFVTFQ+TlVMTDwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0VGVlOjpudW0tc3JjLXBhZHM8L05BTUU+Cis8VFlQRT5naW50PC9UWVBFPgorPFJBTkdFPj49IDA8L1JBTkdFPgorPEZMQUdTPnI8L0ZMQUdTPgorPE5JQ0s+TnVtIFNyYyBQYWRzPC9OSUNLPgorPEJMVVJCPlRoZSBudW1iZXIgb2Ygc291cmNlIHBhZHMuPC9CTFVSQj4KKzxERUZBVUxUPjA8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdFRlZTo6c2lsZW50PC9OQU1FPgorPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Cis8UkFOR0U+PC9SQU5HRT4KKzxGTEFHUz5yd3g8L0ZMQUdTPgorPE5JQ0s+U2lsZW50PC9OSUNLPgorPEJMVVJCPkRvbid0IHByb2R1Y2UgbGFzdF9tZXNzYWdlIGV2ZW50cy48L0JMVVJCPgorPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0VGVlOjpwdWxsLW1vZGU8L05BTUU+Cis8VFlQRT5Hc3RUZWVQdWxsTW9kZTwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3eDwvRkxBR1M+Cis8TklDSz5QdWxsIG1vZGU8L05JQ0s+Cis8QkxVUkI+QmVoYXZpb3Igb2YgdGVlIGluIHB1bGwgbW9kZS48L0JMVVJCPgorPERFRkFVTFQ+TmV2ZXIgYWN0aXZhdGUgaW4gcHVsbCBtb2RlPC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RUZWU6OmFsbG9jLXBhZDwvTkFNRT4KKzxUWVBFPkdzdFBhZCo8L1RZUEU+Cis8UkFOR0U+PC9SQU5HRT4KKzxGTEFHUz5ydzwvRkxBR1M+Cis8TklDSz5BbGxvY2F0aW9uIFNyYyBQYWQ8L05JQ0s+Cis8QkxVUkI+VGhlIHBhZCB1c2VkIGZvciBnc3RfcGFkX2FsbG9jX2J1ZmZlci48L0JMVVJCPgorPERFRkFVTFQ+PC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RUeXBlRmluZEVsZW1lbnQ6OmNhcHM8L05BTUU+Cis8VFlQRT5Hc3RDYXBzKjwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnI8L0ZMQUdTPgorPE5JQ0s+Y2FwczwvTklDSz4KKzxCTFVSQj5kZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtLjwvQkxVUkI+Cis8REVGQVVMVD48L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdFR5cGVGaW5kRWxlbWVudDo6bWF4aW11bTwvTkFNRT4KKzxUWVBFPmd1aW50PC9UWVBFPgorPFJBTkdFPlsxLDEwMF08L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPm1heGltdW08L05JQ0s+Cis8QkxVUkI+cHJvYmFiaWxpdHkgdG8gc3RvcCB0eXBlZmluZGluZyAoZGVwcmVjYXRlZDsgbm9uLWZ1bmN0aW9uYWwpLjwvQkxVUkI+Cis8REVGQVVMVD4xMDA8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdFR5cGVGaW5kRWxlbWVudDo6bWluaW11bTwvTkFNRT4KKzxUWVBFPmd1aW50PC9UWVBFPgorPFJBTkdFPlsxLDEwMF08L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPm1pbmltdW08L05JQ0s+Cis8QkxVUkI+bWluaW11bSBwcm9iYWJpbGl0eSByZXF1aXJlZCB0byBhY2NlcHQgY2Fwcy48L0JMVVJCPgorPERFRkFVTFQ+MTwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0VHlwZUZpbmRFbGVtZW50Ojpmb3JjZS1jYXBzPC9OQU1FPgorPFRZUEU+R3N0Q2Fwcyo8L1RZUEU+Cis8UkFOR0U+PC9SQU5HRT4KKzxGTEFHUz5ydzwvRkxBR1M+Cis8TklDSz5mb3JjZSBjYXBzPC9OSUNLPgorPEJMVVJCPmZvcmNlIGNhcHMgd2l0aG91dCBkb2luZyBhIHR5cGVmaW5kLjwvQkxVUkI+Cis8REVGQVVMVD48L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdEZkU2luazo6ZmQ8L05BTUU+Cis8VFlQRT5naW50PC9UWVBFPgorPFJBTkdFPj49IDA8L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPmZkPC9OSUNLPgorPEJMVVJCPkFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yIHRvIHdyaXRlIHRvLjwvQkxVUkI+Cis8REVGQVVMVD4xPC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RNdWx0aVF1ZXVlOjpleHRyYS1zaXplLWJ1ZmZlcnM8L05BTUU+Cis8VFlQRT5ndWludDwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPkV4dHJhIFNpemUgKGJ1ZmZlcnMpPC9OSUNLPgorPEJMVVJCPkFtb3VudCBvZiBidWZmZXJzIHRoZSBxdWV1ZXMgY2FuIGdyb3cgaWYgb25lIG9mIHRoZW0gaXMgZW1wdHkgKDA9ZGlzYWJsZSkgKE5PVCBJTVBMRU1FTlRFRCkuPC9CTFVSQj4KKzxERUZBVUxUPjU8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdE11bHRpUXVldWU6OmV4dHJhLXNpemUtYnl0ZXM8L05BTUU+Cis8VFlQRT5ndWludDwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPkV4dHJhIFNpemUgKGtCKTwvTklDSz4KKzxCTFVSQj5BbW91bnQgb2YgZGF0YSB0aGUgcXVldWVzIGNhbiBncm93IGlmIG9uZSBvZiB0aGVtIGlzIGVtcHR5IChieXRlcywgMD1kaXNhYmxlKSAoTk9UIElNUExFTUVOVEVEKS48L0JMVVJCPgorPERFRkFVTFQ+MTA0ODU3NjA8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdE11bHRpUXVldWU6OmV4dHJhLXNpemUtdGltZTwvTkFNRT4KKzxUWVBFPmd1aW50NjQ8L1RZUEU+Cis8UkFOR0U+PC9SQU5HRT4KKzxGTEFHUz5ydzwvRkxBR1M+Cis8TklDSz5FeHRyYSBTaXplIChucyk8L05JQ0s+Cis8QkxVUkI+QW1vdW50IG9mIHRpbWUgdGhlIHF1ZXVlcyBjYW4gZ3JvdyBpZiBvbmUgb2YgdGhlbSBpcyBlbXB0eSAoaW4gbnMsIDA9ZGlzYWJsZSkgKE5PVCBJTVBMRU1FTlRFRCkuPC9CTFVSQj4KKzxERUZBVUxUPjMwMDAwMDAwMDA8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdE11bHRpUXVldWU6Om1heC1zaXplLWJ1ZmZlcnM8L05BTUU+Cis8VFlQRT5ndWludDwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPk1heC4gc2l6ZSAoYnVmZmVycyk8L05JQ0s+Cis8QkxVUkI+TWF4LiBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgcXVldWUgKDA9ZGlzYWJsZSkuPC9CTFVSQj4KKzxERUZBVUxUPjU8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdE11bHRpUXVldWU6Om1heC1zaXplLWJ5dGVzPC9OQU1FPgorPFRZUEU+Z3VpbnQ8L1RZUEU+Cis8UkFOR0U+PC9SQU5HRT4KKzxGTEFHUz5ydzwvRkxBR1M+Cis8TklDSz5NYXguIHNpemUgKGtCKTwvTklDSz4KKzxCTFVSQj5NYXguIGFtb3VudCBvZiBkYXRhIGluIHRoZSBxdWV1ZSAoYnl0ZXMsIDA9ZGlzYWJsZSkuPC9CTFVSQj4KKzxERUZBVUxUPjEwNDg1NzYwPC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RNdWx0aVF1ZXVlOjptYXgtc2l6ZS10aW1lPC9OQU1FPgorPFRZUEU+Z3VpbnQ2NDwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPk1heC4gc2l6ZSAobnMpPC9OSUNLPgorPEJMVVJCPk1heC4gYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIChpbiBucywgMD1kaXNhYmxlKS48L0JMVVJCPgorPERFRkFVTFQ+MjAwMDAwMDAwMDwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0TXVsdGlRdWV1ZTo6aGlnaC1wZXJjZW50PC9OQU1FPgorPFRZUEU+Z2ludDwvVFlQRT4KKzxSQU5HRT5bMCwxMDBdPC9SQU5HRT4KKzxGTEFHUz5ydzwvRkxBR1M+Cis8TklDSz5IaWdoIHBlcmNlbnQ8L05JQ0s+Cis8QkxVUkI+SGlnaCB0aHJlc2hvbGQgZm9yIGJ1ZmZlcmluZyB0byBmaW5pc2guPC9CTFVSQj4KKzxERUZBVUxUPjk5PC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RNdWx0aVF1ZXVlOjpsb3ctcGVyY2VudDwvTkFNRT4KKzxUWVBFPmdpbnQ8L1RZUEU+Cis8UkFOR0U+WzAsMTAwXTwvUkFOR0U+Cis8RkxBR1M+cnc8L0ZMQUdTPgorPE5JQ0s+TG93IHBlcmNlbnQ8L05JQ0s+Cis8QkxVUkI+TG93IHRocmVzaG9sZCBmb3IgYnVmZmVyaW5nIHRvIHN0YXJ0LjwvQkxVUkI+Cis8REVGQVVMVD4xMDwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0TXVsdGlRdWV1ZTo6dXNlLWJ1ZmZlcmluZzwvTkFNRT4KKzxUWVBFPmdib29sZWFuPC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cnc8L0ZMQUdTPgorPE5JQ0s+VXNlIGJ1ZmZlcmluZzwvTklDSz4KKzxCTFVSQj5FbWl0IEdTVF9NRVNTQUdFX0JVRkZFUklORyBiYXNlZCBvbiBsb3ctL2hpZ2gtcGVyY2VudCB0aHJlc2hvbGRzLjwvQkxVUkI+Cis8REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0TXVsdGlRdWV1ZTo6c3luYy1ieS1ydW5uaW5nLXRpbWU8L05BTUU+Cis8VFlQRT5nYm9vbGVhbjwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPlN5bmMgQnkgUnVubmluZyBUaW1lPC9OSUNLPgorPEJMVVJCPlN5bmNocm9uaXplIGRlYWN0aXZhdGVkIG9yIG5vdC1saW5rZWQgc3RyZWFtcyBieSBydW5uaW5nIHRpbWUuPC9CTFVSQj4KKzxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RCaW46OmFzeW5jLWhhbmRsaW5nPC9OQU1FPgorPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Cis8UkFOR0U+PC9SQU5HRT4KKzxGTEFHUz5ydzwvRkxBR1M+Cis8TklDSz5Bc3luYyBIYW5kbGluZzwvTklDSz4KKzxCTFVSQj5UaGUgYmluIHdpbGwgaGFuZGxlIEFzeW5jaHJvbm91cyBzdGF0ZSBjaGFuZ2VzLjwvQkxVUkI+Cis8REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0UXVldWUyOjpjdXJyZW50LWxldmVsLWJ1ZmZlcnM8L05BTUU+Cis8VFlQRT5ndWludDwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnI8L0ZMQUdTPgorPE5JQ0s+Q3VycmVudCBsZXZlbCAoYnVmZmVycyk8L05JQ0s+Cis8QkxVUkI+Q3VycmVudCBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgcXVldWUuPC9CTFVSQj4KKzxERUZBVUxUPjA8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdFF1ZXVlMjo6Y3VycmVudC1sZXZlbC1ieXRlczwvTkFNRT4KKzxUWVBFPmd1aW50PC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cjwvRkxBR1M+Cis8TklDSz5DdXJyZW50IGxldmVsIChrQik8L05JQ0s+Cis8QkxVUkI+Q3VycmVudCBhbW91bnQgb2YgZGF0YSBpbiB0aGUgcXVldWUgKGJ5dGVzKS48L0JMVVJCPgorPERFRkFVTFQ+MDwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0UXVldWUyOjpjdXJyZW50LWxldmVsLXRpbWU8L05BTUU+Cis8VFlQRT5ndWludDY0PC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cjwvRkxBR1M+Cis8TklDSz5DdXJyZW50IGxldmVsIChucyk8L05JQ0s+Cis8QkxVUkI+Q3VycmVudCBhbW91bnQgb2YgZGF0YSBpbiB0aGUgcXVldWUgKGluIG5zKS48L0JMVVJCPgorPERFRkFVTFQ+MDwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0UXVldWUyOjpoaWdoLXBlcmNlbnQ8L05BTUU+Cis8VFlQRT5naW50PC9UWVBFPgorPFJBTkdFPlswLDEwMF08L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPkhpZ2ggcGVyY2VudDwvTklDSz4KKzxCTFVSQj5IaWdoIHRocmVzaG9sZCBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4gT25seSB1c2VkIGlmIHVzZS1idWZmZXJpbmcgaXMgVHJ1ZS48L0JMVVJCPgorPERFRkFVTFQ+OTk8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdFF1ZXVlMjo6bG93LXBlcmNlbnQ8L05BTUU+Cis8VFlQRT5naW50PC9UWVBFPgorPFJBTkdFPlswLDEwMF08L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPkxvdyBwZXJjZW50PC9OSUNLPgorPEJMVVJCPkxvdyB0aHJlc2hvbGQgZm9yIGJ1ZmZlcmluZyB0byBzdGFydC4gT25seSB1c2VkIGlmIHVzZS1idWZmZXJpbmcgaXMgVHJ1ZS48L0JMVVJCPgorPERFRkFVTFQ+MTA8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdFF1ZXVlMjo6bWF4LXNpemUtYnVmZmVyczwvTkFNRT4KKzxUWVBFPmd1aW50PC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cnc8L0ZMQUdTPgorPE5JQ0s+TWF4LiBzaXplIChidWZmZXJzKTwvTklDSz4KKzxCTFVSQj5NYXguIG51bWJlciBvZiBidWZmZXJzIGluIHRoZSBxdWV1ZSAoMD1kaXNhYmxlKS48L0JMVVJCPgorPERFRkFVTFQ+MTAwPC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RRdWV1ZTI6Om1heC1zaXplLWJ5dGVzPC9OQU1FPgorPFRZUEU+Z3VpbnQ8L1RZUEU+Cis8UkFOR0U+PC9SQU5HRT4KKzxGTEFHUz5ydzwvRkxBR1M+Cis8TklDSz5NYXguIHNpemUgKGtCKTwvTklDSz4KKzxCTFVSQj5NYXguIGFtb3VudCBvZiBkYXRhIGluIHRoZSBxdWV1ZSAoYnl0ZXMsIDA9ZGlzYWJsZSkuPC9CTFVSQj4KKzxERUZBVUxUPjIwOTcxNTI8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdFF1ZXVlMjo6bWF4LXNpemUtdGltZTwvTkFNRT4KKzxUWVBFPmd1aW50NjQ8L1RZUEU+Cis8UkFOR0U+PC9SQU5HRT4KKzxGTEFHUz5ydzwvRkxBR1M+Cis8TklDSz5NYXguIHNpemUgKG5zKTwvTklDSz4KKzxCTFVSQj5NYXguIGFtb3VudCBvZiBkYXRhIGluIHRoZSBxdWV1ZSAoaW4gbnMsIDA9ZGlzYWJsZSkuPC9CTFVSQj4KKzxERUZBVUxUPjIwMDAwMDAwMDA8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdFF1ZXVlMjo6dGVtcC1sb2NhdGlvbjwvTkFNRT4KKzxUWVBFPmdjaGFyKjwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPlRlbXBvcmFyeSBGaWxlIExvY2F0aW9uPC9OSUNLPgorPEJMVVJCPkxvY2F0aW9uIHRvIHN0b3JlIHRlbXBvcmFyeSBmaWxlcyBpbiAoRGVwcmVjYXRlZDogT25seSByZWFkIHRoaXMgcHJvcGVydHksIHVzZSB0ZW1wLXRlbXBsYXRlIHRvIGNvbmZpZ3VyZSB0aGUgbmFtZSB0ZW1wbGF0ZSkuPC9CTFVSQj4KKzxERUZBVUxUPk5VTEw8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdFF1ZXVlMjo6dGVtcC10ZW1wbGF0ZTwvTkFNRT4KKzxUWVBFPmdjaGFyKjwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPlRlbXBvcmFyeSBGaWxlIFRlbXBsYXRlPC9OSUNLPgorPEJMVVJCPkZpbGUgdGVtcGxhdGUgdG8gc3RvcmUgdGVtcG9yYXJ5IGZpbGVzIGluLCBzaG91bGQgY29udGFpbiBkaXJlY3RvcnkgYW5kIFhYWFhYWC4gKE5VTEwgPT0gZGlzYWJsZWQpLjwvQkxVUkI+Cis8REVGQVVMVD5OVUxMPC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RRdWV1ZTI6OnVzZS1idWZmZXJpbmc8L05BTUU+Cis8VFlQRT5nYm9vbGVhbjwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPlVzZSBidWZmZXJpbmc8L05JQ0s+Cis8QkxVUkI+RW1pdCBHU1RfTUVTU0FHRV9CVUZGRVJJTkcgYmFzZWQgb24gbG93LS9oaWdoLXBlcmNlbnQgdGhyZXNob2xkcy48L0JMVVJCPgorPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdFF1ZXVlMjo6dXNlLXJhdGUtZXN0aW1hdGU8L05BTUU+Cis8VFlQRT5nYm9vbGVhbjwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPlVzZSBSYXRlIEVzdGltYXRlPC9OSUNLPgorPEJMVVJCPkVzdGltYXRlIHRoZSBiaXRyYXRlIG9mIHRoZSBzdHJlYW0gdG8gY2FsY3VsYXRlIHRpbWUgbGV2ZWwuPC9CTFVSQj4KKzxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdFF1ZXVlMjo6dGVtcC1yZW1vdmU8L05BTUU+Cis8VFlQRT5nYm9vbGVhbjwvVFlQRT4KKzxSQU5HRT48L1JBTkdFPgorPEZMQUdTPnJ3PC9GTEFHUz4KKzxOSUNLPlJlbW92ZSB0aGUgVGVtcG9yYXJ5IEZpbGU8L05JQ0s+Cis8QkxVUkI+UmVtb3ZlIHRoZSB0ZW1wLWxvY2F0aW9uIGFmdGVyIHVzZS48L0JMVVJCPgorPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0UXVldWUyOjpyaW5nLWJ1ZmZlci1tYXgtc2l6ZTwvTkFNRT4KKzxUWVBFPmd1aW50NjQ8L1RZUEU+Cis8UkFOR0U+PC9SQU5HRT4KKzxGTEFHUz5ydzwvRkxBR1M+Cis8TklDSz5NYXguIHJpbmcgYnVmZmVyIHNpemUgKGJ5dGVzKTwvTklDSz4KKzxCTFVSQj5NYXguIGFtb3VudCBvZiBkYXRhIGluIHRoZSByaW5nIGJ1ZmZlciAoYnl0ZXMsIDAgPSBkaXNhYmxlZCkuPC9CTFVSQj4KKzxERUZBVUxUPjA8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdFZhbHZlOjpkcm9wPC9OQU1FPgorPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Cis8UkFOR0U+PC9SQU5HRT4KKzxGTEFHUz5ydzwvRkxBR1M+Cis8TklDSz5Ecm9wIGJ1ZmZlcnMgYW5kIGV2ZW50czwvTklDSz4KKzxCTFVSQj5XaGV0aGVyIHRvIGRyb3AgYnVmZmVycyBhbmQgZXZlbnRzIG9yIGxldCB0aGVtIHRocm91Z2guPC9CTFVSQj4KKzxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RPdXRwdXRTZWxlY3Rvcjo6YWN0aXZlLXBhZDwvTkFNRT4KKzxUWVBFPkdzdFBhZCo8L1RZUEU+Cis8UkFOR0U+PC9SQU5HRT4KKzxGTEFHUz5ydzwvRkxBR1M+Cis8TklDSz5BY3RpdmUgcGFkPC9OSUNLPgorPEJMVVJCPkN1cnJlbnRseSBhY3RpdmUgc3JjIHBhZC48L0JMVVJCPgorPERFRkFVTFQ+PC9ERUZBVUxUPgorPC9BUkc+CisKKzxBUkc+Cis8TkFNRT5Hc3RPdXRwdXRTZWxlY3Rvcjo6cmVzZW5kLWxhdGVzdDwvTkFNRT4KKzxUWVBFPmdib29sZWFuPC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cnc8L0ZMQUdTPgorPE5JQ0s+UmVzZW5kIGxhdGVzdCBidWZmZXI8L05JQ0s+Cis8QkxVUkI+UmVzZW5kIGxhdGVzdCBidWZmZXIgYWZ0ZXIgYSBzd2l0Y2ggdG8gYSBuZXcgcGFkLjwvQkxVUkI+Cis8REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0T3V0cHV0U2VsZWN0b3I6OnBhZC1uZWdvdGlhdGlvbi1tb2RlPC9OQU1FPgorPFRZUEU+R3N0T3V0cHV0U2VsZWN0b3JQYWROZWdvdGlhdGlvbk1vZGU8L1RZUEU+Cis8UkFOR0U+PC9SQU5HRT4KKzxGTEFHUz5ydzwvRkxBR1M+Cis8TklDSz5QYWQgbmVnb3RpYXRpb24gbW9kZTwvTklDSz4KKzxCTFVSQj5UaGUgbW9kZSB0byBiZSB1c2VkIGZvciBwYWQgbmVnb3RpYXRpb24uPC9CTFVSQj4KKzxERUZBVUxUPkFsbDwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0SW5wdXRTZWxlY3Rvcjo6YWN0aXZlLXBhZDwvTkFNRT4KKzxUWVBFPkdzdFBhZCo8L1RZUEU+Cis8UkFOR0U+PC9SQU5HRT4KKzxGTEFHUz5ydzwvRkxBR1M+Cis8TklDSz5BY3RpdmUgcGFkPC9OSUNLPgorPEJMVVJCPlRoZSBjdXJyZW50bHkgYWN0aXZlIHNpbmsgcGFkLjwvQkxVUkI+Cis8REVGQVVMVD48L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdElucHV0U2VsZWN0b3I6Om4tcGFkczwvTkFNRT4KKzxUWVBFPmd1aW50PC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cjwvRkxBR1M+Cis8TklDSz5OdW1iZXIgb2YgUGFkczwvTklDSz4KKzxCTFVSQj5UaGUgbnVtYmVyIG9mIHNpbmsgcGFkcy48L0JMVVJCPgorPERFRkFVTFQ+MDwvREVGQVVMVD4KKzwvQVJHPgorCis8QVJHPgorPE5BTUU+R3N0SW5wdXRTZWxlY3Rvcjo6c2VsZWN0LWFsbDwvTkFNRT4KKzxUWVBFPmdib29sZWFuPC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cnc8L0ZMQUdTPgorPE5JQ0s+U2VsZWN0IGFsbCBtb2RlPC9OSUNLPgorPEJMVVJCPkZvcndhcmRzIGRhdGEgZnJvbSBhbGwgaW5wdXQgcGFkcy48L0JMVVJCPgorPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Cis8L0FSRz4KKworPEFSRz4KKzxOQU1FPkdzdElucHV0U2VsZWN0b3I6OnN5bmMtc3RyZWFtczwvTkFNRT4KKzxUWVBFPmdib29sZWFuPC9UWVBFPgorPFJBTkdFPjwvUkFOR0U+Cis8RkxBR1M+cnc8L0ZMQUdTPgorPE5JQ0s+U3luYyBTdHJlYW1zPC9OSUNLPgorPEJMVVJCPlN5bmNocm9uaXplIGluYWN0aXZlIHN0cmVhbXMgdG8gdGhlIHJ1bm5pbmcgdGltZSBvZiB0aGUgYWN0aXZlIHN0cmVhbS48L0JMVVJCPgorPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Cis8L0FSRz4KKwpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmhpZXJhcmNoeSBiL2RvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5oaWVyYXJjaHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMzNjM5MgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5oaWVyYXJjaHkKQEAgLTAsMCArMSw0NiBAQAorR09iamVjdAorICBHSW5pdGlhbGx5VW5vd25lZAorICAgIEdzdE9iamVjdAorICAgICAgR3N0UGFkCisgICAgICBHc3RQYWRUZW1wbGF0ZQorICAgICAgR3N0UGx1Z2luRmVhdHVyZQorICAgICAgICBHc3RFbGVtZW50RmFjdG9yeQorICAgICAgICBHc3RUeXBlRmluZEZhY3RvcnkKKyAgICAgICAgR3N0SW5kZXhGYWN0b3J5CisgICAgICBHc3RFbGVtZW50CisgICAgICAgIEdzdEJpbgorICAgICAgICAgIEdzdFBpcGVsaW5lCisgICAgICAgIEdzdEJhc2VUcmFuc2Zvcm0KKyAgICAgICAgICBHc3RDYXBzRmlsdGVyCisgICAgICAgICAgR3N0SWRlbnRpdHkKKyAgICAgICAgR3N0QmFzZVNyYworICAgICAgICAgIEdzdEZha2VTcmMKKyAgICAgICAgICBHc3RQdXNoU3JjCisgICAgICAgICAgICBHc3RGZFNyYworICAgICAgICAgIEdzdEZpbGVTcmMKKyAgICAgICAgR3N0QmFzZVNpbmsKKyAgICAgICAgICBHc3RGYWtlU2luaworICAgICAgICAgIEdzdEZkU2luaworICAgICAgICAgIEdzdEZpbGVTaW5rCisgICAgICAgIEdzdEZ1bm5lbAorICAgICAgICBHc3RJbnB1dFNlbGVjdG9yCisgICAgICAgIEdzdE91dHB1dFNlbGVjdG9yCisgICAgICAgIEdzdFF1ZXVlCisgICAgICAgIEdzdFF1ZXVlMgorICAgICAgICBHc3RUZWUKKyAgICAgICAgR3N0VHlwZUZpbmRFbGVtZW50CisgICAgICAgIEdzdE11bHRpUXVldWUKKyAgICAgICAgR3N0VmFsdmUKKyAgICAgIEdzdEJ1cworICAgICAgR3N0VGFzaworICAgICAgR3N0VGFza1Bvb2wKKyAgICAgIEdzdENsb2NrCisgICAgICBHc3RQbHVnaW4KKyAgICAgIEdzdFJlZ2lzdHJ5CisgICAgICBHc3RJbmRleAorICAgICAgICBHc3RNZW1JbmRleAorICAgICAgICBHc3RGaWxlSW5kZXgKK0dJbnRlcmZhY2UKKyAgR1R5cGVQbHVnaW4KKyAgR3N0Q2hpbGRQcm94eQorICBHc3RVUklIYW5kbGVyCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuaW50ZXJmYWNlcyBiL2RvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5pbnRlcmZhY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzODA1ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuaW50ZXJmYWNlcwpAQCAtMCwwICsxLDYgQEAKK0dzdEJpbiBHc3RDaGlsZFByb3h5CitHc3RGZFNpbmsgR3N0VVJJSGFuZGxlcgorR3N0RmRTcmMgR3N0VVJJSGFuZGxlcgorR3N0RmlsZVNpbmsgR3N0VVJJSGFuZGxlcgorR3N0RmlsZVNyYyBHc3RVUklIYW5kbGVyCitHc3RQaXBlbGluZSBHc3RDaGlsZFByb3h5CmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMucHJlcmVxdWlzaXRlcyBiL2RvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5wcmVyZXF1aXNpdGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MjZhOWYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMucHJlcmVxdWlzaXRlcwpAQCAtMCwwICsxIEBACitHc3RDaGlsZFByb3h5IEdzdE9iamVjdApkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLnNpZ25hbHMgYi9kb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuc2lnbmFscwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzZkMmUxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLnNpZ25hbHMKQEAgLTAsMCArMSwxMjYgQEAKKzxTSUdOQUw+Cis8TkFNRT5Hc3RCaW46OmVsZW1lbnQtYWRkZWQ8L05BTUU+Cis8UkVUVVJOUz52b2lkPC9SRVRVUk5TPgorPEZMQUdTPmY8L0ZMQUdTPgorR3N0QmluICpnc3RiaW4KK0dzdEVsZW1lbnQgKmFyZzEKKzwvU0lHTkFMPgorCis8U0lHTkFMPgorPE5BTUU+R3N0QmluOjplbGVtZW50LXJlbW92ZWQ8L05BTUU+Cis8UkVUVVJOUz52b2lkPC9SRVRVUk5TPgorPEZMQUdTPmY8L0ZMQUdTPgorR3N0QmluICpnc3RiaW4KK0dzdEVsZW1lbnQgKmFyZzEKKzwvU0lHTkFMPgorCis8U0lHTkFMPgorPE5BTUU+R3N0QmluOjpkby1sYXRlbmN5PC9OQU1FPgorPFJFVFVSTlM+Z2Jvb2xlYW48L1JFVFVSTlM+Cis8RkxBR1M+bDwvRkxBR1M+CitHc3RCaW4gKmdzdGJpbgorPC9TSUdOQUw+CisKKzxTSUdOQUw+Cis8TkFNRT5Hc3RGYWtlU3JjOjpoYW5kb2ZmPC9OQU1FPgorPFJFVFVSTlM+dm9pZDwvUkVUVVJOUz4KKzxGTEFHUz5sPC9GTEFHUz4KK0dzdEZha2VTcmMgKmdzdGZha2VzcmMKK0dzdEJ1ZmZlciAqYXJnMQorR3N0UGFkICphcmcyCis8L1NJR05BTD4KKworPFNJR05BTD4KKzxOQU1FPkdzdEZha2VTaW5rOjpoYW5kb2ZmPC9OQU1FPgorPFJFVFVSTlM+dm9pZDwvUkVUVVJOUz4KKzxGTEFHUz5sPC9GTEFHUz4KK0dzdEZha2VTaW5rICpnc3RmYWtlc2luaworR3N0QnVmZmVyICphcmcxCitHc3RQYWQgKmFyZzIKKzwvU0lHTkFMPgorCis8U0lHTkFMPgorPE5BTUU+R3N0RmFrZVNpbms6OnByZXJvbGwtaGFuZG9mZjwvTkFNRT4KKzxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Cis8RkxBR1M+bDwvRkxBR1M+CitHc3RGYWtlU2luayAqZ3N0ZmFrZXNpbmsKK0dzdEJ1ZmZlciAqYXJnMQorR3N0UGFkICphcmcyCis8L1NJR05BTD4KKworPFNJR05BTD4KKzxOQU1FPkdzdElkZW50aXR5OjpoYW5kb2ZmPC9OQU1FPgorPFJFVFVSTlM+dm9pZDwvUkVUVVJOUz4KKzxGTEFHUz5sPC9GTEFHUz4KK0dzdElkZW50aXR5ICpnc3RpZGVudGl0eQorR3N0QnVmZmVyICphcmcxCis8L1NJR05BTD4KKworPFNJR05BTD4KKzxOQU1FPkdzdFF1ZXVlOjpvdmVycnVuPC9OQU1FPgorPFJFVFVSTlM+dm9pZDwvUkVUVVJOUz4KKzxGTEFHUz5mPC9GTEFHUz4KK0dzdFF1ZXVlICpnc3RxdWV1ZQorPC9TSUdOQUw+CisKKzxTSUdOQUw+Cis8TkFNRT5Hc3RRdWV1ZTo6cnVubmluZzwvTkFNRT4KKzxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Cis8RkxBR1M+ZjwvRkxBR1M+CitHc3RRdWV1ZSAqZ3N0cXVldWUKKzwvU0lHTkFMPgorCis8U0lHTkFMPgorPE5BTUU+R3N0UXVldWU6OnVuZGVycnVuPC9OQU1FPgorPFJFVFVSTlM+dm9pZDwvUkVUVVJOUz4KKzxGTEFHUz5mPC9GTEFHUz4KK0dzdFF1ZXVlICpnc3RxdWV1ZQorPC9TSUdOQUw+CisKKzxTSUdOQUw+Cis8TkFNRT5Hc3RRdWV1ZTo6cHVzaGluZzwvTkFNRT4KKzxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Cis8RkxBR1M+ZjwvRkxBR1M+CitHc3RRdWV1ZSAqZ3N0cXVldWUKKzwvU0lHTkFMPgorCis8U0lHTkFMPgorPE5BTUU+R3N0VHlwZUZpbmRFbGVtZW50OjpoYXZlLXR5cGU8L05BTUU+Cis8UkVUVVJOUz52b2lkPC9SRVRVUk5TPgorPEZMQUdTPmY8L0ZMQUdTPgorR3N0VHlwZUZpbmRFbGVtZW50ICpnc3R0eXBlZmluZGVsZW1lbnQKK2d1aW50ICBhcmcxCitHc3RDYXBzICphcmcyCis8L1NJR05BTD4KKworPFNJR05BTD4KKzxOQU1FPkdzdE11bHRpUXVldWU6Om92ZXJydW48L05BTUU+Cis8UkVUVVJOUz52b2lkPC9SRVRVUk5TPgorPEZMQUdTPmY8L0ZMQUdTPgorR3N0TXVsdGlRdWV1ZSAqZ3N0bXVsdGlxdWV1ZQorPC9TSUdOQUw+CisKKzxTSUdOQUw+Cis8TkFNRT5Hc3RNdWx0aVF1ZXVlOjp1bmRlcnJ1bjwvTkFNRT4KKzxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Cis8RkxBR1M+ZjwvRkxBR1M+CitHc3RNdWx0aVF1ZXVlICpnc3RtdWx0aXF1ZXVlCis8L1NJR05BTD4KKworPFNJR05BTD4KKzxOQU1FPkdzdElucHV0U2VsZWN0b3I6OmJsb2NrPC9OQU1FPgorPFJFVFVSTlM+Z2ludDY0PC9SRVRVUk5TPgorPEZMQUdTPmxhPC9GTEFHUz4KK0dzdElucHV0U2VsZWN0b3IgKmdzdGlucHV0c2VsZWN0b3IKKzwvU0lHTkFMPgorCis8U0lHTkFMPgorPE5BTUU+R3N0SW5wdXRTZWxlY3Rvcjo6c3dpdGNoPC9OQU1FPgorPFJFVFVSTlM+dm9pZDwvUkVUVVJOUz4KKzxGTEFHUz5sPC9GTEFHUz4KK0dzdElucHV0U2VsZWN0b3IgKmdzdGlucHV0c2VsZWN0b3IKK0dzdFBhZCAqYXJnMQorZ2ludDY0ICBhcmcyCitnaW50NjQgIGFyZzMKKzwvU0lHTkFMPgorCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMudHlwZXMgYi9kb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMudHlwZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY0OTUwZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy50eXBlcwpAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8Z3N0L2dzdC5oPgpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvY2gwMS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvY2gwMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMGVjMDAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3BsdWdpbnMvaHRtbC9jaDAxLmh0bWwKQEAgLTAsMCArMSw4MyBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPmdzdHJlYW1lciBFbGVtZW50czwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAwLjExIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAwLjExIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDAuMTEgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5odG1sIiB0aXRsZT0iY2Fwc2ZpbHRlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+wqA8L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIENvcmUgUGx1Z2lucyAwLjExIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1jYXBzZmlsdGVyLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj48L3RhYmxlPgorPGRpdiBjbGFzcz0iY2hhcHRlciI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIj4KKzxhIG5hbWU9ImlkMzE3OTI2Ij48L2E+Z3N0cmVhbWVyIEVsZW1lbnRzPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KKzxkaXYgY2xhc3M9InRvYyI+PGRsPgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuaHRtbCI+Y2Fwc2ZpbHRlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgUGFzcyBkYXRhIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBsaW1pdGluZyBmb3JtYXRzPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwiPmZha2VzcmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFB1c2ggZW1wdHkgKG5vIGRhdGEpIGJ1ZmZlcnMgYXJvdW5kPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sIj5mYWtlc2luazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQmxhY2sgaG9sZSBmb3IgZGF0YTwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rLmh0bWwiPmZkc2luazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgV3JpdGUgZGF0YSB0byBhIGZpbGUgZGVzY3JpcHRvcjwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuaHRtbCI+ZmRzcmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFJlYWQgZnJvbSBhIGZpbGUgZGVzY3JpcHRvcjwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5odG1sIj5maWxlc3JjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBSZWFkIGZyb20gYXJiaXRyYXJ5IHBvaW50IGluIGEgZmlsZTwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsuaHRtbCI+ZmlsZXNpbms8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFdyaXRlIHN0cmVhbSB0byBhIGZpbGU8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZ1bm5lbC5odG1sIj5mdW5uZWw8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIE4tdG8tMSBwaXBlIGZpdHRpbmc8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lmh0bWwiPmlkZW50aXR5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBQYXNzIGRhdGEgd2l0aG91dCBtb2RpZmljYXRpb248L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwiPmlucHV0LXNlbGVjdG9yPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBOLXRvLTEgaW5wdXQgc3RyZWFtIHNlbGVjdG9yPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwiPm11bHRpcXVldWU8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIE11bHRpcGxlIGRhdGEgcXVldWU8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5odG1sIj5vdXRwdXQtc2VsZWN0b3I8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIDEtdG8tTiBvdXRwdXQgc3RyZWFtIHNlbGVjdG9yPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sIj5xdWV1ZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgU2ltcGxlIGRhdGEgcXVldWU8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sIj5xdWV1ZTI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFNpbXBsZSBkYXRhIHF1ZXVlPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCI+dGVlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCAxLXRvLU4gcGlwZSBmaXR0aW5nPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5odG1sIj50eXBlZmluZDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgRmluZHMgdGhlIG1lZGlhIHR5cGUgb2YgYSBzdHJlYW08L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXZhbHZlLmh0bWwiPnZhbHZlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBEcm9wcyBidWZmZXJzIGFuZCBldmVudHMgb3IgbGV0cyB0aGVtIHRocm91Z2g8L3NwYW4+Cis8L2R0PgorPC9kbD48L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2NoMDIuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2NoMDIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMThiYTc0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wbHVnaW5zL2h0bWwvY2gwMi5odG1sCkBAIC0wLDAgKzEsMzggQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5nc3RyZWFtZXIgUGx1Z2luczwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAwLjExIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAwLjExIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXZhbHZlLmh0bWwiIHRpdGxlPSJ2YWx2ZSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXBsdWdpbi1jb3JlZWxlbWVudHMuaHRtbCIgdGl0bGU9ImNvcmVlbGVtZW50cyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXZhbHZlLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+wqA8L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIENvcmUgUGx1Z2lucyAwLjExIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWVsZW1lbnRzLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj48L3RhYmxlPgorPGRpdiBjbGFzcz0iY2hhcHRlciI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIj4KKzxhIG5hbWU9ImlkMzQ3ODk1Ij48L2E+Z3N0cmVhbWVyIFBsdWdpbnM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgorPGRpdiBjbGFzcz0idG9jIj48ZGw+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcGx1Z2luLWNvcmVlbGVtZW50cy5odG1sIj5jb3JlZWxlbWVudHM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIDxhIG5hbWU9InBsdWdpbi1jb3JlZWxlbWVudHMiPjwvYT5zdGFuZGFyZCBHU3RyZWFtZXIgZWxlbWVudHM8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXBsdWdpbi1jb3JlaW5kZXhlcnMuaHRtbCI+Y29yZWluZGV4ZXJzPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCA8YSBuYW1lPSJwbHVnaW4tY29yZWluZGV4ZXJzIj48L2E+R1N0cmVhbWVyIGNvcmUgaW5kZXhlcnM8L3NwYW4+Cis8L2R0PgorPC9kbD48L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Njg3NTRhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5odG1sCkBAIC0wLDAgKzEsMTc3IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+Y2Fwc2ZpbHRlcjwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAwLjExIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3RyZWFtZXIgRWxlbWVudHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3RyZWFtZXIgRWxlbWVudHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwiIHRpdGxlPSJmYWtlc3JjIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMC4xMSBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1jYXBzZmlsdGVyLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1jYXBzZmlsdGVyLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlciI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIudG9wX29mX3BhZ2UiPjwvYT5jYXBzZmlsdGVyPC9zcGFuPjwvaDI+Cis8cD5jYXBzZmlsdGVyIOKAlCBQYXNzIGRhdGEgd2l0aG91dCBtb2RpZmljYXRpb24sIGxpbWl0aW5nIGZvcm1hdHM8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1jYXBzZmlsdGVyLnN5bm9wc2lzIj48L2E+PGgyPlN5bm9wc2lzPC9oMj4KKzxhIG5hbWU9IkdzdENhcHNGaWx0ZXIiPjwvYT48cHJlIGNsYXNzPSJzeW5vcHNpcyI+c3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5odG1sI0dzdENhcHNGaWx0ZXItc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdENhcHNGaWx0ZXIiPkdzdENhcHNGaWx0ZXI8L2E+OworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPkdPYmplY3Q8L2E+CisgICArLS0tLTxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+CisgICAgICAgICArLS0tLTxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdE9iamVjdC5odG1sIj5Hc3RPYmplY3Q8L2E+CisgICAgICAgICAgICAgICArLS0tLTxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCI+R3N0RWxlbWVudDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICstLS0tPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlVHJhbnNmb3JtLmh0bWwiPkdzdEJhc2VUcmFuc2Zvcm08L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLUdzdENhcHNGaWx0ZXIKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1jYXBzZmlsdGVyLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5odG1sI0dzdENhcHNGaWx0ZXItLWNhcHMiIHRpdGxlPSdUaGUgImNhcHMiIHByb3BlcnR5Jz5jYXBzPC9hPiIgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4qICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitUaGUgZWxlbWVudCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBhcyBzdWNoLCBidXQgY2FuIGVuZm9yY2UgbGltaXRhdGlvbnMgb24gdGhlCitkYXRhIGZvcm1hdC4KKzwvcD4KKzxwPgorPC9wPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iaWQzODA3MjkiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Cis8ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KK2dzdC1sYXVuY2ggdmlkZW90ZXN0c3JjICEgdmlkZW8veC1yYXctZ3JheSAhIGZmbXBlZ2NvbG9yc3BhY2UgISBhdXRvdmlkZW9zaW5rCis8L3ByZT48L2Rpdj4gTGltaXRzIGFjY2VwdGFibGUgdmlkZW8gZnJvbSB2aWRlb3Rlc3RzcmMgdG8gYmUgZ3JheXNjYWxlLgorPC9kaXY+Cis8cD4KKzwvcD4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxoMj5TeW5vcHNpczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJpZDM4MTY1NyI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKyAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWVsZW1lbnRzLmh0bWwjcGx1Z2luLWNvcmVlbGVtZW50cyI+Y29yZWVsZW1lbnRzPC9hPgorICAgICAgICAgIDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+RGF2aWQgU2NobGVlZiAmbHQ7ZHNAc2NobGVlZi5vcmcmZ3Q7PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgorPHRkPkdlbmVyaWM8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJpZDMxNzM4MCI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zaW5rPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zaW5rPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgorPHRkPmFsd2F5czwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgorPHRkPkFOWTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgorPHRkPnNyYzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c291cmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgorPHRkPmFsd2F5czwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgorPHRkPkFOWTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPHA+Cis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdENhcHNGaWx0ZXItc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RDYXBzRmlsdGVyPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0Q2Fwc0ZpbHRlcjs8L3ByZT4KKzxwPgorVGhlIG9wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5odG1sI0dzdENhcHNGaWx0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmlsdGVyPC9zcGFuPjwvYT4gZGF0YSBzdHJ1Y3R1cmUuCis8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0Q2Fwc0ZpbHRlci0tY2FwcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJjYXBzIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgImNhcHMiICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+KiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPlJlc3RyaWN0IHRoZSBwb3NzaWJsZSBhbGxvd2VkIGNhcGFiaWxpdGllcyAoTlVMTCBtZWFucyBBTlkpLiBTZXR0aW5nIHRoaXMgcHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LjwvcD4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTk1Mzk0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbApAQCAtMCwwICsxLDM1MSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPmZha2VzaW5rPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDAuMTEgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdHJlYW1lciBFbGVtZW50cyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCIgdGl0bGU9ImZha2VzcmMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsuaHRtbCIgdGl0bGU9ImZkc2luayI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDAuMTEgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZkc2luay5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5zaWduYWxzIiBjbGFzcz0ic2hvcnRjdXQiPlNpZ25hbHM8L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay50b3Bfb2ZfcGFnZSI+PC9hPmZha2VzaW5rPC9zcGFuPjwvaDI+Cis8cD5mYWtlc2luayDigJQgQmxhY2sgaG9sZSBmb3IgZGF0YTwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLnN5bm9wc2lzIj48L2E+PGgyPlN5bm9wc2lzPC9oMj4KKzxhIG5hbWU9IkdzdEZha2VTaW5rIj48L2E+PHByZSBjbGFzcz0ic3lub3BzaXMiPnN0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjR3N0RmFrZVNpbmstc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEZha2VTaW5rIj5Hc3RGYWtlU2luazwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0dzdEZha2VTaW5rU3RhdGVFcnJvciIgdGl0bGU9ImVudW0gR3N0RmFrZVNpbmtTdGF0ZUVycm9yIj5Hc3RGYWtlU2lua1N0YXRlRXJyb3I8L2E+OworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij5HT2JqZWN0PC9hPgorICAgKy0tLS08YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgorICAgICAgICAgKy0tLS08YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCI+R3N0T2JqZWN0PC9hPgorICAgICAgICAgICAgICAgKy0tLS08YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwiPkdzdEVsZW1lbnQ8L2E+CisgICAgICAgICAgICAgICAgICAgICArLS0tLTxhIGhyZWY9Ii4uL2dzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNpbmsuaHRtbCI+R3N0QmFzZVNpbms8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLUdzdEZha2VTaW5rCis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0dzdEZha2VTaW5rLS1jYW4tYWN0aXZhdGUtcHVsbCIgdGl0bGU9J1RoZSAiY2FuLWFjdGl2YXRlLXB1bGwiIHByb3BlcnR5Jz5jYW4tYWN0aXZhdGUtcHVsbDwvYT4iICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjR3N0RmFrZVNpbmstLWNhbi1hY3RpdmF0ZS1wdXNoIiB0aXRsZT0nVGhlICJjYW4tYWN0aXZhdGUtcHVzaCIgcHJvcGVydHknPmNhbi1hY3RpdmF0ZS1wdXNoPC9hPiIgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNHc3RGYWtlU2luay0tZHVtcCIgdGl0bGU9J1RoZSAiZHVtcCIgcHJvcGVydHknPmR1bXA8L2E+IiAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNHc3RGYWtlU2luay0tbGFzdC1tZXNzYWdlIiB0aXRsZT0nVGhlICJsYXN0LW1lc3NhZ2UiIHByb3BlcnR5Jz5sYXN0LW1lc3NhZ2U8L2E+IiAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+KiAgICAgICAgICAgICAgICA6IFJlYWQKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0dzdEZha2VTaW5rLS1zaWduYWwtaGFuZG9mZnMiIHRpdGxlPSdUaGUgInNpZ25hbC1oYW5kb2ZmcyIgcHJvcGVydHknPnNpZ25hbC1oYW5kb2ZmczwvYT4iICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNHc3RGYWtlU2luay0tc2lsZW50IiB0aXRsZT0nVGhlICJzaWxlbnQiIHByb3BlcnR5Jz5zaWxlbnQ8L2E+IiAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjR3N0RmFrZVNpbmstLXN0YXRlLWVycm9yIiB0aXRsZT0nVGhlICJzdGF0ZS1lcnJvciIgcHJvcGVydHknPnN0YXRlLWVycm9yPC9hPiIgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0dzdEZha2VTaW5rU3RhdGVFcnJvciIgdGl0bGU9ImVudW0gR3N0RmFrZVNpbmtTdGF0ZUVycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RmFrZVNpbmtTdGF0ZUVycm9yPC9zcGFuPjwvYT4gIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNHc3RGYWtlU2luay0tbnVtLWJ1ZmZlcnMiIHRpdGxlPSdUaGUgIm51bS1idWZmZXJzIiBwcm9wZXJ0eSc+bnVtLWJ1ZmZlcnM8L2E+IiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLnNpZ25hbHMiPjwvYT48aDI+U2lnbmFsczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNHc3RGYWtlU2luay1oYW5kb2ZmIiB0aXRsZT0nVGhlICJoYW5kb2ZmIiBzaWduYWwnPmhhbmRvZmY8L2E+IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5SdW4gTGFzdDwvY29kZT48L2E+CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNHc3RGYWtlU2luay1wcmVyb2xsLWhhbmRvZmYiIHRpdGxlPSdUaGUgInByZXJvbGwtaGFuZG9mZiIgc2lnbmFsJz5wcmVyb2xsLWhhbmRvZmY8L2E+IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+UnVuIExhc3Q8L2NvZGU+PC9hPgorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPgorRHVtbXkgc2luayB0aGF0IHN3YWxsb3dzIGV2ZXJ5dGhpbmcuCis8L3A+Cis8cD4KKzwvcD4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImlkMzk2NjczIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgorPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Citnc3QtbGF1bmNoIGF1ZGlvdGVzdHNyYyBudW0tYnVmZmVycz0xMDAwICEgZmFrZXNpbmsgc3luYz1mYWxzZQorPC9wcmU+PC9kaXY+IFJlbmRlciAxMDAwIGF1ZGlvIGJ1ZmZlcnMgKG9mIGRlZmF1bHQgc2l6ZSkgYXMgZmFzdCBhcyBwb3NzaWJsZS4KKzwvZGl2PgorPHA+Cis8L3A+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8aDI+U3lub3BzaXM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iaWQzOTY2OTQiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+CisgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcGx1Z2luLWNvcmVlbGVtZW50cy5odG1sI3BsdWdpbi1jb3JlZWxlbWVudHMiPmNvcmVlbGVtZW50czwvYT4KKyAgICAgICAgICA8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgorPHRkPkVyaWsgV2FsdGhpbnNlbiAmbHQ7b21lZ2FAY3NlLm9naS5lZHUmZ3Q7LCBXaW0gVGF5bWFucyAmbHQ7d2ltQGZsdWVuZG8uY29tJmd0OywgTXIuICdmcmFnLW1lLW1vcmUnIFZhbmRlcndpbmdvICZsdDt3aW5nb0BmbHVlbmRvLmNvbSZndDs8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+U2luazwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImlkMzk2NzU3Ij48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgorPHRkPnNpbms8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgorPHRkPnNpbms8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YWx3YXlzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QU5ZPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8cD4KKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEZha2VTaW5rLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0RmFrZVNpbms8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RGYWtlU2luazs8L3ByZT4KKzxwPgorVGhlIG9wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNHc3RGYWtlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZha2VTaW5rPC9zcGFuPjwvYT4gZGF0YSBzdHJ1Y3R1cmUuCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEZha2VTaW5rU3RhdGVFcnJvciI+PC9hPjxoMz5lbnVtIEdzdEZha2VTaW5rU3RhdGVFcnJvcjwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBlbnVtIHsKKyAgRkFLRV9TSU5LX1NUQVRFX0VSUk9SX05PTkUgPSAwLAorICBGQUtFX1NJTktfU1RBVEVfRVJST1JfTlVMTF9SRUFEWSwKKyAgRkFLRV9TSU5LX1NUQVRFX0VSUk9SX1JFQURZX1BBVVNFRCwKKyAgRkFLRV9TSU5LX1NUQVRFX0VSUk9SX1BBVVNFRF9QTEFZSU5HLAorICBGQUtFX1NJTktfU1RBVEVfRVJST1JfUExBWUlOR19QQVVTRUQsCisgIEZBS0VfU0lOS19TVEFURV9FUlJPUl9QQVVTRURfUkVBRFksCisgIEZBS0VfU0lOS19TVEFURV9FUlJPUl9SRUFEWV9OVUxMCit9IEdzdEZha2VTaW5rU3RhdGVFcnJvcjsKKzwvcHJlPgorPHA+CitQb3NzaWJsZSBzdGF0ZSBjaGFuZ2UgZXJyb3JzIGZvciB0aGUgc3RhdGUtZXJyb3IgcHJvcGVydHkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkZBS0UtU0lOSy1TVEFURS1FUlJPUi1OT05FOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBS0VfU0lOS19TVEFURV9FUlJPUl9OT05FPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5ubyBlcnJvcgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iRkFLRS1TSU5LLVNUQVRFLUVSUk9SLU5VTEwtUkVBRFk6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFLRV9TSU5LX1NUQVRFX0VSUk9SX05VTExfUkVBRFk8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmNhdXNlIHRoZSBOVUxMIHRvIFJFQURZIHN0YXRlIGNoYW5nZSB0byBmYWlsCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJGQUtFLVNJTkstU1RBVEUtRVJST1ItUkVBRFktUEFVU0VEOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBS0VfU0lOS19TVEFURV9FUlJPUl9SRUFEWV9QQVVTRUQ8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmNhdXNlIHRoZSBSRUFEWSB0byBQQVVTRUQgc3RhdGUgY2hhbmdlIHRvIGZhaWw6Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJGQUtFLVNJTkstU1RBVEUtRVJST1ItUEFVU0VELVBMQVlJTkc6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFLRV9TSU5LX1NUQVRFX0VSUk9SX1BBVVNFRF9QTEFZSU5HPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5jYXVzZSB0aGUgUEFVU0VEIHRvIFBMQVlJTkcgc3RhdGUgY2hhbmdlIHRvIGZhaWw6Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJGQUtFLVNJTkstU1RBVEUtRVJST1ItUExBWUlORy1QQVVTRUQ6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFLRV9TSU5LX1NUQVRFX0VSUk9SX1BMQVlJTkdfUEFVU0VEPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5jYXVzZSB0aGUgUExBWUlORyB0byBQQVVTRUQgc3RhdGUgY2hhbmdlIHRvIGZhaWw6Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJGQUtFLVNJTkstU1RBVEUtRVJST1ItUEFVU0VELVJFQURZOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBS0VfU0lOS19TVEFURV9FUlJPUl9QQVVTRURfUkVBRFk8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmNhdXNlIHRoZSBQQVVTRUQgdG8gUkVBRFkgc3RhdGUgY2hhbmdlIHRvIGZhaWw6Cis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJGQUtFLVNJTkstU1RBVEUtRVJST1ItUkVBRFktTlVMTDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUtFX1NJTktfU1RBVEVfRVJST1JfUkVBRFlfTlVMTDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Y2F1c2UgdGhlIFJFQURZIHRvIE5VTEwgc3RhdGUgY2hhbmdlIHRvIGZhaWw6Cis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RGYWtlU2luay0tY2FuLWFjdGl2YXRlLXB1bGwiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4iY2FuLWFjdGl2YXRlLXB1bGwiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiY2FuLWFjdGl2YXRlLXB1bGwiICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+Q2FuIGFjdGl2YXRlIGluIHB1bGwgbW9kZS48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RmFrZVNpbmstLWNhbi1hY3RpdmF0ZS1wdXNoIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImNhbi1hY3RpdmF0ZS1wdXNoIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgImNhbi1hY3RpdmF0ZS1wdXNoIiAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPkNhbiBhY3RpdmF0ZSBpbiBwdXNoIG1vZGUuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RmFrZVNpbmstLWR1bXAiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4iZHVtcCI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJkdW1wIiAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5EdW1wIGJ1ZmZlciBjb250ZW50cyB0byBzdGRvdXQuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEZha2VTaW5rLS1sYXN0LW1lc3NhZ2UiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4ibGFzdC1tZXNzYWdlIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgImxhc3QtbWVzc2FnZSIgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiogICAgICAgICAgICAgICAgOiBSZWFkPC9wcmU+Cis8cD5UaGUgbWVzc2FnZSBkZXNjcmliaW5nIGN1cnJlbnQgc3RhdHVzLjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEZha2VTaW5rLS1zaWduYWwtaGFuZG9mZnMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4ic2lnbmFsLWhhbmRvZmZzIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgInNpZ25hbC1oYW5kb2ZmcyIgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPlNlbmQgYSBzaWduYWwgYmVmb3JlIHVucmVmZmluZyB0aGUgYnVmZmVyLjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RGYWtlU2luay0tc2lsZW50Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+InNpbGVudCI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJzaWxlbnQiICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5Eb24ndCBwcm9kdWNlIGxhc3RfbWVzc2FnZSBldmVudHMuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEZha2VTaW5rLS1zdGF0ZS1lcnJvciI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJzdGF0ZS1lcnJvciI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJzdGF0ZS1lcnJvciIgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0dzdEZha2VTaW5rU3RhdGVFcnJvciIgdGl0bGU9ImVudW0gR3N0RmFrZVNpbmtTdGF0ZUVycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RmFrZVNpbmtTdGF0ZUVycm9yPC9zcGFuPjwvYT4gIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5HZW5lcmF0ZSBhIHN0YXRlIGNoYW5nZSBlcnJvci48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiBObyBzdGF0ZSBjaGFuZ2UgZXJyb3JzPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RGYWtlU2luay0tbnVtLWJ1ZmZlcnMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4ibnVtLWJ1ZmZlcnMiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAibnVtLWJ1ZmZlcnMiICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5OdW1iZXIgb2YgYnVmZmVycyB0byBhY2NlcHQgZ29pbmcgRU9TLjwvcD4KKzxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAtMTwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IC0xPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLnNpZ25hbC1kZXRhaWxzIj48L2E+PGgyPlNpZ25hbCBEZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEZha2VTaW5rLWhhbmRvZmYiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4iaGFuZG9mZiI8L2NvZGU+IHNpZ25hbDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICB1c2VyX2Z1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNHc3RGYWtlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZha2VTaW5rPC9zcGFuPjwvYT4gKmZha2VzaW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gICAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICAgICAgKnBhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgdXNlcl9kYXRhKSAgICAgIDogPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlJ1biBMYXN0PC9jb2RlPjwvYT48L3ByZT4KKzxwPgorVGhpcyBzaWduYWwgZ2V0cyBlbWl0dGVkIGJlZm9yZSB1bnJlZmZpbmcgdGhlIGJ1ZmZlci4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mYWtlc2luazwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZmFrZXNpbmsgaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgYnVmZmVyIHRoYXQganVzdCBoYXMgYmVlbiByZWNlaXZlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwYWQgdGhhdCByZWNlaXZlZCBpdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RGYWtlU2luay1wcmVyb2xsLWhhbmRvZmYiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4icHJlcm9sbC1oYW5kb2ZmIjwvY29kZT4gc2lnbmFsPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIHVzZXJfZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0dzdEZha2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RmFrZVNpbms8L3NwYW4+PC9hPiAqZmFrZXNpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAgICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gICAgICAqcGFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICB1c2VyX2RhdGEpICAgICAgOiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+UnVuIExhc3Q8L2NvZGU+PC9hPjwvcHJlPgorPHA+CitUaGlzIHNpZ25hbCBnZXRzIGVtaXR0ZWQgYmVmb3JlIHVucmVmZmluZyB0aGUgYnVmZmVyLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZha2VzaW5rPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBmYWtlc2luayBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBidWZmZXIgdGhhdCBqdXN0IGhhcyBiZWVuIHJlY2VpdmVkPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHBhZCB0aGF0IHJlY2VpdmVkIGl0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuNzwvcD4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGYWtlU3JjPC9zcGFuPjwvYT4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYjBjNjQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwKQEAgLTAsMCArMSw1MTggQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5mYWtlc3JjPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDAuMTEgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdHJlYW1lciBFbGVtZW50cyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuaHRtbCIgdGl0bGU9ImNhcHNmaWx0ZXIiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sIiB0aXRsZT0iZmFrZXNpbmsiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIENvcmUgUGx1Z2lucyAwLjExIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuc2lnbmFscyIgY2xhc3M9InNob3J0Y3V0Ij5TaWduYWxzPC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLnRvcF9vZl9wYWdlIj48L2E+ZmFrZXNyYzwvc3Bhbj48L2gyPgorPHA+ZmFrZXNyYyDigJQgUHVzaCBlbXB0eSAobm8gZGF0YSkgYnVmZmVycyBhcm91bmQ8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLnN5bm9wc2lzIj48L2E+PGgyPlN5bm9wc2lzPC9oMj4KKzxhIG5hbWU9IkdzdEZha2VTcmMiPjwvYT48cHJlIGNsYXNzPSJzeW5vcHNpcyI+c3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEZha2VTcmMiPkdzdEZha2VTcmM8L2E+OworZW51bSAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmNEYXRhVHlwZSIgdGl0bGU9ImVudW0gR3N0RmFrZVNyY0RhdGFUeXBlIj5Hc3RGYWtlU3JjRGF0YVR5cGU8L2E+OworZW51bSAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmNGaWxsVHlwZSIgdGl0bGU9ImVudW0gR3N0RmFrZVNyY0ZpbGxUeXBlIj5Hc3RGYWtlU3JjRmlsbFR5cGU8L2E+OworZW51bSAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmNPdXRwdXRUeXBlIiB0aXRsZT0iZW51bSBHc3RGYWtlU3JjT3V0cHV0VHlwZSI+R3N0RmFrZVNyY091dHB1dFR5cGU8L2E+OworZW51bSAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmNTaXplVHlwZSIgdGl0bGU9ImVudW0gR3N0RmFrZVNyY1NpemVUeXBlIj5Hc3RGYWtlU3JjU2l6ZVR5cGU8L2E+OworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPkdPYmplY3Q8L2E+CisgICArLS0tLTxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+CisgICAgICAgICArLS0tLTxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdE9iamVjdC5odG1sIj5Hc3RPYmplY3Q8L2E+CisgICAgICAgICAgICAgICArLS0tLTxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCI+R3N0RWxlbWVudDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICstLS0tPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLWxpYnMtMC4xMS9Hc3RCYXNlU3JjLmh0bWwiPkdzdEJhc2VTcmM8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLUdzdEZha2VTcmMKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLWNhbi1hY3RpdmF0ZS1wdWxsIiB0aXRsZT0nVGhlICJjYW4tYWN0aXZhdGUtcHVsbCIgcHJvcGVydHknPmNhbi1hY3RpdmF0ZS1wdWxsPC9hPiIgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLWNhbi1hY3RpdmF0ZS1wdXNoIiB0aXRsZT0nVGhlICJjYW4tYWN0aXZhdGUtcHVzaCIgcHJvcGVydHknPmNhbi1hY3RpdmF0ZS1wdXNoPC9hPiIgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLWRhdGEiIHRpdGxlPSdUaGUgImRhdGEiIHByb3BlcnR5Jz5kYXRhPC9hPiIgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmNEYXRhVHlwZSIgdGl0bGU9ImVudW0gR3N0RmFrZVNyY0RhdGFUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RmFrZVNyY0RhdGFUeXBlPC9zcGFuPjwvYT4gICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy0tZGF0YXJhdGUiIHRpdGxlPSdUaGUgImRhdGFyYXRlIiBwcm9wZXJ0eSc+ZGF0YXJhdGU8L2E+IiAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjLS1kdW1wIiB0aXRsZT0nVGhlICJkdW1wIiBwcm9wZXJ0eSc+ZHVtcDwvYT4iICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy0tZmlsbHR5cGUiIHRpdGxlPSdUaGUgImZpbGx0eXBlIiBwcm9wZXJ0eSc+ZmlsbHR5cGU8L2E+IiAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjRmlsbFR5cGUiIHRpdGxlPSJlbnVtIEdzdEZha2VTcmNGaWxsVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZha2VTcmNGaWxsVHlwZTwvc3Bhbj48L2E+ICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLWlzLWxpdmUiIHRpdGxlPSdUaGUgImlzLWxpdmUiIHByb3BlcnR5Jz5pcy1saXZlPC9hPiIgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdAorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjLS1sYXN0LW1lc3NhZ2UiIHRpdGxlPSdUaGUgImxhc3QtbWVzc2FnZSIgcHJvcGVydHknPmxhc3QtbWVzc2FnZTwvYT4iICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4qICAgICAgICAgICAgICAgIDogUmVhZAorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjLS1wYXJlbnRzaXplIiB0aXRsZT0nVGhlICJwYXJlbnRzaXplIiBwcm9wZXJ0eSc+cGFyZW50c2l6ZTwvYT4iICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjLS1wYXR0ZXJuIiB0aXRsZT0nVGhlICJwYXR0ZXJuIiBwcm9wZXJ0eSc+cGF0dGVybjwvYT4iICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiogICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy0tc2lnbmFsLWhhbmRvZmZzIiB0aXRsZT0nVGhlICJzaWduYWwtaGFuZG9mZnMiIHByb3BlcnR5Jz5zaWduYWwtaGFuZG9mZnM8L2E+IiAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjLS1zaWxlbnQiIHRpdGxlPSdUaGUgInNpbGVudCIgcHJvcGVydHknPnNpbGVudDwvYT4iICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLXNpemVtYXgiIHRpdGxlPSdUaGUgInNpemVtYXgiIHByb3BlcnR5Jz5zaXplbWF4PC9hPiIgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLXNpemVtaW4iIHRpdGxlPSdUaGUgInNpemVtaW4iIHByb3BlcnR5Jz5zaXplbWluPC9hPiIgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLXNpemV0eXBlIiB0aXRsZT0nVGhlICJzaXpldHlwZSIgcHJvcGVydHknPnNpemV0eXBlPC9hPiIgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyY1NpemVUeXBlIiB0aXRsZT0iZW51bSBHc3RGYWtlU3JjU2l6ZVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGYWtlU3JjU2l6ZVR5cGU8L3NwYW4+PC9hPiAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjLS1zeW5jIiB0aXRsZT0nVGhlICJzeW5jIiBwcm9wZXJ0eSc+c3luYzwvYT4iICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy0tZm9ybWF0IiB0aXRsZT0nVGhlICJmb3JtYXQiIHByb3BlcnR5Jz5mb3JtYXQ8L2E+IiAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLnNpZ25hbHMiPjwvYT48aDI+U2lnbmFsczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtaGFuZG9mZiIgdGl0bGU9J1RoZSAiaGFuZG9mZiIgc2lnbmFsJz5oYW5kb2ZmPC9hPiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+UnVuIExhc3Q8L2NvZGU+PC9hPgorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitUaGUgZmFrZXNyYyBlbGVtZW50IGlzIGEgbXVsdGlwdXJwb3NlIGVsZW1lbnQgdGhhdCBjYW4gZ2VuZXJhdGUKK2Egd2lkZSByYW5nZSBvZiBidWZmZXJzIGFuZCBjYW4gb3BlcmF0ZSBpbiB2YXJpb3VzIHNjaGVkdWxpbmcgbW9kZXMuCis8L3A+Cis8cD4KK0l0IGlzIG1vc3RseSB1c2VkIGFzIGEgdGVzdGluZyBlbGVtZW50LCBvbmUgdHJpdmlhbCBleGFtcGxlIGZvciB0ZXN0aW5nCitiYXNpYyA8c3BhbiBjbGFzcz0iYXBwbGljYXRpb24iPkdTdHJlYW1lcjwvc3Bhbj4gY29yZSBmdW5jdGlvbmFsaXR5IGlzOgorPC9wPgorPHA+Cis8L3A+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJpZDM2NDc1OCI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KKzxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgorZ3N0LWxhdW5jaCAtdiBmYWtlc3JjIG51bS1idWZmZXJzPTUgISBmYWtlc2luaworPC9wcmU+PC9kaXY+IFRoaXMgcGlwZWxpbmUgd2lsbCBwdXNoIDUgZW1wdHkgYnVmZmVycyB0byB0aGUgZmFrZXNpbmsgZWxlbWVudCBhbmQgdGhlbgorc2VuZHMgYW4gRU9TLgorPC9kaXY+Cis8cD4KKzwvcD4KKzxwPgorTGFzdCByZXZpZXdlZCBvbiAyMDA4LTA2LTIwICgwLjEwLjIxKQorPC9wPgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGgyPlN5bm9wc2lzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImlkMzY0Nzg0Ij48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgorPHRkPgorICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXBsdWdpbi1jb3JlZWxlbWVudHMuaHRtbCNwbHVnaW4tY29yZWVsZW1lbnRzIj5jb3JlZWxlbWVudHM8L2E+CisgICAgICAgICAgPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5FcmlrIFdhbHRoaW5zZW4gJmx0O29tZWdhQGNzZS5vZ2kuZWR1Jmd0OywgV2ltIFRheW1hbnMgJmx0O3dpbUBmbHVlbmRvLmNvbSZndDs8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+U291cmNlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iaWQzNjQ4NDYiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c3JjPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zb3VyY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YWx3YXlzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QU5ZPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8cD4KKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RmFrZVNyYy1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdEZha2VTcmM8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RGYWtlU3JjOzwvcHJlPgorPHA+CitPcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RmFrZVNyYzwvc3Bhbj48L2E+IGRhdGEgc3RydWN0dXJlLgorPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RGYWtlU3JjRGF0YVR5cGUiPjwvYT48aDM+ZW51bSBHc3RGYWtlU3JjRGF0YVR5cGU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEZBS0VfU1JDX0RBVEFfQUxMT0NBVEUgPSAxLAorICBGQUtFX1NSQ19EQVRBX1NVQkJVRkZFUgorfSBHc3RGYWtlU3JjRGF0YVR5cGU7Cis8L3ByZT4KKzxwPgorVGhlIGRpZmZlcmVudCB3YXlzIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iRkFLRS1TUkMtREFUQS1BTExPQ0FURTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUtFX1NSQ19EQVRBX0FMTE9DQVRFPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hbGxvY2F0ZSBidWZmZXJzCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJGQUtFLVNSQy1EQVRBLVNVQkJVRkZFUjpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUtFX1NSQ19EQVRBX1NVQkJVRkZFUjwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c3ViYnVmZmVyIGVhY2ggYnVmZmVyCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RGYWtlU3JjRmlsbFR5cGUiPjwvYT48aDM+ZW51bSBHc3RGYWtlU3JjRmlsbFR5cGU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEZBS0VfU1JDX0ZJTExUWVBFX05PVEhJTkcgPSAxLAorICBGQUtFX1NSQ19GSUxMVFlQRV9aRVJPLAorICBGQUtFX1NSQ19GSUxMVFlQRV9SQU5ET00sCisgIEZBS0VfU1JDX0ZJTExUWVBFX1BBVFRFUk4sCisgIEZBS0VfU1JDX0ZJTExUWVBFX1BBVFRFUk5fQ09OVAorfSBHc3RGYWtlU3JjRmlsbFR5cGU7Cis8L3ByZT4KKzxwPgorVGhlIGRpZmZlcmVudCB3YXlzIG9mIGZpbGxpbmcgdGhlIGJ1ZmZlcnMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkZBS0UtU1JDLUZJTExUWVBFLU5PVEhJTkc6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFLRV9TUkNfRklMTFRZUEVfTk9USElORzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZG8gbm90IGZpbGwgYnVmZmVycyAKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkZBS0UtU1JDLUZJTExUWVBFLVpFUk86Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFLRV9TUkNfRklMTFRZUEVfWkVSTzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZmlsbCBidWZmZXJzIHdpdGggMAorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iRkFLRS1TUkMtRklMTFRZUEUtUkFORE9NOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBS0VfU1JDX0ZJTExUWVBFX1JBTkRPTTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZmlsbCBidWZmZXJzIHdpdGggcmFuZG9tIGJ5dGVzCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJGQUtFLVNSQy1GSUxMVFlQRS1QQVRURVJOOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBS0VfU1JDX0ZJTExUWVBFX1BBVFRFUk48L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmZpbGwgYnVmZmVycyB3aXRoIGEgcGF0dGVybgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iRkFLRS1TUkMtRklMTFRZUEUtUEFUVEVSTi1DT05UOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBS0VfU1JDX0ZJTExUWVBFX1BBVFRFUk5fQ09OVDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+ZmlsbCBidWZmZXJzIHdpdGggYSBjb250aW51b3VzIHBhdHRlcm4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEZha2VTcmNPdXRwdXRUeXBlIj48L2E+PGgzPmVudW0gR3N0RmFrZVNyY091dHB1dFR5cGU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZW51bSB7CisgIEZBS0VfU1JDX0ZJUlNUX0xBU1RfTE9PUCA9IDEsCisgIEZBS0VfU1JDX0xBU1RfRklSU1RfTE9PUCwKKyAgRkFLRV9TUkNfUElOR19QT05HLAorICBGQUtFX1NSQ19PUkRFUkVEX1JBTkRPTSwKKyAgRkFLRV9TUkNfUkFORE9NLAorICBGQUtFX1NSQ19QQVRURVJOX0xPT1AsCisgIEZBS0VfU1JDX1BJTkdfUE9OR19QQVRURVJOLAorICBGQUtFX1NSQ19HRVRfQUxXQVlTX1NVQ0VFRFMKK30gR3N0RmFrZVNyY091dHB1dFR5cGU7Cis8L3ByZT4KKzxwPgorVGhlIGRpZmZlcmVudCBvdXRwdXQgdHlwZXMuIFVudXNlZCBjdXJyZW50bHkuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkZBS0UtU1JDLUZJUlNULUxBU1QtTE9PUDpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUtFX1NSQ19GSVJTVF9MQVNUX0xPT1A8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPmZpcnN0IHBhZCB0aGVuIGxhc3QgcGFkCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJGQUtFLVNSQy1MQVNULUZJUlNULUxPT1A6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFLRV9TUkNfTEFTVF9GSVJTVF9MT09QPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5sYXN0IHBhZCB0aGVuIGZpcnN0IHBhZAorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iRkFLRS1TUkMtUElORy1QT05HOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBS0VfU1JDX1BJTkdfUE9ORzwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cGluZyBwb25nIGJldHdlZW4gcGFkcworPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iRkFLRS1TUkMtT1JERVJFRC1SQU5ET006Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFLRV9TUkNfT1JERVJFRF9SQU5ET008L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPm9yZGVyZWQgcmFuZG9tIHBhZAorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iRkFLRS1TUkMtUkFORE9NOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBS0VfU1JDX1JBTkRPTTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cmFuZG9tIHBhZAorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iRkFLRS1TUkMtUEFUVEVSTi1MT09QOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBS0VfU1JDX1BBVFRFUk5fTE9PUDwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bG9vcCBiZXR3ZWVuIHBhZHMgaW4gYSBwYXJ0aWN1bGFyIHBhdHRlcm4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkZBS0UtU1JDLVBJTkctUE9ORy1QQVRURVJOOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBS0VfU1JDX1BJTkdfUE9OR19QQVRURVJOPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5waW5nIHBvbmcgYmFzZWQgb24gYSBwYXR0ZXJuCis8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJGQUtFLVNSQy1HRVQtQUxXQVlTLVNVQ0VFRFM6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFLRV9TUkNfR0VUX0FMV0FZU19TVUNFRURTPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hIGdldCBhbHdheXMgc3VjY2VlZHMgb24gYSBwYWQKKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEZha2VTcmNTaXplVHlwZSI+PC9hPjxoMz5lbnVtIEdzdEZha2VTcmNTaXplVHlwZTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBlbnVtIHsKKyAgRkFLRV9TUkNfU0laRVRZUEVfRU1QVFkgPSAxLAorICBGQUtFX1NSQ19TSVpFVFlQRV9GSVhFRCwKKyAgRkFLRV9TUkNfU0laRVRZUEVfUkFORE9NCit9IEdzdEZha2VTcmNTaXplVHlwZTsKKzwvcHJlPgorPHA+CitUaGUgZGlmZmVyZW50IHNpemUgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXJzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJGQUtFLVNSQy1TSVpFVFlQRS1FTVBUWTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUtFX1NSQ19TSVpFVFlQRV9FTVBUWTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Y3JlYXRlIGVtcHR5IGJ1ZmZlcnMKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkZBS0UtU1JDLVNJWkVUWVBFLUZJWEVEOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBS0VfU1JDX1NJWkVUWVBFX0ZJWEVEPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5maXhlZCBidWZmZXIgc2l6ZSAoc2l6ZW1heCBzaXplZCkKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkZBS0UtU1JDLVNJWkVUWVBFLVJBTkRPTTpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUtFX1NSQ19TSVpFVFlQRV9SQU5ET008L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPnJhbmRvbSBidWZmZXIgc2l6ZSAoc2l6ZW1pbiAmbHQ7PSBzaXplICZsdDs9IHNpemVtYXgpCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEZha2VTcmMtLWNhbi1hY3RpdmF0ZS1wdWxsIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImNhbi1hY3RpdmF0ZS1wdWxsIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgImNhbi1hY3RpdmF0ZS1wdWxsIiAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3ByZT4KKzxwPkNhbiBhY3RpdmF0ZSBpbiBwdWxsIG1vZGUuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RmFrZVNyYy0tY2FuLWFjdGl2YXRlLXB1c2giPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4iY2FuLWFjdGl2YXRlLXB1c2giPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiY2FuLWFjdGl2YXRlLXB1c2giICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcHJlPgorPHA+Q2FuIGFjdGl2YXRlIGluIHB1c2ggbW9kZS48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RGYWtlU3JjLS1kYXRhIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImRhdGEiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiZGF0YSIgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmNEYXRhVHlwZSIgdGl0bGU9ImVudW0gR3N0RmFrZVNyY0RhdGFUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RmFrZVNyY0RhdGFUeXBlPC9zcGFuPjwvYT4gICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPkRhdGEgYWxsb2NhdGlvbiBtZXRob2QuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogQWxsb2NhdGUgZGF0YTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RmFrZVNyYy0tZGF0YXJhdGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4iZGF0YXJhdGUiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiZGF0YXJhdGUiICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5UaW1lc3RhbXBzIGJ1ZmZlcnMgd2l0aCBudW1iZXIgb2YgYnl0ZXMgcGVyIHNlY29uZCAoMCA9IG5vbmUpLjwvcD4KKzxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAwPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RmFrZVNyYy0tZHVtcCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJkdW1wIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgImR1bXAiICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPkR1bXAgYnVmZmVyIGNvbnRlbnRzIHRvIHN0ZG91dC48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RmFrZVNyYy0tZmlsbHR5cGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4iZmlsbHR5cGUiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiZmlsbHR5cGUiICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmNGaWxsVHlwZSIgdGl0bGU9ImVudW0gR3N0RmFrZVNyY0ZpbGxUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RmFrZVNyY0ZpbGxUeXBlPC9zcGFuPjwvYT4gICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPkhvdyB0byBmaWxsIHRoZSBidWZmZXIsIGlmIGF0IGFsbC48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiBGaWxsIGJ1ZmZlcnMgd2l0aCB6ZXJvczwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RmFrZVNyYy0taXMtbGl2ZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJpcy1saXZlIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgImlzLWxpdmUiICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3ByZT4KKzxwPlRydWUgaWYgdGhlIGVsZW1lbnQgY2Fubm90IHByb2R1Y2UgZGF0YSBpbiBQQVVTRUQuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEZha2VTcmMtLWxhc3QtbWVzc2FnZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJsYXN0LW1lc3NhZ2UiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAibGFzdC1tZXNzYWdlIiAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+KiAgICAgICAgICAgICAgICA6IFJlYWQ8L3ByZT4KKzxwPlRoZSBsYXN0IHN0YXR1cyBtZXNzYWdlLjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEZha2VTcmMtLXBhcmVudHNpemUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4icGFyZW50c2l6ZSI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJwYXJlbnRzaXplIiAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPlNpemUgb2YgcGFyZW50IGJ1ZmZlciBmb3Igc3ViLWJ1ZmZlcmVkIGFsbG9jYXRpb24uPC9wPgorPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IDA8L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiA0MDk2MDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RmFrZVNyYy0tcGF0dGVybiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJwYXR0ZXJuIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgInBhdHRlcm4iICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiogICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPnBhdHRlcm4uPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogTlVMTDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RmFrZVNyYy0tc2lnbmFsLWhhbmRvZmZzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+InNpZ25hbC1oYW5kb2ZmcyI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJzaWduYWwtaGFuZG9mZnMiICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5TZW5kIGEgc2lnbmFsIGJlZm9yZSBwdXNoaW5nIHRoZSBidWZmZXIuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEZha2VTcmMtLXNpbGVudCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJzaWxlbnQiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAic2lsZW50IiAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+RG9uJ3QgcHJvZHVjZSBsYXN0X21lc3NhZ2UgZXZlbnRzLjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RGYWtlU3JjLS1zaXplbWF4Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+InNpemVtYXgiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAic2l6ZW1heCIgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5NYXhpbXVtIGJ1ZmZlciBzaXplLjwvcD4KKzxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAwPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogNDA5NjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RmFrZVNyYy0tc2l6ZW1pbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJzaXplbWluIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgInNpemVtaW4iICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+TWluaW11bSBidWZmZXIgc2l6ZS48L3A+Cis8cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMDwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEZha2VTcmMtLXNpemV0eXBlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+InNpemV0eXBlIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgInNpemV0eXBlIiAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjU2l6ZVR5cGUiIHRpdGxlPSJlbnVtIEdzdEZha2VTcmNTaXplVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZha2VTcmNTaXplVHlwZTwvc3Bhbj48L2E+ICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5Ib3cgdG8gZGV0ZXJtaW5lIGJ1ZmZlciBzaXplcy48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiBTZW5kIGVtcHR5IGJ1ZmZlcnM8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEZha2VTcmMtLXN5bmMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4ic3luYyI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJzeW5jIiAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5TeW5jIHRvIHRoZSBjbG9jayB0byB0aGUgZGF0YXJhdGUuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEZha2VTcmMtLWZvcm1hdCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJmb3JtYXQiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiZm9ybWF0IiAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPgorU2V0IHRoZSBmb3JtYXQgb2YgdGhlIG5ld3NlZ21lbnQgZXZlbnRzIHRvIHByb2R1Y2UuCis8L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiBHU1RfRk9STUFUX0JZVEVTPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjIwPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuc2lnbmFsLWRldGFpbHMiPjwvYT48aDI+U2lnbmFsIERldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RmFrZVNyYy1oYW5kb2ZmIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImhhbmRvZmYiPC9jb2RlPiBzaWduYWw8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgdXNlcl9mdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RmFrZVNyYzwvc3Bhbj48L2E+ICpmYWtlc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gICAgICpwYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgdXNlcl9kYXRhKSAgICAgIDogPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlJ1biBMYXN0PC9jb2RlPjwvYT48L3ByZT4KKzxwPgorVGhpcyBzaWduYWwgZ2V0cyBlbWl0dGVkIGJlZm9yZSBzZW5kaW5nIHRoZSBidWZmZXIuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmFrZXNyYzwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgZmFrZXNyYyBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBidWZmZXIgdGhhdCB3aWxsIGJlIHB1c2hlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwYWQgdGhhdCB3aWxsIHNlbnQgaXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0dzdEZha2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RmFrZVNpbms8L3NwYW4+PC9hPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLWZkc2luay5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NWEwYmEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsuaHRtbApAQCAtMCwwICsxLDE2NyBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPmZkc2luazwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAwLjExIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3RyZWFtZXIgRWxlbWVudHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sIiB0aXRsZT0iZmFrZXNpbmsiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5odG1sIiB0aXRsZT0iZmRzcmMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMC4xMSBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWZkc2luay5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWZkc2luay5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIiBjbGFzcz0ic2hvcnRjdXQiPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWZkc2luay5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rLnRvcF9vZl9wYWdlIj48L2E+ZmRzaW5rPC9zcGFuPjwvaDI+Cis8cD5mZHNpbmsg4oCUIFdyaXRlIGRhdGEgdG8gYSBmaWxlIGRlc2NyaXB0b3I8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPGEgbmFtZT0iR3N0RmRTaW5rIj48L2E+PHByZSBjbGFzcz0ic3lub3BzaXMiPnN0cnVjdCAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZkc2luay5odG1sI0dzdEZkU2luay1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0RmRTaW5rIj5Hc3RGZFNpbms8L2E+OworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZkc2luay5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+R09iamVjdDwvYT4KKyAgICstLS0tPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KKyAgICAgICAgICstLS0tPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwiPkdzdE9iamVjdDwvYT4KKyAgICAgICAgICAgICAgICstLS0tPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sIj5Hc3RFbGVtZW50PC9hPgorICAgICAgICAgICAgICAgICAgICAgKy0tLS08YSBocmVmPSIuLi9nc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTaW5rLmh0bWwiPkdzdEJhc2VTaW5rPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS1Hc3RGZFNpbmsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KKzxwPgorR3N0RmRTaW5rIGltcGxlbWVudHMKKyA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSUhhbmRsZXIiPkdzdFVSSUhhbmRsZXI8L2E+LjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rLmh0bWwjR3N0RmRTaW5rLS1mZCIgdGl0bGU9J1RoZSAiZmQiIHByb3BlcnR5Jz5mZDwvYT4iICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPgorV3JpdGUgZGF0YSB0byBhIHVuaXggZmlsZSBkZXNjcmlwdG9yLgorPC9wPgorPHA+CitUaGlzIGVsZW1lbnQgd2lsbCBzeW5jaHJvbml6ZSBvbiB0aGUgY2xvY2sgYmVmb3JlIHdyaXRpbmcgdGhlIGRhdGEgb24gdGhlCitzb2NrZXQuIEZvciBmaWxlIGRlc2NyaXB0b3JzIHdoZXJlIHRoaXMgZG9lcyBub3QgbWFrZSBzZW5zZSAoZmlsZXMsIC4uLikgdGhlCis8YSBocmVmPSIuLi9nc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstLXN5bmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj4ic3luYyI8L3NwYW4+PC9hPiBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBkaXNhYmxlIHN5bmNocm9uaXNhdGlvbi4KKzwvcD4KKzxwPgorTGFzdCByZXZpZXdlZCBvbiAyMDA2LTA0LTI4ICgwLjEwLjYpCis8L3A+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8aDI+U3lub3BzaXM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iaWQzNzUyNDMiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+CisgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcGx1Z2luLWNvcmVlbGVtZW50cy5odG1sI3BsdWdpbi1jb3JlZWxlbWVudHMiPmNvcmVlbGVtZW50czwvYT4KKyAgICAgICAgICA8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgorPHRkPkVyaWsgV2FsdGhpbnNlbiAmbHQ7b21lZ2FAY3NlLm9naS5lZHUmZ3Q7PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgorPHRkPlNpbmsvRmlsZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImlkMzYxMjAyIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgorPHRkPnNpbms8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgorPHRkPnNpbms8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YWx3YXlzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QU5ZPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8cD4KKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rLmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RGZFNpbmstc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RGZFNpbms8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RGZFNpbms7PC9wcmU+Cis8cD4KK1RoZSBvcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZkc2luay5odG1sI0dzdEZkU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZkU2luazwvc3Bhbj48L2E+IGRhdGEgc3RydWN0dXJlLgorPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZkc2luay5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RmRTaW5rLS1mZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJmZCI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJmZCIgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPkFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yIHRvIHdyaXRlIHRvLjwvcD4KKzxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAwPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogMTwvcD4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZkc3JjLmh0bWwjR3N0RmRTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGZFNyYzwvc3Bhbj48L2E+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLWZkc3JjLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMDBkYTkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5odG1sCkBAIC0wLDAgKzEsMjAzIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+ZmRzcmM8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMC4xMSBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0cmVhbWVyIEVsZW1lbnRzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rLmh0bWwiIHRpdGxlPSJmZHNpbmsiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmh0bWwiIHRpdGxlPSJmaWxlc3JjIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIENvcmUgUGx1Z2lucyAwLjExIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIiBjbGFzcz0ic2hvcnRjdXQiPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWZkc3JjLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNyYyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZkc3JjLnRvcF9vZl9wYWdlIj48L2E+ZmRzcmM8L3NwYW4+PC9oMj4KKzxwPmZkc3JjIOKAlCBSZWFkIGZyb20gYSBmaWxlIGRlc2NyaXB0b3I8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8YSBuYW1lPSJHc3RGZFNyYyI+PC9hPjxwcmUgY2xhc3M9InN5bm9wc2lzIj5zdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5odG1sI0dzdEZkU3JjLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RGZFNyYyI+R3N0RmRTcmM8L2E+OworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZkc3JjLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij5HT2JqZWN0PC9hPgorICAgKy0tLS08YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgorICAgICAgICAgKy0tLS08YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCI+R3N0T2JqZWN0PC9hPgorICAgICAgICAgICAgICAgKy0tLS08YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwiPkdzdEVsZW1lbnQ8L2E+CisgICAgICAgICAgICAgICAgICAgICArLS0tLTxhIGhyZWY9Ii4uL2dzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVNyYy5odG1sIj5Hc3RCYXNlU3JjPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS08YSBocmVmPSIuLi9nc3RyZWFtZXItbGlicy0wLjExL0dzdFB1c2hTcmMuaHRtbCI+R3N0UHVzaFNyYzwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tR3N0RmRTcmMKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIj48L2E+PGgyPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2gyPgorPHA+CitHc3RGZFNyYyBpbXBsZW1lbnRzCisgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklIYW5kbGVyIj5Hc3RVUklIYW5kbGVyPC9hPi48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZkc3JjLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuaHRtbCNHc3RGZFNyYy0tZmQiIHRpdGxlPSdUaGUgImZkIiBwcm9wZXJ0eSc+ZmQ8L2E+IiAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZkc3JjLmh0bWwjR3N0RmRTcmMtLXRpbWVvdXQiIHRpdGxlPSdUaGUgInRpbWVvdXQiIHByb3BlcnR5Jz50aW1lb3V0PC9hPiIgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitSZWFkIGRhdGEgZnJvbSBhIHVuaXggZmlsZSBkZXNjcmlwdG9yLgorPC9wPgorPHA+CitUbyBnZW5lcmF0ZSBkYXRhLCBlbnRlciBzb21lIGRhdGEgb24gdGhlIGNvbnNvbGUgZm9sb3dlZCBieSBlbnRlci4KK1RoZSBhYm92ZSBtZW50aW9uZWQgcGlwZWxpbmUgc2hvdWxkIGR1bXAgZGF0YSBwYWNrZXRzIHRvIHRoZSBjb25zb2xlLgorPC9wPgorPHA+CitJZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZkc3JjLmh0bWwjR3N0RmRTcmMtLXRpbWVvdXQiIHRpdGxlPSdUaGUgInRpbWVvdXQiIHByb3BlcnR5Jz48c3BhbiBjbGFzcz0idHlwZSI+InRpbWVvdXQiPC9zcGFuPjwvYT4gcHJvcGVydHkgaXMgc2V0IHRvIGEgdmFsdWUgYmlnZ2VyIHRoYW4gMCwgZmRzcmMgd2lsbAorZ2VuZXJhdGUgYW4gZWxlbWVudCBtZXNzYWdlIG5hbWVkCis8Y29kZSBjbGFzcz0iY2xhc3NuYW1lIj4iR3N0RmRTcmNUaW1lb3V0IjwvY29kZT4KK2lmIG5vIGRhdGEgd2FzIHJlY2lldmVkIGluIHRoZSBnaXZlbiB0aW1lb3V0LgorVGhlIG1lc3NhZ2UncyBzdHJ1Y3R1cmUgY29udGFpbnMgb25lIGZpZWxkOgorPC9wPgorPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+CisgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+CisgIDxjb2RlIGNsYXNzPSJjbGFzc25hbWUiPiJ0aW1lb3V0IjwvY29kZT46IHRoZSB0aW1lb3V0IGluIG1pY3Jvc2Vjb25kcyB0aGF0CisgIGV4cGlyZWQgd2hlbiB3YWl0aW5nIGZvciBkYXRhLgorICA8L3A+PC9saT48L3VsPjwvZGl2PgorPHA+Cis8L3A+Cis8cD4KKzwvcD4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImlkMzg4OTIyIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgorPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CitlY2hvICJIZWxsbyBHU3RyZWFtZXIiIHwgZ3N0LWxhdW5jaCAtdiBmZHNyYyAhIGZha2VzaW5rIGR1bXA9dHJ1ZQorPC9wcmU+PC9kaXY+IEEgc2ltcGxlIHBpcGVsaW5lIHRvIHJlYWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQgYW5kIGR1bXAgdGhlIGRhdGEKK3dpdGggYSBmYWtlc2luayBhcyBoZXggYXNjaWkgYmxvY2suCis8L2Rpdj4KKzxwPgorPC9wPgorPHA+CitMYXN0IHJldmlld2VkIG9uIDIwMDgtMDYtMjAgKDAuMTAuMjEpCis8L3A+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8aDI+U3lub3BzaXM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iaWQzOTc3OTYiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+CisgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcGx1Z2luLWNvcmVlbGVtZW50cy5odG1sI3BsdWdpbi1jb3JlZWxlbWVudHMiPmNvcmVlbGVtZW50czwvYT4KKyAgICAgICAgICA8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgorPHRkPkVyaWsgV2FsdGhpbnNlbiAmbHQ7b21lZ2FAY3NlLm9naS5lZHUmZ3Q7PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgorPHRkPlNvdXJjZS9GaWxlPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iaWQzOTc4NTgiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c3JjPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zb3VyY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YWx3YXlzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QU5ZPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8cD4KKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEZkU3JjLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0RmRTcmM8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RGZFNyYzs8L3ByZT4KKzxwPgorT3BhcXVlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5odG1sI0dzdEZkU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RmRTcmM8L3NwYW4+PC9hPiBkYXRhIHN0cnVjdHVyZS4KKzwvcD4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RmRTcmMtLWZkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImZkIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgImZkIiAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+QW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IgdG8gcmVhZCBmcm9tLjwvcD4KKzxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAwPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RmRTcmMtLXRpbWVvdXQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4idGltZW91dCI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJ0aW1lb3V0IiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPgorUG9zdCBhIG1lc3NhZ2UgYWZ0ZXIgdGltZW91dCBtaWNyb3NlY29uZHMKKzwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjE8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZkc2luay5odG1sI0dzdEZkU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZkU2luazwvc3Bhbj48L2E+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOTVjZjcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5odG1sCkBAIC0wLDAgKzEsMTk1IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+ZmlsZXNpbms8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMC4xMSBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0cmVhbWVyIEVsZW1lbnRzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5odG1sIiB0aXRsZT0iZmlsZXNyYyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZ1bm5lbC5odG1sIiB0aXRsZT0iZnVubmVsIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMC4xMSBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZnVubmVsLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIiBjbGFzcz0ic2hvcnRjdXQiPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luayI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLnRvcF9vZl9wYWdlIj48L2E+ZmlsZXNpbms8L3NwYW4+PC9oMj4KKzxwPmZpbGVzaW5rIOKAlCBXcml0ZSBzdHJlYW0gdG8gYSBmaWxlPC9wPgorPC90ZD4KKzx0ZCB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgorPC90cj48L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPGEgbmFtZT0iR3N0RmlsZVNpbmsiPjwvYT48cHJlIGNsYXNzPSJzeW5vcHNpcyI+c3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsuaHRtbCNHc3RGaWxlU2luay1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0RmlsZVNpbmsiPkdzdEZpbGVTaW5rPC9hPjsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+R09iamVjdDwvYT4KKyAgICstLS0tPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KKyAgICAgICAgICstLS0tPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwiPkdzdE9iamVjdDwvYT4KKyAgICAgICAgICAgICAgICstLS0tPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sIj5Hc3RFbGVtZW50PC9hPgorICAgICAgICAgICAgICAgICAgICAgKy0tLS08YSBocmVmPSIuLi9nc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTaW5rLmh0bWwiPkdzdEJhc2VTaW5rPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS1Hc3RGaWxlU2luaworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmltcGxlbWVudGVkLWludGVyZmFjZXMiPjwvYT48aDI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvaDI+Cis8cD4KK0dzdEZpbGVTaW5rIGltcGxlbWVudHMKKyA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSUhhbmRsZXIiPkdzdFVSSUhhbmRsZXI8L2E+LjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5odG1sI0dzdEZpbGVTaW5rLS1sb2NhdGlvbiIgdGl0bGU9J1RoZSAibG9jYXRpb24iIHByb3BlcnR5Jz5sb2NhdGlvbjwvYT4iICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+KiAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmh0bWwjR3N0RmlsZVNpbmstLWJ1ZmZlci1tb2RlIiB0aXRsZT0nVGhlICJidWZmZXItbW9kZSIgcHJvcGVydHknPmJ1ZmZlci1tb2RlPC9hPiIgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGaWxlU2lua0J1ZmZlck1vZGU8L3NwYW4+ICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmh0bWwjR3N0RmlsZVNpbmstLWJ1ZmZlci1zaXplIiB0aXRsZT0nVGhlICJidWZmZXItc2l6ZSIgcHJvcGVydHknPmJ1ZmZlci1zaXplPC9hPiIgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsuaHRtbCNHc3RGaWxlU2luay0tYXBwZW5kIiB0aXRsZT0nVGhlICJhcHBlbmQiIHByb3BlcnR5Jz5hcHBlbmQ8L2E+IiAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPgorV3JpdGUgaW5jb21pbmcgZGF0YSB0byBhIGZpbGUgaW4gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLgorPC9wPgorPHA+Cis8L3A+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJpZDM2OTM2NCI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KKzxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgorZ3N0LWxhdW5jaCB2NGwyc3JjIG51bS1idWZmZXJzPTEgISBqcGVnZW5jICEgZmlsZXNpbmsgbG9jYXRpb249Y2FwdHVyZTEuanBlZworPC9wcmU+PC9kaXY+IENhcHR1cmUgb25lIGZyYW1lIGZyb20gYSB2NGwyIGNhbWVyYSBhbmQgc2F2ZSBhcyBqcGVnIGltYWdlLgorPC9kaXY+Cis8cD4KKzwvcD4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxoMj5TeW5vcHNpczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJpZDM2OTM4NSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKyAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWVsZW1lbnRzLmh0bWwjcGx1Z2luLWNvcmVlbGVtZW50cyI+Y29yZWVsZW1lbnRzPC9hPgorICAgICAgICAgIDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+VGhvbWFzIFZhbmRlciBTdGljaGVsZSAmbHQ7dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnJmd0OzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5TaW5rL0ZpbGU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJpZDM5ODYxMSI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zaW5rPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zaW5rPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgorPHRkPmFsd2F5czwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgorPHRkPkFOWTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPHA+Cis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RGaWxlU2luay1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdEZpbGVTaW5rPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0RmlsZVNpbms7PC9wcmU+Cis8cD4KK09wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsuaHRtbCNHc3RGaWxlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZpbGVTaW5rPC9zcGFuPjwvYT4gc3RydWN0dXJlLgorPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RGaWxlU2luay0tbG9jYXRpb24iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4ibG9jYXRpb24iPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAibG9jYXRpb24iICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+KiAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+TG9jYXRpb24gb2YgdGhlIGZpbGUgdG8gd3JpdGUuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogTlVMTDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RmlsZVNpbmstLWJ1ZmZlci1tb2RlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImJ1ZmZlci1tb2RlIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgImJ1ZmZlci1tb2RlIiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPkdzdEZpbGVTaW5rQnVmZmVyTW9kZTwvc3Bhbj4gIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5UaGUgYnVmZmVyaW5nIG1vZGUgdG8gdXNlLjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IERlZmF1bHQgYnVmZmVyaW5nPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RGaWxlU2luay0tYnVmZmVyLXNpemUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4iYnVmZmVyLXNpemUiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiYnVmZmVyLXNpemUiICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+U2l6ZSBvZiBidWZmZXIgaW4gbnVtYmVyIG9mIGJ5dGVzIGZvciBsaW5lIG9yIGZ1bGwgYnVmZmVyLW1vZGUuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogNjU1MzY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEZpbGVTaW5rLS1hcHBlbmQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4iYXBwZW5kIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgImFwcGVuZCIgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPgorQXBwZW5kIHRvIGFuIGFscmVhZHkgZXhpc3RpbmcgZmlsZS4KKzwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjI1PC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmh0bWwjR3N0RmlsZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZpbGVTcmM8L3NwYW4+PC9hPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFmNTE1NQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuaHRtbApAQCAtMCwwICsxLDIwOCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPmZpbGVzcmM8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMC4xMSBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0cmVhbWVyIEVsZW1lbnRzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuaHRtbCIgdGl0bGU9ImZkc3JjIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsuaHRtbCIgdGl0bGU9ImZpbGVzaW5rIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDAuMTEgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMudG9wX29mX3BhZ2UiPjwvYT5maWxlc3JjPC9zcGFuPjwvaDI+Cis8cD5maWxlc3JjIOKAlCBSZWFkIGZyb20gYXJiaXRyYXJ5IHBvaW50IGluIGEgZmlsZTwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPGEgbmFtZT0iR3N0RmlsZVNyYyI+PC9hPjxwcmUgY2xhc3M9InN5bm9wc2lzIj5zdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmh0bWwjR3N0RmlsZVNyYy1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0RmlsZVNyYyI+R3N0RmlsZVNyYzwvYT47Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+R09iamVjdDwvYT4KKyAgICstLS0tPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KKyAgICAgICAgICstLS0tPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwiPkdzdE9iamVjdDwvYT4KKyAgICAgICAgICAgICAgICstLS0tPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sIj5Hc3RFbGVtZW50PC9hPgorICAgICAgICAgICAgICAgICAgICAgKy0tLS08YSBocmVmPSIuLi9nc3RyZWFtZXItbGlicy0wLjExL0dzdEJhc2VTcmMuaHRtbCI+R3N0QmFzZVNyYzwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tR3N0RmlsZVNyYworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KKzxwPgorR3N0RmlsZVNyYyBpbXBsZW1lbnRzCisgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklIYW5kbGVyIj5Hc3RVUklIYW5kbGVyPC9hPi48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmh0bWwjR3N0RmlsZVNyYy0tZmQiIHRpdGxlPSdUaGUgImZkIiBwcm9wZXJ0eSc+ZmQ8L2E+IiAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgICA6IFJlYWQKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmh0bWwjR3N0RmlsZVNyYy0tbG9jYXRpb24iIHRpdGxlPSdUaGUgImxvY2F0aW9uIiBwcm9wZXJ0eSc+bG9jYXRpb248L2E+IiAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiogICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmh0bWwjR3N0RmlsZVNyYy0tbW1hcHNpemUiIHRpdGxlPSdUaGUgIm1tYXBzaXplIiBwcm9wZXJ0eSc+bW1hcHNpemU8L2E+IiAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1bG9uZyI+PHNwYW4gY2xhc3M9InR5cGUiPmd1bG9uZzwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5odG1sI0dzdEZpbGVTcmMtLXRvdWNoIiB0aXRsZT0nVGhlICJ0b3VjaCIgcHJvcGVydHknPnRvdWNoPC9hPiIgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5odG1sI0dzdEZpbGVTcmMtLXVzZS1tbWFwIiB0aXRsZT0nVGhlICJ1c2UtbW1hcCIgcHJvcGVydHknPnVzZS1tbWFwPC9hPiIgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5odG1sI0dzdEZpbGVTcmMtLXNlcXVlbnRpYWwiIHRpdGxlPSdUaGUgInNlcXVlbnRpYWwiIHByb3BlcnR5Jz5zZXF1ZW50aWFsPC9hPiIgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitSZWFkIGRhdGEgZnJvbSBhIGZpbGUgaW4gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLgorPC9wPgorPHA+Cis8L3A+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJpZDM2NDEyMyI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KKzxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgorZ3N0LWxhdW5jaCBmaWxlc3JjIGxvY2F0aW9uPXNvbmcub2dnICEgZGVjb2RlYmluMiAhIGF1dG9hdWRpb3NpbmsKKzwvcHJlPjwvZGl2PiBQbGF5IGEgc29uZy5vZ2cgZnJvbSBsb2NhbCBkaXIuCis8L2Rpdj4KKzxwPgorPC9wPgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGgyPlN5bm9wc2lzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImlkMzk4OTMxIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgorPHRkPgorICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXBsdWdpbi1jb3JlZWxlbWVudHMuaHRtbCNwbHVnaW4tY29yZWVsZW1lbnRzIj5jb3JlZWxlbWVudHM8L2E+CisgICAgICAgICAgPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5FcmlrIFdhbHRoaW5zZW4gJmx0O29tZWdhQGNzZS5vZ2kuZWR1Jmd0OzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Tb3VyY2UvRmlsZTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImlkMzk4OTkzIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgorPHRkPnNyYzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c291cmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgorPHRkPmFsd2F5czwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgorPHRkPkFOWTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPHA+Cis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEZpbGVTcmMtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RGaWxlU3JjPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0RmlsZVNyYzs8L3ByZT4KKzxwPgorT3BhcXVlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmh0bWwjR3N0RmlsZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZpbGVTcmM8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUuCis8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RmlsZVNyYy0tZmQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4iZmQiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiZmQiICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICAgIDogUmVhZDwvcHJlPgorPHA+RmlsZS1kZXNjcmlwdG9yIGZvciB0aGUgZmlsZSBiZWluZyBtbWFwKClkLjwvcD4KKzxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAwPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RmlsZVNyYy0tbG9jYXRpb24iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4ibG9jYXRpb24iPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAibG9jYXRpb24iICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+KiAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+TG9jYXRpb24gb2YgdGhlIGZpbGUgdG8gcmVhZC48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RGaWxlU3JjLS1tbWFwc2l6ZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJtbWFwc2l6ZSI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJtbWFwc2l6ZSIgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWxvbmciPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWxvbmc8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+U2l6ZSBpbiBieXRlcyBvZiBtbWFwKClkIHJlZ2lvbnMuPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RGaWxlU3JjLS10b3VjaCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJ0b3VjaCI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJ0b3VjaCIgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5Ub3VjaCBtbWFwcGVkIGRhdGEgcmVnaW9ucyB0byBmb3JjZSB0aGVtIHRvIGJlIHJlYWQgZnJvbSBkaXNrLjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdEZpbGVTcmMtLXVzZS1tbWFwIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+InVzZS1tbWFwIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgInVzZS1tbWFwIiAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPldoZXRoZXIgdG8gdXNlIG1tYXAoKSBpbnN0ZWFkIG9mIHJlYWQoKS48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RmlsZVNyYy0tc2VxdWVudGlhbCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJzZXF1ZW50aWFsIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgInNlcXVlbnRpYWwiICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPldoZXRoZXIgdG8gdXNlIG1hZHZpc2UgdG8gaGludCB0byB0aGUga2VybmVsIHRoYXQgYWNjZXNzIHRvIG1tYXAgcGFnZXMgd2lsbCBiZSBzZXF1ZW50aWFsLjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuaHRtbCNHc3RGaWxlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RmlsZVNyYzwvc3Bhbj48L2E+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLWZ1bm5lbC5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtZnVubmVsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE2MjhlYQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLWZ1bm5lbC5odG1sCkBAIC0wLDAgKzEsMTU3IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+ZnVubmVsPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDAuMTEgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdHJlYW1lciBFbGVtZW50cyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmh0bWwiIHRpdGxlPSJmaWxlc2luayI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lmh0bWwiIHRpdGxlPSJpZGVudGl0eSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIENvcmUgUGx1Z2lucyAwLjExIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWZ1bm5lbC5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWZ1bm5lbC5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtZnVubmVsLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mdW5uZWwiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mdW5uZWwudG9wX29mX3BhZ2UiPjwvYT5mdW5uZWw8L3NwYW4+PC9oMj4KKzxwPmZ1bm5lbCDigJQgTi10by0xIHBpcGUgZml0dGluZzwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZ1bm5lbC5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8YSBuYW1lPSJHc3RGdW5uZWwiPjwvYT48cHJlIGNsYXNzPSJzeW5vcHNpcyI+c3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZnVubmVsLmh0bWwjR3N0RnVubmVsLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RGdW5uZWwiPkdzdEZ1bm5lbDwvYT47Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZnVubmVsLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij5HT2JqZWN0PC9hPgorICAgKy0tLS08YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgorICAgICAgICAgKy0tLS08YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCI+R3N0T2JqZWN0PC9hPgorICAgICAgICAgICAgICAgKy0tLS08YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwiPkdzdEVsZW1lbnQ8L2E+CisgICAgICAgICAgICAgICAgICAgICArLS0tLUdzdEZ1bm5lbAorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZ1bm5lbC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK1Rha2VzIHBhY2tldHMgZnJvbSB2YXJpb3VzIGlucHV0IHNpbmtzIGludG8gb25lIG91dHB1dCBzb3VyY2UuCis8L3A+Cis8cD4KK2Z1bm5lbCBhbHdheXMgb3V0cHV0cyBhIHNpbmdsZSwgb3BlbiBlbmRlZCBzZWdtZW50IGZyb20KKzAgd2l0aCBpbiA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR1NULUZPUk1BVC1USU1FOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRk9STUFUX1RJTUU8L2NvZGU+PC9hPiBhbmQgb3V0cHV0cyB0aGUgYnVmZmVycyBvZiB0aGUKK2RpZmZlcmVudCBzaW5rcGFkcyB3aXRoIHRpbWVzdGFtcHMgdGhhdCBhcmUgc2V0IHRvIHRoZQorcnVubmluZyB0aW1lIGZvciB0aGF0IHN0cmVhbS4gZnVubmVsIGRvZXMgbm90IHN5bmNocm9uaXplCit0aGUgZGlmZmVyZW50IGlucHV0IHN0cmVhbXMgYnV0IHNpbXBseSBmb3J3YXJkcyBhbGwgYnVmZmVycworaW1tZWRpYXRlbHkgd2hlbiB0aGV5IGFycml2ZS4KKzwvcD4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxoMj5TeW5vcHNpczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJpZDM3MDk4MyI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKyAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWVsZW1lbnRzLmh0bWwjcGx1Z2luLWNvcmVlbGVtZW50cyI+Y29yZWVsZW1lbnRzPC9hPgorICAgICAgICAgIDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+T2xpdmllciBDcmV0ZSAmbHQ7b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWsmZ3Q7PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgorPHRkPkdlbmVyaWM8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJpZDM3NjUzMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zaW5rJWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgorPHRkPnNpbms8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+cmVxdWVzdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgorPHRkPkFOWTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgorPHRkPnNyYzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c291cmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgorPHRkPmFsd2F5czwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgorPHRkPkFOWTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPHA+Cis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZ1bm5lbC5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0RnVubmVsLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0RnVubmVsPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0RnVubmVsOzwvcHJlPgorPHA+CitPcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZ1bm5lbC5odG1sI0dzdEZ1bm5lbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZ1bm5lbDwvc3Bhbj48L2E+IGRhdGEgc3RydWN0dXJlLgorPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNmJhZjkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sCkBAIC0wLDAgKzEsMzExIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+aWRlbnRpdHk8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMC4xMSBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0cmVhbWVyIEVsZW1lbnRzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZnVubmVsLmh0bWwiIHRpdGxlPSJmdW5uZWwiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5odG1sIiB0aXRsZT0iaW5wdXQtc2VsZWN0b3IiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZ1bm5lbC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDAuMTEgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5LnNpZ25hbHMiIGNsYXNzPSJzaG9ydGN1dCI+U2lnbmFsczwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5LnRvcF9vZl9wYWdlIj48L2E+aWRlbnRpdHk8L3NwYW4+PC9oMj4KKzxwPmlkZW50aXR5IOKAlCBQYXNzIGRhdGEgd2l0aG91dCBtb2RpZmljYXRpb248L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8YSBuYW1lPSJHc3RJZGVudGl0eSI+PC9hPjxwcmUgY2xhc3M9InN5bm9wc2lzIj5zdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI0dzdElkZW50aXR5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RJZGVudGl0eSI+R3N0SWRlbnRpdHk8L2E+OworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij5HT2JqZWN0PC9hPgorICAgKy0tLS08YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgorICAgICAgICAgKy0tLS08YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCI+R3N0T2JqZWN0PC9hPgorICAgICAgICAgICAgICAgKy0tLS08YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwiPkdzdEVsZW1lbnQ8L2E+CisgICAgICAgICAgICAgICAgICAgICArLS0tLTxhIGhyZWY9Ii4uL2dzdHJlYW1lci1saWJzLTAuMTEvR3N0QmFzZVRyYW5zZm9ybS5odG1sIj5Hc3RCYXNlVHJhbnNmb3JtPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS1Hc3RJZGVudGl0eQorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5LnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tY2hlY2stcGVyZmVjdCIgdGl0bGU9J1RoZSAiY2hlY2stcGVyZmVjdCIgcHJvcGVydHknPmNoZWNrLXBlcmZlY3Q8L2E+IiAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tZGF0YXJhdGUiIHRpdGxlPSdUaGUgImRhdGFyYXRlIiBwcm9wZXJ0eSc+ZGF0YXJhdGU8L2E+IiAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lmh0bWwjR3N0SWRlbnRpdHktLWRyb3AtcHJvYmFiaWxpdHkiIHRpdGxlPSdUaGUgImRyb3AtcHJvYmFiaWxpdHkiIHByb3BlcnR5Jz5kcm9wLXByb2JhYmlsaXR5PC9hPiIgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI0dzdElkZW50aXR5LS1kdW1wIiB0aXRsZT0nVGhlICJkdW1wIiBwcm9wZXJ0eSc+ZHVtcDwvYT4iICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI0dzdElkZW50aXR5LS1lcnJvci1hZnRlciIgdGl0bGU9J1RoZSAiZXJyb3ItYWZ0ZXIiIHByb3BlcnR5Jz5lcnJvci1hZnRlcjwvYT4iICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tbGFzdC1tZXNzYWdlIiB0aXRsZT0nVGhlICJsYXN0LW1lc3NhZ2UiIHByb3BlcnR5Jz5sYXN0LW1lc3NhZ2U8L2E+IiAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+KiAgICAgICAgICAgICAgICA6IFJlYWQKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI0dzdElkZW50aXR5LS1zaWxlbnQiIHRpdGxlPSdUaGUgInNpbGVudCIgcHJvcGVydHknPnNpbGVudDwvYT4iICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tc2luZ2xlLXNlZ21lbnQiIHRpdGxlPSdUaGUgInNpbmdsZS1zZWdtZW50IiBwcm9wZXJ0eSc+c2luZ2xlLXNlZ21lbnQ8L2E+IiAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI0dzdElkZW50aXR5LS1zbGVlcC10aW1lIiB0aXRsZT0nVGhlICJzbGVlcC10aW1lIiBwcm9wZXJ0eSc+c2xlZXAtdGltZTwvYT4iICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI0dzdElkZW50aXR5LS1zeW5jIiB0aXRsZT0nVGhlICJzeW5jIiBwcm9wZXJ0eSc+c3luYzwvYT4iICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI0dzdElkZW50aXR5LS1jaGVjay1pbXBlcmZlY3Qtb2Zmc2V0IiB0aXRsZT0nVGhlICJjaGVjay1pbXBlcmZlY3Qtb2Zmc2V0IiBwcm9wZXJ0eSc+Y2hlY2staW1wZXJmZWN0LW9mZnNldDwvYT4iICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI0dzdElkZW50aXR5LS1jaGVjay1pbXBlcmZlY3QtdGltZXN0YW1wIiB0aXRsZT0nVGhlICJjaGVjay1pbXBlcmZlY3QtdGltZXN0YW1wIiBwcm9wZXJ0eSc+Y2hlY2staW1wZXJmZWN0LXRpbWVzdGFtcDwvYT4iIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tc2lnbmFsLWhhbmRvZmZzIiB0aXRsZT0nVGhlICJzaWduYWwtaGFuZG9mZnMiIHByb3BlcnR5Jz5zaWduYWwtaGFuZG9mZnM8L2E+IiAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5LnNpZ25hbHMiPjwvYT48aDI+U2lnbmFsczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS1oYW5kb2ZmIiB0aXRsZT0nVGhlICJoYW5kb2ZmIiBzaWduYWwnPmhhbmRvZmY8L2E+IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5SdW4gTGFzdDwvY29kZT48L2E+Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitEdW1teSBlbGVtZW50IHRoYXQgcGFzc2VzIGluY29taW5nIGRhdGEgdGhyb3VnaCB1bm1vZGlmaWVkLiBJdCBoYXMgc29tZQordXNlZnVsIGRpYWdub3N0aWMgZnVuY3Rpb25zLCBzdWNoIGFzIG9mZnNldCBhbmQgdGltZXN0YW1wIGNoZWNraW5nLgorPC9wPgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGgyPlN5bm9wc2lzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImlkNDAwMjkxIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgorPHRkPgorICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXBsdWdpbi1jb3JlZWxlbWVudHMuaHRtbCNwbHVnaW4tY29yZWVsZW1lbnRzIj5jb3JlZWxlbWVudHM8L2E+CisgICAgICAgICAgPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5FcmlrIFdhbHRoaW5zZW4gJmx0O29tZWdhQGNzZS5vZ2kuZWR1Jmd0OzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5HZW5lcmljPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iaWQ0MDAzNTMiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2luazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2luazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hbHdheXM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BTlk8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zcmM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgorPHRkPnNvdXJjZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hbHdheXM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BTlk8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxwPgorPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0SWRlbnRpdHktc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RJZGVudGl0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdElkZW50aXR5OzwvcHJlPgorPHA+CitPcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lmh0bWwjR3N0SWRlbnRpdHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJZGVudGl0eTwvc3Bhbj48L2E+IGRhdGEgc3RydWN0dXJlCis8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdElkZW50aXR5LS1jaGVjay1wZXJmZWN0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImNoZWNrLXBlcmZlY3QiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiY2hlY2stcGVyZmVjdCIgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+VmVyaWZ5IHRoYXQgdGhlIHN0cmVhbSBpcyB0aW1lLSBhbmQgZGF0YS1jb250aWd1b3VzLiBUaGlzIG9ubHkgbG9ncyBpbiB0aGUgZGVidWcgbG9nLiAgVGhpcyB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdGhlIGNoZWNrLWltcGVyZmVjdC10aW1lc3RhbXAvb2Zmc2V0IHByb3BlcnRpZXMuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdElkZW50aXR5LS1kYXRhcmF0ZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJkYXRhcmF0ZSI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJkYXRhcmF0ZSIgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPihSZSl0aW1lc3RhbXBzIGJ1ZmZlcnMgd2l0aCBudW1iZXIgb2YgYnl0ZXMgcGVyIHNlY29uZCAoMCA9IGluYWN0aXZlKS48L3A+Cis8cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMDwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdElkZW50aXR5LS1kcm9wLXByb2JhYmlsaXR5Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImRyb3AtcHJvYmFiaWxpdHkiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiZHJvcC1wcm9iYWJpbGl0eSIgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPlRoZSBQcm9iYWJpbGl0eSBhIGJ1ZmZlciBpcyBkcm9wcGVkLjwvcD4KKzxwPkFsbG93ZWQgdmFsdWVzOiBbMCwxXTwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdElkZW50aXR5LS1kdW1wIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImR1bXAiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiZHVtcCIgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+RHVtcCBidWZmZXIgY29udGVudHMgdG8gc3Rkb3V0LjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RJZGVudGl0eS0tZXJyb3ItYWZ0ZXIiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4iZXJyb3ItYWZ0ZXIiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiZXJyb3ItYWZ0ZXIiICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5FcnJvciBhZnRlciBOIGJ1ZmZlcnMuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogLTE8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdElkZW50aXR5LS1sYXN0LW1lc3NhZ2UiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4ibGFzdC1tZXNzYWdlIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgImxhc3QtbWVzc2FnZSIgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiogICAgICAgICAgICAgICAgOiBSZWFkPC9wcmU+Cis8cD5sYXN0LW1lc3NhZ2UuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogTlVMTDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0SWRlbnRpdHktLXNpbGVudCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJzaWxlbnQiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAic2lsZW50IiAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+c2lsZW50LjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RJZGVudGl0eS0tc2luZ2xlLXNlZ21lbnQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4ic2luZ2xlLXNlZ21lbnQiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAic2luZ2xlLXNlZ21lbnQiICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+VGltZXN0YW1wIGJ1ZmZlcnMgYW5kIGVhdCBzZWdtZW50cyBzbyBhcyB0byBhcHBlYXIgYXMgb25lIHNlZ21lbnQuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdElkZW50aXR5LS1zbGVlcC10aW1lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+InNsZWVwLXRpbWUiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAic2xlZXAtdGltZSIgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+TWljcm9zZWNvbmRzIHRvIHNsZWVwIGJldHdlZW4gcHJvY2Vzc2luZy48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RJZGVudGl0eS0tc3luYyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJzeW5jIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgInN5bmMiICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPlN5bmNocm9uaXplIHRvIHBpcGVsaW5lIGNsb2NrLjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RJZGVudGl0eS0tY2hlY2staW1wZXJmZWN0LW9mZnNldCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJjaGVjay1pbXBlcmZlY3Qtb2Zmc2V0IjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgImNoZWNrLWltcGVyZmVjdC1vZmZzZXQiICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPlNlbmQgZWxlbWVudCBtZXNzYWdlcyBpZiBvZmZzZXQgYW5kIG9mZnNldF9lbmQgZG8gbm90IG1hdGNoIHVwLjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RJZGVudGl0eS0tY2hlY2staW1wZXJmZWN0LXRpbWVzdGFtcCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJjaGVjay1pbXBlcmZlY3QtdGltZXN0YW1wIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgImNoZWNrLWltcGVyZmVjdC10aW1lc3RhbXAiIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5TZW5kIGVsZW1lbnQgbWVzc2FnZXMgaWYgdGltZXN0YW1wcyBhbmQgZHVyYXRpb25zIGRvIG5vdCBtYXRjaCB1cC48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0SWRlbnRpdHktLXNpZ25hbC1oYW5kb2ZmcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJzaWduYWwtaGFuZG9mZnMiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAic2lnbmFsLWhhbmRvZmZzIiAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+CitJZiBzZXQgdG8gPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5UUlVFPC9zcGFuPjwvYT4sIHRoZSBpZGVudGl0eSB3aWxsIGVtaXQgYSBoYW5kb2ZmIHNpZ25hbCB3aGVuIGhhbmRsaW5nIGEgYnVmZmVyLgorV2hlbiBzZXQgdG8gPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+RkFMU0U8L3NwYW4+PC9hPiwgbm8gc2lnbmFsIHdpbGwgYmUgZW1pdGVkLCB3aGljaCBtaWdodCBpbXByb3ZlIHBlcmZvcm1hbmNlLgorPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4xNjwvcD4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5zaWduYWwtZGV0YWlscyI+PC9hPjxoMj5TaWduYWwgRGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RJZGVudGl0eS1oYW5kb2ZmIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImhhbmRvZmYiPC9jb2RlPiBzaWduYWw8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgdXNlcl9mdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lmh0bWwjR3N0SWRlbnRpdHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJZGVudGl0eTwvc3Bhbj48L2E+ICppZGVudGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICAgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgdXNlcl9kYXRhKSAgICAgIDogPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlJ1biBMYXN0PC9jb2RlPjwvYT48L3ByZT4KKzxwPgorVGhpcyBzaWduYWwgZ2V0cyBlbWl0dGVkIGJlZm9yZSBwYXNzaW5nIHRoZSBidWZmZXIgZG93bnN0cmVhbS4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZGVudGl0eTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgaWRlbnRpdHkgaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgYnVmZmVyIHRoYXQganVzdCBoYXMgYmVlbiByZWNlaXZlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBwYWQgdGhhdCByZWNlaXZlZCBpdDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiODdiNzkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5odG1sCkBAIC0wLDAgKzEsMjgxIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+aW5wdXQtc2VsZWN0b3I8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMC4xMSBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0cmVhbWVyIEVsZW1lbnRzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCIgdGl0bGU9ImlkZW50aXR5Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sIiB0aXRsZT0ibXVsdGlxdWV1ZSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIENvcmUgUGx1Z2lucyAwLjExIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3Iuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3Iub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLnNpZ25hbHMiIGNsYXNzPSJzaG9ydGN1dCI+U2lnbmFsczwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3RvciI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLnRvcF9vZl9wYWdlIj48L2E+aW5wdXQtc2VsZWN0b3I8L3NwYW4+PC9oMj4KKzxwPmlucHV0LXNlbGVjdG9yIOKAlCBOLXRvLTEgaW5wdXQgc3RyZWFtIHNlbGVjdG9yPC9wPgorPC90ZD4KKzx0ZCB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgorPC90cj48L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3Iuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPGEgbmFtZT0iR3N0SW5wdXRTZWxlY3RvciI+PC9hPjxwcmUgY2xhc3M9InN5bm9wc2lzIj5zdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5odG1sI0dzdElucHV0U2VsZWN0b3Itc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdElucHV0U2VsZWN0b3IiPkdzdElucHV0U2VsZWN0b3I8L2E+OworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij5HT2JqZWN0PC9hPgorICAgKy0tLS08YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgorICAgICAgICAgKy0tLS08YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCI+R3N0T2JqZWN0PC9hPgorICAgICAgICAgICAgICAgKy0tLS08YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwiPkdzdEVsZW1lbnQ8L2E+CisgICAgICAgICAgICAgICAgICAgICArLS0tLUdzdElucHV0U2VsZWN0b3IKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwjR3N0SW5wdXRTZWxlY3Rvci0tYWN0aXZlLXBhZCIgdGl0bGU9J1RoZSAiYWN0aXZlLXBhZCIgcHJvcGVydHknPmFjdGl2ZS1wYWQ8L2E+IiAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4qICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5odG1sI0dzdElucHV0U2VsZWN0b3ItLW4tcGFkcyIgdGl0bGU9J1RoZSAibi1wYWRzIiBwcm9wZXJ0eSc+bi1wYWRzPC9hPiIgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICAgOiBSZWFkCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IuaHRtbCNHc3RJbnB1dFNlbGVjdG9yLS1zZWxlY3QtYWxsIiB0aXRsZT0nVGhlICJzZWxlY3QtYWxsIiBwcm9wZXJ0eSc+c2VsZWN0LWFsbDwvYT4iICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5odG1sI0dzdElucHV0U2VsZWN0b3ItLXN5bmMtc3RyZWFtcyIgdGl0bGU9J1RoZSAic3luYy1zdHJlYW1zIiBwcm9wZXJ0eSc+c3luYy1zdHJlYW1zPC9hPiIgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5zaWduYWxzIj48L2E+PGgyPlNpZ25hbHM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwjR3N0SW5wdXRTZWxlY3Rvci1ibG9jayIgdGl0bGU9J1RoZSAiYmxvY2siIHNpZ25hbCc+YmxvY2s8L2E+IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtQUNUSU9OOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5BY3Rpb248L2NvZGU+PC9hPgorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwjR3N0SW5wdXRTZWxlY3Rvci1zd2l0Y2giIHRpdGxlPSdUaGUgInN3aXRjaCIgc2lnbmFsJz5zd2l0Y2g8L2E+IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+UnVuIExhc3Q8L2NvZGU+PC9hPgorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPgorRGlyZWN0IG9uZSBvdXQgb2YgTiBpbnB1dCBzdHJlYW1zIHRvIHRoZSBvdXRwdXQgcGFkLgorPC9wPgorPHA+CitUaGUgaW5wdXQgcGFkcyBhcmUgZnJvbSBhIEdzdFBhZCBzdWJjbGFzcyBhbmQgaGF2ZSBhZGRpdGlvbmFsCitwcm9wZXJ0aWVzLCB3aGljaCB1c2VycyBtYXkgZmluZCB1c2VmdWwsIG5hbWVseToKKzwvcD4KKzxwPgorPC9wPgorPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKyJydW5uaW5nLXRpbWUiOiBSdW5uaW5nIHRpbWUgb2Ygc3RyZWFtIG9uIHBhZCAoPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+KQorPC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPgorInRhZ3MiOiBUaGUgY3VycmVudGx5IGFjdGl2ZSB0YWdzIG9uIHRoZSBwYWQgKDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiwgYm94ZWQgdHlwZSkKKzwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKyJhY3RpdmUiOiBJZiB0aGUgcGFkIGlzIGN1cnJlbnRseSBhY3RpdmUgKDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4pCis8L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+CisiYWx3YXlzLW9rIiA6IE1ha2UgYW4gaW5hY3RpdmUgcGFkcyByZXR1cm4gPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULUZMT1ctT0s6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GTE9XX09LPC9zcGFuPjwvYT4gaW5zdGVhZCBvZgorPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwjR1NULUZMT1ctTk9ULUxJTktFRDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0ZMT1dfTk9UX0xJTktFRDwvc3Bhbj48L2E+Cis8L2xpPgorPC91bD48L2Rpdj4KKzxwPgorPC9wPgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGgyPlN5bm9wc2lzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImlkNDAyNDc1Ij48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgorPHRkPgorICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXBsdWdpbi1jb3JlZWxlbWVudHMuaHRtbCNwbHVnaW4tY29yZWVsZW1lbnRzIj5jb3JlZWxlbWVudHM8L2E+CisgICAgICAgICAgPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5KdWxpZW4gTW91dHRlICZsdDtqdWxpZW5AbW91dHRlLm5ldCZndDssIEphbiBTY2htaWR0ICZsdDt0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tJmd0OywgV2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+R2VuZXJpYzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImlkNDAyNTM4Ij48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgorPHRkPnNpbmslZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2luazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5yZXF1ZXN0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QU5ZPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c3JjPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zb3VyY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YWx3YXlzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QU5ZPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8cD4KKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdElucHV0U2VsZWN0b3Itc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RJbnB1dFNlbGVjdG9yPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0SW5wdXRTZWxlY3Rvcjs8L3ByZT4KKzxwPgorPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RJbnB1dFNlbGVjdG9yLS1hY3RpdmUtcGFkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImFjdGl2ZS1wYWQiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiYWN0aXZlLXBhZCIgICAgICAgICAgICAgICA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+KiAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5UaGUgY3VycmVudGx5IGFjdGl2ZSBzaW5rIHBhZC48L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdElucHV0U2VsZWN0b3ItLW4tcGFkcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJuLXBhZHMiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAibi1wYWRzIiAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICA6IFJlYWQ8L3ByZT4KKzxwPlRoZSBudW1iZXIgb2Ygc2luayBwYWRzLjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdElucHV0U2VsZWN0b3ItLXNlbGVjdC1hbGwiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4ic2VsZWN0LWFsbCI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJzZWxlY3QtYWxsIiAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5Gb3J3YXJkcyBkYXRhIGZyb20gYWxsIGlucHV0IHBhZHMuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdElucHV0U2VsZWN0b3ItLXN5bmMtc3RyZWFtcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJzeW5jLXN0cmVhbXMiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAic3luYy1zdHJlYW1zIiAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+CitJZiBzZXQgdG8gPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gYWxsIGluYWN0aXZlIHN0cmVhbXMgd2lsbCBiZSBzeW5jZWQgdG8gdGhlCitydW5uaW5nIHRpbWUgb2YgdGhlIGFjdGl2ZSBzdHJlYW0uIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG5vCitidWZmZXJzIGFyZSBkcm9wcGVkIGJ5IGlucHV0LXNlbGVjdG9yIHRoYXQgbWlnaHQgYmUgbmVlZGVkCit3aGVuIHN3aXRjaGluZyB0aGUgYWN0aXZlIHBhZC4KKzwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjM1PC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLnNpZ25hbC1kZXRhaWxzIj48L2E+PGgyPlNpZ25hbCBEZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdElucHV0U2VsZWN0b3ItYmxvY2siPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4iYmxvY2siPC9jb2RlPiBzaWduYWw8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgIHVzZXJfZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5odG1sI0dzdElucHV0U2VsZWN0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbnB1dFNlbGVjdG9yPC9zcGFuPjwvYT4gKmlucHV0c2VsZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgICAgdXNlcl9kYXRhKSAgICAgICAgICA6IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLUFDVElPTjpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+QWN0aW9uPC9jb2RlPjwvYT48L3ByZT4KKzxwPgorQmxvY2sgYWxsIHNpbmsgcGFkcyBpbiBwcmVwYXJhdGlvbiBmb3IgYSBzd2l0Y2guIFJldHVybnMgdGhlIHN0b3AgdGltZSBvZgordGhlIGN1cnJlbnQgc3dpdGNoIHNlZ21lbnQsIGFzIGEgcnVubmluZyB0aW1lLCBvciAwIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQKK2FjdGl2ZSBwYWQgb3IgdGhlIGN1cnJlbnQgYWN0aXZlIHBhZCBuZXZlciByZWNlaXZlZCBkYXRhLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlucHV0c2VsZWN0b3I8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5odG1sI0dzdElucHV0U2VsZWN0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbnB1dFNlbGVjdG9yPC9zcGFuPjwvYT4KKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RJbnB1dFNlbGVjdG9yLXN3aXRjaCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJzd2l0Y2giPC9jb2RlPiBzaWduYWw8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgdXNlcl9mdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwjR3N0SW5wdXRTZWxlY3RvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdElucHV0U2VsZWN0b3I8L3NwYW4+PC9hPiAqZ3N0aW5wdXRzZWxlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAgICAgICAgICAgKmFyZzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgIGFyZzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgIGFyZzMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgICAgdXNlcl9kYXRhKSAgICAgICAgICAgICA6IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5SdW4gTGFzdDwvY29kZT48L2E+PC9wcmU+Cis8cD4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5nc3RpbnB1dHNlbGVjdG9yPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbC48L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Cis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLmh0bWwjR3N0T3V0cHV0U2VsZWN0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPdXRwdXRTZWxlY3Rvcjwvc3Bhbj48L2E+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODJiZmEyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sCkBAIC0wLDAgKzEsNDEzIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+bXVsdGlxdWV1ZTwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAwLjExIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3RyZWFtZXIgRWxlbWVudHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5odG1sIiB0aXRsZT0iaW5wdXQtc2VsZWN0b3IiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IuaHRtbCIgdGl0bGU9Im91dHB1dC1zZWxlY3RvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIENvcmUgUGx1Z2lucyAwLjExIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPgorPHRyPjx0ZCBjb2xzcGFuPSI1IiBjbGFzcz0ic2hvcnRjdXRzIj4KKzxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLnNpZ25hbHMiIGNsYXNzPSJzaG9ydGN1dCI+U2lnbmFsczwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS50b3Bfb2ZfcGFnZSI+PC9hPm11bHRpcXVldWU8L3NwYW4+PC9oMj4KKzxwPm11bHRpcXVldWUg4oCUIE11bHRpcGxlIGRhdGEgcXVldWU8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLnN5bm9wc2lzIj48L2E+PGgyPlN5bm9wc2lzPC9oMj4KKzxhIG5hbWU9IkdzdE11bHRpUXVldWUiPjwvYT48cHJlIGNsYXNzPSJzeW5vcHNpcyI+c3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdE11bHRpUXVldWUiPkdzdE11bHRpUXVldWU8L2E+OworPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPkdPYmplY3Q8L2E+CisgICArLS0tLTxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+CisgICAgICAgICArLS0tLTxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdE9iamVjdC5odG1sIj5Hc3RPYmplY3Q8L2E+CisgICAgICAgICAgICAgICArLS0tLTxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCI+R3N0RWxlbWVudDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICstLS0tR3N0TXVsdGlRdWV1ZQorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS0tZXh0cmEtc2l6ZS1idWZmZXJzIiB0aXRsZT0nVGhlICJleHRyYS1zaXplLWJ1ZmZlcnMiIHByb3BlcnR5Jz5leHRyYS1zaXplLWJ1ZmZlcnM8L2E+IiAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS1leHRyYS1zaXplLWJ5dGVzIiB0aXRsZT0nVGhlICJleHRyYS1zaXplLWJ5dGVzIiBwcm9wZXJ0eSc+ZXh0cmEtc2l6ZS1ieXRlczwvYT4iICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS0tZXh0cmEtc2l6ZS10aW1lIiB0aXRsZT0nVGhlICJleHRyYS1zaXplLXRpbWUiIHByb3BlcnR5Jz5leHRyYS1zaXplLXRpbWU8L2E+IiAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtLW1heC1zaXplLWJ1ZmZlcnMiIHRpdGxlPSdUaGUgIm1heC1zaXplLWJ1ZmZlcnMiIHByb3BlcnR5Jz5tYXgtc2l6ZS1idWZmZXJzPC9hPiIgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS1tYXgtc2l6ZS1ieXRlcyIgdGl0bGU9J1RoZSAibWF4LXNpemUtYnl0ZXMiIHByb3BlcnR5Jz5tYXgtc2l6ZS1ieXRlczwvYT4iICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS1tYXgtc2l6ZS10aW1lIiB0aXRsZT0nVGhlICJtYXgtc2l6ZS10aW1lIiBwcm9wZXJ0eSc+bWF4LXNpemUtdGltZTwvYT4iICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS1oaWdoLXBlcmNlbnQiIHRpdGxlPSdUaGUgImhpZ2gtcGVyY2VudCIgcHJvcGVydHknPmhpZ2gtcGVyY2VudDwvYT4iICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS0tbG93LXBlcmNlbnQiIHRpdGxlPSdUaGUgImxvdy1wZXJjZW50IiBwcm9wZXJ0eSc+bG93LXBlcmNlbnQ8L2E+IiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS11c2UtYnVmZmVyaW5nIiB0aXRsZT0nVGhlICJ1c2UtYnVmZmVyaW5nIiBwcm9wZXJ0eSc+dXNlLWJ1ZmZlcmluZzwvYT4iICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS0tc3luYy1ieS1ydW5uaW5nLXRpbWUiIHRpdGxlPSdUaGUgInN5bmMtYnktcnVubmluZy10aW1lIiBwcm9wZXJ0eSc+c3luYy1ieS1ydW5uaW5nLXRpbWU8L2E+IiAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLnNpZ25hbHMiPjwvYT48aDI+U2lnbmFsczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtb3ZlcnJ1biIgdGl0bGU9J1RoZSAib3ZlcnJ1biIgc2lnbmFsJz5vdmVycnVuPC9hPiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tRklSU1Q6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlJ1biBGaXJzdDwvY29kZT48L2E+CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtdW5kZXJydW4iIHRpdGxlPSdUaGUgInVuZGVycnVuIiBzaWduYWwnPnVuZGVycnVuPC9hPiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1GSVJTVDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+UnVuIEZpcnN0PC9jb2RlPjwvYT4KKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPgorPC9wPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iaWQ0MDQyMTIiPjwvYT48cD4KK011bHRpcXVldWUgaXMgc2ltaWxhciB0byBhIG5vcm1hbCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXVlPC9zcGFuPjwvYT4gd2l0aCB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwKK2ZlYXR1cmVzOgorPC9wPgorPGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCBjbGFzcz0ib3JkZXJlZGxpc3QiIHR5cGU9IjEiPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij4KKzxwIGNsYXNzPSJ0aXRsZSI+PGI+TXVsdGlwbGUgc3RyZWFtaGFuZGxpbmc8L2I+PC9wPgorPHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPgorPHA+CisgICAgVGhlIGVsZW1lbnQgaGFuZGxlcyBxdWV1ZWluZyBkYXRhIG9uIG1vcmUgdGhhbiBvbmUgc3RyZWFtIGF0IG9uY2UuIFRvCisgICAgYWNoaWV2ZSBzdWNoIGEgZmVhdHVyZSBpdCBoYXMgcmVxdWVzdCBzaW5rIHBhZHMgKHNpbmslZCkgYW5kCisgICAgJ3NvbWV0aW1lcycgc3JjIHBhZHMgKHNyYyVkKS4KKyAgPC9wPgorPHA+CisgICAgV2hlbiByZXF1ZXN0aW5nIGEgZ2l2ZW4gc2lua3BhZCB3aXRoIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtcmVxdWVzdC1wYWQiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkKCk8L2NvZGU+PC9hPiwKKyAgICB0aGUgYXNzb2NpYXRlZCBzcmNwYWQgZm9yIHRoYXQgc3RyZWFtIHdpbGwgYmUgY3JlYXRlZC4KKyAgICBFeGFtcGxlOiByZXF1ZXN0aW5nIHNpbmsxIHdpbGwgZ2VuZXJhdGUgc3JjMS4KKyAgPC9wPgorPC9saT48L3VsPgorPC9kaXY+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+Cis8cCBjbGFzcz0idGl0bGUiPjxiPk5vbi1zdGFydmF0aW9uIG9uIG11bHRpcGxlIHN0cmVhbXM8L2I+PC9wPgorPHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPgorPHA+CisgICAgSWYgbW9yZSB0aGFuIG9uZSBzdHJlYW0gaXMgdXNlZCB3aXRoIHRoZSBlbGVtZW50LCB0aGUgc3RyZWFtcycgcXVldWVzCisgICAgd2lsbCBiZSBkeW5hbWljYWxseSBncm93biAodXAgdG8gYSBsaW1pdCksIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IG5vCisgICAgc3RyZWFtIGlzIHJpc2tpbmcgZGF0YSBzdGFydmF0aW9uLiBUaGlzIGd1YXJhbnRlZXMgdGhhdCBhdCBhbnkgZ2l2ZW4KKyAgICB0aW1lIHRoZXJlIGFyZSBhdCBsZWFzdCBOIGJ5dGVzIHF1ZXVlZCBhbmQgYXZhaWxhYmxlIGZvciBlYWNoIGluZGl2aWR1YWwKKyAgICBzdHJlYW0uCisgIDwvcD4KKzxwPgorICAgIElmIGFuIEVPUyBldmVudCBjb21lcyB0aHJvdWdoIGEgc3JjcGFkLCB0aGUgYXNzb2NpYXRlZCBxdWV1ZSB3aWxsIGJlCisgICAgY29uc2lkZXJlZCBhcyAnbm90LWVtcHR5JyBpbiB0aGUgcXVldWUtc2l6ZS1ncm93aW5nIGFsZ29yaXRobS4KKyAgPC9wPgorPC9saT48L3VsPgorPC9kaXY+PC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+Cis8cCBjbGFzcz0idGl0bGUiPjxiPk5vbi1saW5rZWQgc3JjcGFkcyBncmFjZWZ1bCBoYW5kbGluZzwvYj48L3A+Cis8dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+Cis8cD4KKyAgICBJbiBvcmRlciB0byBiZXR0ZXIgc3VwcG9ydCBkeW5hbWljIHN3aXRjaGluZyBiZXR3ZWVuIHN0cmVhbXMsIHRoZSBtdWx0aXF1ZXVlCisgICAgKHVubGlrZSB0aGUgY3VycmVudCBHU3RyZWFtZXIgcXVldWUpIGNvbnRpbnVlcyB0byBwdXNoIGJ1ZmZlcnMgb24gbm9uLWxpbmtlZAorICAgIHBhZHMgcmF0aGVyIHRoYW4gc2h1dHRpbmcgZG93bi4KKyAgPC9wPgorPHA+CisgICAgSW4gYWRkaXRpb24sIHRvIHByZXZlbnQgYSBub24tbGlua2VkIHN0cmVhbSBmcm9tIHZlcnkgcXVpY2tseSBjb25zdW1pbmcgYWxsCisgICAgYXZhaWxhYmxlIGJ1ZmZlcnMgYW5kIHRodXMgJ3JhY2luZyBhaGVhZCcgb2YgdGhlIG90aGVyIHN0cmVhbXMsIHRoZSBlbGVtZW50CisgICAgbXVzdCBlbnN1cmUgdGhhdCBidWZmZXJzIGFuZCBpbmxpbmVkIGV2ZW50cyBmb3IgYSBub24tbGlua2VkIHN0cmVhbSBhcmUgcHVzaGVkCisgICAgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhleSB3ZXJlIHJlY2VpdmVkLCByZWxhdGl2ZSB0byB0aGUgb3RoZXIgc3RyZWFtcworICAgIGNvbnRyb2xsZWQgYnkgdGhlIGVsZW1lbnQuIFRoaXMgbWVhbnMgdGhhdCBhIGJ1ZmZlciBjYW5ub3QgYmUgcHVzaGVkIHRvIGEKKyAgICBub24tbGlua2VkIHBhZCBhbnkgc29vbmVyIHRoYW4gYnVmZmVycyBpbiBhbnkgb3RoZXIgc3RyZWFtIHdoaWNoIHdlcmUgcmVjZWl2ZWQKKyAgICBiZWZvcmUgaXQuCisgIDwvcD4KKzwvbGk+PC91bD4KKzwvZGl2PjwvbGk+Cis8L29sPjwvZGl2PgorPHA+Cis8L3A+Cis8cD4KKyAgRGF0YSBpcyBxdWV1ZWQgdW50aWwgb25lIG9mIHRoZSBsaW1pdHMgc3BlY2lmaWVkIGJ5IHRoZQorICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtLW1heC1zaXplLWJ1ZmZlcnMiIHRpdGxlPSdUaGUgIm1heC1zaXplLWJ1ZmZlcnMiIHByb3BlcnR5Jz48c3BhbiBjbGFzcz0idHlwZSI+Im1heC1zaXplLWJ1ZmZlcnMiPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS0tbWF4LXNpemUtYnl0ZXMiIHRpdGxlPSdUaGUgIm1heC1zaXplLWJ5dGVzIiBwcm9wZXJ0eSc+PHNwYW4gY2xhc3M9InR5cGUiPiJtYXgtc2l6ZS1ieXRlcyI8L3NwYW4+PC9hPiBhbmQvb3IKKyAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS1tYXgtc2l6ZS10aW1lIiB0aXRsZT0nVGhlICJtYXgtc2l6ZS10aW1lIiBwcm9wZXJ0eSc+PHNwYW4gY2xhc3M9InR5cGUiPiJtYXgtc2l6ZS10aW1lIjwvc3Bhbj48L2E+IHByb3BlcnRpZXMgaGFzIGJlZW4gcmVhY2hlZC4gQW55IGF0dGVtcHQgdG8gcHVzaAorICBtb3JlIGJ1ZmZlcnMgaW50byB0aGUgcXVldWUgd2lsbCBibG9jayB0aGUgcHVzaGluZyB0aHJlYWQgdW50aWwgbW9yZSBzcGFjZQorICBiZWNvbWVzIGF2YWlsYWJsZS4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS1leHRyYS1zaXplLWJ1ZmZlcnMiIHRpdGxlPSdUaGUgImV4dHJhLXNpemUtYnVmZmVycyIgcHJvcGVydHknPjxzcGFuIGNsYXNzPSJ0eXBlIj4iZXh0cmEtc2l6ZS1idWZmZXJzIjwvc3Bhbj48L2E+LAorPC9wPgorPHA+CisgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS0tZXh0cmEtc2l6ZS1ieXRlcyIgdGl0bGU9J1RoZSAiZXh0cmEtc2l6ZS1ieXRlcyIgcHJvcGVydHknPjxzcGFuIGNsYXNzPSJ0eXBlIj4iZXh0cmEtc2l6ZS1ieXRlcyI8L3NwYW4+PC9hPiBhbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS1leHRyYS1zaXplLXRpbWUiIHRpdGxlPSdUaGUgImV4dHJhLXNpemUtdGltZSIgcHJvcGVydHknPjxzcGFuIGNsYXNzPSJ0eXBlIj4iZXh0cmEtc2l6ZS10aW1lIjwvc3Bhbj48L2E+IGFyZQorICBjdXJyZW50bHkgdW51c2VkLgorPC9wPgorPHA+CisgIFRoZSBkZWZhdWx0IHF1ZXVlIHNpemUgbGltaXRzIGFyZSA1IGJ1ZmZlcnMsIDEwTUIgb2YgZGF0YSwgb3IKKyAgdHdvIHNlY29uZCB3b3J0aCBvZiBkYXRhLCB3aGljaGV2ZXIgaXMgcmVhY2hlZCBmaXJzdC4gTm90ZSB0aGF0IHRoZSBudW1iZXIKKyAgb2YgYnVmZmVycyB3aWxsIGR5bmFtaWNhbGx5IGdyb3cgZGVwZW5kaW5nIG9uIHRoZSBmaWxsIGxldmVsIG9mIAorICBvdGhlciBxdWV1ZXMuCis8L3A+Cis8cD4KKyAgVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS11bmRlcnJ1biIgdGl0bGU9J1RoZSAidW5kZXJydW4iIHNpZ25hbCc+PHNwYW4gY2xhc3M9InR5cGUiPiJ1bmRlcnJ1biI8L3NwYW4+PC9hPiBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIGFsbCBvZiB0aGUgcXVldWVzCisgIGFyZSBlbXB0eS4gVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS1vdmVycnVuIiB0aXRsZT0nVGhlICJvdmVycnVuIiBzaWduYWwnPjxzcGFuIGNsYXNzPSJ0eXBlIj4ib3ZlcnJ1biI8L3NwYW4+PC9hPiBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIG9uZSBvZiB0aGUKKyAgcXVldWVzIGlzIGZpbGxlZC4KKyAgQm90aCBzaWduYWxzIGFyZSBlbWl0dGVkIGZyb20gdGhlIGNvbnRleHQgb2YgdGhlIHN0cmVhbWluZyB0aHJlYWQuCis8L3A+Cis8L2Rpdj4KKzxwPgorPC9wPgorPHA+CitMYXN0IHJldmlld2VkIG9uIDIwMDgtMDEtMjUgKDAuMTAuMTcpCis8L3A+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8aDI+U3lub3BzaXM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iaWQ0MDQzOTQiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+CisgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcGx1Z2luLWNvcmVlbGVtZW50cy5odG1sI3BsdWdpbi1jb3JlZWxlbWVudHMiPmNvcmVlbGVtZW50czwvYT4KKyAgICAgICAgICA8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgorPHRkPkVkd2FyZCBIZXJ2ZXkgJmx0O2Vkd2FyZEBmbHVlbmRvLmNvbSZndDs8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+R2VuZXJpYzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImlkNDA0NDU0Ij48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgorPHRkPnNpbmslZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2luazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5yZXF1ZXN0PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QU5ZPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c3JjJWQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgorPHRkPnNvdXJjZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zb21ldGltZXM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BTlk8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxwPgorPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RNdWx0aVF1ZXVlLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0TXVsdGlRdWV1ZTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdE11bHRpUXVldWU7PC9wcmU+Cis8cD4KK09wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNdWx0aVF1ZXVlPC9zcGFuPjwvYT4gc3RydWN0dXJlLgorPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdE11bHRpUXVldWUtLWV4dHJhLXNpemUtYnVmZmVycyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJleHRyYS1zaXplLWJ1ZmZlcnMiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiZXh0cmEtc2l6ZS1idWZmZXJzIiAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+QW1vdW50IG9mIGJ1ZmZlcnMgdGhlIHF1ZXVlcyBjYW4gZ3JvdyBpZiBvbmUgb2YgdGhlbSBpcyBlbXB0eSAoMD1kaXNhYmxlKSAoTk9UIElNUExFTUVOVEVEKS48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiA1PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RNdWx0aVF1ZXVlLS1leHRyYS1zaXplLWJ5dGVzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImV4dHJhLXNpemUtYnl0ZXMiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiZXh0cmEtc2l6ZS1ieXRlcyIgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+QW1vdW50IG9mIGRhdGEgdGhlIHF1ZXVlcyBjYW4gZ3JvdyBpZiBvbmUgb2YgdGhlbSBpcyBlbXB0eSAoYnl0ZXMsIDA9ZGlzYWJsZSkgKE5PVCBJTVBMRU1FTlRFRCkuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogMTA0ODU3NjA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdE11bHRpUXVldWUtLWV4dHJhLXNpemUtdGltZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJleHRyYS1zaXplLXRpbWUiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiZXh0cmEtc2l6ZS10aW1lIiAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5BbW91bnQgb2YgdGltZSB0aGUgcXVldWVzIGNhbiBncm93IGlmIG9uZSBvZiB0aGVtIGlzIGVtcHR5IChpbiBucywgMD1kaXNhYmxlKSAoTk9UIElNUExFTUVOVEVEKS48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiAzMDAwMDAwMDAwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RNdWx0aVF1ZXVlLS1tYXgtc2l6ZS1idWZmZXJzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Im1heC1zaXplLWJ1ZmZlcnMiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAibWF4LXNpemUtYnVmZmVycyIgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+TWF4LiBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgcXVldWUgKDA9ZGlzYWJsZSkuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogNTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0TXVsdGlRdWV1ZS0tbWF4LXNpemUtYnl0ZXMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4ibWF4LXNpemUtYnl0ZXMiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAibWF4LXNpemUtYnl0ZXMiICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+TWF4LiBhbW91bnQgb2YgZGF0YSBpbiB0aGUgcXVldWUgKGJ5dGVzLCAwPWRpc2FibGUpLjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IDEwNDg1NzYwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RNdWx0aVF1ZXVlLS1tYXgtc2l6ZS10aW1lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Im1heC1zaXplLXRpbWUiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAibWF4LXNpemUtdGltZSIgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5NYXguIGFtb3VudCBvZiBkYXRhIGluIHRoZSBxdWV1ZSAoaW4gbnMsIDA9ZGlzYWJsZSkuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogMjAwMDAwMDAwMDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0TXVsdGlRdWV1ZS0taGlnaC1wZXJjZW50Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImhpZ2gtcGVyY2VudCI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJoaWdoLXBlcmNlbnQiICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPgorSGlnaCB0aHJlc2hvbGQgcGVyY2VudCBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4KKzwvcD4KKzxwPkFsbG93ZWQgdmFsdWVzOiBbMCwxMDBdPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogOTk8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdE11bHRpUXVldWUtLWxvdy1wZXJjZW50Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Imxvdy1wZXJjZW50IjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgImxvdy1wZXJjZW50IiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+CitMb3cgdGhyZXNob2xkIHBlcmNlbnQgZm9yIGJ1ZmZlcmluZyB0byBzdGFydC4KKzwvcD4KKzxwPkFsbG93ZWQgdmFsdWVzOiBbMCwxMDBdPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogMTA8L3A+Cis8cCBjbGFzcz0ic2luY2UiPlNpbmNlIDAuMTAuMjY8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdE11bHRpUXVldWUtLXVzZS1idWZmZXJpbmciPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4idXNlLWJ1ZmZlcmluZyI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJ1c2UtYnVmZmVyaW5nIiAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD4KK0VuYWJsZSB0aGUgYnVmZmVyaW5nIG9wdGlvbiBpbiBtdWx0aXF1ZXVlIHNvIHRoYXQgQlVGRkVSSU5HIG1lc3NhZ2VzIGFyZQorZW1pdGVkIGJhc2VkIG9uIGxvdy0vaGlnaC1wZXJjZW50IHRocmVzaG9sZHMuCis8L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0TXVsdGlRdWV1ZS0tc3luYy1ieS1ydW5uaW5nLXRpbWUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4ic3luYy1ieS1ydW5uaW5nLXRpbWUiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAic3luYy1ieS1ydW5uaW5nLXRpbWUiICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+CitJZiBlbmFibGVkIG11bHRpcXVldWUgd2lsbCBzeW5jaHJvbml6ZSBkZWFjdGl2YXRlZCBvciBub3QtbGlua2VkIHN0cmVhbXMKK3RvIHRoZSBhY3RpdmF0ZWQgYW5kIGxpbmtlZCBzdHJlYW1zIGJ5IHRha2luZyB0aGUgcnVubmluZyB0aW1lLgorT3RoZXJ3aXNlIG11bHRpcXVldWUgd2lsbCBzeW5jaHJvbml6ZSB0aGUgZGVhY3RpdmF0ZWQgb3Igbm90LWxpbmtlZAorc3RyZWFtcyBieSBrZWVwaW5nIHRoZSBvcmRlciBpbiB3aGljaCBidWZmZXJzIGFuZCBldmVudHMgYXJyaXZlZCBjb21wYXJlZAordG8gYWN0aXZlIGFuZCBsaW5rZWQgc3RyZWFtcy4KKzwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjM1PC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuc2lnbmFsLWRldGFpbHMiPjwvYT48aDI+U2lnbmFsIERldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0TXVsdGlRdWV1ZS1vdmVycnVuIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Im92ZXJydW4iPC9jb2RlPiBzaWduYWw8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgdXNlcl9mdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TXVsdGlRdWV1ZTwvc3Bhbj48L2E+ICptdWx0aXF1ZXVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICAgIHVzZXJfZGF0YSkgICAgICAgOiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tRklSU1Q6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlJ1biBGaXJzdDwvY29kZT48L2E+PC9wcmU+Cis8cD4KK1JlcG9ydHMgdGhhdCBvbmUgb2YgdGhlIHF1ZXVlcyBpbiB0aGUgbXVsdGlxdWV1ZSBpcyBmdWxsIChvdmVycnVuKS4KK0EgcXVldWUgaXMgZnVsbCBpZiB0aGUgdG90YWwgYW1vdW50IG9mIGRhdGEgaW5zaWRlIGl0IChudW0tYnVmZmVycywgdGltZSwKK3NpemUpIGlzIGhpZ2hlciB0aGFuIHRoZSBib3VuZGFyeSB2YWx1ZXMgd2hpY2ggY2FuIGJlIHNldCB0aHJvdWdoIHRoZQorR09iamVjdCBwcm9wZXJ0aWVzLgorPC9wPgorPHA+CitUaGlzIGNhbiBiZSB1c2VkIGFzIGFuIGluZGljYXRvciBvZiBwcmUtcm9sbC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tdWx0aXF1ZXVlPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBtdWx0aXF1ZXVlIGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdE11bHRpUXVldWUtdW5kZXJydW4iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4idW5kZXJydW4iPC9jb2RlPiBzaWduYWw8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgdXNlcl9mdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TXVsdGlRdWV1ZTwvc3Bhbj48L2E+ICptdWx0aXF1ZXVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICAgIHVzZXJfZGF0YSkgICAgICAgOiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tRklSU1Q6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlJ1biBGaXJzdDwvY29kZT48L2E+PC9wcmU+Cis8cD4KK1RoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgZnJvbSB0aGUgc3RyZWFtaW5nIHRocmVhZCB3aGVuIHRoZXJlIGlzCitubyBkYXRhIGluIGFueSBvZiB0aGUgcXVldWVzIGluc2lkZSB0aGUgbXVsdGlxdWV1ZSBpbnN0YW5jZSAodW5kZXJydW4pLgorPC9wPgorPHA+CitUaGlzIGluZGljYXRlcyBlaXRoZXIgc3RhcnZhdGlvbiBvciBFT1MgZnJvbSB0aGUgdXBzdHJlYW0gZGF0YSBzb3VyY2VzLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm11bHRpcXVldWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIG11bHRxdWV1ZSBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWV1ZTwvc3Bhbj48L2E+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc1MGE2OAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5odG1sCkBAIC0wLDAgKzEsMTg0IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+b3V0cHV0LXNlbGVjdG9yPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDAuMTEgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdHJlYW1lciBFbGVtZW50cyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCIgdGl0bGU9Im11bHRpcXVldWUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sIiB0aXRsZT0icXVldWUiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIENvcmUgUGx1Z2lucyAwLjExIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IudG9wX29mX3BhZ2UiPjwvYT5vdXRwdXQtc2VsZWN0b3I8L3NwYW4+PC9oMj4KKzxwPm91dHB1dC1zZWxlY3RvciDigJQgMS10by1OIG91dHB1dCBzdHJlYW0gc2VsZWN0b3I8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3Iuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPGEgbmFtZT0iR3N0T3V0cHV0U2VsZWN0b3IiPjwvYT48cHJlIGNsYXNzPSJzeW5vcHNpcyI+c3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLmh0bWwjR3N0T3V0cHV0U2VsZWN0b3Itc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdE91dHB1dFNlbGVjdG9yIj5Hc3RPdXRwdXRTZWxlY3RvcjwvYT47Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij5HT2JqZWN0PC9hPgorICAgKy0tLS08YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgorICAgICAgICAgKy0tLS08YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCI+R3N0T2JqZWN0PC9hPgorICAgICAgICAgICAgICAgKy0tLS08YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwiPkdzdEVsZW1lbnQ8L2E+CisgICAgICAgICAgICAgICAgICAgICArLS0tLUdzdE91dHB1dFNlbGVjdG9yCis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLmh0bWwjR3N0T3V0cHV0U2VsZWN0b3ItLWFjdGl2ZS1wYWQiIHRpdGxlPSdUaGUgImFjdGl2ZS1wYWQiIHByb3BlcnR5Jz5hY3RpdmUtcGFkPC9hPiIgICAgICAgICAgICAgICA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+KiAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLmh0bWwjR3N0T3V0cHV0U2VsZWN0b3ItLXJlc2VuZC1sYXRlc3QiIHRpdGxlPSdUaGUgInJlc2VuZC1sYXRlc3QiIHByb3BlcnR5Jz5yZXNlbmQtbGF0ZXN0PC9hPiIgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5odG1sI0dzdE91dHB1dFNlbGVjdG9yLS1wYWQtbmVnb3RpYXRpb24tbW9kZSIgdGl0bGU9J1RoZSAicGFkLW5lZ290aWF0aW9uLW1vZGUiIHByb3BlcnR5Jz5wYWQtbmVnb3RpYXRpb24tbW9kZTwvYT4iICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0T3V0cHV0U2VsZWN0b3JQYWROZWdvdGlhdGlvbk1vZGU8L3NwYW4+ICA6IFJlYWQgLyBXcml0ZQorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK0RpcmVjdCBpbnB1dCBzdHJlYW0gdG8gb25lIG91dCBvZiBOIG91dHB1dCBwYWRzLgorPC9wPgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGgyPlN5bm9wc2lzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImlkMzg3NzYxIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgorPHRkPgorICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXBsdWdpbi1jb3JlZWxlbWVudHMuaHRtbCNwbHVnaW4tY29yZWVsZW1lbnRzIj5jb3JlZWxlbWVudHM8L2E+CisgICAgICAgICAgPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5TdGVmYW4gS29zdCAmbHQ7c3RlZmFuLmtvc3RAbm9raWEuY29tJmd0OzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5HZW5lcmljPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iaWQzOTg1MjAiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2luazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2luazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hbHdheXM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BTlk8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zcmMlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c291cmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgorPHRkPnJlcXVlc3Q8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BTlk8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxwPgorPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdE91dHB1dFNlbGVjdG9yLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0T3V0cHV0U2VsZWN0b3I8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RPdXRwdXRTZWxlY3Rvcjs8L3ByZT4KKzxwPgorPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0T3V0cHV0U2VsZWN0b3ItLWFjdGl2ZS1wYWQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4iYWN0aXZlLXBhZCI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJhY3RpdmUtcGFkIiAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFBhZC5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4qICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPkN1cnJlbnRseSBhY3RpdmUgc3JjIHBhZC48L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdE91dHB1dFNlbGVjdG9yLS1yZXNlbmQtbGF0ZXN0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+InJlc2VuZC1sYXRlc3QiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAicmVzZW5kLWxhdGVzdCIgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+UmVzZW5kIGxhdGVzdCBidWZmZXIgYWZ0ZXIgYSBzd2l0Y2ggdG8gYSBuZXcgcGFkLjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RPdXRwdXRTZWxlY3Rvci0tcGFkLW5lZ290aWF0aW9uLW1vZGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4icGFkLW5lZ290aWF0aW9uLW1vZGUiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAicGFkLW5lZ290aWF0aW9uLW1vZGUiICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0T3V0cHV0U2VsZWN0b3JQYWROZWdvdGlhdGlvbk1vZGU8L3NwYW4+ICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+VGhlIG1vZGUgdG8gYmUgdXNlZCBmb3IgcGFkIG5lZ290aWF0aW9uLjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IEFsbDwvcD4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3Iuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5odG1sI0dzdE91dHB1dFNlbGVjdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0T3V0cHV0U2VsZWN0b3I8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwjR3N0SW5wdXRTZWxlY3RvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdElucHV0U2VsZWN0b3I8L3NwYW4+PC9hPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWVsZW1lbnRzLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWVsZW1lbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAyNjcxZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLXBsdWdpbi1jb3JlZWxlbWVudHMuaHRtbApAQCAtMCwwICsxLDE0MCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPmNvcmVlbGVtZW50czwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAwLjExIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJjaDAyLmh0bWwiIHRpdGxlPSJnc3RyZWFtZXIgUGx1Z2lucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdHJlYW1lciBQbHVnaW5zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcGx1Z2luLWNvcmVpbmRleGVycy5odG1sIiB0aXRsZT0iY29yZWluZGV4ZXJzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj48dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDAuMTEgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXBsdWdpbi1jb3JlaW5kZXhlcnMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWVsZW1lbnRzIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+Y29yZWVsZW1lbnRzPC9zcGFuPjwvaDI+Cis8cD5jb3JlZWxlbWVudHMg4oCUIDxhIG5hbWU9InBsdWdpbi1jb3JlZWxlbWVudHMiPjwvYT5zdGFuZGFyZCBHU3RyZWFtZXIgZWxlbWVudHM8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJpZDM1Nzg4MyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZmlsZW5hbWU8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bGliZ3N0Y29yZWVsZW1lbnRzLnNvPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnZlcnNpb248L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+MC4xMC4zNS4xPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnJ1bi10aW1lIGxpY2Vuc2U8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+TEdQTDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wYWNrYWdlPC9zcGFuPjwvcD48L3RkPgorPHRkPkdTdHJlYW1lciBnaXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+b3JpZ2luPC9zcGFuPjwvcD48L3RkPgorPHRkPlVua25vd24gcGFja2FnZSBvcmlnaW48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJpZDM4NzYzMSI+PC9hPjxoMj5FbGVtZW50czwvaDI+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5odG1sIiB0aXRsZT0iY2Fwc2ZpbHRlciI+Y2Fwc2ZpbHRlcjwvYT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UGFzcyBkYXRhIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBsaW1pdGluZyBmb3JtYXRzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sIiB0aXRsZT0iZmFrZXNpbmsiPmZha2VzaW5rPC9hPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5CbGFjayBob2xlIGZvciBkYXRhPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwiIHRpdGxlPSJmYWtlc3JjIj5mYWtlc3JjPC9hPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5QdXNoIGVtcHR5IChubyBkYXRhKSBidWZmZXJzIGFyb3VuZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rLmh0bWwiIHRpdGxlPSJmZHNpbmsiPmZkc2luazwvYT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+V3JpdGUgZGF0YSB0byBhIGZpbGUgZGVzY3JpcHRvcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuaHRtbCIgdGl0bGU9ImZkc3JjIj5mZHNyYzwvYT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UmVhZCBmcm9tIGEgZmlsZSBkZXNjcmlwdG9yPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5odG1sIiB0aXRsZT0iZmlsZXNpbmsiPmZpbGVzaW5rPC9hPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5Xcml0ZSBzdHJlYW0gdG8gYSBmaWxlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmh0bWwiIHRpdGxlPSJmaWxlc3JjIj5maWxlc3JjPC9hPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5SZWFkIGZyb20gYXJiaXRyYXJ5IHBvaW50IGluIGEgZmlsZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZnVubmVsLmh0bWwiIHRpdGxlPSJmdW5uZWwiPmZ1bm5lbDwvYT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+Ti10by0xIHBpcGUgZml0dGluZzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCIgdGl0bGU9ImlkZW50aXR5Ij5pZGVudGl0eTwvYT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+UGFzcyBkYXRhIHdpdGhvdXQgbW9kaWZpY2F0aW9uPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5odG1sIiB0aXRsZT0iaW5wdXQtc2VsZWN0b3IiPmlucHV0LXNlbGVjdG9yPC9hPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5OLXRvLTEgaW5wdXQgc3RyZWFtIHNlbGVjdG9yPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwiIHRpdGxlPSJtdWx0aXF1ZXVlIj5tdWx0aXF1ZXVlPC9hPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5NdWx0aXBsZSBkYXRhIHF1ZXVlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IuaHRtbCIgdGl0bGU9Im91dHB1dC1zZWxlY3RvciI+b3V0cHV0LXNlbGVjdG9yPC9hPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4xLXRvLU4gb3V0cHV0IHN0cmVhbSBzZWxlY3RvcjwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCIgdGl0bGU9InF1ZXVlIj5xdWV1ZTwvYT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+U2ltcGxlIGRhdGEgcXVldWU8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sIiB0aXRsZT0icXVldWUyIj5xdWV1ZTI8L2E+PC9zcGFuPjwvcD48L3RkPgorPHRkPlNpbXBsZSBkYXRhIHF1ZXVlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCIgdGl0bGU9InRlZSI+dGVlPC9hPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4xLXRvLU4gcGlwZSBmaXR0aW5nPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5odG1sIiB0aXRsZT0idHlwZWZpbmQiPnR5cGVmaW5kPC9hPjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5GaW5kcyB0aGUgbWVkaWEgdHlwZSBvZiBhIHN0cmVhbTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUuaHRtbCIgdGl0bGU9InZhbHZlIj52YWx2ZTwvYT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+RHJvcHMgYnVmZmVycyBhbmQgZXZlbnRzIG9yIGxldHMgdGhlbSB0aHJvdWdoPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtcGx1Z2luLWNvcmVpbmRleGVycy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtcGx1Z2luLWNvcmVpbmRleGVycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyODIxOGEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWluZGV4ZXJzLmh0bWwKQEAgLTAsMCArMSw3MCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPmNvcmVpbmRleGVyczwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAwLjExIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJjaDAyLmh0bWwiIHRpdGxlPSJnc3RyZWFtZXIgUGx1Z2lucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXBsdWdpbi1jb3JlZWxlbWVudHMuaHRtbCIgdGl0bGU9ImNvcmVlbGVtZW50cyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXBsdWdpbi1jb3JlZWxlbWVudHMuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIENvcmUgUGx1Z2lucyAwLjExIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+wqA8L3RkPgorPC90cj48L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtcGx1Z2luLWNvcmVpbmRleGVycyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPmNvcmVpbmRleGVyczwvc3Bhbj48L2gyPgorPHA+Y29yZWluZGV4ZXJzIOKAlCA8YSBuYW1lPSJwbHVnaW4tY29yZWluZGV4ZXJzIj48L2E+R1N0cmVhbWVyIGNvcmUgaW5kZXhlcnM8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJpZDM4NTAyOCI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZmlsZW5hbWU8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+bGliZ3N0Y29yZWluZGV4ZXJzLnNvPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnZlcnNpb248L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+MC4xMC4zNS4xPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnJ1bi10aW1lIGxpY2Vuc2U8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+TEdQTDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wYWNrYWdlPC9zcGFuPjwvcD48L3RkPgorPHRkPkdTdHJlYW1lciBnaXQ8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+b3JpZ2luPC9zcGFuPjwvcD48L3RkPgorPHRkPlVua25vd24gcGFja2FnZSBvcmlnaW48L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJpZDM1Njk1OSI+PC9hPjxoMj5FbGVtZW50czwvaDI+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzMyZmRmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbApAQCAtMCwwICsxLDQyNiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPnF1ZXVlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDAuMTEgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdHJlYW1lciBFbGVtZW50cyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5odG1sIiB0aXRsZT0ib3V0cHV0LXNlbGVjdG9yIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwiIHRpdGxlPSJxdWV1ZTIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgorPHRoIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj5HU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDAuMTEgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aD4KKzx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5zaWduYWxzIiBjbGFzcz0ic2hvcnRjdXQiPlNpZ25hbHM8L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS50b3Bfb2ZfcGFnZSI+PC9hPnF1ZXVlPC9zcGFuPjwvaDI+Cis8cD5xdWV1ZSDigJQgU2ltcGxlIGRhdGEgcXVldWU8L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8YSBuYW1lPSJHc3RRdWV1ZSI+PC9hPjxwcmUgY2xhc3M9InN5bm9wc2lzIj5zdHJ1Y3QgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RRdWV1ZSI+R3N0UXVldWU8L2E+OworZW51bSAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZUxlYWt5IiB0aXRsZT0iZW51bSBHc3RRdWV1ZUxlYWt5Ij5Hc3RRdWV1ZUxlYWt5PC9hPjsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+R09iamVjdDwvYT4KKyAgICstLS0tPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KKyAgICAgICAgICstLS0tPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwiPkdzdE9iamVjdDwvYT4KKyAgICAgICAgICAgICAgICstLS0tPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sIj5Hc3RFbGVtZW50PC9hPgorICAgICAgICAgICAgICAgICAgICAgKy0tLS1Hc3RRdWV1ZQorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS0tY3VycmVudC1sZXZlbC1idWZmZXJzIiB0aXRsZT0nVGhlICJjdXJyZW50LWxldmVsLWJ1ZmZlcnMiIHByb3BlcnR5Jz5jdXJyZW50LWxldmVsLWJ1ZmZlcnM8L2E+IiAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICA6IFJlYWQKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLS1jdXJyZW50LWxldmVsLWJ5dGVzIiB0aXRsZT0nVGhlICJjdXJyZW50LWxldmVsLWJ5dGVzIiBwcm9wZXJ0eSc+Y3VycmVudC1sZXZlbC1ieXRlczwvYT4iICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICAgOiBSZWFkCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS0tY3VycmVudC1sZXZlbC10aW1lIiB0aXRsZT0nVGhlICJjdXJyZW50LWxldmVsLXRpbWUiIHByb3BlcnR5Jz5jdXJyZW50LWxldmVsLXRpbWU8L2E+IiAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDogUmVhZAorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtLWxlYWt5IiB0aXRsZT0nVGhlICJsZWFreSIgcHJvcGVydHknPmxlYWt5PC9hPiIgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlTGVha3kiIHRpdGxlPSJlbnVtIEdzdFF1ZXVlTGVha3kiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWV1ZUxlYWt5PC9zcGFuPjwvYT4gICAgICAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtLW1heC1zaXplLWJ1ZmZlcnMiIHRpdGxlPSdUaGUgIm1heC1zaXplLWJ1ZmZlcnMiIHByb3BlcnR5Jz5tYXgtc2l6ZS1idWZmZXJzPC9hPiIgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtLW1heC1zaXplLWJ5dGVzIiB0aXRsZT0nVGhlICJtYXgtc2l6ZS1ieXRlcyIgcHJvcGVydHknPm1heC1zaXplLWJ5dGVzPC9hPiIgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS0tbWF4LXNpemUtdGltZSIgdGl0bGU9J1RoZSAibWF4LXNpemUtdGltZSIgcHJvcGVydHknPm1heC1zaXplLXRpbWU8L2E+IiAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLS1taW4tdGhyZXNob2xkLWJ1ZmZlcnMiIHRpdGxlPSdUaGUgIm1pbi10aHJlc2hvbGQtYnVmZmVycyIgcHJvcGVydHknPm1pbi10aHJlc2hvbGQtYnVmZmVyczwvYT4iICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS0tbWluLXRocmVzaG9sZC1ieXRlcyIgdGl0bGU9J1RoZSAibWluLXRocmVzaG9sZC1ieXRlcyIgcHJvcGVydHknPm1pbi10aHJlc2hvbGQtYnl0ZXM8L2E+IiAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS0tbWluLXRocmVzaG9sZC10aW1lIiB0aXRsZT0nVGhlICJtaW4tdGhyZXNob2xkLXRpbWUiIHByb3BlcnR5Jz5taW4tdGhyZXNob2xkLXRpbWU8L2E+IiAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS0tc2lsZW50IiB0aXRsZT0nVGhlICJzaWxlbnQiIHByb3BlcnR5Jz5zaWxlbnQ8L2E+IiAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLnNpZ25hbHMiPjwvYT48aDI+U2lnbmFsczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS1vdmVycnVuIiB0aXRsZT0nVGhlICJvdmVycnVuIiBzaWduYWwnPm92ZXJydW48L2E+IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1GSVJTVDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+UnVuIEZpcnN0PC9jb2RlPjwvYT4KKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLXJ1bm5pbmciIHRpdGxlPSdUaGUgInJ1bm5pbmciIHNpZ25hbCc+cnVubmluZzwvYT4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUZJUlNUOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5SdW4gRmlyc3Q8L2NvZGU+PC9hPgorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtdW5kZXJydW4iIHRpdGxlPSdUaGUgInVuZGVycnVuIiBzaWduYWwnPnVuZGVycnVuPC9hPiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1GSVJTVDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+UnVuIEZpcnN0PC9jb2RlPjwvYT4KKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLXB1c2hpbmciIHRpdGxlPSdUaGUgInB1c2hpbmciIHNpZ25hbCc+cHVzaGluZzwvYT4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUZJUlNUOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5SdW4gRmlyc3Q8L2NvZGU+PC9hPgorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPgorRGF0YSBpcyBxdWV1ZWQgdW50aWwgb25lIG9mIHRoZSBsaW1pdHMgc3BlY2lmaWVkIGJ5IHRoZQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtLW1heC1zaXplLWJ1ZmZlcnMiIHRpdGxlPSdUaGUgIm1heC1zaXplLWJ1ZmZlcnMiIHByb3BlcnR5Jz48c3BhbiBjbGFzcz0idHlwZSI+Im1heC1zaXplLWJ1ZmZlcnMiPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLS1tYXgtc2l6ZS1ieXRlcyIgdGl0bGU9J1RoZSAibWF4LXNpemUtYnl0ZXMiIHByb3BlcnR5Jz48c3BhbiBjbGFzcz0idHlwZSI+Im1heC1zaXplLWJ5dGVzIjwvc3Bhbj48L2E+IGFuZC9vcgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtLW1heC1zaXplLXRpbWUiIHRpdGxlPSdUaGUgIm1heC1zaXplLXRpbWUiIHByb3BlcnR5Jz48c3BhbiBjbGFzcz0idHlwZSI+Im1heC1zaXplLXRpbWUiPC9zcGFuPjwvYT4gcHJvcGVydGllcyBoYXMgYmVlbiByZWFjaGVkLiBBbnkgYXR0ZW1wdCB0byBwdXNoCittb3JlIGJ1ZmZlcnMgaW50byB0aGUgcXVldWUgd2lsbCBibG9jayB0aGUgcHVzaGluZyB0aHJlYWQgdW50aWwgbW9yZSBzcGFjZQorYmVjb21lcyBhdmFpbGFibGUuCis8L3A+Cis8cD4KK1RoZSBxdWV1ZSB3aWxsIGNyZWF0ZSBhIG5ldyB0aHJlYWQgb24gdGhlIHNvdXJjZSBwYWQgdG8gZGVjb3VwbGUgdGhlCitwcm9jZXNzaW5nIG9uIHNpbmsgYW5kIHNvdXJjZSBwYWQuCis8L3A+Cis8cD4KK1lvdSBjYW4gcXVlcnkgaG93IG1hbnkgYnVmZmVycyBhcmUgcXVldWVkIGJ5IHJlYWRpbmcgdGhlCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS0tY3VycmVudC1sZXZlbC1idWZmZXJzIiB0aXRsZT0nVGhlICJjdXJyZW50LWxldmVsLWJ1ZmZlcnMiIHByb3BlcnR5Jz48c3BhbiBjbGFzcz0idHlwZSI+ImN1cnJlbnQtbGV2ZWwtYnVmZmVycyI8L3NwYW4+PC9hPiBwcm9wZXJ0eS4gWW91IGNhbiB0cmFjayBjaGFuZ2VzCitieSBjb25uZWN0aW5nIHRvIHRoZSBub3RpZnk6OmN1cnJlbnQtbGV2ZWwtYnVmZmVycyBzaWduYWwgKHdoaWNoCitsaWtlIGFsbCBzaWduYWxzIHdpbGwgYmUgZW1pdHRlZCBmcm9tIHRoZSBzdHJlYW1pbmcgdGhyZWFkKS4gVGhlIHNhbWUKK2FwcGxpZXMgdG8gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLS1jdXJyZW50LWxldmVsLXRpbWUiIHRpdGxlPSdUaGUgImN1cnJlbnQtbGV2ZWwtdGltZSIgcHJvcGVydHknPjxzcGFuIGNsYXNzPSJ0eXBlIj4iY3VycmVudC1sZXZlbC10aW1lIjwvc3Bhbj48L2E+IGFuZAorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtLWN1cnJlbnQtbGV2ZWwtYnl0ZXMiIHRpdGxlPSdUaGUgImN1cnJlbnQtbGV2ZWwtYnl0ZXMiIHByb3BlcnR5Jz48c3BhbiBjbGFzcz0idHlwZSI+ImN1cnJlbnQtbGV2ZWwtYnl0ZXMiPC9zcGFuPjwvYT4gcHJvcGVydGllcy4KKzwvcD4KKzxwPgorVGhlIGRlZmF1bHQgcXVldWUgc2l6ZSBsaW1pdHMgYXJlIDIwMCBidWZmZXJzLCAxME1CIG9mIGRhdGEsIG9yCitvbmUgc2Vjb25kIHdvcnRoIG9mIGRhdGEsIHdoaWNoZXZlciBpcyByZWFjaGVkIGZpcnN0LgorPC9wPgorPHA+CitBcyBzYWlkIGVhcmxpZXIsIHRoZSBxdWV1ZSBibG9ja3MgYnkgZGVmYXVsdCB3aGVuIG9uZSBvZiB0aGUgc3BlY2lmaWVkCittYXhpbXVtcyAoYnl0ZXMsIHRpbWUsIGJ1ZmZlcnMpIGhhcyBiZWVuIHJlYWNoZWQuIFlvdSBjYW4gc2V0IHRoZQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtLWxlYWt5IiB0aXRsZT0nVGhlICJsZWFreSIgcHJvcGVydHknPjxzcGFuIGNsYXNzPSJ0eXBlIj4ibGVha3kiPC9zcGFuPjwvYT4gcHJvcGVydHkgdG8gc3BlY2lmeSB0aGF0IGluc3RlYWQgb2YgYmxvY2tpbmcgaXQgc2hvdWxkCitsZWFrIChkcm9wKSBuZXcgb3Igb2xkIGJ1ZmZlcnMuCis8L3A+Cis8cD4KK1RoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS11bmRlcnJ1biIgdGl0bGU9J1RoZSAidW5kZXJydW4iIHNpZ25hbCc+PHNwYW4gY2xhc3M9InR5cGUiPiJ1bmRlcnJ1biI8L3NwYW4+PC9hPiBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIHRoZSBxdWV1ZSBoYXMgbGVzcyBkYXRhIHRoYW4KK3RoZSBzcGVjaWZpZWQgbWluaW11bSB0aHJlc2hvbGRzIHJlcXVpcmUgKGJ5IGRlZmF1bHQ6IHdoZW4gdGhlIHF1ZXVlIGlzCitlbXB0eSkuIFRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS1vdmVycnVuIiB0aXRsZT0nVGhlICJvdmVycnVuIiBzaWduYWwnPjxzcGFuIGNsYXNzPSJ0eXBlIj4ib3ZlcnJ1biI8L3NwYW4+PC9hPiBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIHRoZSBxdWV1ZSBpcyBmaWxsZWQKK3VwLiBCb3RoIHNpZ25hbHMgYXJlIGVtaXR0ZWQgZnJvbSB0aGUgY29udGV4dCBvZiB0aGUgc3RyZWFtaW5nIHRocmVhZC4KKzwvcD4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxoMj5TeW5vcHNpczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJpZDQwNTU2NCI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKyAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWVsZW1lbnRzLmh0bWwjcGx1Z2luLWNvcmVlbGVtZW50cyI+Y29yZWVsZW1lbnRzPC9hPgorICAgICAgICAgIDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+RXJpayBXYWx0aGluc2VuICZsdDtvbWVnYUBjc2Uub2dpLmVkdSZndDs8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+R2VuZXJpYzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9ImlkNDA1NjI2Ij48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgorPHRkPnNpbms8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgorPHRkPnNpbms8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YWx3YXlzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QU5ZPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c3JjPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zb3VyY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+YWx3YXlzPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+QU5ZPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8cD4KKzwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFF1ZXVlLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UXVldWU8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RRdWV1ZTs8L3ByZT4KKzxwPgorT3BhcXVlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVldWU8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUuCis8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFF1ZXVlTGVha3kiPjwvYT48aDM+ZW51bSBHc3RRdWV1ZUxlYWt5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5lbnVtIEdzdFF1ZXVlTGVha3kgeworICBHU1RfUVVFVUVfTk9fTEVBSyAgICAgICAgICAgICA9IDAsCisgIEdTVF9RVUVVRV9MRUFLX1VQU1RSRUFNICAgICAgID0gMSwKKyAgR1NUX1FVRVVFX0xFQUtfRE9XTlNUUkVBTSAgICAgPSAyCit9OworPC9wcmU+Cis8cD4KK0J1ZmZlciBkcm9wcGluZyBzY2hlbWUgdG8gYXZvaWQgdGhlIHF1ZXVlIHRvIGJsb2NrIHdoZW4gZnVsbC4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVFVRVVFLU5PLUxFQUs6Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1FVRVVFX05PX0xFQUs8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPk5vdCBMZWFreQorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVFVRVVFLUxFQUstVVBTVFJFQU06Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1FVRVVFX0xFQUtfVVBTVFJFQU08L2NvZGU+PC9zcGFuPjwvcD48L3RkPgorPHRkPkxlYWt5IG9uIHVwc3RyZWFtIChuZXcgYnVmZmVycykKKzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxhIG5hbWU9IkdTVC1RVUVVRS1MRUFLLURPV05TVFJFQU06Q0FQUyI+PC9hPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1FVRVVFX0xFQUtfRE9XTlNUUkVBTTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+TGVha3kgb24gZG93bnN0cmVhbSAob2xkIGJ1ZmZlcnMpCis8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RRdWV1ZS0tY3VycmVudC1sZXZlbC1idWZmZXJzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImN1cnJlbnQtbGV2ZWwtYnVmZmVycyI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJjdXJyZW50LWxldmVsLWJ1ZmZlcnMiICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgIDogUmVhZDwvcHJlPgorPHA+Q3VycmVudCBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgcXVldWUuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UXVldWUtLWN1cnJlbnQtbGV2ZWwtYnl0ZXMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4iY3VycmVudC1sZXZlbC1ieXRlcyI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJjdXJyZW50LWxldmVsLWJ5dGVzIiAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgIDogUmVhZDwvcHJlPgorPHA+Q3VycmVudCBhbW91bnQgb2YgZGF0YSBpbiB0aGUgcXVldWUgKGJ5dGVzKS48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RRdWV1ZS0tY3VycmVudC1sZXZlbC10aW1lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImN1cnJlbnQtbGV2ZWwtdGltZSI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJjdXJyZW50LWxldmVsLXRpbWUiICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgOiBSZWFkPC9wcmU+Cis8cD5DdXJyZW50IGFtb3VudCBvZiBkYXRhIGluIHRoZSBxdWV1ZSAoaW4gbnMpLjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFF1ZXVlLS1sZWFreSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJsZWFreSI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJsZWFreSIgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlTGVha3kiIHRpdGxlPSJlbnVtIEdzdFF1ZXVlTGVha3kiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWV1ZUxlYWt5PC9zcGFuPjwvYT4gICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+V2hlcmUgdGhlIHF1ZXVlIGxlYWtzLCBpZiBhdCBhbGwuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogTm90IExlYWt5PC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RRdWV1ZS0tbWF4LXNpemUtYnVmZmVycyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJtYXgtc2l6ZS1idWZmZXJzIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgIm1heC1zaXplLWJ1ZmZlcnMiICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPk1heC4gbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdGhlIHF1ZXVlICgwPWRpc2FibGUpLjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IDIwMDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UXVldWUtLW1heC1zaXplLWJ5dGVzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Im1heC1zaXplLWJ5dGVzIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgIm1heC1zaXplLWJ5dGVzIiAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPk1heC4gYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIChieXRlcywgMD1kaXNhYmxlKS48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiAxMDQ4NTc2MDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UXVldWUtLW1heC1zaXplLXRpbWUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4ibWF4LXNpemUtdGltZSI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJtYXgtc2l6ZS10aW1lIiAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPk1heC4gYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIChpbiBucywgMD1kaXNhYmxlKS48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiAxMDAwMDAwMDAwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RRdWV1ZS0tbWluLXRocmVzaG9sZC1idWZmZXJzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Im1pbi10aHJlc2hvbGQtYnVmZmVycyI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJtaW4tdGhyZXNob2xkLWJ1ZmZlcnMiICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5NaW4uIG51bWJlciBvZiBidWZmZXJzIGluIHRoZSBxdWV1ZSB0byBhbGxvdyByZWFkaW5nICgwPWRpc2FibGUpLjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFF1ZXVlLS1taW4tdGhyZXNob2xkLWJ5dGVzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Im1pbi10aHJlc2hvbGQtYnl0ZXMiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAibWluLXRocmVzaG9sZC1ieXRlcyIgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+TWluLiBhbW91bnQgb2YgZGF0YSBpbiB0aGUgcXVldWUgdG8gYWxsb3cgcmVhZGluZyAoYnl0ZXMsIDA9ZGlzYWJsZSkuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UXVldWUtLW1pbi10aHJlc2hvbGQtdGltZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJtaW4tdGhyZXNob2xkLXRpbWUiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAibWluLXRocmVzaG9sZC10aW1lIiAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5NaW4uIGFtb3VudCBvZiBkYXRhIGluIHRoZSBxdWV1ZSB0byBhbGxvdyByZWFkaW5nIChpbiBucywgMD1kaXNhYmxlKS48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RRdWV1ZS0tc2lsZW50Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+InNpbGVudCI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJzaWxlbnQiICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD4KK0Rvbid0IGVtaXQgcXVldWUgc2lnbmFscy4gTWFrZXMgcXVldWVzIG1vcmUgbGlnaHR3ZWlnaHQgaWYgbm8gc2lnbmFscyBhcmUKK25lZWRlZC4KKzwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMxPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLnNpZ25hbC1kZXRhaWxzIj48L2E+PGgyPlNpZ25hbCBEZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFF1ZXVlLW92ZXJydW4iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4ib3ZlcnJ1biI8L2NvZGU+IHNpZ25hbDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICB1c2VyX2Z1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICB1c2VyX2RhdGEpICAgICAgOiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tRklSU1Q6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlJ1biBGaXJzdDwvY29kZT48L2E+PC9wcmU+Cis8cD4KK1JlcG9ydHMgdGhhdCB0aGUgYnVmZmVyIGJlY2FtZSBmdWxsIChvdmVycnVuKS4KK0EgYnVmZmVyIGlzIGZ1bGwgaWYgdGhlIHRvdGFsIGFtb3VudCBvZiBkYXRhIGluc2lkZSBpdCAobnVtLWJ1ZmZlcnMsIHRpbWUsCitzaXplKSBpcyBoaWdoZXIgdGhhbiB0aGUgYm91bmRhcnkgdmFsdWVzIHdoaWNoIGNhbiBiZSBzZXQgdGhyb3VnaCB0aGUKK0dPYmplY3QgcHJvcGVydGllcy4KKzwvcD4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWV1ZTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD50aGUgcXVldWUgaW5zdGFuY2U8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPsKgOjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UXVldWUtcnVubmluZyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJydW5uaW5nIjwvY29kZT4gc2lnbmFsPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIHVzZXJfZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVldWU8L3NwYW4+PC9hPiAqcXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gIHVzZXJfZGF0YSkgICAgICA6IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1GSVJTVDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+UnVuIEZpcnN0PC9jb2RlPjwvYT48L3ByZT4KKzxwPgorUmVwb3J0cyB0aGF0IGVub3VnaCAobWluLXRocmVzaG9sZCkgZGF0YSBpcyBpbiB0aGUgcXVldWUuIFVzZSB0aGlzIHNpZ25hbAordG9nZXRoZXIgd2l0aCB0aGUgdW5kZXJydW4gc2lnbmFsIHRvIHBhdXNlIHRoZSBwaXBlbGluZSBvbiB1bmRlcnJ1biBhbmQKK3dhaXQgZm9yIHRoZSBxdWV1ZSB0byBmaWxsLXVwIGJlZm9yZSByZXN1bWUgcGxheWJhY2suCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVldWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHF1ZXVlIGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFF1ZXVlLXVuZGVycnVuIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+InVuZGVycnVuIjwvY29kZT4gc2lnbmFsPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+ICAgICAgICAgICAgICAgIHVzZXJfZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVldWU8L3NwYW4+PC9hPiAqcXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gIHVzZXJfZGF0YSkgICAgICA6IDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1GSVJTVDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+UnVuIEZpcnN0PC9jb2RlPjwvYT48L3ByZT4KKzxwPgorUmVwb3J0cyB0aGF0IHRoZSBidWZmZXIgYmVjYW1lIGVtcHR5ICh1bmRlcnJ1bikuCitBIGJ1ZmZlciBpcyBlbXB0eSBpZiB0aGUgdG90YWwgYW1vdW50IG9mIGRhdGEgaW5zaWRlIGl0IChudW0tYnVmZmVycywgdGltZSwKK3NpemUpIGlzIGxvd2VyIHRoYW4gdGhlIGJvdW5kYXJ5IHZhbHVlcyB3aGljaCBjYW4gYmUgc2V0IHRocm91Z2ggdGhlCitHT2JqZWN0IHByb3BlcnRpZXMuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVldWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHF1ZXVlIGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFF1ZXVlLXB1c2hpbmciPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4icHVzaGluZyI8L2NvZGU+IHNpZ25hbDwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPiAgICAgICAgICAgICAgICB1c2VyX2Z1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICB1c2VyX2RhdGEpICAgICAgOiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tRklSU1Q6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlJ1biBGaXJzdDwvY29kZT48L2E+PC9wcmU+Cis8cD4KK1JlcG9ydHMgd2hlbiB0aGUgcXVldWUgaGFzIGVub3VnaCBkYXRhIHRvIHN0YXJ0IHB1c2hpbmcgZGF0YSBhZ2FpbiBvbiB0aGUKK3NvdXJjZSBwYWQuCis8L3A+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVldWU8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHF1ZXVlIGluc3RhbmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWEzYWI0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwKQEAgLTAsMCArMSwzMDkgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT5xdWV1ZTI8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMC4xMSBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0cmVhbWVyIEVsZW1lbnRzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCIgdGl0bGU9InF1ZXVlIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwiIHRpdGxlPSJ0ZWUiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgorPHRyIHZhbGlnbj0ibWlkZGxlIj4KKzx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Cis8dGggd2lkdGg9IjEwMCUiIGFsaWduPSJjZW50ZXIiPkdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMC4xMSBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RoPgorPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMiI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi50b3Bfb2ZfcGFnZSI+PC9hPnF1ZXVlMjwvc3Bhbj48L2gyPgorPHA+cXVldWUyIOKAlCBTaW1wbGUgZGF0YSBxdWV1ZTwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8YSBuYW1lPSJHc3RRdWV1ZTIiPjwvYT48cHJlIGNsYXNzPSJzeW5vcHNpcyI+c3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwjR3N0UXVldWUyLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RRdWV1ZTIiPkdzdFF1ZXVlMjwvYT47Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0Ij5HT2JqZWN0PC9hPgorICAgKy0tLS08YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgorICAgICAgICAgKy0tLS08YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RPYmplY3QuaHRtbCI+R3N0T2JqZWN0PC9hPgorICAgICAgICAgICAgICAgKy0tLS08YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RFbGVtZW50Lmh0bWwiPkdzdEVsZW1lbnQ8L2E+CisgICAgICAgICAgICAgICAgICAgICArLS0tLUdzdFF1ZXVlMgorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tY3VycmVudC1sZXZlbC1idWZmZXJzIiB0aXRsZT0nVGhlICJjdXJyZW50LWxldmVsLWJ1ZmZlcnMiIHByb3BlcnR5Jz5jdXJyZW50LWxldmVsLWJ1ZmZlcnM8L2E+IiAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICA6IFJlYWQKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLWN1cnJlbnQtbGV2ZWwtYnl0ZXMiIHRpdGxlPSdUaGUgImN1cnJlbnQtbGV2ZWwtYnl0ZXMiIHByb3BlcnR5Jz5jdXJyZW50LWxldmVsLWJ5dGVzPC9hPiIgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICA6IFJlYWQKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLWN1cnJlbnQtbGV2ZWwtdGltZSIgdGl0bGU9J1RoZSAiY3VycmVudC1sZXZlbC10aW1lIiBwcm9wZXJ0eSc+Y3VycmVudC1sZXZlbC10aW1lPC9hPiIgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgICA6IFJlYWQKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLWhpZ2gtcGVyY2VudCIgdGl0bGU9J1RoZSAiaGlnaC1wZXJjZW50IiBwcm9wZXJ0eSc+aGlnaC1wZXJjZW50PC9hPiIgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tbG93LXBlcmNlbnQiIHRpdGxlPSdUaGUgImxvdy1wZXJjZW50IiBwcm9wZXJ0eSc+bG93LXBlcmNlbnQ8L2E+IiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tbWF4LXNpemUtYnVmZmVycyIgdGl0bGU9J1RoZSAibWF4LXNpemUtYnVmZmVycyIgcHJvcGVydHknPm1heC1zaXplLWJ1ZmZlcnM8L2E+IiAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwjR3N0UXVldWUyLS1tYXgtc2l6ZS1ieXRlcyIgdGl0bGU9J1RoZSAibWF4LXNpemUtYnl0ZXMiIHByb3BlcnR5Jz5tYXgtc2l6ZS1ieXRlczwvYT4iICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tbWF4LXNpemUtdGltZSIgdGl0bGU9J1RoZSAibWF4LXNpemUtdGltZSIgcHJvcGVydHknPm1heC1zaXplLXRpbWU8L2E+IiAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLXRlbXAtbG9jYXRpb24iIHRpdGxlPSdUaGUgInRlbXAtbG9jYXRpb24iIHByb3BlcnR5Jz50ZW1wLWxvY2F0aW9uPC9hPiIgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+KiAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tdGVtcC10ZW1wbGF0ZSIgdGl0bGU9J1RoZSAidGVtcC10ZW1wbGF0ZSIgcHJvcGVydHknPnRlbXAtdGVtcGxhdGU8L2E+IiAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4qICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwjR3N0UXVldWUyLS11c2UtYnVmZmVyaW5nIiB0aXRsZT0nVGhlICJ1c2UtYnVmZmVyaW5nIiBwcm9wZXJ0eSc+dXNlLWJ1ZmZlcmluZzwvYT4iICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLXVzZS1yYXRlLWVzdGltYXRlIiB0aXRsZT0nVGhlICJ1c2UtcmF0ZS1lc3RpbWF0ZSIgcHJvcGVydHknPnVzZS1yYXRlLWVzdGltYXRlPC9hPiIgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwjR3N0UXVldWUyLS10ZW1wLXJlbW92ZSIgdGl0bGU9J1RoZSAidGVtcC1yZW1vdmUiIHByb3BlcnR5Jz50ZW1wLXJlbW92ZTwvYT4iICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tcmluZy1idWZmZXItbWF4LXNpemUiIHRpdGxlPSdUaGUgInJpbmctYnVmZmVyLW1heC1zaXplIiBwcm9wZXJ0eSc+cmluZy1idWZmZXItbWF4LXNpemU8L2E+IiAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD4KK0RhdGEgaXMgcXVldWVkIHVudGlsIG9uZSBvZiB0aGUgbGltaXRzIHNwZWNpZmllZCBieSB0aGUKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLW1heC1zaXplLWJ1ZmZlcnMiIHRpdGxlPSdUaGUgIm1heC1zaXplLWJ1ZmZlcnMiIHByb3BlcnR5Jz48c3BhbiBjbGFzcz0idHlwZSI+Im1heC1zaXplLWJ1ZmZlcnMiPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLW1heC1zaXplLWJ5dGVzIiB0aXRsZT0nVGhlICJtYXgtc2l6ZS1ieXRlcyIgcHJvcGVydHknPjxzcGFuIGNsYXNzPSJ0eXBlIj4ibWF4LXNpemUtYnl0ZXMiPC9zcGFuPjwvYT4gYW5kL29yCis8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwjR3N0UXVldWUyLS1tYXgtc2l6ZS10aW1lIiB0aXRsZT0nVGhlICJtYXgtc2l6ZS10aW1lIiBwcm9wZXJ0eSc+PHNwYW4gY2xhc3M9InR5cGUiPiJtYXgtc2l6ZS10aW1lIjwvc3Bhbj48L2E+IHByb3BlcnRpZXMgaGFzIGJlZW4gcmVhY2hlZC4gQW55IGF0dGVtcHQgdG8gcHVzaAorbW9yZSBidWZmZXJzIGludG8gdGhlIHF1ZXVlIHdpbGwgYmxvY2sgdGhlIHB1c2hpbmcgdGhyZWFkIHVudGlsIG1vcmUgc3BhY2UKK2JlY29tZXMgYXZhaWxhYmxlLgorPC9wPgorPHA+CitUaGUgcXVldWUgd2lsbCBjcmVhdGUgYSBuZXcgdGhyZWFkIG9uIHRoZSBzb3VyY2UgcGFkIHRvIGRlY291cGxlIHRoZQorcHJvY2Vzc2luZyBvbiBzaW5rIGFuZCBzb3VyY2UgcGFkLgorPC9wPgorPHA+CitZb3UgY2FuIHF1ZXJ5IGhvdyBtYW55IGJ1ZmZlcnMgYXJlIHF1ZXVlZCBieSByZWFkaW5nIHRoZQorPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tY3VycmVudC1sZXZlbC1idWZmZXJzIiB0aXRsZT0nVGhlICJjdXJyZW50LWxldmVsLWJ1ZmZlcnMiIHByb3BlcnR5Jz48c3BhbiBjbGFzcz0idHlwZSI+ImN1cnJlbnQtbGV2ZWwtYnVmZmVycyI8L3NwYW4+PC9hPiBwcm9wZXJ0eS4KKzwvcD4KKzxwPgorVGhlIGRlZmF1bHQgcXVldWUgc2l6ZSBsaW1pdHMgYXJlIDEwMCBidWZmZXJzLCAyTUIgb2YgZGF0YSwgb3IKK3R3byBzZWNvbmRzIHdvcnRoIG9mIGRhdGEsIHdoaWNoZXZlciBpcyByZWFjaGVkIGZpcnN0LgorPC9wPgorPHA+CitJZiB5b3Ugc2V0IHRlbXAtdG1wbCB0byBhIHZhbHVlIHN1Y2ggYXMgL3RtcC9nc3RyZWFtZXItWFhYWFhYLCB0aGUgZWxlbWVudAord2lsbCBhbGxvY2F0ZSBhIHJhbmRvbSBmcmVlIGZpbGVuYW1lIGFuZCBidWZmZXIgZGF0YSBpbiB0aGUgZmlsZS4KK0J5IHVzaW5nIHRoaXMsIGl0IHdpbGwgYnVmZmVyIHRoZSBlbnRpcmUgc3RyZWFtIGRhdGEgb24gdGhlIGZpbGUgaW5kZXBlbmRlbnRseQorb2YgdGhlIHF1ZXVlIHNpemUgbGltaXRzLCB0aGV5IHdpbGwgb25seSBiZSB1c2VkIGZvciBidWZmZXJpbmcgc3RhdGlzdGljcy4KKzwvcD4KKzxwPgorU2luY2UgMC4xMC4yNCwgc2V0dGluZyB0aGUgdGVtcC1sb2NhdGlvbiBwcm9wZXJ0eSB3aXRoIGEgZmlsZW5hbWUgaXMgZGVwcmVjYXRlZAorYmVjYXVzZSBpdCdzIGltcG9zc2libGUgdG8gc2VjdXJlbHkgb3BlbiBhIHRlbXBvcmFyeSBmaWxlIGluIHRoaXMgd2F5LiBUaGUKK3Byb3BlcnR5IHdpbGwgc3RpbGwgYmUgdXNlZCB0byBub3RpZnkgdGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBhbGxvY2F0ZWQKK2ZpbGVuYW1lLCB0aG91Z2guCis8L3A+Cis8cD4KK0xhc3QgcmV2aWV3ZWQgb24gMjAwOS0wNy0xMCAoMC4xMC4yNCkKKzwvcD4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxoMj5TeW5vcHNpczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJpZDQwNzA1NCI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD4KKyAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWVsZW1lbnRzLmh0bWwjcGx1Z2luLWNvcmVlbGVtZW50cyI+Y29yZWVsZW1lbnRzPC9hPgorICAgICAgICAgIDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+RXJpayBXYWx0aGluc2VuICZsdDtvbWVnYUBjc2Uub2dpLmVkdSZndDssIFdpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgorPHRkPkdlbmVyaWM8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJpZDQwNzExNSI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zaW5rPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zaW5rPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgorPHRkPmFsd2F5czwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgorPHRkPkFOWTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgorPHRkPnNyYzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c291cmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgorPHRkPmFsd2F5czwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgorPHRkPkFOWTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPHA+Cis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UXVldWUyLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UXVldWUyPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UXVldWUyOzwvcHJlPgorPHA+Cis8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RRdWV1ZTItLWN1cnJlbnQtbGV2ZWwtYnVmZmVycyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJjdXJyZW50LWxldmVsLWJ1ZmZlcnMiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiY3VycmVudC1sZXZlbC1idWZmZXJzIiAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICA6IFJlYWQ8L3ByZT4KKzxwPkN1cnJlbnQgbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdGhlIHF1ZXVlLjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFF1ZXVlMi0tY3VycmVudC1sZXZlbC1ieXRlcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJjdXJyZW50LWxldmVsLWJ5dGVzIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgImN1cnJlbnQtbGV2ZWwtYnl0ZXMiICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICAgOiBSZWFkPC9wcmU+Cis8cD5DdXJyZW50IGFtb3VudCBvZiBkYXRhIGluIHRoZSBxdWV1ZSAoYnl0ZXMpLjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFF1ZXVlMi0tY3VycmVudC1sZXZlbC10aW1lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImN1cnJlbnQtbGV2ZWwtdGltZSI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJjdXJyZW50LWxldmVsLXRpbWUiICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgOiBSZWFkPC9wcmU+Cis8cD5DdXJyZW50IGFtb3VudCBvZiBkYXRhIGluIHRoZSBxdWV1ZSAoaW4gbnMpLjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFF1ZXVlMi0taGlnaC1wZXJjZW50Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImhpZ2gtcGVyY2VudCI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJoaWdoLXBlcmNlbnQiICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPkhpZ2ggdGhyZXNob2xkIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLiBPbmx5IHVzZWQgaWYgdXNlLWJ1ZmZlcmluZyBpcyBUcnVlLjwvcD4KKzxwPkFsbG93ZWQgdmFsdWVzOiBbMCwxMDBdPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogOTk8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFF1ZXVlMi0tbG93LXBlcmNlbnQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4ibG93LXBlcmNlbnQiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAibG93LXBlcmNlbnQiICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5Mb3cgdGhyZXNob2xkIGZvciBidWZmZXJpbmcgdG8gc3RhcnQuIE9ubHkgdXNlZCBpZiB1c2UtYnVmZmVyaW5nIGlzIFRydWUuPC9wPgorPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDEwMF08L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiAxMDwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UXVldWUyLS1tYXgtc2l6ZS1idWZmZXJzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Im1heC1zaXplLWJ1ZmZlcnMiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAibWF4LXNpemUtYnVmZmVycyIgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+TWF4LiBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgcXVldWUgKDA9ZGlzYWJsZSkuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogMTAwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RRdWV1ZTItLW1heC1zaXplLWJ5dGVzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Im1heC1zaXplLWJ5dGVzIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgIm1heC1zaXplLWJ5dGVzIiAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPk1heC4gYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIChieXRlcywgMD1kaXNhYmxlKS48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiAyMDk3MTUyPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RRdWV1ZTItLW1heC1zaXplLXRpbWUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4ibWF4LXNpemUtdGltZSI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJtYXgtc2l6ZS10aW1lIiAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPk1heC4gYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIChpbiBucywgMD1kaXNhYmxlKS48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiAyMDAwMDAwMDAwPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RRdWV1ZTItLXRlbXAtbG9jYXRpb24iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4idGVtcC1sb2NhdGlvbiI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJ0ZW1wLWxvY2F0aW9uIiAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4qICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5Mb2NhdGlvbiB0byBzdG9yZSB0ZW1wb3JhcnkgZmlsZXMgaW4gKERlcHJlY2F0ZWQ6IE9ubHkgcmVhZCB0aGlzIHByb3BlcnR5LCB1c2UgdGVtcC10ZW1wbGF0ZSB0byBjb25maWd1cmUgdGhlIG5hbWUgdGVtcGxhdGUpLjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFF1ZXVlMi0tdGVtcC10ZW1wbGF0ZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJ0ZW1wLXRlbXBsYXRlIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgInRlbXAtdGVtcGxhdGUiICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiogICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPkZpbGUgdGVtcGxhdGUgdG8gc3RvcmUgdGVtcG9yYXJ5IGZpbGVzIGluLCBzaG91bGQgY29udGFpbiBkaXJlY3RvcnkgYW5kIFhYWFhYWC4gKE5VTEwgPT0gZGlzYWJsZWQpLjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFF1ZXVlMi0tdXNlLWJ1ZmZlcmluZyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJ1c2UtYnVmZmVyaW5nIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgInVzZS1idWZmZXJpbmciICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPkVtaXQgR1NUX01FU1NBR0VfQlVGRkVSSU5HIGJhc2VkIG9uIGxvdy0vaGlnaC1wZXJjZW50IHRocmVzaG9sZHMuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFF1ZXVlMi0tdXNlLXJhdGUtZXN0aW1hdGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4idXNlLXJhdGUtZXN0aW1hdGUiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAidXNlLXJhdGUtZXN0aW1hdGUiICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+RXN0aW1hdGUgdGhlIGJpdHJhdGUgb2YgdGhlIHN0cmVhbSB0byBjYWxjdWxhdGUgdGltZSBsZXZlbC48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RRdWV1ZTItLXRlbXAtcmVtb3ZlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+InRlbXAtcmVtb3ZlIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgInRlbXAtcmVtb3ZlIiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPgorV2hlbiB0ZW1wLXRlbXBsYXRlIGlzIHNldCwgcmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZmlsZSB3aGVuIGdvaW5nIHRvIFJFQURZLgorPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KKzxwIGNsYXNzPSJzaW5jZSI+U2luY2UgMC4xMC4yNjwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0UXVldWUyLS1yaW5nLWJ1ZmZlci1tYXgtc2l6ZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJyaW5nLWJ1ZmZlci1tYXgtc2l6ZSI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJyaW5nLWJ1ZmZlci1tYXgtc2l6ZSIgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPgorVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgcmluZyBidWZmZXIgaW4gYnl0ZXMuIElmIHNldCB0byAwLCB0aGUgcmluZworYnVmZmVyIGlzIGRpc2FibGVkLiBEZWZhdWx0IDAuCis8L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMxPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdGVyIj4KKzxocj4KKyAgICAgICAgICBHZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4xODwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkxMTYwZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sCkBAIC0wLDAgKzEsMjY2IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cis8dGl0bGU+dGVlPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDAuMTEgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdHJlYW1lciBFbGVtZW50cyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sIiB0aXRsZT0icXVldWUyIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuaHRtbCIgdGl0bGU9InR5cGVmaW5kIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIENvcmUgUGx1Z2lucyAwLjExIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLXRlZS5zeW5vcHNpcyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLXRlZS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUudG9wX29mX3BhZ2UiPjwvYT50ZWU8L3NwYW4+PC9oMj4KKzxwPnRlZSDigJQgMS10by1OIHBpcGUgZml0dGluZzwvcD4KKzwvdGQ+Cis8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KKzwvdHI+PC90YWJsZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXRlZS5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8YSBuYW1lPSJHc3RUZWUiPjwvYT48cHJlIGNsYXNzPSJzeW5vcHNpcyI+c3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwjR3N0VGVlLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RUZWUiPkdzdFRlZTwvYT47CitlbnVtICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCNHc3RUZWVQdWxsTW9kZSIgdGl0bGU9ImVudW0gR3N0VGVlUHVsbE1vZGUiPkdzdFRlZVB1bGxNb2RlPC9hPjsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3QiPkdPYmplY3Q8L2E+CisgICArLS0tLTxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+CisgICAgICAgICArLS0tLTxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdE9iamVjdC5odG1sIj5Hc3RPYmplY3Q8L2E+CisgICAgICAgICAgICAgICArLS0tLTxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCI+R3N0RWxlbWVudDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICstLS0tR3N0VGVlCis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwjR3N0VGVlLS1oYXMtY2hhaW4iIHRpdGxlPSdUaGUgImhhcy1jaGFpbiIgcHJvcGVydHknPmhhcy1jaGFpbjwvYT4iICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwjR3N0VGVlLS1oYXMtc2luay1sb29wIiB0aXRsZT0nVGhlICJoYXMtc2luay1sb29wIiBwcm9wZXJ0eSc+aGFzLXNpbmstbG9vcDwvYT4iICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3QKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCNHc3RUZWUtLWxhc3QtbWVzc2FnZSIgdGl0bGU9J1RoZSAibGFzdC1tZXNzYWdlIiBwcm9wZXJ0eSc+bGFzdC1tZXNzYWdlPC9hPiIgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiogICAgICAgICAgICAgICAgOiBSZWFkCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwjR3N0VGVlLS1udW0tc3JjLXBhZHMiIHRpdGxlPSdUaGUgIm51bS1zcmMtcGFkcyIgcHJvcGVydHknPm51bS1zcmMtcGFkczwvYT4iICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICAgOiBSZWFkCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwjR3N0VGVlLS1zaWxlbnQiIHRpdGxlPSdUaGUgInNpbGVudCIgcHJvcGVydHknPnNpbGVudDwvYT4iICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwjR3N0VGVlLS1wdWxsLW1vZGUiIHRpdGxlPSdUaGUgInB1bGwtbW9kZSIgcHJvcGVydHknPnB1bGwtbW9kZTwvYT4iICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCNHc3RUZWVQdWxsTW9kZSIgdGl0bGU9ImVudW0gR3N0VGVlUHVsbE1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUZWVQdWxsTW9kZTwvc3Bhbj48L2E+ICAgICAgICA6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdAorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sI0dzdFRlZS0tYWxsb2MtcGFkIiB0aXRsZT0nVGhlICJhbGxvYy1wYWQiIHByb3BlcnR5Jz5hbGxvYy1wYWQ8L2E+IiAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9Hc3RQYWQuaHRtbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+KiAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPgorU3BsaXQgZGF0YSB0byBtdWx0aXBsZSBwYWRzLiBCcmFuY2hpbmcgdGhlIGRhdGEgZmxvdyBpcyB1c2VmdWwgd2hlbiBlLmcuCitjYXB0dXJpbmcgYSB2aWRlbyB3aGVyZSB0aGUgdmlkZW8gaXMgc2hvd24gb24gdGhlIHNjcmVlbiBhbmQgYWxzbyBlbmNvZGVkIGFuZAord3JpdHRlbiB0byBhIGZpbGUuIEFub3RoZXIgZXhhbXBsZSBpcyBwbGF5aW5nIG11c2ljIGFuZCBob29raW5nIHVwIGEKK3Zpc3VhbGlzYXRpb24gbW9kdWxlLgorPC9wPgorPHA+CitPbmUgbmVlZHMgdG8gdXNlIHNlcGFyYXRlIHF1ZXVlIGVsZW1lbnRzIChvciBhIG11bHRpcXVldWUpIGluIGVhY2ggYnJhbmNoIHRvCitwcm92aWRlIHNlcGFyYXRlIHRocmVhZHMgZm9yIGVhY2ggYnJhbmNoLiBPdGhlcndpc2UgYSBibG9ja2VkIGRhdGFmbG93IGluIG9uZQorYnJhbmNoIHdvdWxkIHN0YWxsIHRoZSBvdGhlciBicmFuY2hlcy4KKzwvcD4KKzxwPgorPC9wPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iaWQzOTYyMjgiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Cis8ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KK2dzdC1sYXVuY2ggZmlsZXNyYyBsb2NhdGlvbj1zb25nLm9nZyAhIGRlY29kZWJpbjIgISB0ZWUgbmFtZT10ICEgcXVldWUgISBhdXRvYXVkaW9zaW5rIHQuICEgcXVldWUgISBhdWRpb2NvbnZlcnQgISBnb29tICEgZmZtcGVnY29sb3JzcGFjZSAhIGF1dG92aWRlb3NpbmsKKzwvcHJlPjwvZGl2PiBQbGF5IGEgc29uZy5vZ2cgZnJvbSBsb2NhbCBkaXIgYW5kIHJlbmRlciB2aXN1YWxpc2F0aW9ucyB1c2luZyB0aGUgZ29vbQorZWxlbWVudC4KKzwvZGl2PgorPHA+Cis8L3A+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8aDI+U3lub3BzaXM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iaWQ0MDg4OTQiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+CisgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcGx1Z2luLWNvcmVlbGVtZW50cy5odG1sI3BsdWdpbi1jb3JlZWxlbWVudHMiPmNvcmVlbGVtZW50czwvYT4KKyAgICAgICAgICA8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgorPHRkPkVyaWsgV2FsdGhpbnNlbiAmbHQ7b21lZ2FAY3NlLm9naS5lZHUmZ3Q7LCBXaW0gVGF5bWFucyAmbHQ7d2ltQGZsdWVuZG8uY29tJmd0OzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5HZW5lcmljPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iaWQ0MDg5NTYiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2luazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2luazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hbHdheXM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BTlk8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zcmMlZDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c291cmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgorPHRkPnJlcXVlc3Q8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BTlk8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxwPgorPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUuZGV0YWlscyI+PC9hPjxoMj5EZXRhaWxzPC9oMj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFRlZS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFRlZTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFRlZTs8L3ByZT4KKzxwPgorT3BhcXVlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCNHc3RUZWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUZWU8L3NwYW4+PC9hPiBkYXRhIHN0cnVjdHVyZS4KKzwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0VGVlUHVsbE1vZGUiPjwvYT48aDM+ZW51bSBHc3RUZWVQdWxsTW9kZTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBlbnVtIHsKKyAgR1NUX1RFRV9QVUxMX01PREVfTkVWRVIsCisgIEdTVF9URUVfUFVMTF9NT0RFX1NJTkdMRSwKK30gR3N0VGVlUHVsbE1vZGU7Cis8L3ByZT4KKzxwPgorVGhlIGRpZmZlcmVudCB3YXlzIHRoYXQgdGVlIGNhbiBiZWhhdmUgaW4gcHVsbCBtb2RlLiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+VEVFX1BVTExfTU9ERV9ORVZFUjwvY29kZT48L2VtPgorZGlzYWJsZXMgcHVsbCBtb2RlLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48YSBuYW1lPSJHU1QtVEVFLVBVTEwtTU9ERS1ORVZFUjpDQVBTIj48L2E+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfVEVFX1BVTExfTU9ERV9ORVZFUjwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+TmV2ZXIgYWN0aXZhdGUgaW4gcHVsbCBtb2RlLgorPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PGEgbmFtZT0iR1NULVRFRS1QVUxMLU1PREUtU0lOR0xFOkNBUFMiPjwvYT48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9URUVfUFVMTF9NT0RFX1NJTkdMRTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+T25seSBvbmUgc3JjIHBhZCBjYW4gYmUgYWN0aXZlIGluIHB1bGwgbW9kZS4KKzwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RUZWUtLWhhcy1jaGFpbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJoYXMtY2hhaW4iPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiaGFzLWNoYWluIiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcHJlPgorPHA+SWYgdGhlIGVsZW1lbnQgY2FuIG9wZXJhdGUgaW4gcHVzaCBtb2RlLjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFRlZS0taGFzLXNpbmstbG9vcCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJoYXMtc2luay1sb29wIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgImhhcy1zaW5rLWxvb3AiICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3ByZT4KKzxwPklmIHRoZSBlbGVtZW50IHNob3VsZCBzcGF3biBhIHRocmVhZCAodW5pbXBsZW1lbnRlZCBhbmQgZGVwcmVjYXRlZCkuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFRlZS0tbGFzdC1tZXNzYWdlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Imxhc3QtbWVzc2FnZSI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJsYXN0LW1lc3NhZ2UiICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4qICAgICAgICAgICAgICAgIDogUmVhZDwvcHJlPgorPHA+VGhlIG1lc3NhZ2UgZGVzY3JpYmluZyBjdXJyZW50IHN0YXR1cy48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RUZWUtLW51bS1zcmMtcGFkcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJudW0tc3JjLXBhZHMiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAibnVtLXNyYy1wYWRzIiAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICAgIDogUmVhZDwvcHJlPgorPHA+VGhlIG51bWJlciBvZiBzb3VyY2UgcGFkcy48L3A+Cis8cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMDwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFRlZS0tc2lsZW50Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+InNpbGVudCI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJzaWxlbnQiICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wcmU+Cis8cD5Eb24ndCBwcm9kdWNlIGxhc3RfbWVzc2FnZSBldmVudHMuPC9wPgorPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0VGVlLS1wdWxsLW1vZGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4icHVsbC1tb2RlIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgInB1bGwtbW9kZSIgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sI0dzdFRlZVB1bGxNb2RlIiB0aXRsZT0iZW51bSBHc3RUZWVQdWxsTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRlZVB1bGxNb2RlPC9zcGFuPjwvYT4gICAgICAgIDogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wcmU+Cis8cD5CZWhhdmlvciBvZiB0ZWUgaW4gcHVsbCBtb2RlLjwvcD4KKzxwPkRlZmF1bHQgdmFsdWU6IE5ldmVyIGFjdGl2YXRlIGluIHB1bGwgbW9kZTwvcD4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0VGVlLS1hbGxvYy1wYWQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4iYWxsb2MtcGFkIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgImFsbG9jLXBhZCIgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0UGFkLmh0bWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiogICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZTwvcHJlPgorPHA+VGhlIHBhZCB1c2VkIGZvciBnc3RfcGFkX2FsbG9jX2J1ZmZlci48L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI0dzdElkZW50aXR5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0SWRlbnRpdHk8L3NwYW4+PC9hPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODRkYThmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuaHRtbApAQCAtMCwwICsxLDI0NCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPnR5cGVmaW5kPC90aXRsZT4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDAuMTEgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdHJlYW1lciBFbGVtZW50cyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sIiB0aXRsZT0idGVlIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUuaHRtbCIgdGl0bGU9InZhbHZlIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4xOCAoWE1MIG1vZGUpIj4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIENvcmUgUGx1Z2lucyAwLjExIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy12YWx2ZS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KKzwvdHI+Cis8dHI+PHRkIGNvbHNwYW49IjUiIGNsYXNzPSJzaG9ydGN1dHMiPgorPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLnN5bm9wc2lzIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+CisgICAgICAgICAgICAgICAgICDCoHzCoAorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5zaWduYWxzIiBjbGFzcz0ic2hvcnRjdXQiPlNpZ25hbHM8L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC50b3Bfb2ZfcGFnZSI+PC9hPnR5cGVmaW5kPC9zcGFuPjwvaDI+Cis8cD50eXBlZmluZCDigJQgRmluZHMgdGhlIG1lZGlhIHR5cGUgb2YgYSBzdHJlYW08L3A+Cis8L3RkPgorPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Cis8L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5zeW5vcHNpcyI+PC9hPjxoMj5TeW5vcHNpczwvaDI+Cis8YSBuYW1lPSJHc3RUeXBlRmluZEVsZW1lbnQiPjwvYT48cHJlIGNsYXNzPSJzeW5vcHNpcyI+c3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuaHRtbCNHc3RUeXBlRmluZEVsZW1lbnQtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFR5cGVGaW5kRWxlbWVudCI+R3N0VHlwZUZpbmRFbGVtZW50PC9hPjsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+R09iamVjdDwvYT4KKyAgICstLS0tPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KKyAgICAgICAgICstLS0tPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwiPkdzdE9iamVjdDwvYT4KKyAgICAgICAgICAgICAgICstLS0tPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sIj5Hc3RFbGVtZW50PC9hPgorICAgICAgICAgICAgICAgICAgICAgKy0tLS1Hc3RUeXBlRmluZEVsZW1lbnQKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLmh0bWwjR3N0VHlwZUZpbmRFbGVtZW50LS1jYXBzIiB0aXRsZT0nVGhlICJjYXBzIiBwcm9wZXJ0eSc+Y2FwczwvYT4iICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCNHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+KiAgICAgICAgICAgICAgOiBSZWFkCisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuaHRtbCNHc3RUeXBlRmluZEVsZW1lbnQtLW1heGltdW0iIHRpdGxlPSdUaGUgIm1heGltdW0iIHByb3BlcnR5Jz5tYXhpbXVtPC9hPiIgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgICA6IFJlYWQgLyBXcml0ZQorICAiPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLmh0bWwjR3N0VHlwZUZpbmRFbGVtZW50LS1taW5pbXVtIiB0aXRsZT0nVGhlICJtaW5pbXVtIiBwcm9wZXJ0eSc+bWluaW11bTwvYT4iICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGUKKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5odG1sI0dzdFR5cGVGaW5kRWxlbWVudC0tZm9yY2UtY2FwcyIgdGl0bGU9J1RoZSAiZm9yY2UtY2FwcyIgcHJvcGVydHknPmZvcmNlLWNhcHM8L2E+IiAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiogICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuc2lnbmFscyI+PC9hPjxoMj5TaWduYWxzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyAgIjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5odG1sI0dzdFR5cGVGaW5kRWxlbWVudC1oYXZlLXR5cGUiIHRpdGxlPSdUaGUgImhhdmUtdHlwZSIgc2lnbmFsJz5oYXZlLXR5cGU8L2E+IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tRklSU1Q6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlJ1biBGaXJzdDwvY29kZT48L2E+Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitEZXRlcm1pbmVzIHRoZSBtZWRpYS10eXBlIG9mIGEgc3RyZWFtLiBJdCBhcHBsaWVzIHR5cGVmaW5kIGZ1bmN0aW9ucyBpbiB0aGUKK29yZGVyIG9mIHRoZWlyIHJhbmsuIE9uZSB0aGUgdHlwZSBoYXMgYmVlbiBkZXRldGVkIGl0IHNldHMgaXRzIHNyYyBwYWQgY2FwcwordG8gdGhlIGZvdW5kIG1lZGlhIHR5cGUuCis8L3A+Cis8cD4KK1doZW5ldmVyIGEgdHlwZSBpcyBmb3VuZCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLmh0bWwjR3N0VHlwZUZpbmRFbGVtZW50LWhhdmUtdHlwZSIgdGl0bGU9J1RoZSAiaGF2ZS10eXBlIiBzaWduYWwnPjxzcGFuIGNsYXNzPSJ0eXBlIj4iaGF2ZS10eXBlIjwvc3Bhbj48L2E+IHNpZ25hbCBpcworZW1pdHRlZCwgZWl0aGVyIGZyb20gdGhlIHN0cmVhbWluZyB0aHJlYWQgb3IgdGhlIGFwcGxpY2F0aW9uIHRocmVhZAorKHRoZSBsYXR0ZXIgbWF5IGhhcHBlbiB3aGVuIHR5cGVmaW5kaW5nIGlzIGRvbmUgcHVsbC1iYXNlZCBmcm9tIHRoZQorc3RhdGUgY2hhbmdlIGZ1bmN0aW9uKS4KKzwvcD4KKzxwPgorUGx1Z2lucyBjYW4gcmVnaXN0ZXIgY3VzdG9tIHR5cGVmaW5kZXJzIGJ5IHVzaW5nIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdFR5cGVGaW5kRmFjdG9yeS5odG1sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmRGYWN0b3J5PC9zcGFuPjwvYT4uCis8L3A+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8aDI+U3lub3BzaXM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iaWQ0MDgzMDciPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+CisgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcGx1Z2luLWNvcmVlbGVtZW50cy5odG1sI3BsdWdpbi1jb3JlZWxlbWVudHMiPmNvcmVlbGVtZW50czwvYT4KKyAgICAgICAgICA8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgorPHRkPkJlbmphbWluIE90dGUgJmx0O2luN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlJmd0OzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5HZW5lcmljPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzwvZGl2PgorPGhyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iaWQ0MDgzNjkiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCI+Cis8Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2luazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c2luazwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hbHdheXM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BTlk8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zcmM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgorPHRkPnNvdXJjZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5hbHdheXM8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5BTlk8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxwPgorPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5kZXRhaWxzIj48L2E+PGgyPkRldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0VHlwZUZpbmRFbGVtZW50LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0VHlwZUZpbmRFbGVtZW50PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0VHlwZUZpbmRFbGVtZW50OzwvcHJlPgorPHA+CitPcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLmh0bWwjR3N0VHlwZUZpbmRFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmRFbGVtZW50PC9zcGFuPjwvYT4gZGF0YSBzdHJ1Y3R1cmUKKzwvcD4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0VHlwZUZpbmRFbGVtZW50LS1jYXBzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ImNhcHMiPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICAiY2FwcyIgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi9nc3RyZWFtZXItMC4xMS9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sI0dzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4qICAgICAgICAgICAgICA6IFJlYWQ8L3ByZT4KKzxwPmRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0uPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RUeXBlRmluZEVsZW1lbnQtLW1heGltdW0iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4ibWF4aW11bSI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJtYXhpbXVtIiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5wcm9iYWJpbGl0eSB0byBzdG9wIHR5cGVmaW5kaW5nIChkZXByZWNhdGVkOyBub24tZnVuY3Rpb25hbCkuPC9wPgorPHA+QWxsb3dlZCB2YWx1ZXM6IFsxLDEwMF08L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiAxMDA8L3A+Cis8L2Rpdj4KKzxocj4KKzxkaXYgY2xhc3M9InJlZnNlY3QyIj4KKzxhIG5hbWU9IkdzdFR5cGVGaW5kRWxlbWVudC0tbWluaW11bSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJtaW5pbXVtIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgIm1pbmltdW0iICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPm1pbmltdW0gcHJvYmFiaWxpdHkgcmVxdWlyZWQgdG8gYWNjZXB0IGNhcHMuPC9wPgorPHA+QWxsb3dlZCB2YWx1ZXM6IFsxLDEwMF08L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiAxPC9wPgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RUeXBlRmluZEVsZW1lbnQtLWZvcmNlLWNhcHMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4iZm9yY2UtY2FwcyI8L2NvZGU+IHByb3BlcnR5PC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gICJmb3JjZS1jYXBzIiAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiogICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlPC9wcmU+Cis8cD5mb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZC48L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuc2lnbmFsLWRldGFpbHMiPjwvYT48aDI+U2lnbmFsIERldGFpbHM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iR3N0VHlwZUZpbmRFbGVtZW50LWhhdmUtdHlwZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJoYXZlLXR5cGUiPC9jb2RlPiBzaWduYWw8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4gICAgICAgICAgICAgICAgdXNlcl9mdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLmh0bWwjR3N0VHlwZUZpbmRFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmRFbGVtZW50PC9zcGFuPjwvYT4gKnR5cGVmaW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgICAgcHJvYmFiaWxpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL2dzdHJlYW1lci1Hc3RDYXBzLmh0bWwjR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAgICAgICAgICAgICpjYXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICAgICAgICAgdXNlcl9kYXRhKSAgICAgICAgOiA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tRklSU1Q6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlJ1biBGaXJzdDwvY29kZT48L2E+PC9wcmU+Cis8cD4KK1RoaXMgc2lnbmFsIGdldHMgZW1pdHRlZCB3aGVuIHRoZSB0eXBlIGFuZCBpdHMgcHJvYmFiaWxpdHkgaGFzCitiZWVuIGZvdW5kLgorPC9wPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGVmaW5kPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSB0eXBlZmluZCBpbnN0YW5jZTwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJvYmFiaWxpdHk8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dGhlIHByb2JhYmlsaXR5IG9mIHRoZSB0eXBlIGZvdW5kPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+wqA6PC9zcGFuPjwvcD48L3RkPgorPHRkPnRoZSBjYXBzIG9mIHRoZSB0eXBlIGZvdW5kPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT7CoDo8L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmb290ZXIiPgorPGhyPgorICAgICAgICAgIEdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjE4PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLXZhbHZlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhiMGYwMQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLXZhbHZlLmh0bWwKQEAgLTAsMCArMSwxODAgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzx0aXRsZT52YWx2ZTwvdGl0bGU+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAwLjExIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Cis8bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3RyZWFtZXIgRWxlbWVudHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5odG1sIiB0aXRsZT0idHlwZWZpbmQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJjaDAyLmh0bWwiIHRpdGxlPSJnc3RyZWFtZXIgUGx1Z2lucyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMTggKFhNTCBtb2RlKSI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+Cis8dHIgdmFsaWduPSJtaWRkbGUiPgorPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KKzx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KKzx0aCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+R1N0cmVhbWVyIENvcmUgUGx1Z2lucyAwLjExIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGg+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJjaDAyLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgorPC90cj4KKzx0cj48dGQgY29sc3Bhbj0iNSIgY2xhc3M9InNob3J0Y3V0cyI+Cis8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUuc3lub3BzaXMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy12YWx2ZS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT4KKyAgICAgICAgICAgICAgICAgIMKgfMKgCisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPgorICAgICAgICAgICAgICAgICAgwqB8wqAKKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy12YWx2ZS5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy12YWx2ZS50b3Bfb2ZfcGFnZSI+PC9hPnZhbHZlPC9zcGFuPjwvaDI+Cis8cD52YWx2ZSDigJQgRHJvcHMgYnVmZmVycyBhbmQgZXZlbnRzIG9yIGxldHMgdGhlbSB0aHJvdWdoPC9wPgorPC90ZD4KKzx0ZCB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgorPC90cj48L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUuc3lub3BzaXMiPjwvYT48aDI+U3lub3BzaXM8L2gyPgorPGEgbmFtZT0iR3N0VmFsdmUiPjwvYT48cHJlIGNsYXNzPSJzeW5vcHNpcyI+c3RydWN0ICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUuaHRtbCNHc3RWYWx2ZS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0VmFsdmUiPkdzdFZhbHZlPC9hPjsKKzwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy12YWx2ZS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPgorICA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdCI+R09iamVjdDwvYT4KKyAgICstLS0tPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KKyAgICAgICAgICstLS0tPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0T2JqZWN0Lmh0bWwiPkdzdE9iamVjdDwvYT4KKyAgICAgICAgICAgICAgICstLS0tPGEgaHJlZj0iLi4vZ3N0cmVhbWVyLTAuMTEvR3N0RWxlbWVudC5odG1sIj5Hc3RFbGVtZW50PC9hPgorICAgICAgICAgICAgICAgICAgICAgKy0tLS1Hc3RWYWx2ZQorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXZhbHZlLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisgICI8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUuaHRtbCNHc3RWYWx2ZS0tZHJvcCIgdGl0bGU9J1RoZSAiZHJvcCIgcHJvcGVydHknPmRyb3A8L2E+IiAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nbGliL3Vuc3RhYmxlL2dsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gICAgICAgICAgICAgIDogUmVhZCAvIFdyaXRlCis8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+CitUaGUgdmFsdmUgaXMgYSBzaW1wbGUgZWxlbWVudCB0aGF0IGRyb3BzIGJ1ZmZlcnMgd2hlbiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXZhbHZlLmh0bWwjR3N0VmFsdmUtLWRyb3AiIHRpdGxlPSdUaGUgImRyb3AiIHByb3BlcnR5Jz48c3BhbiBjbGFzcz0idHlwZSI+ImRyb3AiPC9zcGFuPjwvYT4KK3Byb3BlcnR5IGlzIHNldCB0byA8YSBocmVmPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi91bnN0YWJsZS9nbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBhbmQgbGV0cyB0aGVuIHRocm91Z2ggb3RoZXJ3aXNlLgorPC9wPgorPHA+CitBbnkgZG93bnN0cmVhbSBlcnJvciByZWNlaXZlZCB3aGlsZSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXZhbHZlLmh0bWwjR3N0VmFsdmUtLWRyb3AiIHRpdGxlPSdUaGUgImRyb3AiIHByb3BlcnR5Jz48c3BhbiBjbGFzcz0idHlwZSI+ImRyb3AiPC9zcGFuPjwvYT4gcHJvcGVydHkgaXMgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPgoraXMgaWdub3JlZC4gU28gZG93bnN0cmVhbSBlbGVtZW50IGNhbiBiZSBzZXQgdG8gIDxhIGhyZWY9Ii4uL2dzdHJlYW1lci0wLjExL0dzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX05VTEw8L2NvZGU+PC9hPiBhbmQgcmVtb3ZlZCwKK3dpdGhvdXQgdXNpbmcgcGFkIGJsb2NraW5nLgorPC9wPgorPHA+CitUaGlzIGVsZW1lbnQgd2FzIHByZXZpb3VzbHkgcGFydCBvZiBnc3QtcGx1Z2lucy1mYXJzaWdodCwgYW5kIHRoZW4KK2dzdC1wbHVnaW5zLWJhZC4KKzwvcD4KKzxwPgorRG9jdW1lbnRhdGlvbiBsYXN0IHJldmlld2VkIG9uIDIwMTAtMTItMzAgKDAuMTAuMzEpCis8L3A+Cis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8aDI+U3lub3BzaXM8L2gyPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iaWQzNzQwOTYiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+CisgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcGx1Z2luLWNvcmVlbGVtZW50cy5odG1sI3BsdWdpbi1jb3JlZWxlbWVudHMiPmNvcmVlbGVtZW50czwvYT4KKyAgICAgICAgICA8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgorPHRkPk9saXZpZXIgQ3JldGUgJmx0O29saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrJmd0OzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5GaWx0ZXI8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJpZDQwODA4MCI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIj4KKzxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KKzx0Ym9keT4KKzx0cj4KKzx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zaW5rPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KKzx0ZD5zaW5rPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgorPHRkPmFsd2F5czwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgorPHRkPkFOWTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiPgorPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgorPHRib2R5PgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgorPHRkPnNyYzwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Cis8dGQ+c291cmNlPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgorPHRkPmFsd2F5czwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgorPHRkPkFOWTwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPHA+Cis8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXZhbHZlLmRldGFpbHMiPjwvYT48aDI+RGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RWYWx2ZS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFZhbHZlPC9oMz4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0VmFsdmU7PC9wcmU+Cis8cD4KK1RoZSBwcml2YXRlIHZhbHZlIHN0cnVjdHVyZQorPC9wPgorPHAgY2xhc3M9InNpbmNlIj5TaW5jZSAwLjEwLjMyPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXZhbHZlLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Cis8YSBuYW1lPSJHc3RWYWx2ZS0tZHJvcCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPiJkcm9wIjwvY29kZT4gcHJvcGVydHk8L2gzPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAgImRyb3AiICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvdW5zdGFibGUvZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgICAgOiBSZWFkIC8gV3JpdGU8L3ByZT4KKzxwPldoZXRoZXIgdG8gZHJvcCBidWZmZXJzIGFuZCBldmVudHMgb3IgbGV0IHRoZW0gdGhyb3VnaC48L3A+Cis8cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KKzwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy5kZXZoZWxwMiBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLmRldmhlbHAyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMDcyMmIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy5kZXZoZWxwMgpAQCAtMCwwICsxLDI0NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiIj4KKzxib29rIHhtbG5zPSJodHRwOi8vd3d3LmRldmhlbHAubmV0L2Jvb2siIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDAuMTEgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIiBsaW5rPSJpbmRleC5odG1sIiBhdXRob3I9IiIgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMiIHZlcnNpb249IjIiIGxhbmd1YWdlPSJjIj4KKyAgPGNoYXB0ZXJzPgorICAgIDxzdWIgbmFtZT0iZ3N0cmVhbWVyIEVsZW1lbnRzIiBsaW5rPSJjaDAxLmh0bWwiPgorICAgICAgPHN1YiBuYW1lPSJjYXBzZmlsdGVyIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1jYXBzZmlsdGVyLmh0bWwiLz4KKyAgICAgIDxzdWIgbmFtZT0iZmFrZXNyYyIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9ImZha2VzaW5rIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9ImZkc2luayIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rLmh0bWwiLz4KKyAgICAgIDxzdWIgbmFtZT0iZmRzcmMiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZkc3JjLmh0bWwiLz4KKyAgICAgIDxzdWIgbmFtZT0iZmlsZXNyYyIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9ImZpbGVzaW5rIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9ImZ1bm5lbCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZnVubmVsLmh0bWwiLz4KKyAgICAgIDxzdWIgbmFtZT0iaWRlbnRpdHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lmh0bWwiLz4KKyAgICAgIDxzdWIgbmFtZT0iaW5wdXQtc2VsZWN0b3IiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwiLz4KKyAgICAgIDxzdWIgbmFtZT0ibXVsdGlxdWV1ZSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9Im91dHB1dC1zZWxlY3RvciIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLmh0bWwiLz4KKyAgICAgIDxzdWIgbmFtZT0icXVldWUiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwiLz4KKyAgICAgIDxzdWIgbmFtZT0icXVldWUyIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCIvPgorICAgICAgPHN1YiBuYW1lPSJ0ZWUiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9InR5cGVmaW5kIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5odG1sIi8+CisgICAgICA8c3ViIG5hbWU9InZhbHZlIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy12YWx2ZS5odG1sIi8+CisgICAgPC9zdWI+CisgICAgPHN1YiBuYW1lPSJnc3RyZWFtZXIgUGx1Z2lucyIgbGluaz0iY2gwMi5odG1sIj4KKyAgICAgIDxzdWIgbmFtZT0iY29yZWVsZW1lbnRzIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWVsZW1lbnRzLmh0bWwiLz4KKyAgICAgIDxzdWIgbmFtZT0iY29yZWluZGV4ZXJzIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWluZGV4ZXJzLmh0bWwiLz4KKyAgICA8L3N1Yj4KKyAgPC9jaGFwdGVycz4KKyAgPGZ1bmN0aW9ucz4KKyAgICA8a2V5d29yZCB0eXBlPSIiIG5hbWU9IkV4YW1wbGUgbGF1bmNoIGxpbmUiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuaHRtbCNpZDM4MDcyOSIvPgorICAgIDxrZXl3b3JkIHR5cGU9IiIgbmFtZT0iRWxlbWVudCBJbmZvcm1hdGlvbiIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5odG1sI2lkMzgxNjU3Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iIiBuYW1lPSJFbGVtZW50IFBhZHMiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuaHRtbCNpZDMxNzM4MCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdENhcHNGaWx0ZXIiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuaHRtbCNHc3RDYXBzRmlsdGVyLXN0cnVjdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7Y2FwcyZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5odG1sI0dzdENhcHNGaWx0ZXItLWNhcHMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSIiIG5hbWU9IkV4YW1wbGUgbGF1bmNoIGxpbmUiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNpZDM2NDc1OCIvPgorICAgIDxrZXl3b3JkIHR5cGU9IiIgbmFtZT0iRWxlbWVudCBJbmZvcm1hdGlvbiIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI2lkMzY0Nzg0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iIiBuYW1lPSJFbGVtZW50IFBhZHMiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNpZDM2NDg0NiIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEZha2VTcmMiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjLXN0cnVjdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0RmFrZVNyY0RhdGFUeXBlIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyY0RhdGFUeXBlIi8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RGYWtlU3JjRmlsbFR5cGUiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjRmlsbFR5cGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdEZha2VTcmNPdXRwdXRUeXBlIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyY091dHB1dFR5cGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdEZha2VTcmNTaXplVHlwZSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmNTaXplVHlwZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7Y2FuLWFjdGl2YXRlLXB1bGwmcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjLS1jYW4tYWN0aXZhdGUtcHVsbCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7Y2FuLWFjdGl2YXRlLXB1c2gmcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjLS1jYW4tYWN0aXZhdGUtcHVzaCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7ZGF0YSZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLWRhdGEiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O2RhdGFyYXRlJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy0tZGF0YXJhdGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O2R1bXAmcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjLS1kdW1wIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtmaWxsdHlwZSZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLWZpbGx0eXBlIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtpcy1saXZlJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy0taXMtbGl2ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7bGFzdC1tZXNzYWdlJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy0tbGFzdC1tZXNzYWdlIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtwYXJlbnRzaXplJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy0tcGFyZW50c2l6ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7cGF0dGVybiZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLXBhdHRlcm4iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O3NpZ25hbC1oYW5kb2ZmcyZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLXNpZ25hbC1oYW5kb2ZmcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7c2lsZW50JnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy0tc2lsZW50Ii8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtzaXplbWF4JnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy0tc2l6ZW1heCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7c2l6ZW1pbiZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLXNpemVtaW4iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O3NpemV0eXBlJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy0tc2l6ZXR5cGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O3N5bmMmcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjLS1zeW5jIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtmb3JtYXQmcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjLS1mb3JtYXQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSAmcXVvdDtoYW5kb2ZmJnF1b3Q7IHNpZ25hbCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtaGFuZG9mZiIvPgorICAgIDxrZXl3b3JkIHR5cGU9IiIgbmFtZT0iRXhhbXBsZSBsYXVuY2ggbGluZSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNpZDM5NjY3MyIvPgorICAgIDxrZXl3b3JkIHR5cGU9IiIgbmFtZT0iRWxlbWVudCBJbmZvcm1hdGlvbiIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNpZDM5NjY5NCIvPgorICAgIDxrZXl3b3JkIHR5cGU9IiIgbmFtZT0iRWxlbWVudCBQYWRzIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI2lkMzk2NzU3Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0RmFrZVNpbmsiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjR3N0RmFrZVNpbmstc3RydWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RGYWtlU2lua1N0YXRlRXJyb3IiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjR3N0RmFrZVNpbmtTdGF0ZUVycm9yIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtjYW4tYWN0aXZhdGUtcHVsbCZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNHc3RGYWtlU2luay0tY2FuLWFjdGl2YXRlLXB1bGwiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O2Nhbi1hY3RpdmF0ZS1wdXNoJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0dzdEZha2VTaW5rLS1jYW4tYWN0aXZhdGUtcHVzaCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7ZHVtcCZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNHc3RGYWtlU2luay0tZHVtcCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7bGFzdC1tZXNzYWdlJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0dzdEZha2VTaW5rLS1sYXN0LW1lc3NhZ2UiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O3NpZ25hbC1oYW5kb2ZmcyZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNHc3RGYWtlU2luay0tc2lnbmFsLWhhbmRvZmZzIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtzaWxlbnQmcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjR3N0RmFrZVNpbmstLXNpbGVudCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7c3RhdGUtZXJyb3ImcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjR3N0RmFrZVNpbmstLXN0YXRlLWVycm9yIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtudW0tYnVmZmVycyZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNHc3RGYWtlU2luay0tbnVtLWJ1ZmZlcnMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSAmcXVvdDtoYW5kb2ZmJnF1b3Q7IHNpZ25hbCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNHc3RGYWtlU2luay1oYW5kb2ZmIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUgJnF1b3Q7cHJlcm9sbC1oYW5kb2ZmJnF1b3Q7IHNpZ25hbCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNHc3RGYWtlU2luay1wcmVyb2xsLWhhbmRvZmYiLz4KKyAgICA8a2V5d29yZCB0eXBlPSIiIG5hbWU9IkVsZW1lbnQgSW5mb3JtYXRpb24iIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZkc2luay5odG1sI2lkMzc1MjQzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iIiBuYW1lPSJFbGVtZW50IFBhZHMiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZkc2luay5odG1sI2lkMzYxMjAyIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0RmRTaW5rIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsuaHRtbCNHc3RGZFNpbmstc3RydWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtmZCZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rLmh0bWwjR3N0RmRTaW5rLS1mZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9IiIgbmFtZT0iRXhhbXBsZSBsYXVuY2ggbGluZSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuaHRtbCNpZDM4ODkyMiIvPgorICAgIDxrZXl3b3JkIHR5cGU9IiIgbmFtZT0iRWxlbWVudCBJbmZvcm1hdGlvbiIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuaHRtbCNpZDM5Nzc5NiIvPgorICAgIDxrZXl3b3JkIHR5cGU9IiIgbmFtZT0iRWxlbWVudCBQYWRzIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5odG1sI2lkMzk3ODU4Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0RmRTcmMiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZkc3JjLmh0bWwjR3N0RmRTcmMtc3RydWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtmZCZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuaHRtbCNHc3RGZFNyYy0tZmQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O3RpbWVvdXQmcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZkc3JjLmh0bWwjR3N0RmRTcmMtLXRpbWVvdXQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSIiIG5hbWU9IkV4YW1wbGUgbGF1bmNoIGxpbmUiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuaHRtbCNpZDM2NDEyMyIvPgorICAgIDxrZXl3b3JkIHR5cGU9IiIgbmFtZT0iRWxlbWVudCBJbmZvcm1hdGlvbiIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5odG1sI2lkMzk4OTMxIi8+CisgICAgPGtleXdvcmQgdHlwZT0iIiBuYW1lPSJFbGVtZW50IFBhZHMiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuaHRtbCNpZDM5ODk5MyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEZpbGVTcmMiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuaHRtbCNHc3RGaWxlU3JjLXN0cnVjdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7ZmQmcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuaHRtbCNHc3RGaWxlU3JjLS1mZCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7bG9jYXRpb24mcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuaHRtbCNHc3RGaWxlU3JjLS1sb2NhdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7bW1hcHNpemUmcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuaHRtbCNHc3RGaWxlU3JjLS1tbWFwc2l6ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7dG91Y2gmcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuaHRtbCNHc3RGaWxlU3JjLS10b3VjaCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7dXNlLW1tYXAmcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuaHRtbCNHc3RGaWxlU3JjLS11c2UtbW1hcCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7c2VxdWVudGlhbCZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5odG1sI0dzdEZpbGVTcmMtLXNlcXVlbnRpYWwiLz4KKyAgICA8a2V5d29yZCB0eXBlPSIiIG5hbWU9IkV4YW1wbGUgbGF1bmNoIGxpbmUiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmh0bWwjaWQzNjkzNjQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSIiIG5hbWU9IkVsZW1lbnQgSW5mb3JtYXRpb24iIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmh0bWwjaWQzNjkzODUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSIiIG5hbWU9IkVsZW1lbnQgUGFkcyIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsuaHRtbCNpZDM5ODYxMSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEZpbGVTaW5rIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5odG1sI0dzdEZpbGVTaW5rLXN0cnVjdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7bG9jYXRpb24mcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmh0bWwjR3N0RmlsZVNpbmstLWxvY2F0aW9uIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtidWZmZXItbW9kZSZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsuaHRtbCNHc3RGaWxlU2luay0tYnVmZmVyLW1vZGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O2J1ZmZlci1zaXplJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5odG1sI0dzdEZpbGVTaW5rLS1idWZmZXItc2l6ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7YXBwZW5kJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5odG1sI0dzdEZpbGVTaW5rLS1hcHBlbmQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSIiIG5hbWU9IkVsZW1lbnQgSW5mb3JtYXRpb24iIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZ1bm5lbC5odG1sI2lkMzcwOTgzIi8+CisgICAgPGtleXdvcmQgdHlwZT0iIiBuYW1lPSJFbGVtZW50IFBhZHMiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZ1bm5lbC5odG1sI2lkMzc2NTMyIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0RnVubmVsIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mdW5uZWwuaHRtbCNHc3RGdW5uZWwtc3RydWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iIiBuYW1lPSJFbGVtZW50IEluZm9ybWF0aW9uIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI2lkNDAwMjkxIi8+CisgICAgPGtleXdvcmQgdHlwZT0iIiBuYW1lPSJFbGVtZW50IFBhZHMiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lmh0bWwjaWQ0MDAzNTMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RJZGVudGl0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS1zdHJ1Y3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O2NoZWNrLXBlcmZlY3QmcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lmh0bWwjR3N0SWRlbnRpdHktLWNoZWNrLXBlcmZlY3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O2RhdGFyYXRlJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI0dzdElkZW50aXR5LS1kYXRhcmF0ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7ZHJvcC1wcm9iYWJpbGl0eSZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tZHJvcC1wcm9iYWJpbGl0eSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7ZHVtcCZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tZHVtcCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7ZXJyb3ItYWZ0ZXImcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lmh0bWwjR3N0SWRlbnRpdHktLWVycm9yLWFmdGVyIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtsYXN0LW1lc3NhZ2UmcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lmh0bWwjR3N0SWRlbnRpdHktLWxhc3QtbWVzc2FnZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7c2lsZW50JnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI0dzdElkZW50aXR5LS1zaWxlbnQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O3NpbmdsZS1zZWdtZW50JnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI0dzdElkZW50aXR5LS1zaW5nbGUtc2VnbWVudCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7c2xlZXAtdGltZSZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tc2xlZXAtdGltZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7c3luYyZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tc3luYyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7Y2hlY2staW1wZXJmZWN0LW9mZnNldCZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tY2hlY2staW1wZXJmZWN0LW9mZnNldCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7Y2hlY2staW1wZXJmZWN0LXRpbWVzdGFtcCZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tY2hlY2staW1wZXJmZWN0LXRpbWVzdGFtcCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7c2lnbmFsLWhhbmRvZmZzJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI0dzdElkZW50aXR5LS1zaWduYWwtaGFuZG9mZnMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSAmcXVvdDtoYW5kb2ZmJnF1b3Q7IHNpZ25hbCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS1oYW5kb2ZmIi8+CisgICAgPGtleXdvcmQgdHlwZT0iIiBuYW1lPSJFbGVtZW50IEluZm9ybWF0aW9uIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5odG1sI2lkNDAyNDc1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iIiBuYW1lPSJFbGVtZW50IFBhZHMiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwjaWQ0MDI1MzgiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RJbnB1dFNlbGVjdG9yIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5odG1sI0dzdElucHV0U2VsZWN0b3Itc3RydWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDthY3RpdmUtcGFkJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5odG1sI0dzdElucHV0U2VsZWN0b3ItLWFjdGl2ZS1wYWQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O24tcGFkcyZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IuaHRtbCNHc3RJbnB1dFNlbGVjdG9yLS1uLXBhZHMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O3NlbGVjdC1hbGwmcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwjR3N0SW5wdXRTZWxlY3Rvci0tc2VsZWN0LWFsbCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7c3luYy1zdHJlYW1zJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5odG1sI0dzdElucHV0U2VsZWN0b3ItLXN5bmMtc3RyZWFtcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlICZxdW90O2Jsb2NrJnF1b3Q7IHNpZ25hbCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IuaHRtbCNHc3RJbnB1dFNlbGVjdG9yLWJsb2NrIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUgJnF1b3Q7c3dpdGNoJnF1b3Q7IHNpZ25hbCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IuaHRtbCNHc3RJbnB1dFNlbGVjdG9yLXN3aXRjaCIvPgorICAgIDxrZXl3b3JkIHR5cGU9IiIgbmFtZT0iIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjaWQ0MDQyMTIiLz4KKyAgICA8a2V5d29yZCB0eXBlPSIiIG5hbWU9IkVsZW1lbnQgSW5mb3JtYXRpb24iIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNpZDQwNDM5NCIvPgorICAgIDxrZXl3b3JkIHR5cGU9IiIgbmFtZT0iRWxlbWVudCBQYWRzIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjaWQ0MDQ0NTQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RNdWx0aVF1ZXVlIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS1zdHJ1Y3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O2V4dHJhLXNpemUtYnVmZmVycyZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtLWV4dHJhLXNpemUtYnVmZmVycyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7ZXh0cmEtc2l6ZS1ieXRlcyZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtLWV4dHJhLXNpemUtYnl0ZXMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O2V4dHJhLXNpemUtdGltZSZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtLWV4dHJhLXNpemUtdGltZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7bWF4LXNpemUtYnVmZmVycyZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtLW1heC1zaXplLWJ1ZmZlcnMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O21heC1zaXplLWJ5dGVzJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS0tbWF4LXNpemUtYnl0ZXMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O21heC1zaXplLXRpbWUmcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS1tYXgtc2l6ZS10aW1lIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtoaWdoLXBlcmNlbnQmcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS1oaWdoLXBlcmNlbnQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O2xvdy1wZXJjZW50JnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS0tbG93LXBlcmNlbnQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O3VzZS1idWZmZXJpbmcmcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS11c2UtYnVmZmVyaW5nIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtzeW5jLWJ5LXJ1bm5pbmctdGltZSZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtLXN5bmMtYnktcnVubmluZy10aW1lIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUgJnF1b3Q7b3ZlcnJ1biZxdW90OyBzaWduYWwiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLW92ZXJydW4iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSAmcXVvdDt1bmRlcnJ1biZxdW90OyBzaWduYWwiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLXVuZGVycnVuIi8+CisgICAgPGtleXdvcmQgdHlwZT0iIiBuYW1lPSJFbGVtZW50IEluZm9ybWF0aW9uIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IuaHRtbCNpZDM4Nzc2MSIvPgorICAgIDxrZXl3b3JkIHR5cGU9IiIgbmFtZT0iRWxlbWVudCBQYWRzIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IuaHRtbCNpZDM5ODUyMCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdE91dHB1dFNlbGVjdG9yIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IuaHRtbCNHc3RPdXRwdXRTZWxlY3Rvci1zdHJ1Y3QiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O2FjdGl2ZS1wYWQmcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5odG1sI0dzdE91dHB1dFNlbGVjdG9yLS1hY3RpdmUtcGFkIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtyZXNlbmQtbGF0ZXN0JnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IuaHRtbCNHc3RPdXRwdXRTZWxlY3Rvci0tcmVzZW5kLWxhdGVzdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7cGFkLW5lZ290aWF0aW9uLW1vZGUmcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5odG1sI0dzdE91dHB1dFNlbGVjdG9yLS1wYWQtbmVnb3RpYXRpb24tbW9kZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9IiIgbmFtZT0iRWxlbWVudCBJbmZvcm1hdGlvbiIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNpZDQwNTU2NCIvPgorICAgIDxrZXl3b3JkIHR5cGU9IiIgbmFtZT0iRWxlbWVudCBQYWRzIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI2lkNDA1NjI2Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UXVldWUiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtc3RydWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RRdWV1ZUxlYWt5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlTGVha3kiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O2N1cnJlbnQtbGV2ZWwtYnVmZmVycyZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS0tY3VycmVudC1sZXZlbC1idWZmZXJzIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtjdXJyZW50LWxldmVsLWJ5dGVzJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLS1jdXJyZW50LWxldmVsLWJ5dGVzIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtjdXJyZW50LWxldmVsLXRpbWUmcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtLWN1cnJlbnQtbGV2ZWwtdGltZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7bGVha3kmcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtLWxlYWt5Ii8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDttYXgtc2l6ZS1idWZmZXJzJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLS1tYXgtc2l6ZS1idWZmZXJzIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDttYXgtc2l6ZS1ieXRlcyZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS0tbWF4LXNpemUtYnl0ZXMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O21heC1zaXplLXRpbWUmcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtLW1heC1zaXplLXRpbWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O21pbi10aHJlc2hvbGQtYnVmZmVycyZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS0tbWluLXRocmVzaG9sZC1idWZmZXJzIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDttaW4tdGhyZXNob2xkLWJ5dGVzJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLS1taW4tdGhyZXNob2xkLWJ5dGVzIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDttaW4tdGhyZXNob2xkLXRpbWUmcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtLW1pbi10aHJlc2hvbGQtdGltZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7c2lsZW50JnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLS1zaWxlbnQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSAmcXVvdDtvdmVycnVuJnF1b3Q7IHNpZ25hbCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS1vdmVycnVuIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUgJnF1b3Q7cnVubmluZyZxdW90OyBzaWduYWwiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtcnVubmluZyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlICZxdW90O3VuZGVycnVuJnF1b3Q7IHNpZ25hbCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS11bmRlcnJ1biIvPgorICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlICZxdW90O3B1c2hpbmcmcXVvdDsgc2lnbmFsIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLXB1c2hpbmciLz4KKyAgICA8a2V5d29yZCB0eXBlPSIiIG5hbWU9IkVsZW1lbnQgSW5mb3JtYXRpb24iIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI2lkNDA3MDU0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iIiBuYW1lPSJFbGVtZW50IFBhZHMiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI2lkNDA3MTE1Ii8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UXVldWUyIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItc3RydWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtjdXJyZW50LWxldmVsLWJ1ZmZlcnMmcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tY3VycmVudC1sZXZlbC1idWZmZXJzIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtjdXJyZW50LWxldmVsLWJ5dGVzJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLWN1cnJlbnQtbGV2ZWwtYnl0ZXMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O2N1cnJlbnQtbGV2ZWwtdGltZSZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwjR3N0UXVldWUyLS1jdXJyZW50LWxldmVsLXRpbWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O2hpZ2gtcGVyY2VudCZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwjR3N0UXVldWUyLS1oaWdoLXBlcmNlbnQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O2xvdy1wZXJjZW50JnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLWxvdy1wZXJjZW50Ii8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDttYXgtc2l6ZS1idWZmZXJzJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLW1heC1zaXplLWJ1ZmZlcnMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O21heC1zaXplLWJ5dGVzJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLW1heC1zaXplLWJ5dGVzIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDttYXgtc2l6ZS10aW1lJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLW1heC1zaXplLXRpbWUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O3RlbXAtbG9jYXRpb24mcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tdGVtcC1sb2NhdGlvbiIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7dGVtcC10ZW1wbGF0ZSZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwjR3N0UXVldWUyLS10ZW1wLXRlbXBsYXRlIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDt1c2UtYnVmZmVyaW5nJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLXVzZS1idWZmZXJpbmciLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O3VzZS1yYXRlLWVzdGltYXRlJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLXVzZS1yYXRlLWVzdGltYXRlIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDt0ZW1wLXJlbW92ZSZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwjR3N0UXVldWUyLS10ZW1wLXJlbW92ZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7cmluZy1idWZmZXItbWF4LXNpemUmcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tcmluZy1idWZmZXItbWF4LXNpemUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSIiIG5hbWU9IkV4YW1wbGUgbGF1bmNoIGxpbmUiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sI2lkMzk2MjI4Ii8+CisgICAgPGtleXdvcmQgdHlwZT0iIiBuYW1lPSJFbGVtZW50IEluZm9ybWF0aW9uIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCNpZDQwODg5NCIvPgorICAgIDxrZXl3b3JkIHR5cGU9IiIgbmFtZT0iRWxlbWVudCBQYWRzIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCNpZDQwODk1NiIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFRlZSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwjR3N0VGVlLXN0cnVjdCIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0VGVlUHVsbE1vZGUiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sI0dzdFRlZVB1bGxNb2RlIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtoYXMtY2hhaW4mcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sI0dzdFRlZS0taGFzLWNoYWluIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtoYXMtc2luay1sb29wJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCNHc3RUZWUtLWhhcy1zaW5rLWxvb3AiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O2xhc3QtbWVzc2FnZSZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwjR3N0VGVlLS1sYXN0LW1lc3NhZ2UiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O251bS1zcmMtcGFkcyZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwjR3N0VGVlLS1udW0tc3JjLXBhZHMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O3NpbGVudCZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwjR3N0VGVlLS1zaWxlbnQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O3B1bGwtbW9kZSZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwjR3N0VGVlLS1wdWxsLW1vZGUiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O2FsbG9jLXBhZCZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwjR3N0VGVlLS1hbGxvYy1wYWQiLz4KKyAgICA8a2V5d29yZCB0eXBlPSIiIG5hbWU9IkVsZW1lbnQgSW5mb3JtYXRpb24iIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLmh0bWwjaWQ0MDgzMDciLz4KKyAgICA8a2V5d29yZCB0eXBlPSIiIG5hbWU9IkVsZW1lbnQgUGFkcyIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuaHRtbCNpZDQwODM2OSIvPgorICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFR5cGVGaW5kRWxlbWVudCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuaHRtbCNHc3RUeXBlRmluZEVsZW1lbnQtc3RydWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtjYXBzJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5odG1sI0dzdFR5cGVGaW5kRWxlbWVudC0tY2FwcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUgJnF1b3Q7bWF4aW11bSZxdW90OyBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuaHRtbCNHc3RUeXBlRmluZEVsZW1lbnQtLW1heGltdW0iLz4KKyAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlICZxdW90O21pbmltdW0mcXVvdDsgcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLmh0bWwjR3N0VHlwZUZpbmRFbGVtZW50LS1taW5pbXVtIi8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtmb3JjZS1jYXBzJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5odG1sI0dzdFR5cGVGaW5kRWxlbWVudC0tZm9yY2UtY2FwcyIvPgorICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlICZxdW90O2hhdmUtdHlwZSZxdW90OyBzaWduYWwiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLmh0bWwjR3N0VHlwZUZpbmRFbGVtZW50LWhhdmUtdHlwZSIvPgorICAgIDxrZXl3b3JkIHR5cGU9IiIgbmFtZT0iRWxlbWVudCBJbmZvcm1hdGlvbiIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUuaHRtbCNpZDM3NDA5NiIvPgorICAgIDxrZXl3b3JkIHR5cGU9IiIgbmFtZT0iRWxlbWVudCBQYWRzIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy12YWx2ZS5odG1sI2lkNDA4MDgwIi8+CisgICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0VmFsdmUiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXZhbHZlLmh0bWwjR3N0VmFsdmUtc3RydWN0Ii8+CisgICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSAmcXVvdDtkcm9wJnF1b3Q7IHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy12YWx2ZS5odG1sI0dzdFZhbHZlLS1kcm9wIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkZBS0VfU1JDX0RBVEFfQUxMT0NBVEUiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNGQUtFLVNSQy1EQVRBLUFMTE9DQVRFOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iRkFLRV9TUkNfREFUQV9TVUJCVUZGRVIiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNGQUtFLVNSQy1EQVRBLVNVQkJVRkZFUjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkZBS0VfU1JDX0ZJTExUWVBFX05PVEhJTkciIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNGQUtFLVNSQy1GSUxMVFlQRS1OT1RISU5HOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iRkFLRV9TUkNfRklMTFRZUEVfWkVSTyIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0ZBS0UtU1JDLUZJTExUWVBFLVpFUk86Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJGQUtFX1NSQ19GSUxMVFlQRV9SQU5ET00iIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNGQUtFLVNSQy1GSUxMVFlQRS1SQU5ET006Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJGQUtFX1NSQ19GSUxMVFlQRV9QQVRURVJOIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjRkFLRS1TUkMtRklMTFRZUEUtUEFUVEVSTjpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkZBS0VfU1JDX0ZJTExUWVBFX1BBVFRFUk5fQ09OVCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0ZBS0UtU1JDLUZJTExUWVBFLVBBVFRFUk4tQ09OVDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkZBS0VfU1JDX0ZJUlNUX0xBU1RfTE9PUCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0ZBS0UtU1JDLUZJUlNULUxBU1QtTE9PUDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkZBS0VfU1JDX0xBU1RfRklSU1RfTE9PUCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0ZBS0UtU1JDLUxBU1QtRklSU1QtTE9PUDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkZBS0VfU1JDX1BJTkdfUE9ORyIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0ZBS0UtU1JDLVBJTkctUE9ORzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkZBS0VfU1JDX09SREVSRURfUkFORE9NIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjRkFLRS1TUkMtT1JERVJFRC1SQU5ET006Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJGQUtFX1NSQ19SQU5ET00iIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNGQUtFLVNSQy1SQU5ET006Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJGQUtFX1NSQ19QQVRURVJOX0xPT1AiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNGQUtFLVNSQy1QQVRURVJOLUxPT1A6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJGQUtFX1NSQ19QSU5HX1BPTkdfUEFUVEVSTiIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0ZBS0UtU1JDLVBJTkctUE9ORy1QQVRURVJOOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iRkFLRV9TUkNfR0VUX0FMV0FZU19TVUNFRURTIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjRkFLRS1TUkMtR0VULUFMV0FZUy1TVUNFRURTOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iRkFLRV9TUkNfU0laRVRZUEVfRU1QVFkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNGQUtFLVNSQy1TSVpFVFlQRS1FTVBUWTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkZBS0VfU1JDX1NJWkVUWVBFX0ZJWEVEIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjRkFLRS1TUkMtU0laRVRZUEUtRklYRUQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJGQUtFX1NSQ19TSVpFVFlQRV9SQU5ET00iIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNGQUtFLVNSQy1TSVpFVFlQRS1SQU5ET006Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJGQUtFX1NJTktfU1RBVEVfRVJST1JfTk9ORSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNGQUtFLVNJTkstU1RBVEUtRVJST1ItTk9ORTpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkZBS0VfU0lOS19TVEFURV9FUlJPUl9OVUxMX1JFQURZIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0ZBS0UtU0lOSy1TVEFURS1FUlJPUi1OVUxMLVJFQURZOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iRkFLRV9TSU5LX1NUQVRFX0VSUk9SX1JFQURZX1BBVVNFRCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNGQUtFLVNJTkstU1RBVEUtRVJST1ItUkVBRFktUEFVU0VEOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iRkFLRV9TSU5LX1NUQVRFX0VSUk9SX1BBVVNFRF9QTEFZSU5HIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0ZBS0UtU0lOSy1TVEFURS1FUlJPUi1QQVVTRUQtUExBWUlORzpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkZBS0VfU0lOS19TVEFURV9FUlJPUl9QTEFZSU5HX1BBVVNFRCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNGQUtFLVNJTkstU1RBVEUtRVJST1ItUExBWUlORy1QQVVTRUQ6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJGQUtFX1NJTktfU1RBVEVfRVJST1JfUEFVU0VEX1JFQURZIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0ZBS0UtU0lOSy1TVEFURS1FUlJPUi1QQVVTRUQtUkVBRFk6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJGQUtFX1NJTktfU1RBVEVfRVJST1JfUkVBRFlfTlVMTCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNGQUtFLVNJTkstU1RBVEUtRVJST1ItUkVBRFktTlVMTDpDQVBTIi8+CisgICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9RVUVVRV9OT19MRUFLIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dTVC1RVUVVRS1OTy1MRUFLOkNBUFMiLz4KKyAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1FVRVVFX0xFQUtfVVBTVFJFQU0iIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR1NULVFVRVVFLUxFQUstVVBTVFJFQU06Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUVVFVUVfTEVBS19ET1dOU1RSRUFNIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dTVC1RVUVVRS1MRUFLLURPV05TVFJFQU06Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVEVFX1BVTExfTU9ERV9ORVZFUiIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwjR1NULVRFRS1QVUxMLU1PREUtTkVWRVI6Q0FQUyIvPgorICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVEVFX1BVTExfTU9ERV9TSU5HTEUiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sI0dTVC1URUUtUFVMTC1NT0RFLVNJTkdMRTpDQVBTIi8+CisgIDwvZnVuY3Rpb25zPgorPC9ib29rPgpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvaG9tZS5wbmcgYi9kb2NzL3BsdWdpbnMvaHRtbC9ob21lLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzAwMzYxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wbHVnaW5zL2h0bWwvaG9tZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvaW5kZXguaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY2MzA3MAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvcGx1Z2lucy9odG1sL2luZGV4Lmh0bWwKQEAgLTAsMCArMSw5NSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorPHRpdGxlPkdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMC4xMSBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMC4xMSBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3RyZWFtZXIgRWxlbWVudHMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjE4IChYTUwgbW9kZSkiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzxkaXYgY2xhc3M9ImJvb2siPgorPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKzxkaXY+Cis8ZGl2Pjx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMCI+PHRyPjx0aCB2YWxpZ249Im1pZGRsZSI+PHAgY2xhc3M9InRpdGxlIj5HU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDAuMTEgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC9wPjwvdGg+PC90cj48L3RhYmxlPjwvZGl2PgorPGRpdj48cCBjbGFzcz0icmVsZWFzZWluZm8iPgorICAgICAgZm9yIEdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMC4xMSAoMC4xMS4xKQorICAgICAgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgb24tbGluZSBhdAorICAgICAgPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXItcGx1Z2lucy9odG1sLyIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXItcGx1Z2lucy9odG1sLzwvYT4uCisgICAgPC9wPjwvZGl2PgorPC9kaXY+Cis8aHI+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InRvYyI+PGRsPgorPGR0PjxzcGFuIGNsYXNzPSJjaGFwdGVyIj48YSBocmVmPSJjaDAxLmh0bWwiPmdzdHJlYW1lciBFbGVtZW50czwvYT48L3NwYW4+PC9kdD4KKzxkZD48ZGw+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5odG1sIj5jYXBzZmlsdGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBQYXNzIGRhdGEgd2l0aG91dCBtb2RpZmljYXRpb24sIGxpbWl0aW5nIGZvcm1hdHM8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCI+ZmFrZXNyYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgUHVzaCBlbXB0eSAobm8gZGF0YSkgYnVmZmVycyBhcm91bmQ8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwiPmZha2VzaW5rPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBCbGFjayBob2xlIGZvciBkYXRhPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsuaHRtbCI+ZmRzaW5rPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBXcml0ZSBkYXRhIHRvIGEgZmlsZSBkZXNjcmlwdG9yPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5odG1sIj5mZHNyYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgUmVhZCBmcm9tIGEgZmlsZSBkZXNjcmlwdG9yPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmh0bWwiPmZpbGVzcmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFJlYWQgZnJvbSBhcmJpdHJhcnkgcG9pbnQgaW4gYSBmaWxlPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5odG1sIj5maWxlc2luazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgV3JpdGUgc3RyZWFtIHRvIGEgZmlsZTwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZnVubmVsLmh0bWwiPmZ1bm5lbDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgTi10by0xIHBpcGUgZml0dGluZzwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCI+aWRlbnRpdHk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFBhc3MgZGF0YSB3aXRob3V0IG1vZGlmaWNhdGlvbjwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IuaHRtbCI+aW5wdXQtc2VsZWN0b3I8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIE4tdG8tMSBpbnB1dCBzdHJlYW0gc2VsZWN0b3I8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCI+bXVsdGlxdWV1ZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgTXVsdGlwbGUgZGF0YSBxdWV1ZTwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLmh0bWwiPm91dHB1dC1zZWxlY3RvcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgMS10by1OIG91dHB1dCBzdHJlYW0gc2VsZWN0b3I8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwiPnF1ZXVlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBTaW1wbGUgZGF0YSBxdWV1ZTwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwiPnF1ZXVlMjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgU2ltcGxlIGRhdGEgcXVldWU8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sIj50ZWU8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIDEtdG8tTiBwaXBlIGZpdHRpbmc8L3NwYW4+Cis8L2R0PgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLmh0bWwiPnR5cGVmaW5kPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBGaW5kcyB0aGUgbWVkaWEgdHlwZSBvZiBhIHN0cmVhbTwvc3Bhbj4KKzwvZHQ+Cis8ZHQ+Cis8c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUuaHRtbCI+dmFsdmU8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIERyb3BzIGJ1ZmZlcnMgYW5kIGV2ZW50cyBvciBsZXRzIHRoZW0gdGhyb3VnaDwvc3Bhbj4KKzwvZHQ+Cis8L2RsPjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9ImNoYXB0ZXIiPjxhIGhyZWY9ImNoMDIuaHRtbCI+Z3N0cmVhbWVyIFBsdWdpbnM8L2E+PC9zcGFuPjwvZHQ+Cis8ZGQ+PGRsPgorPGR0PgorPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXBsdWdpbi1jb3JlZWxlbWVudHMuaHRtbCI+Y29yZWVsZW1lbnRzPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCA8YSBuYW1lPSJwbHVnaW4tY29yZWVsZW1lbnRzIj48L2E+c3RhbmRhcmQgR1N0cmVhbWVyIGVsZW1lbnRzPC9zcGFuPgorPC9kdD4KKzxkdD4KKzxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWluZGV4ZXJzLmh0bWwiPmNvcmVpbmRleGVyczwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgPGEgbmFtZT0icGx1Z2luLWNvcmVpbmRleGVycyI+PC9hPkdTdHJlYW1lciBjb3JlIGluZGV4ZXJzPC9zcGFuPgorPC9kdD4KKzwvZGw+PC9kZD4KKzwvZGw+PC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZvb3RlciI+Cis8aHI+CisgICAgICAgICAgR2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMTg8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9pbmRleC5zZ21sIGIvZG9jcy9wbHVnaW5zL2h0bWwvaW5kZXguc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDQyZjU4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wbHVnaW5zL2h0bWwvaW5kZXguc2dtbApAQCAtMCwwICsxLDM0MCBAQAorPE9OTElORSBocmVmPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXItcGx1Z2lucy9odG1sLyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1jYXBzZmlsdGVyIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuaHRtbCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1jYXBzZmlsdGVyLnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1jYXBzZmlsdGVyLnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9IkdzdENhcHNGaWx0ZXIiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5odG1sI0dzdENhcHNGaWx0ZXIiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5vYmplY3QtaGllcmFyY2h5IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1jYXBzZmlsdGVyLm9iamVjdC1oaWVyYXJjaHkiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5wcm9wZXJ0aWVzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1jYXBzZmlsdGVyLnByb3BlcnRpZXMiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1jYXBzZmlsdGVyLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1jYXBzZmlsdGVyLmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RDYXBzRmlsdGVyLXN0cnVjdCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1jYXBzZmlsdGVyLmh0bWwjR3N0Q2Fwc0ZpbHRlci1zdHJ1Y3QiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5wcm9wZXJ0eS1kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1jYXBzZmlsdGVyLnByb3BlcnR5LWRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0Q2Fwc0ZpbHRlci0tY2FwcyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1jYXBzZmlsdGVyLmh0bWwjR3N0Q2Fwc0ZpbHRlci0tY2FwcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9IkdzdEZha2VTcmMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5vYmplY3QtaGllcmFyY2h5IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLm9iamVjdC1oaWVyYXJjaHkiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5wcm9wZXJ0aWVzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLnByb3BlcnRpZXMiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5zaWduYWxzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLnNpZ25hbHMiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RGYWtlU3JjLXN0cnVjdCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy1zdHJ1Y3QiPgorPEFOQ0hPUiBpZD0iR3N0RmFrZVNyY0RhdGFUeXBlIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjRGF0YVR5cGUiPgorPEFOQ0hPUiBpZD0iRkFLRS1TUkMtREFUQS1BTExPQ0FURTpDQVBTIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNGQUtFLVNSQy1EQVRBLUFMTE9DQVRFOkNBUFMiPgorPEFOQ0hPUiBpZD0iRkFLRS1TUkMtREFUQS1TVUJCVUZGRVI6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjRkFLRS1TUkMtREFUQS1TVUJCVUZGRVI6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHc3RGYWtlU3JjRmlsbFR5cGUiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmNGaWxsVHlwZSI+Cis8QU5DSE9SIGlkPSJGQUtFLVNSQy1GSUxMVFlQRS1OT1RISU5HOkNBUFMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0ZBS0UtU1JDLUZJTExUWVBFLU5PVEhJTkc6Q0FQUyI+Cis8QU5DSE9SIGlkPSJGQUtFLVNSQy1GSUxMVFlQRS1aRVJPOkNBUFMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0ZBS0UtU1JDLUZJTExUWVBFLVpFUk86Q0FQUyI+Cis8QU5DSE9SIGlkPSJGQUtFLVNSQy1GSUxMVFlQRS1SQU5ET006Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjRkFLRS1TUkMtRklMTFRZUEUtUkFORE9NOkNBUFMiPgorPEFOQ0hPUiBpZD0iRkFLRS1TUkMtRklMTFRZUEUtUEFUVEVSTjpDQVBTIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNGQUtFLVNSQy1GSUxMVFlQRS1QQVRURVJOOkNBUFMiPgorPEFOQ0hPUiBpZD0iRkFLRS1TUkMtRklMTFRZUEUtUEFUVEVSTi1DT05UOkNBUFMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0ZBS0UtU1JDLUZJTExUWVBFLVBBVFRFUk4tQ09OVDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdzdEZha2VTcmNPdXRwdXRUeXBlIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjT3V0cHV0VHlwZSI+Cis8QU5DSE9SIGlkPSJGQUtFLVNSQy1GSVJTVC1MQVNULUxPT1A6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjRkFLRS1TUkMtRklSU1QtTEFTVC1MT09QOkNBUFMiPgorPEFOQ0hPUiBpZD0iRkFLRS1TUkMtTEFTVC1GSVJTVC1MT09QOkNBUFMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0ZBS0UtU1JDLUxBU1QtRklSU1QtTE9PUDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkZBS0UtU1JDLVBJTkctUE9ORzpDQVBTIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNGQUtFLVNSQy1QSU5HLVBPTkc6Q0FQUyI+Cis8QU5DSE9SIGlkPSJGQUtFLVNSQy1PUkRFUkVELVJBTkRPTTpDQVBTIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNGQUtFLVNSQy1PUkRFUkVELVJBTkRPTTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkZBS0UtU1JDLVJBTkRPTTpDQVBTIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNGQUtFLVNSQy1SQU5ET006Q0FQUyI+Cis8QU5DSE9SIGlkPSJGQUtFLVNSQy1QQVRURVJOLUxPT1A6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjRkFLRS1TUkMtUEFUVEVSTi1MT09QOkNBUFMiPgorPEFOQ0hPUiBpZD0iRkFLRS1TUkMtUElORy1QT05HLVBBVFRFUk46Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjRkFLRS1TUkMtUElORy1QT05HLVBBVFRFUk46Q0FQUyI+Cis8QU5DSE9SIGlkPSJGQUtFLVNSQy1HRVQtQUxXQVlTLVNVQ0VFRFM6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjRkFLRS1TUkMtR0VULUFMV0FZUy1TVUNFRURTOkNBUFMiPgorPEFOQ0hPUiBpZD0iR3N0RmFrZVNyY1NpemVUeXBlIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjU2l6ZVR5cGUiPgorPEFOQ0hPUiBpZD0iRkFLRS1TUkMtU0laRVRZUEUtRU1QVFk6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjRkFLRS1TUkMtU0laRVRZUEUtRU1QVFk6Q0FQUyI+Cis8QU5DSE9SIGlkPSJGQUtFLVNSQy1TSVpFVFlQRS1GSVhFRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNGQUtFLVNSQy1TSVpFVFlQRS1GSVhFRDpDQVBTIj4KKzxBTkNIT1IgaWQ9IkZBS0UtU1JDLVNJWkVUWVBFLVJBTkRPTTpDQVBTIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNGQUtFLVNSQy1TSVpFVFlQRS1SQU5ET006Q0FQUyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLnByb3BlcnR5LWRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMucHJvcGVydHktZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RGYWtlU3JjLS1jYW4tYWN0aXZhdGUtcHVsbCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy0tY2FuLWFjdGl2YXRlLXB1bGwiPgorPEFOQ0hPUiBpZD0iR3N0RmFrZVNyYy0tY2FuLWFjdGl2YXRlLXB1c2giIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLWNhbi1hY3RpdmF0ZS1wdXNoIj4KKzxBTkNIT1IgaWQ9IkdzdEZha2VTcmMtLWRhdGEiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLWRhdGEiPgorPEFOQ0hPUiBpZD0iR3N0RmFrZVNyYy0tZGF0YXJhdGUiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLWRhdGFyYXRlIj4KKzxBTkNIT1IgaWQ9IkdzdEZha2VTcmMtLWR1bXAiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLWR1bXAiPgorPEFOQ0hPUiBpZD0iR3N0RmFrZVNyYy0tZmlsbHR5cGUiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLWZpbGx0eXBlIj4KKzxBTkNIT1IgaWQ9IkdzdEZha2VTcmMtLWlzLWxpdmUiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLWlzLWxpdmUiPgorPEFOQ0hPUiBpZD0iR3N0RmFrZVNyYy0tbGFzdC1tZXNzYWdlIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjLS1sYXN0LW1lc3NhZ2UiPgorPEFOQ0hPUiBpZD0iR3N0RmFrZVNyYy0tcGFyZW50c2l6ZSIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy0tcGFyZW50c2l6ZSI+Cis8QU5DSE9SIGlkPSJHc3RGYWtlU3JjLS1wYXR0ZXJuIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjLS1wYXR0ZXJuIj4KKzxBTkNIT1IgaWQ9IkdzdEZha2VTcmMtLXNpZ25hbC1oYW5kb2ZmcyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy0tc2lnbmFsLWhhbmRvZmZzIj4KKzxBTkNIT1IgaWQ9IkdzdEZha2VTcmMtLXNpbGVudCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy0tc2lsZW50Ij4KKzxBTkNIT1IgaWQ9IkdzdEZha2VTcmMtLXNpemVtYXgiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLXNpemVtYXgiPgorPEFOQ0hPUiBpZD0iR3N0RmFrZVNyYy0tc2l6ZW1pbiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy0tc2l6ZW1pbiI+Cis8QU5DSE9SIGlkPSJHc3RGYWtlU3JjLS1zaXpldHlwZSIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy0tc2l6ZXR5cGUiPgorPEFOQ0hPUiBpZD0iR3N0RmFrZVNyYy0tc3luYyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy0tc3luYyI+Cis8QU5DSE9SIGlkPSJHc3RGYWtlU3JjLS1mb3JtYXQiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLWZvcm1hdCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLnNpZ25hbC1kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLnNpZ25hbC1kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdEZha2VTcmMtaGFuZG9mZiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy1oYW5kb2ZmIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuc2VlLWFsc28iIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuc2VlLWFsc28iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9IkdzdEZha2VTaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjR3N0RmFrZVNpbmsiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsub2JqZWN0LWhpZXJhcmNoeSIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLm9iamVjdC1oaWVyYXJjaHkiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsucHJvcGVydGllcyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLnByb3BlcnRpZXMiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuc2lnbmFscyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLnNpZ25hbHMiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RGYWtlU2luay1zdHJ1Y3QiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNHc3RGYWtlU2luay1zdHJ1Y3QiPgorPEFOQ0hPUiBpZD0iR3N0RmFrZVNpbmtTdGF0ZUVycm9yIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjR3N0RmFrZVNpbmtTdGF0ZUVycm9yIj4KKzxBTkNIT1IgaWQ9IkZBS0UtU0lOSy1TVEFURS1FUlJPUi1OT05FOkNBUFMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNGQUtFLVNJTkstU1RBVEUtRVJST1ItTk9ORTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkZBS0UtU0lOSy1TVEFURS1FUlJPUi1OVUxMLVJFQURZOkNBUFMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNGQUtFLVNJTkstU1RBVEUtRVJST1ItTlVMTC1SRUFEWTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkZBS0UtU0lOSy1TVEFURS1FUlJPUi1SRUFEWS1QQVVTRUQ6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0ZBS0UtU0lOSy1TVEFURS1FUlJPUi1SRUFEWS1QQVVTRUQ6Q0FQUyI+Cis8QU5DSE9SIGlkPSJGQUtFLVNJTkstU1RBVEUtRVJST1ItUEFVU0VELVBMQVlJTkc6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0ZBS0UtU0lOSy1TVEFURS1FUlJPUi1QQVVTRUQtUExBWUlORzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkZBS0UtU0lOSy1TVEFURS1FUlJPUi1QTEFZSU5HLVBBVVNFRDpDQVBTIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjRkFLRS1TSU5LLVNUQVRFLUVSUk9SLVBMQVlJTkctUEFVU0VEOkNBUFMiPgorPEFOQ0hPUiBpZD0iRkFLRS1TSU5LLVNUQVRFLUVSUk9SLVBBVVNFRC1SRUFEWTpDQVBTIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjRkFLRS1TSU5LLVNUQVRFLUVSUk9SLVBBVVNFRC1SRUFEWTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkZBS0UtU0lOSy1TVEFURS1FUlJPUi1SRUFEWS1OVUxMOkNBUFMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNGQUtFLVNJTkstU1RBVEUtRVJST1ItUkVBRFktTlVMTDpDQVBTIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLnByb3BlcnR5LWRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5wcm9wZXJ0eS1kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdEZha2VTaW5rLS1jYW4tYWN0aXZhdGUtcHVsbCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0dzdEZha2VTaW5rLS1jYW4tYWN0aXZhdGUtcHVsbCI+Cis8QU5DSE9SIGlkPSJHc3RGYWtlU2luay0tY2FuLWFjdGl2YXRlLXB1c2giIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNHc3RGYWtlU2luay0tY2FuLWFjdGl2YXRlLXB1c2giPgorPEFOQ0hPUiBpZD0iR3N0RmFrZVNpbmstLWR1bXAiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNHc3RGYWtlU2luay0tZHVtcCI+Cis8QU5DSE9SIGlkPSJHc3RGYWtlU2luay0tbGFzdC1tZXNzYWdlIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjR3N0RmFrZVNpbmstLWxhc3QtbWVzc2FnZSI+Cis8QU5DSE9SIGlkPSJHc3RGYWtlU2luay0tc2lnbmFsLWhhbmRvZmZzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjR3N0RmFrZVNpbmstLXNpZ25hbC1oYW5kb2ZmcyI+Cis8QU5DSE9SIGlkPSJHc3RGYWtlU2luay0tc2lsZW50IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjR3N0RmFrZVNpbmstLXNpbGVudCI+Cis8QU5DSE9SIGlkPSJHc3RGYWtlU2luay0tc3RhdGUtZXJyb3IiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNHc3RGYWtlU2luay0tc3RhdGUtZXJyb3IiPgorPEFOQ0hPUiBpZD0iR3N0RmFrZVNpbmstLW51bS1idWZmZXJzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjR3N0RmFrZVNpbmstLW51bS1idWZmZXJzIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLnNpZ25hbC1kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuc2lnbmFsLWRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0RmFrZVNpbmstaGFuZG9mZiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0dzdEZha2VTaW5rLWhhbmRvZmYiPgorPEFOQ0hPUiBpZD0iR3N0RmFrZVNpbmstcHJlcm9sbC1oYW5kb2ZmIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjR3N0RmFrZVNpbmstcHJlcm9sbC1oYW5kb2ZmIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLnNlZS1hbHNvIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuc2VlLWFsc28iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZkc2luay5odG1sIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLWZkc2luay5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsuc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iR3N0RmRTaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZkc2luay5odG1sI0dzdEZkU2luayI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsub2JqZWN0LWhpZXJhcmNoeSIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsub2JqZWN0LWhpZXJhcmNoeSI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsucHJvcGVydGllcyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsucHJvcGVydGllcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsuZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rLmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLWZkc2luay5kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZkc2luay5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWZkc2luay5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdEZkU2luay1zdHJ1Y3QiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rLmh0bWwjR3N0RmRTaW5rLXN0cnVjdCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsucHJvcGVydHktZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsucHJvcGVydHktZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RGZFNpbmstLWZkIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZkc2luay5odG1sI0dzdEZkU2luay0tZmQiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rLnNlZS1hbHNvIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZkc2luay5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWZkc2luay5zZWUtYWxzbyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNyYyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5odG1sIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLWZkc3JjLnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZkc3JjLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iR3N0RmRTcmMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuaHRtbCNHc3RGZFNyYyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5vYmplY3QtaGllcmFyY2h5IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZkc3JjLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMub2JqZWN0LWhpZXJhcmNoeSI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZkc3JjLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5wcm9wZXJ0aWVzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZkc3JjLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMucHJvcGVydGllcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWZkc3JjLmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLWZkc3JjLmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdEZkU3JjLXN0cnVjdCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5odG1sI0dzdEZkU3JjLXN0cnVjdCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5wcm9wZXJ0eS1kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZkc3JjLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMucHJvcGVydHktZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RGZFNyYy0tZmQiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuaHRtbCNHc3RGZFNyYy0tZmQiPgorPEFOQ0hPUiBpZD0iR3N0RmRTcmMtLXRpbWVvdXQiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuaHRtbCNHc3RGZFNyYy0tdGltZW91dCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5zZWUtYWxzbyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWZkc3JjLnNlZS1hbHNvIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5odG1sIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iR3N0RmlsZVNyYyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmh0bWwjR3N0RmlsZVNyYyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLm9iamVjdC1oaWVyYXJjaHkiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMub2JqZWN0LWhpZXJhcmNoeSI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLnByb3BlcnRpZXMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMucHJvcGVydGllcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdEZpbGVTcmMtc3RydWN0IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuaHRtbCNHc3RGaWxlU3JjLXN0cnVjdCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLnByb3BlcnR5LWRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMucHJvcGVydHktZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RGaWxlU3JjLS1mZCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmh0bWwjR3N0RmlsZVNyYy0tZmQiPgorPEFOQ0hPUiBpZD0iR3N0RmlsZVNyYy0tbG9jYXRpb24iIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5odG1sI0dzdEZpbGVTcmMtLWxvY2F0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdEZpbGVTcmMtLW1tYXBzaXplIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuaHRtbCNHc3RGaWxlU3JjLS1tbWFwc2l6ZSI+Cis8QU5DSE9SIGlkPSJHc3RGaWxlU3JjLS10b3VjaCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmh0bWwjR3N0RmlsZVNyYy0tdG91Y2giPgorPEFOQ0hPUiBpZD0iR3N0RmlsZVNyYy0tdXNlLW1tYXAiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5odG1sI0dzdEZpbGVTcmMtLXVzZS1tbWFwIj4KKzxBTkNIT1IgaWQ9IkdzdEZpbGVTcmMtLXNlcXVlbnRpYWwiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5odG1sI0dzdEZpbGVTcmMtLXNlcXVlbnRpYWwiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5zZWUtYWxzbyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5zZWUtYWxzbyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5odG1sIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsuc3lub3BzaXMiPgorPEFOQ0hPUiBpZD0iR3N0RmlsZVNpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsuaHRtbCNHc3RGaWxlU2luayI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5vYmplY3QtaGllcmFyY2h5IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsub2JqZWN0LWhpZXJhcmNoeSI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5wcm9wZXJ0aWVzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsucHJvcGVydGllcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdEZpbGVTaW5rLXN0cnVjdCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5odG1sI0dzdEZpbGVTaW5rLXN0cnVjdCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5wcm9wZXJ0eS1kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsucHJvcGVydHktZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RGaWxlU2luay0tbG9jYXRpb24iIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsuaHRtbCNHc3RGaWxlU2luay0tbG9jYXRpb24iPgorPEFOQ0hPUiBpZD0iR3N0RmlsZVNpbmstLWJ1ZmZlci1tb2RlIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmh0bWwjR3N0RmlsZVNpbmstLWJ1ZmZlci1tb2RlIj4KKzxBTkNIT1IgaWQ9IkdzdEZpbGVTaW5rLS1idWZmZXItc2l6ZSIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5odG1sI0dzdEZpbGVTaW5rLS1idWZmZXItc2l6ZSI+Cis8QU5DSE9SIGlkPSJHc3RGaWxlU2luay0tYXBwZW5kIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmh0bWwjR3N0RmlsZVNpbmstLWFwcGVuZCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5zZWUtYWxzbyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLnNlZS1hbHNvIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLWZ1bm5lbCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mdW5uZWwuaHRtbCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1mdW5uZWwuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZnVubmVsLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtZnVubmVsLnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9IkdzdEZ1bm5lbCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mdW5uZWwuaHRtbCNHc3RGdW5uZWwiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtZnVubmVsLm9iamVjdC1oaWVyYXJjaHkiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtZnVubmVsLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtZnVubmVsLm9iamVjdC1oaWVyYXJjaHkiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtZnVubmVsLmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZ1bm5lbC5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWZ1bm5lbC5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1mdW5uZWwuZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1mdW5uZWwuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1mdW5uZWwuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RGdW5uZWwtc3RydWN0IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWZ1bm5lbC5odG1sI0dzdEZ1bm5lbC1zdHJ1Y3QiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5LnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9IkdzdElkZW50aXR5IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lmh0bWwjR3N0SWRlbnRpdHkiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkub2JqZWN0LWhpZXJhcmNoeSIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lm9iamVjdC1oaWVyYXJjaHkiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkucHJvcGVydGllcyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5LnByb3BlcnRpZXMiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuc2lnbmFscyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5LnNpZ25hbHMiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RJZGVudGl0eS1zdHJ1Y3QiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS1zdHJ1Y3QiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkucHJvcGVydHktZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5LnByb3BlcnR5LWRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0SWRlbnRpdHktLWNoZWNrLXBlcmZlY3QiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tY2hlY2stcGVyZmVjdCI+Cis8QU5DSE9SIGlkPSJHc3RJZGVudGl0eS0tZGF0YXJhdGUiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tZGF0YXJhdGUiPgorPEFOQ0hPUiBpZD0iR3N0SWRlbnRpdHktLWRyb3AtcHJvYmFiaWxpdHkiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tZHJvcC1wcm9iYWJpbGl0eSI+Cis8QU5DSE9SIGlkPSJHc3RJZGVudGl0eS0tZHVtcCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI0dzdElkZW50aXR5LS1kdW1wIj4KKzxBTkNIT1IgaWQ9IkdzdElkZW50aXR5LS1lcnJvci1hZnRlciIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI0dzdElkZW50aXR5LS1lcnJvci1hZnRlciI+Cis8QU5DSE9SIGlkPSJHc3RJZGVudGl0eS0tbGFzdC1tZXNzYWdlIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lmh0bWwjR3N0SWRlbnRpdHktLWxhc3QtbWVzc2FnZSI+Cis8QU5DSE9SIGlkPSJHc3RJZGVudGl0eS0tc2lsZW50IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lmh0bWwjR3N0SWRlbnRpdHktLXNpbGVudCI+Cis8QU5DSE9SIGlkPSJHc3RJZGVudGl0eS0tc2luZ2xlLXNlZ21lbnQiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tc2luZ2xlLXNlZ21lbnQiPgorPEFOQ0hPUiBpZD0iR3N0SWRlbnRpdHktLXNsZWVwLXRpbWUiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tc2xlZXAtdGltZSI+Cis8QU5DSE9SIGlkPSJHc3RJZGVudGl0eS0tc3luYyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI0dzdElkZW50aXR5LS1zeW5jIj4KKzxBTkNIT1IgaWQ9IkdzdElkZW50aXR5LS1jaGVjay1pbXBlcmZlY3Qtb2Zmc2V0IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lmh0bWwjR3N0SWRlbnRpdHktLWNoZWNrLWltcGVyZmVjdC1vZmZzZXQiPgorPEFOQ0hPUiBpZD0iR3N0SWRlbnRpdHktLWNoZWNrLWltcGVyZmVjdC10aW1lc3RhbXAiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tY2hlY2staW1wZXJmZWN0LXRpbWVzdGFtcCI+Cis8QU5DSE9SIGlkPSJHc3RJZGVudGl0eS0tc2lnbmFsLWhhbmRvZmZzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lmh0bWwjR3N0SWRlbnRpdHktLXNpZ25hbC1oYW5kb2ZmcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5zaWduYWwtZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5LnNpZ25hbC1kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdElkZW50aXR5LWhhbmRvZmYiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS1oYW5kb2ZmIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3Iuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJHc3RJbnB1dFNlbGVjdG9yIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwjR3N0SW5wdXRTZWxlY3RvciI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5vYmplY3QtaGllcmFyY2h5IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3Iub2JqZWN0LWhpZXJhcmNoeSI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5wcm9wZXJ0aWVzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IucHJvcGVydGllcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5zaWduYWxzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3Iuc2lnbmFscyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdElucHV0U2VsZWN0b3Itc3RydWN0IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwjR3N0SW5wdXRTZWxlY3Rvci1zdHJ1Y3QiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IucHJvcGVydHktZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLnByb3BlcnR5LWRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0SW5wdXRTZWxlY3Rvci0tYWN0aXZlLXBhZCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5odG1sI0dzdElucHV0U2VsZWN0b3ItLWFjdGl2ZS1wYWQiPgorPEFOQ0hPUiBpZD0iR3N0SW5wdXRTZWxlY3Rvci0tbi1wYWRzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwjR3N0SW5wdXRTZWxlY3Rvci0tbi1wYWRzIj4KKzxBTkNIT1IgaWQ9IkdzdElucHV0U2VsZWN0b3ItLXNlbGVjdC1hbGwiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IuaHRtbCNHc3RJbnB1dFNlbGVjdG9yLS1zZWxlY3QtYWxsIj4KKzxBTkNIT1IgaWQ9IkdzdElucHV0U2VsZWN0b3ItLXN5bmMtc3RyZWFtcyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5odG1sI0dzdElucHV0U2VsZWN0b3ItLXN5bmMtc3RyZWFtcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5zaWduYWwtZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5odG1sI2dzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLnNpZ25hbC1kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdElucHV0U2VsZWN0b3ItYmxvY2siIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IuaHRtbCNHc3RJbnB1dFNlbGVjdG9yLWJsb2NrIj4KKzxBTkNIT1IgaWQ9IkdzdElucHV0U2VsZWN0b3Itc3dpdGNoIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwjR3N0SW5wdXRTZWxlY3Rvci1zd2l0Y2giPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3Iuc2VlLWFsc28iIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5zZWUtYWxzbyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9IkdzdE11bHRpUXVldWUiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5vYmplY3QtaGllcmFyY2h5IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLm9iamVjdC1oaWVyYXJjaHkiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5wcm9wZXJ0aWVzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLnByb3BlcnRpZXMiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5zaWduYWxzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLnNpZ25hbHMiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI2dzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RNdWx0aVF1ZXVlLXN0cnVjdCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS1zdHJ1Y3QiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5wcm9wZXJ0eS1kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLnByb3BlcnR5LWRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0TXVsdGlRdWV1ZS0tZXh0cmEtc2l6ZS1idWZmZXJzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS1leHRyYS1zaXplLWJ1ZmZlcnMiPgorPEFOQ0hPUiBpZD0iR3N0TXVsdGlRdWV1ZS0tZXh0cmEtc2l6ZS1ieXRlcyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS0tZXh0cmEtc2l6ZS1ieXRlcyI+Cis8QU5DSE9SIGlkPSJHc3RNdWx0aVF1ZXVlLS1leHRyYS1zaXplLXRpbWUiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtLWV4dHJhLXNpemUtdGltZSI+Cis8QU5DSE9SIGlkPSJHc3RNdWx0aVF1ZXVlLS1tYXgtc2l6ZS1idWZmZXJzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS1tYXgtc2l6ZS1idWZmZXJzIj4KKzxBTkNIT1IgaWQ9IkdzdE11bHRpUXVldWUtLW1heC1zaXplLWJ5dGVzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS1tYXgtc2l6ZS1ieXRlcyI+Cis8QU5DSE9SIGlkPSJHc3RNdWx0aVF1ZXVlLS1tYXgtc2l6ZS10aW1lIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS1tYXgtc2l6ZS10aW1lIj4KKzxBTkNIT1IgaWQ9IkdzdE11bHRpUXVldWUtLWhpZ2gtcGVyY2VudCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS0taGlnaC1wZXJjZW50Ij4KKzxBTkNIT1IgaWQ9IkdzdE11bHRpUXVldWUtLWxvdy1wZXJjZW50IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS1sb3ctcGVyY2VudCI+Cis8QU5DSE9SIGlkPSJHc3RNdWx0aVF1ZXVlLS11c2UtYnVmZmVyaW5nIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS11c2UtYnVmZmVyaW5nIj4KKzxBTkNIT1IgaWQ9IkdzdE11bHRpUXVldWUtLXN5bmMtYnktcnVubmluZy10aW1lIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS1zeW5jLWJ5LXJ1bm5pbmctdGltZSI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLnNpZ25hbC1kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLnNpZ25hbC1kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdE11bHRpUXVldWUtb3ZlcnJ1biIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS1vdmVycnVuIj4KKzxBTkNIT1IgaWQ9IkdzdE11bHRpUXVldWUtdW5kZXJydW4iIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtdW5kZXJydW4iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5zZWUtYWxzbyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5zZWUtYWxzbyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLmh0bWwiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5odG1sI2dzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJHc3RPdXRwdXRTZWxlY3RvciIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IuaHRtbCNHc3RPdXRwdXRTZWxlY3RvciI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3Iub2JqZWN0LWhpZXJhcmNoeSIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3Iub2JqZWN0LWhpZXJhcmNoeSI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IucHJvcGVydGllcyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IucHJvcGVydGllcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IuZGVzY3JpcHRpb24iIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5odG1sI2dzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdE91dHB1dFNlbGVjdG9yLXN0cnVjdCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IuaHRtbCNHc3RPdXRwdXRTZWxlY3Rvci1zdHJ1Y3QiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLnByb3BlcnR5LWRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLnByb3BlcnR5LWRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0T3V0cHV0U2VsZWN0b3ItLWFjdGl2ZS1wYWQiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLmh0bWwjR3N0T3V0cHV0U2VsZWN0b3ItLWFjdGl2ZS1wYWQiPgorPEFOQ0hPUiBpZD0iR3N0T3V0cHV0U2VsZWN0b3ItLXJlc2VuZC1sYXRlc3QiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLmh0bWwjR3N0T3V0cHV0U2VsZWN0b3ItLXJlc2VuZC1sYXRlc3QiPgorPEFOQ0hPUiBpZD0iR3N0T3V0cHV0U2VsZWN0b3ItLXBhZC1uZWdvdGlhdGlvbi1tb2RlIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5odG1sI0dzdE91dHB1dFNlbGVjdG9yLS1wYWQtbmVnb3RpYXRpb24tbW9kZSI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3Iuc2VlLWFsc28iIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLnNlZS1hbHNvIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJHc3RRdWV1ZSIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLm9iamVjdC1oaWVyYXJjaHkiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5vYmplY3QtaGllcmFyY2h5Ij4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLnByb3BlcnRpZXMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5wcm9wZXJ0aWVzIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLnNpZ25hbHMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5zaWduYWxzIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI2dzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0UXVldWUtc3RydWN0IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtc3RydWN0Ij4KKzxBTkNIT1IgaWQ9IkdzdFF1ZXVlTGVha3kiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZUxlYWt5Ij4KKzxBTkNIT1IgaWQ9IkdTVC1RVUVVRS1OTy1MRUFLOkNBUFMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHU1QtUVVFVUUtTk8tTEVBSzpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1RVUVVRS1MRUFLLVVQU1RSRUFNOkNBUFMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHU1QtUVVFVUUtTEVBSy1VUFNUUkVBTTpDQVBTIj4KKzxBTkNIT1IgaWQ9IkdTVC1RVUVVRS1MRUFLLURPV05TVFJFQU06Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dTVC1RVUVVRS1MRUFLLURPV05TVFJFQU06Q0FQUyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5wcm9wZXJ0eS1kZXRhaWxzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUucHJvcGVydHktZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RRdWV1ZS0tY3VycmVudC1sZXZlbC1idWZmZXJzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtLWN1cnJlbnQtbGV2ZWwtYnVmZmVycyI+Cis8QU5DSE9SIGlkPSJHc3RRdWV1ZS0tY3VycmVudC1sZXZlbC1ieXRlcyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLS1jdXJyZW50LWxldmVsLWJ5dGVzIj4KKzxBTkNIT1IgaWQ9IkdzdFF1ZXVlLS1jdXJyZW50LWxldmVsLXRpbWUiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS0tY3VycmVudC1sZXZlbC10aW1lIj4KKzxBTkNIT1IgaWQ9IkdzdFF1ZXVlLS1sZWFreSIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLS1sZWFreSI+Cis8QU5DSE9SIGlkPSJHc3RRdWV1ZS0tbWF4LXNpemUtYnVmZmVycyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLS1tYXgtc2l6ZS1idWZmZXJzIj4KKzxBTkNIT1IgaWQ9IkdzdFF1ZXVlLS1tYXgtc2l6ZS1ieXRlcyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLS1tYXgtc2l6ZS1ieXRlcyI+Cis8QU5DSE9SIGlkPSJHc3RRdWV1ZS0tbWF4LXNpemUtdGltZSIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLS1tYXgtc2l6ZS10aW1lIj4KKzxBTkNIT1IgaWQ9IkdzdFF1ZXVlLS1taW4tdGhyZXNob2xkLWJ1ZmZlcnMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS0tbWluLXRocmVzaG9sZC1idWZmZXJzIj4KKzxBTkNIT1IgaWQ9IkdzdFF1ZXVlLS1taW4tdGhyZXNob2xkLWJ5dGVzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtLW1pbi10aHJlc2hvbGQtYnl0ZXMiPgorPEFOQ0hPUiBpZD0iR3N0UXVldWUtLW1pbi10aHJlc2hvbGQtdGltZSIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLS1taW4tdGhyZXNob2xkLXRpbWUiPgorPEFOQ0hPUiBpZD0iR3N0UXVldWUtLXNpbGVudCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLS1zaWxlbnQiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuc2lnbmFsLWRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5zaWduYWwtZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RRdWV1ZS1vdmVycnVuIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtb3ZlcnJ1biI+Cis8QU5DSE9SIGlkPSJHc3RRdWV1ZS1ydW5uaW5nIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtcnVubmluZyI+Cis8QU5DSE9SIGlkPSJHc3RRdWV1ZS11bmRlcnJ1biIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLXVuZGVycnVuIj4KKzxBTkNIT1IgaWQ9IkdzdFF1ZXVlLXB1c2hpbmciIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS1wdXNoaW5nIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9IkdzdFF1ZXVlMiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTIiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLm9iamVjdC1oaWVyYXJjaHkiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLm9iamVjdC1oaWVyYXJjaHkiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLnByb3BlcnRpZXMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLnByb3BlcnRpZXMiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI2dzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5kZXNjcmlwdGlvbiI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RRdWV1ZTItc3RydWN0IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi1zdHJ1Y3QiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLnByb3BlcnR5LWRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLnByb3BlcnR5LWRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0UXVldWUyLS1jdXJyZW50LWxldmVsLWJ1ZmZlcnMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwjR3N0UXVldWUyLS1jdXJyZW50LWxldmVsLWJ1ZmZlcnMiPgorPEFOQ0hPUiBpZD0iR3N0UXVldWUyLS1jdXJyZW50LWxldmVsLWJ5dGVzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tY3VycmVudC1sZXZlbC1ieXRlcyI+Cis8QU5DSE9SIGlkPSJHc3RRdWV1ZTItLWN1cnJlbnQtbGV2ZWwtdGltZSIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLWN1cnJlbnQtbGV2ZWwtdGltZSI+Cis8QU5DSE9SIGlkPSJHc3RRdWV1ZTItLWhpZ2gtcGVyY2VudCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLWhpZ2gtcGVyY2VudCI+Cis8QU5DSE9SIGlkPSJHc3RRdWV1ZTItLWxvdy1wZXJjZW50IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tbG93LXBlcmNlbnQiPgorPEFOQ0hPUiBpZD0iR3N0UXVldWUyLS1tYXgtc2l6ZS1idWZmZXJzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tbWF4LXNpemUtYnVmZmVycyI+Cis8QU5DSE9SIGlkPSJHc3RRdWV1ZTItLW1heC1zaXplLWJ5dGVzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tbWF4LXNpemUtYnl0ZXMiPgorPEFOQ0hPUiBpZD0iR3N0UXVldWUyLS1tYXgtc2l6ZS10aW1lIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tbWF4LXNpemUtdGltZSI+Cis8QU5DSE9SIGlkPSJHc3RRdWV1ZTItLXRlbXAtbG9jYXRpb24iIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwjR3N0UXVldWUyLS10ZW1wLWxvY2F0aW9uIj4KKzxBTkNIT1IgaWQ9IkdzdFF1ZXVlMi0tdGVtcC10ZW1wbGF0ZSIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLXRlbXAtdGVtcGxhdGUiPgorPEFOQ0hPUiBpZD0iR3N0UXVldWUyLS11c2UtYnVmZmVyaW5nIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tdXNlLWJ1ZmZlcmluZyI+Cis8QU5DSE9SIGlkPSJHc3RRdWV1ZTItLXVzZS1yYXRlLWVzdGltYXRlIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tdXNlLXJhdGUtZXN0aW1hdGUiPgorPEFOQ0hPUiBpZD0iR3N0UXVldWUyLS10ZW1wLXJlbW92ZSIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLXRlbXAtcmVtb3ZlIj4KKzxBTkNIT1IgaWQ9IkdzdFF1ZXVlMi0tcmluZy1idWZmZXItbWF4LXNpemUiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwjR3N0UXVldWUyLS1yaW5nLWJ1ZmZlci1tYXgtc2l6ZSI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLnN5bm9wc2lzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sI2dzdHJlYW1lci1wbHVnaW5zLXRlZS5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJHc3RUZWUiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwjR3N0VGVlIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLXRlZS5vYmplY3QtaGllcmFyY2h5IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sI2dzdHJlYW1lci1wbHVnaW5zLXRlZS5vYmplY3QtaGllcmFyY2h5Ij4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLXRlZS5wcm9wZXJ0aWVzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sI2dzdHJlYW1lci1wbHVnaW5zLXRlZS5wcm9wZXJ0aWVzIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLXRlZS5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy10ZWUuZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0VGVlLXN0cnVjdCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCNHc3RUZWUtc3RydWN0Ij4KKzxBTkNIT1IgaWQ9IkdzdFRlZVB1bGxNb2RlIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sI0dzdFRlZVB1bGxNb2RlIj4KKzxBTkNIT1IgaWQ9IkdTVC1URUUtUFVMTC1NT0RFLU5FVkVSOkNBUFMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwjR1NULVRFRS1QVUxMLU1PREUtTkVWRVI6Q0FQUyI+Cis8QU5DSE9SIGlkPSJHU1QtVEVFLVBVTEwtTU9ERS1TSU5HTEU6Q0FQUyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCNHU1QtVEVFLVBVTEwtTU9ERS1TSU5HTEU6Q0FQUyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUucHJvcGVydHktZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy10ZWUucHJvcGVydHktZGV0YWlscyI+Cis8QU5DSE9SIGlkPSJHc3RUZWUtLWhhcy1jaGFpbiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCNHc3RUZWUtLWhhcy1jaGFpbiI+Cis8QU5DSE9SIGlkPSJHc3RUZWUtLWhhcy1zaW5rLWxvb3AiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwjR3N0VGVlLS1oYXMtc2luay1sb29wIj4KKzxBTkNIT1IgaWQ9IkdzdFRlZS0tbGFzdC1tZXNzYWdlIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sI0dzdFRlZS0tbGFzdC1tZXNzYWdlIj4KKzxBTkNIT1IgaWQ9IkdzdFRlZS0tbnVtLXNyYy1wYWRzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sI0dzdFRlZS0tbnVtLXNyYy1wYWRzIj4KKzxBTkNIT1IgaWQ9IkdzdFRlZS0tc2lsZW50IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sI0dzdFRlZS0tc2lsZW50Ij4KKzxBTkNIT1IgaWQ9IkdzdFRlZS0tcHVsbC1tb2RlIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sI0dzdFRlZS0tcHVsbC1tb2RlIj4KKzxBTkNIT1IgaWQ9IkdzdFRlZS0tYWxsb2MtcGFkIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sI0dzdFRlZS0tYWxsb2MtcGFkIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLXRlZS5zZWUtYWxzbyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy10ZWUuc2VlLWFsc28iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuaHRtbCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5zeW5vcHNpcyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5odG1sI2dzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLnN5bm9wc2lzIj4KKzxBTkNIT1IgaWQ9IkdzdFR5cGVGaW5kRWxlbWVudCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5odG1sI0dzdFR5cGVGaW5kRWxlbWVudCI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5vYmplY3QtaGllcmFyY2h5IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQub2JqZWN0LWhpZXJhcmNoeSI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5wcm9wZXJ0aWVzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQucHJvcGVydGllcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5zaWduYWxzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuc2lnbmFscyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5kZXNjcmlwdGlvbiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5odG1sI2dzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLmRlc2NyaXB0aW9uIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLmRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdFR5cGVGaW5kRWxlbWVudC1zdHJ1Y3QiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuaHRtbCNHc3RUeXBlRmluZEVsZW1lbnQtc3RydWN0Ij4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLnByb3BlcnR5LWRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5wcm9wZXJ0eS1kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdFR5cGVGaW5kRWxlbWVudC0tY2FwcyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5odG1sI0dzdFR5cGVGaW5kRWxlbWVudC0tY2FwcyI+Cis8QU5DSE9SIGlkPSJHc3RUeXBlRmluZEVsZW1lbnQtLW1heGltdW0iIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuaHRtbCNHc3RUeXBlRmluZEVsZW1lbnQtLW1heGltdW0iPgorPEFOQ0hPUiBpZD0iR3N0VHlwZUZpbmRFbGVtZW50LS1taW5pbXVtIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLmh0bWwjR3N0VHlwZUZpbmRFbGVtZW50LS1taW5pbXVtIj4KKzxBTkNIT1IgaWQ9IkdzdFR5cGVGaW5kRWxlbWVudC0tZm9yY2UtY2FwcyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5odG1sI0dzdFR5cGVGaW5kRWxlbWVudC0tZm9yY2UtY2FwcyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5zaWduYWwtZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5odG1sI2dzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLnNpZ25hbC1kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdFR5cGVGaW5kRWxlbWVudC1oYXZlLXR5cGUiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuaHRtbCNHc3RUeXBlRmluZEVsZW1lbnQtaGF2ZS10eXBlIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLXZhbHZlIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXZhbHZlLmh0bWwiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUuc3lub3BzaXMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy12YWx2ZS5zeW5vcHNpcyI+Cis8QU5DSE9SIGlkPSJHc3RWYWx2ZSIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy12YWx2ZS5odG1sI0dzdFZhbHZlIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLXZhbHZlLm9iamVjdC1oaWVyYXJjaHkiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy12YWx2ZS5vYmplY3QtaGllcmFyY2h5Ij4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLXZhbHZlLnByb3BlcnRpZXMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy12YWx2ZS5wcm9wZXJ0aWVzIj4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLXZhbHZlLmRlc2NyaXB0aW9uIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXZhbHZlLmh0bWwjZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUuZGVzY3JpcHRpb24iPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUuZGV0YWlscyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy12YWx2ZS5odG1sI2dzdHJlYW1lci1wbHVnaW5zLXZhbHZlLmRldGFpbHMiPgorPEFOQ0hPUiBpZD0iR3N0VmFsdmUtc3RydWN0IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXZhbHZlLmh0bWwjR3N0VmFsdmUtc3RydWN0Ij4KKzxBTkNIT1IgaWQ9ImdzdHJlYW1lci1wbHVnaW5zLXZhbHZlLnByb3BlcnR5LWRldGFpbHMiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLTAuMTEvZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUuaHRtbCNnc3RyZWFtZXItcGx1Z2lucy12YWx2ZS5wcm9wZXJ0eS1kZXRhaWxzIj4KKzxBTkNIT1IgaWQ9IkdzdFZhbHZlLS1kcm9wIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXZhbHZlLmh0bWwjR3N0VmFsdmUtLWRyb3AiPgorPEFOQ0hPUiBpZD0iZ3N0cmVhbWVyLXBsdWdpbnMtcGx1Z2luLWNvcmVlbGVtZW50cyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWVsZW1lbnRzLmh0bWwiPgorPEFOQ0hPUiBpZD0icGx1Z2luLWNvcmVlbGVtZW50cyIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtMC4xMS9nc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWVsZW1lbnRzLmh0bWwjcGx1Z2luLWNvcmVlbGVtZW50cyI+Cis8QU5DSE9SIGlkPSJnc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWluZGV4ZXJzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXBsdWdpbi1jb3JlaW5kZXhlcnMuaHRtbCI+Cis8QU5DSE9SIGlkPSJwbHVnaW4tY29yZWluZGV4ZXJzIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy0wLjExL2dzdHJlYW1lci1wbHVnaW5zLXBsdWdpbi1jb3JlaW5kZXhlcnMuaHRtbCNwbHVnaW4tY29yZWluZGV4ZXJzIj4KZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2xlZnQucG5nIGIvZG9jcy9wbHVnaW5zL2h0bWwvbGVmdC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQwNWIzZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvcGx1Z2lucy9odG1sL2xlZnQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL3JpZ2h0LnBuZyBiL2RvY3MvcGx1Z2lucy9odG1sL3JpZ2h0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjgzMmUzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wbHVnaW5zL2h0bWwvcmlnaHQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL3N0eWxlLmNzcyBiL2RvY3MvcGx1Z2lucy9odG1sL3N0eWxlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmY2YzI2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wbHVnaW5zL2h0bWwvc3R5bGUuY3NzCkBAIC0wLDAgKzEsMjY2IEBACisuc3lub3BzaXMsIC5jbGFzc3N5bm9wc2lzCit7CisgIC8qIHRhbmdvOmFsdW1pbml1bSAxLzIgKi8KKyAgYmFja2dyb3VuZDogI2VlZWVlYzsKKyAgYm9yZGVyOiBzb2xpZCAxcHggI2QzZDdjZjsKKyAgcGFkZGluZzogMC41ZW07Cit9CisucHJvZ3JhbWxpc3RpbmcKK3sKKyAgLyogdGFuZ286c2t5IGJsdWUgMC8xICovCisgIGJhY2tncm91bmQ6ICNlNmYzZmY7CisgIGJvcmRlcjogc29saWQgMXB4ICM3MjlmY2Y7CisgIHBhZGRpbmc6IDAuNWVtOworfQorLnZhcmlhYmxlbGlzdAoreworICBwYWRkaW5nOiA0cHg7CisgIG1hcmdpbi1sZWZ0OiAzZW07Cit9CisudmFyaWFibGVsaXN0IHRkOmZpcnN0LWNoaWxkCit7CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK0BtZWRpYSBzY3JlZW4geworICBzdXAgYS5mb290bm90ZQorICB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIHRvcDogMGVtICEgaW1wb3J0YW50OworICAgIAorICB9CisgIC8qIHRoaXMgaXMgbmVlZGVkIHNvIHRoYXQgdGhlIGxvY2FsIGFuY2hvcnMgYXJlIGRpc3BsYXllZCBiZWxvdyB0aGUgbmF2aWFndGlvbiAqLworICBkaXYuZm9vdG5vdGUgYVtuYW1lXSwgZGl2LnJlZm5hbWVkaXYgYVtuYW1lXSwgZGl2LnJlZnNlY3QxIGFbbmFtZV0sIGRpdi5yZWZzZWN0MiBhW25hbWVdLCBkaXYuaW5kZXggYVtuYW1lXSwgZGl2Lmdsb3NzYXJ5IGFbbmFtZV0sIGRpdi5zZWN0MSBhW25hbWVdCisgIHsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIHRvcDotNWVtOworICB9CisgIC8qIHRoaXMgc2VlbXMgdG8gYmUgYSBidWcgaW4gdGhlIHhzbCBzdHlsZSBzaGVldHMgd2hlbiBnZW5lcmF0aW5nIGluZGV4ZXMgKi8KKyAgZGl2LmluZGV4IGRpdi5pbmRleAorICB7CisgICAgdG9wOiAwZW07CisgIH0KKyAgLyogbWFrZSBzcGFjZSBmb3IgdGhlIGZpeGVkIG5hdmlnYXRpb24gYmFyIGFuZCBhZGQgc3BhY2UgYXQgdGhlIGJvdHRvbSBzbyB0aGF0CisgICAqIGxpbmsgdGFyZ2V0cyBhcHBlYXIgc29tZXdoYXQgY2xvc2UgdG8gdG9wCisgICAqLworICBib2R5CisgIHsKKyAgICBwYWRkaW5nLXRvcDogMy4yZW07CisgICAgcGFkZGluZy1ib3R0b206IDIwZW07CisgIH0KKyAgLyogc3R5bGUgYW5kIHNpemUgdGhlIG5hdmlnYXRpb24gYmFyICovCisgIHRhYmxlLm5hdmlnYXRpb24jdG9wCisgIHsKKyAgICBwb3NpdGlvbjogZml4ZWQ7CisgICAgLyogdGFuZ286c2NhcmxldCByZWQgMC8xICovCisgICAgYmFja2dyb3VuZDogI2ZmZTZlNjsKKyAgICBib3JkZXI6IHNvbGlkIDFweCAjZWYyOTI5OworICAgIG1hcmdpbi10b3A6IDA7CisgICAgbWFyZ2luLWJvdHRvbTogMDsKKyAgICB0b3A6IDA7CisgICAgbGVmdDogMDsKKyAgICBoZWlnaHQ6IDNlbTsKKyAgICB6LWluZGV4OiAxMDsKKyAgfQorICAubmF2aWdhdGlvbiBhLCAubmF2aWdhdGlvbiBhOnZpc2l0ZWQKKyAgeworICAgIC8qIHRhbmdvOnNjYXJsZXQgcmVkIDMgKi8KKyAgICBjb2xvcjogI2E0MDAwMDsKKyAgfQorICAubmF2aWdhdGlvbiBhOmhvdmVyCisgIHsKKyAgICAvKiB0YW5nbzpzY2FybGV0IHJlZCAxICovCisgICAgY29sb3I6ICNlZjI5Mjk7CisgIH0KKyAgdGQuc2hvcnRjdXRzCisgIHsKKyAgICAvKiB0YW5nbzpzY2FybGV0IHJlZCAxICovCisgICAgY29sb3I6ICNlZjI5Mjk7CisgICAgZm9udC1zaXplOiA4MCU7CisgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKKyAgfQorfQorQG1lZGlhIHByaW50IHsKKyAgdGFibGUubmF2aWdhdGlvbiB7CisgICAgdmlzaWJpbGl0eTogY29sbGFwc2U7CisgICAgZGlzcGxheTogbm9uZTsKKyAgfQorICBkaXYudGl0bGVwYWdlIHRhYmxlLm5hdmlnYXRpb24geworICAgIHZpc2liaWxpdHk6IHZpc2libGU7CisgICAgZGlzcGxheTogdGFibGU7CisgICAgLyogdGFuZ286c2NhcmxldCByZWQgMC8xICovCisgICAgYmFja2dyb3VuZDogI2ZmZTZlNjsKKyAgICBib3JkZXI6IHNvbGlkIDFweCAjZWYyOTI5OworICAgIG1hcmdpbi10b3A6IDA7CisgICAgbWFyZ2luLWJvdHRvbTogMDsKKyAgICB0b3A6IDA7CisgICAgbGVmdDogMDsKKyAgICBoZWlnaHQ6IDNlbTsKKyAgfQorfQorCisubmF2aWdhdGlvbiAudGl0bGUKK3sKKyAgZm9udC1zaXplOiAyMDAlOworfQorCitkaXYuZ2FsbGVyeS1mbG9hdAoreworICBmbG9hdDogbGVmdDsKKyAgcGFkZGluZzogMTBweDsKK30KK2Rpdi5nYWxsZXJ5LWZsb2F0IGltZworeworICBib3JkZXItc3R5bGU6IG5vbmU7Cit9CitkaXYuZ2FsbGVyeS1zcGFjZXIKK3sKKyAgY2xlYXI6IGJvdGg7Cit9CisKK2EsIGE6dmlzaXRlZAoreworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgIC8qIHRhbmdvOnNreSBibHVlIDIgKi8KKyAgY29sb3I6ICMzNDY1YTQ7Cit9CithOmhvdmVyCit7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICAvKiB0YW5nbzpza3kgYmx1ZSAxICovCisgIGNvbG9yOiAjNzI5ZmNmOworfQorCitkaXYudGFibGUgdGFibGUKK3sKKyAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKKyAgYm9yZGVyLXNwYWNpbmc6IDBweDsKKyAgLyogdGFuZ286YWx1bWluaXVtIDMgKi8KKyAgYm9yZGVyOiBzb2xpZCAxcHggI2JhYmRiNjsKK30KKworZGl2LnRhYmxlIHRhYmxlIHRkLCBkaXYudGFibGUgdGFibGUgdGgKK3sKKyAgLyogdGFuZ286YWx1bWluaXVtIDMgKi8KKyAgYm9yZGVyOiBzb2xpZCAxcHggI2JhYmRiNjsKKyAgcGFkZGluZzogM3B4OworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCitkaXYudGFibGUgdGFibGUgdGgKK3sKKyAgLyogdGFuZ286YWx1bWluaXVtIDIgKi8KKyAgYmFja2dyb3VuZC1jb2xvcjogI2QzZDdjZjsKK30KKworaHIKK3sKKyAgLyogdGFuZ286YWx1bWluaXVtIDMgKi8KKyAgY29sb3I6ICNiYWJkYjY7CisgIGJhY2tncm91bmQ6ICNiYWJkYjY7CisgIGJvcmRlcjogbm9uZSAwcHg7CisgIGhlaWdodDogMXB4OworICBjbGVhcjogYm90aDsKK30KKworLmZvb3RlcgoreworICBwYWRkaW5nLXRvcDogMy41ZW07CisgIC8qIHRhbmdvOmFsdW1pbml1bSAzICovCisgIGNvbG9yOiAjYmFiZGI2OworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIGZvbnQtc2l6ZTogODAlOworfQorCisud2FybmluZworeworICAvKiB0YW5nbzpvcmFuZ2UgMC8xICovCisgIGJhY2tncm91bmQ6ICNmZmVlZDk7CisgIGJvcmRlci1jb2xvcjogI2ZmYjA0ZjsKK30KKy5ub3RlCit7CisgIC8qIHRhbmdvOmNoYW1lbGVvbiAwLzAuNSAqLworICBiYWNrZ3JvdW5kOiAjZDhmZmIyOworICBib3JkZXItY29sb3I6ICNhYmY1NjI7Cit9Cisubm90ZSwgLndhcm5pbmcKK3sKKyAgcGFkZGluZzogMC41ZW07CisgIGJvcmRlci13aWR0aDogMXB4OworICBib3JkZXItc3R5bGU6IHNvbGlkOworfQorLm5vdGUgaDMsIC53YXJuaW5nIGgzCit7CisgIG1hcmdpbi10b3A6IDAuMGVtCit9Cisubm90ZSBwLCAud2FybmluZyBwCit7CisgIG1hcmdpbi1ib3R0b206IDAuMGVtCit9CisKKy8qIGJsb2IgbGlua3MgKi8KK2gyIC5leHRyYWxpbmtzLCBoMyAuZXh0cmFsaW5rcworeworICBmbG9hdDogcmlnaHQ7CisgIC8qIHRhbmdvOmFsdW1pbml1bSAzICovCisgIGNvbG9yOiAjYmFiZGI2OworICBmb250LXNpemU6IDgwJTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKK30KKworLmFubm90YXRpb24KK3sKKyAgLyogdGFuZ286YWx1bWluaXVtIDUgKi8KKyAgY29sb3I6ICM1NTU3NTM7CisgIGZvbnQtc2l6ZTogODAlOworICBmb250LXdlaWdodDogbm9ybWFsOworfQorCisvKiBjb2RlIGxpc3RpbmdzICovCisKKy5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5jYnJhY2tldCAgIHsgY29sb3I6ICNhNDAwMDA7IH0gLyogdGFuZ286IHNjYXJsZXQgcmVkIDMgKi8KKy5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5jb21tZW50ICAgIHsgY29sb3I6ICNhMWEzOWQ7IH0gLyogdGFuZ286IGFsdW1pbml1bSA0ICovCisubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyAuZnVuY3Rpb24gICB7IGNvbG9yOiAjMDAwMDAwOyBmb250LXdlaWdodDogYm9sZDsgfQorLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLmZ1bmN0aW9uIGEgeyBjb2xvcjogIzExMzI2YjsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0gLyogdGFuZ286IHNreSBibHVlIDQgKi8KKy5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5rZXl3b3JkICAgIHsgY29sb3I6ICM0ZTlhMDY7IH0gLyogdGFuZ286IGNoYW1lbGVvbiAzICAqLworLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLmxpbmVudW0gICAgeyBjb2xvcjogI2JhYmRiNjsgfSAvKiB0YW5nbzogYWx1bWluaXVtIDMgKi8KKy5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5ub3JtYWwgICAgIHsgY29sb3I6ICMwMDAwMDA7IH0KKy5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5udW1iZXIgICAgIHsgY29sb3I6ICM3NTUwN2I7IH0gLyogdGFuZ286IHBsdW0gMiAqLworLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLnByZXByb2MgICAgeyBjb2xvcjogIzIwNGE4NzsgfSAvKiB0YW5nbzogc2t5IGJsdWUgMyAgKi8KKy5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5zdHJpbmcgICAgIHsgY29sb3I6ICNjMTdkMTE7IH0gLyogdGFuZ286IGNob2NvbGF0ZSAyICovCisubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyAudHlwZSAgICAgICB7IGNvbG9yOiAjMDAwMDAwOyB9CisubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyAudHlwZSBhICAgICB7IGNvbG9yOiAjMTEzMjZiOyB9IC8qIHRhbmdvOiBza3kgYmx1ZSA0ICovCisubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyAuc3ltYm9sICAgICB7IGNvbG9yOiAjY2U1YzAwOyB9IC8qIHRhbmdvOiBvcmFuZ2UgMyAqLworCisubGlzdGluZ19mcmFtZSB7CisgIC8qIHRhbmdvOnNreSBibHVlIDEgKi8KKyAgYm9yZGVyOiBzb2xpZCAxcHggIzcyOWZjZjsKKyAgcGFkZGluZzogMHB4OworfQorCisubGlzdGluZ19saW5lcywgLmxpc3RpbmdfY29kZSB7CisgIG1hcmdpbi10b3A6IDBweDsKKyAgbWFyZ2luLWJvdHRvbTogMHB4OworICBwYWRkaW5nOiAwLjVlbTsKK30KKy5saXN0aW5nX2xpbmVzIHsKKyAgLyogdGFuZ286c2t5IGJsdWUgMC41ICovCisgIGJhY2tncm91bmQ6ICNhNmM1ZTM7CisgIC8qIHRhbmdvOmFsdW1pbml1bSA2ICovCisgIGNvbG9yOiAjMmUzNDM2OworfQorLmxpc3RpbmdfY29kZSB7CisgIC8qIHRhbmdvOnNreSBibHVlIDAgKi8KKyAgYmFja2dyb3VuZDogI2U2ZjNmZjsKK30KKy5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIHsKKyAgLyogb3ZlcnJpZGUgZnJvbSBwcmV2aW91cyAqLworICBib3JkZXI6IG5vbmUgMHB4OworICBwYWRkaW5nOiAwcHg7Cit9CisubGlzdGluZ19saW5lcyBwcmUsIC5saXN0aW5nX2NvZGUgcHJlIHsKKyAgbWFyZ2luOiAwcHg7Cit9CisKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL3VwLnBuZyBiL2RvY3MvcGx1Z2lucy9odG1sL3VwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWIzZTJhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wbHVnaW5zL2h0bWwvdXAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sIGIvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk5Yzc4MAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sCkBAIC0wLDAgKzEsMzM0IEBACis8cGx1Z2luPgorICA8bmFtZT5jb3JlZWxlbWVudHM8L25hbWU+CisgIDxkZXNjcmlwdGlvbj5zdGFuZGFyZCBHU3RyZWFtZXIgZWxlbWVudHM8L2Rlc2NyaXB0aW9uPgorICA8ZmlsZW5hbWU+Li4vLi4vcGx1Z2lucy9lbGVtZW50cy8ubGlicy9saWJnc3Rjb3JlZWxlbWVudHMuc288L2ZpbGVuYW1lPgorICA8YmFzZW5hbWU+bGliZ3N0Y29yZWVsZW1lbnRzLnNvPC9iYXNlbmFtZT4KKyAgPHZlcnNpb24+MC4xMC4zNS4xPC92ZXJzaW9uPgorICA8bGljZW5zZT5MR1BMPC9saWNlbnNlPgorICA8c291cmNlPmdzdHJlYW1lcjwvc291cmNlPgorICA8cGFja2FnZT5HU3RyZWFtZXIgZ2l0PC9wYWNrYWdlPgorICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KKyAgPGVsZW1lbnRzPgorICAgIDxlbGVtZW50PgorICAgICAgPG5hbWU+Y2Fwc2ZpbHRlcjwvbmFtZT4KKyAgICAgIDxsb25nbmFtZT5DYXBzRmlsdGVyPC9sb25nbmFtZT4KKyAgICAgIDxjbGFzcz5HZW5lcmljPC9jbGFzcz4KKyAgICAgIDxkZXNjcmlwdGlvbj5QYXNzIGRhdGEgd2l0aG91dCBtb2RpZmljYXRpb24sIGxpbWl0aW5nIGZvcm1hdHM8L2Rlc2NyaXB0aW9uPgorICAgICAgPGF1dGhvcj5EYXZpZCBTY2hsZWVmICZsdDtkc0BzY2hsZWVmLm9yZyZndDs8L2F1dGhvcj4KKyAgICAgIDxwYWRzPgorICAgICAgICA8Y2Fwcz4KKyAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgorICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgorICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgorICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KKyAgICAgICAgPC9jYXBzPgorICAgICAgICA8Y2Fwcz4KKyAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+CisgICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KKyAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KKyAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+CisgICAgICAgIDwvY2Fwcz4KKyAgICAgIDwvcGFkcz4KKyAgICA8L2VsZW1lbnQ+CisgICAgPGVsZW1lbnQ+CisgICAgICA8bmFtZT5mYWtlc2luazwvbmFtZT4KKyAgICAgIDxsb25nbmFtZT5GYWtlIFNpbms8L2xvbmduYW1lPgorICAgICAgPGNsYXNzPlNpbms8L2NsYXNzPgorICAgICAgPGRlc2NyaXB0aW9uPkJsYWNrIGhvbGUgZm9yIGRhdGE8L2Rlc2NyaXB0aW9uPgorICAgICAgPGF1dGhvcj5FcmlrIFdhbHRoaW5zZW4gJmx0O29tZWdhQGNzZS5vZ2kuZWR1Jmd0OywgV2ltIFRheW1hbnMgJmx0O3dpbUBmbHVlbmRvLmNvbSZndDssIE1yLiAmYXBvcztmcmFnLW1lLW1vcmUmYXBvczsgVmFuZGVyd2luZ28gJmx0O3dpbmdvQGZsdWVuZG8uY29tJmd0OzwvYXV0aG9yPgorICAgICAgPHBhZHM+CisgICAgICAgIDxjYXBzPgorICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+CisgICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+CisgICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+CisgICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgorICAgICAgICA8L2NhcHM+CisgICAgICA8L3BhZHM+CisgICAgPC9lbGVtZW50PgorICAgIDxlbGVtZW50PgorICAgICAgPG5hbWU+ZmFrZXNyYzwvbmFtZT4KKyAgICAgIDxsb25nbmFtZT5GYWtlIFNvdXJjZTwvbG9uZ25hbWU+CisgICAgICA8Y2xhc3M+U291cmNlPC9jbGFzcz4KKyAgICAgIDxkZXNjcmlwdGlvbj5QdXNoIGVtcHR5IChubyBkYXRhKSBidWZmZXJzIGFyb3VuZDwvZGVzY3JpcHRpb24+CisgICAgICA8YXV0aG9yPkVyaWsgV2FsdGhpbnNlbiAmbHQ7b21lZ2FAY3NlLm9naS5lZHUmZ3Q7LCBXaW0gVGF5bWFucyAmbHQ7d2ltQGZsdWVuZG8uY29tJmd0OzwvYXV0aG9yPgorICAgICAgPHBhZHM+CisgICAgICAgIDxjYXBzPgorICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KKyAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgorICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgorICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KKyAgICAgICAgPC9jYXBzPgorICAgICAgPC9wYWRzPgorICAgIDwvZWxlbWVudD4KKyAgICA8ZWxlbWVudD4KKyAgICAgIDxuYW1lPmZkc2luazwvbmFtZT4KKyAgICAgIDxsb25nbmFtZT5GaWxlZGVzY3JpcHRvciBTaW5rPC9sb25nbmFtZT4KKyAgICAgIDxjbGFzcz5TaW5rL0ZpbGU8L2NsYXNzPgorICAgICAgPGRlc2NyaXB0aW9uPldyaXRlIGRhdGEgdG8gYSBmaWxlIGRlc2NyaXB0b3I8L2Rlc2NyaXB0aW9uPgorICAgICAgPGF1dGhvcj5FcmlrIFdhbHRoaW5zZW4gJmx0O29tZWdhQGNzZS5vZ2kuZWR1Jmd0OzwvYXV0aG9yPgorICAgICAgPHBhZHM+CisgICAgICAgIDxjYXBzPgorICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+CisgICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+CisgICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+CisgICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgorICAgICAgICA8L2NhcHM+CisgICAgICA8L3BhZHM+CisgICAgPC9lbGVtZW50PgorICAgIDxlbGVtZW50PgorICAgICAgPG5hbWU+ZmRzcmM8L25hbWU+CisgICAgICA8bG9uZ25hbWU+RmlsZWRlc2NyaXB0b3IgU291cmNlPC9sb25nbmFtZT4KKyAgICAgIDxjbGFzcz5Tb3VyY2UvRmlsZTwvY2xhc3M+CisgICAgICA8ZGVzY3JpcHRpb24+UmVhZCBmcm9tIGEgZmlsZSBkZXNjcmlwdG9yPC9kZXNjcmlwdGlvbj4KKyAgICAgIDxhdXRob3I+RXJpayBXYWx0aGluc2VuICZsdDtvbWVnYUBjc2Uub2dpLmVkdSZndDs8L2F1dGhvcj4KKyAgICAgIDxwYWRzPgorICAgICAgICA8Y2Fwcz4KKyAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+CisgICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KKyAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KKyAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+CisgICAgICAgIDwvY2Fwcz4KKyAgICAgIDwvcGFkcz4KKyAgICA8L2VsZW1lbnQ+CisgICAgPGVsZW1lbnQ+CisgICAgICA8bmFtZT5maWxlc2luazwvbmFtZT4KKyAgICAgIDxsb25nbmFtZT5GaWxlIFNpbms8L2xvbmduYW1lPgorICAgICAgPGNsYXNzPlNpbmsvRmlsZTwvY2xhc3M+CisgICAgICA8ZGVzY3JpcHRpb24+V3JpdGUgc3RyZWFtIHRvIGEgZmlsZTwvZGVzY3JpcHRpb24+CisgICAgICA8YXV0aG9yPlRob21hcyBWYW5kZXIgU3RpY2hlbGUgJmx0O3Rob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZyZndDs8L2F1dGhvcj4KKyAgICAgIDxwYWRzPgorICAgICAgICA8Y2Fwcz4KKyAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgorICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgorICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgorICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KKyAgICAgICAgPC9jYXBzPgorICAgICAgPC9wYWRzPgorICAgIDwvZWxlbWVudD4KKyAgICA8ZWxlbWVudD4KKyAgICAgIDxuYW1lPmZpbGVzcmM8L25hbWU+CisgICAgICA8bG9uZ25hbWU+RmlsZSBTb3VyY2U8L2xvbmduYW1lPgorICAgICAgPGNsYXNzPlNvdXJjZS9GaWxlPC9jbGFzcz4KKyAgICAgIDxkZXNjcmlwdGlvbj5SZWFkIGZyb20gYXJiaXRyYXJ5IHBvaW50IGluIGEgZmlsZTwvZGVzY3JpcHRpb24+CisgICAgICA8YXV0aG9yPkVyaWsgV2FsdGhpbnNlbiAmbHQ7b21lZ2FAY3NlLm9naS5lZHUmZ3Q7PC9hdXRob3I+CisgICAgICA8cGFkcz4KKyAgICAgICAgPGNhcHM+CisgICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgorICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+CisgICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+CisgICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgorICAgICAgICA8L2NhcHM+CisgICAgICA8L3BhZHM+CisgICAgPC9lbGVtZW50PgorICAgIDxlbGVtZW50PgorICAgICAgPG5hbWU+ZnVubmVsPC9uYW1lPgorICAgICAgPGxvbmduYW1lPkZ1bm5lbCBwaXBlIGZpdHRpbmc8L2xvbmduYW1lPgorICAgICAgPGNsYXNzPkdlbmVyaWM8L2NsYXNzPgorICAgICAgPGRlc2NyaXB0aW9uPk4tdG8tMSBwaXBlIGZpdHRpbmc8L2Rlc2NyaXB0aW9uPgorICAgICAgPGF1dGhvcj5PbGl2aWVyIENyZXRlICZsdDtvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51ayZndDs8L2F1dGhvcj4KKyAgICAgIDxwYWRzPgorICAgICAgICA8Y2Fwcz4KKyAgICAgICAgICA8bmFtZT5zaW5rJWQ8L25hbWU+CisgICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+CisgICAgICAgICAgPHByZXNlbmNlPnJlcXVlc3Q8L3ByZXNlbmNlPgorICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KKyAgICAgICAgPC9jYXBzPgorICAgICAgICA8Y2Fwcz4KKyAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+CisgICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KKyAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KKyAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+CisgICAgICAgIDwvY2Fwcz4KKyAgICAgIDwvcGFkcz4KKyAgICA8L2VsZW1lbnQ+CisgICAgPGVsZW1lbnQ+CisgICAgICA8bmFtZT5pZGVudGl0eTwvbmFtZT4KKyAgICAgIDxsb25nbmFtZT5JZGVudGl0eTwvbG9uZ25hbWU+CisgICAgICA8Y2xhc3M+R2VuZXJpYzwvY2xhc3M+CisgICAgICA8ZGVzY3JpcHRpb24+UGFzcyBkYXRhIHdpdGhvdXQgbW9kaWZpY2F0aW9uPC9kZXNjcmlwdGlvbj4KKyAgICAgIDxhdXRob3I+RXJpayBXYWx0aGluc2VuICZsdDtvbWVnYUBjc2Uub2dpLmVkdSZndDs8L2F1dGhvcj4KKyAgICAgIDxwYWRzPgorICAgICAgICA8Y2Fwcz4KKyAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgorICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgorICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgorICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KKyAgICAgICAgPC9jYXBzPgorICAgICAgICA8Y2Fwcz4KKyAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+CisgICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KKyAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KKyAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+CisgICAgICAgIDwvY2Fwcz4KKyAgICAgIDwvcGFkcz4KKyAgICA8L2VsZW1lbnQ+CisgICAgPGVsZW1lbnQ+CisgICAgICA8bmFtZT5pbnB1dC1zZWxlY3RvcjwvbmFtZT4KKyAgICAgIDxsb25nbmFtZT5JbnB1dCBzZWxlY3RvcjwvbG9uZ25hbWU+CisgICAgICA8Y2xhc3M+R2VuZXJpYzwvY2xhc3M+CisgICAgICA8ZGVzY3JpcHRpb24+Ti10by0xIGlucHV0IHN0cmVhbSBzZWxlY3RvcjwvZGVzY3JpcHRpb24+CisgICAgICA8YXV0aG9yPkp1bGllbiBNb3V0dGUgJmx0O2p1bGllbkBtb3V0dGUubmV0Jmd0OywgSmFuIFNjaG1pZHQgJmx0O3RoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20mZ3Q7LCBXaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvYXV0aG9yPgorICAgICAgPHBhZHM+CisgICAgICAgIDxjYXBzPgorICAgICAgICAgIDxuYW1lPnNpbmslZDwvbmFtZT4KKyAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KKyAgICAgICAgICA8cHJlc2VuY2U+cmVxdWVzdDwvcHJlc2VuY2U+CisgICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgorICAgICAgICA8L2NhcHM+CisgICAgICAgIDxjYXBzPgorICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KKyAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgorICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgorICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KKyAgICAgICAgPC9jYXBzPgorICAgICAgPC9wYWRzPgorICAgIDwvZWxlbWVudD4KKyAgICA8ZWxlbWVudD4KKyAgICAgIDxuYW1lPm11bHRpcXVldWU8L25hbWU+CisgICAgICA8bG9uZ25hbWU+TXVsdGlRdWV1ZTwvbG9uZ25hbWU+CisgICAgICA8Y2xhc3M+R2VuZXJpYzwvY2xhc3M+CisgICAgICA8ZGVzY3JpcHRpb24+TXVsdGlwbGUgZGF0YSBxdWV1ZTwvZGVzY3JpcHRpb24+CisgICAgICA8YXV0aG9yPkVkd2FyZCBIZXJ2ZXkgJmx0O2Vkd2FyZEBmbHVlbmRvLmNvbSZndDs8L2F1dGhvcj4KKyAgICAgIDxwYWRzPgorICAgICAgICA8Y2Fwcz4KKyAgICAgICAgICA8bmFtZT5zaW5rJWQ8L25hbWU+CisgICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+CisgICAgICAgICAgPHByZXNlbmNlPnJlcXVlc3Q8L3ByZXNlbmNlPgorICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KKyAgICAgICAgPC9jYXBzPgorICAgICAgICA8Y2Fwcz4KKyAgICAgICAgICA8bmFtZT5zcmMlZDwvbmFtZT4KKyAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgorICAgICAgICAgIDxwcmVzZW5jZT5zb21ldGltZXM8L3ByZXNlbmNlPgorICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KKyAgICAgICAgPC9jYXBzPgorICAgICAgPC9wYWRzPgorICAgIDwvZWxlbWVudD4KKyAgICA8ZWxlbWVudD4KKyAgICAgIDxuYW1lPm91dHB1dC1zZWxlY3RvcjwvbmFtZT4KKyAgICAgIDxsb25nbmFtZT5PdXRwdXQgc2VsZWN0b3I8L2xvbmduYW1lPgorICAgICAgPGNsYXNzPkdlbmVyaWM8L2NsYXNzPgorICAgICAgPGRlc2NyaXB0aW9uPjEtdG8tTiBvdXRwdXQgc3RyZWFtIHNlbGVjdG9yPC9kZXNjcmlwdGlvbj4KKyAgICAgIDxhdXRob3I+U3RlZmFuIEtvc3QgJmx0O3N0ZWZhbi5rb3N0QG5va2lhLmNvbSZndDs8L2F1dGhvcj4KKyAgICAgIDxwYWRzPgorICAgICAgICA8Y2Fwcz4KKyAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgorICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgorICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgorICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KKyAgICAgICAgPC9jYXBzPgorICAgICAgICA8Y2Fwcz4KKyAgICAgICAgICA8bmFtZT5zcmMlZDwvbmFtZT4KKyAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgorICAgICAgICAgIDxwcmVzZW5jZT5yZXF1ZXN0PC9wcmVzZW5jZT4KKyAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+CisgICAgICAgIDwvY2Fwcz4KKyAgICAgIDwvcGFkcz4KKyAgICA8L2VsZW1lbnQ+CisgICAgPGVsZW1lbnQ+CisgICAgICA8bmFtZT5xdWV1ZTwvbmFtZT4KKyAgICAgIDxsb25nbmFtZT5RdWV1ZTwvbG9uZ25hbWU+CisgICAgICA8Y2xhc3M+R2VuZXJpYzwvY2xhc3M+CisgICAgICA8ZGVzY3JpcHRpb24+U2ltcGxlIGRhdGEgcXVldWU8L2Rlc2NyaXB0aW9uPgorICAgICAgPGF1dGhvcj5FcmlrIFdhbHRoaW5zZW4gJmx0O29tZWdhQGNzZS5vZ2kuZWR1Jmd0OzwvYXV0aG9yPgorICAgICAgPHBhZHM+CisgICAgICAgIDxjYXBzPgorICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+CisgICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+CisgICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+CisgICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgorICAgICAgICA8L2NhcHM+CisgICAgICAgIDxjYXBzPgorICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KKyAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgorICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgorICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KKyAgICAgICAgPC9jYXBzPgorICAgICAgPC9wYWRzPgorICAgIDwvZWxlbWVudD4KKyAgICA8ZWxlbWVudD4KKyAgICAgIDxuYW1lPnF1ZXVlMjwvbmFtZT4KKyAgICAgIDxsb25nbmFtZT5RdWV1ZSAyPC9sb25nbmFtZT4KKyAgICAgIDxjbGFzcz5HZW5lcmljPC9jbGFzcz4KKyAgICAgIDxkZXNjcmlwdGlvbj5TaW1wbGUgZGF0YSBxdWV1ZTwvZGVzY3JpcHRpb24+CisgICAgICA8YXV0aG9yPkVyaWsgV2FsdGhpbnNlbiAmbHQ7b21lZ2FAY3NlLm9naS5lZHUmZ3Q7LCBXaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvYXV0aG9yPgorICAgICAgPHBhZHM+CisgICAgICAgIDxjYXBzPgorICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+CisgICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+CisgICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+CisgICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgorICAgICAgICA8L2NhcHM+CisgICAgICAgIDxjYXBzPgorICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KKyAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgorICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgorICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KKyAgICAgICAgPC9jYXBzPgorICAgICAgPC9wYWRzPgorICAgIDwvZWxlbWVudD4KKyAgICA8ZWxlbWVudD4KKyAgICAgIDxuYW1lPnRlZTwvbmFtZT4KKyAgICAgIDxsb25nbmFtZT5UZWUgcGlwZSBmaXR0aW5nPC9sb25nbmFtZT4KKyAgICAgIDxjbGFzcz5HZW5lcmljPC9jbGFzcz4KKyAgICAgIDxkZXNjcmlwdGlvbj4xLXRvLU4gcGlwZSBmaXR0aW5nPC9kZXNjcmlwdGlvbj4KKyAgICAgIDxhdXRob3I+RXJpayBXYWx0aGluc2VuICZsdDtvbWVnYUBjc2Uub2dpLmVkdSZndDssIFdpbSBUYXltYW5zICZsdDt3aW1AZmx1ZW5kby5jb20mZ3Q7PC9hdXRob3I+CisgICAgICA8cGFkcz4KKyAgICAgICAgPGNhcHM+CisgICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KKyAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KKyAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KKyAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+CisgICAgICAgIDwvY2Fwcz4KKyAgICAgICAgPGNhcHM+CisgICAgICAgICAgPG5hbWU+c3JjJWQ8L25hbWU+CisgICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KKyAgICAgICAgICA8cHJlc2VuY2U+cmVxdWVzdDwvcHJlc2VuY2U+CisgICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgorICAgICAgICA8L2NhcHM+CisgICAgICA8L3BhZHM+CisgICAgPC9lbGVtZW50PgorICAgIDxlbGVtZW50PgorICAgICAgPG5hbWU+dHlwZWZpbmQ8L25hbWU+CisgICAgICA8bG9uZ25hbWU+VHlwZUZpbmQ8L2xvbmduYW1lPgorICAgICAgPGNsYXNzPkdlbmVyaWM8L2NsYXNzPgorICAgICAgPGRlc2NyaXB0aW9uPkZpbmRzIHRoZSBtZWRpYSB0eXBlIG9mIGEgc3RyZWFtPC9kZXNjcmlwdGlvbj4KKyAgICAgIDxhdXRob3I+QmVuamFtaW4gT3R0ZSAmbHQ7aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGUmZ3Q7PC9hdXRob3I+CisgICAgICA8cGFkcz4KKyAgICAgICAgPGNhcHM+CisgICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KKyAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KKyAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KKyAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+CisgICAgICAgIDwvY2Fwcz4KKyAgICAgICAgPGNhcHM+CisgICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgorICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+CisgICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+CisgICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgorICAgICAgICA8L2NhcHM+CisgICAgICA8L3BhZHM+CisgICAgPC9lbGVtZW50PgorICAgIDxlbGVtZW50PgorICAgICAgPG5hbWU+dmFsdmU8L25hbWU+CisgICAgICA8bG9uZ25hbWU+VmFsdmUgZWxlbWVudDwvbG9uZ25hbWU+CisgICAgICA8Y2xhc3M+RmlsdGVyPC9jbGFzcz4KKyAgICAgIDxkZXNjcmlwdGlvbj5Ecm9wcyBidWZmZXJzIGFuZCBldmVudHMgb3IgbGV0cyB0aGVtIHRocm91Z2g8L2Rlc2NyaXB0aW9uPgorICAgICAgPGF1dGhvcj5PbGl2aWVyIENyZXRlICZsdDtvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51ayZndDs8L2F1dGhvcj4KKyAgICAgIDxwYWRzPgorICAgICAgICA8Y2Fwcz4KKyAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgorICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgorICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgorICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KKyAgICAgICAgPC9jYXBzPgorICAgICAgICA8Y2Fwcz4KKyAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+CisgICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KKyAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KKyAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+CisgICAgICAgIDwvY2Fwcz4KKyAgICAgIDwvcGFkcz4KKyAgICA8L2VsZW1lbnQ+CisgIDwvZWxlbWVudHM+Cis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sIGIvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBmMDcyZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sCkBAIC0wLDAgKzEsMTMgQEAKKzxwbHVnaW4+CisgIDxuYW1lPmNvcmVpbmRleGVyczwvbmFtZT4KKyAgPGRlc2NyaXB0aW9uPkdTdHJlYW1lciBjb3JlIGluZGV4ZXJzPC9kZXNjcmlwdGlvbj4KKyAgPGZpbGVuYW1lPi4uLy4uL3BsdWdpbnMvaW5kZXhlcnMvLmxpYnMvbGliZ3N0Y29yZWluZGV4ZXJzLnNvPC9maWxlbmFtZT4KKyAgPGJhc2VuYW1lPmxpYmdzdGNvcmVpbmRleGVycy5zbzwvYmFzZW5hbWU+CisgIDx2ZXJzaW9uPjAuMTAuMzUuMTwvdmVyc2lvbj4KKyAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KKyAgPHNvdXJjZT5nc3RyZWFtZXI8L3NvdXJjZT4KKyAgPHBhY2thZ2U+R1N0cmVhbWVyIGdpdDwvcGFja2FnZT4KKyAgPG9yaWdpbj5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC9vcmlnaW4+CisgIDxlbGVtZW50cz4KKyAgPC9lbGVtZW50cz4KKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL3NjYW5vYmotYnVpbGQuc3RhbXAgYi9kb2NzL3BsdWdpbnMvc2Nhbm9iai1idWlsZC5zdGFtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wbHVnaW5zL3NjYW5vYmotYnVpbGQuc3RhbXAKZGlmZiAtLWdpdCBhL2RvY3MvcHdnL01ha2VmaWxlLmFtIGIvZG9jcy9wd2cvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIyOGEzMQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvcHdnL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMzggQEAKKyMjIyB0aGlzIGlzIHRoZSBwYXJ0IHlvdSBjYW4gY3VzdG9taXplIGlmIHlvdSBuZWVkIHRvCisKKyMgYmFzZSBuYW1lIG9mIGRvYworRE9DID0gcHdnCisjIGZvcm1hdHMgZGVmaW5lZCBmb3IgdXBsb2FkLWRvYy5tYWsKK0ZPUk1BVFM9aHRtbCBwcyBwZGYKKworIyBtYWluIHhtbCBmaWxlCitNQUlOID0gJChET0MpLnhtbAorIyBhbGwgeG1sIHNvdXJjZXMKK1hNTCA9ICQobm90ZGlyICQod2lsZGNhcmQgJChzcmNkaXIpLyoueG1sKSkKKyMgYmFzZSBzdHlsZSBzaGVldAorQ1NTID0gYmFzZS5jc3MKKworIyBpbWFnZSBzb3VyY2VzCitQTkdfU1JDID0gCitGSUdfU1JDID0gJChub3RkaXIgJCh3aWxkY2FyZCAkKHNyY2RpcikvKi5maWcpKQorCisjIGV4dHJhIHNvdXJjZXMgdG8gY29weSBpbiBidWlsZCBkaXJlY3RvcnkKK0VYVFJBX1NSQyA9IAorCisjIyMgdGhpcyBpcyB0aGUgZ2VuZXJpYyBiaXQgYW5kIHlvdSBzaG91bGRuJ3QgbmVlZCB0byBjaGFuZ2UgdGhpcworCisjIGdldCB0aGUgZ2VuZXJpYyBkb2NidWlsZGluZyBNYWtlZmlsZSBzdHVmZgoraW5jbHVkZSAkKHNyY2RpcikvLi4vbWFudWFscy5tYWsKKyMgZ2V0IHRoZSBnZW5lcmljIHVwbG9hZCB0YXJnZXQKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb21tb24vdXBsb2FkLWRvYy5tYWsKKworIyMjIHRoaXMgaXMgc3RhbmRhcmQgYXV0b21ha2Ugc3R1ZmYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjIHBhY2thZ2UgdXAgYWxsIHRoZSBzb3VyY2UKK0VYVFJBX0RJU1QgPSAkKFNSQykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjIGluc3RhbGwgZG9jdW1lbnRhdGlvbgorcHdnZGlyID0gJChkb2NkaXIpLyQoRE9DKQorcHdnX0RBVEEgPSAkKFBERl9EQVQpICQoUFNfREFUKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK2luY2x1ZGUgJChzcmNkaXIpLy4uL2h0bWxpbnN0YWxsLm1hawpkaWZmIC0tZ2l0IGEvZG9jcy9wd2cvTWFrZWZpbGUuaW4gYi9kb2NzL3B3Zy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzZhZDAwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wd2cvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw4NjkgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMjIyB0aGlzIGlzIHRoZSBwYXJ0IHlvdSBjYW4gY3VzdG9taXplIGlmIHlvdSBuZWVkIHRvCisKKyMjIyBUaGVzZSBhcmUgYWxsIGdlbmVyaWM7IHdlIHNldCBhbGwgdGhlIHZhcmlhYmxlcyB3ZSBuZWVkCisKKyMgdGhpcyBzbmlwcGV0IGlzIHRvIGJlIGluY2x1ZGVkIGJ5IGJvdGggb3VyIGRvY2Jvb2sgbWFudWFscworIyBhbmQgZ3RrLWRvYyBBUEkgcmVmZXJlbmNlcworCisjIGl0IGFkZHMgYW4gdXBsb2FkIHRhcmdldCB0byBlYWNoIG9mIHRoZXNlIGRpcidzIE1ha2VmaWxlcworCisjIGVhY2ggTWFrZWZpbGUuYW0gc2hvdWxkIGRlZmluZSB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKKyMgLSBET0M6IHRoZSBiYXNlIG5hbWUgb2YgdGhlIGRvY3VtZW50YXRpb24KKyMgICAgICAgIChmYXEsIG1hbnVhbCwgcHdnLCBnc3RyZWFtZXIsIGdzdHJlYW1lci1saWJzKQorIyAtIEZPUk1BVFM6IHRoZSBmb3JtYXRzIGluIHdoaWNoIERPQyBpcyBvdXRwdXQKKyMgICAgICAgICAgICAoaHRtbCBwcyBwZGYpCisKKyMgaWYgeW91IHdhbnQgdG8gdXNlIGl0LCBtYWtlIHN1cmUgeW91ciAkSE9NRS8uc3NoL2NvbmZpZyBmaWxlIGNvbnRhaW5zIHRoZQorIyBjb3JyZWN0IFVzZXIgZW50cnkgZm9yIHRoZSBIb3N0IGVudHJ5IGZvciB0aGUgRE9DX1NFUlZFUgorCisjIHRoaXMgZmlsZSBhZGRzIHJ1bGVzIGZvciBpbnN0YWxsaW5nIGh0bWwgc3VidHJlZXMKKyMgSSByZWFsbHkgZG9uJ3QgbGlrZSB0aGlzIGhhY2ssIGJ1dCBhdXRvbWFrZSBkb2Vzbid0IHNlZW0gdG8gd2FudCB0bworIyBpbnN0YWxsIGRpcmVjdG9yeSB0cmVlcyA6KAorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS8uLi9odG1saW5zdGFsbC5tYWsgJChzcmNkaXIpLy4uL21hbnVhbHMubWFrIFwKKwkkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluIFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi91cGxvYWQtZG9jLm1haworc3ViZGlyID0gZG9jcy9wd2cKK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1weXRob24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXNjcnViLWluY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorQU1fVl9HRU4gPSAkKGFtX192X0dFTl8kKFYpKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworQU1fVl9hdCA9ICQoYW1fX3ZfYXRfJChWKSkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9hdF8wID0gQAorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbF9tYXggPSA0MAorYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKKyAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorYW1fX25vYmFzZV9zdHJpcCA9IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCithbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisgIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCisgICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisgICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCisgICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworYW1fX2Jhc2VfbGlzdCA9IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHB3Z2RpcikiCitEQVRBID0gJChwd2dfREFUQSkKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVMgPSBAQVNACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JJU09OX1BBVEggPSBAQklTT05fUEFUSEAKK0NBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKK0NBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACitDQyA9IEBDQ0AKK0NDQVMgPSBAQ0NBU0AKK0NDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAorQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAorQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAorQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAorQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRBRElSID0gQERBVEFESVJACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACitETExUT09MID0gQERMTFRPT0xACitET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAorRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKK0VYRUVYVCA9IEBFWEVFWFRACitGRkxBR1MgPSBARkZMQUdTQAorRkdSRVAgPSBARkdSRVBACitGTEVYX1BBVEggPSBARkxFWF9QQVRIQAorR0NPViA9IEBHQ09WQAorR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACitHQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAorR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACitHTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKK0dMSUJfTElCUyA9IEBHTElCX0xJQlNACitHTElCX09OTFlfQ0ZMQUdTID0gQEdMSUJfT05MWV9DRkxBR1NACitHTElCX09OTFlfTElCUyA9IEBHTElCX09OTFlfTElCU0AKK0dMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAorR0xJQl9SRVEgPSBAR0xJQl9SRVFACitHTVBfTElCUyA9IEBHTVBfTElCU0AKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAorR1JFUCA9IEBHUkVQQAorR1NMX0xJQlMgPSBAR1NMX0xJQlNACitHU1RfQUdFID0gQEdTVF9BR0VACitHU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKK0dTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKK0dTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACitHU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAorR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACitHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FQAorR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAorR1NUX0RJU0FCTEVfTkVUX0RFRklORSA9IEBHU1RfRElTQUJMRV9ORVRfREVGSU5FQAorR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKK0dTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACitHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACitHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAorR1NUX0RJU0FCTEVfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1RSQUNFX0RFRklORUAKK0dTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkUgPSBAR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORUAKK0dTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkUgPSBAR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORUAKK0dTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FID0gQEdTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FQAorR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACitHU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKK0dTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACitHU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKK0dTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAorR1NUX01BSk9STUlOT1IgPSBAR1NUX01BSk9STUlOT1JACitHU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKK0dTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKK0dTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACitHU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKK0dTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKK0dTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKK0dTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACitHU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACitHU1RfUEtHX0RFUFMgPSBAR1NUX1BLR19ERVBTQAorR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKK0dTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgPSBAR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFREAKK0dTVF9QUklOVEZfRVhURU5TSU9OX1BPSU5URVJfRk9STUFUX0RFRklORSA9IEBHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkVACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FQAorR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAorR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKK0dTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OX0RFRklORSA9IEBHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkVACitHVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAorSEFWRV9ET0NCT09LMkhUTUwgPSBASEFWRV9ET0NCT09LMkhUTUxACitIQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAorSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAorSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAorSEFWRV9GSUcyREVWID0gQEhBVkVfRklHMkRFVkAKK0hBVkVfR01QID0gQEhBVkVfR01QQAorSEFWRV9HU0wgPSBASEFWRV9HU0xACitIQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAorSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAorSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKK0hBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAorSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKK0hPU1RfQ1BVID0gQEhPU1RfQ1BVQAorSFRNTF9ESVIgPSBASFRNTF9ESVJACitJTkVUX0FUT05fTElCUyA9IEBJTkVUX0FUT05fTElCU0AKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACitJTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKK0lOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKK0lOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKK0lOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAorSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKK0lOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKK0lOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACitJTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJESVIgPSBATElCRElSQAorTElCSUNPTlYgPSBATElCSUNPTlZACitMSUJJTlRMID0gQExJQklOVExACitMSUJNID0gQExJQk1ACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMT0NBTEVESVIgPSBATE9DQUxFRElSQAorTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAorTFRMSUJJTlRMID0gQExUTElCSU5UTEAKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUlOVCA9IEBNQUlOVEAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKK01TR01FUkdFID0gQE1TR01FUkdFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKK1BBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACitQQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAorUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACitQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BMVUdJTkRJUiA9IEBQTFVHSU5ESVJACitQT1NVQiA9IEBQT1NVQkAKK1BST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAorUFlUSE9OID0gQFBZVEhPTkAKK1BZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACitQWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAorUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAorUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1ZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACitWQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACitWQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACitWRVJTSU9OID0gQFZFUlNJT05ACitXQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKK1dJTjMyX0xJQlMgPSBAV0lOMzJfTElCU0AKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKK1hHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKK1hNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAorWFNMVFBST0MgPSBAWFNMVFBST0NACitYU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3BrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACitwa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAorcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3B5ZXhlY2RpciA9IEBweWV4ZWNkaXJACitweXRob25kaXIgPSBAcHl0aG9uZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACisKKyMgYmFzZSBuYW1lIG9mIGRvYworRE9DID0gcHdnCisjIGZvcm1hdHMgZGVmaW5lZCBmb3IgdXBsb2FkLWRvYy5tYWsKK0ZPUk1BVFMgPSBodG1sIHBzIHBkZgorCisjIG1haW4geG1sIGZpbGUKK01BSU4gPSAkKERPQykueG1sCisjIGFsbCB4bWwgc291cmNlcworWE1MID0gJChub3RkaXIgJCh3aWxkY2FyZCAkKHNyY2RpcikvKi54bWwpKQorIyBiYXNlIHN0eWxlIHNoZWV0CitDU1MgPSBiYXNlLmNzcworCisjIGltYWdlIHNvdXJjZXMKK1BOR19TUkMgPSAKK0ZJR19TUkMgPSAkKG5vdGRpciAkKHdpbGRjYXJkICQoc3JjZGlyKS8qLmZpZykpCisKKyMgZXh0cmEgc291cmNlcyB0byBjb3B5IGluIGJ1aWxkIGRpcmVjdG9yeQorRVhUUkFfU1JDID0gCisKKyMgaW50ZXJtZWRpYXJ5IGJ1aWxkIHBhdGgKK0JVSUxERElSID0gYnVpbGQKKyMgc2FtZSBmb3IgaW1hZ2VzCitCVUlMRElNQUdFU0RJUiA9ICQoQlVJTERESVIpL2ltYWdlcworCisjIGltYWdlcworIyByaWdodCBub3csIHdlIG9ubHkgYWxsb3cgLnBuZyBhbmQgLmZpZyBhcyBzb3VyY2UKKyMgd2UgbWlnaHQgYWRkIG1vcmUgbGF0ZXIgaWYgd2UgZmVlbCB0aGUgbmVlZAorCisjIFBORydzIGNhbiBiZSBzb3VyY2Ugb3IgYnVpbHQgZnJvbSAuZmlnCitQTkcgPSAkKHN0cmlwICQoUE5HX1NSQykgJChGSUdfU1JDOi5maWc9LnBuZykpCisjIEVQUyAucHMgZmlsZXMgY2FuIGJlIGJ1aWx0IGZyb20gLnBuZyBvciAuZmlnCitFUFMgPSAkKHN0cmlwICQoRklHX1NSQzouZmlnPS5wcykgJChQTkdfU1JDOi5wbmc9LnBzKSkKKyMgUERGIC5wZGYgZmlsZXMgY2FuIGJlIGJ1aWx0IGZyb20gLnBuZyBvciAuZmlnCitQREYgPSAkKHN0cmlwICQoRklHX1NSQzouZmlnPS5wZGYpICQoUE5HX1NSQzoucG5nPS5wZGYpKQorCisjIHdoZXJlIHdlIGV4cGVjdCB0byBmaW5kIGltYWdlcyBkdXJpbmcgYnVpbGRpbmcsIHdoZXRoZXIgYnkgY29weWluZworIyBvciBieSBnZW5lcmF0aW5nIHRoZW0KK1BOR19CVUlMVCA9ICQoZm9yZWFjaCBmaWxlLCAkKFBORyksICQoQlVJTERJTUFHRVNESVIpLyQoZmlsZSkpCitFUFNfQlVJTFQgPSAkKGZvcmVhY2ggZmlsZSwgJChFUFMpLCAkKEJVSUxESU1BR0VTRElSKS8kKGZpbGUpKQorUERGX0JVSUxUID0gJChmb3JlYWNoIGZpbGUsICQoUERGKSwgJChCVUlMRElNQUdFU0RJUikvJChmaWxlKSkKK1NSQyA9ICQoWE1MKSAkKFBOR19TUkMpICQoRklHX1NSQykgJChDU1MpICQoRVhUUkFfU1JDKQorCisjIGdlbmVyYXRlIEE0IGRvY3MKK1BBUEVSX0xPQ0FMRSA9IG5sX05MCitARE9DX0hUTUxfRkFMU0VASFRNTF9EQVQgPSAKKworIyBjYW4gd2UgZ2VuZXJhdGUgSFRNTCA/CitARE9DX0hUTUxfVFJVRUBIVE1MX0RBVCA9IGh0bWwKK0BET0NfSFRNTF9GQUxTRUBIVE1MX1RBUkdFVCA9IAorQERPQ19IVE1MX1RSVUVASFRNTF9UQVJHRVQgPSBodG1sL2luZGV4Lmh0bWwKK0BET0NfUFNfRkFMU0VAUFNfREFUID0gCisKKyMgY2FuIHdlIGdlbmVyYXRlIFBTID8KK0BET0NfUFNfVFJVRUBQU19EQVQgPSAkKERPQykucHMKK0BET0NfUERGX0ZBTFNFQFBERl9EQVQgPSAKKworIyBjYW4gd2UgZ2VuZXJhdGUgUERGID8KK0BET0NfUERGX1RSVUVAUERGX0RBVCA9ICQoRE9DKS5wZGYKKworIyB0aGVzZSB2YXJpYWJsZXMgZGVmaW5lIHRoZSBsb2NhdGlvbiBvZiB0aGUgb25saW5lIGRvY3MKK0RPQ19TRVJWRVIgPSBnc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnCitET0NfQkFTRSA9IC9zcnYvZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy93d3cvZGF0YS9kb2MKK0RPQ19VUkwgPSAkKERPQ19TRVJWRVIpOiQoRE9DX0JBU0UpCisKKyMjIyB0aGlzIGlzIHRoZSBnZW5lcmljIGJpdCBhbmQgeW91IHNob3VsZG4ndCBuZWVkIHRvIGNoYW5nZSB0aGlzCisKKyMgZ2V0IHRoZSBnZW5lcmljIGRvY2J1aWxkaW5nIE1ha2VmaWxlIHN0dWZmCisjIGdldCB0aGUgZ2VuZXJpYyB1cGxvYWQgdGFyZ2V0CisKKyMjIyB0aGlzIGlzIHN0YW5kYXJkIGF1dG9tYWtlIHN0dWZmCisKKyMgcGFja2FnZSB1cCBhbGwgdGhlIHNvdXJjZQorRVhUUkFfRElTVCA9ICQoU1JDKQorCisjIGluc3RhbGwgZG9jdW1lbnRhdGlvbgorcHdnZGlyID0gJChkb2NkaXIpLyQoRE9DKQorcHdnX0RBVEEgPSAkKFBERl9EQVQpICQoUFNfREFUKQorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvLi4vbWFudWFscy5tYWsgJCh0b3Bfc3JjZGlyKS9jb21tb24vdXBsb2FkLWRvYy5tYWsgJChzcmNkaXIpLy4uL2h0bWxpbnN0YWxsLm1hayAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBkb2NzL3B3Zy9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSBkb2NzL3B3Zy9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKK2luc3RhbGwtcHdnREFUQTogJChwd2dfREFUQSkKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKHB3Z2RpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKHB3Z2RpcikiCisJQGxpc3Q9JyQocHdnX0RBVEEpJzsgdGVzdCAtbiAiJChwd2dkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKHB3Z2RpciknIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKHB3Z2RpcikiIHx8IGV4aXQgJCQ/OyBcCisJZG9uZQorCit1bmluc3RhbGwtcHdnREFUQToKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKHB3Z19EQVRBKSc7IHRlc3QgLW4gIiQocHdnZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAorCXRlc3QgLW4gIiQkZmlsZXMiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiAoIGNkICckKERFU1RESVIpJChwd2dkaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQocHdnZGlyKSIgJiYgcm0gLWYgJCRmaWxlcwordGFnczogVEFHUworVEFHUzoKKworY3RhZ3M6IENUQUdTCitDVEFHUzoKKworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjaGVjay1sb2NhbAorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoREFUQSkgYWxsLWxvY2FsCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChwd2dkaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1sb2NhbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWRhdGEtbG9jYWwgaW5zdGFsbC1wd2dEQVRBCisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmLWFtOgorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtbG9jYWwgdW5pbnN0YWxsLXB3Z0RBVEEKKworLk1BS0U6IGNoZWNrLWFtIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IGFsbCBhbGwtYW0gYWxsLWxvY2FsIGNoZWNrIGNoZWNrLWFtIGNoZWNrLWxvY2FsIGNsZWFuIFwKKwljbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbG9jYWwgZGlzdGNsZWFuIFwKKwlkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCisJaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCisJaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZGF0YS1sb2NhbCBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBcCisJaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKKwlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIFwKKwlpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1wd2dEQVRBIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisJdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtbG9jYWwgdW5pbnN0YWxsLXB3Z0RBVEEKKworCisjIyMgZ2VuZXJhdGUgYWxsIGRvY3VtZW50YXRpb24gYnkgZGVmYXVsdAorIyBob29rIGluIGh0bWwgZ2VuZXJhdGlvbgorYWxsLWxvY2FsOiBodG1sCitodG1sOiAkKEhUTUxfVEFSR0VUKQorcHM6ICQoUFNfREFUKQorcGRmOiAkKFBERl9EQVQpCisKK2RlYnVnOgorCUBlY2hvICJvdXRwdXR0aW5nIHNvbWUgdXNlZnVsIGRlYnVnIGluZm9ybWF0aW9uIgorCUBlY2hvICJTb3VyY2UgWE1MOiIKKwlAZWNobyAiWE1MOiAnJChYTUwpJyIKKwlAZWNobyAiQ1NTOiAnJChDU1MpJyIKKwlAZWNobyAiU291cmNlIGltYWdlIGZpbGVzOiIKKwlAZWNobyAiUE5HX1NSQzogJyQoUE5HX1NSQyknIgorCUBlY2hvICJGSUdfU1JDOiAnJChGSUdfU1JDKSciCisJQGVjaG8gIkFsbCB1c2VkIGltYWdlIGZpbGVzOiIKKwlAZWNobyAiUE5HOiAnJChQTkcpJyIKKwlAZWNobyAiRVBTOiAnJChFUFMpJyIKKwlAZWNobyAiUERGOiAnJChQREYpJyIKKwlAZWNobyAiQWxsIHVzZWQgaW1hZ2UgZmlsZXMgaW4gdGhlaXIgYnVpbHQgcGF0aDoiCisJQGVjaG8gIlBOR19CVUlMVDogJyQoUE5HX0JVSUxUKSciCisJQGVjaG8gIkVQU19CVUlMVDogJyQoRVBTX0JVSUxUKSciCisJQGVjaG8gIlBERl9CVUlMVDogJyQoUERGX0JVSUxUKSciCisJQGVjaG8gIkVuZCByZXN1bHQgcHJvZHVjdHM6IgorCUBlY2hvICJIVE1MX0RBVDogJyQoSFRNTF9EQVQpJyIKKwlAZWNobyAiUFNfREFUOiAgICckKFBTX0RBVCknIgorCUBlY2hvICJQREZfREFUOiAgJyQoUERGX0RBVCknIgorCisjIGEgcnVsZSB0byBjb3B5IGFsbCBvZiB0aGUgc291cmNlIGZvciBkb2NzIGludG8gJChidWlsZGRpcikvYnVpbGQKKyQoQlVJTERESVIpLyQoTUFJTik6ICQoWE1MKSAkKENTUykgJChFWFRSQV9TUkMpCisJQC1ta2RpciAtcCAkKEJVSUxERElSKTsgXAorCWlmIHRlc3QgIngkKEVYVFJBX1NSQykiICE9ICJ4IjsgdGhlbiBmb3IgYSBpbiAkKEVYVFJBX1NSQyk7IGRvIGNwICQoc3JjZGlyKS8kJGEgJChCVUlMRERJUik7IGRvbmU7IGZpIDsgXAorCWZvciBhIGluICQoWE1MKTsgZG8gY3AgJChzcmNkaXIpLyQkYSAkKEJVSUxERElSKTsgZG9uZSA7IFwKKwlmb3IgYSBpbiAkKENTUyk7IGRvIGNwICQoc3JjZGlyKS8kJGEgJChCVUlMRERJUik7IGRvbmUgOyBcCisJY3AgLi4vdmVyc2lvbi5lbnRpdGllcyAkKEJVSUxERElSKSA7IFwKKwljcCAkKHRvcF9zcmNkaXIpL2RvY3MvdXJsLmVudGl0aWVzICQoQlVJTERESVIpCisKKyMgd2Ugc2hvdWxkIHN3aXRjaCB0byB4c2x0cHJvYworIyBkb2Nib29rMmh0bWwgYWthIGphZGUgY2FuJ3QgYWRkIHRoZSBlbmNvZGluZyBlYXNpbHkgdG8gdGhlIGh0bWwgbWV0YQorIyAoYnV0IHdlIGFyZSBsYXp5IGFuZCBqdXN0IGFidXNlIHNlZCB0byBhZGQgaXQpCisjIGp3IC1mIGRvY2Jvb2sgLWIgaHRtbCAtZCBwd2cuZHNsIC1vIC4uL2h0bWwgLVYgJyV1c2UtaWQtYXMtZmlsZW5hbWUlJyAkKE1BSU4pCisjIHRoaXMgaXMgYSBzdGFydGluZyBwb2ludAorIyB4c2x0cHJvYyAtLW5vbmV0IC91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc3R5bGVzaGVldC9ud2Fsc2gvaHRtbC9kb2Nib29rLnhzbCBwd2cueG1sCisjIAoraHRtbC9pbmRleC5odG1sOiAkKEJVSUxERElSKS8kKE1BSU4pICQoUE5HX0JVSUxUKSAkKEZJR19TUkMpCisJQCQoTUFLRSkgY2hlY2stbG9jYWwKKwlAZWNobyAiKioqIEdlbmVyYXRpbmcgSFRNTCBvdXRwdXQgKioqIgorCUAtbWtkaXIgLXAgaHRtbAorCUBjcCAtZiAkKHNyY2RpcikvLi4vaW1hZ2UtcG5nICQoQlVJTERESVIpL2ltYWdlLmVudGl0aWVzCisJQGNkICQoQlVJTERESVIpICYmIFNQX0VOQ09ESU5HPSJVVEYtOCIgZG9jYm9vazJodG1sIC1vIC4uL2h0bWwgLVYgJyV1c2UtaWQtYXMtZmlsZW5hbWUlJyAkKE1BSU4pCisJQCQoU0VEKSAtaSAtZSAncy9cKF5DT05URU5ULipcKVwoLj5cKS9cMTtjaGFyc2V0PVVURi04XDIvJyBodG1sLypodG1sCisJQHRlc3QgIngkKENTUykiICE9ICJ4IiAmJiBcCisgICAgICAgICAgZWNobyAiQ29weWluZyAuY3NzIGZpbGVzOiAkKENTUykiICYmIFwKKyAgICAgICAgICBjcCAkKHNyY2RpcikvJChDU1MpIGh0bWwKKwlAdGVzdCAieCQoUE5HKSIgIT0gIngiICYmIFwKKyAgICAgICAgICBlY2hvICJDb3B5aW5nIC5wbmcgaW1hZ2VzOiAkKFBOR19CVUlMVCkiICYmIFwKKwkgIG1rZGlyIC1wIGh0bWwvaW1hZ2VzICYmIFwKKyAgICAgICAgICBjcCAkKFBOR19CVUlMVCkgaHRtbC9pbWFnZXMgfHwgdHJ1ZQorCiskKERPQykucHM6ICQoQlVJTERESVIpLyQoTUFJTikgJChFUFNfQlVJTFQpICQoUE5HX1NSQykgJChGSUdfU1JDKQorCUAkKE1BS0UpIGNoZWNrLWxvY2FsCisJQGVjaG8gIioqKiBHZW5lcmF0aW5nIFBTIG91dHB1dCAqKioiCisJQGNwIC1mICQoc3JjZGlyKS8uLi9pbWFnZS1lcHMgJChCVUlMRERJUikvaW1hZ2UuZW50aXRpZXMKKwljZCAkKEJVSUxERElSKSAmJiBTUF9FTkNPRElORz0iVVRGLTgiIGRvY2Jvb2sycHMgLW8gLi4gJChNQUlOKQorIwlleHBvcnQgTENfUEFQRVI9JChQQVBFUl9MT0NBTEUpICYmIGNkICQoQlVJTERESVIpICYmIHhtbHRvIHBzIC1vIC4uICQoTUFJTikKKworJChET0MpLnBkZjogJChET0MpLnBzCisJQCQoTUFLRSkgY2hlY2stbG9jYWwKKwlAZWNobyAiKioqIEdlbmVyYXRpbmcgUERGIG91dHB1dCAqKioiCisJQHBzMnBkZiAkKERPQykucHMKKworIyQoRE9DKS5wZGY6ICQoTUFJTikgJChQREYpICQoRklHX1NSQykKKyMJQGVjaG8gIioqKiBHZW5lcmF0aW5nIFBERiBvdXRwdXQgKioqIgorIwlAY3AgLWYgJChzcmNkaXIpLy4uL2ltYWdlLXBkZiBpbWFnZS5lbnRpdGllcworIwlAZXhwb3J0IExDX1BBUEVSPSQoUEFQRVJfTE9DQUxFKSAmJiB4bWx0byBwZGYgJChNQUlOKQorIwlAcm0gaW1hZ2UuZW50aXRpZXMKKworY2xlYW4tbG9jYWw6CisJLSQoUk0pIC1yICQoQlVJTERESVIpCisJLSQoUk0pIC1yIGh0bWwKKwktJChSTSkgJChET0MpLnBzCisJLSQoUk0pICQoRE9DKS5wZGYKKwktJChSTSkgLXIgd3d3CisKKyMjIyBpbWFnZSBnZW5lcmF0aW9uCisKKyMgY29weSBwbmcgZnJvbSBzb3VyY2UgZGlyIHBuZworJChCVUlMRElNQUdFU0RJUikvJS5wbmc6ICQoc3JjZGlyKS8lLnBuZworCUBlY2hvICJDb3B5aW5nICQ8IHRvICRAIgorCUBta2RpciAtcCAkKEJVSUxESU1BR0VTRElSKQorCUBjcCAkPCAkQAorIyBtYWtlIHBuZyBmcm9tIGZpZworJChCVUlMRElNQUdFU0RJUikvJS5wbmc6ICUuZmlnCisJQGVjaG8gIkdlbmVyYXRpbmcgJEAgZnJvbSAkPCIKKwlAbWtkaXIgLXAgJChCVUlMRElNQUdFU0RJUikKKwlAZmlnMmRldiAtTHBuZyAkPCAkQAorCisjIG1ha2UgcHMoRVBTKSBmcm9tIGZpZworJChCVUlMRElNQUdFU0RJUikvJS5wczogJS5maWcKKwlAZWNobyAiR2VuZXJhdGluZyAkQCBmcm9tICQ8IgorCUBta2RpciAtcCAkKEJVSUxESU1BR0VTRElSKQorCUBmaWcyZGV2IC1MZXBzICQ8ICRACisKKyMgbWFrZSBwZGYgZnJvbSBmaWcKKyQoQlVJTERJTUFHRVNESVIpLyUucGRmOiAlLmZpZworCUBlY2hvICJHZW5lcmF0aW5nICRAIGZyb20gJDwiCisJQG1rZGlyIC1wICQoQlVJTERJTUFHRVNESVIpCisJQGZpZzJkZXYgLUxwZGYgJDwgJEAKKworIyBtYWtlIHBkZiBmcm9tIHBuZworJChCVUlMRElNQUdFU0RJUikvJS5wZGY6ICUucG5nCisJQGVjaG8gIkdlbmVyYXRpbmcgJEAgZnJvbSAkPCIKKwlAbWtkaXIgLXAgJChCVUlMRElNQUdFU0RJUikKKwlAY2F0ICQ8IHwgcG5ndG9wbm0gfCBwbm10b3BzIC1ub3R1cm4gMj4gL2Rldi9udWxsIHwgZXBzdG9wZGYgLS1maWx0ZXIgLS1vdXRmaWxlICRAIDI+IC9kZXYvbnVsbAorCisjIG1ha2UgcHMoRVBTKSBmcm9tIHBuZworJChCVUlMRElNQUdFU0RJUikvJS5wczogJS5wbmcKKwlAZWNobyAiR2VuZXJhdGluZyAkQCBmcm9tICQ8IgorCUBta2RpciAtcCAkKEJVSUxESU1BR0VTRElSKQorCUBjYXQgJDwgfCBwbmd0b3BubSB8IHBubXRvcHMgLW5vdHVybiA+ICRAIDI+IC9kZXYvbnVsbAorCisjIG1ha2Ugc3VyZSB4bWwgdmFsaWRhdGVzIHByb3Blcmx5CitjaGVjay1sb2NhbDogJChCVUlMRERJUikvJChNQUlOKQorCUBjcCAtZiAkKHNyY2RpcikvLi4vaW1hZ2UtcG5nICQoQlVJTERESVIpL2ltYWdlLmVudGl0aWVzCisJY2QgJChCVUlMRERJUikgJiYgeG1sbGludCAtbm9vdXQgLXZhbGlkICQoTUFJTikKKworIyBhdm9pZCAnY3A6IGNhbm5vdCBjcmVhdGUgcmVndWxhciBmaWxlIGBidWlsZC9pbWFnZS5lbnRpdGllcyc6IEZpbGUgZXhpc3RzJworIyBlcnJvcnMgZHVyaW5nICdtYWtlIGRpc3RjaGVjaycgYnkgZGlzYWJsaW5nIHBhcmFsbGVsIGJ1aWxkcworLk5PVFBBUkFMTEVMOgorCit1cGxvYWQ6ICQoRk9STUFUUykKKwlAaWYgZWNobyAkKEZPUk1BVFMpIHwgZ3JlcCBodG1sID4gL2Rldi9udWxsOyB0aGVuIFwKKwkgIGVjaG8gIlByZXBhcmluZyBkb2NzIGZvciB1cGxvYWQgKHJlYmFzaW5nIGNyb3NzLXJlZmVyZW5jZXMpIC4uLiIgOyBcCisJICBpZiB0ZXN0IHgkKGJ1aWxkZGlyKSAhPSB4JChzcmNkaXIpOyB0aGVuIFwKKwkgICAgZWNobyAibWFrZSB1cGxvYWQgY2FuIG9ubHkgYmUgdXNlZCBpZiBzcmNkaXIgPT0gYnVpbGRkaXIiOyBcCisJICAgIGV4aXQgMTsgXAorCSAgZmk7IFwKKwkgICMgZ3RrZG9jLXJlYmFzZSBzb21ldGltZXMgZ2V0cyBjb25mdXNlZCwgc28gcmVzZXQgZXZlcnl0aGluZyB0byBcCisJICAjIGxvY2FsIGxpbmtzIGJlZm9yZSByZWJhc2luZyB0byBvbmxpbmUgbGlua3MgICAgICAgICAgICAgICAgICAgXAorCSAgZ3RrZG9jLXJlYmFzZSAtLWh0bWwtZGlyPSQoYnVpbGRkaXIpL2h0bWwgMj4vZGV2L251bGwgMj4vZGV2L251bGwgOyBcCisJICByZWJhc2U9YGd0a2RvYy1yZWJhc2UgLS12ZXJib3NlIC0tb25saW5lIC0taHRtbC1kaXI9JChidWlsZGRpcikvaHRtbGAgOyBcCisJICBlY2hvICIkJHJlYmFzZSIgfCBncmVwIC1lICJPbi0qbGluZSI7IFwKKwkgIGZvciByZXEgaW4gZ2xpYiBnb2JqZWN0IGdzdHJlYW1lciBnc3RyZWFtZXItbGlicyBnc3QtcGx1Z2lucy1iYXNlLWxpYnM7IGRvIFwKKwkgICAgaWYgISAoIGVjaG8gIiQkcmViYXNlIiB8IGdyZXAgLWkgLWUgIk9uLSpsaW5lLiovJCRyZXEvIiApOyB0aGVuIFwKKwkgICAgICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiA7IFwKKwkgICAgICBlY2hvICIgQ291bGQgbm90IGRldGVybWluZSBvbmxpbmUgbG9jYXRpb24gZm9yICQkcmVxIGRvY3MuIENyb3NzLXJlZmVyZW5jaW5nIHdpbGwgYmUgIiA7IFwKKwkgICAgICBlY2hvICIgYnJva2VuLCBzbyBub3QgdXBsb2FkaW5nLiBNYWtlIHN1cmUgdGhlIGxpYnJhcnkncyBndGstZG9jIGRvY3VtZW50YXRpb24gaXMgICAgIiA7IFwKKwkgICAgICBlY2hvICIgaW5zdGFsbGVkIHNvbWV3aGVyZSBpbiAvdXNyL3NoYXJlL2d0ay1kb2MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiA7IFwKKwkgICAgICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiA7IFwKKwkgICAgICBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgIGRvbmU7IFwKKwkgIGV4cG9ydCBTUkM9IiQkU1JDIGh0bWwiOyBcCisJZmk7IFwKKwlpZiBlY2hvICQoRk9STUFUUykgfCBncmVwIHBzID4gL2Rldi9udWxsOyB0aGVuIGV4cG9ydCBTUkM9IiQkU1JDICQoRE9DKS5wcyI7IGZpOyBcCisJaWYgZWNobyAkKEZPUk1BVFMpIHwgZ3JlcCBwZGYgPiAvZGV2L251bGw7IHRoZW4gZXhwb3J0IFNSQz0iJCRTUkMgJChET0MpLnBkZiI7IGZpOyBcCisJXAorCSMgdXBsb2FkIHJlbGVhc2VzIHRvIGJvdGggMC4xMC5YLyBhbmQgaGVhZC8gc3ViZGlyZWN0b3JpZXMgXAorCWlmIHRlc3QgIngkKFBBQ0tBR0VfVkVSU0lPTl9OQU5PKSIgPSB4MDsgdGhlbiBcCisJICBleHBvcnQgRElSPSQoRE9DX0JBU0UpL2dzdHJlYW1lci8kKFZFUlNJT04pLyQoRE9DKTsgXAorCSAgZWNobyBVcGxvYWRpbmcgJCRTUkMgdG8gJChET0NfU0VSVkVSKTokJERJUjsgXAorCSAgc3NoICQoRE9DX1NFUlZFUikgbWtkaXIgLXAgJCRESVI7IFwKKwkgIHJzeW5jIC1ydiAtZSBzc2ggLS1kZWxldGUgJCRTUkMgJChET0NfU0VSVkVSKTokJERJUjsgXAorCSAgc3NoICQoRE9DX1NFUlZFUikgY2htb2QgLVIgZyt3ICQkRElSOyBcCisJZmk7IFwKKwlcCisJZXhwb3J0IERJUj0kKERPQ19CQVNFKS9nc3RyZWFtZXIvaGVhZC8kKERPQyk7IFwKKwllY2hvIFVwbG9hZGluZyAkJFNSQyB0byAkKERPQ19TRVJWRVIpOiQkRElSOyBcCisJc3NoICQoRE9DX1NFUlZFUikgbWtkaXIgLXAgJCRESVI7IFwKKwlyc3luYyAtcnYgLWUgc3NoIC0tZGVsZXRlICQkU1JDICQoRE9DX1NFUlZFUik6JCRESVI7IFwKKwlzc2ggJChET0NfU0VSVkVSKSBjaG1vZCAtUiBnK3cgJCRESVI7IFwKKwlcCisJaWYgZWNobyAkKEZPUk1BVFMpIHwgZ3JlcCBodG1sID4gL2Rldi9udWxsOyB0aGVuIFwKKwkgIGVjaG8gIlVuLXByZXBhcmluZyBkb2NzIGZvciB1cGxvYWQgKHJlYmFzaW5nIGNyb3NzLXJlZmVyZW5jZXMpIC4uLiIgOyBcCisJICBndGtkb2MtcmViYXNlIC0taHRtbC1kaXI9JChidWlsZGRpcikvaHRtbCA7IFwKKwlmaTsgXAorCWVjaG8gRG9uZQorCitARE9DX0hUTUxfVFJVRUBpbnN0YWxsLWRhdGEtbG9jYWw6IGh0bWwKK0BET0NfSFRNTF9UUlVFQAkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGRvY2RpcikvJChET0MpCitARE9DX0hUTUxfVFJVRUAJY3AgLXByICQoSFRNTF9EQVQpICQoREVTVERJUikkKGRvY2RpcikvJChET0MpCisKK0BET0NfSFRNTF9UUlVFQHVuaW5zdGFsbC1sb2NhbDoKK0BET0NfSFRNTF9UUlVFQAlmb3IgcGFydCBpbiAkKEhUTUxfREFUKTsgZG8gcm0gLXJmICQoREVTVERJUikkKGRvY2RpcikvJChET0MpLyQkcGFydDsgZG9uZQorQERPQ19IVE1MX0ZBTFNFQGluc3RhbGwtZGF0YS1sb2NhbDoKK0BET0NfSFRNTF9GQUxTRUB1bmluc3RhbGwtbG9jYWw6CisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2RvY3MvcHdnL2FkdmFuY2VkLWNsb2NrLnhtbCBiL2RvY3MvcHdnL2FkdmFuY2VkLWNsb2NrLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjhhZTM5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wd2cvYWR2YW5jZWQtY2xvY2sueG1sCkBAIC0wLDAgKzEsMTQyIEBACis8Y2hhcHRlciBpZD0iY2hhcHRlci1hZHZhbmNlZC1jbG9jayI+CisgIDx0aXRsZT5DbG9ja2luZzwvdGl0bGU+CisKKyAgPHBhcmE+CisgICAgV2hlbiBwbGF5aW5nIGNvbXBsZXggbWVkaWEsIGVhY2ggc291bmQgYW5kIHZpZGVvIHNhbXBsZSBtdXN0IGJlIHBsYXllZCBpbiBhCisgICAgc3BlY2lmaWMgb3JkZXIgYXQgYSBzcGVjaWZpYyB0aW1lLiBGb3IgdGhpcyBwdXJwb3NlLCBHU3RyZWFtZXIgcHJvdmlkZXMgYQorICAgIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20uCisgIDwvcGFyYT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tY2xvY2stdGltZS10eXBlcyIgeHJlZmxhYmVsPSJUeXBlcyBvZiB0aW1lIj4gCisgICAgPHRpdGxlPiBUeXBlcyBvZiB0aW1lIDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoZXJlIGFyZSB0d28ga2luZHMgb2YgdGltZSBpbiBHU3RyZWFtZXIuIDxlbXBoYXNpcworCXJvbGU9InN0cm9uZyI+Q2xvY2sgdGltZTwvZW1waGFzaXM+IGlzIGFuIGFic29sdXRlIHRpbWUuIEJ5IGNvbnRyYXN0LAorICAgICAgPGVtcGhhc2lzIHJvbGU9InN0cm9uZyI+ZWxlbWVudCB0aW1lPC9lbXBoYXNpcz4gaXMgdGhlIHJlbGF0aXZlIHRpbWUsCisgICAgICB1c3VhbGx5IHRvIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBtZWRpYSBzdHJlYW0uIFRoZSBlbGVtZW50IHRpbWUKKyAgICAgIHJlcHJlc2VudHMgdGhlIHRpbWUgdGhhdCBzaG91bGQgaGF2ZSBhIG1lZGlhIHNhbXBsZSB0aGF0IGlzIGJlaW5nCisgICAgICBwcm9jZXNzZWQgYnkgdGhlIGVsZW1lbnQgYXQgdGhpcyB0aW1lLiBUaGUgZWxlbWVudCB0aW1lIGlzIGNhbGN1bGF0ZWQgYnkKKyAgICAgIGFkZGluZyBhbiBvZmZzZXQgdG8gdGhlIGNsb2NrIHRpbWUuCisgICAgPC9wYXJhPgorICA8L3NlY3QxPgorICA8c2VjdDEgaWQ9InNlY3Rpb24tY2xvY2tzIiB4cmVmbGFiZWw9IkNsb2NrcyI+CisgICAgPHRpdGxlPkNsb2NrczwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBHU3RyZWFtZXIgY2FuIHVzZSBkaWZmZXJlbnQgY2xvY2tzLiBUaG91Z2ggdGhlIHN5c3RlbSB0aW1lIGNhbiBiZSB1c2VkCisgICAgICBhcyBhIGNsb2NrLCBzb3VuZGNhcmRzIGFuZCBvdGhlciBkZXZpY2VzIHByb3ZpZGVzIGEgYmV0dGVyIHRpbWUgc291cmNlLiBGb3IKKyAgICAgIHRoaXMgcmVhc29uIHNvbWUgZWxlbWVudHMgcHJvdmlkZSBhIGNsb2NrLiBUaGUgbWV0aG9kCisgICAgICA8ZnVuY3Rpb24+Z2V0X2Nsb2NrPC9mdW5jdGlvbj4gaXMgaW1wbGVtZW50ZWQgaW4gZWxlbWVudHMgdGhhdCBwcm92aWRlCisgICAgICBvbmUuCisgICAgPC9wYXJhPgorICAgIAorICAgIDxwYXJhPgorICAgICAgQXMgY2xvY2tzIHJldHVybiBhbiBhYnNvbHV0ZSBtZWFzdXJlIG9mIHRpbWUsIHRoZXkgYXJlIG5vdCB1c3VhbGx5IHVzZWQKKyAgICAgIGRpcmVjdGx5LiBJbnN0ZWFkLCBhIHJlZmVyZW5jZSB0byBhIGNsb2NrIGlzIHN0b3JlZCBpbiBhbnkgZWxlbWVudCB0aGF0IG5lZWRzCisgICAgICBpdCwgYW5kIGl0IGlzIHVzZWQgaW50ZXJuYWxseSBieSBHU3RyZWFtZXIgdG8gY2FsY3VsYXRlIHRoZSBlbGVtZW50IHRpbWUuCisgICAgPC9wYXJhPgorICA8L3NlY3QxPgorICAKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLXRpbWUtZGF0YS1mbG93IiB4cmVmbGFiZWw9IkZsb3cgb2YgZGF0YSBiZXR3ZWVuIGVsZW1lbnRzCisgICAgYW5kIHRpbWUiPgorICAgIDx0aXRsZT4KKyAgICAgIEZsb3cgb2YgZGF0YSBiZXR3ZWVuIGVsZW1lbnRzIGFuZCB0aW1lCisgICAgPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIE5vdyB3ZSB3aWxsIHNlZSBob3cgdGltZSBpbmZvcm1hdGlvbiB0cmF2ZWxzIHRoZSBwaXBlbGluZSBpbiBkaWZmZXJlbnQgc3RhdGVzLgorICAgIDwvcGFyYT4KKyAgICAKKyAgICA8cGFyYT4KKyAgICAgIFRoZSBwaXBlbGluZSBzdGFydHMgcGxheWluZy4KKyAgICAgIFRoZSBzb3VyY2UgZWxlbWVudCB0eXBpY2FsbHkga25vd3MgdGhlIHRpbWUgb2YgZWFjaCBzYW1wbGUuIAorICAgICAgPGZvb3Rub3RlPiAKKwk8cGFyYT4KKwkgIFNvbWV0aW1lcyBpdAorCSAgaXMgYSBwYXJzZXIgZWxlbWVudCB0aGUgb25lIHRoYXQga25vd3MgdGhlIHRpbWUsIGZvciBpbnN0YW5jZSBpZiBhIHBpcGVsaW5lCisJICBjb250YWlucyBhIGZpbGVzcmMgZWxlbWVudCBjb25uZWN0ZWQgdG8gYSBNUEVHIGRlY29kZXIgZWxlbWVudCwgdGhlIGZvcm1lciAKKwkgIGlzIHRoZSBvbmUgdGhhdCBrbm93cyB0aGUgdGltZSBvZiBlYWNoIHNhbXBsZSwgYmVjYXVzZSB0aGUga25vd2xlZGdlIG9mCisJICB3aGVuIHRvIHBsYXkgZWFjaCBzYW1wbGUgaXMgZW1iZWRkZWQgaW4gdGhlIE1QRUcgZm9ybWF0LiBJbiB0aGlzIGNhc2UgdGhpcworCSAgZWxlbWVudCB3aWxsIGJlIHJlZ2FyZGVkIGFzIHRoZSBzb3VyY2UgZWxlbWVudCBmb3IgdGhpcyBkaXNjdXNzaW9uLgorCTwvcGFyYT4KKyAgICAgIDwvZm9vdG5vdGU+IAorICAgICAgRmlyc3QsIHRoZSBzb3VyY2UgZWxlbWVudCBzZW5kcyBhIG5ld3NlZ21lbnQgZXZlbnQuIFRoaXMgZXZlbnQgY2FycmllcyBpbmZvcm1hdGlvbgorICAgICAgYWJvdXQgdGhlIGN1cnJlbnQgcmVsYXRpdmUgdGltZSBvZiB0aGUgbmV4dCBzYW1wbGUuIFRoaXMgcmVsYXRpdmUgdGltZSBpcworICAgICAgYXJiaXRyYXJ5LCBidXQgaXQgbXVzdCBiZSBjb25zaXN0ZW50IHdpdGggdGhlIHRpbWVzdGFtcCB0aGF0IHdpbGwgYmUKKyAgICAgIHBsYWNlZCBpbiBidWZmZXJzLiBJdCBpcyBleHBlY3RlZCB0byBiZSB0aGUgcmVsYXRpdmUgdGltZSB0byB0aGUgc3RhcnQKKyAgICAgIG9mIHRoZSBtZWRpYSBzdHJlYW0sIG9yIHdoYXRldmVyIG1ha2VzIHNlbnNlIGluIHRoZSBjYXNlIG9mIGVhY2ggbWVkaWEuCisgICAgICBXaGVuIHJlY2VpdmluZyBpdCwgdGhlIG90aGVyIGVsZW1lbnRzIGFkanVzdCB0aGVpciBvZmZzZXQgb2YgdGhlIGVsZW1lbnQgdGltZSBzbyB0aGF0IHRoaXMKKyAgICAgIHRpbWUgbWF0Y2hlcyB0aGUgdGltZSB3cml0dGVuIGluIHRoZSBldmVudC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoZW4gdGhlIHNvdXJjZSBlbGVtZW50IHNlbmRzIG1lZGlhIHNhbXBsZXMgaW4gYnVmZmVycy4gVGhpcyBlbGVtZW50IHBsYWNlcyBhCisgICAgICB0aW1lc3RhbXAgaW4gZWFjaCBidWZmZXIgc2F5aW5nIHdoZW4gdGhlIHNhbXBsZSBzaG91bGQgYmUgcGxheWVkLiBXaGVuIHRoZQorICAgICAgYnVmZmVyIHJlYWNoZXMgdGhlIHNpbmsgcGFkIG9mIHRoZSBsYXN0IGVsZW1lbnQsIHRoaXMgZWxlbWVudCBjb21wYXJlcyB0aGUKKyAgICAgIGN1cnJlbnQgZWxlbWVudCB0aW1lIHdpdGggdGhlIHRpbWVzdGFtcCBvZiB0aGUgYnVmZmVyLiBJZiB0aGUgdGltZXN0YW1wIGlzCisgICAgICBoaWdoZXIgb3IgZXF1YWwgaXQgcGxheXMgdGhlIGJ1ZmZlciwgb3RoZXJ3aXNlIGl0IHdhaXRzIHVudGlsIHRoZSB0aW1lIHRvCisgICAgICBwbGFjZSB0aGUgYnVmZmVyIGFycml2ZXMgd2l0aCA8ZnVuY3Rpb24+Z3N0X2VsZW1lbnRfd2FpdCgpPC9mdW5jdGlvbj4uCisgICAgPC9wYXJhPgorICAgIAorICAgIAorICAgIDxwYXJhPgorICAgICAgSWYgdGhlIHN0cmVhbSBpcyBzZWVrZWQsIHRoZSBuZXh0IHNhbXBsZXMgc2VudCB3aWxsIGhhdmUgYSB0aW1lc3RhbXAgdGhhdAorICAgICAgaXMgbm90IGFkanVzdGVkIHdpdGggdGhlIGVsZW1lbnQgdGltZS4gVGhlcmVmb3JlLCB0aGUgc291cmNlIGVsZW1lbnQgbXVzdAorICAgICAgc2VuZCBhIG5ld3NlZ21lbnQgZXZlbnQuCisgICAgPC9wYXJhPgorICA8L3NlY3QxPgorICA8c2VjdDEgaWQ9InNlY3Rpb24tY2xvY2stb2JsaWdhdGlvbnMtb2YtZWFjaC1lbGVtZW50IiB4cmVmbGFiZWw9Ik9ibGlnYXRpb25zCisgICAgb2YgZWFjaCBlbGVtZW50Ij4KKyAgICA8dGl0bGU+CisgICAgICBPYmxpZ2F0aW9ucyBvZiBlYWNoIGVsZW1lbnQuCisgICAgPC90aXRsZT4KKyAgICAKKyAgICA8cGFyYT4KKyAgICAgIExldCB1cyBjbGFyaWZ5IHRoZSBjb250cmFjdCBiZXR3ZWVuIEdTdHJlYW1lciBhbmQgZWFjaCBlbGVtZW50IGluIHRoZQorICAgICAgcGlwZWxpbmUuCisgICAgPC9wYXJhPgorICAgIAorICAgIDxzZWN0Mj4KKyAgICAgIDx0aXRsZT5Tb3VyY2UgZWxlbWVudHMgPC90aXRsZT4KKyAgICAgIDxwYXJhPgorCVNvdXJjZSBlbGVtZW50cyAob3IgcGFyc2VycyBvZiBmb3JtYXRzIHRoYXQgcHJvdmlkZSBub3Rpb24gb2YgdGltZSwgc3VjaAorCWFzIE1QRUcsIGFzIGV4cGxhaW5lZCBhYm92ZSkgbXVzdCBwbGFjZSBhIHRpbWVzdGFtcCBpbiBlYWNoIGJ1ZmZlciB0aGF0CisJdGhleSBkZWxpdmVyLiBUaGUgb3JpZ2luIG9mIHRoZSB0aW1lIHVzZWQgaXMgYXJiaXRyYXJ5LCBidXQgaXQgbXVzdAorCW1hdGNoIHRoZSB0aW1lIGRlbGl2ZXJlZCBpbiB0aGUgbmV3c2VnbWVudCBldmVudCAoc2VlIGJlbG93KS4KKwlIb3dldmVyLCBpdCBpcyBleHBlY3RlZCB0aGF0IHRoZSBvcmlnaW4gaXMgdGhlIG9yaWdpbiBvZiB0aGUgbWVkaWEKKwlzdHJlYW0uCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKwlJbiBvcmRlciB0byBpbml0aWFsaXplIHRoZSBlbGVtZW50IHRpbWUgb2YgdGhlIHJlc3Qgb2YgdGhlIHBpcGVsaW5lLCBhCisJc291cmNlIGVsZW1lbnQgbXVzdCBzZW5kIGEgbmV3c2VnbWVudCBldmVudCBiZWZvcmUgc3RhcnRpbmcgdG8gcGxheS4KKwlJbiBhZGRpdGlvbiwgYWZ0ZXIgc2Vla2luZywgYSBuZXdzZWdtZW50IGV2ZW50IG11c3QgYmUgc2VudCwgYmVjYXVzZQorCXRoZSB0aW1lc3RhbXAgb2YgdGhlIG5leHQgZWxlbWVudCBkb2VzIG5vdCBtYXRjaCB0aGUgZWxlbWVudCB0aW1lIG9mIHRoZQorCXJlc3Qgb2YgdGhlIHBpcGVsaW5lLgorICAgICAgPC9wYXJhPgorICAgICAgCisgICAgPC9zZWN0Mj4KKyAgICAKKyAgICA8c2VjdDI+IDx0aXRsZT4gU2luayBlbGVtZW50cyA8L3RpdGxlPgorICAgICAgPHBhcmE+CisJSWYgdGhlIGVsZW1lbnQgaXMgaW50ZW5kZWQgdG8gZW1pdCBzYW1wbGVzIGF0IGEgc3BlY2lmaWMgdGltZSAocmVhbCB0aW1lCisJcGxheWluZyksIHRoZSBlbGVtZW50IHNob3VsZCByZXF1aXJlIGEgY2xvY2ssIGFuZCB0aHVzIGltcGxlbWVudCB0aGUKKwltZXRob2QgPGZ1bmN0aW9uPnNldF9jbG9jazwvZnVuY3Rpb24+LgorICAgICAgPC9wYXJhPgorICAgICAgCisgICAgICA8cGFyYT4KKwlJbiBhZGRpdGlvbiwgYmVmb3JlIHBsYXlpbmcgZWFjaCBzYW1wbGUsIGlmIHRoZSBjdXJyZW50IGVsZW1lbnQgdGltZSBpcworCWxlc3MgdGhhbiB0aGUgdGltZXN0YW1wIGluIHRoZSBzYW1wbGUsIGl0IHdhaXQgdW50aWwgdGhlIGN1cnJlbnQgdGltZQorCWFycml2ZXMgc2hvdWxkIGNhbGwgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X3dhaXQoKTwvZnVuY3Rpb24+CisJPGZvb3Rub3RlPgorCSAgPHBhcmE+CisJICAgIFdpdGggc29tZSBzY2hlZHVsZXJzLCA8ZnVuY3Rpb24+Z3N0X2VsZW1lbnRfd2FpdCgpPC9mdW5jdGlvbj4gCisJICAgIGJsb2NrcyB0aGUgcGlwZWxpbmUuIEZvciBpbnN0YW5jZSwgaWYgdGhlcmUgaXMgb25lIGF1ZGlvIHNpbmsgZWxlbWVudAorCSAgICBhbmQgb25lIHZpZGVvIHNpbmsgZWxlbWVudCwgd2hpbGUgdGhlIGF1ZGlvIGVsZW1lbnQgaXMgd2FpdGluZyBmb3IgYQorCSAgICBzYW1wbGUgdGhlIHZpZGVvIGVsZW1lbnQgY2Fubm90IHBsYXkgb3RoZXIgc2FtcGxlLiBUaGlzIGJlaGF2aW91ciBpcworCSAgICB1bmRlciBkaXNjdXNzaW9uLCBhbmQgbWlnaHQgY2hhbmdlIGluIGEgZnV0dXJlIHJlbGVhc2UuCisJICA8L3BhcmE+CisJPC9mb290bm90ZT4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3QyPgorICA8L3NlY3QxPgorICAKKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvcHdnL2FkdmFuY2VkLWRwYXJhbXMueG1sIGIvZG9jcy9wd2cvYWR2YW5jZWQtZHBhcmFtcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBiNDY5NAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvcHdnL2FkdmFuY2VkLWRwYXJhbXMueG1sCkBAIC0wLDAgKzEsMTA1IEBACisKKzwhLS0gIyMjIyMjIyMjIyMjIGNoYXB0ZXIgIyMjIyMjIyMjIyMjIyAtLT4KKworPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItZHBhcmFtcyI+CisgIDx0aXRsZT5TdXBwb3J0aW5nIER5bmFtaWMgUGFyYW1ldGVyczwvdGl0bGU+CisgIDxwYXJhPgorICAgIFNvbWV0aW1lcyBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90IHBvd2VyZnVsIGVub3VnaCB0byBjb250cm9sIHRoZQorICAgIHBhcmFtZXRlcnMgdGhhdCBhZmZlY3QgdGhlIGJlaGF2aW91ciBvZiB5b3VyIGVsZW1lbnQuCisgICAgV2hlbiB0aGlzIGlzIHRoZSBjYXNlIHlvdSBjYW4gbWFyayB0aGVzZSBwYXJhbWV0ZXJzIGFzIGJlaW5nIENvbnRyb2xsYWJsZS4KKyAgICBBd2FyZSBhcHBsaWNhdGlvbnMgY2FuIHVzZSB0aGUgY29udHJvbGxlciBzdWJzeXN0ZW0gdG8gZHluYW1pY2FsbHkgYWRqdXN0CisgICAgdGhlIHByb3BlcnR5IHZhbHVlcyBvdmVyIHRpbWUuCisgIDwvcGFyYT4KKworPHNlY3QxIGlkPSJzZWN0aW9uLWRwYXJhbS1zdGFydCI+CisgIDx0aXRsZT5HZXR0aW5nIFN0YXJ0ZWQ8L3RpdGxlPgorCisgIDxwYXJhPgorICAgIFRoZSBjb250cm9sbGVyIHN1YnN5c3RlbSBpcyBjb250YWluZWQgd2l0aGluIHRoZQorICAgIDxmaWxlbmFtZT5nc3Rjb250cm9sbGVyPC9maWxlbmFtZT4gbGlicmFyeS4gWW91IG5lZWQgdG8gaW5jbHVkZSB0aGUgaGVhZGVyIGluCisgICAgeW91ciBlbGVtZW50J3Mgc291cmNlIGZpbGU6CisgIDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorLi4uCisjaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OworI2luY2x1ZGUgJmx0O2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuaCZndDsKKy4uLgorICA8L3Byb2dyYW1saXN0aW5nPgorCisgIDxwYXJhPgorICAgIEV2ZW4gdGhvdWdoIHRoZSA8ZmlsZW5hbWU+Z3N0Y29udHJvbGxlcjwvZmlsZW5hbWU+IGxpYnJhcnkgbWF5IGJlIGxpbmtlZCBpbnRvCisgICAgdGhlIGhvc3QgYXBwbGljYXRpb24sIHlvdSBzaG91bGQgbWFrZSBzdXJlIGl0IGlzIGluaXRpYWxpemVkIGluIHlvdXIKKyAgICA8ZmlsZW5hbWU+cGx1Z2luX2luaXQ8L2ZpbGVuYW1lPiBmdW5jdGlvbjoKKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisgIHN0YXRpYyBnYm9vbGVhbgorICBwbHVnaW5faW5pdCAoR3N0UGx1Z2luICpwbHVnaW4pCisgIHsKKyAgICAuLi4KKyAgICAvKiBpbml0aWFsaXplIGxpYnJhcnkgKi8KKyAgICBnc3RfY29udHJvbGxlcl9pbml0IChOVUxMLCBOVUxMKTsKKyAgICAuLi4KKyAgfQorICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICBJdCBtYWtlcyBub3Qgc2Vuc2UgZm9yIGFsbCBHT2JqZWN0IHBhcmFtZXRlciB0byBiZSByZWFsLXRpbWUgY29udHJvbGxlZC4KKyAgICBUaGVyZWZvcmUgdGhlIG5leHQgc3RlcCBpcyB0byBtYXJrIGNvbnRyb2xsYWJsZSBwYXJhbWV0ZXJzLgorICAgIFRoaXMgaXMgZG9uZSBieSB1c2luZyB0aGUgc3BlY2lhbCBmbGFnIDxjb25zdGFudD5HU1RfUEFSQU1fQ09OVFJPTExBQkxFPC9jb25zdGFudD4uCisgICAgd2hlbiBzZXR0aW5nIHVwIEdPYmplY3QgcGFyYW1zIGluIHRoZSA8ZnVuY3Rpb24+X2NsYXNzX2luaXQ8L2Z1bmN0aW9uPiBtZXRob2QuICAgIAorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9GUkVRLAorICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSAoImZyZXEiLCAiRnJlcXVlbmN5IiwgIkZyZXF1ZW5jeSBvZiB0ZXN0IHNpZ25hbCIsCisgICAgICAgICAgMC4wLCAyMDAwMC4wLCA0NDAuMCwKKyAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisKKzwvc2VjdDE+CisKKzxzZWN0MSBpZD0iY2hhcHRlci1kcGFyYW0tbG9vcCI+CisgIDx0aXRsZT5UaGUgRGF0YSBQcm9jZXNzaW5nIExvb3A8L3RpdGxlPgorCisgIDxwYXJhPgorICAgIEluIHRoZSBsYXN0IHNlY3Rpb24gd2UgbGVhcm5lZCBob3cgdG8gbWFyayBHT2JqZWN0IHBhcmFtcyBhcyBjb250cm9sbGFibGUuCisgICAgQXBwbGljYXRpb24gZGV2ZWxvcGVycyBjYW4gdGhlbiBxdWV1ZSBwYXJhbWV0ZXIgY2hhbmdlcyBmb3IgdGhlc2UgcGFyYW1ldGVycy4KKyAgICBUaGUgYXBwcm9hY2ggdGhlIGNvbnRyb2xsZXIgc3Vic3lzdGVtIHRha2VzIGlzIHRvIG1ha2UgcGx1Z2lucyByZXNwb25zaWJsZSAKKyAgICBmb3IgcHVsbGluZyB0aGUgY2hhbmdlcyBpbi4gVGhpcyByZXF1aXJlcyBqdXN0IG9uZSBhY3Rpb246CisgIDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorICAgIGdzdF9vYmplY3Rfc3luY192YWx1ZXMoZWxlbWVudCx0aW1lc3RhbXApOworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICBUaGlzIGNhbGwgbWFrZXMgYWxsIHBhcmFtZXRlci1jaGFuZ2VzIGZvciB0aGUgZ2l2ZW4gdGltZXN0YW1wIGFjdGl2ZSBieQorICAgIGFkanVzdGluZyB0aGUgR09iamVjdCBwcm9wZXJ0aWVzIG9mIHRoZSBlbGVtZW50LiBJdHMgdXAgdG8gdGhlIGVsZW1lbnQgdG8KKyAgICBkZXRlcm1pbmUgdGhlIHN5bmNocm9uaXNhdGlvbiByYXRlLgorICA8L3BhcmE+CisgIAorICA8c2VjdDIgaWQ9ImNoYXB0ZXItZHBhcmFtLWxvb3AtdmlkZW8iPgorICAgIDx0aXRsZT5UaGUgRGF0YSBQcm9jZXNzaW5nIExvb3AgZm9yIFZpZGVvIEVsZW1lbnRzPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIEZvciB2aWRlbyBwcm9jZXNzaW5nIGVsZW1lbnRzIGl0IGlzIHRoZSBiZXN0IHRvIHN5bmNocm9uaXNlIGZvciBldmVyeSBmcmFtZS4KKyAgICAgIFRoYXQgbWVhbnMgb25lIHdvdWxkIGFkZCB0aGUgPGZ1bmN0aW9uPmdzdF9vYmplY3Rfc3luY192YWx1ZXMoKTwvZnVuY3Rpb24+CisgICAgICBjYWxsIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiB0byB0aGUgZGF0YSBwcm9jZXNzaW5nIGZ1bmN0aW9uIG9mCisgICAgICB0aGUgZWxlbWVudC4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDI+CisKKyAgPHNlY3QyIGlkPSJjaGFwdGVyLWRwYXJhbS1sb29wLWF1ZGlvIj4KKyAgICA8dGl0bGU+VGhlIERhdGEgUHJvY2Vzc2luZyBMb29wIGZvciBBdWRpbyBFbGVtZW50czwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBGb3IgYXVkaW8gcHJvY2Vzc2luZyBlbGVtZW50cyB0aGUgY2FzZSBpcyBub3QgYXMgZWFzeSBhcyBmb3IgdmlkZW8KKyAgICAgIHByb2Nlc3NpbmcgZWxlbWVudHMuIFRoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCBhdWRpbyBoYXMgYSBtdWNoIGhpZ2hlciByYXRlLgorICAgICAgRm9yIFBBTCB2aWRlbyBvbmUgd2lsbCBlLmcuIHByb2Nlc3MgMjUgZnVsbCBmcmFtZXMgcGVyIHNlY29uZCwgYnV0IGZvcgorICAgICAgc3RhbmRhcmQgYXVkaW8gaXQgd2lsbCBiZSA0NDEwMCBzYW1wbGVzLgorICAgICAgSXQgaXMgcmFyZWx5IHVzZWZ1bCB0byBzeW5jaHJvbmlzZSBjb250cm9sbGFibGUgcGFyYW1ldGVycyB0aGF0IG9mdGVuLiAKKyAgICAgIFRoZSBlYXNpZXN0IHNvbHV0aW9uIGlzIGFsc28gdG8gaGF2ZSBqdXN0IG9uZSBzeW5jaHJvbmlzYXRpb24gY2FsbCBwZXIKKyAgICAgIGJ1ZmZlciBwcm9jZXNzaW5nLiBUaGlzIG1ha2VzIHRoZSBjb250cm9sLXJhdGUgZGVwZW5kIG9uIHRoZSBidWZmZXIKKyAgICAgIHNpemUuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgRWxlbWVudHMgdGhhdCBuZWVkIGEgc3BlY2lmaWMgY29udHJvbC1yYXRlIG5lZWQgdG8gYnJlYWsgdGhlaXIgZGF0YQorICAgICAgcHJvY2Vzc2luZyBsb29wIHRvIHN5bmNocm9uaXNlIGV2ZXJ5IG4tc2FtcGxlcy4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDI+Cis8L3NlY3QxPgorPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9wd2cvYWR2YW5jZWQtZXZlbnRzLnhtbCBiL2RvY3MvcHdnL2FkdmFuY2VkLWV2ZW50cy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkwYTliOQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvcHdnL2FkdmFuY2VkLWV2ZW50cy54bWwKQEAgLTAsMCArMSw0MDQgQEAKKzxjaGFwdGVyIGlkPSJjaGFwdGVyLWFkdmFuY2VkLWV2ZW50cyI+CisgIDx0aXRsZT5FdmVudHM6IFNlZWtpbmcsIE5hdmlnYXRpb24gYW5kIE1vcmU8L3RpdGxlPgorICA8cGFyYT4KKyAgICBUaGVyZSBhcmUgbWFueSBkaWZmZXJlbnQgZXZlbnQgdHlwZXMgYnV0IG9ubHkgdHdvIHdheXMgdGhleSBjYW4gdHJhdmVsIGluCisgICAgdGhlIHBpcGVsaW5lOiBkb3duc3RyZWFtIG9yIHVwc3RyZWFtLiBJdCBpcyB2ZXJ5IGltcG9ydGFudCB0byB1bmRlcnN0YW5kCisgICAgaG93IGJvdGggb2YgdGhlc2UgbWV0aG9kcyB3b3JrIGJlY2F1c2UgaWYgb25lIGVsZW1lbnQgaW4gdGhlIHBpcGVsaW5lIGlzIG5vdAorICAgIGhhbmRsaW5nIHRoZW0gY29ycmVjdGx5IHRoZSB3aG9sZSBldmVudCBzeXN0ZW0gb2YgdGhlIHBpcGVsaW5lIGlzIGJyb2tlbi4KKyAgICBXZSB3aWxsIHRyeSB0byBleHBsYWluIGhlcmUgaG93IHRoZXNlIG1ldGhvZHMgd29yayBhbmQgaG93IGVsZW1lbnRzIGFyZSAKKyAgICBzdXBwb3NlZCB0byBpbXBsZW1lbnQgdGhlbS4KKyAgPC9wYXJhPgorICA8c2VjdDEgaWQ9InNlY3Rpb24tZXZlbnRzLWRvd25zdHJlYW0iIHhyZWZsYWJlbD0iRG93bnN0cmVhbSBldmVudHMiPgorICAgIDx0aXRsZT5Eb3duc3RyZWFtIGV2ZW50czwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBEb3duc3RyZWFtIGV2ZW50cyBhcmUgcmVjZWl2ZWQgdGhyb3VnaCB0aGUgc2luayBwYWQncyBldmVudCBoYW5kbGVyLAorICAgICAgYXMgc2V0IHVzaW5nIDxmdW5jdGlvbj5nc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAoKTwvZnVuY3Rpb24+IHdoZW4KKyAgICAgIHRoZSBwYWQgd2FzIGNyZWF0ZWQuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgRG93bnN0cmVhbSBldmVudHMgY2FuIHRyYXZlbCBpbiB0d28gd2F5czogdGhleSBjYW4gYmUgaW4tYmFuZCAoc2VyaWFsaXNlZAorICAgICAgd2l0aCB0aGUgYnVmZmVyIGZsb3cpIG9yIG91dC1vZi1iYW5kICh0cmF2ZWxsaW5nIHRocm91Z2ggdGhlIHBpcGVsaW5lCisgICAgICBpbnN0YW50bHksIHBvc3NpYmx5IG5vdCBpbiB0aGUgc2FtZSB0aHJlYWQgYXMgdGhlIHN0cmVhbWluZyB0aHJlYWQgdGhhdAorICAgICAgaXMgcHJvY2Vzc2luZyB0aGUgYnVmZmVycywgc2tpcHBpbmcgYWhlYWQgb2YgYnVmZmVycyBiZWluZyBwcm9jZXNzZWQKKyAgICAgIG9yIHF1ZXVlZCBpbiB0aGUgcGlwZWxpbmUpLiBUaGUgbW9zdCBjb21tb24gZG93bnN0cmVhbSBldmVudHMKKyAgICAgIChORVdTRUdNRU5ULCBFT1MsIFRBRykgYXJlIGFsbCBzZXJpYWxpc2VkIHdpdGggdGhlIGJ1ZmZlciBmbG93LgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIEhlcmUgaXMgYSB0eXBpY2FsIGV2ZW50IGZ1bmN0aW9uOgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3Rpbmc+CitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9teV9maWx0ZXJfc2lua19ldmVudCAoR3N0UGFkICAqcGFkLCBHc3RFdmVudCAqIGV2ZW50KQoreworICBHc3RNeUZpbHRlciAqZmlsdGVyOworICBnYm9vbGVhbiByZXQ7CisKKyAgZmlsdGVyID0gR1NUX01ZX0ZJTFRFUiAoZ3N0X3BhZF9nZXRfcGFyZW50IChwYWQpKTsKKyAgLi4uCisKKyAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7CisgICAgY2FzZSBHU1RfRVZFTlRfTkVXU0VHTUVOVDoKKyAgICAgIC8qIG1heWJlIHNhdmUgYW5kL29yIHVwZGF0ZSB0aGUgY3VycmVudCBzZWdtZW50IChlLmcuIGZvciBvdXRwdXQKKyAgICAgICAqIGNsaXBwaW5nKSBvciBjb252ZXJ0IHRoZSBldmVudCBpbnRvIG9uZSBpbiBhIGRpZmZlcmVudCBmb3JtYXQKKyAgICAgICAqIChlLmcuIEJZVEVTIHRvIFRJTUUpIG9yIGRyb3AgaXQgYW5kIHNldCBhIGZsYWcgdG8gc2VuZCBhIG5ld3NlZ21lbnQKKyAgICAgICAqIGV2ZW50IGluIGEgZGlmZmVyZW50IGZvcm1hdCBsYXRlciAqLworICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChmaWx0ZXItJmd0O3NyY19wYWQsIGV2ZW50KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKKyAgICAgIC8qIGVuZC1vZi1zdHJlYW0sIHdlIHNob3VsZCBjbG9zZSBkb3duIGFsbCBzdHJlYW0gbGVmdG92ZXJzIGhlcmUgKi8KKyAgICAgIGdzdF9teV9maWx0ZXJfc3RvcF9wcm9jZXNzaW5nIChmaWx0ZXIpOworICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChmaWx0ZXItJmd0O3NyY19wYWQsIGV2ZW50KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6CisgICAgICBnc3RfbXlfZmlsdGVyX2NsZWFyX3RlbXBvcmFyeV9idWZmZXJzIChmaWx0ZXIpOworICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChmaWx0ZXItJmd0O3NyY19wYWQsIGV2ZW50KTsKKyAgICAgIGJyZWFrOyAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICByZXQgPSBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgZXZlbnQpOworICAgICAgYnJlYWs7CisgIH0KKworICAuLi4KKyAgZ3N0X29iamVjdF91bnJlZiAoZmlsdGVyKTsKKyAgcmV0dXJuIHJldDsKK30KKyAgICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICBJZiB5b3VyIGVsZW1lbnQgaXMgY2hhaW4tYmFzZWQsIHlvdSB3aWxsIGFsbW9zdCBhbHdheXMgaGF2ZSB0byBpbXBsZW1lbnQKKyAgICBhIHNpbmsgZXZlbnQgZnVuY3Rpb24sIHNpbmNlIHRoYXQgaXMgaG93IHlvdSBhcmUgbm90aWZpZWQgYWJvdXQKKyAgICBuZXcgc2VnbWVudHMgYW5kIHRoZSBlbmQgb2YgdGhlIHN0cmVhbS4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICBJZiB5b3VyIGVsZW1lbnQgaXMgZXhjbHVzaXZlbHkgbG9vcC1iYXNlZCwgeW91IG1heSBvciBtYXkgbm90IHdhbnQgYQorICAgIHNpbmsgZXZlbnQgZnVuY3Rpb24gKHNpbmNlIHRoZSBlbGVtZW50IGlzIGRyaXZpbmcgdGhlIHBpcGVsaW5lIGl0IHdpbGwKKyAgICBrbm93IHRoZSBsZW5ndGggb2YgdGhlIHN0cmVhbSBpbiBhZHZhbmNlIG9yIGJlIG5vdGlmaWVkIGJ5IHRoZSBmbG93CisgICAgcmV0dXJuIHZhbHVlIG9mIDxmdW5jdGlvbj5nc3RfcGFkX3B1bGxfcmFuZ2UoKTwvZnVuY3Rpb24+LiBJbiBzb21lIGNhc2VzCisgICAgZXZlbiBsb29wLWJhc2VkIGVsZW1lbnQgbWF5IHJlY2VpdmUgZXZlbnRzIGZyb20gdXBzdHJlYW0gdGhvdWdoIChmb3IKKyAgICBleGFtcGxlIGF1ZGlvIGRlY29kZXJzIHdpdGggYW4gaWQzZGVtdXggb3IgYXBlZGVtdXggZWxlbWVudCBpbiBmcm9udCBvZgorICAgIHRoZW0sIG9yIGRlbXV4ZXJzIHRoYXQgYXJlIGJlaW5nIGZlZCBpbnB1dCBmcm9tIHNvdXJjZXMgdGhhdCBzZW5kCisgICAgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RyZWFtIGluIGN1c3RvbSBldmVudHMsIGFzIERWRCBzb3VyY2VzCisgICAgZG8pLgorICA8L3BhcmE+CisgIDwvc2VjdDE+CisgIDxzZWN0MSBpZD0ic2VjdGlvbi1ldmVudHMtdXBzdHJlYW0iIHhyZWZsYWJlbD0iVXBzdHJlYW0gZXZlbnRzIj4KKyAgICA8dGl0bGU+VXBzdHJlYW0gZXZlbnRzPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFVwc3RyZWFtIGV2ZW50cyBhcmUgZ2VuZXJhdGVkIGJ5IGFuIGVsZW1lbnQgc29tZXdoZXJlIGRvd25zdHJlYW0gaW4KKyAgICAgIHRoZSBwaXBlbGluZSAoZXhhbXBsZTogYSB2aWRlbyBzaW5rIG1heSBnZW5lcmF0ZSBuYXZpZ2F0aW9uCisgICAgICBldmVudHMgdGhhdCBpbmZvcm1zIHVwc3RyZWFtIGVsZW1lbnRzIGFib3V0IHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mCisgICAgICB0aGUgbW91c2UgcG9pbnRlcikuIFRoaXMgbWF5IGFsc28gaGFwcGVuIGluZGlyZWN0bHkgb24gcmVxdWVzdCBvZiB0aGUKKyAgICAgIGFwcGxpY2F0aW9uLCBmb3IgZXhhbXBsZSB3aGVuIHRoZSBhcHBsaWNhdGlvbiBleGVjdXRlcyBhIHNlZWsgb24gYQorICAgICAgcGlwZWxpbmUgdGhpcyBzZWVrIHJlcXVlc3Qgd2lsbCBiZSBwYXNzZWQgb24gdG8gYSBzaW5rIGVsZW1lbnQgd2hpY2gKKyAgICAgIHdpbGwgdGhlbiBpbiB0dXJuIGdlbmVyYXRlIGFuIHVwc3RyZWFtIHNlZWsgZXZlbnQuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgVGhlIG1vc3QgY29tbW9uIHVwc3RyZWFtIGV2ZW50cyBhcmUgc2VlayBldmVudHMgYW5kIFF1YWxpdHktb2YtU2VydmljZQorICAgICAgKFFvUykgZXZlbnRzLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIEFuIHVwc3RyZWFtIGV2ZW50IGNhbiBiZSBzZW50IHVzaW5nIHRoZQorICAgICAgPGZ1bmN0aW9uPmdzdF9wYWRfc2VuZF9ldmVudDwvZnVuY3Rpb24+IGZ1bmN0aW9uLiBUaGlzCisgICAgICBmdW5jdGlvbiBzaW1wbHkgY2FsbCB0aGUgZGVmYXVsdCBldmVudCBoYW5kbGVyIG9mIHRoYXQgcGFkLiBUaGUgZGVmYXVsdAorICAgICAgZXZlbnQgaGFuZGxlciBvZiBwYWRzIGlzIDxmdW5jdGlvbj5nc3RfcGFkX2V2ZW50X2RlZmF1bHQ8L2Z1bmN0aW9uPiwgYW5kCisgICAgICBpdCBiYXNpY2FsbHkgc2VuZHMgdGhlIGV2ZW50IHRvIHRoZSBwZWVyIHBhZC4gU28gdXBzdHJlYW0gZXZlbnRzIGFsd2F5cworICAgICAgYXJyaXZlIG9uIHRoZSBzcmMgcGFkIG9mIHlvdXIgZWxlbWVudCBhbmQgYXJlIGhhbmRsZWQgYnkgdGhlIGRlZmF1bHQgZXZlbnQKKyAgICAgIGhhbmRsZXIgZXhjZXB0IGlmIHlvdSBvdmVycmlkZSB0aGF0IGhhbmRsZXIgdG8gaGFuZGxlIGl0IHlvdXJzZWxmLiBUaGVyZQorICAgICAgYXJlIHNvbWUgc3BlY2lmaWMgY2FzZXMgd2hlcmUgeW91IGhhdmUgdG8gZG8gdGhhdCA6CisgICAgPC9wYXJhPgorICAgIDxpdGVtaXplZGxpc3QgbWFyaz0ib3BlbmNpcmNsZSI+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIElmIHlvdSBoYXZlIG11bHRpcGxlIHNpbmsgcGFkcyBpbiB5b3VyIGVsZW1lbnQuIEluIHRoYXQgY2FzZSB5b3Ugd2lsbAorICAgICAgICAgIGhhdmUgdG8gZGVjaWRlIHdoaWNoIG9uZSBvZiB0aGUgc2luayBwYWRzIHlvdSB3aWxsIHNlbmQgdGhlIGV2ZW50IHRvCisgICAgICAgICAgKGlmIG5vdCBhbGwgb2YgdGhlbSkuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIElmIHlvdSBuZWVkIHRvIGhhbmRsZSB0aGF0IGV2ZW50IGxvY2FsbHkuIEZvciBleGFtcGxlIGEgbmF2aWdhdGlvbiAKKyAgICAgICAgICBldmVudCB0aGF0IHlvdSB3aWxsIHdhbnQgdG8gY29udmVydCBiZWZvcmUgc2VuZGluZyBpdCB1cHN0cmVhbSwgb3IKKyAgICAgICAgICBhIFFvUyBldmVudCB0aGF0IHlvdSB3YW50IHRvIGhhbmRsZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSBwcm9jZXNzaW5nIHlvdSB3aWxsIGRvIGluIHRoYXQgZXZlbnQgaGFuZGxlciBkb2VzIG5vdCByZWFsbHkgbWF0dGVyCisgICAgICBidXQgdGhlcmUgYXJlIGltcG9ydGFudCBydWxlcyB5b3UgaGF2ZSB0byBhYnNvbHV0ZWx5IHJlc3BlY3QgYmVjYXVzZQorICAgICAgb25lIGJyb2tlbiBlbGVtZW50IGV2ZW50IGhhbmRsZXIgaXMgYnJlYWtpbmcgdGhlIHdob2xlIHBpcGVsaW5lIGV2ZW50IAorICAgICAgaGFuZGxpbmcuIEhlcmUgdGhleSBhcmUgOgorICAgIDwvcGFyYT4KKyAgICA8aXRlbWl6ZWRsaXN0IG1hcms9Im9wZW5jaXJjbGUiPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBbHdheXMgZm9yd2FyZCBldmVudHMgeW91IHdvbid0IGhhbmRsZSB1cHN0cmVhbSB1c2luZyB0aGUgZGVmYXVsdCAKKyAgICAgICAgICA8ZnVuY3Rpb24+Z3N0X3BhZF9ldmVudF9kZWZhdWx0PC9mdW5jdGlvbj4gbWV0aG9kLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJZiB5b3UgYXJlIGdlbmVyYXRpbmcgc29tZSBuZXcgZXZlbnQgYmFzZWQgb24gdGhlIG9uZSB5b3UgcmVjZWl2ZWQKKyAgICAgICAgICBkb24ndCBmb3JnZXQgdG8gZ3N0X2V2ZW50X3VucmVmIHRoZSBldmVudCB5b3UgcmVjZWl2ZWQuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gYXJlIHN1cHBvc2VkIHRvIHJldHVybiBUUlVFIG9yIEZBTFNFIGluZGljYXRpbmcKKyAgICAgICAgICBpZiB0aGUgZXZlbnQgaGFzIGJlZW4gaGFuZGxlZCBvciBub3QuIE5ldmVyIHNpbXBseSByZXR1cm4gVFJVRS9GQUxTRQorICAgICAgICAgIGluIHRoYXQgaGFuZGxlciBleGNlcHQgaWYgeW91IHJlYWxseSBrbm93IHRoYXQgeW91IGhhdmUgaGFuZGxlZCB0aGF0IAorICAgICAgICAgIGV2ZW50LgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBSZW1lbWJlciB0aGF0IHRoZSBldmVudCBoYW5kbGVyIG1pZ2h0IGJlIGNhbGxlZCBmcm9tIGEgZGlmZmVyZW50CisgICAgICAgICAgdGhyZWFkIHRoYW4gdGhlIHN0cmVhbWluZyB0aHJlYWQsIHNvIG1ha2Ugc3VyZSB5b3UgdXNlCisgICAgICAgICAgYXBwcm9wcmlhdGUgbG9ja2luZyBldmVyeXdoZXJlIGFuZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbgorICAgICAgICAgIG9idGFpbiBhIHJlZmVyZW5jZSB0byB5b3VyIGVsZW1lbnQgdmlhIHRoZQorICAgICAgICAgIDxmdW5jdGlvbj5nc3RfcGFkX2dldF9wYXJlbnQoKTwvZnVuY3Rpb24+IChhbmQgcmVsZWFzZSBpdCBhZ2FpbiBhdAorICAgICAgICAgIHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uIHdpdGggPGZ1bmN0aW9uPmdzdF9vYmplY3RfdW5yZWYgKCk8L2Z1bmN0aW9uPi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tZXZlbnRzLWRlZmluaXRpb25zIiB4cmVmbGFiZWw9IkFsbCBFdmVudHMgVG9nZXRoZXIiPgorICAgIDx0aXRsZT5BbGwgRXZlbnRzIFRvZ2V0aGVyPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIEluIHRoaXMgY2hhcHRlciBmb2xsb3dzIGEgbGlzdCBvZiBhbGwgZGVmaW5lZCBldmVudHMgdGhhdCBhcmUgY3VycmVudGx5CisgICAgICBiZWluZyB1c2VkLCBwbHVzIGhvdyB0aGV5IHNob3VsZCBiZSB1c2VkL2ludGVycHJldGVkLiBZb3UgY2FuIGNoZWNrIHRoZQorICAgICAgd2hhdCB0eXBlIGEgY2VydGFpbiBldmVudCBpcyB1c2luZyB0aGUgR1NUX0VWRU5UX1RZUEUgbWFjcm8gKG9yIGlmIHlvdQorICAgICAgbmVlZCBhIHN0cmluZyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIHlvdSBjYW4gdXNlIEdTVF9FVkVOVF9UWVBFX05BTUUpLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIEluIHRoaXMgY2hhcHRlciwgd2Ugd2lsbCBkaXNjdXNzIHRoZSBmb2xsb3dpbmcgZXZlbnRzOgorICAgIDwvcGFyYT4KKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgPGxpc3RpdGVtPjxwYXJhPjx4cmVmIGxpbmtlbmQ9InNlY3Rpb24tZXZlbnRzLWVvcyIvPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPjxwYXJhPjx4cmVmIGxpbmtlbmQ9InNlY3Rpb24tZXZlbnRzLWZsdXNoLXN0YXJ0Ii8+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHhyZWYgbGlua2VuZD0ic2VjdGlvbi1ldmVudHMtZmx1c2gtc3RvcCIvPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPjxwYXJhPjx4cmVmIGxpbmtlbmQ9InNlY3Rpb24tZXZlbnRzLW5ld3NlZ21lbnQiLz48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT48cGFyYT48eHJlZiBsaW5rZW5kPSJzZWN0aW9uLWV2ZW50cy1zZWVrIi8+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHhyZWYgbGlua2VuZD0ic2VjdGlvbi1ldmVudHMtbmF2Ii8+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHhyZWYgbGlua2VuZD0ic2VjdGlvbi1ldmVudHMtdGFnIi8+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPHBhcmE+CisgICAgICBGb3IgbW9yZSBjb21wcmVoZW5zaXZlIGluZm9ybWF0aW9uIGFib3V0IGV2ZW50cyBhbmQgaG93IHRoZXkgc2hvdWxkIGJlCisgICAgICB1c2VkIGNvcnJlY3RseSBpbiB2YXJpb3VzIGNpcmN1bXN0YW5jZXMgcGxlYXNlIGNvbnN1bHQgdGhlIEdTdHJlYW1lcgorICAgICAgZGVzaWduIGRvY3VtZW50YXRpb24uIFRoaXMgc2VjdGlvbiBvbmx5IGdpdmVzIGEgZ2VuZXJhbCBvdmVydmlldy4gICAgICAKKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdDIgaWQ9InNlY3Rpb24tZXZlbnRzLWVvcyIgeHJlZmxhYmVsPSJFbmQgb2YgU3RyZWFtIChFT1MpIj4KKyAgICAgIDx0aXRsZT5FbmQgb2YgU3RyZWFtIChFT1MpPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBFbmQtb2Ytc3RyZWFtIGV2ZW50cyBhcmUgc2VudCBpZiB0aGUgc3RyZWFtIHRoYXQgYW4gZWxlbWVudCBzZW5kcyBvdXQKKyAgICAgICAgaXMgZmluaXNoZWQuIEFuIGVsZW1lbnQgcmVjZWl2aW5nIHRoaXMgZXZlbnQgKGZyb20gdXBzdHJlYW0sIHNvIGl0CisgICAgICAgIHJlY2VpdmVzIGl0IG9uIGl0cyBzaW5rcGFkKSB3aWxsIGdlbmVyYWxseSBqdXN0IHByb2Nlc3MgYW55IGJ1ZmZlcmVkCisgICAgICAgIGRhdGEgKGlmIHRoZXJlIGlzIGFueSkgYW5kIHRoZW4gZm9yd2FyZCB0aGUgZXZlbnQgZnVydGhlciBkb3duc3RyZWFtLgorICAgICAgICBUaGUgPGZ1bmN0aW9uPmdzdF9wYWRfZXZlbnRfZGVmYXVsdCAoKTwvZnVuY3Rpb24+IHRha2VzIGNhcmUgb2YgYWxsCisgICAgICAgIHRoaXMsIHNvIG1vc3QgZWxlbWVudHMgZG8gbm90IG5lZWQgdG8gc3VwcG9ydCB0aGlzIGV2ZW50LiBFeGNlcHRpb25zIGFyZQorICAgICAgICBlbGVtZW50cyB0aGF0IGV4cGxpY2l0bHkgbmVlZCB0byBjbG9zZSBhIHJlc291cmNlIGRvd24gb24gRU9TLCBhbmQKKyAgICAgICAgTi10by0xIGVsZW1lbnRzLiBOb3RlIHRoYXQgdGhlIHN0cmVhbSBpdHNlbGYgaXMgPGVtcGhhc2lzPm5vdDwvZW1waGFzaXM+CisgICAgICAgIGEgcmVzb3VyY2UgdGhhdCBzaG91bGQgYmUgY2xvc2VkIGRvd24gb24gRU9TISBBcHBsaWNhdGlvbnMgbWlnaHQgc2VlaworICAgICAgICBiYWNrIHRvIGEgcG9pbnQgYmVmb3JlIEVPUyBhbmQgY29udGludWUgcGxheWluZyBhZ2Fpbi4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgRU9TIGV2ZW50IGhhcyBubyBwcm9wZXJ0aWVzLCB3aGljaCBtYWtlcyBpdCBvbmUgb2YgdGhlIHNpbXBsZXN0CisgICAgICAgIGV2ZW50cyBpbiAmR1N0cmVhbWVyOy4gSXQgaXMgY3JlYXRlZCB1c2luZyB0aGUgCisgICAgICAgIDxmdW5jdGlvbj5nc3RfZXZlbnRfbmV3X2VvcygpPC9mdW5jdGlvbj4gZnVuY3Rpb24uCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCA8ZW1waGFzaXM+b25seSBlbGVtZW50cyBkcml2aW5nIHRoZQorICAgICAgICBwaXBlbGluZSBzaG91bGQgZXZlciBzZW5kIGFuIEVPUyBldmVudDwvZW1waGFzaXM+LiBJZiB5b3VyIGVsZW1lbnQKKyAgICAgICAgaXMgY2hhaW4tYmFzZWQsIGl0IGlzIG5vdCBkcml2aW5nIHRoZSBwaXBlbGluZS4gQ2hhaW4tYmFzZWQgZWxlbWVudHMKKyAgICAgICAgc2hvdWxkIGp1c3QgcmV0dXJuIEdTVF9GTE9XX1VORVhQRUNURUQgZnJvbSB0aGVpciBjaGFpbiBmdW5jdGlvbiBhdAorICAgICAgICB0aGUgZW5kIG9mIHRoZSBzdHJlYW0gKG9yIHRoZSBjb25maWd1cmVkIHNlZ21lbnQpLCB0aGUgdXBzdHJlYW0KKyAgICAgICAgZWxlbWVudCB0aGF0IGlzIGRyaXZpbmcgdGhlIHBpcGVsaW5lIHdpbGwgdGhlbiB0YWtlIGNhcmUgb2YKKyAgICAgICAgc2VuZGluZyB0aGUgRU9TIGV2ZW50IChvciBhbHRlcm5hdGl2ZWx5IHBvc3QgYSBTRUdNRU5UX0RPTkUgbWVzc2FnZQorICAgICAgICBvbiB0aGUgYnVzIGRlcGVuZGluZyBvbiB0aGUgbW9kZSBvZiBvcGVyYXRpb24pLiBJZiB5b3UgYXJlIGltcGxlbWVudGluZworICAgICAgICB5b3VyIG93biBzb3VyY2UgZWxlbWVudCwgeW91IGFsc28gZG8gbm90IG5lZWQgdG8gZXZlciBtYW51YWxseSBzZW5kCisgICAgICAgIGFuIEVPUyBldmVudCwgeW91IHNob3VsZCBhbHNvIGp1c3QgcmV0dXJuIEdTVF9GTE9XX1VORVhQRUNURUQgaW4KKyAgICAgICAgeW91ciBjcmVhdGUgZnVuY3Rpb24gKGFzc3VtaW5nIHlvdXIgZWxlbWVudCBkZXJpdmVzIGZyb20gR3N0QmFzZVNyYworICAgICAgICBvciBHc3RQdXNoU3JjKS4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3QyPgorCisgICAgPHNlY3QyIGlkPSJzZWN0aW9uLWV2ZW50cy1mbHVzaC1zdGFydCIgeHJlZmxhYmVsPSJGbHVzaCBTdGFydCI+CisgICAgICA8dGl0bGU+Rmx1c2ggU3RhcnQ8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmbHVzaCBzdGFydCBldmVudCBpcyBzZW50IGRvd25zdHJlYW0gaWYgYWxsIGJ1ZmZlcnMgYW5kIGNhY2hlcworICAgICAgICBpbiB0aGUgcGlwZWxpbmUgc2hvdWxkIGJlIGVtcHRpZWQuIDxxdW90ZT5RdWV1ZTwvcXVvdGU+IGVsZW1lbnRzIHdpbGwKKyAgICAgICAgZW1wdHkgdGhlaXIgaW50ZXJuYWwgbGlzdCBvZiBidWZmZXJzIHdoZW4gdGhleSByZWNlaXZlIHRoaXMgZXZlbnQsIGZvcgorICAgICAgICBleGFtcGxlLiBGaWxlIHNpbmsgZWxlbWVudHMgKGUuZy4gPHF1b3RlPmZpbGVzaW5rPC9xdW90ZT4pIHdpbGwgZmx1c2gKKyAgICAgICAgdGhlIGtlcm5lbC10by1kaXNrIGNhY2hlICg8ZnVuY3Rpb24+ZmRhdGFzeW5jICgpPC9mdW5jdGlvbj4gb3IKKyAgICAgICAgPGZ1bmN0aW9uPmZmbHVzaCAoKTwvZnVuY3Rpb24+KSB3aGVuIHRoZXkgcmVjZWl2ZSB0aGlzIGV2ZW50LiBOb3JtYWxseSwKKyAgICAgICAgZWxlbWVudHMgcmVjZWl2aW5nIHRoaXMgZXZlbnQgd2lsbCBzaW1wbHkganVzdCBmb3J3YXJkIGl0LCBzaW5jZSBtb3N0CisgICAgICAgIGZpbHRlciBvciBmaWx0ZXItbGlrZSBlbGVtZW50cyBkb24ndCBoYXZlIGFuIGludGVybmFsIGNhY2hlIG9mIGRhdGEuCisgICAgICAgIDxmdW5jdGlvbj5nc3RfcGFkX2V2ZW50X2RlZmF1bHQgKCk8L2Z1bmN0aW9uPiBkb2VzIGp1c3QgdGhhdCwgc28gZm9yCisgICAgICAgIG1vc3QgZWxlbWVudHMsIGl0IGlzIGVub3VnaCB0byBmb3J3YXJkIHRoZSBldmVudCB1c2luZyB0aGUgZGVmYXVsdAorICAgICAgICBldmVudCBoYW5kbGVyLgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIEFzIGEgc2lkZS1lZmZlY3Qgb2YgZmx1c2hpbmcgYWxsIGRhdGEgZnJvbSB0aGUgcGlwZWxpbmUsIHRoaXMgZXZlbnQKKyAgICAgICAgdW5ibG9ja3MgdGhlIHN0cmVhbWluZyB0aHJlYWQgYnkgbWFraW5nIGFsbCBwYWRzIHJlamVjdCBkYXRhIHVudGlsCisgICAgICAgIHRoZXkgcmVjZWl2ZSBhIDx4cmVmIGxpbmtlbmQ9InNlY3Rpb24tZXZlbnRzLWZsdXNoLXN0b3AiLz4gc2lnbmFsCisgICAgICAgIChlbGVtZW50cyB0cnlpbmcgdG8gcHVzaCBkYXRhIHdpbGwgZ2V0IGEgV1JPTkdfU1RBVEUgZmxvdyByZXR1cm4KKyAgICAgICAgIGFuZCBzdG9wIHByb2Nlc3NpbmcgZGF0YSkuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZsdXNoLXN0YXJ0IGV2ZW50IGlzIGNyZWF0ZWQgd2l0aCB0aGUKKyAgICAgICAgPGZ1bmN0aW9uPmdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQgKCk8L2Z1bmN0aW9uPi4KKyAgICAgICAgTGlrZSB0aGUgRU9TIGV2ZW50LCBpdCBoYXMgbm8gcHJvcGVydGllcy4gVGhpcyBldmVudCBpcyB1c3VhbGx5CisgICAgICAgIG9ubHkgY3JlYXRlZCBieSBlbGVtZW50cyBkcml2aW5nIHRoZSBwaXBlbGluZSwgbGlrZSBzb3VyY2UgZWxlbWVudHMKKyAgICAgICAgb3BlcmF0aW5nIGluIHB1c2gtbW9kZSBvciBwdWxsLXJhbmdlIGJhc2VkIGRlbXV4ZXJzL2RlY29kZXJzLgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdDI+CisKKyAgICA8c2VjdDIgaWQ9InNlY3Rpb24tZXZlbnRzLWZsdXNoLXN0b3AiIHhyZWZsYWJlbD0iRmx1c2ggU3RvcCI+CisgICAgICA8dGl0bGU+Rmx1c2ggU3RvcDwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZsdXNoLXN0b3AgZXZlbnQgaXMgc2VudCBieSBhbiBlbGVtZW50IGRyaXZpbmcgdGhlIHBpcGVsaW5lCisgICAgICAgIGFmdGVyIGEgZmx1c2gtc3RhcnQgYW5kIHRlbGxzIHBhZHMgYW5kIGVsZW1lbnRzIGRvd25zdHJlYW0gdGhhdAorICAgICAgICB0aGV5IHNob3VsZCBhY2NlcHQgZXZlbnRzIGFuZCBidWZmZXJzIGFnYWluICh0aGVyZSB3aWxsIGJlIGF0CisgICAgICAgIGxlYXN0IGEgTkVXU0VHTUVOVCBldmVudCBiZWZvcmUgYW55IGJ1ZmZlcnMgZmlyc3QgdGhvdWdoKS4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBJZiB5b3VyIGVsZW1lbnQga2VlcHMgdGVtcG9yYXJ5IGNhY2hlcyBvZiBzdHJlYW0gZGF0YSwgaXQgc2hvdWxkCisgICAgICAgIGNsZWFyIHRoZW0gd2hlbiBpdCByZWNlaXZlcyBhIEZMVVNILVNUT1AgZXZlbnQgKGFuZCBhbHNvIHdoZW5ldmVyCisgICAgICAgIGl0cyBjaGFpbiBmdW5jdGlvbiByZWNlaXZlcyBhIGJ1ZmZlciB3aXRoIHRoZSBESVNDT05UIGZsYWcgc2V0KS4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZmx1c2gtc3RvcCBldmVudCBpcyBjcmVhdGVkIHdpdGgKKyAgICAgICAgPGZ1bmN0aW9uPmdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoKTwvZnVuY3Rpb24+LiBMaWtlIHRoZSBFT1MgZXZlbnQsCisgICAgICAgIGl0IGhhcyBubyBwcm9wZXJ0aWVzLgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdDI+CisKKyAgICA8c2VjdDIgaWQ9InNlY3Rpb24tZXZlbnRzLW5ld3NlZ21lbnQiIHhyZWZsYWJlbD0iTmV3IFNlZ21lbnQiPgorICAgICAgPHRpdGxlPk5ldyBTZWdtZW50PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBBIG5ldyBzZWdtZW50IGV2ZW50IGlzIHNlbnQgZG93bnN0cmVhbSB0byBlaXRoZXIgYW5ub3VuY2UgYSBuZXcKKyAgICAgICAgc2VnbWVudCBvZiBkYXRhIGluIHRoZSBkYXRhIHN0cmVhbSBvciB0byB1cGRhdGUgdGhlIGN1cnJlbnQgc2VnbWVudAorICAgICAgICB3aXRoIG5ldyB2YWx1ZXMuIEEgbmV3IHNlZ21lbnQgZXZlbnQgbXVzdCBhbHdheXMgYmUgc2VudCBiZWZvcmUgdGhlCisgICAgICAgIGZpcnN0IGJ1ZmZlciBvZiBkYXRhIGFuZCBhZnRlciBhIGZsdXNoIChzZWUgYWJvdmUpLgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmaXJzdCBuZXcgc2VnbWVudCBldmVudCBpcyBjcmVhdGVkIGJ5IHRoZSBlbGVtZW50IGRyaXZpbmcgdGhlIAorICAgICAgICBwaXBlbGluZSwgbGlrZSBhIHNvdXJjZSBvcGVyYXRpbmcgaW4gcHVzaC1tb2RlIG9yIGEgZGVtdXhlci9kZWNvZGVyCisgICAgICAgIG9wZXJhdGluZyBwdWxsLWJhc2VkLiBUaGlzIG5ldyBzZWdtZW50IGV2ZW50IHRoZW4gdHJhdmVscyBkb3duIHRoZQorICAgICAgICBwaXBlbGluZSBhbmQgbWF5IGJlIHRyYW5zZm9ybWVkIG9uIHRoZSB3YXkgKGEgZGVjb2RlciwgZm9yIGV4YW1wbGUsCisgICAgICAgIG1pZ2h0IHJlY2VpdmUgYSBuZXctc2VnbWVudCBldmVudCBpbiBCWVRFUyBmb3JtYXQgYW5kIG1pZ2h0IHRyYW5zZm9ybQorICAgICAgICB0aGlzIGludG8gYSBuZXctc2VnbWVudCBldmVudCBpbiBUSU1FUyBmb3JtYXQgYmFzZWQgb24gdGhlIGF2ZXJhZ2UKKyAgICAgICAgYml0cmF0ZSkuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgTmV3IHNlZ21lbnQgZXZlbnRzIG1heSBhbHNvIGJlIHVzZWQgdG8gaW5kaWNhdGUgJ2dhcHMnIGluIHRoZSBzdHJlYW0sCisgICAgICAgIGxpa2UgaW4gYSBzdWJ0aXRsZSBzdHJlYW0gZm9yIGV4YW1wbGUgd2hlcmUgdGhlcmUgbWF5IG5vdCBiZSBhbnkKKyAgICAgICAgZGF0YSBhdCBhbGwgZm9yIGEgY29uc2lkZXJhYmxlIGFtb3VudCBvZiAoc3RyZWFtKSB0aW1lLiBUaGlzIGlzIGRvbmUKKyAgICAgICAgYnkgdXBkYXRpbmcgdGhlIHNlZ21lbnQgc3RhcnQgb2YgdGhlIGN1cnJlbnQgc2VnbWVudCAoc2VlIHRoZSBkZXNpZ24KKyAgICAgICAgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzKS4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBEZXBlbmRpbmcgb24gdGhlIGVsZW1lbnQgdHlwZSwgdGhlIGV2ZW50IGNhbiBzaW1wbHkgYmUgZm9yd2FyZGVkIHVzaW5nCisgICAgICAgIDxmdW5jdGlvbj5nc3RfcGFkX2V2ZW50X2RlZmF1bHQgKCk8L2Z1bmN0aW9uPiwgb3IgaXQgc2hvdWxkIGJlIHBhcnNlZAorICAgICAgICBhbmQgYSBtb2RpZmllZCBldmVudCBzaG91bGQgYmUgc2VudCBvbi4gVGhlIGxhc3QgaXMgdHJ1ZSBmb3IgZGVtdXhlcnMsCisgICAgICAgIHdoaWNoIGdlbmVyYWxseSBoYXZlIGEgYnl0ZS10by10aW1lIGNvbnZlcnNpb24gY29uY2VwdC4gVGhlaXIgaW5wdXQKKyAgICAgICAgaXMgdXN1YWxseSBieXRlLWJhc2VkLCBzbyB0aGUgaW5jb21pbmcgZXZlbnQgd2lsbCBoYXZlIGFuIG9mZnNldCBpbgorICAgICAgICBieXRlIHVuaXRzICg8c3ltYm9sPkdTVF9GT1JNQVRfQllURVM8L3N5bWJvbD4pLCB0b28uIEVsZW1lbnRzCisgICAgICAgIGRvd25zdHJlYW0sIGhvd2V2ZXIsIGV4cGVjdCBuZXcgc2VnbWVudCBldmVudHMgaW4gdGltZSB1bml0cywgc28gdGhhdAorICAgICAgICBpdCBjYW4gYmUgdXNlZCB0byB1cGRhdGUgdGhlIHBpcGVsaW5lIGNsb2NrLiBUaGVyZWZvcmUsIGRlbXV4ZXJzIGFuZAorICAgICAgICBzaW1pbGFyIGVsZW1lbnRzIHNob3VsZCBub3QgZm9yd2FyZCB0aGUgZXZlbnQsIGJ1dCBwYXJzZSBpdCwgZnJlZSBpdAorICAgICAgICBhbmQgc2VuZCBhIG5ldyBuZXdzZWdtZW50IGV2ZW50IChpbiB0aW1lIHVuaXRzLAorICAgICAgICA8c3ltYm9sPkdTVF9GT1JNQVRfVElNRTwvc3ltYm9sPikgZnVydGhlciBkb3duc3RyZWFtLgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBuZXdzZWdtZW50IGV2ZW50IGlzIGNyZWF0ZWQgdXNpbmcgdGhlIGZ1bmN0aW9uCisgICAgICAgIDxmdW5jdGlvbj5nc3RfZXZlbnRfbmV3X25ld19zZWdtZW50ICgpPC9mdW5jdGlvbj4uIFNlZSB0aGUgQVBJCisgICAgICAgIHJlZmVyZW5jZSBhbmQgZGVzaWduIGRvY3VtZW50IGZvciBkZXRhaWxzIGFib3V0IGl0cyBwYXJhbWV0ZXJzLiAKKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBFbGVtZW50cyBwYXJzaW5nIHRoaXMgZXZlbnQgY2FuIHVzZSBnc3RfZXZlbnRfcGFyc2VfbmV3X3NlZ21lbnRfZnVsbCgpCisgICAgICAgIHRvIGV4dHJhY3QgdGhlIGV2ZW50IGRldGFpbHMuIEVsZW1lbnRzIG1heSBmaW5kIHRoZSBHc3RTZWdtZW50CisgICAgICAgIEFQSSB1c2VmdWwgdG8ga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBzZWdtZW50IChpZiB0aGV5IHdhbnQgdG8gdXNlCisgICAgICAgIGl0IGZvciBvdXRwdXQgY2xpcHBpbmcsIGZvciBleGFtcGxlKS4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3QyPgorCisgICAgPHNlY3QyIGlkPSJzZWN0aW9uLWV2ZW50cy1zZWVrIiB4cmVmbGFiZWw9IlNlZWsgUmVxdWVzdCI+CisgICAgICA8dGl0bGU+U2VlayBSZXF1ZXN0PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBTZWVrIGV2ZW50cyBhcmUgbWVhbnQgdG8gcmVxdWVzdCBhIG5ldyBzdHJlYW0gcG9zaXRpb24gdG8gZWxlbWVudHMuCisgICAgICAgIFRoaXMgbmV3IHBvc2l0aW9uIGNhbiBiZSBzZXQgaW4gc2V2ZXJhbCBmb3JtYXRzICh0aW1lLCBieXRlcyBvcgorICAgICAgICA8cXVvdGU+ZGVmYXVsdCB1bml0czwvcXVvdGU+IFthIHRlcm0gaW5kaWNhdGluZyBmcmFtZXMgZm9yIHZpZGVvLAorICAgICAgICBjaGFubmVsLWluZGVwZW5kZW50IHNhbXBsZXMgZm9yIGF1ZGlvLCBldGMuXSkuIFNlZWtpbmcgY2FuIGJlIGRvbmUgd2l0aAorICAgICAgICByZXNwZWN0IHRvIHRoZSBlbmQtb2YtZmlsZSwgc3RhcnQtb2YtZmlsZSBvciBjdXJyZW50IHBvc2l0aW9uLCBhbmQKKyAgICAgICAgdXN1YWxseSBoYXBwZW5zIGluIHVwc3RyZWFtIGRpcmVjdGlvbiAoZG93bnN0cmVhbSBzZWVraW5nIGlzIGRvbmUgYnkKKyAgICAgICAgc2VuZGluZyBhIE5FV1NFR01FTlQgZXZlbnQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgb2Zmc2V0cyBmb3IgZWxlbWVudHMKKyAgICAgICAgdGhhdCBzdXBwb3J0IHRoYXQsIGxpa2UgZmlsZXNpbmspLgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIEVsZW1lbnRzIHJlY2VpdmluZyBzZWVrIGV2ZW50cyBzaG91bGQsIGRlcGVuZGluZyBvbiB0aGUgZWxlbWVudCB0eXBlLAorICAgICAgICBlaXRoZXIganVzdCBmb3J3YXJkIGl0IHVwc3RyZWFtIChmaWx0ZXJzLCBkZWNvZGVycyksIGNoYW5nZSB0aGUKKyAgICAgICAgZm9ybWF0IGluIHdoaWNoIHRoZSBldmVudCBpcyBnaXZlbiBhbmQgdGhlbiBmb3J3YXJkIGl0IChkZW11eGVycyksCisgICAgICAgIG9yIGhhbmRsZSB0aGUgZXZlbnQgYnkgY2hhbmdpbmcgdGhlIGZpbGUgcG9pbnRlciBpbiB0aGVpciBpbnRlcm5hbAorICAgICAgICBzdHJlYW0gcmVzb3VyY2UgKGZpbGUgc291cmNlcywgZGVtdXhlcnMvZGVjb2RlcnMgZHJpdmluZyB0aGUgcGlwZWxpbmUKKyAgICAgICAgaW4gcHVsbC1tb2RlKSBvciBzb21ldGhpbmcgZWxzZS4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBTZWVrIGV2ZW50cyBhcmUgYnVpbHQgdXAgdXNpbmcgcG9zaXRpb25zIGluIHNwZWNpZmllZCBmb3JtYXRzICh0aW1lLAorICAgICAgICBieXRlcywgdW5pdHMpLiBUaGV5IGFyZSBjcmVhdGVkIHVzaW5nIHRoZSBmdW5jdGlvbgorICAgICAgICA8ZnVuY3Rpb24+Z3N0X2V2ZW50X25ld19zZWVrICgpPC9mdW5jdGlvbj4uIE5vdGUgdGhhdCBtYW55IHBsdWdpbnMgZG8KKyAgICAgICAgbm90IHN1cHBvcnQgc2Vla2luZyBmcm9tIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSBvciBmcm9tIHRoZSBjdXJyZW50CisgICAgICAgIHBvc2l0aW9uLiBBbiBlbGVtZW50IG5vdCBkcml2aW5nIHRoZSBwaXBlbGluZSBhbmQgZm9yd2FyZGluZyBhIHNlZWsKKyAgICAgICAgcmVxdWVzdCBzaG91bGQgbm90IGFzc3VtZSB0aGF0IHRoZSBzZWVrIHN1Y2NlZWRlZCBvciBhY3R1YWxseSBoYXBwZW5lZCwKKyAgICAgICAgaXQgc2hvdWxkIG9wZXJhdGUgYmFzZWQgb24gdGhlIE5FV1NFR01FTlQgZXZlbnRzIGl0IHJlY2VpdmVzLgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIEVsZW1lbnRzIHBhcnNpbmcgdGhpcyBldmVudCBjYW4gZG8gdGhpcyB1c2luZworICAgICAgICA8ZnVuY3Rpb24+Z3N0X2V2ZW50X3BhcnNlX3NlZWsoKTwvZnVuY3Rpb24+LgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdDI+CisKKyAgICA8c2VjdDIgaWQ9InNlY3Rpb24tZXZlbnRzLW5hdiIgeHJlZmxhYmVsPSJOYXZpZ2F0aW9uIj4KKyAgICAgIDx0aXRsZT5OYXZpZ2F0aW9uPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBOYXZpZ2F0aW9uIGV2ZW50cyBhcmUgc2VudCB1cHN0cmVhbSBieSB2aWRlbyBzaW5rcyB0byBpbmZvcm0gdXBzdHJlYW0KKyAgICAgICAgZWxlbWVudHMgb2Ygd2hlcmUgdGhlIG1vdXNlIHBvaW50ZXIgaXMsIGlmIGFuZCB3aGVyZSBtb3VzZSBwb2ludGVyCisgICAgICAgIGNsaWNrcyBoYXZlIGhhcHBlbmVkLCBvciBpZiBrZXlzIGhhdmUgYmVlbiBwcmVzc2VkIG9yIHJlbGVhc2VkLgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIEFsbCB0aGlzIGluZm9ybWF0aW9uIGlzIGNvbnRhaW5lZCBpbiB0aGUgZXZlbnQgc3RydWN0dXJlIHdoaWNoIGNhbgorICAgICAgICBiZSBvYnRhaW5lZCB3aXRoIDxmdW5jdGlvbj5nc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoKTwvZnVuY3Rpb24+LgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIENoZWNrIG91dCB0aGUgbmF2aWdhdGlvbnRlc3QgZWxlbWVudCBpbiBnc3QtcGx1Z2lucy1nb29kIGZvciBhbiBpZGVhCisgICAgICAgIGhvdyB0byBleHRyYWN0IG5hdmlnYXRpb24gaW5mb3JtYXRpb24gZnJvbSB0aGlzIGV2ZW50LgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdDI+CisKKyAgICA8c2VjdDIgaWQ9InNlY3Rpb24tZXZlbnRzLXRhZyIgeHJlZmxhYmVsPSJUYWcgKG1ldGFkYXRhKSI+CisgICAgICA8dGl0bGU+VGFnIChtZXRhZGF0YSk8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRhZ2dpbmcgZXZlbnRzIGFyZSBiZWluZyBzZW50IGRvd25zdHJlYW0gdG8gaW5kaWNhdGUgdGhlIHRhZ3MgYXMgcGFyc2VkCisgICAgICAgIGZyb20gdGhlIHN0cmVhbSBkYXRhLiBUaGlzIGlzIGN1cnJlbnRseSB1c2VkIHRvIHByZXNlcnZlIHRhZ3MgZHVyaW5nCisgICAgICAgIHN0cmVhbSB0cmFuc2NvZGluZyBmcm9tIG9uZSBmb3JtYXQgdG8gdGhlIG90aGVyLiBUYWdzIGFyZSBkaXNjdXNzZWQKKyAgICAgICAgZXh0ZW5zaXZlbHkgaW4gPHhyZWYgbGlua2VuZD0iY2hhcHRlci1hZHZhbmNlZC10YWdnaW5nIi8+LiBNb3N0CisgICAgICAgIGVsZW1lbnRzIHdpbGwgc2ltcGx5IGZvcndhcmQgdGhlIGV2ZW50IGJ5IGNhbGxpbmcKKyAgICAgICAgPGZ1bmN0aW9uPmdzdF9wYWRfZXZlbnRfZGVmYXVsdCAoKTwvZnVuY3Rpb24+LgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSB0YWcgZXZlbnQgaXMgY3JlYXRlZCB1c2luZyB0aGUgZnVuY3Rpb24KKyAgICAgICAgPGZ1bmN0aW9uPmdzdF9ldmVudF9uZXdfdGFnICgpPC9mdW5jdGlvbj4sIGJ1dCBtb3JlIG9mdGVuIGVsZW1lbnRzIHdpbGwKKyAgICAgICAgdXNlIGVpdGhlciB0aGUgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X2ZvdW5kX3RhZ3MgKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbgorICAgICAgICBvciB0aGUgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X2ZvdW5kX3RhZ3NfZm9yX3BhZCAoKTwvZnVuY3Rpb24+LCB3aGljaAorICAgICAgICB3aWxsIGRvIGJvdGg6IHBvc3QgYSB0YWcgbWVzc2FnZSBvbiB0aGUgYnVzIGFuZCBzZW5kIGEgdGFnIGV2ZW50CisgICAgICAgIGRvd25zdHJlYW0uIEFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgcmVxdWlyZSBhIGZpbGxlZC1pbiB0YWdsaXN0IGFzCisgICAgICAgIGFyZ3VtZW50LCB3aGljaCB0aGV5IHdpbGwgdGFrZSBvd25lcnNoaXAgb2YuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgRWxlbWVudHMgcGFyc2luZyB0aGlzIGV2ZW50IGNhbiB1c2UgdGhlIGZ1bmN0aW9uCisgICAgICAgIDxmdW5jdGlvbj5nc3RfZXZlbnRfcGFyc2VfdGFnICgpPC9mdW5jdGlvbj4gdG8gYWNxdWlyZSB0aGUKKyAgICAgICAgdGFnbGlzdCB0aGF0IHRoZSBldmVudCBjb250YWlucy4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3QyPgorICA8L3NlY3QxPgorPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9wd2cvYWR2YW5jZWQtaW50ZXJmYWNlcy54bWwgYi9kb2NzL3B3Zy9hZHZhbmNlZC1pbnRlcmZhY2VzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmI5NTllCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wd2cvYWR2YW5jZWQtaW50ZXJmYWNlcy54bWwKQEAgLTAsMCArMSw3MjUgQEAKKzxjaGFwdGVyIGlkPSJjaGFwdGVyLWFkdmFuY2VkLWludGVyZmFjZXMiPgorICA8dGl0bGU+SW50ZXJmYWNlczwvdGl0bGU+CisgIDxwYXJhPgorICAgIFByZXZpb3VzbHksIGluIHRoZSBjaGFwdGVyIDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItYnVpbGRpbmctYXJncyIvPiwgd2UgaGF2ZQorICAgIGludHJvZHVjZWQgdGhlIGNvbmNlcHQgb2YgR09iamVjdCBwcm9wZXJ0aWVzIG9mIGNvbnRyb2xsaW5nIGFuIGVsZW1lbnQncworICAgIGJlaGF2aW91ci4gVGhpcyBpcyB2ZXJ5IHBvd2VyZnVsLCBidXQgaXQgaGFzIHR3byBiaWcgZGlzYWR2YW50YWdlczoKKyAgICBmaXJzdCBvZiBhbGwsIGl0IGlzIHRvbyBnZW5lcmljLCBhbmQgc2Vjb25kLCBpdCBpc24ndCBkeW5hbWljLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgIFRoZSBmaXJzdCBkaXNhZHZhbnRhZ2UgaXMgcmVsYXRlZCB0byB0aGUgY3VzdG9taXphYmlsaXR5IG9mIHRoZSBlbmQtdXNlcgorICAgIGludGVyZmFjZSB0aGF0IHdpbGwgYmUgYnVpbHQgdG8gY29udHJvbCB0aGUgZWxlbWVudC4gU29tZSBwcm9wZXJ0aWVzIGFyZQorICAgIG1vcmUgaW1wb3J0YW50IHRoYW4gb3RoZXJzLiBTb21lIGludGVnZXIgcHJvcGVydGllcyBhcmUgYmV0dGVyIHNob3duIGluIGEKKyAgICBzcGluLWJ1dHRvbiB3aWRnZXQsIHdoZXJlYXMgb3RoZXJzIHdvdWxkIGJlIGJldHRlciByZXByZXNlbnRlZCBieSBhIHNsaWRlcgorICAgIHdpZGdldC4gU3VjaCB0aGluZ3MgYXJlIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHRoZSBVSSBoYXMgbm8gYWN0dWFsIG1lYW5pbmcKKyAgICBpbiB0aGUgYXBwbGljYXRpb24uIEEgVUkgd2lkZ2V0IHRoYXQgcmVwcmVzZW50cyBhIGJpdHJhdGUgcHJvcGVydHkgaXMgdGhlCisgICAgc2FtZSBhcyBhIFVJIHdpZGdldCB0aGF0IHJlcHJlc2VudHMgdGhlIHNpemUgb2YgYSB2aWRlbywgYXMgbG9uZyBhcyBib3RoCisgICAgYXJlIG9mIHRoZSBzYW1lIDxjbGFzc25hbWU+R1BhcmFtU3BlYzwvY2xhc3NuYW1lPiB0eXBlLiBBbm90aGVyIHByb2JsZW0sCisgICAgaXMgdGhhdCB0aGluZ3MgbGlrZSBwYXJhbWV0ZXIgZ3JvdXBpbmcsIGZ1bmN0aW9uIGdyb3VwaW5nLCBvciBwYXJhbWV0ZXIKKyAgICBjb3VwbGluZyBhcmUgbm90CisgICAgcmVhbGx5IHBvc3NpYmxlLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgIFRoZSBzZWNvbmQgcHJvYmxlbSB3aXRoIHBhcmFtZXRlcnMgYXJlIHRoYXQgdGhleSBhcmUgbm90IGR5bmFtaWMuIEluCisgICAgbWFueSBjYXNlcywgdGhlIGFsbG93ZWQgdmFsdWVzIGZvciBhIHByb3BlcnR5IGFyZSBub3QgZml4ZWQsIGJ1dCBkZXBlbmQKKyAgICBvbiB0aGluZ3MgdGhhdCBjYW4gb25seSBiZSBkZXRlY3RlZCBhdCBydW50aW1lLiBUaGUgbmFtZXMgb2YgaW5wdXRzIGZvcgorICAgIGEgVFYgY2FyZCBpbiBhIHZpZGVvNGxpbnV4IHNvdXJjZSBlbGVtZW50LCBmb3IgZXhhbXBsZSwgY2FuIG9ubHkgYmUKKyAgICByZXRyaWV2ZWQgZnJvbSB0aGUga2VybmVsIGRyaXZlciB3aGVuIHdlJ3ZlIG9wZW5lZCB0aGUgZGV2aWNlOyB0aGlzIG9ubHkKKyAgICBoYXBwZW5zIHdoZW4gdGhlIGVsZW1lbnQgZ29lcyBpbnRvIHRoZSBSRUFEWSBzdGF0ZS4gVGhpcyBtZWFucyB0aGF0IHdlCisgICAgY2Fubm90IGNyZWF0ZSBhbiBlbnVtIHByb3BlcnR5IHR5cGUgdG8gc2hvdyB0aGlzIHRvIHRoZSB1c2VyLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgIFRoZSBzb2x1dGlvbiB0byB0aG9zZSBwcm9ibGVtcyBpcyB0byBjcmVhdGUgdmVyeSBzcGVjaWFsaXplZCB0eXBlcyBvZgorICAgIGNvbnRyb2xzIGZvciBjZXJ0YWluIG9mdGVuLXVzZWQgY29udHJvbHMuIFdlIHVzZSB0aGUgY29uY2VwdCBvZiBpbnRlcmZhY2VzCisgICAgdG8gYWNoaWV2ZSB0aGlzLiBUaGUgYmFzaXMgb2YgdGhpcyBhbGwgaXMgdGhlIGdsaWIKKyAgICA8Y2xhc3NuYW1lPkdUeXBlSW50ZXJmYWNlPC9jbGFzc25hbWU+IHR5cGUuIEZvciBlYWNoIGNhc2Ugd2hlcmUgd2UgdGhpbmsKKyAgICBpdCdzIHVzZWZ1bCwgd2UndmUgY3JlYXRlZCBpbnRlcmZhY2VzIHdoaWNoIGNhbiBiZSBpbXBsZW1lbnRlZCBieSBlbGVtZW50cworICAgIGF0IHRoZWlyIG93biB3aWxsLiBXZSd2ZSBhbHNvIGNyZWF0ZWQgYSBzbWFsbCBleHRlbnNpb24gdG8KKyAgICA8Y2xhc3NuYW1lPkdUeXBlSW50ZXJmYWNlPC9jbGFzc25hbWU+ICh3aGljaCBpcyBzdGF0aWMgaXRzZWxmLCB0b28pIHdoaWNoCisgICAgYWxsb3dzIHVzIHRvIHF1ZXJ5IGZvciBpbnRlcmZhY2UgYXZhaWxhYmlsaXR5IGJhc2VkIG9uIHJ1bnRpbWUgcHJvcGVydGllcy4KKyAgICBUaGlzIGV4dGVuc2lvbiBpcyBjYWxsZWQgPHVsaW5rIHR5cGU9Imh0dHAiCisgICAgdXJsPSIuLi8uLi9nc3RyZWFtZXIvaHRtbC9Hc3RJbXBsZW1lbnRzSW50ZXJmYWNlLmh0bWwiPjxjbGFzc25hbWU+CisgICAgR3N0SW1wbGVtZW50c0ludGVyZmFjZTwvY2xhc3NuYW1lPjwvdWxpbms+LgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgIE9uZSBpbXBvcnRhbnQgbm90ZTogaW50ZXJmYWNlcyBkbyA8ZW1waGFzaXM+bm90PC9lbXBoYXNpcz4gcmVwbGFjZQorICAgIHByb3BlcnRpZXMuIFJhdGhlciwgaW50ZXJmYWNlcyBzaG91bGQgYmUgYnVpbHQgPGVtcGhhc2lzPm5leHQgdG88L2VtcGhhc2lzPgorICAgIHByb3BlcnRpZXMuIFRoZXJlIGFyZSB0d28gaW1wb3J0YW50IHJlYXNvbnMgZm9yIHRoaXMuIEZpcnN0IG9mIGFsbCwgCisgICAgcHJvcGVydGllcworICAgIGNhbiBiZSBzYXZlZCBpbiBYTUwgZmlsZXMuIFNlY29uZCwgcHJvcGVydGllcyBjYW4gYmUgc3BlY2lmaWVkIG9uIHRoZQorICAgIGNvbW1hbmRsaW5lICg8ZmlsZW5hbWU+Z3N0LWxhdW5jaDwvZmlsZW5hbWU+KS4KKyAgPC9wYXJhPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1pZmFjZS1nZW5lcmFsIiB4cmVmbGFiZWw9IkhvdyB0byBJbXBsZW1lbnQgSW50ZXJmYWNlcyI+CisgICAgPHRpdGxlPkhvdyB0byBJbXBsZW1lbnQgSW50ZXJmYWNlczwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBJbXBsZW1lbnRpbmcgaW50ZXJmYWNlcyBpcyBpbml0aWF0ZWQgaW4gdGhlIDxmdW5jdGlvbj5fZ2V0X3R5cGUgKCk8L2Z1bmN0aW9uPgorICAgICAgb2YgeW91ciBlbGVtZW50LiBZb3UgY2FuIHJlZ2lzdGVyIG9uZSBvciBtb3JlIGludGVyZmFjZXMgYWZ0ZXIgaGF2aW5nCisgICAgICByZWdpc3RlcmVkIHRoZSB0eXBlIGl0c2VsZi4gU29tZSBpbnRlcmZhY2VzIGhhdmUgZGVwZW5kZW5jaWVzIG9uIG90aGVyCisgICAgICBpbnRlcmZhY2VzIG9yIGNhbiBvbmx5IGJlIHJlZ2lzdGVyZWQgYnkgY2VydGFpbiB0eXBlcyBvZiBlbGVtZW50cy4gWW91CisgICAgICB3aWxsIGJlIG5vdGlmaWVkIG9mIGRvaW5nIHRoYXQgd3JvbmdseSB3aGVuIHVzaW5nIHRoZSBlbGVtZW50OiBpdCB3aWxsCisgICAgICBxdWl0IHdpdGggZmFpbGVkIGFzc2VydGlvbnMsIHdoaWNoIHdpbGwgZXhwbGFpbiB3aGF0IHdlbnQgd3JvbmcuIEluIHRoZQorICAgICAgY2FzZSBvZiBHU3RyZWFtZXIsIHRoZSBvbmx5IGRlcGVuZGVuY3kgdGhhdCA8ZW1waGFzaXM+c29tZTwvZW1waGFzaXM+CisgICAgICBpbnRlcmZhY2VzIGhhdmUgaXMgPHVsaW5rIHR5cGU9Imh0dHAiCisgICAgICB1cmw9Ii4uLy4uL2dzdHJlYW1lci9odG1sL0dzdEltcGxlbWVudHNJbnRlcmZhY2UuaHRtbCI+PGNsYXNzbmFtZT4KKyAgICAgIEdzdEltcGxlbWVudHNJbnRlcmZhY2U8L2NsYXNzbmFtZT48L3VsaW5rPi4gUGVyCisgICAgICBpbnRlcmZhY2UsIHdlIHdpbGwgaW5kaWNhdGUgY2xlYXJseSB3aGVuIGl0IGRlcGVuZHMgb24gdGhpcyBleHRlbnNpb24uCisgICAgICBJZiBpdCBkb2VzLCB5b3UgbmVlZCB0byByZWdpc3RlciBzdXBwb3J0IGZvciA8ZW1waGFzaXM+dGhhdDwvZW1waGFzaXM+CisgICAgICBpbnRlcmZhY2UgYmVmb3JlIHJlZ2lzdGVyaW5nIHN1cHBvcnQgZm9yIHRoZSBpbnRlcmZhY2UgdGhhdCB5b3UncmUKKyAgICAgIHdhbnRpbmcgdG8gc3VwcG9ydC4gVGhlIGV4YW1wbGUgYmVsb3cgZXhwbGFpbnMgaG93IHRvIGFkZCBzdXBwb3J0IGZvciBhCisgICAgICBzaW1wbGUgaW50ZXJmYWNlIHdpdGggbm8gZnVydGhlciBkZXBlbmRlbmNpZXMuIEZvciBhIHNtYWxsIGV4cGxhbmF0aW9uCisgICAgICBvbiA8dWxpbmsgdHlwZT0iaHR0cCIgdXJsPSIuLi8uLi9nc3RyZWFtZXIvaHRtbC9Hc3RJbXBsZW1lbnRzSW50ZXJmYWNlLmh0bWwiPgorICAgICAgPGNsYXNzbmFtZT5Hc3RJbXBsZW1lbnRzSW50ZXJmYWNlPC9jbGFzc25hbWU+PC91bGluaz4sIHNlZSB0aGUgbmV4dCBzZWN0aW9uCisgICAgICBhYm91dCB0aGUgbWl4ZXIgaW50ZXJmYWNlOiA8eHJlZiBsaW5rZW5kPSJzZWN0aW9uLWlmYWNlLW1peGVyIi8+LgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3Rpbmc+CitzdGF0aWMgdm9pZAlnc3RfbXlfZmlsdGVyX3NvbWVfaW50ZXJmYWNlX2luaXQJKEdzdFNvbWVJbnRlcmZhY2UgKmlmYWNlKTsKKworR1R5cGUKK2dzdF9teV9maWx0ZXJfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBHVHlwZSBteV9maWx0ZXJfdHlwZSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBpZiAoIW15X2ZpbHRlcl90eXBlKSB7CisgICAgc3RhdGljIGNvbnN0IEdUeXBlSW5mbyBteV9maWx0ZXJfaW5mbyA9IHsKKyAgICAgIHNpemVvZiAoR3N0TXlGaWx0ZXJDbGFzcyksCisgICAgICAoR0Jhc2VJbml0RnVuYykgZ3N0X215X2ZpbHRlcl9iYXNlX2luaXQsCisgICAgICBOVUxMLAorICAgICAgKEdDbGFzc0luaXRGdW5jKSBnc3RfbXlfZmlsdGVyX2NsYXNzX2luaXQsCisgICAgICBOVUxMLAorICAgICAgTlVMTCwKKyAgICAgIHNpemVvZiAoR3N0TXlGaWx0ZXIpLAorICAgICAgMCwKKyAgICAgIChHSW5zdGFuY2VJbml0RnVuYykgZ3N0X215X2ZpbHRlcl9pbml0CisgICAgfTsKKyAgICBzdGF0aWMgY29uc3QgR0ludGVyZmFjZUluZm8gc29tZV9pbnRlcmZhY2VfaW5mbyA9IHsKKyAgICAgIChHSW50ZXJmYWNlSW5pdEZ1bmMpIGdzdF9teV9maWx0ZXJfc29tZV9pbnRlcmZhY2VfaW5pdCwKKyAgICAgIE5VTEwsCisgICAgICBOVUxMCisgICAgfTsKKworICAgIG15X2ZpbHRlcl90eXBlID0KKwlnX3R5cGVfcmVnaXN0ZXJfc3RhdGljIChHU1RfVFlQRV9NWV9GSUxURVIsCisJCQkJIkdzdE15RmlsdGVyIiwKKwkJCQkmYW1wO215X2ZpbHRlcl9pbmZvLCAwKTsKKyAgICBnX3R5cGVfYWRkX2ludGVyZmFjZV9zdGF0aWMgKG15X2ZpbHRlcl90eXBlLAorCQkJCSBHU1RfVFlQRV9TT01FX0lOVEVSRkFDRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhbXA7c29tZV9pbnRlcmZhY2VfaW5mbyk7CisgIH0KKworICByZXR1cm4gbXlfZmlsdGVyX3R5cGU7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfbXlfZmlsdGVyX3NvbWVfaW50ZXJmYWNlX2luaXQgKEdzdFNvbWVJbnRlcmZhY2UgKmlmYWNlKQoreworICAvKiBoZXJlLCB5b3Ugd291bGQgc2V0IHZpcnR1YWwgZnVuY3Rpb24gcG9pbnRlcnMgaW4gdGhlIGludGVyZmFjZSAqLworfQorICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWlmYWNlLXVyaSIgeHJlZmxhYmVsPSJVUkkgaW50ZXJmYWNlIj4KKyAgICA8dGl0bGU+VVJJIGludGVyZmFjZTwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBXUklURU1FCisgICAgPC9wYXJhPgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1pZmFjZS1taXhlciIgeHJlZmxhYmVsPSJNaXhlciBJbnRlcmZhY2UiPgorICAgIDx0aXRsZT5NaXhlciBJbnRlcmZhY2U8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgVGhlIGdvYWwgb2YgdGhlIG1peGVyIGludGVyZmFjZSBpcyB0byBwcm92aWRlIGEgc2ltcGxlIHlldCBwb3dlcmZ1bCBBUEkKKyAgICAgIHRvIGFwcGxpY2F0aW9ucyBmb3IgYXVkaW8gaGFyZHdhcmUgbWl4ZXIvdm9sdW1lIGNvbnRyb2wuIE1vc3Qgc291bmRjYXJkcworICAgICAgaGF2ZSBoYXJkd2FyZSBtaXhlcnMsIHdoZXJlIHZvbHVtZSBjYW4gYmUgY2hhbmdlZCwgdGhleSBjYW4gYmUgbXV0ZWQsCisgICAgICBpbnB1dHMgY2FuIGJlIG1vZGlmaWVkIHRvIG1peCB0aGVpciBjb250ZW50IGludG8gd2hhdCB3aWxsIGJlIHJlYWQgZnJvbQorICAgICAgdGhlIGRldmljZSBieSBhcHBsaWNhdGlvbnMgKGluIG91ciBjYXNlOiBhdWRpbyBzb3VyY2UgcGx1Z2lucykuIFRoZQorICAgICAgbWl4ZXIgaW50ZXJmYWNlIGlzIHRoZSB3YXkgdG8gY29udHJvbCB0aG9zZS4gVGhlIG1peGVyIGludGVyZmFjZSBjYW4KKyAgICAgIGFsc28gYmUgdXNlZCBmb3Igdm9sdW1lIGNvbnRyb2wgaW4gc29mdHdhcmUgKGUuZy4gdGhlIDxxdW90ZT52b2x1bWU8L3F1b3RlPgorICAgICAgZWxlbWVudCkuIFRoZSBlbmQgZ29hbCBvZiB0aGlzIGludGVyZmFjZSBpcyB0byBhbGxvdyBkZXZlbG9wbWVudCBvZgorICAgICAgaGFyZHdhcmUgdm9sdW1lIGNvbnRyb2wgYXBwbGljYXRpb25zIGFuZCBmb3IgdGhlIGNvbnRyb2wgb2YgYXVkaW8gdm9sdW1lCisgICAgICBhbmQgaW5wdXQvb3V0cHV0IHNldHRpbmdzLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSBtaXhlciBpbnRlcmZhY2UgcmVxdWlyZXMgdGhlIDx1bGluayB0eXBlPSJodHRwIgorICAgICAgdXJsPSIuLi8uLi9nc3RyZWFtZXIvaHRtbC9Hc3RJbXBsZW1lbnRzSW50ZXJmYWNlLmh0bWwiPjxjbGFzc25hbWU+CisgICAgICBHc3RJbXBsZW1lbnRzSW50ZXJmYWNlPC9jbGFzc25hbWU+PC91bGluaz4KKyAgICAgIGludGVyZmFjZSB0byBiZSBpbXBsZW1lbnRlZCBieSB0aGUgZWxlbWVudC4gVGhlIGV4YW1wbGUgYmVsb3cgd2lsbAorICAgICAgZmVhdHVyZSBib3RoLCBzbyBpdCBzZXJ2ZXMgYXMgYW4gZXhhbXBsZSBmb3IgdGhlIDx1bGluayB0eXBlPSJodHRwIgorICAgICAgdXJsPSIuLi8uLi9nc3RyZWFtZXIvaHRtbC9Hc3RJbXBsZW1lbnRzSW50ZXJmYWNlLmh0bWwiPjxjbGFzc25hbWU+CisgICAgICBHc3RJbXBsZW1lbnRzSW50ZXJmYWNlPC9jbGFzc25hbWU+PC91bGluaz4sIHRvby4gSW4gdGhpcworICAgICAgaW50ZXJmYWNlLCBpdCBpcyByZXF1aXJlZCB0byBzZXQgYSBmdW5jdGlvbiBwb2ludGVyIGZvciB0aGUgPGZ1bmN0aW9uPgorICAgICAgc3VwcG9ydGVkICgpPC9mdW5jdGlvbj4gZnVuY3Rpb24uCisgICAgICBJZiB5b3UgZG9uJ3QsIHRoaXMgZnVuY3Rpb24gd2lsbCBhbHdheXMgcmV0dXJuIEZBTFNFIChkZWZhdWx0CisgICAgICBpbXBsZW1lbnRhdGlvbikgYW5kIHRoZSBtaXhlciBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb24gd2lsbCBub3Qgd29yay4gRm9yCisgICAgICB0aGUgbWl4ZXIgaW50ZXJmYWNlLCB0aGUgb25seSByZXF1aXJlZCBmdW5jdGlvbiBpcworICAgICAgPGZ1bmN0aW9uPmxpc3RfdHJhY2tzICgpPC9mdW5jdGlvbj4uIEFsbCBvdGhlciBmdW5jdGlvbiBwb2ludGVycyBpbiB0aGUKKyAgICAgIG1peGVyIGludGVyZmFjZSBhcmUgb3B0aW9uYWwsIGFsdGhvdWdoIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIHNldAorICAgICAgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIGF0IGxlYXN0IHRoZSA8ZnVuY3Rpb24+Z2V0X3ZvbHVtZSAoKTwvZnVuY3Rpb24+IGFuZAorICAgICAgPGZ1bmN0aW9uPnNldF92b2x1bWUgKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbnMuIFRoZSBBUEkgcmVmZXJlbmNlIGZvciB0aGlzCisgICAgICBpbnRlcmZhY2UgZG9jdW1lbnRzIHRoZSBnb2FsIG9mIGVhY2ggZnVuY3Rpb24sIHNvIHdlIHdpbGwgbGltaXQgb3Vyc2VsdmVzCisgICAgICB0byB0aGUgaW1wbGVtZW50YXRpb24gaGVyZS4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgYSBtaXhlciBpbXBsZW1lbnRhdGlvbiBmb3IgYSBzb2Z0d2FyZSBOLXRvLTEKKyAgICAgIGVsZW1lbnQuIEl0IGRvZXMgbm90IHNob3cgdGhlIGFjdHVhbCBwcm9jZXNzIG9mIHN0cmVhbSBtaXhpbmcsIHRoYXQgaXMKKyAgICAgIGZhciB0b28gY29tcGxpY2F0ZWQgZm9yIHRoaXMgZ3VpZGUuCisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz4KKyNpbmNsdWRlICZsdDtnc3QvbWl4ZXIvbWl4ZXIuaCZndDsKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdE15RmlsdGVyIHsKK1suLl0KKyAgZ2ludCB2b2x1bWU7CisgIEdMaXN0ICp0cmFja3M7Cit9IEdzdE15RmlsdGVyOworCitzdGF0aWMgdm9pZAlnc3RfbXlfZmlsdGVyX2ltcGxlbWVudHNfaW50ZXJmYWNlX2luaXQJKEdzdEltcGxlbWVudHNJbnRlcmZhY2VDbGFzcyAqaWZhY2UpOworc3RhdGljIHZvaWQJZ3N0X215X2ZpbHRlcl9taXhlcl9pbnRlcmZhY2VfaW5pdAkoR3N0TWl4ZXJDbGFzcyAqaWZhY2UpOworCitHVHlwZQorZ3N0X215X2ZpbHRlcl9nZXRfdHlwZSAodm9pZCkKK3sKK1suLl0KKyAgICBzdGF0aWMgY29uc3QgR0ludGVyZmFjZUluZm8gaW1wbGVtZW50c19pbnRlcmZhY2VfaW5mbyA9IHsKKyAgICAgIChHSW50ZXJmYWNlSW5pdEZ1bmMpIGdzdF9teV9maWx0ZXJfaW1wbGVtZW50c19pbnRlcmZhY2VfaW5pdCwKKyAgICAgIE5VTEwsCisgICAgICBOVUxMCisgICAgfTsKKyAgICBzdGF0aWMgY29uc3QgR0ludGVyZmFjZUluZm8gbWl4ZXJfaW50ZXJmYWNlX2luZm8gPSB7CisgICAgICAoR0ludGVyZmFjZUluaXRGdW5jKSBnc3RfbXlfZmlsdGVyX21peGVyX2ludGVyZmFjZV9pbml0LAorICAgICAgTlVMTCwKKyAgICAgIE5VTEwKKyAgICB9OworWy4uXQorICAgIGdfdHlwZV9hZGRfaW50ZXJmYWNlX3N0YXRpYyAobXlfZmlsdGVyX3R5cGUsCisJCQkJIEdTVF9UWVBFX0lNUExFTUVOVFNfSU5URVJGQUNFLAorCQkJCSAmYW1wO2ltcGxlbWVudHNfaW50ZXJmYWNlX2luZm8pOworICAgIGdfdHlwZV9hZGRfaW50ZXJmYWNlX3N0YXRpYyAobXlfZmlsdGVyX3R5cGUsCisJCQkJIEdTVF9UWVBFX01JWEVSLAorCQkJCSAmYW1wO21peGVyX2ludGVyZmFjZV9pbmZvKTsKK1suLl0KK30KKworc3RhdGljIHZvaWQKK2dzdF9teV9maWx0ZXJfaW5pdCAoR3N0TXlGaWx0ZXIgKmZpbHRlcikKK3sKKyAgR3N0TWl4ZXJUcmFjayAqdHJhY2sgPSBOVUxMOworWy4uXQorICBmaWx0ZXItPnZvbHVtZSA9IDEwMDsKKyAgZmlsdGVyLT50cmFja3MgPSBOVUxMOworICB0cmFjayA9IGdfb2JqZWN0X25ldyAoR1NUX1RZUEVfTUlYRVJfVFJBQ0ssIE5VTEwpOworICB0cmFjay0+bGFiZWwgPSBnX3N0cmR1cCAoIk15VHJhY2siKTsKKyAgdHJhY2stPm51bV9jaGFubmVscyA9IDE7CisgIHRyYWNrLT5taW5fdm9sdW1lID0gMDsKKyAgdHJhY2stPm1heF92b2x1bWUgPSAxMDA7CisgIHRyYWNrLT5mbGFncyA9IEdTVF9NSVhFUl9UUkFDS19TT0ZUV0FSRTsKKyAgZmlsdGVyLT50cmFja3MgPSBnX2xpc3RfYXBwZW5kIChmaWx0ZXItPnRyYWNrcywgdHJhY2spOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9teV9maWx0ZXJfaW50ZXJmYWNlX3N1cHBvcnRlZCAoR3N0SW1wbGVtZW50c0ludGVyZmFjZSAqaWZhY2UsCisJCQkJICAgR1R5cGUgICAgICAgICAgICAgICAgICAgaWZhY2VfdHlwZSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGlmYWNlX3R5cGUgPT0gR1NUX1RZUEVfTUlYRVIsIEZBTFNFKTsKKworICAvKiBmb3IgdGhlIHNha2Ugb2YgdGhpcyBleGFtcGxlLCB3ZSdsbCBhbHdheXMgc3VwcG9ydCBpdC4gSG93ZXZlciwgbm9ybWFsbHksCisgICAqIHlvdSB3b3VsZCBjaGVjayB3aGV0aGVyIHRoZSBkZXZpY2UgeW91J3ZlIG9wZW5lZCBzdXBwb3J0cyBtaXhlcnMuICovCisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZAorZ3N0X215X2ZpbHRlcl9pbXBsZW1lbnRzX2ludGVyZmFjZV9pbml0IChHc3RJbXBsZW1lbnRzSW50ZXJmYWNlQ2xhc3MgKmlmYWNlKQoreworICBpZmFjZS0+c3VwcG9ydGVkID0gZ3N0X215X2ZpbHRlcl9pbnRlcmZhY2Vfc3VwcG9ydGVkOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBsaXN0IG9mIHN1cHBvcnQgdHJhY2tzIChpbnB1dHMsIG91dHB1dHMpCisgKiBvbiB0aGlzIGVsZW1lbnQgaW5zdGFuY2UuIEVsZW1lbnRzIHVzdWFsbHkgYnVpbGQgdGhpcyBsaXN0IGR1cmluZworICogX2luaXQgKCkgb3Igd2hlbiBnb2luZyBmcm9tIE5VTEwgdG8gUkVBRFkuCisgKi8KKworc3RhdGljIGNvbnN0IEdMaXN0ICoKK2dzdF9teV9maWx0ZXJfbWl4ZXJfbGlzdF90cmFja3MgKEdzdE1peGVyICptaXhlcikKK3sKKyAgR3N0TXlGaWx0ZXIgKmZpbHRlciA9IEdTVF9NWV9GSUxURVIgKG1peGVyKTsKKworICByZXR1cm4gZmlsdGVyLT50cmFja3M7Cit9CisKKy8qCisgKiBTZXQgdm9sdW1lLiB2b2x1bWVzIGlzIGFuIGFycmF5IG9mIHNpemUgdHJhY2stPm51bV9jaGFubmVscywgYW5kCisgKiBlYWNoIHZhbHVlIGluIHRoZSBhcnJheSBnaXZlcyB0aGUgd2FudGVkIHZvbHVtZSBmb3Igb25lIGNoYW5uZWwKKyAqIG9uIHRoZSB0cmFjay4KKyAqLworCitzdGF0aWMgdm9pZAorZ3N0X215X2ZpbHRlcl9taXhlcl9zZXRfdm9sdW1lIChHc3RNaXhlciAgICAgICptaXhlciwKKwkJCQlHc3RNaXhlclRyYWNrICp0cmFjaywKKwkJCQlnaW50ICAgICAgICAgICp2b2x1bWVzKQoreworICBHc3RNeUZpbHRlciAqZmlsdGVyID0gR1NUX01ZX0ZJTFRFUiAobWl4ZXIpOworCisgIGZpbHRlci0+dm9sdW1lID0gdm9sdW1lc1swXTsKKworICBnX3ByaW50ICgiVm9sdW1lIHNldCB0byAlZFxuIiwgZmlsdGVyLT52b2x1bWUpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X215X2ZpbHRlcl9taXhlcl9nZXRfdm9sdW1lIChHc3RNaXhlciAgICAgICptaXhlciwKKwkJCQlHc3RNaXhlclRyYWNrICp0cmFjaywKKwkJCQlnaW50ICAgICAgICAgICp2b2x1bWVzKQoreworICBHc3RNeUZpbHRlciAqZmlsdGVyID0gR1NUX01ZX0ZJTFRFUiAobWl4ZXIpOworCisgIHZvbHVtZXNbMF0gPSBmaWx0ZXItPnZvbHVtZTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9teV9maWx0ZXJfbWl4ZXJfaW50ZXJmYWNlX2luaXQgKEdzdE1peGVyQ2xhc3MgKmlmYWNlKQoreworICAvKiB0aGUgbWl4ZXIgaW50ZXJmYWNlIHJlcXVpcmVzIGEgZGVmaW5pdGlvbiBvZiB0aGUgbWl4ZXIgdHlwZToKKyAgICogaGFyZHdhcmUgb3Igc29mdHdhcmU/ICovCisgIEdTVF9NSVhFUl9UWVBFIChpZmFjZSkgPSBHU1RfTUlYRVJfU09GVFdBUkU7CisKKyAgLyogdmlydHVhbCBmdW5jdGlvbiBwb2ludGVycyAqLworICBpZmFjZS0+bGlzdF90cmFja3MgPSBnc3RfbXlfZmlsdGVyX21peGVyX2xpc3RfdHJhY2tzOworICBpZmFjZS0+c2V0X3ZvbHVtZSAgPSBnc3RfbXlfZmlsdGVyX21peGVyX3NldF92b2x1bWU7CisgIGlmYWNlLT5nZXRfdm9sdW1lICA9IGdzdF9teV9maWx0ZXJfbWl4ZXJfZ2V0X3ZvbHVtZTsKK30KKyAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDxwYXJhPgorICAgICAgVGhlIG1peGVyIGludGVyZmFjZSBpcyB2ZXJ5IGF1ZGlvLWNlbnRyaWMuIEhvd2V2ZXIsIHdpdGggdGhlIHNvZnR3YXJlCisgICAgICBmbGFnIHNldCwgdGhlIG1peGVyIGNhbiBiZSB1c2VkIHRvIG1peCBhbnkga2luZCBvZiBzdHJlYW0gaW4gYSBOLXRvLTEKKyAgICAgIGVsZW1lbnQgdG8gam9pbiAobm90IGFnZ3JlZ2F0ZSEpIHN0cmVhbXMgdG9nZXRoZXIgaW50byBvbmUgb3V0cHV0IHN0cmVhbS4KKyAgICAgIENvbmNlcHR1YWxseSwgdGhhdCdzIGNhbGxlZCBtaXhpbmcgdG9vLiBZb3UgY2FuIGFsd2F5cyB1c2UgdGhlIGVsZW1lbnQKKyAgICAgIGZhY3RvcnkncyA8cXVvdGU+Y2F0ZWdvcnk8L3F1b3RlPiB0byBpbmRpY2F0ZSB0eXBlIG9mIHlvdXIgZWxlbWVudC4gSW4KKyAgICAgIGEgc29mdHdhcmUgZWxlbWVudCB0aGF0IG1peGVzIHJhbmRvbSBzdHJlYW1zLCB5b3Ugd291bGQgbm90IGJlIHJlcXVpcmVkCisgICAgICB0byBpbXBsZW1lbnQgdGhlIDxmdW5jdGlvbj5fZ2V0X3ZvbHVtZSAoKTwvZnVuY3Rpb24+IG9yCisgICAgICA8ZnVuY3Rpb24+X3NldF92b2x1bWUgKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbnMuIFJhdGhlciwgeW91IHdvdWxkIG9ubHkKKyAgICAgIGltcGxlbWVudCB0aGUgPGZ1bmN0aW9uPl9zZXRfcmVjb3JkICgpPC9mdW5jdGlvbj4gdG8gZW5hYmxlIG9yIGRpc2FibGUKKyAgICAgIHRyYWNrcyBpbiB0aGUgb3V0cHV0IHN0cmVhbS4gdG8gbWFrZSBzdXJlIHRoYXQgYSBtaXhlci1pbXBsZW1lbnRpbmcKKyAgICAgIGVsZW1lbnQgaXMgb2YgYSBjZXJ0YWluIHR5cGUsIGNoZWNrIHRoZSBlbGVtZW50IGZhY3RvcnkncyBjYXRlZ29yeS4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWlmYWNlLXR1bmVyIiB4cmVmbGFiZWw9IlR1bmVyIEludGVyZmFjZSI+CisgICAgPHRpdGxlPlR1bmVyIEludGVyZmFjZTwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBBcyBvcHBvc2VkIHRvIHRoZSBtaXhlciBpbnRlcmZhY2UsIHRoYXQncyB1c2VkIHRvIGpvaW4gdG9nZXRoZXIgTiBzdHJlYW1zCisgICAgICBpbnRvIG9uZSBvdXRwdXQgc3RyZWFtIGJ5IG1peGluZyBhbGwgc3RyZWFtcyB0b2dldGhlciwgdGhlIHR1bmVyCisgICAgICBpbnRlcmZhY2UgaXMgdXNlZCBpbiBOLXRvLTEgZWxlbWVudHMgdG9vLCBidXQgaW5zdGVhZCBvZiBtaXhpbmcgdGhlIGlucHV0CisgICAgICBzdHJlYW1zLCBpdCB3aWxsIHNlbGVjdCBvbmUgc3RyZWFtIGFuZCBwdXNoIHRoZSBkYXRhIG9mIHRoYXQgc3RyZWFtIHRvCisgICAgICB0aGUgb3V0cHV0IHN0cmVhbS4gSXQgd2lsbCBkaXNjYXJkIHRoZSBkYXRhIG9mIGFsbCBvdGhlciBzdHJlYW1zLiBUaGVyZQorICAgICAgaXMgYSBmbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBpcyBhIHNvZnR3YXJlLXR1bmVyIChpbiB3aGljaCBjYXNlCisgICAgICBpdCBpcyBhIHB1cmUgc29mdHdhcmUgaW1wbGVtZW50YXRpb24sIHdpdGggTiBzaW5rIHBhZHMgYW5kIDEgc291cmNlIHBhZCkKKyAgICAgIG9yIGEgaGFyZHdhcmUtdHVuZXIsIGluIHdoaWNoIGNhc2UgaXQgb25seSBoYXMgb25lIHNvdXJjZSBwYWQsIGFuZCB0aGUKKyAgICAgIHdob2xlIHN0cmVhbSBzZWxlY3Rpb24gcHJvY2VzcyBpcyBkb25lIGluIGhhcmR3YXJlLiBUaGUgc29mdHdhcmUgY2FzZSBjYW4KKyAgICAgIGJlIHVzZWQgaW4gZWxlbWVudHMgc3VjaCBhcyA8ZW1waGFzaXM+c3dpdGNoPC9lbXBoYXNpcz4uIFRoZSBoYXJkd2FyZQorICAgICAgY2FzZSBjYW4gYmUgdXNlZCBpbiBlbGVtZW50cyB3aXRoIGNoYW5uZWwgc2VsZWN0aW9uLCBzdWNoIGFzIHZpZGVvIHNvdXJjZQorICAgICAgZWxlbWVudHMgKHY0bHNyYywgdjRsMnNyYywgZXRjLikuIElmIHlvdSBuZWVkIGEgc3BlY2lmaWMgZWxlbWVudCB0eXBlLAorICAgICAgdXNlIHRoZSBlbGVtZW50IGZhY3RvcnkncyA8cXVvdGU+Y2F0ZWdvcnk8L3F1b3RlPiB0byBtYWtlIHN1cmUgdGhhdCB0aGUKKyAgICAgIGVsZW1lbnQgaXMgb2YgdGhlIHR5cGUgdGhhdCB5b3UgbmVlZC4gTm90ZSB0aGF0IHRoZSBpbnRlcmZhY2UgaXRzZWxmIGlzCisgICAgICBoaWdobHkgYW5hbG9nLXZpZGVvLWNlbnRyaWMuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgVGhpcyBpbnRlcmZhY2UgcmVxdWlyZXMgdGhlIDx1bGluayB0eXBlPSJodHRwIgorICAgICAgdXJsPSIuLi8uLi9nc3RyZWFtZXIvaHRtbC9Hc3RJbXBsZW1lbnRzSW50ZXJmYWNlLmh0bWwiPjxjbGFzc25hbWU+CisgICAgICBHc3RJbXBsZW1lbnRzSW50ZXJmYWNlPC9jbGFzc25hbWU+PC91bGluaz4KKyAgICAgIGludGVyZmFjZSB0byB3b3JrIGNvcnJlY3RseS4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIGltcGxlbWVudCB0aGUgdHVuZXIgaW50ZXJmYWNlIGluIGFuCisgICAgICBlbGVtZW50LiBJdCBkb2VzIG5vdCBzaG93IHRoZSBhY3R1YWwgcHJvY2VzcyBvZiBzdHJlYW0gc2VsZWN0aW9uLCB0aGF0CisgICAgICBpcyBpcnJlbGV2YW50IGZvciB0aGlzIHNlY3Rpb24uCisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz4KKyNpbmNsdWRlICZsdDtnc3QvdHVuZXIvdHVuZXIuaCZndDsKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdE15RmlsdGVyIHsKK1suLl0KKyAgZ2ludCBhY3RpdmVfaW5wdXQ7CisgIEdMaXN0ICpjaGFubmVsczsKK30gR3N0TXlGaWx0ZXI7CisKK3N0YXRpYyB2b2lkCWdzdF9teV9maWx0ZXJfaW1wbGVtZW50c19pbnRlcmZhY2VfaW5pdAkoR3N0SW1wbGVtZW50c0ludGVyZmFjZUNsYXNzICppZmFjZSk7CitzdGF0aWMgdm9pZAlnc3RfbXlfZmlsdGVyX3R1bmVyX2ludGVyZmFjZV9pbml0CShHc3RUdW5lckNsYXNzICppZmFjZSk7CisKK0dUeXBlCitnc3RfbXlfZmlsdGVyX2dldF90eXBlICh2b2lkKQoreworWy4uXQorICAgIHN0YXRpYyBjb25zdCBHSW50ZXJmYWNlSW5mbyBpbXBsZW1lbnRzX2ludGVyZmFjZV9pbmZvID0geworICAgICAgKEdJbnRlcmZhY2VJbml0RnVuYykgZ3N0X215X2ZpbHRlcl9pbXBsZW1lbnRzX2ludGVyZmFjZV9pbml0LAorICAgICAgTlVMTCwKKyAgICAgIE5VTEwKKyAgICB9OworICAgIHN0YXRpYyBjb25zdCBHSW50ZXJmYWNlSW5mbyB0dW5lcl9pbnRlcmZhY2VfaW5mbyA9IHsKKyAgICAgIChHSW50ZXJmYWNlSW5pdEZ1bmMpIGdzdF9teV9maWx0ZXJfdHVuZXJfaW50ZXJmYWNlX2luaXQsCisgICAgICBOVUxMLAorICAgICAgTlVMTAorICAgIH07CitbLi5dCisgICAgZ190eXBlX2FkZF9pbnRlcmZhY2Vfc3RhdGljIChteV9maWx0ZXJfdHlwZSwKKwkJCQkgR1NUX1RZUEVfSU1QTEVNRU5UU19JTlRFUkZBQ0UsCisJCQkJICZhbXA7aW1wbGVtZW50c19pbnRlcmZhY2VfaW5mbyk7CisgICAgZ190eXBlX2FkZF9pbnRlcmZhY2Vfc3RhdGljIChteV9maWx0ZXJfdHlwZSwKKwkJCQkgR1NUX1RZUEVfVFVORVIsCisJCQkJICZhbXA7dHVuZXJfaW50ZXJmYWNlX2luZm8pOworWy4uXQorfQorCitzdGF0aWMgdm9pZAorZ3N0X215X2ZpbHRlcl9pbml0IChHc3RNeUZpbHRlciAqZmlsdGVyKQoreworICBHc3RUdW5lckNoYW5uZWwgKmNoYW5uZWwgPSBOVUxMOworWy4uXQorICBmaWx0ZXItPmFjdGl2ZV9pbnB1dCA9IDA7CisgIGZpbHRlci0+Y2hhbm5lbHMgPSBOVUxMOworICBjaGFubmVsID0gZ19vYmplY3RfbmV3IChHU1RfVFlQRV9UVU5FUl9DSEFOTkVMLCBOVUxMKTsKKyAgY2hhbm5lbC0+bGFiZWwgPSBnX3N0cmR1cCAoIk15Q2hhbm5lbCIpOworICBjaGFubmVsLT5mbGFncyA9IEdTVF9UVU5FUl9DSEFOTkVMX0lOUFVUOworICBmaWx0ZXItPmNoYW5uZWxzID0gZ19saXN0X2FwcGVuZCAoZmlsdGVyLT5jaGFubmVscywgY2hhbm5lbCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X215X2ZpbHRlcl9pbnRlcmZhY2Vfc3VwcG9ydGVkIChHc3RJbXBsZW1lbnRzSW50ZXJmYWNlICppZmFjZSwKKwkJCQkgICBHVHlwZSAgICAgICAgICAgICAgICAgICBpZmFjZV90eXBlKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoaWZhY2VfdHlwZSA9PSBHU1RfVFlQRV9UVU5FUiwgRkFMU0UpOworCisgIC8qIGZvciB0aGUgc2FrZSBvZiB0aGlzIGV4YW1wbGUsIHdlJ2xsIGFsd2F5cyBzdXBwb3J0IGl0LiBIb3dldmVyLCBub3JtYWxseSwKKyAgICogeW91IHdvdWxkIGNoZWNrIHdoZXRoZXIgdGhlIGRldmljZSB5b3UndmUgb3BlbmVkIHN1cHBvcnRzIHR1bmluZy4gKi8KKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfbXlfZmlsdGVyX2ltcGxlbWVudHNfaW50ZXJmYWNlX2luaXQgKEdzdEltcGxlbWVudHNJbnRlcmZhY2VDbGFzcyAqaWZhY2UpCit7CisgIGlmYWNlLT5zdXBwb3J0ZWQgPSBnc3RfbXlfZmlsdGVyX2ludGVyZmFjZV9zdXBwb3J0ZWQ7Cit9CisKK3N0YXRpYyBjb25zdCBHTGlzdCAqCitnc3RfbXlfZmlsdGVyX3R1bmVyX2xpc3RfY2hhbm5lbHMgKEdzdFR1bmVyICp0dW5lcikKK3sKKyAgR3N0TXlGaWx0ZXIgKmZpbHRlciA9IEdTVF9NWV9GSUxURVIgKHR1bmVyKTsKKworICByZXR1cm4gZmlsdGVyLT5jaGFubmVsczsKK30KKworc3RhdGljIEdzdFR1bmVyQ2hhbm5lbCAqCitnc3RfbXlfZmlsdGVyX3R1bmVyX2dldF9jaGFubmVsIChHc3RUdW5lciAqdHVuZXIpCit7CisgIEdzdE15RmlsdGVyICpmaWx0ZXIgPSBHU1RfTVlfRklMVEVSICh0dW5lcik7CisKKyAgcmV0dXJuIGdfbGlzdF9udGhfZGF0YSAoZmlsdGVyLT5jaGFubmVscywKKwkJCSAgZmlsdGVyLT5hY3RpdmVfaW5wdXQpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X215X2ZpbHRlcl90dW5lcl9zZXRfY2hhbm5lbCAoR3N0VHVuZXIgICAgICAgICp0dW5lciwKKwkJCQkgR3N0VHVuZXJDaGFubmVsICpjaGFubmVsKQoreworICBHc3RNeUZpbHRlciAqZmlsdGVyID0gR1NUX01ZX0ZJTFRFUiAodHVuZXIpOworCisgIGZpbHRlci0+YWN0aXZlX2lucHV0ID0gZ19saXN0X2luZGV4IChmaWx0ZXItPmNoYW5uZWxzLCBjaGFubmVsKTsKKyAgZ19hc3NlcnQgKGZpbHRlci0+YWN0aXZlX2lucHV0ID49IDApOworfQorCitzdGF0aWMgdm9pZAorZ3N0X215X2ZpbHRlcl90dW5lcl9pbnRlcmZhY2VfaW5pdCAoR3N0VHVuZXJDbGFzcyAqaWZhY2UpCit7CisgIGlmYWNlLT5saXN0X2NoYW5uZWxzID0gZ3N0X215X2ZpbHRlcl90dW5lcl9saXN0X2NoYW5uZWxzOworICBpZmFjZS0+Z2V0X2NoYW5uZWwgICA9IGdzdF9teV9maWx0ZXJfdHVuZXJfZ2V0X2NoYW5uZWw7CisgIGlmYWNlLT5zZXRfY2hhbm5lbCAgID0gZ3N0X215X2ZpbHRlcl90dW5lcl9zZXRfY2hhbm5lbDsKK30KKyAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDxwYXJhPgorICAgICAgQXMgc2FpZCwgdGhlIHR1bmVyIGludGVyZmFjZSBpcyB2ZXJ5IGFuYWxvZyB2aWRlby1jZW50cmljLiBJdCBmZWF0dXJlcworICAgICAgZnVuY3Rpb25zIGZvciBzZWxlY3RpbmcgYW4gaW5wdXQgb3Igb3V0cHV0LCBhbmQgb24gaW5wdXRzLCBpdCBmZWF0dXJlcworICAgICAgc2VsZWN0aW9uIG9mIGEgdHVuaW5nIGZyZXF1ZW5jeSBpZiB0aGUgY2hhbm5lbCBzdXBwb3J0cyBmcmVxdWVuY3ktdHVuaW5nCisgICAgICBvbiB0aGF0IGlucHV0LiBMaWtld2lzZSwgaXQgYWxsb3dzIHNpZ25hbC1zdHJlbmd0aC1hY3F1aXJpbmcgaWYgdGhlIGlucHV0CisgICAgICBzdXBwb3J0cyB0aGF0LiBGcmVxdWVuY3kgdHVuaW5nIGNhbiBiZSB1c2VkIGZvciByYWRpbyBvciBjYWJsZS1UViB0dW5pbmcuCisgICAgICBTaWduYWwtc3RyZW5ndGggaXMgYW4gaW5kaWNhdGlvbiBvZiB0aGUgc2lnbmFsIGFuZCBjYW4gYmUgdXNlZCBmb3IKKyAgICAgIHZpc3VhbCBmZWVkYmFjayB0byB0aGUgdXNlciBvciBmb3IgYXV0b2RldGVjdGlvbi4gTmV4dCB0byB0aGF0LCBpdCBhbHNvCisgICAgICBmZWF0dXJlcyBub3JtIHNlbGVjdGlvbiwgd2hpY2ggaXMgb25seSB1c2VmdWwgZm9yIGFuYWxvZyB2aWRlbyBlbGVtZW50cy4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWlmYWNlLWNvbG9yYmFsYW5jZSIgeHJlZmxhYmVsPSJDb2xvciBCYWxhbmNlIEludGVyZmFjZSI+CisgICAgPHRpdGxlPkNvbG9yIEJhbGFuY2UgSW50ZXJmYWNlPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFdSSVRFTUUKKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWlmYWNlLXByb3Bwcm9iZSIgeHJlZmxhYmVsPSJQcm9wZXJ0eSBQcm9iZSBJbnRlcmZhY2UiPgorICAgIDx0aXRsZT5Qcm9wZXJ0eSBQcm9iZSBJbnRlcmZhY2U8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgUHJvcGVydHkgcHJvYmluZyBpcyBhIGdlbmVyaWMgc29sdXRpb24gdG8gdGhlIHByb2JsZW0gdGhhdCBwcm9wZXJ0aWVzJworICAgICAgdmFsdWUgbGlzdHMgaW4gYW4gZW51bWVyYXRpb24gYXJlIHN0YXRpYy4gV2UndmUgc2hvd24gZW51bWVyYXRpb25zIGluCisgICAgICA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLWJ1aWxkaW5nLWFyZ3MiLz4uIFByb3BlcnR5IHByb2JpbmcgdHJpZXMgdG8gYWNjb21wbGlzaAorICAgICAgYSBnb2FsIHNpbWlsYXIgdG8gZW51bWVyYXRpb24gbGlzdHM6IHRvIGhhdmUgYSBsaW1pdGVkLCBleHBsaWNpdCBsaXN0IG9mCisgICAgICBhbGxvd2VkIHZhbHVlcyBmb3IgYSBwcm9wZXJ0eS4gVGhlcmUgYXJlIHR3byBkaWZmZXJlbmNlcyBiZXR3ZWVuCisgICAgICBlbnVtZXJhdGlvbiBsaXN0cyBhbmQgcHJvYmluZy4gRmlyc3RseSwgZW51bWVyYXRpb25zIG9ubHkgYWxsb3cgc3RyaW5ncworICAgICAgYXMgdmFsdWVzOyBwcm9wZXJ0eSBwcm9iaW5nIHdvcmtzIGZvciBhbnkgdmFsdWUgdHlwZS4gU2Vjb25kbHksIHRoZQorICAgICAgY29udGVudHMgb2YgYSBwcm9iZWQgbGlzdCBvZiBhbGxvd2VkIHZhbHVlcyBtYXkgY2hhbmdlIGR1cmluZyB0aGUgbGlmZQorICAgICAgb2YgYW4gZWxlbWVudC4gVGhlIGNvbnRlbnRzIG9mIGFuIGVudW1lcmF0aW9uIGxpc3QgYXJlIHN0YXRpYy4gQ3VycmVudGx5LAorICAgICAgcHJvcGVydHkgcHJvYmluZyBpcyBiZWluZyB1c2VkIGZvciBkZXRlY3Rpb24gb2YgZGV2aWNlcyAoZS5nLiBmb3IgT1NTCisgICAgICBlbGVtZW50cywgVmlkZW80bGludXggZWxlbWVudHMsIGV0Yy4pLiBJdCBjb3VsZCAtIGluIHRoZW9yeSAtIGJlIHVzZWQKKyAgICAgIGZvciBhbnkgcHJvcGVydHksIHRob3VnaC4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBQcm9wZXJ0eSBwcm9iaW5nIHN0b3JlcyB0aGUgbGlzdCBvZiBhbGxvd2VkIChvciByZWNvbW1lbmRlZCkgdmFsdWVzIGluIGEKKyAgICAgIDxjbGFzc25hbWU+R1ZhbHVlQXJyYXk8L2NsYXNzbmFtZT4gYW5kIHJldHVybnMgdGhhdCB0byB0aGUgdXNlci4KKyAgICAgIDxzeW1ib2w+TlVMTDwvc3ltYm9sPiBpcyBhIHZhbGlkIHJldHVybiB2YWx1ZSwgdG9vLiBUaGUgcHJvY2VzcyBvZgorICAgICAgcHJvcGVydHkgcHJvYmluZyBpcyBzZXBhcmF0ZWQgb3ZlciB0d28gdmlydHVhbCBmdW5jdGlvbnM6IG9uZSBmb3IgcHJvYmluZworICAgICAgdGhlIHByb3BlcnR5IHRvIGNyZWF0ZSBhIDxjbGFzc25hbWU+R1ZhbHVlQXJyYXk8L2NsYXNzbmFtZT4sIGFuZCBvbmUgdG8KKyAgICAgIHJldHJpZXZlIHRoZSBjdXJyZW50IDxjbGFzc25hbWU+R1ZhbHVlQXJyYXk8L2NsYXNzbmFtZT4uIFRob3NlIHR3byBhcmUKKyAgICAgIHNlcGFyYXRlZCBiZWNhdXNlIHByb2JpbmcgbWlnaHQgdGFrZSBhIGxvbmcgdGltZSAoc2V2ZXJhbCBzZWNvbmRzKS4gQWxzbywKKyAgICAgIHRoaXMgc2ltcGxpZmllcyBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb24gaW4gZWxlbWVudHMuIEZvciB0aGUgYXBwbGljYXRpb24sCisgICAgICB0aGVyZSBhcmUgZnVuY3Rpb25zIHRoYXQgd3JhcCB0aG9zZSB0d28uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMsCisgICAgICBoYXZlIGEgbG9vayBhdCB0aGUgQVBJIHJlZmVyZW5jZSBmb3IgdGhlCisgICAgICA8IS0tIEZJWE1FOiBhZGQgbGluaywgYnV0IHRoaXMgaXMgaW4gLi9nc3QtcGx1Z2lucy9nc3QtbGlicy9nc3QvcHJvcGVydHlwcm9iZS9wcm9wZXJ0eXByb2JlLmMtLT4KKyAgICAgIDxjbGFzc25hbWU+R3N0UHJvcGVydHlQcm9iZTwvY2xhc3NuYW1lPiBpbnRlcmZhY2UuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgQmVsb3cgaXMgYSBleGFtcGxlIG9mIHByb3BlcnR5IHByb2JpbmcgZm9yIHRoZSBhdWRpbyBmaWx0ZXIgZWxlbWVudDsgaXQKKyAgICAgIHdpbGwgcHJvYmUgZm9yIGFsbG93ZWQgdmFsdWVzIGZvciB0aGUgPHF1b3RlPnNpbGVudDwvcXVvdGU+IHByb3BlcnR5LgorICAgICAgSW5kZWVkLCB0aGlzIHZhbHVlIGlzIGEgPHR5cGU+Z2Jvb2xlYW48L3R5cGU+IHNvIGl0IGRvZXNuJ3QKKyAgICAgIG1ha2UgbXVjaCBzZW5zZS4gVGhlbiBhZ2FpbiwgaXQncyBvbmx5IGFuIGV4YW1wbGUuCisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz4KKyNpbmNsdWRlICZsdDtnc3QvcHJvcGVydHlwcm9iZS9wcm9wZXJ0eXByb2JlLmgmZ3Q7CisKK3N0YXRpYyB2b2lkCWdzdF9teV9maWx0ZXJfcHJvYmVfaW50ZXJmYWNlX2luaXQJKEdzdFByb3BlcnR5UHJvYmVJbnRlcmZhY2UgKmlmYWNlKTsKKworR1R5cGUKK2dzdF9teV9maWx0ZXJfZ2V0X3R5cGUgKHZvaWQpCit7CitbLi5dCisgICAgc3RhdGljIGNvbnN0IEdJbnRlcmZhY2VJbmZvIHByb2JlX2ludGVyZmFjZV9pbmZvID0geworICAgICAgKEdJbnRlcmZhY2VJbml0RnVuYykgZ3N0X215X2ZpbHRlcl9wcm9iZV9pbnRlcmZhY2VfaW5pdCwKKyAgICAgIE5VTEwsCisgICAgICBOVUxMCisgICAgfTsKK1suLl0KKyAgICBnX3R5cGVfYWRkX2ludGVyZmFjZV9zdGF0aWMgKG15X2ZpbHRlcl90eXBlLAorCQkJCSBHU1RfVFlQRV9QUk9QRVJUWV9QUk9CRSwKKwkJCQkgJmFtcDtwcm9iZV9pbnRlcmZhY2VfaW5mbyk7CitbLi5dCit9CisKK3N0YXRpYyBjb25zdCBHTGlzdCAqCitnc3RfbXlfZmlsdGVyX3Byb2JlX2dldF9wcm9wZXJ0aWVzIChHc3RQcm9wZXJ0eVByb2JlICpwcm9iZSkKK3sKKyAgR09iamVjdENsYXNzICprbGFzcyA9IEdfT0JKRUNUX0dFVF9DTEFTUyAocHJvYmUpOworICBzdGF0aWMgR0xpc3QgKnByb3BzID0gTlVMTDsKKworICBpZiAoIXByb3BzKSB7CisgICAgR1BhcmFtU3BlYyAqcHNwZWM7CisKKyAgICBwc3BlYyA9IGdfb2JqZWN0X2NsYXNzX2ZpbmRfcHJvcGVydHkgKGtsYXNzLCAic2lsZW50Iik7CisgICAgcHJvcHMgPSBnX2xpc3RfYXBwZW5kIChwcm9wcywgcHNwZWMpOworICB9CisKKyAgcmV0dXJuIHByb3BzOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9teV9maWx0ZXJfcHJvYmVfbmVlZHNfcHJvYmUgKEdzdFByb3BlcnR5UHJvYmUgKnByb2JlLAorCQkJCSBndWludCAgICAgICAgICAgICBwcm9wX2lkLAorCQkJCSBjb25zdCBHUGFyYW1TcGVjICpwc3BlYykKK3sKKyAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7CisKKyAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBBUkdfU0lMRU5UOgorICAgICAgcmVzID0gRkFMU0U7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChwcm9iZSwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZAorZ3N0X215X2ZpbHRlcl9wcm9iZV9wcm9iZV9wcm9wZXJ0eSAoR3N0UHJvcGVydHlQcm9iZSAqcHJvYmUsCisJCQkJICAgIGd1aW50ICAgICAgICAgICAgIHByb3BfaWQsCisJCQkJICAgIGNvbnN0IEdQYXJhbVNwZWMgKnBzcGVjKQoreworICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIEFSR19TSUxFTlQ6CisgICAgICAvKiBkb24ndCBuZWVkIHRvIGRvIG11Y2ggaGVyZS4uLiAqLworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAocHJvYmUsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYyBHVmFsdWVBcnJheSAqCitnc3RfbXlfZmlsdGVyX2dldF9zaWxlbnRfdmFsdWVzIChHc3RNeUZpbHRlciAqZmlsdGVyKQoreworICBHVmFsdWVBcnJheSAqYXJyYXkgPSBnX3ZhbHVlX2FycmF5X25ldyAoMik7CisgIEdWYWx1ZSB2YWx1ZSA9IHsgMCB9OworCisgIGdfdmFsdWVfaW5pdCAoJmFtcDt2YWx1ZSwgR19UWVBFX0JPT0xFQU4pOworCisgIC8qIGFkZCBUUlVFICovCisgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKCZhbXA7dmFsdWUsIFRSVUUpOworICBnX3ZhbHVlX2FycmF5X2FwcGVuZCAoYXJyYXksICZhbXA7dmFsdWUpOworCisgIC8qIGFkZCBGQUxTRSAqLworICBnX3ZhbHVlX3NldF9ib29sZWFuICgmYW1wO3ZhbHVlLCBGQUxTRSk7CisgIGdfdmFsdWVfYXJyYXlfYXBwZW5kIChhcnJheSwgJmFtcDt2YWx1ZSk7CisKKyAgZ192YWx1ZV91bnNldCAoJmFtcDt2YWx1ZSk7CisKKyAgcmV0dXJuIGFycmF5OworfQorCitzdGF0aWMgR1ZhbHVlQXJyYXkgKgorZ3N0X215X2ZpbHRlcl9wcm9iZV9nZXRfdmFsdWVzIChHc3RQcm9wZXJ0eVByb2JlICpwcm9iZSwKKwkJCQlndWludCAgICAgICAgICAgICBwcm9wX2lkLAorCQkJCWNvbnN0IEdQYXJhbVNwZWMgKnBzcGVjKQoreworICBHc3RNeUZpbHRlciAqZmlsdGVyID0gR1NUX01ZX0ZJTFRFUiAocHJvYmUpOworICBHVmFsdWVBcnJheSAqYXJyYXkgPSBOVUxMOworCisgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgQVJHX1NJTEVOVDoKKyAgICAgIGFycmF5ID0gZ3N0X215X2ZpbHRlcl9nZXRfc2lsZW50X3ZhbHVlcyAoZmlsdGVyKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKHByb2JlLCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiBhcnJheTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9teV9maWx0ZXJfcHJvYmVfaW50ZXJmYWNlX2luaXQgKEdzdFByb3BlcnR5UHJvYmVJbnRlcmZhY2UgKmlmYWNlKQoreworICBpZmFjZS0+Z2V0X3Byb3BlcnRpZXMgPSBnc3RfbXlfZmlsdGVyX3Byb2JlX2dldF9wcm9wZXJ0aWVzOworICBpZmFjZS0+bmVlZHNfcHJvYmUgICAgPSBnc3RfbXlfZmlsdGVyX3Byb2JlX25lZWRzX3Byb2JlOworICBpZmFjZS0+cHJvYmVfcHJvcGVydHkgPSBnc3RfbXlfZmlsdGVyX3Byb2JlX3Byb2JlX3Byb3BlcnR5OworICBpZmFjZS0+Z2V0X3ZhbHVlcyAgICAgPSBnc3RfbXlfZmlsdGVyX3Byb2JlX2dldF92YWx1ZXM7Cit9CisgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8cGFyYT4KKyAgICAgIFlvdSBkb24ndCBuZWVkIHRvIHN1cHBvcnQgYW55IGZ1bmN0aW9ucyBmb3IgZ2V0dGluZyBvciBzZXR0aW5nIHZhbHVlcy4KKyAgICAgIEFsbCB0aGF0IGlzIGhhbmRsZWQgdmlhIHRoZSBzdGFuZGFyZCA8Y2xhc3NuYW1lPkdPYmplY3Q8L2NsYXNzbmFtZT4KKyAgICAgIDxmdW5jdGlvbj5fc2V0X3Byb3BlcnR5ICgpPC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5fZ2V0X3Byb3BlcnR5ICgpPC9mdW5jdGlvbj4KKyAgICAgIGZ1bmN0aW9ucy4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWlmYWNlLXhvdmVybGF5IiB4cmVmbGFiZWw9IlggT3ZlcmxheSBJbnRlcmZhY2UiPgorICAgIDx0aXRsZT5YIE92ZXJsYXkgSW50ZXJmYWNlPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIEFuIFggT3ZlcmxheSBpcyBiYXNpY2FsbHkgYSB2aWRlbyBvdXRwdXQgaW4gYSBYRnJlZTg2IGRyYXdhYmxlLiBFbGVtZW50cworICAgICAgaW1wbGVtZW50aW5nIHRoaXMgaW50ZXJmYWNlIHdpbGwgZHJhdyB2aWRlbyBpbiBhIFgxMSB3aW5kb3cuIFRocm91Z2ggdGhpcworICAgICAgaW50ZXJmYWNlLCBhcHBsaWNhdGlvbnMgd2lsbCBiZSBwcm9wb3NlZCAyIGRpZmZlcmVudCBtb2RlcyB0byB3b3JrIHdpdGgKKyAgICAgIGEgcGx1Z2luIGltcGxlbWVudGluZyBpdC4gVGhlIGZpcnN0IG1vZGUgaXMgYSBwYXNzaXZlIG1vZGUgd2hlcmUgdGhlIHBsdWdpbgorICAgICAgb3ducywgY3JlYXRlcyBhbmQgZGVzdHJveXMgdGhlIFgxMSB3aW5kb3cuIFRoZSBzZWNvbmQgbW9kZSBpcyBhbiBhY3RpdmUKKyAgICAgIG1vZGUgd2hlcmUgdGhlIGFwcGxpY2F0aW9uIGhhbmRsZXMgdGhlIFgxMSB3aW5kb3cgY3JlYXRpb24gYW5kIHRoZW4gdGVsbAorICAgICAgdGhlIHBsdWdpbiB3aGVyZSBpdCBzaG91bGQgb3V0cHV0IHZpZGVvLiBMZXQncyBnZXQgYSBiaXQgZGVlcGVyIGluIHRob3NlCisgICAgICBtb2Rlcy4uLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIEEgcGx1Z2luIGRyYXdpbmcgdmlkZW8gb3V0cHV0IGluIGEgWDExIHdpbmRvdyB3aWxsIG5lZWQgdG8gaGF2ZSB0aGF0CisgICAgICB3aW5kb3cgYXQgb25lIHN0YWdlIG9yIGFub3RoZXIuIFBhc3NpdmUgbW9kZSBzaW1wbHkgbWVhbnMgdGhhdCBubyB3aW5kb3cKKyAgICAgIGhhcyBiZWVuIGdpdmVuIHRvIHRoZSBwbHVnaW4gYmVmb3JlIHRoYXQgc3RhZ2UsIHNvIHRoZSBwbHVnaW4gY3JlYXRlZCB0aGUKKyAgICAgIHdpbmRvdyBieSBpdHNlbGYuIEluIHRoYXQgY2FzZSB0aGUgcGx1Z2luIGlzIHJlc3BvbnNpYmxlIG9mIGRlc3Ryb3lpbmcKKyAgICAgIHRoYXQgd2luZG93IHdoZW4gaXQncyBub3QgbmVlZGVkIGFueSBtb3JlIGFuZCBpdCBoYXMgdG8gdGVsbCB0aGUKKyAgICAgIGFwcGxpY2F0aW9ucyB0aGF0IGEgd2luZG93IGhhcyBiZWVuIGNyZWF0ZWQgc28gdGhhdCB0aGUgYXBwbGljYXRpb24gY2FuCisgICAgICB1c2UgaXQuIFRoaXMgaXMgZG9uZSB1c2luZyB0aGUgPGNsYXNzbmFtZT5oYXZlX3h3aW5kb3dfaWQ8L2NsYXNzbmFtZT4KKyAgICAgIHNpZ25hbCB0aGF0IGNhbiBiZSBlbWl0dGVkIGZyb20gdGhlIHBsdWdpbiB3aXRoIHRoZQorICAgICAgPGZ1bmN0aW9uPmdzdF94X292ZXJsYXlfZ290X3h3aW5kb3dfaWQ8L2Z1bmN0aW9uPiBtZXRob2QuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgQXMgeW91IHByb2JhYmx5IGd1ZXNzZWQgYWxyZWFkeSBhY3RpdmUgbW9kZSBqdXN0IG1lYW5zIHNlbmRpbmcgYSBYMTEKKyAgICAgIHdpbmRvdyB0byB0aGUgcGx1Z2luIHNvIHRoYXQgdmlkZW8gb3V0cHV0IGdvZXMgdGhlcmUuIFRoaXMgaXMgZG9uZSB1c2luZworICAgICAgdGhlIDxmdW5jdGlvbj5nc3RfeF9vdmVybGF5X3NldF94d2luZG93X2lkPC9mdW5jdGlvbj4gbWV0aG9kLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIEl0IGlzIHBvc3NpYmxlIHRvIHN3aXRjaCBmcm9tIG9uZSBtb2RlIHRvIGFub3RoZXIgYXQgYW55IG1vbWVudCwgc28gdGhlCisgICAgICBwbHVnaW4gaW1wbGVtZW50aW5nIHRoaXMgaW50ZXJmYWNlIGhhcyB0byBoYW5kbGUgYWxsIGNhc2VzLiBUaGVyZSBhcmUgb25seQorICAgICAgMiBtZXRob2RzIHRoYXQgcGx1Z2lucyB3cml0ZXJzIGhhdmUgdG8gaW1wbGVtZW50IGFuZCB0aGV5IG1vc3QgcHJvYmFibHkKKyAgICAgIGxvb2sgbGlrZSB0aGF0IDoKKyAgICA8L3BhcmE+CisgICAgPHByb2dyYW1saXN0aW5nPjwhW0NEQVRBWworc3RhdGljIHZvaWQKK2dzdF9teV9maWx0ZXJfc2V0X3h3aW5kb3dfaWQgKEdzdFhPdmVybGF5ICpvdmVybGF5LCBYSUQgeHdpbmRvd19pZCkKK3sKKyAgR3N0TXlGaWx0ZXIgKm15X2ZpbHRlciA9IEdTVF9NWV9GSUxURVIgKG92ZXJsYXkpOworCisgIGlmIChteV9maWx0ZXItPndpbmRvdykKKyAgICBnc3RfbXlfZmlsdGVyX2Rlc3Ryb3lfd2luZG93IChteV9maWx0ZXItPndpbmRvdyk7CisgICAgCisgIG15X2ZpbHRlci0+d2luZG93ID0geHdpbmRvd19pZDsKK30KKworc3RhdGljIHZvaWQKK2dzdF9teV9maWx0ZXJfZ2V0X2Rlc2lyZWRfc2l6ZSAoR3N0WE92ZXJsYXkgKm92ZXJsYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICp3aWR0aCwgZ3VpbnQgKmhlaWdodCkKK3sKKyAgR3N0TXlGaWx0ZXIgKm15X2ZpbHRlciA9IEdTVF9NWV9GSUxURVIgKG92ZXJsYXkpOworCisgICp3aWR0aCA9IG15X2ZpbHRlci0+d2lkdGg7CisgICpoZWlnaHQgPSBteV9maWx0ZXItPmhlaWdodDsKK30KKworc3RhdGljIHZvaWQKK2dzdF9teV9maWx0ZXJfeG92ZXJsYXlfaW5pdCAoR3N0WE92ZXJsYXlDbGFzcyAqaWZhY2UpCit7CisgIGlmYWNlLT5zZXRfeHdpbmRvd19pZCA9IGdzdF9teV9maWx0ZXJfc2V0X3h3aW5kb3dfaWQ7CisgIGlmYWNlLT5nZXRfZGVzaXJlZF9zaXplID0gZ3N0X215X2ZpbHRlcl9nZXRfZGVzaXJlZF9zaXplOworfQorICAgIF1dPjwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+CisgICAgICBZb3Ugd2lsbCBhbHNvIG5lZWQgdG8gdXNlIHRoZSBpbnRlcmZhY2UgbWV0aG9kcyB0byBmaXJlIHNpZ25hbHMgd2hlbiAKKyAgICAgIG5lZWRlZCBzdWNoIGFzIGluIHRoZSBwYWQgbGluayBmdW5jdGlvbiB3aGVyZSB5b3Ugd2lsbCBrbm93IHRoZSB2aWRlbworICAgICAgZ2VvbWV0cnkgYW5kIG1heWJlIGNyZWF0ZSB0aGUgd2luZG93LgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3Rpbmc+PCFbQ0RBVEFbCitzdGF0aWMgTXlGaWx0ZXJXaW5kb3cgKgorZ3N0X215X2ZpbHRlcl93aW5kb3dfY3JlYXRlIChHc3RNeUZpbHRlciAqbXlfZmlsdGVyLCBnaW50IHdpZHRoLCBnaW50IGhlaWdodCkKK3sKKyAgTXlGaWx0ZXJXaW5kb3cgKndpbmRvdyA9IGdfbmV3IChNeUZpbHRlcldpbmRvdywgMSk7CisgIC4uLgorICBnc3RfeF9vdmVybGF5X2dvdF94d2luZG93X2lkIChHU1RfWF9PVkVSTEFZIChteV9maWx0ZXIpLCB3aW5kb3ctPndpbik7Cit9CisKK3N0YXRpYyBHc3RQYWRMaW5rUmV0dXJuCitnc3RfbXlfZmlsdGVyX3NpbmtfbGluayAoR3N0UGFkICpwYWQsIGNvbnN0IEdzdENhcHMgKmNhcHMpCit7CisgIEdzdE15RmlsdGVyICpteV9maWx0ZXIgPSBHU1RfTVlfRklMVEVSIChvdmVybGF5KTsKKyAgZ2ludCB3aWR0aCwgaGVpZ2h0OworICBnYm9vbGVhbiByZXQ7CisgIC4uLgorICByZXQgPSBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgIndpZHRoIiwgJndpZHRoKTsKKyAgcmV0ICY9IGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiaGVpZ2h0IiwgJmhlaWdodCk7CisgIGlmICghcmV0KSByZXR1cm4gR1NUX1BBRF9MSU5LX1JFRlVTRUQ7CisgIAorICBpZiAoIW15X2ZpbHRlci0+d2luZG93KQorICAgIG15X2ZpbHRlci0+d2luZG93ID0gZ3N0X215X2ZpbHRlcl9jcmVhdGVfd2luZG93IChteV9maWx0ZXIsIHdpZHRoLCBoZWlnaHQpOworCisgIGdzdF94X292ZXJsYXlfZ290X2Rlc2lyZWRfc2l6ZSAoR1NUX1hfT1ZFUkxBWSAobXlfZmlsdGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0KTsKKyAgLi4uCit9CisgICAgXV0+PC9wcm9ncmFtbGlzdGluZz4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24taWZhY2UtbmF2aWdhdGlvbiIgeHJlZmxhYmVsPSJOYXZpZ2F0aW9uIEludGVyZmFjZSI+CisgICAgPHRpdGxlPk5hdmlnYXRpb24gSW50ZXJmYWNlPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFdSSVRFTUUKKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL3B3Zy9hZHZhbmNlZC1uZWdvdGlhdGlvbi54bWwgYi9kb2NzL3B3Zy9hZHZhbmNlZC1uZWdvdGlhdGlvbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE0ZTkwZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvcHdnL2FkdmFuY2VkLW5lZ290aWF0aW9uLnhtbApAQCAtMCwwICsxLDQzOSBAQAorPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItbmVnb3RpYXRpb24iIHhyZWZsYWJlbD0iQ2FwcyBuZWdvdGlhdGlvbiI+CisgIDx0aXRsZT5DYXBzIG5lZ290aWF0aW9uPC90aXRsZT4KKyAgPHBhcmE+CisgICAgQ2FwcyBuZWdvdGlhdGlvbiBpcyB0aGUgcHJvY2VzcyB3aGVyZSBlbGVtZW50cyBjb25maWd1cmUgdGhlbXNlbHZlcworICAgIGFuZCBlYWNoIG90aGVyIGZvciBzdHJlYW1pbmcgYSBwYXJ0aWN1bGFyIG1lZGlhIGZvcm1hdCBvdmVyIHRoZWlyIHBhZHMuCisgICAgU2luY2UgZGlmZmVyZW50IHR5cGVzIG9mIGVsZW1lbnRzIGhhdmUgZGlmZmVyZW50IHJlcXVpcmVtZW50cyBmb3IgdGhlCisgICAgbWVkaWEgZm9ybWF0cyB0aGV5IGNhbiBuZWdvdGlhdGUgdG8sIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoaXMgcHJvY2VzcworICAgIGlzIGdlbmVyaWMgYW5kIGltcGxlbWVudHMgYWxsIHRob3NlIHVzZSBjYXNlcyBjb3JyZWN0bHkuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgSW4gdGhpcyBjaGFwdGVyLCB3ZSB3aWxsIGRpc2N1c3MgZG93bnN0cmVhbSBuZWdvdGlhdGlvbiBhbmQgdXBzdHJlYW0KKyAgICBuZWdvdGlhdGlvbiBmcm9tIGEgcGlwZWxpbmUgcGVyc3BlY3RpdmUsIGltcGxpY2F0aW5nIHRoZSByZXNwb25zaWJpbGl0aWVzCisgICAgb2YgZGlmZmVyZW50IHR5cGVzIG9mIGVsZW1lbnRzIGluIGEgcGlwZWxpbmUsIGFuZCB3ZSB3aWxsIGludHJvZHVjZSB0aGUKKyAgICBjb25jZXB0IG9mIDxlbXBoYXNpcz5maXhlZCBjYXBzPC9lbXBoYXNpcz4uCisgIDwvcGFyYT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tbmVnby1yZXF1aXJlbWVudHMiIHhyZWZsYWJlbD0iQ2FwcyBuZWdvdGlhdGlvbiB1c2UgY2FzZXMiPgorICAgIDx0aXRsZT5DYXBzIG5lZ290aWF0aW9uIHVzZSBjYXNlczwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBMZXQncyB0YWtlIHRoZSBjYXNlIG9mIGEgZmlsZSBzb3VyY2UsIGxpbmtlZCB0byBhIGRlbXV4ZXIsIGxpbmtlZCB0byBhCisgICAgICBkZWNvZGVyLCBsaW5rZWQgdG8gYSBjb252ZXJ0ZXIgd2l0aCBhIGNhcHMgZmlsdGVyIGFuZCBmaW5hbGx5IGFuIGF1ZGlvCisgICAgICBvdXRwdXQuIFdoZW4gZGF0YSBmbG93IG9yaWdpbmFsbHkgc3RhcnRzLCB0aGUgZGVtdXhlciB3aWxsIHBhcnNlIHRoZQorICAgICAgZmlsZSBoZWFkZXIgKGUuZy4gdGhlIE9nZyBoZWFkZXJzKSwgYW5kIG5vdGljZSB0aGF0IHRoZXJlIGlzLCBmb3IKKyAgICAgIGV4YW1wbGUsIGEgVm9yYmlzIHN0cmVhbSBpbiB0aGlzIE9nZyBmaWxlLiBOb3RpY2luZyB0aGF0LCBpdCB3aWxsCisgICAgICBjcmVhdGUgYW4gb3V0cHV0IHBhZCBmb3IgdGhlIFZvcmJpcyBlbGVtZW50YXJ5IHN0cmVhbSBhbmQgc2V0IGEKKyAgICAgIFZvcmJpcy1jYXBzIG9uIGl0LiBMYXN0bHksIGl0IGFkZHMgdGhlIHBhZC4gQXMgb2YgdGhpcyBwb2ludCwgdGhlIHBhZAorICAgICAgaXMgcmVhZHkgdG8gYmUgdXNlZCB0byBzdHJlYW0gZGF0YSwgYW5kIHNvIHRoZSBPZ2cgZGVtdXhlciBpcyBub3cgZG9uZS4KKyAgICAgIFRoaXMgcGFkIGlzIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPiByZS1uZWdvdGlhYmxlLCBzaW5jZSB0aGUgdHlwZSBvZgorICAgICAgdGhlIGRhdGEgc3RyZWFtIGlzIGVtYmVkZGVkIHdpdGhpbiB0aGUgZGF0YS4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBUaGUgVm9yYmlzIGRlY29kZXIgd2lsbCBkZWNvZGUgdGhlIFZvcmJpcyBoZWFkZXJzIGFuZCB0aGUgVm9yYmlzIGRhdGEKKyAgICAgIGNvbWluZyBpbiBvbiBpdHMgc2lua3BhZC4gTm93LCBzb21lIGRlY29kZXJzIG1heSBiZSBhYmxlIHRvIG91dHB1dCBpbgorICAgICAgbXVsdGlwbGUgb3V0cHV0IGZvcm1hdHMsIGZvciBleGFtcGxlIGJvdGggMTYtYml0IGludGVnZXIgb3V0cHV0IGFuZAorICAgICAgZmxvYXRpbmctcG9pbnQgb3V0cHV0LCB3aGVyZWFzIG90aGVyIGRlY29kZXJzIG1heSBiZSBhYmxlIHRvIG9ubHkgZGVjb2RlCisgICAgICBpbnRvIG9uZSBzcGVjaWZpYyBmb3JtYXQsIGUuZy4gb25seSBmbG9hdGluZy1wb2ludCAoMzItYml0KSBhdWRpby4gVGhvc2UKKyAgICAgIHR3byBjYXNlcyBoYXZlIGNvbnNlcXVlbmNlcyBmb3IgaG93IGNhcHMgbmVnb3RpYXRpb24gc2hvdWxkIGJlCisgICAgICBpbXBsZW1lbnRlZCBpbiB0aGlzIGRlY29kZXIgZWxlbWVudC4gSW4gdGhlIG9uZSBjYXNlLCBpdCBpcyBwb3NzaWJsZSB0bworICAgICAgdXNlIGZpeGVkIGNhcHMsIGFuZCB5b3UncmUgZG9uZS4gSW4gdGhlIG90aGVyIGNhc2UsIGhvd2V2ZXIsIHlvdSBzaG91bGQKKyAgICAgIGltcGxlbWVudCB0aGUgcG9zc2liaWxpdHkgZm9yIDxlbXBoYXNpcz5yZW5lZ290aWF0aW9uPC9lbXBoYXNpcz4gaW4gdGhpcworICAgICAgZWxlbWVudCwgd2hpY2ggaXMgdGhlIHBvc3NpYmlsaXR5IGZvciB0aGUgZGF0YSBmb3JtYXQgdG8gYmUgY2hhbmdlZCB0bworICAgICAgYW5vdGhlciBmb3JtYXQgYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLiBXZSB3aWxsIGRpc2N1c3MgaG93IHRvIGRvCisgICAgICB0aGlzIGluIG9uZSBvZiB0aGUgc2VjdGlvbnMgZnVydGhlciBvbiBpbiB0aGlzIGNoYXB0ZXIuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgVGhlIGZpbHRlciBjYW4gYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMgdG8gZm9yY2UsIGZvciBleGFtcGxlLCBhIHNwZWNpZmljCisgICAgICBjaGFubmVsIGNvbmZpZ3VyYXRpb24gKDUuMS9zdXJyb3VuZCBvciAyLjAvc3RlcmVvKSwgb24gdGhlIHBpcGVsaW5lLCBzbworICAgICAgdGhhdCB0aGUgdXNlciBjYW4gZW5qb3kgc291bmQgY29taW5nIGZyb20gYWxsIGl0cyBzcGVha2Vycy4gVGhlIGF1ZGlvCisgICAgICBzaW5rLCBpbiB0aGlzIGV4YW1wbGUsIGlzIGEgc3RhbmRhcmQgQUxTQSBvdXRwdXQgZWxlbWVudCAoYWxzYXNpbmspLgorICAgICAgVGhlIGNvbnZlcnRlciBlbGVtZW50IHN1cHBvcnRzIGFueS10by1hbnksIGFuZCB0aGUgZmlsdGVyIHdpbGwgbWFrZSBzdXJlCisgICAgICB0aGF0IG9ubHkgYSBzcGVjaWZpY2FsbHkgd2FudGVkIGNoYW5uZWwgY29uZmlndXJhdGlvbiBzdHJlYW1zIHRocm91Z2gKKyAgICAgIHRoaXMgbGluayAoYXMgcHJvdmlkZWQgYnkgdGhlIHVzZXIncyBjaGFubmVsIGNvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZSkuCisgICAgICBCeSBjaGFuZ2luZyB0aGlzIHByZWZlcmVuY2Ugd2hpbGUgdGhlIHBpcGVsaW5lIGlzIHJ1bm5pbmcsIHNvbWUgZWxlbWVudHMKKyAgICAgIHdpbGwgaGF2ZSB0byByZW5lZ290aWF0ZSA8ZW1waGFzaXM+d2hpbGUgdGhlIHBpcGVsaW5lIGlzCisgICAgICBydW5uaW5nPC9lbXBoYXNpcz4uIFRoaXMgaXMgZG9uZSB0aHJvdWdoIHVwc3RyZWFtIGNhcHMgcmVuZWdvdGlhdGlvbi4KKyAgICAgIFRoYXQsIHRvbywgd2lsbCBiZSBkaXNjdXNzZWQgaW4gZGV0YWlsIGluIGEgc2VjdGlvbiBmdXJ0aGVyIGJlbG93LgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIEluIG9yZGVyIGZvciBjYXBzIG5lZ290aWF0aW9uIG9uIG5vbi1maXhlZCBsaW5rcyB0byB3b3JrIGNvcnJlY3RseSwKKyAgICAgIHBhZHMgY2FuIG9wdGlvbmFsbHkgaW1wbGVtZW50IGEgZnVuY3Rpb24gdGhhdCB0ZWxscyBwZWVyIGVsZW1lbnRzIHdoYXQKKyAgICAgIGZvcm1hdHMgaXQgc3VwcG9ydHMgYW5kL29yIHByZWZlcnMuIFdoZW4gdXBzdHJlYW0gcmVuZWdvdGlhdGlvbiBpcworICAgICAgdHJpZ2dlcmVkLCB0aGlzIGJlY29tZXMgaW1wb3J0YW50LgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIERvd25zdHJlYW0gZWxlbWVudHMgYXJlIG5vdGlmaWVkIG9mIGEgbmV3bHkgc2V0IGNhcHMgb25seSB3aGVuIGRhdGEKKyAgICAgIGlzIGFjdHVhbGx5IHBhc3NpbmcgdGhlaXIgcGFkLiBUaGlzIGlzIGJlY2F1c2UgY2FwcyBpcyBhdHRhY2hlZCB0bworICAgICAgYnVmZmVycyBkdXJpbmcgZGF0YSBmbG93LiBTbyB3aGVuIHRoZSB2b3JiaXMgZGVjb2RlciBzZXRzIGEgY2FwcyBvbgorICAgICAgaXRzIHNvdXJjZSBwYWQgKHRvIGNvbmZpZ3VyZSB0aGUgb3V0cHV0IGZvcm1hdCksIHRoZSBjb252ZXJ0ZXIgd2lsbAorICAgICAgbm90IHlldCBiZSBub3RpZmllZC4gSW5zdGVhZCwgdGhlIGNvbnZlcnRlciB3aWxsIG9ubHkgYmUgbm90aWZpZWQKKyAgICAgIHdoZW4gdGhlIGRlY29kZXIgcHVzaGVzIGEgYnVmZmVyIG92ZXIgaXRzIHNvdXJjZSBwYWQgdG8gdGhlIGNvbnZlcnRlci4KKyAgICAgIFJpZ2h0IGJlZm9yZSBjYWxsaW5nIHRoZSBjaGFpbi1mdW5jdGlvbiBpbiB0aGUgY29udmVydGVyLCAmR1N0cmVhbWVyOworICAgICAgd2lsbCBjaGVjayB3aGV0aGVyIHRoZSBmb3JtYXQgdGhhdCB3YXMgcHJldmlvdXNseSBuZWdvdGlhdGVkIHN0aWxsCisgICAgICBhcHBsaWVzIHRvIHRoaXMgYnVmZmVyLiBJZiBub3QsIGl0IGZpcnN0IGNhbGxzIHRoZSBzZXRjYXBzLWZ1bmN0aW9uCisgICAgICBvZiB0aGUgY29udmVydGVyIHRvIGNvbmZpZ3VyZSBpdCBmb3IgdGhlIG5ldyBmb3JtYXQuIE9ubHkgYWZ0ZXIgdGhhdAorICAgICAgd2lsbCBpdCBjYWxsIHRoZSBjaGFpbiBmdW5jdGlvbiBvZiB0aGUgY29udmVydGVyLgorICAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tbmVnby1maXhlZGNhcHMiIHhyZWZsYWJlbD0iRml4ZWQgY2FwcyI+CisgICAgPHRpdGxlPkZpeGVkIGNhcHM8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgVGhlIHNpbXBsZXN0IHdheSBpbiB3aGljaCB0byBkbyBjYXBzIG5lZ290aWF0aW9uIGlzIHNldHRpbmcgYSBmaXhlZAorICAgICAgY2FwcyBvbiBhIHBhZC4gQWZ0ZXIgYSBmaXhlZCBjYXBzIGhhcyBiZWVuIHNldCwgdGhlIHBhZCBjYW4gbm90IGJlCisgICAgICByZW5lZ290aWF0ZWQgZnJvbSB0aGUgb3V0c2lkZS4gVGhlIG9ubHkgd2F5IHRvIHJlY29uZmlndXJlIHRoZSBwYWQKKyAgICAgIGlzIGZvciB0aGUgZWxlbWVudCBvd25pbmcgdGhlIHBhZCB0byBzZXQgYSBuZXcgZml4ZWQgY2FwcyBvbiB0aGUgcGFkLgorICAgICAgRml4ZWQgY2FwcyBpcyBhIHNldHVwIHByb3BlcnR5IGZvciBwYWRzLCBjYWxsZWQgd2hlbiBjcmVhdGluZyB0aGUgcGFkOgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3Rpbmc+CitbLi5dCisgIHBhZCA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKC4uKTsKKyAgZ3N0X3BhZF91c2VfZml4ZWRfY2FwcyAocGFkKTsKK1suLl0KKyAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDxwYXJhPgorICAgICAgVGhlIGZpeGVkIGNhcHMgY2FuIHRoZW4gYmUgc2V0IG9uIHRoZSBwYWQgYnkgY2FsbGluZworICAgICAgPGZ1bmN0aW9uPmdzdF9wYWRfc2V0X2NhcHMgKCk8L2Z1bmN0aW9uPi4KKyAgICA8L3BhcmE+CisgICAgPHByb2dyYW1saXN0aW5nPgorWy4uXQorICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtcmF3LWZsb2F0IiwKKyAgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQsIDMyLAorICAgICAgImVuZGlhbm5lc3MiLCBHX1RZUEVfSU5ULCBHX0JZVEVfT1JERVIsCisgICAgICAiYnVmZmVyLWZyYW1lcyIsIEdfVFlQRV9JTlQsICZsdDtieXRlcy1wZXItZnJhbWUmZ3Q7LAorICAgICAgInJhdGUiLCBHX1RZUEVfSU5ULCAmbHQ7c2FtcGxlcmF0ZSZndDssCisgICAgICAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCAmbHQ7bnVtLWNoYW5uZWxzJmd0OywgTlVMTCk7CisgIGlmICghZ3N0X3BhZF9zZXRfY2FwcyAocGFkLCBjYXBzKSkgeworICAgIEdTVF9FTEVNRU5UX0VSUk9SIChlbGVtZW50LCBDT1JFLCBORUdPVElBVElPTiwgKE5VTEwpLAorICAgICAgICAoIlNvbWUgZGVidWcgaW5mb3JtYXRpb24gaGVyZSIpKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7CisgIH0KK1suLl0KKyAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDxwYXJhPgorICAgICAgRWxlbWVudHMgdGhhdCBjb3VsZCBpbXBsZW1lbnQgZml4ZWQgY2FwcyAob24gdGhlaXIgc291cmNlIHBhZHMpIGFyZSwKKyAgICAgIGluIGdlbmVyYWwsIGFsbCBlbGVtZW50cyB0aGF0IGFyZSBub3QgcmVuZWdvdGlhYmxlLiBFeGFtcGxlcyBpbmNsdWRlOgorICAgIDwvcGFyYT4KKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBIHR5cGVmaW5kZXIsIHNpbmNlIHRoZSB0eXBlIGZvdW5kIGlzIHBhcnQgb2YgdGhlIGFjdHVhbCBkYXRhIHN0cmVhbQorICAgICAgICAgIGFuZCBjYW4gdGh1cyBub3QgYmUgcmUtbmVnb3RpYXRlZC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgUHJldHR5IG11Y2ggYWxsIGRlbXV4ZXJzLCBzaW5jZSB0aGUgY29udGFpbmVkIGVsZW1lbnRhcnkgZGF0YQorICAgICAgICAgIHN0cmVhbXMgYXJlIGRlZmluZWQgaW4gdGhlIGZpbGUgaGVhZGVycywgYW5kIHRodXMgbm90CisgICAgICAgICAgcmVuZWdvdGlhYmxlLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBTb21lIGRlY29kZXJzLCB3aGVyZSB0aGUgZm9ybWF0IGlzIGVtYmVkZGVkIGluIHRoZSBkYXRhIHN0cmVhbQorICAgICAgICAgIGFuZCBub3QgcGFydCBvZiB0aGUgcGVlcmNhcHMgPGVtcGhhc2lzPmFuZDwvZW1waGFzaXM+IHdoZXJlIHRoZQorICAgICAgICAgIGRlY29kZXIgaXRzZWxmIGlzIG5vdCByZWNvbmZpZ3VyYWJsZSwgdG9vLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDxwYXJhPgorICAgICAgQWxsIG90aGVyIGVsZW1lbnRzIHRoYXQgbmVlZCB0byBiZSBjb25maWd1cmVkIGZvciB0aGUgZm9ybWF0IHNob3VsZAorICAgICAgaW1wbGVtZW50IGZ1bGwgY2FwcyBuZWdvdGlhdGlvbiwgd2hpY2ggd2lsbCBiZSBleHBsYWluZWQgaW4gdGhlIG5leHQKKyAgICAgIGZldyBzZWN0aW9ucy4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLW5lZ28tZG93bnN0cmVhbSIgeHJlZmxhYmVsPSJEb3duc3RyZWFtIGNhcHMgbmVnb3RpYXRpb24iPgorICAgIDx0aXRsZT5Eb3duc3RyZWFtIGNhcHMgbmVnb3RpYXRpb248L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgRG93bnN0cmVhbSBuZWdvdGlhdGlvbiB0YWtlcyBwbGFjZSB3aGVuIGEgZm9ybWF0IG5lZWRzIHRvIGJlIHNldCBvbiBhCisgICAgICBzb3VyY2UgcGFkIHRvIGNvbmZpZ3VyZSB0aGUgb3V0cHV0IGZvcm1hdCwgYnV0IHRoaXMgZWxlbWVudCBhbGxvd3MKKyAgICAgIHJlbmVnb3RpYXRpb24gYmVjYXVzZSBpdHMgZm9ybWF0IGlzIGNvbmZpZ3VyZWQgb24gdGhlIHNpbmtwYWQgY2FwcywKKyAgICAgIG9yIGJlY2F1c2UgaXQgc3VwcG9ydHMgbXVsdGlwbGUgZm9ybWF0cy4gVGhlIHJlcXVpcmVtZW50cyBmb3IgZG9pbmcKKyAgICAgIHRoZSBhY3R1YWwgbmVnb3RpYXRpb24gZGlmZmVyIHNsaWdodGx5LgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1uZWdvLWRvd25zdHJlYW0tZW1iZWQiCisgICAgICAgIHhyZWZsYWJlbD0iTmVnb3RpYXRpbmcgY2FwcyBlbWJlZGRlZCBpbiBpbnB1dCBjYXBzIj4KKyAgICAgIDx0aXRsZT5OZWdvdGlhdGluZyBjYXBzIGVtYmVkZGVkIGluIGlucHV0IGNhcHM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIE1hbnkgZWxlbWVudHMsIHBhcnRpY3VsYXJseSBlZmZlY3RzIGFuZCBjb252ZXJ0ZXJzLCB3aWxsIGJlIGFibGUKKyAgICAgICAgdG8gcGFyc2UgdGhlIGZvcm1hdCBvZiB0aGUgc3RyZWFtIGZyb20gdGhlaXIgaW5wdXQgY2FwcywgYW5kIGRlY2lkZQorICAgICAgICB0aGUgb3V0cHV0IGZvcm1hdCByaWdodCBhdCB0aGF0IHRpbWUgYWxyZWFkeS4gV2hlbiByZW5lZ290aWF0aW9uCisgICAgICAgIHRha2VzIHBsYWNlLCBzb21lIG1heSBtZXJlbHkgbmVlZCB0byAiZm9yd2FyZCIgdGhlIHJlbmVnb3RpYXRpb24KKyAgICAgICAgYmFja3dhcmRzIHVwc3RyZWFtIChtb3JlIG9uIHRoYXQgbGF0ZXIpLiBGb3IgdGhvc2UgZWxlbWVudHMsIGFsbAorICAgICAgICAoZG93bnN0cmVhbSkgY2FwcyBuZWdvdGlhdGlvbiBjYW4gYmUgZG9uZSBpbiBzb21ldGhpbmcgdGhhdCB3ZQorICAgICAgICBjYWxsIHRoZSA8ZnVuY3Rpb24+X3NldGNhcHMgKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBpcworICAgICAgICBjYWxsZWQgd2hlbiBhIGJ1ZmZlciBpcyBwdXNoZWQgb3ZlciBhIHBhZCwgYnV0IHRoZSBmb3JtYXQgb24gdGhpcworICAgICAgICBidWZmZXIgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBmb3JtYXQgdGhhdCB3YXMgcHJldmlvdXNseSBuZWdvdGlhdGVkCisgICAgICAgIChvciwgc2ltaWxhcmx5LCBubyBmb3JtYXQgd2FzIG5lZ290aWF0ZWQgeWV0IHNvIGZhcikuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgSW4gdGhlIDxmdW5jdGlvbj5fc2V0Y2FwcyAoKTwvZnVuY3Rpb24+LWZ1bmN0aW9uLCB0aGUgZWxlbWVudCBjYW4KKyAgICAgICAgZm9yd2FyZCB0aGUgY2FwcyB0byB0aGUgbmV4dCBlbGVtZW50IGFuZCwgaWYgdGhhdCBwYWQgYWNjZXB0cyB0aGUKKyAgICAgICAgZm9ybWF0IHRvbywgdGhlIGVsZW1lbnQgY2FuIHBhcnNlIHRoZSByZWxldmFudCBwYXJhbWV0ZXJzIGZyb20gdGhlCisgICAgICAgIGNhcHMgYW5kIGNvbmZpZ3VyZSBpdHNlbGYgaW50ZXJuYWxseS4gVGhlIGNhcHMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24KKyAgICAgICAgaXMgPGVtcGhhc2lzPmFsd2F5czwvZW1waGFzaXM+IGEgc3Vic2V0IG9mIHRoZSB0ZW1wbGF0ZSBjYXBzLCBzbworICAgICAgICB0aGVyZSdzIG5vIG5lZWQgZm9yIGV4dGVuc2l2ZSBzYWZldHkgY2hlY2tpbmcuIFRoZSBmb2xsb3dpbmcgZXhhbXBsZQorICAgICAgICBzaG91bGQgZ2l2ZSBhIGNsZWFyIGluZGljYXRpb24gb2YgaG93IHN1Y2ggYSBmdW5jdGlvbiBjYW4gYmUKKyAgICAgICAgaW1wbGVtZW50ZWQ6CisgICAgICA8L3BhcmE+CisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+PCEtLSBleGFtcGxlLWJlZ2luIGZvcndhcmRjYXBzLmMgYSAtLT48IS0tCisjaW5jbHVkZSAiaW5pdC5mdW5jIgorc3RhdGljIEdzdENhcHMgKgorZ3N0X215X2ZpbHRlcl9nZXRjYXBzIChHc3RQYWQgKiBwYWQpCit7CisgIHJldHVybiAgTlVMTDsKK30KKy0tPjwhLS0gZXhhbXBsZS1lbmQgZm9yd2FyZGNhcHMuYyBhIC0tPgorPCEtLSBleGFtcGxlLWJlZ2luIGZvcndhcmRjYXBzLmMgYiAtLT4KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X215X2ZpbHRlcl9zZXRjYXBzIChHc3RQYWQgICpwYWQsCisJCSAgICAgICBHc3RDYXBzICpjYXBzKQoreworICBHc3RNeUZpbHRlciAqZmlsdGVyID0gR1NUX01ZX0ZJTFRFUiAoR1NUX09CSkVDVF9QQVJFTlQgKHBhZCkpOworICBHc3RTdHJ1Y3R1cmUgKnM7CisKKyAgLyogZm9yd2FyZC1uZWdvdGlhdGUgKi8KKyAgaWYgKCFnc3RfcGFkX3NldF9jYXBzIChmaWx0ZXItJmd0O3NyY3BhZCwgY2FwcykpCisgICAgcmV0dXJuIEZBTFNFOworCisgIC8qIG5lZ290aWF0aW9uIHN1Y2NlZWRlZCwgc28gbm93IGNvbmZpZ3VyZSBvdXJzZWx2ZXMgKi8KKyAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOworICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJyYXRlIiwgJmFtcDtmaWx0ZXItJmd0O3NhbXBsZXJhdGUpOworICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJjaGFubmVscyIsICZhbXA7ZmlsdGVyLSZndDtjaGFubmVscyk7CisKKyAgcmV0dXJuIFRSVUU7Cit9Cis8IS0tIGV4YW1wbGUtZW5kIGZvcndhcmRjYXBzLmMgYiAtLT4KKzwhLS0gZXhhbXBsZS1iZWdpbiBmb3J3YXJkY2Fwcy5jIGMgLS0+PCEtLQorI2luY2x1ZGUgImNoYWluLmZ1bmMiCisjaW5jbHVkZSAic3RhdGUuZnVuYyIKKyNpbmNsdWRlICJyZWdpc3Rlci5mdW5jIgorICAgICAgLS0+PCEtLSBleGFtcGxlLWVuZCBmb3J3YXJkY2Fwcy5jIGMgLS0+PC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGVyZSBtYXkgYWxzbyBiZSBjYXNlcyB3aGVyZSB0aGUgZmlsdGVyIGFjdHVhbGx5IGlzIGFibGUgdG8KKyAgICAgICAgPGVtcGhhc2lzPmNoYW5nZTwvZW1waGFzaXM+IHRoZSBmb3JtYXQgb2YgdGhlIHN0cmVhbS4gSW4gdGhvc2UgY2FzZXMsCisgICAgICAgIGl0IHdpbGwgbmVnb3RpYXRlIGEgbmV3IGZvcm1hdC4gT2J2aW91c2x5LCB0aGUgZWxlbWVudCBzaG91bGQgZmlyc3QKKyAgICAgICAgYXR0ZW1wdCB0byBjb25maWd1cmUgPHF1b3RlPnBhc3MtdGhyb3VnaDwvcXVvdGU+LCB3aGljaCBtZWFucyB0aGF0CisgICAgICAgIGl0IGRvZXMgbm90IGNoYW5nZSB0aGUgc3RyZWFtJ3MgZm9ybWF0LiBIb3dldmVyLCBpZiB0aGF0IGZhaWxzLAorICAgICAgICB0aGVuIGl0IHNob3VsZCBjYWxsIDxmdW5jdGlvbj5nc3RfcGFkX2dldF9hbGxvd2VkX2NhcHMgKCk8L2Z1bmN0aW9uPgorICAgICAgICBvbiBpdHMgc291cmNlcGFkIHRvIGdldCBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGZvcm1hdHMgb24gdGhlIG91dHB1dHMsCisgICAgICAgIGFuZCBwaWNrIHRoZSBmaXJzdC4gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGF0IGZ1bmN0aW9uIGlzIGd1YXJhbnRlZWQKKyAgICAgICAgdG8gYmUgYSBzdWJzZXQgb2YgdGhlIHRlbXBsYXRlIGNhcHMuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgTGV0J3MgbG9vayBhdCB0aGUgZXhhbXBsZSBvZiBhbiBlbGVtZW50IHRoYXQgY2FuIGNvbnZlcnQgYmV0d2VlbgorICAgICAgICBzYW1wbGVyYXRlcywgc28gd2hlcmUgaW5wdXQgYW5kIG91dHB1dCBzYW1wbGVyYXRlIGRvbid0IGhhdmUgdG8gYmUKKyAgICAgICAgdGhlIHNhbWU6CisgICAgICA8L3BhcmE+CisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+PCEtLSBleGFtcGxlLWJlZ2luIGNvbnZlcnRjYXBzLmMgYSAtLT48IS0tCisjaW5jbHVkZSAiaW5pdC5mdW5jIgorc3RhdGljIEdzdENhcHMgKgorZ3N0X215X2ZpbHRlcl9nZXRjYXBzIChHc3RQYWQgKiBwYWQpCit7CisgIHJldHVybiBOVUxMOworfQorc3RhdGljIEdzdEJ1ZmZlciAqCitnc3RfbXlfZmlsdGVyX2NvbnZlcnQgKEdzdE15RmlsdGVyICpmaWx0ZXIsIEdzdEJ1ZmZlciAqaW4pCit7CisgIHJldHVybiBOVUxMOworfQorc3RhdGljIGdib29sZWFuCitnc3RfbXlfZmlsdGVyX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpCit7CisgIHJldHVybiBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgZXZlbnQpOworfQorLS0+PCEtLSBleGFtcGxlLWVuZCBjb252ZXJ0Y2Fwcy5jIGEgLS0+Cis8IS0tIGV4YW1wbGUtYmVnaW4gY29udmVydGNhcHMuYyBiIC0tPgorc3RhdGljIGdib29sZWFuCitnc3RfbXlfZmlsdGVyX3NldGNhcHMgKEdzdFBhZCAgKnBhZCwKKwkJICAgICAgIEdzdENhcHMgKmNhcHMpCit7CisgIEdzdE15RmlsdGVyICpmaWx0ZXIgPSBHU1RfTVlfRklMVEVSIChHU1RfT0JKRUNUX1BBUkVOVCAocGFkKSk7CisKKyAgaWYgKGdzdF9wYWRfc2V0X2NhcHMgKGZpbHRlci0mZ3Q7c2lua3BhZCwgY2FwcykpIHsKKyAgICBmaWx0ZXItJmd0O3Bhc3N0aHJvdWdoID0gVFJVRTsKKyAgfSBlbHNlIHsKKyAgICBHc3RDYXBzICpvdGhlcmNhcHMsICpuZXdjYXBzOworICAgIEdzdFN0cnVjdHVyZSAqcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApLCAqb3RoZXJzOworCisgICAgLyogbm8gcGFzc3Rocm91Z2gsIHNldHVwIGludGVybmFsIGNvbnZlcnNpb24gKi8KKyAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJjaGFubmVscyIsICZhbXA7ZmlsdGVyLSZndDtjaGFubmVscyk7CisgICAgb3RoZXJjYXBzID0gZ3N0X3BhZF9nZXRfYWxsb3dlZF9jYXBzIChmaWx0ZXItJmd0O3NyY3BhZCk7CisgICAgb3RoZXJzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAob3RoZXJjYXBzLCAwKTsKKyAgICBnc3Rfc3RydWN0dXJlX3NldCAob3RoZXJzLAorICAgICAgICAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCBmaWx0ZXItJmd0O2NoYW5uZWxzLCBOVUxMKTsKKworICAgIC8qIG5vdywgdGhlIHNhbXBsZXJhdGUgdmFsdWUgY2FuIG9wdGlvbmFsbHkgaGF2ZSBtdWx0aXBsZSB2YWx1ZXMsIHNvCisgICAgICogd2UgImZpeGF0ZSIgaXQsIHdoaWNoIG1lYW5zIHRoYXQgb25lIGZpeGVkIHZhbHVlIGlzIGNob3NlbiAqLworICAgIG5ld2NhcHMgPSBnc3RfY2Fwc19jb3B5X250aCAob3RoZXJjYXBzLCAwKTsKKyAgICBnc3RfY2Fwc191bnJlZiAob3RoZXJjYXBzKTsKKyAgICBnc3RfcGFkX2ZpeGF0ZV9jYXBzIChmaWx0ZXItJmd0O3NyY3BhZCwgbmV3Y2Fwcyk7CisgICAgaWYgKCFnc3RfcGFkX3NldF9jYXBzIChmaWx0ZXItJmd0O3NyY3BhZCwgbmV3Y2FwcykpCisgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAvKiB3ZSBhcmUgbm93IHNldCB1cCwgY29uZmlndXJlIGludGVybmFsbHkgKi8KKyAgICBmaWx0ZXItJmd0O3Bhc3N0aHJvdWdoID0gRkFMU0U7CisgICAgZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzLCAicmF0ZSIsICZhbXA7ZmlsdGVyLSZndDtmcm9tX3NhbXBsZXJhdGUpOworICAgIG90aGVycyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKG5ld2NhcHMsIDApOworICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAob3RoZXJzLCAicmF0ZSIsICZhbXA7ZmlsdGVyLSZndDt0b19zYW1wbGVyYXRlKTsKKyAgfQorCisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgR3N0Rmxvd1JldHVybgorZ3N0X215X2ZpbHRlcl9jaGFpbiAoR3N0UGFkICAgICpwYWQsCisJCSAgICAgR3N0QnVmZmVyICpidWYpCit7CisgIEdzdE15RmlsdGVyICpmaWx0ZXIgPSBHU1RfTVlfRklMVEVSIChHU1RfT0JKRUNUX1BBUkVOVCAocGFkKSk7CisgIEdzdEJ1ZmZlciAqb3V0OworCisgIC8qIHB1c2ggb24gaWYgaW4gcGFzc3Rocm91Z2ggbW9kZSAqLworICBpZiAoZmlsdGVyLSZndDtwYXNzdGhyb3VnaCkKKyAgICByZXR1cm4gZ3N0X3BhZF9wdXNoIChmaWx0ZXItJmd0O3NyY3BhZCwgYnVmKTsKKworICAvKiBjb252ZXJ0LCBwdXNoICovCisgIG91dCA9IGdzdF9teV9maWx0ZXJfY29udmVydCAoZmlsdGVyLCBidWYpOworICBnc3RfYnVmZmVyX3VucmVmIChidWYpOworCisgIHJldHVybiBnc3RfcGFkX3B1c2ggKGZpbHRlci0mZ3Q7c3JjcGFkLCBvdXQpOworfQorPCEtLSBleGFtcGxlLWVuZCBjb252ZXJ0Y2Fwcy5jIGIgLS0+Cis8IS0tIGV4YW1wbGUtYmVnaW4gY29udmVydGNhcHMuYyBjIC0tPjwhLS0KKyNpbmNsdWRlICJzdGF0ZS5mdW5jIgorI2luY2x1ZGUgInJlZ2lzdGVyLmZ1bmMiCisgICAgICAtLT48IS0tIGV4YW1wbGUtZW5kIGNvbnZlcnRjYXBzLmMgYyAtLT48L3Byb2dyYW1saXN0aW5nPgorICAgIDwvc2VjdDI+CisKKyAgICA8c2VjdDIgaWQ9InNlY3Rpb24tbmVnby1kb3duc3RyZWFtLXBhcnNlIgorICAgICAgICB4cmVmbGFiZWw9IlBhcnNpbmcgYW5kIHNldHRpbmcgY2FwcyI+CisgICAgICA8dGl0bGU+UGFyc2luZyBhbmQgc2V0dGluZyBjYXBzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBPdGhlciBlbGVtZW50cywgc3VjaCBhcyBjZXJ0YWluIHR5cGVzIG9mIGRlY29kZXJzLCB3aWxsIG5vdCBiZSBhYmxlCisgICAgICAgIHRvIHBhcnNlIHRoZSBjYXBzIGZyb20gdGhlaXIgaW5wdXQsIHNpbXBseSBiZWNhdXNlIHRoZSBpbnB1dCBmb3JtYXQKKyAgICAgICAgZG9lcyBub3QgY29udGFpbiB0aGUgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8ga25vdyB0aGUgb3V0cHV0IGZvcm1hdAorICAgICAgICB5ZXQ7IHJhdGhlciwgdGhlIGRhdGEgaGVhZGVycyBuZWVkIHRvIGJlIHBhcnNlZCwgdG9vLiBJbiBtYW55IGNhc2VzLAorICAgICAgICBmaXhlZC1jYXBzIHdpbGwgYmUgZW5vdWdoLCBidXQgaW4gc29tZSBjYXNlcywgcGFydGljdWxhcmx5IGluIGNhc2VzCisgICAgICAgIHdoZXJlIHN1Y2ggZGVjb2RlcnMgYXJlIHJlbmVnb3RpYWJsZSwgaXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UKKyAgICAgICAgZnVsbCBjYXBzIG5lZ290aWF0aW9uLgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIEZvcnR1bmF0ZWx5LCB0aGUgY29kZSByZXF1aXJlZCB0byBkbyBzbyBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlIGxhc3QKKyAgICAgICAgY29kZSBleGFtcGxlIGluIDx4cmVmIGxpbmtlbmQ9InNlY3Rpb24tbmVnby1kb3duc3RyZWFtLWVtYmVkIi8+LCB3aXRoCisgICAgICAgIHRoZSBkaWZmZXJlbmNlIGJlaW5nIHRoYXQgdGhlIGNhcHMgaXMgc2VsZWN0ZWQgaW4gdGhlIDxmdW5jdGlvbj5fY2hhaW4KKyAgICAgICAgKCk8L2Z1bmN0aW9uPi1mdW5jdGlvbiByYXRoZXIgdGhhbiBpbiB0aGUgPGZ1bmN0aW9uPl9zZXRjYXBzCisgICAgICAgICgpPC9mdW5jdGlvbj4tZnVuY3Rpb24uIFRoZSByZXN0LCBhcyBmb3IgZ2V0dGluZyBhbGwgYWxsb3dlZCBjYXBzIGZyb20KKyAgICAgICAgdGhlIHNvdXJjZSBwYWQsIGZpeGF0aW5nIGFuZCBzdWNoLCBpcyBhbGwgdGhlIHNhbWUuIFJlLW5lZ290aWF0aW9uLAorICAgICAgICB3aGljaCB3aWxsIGJlIGhhbmRsZWQgaW4gdGhlIG5leHQgc2VjdGlvbiwgaXMgdmVyeSBkaWZmZXJlbnQgZm9yIHN1Y2gKKyAgICAgICAgZWxlbWVudHMsIHRob3VnaC4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3QyPgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1uZWdvLXVwc3RyZWFtIiB4cmVmbGFiZWw9IlVwc3RyZWFtIGNhcHMgKHJlKW5lZ290aWF0aW9uIj4KKyAgICA8dGl0bGU+VXBzdHJlYW0gY2FwcyAocmUpbmVnb3RpYXRpb248L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgVXBzdHJlYW0gbmVnb3RpYXRpb24ncyBwcmltYXJ5IHVzZSBpcyB0byByZW5lZ290aWF0ZSAocGFydCBvZikgYW4KKyAgICAgIGFscmVhZHktbmVnb3RpYXRlZCBwaXBlbGluZSB0byBhIG5ldyBmb3JtYXQuIFNvbWUgcHJhY3RpY2FsIGV4YW1wbGVzCisgICAgICBpbmNsdWRlIHRvIHNlbGVjdCBhIGRpZmZlcmVudCB2aWRlbyBzaXplIGJlY2F1c2UgdGhlIHNpemUgb2YgdGhlIHZpZGVvCisgICAgICB3aW5kb3cgY2hhbmdlZCwgYW5kIHRoZSB2aWRlbyBvdXRwdXQgaXRzZWxmIGlzIG5vdCBjYXBhYmxlIG9mIHJlc2NhbGluZywKKyAgICAgIG9yIGJlY2F1c2UgdGhlIGF1ZGlvIGNoYW5uZWwgY29uZmlndXJhdGlvbiBjaGFuZ2VkLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFVwc3RyZWFtIGNhcHMgcmVuZWdvdGlhdGlvbiBpcyBkb25lIGluIHRoZSA8ZnVuY3Rpb24+Z3N0X3BhZF9hbGxvY19idWZmZXIKKyAgICAgICgpPC9mdW5jdGlvbj4tZnVuY3Rpb24uIFRoZSBpZGVhIGhlcmUgaXMgdGhhdCBhbiBlbGVtZW50IHJlcXVlc3RpbmcgYQorICAgICAgYnVmZmVyIGZyb20gZG93bnN0cmVhbSwgaGFzIHRvIHNwZWNpZnkgdGhlIHR5cGUgb2YgdGhhdCBidWZmZXIuIElmCisgICAgICByZW5lZ290aWF0aW9uIGlzIHRvIHRha2UgcGxhY2UsIHRoaXMgdHlwZSB3aWxsIG5vIGxvbmdlciBhcHBseSwgYW5kIHRoZQorICAgICAgZG93bnN0cmVhbSBlbGVtZW50IHdpbGwgc2V0IGEgbmV3IGNhcHMgb24gdGhlIHByb3ZpZGVkIGJ1ZmZlci4gVGhlIGVsZW1lbnQKKyAgICAgIHNob3VsZCB0aGVuIHJlY29uZmlndXJlIGl0c2VsZiB0byBwdXNoIGJ1ZmZlcnMgd2l0aCB0aGUgcmV0dXJuZWQgY2Fwcy4gVGhlCisgICAgICBzb3VyY2UgcGFkJ3Mgc2V0Y2FwcyB3aWxsIGJlIGNhbGxlZCBvbmNlIHRoZSBidWZmZXIgaXMgcHVzaGVkLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIEl0IGlzIGltcG9ydGFudCB0byBub3RlIGhlcmUgdGhhdCBkaWZmZXJlbnQgZWxlbWVudHMgYWN0dWFsbHkgaGF2ZQorICAgICAgZGlmZmVyZW50IHJlc3BvbnNpYmlsaXRpZXMgaGVyZToKKyAgICA8L3BhcmE+CisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgRWxlbWVudHMgc2hvdWxkIGltcGxlbWVudCBhIDxxdW90ZT5wYWRhbGxvYzwvcXVvdGU+LWZ1bmN0aW9uIGluCisgICAgICAgICAgb3JkZXIgdG8gYmUgYWJsZSB0byBjaGFuZ2UgZm9ybWF0IG9uIHJlbmVnb3RpYXRpb24uIFRoaXMgaXMgYWxzbworICAgICAgICAgIHRydWUgZm9yIGZpbHRlcnMgYW5kIGNvbnZlcnRlcnMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEVsZW1lbnRzIHNob3VsZCBhbGxvY2F0ZSBuZXcgYnVmZmVycyB1c2luZworICAgICAgICAgIDxmdW5jdGlvbj5nc3RfcGFkX2FsbG9jX2J1ZmZlciAoKTwvZnVuY3Rpb24+LgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBFbGVtZW50cyB0aGF0IGFyZSByZW5lZ290aWFibGUgc2hvdWxkIGltcGxlbWVudCBhCisgICAgICAgICAgPHF1b3RlPnNldGNhcHM8L3F1b3RlPi1mdW5jdGlvbiBvbiB0aGVpciBzb3VyY2VwYWQgYXMgd2VsbC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8cGFyYT4KKyAgICAgIFVuZm9ydHVuYXRlbHksIG5vdCBhbGwgZGV0YWlscyBoZXJlIGhhdmUgYmVlbiB3b3JrZWQgb3V0IHlldCwgc28gdGhpcworICAgICAgZG9jdW1lbnRhdGlvbiBpcyBpbmNvbXBsZXRlLiBGSVhNRS4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLW5lZ28tZ2V0Y2FwcyIgeHJlZmxhYmVsPSJJbXBsZW1lbnRpbmcgYSBnZXRjYXBzIGZ1bmN0aW9uIj4KKyAgICA8dGl0bGU+SW1wbGVtZW50aW5nIGEgZ2V0Y2FwcyBmdW5jdGlvbjwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBBIDxmdW5jdGlvbj5fZ2V0Y2FwcyAoKTwvZnVuY3Rpb24+LWZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgcGVlcgorICAgICAgZWxlbWVudCB3b3VsZCBsaWtlIHRvIGtub3cgd2hpY2ggZm9ybWF0cyB0aGlzIGVsZW1lbnQgc3VwcG9ydHMsIGFuZAorICAgICAgaW4gd2hhdCBvcmRlciBvZiBwcmVmZXJlbmNlLiBUaGUgcmV0dXJuIHZhbHVlIHNob3VsZCBiZSBhbGwgZm9ybWF0cworICAgICAgdGhhdCB0aGlzIGVsZW1lbnRzIHN1cHBvcnRzLCB0YWtpbmcgaW50byBhY2NvdW50IGxpbWl0YXRpb25zIG9mIHBlZXIKKyAgICAgIGVsZW1lbnRzIGZ1cnRoZXIgZG93bnN0cmVhbSBvciB1cHN0cmVhbSwgc29ydGVkIGJ5IG9yZGVyIG9mIHByZWZlcmVuY2UsCisgICAgICBoaWdoZXN0IHByZWZlcmVuY2UgZmlyc3QuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3Rpbmc+PCEtLSBleGFtcGxlLWJlZ2luIGdldGNhcHMuYyBhIC0tPjwhLS0KKyNpbmNsdWRlICJpbml0LmZ1bmMiCistLT48IS0tIGV4YW1wbGUtZW5kIGdldGNhcHMuYyBhIC0tPgorPCEtLSBleGFtcGxlLWJlZ2luIGdldGNhcHMuYyBiIC0tPgorc3RhdGljIEdzdENhcHMgKgorZ3N0X215X2ZpbHRlcl9nZXRjYXBzIChHc3RQYWQgKnBhZCkKK3sKKyAgR3N0TXlGaWx0ZXIgKmZpbHRlciA9IEdTVF9NWV9GSUxURVIgKEdTVF9PQkpFQ1RfUEFSRU5UIChwYWQpKTsKKyAgR3N0UGFkICpvdGhlcnBhZCA9IChwYWQgPT0gZmlsdGVyLSZndDtzcmNwYWQpID8gZmlsdGVyLSZndDtzaW5rcGFkIDoKKwkJCQkJCSAgZmlsdGVyLSZndDtzcmNwYWQ7CisgIEdzdENhcHMgKm90aGVyY2FwcyA9IGdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwcyAob3RoZXJwYWQpLCAqY2FwczsKKyAgZ2ludCBpOworCisgIC8qIFdlIHN1cHBvcnQgKmFueSogc2FtcGxlcmF0ZSwgaW5kaWZmZXJlbnQgZnJvbSB0aGUgc2FtcGxlcmF0ZQorICAgKiBzdXBwb3J0ZWQgYnkgdGhlIGxpbmtlZCBlbGVtZW50cyBvbiBib3RoIHNpZGVzLiAqLworICBmb3IgKGkgPSAwOyBpICZsdDsgZ3N0X2NhcHNfZ2V0X3NpemUgKG90aGVyY2Fwcyk7IGkrKykgeworICAgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAob3RoZXJjYXBzLCBpKTsKKworICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkIChzdHJ1Y3R1cmUsICJyYXRlIik7CisgIH0KKyAgY2FwcyA9IGdzdF9jYXBzX2ludGVyc2VjdCAob3RoZXJjYXBzLCBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAocGFkKSk7CisgIGdzdF9jYXBzX3VucmVmIChvdGhlcmNhcHMpOworCisgIHJldHVybiBjYXBzOworfQorPCEtLSBleGFtcGxlLWVuZCBnZXRjYXBzLmMgYiAtLT4KKzwhLS0gZXhhbXBsZS1iZWdpbiBnZXRjYXBzLmMgYyAtLT48IS0tCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9teV9maWx0ZXJfc2V0Y2FwcyAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogY2FwcykKK3sKKyAgcmV0dXJuIEZBTFNFOworfQorI2luY2x1ZGUgImNoYWluLmZ1bmMiCisjaW5jbHVkZSAic3RhdGUuZnVuYyIKKyNpbmNsdWRlICJyZWdpc3Rlci5mdW5jIgorICAgIC0tPjwhLS0gZXhhbXBsZS1lbmQgZ2V0Y2Fwcy5jIGMgLS0+PC9wcm9ncmFtbGlzdGluZz4KKyAgICA8cGFyYT4KKyAgICAgIFVzaW5nIGFsbCB0aGUga25vd2xlZGdlIHlvdSd2ZSBhY3F1aXJlZCBieSByZWFkaW5nIHRoaXMgY2hhcHRlciwgeW91CisgICAgICBzaG91bGQgYmUgYWJsZSB0byB3cml0ZSBhbiBlbGVtZW50IHRoYXQgZG9lcyBjb3JyZWN0IGNhcHMgbmVnb3RpYXRpb24uCisgICAgICBJZiBpbiBkb3VidCwgbG9vayBhdCBvdGhlciBlbGVtZW50cyBvZiB0aGUgc2FtZSB0eXBlIGluIG91ciBnaXQKKyAgICAgIHJlcG9zaXRvcnkgdG8gZ2V0IGFuIGlkZWEgb2YgaG93IHRoZXkgZG8gd2hhdCB5b3Ugd2FudCB0byBkby4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL3B3Zy9hZHZhbmNlZC1yZXF1ZXN0LnhtbCBiL2RvY3MvcHdnL2FkdmFuY2VkLXJlcXVlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNzFkODIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3B3Zy9hZHZhbmNlZC1yZXF1ZXN0LnhtbApAQCAtMCwwICsxLDI2NyBAQAorPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItYWR2YW5jZWQtcmVxdWVzdCI+CisgIDx0aXRsZT5SZXF1ZXN0IGFuZCBTb21ldGltZXMgcGFkczwvdGl0bGU+CisgIDxwYXJhPgorICAgIFVudGlsIG5vdywgd2UndmUgb25seSBkZWFsdCB3aXRoIHBhZHMgdGhhdCBhcmUgYWx3YXlzIGF2YWlsYWJsZS4gSG93ZXZlciwKKyAgICB0aGVyZSdzIGFsc28gcGFkcyB0aGF0IGFyZSBvbmx5IGJlaW5nIGNyZWF0ZWQgaW4gc29tZSBjYXNlcywgb3Igb25seSBpZgorICAgIHRoZSBhcHBsaWNhdGlvbiByZXF1ZXN0cyB0aGUgcGFkLiBUaGUgZmlyc3QgaXMgY2FsbGVkIGEKKyAgICA8ZW1waGFzaXM+c29tZXRpbWVzPC9lbXBoYXNpcz47IHRoZSBzZWNvbmQgaXMgY2FsbGVkIGEKKyAgICA8ZW1waGFzaXM+cmVxdWVzdDwvZW1waGFzaXM+IHBhZC4gVGhlIGF2YWlsYWJpbGl0eSBvZiBhIHBhZCAoYWx3YXlzLAorICAgIHNvbWV0aW1lcyBvciByZXF1ZXN0KSBjYW4gYmUgc2VlbiBpbiBhIHBhZCdzIHRlbXBsYXRlLiBUaGlzIGNoYXB0ZXIgd2lsbAorICAgIGRpc2N1c3Mgd2hlbiBlYWNoIG9mIHRoZSB0d28gaXMgdXNlZnVsLCBob3cgdGhleSBhcmUgY3JlYXRlZCBhbmQgd2hlbgorICAgIHRoZXkgc2hvdWxkIGJlIGRpc3Bvc2VkLgorICA8L3BhcmE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLXJlcXBhZC1zb21ldGltZXMiIHhyZWZsYWJlbD0iU29tZXRpbWVzIHBhZHMiPgorICAgIDx0aXRsZT5Tb21ldGltZXMgcGFkczwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBBIDxxdW90ZT5zb21ldGltZXM8L3F1b3RlPiBwYWQgaXMgYSBwYWQgdGhhdCBpcyBjcmVhdGVkIHVuZGVyIGNlcnRhaW4KKyAgICAgIGNvbmRpdGlvbnMsIGJ1dCBub3QgaW4gYWxsIGNhc2VzLiBUaGlzIG1vc3RseSBkZXBlbmRzIG9uIHN0cmVhbSBjb250ZW50OgorICAgICAgZGVtdXhlcnMgd2lsbCBnZW5lcmFsbHkgcGFyc2UgdGhlIHN0cmVhbSBoZWFkZXIsIGRlY2lkZSB3aGF0IGVsZW1lbnRhcnkKKyAgICAgICh2aWRlbywgYXVkaW8sIHN1YnRpdGxlLCBldGMuKSBzdHJlYW1zIGFyZSBlbWJlZGRlZCBpbnNpZGUgdGhlIHN5c3RlbQorICAgICAgc3RyZWFtLCBhbmQgd2lsbCB0aGVuIGNyZWF0ZSBhIHNvbWV0aW1lcyBwYWQgZm9yIGVhY2ggb2YgdGhvc2UgZWxlbWVudGFyeQorICAgICAgc3RyZWFtcy4gQXQgaXRzIG93biBjaG9pY2UsIGl0IGNhbiBhbHNvIGNyZWF0ZSBtb3JlIHRoYW4gb25lIGluc3RhbmNlIG9mCisgICAgICBlYWNoIG9mIHRob3NlIHBlciBlbGVtZW50IGluc3RhbmNlLiBUaGUgb25seSBsaW1pdGF0aW9uIGlzIHRoYXQgZWFjaAorICAgICAgbmV3bHkgY3JlYXRlZCBwYWQgc2hvdWxkIGhhdmUgYSB1bmlxdWUgbmFtZS4gU29tZXRpbWVzIHBhZHMgYXJlIGRpc3Bvc2VkCisgICAgICB3aGVuIHRoZSBzdHJlYW0gZGF0YSBpcyBkaXNwb3NlZCwgdG9vIChpLmUuIHdoZW4gZ29pbmcgZnJvbSBQQVVTRUQgdG8gdGhlCisgICAgICBSRUFEWSBzdGF0ZSkuIFlvdSBzaG91bGQgPGVtcGhhc2lzPm5vdDwvZW1waGFzaXM+IGRpc3Bvc2UgdGhlIHBhZCBvbiBFT1MsCisgICAgICBiZWNhdXNlIHNvbWVvbmUgbWlnaHQgcmUtYWN0aXZhdGUgdGhlIHBpcGVsaW5lIGFuZCBzZWVrIGJhY2sgdG8gYmVmb3JlCisgICAgICB0aGUgZW5kLW9mLXN0cmVhbSBwb2ludC4gVGhlIHN0cmVhbSBzaG91bGQgc3RpbGwgc3RheSB2YWxpZCBhZnRlciBFT1MsIGF0CisgICAgICBsZWFzdCB1bnRpbCB0aGUgc3RyZWFtIGRhdGEgaXMgZGlzcG9zZWQuIEluIGFueSBjYXNlLCB0aGUgZWxlbWVudCBpcworICAgICAgYWx3YXlzIHRoZSBvd25lciBvZiBzdWNoIGEgcGFkLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSBleGFtcGxlIGNvZGUgYmVsb3cgd2lsbCBwYXJzZSBhIHRleHQgZmlsZSwgd2hlcmUgdGhlIGZpcnN0IGxpbmUgaXMKKyAgICAgIGEgbnVtYmVyIChuKS4gVGhlIG5leHQgbGluZXMgYWxsIHN0YXJ0IHdpdGggYSBudW1iZXIgKDAgdG8gbi0xKSwgd2hpY2gKKyAgICAgIGlzIHRoZSBudW1iZXIgb2YgdGhlIHNvdXJjZSBwYWQgb3ZlciB3aGljaCB0aGUgZGF0YSBzaG91bGQgYmUgc2VudC4KKyAgICA8L3BhcmE+CisgICAgPHByb2dyYW1saXN0aW5nPgorMworMDogZm9vCisxOiBiYXIKKzA6IGJvbworMjogYnllCisgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSBjb2RlIHRvIHBhcnNlIHRoaXMgZmlsZSBhbmQgY3JlYXRlIHRoZSBkeW5hbWljIDxxdW90ZT5zb21ldGltZXM8L3F1b3RlPgorICAgICAgcGFkcywgbG9va3MgbGlrZSB0aGlzOgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKK3R5cGVkZWYgc3RydWN0IF9Hc3RNeUZpbHRlciB7CitbLi5dCisgIGdib29sZWFuIGZpcnN0cnVuOworICBHTGlzdCAqc3JjcGFkbGlzdDsKK30gR3N0TXlGaWx0ZXI7CisKK3N0YXRpYyB2b2lkCitnc3RfbXlfZmlsdGVyX2Jhc2VfaW5pdCAoR3N0TXlGaWx0ZXJDbGFzcyAqa2xhc3MpCit7CisgIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7CisgIHN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfZmFjdG9yeSA9CisgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgKKyAgICAic3JjXyUwMmQiLAorICAgIEdTVF9QQURfU1JDLAorICAgIEdTVF9QQURfU09NRVRJTUVTLAorICAgIEdTVF9TVEFUSUNfQ0FQUyAoIkFOWSIpCisgICk7CitbLi5dCisgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCisJZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0ICgmc3JjX2ZhY3RvcnkpKTsKK1suLl0KK30KKworc3RhdGljIHZvaWQKK2dzdF9teV9maWx0ZXJfaW5pdCAoR3N0TXlGaWx0ZXIgKmZpbHRlcikKK3sKK1suLl0KKyAgZmlsdGVyLT5maXJzdHJ1biA9IFRSVUU7CisgIGZpbHRlci0+c3JjcGFkbGlzdCA9IE5VTEw7Cit9CisKKy8qCisgKiBHZXQgb25lIGxpbmUgb2YgZGF0YSAtIHdpdGhvdXQgbmV3bGluZS4KKyAqLworCitzdGF0aWMgR3N0QnVmZmVyICoKK2dzdF9teV9maWx0ZXJfZ2V0bGluZSAoR3N0TXlGaWx0ZXIgKmZpbHRlcikKK3sKKyAgZ3VpbnQ4ICpkYXRhOworICBnaW50IG4sIG51bTsKKworICAvKiBtYXguIGxpbmUgbGVuZ3RoIGlzIDUxMiBjaGFyYWN0ZXJzIC0gZm9yIHNhZmV0eSAqLworICBmb3IgKG4gPSAwOyBuIDwgNTEyOyBuKyspIHsKKyAgICBudW0gPSBnc3RfYnl0ZXN0cmVhbV9wZWVrX2J5dGVzIChmaWx0ZXItPmJzLCAmZGF0YSwgbiArIDEpOworICAgIGlmIChudW0gIT0gbiArIDEpCisgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qIG5ld2xpbmU/ICovCisgICAgaWYgKGRhdGFbbl0gPT0gJ1xuJykgeworICAgICAgR3N0QnVmZmVyICpidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKG4gKyAxKTsKKworICAgICAgZ3N0X2J5dGVzdHJlYW1fcGVla19ieXRlcyAoZmlsdGVyLT5icywgJmRhdGEsIG4pOworICAgICAgbWVtY3B5IChHU1RfQlVGRkVSX0RBVEEgKGJ1ZiksIGRhdGEsIG4pOworICAgICAgR1NUX0JVRkZFUl9EQVRBIChidWYpW25dID0gJ1wwJzsKKyAgICAgIGdzdF9ieXRlc3RyZWFtX2ZsdXNoX2Zhc3QgKGZpbHRlci0+YnMsIG4gKyAxKTsKKworICAgICAgcmV0dXJuIGJ1ZjsKKyAgICB9CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9teV9maWx0ZXJfbG9vcGZ1bmMgKEdzdEVsZW1lbnQgKmVsZW1lbnQpCit7CisgIEdzdE15RmlsdGVyICpmaWx0ZXIgPSBHU1RfTVlfRklMVEVSIChlbGVtZW50KTsKKyAgR3N0QnVmZmVyICpidWY7CisgIEdzdFBhZCAqcGFkOworICBnaW50IG51bSwgbjsKKworICAvKiBwYXJzZSBoZWFkZXIgKi8KKyAgaWYgKGZpbHRlci0+Zmlyc3RydW4pIHsKKyAgICBHc3RFbGVtZW50Q2xhc3MgKmtsYXNzOworICAgIEdzdFBhZFRlbXBsYXRlICp0ZW1wbDsKKyAgICBnY2hhciAqcGFkbmFtZTsKKworICAgIGlmICghKGJ1ZiA9IGdzdF9teV9maWx0ZXJfZ2V0bGluZSAoZmlsdGVyKSkpIHsKKyAgICAgIGdzdF9lbGVtZW50X2Vycm9yIChlbGVtZW50LCBTVFJFQU0sIFJFQUQsIChOVUxMKSwKKwkJCSAoIlN0cmVhbSBjb250YWlucyBubyBoZWFkZXIiKSk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIG51bSA9IGF0b2kgKEdTVF9CVUZGRVJfREFUQSAoYnVmKSk7CisgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKKworICAgIC8qIGZvciBlYWNoIG9mIHRoZSBzdHJlYW1zLCBjcmVhdGUgYSBwYWQgKi8KKyAgICBrbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAoZmlsdGVyKTsKKyAgICB0ZW1wbCA9IGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGtsYXNzLCAic3JjXyUwMmQiKTsKKyAgICBmb3IgKG4gPSAwOyBuIDwgbnVtOyBuKyspIHsKKyAgICAgIHBhZG5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJzcmNfJTAyZCIsIG4pOworICAgICAgcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAodGVtcGwsIHBhZG5hbWUpOworICAgICAgZ19mcmVlIChwYWRuYW1lKTsKKworICAgICAgLyogaGVyZSwgeW91IHdvdWxkIHNldCBfZ2V0Y2FwcyAoKSBhbmQgX2xpbmsgKCkgZnVuY3Rpb25zICovCisKKyAgICAgIGdzdF9lbGVtZW50X2FkZF9wYWQgKGVsZW1lbnQsIHBhZCk7CisgICAgICBmaWx0ZXItPnNyY3BhZGxpc3QgPSBnX2xpc3RfYXBwZW5kIChmaWx0ZXItPnNyY3BhZGxpc3QsIHBhZCk7CisgICAgfQorICB9CisKKyAgLyogYW5kIG5vdywgc2ltcGx5IHBhcnNlIGVhY2ggbGluZSBhbmQgcHVzaCBvdmVyICovCisgIGlmICghKGJ1ZiA9IGdzdF9teV9maWx0ZXJfZ2V0bGluZSAoZmlsdGVyKSkpIHsKKyAgICBHc3RFdmVudCAqZXZlbnQgPSBnc3RfZXZlbnRfbmV3IChHU1RfRVZFTlRfRU9TKTsKKyAgICBHTGlzdCAqcGFkbGlzdDsKKworICAgIGZvciAocGFkbGlzdCA9IHNyY3BhZGxpc3Q7CisgICAgICAgICBwYWRsaXN0ICE9IE5VTEw7IHBhZGxpc3QgPSBnX2xpc3RfbmV4dCAocGFkbGlzdCkpIHsKKyAgICAgIHBhZCA9IEdTVF9QQUQgKHBhZGxpc3QtPmRhdGEpOworICAgICAgZ3N0X2V2ZW50X3JlZiAoZXZlbnQpOworICAgICAgZ3N0X3BhZF9wdXNoIChwYWQsIEdTVF9EQVRBIChldmVudCkpOworICAgIH0KKyAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKyAgICBnc3RfZWxlbWVudF9zZXRfZW9zIChlbGVtZW50KTsKKworICAgIHJldHVybjsKKyAgfQorCisgIC8qIHBhcnNlIHN0cmVhbSBudW1iZXIgYW5kIGdvIGJleW9uZCB0aGUgJzonIGluIHRoZSBkYXRhICovCisgIG51bSA9IGF0b2kgKEdTVF9CVUZGRVJfREFUQSAoYnVmKSk7CisgIGlmIChudW0gPj0gMCAmJiBudW0gPCBnX2xpc3RfbGVuZ3RoIChmaWx0ZXItPnNyY3BhZGxpc3QpKSB7CisgICAgcGFkID0gR1NUX1BBRCAoZ19saXN0X250aF9kYXRhIChmaWx0ZXItPnNyY3BhZGxpc3QsIG51bSk7CisKKyAgICAvKiBtYWdpYyBidWZmZXIgcGFyc2luZyBmb28gKi8KKyAgICBmb3IgKG4gPSAwOyBHU1RfQlVGRkVSX0RBVEEgKGJ1Zilbbl0gIT0gJzonICYmCisgICAgICAgICAgICAgICAgR1NUX0JVRkZFUl9EQVRBIChidWYpW25dICE9ICdcMCc7IG4rKykgOworICAgIGlmIChHU1RfQlVGRkVSX0RBVEEgKGJ1Zilbbl0gIT0gJ1wwJykgeworICAgICAgR3N0QnVmZmVyICpzdWI7CisKKyAgICAgIC8qIGNyZWF0ZSBzdWJidWZmZXIgdGhhdCBzdGFydHMgcmlnaHQgcGFzdCB0aGUgc3BhY2UuIFRoZSByZWFzb24KKyAgICAgICAqIHRoYXQgd2UgZG9uJ3QganVzdCBmb3J3YXJkIHRoZSBkYXRhIHBvaW50ZXIgaXMgYmVjYXVzZSB0aGUKKyAgICAgICAqIHBvaW50ZXIgaXMgbm8gbG9uZ2VyIHRoZSBzdGFydCBvZiBhbiBhbGxvY2F0ZWQgYmxvY2sgb2YgbWVtb3J5LAorICAgICAgICogYnV0IGp1c3QgYSBwb2ludGVyIHRvIGEgcG9zaXRpb24gc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgb2YgaXQuCisgICAgICAgKiBUaGF0IGNhbm5vdCBiZSBmcmVlZCB1cG9uIGRpc3Bvc2FsLCBzbyB3ZSdkIGVpdGhlciBjcmFzaCBvciBoYXZlCisgICAgICAgKiBhIG1lbWxlYWsuIENyZWF0aW5nIGEgc3ViYnVmZmVyIGlzIGEgc2ltcGxlIHdheSB0byBzb2x2ZSB0aGF0LiAqLworICAgICAgc3ViID0gZ3N0X2J1ZmZlcl9jcmVhdGVfc3ViIChidWYsIG4gKyAxLCBHU1RfQlVGRkVSX1NJWkUgKGJ1ZikgLSBuIC0gMSk7CisgICAgICBnc3RfcGFkX3B1c2ggKHBhZCwgR1NUX0RBVEEgKHN1YikpOworICAgIH0KKyAgfQorICBnc3RfYnVmZmVyX3VucmVmIChidWYpOworfQorXV0+CisgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8cGFyYT4KKyAgICAgIE5vdGUgdGhhdCB3ZSB1c2UgYSBsb3Qgb2YgY2hlY2tzIGV2ZXJ5d2hlcmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNvbnRlbnQKKyAgICAgIGluIHRoZSBmaWxlIGlzIHZhbGlkLiBUaGlzIGhhcyB0d28gcHVycG9zZXM6IGZpcnN0LCB0aGUgZmlsZSBjb3VsZCBiZQorICAgICAgZXJyb25lb3VzLCBpbiB3aGljaCBjYXNlIHdlIHByZXZlbnQgYSBjcmFzaC4gVGhlIHNlY29uZCBhbmQgbW9zdCBpbXBvcnRhbnQKKyAgICAgIHJlYXNvbiBpcyB0aGF0IC0gaW4gZXh0cmVtZSBjYXNlcyAtIHRoZSBmaWxlIGNvdWxkIGJlIHVzZWQgbWFsaWNpb3VzbHkgdG8KKyAgICAgIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvdXIgaW4gdGhlIHBsdWdpbiwgd2hpY2ggbWlnaHQgbGVhZCB0byBzZWN1cml0eQorICAgICAgaXNzdWVzLiA8ZW1waGFzaXM+QWx3YXlzPC9lbXBoYXNpcz4gYXNzdW1lIHRoYXQgdGhlIGZpbGUgY291bGQgYmUgdXNlZCB0bworICAgICAgZG8gYmFkIHRoaW5ncy4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLXJlcXBhZC1yZXF1ZXN0IiB4cmVmbGFiZWw9IlJlcXVlc3QgcGFkcyI+CisgICAgPHRpdGxlPlJlcXVlc3QgcGFkczwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICA8cXVvdGU+UmVxdWVzdDwvcXVvdGU+IHBhZHMgYXJlIHNpbWlsYXIgdG8gc29tZXRpbWVzIHBhZHMsIGV4Y2VwdCB0aGF0CisgICAgICByZXF1ZXN0IGFyZSBjcmVhdGVkIG9uIGRlbWFuZCBvZiBzb21ldGhpbmcgb3V0c2lkZSBvZiB0aGUgZWxlbWVudCByYXRoZXIKKyAgICAgIHRoYW4gc29tZXRoaW5nIGluc2lkZSB0aGUgZWxlbWVudC4gVGhpcyBjb25jZXB0IGlzIG9mdGVuIHVzZWQgaW4gbXV4ZXJzLAorICAgICAgd2hlcmUgLSBmb3IgZWFjaCBlbGVtZW50YXJ5IHN0cmVhbSB0aGF0IGlzIHRvIGJlIHBsYWNlZCBpbiB0aGUgb3V0cHV0CisgICAgICBzeXN0ZW0gc3RyZWFtIC0gb25lIHNpbmsgcGFkIHdpbGwgYmUgcmVxdWVzdGVkLiBJdCBjYW4gYWxzbyBiZSB1c2VkIGluCisgICAgICBlbGVtZW50cyB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mIGlucHV0IG9yIG91dHB1dHMgcGFkcywgc3VjaCBhcyB0aGUKKyAgICAgIDxjbGFzc25hbWU+dGVlPC9jbGFzc25hbWU+IChtdWx0aS1vdXRwdXQpLCA8Y2xhc3NuYW1lPnN3aXRjaDwvY2xhc3NuYW1lPgorICAgICAgb3IgPGNsYXNzbmFtZT5hZ2dyZWdhdG9yPC9jbGFzc25hbWU+IChib3RoIG11bHRpLWlucHV0KSBlbGVtZW50cy4gQXQgdGhlCisgICAgICB0aW1lIG9mIHdyaXRpbmcgdGhpcywgaXQgaXMgdW5jbGVhciB0byBtZSB3aG8gaXMgcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nCisgICAgICB1cCB0aGUgY3JlYXRlZCBwYWQgYW5kIGhvdyBvciB3aGVuIHRoYXQgc2hvdWxkIGJlIGRvbmUuIEJlbG93IGlzIGEgc2ltcGxlCisgICAgICBleGFtcGxlIG9mIGFuIGFnZ3JlZ2F0b3IgYmFzZWQgb24gcmVxdWVzdCBwYWRzLgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKK3N0YXRpYyBHc3RQYWQgKglnc3RfbXlfZmlsdGVyX3JlcXVlc3RfbmV3X3BhZAkoR3N0RWxlbWVudCAgICAgKmVsZW1lbnQsCisJCQkJCQkgR3N0UGFkVGVtcGxhdGUgKnRlbXBsLAorCQkJCQkJIGNvbnN0IGdjaGFyICAgICpuYW1lKTsKKworc3RhdGljIHZvaWQKK2dzdF9teV9maWx0ZXJfYmFzZV9pbml0IChHc3RNeUZpbHRlckNsYXNzICprbGFzcykKK3sKKyAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKKyAgc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfZmFjdG9yeSA9CisgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgKKyAgICAic2lua18lZCIsCisgICAgR1NUX1BBRF9TSU5LLAorICAgIEdTVF9QQURfUkVRVUVTVCwKKyAgICBHU1RfU1RBVElDX0NBUFMgKCJBTlkiKQorICApOworWy4uXQorICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlIChrbGFzcywKKwlnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgKCZzaW5rX2ZhY3RvcnkpKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9teV9maWx0ZXJfY2xhc3NfaW5pdCAoR3N0TXlGaWx0ZXJDbGFzcyAqa2xhc3MpCit7CisgIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7CitbLi5dCisgIGVsZW1lbnRfY2xhc3MtPnJlcXVlc3RfbmV3X3BhZCA9IGdzdF9teV9maWx0ZXJfcmVxdWVzdF9uZXdfcGFkOworfQorCitzdGF0aWMgR3N0UGFkICoKK2dzdF9teV9maWx0ZXJfcmVxdWVzdF9uZXdfcGFkIChHc3RFbGVtZW50ICAgICAqZWxlbWVudCwKKwkJCSAgICAgICBHc3RQYWRUZW1wbGF0ZSAqdGVtcGwsCisJCQkgICAgICAgY29uc3QgZ2NoYXIgICAgKm5hbWUpCit7CisgIEdzdFBhZCAqcGFkOworICBHc3RNeUZpbHRlcklucHV0Q29udGV4dCAqY29udGV4dDsKKworICBjb250ZXh0ID0gZ19uZXcwIChHc3RNeUZpbHRlcklucHV0Q29udGV4dCwgMSk7CisgIHBhZCA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHRlbXBsLCBuYW1lKTsKKyAgZ3N0X3BhZF9zZXRfZWxlbWVudF9wcml2YXRlIChwYWQsIGNvbnRleHQpOworCisgIC8qIG5vcm1hbGx5LCB5b3Ugd291bGQgc2V0IF9saW5rICgpIGFuZCBfZ2V0Y2FwcyAoKSBmdW5jdGlvbnMgaGVyZSAqLworCisgIGdzdF9lbGVtZW50X2FkZF9wYWQgKGVsZW1lbnQsIHBhZCk7CisKKyAgcmV0dXJuIHBhZDsKK30KK11dPgorICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDwvc2VjdDE+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL3B3Zy9hZHZhbmNlZC1zY2hlZHVsaW5nLnhtbCBiL2RvY3MvcHdnL2FkdmFuY2VkLXNjaGVkdWxpbmcueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNzkzMmMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3B3Zy9hZHZhbmNlZC1zY2hlZHVsaW5nLnhtbApAQCAtMCwwICsxLDQzNyBAQAorPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItc2NoZWR1bGluZyIgeHJlZmxhYmVsPSJEaWZmZXJlbnQgc2NoZWR1bGluZyBtb2RlcyI+CisgIDx0aXRsZT5EaWZmZXJlbnQgc2NoZWR1bGluZyBtb2RlczwvdGl0bGU+CisgIDxwYXJhPgorICAgIFNjaGVkdWxpbmcgaXMsIGluIHNob3J0LCBhIG1ldGhvZCBmb3IgbWFraW5nIHN1cmUgdGhhdCBldmVyeSBlbGVtZW50IGdldHMKKyAgICBjYWxsZWQgb25jZSBpbiBhIHdoaWxlIHRvIHByb2Nlc3MgZGF0YSBhbmQgcHJlcGFyZSBkYXRhIGZvciB0aGUgbmV4dAorICAgIGVsZW1lbnQuIExpa2V3aXNlLCBhIGtlcm5lbCBoYXMgYSBzY2hlZHVsZXIgZm9yIHByb2Nlc3NlcywgYW5kIHlvdXIKKyAgICBicmFpbiBpcyBhIHZlcnkgY29tcGxleCBzY2hlZHVsZXIgdG9vIGluIGEgd2F5LgorICAgIFJhbmRvbWx5IGNhbGxpbmcgZWxlbWVudHMnIGNoYWluIGZ1bmN0aW9ucyB3b24ndCBicmluZyB1cyBmYXIsIGhvd2V2ZXIsIHNvCisgICAgeW91J2xsIHVuZGVyc3RhbmQgdGhhdCB0aGUgc2NoZWR1bGVycyBpbiAmR1N0cmVhbWVyOyBhcmUgYSBiaXQgbW9yZSBjb21wbGV4CisgICAgdGhhbiB0aGlzLiBIb3dldmVyLCBhcyBhIHN0YXJ0LCBpdCdzIGEgbmljZSBwaWN0dXJlLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgIFNvIGZhciwgd2UgaGF2ZSBvbmx5IGRpc2N1c3NlZCA8ZnVuY3Rpb24+X2NoYWluICgpPC9mdW5jdGlvbj4tb3BlcmF0aW5nCisgICAgZWxlbWVudHMsIGkuZS4gZWxlbWVudHMgdGhhdCBoYXZlIGEgY2hhaW4tZnVuY3Rpb24gc2V0IG9uIHRoZWlyIHNpbmsgcGFkCisgICAgYW5kIHB1c2ggYnVmZmVycyBvbiB0aGVpciBzb3VyY2UgcGFkKHMpLiBQYWRzIChvciBlbGVtZW50cykgY2FuIGFsc28gb3BlcmF0ZQorICAgIGluIHR3byBvdGhlciBzY2hlZHVsaW5nIG1vZGVzLCBob3dldmVyLiBJbiB0aGlzIGNoYXB0ZXIsIHdlIHdpbGwgZGlzY3VzcworICAgIHdoYXQgdGhvc2Ugc2NoZWR1bGluZyBtb2RlcyBhcmUsIGhvdyB0aGV5IGNhbiBiZSBlbmFibGVkIGFuZCBpbiB3aGF0CisgICAgY2FzZXMgdGhleSBhcmUgdXNlZnVsLiBUaGUgb3RoZXIgdHdvIHNjaGVkdWxpbmcgbW9kZXMgYXJlIHJhbmRvbSBhY2Nlc3MKKyAgICAoPGZ1bmN0aW9uPl9nZXRyYW5nZSAoKTwvZnVuY3Rpb24+LWJhc2VkKSBvciB0YXNrLXJ1bm5lciAod2hpY2ggbWVhbnMKKyAgICB0aGF0IHRoaXMgZWxlbWVudCBpcyB0aGUgZHJpdmluZyBmb3JjZSBpbiB0aGUgcGlwZWxpbmUpIG1vZGUuCisgIDwvcGFyYT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tc2NoZWR1bGluZy1hY3RpdmF0aW9uIgorICAgICAgeHJlZmxhYmVsPSJUaGUgcGFkIGFjdGljYXRpb24gc3RhZ2UiPgorICAgIDx0aXRsZT5UaGUgcGFkIGFjdGl2YXRpb24gc3RhZ2U8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgVGhlIHN0YWdlIGluIHdoaWNoICZHU3RyZWFtZXI7IGRlY2lkZXMgaW4gd2hhdCBzY2hlZHVsaW5nIG1vZGUgdGhlCisgICAgICB2YXJpb3VzIGVsZW1lbnRzIHdpbGwgb3BlcmF0ZSwgaXMgY2FsbGVkIHRoZSBwYWQtYWN0aXZhdGlvbiBzdGFnZS4gSW4KKyAgICAgIHRoaXMgc3RhZ2UsICZHU3RyZWFtZXI7IHdpbGwgcXVlcnkgdGhlIHNjaGVkdWxpbmcgY2FwYWJpbGl0aWVzIChpLmUuCisgICAgICBpdCB3aWxsIHNlZSBpbiB3aGF0IG1vZGVzIGVhY2ggcGFydGljdWxhciBlbGVtZW50L3BhZCBjYW4gb3BlcmF0ZSkgYW5kCisgICAgICBkZWNpZGUgb24gdGhlIG9wdGltYWwgc2NoZWR1bGluZyBjb21wb3NpdGlvbiBmb3IgdGhlIHBpcGVsaW5lLiBOZXh0LAorICAgICAgZWFjaCBwYWQgd2lsbCBiZSBub3RpZmllZCBvZiB0aGUgc2NoZWR1bGluZyBtb2RlIHRoYXQgd2FzIGFzc2lnbmVkIHRvCisgICAgICBpdCwgYW5kIGFmdGVyIHRoYXQgdGhlIHBpcGVsaW5lIHdpbGwgc3RhcnQgcnVubmluZy4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBQYWRzIGNhbiBiZSBhc3NpZ25lZCBvbmUgb2YgdGhyZWUgbW9kZXMsIGVhY2ggbW9kZSBwdXR0aW5nIHNldmVyYWwKKyAgICAgIHByZXJlcXVpc2l0ZXMgb24gdGhlIHBhZHMuIFBhZHMgc2hvdWxkIGltcGxlbWVudCBhIG5vdGlmaWNhdGlvbgorICAgICAgZnVuY3Rpb24gKDxmdW5jdGlvbj5nc3RfcGFkX3NldF9hY3RpdmF0ZXB1bGxfZnVuY3Rpb24gKCk8L2Z1bmN0aW9uPiBhbmQKKyAgICAgIDxmdW5jdGlvbj5nc3RfcGFkX3NldF9hY3RpdmF0ZXB1c2hfZnVuY3Rpb24gKCk8L2Z1bmN0aW9uPikgdG8gYmUKKyAgICAgIG5vdGlmaWVkIG9mIHRoZSBzY2hlZHVsaW5nIG1vZGUgYXNzaWdubWVudC4gQWxzbywgc2lua3BhZHMgYXNzaWduZWQKKyAgICAgIHRvIGRvIHB1bGwtYmFzZWQgc2NoZWR1bGluZyBtb2RlIHNob3VsZCBzdGFydCBhbmQgc3RvcCB0aGVpciB0YXNrCisgICAgICBpbiB0aGlzIGZ1bmN0aW9uLgorICAgIDwvcGFyYT4KKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJZiBhbGwgcGFkcyBvZiBhbiBlbGVtZW50IGFyZSBhc3NpZ25lZCB0byBkbworICAgICAgICAgIDxxdW90ZT5wdXNoPC9xdW90ZT4tYmFzZWQgc2NoZWR1bGluZywgdGhlbiB0aGlzIG1lYW5zIHRoYXQgZGF0YQorICAgICAgICAgIHdpbGwgYmUgcHVzaGVkIGJ5IHVwc3RyZWFtIGVsZW1lbnRzIHRvIHRoaXMgZWxlbWVudCB1c2luZyB0aGUKKyAgICAgICAgICBzaW5rcGFkcyA8ZnVuY3Rpb24+X2NoYWluICgpPC9mdW5jdGlvbj4tZnVuY3Rpb24uIFByZXJlcXVpc2l0ZXMKKyAgICAgICAgICBmb3IgdGhpcyBzY2hlZHVsaW5nIG1vZGUgYXJlIHRoYXQgYSBjaGFpbi1mdW5jdGlvbiB3YXMgc2V0IGZvcgorICAgICAgICAgIGVhY2ggc2lua3BhZCB1c2luZzxmdW5jdGlvbj5nc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoKTwvZnVuY3Rpb24+CisgICAgICAgICAgYW5kIHRoYXQgYWxsIGRvd25zdHJlYW0gZWxlbWVudHMgb3BlcmF0ZSBpbiB0aGUgc2FtZSBtb2RlLiBQYWRzIGFyZQorICAgICAgICAgIGFzc2lnbmVkIHRvIGRvIHB1c2gtYmFzZWQgc2NoZWR1bGluZyBpbiBzaW5rLXRvLXNvdXJjZSBlbGVtZW50CisgICAgICAgICAgb3JkZXIsIGFuZCB3aXRoaW4gYW4gZWxlbWVudCBmaXJzdCBzb3VyY2VwYWRzIGFuZCB0aGVuIHNpbmtwYWRzLgorICAgICAgICAgIFNpbmsgZWxlbWVudHMgY2FuIG9wZXJhdGUgaW4gdGhpcyBtb2RlIGlmIHRoZWlyIHNpbmtwYWQgaXMgYWN0aXZhdGVkCisgICAgICAgICAgZm9yIHB1c2gtYmFzZWQgc2NoZWR1bGluZy4gU291cmNlIGVsZW1lbnRzIGNhbm5vdCBiZSBjaGFpbi1iYXNlZC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgc2lua3BhZHMgY2FuIGJlIHRoZSBkcml2aW5nIGZvcmNlIGJlaGluZCBhIHBpcGVsaW5lCisgICAgICAgICAgYnkgb3BlcmF0aW5nIGluIDxxdW90ZT5wdWxsPC9xdW90ZT4tYmFzZWQgbW9kZSwgd2hpbGUgdGhlIHNvdXJjZXBhZHMKKyAgICAgICAgICBvZiB0aGUgZWxlbWVudCBzdGlsbCBvcGVyYXRlIGluIHB1c2gtYmFzZWQgbW9kZS4gSW4gb3JkZXIgdG8gYmUgdGhlCisgICAgICAgICAgZHJpdmluZyBmb3JjZSwgdGhvc2UgcGFkcyBzdGFydCBhIDxjbGFzc25hbWU+R3N0VGFzazwvY2xhc3NuYW1lPgorICAgICAgICAgIHdoZW4gdGhleSBhcmUgYWN0aXZhdGVkLiBUaGlzIHRhc2sgaXMgYSB0aHJlYWQsIHdoaWNoCisgICAgICAgICAgd2lsbCBjYWxsIGEgZnVuY3Rpb24gc3BlY2lmaWVkIGJ5IHRoZSBlbGVtZW50LiBXaGVuIGNhbGxlZCwgdGhpcworICAgICAgICAgIGZ1bmN0aW9uIHdpbGwgaGF2ZSByYW5kb20gZGF0YSBhY2Nlc3MgKHRocm91Z2gKKyAgICAgICAgICA8ZnVuY3Rpb24+Z3N0X3BhZF9nZXRfcmFuZ2UgKCk8L2Z1bmN0aW9uPikgb3ZlciBhbGwgc2lua3BhZHMsIGFuZAorICAgICAgICAgIGNhbiBwdXNoIGRhdGEgb3ZlciB0aGUgc291cmNlcGFkcywgd2hpY2ggZWZmZWN0aXZlbHkgbWVhbnMgdGhhdAorICAgICAgICAgIHRoaXMgZWxlbWVudCBjb250cm9scyBkYXRhIGZsb3cgaW4gdGhlIHBpcGVsaW5lLiBQcmVyZXF1aXNpdGVzIGZvcgorICAgICAgICAgIHRoaXMgbW9kZSBhcmUgdGhhdCBhbGwgZG93bnN0cmVhbSBlbGVtZW50cyBjYW4gYWN0IGluIGNoYWluLWJhc2VkCisgICAgICAgICAgbW9kZSwgYW5kIHRoYXQgYWxsIHVwc3RyZWFtIGVsZW1lbnRzIGFsbG93IHJhbmRvbSBhY2Nlc3MgKHNlZSBiZWxvdykuCisgICAgICAgICAgU291cmNlIGVsZW1lbnRzIGNhbiBiZSB0b2xkIHRvIGFjdCBpbiB0aGlzIG1vZGUgaWYgdGhlaXIgc291cmNlcGFkcworICAgICAgICAgIGFyZSBhY3RpdmF0ZWQgaW4gcHVzaC1iYXNlZCBmYXNoaW9uLiBTaW5rIGVsZW1lbnRzIGNhbiBiZSB0b2xkIHRvCisgICAgICAgICAgYWN0IGluIHRoaXMgbW9kZSB3aGVuIHRoZWlyIHNpbmtwYWRzIGFyZSBhY3RpdmF0ZWQgaW4gcHVsbC1tb2RlLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBsYXN0bHksIGFsbCBwYWRzIGluIGFuIGVsZW1lbnQgY2FuIGJlIGFzc2lnbmVkIHRvIGFjdCBpbiBwdWxsLW1vZGUuCisgICAgICAgICAgdG9vLiBIb3dldmVyLCBjb250cmFyeSB0byB0aGUgYWJvdmUsIHRoaXMgZG9lcyBub3QgbWVhbiB0aGF0IHRoZXkKKyAgICAgICAgICBzdGFydCBhIHRhc2sgb24gdGhlaXIgb3duLiBSYXRoZXIsIGl0IG1lYW5zIHRoYXQgdGhleSBhcmUgcHVsbAorICAgICAgICAgIHNsYXZlIGZvciB0aGUgZG93bnN0cmVhbSBlbGVtZW50LCBhbmQgaGF2ZSB0byBwcm92aWRlIHJhbmRvbSBkYXRhCisgICAgICAgICAgYWNjZXNzIHRvIGl0IGZyb20gdGhlaXIgPGZ1bmN0aW9uPl9nZXRfcmFuZ2UgKCk8L2Z1bmN0aW9uPi1mdW5jdGlvbi4KKyAgICAgICAgICBSZXF1aXJlbWVudHMgYXJlIHRoYXQgdGhlIGEgPGZ1bmN0aW9uPl9nZXRfcmFuZ2UKKyAgICAgICAgICAoKTwvZnVuY3Rpb24+LWZ1bmN0aW9uIHdhcyBzZXQgb24gdGhpcyBwYWQgdXNpbmcgdGhlIGZ1bmN0aW9uCisgICAgICAgICAgPGZ1bmN0aW9uPmdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uICgpPC9mdW5jdGlvbj4uIEFsc28sIGlmCisgICAgICAgICAgdGhlIGVsZW1lbnQgaGFzIGFueSBzaW5rcGFkcywgYWxsIHRob3NlIHBhZHMgKGFuZCB0aGVyZWJ5IHRoZWlyCisgICAgICAgICAgcGVlcnMpIG5lZWQgdG8gb3BlcmF0ZSBpbiByYW5kb20gYWNjZXNzIG1vZGUsIHRvby4gTm90ZSB0aGF0IHRoZQorICAgICAgICAgIGVsZW1lbnQgaXMgc3VwcG9zZWQgdG8gYWN0aXZhdGUgdGhvc2UgZWxlbWVudHMgaXRzZWxmISAmR1N0cmVhbWVyOworICAgICAgICAgIHdpbGwgbm90IGRvIHRoYXQgZm9yIHlvdS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8cGFyYT4KKyAgICAgIEluIHRoZSBuZXh0IHR3byBzZWN0aW9ucywgd2Ugd2lsbCBnbyBjbG9zZXIgaW50byBwdWxsLWJhc2VkIHNjaGVkdWxpbmcKKyAgICAgIChlbGVtZW50cy9wYWRzIGRyaXZpbmcgdGhlIHBpcGVsaW5lLCBhbmQgZWxlbWVudHMvcGFkcyBwcm92aWRpbmcgcmFuZG9tCisgICAgICBhY2Nlc3MpLCBhbmQgc29tZSBzcGVjaWZpYyB1c2UgY2FzZXMgd2lsbCBiZSBnaXZlbi4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLXNjaGVkdWxpbmctbG9vcCIgeHJlZmxhYmVsPSJQYWRzIGRyaXZpbmcgdGhlIHBpcGVsaW5lIj4KKyAgICA8dGl0bGU+UGFkcyBkcml2aW5nIHRoZSBwaXBlbGluZTwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBTaW5rcGFkcyBhc3NpZ25lZCB0byBvcGVyYXRlIGluIHB1bGwtYmFzZWQgbW9kZSwgd2hpbGUgbm9uZSBvZiBpdHMKKyAgICAgIHNvdXJjZXBhZHMgb3BlcmF0ZSBpbiBwdWxsLWJhc2VkIG1vZGUgKG9yIGl0IGhhcyBubyBzb3VyY2VwYWRzKSwgY2FuCisgICAgICBzdGFydCBhIHRhc2sgdGhhdCB3aWxsIGRyaXZlIHRoZSBwaXBlbGluZSBkYXRhIGZsb3cuIFdpdGhpbiB0aGlzCisgICAgICBmdW5jdGlvbiwgdGhvc2UgZWxlbWVudHMgaGF2ZSByYW5kb20gYWNjZXNzIG92ZXIgYWxsIG9mIHRoZWlyIHNpbmtwYWRzLAorICAgICAgYW5kIHB1c2ggZGF0YSBvdmVyIHRoZWlyIHNvdXJjZXBhZHMuIFRoaXMgY2FuIGNvbWUgaW4gdXNlZnVsIGZvcgorICAgICAgc2V2ZXJhbCBkaWZmZXJlbnQga2luZHMgb2YgZWxlbWVudHM6CisgICAgPC9wYXJhPgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIERlbXV4ZXJzLCBwYXJzZXJzIGFuZCBjZXJ0YWluIGtpbmRzIG9mIGRlY29kZXJzIHdoZXJlIGRhdGEgY29tZXMKKyAgICAgICAgICBpbiB1bnBhcnNlZCAoc3VjaCBhcyBNUEVHLWF1ZGlvIG9yIHZpZGVvIHN0cmVhbXMpLCBzaW5jZSB0aG9zZSB3aWxsCisgICAgICAgICAgcHJlZmVyIGJ5dGUtZXhhY3QgKHJhbmRvbSkgYWNjZXNzIGZyb20gdGhlaXIgaW5wdXQuIElmIHBvc3NpYmxlLAorICAgICAgICAgIGhvd2V2ZXIsIHN1Y2ggZWxlbWVudHMgc2hvdWxkIGJlIHByZXBhcmVkIHRvIG9wZXJhdGUgaW4gY2hhaW4tYmFzZWQKKyAgICAgICAgICBtb2RlLCB0b28uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIENlcnRhaW4ga2luZCBvZiBhdWRpbyBvdXRwdXRzLCB3aGljaCByZXF1aXJlIGNvbnRyb2wgb3ZlciB0aGVpcgorICAgICAgICAgIGlucHV0IGRhdGEgZmxvdywgc3VjaCBhcyB0aGUgSmFjayBzb3VuZCBzZXJ2ZXIuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPHBhcmE+CisgICAgICBJbiBvcmRlciB0byBzdGFydCB0aGlzIHRhc2ssIHlvdSB3aWxsIG5lZWQgdG8gY3JlYXRlIGl0IGluIHRoZQorICAgICAgYWN0aXZhdGlvbiBmdW5jdGlvbi4KKyAgICA8L3BhcmE+CisgICAgPHByb2dyYW1saXN0aW5nPjwhLS0gZXhhbXBsZS1iZWdpbiB0YXNrLmMgYSAtLT4KKyNpbmNsdWRlICJmaWx0ZXIuaCIKKyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKKworc3RhdGljIGdib29sZWFuCWdzdF9teV9maWx0ZXJfYWN0aXZhdGUJKEdzdFBhZCAgICAgICogcGFkKTsKK3N0YXRpYyBnYm9vbGVhbglnc3RfbXlfZmlsdGVyX2FjdGl2YXRlX3B1bGwgKEdzdFBhZCAgKiBwYWQsCisJCQkJCSBnYm9vbGVhbiAgICAgIGFjdGl2ZSk7CitzdGF0aWMgdm9pZAlnc3RfbXlfZmlsdGVyX2xvb3AJKEdzdE15RmlsdGVyICogZmlsdGVyKTsKKworR1NUX0JPSUxFUlBMQVRFIChHc3RNeUZpbHRlciwgZ3N0X215X2ZpbHRlciwgR3N0RWxlbWVudCwgR1NUX1RZUEVfRUxFTUVOVCk7Cis8IS0tIGV4YW1wbGUtZW5kIHRhc2suYyBhIC0tPgorPCEtLSBleGFtcGxlLWJlZ2luIHRhc2suYyBiIC0tPjwhLS0KK3N0YXRpYyBnYm9vbGVhbglnc3RfbXlfZmlsdGVyX3NldGNhcHMJKEdzdFBhZCAgKnBhZCwKKwkJCQkJIEdzdENhcHMgKmNhcHMpOworc3RhdGljIEdzdENhcHMgKmdzdF9teV9maWx0ZXJfZ2V0Y2FwcwkoR3N0UGFkICAqcGFkKTsKKworc3RhdGljIHZvaWQKK2dzdF9teV9maWx0ZXJfYmFzZV9pbml0IChncG9pbnRlciBrbGFzcykKK3sKKyAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKKyAgc3RhdGljIEdzdEVsZW1lbnREZXRhaWxzIG15X2ZpbHRlcl9kZXRhaWxzID0geworICAgICJBbiBleGFtcGxlIHBsdWdpbiIsCisgICAgIkV4YW1wbGUvRmlyc3RFeGFtcGxlIiwKKyAgICAiU2hvd3MgdGhlIGJhc2ljIHN0cnVjdHVyZSBvZiBhIHBsdWdpbiIsCisgICAgInlvdXIgbmFtZSA8eW91ci5uYW1lQHlvdXIuaXNwPiIKKyAgfTsKKyAgc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfZmFjdG9yeSA9CisgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgKKyAgICAic2luayIsCisgICAgR1NUX1BBRF9TSU5LLAorICAgIEdTVF9QQURfQUxXQVlTLAorICAgIEdTVF9TVEFUSUNfQ0FQUyAoIkFOWSIpCisgICk7CisgIHN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfZmFjdG9yeSA9CisgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgKKyAgICAic3JjIiwKKyAgICBHU1RfUEFEX1NSQywKKyAgICBHU1RfUEFEX0FMV0FZUywKKyAgICBHU1RfU1RBVElDX0NBUFMgKCJBTlkiKQorICApOworCisgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzIChlbGVtZW50X2NsYXNzLCAmbXlfZmlsdGVyX2RldGFpbHMpOworICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAorICAgICAgICBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgKCZzcmNfZmFjdG9yeSkpOworICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAorICAgICAgICBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgKCZzaW5rX2ZhY3RvcnkpKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9teV9maWx0ZXJfY2xhc3NfaW5pdCAoR3N0TXlGaWx0ZXJDbGFzcyAqIGtsYXNzKQoreworfQorLS0+PCEtLSBleGFtcGxlLWJlZ2luIHRhc2suYyBiIC0tPgorPCEtLSBleGFtcGxlLWJlZ2luIHRhc2suYyBjIC0tPgorc3RhdGljIHZvaWQKK2dzdF9teV9maWx0ZXJfaW5pdCAoR3N0TXlGaWx0ZXIgKiBmaWx0ZXIpCit7Cis8IS0tIGV4YW1wbGUtZW5kIHRhc2suYyBjIC0tPgorWy4uXTwhLS0gZXhhbXBsZS1iZWdpbiB0YXNrLmMgZCAtLT48IS0tCisgIEdzdEVsZW1lbnRDbGFzcyAqa2xhc3MgPSBHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKGZpbHRlcik7CisKKyAgZmlsdGVyLSZndDtzaW5rcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoCisgICAgICAgIGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGtsYXNzLCAic2luayIpLCAic2luayIpOworICBnc3RfcGFkX3NldF9zZXRjYXBzX2Z1bmN0aW9uIChmaWx0ZXItJmd0O3NpbmtwYWQsIGdzdF9teV9maWx0ZXJfc2V0Y2Fwcyk7CisgIGdzdF9wYWRfc2V0X2dldGNhcHNfZnVuY3Rpb24gKGZpbHRlci0mZ3Q7c2lua3BhZCwgZ3N0X215X2ZpbHRlcl9nZXRjYXBzKTsKKy0tPjwhLS0gZXhhbXBsZS1lbmQgdGFzay5jIGQgLS0+Cis8IS0tIGV4YW1wbGUtYmVnaW4gdGFzay5jIGUgLS0+CisgIGdzdF9wYWRfc2V0X2FjdGl2YXRlX2Z1bmN0aW9uIChmaWx0ZXItJmd0O3NpbmtwYWQsIGdzdF9teV9maWx0ZXJfYWN0aXZhdGUpOworICBnc3RfcGFkX3NldF9hY3RpdmF0ZXB1bGxfZnVuY3Rpb24gKGZpbHRlci0mZ3Q7c2lua3BhZCwKKyAgICAgIGdzdF9teV9maWx0ZXJfYWN0aXZhdGVfcHVsbCk7Cis8IS0tIGV4YW1wbGUtZW5kIHRhc2suYyBlIC0tPgorPCEtLSBleGFtcGxlLWJlZ2luIHRhc2suYyBmIC0tPjwhLS0KKyAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKGZpbHRlciksIGZpbHRlci0mZ3Q7c2lua3BhZCk7CisKKyAgZmlsdGVyLSZndDtzcmNwYWQgPSBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlICgKKyAgICAgICAgZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoa2xhc3MsICJzcmMiKSwgInNyYyIpOworICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoZmlsdGVyKSwgZmlsdGVyLSZndDtzcmNwYWQpOworLS0+PCEtLSBleGFtcGxlLWVuZCB0YXNrLmMgZiAtLT4KK1suLl08IS0tIGV4YW1wbGUtYmVnaW4gdGFzay5jIGcgLS0+Cit9Cis8IS0tIGV4YW1wbGUtZW5kIHRhc2suYyBnIC0tPgorWy4uXTwhLS0gZXhhbXBsZS1iZWdpbiB0YXNrLmMgaCAtLT48IS0tCisjaW5jbHVkZSAiY2Fwcy5mdW5jIgorLS0+PCEtLSBleGFtcGxlLWVuZCB0YXNrLmMgaCAtLT4KKzwhLS0gZXhhbXBsZS1iZWdpbiB0YXNrLmMgaSAtLT4KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X215X2ZpbHRlcl9hY3RpdmF0ZSAoR3N0UGFkICogcGFkKQoreworICBpZiAoZ3N0X3BhZF9jaGVja19wdWxsX3JhbmdlIChwYWQpKSB7CisgICAgcmV0dXJuIGdzdF9wYWRfYWN0aXZhdGVfcHVsbCAocGFkLCBUUlVFKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworc3RhdGljIGdib29sZWFuCitnc3RfbXlfZmlsdGVyX2FjdGl2YXRlX3B1bGwgKEdzdFBhZCAgKnBhZCwKKwkJCSAgICAgZ2Jvb2xlYW4gYWN0aXZlKQoreworICBHc3RNeUZpbHRlciAqZmlsdGVyID0gR1NUX01ZX0ZJTFRFUiAoR1NUX09CSkVDVF9QQVJFTlQgKHBhZCkpOworCisgIGlmIChhY3RpdmUpIHsKKyAgICBmaWx0ZXItPm9mZnNldCA9IDA7CisgICAgcmV0dXJuIGdzdF9wYWRfc3RhcnRfdGFzayAocGFkLAorICAgICAgICAoR3N0VGFza0Z1bmN0aW9uKSBnc3RfbXlfZmlsdGVyX2xvb3AsIGZpbHRlcik7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIGdzdF9wYWRfc3RvcF90YXNrIChwYWQpOworICB9Cit9CisgICAgPCEtLSBleGFtcGxlLWVuZCB0YXNrLmMgaSAtLT48L3Byb2dyYW1saXN0aW5nPgorICAgIDxwYXJhPgorICAgICAgT25jZSBzdGFydGVkLCB5b3VyIHRhc2sgaGFzIGZ1bGwgY29udHJvbCBvdmVyIGlucHV0IGFuZCBvdXRwdXQuIFRoZQorICAgICAgbW9zdCBzaW1wbGUgY2FzZSBvZiBhIHRhc2sgZnVuY3Rpb24gaXMgb25lIHRoYXQgcmVhZHMgaW5wdXQgYW5kIHB1c2hlcworICAgICAgdGhhdCBvdmVyIGl0cyBzb3VyY2UgcGFkLiBJdCdzIG5vdCBhbGwgdGhhdCB1c2VmdWwsIGJ1dCBwcm92aWRlcyBzb21lCisgICAgICBtb3JlIGZsZXhpYmlsaXR5IHRoYW4gdGhlIG9sZCBjaGFpbi1iYXNlZCBjYXNlIHRoYXQgd2UndmUgYmVlbiBsb29raW5nCisgICAgICBhdCBzbyBmYXIuCisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz48IS0tIGV4YW1wbGUtYmVnaW4gdGFzay5jIGogLS0+CisjZGVmaW5lIEJMT0NLU0laRSAyMDQ4CisKK3N0YXRpYyB2b2lkCitnc3RfbXlfZmlsdGVyX2xvb3AgKEdzdE15RmlsdGVyICogZmlsdGVyKQoreworICBHc3RGbG93UmV0dXJuIHJldDsKKyAgZ3VpbnQ2NCBsZW47CisgIEdzdEZvcm1hdCBmbXQgPSBHU1RfRk9STUFUX0JZVEVTOworICBHc3RCdWZmZXIgKmJ1ZiA9IE5VTEw7CisKKyAgaWYgKCFnc3RfcGFkX3F1ZXJ5X2R1cmF0aW9uIChmaWx0ZXItJmd0O3NpbmtwYWQsICZhbXA7Zm10LCAmYW1wO2xlbikpIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChmaWx0ZXIsICJmYWlsZWQgdG8gcXVlcnkgZHVyYXRpb24sIHBhdXNpbmciKTsKKyAgICBnb3RvIHN0b3A7CisgIH0KKworICAgaWYgKGZpbHRlci0mZ3Q7b2Zmc2V0ID49IGxlbikgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZpbHRlciwgImF0IGVuZCBvZiBpbnB1dCwgc2VuZGluZyBFT1MsIHBhdXNpbmciKTsKKyAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKGZpbHRlci0mZ3Q7c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7CisgICAgZ290byBzdG9wOworICB9CisKKyAgLyogbm93LCByZWFkIEJMT0NLU0laRSBieXRlcyBmcm9tIGJ5dGUgb2Zmc2V0IGZpbHRlci0mZ3Q7b2Zmc2V0ICovCisgIHJldCA9IGdzdF9wYWRfcHVsbF9yYW5nZSAoZmlsdGVyLSZndDtzaW5rcGFkLCBmaWx0ZXItJmd0O29mZnNldCwKKyAgICAgIEJMT0NLU0laRSwgJmFtcDtidWYpOworCisgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChmaWx0ZXIsICJwdWxsX3JhbmdlIGZhaWxlZDogJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7CisgICAgZ290byBzdG9wOworICB9CisKKyAgLyogbm93IHB1c2ggYnVmZmVyIGRvd25zdHJlYW0gKi8KKyAgcmV0ID0gZ3N0X3BhZF9wdXNoIChmaWx0ZXItJmd0O3NyY3BhZCwgYnVmKTsKKworICBidWYgPSBOVUxMOyAvKiBnc3RfcGFkX3B1c2goKSB0b29rIG93bmVyc2hpcCBvZiBidWZmZXIgKi8KKworICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoZmlsdGVyLCAicGFkX3B1c2ggZmFpbGVkOiAlcyIsIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKKyAgICBnb3RvIHN0b3A7CisgIH0KKworICAvKiBldmVyeXRoaW5nIGlzIGZpbmUsIGluY3JlYXNlIG9mZnNldCBhbmQgd2FpdCBmb3IgdXMgdG8gYmUgY2FsbGVkIGFnYWluICovCisgIGZpbHRlci0mZ3Q7b2Zmc2V0ICs9IEJMT0NLU0laRTsKKyAgcmV0dXJuOworCitzdG9wOgorICBHU1RfREVCVUdfT0JKRUNUIChmaWx0ZXIsICJwYXVzaW5nIHRhc2siKTsKKyAgZ3N0X3BhZF9wYXVzZV90YXNrIChmaWx0ZXItJmd0O3NpbmtwYWQpOworfQorPCEtLSBleGFtcGxlLWVuZCB0YXNrLmMgaiAtLT4KKzwhLS0gZXhhbXBsZS1iZWdpbiB0YXNrLmMgayAtLT48IS0tCisjaW5jbHVkZSAicmVnaXN0ZXIuZnVuYyIKKyAgICAtLT48IS0tIGV4YW1wbGUtZW5kIHRhc2suYyBrIC0tPjwvcHJvZ3JhbWxpc3Rpbmc+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLXNjaGVkdWxpbmctcmFuZG9teHMiIHhyZWZsYWJlbD0iUHJvdmlkaW5nIHJhbmRvbSBhY2Nlc3MiPgorICAgIDx0aXRsZT5Qcm92aWRpbmcgcmFuZG9tIGFjY2VzczwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBJbiB0aGUgcHJldmlvdXMgc2VjdGlvbiwgd2UgaGF2ZSB0YWxrZWQgYWJvdXQgaG93IGVsZW1lbnRzIChvciBwYWRzKQorICAgICAgdGhhdCBhcmUgYXNzaWduZWQgdG8gZHJpdmUgdGhlIHBpcGVsaW5lIHVzaW5nIHRoZWlyIG93biB0YXNrLCBoYXZlCisgICAgICByYW5kb20gYWNjZXNzIG92ZXIgdGhlaXIgc2lua3BhZHMuIFRoaXMgbWVhbnMgdGhhdCBhbGwgZWxlbWVudHMgbGlua2VkCisgICAgICB0byB0aG9zZSBwYWRzIChyZWN1cnNpdmVseSkgbmVlZCB0byBwcm92aWRlIHJhbmRvbSBhY2Nlc3MgZnVuY3Rpb25zLgorICAgICAgUmVxdWVzdGluZyByYW5kb20gYWNjZXNzIGlzIGRvbmUgdXNpbmcgdGhlIGZ1bmN0aW9uCisgICAgICA8ZnVuY3Rpb24+Z3N0X3BhZF9wdWxsX3JhbmdlICgpPC9mdW5jdGlvbj4sIHdoaWNoIHJlcXVlc3RzIGEgYnVmZmVyIG9mCisgICAgICBhIHNwZWNpZmllZCBzaXplIGFuZCBvZmZzZXQuIFNvdXJjZSBwYWRzIGltcGxlbWVudGluZyBhbmQgYXNzaWduZWQgdG8KKyAgICAgIGRvIHJhbmRvbSBhY2Nlc3Mgd2lsbCBoYXZlIGEgPGZ1bmN0aW9uPl9nZXRfcmFuZ2UgKCk8L2Z1bmN0aW9uPi1mdW5jdGlvbgorICAgICAgc2V0IHVzaW5nIDxmdW5jdGlvbj5nc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbiAoKTwvZnVuY3Rpb24+LCBhbmQKKyAgICAgIHRoYXQgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgcGVlciBwYWQgcmVxdWVzdHMgc29tZSBkYXRhLiBUaGUKKyAgICAgIGVsZW1lbnQgaXMgdGhlbiByZXNwb25zaWJsZSBmb3Igc2Vla2luZyB0byB0aGUgcmlnaHQgb2Zmc2V0IGFuZAorICAgICAgcHJvdmlkaW5nIHRoZSByZXF1ZXN0ZWQgZGF0YS4gU2V2ZXJhbCBlbGVtZW50cyBjYW4gaW1wbGVtZW50IHJhbmRvbQorICAgICAgYWNjZXNzOgorICAgIDwvcGFyYT4KKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBEYXRhIHNvdXJjZXMsIHN1Y2ggYXMgYSBmaWxlIHNvdXJjZSwgdGhhdCBjYW4gcHJvdmlkZSBkYXRhIGZyb20gYW55CisgICAgICAgICAgb2Zmc2V0IHdpdGggcmVhc29uYWJsZSBsb3cgbGF0ZW5jeS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgRmlsdGVycyB0aGF0IHdvdWxkIGxpa2UgdG8gcHJvdmlkZSBhIHB1bGwtYmFzZWQtbGlrZSBzY2hlZHVsaW5nCisgICAgICAgICAgbW9kZSBvdmVyIHRoZSB3aG9sZSBwaXBlbGluZS4gTm90ZSB0aGF0IGVsZW1lbnRzIGFzc2lnbmVkIHRvIGRvCisgICAgICAgICAgcmFuZG9tIGFjY2Vzcy1iYXNlZCBzY2hlZHVsaW5nIGFyZSB0aGVtc2VsdmVzIHJlc3BvbnNpYmxlIGZvcgorICAgICAgICAgIGFzc2lnbmluZyB0aGlzIHNjaGVkdWxpbmcgbW9kZSB0byB0aGVpciB1cHN0cmVhbSBwZWVycyEgJkdTdHJlYW1lcjsKKyAgICAgICAgICB3aWxsIG5vdCBkbyB0aGF0IGZvciB5b3UuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFBhcnNlcnMgd2hvIGNhbiBlYXNpbHkgcHJvdmlkZSB0aGlzIGJ5IHNraXBwaW5nIGEgc21hbGwgcGFydCBvZgorICAgICAgICAgIHRoZWlyIGlucHV0IGFuZCBhcmUgdGh1cyBlc3NlbnRpYWxseSAiZm9yd2FyZGluZyIgcmFuZG9tIGFjY2VzcworICAgICAgICAgIHJlcXVlc3RzIGxpdGVyYWxseSB3aXRob3V0IGFueSBvd24gcHJvY2Vzc2luZyBpbnZvbHZlZC4gRXhhbXBsZXMKKyAgICAgICAgICBpbmNsdWRlIHRhZyByZWFkZXJzIChlLmcuIElEMykgb3Igc2luZ2xlIG91dHB1dCBwYXJzZXJzLCBzdWNoIGFzCisgICAgICAgICAgYSBXQVZFIHBhcnNlci4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSB3aWxsIHNob3cgaG93IGEgPGZ1bmN0aW9uPl9nZXRfcmFuZ2UKKyAgICAgICgpPC9mdW5jdGlvbj4tZnVuY3Rpb24gY2FuIGJlIGltcGxlbWVudGVkIGluIGEgc291cmNlIGVsZW1lbnQ6CisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz48IS0tIGV4YW1wbGUtYmVnaW4gcmFuZ2UuYyBhIC0tPgorI2luY2x1ZGUgImZpbHRlci5oIgorc3RhdGljIEdzdEZsb3dSZXR1cm4KKwkJZ3N0X215X2ZpbHRlcl9nZXRfcmFuZ2UJKEdzdFBhZCAgICAgKiBwYWQsCisJCQkJCSBndWludDY0ICAgICAgb2Zmc2V0LAorCQkJCQkgZ3VpbnQgICAgICAgIGxlbmd0aCwKKwkJCQkJIEdzdEJ1ZmZlciAqKiBidWYpOworCitHU1RfQk9JTEVSUExBVEUgKEdzdE15RmlsdGVyLCBnc3RfbXlfZmlsdGVyLCBHc3RFbGVtZW50LCBHU1RfVFlQRV9FTEVNRU5UKTsKKzwhLS0gZXhhbXBsZS1lbmQgcmFuZ2UuYyBhIC0tPgorPCEtLSBleGFtcGxlLWJlZ2luIHJhbmdlLmMgYiAtLT48IS0tCitzdGF0aWMgdm9pZAorZ3N0X215X2ZpbHRlcl9iYXNlX2luaXQgKGdwb2ludGVyIGtsYXNzKQoreworICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOworICBzdGF0aWMgR3N0RWxlbWVudERldGFpbHMgbXlfZmlsdGVyX2RldGFpbHMgPSB7CisgICAgIkFuIGV4YW1wbGUgcGx1Z2luIiwKKyAgICAiRXhhbXBsZS9GaXJzdEV4YW1wbGUiLAorICAgICJTaG93cyB0aGUgYmFzaWMgc3RydWN0dXJlIG9mIGEgcGx1Z2luIiwKKyAgICAieW91ciBuYW1lIDx5b3VyLm5hbWVAeW91ci5pc3A+IgorICB9OworICBzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjX2ZhY3RvcnkgPQorICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoCisgICAgInNyYyIsCisgICAgR1NUX1BBRF9TUkMsCisgICAgR1NUX1BBRF9BTFdBWVMsCisgICAgR1NUX1NUQVRJQ19DQVBTICgiQU5ZIikKKyAgKTsKKworICBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlscyAoZWxlbWVudF9jbGFzcywgJm15X2ZpbHRlcl9kZXRhaWxzKTsKKyAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKKyAgICAgICAgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0ICgmc3JjX2ZhY3RvcnkpKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9teV9maWx0ZXJfY2xhc3NfaW5pdCAoR3N0TXlGaWx0ZXJDbGFzcyAqIGtsYXNzKQoreworfQorLS0+PCEtLSBleGFtcGxlLWJlZ2luIHJhbmdlLmMgYiAtLT4KKzwhLS0gZXhhbXBsZS1iZWdpbiByYW5nZS5jIGMgLS0+CitzdGF0aWMgdm9pZAorZ3N0X215X2ZpbHRlcl9pbml0IChHc3RNeUZpbHRlciAqIGZpbHRlcikKK3sKKyAgR3N0RWxlbWVudENsYXNzICprbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAoZmlsdGVyKTsKKworICBmaWx0ZXItJmd0O3NyY3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKAorICAgICAgICBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChrbGFzcywgInNyYyIpLCAic3JjIik7CisgIGdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uIChmaWx0ZXItJmd0O3NyY3BhZCwKKyAgICAgIGdzdF9teV9maWx0ZXJfZ2V0X3JhbmdlKTsKKyAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKGZpbHRlciksIGZpbHRlci0mZ3Q7c3JjcGFkKTsKKzwhLS0gZXhhbXBsZS1lbmQgcmFuZ2UuYyBjIC0tPgorWy4uXTwhLS0gZXhhbXBsZS1iZWdpbiByYW5nZS5jIGQgLS0+Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X215X2ZpbHRlcl9nZXRfcmFuZ2UgKEdzdFBhZCAgICAgKiBwYWQsCisJCQkgZ3VpbnQ2NCAgICAgIG9mZnNldCwKKwkJCSBndWludCAgICAgICAgbGVuZ3RoLAorCQkJIEdzdEJ1ZmZlciAqKiBidWYpCit7Cis8IS0tIGV4YW1wbGUtZW5kIHJhbmdlLmMgZCAtLT4KKyAgR3N0TXlGaWx0ZXIgKmZpbHRlciA9IEdTVF9NWV9GSUxURVIgKEdTVF9PQkpFQ1RfUEFSRU5UIChwYWQpKTsKKworICBbLi4gaGVyZSwgeW91IHdvdWxkIGZpbGwgKmJ1ZiAuLl0KKzwhLS0gZXhhbXBsZS1iZWdpbiByYW5nZS5jIGUgLS0+CisgIHJldHVybiBHU1RfRkxPV19PSzsKK30KKzwhLS0gZXhhbXBsZS1lbmQgcmFuZ2UuYyBlIC0tPgorPCEtLSBleGFtcGxlLWJlZ2luIHJhbmdlLmMgZiAtLT48IS0tCisjaW5jbHVkZSAicmVnaXN0ZXIuZnVuYyIKKyAgICAtLT48IS0tIGV4YW1wbGUtZW5kIHJhbmdlLmMgZiAtLT48L3Byb2dyYW1saXN0aW5nPgorICAgIDxwYXJhPgorICAgICAgSW4gcHJhY3RpY2UsIG1hbnkgZWxlbWVudHMgdGhhdCBjb3VsZCB0aGVvcmV0aWNhbGx5IGRvIHJhbmRvbSBhY2Nlc3MsCisgICAgICBtYXkgaW4gcHJhY3RpY2Ugb2Z0ZW4gYmUgYXNzaWduZWQgdG8gZG8gcHVzaC1iYXNlZCBzY2hlZHVsaW5nIGFueXdheSwKKyAgICAgIHNpbmNlIHRoZXJlIGlzIG5vIGRvd25zdHJlYW0gZWxlbWVudCBhYmxlIHRvIHN0YXJ0IGl0cyBvd24gdGFzay4KKyAgICAgIFRoZXJlZm9yZSwgaW4gcHJhY3RpY2UsIHRob3NlIGVsZW1lbnRzIHNob3VsZCBpbXBsZW1lbnQgYm90aCBhCisgICAgICA8ZnVuY3Rpb24+X2dldF9yYW5nZSAoKTwvZnVuY3Rpb24+LWZ1bmN0aW9uIGFuZCBhIDxmdW5jdGlvbj5fY2hhaW4KKyAgICAgICgpPC9mdW5jdGlvbj4tZnVuY3Rpb24gKGZvciBmaWx0ZXJzIGFuZCBwYXJzZXJzKSBvciBhIDxmdW5jdGlvbj5fZ2V0X3JhbmdlCisgICAgICAoKTwvZnVuY3Rpb24+LWZ1bmN0aW9uIGFuZCBiZSBwcmVwYXJlZCB0byBzdGFydCB0aGVpciBvd24gdGFzayBieQorICAgICAgcHJvdmlkaW5nIDxmdW5jdGlvbj5fYWN0aXZhdGVfKiAoKTwvZnVuY3Rpb24+LWZ1bmN0aW9ucyAoZm9yCisgICAgICBzb3VyY2UgZWxlbWVudHMpLCBzbyB0aGF0ICZHU3RyZWFtZXI7IGNhbiBkZWNpZGUgZm9yIHRoZSBvcHRpbWFsCisgICAgICBzY2hlZHVsaW5nIG1vZGUgYW5kIGhhdmUgaXQganVzdCB3b3JrIGZpbmUgaW4gcHJhY3RpY2UuCisgICAgPC9wYXJhPgorICA8L3NlY3QxPgorPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9wd2cvYWR2YW5jZWQtdGFnZ2luZy54bWwgYi9kb2NzL3B3Zy9hZHZhbmNlZC10YWdnaW5nLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzkxYzAxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wd2cvYWR2YW5jZWQtdGFnZ2luZy54bWwKQEAgLTAsMCArMSwyMzggQEAKKzxjaGFwdGVyIGlkPSJjaGFwdGVyLWFkdmFuY2VkLXRhZ2dpbmciPgorICA8dGl0bGU+VGFnZ2luZyAoTWV0YWRhdGEgYW5kIFN0cmVhbWluZm8pPC90aXRsZT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tdGFnZ2luZy1vdmVydmlldyIgeHJlZmxhYmVsPSJPdmVydmlldyI+CisgIDx0aXRsZT5PdmVydmlldzwvdGl0bGU+CisgIDxwYXJhPgorICAgIFRhZ3MgYXJlIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gYSBzdHJlYW0gdGhhdCBhcmUgbm90IHRoZSBjb250ZW50CisgICAgaXRzZWxmLCBidXQgdGhleSByYXRoZXIgPGVtcGhhc2lzPmRlc2NyaWJlPC9lbXBoYXNpcz4gdGhlIGNvbnRlbnQuIE1vc3QKKyAgICBtZWRpYSBjb250YWluZXIgZm9ybWF0cyBzdXBwb3J0IHRhZ2dpbmcgaW4gb25lIHdheSBvciBhbm90aGVyLiBPZ2cgdXNlcworICAgIFZvcmJpc0NvbW1lbnQgZm9yIHRoaXMsIE1QMyB1c2VzIElEMywgQVZJIGFuZCBXQVYgdXNlIFJJRkYncyBJTkZPIGxpc3QKKyAgICBjaHVuaywgZXRjLiBHU3RyZWFtZXIgcHJvdmlkZXMgYSBnZW5lcmFsIHdheSBmb3IgZWxlbWVudHMgdG8gcmVhZCB0YWdzIGZyb20KKyAgICB0aGUgc3RyZWFtIGFuZCBleHBvc2UgdGhpcyB0byB0aGUgdXNlci4gVGhlIHRhZ3MgKGF0IGxlYXN0IHRoZSBtZXRhZGF0YSkKKyAgICB3aWxsIGJlIHBhcnQgb2YgdGhlIHN0cmVhbSBpbnNpZGUgdGhlIHBpcGVsaW5lLiBUaGUgY29uc2VxdWVuY2Ugb2YgdGhpcyBpcworICAgIHRoYXQgdHJhbnNjb2Rpbmcgb2YgZmlsZXMgZnJvbSBvbmUgZm9ybWF0IHRvIGFub3RoZXIgd2lsbCBhdXRvbWF0aWNhbGx5CisgICAgcHJlc2VydmUgdGFncywgYXMgbG9uZyBhcyB0aGUgaW5wdXQgYW5kIG91dHB1dCBmb3JtYXQgZWxlbWVudHMgYm90aCBzdXBwb3J0CisgICAgdGFnZ2luZy4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICBUYWdzIGFyZSBzZXBhcmF0ZWQgaW4gdHdvIGNhdGVnb3JpZXMgaW4gR1N0cmVhbWVyLCBldmVuIHRob3VnaCBhcHBsaWNhdGlvbnMKKyAgICB3b24ndCBub3RpY2UgYW55dGhpbmcgb2YgdGhpcy4gVGhlIGZpcnN0IGFyZSBjYWxsZWQgPGVtcGhhc2lzPm1ldGFkYXRhPC9lbXBoYXNpcz4sCisgICAgdGhlIHNlY29uZCBhcmUgY2FsbGVkIDxlbXBoYXNpcz5zdHJlYW1pbmZvPC9lbXBoYXNpcz4uIE1ldGFkYXRhIGFyZSB0YWdzCisgICAgdGhhdCBkZXNjcmliZSB0aGUgbm9uLXRlY2huaWNhbCBwYXJ0cyBvZiBzdHJlYW0gY29udGVudC4gVGhleSBjYW4gYmUKKyAgICBjaGFuZ2VkIHdpdGhvdXQgbmVlZGluZyB0byByZS1lbmNvZGUgdGhlIHN0cmVhbSBjb21wbGV0ZWx5LiBFeGFtcGxlcyBhcmUKKyAgICA8cXVvdGU+YXV0aG9yPC9xdW90ZT4sIDxxdW90ZT50aXRsZTwvcXVvdGU+IG9yIDxxdW90ZT5hbGJ1bTwvcXVvdGU+LiBUaGUKKyAgICBjb250YWluZXIgZm9ybWF0IG1pZ2h0IHN0aWxsIG5lZWQgdG8gYmUgcmUtd3JpdHRlbiBmb3IgdGhlIHRhZ3MgdG8gZml0IGluLAorICAgIHRob3VnaC4gU3RyZWFtaW5mbywgb24gdGhlIG90aGVyIGhhbmQsIGFyZSB0YWdzIHRoYXQgZGVzY3JpYmUgdGhlIHN0cmVhbQorICAgIGNvbnRlbnRzIHRlY2huaWNhbGx5LiBUbyBjaGFuZ2UgdGhlbSwgdGhlIHN0cmVhbSBuZWVkcyB0byBiZSByZS1lbmNvZGVkLgorICAgIEV4YW1wbGVzIGFyZSA8cXVvdGU+Y29kZWM8L3F1b3RlPiBvciA8cXVvdGU+Yml0cmF0ZTwvcXVvdGU+LiBOb3RlIHRoYXQgc29tZQorICAgIGNvbnRhaW5lciBmb3JtYXRzIChsaWtlIElEMykgc3RvcmUgdmFyaW91cyBzdHJlYW1pbmZvIHRhZ3MgYXMgbWV0YWRhdGEgaW4KKyAgICB0aGUgZmlsZSBjb250YWluZXIsIHdoaWNoIG1lYW5zIHRoYXQgdGhleSBjYW4gYmUgY2hhbmdlZCBzbyB0aGF0IHRoZXkgZG9uJ3QKKyAgICBtYXRjaCB0aGUgY29udGVudCBpbiB0aGUgZmlsZSBhbnkgbW9yZS4gU3RpbGwsIHRoZXkgYXJlIGNhbGxlZCBtZXRhZGF0YQorICAgIGJlY2F1c2UgPGVtcGhhc2lzPnRlY2huaWNhbGx5PC9lbXBoYXNpcz4sIHRoZXkgY2FuIGJlIGNoYW5nZWQgd2l0aG91dAorICAgIHJlLWVuY29kaW5nIHRoZSB3aG9sZSBzdHJlYW0sIGV2ZW4gdGhvdWdoIHRoYXQgbWFrZXMgdGhlbSBpbnZhbGlkLiBGaWxlcworICAgIHdpdGggc3VjaCBtZXRhZGF0YSB0YWdzIHdpbGwgaGF2ZSB0aGUgc2FtZSB0YWcgdHdpY2U6IG9uY2UgYXMgbWV0YWRhdGEsCisgICAgb25jZSBhcyBzdHJlYW1pbmZvLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgIFRoZXJlIGlzIG5vIHNwZWNpYWwgbmFtZSBmb3IgdGFnIHJlYWRpbmcgZWxlbWVudHMgaW4gJkdTdHJlYW1lcjsuIFRoZXJlIGFyZQorICAgIHNwZWNpYWxpc2VkIGVsZW1lbnRzIChlLmcuIGlkM2RlbXV4KSB0aGF0IGRvIG5vdGhpbmcgYmVzaWRlcyB0YWcgcmVhZGluZywKKyAgICBidXQgYW55ICAmR1N0cmVhbWVyOyBlbGVtZW50IG1heSBleHRyYWN0IHRhZ3Mgd2hpbGUgcHJvY2Vzc2luZyBkYXRhLCBhbmQKKyAgICBtb3N0IGRlY29kZXJzLCBkZW11eGVycyBhbmQgcGFyc2VycyBkby4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICBBIHRhZyB3cml0ZXIgaXMgY2FsbGVkIDx1bGluayB0eXBlPSJodHRwIgorICAgIHVybD0iLi4vLi4vZ3N0cmVhbWVyL2h0bWwvR3N0VGFnU2V0dGVyLmh0bWwiPjxjbGFzc25hbWU+VGFnU2V0dGVyPC9jbGFzc25hbWU+PC91bGluaz4uCisgICAgQW4gZWxlbWVudCBzdXBwb3J0aW5nIGJvdGggY2FuIGJlIHVzZWQgaW4gYSB0YWcgZWRpdG9yIGZvciBxdWljayB0YWcKKyAgICBjaGFuZ2luZyAobm90ZTogaW4tcGxhY2UgdGFnIGVkaXRpbmcgaXMgc3RpbGwgcG9vcmx5IHN1cHBvcnRlZCBhdCB0aGUgdGltZQorICAgIG9mIHdyaXRpbmcgYW5kIHVzdWFsbHkgcmVxdWlyZXMgdGFnIGV4dHJhY3Rpb24vc3RyaXBwaW5nIGFuZCByZW11eGluZyBvZgorICAgIHRoZSBzdHJlYW0gd2l0aCBuZXcgdGFncykuCisgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tdGFnZ2luZy1yZWFkIiB4cmVmbGFiZWw9IlJlYWRpbmcgVGFncyBmcm9tIFN0cmVhbXMiPgorICAgIDx0aXRsZT5SZWFkaW5nIFRhZ3MgZnJvbSBTdHJlYW1zPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSBiYXNpYyBvYmplY3QgZm9yIHRhZ3MgaXMgYSA8dWxpbmsgdHlwZT0iaHR0cCIKKyAgICAgIHVybD0iLi4vLi4vZ3N0cmVhbWVyL2h0bWwvZ3N0cmVhbWVyLUdzdFRhZ0xpc3QuaHRtbCI+PGNsYXNzbmFtZT5Hc3RUYWdMaXN0CisgICAgICA8L2NsYXNzbmFtZT48L3VsaW5rPi4gQW4gZWxlbWVudCB0aGF0IGlzIHJlYWRpbmcgdGFncyBmcm9tIGEgc3RyZWFtIHNob3VsZAorICAgICAgY3JlYXRlIGFuIGVtcHR5IHRhZ2xpc3QgYW5kIGZpbGwgdGhpcyB3aXRoIGluZGl2aWR1YWwgdGFncy4gRW1wdHkgdGFnCisgICAgICBsaXN0cyBjYW4gYmUgY3JlYXRlZCB3aXRoIDxmdW5jdGlvbj5nc3RfdGFnX2xpc3RfbmV3ICgpPC9mdW5jdGlvbj4uIFRoZW4sCisgICAgICB0aGUgZWxlbWVudCBjYW4gZmlsbCB0aGUgbGlzdCB1c2luZyA8ZnVuY3Rpb24+Z3N0X3RhZ19saXN0X2FkZCAoKQorICAgICAgPC9mdW5jdGlvbj4gb3IgPGZ1bmN0aW9uPmdzdF90YWdfbGlzdF9hZGRfdmFsdWVzICgpPC9mdW5jdGlvbj4uCisgICAgICBOb3RlIHRoYXQgZWxlbWVudHMgb2Z0ZW4gcmVhZCBtZXRhZGF0YSBhcyBzdHJpbmdzLCBidXQgdGhlCisgICAgICB2YWx1ZXMgaW4gdGhlIHRhZ2xpc3QgbWlnaHQgbm90IG5lY2Vzc2FyaWx5IGJlIHN0cmluZ3MgLSB0aGV5IG5lZWQgdG8gYmUKKyAgICAgIG9mIHRoZSB0eXBlIHRoZSB0YWcgd2FzIHJlZ2lzdGVyZWQgYXMgKHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZWFjaAorICAgICAgcHJlZGVmaW5lZCB0YWcgc2hvdWxkIGNvbnRhaW4gdGhlIHR5cGUpLiBCZSBzdXJlIHRvIHVzZSBmdW5jdGlvbnMgbGlrZQorICAgICAgPGZ1bmN0aW9uPmdzdF92YWx1ZV90cmFuc2Zvcm0gKCk8L2Z1bmN0aW9uPgorICAgICAgdG8gbWFrZSBzdXJlIHRoYXQgeW91ciBkYXRhIGlzIG9mIHRoZSByaWdodCB0eXBlLiBBZnRlciBkYXRhIHJlYWRpbmcsIHRoZQorICAgICAgYXBwbGljYXRpb24gY2FuIGJlIG5vdGlmaWVkIG9mIHRoZSBuZXcgdGFnbGlzdCBieSBjYWxsaW5nCisgICAgICA8ZnVuY3Rpb24+Z3N0X2VsZW1lbnRfZm91bmRfdGFncyAoKTwvZnVuY3Rpb24+IG9yCisgICAgICA8ZnVuY3Rpb24+Z3N0X2VsZW1lbnRfZm91bmRfdGFnc19mb3JfcGFkICgpPC9mdW5jdGlvbj4gKGlmIHRoZXkgb25seQorICAgICAgcmVmZXIgdG8gYSBzcGVjaWZpYyBzdWItc3RyZWFtKS4gVGhlc2UgZnVuY3Rpb25zIHdpbGwgcG9zdCBhIHRhZyBtZXNzYWdlCisgICAgICBvbiB0aGUgcGlwZWxpbmUncyBHc3RCdXMgZm9yIHRoZSBhcHBsaWNhdGlvbiB0byBwaWNrIHVwLCBidXQgYWxzbyBzZW5kCisgICAgICB0YWcgZXZlbnRzIGRvd25zdHJlYW0sIGVpdGhlciBvdmVyIGFsbCBzb3VyY2UgcGFkIG9yIHRoZSBwYWQgc3BlY2lmaWVkLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFdlIGN1cnJlbnRseSByZXF1aXJlIHRoZSBjb3JlIHRvIGtub3cgdGhlIEdUeXBlIG9mIHRhZ3MgYmVmb3JlIHRoZXkgYXJlCisgICAgICBiZWluZyB1c2VkLCBzbyBhbGwgdGFncyBtdXN0IGJlIHJlZ2lzdGVyZWQgZmlyc3QuICBZb3UgY2FuIGFkZCBuZXcgdGFncworICAgICAgdG8gdGhlIGxpc3Qgb2Yga25vd24gdGFncyB1c2luZyA8ZnVuY3Rpb24+Z3N0X3RhZ19yZWdpc3RlciAoKTwvZnVuY3Rpb24+LgorICAgICAgSWYgeW91IHRoaW5rIHRoZSB0YWcgd2lsbCBiZSB1c2VmdWwgaW4gbW9yZSBjYXNlcyB0aGFuIGp1c3QgeW91ciBvd24KKyAgICAgIGVsZW1lbnQsIGl0IG1pZ2h0IGJlIGEgZ29vZCBpZGVhIHRvIGFkZCBpdCB0byA8ZmlsZW5hbWU+Z3N0dGFnLmM8L2ZpbGVuYW1lPgorICAgICAgaW5zdGVhZC4gVGhhdCdzIHVwIHRvIHlvdSB0byBkZWNpZGUuIElmIHlvdSB3YW50IHRvIGRvIGl0IGluIHlvdXIgb3duCisgICAgICBlbGVtZW50LCBpdCdzIGVhc2llc3QgdG8gcmVnaXN0ZXIgdGhlIHRhZyBpbiBvbmUgb2YgeW91ciBjbGFzcyBpbml0CisgICAgICBmdW5jdGlvbnMsIHByZWZlcmFibHkgPGZ1bmN0aW9uPl9jbGFzc19pbml0ICgpPC9mdW5jdGlvbj4uCisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworc3RhdGljIHZvaWQKK2dzdF9teV9maWx0ZXJfY2xhc3NfaW5pdCAoR3N0TXlGaWx0ZXJDbGFzcyAqa2xhc3MpCit7CitbLi5dCisgIGdzdF90YWdfcmVnaXN0ZXIgKCJteV90YWdfbmFtZSIsIEdTVF9UQUdfRkxBR19NRVRBLAorCQkgICAgR19UWVBFX1NUUklORywKKwkJICAgIF8oIm15IG93biB0YWciKSwKKwkJICAgIF8oImEgdGFnIHRoYXQgaXMgc3BlY2lmaWMgdG8gbXkgb3duIGVsZW1lbnQiKSwKKwkJICAgIE5VTEwpOworWy4uXQorfQorXV0+CisgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tdGFnZ2luZy13cml0ZSIgeHJlZmxhYmVsPSJXcml0aW5nIFRhZ3MgdG8gU3RyZWFtcyI+CisgICAgPHRpdGxlPldyaXRpbmcgVGFncyB0byBTdHJlYW1zPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFRhZyB3cml0ZXJzIGFyZSB0aGUgb3Bwb3NpdGUgb2YgdGFnIHJlYWRlcnMuIFRhZyB3cml0ZXJzIG9ubHkgdGFrZQorICAgICAgbWV0YWRhdGEgdGFncyBpbnRvIGFjY291bnQsIHNpbmNlIHRoYXQncyB0aGUgb25seSB0eXBlIG9mIHRhZ3MgdGhhdCBoYXZlCisgICAgICB0byBiZSB3cml0dGVuIGludG8gYSBzdHJlYW0uIFRhZyB3cml0ZXJzIGNhbiByZWNlaXZlIHRhZ3MgaW4gdGhyZWUgd2F5czoKKyAgICAgIGludGVybmFsLCBhcHBsaWNhdGlvbiBhbmQgcGlwZWxpbmUuIEludGVybmFsIHRhZ3MgYXJlIHRhZ3MgcmVhZCBieSB0aGUKKyAgICAgIGVsZW1lbnQgaXRzZWxmLCB3aGljaCBtZWFucyB0aGF0IHRoZSB0YWcgd3JpdGVyIGlzIC0gaW4gdGhhdCBjYXNlIC0gYSB0YWcKKyAgICAgIHJlYWRlciwgdG9vLiBBcHBsaWNhdGlvbiB0YWdzIGFyZSB0YWdzIHByb3ZpZGVkIHRvIHRoZSBlbGVtZW50IHZpYSB0aGUKKyAgICAgIFRhZ1NldHRlciBpbnRlcmZhY2UgKHdoaWNoIGlzIGp1c3QgYSBsYXllcikuIFBpcGVsaW5lIHRhZ3MgYXJlIHRhZ3MKKyAgICAgIHByb3ZpZGVkIHRvIHRoZSBlbGVtZW50IGZyb20gd2l0aGluIHRoZSBwaXBlbGluZS4gVGhlIGVsZW1lbnQgcmVjZWl2ZXMKKyAgICAgIHN1Y2ggdGFncyB2aWEgdGhlIDxzeW1ib2w+R1NUX0VWRU5UX1RBRzwvc3ltYm9sPiBldmVudCwgd2hpY2ggbWVhbnMKKyAgICAgIHRoYXQgdGFncyB3cml0ZXJzIHNob3VsZCBhdXRvbWF0aWNhbGx5IGJlIGV2ZW50IGF3YXJlLiBUaGUgdGFnIHdyaXRlciBpcworICAgICAgcmVzcG9uc2libGUgZm9yIGNvbWJpbmluZyBhbGwgdGhlc2UgdGhyZWUgaW50byBvbmUgbGlzdCBhbmQgd3JpdGluZyB0aGVtCisgICAgICB0byB0aGUgb3V0cHV0IHN0cmVhbS4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBUaGUgZXhhbXBsZSBiZWxvdyB3aWxsIHJlY2VpdmUgdGFncyBmcm9tIGJvdGggYXBwbGljYXRpb24gYW5kIHBpcGVsaW5lLAorICAgICAgY29tYmluZSB0aGVtIGFuZCB3cml0ZSB0aGVtIHRvIHRoZSBvdXRwdXQgc3RyZWFtLiBJdCBpbXBsZW1lbnRzIHRoZSB0YWcKKyAgICAgIHNldHRlciBzbyBhcHBsaWNhdGlvbnMgY2FuIHNldCB0YWdzLCBhbmQgcmV0cmlldmVzIHBpcGVsaW5lIHRhZ3MgZnJvbQorICAgICAgaW5jb21pbmcgZXZlbnRzLgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKK0dUeXBlCitnc3RfbXlfZmlsdGVyX2dldF90eXBlICh2b2lkKQoreworWy4uXQorICAgIHN0YXRpYyBjb25zdCBHSW50ZXJmYWNlSW5mbyB0YWdfc2V0dGVyX2luZm8gPSB7CisgICAgICBOVUxMLAorICAgICAgTlVMTCwKKyAgICAgIE5VTEwKKyAgICB9OworWy4uXQorICAgIGdfdHlwZV9hZGRfaW50ZXJmYWNlX3N0YXRpYyAobXlfZmlsdGVyX3R5cGUsCisJCQkJIEdTVF9UWVBFX1RBR19TRVRURVIsCisJCQkJICZ0YWdfc2V0dGVyX2luZm8pOworWy4uXQorfQorCitzdGF0aWMgdm9pZAorZ3N0X215X2ZpbHRlcl9pbml0IChHc3RNeUZpbHRlciAqZmlsdGVyKQoreworICBHU1RfRkxBR19TRVQgKGZpbHRlciwgR1NUX0VMRU1FTlRfRVZFTlRfQVdBUkUpOworWy4uXQorfQorCisvKgorICogV3JpdGUgb25lIHRhZy4KKyAqLworCitzdGF0aWMgdm9pZAorZ3N0X215X2ZpbHRlcl93cml0ZV90YWcgKGNvbnN0IEdzdFRhZ0xpc3QgKnRhZ2xpc3QsCisJCQkgY29uc3QgZ2NoYXIgICAgICAqdGFnbmFtZSwKKwkJCSBncG9pbnRlciAgICAgICAgICBkYXRhKQoreworICBHc3RNeUZpbHRlciAqZmlsdGVyID0gR1NUX01ZX0ZJTFRFUiAoZGF0YSk7CisgIEdzdEJ1ZmZlciAqYnVmZmVyOworICBndWludCBudW1fdmFsdWVzID0gZ3N0X3RhZ19saXN0X2dldF90YWdfc2l6ZSAobGlzdCwgdGFnX25hbWUpLCBuOworICBjb25zdCBHVmFsdWUgKmZyb207CisgIEdWYWx1ZSB0byA9IHsgMCB9OworCisgIGdfdmFsdWVfaW5pdCAoJnRvLCBHX1RZUEVfU1RSSU5HKTsKKworICBmb3IgKG4gPSAwOyBuIDwgbnVtX3ZhbHVlczsgbisrKSB7CisgICAgZnJvbSA9IGdzdF90YWdfbGlzdF9nZXRfdmFsdWVfaW5kZXggKHRhZ2xpc3QsIHRhZ25hbWUsIG4pOworICAgIGdfdmFsdWVfdHJhbnNmb3JtIChmcm9tLCAmdG8pOworCisgICAgYnVmID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisgICAgR1NUX0JVRkZFUl9EQVRBIChidWYpID0gZ19zdHJkdXBfcHJpbnRmICgiJXM6JXMiLCB0YWduYW1lLAorCQkJCQkgICAgIGdfdmFsdWVfZ2V0X3N0cmluZyAoJnRvKSk7CisgICAgR1NUX0JVRkZFUl9TSVpFIChidWYpID0gc3RybGVuIChHU1RfQlVGRkVSX0RBVEEgKGJ1ZikpOworICAgIGdzdF9wYWRfcHVzaCAoZmlsdGVyLT5zcmNwYWQsIEdTVF9EQVRBIChidWYpKTsKKyAgfQorCisgIGdfdmFsdWVfdW5zZXQgKCZ0byk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfbXlfZmlsdGVyX3Rhc2tfZnVuYyAoR3N0RWxlbWVudCAqZWxlbWVudCkKK3sKKyAgR3N0TXlGaWx0ZXIgKmZpbHRlciA9IEdTVF9NWV9GSUxURVIgKGVsZW1lbnQpOworICBHc3RUYWdTZXR0ZXIgKnRhZ3NldHRlciA9IEdTVF9UQUdfU0VUVEVSIChlbGVtZW50KTsKKyAgR3N0RGF0YSAqZGF0YTsKKyAgR3N0RXZlbnQgKmV2ZW50OworICBnYm9vbGVhbiBlb3MgPSBGQUxTRTsKKyAgR3N0VGFnTGlzdCAqdGFnbGlzdCA9IGdzdF90YWdfbGlzdF9uZXcgKCk7CisKKyAgd2hpbGUgKCFlb3MpIHsKKyAgICBkYXRhID0gZ3N0X3BhZF9wdWxsIChmaWx0ZXItPnNpbmtwYWQpOworCisgICAgLyogV2UncmUgbm90IHZlcnkgbXVjaCBpbnRlcmVzdGVkIGluIGRhdGEgcmlnaHQgbm93ICovCisgICAgaWYgKEdTVF9JU19CVUZGRVIgKGRhdGEpKQorICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoR1NUX0JVRkZFUiAoZGF0YSkpOworICAgIGV2ZW50ID0gR1NUX0VWRU5UIChkYXRhKTsKKworICAgIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgeworICAgICAgY2FzZSBHU1RfRVZFTlRfVEFHOgorICAgICAgICBnc3RfdGFnX2xpc3RfaW5zZXJ0ICh0YWdsaXN0LCBnc3RfZXZlbnRfdGFnX2dldF9saXN0IChldmVudCksCisJCQkgICAgIEdTVF9UQUdfTUVSR0VfUFJFUEVORCk7CisgICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKKyAgICAgICAgZW9zID0gVFJVRTsKKyAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChmaWx0ZXItPnNpbmtwYWQsIGV2ZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgLyogbWVyZ2UgdGFncyB3aXRoIHRoZSBvbmVzIHJldHJpZXZlZCBmcm9tIHRoZSBhcHBsaWNhdGlvbiAqLworICBpZiAoKGdzdF90YWdfc2V0dGVyX2dldF90YWdfbGlzdCAodGFnc2V0dGVyKSkgeworICAgIGdzdF90YWdfbGlzdF9pbnNlcnQgKHRhZ2xpc3QsCisJCQkgZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19saXN0ICh0YWdzZXR0ZXIpLAorCQkJIGdzdF90YWdfc2V0dGVyX2dldF90YWdfbWVyZ2VfbW9kZSAodGFnc2V0dGVyKSk7CisgIH0KKworICAvKiB3cml0ZSB0YWdzICovCisgIGdzdF90YWdfbGlzdF9mb3JlYWNoICh0YWdsaXN0LCBnc3RfbXlfZmlsdGVyX3dyaXRlX3RhZywgZmlsdGVyKTsKKworICAvKiBzaWduYWwgRU9TICovCisgIGdzdF9wYWRfcHVzaCAoZmlsdGVyLT5zcmNwYWQsIEdTVF9EQVRBIChnc3RfZXZlbnRfbmV3IChHU1RfRVZFTlRfRU9TKSkpOworICBnc3RfZWxlbWVudF9zZXRfZW9zIChlbGVtZW50KTsKK30KK11dPgorICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+CisgICAgICBOb3RlIHRoYXQgbm9ybWFsbHksIGVsZW1lbnRzIHdvdWxkIG5vdCByZWFkIHRoZSBmdWxsIHN0cmVhbSBiZWZvcmUKKyAgICAgIHByb2Nlc3NpbmcgdGFncy4gUmF0aGVyLCB0aGV5IHdvdWxkIHJlYWQgZnJvbSBlYWNoIHNpbmtwYWQgdW50aWwgdGhleSd2ZQorICAgICAgcmVjZWl2ZWQgZGF0YSAoc2luY2UgdGFncyB1c3VhbGx5IGNvbWUgaW4gYmVmb3JlIHRoZSBmaXJzdCBkYXRhIGJ1ZmZlcikKKyAgICAgIGFuZCBwcm9jZXNzIHRoYXQuCisgICAgPC9wYXJhPgorICA8L3NlY3QxPgorPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9wd2cvYWR2YW5jZWQtdHlwZXMueG1sIGIvZG9jcy9wd2cvYWR2YW5jZWQtdHlwZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMGNlN2EKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3B3Zy9hZHZhbmNlZC10eXBlcy54bWwKQEAgLTAsMCArMSwxNDUxIEBACis8IS0tICMjIyMjIyMjIyMjIyBjaGFwdGVyICMjIyMjIyMjIyMjIyMgLS0+CisKKzxjaGFwdGVyIGlkPSJjaGFwdGVyLWJ1aWxkaW5nLXR5cGVzIj4KKyAgPHRpdGxlPlR5cGVzIGFuZCBQcm9wZXJ0aWVzPC90aXRsZT4KKyAgPHBhcmE+CisgICAgVGhlcmUgaXMgYSB2ZXJ5IGxhcmdlIHNldCBvZiBwb3NzaWJsZSB0eXBlcyB0aGF0IG1heSBiZSB1c2VkIHRvIHBhc3MgZGF0YQorICAgIGJldHdlZW4gZWxlbWVudHMuIEluZGVlZCwgZWFjaCBuZXcgZWxlbWVudCB0aGF0IGlzIGRlZmluZWQgbWF5IHVzZSBhIG5ldworICAgIGRhdGEgZm9ybWF0ICh0aG91Z2ggdW5sZXNzIGF0IGxlYXN0IG9uZSBvdGhlciBlbGVtZW50IHJlY29nbmlzZXMgdGhhdAorICAgIGZvcm1hdCwgaXQgd2lsbCBiZSBtb3N0IGxpa2VseSBiZSB1c2VsZXNzIHNpbmNlIG5vdGhpbmcgd2lsbCBiZSBhYmxlIHRvCisgICAgbGluayB3aXRoIGl0KS4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICBJbiBvcmRlciBmb3IgdHlwZXMgdG8gYmUgdXNlZnVsLCBhbmQgZm9yIHN5c3RlbXMgbGlrZSBhdXRvcGx1Z2dlcnMgdG8KKyAgICB3b3JrLCBpdCBpcyBuZWNlc3NhcnkgdGhhdCBhbGwgZWxlbWVudHMgYWdyZWUgb24gdGhlIHR5cGUgZGVmaW5pdGlvbnMsCisgICAgYW5kIHdoaWNoIHByb3BlcnRpZXMgYXJlIHJlcXVpcmVkIGZvciBlYWNoIHR5cGUuIFRoZSAmR1N0cmVhbWVyOyBmcmFtZXdvcmsKKyAgICBpdHNlbGYgc2ltcGx5IHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGRlZmluZSB0eXBlcyBhbmQgcGFyYW1ldGVycywgYnV0CisgICAgZG9lcyBub3QgZml4IHRoZSBtZWFuaW5nIG9mIHR5cGVzIGFuZCBwYXJhbWV0ZXJzLCBhbmQgZG9lcyBub3QgZW5mb3JjZQorICAgIHN0YW5kYXJkcyBvbiB0aGUgY3JlYXRpb24gb2YgbmV3IHR5cGVzLiBUaGlzIGlzIGEgbWF0dGVyIGZvciBhIHBvbGljeSB0bworICAgIGRlY2lkZSwgbm90IHRlY2huaWNhbCBzeXN0ZW1zIHRvIGVuZm9yY2UuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgRm9yIG5vdywgdGhlIHBvbGljeSBpcyBzaW1wbGU6CisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgRG8gbm90IGNyZWF0ZSBhIG5ldyB0eXBlIGlmIHlvdSBjb3VsZCB1c2Ugb25lIHdoaWNoIGFscmVhZHkgZXhpc3RzLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJZiBjcmVhdGluZyBhIG5ldyB0eXBlLCBkaXNjdXNzIGl0IGZpcnN0IHdpdGggdGhlIG90aGVyICZHU3RyZWFtZXI7CisgICAgICAgICAgZGV2ZWxvcGVycywgb24gYXQgbGVhc3Qgb25lIG9mOiBJUkMsIG1haWxpbmcgbGlzdHMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRyeSB0byBlbnN1cmUgdGhhdCB0aGUgbmFtZSBmb3IgYSBuZXcgZm9ybWF0IGlzIGFzIHVubGlrZWx5IHRvCisgICAgICAgICAgY29uZmxpY3Qgd2l0aCBhbnl0aGluZyBlbHNlIGNyZWF0ZWQgYWxyZWFkeSwgYW5kIGlzIG5vdCBhIG1vcmUKKyAgICAgICAgICBnZW5lcmFsaXNlZCBuYW1lIHRoYW4gaXQgc2hvdWxkIGJlLiBGb3IgZXhhbXBsZTogImF1ZGlvL2NvbXByZXNzZWQiCisgICAgICAgICAgd291bGQgYmUgdG9vIGdlbmVyYWxpc2VkIGEgbmFtZSB0byByZXByZXNlbnQgYXVkaW8gZGF0YSBjb21wcmVzc2VkCisgICAgICAgICAgd2l0aCBhbiBtcDMgY29kZWMuIEluc3RlYWQgImF1ZGlvL21wMyIgbWlnaHQgYmUgYW4gYXBwcm9wcmlhdGUgbmFtZSwKKyAgICAgICAgICBvciAiYXVkaW8vY29tcHJlc3NlZCIgY291bGQgZXhpc3QgYW5kIGhhdmUgYSBwcm9wZXJ0eSBpbmRpY2F0aW5nIHRoZQorICAgICAgICAgIHR5cGUgb2YgY29tcHJlc3Npb24gdXNlZC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgRW5zdXJlIHRoYXQsIHdoZW4geW91IGRvIGNyZWF0ZSBhIG5ldyB0eXBlLCB5b3Ugc3BlY2lmeSBpdCBjbGVhcmx5LAorICAgICAgICAgIGFuZCBnZXQgaXQgYWRkZWQgdG8gdGhlIGxpc3Qgb2Yga25vd24gdHlwZXMgc28gdGhhdCBvdGhlciBkZXZlbG9wZXJzCisgICAgICAgICAgY2FuIHVzZSB0aGUgdHlwZSBjb3JyZWN0bHkgd2hlbiB3cml0aW5nIHRoZWlyIGVsZW1lbnRzLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICA8L3BhcmE+CisKKyAgPCEtLSAjIyMjIyMjIyMjIyMgc2VjdDEgIyMjIyMjIyMjIyMjIyAtLT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tdHlwZXMtdGVzdCIgeHJlZmxhYmVsPSJCdWlsZGluZyBhIFNpbXBsZSBGb3JtYXQgZm9yIFRlc3RpbmciPgorICAgIDx0aXRsZT5CdWlsZGluZyBhIFNpbXBsZSBGb3JtYXQgZm9yIFRlc3Rpbmc8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgSWYgeW91IG5lZWQgYSBuZXcgZm9ybWF0IHRoYXQgaGFzIG5vdCB5ZXQgYmVlbiBkZWZpbmVkIGluIG91ciA8eHJlZgorICAgICAgbGlua2VuZD0ic2VjdGlvbi10eXBlcy1kZWZpbml0aW9ucyIvPiwgeW91IHdpbGwgd2FudCB0byBoYXZlIHNvbWUgZ2VuZXJhbAorICAgICAgZ3VpZGVsaW5lcyBvbiBtaW1ldHlwZSBuYW1pbmcsIHByb3BlcnRpZXMgYW5kIHN1Y2guIEEgbWltZXR5cGUgd291bGQKKyAgICAgIGlkZWFsbHkgYmUgb25lIGRlZmluZWQgYnkgSUFOQTsgZWxzZSwgaXQgc2hvdWxkIGJlIGluIHRoZSBmb3JtCisgICAgICB0eXBlL3gtbmFtZSwgd2hlcmUgdHlwZSBpcyB0aGUgc29ydCBvZiBkYXRhIHRoaXMgbWltZXR5cGUgaGFuZGxlcyAoYXVkaW8sCisgICAgICB2aWRlbywgLi4uKSBhbmQgbmFtZSBzaG91bGQgYmUgc29tZXRoaW5nIHNwZWNpZmljIGZvciB0aGlzIHNwZWNpZmljIHR5cGUuCisgICAgICBBdWRpbyBhbmQgdmlkZW8gbWltZXR5cGVzIHNob3VsZCB0cnkgdG8gc3VwcG9ydCB0aGUgZ2VuZXJhbCBhdWRpby92aWRlbworICAgICAgcHJvcGVydGllcyAoc2VlIHRoZSBsaXN0KSwgYW5kIGNhbiB1c2UgdGhlaXIgb3duIHByb3BlcnRpZXMsIHRvby4gVG8gZ2V0CisgICAgICBhbiBpZGVhIG9mIHdoYXQgcHJvcGVydGllcyB3ZSB0aGluayBhcmUgdXNlZnVsLCBzZWUgKGFnYWluKSB0aGUgbGlzdC4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBUYWtlIHlvdXIgdGltZSB0byBmaW5kIHRoZSByaWdodCBzZXQgb2YgcHJvcGVydGllcyBmb3IgeW91ciB0eXBlLiBUaGVyZQorICAgICAgaXMgbm8gcmVhc29uIHRvIGh1cnJ5LiBBbHNvLCBleHBlcmltZW50aW5nIHdpdGggdGhpcyBpcyBnZW5lcmFsbHkgYSBnb29kCisgICAgICBpZGVhLiBFeHBlcmllbmNlIGxlYXJucyB0aGF0IHRoZW9yZXRpY2FsbHkgdGhvdWdodC1vdXQgdHlwZXMgYXJlIGdvb2QsCisgICAgICBidXQgdGhleSBzdGlsbCBuZWVkIHByYWN0aWNhbCB1c2UgdG8gYXNzdXJlIHRoYXQgdGhleSBzZXJ2ZSB0aGVpciBuZWVkcy4KKyAgICAgIE1ha2Ugc3VyZSB0aGF0IHlvdXIgcHJvcGVydHkgbmFtZXMgZG8gbm90IGNsYXNoIHdpdGggc2ltaWxhciBwcm9wZXJ0aWVzCisgICAgICB1c2VkIGluIG90aGVyIHR5cGVzLiBJZiB0aGV5IG1hdGNoLCBtYWtlIHN1cmUgdGhleSBtZWFuIHRoZSBzYW1lIHRoaW5nOworICAgICAgcHJvcGVydGllcyB3aXRoIGRpZmZlcmVudCB0eXBlcyBidXQgdGhlIHNhbWUgbmFtZXMgYXJlCisgICAgICA8ZW1waGFzaXM+bm90PC9lbXBoYXNpcz4gYWxsb3dlZC4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPCEtLSAjIyMjIyMjIyMjIyMgc2VjdDEgIyMjIyMjIyMjIyMjIyAtLT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tdHlwZXMtdHlwZWZpbmQiIHhyZWZsYWJlbD0iVHlwZWZpbmQgRnVuY3Rpb25zIGFuZCBBdXRvcGx1Z2dpbmciPgorICAgIDx0aXRsZT5UeXBlZmluZCBGdW5jdGlvbnMgYW5kIEF1dG9wbHVnZ2luZzwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBXaXRoIG9ubHkgPGVtcGhhc2lzPmRlZmluaW5nPC9lbXBoYXNpcz4gdGhlIHR5cGVzLCB3ZSdyZSBub3QgeWV0IHRoZXJlLgorICAgICAgSW4gb3JkZXIgZm9yIGEgcmFuZG9tIGRhdGEgZmlsZSB0byBiZSByZWNvZ25pemVkIGFuZCBwbGF5ZWQgYmFjayBhcworICAgICAgc3VjaCwgd2UgbmVlZCBhIHdheSBvZiByZWNvZ25pemluZyB0aGVpciB0eXBlIG91dCBvZiB0aGUgYmx1ZS4gRm9yIHRoaXMKKyAgICAgIHB1cnBvc2UsIDxxdW90ZT50eXBlZmluZGluZzwvcXVvdGU+IHdhcyBpbnRyb2R1Y2VkLiBUeXBlZmluZGluZyBpcyB0aGUKKyAgICAgIHByb2Nlc3Mgb2YgZGV0ZWN0aW5nIHRoZSB0eXBlIG9mIGEgZGF0YSBzdHJlYW0uIFR5cGVmaW5kaW5nIGNvbnNpc3RzIG9mCisgICAgICB0d28gc2VwYXJhdGUgcGFydHM6IGZpcnN0LCB0aGVyZSdzIGFuIHVubGltaXRlZCBudW1iZXIgb2YgZnVuY3Rpb25zCisgICAgICB0aGF0IHdlIGNhbGwgPGVtcGhhc2lzPnR5cGVmaW5kIGZ1bmN0aW9uczwvZW1waGFzaXM+LCB3aGljaCBhcmUgZWFjaAorICAgICAgYWJsZSB0byByZWNvZ25pemUgb25lIG9yIG1vcmUgdHlwZXMgZnJvbSBhbiBpbnB1dCBzdHJlYW0uIFRoZW4sCisgICAgICBzZWNvbmRseSwgdGhlcmUncyBhIHNtYWxsIGVuZ2luZSB3aGljaCByZWdpc3RlcnMgYW5kIGNhbGxzIGVhY2ggb2YKKyAgICAgIHRob3NlIGZ1bmN0aW9ucy4gVGhpcyBpcyB0aGUgdHlwZWZpbmQgY29yZS4gT24gdG9wIG9mIHRoaXMgdHlwZWZpbmQKKyAgICAgIGNvcmUsIHlvdSB3b3VsZCBub3JtYWxseSB3cml0ZSBhbiBhdXRvcGx1Z2dlciwgd2hpY2ggaXMgYWJsZSB0byB1c2UKKyAgICAgIHRoaXMgdHlwZSBkZXRlY3Rpb24gc3lzdGVtIHRvIGR5bmFtaWNhbGx5IGJ1aWxkIGEgcGlwZWxpbmUgYXJvdW5kIGFuCisgICAgICBpbnB1dCBzdHJlYW0uIEhlcmUsIHdlIHdpbGwgZm9jdXMgb25seSBvbiB0eXBlZmluZCBmdW5jdGlvbnMuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgQSB0eXBlZmluZCBmdW5jdGlvbiB1c3VhbGx5IGxpdmVzIGluCisgICAgICA8ZmlsZW5hbWU+Z3N0LXBsdWdpbnMtYmFzZS9nc3QvdHlwZWZpbmQvZ3N0dHlwZWZpbmRmdW5jdGlvbnMuYzwvZmlsZW5hbWU+LAorICAgICAgdW5sZXNzIHRoZXJlJ3MgYSBnb29kIHJlYXNvbiAobGlrZSBsaWJyYXJ5IGRlcGVuZGVuY2llcykgdG8gcHV0IGl0CisgICAgICBlbHNld2hlcmUuIFRoZSByZWFzb24gZm9yIHRoaXMgY2VudHJhbGl6YXRpb24gaXMgdG8gcmVkdWNlIHRoZQorICAgICAgbnVtYmVyIG9mIHBsdWdpbnMgdGhhdCBuZWVkIHRvIGJlIGxvYWRlZCBpbiBvcmRlciB0byBkZXRlY3QgYSBzdHJlYW0ncworICAgICAgdHlwZS4gQmVsb3cgaXMgYW4gZXhhbXBsZSB0aGF0IHdpbGwgcmVjb2duaXplIEFWSSBmaWxlcywgd2hpY2ggc3RhcnQKKyAgICAgIHdpdGggYSA8cXVvdGU+UklGRjwvcXVvdGU+IHRhZywgdGhlbiB0aGUgc2l6ZSBvZiB0aGUgZmlsZSBhbmQgdGhlbiBhbgorICAgICAgPHF1b3RlPkFWSSA8L3F1b3RlPiB0YWc6CisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz4KK3N0YXRpYyB2b2lkCitnc3RfbXlfdHlwZWZpbmRfZnVuY3Rpb24gKEdzdFR5cGVGaW5kICp0ZiwKKwkJCSAgZ3BvaW50ZXIgICAgIGRhdGEpCit7CisgIGd1aW50OCAqZGF0YSA9IGdzdF90eXBlX2ZpbmRfcGVlayAodGYsIDAsIDEyKTsKKworICBpZiAoZGF0YSAmYW1wOyZhbXA7CisgICAgICBHVUlOVDMyX0ZST01fTEUgKCZhbXA7KChndWludDMyICopIGRhdGEpWzBdKSA9PSBHU1RfTUFLRV9GT1VSQ0MgKCdSJywnSScsJ0YnLCdGJykgJmFtcDsmYW1wOworICAgICAgR1VJTlQzMl9GUk9NX0xFICgmYW1wOygoZ3VpbnQzMiAqKSBkYXRhKVsyXSkgPT0gR1NUX01BS0VfRk9VUkNDICgnQScsJ1YnLCdJJywnICcpKSB7CisgICAgZ3N0X3R5cGVfZmluZF9zdWdnZXN0ICh0ZiwgR1NUX1RZUEVfRklORF9NQVhJTVVNLAorCQkJICAgZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtbXN2aWRlbyIsIE5VTEwpKTsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKnBsdWdpbikKK3sKKyAgc3RhdGljIGdjaGFyICpleHRzW10gPSB7ICJhdmkiLCBOVUxMIH07CisgIGlmICghZ3N0X3R5cGVfZmluZF9yZWdpc3RlciAocGx1Z2luLCAiIiwgR1NUX1JBTktfUFJJTUFSWSwKKwkJCSAgICAgICBnc3RfbXlfdHlwZWZpbmRfZnVuY3Rpb24sIGV4dHMsCisJCQkgICAgICAgZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtbXN2aWRlbyIsCisJCQkJCQkgICAgTlVMTCksIE5VTEwpKQorICAgIHJldHVybiBGQUxTRTsKK30KKyAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDxwYXJhPgorICAgICAgTm90ZSB0aGF0CisgICAgICA8ZmlsZW5hbWU+Z3N0LXBsdWdpbnMvZ3N0L3R5cGVmaW5kL2dzdHR5cGVmaW5kZnVuY3Rpb25zLmM8L2ZpbGVuYW1lPgorICAgICAgaGFzIHNvbWUgc2ltcGxpZmljYXRpb24gbWFjcm9zIHRvIGRlY3JlYXNlIHRoZSBhbW91bnQgb2YgY29kZS4gTWFrZQorICAgICAgZ29vZCB1c2Ugb2YgdGhvc2UgaWYgeW91IHdhbnQgdG8gc3VibWl0IHR5cGVmaW5kaW5nIHBhdGNoZXMgd2l0aCBuZXcKKyAgICAgIHR5cGVmaW5kIGZ1bmN0aW9ucy4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBBdXRvcGx1Z2dpbmcgaGFzIGJlZW4gZGlzY3Vzc2VkIGluIGdyZWF0IGRldGFpbCBpbiB0aGUgQXBwbGljYXRpb24KKyAgICAgIERldmVsb3BtZW50IE1hbnVhbC4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPCEtLSAjIyMjIyMjIyMjIyMgc2VjdDEgIyMjIyMjIyMjIyMjIyAtLT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tdHlwZXMtZGVmaW5pdGlvbnMiIHhyZWZsYWJlbD0iTGlzdCBvZiBEZWZpbmVkIFR5cGVzIj4KKyAgICA8dGl0bGU+TGlzdCBvZiBEZWZpbmVkIFR5cGVzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBCZWxvdyBpcyBhIGxpc3Qgb2YgYWxsIHRoZSBkZWZpbmVkIHR5cGVzIGluICZHU3RyZWFtZXI7LiBUaGV5IGFyZSBzcGxpdAorICAgICAgICB1cCBpbiBzZXBhcmF0ZSB0YWJsZXMgZm9yIGF1ZGlvLCB2aWRlbywgY29udGFpbmVyLCBzdWJ0aXRsZSBhbmQgb3RoZXIKKyAgICAgICAgdHlwZXMsIGZvciB0aGUgc2FrZSBvZiByZWFkYWJpbGl0eS4gQmVsb3cgZWFjaCB0YWJsZSBtaWdodCBmb2xsb3cgYQorICAgICAgICBsaXN0IG9mIG5vdGVzIHRoYXQgYXBwbHkgdG8gdGhhdCB0YWJsZS4gSW4gdGhlIGRlZmluaXRpb24gb2YgZWFjaCB0eXBlLAorICAgICAgICB3ZSB0cnkgdG8gZm9sbG93IHRoZSB0eXBlcyBhbmQgcnVsZXMgYXMgZGVmaW5lZCBieSA8dWxpbmsgdHlwZT0iaHR0cCIKKyAgICAgICAgdXJsPSJodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL21lZGlhLXR5cGVzIj4KKyAgICAgICAgSUFOQTwvdWxpbms+IGZvciBhcyBmYXIgYXMgcG9zc2libGUuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgSnVtcCBkaXJlY3RseSB0byBhIHNwZWNpZmljIHRhYmxlOgorCTxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+PHhyZWYgbGlua2VuZD0idGFibGUtYXVkaW8tdHlwZXMiLz48L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT48eHJlZiBsaW5rZW5kPSJ0YWJsZS12aWRlby10eXBlcyIvPjwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPjx4cmVmIGxpbmtlbmQ9InRhYmxlLWNvbnRhaW5lci10eXBlcyIvPjwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPjx4cmVmIGxpbmtlbmQ9InRhYmxlLXN1YnRpdGxlLXR5cGVzIi8+PC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+PHhyZWYgbGlua2VuZD0idGFibGUtb3RoZXItdHlwZXMiLz48L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgTm90ZSB0aGF0IG1hbnkgb2YgdGhlIHByb3BlcnRpZXMgYXJlIG5vdCA8ZW1waGFzaXM+cmVxdWlyZWQ8L2VtcGhhc2lzPiwKKyAgICAgICAgYnV0IHJhdGhlciA8ZW1waGFzaXM+b3B0aW9uYWw8L2VtcGhhc2lzPiBwcm9wZXJ0aWVzLiBUaGlzIG1lYW5zIHRoYXQKKyAgICAgICAgbW9zdCBvZiB0aGVzZSBwcm9wZXJ0aWVzIGNhbiBiZSBleHRyYWN0ZWQgZnJvbSB0aGUgY29udGFpbmVyIGhlYWRlciwKKyAgICAgICAgYnV0IHRoYXQgLSBpbiBjYXNlIHRoZSBjb250YWluZXIgaGVhZGVyIGRvZXMgbm90IHByb3ZpZGUgdGhlc2UgLSB0aGV5CisgICAgICAgIGNhbiBhbHNvIGJlIGV4dHJhY3RlZCBieSBwYXJzaW5nIHRoZSBzdHJlYW0gaGVhZGVyIG9yIHRoZSBzdHJlYW0KKyAgICAgICAgY29udGVudC4gVGhlIHBvbGljeSBpcyB0aGF0IHlvdXIgZWxlbWVudCBzaG91bGQgcHJvdmlkZSB0aGUgZGF0YSB0aGF0CisgICAgICAgIGl0IGtub3dzIGFib3V0IGJ5IG9ubHkgcGFyc2luZyBpdHMgb3duIGNvbnRlbnQsIG5vdCBhbm90aGVyIGVsZW1lbnQncworICAgICAgICBjb250ZW50LiBFeGFtcGxlOiB0aGUgQVZJIGhlYWRlciBwcm92aWRlcyBzYW1wbGVyYXRlIG9mIHRoZSBjb250YWluZWQKKyAgICAgICAgYXVkaW8gc3RyZWFtIGluIHRoZSBoZWFkZXIuIE1QRUcgc3lzdGVtIHN0cmVhbXMgZG9uJ3QuIFRoaXMgbWVhbnMgdGhhdAorICAgICAgICBhbiBBVkkgc3RyZWFtIGRlbXV4ZXIgd291bGQgcHJvdmlkZSBzYW1wbGVyYXRlIGFzIGEgcHJvcGVydHkgZm9yIE1QRUcKKyAgICAgICAgYXVkaW8gc3RyZWFtcywgd2hlcmVhcyBhbiBNUEVHIGRlbXV4ZXIgd291bGQgbm90LiBBIGRlY29kZXIgbmVlZGluZworICAgICAgICB0aGlzIGRhdGEgd291bGQgcmVxdWlyZSBhIHN0cmVhbSBwYXJzZXIgaW4gYmV0d2VlbiB0d28gZXh0cmFjdCB0aGlzCisgICAgICAgIGZyb20gdGhlIGhlYWRlciBvciBjYWxjdWxhdGUgaXQgZnJvbSB0aGUgc3RyZWFtLgorICAgICAgPC9wYXJhPgorCisgICAgICA8dGFibGUgZnJhbWU9ImFsbCIgaWQ9InRhYmxlLWF1ZGlvLXR5cGVzIiB4cmVmbGFiZWw9IlRhYmxlIG9mIEF1ZGlvIFR5cGVzIj4KKyAgICAgICAgPHRpdGxlPlRhYmxlIG9mIEF1ZGlvIFR5cGVzPC90aXRsZT4KKyAgICAgICAgPHRncm91cCBjb2xzPSI2IiBhbGlnbj0ibGVmdCIgY29sc2VwPSIxIiByb3dzZXA9IjEiPgorICAgICAgICA8Y29sc3BlYyBjb2xudW09IjEiIGNvbG5hbWU9ImNvbGExIiBjb2x3aWR0aD0iMSoiLz4KKyAgICAgICAgPGNvbHNwZWMgY29sbnVtPSI2IiBjb2xuYW1lPSJjb2xhNiIgY29sd2lkdGg9IjYqIi8+CisgICAgICAgIDxzcGFuc3BlYyBzcGFubmFtZT0iZnVsbHdpZHRoIiBuYW1lc3Q9ImNvbGExIiBuYW1lZW5kPSJjb2xhNiIvPgorCisgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5Pk1pbWUgVHlwZTwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+RGVzY3JpcHRpb248L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PlByb3BlcnR5PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5Qcm9wZXJ0eSBUeXBlPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5Qcm9wZXJ0eSBWYWx1ZXM8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PlByb3BlcnR5IERlc2NyaXB0aW9uPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgPC90aGVhZD4KKworICAgICAgICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCisgICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgc3VidGl0bGUgIyMjIyMjIyMjIyMjIyAtLT4KKworICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnkgc3Bhbm5hbWU9ImZ1bGx3aWR0aCI+CisgICAgICAgICAgICAgIDxlbXBoYXNpcz5BbGwgYXVkaW8gdHlwZXMuPC9lbXBoYXNpcz4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisKKyAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5IG1vcmVyb3dzPSIxIj5hdWRpby8qPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeSBtb3Jlcm93cz0iMSI+CisgICAgICAgICAgICAgIDxlbXBoYXNpcz5BbGwgYXVkaW8gdHlwZXM8L2VtcGhhc2lzPgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5yYXRlPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5ncmVhdGVyIHRoYW4gMDwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIFRoZSBzYW1wbGUgcmF0ZSBvZiB0aGUgZGF0YSwgaW4gc2FtcGxlcyAocGVyIGNoYW5uZWwpIHBlciBzZWNvbmQuCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnk+Y2hhbm5lbHM8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PmdyZWF0ZXIgdGhhbiAwPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgVGhlIG51bWJlciBvZiBjaGFubmVscyBvZiBhdWRpbyBkYXRhLgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKworICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHN1YnRpdGxlICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5IHNwYW5uYW1lPSJmdWxsd2lkdGgiPgorICAgICAgICAgICAgICA8ZW1waGFzaXM+QWxsIHJhdyBhdWRpbyB0eXBlcy48L2VtcGhhc2lzPgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKworICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KKworICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnkgbW9yZXJvd3M9IjMiPmF1ZGlvL3gtcmF3LWludDwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnkgbW9yZXJvd3M9IjMiPgorICAgICAgICAgICAgICBVbnN0cnVjdHVyZWQgYW5kIHVuY29tcHJlc3NlZCByYXcgZml4ZWQtaW50ZWdlciBhdWRpbyBkYXRhLgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5lbmRpYW5uZXNzPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5HX0JJR19FTkRJQU4gKDQzMjEpIG9yIEdfTElUVExFX0VORElBTiAoMTIzNCk8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBUaGUgb3JkZXIgb2YgYnl0ZXMgaW4gYSBzYW1wbGUuIFRoZSB2YWx1ZSBHX0xJVFRMRV9FTkRJQU4gKDEyMzQpCisgICAgICAgICAgICAgIG1lYW5zIDxxdW90ZT5saXR0bGUtZW5kaWFuPC9xdW90ZT4gKGJ5dGUtb3JkZXIgaXMgPHF1b3RlPmxlYXN0CisgICAgICAgICAgICAgIHNpZ25pZmljYW50IGJ5dGUgZmlyc3Q8L3F1b3RlPikuIFRoZSB2YWx1ZSBHX0JJR19FTkRJQU4gKDQzMjEpCisgICAgICAgICAgICAgIG1lYW5zIDxxdW90ZT5iaWctZW5kaWFuPC9xdW90ZT4gKGJ5dGUgb3JkZXIgaXMgPHF1b3RlPm1vc3QKKyAgICAgICAgICAgICAgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdDwvcXVvdGU+KS4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT5zaWduZWQ8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PmJvb2xlYW48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PlRSVUUgb3IgRkFMU0U8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBXaGV0aGVyIHRoZSB2YWx1ZXMgb2YgdGhlIGludGVnZXIgc2FtcGxlcyBhcmUgc2lnbmVkIG9yIG5vdC4KKyAgICAgICAgICAgICAgU2lnbmVkIHNhbXBsZXMgdXNlIG9uZSBiaXQgdG8gaW5kaWNhdGUgc2lnbiAobmVnYXRpdmUgb3IKKyAgICAgICAgICAgICAgcG9zaXRpdmUpIG9mIHRoZSB2YWx1ZS4gVW5zaWduZWQgc2FtcGxlcyBhcmUgYWx3YXlzIHBvc2l0aXZlLgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5PndpZHRoPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5ncmVhdGVyIHRoYW4gMDwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIE51bWJlciBvZiBiaXRzIGFsbG9jYXRlZCBwZXIgc2FtcGxlLgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5PmRlcHRoPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5ncmVhdGVyIHRoYW4gMDwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgYml0cyB1c2VkIHBlciBzYW1wbGUuIFRoaXMgbXVzdCBiZSBsZXNzIHRoYW4gb3IKKyAgICAgICAgICAgICAgZXF1YWwgdG8gdGhlIHdpZHRoOiBJZiB0aGUgZGVwdGggaXMgbGVzcyB0aGFuIHRoZSB3aWR0aCwgdGhlCisgICAgICAgICAgICAgIGxvdyBiaXRzIGFyZSBhc3N1bWVkIHRvIGJlIHRoZSBvbmVzIHVzZWQuIEZvciBleGFtcGxlLCBhIHdpZHRoCisgICAgICAgICAgICAgIG9mIDMyIGFuZCBhIGRlcHRoIG9mIDI0IG1lYW5zIHRoYXQgZWFjaCBzYW1wbGUgaXMgc3RvcmVkIGluIGEKKyAgICAgICAgICAgICAgMzIgYml0IHdvcmQsIGJ1dCBvbmx5IHRoZSBsb3cgMjQgYml0cyBhcmUgYWN0dWFsbHkgdXNlZC4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisKKyAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5IG1vcmVyb3dzPSIxIj5hdWRpby94LXJhdy1mbG9hdDwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIFVuc3RydWN0dXJlZCBhbmQgdW5jb21wcmVzc2VkIHJhdyBmbG9hdGluZy1wb2ludCBhdWRpbyBkYXRhLgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5lbmRpYW5uZXNzPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5HX0JJR19FTkRJQU4gKDQzMjEpIG9yIEdfTElUVExFX0VORElBTiAoMTIzNCk8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBUaGUgb3JkZXIgb2YgYnl0ZXMgaW4gYSBzYW1wbGUuIFRoZSB2YWx1ZSBHX0xJVFRMRV9FTkRJQU4gKDEyMzQpCisgICAgICAgICAgICAgIG1lYW5zIDxxdW90ZT5saXR0bGUtZW5kaWFuPC9xdW90ZT4gKGJ5dGUtb3JkZXIgaXMgPHF1b3RlPmxlYXN0CisgICAgICAgICAgICAgIHNpZ25pZmljYW50IGJ5dGUgZmlyc3Q8L3F1b3RlPikuIFRoZSB2YWx1ZSBHX0JJR19FTkRJQU4gKDQzMjEpCisgICAgICAgICAgICAgIG1lYW5zIDxxdW90ZT5iaWctZW5kaWFuPC9xdW90ZT4gKGJ5dGUgb3JkZXIgaXMgPHF1b3RlPm1vc3QKKyAgICAgICAgICAgICAgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdDwvcXVvdGU+KS4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT53aWR0aDwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+Z3JlYXRlciB0aGFuIDA8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBUaGUgYW1vdW50IG9mIGJpdHMgdXNlZCBhbmQgYWxsb2NhdGVkIHBlciBzYW1wbGUuCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCisgICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgc3VidGl0bGUgIyMjIyMjIyMjIyMjIyAtLT4KKworICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnkgc3Bhbm5hbWU9ImZ1bGx3aWR0aCI+CisgICAgICAgICAgICAgIDxlbXBoYXNpcz5BbGwgZW5jb2RlZCBhdWRpbyB0eXBlcy48L2VtcGhhc2lzPgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKworICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KKworICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnk+YXVkaW8veC1hYzM8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PkFDLTMgb3IgQTUyIGF1ZGlvIHN0cmVhbXMuPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSBubyBzcGVjaWZpYyBwcm9wZXJ0aWVzIGRlZmluZWQgb3IgbmVlZGVkIGZvcgorICAgICAgICAgICAgICB0aGlzIHR5cGUuCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCisgICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeSBtb3Jlcm93cz0iMSI+YXVkaW8veC1hZHBjbTwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnkgbW9yZXJvd3M9IjEiPkFEUENNIEF1ZGlvIHN0cmVhbXMuPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5sYXlvdXQ8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PnN0cmluZzwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIDxxdW90ZT5xdWlja3RpbWU8L3F1b3RlPiwgPHF1b3RlPmR2aTwvcXVvdGU+LAorICAgICAgICAgICAgICA8cXVvdGU+bWljcm9zb2Z0PC9xdW90ZT4gb3IgPHF1b3RlPjR4bTwvcXVvdGU+LgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgVGhlIGxheW91dCBkZWZpbmVzIHRoZSBwYWNraW5nIG9mIHRoZSBzYW1wbGVzIGluIHRoZSBzdHJlYW0uIEluCisgICAgICAgICAgICAgIEFEUENNLCBtb3N0IGZvcm1hdHMgc3RvcmUgbXVsdGlwbGUgc2FtcGxlcyBwZXIgY2hhbm5lbCB0b2dldGhlci4KKyAgICAgICAgICAgICAgVGhpcyBudW1iZXIgb2Ygc2FtcGxlcyBkaWZmZXJzIHBlciBmb3JtYXQsIGhlbmNlIHRoZSBkaWZmZXJlbnQKKyAgICAgICAgICAgICAgbGF5b3V0cy4gT24gdGhlIGxvbmcgdGVybSwgd2UgcHJvYmFibHkgd2FudCB0aGlzIHZhcmlhYmxlIHRvIGRpZQorICAgICAgICAgICAgICBhbmQgdXNlIHNvbWV0aGluZyBtb3JlIGRlc2NyaXB0aXZlLCBidXQgdGhpcyB3aWxsIGRvIGZvciBub3cuCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnk+YmxvY2tfYWxpZ248L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBBbnkKKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIENodW5rIGJ1ZmZlciBzaXplLgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKworICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KKworICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnk+YXVkaW8veC1jaW5lcGFrPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5BdWRpbyBhcyBwcm92aWRlZCBpbiBhIENpbmVwYWsgKFF1aWNrdGltZSkgc3RyZWFtLjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gc3BlY2lmaWMgcHJvcGVydGllcyBkZWZpbmVkIG9yIG5lZWRlZCBmb3IKKyAgICAgICAgICAgICAgdGhpcyB0eXBlLgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKworICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KKworICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnk+YXVkaW8veC1kdjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+QXVkaW8gYXMgcHJvdmlkZWQgaW4gYSBEaWdpdGFsIFZpZGVvIHN0cmVhbS48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHNwZWNpZmljIHByb3BlcnRpZXMgZGVmaW5lZCBvciBuZWVkZWQgZm9yCisgICAgICAgICAgICAgIHRoaXMgdHlwZS4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisKKyAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5PmF1ZGlvL3gtZmxhYzwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+RnJlZSBMb3NzbGVzcyBBdWRpbyBjb2RlYyAoRkxBQykuPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSBubyBzcGVjaWZpYyBwcm9wZXJ0aWVzIGRlZmluZWQgb3IgbmVlZGVkIGZvcgorICAgICAgICAgICAgICB0aGlzIHR5cGUuCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCisgICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT5hdWRpby94LWdzbTwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+RGF0YSBlbmNvZGVkIGJ5IHRoZSBHU00gY29kZWMuPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSBubyBzcGVjaWZpYyBwcm9wZXJ0aWVzIGRlZmluZWQgb3IgbmVlZGVkIGZvcgorICAgICAgICAgICAgICB0aGlzIHR5cGUuCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCisgICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT5hdWRpby94LWFsYXc8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PkEtTGF3IEF1ZGlvLjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gc3BlY2lmaWMgcHJvcGVydGllcyBkZWZpbmVkIG9yIG5lZWRlZCBmb3IKKyAgICAgICAgICAgICAgdGhpcyB0eXBlLgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKworICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KKworICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnk+YXVkaW8veC1tdWxhdzwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+TXUtTGF3IEF1ZGlvLjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gc3BlY2lmaWMgcHJvcGVydGllcyBkZWZpbmVkIG9yIG5lZWRlZCBmb3IKKyAgICAgICAgICAgICAgdGhpcyB0eXBlLgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKworICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KKworICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnk+YXVkaW8veC1tYWNlPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5NQUNFIEF1ZGlvICh1c2VkIGluIFF1aWNrdGltZSkuPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5tYWNldmVyc2lvbjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+MyBvciA2PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgVGhlIHZlcnNpb24gb2YgdGhlIE1BQ0UgYXVkaW8gY29kZWMgdXNlZCB0byBlbmNvZGUgdGhlIHN0cmVhbS4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisKKyAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5IG1vcmVyb3dzPSIzIj5hdWRpby9tcGVnPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeSBtb3Jlcm93cz0iMyI+CisgICAgICAgICAgICAgIEF1ZGlvIGRhdGEgY29tcHJlc3NlZCB1c2luZyB0aGUgTVBFRyBhdWRpbyBlbmNvZGluZyBzY2hlbWUuCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5Pm1wZWd2ZXJzaW9uPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4xLCAyIG9yIDQ8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBUaGUgTVBFRy12ZXJzaW9uIHVzZWQgZm9yIGVuY29kaW5nIHRoZSBkYXRhLiBUaGUgdmFsdWUgMSByZWZlcnMKKyAgICAgICAgICAgICAgdG8gTVBFRy0xLCAtMiBhbmQgLTIuNSBsYXllciAxLCAyIG9yIDMuIFRoZSB2YWx1ZXMgMiBhbmQgNCByZWZlcgorICAgICAgICAgICAgICB0byB0aGUgTVBFRy1BQUMgYXVkaW8gZW5jb2Rpbmcgc2NoZW1lcy4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT5mcmFtZWQ8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PmJvb2xlYW48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjAgb3IgMTwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIEEgdHJ1ZSB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCBlYWNoIGJ1ZmZlciBjb250YWlucyBleGFjdGx5IG9uZQorICAgICAgICAgICAgICBmcmFtZS4gQSBmYWxzZSB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCBmcmFtZXMgYW5kIGJ1ZmZlcnMgZG8gbm90CisgICAgICAgICAgICAgIG5lY2Vzc2FyaWx5IG1hdGNoIHVwLgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5PmxheWVyPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4xLCAyLCBvciAzPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgVGhlIGNvbXByZXNzaW9uIHNjaGVtZSBsYXllciB1c2VkIHRvIGNvbXByZXNzIHRoZSBkYXRhCisgICAgICAgICAgICAgIDxlbXBoYXNpcz4ob25seSBpZiBtcGVndmVyc2lvbj0xKTwvZW1waGFzaXM+LgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5PmJpdHJhdGU8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PmdyZWF0ZXIgdGhhbiAwPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgVGhlIGJpdHJhdGUsIGluIGJpdHMgcGVyIHNlY29uZC4gRm9yIFZCUiAodmFyaWFibGUgYml0cmF0ZSkKKyAgICAgICAgICAgICAgTVBFRyBkYXRhLCB0aGlzIGlzIHRoZSBhdmVyYWdlIGJpdHJhdGUuCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCisgICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT5hdWRpby94LXFkbTI8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PkRhdGEgZW5jb2RlZCBieSB0aGUgUURNIHZlcnNpb24gMiBjb2RlYy48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHNwZWNpZmljIHByb3BlcnRpZXMgZGVmaW5lZCBvciBuZWVkZWQgZm9yCisgICAgICAgICAgICAgIHRoaXMgdHlwZS4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisKKyAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5PmF1ZGlvL3gtcG4tcmVhbGF1ZGlvPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5SZWFsbWVkaWEgQXVkaW8gZGF0YS48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PnJhdmVyc2lvbjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+MSBvciAyPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgVGhlIHZlcnNpb24gb2YgdGhlIFJlYWwgQXVkaW8gY29kZWMgdXNlZCB0byBlbmNvZGUgdGhlIHN0cmVhbS4KKyAgICAgICAgICAgICAgMSBzdGFuZHMgZm9yIGEgMTRrNCBzdHJlYW0sIDIgc3RhbmRzIGZvciBhIDI4azggc3RyZWFtLgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKworICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KKworICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnk+YXVkaW8veC1zcGVleDwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+RGF0YSBlbmNvZGVkIGJ5IHRoZSBTcGVleCBhdWRpbyBjb2RlYzwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gc3BlY2lmaWMgcHJvcGVydGllcyBkZWZpbmVkIG9yIG5lZWRlZCBmb3IKKyAgICAgICAgICAgICAgdGhpcyB0eXBlLgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKworICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KKworICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnk+YXVkaW8veC12b3JiaXM8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PlZvcmJpcyBhdWRpbyBkYXRhPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSBubyBzcGVjaWZpYyBwcm9wZXJ0aWVzIGRlZmluZWQgb3IgbmVlZGVkIGZvcgorICAgICAgICAgICAgICB0aGlzIHR5cGUuCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCisgICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT5hdWRpby94LXdtYTwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+V2luZG93cyBNZWRpYSBBdWRpbzwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+d21hdmVyc2lvbjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+MSwyIG9yIDM8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBUaGUgdmVyc2lvbiBvZiB0aGUgV01BIGNvZGVjIHVzZWQgdG8gZW5jb2RlIHRoZSBzdHJlYW0uCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCisgICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT5hdWRpby94LXBhcmlzPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5FbnNvbmlxIFBBUklTIGF1ZGlvPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSBubyBzcGVjaWZpYyBwcm9wZXJ0aWVzIGRlZmluZWQgb3IgbmVlZGVkIGZvcgorICAgICAgICAgICAgICB0aGlzIHR5cGUuCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCisgICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT5hdWRpby94LXN2eDwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+QW1pZ2EgSUZGIC8gU1ZYOCAvIFNWMTYgYXVkaW88L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHNwZWNpZmljIHByb3BlcnRpZXMgZGVmaW5lZCBvciBuZWVkZWQgZm9yCisgICAgICAgICAgICAgIHRoaXMgdHlwZS4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisKKyAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5PmF1ZGlvL3gtbmlzdDwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+U3BoZXJlIE5JU1QgYXVkaW88L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHNwZWNpZmljIHByb3BlcnRpZXMgZGVmaW5lZCBvciBuZWVkZWQgZm9yCisgICAgICAgICAgICAgIHRoaXMgdHlwZS4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisKKyAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5PmF1ZGlvL3gtdm9jPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5Tb3VuZCBCbGFzdGVyIFZPQyBhdWRpbzwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gc3BlY2lmaWMgcHJvcGVydGllcyBkZWZpbmVkIG9yIG5lZWRlZCBmb3IKKyAgICAgICAgICAgICAgdGhpcyB0eXBlLgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKworICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KKworICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnk+YXVkaW8veC1pcmNhbTwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+QmVya2VsZXkvSVJDQU0vQ0FSTCBhdWRpbzwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gc3BlY2lmaWMgcHJvcGVydGllcyBkZWZpbmVkIG9yIG5lZWRlZCBmb3IKKyAgICAgICAgICAgICAgdGhpcyB0eXBlLgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKworICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KKworICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnk+YXVkaW8veC13NjQ8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PlNvbmljIEZvdW5kcnkncyA2NCBiaXQgUklGRi9XQVY8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHNwZWNpZmljIHByb3BlcnRpZXMgZGVmaW5lZCBvciBuZWVkZWQgZm9yCisgICAgICAgICAgICAgIHRoaXMgdHlwZS4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisKKyAgICAgICAgPC90Ym9keT4KKyAgICAgICAgPC90Z3JvdXA+CisgICAgICA8L3RhYmxlPgorCisgICAgICA8dGFibGUgZnJhbWU9ImFsbCIgaWQ9InRhYmxlLXZpZGVvLXR5cGVzIiB4cmVmbGFiZWw9IlRhYmxlIG9mIFZpZGVvIFR5cGVzIj4KKyAgICAgICAgPHRpdGxlPlRhYmxlIG9mIFZpZGVvIFR5cGVzPC90aXRsZT4KKyAgICAgICAgPHRncm91cCBjb2xzPSI2IiBhbGlnbj0ibGVmdCIgY29sc2VwPSIxIiByb3dzZXA9IjEiPgorICAgICAgICA8Y29sc3BlYyBjb2xudW09IjEiIGNvbG5hbWU9ImNvbHYxIiBjb2x3aWR0aD0iMSoiLz4KKyAgICAgICAgPGNvbHNwZWMgY29sbnVtPSI2IiBjb2xuYW1lPSJjb2x2NiIgY29sd2lkdGg9IjYqIi8+CisgICAgICAgIDxzcGFuc3BlYyBzcGFubmFtZT0iZnVsbHdpZHRoIiBuYW1lc3Q9ImNvbHYxIiBuYW1lZW5kPSJjb2x2NiIvPgorCisgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5Pk1pbWUgVHlwZTwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+RGVzY3JpcHRpb248L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PlByb3BlcnR5PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5Qcm9wZXJ0eSBUeXBlPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5Qcm9wZXJ0eSBWYWx1ZXM8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PlByb3BlcnR5IERlc2NyaXB0aW9uPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgPC90aGVhZD4KKworICAgICAgICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCisgICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgc3VidGl0bGUgIyMjIyMjIyMjIyMjIyAtLT4KKworICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnkgc3Bhbm5hbWU9ImZ1bGx3aWR0aCI+CisgICAgICAgICAgICAgIDxlbXBoYXNpcz5BbGwgdmlkZW8gdHlwZXMuPC9lbXBoYXNpcz4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisKKyAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5IG1vcmVyb3dzPSIyIj52aWRlby8qPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeSBtb3Jlcm93cz0iMiI+CisgICAgICAgICAgICAgIDxlbXBoYXNpcz5BbGwgdmlkZW8gdHlwZXM8L2VtcGhhc2lzPgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT53aWR0aDwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+Z3JlYXRlciB0aGFuIDA8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PlRoZSB3aWR0aCBvZiB0aGUgdmlkZW8gaW1hZ2U8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnk+aGVpZ2h0PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5ncmVhdGVyIHRoYW4gMDwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+VGhlIGhlaWdodCBvZiB0aGUgdmlkZW8gaW1hZ2U8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnk+ZnJhbWVyYXRlPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5mcmFjdGlvbjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+Z3JlYXRlciBvciBlcXVhbCAwPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgVGhlIChhdmVyYWdlKSBmcmFtZXJhdGUgaW4gZnJhbWVzIHBlciBzZWNvbmQuIE5vdGUgdGhhdCB0aGlzCisgICAgICAgICAgICAgIHByb3BlcnR5IGRvZXMgbm90IGd1YXJhbnRlZSBpbiA8ZW1waGFzaXM+YW55PC9lbXBoYXNpcz4gd2F5IHRoYXQKKyAgICAgICAgICAgICAgaXQgd2lsbCBhY3R1YWxseSBjb21lIGNsb3NlIHRvIHRoaXMgdmFsdWUuIElmIHlvdSBuZWVkIGEgZml4ZWQKKyAgICAgICAgICAgICAgZnJhbWVyYXRlLCBwbGVhc2UgdXNlIGFuIGVsZW1lbnQgdGhhdCBwcm92aWRlcyB0aGF0IChzdWNoIGFzCisgICAgICAgICAgICAgIDxxdW90ZT52aWRlb3JhdGU8L3F1b3RlPikuIDAgbWVhbnMgYSB2YXJpYWJsZSBmcmFtZXJhdGUuCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCisgICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgc3VidGl0bGUgIyMjIyMjIyMjIyMjIyAtLT4KKworICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnkgc3Bhbm5hbWU9ImZ1bGx3aWR0aCI+CisgICAgICAgICAgICAgIDxlbXBoYXNpcz5BbGwgcmF3IHZpZGVvIHR5cGVzLjwvZW1waGFzaXM+CisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCisgICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT52aWRlby94LXJhdy15dXY8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PllVViAob3IgWSdDYidDcikgdmlkZW8gZm9ybWF0LjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+Zm9ybWF0PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5mb3VyY2M8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBZVVkyLCBZVllVLCBVWVZZLCBZNDFQLCBJWVUyLCBZNDJCLCBZVjEyLCBJNDIwLCBZNDFCLCBZVVY5LCBZVlU5LAorICAgICAgICAgICAgICBZODAwCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBUaGUgbGF5b3V0IG9mIHRoZSB2aWRlby4gU2VlIDx1bGluayB0eXBlPSJodHRwIgorICAgICAgICAgICAgICB1cmw9Imh0dHA6Ly93d3cuZm91cmNjLm9yZy8iPkZvdXJDQyBkZWZpbml0aW9uIHNpdGU8L3VsaW5rPgorICAgICAgICAgICAgICBmb3IgcmVmZXJlbmNlcyBhbmQgZGVmaW5pdGlvbnMuIFlVWTIsIFlWWVUgYW5kIFVZVlkgYXJlIDQ6MjoyCisgICAgICAgICAgICAgIHBhY2tlZC1waXhlbCwgWTQxUCBpcyA0OjE6MSBwYWNrZWQtcGl4ZWwgYW5kIElZVTIgaXMgNDo0OjQKKyAgICAgICAgICAgICAgcGFja2VkLXBpeGVsLiBZNDJCIGlzIDQ6MjoyIHBsYW5hciwgWVYxMiBhbmQgSTQyMCBhcmUgNDoyOjAKKyAgICAgICAgICAgICAgcGxhbmFyLCBZNDFCIGlzIDQ6MToxIHBsYW5hciBhbmQgWVVWOSBhbmQgWVZVOSBhcmUgNDoxOjAgcGxhbmFyLgorICAgICAgICAgICAgICBZODAwIGNvbnRhaW5zIFktc2FtcGxlcyBvbmx5IChibGFjay93aGl0ZSkuCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeSBtb3Jlcm93cz0iMyI+dmlkZW8veC1yYXctcmdiPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeSBtb3Jlcm93cz0iMyI+UmVkLUdyZWVuLUJsdWUgKFJHQikgdmlkZW8uPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5icHA8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PmdyZWF0ZXIgdGhhbiAwPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgVGhlIG51bWJlciBvZiBiaXRzIGFsbG9jYXRlZCBwZXIgcGl4ZWwuIFRoaXMgaXMgdXN1YWxseSAxNiwgMjQKKyAgICAgICAgICAgICAgb3IgMzIuCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT5kZXB0aDwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+Z3JlYXRlciB0aGFuIDA8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIGJpdHMgdXNlZCBwZXIgcGl4ZWwgYnkgdGhlIFIvRy9CIGNvbXBvbmVudHMuIFRoaXMKKyAgICAgICAgICAgICAgaXMgdXN1YWxseSAxNSwgMTYgb3IgMjQuCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT5lbmRpYW5uZXNzPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5HX0JJR19FTkRJQU4gKDQzMjEpIG9yIEdfTElUVExFX0VORElBTiAoMTIzNCk8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBUaGUgb3JkZXIgb2YgYnl0ZXMgaW4gYSBzYW1wbGUuIFRoZSB2YWx1ZSBHX0xJVFRMRV9FTkRJQU4gKDEyMzQpCisgICAgICAgICAgICAgIG1lYW5zIDxxdW90ZT5saXR0bGUtZW5kaWFuPC9xdW90ZT4gKGJ5dGUtb3JkZXIgaXMgPHF1b3RlPmxlYXN0CisgICAgICAgICAgICAgIHNpZ25pZmljYW50IGJ5dGUgZmlyc3Q8L3F1b3RlPikuIFRoZSB2YWx1ZSBHX0JJR19FTkRJQU4gKDQzMjEpCisgICAgICAgICAgICAgIG1lYW5zIDxxdW90ZT5iaWctZW5kaWFuPC9xdW90ZT4gKGJ5dGUgb3JkZXIgaXMgPHF1b3RlPm1vc3QKKyAgICAgICAgICAgICAgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdDwvcXVvdGU+KS4gRm9yIDI0LzMyYnBwLCB0aGlzIHNob3VsZCBhbHdheXMKKyAgICAgICAgICAgICAgYmUgYmlnIGVuZGlhbiBiZWNhdXNlIHRoZSBieXRlIG9yZGVyIGNhbiBiZSBnaXZlbiBpbiBib3RoLgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKworICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnk+cmVkX21hc2ssIGdyZWVuX21hc2sgYW5kIGJsdWVfbWFzazwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+YW55PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgVGhlIG1hc2tzIHRoYXQgY292ZXIgYWxsIHRoZSBiaXRzIHVzZWQgYnkgZWFjaCBvZiB0aGUgc2FtcGxlcy4KKyAgICAgICAgICAgICAgVGhlIG1hc2sgc2hvdWxkIGJlIGdpdmVuIGluIHRoZSBlbmRpYW5uZXNzIHNwZWNpZmllZCBhYm92ZS4gVGhpcworICAgICAgICAgICAgICBtZWFucyB0aGF0IGZvciAyNC8zMmJwcCwgdGhlIG1hc2tzIG1pZ2h0IGJlIG9wcG9zaXRlIHRvIGhvc3QgYnl0ZQorICAgICAgICAgICAgICBvcmRlciAoaWYgeW91IGFyZSB3b3JraW5nIG9uIGxpdHRsZS1lbmRpYW4gY29tcHV0ZXJzKS4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisKKyAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyBzdWJ0aXRsZSAjIyMjIyMjIyMjIyMjIC0tPgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeSBzcGFubmFtZT0iZnVsbHdpZHRoIj4KKyAgICAgICAgICAgICAgPGVtcGhhc2lzPkFsbCBlbmNvZGVkIHZpZGVvIHR5cGVzLjwvZW1waGFzaXM+CisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCisgICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT52aWRlby94LTNpdng8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjNpdnggdmlkZW8uPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSBubyBzcGVjaWZpYyBwcm9wZXJ0aWVzIGRlZmluZWQgb3IgbmVlZGVkIGZvcgorICAgICAgICAgICAgICB0aGlzIHR5cGUuCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCisgICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT52aWRlby94LWRpdng8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PkRpdlggdmlkZW8uPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5kaXZ4dmVyc2lvbjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+MywgNCBvciA1PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgVmVyc2lvbiBvZiB0aGUgRGl2WCBjb2RlYyB1c2VkIHRvIGVuY29kZSB0aGUgc3RyZWFtLgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKworICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KKworICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnk+dmlkZW8veC1kdjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+RGlnaXRhbCBWaWRlby48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PnN5c3RlbXN0cmVhbTwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+Ym9vbGVhbjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+RkFMU0U8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBJbmRpY2F0ZXMgdGhhdCB0aGlzIHN0cmVhbSBpcyA8ZW1waGFzaXM+bm90PC9lbXBoYXNpcz4gYSBzeXN0ZW0KKyAgICAgICAgICAgICAgY29udGFpbmVyIHN0cmVhbS4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisKKyAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5PnZpZGVvL3gtZmZ2PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5GRk1wZWcgdmlkZW8uPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5mZnZ2ZXJzaW9uPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4xPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgVmVyc2lvbiBvZiB0aGUgRkZNcGVnIHZpZGVvIGNvZGVjIHVzZWQgdG8gZW5jb2RlIHRoZSBzdHJlYW0uCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCisgICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeSBtb3Jlcm93cz0iMSI+dmlkZW8veC1oMjYzPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeSBtb3Jlcm93cz0iMSI+SC0yNjMgdmlkZW8uPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT52YXJpYW50PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5zdHJpbmc8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5Pml0dSwgbGVhZCwgbWljcm9zb2Z0LCB2ZG9saXZlLCB2aXZvLCB4aXJsaW5rIDwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIFZlbmRvciBzcGVjaWZpYyB2YXJpYW50IG9mIHRoZSBmb3JtYXQuICdpdHUnIGlzIHRoZSBzdGFuZGFyZC4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT5oMjYzdmVyc2lvbjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+c3RyaW5nPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5oMjYzLCBoMjYzcCwgaDI2M3BwPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgRW5oYW5jZWQgdmVyc2lvbnMgb2YgdGhlIGgyNjMgY29kZWMuCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCisgICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT52aWRlby94LWgyNjQ8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PkgtMjY0IHZpZGVvLjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+dmFyaWFudDwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+c3RyaW5nPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5pdHUsIHZpZGVvc29mdDwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIFZlbmRvciBzcGVjaWZpYyB2YXJpYW50IG9mIHRoZSBmb3JtYXQuICdpdHUnIGlzIHRoZSBzdGFuZGFyZC4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisKKyAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5PnZpZGVvL3gtaHVmZnl1djwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+SHVmZnl1diB2aWRlby48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHNwZWNpZmljIHByb3BlcnRpZXMgZGVmaW5lZCBvciBuZWVkZWQgZm9yCisgICAgICAgICAgICAgIHRoaXMgdHlwZS4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisKKyAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5PnZpZGVvL3gtaW5kZW88L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PkluZGVvIHZpZGVvLjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+aW5kZW92ZXJzaW9uPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4zPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgVmVyc2lvbiBvZiB0aGUgSW5kZW8gY29kZWMgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0uCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCisgICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT52aWRlby94LWludGVsLWgyNjM8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PkgtMjYzIHZpZGVvLjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+dmFyaWFudDwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+c3RyaW5nPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5pbnRlbDwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIFZlbmRvciBzcGVjaWZpYyB2YXJpYW50IG9mIHRoZSBmb3JtYXQuCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCisgICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT52aWRlby94LWpwZWc8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5Pk1vdGlvbi1KUEVHIHZpZGVvLjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gc3BlY2lmaWMgcHJvcGVydGllcyBkZWZpbmVkIG9yIG5lZWRlZCBmb3IKKyAgICAgICAgICAgICAgdGhpcyB0eXBlLiBOb3RlIHRoYXQgdmlkZW8veC1qcGVnIG9ubHkgYXBwbGllcyB0byBNb3Rpb24tSlBFRworICAgICAgICAgICAgICBwaWN0dXJlcyAoWVVZMiBjb2xvdXJzcGFjZSkuIFJHQiBjb2xvdXJzcGFjZSBKUEVHIGltYWdlcyBhcmUKKyAgICAgICAgICAgICAgcmVmZXJyZWQgdG8gYXMgaW1hZ2UvanBlZyAoSlBFRyBpbWFnZSkuCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCisgICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeSBtb3Jlcm93cz0iMSI+dmlkZW8vbXBlZzwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnkgbW9yZXJvd3M9IjEiPk1QRUcgdmlkZW8uPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5tcGVndmVyc2lvbjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+MSwgMiBvciA0PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgVmVyc2lvbiBvZiB0aGUgTVBFRyBjb2RlYyB0aGF0IHRoaXMgc3RyZWFtIHdhcyBlbmNvZGVkIHdpdGguCisgICAgICAgICAgICAgIE5vdGUgdGhhdCB3ZSBoYXZlIGRpZmZlcmVudCBtaW1ldHlwZXMgZm9yIDNpdngsIFh2aUQsIERpdlggYW5kCisgICAgICAgICAgICAgICJzdGFuZGFyZCIgSVNPIE1QRUctNC4gVGhpcyBpcyA8ZW1waGFzaXM+bm90PC9lbXBoYXNpcz4gYSBnb29kCisgICAgICAgICAgICAgIHRoaW5nIGFuZCB3ZSdyZSBmdWxseSBhd2FyZSBvZiB0aGlzLiBIb3dldmVyLCB3ZSBkbyBub3QgaGF2ZSBhCisgICAgICAgICAgICAgIHNvbHV0aW9uIHlldC4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT5zeXN0ZW1zdHJlYW08L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PmJvb2xlYW48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PkZBTFNFPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgSW5kaWNhdGVzIHRoYXQgdGhpcyBzdHJlYW0gaXMgPGVtcGhhc2lzPm5vdDwvZW1waGFzaXM+IGEgc3lzdGVtCisgICAgICAgICAgICAgIGNvbnRhaW5lciBzdHJlYW0uCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCisgICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT52aWRlby94LW1zbXBlZzwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+TWljcm9zb2Z0IE1QRUctNCB2aWRlbyBkZXZpYXRpb25zLjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+bXNtcGVndmVyc2lvbjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+NDEsIDQyIG9yIDQzPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgVmVyc2lvbiBvZiB0aGUgTVMtTVBFRy00LWxpa2UgY29kZWMgdGhhdCB3YXMgdXNlZCB0byBlbmNvZGUgdGhpcworICAgICAgICAgICAgICB2ZXJzaW9uLiBBIHZhbHVlIG9mIDQxIHJlZmVycyB0byBNUyBNUEVHIDQuMSwgNDIgdG8gNC4yIGFuZCA0MworICAgICAgICAgICAgICB0byB2ZXJzaW9uIDQuMy4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisKKyAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5PnZpZGVvL3gtbXN2aWRlb2NvZGVjPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5NaWNyb3NvZnQgVmlkZW8gMSAob2xkaXNoIGNvZGVjKS48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5Pm1zdmlkZW92ZXJzaW9uPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4xPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgVmVyc2lvbiBvZiB0aGUgY29kZWMgLSBhbHdheXMgMS4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisKKyAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5PnZpZGVvL3gtcG4tcmVhbHZpZGVvPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5SZWFsbWVkaWEgdmlkZW8uPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5ybXZlcnNpb248L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjEsIDIgb3IgMzwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIFZlcnNpb24gb2YgdGhlIFJlYWwgVmlkZW8gY29kZWMgdGhhdCB0aGlzIHN0cmVhbSB3YXMgZW5jb2RlZAorICAgICAgICAgICAgICB3aXRoLgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKworICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KKworICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnkgbW9yZXJvd3M9IjIiPnZpZGVvL3gtcmxlPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeSBtb3Jlcm93cz0iMiI+UkxFIGFuaW1hdGlvbiBmb3JtYXQuPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5sYXlvdXQ8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PnN0cmluZzwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+Im1pY3Jvc29mdCIgb3IgInF1aWNrdGltZSI8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBUaGUgUkxFIGZvcm1hdCBpbnNpZGUgdGhlIE1pY3Jvc29mdCBBVkkgY29udGFpbmVyIGhhcyBhCisgICAgICAgICAgICAgIGRpZmZlcmVudCBieXRlIGxheW91dCB0aGFuIHRoZSBSTEUgZm9ybWF0IGluc2lkZSBBcHBsZSdzCisgICAgICAgICAgICAgIFF1aWNrdGltZSBjb250YWluZXI7IHRoaXMgcHJvcGVydHkga2VlcHMgdHJhY2sgb2YgdGhlCisgICAgICAgICAgICAgIGxheW91dC4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT5kZXB0aDwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+MSB0byA2NDwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIEJpdCBkZXB0aCBvZiB0aGUgdXNlZCBwYWxldHRlLiBUaGlzIG1lYW5zIHRoYXQgdGhlIHBhbGV0dGUKKyAgICAgICAgICAgICAgdGhhdCBiZWxvbmdzIHRvIHRoaXMgZm9ybWF0IGRlZmluZXMgMl5kZXB0aCBjb2xvcnMuCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnk+cGFsZXR0ZV9kYXRhPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5Hc3RCdWZmZXI8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIEJ1ZmZlciBjb250YWluaW5nIGEgY29sb3IgcGFsZXR0ZSAoaW4gbmF0aXZlLWVuZGlhbiBSR0JBKSB1c2VkCisgICAgICAgICAgICAgIGJ5IHRoaXMgZm9ybWF0LiBUaGUgYnVmZmVyIGlzIG9mIHNpemUgNCoyXmRlcHRoLgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKworICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KKworICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnk+dmlkZW8veC1zdnE8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PlNvcmVuc2VuIFZpZGVvLjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+c3ZxdmVyc2lvbjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+MSBvciAzPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgVmVyc2lvbiBvZiB0aGUgU29yZW5zZW4gY29kZWMgdGhhdCB0aGUgc3RyZWFtIHdhcyBlbmNvZGVkIHdpdGguCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCisgICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT52aWRlby94LXRhcmtpbjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+VGFya2luIHZpZGVvLjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gc3BlY2lmaWMgcHJvcGVydGllcyBkZWZpbmVkIG9yIG5lZWRlZCBmb3IKKyAgICAgICAgICAgICAgdGhpcyB0eXBlLgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKworICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KKworICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnk+dmlkZW8veC10aGVvcmE8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PlRoZW9yYSB2aWRlby48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHNwZWNpZmljIHByb3BlcnRpZXMgZGVmaW5lZCBvciBuZWVkZWQgZm9yCisgICAgICAgICAgICAgIHRoaXMgdHlwZS4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisKKyAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5PnZpZGVvL3gtdnAzPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5WUC0zIHZpZGVvLjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gc3BlY2lmaWMgcHJvcGVydGllcyBkZWZpbmVkIG9yIG5lZWRlZCBmb3IKKyAgICAgICAgICAgICAgdGhpcyB0eXBlLiBOb3RlIHRoYXQgd2UgaGF2ZSBkaWZmZXJlbnQgbWltZXR5cGVzIGZvciBWUC0zIGFuZAorICAgICAgICAgICAgICBUaGVvcmEsIHdoaWNoIGlzIG5vdCBuZWNlc3NhcmlseSBhIGdvb2QgaWRlYS4gVGhpcyBjb3VsZCBwcm9iYWJseQorICAgICAgICAgICAgICBiZSBpbXByb3ZlZC4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisKKyAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5PnZpZGVvL3gtd212PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5XaW5kb3dzIE1lZGlhIFZpZGVvPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT53bXZ2ZXJzaW9uPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4xLDIgb3IgMzwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIFZlcnNpb24gb2YgdGhlIFdNViBjb2RlYyB0aGF0IHRoZSBzdHJlYW0gd2FzIGVuY29kZWQgd2l0aC4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisKKyAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5PnZpZGVvL3gteHZpZDwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+WHZpRCB2aWRlby48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHNwZWNpZmljIHByb3BlcnRpZXMgZGVmaW5lZCBvciBuZWVkZWQgZm9yCisgICAgICAgICAgICAgIHRoaXMgdHlwZS4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisKKyAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyBzdWJ0aXRsZSAjIyMjIyMjIyMjIyMjIC0tPgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeSBzcGFubmFtZT0iZnVsbHdpZHRoIj4KKyAgICAgICAgICAgICAgPGVtcGhhc2lzPkFsbCBpbWFnZSB0eXBlcy48L2VtcGhhc2lzPgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKworCSAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT5pbWFnZS9naWY8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PkdyYXBoaWNzIEludGVyY2hhbmdlIEZvcm1hdC48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHNwZWNpZmljIHByb3BlcnRpZXMgZGVmaW5lZCBvciBuZWVkZWQgZm9yCisgICAgICAgICAgICAgIHRoaXMgdHlwZS4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisKKyAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5PmltYWdlL2pwZWc8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PkpvaW50IFBpY3R1cmUgRXhwZXJ0IEdyb3VwIEltYWdlLjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gc3BlY2lmaWMgcHJvcGVydGllcyBkZWZpbmVkIG9yIG5lZWRlZCBmb3IKKyAgICAgICAgICAgICAgdGhpcyB0eXBlLiBOb3RlIHRoYXQgaW1hZ2UvanBlZyBvbmx5IGFwcGxpZXMgdG8gUkdCLWNvbG91cnNwYWNlCisgICAgICAgICAgICAgIEpQRUcgaW1hZ2VzOyBZVVkyLWNvbG91cnNwYWNlIEpQRUcgcGljdHVyZXMgYXJlIHJlZmVycmVkIHRvIGFzCisgICAgICAgICAgICAgIHZpZGVvL3gtanBlZyAoIk1vdGlvbiBKUEVHIikuCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCisJICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5PmltYWdlL3BuZzwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+UG9ydGFibGUgTmV0d29yayBHcmFwaGljcyBJbWFnZS48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHNwZWNpZmljIHByb3BlcnRpZXMgZGVmaW5lZCBvciBuZWVkZWQgZm9yCisgICAgICAgICAgICAgIHRoaXMgdHlwZS4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisKKwkgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KKworICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnk+aW1hZ2UvdGlmZjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+VGFnZ2VkIEltYWdlIEZpbGUgRm9ybWF0LjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gc3BlY2lmaWMgcHJvcGVydGllcyBkZWZpbmVkIG9yIG5lZWRlZCBmb3IKKyAgICAgICAgICAgICAgdGhpcyB0eXBlLgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgPC90Ym9keT4KKyAgICAgICAgPC90Z3JvdXA+CisgICAgICA8L3RhYmxlPgorCisgICAgICA8dGFibGUgZnJhbWU9ImFsbCIgaWQ9InRhYmxlLWNvbnRhaW5lci10eXBlcyIgeHJlZmxhYmVsPSJUYWJsZSBvZiBDb250YWluZXIgVHlwZXMiPgorICAgICAgICA8dGl0bGU+VGFibGUgb2YgQ29udGFpbmVyIFR5cGVzPC90aXRsZT4KKyAgICAgICAgPHRncm91cCBjb2xzPSI2IiBhbGlnbj0ibGVmdCIgY29sc2VwPSIxIiByb3dzZXA9IjEiPgorICAgICAgICA8Y29sc3BlYyBjb2xudW09IjEiIGNvbG5hbWU9ImNvbGMxIiBjb2x3aWR0aD0iMSoiLz4KKyAgICAgICAgPGNvbHNwZWMgY29sbnVtPSI2IiBjb2xuYW1lPSJjb2xjNiIgY29sd2lkdGg9IjYqIi8+CisgICAgICAgIDxzcGFuc3BlYyBzcGFubmFtZT0iZnVsbHdpZHRoIiBuYW1lc3Q9ImNvbGMxIiBuYW1lZW5kPSJjb2xjNiIvPgorCisgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5Pk1pbWUgVHlwZTwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+RGVzY3JpcHRpb248L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PlByb3BlcnR5PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5Qcm9wZXJ0eSBUeXBlPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5Qcm9wZXJ0eSBWYWx1ZXM8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PlByb3BlcnR5IERlc2NyaXB0aW9uPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgPC90aGVhZD4KKworICAgICAgICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCisgICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT52aWRlby94LW1zLWFzZjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+QWR2YW5jZWQgU3RyZWFtaW5nIEZvcm1hdCAoQVNGKS48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHNwZWNpZmljIHByb3BlcnRpZXMgZGVmaW5lZCBvciBuZWVkZWQgZm9yCisgICAgICAgICAgICAgIHRoaXMgdHlwZS4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisKKyAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5PnZpZGVvL3gtbXN2aWRlbzwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+QVZJLjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gc3BlY2lmaWMgcHJvcGVydGllcyBkZWZpbmVkIG9yIG5lZWRlZCBmb3IKKyAgICAgICAgICAgICAgdGhpcyB0eXBlLgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKworICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KKworICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnk+dmlkZW8veC1kdjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+RGlnaXRhbCBWaWRlby48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PnN5c3RlbXN0cmVhbTwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+Ym9vbGVhbjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+VFJVRTwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIEluZGljYXRlcyB0aGF0IHRoaXMgaXMgYSBjb250YWluZXIgc3lzdGVtIHN0cmVhbSByYXRoZXIgdGhhbiBhbgorICAgICAgICAgICAgICBlbGVtZW50YXJ5IHZpZGVvIHN0cmVhbS4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisKKyAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5PnZpZGVvL3gtbWF0cm9za2E8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5Pk1hdHJvc2thLjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gc3BlY2lmaWMgcHJvcGVydGllcyBkZWZpbmVkIG9yIG5lZWRlZCBmb3IKKyAgICAgICAgICAgICAgdGhpcyB0eXBlLgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKworICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KKworICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnk+dmlkZW8vbXBlZzwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+TW90aW9uIFBpY3R1cmVzIEV4cGVydCBHcm91cCBTeXN0ZW0gU3RyZWFtLjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+c3lzdGVtc3RyZWFtPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5ib29sZWFuPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5UUlVFPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgSW5kaWNhdGVzIHRoYXQgdGhpcyBpcyBhIGNvbnRhaW5lciBzeXN0ZW0gc3RyZWFtIHJhdGhlciB0aGFuIGFuCisgICAgICAgICAgICAgIGVsZW1lbnRhcnkgdmlkZW8gc3RyZWFtLgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKworICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KKworICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnk+YXBwbGljYXRpb24vb2dnPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5PZ2cuPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSBubyBzcGVjaWZpYyBwcm9wZXJ0aWVzIGRlZmluZWQgb3IgbmVlZGVkIGZvcgorICAgICAgICAgICAgICB0aGlzIHR5cGUuCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCisgICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT52aWRlby9xdWlja3RpbWU8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PlF1aWNrdGltZS48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHNwZWNpZmljIHByb3BlcnRpZXMgZGVmaW5lZCBvciBuZWVkZWQgZm9yCisgICAgICAgICAgICAgIHRoaXMgdHlwZS4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisKKyAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5PmFwcGxpY2F0aW9uL3ZuZC5ybi1yZWFsbWVkaWE8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PlJlYWxNZWRpYS48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHNwZWNpZmljIHByb3BlcnRpZXMgZGVmaW5lZCBvciBuZWVkZWQgZm9yCisgICAgICAgICAgICAgIHRoaXMgdHlwZS4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisKKyAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5PmF1ZGlvL3gtd2F2PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5XQVYuPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSBubyBzcGVjaWZpYyBwcm9wZXJ0aWVzIGRlZmluZWQgb3IgbmVlZGVkIGZvcgorICAgICAgICAgICAgICB0aGlzIHR5cGUuCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCSAgPC90Ym9keT4KKyAgICAgICAgPC90Z3JvdXA+CisgICAgICA8L3RhYmxlPgorCisgICAgICA8dGFibGUgZnJhbWU9ImFsbCIgaWQ9InRhYmxlLXN1YnRpdGxlLXR5cGVzIiB4cmVmbGFiZWw9IlRhYmxlIG9mIFN1YnRpdGxlIFR5cGVzIj4KKyAgICAgICAgPHRpdGxlPlRhYmxlIG9mIFN1YnRpdGxlIFR5cGVzPC90aXRsZT4KKyAgICAgICAgPHRncm91cCBjb2xzPSI2IiBhbGlnbj0ibGVmdCIgY29sc2VwPSIxIiByb3dzZXA9IjEiPgorICAgICAgICA8Y29sc3BlYyBjb2xudW09IjEiIGNvbG5hbWU9ImNvbHQxIiBjb2x3aWR0aD0iMSoiLz4KKyAgICAgICAgPGNvbHNwZWMgY29sbnVtPSI2IiBjb2xuYW1lPSJjb2x0NiIgY29sd2lkdGg9IjYqIi8+CisgICAgICAgIDxzcGFuc3BlYyBzcGFubmFtZT0iZnVsbHdpZHRoIiBuYW1lc3Q9ImNvbHQxIiBuYW1lZW5kPSJjb2x0NiIvPgorCisgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5Pk1pbWUgVHlwZTwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+RGVzY3JpcHRpb248L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PlByb3BlcnR5PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5Qcm9wZXJ0eSBUeXBlPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5Qcm9wZXJ0eSBWYWx1ZXM8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PlByb3BlcnR5IERlc2NyaXB0aW9uPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgPC90aGVhZD4KKworICAgICAgICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCisgICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIE5vbmUgZGVmaW5lZCB5ZXQuCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCSAgPC90Ym9keT4KKyAgICAgICAgPC90Z3JvdXA+CisgICAgICA8L3RhYmxlPgorCisgICAgICA8dGFibGUgZnJhbWU9ImFsbCIgaWQ9InRhYmxlLW90aGVyLXR5cGVzIiB4cmVmbGFiZWw9IlRhYmxlIG9mIE90aGVyIFR5cGVzIj4KKyAgICAgICAgPHRpdGxlPlRhYmxlIG9mIE90aGVyIFR5cGVzPC90aXRsZT4KKyAgICAgICAgPHRncm91cCBjb2xzPSI2IiBhbGlnbj0ibGVmdCIgY29sc2VwPSIxIiByb3dzZXA9IjEiPgorICAgICAgICA8Y29sc3BlYyBjb2xudW09IjEiIGNvbG5hbWU9ImNvbG8xIiBjb2x3aWR0aD0iMSoiLz4KKyAgICAgICAgPGNvbHNwZWMgY29sbnVtPSI2IiBjb2xuYW1lPSJjb2xvNiIgY29sd2lkdGg9IjYqIi8+CisgICAgICAgIDxzcGFuc3BlYyBzcGFubmFtZT0iZnVsbHdpZHRoIiBuYW1lc3Q9ImNvbG8xIiBuYW1lZW5kPSJjb2xvNiIvPgorCisgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5Pk1pbWUgVHlwZTwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+RGVzY3JpcHRpb248L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PlByb3BlcnR5PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5Qcm9wZXJ0eSBUeXBlPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5Qcm9wZXJ0eSBWYWx1ZXM8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PlByb3BlcnR5IERlc2NyaXB0aW9uPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgPC90aGVhZD4KKworICAgICAgICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCisgICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIE5vbmUgZGVmaW5lZCB5ZXQuCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCSAgPC90Ym9keT4KKyAgICAgICAgPC90Z3JvdXA+CisgICAgICA8L3RhYmxlPgorICA8L3NlY3QxPgorPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9wd2cvYXBwZW5kaXgtY2hlY2tsaXN0LnhtbCBiL2RvY3MvcHdnL2FwcGVuZGl4LWNoZWNrbGlzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAzMDMxZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvcHdnL2FwcGVuZGl4LWNoZWNrbGlzdC54bWwKQEAgLTAsMCArMSwyMDUgQEAKKzxjaGFwdGVyIGlkPSJjaGFwdGVyLWNoZWNrbGlzdC1lbGVtZW50Ij4KKyAgPHRpdGxlPlRoaW5ncyB0byBjaGVjayB3aGVuIHdyaXRpbmcgYW4gZWxlbWVudDwvdGl0bGU+CisgIDxwYXJhPgorICAgIFRoaXMgY2hhcHRlciBjb250YWlucyBhIGZhaXJseSByYW5kb20gc2VsZWN0aW9uIG9mIHRoaW5ncyB0byB0YWtlIGNhcmUKKyAgICBvZiB3aGVuIHdyaXRpbmcgYW4gZWxlbWVudC4gSXQncyB1cCB0byB5b3UgaG93IGZhciB5b3UncmUgZ29pbmcgdG8gc3RpY2sKKyAgICB0byB0aG9zZSBndWlkZWxpbmVzLiBIb3dldmVyLCBrZWVwIGluIG1pbmQgdGhhdCB3aGVuIHlvdSdyZSB3cml0aW5nIGFuCisgICAgZWxlbWVudCBhbmQgaG9wZSBmb3IgaXQgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIG1haW5zdHJlYW0gJkdTdHJlYW1lcjsKKyAgICBkaXN0cmlidXRpb24sIGl0IDxlbXBoYXNpcz5oYXMgdG88L2VtcGhhc2lzPiBtZWV0IHRob3NlIHJlcXVpcmVtZW50cy4KKyAgICBBcyBmYXIgYXMgcG9zc2libGUsIHdlIHdpbGwgdHJ5IHRvIGV4cGxhaW4gd2h5IHRob3NlIHJlcXVpcmVtZW50cyBhcmUKKyAgICBzZXQuCisgIDwvcGFyYT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tY2hlY2tsaXN0LXN0YXRlcyI+CisgICAgPHRpdGxlPkFib3V0IHN0YXRlczwvdGl0bGU+CisKKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBNYWtlIHN1cmUgdGhlIHN0YXRlIG9mIGFuIGVsZW1lbnQgZ2V0cyByZXNldCB3aGVuIGdvaW5nIHRvCisgICAgICAgICAgPGNsYXNzbmFtZT5OVUxMPC9jbGFzc25hbWU+LiBJZGVhbGx5LCB0aGlzIHNob3VsZCBzZXQgYWxsCisgICAgICAgICAgb2JqZWN0IHByb3BlcnRpZXMgdG8gdGhlaXIgb3JpZ2luYWwgc3RhdGUuIFRoaXMgZnVuY3Rpb24KKyAgICAgICAgICBzaG91bGQgYWxzbyBiZSBjYWxsZWQgZnJvbSBfaW5pdC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgTWFrZSBzdXJlIGFuIGVsZW1lbnQgZm9yZ2V0cyA8ZW1waGFzaXM+ZXZlcnl0aGluZzwvZW1waGFzaXM+CisgICAgICAgICAgYWJvdXQgaXRzIGNvbnRhaW5lZCBzdHJlYW0gd2hlbiBnb2luZyBmcm9tCisgICAgICAgICAgPGNsYXNzbmFtZT5QQVVTRUQ8L2NsYXNzbmFtZT4gdG8gPGNsYXNzbmFtZT5SRUFEWTwvY2xhc3NuYW1lPi4gSW4KKyAgICAgICAgICA8Y2xhc3NuYW1lPlJFQURZPC9jbGFzc25hbWU+LCBhbGwgc3RyZWFtIHN0YXRlcyBhcmUgcmVzZXQuIEFuCisgICAgICAgICAgZWxlbWVudCB0aGF0IGdvZXMgZnJvbSA8Y2xhc3NuYW1lPlBBVVNFRDwvY2xhc3NuYW1lPiB0bworICAgICAgICAgIDxjbGFzc25hbWU+UkVBRFk8L2NsYXNzbmFtZT4gYW5kIGJhY2sgdG8KKyAgICAgICAgICA8Y2xhc3NuYW1lPlBBVVNFRDwvY2xhc3NuYW1lPiBzaG91bGQgc3RhcnQgcmVhZGluZyB0aGUKKyAgICAgICAgICBzdHJlYW0gZnJvbSBoZSBzdGFydCBhZ2Fpbi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgUGVvcGxlIHRoYXQgdXNlIDxjb21tYW5kPmdzdC1sYXVuY2g8L2NvbW1hbmQ+IGZvciB0ZXN0aW5nIGhhdmUKKyAgICAgICAgICB0aGUgdGVuZGVuY3kgdG8gbm90IGNhcmUgYWJvdXQgY2xlYW5pbmcgdXAuIFRoaXMgaXMKKyAgICAgICAgICA8ZW1waGFzaXM+d3Jvbmc8L2VtcGhhc2lzPi4gQW4gZWxlbWVudCBzaG91bGQgYmUgdGVzdGVkIHVzaW5nCisgICAgICAgICAgdmFyaW91cyBhcHBsaWNhdGlvbnMsIHdoZXJlIHRlc3Rpbmcgbm90IG9ubHkgbWVhbnMgdG8gPHF1b3RlPm1ha2UKKyAgICAgICAgICBzdXJlIGl0IGRvZXNuJ3QgY3Jhc2g8L3F1b3RlPiwgYnV0IGFsc28gdG8gdGVzdCBmb3IgbWVtb3J5IGxlYWtzCisgICAgICAgICAgdXNpbmcgdG9vbHMgc3VjaCBhcyA8Y29tbWFuZD52YWxncmluZDwvY29tbWFuZD4uIEVsZW1lbnRzIGhhdmUgdG8KKyAgICAgICAgICBiZSByZXVzYWJsZSBpbiBhIHBpcGVsaW5lIGFmdGVyIGhhdmluZyBiZWVuIHJlc2V0LgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1jaGVja2xpc3QtZGVidWciPgorICAgIDx0aXRsZT5EZWJ1Z2dpbmc8L3RpdGxlPgorCisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgRWxlbWVudHMgc2hvdWxkIDxlbXBoYXNpcz5uZXZlcjwvZW1waGFzaXM+IHVzZSB0aGVpciBzdGFuZGFyZAorICAgICAgICAgIG91dHB1dCBmb3IgZGVidWdnaW5nICh1c2luZyBmdW5jdGlvbnMgc3VjaCBhcyA8ZnVuY3Rpb24+cHJpbnRmCisgICAgICAgICAgKCk8L2Z1bmN0aW9uPiBvciA8ZnVuY3Rpb24+Z19wcmludCAoKTwvZnVuY3Rpb24+KS4gSW5zdGVhZCwKKyAgICAgICAgICBlbGVtZW50cyBzaG91bGQgdXNlIHRoZSBsb2dnaW5nIGZ1bmN0aW9ucyBwcm92aWRlZCBieSAmR1N0cmVhbWVyOywKKyAgICAgICAgICBuYW1lZCA8ZnVuY3Rpb24+R1NUX0RFQlVHICgpPC9mdW5jdGlvbj4sCisgICAgICAgICAgPGZ1bmN0aW9uPkdTVF9MT0cgKCk8L2Z1bmN0aW9uPiwgPGZ1bmN0aW9uPkdTVF9JTkZPICgpPC9mdW5jdGlvbj4sCisgICAgICAgICAgPGZ1bmN0aW9uPkdTVF9XQVJOSU5HICgpPC9mdW5jdGlvbj4gYW5kCisgICAgICAgICAgPGZ1bmN0aW9uPkdTVF9FUlJPUiAoKTwvZnVuY3Rpb24+LiBUaGUgdmFyaW91cyBsb2dnaW5nIGxldmVscyBjYW4KKyAgICAgICAgICBiZSB0dXJuZWQgb24gYW5kIG9mZiBhdCBydW50aW1lIGFuZCBjYW4gdGh1cyBiZSB1c2VkIGZvciBzb2x2aW5nCisgICAgICAgICAgaXNzdWVzIGFzIHRoZXkgdHVybiB1cC4gSW5zdGVhZCBvZiA8ZnVuY3Rpb24+R1NUX0xPRyAoKTwvZnVuY3Rpb24+CisgICAgICAgICAgKGFzIGFuIGV4YW1wbGUpLCB5b3UgY2FuIGFsc28gdXNlIDxmdW5jdGlvbj5HU1RfTE9HX09CSkVDVAorICAgICAgICAgICgpPC9mdW5jdGlvbj4gdG8gcHJpbnQgdGhlIG9iamVjdCB0aGF0IHlvdSdyZSBsb2dnaW5nIG91dHB1dCBmb3IuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIElkZWFsbHksIGVsZW1lbnRzIHNob3VsZCB1c2UgdGhlaXIgb3duIGRlYnVnZ2luZyBjYXRlZ29yeS4gTW9zdAorICAgICAgICAgIGVsZW1lbnRzIHVzZSB0aGUgZm9sbG93aW5nIGNvZGUgdG8gZG8gdGhhdDoKKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChteWVsZW1lbnRfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgbXllbGVtZW50X2RlYnVnCisKK1suLl0KKworc3RhdGljIHZvaWQKK2dzdF9teWVsZW1lbnRfY2xhc3NfaW5pdCAoR3N0TXllbGVtZW50Q2xhc3MgKmtsYXNzKQoreworWy4uXQorICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAobXllbGVtZW50X2RlYnVnLCAibXllbGVtZW50IiwKKwkJCSAgIDAsICJNeSBvd24gZWxlbWVudCIpOworfQorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBdCBydW50aW1lLCB5b3UgY2FuIHR1cm4gb24gZGVidWdnaW5nIHVzaW5nIHRoZSBjb21tYW5kbGluZQorICAgICAgICAgIG9wdGlvbiA8Y29tbWFuZD4tLWdzdC1kZWJ1Zz1teWVsZW1lbnQ6NTwvY29tbWFuZD4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEVsZW1lbnRzIHNob3VsZCB1c2UgR1NUX0RFQlVHX0ZVTkNQVFIgd2hlbiBzZXR0aW5nIHBhZCBmdW5jdGlvbnMgb3IKKyAgICAgICAgICBvdmVycmlkaW5nIGVsZW1lbnQgY2xhc3MgbWV0aG9kcywgZm9yIGV4YW1wbGU6CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorZ3N0X3BhZF9zZXRfZXZlbnRfZnVuYyAobXllbGVtZW50LT5zcmNwYWQsCisgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKG15X2VsZW1lbnRfc3JjX2V2ZW50KSk7CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICBUaGlzIG1ha2VzIGRlYnVnIG91dHB1dCBtdWNoIGVhc2llciB0byByZWFkIGxhdGVyIG9uLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBFbGVtZW50cyB0aGF0IGFyZSBhaW1lZCBmb3IgaW5jbHVzaW9uIGludG8gb25lIG9mIHRoZSBHU3RyZWFtZXIKKyAgICAgICAgICBtb2R1bGVzIHNob3VsZCBlbnN1cmUgY29uc2lzdGVudCBuYW1pbmcgb2YgdGhlIGVsZW1lbnQgbmFtZSwKKyAgICAgICAgICBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbiBuYW1lcy4gRm9yIGV4YW1wbGUsIGlmIHRoZSBlbGVtZW50IHR5cGUgaXMKKyAgICAgICAgICBHc3RZZWxsb3dGb29EZWMsIGZ1bmN0aW9ucyBzaG91bGQgYmUgcHJlZml4ZWQgd2l0aAorICAgICAgICAgIGdzdF95ZWxsb3dfZm9vX2RlY18gYW5kIHRoZSBlbGVtZW50IHNob3VsZCBiZSByZWdpc3RlcmVkCisgICAgICAgICAgYXMgJ3llbGxvd2Zvb2RlYycuIFNlcGFyYXRlIHdvcmRzIHNob3VsZCBiZSBzZXBhcmF0ZSBpbiB0aGlzIHNjaGVtZSwKKyAgICAgICAgICBzbyBpdCBzaG91bGQgYmUgR3N0Rm9vRGVjIGFuZCBnc3RfZm9vX2RlYywgYW5kIG5vdCBHc3RGb29kZWMgYW5kCisgICAgICAgICAgZ3N0X2Zvb2RlYy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tY2hlY2tsaXN0LXF1ZXJ5Ij4KKyAgICA8dGl0bGU+UXVlcnlpbmcsIGV2ZW50cyBhbmQgdGhlIGxpa2U8L3RpdGxlPgorCisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQWxsIGVsZW1lbnRzIHRvIHdoaWNoIGl0IGFwcGxpZXMgKHNvdXJjZXMsIHNpbmtzLCBkZW11eGVycykKKyAgICAgICAgICBzaG91bGQgaW1wbGVtZW50IHF1ZXJ5IGZ1bmN0aW9ucyBvbiB0aGVpciBwYWRzLCBzbyB0aGF0CisgICAgICAgICAgYXBwbGljYXRpb25zIGFuZCBuZWlnaGJvdXIgZWxlbWVudHMgY2FuIHJlcXVlc3QgdGhlIGN1cnJlbnQKKyAgICAgICAgICBwb3NpdGlvbiwgdGhlIHN0cmVhbSBsZW5ndGggKGlmIGtub3duKSBhbmQgc28gb24uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEVsZW1lbnRzIHNob3VsZCBtYWtlIHN1cmUgdGhleSBmb3J3YXJkIGV2ZW50cyB0aGV5IGRvIG5vdAorICAgICAgICAgIGhhbmRsZSB3aXRoIGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBldmVudCkgaW5zdGVhZCBvZgorICAgICAgICAgIGp1c3QgZHJvcHBpbmcgdGhlbS4gRXZlbnRzIHNob3VsZCBuZXZlciBiZSBkcm9wcGVkIHVubGVzcworICAgICAgICAgIHNwZWNpZmljYWxseSBpbnRlbmRlZC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgRWxlbWVudHMgc2hvdWxkIG1ha2Ugc3VyZSB0aGV5IGZvcndhcmQgcXVlcmllcyB0aGV5IGRvIG5vdAorICAgICAgICAgIGhhbmRsZSB3aXRoIGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBxdWVyeSkgaW5zdGVhZCBvZgorICAgICAgICAgIGp1c3QgZHJvcHBpbmcgdGhlbS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgRWxlbWVudHMgc2hvdWxkIHVzZSBnc3RfcGFkX2dldF9wYXJlbnQoKSBpbiBldmVudCBhbmQgcXVlcnkKKyAgICAgICAgICBmdW5jdGlvbnMsIHNvIHRoYXQgdGhleSBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IHdoaWxlIHRoZXkKKyAgICAgICAgICBhcmUgb3BlcmF0aW5nLiBOb3RlIHRoYXQgZ3N0X3BhZF9nZXRfcGFyZW50KCkgaW5jcmVhc2VzIHRoZQorICAgICAgICAgIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgZWxlbWVudCwgc28geW91IG11c3QgYmUgdmVyeSBjYXJlZnVsIHRvIGNhbGwKKyAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtZW50KSBiZWZvcmUgcmV0dXJuaW5nIGZyb20geW91ciBxdWVyeSBvcgorICAgICAgICAgIGV2ZW50IGZ1bmN0aW9uLCBvdGhlcndpc2UgeW91IHdpbGwgbGVhayBtZW1vcnkuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWNoZWNrbGlzdC10ZXN0aW5nIj4KKyAgICA8dGl0bGU+VGVzdGluZyB5b3VyIGVsZW1lbnQ8L3RpdGxlPgorCisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGNvbW1hbmQ+Z3N0LWxhdW5jaDwvY29tbWFuZD4gaXMgPGVtcGhhc2lzPm5vdDwvZW1waGFzaXM+IGEgZ29vZAorICAgICAgICAgIHRvb2wgdG8gc2hvdyB0aGF0IHlvdXIgZWxlbWVudCBpcyBmaW5pc2hlZC4gQXBwbGljYXRpb25zIHN1Y2ggYXMKKyAgICAgICAgICBSaHl0aG1ib3ggYW5kIFRvdGVtIChmb3IgR05PTUUpIG9yIEFtYXJvSyAoZm9yIEtERSkKKyAgICAgICAgICA8ZW1waGFzaXM+YXJlPC9lbXBoYXNpcz4uIDxjb21tYW5kPmdzdC1sYXVuY2g8L2NvbW1hbmQ+IHdpbGwgbm90CisgICAgICAgICAgdGVzdCB2YXJpb3VzIHRoaW5ncyBzdWNoIGFzIHByb3BlciBjbGVhbi11cCBvbiByZXNldCwgaW50ZXJydXB0CisgICAgICAgICAgZXZlbnQgaGFuZGxpbmcsIHF1ZXJ5aW5nIGFuZCBzbyBvbi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgUGFyc2VycyBhbmQgZGVtdXhlcnMgc2hvdWxkIG1ha2Ugc3VyZSB0byBjaGVjayB0aGVpciBpbnB1dC4gSW5wdXQKKyAgICAgICAgICBjYW5ub3QgYmUgdHJ1c3RlZC4gUHJldmVudCBwb3NzaWJsZSBidWZmZXIgb3ZlcmZsb3dzIGFuZCB0aGUgbGlrZS4KKyAgICAgICAgICBGZWVsIGZyZWUgdG8gZXJyb3Igb3V0IG9uIHVucmVjb3ZlcmFibGUgc3RyZWFtIGVycm9ycy4gVGVzdCB5b3VyCisgICAgICAgICAgZGVtdXhlciB1c2luZyBzdHJlYW0gY29ycnVwdGlvbiBlbGVtZW50cyBzdWNoIGFzCisgICAgICAgICAgPGNsYXNzbmFtZT5icmVha215ZGF0YTwvY2xhc3NuYW1lPiAoaW5jbHVkZWQgaW4gZ3N0LXBsdWdpbnMpLiBJdAorICAgICAgICAgIHdpbGwgcmFuZG9tbHkgaW5zZXJ0LCBkZWxldGUgYW5kIG1vZGlmeSBieXRlcyBpbiBhIHN0cmVhbSwgYW5kIGlzCisgICAgICAgICAgdGhlcmVmb3JlIGEgZ29vZCB0ZXN0IGZvciByb2J1c3RuZXNzLiBJZiB5b3VyIGVsZW1lbnQgY3Jhc2hlcworICAgICAgICAgIHdoZW4gYWRkaW5nIHRoaXMgZWxlbWVudCwgeW91ciBlbGVtZW50IG5lZWRzIGZpeGluZy4gSWYgaXQgZXJyb3JzCisgICAgICAgICAgb3V0IHByb3Blcmx5LCBpdCdzIGdvb2QgZW5vdWdoLiBJZGVhbGx5LCBpdCdkIGp1c3QgY29udGludWUgdG8KKyAgICAgICAgICB3b3JrIGFuZCBmb3J3YXJkIGRhdGEgYXMgbXVjaCBhcyBwb3NzaWJsZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgRGVtdXhlcnMgc2hvdWxkIG5vdCBhc3N1bWUgdGhhdCBzZWVraW5nIHdvcmtzLiBCZSBwcmVwYXJlZCB0bworICAgICAgICAgIHdvcmsgd2l0aCB1bnNlZWthYmxlIGlucHV0IHN0cmVhbXMgKGUuZy4gbmV0d29yayBzb3VyY2VzKSBhcworICAgICAgICAgIHdlbGwuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFNvdXJjZXMgYW5kIHNpbmtzIHNob3VsZCBiZSBwcmVwYXJlZCB0byBiZSBhc3NpZ25lZCBhbm90aGVyIGNsb2NrCisgICAgICAgICAgdGhlbiB0aGUgb25lIHRoZXkgZXhwb3NlIHRoZW1zZWx2ZXMuIEFsd2F5cyB1c2UgdGhlIHByb3ZpZGVkIGNsb2NrCisgICAgICAgICAgZm9yIHN5bmNocm9uaXphdGlvbiwgZWxzZSB5b3UnbGwgZ2V0IEEvViBzeW5jIGlzc3Vlcy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKyAgPC9zZWN0MT4KKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvcHdnL2FwcGVuZGl4LWxpY2Vuc2luZy54bWwgYi9kb2NzL3B3Zy9hcHBlbmRpeC1saWNlbnNpbmcueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMWQxOTIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3B3Zy9hcHBlbmRpeC1saWNlbnNpbmcueG1sCkBAIC0wLDAgKzEsMzggQEAKKzxjaGFwdGVyIGlkPSJjaGFwdGVyLWxpY2Vuc2luZy1hZHZpc29yeSI+CisgIDx0aXRsZT5HU3RyZWFtZXIgbGljZW5zaW5nPC90aXRsZT4KKzxzZWN0MSBpZD0ic2VjdGlvbi1hcHBsaWNhdGlvbi1saWNlbnNpbmciPgorICA8dGl0bGU+SG93IHRvIGxpY2Vuc2UgdGhlIGNvZGUgeW91IHdyaXRlIGZvciA8YXBwbGljYXRpb24+R1N0cmVhbWVyPC9hcHBsaWNhdGlvbj48L3RpdGxlPgorPHBhcmE+CitHU3RyZWFtZXIgaXMgYSBwbHVnaW4tYmFzZWQgZnJhbWV3b3JrIGxpY2Vuc2VkIHVuZGVyIHRoZSBMR1BMLiBUaGUgcmVhc29uIAorZm9yIHRoaXMgY2hvaWNlIGluIGxpY2Vuc2luZyBpcyB0byBlbnN1cmUgdGhhdCBldmVyeW9uZSBjYW4gdXNlIEdTdHJlYW1lciAKK3RvIGJ1aWxkIGFwcGxpY2F0aW9ucyB1c2luZyBsaWNlbnNlcyBvZiB0aGVpciBjaG9pY2UuCis8L3BhcmE+Cis8cGFyYT4KK1RvIGtlZXAgdGhpcyBwb2xpY3kgdmlhYmxlLCB0aGUgR1N0cmVhbWVyIGNvbW11bml0eSBoYXMgbWFkZSBhIGZldyAKK2xpY2Vuc2luZyBydWxlcyBmb3IgY29kZSB0byBiZSBpbmNsdWRlZCBpbiBHU3RyZWFtZXIncyBjb3JlIG9yIEdTdHJlYW1lcidzIAorb2ZmaWNpYWwgbW9kdWxlcywgbGlrZSBvdXIgcGx1Z2luIHBhY2thZ2VzLiBXZSByZXF1aXJlIHRoYXQgYWxsIGNvZGUgZ29pbmcgCitpbnRvIG91ciBjb3JlIHBhY2thZ2UgaXMgTEdQTC4gRm9yIHRoZSBwbHVnaW4gY29kZSwgd2UgcmVxdWlyZSB0aGUgdXNlIG9mIAordGhlIExHUEwgZm9yIGFsbCBwbHVnaW5zIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIG9yIGxpbmtpbmcgdG8gZXh0ZXJuYWwgCitsaWJyYXJpZXMuIFRoZSBvbmx5IGV4Y2VwdGlvbiB0byB0aGlzIGlzIHdoZW4gcGx1Z2lucyBjb250YWluIG9sZGVyIGNvZGUgCit1bmRlciBtb3JlIGxpYmVyYWwgbGljZW5zZXMgKGxpa2UgdGhlIE1QTCBvciBCU0QpLiBUaGV5IGNhbiB1c2UgdGhvc2UgCitsaWNlbnNlcyBpbnN0ZWFkIGFuZCB3aWxsIHN0aWxsIGJlIGNvbnNpZGVyZWQgZm9yIGluY2x1c2lvbi4gV2UgZG8gbm90IAorYWNjZXB0IEdQTCBjb2RlIHRvIGJlIGFkZGVkIHRvIG91ciBwbHVnaW5zIG1vZHVsZSwgYnV0IHdlIGRvIGFjY2VwdCAKK0xHUEwtbGljZW5zZWQgcGx1Z2lucyB1c2luZyBhbiBleHRlcm5hbCBHUEwgbGlicmFyeS4gVGhlIHJlYXNvbiBmb3IgCitkZW1hbmRpbmcgcGx1Z2lucyBiZSBsaWNlbnNlZCB1bmRlciB0aGUgTEdQTCwgZXZlbiB3aGVuIHVzaW5nIGEgR1BMIAorbGlicmFyeSwgaXMgdGhhdCBvdGhlciBkZXZlbG9wZXJzIG1pZ2h0IHdhbnQgdG8gdXNlIHRoZSBwbHVnaW4gY29kZSBhcyBhIAordGVtcGxhdGUgZm9yIHBsdWdpbnMgbGlua2luZyB0byBub24tR1BMIGxpYnJhcmllcy4KKzwvcGFyYT4KKzxwYXJhPgorV2UgYWxzbyBwbGFuIG9uIHNwbGl0dGluZyBvdXQgdGhlIHBsdWdpbnMgdXNpbmcgR1BMIGxpYnJhcmllcyBpbnRvIGEgCitzZXBhcmF0ZSBwYWNrYWdlIGV2ZW50dWFsbHkgYW5kIGltcGxlbWVudCBhIHN5c3RlbSB3aGljaCBtYWtlcyBzdXJlIGFuIAorYXBwbGljYXRpb24gd2lsbCBub3QgYmUgYWJsZSB0byBhY2Nlc3MgdGhlc2UgcGx1Z2lucyB1bmxlc3MgaXQgdXNlcyBzb21lIAorc3BlY2lhbCBjb2RlIHRvIGRvIHNvLiBUaGUgcG9pbnQgb2YgdGhpcyBpcyBub3QgdG8gYmxvY2sgR1BMLWxpY2Vuc2VkIAorcGx1Z2lucyBmcm9tIGJlaW5nIHVzZWQgYW5kIGRldmVsb3BlZCwgYnV0IHRvIG1ha2Ugc3VyZSBwZW9wbGUgYXJlIG5vdCAKK3VuaW50ZW50aW9uYWxseSB2aW9sYXRpbmcgdGhlIEdQTCBsaWNlbnNlIG9mIHNhaWQgcGx1Z2lucy4gCis8L3BhcmE+Cis8cGFyYT4KK1RoaXMgYWR2aXNvcnkgaXMgcGFydCBvZiBhIGJpZ2dlciBhZHZpc29yeSB3aXRoIGEgRkFRIHdoaWNoIHlvdSBjYW4gZmluZAorb24gdGhlIDx1bGluayB1cmw9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RvY3VtZW50YXRpb24vbGljZW5zaW5nLmh0bWwiPkdTdHJlYW1lciB3ZWJzaXRlPC91bGluaz4KKzwvcGFyYT4KKyAgPC9zZWN0MT4KKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvcHdnL2FwcGVuZGl4LXBvcnRpbmcueG1sIGIvZG9jcy9wd2cvYXBwZW5kaXgtcG9ydGluZy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdhM2VjNAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvcHdnL2FwcGVuZGl4LXBvcnRpbmcueG1sCkBAIC0wLDAgKzEsMTg4IEBACis8Y2hhcHRlciBpZD0iY2hhcHRlci1wb3J0aW5nIj4KKyAgPHRpdGxlPlBvcnRpbmcgMC44IHBsdWctaW5zIHRvIDAuMTA8L3RpdGxlPgorICA8cGFyYT4KKyAgICBUaGlzIHNlY3Rpb24gb2YgdGhlIGFwcGVuZGl4IHdpbGwgZGlzY3VzcyBzaG9ydGx5IHdoYXQgY2hhbmdlcyB0bworICAgIHBsdWdpbnMgd2lsbCBiZSBuZWVkZWQgdG8gcXVpY2tseSBhbmQgY29udmVuaWVudGx5IHBvcnQgbW9zdAorICAgIGFwcGxpY2F0aW9ucyBmcm9tICZHU3RyZWFtZXI7LTAuOCB0byAmR1N0cmVhbWVyOy0wLjEwLCB3aXRoIHJlZmVyZW5jZXMKKyAgICB0byB0aGUgcmVsZXZhbnQgc2VjdGlvbnMgaW4gdGhpcyBQbHVnaW4gV3JpdGVyJ3MgR3VpZGUgd2hlcmUgbmVlZGVkLgorICAgIFdpdGggdGhpcyBsaXN0LCBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcG9ydCBtb3N0IHBsdWdpbnMgdG8KKyAgICAmR1N0cmVhbWVyOy0wLjEwIGluIGxlc3MgdGhhbiBhIGRheS4gRXhjZXB0aW9ucyBhcmUgZWxlbWVudHMgdGhhdCB3aWxsCisgICAgcmVxdWlyZSBhIGJhc2UgY2xhc3MgaW4gMC4xMCAoc291cmNlcywgc2lua3MpLCBpbiB3aGljaCBjYXNlIGl0IG1heSB0YWtlCisgICAgYSBsb3QgbG9uZ2VyLCBkZXBlbmRpbmcgb24gdGhlIGNvZGVyJ3Mgc2tpbGxzIChob3dldmVyLCB3aGVuIHVzaW5nIHRoZQorICAgIDxjbGFzc25hbWU+R3N0QmFzZVNpbms8L2NsYXNzbmFtZT4gYW5kIDxjbGFzc25hbWU+R3N0QmFzZVNyYzwvY2xhc3NuYW1lPgorICAgIGJhc2UtY2xhc3NlcywgaXQgc2hvdWxkbid0IGJlIGFsbCB0b28gYmFkKSwgYW5kIGVsZW1lbnRzIHJlcXVpcmluZworICAgIHRoZSBkZXByZWNhdGVkIGJ5dGVzdHJlYW0gaW50ZXJmYWNlLCB3aGljaCBzaG91bGQgdGFrZSAxLTIgZGF5cyB3aXRoCisgICAgcmFuZG9tIGFjY2Vzcy4gVGhlIHNjaGVkdWxpbmcgcGFydHMgb2YgbXV4ZXJzIHdpbGwgYWxzbyBuZWVkIGEgcmV3cml0ZSwKKyAgICB3aGljaCB3aWxsIHRha2UgYWJvdXQgdGhlIHNhbWUgYW1vdW50IG9mIHRpbWUuCisgIDwvcGFyYT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tcG9ydGluZy1vYmplY3RzIj4KKyAgICA8dGl0bGU+TGlzdCBvZiBjaGFuZ2VzPC90aXRsZT4KKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgRGlzY29udCBldmVudHMgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IG5ld3NlZ21lbnQgZXZlbnRzLiBJbiAwLjEwLCBpdCBpcworICAgICAgICBlc3NlbnRpYWwgdGhhdCB5b3Ugc2VuZCBhIG5ld3NlZ21lbnQgZXZlbnQgZG93bnN0cmVhbSBiZWZvcmUgeW91IHNlbmQgCisgICAgICAgIHlvdXIgZmlyc3QgYnVmZmVyIChpbiAwLjggdGhlIHNjaGVkdWxlciB3b3VsZCBpbnZlbnQgZGlzY29udCBldmVudHMgaWYKKyAgICAgICAgeW91IGZvcmdvdCB0aGVtLCBpbiAwLjEwIHRoaXMgaXMgbm8gbG9uZ2VyIHRoZSBjYXNlKS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgIEluIDAuMTAsIGJ1ZmZlcnMgaGF2ZSBjYXBzIGF0dGFjaGVkIHRvIHRoZW0uIEVsZW1lbnRzIHNob3VsZCBhbGxvY2F0ZQorICAgICAgICBuZXcgYnVmZmVycyB3aXRoIDxmdW5jdGlvbj5nc3RfcGFkX2FsbG9jX2J1ZmZlciAoKTwvZnVuY3Rpb24+LiBTZWUKKyAgICAgICAgPHhyZWYgbGlua2VuZD0iY2hhcHRlci1uZWdvdGlhdGlvbiIvPiBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBNb3N0IGZ1bmN0aW9ucyByZXR1cm5pbmcgYW4gb2JqZWN0IG9yIGFuIG9iamVjdCBwcm9wZXJ0eSBoYXZlCisgICAgICAgICAgYmVlbiBjaGFuZ2VkIHRvIHJldHVybiBpdHMgb3duIHJlZmVyZW5jZSByYXRoZXIgdGhhbiBhIGNvbnN0YW50CisgICAgICAgICAgcmVmZXJlbmNlIG9mIHRoZSBvbmUgb3duZWQgYnkgdGhlIG9iamVjdCBpdHNlbGYuIFRoZSByZWFzb24gZm9yCisgICAgICAgICAgdGhpcyBjaGFuZ2UgaXMgcHJpbWFyaWx5IHRocmVhZC1zYWZldHkuIFRoaXMgbWVhbnMgZWZmZWN0aXZlbHkKKyAgICAgICAgICB0aGF0IHJldHVybiB2YWx1ZXMgb2YgZnVuY3Rpb25zIHN1Y2ggYXMKKyAgICAgICAgICA8ZnVuY3Rpb24+Z3N0X2VsZW1lbnRfZ2V0X3BhZCAoKTwvZnVuY3Rpb24+LAorICAgICAgICAgIDxmdW5jdGlvbj5nc3RfcGFkX2dldF9uYW1lICgpPC9mdW5jdGlvbj4sCisgICAgICAgICAgPGZ1bmN0aW9uPmdzdF9wYWRfZ2V0X3BhcmVudCAoKTwvZnVuY3Rpb24+LAorICAgICAgICAgIDxmdW5jdGlvbj5nc3Rfb2JqZWN0X2dldF9wYXJlbnQgKCk8L2Z1bmN0aW9uPiwKKyAgICAgICAgICBhbmQgbWFueSBtb3JlIGxpa2UgdGhlc2UKKyAgICAgICAgICBoYXZlIHRvIGJlIGZyZWUnZWQgb3IgdW5yZWZlcmVuY2VkIGFmdGVyIHVzZS4gQ2hlY2sgdGhlIEFQSQorICAgICAgICAgIHJlZmVyZW5jZXMgb2YgZWFjaCBmdW5jdGlvbiB0byBrbm93IGZvciBzdXJlIHdoZXRoZXIgcmV0dXJuCisgICAgICAgICAgdmFsdWVzIHNob3VsZCBiZSBmcmVlJ2VkIG9yIG5vdC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSW4gMC44LCBzY2hlZHVsaW5nIGNvdWxkIGhhcHBlbiBpbiBhbnkgd2F5LiBTb3VyY2UgZWxlbWVudHMgY291bGQKKyAgICAgICAgICBiZSA8ZnVuY3Rpb24+X2dldCAoKTwvZnVuY3Rpb24+LWJhc2VkIG9yIDxmdW5jdGlvbj5fbG9vcAorICAgICAgICAgICgpPC9mdW5jdGlvbj4tYmFzZWQsIGFuZCBhbnkgb3RoZXIgZWxlbWVudCBjb3VsZCBiZSAgPGZ1bmN0aW9uPl9jaGFpbgorICAgICAgICAgICgpPC9mdW5jdGlvbj4tYmFzZWQgb3IgPGZ1bmN0aW9uPl9sb29wICgpPC9mdW5jdGlvbj4tYmFzZWQsIHdpdGgKKyAgICAgICAgICBubyBsaW1pdGF0aW9ucy4gU2NoZWR1bGluZyBpbiAwLjEwIGlzIHNpbXBsZXIgZm9yIHRoZSBzY2hlZHVsZXIsCisgICAgICAgICAgYW5kIHRoZSBlbGVtZW50IGlzIGV4cGVjdGVkIHRvIGRvIHNvbWUgbW9yZSB3b3JrLiBQYWRzIGdldAorICAgICAgICAgIGFzc2lnbmVkIGEgc2NoZWR1bGluZyBtb2RlLCBiYXNlZCBvbiB3aGljaCB0aGV5IGNhbiBlaXRoZXIKKyAgICAgICAgICBvcGVyYXRlIGluIHJhbmRvbSBhY2Nlc3MtbW9kZSwgaW4gcGlwZWxpbmUgZHJpdmluZyBtb2RlIG9yIGluCisgICAgICAgICAgcHVzaC1tb2RlLiBhbGwgdGhpcyBpcyBkb2N1bWVudGVkIGluIGRldGFpbCBpbiA8eHJlZgorICAgICAgICAgIGxpbmtlbmQ9ImNoYXB0ZXItc2NoZWR1bGluZyIvPi4gQXMgYSByZXN1bHQgb2YgdGhpcywgdGhlIGJ5dGVzdHJlYW0KKyAgICAgICAgICBvYmplY3Qgbm8gbG9uZ2VyIGV4aXN0cy4gRWxlbWVudHMgcmVxdWlyaW5nIGJ5dGUtbGV2ZWwgYWNjZXNzIHNob3VsZAorICAgICAgICAgIG5vdyB1c2UgcmFuZG9tIGFjY2VzcyBvbiB0aGVpciBzaW5rcGFkcy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgTmVnb3RpYXRpb24gaXMgYXN5bmNocm9ub3VzLiBUaGlzIG1lYW5zIHRoYXQgZG93bnN0cmVhbSBuZWdvdGlhdGlvbgorICAgICAgICAgIGlzIGRvbmUgYXMgZGF0YSBjb21lcyBpbiBhbmQgdXBzdHJlYW0gbmVnb3RpYXRpb24gaXMgZG9uZSB3aGVuZXZlcgorICAgICAgICAgIHJlbmVnb3RpYXRpb24gaXMgcmVxdWlyZWQuIEFsbCBkZXRhaWxzIGFyZSBkZXNjcmliZWQgaW4gCisgICAgICAgICAgPHhyZWYgbGlua2VuZD0iY2hhcHRlci1uZWdvdGlhdGlvbiIvPi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgRm9yIGFzIGZhciBhcyBwb3NzaWJsZSwgZWxlbWVudHMgc2hvdWxkIHRyeSB0byB1c2UgZXhpc3RpbmcgYmFzZQorICAgICAgICAgIGNsYXNzZXMgaW4gMC4xMC4gU2luayBhbmQgc291cmNlIGVsZW1lbnRzLCBmb3IgZXhhbXBsZSwgY291bGQgZGVyaXZlCisgICAgICAgICAgZnJvbSA8Y2xhc3NuYW1lPkdzdEJhc2VTcmM8L2NsYXNzbmFtZT4gYW5kCisgICAgICAgICAgPGNsYXNzbmFtZT5Hc3RCYXNlU2luazwvY2xhc3NuYW1lPi4gQXVkaW8gc2lua3Mgb3Igc291cmNlcyBjb3VsZCBldmVuCisgICAgICAgICAgZGVyaXZlIGZyb20gYXVkaW8tc3BlY2lmaWMgYmFzZSBjbGFzc2VzLiBBbGwgZXhpc3RpbmcgYmFzZSBjbGFzc2VzCisgICAgICAgICAgaGF2ZSBiZWVuIGRpc2N1c3NlZCBpbiA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLW90aGVyLWJhc2UiLz4gYW5kIHRoZQorICAgICAgICAgIG5leHQgZmV3IGNoYXB0ZXJzLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJbiAwLjEwLCBldmVudCBoYW5kbGluZyBhbmQgYnVmZmVycyBhcmUgc2VwYXJhdGVkIG9uY2UgYWdhaW4uIFRoaXMKKyAgICAgICAgICBtZWFucyB0aGF0IGluIG9yZGVyIHRvIHJlY2VpdmUgZXZlbnRzLCBvbmUgbm8gbG9uZ2VyIGhhcyB0byBzZXQgdGhlCisgICAgICAgICAgPGNsYXNzbmFtZT5HU1RfRkxBR19FVkVOVF9BV0FSRTwvY2xhc3NuYW1lPiBmbGFnLCBidXQgY2FuIHNpbXBseQorICAgICAgICAgIHNldCBhbiBldmVudCBoYW5kbGluZyBmdW5jdGlvbiBvbiB0aGUgZWxlbWVudCdzIHNpbmtwYWQocyksIHVzaW5nCisgICAgICAgICAgIHRoZSBmdW5jdGlvbiA8ZnVuY3Rpb24+Z3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKCk8L2Z1bmN0aW9uPi4gVGhlCisgICAgICAgICAgPGZ1bmN0aW9uPl9jaGFpbiAoKTwvZnVuY3Rpb24+LWZ1bmN0aW9uIHdpbGwgb25seSByZWNlaXZlIGJ1ZmZlcnMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEFsdGhvdWdoIGNvcmUgd2lsbCB3cmFwIG1vc3QgdGhyZWFkaW5nLXJlbGF0ZWQgbG9ja2luZyBmb3IgeW91IChlLmcuCisgICAgICAgICAgaXQgdGFrZXMgdGhlIHN0cmVhbSBsb2NrIGJlZm9yZSBjYWxsaW5nIHlvdXIgZGF0YSBoYW5kbGluZworICAgICAgICAgIGZ1bmN0aW9ucyksIHlvdSBhcmUgc3RpbGwgcmVzcG9uc2libGUgZm9yIGxvY2tpbmcgYXJvdW5kIGNlcnRhaW4KKyAgICAgICAgICBmdW5jdGlvbnMsIGUuZy4gb2JqZWN0IHByb3BlcnRpZXMuIEJlIHN1cmUgdG8gbG9jayBwcm9wZXJseSBoZXJlLAorICAgICAgICAgIHNpbmNlIGFwcGxpY2F0aW9ucyB3aWxsIGNoYW5nZSB0aG9zZSBwcm9wZXJ0aWVzIGluIGEgZGlmZmVyZW50IHRocmVhZAorICAgICAgICAgIHRoYW4gdGhlIHRocmVhZCB3aGljaCBkb2VzIHRoZSBhY3R1YWwgZGF0YSBwYXNzaW5nISBZb3UgY2FuIHVzZSB0aGUKKyAgICAgICAgICA8ZnVuY3Rpb24+R1NUX09CSkVDVF9MT0NLICgpPC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5HU1RfT0JKRUNUX1VOTE9DSworICAgICAgICAgICgpPC9mdW5jdGlvbj4gaGVscGVycyBpbiBtb3N0IGNhc2VzLCBmb3J0dW5hdGVseSwgd2hpY2ggZ3JhYnMgdGhlCisgICAgICAgICAgZGVmYXVsdCBwcm9wZXJ0eSBsb2NrIG9mIHRoZSBlbGVtZW50LgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8Y2xhc3NuYW1lPkdzdFZhbHVlRml4ZWRMaXN0PC9jbGFzc25hbWU+IGFuZCBhbGwKKyAgICAgICAgICA8ZnVuY3Rpb24+Kl9maXhlZF9saXN0XyogKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbnMgd2VyZSByZW5hbWVkIHRvCisgICAgICAgICAgPGNsYXNzbmFtZT5Hc3RWYWx1ZUFycmF5PC9jbGFzc25hbWU+IGFuZCA8ZnVuY3Rpb24+Kl9hcnJheV8qCisgICAgICAgICAgKCk8L2Z1bmN0aW9uPi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIHNlbWFudGljcyBvZiA8c3ltYm9sPkdTVF9TVEFURV9QQVVTRUQ8L3N5bWJvbD4gYW5kIAorICAgICAgICAgIDxzeW1ib2w+R1NUX1NUQVRFX1BMQVlJTkc8L3N5bWJvbD4gaGF2ZSBjaGFuZ2VkIGZvciBlbGVtZW50cyB0aGF0CisgICAgICAgICAgYXJlIG5vdCBzaW5rIGVsZW1lbnRzLiBOb24tc2luayBlbGVtZW50cyBuZWVkIHRvIGJlIGFibGUgdG8gYWNjZXB0CisgICAgICAgICAgYW5kIHByb2Nlc3MgZGF0YSBhbHJlYWR5IGluIHRoZSA8c3ltYm9sPkdTVF9TVEFURV9QQVVTRUQ8L3N5bWJvbD4gCisgICAgICAgICAgc3RhdGUgbm93IChpLmUuIHdoZW4gcHJlcm9sbGluZyB0aGUgcGlwZWxpbmUpLiBNb3JlIGRldGFpbHMgY2FuIGJlCisgICAgICAgICAgZm91bmQgaW4gPHhyZWYgbGlua2VuZD0iY2hhcHRlci1zdGF0ZW1hbmFnZS1zdGF0ZXMiLz4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIElmIHlvdXIgcGx1Z2luJ3Mgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIGhhc24ndCBiZWVuIHN1cGVyc2VkZWQgYnkKKyAgICAgICAgICB2aXJ0dWFsIHN0YXJ0KCkgYW5kIHN0b3AoKSBtZXRob2RzIG9mIG9uZSBvZiB0aGUgbmV3IGJhc2UgY2xhc3NlcywKKyAgICAgICAgICB0aGVuIHlvdXIgcGx1Z2luJ3Mgc3RhdGUgY2hhbmdlIGZ1bmN0aW9ucyBtYXkgbmVlZCB0byBiZSBjaGFuZ2VkIGluIAorICAgICAgICAgIG9yZGVyIHRvIHNhZmVseSBoYW5kbGUgY29uY3VycmVudCBhY2Nlc3MgYnkgbXVsdGlwbGUgdGhyZWFkcy4gWW91ciAKKyAgICAgICAgICB0eXBpY2FsIHN0YXRlIGNoYW5nZSBmdW5jdGlvbiB3aWxsIG5vdyBmaXJzdCBoYW5kbGUgdXB3YXJkcyBzdGF0ZSAKKyAgICAgICAgICBjaGFuZ2VzLCB0aGVuIGNoYWluIHVwIHRvIHRoZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gb2YgdGhlIHBhcmVudCAKKyAgICAgICAgICBjbGFzcyAodXN1YWxseSBHc3RFbGVtZW50Q2xhc3MgaW4gdGhlc2UgY2FzZXMpLCBhbmQgb25seSB0aGVuIGhhbmRsZQorICAgICAgICAgIGRvd253YXJkcyBzdGF0ZSBjaGFuZ2VzLiBTZWUgdGhlIHZvcmJpcyBkZWNvZGVyIHBsdWdpbiBpbgorICAgICAgICAgIGdzdC1wbHVnaW5zLWJhc2UgZm9yIGFuIGV4YW1wbGUuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IGluIHRoZSBjYXNlIG9mIGRvd253YXJkcyBzdGF0ZSBjaGFuZ2VzCisgICAgICAgICAgeW91IGRvbid0IHdhbnQgdG8gZGVzdHJveSBhbGxvY2F0ZWQgcmVzb3VyY2VzIHdoaWxlIHlvdXIgcGx1Z2luJ3MgCisgICAgICAgICAgY2hhaW4gZnVuY3Rpb24gKGZvciBleGFtcGxlKSBpcyBzdGlsbCBhY2Nlc3NpbmcgdGhvc2UgcmVzb3VyY2VzIGluCisgICAgICAgICAgYW5vdGhlciB0aHJlYWQuIFdoZXRoZXIgeW91ciBjaGFpbiBmdW5jdGlvbiBtaWdodCBiZSBydW5uaW5nIG9yIG5vdAorICAgICAgICAgIGRlcGVuZHMgb24gdGhlIHN0YXRlIG9mIHlvdXIgcGx1Z2luJ3MgcGFkcywgYW5kIHRoZSBzdGF0ZSBvZiB0aG9zZQorICAgICAgICAgIHBhZHMgaXMgY2xvc2VseSBsaW5rZWQgdG8gdGhlIHN0YXRlIG9mIHRoZSBlbGVtZW50LiBQYWQgc3RhdGVzIGFyZQorICAgICAgICAgIGhhbmRsZWQgaW4gdGhlIEdzdEVsZW1lbnQgY2xhc3MncyBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24sIGluY2x1ZGluZworICAgICAgICAgIHByb3BlciBsb2NraW5nLCB0aGF0J3Mgd2h5IGl0IGlzIGVzc2VudGlhbCB0byBjaGFpbiB1cCBiZWZvcmUKKyAgICAgICAgICBkZXN0cm95aW5nIGFsbG9jYXRlZCByZXNvdXJjZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQXMgYWxyZWFkeSBtZW50aW9uZWQgYWJvdmUsIHlvdSBzaG91bGQgcmVhbGx5IHJld3JpdGUgeW91ciBwbHVnaW4KKyAgICAgICAgICB0byBkZXJpdmUgZnJvbSBvbmUgb2YgdGhlIG5ldyBiYXNlIGNsYXNzZXMgdGhvdWdoLCBzbyB5b3UgZG9uJ3QgaGF2ZQorICAgICAgICAgIHRvIHdvcnJ5IGFib3V0IHRoZXNlIHRoaW5ncywgYXMgdGhlIGJhc2UgY2xhc3Mgd2lsbCBoYW5kbGUgaXQgZm9yIHlvdS4KKyAgICAgICAgICBUaGVyZSBhcmUgbm8gYmFzZSBjbGFzc2VzIGZvciBkZWNvZGVycyBhbmQgZW5jb2RlcnMgeWV0LCBzbyB0aGUgYWJvdmUgCisgICAgICAgICAgcGFyYWdyYXBocyBhYm91dCBzdGF0ZSBjaGFuZ2VzIGRlZmluaXRpdmVseSBhcHBseSBpZiB5b3VyIHBsdWdpbiBpcyBhCisgICAgICAgICAgZGVjb2RlciBvciBhbiBlbmNvZGVyLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8ZnVuY3Rpb24+Z3N0X3BhZF9zZXRfbGlua19mdW5jdGlvbiAoKTwvZnVuY3Rpb24+LCB3aGljaCB1c2VkIHRvIHNldAorICAgICAgICAgIGEgZnVuY3Rpb24gdGhhdCB3b3VsZCBiZSBjYWxsZWQgd2hlbiBhIGZvcm1hdCB3YXMgbmVnb3RpYXRlZCBiZXR3ZWVuCisgICAgICAgICAgdHdvIDxjbGFzc25hbWU+R3N0UGFkPC9jbGFzc25hbWU+cywgbm93IHNldHMgYSBmdW5jdGlvbiB0aGF0IGlzCisgICAgICAgICAgY2FsbGVkIHdoZW4gdHdvIGVsZW1lbnRzIGFyZSBsaW5rZWQgdG9nZXRoZXIgaW4gYW4gYXBwbGljYXRpb24uIEZvcgorICAgICAgICAgIGFsbCBwcmFjdGljYWwgcHVycG9zZXMsIHlvdSBtb3N0IGxpa2VseSB3YW50IHRvIHVzZSB0aGUgZnVuY3Rpb24KKyAgICAgICAgICA8ZnVuY3Rpb24+Z3N0X3BhZF9zZXRfc2V0Y2Fwc19mdW5jdGlvbiAoKTwvZnVuY3Rpb24+LCBub3dhZGF5cywgd2hpY2gKKyAgICAgICAgICBzZXRzIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgZm9ybWF0IHN0cmVhbWluZyBvdmVyIGEgcGFkCisgICAgICAgICAgY2hhbmdlcyAoc28gc2ltaWxhciB0byA8ZnVuY3Rpb24+X3NldF9saW5rX2Z1bmN0aW9uICgpPC9mdW5jdGlvbj4gaW4KKyAgICAgICAgICAmR1N0cmVhbWVyOy0wLjgpLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIElmIHRoZSBlbGVtZW50IGlzIGRlcml2ZWQgZnJvbSBhIDxjbGFzc25hbWU+R3N0QmFzZTwvY2xhc3NuYW1lPiBjbGFzcywKKyAgICAgICAgICB0aGVuIG92ZXJyaWRlIHRoZSA8ZnVuY3Rpb24+c2V0X2NhcHMgKCk8L2Z1bmN0aW9uPi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGZ1bmN0aW9uPmdzdF9wYWRfdXNlX2V4cGxpY2l0X2NhcHMgKCk8L2Z1bmN0aW9uPiBoYXMgYmVlbiByZXBsYWNlZCBieQorICAgICAgICAgIDxmdW5jdGlvbj5nc3RfcGFkX3VzZV9maXhlZF9jYXBzICgpPC9mdW5jdGlvbj4uIFlvdSBjYW4gdGhlbiBzZXQgdGhlCisgICAgICAgICAgZml4ZWQgY2FwcyB0byB1c2Ugb24gYSBwYWQgd2l0aCA8ZnVuY3Rpb24+Z3N0X3BhZF9zZXRfY2FwcyAoKTwvZnVuY3Rpb24+LgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICA8L3NlY3QxPgorPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9wd2cvYXBwZW5kaXgtcHl0aG9uLnhtbCBiL2RvY3MvcHdnL2FwcGVuZGl4LXB5dGhvbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvcHdnL2FwcGVuZGl4LXB5dGhvbi54bWwKZGlmZiAtLWdpdCBhL2RvY3MvcHdnL2Jhc2UuY3NzIGIvZG9jcy9wd2cvYmFzZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvcHdnL2Jhc2UuY3NzCmRpZmYgLS1naXQgYS9kb2NzL3B3Zy9idWlsZGluZy1ib2lsZXIueG1sIGIvZG9jcy9wd2cvYnVpbGRpbmctYm9pbGVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWRhNmM4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wd2cvYnVpbGRpbmctYm9pbGVyLnhtbApAQCAtMCwwICsxLDQ1NyBAQAorPCEtLSAjIyMjIyMjIyMjIyMgY2hhcHRlciAjIyMjIyMjIyMjIyMjIC0tPgorCis8Y2hhcHRlciBpZD0iY2hhcHRlci1idWlsZGluZy1ib2lsZXIiIHhyZWZsYWJlbD0iQ29uc3RydWN0aW5nIHRoZSBCb2lsZXJwbGF0ZSI+CisgIDx0aXRsZT5Db25zdHJ1Y3RpbmcgdGhlIEJvaWxlcnBsYXRlPC90aXRsZT4KKyAgPHBhcmE+CisgICAgSW4gdGhpcyBjaGFwdGVyIHlvdSB3aWxsIGxlYXJuIGhvdyB0byBjb25zdHJ1Y3QgdGhlIGJhcmUgbWluaW11bSBjb2RlIGZvciBhCisgICAgbmV3IHBsdWdpbi4gU3RhcnRpbmcgZnJvbSBncm91bmQgemVybywgeW91IHdpbGwgc2VlIGhvdyB0byBnZXQgdGhlCisgICAgJkdTdHJlYW1lcjsgdGVtcGxhdGUgc291cmNlLiBUaGVuIHlvdSB3aWxsIGxlYXJuIGhvdyB0byB1c2UgYSBmZXcgYmFzaWMKKyAgICB0b29scyB0byBjb3B5IGFuZCBtb2RpZnkgYSB0ZW1wbGF0ZSBwbHVnaW4gdG8gY3JlYXRlIGEgbmV3IHBsdWdpbi4gSWYgeW91CisgICAgZm9sbG93IHRoZSBleGFtcGxlcyBoZXJlLCB0aGVuIGJ5IHRoZSBlbmQgb2YgdGhpcyBjaGFwdGVyIHlvdSB3aWxsIGhhdmUgYQorICAgIGZ1bmN0aW9uYWwgYXVkaW8gZmlsdGVyIHBsdWdpbiB0aGF0IHlvdSBjYW4gY29tcGlsZSBhbmQgdXNlIGluICZHU3RyZWFtZXI7CisgICAgYXBwbGljYXRpb25zLgorICA8L3BhcmE+CisKKyAgPCEtLSAjIyMjIyMjIyMjIyMgc2VjdDEgIyMjIyMjIyMjIyMjIyAtLT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tYm9pbGVyLXNvdXJjZSIgeHJlZmxhYmVsPSJHZXR0aW5nIHRoZSBHU3RyZWFtZXIgUGx1Z2luIFRlbXBsYXRlcyI+CisgICAgPHRpdGxlPkdldHRpbmcgdGhlIEdTdHJlYW1lciBQbHVnaW4gVGVtcGxhdGVzPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgdHdvIHdheXMgdG8gZGV2ZWxvcCBhIG5ldyBwbHVnaW4gZm9yICZHU3RyZWFtZXI7OiBZb3UKKyAgICAgIGNhbiB3cml0ZSB0aGUgZW50aXJlIHBsdWdpbiBieSBoYW5kLCBvciB5b3UgY2FuIGNvcHkgYW4gZXhpc3RpbmcgcGx1Z2luCisgICAgICB0ZW1wbGF0ZSBhbmQgd3JpdGUgdGhlIHBsdWdpbiBjb2RlIHlvdSBuZWVkLiBUaGUgc2Vjb25kIG1ldGhvZCBpcyBieSBmYXIKKyAgICAgIHRoZSBzaW1wbGVyIG9mIHRoZSB0d28sIHNvIHRoZSBmaXJzdCBtZXRob2Qgd2lsbCBub3QgZXZlbiBiZSBkZXNjcmliZWQKKyAgICAgIGhlcmUuIChFcnJtLCB0aGF0IGlzLCA8cXVvdGU+aXQgaXMgbGVmdCBhcyBhbiBleGVyY2lzZSB0byB0aGUKKyAgICAgIHJlYWRlci48L3F1b3RlPikKKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBUaGUgZmlyc3Qgc3RlcCBpcyB0byBjaGVjayBvdXQgYSBjb3B5IG9mIHRoZQorICAgICAgPGZpbGVuYW1lPmdzdC10ZW1wbGF0ZTwvZmlsZW5hbWU+IGdpdCBtb2R1bGUgdG8gZ2V0IGFuIGltcG9ydGFudCB0b29sIGFuZAorICAgICAgdGhlIHNvdXJjZSBjb2RlIHRlbXBsYXRlIGZvciBhIGJhc2ljICZHU3RyZWFtZXI7IHBsdWdpbi4gVG8gY2hlY2sgb3V0IHRoZQorICAgICAgPGZpbGVuYW1lPmdzdC10ZW1wbGF0ZTwvZmlsZW5hbWU+IG1vZHVsZSwgbWFrZSBzdXJlIHlvdSBhcmUgY29ubmVjdGVkIHRvCisgICAgICB0aGUgaW50ZXJuZXQsIGFuZCB0eXBlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgYXQgYSBjb21tYW5kIGNvbnNvbGU6CisgICAgPC9wYXJhPgorICAgIDxzY3JlZW4+Cis8cHJvbXB0PnNoZWxsICQgPC9wcm9tcHQ+PHVzZXJpbnB1dD5naXQgY2xvbmUgZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC10ZW1wbGF0ZS5naXQ8L3VzZXJpbnB1dD4KK0luaXRpYWxpemVkIGVtcHR5IEdpdCByZXBvc2l0b3J5IGluIC9zb21lL3BhdGgvZ3N0LXRlbXBsYXRlLy5naXQvCityZW1vdGU6IENvdW50aW5nIG9iamVjdHM6IDM3MywgZG9uZS4KK3JlbW90ZTogQ29tcHJlc3Npbmcgb2JqZWN0czogMTAwJSAoMTE0LzExNCksIGRvbmUuCityZW1vdGU6IFRvdGFsIDM3MyAoZGVsdGEgMjQwKSwgcmV1c2VkIDM3MyAoZGVsdGEgMjQwKQorUmVjZWl2aW5nIG9iamVjdHM6IDEwMCUgKDM3My8zNzMpLCA3NS4xNiBLaUIgfCA3OCBLaUIvcywgZG9uZS4KK1Jlc29sdmluZyBkZWx0YXM6IDEwMCUgKDI0MC8yNDApLCBkb25lLgorICAgIDwvc2NyZWVuPgorICAgIDxwYXJhPgorICAgICAgVGhpcyBjb21tYW5kIHdpbGwgY2hlY2sgb3V0IGEgc2VyaWVzIG9mIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBpbnRvCisgICAgICA8ZmlsZW5hbWUgY2xhc3M9ImRpcmVjdG9yeSI+Z3N0LXRlbXBsYXRlPC9maWxlbmFtZT4uIFRoZSB0ZW1wbGF0ZSB5b3UKKyAgICAgIHdpbGwgYmUgdXNpbmcgaXMgaW4gdGhlCisgICAgICA8ZmlsZW5hbWUgY2xhc3M9ImRpcmVjdG9yeSI+Z3N0LXRlbXBsYXRlL2dzdC1wbHVnaW4vPC9maWxlbmFtZT4KKyAgICAgIGRpcmVjdG9yeS4gWW91IHNob3VsZCBsb29rIG92ZXIgdGhlIGZpbGVzIGluIHRoYXQgZGlyZWN0b3J5IHRvIGdldCBhCisgICAgICBnZW5lcmFsIGlkZWEgb2YgdGhlIHN0cnVjdHVyZSBvZiBhIHNvdXJjZSB0cmVlIGZvciBhIHBsdWdpbi4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBJZiBmb3Igc29tZSByZWFzb24geW91IGNhbid0IGFjY2VzcyB0aGUgZ2l0IHJlcG9zaXRvcnksIHlvdSBjYW4gYWxzbworICAgICAgPHVsaW5rIHR5cGU9Imh0dHAiCisgICAgICB1cmw9Imh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXRlbXBsYXRlL2NvbW1pdC8iPgorICAgICAgZG93bmxvYWQgYSBzbmFwc2hvdCBvZiB0aGUgbGF0ZXN0IHJldmlzaW9uPC91bGluaz4gdmlhIHRoZSBjZ2l0IHdlYgorICAgICAgaW50ZXJmYWNlLgorICAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKworICA8IS0tICMjIyMjIyMjIyMjIyBzZWN0MSAjIyMjIyMjIyMjIyMjIC0tPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1ib2lsZXItcHJvamVjdC1zdGFtcCIgeHJlZmxhYmVsPSJVc2luZyB0aGUgUHJvamVjdCBTdGFtcCI+CisgICAgPHRpdGxlPlVzaW5nIHRoZSBQcm9qZWN0IFN0YW1wPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSBmaXJzdCB0aGluZyB0byBkbyB3aGVuIG1ha2luZyBhIG5ldyBlbGVtZW50IGlzIHRvIHNwZWNpZnkgc29tZSBiYXNpYworICAgICAgZGV0YWlscyBhYm91dCBpdDogd2hhdCBpdHMgbmFtZSBpcywgd2hvIHdyb3RlIGl0LCB3aGF0IHZlcnNpb24gbnVtYmVyIGl0CisgICAgICBpcywgZXRjLiBXZSBhbHNvIG5lZWQgdG8gZGVmaW5lIGFuIG9iamVjdCB0byByZXByZXNlbnQgdGhlIGVsZW1lbnQgYW5kIHRvCisgICAgICBzdG9yZSB0aGUgZGF0YSB0aGUgZWxlbWVudCBuZWVkcy4gVGhlc2UgZGV0YWlscyBhcmUgY29sbGVjdGl2ZWx5IGtub3duIGFzCisgICAgICB0aGUgPGVtcGhhc2lzPmJvaWxlcnBsYXRlPC9lbXBoYXNpcz4uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgVGhlIHN0YW5kYXJkIHdheSBvZiBkZWZpbmluZyB0aGUgYm9pbGVycGxhdGUgaXMgc2ltcGx5IHRvIHdyaXRlIHNvbWUgY29kZSwKKyAgICAgIGFuZCBmaWxsIGluIHNvbWUgc3RydWN0dXJlcy4gQXMgbWVudGlvbmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLCB0aGUKKyAgICAgIGVhc2llc3Qgd2F5IHRvIGRvIHRoaXMgaXMgdG8gY29weSBhIHRlbXBsYXRlIGFuZCBhZGQgZnVuY3Rpb25hbGl0eQorICAgICAgYWNjb3JkaW5nIHRvIHlvdXIgbmVlZHMuIFRvIGhlbHAgeW91IGRvIHNvLCB0aGVyZSBpcyBhIHRvb2wgaW4gdGhlCisgICAgICA8ZmlsZW5hbWUgY2xhc3M9ImRpcmVjdG9yeSI+Li9nc3QtcGx1Z2lucy90b29scy88L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICBUaGlzIHRvb2wsIDxmaWxlbmFtZT5tYWtlX2VsZW1lbnQ8L2ZpbGVuYW1lPiwgaXMgYSBjb21tYW5kIGxpbmUgdXRpbGl0eQorICAgICAgdGhhdCBjcmVhdGVzIHRoZSBib2lsZXJwbGF0ZSBjb2RlIGZvciB5b3UuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgVG8gdXNlIDxjb21tYW5kPm1ha2VfZWxlbWVudDwvY29tbWFuZD4sIGZpcnN0IG9wZW4gdXAgYSB0ZXJtaW5hbCB3aW5kb3cuCisgICAgICBDaGFuZ2UgdG8gdGhlIDxmaWxlbmFtZSBjbGFzcz0iZGlyZWN0b3J5Ij5nc3QtdGVtcGxhdGUvZ3N0LXBsdWdpbi9zcmM8L2ZpbGVuYW1lPgorICAgICAgZGlyZWN0b3J5LCBhbmQgdGhlbiBydW4gdGhlIDxjb21tYW5kPm1ha2VfZWxlbWVudDwvY29tbWFuZD4gY29tbWFuZC4gVGhlCisgICAgICBhcmd1bWVudHMgdG8gdGhlIDxjb21tYW5kPm1ha2VfZWxlbWVudDwvY29tbWFuZD4gYXJlOgorICAgIDwvcGFyYT4KKyAgICA8b3JkZXJlZGxpc3Q+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPnRoZSBuYW1lIG9mIHRoZSBwbHVnaW4sIGFuZDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIHRoZSBzb3VyY2UgZmlsZSB0aGF0IHRoZSB0b29sIHdpbGwgdXNlLiBCeSBkZWZhdWx0LAorICAgICAgICAgIDxmaWxlbmFtZT5nc3RwbHVnaW48L2ZpbGVuYW1lPiBpcyB1c2VkLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPHBhcmE+CisgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBjcmVhdGUgdGhlIE15RmlsdGVyIHBsdWdpbiBiYXNlZCBvbgorICAgICAgdGhlIHBsdWdpbiB0ZW1wbGF0ZSBhbmQgcHV0IHRoZSBvdXRwdXQgZmlsZXMgaW4gdGhlCisgICAgICA8ZmlsZW5hbWUgY2xhc3M9ImRpcmVjdG9yeSI+Z3N0LXRlbXBsYXRlL2dzdC1wbHVnaW4vc3JjPC9maWxlbmFtZT4KKyAgICAgIGRpcmVjdG9yeToKKyAgICA8L3BhcmE+CisgICAgPHNjcmVlbj4KKzxwcm9tcHQ+c2hlbGwgJCA8L3Byb21wdD48dXNlcmlucHV0PmNkIGdzdC10ZW1wbGF0ZS9nc3QtcGx1Z2luL3NyYzwvdXNlcmlucHV0PgorPHByb21wdD5zaGVsbCAkIDwvcHJvbXB0Pjx1c2VyaW5wdXQ+Li4vdG9vbHMvbWFrZV9lbGVtZW50IE15RmlsdGVyPC91c2VyaW5wdXQ+CisgICAgPC9zY3JlZW4+CisgICAgPG5vdGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgQ2FwaXRhbGl6YXRpb24gaXMgaW1wb3J0YW50IGZvciB0aGUgbmFtZSBvZiB0aGUgcGx1Z2luLiBLZWVwIGluIG1pbmQKKyAgICAgICAgdGhhdCB1bmRlciBzb21lIG9wZXJhdGluZyBzeXN0ZW1zLCBjYXBpdGFsaXphdGlvbiBpcyBhbHNvIGltcG9ydGFudAorICAgICAgICB3aGVuIHNwZWNpZnlpbmcgZGlyZWN0b3J5IGFuZCBmaWxlIG5hbWVzIGluIGdlbmVyYWwuCisgICAgICA8L3BhcmE+CisgICAgPC9ub3RlPgorICAgIDxwYXJhPgorICAgICAgVGhlIGxhc3QgY29tbWFuZCBjcmVhdGVzIHR3byBmaWxlczoKKyAgICAgIDxmaWxlbmFtZT5nc3RleGFtcGxlZmlsdGVyLmM8L2ZpbGVuYW1lPiBhbmQKKyAgICAgIDxmaWxlbmFtZT5nc3RleGFtcGxlZmlsdGVyLmg8L2ZpbGVuYW1lPi4KKyAgICA8L3BhcmE+CisgICAgPG5vdGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgY3JlYXRlIGEgY29weSBvZiB0aGUgPGZpbGVuYW1lCisJY2xhc3M9ImRpcmVjdG9yeSI+Z3N0LXBsdWdpbjwvZmlsZW5hbWU+CisJZGlyZWN0b3J5IGJlZm9yZSBjb250aW51aW5nLgorICAgICAgPC9wYXJhPgorICAgIDwvbm90ZT4KKyAgICA8cGFyYT4KKyAgICAgIE5vdyBvbmUgbmVlZHMgdG8gYWRqdXN0IHRoZSA8ZmlsZW5hbWU+TWFrZWZpbGUuYW08L2ZpbGVuYW1lPiB0byB1c2UgdGhlCisgICAgICBuZXcgZmlsZW5hbWVzIGFuZCBydW4gPGZpbGVuYW1lPmF1dG9nZW4uc2g8L2ZpbGVuYW1lPiBmcm9tIHRoZSBwYXJlbnQKKyAgICAgIGRpcmVjdG9yeSB0byBib290c3RyYXAgdGhlIGJ1aWxkIGVudmlyb25tZW50LiBBZnRlciB0aGF0LCB0aGUgcHJvamVjdAorICAgICAgY2FuIGJlIGJ1aWx0IGFuZCBpbnN0YWxsZWQgdXNpbmcgdGhlIHdlbGwga25vd24KKyAgICAgIDx1c2VyaW5wdXQ+bWFrZSAmYW1wOyZhbXA7IHN1ZG8gbWFrZSBpbnN0YWxsPC91c2VyaW5wdXQ+IGNvbW1hbmRzLgorICAgIDwvcGFyYT4KKyAgICA8bm90ZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBCZSBhd2FyZSB0aGF0IGJ5IGRlZmF1bHQgPGZpbGVuYW1lPmF1dG9nZW4uc2g8L2ZpbGVuYW1lPiBhbmQgCisgICAgICAgIDxmaWxlbmFtZT5jb25maWd1cmU8L2ZpbGVuYW1lPiB3b3VsZCBjaG9vc2UgPGZpbGVuYW1lIGNsYXNzPSJkaXJlY3RvcnkiPi91c3IvbG9jYWw8L2ZpbGVuYW1lPgorICAgICAgICBhcyBhIGRlZmF1bHQgbG9jYXRpb24uIE9uZSB3b3VsZCBuZWVkIHRvIGFkZAorICAgICAgICA8ZmlsZW5hbWUgY2xhc3M9ImRpcmVjdG9yeSI+L3Vzci9sb2NhbC9saWIvZ3N0cmVhbWVyLTAuMTA8L2ZpbGVuYW1lPgorICAgICAgICB0byA8c3ltYm9sPkdTVF9QTFVHSU5fUEFUSDwvc3ltYm9sPiBpbiBvcmRlciB0byBtYWtlIHRoZSBuZXcgcGx1Z2luCisgICAgICAgIHNob3cgdXAgaW4gZ3N0cmVhbWVyLgorICAgICAgPC9wYXJhPgorICAgIDwvbm90ZT4KKyAgPC9zZWN0MT4KKworICA8IS0tICMjIyMjIyMjIyMjIyBzZWN0MSAjIyMjIyMjIyMjIyMjIC0tPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1ib2lsZXItZXhhbWluZSI+CisgICAgPHRpdGxlPkV4YW1pbmluZyB0aGUgQmFzaWMgQ29kZTwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBGaXJzdCB3ZSB3aWxsIGV4YW1pbmUgdGhlIGNvZGUgeW91IHdvdWxkIGJlIGxpa2VseSB0byBwbGFjZSBpbiBhIGhlYWRlcgorICAgICAgZmlsZSAoYWx0aG91Z2ggc2luY2UgdGhlIGludGVyZmFjZSB0byB0aGUgY29kZSBpcyBlbnRpcmVseSBkZWZpbmVkIGJ5IHRoZQorICAgICAgcGx1Z2luIHN5c3RlbSwgYW5kIGRvZXNuJ3QgZGVwZW5kIG9uIHJlYWRpbmcgYSBoZWFkZXIgZmlsZSwgdGhpcyBpcyBub3QKKyAgICAgIGNydWNpYWwuKQorCisgICAgICBUaGUgY29kZSBoZXJlIGNhbiBiZSBmb3VuZCBpbgorICAgICAgPGZpbGVuYW1lPmV4YW1wbGVzL3B3Zy9leGFtcGxlZmlsdGVyL2JvaWxlci9nc3RleGFtcGxlZmlsdGVyLmg8L2ZpbGVuYW1lPi4KKyAgICA8L3BhcmE+CisKKyAgICA8ZXhhbXBsZSBpZD0iZXgtYm9pbGVyLWV4YW1pbmUtaCI+CisgICAgICA8dGl0bGU+RXhhbXBsZSBQbHVnaW4gSGVhZGVyIEZpbGU8L3RpdGxlPgorICAgICAgPHByb2dyYW1saXN0aW5nPjwhLS0gZXhhbXBsZS1iZWdpbiBmaWx0ZXIuaCBhIC0tPgorI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKKworLyogRGVmaW5pdGlvbiBvZiBzdHJ1Y3R1cmUgc3RvcmluZyBkYXRhIGZvciB0aGlzIGVsZW1lbnQuICovCit0eXBlZGVmIHN0cnVjdCBfR3N0TXlGaWx0ZXIgeworICBHc3RFbGVtZW50IGVsZW1lbnQ7CisKKyAgR3N0UGFkICpzaW5rcGFkLCAqc3JjcGFkOworCisgIGdib29sZWFuIHNpbGVudDsKKzwhLS0gZXhhbXBsZS1lbmQgZmlsdGVyLmggYSAtLT4KKzwhLS0gZXhhbXBsZS1iZWdpbiBmaWx0ZXIuaCBiIC0tPjwhLS0KKyAgZ2ludCBzYW1wbGVyYXRlLCBjaGFubmVsczsKKyAgZ2ludCBmcm9tX3NhbXBsZXJhdGUsIHRvX3NhbXBsZXJhdGU7CisgIGdib29sZWFuIHBhc3N0aHJvdWdoOworICBndWludDY0IG9mZnNldDsKKy0tPjwhLS0gZXhhbXBsZS1lbmQgZmlsdGVyLmggYiAtLT4KKzwhLS0gZXhhbXBsZS1iZWdpbiBmaWx0ZXIuaCBjIC0tPgorfSBHc3RNeUZpbHRlcjsKKworLyogU3RhbmRhcmQgZGVmaW5pdGlvbiBkZWZpbmluZyBhIGNsYXNzIGZvciB0aGlzIGVsZW1lbnQuICovCit0eXBlZGVmIHN0cnVjdCBfR3N0TXlGaWx0ZXJDbGFzcyB7CisgIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9IEdzdE15RmlsdGVyQ2xhc3M7CisKKy8qIFN0YW5kYXJkIG1hY3JvcyBmb3IgZGVmaW5pbmcgdHlwZXMgZm9yIHRoaXMgZWxlbWVudC4gICovCisjZGVmaW5lIEdTVF9UWVBFX01ZX0ZJTFRFUiAoZ3N0X215X2ZpbHRlcl9nZXRfdHlwZSgpKQorI2RlZmluZSBHU1RfTVlfRklMVEVSKG9iaikgXAorICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfTVlfRklMVEVSLEdzdE15RmlsdGVyKSkKKyNkZWZpbmUgR1NUX01ZX0ZJTFRFUl9DTEFTUyhrbGFzcykgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9NWV9GSUxURVIsR3N0TXlGaWx0ZXJDbGFzcykpCisjZGVmaW5lIEdTVF9JU19NWV9GSUxURVIob2JqKSBcCisgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9NWV9GSUxURVIpKQorI2RlZmluZSBHU1RfSVNfTVlfRklMVEVSX0NMQVNTKGtsYXNzKSBcCisgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX01ZX0ZJTFRFUikpCisKKy8qIFN0YW5kYXJkIGZ1bmN0aW9uIHJldHVybmluZyB0eXBlIGluZm9ybWF0aW9uLiAqLworR1R5cGUgZ3N0X215X2ZpbHRlcl9nZXRfdHlwZSAodm9pZCk7CisgICAgICA8IS0tIGV4YW1wbGUtZW5kIGZpbHRlci5oIGMgLS0+PC9wcm9ncmFtbGlzdGluZz4KKyAgICA8L2V4YW1wbGU+CisgICAgPHBhcmE+CisgICAgICBVc2luZyB0aGlzIGhlYWRlciBmaWxlLCB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIG1hY3JvIHRvIHNldHVwCisgICAgICB0aGUgPGNsYXNzbmFtZT5HT2JqZWN0PC9jbGFzc25hbWU+IGJhc2ljcyBpbiB5b3VyIHNvdXJjZSBmaWxlIHNvCisgICAgICB0aGF0IGFsbCBmdW5jdGlvbnMgd2lsbCBiZSBjYWxsZWQgYXBwcm9wcmlhdGVseToKKyAgICA8L3BhcmE+CisgICAgPHByb2dyYW1saXN0aW5nPjwhLS0gZXhhbXBsZS1iZWdpbiBib2lsZXJwbGF0ZS5jIGEgLS0+CisjaW5jbHVkZSAiZmlsdGVyLmgiCisKK0dTVF9CT0lMRVJQTEFURSAoR3N0TXlGaWx0ZXIsIGdzdF9teV9maWx0ZXIsIEdzdEVsZW1lbnQsIEdTVF9UWVBFX0VMRU1FTlQpOworICAgIDwhLS0gZXhhbXBsZS1lbmQgYm9pbGVycGxhdGUuYyBhIC0tPjwvcHJvZ3JhbWxpc3Rpbmc+CisgIDwvc2VjdDE+CisKKyAgPCEtLSAjIyMjIyMjIyMjIyMgc2VjdDEgIyMjIyMjIyMjIyMjIyAtLT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tYm9pbGVyLWRldGFpbHMiPgorICAgIDx0aXRsZT5Hc3RFbGVtZW50RGV0YWlsczwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBUaGUgR3N0RWxlbWVudERldGFpbHMgc3RydWN0dXJlIHByb3ZpZGVzIGEgaGllcmFyY2hpY2FsIHR5cGUgZm9yIGVsZW1lbnQKKyAgICAgIGluZm9ybWF0aW9uLiBUaGUgZW50cmllcyBhcmU6CisgICAgPC9wYXJhPgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgIEEgbG9uZywgRW5nbGlzaCwgbmFtZSBmb3IgdGhlIGVsZW1lbnQuCisgICAgICA8L3BhcmE+PC9saXN0aXRlbT48bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgIFRoZSB0eXBlIG9mIHRoZSBlbGVtZW50LCBzZWUgdGhlIGRvY3MvZGVzaWduL2RyYWZ0LWtsYXNzLnR4dCBkb2N1bWVudAorICAgICAgICBpbiB0aGUgR1N0cmVhbWVyIGNvcmUgc291cmNlIHRyZWUgZm9yIGRldGFpbHMgYW5kIGV4YW1wbGVzLgorICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+PGxpc3RpdGVtPjxwYXJhPgorICAgICAgICBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBwdXJwb3NlIG9mIHRoZSBlbGVtZW50LgorICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+PGxpc3RpdGVtPjxwYXJhPgorICAgICAgICBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG9mIHRoZSBlbGVtZW50LCBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGEgY29udGFjdAorICAgICAgICBlbWFpbCBhZGRyZXNzIGluIGFuZ2xlIGJyYWNrZXRzLgorICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPHBhcmE+CisgICAgICBGb3IgZXhhbXBsZToKKyAgICA8L3BhcmE+CisgICAgPHByb2dyYW1saXN0aW5nPjwhLS0gZXhhbXBsZS1iZWdpbiBib2lsZXJwbGF0ZS5jIGIgLS0+CitzdGF0aWMgY29uc3QgR3N0RWxlbWVudERldGFpbHMgbXlfZmlsdGVyX2RldGFpbHMgPSB7CisgICJBbiBleGFtcGxlIHBsdWdpbiIsCisgICJFeGFtcGxlL0ZpcnN0RXhhbXBsZSIsCisgICJTaG93cyB0aGUgYmFzaWMgc3RydWN0dXJlIG9mIGEgcGx1Z2luIiwKKyAgInlvdXIgbmFtZSAmbHQ7eW91ci5uYW1lQHlvdXIuaXNwJmd0OyIKK307CisgICAgPCEtLSBleGFtcGxlLWVuZCBib2lsZXJwbGF0ZS5jIGIgLS0+PC9wcm9ncmFtbGlzdGluZz4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSBlbGVtZW50IGRldGFpbHMgYXJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgcGx1Z2luIGR1cmluZworICAgICAgdGhlIDxmdW5jdGlvbj5fYmFzZV9pbml0ICgpPC9mdW5jdGlvbj4gZnVuY3Rpb24sIHdoaWNoIGlzIHBhcnQgb2YKKyAgICAgIHRoZSBHT2JqZWN0IHN5c3RlbS4gVGhlIDxmdW5jdGlvbj5fYmFzZV9pbml0ICgpPC9mdW5jdGlvbj4gZnVuY3Rpb24KKyAgICAgIHNob3VsZCBiZSBzZXQgZm9yIHRoaXMgR09iamVjdCBpbiB0aGUgZnVuY3Rpb24gd2hlcmUgeW91IHJlZ2lzdGVyCisgICAgICB0aGUgdHlwZSB3aXRoIEdMaWIuCisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz48IS0tIGV4YW1wbGUtYmVnaW4gYm9pbGVycGxhdGUuYyBjIC0tPgorc3RhdGljIHZvaWQKK2dzdF9teV9maWx0ZXJfYmFzZV9pbml0IChncG9pbnRlciBrbGFzcykKK3sKKyAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKKzwhLS0gZXhhbXBsZS1lbmQgYm9pbGVycGxhdGUuYyBjIC0tPgorICBzdGF0aWMgY29uc3QgR3N0RWxlbWVudERldGFpbHMgbXlfZmlsdGVyX2RldGFpbHMgPSB7CitbLi5dCisgIH07CisKK1suLl08IS0tIGV4YW1wbGUtYmVnaW4gYm9pbGVycGxhdGUuYyBkIC0tPgorICBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlscyAoZWxlbWVudF9jbGFzcywgJmFtcDtteV9maWx0ZXJfZGV0YWlscyk7Cis8IS0tIGV4YW1wbGUtZW5kIGJvaWxlcnBsYXRlLmMgZCAtLT4KK30KKyAgICA8L3Byb2dyYW1saXN0aW5nPgorICA8L3NlY3QxPgorCisgIDwhLS0gIyMjIyMjIyMjIyMjIHNlY3QxICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWJvaWxlci1wYWR0ZW1wbGF0ZXMiPgorICAgIDx0aXRsZT5Hc3RTdGF0aWNQYWRUZW1wbGF0ZTwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBBIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGlzIGEgZGVzY3JpcHRpb24gb2YgYSBwYWQgdGhhdCB0aGUgZWxlbWVudCB3aWxsCisgICAgICAob3IgbWlnaHQpIGNyZWF0ZSBhbmQgdXNlLiBJdCBjb250YWluczoKKyAgICA8L3BhcmE+CisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+QSBzaG9ydCBuYW1lIGZvciB0aGUgcGFkLjwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPlBhZCBkaXJlY3Rpb24uPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgRXhpc3RlbmNlIHByb3BlcnR5LiBUaGlzIGluZGljYXRlcyB3aGV0aGVyIHRoZSBwYWQgZXhpc3RzIGFsd2F5cyAoYW4KKyAgICAgICAgICA8cXVvdGU+YWx3YXlzPC9xdW90ZT4gcGFkKSwgb25seSBpbiBzb21lIGNhc2VzIChhCisgICAgICAgICAgPHF1b3RlPnNvbWV0aW1lczwvcXVvdGU+IHBhZCkgb3Igb25seSBpZiB0aGUgYXBwbGljYXRpb24gcmVxdWVzdGVkCisgICAgICAgICAgc3VjaCBhIHBhZCAoYSA8cXVvdGU+cmVxdWVzdDwvcXVvdGU+IHBhZCkuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPlN1cHBvcnRlZCB0eXBlcyBieSB0aGlzIGVsZW1lbnQgKGNhcGFiaWxpdGllcykuPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8cGFyYT4KKyAgICAgIEZvciBleGFtcGxlOgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3Rpbmc+PCEtLSBleGFtcGxlLWJlZ2luIGJvaWxlcnBsYXRlLmMgZSAtLT4KK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX2ZhY3RvcnkgPQorR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKAorICAic2luayIsCisgIEdTVF9QQURfU0lOSywKKyAgR1NUX1BBRF9BTFdBWVMsCisgIEdTVF9TVEFUSUNfQ0FQUyAoIkFOWSIpCispOworPCEtLSBleGFtcGxlLWVuZCBib2lsZXJwbGF0ZS5jIGUgLS0+Cis8IS0tIGV4YW1wbGUtYmVnaW4gYm9pbGVycGxhdGUuYyBmIC0tPjwhLS0KK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfZmFjdG9yeSA9CitHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoCisgICJzcmMiLAorICBHU1RfUEFEX1NSQywKKyAgR1NUX1BBRF9BTFdBWVMsCisgIEdTVF9TVEFUSUNfQ0FQUyAoIkFOWSIpCispOworLS0+PCEtLSBleGFtcGxlLWVuZCBib2lsZXJwbGF0ZS5jIGYgLS0+CisgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDxwYXJhPgorICAgICAgVGhvc2UgcGFkIHRlbXBsYXRlcyBhcmUgcmVnaXN0ZXJlZCBkdXJpbmcgdGhlCisgICAgICA8ZnVuY3Rpb24+X2Jhc2VfaW5pdCAoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLiBQYWRzIGFyZSBjcmVhdGVkIGZyb20gdGhlc2UKKyAgICAgIHRlbXBsYXRlcyBpbiB0aGUgZWxlbWVudCdzIDxmdW5jdGlvbj5faW5pdCAoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIHVzaW5nCisgICAgICA8ZnVuY3Rpb24+Z3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoKTwvZnVuY3Rpb24+LiBUaGUgdGVtcGxhdGUgY2FuIGJlCisgICAgICByZXRyaWV2ZWQgZnJvbSB0aGUgZWxlbWVudCBjbGFzcyB1c2luZworICAgICAgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKCk8L2Z1bmN0aW9uPi4gU2VlIGJlbG93CisgICAgICBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoaXMuIEluIG9yZGVyIHRvIGNyZWF0ZSBhIG5ldyBwYWQgZnJvbSB0aGlzCisgICAgICB0ZW1wbGF0ZSB1c2luZyA8ZnVuY3Rpb24+Z3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoKTwvZnVuY3Rpb24+LCB5b3UKKyAgICAgIHdpbGwgbmVlZCB0byBkZWNsYXJlIHRoZSBwYWQgdGVtcGxhdGUgYXMgYSBnbG9iYWwgdmFyaWFibGUuIE1vcmUgb24KKyAgICAgIHRoaXMgc3ViamVjdCBpbiA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLWJ1aWxkaW5nLXBhZHMiLz4uCisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz4KK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX2ZhY3RvcnkgPSBbLi5dLAorICAgIHNyY19mYWN0b3J5ID0gWy4uXTsKKworc3RhdGljIHZvaWQKK2dzdF9teV9maWx0ZXJfYmFzZV9pbml0IChncG9pbnRlciBrbGFzcykKK3sKKyAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKK1suLl0KKzwhLS0gZXhhbXBsZS1iZWdpbiBib2lsZXJwbGF0ZS5jIGcgLS0+CisgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCisJZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0ICgmYW1wO3NyY19mYWN0b3J5KSk7CisgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCisJZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0ICgmYW1wO3NpbmtfZmFjdG9yeSkpOworfQorPCEtLSBleGFtcGxlLWVuZCBib2lsZXJwbGF0ZS5jIGcgLS0+Cis8IS0tIGV4YW1wbGUtYmVnaW4gYm9pbGVycGxhdGUuYyBoIC0tPjwhLS0KK3N0YXRpYyB2b2lkCitnc3RfbXlfZmlsdGVyX2NsYXNzX2luaXQgKEdzdE15RmlsdGVyQ2xhc3MgKiBrbGFzcykKK3sKK30KKworc3RhdGljIHZvaWQKK2dzdF9teV9maWx0ZXJfaW5pdCAoR3N0TXlGaWx0ZXIgKiBmaWx0ZXIpCit7Cit9CisKKyNpbmNsdWRlICJyZWdpc3Rlci5mdW5jIgorICAgIC0tPjwhLS0gZXhhbXBsZS1lbmQgYm9pbGVycGxhdGUuYyBoIC0tPjwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+CisgICAgICBUaGUgbGFzdCBhcmd1bWVudCBpbiBhIHRlbXBsYXRlIGlzIGl0cyB0eXBlCisgICAgICBvciBsaXN0IG9mIHN1cHBvcnRlZCB0eXBlcy4gSW4gdGhpcyBleGFtcGxlLCB3ZSB1c2UgJ0FOWScsIHdoaWNoIG1lYW5zCisgICAgICB0aGF0IHRoaXMgZWxlbWVudCB3aWxsIGFjY2VwdCBhbGwgaW5wdXQuIEluIHJlYWwtbGlmZSBzaXR1YXRpb25zLCB5b3UKKyAgICAgIHdvdWxkIHNldCBhIG1pbWV0eXBlIGFuZCBvcHRpb25hbGx5IGEgc2V0IG9mIHByb3BlcnRpZXMgdG8gbWFrZSBzdXJlCisgICAgICB0aGF0IG9ubHkgc3VwcG9ydGVkIGlucHV0IHdpbGwgY29tZSBpbi4gVGhpcyByZXByZXNlbnRhdGlvbiBzaG91bGQgYmUKKyAgICAgIGEgc3RyaW5nIHRoYXQgc3RhcnRzIHdpdGggYSBtaW1ldHlwZSwgdGhlbiBhIHNldCBvZiBjb21tYS1zZXBhcmF0ZXMKKyAgICAgIHByb3BlcnRpZXMgd2l0aCB0aGVpciBzdXBwb3J0ZWQgdmFsdWVzLiBJbiBjYXNlIG9mIGFuIGF1ZGlvIGZpbHRlciB0aGF0CisgICAgICBzdXBwb3J0cyByYXcgaW50ZWdlciAxNi1iaXQgYXVkaW8sIG1vbm8gb3Igc3RlcmVvIGF0IGFueSBzYW1wbGVyYXRlLCB0aGUKKyAgICAgIGNvcnJlY3QgdGVtcGxhdGUgd291bGQgbG9vayBsaWtlIHRoaXM6CisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz4KK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX2ZhY3RvcnkgPQorR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKAorICAic2luayIsCisgIEdTVF9QQURfU0lOSywKKyAgR1NUX1BBRF9BTFdBWVMsCisgIEdTVF9TVEFUSUNfQ0FQUyAoCisgICAgImF1ZGlvL3gtcmF3LWludCwgIgorICAgICAgIndpZHRoID0gKGludCkgMTYsICIKKyAgICAgICJkZXB0aCA9IChpbnQpIDE2LCAiCisgICAgICAiZW5kaWFubmVzcyA9IChpbnQpIEJZVEVfT1JERVIsICIKKyAgICAgICJjaGFubmVscyA9IChpbnQpIHsgMSwgMiB9LCAiCisgICAgICAicmF0ZSA9IChpbnQpIFsgODAwMCwgOTYwMDAgXSIKKyAgKQorKTsKKyAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgIDxwYXJhPgorICAgICAgVmFsdWVzIHN1cnJvdW5kZWQgYnkgY3VybHkgYnJhY2tldHMgKDxxdW90ZT57PC9xdW90ZT4gYW5kCisgICAgICA8cXVvdGU+fTwvcXVvdGU+KSBhcmUgbGlzdHMsIHZhbHVlcyBzdXJyb3VuZGVkIGJ5IHNxdWFyZSBicmFja2V0cworICAgICAgKDxxdW90ZT5bPC9xdW90ZT4gYW5kIDxxdW90ZT5dPC9xdW90ZT4pIGFyZSByYW5nZXMuCisgICAgICBNdWx0aXBsZSBzZXRzIG9mIHR5cGVzIGFyZSBzdXBwb3J0ZWQgdG9vLCBhbmQgc2hvdWxkIGJlIHNlcGFyYXRlZCBieQorICAgICAgYSBzZW1pY29sb24gKDxxdW90ZT47PC9xdW90ZT4pLiBMYXRlciwgaW4gdGhlIGNoYXB0ZXIgb24gcGFkcywgd2Ugd2lsbAorICAgICAgc2VlIGhvdyB0byB1c2UgdHlwZXMgdG8ga25vdyB0aGUgZXhhY3QgZm9ybWF0IG9mIGEgc3RyZWFtOgorICAgICAgPHhyZWYgbGlua2VuZD0iY2hhcHRlci1idWlsZGluZy1wYWRzIi8+LgorICAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKworICA8IS0tICMjIyMjIyMjIyMjIyBzZWN0MSAjIyMjIyMjIyMjIyMjIC0tPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1ib2lsZXItY29uc3RydWN0b3JzIj4KKyAgICA8dGl0bGU+Q29uc3RydWN0b3IgRnVuY3Rpb25zPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIEVhY2ggZWxlbWVudCBoYXMgdGhyZWUgZnVuY3Rpb25zIHdoaWNoIGFyZSB1c2VkIGZvciBjb25zdHJ1Y3Rpb24gb2YgYW4KKyAgICAgIGVsZW1lbnQuIFRoZXNlIGFyZSB0aGUgPGZ1bmN0aW9uPl9iYXNlX2luaXQoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIHdoaWNoCisgICAgICBpcyBtZWFudCB0byBpbml0aWFsaXplIGNsYXNzIGFuZCBjaGlsZCBjbGFzcyBwcm9wZXJ0aWVzIGR1cmluZyBlYWNoIG5ldworICAgICAgY2hpbGQgY2xhc3MgY3JlYXRpb247IHRoZSA8ZnVuY3Rpb24+X2NsYXNzX2luaXQoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLAorICAgICAgd2hpY2ggaXMgdXNlZCB0byBpbml0aWFsaXNlIHRoZSBjbGFzcyBvbmx5IG9uY2UgKHNwZWNpZnlpbmcgd2hhdCBzaWduYWxzLAorICAgICAgYXJndW1lbnRzIGFuZCB2aXJ0dWFsIGZ1bmN0aW9ucyB0aGUgY2xhc3MgaGFzIGFuZCBzZXR0aW5nIHVwIGdsb2JhbAorICAgICAgc3RhdGUpOyBhbmQgdGhlIDxmdW5jdGlvbj5faW5pdCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24sIHdoaWNoIGlzIHVzZWQgdG8KKyAgICAgIGluaXRpYWxpc2UgYSBzcGVjaWZpYyBpbnN0YW5jZSBvZiB0aGlzIHR5cGUuCisgICAgPC9wYXJhPgorICA8L3NlY3QxPgorCisgIDwhLS0gIyMjIyMjIyMjIyMjIHNlY3QxICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWJvaWxlci1wbHVnaW5pbml0Ij4KKyAgICA8dGl0bGU+VGhlIHBsdWdpbl9pbml0IGZ1bmN0aW9uPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIE9uY2Ugd2UgaGF2ZSB3cml0dGVuIGNvZGUgZGVmaW5pbmcgYWxsIHRoZSBwYXJ0cyBvZiB0aGUgcGx1Z2luLCB3ZSBuZWVkIHRvCisgICAgICB3cml0ZSB0aGUgcGx1Z2luX2luaXQoKSBmdW5jdGlvbi4gVGhpcyBpcyBhIHNwZWNpYWwgZnVuY3Rpb24sIHdoaWNoIGlzCisgICAgICBjYWxsZWQgYXMgc29vbiBhcyB0aGUgcGx1Z2luIGlzIGxvYWRlZCwgYW5kIHNob3VsZCByZXR1cm4gVFJVRSBvciBGQUxTRQorICAgICAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQgbG9hZGVkIGluaXRpYWxpemVkIGFueSBkZXBlbmRlbmNpZXMgY29ycmVjdGx5LgorICAgICAgQWxzbywgaW4gdGhpcyBmdW5jdGlvbiwgYW55IHN1cHBvcnRlZCBlbGVtZW50IHR5cGUgaW4gdGhlIHBsdWdpbiBzaG91bGQKKyAgICAgIGJlIHJlZ2lzdGVyZWQuCisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz48IS0tIGV4YW1wbGUtYmVnaW4gcmVnaXN0ZXIuZnVuYyAtLT4KK3N0YXRpYyBnYm9vbGVhbgorcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqcGx1Z2luKQoreworICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgIm15X2ZpbHRlciIsCisJCQkgICAgICAgR1NUX1JBTktfTk9ORSwKKwkJCSAgICAgICBHU1RfVFlQRV9NWV9GSUxURVIpOworfQorCitHU1RfUExVR0lOX0RFRklORSAoCisgIEdTVF9WRVJTSU9OX01BSk9SLAorICBHU1RfVkVSU0lPTl9NSU5PUiwKKyAgIm15X2ZpbHRlciIsCisgICJNeSBmaWx0ZXIgcGx1Z2luIiwKKyAgcGx1Z2luX2luaXQsCisgIFZFUlNJT04sCisgICJMR1BMIiwKKyAgIkdTdHJlYW1lciIsCisgICJodHRwOi8vZ3N0cmVhbWVyLm5ldC8iCispCisgICAgPCEtLSBleGFtcGxlLWVuZCByZWdpc3Rlci5mdW5jIC0tPjwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+CisgICAgICBOb3RlIHRoYXQgdGhlIGluZm9ybWF0aW9uIHJldHVybmVkIGJ5IHRoZSBwbHVnaW5faW5pdCgpIGZ1bmN0aW9uIHdpbGwgYmUKKyAgICAgIGNhY2hlZCBpbiBhIGNlbnRyYWwgcmVnaXN0cnkuIEZvciB0aGlzIHJlYXNvbiwgaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlCisgICAgICBzYW1lIGluZm9ybWF0aW9uIGlzIGFsd2F5cyByZXR1cm5lZCBieSB0aGUgZnVuY3Rpb246IGZvciBleGFtcGxlLCBpdCAKKyAgICAgIG11c3Qgbm90IG1ha2UgZWxlbWVudCBmYWN0b3JpZXMgYXZhaWxhYmxlIGJhc2VkIG9uIHJ1bnRpbWUgY29uZGl0aW9ucy4KKyAgICAgIElmIGFuIGVsZW1lbnQgY2FuIG9ubHkgd29yayBpbiBjZXJ0YWluIGNvbmRpdGlvbnMgKGZvciBleGFtcGxlLCBpZiB0aGUKKyAgICAgIHNvdW5kY2FyZCBpcyBub3QgYmVpbmcgdXNlZCBieSBzb21lIG90aGVyIHByb2Nlc3MpIHRoaXMgbXVzdCBiZSByZWZsZWN0ZWQKKyAgICAgIGJ5IHRoZSBlbGVtZW50IGJlaW5nIHVuYWJsZSB0byBlbnRlciB0aGUgUkVBRFkgc3RhdGUgaWYgdW5hdmFpbGFibGUsCisgICAgICByYXRoZXIgdGhhbiB0aGUgcGx1Z2luIGF0dGVtcHRpbmcgdG8gZGVueSBleGlzdGVuY2Ugb2YgdGhlIHBsdWdpbi4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL3B3Zy9idWlsZGluZy1jaGFpbmZuLnhtbCBiL2RvY3MvcHdnL2J1aWxkaW5nLWNoYWluZm4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NDYwODAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3B3Zy9idWlsZGluZy1jaGFpbmZuLnhtbApAQCAtMCwwICsxLDEzMiBAQAorCis8IS0tICMjIyMjIyMjIyMjIyBjaGFwdGVyICMjIyMjIyMjIyMjIyMgLS0+CisKKzxjaGFwdGVyIGlkPSJjaGFwdGVyLWJ1aWxkaW5nLWNoYWluZm4iPgorICA8dGl0bGU+VGhlIGNoYWluIGZ1bmN0aW9uPC90aXRsZT4KKyAgPHBhcmE+CisgICAgVGhlIGNoYWluIGZ1bmN0aW9uIGlzIHRoZSBmdW5jdGlvbiBpbiB3aGljaCBhbGwgZGF0YSBwcm9jZXNzaW5nIHRha2VzCisgICAgcGxhY2UuIEluIHRoZSBjYXNlIG9mIGEgc2ltcGxlIGZpbHRlciwgPGZ1bmN0aW9uPl9jaGFpbiAoKTwvZnVuY3Rpb24+CisgICAgZnVuY3Rpb25zIGFyZSBtb3N0bHkgbGluZWFyIGZ1bmN0aW9ucyAtIHNvIGZvciBlYWNoIGluY29taW5nIGJ1ZmZlciwKKyAgICBvbmUgYnVmZmVyIHdpbGwgZ28gb3V0LCB0b28uIEJlbG93IGlzIGEgdmVyeSBzaW1wbGUgaW1wbGVtZW50YXRpb24gb2YKKyAgICBhIGNoYWluIGZ1bmN0aW9uOgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz48IS0tIGV4YW1wbGUtYmVnaW4gY2hhaW4uYyBhIC0tPjwhLS0KKyNpbmNsdWRlICJpbml0LmZ1bmMiCisjaW5jbHVkZSAiY2Fwcy5mdW5jIgorc3RhdGljIGdib29sZWFuCitnc3RfbXlfZmlsdGVyX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpCit7CisgIHJldHVybiBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgZXZlbnQpOworfQorLS0+PCEtLSBleGFtcGxlLWVuZCBjaGFpbi5jIGEgLS0+Cis8IS0tIGV4YW1wbGUtYmVnaW4gY2hhaW4uYyBiIC0tPgorc3RhdGljIEdzdEZsb3dSZXR1cm4KK2dzdF9teV9maWx0ZXJfY2hhaW4gKEdzdFBhZCAgICAqcGFkLAorCQkgICAgIEdzdEJ1ZmZlciAqYnVmKQoreworICBHc3RNeUZpbHRlciAqZmlsdGVyID0gR1NUX01ZX0ZJTFRFUiAoR1NUX09CSkVDVF9QQVJFTlQgKHBhZCkpOworCisgIGlmICghZmlsdGVyLT5zaWxlbnQpCisgICAgZ19wcmludCAoIkhhdmUgZGF0YSBvZiBzaXplICV1IGJ5dGVzIVxuIiwgR1NUX0JVRkZFUl9TSVpFIChidWYpKTsKKworICByZXR1cm4gZ3N0X3BhZF9wdXNoIChmaWx0ZXItPnNyY3BhZCwgYnVmKTsKK30KKzwhLS0gZXhhbXBsZS1lbmQgY2hhaW4uYyBiIC0tPgorPCEtLSBleGFtcGxlLWJlZ2luIGNoYWluLmMgYyAtLT48IS0tCitzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KK2dzdF9teV9maWx0ZXJfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKK3sKKyAgcmV0dXJuIEdTVF9DQUxMX1BBUkVOVF9XSVRIX0RFRkFVTFQgKEdTVF9FTEVNRU5UX0NMQVNTLAorICAgICAgY2hhbmdlX3N0YXRlLCAoZWxlbWVudCwgdHJhbnNpdGlvbiksIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Cit9CisjaW5jbHVkZSAicmVnaXN0ZXIuZnVuYyIKKyAgLS0+PCEtLSBleGFtcGxlLWVuZCBjaGFpbi5jIGMgLS0+PC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgICAgT2J2aW91c2x5LCB0aGUgYWJvdmUgZG9lc24ndCBkbyBtdWNoIHVzZWZ1bC4gSW5zdGVhZCBvZiBwcmludGluZyB0aGF0IHRoZQorICAgIGRhdGEgaXMgaW4sIHlvdSB3b3VsZCBub3JtYWxseSBwcm9jZXNzIHRoZSBkYXRhIHRoZXJlLiBSZW1lbWJlciwgaG93ZXZlciwKKyAgICB0aGF0IGJ1ZmZlcnMgYXJlIG5vdCBhbHdheXMgd3JpdGVhYmxlLiBJbiBtb3JlIGFkdmFuY2VkIGVsZW1lbnRzICh0aGUgb25lcworICAgIHRoYXQgZG8gZXZlbnQgcHJvY2Vzc2luZyksIHlvdSBtYXkgd2FudCB0byBhZGRpdGlvbmFsbHkgc3BlY2lmeSBhbiBldmVudAorICAgIGhhbmRsaW5nIGZ1bmN0aW9uLCB3aGljaCB3aWxsIGJlIGNhbGxlZCB3aGVuIHN0cmVhbS1ldmVudHMgYXJlIHNlbnQgKHN1Y2gKKyAgICBhcyBlbmQtb2Ytc3RyZWFtLCBuZXdzZWdtZW50LCB0YWdzLCBldGMuKS4KKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CitzdGF0aWMgdm9pZAorZ3N0X215X2ZpbHRlcl9pbml0IChHc3RNeUZpbHRlciAqIGZpbHRlcikKK3sKK1suLl0KKyAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKGZpbHRlci0mZ3Q7c2lua3BhZCwKKyAgICAgIGdzdF9teV9maWx0ZXJfZXZlbnQpOworWy4uXQorfQorPCEtLSBleGFtcGxlLWJlZ2luIGNoYWluMi5jIGEgLS0+PCEtLQorI2luY2x1ZGUgImluaXQuZnVuYyIKKyNpbmNsdWRlICJjYXBzLmZ1bmMiCisjaW5jbHVkZSAiY2hhaW4uZnVuYyIKKy0tPjwhLS0gZXhhbXBsZS1lbmQgY2hhaW4yLmMgYSAtLT4KKzwhLS0gZXhhbXBsZS1iZWdpbiBjaGFpbi5mdW5jIGEgLS0+PCEtLQorc3RhdGljIHZvaWQKK2dzdF9teV9maWx0ZXJfc3RvcF9wcm9jZXNzaW5nIChHc3RNeUZpbHRlciAqIGZpbHRlcikKK3sKK30KKworc3RhdGljIEdzdEJ1ZmZlciAqCitnc3RfbXlfZmlsdGVyX3Byb2Nlc3NfZGF0YSAoR3N0TXlGaWx0ZXIgKiBmaWx0ZXIsIGNvbnN0IEdzdEJ1ZmZlciAqIGJ1ZikKK3sKKyAgcmV0dXJuIE5VTEw7Cit9CistLT48IS0tIGV4YW1wbGUtZW5kIGNoYWluLmZ1bmMgYSAtLT4KKzwhLS0gZXhhbXBsZS1iZWdpbiBjaGFpbi5mdW5jIGIgLS0+CitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9teV9maWx0ZXJfZXZlbnQgKEdzdFBhZCAgICpwYWQsCisJCSAgICAgR3N0RXZlbnQgKmV2ZW50KQoreworICBHc3RNeUZpbHRlciAqZmlsdGVyID0gR1NUX01ZX0ZJTFRFUiAoR1NUX09CSkVDVF9QQVJFTlQgKHBhZCkpOworCisgIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgeworICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKKyAgICAgIC8qIGVuZC1vZi1zdHJlYW0sIHdlIHNob3VsZCBjbG9zZSBkb3duIGFsbCBzdHJlYW0gbGVmdG92ZXJzIGhlcmUgKi8KKyAgICAgIGdzdF9teV9maWx0ZXJfc3RvcF9wcm9jZXNzaW5nIChmaWx0ZXIpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBldmVudCk7Cit9CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuCitnc3RfbXlfZmlsdGVyX2NoYWluIChHc3RQYWQgICAgKnBhZCwKKwkJICAgICBHc3RCdWZmZXIgKmJ1ZikKK3sKKyAgR3N0TXlGaWx0ZXIgKmZpbHRlciA9IEdTVF9NWV9GSUxURVIgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7CisgIEdzdEJ1ZmZlciAqb3V0YnVmOworCisgIG91dGJ1ZiA9IGdzdF9teV9maWx0ZXJfcHJvY2Vzc19kYXRhIChmaWx0ZXIsIGJ1Zik7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7CisgIGlmICghb3V0YnVmKSB7CisgICAgLyogc29tZXRoaW5nIHdlbnQgd3JvbmcgLSBzaWduYWwgYW4gZXJyb3IgKi8KKyAgICBHU1RfRUxFTUVOVF9FUlJPUiAoR1NUX0VMRU1FTlQgKGZpbHRlciksIFNUUkVBTSwgRkFJTEVELCAoTlVMTCksIChOVUxMKSk7CisgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOworICB9CisKKyAgcmV0dXJuIGdzdF9wYWRfcHVzaCAoZmlsdGVyLT5zcmNwYWQsIG91dGJ1Zik7Cit9Cis8IS0tIGV4YW1wbGUtZW5kIGNoYWluLmZ1bmMgYiAtLT4KKzwhLS0gZXhhbXBsZS1iZWdpbiBjaGFpbjIuYyBiIC0tPjwhLS0KK3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgorZ3N0X215X2ZpbHRlcl9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQoreworICByZXR1cm4gR1NUX0NBTExfUEFSRU5UX1dJVEhfREVGQVVMVCAoR1NUX0VMRU1FTlRfQ0xBU1MsCisgICAgICBjaGFuZ2Vfc3RhdGUsIChlbGVtZW50LCB0cmFuc2l0aW9uKSwgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKK30KKyNpbmNsdWRlICJyZWdpc3Rlci5mdW5jIgorICAtLT48IS0tIGV4YW1wbGUtZW5kIGNoYWluMi5jIGIgLS0+PC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgICAgSW4gc29tZSBjYXNlcywgaXQgbWlnaHQgYmUgdXNlZnVsIGZvciBhbiBlbGVtZW50IHRvIGhhdmUgY29udHJvbCBvdmVyIHRoZQorICAgIGlucHV0IGRhdGEgcmF0ZSwgdG9vLiBJbiB0aGF0IGNhc2UsIHlvdSBwcm9iYWJseSB3YW50IHRvIHdyaXRlIGEgc28tY2FsbGVkCisgICAgPGVtcGhhc2lzPmxvb3AtYmFzZWQ8L2VtcGhhc2lzPiBlbGVtZW50LiBTb3VyY2UgZWxlbWVudHMgKHdpdGggb25seSBzb3VyY2UKKyAgICBwYWRzKSBjYW4gYWxzbyBiZSA8ZW1waGFzaXM+Z2V0LWJhc2VkPC9lbXBoYXNpcz4gZWxlbWVudHMuIFRoZXNlIGNvbmNlcHRzCisgICAgd2lsbCBiZSBleHBsYWluZWQgaW4gdGhlIGFkdmFuY2VkIHNlY3Rpb24gb2YgdGhpcyBndWlkZSwgYW5kIGluIHRoZSBzZWN0aW9uCisgICAgdGhhdCBzcGVjaWZpY2FsbHkgZGlzY3Vzc2VzIHNvdXJjZSBwYWRzLgorICA8L3BhcmE+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL3B3Zy9idWlsZGluZy1wYWRzLnhtbCBiL2RvY3MvcHdnL2J1aWxkaW5nLXBhZHMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZjlkZjgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3B3Zy9idWlsZGluZy1wYWRzLnhtbApAQCAtMCwwICsxLDIzMCBAQAorCis8IS0tICMjIyMjIyMjIyMjIyBjaGFwdGVyICMjIyMjIyMjIyMjIyMgLS0+CisKKzxjaGFwdGVyIGlkPSJjaGFwdGVyLWJ1aWxkaW5nLXBhZHMiPgorICA8dGl0bGU+U3BlY2lmeWluZyB0aGUgcGFkczwvdGl0bGU+CisgIDxwYXJhPgorICAgIEFzIGV4cGxhaW5lZCBiZWZvcmUsIHBhZHMgYXJlIHRoZSBwb3J0IHRocm91Z2ggd2hpY2ggZGF0YSBnb2VzIGluIGFuZCBvdXQKKyAgICBvZiB5b3VyIGVsZW1lbnQsIGFuZCB0aGF0IG1ha2VzIHRoZW0gYSB2ZXJ5IGltcG9ydGFudCBpdGVtIGluIHRoZSBwcm9jZXNzCisgICAgb2YgZWxlbWVudCBjcmVhdGlvbi4gSW4gdGhlIGJvaWxlcnBsYXRlIGNvZGUsIHdlIGhhdmUgc2VlbiBob3cgc3RhdGljIHBhZAorICAgIHRlbXBsYXRlcyB0YWtlIGNhcmUgb2YgcmVnaXN0ZXJpbmcgcGFkIHRlbXBsYXRlcyB3aXRoIHRoZSBlbGVtZW50IGNsYXNzLgorICAgIEhlcmUsIHdlIHdpbGwgc2VlIGhvdyB0byBjcmVhdGUgYWN0dWFsIGVsZW1lbnRzLCB1c2UgYSA8ZnVuY3Rpb24+X3NldGNhcHMKKyAgICAoKTwvZnVuY3Rpb24+LWZ1bmN0aW9ucyB0byBjb25maWd1cmUgZm9yIGEgcGFydGljdWxhciBmb3JtYXQgYW5kIGhvdyB0bworICAgIHJlZ2lzdGVyIGZ1bmN0aW9ucyB0byBsZXQgZGF0YSBmbG93IHRocm91Z2ggdGhlIGVsZW1lbnQuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgSW4gdGhlIGVsZW1lbnQgPGZ1bmN0aW9uPl9pbml0ICgpPC9mdW5jdGlvbj4gZnVuY3Rpb24sIHlvdSBjcmVhdGUgdGhlIHBhZAorICAgIGZyb20gdGhlIHBhZCB0ZW1wbGF0ZSB0aGF0IGhhcyBiZWVuIHJlZ2lzdGVyZWQgd2l0aCB0aGUgZWxlbWVudCBjbGFzcyBpbgorICAgIHRoZSA8ZnVuY3Rpb24+X2Jhc2VfaW5pdCAoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLiBBZnRlciBjcmVhdGluZyB0aGUgcGFkLAorICAgIHlvdSBoYXZlIHRvIHNldCBhIDxmdW5jdGlvbj5fc2V0Y2FwcyAoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIHBvaW50ZXIgYW5kCisgICAgb3B0aW9uYWxseSBhIDxmdW5jdGlvbj5fZ2V0Y2FwcyAoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIHBvaW50ZXIuIEFsc28sIHlvdQorICAgIGhhdmUgdG8gc2V0IGEgPGZ1bmN0aW9uPl9jaGFpbiAoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIHBvaW50ZXIuCisgICAgQWx0ZXJuYXRpdmVseSwgcGFkcyBjYW4gYWxzbyBvcGVyYXRlIGluIGxvb3BpbmcgbW9kZSwgd2hpY2ggbWVhbnMgdGhhdCB0aGV5CisgICAgY2FuIHB1bGwgZGF0YSB0aGVtc2VsdmVzLiBNb3JlIG9uIHRoaXMgdG9waWMgbGF0ZXIuIEFmdGVyIHRoYXQsIHlvdSBoYXZlCisgICAgdG8gcmVnaXN0ZXIgdGhlIHBhZCB3aXRoIHRoZSBlbGVtZW50LiBUaGlzIGhhcHBlbnMgbGlrZSB0aGlzOgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz48IS0tIGV4YW1wbGUtYmVnaW4gaW5pdC5mdW5jIGEgLS0+PCEtLQorI2luY2x1ZGUgImZpbHRlci5oIgorI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OworCitzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KK2dzdF9teV9maWx0ZXJfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7CisKK0dTVF9CT0lMRVJQTEFURSAoR3N0TXlGaWx0ZXIsIGdzdF9teV9maWx0ZXIsIEdzdEVsZW1lbnQsIEdTVF9UWVBFX0VMRU1FTlQpOworCitzdGF0aWMgdm9pZAorZ3N0X215X2ZpbHRlcl9iYXNlX2luaXQgKGdwb2ludGVyIGtsYXNzKQoreworICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOworICBzdGF0aWMgR3N0RWxlbWVudERldGFpbHMgbXlfZmlsdGVyX2RldGFpbHMgPSB7CisgICAgIkFuIGV4YW1wbGUgcGx1Z2luIiwKKyAgICAiRXhhbXBsZS9GaXJzdEV4YW1wbGUiLAorICAgICJTaG93cyB0aGUgYmFzaWMgc3RydWN0dXJlIG9mIGEgcGx1Z2luIiwKKyAgICAieW91ciBuYW1lIDx5b3VyLm5hbWVAeW91ci5pc3A+IgorICB9OworICBzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua19mYWN0b3J5ID0KKyAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKAorICAgICJzaW5rIiwKKyAgICBHU1RfUEFEX1NJTkssCisgICAgR1NUX1BBRF9BTFdBWVMsCisgICAgR1NUX1NUQVRJQ19DQVBTICgiQU5ZIikKKyAgKTsKKyAgc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY19mYWN0b3J5ID0KKyAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKAorICAgICJzcmMiLAorICAgIEdTVF9QQURfU1JDLAorICAgIEdTVF9QQURfQUxXQVlTLAorICAgIEdTVF9TVEFUSUNfQ0FQUyAoIkFOWSIpCisgICk7CisKKyAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHMgKGVsZW1lbnRfY2xhc3MsICZteV9maWx0ZXJfZGV0YWlscyk7CisgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCisgICAgICAgIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoJnNyY19mYWN0b3J5KSk7CisgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCisgICAgICAgIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoJnNpbmtfZmFjdG9yeSkpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X215X2ZpbHRlcl9jbGFzc19pbml0IChHc3RNeUZpbHRlckNsYXNzICoga2xhc3MpCit7CisgIEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyktPmNoYW5nZV9zdGF0ZSA9IGdzdF9teV9maWx0ZXJfY2hhbmdlX3N0YXRlOworfQorLS0+PCEtLSBleGFtcGxlLWVuZCBpbml0LmZ1bmMgYSAtLT4KKzwhLS0gZXhhbXBsZS1iZWdpbiBpbml0LmZ1bmMgYiAtLT4KK3N0YXRpYyBnYm9vbGVhbgkJZ3N0X215X2ZpbHRlcl9zZXRjYXBzCShHc3RQYWQgICAgICAgICpwYWQsCisJCQkJCQkgR3N0Q2FwcyAgICAgICAqY2Fwcyk7CitzdGF0aWMgR3N0Rmxvd1JldHVybglnc3RfbXlfZmlsdGVyX2NoYWluCShHc3RQYWQgICAgICAgICpwYWQsCisJCQkJCQkgR3N0QnVmZmVyICAgICAqYnVmKTsKKzwhLS0gZXhhbXBsZS1lbmQgaW5pdC5mdW5jIGIgLS0+Cis8IS0tIGV4YW1wbGUtYmVnaW4gaW5pdC5mdW5jIGMgLS0+PCEtLQorc3RhdGljIEdzdENhcHMgKglnc3RfbXlfZmlsdGVyX2dldGNhcHMJKEdzdFBhZCAgICAgICAgKnBhZCk7CitzdGF0aWMgZ2Jvb2xlYW4JCWdzdF9teV9maWx0ZXJfZXZlbnQJKEdzdFBhZCAgICAgICAgKnBhZCwKKwkJCQkJCSBHc3RFdmVudCAgICAgICpldmVudCk7CistLT48IS0tIGV4YW1wbGUtZW5kIGluaXQuZnVuYyBjIC0tPgorPCEtLSBleGFtcGxlLWJlZ2luIGluaXQuZnVuYyBkIC0tPgorCitzdGF0aWMgdm9pZAorZ3N0X215X2ZpbHRlcl9pbml0IChHc3RNeUZpbHRlciAqZmlsdGVyLCBHc3RNeUZpbHRlckNsYXNzICpmaWx0ZXJfa2xhc3MpCit7CisgIEdzdEVsZW1lbnRDbGFzcyAqa2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoZmlsdGVyX2tsYXNzKTsKKworICAvKiBwYWQgdGhyb3VnaCB3aGljaCBkYXRhIGNvbWVzIGluIHRvIHRoZSBlbGVtZW50ICovCisgIGZpbHRlci0mZ3Q7c2lua3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKAorCWdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGtsYXNzLCAic2luayIpLCAic2luayIpOworICBnc3RfcGFkX3NldF9zZXRjYXBzX2Z1bmN0aW9uIChmaWx0ZXItJmd0O3NpbmtwYWQsIGdzdF9teV9maWx0ZXJfc2V0Y2Fwcyk7CisgIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChmaWx0ZXItJmd0O3NpbmtwYWQsIGdzdF9teV9maWx0ZXJfY2hhaW4pOworPCEtLSBleGFtcGxlLWVuZCBpbml0LmZ1bmMgZCAtLT4KKzwhLS0gZXhhbXBsZS1iZWdpbiBpbml0LmZ1bmMgZSAtLT48IS0tCisgIGdzdF9wYWRfc2V0X2dldGNhcHNfZnVuY3Rpb24gKGZpbHRlci0mZ3Q7c2lua3BhZCwgZ3N0X215X2ZpbHRlcl9nZXRjYXBzKTsKKyAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKGZpbHRlci0mZ3Q7c2lua3BhZCwgZ3N0X215X2ZpbHRlcl9ldmVudCk7CistLT48IS0tIGV4YW1wbGUtZW5kIGluaXQuZnVuYyBlIC0tPgorPCEtLSBleGFtcGxlLWJlZ2luIGluaXQuZnVuYyBmIC0tPgorICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoZmlsdGVyKSwgZmlsdGVyLSZndDtzaW5rcGFkKTsKKworICAvKiBwYWQgdGhyb3VnaCB3aGljaCBkYXRhIGdvZXMgb3V0IG9mIHRoZSBlbGVtZW50ICovCisgIGZpbHRlci0mZ3Q7c3JjcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoCisJZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoa2xhc3MsICJzcmMiKSwgInNyYyIpOworPCEtLSBleGFtcGxlLWVuZCBpbml0LmZ1bmMgZiAtLT4KKzwhLS0gZXhhbXBsZS1iZWdpbiBpbml0LmZ1bmMgZyAtLT48IS0tCisgIGdzdF9wYWRfc2V0X2dldGNhcHNfZnVuY3Rpb24gKGZpbHRlci0mZ3Q7c3JjcGFkLCBnc3RfbXlfZmlsdGVyX2dldGNhcHMpOworLS0+PCEtLSBleGFtcGxlLWVuZCBpbml0LmZ1bmMgZyAtLT4KKzwhLS0gZXhhbXBsZS1iZWdpbiBpbml0LmZ1bmMgaCAtLT4KKyAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKGZpbHRlciksIGZpbHRlci0mZ3Q7c3JjcGFkKTsKKworICAvKiBwcm9wZXJ0aWVzIGluaXRpYWwgdmFsdWUgKi8KKyAgZmlsdGVyLT5zaWxlbnQgPSBGQUxTRTsKK30KKyAgPCEtLSBleGFtcGxlLWVuZCBpbml0LmZ1bmMgaCAtLT48L3Byb2dyYW1saXN0aW5nPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1wYWRzLWxpbmtmbiIgeHJlZmxhYmVsPSJUaGUgbGluayBmdW5jdGlvbiI+CisgIDx0aXRsZT5UaGUgc2V0Y2Fwcy1mdW5jdGlvbjwvdGl0bGU+CisgIDxwYXJhPgorICAgIFRoZSA8ZnVuY3Rpb24+X3NldGNhcHMgKCk8L2Z1bmN0aW9uPi1mdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGNhcHMKKyAgICBuZWdvdGlhdGlvbiwgd2hpY2ggaXMgZGlzY3Vzc2VkIGluIGdyZWF0IGRldGFpbCBpbiA8eHJlZgorICAgIGxpbmtlbmQ9ImNoYXB0ZXItbmVnb3RpYXRpb24iLz4uIFRoaXMgaXMgdGhlIHByb2Nlc3Mgd2hlcmUgdGhlIGxpbmtlZAorICAgIHBhZHMgZGVjaWRlIG9uIHRoZSBzdHJlYW10eXBlIHRoYXQgd2lsbCB0cmFuc2ZlciBiZXR3ZWVuIHRoZW0uIEEgZnVsbAorICAgIGxpc3Qgb2YgdHlwZS1kZWZpbml0aW9ucyBjYW4gYmUgZm91bmQgaW4gPHhyZWYKKyAgICBsaW5rZW5kPSJjaGFwdGVyLWJ1aWxkaW5nLXR5cGVzIi8+LiBBIDxmdW5jdGlvbj5fbGluayAoKTwvZnVuY3Rpb24+CisgICAgcmVjZWl2ZXMgYSBwb2ludGVyIHRvIGEgPHVsaW5rIHR5cGU9Imh0dHAiCisgICAgdXJsPSIuLi8uLi9nc3RyZWFtZXIvaHRtbC9nc3RyZWFtZXItR3N0Q2Fwcy5odG1sIj48Y2xhc3NuYW1lPkdzdENhcHM8L2NsYXNzbmFtZT48L3VsaW5rPgorICAgIHN0cnVjdCB0aGF0IGRlZmluZXMgdGhlIHByb3Bvc2VkIHN0cmVhbXR5cGUsIGFuZCBjYW4gcmVzcG9uZCB3aXRoCisgICAgZWl0aGVyIDxxdW90ZT55ZXM8L3F1b3RlPiAoPHN5bWJvbD5UUlVFPC9zeW1ib2w+KSBvciA8cXVvdGU+bm88L3F1b3RlPgorICAgICg8c3ltYm9sPkZBTFNFPC9zeW1ib2w+KS4gSWYgdGhlIGVsZW1lbnQgcmVzcG9uZHMgcG9zaXRpdmVseSB0b3dhcmRzCisgICAgdGhlIHN0cmVhbXR5cGUsIHRoYXQgdHlwZSB3aWxsIGJlIHVzZWQgb24gdGhlIHBhZC4gQW4gZXhhbXBsZToKKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+PCEtLSBleGFtcGxlLWJlZ2luIGNhcHMuZnVuYyBhIC0tPgorc3RhdGljIGdib29sZWFuCitnc3RfbXlfZmlsdGVyX3NldGNhcHMgKEdzdFBhZCAgKnBhZCwKKwkJICAgICAgIEdzdENhcHMgKmNhcHMpCit7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7CisgIEdzdE15RmlsdGVyICpmaWx0ZXIgPSBHU1RfTVlfRklMVEVSIChHU1RfT0JKRUNUX1BBUkVOVCAocGFkKSk7CisgIGNvbnN0IGdjaGFyICptaW1lOworCisgIC8qIFNpbmNlIHdlJ3JlIGFuIGF1ZGlvIGZpbHRlciwgd2Ugd2FudCB0byBoYW5kbGUgcmF3IGF1ZGlvCisgICAqIGFuZCBmcm9tIHRoYXQgYXVkaW8gdHlwZSwgd2UgbmVlZCB0byBnZXQgdGhlIHNhbXBsZXJhdGUgYW5kCisgICAqIG51bWJlciBvZiBjaGFubmVscy4gKi8KKyAgbWltZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKHN0cnVjdHVyZSk7CisgIGlmIChzdHJjbXAgKG1pbWUsICJhdWRpby94LXJhdy1pbnQiKSAhPSAwKSB7CisgICAgR1NUX1dBUk5JTkcgKCJXcm9uZyBtaW1ldHlwZSAlcyBwcm92aWRlZCwgd2Ugb25seSBzdXBwb3J0ICVzIiwKKwkJIG1pbWUsICJhdWRpby94LXJhdy1pbnQiKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKworICAvKiB3ZSdyZSBhIGZpbHRlciBhbmQgZG9uJ3QgdG91Y2ggdGhlIHByb3BlcnRpZXMgb2YgdGhlIGRhdGEuCisgICAqIFRoYXQgbWVhbnMgd2UgY2FuIHNldCB0aGUgZ2l2ZW4gY2FwcyB1bm1vZGlmaWVkIG9uIHRoZSBuZXh0CisgICAqIGVsZW1lbnQsIGFuZCB1c2UgdGhhdCBuZWdvdGlhdGlvbiByZXR1cm4gdmFsdWUgYXMgb3Vycy4gKi8KKyAgaWYgKCFnc3RfcGFkX3NldF9jYXBzIChmaWx0ZXItJmd0O3NyY3BhZCwgY2FwcykpCisgICAgcmV0dXJuIEZBTFNFOworCisgIC8qIENhcHNuZWdvIHN1Y2NlZWRlZCwgZ2V0IHRoZSBzdHJlYW0gcHJvcGVydGllcyBmb3IgaW50ZXJuYWwKKyAgICogdXNhZ2UgYW5kIHJldHVybiBzdWNjZXNzLiAqLworICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgInJhdGUiLCAmYW1wO2ZpbHRlci0mZ3Q7c2FtcGxlcmF0ZSk7CisgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiY2hhbm5lbHMiLCAmYW1wO2ZpbHRlci0mZ3Q7Y2hhbm5lbHMpOworCisgIGdfcHJpbnQgKCJDYXBzIG5lZ290aWF0aW9uIHN1Y2NlZWRlZCB3aXRoICVkIEh6IEAgJWQgY2hhbm5lbHNcbiIsCisJICAgZmlsdGVyLSZndDtzYW1wbGVyYXRlLCBmaWx0ZXItJmd0O2NoYW5uZWxzKTsKKworICByZXR1cm4gVFJVRTsKK30KKzwhLS0gZXhhbXBsZS1lbmQgY2Fwcy5mdW5jIGEgLS0+Cis8IS0tIGV4YW1wbGUtYmVnaW4gY2Fwcy5mdW5jIGIgLS0+PCEtLQorc3RhdGljIEdzdENhcHMgKgorZ3N0X215X2ZpbHRlcl9nZXRjYXBzIChHc3RQYWQgKiBwYWQpCit7CisgIEdzdE15RmlsdGVyICpmaWx0ZXIgPSBHU1RfTVlfRklMVEVSIChHU1RfT0JKRUNUX1BBUkVOVCAocGFkKSk7CisgIEdzdFBhZCAqb3RoZXJwYWQgPSAocGFkID09IGZpbHRlci0mZ3Q7c3JjcGFkKSA/IGZpbHRlci0mZ3Q7c2lua3BhZCA6CisJCQkJCQkgIGZpbHRlci0mZ3Q7c3JjcGFkOworICBHc3RDYXBzICpvdGhlcmNhcHMgPSBnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHMgKG90aGVycGFkKTsKKworICByZXR1cm4gb3RoZXJjYXBzOworfQorICAtLT48IS0tIGV4YW1wbGUtZW5kIGNhcHMuZnVuYyBiIC0tPjwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgIEluIGhlcmUsIHdlIGNoZWNrIHRoZSBtaW1ldHlwZSBvZiB0aGUgcHJvdmlkZWQgY2Fwcy4gTm9ybWFsbHksIHlvdSBkb24ndAorICAgIG5lZWQgdG8gZG8gdGhhdCBpbiB5b3VyIG93biBwbHVnaW4vZWxlbWVudCwgYmVjYXVzZSB0aGUgY29yZSBkb2VzIHRoYXQKKyAgICBmb3IgeW91LiBXZSBzaW1wbHkgdXNlIGl0IHRvIHNob3cgaG93IHRvIHJldHJpZXZlIHRoZSBtaW1ldHlwZSBmcm9tIGEKKyAgICBwcm92aWRlZCBzZXQgb2YgY2Fwcy4gVHlwZXMgYXJlIHN0b3JlZCBpbiA8dWxpbmsgdHlwZT0iaHR0cCIKKyAgICB1cmw9Ii4uLy4uL2dzdHJlYW1lci9odG1sL2dzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCI+PGNsYXNzbmFtZT5Hc3RTdHJ1Y3R1cmUKKyAgICA8L2NsYXNzbmFtZT48L3VsaW5rPiBpbnRlcm5hbGx5LiBBIDx1bGluaworICAgIHR5cGU9Imh0dHAiIHVybD0iLi4vLi4vZ3N0cmVhbWVyL2h0bWwvZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCI+PGNsYXNzbmFtZT5Hc3RDYXBzCisgICAgPC9jbGFzc25hbWU+PC91bGluaz4gaXMgbm90aGluZyBtb3JlIHRoYW4gYSBzbWFsbAorICAgIHdyYXBwZXIgZm9yIDAgb3IgbW9yZSBzdHJ1Y3R1cmVzL3R5cGVzLiBGcm9tIHRoZSBzdHJ1Y3R1cmUsIHlvdSBjYW4gYWxzbworICAgIHJldHJpZXZlIHByb3BlcnRpZXMsIGFzIGlzIHNob3duIGFib3ZlIHdpdGggdGhlIGZ1bmN0aW9uCisgICAgPGZ1bmN0aW9uPmdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoKTwvZnVuY3Rpb24+LgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgIElmIHlvdXIgPGZ1bmN0aW9uPl9saW5rICgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gZG9lcyBub3QgbmVlZCB0byBwZXJmb3JtCisgICAgYW55IHNwZWNpZmljIG9wZXJhdGlvbiAoaS5lLiBpdCB3aWxsIG9ubHkgZm9yd2FyZCBjYXBzKSwgeW91IGNhbiBzZXQgaXQKKyAgICB0byA8ZnVuY3Rpb24+Z3N0X3BhZF9wcm94eV9saW5rICgpPC9mdW5jdGlvbj4uIFRoaXMgaXMgYSBsaW5rIGZvcndhcmRpbmcKKyAgICBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbiBwcm92aWRlZCBieSB0aGUgY29yZS4gSXQgaXMgdXNlZnVsIGZvciBlbGVtZW50cworICAgIHN1Y2ggYXMgPGNsYXNzbmFtZT5pZGVudGl0eTwvY2xhc3NuYW1lPi4KKyAgPC9wYXJhPgorICA8L3NlY3QxPgorPCEtLSBleGFtcGxlLWJlZ2luIHBhZHMuYyAtLT48IS0tCisjaW5jbHVkZSAiaW5pdC5mdW5jIgorI2luY2x1ZGUgImNhcHMuZnVuYyIKKworc3RhdGljIGdib29sZWFuCitnc3RfbXlfZmlsdGVyX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpCit7CisgIHJldHVybiBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgZXZlbnQpOworfQorCitzdGF0aWMgR3N0Rmxvd1JldHVybgorZ3N0X215X2ZpbHRlcl9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RCdWZmZXIgKiBidWYpCit7CisgIHJldHVybiBnc3RfcGFkX3B1c2ggKEdTVF9NWV9GSUxURVIgKEdTVF9PQkpFQ1RfUEFSRU5UIChwYWQpKS0+c3JjcGFkLCBidWYpOworfQorCitzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KK2dzdF9teV9maWx0ZXJfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKK3sKKyAgcmV0dXJuIEdTVF9DQUxMX1BBUkVOVF9XSVRIX0RFRkFVTFQgKEdTVF9FTEVNRU5UX0NMQVNTLAorICAgICAgY2hhbmdlX3N0YXRlLCAoZWxlbWVudCwgdHJhbnNpdGlvbiksIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Cit9CisKKyNpbmNsdWRlICJyZWdpc3Rlci5mdW5jIgorLS0+PCEtLSBleGFtcGxlLWVuZCBwYWRzLmMgLS0+Cis8L2NoYXB0ZXI+CisKZGlmZiAtLWdpdCBhL2RvY3MvcHdnL2J1aWxkaW5nLXByb3BzLnhtbCBiL2RvY3MvcHdnL2J1aWxkaW5nLXByb3BzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTA3Yjg4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wd2cvYnVpbGRpbmctcHJvcHMueG1sCkBAIC0wLDAgKzEsMTYxIEBACis8IS0tICMjIyMjIyMjIyMjIyBjaGFwdGVyICMjIyMjIyMjIyMjIyMgLS0+CisKKzxjaGFwdGVyIGlkPSJjaGFwdGVyLWJ1aWxkaW5nLWFyZ3MiIHhyZWZsYWJlbD0iQWRkaW5nIEFyZ3VtZW50cyI+CisgIDx0aXRsZT5BZGRpbmcgQXJndW1lbnRzPC90aXRsZT4KKyAgPHBhcmE+CisgICAgVGhlIHByaW1hcnkgYW5kIG1vc3QgaW1wb3J0YW50IHdheSBvZiBjb250cm9sbGluZyBob3cgYW4gZWxlbWVudCBiZWhhdmVzLAorICAgIGlzIHRocm91Z2ggR09iamVjdCBwcm9wZXJ0aWVzLiBHT2JqZWN0IHByb3BlcnRpZXMgYXJlIGRlZmluZWQgaW4gdGhlCisgICAgPGZ1bmN0aW9uPl9jbGFzc19pbml0ICgpPC9mdW5jdGlvbj4gZnVuY3Rpb24uIFRoZSBlbGVtZW50IG9wdGlvbmFsbHkKKyAgICBpbXBsZW1lbnRzIGEgPGZ1bmN0aW9uPl9nZXRfcHJvcGVydHkgKCk8L2Z1bmN0aW9uPiBhbmQgYQorICAgIDxmdW5jdGlvbj5fc2V0X3Byb3BlcnR5ICgpPC9mdW5jdGlvbj4gZnVuY3Rpb24uIFRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlCisgICAgbm90aWZpZWQgaWYgYW4gYXBwbGljYXRpb24gY2hhbmdlcyBvciByZXF1ZXN0cyB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSwKKyAgICBhbmQgY2FuIHRoZW4gZmlsbCBpbiB0aGUgdmFsdWUgb3IgdGFrZSBhY3Rpb24gcmVxdWlyZWQgZm9yIHRoYXQgcHJvcGVydHkKKyAgICB0byBjaGFuZ2UgdmFsdWUgaW50ZXJuYWxseS4KKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+PCEtLSBleGFtcGxlLWJlZ2luIHByb3BlcnRpZXMuYyBhIC0tPjwhLS0KKyNpbmNsdWRlICJmaWx0ZXIuaCIKK0dTVF9CT0lMRVJQTEFURSAoR3N0TXlGaWx0ZXIsIGdzdF9teV9maWx0ZXIsIEdzdEVsZW1lbnQsIEdTVF9UWVBFX0VMRU1FTlQpOworc3RhdGljIHZvaWQKK2dzdF9teV9maWx0ZXJfYmFzZV9pbml0IChncG9pbnRlciBrbGFzcykKK3sKK30KK3N0YXRpYyB2b2lkCitnc3RfbXlfZmlsdGVyX2luaXQgKEdzdE15RmlsdGVyICogZmlsdGVyKQoreworfQorLS0+PCEtLSBleGFtcGxlLWVuZCBwcm9wZXJ0aWVzLmMgYSAtLT4KKzwhLS0gZXhhbXBsZS1iZWdpbiBwcm9wZXJ0aWVzLmMgYiAtLT4KKy8qIHByb3BlcnRpZXMgKi8KK2VudW0geworICBBUkdfMCwKKyAgQVJHX1NJTEVOVAorICAvKiBGSUxMIE1FICovCit9OworCitzdGF0aWMgdm9pZAlnc3RfbXlfZmlsdGVyX3NldF9wcm9wZXJ0eQkoR09iamVjdCAgICAgICpvYmplY3QsCisJCQkJCQkgZ3VpbnQgICAgICAgICBwcm9wX2lkLAorCQkJCQkJIGNvbnN0IEdWYWx1ZSAqdmFsdWUsCisJCQkJCQkgR1BhcmFtU3BlYyAgICpwc3BlYyk7CitzdGF0aWMgdm9pZAlnc3RfbXlfZmlsdGVyX2dldF9wcm9wZXJ0eQkoR09iamVjdCAgICAgICpvYmplY3QsCisJCQkJCQkgZ3VpbnQgICAgICAgICBwcm9wX2lkLAorCQkJCQkJIEdWYWx1ZSAgICAgICAqdmFsdWUsCisJCQkJCQkgR1BhcmFtU3BlYyAgICpwc3BlYyk7CisKK3N0YXRpYyB2b2lkCitnc3RfbXlfZmlsdGVyX2NsYXNzX2luaXQgKEdzdE15RmlsdGVyQ2xhc3MgKmtsYXNzKQoreworICBHT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7CisKKyAgLyogZGVmaW5lIHByb3BlcnRpZXMgKi8KKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAob2JqZWN0X2NsYXNzLCBBUkdfU0lMRU5ULAorICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgic2lsZW50IiwgIlNpbGVudCIsCisJCQkgICJXaGV0aGVyIHRvIGJlIHZlcnkgdmVyYm9zZSBvciBub3QiLAorCQkJICBGQUxTRSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisKKyAgLyogZGVmaW5lIHZpcnR1YWwgZnVuY3Rpb24gcG9pbnRlcnMgKi8KKyAgb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfbXlfZmlsdGVyX3NldF9wcm9wZXJ0eTsKKyAgb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfbXlfZmlsdGVyX2dldF9wcm9wZXJ0eTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9teV9maWx0ZXJfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICAgICAgKm9iamVjdCwKKwkJCSAgICBndWludCAgICAgICAgIHByb3BfaWQsCisJCQkgICAgY29uc3QgR1ZhbHVlICp2YWx1ZSwKKwkJCSAgICBHUGFyYW1TcGVjICAgKnBzcGVjKQoreworICBHc3RNeUZpbHRlciAqZmlsdGVyID0gR1NUX01ZX0ZJTFRFUiAob2JqZWN0KTsKKworICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIEFSR19TSUxFTlQ6CisgICAgICBmaWx0ZXItPnNpbGVudCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKKyAgICAgIGdfcHJpbnQgKCJTaWxlbnQgYXJndW1lbnQgd2FzIGNoYW5nZWQgdG8gJXNcbiIsCisJICAgICAgIGZpbHRlci0+c2lsZW50ID8gInRydWUiIDogImZhbHNlIik7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfbXlfZmlsdGVyX2dldF9wcm9wZXJ0eSAoR09iamVjdCAgICAqb2JqZWN0LAorCQkJICAgIGd1aW50ICAgICAgIHByb3BfaWQsCisJCQkgICAgR1ZhbHVlICAgICAqdmFsdWUsCisJCQkgICAgR1BhcmFtU3BlYyAqcHNwZWMpCit7CisgIEdzdE15RmlsdGVyICpmaWx0ZXIgPSBHU1RfTVlfRklMVEVSIChvYmplY3QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBBUkdfU0lMRU5UOgorICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGZpbHRlci0+c2lsZW50KTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KK30KKzwhLS0gZXhhbXBsZS1lbmQgcHJvcGVydGllcy5jIGIgLS0+Cis8IS0tIGV4YW1wbGUtYmVnaW4gcHJvcGVydGllcy5jIGMgLS0+PCEtLQorI2luY2x1ZGUgInJlZ2lzdGVyLmZ1bmMiCisgIC0tPjwhLS0gZXhhbXBsZS1lbmQgcHJvcGVydGllcy5jIGMgLS0+PC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgICAgVGhlIGFib3ZlIGlzIGEgdmVyeSBzaW1wbGUgZXhhbXBsZSBvZiBob3cgYXJndW1lbnRzIGFyZSB1c2VkLiBHcmFwaGljYWwKKyAgICBhcHBsaWNhdGlvbnMgLSBmb3IgZXhhbXBsZSBHU3RyZWFtZXIgRWRpdG9yIC0gd2lsbCB1c2UgdGhlc2UgcHJvcGVydGllcworICAgIGFuZCB3aWxsIGRpc3BsYXkgYSB1c2VyLWNvbnRyb2xsYWJsZSB3aWRnZXQgd2l0aCB3aGljaCB0aGVzZSBwcm9wZXJ0aWVzCisgICAgY2FuIGJlIGNoYW5nZWQuIFRoaXMgbWVhbnMgdGhhdCAtIGZvciB0aGUgcHJvcGVydHkgdG8gYmUgYXMgdXNlci1mcmllbmRseQorICAgIGFzIHBvc3NpYmxlIC0geW91IHNob3VsZCBiZSBhcyBleGFjdCBhcyBwb3NzaWJsZSBpbiB0aGUgZGVmaW5pdGlvbiBvZiB0aGUKKyAgICBwcm9wZXJ0eS4gTm90IG9ubHkgaW4gZGVmaW5pbmcgcmFuZ2VzIGluIGJldHdlZW4gd2hpY2ggdmFsaWQgcHJvcGVydGllcworICAgIGNhbiBiZSBsb2NhdGVkIChmb3IgaW50ZWdlcnMsIGZsb2F0cywgZXRjLiksIGJ1dCBhbHNvIGluIHVzaW5nIHZlcnkKKyAgICBkZXNjcmlwdGl2ZSAoYmV0dGVyIHlldDogaW50ZXJuYXRpb25hbGl6ZWQpIHN0cmluZ3MgaW4gdGhlIGRlZmluaXRpb24gb2YKKyAgICB0aGUgcHJvcGVydHksIGFuZCBpZiBwb3NzaWJsZSB1c2luZyBlbnVtcyBhbmQgZmxhZ3MgaW5zdGVhZCBvZiBpbnRlZ2Vycy4KKyAgICBUaGUgR09iamVjdCBkb2N1bWVudGF0aW9uIGRlc2NyaWJlcyB0aGVzZSBpbiBhIHZlcnkgY29tcGxldGUgd2F5LCBidXQKKyAgICBiZWxvdywgd2UnbGwgZ2l2ZSBhIHNob3J0IGV4YW1wbGUgb2Ygd2hlcmUgdGhpcyBpcyB1c2VmdWwuIE5vdGUgdGhhdCB1c2luZworICAgIGludGVnZXJzIGhlcmUgd291bGQgcHJvYmFibHkgY29tcGxldGVseSBjb25mdXNlIHRoZSB1c2VyLCBiZWNhdXNlIHRoZXkKKyAgICBtYWtlIG5vIHNlbnNlIGluIHRoaXMgY29udGV4dC4gVGhlIGV4YW1wbGUgaXMgc3RvbGVuIGZyb20gdmlkZW90ZXN0c3JjLgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KK3R5cGVkZWYgZW51bSB7CisgIEdTVF9WSURFT1RFU1RTUkNfU01QVEUsCisgIEdTVF9WSURFT1RFU1RTUkNfU05PVywKKyAgR1NUX1ZJREVPVEVTVFNSQ19CTEFDSworfSBHc3RWaWRlb3Rlc3RzcmNQYXR0ZXJuOworCitbLi5dCisKKyNkZWZpbmUgR1NUX1RZUEVfVklERU9URVNUU1JDX1BBVFRFUk4gKGdzdF92aWRlb3Rlc3RzcmNfcGF0dGVybl9nZXRfdHlwZSAoKSkKK3N0YXRpYyBHVHlwZQorZ3N0X3ZpZGVvdGVzdHNyY19wYXR0ZXJuX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgR1R5cGUgdmlkZW90ZXN0c3JjX3BhdHRlcm5fdHlwZSA9IDA7CisKKyAgaWYgKCF2aWRlb3Rlc3RzcmNfcGF0dGVybl90eXBlKSB7CisgICAgc3RhdGljIEdFbnVtVmFsdWUgcGF0dGVybl90eXBlc1tdID0geworICAgICAgeyBHU1RfVklERU9URVNUU1JDX1NNUFRFLCAiU01QVEUgMTAwJSBjb2xvciBiYXJzIiwgICAgInNtcHRlIiB9LAorICAgICAgeyBHU1RfVklERU9URVNUU1JDX1NOT1csICAiUmFuZG9tICh0ZWxldmlzaW9uIHNub3cpIiwgInNub3ciICB9LAorICAgICAgeyBHU1RfVklERU9URVNUU1JDX0JMQUNLLCAiMCUgQmxhY2siLCAgICAgICAgICAgICAgICAgImJsYWNrIiB9LAorICAgICAgeyAwLCBOVUxMLCBOVUxMIH0sCisgICAgfTsKKworICAgIHZpZGVvdGVzdHNyY19wYXR0ZXJuX3R5cGUgPQorCWdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RWaWRlb3Rlc3RzcmNQYXR0ZXJuIiwKKwkJCQlwYXR0ZXJuX3R5cGVzKTsKKyAgfQorCisgIHJldHVybiB2aWRlb3Rlc3RzcmNfcGF0dGVybl90eXBlOworfQorCitbLi5dCisKK3N0YXRpYyB2b2lkCitnc3RfdmlkZW90ZXN0c3JjX2NsYXNzX2luaXQgKEdzdHZpZGVvdGVzdHNyY0NsYXNzICprbGFzcykKK3sKK1suLl0KKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgQVJHX1RZUEUsCisgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJwYXR0ZXJuIiwgIlBhdHRlcm4iLAorCQkgICAgICAgIlR5cGUgb2YgdGVzdCBwYXR0ZXJuIHRvIGdlbmVyYXRlIiwKKwkJICAgICAgIEdTVF9UWVBFX1ZJREVPVEVTVFNSQ19QQVRURVJOLCAxLCBHX1BBUkFNX1JFQURXUklURSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CitbLi5dCit9CisgIDwvcHJvZ3JhbWxpc3Rpbmc+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL3B3Zy9idWlsZGluZy1zaWduYWxzLnhtbCBiL2RvY3MvcHdnL2J1aWxkaW5nLXNpZ25hbHMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYmUxNjgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3B3Zy9idWlsZGluZy1zaWduYWxzLnhtbApAQCAtMCwwICsxLDE2IEBACisKKzwhLS0gIyMjIyMjIyMjIyMjIGNoYXB0ZXIgIyMjIyMjIyMjIyMjIyAtLT4KKworPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItYnVpbGRpbmctc2lnbmFscyI+CisgIDx0aXRsZT5TaWduYWxzPC90aXRsZT4KKyAgPHBhcmE+CisgICAgR09iamVjdCBzaWduYWxzIGNhbiBiZSB1c2VkIHRvIG5vdGlmeSBhcHBsaWNhdGlvbnMgb2YgZXZlbnRzIHNwZWNpZmljCisgICAgdG8gdGhpcyBvYmplY3QuIE5vdGUsIGhvd2V2ZXIsIHRoYXQgdGhlIGFwcGxpY2F0aW9uIG5lZWRzIHRvIGJlIGF3YXJlCisgICAgb2Ygc2lnbmFscyBhbmQgdGhlaXIgbWVhbmluZywgc28gaWYgeW91J3JlIGxvb2tpbmcgZm9yIGEgZ2VuZXJpYyB3YXkKKyAgICBmb3IgYXBwbGljYXRpb24tZWxlbWVudCBpbnRlcmFjdGlvbiwgc2lnbmFscyBhcmUgcHJvYmFibHkgbm90IHdoYXQKKyAgICB5b3UncmUgbG9va2luZyBmb3IuIEluIG1hbnkgY2FzZXMsIGhvd2V2ZXIsIHNpZ25hbHMgY2FuIGJlIHZlcnkgdXNlZnVsLgorICAgIFNlZSB0aGUgPHVsaW5rIHR5cGU9Imh0dHAiCisgICAgICB1cmw9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3N0YWJsZS8iPkdPYmplY3QKKyAgICBkb2N1bWVudGF0aW9uPC91bGluaz4gZm9yIGFsbCBpbnRlcm5hbHMgYWJvdXQgc2lnbmFscy4KKyAgPC9wYXJhPgorPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9wd2cvYnVpbGRpbmctc3RhdGUueG1sIGIvZG9jcy9wd2cvYnVpbGRpbmctc3RhdGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MDExZjUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3B3Zy9idWlsZGluZy1zdGF0ZS54bWwKQEAgLTAsMCArMSwxODQgQEAKKzxjaGFwdGVyIGlkPSJjaGFwdGVyLXN0YXRlbWFuYWdlLXN0YXRlcyI+CisgIDx0aXRsZT5XaGF0IGFyZSBzdGF0ZXM/PC90aXRsZT4KKyAgPHBhcmE+CisgICAgQSBzdGF0ZSBkZXNjcmliZXMgd2hldGhlciB0aGUgZWxlbWVudCBpbnN0YW5jZSBpcyBpbml0aWFsaXplZCwgd2hldGhlciBpdAorICAgIGlzIHJlYWR5IHRvIHRyYW5zZmVyIGRhdGEgYW5kIHdoZXRoZXIgaXQgaXMgY3VycmVudGx5IGhhbmRsaW5nIGRhdGEuIFRoZXJlCisgICAgYXJlIGZvdXIgc3RhdGVzIGRlZmluZWQgaW4gJkdTdHJlYW1lcjs6CisgIDwvcGFyYT4KKyAgPGl0ZW1pemVkbGlzdD4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICAgPHN5bWJvbD5HU1RfU1RBVEVfTlVMTDwvc3ltYm9sPgorICAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgIDxzeW1ib2w+R1NUX1NUQVRFX1JFQURZPC9zeW1ib2w+CisgICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICAgPHN5bWJvbD5HU1RfU1RBVEVfUEFVU0VEPC9zeW1ib2w+CisgICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICAgPHN5bWJvbD5HU1RfU1RBVEVfUExBWUlORzwvc3ltYm9sPgorICAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgIDwvaXRlbWl6ZWRsaXN0PgorICA8cGFyYT4KKyAgICB3aGljaCB3aWxsIGZyb20gbm93IG9uIGJlIHJlZmVycmVkIHRvIHNpbXBseSBhcyA8cXVvdGU+TlVMTDwvcXVvdGU+LAorICAgIDxxdW90ZT5SRUFEWTwvcXVvdGU+LCA8cXVvdGU+UEFVU0VEPC9xdW90ZT4gYW5kIDxxdW90ZT5QTEFZSU5HPC9xdW90ZT4uCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgPHN5bWJvbD5HU1RfU1RBVEVfTlVMTDwvc3ltYm9sPiBpcyB0aGUgZGVmYXVsdCBzdGF0ZSBvZiBhbiBlbGVtZW50LiBJbiB0aGlzIHN0YXRlLCBpdAorICAgIGhhcyBub3QgYWxsb2NhdGVkIGFueSBydW50aW1lIHJlc291cmNlcywgaXQgaGFzIG5vdCBsb2FkZWQgYW55IHJ1bnRpbWUKKyAgICBsaWJyYXJpZXMgYW5kIGl0IGNhbiBvYnZpb3VzbHkgbm90IGhhbmRsZSBkYXRhLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgIDxzeW1ib2w+R1NUX1NUQVRFX1JFQURZPC9zeW1ib2w+IGlzIHRoZSBuZXh0IHN0YXRlIHRoYXQgYW4gZWxlbWVudCBjYW4gYmUgaW4uIEluIHRoZQorICAgIFJFQURZIHN0YXRlLCBhbiBlbGVtZW50IGhhcyBhbGwgZGVmYXVsdCByZXNvdXJjZXMgKHJ1bnRpbWUtbGlicmFyaWVzLAorICAgIHJ1bnRpbWUtbWVtb3J5KSBhbGxvY2F0ZWQuIEhvd2V2ZXIsIGl0IGhhcyBub3QgeWV0IGFsbG9jYXRlZCBvciBkZWZpbmVkCisgICAgYW55dGhpbmcgdGhhdCBpcyBzdHJlYW0tc3BlY2lmaWMuIFdoZW4gZ29pbmcgZnJvbSBOVUxMIHRvIFJFQURZIHN0YXRlCisgICAgKDxzeW1ib2w+R1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZPC9zeW1ib2w+KSwgYW4gZWxlbWVudCBzaG91bGQKKyAgICBhbGxvY2F0ZSBhbnkgbm9uLXN0cmVhbS1zcGVjaWZpYyByZXNvdXJjZXMgYW5kIHNob3VsZCBsb2FkIHJ1bnRpbWUtbG9hZGFibGUKKyAgICBsaWJyYXJpZXMgKGlmIGFueSkuIFdoZW4gZ29pbmcgdGhlIG90aGVyIHdheSBhcm91bmQgKGZyb20gUkVBRFkgdG8gTlVMTCwKKyAgICA8c3ltYm9sPkdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDwvc3ltYm9sPiksIGFuIGVsZW1lbnQgc2hvdWxkIHVubG9hZAorICAgIHRoZXNlIGxpYnJhcmllcyBhbmQgZnJlZSBhbGwgYWxsb2NhdGVkIHJlc291cmNlcy4gRXhhbXBsZXMgb2Ygc3VjaAorICAgIHJlc291cmNlcyBhcmUgaGFyZHdhcmUgZGV2aWNlcy4gTm90ZSB0aGF0IGZpbGVzIGFyZSBnZW5lcmFsbHkgc3RyZWFtcywKKyAgICBhbmQgdGhlc2Ugc2hvdWxkIHRodXMgYmUgY29uc2lkZXJlZCBhcyBzdHJlYW0tc3BlY2lmaWMgcmVzb3VyY2VzOyB0aGVyZWZvcmUsCisgICAgdGhleSBzaG91bGQgPGVtcGhhc2lzPm5vdDwvZW1waGFzaXM+IGJlIGFsbG9jYXRlZCBpbiB0aGlzIHN0YXRlLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgIDxzeW1ib2w+R1NUX1NUQVRFX1BBVVNFRDwvc3ltYm9sPiBpcyB0aGUgc3RhdGUgaW4gd2hpY2ggYW4gZWxlbWVudCBpcyAKKyAgICByZWFkeSB0byBhY2NlcHQgYW5kIGhhbmRsZSBkYXRhLiBGb3IgbW9zdCBlbGVtZW50cyB0aGlzIHN0YXRlIGlzIHRoZSBzYW1lCisgICAgYXMgUExBWUlORy4gVGhlIG9ubHkgZXhjZXB0aW9uIHRvIHRoaXMgcnVsZSBhcmUgc2luayBlbGVtZW50cy4gU2luaworICAgIGVsZW1lbnRzIG9ubHkgYWNjZXB0IG9uZSBzaW5nbGUgYnVmZmVyIG9mIGRhdGEgYW5kIHRoZW4gYmxvY2suIEF0IHRoaXMKKyAgICBwb2ludCB0aGUgcGlwZWxpbmUgaXMgJ3ByZXJvbGxlZCcgYW5kIHJlYWR5IHRvIHJlbmRlciBkYXRhIGltbWVkaWF0ZWx5LgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgIDxzeW1ib2w+R1NUX1NUQVRFX1BMQVlJTkc8L3N5bWJvbD4gaXMgdGhlIGhpZ2hlc3Qgc3RhdGUgdGhhdCBhbiBlbGVtZW50CisgICAgY2FuIGJlIGluLiBGb3IgbW9zdCBlbGVtZW50cyB0aGlzIHN0YXRlIGlzIGV4YWN0bHkgdGhlIHNhbWUgYXMgUEFVU0VELAorICAgIHRoZXkgYWNjZXB0IGFuZCBwcm9jZXNzIGV2ZW50cyBhbmQgYnVmZmVycyB3aXRoIGRhdGEuIE9ubHkgc2luayBlbGVtZW50cworICAgIG5lZWQgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIFBBVVNFRCBhbmQgUExBWUlORyBzdGF0ZS4gSW4gUExBWUlORyBzdGF0ZSwKKyAgICBzaW5rIGVsZW1lbnRzIGFjdHVhbGx5IHJlbmRlciBpbmNvbWluZyBkYXRhLCBlLmcuIG91dHB1dCBhdWRpbyB0byBhIHNvdW5kCisgICAgY2FyZCBvciByZW5kZXIgdmlkZW8gcGljdHVyZXMgdG8gYW4gaW1hZ2Ugc2luay4KKyAgPC9wYXJhPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1zdGF0ZW1hbmFnZS1maWx0ZXJzIj4KKyAgPHRpdGxlPk1hbmFnaW5nIGZpbHRlciBzdGF0ZTwvdGl0bGU+CisgIDxwYXJhPgorICAgIElmIGF0IGFsbCBwb3NzaWJsZSwgeW91ciBlbGVtZW50IHNob3VsZCBkZXJpdmUgZnJvbSBvbmUgb2YgdGhlIG5ldyBiYXNlIAorICAgIGNsYXNzZXMgKDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItb3RoZXItYmFzZSIvPikuIFRoZXJlIGFyZSByZWFkeS1tYWRlIAorICAgIGdlbmVyYWwgcHVycG9zZSBiYXNlIGNsYXNzZXMgZm9yIGRpZmZlcmVudCB0eXBlcyBvZiBzb3VyY2VzLCBzaW5rcyBhbmQKKyAgICBmaWx0ZXIvdHJhbnNmb3JtYXRpb24gZWxlbWVudHMuIEluIGFkZGl0aW9uIHRvIHRob3NlLCBzcGVjaWFsaXNlZCBiYXNlIAorICAgIGNsYXNzZXMgZXhpc3QgZm9yIGF1ZGlvIGFuZCB2aWRlbyBlbGVtZW50cyBhbmQgb3RoZXJzLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgIElmIHlvdSB1c2UgYSBiYXNlIGNsYXNzLCB5b3Ugd2lsbCByYXJlbHkgaGF2ZSB0byBoYW5kbGUgc3RhdGUgY2hhbmdlcyAKKyAgICB5b3Vyc2VsZi4gQWxsIHlvdSBoYXZlIHRvIGRvIGlzIG92ZXJyaWRlIHRoZSBiYXNlIGNsYXNzJ3Mgc3RhcnQoKSBhbmQKKyAgICBzdG9wKCkgdmlydHVhbCBmdW5jdGlvbnMgKG1pZ2h0IGJlIGNhbGxlZCBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gdGhlCisgICAgYmFzZSBjbGFzcykgYW5kIHRoZSBiYXNlIGNsYXNzIHdpbGwgdGFrZSBjYXJlIG9mIGV2ZXJ5dGhpbmcgZm9yIHlvdS4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICBJZiwgaG93ZXZlciwgeW91IGRvIG5vdCBkZXJpdmUgZnJvbSBhIHJlYWR5LW1hZGUgYmFzZSBjbGFzcywgYnV0IGZyb20gCisgICAgR3N0RWxlbWVudCBvciBzb21lIG90aGVyIGNsYXNzIG5vdCBidWlsdCBvbiB0b3Agb2YgYSBiYXNlIGNsYXNzLCB5b3UgCisgICAgd2lsbCBtb3N0IGxpa2VseSBoYXZlIHRvIGltcGxlbWVudCB5b3VyIG93biBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gdG8KKyAgICBiZSBub3RpZmllZCBvZiBzdGF0ZSBjaGFuZ2VzLiBUaGlzIGlzIGRlZmluaXRpdmVseSBuZWNlc3NhcnkgaWYgeW91cgorICAgIHBsdWdpbiBpcyBhIGRlY29kZXIgb3IgYW4gZW5jb2RlciwgYXMgdGhlcmUgYXJlIG5vIGJhc2UgY2xhc3NlcyBmb3IKKyAgICBkZWNvZGVycyBvciBlbmNvZGVycyB5ZXQuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgQW4gZWxlbWVudCBjYW4gYmUgbm90aWZpZWQgb2Ygc3RhdGUgY2hhbmdlcyB0aHJvdWdoIGEgdmlydHVhbCBmdW5jdGlvbgorICAgIHBvaW50ZXIuIEluc2lkZSB0aGlzIGZ1bmN0aW9uLCB0aGUgZWxlbWVudCBjYW4gaW5pdGlhbGl6ZSBhbnkgc29ydCBvZgorICAgIHNwZWNpZmljIGRhdGEgbmVlZGVkIGJ5IHRoZSBlbGVtZW50LCBhbmQgaXQgY2FuIG9wdGlvbmFsbHkgZmFpbCB0bworICAgIGdvIGZyb20gb25lIHN0YXRlIHRvIGFub3RoZXIuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgRG8gbm90IGdfYXNzZXJ0IGZvciB1bmhhbmRsZWQgc3RhdGUgY2hhbmdlczsgdGhpcyBpcyB0YWtlbiBjYXJlIG9mIGJ5CisgICAgdGhlIEdzdEVsZW1lbnQgYmFzZSBjbGFzcy4KKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CitzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KK2dzdF9teV9maWx0ZXJfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKKworc3RhdGljIHZvaWQKK2dzdF9teV9maWx0ZXJfY2xhc3NfaW5pdCAoR3N0TXlGaWx0ZXJDbGFzcyAqa2xhc3MpCit7CisgIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7CisKKyAgZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0gZ3N0X215X2ZpbHRlcl9jaGFuZ2Vfc3RhdGU7Cit9Cis8IS0tIGV4YW1wbGUtYmVnaW4gc3RhdGUuYyBhIC0tPjwhLS0KKyNpbmNsdWRlICJpbml0LmZ1bmMiCisjaW5jbHVkZSAiY2Fwcy5mdW5jIgorI2luY2x1ZGUgImNoYWluLmZ1bmMiCisjaW5jbHVkZSAic3RhdGUuZnVuYyIKKy0tPjwhLS0gZXhhbXBsZS1lbmQgc3RhdGUuYyBhIC0tPgorPCEtLSBleGFtcGxlLWJlZ2luIHN0YXRlLmZ1bmMgYSAtLT48IS0tCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9teV9maWx0ZXJfYWxsb2NhdGVfbWVtb3J5IChHc3RNeUZpbHRlciAqIGZpbHRlcikKK3sKKyAgcmV0dXJuIFRSVUU7Cit9CitzdGF0aWMgdm9pZAorZ3N0X215X2ZpbHRlcl9mcmVlX21lbW9yeSAoR3N0TXlGaWx0ZXIgKiBmaWx0ZXIpCit7Cit9CistLT48IS0tIGV4YW1wbGUtZW5kIHN0YXRlLmZ1bmMgYSAtLT4KKzwhLS0gZXhhbXBsZS1iZWdpbiBzdGF0ZS5mdW5jIGIgLS0+CitzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KK2dzdF9teV9maWx0ZXJfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQoreworICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7CisgIEdzdE15RmlsdGVyICpmaWx0ZXIgPSBHU1RfTVlfRklMVEVSIChlbGVtZW50KTsKKworICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTlVMTF9UT19SRUFEWToKKyAgICAgIGlmICghZ3N0X215X2ZpbHRlcl9hbGxvY2F0ZV9tZW1vcnkgKGZpbHRlcikpCisgICAgICAgIHJldHVybiBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKworICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0mZ3Q7Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKKyAgaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpCisgICAgcmV0dXJuIHJldDsKKworICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKKyAgICAgIGdzdF9teV9maWx0ZXJfZnJlZV9tZW1vcnkgKGZpbHRlcik7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gcmV0OworfQorPCEtLSBleGFtcGxlLWVuZCBzdGF0ZS5mdW5jIGIgLS0+Cis8IS0tIGV4YW1wbGUtYmVnaW4gc3RhdGUuYyBiIC0tPjwhLS0KKyNpbmNsdWRlICJyZWdpc3Rlci5mdW5jIgorICAtLT48IS0tIGV4YW1wbGUtZW5kIHN0YXRlLmMgYiAtLT48L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICBOb3RlIHRoYXQgdXB3YXJkcyAoTlVMTD0mZ3Q7UkVBRFksIFJFQURZPSZndDtQQVVTRUQsIFBBVVNFRD0mZ3Q7UExBWUlORykKKyAgICBhbmQgZG93bndhcmRzIChQTEFZSU5HPSZndDtQQVVTRUQsIFBBVVNFRD0mZ3Q7UkVBRFksIFJFQURZPSZndDtOVUxMKSBzdGF0ZQorICAgIGNoYW5nZXMgYXJlIGhhbmRsZWQgaW4gdHdvIHNlcGFyYXRlIGJsb2NrcyB3aXRoIHRoZSBkb3dud2FyZHMgc3RhdGUgY2hhbmdlCisgICAgaGFuZGxlZCBvbmx5IGFmdGVyIHdlIGhhdmUgY2hhaW5lZCB1cCB0byB0aGUgcGFyZW50IGNsYXNzJ3Mgc3RhdGUKKyAgICBjaGFuZ2UgZnVuY3Rpb24uIFRoaXMgaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIHNhZmVseSBoYW5kbGUgY29uY3VycmVudAorICAgIGFjY2VzcyBieSBtdWx0aXBsZSB0aHJlYWRzLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCBpbiB0aGUgY2FzZSBvZiBkb3dud2FyZHMgc3RhdGUgY2hhbmdlcworICAgIHlvdSBkb24ndCB3YW50IHRvIGRlc3Ryb3kgYWxsb2NhdGVkIHJlc291cmNlcyB3aGlsZSB5b3VyIHBsdWdpbidzIAorICAgIGNoYWluIGZ1bmN0aW9uIChmb3IgZXhhbXBsZSkgaXMgc3RpbGwgYWNjZXNzaW5nIHRob3NlIHJlc291cmNlcyBpbgorICAgIGFub3RoZXIgdGhyZWFkLiBXaGV0aGVyIHlvdXIgY2hhaW4gZnVuY3Rpb24gbWlnaHQgYmUgcnVubmluZyBvciBub3QKKyAgICBkZXBlbmRzIG9uIHRoZSBzdGF0ZSBvZiB5b3VyIHBsdWdpbidzIHBhZHMsIGFuZCB0aGUgc3RhdGUgb2YgdGhvc2UKKyAgICBwYWRzIGlzIGNsb3NlbHkgbGlua2VkIHRvIHRoZSBzdGF0ZSBvZiB0aGUgZWxlbWVudC4gUGFkIHN0YXRlcyBhcmUKKyAgICBoYW5kbGVkIGluIHRoZSBHc3RFbGVtZW50IGNsYXNzJ3Mgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uLCBpbmNsdWRpbmcKKyAgICBwcm9wZXIgbG9ja2luZywgdGhhdCdzIHdoeSBpdCBpcyBlc3NlbnRpYWwgdG8gY2hhaW4gdXAgYmVmb3JlCisgICAgZGVzdHJveWluZyBhbGxvY2F0ZWQgcmVzb3VyY2VzLgorICA8L3BhcmE+CisgIDwvc2VjdDE+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL3B3Zy9idWlsZGluZy10ZXN0YXBwLnhtbCBiL2RvY3MvcHdnL2J1aWxkaW5nLXRlc3RhcHAueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNzJhMTkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3B3Zy9idWlsZGluZy10ZXN0YXBwLnhtbApAQCAtMCwwICsxLDIxNiBAQAorPCEtLSAjIyMjIyMjIyMjIyMgY2hhcHRlciAjIyMjIyMjIyMjIyMjIC0tPgorCis8Y2hhcHRlciBpZD0iY2hhcHRlci1idWlsZGluZy10ZXN0YXBwIj4KKyAgPHRpdGxlPkJ1aWxkaW5nIGEgVGVzdCBBcHBsaWNhdGlvbjwvdGl0bGU+CisgIDxwYXJhPgorICAgIE9mdGVuLCB5b3Ugd2lsbCB3YW50IHRvIHRlc3QgeW91ciBuZXdseSB3cml0dGVuIHBsdWdpbiBpbiBhbiBhcyBzbWFsbAorICAgIHNldHRpbmcgYXMgcG9zc2libGUuIFVzdWFsbHksIDxmaWxlbmFtZT5nc3QtbGF1bmNoPC9maWxlbmFtZT4gaXMgYQorICAgIGdvb2QgZmlyc3Qgc3RlcCBhdCB0ZXN0aW5nIGEgcGx1Z2luLiBJZiB5b3UgaGF2ZSBub3QgaW5zdGFsbGVkIHlvdXIKKyAgICBwbHVnaW4gaW4gYSBkaXJlY3RvcnkgdGhhdCBHU3RyZWFtZXIgc2VhcmNoZXMsIHRoZW4geW91IHdpbGwgbmVlZCB0bworICAgIHNldCB0aGUgcGx1Z2luIHBhdGguIEVpdGhlciBzZXQgR1NUX1BMVUdJTl9QQVRIIHRvIHRoZSBkaXJlY3RvcnkKKyAgICBjb250YWluaW5nIHlvdXIgcGx1Z2luLCBvciB1c2UgdGhlIGNvbW1hbmQtbGluZSBvcHRpb24gLS1nc3QtcGx1Z2luLXBhdGguCisgICAgSWYgeW91IGJhc2VkIHlvdXIgcGx1Z2luIG9mZiBvZiB0aGUgZ3N0LXBsdWdpbiB0ZW1wbGF0ZSwgdGhlbiB0aGlzCisgICAgd2lsbCBsb29rIHNvbWV0aGluZyBsaWtlCisgICAgPGNvbW1hbmQ+CisgICAgZ3N0LWxhdW5jaCAtLWdzdC1wbHVnaW4tcGF0aD0kSE9NRS9nc3QtdGVtcGxhdGUvZ3N0LXBsdWdpbi9zcmMvLmxpYnMgVEVTVFBJUEVMSU5FCisgICAgPC9jb21tYW5kPgorICAgIEhvd2V2ZXIsIHlvdSB3aWxsIG9mdGVuIG5lZWQgbW9yZQorICAgIHRlc3RpbmcgZmVhdHVyZXMgdGhhbiBnc3QtbGF1bmNoIGNhbiBwcm92aWRlLCBzdWNoIGFzIHNlZWtpbmcsIGV2ZW50cywKKyAgICBpbnRlcmFjdGl2aXR5IGFuZCBtb3JlLiBXcml0aW5nIHlvdXIgb3duIHNtYWxsIHRlc3RpbmcgcHJvZ3JhbSBpcyB0aGUKKyAgICBlYXNpZXN0IHdheSB0byBhY2NvbXBsaXNoIHRoaXMuIFRoaXMgc2VjdGlvbiBleHBsYWlucyAtIGluIGEgZmV3IHdvcmRzCisgICAgLSBob3cgdG8gZG8gdGhhdC4gRm9yIGEgY29tcGxldGUgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgZ3VpZGUsIHNlZSB0aGUKKyAgICA8dWxpbmsgdHlwZT0iaHR0cCIgdXJsPSIuLi8uLi9tYW51YWwvaHRtbC9pbmRleC5odG1sIj5BcHBsaWNhdGlvbiBEZXZlbG9wbWVudAorICAgIE1hbnVhbDwvdWxpbms+LgorICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIEF0IHRoZSBzdGFydCwgeW91IG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgJkdTdHJlYW1lcjsgY29yZSBsaWJyYXJ5IGJ5CisgICAgICBjYWxsaW5nIDxmdW5jdGlvbj5nc3RfaW5pdCAoKTwvZnVuY3Rpb24+LiBZb3UgY2FuIGFsdGVybmF0aXZlbHkgY2FsbAorICAgICAgPGZ1bmN0aW9uPmdzdF9pbml0X3dpdGhfcG9wdF90YWJsZXMgKCk8L2Z1bmN0aW9uPiwgd2hpY2ggd2lsbCByZXR1cm4KKyAgICAgIGEgcG9pbnRlciB0byBwb3B0IHRhYmxlcy4gWW91IGNhbiB0aGVuIHVzZSBsaWJwb3B0IHRvIGhhbmRsZSB0aGUKKyAgICAgIGdpdmVuIGFyZ3VtZW50IHRhYmxlLCBhbmQgdGhpcyB3aWxsIGZpbmlzaCB0aGUgJkdTdHJlYW1lcjsgaW5pdGlhbGl6YXRpb24uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBZb3UgY2FuIGNyZWF0ZSBlbGVtZW50cyB1c2luZyA8ZnVuY3Rpb24+Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgpPC9mdW5jdGlvbj4sCisgICAgICB3aGVyZSB0aGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGVsZW1lbnQgdHlwZSB0aGF0IHlvdSB3YW50IHRvIGNyZWF0ZSwKKyAgICAgIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGEgZnJlZS1mb3JtIG5hbWUuIFRoZSBleGFtcGxlIGF0IHRoZSBlbmQgdXNlcworICAgICAgYSBzaW1wbGUgZmlsZXNvdXJjZSAtIGRlY29kZXIgLSBzb3VuZGNhcmQgb3V0cHV0IHBpcGVsaW5lLCBidXQgeW91IGNhbgorICAgICAgdXNlIHNwZWNpZmljIGRlYnVnZ2luZyBlbGVtZW50cyBpZiB0aGF0J3MgbmVjZXNzYXJ5LiBGb3IgZXhhbXBsZSwgYW4KKyAgICAgIDxjbGFzc25hbWU+aWRlbnRpdHk8L2NsYXNzbmFtZT4gZWxlbWVudCBjYW4gYmUgdXNlZCBpbiB0aGUgbWlkZGxlIG9mCisgICAgICB0aGUgcGlwZWxpbmUgdG8gYWN0IGFzIGEgZGF0YS10by1hcHBsaWNhdGlvbiB0cmFuc21pdHRlci4gVGhpcyBjYW4gYmUKKyAgICAgIHVzZWQgdG8gY2hlY2sgdGhlIGRhdGEgZm9yIG1pc2JlaGF2aW91cnMgb3IgY29ycmVjdG5lc3MgaW4geW91ciB0ZXN0CisgICAgICBhcHBsaWNhdGlvbi4gQWxzbywgeW91IGNhbiB1c2UgYSA8Y2xhc3NuYW1lPmZha2VzaW5rPC9jbGFzc25hbWU+CisgICAgICBlbGVtZW50IGF0IHRoZSBlbmQgb2YgdGhlIHBpcGVsaW5lIHRvIGR1bXAgeW91ciBkYXRhIHRvIHRoZSBzdGRvdXQKKyAgICAgIChpbiBvcmRlciB0byBkbyB0aGlzLCBzZXQgdGhlIDxmdW5jdGlvbj5kdW1wPC9mdW5jdGlvbj4gcHJvcGVydHkgdG8KKyAgICAgIFRSVUUpLiBMYXN0bHksIHlvdSBjYW4gdXNlIHRoZSA8Y2xhc3NuYW1lPmVmZW5jZTwvY2xhc3NuYW1lPiBlbGVtZW50CisgICAgICAoaW5kZWVkLCBhbiBlbGV0cmljIGZlbmNlIG1lbW9yeSBkZWJ1Z2dlciB3cmFwcGVyIGVsZW1lbnQpIHRvIGNoZWNrCisgICAgICBmb3IgbWVtb3J5IGVycm9ycy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIER1cmluZyBsaW5raW5nLCB5b3VyIHRlc3QgYXBwbGljYXRpb24gY2FuIHVzZSBmaXhhdGlvbiBvciBmaWx0ZXJlZCBjYXBzCisgICAgICBhcyBhIHdheSB0byBkcml2ZSBhIHNwZWNpZmljIHR5cGUgb2YgZGF0YSB0byBvciBmcm9tIHlvdXIgZWxlbWVudC4gVGhpcworICAgICAgaXMgYSB2ZXJ5IHNpbXBsZSBhbmQgZWZmZWN0aXZlIHdheSBvZiBjaGVja2luZyBtdWx0aXBsZSB0eXBlcyBvZiBpbnB1dAorICAgICAgYW5kIG91dHB1dCBpbiB5b3VyIGVsZW1lbnQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBSdW5uaW5nIHRoZSBwaXBlbGluZSBoYXBwZW5zIHRocm91Z2ggdGhlIDxmdW5jdGlvbj5nc3RfYmluX2l0ZXJhdGUgKCk8L2Z1bmN0aW9uPgorICAgICAgZnVuY3Rpb24uIE5vdGUgdGhhdCBkdXJpbmcgcnVubmluZywgeW91IHNob3VsZCBjb25uZWN0IHRvIGF0IGxlYXN0IHRoZQorICAgICAgPHF1b3RlPmVycm9yPC9xdW90ZT4gYW5kIDxxdW90ZT5lb3M8L3F1b3RlPiBzaWduYWxzIG9uIHRoZSBwaXBlbGluZQorICAgICAgYW5kL29yIHlvdXIgcGx1Z2luL2VsZW1lbnQgdG8gY2hlY2sgZm9yIGNvcnJlY3QgaGFuZGxpbmcgb2YgdGhpcy4gQWxzbywKKyAgICAgIHlvdSBzaG91bGQgYWRkIGV2ZW50cyBpbnRvIHRoZSBwaXBlbGluZSBhbmQgbWFrZSBzdXJlIHlvdXIgcGx1Z2luIGhhbmRsZXMKKyAgICAgIHRoZXNlIGNvcnJlY3RseSAod2l0aCByZXNwZWN0IHRvIGNsb2NraW5nLCBpbnRlcm5hbCBjYWNoaW5nLCBldGMuKS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIE5ldmVyIGZvcmdldCB0byBjbGVhbiB1cCBtZW1vcnkgaW4geW91ciBwbHVnaW4gb3IgeW91ciB0ZXN0IGFwcGxpY2F0aW9uLgorICAgICAgV2hlbiBnb2luZyB0byB0aGUgTlVMTCBzdGF0ZSwgeW91ciBlbGVtZW50IHNob3VsZCBjbGVhbiB1cCBhbGxvY2F0ZWQKKyAgICAgIG1lbW9yeSBhbmQgY2FjaGVzLiBBbHNvLCBpdCBzaG91bGQgY2xvc2UgZG93biBhbnkgcmVmZXJlbmNlcyBoZWxkIHRvCisgICAgICBwb3NzaWJsZSBzdXBwb3J0IGxpYnJhcmllcy4gWW91ciBhcHBsaWNhdGlvbiBzaG91bGQgPGZ1bmN0aW9uPnVucmVmICgpPC9mdW5jdGlvbj4KKyAgICAgIHRoZSBwaXBlbGluZSBhbmQgbWFrZSBzdXJlIGl0IGRvZXNuJ3QgY3Jhc2guCisgICAgPC9wYXJhPgorCisgICAgPHByb2dyYW1saXN0aW5nPjwhLS0gZXhhbXBsZS1iZWdpbiB0ZXN0LmMgLS0+CisjaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OworCitzdGF0aWMgZ2Jvb2xlYW4KK2J1c19jYWxsIChHc3RCdXMgICAgICpidXMsCisJICBHc3RNZXNzYWdlICptc2csCisJICBncG9pbnRlciAgICBkYXRhKQoreworICBHTWFpbkxvb3AgKmxvb3AgPSBkYXRhOworCisgIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSkgeworICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOgorICAgICAgZ19wcmludCAoIkVuZC1vZi1zdHJlYW1cbiIpOworICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOiB7CisgICAgICBnY2hhciAqZGVidWcgPSBOVUxMOworICAgICAgR0Vycm9yICplcnIgPSBOVUxMOworCisgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobXNnLCAmYW1wO2VyciwgJmFtcDtkZWJ1Zyk7CisKKyAgICAgIGdfcHJpbnQgKCJFcnJvcjogJXNcbiIsIGVyci0+bWVzc2FnZSk7CisgICAgICBnX2Vycm9yX2ZyZWUgKGVycik7CisKKyAgICAgIGlmIChkZWJ1ZykgeworICAgICAgICBnX3ByaW50ICgiRGVidWcgZGV0YWlsczogJXNcbiIsIGRlYnVnKTsKKyAgICAgICAgZ19mcmVlIChkZWJ1Zyk7CisgICAgICB9CisKKyAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiBUUlVFOworfQorCitnaW50CittYWluIChnaW50ICAgYXJnYywKKyAgICAgIGdjaGFyICphcmd2W10pCit7CisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpmaWxlc3JjLCAqZGVjb2RlciwgKmZpbHRlciwgKnNpbms7CisgIEdzdEVsZW1lbnQgKmNvbnZlcnQxLCAqY29udmVydDIsICpyZXNhbXBsZTsKKyAgR01haW5Mb29wICpsb29wOworICBHc3RCdXMgKmJ1czsKKworICAvKiBpbml0aWFsaXphdGlvbiAqLworICBnc3RfaW5pdCAoJmFtcDthcmdjLCAmYW1wO2FyZ3YpOworICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7CisgIGlmIChhcmdjICE9IDIpIHsKKyAgICBnX3ByaW50ICgiVXNhZ2U6ICVzICZsdDttcDMgZmlsZW5hbWUmZ3Q7XG4iLCBhcmd2WzBdKTsKKyAgICByZXR1cm4gMDE7CisgIH0KKworICAvKiBjcmVhdGUgZWxlbWVudHMgKi8KKyAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgibXlfcGlwZWxpbmUiKTsKKworICAvKiB3YXRjaCBmb3IgbWVzc2FnZXMgb24gdGhlIHBpcGVsaW5lJ3MgYnVzIChub3RlIHRoYXQgdGhpcyB3aWxsIG9ubHkKKyAgICogd29yayBsaWtlIHRoaXMgd2hlbiBhIEdMaWIgbWFpbiBsb29wIGlzIHJ1bm5pbmcpICovCisgIGJ1cyA9IGdzdF9waXBlbGluZV9nZXRfYnVzIChHU1RfUElQRUxJTkUgKHBpcGVsaW5lKSk7CisgIGdzdF9idXNfYWRkX3dhdGNoIChidXMsIGJ1c19jYWxsLCBsb29wKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKKworICBmaWxlc3JjICA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZpbGVzcmMiLCAibXlfZmlsZXNvdXJjZSIpOworICBkZWNvZGVyICA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoIm1hZCIsICJteV9kZWNvZGVyIik7CisKKyAgLyogcHV0dGluZyBhbiBhdWRpb2NvbnZlcnQgZWxlbWVudCBoZXJlIHRvIGNvbnZlcnQgdGhlIG91dHB1dCBvZiB0aGUKKyAgICogZGVjb2RlciBpbnRvIGEgZm9ybWF0IHRoYXQgbXlfZmlsdGVyIGNhbiBoYW5kbGUgKHdlIGFyZSBhc3N1bWluZyBpdAorICAgKiB3aWxsIGhhbmRsZSBhbnkgc2FtcGxlIHJhdGUgaGVyZSB0aG91Z2gpICovCisgIGNvbnZlcnQxID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW9jb252ZXJ0IiwgImF1ZGlvY29udmVydDEiKTsKKworICAvKiB1c2UgImlkZW50aXR5IiBoZXJlIGZvciBhIGZpbHRlciB0aGF0IGRvZXMgbm90aGluZyAqLworICBmaWx0ZXIgICA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoIm15X2ZpbHRlciIsICJteV9maWx0ZXIiKTsKKworICAvKiB0aGVyZSBzaG91bGQgYWx3YXlzIGJlIGF1ZGlvY29udmVydCBhbmQgYXVkaW9yZXNhbXBsZSBlbGVtZW50cyBiZWZvcmUKKyAgICogdGhlIGF1ZGlvIHNpbmssIHNpbmNlIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGF1ZGlvIHNpbmsgdXN1YWxseSB2YXJ5CisgICAqIGRlcGVuZGluZyBvbiB0aGUgZW52aXJvbm1lbnQgKG91dHB1dCB1c2VkLCBzb3VuZCBjYXJkLCBkcml2ZXIgZXRjLikgKi8KKyAgY29udmVydDIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhdWRpb2NvbnZlcnQiLCAiYXVkaW9jb252ZXJ0MiIpOworICByZXNhbXBsZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1ZGlvcmVzYW1wbGUiLCAiYXVkaW9yZXNhbXBsZSIpOworICBzaW5rICAgICA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoIm9zc3NpbmsiLCAiYXVkaW9zaW5rIik7CisKKyAgaWYgKCFzaW5rIHx8ICFkZWNvZGVyKSB7CisgICAgZ19wcmludCAoIkRlY29kZXIgb3Igb3V0cHV0IGNvdWxkIG5vdCBiZSBmb3VuZCAtIGNoZWNrIHlvdXIgaW5zdGFsbFxuIik7CisgICAgcmV0dXJuIC0xOworICB9IGVsc2UgaWYgKCFjb252ZXJ0MSB8fCAhY29udmVydDIgfHwgIXJlc2FtcGxlKSB7CisgICAgZ19wcmludCAoIkNvdWxkIG5vdCBjcmVhdGUgYXVkaW9jb252ZXJ0IG9yIGF1ZGlvcmVzYW1wbGUgZWxlbWVudCwgIgorICAgICAgICAgICAgICJjaGVjayB5b3VyIGluc3RhbGxhdGlvblxuIik7CisgICAgcmV0dXJuIC0xOworICB9IGVsc2UgaWYgKCFmaWx0ZXIpIHsKKyAgICBnX3ByaW50ICgiWW91ciBzZWxmLXdyaXR0ZW4gZmlsdGVyIGNvdWxkIG5vdCBiZSBmb3VuZC4gTWFrZSBzdXJlIGl0ICIKKyAgICAgICAgICAgICAiaXMgaW5zdGFsbGVkIGNvcnJlY3RseSBpbiAkKGxpYmRpcikvZ3N0cmVhbWVyLTAuMTAvIG9yICIKKyAgICAgICAgICAgICAifi8uZ3N0cmVhbWVyLTAuMTAvcGx1Z2lucy8gYW5kIHRoYXQgZ3N0LWluc3BlY3QtMC4xMCBsaXN0cyBpdC4gIgorICAgICAgICAgICAgICJJZiBpdCBkb2Vzbid0LCBjaGVjayB3aXRoICdHU1RfREVCVUc9KjoyIGdzdC1pbnNwZWN0LTAuMTAnIGZvciAiCisgICAgICAgICAgICAgInRoZSByZWFzb24gd2h5IGl0IGlzIG5vdCBiZWluZyBsb2FkZWQuIik7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZmlsZXNyYyksICJsb2NhdGlvbiIsIGFyZ3ZbMV0sIE5VTEwpOworCisgIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgZmlsZXNyYywgZGVjb2RlciwgY29udmVydDEsIGZpbHRlciwKKyAgICAgICAgICAgICAgICAgICAgY29udmVydDIsIHJlc2FtcGxlLCBzaW5rLCBOVUxMKTsKKworICAvKiBsaW5rIGV2ZXJ5dGhpbmcgdG9nZXRoZXIgKi8KKyAgaWYgKCFnc3RfZWxlbWVudF9saW5rX21hbnkgKGZpbGVzcmMsIGRlY29kZXIsIGNvbnZlcnQxLCBmaWx0ZXIsIGNvbnZlcnQyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzYW1wbGUsIHNpbmssIE5VTEwpKSB7CisgICAgZ19wcmludCAoIkZhaWxlZCB0byBsaW5rIG9uZSBvciBtb3JlIGVsZW1lbnRzIVxuIik7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgLyogcnVuICovCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpIHsKKyAgICBHc3RNZXNzYWdlICptc2c7CisKKyAgICBnX3ByaW50ICgiRmFpbGVkIHRvIHN0YXJ0IHVwIHBpcGVsaW5lIVxuIik7CisKKyAgICAvKiBjaGVjayBpZiB0aGVyZSBpcyBhbiBlcnJvciBtZXNzYWdlIHdpdGggZGV0YWlscyBvbiB0aGUgYnVzICovCisgICAgbXNnID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0VSUk9SLCAwKTsKKyAgICBpZiAobXNnKSB7CisgICAgICBHRXJyb3IgKmVyciA9IE5VTEw7CisKKyAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtc2csICZhbXA7ZXJyLCBOVUxMKTsKKyAgICAgIGdfcHJpbnQgKCJFUlJPUjogJXNcbiIsIGVyci0mZ3Q7bWVzc2FnZSk7CisgICAgICBnX2Vycm9yX2ZyZWUgKGVycik7CisgICAgICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKKyAgICB9CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKKworICAvKiBjbGVhbiB1cCAqLworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKKworICByZXR1cm4gMDsKK30KKyAgICA8IS0tIGV4YW1wbGUtZW5kIHRlc3QuYyAtLT48L3Byb2dyYW1saXN0aW5nPgorPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9wd2cvaW50cm8tYmFzaWNzLnhtbCBiL2RvY3MvcHdnL2ludHJvLWJhc2ljcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUyZWVlNgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvcHdnL2ludHJvLWJhc2ljcy54bWwKQEAgLTAsMCArMSw0MzMgQEAKKzwhLS0gIyMjIyMjIyMjIyMjIGNoYXB0ZXIgIyMjIyMjIyMjIyMjIyAtLT4KKworPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItaW50cm8tYmFzaWNzIiB4cmVmbGFiZWw9IkZvdW5kYXRpb25zIj4KKyAgPHRpdGxlPkZvdW5kYXRpb25zPC90aXRsZT4KKyAgPHBhcmE+PCEtLSBzeW5jaHJvbml6ZSB3aXRoIEFwcERldk1hbiAtLT4KKyAgICBUaGlzIGNoYXB0ZXIgb2YgdGhlIGd1aWRlIGludHJvZHVjZXMgdGhlIGJhc2ljIGNvbmNlcHRzIG9mICZHU3RyZWFtZXI7LgorICAgIFVuZGVyc3RhbmRpbmcgdGhlc2UgY29uY2VwdHMgd2lsbCBoZWxwIHlvdSBncm9rIHRoZSBpc3N1ZXMgaW52b2x2ZWQgaW4KKyAgICBleHRlbmRpbmcgJkdTdHJlYW1lcjsuIE1hbnkgb2YgdGhlc2UgY29uY2VwdHMgYXJlIGV4cGxhaW5lZCBpbiBncmVhdGVyCisgICAgZGV0YWlsIGluIHRoZSAmR3N0QXBwRGV2TWFuOzsgdGhlIGJhc2ljIGNvbmNlcHRzIHByZXNlbnRlZCBoZXJlIHNlcnZlIG1haW5seQorICAgIHRvIHJlZnJlc2ggeW91ciBtZW1vcnkuCisgIDwvcGFyYT4KKworICA8IS0tICMjIyMjIyMjIyMjIyBzZWN0MSAjIyMjIyMjIyMjIyMjIC0tPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1iYXNpY3MtZWxlbWVudHMiIHhyZWZsYWJlbD0iRWxlbWVudHMgYW5kIFBsdWdpbnMiPgorICAgIDx0aXRsZT5FbGVtZW50cyBhbmQgUGx1Z2luczwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBFbGVtZW50cyBhcmUgYXQgdGhlIGNvcmUgb2YgJkdTdHJlYW1lcjsuIEluIHRoZSBjb250ZXh0IG9mIHBsdWdpbgorICAgICAgZGV2ZWxvcG1lbnQsIGFuIDxlbXBoYXNpcz5lbGVtZW50PC9lbXBoYXNpcz4gaXMgYW4gb2JqZWN0IGRlcml2ZWQgZnJvbSB0aGUKKyAgICAgIDx1bGluayB0eXBlPSJodHRwIiB1cmw9Ii4uLy4uL2dzdHJlYW1lci9odG1sL0dzdEVsZW1lbnQuaHRtbCI+PGNsYXNzbmFtZT4KKyAgICAgIEdzdEVsZW1lbnQ8L2NsYXNzbmFtZT48L3VsaW5rPiBjbGFzcy4gRWxlbWVudHMgcHJvdmlkZSBzb21lIHNvcnQgb2YKKyAgICAgIGZ1bmN0aW9uYWxpdHkgd2hlbiBsaW5rZWQgd2l0aCBvdGhlciBlbGVtZW50czogRm9yIGV4YW1wbGUsIGEgc291cmNlCisgICAgICBlbGVtZW50IHByb3ZpZGVzIGRhdGEgdG8gYSBzdHJlYW0sIGFuZCBhIGZpbHRlciBlbGVtZW50IGFjdHMgb24gdGhlIGRhdGEKKyAgICAgIGluIGEgc3RyZWFtLiBXaXRob3V0IGVsZW1lbnRzLCAmR1N0cmVhbWVyOyBpcyBqdXN0IGEgYnVuY2ggb2YgY29uY2VwdHVhbAorICAgICAgcGlwZSBmaXR0aW5ncyB3aXRoIG5vdGhpbmcgdG8gbGluay4gQSBsYXJnZSBudW1iZXIgb2YgZWxlbWVudHMgc2hpcAorICAgICAgd2l0aCAmR1N0cmVhbWVyOywgYnV0IGV4dHJhIGVsZW1lbnRzIGNhbiBhbHNvIGJlIHdyaXR0ZW4uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgSnVzdCB3cml0aW5nIGEgbmV3IGVsZW1lbnQgaXMgbm90IGVudGlyZWx5IGVub3VnaCwgaG93ZXZlcjogWW91IHdpbGwgbmVlZAorICAgICAgdG8gZW5jYXBzdWxhdGUgeW91ciBlbGVtZW50IGluIGEgPGVtcGhhc2lzPnBsdWdpbjwvZW1waGFzaXM+IHRvIGVuYWJsZQorICAgICAgJkdTdHJlYW1lcjsgdG8gdXNlIGl0LiBBIHBsdWdpbiBpcyBlc3NlbnRpYWxseSBhIGxvYWRhYmxlIGJsb2NrIG9mIGNvZGUsCisgICAgICB1c3VhbGx5IGNhbGxlZCBhIHNoYXJlZCBvYmplY3QgZmlsZSBvciBhIGR5bmFtaWNhbGx5IGxpbmtlZCBsaWJyYXJ5LiBBCisgICAgICBzaW5nbGUgcGx1Z2luIG1heSBjb250YWluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBzZXZlcmFsIGVsZW1lbnRzLCBvciBqdXN0CisgICAgICBhIHNpbmdsZSBvbmUuIEZvciBzaW1wbGljaXR5LCB0aGlzIGd1aWRlIGNvbmNlbnRyYXRlcyBwcmltYXJpbHkgb24gcGx1Z2lucworICAgICAgY29udGFpbmluZyBvbmUgZWxlbWVudC4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBBIDxlbXBoYXNpcz5maWx0ZXI8L2VtcGhhc2lzPiBpcyBhbiBpbXBvcnRhbnQgdHlwZSBvZiBlbGVtZW50IHRoYXQKKyAgICAgIHByb2Nlc3NlcyBhIHN0cmVhbSBvZiBkYXRhLiBQcm9kdWNlcnMgYW5kIGNvbnN1bWVycyBvZiBkYXRhIGFyZSBjYWxsZWQKKyAgICAgIDxlbXBoYXNpcz5zb3VyY2U8L2VtcGhhc2lzPiBhbmQgPGVtcGhhc2lzPnNpbms8L2VtcGhhc2lzPiBlbGVtZW50cywKKyAgICAgIHJlc3BlY3RpdmVseS4gPGVtcGhhc2lzPkJpbjwvZW1waGFzaXM+IGVsZW1lbnRzIGNvbnRhaW4gb3RoZXIgZWxlbWVudHMuCisgICAgICBPbmUgdHlwZSBvZiBiaW4gaXMgcmVzcG9uc2libGUgZm9yIHNjaGVkdWxpbmcgdGhlIGVsZW1lbnRzIHRoYXQgdGhleQorICAgICAgY29udGFpbiBzbyB0aGF0IGRhdGEgZmxvd3Mgc21vb3RobHkuIEFub3RoZXIgdHlwZSBvZiBiaW4sIGNhbGxlZAorICAgICAgPGVtcGhhc2lzPmF1dG9wbHVnZ2VyPC9lbXBoYXNpcz4gZWxlbWVudHMsIGF1dG9tYXRpY2FsbHkgYWRkIG90aGVyCisgICAgICBlbGVtZW50cyB0byB0aGUgYmluIGFuZCBsaW5rcyB0aGVtIHRvZ2V0aGVyIHNvIHRoYXQgdGhleSBhY3QgYXMgYQorICAgICAgZmlsdGVyIGJldHdlZW4gdHdvIGFyYml0cmFyeSBzdHJlYW0gdHlwZXMuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgVGhlIHBsdWdpbiBtZWNoYW5pc20gaXMgdXNlZCBldmVyeXdoZXJlIGluICZHU3RyZWFtZXI7LCBldmVuIGlmIG9ubHkgdGhlCisgICAgICBzdGFuZGFyZCBwYWNrYWdlcyBhcmUgYmVpbmcgdXNlZC4gQSBmZXcgdmVyeSBiYXNpYyBmdW5jdGlvbnMgcmVzaWRlIGluIHRoZQorICAgICAgY29yZSBsaWJyYXJ5LCBhbmQgYWxsIG90aGVycyBhcmUgaW1wbGVtZW50ZWQgaW4gcGx1Z2lucy4gQSBwbHVnaW4gcmVnaXN0cnkKKyAgICAgIGlzIHVzZWQgdG8gc3RvcmUgdGhlIGRldGFpbHMgb2YgdGhlIHBsdWdpbnMgaW4gYW4gWE1MIGZpbGUuIFRoaXMgd2F5LCBhCisgICAgICBwcm9ncmFtIHVzaW5nICZHU3RyZWFtZXI7IGRvZXMgbm90IGhhdmUgdG8gbG9hZCBhbGwgcGx1Z2lucyB0byBkZXRlcm1pbmUKKyAgICAgIHdoaWNoIGFyZSBuZWVkZWQuIFBsdWdpbnMgYXJlIG9ubHkgbG9hZGVkIHdoZW4gdGhlaXIgcHJvdmlkZWQgZWxlbWVudHMgYXJlCisgICAgICByZXF1ZXN0ZWQuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgU2VlIHRoZSAmR3N0TGliUmVmOyBmb3IgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiA8dWxpbmsKKyAgICAgIHR5cGU9Imh0dHAiCisgICAgICB1cmw9Ii4uLy4uL2dzdHJlYW1lci9odG1sL0dzdEVsZW1lbnQuaHRtbCI+PGNsYXNzbmFtZT5Hc3RFbGVtZW50PC9jbGFzc25hbWU+PC91bGluaz4KKyAgICAgIGFuZCA8dWxpbmsgdHlwZT0iaHR0cCIKKyAgICAgIHVybD0iLi4vLi4vZ3N0cmVhbWVyL2h0bWwvR3N0UGx1Z2luLmh0bWwiPjxjbGFzc25hbWU+R3N0UGx1Z2luPC9jbGFzc25hbWU+PC91bGluaz4uCisgICAgPC9wYXJhPgorICA8L3NlY3QxPgorCisgIDwhLS0gIyMjIyMjIyMjIyMjIHNlY3QxICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLWJhc2ljcy1wYWRzIiB4cmVmbGFiZWw9IlBhZHMiPgorICAgIDx0aXRsZT5QYWRzPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIDxlbXBoYXNpcz5QYWRzPC9lbXBoYXNpcz4gYXJlIHVzZWQgdG8gbmVnb3RpYXRlIGxpbmtzIGFuZCBkYXRhIGZsb3cKKyAgICAgIGJldHdlZW4gZWxlbWVudHMgaW4gJkdTdHJlYW1lcjsuIEEgcGFkIGNhbiBiZSB2aWV3ZWQgYXMgYQorICAgICAgPHF1b3RlPnBsYWNlPC9xdW90ZT4gb3IgPHF1b3RlPnBvcnQ8L3F1b3RlPiBvbiBhbiBlbGVtZW50IHdoZXJlCisgICAgICBsaW5rcyBtYXkgYmUgbWFkZSB3aXRoIG90aGVyIGVsZW1lbnRzLCBhbmQgdGhyb3VnaCB3aGljaCBkYXRhIGNhbgorICAgICAgZmxvdyB0byBvciBmcm9tIHRob3NlIGVsZW1lbnRzLiAgUGFkcyBoYXZlIHNwZWNpZmljIGRhdGEgaGFuZGxpbmcKKyAgICAgIGNhcGFiaWxpdGllczogQSBwYWQgY2FuIHJlc3RyaWN0IHRoZSB0eXBlIG9mIGRhdGEgdGhhdCBmbG93cworICAgICAgdGhyb3VnaCBpdC4gIExpbmtzIGFyZSBvbmx5IGFsbG93ZWQgYmV0d2VlbiB0d28gcGFkcyB3aGVuIHRoZQorICAgICAgYWxsb3dlZCBkYXRhIHR5cGVzIG9mIHRoZSB0d28gcGFkcyBhcmUgY29tcGF0aWJsZS4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBBbiBhbmFsb2d5IG1heSBiZSBoZWxwZnVsIGhlcmUuIEEgcGFkIGlzIHNpbWlsYXIgdG8gYSBwbHVnIG9yIGphY2sgb24gYQorICAgICAgcGh5c2ljYWwgZGV2aWNlLiBDb25zaWRlciwgZm9yIGV4YW1wbGUsIGEgaG9tZSB0aGVhdGVyIHN5c3RlbSBjb25zaXN0aW5nCisgICAgICBvZiBhbiBhbXBsaWZpZXIsIGEgRFZEIHBsYXllciwgYW5kIGEgKHNpbGVudCkgdmlkZW8gcHJvamVjdG9yLiBMaW5raW5nCisgICAgICB0aGUgRFZEIHBsYXllciB0byB0aGUgYW1wbGlmaWVyIGlzIGFsbG93ZWQgYmVjYXVzZSBib3RoIGRldmljZXMgaGF2ZSBhdWRpbworICAgICAgamFja3MsIGFuZCBsaW5raW5nIHRoZSBwcm9qZWN0b3IgdG8gdGhlIERWRCBwbGF5ZXIgaXMgYWxsb3dlZCBiZWNhdXNlCisgICAgICBib3RoIGRldmljZXMgaGF2ZSBjb21wYXRpYmxlIHZpZGVvIGphY2tzLiBMaW5rcyBiZXR3ZWVuIHRoZQorICAgICAgcHJvamVjdG9yIGFuZCB0aGUgYW1wbGlmaWVyIG1heSBub3QgYmUgbWFkZSBiZWNhdXNlIHRoZSBwcm9qZWN0b3IgYW5kCisgICAgICBhbXBsaWZpZXIgaGF2ZSBkaWZmZXJlbnQgdHlwZXMgb2YgamFja3MuIFBhZHMgaW4gJkdTdHJlYW1lcjsgc2VydmUgdGhlCisgICAgICBzYW1lIHB1cnBvc2UgYXMgdGhlIGphY2tzIGluIHRoZSBob21lIHRoZWF0ZXIgc3lzdGVtLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIEZvciB0aGUgbW9zdCBwYXJ0LCBhbGwgZGF0YSBpbiAmR1N0cmVhbWVyOyBmbG93cyBvbmUgd2F5IHRocm91Z2ggYSBsaW5rCisgICAgICBiZXR3ZWVuIGVsZW1lbnRzLiBEYXRhIGZsb3dzIG91dCBvZiBvbmUgZWxlbWVudCB0aHJvdWdoIG9uZSBvciBtb3JlCisgICAgICA8ZW1waGFzaXM+c291cmNlIHBhZHM8L2VtcGhhc2lzPiwgYW5kIGVsZW1lbnRzIGFjY2VwdCBpbmNvbWluZyBkYXRhIHRocm91Z2gKKyAgICAgIG9uZSBvciBtb3JlIDxlbXBoYXNpcz5zaW5rIHBhZHM8L2VtcGhhc2lzPi4gU291cmNlIGFuZCBzaW5rIGVsZW1lbnRzIGhhdmUKKyAgICAgIG9ubHkgc291cmNlIGFuZCBzaW5rIHBhZHMsIHJlc3BlY3RpdmVseS4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBTZWUgdGhlICZHc3RMaWJSZWY7IGZvciB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIGEgPHVsaW5rCisgICAgICB0eXBlPSJodHRwIgorICAgICAgdXJsPSIuLi8uLi9nc3RyZWFtZXIvaHRtbC9Hc3RQYWQuaHRtbCI+PGNsYXNzbmFtZT5Hc3RQYWQ8L2NsYXNzbmFtZT48L3VsaW5rPi4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPCEtLSAjIyMjIyMjIyMjIyMgc2VjdDEgIyMjIyMjIyMjIyMjIyAtLT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tYmFzaWNzLWRhdGEiIHhyZWZsYWJlbD0iRGF0YSwgQnVmZmVycyBhbmQgRXZlbnRzIj4KKyAgICA8dGl0bGU+RGF0YSwgQnVmZmVycyBhbmQgRXZlbnRzPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIEFsbCBzdHJlYW1zIG9mIGRhdGEgaW4gJkdTdHJlYW1lcjsgYXJlIGNob3BwZWQgdXAgaW50byBjaHVua3MgdGhhdCBhcmUKKyAgICAgIHBhc3NlZCBmcm9tIGEgc291cmNlIHBhZCBvbiBvbmUgZWxlbWVudCB0byBhIHNpbmsgcGFkIG9uIGFub3RoZXIgZWxlbWVudC4KKyAgICAgIDxlbXBoYXNpcz5EYXRhPC9lbXBoYXNpcz4gYXJlIHN0cnVjdHVyZXMgdXNlZCB0byBob2xkIHRoZXNlIGNodW5rcyBvZgorICAgICAgZGF0YS4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBEYXRhIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgaW1wb3J0YW50IHR5cGVzOgorICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQW4gZXhhY3QgdHlwZSBpbmRpY2F0aW5nIHdoYXQgdHlwZSBvZiBkYXRhIChjb250cm9sLCBjb250ZW50LCAuLi4pCisgICAgICAgICAgICB0aGlzIERhdGEgaXMuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBIHJlZmVyZW5jZSBjb3VudCBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgY3VycmVudGx5CisgICAgICAgICAgICBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBidWZmZXIuIFdoZW4gdGhlIGJ1ZmZlciByZWZlcmVuY2UgY291bnQKKyAgICAgICAgICAgIGZhbGxzIHRvIHplcm8sIHRoZSBidWZmZXIgd2lsbCBiZSB1bmxpbmtlZCwgYW5kIGl0cyBtZW1vcnkgd2lsbCBiZQorICAgICAgICAgICAgZnJlZWQgaW4gc29tZSBzZW5zZSAoc2VlIGJlbG93IGZvciBtb3JlIGRldGFpbHMpLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZXJlIGFyZSB0d28gdHlwZXMgb2YgZGF0YSBkZWZpbmVkOiBldmVudHMgKGNvbnRyb2wpIGFuZCBidWZmZXJzCisgICAgICAoY29udGVudCkuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgQnVmZmVycyBtYXkgY29udGFpbiBhbnkgc29ydCBvZiBkYXRhIHRoYXQgdGhlIHR3byBsaW5rZWQgcGFkcworICAgICAga25vdyBob3cgdG8gaGFuZGxlLiBOb3JtYWxseSwgYSBidWZmZXIgY29udGFpbnMgYSBjaHVuayBvZiBzb21lIHNvcnQgb2YKKyAgICAgIGF1ZGlvIG9yIHZpZGVvIGRhdGEgdGhhdCBmbG93cyBmcm9tIG9uZSBlbGVtZW50IHRvIGFub3RoZXIuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgQnVmZmVycyBhbHNvIGNvbnRhaW4gbWV0YWRhdGEgZGVzY3JpYmluZyB0aGUgYnVmZmVyJ3MgY29udGVudHMuIFNvbWUgb2YKKyAgICAgIHRoZSBpbXBvcnRhbnQgdHlwZXMgb2YgbWV0YWRhdGEgYXJlOgorICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIncyBkYXRhLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQW4gaW50ZWdlciBpbmRpY2F0aW5nIHRoZSBzaXplIG9mIHRoZSBidWZmZXIncyBkYXRhLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSB0aW1lc3RhbXAgaW5kaWNhdGluZyB0aGUgcHJlZmVycmVkIGRpc3BsYXkgdGltZXN0YW1wIG9mIHRoZQorICAgICAgICAgICAgY29udGVudCBpbiB0aGUgYnVmZmVyLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIEV2ZW50cworICAgICAgY29udGFpbiBpbmZvcm1hdGlvbiBvbiB0aGUgc3RhdGUgb2YgdGhlIHN0cmVhbSBmbG93aW5nIGJldHdlZW4gdGhlIHR3bworICAgICAgbGlua2VkIHBhZHMuIEV2ZW50cyB3aWxsIG9ubHkgYmUgc2VudCBpZiB0aGUgZWxlbWVudCBleHBsaWNpdGx5IHN1cHBvcnRzCisgICAgICB0aGVtLCBlbHNlIHRoZSBjb3JlIHdpbGwgKHRyeSB0bykgaGFuZGxlIHRoZSBldmVudHMgYXV0b21hdGljYWxseS4gRXZlbnRzCisgICAgICBhcmUgdXNlZCB0byBpbmRpY2F0ZSwgZm9yIGV4YW1wbGUsIGEgY2xvY2sgZGlzY29udGludWl0eSwgdGhlIGVuZCBvZiBhCisgICAgICBtZWRpYSBzdHJlYW0gb3IgdGhhdCB0aGUgY2FjaGUgc2hvdWxkIGJlIGZsdXNoZWQuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgRXZlbnRzIG1heSBjb250YWluIHNldmVyYWwgb2YgdGhlIGZvbGxvd2luZyBpdGVtczoKKyAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgc3VidHlwZSBpbmRpY2F0aW5nIHRoZSB0eXBlIG9mIHRoZSBjb250YWluZWQgZXZlbnQuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgb3RoZXIgY29udGVudHMgb2YgdGhlIGV2ZW50IGRlcGVuZCBvbiB0aGUgc3BlY2lmaWMgZXZlbnQgdHlwZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBFdmVudHMgd2lsbCBiZSBkaXNjdXNzZWQgZXh0ZW5zaXZlbHkgaW4gPHhyZWYgbGlua2VuZD0iY2hhcHRlci1hZHZhbmNlZC1ldmVudHMiLz4uCisgICAgICBVbnRpbCB0aGVuLCB0aGUgb25seSBldmVudCB0aGF0IHdpbGwgYmUgdXNlZCBpcyB0aGUgPGVtcGhhc2lzPkVPUzwvZW1waGFzaXM+CisgICAgICBldmVudCwgd2hpY2ggaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgZW5kLW9mLXN0cmVhbSAodXN1YWxseSBlbmQtb2YtZmlsZSkuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgU2VlIHRoZSAmR3N0TGliUmVmOyBmb3IgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBhIDx1bGluaworICAgICAgdHlwZT0iaHR0cCIKKyAgICAgIHVybD0iLi4vLi4vZ3N0cmVhbWVyL2h0bWwvZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCI+PGNsYXNzbmFtZT5Hc3RNaW5pT2JqZWN0PC9jbGFzc25hbWU+PC91bGluaz4sIDx1bGluayB0eXBlPSJodHRwIgorICAgICAgdXJsPSIuLi8uLi9nc3RyZWFtZXIvaHRtbC9nc3RyZWFtZXItR3N0QnVmZmVyLmh0bWwiPjxjbGFzc25hbWU+R3N0QnVmZmVyPC9jbGFzc25hbWU+PC91bGluaz4gYW5kIDx1bGluayB0eXBlPSJodHRwIgorICAgICAgdXJsPSIuLi8uLi9nc3RyZWFtZXIvaHRtbC9nc3RyZWFtZXItR3N0RXZlbnQuaHRtbCI+PGNsYXNzbmFtZT5Hc3RFdmVudDwvY2xhc3NuYW1lPjwvdWxpbms+LgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0MiBpZD0ic2VjdDItYnVmZmVyLWFsbG9jYXRpb24iIHhyZWZsYWJlbD0iQnVmZmVyIEFsbG9jYXRpb24iPgorICAgICAgPHRpdGxlPkJ1ZmZlciBBbGxvY2F0aW9uPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBCdWZmZXJzIGFyZSBhYmxlIHRvIHN0b3JlIGNodW5rcyBvZiBtZW1vcnkgb2Ygc2V2ZXJhbCBkaWZmZXJlbnQKKwl0eXBlcy4gIFRoZSBtb3N0IGdlbmVyaWMgdHlwZSBvZiBidWZmZXIgY29udGFpbnMgbWVtb3J5IGFsbG9jYXRlZAorCWJ5IG1hbGxvYygpLiAgU3VjaCBidWZmZXJzLCBhbHRob3VnaCBjb252ZW5pZW50LCBhcmUgbm90IGFsd2F5cworCXZlcnkgZmFzdCwgc2luY2UgZGF0YSBvZnRlbiBuZWVkcyB0byBiZSBzcGVjaWZpY2FsbHkgY29waWVkIGludG8KKwl0aGUgYnVmZmVyLgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisJTWFueSBzcGVjaWFsaXplZCBlbGVtZW50cyBjcmVhdGUgYnVmZmVycyB0aGF0IHBvaW50IHRvIHNwZWNpYWwKKwltZW1vcnkuICBGb3IgZXhhbXBsZSwgdGhlIGZpbGVzcmMgZWxlbWVudCB1c3VhbGx5CisJbWFwcyBhIGZpbGUgaW50byB0aGUgYWRkcmVzcyBzcGFjZSBvZiB0aGUgYXBwbGljYXRpb24gKHVzaW5nIG1tYXAoKSksCisJYW5kIGNyZWF0ZXMgYnVmZmVycyB0aGF0IHBvaW50IGludG8gdGhhdCBhZGRyZXNzIHJhbmdlLiAgVGhlc2UKKwlidWZmZXJzIGNyZWF0ZWQgYnkgZmlsZXNyYyBhY3QgZXhhY3RseSBsaWtlIGdlbmVyaWMgYnVmZmVycywgZXhjZXB0CisJdGhhdCB0aGV5IGFyZSByZWFkLW9ubHkuICBUaGUgYnVmZmVyIGZyZWVpbmcgY29kZSBhdXRvbWF0aWNhbGx5CisJZGV0ZXJtaW5lcyB0aGUgY29ycmVjdCBtZXRob2Qgb2YgZnJlZWluZyB0aGUgdW5kZXJseWluZyBtZW1vcnkuCisJRG93bnN0cmVhbSBlbGVtZW50cyB0aGF0IHJlY2VpdmUgdGhlc2Uga2luZHMgb2YgYnVmZmVycyBkbyBub3QKKwluZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgdG8gaGFuZGxlIG9yIHVucmVmZXJlbmNlIGl0LgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIEFub3RoZXIgd2F5IGFuIGVsZW1lbnQgbWlnaHQgZ2V0IHNwZWNpYWxpemVkIGJ1ZmZlcnMgaXMgdG8KKwlyZXF1ZXN0IHRoZW0gZnJvbSBhIGRvd25zdHJlYW0gcGVlci4gIFRoZXNlIGFyZSBjYWxsZWQKKwlkb3duc3RyZWFtLWFsbG9jYXRlZCBidWZmZXJzLiAgRWxlbWVudHMgY2FuIGFzayBhCisJcGVlciBjb25uZWN0ZWQgdG8gYSBzb3VyY2UgcGFkIHRvIGNyZWF0ZSBhbiBlbXB0eSBidWZmZXIgb2YKKwlhIGdpdmVuIHNpemUuICBJZiBhIGRvd25zdHJlYW0gZWxlbWVudCBpcyBhYmxlIHRvIGNyZWF0ZSBhCisJc3BlY2lhbCBidWZmZXIgb2YgdGhlIGNvcnJlY3Qgc2l6ZSwgaXQgd2lsbCBkbyBzby4gIE90aGVyd2lzZQorCSZHU3RyZWFtZXI7IHdpbGwgYXV0b21hdGljYWxseSBjcmVhdGUgYSBnZW5lcmljIGJ1ZmZlciBpbnN0ZWFkLgorCVRoZSBlbGVtZW50IHRoYXQgcmVxdWVzdGVkIHRoZSBidWZmZXIgY2FuIHRoZW4gY29weSBkYXRhIGludG8KKwl0aGUgYnVmZmVyLCBhbmQgcHVzaCB0aGUgYnVmZmVyIHRvIHRoZSBzb3VyY2UgcGFkIGl0IHdhcworCWFsbG9jYXRlZCBmcm9tLgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIE1hbnkgc2luayBlbGVtZW50cyBoYXZlIGFjY2VsZXJhdGVkIG1ldGhvZHMgZm9yIGNvcHlpbmcgZGF0YQorCXRvIGhhcmR3YXJlLCBvciBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gaGFyZHdhcmUuICBJdCBpcyBjb21tb24KKwlmb3IgdGhlc2UgZWxlbWVudHMgdG8gYmUgYWJsZSB0byBjcmVhdGUgZG93bnN0cmVhbS1hbGxvY2F0ZWQKKwlidWZmZXJzIGZvciB0aGVpciB1cHN0cmVhbSBwZWVycy4gIE9uZSBzdWNoIGV4YW1wbGUgaXMKKwl4aW1hZ2VzaW5rLiAgSXQgY3JlYXRlcyBidWZmZXJzIHRoYXQgY29udGFpbiBYSW1hZ2VzLiAgVGh1cywKKwl3aGVuIGFuIHVwc3RyZWFtIHBlZXIgY29waWVzIGRhdGEgaW50byB0aGUgYnVmZmVyLCBpdCBpcyBjb3B5aW5nCisJZGlyZWN0bHkgaW50byB0aGUgWEltYWdlLCBlbmFibGluZyB4aW1hZ2VzaW5rIHRvIGRyYXcgdGhlCisJaW1hZ2UgZGlyZWN0bHkgdG8gdGhlIHNjcmVlbiBpbnN0ZWFkIG9mIGhhdmluZyB0byBjb3B5IGRhdGEKKwlpbnRvIGFuIFhJbWFnZSBmaXJzdC4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgICBGaWx0ZXIgZWxlbWVudHMgb2Z0ZW4gaGF2ZSB0aGUgb3Bwb3J0dW5pdHkgdG8gZWl0aGVyIHdvcmsgb24KKwlhIGJ1ZmZlciBpbi1wbGFjZSwgb3Igd29yayB3aGlsZSBjb3B5aW5nIGZyb20gYSBzb3VyY2UgYnVmZmVyCisJdG8gYSBkZXN0aW5hdGlvbiBidWZmZXIuICBJdCBpcyBvcHRpbWFsIHRvIGltcGxlbWVudCBib3RoCisJYWxnb3JpdGhtcywgc2luY2UgdGhlICZHU3RyZWFtZXI7IGZyYW1ld29yayBjYW4gY2hvb3NlIHRoZQorCWZhc3Rlc3QgYWxnb3JpdGhtIGFzIGFwcHJvcHJpYXRlLiAgTmF0dXJhbGx5LCB0aGlzIG9ubHkgbWFrZXMKKwlzZW5zZSBmb3Igc3RyaWN0IGZpbHRlcnMgLS0gZWxlbWVudHMgdGhhdCBoYXZlIGV4YWN0bHkgdGhlCisJc2FtZSBmb3JtYXQgb24gc291cmNlIGFuZCBzaW5rIHBhZHMuCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0Mj4KKyAgPC9zZWN0MT4KKworICA8IS0tICMjIyMjIyMjIyMjIyBzZWN0MSAjIyMjIyMjIyMjIyMjIC0tPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1iYXNpY3MtdHlwZXMiIHhyZWZsYWJlbD0iVHlwZXMgYW5kIFByb3BlcnRpZXMiPgorICAgIDx0aXRsZT5NaW1ldHlwZXMgYW5kIFByb3BlcnRpZXM8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgJkdTdHJlYW1lcjsgdXNlcyBhIHR5cGUgc3lzdGVtIHRvIGVuc3VyZSB0aGF0IHRoZSBkYXRhIHBhc3NlZCBiZXR3ZWVuCisgICAgICBlbGVtZW50cyBpcyBpbiBhIHJlY29nbml6ZWQgZm9ybWF0LiBUaGUgdHlwZSBzeXN0ZW0gaXMgYWxzbyBpbXBvcnRhbnQKKyAgICAgIGZvciBlbnN1cmluZyB0aGF0IHRoZSBwYXJhbWV0ZXJzIHJlcXVpcmVkIHRvIGZ1bGx5IHNwZWNpZnkgYSBmb3JtYXQgbWF0Y2gKKyAgICAgIHVwIGNvcnJlY3RseSB3aGVuIGxpbmtpbmcgcGFkcyBiZXR3ZWVuIGVsZW1lbnRzLiBFYWNoIGxpbmsgdGhhdCBpcworICAgICAgbWFkZSBiZXR3ZWVuIGVsZW1lbnRzIGhhcyBhIHNwZWNpZmllZCB0eXBlIGFuZCBvcHRpb25hbGx5IGEgc2V0IG9mCisgICAgICBwcm9wZXJ0aWVzLgorICAgIDwvcGFyYT4KKworICAgIDwhLS0gIyMjIyMjIyMjIyMjIHNlY3QyICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgICA8c2VjdDIgaWQ9InNlY3QyLXR5cGVzLWJhc2ljdHlwZXMiIHhyZWZsYWJlbD0iQmFzaWMgVHlwZXMiPgorICAgICAgPHRpdGxlPlRoZSBCYXNpYyBUeXBlczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgJkdTdHJlYW1lcjsgYWxyZWFkeSBzdXBwb3J0cyBtYW55IGJhc2ljIG1lZGlhIHR5cGVzLiBGb2xsb3dpbmcgaXMgYQorICAgICAgICB0YWJsZSBvZiBhIGZldyBvZiB0aGUgYmFzaWMgdHlwZXMgdXNlZCBmb3IgYnVmZmVycyBpbgorICAgICAgICAmR1N0cmVhbWVyOy4gVGhlIHRhYmxlIGNvbnRhaW5zIHRoZSBuYW1lICgibWltZSB0eXBlIikgYW5kIGEKKyAgICAgICAgZGVzY3JpcHRpb24gb2YgdGhlIHR5cGUsIHRoZSBwcm9wZXJ0aWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdHlwZSwgYW5kCisgICAgICAgIHRoZSBtZWFuaW5nIG9mIGVhY2ggcHJvcGVydHkuIEEgZnVsbCBsaXN0IG9mIHN1cHBvcnRlZCB0eXBlcyBpcworICAgICAgICBpbmNsdWRlZCBpbiA8eHJlZiBsaW5rZW5kPSJzZWN0aW9uLXR5cGVzLWRlZmluaXRpb25zIi8+LgorICAgICAgPC9wYXJhPgorCisgICAgICA8dGFibGUgZnJhbWU9ImFsbCIgaWQ9InRhYmxlLWJhc2ljdHlwZXMiIHhyZWZsYWJlbD0iVGFibGUgb2YgRXhhbXBsZSBUeXBlcyI+CisgICAgICAgIDx0aXRsZT5UYWJsZSBvZiBFeGFtcGxlIFR5cGVzPC90aXRsZT4KKyAgICAgICAgPHRncm91cCBjb2xzPSI2IiBhbGlnbj0ibGVmdCIgY29sc2VwPSIxIiByb3dzZXA9IjEiPgorCisgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5Pk1pbWUgVHlwZTwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+RGVzY3JpcHRpb248L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PlByb3BlcnR5PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5Qcm9wZXJ0eSBUeXBlPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5Qcm9wZXJ0eSBWYWx1ZXM8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PlByb3BlcnR5IERlc2NyaXB0aW9uPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgPC90aGVhZD4KKworICAgICAgICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCisgICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeSBtb3Jlcm93cz0iMSI+YXVkaW8vKjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnkgbW9yZXJvd3M9IjEiPgorICAgICAgICAgICAgICA8ZW1waGFzaXM+QWxsIGF1ZGlvIHR5cGVzPC9lbXBoYXNpcz4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+cmF0ZTwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+Z3JlYXRlciB0aGFuIDA8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBUaGUgc2FtcGxlIHJhdGUgb2YgdGhlIGRhdGEsIGluIHNhbXBsZXMgKHBlciBjaGFubmVsKSBwZXIgc2Vjb25kLgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5PmNoYW5uZWxzPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5ncmVhdGVyIHRoYW4gMDwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgY2hhbm5lbHMgb2YgYXVkaW8gZGF0YS4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisKKyAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgICAgICAgICA8cm93PgorICAgICAgICAgICAgPGVudHJ5IG1vcmVyb3dzPSIzIj5hdWRpby94LXJhdy1pbnQ8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5IG1vcmVyb3dzPSIzIj4KKyAgICAgICAgICAgICAgVW5zdHJ1Y3R1cmVkIGFuZCB1bmNvbXByZXNzZWQgcmF3IGludGVnZXIgYXVkaW8gZGF0YS4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+ZW5kaWFubmVzczwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+R19CSUdfRU5ESUFOICg0MzIxKSBvciBHX0xJVFRMRV9FTkRJQU4gKDEyMzQpPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgVGhlIG9yZGVyIG9mIGJ5dGVzIGluIGEgc2FtcGxlLiBUaGUgdmFsdWUgR19MSVRUTEVfRU5ESUFOICgxMjM0KQorICAgICAgICAgICAgICBtZWFucyA8cXVvdGU+bGl0dGxlLWVuZGlhbjwvcXVvdGU+IChieXRlLW9yZGVyIGlzIDxxdW90ZT5sZWFzdAorICAgICAgICAgICAgICBzaWduaWZpY2FudCBieXRlIGZpcnN0PC9xdW90ZT4pLiBUaGUgdmFsdWUgR19CSUdfRU5ESUFOICg0MzIxKQorICAgICAgICAgICAgICBtZWFucyA8cXVvdGU+YmlnLWVuZGlhbjwvcXVvdGU+IChieXRlIG9yZGVyIGlzIDxxdW90ZT5tb3N0CisgICAgICAgICAgICAgIHNpZ25pZmljYW50IGJ5dGUgZmlyc3Q8L3F1b3RlPikuCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnk+c2lnbmVkPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5ib29sZWFuPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5UUlVFIG9yIEZBTFNFPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgV2hldGhlciB0aGUgdmFsdWVzIG9mIHRoZSBpbnRlZ2VyIHNhbXBsZXMgYXJlIHNpZ25lZCBvciBub3QuCisgICAgICAgICAgICAgIFNpZ25lZCBzYW1wbGVzIHVzZSBvbmUgYml0IHRvIGluZGljYXRlIHNpZ24gKG5lZ2F0aXZlIG9yCisgICAgICAgICAgICAgIHBvc2l0aXZlKSBvZiB0aGUgdmFsdWUuIFVuc2lnbmVkIHNhbXBsZXMgYXJlIGFsd2F5cyBwb3NpdGl2ZS4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT53aWR0aDwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+Z3JlYXRlciB0aGFuIDA8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBOdW1iZXIgb2YgYml0cyBhbGxvY2F0ZWQgcGVyIHNhbXBsZS4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT5kZXB0aDwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+Z3JlYXRlciB0aGFuIDA8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIGJpdHMgdXNlZCBwZXIgc2FtcGxlLiBUaGlzIG11c3QgYmUgbGVzcyB0aGFuIG9yCisgICAgICAgICAgICAgIGVxdWFsIHRvIHRoZSB3aWR0aDogSWYgdGhlIGRlcHRoIGlzIGxlc3MgdGhhbiB0aGUgd2lkdGgsIHRoZQorICAgICAgICAgICAgICBsb3cgYml0cyBhcmUgYXNzdW1lZCB0byBiZSB0aGUgb25lcyB1c2VkLiBGb3IgZXhhbXBsZSwgYSB3aWR0aAorICAgICAgICAgICAgICBvZiAzMiBhbmQgYSBkZXB0aCBvZiAyNCBtZWFucyB0aGF0IGVhY2ggc2FtcGxlIGlzIHN0b3JlZCBpbiBhCisgICAgICAgICAgICAgIDMyIGJpdCB3b3JkLCBidXQgb25seSB0aGUgbG93IDI0IGJpdHMgYXJlIGFjdHVhbGx5IHVzZWQuCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorCisgICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgorCisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeSBtb3Jlcm93cz0iMyI+YXVkaW8vbXBlZzwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnkgbW9yZXJvd3M9IjMiPgorICAgICAgICAgICAgICBBdWRpbyBkYXRhIGNvbXByZXNzZWQgdXNpbmcgdGhlIE1QRUcgYXVkaW8gZW5jb2Rpbmcgc2NoZW1lLgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5tcGVndmVyc2lvbjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+MSwgMiBvciA0PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgVGhlIE1QRUctdmVyc2lvbiB1c2VkIGZvciBlbmNvZGluZyB0aGUgZGF0YS4gVGhlIHZhbHVlIDEgcmVmZXJzCisgICAgICAgICAgICAgIHRvIE1QRUctMSwgLTIgYW5kIC0yLjUgbGF5ZXIgMSwgMiBvciAzLiBUaGUgdmFsdWVzIDIgYW5kIDQgcmVmZXIKKyAgICAgICAgICAgICAgdG8gdGhlIE1QRUctQUFDIGF1ZGlvIGVuY29kaW5nIHNjaGVtZXMuCisgICAgICAgICAgICA8L2VudHJ5PgorICAgICAgICAgIDwvcm93PgorICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnk+ZnJhbWVkPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5ib29sZWFuPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4wIG9yIDE8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICBBIHRydWUgdmFsdWUgaW5kaWNhdGVzIHRoYXQgZWFjaCBidWZmZXIgY29udGFpbnMgZXhhY3RseSBvbmUKKyAgICAgICAgICAgICAgZnJhbWUuIEEgZmFsc2UgdmFsdWUgaW5kaWNhdGVzIHRoYXQgZnJhbWVzIGFuZCBidWZmZXJzIGRvIG5vdAorICAgICAgICAgICAgICBuZWNlc3NhcmlseSBtYXRjaCB1cC4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT5sYXllcjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+MSwgMiwgb3IgMzwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIFRoZSBjb21wcmVzc2lvbiBzY2hlbWUgbGF5ZXIgdXNlZCB0byBjb21wcmVzcyB0aGUgZGF0YQorICAgICAgICAgICAgICA8ZW1waGFzaXM+KG9ubHkgaWYgbXBlZ3ZlcnNpb249MSk8L2VtcGhhc2lzPi4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgIDxlbnRyeT5iaXRyYXRlPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT5ncmVhdGVyIHRoYW4gMDwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+CisgICAgICAgICAgICAgIFRoZSBiaXRyYXRlLCBpbiBiaXRzIHBlciBzZWNvbmQuIEZvciBWQlIgKHZhcmlhYmxlIGJpdHJhdGUpCisgICAgICAgICAgICAgIE1QRUcgZGF0YSwgdGhpcyBpcyB0aGUgYXZlcmFnZSBiaXRyYXRlLgorICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICA8L3Jvdz4KKworICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KKworICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICA8ZW50cnk+YXVkaW8veC12b3JiaXM8L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PlZvcmJpcyBhdWRpbyBkYXRhPC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSBubyBzcGVjaWZpYyBwcm9wZXJ0aWVzIGRlZmluZWQgZm9yIHRoaXMgdHlwZS4KKyAgICAgICAgICAgIDwvZW50cnk+CisgICAgICAgICAgPC9yb3c+CisgICAgICAgIDwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICAgIDwvdGFibGU+CisgICAgPC9zZWN0Mj4KKyAgPC9zZWN0MT4KKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvcHdnL2ludHJvLXByZWZhY2UueG1sIGIvZG9jcy9wd2cvaW50cm8tcHJlZmFjZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZiODY4YwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvcHdnL2ludHJvLXByZWZhY2UueG1sCkBAIC0wLDAgKzEsMjk4IEBACisKKzwhLS0gIyMjIyMjIyMjIyMjIGNoYXB0ZXIgIyMjIyMjIyMjIyMjIyAtLT4KKworPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItaW50cm8tcHJlZmFjZSIgeHJlZmxhYmVsPSJQcmVmYWNlIj4KKyAgPHRpdGxlPlByZWZhY2U8L3RpdGxlPgorCisgIDwhLS0gIyMjIyMjIyMjIyMjIHNlY3QxICMjIyMjIyMjIyMjIyMgLS0+CisgIAorICA8c2VjdDEgaWQ9InNlY3Rpb24taW50cm8td2hhdCI+PCEtLSBzeW5jaHJvbml6ZSB3aXRoIEFwcERldk1hbiAtLT4KKyAgICA8dGl0bGU+V2hhdCBpcyAmR1N0cmVhbWVyOz88L3RpdGxlPgorICAgIDxwYXJhPiAKKyAgICAgICZHU3RyZWFtZXI7IGlzIGEgZnJhbWV3b3JrIGZvciBjcmVhdGluZyBzdHJlYW1pbmcgbWVkaWEgYXBwbGljYXRpb25zLgorICAgICAgVGhlIGZ1bmRhbWVudGFsIGRlc2lnbiBjb21lcyBmcm9tIHRoZSB2aWRlbyBwaXBlbGluZSBhdCBPcmVnb24gR3JhZHVhdGUKKyAgICAgIEluc3RpdHV0ZSwgYXMgd2VsbCBhcyBzb21lIGlkZWFzIGZyb20gRGlyZWN0U2hvdy4gIAorICAgIDwvcGFyYT4KKyAKKyAgICA8cGFyYT4KKyAgICAgICZHU3RyZWFtZXI7J3MgZGV2ZWxvcG1lbnQgZnJhbWV3b3JrIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHdyaXRlIGFueQorICAgICAgdHlwZSBvZiBzdHJlYW1pbmcgbXVsdGltZWRpYSBhcHBsaWNhdGlvbi4gVGhlICZHU3RyZWFtZXI7IGZyYW1ld29yaworICAgICAgaXMgZGVzaWduZWQgdG8gbWFrZSBpdCBlYXN5IHRvIHdyaXRlIGFwcGxpY2F0aW9ucyB0aGF0IGhhbmRsZSBhdWRpbworICAgICAgb3IgdmlkZW8gb3IgYm90aC4gSXQgaXNuJ3QgcmVzdHJpY3RlZCB0byBhdWRpbyBhbmQgdmlkZW8sIGFuZCBjYW4KKyAgICAgIHByb2Nlc3MgYW55IGtpbmQgb2YgZGF0YSBmbG93LgorICAgICAgVGhlIHBpcGVsaW5lIGRlc2lnbiBpcyBtYWRlIHRvIGhhdmUgbGl0dGxlIG92ZXJoZWFkIGFib3ZlIHdoYXQgdGhlCisgICAgICBhcHBsaWVkIGZpbHRlcnMgaW5kdWNlLiBUaGlzIG1ha2VzICZHU3RyZWFtZXI7IGEgZ29vZCBmcmFtZXdvcmsgZm9yCisgICAgICBkZXNpZ25pbmcgZXZlbiBoaWdoLWVuZCBhdWRpbyBhcHBsaWNhdGlvbnMgd2hpY2ggcHV0IGhpZ2ggZGVtYW5kcyBvbgorICAgICAgbGF0ZW5jeS4gCisgICAgPC9wYXJhPiAKKworICAgIDxwYXJhPgorICAgICAgT25lIG9mIHRoZSBtb3N0IG9idmlvdXMgdXNlcyBvZiAmR1N0cmVhbWVyOyBpcyB1c2luZyBpdCB0byBidWlsZAorICAgICAgYSBtZWRpYSBwbGF5ZXIuICZHU3RyZWFtZXI7IGFscmVhZHkgaW5jbHVkZXMgY29tcG9uZW50cyBmb3IgYnVpbGRpbmcgYQorICAgICAgbWVkaWEgcGxheWVyIHRoYXQgY2FuIHN1cHBvcnQgYSB2ZXJ5IHdpZGUgdmFyaWV0eSBvZiBmb3JtYXRzLCBpbmNsdWRpbmcKKyAgICAgIE1QMywgT2dnL1ZvcmJpcywgTVBFRy0xLzIsIEFWSSwgUXVpY2t0aW1lLCBtb2QsIGFuZCBtb3JlLiAmR1N0cmVhbWVyOywKKyAgICAgIGhvd2V2ZXIsIGlzIG11Y2ggbW9yZSB0aGFuIGp1c3QgYW5vdGhlciBtZWRpYSBwbGF5ZXIuIEl0cyBtYWluIGFkdmFudGFnZXMKKyAgICAgIGFyZSB0aGF0IHRoZSBwbHVnZ2FibGUgY29tcG9uZW50cyBjYW4gYmUgbWl4ZWQgYW5kIG1hdGNoZWQgaW50byBhcmJpdHJhcnkKKyAgICAgIHBpcGVsaW5lcyBzbyB0aGF0IGl0J3MgcG9zc2libGUgdG8gd3JpdGUgYSBmdWxsLWZsZWRnZWQgdmlkZW8gb3IgYXVkaW8KKyAgICAgIGVkaXRpbmcgYXBwbGljYXRpb24uCisgICAgPC9wYXJhPiAKKworICAgIDxwYXJhPgorICAgICAgVGhlIGZyYW1ld29yayBpcyBiYXNlZCBvbiBwbHVnaW5zIHRoYXQgd2lsbCBwcm92aWRlIHRoZSB2YXJpb3VzIGNvZGVjIAorICAgICAgYW5kIG90aGVyIGZ1bmN0aW9uYWxpdHkuIFRoZSBwbHVnaW5zIGNhbiBiZSBsaW5rZWQgYW5kIGFycmFuZ2VkIGluCisgICAgICBhIHBpcGVsaW5lLiBUaGlzIHBpcGVsaW5lIGRlZmluZXMgdGhlIGZsb3cgb2YgdGhlIGRhdGEuIFBpcGVsaW5lcyBjYW4gCisgICAgICBhbHNvIGJlIGVkaXRlZCB3aXRoIGEgR1VJIGVkaXRvciBhbmQgc2F2ZWQgYXMgWE1MIHNvIHRoYXQgcGlwZWxpbmUKKyAgICAgIGxpYnJhcmllcyBjYW4gYmUgbWFkZSB3aXRoIGEgbWluaW11bSBvZiBlZmZvcnQuCisgICAgPC9wYXJhPiAKKworICAgIDxwYXJhPgorICAgICAgVGhlICZHU3RyZWFtZXI7IGNvcmUgZnVuY3Rpb24gaXMgdG8gcHJvdmlkZSBhIGZyYW1ld29yayBmb3IgcGx1Z2lucywKKyAgICAgIGRhdGEgZmxvdyBhbmQgbWVkaWEgdHlwZSBoYW5kbGluZy9uZWdvdGlhdGlvbi4gSXQgYWxzbyBwcm92aWRlcyBhbgorICAgICAgQVBJIHRvIHdyaXRlIGFwcGxpY2F0aW9ucyB1c2luZyB0aGUgdmFyaW91cyBwbHVnaW5zLgorICAgIDwvcGFyYT4gCisgIDwvc2VjdDE+CisKKyAgPCEtLSAjIyMjIyMjIyMjIyMgc2VjdDEgIyMjIyMjIyMjIyMjIyAtLT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tcHJlZmFjZS13aG8iIHhyZWZsYWJlbD0iV2hvIFNob3VsZCBSZWFkIFRoaXMgR3VpZGU/Ij4KKyAgICA8dGl0bGU+V2hvIFNob3VsZCBSZWFkIFRoaXMgR3VpZGU/PC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFRoaXMgZ3VpZGUgZXhwbGFpbnMgaG93IHRvIHdyaXRlIG5ldyBtb2R1bGVzIGZvciAmR1N0cmVhbWVyOy4gVGhlIGd1aWRlIGlzCisgICAgICByZWxldmFudCB0byBzZXZlcmFsIGdyb3VwcyBvZiBwZW9wbGU6CisgICAgPC9wYXJhPgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEFueW9uZSB3aG8gd2FudHMgdG8gYWRkIHN1cHBvcnQgZm9yIG5ldyB3YXlzIG9mIHByb2Nlc3NpbmcgZGF0YSBpbgorICAgICAgICAgICZHU3RyZWFtZXI7LiBGb3IgZXhhbXBsZSwgYSBwZXJzb24gaW4gdGhpcyBncm91cCBtaWdodCB3YW50IHRvIGNyZWF0ZQorICAgICAgICAgIGEgbmV3IGRhdGEgZm9ybWF0IGNvbnZlcnRlciwgYSBuZXcgdmlzdWFsaXphdGlvbiB0b29sLCBvciBhIG5ldworICAgICAgICAgIGRlY29kZXIgb3IgZW5jb2Rlci4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQW55b25lIHdobyB3YW50cyB0byBhZGQgc3VwcG9ydCBmb3IgbmV3IGlucHV0IGFuZCBvdXRwdXQgZGV2aWNlcy4gRm9yCisgICAgICAgICAgZXhhbXBsZSwgcGVvcGxlIGluIHRoaXMgZ3JvdXAgbWlnaHQgd2FudCB0byBhZGQgdGhlIGFiaWxpdHkgdG8gd3JpdGUKKyAgICAgICAgICB0byBhIG5ldyB2aWRlbyBvdXRwdXQgc3lzdGVtIG9yIHJlYWQgZGF0YSBmcm9tIGEgZGlnaXRhbCBjYW1lcmEgb3IKKyAgICAgICAgICBzcGVjaWFsIG1pY3JvcGhvbmUuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEFueW9uZSB3aG8gd2FudHMgdG8gZXh0ZW5kICZHU3RyZWFtZXI7IGluIGFueSB3YXkuIFlvdSBuZWVkIHRvIGhhdmUgYW4KKyAgICAgICAgICB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgcGx1Z2luIHN5c3RlbSB3b3JrcyBiZWZvcmUgeW91IGNhbiB1bmRlcnN0YW5kCisgICAgICAgICAgdGhlIGNvbnN0cmFpbnRzIHRoYXQgdGhlIHBsdWdpbiBzeXN0ZW0gcGxhY2VzIG9uIHRoZSByZXN0IG9mIHRoZSBjb2RlLgorICAgICAgICAgIEFsc28sIHlvdSBtaWdodCBiZSBzdXJwcmlzZWQgYWZ0ZXIgcmVhZGluZyB0aGlzIGF0IGhvdyBtdWNoIGNhbiBiZQorICAgICAgICAgIGRvbmUgd2l0aCBwbHVnaW5zLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDxwYXJhPgorICAgICAgVGhpcyBndWlkZSBpcyBub3QgcmVsZXZhbnQgdG8geW91IGlmIHlvdSBvbmx5IHdhbnQgdG8gdXNlIHRoZSBleGlzdGluZworICAgICAgZnVuY3Rpb25hbGl0eSBvZiAmR1N0cmVhbWVyOywgb3IgaWYgeW91IGp1c3Qgd2FudCB0byB1c2UgYW4gYXBwbGljYXRpb24KKyAgICAgIHRoYXQgdXNlcyAmR1N0cmVhbWVyOy4gSWYgeW91IGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdXNpbmcgZXhpc3RpbmcKKyAgICAgIHBsdWdpbnMgdG8gd3JpdGUgYSBuZXcgYXBwbGljYXRpb24gLSBhbmQgdGhlcmUgYXJlIHF1aXRlIGEgbG90IG9mCisgICAgICBwbHVnaW5zIGFscmVhZHkgLSB5b3UgbWlnaHQgd2FudCB0byBjaGVjayB0aGUgJkdzdEFwcERldk1hbjsuIElmIHlvdQorICAgICAgYXJlIGp1c3QgdHJ5aW5nIHRvIGdldCBoZWxwIHdpdGggYSAmR1N0cmVhbWVyOyBhcHBsaWNhdGlvbiwgdGhlbiB5b3UKKyAgICAgIHNob3VsZCBjaGVjayB3aXRoIHRoZSB1c2VyIG1hbnVhbCBmb3IgdGhhdCBwYXJ0aWN1bGFyIGFwcGxpY2F0aW9uLgorICAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKworICA8IS0tICMjIyMjIyMjIyMjIyBzZWN0MSAjIyMjIyMjIyMjIyMjIC0tPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1wcmVmYWNlLXJlYWRpbmciIHhyZWZsYWJlbD0iUHJlbGltaW5hcnkgUmVhZGluZyI+CisgICAgPHRpdGxlPlByZWxpbWluYXJ5IFJlYWRpbmc8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgVGhpcyBndWlkZSBhc3N1bWVzIHRoYXQgeW91IGFyZSBzb21ld2hhdCBmYW1pbGlhciB3aXRoIHRoZSBiYXNpYyB3b3JraW5ncworICAgICAgb2YgJkdTdHJlYW1lcjsuIEZvciBhIGdlbnRsZSBpbnRyb2R1Y3Rpb24gdG8gcHJvZ3JhbW1pbmcgY29uY2VwdHMgaW4KKyAgICAgICZHU3RyZWFtZXI7LCB5b3UgbWF5IHdpc2ggdG8gcmVhZCB0aGUgJkdzdEFwcERldk1hbjsgZmlyc3QuCisgICAgICBBbHNvIGNoZWNrIG91dCB0aGUgb3RoZXIgZG9jdW1lbnRhdGlvbiBhdmFpbGFibGUgb24gdGhlIDx1bGluayB0eXBlPSJodHRwIgorICAgICAgdXJsPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kb2N1bWVudGF0aW9uLyI+JkdTdHJlYW1lcjsgd2ViIHNpdGU8L3VsaW5rPi4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+PCEtLSBzeW5jaHJvbml6ZSB3aXRoIEFwcERldk1hbiAtLT4KKyAgICAgIEluIG9yZGVyIHRvIHVuZGVyc3RhbmQgdGhpcyBtYW51YWwsIHlvdSB3aWxsIG5lZWQgdG8gaGF2ZSBhIGJhc2ljCisgICAgICB1bmRlcnN0YW5kaW5nIG9mIHRoZSBDIGxhbmd1YWdlLgorICAgICAgU2luY2UgJkdTdHJlYW1lcjsgYWRoZXJlcyB0byB0aGUgR09iamVjdCBwcm9ncmFtbWluZyBtb2RlbCwgdGhpcyBndWlkZQorICAgICAgYWxzbyBhc3N1bWVzIHRoYXQgeW91IHVuZGVyc3RhbmQgdGhlIGJhc2ljcyBvZiA8dWxpbmsgdHlwZT0iaHR0cCIKKyAgICAgIHVybD0iaHR0cDovL2RldmVsb3Blci5nbm9tZS5vcmcvZG9jL0FQSS8yLjAvZ29iamVjdC9pbmRleC5odG1sIj5HT2JqZWN0PC91bGluaz4KKyAgICAgIHByb2dyYW1taW5nLiAKKyAgICAgIFlvdSBtYXkgYWxzbyB3YW50IHRvIGhhdmUgYSBsb29rCisgICAgICBhdCBFcmljIEhhcmxvdydzIGJvb2sgPGVtcGhhc2lzPkRldmVsb3BpbmcgTGludXggQXBwbGljYXRpb25zIHdpdGgKKyAgICAgIEdUSysgYW5kIEdESzwvZW1waGFzaXM+LgorICAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKworICA8IS0tICMjIyMjIyMjIyMjIyBzZWN0MSAjIyMjIyMjIyMjIyMjIC0tPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1wcmVmYWNlLXN0cnVjdHVyZSIgeHJlZmxhYmVsPSJTdHJ1Y3R1cmUgb2YgVGhpcyBHdWlkZSI+CisgICAgPHRpdGxlPlN0cnVjdHVyZSBvZiBUaGlzIEd1aWRlPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFRvIGhlbHAgeW91IG5hdmlnYXRlIHRocm91Z2ggdGhpcyBndWlkZSwgaXQgaXMgZGl2aWRlZCBpbnRvIHNldmVyYWwgbGFyZ2UKKyAgICAgIHBhcnRzLiBFYWNoIHBhcnQgYWRkcmVzc2VzIGEgcGFydGljdWxhciBicm9hZCB0b3BpYyBjb25jZXJuaW5nICZHU3RyZWFtZXI7CisgICAgICBwbHVnaW4gZGV2ZWxvcG1lbnQuIFRoZSBwYXJ0cyBvZiB0aGlzIGd1aWRlIGFyZSBsYWlkIG91dCBpbiB0aGUgZm9sbG93aW5nCisgICAgICBvcmRlcjoKKyAgICA8L3BhcmE+CisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPHhyZWYgbGlua2VuZD0icGFydC1idWlsZGluZyIvPiAtCisgICAgICAgICAgSW50cm9kdWN0aW9uIHRvIHRoZSBzdHJ1Y3R1cmUgb2YgYSBwbHVnaW4sIHVzaW5nIGFuIGV4YW1wbGUgYXVkaW8KKyAgICAgICAgICBmaWx0ZXIgZm9yIGlsbHVzdHJhdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIHBhcnQgY292ZXJzIGFsbCB0aGUgYmFzaWMgc3RlcHMgeW91IGdlbmVyYWxseSBuZWVkIHRvIHBlcmZvcm0KKyAgICAgICAgICB0byBidWlsZCBhIHBsdWdpbiwgc3VjaCBhcyByZWdpc3RlcmluZyB0aGUgZWxlbWVudCB3aXRoICZHU3RyZWFtZXI7CisgICAgICAgICAgYW5kIHNldHRpbmcgdXAgdGhlIGJhc2ljcyBzbyBpdCBjYW4gcmVjZWl2ZSBkYXRhIGZyb20gYW5kIHNlbmQgZGF0YQorICAgICAgICAgIHRvIG5laWdoYm91ciBlbGVtZW50cy4gVGhlIGRpc2N1c3Npb24gYmVnaW5zIGJ5IGdpdmluZyBleGFtcGxlcyBvZgorICAgICAgICAgIGdlbmVyYXRpbmcgdGhlIGJhc2ljIHN0cnVjdHVyZXMgYW5kIHJlZ2lzdGVyaW5nIGFuIGVsZW1lbnQgaW4KKyAgICAgICAgICA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLWJ1aWxkaW5nLWJvaWxlciIvPi4gVGhlbiwgeW91IHdpbGwgbGVhcm4gaG93CisgICAgICAgICAgdG8gd3JpdGUgdGhlIGNvZGUgdG8gZ2V0IGEgYmFzaWMgZmlsdGVyIHBsdWdpbiB3b3JraW5nIGluIDx4cmVmCisgICAgICAgICAgbGlua2VuZD0iY2hhcHRlci1idWlsZGluZy1wYWRzIi8+LCA8eHJlZgorICAgICAgICAgIGxpbmtlbmQ9ImNoYXB0ZXItYnVpbGRpbmctY2hhaW5mbiIvPiBhbmQgPHhyZWYKKyAgICAgICAgICBsaW5rZW5kPSJjaGFwdGVyLXN0YXRlbWFuYWdlLXN0YXRlcyIvPi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBZnRlciB0aGF0LCB3ZSB3aWxsIHNob3cgc29tZSBvZiB0aGUgR09iamVjdCBjb25jZXB0cyBvbiBob3cgdG8KKyAgICAgICAgICBtYWtlIGFuIGVsZW1lbnQgY29uZmlndXJhYmxlIGZvciBhcHBsaWNhdGlvbnMgYW5kIGhvdyB0byBkbworICAgICAgICAgIGFwcGxpY2F0aW9uLWVsZW1lbnQgaW50ZXJhY3Rpb24gaW4KKyAgICAgICAgICA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLWJ1aWxkaW5nLWFyZ3MiLz4gYW5kIDx4cmVmCisgICAgICAgICAgbGlua2VuZD0iY2hhcHRlci1idWlsZGluZy1zaWduYWxzIi8+LiBOZXh0LCB5b3Ugd2lsbCBsZWFybiB0byBidWlsZAorICAgICAgICAgIGEgcXVpY2sgdGVzdCBhcHBsaWNhdGlvbiB0byB0ZXN0IGFsbCB0aGF0IHlvdSd2ZSBqdXN0IGxlYXJuZWQgaW4KKyAgICAgICAgICA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLWJ1aWxkaW5nLXRlc3RhcHAiLz4uIFdlIHdpbGwganVzdCB0b3VjaCB1cG9uCisgICAgICAgICAgYmFzaWNzIGhlcmUuIEZvciBmdWxsLWJsb3duIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50LCB5b3Ugc2hvdWxkCisgICAgICAgICAgbG9vayBhdCA8dWxpbmsgdHlwZT0iaHR0cCIKKyAgICAgICAgICB1cmw9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL21hbnVhbC9odG1sL2luZGV4Lmh0bWwiPnRoZQorICAgICAgICAgIEFwcGxpY2F0aW9uIERldmVsb3BtZW50IE1hbnVhbDwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8eHJlZiBsaW5rZW5kPSJwYXJ0LWFkdmFuY2VkIi8+IC0KKyAgICAgICAgICBJbmZvcm1hdGlvbiBvbiBhZHZhbmNlZCBmZWF0dXJlcyBvZiAmR1N0cmVhbWVyOyBwbHVnaW4gZGV2ZWxvcG1lbnQuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQWZ0ZXIgbGVhcm5pbmcgYWJvdXQgdGhlIGJhc2ljIHN0ZXBzLCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gY3JlYXRlIGEKKyAgICAgICAgICBmdW5jdGlvbmFsIGF1ZGlvIG9yIHZpZGVvIGZpbHRlciBwbHVnaW4gd2l0aCBzb21lIG5pY2UgZmVhdHVyZXMuCisgICAgICAgICAgSG93ZXZlciwgJkdTdHJlYW1lcjsgb2ZmZXJzIG1vcmUgZm9yIHBsdWdpbiB3cml0ZXJzLiBUaGlzIHBhcnQgb2YgdGhlCisgICAgICAgICAgZ3VpZGUgaW5jbHVkZXMgY2hhcHRlcnMgb24gbW9yZSBhZHZhbmNlZCB0b3BpY3MsIHN1Y2ggYXMgc2NoZWR1bGluZywKKyAgICAgICAgICBtZWRpYSB0eXBlIGRlZmluaXRpb25zIGluICZHU3RyZWFtZXI7LCBjbG9ja3MsIGludGVyZmFjZXMgYW5kCisgICAgICAgICAgdGFnZ2luZy4gU2luY2UgdGhlc2UgZmVhdHVyZXMgYXJlIHB1cnBvc2Utc3BlY2lmaWMsIHlvdSBjYW4gcmVhZCB0aGVtCisgICAgICAgICAgaW4gYW55IG9yZGVyLCBtb3N0IG9mIHRoZW0gZG9uJ3QgcmVxdWlyZSBrbm93bGVkZ2UgZnJvbSBvdGhlcgorICAgICAgICAgIHNlY3Rpb25zLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBmaXJzdCBjaGFwdGVyLCBuYW1lZCA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLXNjaGVkdWxpbmciLz4sCisgICAgICAgICAgd2lsbCBleHBsYWluIHNvbWUgb2YgdGhlIGJhc2ljcyBvZiBlbGVtZW50IHNjaGVkdWxpbmcuIEl0IGlzIG5vdAorICAgICAgICAgIHZlcnkgaW4tZGVwdGgsIGJ1dCBpcyBtb3N0bHkgc29tZSBzb3J0IG9mIGFuIGludHJvZHVjdGlvbiBvbiB3aHkKKyAgICAgICAgICBvdGhlciB0aGluZ3Mgd29yayBhcyB0aGV5IGRvLiBSZWFkIHRoaXMgY2hhcHRlciBpZiB5b3UncmUgaW50ZXJlc3RlZAorICAgICAgICAgIGluICZHU3RyZWFtZXI7IGludGVybmFscy4gTmV4dCwgd2Ugd2lsbCBhcHBseSB0aGlzIGtub3dsZWRnZSBhbmQKKyAgICAgICAgICBkaXNjdXNzIGFub3RoZXIgdHlwZSBvZiBkYXRhIHRyYW5zbWlzc2lvbiB0aGFuIHdoYXQgeW91IGxlYXJuZWQgaW4KKyAgICAgICAgICA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLWJ1aWxkaW5nLWNoYWluZm4iLz46IDx4cmVmCisgICAgICAgICAgbGlua2VuZD0iY2hhcHRlci1zY2hlZHVsaW5nIi8+LiBMb29wLWJhc2VkIGVsZW1lbnRzIHdpbGwgZ2l2ZQorICAgICAgICAgIHlvdSBtb3JlIGNvbnRyb2wgb3ZlciBpbnB1dCByYXRlLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHdyaXRpbmcsIGZvcgorICAgICAgICAgIGV4YW1wbGUsIG11eGVycyBvciBkZW11eGVycy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBOZXh0LCB3ZSB3aWxsIGRpc2N1c3MgbWVkaWEgaWRlbnRpZmljYXRpb24gaW4gJkdTdHJlYW1lcjsgaW4gPHhyZWYKKyAgICAgICAgICBsaW5rZW5kPSJjaGFwdGVyLWJ1aWxkaW5nLXR5cGVzIi8+LiBZb3Ugd2lsbCBsZWFybiBob3cgdG8gZGVmaW5lCisgICAgICAgICAgbmV3IG1lZGlhIHR5cGVzIGFuZCBnZXQgdG8ga25vdyBhIGxpc3Qgb2Ygc3RhbmRhcmQgbWVkaWEgdHlwZXMKKyAgICAgICAgICBkZWZpbmVkIGluICZHU3RyZWFtZXI7LgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEluIHRoZSBuZXh0IGNoYXB0ZXIsIHlvdSB3aWxsIGxlYXJuIHRoZSBjb25jZXB0IG9mIHJlcXVlc3QtIGFuZAorICAgICAgICAgIHNvbWV0aW1lcy1wYWRzLCB3aGljaCBhcmUgcGFkcyB0aGF0IGFyZSBjcmVhdGVkIGR5bmFtaWNhbGx5LCBlaXRoZXIKKyAgICAgICAgICBiZWNhdXNlIHRoZSBhcHBsaWNhdGlvbiBhc2tlZCBmb3IgaXQgKHJlcXVlc3QpIG9yIGJlY2F1c2UgdGhlIG1lZGlhCisgICAgICAgICAgc3RyZWFtIHJlcXVpcmVzIGl0IChzb21ldGltZXMpLiBUaGlzIHdpbGwgYmUgaW4gPHhyZWYKKyAgICAgICAgICBsaW5rZW5kPSJjaGFwdGVyLWFkdmFuY2VkLXJlcXVlc3QiLz4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIG5leHQgY2hhcHRlciwgPHhyZWYgbGlua2VuZD0iY2hhcHRlci1hZHZhbmNlZC1jbG9jayIvPiwgd2lsbAorICAgICAgICAgIGV4cGxhaW4gdGhlIGNvbmNlcHQgb2YgY2xvY2tzIGluICZHU3RyZWFtZXI7LiBZb3UgbmVlZCB0aGlzCisgICAgICAgICAgaW5mb3JtYXRpb24gd2hlbiB5b3Ugd2FudCB0byBrbm93IGhvdyBlbGVtZW50cyBzaG91bGQgYWNoaWV2ZQorICAgICAgICAgIGF1ZGlvL3ZpZGVvIHN5bmNocm9uaXphdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgbmV4dCBmZXcgY2hhcHRlcnMgd2lsbCBkaXNjdXNzIGFkdmFuY2VkIHdheXMgb2YgZG9pbmcKKyAgICAgICAgICBhcHBsaWNhdGlvbi1lbGVtZW50IGludGVyYWN0aW9uLiBQcmV2aW91c2x5LCB3ZSBsZWFybmVkIG9uIHRoZQorICAgICAgICAgIEdPYmplY3Qtd2F5cyBvZiBkb2luZyB0aGlzIGluIDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItYnVpbGRpbmctYXJncyIvPgorICAgICAgICAgIGFuZCA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLWJ1aWxkaW5nLXNpZ25hbHMiLz4uIFdlIHdpbGwgZGlzY3VzcworICAgICAgICAgIGR5bmFtaWMgcGFyYW1ldGVycywgd2hpY2ggYXJlIGEgd2F5IG9mIGRlZmluaW5nIGVsZW1lbnQgYmVoYXZpb3VyCisgICAgICAgICAgb3ZlciB0aW1lIGluIGFkdmFuY2UsIGluIDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItZHBhcmFtcyIvPi4gTmV4dCwKKyAgICAgICAgICB5b3Ugd2lsbCBsZWFybiBhYm91dCBpbnRlcmZhY2VzIGluIDx4cmVmCisgICAgICAgICAgbGlua2VuZD0iY2hhcHRlci1hZHZhbmNlZC1pbnRlcmZhY2VzIi8+LiBJbnRlcmZhY2VzIGFyZSB2ZXJ5IHRhcmdldC0KKyAgICAgICAgICBzcGVjaWZpYyB3YXlzIG9mIGFwcGxpY2F0aW9uLWVsZW1lbnQgaW50ZXJhY3Rpb24sIGJhc2VkIG9uIEdPYmplY3QncworICAgICAgICAgIEdJbnRlcmZhY2UuIExhc3RseSwgeW91IHdpbGwgbGVhcm4gYWJvdXQgaG93IG1ldGFkYXRhIGlzIGhhbmRsZWQgaW4KKyAgICAgICAgICAmR1N0cmVhbWVyOyBpbiA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLWFkdmFuY2VkLXRhZ2dpbmciLz4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIGxhc3QgY2hhcHRlciwgPHhyZWYgbGlua2VuZD0iY2hhcHRlci1hZHZhbmNlZC1ldmVudHMiLz4sIHdpbGwKKyAgICAgICAgICBkaXNjdXNzIHRoZSBjb25jZXB0IG9mIGV2ZW50cyBpbiAmR1N0cmVhbWVyOy4gRXZlbnRzIGFyZSwgb24gdGhlCisgICAgICAgICAgb25lIGhhbmQsIGFub3RoZXIgd2F5IG9mIGRvaW5nIGFwcGxpY2F0aW9uLWVsZW1lbnQgaW50ZXJhY3Rpb24uIEl0CisgICAgICAgICAgdGFrZXMgY2FyZSBvZiBzZWVraW5nLCBmb3IgZXhhbXBsZS4gT24gdGhlIG90aGVyIGhhbmQsIGl0IGlzIGFsc28KKyAgICAgICAgICBhIHdheSBpbiB3aGljaCBlbGVtZW50cyBpbnRlcmFjdCB3aXRoIGVhY2ggb3RoZXIsIHN1Y2ggYXMgbGV0dGluZworICAgICAgICAgIGVhY2ggb3RoZXIga25vdyBhYm91dCBtZWRpYSBzdHJlYW0gZGlzY29udGludWl0aWVzLCBmb3J3YXJkaW5nIHRhZ3MKKyAgICAgICAgICBpbnNpZGUgYSBwaXBlbGluZSBhbmQgc28gb24uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDx4cmVmIGxpbmtlbmQ9InBhcnQtb3RoZXIiLz4gLSBFeHBsYW5hdGlvbgorICAgICAgICAgIG9mIHdyaXRpbmcgb3RoZXIgcGx1Z2luIHR5cGVzLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEJlY2F1c2UgdGhlIGZpcnN0IHR3byBwYXJ0cyBvZiB0aGUgZ3VpZGUgdXNlIGFuIGF1ZGlvIGZpbHRlciBhcyBhbgorICAgICAgICAgIGV4YW1wbGUsIHRoZSBjb25jZXB0cyBpbnRyb2R1Y2VkIGFwcGx5IHRvIGZpbHRlciBwbHVnaW5zLiBCdXQgbWFueSBvZgorICAgICAgICAgIHRoZSBjb25jZXB0cyBhcHBseSBlcXVhbGx5IHRvIG90aGVyIHBsdWdpbiB0eXBlcywgaW5jbHVkaW5nIHNvdXJjZXMsCisgICAgICAgICAgc2lua3MsIGFuZCBhdXRvcGx1Z2dlcnMuIFRoaXMgcGFydCBvZiB0aGUgZ3VpZGUgcHJlc2VudHMgdGhlIGlzc3VlcworICAgICAgICAgIHRoYXQgYXJpc2Ugd2hlbiB3b3JraW5nIG9uIHRoZXNlIG1vcmUgc3BlY2lhbGl6ZWQgcGx1Z2luIHR5cGVzLiBUaGUKKyAgICAgICAgICBjaGFwdGVyIHN0YXJ0cyB3aXRoIGEgc3BlY2lhbCBmb2N1cyBvbiBlbGVtZW50cyB0aGF0IGNhbiBiZSB3cml0dGVuCisgICAgICAgICAgdXNpbmcgYSBiYXNlLWNsYXNzICg8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLW90aGVyLWJhc2UiLz4pLCBhbmQKKyAgICAgICAgICBsYXRlciBhbHNvIGdvZXMgaW50byB3cml0aW5nIHNwZWNpYWwgdHlwZXMgb2YgZWxlbWVudHMgaW4KKyAgICAgICAgICA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLW90aGVyLW9uZXRvbiIvPiwgPHhyZWYKKyAgICAgICAgICBsaW5rZW5kPSJjaGFwdGVyLW90aGVyLW50b29uZSIvPiBhbmQgPHhyZWYKKyAgICAgICAgICBsaW5rZW5kPSJjaGFwdGVyLW90aGVyLW1hbmFnZXIiLz4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDx4cmVmIGxpbmtlbmQ9InBhcnQtYXBwZW5kaXgiLz4gLSBGdXJ0aGVyCisgICAgICAgICAgaW5mb3JtYXRpb24gZm9yIHBsdWdpbiBkZXZlbG9wZXJzLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBhcHBlbmRpY2VzIGNvbnRhaW4gc29tZSBpbmZvcm1hdGlvbiB0aGF0IHN0dWJib3JubHkgcmVmdXNlcworICAgICAgICAgIHRvIGZpdCBjbGVhbmx5IGluIG90aGVyIHNlY3Rpb25zIG9mIHRoZSBndWlkZS4gTW9zdCBvZiB0aGlzIHNlY3Rpb24KKyAgICAgICAgICBpcyBub3QgeWV0IGZpbmlzaGVkLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorCisgICAgPHBhcmE+CisgICAgICBUaGUgcmVtYWluZGVyIG9mIHRoaXMgaW50cm9kdWN0b3J5IHBhcnQgb2YgdGhlIGd1aWRlIHByZXNlbnRzIGEgc2hvcnQKKyAgICAgIG92ZXJ2aWV3IG9mIHRoZSBiYXNpYyBjb25jZXB0cyBpbnZvbHZlZCBpbiAmR1N0cmVhbWVyOyBwbHVnaW4gZGV2ZWxvcG1lbnQuCisgICAgICBUb3BpY3MgY292ZXJlZCBpbmNsdWRlIDx4cmVmIGxpbmtlbmQ9InNlY3Rpb24tYmFzaWNzLWVsZW1lbnRzIi8+LCA8eHJlZgorICAgICAgbGlua2VuZD0ic2VjdGlvbi1iYXNpY3MtcGFkcyIvPiwgPHhyZWYgbGlua2VuZD0ic2VjdGlvbi1iYXNpY3MtZGF0YSIvPiBhbmQKKyAgICAgIDx4cmVmIGxpbmtlbmQ9InNlY3Rpb24tYmFzaWNzLXR5cGVzIi8+LiBJZiB5b3UgYXJlIGFscmVhZHkgZmFtaWxpYXIgd2l0aAorICAgICAgdGhpcyBpbmZvcm1hdGlvbiwgeW91IGNhbiB1c2UgdGhpcyBzaG9ydCBvdmVydmlldyB0byByZWZyZXNoIHlvdXIgbWVtb3J5LAorICAgICAgb3IgeW91IGNhbiBza2lwIHRvIDx4cmVmIGxpbmtlbmQ9InBhcnQtYnVpbGRpbmciLz4uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgQXMgeW91IGNhbiBzZWUsIHRoZXJlIGEgbG90IHRvIGxlYXJuLCBzbyBsZXQncyBnZXQgc3RhcnRlZCEKKyAgICA8L3BhcmE+CisKKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBDcmVhdGluZyBjb21wb3VuZCBhbmQgY29tcGxleCBlbGVtZW50cyBieSBleHRlbmRpbmcgZnJvbSBhIEdzdEJpbi4KKyAgICAgICAgICBUaGlzIHdpbGwgYWxsb3cgeW91IHRvIGNyZWF0ZSBwbHVnaW5zIHRoYXQgaGF2ZSBvdGhlciBwbHVnaW5zIGVtYmVkZGVkCisgICAgICAgICAgaW4gdGhlbS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQWRkaW5nIG5ldyBtaW1lLXR5cGVzIHRvIHRoZSByZWdpc3RyeSBhbG9uZyB3aXRoIHR5cGVkZXRlY3QgZnVuY3Rpb25zLgorICAgICAgICAgIFRoaXMgd2lsbCBhbGxvdyB5b3VyIHBsdWdpbiB0byBvcGVyYXRlIG9uIGEgY29tcGxldGVseSBuZXcgbWVkaWEgdHlwZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKyAgPC9zZWN0MT4KKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvcHdnL290aGVyLWJhc2UueG1sIGIvZG9jcy9wd2cvb3RoZXItYmFzZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg1OTZkNwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvcHdnL290aGVyLWJhc2UueG1sCkBAIC0wLDAgKzEsMzI3IEBACis8Y2hhcHRlciBpZD0iY2hhcHRlci1vdGhlci1iYXNlIiB4cmVmbGFiZWw9IlByZS1tYWRlIGJhc2UgY2xhc3NlcyI+CisgIDx0aXRsZT5QcmUtbWFkZSBiYXNlIGNsYXNzZXM8L3RpdGxlPgorICA8cGFyYT4KKyAgICBTbyBmYXIsIHdlJ3ZlIGJlZW4gbG9va2luZyBhdCBsb3ctbGV2ZWwgY29uY2VwdHMgb2YgY3JlYXRpbmcgYW55IHR5cGUgb2YKKyAgICAmR1N0cmVhbWVyOyBlbGVtZW50LiBOb3csIGxldCdzIGFzc3VtZSB0aGF0IGFsbCB5b3Ugd2FudCBpcyB0byBjcmVhdGUgYW4KKyAgICBzaW1wbGUgYXVkaW9zaW5rIHRoYXQgd29ya3MgZXhhY3RseSB0aGUgc2FtZSBhcywgc2F5LAorICAgIDxxdW90ZT5lc2RzaW5rPC9xdW90ZT4sIG9yIGEgZmlsdGVyIHRoYXQgc2ltcGx5IG5vcm1hbGl6ZXMgYXVkaW8gdm9sdW1lLgorICAgIFN1Y2ggZWxlbWVudHMgYXJlIHZlcnkgZ2VuZXJhbCBpbiBjb25jZXB0IGFuZCBzaW5jZSB0aGV5IGRvIG5vdGhpbmcKKyAgICBzcGVjaWFsLCB0aGV5IHNob3VsZCBiZSBlYXNpZXIgdG8gY29kZSB0aGFuIHRvIHByb3ZpZGUgeW91ciBvd24gc2NoZWR1bGVyCisgICAgYWN0aXZhdGlvbiBmdW5jdGlvbnMgYW5kIGRvaW5nIGNvbXBsZXggY2FwcyBuZWdvdGlhdGlvbi4gRm9yIHRoaXMgcHVycG9zZSwKKyAgICAmR1N0cmVhbWVyOyBwcm92aWRlcyBiYXNlIGNsYXNzZXMgdGhhdCBzaW1wbGlmeSBzb21lIHR5cGVzIG9mIGVsZW1lbnRzLgorICAgIFRob3NlIGJhc2UgY2xhc3NlcyB3aWxsIGJlIGRpc2N1c3NlZCBpbiB0aGlzIGNoYXB0ZXIuCisgIDwvcGFyYT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tYmFzZS1zaW5rIiB4cmVmbGFiZWw9IldyaXRpbmcgYSBzaW5rIj4KKyAgICA8dGl0bGU+V3JpdGluZyBhIHNpbms8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgU2lua3MgYXJlIHNwZWNpYWwgZWxlbWVudHMgaW4gJkdTdHJlYW1lcjsuIFRoaXMgaXMgYmVjYXVzZSBzaW5rIGVsZW1lbnRzCisgICAgICBoYXZlIHRvIHRha2UgY2FyZSBvZiA8ZW1waGFzaXM+cHJlcm9sbDwvZW1waGFzaXM+LCB3aGljaCBpcyB0aGUgcHJvY2VzcworICAgICAgdGhhdCB0YWtlcyBjYXJlIHRoYXQgZWxlbWVudHMgZ29pbmcgaW50byB0aGUKKyAgICAgIDxjbGFzc25hbWU+R1NUX1NUQVRFX1BBVVNFRDwvY2xhc3NuYW1lPiBzdGF0ZSB3aWxsIGhhdmUgYnVmZmVycyByZWFkeQorICAgICAgYWZ0ZXIgdGhlIHN0YXRlIGNoYW5nZS4gVGhlIHJlc3VsdCBvZiB0aGlzIGlzIHRoYXQgc3VjaCBlbGVtZW50cyBjYW4KKyAgICAgIHN0YXJ0IHByb2Nlc3NpbmcgZGF0YSBpbW1lZGlhdGVseSBhZnRlciBnb2luZyBpbnRvIHRoZQorICAgICAgPGNsYXNzbmFtZT5HU1RfU1RBVEVfUExBWUlORzwvY2xhc3NuYW1lPiBzdGF0ZSwgd2l0aG91dCByZXF1aXJpbmcgdG8KKyAgICAgIHRha2Ugc29tZSB0aW1lIHRvIGluaXRpYWxpemUgb3V0cHV0cyBvciBzZXQgdXAgZGVjb2RlcnM7IGFsbCB0aGF0IGlzIGRvbmUKKyAgICAgIGFscmVhZHkgYmVmb3JlIHRoZSBzdGF0ZS1jaGFuZ2UgdG8gPGNsYXNzbmFtZT5HU1RfU1RBVEVfUEFVU0VEPC9jbGFzc25hbWU+CisgICAgICBzdWNjZXNzZnVsbHkgY29tcGxldGVzLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFByZXJvbGwsIGhvd2V2ZXIsIGlzIGEgY29tcGxleCBwcm9jZXNzIHRoYXQgd291bGQgcmVxdWlyZSB0aGUgc2FtZQorICAgICAgY29kZSBpbiBtYW55IGVsZW1lbnRzLiBUaGVyZWZvcmUsIHNpbmsgZWxlbWVudHMgY2FuIGRlcml2ZSBmcm9tIHRoZQorICAgICAgPGNsYXNzbmFtZT5Hc3RCYXNlU2luazwvY2xhc3NuYW1lPiBiYXNlLWNsYXNzLCB3aGljaCBkb2VzIHByZXJvbGwgYW5kCisgICAgICBhIGZldyBvdGhlciB1dGlsaXR5IGZ1bmN0aW9ucyBhdXRvbWF0aWNhbGx5LiBUaGUgZGVyaXZlZCBjbGFzcyBvbmx5CisgICAgICBuZWVkcyB0byBpbXBsZW1lbnQgYSBidW5jaCBvZiB2aXJ0dWFsIGZ1bmN0aW9ucyBhbmQgd2lsbCB3b3JrCisgICAgICBhdXRvbWF0aWNhbGx5LgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSA8Y2xhc3NuYW1lPkdzdEJhc2VTaW5rPC9jbGFzc25hbWU+IGJhc2UtY2xhc3Mgc3BlY2lmaWVzIHNvbWUKKyAgICAgIGxpbWl0YXRpb25zIG9uIGVsZW1lbnRzLCB0aG91Z2g6CisgICAgPC9wYXJhPgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEl0IHJlcXVpcmVzIHRoYXQgdGhlIHNpbmsgb25seSBoYXMgb25lIHNpbmtwYWQuIFNpbmsgZWxlbWVudHMgdGhhdAorICAgICAgICAgIG5lZWQgbW9yZSB0aGFuIG9uZSBzaW5rcGFkLCBjYW5ub3QgdXNlIHRoaXMgYmFzZS1jbGFzcy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIGJhc2UtY2xhc3Mgb3ducyB0aGUgcGFkLCBhbmQgc3BlY2lmaWVzIGNhcHMgbmVnb3RpYXRpb24sIGRhdGEKKyAgICAgICAgICBoYW5kbGluZywgcGFkIGFsbG9jYXRpb24gYW5kIHN1Y2ggZnVuY3Rpb25zLiBJZiB5b3UgbmVlZCBtb3JlIHRoYW4KKyAgICAgICAgICB0aGUgb25lcyBwcm92aWRlZCBhcyB2aXJ0dWFsIGZ1bmN0aW9ucywgdGhlbiB5b3UgY2Fubm90IHVzZSB0aGlzCisgICAgICAgICAgYmFzZS1jbGFzcy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQnkgaW1wbGVtZW50aW5nIHRoZSA8ZnVuY3Rpb24+cGFkX2FsbG9jYXRlICgpPC9mdW5jdGlvbj4gZnVuY3Rpb24sCisgICAgICAgICAgaXQgaXMgcG9zc2libGUgZm9yIHVwc3RyZWFtIGVsZW1lbnRzIHRvIHVzZSBzcGVjaWFsIG1lbW9yeSwgc3VjaAorICAgICAgICAgIGFzIG1lbW9yeSBvbiB0aGUgWCBzZXJ2ZXIgc2lkZSB0aGF0IG9ubHkgdGhlIHNpbmsgY2FuIGFsbG9jYXRlLCBvcgorICAgICAgICAgIGV2ZW4gaGFyZHdhcmUgbWVtb3J5IDxmdW5jdGlvbj5tbWFwICgpPC9mdW5jdGlvbj4nZWQgZnJvbSB0aGUga2VybmVsLgorICAgICAgICAgIE5vdGUgdGhhdCBpbiBhbG1vc3QgYWxsIGNhc2VzLCB5b3Ugd2lsbCB3YW50IHRvIHN1YmNsYXNzIHRoZQorICAgICAgICAgIDxjbGFzc25hbWU+R3N0QnVmZmVyPC9jbGFzc25hbWU+IG9iamVjdCwgc28gdGhhdCB5b3VyIG93biBzZXQgb2YKKyAgICAgICAgICBmdW5jdGlvbnMgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgYnVmZmVyIGxvc2VzIGl0cyBsYXN0IHJlZmVyZW5jZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8cGFyYT4KKyAgICAgIFNpbmsgZWxlbWVudHMgY2FuIGRlcml2ZSBmcm9tIDxjbGFzc25hbWU+R3N0QmFzZVNpbms8L2NsYXNzbmFtZT4gdXNpbmcKKyAgICAgIHRoZSB1c3VhbCA8Y2xhc3NuYW1lPkdPYmplY3Q8L2NsYXNzbmFtZT4gdHlwZSBjcmVhdGlvbiB2b29kb28sIG9yIGJ5CisgICAgICB1c2luZyB0aGUgY29udmVuaWVuY2UgbWFjcm8gPGZ1bmN0aW9uPkdTVF9CT0lMRVJQTEFURSAoKTwvZnVuY3Rpb24+OgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3Rpbmc+CitHU1RfQk9JTEVSUExBVEVfRlVMTCAoR3N0TXlTaW5rLCBnc3RfbXlfc2luaywgR3N0QmFzZVNpbmssIEdTVF9UWVBFX0JBU0VfU0lOSyk7CisKK1suLl0KKworc3RhdGljIHZvaWQKK2dzdF9teV9zaW5rX2NsYXNzX2luaXQgKEdzdE15U2lua0NsYXNzICoga2xhc3MpCit7CisgIGtsYXNzLT5zZXRfY2FwcyA9IFsuLl07CisgIGtsYXNzLT5yZW5kZXIgPSBbLi5dOworWy4uXQorfQorICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+CisgICAgICBUaGUgYWR2YW50YWdlcyBvZiBkZXJpdmluZyBmcm9tIDxjbGFzc25hbWU+R3N0QmFzZVNpbms8L2NsYXNzbmFtZT4gYXJlCisgICAgICBudW1lcm91czoKKyAgICA8L3BhcmE+CisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgRGVyaXZlZCBpbXBsZW1lbnRhdGlvbnMgYmFyZWx5IG5lZWQgdG8gYmUgYXdhcmUgb2YgcHJlcm9sbCwgYW5kIGRvCisgICAgICAgICAgbm90IG5lZWQgdG8ga25vdyBhbnl0aGluZyBhYm91dCB0aGUgdGVjaG5pY2FsIGltcGxlbWVudGF0aW9uCisgICAgICAgICAgcmVxdWlyZW1lbnRzIG9mIHByZXJvbGwuIFRoZSBiYXNlLWNsYXNzIGRvZXMgYWxsIHRoZSBoYXJkIHdvcmsuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgTGVzcyBjb2RlIHRvIHdyaXRlIGluIHRoZSBkZXJpdmVkIGNsYXNzLCBzaGFyZWQgY29kZSAoYW5kIHRodXMKKyAgICAgICAgICBzaGFyZWQgYnVnZml4ZXMpLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDxwYXJhPgorICAgICAgVGhlcmUgYXJlIGFsc28gc3BlY2lhbGl6ZWQgYmFzZSBjbGFzc2VzIGZvciBhdWRpbyBhbmQgdmlkZW8sIGxldCdzIGxvb2sKKyAgICAgIGF0IHRob3NlIGEgYml0LgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1iYXNlLWF1ZGlvc2luayIgeHJlZmxhYmVsPSJXcml0aW5nIGFuIGF1ZGlvIHNpbmsiPgorICAgICAgPHRpdGxlPldyaXRpbmcgYW4gYXVkaW8gc2luazwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgRXNzZW50aWFsbHksIGF1ZGlvIHNpbmsgaW1wbGVtZW50YXRpb25zIGFyZSBqdXN0IGEgc3BlY2lhbCBjYXNlIG9mIGEKKyAgICAgICAgZ2VuZXJhbCBzaW5rLiBUaGVyZSBhcmUgdHdvIGF1ZGlvIGJhc2UgY2xhc3NlcyB0aGF0IHlvdSBjYW4gY2hvb3NlIHRvCisgICAgICAgIGRlcml2ZSBmcm9tLCBkZXBlbmRpbmcgb24geW91ciBuZWVkczoKKyAgICAgICAgPGNsYXNzbmFtZT5Hc3RCYXNlQXVkaW9zaW5rPC9jbGFzc25hbWU+IGFuZAorICAgICAgICA8Y2xhc3NuYW1lPkdzdEF1ZGlvU2luazwvY2xhc3NuYW1lPi4gVGhlIGJhc2VhdWRpb3NpbmsgcHJvdmlkZXMgZnVsbAorICAgICAgICBjb250cm9sIG92ZXIgaG93IHN5bmNocm9uaXphdGlvbiBhbmQgc2NoZWR1bGluZyBpcyBoYW5kbGVkLCBieSB1c2luZworICAgICAgICBhIHJpbmdidWZmZXIgdGhhdCB0aGUgZGVyaXZlZCBjbGFzcyBjb250cm9scyBhbmQgcHJvdmlkZXMuIFRoZQorICAgICAgICBhdWRpb3NpbmsgYmFzZS1jbGFzcyBpcyBhIGRlcml2ZWQgY2xhc3Mgb2YgdGhlIGJhc2VhdWRpb3NpbmssCisgICAgICAgIGltcGxlbWVudGluZyBhIHN0YW5kYXJkIHJpbmdidWZmZXIgaW1wbGVtZW50aW5nIGRlZmF1bHQKKyAgICAgICAgc3luY2hyb25pemF0aW9uIGFuZCBwcm92aWRpbmcgYSBzdGFuZGFyZCBhdWRpby1zYW1wbGUgY2xvY2suIERlcml2ZWQKKyAgICAgICAgY2xhc3NlcyBvZiB0aGlzIGJhc2UgY2xhc3MgbWVyZWx5IG5lZWQgdG8gcHJvdmlkZSBhIDxmdW5jdGlvbj5fb3BlbgorICAgICAgICAoKTwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+X2Nsb3NlICgpPC9mdW5jdGlvbj4gYW5kIGEgPGZ1bmN0aW9uPl93cml0ZQorICAgICAgICAoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uLCBhbmQgc29tZSBvcHRpb25hbCBmdW5jdGlvbnMuCisgICAgICAgIFRoaXMgc2hvdWxkIHN1ZmZpY2UgZm9yIG1hbnkgc291bmQtc2VydmVyIG91dHB1dCBlbGVtZW50cyBhbmQgZXZlbgorICAgICAgICBtb3N0IGludGVyZmFjZXMuIE1vcmUgZGVtYW5kaW5nIGF1ZGlvIHN5c3RlbXMsIHN1Y2ggYXMgSmFjaywgd291bGQKKyAgICAgICAgd2FudCB0byBpbXBsZW1lbnQgdGhlIDxjbGFzc25hbWU+R3N0QmFzZUF1ZGlvU2luazwvY2xhc3NuYW1lPgorICAgICAgICBiYXNlLWNsYXNzLgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8Y2xhc3NuYW1lPkdzdEJhc2VBdXNpb1Npbms8L2NsYXNzbmFtZT4gaGFzIGxpdHRsZSB0byBubworICAgICAgICBsaW1pdGF0aW9ucyBhbmQgc2hvdWxkIGZpdCB2aXJ0dWFsbHkgZXZlcnkgaW1wbGVtZW50YXRpb24sIGJ1dCBpcworICAgICAgICBoYXJkIHRvIGltcGxlbWVudC4gVGhlIDxjbGFzc25hbWU+R3N0QXVkaW9TaW5rPC9jbGFzc25hbWU+LCBvbiB0aGUKKyAgICAgICAgb3RoZXIgaGFuZCwgb25seSBmaXRzIHRob3NlIHN5c3RlbXMgd2l0aCBhIHNpbXBsZSA8ZnVuY3Rpb24+b3BlbgorICAgICAgICAoKTwvZnVuY3Rpb24+IC8gPGZ1bmN0aW9uPmNsb3NlICgpPC9mdW5jdGlvbj4gLyA8ZnVuY3Rpb24+d3JpdGUKKyAgICAgICAgKCk8L2Z1bmN0aW9uPiBBUEkgKHdoaWNoIHByYWN0aWNhbGx5IG1lYW5zIHByZXR0eSBtdWNoIGFsbCBvZiB0aGVtKSwKKyAgICAgICAgYnV0IGhhcyB0aGUgYWR2YW50YWdlIHRoYXQgaXQgaXMgYSBsb3QgZWFzaWVyIHRvIGltcGxlbWVudC4gVGhlCisgICAgICAgIGJlbmVmaXRzIG9mIHRoaXMgc2Vjb25kIGJhc2UgY2xhc3MgYXJlIGxhcmdlOgorICAgICAgPC9wYXJhPgorICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXV0b21hdGljIHN5bmNocm9uaXphdGlvbiwgd2l0aG91dCBhbnkgY29kZSBpbiB0aGUgZGVyaXZlZCBjbGFzcy4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFsc28gYXV0b21hdGljYWxseSBwcm92aWRlcyBhIGNsb2NrLCBzbyB0aGF0IG90aGVyIHNpbmtzIChlLmcuIGluCisgICAgICAgICAgICBjYXNlIG9mIGF1ZGlvL3ZpZGVvIHBsYXliYWNrKSBhcmUgc3luY2hyb25pemVkLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRmVhdHVyZXMgY2FuIGJlIGFkZGVkIHRvIGFsbCBhdWRpb3NpbmtzIGJ5IG1ha2luZyBhIGNoYW5nZSBpbiB0aGUKKyAgICAgICAgICAgIGJhc2UgY2xhc3MsIHdoaWNoIG1ha2VzIG1haW50ZW5hbmNlIGVhc3kuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBEZXJpdmVkIGNsYXNzZXMgcmVxdWlyZSBvbmx5IHRocmVlIHNtYWxsIGZ1bmN0aW9ucywgcGx1cyBzb21lCisgICAgICAgICAgICA8Y2xhc3NuYW1lPkdPYmplY3Q8L2NsYXNzbmFtZT4gYm9pbGVycGxhdGUgY29kZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgIDxwYXJhPgorICAgICAgICBJbiBhZGRpdGlvbiB0byBpbXBsZW1lbnRpbmcgdGhlIGF1ZGlvIGJhc2UtY2xhc3MgdmlydHVhbCBmdW5jdGlvbnMsCisgICAgICAgIGRlcml2ZWQgY2xhc3NlcyBjYW4gKHNob3VsZCkgYWxzbyBpbXBsZW1lbnQgdGhlCisgICAgICAgIDxjbGFzc25hbWU+R3N0QmFzZVNpbms8L2NsYXNzbmFtZT4gPGZ1bmN0aW9uPnNldF9jYXBzICgpPC9mdW5jdGlvbj4gYW5kCisgICAgICAgIDxmdW5jdGlvbj5nZXRfY2FwcyAoKTwvZnVuY3Rpb24+IHZpcnR1YWwgZnVuY3Rpb25zIGZvciBuZWdvdGlhdGlvbi4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3QyPgorCisgICAgPHNlY3QyIGlkPSJzZWN0aW9uLWJhc2UtdmlkZW9zaW5rIiB4cmVmbGFiZWw9IldyaXRpbmcgYSBnZW5lcmFsIHNpbmsiPgorICAgICAgPHRpdGxlPldyaXRpbmcgYSB2aWRlbyBzaW5rPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBXcml0aW5nIGEgdmlkZW9zaW5rIGNhbiBiZSBkb25lIHVzaW5nIHRoZQorICAgICAgICA8Y2xhc3NuYW1lPkdzdFZpZGVvU2luazwvY2xhc3NuYW1lPiBiYXNlLWNsYXNzLCB3aGljaCBkZXJpdmVzIGZyb20KKyAgICAgICAgPGNsYXNzbmFtZT5Hc3RCYXNlU2luazwvY2xhc3NuYW1lPiBpbnRlcm5hbGx5LiBDdXJyZW50bHksIGl0IGRvZXMKKyAgICAgICAgbm90aGluZyB5ZXQgYnV0IGFkZCBhbm90aGVyIGNvbXBpbGUgZGVwZW5kZW5jeSwgc28gZGVyaXZlZCBjbGFzc2VzCisgICAgICAgIHdpbGwgbmVlZCB0byBpbXBsZW1lbnQgYWxsIGJhc2Utc2luayB2aXJ0dWFsIGZ1bmN0aW9ucy4gV2hlbiB0aGV5IGRvCisgICAgICAgIHRoaXMgY29ycmVjdGx5LCB0aGlzIHdpbGwgaGF2ZSBzb21lIHBvc2l0aXZlIGVmZmVjdHMgb24gdGhlIGVuZCB1c2VyCisgICAgICAgIGV4cGVyaWVuY2Ugd2l0aCB0aGUgdmlkZW9zaW5rOgorICAgICAgPC9wYXJhPgorICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmVjYXVzZSBvZiBwcmVyb2xsIChhbmQgdGhlIDxmdW5jdGlvbj5wcmVyb2xsICgpPC9mdW5jdGlvbj4gdmlydHVhbAorICAgICAgICAgICAgZnVuY3Rpb24pLCBpdCBpcyBwb3NzaWJsZSB0byBkaXNwbGF5IGEgdmlkZW8gZnJhbWUgYWxyZWFkeSB3aGVuCisgICAgICAgICAgICBnb2luZyBpbnRvIHRoZSA8Y2xhc3NuYW1lPkdTVF9TVEFURV9QQVVTRUQ8L2NsYXNzbmFtZT4gc3RhdGUuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCeSBhZGRpbmcgbmV3IGZlYXR1cmVzIHRvIDxjbGFzc25hbWU+R3N0VmlkZW9TaW5rPC9jbGFzc25hbWU+LCBpdAorICAgICAgICAgICAgd2lsbCBiZSBwb3NzaWJsZSB0byBhZGQgZXh0ZW5zaW9ucyB0byB2aWRlb3NpbmtzIHRoYXQgYWZmZWN0IGFsbCBvZgorICAgICAgICAgICAgdGhlbSwgYnV0IG9ubHkgbmVlZCB0byBiZSBjb2RlZCBvbmNlLCB3aGljaCBpcyBhIGh1Z2UgbWFpbnRlbmFuY2UKKyAgICAgICAgICAgIGJlbmVmaXQuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9zZWN0Mj4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tYmFzZS1zcmMiIHhyZWZsYWJlbD0iV3JpdGluZyBhIHNvdXJjZSI+CisgICAgPHRpdGxlPldyaXRpbmcgYSBzb3VyY2U8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgSW4gdGhlIHByZXZpb3VzIHBhcnQsIHBhcnRpY3VsYXJseSA8eHJlZgorICAgICAgbGlua2VuZD0ic2VjdGlvbi1zY2hlZHVsaW5nLXJhbmRvbXhzIi8+LCB3ZSBoYXZlIGxlYXJuZWQgdGhhdCBzb21lIHR5cGVzCisgICAgICBvZiBlbGVtZW50cyBjYW4gcHJvdmlkZSByYW5kb20gYWNjZXNzLiBUaGlzIGFwcGxpZXMgbW9zdCBkZWZpbml0ZWx5IHRvCisgICAgICBzb3VyY2UgZWxlbWVudHMgcmVhZGluZyBmcm9tIGEgcmFuZG9tbHkgc2Vla2FibGUgbG9jYXRpb24sIHN1Y2ggYXMgZmlsZQorICAgICAgc291cmNlcy4gSG93ZXZlciwgb3RoZXIgc291cmNlIGVsZW1lbnRzIG1heSBiZSBiZXR0ZXIgZGVzY3JpYmVkIGFzIGEKKyAgICAgIGxpdmUgc291cmNlIGVsZW1lbnQsIHN1Y2ggYXMgYSBjYW1lcmEgc291cmNlLCBhbiBhdWRpbyBjYXJkIHNvdXJjZSBhbmQKKyAgICAgIHN1Y2g7IHRob3NlIGFyZSBub3Qgc2Vla2FibGUgYW5kIGRvIG5vdCBwcm92aWRlIGJ5dGUtZXhhY3QgYWNjZXNzLiBGb3IKKyAgICAgIGFsbCBzdWNoIHVzZSBjYXNlcywgJkdTdHJlYW1lcjsgcHJvdmlkZXMgdHdvIGJhc2UgY2xhc3NlczoKKyAgICAgIDxjbGFzc25hbWU+R3N0QmFzZVNyYzwvY2xhc3NuYW1lPiBmb3IgdGhlIGJhc2ljIHNvdXJjZSBmdW5jdGlvbmFsaXR5LCBhbmQKKyAgICAgIDxjbGFzc25hbWU+R3N0UHVzaFNyYzwvY2xhc3NuYW1lPiwgd2hpY2ggaXMgYSBub24tYnl0ZSBleGFjdCBzb3VyY2UKKyAgICAgIGJhc2UtY2xhc3MuIFRoZSBwdXNoc291cmNlIGJhc2UgY2xhc3MgaXRzZWxmIGRlcml2ZXMgZnJvbSBiYXNlc291cmNlIGFzCisgICAgICB3ZWxsLCBhbmQgdGh1cyBhbGwgc3RhdGVtZW50cyBhYm91dCB0aGUgYmFzZXNvdXJjZSBhcHBseSB0byB0aGUKKyAgICAgIHB1c2hzb3VyY2UsIHRvby4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBUaGUgYmFzZXNyYyBjbGFzcyBkb2VzIHNldmVyYWwgdGhpbmdzIGF1dG9tYXRpY2FsbHkgZm9yIGRlcml2ZWQgY2xhc3NlcywKKyAgICAgIHNvIHRoZXkgbm8gbG9uZ2VyIGhhdmUgdG8gd29ycnkgYWJvdXQgaXQ6CisgICAgPC9wYXJhPgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEZpeGVzIHRvIDxjbGFzc25hbWU+R3N0QmFzZVNyYzwvY2xhc3NuYW1lPiBhcHBseSB0byBhbGwgZGVyaXZlZAorICAgICAgICAgIGNsYXNzZXMgYXV0b21hdGljYWxseS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQXV0b21hdGljIHBhZCBhY3RpdmF0aW9uIGhhbmRsaW5nLCBhbmQgdGFzay13cmFwcGluZyBpbiBjYXNlIHdlIGdldAorICAgICAgICAgIGFzc2lnbmVkIHRvIHN0YXJ0IGEgdGFzayBvdXJzZWx2ZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPHBhcmE+CisgICAgICBUaGUgPGNsYXNzbmFtZT5Hc3RCYXNlU3JjPC9jbGFzc25hbWU+IG1heSBub3QgYmUgc3VpdGFibGUgZm9yIGFsbCBjYXNlcywKKyAgICAgIHRob3VnaDsgaXQgaGFzIGxpbWl0YXRpb25zOgorICAgIDwvcGFyYT4KKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGVyZSBpcyBvbmUgYW5kIG9ubHkgb25lIHNvdXJjZXBhZC4gU291cmNlIGVsZW1lbnRzIHJlcXVpcmluZworICAgICAgICAgIG11bHRpcGxlIHNvdXJjZXBhZHMgY2Fubm90IHVzZSB0aGlzIGJhc2UtY2xhc3MuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFNpbmNlIHRoZSBiYXNlLWNsYXNzIG93bnMgdGhlIHBhZCBhbmQgZGVyaXZlZCBjbGFzc2VzIGNhbiBvbmx5CisgICAgICAgICAgY29udHJvbCBpdCBhcyBmYXIgYXMgdGhlIHZpcnR1YWwgZnVuY3Rpb25zIGFsbG93LCB5b3UgYXJlIGxpbWl0ZWQKKyAgICAgICAgICB0byB0aGUgZnVuY3Rpb25hbGl0eSBwcm92aWRlZCBieSB0aGUgdmlydHVhbCBmdW5jdGlvbnMuIElmIHlvdSBuZWVkCisgICAgICAgICAgbW9yZSwgeW91IGNhbm5vdCB1c2UgdGhpcyBiYXNlLWNsYXNzLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDxwYXJhPgorICAgICAgSXQgaXMgcG9zc2libGUgdG8gdXNlIHNwZWNpYWwgbWVtb3J5LCBzdWNoIGFzIFggc2VydmVyIG1lbW9yeSBwb2ludGVycworICAgICAgb3IgPGZ1bmN0aW9uPm1tYXAgKCk8L2Z1bmN0aW9uPidlZCBtZW1vcnkgYXJlYXMsIGFzIGRhdGEgcG9pbnRlcnMgaW4KKyAgICAgIGJ1ZmZlcnMgcmV0dXJuZWQgZnJvbSB0aGUgPGZ1bmN0aW9uPmNyZWF0ZSgpPC9mdW5jdGlvbj4gdmlydHVhbCBmdW5jdGlvbi4KKyAgICAgIEluIGFsbW9zdCBhbGwgY2FzZXMsIHlvdSB3aWxsIHdhbnQgdG8gc3ViY2xhc3MKKyAgICAgIDxjbGFzc25hbWU+R3N0QnVmZmVyPC9jbGFzc25hbWU+IHNvIHRoYXQgeW91ciBvd24gc2V0IG9mIGZ1bmN0aW9ucyBjYW4KKyAgICAgIGJlIGNhbGxlZCB3aGVuIHRoZSBidWZmZXIgaXMgZGVzdHJveWVkLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1iYXNlLWF1ZGlvc3JjIiB4cmVmbGFiZWw9IldyaXRpbmcgYW4gYXVkaW8gc291cmNlIj4KKyAgICAgIDx0aXRsZT5Xcml0aW5nIGFuIGF1ZGlvIHNvdXJjZTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgQW4gYXVkaW8gc291cmNlIGlzIG5vdGhpbmcgbW9yZSBidXQgYSBzcGVjaWFsIGNhc2Ugb2YgYSBwdXNoc291cmNlLgorICAgICAgICBBdWRpbyBzb3VyY2VzIHdvdWxkIGJlIGFueXRoaW5nIHRoYXQgcmVhZHMgYXVkaW8sIHN1Y2ggYXMgYSBzb3VyY2UKKyAgICAgICAgcmVhZGluZyBmcm9tIGEgc291bmRzZXJ2ZXIsIGEga2VybmVsIGludGVyZmFjZSAoc3VjaCBhcyBBTFNBKSBvciBhCisgICAgICAgIHRlc3Qgc291bmQgLyBzaWduYWwgZ2VuZXJhdG9yLiAmR1N0cmVhbWVyOyBwcm92aWRlcyB0d28gYmFzZSBjbGFzc2VzLAorICAgICAgICBzaW1pbGFyIHRvIHRoZSB0d28gYXVkaW9zaW5rcyBkZXNjcmliZWQgaW4gPHhyZWYKKyAgICAgICAgbGlua2VuZD0ic2VjdGlvbi1iYXNlLWF1ZGlvc2luayIvPjsgb25lIGlzIHJpbmdidWZmZXItYmFzZWQsIGFuZAorICAgICAgICByZXF1aXJlcyB0aGUgZGVyaXZlZCBjbGFzcyB0byB0YWtlIGNhcmUgb2YgaXRzIG93biBzY2hlZHVsaW5nLAorICAgICAgICBzeW5jaHJvbml6YXRpb24gYW5kIHN1Y2guIFRoZSBvdGhlciBpcyBiYXNlZCBvbiB0aGlzCisgICAgICAgIDxjbGFzc25hbWU+R3N0QmFzZUF1ZGlvU3JjPC9jbGFzc25hbWU+IGFuZCBpcyBjYWxsZWQKKyAgICAgICAgPGNsYXNzbmFtZT5Hc3RBdWRpb1NyYzwvY2xhc3NuYW1lPiwgYW5kIHByb3ZpZGVzIGEgc2ltcGxlCisgICAgICAgIDxmdW5jdGlvbj5vcGVuICgpPC9mdW5jdGlvbj4sIDxmdW5jdGlvbj5jbG9zZSAoKTwvZnVuY3Rpb24+IGFuZAorICAgICAgICA8ZnVuY3Rpb24+cmVhZCAoKTwvZnVuY3Rpb24+IGludGVyZmFjZSwgd2hpY2ggaXMgcmF0aGVyIHNpbXBsZSB0bworICAgICAgICBpbXBsZW1lbnQgYW5kIHdpbGwgc3VmZmljZSBmb3IgbW9zdCBzb3VuZHNlcnZlciBzb3VyY2VzIGFuZCBhdWRpbworICAgICAgICBpbnRlcmZhY2VzIChlLmcuIEFMU0Egb3IgT1NTKSBvdXQgdGhlcmUuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxjbGFzc25hbWU+R3N0QXVkaW9TcmM8L2NsYXNzbmFtZT4gYmFzZS1jbGFzcyBoYXMgc2V2ZXJhbCBiZW5lZml0cworICAgICAgICBmb3IgZGVyaXZlZCBjbGFzc2VzLCBvbiB0b3Agb2YgdGhlIGJlbmVmaXRzIG9mIHRoZQorICAgICAgICA8Y2xhc3NuYW1lPkdzdFB1c2hTcmM8L2NsYXNzbmFtZT4gYmFzZS1jbGFzcyB0aGF0IGl0IGlzIGJhc2VkIG9uOgorICAgICAgPC9wYXJhPgorICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRG9lcyBzeW5jcm9uaXphdGlvbiBhbmQgcHJvdmlkZXMgYSBjbG9jay4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE5ldyBmZWF0dXJlcyBjYW4gYmUgYWRkZWQgdG8gaXQgYW5kIHdpbGwgYXBwbHkgdG8gYWxsIGRlcml2ZWQKKyAgICAgICAgICAgIGNsYXNzZXMgYXV0b21hdGljYWxseS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3NlY3QyPgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0ic2VjdGlvbi1iYXNlLXRyYW5zZm9ybSIKKyAgICAgIHhyZWZsYWJlbD0iV3JpdGluZyBhIHRyYW5zZm9ybWF0aW9uIGVsZW1lbnQiPgorICAgIDx0aXRsZT5Xcml0aW5nIGEgdHJhbnNmb3JtYXRpb24gZWxlbWVudDwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBBIHRoaXJkIGJhc2UtY2xhc3MgdGhhdCAmR1N0cmVhbWVyOyBwcm92aWRlcyBpcyB0aGUKKyAgICAgIDxjbGFzc25hbWU+R3N0QmFzZVRyYW5zZm9ybTwvY2xhc3NuYW1lPi4gVGhpcyBpcyBhIGJhc2UgY2xhc3MgZm9yCisgICAgICBlbGVtZW50cyB3aXRoIG9uZSBzb3VyY2VwYWQgYW5kIG9uZSBzaW5rcGFkIHdoaWNoIGFjdCBhcyBhIGZpbHRlcgorICAgICAgb2Ygc29tZSBzb3J0LCBzdWNoIGFzIHZvbHVtZSBjaGFuZ2luZywgYXVkaW8gcmVzYW1wbGluZywgYXVkaW8gZm9ybWF0CisgICAgICBjb252ZXJzaW9uLCBhbmQgc28gb24gYW5kIHNvIG9uLiBUaGVyZSBpcyBxdWl0ZSBhIGxvdCBvZiBib29ra2VlcGluZworICAgICAgdGhhdCBzdWNoIGVsZW1lbnRzIG5lZWQgdG8gZG8gaW4gb3JkZXIgZm9yIHRoaW5ncyBzdWNoIGFzIGJ1ZmZlcgorICAgICAgYWxsb2NhdGlvbiBmb3J3YXJkaW5nLCBwYXNzdGhyb3VnaCwgaW4tcGxhY2UgcHJvY2Vzc2luZyBhbmQgc3VjaCB0byBhbGwKKyAgICAgIHdvcmsgY29ycmVjdGx5LiBUaGlzIGJhc2UgY2xhc3MgZG9lcyBhbGwgdGhhdCBmb3IgeW91LCBzbyB0aGF0IHlvdSBqdXN0CisgICAgICBuZWVkIHRvIGRvIHRoZSBhY3R1YWwgcHJvY2Vzc2luZy4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBTaW5jZSB0aGUgPGNsYXNzbmFtZT5Hc3RCYXNlVHJhbnNmb3JtPC9jbGFzc25hbWU+IGlzIGJhc2VkIG9uIHRoZSAxLXRvLTEKKyAgICAgIG1vZGVsIGZvciBmaWx0ZXJzLCBpdCBtYXkgbm90IGFwcGx5IHdlbGwgdG8gZWxlbWVudHMgc3VjaCBhcyBkZWNvZGVycywKKyAgICAgIHdoaWNoIG1heSBoYXZlIHRvIHBhcnNlIHByb3BlcnRpZXMgZnJvbSB0aGUgc3RyZWFtLiBBbHNvLCBpdCB3aWxsIG5vdAorICAgICAgd29yayBmb3IgZWxlbWVudHMgcmVxdWlyaW5nIG1vcmUgdGhhbiBvbmUgc291cmNlcGFkIG9yIHNpbmtwYWQuCisgICAgPC9wYXJhPgorICA8L3NlY3QxPgorPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9wd2cvb3RoZXItbWFuYWdlci54bWwgYi9kb2NzL3B3Zy9vdGhlci1tYW5hZ2VyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmQxYWNlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wd2cvb3RoZXItbWFuYWdlci54bWwKQEAgLTAsMCArMSw0NCBAQAorPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItb3RoZXItbWFuYWdlciIgeHJlZmxhYmVsPSJXcml0aW5nIGEgTWFuYWdlciI+CisgIDx0aXRsZT5Xcml0aW5nIGEgTWFuYWdlcjwvdGl0bGU+CisgIDxwYXJhPgorICAgIE1hbmFnZXJzIGFyZSBlbGVtZW50cyB0aGF0IGFkZCBhIGZ1bmN0aW9uIG9yIHVuaWZ5IHRoZSBmdW5jdGlvbiBvZgorICAgIGFub3RoZXIgKHNlcmllcyBvZikgZWxlbWVudChzKS4gTWFuYWdlcnMgYXJlIGdlbmVyYWxseSBhCisgICAgPGNsYXNzbmFtZT5Hc3RCaW48L2NsYXNzbmFtZT4gd2l0aCBvbmUgb3IgbW9yZSBnaG9zdHBhZHMuIEluc2lkZSB0aGVtCisgICAgaXMvYXJlIHRoZSBhY3R1YWwgZWxlbWVudChzKSB0aGF0IG1hdHRlcnMuIFRoZXJlIGlzIHNldmVyYWwgY2FzZXMgd2hlcmUKKyAgICB0aGlzIGlzIHVzZWZ1bC4gRm9yIGV4YW1wbGU6CisgIDwvcGFyYT4KKyAgPGl0ZW1pemVkbGlzdD4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICAgVG8gYWRkIHN1cHBvcnQgZm9yIHByaXZhdGUgZXZlbnRzIHdpdGggY3VzdG9tIGV2ZW50IGhhbmRsaW5nIHRvCisgICAgICAgIGFub3RoZXIgZWxlbWVudC4KKyAgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUbyBhZGQgc3VwcG9ydCBmb3IgY3VzdG9tIHBhZCA8ZnVuY3Rpb24+X3F1ZXJ5ICgpPC9mdW5jdGlvbj4KKyAgICAgICAgb3IgPGZ1bmN0aW9uPl9jb252ZXJ0ICgpPC9mdW5jdGlvbj4gaGFuZGxpbmcgdG8gYW5vdGhlciBlbGVtZW50LgorICAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgIFRvIGFkZCBjdXN0b20gZGF0YSBoYW5kbGluZyBiZWZvcmUgb3IgYWZ0ZXIgYW5vdGhlciBlbGVtZW50J3MgZGF0YQorICAgICAgICBoYW5kbGVyIGZ1bmN0aW9uIChnZW5lcmFsbHkgaXRzIDxmdW5jdGlvbj5fY2hhaW4gKCk8L2Z1bmN0aW9uPgorICAgICAgICBmdW5jdGlvbikuCisgICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICAgVG8gZW1iZWQgYW4gZWxlbWVudCwgb3IgYSBzZXJpZXMgb2YgZWxlbWVudHMsIGludG8gc29tZXRoaW5nIHRoYXQKKyAgICAgICAgbG9va3MgYW5kIHdvcmtzIGxpa2UgYSBzaW1wbGUgZWxlbWVudCB0byB0aGUgb3V0c2lkZSB3b3JsZC4KKyAgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICA8L2l0ZW1pemVkbGlzdD4KKyAgPHBhcmE+CisgICAgTWFraW5nIGEgbWFuYWdlciBpcyBhYm91dCBhcyBzaW1wbGUgYXMgaXQgZ2V0cy4gWW91IGNhbiBkZXJpdmUgZnJvbSBhCisgICAgPGNsYXNzbmFtZT5Hc3RCaW48L2NsYXNzbmFtZT4sIGFuZCBpbiBtb3N0IGNhc2VzLCB5b3UgY2FuIGVtYmVkIHRoZQorICAgIHJlcXVpcmVkIGVsZW1lbnRzIGluIHRoZSA8ZnVuY3Rpb24+X2luaXQgKCk8L2Z1bmN0aW9uPiBhbHJlYWR5LCBpbmNsdWRpbmcKKyAgICBzZXR1cCBvZiBnaG9zdHBhZHMuIElmIHlvdSBuZWVkIGFueSBjdXN0b20gZGF0YSBoYW5kbGVycywgeW91IGNhbiBjb25uZWN0CisgICAgc2lnbmFscyBvciBlbWJlZCBhIHNlY29uZCBlbGVtZW50IHdoaWNoIHlvdSBjb250cm9sLgorICA8L3BhcmE+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL3B3Zy9vdGhlci1udG9vbmUueG1sIGIvZG9jcy9wd2cvb3RoZXItbnRvb25lLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2IxZjM1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wd2cvb3RoZXItbnRvb25lLnhtbApAQCAtMCwwICsxLDE1NSBAQAorPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItb3RoZXItbnRvb25lIgorICAgIHhyZWZsYWJlbD0iV3JpdGluZyBhIE4tdG8tMSBFbGVtZW50IG9yIE11eGVyIj4KKyAgPHRpdGxlPldyaXRpbmcgYSBOLXRvLTEgRWxlbWVudCBvciBNdXhlcjwvdGl0bGU+CisgIDxwYXJhPgorICAgIE4tdG8tMSBlbGVtZW50cyBoYXZlIGJlZW4gcHJldmlvdXNseSBtZW50aW9uZWQgYW5kIGRpc2N1c3NlZCBpbiBib3RoCisgICAgPHhyZWYgbGlua2VuZD0iY2hhcHRlci1hZHZhbmNlZC1yZXF1ZXN0Ii8+IGFuZCBpbgorICAgIDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItc2NoZWR1bGluZyIvPi4gVGhlIG1haW4gbm90ZXdvcnRoeSB0aGluZworICAgIGFib3V0IE4tdG8tMSBlbGVtZW50cyBpcyB0aGF0IGVhY2ggcGFkIGlzIHB1c2gtYmFzZWQgaW4gaXRzIG93biB0aHJlYWQsCisgICAgYW5kIHRoZSBOLXRvLTEgZWxlbWVudCBzeW5jaHJvbml6ZXMgdGhvc2Ugc3RyZWFtcyBieQorICAgIGV4cGVjdGVkLXRpbWVzdGFtcC1iYXNlZCBsb2dpYy4gVGhpcyBtZWFucyBpdCBsZXRzIGFsbCBzdHJlYW1zIHdhaXQKKyAgICBleGNlcHQgZm9yIHRoZSBvbmUgdGhhdCBwcm92aWRlcyB0aGUgZWFybGllc3QgbmV4dC1leHBlY3RlZCB0aW1lc3RhbXAuCisgICAgV2hlbiB0aGF0IHN0cmVhbSBoYXMgcGFzc3dlZCBvbmUgYnVmZmVyLCB0aGUgbmV4dAorICAgIGVhcmxpZXN0LWV4cGVjdGVkLXRpbWVzdGFtcCBpcyBjYWxjdWxhdGVkLCBhbmQgd2Ugc3RhcnQgYmFjayB3aGVyZSB3ZQorICAgIHdlcmUsIHVudGlsIGFsbCBzdHJlYW1zIGhhdmUgcmVhY2hlZCBFT1MuIFRoZXJlIGlzIGEgaGVscGVyIGJhc2UgY2xhc3MsCisgICAgY2FsbGVkIDxjbGFzc25hbWU+R3N0Q29sbGVjdFBhZHM8L2NsYXNzbmFtZT4sIHRoYXQgd2lsbCBoZWxwIHlvdSB0byBkbworICAgIHRoaXMuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgTm90ZSwgaG93ZXZlciwgdGhhdCB0aGlzIGhlbHBlciBjbGFzcyB3aWxsIG9ubHkgaGVscCB5b3Ugd2l0aCBncmFiYmluZworICAgIGEgYnVmZmVyIGZyb20gZWFjaCBpbnB1dCBhbmQgZ2l2aW5nIHlvdSB0aGUgb25lIHdpdGggZWFybGllc3QgdGltZXN0YW1wLgorICAgIElmIHlvdSBuZWVkIGFueXRoaW5nIG1vcmUgZGlmZmljdWx0LCBzdWNoIGFzICJkb24ndC1ncmFiLWEtbmV3LWJ1ZmZlcgorICAgIHVudGlsIGEgZ2l2ZW4gdGltZXN0YW1wIiBvciBzb21ldGhpbmcgbGlrZSB0aGF0LCB5b3UnbGwgbmVlZCB0byBkbyB0aGlzCisgICAgeW91cnNlbGYuCisgIDwvcGFyYT4KKworPCEtLQorICBOb3RlOiBJJ2QgbGlrZSB0byBoYXZlIHNvbWV0aGluZyBsaWtlIHRoaXMgaW4gdGhlIGZpbmFsIHRleHQsIGJ1dCBzaW5jZQorICB0aGUgY29kZSBiZWxvdyBkb2Vzbid0IHdvcmsgYW5kIHRoaXMgaXMgYWxsIDAuOCd5LCBJIGNvbW1lbnRlZCBpdCBmb3Igbm93LgorICA8c2VjdDEgaWQ9InNlY3Rpb24tbXV4ZXItbmVnb3RpYXRpb24iIHhyZWZsYWJlbD0iTmVnb3RpYXRpb24iPgorICAgIDx0aXRsZT5OZWdvdGlhdGlvbjwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBNb3N0IGNvbnRhaW5lciBmb3JtYXRzIHdpbGwgaGF2ZSBhIGZhaXIgYW1vdW50IG9mIGlzc3VlcyB3aXRoCisgICAgICBjaGFuZ2luZyBjb250ZW50IG9uIGFuIGVsZW1lbnRhcnkgc3RyZWFtLiBUaGVyZWZvcmUsIHlvdSBzaG91bGQKKyAgICAgIG5vdCBhbGxvdyBjYXBzIHRvIGJlIGNoYW5nZWQgb25jZSB5b3UndmUgc3RhcnRlZCB1c2luZyBkYXRhIGZyb20KKyAgICAgIHRoZW0uIFRoZSBlYXNpZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgYnkgdXNpbmcgZXhwbGljaXQgY2FwcywKKyAgICAgIHdoaWNoIGhhdmUgYmVlbiBleHBsYWluZWQgYmVmb3JlLiBIb3dldmVyLCB3ZSdyZSBnb2luZyB0byB1c2UgdGhlbQorICAgICAgaW4gYSBzbGlnaHRseSBkaWZmZXJlbnQgd2F5IHRoZW4gd2hhdCB5b3UncmUgdXNlZCB0bywgaGF2aW5nIHRoZQorICAgICAgY29yZSBkbyBhbGwgdGhlIHdvcmsgZm9yIHVzLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSBpZGVhIGlzIHRoYXQsIGFzIGxvbmcgYXMgdGhlIHN0cmVhbS9maWxlIGhlYWRlcnMgaGF2ZSBub3QgYmVlbgorICAgICAgd3JpdHRlbiB5ZXQgYW5kIG5vIGRhdGEgaGFzIGJlZW4gcHJvY2Vzc2VkIHlldCwgYSBzdHJlYW0gaXMgYWxsb3dlZAorICAgICAgdG8gcmVuZWdvdGlhdGUuIEFmdGVyIHRoYXQgcG9pbnQsIHRoZSBjYXBzIHNob3VsZCBiZSBmaXhlZCwgYmVjYXVzZQorICAgICAgd2UgY2FuIG9ubHkgdXNlIGEgc3RyZWFtIG9uY2UuIENhcHMgbWF5IHRoZW4gb25seSBjaGFuZ2Ugd2l0aGluIGFuCisgICAgICBhbGxvd2VkIHJhbmdlICh0aGluayBNUEVHLCB3aGVyZSBjaGFuZ2VzIGluIEZQUyBhcmUgYWxsb3dlZCksIG9yCisgICAgICBzb21ldGltZXMgbm90IGF0IGFsbCAoc3VjaCBhcyBBVkkgYXVkaW8pLiBJbiBvcmRlciB0byBkbyB0aGF0LCB3ZQorICAgICAgd2lsbCwgYWZ0ZXIgZGF0YSByZXRyaWV2YWwgYW5kIGhlYWRlciB3cml0aW5nLCBzZXQgYW4gZXhwbGljaXQgY2FwcworICAgICAgb24gZWFjaCBzaW5rIHBhZCwgdGhhdCBpcyB0aGUgbWluaW1hbCBjYXBzIGRlc2NyaWJpbmcgdGhlIHByb3BlcnRpZXMKKyAgICAgIG9mIHRoZSBmb3JtYXQgdGhhdCBtYXkgbm90IGNoYW5nZS4gQXMgYW4gZXhhbXBsZSwgZm9yIE1QRUcgYXVkaW8KKyAgICAgIGluc2lkZSBhbiBNUEVHIHN5c3RlbSBzdHJlYW0sIHRoaXMgd291bGQgbWVhbiBhIHdpZGUgY2FwcyBvZgorICAgICAgYXVkaW8vbXBlZyB3aXRoIG1wZWd2ZXJzaW9uPTEgYW5kIGxheWVyPVsxLDJdLiBGb3IgdGhlIHNhbWUgYXVkaW8gdHlwZQorICAgICAgaW4gTVBFRywgdGhvdWdoLCB0aGUgc2FtcGxlcmF0ZSwgYml0cmF0ZSwgbGF5ZXIgYW5kIG51bWJlciBvZiBjaGFubmVscworICAgICAgd291bGQgYmVjb21lIHN0YXRpYywgdG9vLiBTaW5jZSB0aGUgKHJlcXVlc3QpIHBhZHMgd2lsbCBiZSByZW1vdmVkCisgICAgICB3aGVuIHRoZSBzdHJlYW0gZW5kcywgdGhlIHN0YXRpYyBjYXBzIHdpbGwgY2Vhc2UgdG8gZXhpc3QgdG9vLCB0aGVuLgorICAgICAgV2hpbGUgdGhlIGV4cGxpY2l0IGNhcHMgIGV4aXN0LCB0aGUgPGZ1bmN0aW9uPl9saW5rICgpPC9mdW5jdGlvbj4tCisgICAgICBmdW5jdGlvbiB3aWxsIG5vdCBiZSBjYWxsZWQsIHNpbmNlIHRoZSBjb3JlIHdpbGwgZG8gYWxsIG5lY2Vzc2FyeQorICAgICAgY2hlY2tzIGZvciB1cy4gTm90ZSB0aGF0IHRoZSBwcm9wZXJ0eSBvZiB1c2luZyBleHBsaWNpdCBjYXBzIHNob3VsZAorICAgICAgYmUgYWRkZWQgYWxvbmcgd2l0aCB0aGUgYWN0dWFsIGV4cGxpY2l0IGNhcHMsIG5vdCBhbnkgZWFybGllci4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBCZWxvdyBoZXJlIGZvbGxvd3MgdGhlIHNpbXBsZSBleGFtcGxlIG9mIGFuIEFWSSBtdXhlcidzIGF1ZGlvIGNhcHMKKyAgICAgIG5lZ290aWF0aW9uLiBUaGUgPGZ1bmN0aW9uPl9saW5rICgpPC9mdW5jdGlvbj4tZnVuY3Rpb24gaXMgZmFpcmx5CisgICAgICBub3JtYWwsIGJ1dCB0aGUgPGZ1bmN0aW9uPi1Mb29wICgpPC9mdW5jdGlvbj4tZnVuY3Rpb24gZG9lcyBzb21lIG9mCisgICAgICB0aGUgdHJpY2tzIG1lbnRpb25lZCBhYm92ZS4gVGhlcmUgaXMgbm8gPGZ1bmN0aW9uPl9nZXRjYXBzICgpPC9mdW5jdGlvbj4tCisgICAgICBmdW5jdGlvbiBzaW5jZSB0aGUgcGFkIHRlbXBsYXRlIGNvbnRhaW5zIGFsbCB0aGF0IGluZm9ybWF0aW9uIGFscmVhZHkKKyAgICAgIChub3Qgc2hvd24pLgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3Rpbmc+CitzdGF0aWMgR3N0UGFkTGlua1JldHVybgorZ3N0X2F2aV9tdXhfYXVkaW9fbGluayAoR3N0UGFkICAgICAgICAqcGFkLAorCQkJY29uc3QgR3N0Q2FwcyAqY2FwcykKK3sKKyAgR3N0QXZpTXV4ICptdXggPSBHU1RfQVZJX01VWCAoZ3N0X3BhZF9nZXRfcGFyZW50IChwYWQpKTsKKyAgR3N0U3RydWN0dXJlICpzdHIgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKKyAgY29uc3QgZ2NoYXIgKm1pbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzdHIpOworCisgIGlmICghc3RyY21wIChzdHIsICJhdWRpby9tcGVnIikpIHsKKyAgICAvKiBnZXQgdmVyc2lvbiwgbWFrZSBzdXJlIGl0J3MgMSwgZ2V0IGxheWVyLCBtYWtlIHN1cmUgaXQncyAxLTMsCisgICAgICogdGhlbiBjcmVhdGUgdGhlIDItYnl0ZSBhdWRpbyB0YWcgKDB4MDA1NSkgYW5kIGZpbGwgYW4gYXVkaW8KKyAgICAgKiBzdHJlYW0gc3RydWN0dXJlIChzdHJoL3N0cmYpLiAqLworICAgIFsuLl0KKyAgICByZXR1cm4gR1NUX1BBRF9MSU5LX09LOworICB9IGVsc2UgaWYgIXN0cmNtcCAoc3RyLCAiYXVkaW8veC1yYXctaW50IikpIHsKKyAgICAvKiBTZWUgYWJvdmUsIGJ1dCBub3cgd2l0aCB0aGUgcmF3IGF1ZGlvIHRhZyAoMHgwMDAxKS4gKi8KKyAgICBbLi5dCisgICAgcmV0dXJuIEdTVF9QQURfTElOS19PSzsKKyAgfSBlbHNlIFsuLl0KK1suLl0KK30KKworc3RhdGljIHZvaWQKK2dzdF9hdmlfbXV4X2xvb3AgKEdzdEVsZW1lbnQgKmVsZW1lbnQpCit7CisgIEdzdEF2aU11eCAqbXV4ID0gR1NUX0FWSV9NVVggKGVsZW1lbnQpOworWy4uXQorICAvKiBBcyB3ZSBnZXQgaGVyZSwgd2Ugc2hvdWxkIGhhdmUgd3JpdHRlbiB0aGUgaGVhZGVyIGlmIHdlIGhhZG4ndCBkb25lCisgICAqIHRoYXQgYmVmb3JlIHlldCwgYW5kIHdlJ3JlIHN1cHBvc2VkIHRvIGhhdmUgYW4gaW50ZXJuYWwgYnVmZmVyIGZyb20KKyAgICogZWFjaCBwYWQsIGFsc28gZnJvbSB0aGUgYXVkaW8gb25lLiBTbyBoZXJlLCB3ZSBjaGVjayBhZ2FpbiB3aGV0aGVyCisgICAqIHRoaXMgaXMgdGhlIGZpcnN0IHJ1biBhbmQgaWYgc28sIHdlIHNldCBzdGF0aWMgY2Fwcy4gKi8KKyAgaWYgKG11eC0+Zmlyc3RfY3ljbGUpIHsKKyAgICBjb25zdCBHTGlzdCAqcGFkbGlzdCA9IGdzdF9lbGVtZW50X2dldF9wYWRfbGlzdCAoZWxlbWVudCk7CisgICAgR0xpc3QgKml0ZW07CisKKyAgICBmb3IgKGl0ZW0gPSBwYWRsaXN0OyBpdGVtICE9IE5VTEw7IGl0ZW0gPSBpdGVtLT5uZXh0KSB7CisgICAgICBHc3RQYWQgKnBhZCA9IGl0ZW0tPmRhdGE7CisgICAgICBHc3RDYXBzICpjYXBzOworCisgICAgICBpZiAoIUdTVF9QQURfSVNfU0lOSyAocGFkKSkKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIC8qIHNldCBzdGF0aWMgY2FwcyBoZXJlICovCisgICAgICBpZiAoIXN0cm5jbXAgKGdzdF9wYWRfZ2V0X25hbWUgKHBhZCksICJhdWRpb18iLCA2KSkgeworICAgICAgICAvKiB0aGUgc3RyZiBpcyB0aGUgc3RydWN0IHlvdSBmaWxsZWQgaW4gdGhlIF9saW5rICgpIGZ1bmN0aW9uLiAqLworICAgICAgICBzd2l0Y2ggKHN0cmYtPmZvcm1hdCkgeworICAgICAgICAgIGNhc2UgMHgwMDU1OiAvKiBtcDMgKi8KKyAgICAgICAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8vbXBlZyIsCisJCQkibXBlZ3ZlcnNpb24iLCBHX1RZUEVfSU5ULCAxLAorCQkJImxheWVyIiwgICAgICAgR19UWVBFX0lOVCwgMywKKwkJCSJiaXRyYXRlIiwgICAgIEdfVFlQRV9JTlQsIHN0cmYtPmF2X2JwcywKKwkJCSJyYXRlIiwgICAgICAgIEdfVFlQRV9JTlQsIHN0cmYtPnJhdGUsCisJCQkiY2hhbm5lbHMiLCAgICBHX1RZUEVfSU5ULCBzdHJmLT5jaGFubmVscywKKwkJCU5VTEwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAweDAwMDE6IC8qIHBjbSAqLworICAgICAgICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LXJhdy1pbnQiLAorCQkJCQlbLi5dKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIFsuLl0KKyAgICAgICAgfQorICAgICAgfSBlbHNlIGlmICghc3RybmNtcCAoZ3N0X3BhZF9nZXRfbmFtZSAocGFkKSwgInZpZGVvXyIsIDYpKSB7CisgICAgICAgIFsuLl0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGdfd2FybmluZyAoIm9pISIpOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgLyogc2V0IHN0YXRpYyBjYXBzICovCisgICAgICBnc3RfcGFkX3VzZV9leHBsaWNpdF9jYXBzIChwYWQpOworICAgICAgZ3N0X3BhZF9zZXRfZXhwbGljaXRfY2FwcyAocGFkLCBjYXBzKTsKKyAgICB9CisgIH0KK1suLl0KKyAgLyogTmV4dCBydW5zIHdpbGwgbmV2ZXIgYmUgdGhlIGZpcnN0IGFnYWluLiAqLworICBtdXgtPmZpcnN0X2N5Y2xlID0gRkFMU0U7Cit9CisgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8cGFyYT4KKyAgICAgIE5vdGUgdGhhdCB0aGVyZSBhcmUgb3RoZXIgd2F5cyB0byBhY2hpZXZlIHRoYXQsIHdoaWNoIG1pZ2h0IGJlIHVzZWZ1bAorICAgICAgZm9yIG1vcmUgY29tcGxleCBjYXNlcy4gVGhpcyB3aWxsIGRvIGZvciB0aGUgc2ltcGxlIGNhc2VzLCB0aG91Z2guCisgICAgICBUaGlzIG1ldGhvZCBpcyBwcm92aWRlZCB0byBzaW1wbGlmeSBuZWdvdGlhdGlvbiBhbmQgcmVuZWdvdGlhdGlvbiBpbgorICAgICAgbXV4ZXJzLCBpdCBpcyBub3QgYSBjb21wbGV0ZSBzb2x1dGlvbiwgbm9yIGlzIGl0IGEgcHJldHR5IG9uZS4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CistLT4KKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvcHdnL290aGVyLW9uZXRvbi54bWwgYi9kb2NzL3B3Zy9vdGhlci1vbmV0b24ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNjFiYWMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3B3Zy9vdGhlci1vbmV0b24ueG1sCkBAIC0wLDAgKzEsNDUgQEAKKzxjaGFwdGVyIGlkPSJjaGFwdGVyLW90aGVyLW9uZXRvbiIgeHJlZmxhYmVsPSJXcml0aW5nIGEgRGVtdXhlciBvciBQYXJzZXIiPgorICA8dGl0bGU+V3JpdGluZyBhIERlbXV4ZXIgb3IgUGFyc2VyPC90aXRsZT4KKyAgPHBhcmE+CisgICAgRGVtdXhlcnMgYXJlIHRoZSAxLXRvLU4gZWxlbWVudHMgdGhhdCBuZWVkIHZlcnkgc3BlY2lhbCBjYXJlLgorICAgIFRoZXkgYXJlIHJlc3BvbnNpYmxlIGZvciB0aW1lc3RhbXBpbmcgcmF3LCB1bnBhcnNlZCBkYXRhIGludG8KKyAgICBlbGVtZW50YXJ5IHZpZGVvIG9yIGF1ZGlvIHN0cmVhbXMsIGFuZCB0aGVyZSBhcmUgbWFueSB0aGluZ3MgdGhhdCB5b3UKKyAgICBjYW4gb3B0aW1pemUgb3IgZG8gd3JvbmcuIEhlcmUsIHNldmVyYWwgY3VscHJpdHMgd2lsbCBiZSBtZW50aW9uZWQKKyAgICBhbmQgY29tbW9uIHNvbHV0aW9ucyB3aWxsIGJlIG9mZmVyZWQuIFBhcnNlcnMgYXJlIGRlbXV4ZXJzIHdpdGggb25seQorICAgIG9uZSBzb3VyY2UgcGFkLiBBbHNvLCB0aGV5IG9ubHkgY3V0IHRoZSBzdHJlYW0gaW50byBidWZmZXJzLCB0aGV5CisgICAgZG9uJ3QgdG91Y2ggdGhlIGRhdGEgb3RoZXJ3aXNlLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgIEFzIG1lbnRpb25lZCBwcmV2aW91c2x5IGluIDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItbmVnb3RpYXRpb24iLz4sCisgICAgZGVtdXhlcnMgc2hvdWxkIHVzZSBmaXhlZCBjYXBzLCBzaW5jZSB0aGVpciBkYXRhIHR5cGUgd2lsbCBub3QgY2hhbmdlLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgIEFzIGRpc2N1c3NlZCBpbiA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLXNjaGVkdWxpbmciLz4sIGRlbXV4ZXIgZWxlbWVudHMKKyAgICBjYW4gYmUgd3JpdHRlbiBpbiBtdWx0aXBsZSB3YXlzOgorICA8L3BhcmE+CisgIDxpdGVtaXplZGxpc3Q+CisgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZXkgY2FuIGJlIHRoZSBkcml2aW5nIGZvcmNlIG9mIHRoZSBwaXBlbGluZSwgYnkgcnVubmluZyB0aGVpciBvd24KKyAgICAgICAgdGFzay4gVGhpcyB3b3JrcyBwYXJ0aWN1bGFybHkgd2VsbCBmb3IgZWxlbWVudHMgdGhhdCBuZWVkIHJhbmRvbQorICAgICAgICBhY2Nlc3MsIGZvciBleGFtcGxlIGFuIEFWSSBkZW11eGVyLgorICAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZXkgY2FuIGFsc28gcnVuIGluIHB1c2gtYmFzZWQgbW9kZSwgd2hpY2ggbWVhbnMgdGhhdCBhbiB1cHN0cmVhbQorICAgICAgICBlbGVtZW50IGRyaXZlcyB0aGUgcGlwZWxpbmUuIFRoaXMgd29ya3MgcGFydGljdWxhcmx5IHdlbGwgZm9yIHN0cmVhbXMKKyAgICAgICAgdGhhdCBtYXkgY29tZSBmcm9tIG5ldHdvcmssIHN1Y2ggYXMgT2dnLgorICAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgIDwvaXRlbWl6ZWRsaXN0PgorICA8cGFyYT4KKyAgICBJbiBhZGRpdGlvbiwgYXVkaW8gcGFyc2VycyB3aXRoIG9uZSBvdXRwdXQgY2FuLCBpbiB0aGVvcnksIGFsc28gYmUgd3JpdHRlbgorICAgIGluIHJhbmRvbSBhY2Nlc3MgbW9kZS4gQWx0aG91Z2ggc2ltcGxlIHBsYXliYWNrIHdpbGwgbW9zdGx5IHdvcmsgaWYgeW91cgorICAgIGVsZW1lbnQgb25seSBhY2NlcHRzIG9uZSBtb2RlLCBpdCBtYXkgYmUgcmVxdWlyZWQgdG8gaW1wbGVtZW50IG11bHRpcGxlCisgICAgbW9kZXMgdG8gd29yayBpbiBjb21iaW5hdGlvbiB3aXRoIGFsbCBzb3J0cyBvZiBhcHBsaWNhdGlvbnMsIHN1Y2ggYXMKKyAgICBlZGl0aW5nLiBBbHNvLCBwZXJmb3JtYW5jZSBtYXkgYmVjb21lIGJldHRlciBpZiB5b3UgaW1wbGVtZW50IG11bHRpcGxlCisgICAgbW9kZXMuIFNlZSA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLXNjaGVkdWxpbmciLz4gdG8gc2VlIGhvdyBhbiBlbGVtZW50CisgICAgY2FuIGFjY2VwdCBtdWx0aXBsZSBzY2hlZHVsaW5nIG1vZGVzLgorICA8L3BhcmE+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL3B3Zy9vdGhlci1zaW5rLnhtbCBiL2RvY3MvcHdnL290aGVyLXNpbmsueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMjIxMDYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3B3Zy9vdGhlci1zaW5rLnhtbApAQCAtMCwwICsxLDE2NyBAQAorCis8IS0tICMjIyMjIyMjIyMjIyBjaGFwdGVyICMjIyMjIyMjIyMjIyMgLS0+CisKKzxjaGFwdGVyIGlkPSJjaGFwdGVyLW90aGVyLXNpbmsiIHhyZWZsYWJlbD0iV3JpdGluZyBhIFNpbmsiPgorICA8dGl0bGU+V3JpdGluZyBhIFNpbms8L3RpdGxlPgorICA8cGFyYT4KKyAgICBTaW5rcyBhcmUgb3V0cHV0IGVsZW1lbnRzIHRoYXQsIG9wcG9zaXRlIHRvIHNvdXJjZXMsIGhhdmUgbm8gc291cmNlCisgICAgcGFkcyBhbmQgb25lIG9yIG1vcmUgKHVzdWFsbHkgb25lKSBzaW5rIHBhZC4gVGhleSBjYW4gYmUgc291bmQgY2FyZAorICAgIG91dHB1dHMsIGRpc2sgd3JpdGVycywgZXRjLiBUaGlzIGNoYXB0ZXIgd2lsbCBkaXNjdXNzIHRoZSBiYXNpYworICAgIGltcGxlbWVudGF0aW9uIG9mIHNpbmsgZWxlbWVudHMuCisgIDwvcGFyYT4KKworICA8c2VjdDEgaWQ9Im90aGVyLXNpbmstcHJvY2Vzc2luZyIgeHJlZmxhYmVsPSJEYXRhIHByb2Nlc3NpbmcsIGV2ZW50cywgc3luY2hyb25pemF0aW9uIGFuZCBjbG9ja3MiPgorICAgIDx0aXRsZT5EYXRhIHByb2Nlc3NpbmcsIGV2ZW50cywgc3luY2hyb25pemF0aW9uIGFuZCBjbG9ja3M8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgRXhjZXB0IGZvciBjb3JuZXIgY2FzZXMsIHNpbmsgZWxlbWVudHMgd2lsbCBiZSA8ZnVuY3Rpb24+X2NoYWluCisgICAgICAoKTwvZnVuY3Rpb24+LWJhc2VkIGVsZW1lbnRzLiBUaGUgY29uY2VwdCBvZiBzdWNoIGVsZW1lbnRzIGhhcworICAgICAgYmVlbiBkaXNjdXNzZWQgYmVmb3JlIGluIGRldGFpbCwgc28gdGhhdCB3aWxsIGJlIHNraXBwZWQgaGVyZS4gV2hhdAorICAgICAgaXMgdmVyeSBpbXBvcnRhbnQgaW4gc2luayBlbGVtZW50cywgc3BlY2lmaWNhbGx5IGluIHJlYWwtdGltZSBhdWRpbworICAgICAgYW5kIHZpZGVvIHNvdXJjZXMgKHN1Y2ggYXMgPGNsYXNzbmFtZT5vc3NzaW5rPC9jbGFzc25hbWU+IG9yCisgICAgICA8Y2xhc3NuYW1lPnhpbWFnZXNpbms8L2NsYXNzbmFtZT4pLCBpcyBldmVudCBoYW5kbGluZyBpbiB0aGUKKyAgICAgIDxmdW5jdGlvbj5fY2hhaW4gKCk8L2Z1bmN0aW9uPi1mdW5jdGlvbiwgYmVjYXVzZSBtb3N0IGVsZW1lbnRzIHJlbHkKKyAgICAgIG9uIEVPUy1oYW5kbGluZyBvZiB0aGUgc2luayBlbGVtZW50LCBhbmQgYmVjYXVzZSBBL1Ygc3luY2hyb25pemF0aW9uCisgICAgICBjYW4gb25seSBiZSBwZXJmZWN0IGlmIHRoZSBlbGVtZW50IHRha2VzIHRoaXMgaW50byBhY2NvdW50LgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIEhvdyB0byBhY2hpZXZlIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHN0cmVhbXMgZGVwZW5kcyBvbiB3aGV0aGVyCisgICAgICB5b3UncmUgYSBjbG9jay1wcm92aWRpbmcgb3IgYSBjbG9jay1yZWNlaXZpbmcgZWxlbWVudC4gSWYgeW91J3JlCisgICAgICB0aGUgY2xvY2sgcHJvdmlkZXIsIHlvdSBjYW4gZG8gd2l0aCB0aW1lIHdoYXRldmVyIHlvdSB3YW50LiBDb3JyZWN0CisgICAgICBoYW5kbGluZyB3b3VsZCBtZWFuIHRoYXQgeW91IGNoZWNrIHdoZXRoZXIgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMKKyAgICAgIGJ1ZmZlciAoaWYgYW55KSBhbmQgdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IGJ1ZmZlciBhcmUgdGhlIHNhbWUuCisgICAgICBJZiBzbywgdGhlcmUncyBubyBnYXAgYmV0d2VlbiB0aGUgdHdvIGFuZCB5b3UgY2FuIGNvbnRpbnVlIHBsYXlpbmcKKyAgICAgIHJpZ2h0IGF3YXkuIElmIHRoZXJlIGlzIGEgZ2FwLCB0aGVuIHlvdSdsbCBuZWVkIHRvIHdhaXQgZm9yIHlvdXIKKyAgICAgIGNsb2NrIHRvIHJlYWNoIHRoYXQgdGltZS4gSG93IHRvIGRvIHRoYXQgZGVwZW5kcyBvbiB0aGUgZWxlbWVudAorICAgICAgdHlwZS4gSW4gdGhlIGNhc2Ugb2YgYXVkaW8gb3V0cHV0IGVsZW1lbnRzLCB5b3Ugd291bGQgb3V0cHV0IHNpbGVuY2UKKyAgICAgIGZvciBhIHdoaWxlLiBJbiB0aGUgY2FzZSBvZiB2aWRlbywgeW91IHdvdWxkIHNob3cgYmFja2dyb3VuZCBjb2xvci4KKyAgICAgIEluIGNhc2Ugb2Ygc3VidGl0bGVzLCBzaG93IG5vIHN1YnRpdGxlcyBhdCBhbGwuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgSW4gdGhlIGNhc2UgdGhhdCB0aGUgcHJvdmlkZWQgY2xvY2sgYW5kIHRoZSByZWNlaXZlZCBjbG9jayBhcmUgbm90CisgICAgICB0aGUgc2FtZSAob3IgaW4gdGhlIGNhc2Ugd2hlcmUgeW91ciBlbGVtZW50IHByb3ZpZGVzIG5vIGNsb2NrLCB3aGljaAorICAgICAgaXMgdGhlIHNhbWUpLCB5b3Ugc2ltcGx5IHdhaXQgZm9yIHRoZSBjbG9jayB0byByZWFjaCB0aGUgdGltZXN0YW1wIG9mCisgICAgICB0aGUgY3VycmVudCBidWZmZXIgYW5kIHRoZW4geW91IGhhbmRsZSB0aGUgZGF0YSBpbiBpdC4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBBIHNpbXBsZSBkYXRhIGhhbmRsaW5nIGZ1bmN0aW9uIHdvdWxkIGxvb2sgbGlrZSB0aGlzOgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3Rpbmc+CitzdGF0aWMgdm9pZAorZ3N0X215X3NpbmtfY2hhaW4gKEdzdFBhZCAgKnBhZCwKKwkJICAgR3N0RGF0YSAqZGF0YSkKK3sKKyAgR3N0TXlTaW5rICpzaW5rID0gR1NUX01ZX1NJTksgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7CisgIEdzdEJ1ZmZlciAqYnVmOworICBHc3RDbG9ja1RpbWUgdGltZTsKKworICAvKiBvbmx5IG5lZWRlZCBpZiB0aGUgZWxlbWVudCBpcyBHU1RfRVZFTlRfQVdBUkUgKi8KKyAgaWYgKEdTVF9JU19FVkVOVCAoZGF0YSkpIHsKKyAgICBHc3RFdmVudCAqZXZlbnQgPSBHU1RfRVZFTlQgKGRhdGEpOworCisgICAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7CisgICAgICBjYXNlIEdTVF9FVkVOVF9FT1M6CisgICAgICAgIFsgaWYgeW91ciBlbGVtZW50IHByb3ZpZGVzIGEgY2xvY2ssIGRpc2FibGUgKGluYWN0aXZhdGUpIGl0IGhlcmUgXQorICAgICAgICAvKiBwYXNzLXRocm91Z2ggKi8KKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgLyogdGhlIGRlZmF1bHQgaGFuZGxlciBoYW5kbGVzIGRpc2NvbnRpbnVpdGllcywgZXZlbiBpZiB5b3VyCisgICAgICAgICAqIGVsZW1lbnQgcHJvdmlkZXMgYSBjbG9jayEgKi8KKyAgICAgICAgZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChwYWQsIGV2ZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuOworICB9CisKKyAgYnVmID0gR1NUX0JVRkZFUiAoZGF0YSk7CisgIGlmIChHU1RfQlVGRkVSX1RJTUVfSVNfVkFMSUQgKGJ1ZikpCisgICAgdGltZSA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpOworICBlbHNlCisgICAgdGltZSA9IHNpbmstPmV4cGVjdGVkX25leHRfdGltZTsKKworICAvKiBTeW5jaHJvbml6YXRpb24gLSB0aGUgcHJvcGVydHkgaXMgb25seSB1c2VmdWwgaW4gY2FzZSB0aGUKKyAgICogZWxlbWVudCBoYXMgdGhlIG9wdGlvbiBvZiBub3Qgc3luY2luZy4gU28gaXQgaXMgbm90IHVzZWZ1bAorICAgKiBmb3IgaGFyZHdhcmUtc3luYyAoY2xvY2stcHJvdmlkaW5nKSBlbGVtZW50cy4gKi8KKyAgaWYgKHNpbmstPnN5bmMpIHsKKyAgICAvKiBUaGlzIGNoZWNrIGlzIG9ubHkgbmVlZGVkIGlmIHlvdSBwcm92aWRlIGEgY2xvY2suIEVsc2UsCisgICAgICogeW91IGNhbiBhbHdheXMgZXhlY3V0ZSB0aGUgJ2Vsc2UnIGNsYXVzZS4gKi8KKyAgICBpZiAoc2luay0+cHJvdmlkZWRfY2xvY2sgPT0gc2luay0+cmVjZWl2ZWRfY2xvY2spIHsKKyAgICAgIC8qIEdTVF9TRUNPTkQgLyAxMCBpcyAwLDEgc2VjLCBpdCdzIGFuIGFyYml0cmFyeSB2YWx1ZS4gVGhlCisgICAgICAgKiBjYXN0cyBhcmUgbmVlZGVkIGJlY2F1c2UgZWxzZSBpdCdsbCBiZSB1bnNpZ25lZCBhbmQgd2UKKyAgICAgICAqIHdvbid0IGRldGVjdCBuZWdhdGl2ZSB2YWx1ZXMuICovCisgICAgICBpZiAobGxhYnMgKChnaW50NjQpIHNpbmstPmV4cGVjdGVkX25leHRfdGltZSAtIChnaW50NjQpIHRpbWUpID4KKyAgICAgICAgICAgIChHU1RfU0VDT05EIC8gMTApKSB7CisgICAgICAgIC8qIHNvIGFyZSB3ZSBhaGVhZCBvciBiZWhpbmQ/ICovCisgICAgICAgIGlmICh0aW1lID4gc2luay0+ZXhwZWN0ZWRfdGltZSkgeworICAgICAgICAgIC8qIHdlIG5lZWQgdG8gd2FpdCBhIHdoaWxlLi4uIEluIGNhc2Ugb2YgYXVkaW8sIG91dHB1dAorICAgICAgICAgICAqIHNpbGVuY2UuIEluIGNhc2Ugb2YgdmlkZW8sIG91dHB1dCBiYWNrZ3JvdW5kIGNvbG9yLgorICAgICAgICAgICAqIEluIGNhc2Ugb2Ygc3VidGl0bGVzLCBkaXNwbGF5IG5vdGhpbmcuICovCisgICAgICAgICAgWy4uXQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8qIERyb3AgZGF0YS4gKi8KKyAgICAgICAgICBbLi5dCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgLyogWW91IGNvdWxkIGRvIG1vcmUgc29waGlzdGljYXRlZCB0aGluZ3MgaGVyZSwgYnV0IHdlJ2xsCisgICAgICAgKiBrZWVwIGl0IHNpbXBsZSBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhlIGV4YW1wbGUuICovCisgICAgICBnc3RfZWxlbWVudF93YWl0IChHU1RfRUxFTUVOVCAoc2luayksIHRpbWUpOworICAgIH0KKyAgfQorCisgIC8qIEFuZCBub3cgaGFuZGxlIHRoZSBkYXRhLiAqLworWy4uXQorfQorICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJvdGhlci1zaW5rLWJ1ZmZlcnMiIHhyZWZsYWJlbD0iU3BlY2lhbCBtZW1vcnkiPgorICAgIDx0aXRsZT5TcGVjaWFsIG1lbW9yeTwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBMaWtlIHNvdXJjZSBlbGVtZW50cywgc2luayBlbGVtZW50cyBjYW4gc29tZXRpbWVzIHByb3ZpZGUgZXh0ZXJuYWxseQorICAgICAgYWxsb2NhdGVkIChzdWNoIGFzIFgtcHJvdmlkZWQgb3IgRE1BJ2FibGUpIG1lbW9yeSB0byBlbGVtZW50cyBlYXJsaWVyCisgICAgICBpbiB0aGUgcGlwZWxpbmUsIGFuZCB0aGVyZWJ5IHByZXZlbnQgdGhlIG5lZWQgZm9yCisgICAgICA8ZnVuY3Rpb24+bWVtY3B5ICgpPC9mdW5jdGlvbj4gZm9yIGluY29taW5nIGRhdGEuIFdlIGRvIHRoaXMgYnkKKyAgICAgIHByb3ZpZGluZyBhIHBhZC1hbGxvY2F0ZS1idWZmZXIgZnVuY3Rpb24uCisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz4KK3N0YXRpYyBHc3RCdWZmZXIgKglnc3RfbXlfc2lua19idWZmZXJfYWxsb2NhdGUJKEdzdFBhZCAqcGFkLAorCQkJCQkJCSBndWludDY0IG9mZnNldCwKKwkJCQkJCQkgZ3VpbnQgICBzaXplKTsKKworc3RhdGljIHZvaWQKK2dzdF9teV9zaW5rX2luaXQgKEdzdE15U2luayAqc2luaykKK3sKK1suLl0KKyAgZ3N0X3BhZF9zZXRfYnVmZmVyYWxsb2NfZnVuY3Rpb24gKHNpbmstPnNpbmtwYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3RfbXlfc2lua19idWZmZXJfYWxsb2NhdGUpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X215X3NpbmtfYnVmZmVyX2ZyZWUgKEdzdEJ1ZmZlciAqYnVmKQoreworICBHc3RNeVNpbmsgKnNpbmsgPSBHU1RfTVlfU0lOSyAoR1NUX0JVRkZFUl9QUklWQVRFIChidWYpKTsKKworICAvKiBEbyB3aGF0ZXZlciBpcyBuZWVkZWQgaGVyZS4gKi8KK1suLl0KK30KKworc3RhdGljIEdzdEJ1ZmZlciAqCitnc3RfbXlfc2lua19idWZmZXJfYWxsb2NhdGUgKEdzdFBhZCAqcGFkLAorCQkJICAgICBndWludDY0IG9mZnNldCwKKwkJCSAgICAgZ3VpbnQgICBzaXplKQoreworICBHc3RCdWZmZXIgKmJ1ZiA9IGdzdF9idWZmZXJfbmV3ICgpOworCisgIC8qIFNvIGhlcmUgaXQncyB1cCB0byB5b3UgdG8gd3JhcCB5b3VyIHByaXZhdGUgYnVmZmVycyBhbmQKKyAgICogcmV0dXJuIHRoYXQuICovCisgIEdTVF9CVUZGRVJfRlJFRV9EQVRBX0ZVTkMgKGJ1ZikgPSBnc3RfbXlfc2lua19idWZmZXJfZnJlZTsKKyAgR1NUX0JVRkZFUl9QUklWQVRFIChidWYpID0gc2luazsKKyAgR1NUX0JVRkZFUl9GTEFHX1NFVCAoYnVmLCBHU1RfQlVGRkVSX0RPTlRGUkVFKTsKK1suLl0KKworICByZXR1cm4gYnVmOworfQorICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDwvc2VjdDE+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL3B3Zy9vdGhlci1zb3VyY2UueG1sIGIvZG9jcy9wd2cvb3RoZXItc291cmNlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWFhYWZjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9wd2cvb3RoZXItc291cmNlLnhtbApAQCAtMCwwICsxLDQ3NSBAQAorCis8IS0tICMjIyMjIyMjIyMjIyBjaGFwdGVyICMjIyMjIyMjIyMjIyMgLS0+CisKKzxjaGFwdGVyIGlkPSJjaGFwdGVyLW90aGVyLXNvdXJjZSIgeHJlZmxhYmVsPSJXcml0aW5nIGEgU291cmNlIj4KKyAgPHRpdGxlPldyaXRpbmcgYSBTb3VyY2U8L3RpdGxlPgorICA8cGFyYT4KKyAgICBTb3VyY2UgZWxlbWVudHMgYXJlIHRoZSBzdGFydCBvZiBhIGRhdGEgc3RyZWFtaW5nIHBpcGVsaW5lLiBTb3VyY2UKKyAgICBlbGVtZW50cyBoYXZlIG5vIHNpbmsgcGFkcyBhbmQgaGF2ZSBvbmUgb3IgbW9yZSBzb3VyY2UgcGFkcy4gV2Ugd2lsbAorICAgIGZvY3VzIG9uIHNpbmdsZS1zb3VyY2VwYWQgZWxlbWVudHMgaGVyZSwgYnV0IHRoZSBjb25jZXB0cyBhcHBseSBlcXVhbGx5CisgICAgd2VsbCB0byBtdWx0aS1zb3VyY2VwYWQgZWxlbWVudHMuIFRoaXMgY2hhcHRlciB3aWxsIGV4cGxhaW4gdGhlIGVzc2VudGlhbHMKKyAgICBvZiBzb3VyY2UgZWxlbWVudHMsIHdoaWNoIGZlYXR1cmVzIGl0IHNob3VsZCBpbXBsZW1lbnQgYW5kIHdoaWNoIGl0CisgICAgZG9lc24ndCBoYXZlIHRvLCBhbmQgaG93IHNvdXJjZSBlbGVtZW50cyB3aWxsIGludGVyYWN0IHdpdGggb3RoZXIKKyAgICBlbGVtZW50cyBpbiBhIHBpcGVsaW5lLgorICA8L3BhcmE+CisKKyAgPHNlY3QxIGlkPSJzZWN0aW9uLXNvdXJjZS1nZXRmbiIgeHJlZmxhYmVsPSJUaGUgZ2V0KCktZnVuY3Rpb24iPgorICAgIDx0aXRsZT5UaGUgZ2V0KCktZnVuY3Rpb248L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgU291cmNlIGVsZW1lbnRzIGhhdmUgdGhlIHNwZWNpYWwgb3B0aW9uIG9mIGhhdmluZyBhCisgICAgICA8ZnVuY3Rpb24+X2dldCAoKTwvZnVuY3Rpb24+LWZ1bmN0aW9uIHJhdGhlciB0aGFuIGEKKyAgICAgIDxmdW5jdGlvbj5fbG9vcCAoKTwvZnVuY3Rpb24+LSBvciA8ZnVuY3Rpb24+X2NoYWluCisgICAgICAoKTwvZnVuY3Rpb24+LWZ1bmN0aW9uLiBBIDxmdW5jdGlvbj5fZ2V0ICgpPC9mdW5jdGlvbj4tZnVuY3Rpb24gaXMKKyAgICAgIGNhbGxlZCBieSB0aGUgc2NoZWR1bGVyIGV2ZXJ5IHRpbWUgdGhlIG5leHQgZWxlbWVudHMgbmVlZHMgZGF0YS4gQXBhcnQKKyAgICAgIGZyb20gY29ybmVyIGNhc2VzLCBldmVyeSBzb3VyY2UgZWxlbWVudCB3aWxsIHdhbnQgdG8gYmUgPGZ1bmN0aW9uPl9nZXQKKyAgICAgICgpPC9mdW5jdGlvbj4tYmFzZWQuCisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz4KK3N0YXRpYyBHc3REYXRhICoJZ3N0X215X3NvdXJjZV9nZXQJKEdzdFBhZCAqcGFkKTsKKworc3RhdGljIHZvaWQKK2dzdF9teV9zb3VyY2VfaW5pdCAoR3N0TXlTb3VyY2UgKnNyYykKK3sKK1suLl0KKyAgZ3N0X3BhZF9zZXRfZ2V0X2Z1bmN0aW9uIChzcmMtPnNyY3BhZCwgZ3N0X215X3NvdXJjZV9nZXQpOworfQorCitzdGF0aWMgR3N0RGF0YSAqCitnc3RfbXlfc291cmNlX2dldCAoR3N0UGFkICpwYWQpCit7CisgIEdzdEJ1ZmZlciAqYnVmZmVyOworCisgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOworICBHU1RfQlVGRkVSX0RBVEEgKGJ1ZikgPSBnX3N0cmR1cCAoImhlbGxvIHBpcGVsaW5lISIpOworICBHU1RfQlVGRkVSX1NJWkUgKGJ1ZikgPSBzdHJsZW4gKEdTVF9CVUZGRVJfREFUQSAoYnVmKSk7CisgIC8qIHRlcm1pbmF0aW5nICcvMCcgKi8KKyAgR1NUX0JVRkZFUl9NQVpTSVpFIChidWYpID0gR1NUX0JVRkZFUl9TSVpFIChidWYpICsgMTsKKworICByZXR1cm4gR1NUX0RBVEEgKGJ1ZmZlcik7Cit9CisgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tc291cmNlLXBhZGZuIiB4cmVmbGFiZWw9IkV2ZW50cywgcXVlcnlpbmcgYW5kIGNvbnZlcnRpbmciPgorICAgIDx0aXRsZT5FdmVudHMsIHF1ZXJ5aW5nIGFuZCBjb252ZXJ0aW5nPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIE9uZSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQgZnVuY3Rpb25zIG9mIHNvdXJjZSBlbGVtZW50cyBpcyB0bworICAgICAgaW1wbGVtZW50IGNvcnJlY3QgcXVlcnksIGNvbnZlcnQgYW5kIGV2ZW50IGhhbmRsaW5nIGZ1bmN0aW9ucy4KKyAgICAgIFRob3NlIHdpbGwgY29udGludW91c2x5IGRlc2NyaWJlIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzdHJlYW0uCisgICAgICBRdWVyeSBmdW5jdGlvbnMgY2FuIGJlIHVzZWQgdG8gZ2V0IHN0cmVhbSBwcm9wZXJ0aWVzIHN1Y2ggYXMgY3VycmVudAorICAgICAgcG9zaXRpb24gYW5kIGxlbmd0aC4gVGhpcyBjYW4gYmUgdXNlZCBieSBmZWxsb3cgZWxlbWVudHMgdG8gY29udmVydAorICAgICAgdGhpcyBzYW1lIHZhbHVlIGludG8gYSBkaWZmZXJlbnQgdW5pdCwgb3IgYnkgYXBwbGljYXRpb25zIHRvIHByb3ZpZGUKKyAgICAgIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsZW5ndGgvcG9zaXRpb24gb2YgdGhlIHN0cmVhbSB0byB0aGUgdXNlci4KKyAgICAgIENvbnZlcnNpb24gZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGNvbnZlcnQgc3VjaCB2YWx1ZXMgZnJvbSBvbmUgdW5pdAorICAgICAgdG8gYW5vdGhlci4gTGFzdGx5LCBldmVudHMgYXJlIG1vc3RseSB1c2VkIHRvIHNlZWsgdG8gcG9zaXRpb25zCisgICAgICBpbnNpZGUgdGhlIHN0cmVhbS4gQW55IGZ1bmN0aW9uIGlzIGVzc2VudGlhbGx5IG9wdGlvbmFsLCBidXQgdGhlCisgICAgICBlbGVtZW50IHNob3VsZCB0cnkgdG8gcHJvdmlkZSBhcyBtdWNoIGluZm9ybWF0aW9uIGFzIGl0IGtub3dzLiBOb3RlCisgICAgICB0aGF0IGVsZW1lbnRzIHByb3ZpZGluZyBhbiBldmVudCBmdW5jdGlvbiBzaG91bGQgYWxzbyBsaXN0IHRoZWlyCisgICAgICBzdXBwb3J0ZWQgZXZlbnRzIGluIGFuIDxmdW5jdGlvbj5fZ2V0X2V2ZW50X21hc2sgKCk8L2Z1bmN0aW9uPgorICAgICAgZnVuY3Rpb24uIEVsZW1lbnRzIHN1cHBvcnRpbmcgcXVlcnkgb3BlcmF0aW9ucyBzaG91bGQgbGlzdCB0aGUKKyAgICAgIHN1cHBvcnRlZCBvcGVyYXRpb25zIGluIGEgPGZ1bmN0aW9uPl9nZXRfcXVlcnlfdHlwZXMKKyAgICAgICgpPC9mdW5jdGlvbj4gZnVuY3Rpb24uIEVsZW1lbnRzIHN1cHBvcnRpbmcgZWl0aGVyIGNvbnZlcnNpb24KKyAgICAgIG9yIHF1ZXJ5IG9wZXJhdGlvbnMgc2hvdWxkIGFsc28gaW1wbGVtZW50IGEgPGZ1bmN0aW9uPl9nZXRfZm9ybWF0cworICAgICAgKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbi4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBBbiBleGFtcGxlIHNvdXJjZSBlbGVtZW50IGNvdWxkLCBmb3IgZXhhbXBsZSwgYmUgYW4gZWxlbWVudCB0aGF0CisgICAgICBjb250aW51b3VzbHkgZ2VuZXJhdGVzIGEgd2F2ZSB0b25lIGF0IDQ0LDEga0h6LCBtb25vLCAxNi1iaXQuIFRoaXMKKyAgICAgIGVsZW1lbnQgd2lsbCBnZW5lcmF0ZSA0NDEwMCBhdWRpbyBzYW1wbGVzIHBlciBzZWNvbmQgb3IgODgsMiBrQi9zLgorICAgICAgVGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgc3VjaCBmdW5jdGlvbnM6CisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz4KK3N0YXRpYyBHc3RGb3JtYXQgKglnc3RfbXlfc291cmNlX2Zvcm1hdF9saXN0CShHc3RQYWQgICAgICAqcGFkKTsKK3N0YXRpYyBHc3RRdWVyeVR5cGUgKglnc3RfbXlfc291cmNlX3F1ZXJ5X2xpc3QJKEdzdFBhZCAgICAgICpwYWQpOworCitzdGF0aWMgZ2Jvb2xlYW4JCWdzdF9teV9zb3VyY2VfY29udmVydAkJKEdzdFBhZCAgICAgICpwYWQsCisJCQkJCQkJIEdzdEZvcm1hdCAgICBmcm9tX2ZtdCwKKwkJCQkJCQkgZ2ludDY0ICAgICAgIGZyb21fdmFsLAorCQkJCQkJCSBHc3RGb3JtYXQgICAqdG9fZm10LAorCQkJCQkJCSBnaW50NjQgICAgICAqdG9fdmFsKTsKK3N0YXRpYyBnYm9vbGVhbgkJZ3N0X215X3NvdXJjZV9xdWVyeQkJKEdzdFBhZCAgICAgICpwYWQsCisJCQkJCQkJIEdzdFF1ZXJ5VHlwZSB0eXBlLAorCQkJCQkJCSBHc3RGb3JtYXQgICAqdG9fZm10LAorCQkJCQkJCSBnaW50NjQgICAgICAqdG9fdmFsKTsKKworc3RhdGljIHZvaWQKK2dzdF9teV9zb3VyY2VfaW5pdCAoR3N0TXlTb3VyY2UgKnNyYykKK3sKK1suLl0KKyAgZ3N0X3BhZF9zZXRfY29udmVydF9mdW5jdGlvbiAoc3JjLT5zcmNwYWQsIGdzdF9teV9zb3VyY2VfY29udmVydCk7CisgIGdzdF9wYWRfc2V0X2Zvcm1hdHNfZnVuY3Rpb24gKHNyYy0+c3JjcGFkLCBnc3RfbXlfc291cmNlX2Zvcm1hdF9saXN0KTsKKyAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKHNyYy0+c3JjcGFkLCBnc3RfbXlfc291cmNlX3F1ZXJ5KTsKKyAgZ3N0X3BhZF9zZXRfcXVlcnlfdHlwZV9mdW5jdGlvbiAoc3JjLT5zcmNwYWQsIGdzdF9teV9zb3VyY2VfcXVlcnlfbGlzdCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gZW51bWVyYXRpb24gb2Ygc3VwcG9ydGVkIEdzdEZvcm1hdAorICogdHlwZXMgaW4gdGhlIHF1ZXJ5KCkgb3IgY29udmVydCgpIGZ1bmN0aW9ucy4gU2VlIGdzdC9nc3Rmb3JtYXQuaAorICogZm9yIGEgZnVsbCBsaXN0LgorICovCisKK3N0YXRpYyBHc3RGb3JtYXQgKgorZ3N0X215X3NvdXJjZV9mb3JtYXRfbGlzdCAoR3N0UGFkICpwYWQpCit7CisgIHN0YXRpYyBjb25zdCBHc3RGb3JtYXQgZm9ybWF0c1tdID0geworICAgIEdTVF9GT1JNQVRfVElNRSwKKyAgICBHU1RfRk9STUFUX0RFRkFVTFQsIC8qIG1lYW5zICJhdWRpbyBzYW1wbGVzIiAqLworICAgIEdTVF9GT1JNQVRfQllURVMsCisgICAgMAorICB9OworCisgIHJldHVybiBmb3JtYXRzOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVudW1lcmF0aW9uIG9mIHRoZSBzdXBwb3J0ZWQgcXVlcnkoKQorICogb3BlcmF0aW9ucy4gU2luY2Ugd2UgZ2VuZXJhdGUgYXVkaW8gaW50ZXJuYWxseSwgd2Ugb25seSBwcm92aWRlCisgKiBhbiBpbmRpY2F0aW9uIG9mIGhvdyBtYW55IHNhbXBsZXMgd2UndmUgcGxheWVkIHNvIGZhci4gRmlsZSBzb3VyY2VzCisgKiBvciBzdWNoIGVsZW1lbnRzIGNvdWxkIGFsc28gcHJvdmlkZSBHU1RfUVVFUllfVE9UQUwgZm9yIHRoZSB0b3RhbAorICogc3RyZWFtIGxlbmd0aCwgb3Igb3RoZXIgdGhpbmdzLiBTZWUgZ3N0L2dzdHF1ZXJ5LmggZm9yIGRldGFpbHMuCisgKi8KKworc3RhdGljIEdzdFF1ZXJ5VHlwZSAqCitnc3RfbXlfc291cmNlX3F1ZXJ5X2xpc3QgKEdzdFBhZCAqcGFkKQoreworICBzdGF0aWMgY29uc3QgR3N0UXVlcnlUeXBlIHF1ZXJ5X3R5cGVzW10gPSB7CisgICAgR1NUX1FVRVJZX1BPU0lUSU9OLAorICAgIDAsCisgIH07CisKKyAgcmV0dXJuIHF1ZXJ5X3R5cGVzOworfQorCisvKgorICogQW5kIGJlbG93IGFyZSB0aGUgbG9naWNhbCBpbXBsZW1lbnRhdGlvbnMuCisgKi8KKworc3RhdGljIGdib29sZWFuCitnc3RfbXlfc291cmNlX2NvbnZlcnQgKEdzdFBhZCAgICAqcGFkLAorCQkgICAgICAgR3N0Rm9ybWF0ICBmcm9tX2ZtdCwKKwkJICAgICAgIGdpbnQ2NCAgICAgZnJvbV92YWwsCisJCSAgICAgICBHc3RGb3JtYXQgKnRvX2ZtdCwKKwkJICAgICAgIGdpbnQ2NCAgICAqdG9fdmFsKQoreworICBnYm9vbGVhbiByZXMgPSBUUlVFOworICBHc3RNeVNvdXJjZSAqc3JjID0gR1NUX01ZX1NPVVJDRSAoZ3N0X3BhZF9nZXRfcGFyZW50IChwYWQpKTsKKworICBzd2l0Y2ggKGZyb21fZm10KSB7CisgICAgY2FzZSBHU1RfRk9STUFUX1RJTUU6CisgICAgICBzd2l0Y2ggKCp0b19mbXQpIHsKKyAgICAgICAgY2FzZSBHU1RfRk9STUFUX1RJTUU6CisgICAgICAgICAgLyogbm90aGluZyAqLworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9CWVRFUzoKKyAgICAgICAgICAqdG9fdmFsID0gZnJvbV92YWwgLyAoR1NUX1NFQ09ORCAvICg0NDEwMCAqIDIpKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdTVF9GT1JNQVRfREVGQVVMVDoKKyAgICAgICAgICAqdG9fdmFsID0gZnJvbV92YWwgLyAoR1NUX1NFQ09ORCAvIDQ0MTAwKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHJlcyA9IEZBTFNFOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdTVF9GT1JNQVRfQllURVM6CisgICAgICBzd2l0Y2ggKCp0b19mbXQpIHsKKyAgICAgICAgY2FzZSBHU1RfRk9STUFUX1RJTUU6CisgICAgICAgICAgKnRvX3ZhbCA9IGZyb21fdmFsICogKEdTVF9TRUNPTkQgLyAoNDQxMDAgKiAyKSk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHU1RfRk9STUFUX0JZVEVTOgorICAgICAgICAgIC8qIG5vdGhpbmcgKi8KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdTVF9GT1JNQVRfREVGQVVMVDoKKyAgICAgICAgICAqdG9fdmFsID0gZnJvbV92YWwgLyAyOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgcmVzID0gRkFMU0U7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgR1NUX0ZPUk1BVF9ERUZBVUxUOgorICAgICAgc3dpdGNoICgqdG9fZm10KSB7CisgICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9USU1FOgorICAgICAgICAgICp0b192YWwgPSBmcm9tX3ZhbCAqIChHU1RfU0VDT05EIC8gNDQxMDApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9CWVRFUzoKKyAgICAgICAgICAqdG9fdmFsID0gZnJvbV92YWwgKiAyOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9ERUZBVUxUOgorICAgICAgICAgIC8qIG5vdGhpbmcgKi8KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHJlcyA9IEZBTFNFOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgcmVzID0gRkFMU0U7CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X215X3NvdXJjZV9xdWVyeSAoR3N0UGFkICAgICAgKnBhZCwKKwkJICAgICBHc3RRdWVyeVR5cGUgdHlwZSwKKwkJICAgICBHc3RGb3JtYXQgICAqdG9fZm10LAorCQkgICAgIGdpbnQ2NCAgICAgICp0b192YWwpCit7CisgIEdzdE15U291cmNlICpzcmMgPSBHU1RfTVlfU09VUkNFIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOworICBnYm9vbGVhbiByZXMgPSBUUlVFOworCisgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR1NUX1FVRVJZX1BPU0lUSU9OOgorICAgICAgcmVzID0gZ3N0X3BhZF9jb252ZXJ0IChwYWQsIEdTVF9GT1JNQVRfQllURVMsIHNyYy0+dG90YWxfYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvX2ZtdCwgdG9fdmFsKTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIHJlcyA9IEZBTFNFOworICAgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gcmVzOworfQorICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+CisgICAgICBCZSBzdXJlIHRvIGluY3JlYXNlIHNyYy0+dG90YWxfYnl0ZXMgYWZ0ZXIgZWFjaCBjYWxsIHRvIHlvdXIKKyAgICAgIDxmdW5jdGlvbj5fZ2V0ICgpPC9mdW5jdGlvbj4gZnVuY3Rpb24uCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgRXZlbnQgaGFuZGxpbmcgaGFzIGFscmVhZHkgYmVlbiBleHBsYWluZWQgcHJldmlvdXNseSBpbiB0aGUgZXZlbnRzCisgICAgICBjaGFwdGVyLgorICAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9InNlY3Rpb24tc291cmNlLXN5bmMiIHhyZWZsYWJlbD0iVGltZSwgY2xvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiI+CisgICAgPHRpdGxlPlRpbWUsIGNsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb248L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgVGhlIGFib3ZlIGV4YW1wbGUgZG9lcyBub3QgcHJvdmlkZSBhbnkgdGltaW5nIGluZm8sIGJ1dCB3aWxsIHN1ZmZpY2UKKyAgICAgIGZvciBlbGVtZW50YXJ5IGRhdGEgc291cmNlcyBzdWNoIGFzIGEgZmlsZSBzb3VyY2Ugb3IgbmV0d29yayBkYXRhCisgICAgICBzb3VyY2UgZWxlbWVudC4gVGhpbmdzIGJlY29tZSBzbGlnaHRseSBtb3JlIGNvbXBsaWNhdGVkLCBidXQgc3RpbGwKKyAgICAgIHZlcnkgc2ltcGxlLCBpZiB3ZSBjcmVhdGUgYXJ0aWZpY2lhbCB2aWRlbyBvciBhdWRpbyBkYXRhIHNvdXJjZXMsCisgICAgICBzdWNoIGFzIGEgdmlkZW8gdGVzdCBpbWFnZSBzb3VyY2Ugb3IgYW4gYXJ0aWZpY2lhbCBhdWRpbyBzb3VyY2UgKGUuZy4KKyAgICAgIDxjbGFzc25hbWU+YXVkaW90ZXN0c3JjPC9jbGFzc25hbWU+KS4KKyAgICAgIEl0IHdpbGwgYmVjb21lIG1vcmUgY29tcGxpY2F0ZWQgaWYgd2Ugd2FudCB0aGUgZWxlbWVudCB0byBiZSBhCisgICAgICByZWFsdGltZSBjYXB0dXJlIHNvdXJjZSwgc3VjaCBhcyBhIHZpZGVvNGxpbnV4IHNvdXJjZSAoZm9yIHJlYWRpbmcKKyAgICAgIHZpZGVvIGZyYW1lcyBmcm9tIGEgVFYgY2FyZCkgb3IgYW4gQUxTQSBzb3VyY2UgKGZvciByZWFkaW5nIGRhdGEKKyAgICAgIGZyb20gc291bmRjYXJkcyBzdXBwb3J0ZWQgYnkgYW4gQUxTQS1kcml2ZXIpLiBIZXJlLCB3ZSB3aWxsIG5lZWQgdG8KKyAgICAgIG1ha2UgdGhlIGVsZW1lbnQgYXdhcmUgb2YgdGltaW5nIGFuZCBjbG9ja2luZy4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBUaW1lc3RhbXBzIGNhbiBlc3NlbnRpYWxseSBiZSBnZW5lcmF0ZWQgZnJvbSBhbGwgdGhlIGluZm9ybWF0aW9uCisgICAgICBnaXZlbiBhYm92ZSB3aXRob3V0IGFueSBkaWZmaWN1bHR5LiBXZSBjb3VsZCBhZGQgYSB2ZXJ5IHNtYWxsIGFtb3VudAorICAgICAgb2YgY29kZSB0byBnZW5lcmF0ZSBwZXJmZWN0bHkgdGltZXN0YW1wZWQgYnVmZmVycyBmcm9tIG91cgorICAgICAgPGZ1bmN0aW9uPl9nZXQgKCk8L2Z1bmN0aW9uPi1mdW5jdGlvbjoKKyAgICA8L3BhcmE+CisgICAgPHByb2dyYW1saXN0aW5nPgorc3RhdGljIHZvaWQKK2dzdF9teV9zb3VyY2VfaW5pdCAoR3N0TXlTb3VyY2UgKnNyYykKK3sKK1suLl0KKyAgc3JjLT50b3RhbF9ieXRlcyA9IDA7Cit9CisKK3N0YXRpYyBHc3REYXRhICoKK2dzdF9teV9zb3VyY2VfZ2V0IChHc3RQYWQgKnBhZCkKK3sKKyAgR3N0TXlTb3VyY2UgKnNyYyA9IEdTVF9NWV9TT1VSQ0UgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7CisgIEdzdEJ1ZmZlciAqYnVmOworICBHc3RGb3JtYXQgZm10ID0gR1NUX0ZPUk1BVF9USU1FOworWy4uXQorICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpID0gR1NUX0JVRkZFUl9TSVpFIChidWYpICogKEdTVF9TRUNPTkQgLyAoNDQxMDAgKiAyKSk7CisgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpID0gc3JjLT50b3RhbF9ieXRlcyAqIChHU1RfU0VDT05EIC8gKDQ0MTAwICogMikpOworICBzcmMtPnRvdGFsX2J5dGVzICs9IEdTVF9CVUZGRVJfU0laRSAoYnVmKTsKKworICByZXR1cm4gR1NUX0RBVEEgKGJ1Zik7Cit9CisKK3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgorZ3N0X215X3NvdXJjZV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCit7CisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzsKKyAgR3N0TXlTb3VyY2UgKnNyYyA9IEdTVF9NWV9TT1VSQ0UgKGVsZW1lbnQpOworCisgIC8qIEZpcnN0LCBoYW5kbGUgdXB3YXJkcyBzdGF0ZSBjaGFuZ2VzICovCisgIHN3aXRjaCAodHJhbnNpdGlvbikgeworICAgIGNhc2UgR1NUX1NUQVRFX1JFQURZX1RPX1BBVVNFRDoKKyAgICAgIC8qIGRvIHNvbWV0aGluZyAqLworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktJmd0O2NoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7CisgIGlmIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKQorICAgIHJldHVybiByZXQ7CisKKyAgLyogTm93IGhhbmRsZSBkb3dud2FyZHMgc3RhdGUgY2hhbmdlcyBhZnRlciBjaGFpbmluZyB1cCAqLworICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAgICBjYXNlIEdTVF9TVEFURV9QQVVTRURfVE9fUkVBRFk6CisgICAgICBzcmMtPnRvdGFsX2J5dGVzID0gMDsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiByZXQ7Cit9CisgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8cGFyYT4KKyAgICAgIFRoYXQgd2Fzbid0IHRvbyBoYXJkLiBOb3csIGxldCdzIGFzc3VtZSByZWFsLXRpbWUgZWxlbWVudHMuIFRob3NlCisgICAgICBjYW4gZWl0aGVyIGhhdmUgaGFyZHdhcmUtdGltaW5nLCBpbiB3aGljaCBjYXNlIHdlIGNhbiByZWx5IG9uIGJhY2tlbmRzCisgICAgICB0byBwcm92aWRlIHN5bmMgZm9yIHVzIChpbiB3aGljaCBjYXNlIHlvdSBwcm9iYWJseSB3YW50IHRvIHByb3ZpZGUgYQorICAgICAgY2xvY2spLCBvciB3ZSB3aWxsIGhhdmUgdG8gZW11bGF0ZSB0aGF0IGludGVybmFsbHkgKGUuZy4gdG8gYWNxdWlyZQorICAgICAgc3luYyBpbiBhcnRpZmljaWFsIGRhdGEgZWxlbWVudHMgc3VjaCBhcworICAgICAgPGNsYXNzbmFtZT5hdWRpb3Rlc3RzcmM8L2NsYXNzbmFtZT4pLgorICAgICAgTGV0J3MgZmlyc3QgbG9vayBhdCB0aGUgc2Vjb25kIG9wdGlvbiAoc29mdHdhcmUgc3luYykuIFRoZSBmaXJzdCBvcHRpb24KKyAgICAgIChoYXJkd2FyZSBzeW5jICsgcHJvdmlkaW5nIGEgY2xvY2spIGRvZXMgbm90IHJlcXVpcmUgYW55IHNwZWNpYWwgY29kZQorICAgICAgd2l0aCByZXNwZWN0IHRvIHRpbWluZywgYW5kIHRoZSBjbG9ja2luZyBzZWN0aW9uIGFscmVhZHkgZXhwbGFpbmVkIGhvdworICAgICAgdG8gcHJvdmlkZSBhIGNsb2NrLgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3Rpbmc+CitlbnVtIHsKKyAgQVJHXzAsCitbLi5dCisgIEFSR19TWU5DLAorWy4uXQorfTsKKworc3RhdGljIHZvaWQKK2dzdF9teV9zb3VyY2VfY2xhc3NfaW5pdCAoR3N0TXlTb3VyY2VDbGFzcyAqa2xhc3MpCit7CisgIEdPYmplY3RDbGFzcyAqb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKK1suLl0KKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAob2JqZWN0X2NsYXNzLCBBUkdfU1lOQywKKyAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgic3luYyIsICJTeW5jIiwgIlN5bmNocm9uaXplIHRvIGNsb2NrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwgR19QQVJBTV9SRUFEV1JJVEUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CitbLi5dCit9CisKK3N0YXRpYyB2b2lkCitnc3RfbXlfc291cmNlX2luaXQgKEdzdE15U291cmNlICpzcmMpCit7CitbLi5dCisgIHNyYy0+c3luYyA9IEZBTFNFOworfQorCitzdGF0aWMgR3N0RGF0YSAqCitnc3RfbXlfc291cmNlX2dldCAoR3N0UGFkICpwYWQpCit7CisgIEdzdE15U291cmNlICpzcmMgPSBHU1RfTVlfU09VUkNFIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOworICBHc3RCdWZmZXIgKmJ1ZjsKK1suLl0KKyAgaWYgKHNyYy0+c3luYykgeworICAgIC8qIHdhaXQgb24gY2xvY2sgKi8KKyAgICBnc3RfZWxlbWVudF93YWl0IChHU1RfRUxFTUVOVCAoc3JjKSwgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZikpOworICB9CisKKyAgcmV0dXJuIEdTVF9EQVRBIChidWYpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X215X3NvdXJjZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgICAgKm9iamVjdCwKKwkJCSAgICBndWludCAgICAgICBwcm9wX2lkLAorCQkJICAgIEdQYXJhbVNwZWMgKnBzcGVjLAorCQkJICAgIEdWYWx1ZSAgICAgKnZhbHVlKQoreworICBHc3RNeVNvdXJjZSAqc3JjID0gR1NUX01ZX1NPVVJDRSAoZ3N0X3BhZF9nZXRfcGFyZW50IChwYWQpKTsKKworICBzd2l0Y2ggKHByb3BfaWQpIHsKK1suLl0KKyAgICBjYXNlIEFSR19TWU5DOgorICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHNyYy0+c3luYyk7CisgICAgICBicmVhazsKK1suLl0KKyAgfQorfQorCitzdGF0aWMgdm9pZAorZ3N0X215X3NvdXJjZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgICAgICAqb2JqZWN0LAorCQkJICAgIGd1aW50ICAgICAgICAgcHJvcF9pZCwKKwkJCSAgICBHUGFyYW1TcGVjICAgKnBzcGVjLAorCQkJICAgIGNvbnN0IEdWYWx1ZSAqdmFsdWUpCit7CisgIEdzdE15U291cmNlICpzcmMgPSBHU1RfTVlfU09VUkNFIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOworCisgIHN3aXRjaCAocHJvcF9pZCkgeworWy4uXQorICAgIGNhc2UgQVJHX1NZTkM6CisgICAgICBzcmMtPnN5bmMgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7CisgICAgICBicmVhazsKK1suLl0KKyAgfQorfQorICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+CisgICAgICBNb3N0IG9mIHRoaXMgaXMgR09iamVjdCB3cmFwcGluZyBjb2RlLiBUaGUgYWN0dWFsIGNvZGUgdG8gZG8KKyAgICAgIHNvZnR3YXJlLXN5bmMgKGluIHRoZSA8ZnVuY3Rpb24+X2dldCAoKTwvZnVuY3Rpb24+LWZ1bmN0aW9uKQorICAgICAgaXMgcmVsYXRpdmVseSBzbWFsbC4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDE+CisgIDxzZWN0MSBpZD0ic2VjdGlvbi1zb3VyY2UtYnVmZmVycyIgeHJlZmxhYmVsPSJVc2luZyBzcGVjaWFsIG1lbW9yeSI+CisgICAgPHRpdGxlPlVzaW5nIHNwZWNpYWwgbWVtb3J5PC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIEluIHNvbWUgY2FzZXMsIGl0IG1pZ2h0IGJlIHVzZWZ1bCB0byB1c2Ugc3BlY2lhbGx5IGFsbG9jYXRlZCBtZW1vcnkKKyAgICAgIChlLmcuIDxmdW5jdGlvbj5tbWFwICgpPC9mdW5jdGlvbj4nZWQgRE1BJ2FibGUgbWVtb3J5KSBpbgorICAgICAgeW91ciBidWZmZXJzLCBhbmQgdGhvc2Ugd2lsbCByZXF1aXJlIHNwZWNpYWwgaGFuZGxpbmcgd2hlbiB0aGV5IGFyZQorICAgICAgYmVpbmcgZGVyZWZlcmVuY2VkLiBGb3IgdGhpcywgJkdTdHJlYW1lcjsgdXNlcyB0aGUgY29uY2VwdCBvZgorICAgICAgYnVmZmVyLWZyZWUgZnVuY3Rpb25zLiBUaG9zZSBhcmUgc3BlY2lhbCBmdW5jdGlvbnMgcG9pbnRlcnMgdGhhdCBhbgorICAgICAgZWxlbWVudCBjYW4gc2V0IG9uIGJ1ZmZlcnMgdGhhdCBpdCBjcmVhdGVkIGl0c2VsZi4gVGhlIGdpdmVuIGZ1bmN0aW9uCisgICAgICB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBidWZmZXIgaGFzIGJlZW4gZGVyZWZlcmVuY2VkLCBzbyB0aGF0IHRoZQorICAgICAgZWxlbWVudCBjYW4gY2xlYW4gdXAgb3IgcmUtdXNlIG1lbW9yeSBpbnRlcm5hbGx5IHJhdGhlciB0aGFuIHVzaW5nCisgICAgICB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiAod2hpY2ggc2ltcGx5IGNhbGxzCisgICAgICA8ZnVuY3Rpb24+Z19mcmVlICgpPC9mdW5jdGlvbj4gb24gdGhlIGRhdGEgcG9pbnRlcikuCisgICAgPC9wYXJhPgorICAgIDxwcm9ncmFtbGlzdGluZz4KK3N0YXRpYyB2b2lkCitnc3RfbXlfc291cmNlX2J1ZmZlcl9mcmVlIChHc3RCdWZmZXIgKmJ1ZikKK3sKKyAgR3N0TXlTb3VyY2UgKnNyYyA9IEdTVF9NWV9TT1VSQ0UgKEdTVF9CVUZGRVJfUFJJVkFURSAoYnVmKSk7CisKKyAgLyogZG8gdXNlZnVsIHRoaW5ncyBoZXJlLCBsaWtlIHJlLXF1ZXVlaW5nIHRoZSBidWZmZXIgd2hpY2gKKyAgICogbWFrZXMgaXQgYXZhaWxhYmxlIGZvciBETUEgYWdhaW4uIFRoZSBkZWZhdWx0IGhhbmRsZXIgd2lsbAorICAgKiBub3QgZnJlZSB0aGlzIGJ1ZmZlciBiZWNhdXNlIG9mIHRoZSBHU1RfQlVGRkVSX0RPTlRGUkVFCisgICAqIGZsYWcuICovCit9CisKK3N0YXRpYyBHc3REYXRhICoKK2dzdF9teV9zb3VyY2VfZ2V0IChHc3RQYWQgKnBhZCkKK3sKKyAgR3N0TXlTb3VyY2UgKnNyYyA9IEdTVF9NWV9TT1VSQ0UgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7CisgIEdzdEJ1ZmZlciAqYnVmOworWy4uXQorICBidWYgPSBnc3RfYnVmZmVyX25ldyAoKTsKKyAgR1NUX0JVRkZFUl9GUkVFX0RBVEFfRlVOQyAoYnVmKSA9IGdzdF9teV9zb3VyY2VfYnVmZmVyX2ZyZWU7CisgIEdTVF9CVUZGRVJfUFJJVkFURSAoYnVmKSA9IHNyYzsKKyAgR1NUX0JVRkZFUl9GTEFHX1NFVCAoYnVmLCBHU1RfQlVGRkVSX1JFQURPTkxZIHwgR1NUX0JVRkZFUl9ET05URlJFRSk7CitbLi5dCisKKyAgcmV0dXJuIEdTVF9EQVRBIChidWYpOworfQorICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+CisgICAgICBOb3RlIHRoYXQgdGhpcyBjb25jZXB0IHNob3VsZCA8ZW1waGFzaXM+bm90PC9lbXBoYXNpcz4gYmUgdXNlZCB0bworICAgICAgZGVjcmVhc2UgdGhlIG51bWJlciBvZiBjYWxscyBtYWRlIHRvIGZ1bmN0aW9ucyBzdWNoIGFzCisgICAgICA8ZnVuY3Rpb24+Z19tYWxsb2MgKCk8L2Z1bmN0aW9uPiBpbnNpZGUgeW91ciBlbGVtZW50LiBXZQorICAgICAgaGF2ZSBiZXR0ZXIgd2F5cyBvZiBkb2luZyB0aGF0IGVsc2V3aGVyZSAoJkdTdHJlYW1lcjsgY29yZSwgR2xpYiwKKyAgICAgIEdsaWJjLCBMaW51eCBrZXJuZWwsIGV0Yy4pLgorICAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvcHdnL3B3Zy54bWwgYi9kb2NzL3B3Zy9wd2cueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhOTdiNjkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3B3Zy9wd2cueG1sCkBAIC0wLDAgKzEsMTk1IEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSd1dGYtOCc/PgorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorICAgICAgICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiIFsKKzwhRU5USVRZICUgaW1hZ2UtZW50aXRpZXMgU1lTVEVNICJpbWFnZS5lbnRpdGllcyI+CislaW1hZ2UtZW50aXRpZXM7Cis8IUVOVElUWSAlIHZlcnNpb24tZW50aXRpZXMgU1lTVEVNICJ2ZXJzaW9uLmVudGl0aWVzIj4KKyV2ZXJzaW9uLWVudGl0aWVzOworCis8IUVOVElUWSBUSVRMRVBBR0UgICAgICAgICAgICBTWVNURU0gInRpdGxlcGFnZS54bWwiPgorCis8IS0tIFBhcnQgMTogSW50cm9kdWN0aW9uIC0tPgorPCFFTlRJVFkgSU5UUk9fUFJFRkFDRSAgICAgICAgU1lTVEVNICJpbnRyby1wcmVmYWNlLnhtbCI+Cis8IUVOVElUWSBJTlRST19CQVNJQ1MgICAgICAgICBTWVNURU0gImludHJvLWJhc2ljcy54bWwiPgorCis8IS0tIFBhcnQgMjogQnVpbGRpbmcgYSBQbHVnaW4gLS0+Cis8IUVOVElUWSBCVUlMRElOR19CT0lMRVIgICAgICBTWVNURU0gImJ1aWxkaW5nLWJvaWxlci54bWwiPgorPCFFTlRJVFkgQlVJTERJTkdfREVCVUcgICAgICAgU1lTVEVNICJidWlsZGluZy1kZWJ1Zy54bWwiPgorPCFFTlRJVFkgQlVJTERJTkdfUEFEUyAgICAgICAgU1lTVEVNICJidWlsZGluZy1wYWRzLnhtbCI+Cis8IUVOVElUWSBCVUlMRElOR19DSEFJTkZOICAgICBTWVNURU0gImJ1aWxkaW5nLWNoYWluZm4ueG1sIj4KKzwhRU5USVRZIEJVSUxESU5HX1NUQVRFICAgICAgIFNZU1RFTSAiYnVpbGRpbmctc3RhdGUueG1sIj4KKzwhRU5USVRZIEJVSUxESU5HX1BST1BTICAgICAgIFNZU1RFTSAiYnVpbGRpbmctcHJvcHMueG1sIj4KKzwhRU5USVRZIEJVSUxESU5HX1NJR05BTFMgICAgIFNZU1RFTSAiYnVpbGRpbmctc2lnbmFscy54bWwiPgorPCFFTlRJVFkgQlVJTERJTkdfVEVTVEFQUCAgICAgU1lTVEVNICJidWlsZGluZy10ZXN0YXBwLnhtbCI+CisKKzwhLS0gUGFydCAzOiBBZHZhbmNlZCBGaWx0ZXIgQ29uY2VwdHMgLS0+Cis8IUVOVElUWSBBRFZBTkNFRF9ORUdPVElBVElPTiBTWVNURU0gImFkdmFuY2VkLW5lZ290aWF0aW9uLnhtbCI+Cis8IUVOVElUWSBBRFZBTkNFRF9TQ0hFRFVMSU5HICBTWVNURU0gImFkdmFuY2VkLXNjaGVkdWxpbmcueG1sIj4KKzwhRU5USVRZIEFEVkFOQ0VEX1RZUEVTICAgICAgIFNZU1RFTSAiYWR2YW5jZWQtdHlwZXMueG1sIj4KKzwhRU5USVRZIEFEVkFOQ0VEX1JFUVVFU1QgICAgIFNZU1RFTSAiYWR2YW5jZWQtcmVxdWVzdC54bWwiPgorPCFFTlRJVFkgQURWQU5DRURfQ0xPQ0sgICAgICAgU1lTVEVNICJhZHZhbmNlZC1jbG9jay54bWwiPgorPCFFTlRJVFkgQURWQU5DRURfRFBBUkFNUyAgICAgU1lTVEVNICJhZHZhbmNlZC1kcGFyYW1zLnhtbCI+Cis8IUVOVElUWSBBRFZBTkNFRF9JTlRFUkZBQ0VTICBTWVNURU0gImFkdmFuY2VkLWludGVyZmFjZXMueG1sIj4KKzwhRU5USVRZIEFEVkFOQ0VEX1RBR0dJTkcgICAgIFNZU1RFTSAiYWR2YW5jZWQtdGFnZ2luZy54bWwiPgorPCFFTlRJVFkgQURWQU5DRURfRVZFTlRTICAgICAgU1lTVEVNICJhZHZhbmNlZC1ldmVudHMueG1sIj4KKworPCEtLSBQYXJ0IDQ6IENyZWF0aW5nIHNwZWNpYWwgZWxlbWVudCB0eXBlcyAtLT4KKzwhRU5USVRZIE9USEVSX0JBU0UgICAgICAgICAgIFNZU1RFTSAib3RoZXItYmFzZS54bWwiPgorPCFFTlRJVFkgT1RIRVJfT05FVE9OICAgICAgICAgU1lTVEVNICJvdGhlci1vbmV0b24ueG1sIj4KKzwhRU5USVRZIE9USEVSX05UT09ORSAgICAgICAgIFNZU1RFTSAib3RoZXItbnRvb25lLnhtbCI+Cis8IUVOVElUWSBPVEhFUl9NQU5BR0VSICAgICAgICBTWVNURU0gIm90aGVyLW1hbmFnZXIueG1sIj4KKworPCEtLSBBcHBlbmRpY2VzIC0tPgorPCFFTlRJVFkgQVBQRU5ESVhfQ0hFQ0tMSVNUICAgU1lTVEVNICJhcHBlbmRpeC1jaGVja2xpc3QueG1sIj4KKzwhRU5USVRZIEFQUEVORElYX1BPUlRJTkcgICAgIFNZU1RFTSAiYXBwZW5kaXgtcG9ydGluZy54bWwiPgorPCFFTlRJVFkgQVBQRU5ESVhfTElDRU5TSU5HICAgU1lTVEVNICJhcHBlbmRpeC1saWNlbnNpbmcueG1sIj4KKzwhRU5USVRZIEFQUEVORElYX1BZVEhPTiAgICAgIFNZU1RFTSAiYXBwZW5kaXgtcHl0aG9uLnhtbCI+CisKKzwhRU5USVRZIEdTdHJlYW1lciAgICAiPGFwcGxpY2F0aW9uPkdTdHJlYW1lcjwvYXBwbGljYXRpb24+Ij4KKzwhRU5USVRZIEdzdEFwcERldk1hbiAiPGVtcGhhc2lzPkdTdHJlYW1lciBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBNYW51YWw8L2VtcGhhc2lzPiI+Cis8IUVOVElUWSBHc3RMaWJSZWYgICAgIjxlbXBoYXNpcz5HU3RyZWFtZXIgTGlicmFyeSBSZWZlcmVuY2U8L2VtcGhhc2lzPiI+CitdPgorCis8Ym9vayBpZD0iaW5kZXgiPgorICAmVElUTEVQQUdFOworCisgIDwhLS0gIyMjIyMjIyMjIyMjIyBJbnRyb2R1Y3Rpb24gLSBwYXJ0ICMjIyMjIyMjIyMjIyMjIyAtLT4KKworICA8cGFydCBpZD0icGFydC1pbnRyb2R1Y3Rpb24iIHhyZWZsYWJlbD0iSW50cm9kdWN0aW9uIj4KKyAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKyAgICA8cGFydGludHJvPgorICAgICAgPHBhcmE+PCEtLSBzeW5jaHJvbml6ZSB3aXRoIEFwcERldk1hbiAtLT4KKyAgICAgICAgJkdTdHJlYW1lcjsgaXMgYW4gZXh0cmVtZWx5IHBvd2VyZnVsIGFuZCB2ZXJzYXRpbGUgZnJhbWV3b3JrIGZvciBjcmVhdGluZworICAgICAgICBzdHJlYW1pbmcgbWVkaWEgYXBwbGljYXRpb25zLiBNYW55IG9mIHRoZSB2aXJ0dWVzIG9mIHRoZSAmR1N0cmVhbWVyOworICAgICAgICBmcmFtZXdvcmsgY29tZSBmcm9tIGl0cyBtb2R1bGFyaXR5OiAmR1N0cmVhbWVyOyBjYW4gc2VhbWxlc3NseQorICAgICAgICBpbmNvcnBvcmF0ZSBuZXcgcGx1Z2luIG1vZHVsZXMuIEJ1dCBiZWNhdXNlIG1vZHVsYXJpdHkgYW5kIHBvd2VyIG9mdGVuCisgICAgICAgIGNvbWUgYXQgYSBjb3N0IG9mIGdyZWF0ZXIgY29tcGxleGl0eSAoY29uc2lkZXIsIGZvciBleGFtcGxlLCA8dWxpbmsKKyAgICAgICAgdHlwZT0iaHR0cCIgdXJsPSJodHRwOi8vd3d3Lm9tZy5vcmcvIj5DT1JCQTwvdWxpbms+KSwgd3JpdGluZyBuZXcKKyAgICAgICAgcGx1Z2lucyBpcyBub3QgYWx3YXlzIGVhc3kuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBndWlkZSBpcyBpbnRlbmRlZCB0byBoZWxwIHlvdSB1bmRlcnN0YW5kIHRoZSAmR1N0cmVhbWVyOyBmcmFtZXdvcmsKKyAgICAgICAgKHZlcnNpb24gJkdTVF9WRVJTSU9OOykgc28geW91IGNhbiBkZXZlbG9wIG5ldyBwbHVnaW5zIHRvIGV4dGVuZCB0aGUKKyAgICAgICAgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eS4gVGhlIGd1aWRlIGFkZHJlc3NlcyBtb3N0IGlzc3VlcyBieSBmb2xsb3dpbmcgdGhlCisgICAgICAgIGRldmVsb3BtZW50IG9mIGFuIGV4YW1wbGUgcGx1Z2luIC0gYW4gYXVkaW8gZmlsdGVyIHBsdWdpbiAtCisgICAgICAgIHdyaXR0ZW4gaW4gQy4gSG93ZXZlciwgdGhlIGxhdGVyIHBhcnRzIG9mIHRoZSBndWlkZSBhbHNvIHByZXNlbnQgc29tZQorICAgICAgICBpc3N1ZXMgaW52b2x2ZWQgaW4gd3JpdGluZyBvdGhlciB0eXBlcyBvZiBwbHVnaW5zLCBhbmQgdGhlIGVuZCBvZiB0aGUKKyAgICAgICAgZ3VpZGUgZGVzY3JpYmVzIHNvbWUgb2YgdGhlIFB5dGhvbiBiaW5kaW5ncyBmb3IgJkdTdHJlYW1lcjsuCisgICAgICA8L3BhcmE+CisgICAgPC9wYXJ0aW50cm8+CisKKyAgICAmSU5UUk9fUFJFRkFDRTsKKyAgICAmSU5UUk9fQkFTSUNTOworICA8L3BhcnQ+CisKKyAgPCEtLSAjIyMjIyMjIyMjIyMgQnVpbGRpbmcgYSBQbHVnaW4gLSBwYXJ0ICMjIyMjIyMjIyMjIyMgLS0+CisKKyAgPHBhcnQgaWQ9InBhcnQtYnVpbGRpbmciIHhyZWZsYWJlbD0iQnVpbGRpbmcgYSBQbHVnaW4iPgorICAgIDx0aXRsZT5CdWlsZGluZyBhIFBsdWdpbjwvdGl0bGU+CisgICAgPHBhcnRpbnRybz4KKyAgICAgIDxwYXJhPgorICAgICAgICBZb3UgYXJlIG5vdyByZWFkeSB0byBsZWFybiBob3cgdG8gYnVpbGQgYSBwbHVnaW4uIEluIHRoaXMgcGFydCBvZiB0aGUKKyAgICAgICAgZ3VpZGUsIHlvdSB3aWxsIGxlYXJuIGhvdyB0byBhcHBseSBiYXNpYyAmR1N0cmVhbWVyOworICAgICAgICBwcm9ncmFtbWluZyBjb25jZXB0cyB0byB3cml0ZSBhIHNpbXBsZSBwbHVnaW4uIFRoZSBwcmV2aW91cyBwYXJ0cyBvZiB0aGUKKyAgICAgICAgZ3VpZGUgaGF2ZSBjb250YWluZWQgbm8gZXhwbGljaXQgZXhhbXBsZSBjb2RlLCBwZXJoYXBzIG1ha2luZyB0aGluZ3MgYQorICAgICAgICBiaXQgYWJzdHJhY3QgYW5kIGRpZmZpY3VsdCB0byB1bmRlcnN0YW5kLiBJbiBjb250cmFzdCwgdGhpcyBzZWN0aW9uIHdpbGwKKyAgICAgICAgcHJlc2VudCBib3RoIGFwcGxpY2F0aW9ucyBhbmQgY29kZSBieSBmb2xsb3dpbmcgdGhlIGRldmVsb3BtZW50IG9mIGFuCisgICAgICAgIGV4YW1wbGUgYXVkaW8gZmlsdGVyIHBsdWdpbiBjYWxsZWQgPHF1b3RlPk15RmlsdGVyPC9xdW90ZT4uCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGV4YW1wbGUgZmlsdGVyIGVsZW1lbnQgd2lsbCBiZWdpbiB3aXRoIGEgc2luZ2xlIGlucHV0IHBhZCBhbmQgYSAKKyAgICAgICAgc2luZ2xlCisgICAgICAgIG91dHB1dCBwYWQuIFRoZSBmaWx0ZXIgd2lsbCwgYXQgZmlyc3QsIHNpbXBseSBwYXNzIG1lZGlhIGFuZCBldmVudCBkYXRhCisgICAgICAgIGZyb20gaXRzIHNpbmsgcGFkIHRvIGl0cyBzb3VyY2UgcGFkIHdpdGhvdXQgbW9kaWZpY2F0aW9uLiBCdXQgYnkgdGhlIGVuZAorICAgICAgICBvZiB0aGlzIHBhcnQgb2YgdGhlIGd1aWRlLCB5b3Ugd2lsbCBsZWFybiB0byBhZGQgc29tZSBtb3JlIGludGVyZXN0aW5nCisgICAgICAgIGZ1bmN0aW9uYWxpdHksIGluY2x1ZGluZyBwcm9wZXJ0aWVzIGFuZCBzaWduYWwgaGFuZGxlcnMuIEFuZCBhZnRlcgorICAgICAgICByZWFkaW5nIHRoZSBuZXh0IHBhcnQgb2YgdGhlIGd1aWRlLCA8eHJlZiBsaW5rZW5kPSJwYXJ0LWFkdmFuY2VkIi8+LCB5b3UKKyAgICAgICAgd2lsbCBiZSBhYmxlIHRvIGFkZCBldmVuIG1vcmUgZnVuY3Rpb25hbGl0eSB0byB5b3VyIHBsdWdpbnMuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGV4YW1wbGUgY29kZSB1c2VkIGluIHRoaXMgcGFydCBvZiB0aGUgZ3VpZGUgY2FuIGJlIGZvdW5kIGluCisgICAgICAgIDxmaWxlbmFtZSBjbGFzcz0iZGlyZWN0b3J5Ij5leGFtcGxlcy9wd2cvZXhhbXBsZWZpbHRlci88L2ZpbGVuYW1lPiBpbgorICAgICAgICB5b3VyICZHU3RyZWFtZXI7IGRpcmVjdG9yeS4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3BhcnRpbnRybz4KKworICAgICZCVUlMRElOR19CT0lMRVI7CisgICAgJkJVSUxESU5HX1BBRFM7CisgICAgJkJVSUxESU5HX0NIQUlORk47CisgICAgJkJVSUxESU5HX1NUQVRFOworICAgICZCVUlMRElOR19QUk9QUzsKKyAgICAmQlVJTERJTkdfU0lHTkFMUzsKKyAgICAmQlVJTERJTkdfVEVTVEFQUDsKKyAgPC9wYXJ0PgorCisgIDwhLS0gIyMjIyMjIyMjIyMjIEFkdmFuY2VkIEZpbHRlciBDb25jZXB0cyAtIHBhcnQgIyMjIyMjIyMjIyMjIyAtLT4KKworICA8cGFydCBpZD0icGFydC1hZHZhbmNlZCIgeHJlZmxhYmVsPSJBZHZhbmNlZCBGaWx0ZXIgQ29uY2VwdHMiPgorICAgIDx0aXRsZT5BZHZhbmNlZCBGaWx0ZXIgQ29uY2VwdHM8L3RpdGxlPgorICAgIDxwYXJ0aW50cm8+CisgICAgICA8cGFyYT4KKyAgICAgICAgQnkgbm93LCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gY3JlYXRlIGJhc2ljIGZpbHRlciBlbGVtZW50cyB0aGF0IGNhbgorICAgICAgICByZWNlaXZlIGFuZCBzZW5kIGRhdGEuIFRoaXMgaXMgdGhlIHNpbXBsZSBtb2RlbCB0aGF0ICZHU3RyZWFtZXI7IHN0YW5kcworICAgICAgICBmb3IuIEJ1dCAmR1N0cmVhbWVyOyBjYW4gZG8gbXVjaCBtb3JlIHRoYW4gb25seSB0aGlzISBJbiB0aGlzIGNoYXB0ZXIsCisgICAgICAgIHZhcmlvdXMgYWR2YW5jZWQgdG9waWNzIHdpbGwgYmUgZGlzY3Vzc2VkLCBzdWNoIGFzIHNjaGVkdWxpbmcsIHNwZWNpYWwKKyAgICAgICAgcGFkIHR5cGVzLCBjbG9ja2luZywgZXZlbnRzLCBpbnRlcmZhY2VzLCB0YWdnaW5nIGFuZCBtb3JlLiBUaGVzZSB0b3BpY3MKKyAgICAgICAgYXJlIHRoZSBzdWdhciB0aGF0IG1ha2VzICZHU3RyZWFtZXI7IHNvIGVhc3kgdG8gdXNlIGZvciBhcHBsaWNhdGlvbnMuCisgICAgICA8L3BhcmE+CisgICAgPC9wYXJ0aW50cm8+CisKKyAgICAmQURWQU5DRURfTkVHT1RJQVRJT047CisgICAgJkFEVkFOQ0VEX1NDSEVEVUxJTkc7CisgICAgJkFEVkFOQ0VEX1RZUEVTOworICAgICZBRFZBTkNFRF9SRVFVRVNUOworICAgICZBRFZBTkNFRF9DTE9DSzsKKyAgICAmQURWQU5DRURfRFBBUkFNUzsKKyAgICAmQURWQU5DRURfSU5URVJGQUNFUzsKKyAgICAmQURWQU5DRURfVEFHR0lORzsKKyAgICAmQURWQU5DRURfRVZFTlRTOworCisgICAgPCEtLSBGSVhNRTogYWRkIHF1ZXJ5aW5nLCBldmVudCBoYW5kbGluZyBhbmQgY29udmVyc2lvbiAtLT4KKworICA8L3BhcnQ+CisKKyAgPCEtLSAjIyMjIyMjIyMjIyMgQ3JlYXRpbmcgc3BlY2lhbCBlbGVtZW50IHR5cGVzIC0gcGFydCAjIyMjIyMjIyMjIyMjIC0tPgorCisgIDxwYXJ0IGlkPSJwYXJ0LW90aGVyIiB4cmVmbGFiZWw9IkNyZWF0aW5nIHNwZWNpYWwgZWxlbWVudCB0eXBlcyI+CisgICAgPHRpdGxlPkNyZWF0aW5nIHNwZWNpYWwgZWxlbWVudCB0eXBlczwvdGl0bGU+CisgICAgPHBhcnRpbnRybz4KKyAgICAgIDxwYXJhPgorICAgICAgICBCeSBub3csIHdlIGhhdmUgbG9va2VkIGF0IHByZXR0eSBtdWNoIGFueSBmZWF0dXJlIHRoYXQgY2FuIGJlIGVtYmVkZGVkCisgICAgICAgIGludG8gYSAmR1N0cmVhbWVyOyBlbGVtZW50LiBNb3N0IG9mIHRoaXMgaGFzIGJlZW4gZmFpcmx5IGxvdy1sZXZlbCBhbmQKKyAgICAgICAgZ2l2ZW4gZGVlcCBpbnNpZ2h0cyBpbiBob3cgJkdTdHJlYW1lcjsgd29ya3MgaW50ZXJuYWxseS4gRm9ydHVuYXRlbHksCisgICAgICAgICZHU3RyZWFtZXI7IGNvbnRhaW5zIHNvbWUgZWFzaWVyLXRvLXVzZSBpbnRlcmZhY2VzIHRvIGNyZWF0ZSBzdWNoCisgICAgICAgIGVsZW1lbnRzLiBJbiBvcmRlciB0byBkbyB0aGF0LCB3ZSB3aWxsIGxvb2sgY2xvc2VyIGF0IHRoZSBlbGVtZW50CisgICAgICAgIHR5cGVzIGZvciB3aGljaCAmR1N0cmVhbWVyOyBwcm92aWRlcyBiYXNlIGNsYXNzZXMgKHNvdXJjZXMsIHNpbmtzIGFuZAorICAgICAgICB0cmFuc2Zvcm1hdGlvbiBlbGVtZW50cykuIFdlIHdpbGwgYWxzbyBsb29rIGNsb3NlciBhdCBzb21lIHR5cGVzIG9mCisgICAgICAgIGVsZW1lbnRzIHRoYXQgcmVxdWlyZSBubyBzcGVjaWZpYyBjb2Rpbmcgc3VjaCBhcyBzY2hlZHVsaW5nLWludGVyYWN0aW9uCisgICAgICAgIG9yIGRhdGEgcGFzc2luZywgYnV0IHJhdGhlciByZXF1aXJlIHNwZWNpZmljIHBpcGVsaW5lIGNvbnRyb2wgKGUuZy4KKyAgICAgICAgTi10by0xIGVsZW1lbnRzIGFuZCBtYW5hZ2VycykuCisgICAgICA8L3BhcmE+CisgICAgPC9wYXJ0aW50cm8+CisKKyAgICAmT1RIRVJfQkFTRTsKKyAgICAmT1RIRVJfT05FVE9OOworICAgICZPVEhFUl9OVE9PTkU7CisgICAgJk9USEVSX01BTkFHRVI7CisgIDwvcGFydD4KKworICA8IS0tICMjIyMjIyMjIyMjIyBBcHBlbmRpY2VzIC0gcGFydCAjIyMjIyMjIyMjIyMjIC0tPgorCisgIDxwYXJ0IGlkPSJwYXJ0LWFwcGVuZGl4IiB4cmVmbGFiZWw9IkFwcGVuZGljZXMiPgorICAgIDx0aXRsZT5BcHBlbmRpY2VzPC90aXRsZT4KKyAgICA8cGFydGludHJvPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2hhcHRlciBjb250YWlucyB0aGluZ3MgdGhhdCBkb24ndCBiZWxvbmcgYW55d2hlcmUgZWxzZS4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3BhcnRpbnRybz4KKworICAgICAgJkFQUEVORElYX0NIRUNLTElTVDsKKyAgICAgICZBUFBFTkRJWF9QT1JUSU5HOworICAgICAgJkFQUEVORElYX0xJQ0VOU0lORzsKKyAgICAgICZBUFBFTkRJWF9QWVRIT047CisgIDwvcGFydD4KKworPC9ib29rPgpkaWZmIC0tZ2l0IGEvZG9jcy9wd2cvdGl0bGVwYWdlLnhtbCBiL2RvY3MvcHdnL3RpdGxlcGFnZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUxMzVmZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvcHdnL3RpdGxlcGFnZS54bWwKQEAgLTAsMCArMSw4OSBAQAorPGJvb2tpbmZvPgorCisgIDxhdXRob3Jncm91cD4KKyAgICA8YXV0aG9yPgorICAgICAgPGZpcnN0bmFtZT5SaWNoYXJkPC9maXJzdG5hbWU+CisgICAgICA8b3RoZXJuYW1lPkpvaG48L290aGVybmFtZT4KKyAgICAgIDxzdXJuYW1lPkJvdWx0b248L3N1cm5hbWU+CisgICAgICA8YXV0aG9yYmx1cmI+CisJPHBhcmE+CisJICA8ZW1haWw+cmljaGFyZC1nc3RAdGFydGFydXMub3JnPC9lbWFpbD4KKwk8L3BhcmE+CisgICAgICA8L2F1dGhvcmJsdXJiPgorICAgIDwvYXV0aG9yPgorCisgICAgPGF1dGhvcj4KKyAgICAgIDxmaXJzdG5hbWU+RXJpazwvZmlyc3RuYW1lPgorICAgICAgPHN1cm5hbWU+V2FsdGhpbnNlbjwvc3VybmFtZT4KKyAgICAgIDxhdXRob3JibHVyYj4KKwk8cGFyYT4KKwkgIDxlbWFpbD5vbWVnYUB0ZW1wbGUtYmFwdGlzdC5jb208L2VtYWlsPgorCTwvcGFyYT4KKyAgICAgIDwvYXV0aG9yYmx1cmI+CisgICAgPC9hdXRob3I+CisKKyAgICA8YXV0aG9yPgorICAgICAgPGZpcnN0bmFtZT5TdGV2ZTwvZmlyc3RuYW1lPgorICAgICAgPHN1cm5hbWU+QmFrZXI8L3N1cm5hbWU+CisgICAgICA8YXV0aG9yYmx1cmI+CisJPHBhcmE+CisJICA8ZW1haWw+c3RldmViYWtlcl9vcmdAeWFob28uY28udWs8L2VtYWlsPgorCTwvcGFyYT4KKyAgICAgIDwvYXV0aG9yYmx1cmI+CisgICAgPC9hdXRob3I+CisKKyAgICA8YXV0aG9yPgorICAgICAgPGZpcnN0bmFtZT5MZWlmPC9maXJzdG5hbWU+CisgICAgICA8c3VybmFtZT5Kb2huc29uPC9zdXJuYW1lPgorICAgICAgPGF1dGhvcmJsdXJiPgorCTxwYXJhPgorCSAgPGVtYWlsPmxlaWZAYW1iaWVudC4yeS5uZXQ8L2VtYWlsPgorCTwvcGFyYT4KKyAgICAgIDwvYXV0aG9yYmx1cmI+CisgICAgPC9hdXRob3I+CisKKyAgICA8YXV0aG9yPgorICAgICAgPGZpcnN0bmFtZT5Sb25hbGQ8L2ZpcnN0bmFtZT4KKyAgICAgIDxvdGhlcm5hbWU+Uy48L290aGVybmFtZT4KKyAgICAgIDxzdXJuYW1lPkJ1bHRqZTwvc3VybmFtZT4KKyAgICAgIDxhdXRob3JibHVyYj4KKwk8cGFyYT4KKwkgIDxlbWFpbD5yYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ8L2VtYWlsPgorCTwvcGFyYT4KKyAgICAgIDwvYXV0aG9yYmx1cmI+CisgICAgPC9hdXRob3I+CisKKyAgICA8YXV0aG9yPgorICAgICAgPGZpcnN0bmFtZT5TdGVmYW48L2ZpcnN0bmFtZT4KKyAgICAgIDxzdXJuYW1lPktvc3Q8L3N1cm5hbWU+CisgICAgICA8YXV0aG9yYmx1cmI+CisJPHBhcmE+CisJICA8ZW1haWw+ZW5zb25pY0B1c2Vycy5zZi5uZXQ8L2VtYWlsPgorCTwvcGFyYT4KKyAgICAgIDwvYXV0aG9yYmx1cmI+CisgICAgPC9hdXRob3I+CisKKyAgICA8YXV0aG9yPgorICAgICAgPGZpcnN0bmFtZT5UaW0tUGhpbGlwcDwvZmlyc3RuYW1lPgorICAgICAgPHN1cm5hbWU+TcO8bGxlcjwvc3VybmFtZT4KKyAgICAgIDxhdXRob3JibHVyYj4KKyAgICAgICAgPHBhcmE+CisJICAgICAgPGVtYWlsPnRpbSBjZW50cmljdWxhciAuIG5ldDwvZW1haWw+CisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvYXV0aG9yYmx1cmI+CisgICAgPC9hdXRob3I+CisgIDwvYXV0aG9yZ3JvdXA+CisKKyAgPGxlZ2Fsbm90aWNlIGlkPSJtaXNjLWxlZ2Fsbm90aWNlIj4KKyAgICA8cGFyYT4KKyAgICAgIFRoaXMgbWF0ZXJpYWwgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kCisgICAgICBjb25kaXRpb25zIHNldCBmb3J0aCBpbiB0aGUgT3BlbiBQdWJsaWNhdGlvbiBMaWNlbnNlLCB2MS4wIG9yIGxhdGVyICh0aGUKKyAgICAgIGxhdGVzdCB2ZXJzaW9uIGlzIHByZXNlbnRseSBhdmFpbGFibGUgYXQgPHVsaW5rCisgICAgICB1cmw9Imh0dHA6Ly93d3cub3BlbmNvbnRlbnQub3JnL29wZW5wdWIvIgorICAgICAgdHlwZT0iaHR0cCI+aHR0cDovL3d3dy5vcGVuY29udGVudC5vcmcvb3BlbnB1Yi88L3VsaW5rPikuCisgICAgPC9wYXJhPgorICA8L2xlZ2Fsbm90aWNlPgorCisgIDx0aXRsZT4mR1N0cmVhbWVyOyBQbHVnaW4gV3JpdGVyJ3MgR3VpZGUgKCZHU1RfVkVSU0lPTjspPC90aXRsZT4KKworPC9ib29raW5mbz4KZGlmZiAtLWdpdCBhL2RvY3Mvc2xpZGVzL01ha2VmaWxlLmFtIGIvZG9jcy9zbGlkZXMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJiMWM1OAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvc2xpZGVzL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEgQEAKK0VYVFJBX0RJU1QgPSBhYnN0cmFjdCBhYnN0cmFjdC5zYXZlIG91dGxpbmUgUkVBRE1FIHNsaWRlcwpkaWZmIC0tZ2l0IGEvZG9jcy9zbGlkZXMvTWFrZWZpbGUuaW4gYi9kb2NzL3NsaWRlcy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTA5YjNmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9zbGlkZXMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw1MzcgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSBkb2NzL3NsaWRlcworRElTVF9DT01NT04gPSBSRUFETUUgJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXB5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtc2NydWItaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOXyQoVikpCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF8kKFYpKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X2F0XzAgPSBACitTT1VSQ0VTID0KK0RJU1RfU09VUkNFUyA9CitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKK0NDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKK0NIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKK0NIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKK0NIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUiA9IEBEQVRBRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAorRExMVE9PTCA9IEBETExUT09MQAorRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKK0VSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACitFWEVFWFQgPSBARVhFRVhUQAorRkZMQUdTID0gQEZGTEFHU0AKK0ZHUkVQID0gQEZHUkVQQAorRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKK0dDT1YgPSBAR0NPVkAKK0dDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAorR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACitHTElCX0xJQlMgPSBAR0xJQl9MSUJTQAorR0xJQl9PTkxZX0NGTEFHUyA9IEBHTElCX09OTFlfQ0ZMQUdTQAorR0xJQl9PTkxZX0xJQlMgPSBAR0xJQl9PTkxZX0xJQlNACitHTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKK0dMSUJfUkVRID0gQEdMSUJfUkVRQAorR01QX0xJQlMgPSBAR01QX0xJQlNACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dSRVAgPSBAR1JFUEAKK0dTTF9MSUJTID0gQEdTTF9MSUJTQAorR1NUX0FHRSA9IEBHU1RfQUdFQAorR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACitHU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACitHU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAorR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKK0dTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAorR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORUAKK0dTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKK0dTVF9ESVNBQkxFX05FVF9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfTkVUX0RFRklORUAKK0dTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACitHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAorR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAorR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKK0dTVF9ESVNBQkxFX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkVACitHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACitHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACitHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORSA9IEBHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORUAKK0dTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAorR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACitHU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAorR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACitHU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKK0dTVF9NQUpPUk1JTk9SID0gQEdTVF9NQUpPUk1JTk9SQAorR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACitHU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACitHU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAorR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACitHU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACitHU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACitHU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAorR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAorR1NUX1BLR19ERVBTID0gQEdTVF9QS0dfREVQU0AKK0dTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACitHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FQAorR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORUAKK0dTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKK0dTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACitHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkUgPSBAR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FQAorR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKK0hBVkVfRE9DQk9PSzJIVE1MID0gQEhBVkVfRE9DQk9PSzJIVE1MQAorSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKK0hBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKK0hBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKK0hBVkVfRklHMkRFViA9IEBIQVZFX0ZJRzJERVZACitIQVZFX0dNUCA9IEBIQVZFX0dNUEAKK0hBVkVfR1NMID0gQEhBVkVfR1NMQAorSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKK0hBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKK0hBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACitIQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKK0hBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACitIT1NUX0NQVSA9IEBIT1NUX0NQVUAKK0hUTUxfRElSID0gQEhUTUxfRElSQAorSU5FVF9BVE9OX0xJQlMgPSBASU5FVF9BVE9OX0xJQlNACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCRElSID0gQExJQkRJUkAKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCTSA9IEBMSUJNQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTE9DQUxFRElSID0gQExPQ0FMRURJUkAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACitQQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAorUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKK1BBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAorUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BFUkxfUEFUSCA9IEBQRVJMX1BBVEhACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQTFVHSU5ESVIgPSBAUExVR0lORElSQAorUE9TVUIgPSBAUE9TVUJACitQUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAorVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAorVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACitXSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACitYTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKK1hTTFRQUk9DID0gQFhTTFRQUk9DQAorWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3BsdWdpbmRpciA9IEBwbHVnaW5kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorRVhUUkFfRElTVCA9IGFic3RyYWN0IGFic3RyYWN0LnNhdmUgb3V0bGluZSBSRUFETUUgc2xpZGVzCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBkb2NzL3NsaWRlcy9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSBkb2NzL3NsaWRlcy9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKK3RhZ3M6IFRBR1MKK1RBR1M6CisKK2N0YWdzOiBDVEFHUworQ1RBR1M6CisKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUKK2luc3RhbGxkaXJzOgoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0ZGlyIGR2aSBcCisJZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKKwlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIFwKKwlpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gXAorCWluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgXAorCWluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIFwKKwlpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2RvY3Mvc2xpZGVzL1JFQURNRSBiL2RvY3Mvc2xpZGVzL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjNlNmRjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9zbGlkZXMvUkVBRE1FCkBAIC0wLDAgKzEsNCBAQAorVGhlc2UgYXJlIG5vdGVzIGZvciBzbGlkZXMgdG8gYmUgcHJlc2VudGVkIGF0IHRoZSBPR0kgRElTQyBDb29raWUgVGFsaywKK09jdCAyMiwgMTk5OS4gIE91dGxpbmUgd2lsbCBiZSB0ZXh0LCBwcm9iYWJseSB3cml0dGVuIHVwIGluIFBvd2VyUG9pbnQgZm9yCitlYXNlIG9mIHByZXNlbnRhdGlvbiwgYW5kIGNvbnZlcnRlZCB0byAucHMsIC5wZGYsIGFuZCAuaHRtbCBvbmNlIHRoZSB0YWxrCitoYXMgYmVlbiBnaXZlbi4KZGlmZiAtLWdpdCBhL2RvY3Mvc2xpZGVzL2Fic3RyYWN0IGIvZG9jcy9zbGlkZXMvYWJzdHJhY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRiYzAxNgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvc2xpZGVzL2Fic3RyYWN0CkBAIC0wLDAgKzEsOSBAQAorSW50cm8gdG8gR1N0cmVhbWVyCisKK0dTdHJlYW1lciBpcyBhIG1lZGlhLXN0cmVhbWluZyBhcmNoaXRlY3R1cmUgdGhhdCBJJ3ZlIGJlZW4gZGV2ZWxvcGluZyBhdAoraG9tZSBmb3IgYWJvdXQgNCBtb250aHMgbm93LiBJdCdzIGRlc2lnbmVkIHRvIG92ZXJjb21lIHNvbWUgb2YgdGhlCitwcm9ibGVtcyBJJ3ZlIHNlZW4gaW4gYm90aCB0aGUgT0dJIFBpcGVsaW5lIGFuZCBpbiByZWFkaW5nIHRocm91Z2gKK0RpcmVjdFNob3cgZG9jcy4gIEFmdGVyIGFuIG92ZXJ2aWV3IG9mIHRoZSBleGlzdGluZyBPR0kgUGlwZWxpbmUsIEknbGwKK2NvdmVyIEdTdHJlYW1lcidzIGV4aXN0aW5nIGFuZCBwbGFubmVkIGFyY2hpdGVjdHVyZSwgYW5kIGxpc3Qgd2hhdCByZW1haW5zCit0byBiZSBkb25lLiAgR1N0cmVhbWVyIGlzIG1vc3RseSBmcm96ZW4gcmlnaHQgbm93LCBhcyBpdCBpcyB0byBiZSByZWxlYXNlZAorYXMgMC4xLjAgb24gT2N0IDMxLiAgTWFqb3IgdGhhdyB3aWxsIG9jY3VyIGluIGEgZmV3IHdlZWtzLgpkaWZmIC0tZ2l0IGEvZG9jcy9zbGlkZXMvYWJzdHJhY3Quc2F2ZSBiL2RvY3Mvc2xpZGVzL2Fic3RyYWN0LnNhdmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMxN2M1YQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvc2xpZGVzL2Fic3RyYWN0LnNhdmUKQEAgLTAsMCArMSwxMCBAQAorSW50cm8gdG8gR1N0cmVhbWVyCisKK0dTdHJlYW1lciBpcyBhIG1lZGlhLXN0cmVhbWluZyBhcmNoaXRlY3R1cmUgdGhhdCBJJ3ZlIGJlZW4gZGV2ZWxvcGluZyBhdAoraG9tZSBmb3IgYWJvdXQgNCBtb250aHMgbm93LiBJdCdzIGRlc2lnbmVkIHRvIG92ZXJjb21lIHNvbWUgb2YgdGhlCitwcm9ibGVtcyBJJ3ZlIHNlZW4gaW4gYm90aCB0aGUgT0dJIFBpcGVsaW5lIGFuZCBpbiByZWFkaW5nIHRocm91Z2gKK0RpcmVjdFNob3cgZG9jcy4gIEFmdGVyIGFuIG92ZXJ2aWV3IG9mIHRoZSBleGlzdGluZyBPR0kgUGlwZWxpbmUsIEknbGwKK2NvdmVyIEdTdHJlYW1lcidzIGV4aXN0aW5nIGFuZCBwbGFubmVkIGFyY2hpdGVjdHVyZSwgYW5kIGxpc3Qgd2hhdCByZW1haW5zCit0byBiZSBkb25lLiAgR1N0cmVhbWVyIGlzIG1vc3RseSBmcm96ZW4gcmlnaHQgbm93LCBhcyBpdCBpcyB0byBiZSByZWxlYXNlZAorYXMgMC4xLjAgb24gT2N0IDMxLiAgTWFqb3IgdGhhdyB3aWxsIG9jY3VyIGluIGEgZmV3IHdlZWtzLgorCmRpZmYgLS1naXQgYS9kb2NzL3NsaWRlcy9vdXRsaW5lIGIvZG9jcy9zbGlkZXMvb3V0bGluZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGZjOGMwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9zbGlkZXMvb3V0bGluZQpAQCAtMCwwICsxLDE0NCBAQAorSW50cm9kdWN0aW9uICgxKQorCShzb3JyeSwgbm8gY29vbCBsb2dvL2dyYXBoaWMgeWV0LCBpZGVhcz8pCisJR1N0cmVhbWVyIGlzIGEgbGlicmFyeSBhbmQgc2V0IG9mIHRvb2xzIHRvIGJ1aWxkIGFyYml0cmFyeSwKKwkgcmVjb25maWd1cmFibGUgZmlsdGVyIGdyYXBocy4gIEl0IGRlcml2ZXMgZnJvbSB0aGUgT0dJIFBpcGVsaW5lCisJIGFuZCBEaXJlY3RTaG93IChkb2NzLCBubyBleHBlcmllbmNlKSwgYW5kIGlzIGluIGl0cyBzZWNvbmQKKwkgZ2VuZXJhdGlvbiAoZmlyc3Qgd2FzIGNvbXBsZXRlZC9hYmFuZG9uZWQgKmluKiBBdGxhbnRhIG9uIHRoZQorCSB3YXkgdG8gdGhlIExpbnV4IEV4cG8pLgorCTAuMS4wIHJlbGVhc2UgaXMgc2NoZWR1bGVkIGZvciBPY3QgMzEsIDE5OTkuCisJV2lsbCBjb3ZlciBCYWNrZ3JvdW5kLCBHb2FscywgRGVzaWduLCBhbmQgRnV0dXJlcworV2h5IGRvIHdlIG5lZWQgdGhpcz8KKwlsYXVuY2ggcmVhZHMgdGhlIGNvbW1hbmQgbGluZSB0byBjcmVhdGUgdGhlIGdyYXBoLCBmcm9tIC5zbydzCisJQ29ubmVjdGlvbnMgKHF1ZXVlcykgYXJlIG1hZGUgYnkgbGF1bmNoZXIsIGxvdHMgb2Ygc3dpdGNob3V0IGNvZGUKKwlBcmd1bWVudCBoYW5kbGluZyBpcyBtZXNzeSwgYXQgc3RhcnQtdGltZSBvbmx5CisJLi4udGh1cyB0aGVyZSBpcyBiYXNpY2FsbHkgb25seSBvbmUgc3RhdGU6IHJ1bm5pbmcKKwlUaGVyZSBpcyBubyByZWFsIG1hc3RlciBwcm9jZXNzIGNhcGFibGUgb2Ygc2VlaW5nIHRoZSB3aG9sZQorCSBwaXBlbGluZSBhcyBhIGdyYXBoLCBzbyB3aXJpbmcgQS0+Qi0+QyB3aXRoIHNvbWUgYmFja2NoYW5uZWwKKwkgKHBhcmFtZXRlciwgbm90IGRhdGEgc3RyZWFtKSBmcm9tIEMgdG8gQSBpcyBoYXJkCisJQ2hhbm5lbHMgdHJ5IHRvIGRvIElQQywgZmlsZSwgYW5kIG5ldHdvcmsgSS9PLCBleGNlc3MgYWJzdHJhY3Rpb24KK0dvYWxzICgxKQorCVByb3ZpZGUgYSBjbGVhbiB3YXkgdG8gYm90aCBidWlsZCBncmFwaHMgYW5kIHdyaXRlIG5ldyBlbGVtZW50cworCU1ha2UgdGhpbmdzIGVhc2llciBieSBwcm92aWRpbmcgYXV0by1jb25uZWN0LCBzdG9jayBzdWItZ3JhcGhzCisJSW5jbHVkZSB0b29scyBzb3JlbHkgbGFja2luZyBpbiBPR0kgcGlwZWxpbmUsIGxpa2UgZWRpdG9yLCBzYXZlcworCUVuYWJsZSBMaW51eCB0byBjYXRjaCB1cCB3aXRoIE0kJ3Mgd29ybGQsIGFsbG93aW5nIGNvbW1lcmNpYWwKKwkgcGx1Z2lucyB0byBhIHN0YWJsZSBBUEkgKGFzIG9mIDEuMCkgc28gd2UgZG9uJ3QgZW5kIHVwIHdpdGggTgorCSB3aGVlbHMgZnJvbSBOLU0gZGlmZmVyZW50IHBlb3BsZSAobXVsdGlwbGUgcHJvamVjdHMpCitPdmVydmlldyAoMSkKKwlPYmplY3QgaGllcmFyY2h5IGNhcGFibGUgb2YgcnVuLXRpbWUgZGlzY292ZXJ5LCBiYXNlZCBvbiBHdGtPYmplY3QKKwlEZWVwbHkgbmVzdGVkIHBhcmVudC1jaGlsZCByZWxhdGlvbnNoaXBzIGVuYWJsZSB0aHJlYWRzLCBibGFja2JveGVzCisJQnVmZmVycyBjYW4gcG9pbnQgdG8gYW55dGhpbmcsIGFyZSB0eXBlZCwgYW5kIGNhbiBjYXJyeSBtZXRhZGF0YQorCVBsdWdpbnMgY2FuIGJlIGxvYWRlZCBhdCBhbnkgcG9pbnQsIGFuZCByZWdpc3RyeSByZWR1Y2VzIGxvYWRzCisJU3ltYmlvdGljIGVkaXRvciBsZXRzIHlvdSBkZXNpZ24vcnVuL3NhdmUgZ3JhcGhzIHZpc3VhbGx5CitXaGF0IGFyZSBmaWx0ZXIgZ3JhcGhzPyAoMSkKKwlGaWx0ZXJzIHRha2UgZGF0YSBpbiBhbmQgc3BpdCBkYXRhIG91dCwgZG9pbmcgc29tZXRoaW5nIHRvIGl0CisJRmlsdGVycyBoYXZlIE4+PTAgaW5wdXRzIGFuZCBNPj0wIG91dHB1dHMKKwlGaWx0ZXIgZ3JhcGhzIGFyZSBtYW55IGZpbHRlcnMgY29ubmVjdGVkIHRvZ2V0aGVyLCBsaWtlIGEgY2lyY3VpdAorCVRoZSBnb2FsIGlzIHR5cGljYWxseSB0byBtb3ZlIGRhdGEgZnJvbSAnbGVmdCcgdG8gJ3JpZ2h0JywgdG93YXJkcworCSBzb21lIGtpbmQgb2YgdXNlci12aXNpYmxlIGNvbmNsdXNpb24sIGkuZS4gYXVkaW8gb3IgdmlkZW8KK0FyY2hpdGVjdHVyZSAoMz8pCisgIC0gR3JhcGhzIG9mIEVsZW1lbnRzCisJKGhlcmUgbGllcyBzY3JlZW4tZ3JhYiBmcm9tIGVkaXRvcikKKwlFbGVtZW50IGlzIGNvcmUgT2JqZWN0LCBCaW5zIGhvbGQgKGFuZCBhcmUpIEVsZW1lbnRzCisJUGFkcyBhcmUgZnVuZGFtZW50YWwgdG8gYW4gRWxlbWVudCwgYXJlIGNyb3NzLXdpcmVkIHdpdGggcG9pbnRlcnMKKwlTaW5jZSBCaW5zIGhvbGQgRWxlbWVudHMsIGFuZCBCaW5zIGFyZSBFbGVtZW50cywgQmlucyBob2xkIEJpbnMKKwknR2hvc3RwYWRzJyBwcm92aWRlIGludGVyZmFjZXMgZm9yIEJpbnMgd2l0aG91dCBuYXRpdmUgaW50ZXJmYWNlcworIwlUaHJlYWRzIGFyZSB0eXBlIG9mIEJpbiB0aGF0IGFjdHVhbGx5IHJ1biBpbiBzZXBhcmF0ZSB0aHJlYWRzCisKKyAgLSBTdGF0ZXMKKwkodGFibGUgb2Ygc3RhdGVzLCBpbnZhcmlhbnRzLCBhbmQgZGVzY3JpcHRpb25zKQorCSAgICBDT01QTEVURQlFbGVtZW50IGhhcyBhbGwgbmVlZGVkIGluZm9ybWF0aW9uCisJICAgIFJVTk5JTkcJRWxlbWVudCBoYXMgYWNxdWlyZWQgcmVzb3VyY2VzLCByZWFkeSB0byBnbworCSAgICBESVNDT1ZFUlkJLi4uICh1bmltcGxlbWVudGVkKQorCSAgICBQUkVST0xMCS4uLiAodW5pbXBsZW1lbnRlZCkKKwkgICAgUExBWUlORwlFbGVtZW50IGlzIGFjdGl2ZWx5IHRyYWRpbmcgZGF0YQorCSAgICBQQVVTRUQJU3BlY2lhbCBzdGF0ZSB3aGVyZSB0aGluZ3MganVzdCBkb24ndCBydW4gKD8uLikKKwlTdGF0ZXMgYXJlIHVzZWQgdG8ga2VlcCBlbGVtZW50cyBpbiBjaGVjaworCisgIC0gQnVmZmVycworCUJ1ZmZlcnMgZGVzaWduZWQgdG8gYmUgdmVyc2F0aWxlLCB3aXRoIGFyYml0cmFyeSB0eXBpbmcvbWV0YWRhdGEKKwlIYXMgcG9pbnRlciB0byBkYXRhLCBsZW5ndGgsIHNvIGNhbiBwb2ludCB0byBzb21lb25lIGVsc2UncyBkYXRhCisJVHlwZSBzeXN0ZW0gKGNydWRlIHNvIGZhcikgZW5zdXJlcyBidWZmZXJzIGRvbid0IGdvIHN0cmF5CisJTWV0YWRhdGEgY2FuIGJlIGF0dGFjaGVkLCBzdWNoIGFzIHRoZSBhdWRpbyBwYXJhbWV0ZXJzCisJUmVmLWNvdW50aW5nIGFuZCBjb3B5LW9uLXdyaXRlIGF2b2lkcyBtb3N0IGNvcGllcywgbm90IGNvbXBsZXRlCisJU3ViLWJ1ZmZlcnMgY2FuIGJlIGNyZWF0ZWQgZnJvbSBiaWdnZXIgYnVmZmVyLCBsaW1pdHRpbmcgY29waWVzCitHdGsrIE9iamVjdCBTeXN0ZW0gKDIpCisgIC0gUHJvcworCUMtbGFuZ3VhZ2Ugb2JqZWN0IHN5c3RlbSwgd2VsbCB0ZXN0ZWQgKEd0ayssIEdub21lLi4uKQorCUFyZ3VtZW50cyBvZiBhbnkgZnVuZGFtZW50YWwgdHlwZSwgcmVhZC93cml0ZSwgYnVpbHQtaW4gaG9va3MKKwlTaWduYWxzIHVzZWQgZm9yIGhvb2tzIGludG8gb2JqZWN0IGV2ZW50cywgb3ZlcnJpZGFibGUKKwlSdW4tdGltZSBkaXNjb3Zlcnkgb2YgYXJncywgc2lnbmFscyAocXVhcmtzKQorICAtIENvbnMKKwlObyBtdWx0aXBsZS1pbmhlcml0YW5jZSwgdGhvdWdoIEkgaGF2ZW4ndCAqbmVlZGVkKiBpdAorCVRoZXJlIGFyZSBzb21lIGhvbGVzIChjYW4ndCBhdHRhY2ggcXVhcmtzIHRvICpldmV5dGhpbmcqKQorCisgIC0gRGVzaWduCisJQ2xhc3NlcywgaW5zdGFuY2VzIGFyZSBzdHJ1Y3RzOyAxc3QgaXRlbSBpcyBwYXJlbnQgY2xhc3MKKwlUeXBlIHN5c3RlbSBhbGxvd3MgY2xlYW4gY2FzdGluZywgXl5eXl5eCisJQXJndW1lbnRzIGFyZSBzZXQvZ2V0IGJ5IHN0cmluZywgdXNlIGZ1bmN0aW9ucyB0byBkbyB0aGUgd29yaywKKwkgdGh1cyBzZXR0aW5nIGFuIGFyZyBtaWdodCB0cmlnZ2VyIGEgcmVkcmF3IG9mIHRoZSBHVUkKKwlTaWduYWxzIGFyZSBzdHJpbmdzLCB1c2UgbWFyc2hhbGxlcnMsIHZhcmlvdXMgZmlyaW5nIG1ldGhvZHMKK0Jhc2ljIEdTdHJlYW1lciBvYmplY3RzICgxKQorICAtIEVsZW1lbnRzCisJKHNob3cgY2xhc3MsaW5zdGFuY2Ugc3RydWN0cykKKwlWZXJ5IHNpbXBsZSwganVzdCBwcm92aWRlcyBhIG1lYW5zIHRvIGhhbmRsZSBwYWRzLCBzdGF0ZQorICAtIEJpbnMKKwkoc2hvdyBjbGFzcyxpbnN0YW5jZSBzdHJ1Y3RzKQorCVN1cHBvcnRzIGNoaWxkcmVuLCBoYW5kbGVzIGdyb3VwIHN0YXRlIHRyYW5zaXRpb25zCitQYWRzICgxKQorCVBhZCBsaXN0IHR5cGUsIGRpcmVjdGlvbiwgYW5kIGNoYWluaW5nIGZ1bmN0aW9uIHB0cgorCVdoZW4gY3JlYXRpbmcgYSBzaW5rIHBhZCAoIXNyYykgeW91IHNldCB0aGUgY2hhaW5pbmcgZnVuY3Rpb24KKwlnc3RfcGFkX2Nvbm5lY3QoKSBzZXRzIHRoZSBwZWVycywgYW5kIGNvcGllcyBjaGFpbiBmdW5jdGlvbiB0byBzcmMKKwlQYXNzaW5nIGJ1ZmZlciB0byBhIHNyYyBwYWQgdHJhbnNwYXJlbnRseSBjYWxscyB0aGUgY2hhaW4gZnVuY3Rpb24KKwkoZ3JhcGggZ29lcyBoZXJlLi4uKQorU291cmNlcyAoMSkKKwlTb3VyY2UgcHJvdmlkZXMgZnVuY3Rpb25zIHRvIHB1c2ggZGF0YQorCVJlZ3VsYXIgcHVzaCgpIGZ1bmN0aW9uIGp1c3QgdGFrZXMgbmV4dCBOIGJ5dGVzIGFuZCBzZW5kcyB0aGVtCisJQXN5bmMgcHVzaF9yZWdpb24oKSBncmFicyBOIGJ5dGVzIGF0IG9mZnNldCBPIGFuZCBzZW5kcyB0aGVtCisJRU9GIHNpZ25hbCBbd2lsbF0gcmVzZXQgdGhlIHN0YXRlIGZyb20gUExBWUlORyBkb3duIHRvICFSVU5OSU5HCisJImxvY2F0aW9uIiBhcmd1bWVudCBpcyBnbG9iYWwgYnkgY29udmVudGlvbiwgZm9yIGZpbGVuYW1lcy4uLlVSSXMKK0Nvbm5lY3Rpb25zICgxKQorCVNwZWNpYWwgdHlwZSBvZiBGaWx0ZXIgdGhhdCAKK1RocmVhZHMgKDEpCisJU3BlY2lhbCBjYXNlIG9mIEJpbiB0aGF0IGFjdHVhbGx5IGNyZWF0ZXMgYSB0aHJlYWQgdHJhbnNwYXJlbnRseQorCVdoZW4gUlVOTklORywgdGhyZWFkIGV4aXN0cywgbXV0ZXgvY29uZCB1c2VkIHRvIGdvIFshXVBMQVlJTkcKKwlBdXRvbWF0aWNhbGx5IGRldGVybWluZXMgaG93IHRvIHN0YXJ0IHN1Yi1ncmFwaAorCQlMb29rcyBmb3IgYm90aCBTb3VyY2VzIGFuZCBFbGVtZW50cyB3aXJlZCB0byBDb25uZWN0aW9uCisJV2lsbCBjb29wZXJhdGUgd2l0aCBQaXBlbGluZXMgd2hlbiB0aHJlYWRpbmcgaXMgbm90IGF2YWlsYWJsZQorVHlwaW5nIGFuZCBNZXRhZGF0YSAoMSkKKyAgLSBUeXBlcworCUJhc2VkIG9uIE1JTUUgdHlwZXMsIHNldCB1cCBhcyBxdWFya3MsIGFuZCBkZWFsdCB3aXRoIGFzIGludAorCVVzYWJsZSBlbnRpcmVseSBhdCBydW4tdGltZSwgc2luY2UgdGhleSdyZSByZWdpc3RlcmFibGUgYnkgcGx1Z2lucworICAtIE1ldGFkYXRhCisJQWxzbyByZWdpc3RlcmVkIGFzIGFuIGludCwgYnV0IG11c3QgYmUgY29tcGlsZSB0aW1lIGR1ZSB0byBzdHJ1Y3RzCisJSGF2ZSByZWZjb3VudHMgYW5kIENvVyBzZW1hbnRpY3MsIHNpbmNlIHRoZXkgdHJhdmVsIHdpdGggYnVmZmVycworUGx1Z2lucyAoMSkKKwlQbHVnaW4gYXJjaGl0ZWN0dXJlIGRlc2lnbmVkIGFyb3VuZCBjbGFzcyBzeXN0ZW0KKwlBcmd1bWVudHMgYW5kIHNpZ25hbHMgcHJvdmlkZSBpbnRlcmZhY2Ugb3ZlciBzdGFuZGFyZCBiYXNlIGNsYXNzCisJRWFjaCBFbGVtZW50IGRlZmluZWQgYnkgRWxlbWVudEZhY3RvcnksIHdoaWNoIGlzIHF1ZXJpZWQgYnkgbmFtZQorCUF0IHBsdWdpbiBsb2FkLCBhbnkgbnVtYmVyIG9mIEVsZW1lbnRGYWN0b3JpZXMgYW5kIFR5cGVzIHJlZ2lzdGVyZWQKKwlFbGVtZW50IHJlZ2lzdGVycyBhZ2FpbnN0IFR5cGUgYXMgc291cmNlIG9yIHNpbmsKK0VkaXRvciAoMis/KQorCShzaG93IGZpbHRlciBncmFwaCBzbmFwc2hvdCwgYSBkaWZmZXJlbnQgb25lLCBtb3JlIGNvbXBsZXgpCisJQnVpbHQgYXMgYSBwYXJhbGxlbCBvYmplY3QgaGllcmFyY2h5IG9uIHRvcCBvZiBHTk9NRSBDYW52YXMKKwlFdmVyeSBvYmplY3QgaW4gZmlsdGVyIGdyYXBoIGhhcyBlcXVpdmFsZW50IGluIGVkaXRvciwgcGx1cyBzb21lCisJQ2FudmFzIGlzIGRlc2lnbmVkIHdpdGggZ3JvdXBzIGFuZCBzaWduYWwtcHJvcGFnYXRpb24sIHNvLi4uCisJV2h5IG5vdCBidWlsZCB0aGUgd2hvbGUgdGhpbmcgYXMgc3ViY2xhc3NlcyBvZiBDYW52YXNHcm91cD8KKworCS4uLmJlY2F1c2UgdXBkYXRlcyBnZXQgbWVzc3kvcmVjdXJzaXZlICh0aGUgd2F5IEkgKndhcyogZG9pbmcgaXQpCisJU29sdXRpb24gaXMgdG8gbW9kaWZ5IG9iamVjdHMgc28gdGhleSBvd24gR3JvdXAgcmF0aGVyIHRoYW4gYmVpbmcKKwlSZWxhdGl2ZWx5IHRyaXZpYWwgbW9kaWZpY2F0aW9uLCBidXQgcmVxdWlyZXMgbG90cyBvZiByZXBvaW50ZXJpbmcKKwlTdGlsbCBhIGdlbmVhbG9naWNhbCBtZXNzIG9mIHBhcmVudHMgYW5kIGNoaWxkcmVuLi4uCitYTUwKKwlUaGUgZ29hbCBpcyB0byB1c2UgWE1MIGhlYXZpbHksIHdpdGggYW4gZXllIHRvd2FyZHMgRE9NCisJVXNlZCBmb3IgYm90aCBzYXZpbmcgYW5kIHByb3ZpZGluZyBwcmUtYnVpbGQgY29tcG9uZW50cworCUJvdGggZ3JhcGggYW5kIGVkaXRvciB3aWxsIGhhdmUgbmFtZXNwYWNlLCB0aGV5J2xsIGludGVybGVhdmUKKwlBIGdlbmVyaWMgc2F2ZSBmdW5jdGlvbiB3aWxsIGV4aXN0IGZvciBFbGVtZW50cywgd2l0aCBob29rcworCVNhdmluZyBhbiBFZGl0b3JFbGVtZW50IHdpbGwgYWxzbyBzYXZlIEVsZW1lbnQKKwlBbHNvIHVzZWQgZm9yIGEgcGx1Z2luIHJlZ2lzdHJ5LCB0byBhdm9pZCBsb2FkaW5nIGFsbCBwbHVnaW5zCisKKworCisKK2xlYWt5IGJ1Y2tldCBpcyB0cml2aWFsCithcHBsaWNhdGlvbnMgLSBnZW5lcmljIGNvbmZlcmVuY2luZyB0b29sIChyZXBsdWdnYWJsZSBjb2RlY3MpLCBtaXhpbmcKKyBlbnZpcm9ubWVudCAoZGF0YSBmbG93IGdyYXBocykKZGlmZiAtLWdpdCBhL2RvY3Mvc2xpZGVzL3NsaWRlcyBiL2RvY3Mvc2xpZGVzL3NsaWRlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDM0ODExCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9zbGlkZXMvc2xpZGVzCkBAIC0wLDAgKzEsMTcgQEAKK0ludHJvZHVjdGlvbgorV2h5IGRvIHdlIG5lZWQgdGhpcz8KK0dvYWxzCitPdmVydmlldworV2hhdCBhcmUgZmlsdGVyIGdyYXBocz8KK0d0aysgT2JqZWN0IFN5c3RlbQorQXJjaGl0ZWN0dXJlIC0gRWxlbWVudHMKK1BhZHMKK0FyY2hpdGVjdHVyZSAtIEJ1ZmZlcnMKK1R5cGluZyBhbmQgTWV0YWRhdGEKK1NvdXJjZXMKK1RocmVhZHMgYW5kIENvbm5lY3Rpb25zCitBcmNoaXRlY3R1cmUgLSBTdGF0ZXMKK1BsdWdpbnMKK0VkaXRvcgorWE1MCitGdXR1cmVzCmRpZmYgLS1naXQgYS9kb2NzL3VybC5lbnRpdGllcyBiL2RvY3MvdXJsLmVudGl0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZmI1MGUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3VybC5lbnRpdGllcwpAQCAtMCwwICsxLDMgQEAKKzwhLS0gVGhlc2UgZW50aXRpZXMgY291bGQgYmUgb3ZlcnJpZGRlbiBmb3IgaW5zdGFsbGVkIGRvY3MgLS0+Cis8IUVOVElUWSBVUkxBUEkgImh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9zdGFibGUvZ3N0cmVhbWVyL2h0bWwvIj4KKwpkaWZmIC0tZ2l0IGEvZG9jcy92ZXJzaW9uLmVudGl0aWVzLmluIGIvZG9jcy92ZXJzaW9uLmVudGl0aWVzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZDcxZTQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3ZlcnNpb24uZW50aXRpZXMuaW4KQEAgLTAsMCArMSwzIEBACis8IUVOVElUWSBHU1RfTUFKT1JNSU5PUiAiQEdTVF9NQUpPUk1JTk9SQCI+Cis8IUVOVElUWSBHU1RfVkVSU0lPTiAiQFBBQ0tBR0VfVkVSU0lPTkAiPgorPCFFTlRJVFkgR1NUX1BMVUdJTlNfRElSICJAUExVR0lORElSQCI+CmRpZmYgLS1naXQgYS9kb2NzL3hzbC9NYWtlZmlsZS5hbSBiL2RvY3MveHNsL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZTY3MzMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3hzbC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDMgQEAKK1hTTD0kKHdpbGRjYXJkICoueHNsKQorCitFWFRSQV9ESVNUID0gJChYU0wpCmRpZmYgLS1naXQgYS9kb2NzL3hzbC9NYWtlZmlsZS5pbiBiL2RvY3MveHNsL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZTUwY2IKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3hzbC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDUzOCBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4xIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IGRvY3MveHNsCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1weXRob24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXNjcnViLWluY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorQU1fVl9HRU4gPSAkKGFtX192X0dFTl8kKFYpKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworQU1fVl9hdCA9ICQoYW1fX3ZfYXRfJChWKSkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9hdF8wID0gQAorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBUyA9IEBBU0AKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAorQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAorQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKK0NDID0gQENDQAorQ0NBUyA9IEBDQ0FTQAorQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACitDQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDSEVDS19NQUpPUl9WRVJTSU9OID0gQENIRUNLX01BSk9SX1ZFUlNJT05ACitDSEVDS19NSUNST19WRVJTSU9OID0gQENIRUNLX01JQ1JPX1ZFUlNJT05ACitDSEVDS19NSU5PUl9WRVJTSU9OID0gQENIRUNLX01JTk9SX1ZFUlNJT05ACitDSEVDS19WRVJTSU9OID0gQENIRUNLX1ZFUlNJT05ACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEFESVIgPSBAREFUQURJUkAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRU5BQkxFX1NVQlVOSVQgPSBARU5BQkxFX1NVQlVOSVRACitFUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZGTEFHUyA9IEBGRkxBR1NACitGR1JFUCA9IEBGR1JFUEAKK0ZMRVhfUEFUSCA9IEBGTEVYX1BBVEhACitHQ09WID0gQEdDT1ZACitHQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKK0dDT1ZfTElCUyA9IEBHQ09WX0xJQlNACitHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAorR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKK0dMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAorR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKK0dMSUJfT05MWV9DRkxBR1MgPSBAR0xJQl9PTkxZX0NGTEFHU0AKK0dMSUJfT05MWV9MSUJTID0gQEdMSUJfT05MWV9MSUJTQAorR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACitHTElCX1JFUSA9IEBHTElCX1JFUUAKK0dNUF9MSUJTID0gQEdNUF9MSUJTQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHUkVQID0gQEdSRVBACitHU0xfTElCUyA9IEBHU0xfTElCU0AKK0dTVF9BR0UgPSBAR1NUX0FHRUAKK0dTVF9BTExfQ0ZMQUdTID0gQEdTVF9BTExfQ0ZMQUdTQAorR1NUX0FMTF9DWFhGTEFHUyA9IEBHU1RfQUxMX0NYWEZMQUdTQAorR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKK0dTVF9BTExfTElCUyA9IEBHU1RfQUxMX0xJQlNACitHU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKK0dTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9ERUZJTkVACitHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkVACitHU1RfRElTQUJMRV9ORVRfREVGSU5FID0gQEdTVF9ESVNBQkxFX05FVF9ERUZJTkVACitHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAorR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKK0dTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKK0dTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACitHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfVFJBQ0VfREVGSU5FQAorR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAorR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAorR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTU19ERUZJTkUgPSBAR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTU19ERUZJTkVACitHU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKK0dTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAorR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKK0dTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAorR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACitHU1RfTUFKT1JNSU5PUiA9IEBHU1RfTUFKT1JNSU5PUkAKK0dTVF9PQkpfQ0ZMQUdTID0gQEdTVF9PQkpfQ0ZMQUdTQAorR1NUX09CSl9DWFhGTEFHUyA9IEBHU1RfT0JKX0NYWEZMQUdTQAorR1NUX09CSl9MSUJTID0gQEdTVF9PQkpfTElCU0AKK0dTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAorR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAorR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAorR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKK0dTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKK0dTVF9QS0dfREVQUyA9IEBHU1RfUEtHX0RFUFNACitHU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAorR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAorR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1BPSU5URVJfRk9STUFUX0RFRklORUAKK0dTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORSA9IEBHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkVACitHU1RfUkVHSVNUUllfRE9DX1RZUEVTID0gQEdTVF9SRUdJU1RSWV9ET0NfVFlQRVNACitHU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAorR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FID0gQEdTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OX0RFRklORUAKK0dUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACitIQVZFX0RPQ0JPT0sySFRNTCA9IEBIQVZFX0RPQ0JPT0sySFRNTEAKK0hBVkVfRE9DQk9PSzJQUyA9IEBIQVZFX0RPQ0JPT0syUFNACitIQVZFX0RWSVBTID0gQEhBVkVfRFZJUFNACitIQVZFX0VQU1RPUERGID0gQEhBVkVfRVBTVE9QREZACitIQVZFX0ZJRzJERVYgPSBASEFWRV9GSUcyREVWQAorSEFWRV9HTVAgPSBASEFWRV9HTVBACitIQVZFX0dTTCA9IEBIQVZFX0dTTEAKK0hBVkVfSkFERVRFWCA9IEBIQVZFX0pBREVURVhACitIQVZFX1BOR1RPUE5NID0gQEhBVkVfUE5HVE9QTk1ACitIQVZFX1BOTVRPUFMgPSBASEFWRV9QTk1UT1BTQAorSEFWRV9QUzJQREYgPSBASEFWRV9QUzJQREZACitIQVZFX1hNTExJTlQgPSBASEFWRV9YTUxMSU5UQAorSE9TVF9DUFUgPSBASE9TVF9DUFVACitIVE1MX0RJUiA9IEBIVE1MX0RJUkAKK0lORVRfQVRPTl9MSUJTID0gQElORVRfQVRPTl9MSUJTQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAorSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAorSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAorSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACitJTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAorSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAorSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkRJUiA9IEBMSUJESVJACitMSUJJQ09OViA9IEBMSUJJQ09OVkAKK0xJQklOVEwgPSBATElCSU5UTEAKK0xJQk0gPSBATElCTUAKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xPQ0FMRURJUiA9IEBMT0NBTEVESVJACitMVExJQklDT05WID0gQExUTElCSUNPTlZACitMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BSU5UID0gQE1BSU5UQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAorUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKK1BBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACitQQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKK1BBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMX1BBVEggPSBAUEVSTF9QQVRIQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUExVR0lORElSID0gQFBMVUdJTkRJUkAKK1BPU1VCID0gQFBPU1VCQAorUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACitQWVRIT04gPSBAUFlUSE9OQAorUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKK1BZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACitQWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACitQWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKK1ZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKK1ZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1dBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAorV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAorWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKK1hTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK2x0X0VDSE8gPSBAbHRfRUNIT0AKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKK3BrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACitwbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKK3B5dGhvbmRpciA9IEBweXRob25kaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1hTTCA9ICQod2lsZGNhcmQgKi54c2wpCitFWFRSQV9ESVNUID0gJChYU0wpCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBkb2NzL3hzbC9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSBkb2NzL3hzbC9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKK3RhZ3M6IFRBR1MKK1RBR1M6CisKK2N0YWdzOiBDVEFHUworQ1RBR1M6CisKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUKK2luc3RhbGxkaXJzOgoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0ZGlyIGR2aSBcCisJZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKKwlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIFwKKwlpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gXAorCWluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgXAorCWluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIFwKKwlpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2RvY3MveHNsL2FkbW9uLnhzbCBiL2RvY3MveHNsL2FkbW9uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTkwY2QwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy94c2wvYWRtb24ueHNsCkBAIC0wLDAgKzEsMTEgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorICAgICAgICAgICAgICAgIHhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiCisgICAgICAgICAgICAgICAgdmVyc2lvbj0nMS4wJz4KKworPCEtLSBUdXJuIG9uIGFkbW9uaXRpb24gZ3JhcGhpY3MuIC0tPgorPHhzbDpwYXJhbSBuYW1lPSJhZG1vbi5ncmFwaGljcyIgc2VsZWN0PSInMSciLz4KKzx4c2w6cGFyYW0gbmFtZT0iYWRtb24uZ3JhcGhpY3MucGF0aCIgc2VsZWN0PSInc3R5bGVzaGVldC1pbWFnZXMvJyIvPgorCis8L3hzbDpzdHlsZXNoZWV0PgorCmRpZmYgLS1naXQgYS9kb2NzL3hzbC9jc3MueHNsIGIvZG9jcy94c2wvY3NzLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDVhYWIyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy94c2wvY3NzLnhzbApAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKyAgICAgICAgICAgICAgICB4bWxuczpmbz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvRm9ybWF0IgorICAgICAgICAgICAgICAgIHZlcnNpb249JzEuMCc+CisKKzwhLS0gVXNlIGFuIEhUTUwgQ1NTIHN0eWxlc2hlZXQuIC0tPgorPHhzbDpwYXJhbSBuYW1lPSJodG1sLnN0eWxlc2hlZXQiIHNlbGVjdD0iJ2Jhc2UuY3NzJyIvPgorCis8L3hzbDpzdHlsZXNoZWV0PgorCmRpZmYgLS1naXQgYS9kb2NzL3hzbC9maWxlZXh0LnhzbCBiL2RvY3MveHNsL2ZpbGVleHQueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNGU0Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3hzbC9maWxlZXh0LnhzbApAQCAtMCwwICsxLDExIEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKyAgICAgICAgICAgICAgICB4bWxuczpmbz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvRm9ybWF0IgorICAgICAgICAgICAgICAgIHZlcnNpb249JzEuMCc+CisKKzwhLS0gVGhpcyBzZXRzIHRoZSBleHRlbnNpb24gZm9yIEhUTUwgZmlsZXMgdG8gIi5odG1sIi4gICAgIC0tPgorPCEtLSAoVGhlIHN0eWxlc2hlZXQncyBkZWZhdWx0IGZvciBYSFRNTCBmaWxlcyBpcyAiLnhodG0iLikgLS0+Cis8eHNsOnBhcmFtIG5hbWU9Imh0bWwuZXh0IiBzZWxlY3Q9IicuaHRtbCciLz4KKworPC94c2w6c3R5bGVzaGVldD4KKwpkaWZmIC0tZ2l0IGEvZG9jcy94c2wvZm8ueHNsIGIvZG9jcy94c2wvZm8ueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhOTg0MDkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3hzbC9mby54c2wKQEAgLTAsMCArMSwxOSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisgICAgICAgICAgICAgICAgdmVyc2lvbj0nMS4wJworICAgICAgICAgICAgICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvdHJhbnNpdGlvbmFsIgorICAgICAgICAgICAgICAgIGV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzPSIjZGVmYXVsdCI+CisKKzwhLS0gVGhpcyBmaWxlIGlzIGZvciBjdXN0b21pemluZyB0aGUgZGVmYXVsdCBYU0wgc3R5bGVzaGVldHMuIC0tPgorPCEtLSBXZSBpbmNsdWRlIHRoZW0gaGVyZSAodGhpcyBvbmUgaXMgZm9yIHByaW50IG91dHB1dCk6ICAgICAgLS0+Cis8eHNsOmltcG9ydAorIGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjUwLjAvZm8vZG9jYm9vay54c2wiLz4KKworPCEtLSAuLiBhbmQgY3VzdG9taXplIHRoZW0gaGVyZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Cis8eHNsOmluY2x1ZGUgaHJlZj0idWxpbmsueHNsIi8+Cis8eHNsOmluY2x1ZGUgaHJlZj0ia2V5Y29tYm8ueHNsIi8+Cis8eHNsOnBhcmFtIG5hbWU9ImJvZHkuZm9udC5mYW1pbHkiIHNlbGVjdD0iJ3NlcmlmJyIvPgorPHhzbDpwYXJhbSBuYW1lPSJzYW5zLmZvbnQuZmFtaWx5IiBzZWxlY3Q9IidzYW5zLXNlcmlmJyIvPgorPHhzbDpwYXJhbSBuYW1lPSJ0aXRsZS5mb250LmZhbWlseSIgc2VsZWN0PSInc2Fucy1zZXJpZiciLz4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2RvY3MveHNsL2h0bWwueHNsIGIvZG9jcy94c2wvaHRtbC54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkwOGYyYgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MveHNsL2h0bWwueHNsCkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorICAgICAgICAgICAgICAgIHZlcnNpb249JzEuMCcKKyAgICAgICAgICAgICAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL3RyYW5zaXRpb25hbCIKKyAgICAgICAgICAgICAgICBleGNsdWRlLXJlc3VsdC1wcmVmaXhlcz0iI2RlZmF1bHQiPgorCis8IS0tIFRoaXMgZmlsZSBpcyBmb3IgY3VzdG9taXppbmcgdGhlIGRlZmF1bHQgWFNMIHN0eWxlc2hlZXRzLiAtLT4KKzwhLS0gV2UgaW5jbHVkZSB0aGVtIGhlcmUgKHRoaXMgb25lIGlzIGZvciBIVE1MIG91dHB1dCk6ICAgICAgIC0tPgorPHhzbDppbXBvcnQKKyBocmVmPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvY3VycmVudC94aHRtbC9jaHVuay54c2wiLz4KKworPCEtLSAuLiBhbmQgY3VzdG9taXplIHRoZW0gaGVyZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Cis8eHNsOmluY2x1ZGUgaHJlZj0iZmlsZWV4dC54c2wiLz4KKzx4c2w6aW5jbHVkZSBocmVmPSJrZXljb21iby54c2wiLz4KKzwhLS0gPHhzbDppbmNsdWRlIGhyZWY9ImFkbW9uLnhzbCIvPiAtLT4KKzx4c2w6aW5jbHVkZSBocmVmPSJjc3MueHNsIi8+CisKKzx4c2w6cGFyYW0gbmFtZT0iZ2VuZXJhdGUuY29tcG9uZW50LnRvYyIgc2VsZWN0PSIwIi8+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9kb2NzL3hzbC9rZXljb21iby54c2wgYi9kb2NzL3hzbC9rZXljb21iby54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IxMjUwYQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MveHNsL2tleWNvbWJvLnhzbApAQCAtMCwwICsxLDI2IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKyAgICAgICAgICAgICAgICB4bWxuczpmbz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvRm9ybWF0IgorICAgICAgICAgICAgICAgIHZlcnNpb249JzEuMCc+CisKKzwhLS0gVGhlcmUgaXMgYSBidWcgaW4gZG9jYm9vay14c2wtMS40NTsgd29yayBhcm91bmQgaXQgaGVyZS4gLS0+Cis8IS0tIEFsc28gY2hhbmdlIGl0IHNsaWdodGx5IGZvciBlbWFjcyBrZXkgZGVzY3JpcHRpb25zLiAgICAgIC0tPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ia2V5Y29tYm8iPgorIDx4c2w6dmFyaWFibGUgbmFtZT0iYWN0aW9uIiBzZWxlY3Q9IkBhY3Rpb24iLz4KKyA8eHNsOnZhcmlhYmxlIG5hbWU9ImpvaW5jaGFyIj4KKyAgPHhzbDpjaG9vc2U+CisgICA8eHNsOndoZW4gdGVzdD0iJGFjdGlvbj0nc2VxJyI+PHhzbDp0ZXh0PiA8L3hzbDp0ZXh0PjwveHNsOndoZW4+CisgICA8eHNsOndoZW4gdGVzdD0iJGFjdGlvbj0nc2ltdWwnIj4tPC94c2w6d2hlbj4KKyAgIDx4c2w6b3RoZXJ3aXNlPi08L3hzbDpvdGhlcndpc2U+CisgIDwveHNsOmNob29zZT4KKyA8L3hzbDp2YXJpYWJsZT4KKyA8eHNsOmZvci1lYWNoIHNlbGVjdD0iLi8qIj4KKyAgPHhzbDppZiB0ZXN0PSJwb3NpdGlvbigpPjEiPgorICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRqb2luY2hhciIvPgorICA8L3hzbDppZj4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIi8+CisgPC94c2w6Zm9yLWVhY2g+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPC94c2w6c3R5bGVzaGVldD4KKwpkaWZmIC0tZ2l0IGEvZG9jcy94c2wvdWxpbmsueHNsIGIvZG9jcy94c2wvdWxpbmsueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMWVlNDgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3hzbC91bGluay54c2wKQEAgLTAsMCArMSwzMiBAQAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisgICAgICAgICAgICAgICAgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIKKyAgICAgICAgICAgICAgICB2ZXJzaW9uPScxLjAnPgorCis8IS0tIFRoaXMgYWx0ZXJzIHRoZSByZW5kZXJpbmcgb2YgVVJMcy4gIExldCdzIGZvbGxvdyBSRkMgMjM5NiAtLT4KKzwhLS0gZ3VpZGVsaW5lcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idWxpbmsiPgorIDxmbzpiYXNpYy1saW5rIGV4dGVybmFsLWRlc3RpbmF0aW9uPSJ7QHVybH0iCisgICAgICAgICAgICAgICAgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ieHJlZi5wcm9wZXJ0aWVzIj4KKyAgPHhzbDpjaG9vc2U+CisgICA8eHNsOndoZW4gdGVzdD0iY291bnQoY2hpbGQ6Om5vZGUoKSk9MCI+CisgICAgPHhzbDp0ZXh0PiZsdDs8L3hzbDp0ZXh0PgorICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdXJsIi8+CisgICAgPHhzbDp0ZXh0PiZndDs8L3hzbDp0ZXh0PgorICAgPC94c2w6d2hlbj4KKyAgIDx4c2w6b3RoZXJ3aXNlPgorICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzLz4KKyAgIDwveHNsOm90aGVyd2lzZT4KKyAgPC94c2w6Y2hvb3NlPgorIDwvZm86YmFzaWMtbGluaz4KKyA8eHNsOmlmIHRlc3Q9ImNvdW50KGNoaWxkOjpub2RlKCkpICE9IDAiPgorICA8Zm86aW5saW5lIGh5cGhlbmF0ZT0iZmFsc2UiPgorICAgPHhzbDp0ZXh0PiBhdCAmbHQ7PC94c2w6dGV4dD4KKyAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdXJsIi8+CisgICA8eHNsOnRleHQ+Jmd0OzwveHNsOnRleHQ+CisgIDwvZm86aW5saW5lPgorIDwveHNsOmlmPgorPC94c2w6dGVtcGxhdGU+CisKKzwveHNsOnN0eWxlc2hlZXQ+CisKZGlmZiAtLWdpdCBhL2dzdC1lbGVtZW50LWNoZWNrLm00LmluIGIvZ3N0LWVsZW1lbnQtY2hlY2subTQuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVkZWFjZQotLS0gL2Rldi9udWxsCisrKyBiL2dzdC1lbGVtZW50LWNoZWNrLm00LmluCkBAIC0wLDAgKzEsMjMgQEAKK2RubCBQZXJmb3JtIGEgY2hlY2sgZm9yIGEgR1N0cmVhbWVyIGVsZW1lbnQgdXNpbmcgZ3N0LWluc3BlY3QKK2RubCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CitkbmwgTGFzdCBtb2RpZmljYXRpb246IDI1LzAxLzIwMDUKKworZG5sIEFNX0dTVF9FTEVNRU5UX0NIRUNLKEVMRU1FTlQtTkFNRSwgQUNUSU9OLUlGLUZPVU5ELCBBQ1RJT04tSUYtTk9ULUZPVU5EKQorCitBQ19ERUZVTihbQU1fR1NUX0VMRU1FTlRfQ0hFQ0tdLAorWworICBpZiB0ZXN0ICJ4JEdTVF9JTlNQRUNUIiA9ICJ4IjsgdGhlbgorICAgIEFDX0NIRUNLX1BST0coR1NUX0lOU1BFQ1QsIGdzdC1pbnNwZWN0LUBHU1RfTUFKT1JNSU5PUkAsIGdzdC1pbnNwZWN0LUBHU1RfTUFKT1JNSU5PUkAsIFtdKQorICBmaQorCisgIGlmIHRlc3QgIngkR1NUX0lOU1BFQ1QiICE9ICJ4IjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhHU3RyZWFtZXIgQEdTVF9NQUpPUk1JTk9SQCBlbGVtZW50ICQxKQorICAgIGlmIFsgJEdTVF9JTlNQRUNUICQxID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbCBdOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKGZvdW5kLikKKyAgICAgICQyCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChub3QgZm91bmQuKQorICAgICAgJDMKKyAgICBmaQorICBmaQorXSkKZGlmZiAtLWdpdCBhL2dzdC9NYWtlZmlsZS5hbSBiL2dzdC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2I4YzkzCi0tLSAvZGV2L251bGwKKysrIGIvZ3N0L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMzE5IEBACitsaWJfTFRMSUJSQVJJRVMgPSBsaWJnc3RyZWFtZXItQEdTVF9NQUpPUk1JTk9SQC5sYQorCitpZiBHU1RfRElTQUJMRV9SRUdJU1RSWQorR1NUX1JFR0lTVFJZX1NSQyA9CitlbHNlCitHU1RfUkVHSVNUUllfU1JDID0gZ3N0cmVnaXN0cnliaW5hcnkuYworZW5kaWYKKworaWYgR1NUX0RJU0FCTEVfUEFSU0UKK1NVQkRJUlNfUEFSU0UgPQorR1NUX1BBUlNFX0xBID0KK2Vsc2UKK1NVQkRJUlNfUEFSU0UgPSBwYXJzZQorR1NUX1BBUlNFX0xBID0gcGFyc2UvbGliZ3N0cGFyc2UubGEKK2VuZGlmCisKK2lmIEdTVF9ESVNBQkxFX1RSQUNFCitHU1RfVFJBQ0VfU1JDID0KK2Vsc2UKK0dTVF9UUkFDRV9TUkMgPSBnc3R0cmFjZS5jCitlbmRpZgorCitpZiBHU1RfRElTQUJMRV9QTFVHSU4KK0dTVF9QTFVHSU5fU1JDID0KK2Vsc2UKK0dTVF9QTFVHSU5fU1JDID0gZ3N0cGx1Z2luLmMKK2VuZGlmCisKK1NVQkRJUlMgPSAkKFNVQkRJUlNfUEFSU0UpCisKK0RJU1RfU1VCRElSUyA9IHBhcnNlCisKKyMgbWFrZSB2YXJpYWJsZXMgZm9yIGFsbCBnZW5lcmF0ZWQgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMgdG8gbWFrZSB0aGUKKyMgZGlzdGluY3Rpb24gY2xlYXIKKworYnVpbHRfaGVhZGVyX2NvbmZpZ3VyZSA9IGdzdGNvbmZpZy5oIGdzdHZlcnNpb24uaAorYnVpbHRfaGVhZGVyX21ha2UgPSBnc3RlbnVtdHlwZXMuaCBnc3RtYXJzaGFsLmgKK2J1aWx0X3NvdXJjZV9tYWtlID0gZ3N0ZW51bXR5cGVzLmMgZ3N0bWFyc2hhbC5jCisKK0VYVFJBX2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX1NPVVJDRVMgPSBcCisJZ3N0bWFyc2hhbC5saXN0IGdzdHRyYWNlLmMgXAorCWdzdHJlZ2lzdHJ5YmluYXJ5LmMKKworCisjIHRlbXBvcmFyaWx5IG5vdCB1c2VkCisjCWdsaWItY29tcGF0LmMKKworbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfU09VUkNFUyA9IFwKKwlnc3QuYwkJCVwKKwlnc3RvYmplY3QuYwkJXAorCWdzdGJpbi5jCQlcCisJZ3N0YnVmZmVyLmMJCVwKKwlnc3RidWZmZXJsaXN0LmMJCVwKKwlnc3RidWZmZXJwb29sLmMJCVwKKwlnc3RidXMuYwkJXAorCWdzdGNhcHMuYwkJXAorCWdzdGNoaWxkcHJveHkuYwkJXAorCWdzdGNsb2NrLmMJCVwKKwlnc3RkYXRldGltZS5jCQlcCisJZ3N0ZGVidWd1dGlscy5jCQlcCisJZ3N0ZWxlbWVudC5jCQlcCisJZ3N0ZWxlbWVudGZhY3RvcnkuYwlcCisJZ3N0ZXJyb3IuYwkJXAorCWdzdGV2ZW50LmMJCVwKKwlnc3RmaWx0ZXIuYwkJXAorCWdzdGZvcm1hdC5jCQlcCisJZ3N0Z2hvc3RwYWQuYwkJXAorCWdzdGluZGV4LmMgCQlcCisJZ3N0aW5kZXhmYWN0b3J5LmMgCVwKKwlnc3RpbmZvLmMJCVwKKwlnc3RpdGVyYXRvci5jCQlcCisJZ3N0YXRvbWljcXVldWUuYwlcCisJZ3N0bWVzc2FnZS5jCQlcCisJZ3N0bWV0YS5jCQlcCisJZ3N0bWVtb3J5LmMJCVwKKwlnc3RtaW5pb2JqZWN0LmMJCVwKKwlnc3RwYWQuYwkJXAorCWdzdHBhZHRlbXBsYXRlLmMJXAorCWdzdHBhcmFtc3BlY3MuYwkJXAorCWdzdHBpcGVsaW5lLmMJCVwKKwlnc3RwbHVnaW4uYwkJXAorCWdzdHBsdWdpbmZlYXR1cmUuYwlcCisJZ3N0cGx1Z2lubG9hZGVyLmMJXAorCWdzdHBvbGwuYwkJXAorCWdzdHByZXNldC5jICAgICAgICAgICAgIFwKKwlnc3RxdWFyay5jCQlcCisJZ3N0cXVlcnkuYwkJXAorCWdzdHJlZ2lzdHJ5LmMJCVwKKwlnc3RyZWdpc3RyeWNodW5rcy5jCVwKKwlnc3RzZWdtZW50LmMJCVwKKwlnc3RzdHJ1Y3R1cmUuYwkJXAorCWdzdHN5c3RlbWNsb2NrLmMJXAorCWdzdHRhZ2xpc3QuYwkJXAorCWdzdHRhZ3NldHRlci5jCQlcCisJZ3N0dGFzay5jCQlcCisJZ3N0dGFza3Bvb2wuYwkJXAorCSQoR1NUX1RSQUNFX1NSQykJXAorCWdzdHR5cGVmaW5kLmMJCVwKKwlnc3R0eXBlZmluZGZhY3RvcnkuYwlcCisJZ3N0dXJpLmMJCVwKKwlnc3R1dGlscy5jCQlcCisJZ3N0dmFsdWUuYwkJXAorCWdzdHBhcnNlLmMJCVwKKwkkKEdTVF9SRUdJU1RSWV9TUkMpCisKKyMgZG8gbm90IHB1dCBmaWxlcyBpbiB0aGUgZGlzdHJpYnV0aW9uIHRoYXQgYXJlIGdlbmVyYXRlZAorbm9kaXN0X2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX1NPVVJDRVMgPSAkKGJ1aWx0X3NvdXJjZV9tYWtlKQorCisjIEJVSUxUX1NPVVJDRVMgYXJlIGJ1aWx0IG9uIG1ha2UgYWxsL2NoZWNrL2luc3RhbGwgYmVmb3JlIGFsbCBvdGhlciB0YXJnZXRzCitCVUlMVF9TT1VSQ0VTID0gXAorICAgICAgICAkKGJ1aWx0X2hlYWRlcl9jb25maWd1cmUpCVwKKyAgICAgICAgJChidWlsdF9oZWFkZXJfbWFrZSkJCVwKKyAgICAgICAgJChidWlsdF9zb3VyY2VfbWFrZSkKKyMgQ0xFQU5GSUxFUyBpcyBmb3IgZmlsZXMgZ2VuZXJhdGVkIGJ5IG1ha2UKK0NMRUFORklMRVMgPSAkKGJ1aWx0X2hlYWRlcl9tYWtlKSAkKGJ1aWx0X3NvdXJjZV9tYWtlKSAkKGFzX2RsbF9jbGVhbmZpbGVzKSAqLmdjbm8gKi5nY2RhICouZ2NvdiAqLmdjb3Yub3V0CisjIERJU1RDTEVBTkZJTEVTIGlzIGZvciBmaWxlcyBnZW5lcmF0ZWQgYnkgY29uZmlndXJlCitESVNUQ0xFQU5GSUxFUyA9ICQoYnVpbHRfaGVhZGVyX2NvbmZpZ3VyZSkKKworbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTID0JCVwKKwktRF9HTlVfU09VUkNFCQkJCQlcCisJLURHU1RfRVhQT1JUUwkJCQkJXAorCS1ER19MT0dfRE9NQUlOPWdfbG9nX2RvbWFpbl9nc3RyZWFtZXIgCQlcCisJLURHU1RfTUFKT1JNSU5PUj1cIiIkKEdTVF9NQUpPUk1JTk9SKSJcIiAJXAorCS1ER1NUX0RJU0FCTEVfREVQUkVDQVRFRAkJCVwKKwkkKFZBTEdSSU5EX0NGTEFHUykJCQkJXAorCSQoR1NUX0FMTF9DRkxBR1MpCisKK2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0xJQkFERCA9CQlcCisJJChHU1RfUEFSU0VfTEEpCQkJCQlcCisJJChHU1RfQUxMX0xJQlMpCQkJCQlcCisJJChXSU4zMl9MSUJTKQkJCQkJXAorCSQoTElCTSkKKworbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfTERGTEFHUyA9CQlcCisJJChHU1RfTElCX0xERkxBR1MpICQoR1NUX0FMTF9MREZMQUdTKSAkKEdTVF9MVF9MREZMQUdTKQorCitsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL2dzdHJlYW1lci1AR1NUX01BSk9STUlOT1JAL2dzdAorCitnc3RfaGVhZGVycyA9CQkJXAorCWdzdC5oCQkJXAorCWdsaWItY29tcGF0LmgJCVwKKwlnc3RvYmplY3QuaAkJXAorCWdzdGJpbi5oCQlcCisJZ3N0YnVmZmVyLmgJCVwKKwlnc3RidWZmZXJsaXN0LmgJCVwKKwlnc3RidWZmZXJwb29sLmgJCVwKKwlnc3RidXMuaAkJXAorCWdzdGNhcHMuaAkJXAorCWdzdGNoaWxkcHJveHkuaAkJXAorCWdzdGNsb2NrLmgJCVwKKwlnc3Rjb21wYXQuaAkJXAorCWdzdGRhdGV0aW1lLmgJCVwKKwlnc3RkZWJ1Z3V0aWxzLmgJCVwKKwlnc3RlbGVtZW50LmgJCVwKKwlnc3RlbGVtZW50bWV0YWRhdGEuaAlcCisJZ3N0ZWxlbWVudGZhY3RvcnkuaAlcCisJZ3N0ZXJyb3IuaAkJXAorCWdzdGV2ZW50LmgJCVwKKwlnc3RmaWx0ZXIuaAkJXAorCWdzdGZvcm1hdC5oCQlcCisJZ3N0Z2hvc3RwYWQuaAkJXAorCWdzdGluZGV4LmgJCVwKKwlnc3RpbmRleGZhY3RvcnkuaAlcCisJZ3N0aW5mby5oCQlcCisJZ3N0aXRlcmF0b3IuaAkJXAorCWdzdGF0b21pY3F1ZXVlLmgJXAorCWdzdG1hY3Jvcy5oCQlcCisJZ3N0bWVzc2FnZS5oCQlcCisJZ3N0bWV0YS5oCQlcCisJZ3N0bWVtb3J5LmgJCVwKKwlnc3RtaW5pb2JqZWN0LmgJCVwKKwlnc3RwYWQuaAkJXAorCWdzdHBhZHRlbXBsYXRlLmgJXAorCWdzdHBhcmFtc3BlY3MuaAkJXAorCWdzdHBpcGVsaW5lLmgJCVwKKwlnc3RwbHVnaW4uaAkJXAorCWdzdHBsdWdpbmZlYXR1cmUuaAlcCisJZ3N0cG9sbC5oCQlcCisJZ3N0cHJlc2V0LmggICAgICAgICAgICAgXAorCWdzdHF1ZXJ5LmgJCVwKKwlnc3RzZWdtZW50LmgJCVwKKwlnc3RzdHJ1Y3R1cmUuaAkJXAorCWdzdHN5c3RlbWNsb2NrLmgJXAorCWdzdHRhZ2xpc3QuaAkJXAorCWdzdHRhZ3NldHRlci5oCQlcCisJZ3N0dGFzay5oCQlcCisJZ3N0dGFza3Bvb2wuaAkJXAorCWdzdHRyYWNlLmgJCVwKKwlnc3R0eXBlZmluZC5oCQlcCisJZ3N0dHlwZWZpbmRmYWN0b3J5LmgJXAorCWdzdHVyaS5oCQlcCisJZ3N0dXRpbHMuaAkJXAorCWdzdHZhbHVlLmgJCVwKKwlnc3RyZWdpc3RyeS5oCQlcCisJZ3N0cGFyc2UuaAorCitsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVfSEVBREVSUyA9ICQoZ3N0X2hlYWRlcnMpIG1hdGgtY29tcGF0LmgKKworbm9kaXN0X2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAaW5jbHVkZV9IRUFERVJTID0gXAorCSQoYnVpbHRfaGVhZGVyX2NvbmZpZ3VyZSkgJChidWlsdF9oZWFkZXJfbWFrZSkKKworbm9pbnN0X0hFQURFUlMgPSAJCVwKKwlnZXR0ZXh0LmgJCVwKKwlnbGliLWNvbXBhdC1wcml2YXRlLmgJXAorCWdzdC1pMThuLWxpYi5oCQlcCisJZ3N0LWkxOG4tYXBwLmgJCVwKKwlnc3RlbGVtZW50bWV0YWRhdGEuaAlcCisJZ3N0cGx1Z2lubG9hZGVyLmgJXAorCWdzdHF1YXJrLmgJCVwKKwlnc3RyZWdpc3RyeWJpbmFyeS5oICAgICBcCisJZ3N0cmVnaXN0cnljaHVua3MuaCAgICAgXAorCWdzdF9wcml2YXRlLmgKKworZ3N0bWFyc2hhbC5oOiBnc3RtYXJzaGFsLmxpc3QKKwkkKEFNX1ZfR0VOKWdsaWItZ2VubWFyc2hhbCAtLWhlYWRlciAtLXByZWZpeD1nc3RfbWFyc2hhbCAkKHNyY2RpcikvZ3N0bWFyc2hhbC5saXN0ID4gZ3N0bWFyc2hhbC5oLnRtcCAmJiBcCisJbXYgZ3N0bWFyc2hhbC5oLnRtcCBnc3RtYXJzaGFsLmgKKworZ3N0bWFyc2hhbC5jOiBnc3RtYXJzaGFsLmxpc3QgZ3N0X3ByaXZhdGUuaAorCSQoQU1fVl9HRU4pZWNobyAiI2luY2x1ZGUgXCJnc3RfcHJpdmF0ZS5oXCIiID4gZ3N0bWFyc2hhbC5jLnRtcCAmJiBcCisJZWNobyAiI2luY2x1ZGUgXCJnbGliLW9iamVjdC5oXCIiID4+IGdzdG1hcnNoYWwuYy50bXAgJiYgXAorCWVjaG8gIiNpbmNsdWRlIFwiZ3N0bWFyc2hhbC5oXCIiID4+IGdzdG1hcnNoYWwuYy50bXAgJiYgXAorCWdsaWItZ2VubWFyc2hhbCAtLWJvZHkgLS1wcmVmaXg9Z3N0X21hcnNoYWwgJChzcmNkaXIpL2dzdG1hcnNoYWwubGlzdCA+PiBnc3RtYXJzaGFsLmMudG1wICYmIFwKKwltdiBnc3RtYXJzaGFsLmMudG1wIGdzdG1hcnNoYWwuYworCitnc3RlbnVtdHlwZXMuaDogJChnc3RfaGVhZGVycykKKwkkKEFNX1ZfR0VOKWdsaWItbWtlbnVtcyBcCisJLS1maGVhZCAiI2lmbmRlZiBfX0dTVF9FTlVNX1RZUEVTX0hfX1xuI2RlZmluZSBfX0dTVF9FTlVNX1RZUEVTX0hfX1xuXG4jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD5cblxuR19CRUdJTl9ERUNMU1xuIiBcCisJLS1mcHJvZCAiXG4vKiBlbnVtZXJhdGlvbnMgZnJvbSBcIkBmaWxlbmFtZUBcIiAqL1xuIiBcCisJLS12aGVhZCAiR1R5cGUgQGVudW1fbmFtZUBfZ2V0X3R5cGUgKHZvaWQpO1xuI2RlZmluZSBHU1RfVFlQRV9ARU5VTVNIT1JUQCAoQGVudW1fbmFtZUBfZ2V0X3R5cGUoKSlcbiIgICAgICAgICBcCisJLS1mdGFpbCAiR19FTkRfREVDTFNcblxuI2VuZGlmIC8qIF9fR1NUX0VOVU1fVFlQRVNfSF9fICovIiBcCisJJF4gPiBnc3RlbnVtdHlwZXMuaAorCitnc3RlbnVtdHlwZXMuYzogJChnc3RfaGVhZGVycykKKwkkKEFNX1ZfR0VOKWdsaWItbWtlbnVtcyBcCisJLS1maGVhZCAiI2luY2x1ZGUgXCJnc3RfcHJpdmF0ZS5oXCJcbiNpbmNsdWRlIDxnc3QvZ3N0Lmg+XG4jZGVmaW5lIENfRU5VTSh2KSAoKGdpbnQpIHYpXG4jZGVmaW5lIENfRkxBR1ModikgKChndWludCkgdilcbiAiIFwKKwktLWZwcm9kICJcbi8qIGVudW1lcmF0aW9ucyBmcm9tIFwiQGZpbGVuYW1lQFwiICovIiBcCisJLS12aGVhZCAiR1R5cGVcbkBlbnVtX25hbWVAX2dldF90eXBlICh2b2lkKVxue1xuICBzdGF0aWMgZ3NpemUgaWQgPSAwO1xuICBzdGF0aWMgY29uc3QgR0BUeXBlQFZhbHVlIHZhbHVlc1tdID0geyIgICAgIFwKKwktLXZwcm9kICIgICAgeyBDX0BUWVBFQChAVkFMVUVOQU1FQCksIFwiQFZBTFVFTkFNRUBcIiwgXCJAdmFsdWVuaWNrQFwiIH0sIiBcCisJLS12dGFpbCAiICAgIHsgMCwgTlVMTCwgTlVMTCB9XG4gIH07XG5cbiAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7XG4gICAgR1R5cGUgdG1wID0gZ19AdHlwZUBfcmVnaXN0ZXJfc3RhdGljIChcIkBFbnVtTmFtZUBcIiwgdmFsdWVzKTtcbiAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApO1xuICB9XG5cbiAgcmV0dXJuIChHVHlwZSkgaWQ7XG59IiBcCisJJF4gPiBnc3RlbnVtdHlwZXMuYworCislLmMuZ2NvdjogLmxpYnMvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtJS5nY2RhICUuYworCSQoR0NPVikgLWIgLWYgLW8gJF4gPiAkQC5vdXQKKworZ2NvdjogJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9TT1VSQ0VTOj0uZ2NvdikKKworQW5kcm9pZC5tazogTWFrZWZpbGUuYW0KKwlhbmRyb2dlbml6ZXIgLTpQUk9KRUNUIGdzdHJlYW1lciAtOlNIQVJFRCBsaWJnc3RyZWFtZXItQEdTVF9NQUpPUk1JTk9SQCBcCisJIC06VEFHUyBlbmcgZGVidWcgXAorICAgICAgICAgLTpSRUxfVE9QICQodG9wX3NyY2RpcikgLTpBQlNfVE9QICQoYWJzX3RvcF9zcmNkaXIpIFwKKwkgLTpTT1VSQ0VTICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfU09VUkNFUykgXAorCSAgICAgICAgICAgJChub2Rpc3RfbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfU09VUkNFUykgXAorCSAtOkNGTEFHUyAkKERFRlMpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSBcCisJIC06TERGTEFHUyAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0xERkxBR1MpIFwKKwkgICAgICAgICAgICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfTElCQUREKSBcCisJICAgICAgICAgICAtbGRsIFwKKwkgLTpTVUJESVIgZ3N0L3BhcnNlIFwKKwkgLTpIRUFERVJfVEFSR0VUIGdzdHJlYW1lci1AR1NUX01BSk9STUlOT1JAL2dzdCBcCisJIC06SEVBREVSUyAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAaW5jbHVkZV9IRUFERVJTKSBcCisJIC06TElCRklMVEVSX1NUQVRJQyBnc3RwYXJzZSBcCisJIC06UEFTU1RIUk9VR0ggTE9DQUxfQVJNX01PREU6PWFybSBcCisJPiAkQAorCitpZiBIQVZFX0lOVFJPU1BFQ1RJT04KK0JVSUxUX0dJUlNPVVJDRVMgPSBHc3QtQEdTVF9NQUpPUk1JTk9SQC5naXIKKworZ2lyX2hlYWRlcnM9JChwYXRzdWJzdCAlLCQoc3JjZGlyKS8lLCAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAaW5jbHVkZV9IRUFERVJTKSkKK2dpcl9zb3VyY2VzPSQocGF0c3Vic3QgJSwkKHNyY2RpcikvJSwgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9TT1VSQ0VTKSkKKworR3N0LUBHU1RfTUFKT1JNSU5PUkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAubGEKKwkkKEFNX1ZfR0VOKUdTVF9QTFVHSU5fU1lTVEVNX1BBVEg9IiIgR1NUX1BMVUdJTl9QQVRIPSIiIEdTVF9SRUdJU1RSWV9VUERBVEU9bm8gXAorCQkkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgLXYgLS1uYW1lc3BhY2UgR3N0IFwKKwkJLS1uc3ZlcnNpb249QEdTVF9NQUpPUk1JTk9SQCBcCisJCS1JJCh0b3Bfc3JjZGlyKSBcCisJCS1JJCh0b3BfYnVpbGRkaXIpIFwKKwkJLURJTl9HT0JKRUNUX0lOVFJPU1BFQ1RJT049MSBcCisJCS1ER1NUX1VTRV9VTlNUQUJMRV9BUEkgXAorCQktLWMtaW5jbHVkZT0nZ3N0L2dzdC5oJyBcCisJCS0tbGlicmFyeT1saWJnc3RyZWFtZXItMC4xMS5sYSBcCisJCS0taW5jbHVkZT1HTGliLTIuMCBcCisJCS0taW5jbHVkZT1HT2JqZWN0LTIuMCBcCisJCS0taW5jbHVkZT1HTW9kdWxlLTIuMCBcCisJCS0tbGlidG9vbD0iJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wiIFwKKwkJLS1wa2cgZ2xpYi0yLjAgXAorCQktLXBrZyBnb2JqZWN0LTIuMCBcCisJCS0tcGtnIGdtb2R1bGUtbm8tZXhwb3J0LTIuMCBcCisJCS0tcGtnIGd0aHJlYWQtMi4wIFwKKwkJLS1wa2ctZXhwb3J0IGdzdHJlYW1lci1AR1NUX01BSk9STUlOT1JAIFwKKwkJLS1hZGQtaW5pdC1zZWN0aW9uPSJnc3RfaW5pdChOVUxMLCBOVUxMKTsiIFwKKwkJLS1vdXRwdXQgJEAgXAorCQkkKGdpcl9oZWFkZXJzKSBcCisJCSQoZ2lyX3NvdXJjZXMpCisKKyMgSU5UUk9TUEVDVElPTl9HSVJESVIvSU5UUk9TUEVDVElPTl9UWVBFTElCRElSIGFyZW4ndCB0aGUgcmlnaHQgcGxhY2UgdG8KKyMgaW5zdGFsbCBhbnl0aGluZyAtIHdlIG5lZWQgdG8gaW5zdGFsbCBpbnNpZGUgb3VyIHByZWZpeC4KK2dpcmRpciA9ICQoZGF0YWRpcikvZ2lyLTEuMAorZ2lyX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVMpCisKK3R5cGVsaWJzZGlyID0gJChsaWJkaXIpL2dpcmVwb3NpdG9yeS0xLjAvCisKK3R5cGVsaWJzX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVM6Lmdpcj0udHlwZWxpYikKKworJS50eXBlbGliOiAlLmdpciAkKElOVFJPU1BFQ1RJT05fQ09NUElMRVIpCisJJChBTV9WX0dFTikkKElOVFJPU1BFQ1RJT05fQ09NUElMRVIpIC0taW5jbHVkZWRpcj0kKHNyY2RpcikgLS1pbmNsdWRlZGlyPSQoYnVpbGRkaXIpICQoSU5UUk9TUEVDVElPTl9DT01QSUxFUl9PUFRTKSAkPCAtbyAkKEBGKQorCitDTEVBTkZJTEVTICs9ICQoQlVJTFRfR0lSU09VUkNFUykgJCh0eXBlbGlic19EQVRBKQorZW5kaWYKKworIyB0cnkgdG8gcHJldmVudCBwYWNrYWdpbmcgZXJyb3JzCitjaGVjay1saWJleGVjZGlyLWNvbnNpc3RlbmN5OgorCUBpZiB0ZXN0ICIke0dTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUR9IiAhPSAiJHtsaWJleGVjZGlyfS9nc3RyZWFtZXItJChHU1RfTUFKT1JNSU5PUikvZ3N0LXBsdWdpbi1zY2FubmVyIjsgdGhlbiBcCisJICBlY2hvICIqKiogSW5jb25zaXN0ZW50IGxpYmV4ZWNkaXIhIFBsZWFzZSB1c2UgLi9jb25maWd1cmUgLS1saWJleGVjZGlyPS9mb28vYmFyIjsgXAorCSAgZWNobyAiKioqIHRvIHNldCB0aGUgbGliZXhlY2RpciBhbmQgbm90IG1ha2UgbGliZXhlY2Rpcj0vZm9vL2JhciBvciB0aGUgbGlrZS4iOyBcCisJICBlY2hvICIqKiogVGhlIHNhbWUgZ29lcyBmb3IgcHJlZml4LCBsaWJkaXIgZXRjLiI7IFwKKwkgIGVjaG8gIioqKiAke0dTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUR9ICE9ICR7bGliZXhlY2Rpcn0vZ3N0cmVhbWVyLSQoR1NUX01BSk9STUlOT1IpL2dzdC1wbHVnaW4tc2Nhbm5lciI7IFwKKwkgIGV4aXQgMTsgXAorCWZpCisKK2FsbC1sb2NhbDogY2hlY2stbGliZXhlY2Rpci1jb25zaXN0ZW5jeQpkaWZmIC0tZ2l0IGEvZ3N0L01ha2VmaWxlLmluIGIvZ3N0L01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMjFmM2EKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwxODc5IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCisKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQGFtX19hcHBlbmRfMSA9ICQoQlVJTFRfR0lSU09VUkNFUykgJCh0eXBlbGlic19EQVRBKQorc3ViZGlyID0gZ3N0CitESVNUX0NPTU1PTiA9ICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlX0hFQURFUlMpIFwKKwkkKG5vaW5zdF9IRUFERVJTKSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluIFwKKwkkKHNyY2RpcikvZ3N0Y29uZmlnLmguaW4gJChzcmNkaXIpL2dzdHZlcnNpb24uaC5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXB5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtc2NydWItaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0gZ3N0Y29uZmlnLmggZ3N0dmVyc2lvbi5oCitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbF9tYXggPSA0MAorYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKKyAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorYW1fX25vYmFzZV9zdHJpcCA9IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCithbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisgIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCisgICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisgICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCisgICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworYW1fX2Jhc2VfbGlzdCA9IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGxpYmRpcikiICIkKERFU1RESVIpJChnaXJkaXIpIiBcCisJIiQoREVTVERJUikkKHR5cGVsaWJzZGlyKSIgXAorCSIkKERFU1RESVIpJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVkaXIpIiBcCisJIiQoREVTVERJUikkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAaW5jbHVkZWRpcikiCitMVExJQlJBUklFUyA9ICQobGliX0xUTElCUkFSSUVTKQorQEdTVF9ESVNBQkxFX1BBUlNFX0ZBTFNFQGFtX19ERVBFTkRFTkNJRVNfMSA9IHBhcnNlL2xpYmdzdHBhcnNlLmxhCithbV9fREVQRU5ERU5DSUVTXzIgPQorbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMikgJChhbV9fREVQRU5ERU5DSUVTXzIpIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMikKK2FtX19saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9TT1VSQ0VTX0RJU1QgPSBnc3QuYyBnc3RvYmplY3QuYyBcCisJZ3N0YmluLmMgZ3N0YnVmZmVyLmMgZ3N0YnVmZmVybGlzdC5jIGdzdGJ1ZmZlcnBvb2wuYyBnc3RidXMuYyBcCisJZ3N0Y2Fwcy5jIGdzdGNoaWxkcHJveHkuYyBnc3RjbG9jay5jIGdzdGRhdGV0aW1lLmMgXAorCWdzdGRlYnVndXRpbHMuYyBnc3RlbGVtZW50LmMgZ3N0ZWxlbWVudGZhY3RvcnkuYyBnc3RlcnJvci5jIFwKKwlnc3RldmVudC5jIGdzdGZpbHRlci5jIGdzdGZvcm1hdC5jIGdzdGdob3N0cGFkLmMgZ3N0aW5kZXguYyBcCisJZ3N0aW5kZXhmYWN0b3J5LmMgZ3N0aW5mby5jIGdzdGl0ZXJhdG9yLmMgZ3N0YXRvbWljcXVldWUuYyBcCisJZ3N0bWVzc2FnZS5jIGdzdG1ldGEuYyBnc3RtZW1vcnkuYyBnc3RtaW5pb2JqZWN0LmMgZ3N0cGFkLmMgXAorCWdzdHBhZHRlbXBsYXRlLmMgZ3N0cGFyYW1zcGVjcy5jIGdzdHBpcGVsaW5lLmMgZ3N0cGx1Z2luLmMgXAorCWdzdHBsdWdpbmZlYXR1cmUuYyBnc3RwbHVnaW5sb2FkZXIuYyBnc3Rwb2xsLmMgZ3N0cHJlc2V0LmMgXAorCWdzdHF1YXJrLmMgZ3N0cXVlcnkuYyBnc3RyZWdpc3RyeS5jIGdzdHJlZ2lzdHJ5Y2h1bmtzLmMgXAorCWdzdHNlZ21lbnQuYyBnc3RzdHJ1Y3R1cmUuYyBnc3RzeXN0ZW1jbG9jay5jIGdzdHRhZ2xpc3QuYyBcCisJZ3N0dGFnc2V0dGVyLmMgZ3N0dGFzay5jIGdzdHRhc2twb29sLmMgZ3N0dHJhY2UuYyBcCisJZ3N0dHlwZWZpbmQuYyBnc3R0eXBlZmluZGZhY3RvcnkuYyBnc3R1cmkuYyBnc3R1dGlscy5jIFwKKwlnc3R2YWx1ZS5jIGdzdHBhcnNlLmMgZ3N0cmVnaXN0cnliaW5hcnkuYworQEdTVF9ESVNBQkxFX1RSQUNFX0ZBTFNFQGFtX19vYmplY3RzXzEgPSBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R0cmFjZS5sbworQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQGFtX19vYmplY3RzXzIgPSBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RyZWdpc3RyeWJpbmFyeS5sbworYW1fbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfT0JKRUNUUyA9ICBcCisJbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0LmxvIFwKKwlsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RvYmplY3QubG8gXAorCWxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJpbi5sbyBcCisJbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YnVmZmVyLmxvIFwKKwlsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RidWZmZXJsaXN0LmxvIFwKKwlsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RidWZmZXJwb29sLmxvIFwKKwlsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RidXMubG8gXAorCWxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNhcHMubG8gXAorCWxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNoaWxkcHJveHkubG8gXAorCWxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNsb2NrLmxvIFwKKwlsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RkYXRldGltZS5sbyBcCisJbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZGVidWd1dGlscy5sbyBcCisJbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZWxlbWVudC5sbyBcCisJbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZWxlbWVudGZhY3RvcnkubG8gXAorCWxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGVycm9yLmxvIFwKKwlsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RldmVudC5sbyBcCisJbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZmlsdGVyLmxvIFwKKwlsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3Rmb3JtYXQubG8gXAorCWxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGdob3N0cGFkLmxvIFwKKwlsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RpbmRleC5sbyBcCisJbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0aW5kZXhmYWN0b3J5LmxvIFwKKwlsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RpbmZvLmxvIFwKKwlsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RpdGVyYXRvci5sbyBcCisJbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YXRvbWljcXVldWUubG8gXAorCWxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG1lc3NhZ2UubG8gXAorCWxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG1ldGEubG8gXAorCWxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG1lbW9yeS5sbyBcCisJbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bWluaW9iamVjdC5sbyBcCisJbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGFkLmxvIFwKKwlsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwYWR0ZW1wbGF0ZS5sbyBcCisJbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGFyYW1zcGVjcy5sbyBcCisJbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGlwZWxpbmUubG8gXAorCWxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHBsdWdpbi5sbyBcCisJbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGx1Z2luZmVhdHVyZS5sbyBcCisJbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGx1Z2lubG9hZGVyLmxvIFwKKwlsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3Rwb2xsLmxvIFwKKwlsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwcmVzZXQubG8gXAorCWxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHF1YXJrLmxvIFwKKwlsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RxdWVyeS5sbyBcCisJbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cmVnaXN0cnkubG8gXAorCWxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHJlZ2lzdHJ5Y2h1bmtzLmxvIFwKKwlsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RzZWdtZW50LmxvIFwKKwlsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RzdHJ1Y3R1cmUubG8gXAorCWxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHN5c3RlbWNsb2NrLmxvIFwKKwlsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R0YWdsaXN0LmxvIFwKKwlsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R0YWdzZXR0ZXIubG8gXAorCWxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHRhc2subG8gXAorCWxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHRhc2twb29sLmxvIFwKKwkkKGFtX19vYmplY3RzXzEpIFwKKwlsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R0eXBlZmluZC5sbyBcCisJbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dHlwZWZpbmRmYWN0b3J5LmxvIFwKKwlsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R1cmkubG8gXAorCWxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHV0aWxzLmxvIFwKKwlsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R2YWx1ZS5sbyBcCisJbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGFyc2UubG8gJChhbV9fb2JqZWN0c18yKQorYW1fX29iamVjdHNfMyA9IGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGVudW10eXBlcy5sbyBcCisJbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bWFyc2hhbC5sbworbm9kaXN0X2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX09CSkVDVFMgPSAkKGFtX19vYmplY3RzXzMpCitsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9PQkpFQ1RTID0gIFwKKwkkKGFtX2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX09CSkVDVFMpIFwKKwkkKG5vZGlzdF9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9PQkpFQ1RTKQorQU1fVl9sdCA9ICQoYW1fX3ZfbHRfJChWKSkKK2FtX192X2x0XyA9ICQoYW1fX3ZfbHRfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9sdF8wID0gLS1zaWxlbnQKK2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAorCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCisJJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCisJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfJChWKSkKK2FtX192X0NDXyA9ICQoYW1fX3ZfQ0NfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgIiAkQDsKK0FNX1ZfYXQgPSAkKGFtX192X2F0XyQoVikpCithbV9fdl9hdF8gPSAkKGFtX192X2F0XyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfYXRfMCA9IEAKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEXyQoVikpCithbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICIgJEA7CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOXyQoVikpCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitTT1VSQ0VTID0gJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9TT1VSQ0VTKSBcCisJJChFWFRSQV9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9TT1VSQ0VTKSBcCisJJChub2Rpc3RfbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQoYW1fX2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX1NPVVJDRVNfRElTVCkgXAorCSQoRVhUUkFfbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfU09VUkNFUykKK1JFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBcCisJaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1kdmktcmVjdXJzaXZlIGluc3RhbGwtZXhlYy1yZWN1cnNpdmUgXAorCWluc3RhbGwtaHRtbC1yZWN1cnNpdmUgaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1wZGYtcmVjdXJzaXZlIGluc3RhbGwtcHMtcmVjdXJzaXZlIGluc3RhbGwtcmVjdXJzaXZlIFwKKwlpbnN0YWxsY2hlY2stcmVjdXJzaXZlIGluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBwZGYtcmVjdXJzaXZlIFwKKwlwcy1yZWN1cnNpdmUgdW5pbnN0YWxsLXJlY3Vyc2l2ZQorREFUQSA9ICQoZ2lyX0RBVEEpICQodHlwZWxpYnNfREFUQSkKK0hFQURFUlMgPSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAaW5jbHVkZV9IRUFERVJTKSBcCisJJChub2Rpc3RfbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlX0hFQURFUlMpIFwKKwkkKG5vaW5zdF9IRUFERVJTKQorUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMgPSBtb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlCVwKKyAgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorQU1fUkVDVVJTSVZFX1RBUkdFVFMgPSAkKFJFQ1VSU0lWRV9UQVJHRVRTOi1yZWN1cnNpdmU9KSBcCisJJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUzotcmVjdXJzaXZlPSkgdGFncyBUQUdTIGN0YWdzIENUQUdTIFwKKwlkaXN0ZGlyCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorYW1fX3JlbGF0aXZpemUgPSBcCisgIGRpcjA9YHB3ZGA7IFwKKyAgc2VkX2ZpcnN0PSdzLF5cKFteL10qXCkvLiokJCxcMSwnOyBcCisgIHNlZF9yZXN0PSdzLF5bXi9dKi8qLCwnOyBcCisgIHNlZF9sYXN0PSdzLF4uKi9cKFteL10qXCkkJCxcMSwnOyBcCisgIHNlZF9idXRsYXN0PSdzLC8qW14vXSokJCwsJzsgXAorICB3aGlsZSB0ZXN0IC1uICIkJGRpcjEiOyBkbyBcCisgICAgZmlyc3Q9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKKyAgICBpZiB0ZXN0ICIkJGZpcnN0IiAhPSAiLiI7IHRoZW4gXAorICAgICAgaWYgdGVzdCAiJCRmaXJzdCIgPSAiLi4iOyB0aGVuIFwKKyAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfbGFzdCJgLyIkJGRpcjIiOyBcCisgICAgICAgIGRpcjA9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2J1dGxhc3QiYDsgXAorICAgICAgZWxzZSBcCisgICAgICAgIGZpcnN0Mj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAorICAgICAgICBpZiB0ZXN0ICIkJGZpcnN0MiIgPSAiJCRmaXJzdCI7IHRoZW4gXAorICAgICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAorICAgICAgICBlbHNlIFwKKyAgICAgICAgICBkaXIyPSIuLi8kJGRpcjIiOyBcCisgICAgICAgIGZpOyBcCisgICAgICAgIGRpcjA9IiQkZGlyMCIvIiQkZmlyc3QiOyBcCisgICAgICBmaTsgXAorICAgIGZpOyBcCisgICAgZGlyMT1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCisgIGRvbmU7IFwKKyAgcmVsZGlyPSIkJGRpcjIiCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVMgPSBAQVNACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JJU09OX1BBVEggPSBAQklTT05fUEFUSEAKK0NBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKK0NBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACitDQyA9IEBDQ0AKK0NDQVMgPSBAQ0NBU0AKK0NDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAorQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAorQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAorQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAorQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRBRElSID0gQERBVEFESVJACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACitETExUT09MID0gQERMTFRPT0xACitET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAorRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKK0VYRUVYVCA9IEBFWEVFWFRACitGRkxBR1MgPSBARkZMQUdTQAorRkdSRVAgPSBARkdSRVBACitGTEVYX1BBVEggPSBARkxFWF9QQVRIQAorR0NPViA9IEBHQ09WQAorR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACitHQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAorR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACitHTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKK0dMSUJfTElCUyA9IEBHTElCX0xJQlNACitHTElCX09OTFlfQ0ZMQUdTID0gQEdMSUJfT05MWV9DRkxBR1NACitHTElCX09OTFlfTElCUyA9IEBHTElCX09OTFlfTElCU0AKK0dMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAorR0xJQl9SRVEgPSBAR0xJQl9SRVFACitHTVBfTElCUyA9IEBHTVBfTElCU0AKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAorR1JFUCA9IEBHUkVQQAorR1NMX0xJQlMgPSBAR1NMX0xJQlNACitHU1RfQUdFID0gQEdTVF9BR0VACitHU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKK0dTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKK0dTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACitHU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAorR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACitHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FQAorR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAorR1NUX0RJU0FCTEVfTkVUX0RFRklORSA9IEBHU1RfRElTQUJMRV9ORVRfREVGSU5FQAorR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKK0dTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACitHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACitHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAorR1NUX0RJU0FCTEVfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1RSQUNFX0RFRklORUAKK0dTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkUgPSBAR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORUAKK0dTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkUgPSBAR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORUAKK0dTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FID0gQEdTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FQAorR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACitHU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKK0dTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACitHU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKK0dTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAorR1NUX01BSk9STUlOT1IgPSBAR1NUX01BSk9STUlOT1JACitHU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKK0dTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKK0dTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACitHU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKK0dTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKK0dTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKK0dTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACitHU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACitHU1RfUEtHX0RFUFMgPSBAR1NUX1BLR19ERVBTQAorR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKK0dTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgPSBAR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFREAKK0dTVF9QUklOVEZfRVhURU5TSU9OX1BPSU5URVJfRk9STUFUX0RFRklORSA9IEBHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkVACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FQAorR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAorR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKK0dTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OX0RFRklORSA9IEBHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkVACitHVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAorSEFWRV9ET0NCT09LMkhUTUwgPSBASEFWRV9ET0NCT09LMkhUTUxACitIQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAorSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAorSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAorSEFWRV9GSUcyREVWID0gQEhBVkVfRklHMkRFVkAKK0hBVkVfR01QID0gQEhBVkVfR01QQAorSEFWRV9HU0wgPSBASEFWRV9HU0xACitIQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAorSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAorSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKK0hBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAorSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKK0hPU1RfQ1BVID0gQEhPU1RfQ1BVQAorSFRNTF9ESVIgPSBASFRNTF9ESVJACitJTkVUX0FUT05fTElCUyA9IEBJTkVUX0FUT05fTElCU0AKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACitJTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKK0lOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKK0lOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKK0lOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAorSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKK0lOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKK0lOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACitJTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJESVIgPSBATElCRElSQAorTElCSUNPTlYgPSBATElCSUNPTlZACitMSUJJTlRMID0gQExJQklOVExACitMSUJNID0gQExJQk1ACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMT0NBTEVESVIgPSBATE9DQUxFRElSQAorTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAorTFRMSUJJTlRMID0gQExUTElCSU5UTEAKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUlOVCA9IEBNQUlOVEAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKK01TR01FUkdFID0gQE1TR01FUkdFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKK1BBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACitQQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAorUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACitQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BMVUdJTkRJUiA9IEBQTFVHSU5ESVJACitQT1NVQiA9IEBQT1NVQkAKK1BST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAorUFlUSE9OID0gQFBZVEhPTkAKK1BZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACitQWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAorUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAorUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1ZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACitWQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACitWQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACitWRVJTSU9OID0gQFZFUlNJT05ACitXQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKK1dJTjMyX0xJQlMgPSBAV0lOMzJfTElCU0AKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKK1hHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKK1hNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAorWFNMVFBST0MgPSBAWFNMVFBST0NACitYU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3BrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACitwa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAorcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3B5ZXhlY2RpciA9IEBweWV4ZWNkaXJACitweXRob25kaXIgPSBAcHl0aG9uZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitsaWJfTFRMSUJSQVJJRVMgPSBsaWJnc3RyZWFtZXItQEdTVF9NQUpPUk1JTk9SQC5sYQorQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQEdTVF9SRUdJU1RSWV9TUkMgPSBnc3RyZWdpc3RyeWJpbmFyeS5jCitAR1NUX0RJU0FCTEVfUkVHSVNUUllfVFJVRUBHU1RfUkVHSVNUUllfU1JDID0gCitAR1NUX0RJU0FCTEVfUEFSU0VfRkFMU0VAU1VCRElSU19QQVJTRSA9IHBhcnNlCitAR1NUX0RJU0FCTEVfUEFSU0VfVFJVRUBTVUJESVJTX1BBUlNFID0gCitAR1NUX0RJU0FCTEVfUEFSU0VfRkFMU0VAR1NUX1BBUlNFX0xBID0gcGFyc2UvbGliZ3N0cGFyc2UubGEKK0BHU1RfRElTQUJMRV9QQVJTRV9UUlVFQEdTVF9QQVJTRV9MQSA9IAorQEdTVF9ESVNBQkxFX1RSQUNFX0ZBTFNFQEdTVF9UUkFDRV9TUkMgPSBnc3R0cmFjZS5jCitAR1NUX0RJU0FCTEVfVFJBQ0VfVFJVRUBHU1RfVFJBQ0VfU1JDID0gCitAR1NUX0RJU0FCTEVfUExVR0lOX0ZBTFNFQEdTVF9QTFVHSU5fU1JDID0gZ3N0cGx1Z2luLmMKK0BHU1RfRElTQUJMRV9QTFVHSU5fVFJVRUBHU1RfUExVR0lOX1NSQyA9IAorU1VCRElSUyA9ICQoU1VCRElSU19QQVJTRSkKK0RJU1RfU1VCRElSUyA9IHBhcnNlCisKKyMgbWFrZSB2YXJpYWJsZXMgZm9yIGFsbCBnZW5lcmF0ZWQgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMgdG8gbWFrZSB0aGUKKyMgZGlzdGluY3Rpb24gY2xlYXIKK2J1aWx0X2hlYWRlcl9jb25maWd1cmUgPSBnc3Rjb25maWcuaCBnc3R2ZXJzaW9uLmgKK2J1aWx0X2hlYWRlcl9tYWtlID0gZ3N0ZW51bXR5cGVzLmggZ3N0bWFyc2hhbC5oCitidWlsdF9zb3VyY2VfbWFrZSA9IGdzdGVudW10eXBlcy5jIGdzdG1hcnNoYWwuYworRVhUUkFfbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfU09VUkNFUyA9IFwKKwlnc3RtYXJzaGFsLmxpc3QgZ3N0dHJhY2UuYyBcCisJZ3N0cmVnaXN0cnliaW5hcnkuYworCisKKyMgdGVtcG9yYXJpbHkgbm90IHVzZWQKKyMJZ2xpYi1jb21wYXQuYworbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfU09VUkNFUyA9IFwKKwlnc3QuYwkJCVwKKwlnc3RvYmplY3QuYwkJXAorCWdzdGJpbi5jCQlcCisJZ3N0YnVmZmVyLmMJCVwKKwlnc3RidWZmZXJsaXN0LmMJCVwKKwlnc3RidWZmZXJwb29sLmMJCVwKKwlnc3RidXMuYwkJXAorCWdzdGNhcHMuYwkJXAorCWdzdGNoaWxkcHJveHkuYwkJXAorCWdzdGNsb2NrLmMJCVwKKwlnc3RkYXRldGltZS5jCQlcCisJZ3N0ZGVidWd1dGlscy5jCQlcCisJZ3N0ZWxlbWVudC5jCQlcCisJZ3N0ZWxlbWVudGZhY3RvcnkuYwlcCisJZ3N0ZXJyb3IuYwkJXAorCWdzdGV2ZW50LmMJCVwKKwlnc3RmaWx0ZXIuYwkJXAorCWdzdGZvcm1hdC5jCQlcCisJZ3N0Z2hvc3RwYWQuYwkJXAorCWdzdGluZGV4LmMgCQlcCisJZ3N0aW5kZXhmYWN0b3J5LmMgCVwKKwlnc3RpbmZvLmMJCVwKKwlnc3RpdGVyYXRvci5jCQlcCisJZ3N0YXRvbWljcXVldWUuYwlcCisJZ3N0bWVzc2FnZS5jCQlcCisJZ3N0bWV0YS5jCQlcCisJZ3N0bWVtb3J5LmMJCVwKKwlnc3RtaW5pb2JqZWN0LmMJCVwKKwlnc3RwYWQuYwkJXAorCWdzdHBhZHRlbXBsYXRlLmMJXAorCWdzdHBhcmFtc3BlY3MuYwkJXAorCWdzdHBpcGVsaW5lLmMJCVwKKwlnc3RwbHVnaW4uYwkJXAorCWdzdHBsdWdpbmZlYXR1cmUuYwlcCisJZ3N0cGx1Z2lubG9hZGVyLmMJXAorCWdzdHBvbGwuYwkJXAorCWdzdHByZXNldC5jICAgICAgICAgICAgIFwKKwlnc3RxdWFyay5jCQlcCisJZ3N0cXVlcnkuYwkJXAorCWdzdHJlZ2lzdHJ5LmMJCVwKKwlnc3RyZWdpc3RyeWNodW5rcy5jCVwKKwlnc3RzZWdtZW50LmMJCVwKKwlnc3RzdHJ1Y3R1cmUuYwkJXAorCWdzdHN5c3RlbWNsb2NrLmMJXAorCWdzdHRhZ2xpc3QuYwkJXAorCWdzdHRhZ3NldHRlci5jCQlcCisJZ3N0dGFzay5jCQlcCisJZ3N0dGFza3Bvb2wuYwkJXAorCSQoR1NUX1RSQUNFX1NSQykJXAorCWdzdHR5cGVmaW5kLmMJCVwKKwlnc3R0eXBlZmluZGZhY3RvcnkuYwlcCisJZ3N0dXJpLmMJCVwKKwlnc3R1dGlscy5jCQlcCisJZ3N0dmFsdWUuYwkJXAorCWdzdHBhcnNlLmMJCVwKKwkkKEdTVF9SRUdJU1RSWV9TUkMpCisKKworIyBkbyBub3QgcHV0IGZpbGVzIGluIHRoZSBkaXN0cmlidXRpb24gdGhhdCBhcmUgZ2VuZXJhdGVkCitub2Rpc3RfbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfU09VUkNFUyA9ICQoYnVpbHRfc291cmNlX21ha2UpCisKKyMgQlVJTFRfU09VUkNFUyBhcmUgYnVpbHQgb24gbWFrZSBhbGwvY2hlY2svaW5zdGFsbCBiZWZvcmUgYWxsIG90aGVyIHRhcmdldHMKK0JVSUxUX1NPVVJDRVMgPSBcCisgICAgICAgICQoYnVpbHRfaGVhZGVyX2NvbmZpZ3VyZSkJXAorICAgICAgICAkKGJ1aWx0X2hlYWRlcl9tYWtlKQkJXAorICAgICAgICAkKGJ1aWx0X3NvdXJjZV9tYWtlKQorCisjIENMRUFORklMRVMgaXMgZm9yIGZpbGVzIGdlbmVyYXRlZCBieSBtYWtlCitDTEVBTkZJTEVTID0gJChidWlsdF9oZWFkZXJfbWFrZSkgJChidWlsdF9zb3VyY2VfbWFrZSkgXAorCSQoYXNfZGxsX2NsZWFuZmlsZXMpICouZ2NubyAqLmdjZGEgKi5nY292ICouZ2Nvdi5vdXQgXAorCSQoYW1fX2FwcGVuZF8xKQorIyBESVNUQ0xFQU5GSUxFUyBpcyBmb3IgZmlsZXMgZ2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZQorRElTVENMRUFORklMRVMgPSAkKGJ1aWx0X2hlYWRlcl9jb25maWd1cmUpCitsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MgPSBcCisJLURfR05VX1NPVVJDRQkJCQkJXAorCS1ER1NUX0VYUE9SVFMJCQkJCVwKKwktREdfTE9HX0RPTUFJTj1nX2xvZ19kb21haW5fZ3N0cmVhbWVyIAkJXAorCS1ER1NUX01BSk9STUlOT1I9XCIiJChHU1RfTUFKT1JNSU5PUikiXCIgCVwKKwktREdTVF9ESVNBQkxFX0RFUFJFQ0FURUQJCQlcCisJJChWQUxHUklORF9DRkxBR1MpCQkJCVwKKwkkKEdTVF9BTExfQ0ZMQUdTKQorCitsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9MSUJBREQgPSBcCisJJChHU1RfUEFSU0VfTEEpCQkJCQlcCisJJChHU1RfQUxMX0xJQlMpCQkJCQlcCisJJChXSU4zMl9MSUJTKQkJCQkJXAorCSQoTElCTSkKKworbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfTERGTEFHUyA9IFwKKwkkKEdTVF9MSUJfTERGTEFHUykgJChHU1RfQUxMX0xERkxBR1MpICQoR1NUX0xUX0xERkxBR1MpCisKK2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAvZ3N0Citnc3RfaGVhZGVycyA9IFwKKwlnc3QuaAkJCVwKKwlnbGliLWNvbXBhdC5oCQlcCisJZ3N0b2JqZWN0LmgJCVwKKwlnc3RiaW4uaAkJXAorCWdzdGJ1ZmZlci5oCQlcCisJZ3N0YnVmZmVybGlzdC5oCQlcCisJZ3N0YnVmZmVycG9vbC5oCQlcCisJZ3N0YnVzLmgJCVwKKwlnc3RjYXBzLmgJCVwKKwlnc3RjaGlsZHByb3h5LmgJCVwKKwlnc3RjbG9jay5oCQlcCisJZ3N0Y29tcGF0LmgJCVwKKwlnc3RkYXRldGltZS5oCQlcCisJZ3N0ZGVidWd1dGlscy5oCQlcCisJZ3N0ZWxlbWVudC5oCQlcCisJZ3N0ZWxlbWVudG1ldGFkYXRhLmgJXAorCWdzdGVsZW1lbnRmYWN0b3J5LmgJXAorCWdzdGVycm9yLmgJCVwKKwlnc3RldmVudC5oCQlcCisJZ3N0ZmlsdGVyLmgJCVwKKwlnc3Rmb3JtYXQuaAkJXAorCWdzdGdob3N0cGFkLmgJCVwKKwlnc3RpbmRleC5oCQlcCisJZ3N0aW5kZXhmYWN0b3J5LmgJXAorCWdzdGluZm8uaAkJXAorCWdzdGl0ZXJhdG9yLmgJCVwKKwlnc3RhdG9taWNxdWV1ZS5oCVwKKwlnc3RtYWNyb3MuaAkJXAorCWdzdG1lc3NhZ2UuaAkJXAorCWdzdG1ldGEuaAkJXAorCWdzdG1lbW9yeS5oCQlcCisJZ3N0bWluaW9iamVjdC5oCQlcCisJZ3N0cGFkLmgJCVwKKwlnc3RwYWR0ZW1wbGF0ZS5oCVwKKwlnc3RwYXJhbXNwZWNzLmgJCVwKKwlnc3RwaXBlbGluZS5oCQlcCisJZ3N0cGx1Z2luLmgJCVwKKwlnc3RwbHVnaW5mZWF0dXJlLmgJXAorCWdzdHBvbGwuaAkJXAorCWdzdHByZXNldC5oICAgICAgICAgICAgIFwKKwlnc3RxdWVyeS5oCQlcCisJZ3N0c2VnbWVudC5oCQlcCisJZ3N0c3RydWN0dXJlLmgJCVwKKwlnc3RzeXN0ZW1jbG9jay5oCVwKKwlnc3R0YWdsaXN0LmgJCVwKKwlnc3R0YWdzZXR0ZXIuaAkJXAorCWdzdHRhc2suaAkJXAorCWdzdHRhc2twb29sLmgJCVwKKwlnc3R0cmFjZS5oCQlcCisJZ3N0dHlwZWZpbmQuaAkJXAorCWdzdHR5cGVmaW5kZmFjdG9yeS5oCVwKKwlnc3R1cmkuaAkJXAorCWdzdHV0aWxzLmgJCVwKKwlnc3R2YWx1ZS5oCQlcCisJZ3N0cmVnaXN0cnkuaAkJXAorCWdzdHBhcnNlLmgKKworbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlX0hFQURFUlMgPSAkKGdzdF9oZWFkZXJzKSBtYXRoLWNvbXBhdC5oCitub2Rpc3RfbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlX0hFQURFUlMgPSBcCisJJChidWlsdF9oZWFkZXJfY29uZmlndXJlKSAkKGJ1aWx0X2hlYWRlcl9tYWtlKQorCitub2luc3RfSEVBREVSUyA9IFwKKwlnZXR0ZXh0LmgJCVwKKwlnbGliLWNvbXBhdC1wcml2YXRlLmgJXAorCWdzdC1pMThuLWxpYi5oCQlcCisJZ3N0LWkxOG4tYXBwLmgJCVwKKwlnc3RlbGVtZW50bWV0YWRhdGEuaAlcCisJZ3N0cGx1Z2lubG9hZGVyLmgJXAorCWdzdHF1YXJrLmgJCVwKKwlnc3RyZWdpc3RyeWJpbmFyeS5oICAgICBcCisJZ3N0cmVnaXN0cnljaHVua3MuaCAgICAgXAorCWdzdF9wcml2YXRlLmgKKworQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQEJVSUxUX0dJUlNPVVJDRVMgPSBHc3QtQEdTVF9NQUpPUk1JTk9SQC5naXIKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBnaXJfaGVhZGVycyA9ICQocGF0c3Vic3QgJSwkKHNyY2RpcikvJSwgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVfSEVBREVSUykpCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAZ2lyX3NvdXJjZXMgPSAkKHBhdHN1YnN0ICUsJChzcmNkaXIpLyUsICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfU09VUkNFUykpCisKKyMgSU5UUk9TUEVDVElPTl9HSVJESVIvSU5UUk9TUEVDVElPTl9UWVBFTElCRElSIGFyZW4ndCB0aGUgcmlnaHQgcGxhY2UgdG8KKyMgaW5zdGFsbCBhbnl0aGluZyAtIHdlIG5lZWQgdG8gaW5zdGFsbCBpbnNpZGUgb3VyIHByZWZpeC4KK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBnaXJkaXIgPSAkKGRhdGFkaXIpL2dpci0xLjAKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBnaXJfREFUQSA9ICQoQlVJTFRfR0lSU09VUkNFUykKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUB0eXBlbGlic2RpciA9ICQobGliZGlyKS9naXJlcG9zaXRvcnktMS4wLworQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQHR5cGVsaWJzX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVM6Lmdpcj0udHlwZWxpYikKK2FsbDogJChCVUlMVF9TT1VSQ0VTKQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFsbC1yZWN1cnNpdmUKKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251IGdzdC9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKK2dzdGNvbmZpZy5oOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHNyY2RpcikvZ3N0Y29uZmlnLmguaW4KKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQAorZ3N0dmVyc2lvbi5oOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHNyY2RpcikvZ3N0dmVyc2lvbi5oLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKK2luc3RhbGwtbGliTFRMSUJSQVJJRVM6ICQobGliX0xUTElCUkFSSUVTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQobGliZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQobGliZGlyKSIKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCisJICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKKwkgIGVsc2UgOjsgZmk7IFwKKwlkb25lOyBcCisJdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKGxpYmRpciknIjsgXAorCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKGxpYmRpcikiOyBcCisJfQorCit1bmluc3RhbGwtbGliTFRMSUJSQVJJRVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgJChhbV9fc3RyaXBfZGlyKSBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKGxpYmRpcikvJCRmJyI7IFwKKwkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChsaWJkaXIpLyQkZiI7IFwKKwlkb25lCisKK2NsZWFuLWxpYkxUTElCUkFSSUVTOgorCS10ZXN0IC16ICIkKGxpYl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobGliX0xUTElCUkFSSUVTKQorCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGRpcj0iYGVjaG8gJCRwIHwgc2VkIC1lICdzfC9bXi9dKiQkfHwnYCI7IFwKKwkgIHRlc3QgIiQkZGlyIiAhPSAiJCRwIiB8fCBkaXI9LjsgXAorCSAgZWNobyAicm0gLWYgXCIkJHtkaXJ9L3NvX2xvY2F0aW9uc1wiIjsgXAorCSAgcm0gLWYgIiQke2Rpcn0vc29fbG9jYXRpb25zIjsgXAorCWRvbmUKK2xpYmdzdHJlYW1lci1AR1NUX01BSk9STUlOT1JALmxhOiAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX09CSkVDVFMpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfREVQRU5ERU5DSUVTKSAKKwkkKEFNX1ZfQ0NMRCkkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0xJTkspIC1ycGF0aCAkKGxpYmRpcikgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9PQkpFQ1RTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0xJQkFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YXRvbWljcXVldWUuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RiaW4uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RidWZmZXIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RidWZmZXJsaXN0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YnVmZmVycG9vbC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJ1cy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNhcHMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RjaGlsZHByb3h5LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Y2xvY2suUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RkYXRldGltZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGRlYnVndXRpbHMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RlbGVtZW50LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZWxlbWVudGZhY3RvcnkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RlbnVtdHlwZXMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RlcnJvci5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGV2ZW50LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZmlsdGVyLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Zm9ybWF0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Z2hvc3RwYWQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RpbmRleC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGluZGV4ZmFjdG9yeS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGluZm8uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RpdGVyYXRvci5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG1hcnNoYWwuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RtZW1vcnkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RtZXNzYWdlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bWV0YS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG1pbmlvYmplY3QuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RvYmplY3QuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwYWQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwYWR0ZW1wbGF0ZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHBhcmFtc3BlY3MuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwYXJzZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHBpcGVsaW5lLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGx1Z2luLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGx1Z2luZmVhdHVyZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHBsdWdpbmxvYWRlci5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHBvbGwuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwcmVzZXQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RxdWFyay5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHF1ZXJ5LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cmVnaXN0cnkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RyZWdpc3RyeWJpbmFyeS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHJlZ2lzdHJ5Y2h1bmtzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0c2VnbWVudC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHN0cnVjdHVyZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHN5c3RlbWNsb2NrLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dGFnbGlzdC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHRhZ3NldHRlci5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHRhc2suUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R0YXNrcG9vbC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHRyYWNlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dHlwZWZpbmQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R0eXBlZmluZGZhY3RvcnkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R1cmkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R1dGlscy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHZhbHVlLlBsb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCitsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3QubG86IGdzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0LlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3QubG8gYHRlc3QgLWYgJ2dzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0LlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0LlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdC5sbyBgdGVzdCAtZiAnZ3N0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC5jCisKK2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG9iamVjdC5sbzogZ3N0b2JqZWN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0b2JqZWN0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RvYmplY3QuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG9iamVjdC5sbyBgdGVzdCAtZiAnZ3N0b2JqZWN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG9iamVjdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RvYmplY3QuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RvYmplY3QuUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0b2JqZWN0LmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0b2JqZWN0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0b2JqZWN0LmxvIGB0ZXN0IC1mICdnc3RvYmplY3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0b2JqZWN0LmMKKworbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YmluLmxvOiBnc3RiaW4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RiaW4ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJpbi5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YmluLmxvIGB0ZXN0IC1mICdnc3RiaW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YmluLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJpbi5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJpbi5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RiaW4uYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RiaW4ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RiaW4ubG8gYHRlc3QgLWYgJ2dzdGJpbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RiaW4uYworCitsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RidWZmZXIubG86IGdzdGJ1ZmZlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJ1ZmZlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YnVmZmVyLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RidWZmZXIubG8gYHRlc3QgLWYgJ2dzdGJ1ZmZlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RidWZmZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YnVmZmVyLlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YnVmZmVyLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdGJ1ZmZlci5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJ1ZmZlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJ1ZmZlci5sbyBgdGVzdCAtZiAnZ3N0YnVmZmVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGJ1ZmZlci5jCisKK2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJ1ZmZlcmxpc3QubG86IGdzdGJ1ZmZlcmxpc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RidWZmZXJsaXN0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RidWZmZXJsaXN0LlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RidWZmZXJsaXN0LmxvIGB0ZXN0IC1mICdnc3RidWZmZXJsaXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGJ1ZmZlcmxpc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YnVmZmVybGlzdC5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJ1ZmZlcmxpc3QuUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0YnVmZmVybGlzdC5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJ1ZmZlcmxpc3QubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RidWZmZXJsaXN0LmxvIGB0ZXN0IC1mICdnc3RidWZmZXJsaXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGJ1ZmZlcmxpc3QuYworCitsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RidWZmZXJwb29sLmxvOiBnc3RidWZmZXJwb29sLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YnVmZmVycG9vbC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YnVmZmVycG9vbC5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YnVmZmVycG9vbC5sbyBgdGVzdCAtZiAnZ3N0YnVmZmVycG9vbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RidWZmZXJwb29sLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJ1ZmZlcnBvb2wuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RidWZmZXJwb29sLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdGJ1ZmZlcnBvb2wuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RidWZmZXJwb29sLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YnVmZmVycG9vbC5sbyBgdGVzdCAtZiAnZ3N0YnVmZmVycG9vbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RidWZmZXJwb29sLmMKKworbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YnVzLmxvOiBnc3RidXMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RidXMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJ1cy5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YnVzLmxvIGB0ZXN0IC1mICdnc3RidXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YnVzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJ1cy5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJ1cy5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RidXMuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RidXMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RidXMubG8gYHRlc3QgLWYgJ2dzdGJ1cy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RidXMuYworCitsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RjYXBzLmxvOiBnc3RjYXBzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Y2Fwcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Y2Fwcy5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Y2Fwcy5sbyBgdGVzdCAtZiAnZ3N0Y2Fwcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RjYXBzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNhcHMuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RjYXBzLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdGNhcHMuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RjYXBzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Y2Fwcy5sbyBgdGVzdCAtZiAnZ3N0Y2Fwcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RjYXBzLmMKKworbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Y2hpbGRwcm94eS5sbzogZ3N0Y2hpbGRwcm94eS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNoaWxkcHJveHkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNoaWxkcHJveHkuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNoaWxkcHJveHkubG8gYHRlc3QgLWYgJ2dzdGNoaWxkcHJveHkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Y2hpbGRwcm94eS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RjaGlsZHByb3h5LlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Y2hpbGRwcm94eS5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RjaGlsZHByb3h5LmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Y2hpbGRwcm94eS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNoaWxkcHJveHkubG8gYHRlc3QgLWYgJ2dzdGNoaWxkcHJveHkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Y2hpbGRwcm94eS5jCisKK2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNsb2NrLmxvOiBnc3RjbG9jay5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNsb2NrLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RjbG9jay5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Y2xvY2subG8gYHRlc3QgLWYgJ2dzdGNsb2NrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGNsb2NrLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNsb2NrLlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Y2xvY2suUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0Y2xvY2suYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RjbG9jay5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNsb2NrLmxvIGB0ZXN0IC1mICdnc3RjbG9jay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RjbG9jay5jCisKK2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGRhdGV0aW1lLmxvOiBnc3RkYXRldGltZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGRhdGV0aW1lLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RkYXRldGltZS5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZGF0ZXRpbWUubG8gYHRlc3QgLWYgJ2dzdGRhdGV0aW1lLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGRhdGV0aW1lLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGRhdGV0aW1lLlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZGF0ZXRpbWUuUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0ZGF0ZXRpbWUuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RkYXRldGltZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGRhdGV0aW1lLmxvIGB0ZXN0IC1mICdnc3RkYXRldGltZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RkYXRldGltZS5jCisKK2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGRlYnVndXRpbHMubG86IGdzdGRlYnVndXRpbHMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RkZWJ1Z3V0aWxzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RkZWJ1Z3V0aWxzLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RkZWJ1Z3V0aWxzLmxvIGB0ZXN0IC1mICdnc3RkZWJ1Z3V0aWxzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGRlYnVndXRpbHMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZGVidWd1dGlscy5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGRlYnVndXRpbHMuUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0ZGVidWd1dGlscy5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGRlYnVndXRpbHMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RkZWJ1Z3V0aWxzLmxvIGB0ZXN0IC1mICdnc3RkZWJ1Z3V0aWxzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGRlYnVndXRpbHMuYworCitsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RlbGVtZW50LmxvOiBnc3RlbGVtZW50LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZWxlbWVudC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZWxlbWVudC5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZWxlbWVudC5sbyBgdGVzdCAtZiAnZ3N0ZWxlbWVudC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RlbGVtZW50LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGVsZW1lbnQuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RlbGVtZW50LlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdGVsZW1lbnQuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RlbGVtZW50LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZWxlbWVudC5sbyBgdGVzdCAtZiAnZ3N0ZWxlbWVudC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RlbGVtZW50LmMKKworbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZWxlbWVudGZhY3RvcnkubG86IGdzdGVsZW1lbnRmYWN0b3J5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZWxlbWVudGZhY3RvcnkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGVsZW1lbnRmYWN0b3J5LlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RlbGVtZW50ZmFjdG9yeS5sbyBgdGVzdCAtZiAnZ3N0ZWxlbWVudGZhY3RvcnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZWxlbWVudGZhY3RvcnkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZWxlbWVudGZhY3RvcnkuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RlbGVtZW50ZmFjdG9yeS5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RlbGVtZW50ZmFjdG9yeS5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGVsZW1lbnRmYWN0b3J5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZWxlbWVudGZhY3RvcnkubG8gYHRlc3QgLWYgJ2dzdGVsZW1lbnRmYWN0b3J5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGVsZW1lbnRmYWN0b3J5LmMKKworbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZXJyb3IubG86IGdzdGVycm9yLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZXJyb3IubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGVycm9yLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RlcnJvci5sbyBgdGVzdCAtZiAnZ3N0ZXJyb3IuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZXJyb3IuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZXJyb3IuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RlcnJvci5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RlcnJvci5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGVycm9yLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZXJyb3IubG8gYHRlc3QgLWYgJ2dzdGVycm9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGVycm9yLmMKKworbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZXZlbnQubG86IGdzdGV2ZW50LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZXZlbnQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGV2ZW50LlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RldmVudC5sbyBgdGVzdCAtZiAnZ3N0ZXZlbnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZXZlbnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZXZlbnQuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RldmVudC5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RldmVudC5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGV2ZW50LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZXZlbnQubG8gYHRlc3QgLWYgJ2dzdGV2ZW50LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGV2ZW50LmMKKworbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZmlsdGVyLmxvOiBnc3RmaWx0ZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RmaWx0ZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGZpbHRlci5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZmlsdGVyLmxvIGB0ZXN0IC1mICdnc3RmaWx0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZmlsdGVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGZpbHRlci5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGZpbHRlci5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RmaWx0ZXIuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RmaWx0ZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RmaWx0ZXIubG8gYHRlc3QgLWYgJ2dzdGZpbHRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RmaWx0ZXIuYworCitsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3Rmb3JtYXQubG86IGdzdGZvcm1hdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGZvcm1hdC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Zm9ybWF0LlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3Rmb3JtYXQubG8gYHRlc3QgLWYgJ2dzdGZvcm1hdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rmb3JtYXQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Zm9ybWF0LlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Zm9ybWF0LlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdGZvcm1hdC5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGZvcm1hdC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGZvcm1hdC5sbyBgdGVzdCAtZiAnZ3N0Zm9ybWF0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGZvcm1hdC5jCisKK2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGdob3N0cGFkLmxvOiBnc3RnaG9zdHBhZC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGdob3N0cGFkLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RnaG9zdHBhZC5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Z2hvc3RwYWQubG8gYHRlc3QgLWYgJ2dzdGdob3N0cGFkLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGdob3N0cGFkLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGdob3N0cGFkLlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Z2hvc3RwYWQuUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0Z2hvc3RwYWQuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RnaG9zdHBhZC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGdob3N0cGFkLmxvIGB0ZXN0IC1mICdnc3RnaG9zdHBhZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RnaG9zdHBhZC5jCisKK2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGluZGV4LmxvOiBnc3RpbmRleC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGluZGV4LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RpbmRleC5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0aW5kZXgubG8gYHRlc3QgLWYgJ2dzdGluZGV4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGluZGV4LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGluZGV4LlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0aW5kZXguUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0aW5kZXguYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RpbmRleC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGluZGV4LmxvIGB0ZXN0IC1mICdnc3RpbmRleC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RpbmRleC5jCisKK2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGluZGV4ZmFjdG9yeS5sbzogZ3N0aW5kZXhmYWN0b3J5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0aW5kZXhmYWN0b3J5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RpbmRleGZhY3RvcnkuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGluZGV4ZmFjdG9yeS5sbyBgdGVzdCAtZiAnZ3N0aW5kZXhmYWN0b3J5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGluZGV4ZmFjdG9yeS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RpbmRleGZhY3RvcnkuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RpbmRleGZhY3RvcnkuUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0aW5kZXhmYWN0b3J5LmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0aW5kZXhmYWN0b3J5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0aW5kZXhmYWN0b3J5LmxvIGB0ZXN0IC1mICdnc3RpbmRleGZhY3RvcnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0aW5kZXhmYWN0b3J5LmMKKworbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0aW5mby5sbzogZ3N0aW5mby5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGluZm8ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGluZm8uVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGluZm8ubG8gYHRlc3QgLWYgJ2dzdGluZm8uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0aW5mby5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RpbmZvLlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0aW5mby5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RpbmZvLmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0aW5mby5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGluZm8ubG8gYHRlc3QgLWYgJ2dzdGluZm8uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0aW5mby5jCisKK2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGl0ZXJhdG9yLmxvOiBnc3RpdGVyYXRvci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGl0ZXJhdG9yLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RpdGVyYXRvci5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0aXRlcmF0b3IubG8gYHRlc3QgLWYgJ2dzdGl0ZXJhdG9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGl0ZXJhdG9yLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGl0ZXJhdG9yLlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0aXRlcmF0b3IuUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0aXRlcmF0b3IuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RpdGVyYXRvci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGl0ZXJhdG9yLmxvIGB0ZXN0IC1mICdnc3RpdGVyYXRvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RpdGVyYXRvci5jCisKK2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGF0b21pY3F1ZXVlLmxvOiBnc3RhdG9taWNxdWV1ZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGF0b21pY3F1ZXVlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RhdG9taWNxdWV1ZS5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YXRvbWljcXVldWUubG8gYHRlc3QgLWYgJ2dzdGF0b21pY3F1ZXVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGF0b21pY3F1ZXVlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGF0b21pY3F1ZXVlLlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YXRvbWljcXVldWUuUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0YXRvbWljcXVldWUuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RhdG9taWNxdWV1ZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGF0b21pY3F1ZXVlLmxvIGB0ZXN0IC1mICdnc3RhdG9taWNxdWV1ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RhdG9taWNxdWV1ZS5jCisKK2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG1lc3NhZ2UubG86IGdzdG1lc3NhZ2UuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RtZXNzYWdlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RtZXNzYWdlLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RtZXNzYWdlLmxvIGB0ZXN0IC1mICdnc3RtZXNzYWdlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG1lc3NhZ2UuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bWVzc2FnZS5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG1lc3NhZ2UuUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0bWVzc2FnZS5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG1lc3NhZ2UubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RtZXNzYWdlLmxvIGB0ZXN0IC1mICdnc3RtZXNzYWdlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG1lc3NhZ2UuYworCitsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RtZXRhLmxvOiBnc3RtZXRhLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bWV0YS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bWV0YS5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bWV0YS5sbyBgdGVzdCAtZiAnZ3N0bWV0YS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RtZXRhLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG1ldGEuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RtZXRhLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdG1ldGEuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RtZXRhLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bWV0YS5sbyBgdGVzdCAtZiAnZ3N0bWV0YS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RtZXRhLmMKKworbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bWVtb3J5LmxvOiBnc3RtZW1vcnkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RtZW1vcnkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG1lbW9yeS5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bWVtb3J5LmxvIGB0ZXN0IC1mICdnc3RtZW1vcnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0bWVtb3J5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG1lbW9yeS5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG1lbW9yeS5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RtZW1vcnkuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RtZW1vcnkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RtZW1vcnkubG8gYHRlc3QgLWYgJ2dzdG1lbW9yeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RtZW1vcnkuYworCitsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RtaW5pb2JqZWN0LmxvOiBnc3RtaW5pb2JqZWN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bWluaW9iamVjdC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bWluaW9iamVjdC5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bWluaW9iamVjdC5sbyBgdGVzdCAtZiAnZ3N0bWluaW9iamVjdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RtaW5pb2JqZWN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG1pbmlvYmplY3QuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RtaW5pb2JqZWN0LlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdG1pbmlvYmplY3QuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RtaW5pb2JqZWN0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bWluaW9iamVjdC5sbyBgdGVzdCAtZiAnZ3N0bWluaW9iamVjdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RtaW5pb2JqZWN0LmMKKworbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGFkLmxvOiBnc3RwYWQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwYWQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHBhZC5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGFkLmxvIGB0ZXN0IC1mICdnc3RwYWQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cGFkLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHBhZC5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHBhZC5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RwYWQuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwYWQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwYWQubG8gYHRlc3QgLWYgJ2dzdHBhZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RwYWQuYworCitsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwYWR0ZW1wbGF0ZS5sbzogZ3N0cGFkdGVtcGxhdGUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwYWR0ZW1wbGF0ZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGFkdGVtcGxhdGUuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHBhZHRlbXBsYXRlLmxvIGB0ZXN0IC1mICdnc3RwYWR0ZW1wbGF0ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RwYWR0ZW1wbGF0ZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwYWR0ZW1wbGF0ZS5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHBhZHRlbXBsYXRlLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdHBhZHRlbXBsYXRlLmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGFkdGVtcGxhdGUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwYWR0ZW1wbGF0ZS5sbyBgdGVzdCAtZiAnZ3N0cGFkdGVtcGxhdGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cGFkdGVtcGxhdGUuYworCitsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwYXJhbXNwZWNzLmxvOiBnc3RwYXJhbXNwZWNzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGFyYW1zcGVjcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGFyYW1zcGVjcy5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGFyYW1zcGVjcy5sbyBgdGVzdCAtZiAnZ3N0cGFyYW1zcGVjcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RwYXJhbXNwZWNzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHBhcmFtc3BlY3MuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwYXJhbXNwZWNzLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdHBhcmFtc3BlY3MuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwYXJhbXNwZWNzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGFyYW1zcGVjcy5sbyBgdGVzdCAtZiAnZ3N0cGFyYW1zcGVjcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RwYXJhbXNwZWNzLmMKKworbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGlwZWxpbmUubG86IGdzdHBpcGVsaW5lLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGlwZWxpbmUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHBpcGVsaW5lLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwaXBlbGluZS5sbyBgdGVzdCAtZiAnZ3N0cGlwZWxpbmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cGlwZWxpbmUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGlwZWxpbmUuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwaXBlbGluZS5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RwaXBlbGluZS5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHBpcGVsaW5lLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGlwZWxpbmUubG8gYHRlc3QgLWYgJ2dzdHBpcGVsaW5lLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHBpcGVsaW5lLmMKKworbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGx1Z2luLmxvOiBnc3RwbHVnaW4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwbHVnaW4ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHBsdWdpbi5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGx1Z2luLmxvIGB0ZXN0IC1mICdnc3RwbHVnaW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cGx1Z2luLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHBsdWdpbi5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHBsdWdpbi5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RwbHVnaW4uYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwbHVnaW4ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwbHVnaW4ubG8gYHRlc3QgLWYgJ2dzdHBsdWdpbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RwbHVnaW4uYworCitsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwbHVnaW5mZWF0dXJlLmxvOiBnc3RwbHVnaW5mZWF0dXJlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGx1Z2luZmVhdHVyZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGx1Z2luZmVhdHVyZS5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGx1Z2luZmVhdHVyZS5sbyBgdGVzdCAtZiAnZ3N0cGx1Z2luZmVhdHVyZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RwbHVnaW5mZWF0dXJlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHBsdWdpbmZlYXR1cmUuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwbHVnaW5mZWF0dXJlLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdHBsdWdpbmZlYXR1cmUuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwbHVnaW5mZWF0dXJlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGx1Z2luZmVhdHVyZS5sbyBgdGVzdCAtZiAnZ3N0cGx1Z2luZmVhdHVyZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RwbHVnaW5mZWF0dXJlLmMKKworbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGx1Z2lubG9hZGVyLmxvOiBnc3RwbHVnaW5sb2FkZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwbHVnaW5sb2FkZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHBsdWdpbmxvYWRlci5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGx1Z2lubG9hZGVyLmxvIGB0ZXN0IC1mICdnc3RwbHVnaW5sb2FkZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cGx1Z2lubG9hZGVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHBsdWdpbmxvYWRlci5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHBsdWdpbmxvYWRlci5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RwbHVnaW5sb2FkZXIuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwbHVnaW5sb2FkZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwbHVnaW5sb2FkZXIubG8gYHRlc3QgLWYgJ2dzdHBsdWdpbmxvYWRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RwbHVnaW5sb2FkZXIuYworCitsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3Rwb2xsLmxvOiBnc3Rwb2xsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cG9sbC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cG9sbC5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cG9sbC5sbyBgdGVzdCAtZiAnZ3N0cG9sbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rwb2xsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHBvbGwuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3Rwb2xsLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdHBvbGwuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3Rwb2xsLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cG9sbC5sbyBgdGVzdCAtZiAnZ3N0cG9sbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rwb2xsLmMKKworbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cHJlc2V0LmxvOiBnc3RwcmVzZXQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwcmVzZXQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHByZXNldC5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cHJlc2V0LmxvIGB0ZXN0IC1mICdnc3RwcmVzZXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cHJlc2V0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHByZXNldC5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHByZXNldC5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RwcmVzZXQuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwcmVzZXQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwcmVzZXQubG8gYHRlc3QgLWYgJ2dzdHByZXNldC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RwcmVzZXQuYworCitsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RxdWFyay5sbzogZ3N0cXVhcmsuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RxdWFyay5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cXVhcmsuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHF1YXJrLmxvIGB0ZXN0IC1mICdnc3RxdWFyay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RxdWFyay5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RxdWFyay5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHF1YXJrLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdHF1YXJrLmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cXVhcmsubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RxdWFyay5sbyBgdGVzdCAtZiAnZ3N0cXVhcmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cXVhcmsuYworCitsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RxdWVyeS5sbzogZ3N0cXVlcnkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RxdWVyeS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cXVlcnkuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHF1ZXJ5LmxvIGB0ZXN0IC1mICdnc3RxdWVyeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RxdWVyeS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RxdWVyeS5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHF1ZXJ5LlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdHF1ZXJ5LmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cXVlcnkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RxdWVyeS5sbyBgdGVzdCAtZiAnZ3N0cXVlcnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cXVlcnkuYworCitsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RyZWdpc3RyeS5sbzogZ3N0cmVnaXN0cnkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RyZWdpc3RyeS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cmVnaXN0cnkuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHJlZ2lzdHJ5LmxvIGB0ZXN0IC1mICdnc3RyZWdpc3RyeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RyZWdpc3RyeS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RyZWdpc3RyeS5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHJlZ2lzdHJ5LlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdHJlZ2lzdHJ5LmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cmVnaXN0cnkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RyZWdpc3RyeS5sbyBgdGVzdCAtZiAnZ3N0cmVnaXN0cnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cmVnaXN0cnkuYworCitsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RyZWdpc3RyeWNodW5rcy5sbzogZ3N0cmVnaXN0cnljaHVua3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RyZWdpc3RyeWNodW5rcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cmVnaXN0cnljaHVua3MuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHJlZ2lzdHJ5Y2h1bmtzLmxvIGB0ZXN0IC1mICdnc3RyZWdpc3RyeWNodW5rcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RyZWdpc3RyeWNodW5rcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RyZWdpc3RyeWNodW5rcy5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHJlZ2lzdHJ5Y2h1bmtzLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdHJlZ2lzdHJ5Y2h1bmtzLmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cmVnaXN0cnljaHVua3MubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RyZWdpc3RyeWNodW5rcy5sbyBgdGVzdCAtZiAnZ3N0cmVnaXN0cnljaHVua3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cmVnaXN0cnljaHVua3MuYworCitsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RzZWdtZW50LmxvOiBnc3RzZWdtZW50LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0c2VnbWVudC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0c2VnbWVudC5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0c2VnbWVudC5sbyBgdGVzdCAtZiAnZ3N0c2VnbWVudC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzZWdtZW50LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHNlZ21lbnQuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RzZWdtZW50LlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdHNlZ21lbnQuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RzZWdtZW50LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0c2VnbWVudC5sbyBgdGVzdCAtZiAnZ3N0c2VnbWVudC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzZWdtZW50LmMKKworbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0c3RydWN0dXJlLmxvOiBnc3RzdHJ1Y3R1cmUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RzdHJ1Y3R1cmUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHN0cnVjdHVyZS5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0c3RydWN0dXJlLmxvIGB0ZXN0IC1mICdnc3RzdHJ1Y3R1cmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c3RydWN0dXJlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHN0cnVjdHVyZS5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHN0cnVjdHVyZS5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RzdHJ1Y3R1cmUuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RzdHJ1Y3R1cmUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RzdHJ1Y3R1cmUubG8gYHRlc3QgLWYgJ2dzdHN0cnVjdHVyZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzdHJ1Y3R1cmUuYworCitsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RzeXN0ZW1jbG9jay5sbzogZ3N0c3lzdGVtY2xvY2suYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RzeXN0ZW1jbG9jay5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0c3lzdGVtY2xvY2suVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHN5c3RlbWNsb2NrLmxvIGB0ZXN0IC1mICdnc3RzeXN0ZW1jbG9jay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzeXN0ZW1jbG9jay5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RzeXN0ZW1jbG9jay5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHN5c3RlbWNsb2NrLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdHN5c3RlbWNsb2NrLmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0c3lzdGVtY2xvY2subG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RzeXN0ZW1jbG9jay5sbyBgdGVzdCAtZiAnZ3N0c3lzdGVtY2xvY2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c3lzdGVtY2xvY2suYworCitsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R0YWdsaXN0LmxvOiBnc3R0YWdsaXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dGFnbGlzdC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dGFnbGlzdC5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dGFnbGlzdC5sbyBgdGVzdCAtZiAnZ3N0dGFnbGlzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R0YWdsaXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHRhZ2xpc3QuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R0YWdsaXN0LlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdHRhZ2xpc3QuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R0YWdsaXN0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dGFnbGlzdC5sbyBgdGVzdCAtZiAnZ3N0dGFnbGlzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R0YWdsaXN0LmMKKworbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dGFnc2V0dGVyLmxvOiBnc3R0YWdzZXR0ZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R0YWdzZXR0ZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHRhZ3NldHRlci5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dGFnc2V0dGVyLmxvIGB0ZXN0IC1mICdnc3R0YWdzZXR0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dGFnc2V0dGVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHRhZ3NldHRlci5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHRhZ3NldHRlci5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3R0YWdzZXR0ZXIuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R0YWdzZXR0ZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R0YWdzZXR0ZXIubG8gYHRlc3QgLWYgJ2dzdHRhZ3NldHRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R0YWdzZXR0ZXIuYworCitsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R0YXNrLmxvOiBnc3R0YXNrLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dGFzay5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dGFzay5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dGFzay5sbyBgdGVzdCAtZiAnZ3N0dGFzay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R0YXNrLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHRhc2suVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R0YXNrLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdHRhc2suYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R0YXNrLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dGFzay5sbyBgdGVzdCAtZiAnZ3N0dGFzay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R0YXNrLmMKKworbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dGFza3Bvb2wubG86IGdzdHRhc2twb29sLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dGFza3Bvb2wubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHRhc2twb29sLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R0YXNrcG9vbC5sbyBgdGVzdCAtZiAnZ3N0dGFza3Bvb2wuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dGFza3Bvb2wuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dGFza3Bvb2wuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R0YXNrcG9vbC5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3R0YXNrcG9vbC5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHRhc2twb29sLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dGFza3Bvb2wubG8gYHRlc3QgLWYgJ2dzdHRhc2twb29sLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHRhc2twb29sLmMKKworbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dHJhY2UubG86IGdzdHRyYWNlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dHJhY2UubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHRyYWNlLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R0cmFjZS5sbyBgdGVzdCAtZiAnZ3N0dHJhY2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dHJhY2UuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dHJhY2UuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R0cmFjZS5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3R0cmFjZS5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHRyYWNlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dHJhY2UubG8gYHRlc3QgLWYgJ2dzdHRyYWNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHRyYWNlLmMKKworbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dHlwZWZpbmQubG86IGdzdHR5cGVmaW5kLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dHlwZWZpbmQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHR5cGVmaW5kLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R0eXBlZmluZC5sbyBgdGVzdCAtZiAnZ3N0dHlwZWZpbmQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dHlwZWZpbmQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dHlwZWZpbmQuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R0eXBlZmluZC5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3R0eXBlZmluZC5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHR5cGVmaW5kLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dHlwZWZpbmQubG8gYHRlc3QgLWYgJ2dzdHR5cGVmaW5kLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHR5cGVmaW5kLmMKKworbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dHlwZWZpbmRmYWN0b3J5LmxvOiBnc3R0eXBlZmluZGZhY3RvcnkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R0eXBlZmluZGZhY3RvcnkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHR5cGVmaW5kZmFjdG9yeS5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dHlwZWZpbmRmYWN0b3J5LmxvIGB0ZXN0IC1mICdnc3R0eXBlZmluZGZhY3RvcnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dHlwZWZpbmRmYWN0b3J5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHR5cGVmaW5kZmFjdG9yeS5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHR5cGVmaW5kZmFjdG9yeS5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3R0eXBlZmluZGZhY3RvcnkuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R0eXBlZmluZGZhY3RvcnkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R0eXBlZmluZGZhY3RvcnkubG8gYHRlc3QgLWYgJ2dzdHR5cGVmaW5kZmFjdG9yeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R0eXBlZmluZGZhY3RvcnkuYworCitsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R1cmkubG86IGdzdHVyaS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHVyaS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dXJpLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R1cmkubG8gYHRlc3QgLWYgJ2dzdHVyaS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R1cmkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dXJpLlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dXJpLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdHVyaS5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHVyaS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHVyaS5sbyBgdGVzdCAtZiAnZ3N0dXJpLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHVyaS5jCisKK2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHV0aWxzLmxvOiBnc3R1dGlscy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHV0aWxzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R1dGlscy5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dXRpbHMubG8gYHRlc3QgLWYgJ2dzdHV0aWxzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHV0aWxzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHV0aWxzLlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dXRpbHMuUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0dXRpbHMuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R1dGlscy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHV0aWxzLmxvIGB0ZXN0IC1mICdnc3R1dGlscy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R1dGlscy5jCisKK2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHZhbHVlLmxvOiBnc3R2YWx1ZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHZhbHVlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R2YWx1ZS5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dmFsdWUubG8gYHRlc3QgLWYgJ2dzdHZhbHVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHZhbHVlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHZhbHVlLlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dmFsdWUuUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0dmFsdWUuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R2YWx1ZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHZhbHVlLmxvIGB0ZXN0IC1mICdnc3R2YWx1ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R2YWx1ZS5jCisKK2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHBhcnNlLmxvOiBnc3RwYXJzZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHBhcnNlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwYXJzZS5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGFyc2UubG8gYHRlc3QgLWYgJ2dzdHBhcnNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHBhcnNlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHBhcnNlLlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cGFyc2UuUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0cGFyc2UuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwYXJzZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHBhcnNlLmxvIGB0ZXN0IC1mICdnc3RwYXJzZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RwYXJzZS5jCisKK2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHJlZ2lzdHJ5YmluYXJ5LmxvOiBnc3RyZWdpc3RyeWJpbmFyeS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHJlZ2lzdHJ5YmluYXJ5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RyZWdpc3RyeWJpbmFyeS5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cmVnaXN0cnliaW5hcnkubG8gYHRlc3QgLWYgJ2dzdHJlZ2lzdHJ5YmluYXJ5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJlZ2lzdHJ5YmluYXJ5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHJlZ2lzdHJ5YmluYXJ5LlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cmVnaXN0cnliaW5hcnkuUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0cmVnaXN0cnliaW5hcnkuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RyZWdpc3RyeWJpbmFyeS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHJlZ2lzdHJ5YmluYXJ5LmxvIGB0ZXN0IC1mICdnc3RyZWdpc3RyeWJpbmFyeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RyZWdpc3RyeWJpbmFyeS5jCisKK2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGVudW10eXBlcy5sbzogZ3N0ZW51bXR5cGVzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZW51bXR5cGVzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RlbnVtdHlwZXMuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGVudW10eXBlcy5sbyBgdGVzdCAtZiAnZ3N0ZW51bXR5cGVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGVudW10eXBlcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RlbnVtdHlwZXMuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RlbnVtdHlwZXMuUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0ZW51bXR5cGVzLmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZW51bXR5cGVzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZW51bXR5cGVzLmxvIGB0ZXN0IC1mICdnc3RlbnVtdHlwZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZW51bXR5cGVzLmMKKworbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bWFyc2hhbC5sbzogZ3N0bWFyc2hhbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG1hcnNoYWwubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG1hcnNoYWwuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG1hcnNoYWwubG8gYHRlc3QgLWYgJ2dzdG1hcnNoYWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0bWFyc2hhbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RtYXJzaGFsLlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bWFyc2hhbC5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RtYXJzaGFsLmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bWFyc2hhbC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG1hcnNoYWwubG8gYHRlc3QgLWYgJ2dzdG1hcnNoYWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0bWFyc2hhbC5jCisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCitpbnN0YWxsLWdpckRBVEE6ICQoZ2lyX0RBVEEpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChnaXJkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChnaXJkaXIpIgorCUBsaXN0PSckKGdpcl9EQVRBKSc7IHRlc3QgLW4gIiQoZ2lyZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChnaXJkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChnaXJkaXIpIiB8fCBleGl0ICQkPzsgXAorCWRvbmUKKwordW5pbnN0YWxsLWdpckRBVEE6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChnaXJfREFUQSknOyB0ZXN0IC1uICIkKGdpcmRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwl0ZXN0IC1uICIkJGZpbGVzIiB8fCBleGl0IDA7IFwKKwllY2hvICIgKCBjZCAnJChERVNURElSKSQoZ2lyZGlyKScgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisJY2QgIiQoREVTVERJUikkKGdpcmRpcikiICYmIHJtIC1mICQkZmlsZXMKK2luc3RhbGwtdHlwZWxpYnNEQVRBOiAkKHR5cGVsaWJzX0RBVEEpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJCh0eXBlbGlic2RpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKHR5cGVsaWJzZGlyKSIKKwlAbGlzdD0nJCh0eXBlbGlic19EQVRBKSc7IHRlc3QgLW4gIiQodHlwZWxpYnNkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKHR5cGVsaWJzZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQodHlwZWxpYnNkaXIpIiB8fCBleGl0ICQkPzsgXAorCWRvbmUKKwordW5pbnN0YWxsLXR5cGVsaWJzREFUQToKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKHR5cGVsaWJzX0RBVEEpJzsgdGVzdCAtbiAiJCh0eXBlbGlic2RpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwl0ZXN0IC1uICIkJGZpbGVzIiB8fCBleGl0IDA7IFwKKwllY2hvICIgKCBjZCAnJChERVNURElSKSQodHlwZWxpYnNkaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQodHlwZWxpYnNkaXIpIiAmJiBybSAtZiAkJGZpbGVzCitpbnN0YWxsLWxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAaW5jbHVkZUhFQURFUlM6ICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlX0hFQURFUlMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVkaXIpIgorCUBsaXN0PSckKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAaW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgJyQoREVTVERJUikkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAaW5jbHVkZWRpciknIjsgXAorCSAgJChJTlNUQUxMX0hFQURFUikgJCRmaWxlcyAiJChERVNURElSKSQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVIRUFERVJTOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlX0hFQURFUlMpJzsgdGVzdCAtbiAiJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJdGVzdCAtbiAiJCRmaWxlcyIgfHwgZXhpdCAwOyBcCisJZWNobyAiICggY2QgJyQoREVTVERJUikkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAaW5jbHVkZWRpciknICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorCWNkICIkKERFU1RESVIpJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVkaXIpIiAmJiBybSAtZiAkJGZpbGVzCitpbnN0YWxsLW5vZGlzdF9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVIRUFERVJTOiAkKG5vZGlzdF9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVfSEVBREVSUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAaW5jbHVkZWRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAaW5jbHVkZWRpcikiCisJQGxpc3Q9JyQobm9kaXN0X2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAaW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgJyQoREVTVERJUikkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAaW5jbHVkZWRpciknIjsgXAorCSAgJChJTlNUQUxMX0hFQURFUikgJCRmaWxlcyAiJChERVNURElSKSQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1ub2Rpc3RfbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlSEVBREVSUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKG5vZGlzdF9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVfSEVBREVSUyknOyB0ZXN0IC1uICIkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAaW5jbHVkZWRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwl0ZXN0IC1uICIkJGZpbGVzIiB8fCBleGl0IDA7IFwKKwllY2hvICIgKCBjZCAnJChERVNURElSKSQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlZGlyKScgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisJY2QgIiQoREVTVERJUikkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAaW5jbHVkZWRpcikiICYmIHJtIC1mICQkZmlsZXMKKworIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKKyMgaW50byB0aGVtIGFuZCBydW4gYG1ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgorIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiBgbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAorIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiBgY29uZmlnLnN0YXR1cycsIGVkaXQgYGNvbmZpZy5zdGF0dXMnCisjICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biBgbWFrZScpOworIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgYG1ha2UnIGNvbW1hbmQgbGluZS4KKyQoUkVDVVJTSVZFX1RBUkdFVFMpOgorCUBmYWlsPSBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgZG90X3NlZW49eWVzOyBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmU7IFwKKwlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKKwlmaTsgdGVzdCAteiAiJCRmYWlsIgorCiskKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKToKKwlAZmFpbD0gZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKwkgIGNhc2UgJCRmIGluIFwKKwkgICAgKj0qIHwgLS1bIWtdKik7OyBcCisJICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCWNhc2UgIiRAIiBpbiBcCisJICBkaXN0Y2xlYW4tKiB8IG1haW50YWluZXItY2xlYW4tKikgbGlzdD0nJChESVNUX1NVQkRJUlMpJyA7OyBcCisJICAqKSBsaXN0PSckKFNVQkRJUlMpJyA7OyBcCisJZXNhYzsgXAorCXJldj0nJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgcmV2PSIkJHN1YmRpciAkJHJldiI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCXJldj0iJCRyZXYgLiI7IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJZm9yIHN1YmRpciBpbiAkJHJldjsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZSAmJiB0ZXN0IC16ICIkJGZhaWwiCit0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAorCWRvbmUKK2N0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjdGFncyk7IFwKKwlkb25lCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PS47IFwKKwllbHNlIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PTsgXAorCWZpOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCisJICAgICAgc2V0ICIkJEAiICIkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiBjdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCAkKE1LRElSX1ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJQGxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKGRpc3RkaXIpLyQkc3ViZGlyIjsgXAorCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAorCSAgICBuZXdfZGlzdGRpcj0kJHJlbGRpcjsgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKHRvcF9kaXN0ZGlyKSI7IFwKKwkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKKwkgICAgbmV3X3RvcF9kaXN0ZGlyPSQkcmVsZGlyOyBcCisJICAgIGVjaG8gIiAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcXCI7IFwKKwkgICAgZWNobyAiICAgICBhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBhbV9fc2tpcF9tb2RlX2ZpeD06IGRpc3RkaXIpIjsgXAorCSAgICAoJChhbV9fY2QpICQkc3ViZGlyICYmIFwKKwkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCisJICAgICAgICB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIFwKKwkgICAgICAgIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFwKKwkJYW1fX3JlbW92ZV9kaXN0ZGlyPTogXAorCQlhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBcCisJCWFtX19za2lwX21vZGVfZml4PTogXAorCSAgICAgICAgZGlzdGRpcikgXAorCSAgICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogJChCVUlMVF9TT1VSQ0VTKQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrLXJlY3Vyc2l2ZQorYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKERBVEEpICQoSEVBREVSUykgYWxsLWxvY2FsCitpbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtcmVjdXJzaXZlCitpbnN0YWxsZGlycy1hbToKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChsaWJkaXIpIiAiJChERVNURElSKSQoZ2lyZGlyKSIgIiQoREVTVERJUikkKHR5cGVsaWJzZGlyKSIgIiQoREVTVERJUikkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAaW5jbHVkZWRpcikiICIkKERFU1RESVIpJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVkaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6ICQoQlVJTFRfU09VUkNFUykKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLXJlY3Vyc2l2ZQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1yZWN1cnNpdmUKK3VuaW5zdGFsbDogdW5pbnN0YWxsLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCS10ZXN0IC16ICIkKERJU1RDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChESVNUQ0xFQU5GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCisJLXRlc3QgLXogIiQoQlVJTFRfU09VUkNFUykiIHx8IHJtIC1mICQoQlVJTFRfU09VUkNFUykKK2NsZWFuOiBjbGVhbi1yZWN1cnNpdmUKKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGliTFRMSUJSQVJJRVMgY2xlYW4tbGlidG9vbCBcCisJbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktcmVjdXJzaXZlCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1yZWN1cnNpdmUKKworaHRtbC1hbToKKworaW5mbzogaW5mby1yZWN1cnNpdmUKKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWdpckRBVEEgXAorCWluc3RhbGwtbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlSEVBREVSUyBcCisJaW5zdGFsbC1ub2Rpc3RfbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlSEVBREVSUyBcCisJaW5zdGFsbC10eXBlbGlic0RBVEEKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLWxpYkxUTElCUkFSSUVTCisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtcmVjdXJzaXZlCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLXJlY3Vyc2l2ZQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtcmVjdXJzaXZlCisKK3BkZi1hbToKKworcHM6IHBzLXJlY3Vyc2l2ZQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtZ2lyREFUQSB1bmluc3RhbGwtbGliTFRMSUJSQVJJRVMgXAorCXVuaW5zdGFsbC1saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVIRUFERVJTIFwKKwl1bmluc3RhbGwtbm9kaXN0X2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAaW5jbHVkZUhFQURFUlMgXAorCXVuaW5zdGFsbC10eXBlbGlic0RBVEEKKworLk1BS0U6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIGFsbCBjaGVjayBcCisJY3RhZ3MtcmVjdXJzaXZlIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwIFwKKwl0YWdzLXJlY3Vyc2l2ZQorCisuUEhPTlk6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIFwKKwlhbGwgYWxsLWFtIGFsbC1sb2NhbCBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJMVExJQlJBUklFUyBjbGVhbi1saWJ0b29sIGN0YWdzIGN0YWdzLXJlY3Vyc2l2ZSBcCisJZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCisJaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCisJaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCisJaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZ2lyREFUQSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKKwlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbGliTFRMSUJSQVJJRVMgXAorCWluc3RhbGwtbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlSEVBREVSUyBcCisJaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtbm9kaXN0X2xpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAaW5jbHVkZUhFQURFUlMgXAorCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCisJaW5zdGFsbC1zdHJpcCBpbnN0YWxsLXR5cGVsaWJzREFUQSBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBpbnN0YWxsZGlycy1hbSBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorCXRhZ3MgdGFncy1yZWN1cnNpdmUgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtZ2lyREFUQSBcCisJdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTIFwKKwl1bmluc3RhbGwtbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlSEVBREVSUyBcCisJdW5pbnN0YWxsLW5vZGlzdF9saWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVIRUFERVJTIFwKKwl1bmluc3RhbGwtdHlwZWxpYnNEQVRBCisKKworZ3N0bWFyc2hhbC5oOiBnc3RtYXJzaGFsLmxpc3QKKwkkKEFNX1ZfR0VOKWdsaWItZ2VubWFyc2hhbCAtLWhlYWRlciAtLXByZWZpeD1nc3RfbWFyc2hhbCAkKHNyY2RpcikvZ3N0bWFyc2hhbC5saXN0ID4gZ3N0bWFyc2hhbC5oLnRtcCAmJiBcCisJbXYgZ3N0bWFyc2hhbC5oLnRtcCBnc3RtYXJzaGFsLmgKKworZ3N0bWFyc2hhbC5jOiBnc3RtYXJzaGFsLmxpc3QgZ3N0X3ByaXZhdGUuaAorCSQoQU1fVl9HRU4pZWNobyAiI2luY2x1ZGUgXCJnc3RfcHJpdmF0ZS5oXCIiID4gZ3N0bWFyc2hhbC5jLnRtcCAmJiBcCisJZWNobyAiI2luY2x1ZGUgXCJnbGliLW9iamVjdC5oXCIiID4+IGdzdG1hcnNoYWwuYy50bXAgJiYgXAorCWVjaG8gIiNpbmNsdWRlIFwiZ3N0bWFyc2hhbC5oXCIiID4+IGdzdG1hcnNoYWwuYy50bXAgJiYgXAorCWdsaWItZ2VubWFyc2hhbCAtLWJvZHkgLS1wcmVmaXg9Z3N0X21hcnNoYWwgJChzcmNkaXIpL2dzdG1hcnNoYWwubGlzdCA+PiBnc3RtYXJzaGFsLmMudG1wICYmIFwKKwltdiBnc3RtYXJzaGFsLmMudG1wIGdzdG1hcnNoYWwuYworCitnc3RlbnVtdHlwZXMuaDogJChnc3RfaGVhZGVycykKKwkkKEFNX1ZfR0VOKWdsaWItbWtlbnVtcyBcCisJLS1maGVhZCAiI2lmbmRlZiBfX0dTVF9FTlVNX1RZUEVTX0hfX1xuI2RlZmluZSBfX0dTVF9FTlVNX1RZUEVTX0hfX1xuXG4jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD5cblxuR19CRUdJTl9ERUNMU1xuIiBcCisJLS1mcHJvZCAiXG4vKiBlbnVtZXJhdGlvbnMgZnJvbSBcIkBmaWxlbmFtZUBcIiAqL1xuIiBcCisJLS12aGVhZCAiR1R5cGUgQGVudW1fbmFtZUBfZ2V0X3R5cGUgKHZvaWQpO1xuI2RlZmluZSBHU1RfVFlQRV9ARU5VTVNIT1JUQCAoQGVudW1fbmFtZUBfZ2V0X3R5cGUoKSlcbiIgICAgICAgICBcCisJLS1mdGFpbCAiR19FTkRfREVDTFNcblxuI2VuZGlmIC8qIF9fR1NUX0VOVU1fVFlQRVNfSF9fICovIiBcCisJJF4gPiBnc3RlbnVtdHlwZXMuaAorCitnc3RlbnVtdHlwZXMuYzogJChnc3RfaGVhZGVycykKKwkkKEFNX1ZfR0VOKWdsaWItbWtlbnVtcyBcCisJLS1maGVhZCAiI2luY2x1ZGUgXCJnc3RfcHJpdmF0ZS5oXCJcbiNpbmNsdWRlIDxnc3QvZ3N0Lmg+XG4jZGVmaW5lIENfRU5VTSh2KSAoKGdpbnQpIHYpXG4jZGVmaW5lIENfRkxBR1ModikgKChndWludCkgdilcbiAiIFwKKwktLWZwcm9kICJcbi8qIGVudW1lcmF0aW9ucyBmcm9tIFwiQGZpbGVuYW1lQFwiICovIiBcCisJLS12aGVhZCAiR1R5cGVcbkBlbnVtX25hbWVAX2dldF90eXBlICh2b2lkKVxue1xuICBzdGF0aWMgZ3NpemUgaWQgPSAwO1xuICBzdGF0aWMgY29uc3QgR0BUeXBlQFZhbHVlIHZhbHVlc1tdID0geyIgICAgIFwKKwktLXZwcm9kICIgICAgeyBDX0BUWVBFQChAVkFMVUVOQU1FQCksIFwiQFZBTFVFTkFNRUBcIiwgXCJAdmFsdWVuaWNrQFwiIH0sIiBcCisJLS12dGFpbCAiICAgIHsgMCwgTlVMTCwgTlVMTCB9XG4gIH07XG5cbiAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7XG4gICAgR1R5cGUgdG1wID0gZ19AdHlwZUBfcmVnaXN0ZXJfc3RhdGljIChcIkBFbnVtTmFtZUBcIiwgdmFsdWVzKTtcbiAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApO1xuICB9XG5cbiAgcmV0dXJuIChHVHlwZSkgaWQ7XG59IiBcCisJJF4gPiBnc3RlbnVtdHlwZXMuYworCislLmMuZ2NvdjogLmxpYnMvbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtJS5nY2RhICUuYworCSQoR0NPVikgLWIgLWYgLW8gJF4gPiAkQC5vdXQKKworZ2NvdjogJChsaWJnc3RyZWFtZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9TT1VSQ0VTOj0uZ2NvdikKKworQW5kcm9pZC5tazogTWFrZWZpbGUuYW0KKwlhbmRyb2dlbml6ZXIgLTpQUk9KRUNUIGdzdHJlYW1lciAtOlNIQVJFRCBsaWJnc3RyZWFtZXItQEdTVF9NQUpPUk1JTk9SQCBcCisJIC06VEFHUyBlbmcgZGVidWcgXAorICAgICAgICAgLTpSRUxfVE9QICQodG9wX3NyY2RpcikgLTpBQlNfVE9QICQoYWJzX3RvcF9zcmNkaXIpIFwKKwkgLTpTT1VSQ0VTICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfU09VUkNFUykgXAorCSAgICAgICAgICAgJChub2Rpc3RfbGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfU09VUkNFUykgXAorCSAtOkNGTEFHUyAkKERFRlMpICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSBcCisJIC06TERGTEFHUyAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX0xERkxBR1MpIFwKKwkgICAgICAgICAgICQobGliZ3N0cmVhbWVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfTElCQUREKSBcCisJICAgICAgICAgICAtbGRsIFwKKwkgLTpTVUJESVIgZ3N0L3BhcnNlIFwKKwkgLTpIRUFERVJfVEFSR0VUIGdzdHJlYW1lci1AR1NUX01BSk9STUlOT1JAL2dzdCBcCisJIC06SEVBREVSUyAkKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAaW5jbHVkZV9IRUFERVJTKSBcCisJIC06TElCRklMVEVSX1NUQVRJQyBnc3RwYXJzZSBcCisJIC06UEFTU1RIUk9VR0ggTE9DQUxfQVJNX01PREU6PWFybSBcCisJPiAkQAorCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAR3N0LUBHU1RfTUFKT1JNSU5PUkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAubGEKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJJChBTV9WX0dFTilHU1RfUExVR0lOX1NZU1RFTV9QQVRIPSIiIEdTVF9QTFVHSU5fUEFUSD0iIiBHU1RfUkVHSVNUUllfVVBEQVRFPW5vIFwKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCSQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSAtdiAtLW5hbWVzcGFjZSBHc3QgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1uc3ZlcnNpb249QEdTVF9NQUpPUk1JTk9SQCBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktSSQodG9wX3NyY2RpcikgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLUkkKHRvcF9idWlsZGRpcikgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLURJTl9HT0JKRUNUX0lOVFJPU1BFQ1RJT049MSBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktREdTVF9VU0VfVU5TVEFCTEVfQVBJIFwKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tYy1pbmNsdWRlPSdnc3QvZ3N0LmgnIFwKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tbGlicmFyeT1saWJnc3RyZWFtZXItMC4xMS5sYSBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLWluY2x1ZGU9R0xpYi0yLjAgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1pbmNsdWRlPUdPYmplY3QtMi4wIFwKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0taW5jbHVkZT1HTW9kdWxlLTIuMCBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLWxpYnRvb2w9IiQodG9wX2J1aWxkZGlyKS9saWJ0b29sIiBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLXBrZyBnbGliLTIuMCBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLXBrZyBnb2JqZWN0LTIuMCBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLXBrZyBnbW9kdWxlLW5vLWV4cG9ydC0yLjAgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1wa2cgZ3RocmVhZC0yLjAgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1wa2ctZXhwb3J0IGdzdHJlYW1lci1AR1NUX01BSk9STUlOT1JAIFwKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tYWRkLWluaXQtc2VjdGlvbj0iZ3N0X2luaXQoTlVMTCwgTlVMTCk7IiBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLW91dHB1dCAkQCBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQkkKGdpcl9oZWFkZXJzKSBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQkkKGdpcl9zb3VyY2VzKQorCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAJS50eXBlbGliOiAlLmdpciAkKElOVFJPU1BFQ1RJT05fQ09NUElMRVIpCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACSQoQU1fVl9HRU4pJChJTlRST1NQRUNUSU9OX0NPTVBJTEVSKSAtLWluY2x1ZGVkaXI9JChzcmNkaXIpIC0taW5jbHVkZWRpcj0kKGJ1aWxkZGlyKSAkKElOVFJPU1BFQ1RJT05fQ09NUElMRVJfT1BUUykgJDwgLW8gJChARikKKworIyB0cnkgdG8gcHJldmVudCBwYWNrYWdpbmcgZXJyb3JzCitjaGVjay1saWJleGVjZGlyLWNvbnNpc3RlbmN5OgorCUBpZiB0ZXN0ICIke0dTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUR9IiAhPSAiJHtsaWJleGVjZGlyfS9nc3RyZWFtZXItJChHU1RfTUFKT1JNSU5PUikvZ3N0LXBsdWdpbi1zY2FubmVyIjsgdGhlbiBcCisJICBlY2hvICIqKiogSW5jb25zaXN0ZW50IGxpYmV4ZWNkaXIhIFBsZWFzZSB1c2UgLi9jb25maWd1cmUgLS1saWJleGVjZGlyPS9mb28vYmFyIjsgXAorCSAgZWNobyAiKioqIHRvIHNldCB0aGUgbGliZXhlY2RpciBhbmQgbm90IG1ha2UgbGliZXhlY2Rpcj0vZm9vL2JhciBvciB0aGUgbGlrZS4iOyBcCisJICBlY2hvICIqKiogVGhlIHNhbWUgZ29lcyBmb3IgcHJlZml4LCBsaWJkaXIgZXRjLiI7IFwKKwkgIGVjaG8gIioqKiAke0dTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUR9ICE9ICR7bGliZXhlY2Rpcn0vZ3N0cmVhbWVyLSQoR1NUX01BSk9STUlOT1IpL2dzdC1wbHVnaW4tc2Nhbm5lciI7IFwKKwkgIGV4aXQgMTsgXAorCWZpCisKK2FsbC1sb2NhbDogY2hlY2stbGliZXhlY2Rpci1jb25zaXN0ZW5jeQorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9nc3QvZ2V0dGV4dC5oIGIvZ3N0L2dldHRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTkwMmIzCi0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dldHRleHQuaApAQCAtMCwwICsxLDY5IEBACisvKiBDb252ZW5pZW5jZSBoZWFkZXIgZm9yIGNvbmRpdGlvbmFsIHVzZSBvZiBHTlUgPGxpYmludGwuaD4uCisgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCwgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICAgVVNBLiAgKi8KKworI2lmbmRlZiBfTElCR0VUVEVYVF9ICisjZGVmaW5lIF9MSUJHRVRURVhUX0ggMQorCisvKiBOTFMgY2FuIGJlIGRpc2FibGVkIHRocm91Z2ggdGhlIGNvbmZpZ3VyZSAtLWRpc2FibGUtbmxzIG9wdGlvbi4gICovCisjaWZkZWYgRU5BQkxFX05MUworCisvKiBHZXQgZGVjbGFyYXRpb25zIG9mIEdOVSBtZXNzYWdlIGNhdGFsb2cgZnVuY3Rpb25zLiAgKi8KKyMgaW5jbHVkZSA8bGliaW50bC5oPgorCisjZWxzZQorCisvKiBTb2xhcmlzIC91c3IvaW5jbHVkZS9sb2NhbGUuaCBpbmNsdWRlcyAvdXNyL2luY2x1ZGUvbGliaW50bC5oLCB3aGljaAorICAgY2hva2VzIGlmIGRjZ2V0dGV4dCBpcyBkZWZpbmVkIGFzIGEgbWFjcm8uICBTbyBpbmNsdWRlIGl0IG5vdywgdG8gbWFrZQorICAgbGF0ZXIgaW5jbHVzaW9ucyBvZiA8bG9jYWxlLmg+IGEgTk9QLiAgV2UgZG9uJ3QgaW5jbHVkZSA8bGliaW50bC5oPgorICAgYXMgd2VsbCBiZWNhdXNlIHBlb3BsZSB1c2luZyAiZ2V0dGV4dC5oIiB3aWxsIG5vdCBpbmNsdWRlIDxsaWJpbnRsLmg+LAorICAgYW5kIGFsc28gaW5jbHVkaW5nIDxsaWJpbnRsLmg+IHdvdWxkIGZhaWwgb24gU3VuT1MgNCwgd2hlcmVhcyA8bG9jYWxlLmg+CisgICBpcyBPSy4gICovCisjaWYgZGVmaW5lZChfX3N1bikKKyMgaW5jbHVkZSA8bG9jYWxlLmg+CisjZW5kaWYKKworLyogRGlzYWJsZWQgTkxTLgorICAgVGhlIGNhc3RzIHRvICdjb25zdCBjaGFyIConIHNlcnZlIHRoZSBwdXJwb3NlIG9mIHByb2R1Y2luZyB3YXJuaW5ncworICAgZm9yIGludmFsaWQgdXNlcyBvZiB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSB0aGVzZSBmdW5jdGlvbnMuCisgICBPbiBwcmUtQU5TSSBzeXN0ZW1zIHdpdGhvdXQgJ2NvbnN0JywgdGhlIGNvbmZpZy5oIGZpbGUgaXMgc3VwcG9zZWQgdG8KKyAgIGNvbnRhaW4gIiNkZWZpbmUgY29uc3QiLiAgKi8KKyMgZGVmaW5lIGdldHRleHQoTXNnaWQpICgoY29uc3QgY2hhciAqKSAoTXNnaWQpKQorIyBkZWZpbmUgZGdldHRleHQoRG9tYWlubmFtZSwgTXNnaWQpICgoY29uc3QgY2hhciAqKSAoTXNnaWQpKQorIyBkZWZpbmUgZGNnZXR0ZXh0KERvbWFpbm5hbWUsIE1zZ2lkLCBDYXRlZ29yeSkgKChjb25zdCBjaGFyICopIChNc2dpZCkpCisjIGRlZmluZSBuZ2V0dGV4dChNc2dpZDEsIE1zZ2lkMiwgTikgXAorICAgICgoTikgPT0gMSA/IChjb25zdCBjaGFyICopIChNc2dpZDEpIDogKGNvbnN0IGNoYXIgKikgKE1zZ2lkMikpCisjIGRlZmluZSBkbmdldHRleHQoRG9tYWlubmFtZSwgTXNnaWQxLCBNc2dpZDIsIE4pIFwKKyAgICAoKE4pID09IDEgPyAoY29uc3QgY2hhciAqKSAoTXNnaWQxKSA6IChjb25zdCBjaGFyICopIChNc2dpZDIpKQorIyBkZWZpbmUgZGNuZ2V0dGV4dChEb21haW5uYW1lLCBNc2dpZDEsIE1zZ2lkMiwgTiwgQ2F0ZWdvcnkpIFwKKyAgICAoKE4pID09IDEgPyAoY29uc3QgY2hhciAqKSAoTXNnaWQxKSA6IChjb25zdCBjaGFyICopIChNc2dpZDIpKQorIyBkZWZpbmUgdGV4dGRvbWFpbihEb21haW5uYW1lKSAoKGNvbnN0IGNoYXIgKikgKERvbWFpbm5hbWUpKQorIyBkZWZpbmUgYmluZHRleHRkb21haW4oRG9tYWlubmFtZSwgRGlybmFtZSkgKChjb25zdCBjaGFyICopIChEaXJuYW1lKSkKKyMgZGVmaW5lIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KERvbWFpbm5hbWUsIENvZGVzZXQpICgoY29uc3QgY2hhciAqKSAoQ29kZXNldCkpCisKKyNlbmRpZgorCisvKiBBIHBzZXVkbyBmdW5jdGlvbiBjYWxsIHRoYXQgc2VydmVzIGFzIGEgbWFya2VyIGZvciB0aGUgYXV0b21hdGVkCisgICBleHRyYWN0aW9uIG9mIG1lc3NhZ2VzLCBidXQgZG9lcyBub3QgY2FsbCBnZXR0ZXh0KCkuICBUaGUgcnVuLXRpbWUKKyAgIHRyYW5zbGF0aW9uIGlzIGRvbmUgYXQgYSBkaWZmZXJlbnQgcGxhY2UgaW4gdGhlIGNvZGUuCisgICBUaGUgYXJndW1lbnQsIFN0cmluZywgc2hvdWxkIGJlIGEgbGl0ZXJhbCBzdHJpbmcuICBDb25jYXRlbmF0ZWQgc3RyaW5ncworICAgYW5kIG90aGVyIHN0cmluZyBleHByZXNzaW9ucyB3b24ndCB3b3JrLgorICAgVGhlIG1hY3JvJ3MgZXhwYW5zaW9uIGlzIG5vdCBwYXJlbnRoZXNpemVkLCBzbyB0aGF0IGl0IGlzIHN1aXRhYmxlIGFzCisgICBpbml0aWFsaXplciBmb3Igc3RhdGljICdjaGFyW10nIG9yICdjb25zdCBjaGFyW10nIHZhcmlhYmxlcy4gICovCisjZGVmaW5lIGdldHRleHRfbm9vcChTdHJpbmcpIFN0cmluZworCisjZW5kaWYgLyogX0xJQkdFVFRFWFRfSCAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dsaWItY29tcGF0LXByaXZhdGUuaCBiL2dzdC9nbGliLWNvbXBhdC1wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I1ZDZjZgotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nbGliLWNvbXBhdC1wcml2YXRlLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIGdsaWItY29tcGF0LmMKKyAqIEZ1bmN0aW9ucyBjb3BpZWQgZnJvbSBnbGliIDIuMTAKKyAqCisgKiBDb3B5cmlnaHQgMjAwNSBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKyAqLworCisjaWZuZGVmIF9fR0xJQl9DT01QQVRfUFJJVkFURV9IX18KKyNkZWZpbmUgX19HTElCX0NPTVBBVF9QUklWQVRFX0hfXworCisjaW5jbHVkZSA8Z2xpYi5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNpZiAhR0xJQl9DSEVDS19WRVJTSU9OKDIsMjUsMCkKKworI2lmIGRlZmluZWQgKF9NU0NfVkVSKSAmJiAhZGVmaW5lZChfV0lONjQpCit0eXBlZGVmIHN0cnVjdCBfc3RhdDMyIEdTdGF0QnVmOworI2Vsc2UKK3R5cGVkZWYgc3RydWN0IHN0YXQgR1N0YXRCdWY7CisjZW5kaWYKKworI2VuZGlmCisKKyNpZiBHTElCX0NIRUNLX1ZFUlNJT04oMiwyNiwwKQorI2RlZmluZSBHTElCX0hBU19HREFURVRJTUUKKyNlbmRpZgorCisvKiBTZWUgYnVnICM2NTE1MTQgKi8KKyNpZiBHTElCX0NIRUNLX1ZFUlNJT04oMiwyOSw1KQorI2RlZmluZSBHX0FUT01JQ19QT0lOVEVSX0NPTVBBUkVfQU5EX0VYQ0hBTkdFKGEsYixjKSBcCisgICAgZ19hdG9taWNfcG9pbnRlcl9jb21wYXJlX2FuZF9leGNoYW5nZSAoKGEpLChiKSwoYykpCisjZGVmaW5lIEdfQVRPTUlDX0lOVF9DT01QQVJFX0FORF9FWENIQU5HRShhLGIsYykgXAorICAgIGdfYXRvbWljX2ludF9jb21wYXJlX2FuZF9leGNoYW5nZSAoKGEpLChiKSwoYykpCisjZWxzZQorI2RlZmluZSBHX0FUT01JQ19QT0lOVEVSX0NPTVBBUkVfQU5EX0VYQ0hBTkdFKGEsYixjKSBcCisgICAgZ19hdG9taWNfcG9pbnRlcl9jb21wYXJlX2FuZF9leGNoYW5nZSAoKHZvbGF0aWxlIGdwb2ludGVyICopKGEpLChiKSwoYykpCisjZGVmaW5lIEdfQVRPTUlDX0lOVF9DT01QQVJFX0FORF9FWENIQU5HRShhLGIsYykgXAorICAgIGdfYXRvbWljX2ludF9jb21wYXJlX2FuZF9leGNoYW5nZSAoKHZvbGF0aWxlIGludCAqKShhKSwoYiksKGMpKQorI2VuZGlmCisKKy8qIFNlZSBidWcgIzY1MTUxNCAqLworI2lmIEdMSUJfQ0hFQ0tfVkVSU0lPTigyLDI5LDUpCisjZGVmaW5lIEdfQVRPTUlDX0lOVF9BREQoYSxiKSBnX2F0b21pY19pbnRfYWRkICgoYSksKGIpKQorI2Vsc2UKKyNkZWZpbmUgR19BVE9NSUNfSU5UX0FERChhLGIpIGdfYXRvbWljX2ludF9leGNoYW5nZV9hbmRfYWRkICgoYSksKGIpKQorI2VuZGlmCisKKy8qIGNvcGllcyAqLworCisvKiBhZGFwdGF0aW9ucyAqLworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2dzdC9nbGliLWNvbXBhdC5oIGIvZ3N0L2dsaWItY29tcGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc5NDMwNgotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nbGliLWNvbXBhdC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcgIFBldGVyIE1hdHRpcywgU3BlbmNlciBLaW1iYWxsIGFuZCBKb3NoIE1hY0RvbmFsZAorICoKKyAqIGdsaWItY29tcGF0Lmg6IFB1YmxpYyBHTGliIGNvbXBhdGliaWxpdHkgc2hpbXMKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKKy8qCisgKiBNb2RpZmllZCBieSB0aGUgR0xpYiBUZWFtIGFuZCBvdGhlcnMgMTk5Ny0yMDAwLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmcm9tCisgKiBnbGliLTIuOC4wIGZvciBhIGxpc3Qgb2YgcGVvcGxlIG9uIHRoZSBHTGliIFRlYW0uIFNlZSB0aGUgQ2hhbmdlTG9nIGZpbGVzCisgKiBmcm9tIGdsaWItMi44LjAgZm9yIGEgbGlzdCBvZiBjaGFuZ2VzLiBUaGVzZSBmaWxlcyBhcmUgZGlzdHJpYnV0ZWQgd2l0aCBHTGliCisgKiBhdCBmdHA6Ly9mdHAuZ3RrLm9yZy9wdWIvZ3RrLy4KKyAqLworCisjaWZuZGVmIF9fR1NUX0dMSUJfQ09NUEFUX0hfXworI2RlZmluZSBfX0dTVF9HTElCX0NPTVBBVF9IX18KKworR19CRUdJTl9ERUNMUworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HU1RfR0xJQl9DT01QQVRfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0LWkxOG4tYXBwLmggYi9nc3QvZ3N0LWkxOG4tYXBwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYzMzliOAotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3QtaTE4bi1hcHAuaApAQCAtMCwwICsxLDQzIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKyAqCisgKiBnc3QtaTE4bi1hcHAuaDogaW50ZXJuYXRpb25hbGl6YXRpb24gbWFjcm9zIGZvciB0aGUgR1N0cmVhbWVyIHRvb2xzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworCisjaWZuZGVmIF9fR1NUX0kxOE5fQVBQX0hfXworI2RlZmluZSBfX0dTVF9JMThOX0FQUF9IX18KKworI2lmZGVmIEVOQUJMRV9OTFMKKworI2luY2x1ZGUgImdldHRleHQuaCIgLyogaW5jbHVkZWQgd2l0aCBnZXR0ZXh0IGRpc3RyaWJ1dGlvbiBhbmQgY29waWVkICovCisKKy8qIHdlIHdhbnQgdG8gdXNlIHNob3J0aGFuZCBfKCkgZm9yIHRyYW5zbGF0aW5nIGFuZCBOXygpIGZvciBtYXJraW5nICovCisjZGVmaW5lIF8oU3RyaW5nKSBnZXR0ZXh0IChTdHJpbmcpCisjZGVmaW5lIE5fKFN0cmluZykgZ2V0dGV4dF9ub29wIChTdHJpbmcpCisvKiBGSVhNRTogaWYgd2UgbmVlZCBpdCwgd2UgY2FuIGFkZCBRXyBhcyB3ZWxsLCBsaWtlIGluIGdsaWIgKi8KKworI2Vsc2UKKworI2RlZmluZSBfKFN0cmluZykgU3RyaW5nCisjZGVmaW5lIE5fKFN0cmluZykgU3RyaW5nCisjZGVmaW5lIG5nZXR0ZXh0KFNpbmd1bGFyLFBsdXJhbCxDb3VudCkgKChDb3VudD4xKT9QbHVyYWw6U2luZ3VsYXIpCisKKyNlbmRpZgorCisjZW5kaWYgLyogX19HU1RfSTE4Tl9BUFBfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0LWkxOG4tbGliLmggYi9nc3QvZ3N0LWkxOG4tbGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRlYjQ1ZQotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3QtaTE4bi1saWIuaApAQCAtMCwwICsxLDQ2IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKyAqCisgKiBnc3QtaTE4bi1saWIuaDogaW50ZXJuYXRpb25hbGl6YXRpb24gbWFjcm9zIGZvciB0aGUgR1N0cmVhbWVyIGxpYnJhcmllcworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworI2lmbmRlZiBfX0dTVF9JMThOX0xJQl9IX18KKyNkZWZpbmUgX19HU1RfSTE4Tl9MSUJfSF9fCisKKyNpZm5kZWYgUEFDS0FHRV9OQU1FCisjZXJyb3IgWW91IG11c3QgaW5jbHVkZSBjb25maWcuaCBiZWZvcmUgaW5jbHVkaW5nIHRoaXMgaGVhZGVyLgorI2VuZGlmCisKKyNpZmRlZiBFTkFCTEVfTkxTCisKKyNpbmNsdWRlICJnZXR0ZXh0LmgiIC8qIGluY2x1ZGVkIHdpdGggZ2V0dGV4dCBkaXN0cmlidXRpb24gYW5kIGNvcGllZCAqLworCisvKiB3ZSB3YW50IHRvIHVzZSBzaG9ydGhhbmQgXygpIGZvciB0cmFuc2xhdGluZyBhbmQgTl8oKSBmb3IgbWFya2luZyAqLworI2RlZmluZSBfKFN0cmluZykgZGdldHRleHQgKEdFVFRFWFRfUEFDS0FHRSwgU3RyaW5nKQorI2RlZmluZSBOXyhTdHJpbmcpIGdldHRleHRfbm9vcCAoU3RyaW5nKQorLyogRklYTUU6IGlmIHdlIG5lZWQgaXQsIHdlIGNhbiBhZGQgUV8gYXMgd2VsbCwgbGlrZSBpbiBnbGliICovCisKKyNlbHNlCisjZGVmaW5lIF8oU3RyaW5nKSBTdHJpbmcKKyNkZWZpbmUgTl8oU3RyaW5nKSBTdHJpbmcKKyNkZWZpbmUgbmdldHRleHQoU2luZ3VsYXIsUGx1cmFsLENvdW50KSAoKENvdW50PjEpP1BsdXJhbDpTaW5ndWxhcikKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0dTVF9JMThOX0xJQl9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3QuYyBiL2dzdC9nc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjM0NzU4Ci0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdC5jCkBAIC0wLDAgKzEsMTIxOSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgorICoKKyAqIGdzdC5jOiBJbml0aWFsaXphdGlvbiBhbmQgbm9uLXBpcGVsaW5lIG9wZXJhdGlvbnMKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKioKKyAqIFNFQ1RJT046Z3N0CisgKiBAc2hvcnRfZGVzY3JpcHRpb246IE1lZGlhIGxpYnJhcnkgc3VwcG9ydGluZyBhcmJpdHJhcnkgZm9ybWF0cyBhbmQgZmlsdGVyCisgKiAgICAgICAgICAgICAgICAgICAgIGdyYXBocy4KKyAqCisgKiBHU3RyZWFtZXIgaXMgYSBmcmFtZXdvcmsgZm9yIGNvbnN0cnVjdGluZyBncmFwaHMgb2YgdmFyaW91cyBmaWx0ZXJzCisgKiAodGVybWVkIGVsZW1lbnRzIGhlcmUpIHRoYXQgd2lsbCBoYW5kbGUgc3RyZWFtaW5nIG1lZGlhLiAgQW55IGRpc2NyZWV0CisgKiAocGFja2V0aXphYmxlKSBtZWRpYSB0eXBlIGlzIHN1cHBvcnRlZCwgd2l0aCBwcm92aXNpb25zIGZvciBhdXRvbWF0aWNhbGx5CisgKiBkZXRlcm1pbmluZyBzb3VyY2UgdHlwZS4gIEZvcm1hdHRpbmcvZnJhbWluZyBpbmZvcm1hdGlvbiBpcyBwcm92aWRlZCB3aXRoCisgKiBhIHBvd2VyZnVsIG5lZ290aWF0aW9uIGZyYW1ld29yay4gIFBsdWdpbnMgYXJlIGhlYXZpbHkgdXNlZCB0byBwcm92aWRlIGZvcgorICogYWxsIGVsZW1lbnRzLCBhbGxvd2luZyBvbmUgdG8gY29uc3RydWN0IHBsdWdpbnMgb3V0c2lkZSBvZiB0aGUgR1NUCisgKiBsaWJyYXJ5LCBldmVuIHJlbGVhc2VkIGJpbmFyeS1vbmx5IGlmIGxpY2Vuc2UgcmVxdWlyZSAocGxlYXNlIGRvbid0KS4KKyAqIEdTdHJlYW1lciBjb3ZlcnMgYSB3aWRlIHJhbmdlIG9mIHVzZSBjYXNlcyBpbmNsdWRpbmc6IHBsYXliYWNrLCByZWNvcmRpbmcsCisgKiBlZGl0aW5nLCBzZXJ2aW5nIHN0cmVhbXMsIHZvaWNlIG92ZXIgaXAgYW5kIHZpZGVvIGNhbGxzLgorICoKKyAqIFRoZSA8YXBwbGljYXRpb24+R1N0cmVhbWVyPC9hcHBsaWNhdGlvbj4gbGlicmFyeSBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgd2l0aAorICogZ3N0X2luaXQoKSBiZWZvcmUgaXQgY2FuIGJlIHVzZWQuIFlvdSBzaG91bGQgcGFzcyBwb2ludGVycyB0byB0aGUgbWFpbiBhcmdjCisgKiBhbmQgYXJndiB2YXJpYWJsZXMgc28gdGhhdCBHU3RyZWFtZXIgY2FuIHByb2Nlc3MgaXRzIG93biBjb21tYW5kIGxpbmUKKyAqIG9wdGlvbnMsIGFzIHNob3duIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZS4KKyAqCisgKiA8ZXhhbXBsZT4KKyAqIDx0aXRsZT5Jbml0aWFsaXppbmcgdGhlIGdzdHJlYW1lciBsaWJyYXJ5PC90aXRsZT4KKyAqIDxwcm9ncmFtbGlzdGluZyBsYW5ndWFnZT0iYyI+CisgKiBpbnQKKyAqIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgKiB7CisgKiAgIC8vIGluaXRpYWxpemUgdGhlIEdTdHJlYW1lciBsaWJyYXJ5CisgKiAgIGdzdF9pbml0ICgmYW1wO2FyZ2MsICZhbXA7YXJndik7CisgKiAgIC4uLgorICogfQorICogPC9wcm9ncmFtbGlzdGluZz4KKyAqIDwvZXhhbXBsZT4KKyAqCisgKiBJdCdzIGFsbG93ZWQgdG8gcGFzcyB0d28gTlVMTCBwb2ludGVycyB0byBnc3RfaW5pdCgpIGluIGNhc2UgeW91IGRvbid0IHdhbnQKKyAqIHRvIHBhc3MgdGhlIGNvbW1hbmQgbGluZSBhcmdzIHRvIEdTdHJlYW1lci4KKyAqCisgKiBZb3UgY2FuIGFsc28gdXNlIEdPcHRpb24gdG8gaW5pdGlhbGl6ZSB5b3VyIG93biBwYXJhbWV0ZXJzIGFzIHNob3duIGluCisgKiB0aGUgbmV4dCBjb2RlIGZyYWdtZW50OgorICogPGV4YW1wbGU+CisgKiA8dGl0bGU+SW5pdGlhbGl6aW5nIG93biBwYXJhbWV0ZXJzIHdoZW4gaW5pdGlhbGl6aW5nIGdzdHJlYW1lcjwvdGl0bGU+CisgKiA8cHJvZ3JhbWxpc3Rpbmc+CisgKiBzdGF0aWMgZ2Jvb2xlYW4gc3RhdHMgPSBGQUxTRTsKKyAqIC4uLgorICogaW50CisgKiBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorICogeworICogIEdPcHRpb25FbnRyeSBvcHRpb25zW10gPSB7CisgKiAgIHsidGFncyIsICd0JywgMCwgR19PUFRJT05fQVJHX05PTkUsICZhbXA7dGFncywKKyAqICAgICAgIE5fKCJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiKSwgTlVMTH0sCisgKiAgIHtOVUxMfQorICogIH07CisgKiAgLy8gbXVzdCBpbml0aWFsaXNlIHRoZSB0aHJlYWRpbmcgc3lzdGVtIGJlZm9yZSB1c2luZyBhbnkgb3RoZXIgR0xpYiBmdW50aW9uCisgKiAgaWYgKCFnX3RocmVhZF9zdXBwb3J0ZWQgKCkpCisgKiAgICBnX3RocmVhZF9pbml0IChOVUxMKTsKKyAqICBjdHggPSBnX29wdGlvbl9jb250ZXh0X25ldyAoIltBRERJVElPTkFMIEFSR1VNRU5UU10iKTsKKyAqICBnX29wdGlvbl9jb250ZXh0X2FkZF9tYWluX2VudHJpZXMgKGN0eCwgb3B0aW9ucywgR0VUVEVYVF9QQUNLQUdFKTsKKyAqICBnX29wdGlvbl9jb250ZXh0X2FkZF9ncm91cCAoY3R4LCBnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwICgpKTsKKyAqICBpZiAoIWdfb3B0aW9uX2NvbnRleHRfcGFyc2UgKGN0eCwgJmFtcDthcmdjLCAmYW1wO2FyZ3YsICZhbXA7ZXJyKSkgeworICogICAgZ19wcmludCAoIkVycm9yIGluaXRpYWxpemluZzogJnBlcmNudDtzXG4iLCBHU1RfU1RSX05VTEwgKGVyci0+bWVzc2FnZSkpOworICogICAgZXhpdCAoMSk7CisgKiAgfQorICogIGdfb3B0aW9uX2NvbnRleHRfZnJlZSAoY3R4KTsKKyAqIC4uLgorICogfQorICogPC9wcm9ncmFtbGlzdGluZz4KKyAqIDwvZXhhbXBsZT4KKyAqCisgKiBVc2UgZ3N0X3ZlcnNpb24oKSB0byBxdWVyeSB0aGUgbGlicmFyeSB2ZXJzaW9uIGF0IHJ1bnRpbWUgb3IgdXNlIHRoZQorICogR1NUX1ZFUlNJT05fKiBtYWNyb3MgdG8gZmluZCB0aGUgdmVyc2lvbiBhdCBjb21waWxlIHRpbWUuIE9wdGlvbmFsbHkKKyAqIGdzdF92ZXJzaW9uX3N0cmluZygpIHJldHVybnMgYSBwcmludGFibGUgc3RyaW5nLgorICoKKyAqIFRoZSBnc3RfZGVpbml0KCkgY2FsbCBpcyB1c2VkIHRvIGNsZWFuIHVwIGFsbCBpbnRlcm5hbCByZXNvdXJjZXMgdXNlZAorICogYnkgPGFwcGxpY2F0aW9uPkdTdHJlYW1lcjwvYXBwbGljYXRpb24+LiBJdCBpcyBtb3N0bHkgdXNlZCBpbiB1bml0IHRlc3RzIAorICogdG8gY2hlY2sgZm9yIGxlYWtzLgorICoKKyAqIExhc3QgcmV2aWV3ZWQgb24gMjAwNi0wOC0xMSAoMC4xMC4xMCkKKyAqLworCisjaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJnc3Rjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfU1lTX1VUU05BTUVfSAorI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBHX09TX1dJTjMyCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4gICAgIC8qIHByZXZlbnRzIGZyb20gaW5jbHVkaW5nIHRvbyBtYW55IHRoaW5ncyAqLworI2luY2x1ZGUgPHdpbmRvd3MuaD4gICAgICAgICAgICAvKiBHZXRTdGRIYW5kbGUsIHdpbmRvd3MgY29uc29sZSAqLworI2VuZGlmCisKKyNpbmNsdWRlICJnc3QtaTE4bi1saWIuaCIKKyNpbmNsdWRlIDxsb2NhbGUuaD4gICAgICAgICAgICAgLyogZm9yIExDX0FMTCAqLworCisjaW5jbHVkZSAiZ3N0LmgiCisKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIEdTVF9DQVRfR1NUX0lOSVQKKworI2RlZmluZSBNQVhfUEFUSF9TUExJVCAgMTYKKyNkZWZpbmUgR1NUX1BMVUdJTl9TRVBBUkFUT1IgIiwiCisKK3N0YXRpYyBnYm9vbGVhbiBnc3RfaW5pdGlhbGl6ZWQgPSBGQUxTRTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfZGVpbml0aWFsaXplZCA9IEZBTFNFOworCisjaWZkZWYgR19PU19XSU4zMgorSE1PRFVMRSBfcHJpdl9nc3RfZGxsX2hhbmRsZSA9IE5VTEw7CisjZW5kaWYKKworI2lmbmRlZiBHU1RfRElTQUJMRV9SRUdJU1RSWQorR0xpc3QgKl9wcml2X2dzdF9wbHVnaW5fcGF0aHMgPSBOVUxMOyAgIC8qIGZvciBkZWxheWVkIHByb2Nlc3NpbmcgaW4gcG9zdF9pbml0ICovCisKK2V4dGVybiBnYm9vbGVhbiBfcHJpdl9nc3RfZGlzYWJsZV9yZWdpc3RyeV91cGRhdGU7CisjZW5kaWYKKworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKK2V4dGVybiBjb25zdCBnY2hhciAqcHJpdl9nc3RfZHVtcF9kb3RfZGlyOworI2VuZGlmCisKKy8qIGRlZmF1bHRzICovCisKKy8qIHNldCB0byBUUlVFIHdoZW4gc2VnZmF1bHRzIG5lZWQgdG8gYmUgbGVmdCBhcyBpcyAqLworc3RhdGljIGdib29sZWFuIF9nc3RfZGlzYWJsZV9zZWd0cmFwID0gRkFMU0U7CisKK3N0YXRpYyBnYm9vbGVhbiBpbml0X3ByZSAoR09wdGlvbkNvbnRleHQgKiBjb250ZXh0LCBHT3B0aW9uR3JvdXAgKiBncm91cCwKKyAgICBncG9pbnRlciBkYXRhLCBHRXJyb3IgKiogZXJyb3IpOworc3RhdGljIGdib29sZWFuIGluaXRfcG9zdCAoR09wdGlvbkNvbnRleHQgKiBjb250ZXh0LCBHT3B0aW9uR3JvdXAgKiBncm91cCwKKyAgICBncG9pbnRlciBkYXRhLCBHRXJyb3IgKiogZXJyb3IpOworI2lmbmRlZiBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lORworc3RhdGljIGdib29sZWFuIHBhcnNlX2dvcHRpb25fYXJnIChjb25zdCBnY2hhciAqIHNfb3B0LAorICAgIGNvbnN0IGdjaGFyICogYXJnLCBncG9pbnRlciBkYXRhLCBHRXJyb3IgKiogZXJyKTsKKyNlbmRpZgorCitHU0xpc3QgKl9wcml2X2dzdF9wcmVsb2FkX3BsdWdpbnMgPSBOVUxMOworCitjb25zdCBnY2hhciBnX2xvZ19kb21haW5fZ3N0cmVhbWVyW10gPSAiR1N0cmVhbWVyIjsKKworc3RhdGljIHZvaWQKK2RlYnVnX2xvZ19oYW5kbGVyIChjb25zdCBnY2hhciAqIGxvZ19kb21haW4sCisgICAgR0xvZ0xldmVsRmxhZ3MgbG9nX2xldmVsLCBjb25zdCBnY2hhciAqIG1lc3NhZ2UsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgZ19sb2dfZGVmYXVsdF9oYW5kbGVyIChsb2dfZG9tYWluLCBsb2dfbGV2ZWwsIG1lc3NhZ2UsIHVzZXJfZGF0YSk7CisgIC8qIEZJWE1FOiBkbyB3ZSBzdGlsbCBuZWVkIHRoaXMgPyBmYXRhbCBlcnJvcnMgdGhlc2UgZGF5cyBhcmUgYWxsCisgICAqIG90aGVyIHRoYW4gY29yZSBlcnJvcnMgKi8KKyAgLyogZ19vbl9lcnJvcl9xdWVyeSAoTlVMTCk7ICovCit9CisKK2VudW0KK3sKKyAgQVJHX1ZFUlNJT04gPSAxLAorICBBUkdfRkFUQUxfV0FSTklOR1MsCisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICBBUkdfREVCVUdfTEVWRUwsCisgIEFSR19ERUJVRywKKyAgQVJHX0RFQlVHX0RJU0FCTEUsCisgIEFSR19ERUJVR19OT19DT0xPUiwKKyAgQVJHX0RFQlVHX0hFTFAsCisjZW5kaWYKKyAgQVJHX1BMVUdJTl9TUEVXLAorICBBUkdfUExVR0lOX1BBVEgsCisgIEFSR19QTFVHSU5fTE9BRCwKKyAgQVJHX1NFR1RSQVBfRElTQUJMRSwKKyAgQVJHX1JFR0lTVFJZX1VQREFURV9ESVNBQkxFLAorICBBUkdfUkVHSVNUUllfRk9SS19ESVNBQkxFCit9OworCisvKiBkZWJ1Zy1zcGVjIDo6PSBjYXRlZ29yeS1zcGVjIFssIGNhdGVnb3J5LXNwZWNdKgorICogY2F0ZWdvcnktc3BlYyA6Oj0gY2F0ZWdvcnk6dmFsIHwgdmFsCisgKiBjYXRlZ29yeSA6Oj0gW146XSsKKyAqIHZhbCA6Oj0gWzAtNV0KKyAqLworCisjaWZuZGVmIE5VTAorI2RlZmluZSBOVUwgJ1wwJworI2VuZGlmCisKKyNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCitzdGF0aWMgZ2Jvb2xlYW4KK3BhcnNlX2RlYnVnX2NhdGVnb3J5IChnY2hhciAqIHN0ciwgY29uc3QgZ2NoYXIgKiogY2F0ZWdvcnkpCit7CisgIGlmICghc3RyKQorICAgIHJldHVybiBGQUxTRTsKKworICAvKiB3b3JrcyBpbiBwbGFjZSAqLworICBnX3N0cnN0cmlwIChzdHIpOworCisgIGlmIChzdHJbMF0gIT0gTlVMKSB7CisgICAgKmNhdGVnb3J5ID0gc3RyOworICAgIHJldHVybiBUUlVFOworICB9CisKKyAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3BhcnNlX2RlYnVnX2xldmVsIChnY2hhciAqIHN0ciwgR3N0RGVidWdMZXZlbCAqIGxldmVsKQoreworICBpZiAoIXN0cikKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgLyogd29ya3MgaW4gcGxhY2UgKi8KKyAgZ19zdHJzdHJpcCAoc3RyKTsKKworICBpZiAoc3RyWzBdICE9IE5VTCAmJiBzdHJbMV0gPT0gTlVMCisgICAgICAmJiBzdHJbMF0gPj0gJzAnICYmIHN0clswXSA8ICcwJyArIEdTVF9MRVZFTF9DT1VOVCkgeworICAgICpsZXZlbCA9IChHc3REZWJ1Z0xldmVsKSAoc3RyWzBdIC0gJzAnKTsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorCisgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQKK3BhcnNlX2RlYnVnX2xpc3QgKGNvbnN0IGdjaGFyICogbGlzdCkKK3sKKyAgZ2NoYXIgKipzcGxpdDsKKyAgZ2NoYXIgKip3YWxrOworCisgIGdfYXNzZXJ0IChsaXN0KTsKKworICBzcGxpdCA9IGdfc3Ryc3BsaXQgKGxpc3QsICIsIiwgMCk7CisKKyAgZm9yICh3YWxrID0gc3BsaXQ7ICp3YWxrOyB3YWxrKyspIHsKKyAgICBpZiAoc3RyY2hyICgqd2FsaywgJzonKSkgeworICAgICAgZ2NoYXIgKip2YWx1ZXMgPSBnX3N0cnNwbGl0ICgqd2FsaywgIjoiLCAyKTsKKworICAgICAgaWYgKHZhbHVlc1swXSAmJiB2YWx1ZXNbMV0pIHsKKyAgICAgICAgR3N0RGVidWdMZXZlbCBsZXZlbDsKKyAgICAgICAgY29uc3QgZ2NoYXIgKmNhdGVnb3J5OworCisgICAgICAgIGlmIChwYXJzZV9kZWJ1Z19jYXRlZ29yeSAodmFsdWVzWzBdLCAmY2F0ZWdvcnkpCisgICAgICAgICAgICAmJiBwYXJzZV9kZWJ1Z19sZXZlbCAodmFsdWVzWzFdLCAmbGV2ZWwpKQorICAgICAgICAgIGdzdF9kZWJ1Z19zZXRfdGhyZXNob2xkX2Zvcl9uYW1lIChjYXRlZ29yeSwgbGV2ZWwpOworICAgICAgfQorCisgICAgICBnX3N0cmZyZWV2ICh2YWx1ZXMpOworICAgIH0gZWxzZSB7CisgICAgICBHc3REZWJ1Z0xldmVsIGxldmVsOworCisgICAgICBpZiAocGFyc2VfZGVidWdfbGV2ZWwgKCp3YWxrLCAmbGV2ZWwpKQorICAgICAgICBnc3RfZGVidWdfc2V0X2RlZmF1bHRfdGhyZXNob2xkIChsZXZlbCk7CisgICAgfQorICB9CisKKyAgZ19zdHJmcmVldiAoc3BsaXQpOworfQorI2VuZGlmCisKKyNpZmRlZiBHX09TX1dJTjMyCitCT09MIFdJTkFQSSBEbGxNYWluIChISU5TVEFOQ0UgaGluc3RETEwsIERXT1JEIGZkd1JlYXNvbiwgTFBWT0lEIGxwdlJlc2VydmVkKTsKK0JPT0wgV0lOQVBJCitEbGxNYWluIChISU5TVEFOQ0UgaGluc3RETEwsIERXT1JEIGZkd1JlYXNvbiwgTFBWT0lEIGxwdlJlc2VydmVkKQoreworICBpZiAoZmR3UmVhc29uID09IERMTF9QUk9DRVNTX0FUVEFDSCkKKyAgICBfcHJpdl9nc3RfZGxsX2hhbmRsZSA9IChITU9EVUxFKSBoaW5zdERMTDsKKyAgcmV0dXJuIFRSVUU7Cit9CisKKyNlbmRpZgorCisvKioKKyAqIGdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXA6CisgKgorICogUmV0dXJucyBhICNHT3B0aW9uR3JvdXAgd2l0aCBHU3RyZWFtZXIncyBhcmd1bWVudCBzcGVjaWZpY2F0aW9ucy4gVGhlCisgKiBncm91cCBpcyBzZXQgdXAgdG8gdXNlIHN0YW5kYXJkIEdPcHRpb24gY2FsbGJhY2tzLCBzbyB3aGVuIHVzaW5nIHRoaXMKKyAqIGdyb3VwIGluIGNvbWJpbmF0aW9uIHdpdGggR09wdGlvbiBwYXJzaW5nIG1ldGhvZHMsIGFsbCBhcmd1bWVudCBwYXJzaW5nCisgKiBhbmQgaW5pdGlhbGl6YXRpb24gaXMgYXV0b21hdGVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGludGVncmF0ZSBHU3RyZWFtZXIgd2l0aCBvdGhlcgorICogbGlicmFyaWVzIHRoYXQgdXNlIEdPcHRpb24gKHNlZSBnX29wdGlvbl9jb250ZXh0X2FkZF9ncm91cCgpICkuCisgKgorICogSWYgeW91IHVzZSB0aGlzIGZ1bmN0aW9uLCB5b3Ugc2hvdWxkIG1ha2Ugc3VyZSB5b3UgaW5pdGlhbGlzZSB0aGUgR0xpYgorICogdGhyZWFkaW5nIHN5c3RlbSBhcyBvbmUgb2YgdGhlIHZlcnkgZmlyc3QgdGhpbmdzIGluIHlvdXIgcHJvZ3JhbQorICogKHNlZSB0aGUgZXhhbXBsZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgc2VjdGlvbikuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIHBvaW50ZXIgdG8gR1N0cmVhbWVyJ3Mgb3B0aW9uIGdyb3VwLgorICovCisKK0dPcHRpb25Hcm91cCAqCitnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwICh2b2lkKQoreworI2lmbmRlZiBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lORworICBHT3B0aW9uR3JvdXAgKmdyb3VwOworICBzdGF0aWMgY29uc3QgR09wdGlvbkVudHJ5IGdzdF9hcmdzW10gPSB7CisgICAgeyJnc3QtdmVyc2lvbiIsIDAsIEdfT1BUSU9OX0ZMQUdfTk9fQVJHLCBHX09QVElPTl9BUkdfQ0FMTEJBQ0ssCisgICAgICAgIChncG9pbnRlcikgcGFyc2VfZ29wdGlvbl9hcmcsIE5fKCJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iKSwgTlVMTH0sCisgICAgeyJnc3QtZmF0YWwtd2FybmluZ3MiLCAwLCBHX09QVElPTl9GTEFHX05PX0FSRywgR19PUFRJT05fQVJHX0NBTExCQUNLLAorICAgICAgICAoZ3BvaW50ZXIpIHBhcnNlX2dvcHRpb25fYXJnLCBOXygiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiKSwgTlVMTH0sCisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICAgIHsiZ3N0LWRlYnVnLWhlbHAiLCAwLCBHX09QVElPTl9GTEFHX05PX0FSRywgR19PUFRJT05fQVJHX0NBTExCQUNLLAorICAgICAgICAgIChncG9pbnRlcikgcGFyc2VfZ29wdGlvbl9hcmcsCisgICAgICAgICAgTl8oIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IiksCisgICAgICAgIE5VTEx9LAorICAgIHsiZ3N0LWRlYnVnLWxldmVsIiwgMCwgMCwgR19PUFRJT05fQVJHX0NBTExCQUNLLAorICAgICAgICAgIChncG9pbnRlcikgcGFyc2VfZ29wdGlvbl9hcmcsCisgICAgICAgICAgTl8oIkRlZmF1bHQgZGVidWcgbGV2ZWwgZnJvbSAxIChvbmx5IGVycm9yKSB0byA1IChhbnl0aGluZykgb3IgIgorICAgICAgICAgICAgICAiMCBmb3Igbm8gb3V0cHV0IiksCisgICAgICAgIE5fKCJMRVZFTCIpfSwKKyAgICB7ImdzdC1kZWJ1ZyIsIDAsIDAsIEdfT1BUSU9OX0FSR19DQUxMQkFDSywgKGdwb2ludGVyKSBwYXJzZV9nb3B0aW9uX2FyZywKKyAgICAgICAgICBOXygiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgIgorICAgICAgICAgICAgICAic3BlY2lmaWMgbGV2ZWxzIGZvciB0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiAiCisgICAgICAgICAgICAgICJHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiKSwKKyAgICAgICAgTl8oIkxJU1QiKX0sCisgICAgeyJnc3QtZGVidWctbm8tY29sb3IiLCAwLCBHX09QVElPTl9GTEFHX05PX0FSRywgR19PUFRJT05fQVJHX0NBTExCQUNLLAorICAgICAgICAgIChncG9pbnRlcikgcGFyc2VfZ29wdGlvbl9hcmcsIE5fKCJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIpLAorICAgICAgICBOVUxMfSwKKyAgICB7ImdzdC1kZWJ1Zy1kaXNhYmxlIiwgMCwgR19PUFRJT05fRkxBR19OT19BUkcsIEdfT1BUSU9OX0FSR19DQUxMQkFDSywKKyAgICAgICAgKGdwb2ludGVyKSBwYXJzZV9nb3B0aW9uX2FyZywgTl8oIkRpc2FibGUgZGVidWdnaW5nIiksIE5VTEx9LAorI2VuZGlmCisgICAgeyJnc3QtcGx1Z2luLXNwZXciLCAwLCBHX09QVElPTl9GTEFHX05PX0FSRywgR19PUFRJT05fQVJHX0NBTExCQUNLLAorICAgICAgICAgIChncG9pbnRlcikgcGFyc2VfZ29wdGlvbl9hcmcsCisgICAgICAgICAgTl8oIkVuYWJsZSB2ZXJib3NlIHBsdWdpbiBsb2FkaW5nIGRpYWdub3N0aWNzIiksCisgICAgICAgIE5VTEx9LAorICAgIHsiZ3N0LXBsdWdpbi1wYXRoIiwgMCwgMCwgR19PUFRJT05fQVJHX0NBTExCQUNLLAorICAgICAgICAgIChncG9pbnRlcikgcGFyc2VfZ29wdGlvbl9hcmcsCisgICAgICAgIE5fKCJDb2xvbi1zZXBhcmF0ZWQgcGF0aHMgY29udGFpbmluZyBwbHVnaW5zIiksIE5fKCJQQVRIUyIpfSwKKyAgICB7ImdzdC1wbHVnaW4tbG9hZCIsIDAsIDAsIEdfT1BUSU9OX0FSR19DQUxMQkFDSywKKyAgICAgICAgICAoZ3BvaW50ZXIpIHBhcnNlX2dvcHRpb25fYXJnLAorICAgICAgICAgIE5fKCJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwbHVnaW5zIHRvIHByZWxvYWQgaW4gYWRkaXRpb24gdG8gdGhlICIKKyAgICAgICAgICAgICAgImxpc3Qgc3RvcmVkIGluIGVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIpLAorICAgICAgICBOXygiUExVR0lOUyIpfSwKKyAgICB7ImdzdC1kaXNhYmxlLXNlZ3RyYXAiLCAwLCBHX09QVElPTl9GTEFHX05PX0FSRywgR19PUFRJT05fQVJHX0NBTExCQUNLLAorICAgICAgICAgIChncG9pbnRlcikgcGFyc2VfZ29wdGlvbl9hcmcsCisgICAgICAgICAgTl8oIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciKSwKKyAgICAgICAgTlVMTH0sCisgICAgeyJnc3QtZGlzYWJsZS1yZWdpc3RyeS11cGRhdGUiLCAwLCBHX09QVElPTl9GTEFHX05PX0FSRywKKyAgICAgICAgICBHX09QVElPTl9BUkdfQ0FMTEJBQ0ssCisgICAgICAgICAgKGdwb2ludGVyKSBwYXJzZV9nb3B0aW9uX2FyZywKKyAgICAgICAgICBOXygiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiKSwKKyAgICAgICAgTlVMTH0sCisgICAgeyJnc3QtZGlzYWJsZS1yZWdpc3RyeS1mb3JrIiwgMCwgR19PUFRJT05fRkxBR19OT19BUkcsCisgICAgICAgICAgR19PUFRJT05fQVJHX0NBTExCQUNLLAorICAgICAgICAgIChncG9pbnRlcikgcGFyc2VfZ29wdGlvbl9hcmcsCisgICAgICAgICAgTl8oIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiKSwKKyAgICAgICAgTlVMTH0sCisgICAge05VTEx9CisgIH07CisKKyAgLyogU2luY2UgR0xpYiAyLjIzLjIgY2FsbGluZyBnX3RocmVhZF9pbml0KCkgJ2xhdGUnIGlzIGFsbG93ZWQgYW5kIGlzCisgICAqIGF1dG9tYXRpY2FsbHkgZG9uZSBhcyBwYXJ0IG9mIGdfdHlwZV9pbml0KCkgKi8KKyAgaWYgKGdsaWJfY2hlY2tfdmVyc2lvbiAoMiwgMjMsIDMpKSB7CisgICAgLyogVGhlIEdMaWIgdGhyZWFkaW5nIHN5c3RlbSBtdXN0IGJlIGluaXRpYWxpc2VkIGJlZm9yZSBjYWxsaW5nIGFueSBvdGhlcgorICAgICAqIEdMaWIgZnVuY3Rpb24gYWNjb3JkaW5nIHRvIHRoZSBkb2N1bWVudGF0aW9uOyBpZiB0aGUgYXBwbGljYXRpb24gaGFzbid0CisgICAgICogY2FsbGVkIGdzdF9pbml0KCkgeWV0IG9yIGluaXRpYWxpc2VkIHRoZSB0aHJlYWRpbmcgc3lzdGVtIG90aGVyd2lzZSwgd2UKKyAgICAgKiBiZXR0ZXIgaXNzdWUgYSB3YXJuaW5nIGhlcmUgKHNpbmNlIGNoYW5jZXMgYXJlIGhpZ2ggdGhhdCB0aGUgYXBwbGljYXRpb24KKyAgICAgKiBoYXMgYWxyZWFkeSBjYWxsZWQgb3RoZXIgR0xpYiBmdW5jdGlvbnMgc3VjaCBhcyBnX29wdGlvbl9jb250ZXh0X25ldygpICovCisgICAgaWYgKCFnX3RocmVhZF9nZXRfaW5pdGlhbGl6ZWQgKCkpIHsKKyAgICAgIGdfd2FybmluZyAoIlRoZSBHU3RyZWFtZXIgZnVuY3Rpb24gZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCgpIHdhc1xuIgorICAgICAgICAgICJcdGNhbGxlZCwgYnV0IHRoZSBHTGliIHRocmVhZGluZyBzeXN0ZW0gaGFzIG5vdCBiZWVuIGluaXRpYWxpc2VkXG4iCisgICAgICAgICAgIlx0eWV0LCBzb21ldGhpbmcgdGhhdCBtdXN0IGhhcHBlbiBiZWZvcmUgYW55IG90aGVyIEdMaWIgZnVuY3Rpb25cbiIKKyAgICAgICAgICAiXHRpcyBjYWxsZWQuIFRoZSBhcHBsaWNhdGlvbiBuZWVkcyB0byBiZSBmaXhlZCBzbyB0aGF0IGl0IGNhbGxzXG4iCisgICAgICAgICAgIlx0ICAgaWYgKCFnX3RocmVhZF9nZXRfaW5pdGlhbGl6ZWQgKCkpIGdfdGhyZWFkX2luaXQoTlVMTCk7XG4iCisgICAgICAgICAgIlx0YXMgdmVyeSBmaXJzdCB0aGluZyBpbiBpdHMgbWFpbigpIGZ1bmN0aW9uLiBQbGVhc2UgZmlsZSBhIGJ1Z1xuIgorICAgICAgICAgICJcdGFnYWluc3QgdGhpcyBhcHBsaWNhdGlvbi4iKTsKKyAgICAgIGdfdGhyZWFkX2luaXQgKE5VTEwpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICAvKiBHTGliID49IDIuMjMuMiAqLworICB9CisKKyAgZ3JvdXAgPSBnX29wdGlvbl9ncm91cF9uZXcgKCJnc3QiLCBfKCJHU3RyZWFtZXIgT3B0aW9ucyIpLAorICAgICAgXygiU2hvdyBHU3RyZWFtZXIgT3B0aW9ucyIpLCBOVUxMLCBOVUxMKTsKKyAgZ19vcHRpb25fZ3JvdXBfc2V0X3BhcnNlX2hvb2tzIChncm91cCwgKEdPcHRpb25QYXJzZUZ1bmMpIGluaXRfcHJlLAorICAgICAgKEdPcHRpb25QYXJzZUZ1bmMpIGluaXRfcG9zdCk7CisKKyAgZ19vcHRpb25fZ3JvdXBfYWRkX2VudHJpZXMgKGdyb3VwLCBnc3RfYXJncyk7CisgIGdfb3B0aW9uX2dyb3VwX3NldF90cmFuc2xhdGlvbl9kb21haW4gKGdyb3VwLCBHRVRURVhUX1BBQ0tBR0UpOworCisgIHJldHVybiBncm91cDsKKyNlbHNlCisgIHJldHVybiBOVUxMOworI2VuZGlmCit9CisKKy8qKgorICogZ3N0X2luaXRfY2hlY2s6CisgKiBAYXJnYzogKGlub3V0KSAoYWxsb3ctbm9uZSk6IHBvaW50ZXIgdG8gYXBwbGljYXRpb24ncyBhcmdjCisgKiBAYXJndjogKGlub3V0KSAoYXJyYXkgbGVuZ3RoPWFyZ2MpIChhbGxvdy1ub25lKTogcG9pbnRlciB0byBhcHBsaWNhdGlvbidzIGFyZ3YKKyAqIEBlcnI6IHBvaW50ZXIgdG8gYSAjR0Vycm9yIHRvIHdoaWNoIGEgbWVzc2FnZSB3aWxsIGJlIHBvc3RlZCBvbiBlcnJvcgorICoKKyAqIEluaXRpYWxpemVzIHRoZSBHU3RyZWFtZXIgbGlicmFyeSwgc2V0dGluZyB1cCBpbnRlcm5hbCBwYXRoIGxpc3RzLAorICogcmVnaXN0ZXJpbmcgYnVpbHQtaW4gZWxlbWVudHMsIGFuZCBsb2FkaW5nIHN0YW5kYXJkIHBsdWdpbnMuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiAlRkFMU0UgaWYgR1N0cmVhbWVyIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZAorICogZm9yIHNvbWUgcmVhc29uLiAgSWYgeW91IHdhbnQgeW91ciBwcm9ncmFtIHRvIGZhaWwgZmF0YWxseSwKKyAqIHVzZSBnc3RfaW5pdCgpIGluc3RlYWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGFueSBvdGhlciBHTGliIGZ1bmN0aW9ucy4gSWYKKyAqIHRoaXMgaXMgbm90IGFuIG9wdGlvbiwgeW91ciBwcm9ncmFtIG11c3QgaW5pdGlhbGlzZSB0aGUgR0xpYiB0aHJlYWQgc3lzdGVtCisgKiB1c2luZyBnX3RocmVhZF9pbml0KCkgYmVmb3JlIGFueSBvdGhlciBHTGliIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIEdTdHJlYW1lciBjb3VsZCBiZSBpbml0aWFsaXplZC4KKyAqLworZ2Jvb2xlYW4KK2dzdF9pbml0X2NoZWNrIChpbnQgKmFyZ2MsIGNoYXIgKiphcmd2W10sIEdFcnJvciAqKiBlcnIpCit7CisjaWZuZGVmIEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HCisgIEdPcHRpb25Hcm91cCAqZ3JvdXA7CisgIEdPcHRpb25Db250ZXh0ICpjdHg7CisjZW5kaWYKKyAgZ2Jvb2xlYW4gcmVzOworCisgIGlmICghZ190aHJlYWRfZ2V0X2luaXRpYWxpemVkICgpKQorICAgIGdfdGhyZWFkX2luaXQgKE5VTEwpOworCisgIGlmIChnc3RfaW5pdGlhbGl6ZWQpIHsKKyAgICBHU1RfREVCVUcgKCJhbHJlYWR5IGluaXRpYWxpemVkIGdzdCIpOworICAgIHJldHVybiBUUlVFOworICB9CisjaWZuZGVmIEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HCisgIGN0eCA9IGdfb3B0aW9uX2NvbnRleHRfbmV3ICgiLSBHU3RyZWFtZXIgaW5pdGlhbGl6YXRpb24iKTsKKyAgZ19vcHRpb25fY29udGV4dF9zZXRfaWdub3JlX3Vua25vd25fb3B0aW9ucyAoY3R4LCBUUlVFKTsKKyAgZ3JvdXAgPSBnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwICgpOworICBnX29wdGlvbl9jb250ZXh0X2FkZF9ncm91cCAoY3R4LCBncm91cCk7CisgIHJlcyA9IGdfb3B0aW9uX2NvbnRleHRfcGFyc2UgKGN0eCwgYXJnYywgYXJndiwgZXJyKTsKKyAgZ19vcHRpb25fY29udGV4dF9mcmVlIChjdHgpOworI2Vsc2UKKyAgaW5pdF9wcmUgKE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworICBpbml0X3Bvc3QgKE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworICByZXMgPSBUUlVFOworI2VuZGlmCisKKyAgZ3N0X2luaXRpYWxpemVkID0gcmVzOworCisgIGlmIChyZXMpIHsKKyAgICBHU1RfSU5GTyAoImluaXRpYWxpemVkIEdTdHJlYW1lciBzdWNjZXNzZnVsbHkiKTsKKyAgfSBlbHNlIHsKKyAgICBHU1RfSU5GTyAoImZhaWxlZCB0byBpbml0aWFsaXplIEdTdHJlYW1lciIpOworICB9CisKKyAgcmV0dXJuIHJlczsKK30KKworLyoqCisgKiBnc3RfaW5pdDoKKyAqIEBhcmdjOiAoaW5vdXQpIChhbGxvdy1ub25lKTogcG9pbnRlciB0byBhcHBsaWNhdGlvbidzIGFyZ2MKKyAqIEBhcmd2OiAoaW5vdXQpIChhcnJheSBsZW5ndGg9YXJnYykgKGFsbG93LW5vbmUpOiBwb2ludGVyIHRvIGFwcGxpY2F0aW9uJ3MgYXJndgorICoKKyAqIEluaXRpYWxpemVzIHRoZSBHU3RyZWFtZXIgbGlicmFyeSwgc2V0dGluZyB1cCBpbnRlcm5hbCBwYXRoIGxpc3RzLAorICogcmVnaXN0ZXJpbmcgYnVpbHQtaW4gZWxlbWVudHMsIGFuZCBsb2FkaW5nIHN0YW5kYXJkIHBsdWdpbnMuCisgKgorICogVW5sZXNzIHRoZSBwbHVnaW4gcmVnaXN0cnkgaXMgZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lLCB0aGUgcmVnaXN0cnkgd2lsbCBiZQorICogbG9hZGVkLiBCeSBkZWZhdWx0IHRoaXMgd2lsbCBhbHNvIGNoZWNrIGlmIHRoZSByZWdpc3RyeSBjYWNoZSBuZWVkcyB0byBiZQorICogdXBkYXRlZCBhbmQgcmVzY2FuIGFsbCBwbHVnaW5zIGlmIG5lZWRlZC4gU2VlIGdzdF91cGRhdGVfcmVnaXN0cnkoKSBmb3IKKyAqIGRldGFpbHMgYW5kIHNlY3Rpb24KKyAqIDxsaW5rIGxpbmtlbmQ9ImdzdC1ydW5uaW5nIj5SdW5uaW5nIEdTdHJlYW1lciBBcHBsaWNhdGlvbnM8L2xpbms+CisgKiBmb3IgaG93IHRvIGRpc2FibGUgYXV0b21hdGljIHJlZ2lzdHJ5IHVwZGF0ZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGFueSBvdGhlciBHTGliIGZ1bmN0aW9ucy4gSWYKKyAqIHRoaXMgaXMgbm90IGFuIG9wdGlvbiwgeW91ciBwcm9ncmFtIG11c3QgaW5pdGlhbGlzZSB0aGUgR0xpYiB0aHJlYWQgc3lzdGVtCisgKiB1c2luZyBnX3RocmVhZF9pbml0KCkgYmVmb3JlIGFueSBvdGhlciBHTGliIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLgorICoKKyAqIDxub3RlPjxwYXJhPgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHRlcm1pbmF0ZSB5b3VyIHByb2dyYW0gaWYgaXQgd2FzIHVuYWJsZSB0byBpbml0aWFsaXplCisgKiBHU3RyZWFtZXIgZm9yIHNvbWUgcmVhc29uLiAgSWYgeW91IHdhbnQgeW91ciBwcm9ncmFtIHRvIGZhbGwgYmFjaywKKyAqIHVzZSBnc3RfaW5pdF9jaGVjaygpIGluc3RlYWQuCisgKiA8L3BhcmE+PC9ub3RlPgorICoKKyAqIFdBUk5JTkc6IFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgd29yayBpbiB0aGUgc2FtZSB3YXkgYXMgY29ycmVzcG9uZGluZworICogZnVuY3Rpb25zIGluIG90aGVyIGdsaWItc3R5bGUgbGlicmFyaWVzLCBzdWNoIGFzIGd0a19pbml0KCkuICBJbgorICogcGFydGljdWxhciwgdW5rbm93biBjb21tYW5kIGxpbmUgb3B0aW9ucyBjYXVzZSB0aGlzIGZ1bmN0aW9uIHRvCisgKiBhYm9ydCBwcm9ncmFtIGV4ZWN1dGlvbi4KKyAqLwordm9pZAorZ3N0X2luaXQgKGludCAqYXJnYywgY2hhciAqKmFyZ3ZbXSkKK3sKKyAgR0Vycm9yICplcnIgPSBOVUxMOworCisgIGlmICghZ3N0X2luaXRfY2hlY2sgKGFyZ2MsIGFyZ3YsICZlcnIpKSB7CisgICAgZ19wcmludCAoIkNvdWxkIG5vdCBpbml0aWFsaXplIEdTdHJlYW1lcjogJXNcbiIsCisgICAgICAgIGVyciA/IGVyci0+bWVzc2FnZSA6ICJ1bmtub3duIGVycm9yIG9jY3VycmVkIik7CisgICAgaWYgKGVycikgeworICAgICAgZ19lcnJvcl9mcmVlIChlcnIpOworICAgIH0KKyAgICBleGl0ICgxKTsKKyAgfQorfQorCisvKioKKyAqIGdzdF9pc19pbml0aWFsaXplZDoKKyAqCisgKiBVc2UgdGhpcyBmdW5jdGlvbiB0byBjaGVjayBpZiBHU3RyZWFtZXIgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBnc3RfaW5pdCgpCisgKiBvciBnc3RfaW5pdF9jaGVjaygpLgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgaW5pdGlhbGl6YXRpb24gaGFzIGJlZW4gZG9uZSwgRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIFNpbmNlOiAwLjEwLjMxCisgKi8KK2dib29sZWFuCitnc3RfaXNfaW5pdGlhbGl6ZWQgKHZvaWQpCit7CisgIHJldHVybiBnc3RfaW5pdGlhbGl6ZWQ7Cit9CisKKyNpZm5kZWYgR1NUX0RJU0FCTEVfUkVHSVNUUlkKK3N0YXRpYyB2b2lkCithZGRfcGF0aF9mdW5jIChncG9pbnRlciBkYXRhLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIEdTVF9JTkZPICgiQWRkaW5nIHBsdWdpbiBwYXRoOiBcIiVzXCIsIHdpbGwgc2NhbiBsYXRlciIsIChnY2hhciAqKSBkYXRhKTsKKyAgX3ByaXZfZ3N0X3BsdWdpbl9wYXRocyA9CisgICAgICBnX2xpc3RfYXBwZW5kIChfcHJpdl9nc3RfcGx1Z2luX3BhdGhzLCBnX3N0cmR1cCAoZGF0YSkpOworfQorI2VuZGlmCisKKyNpZm5kZWYgR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkcKK3N0YXRpYyB2b2lkCitwcmVwYXJlX2Zvcl9sb2FkX3BsdWdpbl9mdW5jIChncG9pbnRlciBkYXRhLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIF9wcml2X2dzdF9wcmVsb2FkX3BsdWdpbnMgPQorICAgICAgZ19zbGlzdF9wcmVwZW5kIChfcHJpdl9nc3RfcHJlbG9hZF9wbHVnaW5zLCBnX3N0cmR1cCAoZGF0YSkpOworfQorI2VuZGlmCisKKyNpZm5kZWYgR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkcKK3N0YXRpYyB2b2lkCitzcGxpdF9hbmRfaXRlcmF0ZSAoY29uc3QgZ2NoYXIgKiBzdHJpbmdsaXN0LCBjb25zdCBnY2hhciAqIHNlcGFyYXRvciwKKyAgICBHRnVuYyBpdGVyYXRvciwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBnY2hhciAqKnN0cmluZ3M7CisgIGdpbnQgaiA9IDA7CisgIGdjaGFyICpsYXN0bGlzdCA9IGdfc3RyZHVwIChzdHJpbmdsaXN0KTsKKworICB3aGlsZSAobGFzdGxpc3QpIHsKKyAgICBzdHJpbmdzID0gZ19zdHJzcGxpdCAobGFzdGxpc3QsIHNlcGFyYXRvciwgTUFYX1BBVEhfU1BMSVQpOworICAgIGdfZnJlZSAobGFzdGxpc3QpOworICAgIGxhc3RsaXN0ID0gTlVMTDsKKworICAgIHdoaWxlIChzdHJpbmdzW2pdKSB7CisgICAgICBpdGVyYXRvciAoc3RyaW5nc1tqXSwgdXNlcl9kYXRhKTsKKyAgICAgIGlmICgrK2ogPT0gTUFYX1BBVEhfU1BMSVQpIHsKKyAgICAgICAgbGFzdGxpc3QgPSBnX3N0cmR1cCAoc3RyaW5nc1tqXSk7CisgICAgICAgIGogPSAwOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgZ19zdHJmcmVldiAoc3RyaW5ncyk7CisgIH0KK30KKyNlbmRpZgorCisvKiB3ZSBoYXZlIG5vIGZhaWwgY2FzZXMgeWV0LCBidXQgbWF5YmUgaW4gdGhlIGZ1dHVyZSAqLworc3RhdGljIGdib29sZWFuCitpbml0X3ByZSAoR09wdGlvbkNvbnRleHQgKiBjb250ZXh0LCBHT3B0aW9uR3JvdXAgKiBncm91cCwgZ3BvaW50ZXIgZGF0YSwKKyAgICBHRXJyb3IgKiogZXJyb3IpCit7CisgIGlmIChnc3RfaW5pdGlhbGl6ZWQpIHsKKyAgICBHU1RfREVCVUcgKCJhbHJlYWR5IGluaXRpYWxpemVkIik7CisgICAgcmV0dXJuIFRSVUU7CisgIH0KKworICBnX3R5cGVfaW5pdCAoKTsKKworICAvKiB3ZSBuZWVkIHRocmVhZGluZyB0byBiZSBlbmFibGVkIHJpZ2h0IGhlcmUgKi8KKyAgZ19hc3NlcnQgKGdfdGhyZWFkX2dldF9pbml0aWFsaXplZCAoKSk7CisKKyAgX2dzdF9kZWJ1Z19pbml0ICgpOworCisjaWZkZWYgRU5BQkxFX05MUworICBzZXRsb2NhbGUgKExDX0FMTCwgIiIpOworICBiaW5kdGV4dGRvbWFpbiAoR0VUVEVYVF9QQUNLQUdFLCBMT0NBTEVESVIpOworICBiaW5kX3RleHRkb21haW5fY29kZXNldCAoR0VUVEVYVF9QQUNLQUdFLCAiVVRGLTgiKTsKKyNlbmRpZiAvKiBFTkFCTEVfTkxTICovCisKKyNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCisgIHsKKyAgICBjb25zdCBnY2hhciAqZGVidWdfbGlzdDsKKworICAgIGlmIChnX2dldGVudiAoIkdTVF9ERUJVR19OT19DT0xPUiIpICE9IE5VTEwpCisgICAgICBnc3RfZGVidWdfc2V0X2NvbG9yZWQgKEZBTFNFKTsKKworICAgIGRlYnVnX2xpc3QgPSBnX2dldGVudiAoIkdTVF9ERUJVRyIpOworICAgIGlmIChkZWJ1Z19saXN0KSB7CisgICAgICBwYXJzZV9kZWJ1Z19saXN0IChkZWJ1Z19saXN0KTsKKyAgICB9CisgIH0KKworICBwcml2X2dzdF9kdW1wX2RvdF9kaXIgPSBnX2dldGVudiAoIkdTVF9ERUJVR19EVU1QX0RPVF9ESVIiKTsKKyNlbmRpZgorICAvKiBUaGlzIGlzIHRoZSBlYXJsaWVzdCB3ZSBjYW4gbWFrZSBzdHVmZiBzaG93IHVwIGluIHRoZSBsb2dzLgorICAgKiBTbyBnaXZlIHNvbWUgdXNlZnVsIGluZm8gYWJvdXQgR1N0cmVhbWVyIGhlcmUgKi8KKyAgR1NUX0lORk8gKCJJbml0aWFsaXppbmcgR1N0cmVhbWVyIENvcmUgTGlicmFyeSB2ZXJzaW9uICVzIiwgVkVSU0lPTik7CisgIEdTVF9JTkZPICgiVXNpbmcgbGlicmFyeSBpbnN0YWxsZWQgaW4gJXMiLCBMSUJESVIpOworCisgIC8qIFByaW50IHNvbWUgYmFzaWMgc3lzdGVtIGRldGFpbHMgaWYgcG9zc2libGUgKE9TL2FyY2hpdGVjdHVyZSkgKi8KKyNpZmRlZiBIQVZFX1NZU19VVFNOQU1FX0gKKyAgeworICAgIHN0cnVjdCB1dHNuYW1lIHN5c19kZXRhaWxzOworCisgICAgaWYgKHVuYW1lICgmc3lzX2RldGFpbHMpID09IDApIHsKKyAgICAgIEdTVF9JTkZPICgiJXMgJXMgJXMgJXMgJXMiLCBzeXNfZGV0YWlscy5zeXNuYW1lLAorICAgICAgICAgIHN5c19kZXRhaWxzLm5vZGVuYW1lLCBzeXNfZGV0YWlscy5yZWxlYXNlLCBzeXNfZGV0YWlscy52ZXJzaW9uLAorICAgICAgICAgIHN5c19kZXRhaWxzLm1hY2hpbmUpOworICAgIH0KKyAgfQorI2VuZGlmCisKKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3JlZ2lzdGVyX2NvcmVfZWxlbWVudHMgKEdzdFBsdWdpbiAqIHBsdWdpbikKK3sKKyAgLyogcmVnaXN0ZXIgc29tZSBzdGFuZGFyZCBidWlsdGluIHR5cGVzICovCisgIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImJpbiIsIEdTVF9SQU5LX1BSSU1BUlksCisgICAgICAgICAgR1NUX1RZUEVfQklOKSB8fAorICAgICAgIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJwaXBlbGluZSIsIEdTVF9SQU5LX1BSSU1BUlksCisgICAgICAgICAgR1NUX1RZUEVfUElQRUxJTkUpCisgICAgICApCisgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgKiB0aGlzIGJpdCBoYW5kbGVzOgorICogLSBpbml0YWxpemF0aW9uIG9mIHRocmVhZHMgaWYgd2UgdXNlIHRoZW0KKyAqIC0gbG9nIGhhbmRsZXIKKyAqIC0gaW5pdGlhbCBvdXRwdXQKKyAqIC0gaW5pdGlhbGl6ZXMgZ3N0X2Zvcm1hdAorICogLSByZWdpc3RlcnMgYSBidW5jaCBvZiB0eXBlcyBmb3IgZ3N0X29iamVjdHMKKyAqCisgKiAtIHdlIGRvbid0IGhhdmUgY2FzZXMgeWV0IHdoZXJlIHRoaXMgZmFpbHMsIGJ1dCBpbiB0aGUgZnV0dXJlCisgKiAgIHdlIG1pZ2h0IGFuZCB0aGVuIGl0J3MgbmljZSB0byBiZSBhYmxlIHRvIHJldHVybiB0aGF0CisgKi8KK3N0YXRpYyBnYm9vbGVhbgoraW5pdF9wb3N0IChHT3B0aW9uQ29udGV4dCAqIGNvbnRleHQsIEdPcHRpb25Hcm91cCAqIGdyb3VwLCBncG9pbnRlciBkYXRhLAorICAgIEdFcnJvciAqKiBlcnJvcikKK3sKKyAgR0xvZ0xldmVsRmxhZ3MgbGxmOworCisjaWZuZGVmIEdTVF9ESVNBQkxFX1RSQUNFCisgIEdzdFRyYWNlICpnc3RfdHJhY2U7CisjZW5kaWYgLyogR1NUX0RJU0FCTEVfVFJBQ0UgKi8KKworICBpZiAoZ3N0X2luaXRpYWxpemVkKSB7CisgICAgR1NUX0RFQlVHICgiYWxyZWFkeSBpbml0aWFsaXplZCIpOworICAgIHJldHVybiBUUlVFOworICB9CisKKyAgbGxmID0gR19MT0dfTEVWRUxfQ1JJVElDQUwgfCBHX0xPR19MRVZFTF9FUlJPUiB8IEdfTE9HX0ZMQUdfRkFUQUw7CisgIGdfbG9nX3NldF9oYW5kbGVyIChnX2xvZ19kb21haW5fZ3N0cmVhbWVyLCBsbGYsIGRlYnVnX2xvZ19oYW5kbGVyLCBOVUxMKTsKKworICBfcHJpdl9nc3RfcXVhcmtzX2luaXRpYWxpemUgKCk7CisgIF9wcml2X2dzdF9tZW1vcnlfaW5pdGlhbGl6ZSAoKTsKKyAgX3ByaXZfZ3N0X2Zvcm1hdF9pbml0aWFsaXplICgpOworICBfcHJpdl9nc3RfcXVlcnlfaW5pdGlhbGl6ZSAoKTsKKyAgX3ByaXZfZ3N0X3N0cnVjdHVyZV9pbml0aWFsaXplICgpOworICBfcHJpdl9nc3RfY2Fwc19pbml0aWFsaXplICgpOworICBfcHJpdl9nc3RfbWV0YV9pbml0aWFsaXplICgpOworCisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9vYmplY3RfZ2V0X3R5cGUgKCkpOworICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfcGFkX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9lbGVtZW50X2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2Jpbl9nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9idXNfZ2V0X3R5cGUgKCkpOworICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfdGFza19nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9jbG9ja19nZXRfdHlwZSAoKSk7CisKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2luZGV4X2ZhY3RvcnlfZ2V0X3R5cGUgKCkpOworICBnc3RfdXJpX2hhbmRsZXJfZ2V0X3R5cGUgKCk7CisKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X29iamVjdF9mbGFnc19nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9iaW5fZmxhZ3NfZ2V0X3R5cGUgKCkpOworICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfYnVmZmVyX2ZsYWdzX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2J1ZmZlcl9jb3B5X2ZsYWdzX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2J1c19mbGFnc19nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9idXNfc3luY19yZXBseV9nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9jYXBzX2ZsYWdzX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2Nsb2NrX3JldHVybl9nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9jbG9ja19lbnRyeV90eXBlX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2Nsb2NrX2ZsYWdzX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2Nsb2NrX3R5cGVfZ2V0X3R5cGUgKCkpOworICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfZGVidWdfZ3JhcGhfZGV0YWlsc19nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9zdGF0ZV9nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9zdGF0ZV9jaGFuZ2VfcmV0dXJuX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3N0YXRlX2NoYW5nZV9nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9lbGVtZW50X2ZsYWdzX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2NvcmVfZXJyb3JfZ2V0X3R5cGUgKCkpOworICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfbGlicmFyeV9lcnJvcl9nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9yZXNvdXJjZV9lcnJvcl9nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9zdHJlYW1fZXJyb3JfZ2V0X3R5cGUgKCkpOworICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfZXZlbnRfdHlwZV9mbGFnc19nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9ldmVudF90eXBlX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3NlZWtfdHlwZV9nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9zZWVrX2ZsYWdzX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3Fvc190eXBlX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2Zvcm1hdF9nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9pbmRleF9jZXJ0YWludHlfZ2V0X3R5cGUgKCkpOworICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfaW5kZXhfZW50cnlfdHlwZV9nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9pbmRleF9sb29rdXBfbWV0aG9kX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2Fzc29jX2ZsYWdzX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2luZGV4X3Jlc29sdmVyX21ldGhvZF9nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9pbmRleF9mbGFnc19nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9kZWJ1Z19sZXZlbF9nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9kZWJ1Z19jb2xvcl9mbGFnc19nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9pdGVyYXRvcl9yZXN1bHRfZ2V0X3R5cGUgKCkpOworICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfaXRlcmF0b3JfaXRlbV9nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9tZXNzYWdlX3R5cGVfZ2V0X3R5cGUgKCkpOworICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfbWluaV9vYmplY3RfZmxhZ3NfZ2V0X3R5cGUgKCkpOworICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfcGFkX2xpbmtfcmV0dXJuX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3BhZF9saW5rX2NoZWNrX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2Zsb3dfcmV0dXJuX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2FjdGl2YXRlX21vZGVfZ2V0X3R5cGUgKCkpOworICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfcGFkX2RpcmVjdGlvbl9nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9wYWRfZmxhZ3NfZ2V0X3R5cGUgKCkpOworICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfcGFkX3ByZXNlbmNlX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3BhZF90ZW1wbGF0ZV9mbGFnc19nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9waXBlbGluZV9mbGFnc19nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9wbHVnaW5fZXJyb3JfZ2V0X3R5cGUgKCkpOworICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfcGx1Z2luX2ZsYWdzX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3BsdWdpbl9kZXBlbmRlbmN5X2ZsYWdzX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3JhbmtfZ2V0X3R5cGUgKCkpOworICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfcXVlcnlfdHlwZV9nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9idWZmZXJpbmdfbW9kZV9nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9zdHJlYW1fc3RhdHVzX3R5cGVfZ2V0X3R5cGUgKCkpOworICBnX3R5cGVfY2xhc3NfcmVmIChnc3Rfc3RydWN0dXJlX2NoYW5nZV90eXBlX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3RhZ19tZXJnZV9tb2RlX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3RhZ19mbGFnX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3Rhc2tfcG9vbF9nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF90YXNrX3N0YXRlX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2FsbG9jX3RyYWNlX2ZsYWdzX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3R5cGVfZmluZF9wcm9iYWJpbGl0eV9nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF91cmlfdHlwZV9nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9wYXJzZV9lcnJvcl9nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9wYXJzZV9mbGFnc19nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9zZWFyY2hfbW9kZV9nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9wcm9ncmVzc190eXBlX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2J1ZmZlcl9wb29sX2ZsYWdzX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X21lbW9yeV9mbGFnc19nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9tYXBfZmxhZ3NfZ2V0X3R5cGUgKCkpOworICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfY2Fwc19pbnRlcnNlY3RfbW9kZV9nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9wcm9iZV90eXBlX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3Byb2JlX3JldHVybl9nZXRfdHlwZSAoKSk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9zZWdtZW50X2ZsYWdzX2dldF90eXBlICgpKTsKKworICBfcHJpdl9nc3RfZXZlbnRfaW5pdGlhbGl6ZSAoKTsKKyAgX3ByaXZfZ3N0X2J1ZmZlcl9pbml0aWFsaXplICgpOworICBfcHJpdl9nc3RfbWVzc2FnZV9pbml0aWFsaXplICgpOworICBfcHJpdl9nc3RfYnVmZmVyX2xpc3RfaW5pdGlhbGl6ZSAoKTsKKyAgX3ByaXZfZ3N0X3ZhbHVlX2luaXRpYWxpemUgKCk7CisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9wYXJhbV9zcGVjX2ZyYWN0aW9uX2dldF90eXBlICgpKTsKKyAgX3ByaXZfZ3N0X3RhZ19pbml0aWFsaXplICgpOworICBnc3RfcGFyc2VfY29udGV4dF9nZXRfdHlwZSAoKTsKKworICBfcHJpdl9nc3RfcGx1Z2luX2luaXRpYWxpemUgKCk7CisKKyAgZ3N0X2dfZXJyb3JfZ2V0X3R5cGUgKCk7CisKKyAgLyogcmVnaXN0ZXIgY29yZSBwbHVnaW5zICovCisgIGdzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljIChHU1RfVkVSU0lPTl9NQUpPUiwgR1NUX1ZFUlNJT05fTUlOT1IsCisgICAgICAic3RhdGljZWxlbWVudHMiLCAiY29yZSBlbGVtZW50cyBsaW5rZWQgaW50byB0aGUgR1N0cmVhbWVyIGxpYnJhcnkiLAorICAgICAgZ3N0X3JlZ2lzdGVyX2NvcmVfZWxlbWVudHMsIFZFUlNJT04sIEdTVF9MSUNFTlNFLCBQQUNLQUdFLAorICAgICAgR1NUX1BBQ0tBR0VfTkFNRSwgR1NUX1BBQ0tBR0VfT1JJR0lOKTsKKworICAvKgorICAgKiBBbnkgZXJyb3JzIGhhcHBlbmluZyBiZWxvdyB0aGlzIHBvaW50IGFyZSBub24tZmF0YWwsIHdlIHRoZXJlZm9yZSBtYXJrCisgICAqIGdzdHJlYW1lciBhcyBiZWluZyBpbml0aWFsaXplZCwgc2luY2UgaXQgaXMgdGhlIGNhc2UgZnJvbSBhIHBsdWdpbiBwb2ludCBvZgorICAgKiB2aWV3LgorICAgKgorICAgKiBJZiBhbnl0aGluZyBmYWlscywgaXQgd2lsbCBiZSBwdXQgYmFjayB0byBGQUxTRSBpbiBnc3RfaW5pdF9jaGVjaygpLgorICAgKiBUaGlzIGFsbG93cyBzb21lIHNwZWNpYWwgcGx1Z2lucyB0aGF0IHdvdWxkIGNhbGwgZ3N0X2luaXQoKSB0byBub3QgY2F1c2UgYQorICAgKiBsb29waW5nIGVmZmVjdCAoaS5lLiBpbml0aWFsaXppbmcgR1N0cmVhbWVyIHR3aWNlKS4KKyAgICovCisgIGdzdF9pbml0aWFsaXplZCA9IFRSVUU7CisKKyAgaWYgKCFnc3RfdXBkYXRlX3JlZ2lzdHJ5ICgpKQorICAgIHJldHVybiBGQUxTRTsKKworI2lmbmRlZiBHU1RfRElTQUJMRV9UUkFDRQorICBfZ3N0X3RyYWNlX29uID0gMDsKKyAgaWYgKF9nc3RfdHJhY2Vfb24pIHsKKyAgICBnc3RfdHJhY2UgPSBnc3RfdHJhY2VfbmV3ICgiZ3N0LnRyYWNlIiwgMTAyNCk7CisgICAgZ3N0X3RyYWNlX3NldF9kZWZhdWx0IChnc3RfdHJhY2UpOworICB9CisjZW5kaWYgLyogR1NUX0RJU0FCTEVfVFJBQ0UgKi8KKworICBHU1RfSU5GTyAoIkdMaWIgcnVudGltZSB2ZXJzaW9uOiAlZC4lZC4lZCIsIGdsaWJfbWFqb3JfdmVyc2lvbiwKKyAgICAgIGdsaWJfbWlub3JfdmVyc2lvbiwgZ2xpYl9taWNyb192ZXJzaW9uKTsKKyAgR1NUX0lORk8gKCJHTGliIGhlYWRlcnMgdmVyc2lvbjogJWQuJWQuJWQiLCBHTElCX01BSk9SX1ZFUlNJT04sCisgICAgICBHTElCX01JTk9SX1ZFUlNJT04sIEdMSUJfTUlDUk9fVkVSU0lPTik7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKyNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCitzdGF0aWMgZ2Jvb2xlYW4KK3NlbGVjdF9hbGwgKEdzdFBsdWdpbiAqIHBsdWdpbiwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdpbnQKK3NvcnRfYnlfY2F0ZWdvcnlfbmFtZSAoZ2NvbnN0cG9pbnRlciBhLCBnY29uc3Rwb2ludGVyIGIpCit7CisgIHJldHVybiBzdHJjbXAgKGdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfbmFtZSAoKEdzdERlYnVnQ2F0ZWdvcnkgKikgYSksCisgICAgICBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X25hbWUgKChHc3REZWJ1Z0NhdGVnb3J5ICopIGIpKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9kZWJ1Z19oZWxwICh2b2lkKQoreworICBHU0xpc3QgKmxpc3QsICp3YWxrOworICBHTGlzdCAqbGlzdDIsICpnOworCisgIC8qIE5lZWQgdG8gZW5zdXJlIHRoZSByZWdpc3RyeSBpcyBsb2FkZWQgdG8gZ2V0IGRlYnVnIGNhdGVnb3JpZXMgKi8KKyAgaWYgKCFpbml0X3Bvc3QgKE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpKQorICAgIGV4aXQgKDEpOworCisgIGxpc3QyID0gZ3N0X3JlZ2lzdHJ5X3BsdWdpbl9maWx0ZXIgKGdzdF9yZWdpc3RyeV9nZXRfZGVmYXVsdCAoKSwKKyAgICAgIHNlbGVjdF9hbGwsIEZBTFNFLCBOVUxMKTsKKworICAvKiBGSVhNRSB0aGlzIGlzIGdyb3NzLiAgd2h5IGRvbid0IGRlYnVnIGhhdmUgY2F0ZWdvcmllcyBQbHVnaW5GZWF0dXJlcz8gKi8KKyAgZm9yIChnID0gbGlzdDI7IGc7IGcgPSBnX2xpc3RfbmV4dCAoZykpIHsKKyAgICBHc3RQbHVnaW4gKnBsdWdpbiA9IEdTVF9QTFVHSU5fQ0FTVCAoZy0+ZGF0YSk7CisKKyAgICBnc3RfcGx1Z2luX2xvYWQgKHBsdWdpbik7CisgIH0KKyAgZ19saXN0X2ZyZWUgKGxpc3QyKTsKKworICBsaXN0ID0gZ3N0X2RlYnVnX2dldF9hbGxfY2F0ZWdvcmllcyAoKTsKKyAgd2FsayA9IGxpc3QgPSBnX3NsaXN0X3NvcnQgKGxpc3QsIHNvcnRfYnlfY2F0ZWdvcnlfbmFtZSk7CisKKyAgZ19wcmludCAoIlxuIik7CisgIGdfcHJpbnQgKCJuYW1lICAgICAgICAgICAgICAgICAgbGV2ZWwgICAgZGVzY3JpcHRpb25cbiIpOworICBnX3ByaW50ICgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKworICB3aGlsZSAod2FsaykgeworICAgIEdzdERlYnVnQ2F0ZWdvcnkgKmNhdCA9IChHc3REZWJ1Z0NhdGVnb3J5ICopIHdhbGstPmRhdGE7CisKKyAgICBpZiAoZ3N0X2RlYnVnX2lzX2NvbG9yZWQgKCkpIHsKKyNpZmRlZiBHX09TX1dJTjMyCisgICAgICBnaW50IGNvbG9yID0gZ3N0X2RlYnVnX2NvbnN0cnVjdF93aW5fY29sb3IgKGNhdC0+Y29sb3IpOworICAgICAgY29uc3QgZ2ludCBjbGVhciA9IEZPUkVHUk9VTkRfUkVEIHwgRk9SRUdST1VORF9HUkVFTiB8IEZPUkVHUk9VTkRfQkxVRTsKKworICAgICAgU2V0Q29uc29sZVRleHRBdHRyaWJ1dGUgKEdldFN0ZEhhbmRsZSAoU1REX09VVFBVVF9IQU5ETEUpLCBjb2xvcik7CisgICAgICBnX3ByaW50ICgiJS0yMHMiLCBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X25hbWUgKGNhdCkpOworICAgICAgU2V0Q29uc29sZVRleHRBdHRyaWJ1dGUgKEdldFN0ZEhhbmRsZSAoU1REX09VVFBVVF9IQU5ETEUpLCBjbGVhcik7CisgICAgICBnX3ByaW50ICgiICUxZCAlcyAiLCBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZCAoY2F0KSwKKyAgICAgICAgICBnc3RfZGVidWdfbGV2ZWxfZ2V0X25hbWUgKGdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfdGhyZXNob2xkIChjYXQpKSk7CisgICAgICBTZXRDb25zb2xlVGV4dEF0dHJpYnV0ZSAoR2V0U3RkSGFuZGxlIChTVERfT1VUUFVUX0hBTkRMRSksIGNvbG9yKTsKKyAgICAgIGdfcHJpbnQgKCIlcyIsIGdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfZGVzY3JpcHRpb24gKGNhdCkpOworICAgICAgU2V0Q29uc29sZVRleHRBdHRyaWJ1dGUgKEdldFN0ZEhhbmRsZSAoU1REX09VVFBVVF9IQU5ETEUpLCBjbGVhcik7CisgICAgICBnX3ByaW50ICgiXG4iKTsKKyNlbHNlIC8qIEdfT1NfV0lOMzIgKi8KKyAgICAgIGdjaGFyICpjb2xvciA9IGdzdF9kZWJ1Z19jb25zdHJ1Y3RfdGVybV9jb2xvciAoY2F0LT5jb2xvcik7CisKKyAgICAgIGdfcHJpbnQgKCIlcyUtMjBzXDAzM1swMG0gICUxZCAlcyAgJXMlc1wwMzNbMDBtXG4iLAorICAgICAgICAgIGNvbG9yLAorICAgICAgICAgIGdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfbmFtZSAoY2F0KSwKKyAgICAgICAgICBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZCAoY2F0KSwKKyAgICAgICAgICBnc3RfZGVidWdfbGV2ZWxfZ2V0X25hbWUgKGdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfdGhyZXNob2xkIChjYXQpKSwKKyAgICAgICAgICBjb2xvciwgZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9kZXNjcmlwdGlvbiAoY2F0KSk7CisgICAgICBnX2ZyZWUgKGNvbG9yKTsKKyNlbmRpZiAvKiBHX09TX1dJTjMyICovCisgICAgfSBlbHNlIHsKKyAgICAgIGdfcHJpbnQgKCIlLTIwcyAgJTFkICVzICAlc1xuIiwgZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9uYW1lIChjYXQpLAorICAgICAgICAgIGdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfdGhyZXNob2xkIChjYXQpLAorICAgICAgICAgIGdzdF9kZWJ1Z19sZXZlbF9nZXRfbmFtZSAoZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF90aHJlc2hvbGQgKGNhdCkpLAorICAgICAgICAgIGdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfZGVzY3JpcHRpb24gKGNhdCkpOworICAgIH0KKyAgICB3YWxrID0gZ19zbGlzdF9uZXh0ICh3YWxrKTsKKyAgfQorICBnX3NsaXN0X2ZyZWUgKGxpc3QpOworICBnX3ByaW50ICgiXG4iKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HCitzdGF0aWMgZ2Jvb2xlYW4KK3BhcnNlX29uZV9vcHRpb24gKGdpbnQgb3B0LCBjb25zdCBnY2hhciAqIGFyZywgR0Vycm9yICoqIGVycikKK3sKKyAgc3dpdGNoIChvcHQpIHsKKyAgICBjYXNlIEFSR19WRVJTSU9OOgorICAgICAgZ19wcmludCAoIkdTdHJlYW1lciBDb3JlIExpYnJhcnkgdmVyc2lvbiAlc1xuIiwgUEFDS0FHRV9WRVJTSU9OKTsKKyAgICAgIGV4aXQgKDApOworICAgIGNhc2UgQVJHX0ZBVEFMX1dBUk5JTkdTOnsKKyAgICAgIEdMb2dMZXZlbEZsYWdzIGZhdGFsX21hc2s7CisKKyAgICAgIGZhdGFsX21hc2sgPSBnX2xvZ19zZXRfYWx3YXlzX2ZhdGFsIChHX0xPR19GQVRBTF9NQVNLKTsKKyAgICAgIGZhdGFsX21hc2sgfD0gR19MT0dfTEVWRUxfV0FSTklORyB8IEdfTE9HX0xFVkVMX0NSSVRJQ0FMOworICAgICAgZ19sb2dfc2V0X2Fsd2F5c19mYXRhbCAoZmF0YWxfbWFzayk7CisgICAgICBicmVhazsKKyAgICB9CisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICAgIGNhc2UgQVJHX0RFQlVHX0xFVkVMOnsKKyAgICAgIEdzdERlYnVnTGV2ZWwgdG1wID0gR1NUX0xFVkVMX05PTkU7CisKKyAgICAgIHRtcCA9IChHc3REZWJ1Z0xldmVsKSBzdHJ0b2wgKGFyZywgTlVMTCwgMCk7CisgICAgICBpZiAodG1wID49IDAgJiYgdG1wIDwgR1NUX0xFVkVMX0NPVU5UKSB7CisgICAgICAgIGdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGQgKHRtcCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBUkdfREVCVUc6CisgICAgICBwYXJzZV9kZWJ1Z19saXN0IChhcmcpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBBUkdfREVCVUdfTk9fQ09MT1I6CisgICAgICBnc3RfZGVidWdfc2V0X2NvbG9yZWQgKEZBTFNFKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQVJHX0RFQlVHX0RJU0FCTEU6CisgICAgICBnc3RfZGVidWdfc2V0X2FjdGl2ZSAoRkFMU0UpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBBUkdfREVCVUdfSEVMUDoKKyAgICAgIGdzdF9kZWJ1Z19oZWxwICgpOworICAgICAgZXhpdCAoMCk7CisjZW5kaWYKKyAgICBjYXNlIEFSR19QTFVHSU5fU1BFVzoKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQVJHX1BMVUdJTl9QQVRIOgorI2lmbmRlZiBHU1RfRElTQUJMRV9SRUdJU1RSWQorICAgICAgc3BsaXRfYW5kX2l0ZXJhdGUgKGFyZywgR19TRUFSQ0hQQVRIX1NFUEFSQVRPUl9TLCBhZGRfcGF0aF9mdW5jLCBOVUxMKTsKKyNlbmRpZiAvKiBHU1RfRElTQUJMRV9SRUdJU1RSWSAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSBBUkdfUExVR0lOX0xPQUQ6CisgICAgICBzcGxpdF9hbmRfaXRlcmF0ZSAoYXJnLCAiLCIsIHByZXBhcmVfZm9yX2xvYWRfcGx1Z2luX2Z1bmMsIE5VTEwpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBBUkdfU0VHVFJBUF9ESVNBQkxFOgorICAgICAgX2dzdF9kaXNhYmxlX3NlZ3RyYXAgPSBUUlVFOworICAgICAgYnJlYWs7CisgICAgY2FzZSBBUkdfUkVHSVNUUllfVVBEQVRFX0RJU0FCTEU6CisjaWZuZGVmIEdTVF9ESVNBQkxFX1JFR0lTVFJZCisgICAgICBfcHJpdl9nc3RfZGlzYWJsZV9yZWdpc3RyeV91cGRhdGUgPSBUUlVFOworI2VuZGlmCisgICAgICBicmVhazsKKyAgICBjYXNlIEFSR19SRUdJU1RSWV9GT1JLX0RJU0FCTEU6CisgICAgICBnc3RfcmVnaXN0cnlfZm9ya19zZXRfZW5hYmxlZCAoRkFMU0UpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGdfc2V0X2Vycm9yIChlcnIsIEdfT1BUSU9OX0VSUk9SLCBHX09QVElPTl9FUlJPUl9VTktOT1dOX09QVElPTiwKKyAgICAgICAgICBfKCJVbmtub3duIG9wdGlvbiIpKTsKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgfQorCisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3BhcnNlX2dvcHRpb25fYXJnIChjb25zdCBnY2hhciAqIG9wdCwKKyAgICBjb25zdCBnY2hhciAqIGFyZywgZ3BvaW50ZXIgZGF0YSwgR0Vycm9yICoqIGVycikKK3sKKyAgc3RhdGljIGNvbnN0IHN0cnVjdAorICB7CisgICAgY29uc3QgZ2NoYXIgKm9wdDsKKyAgICBpbnQgdmFsOworICB9IG9wdGlvbnNbXSA9IHsKKyAgICB7CisgICAgIi0tZ3N0LXZlcnNpb24iLCBBUkdfVkVSU0lPTn0sIHsKKyAgICAiLS1nc3QtZmF0YWwtd2FybmluZ3MiLCBBUkdfRkFUQUxfV0FSTklOR1N9LAorI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKyAgICB7CisgICAgIi0tZ3N0LWRlYnVnLWxldmVsIiwgQVJHX0RFQlVHX0xFVkVMfSwgeworICAgICItLWdzdC1kZWJ1ZyIsIEFSR19ERUJVR30sIHsKKyAgICAiLS1nc3QtZGVidWctZGlzYWJsZSIsIEFSR19ERUJVR19ESVNBQkxFfSwgeworICAgICItLWdzdC1kZWJ1Zy1uby1jb2xvciIsIEFSR19ERUJVR19OT19DT0xPUn0sIHsKKyAgICAiLS1nc3QtZGVidWctaGVscCIsIEFSR19ERUJVR19IRUxQfSwKKyNlbmRpZgorICAgIHsKKyAgICAiLS1nc3QtcGx1Z2luLXNwZXciLCBBUkdfUExVR0lOX1NQRVd9LCB7CisgICAgIi0tZ3N0LXBsdWdpbi1wYXRoIiwgQVJHX1BMVUdJTl9QQVRIfSwgeworICAgICItLWdzdC1wbHVnaW4tbG9hZCIsIEFSR19QTFVHSU5fTE9BRH0sIHsKKyAgICAiLS1nc3QtZGlzYWJsZS1zZWd0cmFwIiwgQVJHX1NFR1RSQVBfRElTQUJMRX0sIHsKKyAgICAiLS1nc3QtZGlzYWJsZS1yZWdpc3RyeS11cGRhdGUiLCBBUkdfUkVHSVNUUllfVVBEQVRFX0RJU0FCTEV9LCB7CisgICAgIi0tZ3N0LWRpc2FibGUtcmVnaXN0cnktZm9yayIsIEFSR19SRUdJU1RSWV9GT1JLX0RJU0FCTEV9LCB7CisgICAgTlVMTH0KKyAgfTsKKyAgZ2ludCB2YWwgPSAwLCBuOworCisgIGZvciAobiA9IDA7IG9wdGlvbnNbbl0ub3B0OyBuKyspIHsKKyAgICBpZiAoIXN0cmNtcCAob3B0LCBvcHRpb25zW25dLm9wdCkpIHsKKyAgICAgIHZhbCA9IG9wdGlvbnNbbl0udmFsOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHBhcnNlX29uZV9vcHRpb24gKHZhbCwgYXJnLCBlcnIpOworfQorI2VuZGlmCisKKy8qKgorICogZ3N0X2RlaW5pdDoKKyAqCisgKiBDbGVhbiB1cCBhbnkgcmVzb3VyY2VzIGNyZWF0ZWQgYnkgR1N0cmVhbWVyIGluIGdzdF9pbml0KCkuCisgKgorICogSXQgaXMgbm9ybWFsbHkgbm90IG5lZWRlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gYSBub3JtYWwgYXBwbGljYXRpb24KKyAqIGFzIHRoZSByZXNvdXJjZXMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGZyZWVkIHdoZW4gdGhlIHByb2dyYW0gdGVybWluYXRlcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlcmVmb3JlIG1vc3RseSB1c2VkIGJ5IHRlc3RzdWl0ZXMgYW5kIG90aGVyIG1lbW9yeQorICogcHJvZmlsaW5nIHRvb2xzLgorICoKKyAqIEFmdGVyIHRoaXMgY2FsbCBHU3RyZWFtZXIgKGluY2x1ZGluZyB0aGlzIG1ldGhvZCkgc2hvdWxkIG5vdCBiZSB1c2VkIGFueW1vcmUuIAorICovCit2b2lkCitnc3RfZGVpbml0ICh2b2lkKQoreworICBHc3RDbG9jayAqY2xvY2s7CisKKyAgR1NUX0lORk8gKCJkZWluaXRpYWxpemluZyBHU3RyZWFtZXIiKTsKKworICBpZiAoZ3N0X2RlaW5pdGlhbGl6ZWQpIHsKKyAgICBHU1RfREVCVUcgKCJhbHJlYWR5IGRlaW5pdGlhbGl6ZWQiKTsKKyAgICByZXR1cm47CisgIH0KKworICBnX3NsaXN0X2ZvcmVhY2ggKF9wcml2X2dzdF9wcmVsb2FkX3BsdWdpbnMsIChHRnVuYykgZ19mcmVlLCBOVUxMKTsKKyAgZ19zbGlzdF9mcmVlIChfcHJpdl9nc3RfcHJlbG9hZF9wbHVnaW5zKTsKKyAgX3ByaXZfZ3N0X3ByZWxvYWRfcGx1Z2lucyA9IE5VTEw7CisKKyNpZm5kZWYgR1NUX0RJU0FCTEVfUkVHSVNUUlkKKyAgZ19saXN0X2ZvcmVhY2ggKF9wcml2X2dzdF9wbHVnaW5fcGF0aHMsIChHRnVuYykgZ19mcmVlLCBOVUxMKTsKKyAgZ19saXN0X2ZyZWUgKF9wcml2X2dzdF9wbHVnaW5fcGF0aHMpOworICBfcHJpdl9nc3RfcGx1Z2luX3BhdGhzID0gTlVMTDsKKyNlbmRpZgorCisgIGNsb2NrID0gZ3N0X3N5c3RlbV9jbG9ja19vYnRhaW4gKCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoY2xvY2spOworCisgIF9wcml2X2dzdF9yZWdpc3RyeV9jbGVhbnVwICgpOworCisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9vYmplY3RfZ2V0X3R5cGUgKCkpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3BhZF9nZXRfdHlwZSAoKSkpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfZWxlbWVudF9mYWN0b3J5X2dldF90eXBlICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9lbGVtZW50X2dldF90eXBlICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfdHlwZSAoKSkpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfYmluX2dldF90eXBlICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9idXNfZ2V0X3R5cGUgKCkpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3Rhc2tfZ2V0X3R5cGUgKCkpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X2luZGV4X2ZhY3RvcnlfZ2V0X3R5cGUgKCkpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X29iamVjdF9mbGFnc19nZXRfdHlwZSAoKSkpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfYmluX2ZsYWdzX2dldF90eXBlICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9idWZmZXJfZmxhZ3NfZ2V0X3R5cGUgKCkpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X2J1ZmZlcl9jb3B5X2ZsYWdzX2dldF90eXBlICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9idXNfZmxhZ3NfZ2V0X3R5cGUgKCkpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X2J1c19zeW5jX3JlcGx5X2dldF90eXBlICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9jYXBzX2ZsYWdzX2dldF90eXBlICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9jbG9ja190eXBlX2dldF90eXBlICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9jbG9ja19yZXR1cm5fZ2V0X3R5cGUgKCkpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X2Nsb2NrX2VudHJ5X3R5cGVfZ2V0X3R5cGUgKCkpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X2Nsb2NrX2ZsYWdzX2dldF90eXBlICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9kZWJ1Z19ncmFwaF9kZXRhaWxzX2dldF90eXBlICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9zdGF0ZV9nZXRfdHlwZSAoKSkpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3Rfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRfdHlwZSAoKSkpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3Rfc3RhdGVfY2hhbmdlX2dldF90eXBlICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9lbGVtZW50X2ZsYWdzX2dldF90eXBlICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9jb3JlX2Vycm9yX2dldF90eXBlICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9saWJyYXJ5X2Vycm9yX2dldF90eXBlICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9wbHVnaW5fZGVwZW5kZW5jeV9mbGFnc19nZXRfdHlwZQorICAgICAgICAgICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9wYXJzZV9mbGFnc19nZXRfdHlwZSAoKSkpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfcmVzb3VyY2VfZXJyb3JfZ2V0X3R5cGUgKCkpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3NlYXJjaF9tb2RlX2dldF90eXBlICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9zdHJlYW1fZXJyb3JfZ2V0X3R5cGUgKCkpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3N0cmVhbV9zdGF0dXNfdHlwZV9nZXRfdHlwZSAoKSkpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3Rfc3RydWN0dXJlX2NoYW5nZV90eXBlX2dldF90eXBlCisgICAgICAgICAgKCkpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X2V2ZW50X3R5cGVfZmxhZ3NfZ2V0X3R5cGUgKCkpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X2V2ZW50X3R5cGVfZ2V0X3R5cGUgKCkpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3NlZWtfdHlwZV9nZXRfdHlwZSAoKSkpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3Rfc2Vla19mbGFnc19nZXRfdHlwZSAoKSkpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfcW9zX3R5cGVfZ2V0X3R5cGUgKCkpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X2Zvcm1hdF9nZXRfdHlwZSAoKSkpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfaW5kZXhfY2VydGFpbnR5X2dldF90eXBlICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9pbmRleF9lbnRyeV90eXBlX2dldF90eXBlICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9pbmRleF9sb29rdXBfbWV0aG9kX2dldF90eXBlICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9hc3NvY19mbGFnc19nZXRfdHlwZSAoKSkpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfaW5kZXhfcmVzb2x2ZXJfbWV0aG9kX2dldF90eXBlCisgICAgICAgICAgKCkpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X2luZGV4X2ZsYWdzX2dldF90eXBlICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9kZWJ1Z19sZXZlbF9nZXRfdHlwZSAoKSkpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfZGVidWdfY29sb3JfZmxhZ3NfZ2V0X3R5cGUgKCkpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X2l0ZXJhdG9yX3Jlc3VsdF9nZXRfdHlwZSAoKSkpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfaXRlcmF0b3JfaXRlbV9nZXRfdHlwZSAoKSkpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfbWVzc2FnZV90eXBlX2dldF90eXBlICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9taW5pX29iamVjdF9mbGFnc19nZXRfdHlwZSAoKSkpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfcGFkX2xpbmtfcmV0dXJuX2dldF90eXBlICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9wYWRfbGlua19jaGVja19nZXRfdHlwZSAoKSkpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfZmxvd19yZXR1cm5fZ2V0X3R5cGUgKCkpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X2FjdGl2YXRlX21vZGVfZ2V0X3R5cGUgKCkpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3BhZF9kaXJlY3Rpb25fZ2V0X3R5cGUgKCkpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3BhZF9mbGFnc19nZXRfdHlwZSAoKSkpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfcGFkX3ByZXNlbmNlX2dldF90eXBlICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9wYWRfdGVtcGxhdGVfZmxhZ3NfZ2V0X3R5cGUgKCkpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3BpcGVsaW5lX2ZsYWdzX2dldF90eXBlICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9wbHVnaW5fZXJyb3JfZ2V0X3R5cGUgKCkpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3BsdWdpbl9mbGFnc19nZXRfdHlwZSAoKSkpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfcmFua19nZXRfdHlwZSAoKSkpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfcXVlcnlfdHlwZV9nZXRfdHlwZSAoKSkpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfYnVmZmVyaW5nX21vZGVfZ2V0X3R5cGUgKCkpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3RhZ19tZXJnZV9tb2RlX2dldF90eXBlICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF90YWdfZmxhZ19nZXRfdHlwZSAoKSkpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfdGFza19zdGF0ZV9nZXRfdHlwZSAoKSkpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfYWxsb2NfdHJhY2VfZmxhZ3NfZ2V0X3R5cGUgKCkpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3R5cGVfZmluZF9wcm9iYWJpbGl0eV9nZXRfdHlwZQorICAgICAgICAgICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF91cmlfdHlwZV9nZXRfdHlwZSAoKSkpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfcGFyc2VfZXJyb3JfZ2V0X3R5cGUgKCkpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3BhcmFtX3NwZWNfZnJhY3Rpb25fZ2V0X3R5cGUgKCkpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3Byb2dyZXNzX3R5cGVfZ2V0X3R5cGUgKCkpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X2J1ZmZlcl9wb29sX2ZsYWdzX2dldF90eXBlICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9tZW1vcnlfZmxhZ3NfZ2V0X3R5cGUgKCkpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X21hcF9mbGFnc19nZXRfdHlwZSAoKSkpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfY2Fwc19pbnRlcnNlY3RfbW9kZV9nZXRfdHlwZSAoKSkpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfcHJvYmVfdHlwZV9nZXRfdHlwZSAoKSkpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfcHJvYmVfcmV0dXJuX2dldF90eXBlICgpKSk7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9zZWdtZW50X2ZsYWdzX2dldF90eXBlICgpKSk7CisKKyAgZ3N0X2RlaW5pdGlhbGl6ZWQgPSBUUlVFOworICBHU1RfSU5GTyAoImRlaW5pdGlhbGl6ZWQgR1N0cmVhbWVyIik7Cit9CisKKy8qKgorICogZ3N0X3ZlcnNpb246CisgKiBAbWFqb3I6IChvdXQpOiBwb2ludGVyIHRvIGEgZ3VpbnQgdG8gc3RvcmUgdGhlIG1ham9yIHZlcnNpb24gbnVtYmVyCisgKiBAbWlub3I6IChvdXQpOiBwb2ludGVyIHRvIGEgZ3VpbnQgdG8gc3RvcmUgdGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyCisgKiBAbWljcm86IChvdXQpOiBwb2ludGVyIHRvIGEgZ3VpbnQgdG8gc3RvcmUgdGhlIG1pY3JvIHZlcnNpb24gbnVtYmVyCisgKiBAbmFubzogIChvdXQpOiBwb2ludGVyIHRvIGEgZ3VpbnQgdG8gc3RvcmUgdGhlIG5hbm8gdmVyc2lvbiBudW1iZXIKKyAqCisgKiBHZXRzIHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgR1N0cmVhbWVyIGxpYnJhcnkuCisgKi8KK3ZvaWQKK2dzdF92ZXJzaW9uIChndWludCAqIG1ham9yLCBndWludCAqIG1pbm9yLCBndWludCAqIG1pY3JvLCBndWludCAqIG5hbm8pCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKG1ham9yKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAobWlub3IpOworICBnX3JldHVybl9pZl9mYWlsIChtaWNybyk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKG5hbm8pOworCisgICptYWpvciA9IEdTVF9WRVJTSU9OX01BSk9SOworICAqbWlub3IgPSBHU1RfVkVSU0lPTl9NSU5PUjsKKyAgKm1pY3JvID0gR1NUX1ZFUlNJT05fTUlDUk87CisgICpuYW5vID0gR1NUX1ZFUlNJT05fTkFOTzsKK30KKworLyoqCisgKiBnc3RfdmVyc2lvbl9zdHJpbmc6CisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgdXNlZnVsIGZvciBkZXNjcmliaW5nIHRoaXMgdmVyc2lvbgorICogb2YgR1N0cmVhbWVyIHRvIHRoZSBvdXRzaWRlIHdvcmxkOiB1c2VyIGFnZW50IHN0cmluZ3MsIGxvZ2dpbmcsIC4uLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXdseSBhbGxvY2F0ZWQgc3RyaW5nIGRlc2NyaWJpbmcgdGhpcyB2ZXJzaW9uCisgKiAgICAgb2YgR1N0cmVhbWVyLgorICovCisKK2djaGFyICoKK2dzdF92ZXJzaW9uX3N0cmluZyAodm9pZCkKK3sKKyAgZ3VpbnQgbWFqb3IsIG1pbm9yLCBtaWNybywgbmFubzsKKworICBnc3RfdmVyc2lvbiAoJm1ham9yLCAmbWlub3IsICZtaWNybywgJm5hbm8pOworICBpZiAobmFubyA9PSAwKQorICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJHU3RyZWFtZXIgJWQuJWQuJWQiLCBtYWpvciwgbWlub3IsIG1pY3JvKTsKKyAgZWxzZSBpZiAobmFubyA9PSAxKQorICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJHU3RyZWFtZXIgJWQuJWQuJWQgKEdJVCkiLCBtYWpvciwgbWlub3IsIG1pY3JvKTsKKyAgZWxzZQorICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJHU3RyZWFtZXIgJWQuJWQuJWQgKHByZXJlbGVhc2UpIiwgbWFqb3IsIG1pbm9yLAorICAgICAgICBtaWNybyk7Cit9CisKKy8qKgorICogZ3N0X3NlZ3RyYXBfaXNfZW5hYmxlZDoKKyAqCisgKiBTb21lIGZ1bmN0aW9ucyBpbiB0aGUgR1N0cmVhbWVyIGNvcmUgbWlnaHQgaW5zdGFsbCBhIGN1c3RvbSBTSUdTRUdWIGhhbmRsZXIKKyAqIHRvIGJldHRlciBjYXRjaCBhbmQgcmVwb3J0IGVycm9ycyB0byB0aGUgYXBwbGljYXRpb24uIEN1cnJlbnRseSB0aGlzIGZlYXR1cmUKKyAqIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIGxvYWRpbmcgcGx1Z2lucy4KKyAqCisgKiBBcHBsaWNhdGlvbnMgbWlnaHQgd2FudCB0byBkaXNhYmxlIHRoaXMgYmVoYXZpb3VyIHdpdGggdGhlCisgKiBnc3Rfc2VndHJhcF9zZXRfZW5hYmxlZCgpIGZ1bmN0aW9uLiBUaGlzIGlzIHR5cGljYWxseSBkb25lIGlmIHRoZSBhcHBsaWNhdGlvbgorICogd2FudHMgdG8gaW5zdGFsbCBpdHMgb3duIGhhbmRsZXIgd2l0aG91dCBHU3RyZWFtZXIgaW50ZXJmZXJpbmcuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgR1N0cmVhbWVyIGlzIGFsbG93ZWQgdG8gaW5zdGFsbCBhIGN1c3RvbSBTSUdTRUdWIGhhbmRsZXIuCisgKgorICogU2luY2U6IDAuMTAuMTAKKyAqLworZ2Jvb2xlYW4KK2dzdF9zZWd0cmFwX2lzX2VuYWJsZWQgKHZvaWQpCit7CisgIC8qIHllcHMsIGl0J3MgZW5hYmxlZCB3aGVuIGl0J3Mgbm90IGRpc2FibGVkICovCisgIHJldHVybiAhX2dzdF9kaXNhYmxlX3NlZ3RyYXA7Cit9CisKKy8qKgorICogZ3N0X3NlZ3RyYXBfc2V0X2VuYWJsZWQ6CisgKiBAZW5hYmxlZDogd2hldGhlciBhIGN1c3RvbSBTSUdTRUdWIGhhbmRsZXIgc2hvdWxkIGJlIGluc3RhbGxlZC4KKyAqCisgKiBBcHBsaWNhdGlvbnMgbWlnaHQgd2FudCB0byBkaXNhYmxlL2VuYWJsZSB0aGUgU0lHU0VHViBoYW5kbGluZyBvZgorICogdGhlIEdTdHJlYW1lciBjb3JlLiBTZWUgZ3N0X3NlZ3RyYXBfaXNfZW5hYmxlZCgpIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqIFNpbmNlOiAwLjEwLjEwCisgKi8KK3ZvaWQKK2dzdF9zZWd0cmFwX3NldF9lbmFibGVkIChnYm9vbGVhbiBlbmFibGVkKQoreworICBfZ3N0X2Rpc2FibGVfc2VndHJhcCA9ICFlbmFibGVkOworfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdC5oIGIvZ3N0L2dzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNTc4ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0LmgKQEAgLTAsMCArMSwxMTIgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KKyAqCisgKiBnc3QuaDogTWFpbiBoZWFkZXIgZm9yIEdTdHJlYW1lciwgYXBwcyBzaG91bGQgaW5jbHVkZSB0aGlzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworCisjaWZuZGVmIF9fR1NUX0hfXworI2RlZmluZSBfX0dTVF9IX18KKworI2lmbmRlZiBHU1RfVVNFX1VOU1RBQkxFX0FQSQorI3dhcm5pbmcgIlRoZSBHU3RyZWFtZXIgMC4xMSBBUEkgaXMgc3RpbGwgdW5zdGFibGUgYW5kIHdpbGwgY2hhbmdlIGluIGZ1dHVyZS4iCisjd2FybmluZyAiRGVmaW5lIEdTVF9VU0VfVU5TVEFCTEVfQVBJIHRvIGF2b2lkIHRoaXMgd2FybmluZy4iCisjZW5kaWYKKworI2luY2x1ZGUgPGdsaWIuaD4KKworI2luY2x1ZGUgPGdzdC9nbGliLWNvbXBhdC5oPgorCisjaW5jbHVkZSA8Z3N0L2dzdGVudW10eXBlcy5oPgorI2luY2x1ZGUgPGdzdC9nc3R2ZXJzaW9uLmg+CisKKyNpbmNsdWRlIDxnc3QvZ3N0YmluLmg+CisjaW5jbHVkZSA8Z3N0L2dzdGJ1ZmZlci5oPgorI2luY2x1ZGUgPGdzdC9nc3RidWZmZXJsaXN0Lmg+CisjaW5jbHVkZSA8Z3N0L2dzdGJ1ZmZlcnBvb2wuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Y2Fwcy5oPgorI2luY2x1ZGUgPGdzdC9nc3RjaGlsZHByb3h5Lmg+CisjaW5jbHVkZSA8Z3N0L2dzdGNsb2NrLmg+CisjaW5jbHVkZSA8Z3N0L2dzdGRhdGV0aW1lLmg+CisjaW5jbHVkZSA8Z3N0L2dzdGRlYnVndXRpbHMuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0ZWxlbWVudC5oPgorI2luY2x1ZGUgPGdzdC9nc3RlbGVtZW50bWV0YWRhdGEuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0ZXJyb3IuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0ZXZlbnQuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Z2hvc3RwYWQuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0aW5kZXguaD4KKyNpbmNsdWRlIDxnc3QvZ3N0aW5kZXhmYWN0b3J5Lmg+CisjaW5jbHVkZSA8Z3N0L2dzdGluZm8uaD4KKyNpbmNsdWRlIDxnc3QvZ3N0aXRlcmF0b3IuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0bWFyc2hhbC5oPgorI2luY2x1ZGUgPGdzdC9nc3RtZXNzYWdlLmg+CisjaW5jbHVkZSA8Z3N0L2dzdG1lbW9yeS5oPgorI2luY2x1ZGUgPGdzdC9nc3RtaW5pb2JqZWN0Lmg+CisjaW5jbHVkZSA8Z3N0L2dzdG9iamVjdC5oPgorI2luY2x1ZGUgPGdzdC9nc3RwYWQuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0cGFyYW1zcGVjcy5oPgorI2luY2x1ZGUgPGdzdC9nc3RwaXBlbGluZS5oPgorI2luY2x1ZGUgPGdzdC9nc3RwbHVnaW4uaD4KKyNpbmNsdWRlIDxnc3QvZ3N0cG9sbC5oPgorI2luY2x1ZGUgPGdzdC9nc3RwcmVzZXQuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0cXVlcnkuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0cmVnaXN0cnkuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0c2VnbWVudC5oPgorI2luY2x1ZGUgPGdzdC9nc3RzdHJ1Y3R1cmUuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0c3lzdGVtY2xvY2suaD4KKyNpbmNsdWRlIDxnc3QvZ3N0dGFnbGlzdC5oPgorI2luY2x1ZGUgPGdzdC9nc3R0YWdzZXR0ZXIuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0dGFzay5oPgorI2luY2x1ZGUgPGdzdC9nc3R0YXNrcG9vbC5oPgorI2luY2x1ZGUgPGdzdC9nc3R0cmFjZS5oPgorI2luY2x1ZGUgPGdzdC9nc3R0eXBlZmluZC5oPgorI2luY2x1ZGUgPGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0dXJpLmg+CisjaW5jbHVkZSA8Z3N0L2dzdHV0aWxzLmg+CisjaW5jbHVkZSA8Z3N0L2dzdHZhbHVlLmg+CisKKyNpbmNsdWRlIDxnc3QvZ3N0cGFyc2UuaD4KKworLyogQVBJIGNvbXBhdGliaWxpdHkgc3R1ZmYgKi8KKyNpbmNsdWRlIDxnc3QvZ3N0Y29tcGF0Lmg+CisKK0dfQkVHSU5fREVDTFMKKwordm9pZAkJZ3N0X2luaXQJCQkoaW50ICphcmdjLCBjaGFyICoqYXJndltdKTsKK2dib29sZWFuCWdzdF9pbml0X2NoZWNrCQkJKGludCAqYXJnYywgY2hhciAqKmFyZ3ZbXSwKKwkJCQkJCSBHRXJyb3IgKiogZXJyKTsKK2dib29sZWFuICAgICAgICBnc3RfaXNfaW5pdGlhbGl6ZWQgICAgICAgICAgICAgICh2b2lkKTsKK0dPcHRpb25Hcm91cCAqCWdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXAJKHZvaWQpOwordm9pZAkJZ3N0X2RlaW5pdAkJCSh2b2lkKTsKKwordm9pZAkJZ3N0X3ZlcnNpb24JCQkoZ3VpbnQgKm1ham9yLCBndWludCAqbWlub3IsCisJCQkJCQkgZ3VpbnQgKm1pY3JvLCBndWludCAqbmFubyk7CitnY2hhciAqCQlnc3RfdmVyc2lvbl9zdHJpbmcJCSh2b2lkKTsKKworZ2Jvb2xlYW4gICAgICAgIGdzdF9zZWd0cmFwX2lzX2VuYWJsZWQgICAgICAgICAgKHZvaWQpOwordm9pZCAgICAgICAgICAgIGdzdF9zZWd0cmFwX3NldF9lbmFibGVkICAgICAgICAgKGdib29sZWFuIGVuYWJsZWQpOworCitnYm9vbGVhbiAgICAgICAgZ3N0X3JlZ2lzdHJ5X2ZvcmtfaXNfZW5hYmxlZCAgICAodm9pZCk7Cit2b2lkICAgICAgICAgICAgZ3N0X3JlZ2lzdHJ5X2Zvcmtfc2V0X2VuYWJsZWQgICAoZ2Jvb2xlYW4gZW5hYmxlZCk7CisKK2dib29sZWFuICAgICAgICBnc3RfdXBkYXRlX3JlZ2lzdHJ5ICh2b2lkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fR1NUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdF9wcml2YXRlLmggYi9nc3QvZ3N0X3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzgwYzg4Ci0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdF9wcml2YXRlLmgKQEAgLTAsMCArMSwyMzggQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KKyAqCisgKiBnc3RfcHJpdmF0ZS5oOiBQcml2YXRlIGhlYWRlciBmb3Igd2l0aGluIGxpYmdzdAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19HU1RfUFJJVkFURV9IX18KKyNkZWZpbmUgX19HU1RfUFJJVkFURV9IX18KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaWZuZGVmIEdTVF9MSUNFTlNFICAgLyogZG9uJ3QgaW5jbHVkZSBjb25maWcuaCB0d2ljZSwgaXQgaGFzIG5vIGd1YXJkcyAqLworIyAgaW5jbHVkZSAiY29uZmlnLmgiCisjIGVuZGlmCisjZW5kaWYKKworLyogVGhpcyBuZWVkcyB0byBiZSBiZWZvcmUgZ2xpYi5oLCBzaW5jZSBpdCBtaWdodCBiZSB1c2VkIGluIGlubGluZQorICogZnVuY3Rpb25zICovCitleHRlcm4gY29uc3QgY2hhciAgICAgICAgICAgICBnX2xvZ19kb21haW5fZ3N0cmVhbWVyW107CisKKyNpbmNsdWRlIDxnbGliLmg+CisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogTmVlZGVkIGZvciBHc3RSZWdpc3RyeSAqICovCisjaW5jbHVkZSAiZ3N0cmVnaXN0cnkuaCIKKyNpbmNsdWRlICJnc3RzdHJ1Y3R1cmUuaCIKKworLyogd2UgbmVlZCB0aGlzIGluIHByZXR0eSBtdWNoIGFsbCBmaWxlcyAqLworI2luY2x1ZGUgImdzdGluZm8uaCIKKworLyogZm9yIHRoZSBmbGFncyBpbiB0aGUgR3N0UGx1Z2luRGVwIHN0cnVjdHVyZSBiZWxvdyAqLworI2luY2x1ZGUgImdzdHBsdWdpbi5oIgorCisvKiBmb3IgdGhlIHBhZCBjYWNoZSAqLworI2luY2x1ZGUgImdzdHBhZC5oIgorCisvKiBmb3IgR3N0RWxlbWVudCAqLworI2luY2x1ZGUgImdzdGVsZW1lbnQuaCIKKworR19CRUdJTl9ERUNMUworCisvKiB1c2VkIGJ5IGdzdHBhcnNlLmMgYW5kIGdyYW1tYXIueSAqLworc3RydWN0IF9Hc3RQYXJzZUNvbnRleHQgeworICBHTGlzdCAqIG1pc3NpbmdfZWxlbWVudHM7Cit9OworCisvKiB1c2VkIGJ5IGdzdHBsdWdpbi5jIGFuZCBnc3RyZWdpc3RyeWJpbmFyeS5jICovCit0eXBlZGVmIHN0cnVjdCB7CisgIC8qIGRldGFpbHMgcmVnaXN0ZXJlZCB2aWEgZ3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jeSgpICovCisgIEdzdFBsdWdpbkRlcGVuZGVuY3lGbGFncyAgZmxhZ3M7CisgIGdjaGFyICoqZW52X3ZhcnM7CisgIGdjaGFyICoqcGF0aHM7CisgIGdjaGFyICoqbmFtZXM7CisKKyAgLyogaW5mb3JtYXRpb24gc2F2ZWQgZnJvbSB0aGUgbGFzdCB0aW1lIHRoZSBwbHVnaW4gd2FzIGxvYWRlZCAoLTEgPSB1bnNldCkgKi8KKyAgZ3VpbnQgICBlbnZfaGFzaDsgIC8qIGhhc2ggb2YgY29udGVudCBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gZW52X3ZhcnMgKi8KKyAgZ3VpbnQgICBzdGF0X2hhc2g7IC8qIGhhc2ggb2Ygc3RhdCgpIG9uIGFsbCByZWxldmFudCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgKi8KK30gR3N0UGx1Z2luRGVwOworCitzdHJ1Y3QgX0dzdFBsdWdpblByaXZhdGUgeworICBHTGlzdCAqZGVwczsgICAgLyogbGlzdCBvZiBHc3RQbHVnaW5EZXAgc3RydWN0dXJlcyAqLworICBHc3RTdHJ1Y3R1cmUgKmNhY2hlX2RhdGE7Cit9OworCitnYm9vbGVhbiBwcml2X2dzdF9wbHVnaW5fbG9hZGluZ19oYXZlX3doaXRlbGlzdCAodm9pZCk7CisKK2d1aW50MzIgIHByaXZfZ3N0X3BsdWdpbl9sb2FkaW5nX2dldF93aGl0ZWxpc3RfaGFzaCAodm9pZCk7CisKK2dib29sZWFuIHByaXZfZ3N0X3BsdWdpbl9kZXNjX2lzX3doaXRlbGlzdGVkIChHc3RQbHVnaW5EZXNjICogZGVzYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICogZmlsZW5hbWUpOworCitnYm9vbGVhbiBfcHJpdl9wbHVnaW5fZGVwc19lbnZfdmFyc19jaGFuZ2VkIChHc3RQbHVnaW4gKiBwbHVnaW4pOworZ2Jvb2xlYW4gX3ByaXZfcGx1Z2luX2RlcHNfZmlsZXNfY2hhbmdlZCAoR3N0UGx1Z2luICogcGx1Z2luKTsKKworZ2Jvb2xlYW4gX3ByaXZfZ3N0X2luX3ZhbGdyaW5kICh2b2lkKTsKKworLyogaW5pdCBmdW5jdGlvbnMgY2FsbGVkIGZyb20gZ3N0X2luaXQoKS4gKi8KK3ZvaWQgIF9wcml2X2dzdF9xdWFya3NfaW5pdGlhbGl6ZSAodm9pZCk7Cit2b2lkICBfcHJpdl9nc3RfYnVmZmVyX2luaXRpYWxpemUgKHZvaWQpOwordm9pZCAgX3ByaXZfZ3N0X2J1ZmZlcl9saXN0X2luaXRpYWxpemUgKHZvaWQpOwordm9pZCAgX3ByaXZfZ3N0X3N0cnVjdHVyZV9pbml0aWFsaXplICh2b2lkKTsKK3ZvaWQgIF9wcml2X2dzdF9jYXBzX2luaXRpYWxpemUgKHZvaWQpOwordm9pZCAgX3ByaXZfZ3N0X2V2ZW50X2luaXRpYWxpemUgKHZvaWQpOwordm9pZCAgX3ByaXZfZ3N0X2Zvcm1hdF9pbml0aWFsaXplICh2b2lkKTsKK3ZvaWQgIF9wcml2X2dzdF9tZXNzYWdlX2luaXRpYWxpemUgKHZvaWQpOwordm9pZCAgX3ByaXZfZ3N0X21lbW9yeV9pbml0aWFsaXplICh2b2lkKTsKK3ZvaWQgIF9wcml2X2dzdF9tZXRhX2luaXRpYWxpemUgKHZvaWQpOwordm9pZCAgX3ByaXZfZ3N0X3BsdWdpbl9pbml0aWFsaXplICh2b2lkKTsKK3ZvaWQgIF9wcml2X2dzdF9xdWVyeV9pbml0aWFsaXplICh2b2lkKTsKK3ZvaWQgIF9wcml2X2dzdF90YWdfaW5pdGlhbGl6ZSAodm9pZCk7Cit2b2lkICBfcHJpdl9nc3RfdmFsdWVfaW5pdGlhbGl6ZSAodm9pZCk7CisKKy8qIFByaXZhdGUgcmVnaXN0cnkgZnVuY3Rpb25zICovCitnYm9vbGVhbiBfcHJpdl9nc3RfcmVnaXN0cnlfcmVtb3ZlX2NhY2hlX3BsdWdpbnMgKEdzdFJlZ2lzdHJ5ICpyZWdpc3RyeSk7Cit2b2lkIF9wcml2X2dzdF9yZWdpc3RyeV9jbGVhbnVwICh2b2lkKTsKK2dib29sZWFuIF9nc3RfcGx1Z2luX2xvYWRlcl9jbGllbnRfcnVuICh2b2lkKTsKKworLyogVXNlZCBpbiBHc3RCaW4gZm9yIG1hbnVhbCBzdGF0ZSBoYW5kbGluZyAqLwordm9pZCBfcHJpdl9nc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VkIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RTdGF0ZSBvbGRzdGF0ZSwKKyAgICBHc3RTdGF0ZSBuZXdzdGF0ZSwgR3N0U3RhdGUgcGVuZGluZyk7CisKKy8qIHVzZWQgaW4gYm90aCBnc3RzdHJ1Y3R1cmUuYyBhbmQgZ3N0Y2Fwcy5jOyBudW1iZXJzIGFyZSBjb21wbGV0ZWx5IG1hZGUgdXAgKi8KKyNkZWZpbmUgU1RSVUNUVVJFX0VTVElNQVRFRF9TVFJJTkdfTEVOKHMpICgxNiArIGdzdF9zdHJ1Y3R1cmVfbl9maWVsZHMocykgKiAyMikKKworZ2Jvb2xlYW4gIHByaXZfZ3N0X3N0cnVjdHVyZV9hcHBlbmRfdG9fZ3N0cmluZyAoY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1N0cmluZyAgICAgICAgICAgICogcyk7CisvKiByZWdpc3RyeSBjYWNoZSBiYWNrZW5kcyAqLworZ2Jvb2xlYW4JCXByaXZfZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9yZWFkX2NhY2hlCShHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5LCBjb25zdCBjaGFyICpsb2NhdGlvbik7CitnYm9vbGVhbgkJcHJpdl9nc3RfcmVnaXN0cnlfYmluYXJ5X3dyaXRlX2NhY2hlCShHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5LCBjb25zdCBjaGFyICpsb2NhdGlvbik7CisKKy8qIHVzZWQgaW4gZ3N0dmFsdWUuYyBhbmQgZ3N0c3RydWN0dXJlLmMgKi8KKyNkZWZpbmUgR1NUX0FTQ0lJX0lTX1NUUklORyhjKSAoZ19hc2NpaV9pc2FsbnVtKChjKSkgfHwgKChjKSA9PSAnXycpIHx8IFwKKyAgICAoKGMpID09ICctJykgfHwgKChjKSA9PSAnKycpIHx8ICgoYykgPT0gJy8nKSB8fCAoKGMpID09ICc6JykgfHwgXAorICAgICgoYykgPT0gJy4nKSkKKworLyogVGhpcyBpcyBvbmx5IG1lYW50IGZvciBpbnRlcm5hbCB1c2VzICovCitnaW50IHByaXZfZ3N0X2RhdGVfdGltZV9jb21wYXJlIChnY29uc3Rwb2ludGVyIGR0MSwgZ2NvbnN0cG9pbnRlciBkdDIpOworCisjaWZuZGVmIEdTVF9ESVNBQkxFX1JFR0lTVFJZCisvKiBTZWNyZXQgdmFyaWFibGUgdG8gaW5pdGlhbGlzZSBnc3Qgd2l0aG91dCByZWdpc3RyeSBjYWNoZSAqLworZXh0ZXJuIGdib29sZWFuIF9nc3RfZGlzYWJsZV9yZWdpc3RyeV9jYWNoZTsKKyNlbmRpZgorCisvKiBwcm92aWRlIGlubGluZSBnc3RfZ192YWx1ZV9nZXRfZm9vX3VuY2hlY2tlZCgpLCB1c2VkIGluIGdzdHN0cnVjdHVyZS5jICovCisjZGVmaW5lIERFRklORV9JTkxJTkVfR19WQUxVRV9HRVRfVU5DSEVDS0VEKHJldF90eXBlLG5hbWVfdHlwZSx2X2ZpZWxkKSBcCitzdGF0aWMgaW5saW5lIHJldF90eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitnc3RfZ192YWx1ZV9nZXRfIyNuYW1lX3R5cGUjI191bmNoZWNrZWQgKGNvbnN0IEdWYWx1ZSAqdmFsdWUpICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHJldHVybiB2YWx1ZS0+ZGF0YVswXS52X2ZpZWxkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKK0RFRklORV9JTkxJTkVfR19WQUxVRV9HRVRfVU5DSEVDS0VEKGdib29sZWFuLGJvb2xlYW4sdl9pbnQpCitERUZJTkVfSU5MSU5FX0dfVkFMVUVfR0VUX1VOQ0hFQ0tFRChnaW50LGludCx2X2ludCkKK0RFRklORV9JTkxJTkVfR19WQUxVRV9HRVRfVU5DSEVDS0VEKGd1aW50LHVpbnQsdl91aW50KQorREVGSU5FX0lOTElORV9HX1ZBTFVFX0dFVF9VTkNIRUNLRUQoZ2ludDY0LGludDY0LHZfaW50NjQpCitERUZJTkVfSU5MSU5FX0dfVkFMVUVfR0VUX1VOQ0hFQ0tFRChndWludDY0LHVpbnQ2NCx2X3VpbnQ2NCkKK0RFRklORV9JTkxJTkVfR19WQUxVRV9HRVRfVU5DSEVDS0VEKGdmbG9hdCxmbG9hdCx2X2Zsb2F0KQorREVGSU5FX0lOTElORV9HX1ZBTFVFX0dFVF9VTkNIRUNLRUQoZ2RvdWJsZSxkb3VibGUsdl9kb3VibGUpCitERUZJTkVfSU5MSU5FX0dfVkFMVUVfR0VUX1VOQ0hFQ0tFRChjb25zdCBnY2hhciAqLHN0cmluZyx2X3BvaW50ZXIpCisKKworLyoqKiBkZWJ1Z2dpbmcgY2F0ZWdvcmllcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBHU1RfUkVNT1ZFX0dTVF9ERUJVRworCitHU1RfRVhQT1JUIEdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfR1NUX0lOSVQ7CitHU1RfRVhQT1JUIEdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfQVVUT1BMVUc7IC8qIEZJWE1FIDAuMTE6IHJlbW92ZT8gKi8KK0dTVF9FWFBPUlQgR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9BVVRPUExVR19BVFRFTVBUOyAvKiBGSVhNRSAwLjExOiByZW1vdmU/ICovCitHU1RfRVhQT1JUIEdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfUEFSRU5UQUdFOworR1NUX0VYUE9SVCBHc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX1NUQVRFUzsKK0dTVF9FWFBPUlQgR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9TQ0hFRFVMSU5HOworR1NUX0VYUE9SVCBHc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX0JVRkZFUjsKK0dTVF9FWFBPUlQgR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9CVUZGRVJfTElTVDsKK0dTVF9FWFBPUlQgR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9CVVM7CitHU1RfRVhQT1JUIEdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfQ0FQUzsKK0dTVF9FWFBPUlQgR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9DTE9DSzsKK0dTVF9FWFBPUlQgR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9FTEVNRU5UX1BBRFM7CitHU1RfRVhQT1JUIEdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfUEFEUzsKK0dTVF9FWFBPUlQgR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9QRVJGT1JNQU5DRTsKK0dTVF9FWFBPUlQgR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9QSVBFTElORTsKK0dTVF9FWFBPUlQgR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9QTFVHSU5fTE9BRElORzsKK0dTVF9FWFBPUlQgR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9QTFVHSU5fSU5GTzsKK0dTVF9FWFBPUlQgR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9QUk9QRVJUSUVTOworR1NUX0VYUE9SVCBHc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX05FR09USUFUSU9OOworR1NUX0VYUE9SVCBHc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX1JFRkNPVU5USU5HOworR1NUX0VYUE9SVCBHc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX0VSUk9SX1NZU1RFTTsKK0dTVF9FWFBPUlQgR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9FVkVOVDsKK0dTVF9FWFBPUlQgR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9NRVNTQUdFOworR1NUX0VYUE9SVCBHc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX1BBUkFNUzsKK0dTVF9FWFBPUlQgR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9DQUxMX1RSQUNFOworR1NUX0VYUE9SVCBHc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX1NJR05BTDsKK0dTVF9FWFBPUlQgR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9QUk9CRTsKK0dTVF9FWFBPUlQgR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9SRUdJU1RSWTsKK0dTVF9FWFBPUlQgR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9RT1M7CitHU1RfRVhQT1JUIEdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfVFlQRVM7IC8qIEZJWE1FIDAuMTE6IHJlbW92ZT8gKi8KKworLyogQ2F0ZWdvcmllcyB0aGF0IHNob3VsZCBiZSBjb21wbGV0ZWx5IHByaXZhdGUgdG8KKyAqIGxpYmdzdHJlYW1lciBzaG91bGQgYmUgZG9uZSBsaWtlIHRoaXM6ICovCisjZGVmaW5lIEdTVF9DQVRfUE9MTCBfcHJpdl9HU1RfQ0FUX1BPTEwKK2V4dGVybiBHc3REZWJ1Z0NhdGVnb3J5ICpfcHJpdl9HU1RfQ0FUX1BPTEw7CisKKyNlbHNlCisKKyNkZWZpbmUgR1NUX0NBVF9HU1RfSU5JVCAgICAgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9BVVRPUExVRyAgICAgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9BVVRPUExVR19BVFRFTVBUIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9QQVJFTlRBR0UgICAgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9TVEFURVMgICAgICAgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9TQ0hFRFVMSU5HICAgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9EQVRBRkxPVyAgICAgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9CVUZGRVIgICAgICAgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9CVUZGRVJfTElTVCAgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9CVVMgICAgICAgICAgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9DQVBTICAgICAgICAgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9DTE9DSyAgICAgICAgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9FTEVNRU5UX1BBRFMgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9QQURTICAgICAgICAgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9QRVJGT1JNQU5DRSAgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9QSVBFTElORSAgICAgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9QTFVHSU5fTE9BRElORyAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9QTFVHSU5fSU5GTyAgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9QUk9QRVJUSUVTICAgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9ORUdPVElBVElPTiAgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9SRUZDT1VOVElORyAgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9FUlJPUl9TWVNURU0gICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9FVkVOVCAgICAgICAgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9NRVNTQUdFICAgICAgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9QQVJBTVMgICAgICAgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9DQUxMX1RSQUNFICAgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9TSUdOQUwgICAgICAgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9QUk9CRSAgICAgICAgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9SRUdJU1RSWSAgICAgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9RT1MgICAgICAgICAgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9UWVBFUyAgICAgICAgICAgIE5VTEwKKyNkZWZpbmUgR1NUX0NBVF9QT0xMICAgICAgICAgICAgIE5VTEwKKworI2VuZGlmCisKKworR19FTkRfREVDTFMKKyNlbmRpZiAvKiBfX0dTVF9QUklWQVRFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGF0b21pY3F1ZXVlLmMgYi9nc3QvZ3N0YXRvbWljcXVldWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjIxYmU2Ci0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdGF0b21pY3F1ZXVlLmMKQEAgLTAsMCArMSw0MTkgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA5IEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisgKiAgICAgICAgICAgICAgIDIwMTEgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKyAqCisgKiBnc3RhdG9taWNxdWV1ZS5jOgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSAiZ3N0YXRvbWljcXVldWUuaCIKKyNpbmNsdWRlICJnbGliLWNvbXBhdC1wcml2YXRlLmgiCisKKy8qKgorICogU0VDVElPTjpnc3RhdG9taWNxdWV1ZQorICogQHRpdGxlOiBHc3RBdG9taWNRdWV1ZQorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBBbiBhdG9taWMgcXVldWUgaW1wbGVtZW50YXRpb24KKyAqCisgKiBUaGUgI0dzdEF0b21pY1F1ZXVlIG9iamVjdCBpbXBsZW1lbnRzIGEgcXVldWUgdGhhdCBjYW4gYmUgdXNlZCBmcm9tIG11bHRpcGxlCisgKiB0aHJlYWRzIHdpdGhvdXQgcGVyZm9ybWluZyBhbnkgYmxvY2tpbmcgb3BlcmF0aW9ucy4KKyAqCisgKiBTaW5jZTogMC4xMC4zMworICovCisKKy8qIEJ5IGRlZmF1bHQgdGhlIHF1ZXVlIHVzZXMgMiAqIHNpemVvZihncG9pbnRlcikgKiBjbHAyIChtYXhfaXRlbXMpIG9mCisgKiBtZW1vcnkuIGNscDIoeCkgaXMgdGhlIG5leHQgcG93ZXIgb2YgdHdvID49IHRoYW4geC4KKyAqCisgKiBUaGUgcXVldWUgY2FuIG9wZXJhdGUgaW4gbG93IG1lbW9yeSBtb2RlLCBpbiB3aGljaCBpdCBjb25zdW1lcyBhbG1vc3QKKyAqIGhhbGYgdGhlIG1lbW9yeSBhdCB0aGUgZXhwZW5zZSBvZiBleHRyYSBvdmVyaGVhZCBpbiB0aGUgcmVhZGVycy4gVGhpcworICogaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBiZWNhdXNlIGV2ZW4gd2l0aG91dCBMT1dfTUVNIG1vZGUsIHRoZSBtZW1vcnkKKyAqIGNvbnN1bXB0aW9uIGlzIHN0aWxsIGxvd2VyIHRoYW4gYSBwbGFpbiBHTGlzdC4KKyAqLworI3VuZGVmIExPV19NRU0KKwordHlwZWRlZiBzdHJ1Y3QgX0dzdEFRdWV1ZU1lbSBHc3RBUXVldWVNZW07CisKK3N0cnVjdCBfR3N0QVF1ZXVlTWVtCit7CisgIGdpbnQgc2l6ZTsKKyAgZ3BvaW50ZXIgKmFycmF5OworICB2b2xhdGlsZSBnaW50IGhlYWQ7CisgIHZvbGF0aWxlIGdpbnQgdGFpbDsKKyAgR3N0QVF1ZXVlTWVtICpuZXh0OworICBHc3RBUXVldWVNZW0gKmZyZWU7Cit9OworCitzdGF0aWMgZ3VpbnQKK2NscDIgKGd1aW50IG4pCit7CisgIGd1aW50IHJlcyA9IDE7CisKKyAgd2hpbGUgKHJlcyA8IG4pCisgICAgcmVzIDw8PSAxOworCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBHc3RBUXVldWVNZW0gKgorbmV3X3F1ZXVlX21lbSAoZ3VpbnQgc2l6ZSwgZ2ludCBwb3MpCit7CisgIEdzdEFRdWV1ZU1lbSAqbWVtOworCisgIG1lbSA9IGdfbmV3IChHc3RBUXVldWVNZW0sIDEpOworCisgIC8qIHdlIGtlZXAgdGhlIHNpemUgYXMgYSBtYXNrIGZvciBwZXJmb3JtYW5jZSAqLworICBtZW0tPnNpemUgPSBjbHAyIChNQVggKHNpemUsIDE2KSkgLSAxOworICBtZW0tPmFycmF5ID0gZ19uZXcwIChncG9pbnRlciwgbWVtLT5zaXplICsgMSk7CisgIG1lbS0+aGVhZCA9IHBvczsKKyAgbWVtLT50YWlsID0gcG9zOworICBtZW0tPm5leHQgPSBOVUxMOworICBtZW0tPmZyZWUgPSBOVUxMOworCisgIHJldHVybiBtZW07Cit9CisKK3N0YXRpYyB2b2lkCitmcmVlX3F1ZXVlX21lbSAoR3N0QVF1ZXVlTWVtICogbWVtKQoreworICBnX2ZyZWUgKG1lbS0+YXJyYXkpOworICBnX2ZyZWUgKG1lbSk7Cit9CisKK3N0cnVjdCBfR3N0QXRvbWljUXVldWUKK3sKKyAgdm9sYXRpbGUgZ2ludCByZWZjb3VudDsKKyNpZmRlZiBMT1dfTUVNCisgIGdpbnQgbnVtX3JlYWRlcnM7CisjZW5kaWYKKyAgR3N0QVF1ZXVlTWVtICpoZWFkX21lbTsKKyAgR3N0QVF1ZXVlTWVtICp0YWlsX21lbTsKKyAgR3N0QVF1ZXVlTWVtICpmcmVlX2xpc3Q7Cit9OworCitzdGF0aWMgdm9pZAorYWRkX3RvX2ZyZWVfbGlzdCAoR3N0QXRvbWljUXVldWUgKiBxdWV1ZSwgR3N0QVF1ZXVlTWVtICogbWVtKQoreworICBkbyB7CisgICAgbWVtLT5mcmVlID0gZ19hdG9taWNfcG9pbnRlcl9nZXQgKCZxdWV1ZS0+ZnJlZV9saXN0KTsKKyAgfSB3aGlsZSAoIUdfQVRPTUlDX1BPSU5URVJfQ09NUEFSRV9BTkRfRVhDSEFOR0UgKCZxdWV1ZS0+ZnJlZV9saXN0LAorICAgICAgICAgIG1lbS0+ZnJlZSwgbWVtKSk7Cit9CisKK3N0YXRpYyB2b2lkCitjbGVhcl9mcmVlX2xpc3QgKEdzdEF0b21pY1F1ZXVlICogcXVldWUpCit7CisgIEdzdEFRdWV1ZU1lbSAqZnJlZV9saXN0OworCisgIC8qIHRha2UgdGhlIGZyZWUgbGlzdCBhbmQgcmVwbGFjZSB3aXRoIE5VTEwgKi8KKyAgZG8geworICAgIGZyZWVfbGlzdCA9IGdfYXRvbWljX3BvaW50ZXJfZ2V0ICgmcXVldWUtPmZyZWVfbGlzdCk7CisgICAgaWYgKGZyZWVfbGlzdCA9PSBOVUxMKQorICAgICAgcmV0dXJuOworICB9IHdoaWxlICghR19BVE9NSUNfUE9JTlRFUl9DT01QQVJFX0FORF9FWENIQU5HRSAoJnF1ZXVlLT5mcmVlX2xpc3QsIGZyZWVfbGlzdCwKKyAgICAgICAgICBOVUxMKSk7CisKKyAgd2hpbGUgKGZyZWVfbGlzdCkgeworICAgIEdzdEFRdWV1ZU1lbSAqbmV4dCA9IGZyZWVfbGlzdC0+ZnJlZTsKKworICAgIGZyZWVfcXVldWVfbWVtIChmcmVlX2xpc3QpOworCisgICAgZnJlZV9saXN0ID0gbmV4dDsKKyAgfQorfQorCisvKioKKyAqIGdzdF9hdG9taWNfcXVldWVfbmV3OgorICogQGluaXRpYWxfc2l6ZTogaW5pdGlhbCBxdWV1ZSBzaXplCisgKgorICogQ3JlYXRlIGEgbmV3IGF0b21pYyBxdWV1ZSBpbnN0YW5jZS4gQGluaXRpYWxfc2l6ZSB3aWxsIGJlIHJvdW5kZWQgdXAgdG8gdGhlCisgKiBuZWFyZXN0IHBvd2VyIG9mIDIgYW5kIHVzZWQgYXMgdGhlIGluaXRpYWwgc2l6ZSBvZiB0aGUgcXVldWUuCisgKgorICogUmV0dXJuczogYSBuZXcgI0dzdEF0b21pY1F1ZXVlCisgKgorICogU2luY2U6IDAuMTAuMzMKKyAqLworR3N0QXRvbWljUXVldWUgKgorZ3N0X2F0b21pY19xdWV1ZV9uZXcgKGd1aW50IGluaXRpYWxfc2l6ZSkKK3sKKyAgR3N0QXRvbWljUXVldWUgKnF1ZXVlOworCisgIHF1ZXVlID0gZ19uZXcgKEdzdEF0b21pY1F1ZXVlLCAxKTsKKworICBxdWV1ZS0+cmVmY291bnQgPSAxOworI2lmZGVmIExPV19NRU0KKyAgcXVldWUtPm51bV9yZWFkZXJzID0gMDsKKyNlbmRpZgorICBxdWV1ZS0+aGVhZF9tZW0gPSBxdWV1ZS0+dGFpbF9tZW0gPSBuZXdfcXVldWVfbWVtIChpbml0aWFsX3NpemUsIDApOworICBxdWV1ZS0+ZnJlZV9saXN0ID0gTlVMTDsKKworICByZXR1cm4gcXVldWU7Cit9CisKKy8qKgorICogZ3N0X2F0b21pY19xdWV1ZV9yZWY6CisgKiBAcXVldWU6IGEgI0dzdEF0b21pY1F1ZXVlCisgKgorICogSW5jcmVhc2UgdGhlIHJlZmNvdW50IG9mIEBxdWV1ZS4KKyAqCisgKiBTaW5jZTogMC4xMC4zMworICovCit2b2lkCitnc3RfYXRvbWljX3F1ZXVlX3JlZiAoR3N0QXRvbWljUXVldWUgKiBxdWV1ZSkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAocXVldWUgIT0gTlVMTCk7CisKKyAgZ19hdG9taWNfaW50X2luYyAoJnF1ZXVlLT5yZWZjb3VudCk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfYXRvbWljX3F1ZXVlX2ZyZWUgKEdzdEF0b21pY1F1ZXVlICogcXVldWUpCit7CisgIGZyZWVfcXVldWVfbWVtIChxdWV1ZS0+aGVhZF9tZW0pOworICBpZiAocXVldWUtPmhlYWRfbWVtICE9IHF1ZXVlLT50YWlsX21lbSkKKyAgICBmcmVlX3F1ZXVlX21lbSAocXVldWUtPnRhaWxfbWVtKTsKKyAgY2xlYXJfZnJlZV9saXN0IChxdWV1ZSk7CisgIGdfZnJlZSAocXVldWUpOworfQorCisvKioKKyAqIGdzdF9hdG9taWNfcXVldWVfdW5yZWY6CisgKiBAcXVldWU6IGEgI0dzdEF0b21pY1F1ZXVlCisgKgorICogVW5yZWYgQHF1ZXVlIGFuZCBmcmVlIHRoZSBtZW1vcnkgd2hlbiB0aGUgcmVmY291bnQgcmVhY2hlcyAwLgorICoKKyAqIFNpbmNlOiAwLjEwLjMzCisgKi8KK3ZvaWQKK2dzdF9hdG9taWNfcXVldWVfdW5yZWYgKEdzdEF0b21pY1F1ZXVlICogcXVldWUpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKHF1ZXVlICE9IE5VTEwpOworCisgIGlmIChnX2F0b21pY19pbnRfZGVjX2FuZF90ZXN0ICgmcXVldWUtPnJlZmNvdW50KSkKKyAgICBnc3RfYXRvbWljX3F1ZXVlX2ZyZWUgKHF1ZXVlKTsKK30KKworLyoqCisgKiBnc3RfYXRvbWljX3F1ZXVlX3BlZWs6CisgKiBAcXVldWU6IGEgI0dzdEF0b21pY1F1ZXVlCisgKgorICogUGVlayB0aGUgaGVhZCBlbGVtZW50IG9mIHRoZSBxdWV1ZSB3aXRob3V0IHJlbW92aW5nIGl0IGZyb20gdGhlIHF1ZXVlLgorICoKKyAqIFJldHVybnM6IHRoZSBoZWFkIGVsZW1lbnQgb2YgQHF1ZXVlIG9yIE5VTEwgd2hlbiB0aGUgcXVldWUgaXMgZW1wdHkuCisgKgorICogU2luY2U6IDAuMTAuMzMKKyAqLworZ3BvaW50ZXIKK2dzdF9hdG9taWNfcXVldWVfcGVlayAoR3N0QXRvbWljUXVldWUgKiBxdWV1ZSkKK3sKKyAgR3N0QVF1ZXVlTWVtICpoZWFkX21lbTsKKyAgZ2ludCBoZWFkLCB0YWlsLCBzaXplOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChxdWV1ZSAhPSBOVUxMLCBOVUxMKTsKKworICB3aGlsZSAoVFJVRSkgeworICAgIEdzdEFRdWV1ZU1lbSAqbmV4dDsKKworICAgIGhlYWRfbWVtID0gZ19hdG9taWNfcG9pbnRlcl9nZXQgKCZxdWV1ZS0+aGVhZF9tZW0pOworCisgICAgaGVhZCA9IGdfYXRvbWljX2ludF9nZXQgKCZoZWFkX21lbS0+aGVhZCk7CisgICAgdGFpbCA9IGdfYXRvbWljX2ludF9nZXQgKCZoZWFkX21lbS0+dGFpbCk7CisgICAgc2l6ZSA9IGhlYWRfbWVtLT5zaXplOworCisgICAgLyogd2hlbiB3ZSBhcmUgbm90IGVtcHR5LCB3ZSBjYW4gY29udGludWUgKi8KKyAgICBpZiAoR19MSUtFTFkgKGhlYWQgIT0gdGFpbCkpCisgICAgICBicmVhazsKKworICAgIC8qIGVsc2UgYXJyYXkgZW1wdHksIHRyeSB0byB0YWtlIG5leHQgKi8KKyAgICBuZXh0ID0gZ19hdG9taWNfcG9pbnRlcl9nZXQgKCZoZWFkX21lbS0+bmV4dCk7CisgICAgaWYgKG5leHQgPT0gTlVMTCkKKyAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogbm93IHdlIHRyeSB0byBtb3ZlIHRoZSBuZXh0IGFycmF5IGFzIHRoZSBoZWFkIG1lbW9yeS4gSWYgd2UgZmFpbCB0byBkbyB0aGF0LAorICAgICAqIHNvbWUgb3RoZXIgcmVhZGVyIG1hbmFnZWQgdG8gZG8gaXQgZmlyc3QgYW5kIHdlIHJldHJ5ICovCisgICAgaWYgKCFHX0FUT01JQ19QT0lOVEVSX0NPTVBBUkVfQU5EX0VYQ0hBTkdFICgmcXVldWUtPmhlYWRfbWVtLCBoZWFkX21lbSwKKyAgICAgICAgICAgIG5leHQpKQorICAgICAgY29udGludWU7CisKKyAgICAvKiB3aGVuIHdlIG1hbmFnZWQgdG8gc3dpbmcgdGhlIGhlYWQgcG9pbnRlciB0aGUgb2xkIGhlYWQgaXMgbm93CisgICAgICogdXNlbGVzcyBhbmQgd2UgYWRkIGl0IHRvIHRoZSBmcmVlbGlzdC4gV2UgY2FuJ3QgZnJlZSB0aGUgbWVtb3J5IHlldAorICAgICAqIGJlY2F1c2Ugd2UgZmlyc3QgbmVlZCB0byBtYWtlIHN1cmUgbm8gcmVhZGVyIGlzIGFjY2Vzc2luZyBpdCBhbnltb3JlLiAqLworICAgIGFkZF90b19mcmVlX2xpc3QgKHF1ZXVlLCBoZWFkX21lbSk7CisgIH0KKworICByZXR1cm4gaGVhZF9tZW0tPmFycmF5W2hlYWQgJiBzaXplXTsKK30KKworLyoqCisgKiBnc3RfYXRvbWljX3F1ZXVlX3BvcDoKKyAqIEBxdWV1ZTogYSAjR3N0QXRvbWljUXVldWUKKyAqCisgKiBHZXQgdGhlIGhlYWQgZWxlbWVudCBvZiB0aGUgcXVldWUuCisgKgorICogUmV0dXJuczogdGhlIGhlYWQgZWxlbWVudCBvZiBAcXVldWUgb3IgTlVMTCB3aGVuIHRoZSBxdWV1ZSBpcyBlbXB0eS4KKyAqCisgKiBTaW5jZTogMC4xMC4zMworICovCitncG9pbnRlcgorZ3N0X2F0b21pY19xdWV1ZV9wb3AgKEdzdEF0b21pY1F1ZXVlICogcXVldWUpCit7CisgIGdwb2ludGVyIHJldDsKKyAgR3N0QVF1ZXVlTWVtICpoZWFkX21lbTsKKyAgZ2ludCBoZWFkLCB0YWlsLCBzaXplOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChxdWV1ZSAhPSBOVUxMLCBOVUxMKTsKKworI2lmZGVmIExPV19NRU0KKyAgZ19hdG9taWNfaW50X2luYyAoJnF1ZXVlLT5udW1fcmVhZGVycyk7CisjZW5kaWYKKworICBkbyB7CisgICAgd2hpbGUgKFRSVUUpIHsKKyAgICAgIEdzdEFRdWV1ZU1lbSAqbmV4dDsKKworICAgICAgaGVhZF9tZW0gPSBnX2F0b21pY19wb2ludGVyX2dldCAoJnF1ZXVlLT5oZWFkX21lbSk7CisKKyAgICAgIGhlYWQgPSBnX2F0b21pY19pbnRfZ2V0ICgmaGVhZF9tZW0tPmhlYWQpOworICAgICAgdGFpbCA9IGdfYXRvbWljX2ludF9nZXQgKCZoZWFkX21lbS0+dGFpbCk7CisgICAgICBzaXplID0gaGVhZF9tZW0tPnNpemU7CisKKyAgICAgIC8qIHdoZW4gd2UgYXJlIG5vdCBlbXB0eSwgd2UgY2FuIGNvbnRpbnVlICovCisgICAgICBpZiAoR19MSUtFTFkgKGhlYWQgIT0gdGFpbCkpCisgICAgICAgIGJyZWFrOworCisgICAgICAvKiBlbHNlIGFycmF5IGVtcHR5LCB0cnkgdG8gdGFrZSBuZXh0ICovCisgICAgICBuZXh0ID0gZ19hdG9taWNfcG9pbnRlcl9nZXQgKCZoZWFkX21lbS0+bmV4dCk7CisgICAgICBpZiAobmV4dCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgLyogbm93IHdlIHRyeSB0byBtb3ZlIHRoZSBuZXh0IGFycmF5IGFzIHRoZSBoZWFkIG1lbW9yeS4gSWYgd2UgZmFpbCB0byBkbyB0aGF0LAorICAgICAgICogc29tZSBvdGhlciByZWFkZXIgbWFuYWdlZCB0byBkbyBpdCBmaXJzdCBhbmQgd2UgcmV0cnkgKi8KKyAgICAgIGlmICghR19BVE9NSUNfUE9JTlRFUl9DT01QQVJFX0FORF9FWENIQU5HRSAoJnF1ZXVlLT5oZWFkX21lbSwgaGVhZF9tZW0sCisgICAgICAgICAgICAgIG5leHQpKQorICAgICAgICBjb250aW51ZTsKKworICAgICAgLyogd2hlbiB3ZSBtYW5hZ2VkIHRvIHN3aW5nIHRoZSBoZWFkIHBvaW50ZXIgdGhlIG9sZCBoZWFkIGlzIG5vdworICAgICAgICogdXNlbGVzcyBhbmQgd2UgYWRkIGl0IHRvIHRoZSBmcmVlbGlzdC4gV2UgY2FuJ3QgZnJlZSB0aGUgbWVtb3J5IHlldAorICAgICAgICogYmVjYXVzZSB3ZSBmaXJzdCBuZWVkIHRvIG1ha2Ugc3VyZSBubyByZWFkZXIgaXMgYWNjZXNzaW5nIGl0IGFueW1vcmUuICovCisgICAgICBhZGRfdG9fZnJlZV9saXN0IChxdWV1ZSwgaGVhZF9tZW0pOworICAgIH0KKworICAgIHJldCA9IGhlYWRfbWVtLT5hcnJheVtoZWFkICYgc2l6ZV07CisgIH0gd2hpbGUgKCFnX2F0b21pY19pbnRfY29tcGFyZV9hbmRfZXhjaGFuZ2UgKCZoZWFkX21lbS0+aGVhZCwgaGVhZCwKKyAgICAgICAgICBoZWFkICsgMSkpOworCisjaWZkZWYgTE9XX01FTQorICAvKiBkZWNyZW1lbnQgbnVtYmVyIG9mIHJlYWRlcnMsIHdoZW4gd2UgcmVhY2ggMCByZWFkZXJzIHdlIGNhbiBiZSBzdXJlIHRoYXQKKyAgICogbm9uZSBpcyBhY2Nlc3NpbmcgdGhlIG1lbW9yeSBpbiB0aGUgZnJlZSBsaXN0IGFuZCB3ZSBjYW4gdHJ5IHRvIGNsZWFuIHVwICovCisgIGlmIChnX2F0b21pY19pbnRfZGVjX2FuZF90ZXN0ICgmcXVldWUtPm51bV9yZWFkZXJzKSkKKyAgICBjbGVhcl9mcmVlX2xpc3QgKHF1ZXVlKTsKKyNlbmRpZgorCisgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICogZ3N0X2F0b21pY19xdWV1ZV9wdXNoOgorICogQHF1ZXVlOiBhICNHc3RBdG9taWNRdWV1ZQorICogQGRhdGE6IHRoZSBkYXRhCisgKgorICogQXBwZW5kIEBkYXRhIHRvIHRoZSB0YWlsIG9mIHRoZSBxdWV1ZS4KKyAqCisgKiBTaW5jZTogMC4xMC4zMworICovCit2b2lkCitnc3RfYXRvbWljX3F1ZXVlX3B1c2ggKEdzdEF0b21pY1F1ZXVlICogcXVldWUsIGdwb2ludGVyIGRhdGEpCit7CisgIEdzdEFRdWV1ZU1lbSAqdGFpbF9tZW07CisgIGdpbnQgaGVhZCwgdGFpbCwgc2l6ZTsKKworICBnX3JldHVybl9pZl9mYWlsIChxdWV1ZSAhPSBOVUxMKTsKKworICBkbyB7CisgICAgd2hpbGUgKFRSVUUpIHsKKyAgICAgIEdzdEFRdWV1ZU1lbSAqbWVtOworCisgICAgICB0YWlsX21lbSA9IGdfYXRvbWljX3BvaW50ZXJfZ2V0ICgmcXVldWUtPnRhaWxfbWVtKTsKKyAgICAgIGhlYWQgPSBnX2F0b21pY19pbnRfZ2V0ICgmdGFpbF9tZW0tPmhlYWQpOworICAgICAgdGFpbCA9IGdfYXRvbWljX2ludF9nZXQgKCZ0YWlsX21lbS0+dGFpbCk7CisgICAgICBzaXplID0gdGFpbF9tZW0tPnNpemU7CisKKyAgICAgIC8qIHdlJ3JlIG5vdCBmdWxsLCBjb250aW51ZSAqLworICAgICAgaWYgKHRhaWwgLSBoZWFkIDw9IHNpemUpCisgICAgICAgIGJyZWFrOworCisgICAgICAvKiBlbHNlIHdlIG5lZWQgdG8gZ3JvdyB0aGUgYXJyYXksIHdlIHN0b3JlIGEgbWFzayBzbyB3ZSBoYXZlIHRvIGFkZCAxICovCisgICAgICBtZW0gPSBuZXdfcXVldWVfbWVtICgoc2l6ZSA8PCAxKSArIDEsIHRhaWwpOworCisgICAgICAvKiB0cnkgdG8gbWFrZSBvdXIgbmV3IGFycmF5IHZpc2libGUgdG8gb3RoZXIgd3JpdGVycyAqLworICAgICAgaWYgKCFHX0FUT01JQ19QT0lOVEVSX0NPTVBBUkVfQU5EX0VYQ0hBTkdFICgmcXVldWUtPnRhaWxfbWVtLCB0YWlsX21lbSwKKyAgICAgICAgICAgICAgbWVtKSkgeworICAgICAgICAvKiB3ZSB0cmllZCB0byBzd2FwIHRoZSBuZXcgd3JpdGVyIGFycmF5IGJ1dCBzb21ldGhpbmcgY2hhbmdlZC4gVGhpcyBpcworICAgICAgICAgKiBiZWNhdXNlIHNvbWUgb3RoZXIgd3JpdGVyIGJlYXQgdXMgdG8gaXQsIHdlIGZyZWUgb3VyIG1lbW9yeSBhbmQgdHJ5CisgICAgICAgICAqIGFnYWluICovCisgICAgICAgIGZyZWVfcXVldWVfbWVtIChtZW0pOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIC8qIG1ha2Ugc3VyZSB0aGF0IHJlYWRlcnMgY2FuIGZpbmQgb3VyIG5ldyBhcnJheSBhcyB3ZWxsLiBUaGUgb25lIHdobworICAgICAgICogbWFuYWdlcyB0byBzd2FwIHRoZSBwb2ludGVyIGlzIHRoZSBvbmx5IG9uZSB3aG8gY2FuIHNldCB0aGUgbmV4dAorICAgICAgICogcG9pbnRlciB0byB0aGUgbmV3IGFycmF5ICovCisgICAgICBnX2F0b21pY19wb2ludGVyX3NldCAoJnRhaWxfbWVtLT5uZXh0LCBtZW0pOworICAgIH0KKyAgfSB3aGlsZSAoIWdfYXRvbWljX2ludF9jb21wYXJlX2FuZF9leGNoYW5nZSAoJnRhaWxfbWVtLT50YWlsLCB0YWlsLAorICAgICAgICAgIHRhaWwgKyAxKSk7CisKKyAgdGFpbF9tZW0tPmFycmF5W3RhaWwgJiBzaXplXSA9IGRhdGE7Cit9CisKKy8qKgorICogZ3N0X2F0b21pY19xdWV1ZV9sZW5ndGg6CisgKiBAcXVldWU6IGEgI0dzdEF0b21pY1F1ZXVlCisgKgorICogR2V0IHRoZSBhbW91bnQgb2YgaXRlbXMgaW4gdGhlIHF1ZXVlLgorICoKKyAqIFJldHVybnM6IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHF1ZXVlLgorICoKKyAqIFNpbmNlOiAwLjEwLjMzCisgKi8KK2d1aW50Citnc3RfYXRvbWljX3F1ZXVlX2xlbmd0aCAoR3N0QXRvbWljUXVldWUgKiBxdWV1ZSkKK3sKKyAgR3N0QVF1ZXVlTWVtICpoZWFkX21lbSwgKnRhaWxfbWVtOworICBnaW50IGhlYWQsIHRhaWw7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHF1ZXVlICE9IE5VTEwsIDApOworCisjaWZkZWYgTE9XX01FTQorICBnX2F0b21pY19pbnRfaW5jICgmcXVldWUtPm51bV9yZWFkZXJzKTsKKyNlbmRpZgorCisgIGhlYWRfbWVtID0gZ19hdG9taWNfcG9pbnRlcl9nZXQgKCZxdWV1ZS0+aGVhZF9tZW0pOworICBoZWFkID0gZ19hdG9taWNfaW50X2dldCAoJmhlYWRfbWVtLT5oZWFkKTsKKworICB0YWlsX21lbSA9IGdfYXRvbWljX3BvaW50ZXJfZ2V0ICgmcXVldWUtPnRhaWxfbWVtKTsKKyAgdGFpbCA9IGdfYXRvbWljX2ludF9nZXQgKCZ0YWlsX21lbS0+dGFpbCk7CisKKyNpZmRlZiBMT1dfTUVNCisgIGlmIChnX2F0b21pY19pbnRfZGVjX2FuZF90ZXN0ICgmcXVldWUtPm51bV9yZWFkZXJzKSkKKyAgICBjbGVhcl9mcmVlX2xpc3QgKHF1ZXVlKTsKKyNlbmRpZgorCisgIHJldHVybiB0YWlsIC0gaGVhZDsKK30KZGlmZiAtLWdpdCBhL2dzdC9nc3RhdG9taWNxdWV1ZS5oIGIvZ3N0L2dzdGF0b21pY3F1ZXVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ3MTAxMAotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RhdG9taWNxdWV1ZS5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKyAqICAgICAgICAgICAoQykgMjAxMSBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorICoKKyAqIGdzdGF0b21pY3F1ZXVlLmg6CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGdsaWIuaD4KKworI2lmbmRlZiBfX0dTVF9BVE9NSUNfUVVFVUVfSF9fCisjZGVmaW5lIF9fR1NUX0FUT01JQ19RVUVVRV9IX18KKworR19CRUdJTl9ERUNMUworCisvKioKKyAqIEdzdEF0b21pY1F1ZXVlOgorICoKKyAqIE9wYXF1ZSBhdG9taWMgZGF0YSBxdWV1ZS4KKyAqCisgKiBVc2UgdGhlIGFjZXNzb3IgZnVuY3Rpb25zIHRvIGdldCB0aGUgc3RvcmVkIHZhbHVlcy4KKyAqCisgKiBTaW5jZTogMC4xMC4zMworICovCit0eXBlZGVmIHN0cnVjdCBfR3N0QXRvbWljUXVldWUgR3N0QXRvbWljUXVldWU7CisKKworR3N0QXRvbWljUXVldWUgKiAgIGdzdF9hdG9taWNfcXVldWVfbmV3ICAgICAgICAgKGd1aW50IGluaXRpYWxfc2l6ZSk7CisKK3ZvaWQgICAgICAgICAgICAgICBnc3RfYXRvbWljX3F1ZXVlX3JlZiAgICAgICAgIChHc3RBdG9taWNRdWV1ZSAqIHF1ZXVlKTsKK3ZvaWQgICAgICAgICAgICAgICBnc3RfYXRvbWljX3F1ZXVlX3VucmVmICAgICAgIChHc3RBdG9taWNRdWV1ZSAqIHF1ZXVlKTsKKwordm9pZCAgICAgICAgICAgICAgIGdzdF9hdG9taWNfcXVldWVfcHVzaCAgICAgICAgKEdzdEF0b21pY1F1ZXVlKiBxdWV1ZSwgZ3BvaW50ZXIgZGF0YSk7CitncG9pbnRlciAgICAgICAgICAgZ3N0X2F0b21pY19xdWV1ZV9wb3AgICAgICAgICAoR3N0QXRvbWljUXVldWUqIHF1ZXVlKTsKK2dwb2ludGVyICAgICAgICAgICBnc3RfYXRvbWljX3F1ZXVlX3BlZWsgICAgICAgIChHc3RBdG9taWNRdWV1ZSogcXVldWUpOworCitndWludCAgICAgICAgICAgICAgZ3N0X2F0b21pY19xdWV1ZV9sZW5ndGggICAgICAoR3N0QXRvbWljUXVldWUgKiBxdWV1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9BVE9NSUNfUVVFVUVfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0YmluLmMgYi9nc3QvZ3N0YmluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVlYmMwZgotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RiaW4uYwpAQCAtMCwwICsxLDM4ODkgQEAKKy8qIEdTdHJlYW1lcgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwNCBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorICoKKyAqIGdzdGJpbi5jOiBHc3RCaW4gY29udGFpbmVyIG9iamVjdCBhbmQgc3VwcG9ydCBjb2RlCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogTVQgc2FmZS4KKyAqLworCisvKioKKyAqIFNFQ1RJT046Z3N0YmluCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEJhc2UgY2xhc3MgYW5kIGVsZW1lbnQgdGhhdCBjYW4gY29udGFpbiBvdGhlciBlbGVtZW50cworICoKKyAqICNHc3RCaW4gaXMgYW4gZWxlbWVudCB0aGF0IGNhbiBjb250YWluIG90aGVyICNHc3RFbGVtZW50LCBhbGxvd2luZyB0aGVtIHRvIGJlCisgKiBtYW5hZ2VkIGFzIGEgZ3JvdXAuCisgKiBQYWRzIGZyb20gdGhlIGNoaWxkIGVsZW1lbnRzIGNhbiBiZSBnaG9zdGVkIHRvIHRoZSBiaW4sIHNlZSAjR3N0R2hvc3RQYWQuCisgKiBUaGlzIG1ha2VzIHRoZSBiaW4gbG9vayBsaWtlIGFueSBvdGhlciBlbGVtZW50cyBhbmQgZW5hYmxlcyBjcmVhdGlvbiBvZgorICogaGlnaGVyLWxldmVsIGFic3RyYWN0aW9uIGVsZW1lbnRzLgorICoKKyAqIEEgbmV3ICNHc3RCaW4gaXMgY3JlYXRlZCB3aXRoIGdzdF9iaW5fbmV3KCkuIFVzZSBhICNHc3RQaXBlbGluZSBpbnN0ZWFkIGlmIHlvdQorICogd2FudCB0byBjcmVhdGUgYSB0b3BsZXZlbCBiaW4gYmVjYXVzZSBhIG5vcm1hbCBiaW4gZG9lc24ndCBoYXZlIGEgYnVzIG9yCisgKiBoYW5kbGUgY2xvY2sgZGlzdHJpYnV0aW9uIG9mIGl0cyBvd24uCisgKgorICogQWZ0ZXIgdGhlIGJpbiBoYXMgYmVlbiBjcmVhdGVkIHlvdSB3aWxsIHR5cGljYWxseSBhZGQgZWxlbWVudHMgdG8gaXQgd2l0aAorICogZ3N0X2Jpbl9hZGQoKS4gWW91IGNhbiByZW1vdmUgZWxlbWVudHMgd2l0aCBnc3RfYmluX3JlbW92ZSgpLgorICoKKyAqIEFuIGVsZW1lbnQgY2FuIGJlIHJldHJpZXZlZCBmcm9tIGEgYmluIHdpdGggZ3N0X2Jpbl9nZXRfYnlfbmFtZSgpLCB1c2luZyB0aGUKKyAqIGVsZW1lbnRzIG5hbWUuIGdzdF9iaW5fZ2V0X2J5X25hbWVfcmVjdXJzZV91cCgpIGlzIG1haW5seSB1c2VkIGZvciBpbnRlcm5hbAorICogcHVycG9zZXMgYW5kIHdpbGwgcXVlcnkgdGhlIHBhcmVudCBiaW5zIHdoZW4gdGhlIGVsZW1lbnQgaXMgbm90IGZvdW5kIGluIHRoZQorICogY3VycmVudCBiaW4uCisgKgorICogQW4gaXRlcmF0b3Igb2YgZWxlbWVudHMgaW4gYSBiaW4gY2FuIGJlIHJldHJpZXZlZCB3aXRoCisgKiBnc3RfYmluX2l0ZXJhdGVfZWxlbWVudHMoKS4gVmFyaW91cyBvdGhlciBpdGVyYXRvcnMgZXhpc3QgdG8gcmV0cmlldmUgdGhlCisgKiBlbGVtZW50cyBpbiBhIGJpbi4KKyAqCisgKiBnc3Rfb2JqZWN0X3VucmVmKCkgaXMgdXNlZCB0byBkcm9wIHlvdXIgcmVmZXJlbmNlIHRvIHRoZSBiaW4uCisgKgorICogVGhlICNHc3RCaW46OmVsZW1lbnQtYWRkZWQgc2lnbmFsIGlzIGZpcmVkIHdoZW5ldmVyIGEgbmV3IGVsZW1lbnQgaXMgYWRkZWQgdG8KKyAqIHRoZSBiaW4uIExpa2V3aXNlIHRoZSAjR3N0QmluOjplbGVtZW50LXJlbW92ZWQgc2lnbmFsIGlzIGZpcmVkIHdoZW5ldmVyIGFuCisgKiBlbGVtZW50IGlzIHJlbW92ZWQgZnJvbSB0aGUgYmluLgorICoKKyAqIDxyZWZzZWN0Mj48dGl0bGU+Tm90ZXM8L3RpdGxlPgorICogPHBhcmE+CisgKiBBICNHc3RCaW4gaW50ZXJuYWxseSBpbnRlcmNlcHRzIGV2ZXJ5ICNHc3RNZXNzYWdlIHBvc3RlZCBieSBpdHMgY2hpbGRyZW4gYW5kCisgKiBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgZGVmYXVsdCBiZWhhdmlvdXIgZm9yIGVhY2ggb2YgdGhlbToKKyAqIDx2YXJpYWJsZWxpc3Q+CisgKiAgIDx2YXJsaXN0ZW50cnk+CisgKiAgICAgPHRlcm0+R1NUX01FU1NBR0VfRU9TPC90ZXJtPgorICogICAgIDxsaXN0aXRlbT48cGFyYT5UaGlzIG1lc3NhZ2UgaXMgb25seSBwb3N0ZWQgYnkgc2lua3MgaW4gdGhlIFBMQVlJTkcKKyAqICAgICBzdGF0ZS4gSWYgYWxsIHNpbmtzIHBvc3RlZCB0aGUgRU9TIG1lc3NhZ2UsIHRoaXMgYmluIHdpbGwgcG9zdCBhbmQgRU9TCisgKiAgICAgbWVzc2FnZSB1cHdhcmRzLjwvcGFyYT48L2xpc3RpdGVtPgorICogICA8L3Zhcmxpc3RlbnRyeT4KKyAqICAgPHZhcmxpc3RlbnRyeT4KKyAqICAgICA8dGVybT5HU1RfTUVTU0FHRV9TRUdNRU5UX1NUQVJUPC90ZXJtPgorICogICAgIDxsaXN0aXRlbT48cGFyYT5qdXN0IGNvbGxlY3RlZCBhbmQgbmV2ZXIgZm9yd2FyZGVkIHVwd2FyZHMuCisgKiAgICAgVGhlIG1lc3NhZ2VzIGFyZSB1c2VkIHRvIGRlY2lkZSB3aGVuIGFsbCBlbGVtZW50cyBoYXZlIGNvbXBsZXRlZCBwbGF5YmFjaworICogICAgIG9mIHRoZWlyIHNlZ21lbnQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDwvdmFybGlzdGVudHJ5PgorICogICA8dmFybGlzdGVudHJ5PgorICogICAgIDx0ZXJtPkdTVF9NRVNTQUdFX1NFR01FTlRfRE9ORTwvdGVybT4KKyAqICAgICA8bGlzdGl0ZW0+PHBhcmE+IElzIHBvc3RlZCBieSAjR3N0QmluIHdoZW4gYWxsIGVsZW1lbnRzIHRoYXQgcG9zdGVkCisgKiAgICAgYSBTRUdNRU5UX1NUQVJUIGhhdmUgcG9zdGVkIGEgU0VHTUVOVF9ET05FLjwvcGFyYT48L2xpc3RpdGVtPgorICogICA8L3Zhcmxpc3RlbnRyeT4KKyAqICAgPHZhcmxpc3RlbnRyeT4KKyAqICAgICA8dGVybT5HU1RfTUVTU0FHRV9EVVJBVElPTjwvdGVybT4KKyAqICAgICA8bGlzdGl0ZW0+PHBhcmE+IElzIHBvc3RlZCBieSBhbiBlbGVtZW50IHRoYXQgZGV0ZWN0ZWQgYSBjaGFuZ2UKKyAqICAgICBpbiB0aGUgc3RyZWFtIGR1cmF0aW9uLiBUaGUgZGVmYXVsdCBiaW4gYmVoYXZpb3VyIGlzIHRvIGNsZWFyIGFueQorICogICAgIGNhY2hlZCBkdXJhdGlvbiB2YWx1ZXMgc28gdGhhdCB0aGUgbmV4dCBkdXJhdGlvbiBxdWVyeSB3aWxsIHBlcmZvcm0KKyAqICAgICBhIGZ1bGwgZHVyYXRpb24gcmVjYWxjdWxhdGlvbi4gVGhlIGR1cmF0aW9uIGNoYW5nZSBpcyBwb3N0ZWQgdG8gdGhlCisgKiAgICAgYXBwbGljYXRpb24gc28gdGhhdCBpdCBjYW4gcmVmZXRjaCB0aGUgbmV3IGR1cmF0aW9uIHdpdGggYSBkdXJhdGlvbgorICogICAgIHF1ZXJ5LiBOb3RlIHRoYXQgdGhlc2UgbWVzc2FnZXMgY2FuIGJlIHBvc3RlZCBiZWZvcmUgdGhlIGJpbiBpcworICogICAgIHByZXJvbGxlZCwgaW4gd2hpY2ggY2FzZSB0aGUgZHVyYXRpb24gcXVlcnkgbWlnaHQgZmFpbC4KKyAqICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgPC92YXJsaXN0ZW50cnk+CisgKiAgIDx2YXJsaXN0ZW50cnk+CisgKiAgICAgPHRlcm0+R1NUX01FU1NBR0VfQ0xPQ0tfTE9TVDwvdGVybT4KKyAqICAgICA8bGlzdGl0ZW0+PHBhcmE+IFRoaXMgbWVzc2FnZSBpcyBwb3N0ZWQgYnkgYW4gZWxlbWVudCB3aGVuIGl0CisgKiAgICAgY2FuIG5vIGxvbmdlciBwcm92aWRlIGEgY2xvY2suIFRoZSBkZWZhdWx0IGJpbiBiZWhhdmlvdXIgaXMgdG8KKyAqICAgICBjaGVjayBpZiB0aGUgbG9zdCBjbG9jayB3YXMgdGhlIG9uZSBwcm92aWRlZCBieSB0aGUgYmluLiBJZiBzbyBhbmQKKyAqICAgICB0aGUgYmluIGlzIGN1cnJlbnRseSBpbiB0aGUgUExBWUlORyBzdGF0ZSwgdGhlIG1lc3NhZ2UgaXMgZm9yd2FyZGVkIHRvCisgKiAgICAgdGhlIGJpbiBwYXJlbnQuCisgKiAgICAgVGhpcyBtZXNzYWdlIGlzIGFsc28gZ2VuZXJhdGVkIHdoZW4gYSBjbG9jayBwcm92aWRlciBpcyByZW1vdmVkIGZyb20KKyAqICAgICB0aGUgYmluLiBJZiB0aGlzIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLCBpdCBzaG91bGQKKyAqICAgICBQQVVTRSB0aGUgcGlwZWxpbmUgYW5kIHNldCBpdCBiYWNrIHRvIFBMQVlJTkcgdG8gZm9yY2UgYSBuZXcgY2xvY2sKKyAqICAgICBkaXN0cmlidXRpb24uCisgKiAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDwvdmFybGlzdGVudHJ5PgorICogICA8dmFybGlzdGVudHJ5PgorICogICAgIDx0ZXJtPkdTVF9NRVNTQUdFX0NMT0NLX1BST1ZJREU8L3Rlcm0+CisgKiAgICAgPGxpc3RpdGVtPjxwYXJhPiBUaGlzIG1lc3NhZ2UgaXMgZ2VuZXJhdGVkIHdoZW4gYW4gZWxlbWVudAorICogICAgIGNhbiBwcm92aWRlIGEgY2xvY2suIFRoaXMgbW9zdGx5IGhhcHBlbnMgd2hlbiBhIG5ldyBjbG9jaworICogICAgIHByb3ZpZGVyIGlzIGFkZGVkIHRvIHRoZSBiaW4uIFRoZSBkZWZhdWx0IGJlaGF2aW91ciBvZiB0aGUgYmluIGlzIHRvCisgKiAgICAgbWFyayB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNsb2NrIGFzIGRpcnR5LCB3aGljaCB3aWxsIHBlcmZvcm0gYSBjbG9jaworICogICAgIHJlY2FsY3VsYXRpb24gdGhlIG5leHQgdGltZSB0aGUgYmluIGlzIGFza2VkIHRvIHByb3ZpZGUgYSBjbG9jay4KKyAqICAgICBUaGlzIG1lc3NhZ2UgaXMgbmV2ZXIgc2VudCB0b3QgdGhlIGFwcGxpY2F0aW9uIGJ1dCBpcyBmb3J3YXJkZWQgdG8KKyAqICAgICB0aGUgcGFyZW50IG9mIHRoZSBiaW4uCisgKiAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDwvdmFybGlzdGVudHJ5PgorICogICA8dmFybGlzdGVudHJ5PgorICogICAgIDx0ZXJtPk9USEVSUzwvdGVybT4KKyAqICAgICA8bGlzdGl0ZW0+PHBhcmE+IHBvc3RlZCB1cHdhcmRzLjwvcGFyYT48L2xpc3RpdGVtPgorICogICA8L3Zhcmxpc3RlbnRyeT4KKyAqIDwvdmFyaWFibGVsaXN0PgorICoKKyAqCisgKiBBICNHc3RCaW4gaW1wbGVtZW50cyB0aGUgZm9sbG93aW5nIGRlZmF1bHQgYmVoYXZpb3VyIGZvciBhbnN3ZXJpbmcgdG8gYQorICogI0dzdFF1ZXJ5OgorICogPHZhcmlhYmxlbGlzdD4KKyAqICAgPHZhcmxpc3RlbnRyeT4KKyAqICAgICA8dGVybT5HU1RfUVVFUllfRFVSQVRJT048L3Rlcm0+CisgKiAgICAgPGxpc3RpdGVtPjxwYXJhPklmIHRoZSBxdWVyeSBoYXMgYmVlbiBhc2tlZCBiZWZvcmUgd2l0aCB0aGUgc2FtZSBmb3JtYXQKKyAqICAgICBhbmQgdGhlIGJpbiBpcyBhIHRvcGxldmVsIGJpbiAoaWUuIGhhcyBubyBwYXJlbnQpLAorICogICAgIHVzZSB0aGUgY2FjaGVkIHByZXZpb3VzIHZhbHVlLiBJZiBubyBwcmV2aW91cyB2YWx1ZSB3YXMgY2FjaGVkLCB0aGUKKyAqICAgICBxdWVyeSBpcyBzZW50IHRvIGFsbCBzaW5rIGVsZW1lbnRzIGluIHRoZSBiaW4gYW5kIHRoZSBNQVhJTVVNIG9mIGFsbAorICogICAgIHZhbHVlcyBpcyByZXR1cm5lZC4gSWYgdGhlIGJpbiBpcyBhIHRvcGxldmVsIGJpbiB0aGUgdmFsdWUgaXMgY2FjaGVkLgorICogICAgIElmIG5vIHNpbmtzIGFyZSBhdmFpbGFibGUgaW4gdGhlIGJpbiwgdGhlIHF1ZXJ5IGZhaWxzLgorICogICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogICA8L3Zhcmxpc3RlbnRyeT4KKyAqICAgPHZhcmxpc3RlbnRyeT4KKyAqICAgICA8dGVybT5HU1RfUVVFUllfUE9TSVRJT048L3Rlcm0+CisgKiAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBxdWVyeSBpcyBzZW50IHRvIGFsbCBzaW5rIGVsZW1lbnRzIGluIHRoZSBiaW4gYW5kIHRoZQorICogICAgIE1BWElNVU0gb2YgYWxsIHZhbHVlcyBpcyByZXR1cm5lZC4gSWYgbm8gc2lua3MgYXJlIGF2YWlsYWJsZSBpbiB0aGUgYmluLAorICogICAgIHRoZSBxdWVyeSBmYWlscy4KKyAqICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgPC92YXJsaXN0ZW50cnk+CisgKiAgIDx2YXJsaXN0ZW50cnk+CisgKiAgICAgPHRlcm0+T1RIRVJTPC90ZXJtPgorICogICAgIDxsaXN0aXRlbT48cGFyYT50aGUgcXVlcnkgaXMgZm9yd2FyZGVkIHRvIGFsbCBzaW5rIGVsZW1lbnRzLCB0aGUgcmVzdWx0CisgKiAgICAgb2YgdGhlIGZpcnN0IHNpbmsgdGhhdCBhbnN3ZXJzIHRoZSBxdWVyeSBzdWNjZXNzZnVsbHkgaXMgcmV0dXJuZWQuIElmIG5vCisgKiAgICAgc2luayBpcyBpbiB0aGUgYmluLCB0aGUgcXVlcnkgZmFpbHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDwvdmFybGlzdGVudHJ5PgorICogPC92YXJpYWJsZWxpc3Q+CisgKgorICogQSAjR3N0QmluIHdpbGwgYnkgZGVmYXVsdCBmb3J3YXJkIGFueSBldmVudCBzZW50IHRvIGl0IHRvIGFsbCBzaW5rIGVsZW1lbnRzLgorICogSWYgYWxsIHRoZSBzaW5rcyByZXR1cm4gVFJVRSwgdGhlIGJpbiB3aWxsIGFsc28gcmV0dXJuIFRSVUUsIGVsc2UgRkFMU0UgaXMKKyAqIHJldHVybmVkLiBJZiBubyBzaW5rcyBhcmUgaW4gdGhlIGJpbiwgdGhlIGV2ZW50IGhhbmRsZXIgd2lsbCByZXR1cm4gVFJVRS4KKyAqCisgKiA8L3BhcmE+CisgKiA8L3JlZnNlY3QyPgorICoKKyAqIExhc3QgcmV2aWV3ZWQgb24gMjAwNi0wNC0yOCAoMC4xMC42KQorICovCisKKyNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgorCisjaW5jbHVkZSAiZ3N0ZXZlbnQuaCIKKyNpbmNsdWRlICJnc3RiaW4uaCIKKyNpbmNsdWRlICJnc3RtYXJzaGFsLmgiCisjaW5jbHVkZSAiZ3N0aW5mby5oIgorI2luY2x1ZGUgImdzdGVycm9yLmgiCisKKyNpbmNsdWRlICJnc3RpbmRleC5oIgorI2luY2x1ZGUgImdzdGluZGV4ZmFjdG9yeS5oIgorI2luY2x1ZGUgImdzdHV0aWxzLmgiCisjaW5jbHVkZSAiZ3N0Y2hpbGRwcm94eS5oIgorCisvKiBsYXRlbmN5IGlzIGJ5IGRlZmF1bHQgZW5hYmxlZCBub3cuCisgKiBsaXZlLXByZXJvbGwgYW5kIG5vLWxpdmUtcHJlcm9sbCBpbiB0aGUgZW52aXJvbm1lbnQgdmFyIEdTVF9DT01QQVQKKyAqIHRvIGVuYWJsZXMgb3IgZGlzYWJsZSBpdCByZXNwZWN0aXZlbHkuCisgKi8KK3N0YXRpYyBnYm9vbGVhbiBlbmFibGVfbGF0ZW5jeSA9IFRSVUU7CisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGJpbl9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBiaW5fZGVidWcKKworLyogYSBiaW4gaXMgdG9wbGV2ZWwgaWYgaXQgaGFzIG5vIHBhcmVudCBvciB3aGVuIGl0IGlzIGNvbmZpZ3VyZWQgdG8gYmVoYXZlIGxpa2UKKyAqIGEgdG9wbGV2ZWwgYmluICovCisjZGVmaW5lIEJJTl9JU19UT1BMRVZFTChiaW4pICgoR1NUX09CSkVDVF9QQVJFTlQgKGJpbikgPT0gTlVMTCkgfHwgYmluLT5wcml2LT5hc3luY2hhbmRsaW5nKQorCisjZGVmaW5lIEdTVF9CSU5fR0VUX1BSSVZBVEUob2JqKSAgXAorICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoKG9iaiksIEdTVF9UWVBFX0JJTiwgR3N0QmluUHJpdmF0ZSkpCisKK3N0cnVjdCBfR3N0QmluUHJpdmF0ZQoreworICBnYm9vbGVhbiBhc3luY2hhbmRsaW5nOworICAvKiBpZiB3ZSBnZXQgYW4gQVNZTkNfRE9ORSBtZXNzYWdlIGZyb20gb3Vyc2VsdmVzLCB0aGlzIG1lYW5zIHRoYXQgdGhlCisgICAqIHN1YmNsYXNzIHdpbGwgc2ltdWxhdGUgQVNZTkMgYmVoYXZpb3VyIHdpdGhvdXQgaGF2aW5nIEFTWU5DIGNoaWxkcmVuLiBXaGVuCisgICAqIHN1Y2ggYW4gQVNZTkNfRE9ORSBtZXNzYWdlIGlzIHBvc3RlZCB3aGlsZSB3ZSBhcmUgZG9pbmcgYSBzdGF0ZSBjaGFuZ2UsIHdlCisgICAqIGhhdmUgdG8gcHJvY2VzcyB0aGUgbWVzc2FnZSBhZnRlciBmaW5pc2hpbmcgdGhlIHN0YXRlIGNoYW5nZSBldmVuIHdoZW4gbm8KKyAgICogY2hpbGQgcmV0dXJuZWQgR1NUX1NUQVRFX0NIQU5HRV9BU1lOQy4gKi8KKyAgZ2Jvb2xlYW4gcGVuZGluZ19hc3luY19kb25lOworCisgIGd1aW50MzIgc3RydWN0dXJlX2Nvb2tpZTsKKworICAvKiBjYWNoZWQgaW5kZXggKi8KKyAgR3N0SW5kZXggKmluZGV4OworICAvKiBmb3J3YXJkIG1lc3NhZ2VzIGZyb20gb3VyIGNoaWxkcmVuICovCisgIGdib29sZWFuIG1lc3NhZ2VfZm9yd2FyZDsKKworICBnYm9vbGVhbiBwb3N0ZWRfZW9zOworfTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgR3N0QmluICpiaW47CisgIGd1aW50MzIgY29va2llOworICBHc3RTdGF0ZSBwZW5kaW5nOworfSBCaW5Db250aW51ZURhdGE7CisKK3N0YXRpYyB2b2lkIGdzdF9iaW5fZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7CisKK3N0YXRpYyB2b2lkIGdzdF9iaW5fc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOworc3RhdGljIHZvaWQgZ3N0X2Jpbl9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7CisKK3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfYmluX2NoYW5nZV9zdGF0ZV9mdW5jIChHc3RFbGVtZW50ICogZWxlbWVudCwKKyAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKK3N0YXRpYyB2b2lkIGdzdF9iaW5fc3RhdGVfY2hhbmdlZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlIG9sZHN0YXRlLAorICAgIEdzdFN0YXRlIG5ld3N0YXRlLCBHc3RTdGF0ZSBwZW5kaW5nKTsKK3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfYmluX2dldF9zdGF0ZV9mdW5jIChHc3RFbGVtZW50ICogZWxlbWVudCwKKyAgICBHc3RTdGF0ZSAqIHN0YXRlLCBHc3RTdGF0ZSAqIHBlbmRpbmcsIEdzdENsb2NrVGltZSB0aW1lb3V0KTsKK3N0YXRpYyB2b2lkIGJpbl9oYW5kbGVfYXN5bmNfZG9uZSAoR3N0QmluICogYmluLCBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQsCisgICAgZ2Jvb2xlYW4gZmxhZ19wZW5kaW5nLCBnYm9vbGVhbiByZXNldF90aW1lKTsKK3N0YXRpYyB2b2lkIGJpbl9oYW5kbGVfYXN5bmNfc3RhcnQgKEdzdEJpbiAqIGJpbik7CitzdGF0aWMgdm9pZCBiaW5fcHVzaF9zdGF0ZV9jb250aW51ZSAoQmluQ29udGludWVEYXRhICogZGF0YSk7CitzdGF0aWMgdm9pZCBiaW5fZG9fZW9zIChHc3RCaW4gKiBiaW4pOworCitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jpbl9hZGRfZnVuYyAoR3N0QmluICogYmluLCBHc3RFbGVtZW50ICogZWxlbWVudCk7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jpbl9yZW1vdmVfZnVuYyAoR3N0QmluICogYmluLCBHc3RFbGVtZW50ICogZWxlbWVudCk7CisKK3N0YXRpYyB2b2lkIGdzdF9iaW5fc2V0X2luZGV4X2Z1bmMgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RJbmRleCAqIGluZGV4KTsKK3N0YXRpYyBHc3RJbmRleCAqZ3N0X2Jpbl9nZXRfaW5kZXhfZnVuYyAoR3N0RWxlbWVudCAqIGVsZW1lbnQpOworCitzdGF0aWMgR3N0Q2xvY2sgKmdzdF9iaW5fcHJvdmlkZV9jbG9ja19mdW5jIChHc3RFbGVtZW50ICogZWxlbWVudCk7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jpbl9zZXRfY2xvY2tfZnVuYyAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdENsb2NrICogY2xvY2spOworCitzdGF0aWMgdm9pZCBnc3RfYmluX2hhbmRsZV9tZXNzYWdlX2Z1bmMgKEdzdEJpbiAqIGJpbiwgR3N0TWVzc2FnZSAqIG1lc3NhZ2UpOworc3RhdGljIGdib29sZWFuIGdzdF9iaW5fc2VuZF9ldmVudCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEV2ZW50ICogZXZlbnQpOworc3RhdGljIEdzdEJ1c1N5bmNSZXBseSBiaW5fYnVzX2hhbmRsZXIgKEdzdEJ1cyAqIGJ1cywKKyAgICBHc3RNZXNzYWdlICogbWVzc2FnZSwgR3N0QmluICogYmluKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfYmluX3F1ZXJ5IChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UXVlcnkgKiBxdWVyeSk7CisKK3N0YXRpYyBnYm9vbGVhbiBnc3RfYmluX2RvX2xhdGVuY3lfZnVuYyAoR3N0QmluICogYmluKTsKKworc3RhdGljIHZvaWQgYmluX3JlbW92ZV9tZXNzYWdlcyAoR3N0QmluICogYmluLCBHc3RPYmplY3QgKiBzcmMsCisgICAgR3N0TWVzc2FnZVR5cGUgdHlwZXMpOworc3RhdGljIHZvaWQgZ3N0X2Jpbl9jb250aW51ZV9mdW5jIChCaW5Db250aW51ZURhdGEgKiBkYXRhKTsKK3N0YXRpYyBnaW50IGJpbl9lbGVtZW50X2lzX3NpbmsgKEdzdEVsZW1lbnQgKiBjaGlsZCwgR3N0QmluICogYmluKTsKK3N0YXRpYyBnaW50IGJpbl9lbGVtZW50X2lzX3NyYyAoR3N0RWxlbWVudCAqIGNoaWxkLCBHc3RCaW4gKiBiaW4pOworCitzdGF0aWMgR3N0SXRlcmF0b3IgKmdzdF9iaW5fc29ydF9pdGVyYXRvcl9uZXcgKEdzdEJpbiAqIGJpbik7CisKKy8qIEJpbiBzaWduYWxzIGFuZCBwcm9wZXJ0aWVzICovCitlbnVtCit7CisgIEVMRU1FTlRfQURERUQsCisgIEVMRU1FTlRfUkVNT1ZFRCwKKyAgRE9fTEFURU5DWSwKKyAgTEFTVF9TSUdOQUwKK307CisKKyNkZWZpbmUgREVGQVVMVF9BU1lOQ19IQU5ETElORwlGQUxTRQorI2RlZmluZSBERUZBVUxUX01FU1NBR0VfRk9SV0FSRAlGQUxTRQorCitlbnVtCit7CisgIFBST1BfMCwKKyAgUFJPUF9BU1lOQ19IQU5ETElORywKKyAgUFJPUF9NRVNTQUdFX0ZPUldBUkQsCisgIFBST1BfTEFTVAorfTsKKworc3RhdGljIHZvaWQgZ3N0X2Jpbl9jaGlsZF9wcm94eV9pbml0IChncG9pbnRlciBnX2lmYWNlLCBncG9pbnRlciBpZmFjZV9kYXRhKTsKKworc3RhdGljIGd1aW50IGdzdF9iaW5fc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKKworI2RlZmluZSBfZG9faW5pdCBcCit7IFwKKyAgY29uc3QgZ2NoYXIgKmNvbXBhdDsgXAorICBzdGF0aWMgY29uc3QgR0ludGVyZmFjZUluZm8gaWZhY2VfaW5mbyA9IHsgXAorICAgIGdzdF9iaW5fY2hpbGRfcHJveHlfaW5pdCwgXAorICAgIE5VTEwsIFwKKyAgICBOVUxMfTsgXAorICBcCisgIGdfdHlwZV9hZGRfaW50ZXJmYWNlX3N0YXRpYyAoZ19kZWZpbmVfdHlwZV9pZCwgR1NUX1RZUEVfQ0hJTERfUFJPWFksICZpZmFjZV9pbmZvKTsgXAorICBcCisgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChiaW5fZGVidWcsICJiaW4iLCBHU1RfREVCVUdfQk9MRCwgXAorICAgICAgImRlYnVnZ2luZyBpbmZvIGZvciB0aGUgJ2JpbicgY29udGFpbmVyIGVsZW1lbnQiKTsgXAorICBcCisgIC8qIGNvbXBhdGliaWxpdHkgc3R1ZmYgKi8gXAorICBjb21wYXQgPSBnX2dldGVudiAoIkdTVF9DT01QQVQiKTsgXAorICBpZiAoY29tcGF0ICE9IE5VTEwpIHsgXAorICAgIGlmIChzdHJzdHIgKGNvbXBhdCwgIm5vLWxpdmUtcHJlcm9sbCIpKSBcCisgICAgICBlbmFibGVfbGF0ZW5jeSA9IEZBTFNFOyBcCisgICAgZWxzZSBpZiAoc3Ryc3RyIChjb21wYXQsICJsaXZlLXByZXJvbGwiKSkgXAorICAgICAgZW5hYmxlX2xhdGVuY3kgPSBUUlVFOyBcCisgIH0gXAorfQorCisjZGVmaW5lIGdzdF9iaW5fcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdEJpbiwgZ3N0X2JpbiwgR1NUX1RZUEVfRUxFTUVOVCwgX2RvX2luaXQpOworCitzdGF0aWMgR3N0T2JqZWN0ICoKK2dzdF9iaW5fY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X2luZGV4IChHc3RDaGlsZFByb3h5ICogY2hpbGRfcHJveHksCisgICAgZ3VpbnQgaW5kZXgpCit7CisgIEdzdE9iamVjdCAqcmVzOworICBHc3RCaW4gKmJpbjsKKworICBiaW4gPSBHU1RfQklOX0NBU1QgKGNoaWxkX3Byb3h5KTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKGJpbik7CisgIGlmICgocmVzID0gZ19saXN0X250aF9kYXRhIChiaW4tPmNoaWxkcmVuLCBpbmRleCkpKQorICAgIGdzdF9vYmplY3RfcmVmIChyZXMpOworICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKKworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgZ3VpbnQKK2dzdF9iaW5fY2hpbGRfcHJveHlfZ2V0X2NoaWxkcmVuX2NvdW50IChHc3RDaGlsZFByb3h5ICogY2hpbGRfcHJveHkpCit7CisgIGd1aW50IG51bTsKKyAgR3N0QmluICpiaW47CisKKyAgYmluID0gR1NUX0JJTl9DQVNUIChjaGlsZF9wcm94eSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChiaW4pOworICBudW0gPSBiaW4tPm51bWNoaWxkcmVuOworICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKKworICByZXR1cm4gbnVtOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2Jpbl9jaGlsZF9wcm94eV9pbml0IChncG9pbnRlciBnX2lmYWNlLCBncG9pbnRlciBpZmFjZV9kYXRhKQoreworICBHc3RDaGlsZFByb3h5SW50ZXJmYWNlICppZmFjZSA9IGdfaWZhY2U7CisKKyAgaWZhY2UtPmdldF9jaGlsZHJlbl9jb3VudCA9IGdzdF9iaW5fY2hpbGRfcHJveHlfZ2V0X2NoaWxkcmVuX2NvdW50OworICBpZmFjZS0+Z2V0X2NoaWxkX2J5X2luZGV4ID0gZ3N0X2Jpbl9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfaW5kZXg7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorX2dzdF9ib29sZWFuX2FjY3VtdWxhdG9yIChHU2lnbmFsSW52b2NhdGlvbkhpbnQgKiBpaGludCwKKyAgICBHVmFsdWUgKiByZXR1cm5fYWNjdSwgY29uc3QgR1ZhbHVlICogaGFuZGxlcl9yZXR1cm4sIGdwb2ludGVyIGR1bW15KQoreworICBnYm9vbGVhbiBteWJvb2xlYW47CisKKyAgbXlib29sZWFuID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAoaGFuZGxlcl9yZXR1cm4pOworICBpZiAoIShpaGludC0+cnVuX3R5cGUgJiBHX1NJR05BTF9SVU5fQ0xFQU5VUCkpCisgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAocmV0dXJuX2FjY3UsIG15Ym9vbGVhbik7CisKKyAgR1NUX0RFQlVHICgiaW52b2NhdGlvbiAlZCwgJWQiLCBpaGludC0+cnVuX3R5cGUsIG15Ym9vbGVhbik7CisKKyAgLyogc3RvcCBlbWlzc2lvbiAqLworICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfYmluX2NsYXNzX2luaXQgKEdzdEJpbkNsYXNzICoga2xhc3MpCit7CisgIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKKyAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOworICBHRXJyb3IgKmVycjsKKworICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKKyAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7CisKKyAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChrbGFzcywgc2l6ZW9mIChHc3RCaW5Qcml2YXRlKSk7CisKKyAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2Jpbl9zZXRfcHJvcGVydHk7CisgIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9iaW5fZ2V0X3Byb3BlcnR5OworCisgIC8qKgorICAgKiBHc3RCaW46YXN5bmMtaGFuZGxpbmcKKyAgICoKKyAgICogSWYgc2V0IHRvICNUUlVFLCB0aGUgYmluIHdpbGwgaGFuZGxlIGFzeW5jaHJvbm91cyBzdGF0ZSBjaGFuZ2VzLgorICAgKiBUaGlzIHNob3VsZCBiZSB1c2VkIG9ubHkgaWYgdGhlIGJpbiBzdWJjbGFzcyBpcyBtb2RpZnlpbmcgdGhlIHN0YXRlCisgICAqIG9mIGl0cyBjaGlsZHJlbiBvbiBpdHMgb3duLgorICAgKgorICAgKiBTaW5jZTogMC4xMC4xMworICAgKi8KKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9BU1lOQ19IQU5ETElORywKKyAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiYXN5bmMtaGFuZGxpbmciLCAiQXN5bmMgSGFuZGxpbmciLAorICAgICAgICAgICJUaGUgYmluIHdpbGwgaGFuZGxlIEFzeW5jaHJvbm91cyBzdGF0ZSBjaGFuZ2VzIiwKKyAgICAgICAgICBERUZBVUxUX0FTWU5DX0hBTkRMSU5HLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKworICAvKioKKyAgICogR3N0QmluOjplbGVtZW50LWFkZGVkOgorICAgKiBAYmluOiB0aGUgI0dzdEJpbgorICAgKiBAZWxlbWVudDogdGhlICNHc3RFbGVtZW50IHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBiaW4KKyAgICoKKyAgICogV2lsbCBiZSBlbWl0dGVkIGFmdGVyIHRoZSBlbGVtZW50IHdhcyBhZGRlZCB0byB0aGUgYmluLgorICAgKi8KKyAgZ3N0X2Jpbl9zaWduYWxzW0VMRU1FTlRfQURERURdID0KKyAgICAgIGdfc2lnbmFsX25ldyAoImVsZW1lbnQtYWRkZWQiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAorICAgICAgR19TSUdOQUxfUlVOX0ZJUlNULCBHX1NUUlVDVF9PRkZTRVQgKEdzdEJpbkNsYXNzLCBlbGVtZW50X2FkZGVkKSwgTlVMTCwKKyAgICAgIE5VTEwsIGdzdF9tYXJzaGFsX1ZPSURfX09CSkVDVCwgR19UWVBFX05PTkUsIDEsIEdTVF9UWVBFX0VMRU1FTlQpOworICAvKioKKyAgICogR3N0QmluOjplbGVtZW50LXJlbW92ZWQ6CisgICAqIEBiaW46IHRoZSAjR3N0QmluCisgICAqIEBlbGVtZW50OiB0aGUgI0dzdEVsZW1lbnQgdGhhdCB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBiaW4KKyAgICoKKyAgICogV2lsbCBiZSBlbWl0dGVkIGFmdGVyIHRoZSBlbGVtZW50IHdhcyByZW1vdmVkIGZyb20gdGhlIGJpbi4KKyAgICovCisgIGdzdF9iaW5fc2lnbmFsc1tFTEVNRU5UX1JFTU9WRURdID0KKyAgICAgIGdfc2lnbmFsX25ldyAoImVsZW1lbnQtcmVtb3ZlZCIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCisgICAgICBHX1NJR05BTF9SVU5fRklSU1QsIEdfU1RSVUNUX09GRlNFVCAoR3N0QmluQ2xhc3MsIGVsZW1lbnRfcmVtb3ZlZCksIE5VTEwsCisgICAgICBOVUxMLCBnc3RfbWFyc2hhbF9WT0lEX19PQkpFQ1QsIEdfVFlQRV9OT05FLCAxLCBHU1RfVFlQRV9FTEVNRU5UKTsKKyAgLyoqCisgICAqIEdzdEJpbjo6ZG8tbGF0ZW5jeToKKyAgICogQGJpbjogdGhlICNHc3RCaW4KKyAgICoKKyAgICogV2lsbCBiZSBlbWl0dGVkIHdoZW4gdGhlIGJpbiBuZWVkcyB0byBwZXJmb3JtIGxhdGVuY3kgY2FsY3VsYXRpb25zLiBUaGlzCisgICAqIHNpZ25hbCBpcyBvbmx5IGVtaXRlZCBmb3IgdG9wbGV2ZWwgYmlucyBvciB3aGVuIGFzeW5jLWhhbmRsaW5nIGlzCisgICAqIGVuYWJsZWQuCisgICAqCisgICAqIE9ubHkgb25lIHNpZ25hbCBoYW5kbGVyIGlzIGludm9rZWQuIElmIG5vIHNpZ25hbHMgYXJlIGNvbm5lY3RlZCwgdGhlCisgICAqIGRlZmF1bHQgaGFuZGxlciBpcyBpbnZva2VkLCB3aGljaCB3aWxsIHF1ZXJ5IGFuZCBkaXN0cmlidXRlIHRoZSBsb3dlc3QKKyAgICogcG9zc2libGUgbGF0ZW5jeSB0byBhbGwgc2lua3MuCisgICAqCisgICAqIENvbm5lY3QgdG8gdGhpcyBzaWduYWwgaWYgdGhlIGRlZmF1bHQgbGF0ZW5jeSBjYWxjdWxhdGlvbnMgYXJlIG5vdAorICAgKiBzdWZmaWNpZW50LCBsaWtlIHdoZW4geW91IG5lZWQgZGlmZmVyZW50IGxhdGVuY2llcyBmb3IgZGlmZmVyZW50IHNpbmtzIGluCisgICAqIHRoZSBzYW1lIHBpcGVsaW5lLgorICAgKgorICAgKiBTaW5jZTogMC4xMC4yMgorICAgKi8KKyAgZ3N0X2Jpbl9zaWduYWxzW0RPX0xBVEVOQ1ldID0KKyAgICAgIGdfc2lnbmFsX25ldyAoImRvLWxhdGVuY3kiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAorICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoR3N0QmluQ2xhc3MsIGRvX2xhdGVuY3kpLAorICAgICAgX2dzdF9ib29sZWFuX2FjY3VtdWxhdG9yLCBOVUxMLCBnc3RfbWFyc2hhbF9CT09MRUFOX19WT0lELAorICAgICAgR19UWVBFX0JPT0xFQU4sIDAsIEdfVFlQRV9OT05FKTsKKworICAvKioKKyAgICogR3N0QmluOm1lc3NhZ2UtZm9yd2FyZAorICAgKgorICAgKiBGb3J3YXJkIGFsbCBjaGlsZHJlbiBtZXNzYWdlcywgZXZlbiB0aG9zZSB0aGF0IHdvdWxkIG5vcm1hbGx5IGJlIGZpbHRlcmVkIGJ5CisgICAqIHRoZSBiaW4uIFRoaXMgY2FuIGJlIGludGVyZXN0aW5nIHdoZW4gb25lIHdhbnRzIHRvIGJlIG5vdGlmaWVkIG9mIHRoZSBFT1MKKyAgICogc3RhdGUgb2YgaW5kaXZpZHVhbCBlbGVtZW50cywgZm9yIGV4YW1wbGUuCisgICAqCisgICAqIFRoZSBtZXNzYWdlcyBhcmUgY29udmVydGVkIHRvIGFuIEVMRU1FTlQgbWVzc2FnZSB3aXRoIHRoZSBiaW4gYXMgdGhlCisgICAqIHNvdXJjZS4gVGhlIHN0cnVjdHVyZSBvZiB0aGUgbWVzc2FnZSBpcyBuYW1lZCAnR3N0QmluRm9yd2FyZGVkJyBhbmQgY29udGFpbnMKKyAgICogYSBmaWVsZCBuYW1lZCAnbWVzc2FnZScgb2YgdHlwZSBHU1RfVFlQRV9NRVNTQUdFIHRoYXQgY29udGFpbnMgdGhlIG9yaWdpbmFsCisgICAqIGZvcndhcmRlZCBtZXNzYWdlLgorICAgKgorICAgKiBTaW5jZTogMC4xMC4zMQorICAgKi8KKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NRVNTQUdFX0ZPUldBUkQsCisgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoIm1lc3NhZ2UtZm9yd2FyZCIsICJNZXNzYWdlIEZvcndhcmQiLAorICAgICAgICAgICJGb3J3YXJkcyBhbGwgY2hpbGRyZW4gbWVzc2FnZXMiLAorICAgICAgICAgIERFRkFVTFRfTUVTU0FHRV9GT1JXQVJELCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKworICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3N0X2Jpbl9kaXNwb3NlOworCisgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIkdlbmVyaWMgYmluIiwKKyAgICAgICJHZW5lcmljL0JpbiIsCisgICAgICAiU2ltcGxlIGNvbnRhaW5lciBvYmplY3QiLAorICAgICAgIkVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+LCIKKyAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiIpOworCisgIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9CisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGVfZnVuYyk7CisgIGdzdGVsZW1lbnRfY2xhc3MtPnN0YXRlX2NoYW5nZWQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jpbl9zdGF0ZV9jaGFuZ2VkKTsKKyAgZ3N0ZWxlbWVudF9jbGFzcy0+Z2V0X3N0YXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iaW5fZ2V0X3N0YXRlX2Z1bmMpOworICBnc3RlbGVtZW50X2NsYXNzLT5nZXRfaW5kZXggPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jpbl9nZXRfaW5kZXhfZnVuYyk7CisgIGdzdGVsZW1lbnRfY2xhc3MtPnNldF9pbmRleCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmluX3NldF9pbmRleF9mdW5jKTsKKyAgZ3N0ZWxlbWVudF9jbGFzcy0+cHJvdmlkZV9jbG9jayA9CisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jpbl9wcm92aWRlX2Nsb2NrX2Z1bmMpOworICBnc3RlbGVtZW50X2NsYXNzLT5zZXRfY2xvY2sgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jpbl9zZXRfY2xvY2tfZnVuYyk7CisKKyAgZ3N0ZWxlbWVudF9jbGFzcy0+c2VuZF9ldmVudCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmluX3NlbmRfZXZlbnQpOworICBnc3RlbGVtZW50X2NsYXNzLT5xdWVyeSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmluX3F1ZXJ5KTsKKworICBrbGFzcy0+YWRkX2VsZW1lbnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jpbl9hZGRfZnVuYyk7CisgIGtsYXNzLT5yZW1vdmVfZWxlbWVudCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmluX3JlbW92ZV9mdW5jKTsKKyAga2xhc3MtPmhhbmRsZV9tZXNzYWdlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iaW5faGFuZGxlX21lc3NhZ2VfZnVuYyk7CisKKyAga2xhc3MtPmRvX2xhdGVuY3kgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jpbl9kb19sYXRlbmN5X2Z1bmMpOworCisgIEdTVF9ERUJVRyAoImNyZWF0aW5nIGJpbiB0aHJlYWQgcG9vbCIpOworICBlcnIgPSBOVUxMOworICBrbGFzcy0+cG9vbCA9CisgICAgICBnX3RocmVhZF9wb29sX25ldyAoKEdGdW5jKSBnc3RfYmluX2NvbnRpbnVlX2Z1bmMsIE5VTEwsIC0xLCBGQUxTRSwgJmVycik7CisgIGlmIChlcnIgIT0gTlVMTCkgeworICAgIGdfY3JpdGljYWwgKCJjb3VsZCBhbGxvYyB0aHJlYWRwb29sICVzIiwgZXJyLT5tZXNzYWdlKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZ3N0X2Jpbl9pbml0IChHc3RCaW4gKiBiaW4pCit7CisgIEdzdEJ1cyAqYnVzOworCisgIGJpbi0+bnVtY2hpbGRyZW4gPSAwOworICBiaW4tPmNoaWxkcmVuID0gTlVMTDsKKyAgYmluLT5jaGlsZHJlbl9jb29raWUgPSAwOworICBiaW4tPm1lc3NhZ2VzID0gTlVMTDsKKyAgYmluLT5wcm92aWRlZF9jbG9jayA9IE5VTEw7CisgIGJpbi0+Y2xvY2tfZGlydHkgPSBGQUxTRTsKKworICAvKiBTZXQgdXAgYSBidXMgZm9yIGxpc3RlbmluZyB0byBjaGlsZCBlbGVtZW50cyAqLworICBidXMgPSBnX29iamVjdF9uZXcgKEdTVF9UWVBFX0JVUywgImVuYWJsZS1hc3luYyIsIEZBTFNFLCBOVUxMKTsKKyAgYmluLT5jaGlsZF9idXMgPSBidXM7CisgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgInVzaW5nIGJ1cyAlIiBHU1RfUFRSX0ZPUk1BVCAiIHRvIGxpc3RlbiB0byBjaGlsZHJlbiIsCisgICAgICBidXMpOworICBnc3RfYnVzX3NldF9zeW5jX2hhbmRsZXIgKGJ1cywgKEdzdEJ1c1N5bmNIYW5kbGVyKSBiaW5fYnVzX2hhbmRsZXIsIGJpbik7CisKKyAgYmluLT5wcml2ID0gR1NUX0JJTl9HRVRfUFJJVkFURSAoYmluKTsKKyAgYmluLT5wcml2LT5hc3luY2hhbmRsaW5nID0gREVGQVVMVF9BU1lOQ19IQU5ETElORzsKKyAgYmluLT5wcml2LT5zdHJ1Y3R1cmVfY29va2llID0gMDsKKyAgYmluLT5wcml2LT5tZXNzYWdlX2ZvcndhcmQgPSBERUZBVUxUX01FU1NBR0VfRk9SV0FSRDsKK30KKworc3RhdGljIHZvaWQKK2dzdF9iaW5fZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCkKK3sKKyAgR3N0QmluICpiaW4gPSBHU1RfQklOX0NBU1QgKG9iamVjdCk7CisgIEdzdEJ1cyAqKmNoaWxkX2J1c19wID0gJmJpbi0+Y2hpbGRfYnVzOworICBHc3RDbG9jayAqKnByb3ZpZGVkX2Nsb2NrX3AgPSAmYmluLT5wcm92aWRlZF9jbG9jazsKKyAgR3N0RWxlbWVudCAqKmNsb2NrX3Byb3ZpZGVyX3AgPSAmYmluLT5jbG9ja19wcm92aWRlcjsKKyAgR3N0SW5kZXggKippbmRleF9wID0gJmJpbi0+cHJpdi0+aW5kZXg7CisKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfUkVGQ09VTlRJTkcsIG9iamVjdCwgImRpc3Bvc2UiKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKG9iamVjdCk7CisgIGdzdF9vYmplY3RfcmVwbGFjZSAoKEdzdE9iamVjdCAqKikgY2hpbGRfYnVzX3AsIE5VTEwpOworICBnc3Rfb2JqZWN0X3JlcGxhY2UgKChHc3RPYmplY3QgKiopIHByb3ZpZGVkX2Nsb2NrX3AsIE5VTEwpOworICBnc3Rfb2JqZWN0X3JlcGxhY2UgKChHc3RPYmplY3QgKiopIGNsb2NrX3Byb3ZpZGVyX3AsIE5VTEwpOworICBnc3Rfb2JqZWN0X3JlcGxhY2UgKChHc3RPYmplY3QgKiopIGluZGV4X3AsIE5VTEwpOworICBiaW5fcmVtb3ZlX21lc3NhZ2VzIChiaW4sIE5VTEwsIEdTVF9NRVNTQUdFX0FOWSk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChvYmplY3QpOworCisgIHdoaWxlIChiaW4tPmNoaWxkcmVuKSB7CisgICAgZ3N0X2Jpbl9yZW1vdmUgKGJpbiwgR1NUX0VMRU1FTlRfQ0FTVCAoYmluLT5jaGlsZHJlbi0+ZGF0YSkpOworICB9CisgIGlmIChHX1VOTElLRUxZIChiaW4tPmNoaWxkcmVuICE9IE5VTEwpKSB7CisgICAgZ19jcml0aWNhbCAoImNvdWxkIG5vdCByZW1vdmUgZWxlbWVudHMgZnJvbSBiaW4gJyVzJyIsCisgICAgICAgIEdTVF9TVFJfTlVMTCAoR1NUX09CSkVDVF9OQU1FIChvYmplY3QpKSk7CisgIH0KKworICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKK30KKworLyoqCisgKiBnc3RfYmluX25ldzoKKyAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgbmV3IGJpbgorICoKKyAqIENyZWF0ZXMgYSBuZXcgYmluIHdpdGggdGhlIGdpdmVuIG5hbWUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0QmluCisgKi8KK0dzdEVsZW1lbnQgKgorZ3N0X2Jpbl9uZXcgKGNvbnN0IGdjaGFyICogbmFtZSkKK3sKKyAgcmV0dXJuIGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImJpbiIsIG5hbWUpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2Jpbl9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgR3N0QmluICpnc3RiaW47CisKKyAgZ3N0YmluID0gR1NUX0JJTl9DQVNUIChvYmplY3QpOworCisgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9BU1lOQ19IQU5ETElORzoKKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoZ3N0YmluKTsKKyAgICAgIGdzdGJpbi0+cHJpdi0+YXN5bmNoYW5kbGluZyA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChnc3RiaW4pOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01FU1NBR0VfRk9SV0FSRDoKKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoZ3N0YmluKTsKKyAgICAgIGdzdGJpbi0+cHJpdi0+bWVzc2FnZV9mb3J3YXJkID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGdzdGJpbik7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfYmluX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQoreworICBHc3RCaW4gKmdzdGJpbjsKKworICBnc3RiaW4gPSBHU1RfQklOX0NBU1QgKG9iamVjdCk7CisKKyAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX0FTWU5DX0hBTkRMSU5HOgorICAgICAgR1NUX09CSkVDVF9MT0NLIChnc3RiaW4pOworICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGdzdGJpbi0+cHJpdi0+YXN5bmNoYW5kbGluZyk7CisgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZ3N0YmluKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NRVNTQUdFX0ZPUldBUkQ6CisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGdzdGJpbik7CisgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgZ3N0YmluLT5wcml2LT5tZXNzYWdlX2ZvcndhcmQpOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGdzdGJpbik7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgIGJyZWFrOworICB9Cit9CisKKy8qIHJldHVybiB0aGUgY2FjaGVkIGluZGV4ICovCitzdGF0aWMgR3N0SW5kZXggKgorZ3N0X2Jpbl9nZXRfaW5kZXhfZnVuYyAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCit7CisgIEdzdEJpbiAqYmluOworICBHc3RJbmRleCAqcmVzdWx0OworCisgIGJpbiA9IEdTVF9CSU5fQ0FTVCAoZWxlbWVudCk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChiaW4pOworICBpZiAoKHJlc3VsdCA9IGJpbi0+cHJpdi0+aW5kZXgpKQorICAgIGdzdF9vYmplY3RfcmVmIChyZXN1bHQpOworICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBzZXQgdGhlIGluZGV4IG9uIGFsbCBlbGVtZW50cyBpbiB0aGlzIGJpbgorICoKKyAqIE1UIHNhZmUKKyAqLworc3RhdGljIHZvaWQKK2dzdF9iaW5fc2V0X2luZGV4X2Z1bmMgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RJbmRleCAqIGluZGV4KQoreworICBHc3RCaW4gKmJpbjsKKyAgZ2Jvb2xlYW4gZG9uZTsKKyAgR3N0SXRlcmF0b3IgKml0OworICBHc3RJbmRleCAqb2xkOworICBHVmFsdWUgZGF0YSA9IHsgMCwgfTsKKworICBiaW4gPSBHU1RfQklOX0NBU1QgKGVsZW1lbnQpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKKyAgb2xkID0gYmluLT5wcml2LT5pbmRleDsKKyAgaWYgKEdfVU5MSUtFTFkgKG9sZCA9PSBpbmRleCkpCisgICAgZ290byB3YXNfc2V0OworICBpZiAoaW5kZXgpCisgICAgZ3N0X29iamVjdF9yZWYgKGluZGV4KTsKKyAgYmluLT5wcml2LT5pbmRleCA9IGluZGV4OworICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKKworICBpZiAob2xkKQorICAgIGdzdF9vYmplY3RfdW5yZWYgKG9sZCk7CisKKyAgaXQgPSBnc3RfYmluX2l0ZXJhdGVfZWxlbWVudHMgKGJpbik7CisKKyAgLyogc2V0IHRoZSBpbmRleCBvbiBhbGwgZWxlbWVudHMgaW4gdGhlIGJpbiAqLworICBkb25lID0gRkFMU0U7CisgIHdoaWxlICghZG9uZSkgeworICAgIHN3aXRjaCAoZ3N0X2l0ZXJhdG9yX25leHQgKGl0LCAmZGF0YSkpIHsKKyAgICAgIGNhc2UgR1NUX0lURVJBVE9SX09LOgorICAgICAgeworICAgICAgICBHc3RFbGVtZW50ICpjaGlsZCA9IGdfdmFsdWVfZ2V0X29iamVjdCAoJmRhdGEpOworCisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgInNldHRpbmcgaW5kZXggb24gJyVzJyIsCisgICAgICAgICAgICBHU1RfRUxFTUVOVF9OQU1FIChjaGlsZCkpOworICAgICAgICBnc3RfZWxlbWVudF9zZXRfaW5kZXggKGNoaWxkLCBpbmRleCk7CisKKyAgICAgICAgZ192YWx1ZV9yZXNldCAoJmRhdGEpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2UgR1NUX0lURVJBVE9SX1JFU1lOQzoKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiaXRlcmF0b3IgZG9pbmcgcmVzeW5jIik7CisgICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRE9ORToKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiaXRlcmF0b3IgZG9uZSIpOworICAgICAgICBkb25lID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGdfdmFsdWVfdW5zZXQgKCZkYXRhKTsKKyAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKKyAgcmV0dXJuOworCit3YXNfc2V0OgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiaW5kZXggd2FzIGFscmVhZHkgc2V0Iik7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7CisgICAgcmV0dXJuOworICB9Cit9CisKKy8qIHNldCB0aGUgY2xvY2sgb24gYWxsIGVsZW1lbnRzIGluIHRoaXMgYmluCisgKgorICogTVQgc2FmZQorICovCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iaW5fc2V0X2Nsb2NrX2Z1bmMgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RDbG9jayAqIGNsb2NrKQoreworICBHc3RCaW4gKmJpbjsKKyAgZ2Jvb2xlYW4gZG9uZTsKKyAgR3N0SXRlcmF0b3IgKml0OworICBnYm9vbGVhbiByZXMgPSBUUlVFOworICBHVmFsdWUgZGF0YSA9IHsgMCwgfTsKKworICBiaW4gPSBHU1RfQklOX0NBU1QgKGVsZW1lbnQpOworCisgIGl0ID0gZ3N0X2Jpbl9pdGVyYXRlX2VsZW1lbnRzIChiaW4pOworCisgIGRvbmUgPSBGQUxTRTsKKyAgd2hpbGUgKCFkb25lKSB7CisgICAgc3dpdGNoIChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZkYXRhKSkgeworICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfT0s6CisgICAgICB7CisgICAgICAgIEdzdEVsZW1lbnQgKmNoaWxkID0gZ192YWx1ZV9nZXRfb2JqZWN0ICgmZGF0YSk7CisKKyAgICAgICAgcmVzICY9IGdzdF9lbGVtZW50X3NldF9jbG9jayAoY2hpbGQsIGNsb2NrKTsKKworICAgICAgICBnX3ZhbHVlX3Jlc2V0ICgmZGF0YSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfUkVTWU5DOgorICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJpdGVyYXRvciBkb2luZyByZXN5bmMiKTsKKyAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAoaXQpOworICAgICAgICByZXMgPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgorICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJpdGVyYXRvciBkb25lIik7CisgICAgICAgIGRvbmUgPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgZ192YWx1ZV91bnNldCAoJmRhdGEpOworICBnc3RfaXRlcmF0b3JfZnJlZSAoaXQpOworCisgIHJldHVybiByZXM7Cit9CisKKy8qIGdldCB0aGUgY2xvY2sgZm9yIHRoaXMgYmluIGJ5IGFza2luZyBhbGwgb2YgdGhlIGNoaWxkcmVuIGluIHRoaXMgYmluCisgKgorICogVGhlIHJlZiBvZiB0aGUgcmV0dXJuZWQgY2xvY2sgaW4gaW5jcmVhc2VkIHNvIHVucmVmIGFmdGVyIHVzYWdlLgorICoKKyAqIFdlIGxvb3AgdGhlIGVsZW1lbnRzIGluIHN0YXRlIG9yZGVyIGFuZCBwaWNrIHRoZSBsYXN0IGNsb2NrIHdlIGNhbgorICogZ2V0LiBUaGlzIG1ha2VzIHN1cmUgd2UgZ2V0IGEgY2xvY2sgZnJvbSB0aGUgc291cmNlLgorICoKKyAqIE1UIHNhZmUKKyAqLworc3RhdGljIEdzdENsb2NrICoKK2dzdF9iaW5fcHJvdmlkZV9jbG9ja19mdW5jIChHc3RFbGVtZW50ICogZWxlbWVudCkKK3sKKyAgR3N0Q2xvY2sgKnJlc3VsdCA9IE5VTEw7CisgIEdzdEVsZW1lbnQgKnByb3ZpZGVyID0gTlVMTDsKKyAgR3N0QmluICpiaW47CisgIEdzdEl0ZXJhdG9yICppdDsKKyAgZ2Jvb2xlYW4gZG9uZTsKKyAgR1ZhbHVlIHZhbCA9IHsgMCwgfTsKKyAgR3N0Q2xvY2sgKipwcm92aWRlZF9jbG9ja19wOworICBHc3RFbGVtZW50ICoqY2xvY2tfcHJvdmlkZXJfcDsKKworICBiaW4gPSBHU1RfQklOX0NBU1QgKGVsZW1lbnQpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKKyAgaWYgKCFiaW4tPmNsb2NrX2RpcnR5KQorICAgIGdvdG8gbm90X2RpcnR5OworCisgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgImZpbmRpbmcgbmV3IGNsb2NrIik7CisKKyAgaXQgPSBnc3RfYmluX3NvcnRfaXRlcmF0b3JfbmV3IChiaW4pOworICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKKworICBkb25lID0gRkFMU0U7CisgIHdoaWxlICghZG9uZSkgeworICAgIHN3aXRjaCAoZ3N0X2l0ZXJhdG9yX25leHQgKGl0LCAmdmFsKSkgeworICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfT0s6CisgICAgICB7CisgICAgICAgIEdzdEVsZW1lbnQgKmNoaWxkID0gZ192YWx1ZV9nZXRfb2JqZWN0ICgmdmFsKTsKKyAgICAgICAgR3N0Q2xvY2sgKmNsb2NrOworCisgICAgICAgIGNsb2NrID0gZ3N0X2VsZW1lbnRfcHJvdmlkZV9jbG9jayAoY2hpbGQpOworICAgICAgICBpZiAoY2xvY2spIHsKKyAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJmb3VuZCBjYW5kaWRhdGUgY2xvY2sgJXAgYnkgZWxlbWVudCAlcyIsCisgICAgICAgICAgICAgIGNsb2NrLCBHU1RfRUxFTUVOVF9OQU1FIChjaGlsZCkpOworICAgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHJlc3VsdCk7CisgICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwcm92aWRlcik7CisgICAgICAgICAgfQorICAgICAgICAgIHJlc3VsdCA9IGNsb2NrOworICAgICAgICAgIHByb3ZpZGVyID0gZ3N0X29iamVjdF9yZWYgKGNoaWxkKTsKKyAgICAgICAgfQorCisgICAgICAgIGdfdmFsdWVfcmVzZXQgKCZ2YWwpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2UgR1NUX0lURVJBVE9SX1JFU1lOQzoKKyAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAoaXQpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgorICAgICAgICBkb25lID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGdfdmFsdWVfdW5zZXQgKCZ2YWwpOworICBnc3RfaXRlcmF0b3JfZnJlZSAoaXQpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKKyAgaWYgKCFiaW4tPmNsb2NrX2RpcnR5KSB7CisgICAgaWYgKHByb3ZpZGVyKQorICAgICAgZ3N0X29iamVjdF91bnJlZiAocHJvdmlkZXIpOworICAgIGlmIChyZXN1bHQpCisgICAgICBnc3Rfb2JqZWN0X3VucmVmIChyZXN1bHQpOworICAgIHJlc3VsdCA9IE5VTEw7CisKKyAgICBnb3RvIG5vdF9kaXJ0eTsKKyAgfQorCisgIHByb3ZpZGVkX2Nsb2NrX3AgPSAmYmluLT5wcm92aWRlZF9jbG9jazsKKyAgY2xvY2tfcHJvdmlkZXJfcCA9ICZiaW4tPmNsb2NrX3Byb3ZpZGVyOworICBnc3Rfb2JqZWN0X3JlcGxhY2UgKChHc3RPYmplY3QgKiopIHByb3ZpZGVkX2Nsb2NrX3AsIChHc3RPYmplY3QgKikgcmVzdWx0KTsKKyAgZ3N0X29iamVjdF9yZXBsYWNlICgoR3N0T2JqZWN0ICoqKSBjbG9ja19wcm92aWRlcl9wLCAoR3N0T2JqZWN0ICopIHByb3ZpZGVyKTsKKyAgYmluLT5jbG9ja19kaXJ0eSA9IEZBTFNFOworICBHU1RfREVCVUdfT0JKRUNUIChiaW4sCisgICAgICAicHJvdmlkZWQgbmV3IGNsb2NrICUiIEdTVF9QVFJfRk9STUFUICIgYnkgcHJvdmlkZXIgJSIgR1NUX1BUUl9GT1JNQVQsCisgICAgICByZXN1bHQsIHByb3ZpZGVyKTsKKyAgLyogUHJvdmlkZXIgaXMgbm90IGJlaW5nIHJldHVybmVkIHRvIGNhbGxlciwganVzdCB0aGUgcmVzdWx0ICovCisgIGlmIChwcm92aWRlcikKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChwcm92aWRlcik7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOworCisgIHJldHVybiByZXN1bHQ7CisKK25vdF9kaXJ0eToKKyAgeworICAgIGlmICgocmVzdWx0ID0gYmluLT5wcm92aWRlZF9jbG9jaykpCisgICAgICBnc3Rfb2JqZWN0X3JlZiAocmVzdWx0KTsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJyZXR1cm5pbmcgb2xkIGNsb2NrICVwIiwgcmVzdWx0KTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKKworICAgIHJldHVybiByZXN1bHQ7CisgIH0KK30KKworLyoKKyAqIGZ1bmN0aW9ucyBmb3IgbWFuaXB1bGF0aW5nIGNhY2hlZCBtZXNzYWdlcworICovCit0eXBlZGVmIHN0cnVjdAoreworICBHc3RPYmplY3QgKnNyYzsKKyAgR3N0TWVzc2FnZVR5cGUgdHlwZXM7Cit9IE1lc3NhZ2VGaW5kOworCisvKiBjaGVjayBpZiBhIG1lc3NhZ2UgaXMgb2YgZ2l2ZW4gc3JjIGFuZCB0eXBlICovCitzdGF0aWMgZ2ludAorbWVzc2FnZV9jaGVjayAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIE1lc3NhZ2VGaW5kICogdGFyZ2V0KQoreworICBnYm9vbGVhbiBlcSA9IFRSVUU7CisKKyAgaWYgKHRhcmdldC0+c3JjKQorICAgIGVxICY9IEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkgPT0gdGFyZ2V0LT5zcmM7CisgIGlmICh0YXJnZXQtPnR5cGVzKQorICAgIGVxICY9IChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSAmIHRhcmdldC0+dHlwZXMpICE9IDA7CisgIEdTVF9MT0cgKCJsb29raW5nIGF0IG1lc3NhZ2UgJXA6ICVkIiwgbWVzc2FnZSwgZXEpOworCisgIHJldHVybiAoZXEgPyAwIDogMSk7Cit9CisKK3N0YXRpYyBHTGlzdCAqCitmaW5kX21lc3NhZ2UgKEdzdEJpbiAqIGJpbiwgR3N0T2JqZWN0ICogc3JjLCBHc3RNZXNzYWdlVHlwZSB0eXBlcykKK3sKKyAgR0xpc3QgKnJlc3VsdDsKKyAgTWVzc2FnZUZpbmQgZmluZDsKKworICBmaW5kLnNyYyA9IHNyYzsKKyAgZmluZC50eXBlcyA9IHR5cGVzOworCisgIHJlc3VsdCA9IGdfbGlzdF9maW5kX2N1c3RvbSAoYmluLT5tZXNzYWdlcywgJmZpbmQsCisgICAgICAoR0NvbXBhcmVGdW5jKSBtZXNzYWdlX2NoZWNrKTsKKworICBpZiAocmVzdWx0KSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAid2UgZm91bmQgYSBtZXNzYWdlICVwIGZyb20gJXMgbWF0Y2hpbmcgdHlwZXMgJTA4eCIsCisgICAgICAgIHJlc3VsdC0+ZGF0YSwgR1NUX09CSkVDVF9OQU1FIChHU1RfTUVTU0FHRV9DQVNUIChyZXN1bHQtPmRhdGEpLT5zcmMpLAorICAgICAgICB0eXBlcyk7CisgIH0gZWxzZSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAibm8gbWVzc2FnZSBmb3VuZCBtYXRjaGluZyB0eXBlcyAlMDh4IiwgdHlwZXMpOworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKyAgICB7CisgICAgICBndWludCBpOworCisgICAgICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykKKyAgICAgICAgaWYgKHR5cGVzICYgKDEgPDwgaSkpCisgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiICAlcyIsIGdzdF9tZXNzYWdlX3R5cGVfZ2V0X25hbWUgKDEgPDwgaSkpOworICAgIH0KKyNlbmRpZgorICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogd2l0aCBMT0NLLCByZXR1cm5zIFRSVUUgaWYgbWVzc2FnZSBoYWQgYSB2YWxpZCBTUkMsIHRha2VzIG93bmVyc2hpcCBvZgorICogdGhlIG1lc3NhZ2UuCisgKgorICogQSBtZXNzYWdlIHRoYXQgaXMgY2FjaGVkIGFuZCBoYXMgdGhlIHNhbWUgU1JDIGFuZCB0eXBlIGlzIHJlcGxhY2VkCisgKiBieSB0aGUgZ2l2ZW4gbWVzc2FnZS4KKyAqLworc3RhdGljIGdib29sZWFuCitiaW5fcmVwbGFjZV9tZXNzYWdlIChHc3RCaW4gKiBiaW4sIEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHc3RNZXNzYWdlVHlwZSB0eXBlcykKK3sKKyAgR0xpc3QgKnByZXZpb3VzOworICBHc3RPYmplY3QgKnNyYzsKKyAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKKworICBpZiAoKHNyYyA9IEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkpKSB7CisgICAgLyogZmlyc3QgZmluZCB0aGUgcHJldmlvdXMgbWVzc2FnZSBwb3N0ZWQgYnkgdGhpcyBlbGVtZW50ICovCisgICAgaWYgKChwcmV2aW91cyA9IGZpbmRfbWVzc2FnZSAoYmluLCBzcmMsIHR5cGVzKSkpIHsKKyAgICAgIEdzdE1lc3NhZ2UgKnByZXZpb3VzX21zZzsKKworICAgICAgLyogaWYgd2UgZm91bmQgYSBwcmV2aW91cyBtZXNzYWdlLCByZXBsYWNlIGl0ICovCisgICAgICBwcmV2aW91c19tc2cgPSBwcmV2aW91cy0+ZGF0YTsKKyAgICAgIHByZXZpb3VzLT5kYXRhID0gbWVzc2FnZTsKKworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAicmVwbGFjZSBvbGQgbWVzc2FnZSAlcyBmcm9tICVzIHdpdGggJXMgbWVzc2FnZSIsCisgICAgICAgICAgR1NUX01FU1NBR0VfVFlQRV9OQU1FIChwcmV2aW91c19tc2cpLCBHU1RfRUxFTUVOVF9OQU1FIChzcmMpLAorICAgICAgICAgIEdTVF9NRVNTQUdFX1RZUEVfTkFNRSAobWVzc2FnZSkpOworCisgICAgICBnc3RfbWVzc2FnZV91bnJlZiAocHJldmlvdXNfbXNnKTsKKyAgICB9IGVsc2UgeworICAgICAgLyoga2VlcCBuZXcgbWVzc2FnZSAqLworICAgICAgYmluLT5tZXNzYWdlcyA9IGdfbGlzdF9wcmVwZW5kIChiaW4tPm1lc3NhZ2VzLCBtZXNzYWdlKTsKKworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiZ290IG5ldyBtZXNzYWdlICVwLCAlcyBmcm9tICVzIiwKKyAgICAgICAgICBtZXNzYWdlLCBHU1RfTUVTU0FHRV9UWVBFX05BTUUgKG1lc3NhZ2UpLCBHU1RfRUxFTUVOVF9OQU1FIChzcmMpKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiZ290IG1lc3NhZ2UgJXMgZnJvbSAoTlVMTCksIG5vdCBwcm9jZXNzaW5nIiwKKyAgICAgICAgR1NUX01FU1NBR0VfVFlQRV9OQU1FIChtZXNzYWdlKSk7CisgICAgcmVzID0gRkFMU0U7CisgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOworICB9CisgIHJldHVybiByZXM7Cit9CisKKy8qIHdpdGggTE9DSy4gUmVtb3ZlIGFsbCBtZXNzYWdlcyBvZiBnaXZlbiB0eXBlcyAqLworc3RhdGljIHZvaWQKK2Jpbl9yZW1vdmVfbWVzc2FnZXMgKEdzdEJpbiAqIGJpbiwgR3N0T2JqZWN0ICogc3JjLCBHc3RNZXNzYWdlVHlwZSB0eXBlcykKK3sKKyAgTWVzc2FnZUZpbmQgZmluZDsKKyAgR0xpc3QgKndhbGssICpuZXh0OworCisgIGZpbmQuc3JjID0gc3JjOworICBmaW5kLnR5cGVzID0gdHlwZXM7CisKKyAgZm9yICh3YWxrID0gYmluLT5tZXNzYWdlczsgd2Fsazsgd2FsayA9IG5leHQpIHsKKyAgICBHc3RNZXNzYWdlICptZXNzYWdlID0gKEdzdE1lc3NhZ2UgKikgd2Fsay0+ZGF0YTsKKworICAgIG5leHQgPSBnX2xpc3RfbmV4dCAod2Fsayk7CisKKyAgICBpZiAobWVzc2FnZV9jaGVjayAobWVzc2FnZSwgJmZpbmQpID09IDApIHsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSksCisgICAgICAgICAgImRlbGV0aW5nIG1lc3NhZ2UgJXAgb2YgdHlwZXMgMHglMDh4IiwgbWVzc2FnZSwgdHlwZXMpOworICAgICAgYmluLT5tZXNzYWdlcyA9IGdfbGlzdF9kZWxldGVfbGluayAoYmluLT5tZXNzYWdlcywgd2Fsayk7CisgICAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSksCisgICAgICAgICAgIm5vdCBkZWxldGluZyBtZXNzYWdlICVwIG9mIHR5cGUgMHglMDh4IiwgbWVzc2FnZSwKKyAgICAgICAgICBHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSk7CisgICAgfQorICB9Cit9CisKKworLyogQ2hlY2sgaWYgdGhlIGJpbiBpcyBFT1MuIFdlIGRvIHRoaXMgYnkgc2Nhbm5pbmcgYWxsIHNpbmtzIGFuZAorICogY2hlY2tpbmcgaWYgdGhleSBwb3N0ZWQgYW4gRU9TIG1lc3NhZ2UuCisgKgorICogY2FsbCB3aXRoIGJpbiBMT0NLICovCitzdGF0aWMgZ2Jvb2xlYW4KK2lzX2VvcyAoR3N0QmluICogYmluLCBndWludDMyICogc2VxbnVtKQoreworICBnYm9vbGVhbiByZXN1bHQ7CisgIGdpbnQgbl9lb3MgPSAwOworICBHTGlzdCAqd2FsaywgKm1zZ3M7CisKKyAgcmVzdWx0ID0gVFJVRTsKKyAgZm9yICh3YWxrID0gYmluLT5jaGlsZHJlbjsgd2Fsazsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgeworICAgIEdzdEVsZW1lbnQgKmVsZW1lbnQ7CisKKyAgICBlbGVtZW50ID0gR1NUX0VMRU1FTlRfQ0FTVCAod2Fsay0+ZGF0YSk7CisgICAgaWYgKGJpbl9lbGVtZW50X2lzX3NpbmsgKGVsZW1lbnQsIGJpbikgPT0gMCkgeworICAgICAgLyogY2hlY2sgaWYgZWxlbWVudCBwb3N0ZWQgRU9TICovCisgICAgICBpZiAoKG1zZ3MgPQorICAgICAgICAgICAgICBmaW5kX21lc3NhZ2UgKGJpbiwgR1NUX09CSkVDVF9DQVNUIChlbGVtZW50KSwgR1NUX01FU1NBR0VfRU9TKSkpIHsKKyAgICAgICAgR1NUX0RFQlVHICgic2luayAnJXMnIHBvc3RlZCBFT1MiLCBHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSk7CisgICAgICAgICpzZXFudW0gPSBnc3RfbWVzc2FnZV9nZXRfc2VxbnVtIChHU1RfTUVTU0FHRV9DQVNUIChtc2dzLT5kYXRhKSk7CisgICAgICAgIG5fZW9zKys7CisgICAgICB9IGVsc2UgeworICAgICAgICBHU1RfREVCVUcgKCJzaW5rICclcycgZGlkIG5vdCBwb3N0IEVPUyB5ZXQiLAorICAgICAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOworICAgICAgICByZXN1bHQgPSBGQUxTRTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICB9CisgIC8qIEZJWE1FOiBTb21lIHRlc3RzIChlLmcuIGVsZW1lbnRzL2NhcHNmaWx0ZXIpIHVzZQorICAgKiBwaXBlbGluZXMgd2l0aCBhIGRhbmdsaW5nIHNpbmtwYWQgYnV0IG5vIHNpbmsgZWxlbWVudC4KKyAgICogVGhlc2UgdGVzdHMgYXNzdW1lIHRoYXQgbm8gRU9TIG1lc3NhZ2UgaXMgZXZlcgorICAgKiBwb3N0ZWQgb24gdGhlIGJ1cyBzbyBsZXQncyBrZWVwIHRoYXQgYmVoYXZpb3VyLgorICAgKiBJbiB2YWxpZCBwaXBlbGluZXMgdGhpcyBkb2Vzbid0IG1ha2UgYSBkaWZmZXJlbmNlLgorICAgKi8KKyAgcmV0dXJuIHJlc3VsdCAmJiBuX2VvcyA+IDA7Cit9CisKK3N0YXRpYyB2b2lkCit1bmxpbmtfcGFkcyAoY29uc3QgR1ZhbHVlICogaXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBHc3RQYWQgKnBhZDsKKyAgR3N0UGFkICpwZWVyOworCisgIHBhZCA9IGdfdmFsdWVfZ2V0X29iamVjdCAoaXRlbSk7CisKKyAgaWYgKChwZWVyID0gZ3N0X3BhZF9nZXRfcGVlciAocGFkKSkpIHsKKyAgICBpZiAoZ3N0X3BhZF9nZXRfZGlyZWN0aW9uIChwYWQpID09IEdTVF9QQURfU1JDKQorICAgICAgZ3N0X3BhZF91bmxpbmsgKHBhZCwgcGVlcik7CisgICAgZWxzZQorICAgICAgZ3N0X3BhZF91bmxpbmsgKHBlZXIsIHBhZCk7CisgICAgZ3N0X29iamVjdF91bnJlZiAocGVlcik7CisgIH0KK30KKworLyogdm1ldGhvZCB0aGF0IGFkZHMgYW4gZWxlbWVudCB0byBhIGJpbgorICoKKyAqIE1UIHNhZmUKKyAqLworc3RhdGljIGdib29sZWFuCitnc3RfYmluX2FkZF9mdW5jIChHc3RCaW4gKiBiaW4sIEdzdEVsZW1lbnQgKiBlbGVtZW50KQoreworICBnY2hhciAqZWxlbV9uYW1lOworICBHc3RJdGVyYXRvciAqaXQ7CisgIGdib29sZWFuIGlzX3NpbmssIGlzX3NvdXJjZTsKKyAgR3N0TWVzc2FnZSAqY2xvY2tfbWVzc2FnZSA9IE5VTEwsICphc3luY19tZXNzYWdlID0gTlVMTDsKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OworCisgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgImVsZW1lbnQgOiVzIiwgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOworCisgIC8qIHdlIG9idmlvdXNseSBjYW4ndCBhZGQgb3Vyc2VsZiB0byBvdXJzZWxmICovCisgIGlmIChHX1VOTElLRUxZIChHU1RfRUxFTUVOVF9DQVNUIChlbGVtZW50KSA9PSBHU1RfRUxFTUVOVF9DQVNUIChiaW4pKSkKKyAgICBnb3RvIGFkZGluZ19pdHNlbGY7CisKKyAgLyogZ2V0IHRoZSBlbGVtZW50IG5hbWUgdG8gbWFrZSBzdXJlIGl0IGlzIHVuaXF1ZSBpbiB0aGlzIGJpbi4gKi8KKyAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKKyAgZWxlbV9uYW1lID0gZ19zdHJkdXAgKEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKKyAgaXNfc2luayA9IEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKGVsZW1lbnQsIEdTVF9FTEVNRU5UX0lTX1NJTkspOworICBpc19zb3VyY2UgPSBHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChlbGVtZW50LCBHU1RfRUxFTUVOVF9JU19TT1VSQ0UpOworICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChiaW4pOworCisgIC8qIHRoZW4gY2hlY2sgdG8gc2VlIGlmIHRoZSBlbGVtZW50J3MgbmFtZSBpcyBhbHJlYWR5IHRha2VuIGluIHRoZSBiaW4sCisgICAqIHdlIGNhbiBzYWZlbHkgdGFrZSB0aGUgbG9jayBoZXJlLiBUaGlzIGNoZWNrIGlzIHByb2JhYmx5IGJvZ3VzIGJlY2F1c2UKKyAgICogeW91IGNhbiBzYWZlbHkgY2hhbmdlIHRoZSBlbGVtZW50IG5hbWUgYWZ0ZXIgdGhpcyBjaGVjayBhbmQgYmVmb3JlIHNldHRpbmcKKyAgICogdGhlIG9iamVjdCBwYXJlbnQuIFRoZSB3aW5kb3cgaXMgdmVyeSBzbWFsbCB0aG91Z2guLi4gKi8KKyAgaWYgKEdfVU5MSUtFTFkgKCFnc3Rfb2JqZWN0X2NoZWNrX3VuaXF1ZW5lc3MgKGJpbi0+Y2hpbGRyZW4sIGVsZW1fbmFtZSkpKQorICAgIGdvdG8gZHVwbGljYXRlX25hbWU7CisKKyAgLyogc2V0IHRoZSBlbGVtZW50J3MgcGFyZW50IGFuZCBhZGQgdGhlIGVsZW1lbnQgdG8gdGhlIGJpbidzIGxpc3Qgb2YgY2hpbGRyZW4gKi8KKyAgaWYgKEdfVU5MSUtFTFkgKCFnc3Rfb2JqZWN0X3NldF9wYXJlbnQgKEdTVF9PQkpFQ1RfQ0FTVCAoZWxlbWVudCksCisgICAgICAgICAgICAgIEdTVF9PQkpFQ1RfQ0FTVCAoYmluKSkpKQorICAgIGdvdG8gaGFkX3BhcmVudDsKKworICAvKiBpZiB3ZSBhZGQgYSBzaW5rIHdlIGJlY29tZSBhIHNpbmsgKi8KKyAgaWYgKGlzX3NpbmspIHsKKyAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9QQVJFTlRBR0UsIGJpbiwgImVsZW1lbnQgXCIlc1wiIHdhcyBzaW5rIiwKKyAgICAgICAgZWxlbV9uYW1lKTsKKyAgICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChiaW4sIEdTVF9FTEVNRU5UX0lTX1NJTkspOworICB9CisgIGlmIChpc19zb3VyY2UpIHsKKyAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9QQVJFTlRBR0UsIGJpbiwgImVsZW1lbnQgXCIlc1wiIHdhcyBzb3VyY2UiLAorICAgICAgICBlbGVtX25hbWUpOworICAgIEdTVF9PQkpFQ1RfRkxBR19TRVQgKGJpbiwgR1NUX0VMRU1FTlRfSVNfU09VUkNFKTsKKyAgfQorICBpZiAoZ3N0X2VsZW1lbnRfcHJvdmlkZXNfY2xvY2sgKGVsZW1lbnQpKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiZWxlbWVudCBcIiVzXCIgY2FuIHByb3ZpZGUgYSBjbG9jayIsIGVsZW1fbmFtZSk7CisgICAgY2xvY2tfbWVzc2FnZSA9CisgICAgICAgIGdzdF9tZXNzYWdlX25ld19jbG9ja19wcm92aWRlIChHU1RfT0JKRUNUX0NBU1QgKGVsZW1lbnQpLCBOVUxMLCBUUlVFKTsKKyAgfQorCisgIGJpbi0+Y2hpbGRyZW4gPSBnX2xpc3RfcHJlcGVuZCAoYmluLT5jaGlsZHJlbiwgZWxlbWVudCk7CisgIGJpbi0+bnVtY2hpbGRyZW4rKzsKKyAgYmluLT5jaGlsZHJlbl9jb29raWUrKzsKKyAgYmluLT5wcml2LT5zdHJ1Y3R1cmVfY29va2llKys7CisKKyAgLyogZGlzdHJpYnV0ZSB0aGUgYnVzICovCisgIGdzdF9lbGVtZW50X3NldF9idXMgKGVsZW1lbnQsIGJpbi0+Y2hpbGRfYnVzKTsKKworICAvKiBwcm9wYWdhdGUgdGhlIGN1cnJlbnQgYmFzZV90aW1lLCBzdGFydF90aW1lIGFuZCBjbG9jayAqLworICBnc3RfZWxlbWVudF9zZXRfYmFzZV90aW1lIChlbGVtZW50LCBHU1RfRUxFTUVOVF9DQVNUIChiaW4pLT5iYXNlX3RpbWUpOworICBnc3RfZWxlbWVudF9zZXRfc3RhcnRfdGltZSAoZWxlbWVudCwgR1NUX0VMRU1FTlRfU1RBUlRfVElNRSAoYmluKSk7CisgIC8qIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgZWxlbWVudCBkaWQgbm90IGFjY2VwdCB0aGUgY2xvY2sgYnV0CisgICAqIHRoYXQgaXMgbm90IGltcG9ydGFudCByaWdodCBub3cuIFdoZW4gdGhlIHBpcGVsaW5lIGdvZXMgdG8gUExBWUlORywKKyAgICogYSBuZXcgY2xvY2sgd2lsbCBiZSBzZWxlY3RlZCAqLworICBnc3RfZWxlbWVudF9zZXRfY2xvY2sgKGVsZW1lbnQsIEdTVF9FTEVNRU5UX0NMT0NLIChiaW4pKTsKKyAgLyogc2V0IHRoZSBjYWNoZWQgaW5kZXggb24gdGhlIGNoaWxkcmVuICovCisgIGlmIChiaW4tPnByaXYtPmluZGV4KQorICAgIGdzdF9lbGVtZW50X3NldF9pbmRleCAoZWxlbWVudCwgYmluLT5wcml2LT5pbmRleCk7CisKKyAgcmV0ID0gR1NUX1NUQVRFX1JFVFVSTiAoYmluKTsKKyAgLyogbm8gbmVlZCB0byB1cGRhdGUgdGhlIHN0YXRlIGlmIHdlIGFyZSBpbiBlcnJvciAqLworICBpZiAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkKKyAgICBnb3RvIG5vX3N0YXRlX3JlY2FsYzsKKworICAvKiB1cGRhdGUgdGhlIGJpbiBzdGF0ZSwgdGhlIG5ldyBlbGVtZW50IGNvdWxkIGhhdmUgYmVlbiBhbiBBU1lOQyBvcgorICAgKiBOT19QUkVST0xMIGVsZW1lbnQgKi8KKyAgcmV0ID0gR1NUX1NUQVRFX1JFVFVSTiAoZWxlbWVudCk7CisgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgImFkZGVkICVzIGVsZW1lbnQiLAorICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRfbmFtZSAocmV0KSk7CisKKyAgc3dpdGNoIChyZXQpIHsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfQVNZTkM6CisgICAgeworICAgICAgLyogY3JlYXRlIG1lc3NhZ2UgdG8gdHJhY2sgdGhpcyBheW5jIGVsZW1lbnQgd2hlbiBpdCBwb3N0cyBhbiBhc3luYy1kb25lCisgICAgICAgKiBtZXNzYWdlICovCisgICAgICBhc3luY19tZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2FzeW5jX3N0YXJ0IChHU1RfT0JKRUNUX0NBU1QgKGVsZW1lbnQpKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTDoKKyAgICAgIC8qIGlnbm9yZSBhbGwgYXN5bmMgZWxlbWVudHMgd2UgbWlnaHQgaGF2ZSBhbmQgY29tbWl0IG91ciBzdGF0ZSAqLworICAgICAgYmluX2hhbmRsZV9hc3luY19kb25lIChiaW4sIHJldCwgRkFMU0UsIEZBTFNFKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOgorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKK25vX3N0YXRlX3JlY2FsYzoKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7CisKKyAgLyogcG9zdCB0aGUgbWVzc2FnZXMgb24gdGhlIGJ1cyBvZiB0aGUgZWxlbWVudCBzbyB0aGF0IHRoZSBiaW4gY2FuIGhhbmRsZQorICAgKiB0aGVtICovCisgIGlmIChjbG9ja19tZXNzYWdlKQorICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoZWxlbWVudCksIGNsb2NrX21lc3NhZ2UpOworCisgIGlmIChhc3luY19tZXNzYWdlKQorICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoZWxlbWVudCksIGFzeW5jX21lc3NhZ2UpOworCisgIC8qIHVubGluayBhbGwgbGlua2VkIHBhZHMgKi8KKyAgaXQgPSBnc3RfZWxlbWVudF9pdGVyYXRlX3BhZHMgKGVsZW1lbnQpOworICBnc3RfaXRlcmF0b3JfZm9yZWFjaCAoaXQsIChHc3RJdGVyYXRvckZvcmVhY2hGdW5jdGlvbikgdW5saW5rX3BhZHMsIE5VTEwpOworICBnc3RfaXRlcmF0b3JfZnJlZSAoaXQpOworCisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1BBUkVOVEFHRSwgYmluLCAiYWRkZWQgZWxlbWVudCBcIiVzXCIiLAorICAgICAgZWxlbV9uYW1lKTsKKyAgZ19mcmVlIChlbGVtX25hbWUpOworCisgIGdfc2lnbmFsX2VtaXQgKGJpbiwgZ3N0X2Jpbl9zaWduYWxzW0VMRU1FTlRfQURERURdLCAwLCBlbGVtZW50KTsKKyAgZ3N0X2NoaWxkX3Byb3h5X2NoaWxkX2FkZGVkICgoR3N0T2JqZWN0ICopIGJpbiwgKEdzdE9iamVjdCAqKSBlbGVtZW50KTsKKworICByZXR1cm4gVFJVRTsKKworICAvKiBFUlJPUiBoYW5kbGluZyBoZXJlICovCithZGRpbmdfaXRzZWxmOgorICB7CisgICAgR1NUX09CSkVDVF9MT0NLIChiaW4pOworICAgIGdfd2FybmluZyAoIkNhbm5vdCBhZGQgYmluICclcycgdG8gaXRzZWxmIiwgR1NUX0VMRU1FTlRfTkFNRSAoYmluKSk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7CisgICAgcmV0dXJuIEZBTFNFOworICB9CitkdXBsaWNhdGVfbmFtZToKKyAgeworICAgIGdfd2FybmluZyAoIk5hbWUgJyVzJyBpcyBub3QgdW5pcXVlIGluIGJpbiAnJXMnLCBub3QgYWRkaW5nIiwKKyAgICAgICAgZWxlbV9uYW1lLCBHU1RfRUxFTUVOVF9OQU1FIChiaW4pKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKKyAgICBnX2ZyZWUgKGVsZW1fbmFtZSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CitoYWRfcGFyZW50OgorICB7CisgICAgZ193YXJuaW5nICgiRWxlbWVudCAnJXMnIGFscmVhZHkgaGFzIHBhcmVudCIsIGVsZW1fbmFtZSk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7CisgICAgZ19mcmVlIChlbGVtX25hbWUpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCisvKioKKyAqIGdzdF9iaW5fYWRkOgorICogQGJpbjogYSAjR3N0QmluCisgKiBAZWxlbWVudDogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdEVsZW1lbnQgdG8gYWRkCisgKgorICogQWRkcyB0aGUgZ2l2ZW4gZWxlbWVudCB0byB0aGUgYmluLiAgU2V0cyB0aGUgZWxlbWVudCdzIHBhcmVudCwgYW5kIHRodXMKKyAqIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgZWxlbWVudC4gQW4gZWxlbWVudCBjYW4gb25seSBiZSBhZGRlZCB0byBvbmUgYmluLgorICoKKyAqIElmIHRoZSBlbGVtZW50J3MgcGFkcyBhcmUgbGlua2VkIHRvIG90aGVyIHBhZHMsIHRoZSBwYWRzIHdpbGwgYmUgdW5saW5rZWQKKyAqIGJlZm9yZSB0aGUgZWxlbWVudCBpcyBhZGRlZCB0byB0aGUgYmluLgorICoKKyAqIDxub3RlPgorICogV2hlbiB5b3UgYWRkIGFuIGVsZW1lbnQgdG8gYW4gYWxyZWFkeS1ydW5uaW5nIHBpcGVsaW5lLCB5b3Ugd2lsbCBoYXZlIHRvCisgKiB0YWtlIGNhcmUgdG8gc2V0IHRoZSBzdGF0ZSBvZiB0aGUgbmV3bHktYWRkZWQgZWxlbWVudCB0byB0aGUgZGVzaXJlZAorICogc3RhdGUgKHVzdWFsbHkgUExBWUlORyBvciBQQVVTRUQsIHNhbWUgeW91IHNldCB0aGUgcGlwZWxpbmUgdG8gb3JpZ2luYWxseSkKKyAqIHdpdGggZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKCksIG9yIHVzZSBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KCkuCisgKiBUaGUgYmluIG9yIHBpcGVsaW5lIHdpbGwgbm90IHRha2UgY2FyZSBvZiB0aGlzIGZvciB5b3UuCisgKiA8L25vdGU+CisgKgorICogTVQgc2FmZS4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBlbGVtZW50IGNvdWxkIGJlIGFkZGVkLCBGQUxTRSBpZgorICogdGhlIGJpbiBkb2VzIG5vdCB3YW50IHRvIGFjY2VwdCB0aGUgZWxlbWVudC4KKyAqLworZ2Jvb2xlYW4KK2dzdF9iaW5fYWRkIChHc3RCaW4gKiBiaW4sIEdzdEVsZW1lbnQgKiBlbGVtZW50KQoreworICBHc3RCaW5DbGFzcyAqYmNsYXNzOworICBnYm9vbGVhbiByZXN1bHQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CSU4gKGJpbiksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSwgRkFMU0UpOworCisgIGJjbGFzcyA9IEdTVF9CSU5fR0VUX0NMQVNTIChiaW4pOworCisgIGlmIChHX1VOTElLRUxZIChiY2xhc3MtPmFkZF9lbGVtZW50ID09IE5VTEwpKQorICAgIGdvdG8gbm9fZnVuY3Rpb247CisKKyAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9QQVJFTlRBR0UsICJhZGRpbmcgZWxlbWVudCAlcyB0byBiaW4gJXMiLAorICAgICAgR1NUX1NUUl9OVUxMIChHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSksCisgICAgICBHU1RfU1RSX05VTEwgKEdTVF9FTEVNRU5UX05BTUUgKGJpbikpKTsKKworICByZXN1bHQgPSBiY2xhc3MtPmFkZF9lbGVtZW50IChiaW4sIGVsZW1lbnQpOworCisgIHJldHVybiByZXN1bHQ7CisKKyAgLyogRVJST1IgaGFuZGxpbmcgKi8KK25vX2Z1bmN0aW9uOgorICB7CisgICAgZ193YXJuaW5nICgiYWRkaW5nIGVsZW1lbnRzIHRvIGJpbiAnJXMnIGlzIG5vdCBzdXBwb3J0ZWQiLAorICAgICAgICBHU1RfRUxFTUVOVF9OQU1FIChiaW4pKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworLyogcmVtb3ZlIGFuIGVsZW1lbnQgZnJvbSB0aGUgYmluCisgKgorICogTVQgc2FmZQorICovCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iaW5fcmVtb3ZlX2Z1bmMgKEdzdEJpbiAqIGJpbiwgR3N0RWxlbWVudCAqIGVsZW1lbnQpCit7CisgIGdjaGFyICplbGVtX25hbWU7CisgIEdzdEl0ZXJhdG9yICppdDsKKyAgZ2Jvb2xlYW4gaXNfc2luaywgaXNfc291cmNlLCBvdGhlcnNpbmssIG90aGVyc291cmNlLCBmb3VuZDsKKyAgR3N0TWVzc2FnZSAqY2xvY2tfbWVzc2FnZSA9IE5VTEw7CisgIEdzdENsb2NrICoqcHJvdmlkZWRfY2xvY2tfcDsKKyAgR3N0RWxlbWVudCAqKmNsb2NrX3Byb3ZpZGVyX3A7CisgIEdMaXN0ICp3YWxrLCAqbmV4dDsKKyAgZ2Jvb2xlYW4gb3RoZXJfYXN5bmMsIHRoaXNfYXN5bmMsIGhhdmVfbm9fcHJlcm9sbDsKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OworCisgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgImVsZW1lbnQgOiVzIiwgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoZWxlbWVudCk7CisgIC8qIENoZWNrIGlmIHRoZSBlbGVtZW50IGlzIGFscmVhZHkgYmVpbmcgcmVtb3ZlZCBhbmQgaW1tZWRpYXRlbHkKKyAgICogcmV0dXJuICovCisgIGlmIChHX1VOTElLRUxZIChHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChlbGVtZW50LCBHU1RfRUxFTUVOVF9VTlBBUkVOVElORykpKQorICAgIGdvdG8gYWxyZWFkeV9yZW1vdmluZzsKKworICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChlbGVtZW50LCBHU1RfRUxFTUVOVF9VTlBBUkVOVElORyk7CisgIC8qIGdyYWIgZWxlbWVudCBuYW1lIHNvIHdlIGNhbiBwcmludCBpdCAqLworICBlbGVtX25hbWUgPSBnX3N0cmR1cCAoR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOworICBpc19zaW5rID0gR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAoZWxlbWVudCwgR1NUX0VMRU1FTlRfSVNfU0lOSyk7CisgIGlzX3NvdXJjZSA9IEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKGVsZW1lbnQsIEdTVF9FTEVNRU5UX0lTX1NPVVJDRSk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKKworICAvKiB1bmxpbmsgYWxsIGxpbmtlZCBwYWRzICovCisgIGl0ID0gZ3N0X2VsZW1lbnRfaXRlcmF0ZV9wYWRzIChlbGVtZW50KTsKKyAgZ3N0X2l0ZXJhdG9yX2ZvcmVhY2ggKGl0LCAoR3N0SXRlcmF0b3JGb3JlYWNoRnVuY3Rpb24pIHVubGlua19wYWRzLCBOVUxMKTsKKyAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKGJpbik7CisgIGZvdW5kID0gRkFMU0U7CisgIG90aGVyc2luayA9IEZBTFNFOworICBvdGhlcnNvdXJjZSA9IEZBTFNFOworICBoYXZlX25vX3ByZXJvbGwgPSBGQUxTRTsKKyAgLyogaXRlcmF0ZSB0aGUgZWxlbWVudHMsIHdlIGNvbGxlY3Qgd2hpY2ggb25lcyBhcmUgYXN5bmMgYW5kIG5vX3ByZXJvbGwuIFdlCisgICAqIGFsc28gcmVtb3ZlIHRoZSBlbGVtZW50IHdoZW4gd2UgZmluZCBpdC4gKi8KKyAgZm9yICh3YWxrID0gYmluLT5jaGlsZHJlbjsgd2Fsazsgd2FsayA9IG5leHQpIHsKKyAgICBHc3RFbGVtZW50ICpjaGlsZCA9IEdTVF9FTEVNRU5UX0NBU1QgKHdhbGstPmRhdGEpOworCisgICAgbmV4dCA9IGdfbGlzdF9uZXh0ICh3YWxrKTsKKworICAgIGlmIChjaGlsZCA9PSBlbGVtZW50KSB7CisgICAgICBmb3VuZCA9IFRSVUU7CisgICAgICAvKiByZW1vdmUgdGhlIGVsZW1lbnQgKi8KKyAgICAgIGJpbi0+Y2hpbGRyZW4gPSBnX2xpc3RfZGVsZXRlX2xpbmsgKGJpbi0+Y2hpbGRyZW4sIHdhbGspOworICAgIH0gZWxzZSB7CisgICAgICBnYm9vbGVhbiBjaGlsZF9zaW5rLCBjaGlsZF9zb3VyY2U7CisKKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoY2hpbGQpOworICAgICAgY2hpbGRfc2luayA9IEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKGNoaWxkLCBHU1RfRUxFTUVOVF9JU19TSU5LKTsKKyAgICAgIGNoaWxkX3NvdXJjZSA9IEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKGNoaWxkLCBHU1RfRUxFTUVOVF9JU19TT1VSQ0UpOworICAgICAgLyogd2hlbiB3ZSByZW1vdmUgYSBzaW5rLCBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgc2lua3MuICovCisgICAgICBpZiAoaXNfc2luayAmJiAhb3RoZXJzaW5rICYmIGNoaWxkX3NpbmspCisgICAgICAgIG90aGVyc2luayA9IFRSVUU7CisgICAgICBpZiAoaXNfc291cmNlICYmICFvdGhlcnNvdXJjZSAmJiBjaGlsZF9zb3VyY2UpCisgICAgICAgIG90aGVyc291cmNlID0gVFJVRTsKKyAgICAgIC8qIGNoZWNrIGlmIHdlIGhhdmUgTk9fUFJFUk9MTCBjaGlsZHJlbiAqLworICAgICAgaWYgKEdTVF9TVEFURV9SRVRVUk4gKGNoaWxkKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwpCisgICAgICAgIGhhdmVfbm9fcHJlcm9sbCA9IFRSVUU7CisgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoY2hpbGQpOworICAgIH0KKyAgfQorCisgIC8qIHRoZSBlbGVtZW50IG11c3QgaGF2ZSBiZWVuIGluIHRoZSBiaW4ncyBsaXN0IG9mIGNoaWxkcmVuICovCisgIGlmIChHX1VOTElLRUxZICghZm91bmQpKQorICAgIGdvdG8gbm90X2luX2JpbjsKKworICAvKiB3ZSBub3cgcmVtb3ZlZCB0aGUgZWxlbWVudCBmcm9tIHRoZSBsaXN0IG9mIGVsZW1lbnRzLCBpbmNyZW1lbnQgdGhlIGNvb2tpZQorICAgKiBzbyB0aGF0IG90aGVycyBjYW4gZGV0ZWN0IGEgY2hhbmdlIGluIHRoZSBjaGlsZHJlbiBsaXN0LiAqLworICBiaW4tPm51bWNoaWxkcmVuLS07CisgIGJpbi0+Y2hpbGRyZW5fY29va2llKys7CisgIGJpbi0+cHJpdi0+c3RydWN0dXJlX2Nvb2tpZSsrOworCisgIGlmIChpc19zaW5rICYmICFvdGhlcnNpbmspIHsKKyAgICAvKiB3ZSdyZSBub3QgYSBzaW5rIGFueW1vcmUgKi8KKyAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJ3ZSByZW1vdmVkIHRoZSBsYXN0IHNpbmsiKTsKKyAgICBHU1RfT0JKRUNUX0ZMQUdfVU5TRVQgKGJpbiwgR1NUX0VMRU1FTlRfSVNfU0lOSyk7CisgIH0KKyAgaWYgKGlzX3NvdXJjZSAmJiAhb3RoZXJzb3VyY2UpIHsKKyAgICAvKiB3ZSdyZSBub3QgYSBzb3VyY2UgYW55bW9yZSAqLworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgIndlIHJlbW92ZWQgdGhlIGxhc3Qgc291cmNlIik7CisgICAgR1NUX09CSkVDVF9GTEFHX1VOU0VUIChiaW4sIEdTVF9FTEVNRU5UX0lTX1NPVVJDRSk7CisgIH0KKworCisgIC8qIGlmIHRoZSBjbG9jayBwcm92aWRlciBmb3IgdGhpcyBlbGVtZW50IGlzIHJlbW92ZWQsIHdlIGxvc3QKKyAgICogdGhlIGNsb2NrIGFzIHdlbGwsIHdlIG5lZWQgdG8gaW5mb3JtIHRoZSBwYXJlbnQgb2YgdGhpcworICAgKiBzbyB0aGF0IGl0IGNhbiBzZWxlY3QgYSBuZXcgY2xvY2sgKi8KKyAgaWYgKGJpbi0+Y2xvY2tfcHJvdmlkZXIgPT0gZWxlbWVudCkgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgImVsZW1lbnQgXCIlc1wiIHByb3ZpZGVkIHRoZSBjbG9jayIsIGVsZW1fbmFtZSk7CisgICAgYmluLT5jbG9ja19kaXJ0eSA9IFRSVUU7CisgICAgY2xvY2tfbWVzc2FnZSA9CisgICAgICAgIGdzdF9tZXNzYWdlX25ld19jbG9ja19sb3N0IChHU1RfT0JKRUNUX0NBU1QgKGJpbiksIGJpbi0+cHJvdmlkZWRfY2xvY2spOworICAgIHByb3ZpZGVkX2Nsb2NrX3AgPSAmYmluLT5wcm92aWRlZF9jbG9jazsKKyAgICBjbG9ja19wcm92aWRlcl9wID0gJmJpbi0+Y2xvY2tfcHJvdmlkZXI7CisgICAgZ3N0X29iamVjdF9yZXBsYWNlICgoR3N0T2JqZWN0ICoqKSBwcm92aWRlZF9jbG9ja19wLCBOVUxMKTsKKyAgICBnc3Rfb2JqZWN0X3JlcGxhY2UgKChHc3RPYmplY3QgKiopIGNsb2NrX3Byb3ZpZGVyX3AsIE5VTEwpOworICB9CisKKyAgLyogcmVtb3ZlIG1lc3NhZ2VzIGZvciB0aGUgZWxlbWVudCwgaWYgdGhlcmUgd2FzIGEgcGVuZGluZyBBU1lOQ19TVEFSVAorICAgKiBtZXNzYWdlIHdlIG11c3Qgc2VlIGlmIHJlbW92aW5nIHRoZSBlbGVtZW50IGNhdXNlZCB0aGUgYmluIHRvIGxvc2UgaXRzCisgICAqIGFzeW5jIHN0YXRlLiAqLworICB0aGlzX2FzeW5jID0gRkFMU0U7CisgIG90aGVyX2FzeW5jID0gRkFMU0U7CisgIGZvciAod2FsayA9IGJpbi0+bWVzc2FnZXM7IHdhbGs7IHdhbGsgPSBuZXh0KSB7CisgICAgR3N0TWVzc2FnZSAqbWVzc2FnZSA9IChHc3RNZXNzYWdlICopIHdhbGstPmRhdGE7CisgICAgR3N0RWxlbWVudCAqc3JjID0gR1NUX0VMRU1FTlRfQ0FTVCAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSk7CisgICAgZ2Jvb2xlYW4gcmVtb3ZlOworCisgICAgbmV4dCA9IGdfbGlzdF9uZXh0ICh3YWxrKTsKKyAgICByZW1vdmUgPSBGQUxTRTsKKworICAgIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkpIHsKKyAgICAgIGNhc2UgR1NUX01FU1NBR0VfQVNZTkNfU1RBUlQ6CisgICAgICAgIGlmIChzcmMgPT0gZWxlbWVudCkKKyAgICAgICAgICB0aGlzX2FzeW5jID0gVFJVRTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIG90aGVyX2FzeW5jID0gVFJVRTsKKworICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJsb29raW5nIGF0IG1lc3NhZ2UgJXAiLCBtZXNzYWdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9NRVNTQUdFX1NUUlVDVFVSRV9DSEFOR0U6CisgICAgICB7CisgICAgICAgIEdzdEVsZW1lbnQgKm93bmVyOworCisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImxvb2tpbmcgYXQgc3RydWN0dXJlIGNoYW5nZSBtZXNzYWdlICVwIiwKKyAgICAgICAgICAgIG1lc3NhZ2UpOworICAgICAgICAvKiBpdCdzIHVubGlrZWx5IHRoYXQgdGhpcyBtZXNzYWdlIGlzIHN0aWxsIGluIHRoZSBsaXN0IG9mIG1lc3NhZ2VzCisgICAgICAgICAqIGJlY2F1c2UgdGhpcyB3b3VsZCBtZWFuIHRoYXQgYSBsaW5rL3VubGluayBpcyBidXN5IGluIGFub3RoZXIgdGhyZWFkCisgICAgICAgICAqIHdoaWxlIHdlIHJlbW92ZSB0aGUgZWxlbWVudC4gV2Ugc3RpbGwgaGF2ZSB0byByZW1vdmUgdGhlIG1lc3NhZ2UKKyAgICAgICAgICogYmVjYXVzZSB3ZSBtaWdodCBub3QgcmVjZWl2ZSB0aGUgZG9uZSBtZXNzYWdlIGFueW1vcmUgd2hlbiB0aGUgZWxlbWVudAorICAgICAgICAgKiBpcyByZW1vdmVkIGZyb20gdGhlIGJpbi4gKi8KKyAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RydWN0dXJlX2NoYW5nZSAobWVzc2FnZSwgTlVMTCwgJm93bmVyLCBOVUxMKTsKKyAgICAgICAgaWYgKG93bmVyID09IGVsZW1lbnQpCisgICAgICAgICAgcmVtb3ZlID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKHNyYyA9PSBlbGVtZW50KQorICAgICAgcmVtb3ZlID0gVFJVRTsKKworICAgIGlmIChyZW1vdmUpIHsKKyAgICAgIC8qIGRlbGV0ZSBhbGwgbWVzc2FnZSB0eXBlcyAqLworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiZGVsZXRpbmcgbWVzc2FnZSAlcCBvZiBlbGVtZW50IFwiJXNcIiIsCisgICAgICAgICAgbWVzc2FnZSwgZWxlbV9uYW1lKTsKKyAgICAgIGJpbi0+bWVzc2FnZXMgPSBnX2xpc3RfZGVsZXRlX2xpbmsgKGJpbi0+bWVzc2FnZXMsIHdhbGspOworICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOworICAgIH0KKyAgfQorCisgIC8qIGdldCBsYXN0IHJldHVybiAqLworICByZXQgPSBHU1RfU1RBVEVfUkVUVVJOIChiaW4pOworCisgIC8qIG5vIG5lZWQgdG8gdXBkYXRlIHRoZSBzdGF0ZSBpZiB3ZSBhcmUgaW4gZXJyb3IgKi8KKyAgaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpCisgICAgZ290byBub19zdGF0ZV9yZWNhbGM7CisKKyAgaWYgKCFvdGhlcl9hc3luYyAmJiB0aGlzX2FzeW5jKSB7CisgICAgLyogYWxsIG90aGVyIGVsZW1lbnRzIHdlcmUgbm90IGFzeW5jIGFuZCB3ZSByZW1vdmVkIHRoZSBhc3luYyBvbmUsCisgICAgICogaGFuZGxlIHRoZSBhc3luYy1kb25lIGNhc2UgYmVjYXVzZSB3ZSBhcmUgbm90IGFzeW5jIGFueW1vcmUgbm93LiAqLworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwKKyAgICAgICAgIndlIHJlbW92ZWQgdGhlIGxhc3QgYXN5bmMgZWxlbWVudCwgaGF2ZSBub19wcmVyb2xsICVkIiwKKyAgICAgICAgaGF2ZV9ub19wcmVyb2xsKTsKKworICAgIC8qIHRoZSBjdXJyZW50IHN0YXRlIHJldHVybiBvZiB0aGUgYmluIGRlcGVuZHMgb24gaWYgdGhlcmUgYXJlIG5vX3ByZXJvbGwKKyAgICAgKiBlbGVtZW50cyBpbiB0aGUgcGlwZWxpbmUgb3Igbm90ICovCisgICAgaWYgKGhhdmVfbm9fcHJlcm9sbCkKKyAgICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTDsKKyAgICBlbHNlCisgICAgICByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7CisKKyAgICBiaW5faGFuZGxlX2FzeW5jX2RvbmUgKGJpbiwgcmV0LCBGQUxTRSwgRkFMU0UpOworICB9IGVsc2UgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwKKyAgICAgICAgInJlY2FsYyBzdGF0ZSBwcmVyb2xsOiAlZCwgb3RoZXIgYXN5bmM6ICVkLCB0aGlzIGFzeW5jICVkIiwKKyAgICAgICAgaGF2ZV9ub19wcmVyb2xsLCBvdGhlcl9hc3luYywgdGhpc19hc3luYyk7CisKKyAgICBpZiAoaGF2ZV9ub19wcmVyb2xsKSB7CisgICAgICByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEw7CisgICAgfSBlbHNlIGlmIChvdGhlcl9hc3luYykgeworICAgICAgLyogdGhlcmUgYXJlIG90aGVyIGFzeW5jIGVsZW1lbnRzIGFuZCB3ZSB3ZXJlIG5vdCBkb2luZyBhbiBhc3luYyBzdGF0ZQorICAgICAgICogY2hhbmdlLCBjaGFuZ2Ugb3VyIHBlbmRpbmcgc3RhdGUgYW5kIGdvIGFzeW5jICovCisgICAgICBpZiAoR1NUX1NUQVRFX1BFTkRJTkcgKGJpbikgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORykgeworICAgICAgICBHU1RfU1RBVEVfTkVYVCAoYmluKSA9IEdTVF9TVEFURSAoYmluKTsKKyAgICAgICAgR1NUX1NUQVRFX1BFTkRJTkcgKGJpbikgPSBHU1RfU1RBVEUgKGJpbik7CisgICAgICB9CisgICAgICByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DOworICAgIH0KKyAgICBHU1RfU1RBVEVfUkVUVVJOIChiaW4pID0gcmV0OworICB9Citub19zdGF0ZV9yZWNhbGM6CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOworCisgIGlmIChjbG9ja19tZXNzYWdlKQorICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoYmluKSwgY2xvY2tfbWVzc2FnZSk7CisKKyAgR1NUX0NBVF9JTkZPX09CSkVDVCAoR1NUX0NBVF9QQVJFTlRBR0UsIGJpbiwgInJlbW92ZWQgY2hpbGQgXCIlc1wiIiwKKyAgICAgIGVsZW1fbmFtZSk7CisgIGdfZnJlZSAoZWxlbV9uYW1lKTsKKworICBnc3RfZWxlbWVudF9zZXRfYnVzIChlbGVtZW50LCBOVUxMKTsKKworICAvKiBDbGVhciB0aGUgY2xvY2sgd2UgcHJvdmlkZWQgdG8gdGhlIGVsZW1lbnQgKi8KKyAgZ3N0X2VsZW1lbnRfc2V0X2Nsb2NrIChlbGVtZW50LCBOVUxMKTsKKworICAvKiB3ZSByZWYgaGVyZSBiZWNhdXNlIGFmdGVyIHRoZSBfdW5wYXJlbnQoKSB0aGUgZWxlbWVudCBjYW4gYmUgZGlzcG9zZWQKKyAgICogYW5kIHdlIHN0aWxsIG5lZWQgaXQgdG8gcmVzZXQgdGhlIFVOUEFSRU5USU5HIGZsYWcgYW5kIGZpcmUgYSBzaWduYWwuICovCisgIGdzdF9vYmplY3RfcmVmIChlbGVtZW50KTsKKyAgZ3N0X29iamVjdF91bnBhcmVudCAoR1NUX09CSkVDVF9DQVNUIChlbGVtZW50KSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKKyAgR1NUX09CSkVDVF9GTEFHX1VOU0VUIChlbGVtZW50LCBHU1RfRUxFTUVOVF9VTlBBUkVOVElORyk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKKworICBnX3NpZ25hbF9lbWl0IChiaW4sIGdzdF9iaW5fc2lnbmFsc1tFTEVNRU5UX1JFTU9WRURdLCAwLCBlbGVtZW50KTsKKyAgZ3N0X2NoaWxkX3Byb3h5X2NoaWxkX3JlbW92ZWQgKChHc3RPYmplY3QgKikgYmluLCAoR3N0T2JqZWN0ICopIGVsZW1lbnQpOworCisgIC8qIGVsZW1lbnQgaXMgcmVhbGx5IG91dCBvZiBvdXIgY29udHJvbCBub3cgKi8KKyAgZ3N0X29iamVjdF91bnJlZiAoZWxlbWVudCk7CisKKyAgcmV0dXJuIFRSVUU7CisKKyAgLyogRVJST1IgaGFuZGxpbmcgKi8KK25vdF9pbl9iaW46CisgIHsKKyAgICBnX3dhcm5pbmcgKCJFbGVtZW50ICclcycgaXMgbm90IGluIGJpbiAnJXMnIiwgZWxlbV9uYW1lLAorICAgICAgICBHU1RfRUxFTUVOVF9OQU1FIChiaW4pKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKKyAgICBnX2ZyZWUgKGVsZW1fbmFtZSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CithbHJlYWR5X3JlbW92aW5nOgorICB7CisgICAgR1NUX0NBVF9JTkZPX09CSkVDVCAoR1NUX0NBVF9QQVJFTlRBR0UsIGJpbiwgImFscmVhZHkgcmVtb3ZpbmcgY2hpbGQiKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKKy8qKgorICogZ3N0X2Jpbl9yZW1vdmU6CisgKiBAYmluOiBhICNHc3RCaW4KKyAqIEBlbGVtZW50OiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjR3N0RWxlbWVudCB0byByZW1vdmUKKyAqCisgKiBSZW1vdmVzIHRoZSBlbGVtZW50IGZyb20gdGhlIGJpbiwgdW5wYXJlbnRpbmcgaXQgYXMgd2VsbC4KKyAqIFVucGFyZW50aW5nIHRoZSBlbGVtZW50IG1lYW5zIHRoYXQgdGhlIGVsZW1lbnQgd2lsbCBiZSBkZXJlZmVyZW5jZWQsCisgKiBzbyBpZiB0aGUgYmluIGhvbGRzIHRoZSBvbmx5IHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCwgdGhlIGVsZW1lbnQKKyAqIHdpbGwgYmUgZnJlZWQgaW4gdGhlIHByb2Nlc3Mgb2YgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgYmluLiAgSWYgeW91CisgKiB3YW50IHRoZSBlbGVtZW50IHRvIHN0aWxsIGV4aXN0IGFmdGVyIHJlbW92aW5nLCB5b3UgbmVlZCB0byBjYWxsCisgKiBnc3Rfb2JqZWN0X3JlZigpIGJlZm9yZSByZW1vdmluZyBpdCBmcm9tIHRoZSBiaW4uCisgKgorICogSWYgdGhlIGVsZW1lbnQncyBwYWRzIGFyZSBsaW5rZWQgdG8gb3RoZXIgcGFkcywgdGhlIHBhZHMgd2lsbCBiZSB1bmxpbmtlZAorICogYmVmb3JlIHRoZSBlbGVtZW50IGlzIHJlbW92ZWQgZnJvbSB0aGUgYmluLgorICoKKyAqIE1UIHNhZmUuCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgZWxlbWVudCBjb3VsZCBiZSByZW1vdmVkLCBGQUxTRSBpZgorICogdGhlIGJpbiBkb2VzIG5vdCB3YW50IHRvIHJlbW92ZSB0aGUgZWxlbWVudC4KKyAqLworZ2Jvb2xlYW4KK2dzdF9iaW5fcmVtb3ZlIChHc3RCaW4gKiBiaW4sIEdzdEVsZW1lbnQgKiBlbGVtZW50KQoreworICBHc3RCaW5DbGFzcyAqYmNsYXNzOworICBnYm9vbGVhbiByZXN1bHQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CSU4gKGJpbiksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSwgRkFMU0UpOworCisgIGJjbGFzcyA9IEdTVF9CSU5fR0VUX0NMQVNTIChiaW4pOworCisgIGlmIChHX1VOTElLRUxZIChiY2xhc3MtPnJlbW92ZV9lbGVtZW50ID09IE5VTEwpKQorICAgIGdvdG8gbm9fZnVuY3Rpb247CisKKyAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9QQVJFTlRBR0UsICJyZW1vdmluZyBlbGVtZW50ICVzIGZyb20gYmluICVzIiwKKyAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpLCBHU1RfRUxFTUVOVF9OQU1FIChiaW4pKTsKKworICByZXN1bHQgPSBiY2xhc3MtPnJlbW92ZV9lbGVtZW50IChiaW4sIGVsZW1lbnQpOworCisgIHJldHVybiByZXN1bHQ7CisKKyAgLyogRVJST1IgaGFuZGxpbmcgKi8KK25vX2Z1bmN0aW9uOgorICB7CisgICAgZ193YXJuaW5nICgicmVtb3ZpbmcgZWxlbWVudHMgZnJvbSBiaW4gJyVzJyBpcyBub3Qgc3VwcG9ydGVkIiwKKyAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoYmluKSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKKy8qKgorICogZ3N0X2Jpbl9pdGVyYXRlX2VsZW1lbnRzOgorICogQGJpbjogYSAjR3N0QmluCisgKgorICogR2V0cyBhbiBpdGVyYXRvciBmb3IgdGhlIGVsZW1lbnRzIGluIHRoaXMgYmluLgorICoKKyAqIEVhY2ggZWxlbWVudCB5aWVsZGVkIGJ5IHRoZSBpdGVyYXRvciB3aWxsIGhhdmUgaXRzIHJlZmNvdW50IGluY3JlYXNlZCwgc28KKyAqIHVucmVmIGFmdGVyIHVzZS4KKyAqCisgKiBNVCBzYWZlLiAgQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RJdGVyYXRvciBvZiAjR3N0RWxlbWVudCwgb3IgTlVMTAorICovCitHc3RJdGVyYXRvciAqCitnc3RfYmluX2l0ZXJhdGVfZWxlbWVudHMgKEdzdEJpbiAqIGJpbikKK3sKKyAgR3N0SXRlcmF0b3IgKnJlc3VsdDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JJTiAoYmluKSwgTlVMTCk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChiaW4pOworICByZXN1bHQgPSBnc3RfaXRlcmF0b3JfbmV3X2xpc3QgKEdTVF9UWVBFX0VMRU1FTlQsCisgICAgICBHU1RfT0JKRUNUX0dFVF9MT0NLIChiaW4pLAorICAgICAgJmJpbi0+Y2hpbGRyZW5fY29va2llLCAmYmluLT5jaGlsZHJlbiwgKEdPYmplY3QgKikgYmluLCBOVUxMKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIEdzdEl0ZXJhdG9ySXRlbQoraXRlcmF0ZV9jaGlsZF9yZWN1cnNlIChHc3RJdGVyYXRvciAqIGl0LCBjb25zdCBHVmFsdWUgKiBpdGVtKQoreworICBHc3RFbGVtZW50ICpjaGlsZCA9IGdfdmFsdWVfZ2V0X29iamVjdCAoaXRlbSk7CisKKyAgaWYgKEdTVF9JU19CSU4gKGNoaWxkKSkgeworICAgIEdzdEl0ZXJhdG9yICpvdGhlciA9IGdzdF9iaW5faXRlcmF0ZV9yZWN1cnNlIChHU1RfQklOX0NBU1QgKGNoaWxkKSk7CisKKyAgICBnc3RfaXRlcmF0b3JfcHVzaCAoaXQsIG90aGVyKTsKKyAgfQorICByZXR1cm4gR1NUX0lURVJBVE9SX0lURU1fUEFTUzsKK30KKworLyoqCisgKiBnc3RfYmluX2l0ZXJhdGVfcmVjdXJzZToKKyAqIEBiaW46IGEgI0dzdEJpbgorICoKKyAqIEdldHMgYW4gaXRlcmF0b3IgZm9yIHRoZSBlbGVtZW50cyBpbiB0aGlzIGJpbi4KKyAqIFRoaXMgaXRlcmF0b3IgcmVjdXJzZXMgaW50byBHc3RCaW4gY2hpbGRyZW4uCisgKgorICogRWFjaCBlbGVtZW50IHlpZWxkZWQgYnkgdGhlIGl0ZXJhdG9yIHdpbGwgaGF2ZSBpdHMgcmVmY291bnQgaW5jcmVhc2VkLCBzbworICogdW5yZWYgYWZ0ZXIgdXNlLgorICoKKyAqIE1UIHNhZmUuICBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdEl0ZXJhdG9yIG9mICNHc3RFbGVtZW50LCBvciBOVUxMCisgKi8KK0dzdEl0ZXJhdG9yICoKK2dzdF9iaW5faXRlcmF0ZV9yZWN1cnNlIChHc3RCaW4gKiBiaW4pCit7CisgIEdzdEl0ZXJhdG9yICpyZXN1bHQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CSU4gKGJpbiksIE5VTEwpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKKyAgcmVzdWx0ID0gZ3N0X2l0ZXJhdG9yX25ld19saXN0IChHU1RfVFlQRV9FTEVNRU5ULAorICAgICAgR1NUX09CSkVDVF9HRVRfTE9DSyAoYmluKSwKKyAgICAgICZiaW4tPmNoaWxkcmVuX2Nvb2tpZSwKKyAgICAgICZiaW4tPmNoaWxkcmVuLAorICAgICAgKEdPYmplY3QgKikgYmluLCAoR3N0SXRlcmF0b3JJdGVtRnVuY3Rpb24pIGl0ZXJhdGVfY2hpbGRfcmVjdXJzZSk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIHJldHVybnMgMCB3aGVuIFRSVUUgYmVjYXVzZSB0aGlzIGlzIGEgR0NvbXBhcmVGdW5jICovCisvKiBNVCBzYWZlICovCitzdGF0aWMgZ2ludAorYmluX2VsZW1lbnRfaXNfc2luayAoR3N0RWxlbWVudCAqIGNoaWxkLCBHc3RCaW4gKiBiaW4pCit7CisgIGdib29sZWFuIGlzX3Npbms7CisKKyAgLyogd2UgbG9jayB0aGUgY2hpbGQgaGVyZSBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGUgZnVuY3Rpb24gdG8KKyAgICogZ2V0IGl0cyBuYW1lIGFuZCBmbGFnIHNhZmVseS4gKi8KKyAgR1NUX09CSkVDVF9MT0NLIChjaGlsZCk7CisgIGlzX3NpbmsgPSBHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChjaGlsZCwgR1NUX0VMRU1FTlRfSVNfU0lOSyk7CisKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBiaW4sCisgICAgICAiY2hpbGQgJXMgJXMgc2luayIsIEdTVF9PQkpFQ1RfTkFNRSAoY2hpbGQpLCBpc19zaW5rID8gImlzIiA6ICJpcyBub3QiKTsKKworICBHU1RfT0JKRUNUX1VOTE9DSyAoY2hpbGQpOworICByZXR1cm4gaXNfc2luayA/IDAgOiAxOworfQorCitzdGF0aWMgZ2ludAorc2lua19pdGVyYXRvcl9maWx0ZXIgKGNvbnN0IEdWYWx1ZSAqIHZjaGlsZCwgR1ZhbHVlICogdmJpbikKK3sKKyAgR3N0QmluICpiaW4gPSBnX3ZhbHVlX2dldF9vYmplY3QgKHZiaW4pOworICBHc3RFbGVtZW50ICpjaGlsZCA9IGdfdmFsdWVfZ2V0X29iamVjdCAodmNoaWxkKTsKKworICByZXR1cm4gKGJpbl9lbGVtZW50X2lzX3NpbmsgKGNoaWxkLCBiaW4pKTsKK30KKworLyoqCisgKiBnc3RfYmluX2l0ZXJhdGVfc2lua3M6CisgKiBAYmluOiBhICNHc3RCaW4KKyAqCisgKiBHZXRzIGFuIGl0ZXJhdG9yIGZvciBhbGwgZWxlbWVudHMgaW4gdGhlIGJpbiB0aGF0IGhhdmUgdGhlCisgKiAjR1NUX0VMRU1FTlRfSVNfU0lOSyBmbGFnIHNldC4KKyAqCisgKiBFYWNoIGVsZW1lbnQgeWllbGRlZCBieSB0aGUgaXRlcmF0b3Igd2lsbCBoYXZlIGl0cyByZWZjb3VudCBpbmNyZWFzZWQsIHNvCisgKiB1bnJlZiBhZnRlciB1c2UuCisgKgorICogTVQgc2FmZS4gIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0SXRlcmF0b3Igb2YgI0dzdEVsZW1lbnQsIG9yIE5VTEwKKyAqLworR3N0SXRlcmF0b3IgKgorZ3N0X2Jpbl9pdGVyYXRlX3NpbmtzIChHc3RCaW4gKiBiaW4pCit7CisgIEdzdEl0ZXJhdG9yICpjaGlsZHJlbjsKKyAgR3N0SXRlcmF0b3IgKnJlc3VsdDsKKyAgR1ZhbHVlIHZiaW4gPSB7IDAsIH07CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CSU4gKGJpbiksIE5VTEwpOworCisgIGdfdmFsdWVfaW5pdCAoJnZiaW4sIEdTVF9UWVBFX0JJTik7CisgIGdfdmFsdWVfc2V0X29iamVjdCAoJnZiaW4sIGJpbik7CisKKyAgY2hpbGRyZW4gPSBnc3RfYmluX2l0ZXJhdGVfZWxlbWVudHMgKGJpbik7CisgIHJlc3VsdCA9IGdzdF9pdGVyYXRvcl9maWx0ZXIgKGNoaWxkcmVuLAorICAgICAgKEdDb21wYXJlRnVuYykgc2lua19pdGVyYXRvcl9maWx0ZXIsICZ2YmluKTsKKworICBnX3ZhbHVlX3Vuc2V0ICgmdmJpbik7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogcmV0dXJucyAwIHdoZW4gVFJVRSBiZWNhdXNlIHRoaXMgaXMgYSBHQ29tcGFyZUZ1bmMgKi8KKy8qIE1UIHNhZmUgKi8KK3N0YXRpYyBnaW50CitiaW5fZWxlbWVudF9pc19zcmMgKEdzdEVsZW1lbnQgKiBjaGlsZCwgR3N0QmluICogYmluKQoreworICBnYm9vbGVhbiBpc19zcmM7CisKKyAgLyogd2UgbG9jayB0aGUgY2hpbGQgaGVyZSBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGUgZnVuY3Rpb24gdG8KKyAgICogZ2V0IGl0cyBuYW1lIGFuZCBvdGhlciBpbmZvIHNhZmVseS4gKi8KKyAgR1NUX09CSkVDVF9MT0NLIChjaGlsZCk7CisgIGlzX3NyYyA9IEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKGNoaWxkLCBHU1RfRUxFTUVOVF9JU19TT1VSQ0UpOworCisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgYmluLAorICAgICAgImNoaWxkICVzICVzIHNyYyIsIEdTVF9PQkpFQ1RfTkFNRSAoY2hpbGQpLCBpc19zcmMgPyAiaXMiIDogImlzIG5vdCIpOworCisgIEdTVF9PQkpFQ1RfVU5MT0NLIChjaGlsZCk7CisgIHJldHVybiBpc19zcmMgPyAwIDogMTsKK30KKworc3RhdGljIGdpbnQKK3NyY19pdGVyYXRvcl9maWx0ZXIgKGNvbnN0IEdWYWx1ZSAqIHZjaGlsZCwgR1ZhbHVlICogdmJpbikKK3sKKyAgR3N0QmluICpiaW4gPSBnX3ZhbHVlX2dldF9vYmplY3QgKHZiaW4pOworICBHc3RFbGVtZW50ICpjaGlsZCA9IGdfdmFsdWVfZ2V0X29iamVjdCAodmNoaWxkKTsKKworICByZXR1cm4gKGJpbl9lbGVtZW50X2lzX3NyYyAoY2hpbGQsIGJpbikpOworfQorCisvKioKKyAqIGdzdF9iaW5faXRlcmF0ZV9zb3VyY2VzOgorICogQGJpbjogYSAjR3N0QmluCisgKgorICogR2V0cyBhbiBpdGVyYXRvciBmb3IgYWxsIGVsZW1lbnRzIGluIHRoZSBiaW4gdGhhdCBoYXZlIHRoZQorICogI0dTVF9FTEVNRU5UX0lTX1NPVVJDRSBmbGFnIHNldC4KKyAqCisgKiBFYWNoIGVsZW1lbnQgeWllbGRlZCBieSB0aGUgaXRlcmF0b3Igd2lsbCBoYXZlIGl0cyByZWZjb3VudCBpbmNyZWFzZWQsIHNvCisgKiB1bnJlZiBhZnRlciB1c2UuCisgKgorICogTVQgc2FmZS4gIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0SXRlcmF0b3Igb2YgI0dzdEVsZW1lbnQsIG9yIE5VTEwKKyAqLworR3N0SXRlcmF0b3IgKgorZ3N0X2Jpbl9pdGVyYXRlX3NvdXJjZXMgKEdzdEJpbiAqIGJpbikKK3sKKyAgR3N0SXRlcmF0b3IgKmNoaWxkcmVuOworICBHc3RJdGVyYXRvciAqcmVzdWx0OworICBHVmFsdWUgdmJpbiA9IHsgMCwgfTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JJTiAoYmluKSwgTlVMTCk7CisKKyAgZ192YWx1ZV9pbml0ICgmdmJpbiwgR1NUX1RZUEVfQklOKTsKKyAgZ192YWx1ZV9zZXRfb2JqZWN0ICgmdmJpbiwgYmluKTsKKworICBjaGlsZHJlbiA9IGdzdF9iaW5faXRlcmF0ZV9lbGVtZW50cyAoYmluKTsKKyAgcmVzdWx0ID0gZ3N0X2l0ZXJhdG9yX2ZpbHRlciAoY2hpbGRyZW4sCisgICAgICAoR0NvbXBhcmVGdW5jKSBzcmNfaXRlcmF0b3JfZmlsdGVyLCAmdmJpbik7CisKKyAgZ192YWx1ZV91bnNldCAoJnZiaW4pOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBNVCBzYWZlCisgKi8KK3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgorZ3N0X2Jpbl9nZXRfc3RhdGVfZnVuYyAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlICogc3RhdGUsCisgICAgR3N0U3RhdGUgKiBwZW5kaW5nLCBHc3RDbG9ja1RpbWUgdGltZW91dCkKK3sKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OworCisgIEdTVF9DQVRfSU5GT19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LCAiZ2V0dGluZyBzdGF0ZSIpOworCisgIHJldCA9CisgICAgICBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Z2V0X3N0YXRlIChlbGVtZW50LCBzdGF0ZSwgcGVuZGluZywKKyAgICAgIHRpbWVvdXQpOworCisgIHJldHVybiByZXQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVG9wb2xvZ2ljYWxseSBzb3J0ZWQgaXRlcmF0b3IKKyAqIHNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RvcG9sb2dpY2FsX3NvcnRpbmcKKyAqCisgKiBGb3IgZWFjaCBlbGVtZW50IGluIHRoZSBncmFwaCwgYW4gZW50cnkgaXMga2VwdCBpbiBhIEhhc2hUYWJsZQorICogd2l0aCBpdHMgbnVtYmVyIG9mIHNyY3BhZCBjb25uZWN0aW9ucyAoZGVncmVlKS4KKyAqIFdlIHRoZW4gY2hhbmdlIHN0YXRlIG9mIGFsbCBlbGVtZW50cyB3aXRob3V0IGRlcGVuZGVuY2llcworICogKGRlZ3JlZSAwKSBhbmQgZGVjcmVtZW50IHRoZSBkZWdyZWUgb2YgYWxsIGVsZW1lbnRzIGNvbm5lY3RlZAorICogb24gdGhlIHNpbmtwYWRzLiBXaGVuIGFuIGVsZW1lbnQgcmVhY2hlcyBkZWdyZWUgMCwgaXRzIHN0YXRlIGlzCisgKiBjaGFuZ2VkIG5leHQuCisgKiBXaGVuIGFsbCBlbGVtZW50cyBhcmUgaGFuZGxlZCB0aGUgYWxnb3JpdGhtIHN0b3BzLgorICovCit0eXBlZGVmIHN0cnVjdCBfR3N0QmluU29ydEl0ZXJhdG9yCit7CisgIEdzdEl0ZXJhdG9yIGl0OworICBHUXVldWUgKnF1ZXVlOyAgICAgICAgICAgICAgICAvKiBlbGVtZW50cyBxdWV1ZWQgZm9yIHN0YXRlIGNoYW5nZSAqLworICBHc3RCaW4gKmJpbjsgICAgICAgICAgICAgICAgICAvKiBiaW4gd2UgaXRlcmF0ZSAqLworICBnaW50IG1vZGU7ICAgICAgICAgICAgICAgICAgICAvKiBhZGRpbmcgb3IgcmVtb3ZpbmcgZGVwZW5kZW5jeSAqLworICBHc3RFbGVtZW50ICpiZXN0OyAgICAgICAgICAgICAvKiBuZXh0IGVsZW1lbnQgd2l0aCBsZWFzdCBkZXBlbmRlbmNpZXMgKi8KKyAgZ2ludCBiZXN0X2RlZzsgICAgICAgICAgICAgICAgLyogYmVzdCBkZWdyZWUgKi8KKyAgR0hhc2hUYWJsZSAqaGFzaDsgICAgICAgICAgICAgLyogaGFzaHRhYmxlIHdpdGggZWxlbWVudCBkZXBlbmRlbmNpZXMgKi8KKyAgZ2Jvb2xlYW4gZGlydHk7ICAgICAgICAgICAgICAgLyogd2UgZGV0ZWN0ZWQgc3RydWN0dXJlIGNoYW5nZSAqLworfSBHc3RCaW5Tb3J0SXRlcmF0b3I7CisKK3N0YXRpYyB2b2lkCitnc3RfYmluX3NvcnRfaXRlcmF0b3JfY29weSAoY29uc3QgR3N0QmluU29ydEl0ZXJhdG9yICogaXQsCisgICAgR3N0QmluU29ydEl0ZXJhdG9yICogY29weSkKK3sKKyAgR0hhc2hUYWJsZUl0ZXIgaXRlcjsKKyAgZ3BvaW50ZXIga2V5LCB2YWx1ZTsKKworICBjb3B5LT5xdWV1ZSA9IGdfcXVldWVfY29weSAoaXQtPnF1ZXVlKTsKKyAgZ19xdWV1ZV9mb3JlYWNoIChjb3B5LT5xdWV1ZSwgKEdGdW5jKSBnc3Rfb2JqZWN0X3JlZiwgTlVMTCk7CisKKyAgY29weS0+YmluID0gZ3N0X29iamVjdF9yZWYgKGl0LT5iaW4pOworICBpZiAoaXQtPmJlc3QpCisgICAgY29weS0+YmVzdCA9IGdzdF9vYmplY3RfcmVmIChpdC0+YmVzdCk7CisKKyAgY29weS0+aGFzaCA9IGdfaGFzaF90YWJsZV9uZXcgKE5VTEwsIE5VTEwpOworICBnX2hhc2hfdGFibGVfaXRlcl9pbml0ICgmaXRlciwgaXQtPmhhc2gpOworICB3aGlsZSAoZ19oYXNoX3RhYmxlX2l0ZXJfbmV4dCAoJml0ZXIsICZrZXksICZ2YWx1ZSkpCisgICAgZ19oYXNoX3RhYmxlX2luc2VydCAoY29weS0+aGFzaCwga2V5LCB2YWx1ZSk7Cit9CisKKy8qIHdlIGFkZCBhbmQgc3VidHJhY3QgMSB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgY29uZnVzZSBOVUxMIGFuZCAwICovCisjZGVmaW5lIEhBU0hfU0VUX0RFR1JFRShiaXQsIGVsZW0sIGRlZykgXAorICAgIGdfaGFzaF90YWJsZV9yZXBsYWNlIChiaXQtPmhhc2gsIGVsZW0sIEdJTlRfVE9fUE9JTlRFUihkZWcrMSkpCisjZGVmaW5lIEhBU0hfR0VUX0RFR1JFRShiaXQsIGVsZW0pIFwKKyAgICAoR1BPSU5URVJfVE9fSU5UKGdfaGFzaF90YWJsZV9sb29rdXAgKGJpdC0+aGFzaCwgZWxlbSkpLTEpCisKKy8qIGFkZCBlbGVtZW50IHRvIHF1ZXVlIG9mIG5leHQgZWxlbWVudHMgaW4gdGhlIGl0ZXJhdG9yLgorICogV2UgcHVzaCBhdCB0aGUgdGFpbCB0byBnaXZlIGhpZ2hlciBwcmlvcml0eSBlbGVtZW50cyBhCisgKiBjaGFuY2UgZmlyc3QgKi8KK3N0YXRpYyB2b2lkCithZGRfdG9fcXVldWUgKEdzdEJpblNvcnRJdGVyYXRvciAqIGJpdCwgR3N0RWxlbWVudCAqIGVsZW1lbnQpCit7CisgIEdTVF9ERUJVR19PQkpFQ1QgKGJpdC0+YmluLCAiYWRkaW5nICclcycgdG8gcXVldWUiLAorICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOworICBnc3Rfb2JqZWN0X3JlZiAoZWxlbWVudCk7CisgIGdfcXVldWVfcHVzaF90YWlsIChiaXQtPnF1ZXVlLCBlbGVtZW50KTsKKyAgSEFTSF9TRVRfREVHUkVFIChiaXQsIGVsZW1lbnQsIC0xKTsKK30KKworc3RhdGljIHZvaWQKK3JlbW92ZV9mcm9tX3F1ZXVlIChHc3RCaW5Tb3J0SXRlcmF0b3IgKiBiaXQsIEdzdEVsZW1lbnQgKiBlbGVtZW50KQoreworICBHTGlzdCAqZmluZDsKKworICBpZiAoKGZpbmQgPSBnX3F1ZXVlX2ZpbmQgKGJpdC0+cXVldWUsIGVsZW1lbnQpKSkgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpdC0+YmluLCAicmVtb3ZpbmcgJyVzJyBmcm9tIHF1ZXVlIiwKKyAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOworCisgICAgZ19xdWV1ZV9kZWxldGVfbGluayAoYml0LT5xdWV1ZSwgZmluZCk7CisgICAgZ3N0X29iamVjdF91bnJlZiAoZWxlbWVudCk7CisgIH0gZWxzZSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYml0LT5iaW4sICJ1bmFibGUgdG8gcmVtb3ZlICclcycgZnJvbSBxdWV1ZSIsCisgICAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKKyAgfQorfQorCisvKiBjbGVhciB0aGUgcXVldWUsIHVucmVmIGFsbCBvYmplY3RzIGFzIHdlIHRvb2sgYSByZWYgd2hlbgorICogd2UgYWRkZWQgdGhlbSB0byB0aGUgcXVldWUgKi8KK3N0YXRpYyB2b2lkCitjbGVhcl9xdWV1ZSAoR1F1ZXVlICogcXVldWUpCit7CisgIGdwb2ludGVyIHA7CisKKyAgd2hpbGUgKChwID0gZ19xdWV1ZV9wb3BfaGVhZCAocXVldWUpKSkKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChwKTsKK30KKworLyogc2V0IGFsbCBkZWdyZWVzIHRvIDAuIEVsZW1lbnRzIG1hcmtlZCBhcyBhIHNpbmsgYXJlCisgKiBhZGRlZCB0byB0aGUgcXVldWUgaW1tZWRpYXRlbHkuIFNpbmNlIHdlIG9ubHkgbG9vayBhdCB0aGUgU0lOSyBmbGFnIG9mIHRoZQorICogZWxlbWVudCwgaXQgaXMgcG9zc2libGUgdGhhdCB3ZSBhZGQgbm9uLXNpbmtzIHRvIHRoZSBxdWV1ZS4gVGhlc2Ugd2lsbCBiZQorICogcmVtb3ZlZCBmcm9tIHRoZSBxdWV1ZSBhZ2FpbiB3aGVuIHdlIGNhbiBwcm92ZSB0aGF0IGl0IHByb3ZpZGVzIGRhdGEgZm9yIHNvbWUKKyAqIG90aGVyIGVsZW1lbnQuICovCitzdGF0aWMgdm9pZAorcmVzZXRfZGVncmVlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0QmluU29ydEl0ZXJhdG9yICogYml0KQoreworICBnYm9vbGVhbiBpc19zaW5rOworCisgIC8qIHNpbmtzIGFyZSBhZGRlZCByaWdodCBhd2F5ICovCisgIEdTVF9PQkpFQ1RfTE9DSyAoZWxlbWVudCk7CisgIGlzX3NpbmsgPSBHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChlbGVtZW50LCBHU1RfRUxFTUVOVF9JU19TSU5LKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOworCisgIGlmIChpc19zaW5rKSB7CisgICAgYWRkX3RvX3F1ZXVlIChiaXQsIGVsZW1lbnQpOworICB9IGVsc2UgeworICAgIC8qIG90aGVycyBhcmUgbWFya2VkIHdpdGggMCBhbmQgaGFuZGxlZCB3aGVuIHNpbmtzIGFyZSBkb25lICovCisgICAgSEFTSF9TRVRfREVHUkVFIChiaXQsIGVsZW1lbnQsIDApOworICB9Cit9CisKKy8qIGFkanVzdCB0aGUgZGVncmVlIG9mIGFsbCBlbGVtZW50cyBjb25uZWN0ZWQgdG8gdGhlIGdpdmVuCisgKiBlbGVtZW50LiBJZiBhIGRlZ3JlZSBvZiBhbiBlbGVtZW50IGRyb3BzIHRvIDAsIGl0IGlzCisgKiBhZGRlZCB0byB0aGUgcXVldWUgb2YgZWxlbWVudHMgdG8gc2NoZWR1bGUgbmV4dC4KKyAqCisgKiBXZSBoYXZlIHRvIG1ha2Ugc3VyZSBub3QgdG8gY3Jvc3MgdGhlIGJpbiBib3VuZGFyeSB0aGlzIGVsZW1lbnQKKyAqIGJlbG9uZ3MgdG8uCisgKi8KK3N0YXRpYyB2b2lkCit1cGRhdGVfZGVncmVlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0QmluU29ydEl0ZXJhdG9yICogYml0KQoreworICBnYm9vbGVhbiBsaW5rZWQgPSBGQUxTRTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOworICAvKiBkb24ndCB0b3VjaCBkZWdyZWUgaWYgZWxlbWVudCBoYXMgbm8gc2lua3BhZHMgKi8KKyAgaWYgKGVsZW1lbnQtPm51bXNpbmtwYWRzICE9IDApIHsKKyAgICAvKiBsb29wIG92ZXIgYWxsIHNpbmtwYWRzLCBkZWNyZW1lbnQgZGVncmVlIGZvciBhbGwgY29ubmVjdGVkCisgICAgICogZWxlbWVudHMgaW4gdGhpcyBiaW4gKi8KKyAgICBHTGlzdCAqcGFkczsKKworICAgIGZvciAocGFkcyA9IGVsZW1lbnQtPnNpbmtwYWRzOyBwYWRzOyBwYWRzID0gZ19saXN0X25leHQgKHBhZHMpKSB7CisgICAgICBHc3RQYWQgKnBhZCwgKnBlZXI7CisKKyAgICAgIHBhZCA9IEdTVF9QQURfQ0FTVCAocGFkcy0+ZGF0YSk7CisKKyAgICAgIC8qIHdlJ3JlIGl0ZXJhdGluZyBvdmVyIHRoZSBzaW5rcGFkcywgY2hlY2sgaWYgaXQncyBidXN5IGluIGEgbGluay91bmxpbmsgKi8KKyAgICAgIGlmIChHX1VOTElLRUxZIChmaW5kX21lc3NhZ2UgKGJpdC0+YmluLCBHU1RfT0JKRUNUX0NBU1QgKHBhZCksCisgICAgICAgICAgICAgICAgICBHU1RfTUVTU0FHRV9TVFJVQ1RVUkVfQ0hBTkdFKSkpIHsKKyAgICAgICAgLyogbWFyayB0aGUgaXRlcmF0b3IgYXMgZGlydHkgYmVjYXVzZSB3ZSB3b24ndCBiZSB1cGRhdGluZyB0aGUgZGVncmVlCisgICAgICAgICAqIG9mIHRoZSBwZWVyIHBhcmVudCBub3cuIFRoaXMgd291bGQgcmVzdWx0IGluIHRoZSAnbG9vcCBkZXRlY3RlZCcKKyAgICAgICAgICogbGF0ZXIgb24gYmVjYXVzZSB0aGUgcGVlciBwYXJlbnQgZWxlbWVudCBjb3VsZCBiZWNvbWUgdGhlIGJlc3QgbmV4dAorICAgICAgICAgKiBlbGVtZW50IHdpdGggYSBkZWdyZWUgPiAwLiBXZSB3aWxsIHNpbXBseSBjb250aW51ZSBvdXIgc3RhdGUKKyAgICAgICAgICogY2hhbmdlcyBhbmQgd2UnbGwgZXZlbnR1YWxseSByZXN5bmMgd2hlbiB0aGUgdW5saW5rIGNvbXBsZXRlZCBhbmQKKyAgICAgICAgICogdGhlIGl0ZXJhdG9yIGNvb2tpZSBpcyB1cGRhdGVkLiAqLworICAgICAgICBiaXQtPmRpcnR5ID0gVFJVRTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGlmICgocGVlciA9IGdzdF9wYWRfZ2V0X3BlZXIgKHBhZCkpKSB7CisgICAgICAgIEdzdEVsZW1lbnQgKnBlZXJfZWxlbWVudDsKKworICAgICAgICBpZiAoKHBlZXJfZWxlbWVudCA9IGdzdF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50IChwZWVyKSkpIHsKKyAgICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHBlZXJfZWxlbWVudCk7CisgICAgICAgICAgLyogY2hlY2sgdGhhdCB3ZSBkb24ndCBnbyBvdXRzaWRlIG9mIHRoaXMgYmluICovCisgICAgICAgICAgaWYgKEdTVF9PQkpFQ1RfQ0FTVCAocGVlcl9lbGVtZW50KS0+cGFyZW50ID09CisgICAgICAgICAgICAgIEdTVF9PQkpFQ1RfQ0FTVCAoYml0LT5iaW4pKSB7CisgICAgICAgICAgICBnaW50IG9sZF9kZWcsIG5ld19kZWc7CisKKyAgICAgICAgICAgIG9sZF9kZWcgPSBIQVNIX0dFVF9ERUdSRUUgKGJpdCwgcGVlcl9lbGVtZW50KTsKKworICAgICAgICAgICAgLyogY2hlY2sgdG8gc2VlIGlmIHdlIGFkZGVkIGFuIGVsZW1lbnQgYXMgc2luayB0aGF0IHdhcyBub3QgcmVhbGx5IGEKKyAgICAgICAgICAgICAqIHNpbmsgYmVjYXVzZSBpdCB3YXMgY29ubmVjdGVkIHRvIHNvbWUgb3RoZXIgZWxlbWVudC4gKi8KKyAgICAgICAgICAgIGlmIChvbGRfZGVnID09IC0xKSB7CisgICAgICAgICAgICAgIHJlbW92ZV9mcm9tX3F1ZXVlIChiaXQsIHBlZXJfZWxlbWVudCk7CisgICAgICAgICAgICAgIG9sZF9kZWcgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV3X2RlZyA9IG9sZF9kZWcgKyBiaXQtPm1vZGU7CisKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpdC0+YmluLAorICAgICAgICAgICAgICAgICJjaGFuZ2UgZWxlbWVudCAlcywgZGVncmVlICVkLT4lZCwgbGlua2VkIHRvICVzIiwKKyAgICAgICAgICAgICAgICBHU1RfRUxFTUVOVF9OQU1FIChwZWVyX2VsZW1lbnQpLCBvbGRfZGVnLCBuZXdfZGVnLAorICAgICAgICAgICAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKKworICAgICAgICAgICAgLyogdXBkYXRlIGRlZ3JlZSwgaXQgaXMgcG9zc2libGUgdGhhdCBhbiBlbGVtZW50IHdhcyBpbiAwIGFuZAorICAgICAgICAgICAgICogcmVhY2hlcyAtMSBoZXJlLiBUaGlzIHdvdWxkIG1lYW4gdGhhdCB0aGUgZWxlbWVudCBoYWQgbm8gc2lua3BhZHMKKyAgICAgICAgICAgICAqIGJ1dCBiZWNhbWUgbGlua2VkIHdoaWxlIHRoZSBzdGF0ZSBjaGFuZ2Ugd2FzIGhhcHBlbmluZy4gV2Ugd2lsbAorICAgICAgICAgICAgICogcmVzeW5jIG9uIHRoaXMgd2l0aCB0aGUgc3RydWN0dXJlIGNoYW5nZSBtZXNzYWdlLiAqLworICAgICAgICAgICAgaWYgKG5ld19kZWcgPT0gMCkgeworICAgICAgICAgICAgICAvKiBkZWdyZWUgaGl0IDAsIGFkZCB0byBxdWV1ZSAqLworICAgICAgICAgICAgICBhZGRfdG9fcXVldWUgKGJpdCwgcGVlcl9lbGVtZW50KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIEhBU0hfU0VUX0RFR1JFRSAoYml0LCBwZWVyX2VsZW1lbnQsIG5ld19kZWcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGlua2VkID0gVFJVRTsKKyAgICAgICAgICB9CisgICAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBlZXJfZWxlbWVudCk7CisgICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAocGVlcl9lbGVtZW50KTsKKyAgICAgICAgfQorICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwZWVyKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgaWYgKCFsaW5rZWQpIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChiaXQtPmJpbiwgImVsZW1lbnQgJXMgbm90IGxpbmtlZCBvbiBhbnkgc2lua3BhZHMiLAorICAgICAgICBHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSk7CisgIH0KKyAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOworfQorCisvKiBmaW5kIHRoZSBuZXh0IGJlc3QgZWxlbWVudCBub3QgaGFuZGxlZCB5ZXQuIFRoaXMgaXMgdGhlIG9uZQorICogd2l0aCB0aGUgbG93ZXN0IG5vbi1uZWdhdGl2ZSBkZWdyZWUgKi8KK3N0YXRpYyB2b2lkCitmaW5kX2VsZW1lbnQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RCaW5Tb3J0SXRlcmF0b3IgKiBiaXQpCit7CisgIGdpbnQgZGVncmVlOworCisgIC8qIGVsZW1lbnQgaXMgYWxyZWFkeSBoYW5kbGVkICovCisgIGlmICgoZGVncmVlID0gSEFTSF9HRVRfREVHUkVFIChiaXQsIGVsZW1lbnQpKSA8IDApCisgICAgcmV0dXJuOworCisgIC8qIGZpcnN0IGVsZW1lbnQgb3IgZWxlbWVudCB3aXRoIHNtYWxsZXIgZGVncmVlICovCisgIGlmIChiaXQtPmJlc3QgPT0gTlVMTCB8fCBiaXQtPmJlc3RfZGVnID4gZGVncmVlKSB7CisgICAgYml0LT5iZXN0ID0gZWxlbWVudDsKKyAgICBiaXQtPmJlc3RfZGVnID0gZGVncmVlOworICB9Cit9CisKKy8qIGdldCBuZXh0IGVsZW1lbnQgaW4gaXRlcmF0b3IuIHRoZSByZXR1cm5lZCBlbGVtZW50IGhhcyB0aGUKKyAqIHJlZmNvdW50IGluY3JlYXNlZCAqLworc3RhdGljIEdzdEl0ZXJhdG9yUmVzdWx0Citnc3RfYmluX3NvcnRfaXRlcmF0b3JfbmV4dCAoR3N0QmluU29ydEl0ZXJhdG9yICogYml0LCBHVmFsdWUgKiByZXN1bHQpCit7CisgIEdzdEVsZW1lbnQgKmJlc3Q7CisgIEdzdEJpbiAqYmluID0gYml0LT5iaW47CisKKyAgLyogZW1wdHkgcXVldWUsIHdlIGhhdmUgdG8gZmluZCBhIG5leHQgYmVzdCBlbGVtZW50ICovCisgIGlmIChnX3F1ZXVlX2lzX2VtcHR5IChiaXQtPnF1ZXVlKSkgeworCisgICAgYml0LT5iZXN0ID0gTlVMTDsKKyAgICBiaXQtPmJlc3RfZGVnID0gR19NQVhJTlQ7CisgICAgZ19saXN0X2ZvcmVhY2ggKGJpbi0+Y2hpbGRyZW4sIChHRnVuYykgZmluZF9lbGVtZW50LCBiaXQpOworICAgIGlmICgoYmVzdCA9IGJpdC0+YmVzdCkpIHsKKyAgICAgIC8qIHdoZW4gd2UgZGV0ZWN0ZWQgYW4gdW5saW5rLCBkb24ndCB3YXJuIGJlY2F1c2Ugb3VyIGRlZ3JlZXMgbWlnaHQgYmUKKyAgICAgICAqIHNjcmV3ZWQgdXAuIFdlIHdpbGwgcmVzeW5jIGxhdGVyICovCisgICAgICBpZiAoYml0LT5iZXN0X2RlZyAhPSAwICYmICFiaXQtPmRpcnR5KSB7CisgICAgICAgIC8qIHdlIGRvbid0IGZhaWwgb24gdGhpcyBvbmUgeWV0ICovCisgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYmluLCAibG9vcCBkZWN0ZWQgaW4gZ3JhcGgiKTsKKyAgICAgICAgZ193YXJuaW5nICgibG9vcCBkZXRlY3RlZCBpbiB0aGUgZ3JhcGggb2YgYmluICclcychISIsCisgICAgICAgICAgICBHU1RfRUxFTUVOVF9OQU1FIChiaW4pKTsKKyAgICAgIH0KKyAgICAgIC8qIGJlc3QgdW5oYW5kbGVkIGVsZW1lbnQsIHNjaGVkdWxlIGFzIG5leHQgZWxlbWVudCAqLworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAicXVldWUgZW1wdHksIG5leHQgYmVzdDogJXMiLAorICAgICAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGJlc3QpKTsKKyAgICAgIEhBU0hfU0VUX0RFR1JFRSAoYml0LCBiZXN0LCAtMSk7CisgICAgICBnX3ZhbHVlX3NldF9vYmplY3QgKHJlc3VsdCwgYmVzdCk7CisgICAgfSBlbHNlIHsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgInF1ZXVlIGVtcHR5LCBlbGVtZW50cyBleGhhdXN0ZWQiKTsKKyAgICAgIC8qIG5vIG1vcmUgdW5oYW5kbGVkIGVsZW1lbnRzLCB3ZSBhcmUgZG9uZSAqLworICAgICAgcmV0dXJuIEdTVF9JVEVSQVRPUl9ET05FOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICAvKiBldmVyeXRoaW5nIGFkZGVkIHRvIHRoZSBxdWV1ZSBnb3QgcmVmZmVkICovCisgICAgYmVzdCA9IGdfcXVldWVfcG9wX2hlYWQgKGJpdC0+cXVldWUpOworICAgIGdfdmFsdWVfc2V0X29iamVjdCAocmVzdWx0LCBiZXN0KTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChiZXN0KTsKKyAgfQorCisgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgInF1ZXVlIGhlYWQgZ2l2ZXMgJXMiLCBHU1RfRUxFTUVOVF9OQU1FIChiZXN0KSk7CisgIC8qIHVwZGF0ZSBkZWdyZWVzIG9mIGxpbmtlZCBlbGVtZW50cyAqLworICB1cGRhdGVfZGVncmVlIChiZXN0LCBiaXQpOworCisgIHJldHVybiBHU1RfSVRFUkFUT1JfT0s7Cit9CisKKy8qIGNsZWFyIHF1ZXVlcywgcmVjYWxjdWxhdGUgdGhlIGRlZ3JlZXMgYW5kIHJlc3RhcnQuICovCitzdGF0aWMgdm9pZAorZ3N0X2Jpbl9zb3J0X2l0ZXJhdG9yX3Jlc3luYyAoR3N0QmluU29ydEl0ZXJhdG9yICogYml0KQoreworICBHc3RCaW4gKmJpbiA9IGJpdC0+YmluOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgInJlc3luYyIpOworICBiaXQtPmRpcnR5ID0gRkFMU0U7CisgIGNsZWFyX3F1ZXVlIChiaXQtPnF1ZXVlKTsKKyAgLyogcmVzZXQgZGVncmVlcyAqLworICBnX2xpc3RfZm9yZWFjaCAoYmluLT5jaGlsZHJlbiwgKEdGdW5jKSByZXNldF9kZWdyZWUsIGJpdCk7CisgIC8qIGNhbGMgZGVncmVlcywgaW5jcmVtZW50aW5nICovCisgIGJpdC0+bW9kZSA9IDE7CisgIGdfbGlzdF9mb3JlYWNoIChiaW4tPmNoaWxkcmVuLCAoR0Z1bmMpIHVwZGF0ZV9kZWdyZWUsIGJpdCk7CisgIC8qIGZvciB0aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb24gd2UgZGVjcmVtZW50IHRoZSBkZWdyZWVzICovCisgIGJpdC0+bW9kZSA9IC0xOworfQorCisvKiBjbGVhciBxdWV1ZXMsIHVucmVmIGJpbiBhbmQgZnJlZSBpdGVyYXRvci4gKi8KK3N0YXRpYyB2b2lkCitnc3RfYmluX3NvcnRfaXRlcmF0b3JfZnJlZSAoR3N0QmluU29ydEl0ZXJhdG9yICogYml0KQoreworICBHc3RCaW4gKmJpbiA9IGJpdC0+YmluOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgImZyZWUiKTsKKyAgY2xlYXJfcXVldWUgKGJpdC0+cXVldWUpOworICBnX3F1ZXVlX2ZyZWUgKGJpdC0+cXVldWUpOworICBnX2hhc2hfdGFibGVfZGVzdHJveSAoYml0LT5oYXNoKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoYmluKTsKK30KKworLyogc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBiaW4gTE9DSyBoZWxkICovCitzdGF0aWMgR3N0SXRlcmF0b3IgKgorZ3N0X2Jpbl9zb3J0X2l0ZXJhdG9yX25ldyAoR3N0QmluICogYmluKQoreworICBHc3RCaW5Tb3J0SXRlcmF0b3IgKnJlc3VsdDsKKworICAvKiB3ZSBkb24ndCBuZWVkIGFuIEl0ZW1GdW5jdGlvbiBiZWNhdXNlIHdlIHJlZiB0aGUgaXRlbXMgaW4gdGhlIF9uZXh0CisgICAqIG1ldGhvZCBhbHJlYWR5ICovCisgIHJlc3VsdCA9IChHc3RCaW5Tb3J0SXRlcmF0b3IgKikKKyAgICAgIGdzdF9pdGVyYXRvcl9uZXcgKHNpemVvZiAoR3N0QmluU29ydEl0ZXJhdG9yKSwKKyAgICAgIEdTVF9UWVBFX0VMRU1FTlQsCisgICAgICBHU1RfT0JKRUNUX0dFVF9MT0NLIChiaW4pLAorICAgICAgJmJpbi0+cHJpdi0+c3RydWN0dXJlX2Nvb2tpZSwKKyAgICAgIChHc3RJdGVyYXRvckNvcHlGdW5jdGlvbikgZ3N0X2Jpbl9zb3J0X2l0ZXJhdG9yX2NvcHksCisgICAgICAoR3N0SXRlcmF0b3JOZXh0RnVuY3Rpb24pIGdzdF9iaW5fc29ydF9pdGVyYXRvcl9uZXh0LAorICAgICAgKEdzdEl0ZXJhdG9ySXRlbUZ1bmN0aW9uKSBOVUxMLAorICAgICAgKEdzdEl0ZXJhdG9yUmVzeW5jRnVuY3Rpb24pIGdzdF9iaW5fc29ydF9pdGVyYXRvcl9yZXN5bmMsCisgICAgICAoR3N0SXRlcmF0b3JGcmVlRnVuY3Rpb24pIGdzdF9iaW5fc29ydF9pdGVyYXRvcl9mcmVlKTsKKyAgcmVzdWx0LT5xdWV1ZSA9IGdfcXVldWVfbmV3ICgpOworICByZXN1bHQtPmhhc2ggPSBnX2hhc2hfdGFibGVfbmV3IChOVUxMLCBOVUxMKTsKKyAgZ3N0X29iamVjdF9yZWYgKGJpbik7CisgIHJlc3VsdC0+YmluID0gYmluOworICBnc3RfYmluX3NvcnRfaXRlcmF0b3JfcmVzeW5jIChyZXN1bHQpOworCisgIHJldHVybiAoR3N0SXRlcmF0b3IgKikgcmVzdWx0OworfQorCisvKioKKyAqIGdzdF9iaW5faXRlcmF0ZV9zb3J0ZWQ6CisgKiBAYmluOiBhICNHc3RCaW4KKyAqCisgKiBHZXRzIGFuIGl0ZXJhdG9yIGZvciB0aGUgZWxlbWVudHMgaW4gdGhpcyBiaW4gaW4gdG9wb2xvZ2ljYWxseQorICogc29ydGVkIG9yZGVyLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGVsZW1lbnRzIGFyZSByZXR1cm5lZCBmcm9tCisgKiB0aGUgbW9zdCBkb3duc3RyZWFtIGVsZW1lbnRzIChzaW5rcykgdG8gdGhlIHNvdXJjZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGludGVybmFsbHkgdG8gcGVyZm9ybSB0aGUgc3RhdGUgY2hhbmdlcworICogb2YgdGhlIGJpbiBlbGVtZW50cyBhbmQgZm9yIGNsb2NrIHNlbGVjdGlvbi4KKyAqCisgKiBFYWNoIGVsZW1lbnQgeWllbGRlZCBieSB0aGUgaXRlcmF0b3Igd2lsbCBoYXZlIGl0cyByZWZjb3VudCBpbmNyZWFzZWQsIHNvCisgKiB1bnJlZiBhZnRlciB1c2UuCisgKgorICogTVQgc2FmZS4gIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0SXRlcmF0b3Igb2YgI0dzdEVsZW1lbnQsIG9yIE5VTEwKKyAqLworR3N0SXRlcmF0b3IgKgorZ3N0X2Jpbl9pdGVyYXRlX3NvcnRlZCAoR3N0QmluICogYmluKQoreworICBHc3RJdGVyYXRvciAqcmVzdWx0OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQklOIChiaW4pLCBOVUxMKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKGJpbik7CisgIHJlc3VsdCA9IGdzdF9iaW5fc29ydF9pdGVyYXRvcl9uZXcgKGJpbik7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgorZ3N0X2Jpbl9lbGVtZW50X3NldF9zdGF0ZSAoR3N0QmluICogYmluLCBHc3RFbGVtZW50ICogZWxlbWVudCwKKyAgICBHc3RDbG9ja1RpbWUgYmFzZV90aW1lLCBHc3RDbG9ja1RpbWUgc3RhcnRfdGltZSwgR3N0U3RhdGUgY3VycmVudCwKKyAgICBHc3RTdGF0ZSBuZXh0KQoreworICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7CisgIEdzdFN0YXRlIHBlbmRpbmcsIGNoaWxkX2N1cnJlbnQsIGNoaWxkX3BlbmRpbmc7CisgIGdib29sZWFuIGxvY2tlZDsKKyAgR0xpc3QgKmZvdW5kOworCisgIEdTVF9TVEFURV9MT0NLIChlbGVtZW50KTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOworICAvKiBzZXQgYmFzZV90aW1lIGFuZCBzdGFydCB0aW1lIG9uIGNoaWxkICovCisgIEdTVF9FTEVNRU5UX1NUQVJUX1RJTUUgKGVsZW1lbnQpID0gc3RhcnRfdGltZTsKKyAgZWxlbWVudC0+YmFzZV90aW1lID0gYmFzZV90aW1lOworICAvKiBwZWVsIG9mZiB0aGUgbG9ja2VkIGZsYWcgKi8KKyAgbG9ja2VkID0gR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAoZWxlbWVudCwgR1NUX0VMRU1FTlRfTE9DS0VEX1NUQVRFKTsKKyAgLyogR2V0IHRoZSBwcmV2aW91cyBzZXRfc3RhdGUgcmVzdWx0IHRvIHByZXNlcnZlIE5PX1BSRVJPTEwgYW5kIEFTWU5DICovCisgIHJldCA9IEdTVF9TVEFURV9SRVRVUk4gKGVsZW1lbnQpOworICBjaGlsZF9jdXJyZW50ID0gR1NUX1NUQVRFIChlbGVtZW50KTsKKyAgY2hpbGRfcGVuZGluZyA9IEdTVF9TVEFURV9QRU5ESU5HIChlbGVtZW50KTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOworCisgIC8qIHNraXAgbG9ja2VkIGVsZW1lbnRzICovCisgIGlmIChHX1VOTElLRUxZIChsb2NrZWQpKQorICAgIGdvdG8gbG9ja2VkOworCisgIC8qIGlmIHRoZSBlbGVtZW50IHdhcyBubyBwcmVyb2xsLCBqdXN0IHN0YXJ0IGNoYW5naW5nIHRoZSBzdGF0ZSByZWdhcmRsZXNzCisgICAqIGlmIGl0IGhhZCBhc3luYyBlbGVtZW50cyAoaW4gdGhlIGNhc2Ugb2YgYSBiaW4pIGJlY2F1c2UgdGhleSB3b24ndCBwcmVyb2xsCisgICAqIGFueXdheS4gKi8KKyAgaWYgKEdfVU5MSUtFTFkgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwpKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoZWxlbWVudCwgImVsZW1lbnQgaXMgTk9fUFJFUk9MTCwgaWdub3JlIGFzeW5jIGVsZW1lbnRzIik7CisgICAgZ290byBub19wcmVyb2xsOworICB9CisKKyAgR1NUX09CSkVDVF9MT0NLIChiaW4pOworICBwZW5kaW5nID0gR1NUX1NUQVRFX1BFTkRJTkcgKGJpbik7CisKKyAgLyogVHJ5IG5vdCB0byBjaGFuZ2UgdGhlIHN0YXRlIG9mIGVsZW1lbnRzIHRoYXQgYXJlIGFscmVhZHkgaW4gdGhlIHN0YXRlIHdlJ3JlCisgICAqIGdvaW5nIHRvICovCisgIGlmICghKG5leHQgPT0gR1NUX1NUQVRFX1BMQVlJTkcgfHwgY2hpbGRfcGVuZGluZyAhPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HIHx8CisgICAgICAgICAgKGNoaWxkX3BlbmRpbmcgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORyAmJgorICAgICAgICAgICAgICAoKHBlbmRpbmcgPiBjaGlsZF9jdXJyZW50ICYmIG5leHQgPiBjaGlsZF9jdXJyZW50KSB8fAorICAgICAgICAgICAgICAgICAgKHBlbmRpbmcgPCBjaGlsZF9jdXJyZW50ICYmIG5leHQgPCBjaGlsZF9jdXJyZW50KSkpKSkKKyAgICBnb3RvIHVubmVlZGVkOworCisgIC8qIHRoZSBlbGVtZW50IHdhcyBidXN5IHdpdGggYW4gdXB3YXJkcyBhc3luYyBzdGF0ZSBjaGFuZ2UsIHdlIG11c3Qgd2FpdCBmb3IKKyAgICogYW4gQVNZTkNfRE9ORSBtZXNzYWdlIGJlZm9yZSB3ZSBhdHRlbXAgdG8gY2hhbmdlIHRoZSBzdGF0ZS4gKi8KKyAgaWYgKChmb3VuZCA9CisgICAgICAgICAgZmluZF9tZXNzYWdlIChiaW4sIEdTVF9PQkpFQ1RfQ0FTVCAoZWxlbWVudCksCisgICAgICAgICAgICAgIEdTVF9NRVNTQUdFX0FTWU5DX1NUQVJUKSkpIHsKKyNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCisgICAgR3N0TWVzc2FnZSAqbWVzc2FnZSA9IEdTVF9NRVNTQUdFX0NBU1QgKGZvdW5kLT5kYXRhKTsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGVsZW1lbnQsICJlbGVtZW50IG1lc3NhZ2UgJXAsICVzIGFzeW5jIGJ1c3kiLAorICAgICAgICBtZXNzYWdlLCBHU1RfRUxFTUVOVF9OQU1FIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpKSk7CisjZW5kaWYKKyAgICAvKiBvbmx5IHdhaXQgZm9yIHVwd2FyZCBzdGF0ZSBjaGFuZ2VzICovCisgICAgaWYgKG5leHQgPiBjdXJyZW50KSB7CisgICAgICAvKiBXZSBmb3VuZCBhbiBhc3luYyBlbGVtZW50IGNoZWNrIGlmIHdlIGNhbiBmb3JjZSBpdHMgc3RhdGUgdG8gY2hhbmdlIG9yCisgICAgICAgKiBpZiB3ZSBoYXZlIHRvIHdhaXQgZm9yIGl0IHRvIHByZXJvbGwuICovCisgICAgICBpZiAoR19VTkxJS0VMWSAoIWVuYWJsZV9sYXRlbmN5KSkgeworICAgICAgICBnX3dhcm5pbmcgKCJGdXR1cmUgdmVyc2lvbnMgb2YgR1N0cmVhbWVyIHdpbGwgd2FpdCBmb3IgZWxlbWVudCBcIiVzXCJcbiIKKyAgICAgICAgICAgICJcdHRvIHByZXJvbGwgaW4gb3JkZXIgdG8gcGVyZm9ybSBjb3JyZWN0IGxhdGVuY3kgY2FsY3VsYXRpb25zLlxuIgorICAgICAgICAgICAgIlx0UGxlYXNlIHZlcmlmeSB0aGF0IHRoZSBhcHBsaWNhdGlvbiBjb250aW51ZXMgdG8gd29yayBjb3JyZWN0bHkgYnlcbiIKKyAgICAgICAgICAgICJcdHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9DT01QQVQgdG8gYSB2YWx1ZSBjb250YWluaW5nXG4iCisgICAgICAgICAgICAiXHR0aGUgc3RyaW5nICdsaXZlLXByZXJvbGwnLiIsIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKKyAgICAgICAgZ290byBub19sYXRlbmN5OworICAgICAgfQorICAgICAgZ290byB3YXNfYnVzeTsKKyAgICB9CisgIH0KK25vX2xhdGVuY3k6CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOworCitub19wcmVyb2xsOgorICBHU1RfREVCVUdfT0JKRUNUIChiaW4sCisgICAgICAic2V0dGluZyBlbGVtZW50ICVzIHRvICVzLCBiYXNlX3RpbWUgJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChuZXh0KSwKKyAgICAgIEdTVF9USU1FX0FSR1MgKGJhc2VfdGltZSkpOworCisgIC8qIGNoYW5nZSBzdGF0ZSAqLworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIG5leHQpOworCisgIEdTVF9TVEFURV9VTkxPQ0sgKGVsZW1lbnQpOworCisgIHJldHVybiByZXQ7CisKK2xvY2tlZDoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGVsZW1lbnQsCisgICAgICAgICJlbGVtZW50IGlzIGxvY2tlZCwgcmV0dXJuIHByZXZpb3VzIHJldHVybiAlcyIsCisgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2NoYW5nZV9yZXR1cm5fZ2V0X25hbWUgKHJldCkpOworICAgIEdTVF9TVEFURV9VTkxPQ0sgKGVsZW1lbnQpOworICAgIHJldHVybiByZXQ7CisgIH0KK3dhc19idXN5OgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoZWxlbWVudCwgImVsZW1lbnQgd2FzIGJ1c3ksIGRlbGF5aW5nIHN0YXRlIGNoYW5nZSIpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOworICAgIEdTVF9TVEFURV9VTkxPQ0sgKGVsZW1lbnQpOworICAgIHJldHVybiBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DOworICB9Cit1bm5lZWRlZDoKKyAgeworICAgIEdTVF9DQVRfSU5GT19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LAorICAgICAgICAic2tpcHBpbmcgdHJhbnNpdGlvbiBmcm9tICVzIHRvICAlcywgc2luY2UgYmluIHBlbmRpbmciCisgICAgICAgICIgaXMgJXMgOiBsYXN0IGNoYW5nZSBzdGF0ZSByZXR1cm4gZm9sbG93cyIsCisgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChjaGlsZF9jdXJyZW50KSwKKyAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKG5leHQpLAorICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAocGVuZGluZykpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOworICAgIEdTVF9TVEFURV9VTkxPQ0sgKGVsZW1lbnQpOworICAgIHJldHVybiByZXQ7CisgIH0KK30KKworLyogZ3N0X2l0ZXJhdG9yX2ZvbGQgZnVuY3Rpb25zIGZvciBwYWRzX2FjdGl2YXRlCisgKiBTdG9wIHRoZSBpdGVyYXRvciBpZiBhY3RpdmF0aW5nIG9uZSBwYWQgZmFpbGVkLiAqLworc3RhdGljIGdib29sZWFuCithY3RpdmF0ZV9wYWRzIChjb25zdCBHVmFsdWUgKiB2cGFkLCBHVmFsdWUgKiByZXQsIGdib29sZWFuICogYWN0aXZlKQoreworICBHc3RQYWQgKnBhZCA9IGdfdmFsdWVfZ2V0X29iamVjdCAodnBhZCk7CisgIGdib29sZWFuIGNvbnQgPSBUUlVFOworCisgIGlmICghKGNvbnQgPSBnc3RfcGFkX3NldF9hY3RpdmUgKHBhZCwgKmFjdGl2ZSkpKQorICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHJldCwgRkFMU0UpOworCisgIHJldHVybiBjb250OworfQorCisvKiByZXR1cm5zIGZhbHNlIG9uIGVycm9yIG9yIGVhcmx5IGN1dG91dCBvZiB0aGUgZm9sZCwgdHJ1ZSBpZiBhbGwKKyAqIHBhZHMgaW4gQGl0ZXIgd2VyZSAoZGUpYWN0aXZhdGVkIHN1Y2Nlc3NmdWxseS4gKi8KK3N0YXRpYyBnYm9vbGVhbgoraXRlcmF0b3JfYWN0aXZhdGVfZm9sZF93aXRoX3Jlc3luYyAoR3N0SXRlcmF0b3IgKiBpdGVyLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIEdzdEl0ZXJhdG9yUmVzdWx0IGlyZXM7CisgIEdWYWx1ZSByZXQgPSB7IDAgfTsKKworICAvKiBubyBuZWVkIHRvIHVuc2V0IHRoaXMgbGF0ZXIsIGl0J3MganVzdCBhIGJvb2xlYW4gKi8KKyAgZ192YWx1ZV9pbml0ICgmcmV0LCBHX1RZUEVfQk9PTEVBTik7CisgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKCZyZXQsIFRSVUUpOworCisgIHdoaWxlICgxKSB7CisgICAgaXJlcyA9IGdzdF9pdGVyYXRvcl9mb2xkIChpdGVyLCAoR3N0SXRlcmF0b3JGb2xkRnVuY3Rpb24pIGFjdGl2YXRlX3BhZHMsCisgICAgICAgICZyZXQsIHVzZXJfZGF0YSk7CisgICAgc3dpdGNoIChpcmVzKSB7CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6CisgICAgICAgIC8qIG5lZWQgdG8gcmVzZXQgdGhlIHJlc3VsdCBhZ2FpbiAqLworICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICgmcmV0LCBUUlVFKTsKKyAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAoaXRlcik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRE9ORToKKyAgICAgICAgLyogYWxsIHBhZHMgaXRlcmF0ZWQsIHJldHVybiBjb2xsZWN0ZWQgdmFsdWUgKi8KKyAgICAgICAgZ290byBkb25lOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgLyogaXRlcmF0b3IgcmV0dXJuZWQgX0VSUk9SIG9yIHByZW1hdHVyZSBlbmQgd2l0aCBfT0ssCisgICAgICAgICAqIG1hcmsgYW4gZXJyb3IgYW5kIGV4aXQgKi8KKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAoJnJldCwgRkFMU0UpOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorICB9Citkb25lOgorICAvKiByZXR1cm4gY29sbGVjdGVkIHZhbHVlICovCisgIHJldHVybiBnX3ZhbHVlX2dldF9ib29sZWFuICgmcmV0KTsKK30KKworLyogaXMgY2FsbGVkIHdpdGggU1RBVEVfTE9DSworICovCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iaW5fc3JjX3BhZHNfYWN0aXZhdGUgKEdzdEJpbiAqIGJpbiwgZ2Jvb2xlYW4gYWN0aXZlKQoreworICBHc3RJdGVyYXRvciAqaXRlcjsKKyAgZ2Jvb2xlYW4gZm9sZF9vazsKKworICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJzcmNfcGFkc19hY3RpdmF0ZSB3aXRoIGFjdGl2ZSAlZCIsIGFjdGl2ZSk7CisKKyAgaXRlciA9IGdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMgKChHc3RFbGVtZW50ICopIGJpbik7CisgIGZvbGRfb2sgPSBpdGVyYXRvcl9hY3RpdmF0ZV9mb2xkX3dpdGhfcmVzeW5jIChpdGVyLCAmYWN0aXZlKTsKKyAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0ZXIpOworICBpZiAoR19VTkxJS0VMWSAoIWZvbGRfb2spKQorICAgIGdvdG8gZmFpbGVkOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgInBhZHNfYWN0aXZhdGUgc3VjY2Vzc2Z1bCIpOworCisgIHJldHVybiBUUlVFOworCisgIC8qIEVSUk9SUyAqLworZmFpbGVkOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAic291cmNlIHBhZHNfYWN0aXZhdGUgZmFpbGVkIik7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKKy8qKgorICogZ3N0X2Jpbl9yZWNhbGN1bGF0ZV9sYXRlbmN5OgorICogQGJpbjogYSAjR3N0QmluCisgKgorICogUXVlcnkgQGJpbiBmb3IgdGhlIGN1cnJlbnQgbGF0ZW5jeSB1c2luZyBhbmQgcmVjb25maWd1cmVzIHRoaXMgbGF0ZW5jeSB0byBhbGwgdGhlCisgKiBlbGVtZW50cyB3aXRoIGEgTEFURU5DWSBldmVudC4KKyAqCisgKiBUaGlzIG1ldGhvZCBpcyB0eXBpY2FsbHkgY2FsbGVkIG9uIHRoZSBwaXBlbGluZSB3aGVuIGEgI0dTVF9NRVNTQUdFX0xBVEVOQ1kKKyAqIGlzIHBvc3RlZCBvbiB0aGUgYnVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2ltcGx5IGVtaXRzIHRoZSAnZG8tbGF0ZW5jeScgc2lnbmFsIHNvIGFueSBjdXN0b20gbGF0ZW5jeQorICogY2FsY3VsYXRpb25zIHdpbGwgYmUgcGVyZm9ybWVkLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBsYXRlbmN5IGNvdWxkIGJlIHF1ZXJpZWQgYW5kIHJlY29uZmlndXJlZC4KKyAqCisgKiBTaW5jZTogMC4xMC4yMi4KKyAqLworZ2Jvb2xlYW4KK2dzdF9iaW5fcmVjYWxjdWxhdGVfbGF0ZW5jeSAoR3N0QmluICogYmluKQoreworICBnYm9vbGVhbiByZXM7CisKKyAgZ19zaWduYWxfZW1pdCAoYmluLCBnc3RfYmluX3NpZ25hbHNbRE9fTEFURU5DWV0sIDAsICZyZXMpOworICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJsYXRlbmN5IHJldHVybmVkICVkIiwgcmVzKTsKKworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iaW5fZG9fbGF0ZW5jeV9mdW5jIChHc3RCaW4gKiBiaW4pCit7CisgIEdzdFF1ZXJ5ICpxdWVyeTsKKyAgR3N0RWxlbWVudCAqZWxlbWVudDsKKyAgR3N0Q2xvY2tUaW1lIG1pbl9sYXRlbmN5LCBtYXhfbGF0ZW5jeTsKKyAgZ2Jvb2xlYW4gcmVzOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQklOIChiaW4pLCBGQUxTRSk7CisKKyAgZWxlbWVudCA9IEdTVF9FTEVNRU5UX0NBU1QgKGJpbik7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoZWxlbWVudCwgInF1ZXJ5aW5nIGxhdGVuY3kiKTsKKworICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfbGF0ZW5jeSAoKTsKKyAgaWYgKChyZXMgPSBnc3RfZWxlbWVudF9xdWVyeSAoZWxlbWVudCwgcXVlcnkpKSkgeworICAgIGdib29sZWFuIGxpdmU7CisKKyAgICBnc3RfcXVlcnlfcGFyc2VfbGF0ZW5jeSAocXVlcnksICZsaXZlLCAmbWluX2xhdGVuY3ksICZtYXhfbGF0ZW5jeSk7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUIChlbGVtZW50LAorICAgICAgICAiZ290IG1pbiBsYXRlbmN5ICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBtYXggbGF0ZW5jeSAlIgorICAgICAgICBHU1RfVElNRV9GT1JNQVQgIiwgbGl2ZSAlZCIsIEdTVF9USU1FX0FSR1MgKG1pbl9sYXRlbmN5KSwKKyAgICAgICAgR1NUX1RJTUVfQVJHUyAobWF4X2xhdGVuY3kpLCBsaXZlKTsKKworICAgIGlmIChtYXhfbGF0ZW5jeSA8IG1pbl9sYXRlbmN5KSB7CisgICAgICAvKiB0aGlzIGlzIGFuIGltcG9zc2libGUgc2l0dWF0aW9uLCBzb21lIHBhcnRzIG9mIHRoZSBwaXBlbGluZSBtaWdodCBub3QKKyAgICAgICAqIHdvcmsgY29ycmVjdGx5LiBXZSBwb3N0IGEgd2FybmluZyBmb3Igbm93LiAqLworICAgICAgR1NUX0VMRU1FTlRfV0FSTklORyAoZWxlbWVudCwgQ09SRSwgQ0xPQ0ssIChOVUxMKSwKKyAgICAgICAgICAoIkltcG9zc2libGUgdG8gY29uZmlndXJlIGxhdGVuY3k6IG1heCAlIiBHU1RfVElNRV9GT1JNQVQgIiA8IG1pbiAlIgorICAgICAgICAgICAgICBHU1RfVElNRV9GT1JNQVQgIi4gQWRkIHF1ZXVlcyBvciBvdGhlciBidWZmZXJpbmcgZWxlbWVudHMuIiwKKyAgICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAobWF4X2xhdGVuY3kpLCBHU1RfVElNRV9BUkdTIChtaW5fbGF0ZW5jeSkpKTsKKyAgICB9CisKKyAgICAvKiBjb25maWd1cmUgbGF0ZW5jeSBvbiBlbGVtZW50cyAqLworICAgIHJlcyA9IGdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKGVsZW1lbnQsIGdzdF9ldmVudF9uZXdfbGF0ZW5jeSAobWluX2xhdGVuY3kpKTsKKyAgICBpZiAocmVzKSB7CisgICAgICBHU1RfSU5GT19PQkpFQ1QgKGVsZW1lbnQsICJjb25maWd1cmVkIGxhdGVuY3kgb2YgJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgICAgIEdTVF9USU1FX0FSR1MgKG1pbl9sYXRlbmN5KSk7CisgICAgfSBlbHNlIHsKKyAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZWxlbWVudCwKKyAgICAgICAgICAiZGlkIG5vdCByZWFsbHkgY29uZmlndXJlIGxhdGVuY3kgb2YgJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgICAgIEdTVF9USU1FX0FSR1MgKG1pbl9sYXRlbmN5KSk7CisgICAgfQorICB9IGVsc2UgeworICAgIC8qIHRoaXMgaXMgbm90IGEgcmVhbCBwcm9ibGVtLCB3ZSBqdXN0IGRvbid0IGNvbmZpZ3VyZSBhbnkgbGF0ZW5jeS4gKi8KKyAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGVsZW1lbnQsICJmYWlsZWQgdG8gcXVlcnkgbGF0ZW5jeSIpOworICB9CisgIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOworCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfYmluX3N0YXRlX2NoYW5nZWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZSBvbGRzdGF0ZSwKKyAgICBHc3RTdGF0ZSBuZXdzdGF0ZSwgR3N0U3RhdGUgcGVuZGluZykKK3sKKyAgR3N0RWxlbWVudENsYXNzICpwa2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIHBhcmVudF9jbGFzczsKKworICBpZiAobmV3c3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcgJiYgcGVuZGluZyA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HKQorICAgIGJpbl9kb19lb3MgKEdTVF9CSU5fQ0FTVCAoZWxlbWVudCkpOworCisgIGlmIChwa2xhc3MtPnN0YXRlX2NoYW5nZWQpCisgICAgcGtsYXNzLT5zdGF0ZV9jaGFuZ2VkIChlbGVtZW50LCBvbGRzdGF0ZSwgbmV3c3RhdGUsIHBlbmRpbmcpOworfQorCitzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KK2dzdF9iaW5fY2hhbmdlX3N0YXRlX2Z1bmMgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQoreworICBHc3RCaW4gKmJpbjsKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OworICBHc3RTdGF0ZSBjdXJyZW50LCBuZXh0OworICBnYm9vbGVhbiBoYXZlX2FzeW5jOworICBnYm9vbGVhbiBoYXZlX25vX3ByZXJvbGw7CisgIEdzdENsb2NrVGltZSBiYXNlX3RpbWUsIHN0YXJ0X3RpbWU7CisgIEdzdEl0ZXJhdG9yICppdDsKKyAgZ2Jvb2xlYW4gZG9uZTsKKyAgR1ZhbHVlIGRhdGEgPSB7IDAsIH07CisKKyAgLyogd2UgZG9uJ3QgbmVlZCB0byB0YWtlIHRoZSBTVEFURV9MT0NLLCBpdCBpcyBhbHJlYWR5IHRha2VuICovCisgIGN1cnJlbnQgPSAoR3N0U3RhdGUpIEdTVF9TVEFURV9UUkFOU0lUSU9OX0NVUlJFTlQgKHRyYW5zaXRpb24pOworICBuZXh0ID0gKEdzdFN0YXRlKSBHU1RfU1RBVEVfVFJBTlNJVElPTl9ORVhUICh0cmFuc2l0aW9uKTsKKworICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsCisgICAgICAiY2hhbmdpbmcgc3RhdGUgb2YgY2hpbGRyZW4gZnJvbSAlcyB0byAlcyIsCisgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAoY3VycmVudCksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChuZXh0KSk7CisKKyAgYmluID0gR1NUX0JJTl9DQVNUIChlbGVtZW50KTsKKworICBzd2l0Y2ggKG5leHQpIHsKKyAgICBjYXNlIEdTVF9TVEFURV9QTEFZSU5HOgorICAgIHsKKyAgICAgIGdib29sZWFuIHRvcGxldmVsOworCisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGJpbik7CisgICAgICB0b3BsZXZlbCA9IEJJTl9JU19UT1BMRVZFTCAoYmluKTsKKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOworCisgICAgICBpZiAodG9wbGV2ZWwpCisgICAgICAgIGdzdF9iaW5fcmVjYWxjdWxhdGVfbGF0ZW5jeSAoYmluKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9TVEFURV9QQVVTRUQ6CisgICAgICAvKiBDbGVhciBFT1MgbGlzdCBvbiBuZXh0IFBBVVNFRCAqLworICAgICAgR1NUX09CSkVDVF9MT0NLIChiaW4pOworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZWxlbWVudCwgImNsZWFyaW5nIEVPUyBlbGVtZW50cyIpOworICAgICAgYmluX3JlbW92ZV9tZXNzYWdlcyAoYmluLCBOVUxMLCBHU1RfTUVTU0FHRV9FT1MpOworICAgICAgYmluLT5wcml2LT5wb3N0ZWRfZW9zID0gRkFMU0U7CisgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKKyAgICAgIGlmIChjdXJyZW50ID09IEdTVF9TVEFURV9SRUFEWSkKKyAgICAgICAgaWYgKCEoZ3N0X2Jpbl9zcmNfcGFkc19hY3RpdmF0ZSAoYmluLCBUUlVFKSkpCisgICAgICAgICAgZ290byBhY3RpdmF0ZV9mYWlsdXJlOworICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfU1RBVEVfUkVBRFk6CisgICAgICAvKiBDbGVhciBtZXNzYWdlIGxpc3Qgb24gbmV4dCBSRUFEWSAqLworICAgICAgR1NUX09CSkVDVF9MT0NLIChiaW4pOworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZWxlbWVudCwgImNsZWFyaW5nIGFsbCBjYWNoZWQgbWVzc2FnZXMiKTsKKyAgICAgIGJpbl9yZW1vdmVfbWVzc2FnZXMgKGJpbiwgTlVMTCwgR1NUX01FU1NBR0VfQU5ZKTsKKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOworICAgICAgaWYgKGN1cnJlbnQgPT0gR1NUX1NUQVRFX1BBVVNFRCkKKyAgICAgICAgaWYgKCEoZ3N0X2Jpbl9zcmNfcGFkc19hY3RpdmF0ZSAoYmluLCBGQUxTRSkpKQorICAgICAgICAgIGdvdG8gYWN0aXZhdGVfZmFpbHVyZTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1NUQVRFX05VTEw6CisgICAgICBpZiAoY3VycmVudCA9PSBHU1RfU1RBVEVfUkVBRFkpCisgICAgICAgIGlmICghKGdzdF9iaW5fc3JjX3BhZHNfYWN0aXZhdGUgKGJpbiwgRkFMU0UpKSkKKyAgICAgICAgICBnb3RvIGFjdGl2YXRlX2ZhaWx1cmU7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKworICAvKiB0aGlzIGZsYWcgaXMgdXNlZCB0byBtYWtlIHRoZSBhc3luYyBzdGF0ZSBjaGFuZ2VzIHJldHVybiBpbW1lZGlhdGVseS4gV2UKKyAgICogZG9uJ3Qgd2FudCB0aGVtIHRvIGludGVyZmVyZSB3aXRoIHRoaXMgc3RhdGUgY2hhbmdlICovCisgIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKKyAgYmluLT5wb2xsaW5nID0gVFJVRTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7CisKKyAgLyogaXRlcmF0ZSBpbiBzdGF0ZSBjaGFuZ2Ugb3JkZXIgKi8KKyAgaXQgPSBnc3RfYmluX2l0ZXJhdGVfc29ydGVkIChiaW4pOworCisgIC8qIG1hcmsgaWYgd2UndmUgc2VlbiBhbiBBU1lOQyBlbGVtZW50IGluIHRoZSBiaW4gd2hlbiB3ZSBkaWQgYSBzdGF0ZSBjaGFuZ2UuCisgICAqIE5vdGUgaG93IHdlIGRvbid0IHJlc2V0IHRoaXMgdmFsdWUgd2hlbiBhIHJlc3luYyBoYXBwZW5zLCB0aGUgcmVhc29uIGJlaW5nCisgICAqIHRoYXQgdGhlIGFzeW5jIGVsZW1lbnQgcG9zdGVkIEFTWU5DX1NUQVJUIGFuZCB3ZSB3YW50IHRvIHBvc3QgQVNZTkNfRE9ORQorICAgKiBldmVuIGFmdGVyIGEgcmVzeW5jIHdoZW4gdGhlIGFzeW5jIGVsZW1lbnQgaXMgZ29uZSAqLworICBoYXZlX2FzeW5jID0gRkFMU0U7CisKK3Jlc3RhcnQ6CisgIC8qIHRha2UgYmFzZV90aW1lICovCisgIGJhc2VfdGltZSA9IGdzdF9lbGVtZW50X2dldF9iYXNlX3RpbWUgKGVsZW1lbnQpOworICBzdGFydF90aW1lID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXJ0X3RpbWUgKGVsZW1lbnQpOworCisgIGhhdmVfbm9fcHJlcm9sbCA9IEZBTFNFOworCisgIGRvbmUgPSBGQUxTRTsKKyAgd2hpbGUgKCFkb25lKSB7CisgICAgc3dpdGNoIChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZkYXRhKSkgeworICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfT0s6CisgICAgICB7CisgICAgICAgIEdzdEVsZW1lbnQgKmNoaWxkOworCisgICAgICAgIGNoaWxkID0gZ192YWx1ZV9nZXRfb2JqZWN0ICgmZGF0YSk7CisKKyAgICAgICAgLyogc2V0IHN0YXRlIGFuZCBiYXNlX3RpbWUgbm93ICovCisgICAgICAgIHJldCA9IGdzdF9iaW5fZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgY2hpbGQsIGJhc2VfdGltZSwgc3RhcnRfdGltZSwKKyAgICAgICAgICAgIGN1cnJlbnQsIG5leHQpOworCisgICAgICAgIHN3aXRjaCAocmV0KSB7CisgICAgICAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M6CisgICAgICAgICAgICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgZWxlbWVudCwKKyAgICAgICAgICAgICAgICAiY2hpbGQgJyVzJyBjaGFuZ2VkIHN0YXRlIHRvICVkKCVzKSBzdWNjZXNzZnVsbHkiLAorICAgICAgICAgICAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGNoaWxkKSwgbmV4dCwKKyAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAobmV4dCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DOgorICAgICAgICAgIHsKKyAgICAgICAgICAgIEdTVF9DQVRfSU5GT19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LAorICAgICAgICAgICAgICAgICJjaGlsZCAnJXMnIGlzIGNoYW5naW5nIHN0YXRlIGFzeW5jaHJvbm91c2x5IHRvICVzIiwKKyAgICAgICAgICAgICAgICBHU1RfRUxFTUVOVF9OQU1FIChjaGlsZCksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChuZXh0KSk7CisgICAgICAgICAgICBoYXZlX2FzeW5jID0gVFJVRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTp7CisgICAgICAgICAgICBHc3RPYmplY3QgKnBhcmVudDsKKworICAgICAgICAgICAgR1NUX0NBVF9JTkZPX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsCisgICAgICAgICAgICAgICAgImNoaWxkICclcycgZmFpbGVkIHRvIGdvIHRvIHN0YXRlICVkKCVzKSIsCisgICAgICAgICAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoY2hpbGQpLAorICAgICAgICAgICAgICAgIG5leHQsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChuZXh0KSk7CisKKyAgICAgICAgICAgIC8qIE9ubHkgZmFpbCBpZiB0aGUgY2hpbGQgaXMgc3RpbGwgaW5zaWRlCisgICAgICAgICAgICAgKiB0aGlzIGJpbi4gSXQgbWlnaHQndmUgYmVlbiByZW1vdmVkIGFscmVhZHkKKyAgICAgICAgICAgICAqIGJlY2F1c2Ugb2YgdGhlIGVycm9yIGJ5IHRoZSBiaW4gc3ViY2xhc3MKKyAgICAgICAgICAgICAqIHRvIGlnbm9yZSB0aGUgZXJyb3IuICAqLworICAgICAgICAgICAgcGFyZW50ID0gZ3N0X29iamVjdF9nZXRfcGFyZW50IChHU1RfT0JKRUNUX0NBU1QgKGNoaWxkKSk7CisgICAgICAgICAgICBpZiAocGFyZW50ID09IEdTVF9PQkpFQ1RfQ0FTVCAoZWxlbWVudCkpIHsKKyAgICAgICAgICAgICAgLyogZWxlbWVudCBpcyBzdGlsbCBpbiBiaW4sIHJlYWxseSBlcnJvciBub3cgKi8KKyAgICAgICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAocGFyZW50KTsKKyAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogY2hpbGQgcmVtb3ZlZCBmcm9tIGJpbiwgbGV0IHRoZSByZXN5bmMgY29kZSByZWRvIHRoZSBzdGF0ZQorICAgICAgICAgICAgICogY2hhbmdlICovCisgICAgICAgICAgICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgZWxlbWVudCwKKyAgICAgICAgICAgICAgICAiY2hpbGQgJyVzJyB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBiaW4iLAorICAgICAgICAgICAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGNoaWxkKSk7CisKKyAgICAgICAgICAgIGlmIChwYXJlbnQpCisgICAgICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhcmVudCk7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTDoKKyAgICAgICAgICAgIEdTVF9DQVRfSU5GT19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LAorICAgICAgICAgICAgICAgICJjaGlsZCAnJXMnIGNoYW5nZWQgc3RhdGUgdG8gJWQoJXMpIHN1Y2Nlc3NmdWxseSB3aXRob3V0IHByZXJvbGwiLAorICAgICAgICAgICAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGNoaWxkKSwgbmV4dCwKKyAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAobmV4dCkpOworICAgICAgICAgICAgaGF2ZV9ub19wcmVyb2xsID0gVFJVRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGdfdmFsdWVfcmVzZXQgKCZkYXRhKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6CisgICAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfU1RBVEVTLCAiaXRlcmF0b3IgZG9pbmcgcmVzeW5jIik7CisgICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0KTsKKyAgICAgICAgZ290byByZXN0YXJ0OworICAgICAgZGVmYXVsdDoKKyAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0RPTkU6CisgICAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfU1RBVEVTLCAiaXRlcmF0b3IgZG9uZSIpOworICAgICAgICBkb25lID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7CisgIGlmIChHX1VOTElLRUxZIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKSkKKyAgICBnb3RvIGRvbmU7CisKKyAgaWYgKGhhdmVfbm9fcHJlcm9sbCkgeworICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfU1RBVEVTLAorICAgICAgICAid2UgaGF2ZSBOT19QUkVST0xMIGVsZW1lbnRzICVzIC0+IE5PX1BSRVJPTEwiLAorICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VfcmV0dXJuX2dldF9uYW1lIChyZXQpKTsKKyAgICByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEw7CisgIH0gZWxzZSBpZiAoaGF2ZV9hc3luYykgeworICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfU1RBVEVTLCAid2UgaGF2ZSBBU1lOQyBlbGVtZW50cyAlcyAtPiBBU1lOQyIsCisgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2NoYW5nZV9yZXR1cm5fZ2V0X25hbWUgKHJldCkpOworICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfQVNZTkM7CisgIH0KKworZG9uZToKKyAgZ192YWx1ZV91bnNldCAoJmRhdGEpOworICBnc3RfaXRlcmF0b3JfZnJlZSAoaXQpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKKyAgYmluLT5wb2xsaW5nID0gRkFMU0U7CisgIC8qIGl0J3MgcG9zc2libGUgdGhhdCB3ZSBkaWQgbm90IGdldCBBU1lOQyBmcm9tIHRoZSBjaGlsZHJlbiB3aGlsZSB0aGUgYmluIGlzCisgICAqIHNpbXVsYXRpbmcgQVNZTkMgYmVoYXZpb3VyIGJ5IHBvc3RpbmcgYW4gQVNZTkNfRE9ORSBtZXNzYWdlIG9uIHRoZSBidXMgd2l0aAorICAgKiBpdHNlbGYgYXMgdGhlIHNvdXJjZS4gSW4gdGhhdCBjYXNlIHdlIHN0aWxsIHdhbnQgdG8gY2hlY2sgaWYgdGhlIHN0YXRlCisgICAqIGNoYW5nZSBjb21wbGV0ZWQuICovCisgIGlmIChyZXQgIT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyAmJiAhYmluLT5wcml2LT5wZW5kaW5nX2FzeW5jX2RvbmUpIHsKKyAgICAvKiBubyBlbGVtZW50IHJldHVybmVkIEFTWU5DIGFuZCB0aGVyZSBhcmUgbm8gcGVuZGluZyBhc3luY19kb25lIG1lc3NhZ2VzLAorICAgICAqIHdlIGNhbiBqdXN0IGNvbXBsZXRlLiAqLworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgIm5vIGFzeW5jIGVsZW1lbnRzIik7CisgICAgZ290byBzdGF0ZV9lbmQ7CisgIH0KKyAgLyogd2hlbiB3ZSBnZXQgaGVyZSBhbiBBU1lOQyBlbGVtZW50IHdhcyBmb3VuZCAqLworICBpZiAoR1NUX1NUQVRFX1RBUkdFVCAoYmluKSA8PSBHU1RfU1RBVEVfUkVBRFkpIHsKKyAgICAvKiB3ZSBpZ25vcmUgQVNZTkMgc3RhdGUgY2hhbmdlcyB3aGVuIHdlIGdvIHRvIFJFQURZIG9yIE5VTEwgKi8KKyAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJ0YXJnZXQgc3RhdGUgJXMgPD0gUkVBRFkiLAorICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAoR1NUX1NUQVRFX1RBUkdFVCAoYmluKSkpOworICAgIGdvdG8gc3RhdGVfZW5kOworICB9CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiY2hlY2sgYXN5bmMgZWxlbWVudHMiKTsKKyAgLyogY2hlY2sgaWYgYWxsIGVsZW1lbnRzIG1hbmFnZWQgdG8gY29tbWl0IHRoZWlyIHN0YXRlIGFscmVhZHkgKi8KKyAgaWYgKCFmaW5kX21lc3NhZ2UgKGJpbiwgTlVMTCwgR1NUX01FU1NBR0VfQVNZTkNfU1RBUlQpKSB7CisgICAgLyogbm90aGluZyBmb3VuZCwgcmVtb3ZlIGFsbCBvbGQgQVNZTkNfRE9ORSBtZXNzYWdlcy4gVGhpcyBjYW4gaGFwcGVuIHdoZW4KKyAgICAgKiBhbGwgdGhlIGVsZW1lbnRzIGNvbW1pdGVkIHRoZWlyIHN0YXRlIHdoaWxlIHdlIHdlcmUgZG9pbmcgdGhlIHN0YXRlCisgICAgICogY2hhbmdlLiBXZSB3aWxsIHN0aWxsIHJldHVybiBBU1lOQyBmb3IgY29uc2lzdGVuY3kgYnV0IHdlIGNvbW1pdCB0aGUKKyAgICAgKiBzdGF0ZSBhbHJlYWR5IHNvIHRoYXQgYSBfZ2V0X3N0YXRlKCkgd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkuICovCisgICAgYmluX3JlbW92ZV9tZXNzYWdlcyAoYmluLCBOVUxMLCBHU1RfTUVTU0FHRV9BU1lOQ19ET05FKTsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgImFzeW5jIGVsZW1lbnRzIGNvbW1pdGVkIik7CisgICAgYmluX2hhbmRsZV9hc3luY19kb25lIChiaW4sIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgRkFMU0UsIEZBTFNFKTsKKyAgfQorCitzdGF0ZV9lbmQ6CisgIGJpbi0+cHJpdi0+cGVuZGluZ19hc3luY19kb25lID0gRkFMU0U7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOworCisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgZWxlbWVudCwKKyAgICAgICJkb25lIGNoYW5naW5nIGJpbidzIHN0YXRlIGZyb20gJXMgdG8gJXMsIG5vdyBpbiAlcywgcmV0ICVzIiwKKyAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChjdXJyZW50KSwKKyAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChuZXh0KSwKKyAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChHU1RfU1RBVEUgKGVsZW1lbnQpKSwKKyAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2NoYW5nZV9yZXR1cm5fZ2V0X25hbWUgKHJldCkpOworCisgIHJldHVybiByZXQ7CisKKyAgLyogRVJST1JTICovCithY3RpdmF0ZV9mYWlsdXJlOgorICB7CisgICAgR1NUX0NBVF9XQVJOSU5HX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsCisgICAgICAgICJmYWlsdXJlIChkZSlhY3RpdmF0aW5nIHNyYyBwYWRzIik7CisgICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKKyAgfQorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBhIHV0aWxpdHkgZXZlbnQgaGFuZGxlciBmb3Igc2VlayBldmVudHMuCisgKiBJdCB3aWxsIHNlbmQgdGhlIGV2ZW50IHRvIGFsbCBzaW5rcyBvciBzb3VyY2VzIGRlcGVuZGluZyBvbiB0aGUKKyAqIGV2ZW50LWRpcmVjdGlvbi4KKyAqCisgKiBBcHBsaWNhdGlvbnMgYXJlIGZyZWUgdG8gb3ZlcnJpZGUgdGhpcyBiZWhhdmlvdXIgYW5kCisgKiBpbXBsZW1lbnQgdGhlaXIgb3duIHNlZWsgaGFuZGxlciwgYnV0IHRoaXMgd2lsbCB3b3JrIGZvcgorICogcHJldHR5IG11Y2ggYWxsIGNhc2VzIGluIHByYWN0aWNlLgorICovCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iaW5fc2VuZF9ldmVudCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEV2ZW50ICogZXZlbnQpCit7CisgIEdzdEJpbiAqYmluID0gR1NUX0JJTl9DQVNUIChlbGVtZW50KTsKKyAgR3N0SXRlcmF0b3IgKml0ZXI7CisgIGdib29sZWFuIHJlcyA9IFRSVUU7CisgIGdib29sZWFuIGRvbmUgPSBGQUxTRTsKKyAgR1ZhbHVlIGRhdGEgPSB7IDAsIH07CisKKyAgaWYgKEdTVF9FVkVOVF9JU19ET1dOU1RSRUFNIChldmVudCkpIHsKKyAgICBpdGVyID0gZ3N0X2Jpbl9pdGVyYXRlX3NvdXJjZXMgKGJpbik7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiU2VuZGluZyAlcyBldmVudCB0byBzcmMgY2hpbGRyZW4iLAorICAgICAgICBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCkpOworICB9IGVsc2UgeworICAgIGl0ZXIgPSBnc3RfYmluX2l0ZXJhdGVfc2lua3MgKGJpbik7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiU2VuZGluZyAlcyBldmVudCB0byBzaW5rIGNoaWxkcmVuIiwKKyAgICAgICAgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKKyAgfQorCisgIHdoaWxlICghZG9uZSkgeworICAgIHN3aXRjaCAoZ3N0X2l0ZXJhdG9yX25leHQgKGl0ZXIsICZkYXRhKSkgeworICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfT0s6CisgICAgICB7CisgICAgICAgIEdzdEVsZW1lbnQgKmNoaWxkID0gZ192YWx1ZV9nZXRfb2JqZWN0ICgmZGF0YSk7OworCisgICAgICAgIGdzdF9ldmVudF9yZWYgKGV2ZW50KTsKKyAgICAgICAgcmVzICY9IGdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKGNoaWxkLCBldmVudCk7CisgICAgICAgIGdfdmFsdWVfcmVzZXQgKCZkYXRhKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6CisgICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0ZXIpOworICAgICAgICByZXMgPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0RPTkU6CisgICAgICAgIGRvbmUgPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0VSUk9SOgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGdfdmFsdWVfdW5zZXQgKCZkYXRhKTsKKyAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0ZXIpOworICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKworICByZXR1cm4gcmVzOworfQorCisvKiB0aGlzIGlzIHRoZSBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlIHRocmVhZHBvb2wuIFdoZW4gYXN5bmMgZWxlbWVudHMgY29tbWl0CisgKiB0aGVpciBzdGF0ZSwgdGhpcyBmdW5jdGlvbiB3aWxsIGF0dGVtcHQgdG8gYnJpbmcgdGhlIGJpbiB0byB0aGUgbmV4dCBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2dzdF9iaW5fY29udGludWVfZnVuYyAoQmluQ29udGludWVEYXRhICogZGF0YSkKK3sKKyAgR3N0QmluICpiaW47CisgIEdzdFN0YXRlIGN1cnJlbnQsIG5leHQsIHBlbmRpbmc7CisgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb247CisKKyAgYmluID0gZGF0YS0+YmluOworICBwZW5kaW5nID0gZGF0YS0+cGVuZGluZzsKKworICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJ3YWl0aW5nIGZvciBzdGF0ZSBsb2NrIik7CisgIEdTVF9TVEFURV9MT0NLIChiaW4pOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgImRvaW5nIHN0YXRlIGNvbnRpbnVlIik7CisgIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKKworICAvKiBpZiBhIG5ldyBzdGF0ZSBjaGFuZ2UgaGFwcGVuZWQgYWZ0ZXIgdGhpcyB0aHJlYWQgd2FzIHNjaGVkdWxlZCwgd2UgcmV0dXJuCisgICAqIGltbWVkaWF0ZWx5LiAqLworICBpZiAoZGF0YS0+Y29va2llICE9IEdTVF9FTEVNRU5UX0NBU1QgKGJpbiktPnN0YXRlX2Nvb2tpZSkKKyAgICBnb3RvIGludGVycnVwdGVkOworCisgIGN1cnJlbnQgPSBHU1RfU1RBVEUgKGJpbik7CisgIG5leHQgPSBHU1RfU1RBVEVfR0VUX05FWFQgKGN1cnJlbnQsIHBlbmRpbmcpOworICB0cmFuc2l0aW9uID0gKEdzdFN0YXRlQ2hhbmdlKSBHU1RfU1RBVEVfVFJBTlNJVElPTiAoY3VycmVudCwgbmV4dCk7CisKKyAgR1NUX1NUQVRFX05FWFQgKGJpbikgPSBuZXh0OworICBHU1RfU1RBVEVfUEVORElORyAoYmluKSA9IHBlbmRpbmc7CisgIC8qIG1hcmsgYnVzeSAqLworICBHU1RfU1RBVEVfUkVUVVJOIChiaW4pID0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQzsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7CisKKyAgR1NUX0NBVF9JTkZPX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGJpbiwKKyAgICAgICJjb250aW51ZSBzdGF0ZSBjaGFuZ2UgJXMgdG8gJXMsIGZpbmFsICVzIiwKKyAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChjdXJyZW50KSwKKyAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChuZXh0KSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKHBlbmRpbmcpKTsKKworICBnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUgKEdTVF9FTEVNRU5UX0NBU1QgKGJpbiksIHRyYW5zaXRpb24pOworCisgIEdTVF9TVEFURV9VTkxPQ0sgKGJpbik7CisgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgInN0YXRlIGNvbnRpbnVlIGRvbmUiKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChiaW4pOworICBnX3NsaWNlX2ZyZWUgKEJpbkNvbnRpbnVlRGF0YSwgZGF0YSk7CisgIHJldHVybjsKKworaW50ZXJydXB0ZWQ6CisgIHsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKKyAgICBHU1RfU1RBVEVfVU5MT0NLIChiaW4pOworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgInN0YXRlIGNvbnRpbnVlIGFib3J0ZWQgZHVlIHRvIGludGVydmVuaW5nIGNoYW5nZSIpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKGJpbik7CisgICAgZ19zbGljZV9mcmVlIChCaW5Db250aW51ZURhdGEsIGRhdGEpOworICAgIHJldHVybjsKKyAgfQorfQorCitzdGF0aWMgR3N0QnVzU3luY1JlcGx5CitiaW5fYnVzX2hhbmRsZXIgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIEdzdEJpbiAqIGJpbikKK3sKKyAgR3N0QmluQ2xhc3MgKmJjbGFzczsKKworICBiY2xhc3MgPSBHU1RfQklOX0dFVF9DTEFTUyAoYmluKTsKKyAgaWYgKGJjbGFzcy0+aGFuZGxlX21lc3NhZ2UpCisgICAgYmNsYXNzLT5oYW5kbGVfbWVzc2FnZSAoYmluLCBtZXNzYWdlKTsKKyAgZWxzZQorICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKKworICByZXR1cm4gR1NUX0JVU19EUk9QOworfQorCitzdGF0aWMgdm9pZAorYmluX3B1c2hfc3RhdGVfY29udGludWUgKEJpbkNvbnRpbnVlRGF0YSAqIGRhdGEpCit7CisgIEdzdEJpbkNsYXNzICprbGFzczsKKyAgR3N0QmluICpiaW47CisKKyAgLyogcmVmIHdhcyB0YWtlbiAqLworICBiaW4gPSBkYXRhLT5iaW47CisgIGtsYXNzID0gR1NUX0JJTl9HRVRfQ0xBU1MgKGJpbik7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAicHVzaGluZyBjb250aW51ZSBvbiB0aHJlYWQgcG9vbCIpOworICBnX3RocmVhZF9wb29sX3B1c2ggKGtsYXNzLT5wb29sLCBkYXRhLCBOVUxMKTsKK30KKworLyogYW4gZWxlbWVudCBzdGFydGVkIGFuIGFzeW5jIHN0YXRlIGNoYW5nZSwgaWYgd2Ugd2VyZSBub3QgYnVzeSB3aXRoIGEgc3RhdGUKKyAqIGNoYW5nZSwgd2UgcGVyZm9ybSBhIGxvc3Qgc3RhdGUuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBPQkpFQ1QgbG9jay4KKyAqLworc3RhdGljIHZvaWQKK2Jpbl9oYW5kbGVfYXN5bmNfc3RhcnQgKEdzdEJpbiAqIGJpbikKK3sKKyAgR3N0U3RhdGUgb2xkX3N0YXRlLCBuZXdfc3RhdGU7CisgIGdib29sZWFuIHRvcGxldmVsOworICBHc3RNZXNzYWdlICphbWVzc2FnZSA9IE5VTEw7CisKKyAgaWYgKEdTVF9TVEFURV9SRVRVUk4gKGJpbikgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKQorICAgIGdvdG8gaGFkX2Vycm9yOworCisgIC8qIGdldCBvdXIgdG9wbGV2ZWwgc3RhdGUgKi8KKyAgdG9wbGV2ZWwgPSBCSU5fSVNfVE9QTEVWRUwgKGJpbik7CisKKyAgLyogcHJlcGFyZSBhbiBBU1lOQ19TVEFSVCBtZXNzYWdlLCB3ZSBhbHdheXMgcG9zdCB0aGUgc3RhcnQgbWVzc2FnZSBldmVuIGlmIHdlCisgICAqIGFyZSBidXN5IHdpdGggYSBzdGF0ZSBjaGFuZ2Ugb3Igd2hlbiB3ZSBhcmUgTk9fUFJFUk9MTC4gKi8KKyAgaWYgKCF0b3BsZXZlbCkKKyAgICAvKiBub24gdG9wbGV2ZWwgYmluLCBwcmVwYXJlIGFzeW5jLXN0YXJ0IGZvciB0aGUgcGFyZW50ICovCisgICAgYW1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfYXN5bmNfc3RhcnQgKEdTVF9PQkpFQ1RfQ0FTVCAoYmluKSk7CisKKyAgaWYgKGJpbi0+cG9sbGluZyB8fCBHU1RfU1RBVEVfUEVORElORyAoYmluKSAhPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HKQorICAgIGdvdG8gd2FzX2J1c3k7CisKKyAgLyogYXN5bmMgc3RhcnRzIGFyZSBpZ25vcmVkIHdoZW4gd2UgYXJlIE5PX1BSRVJPTEwgKi8KKyAgaWYgKEdTVF9TVEFURV9SRVRVUk4gKGJpbikgPT0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMKQorICAgIGdvdG8gd2FzX25vX3ByZXJvbGw7CisKKyAgb2xkX3N0YXRlID0gR1NUX1NUQVRFIChiaW4pOworCisgIC8qIHdoZW4gd2UgUExBWUlORyB3ZSBnbyBiYWNrIHRvIFBBVVNFRCwgd2hlbiBwcmVyb2xsIGhhcHBlbnMsIHdlIGdvIGJhY2sgdG8KKyAgICogUExBWUlORyBhZnRlciBvcHRpb25hbGx5IHJlZGlzdHJpYnV0aW5nIHRoZSBiYXNlX3RpbWUuICovCisgIGlmIChvbGRfc3RhdGUgPiBHU1RfU1RBVEVfUEFVU0VEKQorICAgIG5ld19zdGF0ZSA9IEdTVF9TVEFURV9QQVVTRUQ7CisgIGVsc2UKKyAgICBuZXdfc3RhdGUgPSBvbGRfc3RhdGU7CisKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBiaW4sCisgICAgICAibG9zdCBzdGF0ZSBvZiAlcywgbmV3ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKG9sZF9zdGF0ZSksCisgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAobmV3X3N0YXRlKSk7CisKKyAgR1NUX1NUQVRFIChiaW4pID0gbmV3X3N0YXRlOworICBHU1RfU1RBVEVfTkVYVCAoYmluKSA9IG5ld19zdGF0ZTsKKyAgR1NUX1NUQVRFX1BFTkRJTkcgKGJpbikgPSBuZXdfc3RhdGU7CisgIEdTVF9TVEFURV9SRVRVUk4gKGJpbikgPSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DOworICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKKworICAvKiBwb3N0IG1lc3NhZ2UgKi8KKyAgX3ByaXZfZ3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlZCAoR1NUX0VMRU1FTlRfQ0FTVCAoYmluKSwgbmV3X3N0YXRlLCBuZXdfc3RhdGUsCisgICAgICBuZXdfc3RhdGUpOworCitwb3N0X3N0YXJ0OgorICBpZiAoYW1lc3NhZ2UpIHsKKyAgICAvKiBwb3N0IG91ciBBU1lOQ19TVEFSVC4gKi8KKyAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJwb3N0aW5nIEFTWU5DX1NUQVJUIHRvIHBhcmVudCIpOworICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoYmluKSwgYW1lc3NhZ2UpOworICB9CisgIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKKworICByZXR1cm47CisKK2hhZF9lcnJvcjoKKyAgeworICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgYmluLCAid2UgaGFkIGFuIGVycm9yIik7CisgICAgcmV0dXJuOworICB9Cit3YXNfYnVzeToKKyAgeworICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgYmluLCAic3RhdGUgY2hhbmdlIGJ1c3kiKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKKyAgICBnb3RvIHBvc3Rfc3RhcnQ7CisgIH0KK3dhc19ub19wcmVyb2xsOgorICB7CisgICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBiaW4sICJpZ25vcmluZywgd2UgYXJlIE5PX1BSRVJPTEwiKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKKyAgICBnb3RvIHBvc3Rfc3RhcnQ7CisgIH0KK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBhc3luYyBlbGVtZW50cyBpbiB0aGUgYmluLiBXZQorICogcG9zdCBhIHN0YXRlIGNoYW5nZWQgbWVzc2FnZSBhbmQgYW4gQVNZTkNfRE9ORSBtZXNzYWdlLgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgT0JKRUNUIGxvY2suCisgKi8KK3N0YXRpYyB2b2lkCitiaW5faGFuZGxlX2FzeW5jX2RvbmUgKEdzdEJpbiAqIGJpbiwgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0LAorICAgIGdib29sZWFuIGZsYWdfcGVuZGluZywgZ2Jvb2xlYW4gcmVzZXRfdGltZSkKK3sKKyAgR3N0U3RhdGUgY3VycmVudCwgcGVuZGluZywgdGFyZ2V0OworICBHc3RTdGF0ZUNoYW5nZVJldHVybiBvbGRfcmV0OworICBHc3RTdGF0ZSBvbGRfc3RhdGUsIG9sZF9uZXh0OworICBnYm9vbGVhbiB0b3BsZXZlbCwgc3RhdGVfY2hhbmdlZCA9IEZBTFNFOworICBHc3RNZXNzYWdlICphbWVzc2FnZSA9IE5VTEw7CisgIEJpbkNvbnRpbnVlRGF0YSAqY29udCA9IE5VTEw7CisKKyAgaWYgKEdTVF9TVEFURV9SRVRVUk4gKGJpbikgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKQorICAgIGdvdG8gaGFkX2Vycm9yOworCisgIHBlbmRpbmcgPSBHU1RfU1RBVEVfUEVORElORyAoYmluKTsKKworICBpZiAoYmluLT5wb2xsaW5nKQorICAgIGdvdG8gd2FzX2J1c3k7CisKKyAgLyogY2hlY2sgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRvIGNvbW1pdCAqLworICBpZiAocGVuZGluZyA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HKQorICAgIGdvdG8gbm90aGluZ19wZW5kaW5nOworCisgIG9sZF9yZXQgPSBHU1RfU1RBVEVfUkVUVVJOIChiaW4pOworICBHU1RfU1RBVEVfUkVUVVJOIChiaW4pID0gcmV0OworCisgIC8qIG1vdmUgdG8gdGhlIG5leHQgdGFyZ2V0IHN0YXRlICovCisgIHRhcmdldCA9IEdTVF9TVEFURV9UQVJHRVQgKGJpbik7CisgIHBlbmRpbmcgPSBHU1RfU1RBVEVfUEVORElORyAoYmluKSA9IHRhcmdldDsKKworICBhbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19hc3luY19kb25lIChHU1RfT0JKRUNUX0NBU1QgKGJpbiksIHJlc2V0X3RpbWUpOworCisgIG9sZF9zdGF0ZSA9IEdTVF9TVEFURSAoYmluKTsKKyAgLyogdGhpcyBpcyB0aGUgc3RhdGUgd2Ugc2hvdWxkIGdvIHRvIG5leHQgKi8KKyAgb2xkX25leHQgPSBHU1RfU1RBVEVfTkVYVCAoYmluKTsKKworICBpZiAob2xkX25leHQgIT0gR1NUX1NUQVRFX1BMQVlJTkcpIHsKKyAgICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgYmluLAorICAgICAgICAiY29tbWl0dGluZyBzdGF0ZSBmcm9tICVzIHRvICVzLCBvbGQgcGVuZGluZyAlcyIsCisgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChvbGRfc3RhdGUpLAorICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAob2xkX25leHQpLAorICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAocGVuZGluZykpOworCisgICAgLyogdXBkYXRlIGN1cnJlbnQgc3RhdGUgKi8KKyAgICBjdXJyZW50ID0gR1NUX1NUQVRFIChiaW4pID0gb2xkX25leHQ7CisgIH0gZWxzZSB7CisgICAgR1NUX0NBVF9JTkZPX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGJpbiwKKyAgICAgICAgInNldHRpbmcgc3RhdGUgZnJvbSAlcyB0byAlcywgcGVuZGluZyAlcyIsCisgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChvbGRfc3RhdGUpLAorICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAob2xkX3N0YXRlKSwKKyAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKHBlbmRpbmcpKTsKKyAgICBjdXJyZW50ID0gb2xkX3N0YXRlOworICB9CisKKyAgLyogZ2V0IG91ciB0b3BsZXZlbCBzdGF0ZSAqLworICB0b3BsZXZlbCA9IEJJTl9JU19UT1BMRVZFTCAoYmluKTsKKworICAvKiBzZWUgaWYgd2UgcmVhY2hlZCB0aGUgZmluYWwgc3RhdGUuIElmIHdlIGFyZSBub3QgdG9wbGV2ZWwsIHdlIGFsc28gaGF2ZSB0bworICAgKiBzdG9wIGhlcmUsIHRoZSBwYXJlbnQgd2lsbCBjb250aW51ZSBvdXIgc3RhdGUuICovCisgIGlmICgocGVuZGluZyA9PSBjdXJyZW50KSB8fCAhdG9wbGV2ZWwpIHsKKyAgICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgYmluLAorICAgICAgICAiY29tcGxldGVkIHN0YXRlIGNoYW5nZSwgcGVuZGluZyBWT0lEIik7CisKKyAgICAvKiBtYXJrIFZPSUQgcGVuZGluZyAqLworICAgIHBlbmRpbmcgPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HOworICAgIEdTVF9TVEFURV9QRU5ESU5HIChiaW4pID0gcGVuZGluZzsKKyAgICBHU1RfU1RBVEVfTkVYVCAoYmluKSA9IEdTVF9TVEFURV9WT0lEX1BFTkRJTkc7CisgIH0gZWxzZSB7CisgICAgR1NUX0NBVF9JTkZPX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGJpbiwKKyAgICAgICAgImNvbnRpbnVlIHN0YXRlIGNoYW5nZSwgcGVuZGluZyAlcyIsCisgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChwZW5kaW5nKSk7CisKKyAgICBjb250ID0gZ19zbGljZV9uZXcgKEJpbkNvbnRpbnVlRGF0YSk7CisKKyAgICAvKiByZWYgdG8gdGhlIGJpbiAqLworICAgIGNvbnQtPmJpbiA9IGdzdF9vYmplY3RfcmVmIChiaW4pOworICAgIC8qIGNvb2tpZSB0byBkZXRlY3QgY29uY3VycmVudCBzdGF0ZSBjaGFuZ2UgKi8KKyAgICBjb250LT5jb29raWUgPSBHU1RfRUxFTUVOVF9DQVNUIChiaW4pLT5zdGF0ZV9jb29raWU7CisgICAgLyogcGVuZGluZyB0YXJnZXQgc3RhdGUgKi8KKyAgICBjb250LT5wZW5kaW5nID0gcGVuZGluZzsKKyAgICAvKiBtYXJrIGJ1c3kgKi8KKyAgICBHU1RfU1RBVEVfUkVUVVJOIChiaW4pID0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQzsKKyAgICBHU1RfU1RBVEVfTkVYVCAoYmluKSA9IEdTVF9TVEFURV9HRVRfTkVYVCAob2xkX3N0YXRlLCBwZW5kaW5nKTsKKyAgfQorCisgIGlmIChvbGRfbmV4dCAhPSBHU1RfU1RBVEVfUExBWUlORykgeworICAgIGlmIChvbGRfc3RhdGUgIT0gb2xkX25leHQgfHwgb2xkX3JldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKSB7CisgICAgICBzdGF0ZV9jaGFuZ2VkID0gVFJVRTsKKyAgICB9CisgIH0KKyAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7CisKKyAgaWYgKHN0YXRlX2NoYW5nZWQpIHsKKyAgICBfcHJpdl9nc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VkIChHU1RfRUxFTUVOVF9DQVNUIChiaW4pLCBvbGRfc3RhdGUsCisgICAgICAgIG9sZF9uZXh0LCBwZW5kaW5nKTsKKyAgfQorICBpZiAoYW1lc3NhZ2UpIHsKKyAgICAvKiBwb3N0IG91ciBjb21iaW5lZCBBU1lOQ19ET05FIHdoZW4gYWxsIGlzIEFTWU5DX0RPTkUuICovCisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAicG9zdGluZyBBU1lOQ19ET05FIHRvIHBhcmVudCIpOworICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoYmluKSwgYW1lc3NhZ2UpOworICB9CisKKyAgR1NUX09CSkVDVF9MT0NLIChiaW4pOworICBpZiAoY29udCkgeworICAgIC8qIHRvcGxldmVsLCBzdGFydCBjb250aW51ZSBzdGF0ZSAqLworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgImFsbCBhc3luYy1kb25lLCBzdGFydGluZyBzdGF0ZSBjb250aW51ZSIpOworICAgIGJpbl9wdXNoX3N0YXRlX2NvbnRpbnVlIChjb250KTsKKyAgfSBlbHNlIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJzdGF0ZSBjaGFuZ2UgY29tcGxldGUiKTsKKyAgICBHU1RfU1RBVEVfQlJPQURDQVNUIChiaW4pOworICB9CisgIHJldHVybjsKKworaGFkX2Vycm9yOgorICB7CisgICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBiaW4sICJ3ZSBoYWQgYW4gZXJyb3IiKTsKKyAgICByZXR1cm47CisgIH0KK3dhc19idXN5OgorICB7CisgICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBiaW4sICJzdGF0ZSBjaGFuZ2UgYnVzeSIpOworICAgIC8qIGlmIHdlIHdlcmUgYnVzeSB3aXRoIGEgc3RhdGUgY2hhbmdlIGFuZCB3ZSBhcmUgcmVxdWVzdGVkIHRvIGZsYWcgYQorICAgICAqIHBlbmRpbmcgYXN5bmMgZG9uZSwgd2UgZG8gc28gaGVyZSAqLworICAgIGlmIChmbGFnX3BlbmRpbmcpCisgICAgICBiaW4tPnByaXYtPnBlbmRpbmdfYXN5bmNfZG9uZSA9IFRSVUU7CisgICAgcmV0dXJuOworICB9Citub3RoaW5nX3BlbmRpbmc6CisgIHsKKyAgICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgYmluLCAibm90aGluZyBwZW5kaW5nIik7CisgICAgcmV0dXJuOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitiaW5fZG9fZW9zIChHc3RCaW4gKiBiaW4pCit7CisgIGd1aW50MzIgc2VxbnVtID0gMDsKKyAgZ2Jvb2xlYW4gZW9zOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKKyAgLyogSWYgYWxsIHNpbmtzIGFyZSBFT1MsIHdlJ3JlIGluIFBMQVlJTkcgYW5kIG5vIHN0YXRlIGNoYW5nZSBpcyBwZW5kaW5nCisgICAqIHdlIGZvcndhcmQgdGhlIEVPUyBtZXNzYWdlIHRvIHRoZSBwYXJlbnQgYmluIG9yIGFwcGxpY2F0aW9uCisgICAqLworICBlb3MgPSBHU1RfU1RBVEUgKGJpbikgPT0gR1NUX1NUQVRFX1BMQVlJTkcKKyAgICAgICYmIEdTVF9TVEFURV9QRU5ESU5HIChiaW4pID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcKKyAgICAgICYmIGlzX2VvcyAoYmluLCAmc2VxbnVtKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7CisKKyAgaWYgKGVvcworICAgICAgJiYgZ19hdG9taWNfaW50X2NvbXBhcmVfYW5kX2V4Y2hhbmdlICgmYmluLT5wcml2LT5wb3N0ZWRfZW9zLCBGQUxTRSwKKyAgICAgICAgICBUUlVFKSkgeworICAgIEdzdE1lc3NhZ2UgKnRtZXNzYWdlOworICAgIHRtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2VvcyAoR1NUX09CSkVDVF9DQVNUIChiaW4pKTsKKyAgICBnc3RfbWVzc2FnZV9zZXRfc2VxbnVtICh0bWVzc2FnZSwgc2VxbnVtKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sCisgICAgICAgICJhbGwgc2lua3MgcG9zdGVkIEVPUywgcG9zdGluZyBzZXFudW0gIyUiIEdfR1VJTlQzMl9GT1JNQVQsIHNlcW51bSk7CisgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChiaW4pLCB0bWVzc2FnZSk7CisgIH0KK30KKworLyogbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgb2JqZWN0IGxvY2suIFRoaXMgZnVuY3Rpb24gcmVsZWFzZXMgdGhlIGxvY2sgdG8gcG9zdAorICogdGhlIG1lc3NhZ2UuICovCitzdGF0aWMgdm9pZAorYmluX2RvX21lc3NhZ2VfZm9yd2FyZCAoR3N0QmluICogYmluLCBHc3RNZXNzYWdlICogbWVzc2FnZSkKK3sKKyAgaWYgKGJpbi0+cHJpdi0+bWVzc2FnZV9mb3J3YXJkKSB7CisgICAgR3N0TWVzc2FnZSAqZm9yd2FyZGVkOworCisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAicGFzcyAlcyBtZXNzYWdlIHVwd2FyZCIsCisgICAgICAgIEdTVF9NRVNTQUdFX1RZUEVfTkFNRSAobWVzc2FnZSkpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOworCisgICAgLyogd2UgbmVlZCB0byBjb252ZXJ0IHRoZXNlIG1lc3NhZ2VzIHRvIGVsZW1lbnQgbWVzc2FnZXMgc28gdGhhdCBvdXIgcGFyZW50CisgICAgICogYmluIGNhbiBlYXNpbHkgaWdub3JlIHRoZW0gYW5kIHNvIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGNhbiBlYXNpbHkKKyAgICAgKiBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSBpbnRlcm5hbGx5IGZvcndhcmRlZCBhbmQgdGhlIHJlYWwgbWVzc2FnZXMuICovCisgICAgZm9yd2FyZGVkID0gZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQgKEdTVF9PQkpFQ1RfQ0FTVCAoYmluKSwKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9uZXcgKCJHc3RCaW5Gb3J3YXJkZWQiLAorICAgICAgICAgICAgIm1lc3NhZ2UiLCBHU1RfVFlQRV9NRVNTQUdFLCBtZXNzYWdlLCBOVUxMKSk7CisKKyAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKGJpbiksIGZvcndhcmRlZCk7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sgKGJpbik7CisgIH0KK30KKworLyogaGFuZGxlIGNoaWxkIG1lc3NhZ2VzOgorICoKKyAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBzeW5jaHJvbm91c2x5IHdoZW4gYSBjaGlsZCBwb3N0cyBhIG1lc3NhZ2Ugb24KKyAqIHRoZSBpbnRlcm5hbCBidXMuCisgKgorICogR1NUX01FU1NBR0VfRU9TOiBUaGlzIG1lc3NhZ2UgaXMgb25seSBwb3N0ZWQgYnkgc2lua3MKKyAqICAgICBpbiB0aGUgUExBWUlORyBzdGF0ZS4gSWYgYWxsIHNpbmtzIHBvc3RlZCB0aGUgRU9TIG1lc3NhZ2UsIHBvc3QKKyAqICAgICBvbmUgdXB3YXJkcy4KKyAqCisgKiBHU1RfTUVTU0FHRV9TVEFURV9ESVJUWTogRGVwcmVjYXRlZAorICoKKyAqIEdTVF9NRVNTQUdFX1NFR01FTlRfU1RBUlQ6IGp1c3QgY29sbGVjdCwgbmV2ZXIgZm9yd2FyZCB1cHdhcmRzLiBJZiBhbgorICogICAgIGVsZW1lbnQgcG9zdHMgc2VnbWVudF9zdGFydCB0d2ljZSwgb25seSB0aGUgbGFzdCBtZXNzYWdlIGlzIGtlcHQuCisgKgorICogR1NUX01FU1NBR0VfU0VHTUVOVF9ET05FOiByZXBsYWNlIFNFR01FTlRfU1RBUlQgbWVzc2FnZSBmcm9tIHNhbWUgcG9zdGVyCisgKiAgICAgd2l0aCB0aGUgc2VnbWVudF9kb25lIG1lc3NhZ2UuIElmIHRoZXJlIGFyZSBubyBtb3JlIHNlZ21lbnRfc3RhcnQKKyAqICAgICBtZXNzYWdlcywgcG9zdCBzZWdtZW50X2RvbmUgbWVzc2FnZSB1cHdhcmRzLgorICoKKyAqIEdTVF9NRVNTQUdFX0RVUkFUSU9OOiByZW1vdmUgYWxsIHByZXZpb3VzbHkgY2FjaGVkIGR1cmF0aW9uIG1lc3NhZ2VzLgorICogICAgIFdoZW5ldmVyIHNvbWVvbmUgcGVyZm9ybXMgYSBkdXJhdGlvbiBxdWVyeSBvbiB0aGUgYmluLCB3ZSBzdG9yZSB0aGUKKyAqICAgICByZXN1bHQgc28gd2UgY2FuIGFuc3dlciBpdCBxdWlja2VyIHRoZSBuZXh0IHRpbWUuIEFueSBlbGVtZW50IHRoYXQKKyAqICAgICBjaGFuZ2VzIGl0cyBkdXJhdGlvbiBtYXJrcyBvdXIgY2FjaGVkIHZhbHVlcyBpbnZhbGlkLgorICogICAgIFRoaXMgbWVzc2FnZSBpcyBhbHNvIHBvc3RlZCB1cHdhcmRzLiBUaGlzIGlzIGN1cnJlbnRseSBkaXNhYmxlZAorICogICAgIGJlY2F1c2UgdG9vIG1hbnkgZWxlbWVudHMgZG9uJ3QgcG9zdCBEVVJBVElPTiBtZXNzYWdlcyB3aGVuIHRoZQorICogICAgIGR1cmF0aW9uIGNoYW5nZXMuCisgKgorICogR1NUX01FU1NBR0VfQ0xPQ0tfTE9TVDogVGhpcyBtZXNzYWdlIGlzIHBvc3RlZCBieSBhbiBlbGVtZW50IHdoZW4gaXQKKyAqICAgICBjYW4gbm8gbG9uZ2VyIHByb3ZpZGUgYSBjbG9jay4gVGhlIGRlZmF1bHQgYmluIGJlaGF2aW91ciBpcyB0bworICogICAgIGNoZWNrIGlmIHRoZSBsb3N0IGNsb2NrIHdhcyB0aGUgb25lIHByb3ZpZGVkIGJ5IHRoZSBiaW4uIElmIHNvIGFuZAorICogICAgIHdlIGFyZSBjdXJyZW50bHkgaW4gdGhlIFBMQVlJTkcgc3RhdGUsIHdlIGZvcndhcmQgdGhlIG1lc3NhZ2UgdG8KKyAqICAgICBvdXIgcGFyZW50LgorICogICAgIFRoaXMgbWVzc2FnZSBpcyBhbHNvIGdlbmVyYXRlZCB3aGVuIHdlIHJlbW92ZSBhIGNsb2NrIHByb3ZpZGVyIGZyb20KKyAqICAgICBhIGJpbi4gSWYgdGhpcyBtZXNzYWdlIGlzIHJlY2VpdmVkIGJ5IHRoZSBhcHBsaWNhdGlvbiwgaXQgc2hvdWxkCisgKiAgICAgUEFVU0UgdGhlIHBpcGVsaW5lIGFuZCBzZXQgaXQgYmFjayB0byBQTEFZSU5HIHRvIGZvcmNlIGEgbmV3IGNsb2NrCisgKiAgICAgYW5kIGEgbmV3IGJhc2VfdGltZSBkaXN0cmlidXRpb24uCisgKgorICogR1NUX01FU1NBR0VfQ0xPQ0tfUFJPVklERTogVGhpcyBtZXNzYWdlIGlzIGdlbmVyYXRlZCB3aGVuIGFuIGVsZW1lbnQKKyAqICAgICBjYW4gcHJvdmlkZSBhIGNsb2NrLiBUaGlzIG1vc3RseSBoYXBwZW5zIHdoZW4gd2UgYWRkIGEgbmV3IGNsb2NrCisgKiAgICAgcHJvdmlkZXIgdG8gdGhlIGJpbi4gVGhlIGRlZmF1bHQgYmVoYXZpb3VyIG9mIHRoZSBiaW4gaXMgdG8gbWFyayB0aGUKKyAqICAgICBjdXJyZW50bHkgc2VsZWN0ZWQgY2xvY2sgYXMgZGlydHksIHdoaWNoIHdpbGwgcGVyZm9ybSBhIGNsb2NrCisgKiAgICAgcmVjYWxjdWxhdGlvbiB0aGUgbmV4dCB0aW1lIHdlIGFyZSBhc2tlZCB0byBwcm92aWRlIGEgY2xvY2suCisgKiAgICAgVGhpcyBtZXNzYWdlIGlzIG5ldmVyIHNlbnQgdG8gdGhlIGFwcGxpY2F0aW9uIGJ1dCBpcyBmb3J3YXJkZWQgdG8KKyAqICAgICB0aGUgcGFyZW50LgorICoKKyAqIEdTVF9NRVNTQUdFX0FTWU5DX1NUQVJUOiBDcmVhdGUgYW4gaW50ZXJuYWwgRUxFTUVOVCBtZXNzYWdlIHRoYXQgc3RvcmVzCisgKiAgICAgdGhlIHN0YXRlIG9mIHRoZSBlbGVtZW50IGFuZCB0aGUgZmFjdCB0aGF0IHRoZSBlbGVtZW50IHdpbGwgbmVlZCBhCisgKiAgICAgbmV3IGJhc2VfdGltZS4gVGhpcyBtZXNzYWdlIGlzIG5vdCBmb3J3YXJkZWQgdG8gdGhlIGFwcGxpY2F0aW9uLgorICoKKyAqIEdTVF9NRVNTQUdFX0FTWU5DX0RPTkU6IEZpbmQgdGhlIGludGVybmFsIEVMRU1FTlQgbWVzc2FnZSB3ZSBrZXB0IGZvciB0aGUKKyAqICAgICBlbGVtZW50IHdoZW4gaXQgcG9zdGVkIEFTWU5DX1NUQVJULiBJZiBhbGwgZWxlbWVudHMgYXJlIGRvbmUsIHBvc3QgYQorICogICAgIEFTWU5DX0RPTkUgbWVzc2FnZSB0byB0aGUgcGFyZW50LgorICoKKyAqIE9USEVSOiBwb3N0IHVwd2FyZHMuCisgKi8KK3N0YXRpYyB2b2lkCitnc3RfYmluX2hhbmRsZV9tZXNzYWdlX2Z1bmMgKEdzdEJpbiAqIGJpbiwgR3N0TWVzc2FnZSAqIG1lc3NhZ2UpCit7CisgIEdzdE9iamVjdCAqc3JjOworICBHc3RNZXNzYWdlVHlwZSB0eXBlOworICBHc3RNZXNzYWdlICp0bWVzc2FnZTsKKyAgZ3VpbnQzMiBzZXFudW07CisKKyAgc3JjID0gR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKTsKKyAgdHlwZSA9IEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgIlttc2cgJXBdIGhhbmRsaW5nIGNoaWxkICVzIG1lc3NhZ2Ugb2YgdHlwZSAlcyIsCisgICAgICBtZXNzYWdlLCBzcmMgPyBHU1RfRUxFTUVOVF9OQU1FIChzcmMpIDogIihOVUxMKSIsCisgICAgICBHU1RfTUVTU0FHRV9UWVBFX05BTUUgKG1lc3NhZ2UpKTsKKworICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOgorICAgIHsKKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKKyAgICAgIC8qIGZsYWcgZXJyb3IgKi8KKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgImdvdCBFUlJPUiBtZXNzYWdlLCB1bmxvY2tpbmcgc3RhdGUgY2hhbmdlIik7CisgICAgICBHU1RfU1RBVEVfUkVUVVJOIChiaW4pID0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOworICAgICAgR1NUX1NUQVRFX0JST0FEQ0FTVCAoYmluKTsKKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOworCisgICAgICBnb3RvIGZvcndhcmQ7CisgICAgfQorICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOgorICAgIHsKKworICAgICAgLyogY29sbGVjdCBhbGwgZW9zIG1lc3NhZ2VzIGZyb20gdGhlIGNoaWxkcmVuICovCisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGJpbik7CisgICAgICBiaW5fZG9fbWVzc2FnZV9mb3J3YXJkIChiaW4sIG1lc3NhZ2UpOworICAgICAgLyogcmVmIG1lc3NhZ2UgZm9yIGZ1dHVyZSB1c2UgICovCisgICAgICBiaW5fcmVwbGFjZV9tZXNzYWdlIChiaW4sIG1lc3NhZ2UsIEdTVF9NRVNTQUdFX0VPUyk7CisgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKKworICAgICAgYmluX2RvX2VvcyAoYmluKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9NRVNTQUdFX1NUQVRFX0RJUlRZOgorICAgIHsKKyAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYmluLCAicmVjZWl2ZWQgZGVwcmVjYXRlZCBTVEFURV9ESVJUWSBtZXNzYWdlIik7CisKKyAgICAgIC8qIGZyZWUgbWVzc2FnZSAqLworICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX01FU1NBR0VfU0VHTUVOVF9TVEFSVDp7CisgICAgICBnYm9vbGVhbiBwb3N0ID0gRkFMU0U7CisgICAgICBHc3RGb3JtYXQgZm9ybWF0OworICAgICAgZ2ludDY0IHBvc2l0aW9uOworCisgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9zZWdtZW50X3N0YXJ0IChtZXNzYWdlLCAmZm9ybWF0LCAmcG9zaXRpb24pOworICAgICAgc2VxbnVtID0gZ3N0X21lc3NhZ2VfZ2V0X3NlcW51bSAobWVzc2FnZSk7CisKKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKKyAgICAgIGJpbl9kb19tZXNzYWdlX2ZvcndhcmQgKGJpbiwgbWVzc2FnZSk7CisgICAgICAvKiBpZiB0aGlzIGlzIHRoZSBmaXJzdCBzZWdtZW50LXN0YXJ0LCBwb3N0IHRvIHBhcmVudCBidXQgbm90IHRvIHRoZQorICAgICAgICogYXBwbGljYXRpb24gKi8KKyAgICAgIGlmICghZmluZF9tZXNzYWdlIChiaW4sIE5VTEwsIEdTVF9NRVNTQUdFX1NFR01FTlRfU1RBUlQpICYmCisgICAgICAgICAgKEdTVF9PQkpFQ1RfUEFSRU5UIChiaW4pICE9IE5VTEwpKSB7CisgICAgICAgIHBvc3QgPSBUUlVFOworICAgICAgfQorICAgICAgLyogcmVwbGFjZSBhbnkgcHJldmlvdXMgc2VnbWVudF9zdGFydCBtZXNzYWdlIGZyb20gdGhpcyBzb3VyY2UKKyAgICAgICAqIHdpdGggdGhlIG5ldyBzZWdtZW50IHN0YXJ0IG1lc3NhZ2UgKi8KKyAgICAgIGJpbl9yZXBsYWNlX21lc3NhZ2UgKGJpbiwgbWVzc2FnZSwgR1NUX01FU1NBR0VfU0VHTUVOVF9TVEFSVCk7CisgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKKyAgICAgIGlmIChwb3N0KSB7CisgICAgICAgIHRtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfc3RhcnQgKEdTVF9PQkpFQ1RfQ0FTVCAoYmluKSwKKyAgICAgICAgICAgIGZvcm1hdCwgcG9zaXRpb24pOworICAgICAgICBnc3RfbWVzc2FnZV9zZXRfc2VxbnVtICh0bWVzc2FnZSwgc2VxbnVtKTsKKworICAgICAgICAvKiBwb3N0IHNlZ21lbnQgc3RhcnQgd2l0aCBpbml0aWFsIGZvcm1hdCBhbmQgcG9zaXRpb24uICovCisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgInBvc3RpbmcgU0VHTUVOVF9TVEFSVCAoJXUpIGJ1cyBtZXNzYWdlOiAlcCIsCisgICAgICAgICAgICBzZXFudW0sIG1lc3NhZ2UpOworICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKGJpbiksIHRtZXNzYWdlKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9NRVNTQUdFX1NFR01FTlRfRE9ORToKKyAgICB7CisgICAgICBnYm9vbGVhbiBwb3N0ID0gRkFMU0U7CisgICAgICBHc3RGb3JtYXQgZm9ybWF0OworICAgICAgZ2ludDY0IHBvc2l0aW9uOworCisgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9zZWdtZW50X2RvbmUgKG1lc3NhZ2UsICZmb3JtYXQsICZwb3NpdGlvbik7CisgICAgICBzZXFudW0gPSBnc3RfbWVzc2FnZV9nZXRfc2VxbnVtIChtZXNzYWdlKTsKKworICAgICAgR1NUX09CSkVDVF9MT0NLIChiaW4pOworICAgICAgYmluX2RvX21lc3NhZ2VfZm9yd2FyZCAoYmluLCBtZXNzYWdlKTsKKyAgICAgIGJpbl9yZXBsYWNlX21lc3NhZ2UgKGJpbiwgbWVzc2FnZSwgR1NUX01FU1NBR0VfU0VHTUVOVF9TVEFSVCk7CisgICAgICAvKiBpZiB0aGVyZSBhcmUgbm8gbW9yZSBzZWdtZW50X3N0YXJ0IG1lc3NhZ2VzLCBldmVyeWJvZHkgcG9zdGVkCisgICAgICAgKiBhIHNlZ21lbnRfZG9uZSBhbmQgd2UgY2FuIHBvc3Qgb25lIG9uIHRoZSBidXMuICovCisKKyAgICAgIC8qIHdlIGRvbid0IGNhcmUgd2hvIHN0aWxsIGhhcyBhIHBlbmRpbmcgc2VnbWVudCBzdGFydCAqLworICAgICAgaWYgKCFmaW5kX21lc3NhZ2UgKGJpbiwgTlVMTCwgR1NUX01FU1NBR0VfU0VHTUVOVF9TVEFSVCkpIHsKKyAgICAgICAgLyogbm90aGluZyBmb3VuZCAqLworICAgICAgICBwb3N0ID0gVFJVRTsKKyAgICAgICAgLyogcmVtb3ZlIGFsbCBvbGQgc2VnbWVudF9kb25lIG1lc3NhZ2VzICovCisgICAgICAgIGJpbl9yZW1vdmVfbWVzc2FnZXMgKGJpbiwgTlVMTCwgR1NUX01FU1NBR0VfU0VHTUVOVF9ET05FKTsKKyAgICAgIH0KKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOworICAgICAgaWYgKHBvc3QpIHsKKyAgICAgICAgdG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lIChHU1RfT0JKRUNUX0NBU1QgKGJpbiksCisgICAgICAgICAgICBmb3JtYXQsIHBvc2l0aW9uKTsKKyAgICAgICAgZ3N0X21lc3NhZ2Vfc2V0X3NlcW51bSAodG1lc3NhZ2UsIHNlcW51bSk7CisKKyAgICAgICAgLyogcG9zdCBzZWdtZW50IGRvbmUgd2l0aCBsYXRlc3QgZm9ybWF0IGFuZCBwb3NpdGlvbi4gKi8KKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAicG9zdGluZyBTRUdNRU5UX0RPTkUgKCV1KSBidXMgbWVzc2FnZTogJXAiLAorICAgICAgICAgICAgc2VxbnVtLCBtZXNzYWdlKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChiaW4pLCB0bWVzc2FnZSk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfTUVTU0FHRV9EVVJBVElPTjoKKyAgICB7CisgICAgICAvKiByZW1vdmUgYWxsIGNhY2hlZCBkdXJhdGlvbiBtZXNzYWdlcywgbmV4dCB0aW1lIHNvbWVib2R5IGFza3MKKyAgICAgICAqIGZvciBkdXJhdGlvbiwgd2Ugd2lsbCByZWNhbGN1bGF0ZS4gKi8KKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKKyAgICAgIGJpbl9yZW1vdmVfbWVzc2FnZXMgKGJpbiwgTlVMTCwgR1NUX01FU1NBR0VfRFVSQVRJT04pOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7CisgICAgICBnb3RvIGZvcndhcmQ7CisgICAgfQorICAgIGNhc2UgR1NUX01FU1NBR0VfQ0xPQ0tfTE9TVDoKKyAgICB7CisgICAgICBHc3RDbG9jayAqKnByb3ZpZGVkX2Nsb2NrX3A7CisgICAgICBHc3RFbGVtZW50ICoqY2xvY2tfcHJvdmlkZXJfcDsKKyAgICAgIGdib29sZWFuIHBsYXlpbmcsIHByb3ZpZGVkLCBmb3J3YXJkOworICAgICAgR3N0Q2xvY2sgKmNsb2NrOworCisgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9jbG9ja19sb3N0IChtZXNzYWdlLCAmY2xvY2spOworCisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGJpbik7CisgICAgICBiaW4tPmNsb2NrX2RpcnR5ID0gVFJVRTsKKyAgICAgIC8qIGlmIHdlIGxvc3QgdGhlIGNsb2NrIHRoYXQgd2UgcHJvdmlkZWQsIHBvc3QgdG8gcGFyZW50IGJ1dAorICAgICAgICogb25seSBpZiB3ZSBhcmUgUExBWUlORy4gKi8KKyAgICAgIHByb3ZpZGVkID0gKGNsb2NrID09IGJpbi0+cHJvdmlkZWRfY2xvY2spOworICAgICAgcGxheWluZyA9IChHU1RfU1RBVEUgKGJpbikgPT0gR1NUX1NUQVRFX1BMQVlJTkcpOworICAgICAgZm9yd2FyZCA9IHBsYXlpbmcgJiBwcm92aWRlZDsKKyAgICAgIGlmIChwcm92aWRlZCkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sCisgICAgICAgICAgICAiTG9zdCBjbG9jayAlIiBHU1RfUFRSX0ZPUk1BVCAiIHByb3ZpZGVkIGJ5ICUiIEdTVF9QVFJfRk9STUFULAorICAgICAgICAgICAgYmluLT5wcm92aWRlZF9jbG9jaywgYmluLT5jbG9ja19wcm92aWRlcik7CisgICAgICAgIHByb3ZpZGVkX2Nsb2NrX3AgPSAmYmluLT5wcm92aWRlZF9jbG9jazsKKyAgICAgICAgY2xvY2tfcHJvdmlkZXJfcCA9ICZiaW4tPmNsb2NrX3Byb3ZpZGVyOworICAgICAgICBnc3Rfb2JqZWN0X3JlcGxhY2UgKChHc3RPYmplY3QgKiopIHByb3ZpZGVkX2Nsb2NrX3AsIE5VTEwpOworICAgICAgICBnc3Rfb2JqZWN0X3JlcGxhY2UgKChHc3RPYmplY3QgKiopIGNsb2NrX3Byb3ZpZGVyX3AsIE5VTEwpOworICAgICAgfQorICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAicHJvdmlkZWQgJWQsIHBsYXlpbmcgJWQsIGZvcndhcmQgJWQiLAorICAgICAgICAgIHByb3ZpZGVkLCBwbGF5aW5nLCBmb3J3YXJkKTsKKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOworCisgICAgICBpZiAoZm9yd2FyZCkKKyAgICAgICAgZ290byBmb3J3YXJkOworCisgICAgICAvKiBmcmVlIG1lc3NhZ2UgKi8KKyAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9NRVNTQUdFX0NMT0NLX1BST1ZJREU6CisgICAgeworICAgICAgZ2Jvb2xlYW4gZm9yd2FyZDsKKworICAgICAgR1NUX09CSkVDVF9MT0NLIChiaW4pOworICAgICAgYmluLT5jbG9ja19kaXJ0eSA9IFRSVUU7CisgICAgICAvKiBhIG5ldyBjbG9jayBpcyBhdmFpbGFibGUsIHBvc3QgdG8gcGFyZW50IGJ1dCBub3QKKyAgICAgICAqIHRvIHRoZSBhcHBsaWNhdGlvbiAqLworICAgICAgZm9yd2FyZCA9IEdTVF9PQkpFQ1RfUEFSRU5UIChiaW4pICE9IE5VTEw7CisgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKKworICAgICAgaWYgKGZvcndhcmQpCisgICAgICAgIGdvdG8gZm9yd2FyZDsKKworICAgICAgLyogZnJlZSBtZXNzYWdlICovCisgICAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfTUVTU0FHRV9BU1lOQ19TVEFSVDoKKyAgICB7CisgICAgICBHc3RTdGF0ZSB0YXJnZXQ7CisKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgIkFTWU5DX1NUQVJUIG1lc3NhZ2UgJXAsICVzIiwgbWVzc2FnZSwKKyAgICAgICAgICBzcmMgPyBHU1RfT0JKRUNUX05BTUUgKHNyYykgOiAiKE5VTEwpIik7CisKKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKKyAgICAgIGJpbl9kb19tZXNzYWdlX2ZvcndhcmQgKGJpbiwgbWVzc2FnZSk7CisKKyAgICAgIC8qIHdlIGlnbm9yZSB0aGUgbWVzc2FnZSBpZiB3ZSBhcmUgZ29pbmcgdG8gPD0gUkVBRFkgKi8KKyAgICAgIGlmICgodGFyZ2V0ID0gR1NUX1NUQVRFX1RBUkdFVCAoYmluKSkgPD0gR1NUX1NUQVRFX1JFQURZKQorICAgICAgICBnb3RvIGlnbm9yZV9zdGFydF9tZXNzYWdlOworCisgICAgICAvKiB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIG1lc3NhZ2UgKi8KKyAgICAgIGJpbl9yZXBsYWNlX21lc3NhZ2UgKGJpbiwgbWVzc2FnZSwgR1NUX01FU1NBR0VfQVNZTkNfU1RBUlQpOworCisgICAgICBiaW5faGFuZGxlX2FzeW5jX3N0YXJ0IChiaW4pOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7CisgICAgICBicmVhazsKKworICAgIGlnbm9yZV9zdGFydF9tZXNzYWdlOgorICAgICAgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJpZ25vcmluZyBtZXNzYWdlLCB0YXJnZXQgJXMiLAorICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKHRhcmdldCkpOworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKKyAgICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgY2FzZSBHU1RfTUVTU0FHRV9BU1lOQ19ET05FOgorICAgIHsKKyAgICAgIGdib29sZWFuIHJlc2V0X3RpbWU7CisgICAgICBHc3RTdGF0ZSB0YXJnZXQ7CisKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgIkFTWU5DX0RPTkUgbWVzc2FnZSAlcCwgJXMiLCBtZXNzYWdlLAorICAgICAgICAgIHNyYyA/IEdTVF9PQkpFQ1RfTkFNRSAoc3JjKSA6ICIoTlVMTCkiKTsKKworICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfYXN5bmNfZG9uZSAobWVzc2FnZSwgJnJlc2V0X3RpbWUpOworCisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGJpbik7CisgICAgICBiaW5fZG9fbWVzc2FnZV9mb3J3YXJkIChiaW4sIG1lc3NhZ2UpOworCisgICAgICAvKiBpZ25vcmUgbWVzc2FnZXMgaWYgd2UgYXJlIHNodXR0aW5nIGRvd24gKi8KKyAgICAgIGlmICgodGFyZ2V0ID0gR1NUX1NUQVRFX1RBUkdFVCAoYmluKSkgPD0gR1NUX1NUQVRFX1JFQURZKQorICAgICAgICBnb3RvIGlnbm9yZV9kb25lX21lc3NhZ2U7CisKKyAgICAgIGJpbl9yZXBsYWNlX21lc3NhZ2UgKGJpbiwgbWVzc2FnZSwgR1NUX01FU1NBR0VfQVNZTkNfU1RBUlQpOworICAgICAgLyogaWYgdGhlcmUgYXJlIG5vIG1vcmUgQVNZTkNfU1RBUlQgbWVzc2FnZXMsIGV2ZXJ5Ym9keSBwb3N0ZWQKKyAgICAgICAqIGEgQVNZTkNfRE9ORSBhbmQgd2UgY2FuIHBvc3Qgb25lIG9uIHRoZSBidXMuIFdoZW4gY2hlY2tpbmcsIHdlCisgICAgICAgKiBkb24ndCBjYXJlIHdobyBzdGlsbCBoYXMgYSBwZW5kaW5nIEFTWU5DX1NUQVJUICovCisgICAgICBpZiAoIWZpbmRfbWVzc2FnZSAoYmluLCBOVUxMLCBHU1RfTUVTU0FHRV9BU1lOQ19TVEFSVCkpIHsKKyAgICAgICAgLyogbm90aGluZyBmb3VuZCwgcmVtb3ZlIGFsbCBvbGQgQVNZTkNfRE9ORSBtZXNzYWdlcyAqLworICAgICAgICBiaW5fcmVtb3ZlX21lc3NhZ2VzIChiaW4sIE5VTEwsIEdTVF9NRVNTQUdFX0FTWU5DX0RPTkUpOworCisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgImFzeW5jIGVsZW1lbnRzIGNvbW1pdGVkIik7CisgICAgICAgIC8qIHdoZW4gd2UgZ2V0IGFuIGFzeW5jIGRvbmUgbWVzc2FnZSB3aGVuIGEgc3RhdGUgY2hhbmdlIHdhcyBidXN5LCB3ZQorICAgICAgICAgKiBuZWVkIHRvIHNldCB0aGUgcGVuZGluZ19kb25lIGZsYWcgc28gdGhhdCBhdCB0aGUgZW5kIG9mIHRoZSBzdGF0ZQorICAgICAgICAgKiBjaGFuZ2Ugd2UgY2FuIHNlZSBpZiB3ZSBuZWVkIHRvIHZlcmlmeSBwZW5kaW5nIGFzeW5jIGVsZW1lbnRzLCBoZW5jZQorICAgICAgICAgKiB0aGUgVFJVRSBhcmd1bWVudCBoZXJlLiAqLworICAgICAgICBiaW5faGFuZGxlX2FzeW5jX2RvbmUgKGJpbiwgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCBUUlVFLCByZXNldF90aW1lKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgInRoZXJlIGFyZSBtb3JlIGFzeW5jIGVsZW1lbnRzIHBlbmRpbmciKTsKKyAgICAgIH0KKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOworICAgICAgYnJlYWs7CisKKyAgICBpZ25vcmVfZG9uZV9tZXNzYWdlOgorICAgICAgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJpZ25vcmluZyBtZXNzYWdlLCB0YXJnZXQgJXMiLAorICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKHRhcmdldCkpOworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKKyAgICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgY2FzZSBHU1RfTUVTU0FHRV9TVFJVQ1RVUkVfQ0hBTkdFOgorICAgIHsKKyAgICAgIGdib29sZWFuIGJ1c3k7CisKKyAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0cnVjdHVyZV9jaGFuZ2UgKG1lc3NhZ2UsIE5VTEwsIE5VTEwsICZidXN5KTsKKworICAgICAgR1NUX09CSkVDVF9MT0NLIChiaW4pOworICAgICAgaWYgKGJ1c3kpIHsKKyAgICAgICAgLyogd2hpbGUgdGhlIHBhZCBpcyBidXN5LCBhdm9pZCBmb2xsb3dpbmcgaXQgd2hlbiBkb2luZyBzdGF0ZSBjaGFuZ2VzLgorICAgICAgICAgKiBEb24ndCB1cGRhdGUgdGhlIGNvb2tpZSB5ZXQsIHdlIHdpbGwgZG8gdGhhdCBhZnRlciB0aGUgc3RydWN0dXJlCisgICAgICAgICAqIGNoYW5nZSBmaW5pc2hlZCBhbmQgd2UgYXJlIHJlYWR5IHRvIGluc3BlY3QgdGhlIG5ldyB1cGRhdGVkCisgICAgICAgICAqIHN0cnVjdHVyZS4gKi8KKyAgICAgICAgYmluX3JlcGxhY2VfbWVzc2FnZSAoYmluLCBtZXNzYWdlLCBHU1RfTUVTU0FHRV9TVFJVQ1RVUkVfQ0hBTkdFKTsKKyAgICAgICAgbWVzc2FnZSA9IE5VTEw7CisgICAgICB9IGVsc2UgeworICAgICAgICAvKiBhIHBhZCBsaW5rL3VubGluayBlbmRlZCwgc2lnbmFsIHRoZSBzdGF0ZSBjaGFuZ2UgaXRlcmF0b3IgdGhhdCB3ZQorICAgICAgICAgKiBuZWVkIHRvIHJlc3luYyBieSB1cGRhdGluZyB0aGUgc3RydWN0dXJlX2Nvb2tpZS4gKi8KKyAgICAgICAgYmluX3JlbW92ZV9tZXNzYWdlcyAoYmluLCBHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpLAorICAgICAgICAgICAgR1NUX01FU1NBR0VfU1RSVUNUVVJFX0NIQU5HRSk7CisgICAgICAgIGJpbi0+cHJpdi0+c3RydWN0dXJlX2Nvb2tpZSsrOworICAgICAgfQorICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7CisKKyAgICAgIGlmIChtZXNzYWdlKQorICAgICAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7CisKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgZ290byBmb3J3YXJkOworICB9CisgIHJldHVybjsKKworZm9yd2FyZDoKKyAgeworICAgIC8qIFNlbmQgYWxsIG90aGVyIG1lc3NhZ2VzIHVwd2FyZCAqLworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgInBvc3RpbmcgbWVzc2FnZSB1cHdhcmQiKTsKKyAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKGJpbiksIG1lc3NhZ2UpOworICAgIHJldHVybjsKKyAgfQorfQorCisvKiBnZW5lcmljIHN0cnVjdCBwYXNzZWQgdG8gYWxsIHF1ZXJ5IGZvbGQgbWV0aG9kcyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgR3N0UXVlcnkgKnF1ZXJ5OworICBnaW50NjQgbWluOworICBnaW50NjQgbWF4OworICBnYm9vbGVhbiBsaXZlOworfSBRdWVyeUZvbGQ7CisKK3R5cGVkZWYgdm9pZCAoKlF1ZXJ5SW5pdEZ1bmN0aW9uKSAoR3N0QmluICogYmluLCBRdWVyeUZvbGQgKiBmb2xkKTsKK3R5cGVkZWYgdm9pZCAoKlF1ZXJ5RG9uZUZ1bmN0aW9uKSAoR3N0QmluICogYmluLCBRdWVyeUZvbGQgKiBmb2xkKTsKKworLyogZm9yIGR1cmF0aW9uL3Bvc2l0aW9uIHdlIGNvbGxlY3QgYWxsIGR1cmF0aW9ucy9wb3NpdGlvbnMgYW5kIHRha2UKKyAqIHRoZSBNQVggb2YgYWxsIHZhbGlkIHJlc3VsdHMgKi8KK3N0YXRpYyB2b2lkCitiaW5fcXVlcnlfbWluX21heF9pbml0IChHc3RCaW4gKiBiaW4sIFF1ZXJ5Rm9sZCAqIGZvbGQpCit7CisgIGZvbGQtPm1pbiA9IDA7CisgIGZvbGQtPm1heCA9IC0xOworICBmb2xkLT5saXZlID0gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorYmluX3F1ZXJ5X2R1cmF0aW9uX2ZvbGQgKGNvbnN0IEdWYWx1ZSAqIHZpdGVtLCBHVmFsdWUgKiByZXQsIFF1ZXJ5Rm9sZCAqIGZvbGQpCit7CisgIEdzdEVsZW1lbnQgKml0ZW0gPSBnX3ZhbHVlX2dldF9vYmplY3QgKHZpdGVtKTsKKworICBpZiAoZ3N0X2VsZW1lbnRfcXVlcnkgKGl0ZW0sIGZvbGQtPnF1ZXJ5KSkgeworICAgIGdpbnQ2NCBkdXJhdGlvbjsKKworICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHJldCwgVFJVRSk7CisKKyAgICBnc3RfcXVlcnlfcGFyc2VfZHVyYXRpb24gKGZvbGQtPnF1ZXJ5LCBOVUxMLCAmZHVyYXRpb24pOworCisgICAgR1NUX0RFQlVHX09CSkVDVCAoaXRlbSwgImdvdCBkdXJhdGlvbiAlIiBHX0dJTlQ2NF9GT1JNQVQsIGR1cmF0aW9uKTsKKworICAgIGlmIChkdXJhdGlvbiA+IGZvbGQtPm1heCkKKyAgICAgIGZvbGQtPm1heCA9IGR1cmF0aW9uOworICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkCitiaW5fcXVlcnlfZHVyYXRpb25fZG9uZSAoR3N0QmluICogYmluLCBRdWVyeUZvbGQgKiBmb2xkKQoreworICBHc3RGb3JtYXQgZm9ybWF0OworCisgIGdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbiAoZm9sZC0+cXVlcnksICZmb3JtYXQsIE5VTEwpOworICAvKiBzdG9yZSBtYXggaW4gcXVlcnkgcmVzdWx0ICovCisgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24gKGZvbGQtPnF1ZXJ5LCBmb3JtYXQsIGZvbGQtPm1heCk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAibWF4IGR1cmF0aW9uICUiIEdfR0lOVDY0X0ZPUk1BVCwgZm9sZC0+bWF4KTsKKworICAvKiBhbmQgY2FjaGUgbm93ICovCisgIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKKyAgYmluLT5tZXNzYWdlcyA9IGdfbGlzdF9wcmVwZW5kIChiaW4tPm1lc3NhZ2VzLAorICAgICAgZ3N0X21lc3NhZ2VfbmV3X2R1cmF0aW9uIChHU1RfT0JKRUNUX0NBU1QgKGJpbiksIGZvcm1hdCwgZm9sZC0+bWF4KSk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2Jpbl9xdWVyeV9wb3NpdGlvbl9mb2xkIChjb25zdCBHVmFsdWUgKiB2aXRlbSwgR1ZhbHVlICogcmV0LCBRdWVyeUZvbGQgKiBmb2xkKQoreworICBHc3RFbGVtZW50ICppdGVtID0gZ192YWx1ZV9nZXRfb2JqZWN0ICh2aXRlbSk7CisKKyAgaWYgKGdzdF9lbGVtZW50X3F1ZXJ5IChpdGVtLCBmb2xkLT5xdWVyeSkpIHsKKyAgICBnaW50NjQgcG9zaXRpb247CisKKyAgICBnX3ZhbHVlX3NldF9ib29sZWFuIChyZXQsIFRSVUUpOworCisgICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uIChmb2xkLT5xdWVyeSwgTlVMTCwgJnBvc2l0aW9uKTsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGl0ZW0sICJnb3QgcG9zaXRpb24gJSIgR19HSU5UNjRfRk9STUFULCBwb3NpdGlvbik7CisKKyAgICBpZiAocG9zaXRpb24gPiBmb2xkLT5tYXgpCisgICAgICBmb2xkLT5tYXggPSBwb3NpdGlvbjsKKyAgfQorCisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZAorYmluX3F1ZXJ5X3Bvc2l0aW9uX2RvbmUgKEdzdEJpbiAqIGJpbiwgUXVlcnlGb2xkICogZm9sZCkKK3sKKyAgR3N0Rm9ybWF0IGZvcm1hdDsKKworICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24gKGZvbGQtPnF1ZXJ5LCAmZm9ybWF0LCBOVUxMKTsKKyAgLyogc3RvcmUgbWF4IGluIHF1ZXJ5IHJlc3VsdCAqLworICBnc3RfcXVlcnlfc2V0X3Bvc2l0aW9uIChmb2xkLT5xdWVyeSwgZm9ybWF0LCBmb2xkLT5tYXgpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgIm1heCBwb3NpdGlvbiAlIiBHX0dJTlQ2NF9GT1JNQVQsIGZvbGQtPm1heCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorYmluX3F1ZXJ5X2xhdGVuY3lfZm9sZCAoY29uc3QgR1ZhbHVlICogdml0ZW0sIEdWYWx1ZSAqIHJldCwgUXVlcnlGb2xkICogZm9sZCkKK3sKKyAgR3N0RWxlbWVudCAqaXRlbSA9IGdfdmFsdWVfZ2V0X29iamVjdCAodml0ZW0pOworCisgIGlmIChnc3RfZWxlbWVudF9xdWVyeSAoaXRlbSwgZm9sZC0+cXVlcnkpKSB7CisgICAgR3N0Q2xvY2tUaW1lIG1pbiwgbWF4OworICAgIGdib29sZWFuIGxpdmU7CisKKyAgICBnc3RfcXVlcnlfcGFyc2VfbGF0ZW5jeSAoZm9sZC0+cXVlcnksICZsaXZlLCAmbWluLCAmbWF4KTsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGl0ZW0sCisgICAgICAgICJnb3QgbGF0ZW5jeSBtaW4gJSIgR1NUX1RJTUVfRk9STUFUICIsIG1heCAlIiBHU1RfVElNRV9GT1JNQVQKKyAgICAgICAgIiwgbGl2ZSAlZCIsIEdTVF9USU1FX0FSR1MgKG1pbiksIEdTVF9USU1FX0FSR1MgKG1heCksIGxpdmUpOworCisgICAgLyogZm9yIHRoZSBjb21iaW5lZCBsYXRlbmN5IHdlIGNvbGxlY3QgdGhlIE1BWCBvZiBhbGwgbWluIGxhdGVuY2llcyBhbmQKKyAgICAgKiB0aGUgTUlOIG9mIGFsbCBtYXggbGF0ZW5jaWVzICovCisgICAgaWYgKGxpdmUpIHsKKyAgICAgIGlmIChtaW4gPiBmb2xkLT5taW4pCisgICAgICAgIGZvbGQtPm1pbiA9IG1pbjsKKyAgICAgIGlmIChmb2xkLT5tYXggPT0gLTEpCisgICAgICAgIGZvbGQtPm1heCA9IG1heDsKKyAgICAgIGVsc2UgaWYgKG1heCA8IGZvbGQtPm1heCkKKyAgICAgICAgZm9sZC0+bWF4ID0gbWF4OworICAgICAgaWYgKGZvbGQtPmxpdmUgPT0gRkFMU0UpCisgICAgICAgIGZvbGQtPmxpdmUgPSBsaXZlOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBnX3ZhbHVlX3NldF9ib29sZWFuIChyZXQsIEZBTFNFKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChpdGVtLCAiZmFpbGVkIHF1ZXJ5Iik7CisgIH0KKworICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQKK2Jpbl9xdWVyeV9sYXRlbmN5X2RvbmUgKEdzdEJpbiAqIGJpbiwgUXVlcnlGb2xkICogZm9sZCkKK3sKKyAgLyogc3RvcmUgbWF4IGluIHF1ZXJ5IHJlc3VsdCAqLworICBnc3RfcXVlcnlfc2V0X2xhdGVuY3kgKGZvbGQtPnF1ZXJ5LCBmb2xkLT5saXZlLCBmb2xkLT5taW4sIGZvbGQtPm1heCk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoYmluLAorICAgICAgImxhdGVuY3kgbWluICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBtYXggJSIgR1NUX1RJTUVfRk9STUFUCisgICAgICAiLCBsaXZlICVkIiwgR1NUX1RJTUVfQVJHUyAoZm9sZC0+bWluKSwgR1NUX1RJTUVfQVJHUyAoZm9sZC0+bWF4KSwKKyAgICAgIGZvbGQtPmxpdmUpOworfQorCisvKiBnZW5lcmljIGZvbGQsIHJldHVybiBmaXJzdCB2YWxpZCByZXN1bHQgKi8KK3N0YXRpYyBnYm9vbGVhbgorYmluX3F1ZXJ5X2dlbmVyaWNfZm9sZCAoY29uc3QgR1ZhbHVlICogdml0ZW0sIEdWYWx1ZSAqIHJldCwgUXVlcnlGb2xkICogZm9sZCkKK3sKKyAgR3N0RWxlbWVudCAqaXRlbSA9IGdfdmFsdWVfZ2V0X29iamVjdCAodml0ZW0pOworICBnYm9vbGVhbiByZXM7CisKKyAgaWYgKChyZXMgPSBnc3RfZWxlbWVudF9xdWVyeSAoaXRlbSwgZm9sZC0+cXVlcnkpKSkgeworICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHJldCwgVFJVRSk7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoaXRlbSwgImFuc3dlcmVkIHF1ZXJ5ICVwIiwgZm9sZC0+cXVlcnkpOworICB9CisKKyAgLyogYW5kIHN0b3AgYXMgc29vbiBhcyB3ZSBoYXZlIGEgdmFsaWQgcmVzdWx0ICovCisgIHJldHVybiAhcmVzOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iaW5fcXVlcnkgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KQoreworICBHc3RCaW4gKmJpbiA9IEdTVF9CSU5fQ0FTVCAoZWxlbWVudCk7CisgIEdzdEl0ZXJhdG9yICppdGVyOworICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKKyAgR3N0SXRlcmF0b3JGb2xkRnVuY3Rpb24gZm9sZF9mdW5jOworICBRdWVyeUluaXRGdW5jdGlvbiBmb2xkX2luaXQgPSBOVUxMOworICBRdWVyeURvbmVGdW5jdGlvbiBmb2xkX2RvbmUgPSBOVUxMOworICBRdWVyeUZvbGQgZm9sZF9kYXRhOworICBHVmFsdWUgcmV0ID0geyAwIH07CisKKyAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7CisgICAgY2FzZSBHU1RfUVVFUllfRFVSQVRJT046CisgICAgeworICAgICAgR0xpc3QgKmNhY2hlZDsKKyAgICAgIEdzdEZvcm1hdCBxZm9ybWF0OworCisgICAgICBnc3RfcXVlcnlfcGFyc2VfZHVyYXRpb24gKHF1ZXJ5LCAmcWZvcm1hdCwgTlVMTCk7CisKKyAgICAgIC8qIGZpbmQgY2FjaGVkIGR1cmF0aW9uIHF1ZXJ5ICovCisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGJpbik7CisgICAgICBmb3IgKGNhY2hlZCA9IGJpbi0+bWVzc2FnZXM7IGNhY2hlZDsgY2FjaGVkID0gZ19saXN0X25leHQgKGNhY2hlZCkpIHsKKyAgICAgICAgR3N0TWVzc2FnZSAqbWVzc2FnZSA9IChHc3RNZXNzYWdlICopIGNhY2hlZC0+ZGF0YTsKKworICAgICAgICBpZiAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfRFVSQVRJT04gJiYKKyAgICAgICAgICAgIEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkgPT0gR1NUX09CSkVDVF9DQVNUIChiaW4pKSB7CisgICAgICAgICAgR3N0Rm9ybWF0IGZvcm1hdDsKKyAgICAgICAgICBnaW50NjQgZHVyYXRpb247CisKKyAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9kdXJhdGlvbiAobWVzc2FnZSwgJmZvcm1hdCwgJmR1cmF0aW9uKTsKKworICAgICAgICAgIC8qIGlmIGNhY2hlZCBzYW1lIGZvcm1hdCwgY29weSBkdXJhdGlvbiBpbiBxdWVyeSByZXN1bHQgKi8KKyAgICAgICAgICBpZiAoZm9ybWF0ID09IHFmb3JtYXQpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgInJldHVybiBjYWNoZWQgZHVyYXRpb24gJSIgR19HSU5UNjRfRk9STUFULAorICAgICAgICAgICAgICAgIGR1cmF0aW9uKTsKKyAgICAgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOworCisgICAgICAgICAgICBnc3RfcXVlcnlfc2V0X2R1cmF0aW9uIChxdWVyeSwgcWZvcm1hdCwgZHVyYXRpb24pOworICAgICAgICAgICAgcmVzID0gVFJVRTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOworICAgICAgLyogbm8gY2FjaGVkIHZhbHVlIGZvdW5kLCBpdGVyYXRlIGFuZCBjb2xsZWN0IGR1cmF0aW9ucyAqLworICAgICAgZm9sZF9mdW5jID0gKEdzdEl0ZXJhdG9yRm9sZEZ1bmN0aW9uKSBiaW5fcXVlcnlfZHVyYXRpb25fZm9sZDsKKyAgICAgIGZvbGRfaW5pdCA9IGJpbl9xdWVyeV9taW5fbWF4X2luaXQ7CisgICAgICBmb2xkX2RvbmUgPSBiaW5fcXVlcnlfZHVyYXRpb25fZG9uZTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9RVUVSWV9QT1NJVElPTjoKKyAgICB7CisgICAgICBmb2xkX2Z1bmMgPSAoR3N0SXRlcmF0b3JGb2xkRnVuY3Rpb24pIGJpbl9xdWVyeV9wb3NpdGlvbl9mb2xkOworICAgICAgZm9sZF9pbml0ID0gYmluX3F1ZXJ5X21pbl9tYXhfaW5pdDsKKyAgICAgIGZvbGRfZG9uZSA9IGJpbl9xdWVyeV9wb3NpdGlvbl9kb25lOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX1FVRVJZX0xBVEVOQ1k6CisgICAgeworICAgICAgZm9sZF9mdW5jID0gKEdzdEl0ZXJhdG9yRm9sZEZ1bmN0aW9uKSBiaW5fcXVlcnlfbGF0ZW5jeV9mb2xkOworICAgICAgZm9sZF9pbml0ID0gYmluX3F1ZXJ5X21pbl9tYXhfaW5pdDsKKyAgICAgIGZvbGRfZG9uZSA9IGJpbl9xdWVyeV9sYXRlbmN5X2RvbmU7CisgICAgICByZXMgPSBUUlVFOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICBmb2xkX2Z1bmMgPSAoR3N0SXRlcmF0b3JGb2xkRnVuY3Rpb24pIGJpbl9xdWVyeV9nZW5lcmljX2ZvbGQ7CisgICAgICBicmVhazsKKyAgfQorCisgIGZvbGRfZGF0YS5xdWVyeSA9IHF1ZXJ5OworCisgIC8qIHNldCB0aGUgcmVzdWx0IG9mIHRoZSBxdWVyeSB0byBGQUxTRSBpbml0aWFsbHkgKi8KKyAgZ192YWx1ZV9pbml0ICgmcmV0LCBHX1RZUEVfQk9PTEVBTik7CisgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKCZyZXQsIHJlcyk7CisKKyAgaXRlciA9IGdzdF9iaW5faXRlcmF0ZV9zaW5rcyAoYmluKTsKKyAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiU2VuZGluZyBxdWVyeSAlcCAodHlwZSAlcykgdG8gc2luayBjaGlsZHJlbiIsCisgICAgICBxdWVyeSwgR1NUX1FVRVJZX1RZUEVfTkFNRSAocXVlcnkpKTsKKworICBpZiAoZm9sZF9pbml0KQorICAgIGZvbGRfaW5pdCAoYmluLCAmZm9sZF9kYXRhKTsKKworICB3aGlsZSAoVFJVRSkgeworICAgIEdzdEl0ZXJhdG9yUmVzdWx0IGlyZXM7CisKKyAgICBpcmVzID0gZ3N0X2l0ZXJhdG9yX2ZvbGQgKGl0ZXIsIGZvbGRfZnVuYywgJnJldCwgJmZvbGRfZGF0YSk7CisKKyAgICBzd2l0Y2ggKGlyZXMpIHsKKyAgICAgIGNhc2UgR1NUX0lURVJBVE9SX1JFU1lOQzoKKyAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAoaXRlcik7CisgICAgICAgIGlmIChmb2xkX2luaXQpCisgICAgICAgICAgZm9sZF9pbml0IChiaW4sICZmb2xkX2RhdGEpOworICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICgmcmV0LCByZXMpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR1NUX0lURVJBVE9SX09LOgorICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRE9ORToKKyAgICAgICAgcmVzID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAoJnJldCk7CisgICAgICAgIGlmIChmb2xkX2RvbmUgIT0gTlVMTCAmJiByZXMpCisgICAgICAgICAgZm9sZF9kb25lIChiaW4sICZmb2xkX2RhdGEpOworICAgICAgICBnb3RvIGRvbmU7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXMgPSBGQUxTRTsKKyAgICAgICAgZ290byBkb25lOworICAgIH0KKyAgfQorZG9uZToKKyAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0ZXIpOworCitleGl0OgorICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJxdWVyeSAlcCByZXN1bHQgJWQiLCBxdWVyeSwgcmVzKTsKKworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgZ2ludAorY29tcGFyZV9uYW1lIChjb25zdCBHVmFsdWUgKiB2ZWxlbWVudCwgY29uc3QgZ2NoYXIgKiBuYW1lKQoreworICBnaW50IGVxOworICBHc3RFbGVtZW50ICplbGVtZW50ID0gZ192YWx1ZV9nZXRfb2JqZWN0ICh2ZWxlbWVudCk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKKyAgZXEgPSBzdHJjbXAgKEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpLCBuYW1lKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOworCisgIHJldHVybiBlcTsKK30KKworLyoqCisgKiBnc3RfYmluX2dldF9ieV9uYW1lOgorICogQGJpbjogYSAjR3N0QmluCisgKiBAbmFtZTogdGhlIGVsZW1lbnQgbmFtZSB0byBzZWFyY2ggZm9yCisgKgorICogR2V0cyB0aGUgZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBuYW1lIGZyb20gYSBiaW4uIFRoaXMKKyAqIGZ1bmN0aW9uIHJlY3Vyc2VzIGludG8gY2hpbGQgYmlucy4KKyAqCisgKiBSZXR1cm5zIE5VTEwgaWYgbm8gZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBuYW1lIGlzIGZvdW5kIGluIHRoZSBiaW4uCisgKgorICogTVQgc2FmZS4gIENhbGxlciBvd25zIHJldHVybmVkIHJlZmVyZW5jZS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0RWxlbWVudCB3aXRoIHRoZSBnaXZlbiBuYW1lLCBvciBOVUxMCisgKi8KK0dzdEVsZW1lbnQgKgorZ3N0X2Jpbl9nZXRfYnlfbmFtZSAoR3N0QmluICogYmluLCBjb25zdCBnY2hhciAqIG5hbWUpCit7CisgIEdzdEl0ZXJhdG9yICpjaGlsZHJlbjsKKyAgR1ZhbHVlIHJlc3VsdCA9IHsgMCwgfTsKKyAgR3N0RWxlbWVudCAqZWxlbWVudDsKKyAgZ2Jvb2xlYW4gZm91bmQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CSU4gKGJpbiksIE5VTEwpOworCisgIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9QQVJFTlRBR0UsICJbJXNdOiBsb29raW5nIHVwIGNoaWxkIGVsZW1lbnQgJXMiLAorICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoYmluKSwgbmFtZSk7CisKKyAgY2hpbGRyZW4gPSBnc3RfYmluX2l0ZXJhdGVfcmVjdXJzZSAoYmluKTsKKyAgZm91bmQgPSBnc3RfaXRlcmF0b3JfZmluZF9jdXN0b20gKGNoaWxkcmVuLAorICAgICAgKEdDb21wYXJlRnVuYykgY29tcGFyZV9uYW1lLCAmcmVzdWx0LCAoZ3BvaW50ZXIpIG5hbWUpOworICBnc3RfaXRlcmF0b3JfZnJlZSAoY2hpbGRyZW4pOworCisgIGlmIChmb3VuZCkgeworICAgIGVsZW1lbnQgPSBnX3ZhbHVlX2R1cF9vYmplY3QgKCZyZXN1bHQpOworICAgIGdfdmFsdWVfdW5zZXQgKCZyZXN1bHQpOworICB9IGVsc2UgeworICAgIGVsZW1lbnQgPSBOVUxMOworICB9CisKKyAgcmV0dXJuIGVsZW1lbnQ7Cit9CisKKy8qKgorICogZ3N0X2Jpbl9nZXRfYnlfbmFtZV9yZWN1cnNlX3VwOgorICogQGJpbjogYSAjR3N0QmluCisgKiBAbmFtZTogdGhlIGVsZW1lbnQgbmFtZSB0byBzZWFyY2ggZm9yCisgKgorICogR2V0cyB0aGUgZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBuYW1lIGZyb20gdGhpcyBiaW4uIElmIHRoZQorICogZWxlbWVudCBpcyBub3QgZm91bmQsIGEgcmVjdXJzaW9uIGlzIHBlcmZvcm1lZCBvbiB0aGUgcGFyZW50IGJpbi4KKyAqCisgKiBSZXR1cm5zIE5VTEwgaWY6CisgKiAtIG5vIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpcyBmb3VuZCBpbiB0aGUgYmluCisgKgorICogTVQgc2FmZS4gIENhbGxlciBvd25zIHJldHVybmVkIHJlZmVyZW5jZS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0RWxlbWVudCB3aXRoIHRoZSBnaXZlbiBuYW1lLCBvciBOVUxMCisgKi8KK0dzdEVsZW1lbnQgKgorZ3N0X2Jpbl9nZXRfYnlfbmFtZV9yZWN1cnNlX3VwIChHc3RCaW4gKiBiaW4sIGNvbnN0IGdjaGFyICogbmFtZSkKK3sKKyAgR3N0RWxlbWVudCAqcmVzdWx0OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQklOIChiaW4pLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG5hbWUgIT0gTlVMTCwgTlVMTCk7CisKKyAgcmVzdWx0ID0gZ3N0X2Jpbl9nZXRfYnlfbmFtZSAoYmluLCBuYW1lKTsKKworICBpZiAoIXJlc3VsdCkgeworICAgIEdzdE9iamVjdCAqcGFyZW50OworCisgICAgcGFyZW50ID0gZ3N0X29iamVjdF9nZXRfcGFyZW50IChHU1RfT0JKRUNUX0NBU1QgKGJpbikpOworICAgIGlmIChwYXJlbnQpIHsKKyAgICAgIGlmIChHU1RfSVNfQklOIChwYXJlbnQpKSB7CisgICAgICAgIHJlc3VsdCA9IGdzdF9iaW5fZ2V0X2J5X25hbWVfcmVjdXJzZV91cCAoR1NUX0JJTl9DQVNUIChwYXJlbnQpLCBuYW1lKTsKKyAgICAgIH0KKyAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhcmVudCk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdpbnQKK2NvbXBhcmVfaW50ZXJmYWNlIChjb25zdCBHVmFsdWUgKiB2ZWxlbWVudCwgR1ZhbHVlICogaW50ZXJmYWNlKQoreworICBHc3RFbGVtZW50ICplbGVtZW50ID0gZ192YWx1ZV9nZXRfb2JqZWN0ICh2ZWxlbWVudCk7CisgIEdUeXBlIGludGVyZmFjZV90eXBlID0gKEdUeXBlKSBnX3ZhbHVlX2dldF9wb2ludGVyIChpbnRlcmZhY2UpOworICBnaW50IHJldDsKKworICBpZiAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKGVsZW1lbnQsIGludGVyZmFjZV90eXBlKSkgeworICAgIHJldCA9IDA7CisgIH0gZWxzZSB7CisgICAgcmV0ID0gMTsKKyAgfQorICByZXR1cm4gcmV0OworfQorCisvKioKKyAqIGdzdF9iaW5fZ2V0X2J5X2ludGVyZmFjZToKKyAqIEBiaW46IGEgI0dzdEJpbgorICogQGlmYWNlOiB0aGUgI0dUeXBlIG9mIGFuIGludGVyZmFjZQorICoKKyAqIExvb2tzIGZvciBhbiBlbGVtZW50IGluc2lkZSB0aGUgYmluIHRoYXQgaW1wbGVtZW50cyB0aGUgZ2l2ZW4KKyAqIGludGVyZmFjZS4gSWYgc3VjaCBhbiBlbGVtZW50IGlzIGZvdW5kLCBpdCByZXR1cm5zIHRoZSBlbGVtZW50LgorICogWW91IGNhbiBjYXN0IHRoaXMgZWxlbWVudCB0byB0aGUgZ2l2ZW4gaW50ZXJmYWNlIGFmdGVyd2FyZHMuICBJZiB5b3Ugd2FudAorICogYWxsIGVsZW1lbnRzIHRoYXQgaW1wbGVtZW50IHRoZSBpbnRlcmZhY2UsIHVzZQorICogZ3N0X2Jpbl9pdGVyYXRlX2FsbF9ieV9pbnRlcmZhY2UoKS4gVGhpcyBmdW5jdGlvbiByZWN1cnNlcyBpbnRvIGNoaWxkIGJpbnMuCisgKgorICogTVQgc2FmZS4gIENhbGxlciBvd25zIHJldHVybmVkIHJlZmVyZW5jZS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI0dzdEVsZW1lbnQgaW5zaWRlIHRoZSBiaW4gaW1wbGVtZW50aW5nIHRoZSBpbnRlcmZhY2UKKyAqLworR3N0RWxlbWVudCAqCitnc3RfYmluX2dldF9ieV9pbnRlcmZhY2UgKEdzdEJpbiAqIGJpbiwgR1R5cGUgaWZhY2UpCit7CisgIEdzdEl0ZXJhdG9yICpjaGlsZHJlbjsKKyAgR1ZhbHVlIHJlc3VsdCA9IHsgMCwgfTsKKyAgR3N0RWxlbWVudCAqZWxlbWVudDsKKyAgZ2Jvb2xlYW4gZm91bmQ7CisgIEdWYWx1ZSB2aWZhY2UgPSB7IDAsIH07CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CSU4gKGJpbiksIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19UWVBFX0lTX0lOVEVSRkFDRSAoaWZhY2UpLCBOVUxMKTsKKworICBnX3ZhbHVlX2luaXQgKCZ2aWZhY2UsIEdfVFlQRV9QT0lOVEVSKTsKKyAgZ192YWx1ZV9zZXRfcG9pbnRlciAoJnZpZmFjZSwgKGdwb2ludGVyKSBpZmFjZSk7CisKKyAgY2hpbGRyZW4gPSBnc3RfYmluX2l0ZXJhdGVfcmVjdXJzZSAoYmluKTsKKyAgZm91bmQgPSBnc3RfaXRlcmF0b3JfZmluZF9jdXN0b20gKGNoaWxkcmVuLCAoR0NvbXBhcmVGdW5jKSBjb21wYXJlX2ludGVyZmFjZSwKKyAgICAgICZyZXN1bHQsICZ2aWZhY2UpOworICBnc3RfaXRlcmF0b3JfZnJlZSAoY2hpbGRyZW4pOworCisgIGlmIChmb3VuZCkgeworICAgIGVsZW1lbnQgPSBnX3ZhbHVlX2R1cF9vYmplY3QgKCZyZXN1bHQpOworICAgIGdfdmFsdWVfdW5zZXQgKCZyZXN1bHQpOworICB9IGVsc2UgeworICAgIGVsZW1lbnQgPSBOVUxMOworICB9CisgIGdfdmFsdWVfdW5zZXQgKCZ2aWZhY2UpOworCisgIHJldHVybiBlbGVtZW50OworfQorCisvKioKKyAqIGdzdF9iaW5faXRlcmF0ZV9hbGxfYnlfaW50ZXJmYWNlOgorICogQGJpbjogYSAjR3N0QmluCisgKiBAaWZhY2U6IHRoZSAjR1R5cGUgb2YgYW4gaW50ZXJmYWNlCisgKgorICogTG9va3MgZm9yIGFsbCBlbGVtZW50cyBpbnNpZGUgdGhlIGJpbiB0aGF0IGltcGxlbWVudHMgdGhlIGdpdmVuCisgKiBpbnRlcmZhY2UuIFlvdSBjYW4gc2FmZWx5IGNhc3QgYWxsIHJldHVybmVkIGVsZW1lbnRzIHRvIHRoZSBnaXZlbiBpbnRlcmZhY2UuCisgKiBUaGUgZnVuY3Rpb24gcmVjdXJzZXMgaW5zaWRlIGNoaWxkIGJpbnMuIFRoZSBpdGVyYXRvciB3aWxsIHlpZWxkIGEgc2VyaWVzCisgKiBvZiAjR3N0RWxlbWVudCB0aGF0IHNob3VsZCBiZSB1bnJlZmZlZCBhZnRlciB1c2UuCisgKgorICogRWFjaCBlbGVtZW50IHlpZWxkZWQgYnkgdGhlIGl0ZXJhdG9yIHdpbGwgaGF2ZSBpdHMgcmVmY291bnQgaW5jcmVhc2VkLCBzbworICogdW5yZWYgYWZ0ZXIgdXNlLgorICoKKyAqIE1UIHNhZmUuICBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdEl0ZXJhdG9yIG9mICNHc3RFbGVtZW50IGZvciBhbGwgZWxlbWVudHMKKyAqICAgICAgICAgIGluIHRoZSBiaW4gaW1wbGVtZW50aW5nIHRoZSBnaXZlbiBpbnRlcmZhY2UsIG9yIE5VTEwKKyAqLworR3N0SXRlcmF0b3IgKgorZ3N0X2Jpbl9pdGVyYXRlX2FsbF9ieV9pbnRlcmZhY2UgKEdzdEJpbiAqIGJpbiwgR1R5cGUgaWZhY2UpCit7CisgIEdzdEl0ZXJhdG9yICpjaGlsZHJlbjsKKyAgR3N0SXRlcmF0b3IgKnJlc3VsdDsKKyAgR1ZhbHVlIHZpZmFjZSA9IHsgMCwgfTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JJTiAoYmluKSwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX1RZUEVfSVNfSU5URVJGQUNFIChpZmFjZSksIE5VTEwpOworCisgIGdfdmFsdWVfaW5pdCAoJnZpZmFjZSwgR19UWVBFX1BPSU5URVIpOworICBnX3ZhbHVlX3NldF9wb2ludGVyICgmdmlmYWNlLCAoZ3BvaW50ZXIpIGlmYWNlKTsKKworICBjaGlsZHJlbiA9IGdzdF9iaW5faXRlcmF0ZV9yZWN1cnNlIChiaW4pOworICByZXN1bHQgPSBnc3RfaXRlcmF0b3JfZmlsdGVyIChjaGlsZHJlbiwgKEdDb21wYXJlRnVuYykgY29tcGFyZV9pbnRlcmZhY2UsCisgICAgICAmdmlmYWNlKTsKKworICBnX3ZhbHVlX3Vuc2V0ICgmdmlmYWNlKTsKKworICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGJpbi5oIGIvZ3N0L2dzdGJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5Yzc2MzQKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0YmluLmgKQEAgLTAsMCArMSwxOTAgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KKyAqCisgKiBnc3RiaW4uaDogSGVhZGVyIGZvciBHc3RCaW4gY29udGFpbmVyIG9iamVjdAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworI2lmbmRlZiBfX0dTVF9CSU5fSF9fCisjZGVmaW5lIF9fR1NUX0JJTl9IX18KKworI2luY2x1ZGUgPGdzdC9nc3RlbGVtZW50Lmg+CisjaW5jbHVkZSA8Z3N0L2dzdGl0ZXJhdG9yLmg+CisjaW5jbHVkZSA8Z3N0L2dzdGJ1cy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgR1NUX1RZUEVfQklOICAgICAgICAgICAgIChnc3RfYmluX2dldF90eXBlICgpKQorI2RlZmluZSBHU1RfSVNfQklOKG9iaikgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfQklOKSkKKyNkZWZpbmUgR1NUX0lTX0JJTl9DTEFTUyhrbGFzcykgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfQklOKSkKKyNkZWZpbmUgR1NUX0JJTl9HRVRfQ0xBU1Mob2JqKSAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfQklOLCBHc3RCaW5DbGFzcykpCisjZGVmaW5lIEdTVF9CSU4ob2JqKSAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9CSU4sIEdzdEJpbikpCisjZGVmaW5lIEdTVF9CSU5fQ0xBU1Moa2xhc3MpICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX0JJTiwgR3N0QmluQ2xhc3MpKQorI2RlZmluZSBHU1RfQklOX0NBU1Qob2JqKSAgICAgICAgKChHc3RCaW4qKShvYmopKQorCisvKioKKyAqIEdzdEJpbkZsYWdzOgorICogQEdTVF9CSU5fRkxBR19MQVNUOiB0aGUgbGFzdCBlbnVtIGluIHRoZSBzZXJpZXMgb2YgZmxhZ3MgZm9yIGJpbnMuCisgKiBEZXJpdmVkIGNsYXNzZXMgY2FuIHVzZSB0aGlzIGFzIGZpcnN0IHZhbHVlIGluIGEgbGlzdCBvZiBmbGFncy4KKyAqCisgKiBHc3RCaW5GbGFncyBhcmUgYSBzZXQgb2YgZmxhZ3Mgc3BlY2lmaWMgdG8gYmlucy4gTW9zdCBhcmUgc2V0L3VzZWQKKyAqIGludGVybmFsbHkuIFRoZXkgY2FuIGJlIGNoZWNrZWQgdXNpbmcgdGhlIEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKCkgbWFjcm8sCisgKiBhbmQgKHVuKXNldCB1c2luZyBHU1RfT0JKRUNUX0ZMQUdfU0VUICgpIGFuZCBHU1RfT0JKRUNUX0ZMQUdfVU5TRVQgKCkuCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIC8qIHBhZGRpbmcgKi8KKyAgR1NUX0JJTl9GTEFHX0xBU1QJCT0gKEdTVF9FTEVNRU5UX0ZMQUdfTEFTVCA8PCA1KQorfSBHc3RCaW5GbGFnczsKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdEJpbiBHc3RCaW47Cit0eXBlZGVmIHN0cnVjdCBfR3N0QmluQ2xhc3MgR3N0QmluQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfR3N0QmluUHJpdmF0ZSBHc3RCaW5Qcml2YXRlOworCisvKioKKyAqIEdTVF9CSU5fTlVNQ0hJTERSRU46CisgKiBAYmluOiBhICNHc3RCaW4KKyAqCisgKiBHZXRzIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gaW4gYSBiaW4uCisgKi8KKyNkZWZpbmUgR1NUX0JJTl9OVU1DSElMRFJFTihiaW4pCShHU1RfQklOX0NBU1QoYmluKS0+bnVtY2hpbGRyZW4pCisvKioKKyAqIEdTVF9CSU5fQ0hJTERSRU46CisgKiBAYmluOiBhICNHc3RCaW4KKyAqCisgKiBHZXRzIHRoZSBsaXN0IHdpdGggY2hpbGRyZW4gaW4gYSBiaW4uCisgKi8KKyNkZWZpbmUgR1NUX0JJTl9DSElMRFJFTihiaW4pCQkoR1NUX0JJTl9DQVNUKGJpbiktPmNoaWxkcmVuKQorLyoqCisgKiBHU1RfQklOX0NISUxEUkVOX0NPT0tJRToKKyAqIEBiaW46IGEgI0dzdEJpbgorICoKKyAqIEdldHMgdGhlIGNoaWxkcmVuIGNvb2tpZSB0aGF0IHdhdGNoZXMgdGhlIGNoaWxkcmVuIGxpc3QuCisgKi8KKyNkZWZpbmUgR1NUX0JJTl9DSElMRFJFTl9DT09LSUUoYmluKQkoR1NUX0JJTl9DQVNUKGJpbiktPmNoaWxkcmVuX2Nvb2tpZSkKKworLyoqCisgKiBHc3RCaW46CisgKiBAbnVtY2hpbGRyZW46IHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gaW4gdGhpcyBiaW4KKyAqIEBjaGlsZHJlbjogdGhlIGxpc3Qgb2YgY2hpbGRyZW4gaW4gdGhpcyBiaW4KKyAqIEBjaGlsZHJlbl9jb29raWU6IHVwZGF0ZWQgd2hlbmV2ZXIgQGNoaWxkcmVuIGNoYW5nZXMKKyAqIEBjaGlsZF9idXM6IGludGVybmFsIGJ1cyBmb3IgaGFuZGxpbmcgY2hpbGQgbWVzc2FnZXMKKyAqIEBtZXNzYWdlczogcXVldWVkIGFuZCBjYWNoZWQgbWVzc2FnZXMKKyAqIEBwb2xsaW5nOiB0aGUgYmluIGlzIGN1cnJlbnRseSBjYWxjdWxhdGluZyBpdHMgc3RhdGUKKyAqIEBzdGF0ZV9kaXJ0eTogdGhlIGJpbiBuZWVkcyB0byByZWNhbGN1bGF0ZSBpdHMgc3RhdGUgKGRlcHJlY2F0ZWQpCisgKiBAY2xvY2tfZGlydHk6IHRoZSBiaW4gbmVlZHMgdG8gc2VsZWN0IGEgbmV3IGNsb2NrCisgKiBAcHJvdmlkZWRfY2xvY2s6IHRoZSBsYXN0IGNsb2NrIHNlbGVjdGVkCisgKiBAY2xvY2tfcHJvdmlkZXI6IHRoZSBlbGVtZW50IHRoYXQgcHJvdmlkZWQgQHByb3ZpZGVkX2Nsb2NrCisgKgorICogVGhlIEdzdEJpbiBiYXNlIGNsYXNzLiBTdWJjbGFzc2VzIGNhbiBhY2Nlc3MgdGhlc2UgZmllbGRzIHByb3ZpZGVkCisgKiB0aGUgTE9DSyBpcyB0YWtlbi4KKyAqLworc3RydWN0IF9Hc3RCaW4geworICBHc3RFbGVtZW50CSBlbGVtZW50OworCisgIC8qPCBwdWJsaWMgPiovIC8qIHdpdGggTE9DSyAqLworICAvKiBvdXIgY2hpbGRyZW4sIHN1YmNsYXNzIGFyZSBzdXBwb3NlZCB0byB1cGRhdGUgdGhlc2UKKyAgICogZmllbGRzIHRvIHJlZmxlY3QgdGhlaXIgc3RhdGUgd2l0aCBfaXRlcmF0ZV8qKCkgKi8KKyAgZ2ludAkJIG51bWNoaWxkcmVuOworICBHTGlzdAkJKmNoaWxkcmVuOworICBndWludDMyCSBjaGlsZHJlbl9jb29raWU7CisKKyAgR3N0QnVzICAgICAgICAqY2hpbGRfYnVzOworICBHTGlzdCAgICAgICAgICptZXNzYWdlczsKKworICBnYm9vbGVhbgkgcG9sbGluZzsKKyAgZ2Jvb2xlYW4gICAgICAgc3RhdGVfZGlydHk7CisKKyAgZ2Jvb2xlYW4gICAgICAgY2xvY2tfZGlydHk7CisgIEdzdENsb2NrCSpwcm92aWRlZF9jbG9jazsKKyAgR3N0RWxlbWVudCAgICAqY2xvY2tfcHJvdmlkZXI7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIEdzdEJpblByaXZhdGUgKnByaXY7CisKKyAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Cit9OworCisvKioKKyAqIEdzdEJpbkNsYXNzOgorICogQHBhcmVudF9jbGFzczogYmluIHBhcmVudCBjbGFzcworICogQGFkZF9lbGVtZW50OiBtZXRob2QgdG8gYWRkIGFuIGVsZW1lbnQgdG8gYSBiaW4KKyAqIEByZW1vdmVfZWxlbWVudDogbWV0aG9kIHRvIHJlbW92ZSBhbiBlbGVtZW50IGZyb20gYSBiaW4KKyAqIEBoYW5kbGVfbWVzc2FnZTogbWV0aG9kIHRvIGhhbmRsZSBhIG1lc3NhZ2UgZnJvbSB0aGUgY2hpbGRyZW4KKyAqCisgKiBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSB0aGUgQGFkZF9lbGVtZW50IGFuZCBAcmVtb3ZlX2VsZW1lbnQgdG8KKyAqIHVwZGF0ZSB0aGUgbGlzdCBvZiBjaGlsZHJlbiBpbiB0aGUgYmluLgorICoKKyAqIFRoZSBAaGFuZGxlX21lc3NhZ2UgbWV0aG9kIGNhbiBiZSBvdmVycmlkZGVuIHRvIGltcGxlbWVudCBjdXN0b20KKyAqIG1lc3NhZ2UgaGFuZGxpbmcuICBAaGFuZGxlX21lc3NhZ2UgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBtZXNzYWdlLCBqdXN0IGxpa2UKKyAqICNnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UuCisgKi8KK3N0cnVjdCBfR3N0QmluQ2xhc3MgeworICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworCisgIC8qPCBwcml2YXRlID4qLworICBHVGhyZWFkUG9vbCAgKnBvb2w7CisKKyAgLyogc2lnbmFscyAqLworICB2b2lkCQkoKmVsZW1lbnRfYWRkZWQpCShHc3RCaW4gKmJpbiwgR3N0RWxlbWVudCAqY2hpbGQpOworICB2b2lkCQkoKmVsZW1lbnRfcmVtb3ZlZCkJKEdzdEJpbiAqYmluLCBHc3RFbGVtZW50ICpjaGlsZCk7CisKKyAgLyo8IHB1YmxpYyA+Ki8KKyAgLyogdmlydHVhbCBtZXRob2RzIGZvciBzdWJjbGFzc2VzICovCisgIGdib29sZWFuCSgqYWRkX2VsZW1lbnQpCQkoR3N0QmluICpiaW4sIEdzdEVsZW1lbnQgKmVsZW1lbnQpOworICBnYm9vbGVhbgkoKnJlbW92ZV9lbGVtZW50KQkoR3N0QmluICpiaW4sIEdzdEVsZW1lbnQgKmVsZW1lbnQpOworCisgIHZvaWQJCSgqaGFuZGxlX21lc3NhZ2UpCShHc3RCaW4gKmJpbiwgR3N0TWVzc2FnZSAqbWVzc2FnZSk7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIC8qIHNpZ25hbCBhZGRlZCAwLjEwLjIyICovCisgIGdib29sZWFuCSgqZG9fbGF0ZW5jeSkgICAgICAgICAgIChHc3RCaW4gKmJpbik7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOworfTsKKworR1R5cGUJCWdzdF9iaW5fZ2V0X3R5cGUJCSh2b2lkKTsKK0dzdEVsZW1lbnQqCWdzdF9iaW5fbmV3CQkJKGNvbnN0IGdjaGFyICpuYW1lKTsKKworLyogYWRkIGFuZCByZW1vdmUgZWxlbWVudHMgZnJvbSB0aGUgYmluICovCitnYm9vbGVhbglnc3RfYmluX2FkZAkJCShHc3RCaW4gKmJpbiwgR3N0RWxlbWVudCAqZWxlbWVudCk7CitnYm9vbGVhbglnc3RfYmluX3JlbW92ZQkJCShHc3RCaW4gKmJpbiwgR3N0RWxlbWVudCAqZWxlbWVudCk7CisKKy8qIHJldHJpZXZlIGEgc2luZ2xlIGNoaWxkICovCitHc3RFbGVtZW50Kglnc3RfYmluX2dldF9ieV9uYW1lCQkgKEdzdEJpbiAqYmluLCBjb25zdCBnY2hhciAqbmFtZSk7CitHc3RFbGVtZW50Kglnc3RfYmluX2dldF9ieV9uYW1lX3JlY3Vyc2VfdXAJIChHc3RCaW4gKmJpbiwgY29uc3QgZ2NoYXIgKm5hbWUpOworR3N0RWxlbWVudCoJZ3N0X2Jpbl9nZXRfYnlfaW50ZXJmYWNlCSAoR3N0QmluICpiaW4sIEdUeXBlIGlmYWNlKTsKKworLyogcmV0cmlldmUgbXVsdGlwbGUgY2hpbGRyZW4gKi8KK0dzdEl0ZXJhdG9yKiAgICBnc3RfYmluX2l0ZXJhdGVfZWxlbWVudHMJIChHc3RCaW4gKmJpbik7CitHc3RJdGVyYXRvciogICAgZ3N0X2Jpbl9pdGVyYXRlX3NvcnRlZAkJIChHc3RCaW4gKmJpbik7CitHc3RJdGVyYXRvciogICAgZ3N0X2Jpbl9pdGVyYXRlX3JlY3Vyc2UJCSAoR3N0QmluICpiaW4pOworCitHc3RJdGVyYXRvcioJZ3N0X2Jpbl9pdGVyYXRlX3NpbmtzCQkgKEdzdEJpbiAqYmluKTsKK0dzdEl0ZXJhdG9yKglnc3RfYmluX2l0ZXJhdGVfc291cmNlcwkJIChHc3RCaW4gKmJpbik7CitHc3RJdGVyYXRvcioJZ3N0X2Jpbl9pdGVyYXRlX2FsbF9ieV9pbnRlcmZhY2UgKEdzdEJpbiAqYmluLCBHVHlwZSBpZmFjZSk7CisKKy8qIGxhdGVuY3kgKi8KK2dib29sZWFuICAgICAgICBnc3RfYmluX3JlY2FsY3VsYXRlX2xhdGVuY3kgICAgICAoR3N0QmluICogYmluKTsKKworCitHX0VORF9ERUNMUworCisKKyNlbmRpZiAvKiBfX0dTVF9CSU5fSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0YnVmZmVyLmMgYi9nc3QvZ3N0YnVmZmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM2NmUyYgotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RidWZmZXIuYwpAQCAtMCwwICsxLDE2MTggQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KKyAqCisgKiBnc3RidWZmZXIuYzogQnVmZmVyIG9wZXJhdGlvbnMKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKioKKyAqIFNFQ1RJT046Z3N0YnVmZmVyCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IERhdGEtcGFzc2luZyBidWZmZXIgdHlwZSwgc3VwcG9ydGluZyBzdWItYnVmZmVycy4KKyAqIEBzZWVfYWxzbzogI0dzdFBhZCwgI0dzdE1pbmlPYmplY3QKKyAqCisgKiBCdWZmZXJzIGFyZSB0aGUgYmFzaWMgdW5pdCBvZiBkYXRhIHRyYW5zZmVyIGluIEdTdHJlYW1lci4gIFRoZSAjR3N0QnVmZmVyCisgKiB0eXBlIHByb3ZpZGVzIGFsbCB0aGUgc3RhdGUgbmVjZXNzYXJ5IHRvIGRlZmluZSB0aGUgcmVnaW9ucyBvZiBtZW1vcnkgYXMKKyAqIHBhcnQgb2YgYSBzdHJlYW0uIFJlZ2lvbiBjb3BpZXMgYXJlIGFsc28gc3VwcG9ydGVkLCBhbGxvd2luZyBhIHNtYWxsZXIKKyAqIHJlZ2lvbiBvZiBhIGJ1ZmZlciB0byBiZWNvbWUgaXRzIG93biBidWZmZXIsIHdpdGggbWVjaGFuaXNtcyBpbiBwbGFjZSB0bworICogZW5zdXJlIHRoYXQgbmVpdGhlciBtZW1vcnkgc3BhY2UgZ29lcyBhd2F5IHByZW1hdHVyZWx5LgorICoKKyAqIEJ1ZmZlcnMgYXJlIHVzdWFsbHkgY3JlYXRlZCB3aXRoIGdzdF9idWZmZXJfbmV3KCkuIEFmdGVyIGEgYnVmZmVyIGhhcyBiZWVuCisgKiBjcmVhdGVkIG9uZSB3aWxsIHR5cGljYWxseSBhbGxvY2F0ZSBtZW1vcnkgZm9yIGl0IGFuZCBzZXQgdGhlIHNpemUgb2YgdGhlCisgKiBidWZmZXIgZGF0YS4gIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjcmVhdGVzIGEgYnVmZmVyIHRoYXQgY2FuIGhvbGQgYSBnaXZlbgorICogdmlkZW8gZnJhbWUgd2l0aCBhIGdpdmVuIHdpZHRoLCBoZWlnaHQgYW5kIGJpdHMgcGVyIHBsYW5lLgorICogPGV4YW1wbGU+CisgKiA8dGl0bGU+Q3JlYXRpbmcgYSBidWZmZXIgZm9yIGEgdmlkZW8gZnJhbWU8L3RpdGxlPgorICogICA8cHJvZ3JhbWxpc3Rpbmc+CisgKiAgIEdzdEJ1ZmZlciAqYnVmZmVyOworICogICBnaW50IHNpemUsIHdpZHRoLCBoZWlnaHQsIGJwcDsKKyAqICAgLi4uCisgKiAgIHNpemUgPSB3aWR0aCAqIGhlaWdodCAqIGJwcDsKKyAqICAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisgKiAgIEdTVF9CVUZGRVJfU0laRSAoYnVmZmVyKSA9IHNpemU7CisgKiAgIEdTVF9CVUZGRVJfTUFMTE9DREFUQSAoYnVmZmVyKSA9IGdfbWFsbG9jIChzaXplKTsKKyAqICAgR1NUX0JVRkZFUl9EQVRBIChidWZmZXIpID0gR1NUX0JVRkZFUl9NQUxMT0NEQVRBIChidWZmZXIpOworICogICAuLi4KKyAqICAgPC9wcm9ncmFtbGlzdGluZz4KKyAqIDwvZXhhbXBsZT4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB1c2UgZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jKCkKKyAqIHRvIGNyZWF0ZSBhIGJ1ZmZlciB3aXRoIHByZWFsbG9jYXRlZCBkYXRhIG9mIGEgZ2l2ZW4gc2l6ZS4KKyAqCisgKiBUaGUgZGF0YSBwb2ludGVkIHRvIGJ5IHRoZSBidWZmZXIgY2FuIGJlIHJldHJpZXZlZCB3aXRoIHRoZSBHU1RfQlVGRkVSX0RBVEEoKQorICogbWFjcm8uIFRoZSBzaXplIG9mIHRoZSBkYXRhIGNhbiBiZSBmb3VuZCB3aXRoIEdTVF9CVUZGRVJfU0laRSgpLiBGb3IgYnVmZmVycworICogb2Ygc2l6ZSAwLCB0aGUgZGF0YSBwb2ludGVyIGlzIHVuZGVmaW5lZCAodXN1YWxseSBOVUxMKSBhbmQgc2hvdWxkIG5ldmVyIGJlIHVzZWQuCisgKgorICogSWYgYW4gZWxlbWVudCBrbm93cyB3aGF0IHBhZCB5b3Ugd2lsbCBwdXNoIHRoZSBidWZmZXIgb3V0IG9uLCBpdCBzaG91bGQgdXNlCisgKiBnc3RfcGFkX2FsbG9jX2J1ZmZlcigpIGluc3RlYWQgdG8gY3JlYXRlIGEgYnVmZmVyLiAgVGhpcyBhbGxvd3MgZG93bnN0cmVhbQorICogZWxlbWVudHMgdG8gcHJvdmlkZSBzcGVjaWFsIGJ1ZmZlcnMgdG8gd3JpdGUgaW4sIGxpa2UgaGFyZHdhcmUgYnVmZmVycy4KKyAqCisgKiBBIGJ1ZmZlciBoYXMgYSBwb2ludGVyIHRvIGEgI0dzdENhcHMgZGVzY3JpYmluZyB0aGUgbWVkaWEgdHlwZSBvZiB0aGUgZGF0YQorICogaW4gdGhlIGJ1ZmZlci4gQXR0YWNoIGNhcHMgdG8gdGhlIGJ1ZmZlciB3aXRoIGdzdF9idWZmZXJfc2V0X2NhcHMoKTsgdGhpcworICogaXMgdHlwaWNhbGx5IGRvbmUgYmVmb3JlIHB1c2hpbmcgb3V0IGEgYnVmZmVyIHVzaW5nIGdzdF9wYWRfcHVzaCgpIHNvIHRoYXQKKyAqIHRoZSBkb3duc3RyZWFtIGVsZW1lbnQga25vd3MgdGhlIHR5cGUgb2YgdGhlIGJ1ZmZlci4KKyAqCisgKiBBIGJ1ZmZlciB3aWxsIHVzdWFsbHkgaGF2ZSBhIHRpbWVzdGFtcCwgYW5kIGEgZHVyYXRpb24sIGJ1dCBuZWl0aGVyIG9mIHRoZXNlCisgKiBhcmUgZ3VhcmFudGVlZCAodGhleSBtYXkgYmUgc2V0IHRvICNHU1RfQ0xPQ0tfVElNRV9OT05FKS4gV2hlbmV2ZXIgYQorICogbWVhbmluZ2Z1bCB2YWx1ZSBjYW4gYmUgZ2l2ZW4gZm9yIHRoZXNlLCB0aGV5IHNob3VsZCBiZSBzZXQuIFRoZSB0aW1lc3RhbXAKKyAqIGFuZCBkdXJhdGlvbiBhcmUgbWVhc3VyZWQgaW4gbmFub3NlY29uZHMgKHRoZXkgYXJlICNHc3RDbG9ja1RpbWUgdmFsdWVzKS4KKyAqCisgKiBBIGJ1ZmZlciBjYW4gYWxzbyBoYXZlIG9uZSBvciBib3RoIG9mIGEgc3RhcnQgYW5kIGFuIGVuZCBvZmZzZXQuIFRoZXNlIGFyZQorICogbWVkaWEtdHlwZSBzcGVjaWZpYy4gRm9yIHZpZGVvIGJ1ZmZlcnMsIHRoZSBzdGFydCBvZmZzZXQgd2lsbCBnZW5lcmFsbHkgYmUKKyAqIHRoZSBmcmFtZSBudW1iZXIuIEZvciBhdWRpbyBidWZmZXJzLCBpdCB3aWxsIGJlIHRoZSBudW1iZXIgb2Ygc2FtcGxlcworICogcHJvZHVjZWQgc28gZmFyLiBGb3IgY29tcHJlc3NlZCBkYXRhLCBpdCBjb3VsZCBiZSB0aGUgYnl0ZSBvZmZzZXQgaW4gYQorICogc291cmNlIG9yIGRlc3RpbmF0aW9uIGZpbGUuIExpa2V3aXNlLCB0aGUgZW5kIG9mZnNldCB3aWxsIGJlIHRoZSBvZmZzZXQgb2YKKyAqIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gVGhlc2UgY2FuIG9ubHkgYmUgbWVhbmluZ2Z1bGx5IGludGVycHJldGVkIGlmIHlvdQorICoga25vdyB0aGUgbWVkaWEgdHlwZSBvZiB0aGUgYnVmZmVyICh0aGUgI0dzdENhcHMgc2V0IG9uIGl0KS4gRWl0aGVyIG9yIGJvdGgKKyAqIGNhbiBiZSBzZXQgdG8gI0dTVF9CVUZGRVJfT0ZGU0VUX05PTkUuCisgKgorICogZ3N0X2J1ZmZlcl9yZWYoKSBpcyB1c2VkIHRvIGluY3JlYXNlIHRoZSByZWZjb3VudCBvZiBhIGJ1ZmZlci4gVGhpcyBtdXN0IGJlCisgKiBkb25lIHdoZW4geW91IHdhbnQgdG8ga2VlcCBhIGhhbmRsZSB0byB0aGUgYnVmZmVyIGFmdGVyIHB1c2hpbmcgaXQgdG8gdGhlCisgKiBuZXh0IGVsZW1lbnQuCisgKgorICogVG8gZWZmaWNpZW50bHkgY3JlYXRlIGEgc21hbGxlciBidWZmZXIgb3V0IG9mIGFuIGV4aXN0aW5nIG9uZSwgeW91IGNhbgorICogdXNlIGdzdF9idWZmZXJfY29weV9yZWdpb24oKS4KKyAqCisgKiBJZiBhIHBsdWctaW4gd2FudHMgdG8gbW9kaWZ5IHRoZSBidWZmZXIgZGF0YSBvciBtZXRhZGF0YSBpbi1wbGFjZSwgaXQgc2hvdWxkCisgKiBmaXJzdCBvYnRhaW4gYSBidWZmZXIgdGhhdCBpcyBzYWZlIHRvIG1vZGlmeSBieSB1c2luZworICogZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlKCkuICBUaGlzIGZ1bmN0aW9uIGlzIG9wdGltaXplZCBzbyB0aGF0IGEgY29weSB3aWxsCisgKiBvbmx5IGJlIG1hZGUgd2hlbiBpdCBpcyBuZWNlc3NhcnkuCisgKgorICogU2V2ZXJhbCBmbGFncyBvZiB0aGUgYnVmZmVyIGNhbiBiZSBzZXQgYW5kIHVuc2V0IHdpdGggdGhlCisgKiBHU1RfQlVGRkVSX0ZMQUdfU0VUKCkgYW5kIEdTVF9CVUZGRVJfRkxBR19VTlNFVCgpIG1hY3Jvcy4gVXNlCisgKiBHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUKCkgdG8gdGVzdCBpZiBhIGNlcnRhaW4gI0dzdEJ1ZmZlckZsYWcgaXMgc2V0LgorICoKKyAqIEJ1ZmZlcnMgY2FuIGJlIGVmZmljaWVudGx5IG1lcmdlZCBpbnRvIGEgbGFyZ2VyIGJ1ZmZlciB3aXRoCisgKiBnc3RfYnVmZmVyX3NwYW4oKSwgd2hpY2ggYXZvaWRzIG1lbW9yeSBjb3BpZXMgd2hlbiB0aGUgZ3N0X2J1ZmZlcl9pc19zcGFuX2Zhc3QoKQorICogZnVuY3Rpb24gcmV0dXJucyBUUlVFLgorICoKKyAqIEFuIGVsZW1lbnQgc2hvdWxkIGVpdGhlciB1bnJlZiB0aGUgYnVmZmVyIG9yIHB1c2ggaXQgb3V0IG9uIGEgc3JjIHBhZAorICogdXNpbmcgZ3N0X3BhZF9wdXNoKCkgKHNlZSAjR3N0UGFkKS4KKyAqCisgKiBCdWZmZXJzIGFyZSB1c3VhbGx5IGZyZWVkIGJ5IHVucmVmZmluZyB0aGVtIHdpdGggZ3N0X2J1ZmZlcl91bnJlZigpLiBXaGVuCisgKiB0aGUgcmVmY291bnQgZHJvcHMgdG8gMCwgYW55IGRhdGEgcG9pbnRlZCB0byBieSB0aGUgYnVmZmVyIGlzIHVucmVmZmVkIGFzCisgKiB3ZWxsLgorICoKKyAqIExhc3QgcmV2aWV3ZWQgb24gTWFyY2ggMzAsIDIwMTEgKDAuMTEuMCkKKyAqLworI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCisKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImdzdGJ1ZmZlci5oIgorI2luY2x1ZGUgImdzdGJ1ZmZlcnBvb2wuaCIKKyNpbmNsdWRlICJnc3RpbmZvLmgiCisjaW5jbHVkZSAiZ3N0dXRpbHMuaCIKKyNpbmNsdWRlICJnc3RtaW5pb2JqZWN0LmgiCisjaW5jbHVkZSAiZ3N0dmVyc2lvbi5oIgorCitHVHlwZSBfZ3N0X2J1ZmZlcl90eXBlID0gMDsKKworc3RhdGljIEdzdE1lbW9yeSAqX2dzdF9idWZmZXJfYXJyX3NwYW4gKEdzdE1lbW9yeSAqKiBtZW1bXSwgZ3NpemUgbGVuW10sCisgICAgZ3VpbnQgbiwgZ3NpemUgb2Zmc2V0LCBnc2l6ZSBzaXplLCBnYm9vbGVhbiB3cml0YWJsZSk7CisKK3R5cGVkZWYgc3RydWN0IF9Hc3RNZXRhSXRlbSBHc3RNZXRhSXRlbTsKKworc3RydWN0IF9Hc3RNZXRhSXRlbQoreworICBHc3RNZXRhSXRlbSAqbmV4dDsKKyAgR3N0TWV0YSBtZXRhOworfTsKKyNkZWZpbmUgSVRFTV9TSVpFKGluZm8pICgoaW5mbyktPnNpemUgKyBzaXplb2YgKEdzdE1ldGFJdGVtKSkKKworI2RlZmluZSBHU1RfQlVGRkVSX01FTV9NQVggICAgICAgICAxNgorCisjZGVmaW5lIEdTVF9CVUZGRVJfTUVNX0xFTihiKSAgICAgICgoKEdzdEJ1ZmZlckltcGwgKikoYikpLT5sZW4pCisjZGVmaW5lIEdTVF9CVUZGRVJfTUVNX0FSUkFZKGIpICAgICgoKEdzdEJ1ZmZlckltcGwgKikoYikpLT5tZW0pCisjZGVmaW5lIEdTVF9CVUZGRVJfTUVNX1BUUihiLGkpICAgICgoKEdzdEJ1ZmZlckltcGwgKikoYikpLT5tZW1baV0pCisjZGVmaW5lIEdTVF9CVUZGRVJfQlVGTUVNKGIpICAgICAgICgoKEdzdEJ1ZmZlckltcGwgKikoYikpLT5idWZtZW0pCisjZGVmaW5lIEdTVF9CVUZGRVJfTUVUQShiKSAgICAgICAgICgoKEdzdEJ1ZmZlckltcGwgKikoYikpLT5pdGVtKQorCit0eXBlZGVmIHN0cnVjdAoreworICBHc3RCdWZmZXIgYnVmZmVyOworCisgIC8qIHRoZSBtZW1vcnkgYmxvY2tzICovCisgIGd1aW50IGxlbjsKKyAgR3N0TWVtb3J5ICptZW1bR1NUX0JVRkZFUl9NRU1fTUFYXTsKKworICAvKiBtZW1vcnkgb2YgdGhlIGJ1ZmZlciB3aGVuIGFsbG9jYXRlZCBmcm9tIDEgY2h1bmsgKi8KKyAgR3N0TWVtb3J5ICpidWZtZW07CisKKyAgLyogRklYTUUsIG1ha2UgbWV0YWRhdGEgYWxsb2NhdGlvbiBtb3JlIGVmZmljaWVudCBieSB1c2luZyBwYXJ0IG9mIHRoZQorICAgKiBHc3RCdWZmZXJJbXBsICovCisgIEdzdE1ldGFJdGVtICppdGVtOworfSBHc3RCdWZmZXJJbXBsOworCitzdGF0aWMgR3N0TWVtb3J5ICoKK19zcGFuX21lbW9yeSAoR3N0QnVmZmVyICogYnVmZmVyLCBnc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUsIGdib29sZWFuIHdyaXRhYmxlKQoreworICBHc3RNZW1vcnkgKnNwYW4sICoqbWVtWzFdOworICBnc2l6ZSBsZW5bMV07CisKKyAgLyogbm90IGVub3VnaCByb29tLCBzcGFuIGJ1ZmZlcnMgKi8KKyAgbWVtWzBdID0gR1NUX0JVRkZFUl9NRU1fQVJSQVkgKGJ1ZmZlcik7CisgIGxlblswXSA9IEdTVF9CVUZGRVJfTUVNX0xFTiAoYnVmZmVyKTsKKworICBpZiAoc2l6ZSA9PSAtMSkKKyAgICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKTsKKworICBzcGFuID0gX2dzdF9idWZmZXJfYXJyX3NwYW4gKG1lbSwgbGVuLCAxLCBvZmZzZXQsIHNpemUsIHdyaXRhYmxlKTsKKworICByZXR1cm4gc3BhbjsKK30KKworc3RhdGljIHZvaWQKK19yZXBsYWNlX21lbW9yeSAoR3N0QnVmZmVyICogYnVmZmVyLCBHc3RNZW1vcnkgKiBtZW0pCit7CisgIGdzaXplIGxlbiwgaTsKKworICAvKiB1bnJlZiBvbGQgYnVmZmVycyAqLworICBsZW4gPSBHU1RfQlVGRkVSX01FTV9MRU4gKGJ1ZmZlcik7CisgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICBnc3RfbWVtb3J5X3VucmVmIChHU1RfQlVGRkVSX01FTV9QVFIgKGJ1ZmZlciwgaSkpOworCisgIC8qIHJlcGxhY2Ugd2l0aCBzaW5nbGUgc3Bhbm5lZCBidWZmZXIgKi8KKyAgR1NUX0JVRkZFUl9NRU1fUFRSIChidWZmZXIsIDApID0gbWVtOworICBHU1RfQlVGRkVSX01FTV9MRU4gKGJ1ZmZlcikgPSAxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK19tZW1vcnlfYWRkIChHc3RCdWZmZXIgKiBidWZmZXIsIGd1aW50IGlkeCwgR3N0TWVtb3J5ICogbWVtKQoreworICBndWludCBpLCBsZW4gPSBHU1RfQlVGRkVSX01FTV9MRU4gKGJ1ZmZlcik7CisKKyAgaWYgKEdfVU5MSUtFTFkgKGxlbiA+PSBHU1RfQlVGRkVSX01FTV9NQVgpKSB7CisgICAgLyogdG9vIG1hbnkgYnVmZmVyLCBzcGFuIHRoZW0uICovCisgICAgLyogRklYTUUsIHRoZXJlIGlzIHJvb20gZm9yIGltcHJvdmVtZW50IGhlcmU6IFdlIGNvdWxkIG9ubHkgdHJ5IHRvIG1lcmdlCisgICAgICogMiBidWZmZXJzIHRvIG1ha2Ugc29tZSByb29tLiBJZiB3ZSBjYW4ndCBlZmZpY2llbnRseSBtZXJnZSAyIGJ1ZmZlcnMgd2UKKyAgICAgKiBjb3VsZCB0cnkgdG8gb25seSBtZXJnZSB0aGUgdHdvIHNtYWxsZXN0IGJ1ZmZlcnMgdG8gYXZvaWQgbWVtY3B5LCBldGMuICovCisgICAgX3JlcGxhY2VfbWVtb3J5IChidWZmZXIsIF9zcGFuX21lbW9yeSAoYnVmZmVyLCAwLCAtMSwgRkFMU0UpKTsKKyAgICAvKiB3ZSBub3cgaGF2ZSAxIHNpbmdsZSBzcGFubmVkIGJ1ZmZlciAqLworICAgIGxlbiA9IDE7CisgIH0KKworICBpZiAoaWR4ID09IC0xKQorICAgIGlkeCA9IGxlbjsKKworICBmb3IgKGkgPSBsZW47IGkgPiBpZHg7IGktLSkgeworICAgIC8qIG1vdmUgYnVmZmVycyB0byBpbnNlcnQsIEZJWE1FLCB3ZSBuZWVkIHRvIGluc2VydCBmaXJzdCBhbmQgdGhlbiBtZXJnZSAqLworICAgIEdTVF9CVUZGRVJfTUVNX1BUUiAoYnVmZmVyLCBpKSA9IEdTVF9CVUZGRVJfTUVNX1BUUiAoYnVmZmVyLCBpIC0gMSk7CisgIH0KKyAgLyogYW5kIGluc2VydCB0aGUgbmV3IGJ1ZmZlciAqLworICBHU1RfQlVGRkVSX01FTV9QVFIgKGJ1ZmZlciwgaWR4KSA9IG1lbTsKKyAgR1NUX0JVRkZFUl9NRU1fTEVOIChidWZmZXIpID0gbGVuICsgMTsKK30KKworR1NUX0RFRklORV9NSU5JX09CSkVDVF9UWVBFIChHc3RCdWZmZXIsIGdzdF9idWZmZXIpOworCit2b2lkCitfcHJpdl9nc3RfYnVmZmVyX2luaXRpYWxpemUgKHZvaWQpCit7CisgIF9nc3RfYnVmZmVyX3R5cGUgPSBnc3RfYnVmZmVyX2dldF90eXBlICgpOworfQorCisvKioKKyAqIGdzdF9idWZmZXJfY29weV9pbnRvOgorICogQGRlc3Q6IGEgZGVzdGluYXRpb24gI0dzdEJ1ZmZlcgorICogQHNyYzogYSBzb3VyY2UgI0dzdEJ1ZmZlcgorICogQGZsYWdzOiBmbGFncyBpbmRpY2F0aW5nIHdoYXQgbWV0YWRhdGEgZmllbGRzIHNob3VsZCBiZSBjb3BpZWQuCisgKiBAb2Zmc2V0OiBvZmZzZXQgdG8gY29weSBmcm9tCisgKiBAc2l6ZTogdG90YWwgc2l6ZSB0byBjb3B5LiBJZiAtMSwgYWxsIGRhdGEgaXMgY29waWVkLgorICoKKyAqIENvcGllcyB0aGUgaW5mb3JtYXRpb24gZnJvbSBAc3JjIGludG8gQGRlc3QuCisgKgorICogQGZsYWdzIGluZGljYXRlIHdoaWNoIGZpZWxkcyB3aWxsIGJlIGNvcGllZC4KKyAqLwordm9pZAorZ3N0X2J1ZmZlcl9jb3B5X2ludG8gKEdzdEJ1ZmZlciAqIGRlc3QsIEdzdEJ1ZmZlciAqIHNyYywKKyAgICBHc3RCdWZmZXJDb3B5RmxhZ3MgZmxhZ3MsIGdzaXplIG9mZnNldCwgZ3NpemUgc2l6ZSkKK3sKKyAgR3N0TWV0YUl0ZW0gKndhbGs7CisgIGdzaXplIGJ1ZnNpemU7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoZGVzdCAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoc3JjICE9IE5VTEwpOworCisgIC8qIG5vdGhpbmcgdG8gY29weSBpZiB0aGUgYnVmZmVycyBhcmUgdGhlIHNhbWUgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKGRlc3QgPT0gc3JjKSkKKyAgICByZXR1cm47CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X2J1ZmZlcl9pc193cml0YWJsZSAoZGVzdCkpOworCisgIGJ1ZnNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChzcmMpOworICBnX3JldHVybl9pZl9mYWlsIChidWZzaXplID49IG9mZnNldCk7CisgIGlmIChzaXplID09IC0xKQorICAgIHNpemUgPSBidWZzaXplIC0gb2Zmc2V0OworICBnX3JldHVybl9pZl9mYWlsIChidWZzaXplID49IG9mZnNldCArIHNpemUpOworCisgIEdTVF9DQVRfTE9HIChHU1RfQ0FUX0JVRkZFUiwgImNvcHkgJXAgdG8gJXAsIG9mZnNldCAlIiBHX0dTSVpFX0ZPUk1BVAorICAgICAgIi0lIiBHX0dTSVpFX0ZPUk1BVCAiLyUiIEdfR1NJWkVfRk9STUFULCBzcmMsIGRlc3QsIG9mZnNldCwgc2l6ZSwKKyAgICAgIGJ1ZnNpemUpOworCisgIGlmIChmbGFncyAmIEdTVF9CVUZGRVJfQ09QWV9GTEFHUykgeworICAgIC8qIGNvcHkgZmxhZ3MgKi8KKyAgICBHU1RfTUlOSV9PQkpFQ1RfRkxBR1MgKGRlc3QpID0gR1NUX01JTklfT0JKRUNUX0ZMQUdTIChzcmMpOworICB9CisKKyAgaWYgKGZsYWdzICYgR1NUX0JVRkZFUl9DT1BZX1RJTUVTVEFNUFMpIHsKKyAgICBpZiAob2Zmc2V0ID09IDApIHsKKyAgICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChkZXN0KSA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChzcmMpOworICAgICAgR1NUX0JVRkZFUl9PRkZTRVQgKGRlc3QpID0gR1NUX0JVRkZFUl9PRkZTRVQgKHNyYyk7CisgICAgICBpZiAoc2l6ZSA9PSBidWZzaXplKSB7CisgICAgICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGRlc3QpID0gR1NUX0JVRkZFUl9EVVJBVElPTiAoc3JjKTsKKyAgICAgICAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChkZXN0KSA9IEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoc3JjKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGRlc3QpID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGRlc3QpID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUIChkZXN0KSA9IEdTVF9CVUZGRVJfT0ZGU0VUX05PTkU7CisgICAgICBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKGRlc3QpID0gR1NUX0JVRkZFUl9PRkZTRVRfTk9ORTsKKyAgICB9CisgIH0KKworICBpZiAoZmxhZ3MgJiBHU1RfQlVGRkVSX0NPUFlfTUVNT1JZKSB7CisgICAgR3N0TWVtb3J5ICptZW07CisgICAgZ3NpemUgc2tpcCwgbGVmdCwgbGVuLCBpLCBic2l6ZTsKKworICAgIGxlbiA9IEdTVF9CVUZGRVJfTUVNX0xFTiAoc3JjKTsKKyAgICBsZWZ0ID0gc2l6ZTsKKyAgICBza2lwID0gb2Zmc2V0OworCisgICAgLyogY29weSBhbmQgbWFrZSByZWdpb25zIG9mIHRoZSBtZW1vcnkgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuICYmIGxlZnQgPiAwOyBpKyspIHsKKyAgICAgIG1lbSA9IEdTVF9CVUZGRVJfTUVNX1BUUiAoc3JjLCBpKTsKKyAgICAgIGJzaXplID0gZ3N0X21lbW9yeV9nZXRfc2l6ZXMgKG1lbSwgTlVMTCwgTlVMTCk7CisKKyAgICAgIGlmIChic2l6ZSA8PSBza2lwKSB7CisgICAgICAgIC8qIGRvbid0IGNvcHkgYnVmZmVyICovCisgICAgICAgIHNraXAgLT0gYnNpemU7CisgICAgICB9IGVsc2UgeworICAgICAgICBnc2l6ZSB0b2NvcHk7CisKKyAgICAgICAgdG9jb3B5ID0gTUlOIChic2l6ZSAtIHNraXAsIGxlZnQpOworICAgICAgICBpZiAobWVtLT5mbGFncyAmIEdTVF9NRU1PUllfRkxBR19OT19TSEFSRSkgeworICAgICAgICAgIC8qIG5vIHNoYXJlLCBhbHdheXMgY29weSB0aGVuICovCisgICAgICAgICAgbWVtID0gZ3N0X21lbW9yeV9jb3B5IChtZW0sIHNraXAsIHRvY29weSk7CisgICAgICAgICAgc2tpcCA9IDA7CisgICAgICAgIH0gZWxzZSBpZiAodG9jb3B5IDwgYnNpemUpIHsKKyAgICAgICAgICAvKiB3ZSBuZWVkIHRvIGNsaXAgc29tZXRoaW5nICovCisgICAgICAgICAgbWVtID0gZ3N0X21lbW9yeV9zaGFyZSAobWVtLCBza2lwLCB0b2NvcHkpOworICAgICAgICAgIHNraXAgPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIG1lbSA9IGdzdF9tZW1vcnlfcmVmIChtZW0pOworICAgICAgICB9CisgICAgICAgIF9tZW1vcnlfYWRkIChkZXN0LCAtMSwgbWVtKTsKKyAgICAgICAgbGVmdCAtPSB0b2NvcHk7CisgICAgICB9CisgICAgfQorICAgIGlmIChmbGFncyAmIEdTVF9CVUZGRVJfQ09QWV9NRVJHRSkgeworICAgICAgX3JlcGxhY2VfbWVtb3J5IChkZXN0LCBfc3Bhbl9tZW1vcnkgKGRlc3QsIDAsIHNpemUsIEZBTFNFKSk7CisgICAgfQorICB9CisKKyAgZm9yICh3YWxrID0gR1NUX0JVRkZFUl9NRVRBIChzcmMpOyB3YWxrOyB3YWxrID0gd2Fsay0+bmV4dCkgeworICAgIEdzdE1ldGEgKm1ldGEgPSAmd2Fsay0+bWV0YTsKKyAgICBjb25zdCBHc3RNZXRhSW5mbyAqaW5mbyA9IG1ldGEtPmluZm87CisKKyAgICBpZiAoaW5mby0+Y29weV9mdW5jKQorICAgICAgaW5mby0+Y29weV9mdW5jIChkZXN0LCBtZXRhLCBzcmMsIG9mZnNldCwgc2l6ZSk7CisgIH0KK30KKworc3RhdGljIEdzdEJ1ZmZlciAqCitfZ3N0X2J1ZmZlcl9jb3B5IChHc3RCdWZmZXIgKiBidWZmZXIpCit7CisgIEdzdEJ1ZmZlciAqY29weTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoYnVmZmVyICE9IE5VTEwsIE5VTEwpOworCisgIC8qIGNyZWF0ZSBhIGZyZXNoIG5ldyBidWZmZXIgKi8KKyAgY29weSA9IGdzdF9idWZmZXJfbmV3ICgpOworCisgIC8qIHdlIHNpbXBseSBjb3B5IGV2ZXJ5dGhpbmcgZnJvbSBvdXIgcGFyZW50ICovCisgIGdzdF9idWZmZXJfY29weV9pbnRvIChjb3B5LCBidWZmZXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIDAsIC0xKTsKKworICByZXR1cm4gY29weTsKK30KKworLyogdGhlIGRlZmF1bHQgZGlzcG9zZSBmdW5jdGlvbiByZXZpdmVzIHRoZSBidWZmZXIgYW5kIHJldHVybnMgaXQgdG8gdGhlCisgKiBwb29sIHdoZW4gdGhlcmUgaXMgYSBwb29sICovCitzdGF0aWMgZ2Jvb2xlYW4KK19nc3RfYnVmZmVyX2Rpc3Bvc2UgKEdzdEJ1ZmZlciAqIGJ1ZmZlcikKK3sKKyAgR3N0QnVmZmVyUG9vbCAqcG9vbDsKKworICAvKiBubyBwb29sLCBkbyBmcmVlICovCisgIGlmICgocG9vbCA9IGJ1ZmZlci0+cG9vbCkgPT0gTlVMTCkKKyAgICByZXR1cm4gVFJVRTsKKworICAvKiBrZWVwIHRoZSBidWZmZXIgYWxpdmUgKi8KKyAgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcik7CisgIC8qIHJldHVybiB0aGUgYnVmZmVyIHRvIHRoZSBwb29sICovCisgIEdTVF9DQVRfTE9HIChHU1RfQ0FUX0JVRkZFUiwgInJlbGVhc2UgJXAgdG8gcG9vbCAlcCIsIGJ1ZmZlciwgcG9vbCk7CisgIGdzdF9idWZmZXJfcG9vbF9yZWxlYXNlX2J1ZmZlciAocG9vbCwgYnVmZmVyKTsKKworICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkCitfZ3N0X2J1ZmZlcl9mcmVlIChHc3RCdWZmZXIgKiBidWZmZXIpCit7CisgIEdzdE1ldGFJdGVtICp3YWxrLCAqbmV4dDsKKyAgZ3VpbnQgaSwgbGVuOworICBnc2l6ZSBtc2l6ZTsKKworICBnX3JldHVybl9pZl9mYWlsIChidWZmZXIgIT0gTlVMTCk7CisKKyAgR1NUX0NBVF9MT0cgKEdTVF9DQVRfQlVGRkVSLCAiZmluYWxpemUgJXAiLCBidWZmZXIpOworCisgIC8qIGZyZWUgbWV0YWRhdGEgKi8KKyAgZm9yICh3YWxrID0gR1NUX0JVRkZFUl9NRVRBIChidWZmZXIpOyB3YWxrOyB3YWxrID0gbmV4dCkgeworICAgIEdzdE1ldGEgKm1ldGEgPSAmd2Fsay0+bWV0YTsKKyAgICBjb25zdCBHc3RNZXRhSW5mbyAqaW5mbyA9IG1ldGEtPmluZm87CisKKyAgICAvKiBjYWxsIGZyZWVfZnVuYyBpZiBhbnkgKi8KKyAgICBpZiAoaW5mby0+ZnJlZV9mdW5jKQorICAgICAgaW5mby0+ZnJlZV9mdW5jIChtZXRhLCBidWZmZXIpOworCisgICAgbmV4dCA9IHdhbGstPm5leHQ7CisgICAgLyogYW5kIGZyZWUgdGhlIHNsaWNlICovCisgICAgZ19zbGljZV9mcmVlMSAoSVRFTV9TSVpFIChpbmZvKSwgd2Fsayk7CisgIH0KKworICAvKiBnZXQgdGhlIHNpemUsIHdoZW4gdW5yZWZmaW5nIHRoZSBtZW1vcnksIHdlIGNvdWxkIGFsc28gdW5yZWYgdGhlIGJ1ZmZlcgorICAgKiBpdHNlbGYgKi8KKyAgbXNpemUgPSBHU1RfTUlOSV9PQkpFQ1RfU0laRSAoYnVmZmVyKTsKKworICAvKiBmcmVlIG91ciBtZW1vcnkgKi8KKyAgbGVuID0gR1NUX0JVRkZFUl9NRU1fTEVOIChidWZmZXIpOworICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisgICAgZ3N0X21lbW9yeV91bnJlZiAoR1NUX0JVRkZFUl9NRU1fUFRSIChidWZmZXIsIGkpKTsKKworICAvKiB3ZSBzZXQgbXNpemUgdG8gMCB3aGVuIHRoZSBidWZmZXIgaXMgcGFydCBvZiB0aGUgbWVtb3J5IGJsb2NrICovCisgIGlmIChtc2l6ZSkKKyAgICBnX3NsaWNlX2ZyZWUxIChtc2l6ZSwgYnVmZmVyKTsKKyAgZWxzZQorICAgIGdzdF9tZW1vcnlfdW5yZWYgKEdTVF9CVUZGRVJfQlVGTUVNIChidWZmZXIpKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9idWZmZXJfaW5pdCAoR3N0QnVmZmVySW1wbCAqIGJ1ZmZlciwgZ3NpemUgc2l6ZSkKK3sKKyAgZ3N0X21pbmlfb2JqZWN0X2luaXQgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChidWZmZXIpLCBfZ3N0X2J1ZmZlcl90eXBlLCBzaXplKTsKKworICBidWZmZXItPmJ1ZmZlci5taW5pX29iamVjdC5jb3B5ID0KKyAgICAgIChHc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uKSBfZ3N0X2J1ZmZlcl9jb3B5OworICBidWZmZXItPmJ1ZmZlci5taW5pX29iamVjdC5kaXNwb3NlID0KKyAgICAgIChHc3RNaW5pT2JqZWN0RGlzcG9zZUZ1bmN0aW9uKSBfZ3N0X2J1ZmZlcl9kaXNwb3NlOworICBidWZmZXItPmJ1ZmZlci5taW5pX29iamVjdC5mcmVlID0KKyAgICAgIChHc3RNaW5pT2JqZWN0RnJlZUZ1bmN0aW9uKSBfZ3N0X2J1ZmZlcl9mcmVlOworCisgIEdTVF9CVUZGRVIgKGJ1ZmZlciktPnBvb2wgPSBOVUxMOworICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICBHU1RfQlVGRkVSX09GRlNFVCAoYnVmZmVyKSA9IEdTVF9CVUZGRVJfT0ZGU0VUX05PTkU7CisgIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoYnVmZmVyKSA9IEdTVF9CVUZGRVJfT0ZGU0VUX05PTkU7CisKKyAgR1NUX0JVRkZFUl9NRU1fTEVOIChidWZmZXIpID0gMDsKKyAgR1NUX0JVRkZFUl9NRVRBIChidWZmZXIpID0gTlVMTDsKK30KKworLyoqCisgKiBnc3RfYnVmZmVyX25ldzoKKyAqCisgKiBDcmVhdGVzIGEgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciB3aXRob3V0IGFueSBkYXRhLgorICoKKyAqIE1UIHNhZmUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3ICNHc3RCdWZmZXIuCisgKi8KK0dzdEJ1ZmZlciAqCitnc3RfYnVmZmVyX25ldyAodm9pZCkKK3sKKyAgR3N0QnVmZmVySW1wbCAqbmV3YnVmOworCisgIG5ld2J1ZiA9IGdfc2xpY2VfbmV3IChHc3RCdWZmZXJJbXBsKTsKKyAgR1NUX0NBVF9MT0cgKEdTVF9DQVRfQlVGRkVSLCAibmV3ICVwIiwgbmV3YnVmKTsKKworICBnc3RfYnVmZmVyX2luaXQgKG5ld2J1Ziwgc2l6ZW9mIChHc3RCdWZmZXJJbXBsKSk7CisKKyAgcmV0dXJuIEdTVF9CVUZGRVJfQ0FTVCAobmV3YnVmKTsKK30KKworLyoqCisgKiBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZToKKyAqIEBhbGxvY2F0b3I6IHRoZSAjR3N0QWxsb2NhdG9yIHRvIHVzZQorICogQHNpemU6IHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBuZXcgYnVmZmVyJ3MgZGF0YS4KKyAqIEBhbGlnbjogdGhlIGFsaWdubWVudCBvZiB0aGUgYnVmZmVyIG1lbW9yeQorICoKKyAqIFRyaWVzIHRvIGNyZWF0ZSBhIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgd2l0aCBkYXRhIG9mIHRoZSBnaXZlbiBzaXplIGFuZAorICogYWxpZ25tZW50IGZyb20gQGFsbG9jYXRvci4gSWYgdGhlIHJlcXVlc3RlZCBhbW91bnQgb2YgbWVtb3J5IGNhbid0IGJlCisgKiBhbGxvY2F0ZWQsIE5VTEwgd2lsbCBiZSByZXR1cm5lZC4gVGhlIGFsbG9jYXRlZCBidWZmZXIgbWVtb3J5IGlzIG5vdCBjbGVhcmVkLgorICoKKyAqIFdoZW4gQGFsbG9jYXRvciBpcyBOVUxMLCB0aGUgZGVmYXVsdCBtZW1vcnkgYWxsb2NhdG9yIHdpbGwgYmUgdXNlZC4KKyAqCisgKiBBbGxvY2F0b3IgYnVmZmVyIG1lbW9yeSB3aWxsIGJlIGFsaWduZWQgdG8gbXVsdGlwbGVzIG9mIChAYWxpZ24gKyAxKSBieXRlcy4KKyAqCisgKiBOb3RlIHRoYXQgd2hlbiBAc2l6ZSA9PSAwLCB0aGUgYnVmZmVyIHdpbGwgbm90IGhhdmUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBpdC4KKyAqCisgKiBNVCBzYWZlLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdEJ1ZmZlciwgb3IgTlVMTCBpZiB0aGUgbWVtb3J5IGNvdWxkbid0CisgKiAgICAgYmUgYWxsb2NhdGVkLgorICovCitHc3RCdWZmZXIgKgorZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKGNvbnN0IEdzdEFsbG9jYXRvciAqIGFsbG9jYXRvciwgZ3NpemUgc2l6ZSwKKyAgICBnc2l6ZSBhbGlnbikKK3sKKyAgR3N0QnVmZmVyICpuZXdidWY7CisgIEdzdE1lbW9yeSAqbWVtOworI2lmIDAKKyAgZ3VpbnQ4ICpkYXRhOworICBnc2l6ZSBhc2l6ZTsKKyNlbmRpZgorCisjaWYgMQorICBpZiAoc2l6ZSA+IDApIHsKKyAgICBtZW0gPSBnc3RfYWxsb2NhdG9yX2FsbG9jIChhbGxvY2F0b3IsIHNpemUsIGFsaWduKTsKKyAgICBpZiAoR19VTkxJS0VMWSAobWVtID09IE5VTEwpKQorICAgICAgZ290byBub19tZW1vcnk7CisgIH0gZWxzZSB7CisgICAgbWVtID0gTlVMTDsKKyAgfQorCisgIG5ld2J1ZiA9IGdzdF9idWZmZXJfbmV3ICgpOworCisgIGlmIChtZW0gIT0gTlVMTCkKKyAgICBfbWVtb3J5X2FkZCAobmV3YnVmLCAtMSwgbWVtKTsKKworICBHU1RfQ0FUX0xPRyAoR1NUX0NBVF9CVUZGRVIsCisgICAgICAibmV3IGJ1ZmZlciAlcCBvZiBzaXplICUiIEdfR1NJWkVfRk9STUFUICIgZnJvbSBhbGxvY2F0b3IgJXAiLCBuZXdidWYsCisgICAgICBzaXplLCBhbGxvY2F0b3IpOworI2VuZGlmCisKKyNpZiAwCisgIGFzaXplID0gc2l6ZW9mIChHc3RCdWZmZXJJbXBsKSArIHNpemU7CisgIGRhdGEgPSBnX3NsaWNlX2FsbG9jIChhc2l6ZSk7CisgIGlmIChHX1VOTElLRUxZIChkYXRhID09IE5VTEwpKQorICAgIGdvdG8gbm9fbWVtb3J5OworCisgIG5ld2J1ZiA9IEdTVF9CVUZGRVJfQ0FTVCAoZGF0YSk7CisKKyAgZ3N0X2J1ZmZlcl9pbml0ICgoR3N0QnVmZmVySW1wbCAqKSBkYXRhLCBhc2l6ZSk7CisgIGlmIChzaXplID4gMCkgeworICAgIG1lbSA9IGdzdF9tZW1vcnlfbmV3X3dyYXBwZWQgKDAsIGRhdGEgKyBzaXplb2YgKEdzdEJ1ZmZlckltcGwpLCBOVUxMLAorICAgICAgICBzaXplLCAwLCBzaXplKTsKKyAgICBfbWVtb3J5X2FkZCAobmV3YnVmLCAtMSwgbWVtKTsKKyAgfQorI2VuZGlmCisKKyNpZiAwCisgIC8qIGFsbG9jYXRlIG1lbW9yeSBhbmQgYnVmZmVyLCBpdCBtaWdodCBiZSBpbnRlcmVzdGluZyB0byBkbyB0aGlzIGJ1dCB0aGVyZQorICAgKiBhcmUgbWFueSBjb21wbGljYXRpb25zLiBXZSBuZWVkIHRvIGtlZXAgdGhlIG1lbW9yeSBtYXBwZWQgdG8gYWNjZXNzIHRoZQorICAgKiBidWZmZXIgZmllbGRzIGFuZCB0aGUgbWVtb3J5IGZvciB0aGUgYnVmZmVyIG1pZ2h0IGJlIGp1c3QgdmVyeSBzbG93LiBXZQorICAgKiBhbHNvIG5lZWQgdG8gZG8gc29tZSBtb3JlIG1hZ2ljIHRvIGdldCB0aGUgYWxpZ25tZW50IHJpZ2h0LiAqLworICBhc2l6ZSA9IHNpemVvZiAoR3N0QnVmZmVySW1wbCkgKyBzaXplOworICBtZW0gPSBnc3RfYWxsb2NhdG9yX2FsbG9jIChhbGxvY2F0b3IsIGFzaXplLCBhbGlnbik7CisgIGlmIChHX1VOTElLRUxZIChtZW0gPT0gTlVMTCkpCisgICAgZ290byBub19tZW1vcnk7CisKKyAgLyogbWFwIHRoZSBkYXRhIHBhcnQgYW5kIGluaXQgdGhlIGJ1ZmZlciBpbiBpdCwgc2V0IHRoZSBidWZmZXIgc2l6ZSB0byAwIHNvCisgICAqIHRoYXQgYSBmaW5hbGl6ZSB3b24ndCBmcmVlIHRoZSBidWZmZXIgKi8KKyAgZGF0YSA9IGdzdF9tZW1vcnlfbWFwIChtZW0sICZhc2l6ZSwgTlVMTCwgR1NUX01BUF9XUklURSk7CisgIGdzdF9idWZmZXJfaW5pdCAoKEdzdEJ1ZmZlckltcGwgKikgZGF0YSwgMCk7CisgIGdzdF9tZW1vcnlfdW5tYXAgKG1lbSwgZGF0YSwgYXNpemUpOworCisgIC8qIHN0cmlwIG9mZiB0aGUgYnVmZmVyICovCisgIGdzdF9tZW1vcnlfcmVzaXplIChtZW0sIHNpemVvZiAoR3N0QnVmZmVySW1wbCksIHNpemUpOworCisgIG5ld2J1ZiA9IEdTVF9CVUZGRVJfQ0FTVCAoZGF0YSk7CisgIEdTVF9CVUZGRVJfQlVGTUVNIChuZXdidWYpID0gbWVtOworCisgIGlmIChzaXplID4gMCkKKyAgICBfbWVtb3J5X2FkZCAobmV3YnVmLCAtMSwgZ3N0X21lbW9yeV9yZWYgKG1lbSkpOworI2VuZGlmCisKKyAgcmV0dXJuIG5ld2J1ZjsKKworICAvKiBFUlJPUlMgKi8KK25vX21lbW9yeToKKyAgeworICAgIEdTVF9DQVRfV0FSTklORyAoR1NUX0NBVF9CVUZGRVIsCisgICAgICAgICJmYWlsZWQgdG8gYWxsb2NhdGUgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyIsIHNpemUpOworICAgIHJldHVybiBOVUxMOworICB9Cit9CisKKy8qKgorICogZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9mdWxsOgorICogQGRhdGE6IGRhdGEgdG8gd3JhcAorICogQGZyZWVfZnVuYzogZnVuY3Rpb24gdG8gZnJlZSBAZGF0YQorICogQG9mZnNldDogb2Zmc2V0IGluIEBkYXRhIG9mIHZhbGlkIGRhdGEKKyAqIEBzaXplOiBzaXplIG9mIHZhbGlkIGRhdGEgaW4gQGRhdGEgc3RhcnRpbmcgYXQgQG9mZnNldAorICoKKyAqIENyZWF0ZXMgYSBuZXcgYnVmZmVyIHRoYXQgd3JhcHMgdGhlIGdpdmVuIEBkYXRhLiAgVmFsaWQgZGF0YSBpcyBzZXQKKyAqIHRvIHN0YXJ0IGF0IEBvZmZzZXQgYW5kIHVwIHRvIEBzaXplLiAgSWYgbm8gQGZyZWVfZnVuYyBpcyBwcm92aWRlZCwKKyAqIGJ1ZmZlciBtZW1vcnkgaXMgbWFya2VkIFJFQURPTkxZLgorICoKKyAqIE1UIHNhZmUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0QnVmZmVyCisgKi8KK0dzdEJ1ZmZlciAqCitnc3RfYnVmZmVyX25ld193cmFwcGVkX2Z1bGwgKGdwb2ludGVyIGRhdGEsIEdGcmVlRnVuYyBmcmVlX2Z1bmMsIGdzaXplIG9mZnNldCwKKyAgICBnc2l6ZSBzaXplKQoreworICBHc3RCdWZmZXIgKm5ld2J1ZjsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAob2Zmc2V0IDw9IHNpemUsIE5VTEwpOworCisgIG5ld2J1ZiA9IGdzdF9idWZmZXJfbmV3ICgpOworICBnc3RfYnVmZmVyX3Rha2VfbWVtb3J5IChuZXdidWYsIC0xLAorICAgICAgZ3N0X21lbW9yeV9uZXdfd3JhcHBlZCAoZnJlZV9mdW5jID8gMCA6IEdTVF9NRU1PUllfRkxBR19SRUFET05MWSwKKyAgICAgICAgICBkYXRhLCBmcmVlX2Z1bmMsIG9mZnNldCArIHNpemUsIG9mZnNldCwgc2l6ZSkpOworCisgIHJldHVybiBuZXdidWY7Cit9CisKKy8qKgorICogZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZDoKKyAqIEBkYXRhOiBkYXRhIHRvIHdyYXAKKyAqIEBzaXplOiBhbGxvY2F0ZWQgc2l6ZSBvZiBAZGF0YQorICoKKyAqIENyZWF0ZXMgYSBuZXcgYnVmZmVyIHRoYXQgd3JhcHMgdGhlIGdpdmVuIEBkYXRhLgorICoKKyAqIE1UIHNhZmUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0QnVmZmVyCisgKi8KK0dzdEJ1ZmZlciAqCitnc3RfYnVmZmVyX25ld193cmFwcGVkIChncG9pbnRlciBkYXRhLCBnc2l6ZSBzaXplKQoreworICByZXR1cm4gZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9mdWxsIChkYXRhLCBnX2ZyZWUsIDAsIHNpemUpOworfQorCisvKioKKyAqIGdzdF9idWZmZXJfbl9tZW1vcnk6CisgKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIuCisgKgorICogR2V0IHRoZSBhbW91bnQgb2YgbWVtb3J5IGJsb2NrcyB0aGF0IHRoaXMgYnVmZmVyIGhhcy4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBhbW91bnQgb2YgbWVtb3J5IGJsb2NrIGluIHRoaXMgYnVmZmVyLgorICovCitndWludAorZ3N0X2J1ZmZlcl9uX21lbW9yeSAoR3N0QnVmZmVyICogYnVmZmVyKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVRkZFUiAoYnVmZmVyKSwgMCk7CisKKyAgcmV0dXJuIEdTVF9CVUZGRVJfTUVNX0xFTiAoYnVmZmVyKTsKK30KKworLyoqCisgKiBnc3RfYnVmZmVyX3Rha2VfbWVtb3J5OgorICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyLgorICogQGlkeDogdGhlIGluZGV4IHRvIGFkZCB0aGUgbWVtb3J5IGF0LCBvciAtMSB0byBhcHBlbmQgaXQgdG8gdGhlIGVuZAorICogQG1lbTogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RNZW1vcnkuCisgKgorICogQWRkIHRoZSBtZW1vcnkgYmxvY2sgQG1lbSB0byBAYnVmZmVyIGF0IEBpZHguIFRoaXMgZnVuY3Rpb24gdGFrZXMgb3duZXJzaGlwCisgKiBvZiBAbWVtIGFuZCB0aHVzIGRvZXNuJ3QgaW5jcmVhc2UgaXRzIHJlZmNvdW50LgorICovCit2b2lkCitnc3RfYnVmZmVyX3Rha2VfbWVtb3J5IChHc3RCdWZmZXIgKiBidWZmZXIsIGdpbnQgaWR4LCBHc3RNZW1vcnkgKiBtZW0pCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVIgKGJ1ZmZlcikpOworICBnX3JldHVybl9pZl9mYWlsIChnc3RfYnVmZmVyX2lzX3dyaXRhYmxlIChidWZmZXIpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAobWVtICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsIChpZHggPT0gLTEgfHwKKyAgICAgIChpZHggPj0gMCAmJiBpZHggPD0gR1NUX0JVRkZFUl9NRU1fTEVOIChidWZmZXIpKSk7CisKKyAgX21lbW9yeV9hZGQgKGJ1ZmZlciwgaWR4LCBtZW0pOworfQorCitzdGF0aWMgR3N0TWVtb3J5ICoKK19nZXRfbWVtb3J5IChHc3RCdWZmZXIgKiBidWZmZXIsIGd1aW50IGlkeCwgZ2Jvb2xlYW4gd3JpdGUpCit7CisgIEdzdE1lbW9yeSAqbWVtOworCisgIG1lbSA9IEdTVF9CVUZGRVJfTUVNX1BUUiAoYnVmZmVyLCBpZHgpOworCisgIGlmIChHX1VOTElLRUxZICh3cml0ZSAmJiAhR1NUX01FTU9SWV9JU19XUklUQUJMRSAobWVtKSkpIHsKKyAgICBHc3RNZW1vcnkgKmNvcHk7CisgICAgR1NUX0NBVF9MT0cgKEdTVF9DQVRfQlVGRkVSLAorICAgICAgICAibWFraW5nIHdyaXRhYmxlIGNvcHkgb2YgbWVtb3J5ICVwIGluIGJ1ZmZlciAlcCIsIG1lbSwgYnVmZmVyKTsKKyAgICAvKiByZXBsYWNlIHdpdGggYSB3cml0YWJsZSBjb3B5ICovCisgICAgY29weSA9IGdzdF9tZW1vcnlfY29weSAobWVtLCAwLCAtMSk7CisgICAgR1NUX0JVRkZFUl9NRU1fUFRSIChidWZmZXIsIGlkeCkgPSBjb3B5OworICAgIGdzdF9tZW1vcnlfdW5yZWYgKG1lbSk7CisgICAgbWVtID0gY29weTsKKyAgfQorICByZXR1cm4gbWVtOworfQorCisvKioKKyAqIGdzdF9idWZmZXJfcGVla19tZW1vcnk6CisgKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIuCisgKiBAaWR4OiBhbiBpbmRleAorICogQGZsYWdzOiAjR3N0TWFwRmxhZ3MKKyAqCisgKiBHZXQgdGhlIG1lbW9yeSBibG9jayBpbiBAYnVmZmVyIGF0IEBpZHggZm9yIG1lbW9yeSBhY2Nlc3MgaW4gQGZsYWdzLgorICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYSByZWZjb3VudCB0byB0aGUgbWVtb3J5IGJsb2NrLiBUaGUgbWVtb3J5CisgKiBibG9jayBzdGF5cyB2YWxpZCBmb3IgYXMgbG9uZyBhcyB0aGUgY2FsbGVyIGhhcyBhIHZhbGlkIHJlZmVyZW5jZSB0byBAYnVmZmVyLgorICoKKyAqIEBidWZmZXIgc2hvdWxkIGJlIHdyaXRhYmxlIHdoZW4gQGZsYWdzIGNvbnRhaW5zICNHU1RfTUFQX1dSSVRFLiBJZiB0aGUgbWVtb3J5CisgKiBhdCBAaWR4IGlzIG5vdCB3cml0YWJsZSwgYSBuZXcgd3JpdGFibGUgY29weSB3aWxsIGJlIGluc3RhbGxlZCBpbiBAYnVmZmVyIGFuZAorICogcmV0dXJuZWQuCisgKgorICogUmV0dXJuczogYSAjR3N0TWVtb3J5IGF0IEBpZHguCisgKi8KK0dzdE1lbW9yeSAqCitnc3RfYnVmZmVyX3BlZWtfbWVtb3J5IChHc3RCdWZmZXIgKiBidWZmZXIsIGd1aW50IGlkeCwgR3N0TWFwRmxhZ3MgZmxhZ3MpCit7CisgIEdzdE1lbW9yeSAqbWVtOworICBnYm9vbGVhbiB3cml0ZTsKKworICB3cml0ZSA9IChmbGFncyAmIEdTVF9NQVBfV1JJVEUpICE9IDA7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVIgKGJ1ZmZlciksIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoaWR4IDwgR1NUX0JVRkZFUl9NRU1fTEVOIChidWZmZXIpLCBOVUxMKTsKKworICAvKiBjaGVjayBpZiB3ZSBjYW4gd3JpdGUgd2hlbiBhc2tlZCBmb3Igd3JpdGUgYWNjZXNzICovCisgIGlmIChHX1VOTElLRUxZICh3cml0ZSAmJiAhZ3N0X2J1ZmZlcl9pc193cml0YWJsZSAoYnVmZmVyKSkpCisgICAgZ290byBub3Rfd3JpdGFibGU7CisKKyAgbWVtID0gX2dldF9tZW1vcnkgKGJ1ZmZlciwgaWR4LCB3cml0ZSk7CisKKyAgcmV0dXJuIG1lbTsKKworICAvKiBFUlJPUlMgKi8KK25vdF93cml0YWJsZToKKyAgeworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3RfYnVmZmVyX2lzX3dyaXRhYmxlIChidWZmZXIpLCBOVUxMKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorfQorCisvKioKKyAqIGdzdF9idWZmZXJfcmVtb3ZlX21lbW9yeV9yYW5nZToKKyAqIEBidWZmZXI6IGEgI0dzdEJ1ZmZlci4KKyAqIEBpZHg6IGFuIGluZGV4CisgKiBAbGVuZ3RoOiBhIGxlbmd0aAorICoKKyAqIFJlbW92ZSBAbGVuIG1lbW9yeSBibG9ja3MgaW4gQGJ1ZmZlciBzdGFydGluZyBmcm9tIEBpZHguCisgKgorICogQGxlbmd0aCBjYW4gYmUgLTEsIGluIHdoaWNoIGNhc2UgYWxsIG1lbW9yeSBzdGFydGluZyBmcm9tIEBpZHggaXMgcmVtb3ZlZC4KKyAqLwordm9pZAorZ3N0X2J1ZmZlcl9yZW1vdmVfbWVtb3J5X3JhbmdlIChHc3RCdWZmZXIgKiBidWZmZXIsIGd1aW50IGlkeCwgZ3VpbnQgbGVuZ3RoKQoreworICBndWludCBsZW4sIGksIGVuZDsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQlVGRkVSIChidWZmZXIpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X2J1ZmZlcl9pc193cml0YWJsZSAoYnVmZmVyKSk7CisKKyAgbGVuID0gR1NUX0JVRkZFUl9NRU1fTEVOIChidWZmZXIpOworICBpZiAobGVuZ3RoID09IC0xKSB7CisgICAgZ19yZXR1cm5faWZfZmFpbCAoaWR4IDwgbGVuKTsKKyAgICBsZW5ndGggPSBsZW4gLSBpZHg7CisgIH0KKworICBlbmQgPSBpZHggKyBsZW5ndGg7CisgIGZvciAoaSA9IGlkeDsgaSA8IGVuZDsgaSsrKQorICAgIGdzdF9tZW1vcnlfdW5yZWYgKEdTVF9CVUZGRVJfTUVNX1BUUiAoYnVmZmVyLCBpKSk7CisKKyAgaWYgKGVuZCAhPSBsZW4pIHsKKyAgICBnX21lbW1vdmUgKCZHU1RfQlVGRkVSX01FTV9QVFIgKGJ1ZmZlciwgaWR4KSwKKyAgICAgICAgJkdTVF9CVUZGRVJfTUVNX1BUUiAoYnVmZmVyLCBlbmQpLCAobGVuIC0gZW5kKSAqIHNpemVvZiAoZ3BvaW50ZXIpKTsKKyAgfQorICBHU1RfQlVGRkVSX01FTV9MRU4gKGJ1ZmZlcikgPSBsZW4gLSBsZW5ndGg7Cit9CisKKy8qKgorICogZ3N0X2J1ZmZlcl9nZXRfc2l6ZXM6CisgKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIuCisgKiBAb2Zmc2V0OiBhIHBvaW50ZXIgdG8gdGhlIG9mZnNldAorICogQG1heHNpemU6IGEgcG9pbnRlciB0byB0aGUgbWF4c2l6ZQorICoKKyAqIEdldCB0aGUgdG90YWwgc2l6ZSBvZiBhbGwgbWVtb3J5IGJsb2NrcyBpbiBAYnVmZmVyLgorICoKKyAqIFdoZW4gbm90ICVOVUxMLCBAb2Zmc2V0IHdpbGwgY29udGFpbiB0aGUgb2Zmc2V0IG9mIHRoZSBkYXRhIGluIHRoZSBmaXJzdAorICogbWVtb3J5IGJsb2NrIGluIEBidWZmZXIgYW5kIEBtYXhzaXplIHdpbGwgY29udGFpbiB0aGUgc3VtIG9mIHRoZSBzaXplCisgKiBhbmQgQG9mZnNldCBhbmQgdGhlIGFtb3VudCBvZiBleHRyYSBwYWRkaW5nIG9uIHRoZSBsYXN0IG1lbW9yeSBibG9jay4KKyAqIEBvZmZzZXQgYW5kIEBtYXhzaXplIGNhbiBiZSB1c2VkIHRvIHJlc2l6ZSB0aGUgYnVmZmVyIHdpdGgKKyAqIGdzdF9idWZmZXJfcmVzaXplKCkuCisgKgorICogUmV0dXJuczogdGhlIHRvdGFsIHNpemUgb2YgdGhlIG1lbW9yeSBpbiBAYnVmZmVyLgorICovCitnc2l6ZQorZ3N0X2J1ZmZlcl9nZXRfc2l6ZXMgKEdzdEJ1ZmZlciAqIGJ1ZmZlciwgZ3NpemUgKiBvZmZzZXQsIGdzaXplICogbWF4c2l6ZSkKK3sKKyAgZ3VpbnQgbGVuOworICBnc2l6ZSBzaXplOworICBHc3RNZW1vcnkgKm1lbTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVRkZFUiAoYnVmZmVyKSwgMCk7CisKKyAgbGVuID0gR1NUX0JVRkZFUl9NRU1fTEVOIChidWZmZXIpOworCisgIGlmIChHX0xJS0VMWSAobGVuID09IDEpKSB7CisgICAgLyogY29tbW9uIGNhc2UgKi8KKyAgICBtZW0gPSBHU1RfQlVGRkVSX01FTV9QVFIgKGJ1ZmZlciwgMCk7CisgICAgc2l6ZSA9IGdzdF9tZW1vcnlfZ2V0X3NpemVzIChtZW0sIG9mZnNldCwgbWF4c2l6ZSk7CisgIH0gZWxzZSB7CisgICAgZ3VpbnQgaTsKKyAgICBnc2l6ZSBleHRyYSwgb2ZmczsKKworICAgIHNpemUgPSBvZmZzID0gZXh0cmEgPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgZ3NpemUgcywgbywgbXM7CisKKyAgICAgIG1lbSA9IEdTVF9CVUZGRVJfTUVNX1BUUiAoYnVmZmVyLCBpKTsKKyAgICAgIHMgPSBnc3RfbWVtb3J5X2dldF9zaXplcyAobWVtLCAmbywgJm1zKTsKKworICAgICAgaWYgKHMpIHsKKyAgICAgICAgaWYgKHNpemUgPT0gMCkKKyAgICAgICAgICAvKiBmaXJzdCBzaXplLCB0YWtlIGFjY3VtdWxhdGVkIGRhdGEgYmVmb3JlIGFzIHRoZSBvZmZzZXQgKi8KKyAgICAgICAgICBvZmZzID0gZXh0cmEgKyBvOworICAgICAgICAvKiBhZGQgc2l6ZXMgKi8KKyAgICAgICAgc2l6ZSArPSBzOworICAgICAgICAvKiBzYXZlIHRoZSBhbW91bnQgb2YgZGF0YSBhZnRlciB0aGlzIGJsb2NrICovCisgICAgICAgIGV4dHJhID0gbXMgLSAobyArIHMpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgLyogZW1wdHkgYmxvY2ssIGFkZCBhcyBleHRyYSAqLworICAgICAgICBleHRyYSArPSBtczsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKG9mZnNldCkKKyAgICAgICpvZmZzZXQgPSBvZmZzOworICAgIGlmIChtYXhzaXplKQorICAgICAgKm1heHNpemUgPSBvZmZzICsgc2l6ZSArIGV4dHJhOworICB9CisgIHJldHVybiBzaXplOworfQorCisvKioKKyAqIGdzdF9idWZmZXJfcmVzaXplOgorICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyLgorICogQG9mZnNldDogdGhlIG9mZnNldCBhZGp1c3RlbWVudAorICogQHNpemU6IHRoZSBuZXcgc2l6ZQorICoKKyAqIFNldCB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgYnVmZmVyCisgKi8KK3ZvaWQKK2dzdF9idWZmZXJfcmVzaXplIChHc3RCdWZmZXIgKiBidWZmZXIsIGdzc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUpCit7CisgIGd1aW50IGxlbjsKKyAgZ3VpbnQgaTsKKyAgZ3NpemUgYnNpemUsIGJ1ZnNpemUsIGJ1Zm9mZnMsIGJ1Zm1heDsKKyAgR3N0TWVtb3J5ICptZW07CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X2J1ZmZlcl9pc193cml0YWJsZSAoYnVmZmVyKSk7CisKKyAgYnVmc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemVzIChidWZmZXIsICZidWZvZmZzLCAmYnVmbWF4KTsKKworICBHU1RfQ0FUX0xPRyAoR1NUX0NBVF9CVUZGRVIsICJ0cmltICVwICUiIEdfR1NTSVpFX0ZPUk1BVCAiLSUiIEdfR1NJWkVfRk9STUFUCisgICAgICAiIHNpemU6JSIgR19HU0laRV9GT1JNQVQgIiBvZmZzOiUiIEdfR1NJWkVfRk9STUFUICIgbWF4OiUiIEdfR1NJWkVfRk9STUFULAorICAgICAgYnVmZmVyLCBvZmZzZXQsIHNpemUsIGJ1ZnNpemUsIGJ1Zm9mZnMsIGJ1Zm1heCk7CisKKyAgLyogd2UgY2FuJ3QgZ28gYmFjayBmdXJ0aGVyIHRoYW4gdGhlIGN1cnJlbnQgb2Zmc2V0IG9yIHBhc3QgdGhlIGVuZCBvZiB0aGUKKyAgICogYnVmZmVyICovCisgIGdfcmV0dXJuX2lmX2ZhaWwgKChvZmZzZXQgPCAwICYmIGJ1Zm9mZnMgPj0gLW9mZnNldCkgfHwgKG9mZnNldCA+PSAwCisgICAgICAgICAgJiYgYnVmb2ZmcyArIG9mZnNldCA8PSBidWZtYXgpKTsKKyAgaWYgKHNpemUgPT0gLTEpIHsKKyAgICBnX3JldHVybl9pZl9mYWlsIChidWZzaXplID49IG9mZnNldCk7CisgICAgc2l6ZSA9IGJ1ZnNpemUgLSBvZmZzZXQ7CisgIH0KKyAgZ19yZXR1cm5faWZfZmFpbCAoYnVmbWF4ID49IGJ1Zm9mZnMgKyBvZmZzZXQgKyBzaXplKTsKKworICBsZW4gPSBHU1RfQlVGRkVSX01FTV9MRU4gKGJ1ZmZlcik7CisKKyAgLyogY29weSBhbmQgdHJpbSAqLworICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICBnc2l6ZSBsZWZ0LCBub2ZmczsKKworICAgIG1lbSA9IEdTVF9CVUZGRVJfTUVNX1BUUiAoYnVmZmVyLCBpKTsKKyAgICBic2l6ZSA9IGdzdF9tZW1vcnlfZ2V0X3NpemVzIChtZW0sIE5VTEwsIE5VTEwpOworCisgICAgbm9mZnMgPSAwOworICAgIC8qIGxhc3QgYnVmZmVyIGFsd2F5cyBnZXRzIHJlc2l6ZWQgdG8gdGhlIHJlbWFpbmluZyBzaXplICovCisgICAgaWYgKGkgKyAxID09IGxlbikKKyAgICAgIGxlZnQgPSBzaXplOworICAgIC8qIHNocmluayBidWZmZXJzIGJlZm9yZSB0aGUgb2Zmc2V0ICovCisgICAgZWxzZSBpZiAoKGdzc2l6ZSkgYnNpemUgPD0gb2Zmc2V0KSB7CisgICAgICBsZWZ0ID0gMDsKKyAgICAgIG5vZmZzID0gb2Zmc2V0IC0gYnNpemU7CisgICAgICBvZmZzZXQgPSAwOworICAgIH0KKyAgICAvKiBjbGlwIG90aGVyIGJ1ZmZlcnMgKi8KKyAgICBlbHNlCisgICAgICBsZWZ0ID0gTUlOIChic2l6ZSAtIG9mZnNldCwgc2l6ZSk7CisKKyAgICBpZiAob2Zmc2V0ICE9IDAgfHwgbGVmdCAhPSBic2l6ZSkgeworICAgICAgLyogd2UgbmVlZCB0byBjbGlwIHNvbWV0aGluZyAqLworICAgICAgaWYgKEdTVF9NRU1PUllfSVNfV1JJVEFCTEUgKG1lbSkpIHsKKyAgICAgICAgZ3N0X21lbW9yeV9yZXNpemUgKG1lbSwgb2Zmc2V0LCBsZWZ0KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIEdzdE1lbW9yeSAqdG1wOworCisgICAgICAgIGlmIChtZW0tPmZsYWdzICYgR1NUX01FTU9SWV9GTEFHX05PX1NIQVJFKQorICAgICAgICAgIHRtcCA9IGdzdF9tZW1vcnlfY29weSAobWVtLCBvZmZzZXQsIGxlZnQpOworICAgICAgICBlbHNlCisgICAgICAgICAgdG1wID0gZ3N0X21lbW9yeV9zaGFyZSAobWVtLCBvZmZzZXQsIGxlZnQpOworCisgICAgICAgIGdzdF9tZW1vcnlfdW5yZWYgKG1lbSk7CisgICAgICAgIG1lbSA9IHRtcDsKKyAgICAgIH0KKyAgICB9CisgICAgb2Zmc2V0ID0gbm9mZnM7CisgICAgc2l6ZSAtPSBsZWZ0OworCisgICAgR1NUX0JVRkZFUl9NRU1fUFRSIChidWZmZXIsIGkpID0gbWVtOworICB9Cit9CisKKy8qKgorICogZ3N0X2J1ZmZlcl9tYXA6CisgKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIuCisgKiBAc2l6ZTogYSBsb2NhdGlvbiBmb3IgdGhlIHNpemUKKyAqIEBtYXhzaXplOiBhIGxvY2F0aW9uIGZvciB0aGUgbWF4IHNpemUKKyAqIEBmbGFnczogZmxhZ3MgZm9yIHRoZSBtYXBwaW5nCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBtZW1vcnkgaW4gQGJ1ZmZlci4gQGZsYWdzIGRlc2NyaWJlIHRoZQorICogZGVzaXJlZCBhY2Nlc3Mgb2YgdGhlIG1lbW9yeS4gV2hlbiBAZmxhZ3MgaXMgI0dTVF9NQVBfV1JJVEUsIEBidWZmZXIgc2hvdWxkCisgKiBiZSB3cml0YWJsZSAoYXMgcmV0dXJuZWQgZnJvbSBnc3RfYnVmZmVyX2lzX3dyaXRhYmxlKCkpLgorICoKKyAqIEBzaXplIGFuZCBAbWF4c2l6ZSB3aWxsIGNvbnRhaW4gdGhlIGN1cnJlbnQgdmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZQorICogcmV0dXJuZWQgbWVtb3J5IGFyZWEgYW5kIHRoZSB0b3RhbCBtYXhpbXVtIG1vdW50IG9mIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUKKyAqIHJldHVybmVkIG1lbW9yeSBhcmVhIHJlc3BlY3RpdmVseS4KKyAqCisgKiBXaGVuIEBidWZmZXIgaXMgd3JpdGFibGUgYnV0IHRoZSBtZW1vcnkgaXNuJ3QsIGEgd3JpdGFibGUgY29weSB3aWxsCisgKiBhdXRvbWF0aWNhbGx5IGJlIGNyZWF0ZWQgYW5kIHJldHVybmVkLiBUaGUgcmVhZG9ubHkgY29weSBvZiB0aGUgYnVmZmVyIG1lbW9yeQorICogd2lsbCB0aGVuIGFsc28gYmUgcmVwbGFjZWQgd2l0aCB0aGlzIHdyaXRhYmxlIGNvcHkuCisgKgorICogV2hlbiB0aGUgYnVmZmVyIGNvbnRhaW5zIG11bHRpcGxlIG1lbW9yeSBibG9ja3MsIHRoZSByZXR1cm5lZCBwb2ludGVyIHdpbGwgYmUKKyAqIGEgY29uY2F0ZW5hdGlvbiBvZiB0aGUgbWVtb3J5IGJsb2Nrcy4KKyAqCisgKiBSZXR1cm5zOiBhIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSBmb3IgdGhlIGJ1ZmZlci4KKyAqLworZ3BvaW50ZXIKK2dzdF9idWZmZXJfbWFwIChHc3RCdWZmZXIgKiBidWZmZXIsIGdzaXplICogc2l6ZSwgZ3NpemUgKiBtYXhzaXplLAorICAgIEdzdE1hcEZsYWdzIGZsYWdzKQoreworICBndWludCBsZW47CisgIGdwb2ludGVyIGRhdGE7CisgIEdzdE1lbW9yeSAqbWVtOworICBnYm9vbGVhbiB3cml0ZSwgd3JpdGFibGU7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVIgKGJ1ZmZlciksIE5VTEwpOworCisgIHdyaXRlID0gKGZsYWdzICYgR1NUX01BUF9XUklURSkgIT0gMDsKKyAgd3JpdGFibGUgPSBnc3RfYnVmZmVyX2lzX3dyaXRhYmxlIChidWZmZXIpOworCisgIC8qIGNoZWNrIGlmIHdlIGNhbiB3cml0ZSB3aGVuIGFza2VkIGZvciB3cml0ZSBhY2Nlc3MgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKHdyaXRlICYmICF3cml0YWJsZSkpCisgICAgZ290byBub3Rfd3JpdGFibGU7CisKKyAgbGVuID0gR1NUX0JVRkZFUl9NRU1fTEVOIChidWZmZXIpOworCisgIGlmIChHX1VOTElLRUxZIChsZW4gPT0gMCkpIHsKKyAgICAvKiBubyBtZW1vcnksIHJldHVybiBpbW1lZGlhdGVseSAqLworICAgIGlmIChzaXplKQorICAgICAgKnNpemUgPSAwOworICAgIGlmIChtYXhzaXplKQorICAgICAgKm1heHNpemUgPSAwOworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgaWYgKEdfTElLRUxZIChsZW4gPT0gMSkpIHsKKyAgICAvKiB3ZSBjYW4gdGFrZSB0aGUgZmlyc3Qgb25lICovCisgICAgbWVtID0gR1NUX0JVRkZFUl9NRU1fUFRSIChidWZmZXIsIDApOworICB9IGVsc2UgeworICAgIC8qIHdlIG5lZWQgdG8gc3BhbiBtZW1vcnkgKi8KKyAgICBpZiAod3JpdGFibGUpIHsKKyAgICAgIC8qIGlmIHdlIGNhbiB3cml0ZSwgd2UgY2FuIGNoYW5nZSB0aGUgbWVtb3J5IHdpdGggdGhlIHNwYW5uZWQKKyAgICAgICAqIG1lbW9yeSAqLworICAgICAgbWVtID0gX3NwYW5fbWVtb3J5IChidWZmZXIsIDAsIC0xLCB3cml0ZSk7CisgICAgICBfcmVwbGFjZV9tZW1vcnkgKGJ1ZmZlciwgbWVtKTsKKyAgICB9IGVsc2UgeworICAgICAgZ3NpemUgYnNpemU7CisKKyAgICAgIC8qIGV4dHJhY3QgYWxsIGRhdGEgaW4gbmV3IG1lbW9yeSwgRklYTUUgc2xvdyEhICovCisgICAgICBic2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcik7CisKKyAgICAgIGRhdGEgPSBnX21hbGxvYyAoYnNpemUpOworICAgICAgZ3N0X2J1ZmZlcl9leHRyYWN0IChidWZmZXIsIDAsIGRhdGEsIGJzaXplKTsKKyAgICAgIGlmIChzaXplKQorICAgICAgICAqc2l6ZSA9IGJzaXplOworICAgICAgaWYgKG1heHNpemUpCisgICAgICAgICptYXhzaXplID0gYnNpemU7CisgICAgICByZXR1cm4gZGF0YTsKKyAgICB9CisgIH0KKworICBpZiAoR19VTkxJS0VMWSAod3JpdGUgJiYgIUdTVF9NRU1PUllfSVNfV1JJVEFCTEUgKG1lbSkpKSB7CisgICAgR3N0TWVtb3J5ICpjb3B5OworICAgIC8qIHJlcGxhY2Ugd2l0aCBhIHdyaXRhYmxlIGNvcHkgKi8KKyAgICBjb3B5ID0gZ3N0X21lbW9yeV9jb3B5IChtZW0sIDAsIC0xKTsKKyAgICBHU1RfQlVGRkVSX01FTV9QVFIgKGJ1ZmZlciwgMCkgPSBjb3B5OworICAgIGdzdF9tZW1vcnlfdW5yZWYgKG1lbSk7CisgICAgbWVtID0gY29weTsKKyAgfQorCisgIGRhdGEgPSBnc3RfbWVtb3J5X21hcCAobWVtLCBzaXplLCBtYXhzaXplLCBmbGFncyk7CisKKyAgcmV0dXJuIGRhdGE7CisKKyAgLyogRVJST1IgKi8KK25vdF93cml0YWJsZToKKyAgeworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3RfYnVmZmVyX2lzX3dyaXRhYmxlIChidWZmZXIpLCBOVUxMKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorfQorCisvKioKKyAqIGdzdF9idWZmZXJfdW5tYXA6CisgKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIuCisgKiBAZGF0YTogdGhlIHByZXZpb3VzbHkgbWFwcGVkIGRhdGEKKyAqIEBzaXplOiB0aGUgc2l6ZSBvZiBAZGF0YQorICoKKyAqIFJlbGVhc2UgdGhlIG1lbW9yeSBwcmV2aW91c2x5IG1hcHBlZCB3aXRoIGdzdF9idWZmZXJfbWFwKCkuCisgKgorICogUmV0dXJuczogI1RSVUUgb24gc3VjY2Vzcy4gI0ZBTFNFIGNhbiBiZSByZXR1cm5lZCB3aGVuIHRoZSBuZXcgc2l6ZSBpcyBsYXJnZXIKKyAqIHRoYW4gdGhlIG1heHNpemUgb2YgdGhlIG1lbW9yeS4KKyAqLworZ2Jvb2xlYW4KK2dzdF9idWZmZXJfdW5tYXAgKEdzdEJ1ZmZlciAqIGJ1ZmZlciwgZ3BvaW50ZXIgZGF0YSwgZ3NpemUgc2l6ZSkKK3sKKyAgZ2Jvb2xlYW4gcmVzdWx0OworICBndWludCBsZW47CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVIgKGJ1ZmZlciksIEZBTFNFKTsKKworICBsZW4gPSBHU1RfQlVGRkVSX01FTV9MRU4gKGJ1ZmZlcik7CisKKyAgaWYgKEdfTElLRUxZIChsZW4gPT0gMSkpIHsKKyAgICBHc3RNZW1vcnkgKm1lbSA9IEdTVF9CVUZGRVJfTUVNX1BUUiAoYnVmZmVyLCAwKTsKKworICAgIHJlc3VsdCA9IGdzdF9tZW1vcnlfdW5tYXAgKG1lbSwgZGF0YSwgc2l6ZSk7CisgIH0gZWxzZSB7CisgICAgLyogdGhpcyBtdXN0IGhhdmUgYmVlbiBmcm9tIHJlYWQtb25seSBhY2Nlc3MuIEFmdGVyIF9tYXAsIHRoZSBidWZmZXIgZWl0aGVyCisgICAgICogb25seSBjb250YWlucyAxIG1lbW9yeSBibG9jayBvciBpdCBhbGxvY2F0ZWQgbWVtb3J5IHRvIGpvaW4gbWVtb3J5CisgICAgICogYmxvY2tzLiBJdCdzIG5vdCBhbGxvd2VkIHRvIGFkZCBidWZmZXJzIGJldHdlZW4gX21hcCBhbmQgX3VubWFwLiAqLworICAgIGdfZnJlZSAoZGF0YSk7CisgICAgcmVzdWx0ID0gVFJVRTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGdzdF9idWZmZXJfZmlsbDoKKyAqIEBidWZmZXI6IGEgI0dzdEJ1ZmZlci4KKyAqIEBvZmZzZXQ6IHRoZSBvZmZzZXQgdG8gZmlsbAorICogQHNyYzogdGhlIHNvdXJjZSBhZGRyZXNzCisgKiBAc2l6ZTogdGhlIHNpemUgdG8gZmlsbAorICoKKyAqIENvcHkgQHNpemUgYnl0ZXMgZnJvbSBAc3JjIHRvIEBidWZmZXIgYXQgQG9mZnNldC4KKyAqCisgKiBSZXR1cm5zOiBUaGUgYW1vdW50IG9mIGJ5dGVzIGNvcGllZC4gVGhpcyB2YWx1ZSBjYW4gYmUgbG93ZXIgdGhhbiBAc2l6ZQorICogICAgd2hlbiBAYnVmZmVyIGRpZCBub3QgY29udGFpbiBlbm91Z2ggZGF0YS4KKyAqLworZ3NpemUKK2dzdF9idWZmZXJfZmlsbCAoR3N0QnVmZmVyICogYnVmZmVyLCBnc2l6ZSBvZmZzZXQsIGdjb25zdHBvaW50ZXIgc3JjLAorICAgIGdzaXplIHNpemUpCit7CisgIGdzaXplIGksIGxlbiwgbGVmdDsKKyAgY29uc3QgZ3VpbnQ4ICpwdHIgPSBzcmM7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVIgKGJ1ZmZlciksIDApOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X2J1ZmZlcl9pc193cml0YWJsZSAoYnVmZmVyKSwgMCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzcmMgIT0gTlVMTCwgMCk7CisKKyAgbGVuID0gR1NUX0JVRkZFUl9NRU1fTEVOIChidWZmZXIpOworICBsZWZ0ID0gc2l6ZTsKKworICBmb3IgKGkgPSAwOyBpIDwgbGVuICYmIGxlZnQgPiAwOyBpKyspIHsKKyAgICBndWludDggKmRhdGE7CisgICAgZ3NpemUgc3NpemUsIHRvY29weTsKKyAgICBHc3RNZW1vcnkgKm1lbTsKKworICAgIG1lbSA9IF9nZXRfbWVtb3J5IChidWZmZXIsIGksIFRSVUUpOworCisgICAgZGF0YSA9IGdzdF9tZW1vcnlfbWFwIChtZW0sICZzc2l6ZSwgTlVMTCwgR1NUX01BUF9XUklURSk7CisgICAgaWYgKHNzaXplID4gb2Zmc2V0KSB7CisgICAgICAvKiB3ZSBoYXZlIGVub3VnaCAqLworICAgICAgdG9jb3B5ID0gTUlOIChzc2l6ZSAtIG9mZnNldCwgbGVmdCk7CisgICAgICBtZW1jcHkgKGRhdGEgKyBvZmZzZXQsIHB0ciwgdG9jb3B5KTsKKyAgICAgIGxlZnQgLT0gdG9jb3B5OworICAgICAgcHRyICs9IHRvY29weTsKKyAgICAgIG9mZnNldCA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIG9mZnNldCBwYXN0IGJ1ZmZlciwgc2tpcCAqLworICAgICAgb2Zmc2V0IC09IHNzaXplOworICAgIH0KKyAgICBnc3RfbWVtb3J5X3VubWFwIChtZW0sIGRhdGEsIHNzaXplKTsKKyAgfQorICByZXR1cm4gc2l6ZSAtIGxlZnQ7Cit9CisKKy8qKgorICogZ3N0X2J1ZmZlcl9leHRyYWN0OgorICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyLgorICogQG9mZnNldDogdGhlIG9mZnNldCB0byBleHRyYWN0CisgKiBAZGVzdDogdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MKKyAqIEBzaXplOiB0aGUgc2l6ZSB0byBleHRyYWN0CisgKgorICogQ29weSBAc2l6ZSBieXRlcyBzdGFydGluZyBmcm9tIEBvZmZzZXQgaW4gQGJ1ZmZlciB0byBAZGVzdC4KKyAqCisgKiBSZXR1cm5zOiBUaGUgYW1vdW50IG9mIGJ5dGVzIGV4dHJhY3RlZC4gVGhpcyB2YWx1ZSBjYW4gYmUgbG93ZXIgdGhhbiBAc2l6ZQorICogICAgd2hlbiBAYnVmZmVyIGRpZCBub3QgY29udGFpbiBlbm91Z2ggZGF0YS4KKyAqLworZ3NpemUKK2dzdF9idWZmZXJfZXh0cmFjdCAoR3N0QnVmZmVyICogYnVmZmVyLCBnc2l6ZSBvZmZzZXQsIGdwb2ludGVyIGRlc3QsIGdzaXplIHNpemUpCit7CisgIGdzaXplIGksIGxlbiwgbGVmdDsKKyAgZ3VpbnQ4ICpwdHIgPSBkZXN0OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVGRkVSIChidWZmZXIpLCAwKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRlc3QgIT0gTlVMTCwgMCk7CisKKyAgbGVuID0gR1NUX0JVRkZFUl9NRU1fTEVOIChidWZmZXIpOworICBsZWZ0ID0gc2l6ZTsKKworICBmb3IgKGkgPSAwOyBpIDwgbGVuICYmIGxlZnQgPiAwOyBpKyspIHsKKyAgICBndWludDggKmRhdGE7CisgICAgZ3NpemUgc3NpemUsIHRvY29weTsKKyAgICBHc3RNZW1vcnkgKm1lbTsKKworICAgIG1lbSA9IEdTVF9CVUZGRVJfTUVNX1BUUiAoYnVmZmVyLCBpKTsKKworICAgIGRhdGEgPSBnc3RfbWVtb3J5X21hcCAobWVtLCAmc3NpemUsIE5VTEwsIEdTVF9NQVBfUkVBRCk7CisgICAgaWYgKHNzaXplID4gb2Zmc2V0KSB7CisgICAgICAvKiB3ZSBoYXZlIGVub3VnaCAqLworICAgICAgdG9jb3B5ID0gTUlOIChzc2l6ZSAtIG9mZnNldCwgbGVmdCk7CisgICAgICBtZW1jcHkgKHB0ciwgZGF0YSArIG9mZnNldCwgdG9jb3B5KTsKKyAgICAgIGxlZnQgLT0gdG9jb3B5OworICAgICAgcHRyICs9IHRvY29weTsKKyAgICAgIG9mZnNldCA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIG9mZnNldCBwYXN0IGJ1ZmZlciwgc2tpcCAqLworICAgICAgb2Zmc2V0IC09IHNzaXplOworICAgIH0KKyAgICBnc3RfbWVtb3J5X3VubWFwIChtZW0sIGRhdGEsIHNzaXplKTsKKyAgfQorICByZXR1cm4gc2l6ZSAtIGxlZnQ7Cit9CisKKy8qKgorICogZ3N0X2J1ZmZlcl9tZW1jbXA6CisgKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIuCisgKiBAb2Zmc2V0OiB0aGUgb2Zmc2V0IGluIEBidWZmZXIKKyAqIEBtZW06IHRoZSBtZW1vcnkgdG8gY29tcGFyZQorICogQHNpemU6IHRoZSBzaXplIHRvIGNvbXBhcmUKKyAqCisgKiBDb21wYXJlIEBzaXplIGJ5dGVzIHN0YXJ0aW5nIGZyb20gQG9mZnNldCBpbiBAYnVmZmVyIHdpdGggdGhlIG1lbW9yeSBpbiBAbWVtLgorICoKKyAqIFJldHVybnM6IDAgaWYgdGhlIG1lbW9yeSBpcyBlcXVhbC4KKyAqLworZ2ludAorZ3N0X2J1ZmZlcl9tZW1jbXAgKEdzdEJ1ZmZlciAqIGJ1ZmZlciwgZ3NpemUgb2Zmc2V0LCBnY29uc3Rwb2ludGVyIG1lbSwKKyAgICBnc2l6ZSBzaXplKQoreworICBnc2l6ZSBpLCBsZW47CisgIGNvbnN0IGd1aW50OCAqcHRyID0gbWVtOworICBnaW50IHJlcyA9IDA7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVIgKGJ1ZmZlciksIDApOworICBnX3JldHVybl92YWxfaWZfZmFpbCAobWVtICE9IE5VTEwsIDApOworCisgIGxlbiA9IEdTVF9CVUZGRVJfTUVNX0xFTiAoYnVmZmVyKTsKKworICBmb3IgKGkgPSAwOyBpIDwgbGVuICYmIHNpemUgPiAwICYmIHJlcyA9PSAwOyBpKyspIHsKKyAgICBndWludDggKmRhdGE7CisgICAgZ3NpemUgc3NpemUsIHRvY21wOworICAgIEdzdE1lbW9yeSAqbWVtOworCisgICAgbWVtID0gR1NUX0JVRkZFUl9NRU1fUFRSIChidWZmZXIsIGkpOworCisgICAgZGF0YSA9IGdzdF9tZW1vcnlfbWFwIChtZW0sICZzc2l6ZSwgTlVMTCwgR1NUX01BUF9SRUFEKTsKKyAgICBpZiAoc3NpemUgPiBvZmZzZXQpIHsKKyAgICAgIC8qIHdlIGhhdmUgZW5vdWdoICovCisgICAgICB0b2NtcCA9IE1JTiAoc3NpemUgLSBvZmZzZXQsIHNpemUpOworICAgICAgcmVzID0gbWVtY21wIChwdHIsIGRhdGEgKyBvZmZzZXQsIHRvY21wKTsKKyAgICAgIHNpemUgLT0gdG9jbXA7CisgICAgICBwdHIgKz0gdG9jbXA7CisgICAgICBvZmZzZXQgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAvKiBvZmZzZXQgcGFzdCBidWZmZXIsIHNraXAgKi8KKyAgICAgIG9mZnNldCAtPSBzc2l6ZTsKKyAgICB9CisgICAgZ3N0X21lbW9yeV91bm1hcCAobWVtLCBkYXRhLCBzc2l6ZSk7CisgIH0KKyAgcmV0dXJuIHJlczsKK30KKworLyoqCisgKiBnc3RfYnVmZmVyX21lbXNldDoKKyAqIEBidWZmZXI6IGEgI0dzdEJ1ZmZlci4KKyAqIEBvZmZzZXQ6IHRoZSBvZmZzZXQgaW4gQGJ1ZmZlcgorICogQHZhbDogdGhlIHZhbHVlIHRvIHNldAorICogQHNpemU6IHRoZSBzaXplIHRvIHNldAorICoKKyAqIEZpbGwgQGJ1ZiB3aXRoIEBzaXplIGJ5dGVzIHdpdGggQHZhbCBzdGFydGluZyBmcm9tIEBvZmZzZXQuCisgKgorICogUmV0dXJuczogVGhlIGFtb3VudCBvZiBieXRlcyBmaWxsZWQuIFRoaXMgdmFsdWUgY2FuIGJlIGxvd2VyIHRoYW4gQHNpemUKKyAqICAgIHdoZW4gQGJ1ZmZlciBkaWQgbm90IGNvbnRhaW4gZW5vdWdoIGRhdGEuCisgKi8KK2dzaXplCitnc3RfYnVmZmVyX21lbXNldCAoR3N0QnVmZmVyICogYnVmZmVyLCBnc2l6ZSBvZmZzZXQsIGd1aW50OCB2YWwsIGdzaXplIHNpemUpCit7CisgIGdzaXplIGksIGxlbiwgbGVmdDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVRkZFUiAoYnVmZmVyKSwgMCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3RfYnVmZmVyX2lzX3dyaXRhYmxlIChidWZmZXIpLCAwKTsKKworICBsZW4gPSBHU1RfQlVGRkVSX01FTV9MRU4gKGJ1ZmZlcik7CisgIGxlZnQgPSBzaXplOworCisgIGZvciAoaSA9IDA7IGkgPCBsZW4gJiYgbGVmdCA+IDA7IGkrKykgeworICAgIGd1aW50OCAqZGF0YTsKKyAgICBnc2l6ZSBzc2l6ZSwgdG9zZXQ7CisgICAgR3N0TWVtb3J5ICptZW07CisKKyAgICBtZW0gPSBHU1RfQlVGRkVSX01FTV9QVFIgKGJ1ZmZlciwgaSk7CisKKyAgICBkYXRhID0gZ3N0X21lbW9yeV9tYXAgKG1lbSwgJnNzaXplLCBOVUxMLCBHU1RfTUFQX1dSSVRFKTsKKyAgICBpZiAoc3NpemUgPiBvZmZzZXQpIHsKKyAgICAgIC8qIHdlIGhhdmUgZW5vdWdoICovCisgICAgICB0b3NldCA9IE1JTiAoc3NpemUgLSBvZmZzZXQsIGxlZnQpOworICAgICAgbWVtc2V0IChkYXRhICsgb2Zmc2V0LCB2YWwsIHRvc2V0KTsKKyAgICAgIGxlZnQgLT0gdG9zZXQ7CisgICAgICBvZmZzZXQgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAvKiBvZmZzZXQgcGFzdCBidWZmZXIsIHNraXAgKi8KKyAgICAgIG9mZnNldCAtPSBzc2l6ZTsKKyAgICB9CisgICAgZ3N0X21lbW9yeV91bm1hcCAobWVtLCBkYXRhLCBzc2l6ZSk7CisgIH0KKyAgcmV0dXJuIHNpemUgLSBsZWZ0OworfQorCisvKioKKyAqIGdzdF9idWZmZXJfY29weV9yZWdpb246CisgKiBAcGFyZW50OiBhICNHc3RCdWZmZXIuCisgKiBAZmxhZ3M6IHRoZSAjR3N0QnVmZmVyQ29weUZsYWdzCisgKiBAb2Zmc2V0OiB0aGUgb2Zmc2V0IGludG8gcGFyZW50ICNHc3RCdWZmZXIgYXQgd2hpY2ggdGhlIG5ldyBzdWItYnVmZmVyIAorICogICAgICAgICAgYmVnaW5zLgorICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSBuZXcgI0dzdEJ1ZmZlciBzdWItYnVmZmVyLCBpbiBieXRlcy4KKyAqCisgKiBDcmVhdGVzIGEgc3ViLWJ1ZmZlciBmcm9tIEBwYXJlbnQgYXQgQG9mZnNldCBhbmQgQHNpemUuCisgKiBUaGlzIHN1Yi1idWZmZXIgdXNlcyB0aGUgYWN0dWFsIG1lbW9yeSBzcGFjZSBvZiB0aGUgcGFyZW50IGJ1ZmZlci4KKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjb3B5IHRoZSBvZmZzZXQgYW5kIHRpbWVzdGFtcCBmaWVsZHMgd2hlbiB0aGUKKyAqIG9mZnNldCBpcyAwLiBJZiBub3QsIHRoZXkgd2lsbCBiZSBzZXQgdG8gI0dTVF9DTE9DS19USU1FX05PTkUgYW5kIAorICogI0dTVF9CVUZGRVJfT0ZGU0VUX05PTkUuCisgKiBJZiBAb2Zmc2V0IGVxdWFscyAwIGFuZCBAc2l6ZSBlcXVhbHMgdGhlIHRvdGFsIHNpemUgb2YgQGJ1ZmZlciwgdGhlCisgKiBkdXJhdGlvbiBhbmQgb2Zmc2V0IGVuZCBmaWVsZHMgYXJlIGFsc28gY29waWVkLiBJZiBub3QgdGhleSB3aWxsIGJlIHNldAorICogdG8gI0dTVF9DTE9DS19USU1FX05PTkUgYW5kICNHU1RfQlVGRkVSX09GRlNFVF9OT05FLgorICoKKyAqIE1UIHNhZmUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3ICNHc3RCdWZmZXIgb3IgTlVMTCBpZiB0aGUgYXJndW1lbnRzIHdlcmUKKyAqICAgICBpbnZhbGlkLgorICovCitHc3RCdWZmZXIgKgorZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAoR3N0QnVmZmVyICogYnVmZmVyLCBHc3RCdWZmZXJDb3B5RmxhZ3MgZmxhZ3MsCisgICAgZ3NpemUgb2Zmc2V0LCBnc2l6ZSBzaXplKQoreworICBHc3RCdWZmZXIgKmNvcHk7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGJ1ZmZlciAhPSBOVUxMLCBOVUxMKTsKKworICAvKiBjcmVhdGUgdGhlIG5ldyBidWZmZXIgKi8KKyAgY29weSA9IGdzdF9idWZmZXJfbmV3ICgpOworCisgIEdTVF9DQVRfTE9HIChHU1RfQ0FUX0JVRkZFUiwgIm5ldyByZWdpb24gY29weSAlcCBvZiAlcCAlIiBHX0dTSVpFX0ZPUk1BVAorICAgICAgIi0lIiBHX0dTSVpFX0ZPUk1BVCwgY29weSwgYnVmZmVyLCBvZmZzZXQsIHNpemUpOworCisgIGdzdF9idWZmZXJfY29weV9pbnRvIChjb3B5LCBidWZmZXIsIGZsYWdzLCBvZmZzZXQsIHNpemUpOworCisgIHJldHVybiBjb3B5OworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK19nc3RfYnVmZmVyX2Fycl9pc19zcGFuX2Zhc3QgKEdzdE1lbW9yeSAqKiBtZW1bXSwgZ3NpemUgbGVuW10sIGd1aW50IG4sCisgICAgZ3NpemUgKiBvZmZzZXQsIEdzdE1lbW9yeSAqKiBwYXJlbnQpCit7CisgIEdzdE1lbW9yeSAqbWN1ciwgKm1wcnY7CisgIGdib29sZWFuIGhhdmVfb2Zmc2V0ID0gRkFMU0U7CisgIGd1aW50IGNvdW50LCBpOworCisgIG1jdXIgPSBtcHJ2ID0gTlVMTDsKKyAgZm9yIChjb3VudCA9IDA7IGNvdW50IDwgbjsgY291bnQrKykgeworICAgIGdzaXplIG9mZnMsIGNsZW47CisgICAgR3N0TWVtb3J5ICoqY21lbTsKKworICAgIGNtZW0gPSBtZW1bY291bnRdOworICAgIGNsZW4gPSBsZW5bY291bnRdOworCisgICAgZm9yIChpID0gMDsgaSA8IGNsZW47IGkrKykgeworICAgICAgaWYgKG1jdXIpCisgICAgICAgIG1wcnYgPSBtY3VyOworICAgICAgbWN1ciA9IGNtZW1baV07CisKKyAgICAgIGlmIChtcHJ2ICYmIG1jdXIpIHsKKyAgICAgICAgLyogY2hlY2sgaXMgbWVtb3J5IGlzIGNvbnRpZ3VvdXMgKi8KKyAgICAgICAgaWYgKCFnc3RfbWVtb3J5X2lzX3NwYW4gKG1wcnYsIG1jdXIsICZvZmZzKSkKKyAgICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAgICAgaWYgKCFoYXZlX29mZnNldCkgeworICAgICAgICAgIGlmIChvZmZzZXQpCisgICAgICAgICAgICAqb2Zmc2V0ID0gb2ZmczsKKyAgICAgICAgICBpZiAocGFyZW50KQorICAgICAgICAgICAgKnBhcmVudCA9IG1wcnYtPnBhcmVudDsKKworICAgICAgICAgIGhhdmVfb2Zmc2V0ID0gVFJVRTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gaGF2ZV9vZmZzZXQ7Cit9CisKK3N0YXRpYyBHc3RNZW1vcnkgKgorX2dzdF9idWZmZXJfYXJyX3NwYW4gKEdzdE1lbW9yeSAqKiBtZW1bXSwgZ3NpemUgbGVuW10sIGd1aW50IG4sIGdzaXplIG9mZnNldCwKKyAgICBnc2l6ZSBzaXplLCBnYm9vbGVhbiB3cml0YWJsZSkKK3sKKyAgR3N0TWVtb3J5ICpzcGFuLCAqcGFyZW50ID0gTlVMTDsKKyAgZ3NpemUgcG9mZnNldCA9IDA7CisKKyAgaWYgKCF3cml0YWJsZQorICAgICAgJiYgX2dzdF9idWZmZXJfYXJyX2lzX3NwYW5fZmFzdCAobWVtLCBsZW4sIG4sICZwb2Zmc2V0LCAmcGFyZW50KSkgeworICAgIGlmIChwYXJlbnQtPmZsYWdzICYgR1NUX01FTU9SWV9GTEFHX05PX1NIQVJFKQorICAgICAgc3BhbiA9IGdzdF9tZW1vcnlfY29weSAocGFyZW50LCBvZmZzZXQgKyBwb2Zmc2V0LCBzaXplKTsKKyAgICBlbHNlCisgICAgICBzcGFuID0gZ3N0X21lbW9yeV9zaGFyZSAocGFyZW50LCBvZmZzZXQgKyBwb2Zmc2V0LCBzaXplKTsKKyAgfSBlbHNlIHsKKyAgICBnc2l6ZSBjb3VudCwgbGVmdDsKKyAgICBndWludDggKmRlc3QsICpwdHI7CisKKyAgICBzcGFuID0gZ3N0X2FsbG9jYXRvcl9hbGxvYyAoTlVMTCwgc2l6ZSwgMCk7CisgICAgZGVzdCA9IGdzdF9tZW1vcnlfbWFwIChzcGFuLCBOVUxMLCBOVUxMLCBHU1RfTUFQX1dSSVRFKTsKKworICAgIHB0ciA9IGRlc3Q7CisgICAgbGVmdCA9IHNpemU7CisKKyAgICBmb3IgKGNvdW50ID0gMDsgY291bnQgPCBuOyBjb3VudCsrKSB7CisgICAgICBnc2l6ZSBpLCB0b2NvcHksIGNsZW4sIHNzaXplOworICAgICAgZ3VpbnQ4ICpzcmM7CisgICAgICBHc3RNZW1vcnkgKipjbWVtOworCisgICAgICBjbWVtID0gbWVtW2NvdW50XTsKKyAgICAgIGNsZW4gPSBsZW5bY291bnRdOworCisgICAgICBmb3IgKGkgPSAwOyBpIDwgY2xlbiAmJiBsZWZ0ID4gMDsgaSsrKSB7CisgICAgICAgIHNyYyA9IGdzdF9tZW1vcnlfbWFwIChjbWVtW2ldLCAmc3NpemUsIE5VTEwsIEdTVF9NQVBfUkVBRCk7CisgICAgICAgIHRvY29weSA9IE1JTiAoc3NpemUsIGxlZnQpOworICAgICAgICBpZiAodG9jb3B5ID4gb2Zmc2V0KSB7CisgICAgICAgICAgbWVtY3B5IChwdHIsIHNyYyArIG9mZnNldCwgdG9jb3B5IC0gb2Zmc2V0KTsKKyAgICAgICAgICBsZWZ0IC09IHRvY29weTsKKyAgICAgICAgICBwdHIgKz0gdG9jb3B5OworICAgICAgICAgIG9mZnNldCA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgb2Zmc2V0IC09IHRvY29weTsKKyAgICAgICAgfQorICAgICAgICBnc3RfbWVtb3J5X3VubWFwIChjbWVtW2ldLCBzcmMsIHNzaXplKTsKKyAgICAgIH0KKyAgICB9CisgICAgZ3N0X21lbW9yeV91bm1hcCAoc3BhbiwgZGVzdCwgc2l6ZSk7CisgIH0KKyAgcmV0dXJuIHNwYW47Cit9CisKKy8qKgorICogZ3N0X2J1ZmZlcl9pc19zcGFuX2Zhc3Q6CisgKiBAYnVmMTogdGhlIGZpcnN0ICNHc3RCdWZmZXIuCisgKiBAYnVmMjogdGhlIHNlY29uZCAjR3N0QnVmZmVyLgorICoKKyAqIERldGVybWluZXMgd2hldGhlciBhIGdzdF9idWZmZXJfc3BhbigpIGNhbiBiZSBkb25lIHdpdGhvdXQgY29weWluZworICogdGhlIGNvbnRlbnRzLCB0aGF0IGlzLCB3aGV0aGVyIHRoZSBkYXRhIGFyZWFzIGFyZSBjb250aWd1b3VzIHN1Yi1idWZmZXJzIG9mCisgKiB0aGUgc2FtZSBidWZmZXIuCisgKgorICogTVQgc2FmZS4KKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIGJ1ZmZlcnMgYXJlIGNvbnRpZ3VvdXMsCisgKiBGQUxTRSBpZiBhIGNvcHkgd291bGQgYmUgcmVxdWlyZWQuCisgKi8KK2dib29sZWFuCitnc3RfYnVmZmVyX2lzX3NwYW5fZmFzdCAoR3N0QnVmZmVyICogYnVmMSwgR3N0QnVmZmVyICogYnVmMikKK3sKKyAgR3N0TWVtb3J5ICoqbWVtWzJdOworICBnc2l6ZSBsZW5bMl07CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVIgKGJ1ZjEpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVGRkVSIChidWYyKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoYnVmMS0+bWluaV9vYmplY3QucmVmY291bnQgPiAwLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChidWYyLT5taW5pX29iamVjdC5yZWZjb3VudCA+IDAsIEZBTFNFKTsKKworICBtZW1bMF0gPSBHU1RfQlVGRkVSX01FTV9BUlJBWSAoYnVmMSk7CisgIGxlblswXSA9IEdTVF9CVUZGRVJfTUVNX0xFTiAoYnVmMSk7CisgIG1lbVsxXSA9IEdTVF9CVUZGRVJfTUVNX0FSUkFZIChidWYyKTsKKyAgbGVuWzFdID0gR1NUX0JVRkZFUl9NRU1fTEVOIChidWYyKTsKKworICByZXR1cm4gX2dzdF9idWZmZXJfYXJyX2lzX3NwYW5fZmFzdCAobWVtLCBsZW4sIDIsIE5VTEwsIE5VTEwpOworfQorCisvKioKKyAqIGdzdF9idWZmZXJfc3BhbjoKKyAqIEBidWYxOiB0aGUgZmlyc3Qgc291cmNlICNHc3RCdWZmZXIgdG8gbWVyZ2UuCisgKiBAb2Zmc2V0OiB0aGUgb2Zmc2V0IGluIHRoZSBmaXJzdCBidWZmZXIgZnJvbSB3aGVyZSB0aGUgbmV3CisgKiBidWZmZXIgc2hvdWxkIHN0YXJ0LgorICogQGJ1ZjI6IHRoZSBzZWNvbmQgc291cmNlICNHc3RCdWZmZXIgdG8gbWVyZ2UuCisgKiBAc2l6ZTogdGhlIHRvdGFsIHNpemUgb2YgdGhlIG5ldyBidWZmZXIuCisgKgorICogQ3JlYXRlcyBhIG5ldyBidWZmZXIgdGhhdCBjb25zaXN0cyBvZiBwYXJ0IG9mIGJ1ZjEgYW5kIGJ1ZjIuCisgKiBMb2dpY2FsbHksIGJ1ZjEgYW5kIGJ1ZjIgYXJlIGNvbmNhdGVuYXRlZCBpbnRvIGEgc2luZ2xlIGxhcmdlcgorICogYnVmZmVyLCBhbmQgYSBuZXcgYnVmZmVyIGlzIGNyZWF0ZWQgYXQgdGhlIGdpdmVuIG9mZnNldCBpbnNpZGUKKyAqIHRoaXMgc3BhY2UsIHdpdGggYSBnaXZlbiBsZW5ndGguCisgKgorICogSWYgdGhlIHR3byBzb3VyY2UgYnVmZmVycyBhcmUgY2hpbGRyZW4gb2YgdGhlIHNhbWUgbGFyZ2VyIGJ1ZmZlciwKKyAqIGFuZCBhcmUgY29udGlndW91cywgdGhlIG5ldyBidWZmZXIgd2lsbCBiZSBhIGNoaWxkIG9mIHRoZSBzaGFyZWQKKyAqIHBhcmVudCwgYW5kIHRodXMgbm8gY29weWluZyBpcyBuZWNlc3NhcnkuIHlvdSBjYW4gdXNlCisgKiBnc3RfYnVmZmVyX2lzX3NwYW5fZmFzdCgpIHRvIGRldGVybWluZSBpZiBhIG1lbWNweSB3aWxsIGJlIG5lZWRlZC4KKyAqCisgKiBNVCBzYWZlLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ldyAjR3N0QnVmZmVyIHRoYXQgc3BhbnMgdGhlIHR3byBzb3VyY2UKKyAqICAgICBidWZmZXJzLCBvciBOVUxMIGlmIHRoZSBhcmd1bWVudHMgYXJlIGludmFsaWQuCisgKi8KK0dzdEJ1ZmZlciAqCitnc3RfYnVmZmVyX3NwYW4gKEdzdEJ1ZmZlciAqIGJ1ZjEsIGdzaXplIG9mZnNldCwgR3N0QnVmZmVyICogYnVmMiwgZ3NpemUgc2l6ZSkKK3sKKyAgR3N0QnVmZmVyICpuZXdidWY7CisgIEdzdE1lbW9yeSAqc3BhbjsKKyAgR3N0TWVtb3J5ICoqbWVtWzJdOworICBnc2l6ZSBsZW5bMl0sIGxlbjEsIGxlbjI7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVIgKGJ1ZjEpLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVIgKGJ1ZjIpLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGJ1ZjEtPm1pbmlfb2JqZWN0LnJlZmNvdW50ID4gMCwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChidWYyLT5taW5pX29iamVjdC5yZWZjb3VudCA+IDAsIE5VTEwpOworICBsZW4xID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmMSk7CisgIGxlbjIgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWYyKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGxlbjEgKyBsZW4yID4gb2Zmc2V0LCBOVUxMKTsKKyAgaWYgKHNpemUgPT0gLTEpCisgICAgc2l6ZSA9IGxlbjEgKyBsZW4yIC0gb2Zmc2V0OworICBlbHNlCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNpemUgPD0gbGVuMSArIGxlbjIgLSBvZmZzZXQsIE5VTEwpOworCisgIG1lbVswXSA9IEdTVF9CVUZGRVJfTUVNX0FSUkFZIChidWYxKTsKKyAgbGVuWzBdID0gR1NUX0JVRkZFUl9NRU1fTEVOIChidWYxKTsKKyAgbWVtWzFdID0gR1NUX0JVRkZFUl9NRU1fQVJSQVkgKGJ1ZjIpOworICBsZW5bMV0gPSBHU1RfQlVGRkVSX01FTV9MRU4gKGJ1ZjIpOworCisgIHNwYW4gPSBfZ3N0X2J1ZmZlcl9hcnJfc3BhbiAobWVtLCBsZW4sIDIsIG9mZnNldCwgc2l6ZSwgRkFMU0UpOworCisgIG5ld2J1ZiA9IGdzdF9idWZmZXJfbmV3ICgpOworICBfbWVtb3J5X2FkZCAobmV3YnVmLCAtMSwgc3Bhbik7CisKKyNpZiAwCisgIC8qIGlmIHRoZSBvZmZzZXQgaXMgMCwgdGhlIG5ldyBidWZmZXIgaGFzIHRoZSBzYW1lIHRpbWVzdGFtcCBhcyBidWYxICovCisgIGlmIChvZmZzZXQgPT0gMCkgeworICAgIEdTVF9CVUZGRVJfT0ZGU0VUIChuZXdidWYpID0gR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZjEpOworICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChuZXdidWYpID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZjEpOworCisgICAgLyogaWYgd2UgY29tcGxldGVseSBtZXJnZWQgdGhlIHR3byBidWZmZXJzIChhcHBlbmRlZCksIHdlIGNhbgorICAgICAqIGNhbGN1bGF0ZSB0aGUgZHVyYXRpb24gdG9vLiBBbHNvIG1ha2Ugc3VyZSB3ZSdzIG5vdCBtZXNzaW5nIHdpdGgKKyAgICAgKiBpbnZhbGlkIERVUkFUSU9OUyAqLworICAgIGlmIChidWYxLT5zaXplICsgYnVmMi0+c2l6ZSA9PSBsZW4pIHsKKyAgICAgIGlmIChHU1RfQlVGRkVSX0RVUkFUSU9OX0lTX1ZBTElEIChidWYxKSAmJgorICAgICAgICAgIEdTVF9CVUZGRVJfRFVSQVRJT05fSVNfVkFMSUQgKGJ1ZjIpKSB7CisgICAgICAgIC8qIGFkZCBkdXJhdGlvbiAqLworICAgICAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChuZXdidWYpID0gR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmMSkgKworICAgICAgICAgICAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmMik7CisgICAgICB9CisgICAgICBpZiAoR1NUX0JVRkZFUl9PRkZTRVRfRU5EX0lTX1ZBTElEIChidWYyKSkgeworICAgICAgICAvKiBhZGQgb2Zmc2V0X2VuZCAqLworICAgICAgICBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKG5ld2J1ZikgPSBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKGJ1ZjIpOworICAgICAgfQorICAgIH0KKyAgfQorI2VuZGlmCisKKyAgcmV0dXJuIG5ld2J1ZjsKK30KKworLyoqCisgKiBnc3RfYnVmZmVyX2dldF9tZXRhOgorICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyCisgKiBAaW5mbzogYSAjR3N0TWV0YUluZm8KKyAqCisgKiBHZXQgdGhlIG1ldGFkYXRhIGZvciB0aGUgYXBpIGluIEBpbmZvIG9uIGJ1ZmZlci4gV2hlbiB0aGVyZSBpcyBubyBzdWNoCisgKiBtZXRhZGF0YSwgTlVMTCBpcyByZXR1cm5lZC4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIHJlc3VsdCBtZXRhZGF0YSBtaWdodCBub3QgYmUgb2YgdGhlIGltcGxlbWVudGF0aW9uIEBpbmZvLgorICoKKyAqIFJldHVybnM6IHRoZSBtZXRhZGF0YSBmb3IgdGhlIGFwaSBpbiBAaW5mbyBvbiBAYnVmZmVyLgorICovCitHc3RNZXRhICoKK2dzdF9idWZmZXJfZ2V0X21ldGEgKEdzdEJ1ZmZlciAqIGJ1ZmZlciwgY29uc3QgR3N0TWV0YUluZm8gKiBpbmZvKQoreworICBHc3RNZXRhSXRlbSAqaXRlbTsKKyAgR3N0TWV0YSAqcmVzdWx0ID0gTlVMTDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoYnVmZmVyICE9IE5VTEwsIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoaW5mbyAhPSBOVUxMLCBOVUxMKTsKKworICAvKiBmaW5kIEdzdE1ldGEgb2YgdGhlIHJlcXVlc3RlZCBBUEkgKi8KKyAgZm9yIChpdGVtID0gR1NUX0JVRkZFUl9NRVRBIChidWZmZXIpOyBpdGVtOyBpdGVtID0gaXRlbS0+bmV4dCkgeworICAgIEdzdE1ldGEgKm1ldGEgPSAmaXRlbS0+bWV0YTsKKyAgICBpZiAobWV0YS0+aW5mby0+YXBpID09IGluZm8tPmFwaSkgeworICAgICAgcmVzdWx0ID0gbWV0YTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGdzdF9idWZmZXJfYWRkX21ldGE6CisgKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIKKyAqIEBpbmZvOiBhICNHc3RNZXRhSW5mbworICogQHBhcmFtczogcGFyYW1zIGZvciBAaW5mbworICoKKyAqIEFkZCBtZXRhZGF0YSBmb3IgQGluZm8gdG8gQGJ1ZmZlciB1c2luZyB0aGUgcGFyYW1ldGVycyBpbiBAcGFyYW1zLgorICoKKyAqIFJldHVybnM6IHRoZSBtZXRhZGF0YSBmb3IgdGhlIGFwaSBpbiBAaW5mbyBvbiBAYnVmZmVyLgorICovCitHc3RNZXRhICoKK2dzdF9idWZmZXJfYWRkX21ldGEgKEdzdEJ1ZmZlciAqIGJ1ZmZlciwgY29uc3QgR3N0TWV0YUluZm8gKiBpbmZvLAorICAgIGdwb2ludGVyIHBhcmFtcykKK3sKKyAgR3N0TWV0YUl0ZW0gKml0ZW07CisgIEdzdE1ldGEgKnJlc3VsdCA9IE5VTEw7CisgIGdzaXplIHNpemU7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGJ1ZmZlciAhPSBOVUxMLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGluZm8gIT0gTlVMTCwgTlVMTCk7CisKKyAgLyogY3JlYXRlIGEgbmV3IHNsaWNlICovCisgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQlVGRkVSLCAiYWxsb2MgbWV0YWRhdGEgJXMgb2Ygc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCwKKyAgICAgIGdfdHlwZV9uYW1lIChpbmZvLT50eXBlKSwgaW5mby0+c2l6ZSk7CisKKyAgc2l6ZSA9IElURU1fU0laRSAoaW5mbyk7CisgIGl0ZW0gPSBnX3NsaWNlX2FsbG9jIChzaXplKTsKKyAgcmVzdWx0ID0gJml0ZW0tPm1ldGE7CisgIHJlc3VsdC0+aW5mbyA9IGluZm87CisKKyAgLyogY2FsbCB0aGUgaW5pdF9mdW5jIHdoZW4gbmVlZGVkICovCisgIGlmIChpbmZvLT5pbml0X2Z1bmMpCisgICAgaWYgKCFpbmZvLT5pbml0X2Z1bmMgKHJlc3VsdCwgcGFyYW1zLCBidWZmZXIpKQorICAgICAgZ290byBpbml0X2ZhaWxlZDsKKworICAvKiBhbmQgYWRkIHRvIHRoZSBsaXN0IG9mIG1ldGFkYXRhICovCisgIGl0ZW0tPm5leHQgPSBHU1RfQlVGRkVSX01FVEEgKGJ1ZmZlcik7CisgIEdTVF9CVUZGRVJfTUVUQSAoYnVmZmVyKSA9IGl0ZW07CisKKyAgcmV0dXJuIHJlc3VsdDsKKworaW5pdF9mYWlsZWQ6CisgIHsKKyAgICBnX3NsaWNlX2ZyZWUxIChzaXplLCBpdGVtKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorfQorCisvKioKKyAqIGdzdF9idWZmZXJfcmVtb3ZlX21ldGE6CisgKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIKKyAqIEBtZXRhOiBhICNHc3RNZXRhCisgKgorICogUmVtb3ZlIHRoZSBtZXRhZGF0YSBmb3IgQG1ldGEgb24gQGJ1ZmZlci4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgbWV0YWRhdGEgZXhpc3RlZCBhbmQgd2FzIHJlbW92ZWQsICVGQUxTRSBpZiBubyBzdWNoCisgKiBtZXRhZGF0YSB3YXMgb24gQGJ1ZmZlci4KKyAqLworZ2Jvb2xlYW4KK2dzdF9idWZmZXJfcmVtb3ZlX21ldGEgKEdzdEJ1ZmZlciAqIGJ1ZmZlciwgR3N0TWV0YSAqIG1ldGEpCit7CisgIEdzdE1ldGFJdGVtICp3YWxrLCAqcHJldjsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoYnVmZmVyICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG1ldGEgIT0gTlVMTCwgRkFMU0UpOworCisgIC8qIGZpbmQgdGhlIG1ldGFkYXRhIGFuZCBkZWxldGUgKi8KKyAgcHJldiA9IEdTVF9CVUZGRVJfTUVUQSAoYnVmZmVyKTsKKyAgZm9yICh3YWxrID0gcHJldjsgd2Fsazsgd2FsayA9IHdhbGstPm5leHQpIHsKKyAgICBHc3RNZXRhICptID0gJndhbGstPm1ldGE7CisgICAgaWYgKG0gPT0gbWV0YSkgeworICAgICAgY29uc3QgR3N0TWV0YUluZm8gKmluZm8gPSBtZXRhLT5pbmZvOworCisgICAgICAvKiByZW1vdmUgZnJvbSBsaXN0ICovCisgICAgICBpZiAoR1NUX0JVRkZFUl9NRVRBIChidWZmZXIpID09IHdhbGspCisgICAgICAgIEdTVF9CVUZGRVJfTUVUQSAoYnVmZmVyKSA9IHdhbGstPm5leHQ7CisgICAgICBlbHNlCisgICAgICAgIHByZXYtPm5leHQgPSB3YWxrLT5uZXh0OworICAgICAgLyogY2FsbCBmcmVlX2Z1bmMgaWYgYW55ICovCisgICAgICBpZiAoaW5mby0+ZnJlZV9mdW5jKQorICAgICAgICBpbmZvLT5mcmVlX2Z1bmMgKG0sIGJ1ZmZlcik7CisKKyAgICAgIC8qIGFuZCBmcmVlIHRoZSBzbGljZSAqLworICAgICAgZ19zbGljZV9mcmVlMSAoSVRFTV9TSVpFIChpbmZvKSwgd2Fsayk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgcHJldiA9IHdhbGs7CisgIH0KKyAgcmV0dXJuIHdhbGsgIT0gTlVMTDsKK30KKworLyoqCisgKiBnc3RfYnVmZmVyX2l0ZXJhdGVfbWV0YToKKyAqIEBidWZmZXI6IGEgI0dzdEJ1ZmZlcgorICogQHN0YXRlOiBhbiBvcGFxdWUgc3RhdGUgcG9pbnRlcgorICoKKyAqIFJldHJpZXZlIHRoZSBuZXh0ICNHc3RNZXRhIGFmdGVyIEBjdXJyZW50LiBJZiBAc3RhdGUgcG9pbnRzCisgKiB0byAlTlVMTCwgdGhlIGZpcnN0IG1ldGFkYXRhIGlzIHJldHVybmVkLgorICoKKyAqIEBzdGF0ZSB3aWxsIGJlIHVwZGF0ZWQgd2l0aCBhbiBvcGFnZSBzdGF0ZSBwb2ludGVyIAorICoKKyAqIFJldHVybnM6IFRoZSBuZXh0ICNHc3RNZXRhIG9yICVOVUxMIHdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgaXRlbXMuCisgKi8KK0dzdE1ldGEgKgorZ3N0X2J1ZmZlcl9pdGVyYXRlX21ldGEgKEdzdEJ1ZmZlciAqIGJ1ZmZlciwgZ3BvaW50ZXIgKiBzdGF0ZSkKK3sKKyAgR3N0TWV0YUl0ZW0gKiptZXRhOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChidWZmZXIgIT0gTlVMTCwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdGF0ZSAhPSBOVUxMLCBOVUxMKTsKKworICBtZXRhID0gKEdzdE1ldGFJdGVtICoqKSBzdGF0ZTsKKyAgaWYgKCptZXRhID09IE5VTEwpCisgICAgLyogc3RhdGUgTlVMTCwgbW92ZSB0byBmaXJzdCBpdGVtICovCisgICAgKm1ldGEgPSBHU1RfQlVGRkVSX01FVEEgKGJ1ZmZlcik7CisgIGVsc2UKKyAgICAvKiBzdGF0ZSAhTlVMTCwgbW92ZSB0byBuZXh0IGl0ZW0gaW4gbGlzdCAqLworICAgICptZXRhID0gKCptZXRhKS0+bmV4dDsKKworICBpZiAoKm1ldGEpCisgICAgcmV0dXJuICYoKm1ldGEpLT5tZXRhOworICBlbHNlCisgICAgcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9nc3QvZ3N0YnVmZmVyLmggYi9nc3QvZ3N0YnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI1YWY0ZAotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RidWZmZXIuaApAQCAtMCwwICsxLDQ5OSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgorICoKKyAqIGdzdGJ1ZmZlci5oOiBIZWFkZXIgZm9yIEdzdEJ1ZmZlciBvYmplY3QKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKKyNpZm5kZWYgX19HU1RfQlVGRkVSX0hfXworI2RlZmluZSBfX0dTVF9CVUZGRVJfSF9fCisKKyNpbmNsdWRlIDxnc3QvZ3N0bWluaW9iamVjdC5oPgorI2luY2x1ZGUgPGdzdC9nc3RjbG9jay5oPgorI2luY2x1ZGUgPGdzdC9nc3RjYXBzLmg+CisjaW5jbHVkZSA8Z3N0L2dzdG1lbW9yeS5oPgorCitHX0JFR0lOX0RFQ0xTCisKK2V4dGVybiBHVHlwZSBfZ3N0X2J1ZmZlcl90eXBlOworCit0eXBlZGVmIHN0cnVjdCBfR3N0QnVmZmVyIEdzdEJ1ZmZlcjsKK3R5cGVkZWYgc3RydWN0IF9Hc3RCdWZmZXJQb29sIEdzdEJ1ZmZlclBvb2w7CisKKy8qKgorICogR1NUX0JVRkZFUl9UUkFDRV9OQU1FOgorICoKKyAqIFRoZSBuYW1lIHVzZWQgZm9yIHRyYWNpbmcgbWVtb3J5IGFsbG9jYXRpb25zLgorICovCisjZGVmaW5lIEdTVF9CVUZGRVJfVFJBQ0VfTkFNRSAgICAgICAgICAgIkdzdEJ1ZmZlciIKKworI2RlZmluZSBHU1RfVFlQRV9CVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgKF9nc3RfYnVmZmVyX3R5cGUpCisjZGVmaW5lIEdTVF9JU19CVUZGRVIob2JqKSAgICAgICAgICAgICAgICAgICAgICAoR1NUX0lTX01JTklfT0JKRUNUX1RZUEUob2JqLCBHU1RfVFlQRV9CVUZGRVIpKQorI2RlZmluZSBHU1RfQlVGRkVSX0NBU1Qob2JqKSAgICAgICAgICAgICAgICAgICAgKChHc3RCdWZmZXIgKikob2JqKSkKKyNkZWZpbmUgR1NUX0JVRkZFUihvYmopICAgICAgICAgICAgICAgICAgICAgICAgIChHU1RfQlVGRkVSX0NBU1Qob2JqKSkKKworLyoqCisgKiBHU1RfQlVGRkVSX0ZMQUdTOgorICogQGJ1ZjogYSAjR3N0QnVmZmVyLgorICoKKyAqIEEgZmxhZ3Mgd29yZCBjb250YWluaW5nICNHc3RCdWZmZXJGbGFnIGZsYWdzIHNldCBvbiB0aGlzIGJ1ZmZlci4KKyAqLworI2RlZmluZSBHU1RfQlVGRkVSX0ZMQUdTKGJ1ZikgICAgICAgICAgICAgICAgICAgR1NUX01JTklfT0JKRUNUX0ZMQUdTKGJ1ZikKKy8qKgorICogR1NUX0JVRkZFUl9GTEFHX0lTX1NFVDoKKyAqIEBidWY6IGEgI0dzdEJ1ZmZlci4KKyAqIEBmbGFnOiB0aGUgI0dzdEJ1ZmZlckZsYWcgdG8gY2hlY2suCisgKgorICogR2l2ZXMgdGhlIHN0YXR1cyBvZiBhIHNwZWNpZmljIGZsYWcgb24gYSBidWZmZXIuCisgKi8KKyNkZWZpbmUgR1NUX0JVRkZFUl9GTEFHX0lTX1NFVChidWYsZmxhZykgICAgICAgIEdTVF9NSU5JX09CSkVDVF9GTEFHX0lTX1NFVCAoYnVmLCBmbGFnKQorLyoqCisgKiBHU1RfQlVGRkVSX0ZMQUdfU0VUOgorICogQGJ1ZjogYSAjR3N0QnVmZmVyLgorICogQGZsYWc6IHRoZSAjR3N0QnVmZmVyRmxhZyB0byBzZXQuCisgKgorICogU2V0cyBhIGJ1ZmZlciBmbGFnIG9uIGEgYnVmZmVyLgorICovCisjZGVmaW5lIEdTVF9CVUZGRVJfRkxBR19TRVQoYnVmLGZsYWcpICAgICAgICAgICBHU1RfTUlOSV9PQkpFQ1RfRkxBR19TRVQgKGJ1ZiwgZmxhZykKKy8qKgorICogR1NUX0JVRkZFUl9GTEFHX1VOU0VUOgorICogQGJ1ZjogYSAjR3N0QnVmZmVyLgorICogQGZsYWc6IHRoZSAjR3N0QnVmZmVyRmxhZyB0byBjbGVhci4KKyAqCisgKiBDbGVhcnMgYSBidWZmZXIgZmxhZy4KKyAqLworI2RlZmluZSBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQoYnVmLGZsYWcpICAgICAgICAgR1NUX01JTklfT0JKRUNUX0ZMQUdfVU5TRVQgKGJ1ZiwgZmxhZykKKworLyoqCisgKiBHU1RfQlVGRkVSX1RJTUVTVEFNUDoKKyAqIEBidWY6IGEgI0dzdEJ1ZmZlci46CisgKgorICogVGhlIHRpbWVzdGFtcCBpbiBuYW5vc2Vjb25kcyAoYXMgYSAjR3N0Q2xvY2tUaW1lKSBvZiB0aGUgZGF0YSBpbiB0aGUgYnVmZmVyLgorICogVmFsdWUgd2lsbCBiZSAlR1NUX0NMT0NLX1RJTUVfTk9ORSBpZiB0aGUgdGltZXN0YW1wIGlzIHVua25vd24uCisgKgorICovCisjZGVmaW5lIEdTVF9CVUZGRVJfVElNRVNUQU1QKGJ1ZikgICAgICAgICAgICAgICAoR1NUX0JVRkZFUl9DQVNUKGJ1ZiktPnRpbWVzdGFtcCkKKy8qKgorICogR1NUX0JVRkZFUl9EVVJBVElPTjoKKyAqIEBidWY6IGEgI0dzdEJ1ZmZlci4KKyAqCisgKiBUaGUgZHVyYXRpb24gaW4gbmFub3NlY29uZHMgKGFzIGEgI0dzdENsb2NrVGltZSkgb2YgdGhlIGRhdGEgaW4gdGhlIGJ1ZmZlci4KKyAqIFZhbHVlIHdpbGwgYmUgJUdTVF9DTE9DS19USU1FX05PTkUgaWYgdGhlIGR1cmF0aW9uIGlzIHVua25vd24uCisgKi8KKyNkZWZpbmUgR1NUX0JVRkZFUl9EVVJBVElPTihidWYpICAgICAgICAgICAgICAgIChHU1RfQlVGRkVSX0NBU1QoYnVmKS0+ZHVyYXRpb24pCisvKioKKyAqIEdTVF9CVUZGRVJfT0ZGU0VUOgorICogQGJ1ZjogYSAjR3N0QnVmZmVyLgorICoKKyAqIFRoZSBvZmZzZXQgaW4gdGhlIHNvdXJjZSBmaWxlIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBidWZmZXIuCisgKi8KKyNkZWZpbmUgR1NUX0JVRkZFUl9PRkZTRVQoYnVmKSAgICAgICAgICAgICAgICAgIChHU1RfQlVGRkVSX0NBU1QoYnVmKS0+b2Zmc2V0KQorLyoqCisgKiBHU1RfQlVGRkVSX09GRlNFVF9FTkQ6CisgKiBAYnVmOiBhICNHc3RCdWZmZXIuCisgKgorICogVGhlIG9mZnNldCBpbiB0aGUgc291cmNlIGZpbGUgb2YgdGhlIGVuZCBvZiB0aGlzIGJ1ZmZlci4KKyAqLworI2RlZmluZSBHU1RfQlVGRkVSX09GRlNFVF9FTkQoYnVmKSAgICAgICAgICAgICAgKEdTVF9CVUZGRVJfQ0FTVChidWYpLT5vZmZzZXRfZW5kKQorCisvKioKKyAqIEdTVF9CVUZGRVJfT0ZGU0VUX05PTkU6CisgKgorICogQ29uc3RhbnQgZm9yIG5vLW9mZnNldCByZXR1cm4gcmVzdWx0cy4KKyAqLworI2RlZmluZSBHU1RfQlVGRkVSX09GRlNFVF9OT05FICAoKGd1aW50NjQpLTEpCisKKy8qKgorICogR1NUX0JVRkZFUl9EVVJBVElPTl9JU19WQUxJRDoKKyAqIEBidWZmZXI6IGEgI0dzdEJ1ZmZlcgorICoKKyAqIFRlc3RzIGlmIHRoZSBkdXJhdGlvbiBpcyBrbm93bi4KKyAqLworI2RlZmluZSBHU1RfQlVGRkVSX0RVUkFUSU9OX0lTX1ZBTElEKGJ1ZmZlcikgICAgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpKSkKKy8qKgorICogR1NUX0JVRkZFUl9USU1FU1RBTVBfSVNfVkFMSUQ6CisgKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIKKyAqCisgKiBUZXN0cyBpZiB0aGUgdGltZXN0YW1wIGlzIGtub3duLgorICovCisjZGVmaW5lIEdTVF9CVUZGRVJfVElNRVNUQU1QX0lTX1ZBTElEKGJ1ZmZlcikgICAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpKSkKKy8qKgorICogR1NUX0JVRkZFUl9PRkZTRVRfSVNfVkFMSUQ6CisgKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIKKyAqCisgKiBUZXN0cyBpZiB0aGUgc3RhcnQgb2Zmc2V0IGlzIGtub3duLgorICovCisjZGVmaW5lIEdTVF9CVUZGRVJfT0ZGU0VUX0lTX1ZBTElEKGJ1ZmZlcikgICAgICAoR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZmZlcikgIT0gR1NUX0JVRkZFUl9PRkZTRVRfTk9ORSkKKy8qKgorICogR1NUX0JVRkZFUl9PRkZTRVRfRU5EX0lTX1ZBTElEOgorICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyCisgKgorICogVGVzdHMgaWYgdGhlIGVuZCBvZmZzZXQgaXMga25vd24uCisgKi8KKyNkZWZpbmUgR1NUX0JVRkZFUl9PRkZTRVRfRU5EX0lTX1ZBTElEKGJ1ZmZlcikgIChHU1RfQlVGRkVSX09GRlNFVF9FTkQgKGJ1ZmZlcikgIT0gR1NUX0JVRkZFUl9PRkZTRVRfTk9ORSkKKy8qKgorICogR1NUX0JVRkZFUl9JU19ESVNDT05UOgorICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyCisgKgorICogVGVzdHMgaWYgdGhlIGJ1ZmZlciBtYXJrcyBhIGRpc2NvbnRpbnVpdHkgaW4gdGhlIHN0cmVhbS4KKyAqCisgKiBTaW5jZTogMC4xMC45CisgKi8KKyNkZWZpbmUgR1NUX0JVRkZFUl9JU19ESVNDT05UKGJ1ZmZlcikgICAoR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoYnVmZmVyLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCkpCisKKy8qKgorICogR3N0QnVmZmVyRmxhZ3M6CisgKiBAR1NUX0JVRkZFUl9GTEFHX0xJVkU6ICAgICAgICB0aGUgYnVmZmVyIGlzIGxpdmUgZGF0YSBhbmQgc2hvdWxkIGJlIGRpc2NhcmRlZCBpbgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFBBVVNFRCBzdGF0ZS4KKyAqIEBHU1RfQlVGRkVSX0ZMQUdfREVDT0RFX09OTFk6IHRoZSBidWZmZXIgY29udGFpbnMgZGF0YSB0aGF0IHNob3VsZCBiZSBkcm9wcGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWNhdXNlIGl0IHdpbGwgYmUgY2xpcHBlZCBhZ2FpbnN0IHRoZSBzZWdtZW50CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyaWVzIG9yIGJlY2F1c2UgaXQgZG9lcyBub3QgY29udGFpbiBkYXRhCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHNob3VsZCBiZSBzaG93biB0byB0aGUgdXNlci4KKyAqIEBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVDogICAgIHRoZSBidWZmZXIgbWFya3MgYSBkYXRhIGRpc2NvbnRpbnVpdHkgaW4gdGhlIHN0cmVhbS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdHlwaWNhbGx5IG9jY3VycyBhZnRlciBhIHNlZWsgb3IgYSBkcm9wcGVkIGJ1ZmZlcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBhIGxpdmUgb3IgbmV0d29yayBzb3VyY2UuCisgKiBAR1NUX0JVRkZFUl9GTEFHX1JFU1lOQzogICAgICB0aGUgYnVmZmVyIHRpbWVzdGFtcCBtaWdodCBoYXZlIGEgZGlzY29udGludWl0eQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoaXMgYnVmZmVyIGlzIGEgZ29vZCBwb2ludCB0byByZXN5bmNocm9uaXplLgorICogQEdTVF9CVUZGRVJfRkxBR19DT1JSVVBURUQ6ICAgdGhlIGJ1ZmZlciBkYXRhIGlzIGNvcnJ1cHRlZC4KKyAqIEBHU1RfQlVGRkVSX0ZMQUdfTUFSS0VSOiAgICAgIHRoZSBidWZmZXIgY29udGFpbnMgYSBtZWRpYSBzcGVjaWZpYyBtYXJrZXIuIGZvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW8gdGhpcyBpcyB0eXBpY2FsbHkgdGhlIGVuZCBvZiBhIGZyYW1lIGJvdW5kYXJ5LCBmb3IgYXVkaW8KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgaXMgdXN1YWxseSB0aGUgZW5kIG9mIGEgdGFsa3NwdXJ0LgorICogQEdTVF9CVUZGRVJfRkxBR19IRUFERVI6ICAgICAgdGhlIGJ1ZmZlciBjb250YWlucyBoZWFkZXIgaW5mb3JtYXRpb24gdGhhdCBpcworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZGVkIHRvIGRlY29kZSB0aGUgZm9sbG93aW5nIGRhdGEKKyAqIEBHU1RfQlVGRkVSX0ZMQUdfR0FQOiAgICAgICAgIHRoZSBidWZmZXIgaGFzIGJlZW4gY3JlYXRlZCB0byBmaWxsIGEgZ2FwIGluIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtIGFuZCBjb250YWlucyBtZWRpYSBuZXV0cmFsIGRhdGEgKGVsZW1lbnRzIGNhbgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIHRvIG9wdGltaXplZCBjb2RlIHBhdGggdGhhdCBpZ25vcmVzIHRoZSBidWZmZXIKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQpLgorICogQEdTVF9CVUZGRVJfRkxBR19EUk9QUEFCTEU6ICAgdGhlIGJ1ZmZlciBjYW4gYmUgZHJvcHBlZCB3aXRob3V0IGJyZWFraW5nIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLCBmb3IgZXhhbXBsZSB0byByZWR1Y2UgYmFuZHdpZHRoLgorICogQEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUOiAgdGhpcyB1bml0IGNhbm5vdCBiZSBkZWNvZGVkIGluZGVwZW5kZW50bHkuCisgKiBAR1NUX0JVRkZFUl9GTEFHX0lOX0NBUFM6ICAgICB0aGUgYnVmZmVyIGhhcyBiZWVuIGFkZGVkIGFzIGEgZmllbGQgaW4gYSAjR3N0Q2Fwcy4KKyAqIEBHU1RfQlVGRkVSX0ZMQUdfTEFTVDogICAgICAgIGFkZGl0aW9uYWwgbWVkaWEgc3BlY2lmaWMgZmxhZ3MgY2FuIGJlIGFkZGVkIHN0YXJ0aW5nIGZyb20KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgZmxhZy4KKyAqCisgKiBBIHNldCBvZiBidWZmZXIgZmxhZ3MgdXNlZCB0byBkZXNjcmliZSBwcm9wZXJ0aWVzIG9mIGEgI0dzdEJ1ZmZlci4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgR1NUX0JVRkZFUl9GTEFHX0xJVkUgICAgICAgID0gKEdTVF9NSU5JX09CSkVDVF9GTEFHX0xBU1QgPDwgMCksCisgIEdTVF9CVUZGRVJfRkxBR19ERUNPREVfT05MWSA9IChHU1RfTUlOSV9PQkpFQ1RfRkxBR19MQVNUIDw8IDEpLAorICBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCAgICAgPSAoR1NUX01JTklfT0JKRUNUX0ZMQUdfTEFTVCA8PCAyKSwKKyAgR1NUX0JVRkZFUl9GTEFHX1JFU1lOQyAgICAgID0gKEdTVF9NSU5JX09CSkVDVF9GTEFHX0xBU1QgPDwgMyksCisgIEdTVF9CVUZGRVJfRkxBR19DT1JSVVBURUQgICA9IChHU1RfTUlOSV9PQkpFQ1RfRkxBR19MQVNUIDw8IDQpLAorICBHU1RfQlVGRkVSX0ZMQUdfTUFSS0VSICAgICAgPSAoR1NUX01JTklfT0JKRUNUX0ZMQUdfTEFTVCA8PCA1KSwKKyAgR1NUX0JVRkZFUl9GTEFHX0hFQURFUiAgICAgID0gKEdTVF9NSU5JX09CSkVDVF9GTEFHX0xBU1QgPDwgNiksCisgIEdTVF9CVUZGRVJfRkxBR19HQVAgICAgICAgICA9IChHU1RfTUlOSV9PQkpFQ1RfRkxBR19MQVNUIDw8IDcpLAorICBHU1RfQlVGRkVSX0ZMQUdfRFJPUFBBQkxFICAgPSAoR1NUX01JTklfT0JKRUNUX0ZMQUdfTEFTVCA8PCA4KSwKKyAgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQgID0gKEdTVF9NSU5JX09CSkVDVF9GTEFHX0xBU1QgPDwgOSksCisgIEdTVF9CVUZGRVJfRkxBR19JTl9DQVBTICAgICA9IChHU1RfTUlOSV9PQkpFQ1RfRkxBR19MQVNUIDw8IDEwKSwKKworICBHU1RfQlVGRkVSX0ZMQUdfTEFTVCAgICAgICAgPSAoR1NUX01JTklfT0JKRUNUX0ZMQUdfTEFTVCA8PCAyMCkKK30gR3N0QnVmZmVyRmxhZ3M7CisKKy8qKgorICogR3N0QnVmZmVyOgorICogQG1pbmlfb2JqZWN0OiB0aGUgcGFyZW50IHN0cnVjdHVyZQorICogQHBvb2w6IHBvaW50ZXIgdG8gdGhlIHBvb2wgb3duZXIgb2YgdGhlIGJ1ZmZlcgorICogQHRpbWVzdGFtcDogdGltZXN0YW1wIG9mIHRoZSBidWZmZXIsIGNhbiBiZSAjR1NUX0NMT0NLX1RJTUVfTk9ORSB3aGVuIHRoZQorICogICAgIHRpbWVzdGFtcCBpcyBub3Qga25vd24gb3IgcmVsZXZhbnQuCisgKiBAZHVyYXRpb246IGR1cmF0aW9uIGluIHRpbWUgb2YgdGhlIGJ1ZmZlciBkYXRhLCBjYW4gYmUgI0dTVF9DTE9DS19USU1FX05PTkUKKyAqICAgICB3aGVuIHRoZSBkdXJhdGlvbiBpcyBub3Qga25vd24gb3IgcmVsZXZhbnQuCisgKiBAb2Zmc2V0OiBhIG1lZGlhIHNwZWNpZmljIG9mZnNldCBmb3IgdGhlIGJ1ZmZlciBkYXRhLgorICogICAgIEZvciB2aWRlbyBmcmFtZXMsIHRoaXMgaXMgdGhlIGZyYW1lIG51bWJlciBvZiB0aGlzIGJ1ZmZlci4KKyAqICAgICBGb3IgYXVkaW8gc2FtcGxlcywgdGhpcyBpcyB0aGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBzYW1wbGUgaW4gdGhpcyBidWZmZXIuCisgKiAgICAgRm9yIGZpbGUgZGF0YSBvciBjb21wcmVzc2VkIGRhdGEgdGhpcyBpcyB0aGUgYnl0ZSBvZmZzZXQgb2YgdGhlIGZpcnN0CisgKiAgICAgICBieXRlIGluIHRoaXMgYnVmZmVyLgorICogQG9mZnNldF9lbmQ6IHRoZSBsYXN0IG9mZnNldCBjb250YWluZWQgaW4gdGhpcyBidWZmZXIuIEl0IGhhcyB0aGUgc2FtZQorICogICAgIGZvcm1hdCBhcyBAb2Zmc2V0LgorICoKKyAqIFRoZSBzdHJ1Y3R1cmUgb2YgYSAjR3N0QnVmZmVyLiBVc2UgdGhlIGFzc29jaWF0ZWQgbWFjcm9zIHRvIGFjY2VzcyB0aGUgcHVibGljCisgKiB2YXJpYWJsZXMuCisgKi8KK3N0cnVjdCBfR3N0QnVmZmVyIHsKKyAgR3N0TWluaU9iamVjdCAgICAgICAgICBtaW5pX29iamVjdDsKKworICAvKjwgcHVibGljID4qLyAvKiB3aXRoIENPVyAqLworICBHc3RCdWZmZXJQb29sICAgICAgICAgKnBvb2w7CisKKyAgLyogdGltZXN0YW1wICovCisgIEdzdENsb2NrVGltZSAgICAgICAgICAgdGltZXN0YW1wOworICBHc3RDbG9ja1RpbWUgICAgICAgICAgIGR1cmF0aW9uOworCisgIC8qIG1lZGlhIHNwZWNpZmljIG9mZnNldCAqLworICBndWludDY0ICAgICAgICAgICAgICAgIG9mZnNldDsKKyAgZ3VpbnQ2NCAgICAgICAgICAgICAgICBvZmZzZXRfZW5kOworfTsKKworR1R5cGUgICAgICAgZ3N0X2J1ZmZlcl9nZXRfdHlwZSAgICAgICAgICAgICh2b2lkKTsKKworLyogYWxsb2NhdGlvbiAqLworR3N0QnVmZmVyICogZ3N0X2J1ZmZlcl9uZXcgICAgICAgICAgICAgICAgICh2b2lkKTsKK0dzdEJ1ZmZlciAqIGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlICAgICAgICAoY29uc3QgR3N0QWxsb2NhdG9yICogYWxsb2NhdG9yLCBnc2l6ZSBzaXplLCBnc2l6ZSBhbGlnbik7CitHc3RCdWZmZXIgKiBnc3RfYnVmZmVyX25ld193cmFwcGVkX2Z1bGwgICAgKGdwb2ludGVyIGRhdGEsIEdGcmVlRnVuYyBmcmVlX2Z1bmMsIGdzaXplIG9mZnNldCwgZ3NpemUgc2l6ZSk7CitHc3RCdWZmZXIgKiBnc3RfYnVmZmVyX25ld193cmFwcGVkICAgICAgICAgKGdwb2ludGVyIGRhdGEsIGdzaXplIHNpemUpOworCisvKiBtZW1vcnkgYmxvY2tzICovCitndWludCAgICAgICBnc3RfYnVmZmVyX25fbWVtb3J5ICAgICAgICAgICAgKEdzdEJ1ZmZlciAqYnVmZmVyKTsKK3ZvaWQgICAgICAgIGdzdF9idWZmZXJfdGFrZV9tZW1vcnkgICAgICAgICAoR3N0QnVmZmVyICpidWZmZXIsIGdpbnQgaWR4LCBHc3RNZW1vcnkgKm1lbSk7CitHc3RNZW1vcnkgKiBnc3RfYnVmZmVyX3BlZWtfbWVtb3J5ICAgICAgICAgKEdzdEJ1ZmZlciAqYnVmZmVyLCBndWludCBpZHgsIEdzdE1hcEZsYWdzIGZsYWdzKTsKK3ZvaWQgICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21lbW9yeV9yYW5nZSAoR3N0QnVmZmVyICpidWZmZXIsIGd1aW50IGlkeCwgZ3VpbnQgbGVuZ3RoKTsKKworLyoqCisgKiBnc3RfYnVmZmVyX3JlbW92ZV9tZW1vcnk6CisgKiBAYjogYSAjR3N0QnVmZmVyLgorICogQGk6IGFuIGluZGV4CisgKgorICogUmVtb3ZlIHRoZSBtZW1vcnkgYmxvY2sgaW4gQGIgYXQgQGkuCisgKi8KKyNkZWZpbmUgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21lbW9yeShiLGkpICBnc3RfYnVmZmVyX3JlbW92ZV9tZW1vcnlfcmFuZ2UgKChiKSwgKGkpLCAxKQorCitnc2l6ZSAgICAgICBnc3RfYnVmZmVyX2ZpbGwgICAgICAgICAgICAgICAgKEdzdEJ1ZmZlciAqYnVmZmVyLCBnc2l6ZSBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgc3JjLCBnc2l6ZSBzaXplKTsKK2dzaXplICAgICAgIGdzdF9idWZmZXJfZXh0cmFjdCAgICAgICAgICAgICAoR3N0QnVmZmVyICpidWZmZXIsIGdzaXplIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGVzdCwgZ3NpemUgc2l6ZSk7CitnaW50ICAgICAgICBnc3RfYnVmZmVyX21lbWNtcCAgICAgICAgICAgICAgKEdzdEJ1ZmZlciAqYnVmZmVyLCBnc2l6ZSBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgbWVtLCBnc2l6ZSBzaXplKTsKK2dzaXplICAgICAgIGdzdF9idWZmZXJfbWVtc2V0ICAgICAgICAgICAgICAoR3N0QnVmZmVyICpidWZmZXIsIGdzaXplIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQ4IHZhbCwgZ3NpemUgc2l6ZSk7CisKK2dzaXplICAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemVzICAgICAgICAgICAoR3N0QnVmZmVyICpidWZmZXIsIGdzaXplICpvZmZzZXQsIGdzaXplICptYXhzaXplKTsKK3ZvaWQgICAgICAgIGdzdF9idWZmZXJfcmVzaXplICAgICAgICAgICAgICAoR3N0QnVmZmVyICpidWZmZXIsIGdzc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUpOworCisvKioKKyAqIGdzdF9idWZmZXJfZ2V0X3NpemU6CisgKiBAYjogYSAjR3N0QnVmZmVyLgorICoKKyAqIEdldCB0aGUgc2l6ZSBvZiBAYi4KKyAqLworI2RlZmluZSAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZShiKSAgICAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemVzICgoYiksIE5VTEwsIE5VTEwpCisvKioKKyAqIGdzdF9idWZmZXJfc2V0X3NpemU6CisgKiBAYjogYSAjR3N0QnVmZmVyLgorICogQHM6IGEgbmV3IHNpemUKKyAqCisgKiBTZXQgdGhlIHNpemUgb2YgQGIgdG8gQHMuIFRoaXMgd2lsbCByZW1vdmUgb3IgdHJpbSB0aGUgbWVtb3J5IGJsb2NrcworICogaW4gdGhlIGJ1ZmZlci4KKyAqLworI2RlZmluZSAgICAgZ3N0X2J1ZmZlcl9zZXRfc2l6ZShiLHMpICAgICAgIGdzdF9idWZmZXJfcmVzaXplICgoYiksIDAsIChzKSkKKworLyogZ2V0dGluZyBtZW1vcnkgKi8KK2dwb2ludGVyICAgIGdzdF9idWZmZXJfbWFwICAgICAgICAgICAgICAgICAoR3N0QnVmZmVyICpidWZmZXIsIGdzaXplICpzaXplLCBnc2l6ZSAqbWF4c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0TWFwRmxhZ3MgZmxhZ3MpOworZ2Jvb2xlYW4gICAgZ3N0X2J1ZmZlcl91bm1hcCAgICAgICAgICAgICAgIChHc3RCdWZmZXIgKmJ1ZmZlciwgZ3BvaW50ZXIgZGF0YSwgZ3NpemUgc2l6ZSk7CisKKy8qIHJlZmNvdW50aW5nICovCisvKioKKyAqIGdzdF9idWZmZXJfcmVmOgorICogQGJ1ZjogYSAjR3N0QnVmZmVyLgorICoKKyAqIEluY3JlYXNlcyB0aGUgcmVmY291bnQgb2YgdGhlIGdpdmVuIGJ1ZmZlciBieSBvbmUuCisgKgorICogTm90ZSB0aGF0IHRoZSByZWZjb3VudCBhZmZlY3RzIHRoZSB3cml0ZWFiaWxpdHkKKyAqIG9mIEBidWYgYW5kIGl0cyBtZXRhZGF0YSwgc2VlIGdzdF9idWZmZXJfaXNfd3JpdGFibGUoKSBhbmQKKyAqIGdzdF9idWZmZXJfaXNfbWV0YWRhdGFfd3JpdGFibGUoKS4gSXQgaXMKKyAqIGltcG9ydGFudCB0byBub3RlIHRoYXQga2VlcGluZyBhZGRpdGlvbmFsIHJlZmVyZW5jZXMgdG8KKyAqIEdzdEJ1ZmZlciBpbnN0YW5jZXMgY2FuIHBvdGVudGlhbGx5IGluY3JlYXNlIHRoZSBudW1iZXIKKyAqIG9mIG1lbWNweSBvcGVyYXRpb25zIGluIGEgcGlwZWxpbmUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBAYnVmCisgKi8KKyNpZmRlZiBfRk9PTF9HVEtfRE9DXworR19JTkxJTkVfRlVOQyBHc3RCdWZmZXIgKiBnc3RfYnVmZmVyX3JlZiAoR3N0QnVmZmVyICogYnVmKTsKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIEdzdEJ1ZmZlciAqCitnc3RfYnVmZmVyX3JlZiAoR3N0QnVmZmVyICogYnVmKQoreworICByZXR1cm4gKEdzdEJ1ZmZlciAqKSBnc3RfbWluaV9vYmplY3RfcmVmIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoYnVmKSk7Cit9CisKKy8qKgorICogZ3N0X2J1ZmZlcl91bnJlZjoKKyAqIEBidWY6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0QnVmZmVyLgorICoKKyAqIERlY3JlYXNlcyB0aGUgcmVmY291bnQgb2YgdGhlIGJ1ZmZlci4gSWYgdGhlIHJlZmNvdW50IHJlYWNoZXMgMCwgdGhlIGJ1ZmZlcgorICogd2lsbCBiZSBmcmVlZC4gSWYgR1NUX0JVRkZFUl9NQUxMT0NEQVRBKCkgaXMgbm9uLU5VTEwsIHRoaXMgcG9pbnRlciB3aWxsCisgKiBhbHNvIGJlIGZyZWVkIGF0IHRoaXMgdGltZS4KKyAqLworI2lmZGVmIF9GT09MX0dUS19ET0NfCitHX0lOTElORV9GVU5DIHZvaWQgZ3N0X2J1ZmZlcl91bnJlZiAoR3N0QnVmZmVyICogYnVmKTsKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQKK2dzdF9idWZmZXJfdW5yZWYgKEdzdEJ1ZmZlciAqIGJ1ZikKK3sKKyAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoYnVmKSk7Cit9CisKKy8qIGNvcHkgYnVmZmVyICovCisvKioKKyAqIGdzdF9idWZmZXJfY29weToKKyAqIEBidWY6IGEgI0dzdEJ1ZmZlci4KKyAqCisgKiBDcmVhdGUgYSBjb3B5IG9mIHRoZSBnaXZlbiBidWZmZXIuIFRoaXMgd2lsbCBhbHNvIG1ha2UgYSBuZXdseSBhbGxvY2F0ZWQKKyAqIGNvcHkgb2YgdGhlIGRhdGEgdGhlIHNvdXJjZSBidWZmZXIgY29udGFpbnMuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyBjb3B5IG9mIEBidWYuCisgKi8KKyNpZmRlZiBfRk9PTF9HVEtfRE9DXworR19JTkxJTkVfRlVOQyBHc3RCdWZmZXIgKiBnc3RfYnVmZmVyX2NvcHkgKGNvbnN0IEdzdEJ1ZmZlciAqIGJ1Zik7CisjZW5kaWYKKworc3RhdGljIGlubGluZSBHc3RCdWZmZXIgKgorZ3N0X2J1ZmZlcl9jb3B5IChjb25zdCBHc3RCdWZmZXIgKiBidWYpCit7CisgIHJldHVybiBHU1RfQlVGRkVSIChnc3RfbWluaV9vYmplY3RfY29weSAoR1NUX01JTklfT0JKRUNUX0NPTlNUX0NBU1QgKGJ1ZikpKTsKK30KKworCisvKioKKyAqIEdzdEJ1ZmZlckNvcHlGbGFnczoKKyAqIEBHU1RfQlVGRkVSX0NPUFlfTk9ORTogY29weSBub3RoaW5nCisgKiBAR1NUX0JVRkZFUl9DT1BZX0ZMQUdTOiBmbGFnIGluZGljYXRpbmcgdGhhdCBidWZmZXIgZmxhZ3Mgc2hvdWxkIGJlIGNvcGllZAorICogQEdTVF9CVUZGRVJfQ09QWV9USU1FU1RBTVBTOiBmbGFnIGluZGljYXRpbmcgdGhhdCBidWZmZXIgdGltZXN0YW1wLCBkdXJhdGlvbiwKKyAqIG9mZnNldCBhbmQgb2Zmc2V0X2VuZCBzaG91bGQgYmUgY29waWVkCisgKiBAR1NUX0JVRkZFUl9DT1BZX01FTU9SWTogZmxhZyBpbmRpY2F0aW5nIHRoYXQgYnVmZmVyIG1lbW9yeSBzaG91bGQgYmUgY29waWVkCisgKiBhbmQgYXBwZW5kZWQgdG8gYWxyZWFkeSBleGlzdGluZyBtZW1vcnkKKyAqIEBHU1RfQlVGRkVSX0NPUFlfTUVSR0U6IGZsYWcgaW5kaWNhdGluZyB0aGF0IGJ1ZmZlciBtZW1vcnkgc2hvdWxkIGJlCisgKiBtZXJnZWQKKyAqCisgKiBBIHNldCBvZiBmbGFncyB0aGF0IGNhbiBiZSBwcm92aWRlZCB0byB0aGUgZ3N0X2J1ZmZlcl9jb3B5X2ludG8oKQorICogZnVuY3Rpb24gdG8gc3BlY2lmeSB3aGljaCBpdGVtcyBzaG91bGQgYmUgY29waWVkLgorICovCit0eXBlZGVmIGVudW0geworICBHU1RfQlVGRkVSX0NPUFlfTk9ORSAgICAgICAgICAgPSAwLAorICBHU1RfQlVGRkVSX0NPUFlfRkxBR1MgICAgICAgICAgPSAoMSA8PCAwKSwKKyAgR1NUX0JVRkZFUl9DT1BZX1RJTUVTVEFNUFMgICAgID0gKDEgPDwgMSksCisgIEdTVF9CVUZGRVJfQ09QWV9NRU1PUlkgICAgICAgICA9ICgxIDw8IDIpLAorICBHU1RfQlVGRkVSX0NPUFlfTUVSR0UgICAgICAgICAgPSAoMSA8PCAzKQorfSBHc3RCdWZmZXJDb3B5RmxhZ3M7CisKKy8qKgorICogR1NUX0JVRkZFUl9DT1BZX01FVEFEQVRBOgorICoKKyAqIENvbWJpbmF0aW9uIG9mIGFsbCBwb3NzaWJsZSBtZXRhZGF0YSBmaWVsZHMgdGhhdCBjYW4gYmUgY29waWVkIHdpdGgKKyAqIGdzdF9idWZmZXJfY29weV9pbnRvKCkuCisgKi8KKyNkZWZpbmUgR1NUX0JVRkZFUl9DT1BZX01FVEFEQVRBICAgICAgIChHU1RfQlVGRkVSX0NPUFlfRkxBR1MgfCBHU1RfQlVGRkVSX0NPUFlfVElNRVNUQU1QUykKKworLyoqCisgKiBHU1RfQlVGRkVSX0NPUFlfQUxMOgorICoKKyAqIENvbWJpbmF0aW9uIG9mIGFsbCBwb3NzaWJsZSBmaWVsZHMgdGhhdCBjYW4gYmUgY29waWVkIHdpdGgKKyAqIGdzdF9idWZmZXJfY29weV9pbnRvKCkuCisgKi8KKyNkZWZpbmUgR1NUX0JVRkZFUl9DT1BZX0FMTCAgKChHc3RCdWZmZXJDb3B5RmxhZ3MpKEdTVF9CVUZGRVJfQ09QWV9NRVRBREFUQSB8IEdTVF9CVUZGRVJfQ09QWV9NRU1PUlkpKQorCisvKiBjb3BpZXMgbWVtb3J5IG9yIG1ldGFkYXRhIGludG8gbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciAqLwordm9pZCAgICAgICAgICAgIGdzdF9idWZmZXJfY29weV9pbnRvICAgICAgICAgICAgKEdzdEJ1ZmZlciAqZGVzdCwgR3N0QnVmZmVyICpzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyQ29weUZsYWdzIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplIG9mZnNldCwgZ3NpemUgc2l6ZSk7CisKKy8qKgorICogZ3N0X2J1ZmZlcl9pc193cml0YWJsZToKKyAqIEBidWY6IGEgI0dzdEJ1ZmZlcgorICoKKyAqIFRlc3RzIGlmIHlvdSBjYW4gc2FmZWx5IHdyaXRlIGRhdGEgaW50byBhIGJ1ZmZlcidzIGRhdGEgYXJyYXkgb3IgdmFsaWRseQorICogbW9kaWZ5IHRoZSBjYXBzIGFuZCB0aW1lc3RhbXAgbWV0YWRhdGEuIE1ldGFkYXRhIGluIGEgR3N0QnVmZmVyIGlzIGFsd2F5cworICogd3JpdGFibGUsIGJ1dCBpdCBpcyBvbmx5IHNhZmUgdG8gY2hhbmdlIGl0IHdoZW4gdGhlcmUgaXMgb25seSBvbmUgb3duZXIKKyAqIG9mIHRoZSBidWZmZXIgLSBpZSwgdGhlIHJlZmNvdW50IGlzIDEuCisgKi8KKyNkZWZpbmUgICAgICAgICBnc3RfYnVmZmVyX2lzX3dyaXRhYmxlKGJ1ZikgICAgIGdzdF9taW5pX29iamVjdF9pc193cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGJ1ZikpCisvKioKKyAqIGdzdF9idWZmZXJfbWFrZV93cml0YWJsZToKKyAqIEBidWY6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0QnVmZmVyCisgKgorICogTWFrZXMgYSB3cml0YWJsZSBidWZmZXIgZnJvbSB0aGUgZ2l2ZW4gYnVmZmVyLiBJZiB0aGUgc291cmNlIGJ1ZmZlciBpcworICogYWxyZWFkeSB3cml0YWJsZSwgdGhpcyB3aWxsIHNpbXBseSByZXR1cm4gdGhlIHNhbWUgYnVmZmVyLiBBIGNvcHkgd2lsbAorICogb3RoZXJ3aXNlIGJlIG1hZGUgdXNpbmcgZ3N0X2J1ZmZlcl9jb3B5KCkuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIHdyaXRhYmxlIGJ1ZmZlciB3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSB0aGUKKyAqICAgICBzYW1lIGFzIEBidWYKKyAqLworI2RlZmluZSAgICAgICAgIGdzdF9idWZmZXJfbWFrZV93cml0YWJsZShidWYpICAgR1NUX0JVRkZFUl9DQVNUIChnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGJ1ZikpKQorCisvKioKKyAqIGdzdF9idWZmZXJfcmVwbGFjZToKKyAqIEBvYnVmOiAoaW5vdXQpICh0cmFuc2ZlciBmdWxsKTogcG9pbnRlciB0byBhIHBvaW50ZXIgdG8gYSAjR3N0QnVmZmVyIHRvIGJlCisgKiAgICAgcmVwbGFjZWQuCisgKiBAbmJ1ZjogKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25lKTogcG9pbnRlciB0byBhICNHc3RCdWZmZXIgdGhhdCB3aWxsCisgKiAgICAgcmVwbGFjZSB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQG9idWYuCisgKgorICogTW9kaWZpZXMgYSBwb2ludGVyIHRvIGEgI0dzdEJ1ZmZlciB0byBwb2ludCB0byBhIGRpZmZlcmVudCAjR3N0QnVmZmVyLiBUaGUKKyAqIG1vZGlmaWNhdGlvbiBpcyBkb25lIGF0b21pY2FsbHkgKHNvIHRoaXMgaXMgdXNlZnVsIGZvciBlbnN1cmluZyB0aHJlYWQgc2FmZXR5CisgKiBpbiBzb21lIGNhc2VzKSwgYW5kIHRoZSByZWZlcmVuY2UgY291bnRzIGFyZSB1cGRhdGVkIGFwcHJvcHJpYXRlbHkgKHRoZSBvbGQKKyAqIGJ1ZmZlciBpcyB1bnJlZmZlZCwgdGhlIG5ldyBpcyByZWZmZWQpLgorICoKKyAqIEVpdGhlciBAbmJ1ZiBvciB0aGUgI0dzdEJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBvYnVmIG1heSBiZSBOVUxMLgorICovCisjZGVmaW5lICAgICAgICAgZ3N0X2J1ZmZlcl9yZXBsYWNlKG9idWYsbmJ1ZikgXAorR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBHc3RCdWZmZXIgKipfX19vYnVmYWRkciA9IChHc3RCdWZmZXIgKiopKG9idWYpOyAgICAgICAgIFwKKyAgZ3N0X21pbmlfb2JqZWN0X3JlcGxhY2UgKChHc3RNaW5pT2JqZWN0ICoqKV9fX29idWZhZGRyLCBcCisgICAgICBHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAobmJ1ZikpOyAgICAgICAgICAgICAgICAgICAgICAgXAorfSBHX1NUTVRfRU5ECisKKy8qIGNyZWF0aW5nIGEgcmVnaW9uICovCitHc3RCdWZmZXIqICAgICAgZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAgICAgICAgICAoR3N0QnVmZmVyICpwYXJlbnQsIEdzdEJ1ZmZlckNvcHlGbGFncyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUpOworCisvKiBzcGFuLCB0d28gYnVmZmVycywgaW50ZWxsaWdlbnRseSAqLworZ2Jvb2xlYW4gICAgICAgIGdzdF9idWZmZXJfaXNfc3Bhbl9mYXN0ICAgICAgICAgKEdzdEJ1ZmZlciAqYnVmMSwgR3N0QnVmZmVyICpidWYyKTsKK0dzdEJ1ZmZlciogICAgICBnc3RfYnVmZmVyX3NwYW4gICAgICAgICAgICAgICAgIChHc3RCdWZmZXIgKmJ1ZjEsIGdzaXplIG9mZnNldCwgR3N0QnVmZmVyICpidWYyLCBnc2l6ZSBzaXplKTsKKworLyogbWV0YWRhdGEgKi8KKyNpbmNsdWRlIDxnc3QvZ3N0bWV0YS5oPgorCitHc3RNZXRhICogICAgICAgZ3N0X2J1ZmZlcl9nZXRfbWV0YSAgICAgICAgICAgICAoR3N0QnVmZmVyICpidWZmZXIsIGNvbnN0IEdzdE1ldGFJbmZvICppbmZvKTsKK0dzdE1ldGEgKiAgICAgICBnc3RfYnVmZmVyX2FkZF9tZXRhICAgICAgICAgICAgIChHc3RCdWZmZXIgKmJ1ZmZlciwgY29uc3QgR3N0TWV0YUluZm8gKmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgcGFyYW1zKTsKK2dib29sZWFuICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhICAgICAgICAgIChHc3RCdWZmZXIgKmJ1ZmZlciwgR3N0TWV0YSAqbWV0YSk7CisKK0dzdE1ldGEgKiAgICAgICBnc3RfYnVmZmVyX2l0ZXJhdGVfbWV0YSAgICAgICAgIChHc3RCdWZmZXIgKmJ1ZmZlciwgZ3BvaW50ZXIgKnN0YXRlKTsKKworLyoqCisgKiBnc3RfdmFsdWVfc2V0X2J1ZmZlcjoKKyAqIEB2OiBhICNHVmFsdWUgdG8gcmVjZWl2ZSB0aGUgZGF0YQorICogQGI6ICh0cmFuc2ZlciBub25lKTogYSAjR3N0QnVmZmVyIHRvIGFzc2lnbiB0byB0aGUgR3N0VmFsdWUKKyAqCisgKiBTZXRzIEBiIGFzIHRoZSB2YWx1ZSBvZiBAdi4gIENhbGxlciByZXRhaW5zIHJlZmVyZW5jZSB0byBidWZmZXIuCisgKi8KKyNkZWZpbmUgICAgICAgICBnc3RfdmFsdWVfc2V0X2J1ZmZlcih2LGIpICAgICAgIGdfdmFsdWVfc2V0X2JveGVkKCh2KSwoYikpCisvKioKKyAqIGdzdF92YWx1ZV90YWtlX2J1ZmZlcjoKKyAqIEB2OiBhICNHVmFsdWUgdG8gcmVjZWl2ZSB0aGUgZGF0YQorICogQGI6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0QnVmZmVyIHRvIGFzc2lnbiB0byB0aGUgR3N0VmFsdWUKKyAqCisgKiBTZXRzIEBiIGFzIHRoZSB2YWx1ZSBvZiBAdi4gIENhbGxlciBnaXZlcyBhd2F5IHJlZmVyZW5jZSB0byBidWZmZXIuCisgKi8KKyNkZWZpbmUgICAgICAgICBnc3RfdmFsdWVfdGFrZV9idWZmZXIodixiKSAgICAgIGdfdmFsdWVfdGFrZV9ib3hlZCh2LChiKSkKKy8qKgorICogZ3N0X3ZhbHVlX2dldF9idWZmZXI6CisgKiBAdjogYSAjR1ZhbHVlIHRvIHF1ZXJ5CisgKgorICogUmVjZWl2ZXMgYSAjR3N0QnVmZmVyIGFzIHRoZSB2YWx1ZSBvZiBAdi4gRG9lcyBub3QgcmV0dXJuIGEgcmVmZXJlbmNlIHRvCisgKiB0aGUgYnVmZmVyLCBzbyB0aGUgcG9pbnRlciBpcyBvbmx5IHZhbGlkIGZvciBhcyBsb25nIGFzIHRoZSBjYWxsZXIgb3ducworICogYSByZWZlcmVuY2UgdG8gQHYuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBidWZmZXIKKyAqLworI2RlZmluZSAgICAgICAgIGdzdF92YWx1ZV9nZXRfYnVmZmVyKHYpICAgICAgICAgR1NUX0JVRkZFUl9DQVNUIChnX3ZhbHVlX2dldF9ib3hlZCh2KSkKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fR1NUX0JVRkZFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RidWZmZXJsaXN0LmMgYi9nc3QvZ3N0YnVmZmVybGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZjgxN2YKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0YnVmZmVybGlzdC5jCkBAIC0wLDAgKzEsMjg0IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBeGlzIENvbW11bmljYXRpb25zIDxkZXYtZ3N0cmVhbWVyIGF0IGF4aXMgZG90IGNvbT4KKyAqIEBhdXRob3IgSm9uYXMgSG9sbWJlcmcgPGpvbmFzIGRvdCBob2xtYmVyZyBhdCBheGlzIGRvdCBjb20+CisgKgorICogZ3N0YnVmZmVybGlzdC5jOiBCdWZmZXIgbGlzdAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qKgorICogU0VDVElPTjpnc3RidWZmZXJsaXN0CisgKiBAc2hvcnRfZGVzY3JpcHRpb246IExpc3RzIG9mIGJ1ZmZlcnMgZm9yIGRhdGEtcGFzc2luZworICogQHNlZV9hbHNvOiAjR3N0UGFkLCAjR3N0TWluaU9iamVjdAorICoKKyAqIEJ1ZmZlciBsaXN0cyBhcmUgYW4gb2JqZWN0IGNvbnRhaW5pbmcgYSBsaXN0IG9mIGJ1ZmZlcnMuCisgKgorICogQnVmZmVyIGxpc3RzIGFyZSBjcmVhdGVkIHdpdGggZ3N0X2J1ZmZlcl9saXN0X25ldygpIGFuZCBmaWxsZWQgd2l0aCBkYXRhCisgKiB1c2luZyBhIGdzdF9idWZmZXJfbGlzdF9pbnNlcnQoKS4KKyAqCisgKi8KKyNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgorCisjaW5jbHVkZSAiZ3N0YnVmZmVyLmgiCisjaW5jbHVkZSAiZ3N0YnVmZmVybGlzdC5oIgorCisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBHU1RfQ0FUX0JVRkZFUl9MSVNUCisKKy8qKgorICogR3N0QnVmZmVyTGlzdDoKKyAqCisgKiBPcGFxdWUgbGlzdCBvZiBncm91cGVkIGJ1ZmZlcnMuCisgKgorICogU2luY2U6IDAuMTAuMjQKKyAqLworc3RydWN0IF9Hc3RCdWZmZXJMaXN0Cit7CisgIEdzdE1pbmlPYmplY3QgbWluaV9vYmplY3Q7CisKKyAgR0FycmF5ICphcnJheTsKK307CisKK0dUeXBlIF9nc3RfYnVmZmVyX2xpc3RfdHlwZSA9IDA7CisKK0dTVF9ERUZJTkVfTUlOSV9PQkpFQ1RfVFlQRSAoR3N0QnVmZmVyTGlzdCwgZ3N0X2J1ZmZlcl9saXN0KTsKKwordm9pZAorX3ByaXZfZ3N0X2J1ZmZlcl9saXN0X2luaXRpYWxpemUgKHZvaWQpCit7CisgIF9nc3RfYnVmZmVyX2xpc3RfdHlwZSA9IGdzdF9idWZmZXJfbGlzdF9nZXRfdHlwZSAoKTsKK30KKworc3RhdGljIEdzdEJ1ZmZlckxpc3QgKgorX2dzdF9idWZmZXJfbGlzdF9jb3B5IChHc3RCdWZmZXJMaXN0ICogbGlzdCkKK3sKKyAgR3N0QnVmZmVyTGlzdCAqY29weTsKKyAgZ3VpbnQgaSwgbGVuOworCisgIGxlbiA9IGxpc3QtPmFycmF5LT5sZW47CisgIGNvcHkgPSBnc3RfYnVmZmVyX2xpc3Rfc2l6ZWRfbmV3IChsZW4pOworCisgIC8qIGFkZCBhbmQgcmVmIGFsbCBidWZmZXJzIGluIHRoZSBhcnJheSAqLworICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICBHc3RCdWZmZXIgKmJ1ZiA9IGdfYXJyYXlfaW5kZXggKGxpc3QtPmFycmF5LCBHc3RCdWZmZXIgKiwgaSk7CisgICAgYnVmID0gZ3N0X2J1ZmZlcl9yZWYgKGJ1Zik7CisgICAgZ19hcnJheV9hcHBlbmRfdmFsIChjb3B5LT5hcnJheSwgYnVmKTsKKyAgfQorICByZXR1cm4gY29weTsKK30KKworc3RhdGljIHZvaWQKK19nc3RfYnVmZmVyX2xpc3RfZnJlZSAoR3N0QnVmZmVyTGlzdCAqIGxpc3QpCit7CisgIGd1aW50IGksIGxlbjsKKyAgR1NUX0xPRyAoImZyZWUgJXAiLCBsaXN0KTsKKworICAvKiB1bnJlZnMgYWxsIGJ1ZmZlcnMgdG9vICovCisgIGxlbiA9IGxpc3QtPmFycmF5LT5sZW47CisgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICBnc3RfYnVmZmVyX3VucmVmIChnX2FycmF5X2luZGV4IChsaXN0LT5hcnJheSwgR3N0QnVmZmVyICosIGkpKTsKKyAgZ19hcnJheV9mcmVlIChsaXN0LT5hcnJheSwgVFJVRSk7CisKKyAgZ19zbGljZV9mcmVlMSAoR1NUX01JTklfT0JKRUNUX1NJWkUgKGxpc3QpLCBsaXN0KTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9idWZmZXJfbGlzdF9pbml0IChHc3RCdWZmZXJMaXN0ICogbGlzdCwgZ3NpemUgc2l6ZSwgZ3VpbnQgYXNpemUpCit7CisgIGdzdF9taW5pX29iamVjdF9pbml0IChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAobGlzdCksIF9nc3RfYnVmZmVyX2xpc3RfdHlwZSwKKyAgICAgIHNpemUpOworCisgIGxpc3QtPm1pbmlfb2JqZWN0LmNvcHkgPSAoR3N0TWluaU9iamVjdENvcHlGdW5jdGlvbikgX2dzdF9idWZmZXJfbGlzdF9jb3B5OworICBsaXN0LT5taW5pX29iamVjdC5mcmVlID0gKEdzdE1pbmlPYmplY3RGcmVlRnVuY3Rpb24pIF9nc3RfYnVmZmVyX2xpc3RfZnJlZTsKKworICBsaXN0LT5hcnJheSA9IGdfYXJyYXlfc2l6ZWRfbmV3IChGQUxTRSwgRkFMU0UsIHNpemVvZiAoR3N0QnVmZmVyICopLCBhc2l6ZSk7CisKKyAgR1NUX0xPRyAoImluaXQgJXAiLCBsaXN0KTsKK30KKworLyoqCisgKiBnc3RfYnVmZmVyX2xpc3Rfc2l6ZWRfbmV3OgorICogQHNpemU6IGFuIGluaXRpYWwgcmVzZXJ2ZWQgc2l6ZQorICoKKyAqIENyZWF0ZXMgYSBuZXcsIGVtcHR5ICNHc3RCdWZmZXJMaXN0LiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciB1bnJlZmZpbmcKKyAqIHRoZSByZXR1cm5lZCAjR3N0QnVmZmVyTGlzdC4gVGhlIGxpc3Qgd2lsbCBoYXZlIEBzaXplIHNwYWNlIHByZWFsbG9jYXRlZCBzbworICogdGhhdCBtZW1vcnkgcmVhbGxvY2F0aW9ucyBjYW4gYmUgYXZvaWRlZC4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnc3RfYnVmZmVyX2xpc3RfdW5yZWYKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXcgI0dzdEJ1ZmZlckxpc3QuIGdzdF9idWZmZXJfbGlzdF91bnJlZigpCisgKiAgICAgYWZ0ZXIgdXNhZ2UuCisgKgorICogU2luY2U6IDAuMTAuMjQKKyAqLworR3N0QnVmZmVyTGlzdCAqCitnc3RfYnVmZmVyX2xpc3Rfc2l6ZWRfbmV3IChndWludCBzaXplKQoreworICBHc3RCdWZmZXJMaXN0ICpsaXN0OworCisgIGxpc3QgPSBnX3NsaWNlX25ldzAgKEdzdEJ1ZmZlckxpc3QpOworCisgIEdTVF9MT0cgKCJuZXcgJXAiLCBsaXN0KTsKKworICBnc3RfYnVmZmVyX2xpc3RfaW5pdCAobGlzdCwgc2l6ZW9mIChHc3RCdWZmZXJMaXN0KSwgc2l6ZSk7CisKKyAgcmV0dXJuIGxpc3Q7Cit9CisKKy8qKgorICogZ3N0X2J1ZmZlcl9saXN0X25ldzoKKyAqCisgKiBDcmVhdGVzIGEgbmV3LCBlbXB0eSAjR3N0QnVmZmVyTGlzdC4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgdW5yZWZmaW5nCisgKiB0aGUgcmV0dXJuZWQgI0dzdEJ1ZmZlckxpc3QuCisgKgorICogRnJlZS1mdW5jdGlvbjogZ3N0X2J1ZmZlcl9saXN0X3VucmVmCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3ICNHc3RCdWZmZXJMaXN0LiBnc3RfYnVmZmVyX2xpc3RfdW5yZWYoKQorICogICAgIGFmdGVyIHVzYWdlLgorICoKKyAqIFNpbmNlOiAwLjEwLjI0CisgKi8KK0dzdEJ1ZmZlckxpc3QgKgorZ3N0X2J1ZmZlcl9saXN0X25ldyAodm9pZCkKK3sKKyAgcmV0dXJuIGdzdF9idWZmZXJfbGlzdF9zaXplZF9uZXcgKDgpOworfQorCisvKioKKyAqIGdzdF9idWZmZXJfbGlzdF9sZW46CisgKiBAbGlzdDogYSAjR3N0QnVmZmVyTGlzdAorICoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBidWZmZXJzIGluIEBsaXN0LgorICoKKyAqIFJldHVybnM6IHRoZSBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgYnVmZmVyIGxpc3QKKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICovCitndWludAorZ3N0X2J1ZmZlcl9saXN0X2xlbiAoR3N0QnVmZmVyTGlzdCAqIGxpc3QpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVGRkVSX0xJU1QgKGxpc3QpLCAwKTsKKworICByZXR1cm4gbGlzdC0+YXJyYXktPmxlbjsKK30KKworLyoqCisgKiBnc3RfYnVmZmVyX2xpc3RfZm9yZWFjaDoKKyAqIEBsaXN0OiBhICNHc3RCdWZmZXJMaXN0CisgKiBAZnVuYzogKHNjb3BlIGNhbGwpOiBhICNHc3RCdWZmZXJMaXN0RnVuYyB0byBjYWxsCisgKiBAdXNlcl9kYXRhOiAoY2xvc3VyZSk6IHVzZXIgZGF0YSBwYXNzZWQgdG8gQGZ1bmMKKyAqCisgKiBDYWxsIEBmdW5jIHdpdGggQGRhdGEgZm9yIGVhY2ggYnVmZmVyIGluIEBsaXN0LgorICoKKyAqIEBmdW5jIGNhbiBtb2RpZnkgdGhlIHBhc3NlZCBidWZmZXIgcG9pbnRlciBvciBpdHMgY29udGVudHMuIFRoZSByZXR1cm4gdmFsdWUKKyAqIG9mIEBmdW5jIGRlZmluZSBpZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgb3IgaWYgdGhlIHJlbWFpbmluZyBidWZmZXJzIGluIGEKKyAqIGdyb3VwIHNob3VsZCBiZSBza2lwcGVkLgorICoKKyAqIFNpbmNlOiAwLjEwLjI0CisgKi8KK3ZvaWQKK2dzdF9idWZmZXJfbGlzdF9mb3JlYWNoIChHc3RCdWZmZXJMaXN0ICogbGlzdCwgR3N0QnVmZmVyTGlzdEZ1bmMgZnVuYywKKyAgICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIGd1aW50IGksIGxlbjsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQlVGRkVSX0xJU1QgKGxpc3QpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoZnVuYyAhPSBOVUxMKTsKKworICBsZW4gPSBsaXN0LT5hcnJheS0+bGVuOworICBmb3IgKGkgPSAwOyBpIDwgbGVuOykgeworICAgIEdzdEJ1ZmZlciAqYnVmLCAqYnVmX3JldDsKKyAgICBnYm9vbGVhbiByZXQ7CisKKyAgICBidWYgPSBidWZfcmV0ID0gZ19hcnJheV9pbmRleCAobGlzdC0+YXJyYXksIEdzdEJ1ZmZlciAqLCBpKTsKKyAgICByZXQgPSBmdW5jICgmYnVmX3JldCwgaSwgdXNlcl9kYXRhKTsKKworICAgIC8qIENoZWNrIGlmIHRoZSBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBidWZmZXIgKi8KKyAgICBpZiAoYnVmICE9IGJ1Zl9yZXQpIHsKKyAgICAgIGlmIChidWZfcmV0ID09IE5VTEwpIHsKKyAgICAgICAgZ19hcnJheV9yZW1vdmVfaW5kZXggKGxpc3QtPmFycmF5LCBpKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGdfYXJyYXlfaW5kZXggKGxpc3QtPmFycmF5LCBHc3RCdWZmZXIgKiwgaSkgPSBidWZfcmV0OworICAgICAgfQorICAgIH0KKworICAgIGlmICghcmV0KQorICAgICAgYnJlYWs7CisKKyAgICAvKiBJZiB0aGUgYnVmZmVyIHdhcyBub3QgcmVtb3ZlZCBieSBmdW5jIGdvIHRvIHRoZSBuZXh0IGJ1ZmZlciAqLworICAgIGlmIChidWZfcmV0ICE9IE5VTEwpCisgICAgICBpKys7CisgIH0KK30KKworLyoqCisgKiBnc3RfYnVmZmVyX2xpc3RfZ2V0OgorICogQGxpc3Q6IGEgI0dzdEJ1ZmZlckxpc3QKKyAqIEBpZHg6IHRoZSBpbmRleAorICoKKyAqIEdldCB0aGUgYnVmZmVyIGF0IEBpZHguCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgYnVmZmVyIGF0IEBpZHggaW4gQGdyb3VwIG9yIE5VTEwgd2hlbiB0aGVyZQorICogICAgIGlzIG5vIGJ1ZmZlci4gVGhlIGJ1ZmZlciByZW1haW5zIHZhbGlkIGFzIGxvbmcgYXMgQGxpc3QgaXMgdmFsaWQuCisgKgorICogU2luY2U6IDAuMTAuMjQKKyAqLworR3N0QnVmZmVyICoKK2dzdF9idWZmZXJfbGlzdF9nZXQgKEdzdEJ1ZmZlckxpc3QgKiBsaXN0LCBndWludCBpZHgpCit7CisgIEdzdEJ1ZmZlciAqYnVmOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVGRkVSX0xJU1QgKGxpc3QpLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGlkeCA8IGxpc3QtPmFycmF5LT5sZW4sIE5VTEwpOworCisgIGJ1ZiA9IGdfYXJyYXlfaW5kZXggKGxpc3QtPmFycmF5LCBHc3RCdWZmZXIgKiwgaWR4KTsKKworICByZXR1cm4gYnVmOworfQorCisvKioKKyAqIGdzdF9idWZmZXJfbGlzdF9pbnNlcnQ6CisgKiBAbGlzdDogYSAjR3N0QnVmZmVyTGlzdAorICogQGlkeDogdGhlIGluZGV4CisgKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIKKyAqCisgKiBJbnNlcnQgQGJ1ZmZlciBhdCBAaWR4IGluIEBsaXN0LiBPdGhlciBidWZmZXJzIGFyZSBtb3ZlZCB0byBtYWtlIHJvb20gZm9yCisgKiB0aGlzIG5ldyBidWZmZXIuCisgKgorICogQSAtMSB2YWx1ZSBmb3IgQGlkeCB3aWxsIGFwcGVuZCB0aGUgYnVmZmVyIGF0IHRoZSBlbmQuCisgKi8KK3ZvaWQKK2dzdF9idWZmZXJfbGlzdF9pbnNlcnQgKEdzdEJ1ZmZlckxpc3QgKiBsaXN0LCBndWludCBpZHgsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JVRkZFUl9MSVNUIChsaXN0KSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKGJ1ZmZlciAhPSBOVUxMKTsKKworICBpZiAoaWR4ID09IC0xKQorICAgIGdfYXJyYXlfYXBwZW5kX3ZhbCAobGlzdC0+YXJyYXksIGJ1ZmZlcik7CisgIGVsc2UgeworICAgIGdfcmV0dXJuX2lmX2ZhaWwgKGlkeCA8IGxpc3QtPmFycmF5LT5sZW4pOworICAgIGdfYXJyYXlfaW5zZXJ0X3ZhbCAobGlzdC0+YXJyYXksIGlkeCwgYnVmZmVyKTsKKyAgfQorfQorCit2b2lkCitnc3RfYnVmZmVyX2xpc3RfcmVtb3ZlIChHc3RCdWZmZXJMaXN0ICogbGlzdCwgZ3VpbnQgaWR4LCBndWludCBsZW5ndGgpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVJfTElTVCAobGlzdCkpOworICBnX3JldHVybl9pZl9mYWlsIChpZHggPCBsaXN0LT5hcnJheS0+bGVuKTsKKworICBnX2FycmF5X3JlbW92ZV9yYW5nZSAobGlzdC0+YXJyYXksIGlkeCwgbGVuZ3RoKTsKK30KZGlmZiAtLWdpdCBhL2dzdC9nc3RidWZmZXJsaXN0LmggYi9nc3QvZ3N0YnVmZmVybGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNzVkYWQKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0YnVmZmVybGlzdC5oCkBAIC0wLDAgKzEsMTc2IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBeGlzIENvbW11bmljYXRpb25zIDxkZXYtZ3N0cmVhbWVyIGF0IGF4aXMgZG90IGNvbT4KKyAqIEBhdXRob3IgSm9uYXMgSG9sbWJlcmcgPGpvbmFzIGRvdCBob2xtYmVyZyBhdCBheGlzIGRvdCBjb20+CisgKgorICogZ3N0YnVmZmVybGlzdC5oOiBIZWFkZXIgZm9yIEdzdEJ1ZmZlckxpc3Qgb2JqZWN0CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0dTVF9CVUZGRVJfTElTVF9IX18KKyNkZWZpbmUgX19HU1RfQlVGRkVSX0xJU1RfSF9fCisKKyNpbmNsdWRlIDxnc3QvZ3N0YnVmZmVyLmg+CisKK0dfQkVHSU5fREVDTFMKKworZXh0ZXJuIEdUeXBlIF9nc3RfYnVmZmVyX2xpc3RfdHlwZTsKKworI2RlZmluZSBHU1RfVFlQRV9CVUZGRVJfTElTVCAgICAgIChfZ3N0X2J1ZmZlcl9saXN0X3R5cGUpCisjZGVmaW5lIEdTVF9JU19CVUZGRVJfTElTVChvYmopICAgKEdTVF9JU19NSU5JX09CSkVDVF9UWVBFKG9iaiwgR1NUX1RZUEVfQlVGRkVSX0xJU1QpKQorI2RlZmluZSBHU1RfQlVGRkVSX0xJU1RfQ0FTVChvYmopICgoR3N0QnVmZmVyTGlzdCAqKW9iaikKKyNkZWZpbmUgR1NUX0JVRkZFUl9MSVNUKG9iaikgICAgICAoR1NUX0JVRkZFUl9MSVNUX0NBU1Qob2JqKSkKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdEJ1ZmZlckxpc3QgR3N0QnVmZmVyTGlzdDsKKworLyoqCisgKiBHc3RCdWZmZXJMaXN0RnVuYzoKKyAqIEBidWZmZXI6IHBvaW50ZXIgdGhlIGJ1ZmZlcgorICogQGlkeDogdGhlIGluZGV4IG9mIEBidWZmZXIKKyAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YSBwYXNzZWQgdG8gZ3N0X2J1ZmZlcl9saXN0X2ZvcmVhY2goKQorICoKKyAqIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBmcm9tIGdzdF9idWZmZXJfbGlzdF9mb3JlYWNoKCkuIFRoZSBAYnVmZmVyCisgKiBmaWVsZCB3aWxsIHBvaW50IHRvIGEgdGhlIHJlZmVyZW5jZSBvZiB0aGUgYnVmZmVyIGF0IEBpZHguCisgKgorICogV2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgJVRSVUUsIHRoZSBuZXh0IGJ1ZmZlciB3aWxsIGJlCisgKiByZXR1cm5lZC4gV2hlbiAlRkFMU0UgaXMgcmV0dXJuZWQsIGdzdF9idWZmZXJfbGlzdF9mb3JlYWNoKCkgd2lsbCByZXR1cm4uCisgKgorICogV2hlbiBAYnVmZmVyIGlzIHNldCB0byBOVUxMLCB0aGUgaXRlbSB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgYnVmZmVybGlzdC4KKyAqIFdoZW4gQGJ1ZmZlciBoYXMgYmVlbiBtYWRlIHdyaXRhYmxlLCB0aGUgbmV3IGJ1ZmZlciByZWZlcmVuY2UgY2FuIGJlIGFzc2lnbmVkCisgKiB0byBAYnVmZmVyLiBUaGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB1bnJlZmZpbmcgdGhlIG9sZCBidWZmZXIgd2hlbgorICogcmVtb3Zpbmcgb3IgbW9kaWZ5aW5nLgorICoKKyAqIFJldHVybnM6ICVGQUxTRSB3aGVuIGdzdF9idWZmZXJfbGlzdF9mb3JlYWNoKCkgc2hvdWxkIHN0b3AKKyAqLwordHlwZWRlZiBnYm9vbGVhbiAgICgqR3N0QnVmZmVyTGlzdEZ1bmMpICAgKEdzdEJ1ZmZlciAqKmJ1ZmZlciwgZ3VpbnQgaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7CisKKworLyogcmVmY291bnRpbmcgKi8KKy8qKgorICogZ3N0X2J1ZmZlcl9saXN0X3JlZjoKKyAqIEBsaXN0OiBhICNHc3RCdWZmZXJMaXN0CisgKgorICogSW5jcmVhc2VzIHRoZSByZWZjb3VudCBvZiB0aGUgZ2l2ZW4gYnVmZmVyIGxpc3QgYnkgb25lLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgcmVmY291bnQgYWZmZWN0cyB0aGUgd3JpdGVhYmlsaXR5IG9mIEBsaXN0IGFuZCBpdHMgZGF0YSwgc2VlCisgKiBnc3RfYnVmZmVyX2xpc3RfbWFrZV93cml0YWJsZSgpLiBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IGtlZXBpbmcKKyAqIGFkZGl0aW9uYWwgcmVmZXJlbmNlcyB0byBHc3RCdWZmZXJMaXN0IGluc3RhbmNlcyBjYW4gcG90ZW50aWFsbHkgaW5jcmVhc2UKKyAqIHRoZSBudW1iZXIgb2YgbWVtY3B5IG9wZXJhdGlvbnMgaW4gYSBwaXBlbGluZS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEBsaXN0CisgKgorICogU2luY2U6IDAuMTAuMjQKKyAqLworI2lmZGVmIF9GT09MX0dUS19ET0NfCitHX0lOTElORV9GVU5DIEdzdEJ1ZmZlckxpc3QgKiBnc3RfYnVmZmVyX2xpc3RfcmVmIChHc3RCdWZmZXJMaXN0ICogbGlzdCk7CisjZW5kaWYKKworc3RhdGljIGlubGluZSBHc3RCdWZmZXJMaXN0ICoKK2dzdF9idWZmZXJfbGlzdF9yZWYgKEdzdEJ1ZmZlckxpc3QgKiBsaXN0KQoreworICByZXR1cm4gR1NUX0JVRkZFUl9MSVNUX0NBU1QgKGdzdF9taW5pX29iamVjdF9yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUICgKKyAgICAgIGxpc3QpKSk7Cit9CisKKy8qKgorICogZ3N0X2J1ZmZlcl9saXN0X3VucmVmOgorICogQGxpc3Q6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0QnVmZmVyTGlzdAorICoKKyAqIERlY3JlYXNlcyB0aGUgcmVmY291bnQgb2YgdGhlIGJ1ZmZlciBsaXN0LiBJZiB0aGUgcmVmY291bnQgcmVhY2hlcyAwLCB0aGUKKyAqIGJ1ZmZlciBsaXN0IHdpbGwgYmUgZnJlZWQuCisgKgorICogU2luY2U6IDAuMTAuMjQKKyAqLworI2lmZGVmIF9GT09MX0dUS19ET0NfCitHX0lOTElORV9GVU5DIHZvaWQgZ3N0X2J1ZmZlcl9saXN0X3VucmVmIChHc3RCdWZmZXJMaXN0ICogbGlzdCk7CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkCitnc3RfYnVmZmVyX2xpc3RfdW5yZWYgKEdzdEJ1ZmZlckxpc3QgKiBsaXN0KQoreworICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChsaXN0KSk7Cit9CisKKy8qIGNvcHkgKi8KKy8qKgorICogZ3N0X2J1ZmZlcl9saXN0X2NvcHk6CisgKiBAbGlzdDogYSAjR3N0QnVmZmVyTGlzdAorICoKKyAqIENyZWF0ZSBhIHNoYWxsb3cgY29weSBvZiB0aGUgZ2l2ZW4gYnVmZmVyIGxpc3QuIFRoaXMgd2lsbCBtYWtlIGEgbmV3bHkKKyAqIGFsbG9jYXRlZCBjb3B5IG9mIHRoZSBzb3VyY2UgbGlzdCB3aXRoIGNvcGllcyBvZiBidWZmZXIgcG9pbnRlcnMuIFRoZQorICogcmVmY291bnQgb2YgYnVmZmVycyBwb2ludGVkIHRvIHdpbGwgYmUgaW5jcmVhc2VkIGJ5IG9uZS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IGNvcHkgb2YgQGxpc3QuCisgKgorICogU2luY2U6IDAuMTAuMjQKKyAqLworI2lmZGVmIF9GT09MX0dUS19ET0NfCitHX0lOTElORV9GVU5DIEdzdEJ1ZmZlckxpc3QgKiBnc3RfYnVmZmVyX2xpc3RfY29weSAoY29uc3QgR3N0QnVmZmVyTGlzdCAqIGxpc3QpOworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgR3N0QnVmZmVyTGlzdCAqCitnc3RfYnVmZmVyX2xpc3RfY29weSAoY29uc3QgR3N0QnVmZmVyTGlzdCAqIGxpc3QpCit7CisgIHJldHVybiBHU1RfQlVGRkVSX0xJU1RfQ0FTVCAoZ3N0X21pbmlfb2JqZWN0X2NvcHkgKEdTVF9NSU5JX09CSkVDVF9DT05TVF9DQVNUIChsaXN0KSkpOworfQorCisvKioKKyAqIGdzdF9idWZmZXJfbGlzdF9pc193cml0YWJsZToKKyAqIEBsaXN0OiBhICNHc3RCdWZmZXJMaXN0CisgKgorICogVGVzdHMgaWYgeW91IGNhbiBzYWZlbHkgYWRkIGJ1ZmZlcnMgYW5kIGdyb3VwcyBpbnRvIGEgYnVmZmVyIGxpc3QuCisgKgorICogU2luY2U6IDAuMTAuMjQKKyAqLworI2RlZmluZSBnc3RfYnVmZmVyX2xpc3RfaXNfd3JpdGFibGUobGlzdCkgZ3N0X21pbmlfb2JqZWN0X2lzX3dyaXRhYmxlIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAobGlzdCkpCisKKy8qKgorICogZ3N0X2J1ZmZlcl9saXN0X21ha2Vfd3JpdGFibGU6CisgKiBAbGlzdDogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RCdWZmZXJMaXN0CisgKgorICogTWFrZXMgYSB3cml0YWJsZSBidWZmZXIgbGlzdCBmcm9tIHRoZSBnaXZlbiBidWZmZXIgbGlzdC4gSWYgdGhlIHNvdXJjZSBidWZmZXIKKyAqIGxpc3QgaXMgYWxyZWFkeSB3cml0YWJsZSwgdGhpcyB3aWxsIHNpbXBseSByZXR1cm4gdGhlIHNhbWUgYnVmZmVyIGxpc3QuIEEKKyAqIGNvcHkgd2lsbCBvdGhlcndpc2UgYmUgbWFkZSB1c2luZyBnc3RfYnVmZmVyX2xpc3RfY29weSgpLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSB3cml0YWJsZSBsaXN0LCB3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSB0aGUKKyAqICAgICBzYW1lIGFzIEBsaXN0CisgKgorICogU2luY2U6IDAuMTAuMjQKKyAqLworI2RlZmluZSBnc3RfYnVmZmVyX2xpc3RfbWFrZV93cml0YWJsZShsaXN0KSBHU1RfQlVGRkVSX0xJU1RfQ0FTVCAoZ3N0X21pbmlfb2JqZWN0X21ha2Vfd3JpdGFibGUgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChsaXN0KSkpCisKK0dUeXBlICAgICAgICAgICAgICAgICAgICBnc3RfYnVmZmVyX2xpc3RfZ2V0X3R5cGUgICAgICAgICAgICAgICh2b2lkKTsKKworLyogYWxsb2NhdGlvbiAqLworR3N0QnVmZmVyTGlzdCAqICAgICAgICAgIGdzdF9idWZmZXJfbGlzdF9uZXcgICAgICAgICAgICAgICAgICAgKHZvaWQpOworR3N0QnVmZmVyTGlzdCAqICAgICAgICAgIGdzdF9idWZmZXJfbGlzdF9zaXplZF9uZXcgICAgICAgICAgICAgKGd1aW50IHNpemUpOworCitndWludCAgICAgICAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl9saXN0X2xlbiAgICAgICAgICAgICAgICAgICAoR3N0QnVmZmVyTGlzdCAqbGlzdCk7CisKK0dzdEJ1ZmZlciAqICAgICAgICAgICAgICBnc3RfYnVmZmVyX2xpc3RfZ2V0ICAgICAgICAgICAgICAgICAgIChHc3RCdWZmZXJMaXN0ICpsaXN0LCBndWludCBpZHgpOwordm9pZCAgICAgICAgICAgICAgICAgICAgIGdzdF9idWZmZXJfbGlzdF9pbnNlcnQgICAgICAgICAgICAgICAgKEdzdEJ1ZmZlckxpc3QgKmxpc3QsIGd1aW50IGlkeCwgR3N0QnVmZmVyICpidWZmZXIpOwordm9pZCAgICAgICAgICAgICAgICAgICAgIGdzdF9idWZmZXJfbGlzdF9yZW1vdmUgICAgICAgICAgICAgICAgKEdzdEJ1ZmZlckxpc3QgKmxpc3QsIGd1aW50IGlkeCwgZ3VpbnQgbGVuZ3RoKTsKKwordm9pZCAgICAgICAgICAgICAgICAgICAgIGdzdF9idWZmZXJfbGlzdF9mb3JlYWNoICAgICAgICAgICAgICAgKEdzdEJ1ZmZlckxpc3QgKmxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyTGlzdEZ1bmMgZnVuYywKKwkJCQkJCQkJZ3BvaW50ZXIgdXNlcl9kYXRhKTsKKworI2RlZmluZSBnc3RfYnVmZmVyX2xpc3RfYWRkKGwsYikgZ3N0X2J1ZmZlcl9saXN0X2luc2VydCgobCksLTEsKGIpKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fR1NUX0JVRkZFUl9MSVNUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGJ1ZmZlcnBvb2wuYyBiL2dzdC9nc3RidWZmZXJwb29sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI5MTE2NwotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RidWZmZXJwb29sLmMKQEAgLTAsMCArMSw5NTQgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDEwIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisgKgorICogZ3N0YnVmZmVycG9vbC5jOiBHc3RCdWZmZXJQb29sIGJhc2VjbGFzcworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qKgorICogU0VDVElPTjpnc3RidWZmZXJwb29sCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IFBvb2wgZm9yIGJ1ZmZlcnMKKyAqIEBzZWVfYWxzbzogI0dzdEJ1ZmZlcgorICoKKyAqLworCisjaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaWZkZWYgSEFWRV9VTklTVERfSAorIyAgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgImdzdGluZm8uaCIKKyNpbmNsdWRlICJnc3RxdWFyay5oIgorCisjaW5jbHVkZSAiZ3N0YnVmZmVycG9vbC5oIgorCitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfYnVmZmVyX3Bvb2xfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X2J1ZmZlcl9wb29sX2RlYnVnCisKKyNkZWZpbmUgR1NUX0JVRkZFUl9QT09MX0dFVF9QUklWQVRFKG9iaikgIFwKKyAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKChvYmopLCBHU1RfVFlQRV9CVUZGRVJfUE9PTCwgR3N0QnVmZmVyUG9vbFByaXZhdGUpKQorCisjZGVmaW5lIEdTVF9CVUZGRVJfUE9PTF9MT0NLKHBvb2wpICAgKGdfc3RhdGljX3JlY19tdXRleF9sb2NrKCZwb29sLT5wcml2LT5yZWNfbG9jaykpCisjZGVmaW5lIEdTVF9CVUZGRVJfUE9PTF9VTkxPQ0socG9vbCkgKGdfc3RhdGljX3JlY19tdXRleF91bmxvY2soJnBvb2wtPnByaXYtPnJlY19sb2NrKSkKKworc3RydWN0IF9Hc3RCdWZmZXJQb29sUHJpdmF0ZQoreworICBHU3RhdGljUmVjTXV0ZXggcmVjX2xvY2s7CisgIGd1aW50IHNpemU7CisgIGd1aW50IG1pbl9idWZmZXJzOworICBndWludCBtYXhfYnVmZmVyczsKKyAgZ3VpbnQgcHJlZml4OworICBndWludCBhbGlnbjsKK307CisKK2VudW0KK3sKKyAgLyogYWRkIG1vcmUgYWJvdmUgKi8KKyAgTEFTVF9TSUdOQUwKK307CisKK3N0YXRpYyB2b2lkIGdzdF9idWZmZXJfcG9vbF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7CisKK0dfREVGSU5FX1RZUEUgKEdzdEJ1ZmZlclBvb2wsIGdzdF9idWZmZXJfcG9vbCwgR1NUX1RZUEVfT0JKRUNUKTsKKworc3RhdGljIGdib29sZWFuIGRlZmF1bHRfc3RhcnQgKEdzdEJ1ZmZlclBvb2wgKiBwb29sKTsKK3N0YXRpYyBnYm9vbGVhbiBkZWZhdWx0X3N0b3AgKEdzdEJ1ZmZlclBvb2wgKiBwb29sKTsKK3N0YXRpYyBnYm9vbGVhbiBkZWZhdWx0X3NldF9jb25maWcgKEdzdEJ1ZmZlclBvb2wgKiBwb29sLAorICAgIEdzdFN0cnVjdHVyZSAqIGNvbmZpZyk7CitzdGF0aWMgR3N0Rmxvd1JldHVybiBkZWZhdWx0X2FsbG9jX2J1ZmZlciAoR3N0QnVmZmVyUG9vbCAqIHBvb2wsCisgICAgR3N0QnVmZmVyICoqIGJ1ZmZlciwgR3N0QnVmZmVyUG9vbFBhcmFtcyAqIHBhcmFtcyk7CitzdGF0aWMgR3N0Rmxvd1JldHVybiBkZWZhdWx0X2FjcXVpcmVfYnVmZmVyIChHc3RCdWZmZXJQb29sICogcG9vbCwKKyAgICBHc3RCdWZmZXIgKiogYnVmZmVyLCBHc3RCdWZmZXJQb29sUGFyYW1zICogcGFyYW1zKTsKK3N0YXRpYyB2b2lkIGRlZmF1bHRfcmVzZXRfYnVmZmVyIChHc3RCdWZmZXJQb29sICogcG9vbCwgR3N0QnVmZmVyICogYnVmZmVyLAorICAgIEdzdEJ1ZmZlclBvb2xQYXJhbXMgKiBwYXJhbXMpOworc3RhdGljIHZvaWQgZGVmYXVsdF9mcmVlX2J1ZmZlciAoR3N0QnVmZmVyUG9vbCAqIHBvb2wsIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7CitzdGF0aWMgdm9pZCBkZWZhdWx0X3JlbGVhc2VfYnVmZmVyIChHc3RCdWZmZXJQb29sICogcG9vbCwgR3N0QnVmZmVyICogYnVmZmVyKTsKKworc3RhdGljIHZvaWQKK2dzdF9idWZmZXJfcG9vbF9jbGFzc19pbml0IChHc3RCdWZmZXJQb29sQ2xhc3MgKiBrbGFzcykKK3sKKyAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKKworICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKGtsYXNzLCBzaXplb2YgKEdzdEJ1ZmZlclBvb2xQcml2YXRlKSk7CisKKyAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfYnVmZmVyX3Bvb2xfZmluYWxpemU7CisKKyAga2xhc3MtPnN0YXJ0ID0gZGVmYXVsdF9zdGFydDsKKyAga2xhc3MtPnN0b3AgPSBkZWZhdWx0X3N0b3A7CisgIGtsYXNzLT5zZXRfY29uZmlnID0gZGVmYXVsdF9zZXRfY29uZmlnOworICBrbGFzcy0+YWNxdWlyZV9idWZmZXIgPSBkZWZhdWx0X2FjcXVpcmVfYnVmZmVyOworICBrbGFzcy0+cmVzZXRfYnVmZmVyID0gZGVmYXVsdF9yZXNldF9idWZmZXI7CisgIGtsYXNzLT5hbGxvY19idWZmZXIgPSBkZWZhdWx0X2FsbG9jX2J1ZmZlcjsKKyAga2xhc3MtPnJlbGVhc2VfYnVmZmVyID0gZGVmYXVsdF9yZWxlYXNlX2J1ZmZlcjsKKyAga2xhc3MtPmZyZWVfYnVmZmVyID0gZGVmYXVsdF9mcmVlX2J1ZmZlcjsKKworICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X2J1ZmZlcl9wb29sX2RlYnVnLCAiYnVmZmVycG9vbCIsIDAsCisgICAgICAiYnVmZmVycG9vbCBkZWJ1ZyIpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2J1ZmZlcl9wb29sX2luaXQgKEdzdEJ1ZmZlclBvb2wgKiBwb29sKQoreworICBwb29sLT5wcml2ID0gR1NUX0JVRkZFUl9QT09MX0dFVF9QUklWQVRFIChwb29sKTsKKworICBnX3N0YXRpY19yZWNfbXV0ZXhfaW5pdCAoJnBvb2wtPnByaXYtPnJlY19sb2NrKTsKKworICBwb29sLT5wb2xsID0gZ3N0X3BvbGxfbmV3X3RpbWVyICgpOworICBwb29sLT5xdWV1ZSA9IGdzdF9hdG9taWNfcXVldWVfbmV3ICgxMCk7CisgIHBvb2wtPmZsdXNoaW5nID0gVFJVRTsKKyAgcG9vbC0+YWN0aXZlID0gRkFMU0U7CisgIHBvb2wtPmNvbmZpZ3VyZWQgPSBGQUxTRTsKKyAgcG9vbC0+c3RhcnRlZCA9IEZBTFNFOworICBwb29sLT5jb25maWcgPSBnc3Rfc3RydWN0dXJlX2lkX2VtcHR5X25ldyAoR1NUX1FVQVJLIChCVUZGRVJfUE9PTF9DT05GSUcpKTsKKyAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXQgKHBvb2wtPmNvbmZpZywgTlVMTCwgMCwgMCwgMCwgMCwgMCk7CisgIGdzdF9wb2xsX3dyaXRlX2NvbnRyb2wgKHBvb2wtPnBvbGwpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHBvb2wsICJjcmVhdGVkIik7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfYnVmZmVyX3Bvb2xfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCit7CisgIEdzdEJ1ZmZlclBvb2wgKnBvb2w7CisKKyAgcG9vbCA9IEdTVF9CVUZGRVJfUE9PTF9DQVNUIChvYmplY3QpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHBvb2wsICJmaW5hbGl6ZSIpOworCisgIGdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlIChwb29sLCBGQUxTRSk7CisgIGdzdF9hdG9taWNfcXVldWVfdW5yZWYgKHBvb2wtPnF1ZXVlKTsKKyAgZ3N0X3BvbGxfZnJlZSAocG9vbC0+cG9sbCk7CisgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocG9vbC0+Y29uZmlnKTsKKyAgZ19zdGF0aWNfcmVjX211dGV4X2ZyZWUgKCZwb29sLT5wcml2LT5yZWNfbG9jayk7CisKKyAgR19PQkpFQ1RfQ0xBU1MgKGdzdF9idWZmZXJfcG9vbF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworLyoqCisgKiBnc3RfYnVmZmVyX3Bvb2xfbmV3OgorICoKKyAqIENyZWF0ZXMgYSBuZXcgI0dzdEJ1ZmZlclBvb2wgaW5zdGFuY2UuCisgKgorICogUmV0dXJuczogYSBuZXcgI0dzdEJ1ZmZlclBvb2wgaW5zdGFuY2UKKyAqLworR3N0QnVmZmVyUG9vbCAqCitnc3RfYnVmZmVyX3Bvb2xfbmV3ICh2b2lkKQoreworICBHc3RCdWZmZXJQb29sICpyZXN1bHQ7CisKKyAgcmVzdWx0ID0gZ19vYmplY3RfbmV3diAoR1NUX1RZUEVfQlVGRkVSX1BPT0wsIDAsIE5VTEwpOworICBHU1RfREVCVUdfT0JKRUNUIChyZXN1bHQsICJjcmVhdGVkIG5ldyBidWZmZXIgcG9vbCIpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuCitkZWZhdWx0X2FsbG9jX2J1ZmZlciAoR3N0QnVmZmVyUG9vbCAqIHBvb2wsIEdzdEJ1ZmZlciAqKiBidWZmZXIsCisgICAgR3N0QnVmZmVyUG9vbFBhcmFtcyAqIHBhcmFtcykKK3sKKyAgR3N0QnVmZmVyUG9vbFByaXZhdGUgKnByaXYgPSBwb29sLT5wcml2OworICBHc3RNZW1vcnkgKm1lbTsKKworICAqYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisKKyAgbWVtID0gZ3N0X2FsbG9jYXRvcl9hbGxvYyAoTlVMTCwgcHJpdi0+c2l6ZSArIHByaXYtPnByZWZpeCwgcHJpdi0+YWxpZ24pOworICBnc3RfbWVtb3J5X3Jlc2l6ZSAobWVtLCBwcml2LT5wcmVmaXgsIHByaXYtPnNpemUpOworICBnc3RfYnVmZmVyX3Rha2VfbWVtb3J5ICgqYnVmZmVyLCAtMSwgbWVtKTsKKworICByZXR1cm4gR1NUX0ZMT1dfT0s7Cit9CisKKy8qIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGZvciBwcmVhbGxvY2F0aW5nIHRoZSBidWZmZXJzCisgKiBpbiB0aGUgcG9vbCAqLworc3RhdGljIGdib29sZWFuCitkZWZhdWx0X3N0YXJ0IChHc3RCdWZmZXJQb29sICogcG9vbCkKK3sKKyAgZ3VpbnQgaTsKKyAgR3N0QnVmZmVyUG9vbFByaXZhdGUgKnByaXYgPSBwb29sLT5wcml2OworICBHc3RCdWZmZXJQb29sQ2xhc3MgKnBjbGFzczsKKworICBwY2xhc3MgPSBHU1RfQlVGRkVSX1BPT0xfR0VUX0NMQVNTIChwb29sKTsKKworICAvKiBubyBhbGxvYyBmdW5jdGlvbiwgZXJyb3IgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKHBjbGFzcy0+YWxsb2NfYnVmZmVyID09IE5VTEwpKQorICAgIGdvdG8gbm9fYWxsb2M7CisKKyAgLyogd2UgbmVlZCB0byBwcmVhbGxvYyBidWZmZXJzICovCisgIGZvciAoaSA9IDA7IGkgPCBwcml2LT5taW5fYnVmZmVyczsgaSsrKSB7CisgICAgR3N0QnVmZmVyICpidWZmZXI7CisKKyAgICBpZiAocGNsYXNzLT5hbGxvY19idWZmZXIgKHBvb2wsICZidWZmZXIsIE5VTEwpICE9IEdTVF9GTE9XX09LKQorICAgICAgZ290byBhbGxvY19mYWlsZWQ7CisKKyAgICBHU1RfTE9HX09CSkVDVCAocG9vbCwgInByZWFsbG9jZWQgYnVmZmVyICVkOiAlcCIsIGksIGJ1ZmZlcik7CisgICAgLyogcmVsZWFzZSB0byB0aGUgcXVldWUsIHdlIGNhbGwgdGhlIHZtZXRob2QgZGlyZWN0bHksIHdlIGRvbid0IG5lZWQgdG8gZG8KKyAgICAgKiB0aGUgb3RoZXIgcmVmY291bnQgaGFuZGxpbmcgcmlnaHQgbm93LiAqLworICAgIGlmIChHX0xJS0VMWSAocGNsYXNzLT5yZWxlYXNlX2J1ZmZlcikpCisgICAgICBwY2xhc3MtPnJlbGVhc2VfYnVmZmVyIChwb29sLCBidWZmZXIpOworICB9CisgIHJldHVybiBUUlVFOworCisgIC8qIEVSUk9SUyAqLworbm9fYWxsb2M6CisgIHsKKyAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBvb2wsICJubyBhbGxvYyBmdW5jdGlvbiIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorYWxsb2NfZmFpbGVkOgorICB7CisgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwb29sLCAiYWxsb2MgZnVuY3Rpb24gZmFpbGVkIik7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKKy8qIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGxvY2sgKi8KK3N0YXRpYyBnYm9vbGVhbgorZG9fc3RhcnQgKEdzdEJ1ZmZlclBvb2wgKiBwb29sKQoreworICBpZiAoIXBvb2wtPnN0YXJ0ZWQpIHsKKyAgICBHc3RCdWZmZXJQb29sQ2xhc3MgKnBjbGFzczsKKworICAgIHBjbGFzcyA9IEdTVF9CVUZGRVJfUE9PTF9HRVRfQ0xBU1MgKHBvb2wpOworCisgICAgR1NUX0xPR19PQkpFQ1QgKHBvb2wsICJzdGFydGluZyIpOworICAgIC8qIHN0YXJ0IHRoZSBwb29sLCBzdWJjbGFzc2VzIHNob3VsZCBhbGxvY2F0ZSBidWZmZXJzIGFuZCBwdXQgdGhlbQorICAgICAqIGluIHRoZSBxdWV1ZSAqLworICAgIGlmIChHX0xJS0VMWSAocGNsYXNzLT5zdGFydCkpIHsKKyAgICAgIGlmICghcGNsYXNzLT5zdGFydCAocG9vbCkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcG9vbC0+c3RhcnRlZCA9IFRSVUU7CisgIH0KKyAgcmV0dXJuIFRSVUU7Cit9CisKKworc3RhdGljIHZvaWQKK2RlZmF1bHRfZnJlZV9idWZmZXIgKEdzdEJ1ZmZlclBvb2wgKiBwb29sLCBHc3RCdWZmZXIgKiBidWZmZXIpCit7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Cit9CisKKy8qIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGxvY2sgKi8KK3N0YXRpYyBnYm9vbGVhbgorZGVmYXVsdF9zdG9wIChHc3RCdWZmZXJQb29sICogcG9vbCkKK3sKKyAgR3N0QnVmZmVyICpidWZmZXI7CisgIEdzdEJ1ZmZlclBvb2xDbGFzcyAqcGNsYXNzOworCisgIHBjbGFzcyA9IEdTVF9CVUZGRVJfUE9PTF9HRVRfQ0xBU1MgKHBvb2wpOworCisgIC8qIGNsZWFyIHRoZSBwb29sICovCisgIHdoaWxlICgoYnVmZmVyID0gZ3N0X2F0b21pY19xdWV1ZV9wb3AgKHBvb2wtPnF1ZXVlKSkpIHsKKyAgICBHU1RfTE9HX09CSkVDVCAocG9vbCwgImZyZWVpbmcgJXAiLCBidWZmZXIpOworICAgIGdzdF9wb2xsX3JlYWRfY29udHJvbCAocG9vbC0+cG9sbCk7CisKKyAgICBpZiAoR19MSUtFTFkgKHBjbGFzcy0+ZnJlZV9idWZmZXIpKQorICAgICAgcGNsYXNzLT5mcmVlX2J1ZmZlciAocG9vbCwgYnVmZmVyKTsKKyAgfQorICByZXR1cm4gVFJVRTsKK30KKworLyogbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbG9jayAqLworc3RhdGljIGdib29sZWFuCitkb19zdG9wIChHc3RCdWZmZXJQb29sICogcG9vbCkKK3sKKyAgaWYgKHBvb2wtPnN0YXJ0ZWQpIHsKKyAgICBHc3RCdWZmZXJQb29sQ2xhc3MgKnBjbGFzczsKKworICAgIHBjbGFzcyA9IEdTVF9CVUZGRVJfUE9PTF9HRVRfQ0xBU1MgKHBvb2wpOworCisgICAgR1NUX0xPR19PQkpFQ1QgKHBvb2wsICJzdG9wcGluZyIpOworICAgIGlmIChHX0xJS0VMWSAocGNsYXNzLT5zdG9wKSkgeworICAgICAgaWYgKCFwY2xhc3MtPnN0b3AgKHBvb2wpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHBvb2wtPnN0YXJ0ZWQgPSBGQUxTRTsKKyAgfQorICByZXR1cm4gVFJVRTsKK30KKworLyoqCisgKiBnc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZToKKyAqIEBwb29sOiBhICNHc3RCdWZmZXJQb29sCisgKiBAYWN0aXZlOiB0aGUgbmV3IGFjdGl2ZSBzdGF0ZQorICoKKyAqIENvbnRyb2wgdGhlIGFjdGl2ZSBzdGF0ZSBvZiBAcG9vbC4gV2hlbiB0aGUgcG9vbCBpcyBhY3RpdmUsIG5ldyBjYWxscyB0bworICogZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyKCkgd2lsbCByZXR1cm4gd2l0aCBHU1RfRkxPV19XUk9OR19TVEFURS4KKyAqCisgKiBBY3RpdmF0aW5nIHRoZSBidWZmZXJwb29sIHdpbGwgcHJlYWxsb2NhdGUgYWxsIHJlc291cmNlcyBpbiB0aGUgcG9vbCBiYXNlZCBvbgorICogdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHBvb2wuCisgKgorICogRGVhY3RpdmF0aW5nIHdpbGwgZnJlZSB0aGUgcmVzb3VyY2VzIGFnYWluIHdoZW4gdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nCisgKiBidWZmZXJzLiBXaGVuIHRoZXJlIGFyZSBvdXRzdGFuZGluZyBidWZmZXJzLCB0aGV5IHdpbGwgYmUgZnJlZWQgYXMgc29vbiBhcworICogdGhleSBhcmUgYWxsIHJldHVybmVkIHRvIHRoZSBwb29sLgorICoKKyAqIFJldHVybnM6ICVGQUxTRSB3aGVuIHRoZSBwb29sIHdhcyBub3QgY29uZmlndXJlZCBvciB3aGVuIHByZWFsbG9jYXRpb24gb2YgdGhlCisgKiBidWZmZXJzIGZhaWxlZC4KKyAqLworZ2Jvb2xlYW4KK2dzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlIChHc3RCdWZmZXJQb29sICogcG9vbCwgZ2Jvb2xlYW4gYWN0aXZlKQoreworICBnYm9vbGVhbiByZXMgPSBUUlVFOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVGRkVSX1BPT0wgKHBvb2wpLCBGQUxTRSk7CisKKyAgR1NUX0xPR19PQkpFQ1QgKHBvb2wsICJhY3RpdmUgJWQiLCBhY3RpdmUpOworCisgIEdTVF9CVUZGRVJfUE9PTF9MT0NLIChwb29sKTsKKyAgLyoganVzdCByZXR1cm4gaWYgd2UgYXJlIGFscmVhZHkgaW4gdGhlIHJpZ2h0IHN0YXRlICovCisgIGlmIChwb29sLT5hY3RpdmUgPT0gYWN0aXZlKQorICAgIGdvdG8gd2FzX29rOworCisgIC8qIHdlIG5lZWQgdG8gYmUgY29uZmlndXJlZCAqLworICBpZiAoIXBvb2wtPmNvbmZpZ3VyZWQpCisgICAgZ290byBub3RfY29uZmlndXJlZDsKKworICBpZiAoYWN0aXZlKSB7CisgICAgaWYgKCFkb19zdGFydCAocG9vbCkpCisgICAgICBnb3RvIHN0YXJ0X2ZhaWxlZDsKKworICAgIC8qIHVuc2V0IHRoZSBmbHVzaGluZyBzdGF0ZSBub3cgKi8KKyAgICBnc3RfcG9sbF9yZWFkX2NvbnRyb2wgKHBvb2wtPnBvbGwpOworICAgIGdfYXRvbWljX2ludF9zZXQgKCZwb29sLT5mbHVzaGluZywgRkFMU0UpOworICB9IGVsc2UgeworICAgIGdpbnQgb3V0c3RhbmRpbmc7CisKKyAgICAvKiBzZXQgdG8gZmx1c2hpbmcgZmlyc3QgKi8KKyAgICBnX2F0b21pY19pbnRfc2V0ICgmcG9vbC0+Zmx1c2hpbmcsIFRSVUUpOworICAgIGdzdF9wb2xsX3dyaXRlX2NvbnRyb2wgKHBvb2wtPnBvbGwpOworCisgICAgLyogd2hlbiBhbGwgYnVmZmVycyBhcmUgaW4gdGhlIHBvb2wsIGZyZWUgdGhlbS4gRWxzZSB0aGV5IHdpbGwgYmUKKyAgICAgKiBmcmVlZCB3aGVuIHRoZXkgYXJlIHJlbGVhc2VkICovCisgICAgb3V0c3RhbmRpbmcgPSBnX2F0b21pY19pbnRfZ2V0ICgmcG9vbC0+b3V0c3RhbmRpbmcpOworICAgIEdTVF9MT0dfT0JKRUNUIChwb29sLCAib3V0c3RhbmRpbmcgYnVmZmVycyAlZCIsIG91dHN0YW5kaW5nKTsKKyAgICBpZiAob3V0c3RhbmRpbmcgPT0gMCkgeworICAgICAgaWYgKCFkb19zdG9wIChwb29sKSkKKyAgICAgICAgZ290byBzdG9wX2ZhaWxlZDsKKyAgICB9CisgIH0KKyAgcG9vbC0+YWN0aXZlID0gYWN0aXZlOworICBHU1RfQlVGRkVSX1BPT0xfVU5MT0NLIChwb29sKTsKKworICByZXR1cm4gcmVzOworCit3YXNfb2s6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChwb29sLCAicG9vbCB3YXMgaW4gdGhlIHJpZ2h0IHN0YXRlIik7CisgICAgR1NUX0JVRkZFUl9QT09MX1VOTE9DSyAocG9vbCk7CisgICAgcmV0dXJuIFRSVUU7CisgIH0KK25vdF9jb25maWd1cmVkOgorICB7CisgICAgR1NUX0VSUk9SX09CSkVDVCAocG9vbCwgInBvb2wgd2FzIG5vdCBjb25maWd1cmVkIik7CisgICAgR1NUX0JVRkZFUl9QT09MX1VOTE9DSyAocG9vbCk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CitzdGFydF9mYWlsZWQ6CisgIHsKKyAgICBHU1RfRVJST1JfT0JKRUNUIChwb29sLCAic3RhcnQgZmFpbGVkIik7CisgICAgR1NUX0JVRkZFUl9QT09MX1VOTE9DSyAocG9vbCk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CitzdG9wX2ZhaWxlZDoKKyAgeworICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocG9vbCwgInN0b3AgZmFpbGVkIik7CisgICAgR1NUX0JVRkZFUl9QT09MX1VOTE9DSyAocG9vbCk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKKy8qKgorICogZ3N0X2J1ZmZlcl9wb29sX2lzX2FjdGl2ZToKKyAqIEBwb29sOiBhICNHc3RCdWZmZXJQb29sCisgKgorICogQ2hlY2sgaWYgQHBvb2wgaXMgYWN0aXZlLiBBIHBvb2wgY2FuIGJlIGFjdGl2YXRlZCB3aXRoIHRoZQorICogZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUoKSBjYWxsLgorICoKKyAqIFJldHVybnM6ICVUUlVFIHdoZW4gdGhlIHBvb2wgaXMgYWN0aXZlLgorICovCitnYm9vbGVhbgorZ3N0X2J1ZmZlcl9wb29sX2lzX2FjdGl2ZSAoR3N0QnVmZmVyUG9vbCAqIHBvb2wpCit7CisgIGdib29sZWFuIHJlczsKKworICBHU1RfQlVGRkVSX1BPT0xfTE9DSyAocG9vbCk7CisgIHJlcyA9IHBvb2wtPmFjdGl2ZTsKKyAgR1NUX0JVRkZFUl9QT09MX1VOTE9DSyAocG9vbCk7CisKKyAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIGdib29sZWFuCitkZWZhdWx0X3NldF9jb25maWcgKEdzdEJ1ZmZlclBvb2wgKiBwb29sLCBHc3RTdHJ1Y3R1cmUgKiBjb25maWcpCit7CisgIEdzdEJ1ZmZlclBvb2xQcml2YXRlICpwcml2ID0gcG9vbC0+cHJpdjsKKyAgY29uc3QgR3N0Q2FwcyAqY2FwczsKKyAgZ3VpbnQgc2l6ZSwgbWluX2J1ZmZlcnMsIG1heF9idWZmZXJzOworICBndWludCBwcmVmaXgsIGFsaWduOworCisgIC8qIHBhcnNlIHRoZSBjb25maWcgYW5kIGtlZXAgYXJvdW5kICovCisgIGlmICghZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19nZXQgKGNvbmZpZywgJmNhcHMsICZzaXplLCAmbWluX2J1ZmZlcnMsCisgICAgICAgICAgJm1heF9idWZmZXJzLCAmcHJlZml4LCAmYWxpZ24pKQorICAgIGdvdG8gd3JvbmdfY29uZmlnOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHBvb2wsICJjb25maWcgJSIgR1NUX1BUUl9GT1JNQVQsIGNvbmZpZyk7CisKKyAgcHJpdi0+c2l6ZSA9IHNpemU7CisgIHByaXYtPm1pbl9idWZmZXJzID0gbWluX2J1ZmZlcnM7CisgIHByaXYtPm1heF9idWZmZXJzID0gbWF4X2J1ZmZlcnM7CisgIHByaXYtPnByZWZpeCA9IHByZWZpeDsKKyAgcHJpdi0+YWxpZ24gPSBhbGlnbjsKKworICByZXR1cm4gVFJVRTsKKword3JvbmdfY29uZmlnOgorICB7CisgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwb29sLCAiaW52YWxpZCBjb25maWcgJSIgR1NUX1BUUl9GT1JNQVQsIGNvbmZpZyk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKKy8qKgorICogZ3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWc6CisgKiBAcG9vbDogYSAjR3N0QnVmZmVyUG9vbAorICogQGNvbmZpZzogYSAjR3N0U3RydWN0dXJlCisgKgorICogU2V0IHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBwb29sLiBUaGUgcG9vbCBtdXN0IGJlIGluYWN0aXZlIGFuZCBhbGwgYnVmZmVycworICogYWxsb2NhdGVkIGZvcm0gdGhpcyBwb29sIG11c3QgYmUgcmV0dXJuZWQgb3IgZWxzZSB0aGlzIGZ1bmN0aW9uIHdpbGwgZG8KKyAqIG5vdGhpbmcgYW5kIHJldHVybiBGQUxTRS4KKyAqCisgKiBAY29uZmlnIGlzIGEgI0dzdFN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yCisgKiB0aGUgcG9vbC4gQSBkZWZhdWx0IGFuZCBtYW5kYXRvcnkgc2V0IG9mIHBhcmFtZXRlcnMgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aAorICogZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXQoKS4gVGhpcyBmdW5jdGlvbiB0YWtlcyBvd25lcnNoaXAgb2YgQGNvbmZpZy4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gY291bGQgYmUgc2V0LgorICovCitnYm9vbGVhbgorZ3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWcgKEdzdEJ1ZmZlclBvb2wgKiBwb29sLCBHc3RTdHJ1Y3R1cmUgKiBjb25maWcpCit7CisgIGdib29sZWFuIHJlc3VsdDsKKyAgR3N0QnVmZmVyUG9vbENsYXNzICpwY2xhc3M7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVJfUE9PTCAocG9vbCksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGNvbmZpZyAhPSBOVUxMLCBGQUxTRSk7CisKKyAgR1NUX0JVRkZFUl9QT09MX0xPQ0sgKHBvb2wpOworICAvKiBjYW4ndCBjaGFuZ2UgdGhlIHNldHRpbmdzIHdoZW4gYWN0aXZlICovCisgIGlmIChwb29sLT5hY3RpdmUpCisgICAgZ290byB3YXNfYWN0aXZlOworCisgIC8qIHdlIGNhbid0IGNoYW5nZSB3aGVuIG91dHN0YW5kaW5nIGJ1ZmZlcnMgKi8KKyAgaWYgKGdfYXRvbWljX2ludF9nZXQgKCZwb29sLT5vdXRzdGFuZGluZykgIT0gMCkKKyAgICBnb3RvIGhhdmVfb3V0c3RhbmRpbmc7CisKKyAgcGNsYXNzID0gR1NUX0JVRkZFUl9QT09MX0dFVF9DTEFTUyAocG9vbCk7CisKKyAgLyogc2V0IHRoZSBuZXcgY29uZmlnICovCisgIGlmIChHX0xJS0VMWSAocGNsYXNzLT5zZXRfY29uZmlnKSkKKyAgICByZXN1bHQgPSBwY2xhc3MtPnNldF9jb25maWcgKHBvb2wsIGNvbmZpZyk7CisgIGVsc2UKKyAgICByZXN1bHQgPSBGQUxTRTsKKworICBpZiAocmVzdWx0KSB7CisgICAgaWYgKHBvb2wtPmNvbmZpZykKKyAgICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocG9vbC0+Y29uZmlnKTsKKyAgICBwb29sLT5jb25maWcgPSBjb25maWc7CisKKyAgICAvKiBub3cgd2UgYXJlIGNvbmZpZ3VyZWQgKi8KKyAgICBwb29sLT5jb25maWd1cmVkID0gVFJVRTsKKyAgfQorICBHU1RfQlVGRkVSX1BPT0xfVU5MT0NLIChwb29sKTsKKworICByZXR1cm4gcmVzdWx0OworCisgIC8qIEVSUk9SUyAqLword2FzX2FjdGl2ZToKKyAgeworICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocG9vbCwgImNhbid0IGNoYW5nZSBjb25maWcsIHdlIGFyZSBhY3RpdmUiKTsKKyAgICBHU1RfQlVGRkVSX1BPT0xfVU5MT0NLIChwb29sKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK2hhdmVfb3V0c3RhbmRpbmc6CisgIHsKKyAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBvb2wsICJjYW4ndCBjaGFuZ2UgY29uZmlnLCBoYXZlIG91dHN0YW5kaW5nIGJ1ZmZlcnMiKTsKKyAgICBHU1RfQlVGRkVSX1BPT0xfVU5MT0NLIChwb29sKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworLyoqCisgKiBnc3RfYnVmZmVyX3Bvb2xfZ2V0X2NvbmZpZzoKKyAqIEBwb29sOiBhICNHc3RCdWZmZXJQb29sCisgKgorICogR2V0IGEgY29weSBvZiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIG9mIHRoZSBwb29sLiBUaGlzIGNvbmZpZ3VyYXRpb24KKyAqIGNhbiBlaXRoZXIgYmUgbW9kaWZpZWQgYW5kIHVzZWQgZm9yIHRoZSBnc3RfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZygpIGNhbGwKKyAqIG9yIGl0IG11c3QgYmUgZnJlZWQgYWZ0ZXIgdXNhZ2UuCisgKgorICogUmV0dXJuczogYSBjb3B5IG9mIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb2YgQHBvb2wuIHVzZQorICogZ3N0X3N0cnVjdHVyZV9mcmVlKCkgYWZ0ZXIgdXNhZ2Ugb3IgZ3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWcoKS4KKyAqLworR3N0U3RydWN0dXJlICoKK2dzdF9idWZmZXJfcG9vbF9nZXRfY29uZmlnIChHc3RCdWZmZXJQb29sICogcG9vbCkKK3sKKyAgR3N0U3RydWN0dXJlICpyZXN1bHQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVJfUE9PTCAocG9vbCksIE5VTEwpOworCisgIEdTVF9CVUZGRVJfUE9PTF9VTkxPQ0sgKHBvb2wpOworICByZXN1bHQgPSBnc3Rfc3RydWN0dXJlX2NvcHkgKHBvb2wtPmNvbmZpZyk7CisgIEdTVF9CVUZGRVJfUE9PTF9VTkxPQ0sgKHBvb2wpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBjb25zdCBnY2hhciAqZW1wdHlfb3B0aW9uW10gPSB7IE5VTEwgfTsKKworLyoqCisgKiBnc3RfYnVmZmVyX3Bvb2xfZ2V0X29wdGlvbnM6CisgKiBAcG9vbDogYSAjR3N0QnVmZmVyUG9vbAorICoKKyAqIEdldCBhIE5VTEwgdGVybWluYXRlZCBhcnJheSBvZiBzdHJpbmcgd2l0aCBzdXBwb3J0ZWQgYnVmZmVycG9vbCBvcHRpb25zIGZvcgorICogQHBvb2wuIEFuIG9wdGlvbiB3b3VsZCB0eXBpY2FsbHkgYmUgZW5hYmxlZCB3aXRoCisgKiBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2FkZF9vcHRpb24oKS4KKyAqCisgKiBSZXR1cm5zOiBhIE5VTEwgdGVybWluYXRlZCBhcnJheSBvZiBzdHJpbmdzLgorICovCitjb25zdCBnY2hhciAqKgorZ3N0X2J1ZmZlcl9wb29sX2dldF9vcHRpb25zIChHc3RCdWZmZXJQb29sICogcG9vbCkKK3sKKyAgR3N0QnVmZmVyUG9vbENsYXNzICpwY2xhc3M7CisgIGNvbnN0IGdjaGFyICoqcmVzdWx0OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVGRkVSX1BPT0wgKHBvb2wpLCBOVUxMKTsKKworICBwY2xhc3MgPSBHU1RfQlVGRkVSX1BPT0xfR0VUX0NMQVNTIChwb29sKTsKKworICBpZiAoR19MSUtFTFkgKHBjbGFzcy0+Z2V0X29wdGlvbnMpKSB7CisgICAgaWYgKChyZXN1bHQgPSBwY2xhc3MtPmdldF9vcHRpb25zIChwb29sKSkgPT0gTlVMTCkKKyAgICAgIGdvdG8gaW52YWxpZF9yZXN1bHQ7CisgIH0gZWxzZQorICAgIHJlc3VsdCA9IGVtcHR5X29wdGlvbjsKKworICByZXR1cm4gcmVzdWx0OworCisgIC8qIEVSUk9SICovCitpbnZhbGlkX3Jlc3VsdDoKKyAgeworICAgIGdfd2FybmluZyAoImJ1ZmZlcnBvb2wgc3ViY2xhc3MgcmV0dXJuZWQgTlVMTCBvcHRpb25zIik7CisgICAgcmV0dXJuIGVtcHR5X29wdGlvbjsKKyAgfQorfQorCisvKioKKyAqIGdzdF9idWZmZXJfcG9vbF9oYXNfb3B0aW9uOgorICogQHBvb2w6IGEgI0dzdEJ1ZmZlclBvb2wKKyAqIEBvcHRpb246IGFuIG9wdGlvbgorICoKKyAqIENoZWNrIGlmIHRoZSBidWZmZXJwb29sIHN1cHBvcnRzIEBvcHRpb24uCisgKgorICogUmV0dXJuczogYSBOVUxMIHRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncy4KKyAqLworZ2Jvb2xlYW4KK2dzdF9idWZmZXJfcG9vbF9oYXNfb3B0aW9uIChHc3RCdWZmZXJQb29sICogcG9vbCwgY29uc3QgZ2NoYXIgKiBvcHRpb24pCit7CisgIGd1aW50IGk7CisgIGNvbnN0IGdjaGFyICoqb3B0aW9uczsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVRkZFUl9QT09MIChwb29sKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAob3B0aW9uICE9IE5VTEwsIEZBTFNFKTsKKworICBvcHRpb25zID0gZ3N0X2J1ZmZlcl9wb29sX2dldF9vcHRpb25zIChwb29sKTsKKworICBmb3IgKGkgPSAwOyBvcHRpb25zW2ldOyBpKyspIHsKKyAgICBpZiAoZ19zdHJfZXF1YWwgKG9wdGlvbnNbaV0sIG9wdGlvbikpCisgICAgICByZXR1cm4gVFJVRTsKKyAgfQorICByZXR1cm4gRkFMU0U7Cit9CisKKy8qKgorICogZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXQ6CisgKiBAY29uZmlnOiBhICNHc3RCdWZmZXJQb29sIGNvbmZpZ3VyYXRpb24KKyAqIEBjYXBzOiBjYXBzIGZvciB0aGUgYnVmZmVycworICogQHNpemU6IHRoZSBzaXplIG9mIGVhY2ggYnVmZmVyLCBub3QgaW5jbHVkaW5nIHByZWZpeAorICogQG1pbl9idWZmZXJzOiB0aGUgbWluaW11bSBhbW91bnQgb2YgYnVmZmVycyB0byBhbGxvY2F0ZS4KKyAqIEBtYXhfYnVmZmVyczogdGhlIG1heGltdW0gYW1vdW50IG9mIGJ1ZmZlcnMgdG8gYWxsb2NhdGUgb3IgMCBmb3IgdW5saW1pdGVkLgorICogQHByZWZpeDogcHJlZml4IGVhY2ggYnVmZmVyIHdpdGggdGhpcyBtYW55IGJ5dGVzCisgKiBAYWxpZ246IGFsaWdubWVudCBvZiB0aGUgYnVmZmVyIGRhdGEuCisgKgorICogQ29uZmlndXJlIEBjb25maWcgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4KKyAqLwordm9pZAorZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXQgKEdzdFN0cnVjdHVyZSAqIGNvbmZpZywgY29uc3QgR3N0Q2FwcyAqIGNhcHMsCisgICAgZ3VpbnQgc2l6ZSwgZ3VpbnQgbWluX2J1ZmZlcnMsIGd1aW50IG1heF9idWZmZXJzLCBndWludCBwcmVmaXgsIGd1aW50IGFsaWduKQoreworICBnX3JldHVybl9pZl9mYWlsIChjb25maWcgIT0gTlVMTCk7CisKKyAgZ3N0X3N0cnVjdHVyZV9pZF9zZXQgKGNvbmZpZywKKyAgICAgIEdTVF9RVUFSSyAoQ0FQUyksIEdTVF9UWVBFX0NBUFMsIGNhcHMsCisgICAgICBHU1RfUVVBUksgKFNJWkUpLCBHX1RZUEVfVUlOVCwgc2l6ZSwKKyAgICAgIEdTVF9RVUFSSyAoTUlOX0JVRkZFUlMpLCBHX1RZUEVfVUlOVCwgbWluX2J1ZmZlcnMsCisgICAgICBHU1RfUVVBUksgKE1BWF9CVUZGRVJTKSwgR19UWVBFX1VJTlQsIG1heF9idWZmZXJzLAorICAgICAgR1NUX1FVQVJLIChQUkVGSVgpLCBHX1RZUEVfVUlOVCwgcHJlZml4LAorICAgICAgR1NUX1FVQVJLIChBTElHTiksIEdfVFlQRV9VSU5ULCBhbGlnbiwgTlVMTCk7Cit9CisKKy8qKgorICogZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19hZGRfb3B0aW9uOgorICogQGNvbmZpZzogYSAjR3N0QnVmZmVyUG9vbCBjb25maWd1cmF0aW9uCisgKiBAb3B0aW9uOiBhbiBvcHRpb24gdG8gYWRkCisgKgorICogRW5hYmxlZCB0aGUgb3B0aW9uIGluIEBjb25maWcuIFRoaXMgd2lsbCBpbnN0cnVjdCB0aGUgQGJ1ZmZlcnBvb2wgdG8gZW5hYmxlCisgKiB0aGUgc3BlY2lmaWVkIG9wdGlvbiBvbiB0aGUgYnVmZmVycyB0aGF0IGl0IGFsbG9jYXRlcy4KKyAqCisgKiBUaGUgc3VwcG9ydGVkIG9wdGlvbnMgYnkgQHBvb2wgY2FuIGJlIHJldHJpZXZlZCB3aXRoIGdzdF9idWZmZXJfcG9vbF9nZXRfb3B0aW9ucygpLgorICovCit2b2lkCitnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2FkZF9vcHRpb24gKEdzdFN0cnVjdHVyZSAqIGNvbmZpZywgY29uc3QgZ2NoYXIgKiBvcHRpb24pCit7CisgIEdWYWx1ZUFycmF5ICphcnJheTsKKyAgY29uc3QgR1ZhbHVlICp2YWx1ZTsKKyAgR1ZhbHVlIG9wdGlvbl92YWx1ZSA9IHsgMCB9OworICBnaW50IGk7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoY29uZmlnICE9IE5VTEwpOworCisgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKGNvbmZpZywgR1NUX1FVQVJLIChPUFRJT05TKSk7CisgIGlmICh2YWx1ZSkgeworICAgIGFycmF5ID0gKEdWYWx1ZUFycmF5ICopIGdfdmFsdWVfZ2V0X2JveGVkICh2YWx1ZSk7CisgIH0gZWxzZSB7CisgICAgR1ZhbHVlIG5ld19hcnJheV92YWwgPSB7IDAsIH07CisKKyAgICBhcnJheSA9IGdfdmFsdWVfYXJyYXlfbmV3ICgwKTsKKworICAgIGdfdmFsdWVfaW5pdCAoJm5ld19hcnJheV92YWwsIEdfVFlQRV9WQUxVRV9BUlJBWSk7CisgICAgZ192YWx1ZV90YWtlX2JveGVkICgmbmV3X2FycmF5X3ZhbCwgYXJyYXkpOworCisgICAgZ3N0X3N0cnVjdHVyZV9pZF90YWtlX3ZhbHVlIChjb25maWcsIEdTVF9RVUFSSyAoT1BUSU9OUyksICZuZXdfYXJyYXlfdmFsKTsKKyAgfQorICBmb3IgKGkgPSAwOyBpIDwgYXJyYXktPm5fdmFsdWVzOyBpKyspIHsKKyAgICB2YWx1ZSA9IGdfdmFsdWVfYXJyYXlfZ2V0X250aCAoYXJyYXksIGkpOworICAgIGlmIChnX3N0cl9lcXVhbCAob3B0aW9uLCBnX3ZhbHVlX2dldF9zdHJpbmcgKHZhbHVlKSkpCisgICAgICByZXR1cm47CisgIH0KKyAgZ192YWx1ZV9pbml0ICgmb3B0aW9uX3ZhbHVlLCBHX1RZUEVfU1RSSU5HKTsKKyAgZ192YWx1ZV9zZXRfc3RyaW5nICgmb3B0aW9uX3ZhbHVlLCBvcHRpb24pOworICBnX3ZhbHVlX2FycmF5X2FwcGVuZCAoYXJyYXksICZvcHRpb25fdmFsdWUpOworICBnX3ZhbHVlX3Vuc2V0ICgmb3B0aW9uX3ZhbHVlKTsKK30KKworLyoqCisgKiBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX25fb3B0aW9uczoKKyAqIEBjb25maWc6IGEgI0dzdEJ1ZmZlclBvb2wgY29uZmlndXJhdGlvbgorICoKKyAqIFJldHJpZXZlIHRoZSBudW1iZXIgb2YgdmFsdWVzIGN1cnJlbnRseSBzdG9yZWQgaW4gdGhlCisgKiBvcHRpb25zIGFycmF5IG9mIHRoZSBAY29uZmlnIHN0cnVjdHVyZS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgb3B0aW9ucyBhcnJheSBzaXplIGFzIGEgI2d1aW50LgorICovCitndWludAorZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19uX29wdGlvbnMgKEdzdFN0cnVjdHVyZSAqIGNvbmZpZykKK3sKKyAgR1ZhbHVlQXJyYXkgKmFycmF5OworICBjb25zdCBHVmFsdWUgKnZhbHVlOworICBndWludCBzaXplID0gMDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoY29uZmlnICE9IE5VTEwsIDApOworCisgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKGNvbmZpZywgR1NUX1FVQVJLIChPUFRJT05TKSk7CisgIGlmICh2YWx1ZSkgeworICAgIGFycmF5ID0gKEdWYWx1ZUFycmF5ICopIGdfdmFsdWVfZ2V0X2JveGVkICh2YWx1ZSk7CisgICAgc2l6ZSA9IGFycmF5LT5uX3ZhbHVlczsKKyAgfQorICByZXR1cm4gc2l6ZTsKK30KKworLyoqCisgKiBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldF9vcHRpb246CisgKiBAY29uZmlnOiBhICNHc3RCdWZmZXJQb29sIGNvbmZpZ3VyYXRpb24KKyAqIEBpbmRleDogcG9zaXRpb24gaW4gdGhlIG9wdGlvbiBhcnJheSB0byByZWFkCisgKgorICogUGFyc2UgYW4gYXZhaWxhYmxlIEBjb25maWcgYW5kIGdldCB0aGUgb3B0aW9uCisgKiBhdCBAaW5kZXggb2YgdGhlIG9wdGlvbnMgQVBJIGFycmF5LgorICoKKyAqIFJldHVybnM6IGEgI2djaGFyIG9mIHRoZSBvcHRpb24gYXQgQGluZGV4LgorICovCitjb25zdCBnY2hhciAqCitnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldF9vcHRpb24gKEdzdFN0cnVjdHVyZSAqIGNvbmZpZywgZ3VpbnQgaW5kZXgpCit7CisgIGNvbnN0IEdWYWx1ZSAqdmFsdWU7CisgIGNvbnN0IGdjaGFyICpyZXQgPSBOVUxMOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChjb25maWcgIT0gTlVMTCwgMCk7CisKKyAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoY29uZmlnLCBHU1RfUVVBUksgKE9QVElPTlMpKTsKKyAgaWYgKHZhbHVlKSB7CisgICAgR1ZhbHVlQXJyYXkgKmFycmF5OworICAgIEdWYWx1ZSAqb3B0aW9uX3ZhbHVlOworCisgICAgYXJyYXkgPSAoR1ZhbHVlQXJyYXkgKikgZ192YWx1ZV9nZXRfYm94ZWQgKHZhbHVlKTsKKyAgICBvcHRpb25fdmFsdWUgPSBnX3ZhbHVlX2FycmF5X2dldF9udGggKGFycmF5LCBpbmRleCk7CisKKyAgICBpZiAob3B0aW9uX3ZhbHVlKQorICAgICAgcmV0ID0gZ192YWx1ZV9nZXRfc3RyaW5nIChvcHRpb25fdmFsdWUpOworICB9CisgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICogZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19oYXNfb3B0aW9uOgorICogQGNvbmZpZzogYSAjR3N0QnVmZmVyUG9vbCBjb25maWd1cmF0aW9uCisgKiBAb3B0aW9uOiBhbiBvcHRpb24KKyAqCisgKiBDaGVjayBpZiBAY29uZmlnIGNvbnRhaW5zIEBvcHRpb24KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBvcHRpb25zIGFycmF5IGNvbnRhaW5zIEBvcHRpb24uCisgKi8KK2dib29sZWFuCitnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2hhc19vcHRpb24gKEdzdFN0cnVjdHVyZSAqIGNvbmZpZywgY29uc3QgZ2NoYXIgKiBvcHRpb24pCit7CisgIGNvbnN0IEdWYWx1ZSAqdmFsdWU7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGNvbmZpZyAhPSBOVUxMLCAwKTsKKworICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChjb25maWcsIEdTVF9RVUFSSyAoT1BUSU9OUykpOworICBpZiAodmFsdWUpIHsKKyAgICBHVmFsdWVBcnJheSAqYXJyYXk7CisgICAgR1ZhbHVlICpvcHRpb25fdmFsdWU7CisgICAgZ2ludCBpOworCisgICAgYXJyYXkgPSAoR1ZhbHVlQXJyYXkgKikgZ192YWx1ZV9nZXRfYm94ZWQgKHZhbHVlKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgYXJyYXktPm5fdmFsdWVzOyBpKyspIHsKKyAgICAgIG9wdGlvbl92YWx1ZSA9IGdfdmFsdWVfYXJyYXlfZ2V0X250aCAoYXJyYXksIGkpOworICAgICAgaWYgKGdfc3RyX2VxdWFsIChvcHRpb24sIGdfdmFsdWVfZ2V0X3N0cmluZyAob3B0aW9uX3ZhbHVlKSkpCisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgfQorICByZXR1cm4gRkFMU0U7Cit9CisKKy8qKgorICogZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19nZXQ6CisgKiBAY29uZmlnOiBhICNHc3RCdWZmZXJQb29sIGNvbmZpZ3VyYXRpb24KKyAqIEBjYXBzOiB0aGUgY2FwcyBvZiBidWZmZXJzCisgKiBAc2l6ZTogdGhlIHNpemUgb2YgZWFjaCBidWZmZXIsIG5vdCBpbmNsdWRpbmcgcHJlZml4CisgKiBAbWluX2J1ZmZlcnM6IHRoZSBtaW5pbXVtIGFtb3VudCBvZiBidWZmZXJzIHRvIGFsbG9jYXRlLgorICogQG1heF9idWZmZXJzOiB0aGUgbWF4aW11bSBhbW91bnQgb2YgYnVmZmVycyB0byBhbGxvY2F0ZSBvciAwIGZvciB1bmxpbWl0ZWQuCisgKiBAcHJlZml4OiBwcmVmaXggZWFjaCBidWZmZXIgd2l0aCB0aGlzIG1hbnkgYnl0ZXMKKyAqIEBhbGlnbjogYWxpZ25tZW50IG9mIHRoZSBidWZmZXIgZGF0YS4KKyAqCisgKiBHZXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGZyb20gQGNvbmZpZy4KKyAqLworZ2Jvb2xlYW4KK2dzdF9idWZmZXJfcG9vbF9jb25maWdfZ2V0IChHc3RTdHJ1Y3R1cmUgKiBjb25maWcsIGNvbnN0IEdzdENhcHMgKiogY2FwcywKKyAgICBndWludCAqIHNpemUsIGd1aW50ICogbWluX2J1ZmZlcnMsIGd1aW50ICogbWF4X2J1ZmZlcnMsIGd1aW50ICogcHJlZml4LAorICAgIGd1aW50ICogYWxpZ24pCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChjb25maWcgIT0gTlVMTCwgRkFMU0UpOworCisgIHJldHVybiBnc3Rfc3RydWN0dXJlX2lkX2dldCAoY29uZmlnLAorICAgICAgR1NUX1FVQVJLIChDQVBTKSwgR1NUX1RZUEVfQ0FQUywgY2FwcywKKyAgICAgIEdTVF9RVUFSSyAoU0laRSksIEdfVFlQRV9VSU5ULCBzaXplLAorICAgICAgR1NUX1FVQVJLIChNSU5fQlVGRkVSUyksIEdfVFlQRV9VSU5ULCBtaW5fYnVmZmVycywKKyAgICAgIEdTVF9RVUFSSyAoTUFYX0JVRkZFUlMpLCBHX1RZUEVfVUlOVCwgbWF4X2J1ZmZlcnMsCisgICAgICBHU1RfUVVBUksgKFBSRUZJWCksIEdfVFlQRV9VSU5ULCBwcmVmaXgsCisgICAgICBHU1RfUVVBUksgKEFMSUdOKSwgR19UWVBFX1VJTlQsIGFsaWduLCBOVUxMKTsKK30KKworc3RhdGljIEdzdEZsb3dSZXR1cm4KK2RlZmF1bHRfYWNxdWlyZV9idWZmZXIgKEdzdEJ1ZmZlclBvb2wgKiBwb29sLCBHc3RCdWZmZXIgKiogYnVmZmVyLAorICAgIEdzdEJ1ZmZlclBvb2xQYXJhbXMgKiBwYXJhbXMpCit7CisgIEdzdEZsb3dSZXR1cm4gcmVzdWx0OworICBHc3RCdWZmZXJQb29sQ2xhc3MgKnBjbGFzczsKKyAgR3N0QnVmZmVyUG9vbFByaXZhdGUgKnByaXYgPSBwb29sLT5wcml2OworCisgIHBjbGFzcyA9IEdTVF9CVUZGRVJfUE9PTF9HRVRfQ0xBU1MgKHBvb2wpOworCisgIHdoaWxlIChUUlVFKSB7CisgICAgaWYgKEdfVU5MSUtFTFkgKGdfYXRvbWljX2ludF9nZXQgKCZwb29sLT5mbHVzaGluZykpKQorICAgICAgZ290byBmbHVzaGluZzsKKworICAgIC8qIHRyeSB0byBnZXQgYSBidWZmZXIgZnJvbSB0aGUgcXVldWUgKi8KKyAgICAqYnVmZmVyID0gZ3N0X2F0b21pY19xdWV1ZV9wb3AgKHBvb2wtPnF1ZXVlKTsKKyAgICBpZiAoR19MSUtFTFkgKCpidWZmZXIpKSB7CisgICAgICBnc3RfcG9sbF9yZWFkX2NvbnRyb2wgKHBvb2wtPnBvbGwpOworICAgICAgcmVzdWx0ID0gR1NUX0ZMT1dfT0s7CisgICAgICBHU1RfTE9HX09CSkVDVCAocG9vbCwgImFjcXVpcmVkIGJ1ZmZlciAlcCIsICpidWZmZXIpOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLyogbm8gYnVmZmVyICovCisgICAgaWYgKHByaXYtPm1heF9idWZmZXJzID09IDApIHsKKyAgICAgIC8qIG5vIG1heF9idWZmZXJzLCB3ZSBhbGxvY2F0ZSBzb21lIG1vcmUgKi8KKyAgICAgIGlmIChHX0xJS0VMWSAocGNsYXNzLT5hbGxvY19idWZmZXIpKSB7CisgICAgICAgIHJlc3VsdCA9IHBjbGFzcy0+YWxsb2NfYnVmZmVyIChwb29sLCBidWZmZXIsIHBhcmFtcyk7CisgICAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0ID0gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKKyAgICAgIEdTVF9MT0dfT0JKRUNUIChwb29sLCAiYWxsb2MgYnVmZmVyICVwIiwgKmJ1ZmZlcik7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIHdhaXQgKi8KKyAgICBpZiAocGFyYW1zICYmIChwYXJhbXMtPmZsYWdzICYgR1NUX0JVRkZFUl9QT09MX0ZMQUdfRE9OVFdBSVQpKSB7CisgICAgICBHU1RfTE9HX09CSkVDVCAocG9vbCwgIm5vIG1vcmUgYnVmZmVycyIpOworICAgICAgcmVzdWx0ID0gR1NUX0ZMT1dfVU5FWFBFQ1RFRDsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8qIG5vdyB3YWl0ICovCisgICAgR1NUX0xPR19PQkpFQ1QgKHBvb2wsICJ3YWl0aW5nIGZvciBmcmVlIGJ1ZmZlcnMiKTsKKyAgICBnc3RfcG9sbF93YWl0IChwb29sLT5wb2xsLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7CisKKyAgLyogRVJST1JTICovCitmbHVzaGluZzoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBvb2wsICJ3ZSBhcmUgZmx1c2hpbmciKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfV1JPTkdfU1RBVEU7CisgIH0KK30KKworc3RhdGljIGlubGluZSB2b2lkCitkZWNfb3V0c3RhbmRpbmcgKEdzdEJ1ZmZlclBvb2wgKiBwb29sKQoreworICBpZiAoZ19hdG9taWNfaW50X2RlY19hbmRfdGVzdCAoJnBvb2wtPm91dHN0YW5kaW5nKSkgeworICAgIC8qIGFsbCBidWZmZXJzIGFyZSByZXR1cm5lZCB0byB0aGUgcG9vbCwgc2VlIGlmIHdlIG5lZWQgdG8gZnJlZSB0aGVtICovCisgICAgaWYgKGdfYXRvbWljX2ludF9nZXQgKCZwb29sLT5mbHVzaGluZykpIHsKKyAgICAgIC8qIHRha2UgdGhlIGxvY2sgc28gdGhhdCBzZXRfYWN0aXZlIGlzIG5vdCBydW4gY29uY3VycmVudGx5ICovCisgICAgICBHU1RfQlVGRkVSX1BPT0xfTE9DSyAocG9vbCk7CisgICAgICAvKiByZWNoZWNrIHRoZSBmbHVzaGluZyBzdGF0ZSBpbiB0aGUgbG9jaywgdGhlIHBvb2wgY291bGQgaGF2ZSBiZWVuCisgICAgICAgKiBzZXQgdG8gYWN0aXZlIGFnYWluICovCisgICAgICBpZiAoZ19hdG9taWNfaW50X2dldCAoJnBvb2wtPmZsdXNoaW5nKSkKKyAgICAgICAgZG9fc3RvcCAocG9vbCk7CisKKyAgICAgIEdTVF9CVUZGRVJfUE9PTF9VTkxPQ0sgKHBvb2wpOworICAgIH0KKyAgfQorfQorCitzdGF0aWMgdm9pZAorZGVmYXVsdF9yZXNldF9idWZmZXIgKEdzdEJ1ZmZlclBvb2wgKiBwb29sLCBHc3RCdWZmZXIgKiBidWZmZXIsCisgICAgR3N0QnVmZmVyUG9vbFBhcmFtcyAqIHBhcmFtcykKK3sKKyAgR1NUX0JVRkZFUl9GTEFHUyAoYnVmZmVyKSA9IDA7CisKKyAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZmZlcikgPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FOworICBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKGJ1ZmZlcikgPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FOworfQorCisvKioKKyAqIGdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlcjoKKyAqIEBwb29sOiBhICNHc3RCdWZmZXJQb29sCisgKiBAYnVmZmVyOiBhIGxvY2F0aW9uIGZvciBhICNHc3RCdWZmZXIKKyAqIEBwYXJhbXM6IHBhcmFtZXRlcnMuCisgKgorICogQWNxdWlyZSBhIGJ1ZmZlciBmcm9tIEBwb29sLiBAYnVmZmVyIHNob3VsZCBwb2ludCB0byBhIG1lbW9yeSBsb2NhdGlvbiB0aGF0CisgKiBjYW4gaG9sZCBhIHBvaW50ZXIgdG8gdGhlIG5ldyBidWZmZXIuCisgKgorICogQHBhcmFtcyBjYW4gYmUgTlVMTCBvciBjb250YWluIG9wdGlvbmFsIHBhcmFtZXRlcnMgdG8gaW5mbHVlbmNlIHRoZSBhbGxvY2F0aW9uLgorICoKKyAqIFJldHVybnM6IGEgI0dzdEZsb3dSZXR1cm4gc3VjaCBhcyBHU1RfRkxPV19XUk9OR19TVEFURSB3aGVuIHRoZSBwb29sIGlzCisgKiBpbmFjdGl2ZS4KKyAqLworR3N0Rmxvd1JldHVybgorZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyIChHc3RCdWZmZXJQb29sICogcG9vbCwgR3N0QnVmZmVyICoqIGJ1ZmZlciwKKyAgICBHc3RCdWZmZXJQb29sUGFyYW1zICogcGFyYW1zKQoreworICBHc3RCdWZmZXJQb29sQ2xhc3MgKnBjbGFzczsKKyAgR3N0Rmxvd1JldHVybiByZXN1bHQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVJfUE9PTCAocG9vbCksIEdTVF9GTE9XX0VSUk9SKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGJ1ZmZlciAhPSBOVUxMLCBHU1RfRkxPV19FUlJPUik7CisKKyAgcGNsYXNzID0gR1NUX0JVRkZFUl9QT09MX0dFVF9DTEFTUyAocG9vbCk7CisKKyAgLyogYXNzdW1lIHdlJ2xsIGhhdmUgb25lIG1vcmUgb3V0c3RhbmRpbmcgYnVmZmVyIHdlIG5lZWQgdG8gZG8gdGhhdCBzbworICAgKiB0aGF0IGNvbmN1cnJlbnQgc2V0X2FjdGl2ZSBkb2Vzbid0IGNsZWFyIHRoZSBidWZmZXJzICovCisgIGdfYXRvbWljX2ludF9pbmMgKCZwb29sLT5vdXRzdGFuZGluZyk7CisKKyAgaWYgKEdfTElLRUxZIChwY2xhc3MtPmFjcXVpcmVfYnVmZmVyKSkKKyAgICByZXN1bHQgPSBwY2xhc3MtPmFjcXVpcmVfYnVmZmVyIChwb29sLCBidWZmZXIsIHBhcmFtcyk7CisgIGVsc2UKKyAgICByZXN1bHQgPSBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOworCisgIGlmIChHX0xJS0VMWSAocmVzdWx0ID09IEdTVF9GTE9XX09LKSkgeworICAgIC8qIGFsbCBidWZmZXJzIGZyb20gdGhlIHBvb2wgcG9pbnQgdG8gdGhlIHBvb2wgYW5kIGhhdmUgdGhlIHJlZmNvdW50IG9mIHRoZQorICAgICAqIHBvb2wgaW5jcmVtZW50ZWQgKi8KKyAgICAoKmJ1ZmZlciktPnBvb2wgPSBnc3Rfb2JqZWN0X3JlZiAocG9vbCk7CisgICAgLyogbm93IHJlc2V0IHRoZSBidWZmZXIgd2hlbiBuZWVkZWQgKi8KKyAgICBpZiAoR19MSUtFTFkgKHBjbGFzcy0+cmVzZXRfYnVmZmVyKSkKKyAgICAgIHBjbGFzcy0+cmVzZXRfYnVmZmVyIChwb29sLCAqYnVmZmVyLCBwYXJhbXMpOworICB9IGVsc2UgeworICAgIGRlY19vdXRzdGFuZGluZyAocG9vbCk7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorZGVmYXVsdF9yZWxlYXNlX2J1ZmZlciAoR3N0QnVmZmVyUG9vbCAqIHBvb2wsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKK3sKKyAgLyoga2VlcCBpdCBhcm91bmQgaW4gb3VyIHF1ZXVlICovCisgIEdTVF9MT0dfT0JKRUNUIChwb29sLCAicmVsZWFzZWQgYnVmZmVyICVwIiwgYnVmZmVyKTsKKyAgZ3N0X2F0b21pY19xdWV1ZV9wdXNoIChwb29sLT5xdWV1ZSwgYnVmZmVyKTsKKyAgZ3N0X3BvbGxfd3JpdGVfY29udHJvbCAocG9vbC0+cG9sbCk7Cit9CisKKy8qKgorICogZ3N0X2J1ZmZlcl9wb29sX3JlbGVhc2VfYnVmZmVyOgorICogQHBvb2w6IGEgI0dzdEJ1ZmZlclBvb2wKKyAqIEBidWZmZXI6IGEgI0dzdEJ1ZmZlcgorICoKKyAqIFJlbGVhc2UgQGJ1ZmZlciB0byBAcG9vbC4gQGJ1ZmZlciBzaG91bGQgaGF2ZSBwcmV2aW91c2x5IGJlZW4gYWxsb2NhdGVkIGZyb20KKyAqIEBwb29sIHdpdGggZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyKCkuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c3VhbGx5IGNhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGxhc3QgcmVmIG9uIEBidWZmZXIKKyAqIGRpc2FwcGVhcnMuCisgKi8KK3ZvaWQKK2dzdF9idWZmZXJfcG9vbF9yZWxlYXNlX2J1ZmZlciAoR3N0QnVmZmVyUG9vbCAqIHBvb2wsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKK3sKKyAgR3N0QnVmZmVyUG9vbENsYXNzICpwY2xhc3M7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JVRkZFUl9QT09MIChwb29sKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKGJ1ZmZlciAhPSBOVUxMKTsKKworICAvKiBjaGVjayB0aGF0IHRoZSBidWZmZXIgaXMgb3VycywgYWxsIGJ1ZmZlcnMgcmV0dXJuZWQgdG8gdGhlIHBvb2wgaGF2ZSB0aGUKKyAgICogcG9vbCBtZW1iZXIgc2V0IHRvIE5VTEwgYW5kIHRoZSBwb29sIHJlZmNvdW50IGRlY3JlYXNlZCAqLworICBpZiAoIWdfYXRvbWljX3BvaW50ZXJfY29tcGFyZV9hbmRfZXhjaGFuZ2UgKChncG9pbnRlciAqKSAmIGJ1ZmZlci0+cG9vbCwKKyAgICAgICAgICBwb29sLCBOVUxMKSkKKyAgICByZXR1cm47CisKKyAgcGNsYXNzID0gR1NUX0JVRkZFUl9QT09MX0dFVF9DTEFTUyAocG9vbCk7CisKKyAgaWYgKEdfTElLRUxZIChwY2xhc3MtPnJlbGVhc2VfYnVmZmVyKSkKKyAgICBwY2xhc3MtPnJlbGVhc2VfYnVmZmVyIChwb29sLCBidWZmZXIpOworCisgIGRlY19vdXRzdGFuZGluZyAocG9vbCk7CisKKyAgLyogZGVjcmVhc2UgdGhlIHJlZmNvdW50IHRoYXQgdGhlIGJ1ZmZlciBoYWQgdG8gdXMgKi8KKyAgZ3N0X29iamVjdF91bnJlZiAocG9vbCk7Cit9CmRpZmYgLS1naXQgYS9nc3QvZ3N0YnVmZmVycG9vbC5oIGIvZ3N0L2dzdGJ1ZmZlcnBvb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzlmZDI2Ci0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdGJ1ZmZlcnBvb2wuaApAQCAtMCwwICsxLDIxNCBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKyAqCisgKiBnc3RidWZmZXJwb29sLmg6IEhlYWRlciBmb3IgR3N0QnVmZmVyUG9vbCBvYmplY3QKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKKyNpZm5kZWYgX19HU1RfQlVGRkVSX1BPT0xfSF9fCisjZGVmaW5lIF9fR1NUX0JVRkZFUl9QT09MX0hfXworCisjaW5jbHVkZSA8Z3N0L2dzdG1pbmlvYmplY3QuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0YXRvbWljcXVldWUuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0cG9sbC5oPgorI2luY2x1ZGUgPGdzdC9nc3RjbG9jay5oPgorI2luY2x1ZGUgPGdzdC9nc3RwYWQuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0YnVmZmVyLmg+CisKK0dfQkVHSU5fREVDTFMKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdEJ1ZmZlclBvb2xQcml2YXRlIEdzdEJ1ZmZlclBvb2xQcml2YXRlOwordHlwZWRlZiBzdHJ1Y3QgX0dzdEJ1ZmZlclBvb2xDbGFzcyBHc3RCdWZmZXJQb29sQ2xhc3M7CisKKy8qKgorICogR1NUX0JVRkZFUl9QT09MX1RSQUNFX05BTUU6CisgKgorICogVGhlIG5hbWUgdXNlZCBmb3IgdHJhY2luZyBtZW1vcnkgYWxsb2NhdGlvbnMuCisgKi8KKyNkZWZpbmUgR1NUX0JVRkZFUl9QT09MX1RSQUNFX05BTUUgICAgICAgICAgICJHc3RCdWZmZXJQb29sIgorCisjZGVmaW5lIEdTVF9UWVBFX0JVRkZFUl9QT09MICAgICAgICAgICAgICAgICAoZ3N0X2J1ZmZlcl9wb29sX2dldF90eXBlKCkpCisjZGVmaW5lIEdTVF9JU19CVUZGRVJfUE9PTChvYmopICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9CVUZGRVJfUE9PTCkpCisjZGVmaW5lIEdTVF9JU19CVUZGRVJfUE9PTF9DTEFTUyhrbGFzcykgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX0JVRkZFUl9QT09MKSkKKyNkZWZpbmUgR1NUX0JVRkZFUl9QT09MX0dFVF9DTEFTUyhvYmopICAgICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfQlVGRkVSX1BPT0wsIEdzdEJ1ZmZlclBvb2xDbGFzcykpCisjZGVmaW5lIEdTVF9CVUZGRVJfUE9PTChvYmopICAgICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9CVUZGRVJfUE9PTCwgR3N0QnVmZmVyUG9vbCkpCisjZGVmaW5lIEdTVF9CVUZGRVJfUE9PTF9DTEFTUyhrbGFzcykgICAgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX0JVRkZFUl9QT09MLCBHc3RCdWZmZXJQb29sQ2xhc3MpKQorI2RlZmluZSBHU1RfQlVGRkVSX1BPT0xfQ0FTVChvYmopICAgICAgICAgICAgKChHc3RCdWZmZXJQb29sICopKG9iaikpCisKKy8qKgorICogR3N0QnVmZmVyUG9vbEZsYWdzOgorICogQEdTVF9CVUZGRVJfUE9PTF9GTEFHX05PTkU6IG5vIGZsYWdzCisgKiBAR1NUX0JVRkZFUl9QT09MX0ZMQUdfS0VZX1VOSVQ6IGJ1ZmZlciBpcyBrZXlmcmFtZQorICogQEdTVF9CVUZGRVJfUE9PTF9GTEFHX0RPTlRXQUlUOiBkb24ndCB3YWl0IGZvciBidWZmZXIuIFRoaXMgbWFrZXMgdGhlCisgKiBhY3F1aXJlX2J1ZmZlciBtZXRob2QgcmV0dXJuIEdTVF9GTE9XX1VORVhQRUNURUQuCisgKiBAR1NUX0JVRkZFUl9QT09MX0ZMQUdfRElTQ09OVDogYnVmZmVyIGlzIGRpc2NvbnQKKyAqIEBHU1RfQlVGRkVSX1BPT0xfRkxBR19MQVNUOiBsYXN0IGZsYWcsIHN1YmNsYXNzZXMgY2FuIHVzZSBwcml2YXRlIGZsYWdzCisgKiAgICBzdGFydGluZyBmcm9tIHRoaXMgdmFsdWUuCisgKgorICogQWRkaXRpb25hbCBmbGFncyB0byBjb250cm9sIHRoZSBhbGxvY2F0aW9uIG9mIGEgYnVmZmVyCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIEdTVF9CVUZGRVJfUE9PTF9GTEFHX05PTkUgICAgID0gMCwKKyAgR1NUX0JVRkZFUl9QT09MX0ZMQUdfS0VZX1VOSVQgPSAoMSA8PCAwKSwKKyAgR1NUX0JVRkZFUl9QT09MX0ZMQUdfRE9OVFdBSVQgPSAoMSA8PCAxKSwKKyAgR1NUX0JVRkZFUl9QT09MX0ZMQUdfRElTQ09OVCAgPSAoMSA8PCAyKSwKKyAgR1NUX0JVRkZFUl9QT09MX0ZMQUdfTEFTVCAgICAgPSAoMSA8PCAxNiksCit9IEdzdEJ1ZmZlclBvb2xGbGFnczsKKworLyoqCisgKiBHc3RCdWZmZXJQb29sUGFyYW1zOgorICogQGZvcm1hdDogdGhlIGZvcm1hdCBvZiBAc3RhcnQgYW5kIEBzdG9wCisgKiBAc3RhcnQ6IHRoZSBzdGFydCBwb3NpdGlvbgorICogQHN0b3A6IHRoZSBzdG9wIHBvc2l0aW9uCisgKiBAZmxhZ3M6IGFkZGl0aW9uYWwgZmxhZ3MKKyAqCisgKiBQYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGUgZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyKCkgZnVuY3Rpb24gdG8gY29udHJvbCB0aGUKKyAqIGFsbG9jYXRpb24gb2YgdGhlIGJ1ZmZlci4KKyAqCisgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpZ25vcmVzIHRoZSBAc3RhcnQgYW5kIEBzdG9wIG1lbWJlcnMgYnV0IG90aGVyCisgKiBpbXBsZW1lbnRhdGlvbnMgY2FuIHVzZSB0aGlzIGV4dHJhIGluZm9ybWF0aW9uIHRvIGRlY2lkZSB3aGF0IGJ1ZmZlciB0bworICogcmV0dXJuLgorICovCit0eXBlZGVmIHN0cnVjdCBfR3N0QnVmZmVyUG9vbFBhcmFtcyB7CisgIEdzdEZvcm1hdCAgICAgICAgICBmb3JtYXQ7CisgIGdpbnQ2NCAgICAgICAgICAgICBzdGFydDsKKyAgZ2ludDY0ICAgICAgICAgICAgIHN0b3A7CisgIEdzdEJ1ZmZlclBvb2xGbGFncyBmbGFnczsKK30gR3N0QnVmZmVyUG9vbFBhcmFtczsKKworLyoqCisgKiBHU1RfQlVGRkVSX1BPT0xfSVNfRkxVU0hJTkc6CisgKiBAcG9vbDogYSBHc3RCdWZmZXJQb29sCisgKgorICogQ2hlY2sgaWYgdGhlIGJ1ZmZlcnBvb2wgaXMgZmx1c2hpbmcuIFN1YmNsYXNzZXMgbWlnaHQgd2FudCB0byBjaGVjayB0aGUKKyAqIHN0YXRlIG9mIHRoZSBwb29sIGluIHRoZSBhY3F1aXJlIGZ1bmN0aW9uLgorICovCisjZGVmaW5lIEdTVF9CVUZGRVJfUE9PTF9JU19GTFVTSElORyhwb29sKSAgKGdfYXRvbWljX2ludF9nZXQgKCZwb29sLT5mbHVzaGluZykpCisKKy8qKgorICogR3N0QnVmZmVyUG9vbDoKKyAqIEBvYmplY3Q6IHRoZSBwYXJlbnQgc3RydWN0dXJlCisgKgorICogVGhlIHN0cnVjdHVyZSBvZiBhICNHc3RCdWZmZXJQb29sLiBVc2UgdGhlIGFzc29jaWF0ZWQgbWFjcm9zIHRvIGFjY2VzcyB0aGUgcHVibGljCisgKiB2YXJpYWJsZXMuCisgKi8KK3N0cnVjdCBfR3N0QnVmZmVyUG9vbCB7CisgIEdzdE9iamVjdCAgICAgICAgICAgIG9iamVjdDsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgZ2Jvb2xlYW4gICAgICAgICAgICAgYWN0aXZlOworICBnYm9vbGVhbiAgICAgICAgICAgICBmbHVzaGluZzsKKyAgZ2Jvb2xlYW4gICAgICAgICAgICAgc3RhcnRlZDsKKyAgZ2ludCAgICAgICAgICAgICAgICAgb3V0c3RhbmRpbmc7CisgIEdzdEF0b21pY1F1ZXVlICAgICAgKnF1ZXVlOworICBHc3RQb2xsICAgICAgICAgICAgICpwb2xsOworCisgIGdib29sZWFuICAgICAgICAgICAgIGNvbmZpZ3VyZWQ7CisgIEdzdFN0cnVjdHVyZSAgICAgICAgKmNvbmZpZzsKKworICBHc3RCdWZmZXJQb29sUHJpdmF0ZSAqcHJpdjsKKworICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKK307CisKKy8qKgorICogR3N0QnVmZmVyUG9vbENsYXNzOgorICogQG9iamVjdF9jbGFzczogIE9iamVjdCBwYXJlbnQgY2xhc3MKKyAqIEBnZXRfb3B0aW9uczogZ2V0IGEgbGlzdCBvZiBvcHRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHBvb2wKKyAqIEBzZXRfY29uZmlnOiBhcHBseSB0aGUgYnVmZmVycG9vbCBjb25maWd1cmF0aW9uLiBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uCisgKiAgICAgICAgICAgICAgd2lsbCBwYXJzZSB0aGUgZGVmYXVsdCBjb25maWcgcGFyYW1ldGVycworICogQHN0YXJ0OiBzdGFydCB0aGUgYnVmZmVycG9vbC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2lsbCBwcmVhbGxvY2F0ZQorICogICAgICAgICBtaW4tYnVmZmVycyBidWZmZXJzIGFuZCBwdXQgdGhlbSBpbiB0aGUgcXVldWUKKyAqIEBzdG9wOiBzdG9wIHRoZSBidWZmZXJwb29sLiB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aWxsIGZyZWUgdGhlCisgKiAgICAgICAgcHJlYWxsb2NhdGVkIGJ1ZmZlcnMuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYWxsIHRoZSBidWZmZXJzIGFyZQorICogICAgICAgIHJldHVybmVkIHRvIHRoZSBwb29sLgorICogQGFjcXVpcmVfYnVmZmVyOiBnZXQgYSBuZXcgYnVmZmVyIGZyb20gdGhlIHBvb2wuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCisgKiAgICAgICAgd2lsbCB0YWtlIGEgYnVmZmVyIGZyb20gdGhlIHF1ZXVlIGFuZCBvcHRpb25hbGx5IHdhaXQgZm9yIGEgYnVmZmVyIHRvCisgKiAgICAgICAgYmUgcmVsZWFzZWQgd2hlbiB0aGVyZSBhcmUgbm8gYnVmZmVycyBhdmFpbGFibGUuCisgKiBAYWxsb2NfYnVmZmVyOiBhbGxvY2F0ZSBhIGJ1ZmZlci4gdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gYWxsb2NhdGVzCisgKiAgICAgICAgYnVmZmVycyBmcm9tIHRoZSBkZWZhdWx0IG1lbW9yeSBhbGxvY2F0b3IgYW5kIHdpdGggdGhlIGNvbmZpZ3VyZWQKKyAqICAgICAgICBzaXplLCBwcmVmaXggYW5kIGFsaWdubWVudC4KKyAqIEByZXNldF9idWZmZXI6IHJlc2V0IHRoZSBidWZmZXIgdG8gaXRzIHN0YXRlIHdoZW4gaXQgd2FzIGZyZXNobHkgYWxsb2NhdGVkLgorICogICAgICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdpbGwgY2xlYXIgdGhlIGZsYWdzIGFuZCB0aW1lc3RhbXBzLgorICogQHJlbGVhc2VfYnVmZmVyOiByZWxlYXNlIGEgYnVmZmVyIGJhY2sgaW4gdGhlIHBvb2wuIFRoZSBkZWZhdWx0CisgKiAgICAgICAgaW1wbGVtZW50YXRpb24gd2lsbCBwdXQgdGhlIGJ1ZmZlciBiYWNrIGluIHRoZSBxdWV1ZSBhbmQgbm90aWZ5IGFueQorICogICAgICAgIGJsb2NraW5nIGFjcXVpcmVfYnVmZmVyIGNhbGxzLgorICogQGZyZWVfYnVmZmVyOiBmcmVlIGEgYnVmZmVyLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB1bnJlZnMgdGhlIGJ1ZmZlci4KKyAqCisgKiBUaGUgR3N0QnVmZmVyUG9vbCBjbGFzcy4KKyAqLworc3RydWN0IF9Hc3RCdWZmZXJQb29sQ2xhc3MgeworICBHc3RPYmplY3RDbGFzcyAgICBvYmplY3RfY2xhc3M7CisKKyAgLyogdm1ldGhvZHMgKi8KKyAgY29uc3QgZ2NoYXIgKiogKCpnZXRfb3B0aW9ucykgICAgKEdzdEJ1ZmZlclBvb2wgKnBvb2wpOworICBnYm9vbGVhbiAgICAgICAoKnNldF9jb25maWcpICAgICAoR3N0QnVmZmVyUG9vbCAqcG9vbCwgR3N0U3RydWN0dXJlICpjb25maWcpOworCisgIGdib29sZWFuICAgICAgICgqc3RhcnQpICAgICAgICAgIChHc3RCdWZmZXJQb29sICpwb29sKTsKKyAgZ2Jvb2xlYW4gICAgICAgKCpzdG9wKSAgICAgICAgICAgKEdzdEJ1ZmZlclBvb2wgKnBvb2wpOworCisgIEdzdEZsb3dSZXR1cm4gICgqYWNxdWlyZV9idWZmZXIpIChHc3RCdWZmZXJQb29sICpwb29sLCBHc3RCdWZmZXIgKipidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCdWZmZXJQb29sUGFyYW1zICpwYXJhbXMpOworICBHc3RGbG93UmV0dXJuICAoKmFsbG9jX2J1ZmZlcikgICAoR3N0QnVmZmVyUG9vbCAqcG9vbCwgR3N0QnVmZmVyICoqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyUG9vbFBhcmFtcyAqcGFyYW1zKTsKKyAgdm9pZCAgICAgICAgICAgKCpyZXNldF9idWZmZXIpICAgKEdzdEJ1ZmZlclBvb2wgKnBvb2wsIEdzdEJ1ZmZlciAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyUG9vbFBhcmFtcyAqcGFyYW1zKTsKKyAgdm9pZCAgICAgICAgICAgKCpyZWxlYXNlX2J1ZmZlcikgKEdzdEJ1ZmZlclBvb2wgKnBvb2wsIEdzdEJ1ZmZlciAqYnVmZmVyKTsKKyAgdm9pZCAgICAgICAgICAgKCpmcmVlX2J1ZmZlcikgICAgKEdzdEJ1ZmZlclBvb2wgKnBvb2wsIEdzdEJ1ZmZlciAqYnVmZmVyKTsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Cit9OworCitHVHlwZSAgICAgICBnc3RfYnVmZmVyX3Bvb2xfZ2V0X3R5cGUgKHZvaWQpOworCisvKiBhbGxvY2F0aW9uICovCitHc3RCdWZmZXJQb29sICogIGdzdF9idWZmZXJfcG9vbF9uZXcgICh2b2lkKTsKKworLyogc3RhdGUgbWFuYWdlbWVudCAqLworZ2Jvb2xlYW4gICAgICAgICBnc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZSAgICAgIChHc3RCdWZmZXJQb29sICpwb29sLCBnYm9vbGVhbiBhY3RpdmUpOworZ2Jvb2xlYW4gICAgICAgICBnc3RfYnVmZmVyX3Bvb2xfaXNfYWN0aXZlICAgICAgIChHc3RCdWZmZXJQb29sICpwb29sKTsKKworZ2Jvb2xlYW4gICAgICAgICBnc3RfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZyAgICAgIChHc3RCdWZmZXJQb29sICpwb29sLCBHc3RTdHJ1Y3R1cmUgKmNvbmZpZyk7CitHc3RTdHJ1Y3R1cmUgKiAgIGdzdF9idWZmZXJfcG9vbF9nZXRfY29uZmlnICAgICAgKEdzdEJ1ZmZlclBvb2wgKnBvb2wpOworCitjb25zdCBnY2hhciAqKiAgIGdzdF9idWZmZXJfcG9vbF9nZXRfb3B0aW9ucyAgICAgKEdzdEJ1ZmZlclBvb2wgKnBvb2wpOworZ2Jvb2xlYW4gICAgICAgICBnc3RfYnVmZmVyX3Bvb2xfaGFzX29wdGlvbiAgICAgIChHc3RCdWZmZXJQb29sICpwb29sLCBjb25zdCBnY2hhciAqb3B0aW9uKTsKKworLyogaGVscGVycyBmb3IgY29uZmlndXJpbmcgdGhlIGNvbmZpZyBzdHJ1Y3R1cmUgKi8KK3ZvaWQgICAgICAgICAgICAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXQgICAgICAoR3N0U3RydWN0dXJlICpjb25maWcsIGNvbnN0IEdzdENhcHMgKmNhcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IHNpemUsIGd1aW50IG1pbl9idWZmZXJzLCBndWludCBtYXhfYnVmZmVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgcHJlZml4LCBndWludCBhbGlnbik7CitnYm9vbGVhbiAgICAgICAgIGdzdF9idWZmZXJfcG9vbF9jb25maWdfZ2V0ICAgICAgKEdzdFN0cnVjdHVyZSAqY29uZmlnLCBjb25zdCBHc3RDYXBzICoqY2FwcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgKnNpemUsIGd1aW50ICptaW5fYnVmZmVycywgZ3VpbnQgKm1heF9idWZmZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAqcHJlZml4LCBndWludCAqYWxpZ24pOworCisvKiBvcHRpb25zICovCitndWludCAgICAgICAgICAgIGdzdF9idWZmZXJfcG9vbF9jb25maWdfbl9vcHRpb25zICAgKEdzdFN0cnVjdHVyZSAqY29uZmlnKTsKK3ZvaWQgICAgICAgICAgICAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19hZGRfb3B0aW9uICAoR3N0U3RydWN0dXJlICpjb25maWcsIGNvbnN0IGdjaGFyICpvcHRpb24pOworY29uc3QgZ2NoYXIgKiAgICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldF9vcHRpb24gIChHc3RTdHJ1Y3R1cmUgKmNvbmZpZywgZ3VpbnQgaW5kZXgpOworZ2Jvb2xlYW4gICAgICAgICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2hhc19vcHRpb24gIChHc3RTdHJ1Y3R1cmUgKmNvbmZpZywgY29uc3QgZ2NoYXIgKm9wdGlvbik7CisKKy8qIGJ1ZmZlciBtYW5hZ2VtZW50ICovCitHc3RGbG93UmV0dXJuICAgIGdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlciAgKEdzdEJ1ZmZlclBvb2wgKnBvb2wsIEdzdEJ1ZmZlciAqKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyUG9vbFBhcmFtcyAqcGFyYW1zKTsKK3ZvaWQgICAgICAgICAgICAgZ3N0X2J1ZmZlcl9wb29sX3JlbGVhc2VfYnVmZmVyICAoR3N0QnVmZmVyUG9vbCAqcG9vbCwgR3N0QnVmZmVyICpidWZmZXIpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HU1RfQlVGRkVSX1BPT0xfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0YnVzLmMgYi9nc3QvZ3N0YnVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNhMTVmNwotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RidXMuYwpAQCAtMCwwICsxLDEzMTAgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA0IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+CisgKgorICogZ3N0YnVzLmM6IEdzdEJ1cyBzdWJzeXN0ZW0KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKioKKyAqIFNFQ1RJT046Z3N0YnVzCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEFzeW5jaHJvbm91cyBtZXNzYWdlIGJ1cyBzdWJzeXN0ZW0KKyAqIEBzZWVfYWxzbzogI0dzdE1lc3NhZ2UsICNHc3RFbGVtZW50CisgKgorICogVGhlICNHc3RCdXMgaXMgYW4gb2JqZWN0IHJlc3BvbnNpYmxlIGZvciBkZWxpdmVyaW5nICNHc3RNZXNzYWdlIHBhY2tldHMgaW4KKyAqIGEgZmlyc3QtaW4gZmlyc3Qtb3V0IHdheSBmcm9tIHRoZSBzdHJlYW1pbmcgdGhyZWFkcyAoc2VlICNHc3RUYXNrKSB0byB0aGUKKyAqIGFwcGxpY2F0aW9uLgorICoKKyAqIFNpbmNlIHRoZSBhcHBsaWNhdGlvbiB0eXBpY2FsbHkgb25seSB3YW50cyB0byBkZWFsIHdpdGggZGVsaXZlcnkgb2YgdGhlc2UKKyAqIG1lc3NhZ2VzIGZyb20gb25lIHRocmVhZCwgdGhlIEdzdEJ1cyB3aWxsIG1hcnNoYWxsIHRoZSBtZXNzYWdlcyBiZXR3ZWVuCisgKiBkaWZmZXJlbnQgdGhyZWFkcy4gVGhpcyBpcyBpbXBvcnRhbnQgc2luY2UgdGhlIGFjdHVhbCBzdHJlYW1pbmcgb2YgbWVkaWEKKyAqIGlzIGRvbmUgaW4gYW5vdGhlciB0aHJlYWQgdGhhbiB0aGUgYXBwbGljYXRpb24uCisgKgorICogVGhlIEdzdEJ1cyBwcm92aWRlcyBzdXBwb3J0IGZvciAjR1NvdXJjZSBiYXNlZCBub3RpZmljYXRpb25zLiBUaGlzIG1ha2VzIGl0CisgKiBwb3NzaWJsZSB0byBoYW5kbGUgdGhlIGRlbGl2ZXJ5IGluIHRoZSBnbGliIG1haW5sb29wLgorICoKKyAqIFRoZSAjR1NvdXJjZSBjYWxsYmFjayBmdW5jdGlvbiBnc3RfYnVzX2FzeW5jX3NpZ25hbF9mdW5jKCkgY2FuIGJlIHVzZWQgdG8KKyAqIGNvbnZlcnQgYWxsIGJ1cyBtZXNzYWdlcyBpbnRvIHNpZ25hbCBlbWlzc2lvbnMuCisgKgorICogQSBtZXNzYWdlIGlzIHBvc3RlZCBvbiB0aGUgYnVzIHdpdGggdGhlIGdzdF9idXNfcG9zdCgpIG1ldGhvZC4gV2l0aCB0aGUKKyAqIGdzdF9idXNfcGVlaygpIGFuZCBnc3RfYnVzX3BvcCgpIG1ldGhvZHMgb25lIGNhbiBsb29rIGF0IG9yIHJldHJpZXZlIGEKKyAqIHByZXZpb3VzbHkgcG9zdGVkIG1lc3NhZ2UuCisgKgorICogVGhlIGJ1cyBjYW4gYmUgcG9sbGVkIHdpdGggdGhlIGdzdF9idXNfcG9sbCgpIG1ldGhvZC4gVGhpcyBtZXRob2RzIGJsb2NrcworICogdXAgdG8gdGhlIHNwZWNpZmllZCB0aW1lb3V0IHZhbHVlIHVudGlsIG9uZSBvZiB0aGUgc3BlY2lmaWVkIG1lc3NhZ2VzIHR5cGVzCisgKiBpcyBwb3N0ZWQgb24gdGhlIGJ1cy4gVGhlIGFwcGxpY2F0aW9uIGNhbiB0aGVuIGdzdF9idXNfcG9wKCkgdGhlIG1lc3NhZ2VzCisgKiBmcm9tIHRoZSBidXMgdG8gaGFuZGxlIHRoZW0uCisgKiBBbHRlcm5hdGl2ZWx5IHRoZSBhcHBsaWNhdGlvbiBjYW4gcmVnaXN0ZXIgYW4gYXN5bmNocm9ub3VzIGJ1cyBmdW5jdGlvbgorICogdXNpbmcgZ3N0X2J1c19hZGRfd2F0Y2hfZnVsbCgpIG9yIGdzdF9idXNfYWRkX3dhdGNoKCkuIFRoaXMgZnVuY3Rpb24gd2lsbAorICogaW5zdGFsbCBhICNHU291cmNlIGluIHRoZSBkZWZhdWx0IGdsaWIgbWFpbiBsb29wIGFuZCB3aWxsIGRlbGl2ZXIgbWVzc2FnZXMKKyAqIGEgc2hvcnQgd2hpbGUgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gcG9zdGVkLiBOb3RlIHRoYXQgdGhlIG1haW4gbG9vcCBzaG91bGQKKyAqIGJlIHJ1bm5pbmcgZm9yIHRoZSBhc3luY2hyb25vdXMgY2FsbGJhY2tzLgorICoKKyAqIEl0IGlzIGFsc28gcG9zc2libGUgdG8gZ2V0IG1lc3NhZ2VzIGZyb20gdGhlIGJ1cyB3aXRob3V0IGFueSB0aHJlYWQKKyAqIG1hcnNoYWxsaW5nIHdpdGggdGhlIGdzdF9idXNfc2V0X3N5bmNfaGFuZGxlcigpIG1ldGhvZC4gVGhpcyBtYWtlcyBpdAorICogcG9zc2libGUgdG8gcmVhY3QgdG8gYSBtZXNzYWdlIGluIHRoZSBzYW1lIHRocmVhZCB0aGF0IHBvc3RlZCB0aGUKKyAqIG1lc3NhZ2Ugb24gdGhlIGJ1cy4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBhYmxlCisgKiB0byBkZWFsIHdpdGggbWVzc2FnZXMgZnJvbSBkaWZmZXJlbnQgdGhyZWFkcy4KKyAqCisgKiBFdmVyeSAjR3N0UGlwZWxpbmUgaGFzIG9uZSBidXMuCisgKgorICogTm90ZSB0aGF0IGEgI0dzdFBpcGVsaW5lIHdpbGwgc2V0IGl0cyBidXMgaW50byBmbHVzaGluZyBzdGF0ZSB3aGVuIGNoYW5naW5nCisgKiBmcm9tIFJFQURZIHRvIE5VTEwgc3RhdGUuCisgKgorICogTGFzdCByZXZpZXdlZCBvbiAyMDA2LTAzLTEyICgwLjEwLjUpCisgKi8KKworI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjICBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSAiZ3N0aW5mby5oIgorI2luY2x1ZGUgImdzdHBvbGwuaCIKKworI2luY2x1ZGUgImdzdGJ1cy5oIgorCisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBHU1RfQ0FUX0JVUworLyogYnVzIHNpZ25hbHMgKi8KK2VudW0KK3sKKyAgU1lOQ19NRVNTQUdFLAorICBBU1lOQ19NRVNTQUdFLAorICAvKiBhZGQgbW9yZSBhYm92ZSAqLworICBMQVNUX1NJR05BTAorfTsKKworI2RlZmluZSBERUZBVUxUX0VOQUJMRV9BU1lOQyAoVFJVRSkKKworZW51bQoreworICBQUk9QXzAsCisgIFBST1BfRU5BQkxFX0FTWU5DCit9OworCitzdGF0aWMgdm9pZCBnc3RfYnVzX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOworCitzdGF0aWMgR3N0T2JqZWN0Q2xhc3MgKnBhcmVudF9jbGFzcyA9IE5VTEw7CitzdGF0aWMgZ3VpbnQgZ3N0X2J1c19zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OworCitzdHJ1Y3QgX0dzdEJ1c1ByaXZhdGUKK3sKKyAgZ3VpbnQgbnVtX3N5bmNfbWVzc2FnZV9lbWl0dGVyczsKKyAgR1NvdXJjZSAqd2F0Y2hfaWQ7CisKKyAgZ2Jvb2xlYW4gZW5hYmxlX2FzeW5jOworICBHc3RQb2xsICpwb2xsOworICBHUG9sbEZEIHBvbGxmZDsKK307CisKK0dfREVGSU5FX1RZUEUgKEdzdEJ1cywgZ3N0X2J1cywgR1NUX1RZUEVfT0JKRUNUKTsKKworc3RhdGljIHZvaWQKK2dzdF9idXNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAorICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIEdzdEJ1cyAqYnVzID0gR1NUX0JVU19DQVNUIChvYmplY3QpOworCisgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9FTkFCTEVfQVNZTkM6CisgICAgICBidXMtPnByaXYtPmVuYWJsZV9hc3luYyA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9idXNfY29uc3RydWN0ZWQgKEdPYmplY3QgKiBvYmplY3QpCit7CisgIEdzdEJ1cyAqYnVzID0gR1NUX0JVU19DQVNUIChvYmplY3QpOworCisgIGlmIChidXMtPnByaXYtPmVuYWJsZV9hc3luYykgeworICAgIGJ1cy0+cHJpdi0+cG9sbCA9IGdzdF9wb2xsX25ld190aW1lciAoKTsKKyAgICBnc3RfcG9sbF9nZXRfcmVhZF9ncG9sbGZkIChidXMtPnByaXYtPnBvbGwsICZidXMtPnByaXYtPnBvbGxmZCk7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9idXNfY2xhc3NfaW5pdCAoR3N0QnVzQ2xhc3MgKiBrbGFzcykKK3sKKyAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKKworICBwYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQgKGtsYXNzKTsKKworICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3N0X2J1c19kaXNwb3NlOworICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfYnVzX3NldF9wcm9wZXJ0eTsKKyAgZ29iamVjdF9jbGFzcy0+Y29uc3RydWN0ZWQgPSBnc3RfYnVzX2NvbnN0cnVjdGVkOworCisgIC8qIEdzdEJ1czplbmFibGUtYXN5bmM6CisgICAqCisgICAqIEVuYWJsZSBhc3luYyBtZXNzYWdlIGRlbGl2ZXJ5IHN1cHBvcnQgZm9yIGJ1cyB3YXRjaGVzLAorICAgKiBnc3RfYnVzX3BvcCgpIGFuZCBzaW1pbGFyIEFQSS4gV2l0aG91dCB0aGlzIG9ubHkgdGhlCisgICAqIHN5bmNocm9ub3VzIG1lc3NhZ2UgaGFuZGxlcnMgYXJlIGNhbGxlZC4KKyAgICoKKyAgICogVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgY2hpbGQgZWxlbWVudCBidXNlcworICAgKiBpbiAjR3N0QmluLgorICAgKgorICAgKiBTaW5jZTogMC4xMC4zMworICAgKi8KKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9FTkFCTEVfQVNZTkMsCisgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImVuYWJsZS1hc3luYyIsICJFbmFibGUgQXN5bmMiLAorICAgICAgICAgICJFbmFibGUgYXN5bmMgbWVzc2FnZSBkZWxpdmVyeSBmb3IgYnVzIHdhdGNoZXMgYW5kIGdzdF9idXNfcG9wKCkiLAorICAgICAgICAgIERFRkFVTFRfRU5BQkxFX0FTWU5DLAorICAgICAgICAgIEdfUEFSQU1fQ09OU1RSVUNUX09OTFkgfCBHX1BBUkFNX1dSSVRBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworCisgIC8qKgorICAgKiBHc3RCdXM6OnN5bmMtbWVzc2FnZToKKyAgICogQGJ1czogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCisgICAqIEBtZXNzYWdlOiB0aGUgbWVzc2FnZSB0aGF0IGhhcyBiZWVuIHBvc3RlZCBzeW5jaHJvbm91c2x5CisgICAqCisgICAqIEEgbWVzc2FnZSBoYXMgYmVlbiBwb3N0ZWQgb24gdGhlIGJ1cy4gVGhpcyBzaWduYWwgaXMgZW1pdHRlZCBmcm9tIHRoZQorICAgKiB0aHJlYWQgdGhhdCBwb3N0ZWQgdGhlIG1lc3NhZ2Ugc28gb25lIGhhcyB0byBiZSBjYXJlZnVsIHdpdGggbG9ja2luZy4KKyAgICoKKyAgICogVGhpcyBzaWduYWwgd2lsbCBub3QgYmUgZW1pdHRlZCBieSBkZWZhdWx0LCB5b3UgaGF2ZSB0byBzZXQgdXAKKyAgICogZ3N0X2J1c19zeW5jX3NpZ25hbF9oYW5kbGVyKCkgYXMgYSBzeW5jIGhhbmRsZXIgaWYgeW91IHdhbnQgdGhpcworICAgKiBzaWduYWwgdG8gYmUgZW1pdHRlZCB3aGVuIGEgbWVzc2FnZSBpcyBwb3N0ZWQgb24gdGhlIGJ1cywgbGlrZSB0aGlzOgorICAgKiA8cHJvZ3JhbWxpc3Rpbmc+CisgICAqIGdzdF9idXNfc2V0X3N5bmNfaGFuZGxlciAoYnVzLCBnc3RfYnVzX3N5bmNfc2lnbmFsX2hhbmRsZXIsIHlvdXJkYXRhKTsKKyAgICogPC9wcm9ncmFtbGlzdGluZz4KKyAgICovCisgIGdzdF9idXNfc2lnbmFsc1tTWU5DX01FU1NBR0VdID0KKyAgICAgIGdfc2lnbmFsX25ldyAoInN5bmMtbWVzc2FnZSIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCisgICAgICBHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0RFVEFJTEVELAorICAgICAgR19TVFJVQ1RfT0ZGU0VUIChHc3RCdXNDbGFzcywgc3luY19tZXNzYWdlKSwgTlVMTCwgTlVMTCwKKyAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19CT1hFRCwgR19UWVBFX05PTkUsIDEsIEdTVF9UWVBFX01FU1NBR0UpOworCisgIC8qKgorICAgKiBHc3RCdXM6Om1lc3NhZ2U6CisgICAqIEBidXM6IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAorICAgKiBAbWVzc2FnZTogdGhlIG1lc3NhZ2UgdGhhdCBoYXMgYmVlbiBwb3N0ZWQgYXN5bmNocm9ub3VzbHkKKyAgICoKKyAgICogQSBtZXNzYWdlIGhhcyBiZWVuIHBvc3RlZCBvbiB0aGUgYnVzLiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIGZyb20gYQorICAgKiBHU291cmNlIGFkZGVkIHRvIHRoZSBtYWlubG9vcC4gdGhpcyBzaWduYWwgd2lsbCBvbmx5IGJlIGVtaXR0ZWQgd2hlbgorICAgKiB0aGVyZSBpcyBhIG1haW5sb29wIHJ1bm5pbmcuCisgICAqLworICBnc3RfYnVzX3NpZ25hbHNbQVNZTkNfTUVTU0FHRV0gPQorICAgICAgZ19zaWduYWxfbmV3ICgibWVzc2FnZSIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCisgICAgICBHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0RFVEFJTEVELAorICAgICAgR19TVFJVQ1RfT0ZGU0VUIChHc3RCdXNDbGFzcywgbWVzc2FnZSksIE5VTEwsIE5VTEwsCisgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fQk9YRUQsIEdfVFlQRV9OT05FLCAxLCBHU1RfVFlQRV9NRVNTQUdFKTsKKworICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKGtsYXNzLCBzaXplb2YgKEdzdEJ1c1ByaXZhdGUpKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9idXNfaW5pdCAoR3N0QnVzICogYnVzKQoreworICBidXMtPnF1ZXVlID0gZ3N0X2F0b21pY19xdWV1ZV9uZXcgKDMyKTsKKyAgYnVzLT5xdWV1ZV9sb2NrID0gZ19tdXRleF9uZXcgKCk7CisKKyAgYnVzLT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFIChidXMsIEdTVF9UWVBFX0JVUywgR3N0QnVzUHJpdmF0ZSk7CisgIGJ1cy0+cHJpdi0+ZW5hYmxlX2FzeW5jID0gREVGQVVMVF9FTkFCTEVfQVNZTkM7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoYnVzLCAiY3JlYXRlZCIpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2J1c19kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQoreworICBHc3RCdXMgKmJ1cyA9IEdTVF9CVVMgKG9iamVjdCk7CisKKyAgaWYgKGJ1cy0+cXVldWUpIHsKKyAgICBHc3RNZXNzYWdlICptZXNzYWdlOworCisgICAgZ19tdXRleF9sb2NrIChidXMtPnF1ZXVlX2xvY2spOworICAgIGRvIHsKKyAgICAgIG1lc3NhZ2UgPSBnc3RfYXRvbWljX3F1ZXVlX3BvcCAoYnVzLT5xdWV1ZSk7CisgICAgICBpZiAobWVzc2FnZSkKKyAgICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOworICAgIH0gd2hpbGUgKG1lc3NhZ2UgIT0gTlVMTCk7CisgICAgZ3N0X2F0b21pY19xdWV1ZV91bnJlZiAoYnVzLT5xdWV1ZSk7CisgICAgYnVzLT5xdWV1ZSA9IE5VTEw7CisgICAgZ19tdXRleF91bmxvY2sgKGJ1cy0+cXVldWVfbG9jayk7CisgICAgZ19tdXRleF9mcmVlIChidXMtPnF1ZXVlX2xvY2spOworICAgIGJ1cy0+cXVldWVfbG9jayA9IE5VTEw7CisKKyAgICBpZiAoYnVzLT5wcml2LT5wb2xsKQorICAgICAgZ3N0X3BvbGxfZnJlZSAoYnVzLT5wcml2LT5wb2xsKTsKKyAgICBidXMtPnByaXYtPnBvbGwgPSBOVUxMOworICB9CisKKyAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iamVjdCk7Cit9CisKKy8qKgorICogZ3N0X2J1c19uZXc6CisgKgorICogQ3JlYXRlcyBhIG5ldyAjR3N0QnVzIGluc3RhbmNlLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdEJ1cyBpbnN0YW5jZQorICovCitHc3RCdXMgKgorZ3N0X2J1c19uZXcgKHZvaWQpCit7CisgIEdzdEJ1cyAqcmVzdWx0OworCisgIHJlc3VsdCA9IGdfb2JqZWN0X25ld3YgKGdzdF9idXNfZ2V0X3R5cGUgKCksIDAsIE5VTEwpOworICBHU1RfREVCVUdfT0JKRUNUIChyZXN1bHQsICJjcmVhdGVkIG5ldyBidXMiKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGdzdF9idXNfcG9zdDoKKyAqIEBidXM6IGEgI0dzdEJ1cyB0byBwb3N0IG9uCisgKiBAbWVzc2FnZTogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdE1lc3NhZ2UgdG8gcG9zdAorICoKKyAqIFBvc3QgYSBtZXNzYWdlIG9uIHRoZSBnaXZlbiBidXMuIE93bmVyc2hpcCBvZiB0aGUgbWVzc2FnZQorICogaXMgdGFrZW4gYnkgdGhlIGJ1cy4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBtZXNzYWdlIGNvdWxkIGJlIHBvc3RlZCwgRkFMU0UgaWYgdGhlIGJ1cyBpcyBmbHVzaGluZy4KKyAqCisgKiBNVCBzYWZlLgorICovCitnYm9vbGVhbgorZ3N0X2J1c19wb3N0IChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtZXNzYWdlKQoreworICBHc3RCdXNTeW5jUmVwbHkgcmVwbHkgPSBHU1RfQlVTX1BBU1M7CisgIEdzdEJ1c1N5bmNIYW5kbGVyIGhhbmRsZXI7CisgIGdib29sZWFuIGVtaXRfc3luY19tZXNzYWdlOworICBncG9pbnRlciBoYW5kbGVyX2RhdGE7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVVMgKGJ1cyksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSwgRkFMU0UpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKGJ1cywgIlttc2cgJXBdIHBvc3Rpbmcgb24gYnVzICUiIEdTVF9QVFJfRk9STUFULCBtZXNzYWdlLAorICAgICAgbWVzc2FnZSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChidXMpOworICAvKiBjaGVjayBpZiB0aGUgYnVzIGlzIGZsdXNoaW5nICovCisgIGlmIChHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChidXMsIEdTVF9CVVNfRkxVU0hJTkcpKQorICAgIGdvdG8gaXNfZmx1c2hpbmc7CisKKyAgaGFuZGxlciA9IGJ1cy0+c3luY19oYW5kbGVyOworICBoYW5kbGVyX2RhdGEgPSBidXMtPnN5bmNfaGFuZGxlcl9kYXRhOworICBlbWl0X3N5bmNfbWVzc2FnZSA9IGJ1cy0+cHJpdi0+bnVtX3N5bmNfbWVzc2FnZV9lbWl0dGVycyA+IDA7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChidXMpOworCisgIC8qIGZpcnN0IGNhbGwgdGhlIHN5bmMgaGFuZGxlciBpZiBpdCBpcyBpbnN0YWxsZWQgKi8KKyAgaWYgKGhhbmRsZXIpCisgICAgcmVwbHkgPSBoYW5kbGVyIChidXMsIG1lc3NhZ2UsIGhhbmRsZXJfZGF0YSk7CisKKyAgLyogZW1pdCBzeW5jLW1lc3NhZ2UgaWYgcmVxdWVzdGVkIHRvIGRvIHNvIHZpYQorICAgICBnc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24uIHRlcnJpYmxlIGJ1dCBlZmZlY3RpdmUgKi8KKyAgaWYgKGVtaXRfc3luY19tZXNzYWdlICYmIHJlcGx5ICE9IEdTVF9CVVNfRFJPUAorICAgICAgJiYgaGFuZGxlciAhPSBnc3RfYnVzX3N5bmNfc2lnbmFsX2hhbmRsZXIpCisgICAgZ3N0X2J1c19zeW5jX3NpZ25hbF9oYW5kbGVyIChidXMsIG1lc3NhZ2UsIE5VTEwpOworCisgIC8qIElmIHRoaXMgaXMgYSBidXMgd2l0aG91dCBhc3luYyBtZXNzYWdlIGRlbGl2ZXJ5CisgICAqIGFsd2F5cyBkcm9wIHRoZSBtZXNzYWdlICovCisgIGlmICghYnVzLT5wcml2LT5wb2xsKQorICAgIHJlcGx5ID0gR1NUX0JVU19EUk9QOworCisgIC8qIG5vdyBzZWUgd2hhdCB3ZSBzaG91bGQgZG8gd2l0aCB0aGUgbWVzc2FnZSAqLworICBzd2l0Y2ggKHJlcGx5KSB7CisgICAgY2FzZSBHU1RfQlVTX0RST1A6CisgICAgICAvKiBkcm9wIHRoZSBtZXNzYWdlICovCisgICAgICBHU1RfREVCVUdfT0JKRUNUIChidXMsICJbbXNnICVwXSBkcm9wcGVkIiwgbWVzc2FnZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9CVVNfUEFTUzoKKyAgICAgIC8qIHBhc3MgdGhlIG1lc3NhZ2UgdG8gdGhlIGFzeW5jIHF1ZXVlLCByZWZjb3VudCBwYXNzZWQgaW4gdGhlIHF1ZXVlICovCisgICAgICBHU1RfREVCVUdfT0JKRUNUIChidXMsICJbbXNnICVwXSBwdXNoaW5nIG9uIGFzeW5jIHF1ZXVlIiwgbWVzc2FnZSk7CisgICAgICBnc3RfYXRvbWljX3F1ZXVlX3B1c2ggKGJ1cy0+cXVldWUsIG1lc3NhZ2UpOworICAgICAgZ3N0X3BvbGxfd3JpdGVfY29udHJvbCAoYnVzLT5wcml2LT5wb2xsKTsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJ1cywgIlttc2cgJXBdIHB1c2hlZCBvbiBhc3luYyBxdWV1ZSIsIG1lc3NhZ2UpOworCisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9CVVNfQVNZTkM6CisgICAgeworICAgICAgLyogYXN5bmMgZGVsaXZlcnksIHdlIG5lZWQgYSBtdXRleCBhbmQgYSBjb25kIHRvIGJsb2NrCisgICAgICAgKiBvbiAqLworICAgICAgR011dGV4ICpsb2NrID0gZ19tdXRleF9uZXcgKCk7CisgICAgICBHQ29uZCAqY29uZCA9IGdfY29uZF9uZXcgKCk7CisKKyAgICAgIEdTVF9NRVNTQUdFX0NPTkQgKG1lc3NhZ2UpID0gY29uZDsKKyAgICAgIEdTVF9NRVNTQUdFX0dFVF9MT0NLIChtZXNzYWdlKSA9IGxvY2s7CisKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJ1cywgIlttc2cgJXBdIHdhaXRpbmcgZm9yIGFzeW5jIGRlbGl2ZXJ5IiwgbWVzc2FnZSk7CisKKyAgICAgIC8qIG5vdyB3ZSBsb2NrIHRoZSBtZXNzYWdlIG11dGV4LCBzZW5kIHRoZSBtZXNzYWdlIHRvIHRoZSBhc3luYworICAgICAgICogcXVldWUuIFdoZW4gdGhlIG1lc3NhZ2UgaXMgaGFuZGxlZCBieSB0aGUgYXBwIGFuZCBkZXN0cm95ZWQsCisgICAgICAgKiB0aGUgY29uZCB3aWxsIGJlIHNpZ25hbGxlZCBhbmQgd2UgY2FuIGNvbnRpbnVlICovCisgICAgICBnX211dGV4X2xvY2sgKGxvY2spOworCisgICAgICBnc3RfYXRvbWljX3F1ZXVlX3B1c2ggKGJ1cy0+cXVldWUsIG1lc3NhZ2UpOworICAgICAgZ3N0X3BvbGxfd3JpdGVfY29udHJvbCAoYnVzLT5wcml2LT5wb2xsKTsKKworICAgICAgLyogbm93IGJsb2NrIHRpbGwgdGhlIG1lc3NhZ2UgaXMgZnJlZWQgKi8KKyAgICAgIGdfY29uZF93YWl0IChjb25kLCBsb2NrKTsKKyAgICAgIGdfbXV0ZXhfdW5sb2NrIChsb2NrKTsKKworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYnVzLCAiW21zZyAlcF0gZGVsaXZlcmVkIGFzeW5jaHJvbm91c2x5IiwgbWVzc2FnZSk7CisKKyAgICAgIGdfbXV0ZXhfZnJlZSAobG9jayk7CisgICAgICBnX2NvbmRfZnJlZSAoY29uZCk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgIGdfd2FybmluZyAoImludmFsaWQgcmV0dXJuIGZyb20gYnVzIHN5bmMgaGFuZGxlciIpOworICAgICAgYnJlYWs7CisgIH0KKyAgcmV0dXJuIFRSVUU7CisKKyAgLyogRVJST1JTICovCitpc19mbHVzaGluZzoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJ1cywgImJ1cyBpcyBmbHVzaGluZyIpOworICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYnVzKTsKKworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCisvKioKKyAqIGdzdF9idXNfaGF2ZV9wZW5kaW5nOgorICogQGJ1czogYSAjR3N0QnVzIHRvIGNoZWNrCisgKgorICogQ2hlY2sgaWYgdGhlcmUgYXJlIHBlbmRpbmcgbWVzc2FnZXMgb24gdGhlIGJ1cyB0aGF0CisgKiBzaG91bGQgYmUgaGFuZGxlZC4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZXJlIGFyZSBtZXNzYWdlcyBvbiB0aGUgYnVzIHRvIGJlIGhhbmRsZWQsIEZBTFNFCisgKiBvdGhlcndpc2UuCisgKgorICogTVQgc2FmZS4KKyAqLworZ2Jvb2xlYW4KK2dzdF9idXNfaGF2ZV9wZW5kaW5nIChHc3RCdXMgKiBidXMpCit7CisgIGdib29sZWFuIHJlc3VsdDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVUyAoYnVzKSwgRkFMU0UpOworCisgIC8qIHNlZSBpZiB0aGVyZSBpcyBhIG1lc3NhZ2Ugb24gdGhlIGJ1cyAqLworICByZXN1bHQgPSBnc3RfYXRvbWljX3F1ZXVlX2xlbmd0aCAoYnVzLT5xdWV1ZSkgIT0gMDsKKworICByZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGdzdF9idXNfc2V0X2ZsdXNoaW5nOgorICogQGJ1czogYSAjR3N0QnVzCisgKiBAZmx1c2hpbmc6IHdoZXRoZXIgb3Igbm90IHRvIGZsdXNoIHRoZSBidXMKKyAqCisgKiBJZiBAZmx1c2hpbmcsIGZsdXNoIG91dCBhbmQgdW5yZWYgYW55IG1lc3NhZ2VzIHF1ZXVlZCBpbiB0aGUgYnVzLiBSZWxlYXNlcworICogcmVmZXJlbmNlcyB0byB0aGUgbWVzc2FnZSBvcmlnaW4gb2JqZWN0cy4gV2lsbCBmbHVzaCBmdXR1cmUgbWVzc2FnZXMgdW50aWwKKyAqIGdzdF9idXNfc2V0X2ZsdXNoaW5nKCkgc2V0cyBAZmx1c2hpbmcgdG8gI0ZBTFNFLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK3ZvaWQKK2dzdF9idXNfc2V0X2ZsdXNoaW5nIChHc3RCdXMgKiBidXMsIGdib29sZWFuIGZsdXNoaW5nKQoreworICBHc3RNZXNzYWdlICptZXNzYWdlOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoYnVzKTsKKworICBpZiAoZmx1c2hpbmcpIHsKKyAgICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChidXMsIEdTVF9CVVNfRkxVU0hJTkcpOworCisgICAgR1NUX0RFQlVHX09CSkVDVCAoYnVzLCAic2V0IGJ1cyBmbHVzaGluZyIpOworCisgICAgd2hpbGUgKChtZXNzYWdlID0gZ3N0X2J1c19wb3AgKGJ1cykpKQorICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOworICB9IGVsc2UgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJ1cywgInVuc2V0IGJ1cyBmbHVzaGluZyIpOworICAgIEdTVF9PQkpFQ1RfRkxBR19VTlNFVCAoYnVzLCBHU1RfQlVTX0ZMVVNISU5HKTsKKyAgfQorCisgIEdTVF9PQkpFQ1RfVU5MT0NLIChidXMpOworfQorCisvKioKKyAqIGdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkOgorICogQGJ1czogYSAjR3N0QnVzIHRvIHBvcCBmcm9tCisgKiBAdGltZW91dDogYSB0aW1lb3V0IGluIG5hbm9zZWNvbmRzLCBvciBHU1RfQ0xPQ0tfVElNRV9OT05FIHRvIHdhaXQgZm9yZXZlcgorICogQHR5cGVzOiBtZXNzYWdlIHR5cGVzIHRvIHRha2UgaW50byBhY2NvdW50LCBHU1RfTUVTU0FHRV9BTlkgZm9yIGFueSB0eXBlCisgKgorICogR2V0IGEgbWVzc2FnZSBmcm9tIHRoZSBidXMgd2hvc2UgdHlwZSBtYXRjaGVzIHRoZSBtZXNzYWdlIHR5cGUgbWFzayBAdHlwZXMsCisgKiB3YWl0aW5nIHVwIHRvIHRoZSBzcGVjaWZpZWQgdGltZW91dCAoYW5kIGRpc2NhcmRpbmcgYW55IG1lc3NhZ2VzIHRoYXQgZG8gbm90CisgKiBtYXRjaCB0aGUgbWFzayBwcm92aWRlZCkuCisgKgorICogSWYgQHRpbWVvdXQgaXMgMCwgdGhpcyBmdW5jdGlvbiBiZWhhdmVzIGxpa2UgZ3N0X2J1c19wb3BfZmlsdGVyZWQoKS4gSWYKKyAqIEB0aW1lb3V0IGlzICNHU1RfQ0xPQ0tfVElNRV9OT05FLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgZm9yZXZlciB1bnRpbCBhCisgKiBtYXRjaGluZyBtZXNzYWdlIHdhcyBwb3N0ZWQgb24gdGhlIGJ1cy4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdE1lc3NhZ2UgbWF0Y2hpbmcgdGhlIGZpbHRlciBpbiBAdHlwZXMsCisgKiAgICAgb3IgTlVMTCBpZiBubyBtYXRjaGluZyBtZXNzYWdlIHdhcyBmb3VuZCBvbiB0aGUgYnVzIHVudGlsIHRoZSB0aW1lb3V0CisgKiAgICAgZXhwaXJlZC4gVGhlIG1lc3NhZ2UgaXMgdGFrZW4gZnJvbSB0aGUgYnVzIGFuZCBuZWVkcyB0byBiZSB1bnJlZmZlZAorICogICAgIHdpdGggZ3N0X21lc3NhZ2VfdW5yZWYoKSBhZnRlciB1c2FnZS4KKyAqCisgKiBNVCBzYWZlLgorICoKKyAqIFNpbmNlOiAwLjEwLjE1CisgKi8KK0dzdE1lc3NhZ2UgKgorZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQgKEdzdEJ1cyAqIGJ1cywgR3N0Q2xvY2tUaW1lIHRpbWVvdXQsCisgICAgR3N0TWVzc2FnZVR5cGUgdHlwZXMpCit7CisgIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7CisgIEdUaW1lVmFsIG5vdywgdGhlbjsKKyAgZ2Jvb2xlYW4gZmlyc3Rfcm91bmQgPSBUUlVFOworICBHc3RDbG9ja1RpbWUgZWxhcHNlZCA9IDA7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVVMgKGJ1cyksIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAodHlwZXMgIT0gMCwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0aW1lb3V0ID09IDAgfHwgYnVzLT5wcml2LT5wb2xsICE9IE5VTEwsIE5VTEwpOworCisgIGdfbXV0ZXhfbG9jayAoYnVzLT5xdWV1ZV9sb2NrKTsKKworICB3aGlsZSAoVFJVRSkgeworICAgIGdpbnQgcmV0OworCisgICAgR1NUX0xPR19PQkpFQ1QgKGJ1cywgImhhdmUgJWQgbWVzc2FnZXMiLAorICAgICAgICBnc3RfYXRvbWljX3F1ZXVlX2xlbmd0aCAoYnVzLT5xdWV1ZSkpOworCisgICAgd2hpbGUgKChtZXNzYWdlID0gZ3N0X2F0b21pY19xdWV1ZV9wb3AgKGJ1cy0+cXVldWUpKSkgeworICAgICAgaWYgKGJ1cy0+cHJpdi0+cG9sbCkKKyAgICAgICAgZ3N0X3BvbGxfcmVhZF9jb250cm9sIChidXMtPnByaXYtPnBvbGwpOworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYnVzLCAiZ290IG1lc3NhZ2UgJXAsICVzLCB0eXBlIG1hc2sgaXMgJXUiLAorICAgICAgICAgIG1lc3NhZ2UsIEdTVF9NRVNTQUdFX1RZUEVfTkFNRSAobWVzc2FnZSksIChndWludCkgdHlwZXMpOworICAgICAgaWYgKChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSAmIHR5cGVzKSAhPSAwKSB7CisgICAgICAgIC8qIGV4aXQgdGhlIGxvb3AsIHdlIGhhdmUgYSBtZXNzYWdlICovCisgICAgICAgIGdvdG8gYmVhY2g7CisgICAgICB9IGVsc2UgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChidXMsICJkaXNjYXJkaW5nIG1lc3NhZ2UsIGRvZXMgbm90IG1hdGNoIG1hc2siKTsKKyAgICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOworICAgICAgICBtZXNzYWdlID0gTlVMTDsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBubyBuZWVkIHRvIHdhaXQsIGV4aXQgbG9vcCAqLworICAgIGlmICh0aW1lb3V0ID09IDApCisgICAgICBicmVhazsKKworICAgIGVsc2UgaWYgKHRpbWVvdXQgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkgeworICAgICAgaWYgKGZpcnN0X3JvdW5kKSB7CisgICAgICAgIGdfZ2V0X2N1cnJlbnRfdGltZSAoJnRoZW4pOworICAgICAgICBmaXJzdF9yb3VuZCA9IEZBTFNFOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZ19nZXRfY3VycmVudF90aW1lICgmbm93KTsKKworICAgICAgICBlbGFwc2VkID0gR1NUX1RJTUVWQUxfVE9fVElNRSAobm93KSAtIEdTVF9USU1FVkFMX1RPX1RJTUUgKHRoZW4pOworCisgICAgICAgIGlmIChlbGFwc2VkID4gdGltZW91dCkKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBvbmx5IGhlcmUgaW4gdGltZW91dCBjYXNlICovCisgICAgZ19hc3NlcnQgKGJ1cy0+cHJpdi0+cG9sbCk7CisgICAgZ19tdXRleF91bmxvY2sgKGJ1cy0+cXVldWVfbG9jayk7CisgICAgcmV0ID0gZ3N0X3BvbGxfd2FpdCAoYnVzLT5wcml2LT5wb2xsLCB0aW1lb3V0IC0gZWxhcHNlZCk7CisgICAgZ19tdXRleF9sb2NrIChidXMtPnF1ZXVlX2xvY2spOworCisgICAgaWYgKHJldCA9PSAwKSB7CisgICAgICBHU1RfSU5GT19PQkpFQ1QgKGJ1cywgInRpbWVkIG91dCwgYnJlYWtpbmcgbG9vcCIpOworICAgICAgYnJlYWs7CisgICAgfSBlbHNlIHsKKyAgICAgIEdTVF9JTkZPX09CSkVDVCAoYnVzLCAid2UgZ290IHdva2VuIHVwLCByZWNoZWNrIGZvciBtZXNzYWdlIik7CisgICAgfQorICB9CisKK2JlYWNoOgorCisgIGdfbXV0ZXhfdW5sb2NrIChidXMtPnF1ZXVlX2xvY2spOworCisgIHJldHVybiBtZXNzYWdlOworfQorCisKKy8qKgorICogZ3N0X2J1c190aW1lZF9wb3A6CisgKiBAYnVzOiBhICNHc3RCdXMgdG8gcG9wCisgKiBAdGltZW91dDogYSB0aW1lb3V0CisgKgorICogR2V0IGEgbWVzc2FnZSBmcm9tIHRoZSBidXMsIHdhaXRpbmcgdXAgdG8gdGhlIHNwZWNpZmllZCB0aW1lb3V0LgorICoKKyAqIElmIEB0aW1lb3V0IGlzIDAsIHRoaXMgZnVuY3Rpb24gYmVoYXZlcyBsaWtlIGdzdF9idXNfcG9wKCkuIElmIEB0aW1lb3V0IGlzCisgKiAjR1NUX0NMT0NLX1RJTUVfTk9ORSwgdGhpcyBmdW5jdGlvbiB3aWxsIGJsb2NrIGZvcmV2ZXIgdW50aWwgYSBtZXNzYWdlIHdhcworICogcG9zdGVkIG9uIHRoZSBidXMuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdE1lc3NhZ2UgdGhhdCBpcyBvbiB0aGUgYnVzIGFmdGVyIHRoZQorICogICAgIHNwZWNpZmllZCB0aW1lb3V0IG9yIE5VTEwgaWYgdGhlIGJ1cyBpcyBlbXB0eSBhZnRlciB0aGUgdGltZW91dCBleHBpcmVkLgorICogVGhlIG1lc3NhZ2UgaXMgdGFrZW4gZnJvbSB0aGUgYnVzIGFuZCBuZWVkcyB0byBiZSB1bnJlZmZlZCB3aXRoCisgKiBnc3RfbWVzc2FnZV91bnJlZigpIGFmdGVyIHVzYWdlLgorICoKKyAqIE1UIHNhZmUuCisgKgorICogU2luY2U6IDAuMTAuMTIKKyAqLworR3N0TWVzc2FnZSAqCitnc3RfYnVzX3RpbWVkX3BvcCAoR3N0QnVzICogYnVzLCBHc3RDbG9ja1RpbWUgdGltZW91dCkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVVMgKGJ1cyksIE5VTEwpOworCisgIHJldHVybiBnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZCAoYnVzLCB0aW1lb3V0LCBHU1RfTUVTU0FHRV9BTlkpOworfQorCisvKioKKyAqIGdzdF9idXNfcG9wX2ZpbHRlcmVkOgorICogQGJ1czogYSAjR3N0QnVzIHRvIHBvcAorICogQHR5cGVzOiBtZXNzYWdlIHR5cGVzIHRvIHRha2UgaW50byBhY2NvdW50CisgKgorICogR2V0IGEgbWVzc2FnZSBtYXRjaGluZyBAdHlwZSBmcm9tIHRoZSBidXMuICBXaWxsIGRpc2NhcmQgYWxsIG1lc3NhZ2VzIG9uCisgKiB0aGUgYnVzIHRoYXQgZG8gbm90IG1hdGNoIEB0eXBlIGFuZCB0aGF0IGhhdmUgYmVlbiBwb3N0ZWQgYmVmb3JlIHRoZSBmaXJzdAorICogbWVzc2FnZSB0aGF0IGRvZXMgbWF0Y2ggQHR5cGUuICBJZiB0aGVyZSBpcyBubyBtZXNzYWdlIG1hdGNoaW5nIEB0eXBlIG9uCisgKiB0aGUgYnVzLCBhbGwgbWVzc2FnZXMgd2lsbCBiZSBkaXNjYXJkZWQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV4dCAjR3N0TWVzc2FnZSBtYXRjaGluZyBAdHlwZSB0aGF0IGlzIG9uCisgKiAgICAgdGhlIGJ1cywgb3IgTlVMTCBpZiB0aGUgYnVzIGlzIGVtcHR5IG9yIHRoZXJlIGlzIG5vIG1lc3NhZ2UgbWF0Y2hpbmcKKyAqICAgICBAdHlwZS4gVGhlIG1lc3NhZ2UgaXMgdGFrZW4gZnJvbSB0aGUgYnVzIGFuZCBuZWVkcyB0byBiZSB1bnJlZmZlZCB3aXRoCisgKiAgICAgZ3N0X21lc3NhZ2VfdW5yZWYoKSBhZnRlciB1c2FnZS4KKyAqCisgKiBNVCBzYWZlLgorICoKKyAqIFNpbmNlOiAwLjEwLjE1CisgKi8KK0dzdE1lc3NhZ2UgKgorZ3N0X2J1c19wb3BfZmlsdGVyZWQgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZVR5cGUgdHlwZXMpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVTIChidXMpLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHR5cGVzICE9IDAsIE5VTEwpOworCisgIHJldHVybiBnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZCAoYnVzLCAwLCB0eXBlcyk7Cit9CisKKy8qKgorICogZ3N0X2J1c19wb3A6CisgKiBAYnVzOiBhICNHc3RCdXMgdG8gcG9wCisgKgorICogR2V0IGEgbWVzc2FnZSBmcm9tIHRoZSBidXMuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdE1lc3NhZ2UgdGhhdCBpcyBvbiB0aGUgYnVzLCBvciBOVUxMIGlmIHRoZQorICogICAgIGJ1cyBpcyBlbXB0eS4gVGhlIG1lc3NhZ2UgaXMgdGFrZW4gZnJvbSB0aGUgYnVzIGFuZCBuZWVkcyB0byBiZSB1bnJlZmZlZAorICogICAgIHdpdGggZ3N0X21lc3NhZ2VfdW5yZWYoKSBhZnRlciB1c2FnZS4KKyAqCisgKiBNVCBzYWZlLgorICovCitHc3RNZXNzYWdlICoKK2dzdF9idXNfcG9wIChHc3RCdXMgKiBidXMpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVTIChidXMpLCBOVUxMKTsKKworICByZXR1cm4gZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQgKGJ1cywgMCwgR1NUX01FU1NBR0VfQU5ZKTsKK30KKworLyoqCisgKiBnc3RfYnVzX3BlZWs6CisgKiBAYnVzOiBhICNHc3RCdXMKKyAqCisgKiBQZWVrIHRoZSBtZXNzYWdlIG9uIHRoZSB0b3Agb2YgdGhlIGJ1cycgcXVldWUuIFRoZSBtZXNzYWdlIHdpbGwgcmVtYWluCisgKiBvbiB0aGUgYnVzJyBtZXNzYWdlIHF1ZXVlLiBBIHJlZmVyZW5jZSBpcyByZXR1cm5lZCwgYW5kIG5lZWRzIHRvIGJlIHVucmVmZmVkCisgKiBieSB0aGUgY2FsbGVyLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RNZXNzYWdlIHRoYXQgaXMgb24gdGhlIGJ1cywgb3IgTlVMTCBpZiB0aGUKKyAqICAgICBidXMgaXMgZW1wdHkuCisgKgorICogTVQgc2FmZS4KKyAqLworR3N0TWVzc2FnZSAqCitnc3RfYnVzX3BlZWsgKEdzdEJ1cyAqIGJ1cykKK3sKKyAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVUyAoYnVzKSwgTlVMTCk7CisKKyAgZ19tdXRleF9sb2NrIChidXMtPnF1ZXVlX2xvY2spOworICBtZXNzYWdlID0gZ3N0X2F0b21pY19xdWV1ZV9wZWVrIChidXMtPnF1ZXVlKTsKKyAgaWYgKG1lc3NhZ2UpCisgICAgZ3N0X21lc3NhZ2VfcmVmIChtZXNzYWdlKTsKKyAgZ19tdXRleF91bmxvY2sgKGJ1cy0+cXVldWVfbG9jayk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoYnVzLCAicGVlayBvbiBidXMsIGdvdCBtZXNzYWdlICVwIiwgbWVzc2FnZSk7CisKKyAgcmV0dXJuIG1lc3NhZ2U7Cit9CisKKy8qKgorICogZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyOgorICogQGJ1czogYSAjR3N0QnVzIHRvIGluc3RhbGwgdGhlIGhhbmRsZXIgb24KKyAqIEBmdW5jOiBUaGUgaGFuZGxlciBmdW5jdGlvbiB0byBpbnN0YWxsCisgKiBAZGF0YTogVXNlciBkYXRhIHRoYXQgd2lsbCBiZSBzZW50IHRvIHRoZSBoYW5kbGVyIGZ1bmN0aW9uLgorICoKKyAqIFNldHMgdGhlIHN5bmNocm9ub3VzIGhhbmRsZXIgb24gdGhlIGJ1cy4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkCisgKiBldmVyeSB0aW1lIGEgbmV3IG1lc3NhZ2UgaXMgcG9zdGVkIG9uIHRoZSBidXMuIE5vdGUgdGhhdCB0aGUgZnVuY3Rpb24KKyAqIHdpbGwgYmUgY2FsbGVkIGluIHRoZSBzYW1lIHRocmVhZCBjb250ZXh0IGFzIHRoZSBwb3N0aW5nIG9iamVjdC4gVGhpcworICogZnVuY3Rpb24gaXMgdXN1YWxseSBvbmx5IGNhbGxlZCBieSB0aGUgY3JlYXRvciBvZiB0aGUgYnVzLiBBcHBsaWNhdGlvbnMKKyAqIHNob3VsZCBoYW5kbGUgbWVzc2FnZXMgYXN5bmNocm9ub3VzbHkgdXNpbmcgdGhlIGdzdF9idXMgd2F0Y2ggYW5kIHBvbGwKKyAqIGZ1bmN0aW9ucy4KKyAqCisgKiBZb3UgY2Fubm90IHJlcGxhY2UgYW4gZXhpc3Rpbmcgc3luY19oYW5kbGVyLiBZb3UgY2FuIHBhc3MgTlVMTCB0byB0aGlzCisgKiBmdW5jdGlvbiwgd2hpY2ggd2lsbCBjbGVhciB0aGUgZXhpc3RpbmcgaGFuZGxlci4KKyAqLwordm9pZAorZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyIChHc3RCdXMgKiBidXMsIEdzdEJ1c1N5bmNIYW5kbGVyIGZ1bmMsIGdwb2ludGVyIGRhdGEpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19CVVMgKGJ1cykpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoYnVzKTsKKworICAvKiBBc3NlcnQgaWYgdGhlIHVzZXIgYXR0ZW1wdHMgdG8gcmVwbGFjZSBhbiBleGlzdGluZyBzeW5jX2hhbmRsZXIsCisgICAqIG90aGVyIHRoYW4gdG8gY2xlYXIgaXQgKi8KKyAgaWYgKGZ1bmMgIT0gTlVMTCAmJiBidXMtPnN5bmNfaGFuZGxlciAhPSBOVUxMKQorICAgIGdvdG8gbm9fcmVwbGFjZTsKKworICBidXMtPnN5bmNfaGFuZGxlciA9IGZ1bmM7CisgIGJ1cy0+c3luY19oYW5kbGVyX2RhdGEgPSBkYXRhOworICBHU1RfT0JKRUNUX1VOTE9DSyAoYnVzKTsKKworICByZXR1cm47CisKK25vX3JlcGxhY2U6CisgIHsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYnVzKTsKKyAgICBnX3dhcm5pbmcgKCJjYW5ub3QgcmVwbGFjZSBleGlzdGluZyBzeW5jIGhhbmRsZXIiKTsKKyAgICByZXR1cm47CisgIH0KK30KKworLyogR1NvdXJjZSBmb3IgdGhlIGJ1cworICovCit0eXBlZGVmIHN0cnVjdAoreworICBHU291cmNlIHNvdXJjZTsKKyAgR3N0QnVzICpidXM7Cit9IEdzdEJ1c1NvdXJjZTsKKworc3RhdGljIGdib29sZWFuCitnc3RfYnVzX3NvdXJjZV9wcmVwYXJlIChHU291cmNlICogc291cmNlLCBnaW50ICogdGltZW91dCkKK3sKKyAgKnRpbWVvdXQgPSAtMTsKKyAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9idXNfc291cmNlX2NoZWNrIChHU291cmNlICogc291cmNlKQoreworICBHc3RCdXNTb3VyY2UgKmJzcmMgPSAoR3N0QnVzU291cmNlICopIHNvdXJjZTsKKworICByZXR1cm4gYnNyYy0+YnVzLT5wcml2LT5wb2xsZmQucmV2ZW50cyAmIChHX0lPX0lOIHwgR19JT19IVVAgfCBHX0lPX0VSUik7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2J1c19zb3VyY2VfZGlzcGF0Y2ggKEdTb3VyY2UgKiBzb3VyY2UsIEdTb3VyY2VGdW5jIGNhbGxiYWNrLAorICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgR3N0QnVzRnVuYyBoYW5kbGVyID0gKEdzdEJ1c0Z1bmMpIGNhbGxiYWNrOworICBHc3RCdXNTb3VyY2UgKmJzb3VyY2UgPSAoR3N0QnVzU291cmNlICopIHNvdXJjZTsKKyAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKKyAgZ2Jvb2xlYW4ga2VlcDsKKyAgR3N0QnVzICpidXM7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGJzb3VyY2UgIT0gTlVMTCwgRkFMU0UpOworCisgIGJ1cyA9IGJzb3VyY2UtPmJ1czsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVUyAoYnVzKSwgRkFMU0UpOworCisgIG1lc3NhZ2UgPSBnc3RfYnVzX3BvcCAoYnVzKTsKKworICAvKiBUaGUgbWVzc2FnZSBxdWV1ZSBtaWdodCBiZSBlbXB0eSBpZiBzb21lIG90aGVyIHRocmVhZCBvciBjYWxsYmFjayBzZXQKKyAgICogdGhlIGJ1cyB0byBmbHVzaGluZyBiZXR3ZWVuIGNoZWNrL3ByZXBhcmUgYW5kIGRpc3BhdGNoICovCisgIGlmIChHX1VOTElLRUxZIChtZXNzYWdlID09IE5VTEwpKQorICAgIHJldHVybiBUUlVFOworCisgIGlmICghaGFuZGxlcikKKyAgICBnb3RvIG5vX2hhbmRsZXI7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoYnVzLCAic291cmNlICVwIGNhbGxpbmcgZGlzcGF0Y2ggd2l0aCAlcCIsIHNvdXJjZSwgbWVzc2FnZSk7CisKKyAga2VlcCA9IGhhbmRsZXIgKGJ1cywgbWVzc2FnZSwgdXNlcl9kYXRhKTsKKyAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKGJ1cywgInNvdXJjZSAlcCBoYW5kbGVyIHJldHVybnMgJWQiLCBzb3VyY2UsIGtlZXApOworCisgIHJldHVybiBrZWVwOworCitub19oYW5kbGVyOgorICB7CisgICAgZ193YXJuaW5nICgiR3N0QnVzIHdhdGNoIGRpc3BhdGNoZWQgd2l0aG91dCBjYWxsYmFja1xuIgorICAgICAgICAiWW91IG11c3QgY2FsbCBnX3NvdXJjZV9zZXRfY2FsbGJhY2soKS4iKTsKKyAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfYnVzX3NvdXJjZV9maW5hbGl6ZSAoR1NvdXJjZSAqIHNvdXJjZSkKK3sKKyAgR3N0QnVzU291cmNlICpic291cmNlID0gKEdzdEJ1c1NvdXJjZSAqKSBzb3VyY2U7CisgIEdzdEJ1cyAqYnVzOworCisgIGJ1cyA9IGJzb3VyY2UtPmJ1czsKKworICBHU1RfREVCVUdfT0JKRUNUIChidXMsICJmaW5hbGl6ZSBzb3VyY2UgJXAiLCBzb3VyY2UpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoYnVzKTsKKyAgaWYgKGJ1cy0+cHJpdi0+d2F0Y2hfaWQgPT0gc291cmNlKQorICAgIGJ1cy0+cHJpdi0+d2F0Y2hfaWQgPSBOVUxMOworICBHU1RfT0JKRUNUX1VOTE9DSyAoYnVzKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChic291cmNlLT5idXMpOworICBic291cmNlLT5idXMgPSBOVUxMOworfQorCitzdGF0aWMgR1NvdXJjZUZ1bmNzIGdzdF9idXNfc291cmNlX2Z1bmNzID0geworICBnc3RfYnVzX3NvdXJjZV9wcmVwYXJlLAorICBnc3RfYnVzX3NvdXJjZV9jaGVjaywKKyAgZ3N0X2J1c19zb3VyY2VfZGlzcGF0Y2gsCisgIGdzdF9idXNfc291cmNlX2ZpbmFsaXplCit9OworCisvKioKKyAqIGdzdF9idXNfY3JlYXRlX3dhdGNoOgorICogQGJ1czogYSAjR3N0QnVzIHRvIGNyZWF0ZSB0aGUgd2F0Y2ggZm9yCisgKgorICogQ3JlYXRlIHdhdGNoIGZvciB0aGlzIGJ1cy4gVGhlIEdTb3VyY2Ugd2lsbCBiZSBkaXNwYXRjaGVkIHdoZW5ldmVyCisgKiBhIG1lc3NhZ2UgaXMgb24gdGhlIGJ1cy4gQWZ0ZXIgdGhlIEdTb3VyY2UgaXMgZGlzcGF0Y2hlZCwgdGhlCisgKiBtZXNzYWdlIGlzIHBvcHBlZCBvZmYgdGhlIGJ1cyBhbmQgdW5yZWZmZWQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNHU291cmNlIHRoYXQgY2FuIGJlIGFkZGVkIHRvIGEgbWFpbmxvb3AuCisgKi8KK0dTb3VyY2UgKgorZ3N0X2J1c19jcmVhdGVfd2F0Y2ggKEdzdEJ1cyAqIGJ1cykKK3sKKyAgR3N0QnVzU291cmNlICpzb3VyY2U7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVVMgKGJ1cyksIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoYnVzLT5wcml2LT5wb2xsICE9IE5VTEwsIE5VTEwpOworCisgIHNvdXJjZSA9IChHc3RCdXNTb3VyY2UgKikgZ19zb3VyY2VfbmV3ICgmZ3N0X2J1c19zb3VyY2VfZnVuY3MsCisgICAgICBzaXplb2YgKEdzdEJ1c1NvdXJjZSkpOworICBzb3VyY2UtPmJ1cyA9IGdzdF9vYmplY3RfcmVmIChidXMpOworICBnX3NvdXJjZV9hZGRfcG9sbCAoKEdTb3VyY2UgKikgc291cmNlLCAmYnVzLT5wcml2LT5wb2xsZmQpOworCisgIHJldHVybiAoR1NvdXJjZSAqKSBzb3VyY2U7Cit9CisKKy8qIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGJ1cyBPQkpFQ1QgTE9DSyAqLworc3RhdGljIGd1aW50Citnc3RfYnVzX2FkZF93YXRjaF9mdWxsX3VubG9ja2VkIChHc3RCdXMgKiBidXMsIGdpbnQgcHJpb3JpdHksCisgICAgR3N0QnVzRnVuYyBmdW5jLCBncG9pbnRlciB1c2VyX2RhdGEsIEdEZXN0cm95Tm90aWZ5IG5vdGlmeSkKK3sKKyAgR01haW5Db250ZXh0ICpjdHg7CisgIGd1aW50IGlkOworICBHU291cmNlICpzb3VyY2U7CisKKyAgaWYgKGJ1cy0+cHJpdi0+d2F0Y2hfaWQpIHsKKyAgICBHU1RfRVJST1JfT0JKRUNUIChidXMsCisgICAgICAgICJUcmllZCB0byBhZGQgbmV3IHdhdGNoIHdoaWxlIG9uZSB3YXMgYWxyZWFkeSB0aGVyZSIpOworICAgIHJldHVybiAwOworICB9CisKKyAgc291cmNlID0gZ3N0X2J1c19jcmVhdGVfd2F0Y2ggKGJ1cyk7CisKKyAgaWYgKHByaW9yaXR5ICE9IEdfUFJJT1JJVFlfREVGQVVMVCkKKyAgICBnX3NvdXJjZV9zZXRfcHJpb3JpdHkgKHNvdXJjZSwgcHJpb3JpdHkpOworCisgIGdfc291cmNlX3NldF9jYWxsYmFjayAoc291cmNlLCAoR1NvdXJjZUZ1bmMpIGZ1bmMsIHVzZXJfZGF0YSwgbm90aWZ5KTsKKworICBjdHggPSBnX21haW5fY29udGV4dF9nZXRfdGhyZWFkX2RlZmF1bHQgKCk7CisgIGlkID0gZ19zb3VyY2VfYXR0YWNoIChzb3VyY2UsIGN0eCk7CisgIGdfc291cmNlX3VucmVmIChzb3VyY2UpOworCisgIGlmIChpZCkgeworICAgIGJ1cy0+cHJpdi0+d2F0Y2hfaWQgPSBzb3VyY2U7CisgIH0KKworICBHU1RfREVCVUdfT0JKRUNUIChidXMsICJOZXcgc291cmNlICVwIHdpdGggaWQgJXUiLCBzb3VyY2UsIGlkKTsKKyAgcmV0dXJuIGlkOworfQorCisvKioKKyAqIGdzdF9idXNfYWRkX3dhdGNoX2Z1bGw6CisgKiBAYnVzOiBhICNHc3RCdXMgdG8gY3JlYXRlIHRoZSB3YXRjaCBmb3IuCisgKiBAcHJpb3JpdHk6IFRoZSBwcmlvcml0eSBvZiB0aGUgd2F0Y2guCisgKiBAZnVuYzogQSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gYSBtZXNzYWdlIGlzIHJlY2VpdmVkLgorICogQHVzZXJfZGF0YTogdXNlciBkYXRhIHBhc3NlZCB0byBAZnVuYy4KKyAqIEBub3RpZnk6IHRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHNvdXJjZSBpcyByZW1vdmVkLgorICoKKyAqIEFkZHMgYSBidXMgd2F0Y2ggdG8gdGhlIGRlZmF1bHQgbWFpbiBjb250ZXh0IHdpdGggdGhlIGdpdmVuIEBwcmlvcml0eSAoZS5nLgorICogJUdfUFJJT1JJVFlfREVGQVVMVCkuIFNpbmNlIDAuMTAuMzMgaXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgYSBub24tZGVmYXVsdAorICogbWFpbiBjb250ZXh0IHNldCB1cCB1c2luZyBnX21haW5fY29udGV4dF9wdXNoX3RocmVhZF9kZWZhdWx0KCkgKGJlZm9yZQorICogb25lIGhhZCB0byBjcmVhdGUgYSBidXMgd2F0Y2ggc291cmNlIGFuZCBhdHRhY2ggaXQgdG8gdGhlIGRlc2lyZWQgbWFpbgorICogY29udGV4dCAnbWFudWFsbHknKS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVjZWl2ZSBhc3luY2hyb25vdXMgbWVzc2FnZXMgaW4gdGhlIG1haW4gbG9vcC4KKyAqIFRoZXJlIGNhbiBvbmx5IGJlIGEgc2luZ2xlIGJ1cyB3YXRjaCBwZXIgYnVzLCB5b3UgbXVzdCByZW1vdmUgaXQgYmVmb3JlIHlvdQorICogY2FuIHNldCBhIG5ldyBvbmUuCisgKgorICogV2hlbiBAZnVuYyBpcyBjYWxsZWQsIHRoZSBtZXNzYWdlIGJlbG9uZ3MgdG8gdGhlIGNhbGxlcjsgaWYgeW91IHdhbnQgdG8KKyAqIGtlZXAgYSBjb3B5IG9mIGl0LCBjYWxsIGdzdF9tZXNzYWdlX3JlZigpIGJlZm9yZSBsZWF2aW5nIEBmdW5jLgorICoKKyAqIFRoZSB3YXRjaCBjYW4gYmUgcmVtb3ZlZCB1c2luZyBnX3NvdXJjZV9yZW1vdmUoKSBvciBieSByZXR1cm5pbmcgRkFMU0UKKyAqIGZyb20gQGZ1bmMuCisgKgorICogUmV0dXJuczogVGhlIGV2ZW50IHNvdXJjZSBpZC4KKyAqCisgKiBNVCBzYWZlLgorICovCitndWludAorZ3N0X2J1c19hZGRfd2F0Y2hfZnVsbCAoR3N0QnVzICogYnVzLCBnaW50IHByaW9yaXR5LAorICAgIEdzdEJ1c0Z1bmMgZnVuYywgZ3BvaW50ZXIgdXNlcl9kYXRhLCBHRGVzdHJveU5vdGlmeSBub3RpZnkpCit7CisgIGd1aW50IGlkOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVTIChidXMpLCAwKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKGJ1cyk7CisgIGlkID0gZ3N0X2J1c19hZGRfd2F0Y2hfZnVsbF91bmxvY2tlZCAoYnVzLCBwcmlvcml0eSwgZnVuYywgdXNlcl9kYXRhLCBub3RpZnkpOworICBHU1RfT0JKRUNUX1VOTE9DSyAoYnVzKTsKKworICByZXR1cm4gaWQ7Cit9CisKKy8qKgorICogZ3N0X2J1c19hZGRfd2F0Y2g6CisgKiBAYnVzOiBhICNHc3RCdXMgdG8gY3JlYXRlIHRoZSB3YXRjaCBmb3IKKyAqIEBmdW5jOiBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuCisgKiBAdXNlcl9kYXRhOiB1c2VyIGRhdGEgcGFzc2VkIHRvIEBmdW5jLgorICoKKyAqIEFkZHMgYSBidXMgd2F0Y2ggdG8gdGhlIGRlZmF1bHQgbWFpbiBjb250ZXh0IHdpdGggdGhlIGRlZmF1bHQgcHJpb3JpdHkKKyAqICglR19QUklPUklUWV9ERUZBVUxUKS4gU2luY2UgMC4xMC4zMyBpdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBhIG5vbi1kZWZhdWx0CisgKiBtYWluIGNvbnRleHQgc2V0IHVwIHVzaW5nIGdfbWFpbl9jb250ZXh0X3B1c2hfdGhyZWFkX2RlZmF1bHQoKSAoYmVmb3JlCisgKiBvbmUgaGFkIHRvIGNyZWF0ZSBhIGJ1cyB3YXRjaCBzb3VyY2UgYW5kIGF0dGFjaCBpdCB0byB0aGUgZGVzaXJlZCBtYWluCisgKiBjb250ZXh0ICdtYW51YWxseScpLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZWNlaXZlIGFzeW5jaHJvbm91cyBtZXNzYWdlcyBpbiB0aGUgbWFpbiBsb29wLgorICogVGhlcmUgY2FuIG9ubHkgYmUgYSBzaW5nbGUgYnVzIHdhdGNoIHBlciBidXMsIHlvdSBtdXN0IHJlbW92ZSBpdCBiZWZvcmUgeW91CisgKiBjYW4gc2V0IGEgbmV3IG9uZS4KKyAqCisgKiBUaGUgd2F0Y2ggY2FuIGJlIHJlbW92ZWQgdXNpbmcgZ19zb3VyY2VfcmVtb3ZlKCkgb3IgYnkgcmV0dXJuaW5nIEZBTFNFCisgKiBmcm9tIEBmdW5jLgorICoKKyAqIFJldHVybnM6IFRoZSBldmVudCBzb3VyY2UgaWQuCisgKgorICogTVQgc2FmZS4KKyAqLworZ3VpbnQKK2dzdF9idXNfYWRkX3dhdGNoIChHc3RCdXMgKiBidXMsIEdzdEJ1c0Z1bmMgZnVuYywgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICByZXR1cm4gZ3N0X2J1c19hZGRfd2F0Y2hfZnVsbCAoYnVzLCBHX1BSSU9SSVRZX0RFRkFVTFQsIGZ1bmMsCisgICAgICB1c2VyX2RhdGEsIE5VTEwpOworfQorCit0eXBlZGVmIHN0cnVjdAoreworICBHTWFpbkxvb3AgKmxvb3A7CisgIGd1aW50IHRpbWVvdXRfaWQ7CisgIGdib29sZWFuIHNvdXJjZV9ydW5uaW5nOworICBHc3RNZXNzYWdlVHlwZSBldmVudHM7CisgIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Cit9IEdzdEJ1c1BvbGxEYXRhOworCitzdGF0aWMgdm9pZAorcG9sbF9mdW5jIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHc3RCdXNQb2xsRGF0YSAqIHBvbGxfZGF0YSkKK3sKKyAgR3N0TWVzc2FnZVR5cGUgdHlwZTsKKworICBpZiAoIWdfbWFpbl9sb29wX2lzX3J1bm5pbmcgKHBvbGxfZGF0YS0+bG9vcCkpIHsKKyAgICBHU1RfREVCVUcgKCJtYWlubG9vcCAlcCBub3QgcnVubmluZyIsIHBvbGxfZGF0YS0+bG9vcCk7CisgICAgcmV0dXJuOworICB9CisKKyAgdHlwZSA9IEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpOworCisgIGlmICh0eXBlICYgcG9sbF9kYXRhLT5ldmVudHMpIHsKKyAgICBnX2Fzc2VydCAocG9sbF9kYXRhLT5tZXNzYWdlID09IE5VTEwpOworICAgIC8qIGtlZXAgcmVmIHRvIG1lc3NhZ2UgKi8KKyAgICBwb2xsX2RhdGEtPm1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9yZWYgKG1lc3NhZ2UpOworICAgIEdTVF9ERUJVRyAoIm1haW5sb29wICVwIHF1aXQiLCBwb2xsX2RhdGEtPmxvb3ApOworICAgIGdfbWFpbl9sb29wX3F1aXQgKHBvbGxfZGF0YS0+bG9vcCk7CisgIH0gZWxzZSB7CisgICAgR1NUX0RFQlVHICgidHlwZSAlMDh4IGRvZXMgbm90IG1hdGNoICUwOHgiLCB0eXBlLCBwb2xsX2RhdGEtPmV2ZW50cyk7CisgIH0KK30KKworc3RhdGljIGdib29sZWFuCitwb2xsX3RpbWVvdXQgKEdzdEJ1c1BvbGxEYXRhICogcG9sbF9kYXRhKQoreworICBHU1RfREVCVUcgKCJtYWlubG9vcCAlcCBxdWl0IiwgcG9sbF9kYXRhLT5sb29wKTsKKyAgZ19tYWluX2xvb3BfcXVpdCAocG9sbF9kYXRhLT5sb29wKTsKKworICAvKiB3ZSBkb24ndCByZW1vdmUgdGhlIEdTb3VyY2UgYXMgdGhpcyB3b3VsZCBmcmVlIG91ciBwb2xsX2RhdGEsCisgICAqIHdoaWNoIHdlIHN0aWxsIG5lZWQgKi8KKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkCitwb2xsX2Rlc3Ryb3kgKEdzdEJ1c1BvbGxEYXRhICogcG9sbF9kYXRhLCBncG9pbnRlciB1bnVzZWQpCit7CisgIHBvbGxfZGF0YS0+c291cmNlX3J1bm5pbmcgPSBGQUxTRTsKKyAgaWYgKCFwb2xsX2RhdGEtPnRpbWVvdXRfaWQpIHsKKyAgICBnX21haW5fbG9vcF91bnJlZiAocG9sbF9kYXRhLT5sb29wKTsKKyAgICBnX3NsaWNlX2ZyZWUgKEdzdEJ1c1BvbGxEYXRhLCBwb2xsX2RhdGEpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitwb2xsX2Rlc3Ryb3lfdGltZW91dCAoR3N0QnVzUG9sbERhdGEgKiBwb2xsX2RhdGEpCit7CisgIHBvbGxfZGF0YS0+dGltZW91dF9pZCA9IDA7CisgIGlmICghcG9sbF9kYXRhLT5zb3VyY2VfcnVubmluZykgeworICAgIGdfbWFpbl9sb29wX3VucmVmIChwb2xsX2RhdGEtPmxvb3ApOworICAgIGdfc2xpY2VfZnJlZSAoR3N0QnVzUG9sbERhdGEsIHBvbGxfZGF0YSk7CisgIH0KK30KKworLyoqCisgKiBnc3RfYnVzX3BvbGw6CisgKiBAYnVzOiBhICNHc3RCdXMKKyAqIEBldmVudHM6IGEgbWFzayBvZiAjR3N0TWVzc2FnZVR5cGUsIHJlcHJlc2VudGluZyB0aGUgc2V0IG9mIG1lc3NhZ2UgdHlwZXMgdG8KKyAqIHBvbGwgZm9yLgorICogQHRpbWVvdXQ6IHRoZSBwb2xsIHRpbWVvdXQsIGFzIGEgI0dzdENsb2NrVGltZURpZmYsIG9yIC0xIHRvIHBvbGwKKyAqIGluZGVmaW5pdGVseS4KKyAqCisgKiBQb2xsIHRoZSBidXMgZm9yIG1lc3NhZ2VzLiBXaWxsIGJsb2NrIHdoaWxlIHdhaXRpbmcgZm9yIG1lc3NhZ2VzIHRvIGNvbWUuCisgKiBZb3UgY2FuIHNwZWNpZnkgYSBtYXhpbXVtIHRpbWUgdG8gcG9sbCB3aXRoIHRoZSBAdGltZW91dCBwYXJhbWV0ZXIuIElmCisgKiBAdGltZW91dCBpcyBuZWdhdGl2ZSwgdGhpcyBmdW5jdGlvbiB3aWxsIGJsb2NrIGluZGVmaW5pdGVseS4KKyAqCisgKiBBbGwgbWVzc2FnZXMgbm90IGluIEBldmVudHMgd2lsbCBiZSBwb3BwZWQgb2ZmIHRoZSBidXMgYW5kIHdpbGwgYmUgaWdub3JlZC4KKyAqCisgKiBCZWNhdXNlIHBvbGwgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlICJtZXNzYWdlIiBzaWduYWwgZW5hYmxlZCBieQorICogZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoKCksIGNhbGxpbmcgZ3N0X2J1c19wb2xsKCkgd2lsbCBjYXVzZSB0aGUgIm1lc3NhZ2UiCisgKiBzaWduYWwgdG8gYmUgZW1pdHRlZCBmb3IgZXZlcnkgbWVzc2FnZSB0aGF0IHBvbGwgc2Vlcy4gVGh1cyBhICJtZXNzYWdlIgorICogc2lnbmFsIGhhbmRsZXIgd2lsbCBzZWUgdGhlIHNhbWUgbWVzc2FnZXMgdGhhdCB0aGlzIGZ1bmN0aW9uIHNlZXMgLS0gbmVpdGhlcgorICogd2lsbCBzdGVhbCBtZXNzYWdlcyBmcm9tIHRoZSBvdGhlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcnVuIGEgbWFpbiBsb29wIGZyb20gdGhlIGRlZmF1bHQgbWFpbiBjb250ZXh0IHdoZW4KKyAqIHBvbGxpbmcuCisgKgorICogWW91IHNob3VsZCBuZXZlciB1c2UgdGhpcyBmdW5jdGlvbiwgc2luY2UgaXQgaXMgcHVyZSBldmlsLiBUaGlzIGlzCisgKiBlc3BlY2lhbGx5IHRydWUgZm9yIEdVSSBhcHBsaWNhdGlvbnMgYmFzZWQgb24gR3RrKyBvciBRdCwgYnV0IGFsc28gZm9yIGFueQorICogb3RoZXIgbm9uLXRyaXZpYWwgYXBwbGljYXRpb24gdGhhdCB1c2VzIHRoZSBHTGliIG1haW4gbG9vcC4gQXMgdGhpcyBmdW5jdGlvbgorICogcnVucyBhIEdMaWIgbWFpbiBsb29wLCBhbnkgY2FsbGJhY2sgYXR0YWNoZWQgdG8gdGhlIGRlZmF1bHQgR0xpYiBtYWluCisgKiBjb250ZXh0IG1heSBiZSBpbnZva2VkLiBUaGlzIGNvdWxkIGJlIHRpbWVvdXRzLCBHVUkgZXZlbnRzLCBJL08gZXZlbnRzIGV0Yy47CisgKiBldmVuIGlmIGdzdF9idXNfcG9sbCgpIGlzIGNhbGxlZCB3aXRoIGEgMCB0aW1lb3V0LiBBbnkgb2YgdGhlc2UgY2FsbGJhY2tzCisgKiBtYXkgZG8gdGhpbmdzIHlvdSBkbyBub3QgZXhwZWN0LCBlLmcuIGRlc3Ryb3kgdGhlIG1haW4gYXBwbGljYXRpb24gd2luZG93IG9yCisgKiBzb21lIG90aGVyIHJlc291cmNlOyBjaGFuZ2Ugb3RoZXIgYXBwbGljYXRpb24gc3RhdGU7IGRpc3BsYXkgYSBkaWFsb2cgYW5kCisgKiBydW4gYW5vdGhlciBtYWluIGxvb3AgdW50aWwgdGhlIHVzZXIgY2xpY2tzIGl0IGF3YXkuIEluIHNob3J0LCB1c2luZyB0aGlzCisgKiBmdW5jdGlvbiBtYXkgYWRkIGEgbG90IG9mIGNvbXBsZXhpdHkgdG8geW91ciBjb2RlIHRocm91Z2ggdW5leHBlY3RlZAorICogcmUtZW50cmFuY3kgYW5kIHVuZXhwZWN0ZWQgY2hhbmdlcyB0byB5b3VyIGFwcGxpY2F0aW9uJ3Mgc3RhdGUuCisgKgorICogRm9yIDAgdGltZW91dHMgdXNlIGdzdF9idXNfcG9wX2ZpbHRlcmVkKCkgaW5zdGVhZCBvZiB0aGlzIGZ1bmN0aW9uOyBmb3IKKyAqIG90aGVyIHNob3J0IHRpbWVvdXRzIHVzZSBnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZCgpOyBldmVyeXRoaW5nIGVsc2UgaXMKKyAqIGJldHRlciBoYW5kbGVkIGJ5IHNldHRpbmcgdXAgYW4gYXN5bmNocm9ub3VzIGJ1cyB3YXRjaCBhbmQgZG9pbmcgdGhpbmdzCisgKiBmcm9tIHRoZXJlLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG1lc3NhZ2UgdGhhdCB3YXMgcmVjZWl2ZWQsIG9yIE5VTEwgaWYgdGhlCisgKiAgICAgcG9sbCB0aW1lZCBvdXQuIFRoZSBtZXNzYWdlIGlzIHRha2VuIGZyb20gdGhlIGJ1cyBhbmQgbmVlZHMgdG8gYmUKKyAqICAgICB1bnJlZmZlZCB3aXRoIGdzdF9tZXNzYWdlX3VucmVmKCkgYWZ0ZXIgdXNhZ2UuCisgKi8KK0dzdE1lc3NhZ2UgKgorZ3N0X2J1c19wb2xsIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2VUeXBlIGV2ZW50cywgR3N0Q2xvY2tUaW1lRGlmZiB0aW1lb3V0KQoreworICBHc3RCdXNQb2xsRGF0YSAqcG9sbF9kYXRhOworICBHc3RNZXNzYWdlICpyZXQ7CisgIGd1bG9uZyBpZDsKKworICBwb2xsX2RhdGEgPSBnX3NsaWNlX25ldyAoR3N0QnVzUG9sbERhdGEpOworICBwb2xsX2RhdGEtPnNvdXJjZV9ydW5uaW5nID0gVFJVRTsKKyAgcG9sbF9kYXRhLT5sb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7CisgIHBvbGxfZGF0YS0+ZXZlbnRzID0gZXZlbnRzOworICBwb2xsX2RhdGEtPm1lc3NhZ2UgPSBOVUxMOworCisgIGlmICh0aW1lb3V0ID49IDApCisgICAgcG9sbF9kYXRhLT50aW1lb3V0X2lkID0gZ190aW1lb3V0X2FkZF9mdWxsIChHX1BSSU9SSVRZX0RFRkFVTFRfSURMRSwKKyAgICAgICAgdGltZW91dCAvIEdTVF9NU0VDT05ELCAoR1NvdXJjZUZ1bmMpIHBvbGxfdGltZW91dCwgcG9sbF9kYXRhLAorICAgICAgICAoR0Rlc3Ryb3lOb3RpZnkpIHBvbGxfZGVzdHJveV90aW1lb3V0KTsKKyAgZWxzZQorICAgIHBvbGxfZGF0YS0+dGltZW91dF9pZCA9IDA7CisKKyAgaWQgPSBnX3NpZ25hbF9jb25uZWN0X2RhdGEgKGJ1cywgIm1lc3NhZ2UiLCBHX0NBTExCQUNLIChwb2xsX2Z1bmMpLCBwb2xsX2RhdGEsCisgICAgICAoR0Nsb3N1cmVOb3RpZnkpIHBvbGxfZGVzdHJveSwgMCk7CisKKyAgLyogdGhlc2UgY2FuIGJlIG5lc3RlZCwgc28gaXQncyBvayAqLworICBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2ggKGJ1cyk7CisKKyAgR1NUX0RFQlVHICgicnVubmluZyBtYWlubG9vcCAlcCIsIHBvbGxfZGF0YS0+bG9vcCk7CisgIGdfbWFpbl9sb29wX3J1biAocG9sbF9kYXRhLT5sb29wKTsKKyAgR1NUX0RFQlVHICgibWFpbmxvb3Agc3RvcHBlZCAlcCIsIHBvbGxfZGF0YS0+bG9vcCk7CisKKyAgZ3N0X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNoIChidXMpOworCisgIC8qIGhvbGRzIGEgcmVmICovCisgIHJldCA9IHBvbGxfZGF0YS0+bWVzc2FnZTsKKworICBpZiAocG9sbF9kYXRhLT50aW1lb3V0X2lkKQorICAgIGdfc291cmNlX3JlbW92ZSAocG9sbF9kYXRhLT50aW1lb3V0X2lkKTsKKworICAvKiBwb2xsX2RhdGEgd2lsbCBiZSBmcmVlZCBub3cgKi8KKyAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0IChidXMsIGlkKTsKKworICBHU1RfREVCVUdfT0JKRUNUIChidXMsICJmaW5pc2hlZCBwb2xsIHdpdGggbWVzc2FnZSAlcCIsIHJldCk7CisKKyAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBnc3RfYnVzX2FzeW5jX3NpZ25hbF9mdW5jOgorICogQGJ1czogYSAjR3N0QnVzCisgKiBAbWVzc2FnZTogdGhlICNHc3RNZXNzYWdlIHJlY2VpdmVkCisgKiBAZGF0YTogdXNlciBkYXRhCisgKgorICogQSBoZWxwZXIgI0dzdEJ1c0Z1bmMgdGhhdCBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IGFsbCBhc3luY2hyb25vdXMgbWVzc2FnZXMKKyAqIGludG8gc2lnbmFscy4KKyAqCisgKiBSZXR1cm5zOiBUUlVFCisgKi8KK2dib29sZWFuCitnc3RfYnVzX2FzeW5jX3NpZ25hbF9mdW5jIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBncG9pbnRlciBkYXRhKQoreworICBHUXVhcmsgZGV0YWlsID0gMDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVUyAoYnVzKSwgVFJVRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtZXNzYWdlICE9IE5VTEwsIFRSVUUpOworCisgIGRldGFpbCA9IGdzdF9tZXNzYWdlX3R5cGVfdG9fcXVhcmsgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpKTsKKworICBnX3NpZ25hbF9lbWl0IChidXMsIGdzdF9idXNfc2lnbmFsc1tBU1lOQ19NRVNTQUdFXSwgZGV0YWlsLCBtZXNzYWdlKTsKKworICAvKiB3ZSBuZXZlciByZW1vdmUgdGhpcyBzb3VyY2UgYmFzZWQgb24gc2lnbmFsIGVtaXNzaW9uIHJldHVybiB2YWx1ZXMgKi8KKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qKgorICogZ3N0X2J1c19zeW5jX3NpZ25hbF9oYW5kbGVyOgorICogQGJ1czogYSAjR3N0QnVzCisgKiBAbWVzc2FnZTogdGhlICNHc3RNZXNzYWdlIHJlY2VpdmVkCisgKiBAZGF0YTogdXNlciBkYXRhCisgKgorICogQSBoZWxwZXIgR3N0QnVzU3luY0hhbmRsZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IGFsbCBzeW5jaHJvbm91cworICogbWVzc2FnZXMgaW50byBzaWduYWxzLgorICoKKyAqIFJldHVybnM6IEdTVF9CVVNfUEFTUworICovCitHc3RCdXNTeW5jUmVwbHkKK2dzdF9idXNfc3luY19zaWduYWxfaGFuZGxlciAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgR1F1YXJrIGRldGFpbCA9IDA7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVVMgKGJ1cyksIEdTVF9CVVNfRFJPUCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtZXNzYWdlICE9IE5VTEwsIEdTVF9CVVNfRFJPUCk7CisKKyAgZGV0YWlsID0gZ3N0X21lc3NhZ2VfdHlwZV90b19xdWFyayAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkpOworCisgIGdfc2lnbmFsX2VtaXQgKGJ1cywgZ3N0X2J1c19zaWduYWxzW1NZTkNfTUVTU0FHRV0sIGRldGFpbCwgbWVzc2FnZSk7CisKKyAgcmV0dXJuIEdTVF9CVVNfUEFTUzsKK30KKworLyoqCisgKiBnc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb246CisgKiBAYnVzOiBhICNHc3RCdXMgb24gd2hpY2ggeW91IHdhbnQgdG8gcmVjZWl2ZSB0aGUgInN5bmMtbWVzc2FnZSIgc2lnbmFsCisgKgorICogSW5zdHJ1Y3RzIEdTdHJlYW1lciB0byBlbWl0IHRoZSAic3luYy1tZXNzYWdlIiBzaWduYWwgYWZ0ZXIgcnVubmluZyB0aGUgYnVzJ3MKKyAqIHN5bmMgaGFuZGxlci4gVGhpcyBmdW5jdGlvbiBpcyBoZXJlIHNvIHRoYXQgY29kZSBjYW4gZW5zdXJlIHRoYXQgdGhleSBjYW4KKyAqIHN5bmNocm9ub3VzbHkgcmVjZWl2ZSBtZXNzYWdlcyB3aXRob3V0IGhhdmluZyB0byBhZmZlY3Qgd2hhdCB0aGUgYmluJ3Mgc3luYworICogaGFuZGxlciBpcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIFRvIGNsZWFuIHVwLCB0aGUgY2FsbGVyIGlzCisgKiByZXNwb25zaWJsZSBmb3IgY2FsbGluZyBnc3RfYnVzX2Rpc2FibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uKCkgYXMgbWFueSB0aW1lcworICogYXMgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCisgKgorICogV2hpbGUgdGhpcyBmdW5jdGlvbiBsb29rcyBzaW1pbGFyIHRvIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaCgpLCBpdCBpcyBub3QKKyAqIGV4YWN0bHkgdGhlIHNhbWUgLS0gdGhpcyBmdW5jdGlvbiBlbmFibGVzIDxlbXBoYXNpcz5zeW5jaHJvbm91czwvZW1waGFzaXM+IGVtaXNzaW9uIG9mCisgKiBzaWduYWxzIHdoZW4gbWVzc2FnZXMgYXJyaXZlOyBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2goKSBhZGRzIGFuIGlkbGUgY2FsbGJhY2sKKyAqIHRvIHBvcCBtZXNzYWdlcyBvZmYgdGhlIGJ1cyA8ZW1waGFzaXM+YXN5bmNocm9ub3VzbHk8L2VtcGhhc2lzPi4gVGhlIHN5bmMtbWVzc2FnZSBzaWduYWwKKyAqIGNvbWVzIGZyb20gdGhlIHRocmVhZCBvZiB3aGF0ZXZlciBvYmplY3QgcG9zdGVkIHRoZSBtZXNzYWdlOyB0aGUgIm1lc3NhZ2UiCisgKiBzaWduYWwgaXMgbWFyc2hhbGxlZCB0byB0aGUgbWFpbiB0aHJlYWQgdmlhIHRoZSBtYWluIGxvb3AuCisgKgorICogTVQgc2FmZS4KKyAqLwordm9pZAorZ3N0X2J1c19lbmFibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uIChHc3RCdXMgKiBidXMpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19CVVMgKGJ1cykpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoYnVzKTsKKyAgYnVzLT5wcml2LT5udW1fc3luY19tZXNzYWdlX2VtaXR0ZXJzKys7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChidXMpOworfQorCisvKioKKyAqIGdzdF9idXNfZGlzYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb246CisgKiBAYnVzOiBhICNHc3RCdXMgb24gd2hpY2ggeW91IHByZXZpb3VzbHkgY2FsbGVkCisgKiBnc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24oKQorICoKKyAqIEluc3RydWN0cyBHU3RyZWFtZXIgdG8gc3RvcCBlbWl0dGluZyB0aGUgInN5bmMtbWVzc2FnZSIgc2lnbmFsIGZvciB0aGlzIGJ1cy4KKyAqIFNlZSBnc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24oKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiBJbiB0aGUgZXZlbnQgdGhhdCBtdWx0aXBsZSBwaWVjZXMgb2YgY29kZSBoYXZlIGNhbGxlZAorICogZ3N0X2J1c19lbmFibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uKCksIHRoZSBzeW5jLW1lc3NhZ2UgZW1pc3Npb25zIHdpbGwgb25seQorICogYmUgc3RvcHBlZCBhZnRlciBhbGwgY2FsbHMgdG8gZ3N0X2J1c19lbmFibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uKCkgd2VyZQorICogImNhbmNlbGxlZCIgYnkgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiBJbiB0aGlzIHdheSB0aGUgc2VtYW50aWNzIGFyZSBleGFjdGx5CisgKiB0aGUgc2FtZSBhcyBnc3Rfb2JqZWN0X3JlZigpIHRoYXQgd2hpY2ggY2FsbHMgZW5hYmxlIHNob3VsZCBhbHNvIGNhbGwKKyAqIGRpc2FibGUuCisgKgorICogTVQgc2FmZS4KKyAqLwordm9pZAorZ3N0X2J1c19kaXNhYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbiAoR3N0QnVzICogYnVzKQoreworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQlVTIChidXMpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoYnVzLT5udW1fc2lnbmFsX3dhdGNoZXJzID09IDApOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoYnVzKTsKKyAgYnVzLT5wcml2LT5udW1fc3luY19tZXNzYWdlX2VtaXR0ZXJzLS07CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChidXMpOworfQorCisvKioKKyAqIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaF9mdWxsOgorICogQGJ1czogYSAjR3N0QnVzIG9uIHdoaWNoIHlvdSB3YW50IHRvIHJlY2VpdmUgdGhlICJtZXNzYWdlIiBzaWduYWwKKyAqIEBwcmlvcml0eTogVGhlIHByaW9yaXR5IG9mIHRoZSB3YXRjaC4KKyAqCisgKiBBZGRzIGEgYnVzIHNpZ25hbCB3YXRjaCB0byB0aGUgZGVmYXVsdCBtYWluIGNvbnRleHQgd2l0aCB0aGUgZ2l2ZW4gQHByaW9yaXR5CisgKiAoZS5nLiAlR19QUklPUklUWV9ERUZBVUxUKS4gU2luY2UgMC4xMC4zMyBpdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBhCisgKiBub24tZGVmYXVsdCBtYWluIGNvbnRleHQgc2V0IHVwIHVzaW5nIGdfbWFpbl9jb250ZXh0X3B1c2hfdGhyZWFkX2RlZmF1bHQoKQorICogKGJlZm9yZSBvbmUgaGFkIHRvIGNyZWF0ZSBhIGJ1cyB3YXRjaCBzb3VyY2UgYW5kIGF0dGFjaCBpdCB0byB0aGUgZGVzaXJlZAorICogbWFpbiBjb250ZXh0ICdtYW51YWxseScpLgorICoKKyAqIEFmdGVyIGNhbGxpbmcgdGhpcyBzdGF0ZW1lbnQsIHRoZSBidXMgd2lsbCBlbWl0IHRoZSAibWVzc2FnZSIgc2lnbmFsIGZvciBlYWNoCisgKiBtZXNzYWdlIHBvc3RlZCBvbiB0aGUgYnVzIHdoZW4gdGhlIG1haW4gbG9vcCBpcyBydW5uaW5nLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4gVG8gY2xlYW4gdXAsIHRoZSBjYWxsZXIgaXMKKyAqIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGdzdF9idXNfcmVtb3ZlX3NpZ25hbF93YXRjaCgpIGFzIG1hbnkgdGltZXMgYXMgdGhpcworICogZnVuY3Rpb24gaXMgY2FsbGVkLgorICoKKyAqIFRoZXJlIGNhbiBvbmx5IGJlIGEgc2luZ2xlIGJ1cyB3YXRjaCBwZXIgYnVzLCB5b3UgbW9zdCByZW1vdmUgYWxsIHNpZ25hbCB3YXRjaAorICogYmVmb3JlIHlvdSBjYW4gc2V0IGFub3RoZXIgdHlwZSBvZiB3YXRjaC4KKyAqCisgKiBNVCBzYWZlLgorICovCit2b2lkCitnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2hfZnVsbCAoR3N0QnVzICogYnVzLCBnaW50IHByaW9yaXR5KQoreworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQlVTIChidXMpKTsKKworICAvKiBJIGtub3cgdGhlIGNhbGxlZXMgZG9uJ3QgdGFrZSB0aGlzIGxvY2ssIHNvIGdvIGFoZWFkIGFuZCBhYnVzZSBpdCAqLworICBHU1RfT0JKRUNUX0xPQ0sgKGJ1cyk7CisKKyAgaWYgKGJ1cy0+bnVtX3NpZ25hbF93YXRjaGVycyA+IDApCisgICAgZ290byBkb25lOworCisgIC8qIHRoaXMgc2hvdWxkIG5vdCBmYWlsIGJlY2F1c2UgdGhlIGNvdW50ZXIgYWJvdmUgdGFrZXMgY2FyZSBvZiBpdCAqLworICBnX2Fzc2VydCAoYnVzLT5zaWduYWxfd2F0Y2hfaWQgPT0gMCk7CisKKyAgYnVzLT5zaWduYWxfd2F0Y2hfaWQgPQorICAgICAgZ3N0X2J1c19hZGRfd2F0Y2hfZnVsbF91bmxvY2tlZCAoYnVzLCBwcmlvcml0eSwgZ3N0X2J1c19hc3luY19zaWduYWxfZnVuYywKKyAgICAgIE5VTEwsIE5VTEwpOworCisgIGlmIChHX1VOTElLRUxZIChidXMtPnNpZ25hbF93YXRjaF9pZCA9PSAwKSkKKyAgICBnb3RvIGFkZF9mYWlsZWQ7CisKK2RvbmU6CisKKyAgYnVzLT5udW1fc2lnbmFsX3dhdGNoZXJzKys7CisKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKGJ1cyk7CisgIHJldHVybjsKKworICAvKiBFUlJPUlMgKi8KK2FkZF9mYWlsZWQ6CisgIHsKKyAgICBnX2NyaXRpY2FsICgiQ291bGQgbm90IGFkZCBzaWduYWwgd2F0Y2ggdG8gYnVzICVzIiwgR1NUX09CSkVDVF9OQU1FIChidXMpKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYnVzKTsKKyAgICByZXR1cm47CisgIH0KK30KKworLyoqCisgKiBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2g6CisgKiBAYnVzOiBhICNHc3RCdXMgb24gd2hpY2ggeW91IHdhbnQgdG8gcmVjZWl2ZSB0aGUgIm1lc3NhZ2UiIHNpZ25hbAorICoKKyAqIEFkZHMgYSBidXMgc2lnbmFsIHdhdGNoIHRvIHRoZSBkZWZhdWx0IG1haW4gY29udGV4dCB3aXRoIHRoZSBkZWZhdWx0IHByaW9yaXR5CisgKiAoJUdfUFJJT1JJVFlfREVGQVVMVCkuIFNpbmNlIDAuMTAuMzMgaXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgYSBub24tZGVmYXVsdAorICogbWFpbiBjb250ZXh0IHNldCB1cCB1c2luZyBnX21haW5fY29udGV4dF9wdXNoX3RocmVhZF9kZWZhdWx0KCkgKGJlZm9yZQorICogb25lIGhhZCB0byBjcmVhdGUgYSBidXMgd2F0Y2ggc291cmNlIGFuZCBhdHRhY2ggaXQgdG8gdGhlIGRlc2lyZWQgbWFpbgorICogY29udGV4dCAnbWFudWFsbHknKS4KKyAqCisgKiBBZnRlciBjYWxsaW5nIHRoaXMgc3RhdGVtZW50LCB0aGUgYnVzIHdpbGwgZW1pdCB0aGUgIm1lc3NhZ2UiIHNpZ25hbCBmb3IgZWFjaAorICogbWVzc2FnZSBwb3N0ZWQgb24gdGhlIGJ1cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIFRvIGNsZWFuIHVwLCB0aGUgY2FsbGVyIGlzCisgKiByZXNwb25zaWJsZSBmb3IgY2FsbGluZyBnc3RfYnVzX3JlbW92ZV9zaWduYWxfd2F0Y2goKSBhcyBtYW55IHRpbWVzIGFzIHRoaXMKKyAqIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqCisgKiBNVCBzYWZlLgorICovCit2b2lkCitnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2ggKEdzdEJ1cyAqIGJ1cykKK3sKKyAgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoX2Z1bGwgKGJ1cywgR19QUklPUklUWV9ERUZBVUxUKTsKK30KKworLyoqCisgKiBnc3RfYnVzX3JlbW92ZV9zaWduYWxfd2F0Y2g6CisgKiBAYnVzOiBhICNHc3RCdXMgeW91IHByZXZpb3VzbHkgYWRkZWQgYSBzaWduYWwgd2F0Y2ggdG8KKyAqCisgKiBSZW1vdmVzIGEgc2lnbmFsIHdhdGNoIHByZXZpb3VzbHkgYWRkZWQgd2l0aCBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2goKS4KKyAqCisgKiBNVCBzYWZlLgorICovCit2b2lkCitnc3RfYnVzX3JlbW92ZV9zaWduYWxfd2F0Y2ggKEdzdEJ1cyAqIGJ1cykKK3sKKyAgZ3VpbnQgaWQgPSAwOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19CVVMgKGJ1cykpOworCisgIC8qIEkga25vdyB0aGUgY2FsbGVlcyBkb24ndCB0YWtlIHRoaXMgbG9jaywgc28gZ28gYWhlYWQgYW5kIGFidXNlIGl0ICovCisgIEdTVF9PQkpFQ1RfTE9DSyAoYnVzKTsKKworICBpZiAoYnVzLT5udW1fc2lnbmFsX3dhdGNoZXJzID09IDApCisgICAgZ290byBlcnJvcjsKKworICBidXMtPm51bV9zaWduYWxfd2F0Y2hlcnMtLTsKKworICBpZiAoYnVzLT5udW1fc2lnbmFsX3dhdGNoZXJzID4gMCkKKyAgICBnb3RvIGRvbmU7CisKKyAgaWQgPSBidXMtPnNpZ25hbF93YXRjaF9pZDsKKyAgYnVzLT5zaWduYWxfd2F0Y2hfaWQgPSAwOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKGJ1cywgInJlbW92aW5nIHNpZ25hbCB3YXRjaCAldSIsIGlkKTsKKworZG9uZToKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKGJ1cyk7CisKKyAgaWYgKGlkKQorICAgIGdfc291cmNlX3JlbW92ZSAoaWQpOworCisgIHJldHVybjsKKworICAvKiBFUlJPUlMgKi8KK2Vycm9yOgorICB7CisgICAgZ19jcml0aWNhbCAoIkJ1cyAlcyBoYXMgbm8gc2lnbmFsIHdhdGNoZXMgYXR0YWNoZWQiLCBHU1RfT0JKRUNUX05BTUUgKGJ1cykpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChidXMpOworICAgIHJldHVybjsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGJ1cy5oIGIvZ3N0L2dzdGJ1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMjU5MWYKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0YnVzLmgKQEAgLTAsMCArMSwxOTMgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA0IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+CisgKgorICogZ3N0YnVzLmg6IEhlYWRlciBmb3IgR3N0QnVzIHN1YnN5c3RlbQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19HU1RfQlVTX0hfXworI2RlZmluZSBfX0dTVF9CVVNfSF9fCisKK3R5cGVkZWYgc3RydWN0IF9Hc3RCdXMgR3N0QnVzOwordHlwZWRlZiBzdHJ1Y3QgX0dzdEJ1c1ByaXZhdGUgR3N0QnVzUHJpdmF0ZTsKK3R5cGVkZWYgc3RydWN0IF9Hc3RCdXNDbGFzcyBHc3RCdXNDbGFzczsKKworI2luY2x1ZGUgPGdzdC9nc3RtZXNzYWdlLmg+CisjaW5jbHVkZSA8Z3N0L2dzdGNsb2NrLmg+CisjaW5jbHVkZSA8Z3N0L2dzdGF0b21pY3F1ZXVlLmg+CisKK0dfQkVHSU5fREVDTFMKKworLyogLS0tIHN0YW5kYXJkIHR5cGUgbWFjcm9zIC0tLSAqLworI2RlZmluZSBHU1RfVFlQRV9CVVMgICAgICAgICAgICAgIChnc3RfYnVzX2dldF90eXBlICgpKQorI2RlZmluZSBHU1RfQlVTKGJ1cykgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKGJ1cyksIEdTVF9UWVBFX0JVUywgR3N0QnVzKSkKKyNkZWZpbmUgR1NUX0lTX0JVUyhidXMpICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChidXMpLCBHU1RfVFlQRV9CVVMpKQorI2RlZmluZSBHU1RfQlVTX0NMQVNTKGJjbGFzcykgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGJjbGFzcyksIEdTVF9UWVBFX0JVUywgR3N0QnVzQ2xhc3MpKQorI2RlZmluZSBHU1RfSVNfQlVTX0NMQVNTKGJjbGFzcykgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGJjbGFzcyksIEdTVF9UWVBFX0JVUykpCisjZGVmaW5lIEdTVF9CVVNfR0VUX0NMQVNTKGJ1cykgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChidXMpLCBHU1RfVFlQRV9CVVMsIEdzdEJ1c0NsYXNzKSkKKyNkZWZpbmUgR1NUX0JVU19DQVNUKGJ1cykgICAgICAgICAoKEdzdEJ1cyopKGJ1cykpCisKKy8qKgorICogR3N0QnVzRmxhZ3M6CisgKiBAR1NUX0JVU19GTFVTSElORzogVGhlIGJ1cyBpcyBjdXJyZW50bHkgZHJvcHBpbmcgYWxsIG1lc3NhZ2VzCisgKiBAR1NUX0JVU19GTEFHX0xBU1Q6IG9mZnNldCB0byBkZWZpbmUgbW9yZSBmbGFncworICoKKyAqIFRoZSBzdGFuZGFyZCBmbGFncyB0aGF0IGEgYnVzIG1heSBoYXZlLgorICovCit0eXBlZGVmIGVudW0geworICBHU1RfQlVTX0ZMVVNISU5HICAgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgMCksCisgIC8qIHBhZGRpbmcgKi8KKyAgR1NUX0JVU19GTEFHX0xBU1QgICAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUIDw8IDEpCit9IEdzdEJ1c0ZsYWdzOworCisvKioKKyAqIEdzdEJ1c1N5bmNSZXBseToKKyAqIEBHU1RfQlVTX0RST1A6IGRyb3AgdGhlIG1lc3NhZ2UKKyAqIEBHU1RfQlVTX1BBU1M6IHBhc3MgdGhlIG1lc3NhZ2UgdG8gdGhlIGFzeW5jIHF1ZXVlCisgKiBAR1NUX0JVU19BU1lOQzogcGFzcyBtZXNzYWdlIHRvIGFzeW5jIHF1ZXVlLCBjb250aW51ZSBpZiBtZXNzYWdlIGlzIGhhbmRsZWQKKyAqCisgKiBUaGUgcmVzdWx0IHZhbHVlcyBmb3IgYSBHc3RCdXNTeW5jSGFuZGxlci4KKyAqLwordHlwZWRlZiBlbnVtCit7CisgIEdTVF9CVVNfRFJPUCA9IDAsCisgIEdTVF9CVVNfUEFTUyA9IDEsCisgIEdTVF9CVVNfQVNZTkMgPSAyCit9IEdzdEJ1c1N5bmNSZXBseTsKKworLyoqCisgKiBHc3RCdXNTeW5jSGFuZGxlcjoKKyAqIEBidXM6IHRoZSAjR3N0QnVzIHRoYXQgc2VudCB0aGUgbWVzc2FnZQorICogQG1lc3NhZ2U6IHRoZSAjR3N0TWVzc2FnZQorICogQGRhdGE6IHVzZXIgZGF0YSB0aGF0IGhhcyBiZWVuIGdpdmVuLCB3aGVuIHJlZ2lzdGVyaW5nIHRoZSBoYW5kbGVyCisgKgorICogSGFuZGxlciB3aWxsIGJlIGludm9rZWQgc3luY2hyb25vdXNseSwgd2hlbiBhIG5ldyBtZXNzYWdlIGhhcyBiZWVuIGluamVjdGVkCisgKiBpbnRvIHRoZSBidXMuIFRoaXMgZnVuY3Rpb24gaXMgbW9zdGx5IHVzZWQgaW50ZXJuYWxseS4gT25seSBvbmUgc3luYyBoYW5kbGVyCisgKiBjYW4gYmUgYXR0YWNoZWQgdG8gYSBnaXZlbiBidXMuCisgKgorICogSWYgdGhlIGhhbmRsZXIgcmV0dXJucyBHU1RfQlVTX0RST1AsIGl0IHNob3VsZCB1bnJlZiB0aGUgbWVzc2FnZSwgZWxzZSB0aGUKKyAqIG1lc3NhZ2Ugc2hvdWxkIG5vdCBiZSB1bnJlZmZlZCBieSB0aGUgc3luYyBoYW5kbGVyLgorICoKKyAqIFJldHVybnM6ICNHc3RCdXNTeW5jUmVwbHkgc3RhdGluZyB3aGF0IHRvIGRvIHdpdGggdGhlIG1lc3NhZ2UKKyAqLwordHlwZWRlZiBHc3RCdXNTeW5jUmVwbHkgKCpHc3RCdXNTeW5jSGFuZGxlcikgICAgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpOworCisvKioKKyAqIEdzdEJ1c0Z1bmM6CisgKiBAYnVzOiB0aGUgI0dzdEJ1cyB0aGF0IHNlbnQgdGhlIG1lc3NhZ2UKKyAqIEBtZXNzYWdlOiB0aGUgI0dzdE1lc3NhZ2UKKyAqIEBkYXRhOiB1c2VyIGRhdGEgdGhhdCBoYXMgYmVlbiBnaXZlbiwgd2hlbiByZWdpc3RlcmluZyB0aGUgaGFuZGxlcgorICoKKyAqIFNwZWNpZmllcyB0aGUgdHlwZSBvZiBmdW5jdGlvbiBwYXNzZWQgdG8gZ3N0X2J1c19hZGRfd2F0Y2goKSBvcgorICogZ3N0X2J1c19hZGRfd2F0Y2hfZnVsbCgpLCB3aGljaCBpcyBjYWxsZWQgZnJvbSB0aGUgbWFpbmxvb3Agd2hlbiBhIG1lc3NhZ2UKKyAqIGlzIGF2YWlsYWJsZSBvbiB0aGUgYnVzLgorICoKKyAqIFRoZSBtZXNzYWdlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gd2lsbCBiZSB1bnJlZmZlZCBhZnRlciBleGVjdXRpb24gb2YgdGhpcworICogZnVuY3Rpb24gc28gaXQgc2hvdWxkIG5vdCBiZSBmcmVlZCBpbiB0aGUgZnVuY3Rpb24uCisgKgorICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhcyBhIEdTb3VyY2VGdW5jIHdoaWNoIG1lYW5zIHRoYXQgcmV0dXJuaW5nCisgKiBGQUxTRSB3aWxsIHJlbW92ZSB0aGUgR1NvdXJjZSBmcm9tIHRoZSBtYWlubG9vcC4KKyAqCisgKiBSZXR1cm5zOiAlRkFMU0UgaWYgdGhlIGV2ZW50IHNvdXJjZSBzaG91bGQgYmUgcmVtb3ZlZC4KKyAqLwordHlwZWRlZiBnYm9vbGVhbiAgICAgICAgKCpHc3RCdXNGdW5jKSAgICAgICAgICAgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpOworCisvKioKKyAqIEdzdEJ1czoKKyAqCisgKiBUaGUgb3BhcXVlICNHc3RCdXMgZGF0YSBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBfR3N0QnVzCit7CisgIEdzdE9iamVjdCAgICAgICAgIG9iamVjdDsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgR3N0QXRvbWljUXVldWUgICAqcXVldWU7CisgIEdNdXRleCAgICAgICAgICAgKnF1ZXVlX2xvY2s7CisKKyAgR3N0QnVzU3luY0hhbmRsZXIgc3luY19oYW5kbGVyOworICBncG9pbnRlciAgICAgICAgICBzeW5jX2hhbmRsZXJfZGF0YTsKKworICBndWludCAgICAgICAgICAgICBzaWduYWxfd2F0Y2hfaWQ7CisgIGd1aW50ICAgICAgICAgICAgIG51bV9zaWduYWxfd2F0Y2hlcnM7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIEdzdEJ1c1ByaXZhdGUgICAgKnByaXY7CisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkcgLSAxXTsKK307CisKK3N0cnVjdCBfR3N0QnVzQ2xhc3MKK3sKKyAgR3N0T2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworCisgIC8qIHNpZ25hbHMgKi8KKyAgdm9pZCAoKm1lc3NhZ2UpICAgICAgIChHc3RCdXMgKmJ1cywgR3N0TWVzc2FnZSAqbWVzc2FnZSk7CisgIHZvaWQgKCpzeW5jX21lc3NhZ2UpICAoR3N0QnVzICpidXMsIEdzdE1lc3NhZ2UgKm1lc3NhZ2UpOworCisgIC8qPCBwcml2YXRlID4qLworICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKK307CisKK0dUeXBlICAgICAgICAgICAgICAgICAgIGdzdF9idXNfZ2V0X3R5cGUgICAgICAgICAgICAgICAgKHZvaWQpOworCitHc3RCdXMqICAgICAgICAgICAgICAgICBnc3RfYnVzX25ldyAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKKworZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X2J1c19wb3N0ICAgICAgICAgICAgICAgICAgICAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbWVzc2FnZSk7CisKK2dib29sZWFuICAgICAgICAgICAgICAgIGdzdF9idXNfaGF2ZV9wZW5kaW5nICAgICAgICAgICAgKEdzdEJ1cyAqIGJ1cyk7CitHc3RNZXNzYWdlICogICAgICAgICAgICBnc3RfYnVzX3BlZWsgICAgICAgICAgICAgICAgICAgIChHc3RCdXMgKiBidXMpOworR3N0TWVzc2FnZSAqICAgICAgICAgICAgZ3N0X2J1c19wb3AgICAgICAgICAgICAgICAgICAgICAoR3N0QnVzICogYnVzKTsKK0dzdE1lc3NhZ2UgKiAgICAgICAgICAgIGdzdF9idXNfcG9wX2ZpbHRlcmVkICAgICAgICAgICAgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZVR5cGUgdHlwZXMpOworR3N0TWVzc2FnZSAqICAgICAgICAgICAgZ3N0X2J1c190aW1lZF9wb3AgICAgICAgICAgICAgICAoR3N0QnVzICogYnVzLCBHc3RDbG9ja1RpbWUgdGltZW91dCk7CitHc3RNZXNzYWdlICogICAgICAgICAgICBnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZCAgICAgIChHc3RCdXMgKiBidXMsIEdzdENsb2NrVGltZSB0aW1lb3V0LCBHc3RNZXNzYWdlVHlwZSB0eXBlcyk7Cit2b2lkICAgICAgICAgICAgICAgICAgICBnc3RfYnVzX3NldF9mbHVzaGluZyAgICAgICAgICAgIChHc3RCdXMgKiBidXMsIGdib29sZWFuIGZsdXNoaW5nKTsKKworLyogc3luY2hyb25vdXMgZGlzcGF0Y2hpbmcgKi8KK3ZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9idXNfc2V0X3N5bmNfaGFuZGxlciAgICAgICAgKEdzdEJ1cyAqIGJ1cywgR3N0QnVzU3luY0hhbmRsZXIgZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpOworLyogR1NvdXJjZSBiYXNlZCBkaXNwYXRjaGluZyAqLworR1NvdXJjZSAqICAgICAgICAgICAgICAgZ3N0X2J1c19jcmVhdGVfd2F0Y2ggICAgICAgICAgICAoR3N0QnVzICogYnVzKTsKK2d1aW50ICAgICAgICAgICAgICAgICAgIGdzdF9idXNfYWRkX3dhdGNoX2Z1bGwgICAgICAgICAgKEdzdEJ1cyAqIGJ1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgcHJpb3JpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCdXNGdW5jIGZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSBub3RpZnkpOworZ3VpbnQgICAgICAgICAgICAgICAgICAgZ3N0X2J1c19hZGRfd2F0Y2ggICAgICAgICAgICAgICAoR3N0QnVzICogYnVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVzRnVuYyBmdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKKworLyogcG9sbGluZyB0aGUgYnVzICovCitHc3RNZXNzYWdlKiAgICAgICAgICAgICBnc3RfYnVzX3BvbGwgICAgICAgICAgICAgICAgICAgIChHc3RCdXMgKmJ1cywgR3N0TWVzc2FnZVR5cGUgZXZlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lRGlmZiB0aW1lb3V0KTsKKworLyogc2lnbmFsIGJhc2VkIGRpc3BhdGNoaW5nIGhlbHBlciBmdW5jdGlvbnMuICovCitnYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfYnVzX2FzeW5jX3NpZ25hbF9mdW5jICAgICAgIChHc3RCdXMgKmJ1cywgR3N0TWVzc2FnZSAqbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpOworR3N0QnVzU3luY1JlcGx5ICAgICAgICAgZ3N0X2J1c19zeW5jX3NpZ25hbF9oYW5kbGVyICAgICAoR3N0QnVzICpidXMsIEdzdE1lc3NhZ2UgKm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBkYXRhKTsKKworLyogY29udmVuaWVuY2UgYXBpIHRvIGFkZC9yZW1vdmUgYSBnc291cmNlIHRoYXQgZW1pdHMgdGhlIGFzeW5jIHNpZ25hbHMgKi8KK3ZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaCAgICAgICAgKEdzdEJ1cyAqIGJ1cyk7Cit2b2lkICAgICAgICAgICAgICAgICAgICBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2hfZnVsbCAgIChHc3RCdXMgKiBidXMsIGdpbnQgcHJpb3JpdHkpOwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNoICAgICAoR3N0QnVzICogYnVzKTsKKwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2J1c19lbmFibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uIChHc3RCdXMgKiBidXMpOwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2J1c19kaXNhYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbiAoR3N0QnVzICogYnVzKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fR1NUX0JVU19IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RjYXBzLmMgYi9nc3QvZ3N0Y2Fwcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNmFjZmUKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0Y2Fwcy5jCkBAIC0wLDAgKzEsMTk0MyBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDwyMDAzPiBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKioKKyAqIFNFQ1RJT046Z3N0Y2FwcworICogQHNob3J0X2Rlc2NyaXB0aW9uOiBTdHJ1Y3R1cmUgZGVzY3JpYmluZyBzZXRzIG9mIG1lZGlhIGZvcm1hdHMKKyAqIEBzZWVfYWxzbzogI0dzdFN0cnVjdHVyZQorICoKKyAqIENhcHMgKGNhcGFiaWxpdGllcykgYXJlIGxpZ2h3ZWlnaHQgcmVmY291bnRlZCBvYmplY3RzIGRlc2NyaWJpbmcgbWVkaWEgdHlwZXMuCisgKiBUaGV5IGFyZSBjb21wb3NlZCBvZiBhbiBhcnJheSBvZiAjR3N0U3RydWN0dXJlLgorICoKKyAqIENhcHMgYXJlIGV4cG9zZWQgb24gI0dzdFBhZFRlbXBsYXRlIHRvIGRlc2NyaWJlIGFsbCBwb3NzaWJsZSB0eXBlcyBhCisgKiBnaXZlbiBwYWQgY2FuIGhhbmRsZS4gVGhleSBhcmUgYWxzbyBzdG9yZWQgaW4gdGhlICNHc3RSZWdpc3RyeSBhbG9uZyB3aXRoCisgKiBhIGRlc2NyaXB0aW9uIG9mIHRoZSAjR3N0RWxlbWVudC4KKyAqCisgKiBDYXBzIGFyZSBleHBvc2VkIG9uIHRoZSBlbGVtZW50IHBhZHMgdXNpbmcgdGhlIGdzdF9wYWRfZ2V0X2NhcHMoKSBwYWQKKyAqIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGRlc2NyaWJlcyB0aGUgcG9zc2libGUgdHlwZXMgdGhhdCB0aGUgcGFkIGNhbgorICogaGFuZGxlIG9yIHByb2R1Y2UgYXQgcnVudGltZS4KKyAqCisgKiBDYXBzIGFyZSBhbHNvIGF0dGFjaGVkIHRvIGJ1ZmZlcnMgdG8gZGVzY3JpYmUgdG8gY29udGVudCBvZiB0aGUgZGF0YQorICogcG9pbnRlZCB0byBieSB0aGUgYnVmZmVyIHdpdGggZ3N0X2J1ZmZlcl9zZXRfY2FwcygpLiBDYXBzIGF0dGFjaGVkIHRvCisgKiBhICNHc3RCdWZmZXIgYWxsb3cgZm9yIGZvcm1hdCBuZWdvdGlhdGlvbiB1cHN0cmVhbSBhbmQgZG93bnN0cmVhbS4KKyAqCisgKiBBICNHc3RDYXBzIGNhbiBiZSBjb25zdHJ1Y3RlZCB3aXRoIHRoZSBmb2xsb3dpbmcgY29kZSBmcmFnbWVudDoKKyAqCisgKiA8ZXhhbXBsZT4KKyAqICA8dGl0bGU+Q3JlYXRpbmcgY2FwczwvdGl0bGU+CisgKiAgPHByb2dyYW1saXN0aW5nPgorICogIEdzdENhcHMgKmNhcHM7CisgKiAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby94LXJhdyIsCisgKiAgICAgICAiZm9ybWF0IiwgR19UWVBFX1NUUklORywgIkk0MjAiKSwKKyAqICAgICAgICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTiwgMjUsIDEsCisgKiAgICAgICAicGl4ZWwtYXNwZWN0LXJhdGlvIiwgR1NUX1RZUEVfRlJBQ1RJT04sIDEsIDEsCisgKiAgICAgICAid2lkdGgiLCBHX1RZUEVfSU5ULCAzMjAsCisgKiAgICAgICAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgMjQwLAorICogICAgICAgTlVMTCk7CisgKiAgPC9wcm9ncmFtbGlzdGluZz4KKyAqIDwvZXhhbXBsZT4KKyAqCisgKiBBICNHc3RDYXBzIGlzIGZpeGVkIHdoZW4gaXQgaGFzIG5vIHByb3BlcnRpZXMgd2l0aCByYW5nZXMgb3IgbGlzdHMuIFVzZQorICogZ3N0X2NhcHNfaXNfZml4ZWQoKSB0byB0ZXN0IGZvciBmaXhlZCBjYXBzLiBPbmx5IGZpeGVkIGNhcHMgY2FuIGJlCisgKiBzZXQgb24gYSAjR3N0UGFkIG9yICNHc3RCdWZmZXIuCisgKgorICogVmFyaW91cyBtZXRob2RzIGV4aXN0IHRvIHdvcmsgd2l0aCB0aGUgbWVkaWEgdHlwZXMgc3VjaCBhcyBzdWJ0cmFjdGluZworICogb3IgaW50ZXJzZWN0aW5nLgorICoKKyAqIExhc3QgcmV2aWV3ZWQgb24gMjAwNy0wMi0xMyAoMC4xMC4xMCkKKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKyNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDxnb2JqZWN0L2d2YWx1ZWNvbGxlY3Rvci5oPgorCisjZGVmaW5lIERFQlVHX1JFRkNPVU5UCisKKworI2RlZmluZSBHU1RfQ0FQU19BUlJBWShjKSAoKEdQdHJBcnJheSAqKSgoYyktPnByaXYpKQorCisjZGVmaW5lIEdTVF9DQVBTX0xFTihjKSAgIChHU1RfQ0FQU19BUlJBWShjKS0+bGVuKQorCisjZGVmaW5lIElTX1dSSVRBQkxFKGNhcHMpIFwKKyAgKEdTVF9DQVBTX1JFRkNPVU5UX1ZBTFVFIChjYXBzKSA9PSAxKQorCisvKiBzYW1lIGFzIGdzdF9jYXBzX2lzX2FueSAoKSAqLworI2RlZmluZSBDQVBTX0lTX0FOWShjYXBzKQkJCQlcCisgIChHU1RfQ0FQU19GTEFHUyhjYXBzKSAmIEdTVF9DQVBTX0ZMQUdTX0FOWSkKKworLyogc2FtZSBhcyBnc3RfY2Fwc19pc19lbXB0eSAoKSAqLworI2RlZmluZSBDQVBTX0lTX0VNUFRZKGNhcHMpCQkJCVwKKyAgKCFDQVBTX0lTX0FOWShjYXBzKSAmJiBDQVBTX0lTX0VNUFRZX1NJTVBMRShjYXBzKSkKKworI2RlZmluZSBDQVBTX0lTX0VNUFRZX1NJTVBMRShjYXBzKQkJCQkJXAorICAoKEdTVF9DQVBTX0FSUkFZIChjYXBzKSA9PSBOVUxMKSB8fCAoR1NUX0NBUFNfTEVOIChjYXBzKSA9PSAwKSkKKworLyogcXVpY2sgd2F5IHRvIGdldCBhIGNhcHMgc3RydWN0dXJlIGF0IGFuIGluZGV4IHdpdGhvdXQgZG9pbmcgYSB0eXBlIG9yIGFycmF5CisgKiBsZW5ndGggY2hlY2sgKi8KKyNkZWZpbmUgZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZV91bmNoZWNrZWQoY2FwcywgaW5kZXgpIFwKKyAgICAgKChHc3RTdHJ1Y3R1cmUgKilnX3B0cl9hcnJheV9pbmRleCAoR1NUX0NBUFNfQVJSQVkgKGNhcHMpLCAoaW5kZXgpKSkKKy8qIHF1aWNrIHdheSB0byBhcHBlbmQgYSBzdHJ1Y3R1cmUgd2l0aG91dCBjaGVja2luZyB0aGUgYXJncyAqLworI2RlZmluZSBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlX3VuY2hlY2tlZChjYXBzLCBzdHJ1Y3R1cmUpIEdfU1RNVF9TVEFSVHtcCisgIEdzdFN0cnVjdHVyZSAqX19zPXN0cnVjdHVyZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYgKGdzdF9zdHJ1Y3R1cmVfc2V0X3BhcmVudF9yZWZjb3VudCAoX19zLCAmR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UKGNhcHMpKSkgICAgICAgICBcCisgICAgZ19wdHJfYXJyYXlfYWRkIChHU1RfQ0FQU19BUlJBWSAoY2FwcyksIF9fcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9R19TVE1UX0VORAorCisvKiBsb2NrIHRvIHByb3RlY3QgbXVsdGlwbGUgaW52b2NhdGlvbnMgb2Ygc3RhdGljIGNhcHMgdG8gY2FwcyBjb252ZXJzaW9uICovCitHX0xPQ0tfREVGSU5FX1NUQVRJQyAoc3RhdGljX2NhcHNfbG9jayk7CisKK3N0YXRpYyB2b2lkIGdzdF9jYXBzX3RyYW5zZm9ybV90b19zdHJpbmcgKGNvbnN0IEdWYWx1ZSAqIHNyY192YWx1ZSwKKyAgICBHVmFsdWUgKiBkZXN0X3ZhbHVlKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfY2Fwc19mcm9tX3N0cmluZ19pbnBsYWNlIChHc3RDYXBzICogY2FwcywKKyAgICBjb25zdCBnY2hhciAqIHN0cmluZyk7CisKK0dUeXBlIF9nc3RfY2Fwc190eXBlID0gMDsKKworR1NUX0RFRklORV9NSU5JX09CSkVDVF9UWVBFIChHc3RDYXBzLCBnc3RfY2Fwcyk7CisKK3ZvaWQKK19wcml2X2dzdF9jYXBzX2luaXRpYWxpemUgKHZvaWQpCit7CisgIF9nc3RfY2Fwc190eXBlID0gZ3N0X2NhcHNfZ2V0X3R5cGUgKCk7CisKKyAgZ192YWx1ZV9yZWdpc3Rlcl90cmFuc2Zvcm1fZnVuYyAoX2dzdF9jYXBzX3R5cGUsCisgICAgICBHX1RZUEVfU1RSSU5HLCBnc3RfY2Fwc190cmFuc2Zvcm1fdG9fc3RyaW5nKTsKK30KKworc3RhdGljIEdzdENhcHMgKgorX2dzdF9jYXBzX2NvcHkgKGNvbnN0IEdzdENhcHMgKiBjYXBzKQoreworICBHc3RDYXBzICpuZXdjYXBzOworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKyAgZ3VpbnQgaSwgbjsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NBUFMgKGNhcHMpLCBOVUxMKTsKKworICBuZXdjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOworICBHU1RfQ0FQU19GTEFHUyAobmV3Y2FwcykgPSBHU1RfQ0FQU19GTEFHUyAoY2Fwcyk7CisgIG4gPSBHU1RfQ0FQU19MRU4gKGNhcHMpOworCisgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlX3VuY2hlY2tlZCAoY2FwcywgaSk7CisgICAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZSAobmV3Y2FwcywgZ3N0X3N0cnVjdHVyZV9jb3B5IChzdHJ1Y3R1cmUpKTsKKyAgfQorCisgIHJldHVybiBuZXdjYXBzOworfQorCisvKiBjcmVhdGlvbi9kZWxldGlvbiAqLworc3RhdGljIHZvaWQKK19nc3RfY2Fwc19mcmVlIChHc3RDYXBzICogY2FwcykKK3sKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisgIGd1aW50IGksIGxlbjsKKworICAvKiBUaGUgcmVmY291bnQgbXVzdCBiZSAwLCBidXQgc2luY2Ugd2UncmUgb25seSBjYWxsZWQgYnkgZ3N0X2NhcHNfdW5yZWYsCisgICAqIGRvbid0IGJvdGhlciB0ZXN0aW5nLiAqLworICBsZW4gPSBHU1RfQ0FQU19MRU4gKGNhcHMpOworICAvKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGdldCBzdGF0aXN0aWNzIGFib3V0IGNhcHMgc2l6ZXMgKi8KKyAgLypHU1RfQ0FUX0lORk8gKEdTVF9DQVRfQ0FQUywgImNhcHMgc2l6ZTogJWQiLCBsZW4pOyAqLworICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICBzdHJ1Y3R1cmUgPSAoR3N0U3RydWN0dXJlICopIGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzLCBpKTsKKyAgICBnc3Rfc3RydWN0dXJlX3NldF9wYXJlbnRfcmVmY291bnQgKHN0cnVjdHVyZSwgTlVMTCk7CisgICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzdHJ1Y3R1cmUpOworICB9CisgIGdfcHRyX2FycmF5X2ZyZWUgKEdTVF9DQVBTX0FSUkFZIChjYXBzKSwgVFJVRSk7CisKKyNpZmRlZiBERUJVR19SRUZDT1VOVAorICBHU1RfQ0FUX0xPRyAoR1NUX0NBVF9DQVBTLCAiZnJlZWluZyBjYXBzICVwIiwgY2Fwcyk7CisjZW5kaWYKKyAgZ19zbGljZV9mcmVlMSAoR1NUX01JTklfT0JKRUNUX1NJWkUgKGNhcHMpLCBjYXBzKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9jYXBzX2luaXQgKEdzdENhcHMgKiBjYXBzLCBnc2l6ZSBzaXplKQoreworICBnc3RfbWluaV9vYmplY3RfaW5pdCAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGNhcHMpLCBfZ3N0X2NhcHNfdHlwZSwgc2l6ZSk7CisKKyAgY2Fwcy0+bWluaV9vYmplY3QuY29weSA9IChHc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uKSBfZ3N0X2NhcHNfY29weTsKKyAgY2Fwcy0+bWluaV9vYmplY3QuZGlzcG9zZSA9IE5VTEw7CisgIGNhcHMtPm1pbmlfb2JqZWN0LmZyZWUgPSAoR3N0TWluaU9iamVjdEZyZWVGdW5jdGlvbikgX2dzdF9jYXBzX2ZyZWU7CisKKyAgLyogdGhlIDMyIGhhcyBiZWVuIGRldGVybWluZWQgYnkgbG9nZ2luZyBjYXBzIHNpemVzIGluIF9nc3RfY2Fwc19mcmVlCisgICAqIGJ1dCBnX3B0cl9hcnJheSB1c2VzIDE2IGFueXdheSBpZiBpdCBleHBhbmRzIG9uY2UsIHNvIHRoaXMgZG9lcyBub3QgaGVscAorICAgKiBpbiBwcmFjdGlzZQorICAgKiBHU1RfQ0FQU19BUlJBWSAoY2FwcykgPSBnX3B0cl9hcnJheV9zaXplZF9uZXcgKDMyKTsKKyAgICovCisgIGNhcHMtPnByaXYgPSBnX3B0cl9hcnJheV9uZXcgKCk7Cit9CisKKy8qKgorICogZ3N0X2NhcHNfbmV3X2VtcHR5OgorICoKKyAqIENyZWF0ZXMgYSBuZXcgI0dzdENhcHMgdGhhdCBpcyBlbXB0eS4gIFRoYXQgaXMsIHRoZSByZXR1cm5lZAorICogI0dzdENhcHMgY29udGFpbnMgbm8gbWVkaWEgZm9ybWF0cy4KKyAqIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgdW5yZWZmaW5nIHRoZSByZXR1cm5lZCBjYXBzLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ldyAjR3N0Q2FwcworICovCitHc3RDYXBzICoKK2dzdF9jYXBzX25ld19lbXB0eSAodm9pZCkKK3sKKyAgR3N0Q2FwcyAqY2FwczsKKworICBjYXBzID0gZ19zbGljZV9uZXcgKEdzdENhcHMpOworCisgIGdzdF9jYXBzX2luaXQgKGNhcHMsIHNpemVvZiAoR3N0Q2FwcykpOworCisjaWZkZWYgREVCVUdfUkVGQ09VTlQKKyAgR1NUX0NBVF9UUkFDRSAoR1NUX0NBVF9DQVBTLCAiY3JlYXRlZCBjYXBzICVwIiwgY2Fwcyk7CisjZW5kaWYKKworICByZXR1cm4gY2FwczsKK30KKworLyoqCisgKiBnc3RfY2Fwc19uZXdfYW55OgorICoKKyAqIENyZWF0ZXMgYSBuZXcgI0dzdENhcHMgdGhhdCBpbmRpY2F0ZXMgdGhhdCBpdCBpcyBjb21wYXRpYmxlIHdpdGgKKyAqIGFueSBtZWRpYSBmb3JtYXQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3ICNHc3RDYXBzCisgKi8KK0dzdENhcHMgKgorZ3N0X2NhcHNfbmV3X2FueSAodm9pZCkKK3sKKyAgR3N0Q2FwcyAqY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eSAoKTsKKworICBHU1RfQ0FQU19GTEFHX1NFVCAoY2FwcywgR1NUX0NBUFNfRkxBR1NfQU5ZKTsKKworICByZXR1cm4gY2FwczsKK30KKworLyoqCisgKiBnc3RfY2Fwc19uZXdfc2ltcGxlOgorICogQG1lZGlhX3R5cGU6IHRoZSBtZWRpYSB0eXBlIG9mIHRoZSBzdHJ1Y3R1cmUKKyAqIEBmaWVsZG5hbWU6IGZpcnN0IGZpZWxkIHRvIHNldAorICogQC4uLjogYWRkaXRpb25hbCBhcmd1bWVudHMKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNHc3RDYXBzIHRoYXQgY29udGFpbnMgb25lICNHc3RTdHJ1Y3R1cmUuICBUaGUKKyAqIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGJ5IHRoZSBhcmd1bWVudHMsIHdoaWNoIGhhdmUgdGhlIHNhbWUgZm9ybWF0CisgKiBhcyBnc3Rfc3RydWN0dXJlX25ldygpLgorICogQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciB1bnJlZmZpbmcgdGhlIHJldHVybmVkIGNhcHMuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3ICNHc3RDYXBzCisgKi8KK0dzdENhcHMgKgorZ3N0X2NhcHNfbmV3X3NpbXBsZSAoY29uc3QgY2hhciAqbWVkaWFfdHlwZSwgY29uc3QgY2hhciAqZmllbGRuYW1lLCAuLi4pCit7CisgIEdzdENhcHMgKmNhcHM7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworICB2YV9saXN0IHZhcl9hcmdzOworCisgIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7CisKKyAgdmFfc3RhcnQgKHZhcl9hcmdzLCBmaWVsZG5hbWUpOworICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld192YWxpc3QgKG1lZGlhX3R5cGUsIGZpZWxkbmFtZSwgdmFyX2FyZ3MpOworICB2YV9lbmQgKHZhcl9hcmdzKTsKKworICBpZiAoc3RydWN0dXJlKQorICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzLCBzdHJ1Y3R1cmUpOworICBlbHNlCisgICAgZ3N0X2NhcHNfcmVwbGFjZSAoJmNhcHMsIE5VTEwpOworCisgIHJldHVybiBjYXBzOworfQorCisvKioKKyAqIGdzdF9jYXBzX25ld19mdWxsOgorICogQHN0cnVjdDE6IHRoZSBmaXJzdCBzdHJ1Y3R1cmUgdG8gYWRkCisgKiBALi4uOiBhZGRpdGlvbmFsIHN0cnVjdHVyZXMgdG8gYWRkCisgKgorICogQ3JlYXRlcyBhIG5ldyAjR3N0Q2FwcyBhbmQgYWRkcyBhbGwgdGhlIHN0cnVjdHVyZXMgbGlzdGVkIGFzCisgKiBhcmd1bWVudHMuICBUaGUgbGlzdCBtdXN0IGJlIE5VTEwtdGVybWluYXRlZC4gIFRoZSBzdHJ1Y3R1cmVzCisgKiBhcmUgbm90IGNvcGllZDsgdGhlIHJldHVybmVkICNHc3RDYXBzIG93bnMgdGhlIHN0cnVjdHVyZXMuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3ICNHc3RDYXBzCisgKi8KK0dzdENhcHMgKgorZ3N0X2NhcHNfbmV3X2Z1bGwgKEdzdFN0cnVjdHVyZSAqIHN0cnVjdDEsIC4uLikKK3sKKyAgR3N0Q2FwcyAqY2FwczsKKyAgdmFfbGlzdCB2YXJfYXJnczsKKworICB2YV9zdGFydCAodmFyX2FyZ3MsIHN0cnVjdDEpOworICBjYXBzID0gZ3N0X2NhcHNfbmV3X2Z1bGxfdmFsaXN0IChzdHJ1Y3QxLCB2YXJfYXJncyk7CisgIHZhX2VuZCAodmFyX2FyZ3MpOworCisgIHJldHVybiBjYXBzOworfQorCisvKioKKyAqIGdzdF9jYXBzX25ld19mdWxsX3ZhbGlzdDoKKyAqIEBzdHJ1Y3R1cmU6IHRoZSBmaXJzdCBzdHJ1Y3R1cmUgdG8gYWRkCisgKiBAdmFyX2FyZ3M6IGFkZGl0aW9uYWwgc3RydWN0dXJlcyB0byBhZGQKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNHc3RDYXBzIGFuZCBhZGRzIGFsbCB0aGUgc3RydWN0dXJlcyBsaXN0ZWQgYXMKKyAqIGFyZ3VtZW50cy4gIFRoZSBsaXN0IG11c3QgYmUgTlVMTC10ZXJtaW5hdGVkLiAgVGhlIHN0cnVjdHVyZXMKKyAqIGFyZSBub3QgY29waWVkOyB0aGUgcmV0dXJuZWQgI0dzdENhcHMgb3ducyB0aGUgc3RydWN0dXJlcy4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXcgI0dzdENhcHMKKyAqLworR3N0Q2FwcyAqCitnc3RfY2Fwc19uZXdfZnVsbF92YWxpc3QgKEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwgdmFfbGlzdCB2YXJfYXJncykKK3sKKyAgR3N0Q2FwcyAqY2FwczsKKworICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOworCisgIHdoaWxlIChzdHJ1Y3R1cmUpIHsKKyAgICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlX3VuY2hlY2tlZCAoY2Fwcywgc3RydWN0dXJlKTsKKyAgICBzdHJ1Y3R1cmUgPSB2YV9hcmcgKHZhcl9hcmdzLCBHc3RTdHJ1Y3R1cmUgKik7CisgIH0KKworICByZXR1cm4gY2FwczsKK30KKworR1R5cGUKK2dzdF9zdGF0aWNfY2Fwc19nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIEdUeXBlIHN0YXRpY2NhcHNfdHlwZSA9IDA7CisKKyAgaWYgKEdfVU5MSUtFTFkgKHN0YXRpY2NhcHNfdHlwZSA9PSAwKSkgeworICAgIHN0YXRpY2NhcHNfdHlwZSA9IGdfcG9pbnRlcl90eXBlX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFN0YXRpY0NhcHMiKTsKKyAgfQorICByZXR1cm4gc3RhdGljY2Fwc190eXBlOworfQorCisKKy8qKgorICogZ3N0X3N0YXRpY19jYXBzX2dldDoKKyAqIEBzdGF0aWNfY2FwczogdGhlICNHc3RTdGF0aWNDYXBzIHRvIGNvbnZlcnQKKyAqCisgKiBDb252ZXJ0cyBhICNHc3RTdGF0aWNDYXBzIHRvIGEgI0dzdENhcHMuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIHBvaW50ZXIgdG8gdGhlICNHc3RDYXBzLiBVbnJlZiBhZnRlciB1c2FnZS4KKyAqICAgICBTaW5jZSB0aGUgY29yZSBob2xkcyBhbiBhZGRpdGlvbmFsIHJlZiB0byB0aGUgcmV0dXJuZWQgY2FwcywKKyAqICAgICB1c2UgZ3N0X2NhcHNfbWFrZV93cml0YWJsZSgpIG9uIHRoZSByZXR1cm5lZCBjYXBzIHRvIG1vZGlmeSBpdC4KKyAqLworR3N0Q2FwcyAqCitnc3Rfc3RhdGljX2NhcHNfZ2V0IChHc3RTdGF0aWNDYXBzICogc3RhdGljX2NhcHMpCit7CisgIEdzdENhcHMgKmNhcHM7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0YXRpY19jYXBzICE9IE5VTEwsIE5VTEwpOworCisgIGNhcHMgPSAoR3N0Q2FwcyAqKSBzdGF0aWNfY2FwczsKKworICAvKiByZWZjb3VudCBpcyAwIHdoZW4gd2UgbmVlZCB0byBjb252ZXJ0ICovCisgIGlmIChHX1VOTElLRUxZIChHU1RfQ0FQU19SRUZDT1VOVF9WQUxVRSAoY2FwcykgPT0gMCkpIHsKKyAgICBjb25zdCBjaGFyICpzdHJpbmc7CisgICAgR3N0Q2FwcyB0ZW1wOworCisgICAgR19MT0NLIChzdGF0aWNfY2Fwc19sb2NrKTsKKyAgICAvKiBjaGVjayBpZiBvdGhlciB0aHJlYWQgYWxyZWFkeSB1cGRhdGVkICovCisgICAgaWYgKEdfVU5MSUtFTFkgKEdTVF9DQVBTX1JFRkNPVU5UX1ZBTFVFIChjYXBzKSA+IDApKQorICAgICAgZ290byBkb25lOworCisgICAgc3RyaW5nID0gc3RhdGljX2NhcHMtPnN0cmluZzsKKworICAgIGlmIChHX1VOTElLRUxZIChzdHJpbmcgPT0gTlVMTCkpCisgICAgICBnb3RvIG5vX3N0cmluZzsKKworICAgIEdTVF9DQVRfVFJBQ0UgKEdTVF9DQVRfQ0FQUywgImNyZWF0aW5nICVwIiwgc3RhdGljX2NhcHMpOworCisgICAgLyogd2UgY29uc3RydWN0IHRoZSBjYXBzIG9uIHRoZSBzdGFjaywgdGhlbiBjb3B5IG92ZXIgdGhlIHN0cnVjdCBpbnRvIG91cgorICAgICAqIHJlYWwgY2FwcywgcmVmY291bnQgbGFzdC4gV2UgZG8gdGhpcyBiZWNhdXNlIHdlIG11c3QgbGVhdmUgdGhlIHJlZmNvdW50CisgICAgICogb2YgdGhlIHJlc3VsdCBjYXBzIHRvIDAgc28gdGhhdCBvdGhlciB0aHJlYWRzIGRvbid0IHJ1biBhd2F5IHdpdGggdGhlCisgICAgICogY2FwcyB3aGlsZSB3ZSBhcmUgY29uc3RydWN0aW5nIGl0LiAqLworICAgIGdzdF9jYXBzX2luaXQgKCZ0ZW1wLCBzaXplb2YgKEdzdENhcHMpKTsKKworICAgIC8qIGNvbnZlcnQgdG8gc3RyaW5nICovCisgICAgaWYgKEdfVU5MSUtFTFkgKCFnc3RfY2Fwc19mcm9tX3N0cmluZ19pbnBsYWNlICgmdGVtcCwgc3RyaW5nKSkpCisgICAgICBnX2NyaXRpY2FsICgiQ291bGQgbm90IGNvbnZlcnQgc3RhdGljIGNhcHMgXCIlc1wiIiwgc3RyaW5nKTsKKworICAgIGdzdF9jYXBzX2luaXQgKGNhcHMsIHNpemVvZiAoR3N0Q2FwcykpOworICAgIC8qIG5vdyBjb3B5IHN0dWZmIG92ZXIgdG8gdGhlIHJlYWwgY2Fwcy4gKi8KKyAgICBHU1RfQ0FQU19GTEFHUyAoY2FwcykgPSBHU1RfQ0FQU19GTEFHUyAoJnRlbXApOworICAgIGNhcHMtPnByaXYgPSBHU1RfQ0FQU19BUlJBWSAoJnRlbXApOworCisgICAgR1NUX0NBVF9UUkFDRSAoR1NUX0NBVF9DQVBTLCAiY3JlYXRlZCAlcCIsIHN0YXRpY19jYXBzKTsKKyAgZG9uZToKKyAgICBHX1VOTE9DSyAoc3RhdGljX2NhcHNfbG9jayk7CisgIH0KKyAgLyogcmVmIHRoZSBjYXBzLCBtYWtlcyBpdCBub3Qgd3JpdGFibGUgKi8KKyAgZ3N0X2NhcHNfcmVmIChjYXBzKTsKKworICByZXR1cm4gY2FwczsKKworICAvKiBFUlJPUlMgKi8KK25vX3N0cmluZzoKKyAgeworICAgIEdfVU5MT0NLIChzdGF0aWNfY2Fwc19sb2NrKTsKKyAgICBnX3dhcm5pbmcgKCJzdGF0aWMgY2FwcyAlcCBzdHJpbmcgaXMgTlVMTCIsIHN0YXRpY19jYXBzKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorfQorCisvKioKKyAqIGdzdF9zdGF0aWNfY2Fwc19jbGVhbnVwOgorICogQHN0YXRpY19jYXBzOiB0aGUgI0dzdFN0YXRpY0NhcHMgdG8gY29udmVydAorICoKKyAqIENsZWFuIHVwIHRoZSBjYXBzIGNvbnRhaW5lZCBpbiBAc3RhdGljX2NhcHMgd2hlbiB0aGUgcmVmY291bnQgaXMgMC4KKyAqLwordm9pZAorZ3N0X3N0YXRpY19jYXBzX2NsZWFudXAgKEdzdFN0YXRpY0NhcHMgKiBzdGF0aWNfY2FwcykKK3sKKyAgR3N0Q2FwcyAqY2FwcyA9IChHc3RDYXBzICopIHN0YXRpY19jYXBzOworCisgIC8qIEZJWE1FOiB0aGlzIGlzIG5vdCB0aHJlYWRzYWZlICovCisgIGlmIChHU1RfQ0FQU19SRUZDT1VOVF9WQUxVRSAoY2FwcykgPT0gMSkgeworICAgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworICAgIGd1aW50IGksIGNsZW47CisKKyAgICBjbGVuID0gR1NUX0NBUFNfTEVOIChjYXBzKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBjbGVuOyBpKyspIHsKKyAgICAgIHN0cnVjdHVyZSA9IChHc3RTdHJ1Y3R1cmUgKikgZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgaSk7CisgICAgICBnc3Rfc3RydWN0dXJlX3NldF9wYXJlbnRfcmVmY291bnQgKHN0cnVjdHVyZSwgTlVMTCk7CisgICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHN0cnVjdHVyZSk7CisgICAgfQorICAgIGdfcHRyX2FycmF5X2ZyZWUgKEdTVF9DQVBTX0FSUkFZIChjYXBzKSwgVFJVRSk7CisgICAgR1NUX0NBUFNfUkVGQ09VTlQgKGNhcHMpID0gMDsKKyAgfQorfQorCisvKiBtYW5pcHVsYXRpb24gKi8KKworc3RhdGljIEdzdFN0cnVjdHVyZSAqCitnc3RfY2Fwc19yZW1vdmVfYW5kX2dldF9zdHJ1Y3R1cmUgKEdzdENhcHMgKiBjYXBzLCBndWludCBpZHgpCit7CisgIC8qIGRvbid0IHVzZSBpbmRleF9mYXN0LCBnc3RfY2Fwc19kb19zaW1wbGlmeSByZWxpZXMgb24gdGhlIG9yZGVyICovCisgIEdzdFN0cnVjdHVyZSAqcyA9IGdfcHRyX2FycmF5X3JlbW92ZV9pbmRleCAoR1NUX0NBUFNfQVJSQVkgKGNhcHMpLCBpZHgpOworCisgIGdzdF9zdHJ1Y3R1cmVfc2V0X3BhcmVudF9yZWZjb3VudCAocywgTlVMTCk7CisgIHJldHVybiBzOworfQorCisvKioKKyAqIGdzdF9jYXBzX3N0ZWFsX3N0cnVjdHVyZToKKyAqIEBjYXBzOiB0aGUgI0dzdENhcHMgdG8gcmV0cmlldmUgZnJvbQorICogQGluZGV4OiBJbmRleCBvZiB0aGUgc3RydWN0dXJlIHRvIHJldHJpZXZlCisgKgorICogUmV0cmlldmVzIHRoZSBzdHVjdHVyZSB3aXRoIHRoZSBnaXZlbiBpbmRleCBmcm9tIHRoZSBsaXN0IG9mIHN0cnVjdHVyZXMKKyAqIGNvbnRhaW5lZCBpbiBAY2Fwcy4gVGhlIGNhbGxlciBiZWNvbWVzIHRoZSBvd25lciBvZiB0aGUgcmV0dXJuZWQgc3RydWN0dXJlLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBwb2ludGVyIHRvIHRoZSAjR3N0U3RydWN0dXJlIGNvcnJlc3BvbmRpbmcKKyAqICAgICB0byBAaW5kZXguCisgKgorICogU2luY2U6IDAuMTAuMzAKKyAqLworR3N0U3RydWN0dXJlICoKK2dzdF9jYXBzX3N0ZWFsX3N0cnVjdHVyZSAoR3N0Q2FwcyAqIGNhcHMsIGd1aW50IGluZGV4KQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoY2FwcyAhPSBOVUxMLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKElTX1dSSVRBQkxFIChjYXBzKSwgTlVMTCk7CisKKyAgaWYgKEdfVU5MSUtFTFkgKGluZGV4ID49IEdTVF9DQVBTX0xFTiAoY2FwcykpKQorICAgIHJldHVybiBOVUxMOworCisgIHJldHVybiBnc3RfY2Fwc19yZW1vdmVfYW5kX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIGluZGV4KTsKK30KKworLyoqCisgKiBnc3RfY2Fwc19hcHBlbmQ6CisgKiBAY2FwczE6IHRoZSAjR3N0Q2FwcyB0aGF0IHdpbGwgYmUgYXBwZW5kZWQgdG8KKyAqIEBjYXBzMjogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdENhcHMgdG8gYXBwZW5kCisgKgorICogQXBwZW5kcyB0aGUgc3RydWN0dXJlcyBjb250YWluZWQgaW4gQGNhcHMyIHRvIEBjYXBzMS4gVGhlIHN0cnVjdHVyZXMgaW4KKyAqIEBjYXBzMiBhcmUgbm90IGNvcGllZCAtLSB0aGV5IGFyZSB0cmFuc2ZlcnJlZCB0byBAY2FwczEsIGFuZCB0aGVuIEBjYXBzMiBpcworICogZnJlZWQuIElmIGVpdGhlciBjYXBzIGlzIEFOWSwgdGhlIHJlc3VsdGluZyBjYXBzIHdpbGwgYmUgQU5ZLgorICovCit2b2lkCitnc3RfY2Fwc19hcHBlbmQgKEdzdENhcHMgKiBjYXBzMSwgR3N0Q2FwcyAqIGNhcHMyKQoreworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKyAgaW50IGk7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0NBUFMgKGNhcHMxKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19DQVBTIChjYXBzMikpOworICBnX3JldHVybl9pZl9mYWlsIChJU19XUklUQUJMRSAoY2FwczEpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoSVNfV1JJVEFCTEUgKGNhcHMyKSk7CisKKyAgaWYgKEdfVU5MSUtFTFkgKENBUFNfSVNfQU5ZIChjYXBzMSkgfHwgQ0FQU19JU19BTlkgKGNhcHMyKSkpIHsKKyAgICAvKiBGSVhNRTogdGhpcyBsZWFrcyAqLworICAgIEdTVF9DQVBTX0ZMQUdTIChjYXBzMSkgfD0gR1NUX0NBUFNfRkxBR1NfQU5ZOworICAgIGZvciAoaSA9IEdTVF9DQVBTX0xFTiAoY2FwczIpIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgIHN0cnVjdHVyZSA9IGdzdF9jYXBzX3JlbW92ZV9hbmRfZ2V0X3N0cnVjdHVyZSAoY2FwczIsIGkpOworICAgICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzdHJ1Y3R1cmUpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBmb3IgKGkgPSBHU1RfQ0FQU19MRU4gKGNhcHMyKTsgaTsgaS0tKSB7CisgICAgICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19yZW1vdmVfYW5kX2dldF9zdHJ1Y3R1cmUgKGNhcHMyLCAwKTsKKyAgICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzMSwgc3RydWN0dXJlKTsKKyAgICB9CisgIH0KKyAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMyKTsgICAgICAgLyogZ3VhcmFudGVlZCB0byBmcmVlIGl0ICovCit9CisKKy8qKgorICogZ3N0X2NhcHNfbWVyZ2U6CisgKiBAY2FwczE6IHRoZSAjR3N0Q2FwcyB0aGF0IHdpbGwgdGFrZSB0aGUgbmV3IGVudHJpZXMKKyAqIEBjYXBzMjogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdENhcHMgdG8gbWVyZ2UgaW4KKyAqCisgKiBBcHBlbmRzIHRoZSBzdHJ1Y3R1cmVzIGNvbnRhaW5lZCBpbiBAY2FwczIgdG8gQGNhcHMxIGlmIHRoZXkgYXJlIG5vdCB5ZXQKKyAqIGV4cHJlc3NlZCBieSBAY2FwczEuIFRoZSBzdHJ1Y3R1cmVzIGluIEBjYXBzMiBhcmUgbm90IGNvcGllZCAtLSB0aGV5IGFyZQorICogdHJhbnNmZXJyZWQgdG8gQGNhcHMxLCBhbmQgdGhlbiBAY2FwczIgaXMgZnJlZWQuCisgKiBJZiBlaXRoZXIgY2FwcyBpcyBBTlksIHRoZSByZXN1bHRpbmcgY2FwcyB3aWxsIGJlIEFOWS4KKyAqCisgKiBTaW5jZTogMC4xMC4xMAorICovCit2b2lkCitnc3RfY2Fwc19tZXJnZSAoR3N0Q2FwcyAqIGNhcHMxLCBHc3RDYXBzICogY2FwczIpCit7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworICBpbnQgaTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQ0FQUyAoY2FwczEpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0NBUFMgKGNhcHMyKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKElTX1dSSVRBQkxFIChjYXBzMSkpOworICBnX3JldHVybl9pZl9mYWlsIChJU19XUklUQUJMRSAoY2FwczIpKTsKKworICBpZiAoR19VTkxJS0VMWSAoQ0FQU19JU19BTlkgKGNhcHMxKSkpIHsKKyAgICBmb3IgKGkgPSBHU1RfQ0FQU19MRU4gKGNhcHMyKSAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19yZW1vdmVfYW5kX2dldF9zdHJ1Y3R1cmUgKGNhcHMyLCBpKTsKKyAgICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoc3RydWN0dXJlKTsKKyAgICB9CisgIH0gZWxzZSBpZiAoR19VTkxJS0VMWSAoQ0FQU19JU19BTlkgKGNhcHMyKSkpIHsKKyAgICBHU1RfQ0FQU19GTEFHUyAoY2FwczEpIHw9IEdTVF9DQVBTX0ZMQUdTX0FOWTsKKyAgICBmb3IgKGkgPSBHU1RfQ0FQU19MRU4gKGNhcHMxKSAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19yZW1vdmVfYW5kX2dldF9zdHJ1Y3R1cmUgKGNhcHMxLCBpKTsKKyAgICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoc3RydWN0dXJlKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgZm9yIChpID0gR1NUX0NBUFNfTEVOIChjYXBzMik7IGk7IGktLSkgeworICAgICAgc3RydWN0dXJlID0gZ3N0X2NhcHNfcmVtb3ZlX2FuZF9nZXRfc3RydWN0dXJlIChjYXBzMiwgMCk7CisgICAgICBnc3RfY2Fwc19tZXJnZV9zdHJ1Y3R1cmUgKGNhcHMxLCBzdHJ1Y3R1cmUpOworICAgIH0KKyAgICAvKiB0aGlzIGlzIHRvbyBuYWl2ZQorICAgICAgIEdzdENhcHMgKmNvbSA9IGdzdF9jYXBzX2ludGVyc2VjdCAoY2FwczEsIGNhcHMyKTsKKyAgICAgICBHc3RDYXBzICphZGQgPSBnc3RfY2Fwc19zdWJ0cmFjdCAoY2FwczIsIGNvbSk7CisKKyAgICAgICBHU1RfREVCVUcgKCJjb21tb24gOiAlZCIsIGdzdF9jYXBzX2dldF9zaXplIChjb20pKTsKKyAgICAgICBHU1RfREVCVUcgKCJhZGRpbmcgOiAlZCIsIGdzdF9jYXBzX2dldF9zaXplIChhZGQpKTsKKyAgICAgICBnc3RfY2Fwc19hcHBlbmQgKGNhcHMxLCBhZGQpOworICAgICAgIGdzdF9jYXBzX3VucmVmIChjb20pOworICAgICAqLworICB9CisgIGdzdF9jYXBzX3VucmVmIChjYXBzMik7ICAgICAgIC8qIGd1YXJhbnRlZWQgdG8gZnJlZSBpdCAqLworfQorCisvKioKKyAqIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmU6CisgKiBAY2FwczogdGhlICNHc3RDYXBzIHRoYXQgd2lsbCBiZSBhcHBlbmRlZCB0bworICogQHN0cnVjdHVyZTogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdFN0cnVjdHVyZSB0byBhcHBlbmQKKyAqCisgKiBBcHBlbmRzIEBzdHJ1Y3R1cmUgdG8gQGNhcHMuICBUaGUgc3RydWN0dXJlIGlzIG5vdCBjb3BpZWQ7IEBjYXBzCisgKiBiZWNvbWVzIHRoZSBvd25lciBvZiBAc3RydWN0dXJlLgorICovCit2b2lkCitnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlIChHc3RDYXBzICogY2FwcywgR3N0U3RydWN0dXJlICogc3RydWN0dXJlKQoreworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQ0FQUyAoY2FwcykpOworICBnX3JldHVybl9pZl9mYWlsIChJU19XUklUQUJMRSAoY2FwcykpOworCisgIGlmIChHX0xJS0VMWSAoc3RydWN0dXJlKSkgeworICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzLCBzdHJ1Y3R1cmUpOworICB9Cit9CisKKy8qKgorICogZ3N0X2NhcHNfcmVtb3ZlX3N0cnVjdHVyZToKKyAqIEBjYXBzOiB0aGUgI0dzdENhcHMgdG8gcmVtb3ZlIGZyb20KKyAqIEBpZHg6IEluZGV4IG9mIHRoZSBzdHJ1Y3R1cmUgdG8gcmVtb3ZlCisgKgorICogcmVtb3ZlcyB0aGUgc3R1Y3R1cmUgd2l0aCB0aGUgZ2l2ZW4gaW5kZXggZnJvbSB0aGUgbGlzdCBvZiBzdHJ1Y3R1cmVzCisgKiBjb250YWluZWQgaW4gQGNhcHMuCisgKi8KK3ZvaWQKK2dzdF9jYXBzX3JlbW92ZV9zdHJ1Y3R1cmUgKEdzdENhcHMgKiBjYXBzLCBndWludCBpZHgpCit7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKGNhcHMgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKGlkeCA8PSBnc3RfY2Fwc19nZXRfc2l6ZSAoY2FwcykpOworICBnX3JldHVybl9pZl9mYWlsIChJU19XUklUQUJMRSAoY2FwcykpOworCisgIHN0cnVjdHVyZSA9IGdzdF9jYXBzX3JlbW92ZV9hbmRfZ2V0X3N0cnVjdHVyZSAoY2FwcywgaWR4KTsKKyAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzdHJ1Y3R1cmUpOworfQorCisvKioKKyAqIGdzdF9jYXBzX21lcmdlX3N0cnVjdHVyZToKKyAqIEBjYXBzOiB0aGUgI0dzdENhcHMgdGhhdCB3aWxsIHRoZSBuZXcgc3RydWN0dXJlCisgKiBAc3RydWN0dXJlOiAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0U3RydWN0dXJlIHRvIG1lcmdlCisgKgorICogQXBwZW5kcyBAc3RydWN0dXJlIHRvIEBjYXBzIGlmIGl0cyBub3QgYWxyZWFkeSBleHByZXNzZWQgYnkgQGNhcHMuICBUaGUKKyAqIHN0cnVjdHVyZSBpcyBub3QgY29waWVkOyBAY2FwcyBiZWNvbWVzIHRoZSBvd25lciBvZiBAc3RydWN0dXJlLgorICovCit2b2lkCitnc3RfY2Fwc19tZXJnZV9zdHJ1Y3R1cmUgKEdzdENhcHMgKiBjYXBzLCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19DQVBTIChjYXBzKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKElTX1dSSVRBQkxFIChjYXBzKSk7CisKKyAgaWYgKEdfTElLRUxZIChzdHJ1Y3R1cmUpKSB7CisgICAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmUxOworICAgIGludCBpOworICAgIGdib29sZWFuIHVuaXF1ZSA9IFRSVUU7CisKKyAgICAvKiBjaGVjayBlYWNoIHN0cnVjdHVyZSAqLworICAgIGZvciAoaSA9IEdTVF9DQVBTX0xFTiAoY2FwcykgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgc3RydWN0dXJlMSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzLCBpKTsKKyAgICAgIC8qIGlmIHN0cnVjdHVyZSBpcyBhIHN1YnNldCBvZiBzdHJ1Y3R1cmUxLCB0aGVuIHNraXAgaXQgKi8KKyAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2lzX3N1YnNldCAoc3RydWN0dXJlLCBzdHJ1Y3R1cmUxKSkgeworICAgICAgICB1bmlxdWUgPSBGQUxTRTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICAgIGlmICh1bmlxdWUpIHsKKyAgICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzLCBzdHJ1Y3R1cmUpOworICAgIH0gZWxzZSB7CisgICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHN0cnVjdHVyZSk7CisgICAgfQorICB9Cit9CisKKy8qKgorICogZ3N0X2NhcHNfZ2V0X3NpemU6CisgKiBAY2FwczogYSAjR3N0Q2FwcworICoKKyAqIEdldHMgdGhlIG51bWJlciBvZiBzdHJ1Y3R1cmVzIGNvbnRhaW5lZCBpbiBAY2Fwcy4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbnVtYmVyIG9mIHN0cnVjdHVyZXMgdGhhdCBAY2FwcyBjb250YWlucworICovCitndWludAorZ3N0X2NhcHNfZ2V0X3NpemUgKGNvbnN0IEdzdENhcHMgKiBjYXBzKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NBUFMgKGNhcHMpLCAwKTsKKworICByZXR1cm4gR1NUX0NBUFNfTEVOIChjYXBzKTsKK30KKworLyoqCisgKiBnc3RfY2Fwc19nZXRfc3RydWN0dXJlOgorICogQGNhcHM6IGEgI0dzdENhcHMKKyAqIEBpbmRleDogdGhlIGluZGV4IG9mIHRoZSBzdHJ1Y3R1cmUKKyAqCisgKiBGaW5kcyB0aGUgc3RydWN0dXJlIGluIEBjYXBzIHRoYXQgaGFzIHRoZSBpbmRleCBAaW5kZXgsIGFuZAorICogcmV0dXJucyBpdC4KKyAqCisgKiBXQVJOSU5HOiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgY29uc3QgR3N0Q2FwcyAqLCBidXQgcmV0dXJucyBhCisgKiBub24tY29uc3QgR3N0U3RydWN0dXJlICouICBUaGlzIGlzIGZvciBwcm9ncmFtbWluZyBjb252ZW5pZW5jZSAtLQorICogdGhlIGNhbGxlciBzaG91bGQgYmUgYXdhcmUgdGhhdCBzdHJ1Y3R1cmVzIGluc2lkZSBhIGNvbnN0YW50CisgKiAjR3N0Q2FwcyBzaG91bGQgbm90IGJlIG1vZGlmaWVkLiBIb3dldmVyLCBpZiB5b3Uga25vdyB0aGUgY2FwcworICogYXJlIHdyaXRhYmxlLCBlaXRoZXIgYmVjYXVzZSB5b3UgaGF2ZSBqdXN0IGNvcGllZCB0aGVtIG9yIG1hZGUKKyAqIHRoZW0gd3JpdGFibGUgd2l0aCBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlKCksIHlvdSBtYXkgbW9kaWZ5IHRoZQorICogc3RydWN0dXJlIHJldHVybmVkIGluIHRoZSB1c3VhbCB3YXksIGUuZy4gd2l0aCBmdW5jdGlvbnMgbGlrZQorICogZ3N0X3N0cnVjdHVyZV9zZXQoKS4KKyAqCisgKiBZb3UgZG8gbm90IG5lZWQgdG8gZnJlZSBvciB1bnJlZiB0aGUgc3RydWN0dXJlIHJldHVybmVkLCBpdAorICogYmVsb25ncyB0byB0aGUgI0dzdENhcHMuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBhIHBvaW50ZXIgdG8gdGhlICNHc3RTdHJ1Y3R1cmUgY29ycmVzcG9uZGluZworICogICAgIHRvIEBpbmRleAorICovCitHc3RTdHJ1Y3R1cmUgKgorZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY29uc3QgR3N0Q2FwcyAqIGNhcHMsIGd1aW50IGluZGV4KQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NBUFMgKGNhcHMpLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGluZGV4IDwgR1NUX0NBUFNfTEVOIChjYXBzKSwgTlVMTCk7CisKKyAgcmV0dXJuIGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzLCBpbmRleCk7Cit9CisKKy8qKgorICogZ3N0X2NhcHNfY29weV9udGg6CisgKiBAY2FwczogdGhlICNHc3RDYXBzIHRvIGNvcHkKKyAqIEBudGg6IHRoZSBudGggc3RydWN0dXJlIHRvIGNvcHkKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNHc3RDYXBzIGFuZCBhcHBlbmRzIGEgY29weSBvZiB0aGUgbnRoIHN0cnVjdHVyZQorICogY29udGFpbmVkIGluIEBjYXBzLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ldyAjR3N0Q2FwcworICovCitHc3RDYXBzICoKK2dzdF9jYXBzX2NvcHlfbnRoIChjb25zdCBHc3RDYXBzICogY2FwcywgZ3VpbnQgbnRoKQoreworICBHc3RDYXBzICpuZXdjYXBzOworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NBUFMgKGNhcHMpLCBOVUxMKTsKKworICBuZXdjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOworICBHU1RfQ0FQU19GTEFHUyAobmV3Y2FwcykgPSBHU1RfQ0FQU19GTEFHUyAoY2Fwcyk7CisKKyAgaWYgKEdfTElLRUxZIChHU1RfQ0FQU19MRU4gKGNhcHMpID4gbnRoKSkgeworICAgIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzLCBudGgpOworICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChuZXdjYXBzLAorICAgICAgICBnc3Rfc3RydWN0dXJlX2NvcHkgKHN0cnVjdHVyZSkpOworICB9CisKKyAgcmV0dXJuIG5ld2NhcHM7Cit9CisKKy8qKgorICogZ3N0X2NhcHNfdHJ1bmNhdGU6CisgKiBAY2FwczogdGhlICNHc3RDYXBzIHRvIHRydW5jYXRlCisgKgorICogRGVzdHJ1Y3RpdmVseSBkaXNjYXJkIGFsbCBidXQgdGhlIGZpcnN0IHN0cnVjdHVyZSBmcm9tIEBjYXBzLiBVc2VmdWwgd2hlbgorICogZml4YXRpbmcuIEBjYXBzIG11c3QgYmUgd3JpdGFibGUuCisgKi8KK3ZvaWQKK2dzdF9jYXBzX3RydW5jYXRlIChHc3RDYXBzICogY2FwcykKK3sKKyAgZ2ludCBpOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19DQVBTIChjYXBzKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKElTX1dSSVRBQkxFIChjYXBzKSk7CisKKyAgaSA9IEdTVF9DQVBTX0xFTiAoY2FwcykgLSAxOworCisgIHdoaWxlIChpID4gMCkKKyAgICBnc3RfY2Fwc19yZW1vdmVfc3RydWN0dXJlIChjYXBzLCBpLS0pOworfQorCisvKioKKyAqIGdzdF9jYXBzX3NldF92YWx1ZToKKyAqIEBjYXBzOiBhIHdyaXRhYmxlIGNhcHMKKyAqIEBmaWVsZDogbmFtZSBvZiB0aGUgZmllbGQgdG8gc2V0CisgKiBAdmFsdWU6IHZhbHVlIHRvIHNldCB0aGUgZmllbGQgdG8KKyAqCisgKiBTZXRzIHRoZSBnaXZlbiBAZmllbGQgb24gYWxsIHN0cnVjdHVyZXMgb2YgQGNhcHMgdG8gdGhlIGdpdmVuIEB2YWx1ZS4KKyAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgY2FsbGluZyBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSgpIG9uCisgKiBhbGwgc3RydWN0dXJlcyBvZiBAY2Fwcy4KKyAqCisgKiBTaW5jZTogMC4xMC4yNgorICoqLwordm9pZAorZ3N0X2NhcHNfc2V0X3ZhbHVlIChHc3RDYXBzICogY2FwcywgY29uc3QgY2hhciAqZmllbGQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQoreworICBndWludCBpLCBsZW47CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0NBUFMgKGNhcHMpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoSVNfV1JJVEFCTEUgKGNhcHMpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoZmllbGQgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHZhbHVlKSk7CisKKyAgbGVuID0gR1NUX0NBUFNfTEVOIChjYXBzKTsKKyAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlX3VuY2hlY2tlZCAoY2FwcywgaSk7CisgICAgZ3N0X3N0cnVjdHVyZV9zZXRfdmFsdWUgKHN0cnVjdHVyZSwgZmllbGQsIHZhbHVlKTsKKyAgfQorfQorCisvKioKKyAqIGdzdF9jYXBzX3NldF9zaW1wbGVfdmFsaXN0OgorICogQGNhcHM6IHRoZSAjR3N0Q2FwcyB0byBzZXQKKyAqIEBmaWVsZDogZmlyc3QgZmllbGQgdG8gc2V0CisgKiBAdmFyYXJnczogYWRkaXRpb25hbCBwYXJhbWV0ZXJzCisgKgorICogU2V0cyBmaWVsZHMgaW4gYSAjR3N0Q2Fwcy4gIFRoZSBhcmd1bWVudHMgbXVzdCBiZSBwYXNzZWQgaW4gdGhlIHNhbWUKKyAqIG1hbm5lciBhcyBnc3Rfc3RydWN0dXJlX3NldCgpLCBhbmQgYmUgTlVMTC10ZXJtaW5hdGVkLgorICogPG5vdGU+UHJpb3IgdG8gR1N0cmVhbWVyIHZlcnNpb24gMC4xMC4yNiwgdGhpcyBmdW5jdGlvbiBmYWlsZWQgd2hlbgorICogQGNhcHMgd2FzIG5vdCBzaW1wbGUuIElmIHlvdXIgY29kZSBuZWVkcyB0byB3b3JrIHdpdGggdGhvc2UgdmVyc2lvbnMKKyAqIG9mIEdTdHJlYW1lciwgeW91IG1heSBvbmx5IGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIEdTVF9DQVBTX0lTX1NJTVBMRSgpCisgKiBpcyAlVFJVRSBmb3IgQGNhcHMuPC9ub3RlPgorICovCit2b2lkCitnc3RfY2Fwc19zZXRfc2ltcGxlX3ZhbGlzdCAoR3N0Q2FwcyAqIGNhcHMsIGNvbnN0IGNoYXIgKmZpZWxkLCB2YV9saXN0IHZhcmFyZ3MpCit7CisgIEdWYWx1ZSB2YWx1ZSA9IHsgMCwgfTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQ0FQUyAoY2FwcykpOworICBnX3JldHVybl9pZl9mYWlsIChJU19XUklUQUJMRSAoY2FwcykpOworCisgIHdoaWxlIChmaWVsZCkgeworICAgIEdUeXBlIHR5cGU7CisgICAgY2hhciAqZXJyOworCisgICAgdHlwZSA9IHZhX2FyZyAodmFyYXJncywgR1R5cGUpOworCisgICAgaWYgKEdfVU5MSUtFTFkgKHR5cGUgPT0gR19UWVBFX0RBVEUpKSB7CisgICAgICBnX3dhcm5pbmcgKCJEb24ndCB1c2UgR19UWVBFX0RBVEUsIHVzZSBHU1RfVFlQRV9EQVRFIGluc3RlYWRcbiIpOworICAgICAgdHlwZSA9IEdTVF9UWVBFX0RBVEU7CisgICAgfQorICAgIEdfVkFMVUVfQ09MTEVDVF9JTklUICgmdmFsdWUsIHR5cGUsIHZhcmFyZ3MsIDAsICZlcnIpOworICAgIGlmIChHX1VOTElLRUxZIChlcnIpKSB7CisgICAgICBnX2NyaXRpY2FsICgiJXMiLCBlcnIpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGdzdF9jYXBzX3NldF92YWx1ZSAoY2FwcywgZmllbGQsICZ2YWx1ZSk7CisKKyAgICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUpOworCisgICAgZmllbGQgPSB2YV9hcmcgKHZhcmFyZ3MsIGNvbnN0IGdjaGFyICopOworICB9Cit9CisKKy8qKgorICogZ3N0X2NhcHNfc2V0X3NpbXBsZToKKyAqIEBjYXBzOiB0aGUgI0dzdENhcHMgdG8gc2V0CisgKiBAZmllbGQ6IGZpcnN0IGZpZWxkIHRvIHNldAorICogQC4uLjogYWRkaXRpb25hbCBwYXJhbWV0ZXJzCisgKgorICogU2V0cyBmaWVsZHMgaW4gYSAjR3N0Q2Fwcy4gIFRoZSBhcmd1bWVudHMgbXVzdCBiZSBwYXNzZWQgaW4gdGhlIHNhbWUKKyAqIG1hbm5lciBhcyBnc3Rfc3RydWN0dXJlX3NldCgpLCBhbmQgYmUgTlVMTC10ZXJtaW5hdGVkLgorICogPG5vdGU+UHJpb3IgdG8gR1N0cmVhbWVyIHZlcnNpb24gMC4xMC4yNiwgdGhpcyBmdW5jdGlvbiBmYWlsZWQgd2hlbgorICogQGNhcHMgd2FzIG5vdCBzaW1wbGUuIElmIHlvdXIgY29kZSBuZWVkcyB0byB3b3JrIHdpdGggdGhvc2UgdmVyc2lvbnMKKyAqIG9mIEdTdHJlYW1lciwgeW91IG1heSBvbmx5IGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIEdTVF9DQVBTX0lTX1NJTVBMRSgpCisgKiBpcyAlVFJVRSBmb3IgQGNhcHMuPC9ub3RlPgorICovCit2b2lkCitnc3RfY2Fwc19zZXRfc2ltcGxlIChHc3RDYXBzICogY2FwcywgY29uc3QgY2hhciAqZmllbGQsIC4uLikKK3sKKyAgdmFfbGlzdCB2YXJfYXJnczsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQ0FQUyAoY2FwcykpOworICBnX3JldHVybl9pZl9mYWlsIChJU19XUklUQUJMRSAoY2FwcykpOworCisgIHZhX3N0YXJ0ICh2YXJfYXJncywgZmllbGQpOworICBnc3RfY2Fwc19zZXRfc2ltcGxlX3ZhbGlzdCAoY2FwcywgZmllbGQsIHZhcl9hcmdzKTsKKyAgdmFfZW5kICh2YXJfYXJncyk7Cit9CisKKy8qIHRlc3RzICovCisKKy8qKgorICogZ3N0X2NhcHNfaXNfYW55OgorICogQGNhcHM6IHRoZSAjR3N0Q2FwcyB0byB0ZXN0CisgKgorICogRGV0ZXJtaW5lcyBpZiBAY2FwcyByZXByZXNlbnRzIGFueSBtZWRpYSBmb3JtYXQuCisgKgorICogUmV0dXJuczogVFJVRSBpZiBAY2FwcyByZXByZXNlbnRzIGFueSBmb3JtYXQuCisgKi8KK2dib29sZWFuCitnc3RfY2Fwc19pc19hbnkgKGNvbnN0IEdzdENhcHMgKiBjYXBzKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NBUFMgKGNhcHMpLCBGQUxTRSk7CisKKyAgcmV0dXJuIChDQVBTX0lTX0FOWSAoY2FwcykpOworfQorCisvKioKKyAqIGdzdF9jYXBzX2lzX2VtcHR5OgorICogQGNhcHM6IHRoZSAjR3N0Q2FwcyB0byB0ZXN0CisgKgorICogRGV0ZXJtaW5lcyBpZiBAY2FwcyByZXByZXNlbnRzIG5vIG1lZGlhIGZvcm1hdHMuCisgKgorICogUmV0dXJuczogVFJVRSBpZiBAY2FwcyByZXByZXNlbnRzIG5vIGZvcm1hdHMuCisgKi8KK2dib29sZWFuCitnc3RfY2Fwc19pc19lbXB0eSAoY29uc3QgR3N0Q2FwcyAqIGNhcHMpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0FQUyAoY2FwcyksIEZBTFNFKTsKKworICBpZiAoQ0FQU19JU19BTlkgKGNhcHMpKQorICAgIHJldHVybiBGQUxTRTsKKworICByZXR1cm4gQ0FQU19JU19FTVBUWV9TSU1QTEUgKGNhcHMpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9jYXBzX2lzX2ZpeGVkX2ZvcmVhY2ggKEdRdWFyayBmaWVsZF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsCisgICAgZ3BvaW50ZXIgdW51c2VkKQoreworICByZXR1cm4gZ3N0X3ZhbHVlX2lzX2ZpeGVkICh2YWx1ZSk7Cit9CisKKy8qKgorICogZ3N0X2NhcHNfaXNfZml4ZWQ6CisgKiBAY2FwczogdGhlICNHc3RDYXBzIHRvIHRlc3QKKyAqCisgKiBGaXhlZCAjR3N0Q2FwcyBkZXNjcmliZSBleGFjdGx5IG9uZSBmb3JtYXQsIHRoYXQgaXMsIHRoZXkgaGF2ZSBleGFjdGx5CisgKiBvbmUgc3RydWN0dXJlLCBhbmQgZWFjaCBmaWVsZCBpbiB0aGUgc3RydWN0dXJlIGRlc2NyaWJlcyBhIGZpeGVkIHR5cGUuCisgKiBFeGFtcGxlcyBvZiBub24tZml4ZWQgdHlwZXMgYXJlIEdTVF9UWVBFX0lOVF9SQU5HRSBhbmQgR1NUX1RZUEVfTElTVC4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIEBjYXBzIGlzIGZpeGVkCisgKi8KK2dib29sZWFuCitnc3RfY2Fwc19pc19maXhlZCAoY29uc3QgR3N0Q2FwcyAqIGNhcHMpCit7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0FQUyAoY2FwcyksIEZBTFNFKTsKKworICBpZiAoR1NUX0NBUFNfTEVOIChjYXBzKSAhPSAxKQorICAgIHJldHVybiBGQUxTRTsKKworICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlX3VuY2hlY2tlZCAoY2FwcywgMCk7CisKKyAgcmV0dXJuIGdzdF9zdHJ1Y3R1cmVfZm9yZWFjaCAoc3RydWN0dXJlLCBnc3RfY2Fwc19pc19maXhlZF9mb3JlYWNoLCBOVUxMKTsKK30KKworLyoqCisgKiBnc3RfY2Fwc19pc19lcXVhbF9maXhlZDoKKyAqIEBjYXBzMTogdGhlICNHc3RDYXBzIHRvIHRlc3QKKyAqIEBjYXBzMjogdGhlICNHc3RDYXBzIHRvIHRlc3QKKyAqCisgKiBUZXN0cyBpZiB0d28gI0dzdENhcHMgYXJlIGVxdWFsLiAgVGhpcyBmdW5jdGlvbiBvbmx5IHdvcmtzIG9uIGZpeGVkCisgKiAjR3N0Q2Fwcy4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBhcmd1bWVudHMgcmVwcmVzZW50IHRoZSBzYW1lIGZvcm1hdAorICovCitnYm9vbGVhbgorZ3N0X2NhcHNfaXNfZXF1YWxfZml4ZWQgKGNvbnN0IEdzdENhcHMgKiBjYXBzMSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMyKQoreworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdDEsICpzdHJ1Y3QyOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3RfY2Fwc19pc19maXhlZCAoY2FwczEpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3RfY2Fwc19pc19maXhlZCAoY2FwczIpLCBGQUxTRSk7CisKKyAgc3RydWN0MSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzMSwgMCk7CisgIHN0cnVjdDIgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlX3VuY2hlY2tlZCAoY2FwczIsIDApOworCisgIHJldHVybiBnc3Rfc3RydWN0dXJlX2lzX2VxdWFsIChzdHJ1Y3QxLCBzdHJ1Y3QyKTsKK30KKworLyoqCisgKiBnc3RfY2Fwc19pc19hbHdheXNfY29tcGF0aWJsZToKKyAqIEBjYXBzMTogdGhlICNHc3RDYXBzIHRvIHRlc3QKKyAqIEBjYXBzMjogdGhlICNHc3RDYXBzIHRvIHRlc3QKKyAqCisgKiBBIGdpdmVuICNHc3RDYXBzIHN0cnVjdHVyZSBpcyBhbHdheXMgY29tcGF0aWJsZSB3aXRoIGFub3RoZXIgaWYKKyAqIGV2ZXJ5IG1lZGlhIGZvcm1hdCB0aGF0IGlzIGluIHRoZSBmaXJzdCBpcyBhbHNvIGNvbnRhaW5lZCBpbiB0aGUKKyAqIHNlY29uZC4gIFRoYXQgaXMsIEBjYXBzMSBpcyBhIHN1YnNldCBvZiBAY2FwczIuCisgKgorICogUmV0dXJuczogVFJVRSBpZiBAY2FwczEgaXMgYSBzdWJzZXQgb2YgQGNhcHMyLgorICovCitnYm9vbGVhbgorZ3N0X2NhcHNfaXNfYWx3YXlzX2NvbXBhdGlibGUgKGNvbnN0IEdzdENhcHMgKiBjYXBzMSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMyKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NBUFMgKGNhcHMxKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NBUFMgKGNhcHMyKSwgRkFMU0UpOworCisgIHJldHVybiBnc3RfY2Fwc19pc19zdWJzZXQgKGNhcHMxLCBjYXBzMik7Cit9CisKKy8qKgorICogZ3N0X2NhcHNfaXNfc3Vic2V0OgorICogQHN1YnNldDogYSAjR3N0Q2FwcworICogQHN1cGVyc2V0OiBhIHBvdGVudGlhbGx5IGdyZWF0ZXIgI0dzdENhcHMKKyAqCisgKiBDaGVja3MgaWYgYWxsIGNhcHMgcmVwcmVzZW50ZWQgYnkgQHN1YnNldCBhcmUgYWxzbyByZXByZXNlbnRlZCBieSBAc3VwZXJzZXQuCisgKiA8bm90ZT5UaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHdvcmsgcmVsaWFibHkgaWYgb3B0aW9uYWwgcHJvcGVydGllcyBmb3IgY2FwcworICogYXJlIGluY2x1ZGVkIG9uIG9uZSBjYXBzIGFuZCBvbWl0dGVkIG9uIHRoZSBvdGhlci48L25vdGU+CisgKgorICogUmV0dXJuczogJVRSVUUgaWYgQHN1YnNldCBpcyBhIHN1YnNldCBvZiBAc3VwZXJzZXQKKyAqLworZ2Jvb2xlYW4KK2dzdF9jYXBzX2lzX3N1YnNldCAoY29uc3QgR3N0Q2FwcyAqIHN1YnNldCwgY29uc3QgR3N0Q2FwcyAqIHN1cGVyc2V0KQoreworICBHc3RTdHJ1Y3R1cmUgKnMxLCAqczI7CisgIGdib29sZWFuIHJldCA9IFRSVUU7CisgIGdpbnQgaSwgajsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3Vic2V0ICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN1cGVyc2V0ICE9IE5VTEwsIEZBTFNFKTsKKworICBpZiAoQ0FQU19JU19FTVBUWSAoc3Vic2V0KSB8fCBDQVBTX0lTX0FOWSAoc3VwZXJzZXQpKQorICAgIHJldHVybiBUUlVFOworICBpZiAoQ0FQU19JU19BTlkgKHN1YnNldCkgfHwgQ0FQU19JU19FTVBUWSAoc3VwZXJzZXQpKQorICAgIHJldHVybiBGQUxTRTsKKworICBmb3IgKGkgPSBHU1RfQ0FQU19MRU4gKHN1YnNldCkgLSAxOyBpID49IDA7IGktLSkgeworICAgIGZvciAoaiA9IEdTVF9DQVBTX0xFTiAoc3VwZXJzZXQpIC0gMTsgaiA+PSAwOyBqLS0pIHsKKyAgICAgIHMxID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZV91bmNoZWNrZWQgKHN1YnNldCwgaSk7CisgICAgICBzMiA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChzdXBlcnNldCwgaik7CisgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9pc19zdWJzZXQgKHMxLCBzMikpIHsKKyAgICAgICAgLyogSWYgd2UgZm91bmQgYSBzdXBlcnNldCwgY29udGludWUgd2l0aCB0aGUgbmV4dAorICAgICAgICAgKiBzdWJzZXQgc3RydWN0dXJlICovCisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICAvKiBJZiB3ZSBmb3VuZCBubyBzdXBlcnNldCBmb3IgdGhpcyBzdWJzZXQgc3RydWN0dXJlCisgICAgICogd2UgcmV0dXJuIEZBTFNFIGltbWVkaWF0ZWx5ICovCisgICAgaWYgKGogPT0gLTEpIHsKKyAgICAgIHJldCA9IEZBTFNFOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBnc3RfY2Fwc19pc19zdWJzZXRfc3RydWN0dXJlOgorICogQGNhcHM6IGEgI0dzdENhcHMKKyAqIEBzdHJ1Y3R1cmU6IGEgcG90ZW50aWFsICNHc3RTdHJ1Y3R1cmUgc3Vic2V0IG9mIEBjYXBzCisgKgorICogQ2hlY2tzIGlmIEBzdHJ1Y3R1cmUgaXMgYSBzdWJzZXQgb2YgQGNhcHMuIFNlZSBnc3RfY2Fwc19pc19zdWJzZXQoKQorICogZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgQHN0cnVjdHVyZSBpcyBhIHN1YnNldCBvZiBAY2FwcworICoKKyAqIFNpbmNlOiAwLjEwLjM1CisgKi8KK2dib29sZWFuCitnc3RfY2Fwc19pc19zdWJzZXRfc3RydWN0dXJlIChjb25zdCBHc3RDYXBzICogY2FwcywKKyAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUpCit7CisgIEdzdFN0cnVjdHVyZSAqczsKKyAgZ2ludCBpOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChjYXBzICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMLCBGQUxTRSk7CisKKyAgaWYgKENBUFNfSVNfQU5ZIChjYXBzKSkKKyAgICByZXR1cm4gVFJVRTsKKyAgaWYgKENBUFNfSVNfRU1QVFkgKGNhcHMpKQorICAgIHJldHVybiBGQUxTRTsKKworICBmb3IgKGkgPSBHU1RfQ0FQU19MRU4gKGNhcHMpIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZV91bmNoZWNrZWQgKGNhcHMsIGkpOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2lzX3N1YnNldCAoc3RydWN0dXJlLCBzKSkgeworICAgICAgLyogSWYgd2UgZm91bmQgYSBzdXBlcnNldCByZXR1cm4gVFJVRSAqLworICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICB9CisKKyAgcmV0dXJuIEZBTFNFOworfQorCisvKioKKyAqIGdzdF9jYXBzX2lzX2VxdWFsOgorICogQGNhcHMxOiBhICNHc3RDYXBzCisgKiBAY2FwczI6IGFub3RoZXIgI0dzdENhcHMKKyAqCisgKiBDaGVja3MgaWYgdGhlIGdpdmVuIGNhcHMgcmVwcmVzZW50IHRoZSBzYW1lIHNldCBvZiBjYXBzLgorICogPG5vdGU+VGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB3b3JrIHJlbGlhYmx5IGlmIG9wdGlvbmFsIHByb3BlcnRpZXMgZm9yIGNhcHMKKyAqIGFyZSBpbmNsdWRlZCBvbiBvbmUgY2FwcyBhbmQgb21pdHRlZCBvbiB0aGUgb3RoZXIuPC9ub3RlPgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGVhbHMgY29ycmVjdGx5IHdpdGggcGFzc2luZyBOVUxMIGZvciBhbnkgb2YgdGhlIGNhcHMuCisgKgorICogUmV0dXJuczogVFJVRSBpZiBib3RoIGNhcHMgYXJlIGVxdWFsLgorICovCitnYm9vbGVhbgorZ3N0X2NhcHNfaXNfZXF1YWwgKGNvbnN0IEdzdENhcHMgKiBjYXBzMSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMyKQoreworICAvKiBGSVhNRSAwLjExOiBOVUxMIHBvaW50ZXJzIGFyZSBubyB2YWxpZCBDYXBzIGJ1dCBpbmRpY2F0ZSBhbiBlcnJvcgorICAgKiBTbyB0aGVyZSBzaG91bGQgYmUgYW4gYXNzZXJ0aW9uIHRoYXQgY2FwczEgYW5kIGNhcHMyICE9IE5VTEwgKi8KKworICAvKiBOVUxMIDwtPiBOVUxMIGlzIGFsbG93ZWQgaGVyZSAqLworICBpZiAoR19VTkxJS0VMWSAoY2FwczEgPT0gY2FwczIpKQorICAgIHJldHVybiBUUlVFOworCisgIC8qIG9uZSBvZiB0aGVtIE5VTEwgPT4gdGhleSBhcmUgZGlmZmVyZW50IChjYW4ndCBiZSBib3RoIE5VTEwgYmVjYXVzZQorICAgKiB3ZSBjaGVja2VkIHRoYXQgYWJvdmUpICovCisgIGlmIChHX1VOTElLRUxZIChjYXBzMSA9PSBOVUxMIHx8IGNhcHMyID09IE5VTEwpKQorICAgIHJldHVybiBGQUxTRTsKKworICBpZiAoR19VTkxJS0VMWSAoZ3N0X2NhcHNfaXNfZml4ZWQgKGNhcHMxKSAmJiBnc3RfY2Fwc19pc19maXhlZCAoY2FwczIpKSkKKyAgICByZXR1cm4gZ3N0X2NhcHNfaXNfZXF1YWxfZml4ZWQgKGNhcHMxLCBjYXBzMik7CisKKyAgcmV0dXJuIGdzdF9jYXBzX2lzX3N1YnNldCAoY2FwczEsIGNhcHMyKSAmJiBnc3RfY2Fwc19pc19zdWJzZXQgKGNhcHMyLCBjYXBzMSk7Cit9CisKKy8qIGludGVyc2VjdCBvcGVyYXRpb24gKi8KKworLyoqCisgKiBnc3RfY2Fwc19jYW5faW50ZXJzZWN0OgorICogQGNhcHMxOiBhICNHc3RDYXBzIHRvIGludGVyc2VjdAorICogQGNhcHMyOiBhICNHc3RDYXBzIHRvIGludGVyc2VjdAorICoKKyAqIFRyaWVzIGludGVyc2VjdGluZyBAY2FwczEgYW5kIEBjYXBzMiBhbmQgcmVwb3J0cyB3aGV0aGVyIHRoZSByZXN1bHQgd291bGQgbm90CisgKiBiZSBlbXB0eQorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIGludGVyc2VjdGlvbiB3b3VsZCBiZSBub3QgZW1wdHkKKyAqCisgKiBTaW5jZTogMC4xMC4yNQorICovCitnYm9vbGVhbgorZ3N0X2NhcHNfY2FuX2ludGVyc2VjdCAoY29uc3QgR3N0Q2FwcyAqIGNhcHMxLCBjb25zdCBHc3RDYXBzICogY2FwczIpCit7CisgIGd1aW50NjQgaTsgICAgICAgICAgICAgICAgICAgIC8qIGluZGV4IGNhbiBiZSB1cCB0byAyICogR19NQVhfVUlOVCAqLworICBndWludCBqLCBrLCBsZW4xLCBsZW4yOworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdDE7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0MjsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NBUFMgKGNhcHMxKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NBUFMgKGNhcHMyKSwgRkFMU0UpOworCisgIC8qIGNhcHMgYXJlIGV4YWN0bHkgdGhlIHNhbWUgcG9pbnRlcnMgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKGNhcHMxID09IGNhcHMyKSkKKyAgICByZXR1cm4gVFJVRTsKKworICAvKiBlbXB0eSBjYXBzIG9uIGVpdGhlciBzaWRlLCByZXR1cm4gZW1wdHkgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKENBUFNfSVNfRU1QVFkgKGNhcHMxKSB8fCBDQVBTX0lTX0VNUFRZIChjYXBzMikpKQorICAgIHJldHVybiBGQUxTRTsKKworICAvKiBvbmUgb2YgdGhlIGNhcHMgaXMgYW55ICovCisgIGlmIChHX1VOTElLRUxZIChDQVBTX0lTX0FOWSAoY2FwczEpIHx8IENBUFNfSVNfQU5ZIChjYXBzMikpKQorICAgIHJldHVybiBUUlVFOworCisgIC8qIHJ1biB6aWd6YWcgb24gdG9wIGxpbmUgdGhlbiByaWdodCBsaW5lLCB0aGlzIHByZXNlcnZlcyB0aGUgY2FwcyBvcmRlcgorICAgKiBtdWNoIGJldHRlciB0aGFuIGEgc2ltcGxlIGxvb3AuCisgICAqCisgICAqIFRoaXMgYWxnb3JpdGhtIHppZ3phZ3Mgb3ZlciB0aGUgY2FwcyBzdHJ1Y3R1cmVzIGFzIGRlbW9uc3RyYXRlZCBpbgorICAgKiB0aGUgZm9sb3dpbmcgbWF0cml4OgorICAgKgorICAgKiAgICAgICAgICBjYXBzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIDEgIDIgIDMKKyAgICogICAgICAgKy0tLS0tLS0tLS0tLS0gICAgIHRvdGFsIGRpc3RhbmNlOiAgKy0tLS0tLS0tLS0tLS0KKyAgICogICAgICAgfCAxICAyICA0ICA3ICAgICAgICAgICAgICAgICAgICAgIDAgfCAwICAxICAyICAzCisgICAqIGNhcHMyIHwgMyAgNSAgOCAxMCAgICAgICAgICAgICAgICAgICAgICAxIHwgMSAgMiAgMyAgNAorICAgKiAgICAgICB8IDYgIDkgMTEgMTIgICAgICAgICAgICAgICAgICAgICAgMiB8IDIgIDMgIDQgIDUKKyAgICoKKyAgICogRmlyc3Qgd2UgaXRlcmF0ZSBvdmVyIHRoZSBjYXBzMSBzdHJ1Y3R1cmVzICh0b3AgbGluZSkgaW50ZXJzZWN0aW5nCisgICAqIHRoZSBzdHJ1Y3R1cmVzIGRpYWdvbmFsbHkgZG93biwgdGhlbiB3ZSBpdGVyYXRlIG92ZXIgdGhlIGNhcHMyCisgICAqIHN0cnVjdHVyZXMuIFRoZSByZXN1bHQgaXMgdGhhdCB0aGUgaW50ZXJzZWN0aW9ucyBhcmUgb3JkZXJlZCBiYXNlZCBvbiB0aGUKKyAgICogc3VtIG9mIHRoZSBpbmRleGVzIGluIHRoZSBsaXN0LgorICAgKi8KKyAgbGVuMSA9IEdTVF9DQVBTX0xFTiAoY2FwczEpOworICBsZW4yID0gR1NUX0NBUFNfTEVOIChjYXBzMik7CisgIGZvciAoaSA9IDA7IGkgPCBsZW4xICsgbGVuMiAtIDE7IGkrKykgeworICAgIC8qIHN1cGVyc2V0IGluZGV4IGdvZXMgZnJvbSAwIHRvIHNnc3RfY2Fwc19zdHJ1Y3R1cmVfaW50ZXJzZWN0dXBlcnNldC0+c3RydWN0cy0+bGVuLTEgKi8KKyAgICBqID0gTUlOIChpLCBsZW4xIC0gMSk7CisgICAgLyogc3Vic2V0IGluZGV4IHN0YXlzIDAgdW50aWwgaSByZWFjaGVzIHN1cGVyc2V0LT5zdHJ1Y3RzLT5sZW4sIHRoZW4gaXQKKyAgICAgKiBjb3VudHMgdXAgZnJvbSAxIHRvIHN1YnNldC0+c3RydWN0cy0+bGVuIC0gMSAqLworICAgIGsgPSAoaSA+IGopID8gKGkgLSBqKSA6IDA7ICAvKiBNQVggKDAsIGkgLSBqKSAqLworCisgICAgLyogbm93IHJ1biB0aGUgZGlhZ29uYWwgbGluZSwgZW5kIGNvbmRpdGlvbiBpcyB0aGUgbGVmdCBvciBib3R0b20KKyAgICAgKiBib3JkZXIgKi8KKyAgICB3aGlsZSAoayA8IGxlbjIpIHsKKyAgICAgIHN0cnVjdDEgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlX3VuY2hlY2tlZCAoY2FwczEsIGopOworICAgICAgc3RydWN0MiA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzMiwgayk7CisKKyAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2Nhbl9pbnRlcnNlY3QgKHN0cnVjdDEsIHN0cnVjdDIpKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgICAgfQorICAgICAgLyogbW92ZSBkb3duIGxlZnQgKi8KKyAgICAgIGsrKzsKKyAgICAgIGlmIChHX1VOTElLRUxZIChqID09IDApKQorICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBzbyB3ZSBkb24ndCByb2xsIGJhY2sgdG8gR19NQVhVSU5UICovCisgICAgICBqLS07CisgICAgfQorICB9CisgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIEdzdENhcHMgKgorZ3N0X2NhcHNfaW50ZXJzZWN0X3ppZ196YWcgKGNvbnN0IEdzdENhcHMgKiBjYXBzMSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMyKQoreworICBndWludDY0IGk7ICAgICAgICAgICAgICAgICAgICAvKiBpbmRleCBjYW4gYmUgdXAgdG8gMiAqIEdfTUFYX1VJTlQgKi8KKyAgZ3VpbnQgaiwgaywgbGVuMSwgbGVuMjsKKworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdDE7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0MjsKKyAgR3N0Q2FwcyAqZGVzdDsKKyAgR3N0U3RydWN0dXJlICppc3RydWN0OworCisgIC8qIGNhcHMgYXJlIGV4YWN0bHkgdGhlIHNhbWUgcG9pbnRlcnMsIGp1c3QgY29weSBvbmUgY2FwcyAqLworICBpZiAoR19VTkxJS0VMWSAoY2FwczEgPT0gY2FwczIpKQorICAgIHJldHVybiBfZ3N0X2NhcHNfY29weSAoY2FwczEpOworCisgIC8qIGVtcHR5IGNhcHMgb24gZWl0aGVyIHNpZGUsIHJldHVybiBlbXB0eSAqLworICBpZiAoR19VTkxJS0VMWSAoQ0FQU19JU19FTVBUWSAoY2FwczEpIHx8IENBUFNfSVNfRU1QVFkgKGNhcHMyKSkpCisgICAgcmV0dXJuIGdzdF9jYXBzX25ld19lbXB0eSAoKTsKKworICAvKiBvbmUgb2YgdGhlIGNhcHMgaXMgYW55LCBqdXN0IGNvcHkgdGhlIG90aGVyIGNhcHMgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKENBUFNfSVNfQU5ZIChjYXBzMSkpKQorICAgIHJldHVybiBfZ3N0X2NhcHNfY29weSAoY2FwczIpOworICBpZiAoR19VTkxJS0VMWSAoQ0FQU19JU19BTlkgKGNhcHMyKSkpCisgICAgcmV0dXJuIF9nc3RfY2Fwc19jb3B5IChjYXBzMSk7CisKKyAgZGVzdCA9IGdzdF9jYXBzX25ld19lbXB0eSAoKTsKKworICAvKiBydW4gemlnemFnIG9uIHRvcCBsaW5lIHRoZW4gcmlnaHQgbGluZSwgdGhpcyBwcmVzZXJ2ZXMgdGhlIGNhcHMgb3JkZXIKKyAgICogbXVjaCBiZXR0ZXIgdGhhbiBhIHNpbXBsZSBsb29wLgorICAgKgorICAgKiBUaGlzIGFsZ29yaXRobSB6aWd6YWdzIG92ZXIgdGhlIGNhcHMgc3RydWN0dXJlcyBhcyBkZW1vbnN0cmF0ZWQgaW4KKyAgICogdGhlIGZvbG93aW5nIG1hdHJpeDoKKyAgICoKKyAgICogICAgICAgICAgY2FwczEKKyAgICogICAgICAgKy0tLS0tLS0tLS0tLS0KKyAgICogICAgICAgfCAxICAyICA0ICA3CisgICAqIGNhcHMyIHwgMyAgNSAgOCAxMAorICAgKiAgICAgICB8IDYgIDkgMTEgMTIKKyAgICoKKyAgICogRmlyc3Qgd2UgaXRlcmF0ZSBvdmVyIHRoZSBjYXBzMSBzdHJ1Y3R1cmVzICh0b3AgbGluZSkgaW50ZXJzZWN0aW5nCisgICAqIHRoZSBzdHJ1Y3R1cmVzIGRpYWdvbmFsbHkgZG93biwgdGhlbiB3ZSBpdGVyYXRlIG92ZXIgdGhlIGNhcHMyCisgICAqIHN0cnVjdHVyZXMuCisgICAqLworICBsZW4xID0gR1NUX0NBUFNfTEVOIChjYXBzMSk7CisgIGxlbjIgPSBHU1RfQ0FQU19MRU4gKGNhcHMyKTsKKyAgZm9yIChpID0gMDsgaSA8IGxlbjEgKyBsZW4yIC0gMTsgaSsrKSB7CisgICAgLyogY2FwczEgaW5kZXggZ29lcyBmcm9tIDAgdG8gR1NUX0NBUFNfTEVOIChjYXBzMSktMSAqLworICAgIGogPSBNSU4gKGksIGxlbjEgLSAxKTsKKyAgICAvKiBjYXBzMiBpbmRleCBzdGF5cyAwIHVudGlsIGkgcmVhY2hlcyBHU1RfQ0FQU19MRU4gKGNhcHMxKSwgdGhlbiBpdCBjb3VudHMKKyAgICAgKiB1cCBmcm9tIDEgdG8gR1NUX0NBUFNfTEVOIChjYXBzMikgLSAxICovCisgICAgayA9IChpID4gaikgPyAoaSAtIGopIDogMDsgIC8qIE1BWCAoMCwgaSAtIGopICovCisKKyAgICAvKiBub3cgcnVuIHRoZSBkaWFnb25hbCBsaW5lLCBlbmQgY29uZGl0aW9uIGlzIHRoZSBsZWZ0IG9yIGJvdHRvbQorICAgICAqIGJvcmRlciAqLworICAgIHdoaWxlIChrIDwgbGVuMikgeworICAgICAgc3RydWN0MSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzMSwgaik7CisgICAgICBzdHJ1Y3QyID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZV91bmNoZWNrZWQgKGNhcHMyLCBrKTsKKworICAgICAgaXN0cnVjdCA9IGdzdF9zdHJ1Y3R1cmVfaW50ZXJzZWN0IChzdHJ1Y3QxLCBzdHJ1Y3QyKTsKKworICAgICAgZ3N0X2NhcHNfbWVyZ2Vfc3RydWN0dXJlIChkZXN0LCBpc3RydWN0KTsKKyAgICAgIC8qIG1vdmUgZG93biBsZWZ0ICovCisgICAgICBrKys7CisgICAgICBpZiAoR19VTkxJS0VMWSAoaiA9PSAwKSkKKyAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogc28gd2UgZG9uJ3Qgcm9sbCBiYWNrIHRvIEdfTUFYVUlOVCAqLworICAgICAgai0tOworICAgIH0KKyAgfQorICByZXR1cm4gZGVzdDsKK30KKworLyoqCisgKiBnc3RfY2Fwc19pbnRlcnNlY3RfZmlyc3Q6CisgKiBAY2FwczE6IGEgI0dzdENhcHMgdG8gaW50ZXJzZWN0CisgKiBAY2FwczI6IGEgI0dzdENhcHMgdG8gaW50ZXJzZWN0CisgKgorICogQ3JlYXRlcyBhIG5ldyAjR3N0Q2FwcyB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgZm9ybWF0cyB0aGF0IGFyZSBjb21tb24KKyAqIHRvIGJvdGggQGNhcHMxIGFuZCBAY2FwczIuCisgKgorICogVW5saWtlIEBnc3RfY2Fwc19pbnRlcnNlY3QsIHRoZSByZXR1cm5lZCBjYXBzIHdpbGwgYmUgb3JkZXJlZCBpbiBhIHNpbWlsYXIKKyAqIGZhc2hpb24gYXMgQGNhcHMxLgorICoKKyAqIFJldHVybnM6IHRoZSBuZXcgI0dzdENhcHMKKyAqLworc3RhdGljIEdzdENhcHMgKgorZ3N0X2NhcHNfaW50ZXJzZWN0X2ZpcnN0IChjb25zdCBHc3RDYXBzICogY2FwczEsIGNvbnN0IEdzdENhcHMgKiBjYXBzMikKK3sKKyAgZ3VpbnQ2NCBpOyAgICAgICAgICAgICAgICAgICAgLyogaW5kZXggY2FuIGJlIHVwIHRvIDIgKiBHX01BWF9VSU5UICovCisgIGd1aW50IGosIGxlbjEsIGxlbjI7CisKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3QxOworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdDI7CisgIEdzdENhcHMgKmRlc3Q7CisgIEdzdFN0cnVjdHVyZSAqaXN0cnVjdDsKKworICAvKiBjYXBzIGFyZSBleGFjdGx5IHRoZSBzYW1lIHBvaW50ZXJzLCBqdXN0IGNvcHkgb25lIGNhcHMgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKGNhcHMxID09IGNhcHMyKSkKKyAgICByZXR1cm4gZ3N0X2NhcHNfY29weSAoY2FwczEpOworCisgIC8qIGVtcHR5IGNhcHMgb24gZWl0aGVyIHNpZGUsIHJldHVybiBlbXB0eSAqLworICBpZiAoR19VTkxJS0VMWSAoQ0FQU19JU19FTVBUWSAoY2FwczEpIHx8IENBUFNfSVNfRU1QVFkgKGNhcHMyKSkpCisgICAgcmV0dXJuIGdzdF9jYXBzX25ld19lbXB0eSAoKTsKKworICAvKiBvbmUgb2YgdGhlIGNhcHMgaXMgYW55LCBqdXN0IGNvcHkgdGhlIG90aGVyIGNhcHMgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKENBUFNfSVNfQU5ZIChjYXBzMSkpKQorICAgIHJldHVybiBnc3RfY2Fwc19jb3B5IChjYXBzMik7CisgIGlmIChHX1VOTElLRUxZIChDQVBTX0lTX0FOWSAoY2FwczIpKSkKKyAgICByZXR1cm4gZ3N0X2NhcHNfY29weSAoY2FwczEpOworCisgIGRlc3QgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7CisKKyAgbGVuMSA9IEdTVF9DQVBTX0xFTiAoY2FwczEpOworICBsZW4yID0gR1NUX0NBUFNfTEVOIChjYXBzMik7CisgIGZvciAoaSA9IDA7IGkgPCBsZW4xOyBpKyspIHsKKyAgICBzdHJ1Y3QxID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZV91bmNoZWNrZWQgKGNhcHMxLCBpKTsKKyAgICBmb3IgKGogPSAwOyBqIDwgbGVuMjsgaisrKSB7CisgICAgICBzdHJ1Y3QyID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZV91bmNoZWNrZWQgKGNhcHMyLCBqKTsKKyAgICAgIGlzdHJ1Y3QgPSBnc3Rfc3RydWN0dXJlX2ludGVyc2VjdCAoc3RydWN0MSwgc3RydWN0Mik7CisgICAgICBpZiAoaXN0cnVjdCkKKyAgICAgICAgZ3N0X2NhcHNfbWVyZ2Vfc3RydWN0dXJlIChkZXN0LCBpc3RydWN0KTsKKyAgICB9CisgIH0KKworICByZXR1cm4gZGVzdDsKK30KKworLyoqCisgKiBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbDoKKyAqIEBjYXBzMTogYSAjR3N0Q2FwcyB0byBpbnRlcnNlY3QKKyAqIEBjYXBzMjogYSAjR3N0Q2FwcyB0byBpbnRlcnNlY3QKKyAqIEBtb2RlOiBUaGUgaW50ZXJzZWN0aW9uIGFsZ29yaXRobS9tb2RlIHRvIHVzZQorICoKKyAqIENyZWF0ZXMgYSBuZXcgI0dzdENhcHMgdGhhdCBjb250YWlucyBhbGwgdGhlIGZvcm1hdHMgdGhhdCBhcmUgY29tbW9uCisgKiB0byBib3RoIEBjYXBzMSBhbmQgQGNhcHMyLCB0aGUgb3JkZXIgaXMgZGVmaW5lZCBieSB0aGUgI0dzdENhcHNJbnRlcnNlY3RNb2RlCisgKiB1c2VkLgorICoKKyAqIFJldHVybnM6IHRoZSBuZXcgI0dzdENhcHMKKyAqIFNpbmNlOiAwLjEwLjMzCisgKi8KK0dzdENhcHMgKgorZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGNvbnN0IEdzdENhcHMgKiBjYXBzMSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMyLAorICAgIEdzdENhcHNJbnRlcnNlY3RNb2RlIG1vZGUpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0FQUyAoY2FwczEpLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DQVBTIChjYXBzMiksIE5VTEwpOworCisgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUOgorICAgICAgcmV0dXJuIGdzdF9jYXBzX2ludGVyc2VjdF9maXJzdCAoY2FwczEsIGNhcHMyKTsKKyAgICBkZWZhdWx0OgorICAgICAgZ193YXJuaW5nICgiVW5rbm93biBjYXBzIGludGVyc2VjdCBtb2RlOiAlZCIsIG1vZGUpOworICAgICAgLyogZmFsbHRocm91Z2ggKi8KKyAgICBjYXNlIEdTVF9DQVBTX0lOVEVSU0VDVF9aSUdfWkFHOgorICAgICAgcmV0dXJuIGdzdF9jYXBzX2ludGVyc2VjdF96aWdfemFnIChjYXBzMSwgY2FwczIpOworICB9Cit9CisKKy8qKgorICogZ3N0X2NhcHNfaW50ZXJzZWN0OgorICogQGNhcHMxOiBhICNHc3RDYXBzIHRvIGludGVyc2VjdAorICogQGNhcHMyOiBhICNHc3RDYXBzIHRvIGludGVyc2VjdAorICoKKyAqIENyZWF0ZXMgYSBuZXcgI0dzdENhcHMgdGhhdCBjb250YWlucyBhbGwgdGhlIGZvcm1hdHMgdGhhdCBhcmUgY29tbW9uCisgKiB0byBib3RoIEBjYXBzMSBhbmQgQGNhcHMyLiBEZWZhdWx0cyB0byAlR1NUX0NBUFNfSU5URVJTRUNUX1pJR19aQUcgbW9kZS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbmV3ICNHc3RDYXBzCisgKi8KK0dzdENhcHMgKgorZ3N0X2NhcHNfaW50ZXJzZWN0IChjb25zdCBHc3RDYXBzICogY2FwczEsIGNvbnN0IEdzdENhcHMgKiBjYXBzMikKK3sKKyAgcmV0dXJuIGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChjYXBzMSwgY2FwczIsIEdTVF9DQVBTX0lOVEVSU0VDVF9aSUdfWkFHKTsKK30KKworCisvKiBzdWJ0cmFjdCBvcGVyYXRpb24gKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgY29uc3QgR3N0U3RydWN0dXJlICpzdWJ0cmFjdF9mcm9tOworICBHU0xpc3QgKnB1dF9pbnRvOworfQorU3VidHJhY3Rpb25FbnRyeTsKKworc3RhdGljIGdib29sZWFuCitnc3RfY2Fwc19zdHJ1Y3R1cmVfc3VidHJhY3RfZmllbGQgKEdRdWFyayBmaWVsZF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsCisgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBTdWJ0cmFjdGlvbkVudHJ5ICplID0gdXNlcl9kYXRhOworICBHVmFsdWUgc3VidHJhY3Rpb24gPSB7IDAsIH07CisgIGNvbnN0IEdWYWx1ZSAqb3RoZXI7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIG90aGVyID0gZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKGUtPnN1YnRyYWN0X2Zyb20sIGZpZWxkX2lkKTsKKyAgaWYgKCFvdGhlcikgeworICAgIHJldHVybiBGQUxTRTsKKyAgfQorICBpZiAoIWdzdF92YWx1ZV9zdWJ0cmFjdCAoJnN1YnRyYWN0aW9uLCBvdGhlciwgdmFsdWUpKQorICAgIHJldHVybiBUUlVFOworICBpZiAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZzdWJ0cmFjdGlvbiwgb3RoZXIpID09IEdTVF9WQUxVRV9FUVVBTCkgeworICAgIGdfdmFsdWVfdW5zZXQgKCZzdWJ0cmFjdGlvbik7CisgICAgcmV0dXJuIEZBTFNFOworICB9IGVsc2UgeworICAgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfY29weSAoZS0+c3VidHJhY3RfZnJvbSk7CisgICAgZ3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsdWUgKHN0cnVjdHVyZSwgZmllbGRfaWQsICZzdWJ0cmFjdGlvbik7CisgICAgZ192YWx1ZV91bnNldCAoJnN1YnRyYWN0aW9uKTsKKyAgICBlLT5wdXRfaW50byA9IGdfc2xpc3RfcHJlcGVuZCAoZS0+cHV0X2ludG8sIHN0cnVjdHVyZSk7CisgICAgcmV0dXJuIFRSVUU7CisgIH0KK30KKworc3RhdGljIGdib29sZWFuCitnc3RfY2Fwc19zdHJ1Y3R1cmVfc3VidHJhY3QgKEdTTGlzdCAqKiBpbnRvLCBjb25zdCBHc3RTdHJ1Y3R1cmUgKiBtaW51ZW5kLAorICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN1YnRyYWhlbmQpCit7CisgIFN1YnRyYWN0aW9uRW50cnkgZTsKKyAgZ2Jvb2xlYW4gcmV0OworCisgIGUuc3VidHJhY3RfZnJvbSA9IG1pbnVlbmQ7CisgIGUucHV0X2ludG8gPSBOVUxMOworCisgIHJldCA9IGdzdF9zdHJ1Y3R1cmVfZm9yZWFjaCAoKEdzdFN0cnVjdHVyZSAqKSBzdWJ0cmFoZW5kLAorICAgICAgZ3N0X2NhcHNfc3RydWN0dXJlX3N1YnRyYWN0X2ZpZWxkLCAmZSk7CisgIGlmIChyZXQpIHsKKyAgICAqaW50byA9IGUucHV0X2ludG87CisgIH0gZWxzZSB7CisgICAgR1NMaXN0ICp3YWxrOworCisgICAgZm9yICh3YWxrID0gZS5wdXRfaW50bzsgd2Fsazsgd2FsayA9IGdfc2xpc3RfbmV4dCAod2FsaykpIHsKKyAgICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAod2Fsay0+ZGF0YSk7CisgICAgfQorICAgIGdfc2xpc3RfZnJlZSAoZS5wdXRfaW50byk7CisgIH0KKyAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBnc3RfY2Fwc19zdWJ0cmFjdDoKKyAqIEBtaW51ZW5kOiAjR3N0Q2FwcyB0byBzdWJ0cmFjdCBmcm9tCisgKiBAc3VidHJhaGVuZDogI0dzdENhcHMgdG8gc3VidHJhY3QKKyAqCisgKiBTdWJ0cmFjdHMgdGhlIEBzdWJ0cmFoZW5kIGZyb20gdGhlIEBtaW51ZW5kLgorICogPG5vdGU+VGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB3b3JrIHJlbGlhYmx5IGlmIG9wdGlvbmFsIHByb3BlcnRpZXMgZm9yIGNhcHMKKyAqIGFyZSBpbmNsdWRlZCBvbiBvbmUgY2FwcyBhbmQgb21pdHRlZCBvbiB0aGUgb3RoZXIuPC9ub3RlPgorICoKKyAqIFJldHVybnM6IHRoZSByZXN1bHRpbmcgY2FwcworICovCitHc3RDYXBzICoKK2dzdF9jYXBzX3N1YnRyYWN0IChjb25zdCBHc3RDYXBzICogbWludWVuZCwgY29uc3QgR3N0Q2FwcyAqIHN1YnRyYWhlbmQpCit7CisgIGd1aW50IGksIGosIHN1YmxlbjsKKyAgR3N0U3RydWN0dXJlICptaW47CisgIEdzdFN0cnVjdHVyZSAqc3ViOworICBHc3RDYXBzICpkZXN0ID0gTlVMTCwgKnNyYzsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAobWludWVuZCAhPSBOVUxMLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN1YnRyYWhlbmQgIT0gTlVMTCwgTlVMTCk7CisKKyAgaWYgKENBUFNfSVNfRU1QVFkgKG1pbnVlbmQpIHx8IENBUFNfSVNfQU5ZIChzdWJ0cmFoZW5kKSkgeworICAgIHJldHVybiBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7CisgIH0KKyAgaWYgKENBUFNfSVNfRU1QVFlfU0lNUExFIChzdWJ0cmFoZW5kKSkKKyAgICByZXR1cm4gX2dzdF9jYXBzX2NvcHkgKG1pbnVlbmQpOworCisgIC8qIEZJWE1FOiBEbyB3ZSB3YW50IHRoaXMgaGVyZSBvciBhYm92ZT8KKyAgICAgVGhlIHJlYXNvbiB3ZSBuZWVkIHRoaXMgaXMgdGhhdCB0aGVyZSBpcyBubyBkZWZpbml0aW9uIGFib3V0IHdoYXQKKyAgICAgQU5ZIG1lYW5zIGZvciBzcGVjaWZpYyB0eXBlcywgc28gaXQncyBub3QgcG9zc2libGUgdG8gcmVkdWNlIEFOWSBwYXJ0aWFsbHkKKyAgICAgWW91IGNhbiBvbmx5IHJlbW92ZSBldmVyeXRoaW5nIG9yIG5vdGhpbmcgYW5kIHRoYXQgaXMgZG9uZSBhYm92ZS4KKyAgICAgTm90ZTogdGhlcmUncyBhIHRlc3QgdGhhdCBjaGVja3MgdGhpcyBiZWhhdmlvdXIuICovCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICghQ0FQU19JU19BTlkgKG1pbnVlbmQpLCBOVUxMKTsKKyAgc3VibGVuID0gR1NUX0NBUFNfTEVOIChzdWJ0cmFoZW5kKTsKKyAgZ19hc3NlcnQgKHN1YmxlbiA+IDApOworCisgIHNyYyA9IF9nc3RfY2Fwc19jb3B5IChtaW51ZW5kKTsKKyAgZm9yIChpID0gMDsgaSA8IHN1YmxlbjsgaSsrKSB7CisgICAgZ3VpbnQgc3JjbGVuOworCisgICAgc3ViID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZV91bmNoZWNrZWQgKHN1YnRyYWhlbmQsIGkpOworICAgIGlmIChkZXN0KSB7CisgICAgICBnc3RfY2Fwc191bnJlZiAoc3JjKTsKKyAgICAgIHNyYyA9IGRlc3Q7CisgICAgfQorICAgIGRlc3QgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7CisgICAgc3JjbGVuID0gR1NUX0NBUFNfTEVOIChzcmMpOworICAgIGZvciAoaiA9IDA7IGogPCBzcmNsZW47IGorKykgeworICAgICAgbWluID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZV91bmNoZWNrZWQgKHNyYywgaik7CisgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZV9pZCAobWluKSA9PSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lX2lkIChzdWIpKSB7CisgICAgICAgIEdTTGlzdCAqbGlzdDsKKworICAgICAgICBpZiAoZ3N0X2NhcHNfc3RydWN0dXJlX3N1YnRyYWN0ICgmbGlzdCwgbWluLCBzdWIpKSB7CisgICAgICAgICAgR1NMaXN0ICp3YWxrOworCisgICAgICAgICAgZm9yICh3YWxrID0gbGlzdDsgd2Fsazsgd2FsayA9IGdfc2xpc3RfbmV4dCAod2FsaykpIHsKKyAgICAgICAgICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChkZXN0LAorICAgICAgICAgICAgICAgIChHc3RTdHJ1Y3R1cmUgKikgd2Fsay0+ZGF0YSk7CisgICAgICAgICAgfQorICAgICAgICAgIGdfc2xpc3RfZnJlZSAobGlzdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZV91bmNoZWNrZWQgKGRlc3QsIGdzdF9zdHJ1Y3R1cmVfY29weSAobWluKSk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChkZXN0LCBnc3Rfc3RydWN0dXJlX2NvcHkgKG1pbikpOworICAgICAgfQorICAgIH0KKyAgICBpZiAoQ0FQU19JU19FTVBUWV9TSU1QTEUgKGRlc3QpKSB7CisgICAgICBnc3RfY2Fwc191bnJlZiAoc3JjKTsKKyAgICAgIHJldHVybiBkZXN0OworICAgIH0KKyAgfQorCisgIGdzdF9jYXBzX3VucmVmIChzcmMpOworICBnc3RfY2Fwc19kb19zaW1wbGlmeSAoZGVzdCk7CisgIHJldHVybiBkZXN0OworfQorCisvKiB1bmlvbiBvcGVyYXRpb24gKi8KKworI2lmIDAKK3N0YXRpYyBHc3RTdHJ1Y3R1cmUgKgorZ3N0X2NhcHNfc3RydWN0dXJlX3VuaW9uIChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3QxLAorICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdDIpCit7CisgIGludCBpOworICBHc3RTdHJ1Y3R1cmUgKmRlc3Q7CisgIGNvbnN0IEdzdFN0cnVjdHVyZUZpZWxkICpmaWVsZDE7CisgIGNvbnN0IEdzdFN0cnVjdHVyZUZpZWxkICpmaWVsZDI7CisgIGludCByZXQ7CisKKyAgLyogRklYTUUgdGhpcyBkb2Vzbid0IGFjdHVhbGx5IHdvcmsgKi8KKworICBpZiAoc3RydWN0MS0+bmFtZSAhPSBzdHJ1Y3QyLT5uYW1lKQorICAgIHJldHVybiBOVUxMOworCisgIGRlc3QgPSBnc3Rfc3RydWN0dXJlX2lkX2VtcHR5X25ldyAoc3RydWN0MS0+bmFtZSk7CisKKyAgZm9yIChpID0gMDsgaSA8IHN0cnVjdDEtPmZpZWxkcy0+bGVuOyBpKyspIHsKKyAgICBHVmFsdWUgZGVzdF92YWx1ZSA9IHsgMCB9OworCisgICAgZmllbGQxID0gR1NUX1NUUlVDVFVSRV9GSUVMRCAoc3RydWN0MSwgaSk7CisgICAgZmllbGQyID0gZ3N0X3N0cnVjdHVyZV9pZF9nZXRfZmllbGQgKHN0cnVjdDIsIGZpZWxkMS0+bmFtZSk7CisKKyAgICBpZiAoZmllbGQyID09IE5VTEwpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0gZWxzZSB7CisgICAgICBpZiAoZ3N0X3ZhbHVlX3VuaW9uICgmZGVzdF92YWx1ZSwgJmZpZWxkMS0+dmFsdWUsICZmaWVsZDItPnZhbHVlKSkgeworICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAoZGVzdCwgZ19xdWFya190b19zdHJpbmcgKGZpZWxkMS0+bmFtZSksCisgICAgICAgICAgICAmZGVzdF92YWx1ZSk7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXQgPSBnc3RfdmFsdWVfY29tcGFyZSAoJmZpZWxkMS0+dmFsdWUsICZmaWVsZDItPnZhbHVlKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gZGVzdDsKK30KKyNlbmRpZgorCisvKioKKyAqIGdzdF9jYXBzX3VuaW9uOgorICogQGNhcHMxOiBhICNHc3RDYXBzIHRvIHVuaW9uCisgKiBAY2FwczI6IGEgI0dzdENhcHMgdG8gdW5pb24KKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNHc3RDYXBzIHRoYXQgY29udGFpbnMgYWxsIHRoZSBmb3JtYXRzIHRoYXQgYXJlIGluCisgKiBlaXRoZXIgQGNhcHMxIGFuZCBAY2FwczIuCisgKgorICogUmV0dXJuczogdGhlIG5ldyAjR3N0Q2FwcworICovCitHc3RDYXBzICoKK2dzdF9jYXBzX3VuaW9uIChjb25zdCBHc3RDYXBzICogY2FwczEsIGNvbnN0IEdzdENhcHMgKiBjYXBzMikKK3sKKyAgR3N0Q2FwcyAqZGVzdDE7CisgIEdzdENhcHMgKmRlc3QyOworCisgIC8qIE5VTEwgcG9pbnRlcnMgYXJlIG5vIGNvcnJlY3QgR3N0Q2FwcyAqLworICBnX3JldHVybl92YWxfaWZfZmFpbCAoY2FwczEgIT0gTlVMTCwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChjYXBzMiAhPSBOVUxMLCBOVUxMKTsKKworICBpZiAoQ0FQU19JU19FTVBUWSAoY2FwczEpKQorICAgIHJldHVybiBfZ3N0X2NhcHNfY29weSAoY2FwczIpOworCisgIGlmIChDQVBTX0lTX0VNUFRZIChjYXBzMikpCisgICAgcmV0dXJuIF9nc3RfY2Fwc19jb3B5IChjYXBzMSk7CisKKyAgaWYgKENBUFNfSVNfQU5ZIChjYXBzMSkgfHwgQ0FQU19JU19BTlkgKGNhcHMyKSkKKyAgICByZXR1cm4gZ3N0X2NhcHNfbmV3X2FueSAoKTsKKworICBkZXN0MSA9IF9nc3RfY2Fwc19jb3B5IChjYXBzMSk7CisgIGRlc3QyID0gX2dzdF9jYXBzX2NvcHkgKGNhcHMyKTsKKyAgZ3N0X2NhcHNfYXBwZW5kIChkZXN0MSwgZGVzdDIpOworCisgIGdzdF9jYXBzX2RvX3NpbXBsaWZ5IChkZXN0MSk7CisgIHJldHVybiBkZXN0MTsKK30KKworLyogbm9ybWFsaXplL3NpbXBsaWZ5IG9wZXJhdGlvbnMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX05vcm1hbGl6ZUZvcmVhY2gKK3sKKyAgR3N0Q2FwcyAqY2FwczsKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Cit9CitOb3JtYWxpemVGb3JlYWNoOworCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9jYXBzX25vcm1hbGl6ZV9mb3JlYWNoIChHUXVhcmsgZmllbGRfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBncG9pbnRlciBwdHIpCit7CisgIE5vcm1hbGl6ZUZvcmVhY2ggKm5mID0gKE5vcm1hbGl6ZUZvcmVhY2ggKikgcHRyOworICBHVmFsdWUgdmFsID0geyAwIH07CisgIGd1aW50IGk7CisKKyAgaWYgKEdfVkFMVUVfVFlQRSAodmFsdWUpID09IEdTVF9UWVBFX0xJU1QpIHsKKyAgICBndWludCBsZW4gPSBnc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZSAodmFsdWUpOworICAgIGZvciAoaSA9IDE7IGkgPCBsZW47IGkrKykgeworICAgICAgY29uc3QgR1ZhbHVlICp2ID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlICh2YWx1ZSwgaSk7CisgICAgICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfY29weSAobmYtPnN0cnVjdHVyZSk7CisKKyAgICAgIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlIChzdHJ1Y3R1cmUsIGZpZWxkX2lkLCB2KTsKKyAgICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChuZi0+Y2Fwcywgc3RydWN0dXJlKTsKKyAgICB9CisKKyAgICBnc3RfdmFsdWVfaW5pdF9hbmRfY29weSAoJnZhbCwgZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlICh2YWx1ZSwgMCkpOworICAgIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlIChuZi0+c3RydWN0dXJlLCBmaWVsZF9pZCwgJnZhbCk7CisgICAgZ192YWx1ZV91bnNldCAoJnZhbCk7CisKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qKgorICogZ3N0X2NhcHNfbm9ybWFsaXplOgorICogQGNhcHM6IGEgI0dzdENhcHMgdG8gbm9ybWFsaXplCisgKgorICogQ3JlYXRlcyBhIG5ldyAjR3N0Q2FwcyB0aGF0IHJlcHJlc2VudHMgdGhlIHNhbWUgc2V0IG9mIGZvcm1hdHMgYXMKKyAqIEBjYXBzLCBidXQgY29udGFpbnMgbm8gbGlzdHMuICBFYWNoIGxpc3QgaXMgZXhwYW5kZWQgaW50byBzZXBhcmF0ZQorICogQEdzdFN0cnVjdHVyZXMuCisgKgorICogUmV0dXJuczogdGhlIG5ldyAjR3N0Q2FwcworICovCitHc3RDYXBzICoKK2dzdF9jYXBzX25vcm1hbGl6ZSAoY29uc3QgR3N0Q2FwcyAqIGNhcHMpCit7CisgIE5vcm1hbGl6ZUZvcmVhY2ggbmY7CisgIEdzdENhcHMgKm5ld2NhcHM7CisgIGd1aW50IGk7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DQVBTIChjYXBzKSwgTlVMTCk7CisKKyAgbmV3Y2FwcyA9IF9nc3RfY2Fwc19jb3B5IChjYXBzKTsKKyAgbmYuY2FwcyA9IG5ld2NhcHM7CisKKyAgZm9yIChpID0gMDsgaSA8IGdzdF9jYXBzX2dldF9zaXplIChuZXdjYXBzKTsgaSsrKSB7CisgICAgbmYuc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZV91bmNoZWNrZWQgKG5ld2NhcHMsIGkpOworCisgICAgd2hpbGUgKCFnc3Rfc3RydWN0dXJlX2ZvcmVhY2ggKG5mLnN0cnVjdHVyZSwKKyAgICAgICAgICAgIGdzdF9jYXBzX25vcm1hbGl6ZV9mb3JlYWNoLCAmbmYpKTsKKyAgfQorCisgIHJldHVybiBuZXdjYXBzOworfQorCitzdGF0aWMgZ2ludAorZ3N0X2NhcHNfY29tcGFyZV9zdHJ1Y3R1cmVzIChnY29uc3Rwb2ludGVyIG9uZSwgZ2NvbnN0cG9pbnRlciB0d28pCit7CisgIGdpbnQgcmV0OworICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnN0cnVjdDEgPSAqKChjb25zdCBHc3RTdHJ1Y3R1cmUgKiopIG9uZSk7CisgIGNvbnN0IEdzdFN0cnVjdHVyZSAqc3RydWN0MiA9ICooKGNvbnN0IEdzdFN0cnVjdHVyZSAqKikgdHdvKTsKKworICAvKiBGSVhNRTogdGhpcyBvcmRlcnMgYWxwaGFiZXRpY2FsbHksIGJ1dCBvcmRlcmluZyB0aGUgcXVhcmtzIG1pZ2h0IGJlIGZhc3RlcgorICAgICBTbyB3aGF0J3MgdGhlIGJlc3Qgd2F5PyAqLworICByZXQgPSBzdHJjbXAgKGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKHN0cnVjdDEpLAorICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoc3RydWN0MikpOworICBpZiAocmV0KQorICAgIHJldHVybiByZXQ7CisKKyAgcmV0dXJuIGdzdF9zdHJ1Y3R1cmVfbl9maWVsZHMgKHN0cnVjdDIpIC0gZ3N0X3N0cnVjdHVyZV9uX2ZpZWxkcyAoc3RydWN0MSk7Cit9CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIEdRdWFyayBuYW1lOworICBHVmFsdWUgdmFsdWU7CisgIEdzdFN0cnVjdHVyZSAqY29tcGFyZTsKK30KK1VuaW9uRmllbGQ7CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2NhcHNfc3RydWN0dXJlX2ZpZ3VyZV9vdXRfdW5pb24gKEdRdWFyayBmaWVsZF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsCisgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBVbmlvbkZpZWxkICp1ID0gdXNlcl9kYXRhOworICBjb25zdCBHVmFsdWUgKnZhbCA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlICh1LT5jb21wYXJlLCBmaWVsZF9pZCk7CisKKyAgaWYgKCF2YWwpIHsKKyAgICBpZiAodS0+bmFtZSkKKyAgICAgIGdfdmFsdWVfdW5zZXQgKCZ1LT52YWx1ZSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisgIGlmIChnc3RfdmFsdWVfY29tcGFyZSAodmFsLCB2YWx1ZSkgPT0gR1NUX1ZBTFVFX0VRVUFMKQorICAgIHJldHVybiBUUlVFOworICBpZiAodS0+bmFtZSkgeworICAgIGdfdmFsdWVfdW5zZXQgKCZ1LT52YWx1ZSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisgIHUtPm5hbWUgPSBmaWVsZF9pZDsKKyAgZ3N0X3ZhbHVlX3VuaW9uICgmdS0+dmFsdWUsIHZhbCwgdmFsdWUpOworICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfY2Fwc19zdHJ1Y3R1cmVfc2ltcGxpZnkgKEdzdFN0cnVjdHVyZSAqKiByZXN1bHQsCisgICAgY29uc3QgR3N0U3RydWN0dXJlICogc2ltcGxpZnksIEdzdFN0cnVjdHVyZSAqIGNvbXBhcmUpCit7CisgIEdTTGlzdCAqbGlzdDsKKyAgVW5pb25GaWVsZCBmaWVsZCA9IHsgMCwgezAsfSwgTlVMTCB9OworCisgIC8qIHRyeSB0byBzdWJ0cmFjdCB0byBnZXQgYSByZWFsIHN1YnNldCAqLworICBpZiAoZ3N0X2NhcHNfc3RydWN0dXJlX3N1YnRyYWN0ICgmbGlzdCwgc2ltcGxpZnksIGNvbXBhcmUpKSB7CisgICAgaWYgKGxpc3QgPT0gTlVMTCkgeyAgICAgICAgIC8qIG5vIHJlc3VsdCAqLworICAgICAgKnJlc3VsdCA9IE5VTEw7CisgICAgICByZXR1cm4gVFJVRTsKKyAgICB9IGVsc2UgaWYgKGxpc3QtPm5leHQgPT0gTlVMTCkgeyAgICAvKiBvbmUgcmVzdWx0ICovCisgICAgICAqcmVzdWx0ID0gbGlzdC0+ZGF0YTsKKyAgICAgIGdfc2xpc3RfZnJlZSAobGlzdCk7CisgICAgICByZXR1cm4gVFJVRTsKKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyogbXVsdGlwbGUgcmVzdWx0cyAqLworICAgICAgZ19zbGlzdF9mb3JlYWNoIChsaXN0LCAoR0Z1bmMpIGdzdF9zdHJ1Y3R1cmVfZnJlZSwgTlVMTCk7CisgICAgICBnX3NsaXN0X2ZyZWUgKGxpc3QpOworICAgICAgbGlzdCA9IE5VTEw7CisgICAgfQorICB9CisKKyAgLyogdHJ5IHRvIHVuaW9uIGJvdGggc3RydWN0cyAqLworICBmaWVsZC5jb21wYXJlID0gY29tcGFyZTsKKyAgaWYgKGdzdF9zdHJ1Y3R1cmVfZm9yZWFjaCAoKEdzdFN0cnVjdHVyZSAqKSBzaW1wbGlmeSwKKyAgICAgICAgICBnc3RfY2Fwc19zdHJ1Y3R1cmVfZmlndXJlX291dF91bmlvbiwgJmZpZWxkKSkgeworICAgIGdib29sZWFuIHJldCA9IEZBTFNFOworCisgICAgLyogbm93IHdlIGtub3cgYWxsIG9mIHNpbXBsaWZ5J3MgZmllbGRzIGFyZSB0aGUgc2FtZSBpbiBjb21wYXJlCisgICAgICogYnV0IGF0IG1vc3Qgb25lIGZpZWxkOiBmaWVsZC5uYW1lICovCisgICAgaWYgKEdfSVNfVkFMVUUgKCZmaWVsZC52YWx1ZSkpIHsKKyAgICAgIGlmIChnc3Rfc3RydWN0dXJlX25fZmllbGRzIChzaW1wbGlmeSkgPT0gZ3N0X3N0cnVjdHVyZV9uX2ZpZWxkcyAoY29tcGFyZSkpIHsKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsdWUgKGNvbXBhcmUsIGZpZWxkLm5hbWUsICZmaWVsZC52YWx1ZSk7CisgICAgICAgICpyZXN1bHQgPSBOVUxMOworICAgICAgICByZXQgPSBUUlVFOworICAgICAgfQorICAgICAgZ192YWx1ZV91bnNldCAoJmZpZWxkLnZhbHVlKTsKKyAgICB9IGVsc2UgaWYgKGdzdF9zdHJ1Y3R1cmVfbl9maWVsZHMgKHNpbXBsaWZ5KSA8PQorICAgICAgICBnc3Rfc3RydWN0dXJlX25fZmllbGRzIChjb21wYXJlKSkgeworICAgICAgLyogY29tcGFyZSBpcyBqdXN0IG1vcmUgc3BlY2lmaWMsIHdpbGwgYmUgb3B0aW1pemVkIGF3YXkgbGF0ZXIgKi8KKyAgICAgIC8qIEZJWE1FOiBkbyB0aGlzIGhlcmU/ICovCisgICAgICBHU1RfTE9HICgiZm91bmQgYSBjYXNlIHRoYXQgd2lsbCBiZSBvcHRpbWl6ZWQgbGF0ZXIuIik7CisgICAgfSBlbHNlIHsKKyAgICAgIGdjaGFyICpvbmUgPSBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyAoc2ltcGxpZnkpOworICAgICAgZ2NoYXIgKnR3byA9IGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChjb21wYXJlKTsKKworICAgICAgR1NUX0VSUk9SCisgICAgICAgICAgKCJjYXBzIG1pc21hdGNoOiBzdHJ1Y3R1cmVzICVzIGFuZCAlcyBjbGFpbSB0byBiZSBwb3NzaWJsZSB0byB1bmlmeSwgYnV0IGFyZW4ndCIsCisgICAgICAgICAgb25lLCB0d28pOworICAgICAgZ19mcmVlIChvbmUpOworICAgICAgZ19mcmVlICh0d28pOworICAgIH0KKyAgICByZXR1cm4gcmV0OworICB9CisKKyAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2NhcHNfc3dpdGNoX3N0cnVjdHVyZXMgKEdzdENhcHMgKiBjYXBzLCBHc3RTdHJ1Y3R1cmUgKiBvbGQsCisgICAgR3N0U3RydWN0dXJlICogbmV3LCBnaW50IGkpCit7CisgIGdzdF9zdHJ1Y3R1cmVfc2V0X3BhcmVudF9yZWZjb3VudCAob2xkLCBOVUxMKTsKKyAgZ3N0X3N0cnVjdHVyZV9mcmVlIChvbGQpOworICBnc3Rfc3RydWN0dXJlX3NldF9wYXJlbnRfcmVmY291bnQgKG5ldywgJkdTVF9DQVBTX1JFRkNPVU5UIChjYXBzKSk7CisgIGdfcHRyX2FycmF5X2luZGV4IChHU1RfQ0FQU19BUlJBWSAoY2FwcyksIGkpID0gbmV3OworfQorCisvKioKKyAqIGdzdF9jYXBzX2RvX3NpbXBsaWZ5OgorICogQGNhcHM6IGEgI0dzdENhcHMgdG8gc2ltcGxpZnkKKyAqCisgKiBNb2RpZmllcyB0aGUgZ2l2ZW4gQGNhcHMgaW5wbGFjZSBpbnRvIGEgcmVwcmVzZW50YXRpb24gdGhhdCByZXByZXNlbnRzIHRoZQorICogc2FtZSBzZXQgb2YgZm9ybWF0cywgYnV0IGluIGEgc2ltcGxlciBmb3JtLiAgQ29tcG9uZW50IHN0cnVjdHVyZXMgdGhhdCBhcmUKKyAqIGlkZW50aWNhbCBhcmUgbWVyZ2VkLiAgQ29tcG9uZW50IHN0cnVjdHVyZXMgdGhhdCBoYXZlIHZhbHVlcyB0aGF0IGNhbiBiZQorICogbWVyZ2VkIGFyZSBhbHNvIG1lcmdlZC4KKyAqCisgKiBSZXR1cm5zOiBUUlVFLCBpZiB0aGUgY2FwcyBjb3VsZCBiZSBzaW1wbGlmaWVkCisgKi8KK2dib29sZWFuCitnc3RfY2Fwc19kb19zaW1wbGlmeSAoR3N0Q2FwcyAqIGNhcHMpCit7CisgIEdzdFN0cnVjdHVyZSAqc2ltcGxpZnksICpjb21wYXJlLCAqcmVzdWx0ID0gTlVMTDsKKyAgZ2ludCBpLCBqLCBzdGFydDsKKyAgZ2Jvb2xlYW4gY2hhbmdlZCA9IEZBTFNFOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChjYXBzICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKElTX1dSSVRBQkxFIChjYXBzKSwgRkFMU0UpOworCisgIGlmIChnc3RfY2Fwc19nZXRfc2l6ZSAoY2FwcykgPCAyKQorICAgIHJldHVybiBGQUxTRTsKKworICBnX3B0cl9hcnJheV9zb3J0IChHU1RfQ0FQU19BUlJBWSAoY2FwcyksIGdzdF9jYXBzX2NvbXBhcmVfc3RydWN0dXJlcyk7CisKKyAgc3RhcnQgPSBHU1RfQ0FQU19MRU4gKGNhcHMpIC0gMTsKKyAgZm9yIChpID0gR1NUX0NBUFNfTEVOIChjYXBzKSAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgc2ltcGxpZnkgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlX3VuY2hlY2tlZCAoY2FwcywgaSk7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWVfaWQgKHNpbXBsaWZ5KSAhPQorICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9uYW1lX2lkIChnc3RfY2Fwc19nZXRfc3RydWN0dXJlX3VuY2hlY2tlZCAoY2FwcywKKyAgICAgICAgICAgICAgICBzdGFydCkpKQorICAgICAgc3RhcnQgPSBpOworICAgIGZvciAoaiA9IHN0YXJ0OyBqID49IDA7IGotLSkgeworICAgICAgaWYgKGogPT0gaSkKKyAgICAgICAgY29udGludWU7CisgICAgICBjb21wYXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZV91bmNoZWNrZWQgKGNhcHMsIGopOworICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWVfaWQgKHNpbXBsaWZ5KSAhPQorICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWVfaWQgKGNvbXBhcmUpKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYgKGdzdF9jYXBzX3N0cnVjdHVyZV9zaW1wbGlmeSAoJnJlc3VsdCwgc2ltcGxpZnksIGNvbXBhcmUpKSB7CisgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgICBnc3RfY2Fwc19zd2l0Y2hfc3RydWN0dXJlcyAoY2Fwcywgc2ltcGxpZnksIHJlc3VsdCwgaSk7CisgICAgICAgICAgc2ltcGxpZnkgPSByZXN1bHQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgZ3N0X2NhcHNfcmVtb3ZlX3N0cnVjdHVyZSAoY2FwcywgaSk7CisgICAgICAgICAgc3RhcnQtLTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjaGFuZ2VkID0gVFJVRTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZiAoIWNoYW5nZWQpCisgICAgcmV0dXJuIEZBTFNFOworCisgIC8qIGdzdF9jYXBzX2RvX3NpbXBsaWZ5IChjYXBzKTsgKi8KKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qKgorICogZ3N0X2NhcHNfZml4YXRlOgorICogQGNhcHM6IGEgI0dzdENhcHMgdG8gZml4YXRlCisgKgorICogTW9kaWZpZXMgdGhlIGdpdmVuIEBjYXBzIGlucGxhY2UgaW50byBhIHJlcHJlc2VudGF0aW9uIHdpdGggb25seSBmaXhlZAorICogdmFsdWVzLiBGaXJzdCB0aGUgY2FwcyB3aWxsIGJlIHRydW5jYXRlZCBhbmQgdGhlbiB0aGUgZmlyc3Qgc3RydWN0dXJlIHdpbGwgYmUKKyAqIGZpeGF0ZWQgd2l0aCBnc3Rfc3RydWN0dXJlX2ZpeGF0ZSgpLiBAY2FwcyBzaG91bGQgYmUgd3JpdGFibGUuCisgKi8KK3ZvaWQKK2dzdF9jYXBzX2ZpeGF0ZSAoR3N0Q2FwcyAqIGNhcHMpCit7CisgIEdzdFN0cnVjdHVyZSAqczsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQ0FQUyAoY2FwcykpOworICBnX3JldHVybl9pZl9mYWlsIChJU19XUklUQUJMRSAoY2FwcykpOworCisgIC8qIGRlZmF1bHQgZml4YXRpb24gKi8KKyAgZ3N0X2NhcHNfdHJ1bmNhdGUgKGNhcHMpOworICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7CisgIGdzdF9zdHJ1Y3R1cmVfZml4YXRlIChzKTsKK30KKworLyogdXRpbGl0eSAqLworCisvKioKKyAqIGdzdF9jYXBzX3RvX3N0cmluZzoKKyAqIEBjYXBzOiBhICNHc3RDYXBzCisgKgorICogQ29udmVydHMgQGNhcHMgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uICBUaGlzIHN0cmluZyByZXByZXNlbnRhdGlvbgorICogY2FuIGJlIGNvbnZlcnRlZCBiYWNrIHRvIGEgI0dzdENhcHMgYnkgZ3N0X2NhcHNfZnJvbV9zdHJpbmcoKS4KKyAqCisgKiBGb3IgZGVidWdnaW5nIHB1cnBvc2VzIGl0cyBlYXNpZXIgdG8gZG8gc29tZXRoaW5nIGxpa2UgdGhpczoKKyAqIHxbCisgKiBHU1RfTE9HICgiY2FwcyBhcmUgJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOworICogXXwKKyAqIFRoaXMgcHJpbnRzIHRoZSBjYXBzIGluIGh1bWFuIHJlYWRibGUgZm9ybS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3bHkgYWxsb2NhdGVkIHN0cmluZyByZXByZXNlbnRpbmcgQGNhcHMuCisgKi8KK2djaGFyICoKK2dzdF9jYXBzX3RvX3N0cmluZyAoY29uc3QgR3N0Q2FwcyAqIGNhcHMpCit7CisgIGd1aW50IGksIHNsZW4sIGNsZW47CisgIEdTdHJpbmcgKnM7CisKKyAgLyogTk9URTogIFRoaXMgZnVuY3Rpb24gaXMgcG90ZW50aWFsbHkgY2FsbGVkIGJ5IHRoZSBkZWJ1ZyBzeXN0ZW0sCisgICAqIHNvIGFueSBjYWxscyB0byBnc3RfbG9nKCkgKGFuZCBHU1RfREVCVUcoKSwgR1NUX0xPRygpLCBldGMuKQorICAgKiBzaG91bGQgYmUgY2FyZWZ1bCB0byBhdm9pZCByZWN1cnNpb24uICBUaGlzIGluY2x1ZGVzIGFueSBmdW5jdGlvbnMKKyAgICogY2FsbGVkIGJ5IGdzdF9jYXBzX3RvX3N0cmluZy4gIEluIHBhcnRpY3VsYXIsIGNhbGxzIHNob3VsZAorICAgKiBub3QgdXNlIHRoZSBHU1RfUFRSX0ZPUk1BVCBleHRlbnNpb24uICAqLworCisgIGlmIChjYXBzID09IE5VTEwpIHsKKyAgICByZXR1cm4gZ19zdHJkdXAgKCJOVUxMIik7CisgIH0KKyAgaWYgKENBUFNfSVNfQU5ZIChjYXBzKSkgeworICAgIHJldHVybiBnX3N0cmR1cCAoIkFOWSIpOworICB9CisgIGlmIChDQVBTX0lTX0VNUFRZX1NJTVBMRSAoY2FwcykpIHsKKyAgICByZXR1cm4gZ19zdHJkdXAgKCJFTVBUWSIpOworICB9CisKKyAgLyogZXN0aW1hdGUgYSByb3VnaCBzdHJpbmcgbGVuZ3RoIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHJlYWxsb2NzIGluIEdTdHJpbmcgKi8KKyAgc2xlbiA9IDA7CisgIGNsZW4gPSBHU1RfQ0FQU19MRU4gKGNhcHMpOworICBmb3IgKGkgPSAwOyBpIDwgY2xlbjsgaSsrKSB7CisgICAgc2xlbiArPQorICAgICAgICBTVFJVQ1RVUkVfRVNUSU1BVEVEX1NUUklOR19MRU4gKGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzLAorICAgICAgICAgICAgaSkpOworICB9CisKKyAgcyA9IGdfc3RyaW5nX3NpemVkX25ldyAoc2xlbik7CisgIGZvciAoaSA9IDA7IGkgPCBjbGVuOyBpKyspIHsKKyAgICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICAgIGlmIChpID4gMCkgeworICAgICAgLyogJzsnIGlzIG5vdyBhZGRlZCBieSBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyAqLworICAgICAgZ19zdHJpbmdfYXBwZW5kX2MgKHMsICcgJyk7CisgICAgfQorCisgICAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZV91bmNoZWNrZWQgKGNhcHMsIGkpOworICAgIHByaXZfZ3N0X3N0cnVjdHVyZV9hcHBlbmRfdG9fZ3N0cmluZyAoc3RydWN0dXJlLCBzKTsKKyAgfQorICBpZiAocy0+bGVuICYmIHMtPnN0cltzLT5sZW4gLSAxXSA9PSAnOycpIHsKKyAgICAvKiByZW1vdmUgbGF0ZXN0ICc7JyAqLworICAgIHMtPnN0clstLXMtPmxlbl0gPSAnXDAnOworICB9CisgIHJldHVybiBnX3N0cmluZ19mcmVlIChzLCBGQUxTRSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2NhcHNfZnJvbV9zdHJpbmdfaW5wbGFjZSAoR3N0Q2FwcyAqIGNhcHMsIGNvbnN0IGdjaGFyICogc3RyaW5nKQoreworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKyAgZ2NoYXIgKnM7CisKKyAgaWYgKHN0cmNtcCAoIkFOWSIsIHN0cmluZykgPT0gMCkgeworICAgIEdTVF9DQVBTX0ZMQUdTIChjYXBzKSA9IEdTVF9DQVBTX0ZMQUdTX0FOWTsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorICBpZiAoc3RyY21wICgiRU1QVFkiLCBzdHJpbmcpID09IDApIHsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorCisgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKHN0cmluZywgJnMpOworICBpZiAoc3RydWN0dXJlID09IE5VTEwpIHsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKyAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZV91bmNoZWNrZWQgKGNhcHMsIHN0cnVjdHVyZSk7CisKKyAgZG8geworCisgICAgd2hpbGUgKGdfYXNjaWlfaXNzcGFjZSAoKnMpKQorICAgICAgcysrOworICAgIGlmICgqcyA9PSAnXDAnKSB7CisgICAgICBicmVhazsKKyAgICB9CisgICAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAocywgJnMpOworICAgIGlmIChzdHJ1Y3R1cmUgPT0gTlVMTCkgeworICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlX3VuY2hlY2tlZCAoY2Fwcywgc3RydWN0dXJlKTsKKworICB9IHdoaWxlIChUUlVFKTsKKworICByZXR1cm4gVFJVRTsKK30KKworLyoqCisgKiBnc3RfY2Fwc19mcm9tX3N0cmluZzoKKyAqIEBzdHJpbmc6IGEgc3RyaW5nIHRvIGNvbnZlcnQgdG8gI0dzdENhcHMKKyAqCisgKiBDb252ZXJ0cyBAY2FwcyBmcm9tIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXdseSBhbGxvY2F0ZWQgI0dzdENhcHMKKyAqLworR3N0Q2FwcyAqCitnc3RfY2Fwc19mcm9tX3N0cmluZyAoY29uc3QgZ2NoYXIgKiBzdHJpbmcpCit7CisgIEdzdENhcHMgKmNhcHM7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0cmluZywgRkFMU0UpOworCisgIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7CisgIGlmIChnc3RfY2Fwc19mcm9tX3N0cmluZ19pbnBsYWNlIChjYXBzLCBzdHJpbmcpKSB7CisgICAgcmV0dXJuIGNhcHM7CisgIH0gZWxzZSB7CisgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOworICAgIHJldHVybiBOVUxMOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfY2Fwc190cmFuc2Zvcm1fdG9fc3RyaW5nIChjb25zdCBHVmFsdWUgKiBzcmNfdmFsdWUsIEdWYWx1ZSAqIGRlc3RfdmFsdWUpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHNyY192YWx1ZSkpOworICBnX3JldHVybl9pZl9mYWlsIChHX0lTX1ZBTFVFIChkZXN0X3ZhbHVlKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdfVkFMVUVfSE9MRFMgKHNyY192YWx1ZSwgR1NUX1RZUEVfQ0FQUykpOworICBnX3JldHVybl9pZl9mYWlsIChHX1ZBTFVFX0hPTERTIChkZXN0X3ZhbHVlLCBHX1RZUEVfU1RSSU5HKQorICAgICAgfHwgR19WQUxVRV9IT0xEUyAoZGVzdF92YWx1ZSwgR19UWVBFX1BPSU5URVIpKTsKKworICBnX3ZhbHVlX3Rha2Vfc3RyaW5nIChkZXN0X3ZhbHVlLAorICAgICAgZ3N0X2NhcHNfdG9fc3RyaW5nIChnc3RfdmFsdWVfZ2V0X2NhcHMgKHNyY192YWx1ZSkpKTsKK30KZGlmZiAtLWdpdCBhL2dzdC9nc3RjYXBzLmggYi9nc3QvZ3N0Y2Fwcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2N2Y3YjgKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0Y2Fwcy5oCkBAIC0wLDAgKzEsNDE5IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwMyBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fR1NUX0NBUFNfSF9fCisjZGVmaW5lIF9fR1NUX0NBUFNfSF9fCisKKyNpbmNsdWRlIDxnc3QvZ3N0Y29uZmlnLmg+CisjaW5jbHVkZSA8Z3N0L2dzdG1pbmlvYmplY3QuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0c3RydWN0dXJlLmg+CisjaW5jbHVkZSA8Z3N0L2dsaWItY29tcGF0Lmg+CisKK0dfQkVHSU5fREVDTFMKKworZXh0ZXJuIEdUeXBlIF9nc3RfY2Fwc190eXBlOworCisjZGVmaW5lIEdTVF9UWVBFX0NBUFMgICAgICAgICAgICAgKF9nc3RfY2Fwc190eXBlKQorI2RlZmluZSBHU1RfSVNfQ0FQUyhvYmopICAgICAgICAgIChHU1RfSVNfTUlOSV9PQkpFQ1RfVFlQRSgob2JqKSwgR1NUX1RZUEVfQ0FQUykpCisjZGVmaW5lIEdTVF9DQVBTX0NBU1Qob2JqKSAgICAgICAgKChHc3RDYXBzKikob2JqKSkKKyNkZWZpbmUgR1NUX0NBUFMob2JqKSAgICAgICAgICAgICAoR1NUX0NBUFNfQ0FTVChvYmopKQorCisjZGVmaW5lIEdTVF9UWVBFX1NUQVRJQ19DQVBTICAgICAgKGdzdF9zdGF0aWNfY2Fwc19nZXRfdHlwZSgpKQorCisvKioKKyAqIEdzdENhcHNGbGFnczoKKyAqIEBHU1RfQ0FQU19GTEFHU19BTlk6IENhcHMgaGFzIG5vIHNwZWNpZmljIGNvbnRlbnQsIGJ1dCBjYW4gY29udGFpbgorICogICAgYW55dGhpbmcuCisgKgorICogRXh0cmEgZmxhZ3MgZm9yIGEgY2Fwcy4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgR1NUX0NBUFNfRkxBR1NfQU5ZCT0gKEdTVF9NSU5JX09CSkVDVF9GTEFHX0xBU1QgPDwgMCkKK30gR3N0Q2Fwc0ZsYWdzOworCisvKioKKyAqIEdzdENhcHNJbnRlcnNlY3RNb2RlOgorICogQEdTVF9DQVBTX0lOVEVSU0VDVF9aSUdfWkFHICA6IFppZy16YWdzIG92ZXIgYm90aCBjYXBzLgorICogQEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCAgICA6IEtlZXBzIHRoZSBmaXJzdCBjYXBzIG9yZGVyLgorICoKKyAqIE1vZGVzIG9mIGNhcHMgaW50ZXJzZWN0aW9uCisgKgorICogQEdTVF9DQVBTX0lOVEVSU0VDVF9aSUdfWkFHIHRyaWVzIHRvIHByZXNlcnZlIG92ZXJhbGwgb3JkZXIgb2YgYm90aCBjYXBzCisgKiBieSBpdGVyYXRpbmcgb24gdGhlIGNhcHMnIHN0cnVjdHVyZXMgYXMgdGhlIGZvbGxvd2luZyBtYXRyaXggc2hvd3M6CisgKiB8WworICogICAgICAgICAgY2FwczEKKyAqICAgICAgICstLS0tLS0tLS0tLS0tCisgKiAgICAgICB8IDEgIDIgIDQgIDcKKyAqIGNhcHMyIHwgMyAgNSAgOCAxMAorICogICAgICAgfCA2ICA5IDExIDEyCisgKiBdfAorICogVXNlZCB3aGVuIHRoZXJlIGlzIG5vIGV4cGxpY2l0IHByZWNlZGVuY2Ugb2Ygb25lIGNhcHMgb3ZlciB0aGUgb3RoZXIuIGUuZy4KKyAqIHRlZSdzIHNpbmsgcGFkIGdldGNhcHMgZnVuY3Rpb24sIGl0IHdpbGwgcHJvYmUgaXRzIHNyYyBwYWQgcGVlcnMnIGZvciB0aGVpcgorICogY2FwcyBhbmQgaW50ZXJzZWN0IHRoZW0gd2l0aCB0aGlzIG1vZGUuCisgKgorICogQEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCBpcyB1c2VmdWwgd2hlbiBhbiBlbGVtZW50IHdhbnRzIHRvIHByZXNlcnZlCisgKiBhbm90aGVyIGVsZW1lbnQncyBjYXBzIHByaW9yaXR5IG9yZGVyIHdoZW4gaW50ZXJzZWN0aW5nIHdpdGggaXRzIG93biBjYXBzLgorICogRXhhbXBsZTogSWYgY2FwczEgaXMgW0EsIEIsIENdIGFuZCBjYXBzMiBpcyBbRSwgQiwgRCwgQV0sIHRoZSByZXN1bHQKKyAqIHdvdWxkIGJlIFtBLCBCXSwgbWFpbnRhaW5pbmcgdGhlIGZpcnN0IGNhcHMgcHJpb3JpdHkgb24gdGhlIGludGVyc2VjdGlvbi4KKyAqCisgKiBTaW5jZTogMC4xMC4zMworICovCit0eXBlZGVmIGVudW0geworICBHU1RfQ0FQU19JTlRFUlNFQ1RfWklHX1pBRyAgICAgICAgICAgID0gIDAsCisgIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCAgICAgICAgICAgICAgPSAgMQorfSBHc3RDYXBzSW50ZXJzZWN0TW9kZTsKKworLyoqCisgKiBHU1RfQ0FQU19BTlk6CisgKgorICogTWVhbnMgdGhhdCB0aGUgZWxlbWVudC9wYWQgY2FuIG91dHB1dCAnYW55dGhpbmcnLiBVc2VmdWwgZm9yIGVsZW1lbnRzCisgKiB0aGF0IG91dHB1dCB1bmtub3duIG1lZGlhLCBzdWNoIGFzIGZpbGVzcmMuCisgKi8KKyNkZWZpbmUgR1NUX0NBUFNfQU5ZICAgICAgICAgICAgICBnc3RfY2Fwc19uZXdfYW55KCkKKy8qKgorICogR1NUX0NBUFNfTk9ORToKKyAqCisgKiBUaGUgb3Bwb3NpdGUgb2YgJUdTVF9DQVBTX0FOWTogaXQgbWVhbnMgdGhhdCB0aGUgcGFkL2VsZW1lbnQgb3V0cHV0cyBhbgorICogdW5kZWZpbmVkIG1lZGlhIHR5cGUgdGhhdCBjYW4gbm90IGJlIGRldGVjdGVkLgorICovCisjZGVmaW5lIEdTVF9DQVBTX05PTkUgICAgICAgICAgICAgZ3N0X2NhcHNfbmV3X2VtcHR5KCkKKworLyoqCisgKiBHU1RfU1RBVElDX0NBUFNfQU5ZOgorICoKKyAqIENyZWF0ZXMgYSBuZXcgI0dzdENhcHMgc3RhdGljIGNhcHMgdGhhdCBtYXRjaGVzIGFueXRoaW5nLgorICogVGhpcyBjYW4gYmUgdXNlZCBpbiBwYWQgdGVtcGxhdGVzLgorICovCisjZGVmaW5lIEdTVF9TVEFUSUNfQ0FQU19BTlkgICAgICAgR1NUX1NUQVRJQ19DQVBTKCJBTlkiKQorLyoqCisgKiBHU1RfU1RBVElDX0NBUFNfTk9ORToKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNHc3RDYXBzIHN0YXRpYyBjYXBzIHRoYXQgbWF0Y2hlcyBub3RoaW5nLgorICogVGhpcyBjYW4gYmUgdXNlZCBpbiBwYWQgdGVtcGxhdGVzLgorICovCisjZGVmaW5lIEdTVF9TVEFUSUNfQ0FQU19OT05FICAgICAgR1NUX1NUQVRJQ19DQVBTKCJOT05FIikKKworLyoqCisgKiBHU1RfQ0FQU19JU19TSU1QTEU6CisgKiBAY2FwczogdGhlICNHc3RDYXBzIGluc3RhbmNlIHRvIGNoZWNrCisgKgorICogQ29udmVuaWVuY2UgbWFjcm8gdGhhdCBjaGVja3MgaWYgdGhlIG51bWJlciBvZiBzdHJ1Y3R1cmVzIGluIHRoZSBnaXZlbiBjYXBzCisgKiBpcyBleGFjdGx5IG9uZS4KKyAqLworI2RlZmluZSBHU1RfQ0FQU19JU19TSU1QTEUoY2FwcykgKGdzdF9jYXBzX2dldF9zaXplKGNhcHMpID09IDEpCisKKy8qKgorICogR1NUX1NUQVRJQ19DQVBTOgorICogQHN0cmluZzogdGhlIHN0cmluZyBkZXNjcmliaW5nIHRoZSBjYXBzCisgKgorICogQ3JlYXRlcyBhIG5ldyAjR3N0Q2FwcyBzdGF0aWMgY2FwcyBmcm9tIGFuIGlucHV0IHN0cmluZy4KKyAqIFRoaXMgY2FuIGJlIHVzZWQgaW4gcGFkIHRlbXBsYXRlcy4KKyAqLworI2RlZmluZSBHU1RfU1RBVElDX0NBUFMoc3RyaW5nKSBcCit7IFwKKyAgLyogbWluaW9iamVjdCAqLyB7IHsgMCwgMCwgMCwgMCwgTlVMTCwgTlVMTCwgTlVMTCB9LCBcCisgIC8qIGNhcHMgKi8gTlVMTCB9LCBcCisgIC8qIHN0cmluZyAqLyBzdHJpbmcsIFwKKyAgR1NUX1BBRERJTkdfSU5JVCBcCit9CisKK3R5cGVkZWYgc3RydWN0IF9Hc3RDYXBzIEdzdENhcHM7Cit0eXBlZGVmIHN0cnVjdCBfR3N0U3RhdGljQ2FwcyBHc3RTdGF0aWNDYXBzOworCisvKioKKyAqIEdTVF9DQVBTX0ZMQUdTOgorICogQGNhcHM6IGEgI0dzdENhcHMuCisgKgorICogQSBmbGFncyB3b3JkIGNvbnRhaW5pbmcgI0dzdENhcHNGbGFncyBmbGFncyBzZXQgb24gdGhpcyBjYXBzLgorICovCisjZGVmaW5lIEdTVF9DQVBTX0ZMQUdTKGNhcHMpICAgICAgICAgICAgICAgICAgICBHU1RfTUlOSV9PQkpFQ1RfRkxBR1MoY2FwcykKKworLyogcmVmY291bnQgKi8KKy8qKgorICogR1NUX0NBUFNfUkVGQ09VTlQ6CisgKiBAY2FwczogYSAjR3N0Q2FwcworICoKKyAqIEdldCBhY2Nlc3MgdG8gdGhlIHJlZmVyZW5jZSBjb3VudCBmaWVsZCBvZiB0aGUgY2FwcworICovCisjZGVmaW5lIEdTVF9DQVBTX1JFRkNPVU5UKGNhcHMpICAgICAgICAgICAgICAgICBHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlQoY2FwcykKKy8qKgorICogR1NUX0NBUFNfUkVGQ09VTlRfVkFMVUU6CisgKiBAY2FwczogYSAjR3N0Q2FwcworICoKKyAqIEdldCB0aGUgcmVmZXJlbmNlIGNvdW50IHZhbHVlIG9mIHRoZSBjYXBzLgorICovCisjZGVmaW5lIEdTVF9DQVBTX1JFRkNPVU5UX1ZBTFVFKGNhcHMpICAgICAgICAgICBHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUoY2FwcykKKworLyoqCisgKiBHU1RfQ0FQU19GTEFHX0lTX1NFVDoKKyAqIEBjYXBzOiBhICNHc3RDYXBzLgorICogQGZsYWc6IHRoZSAjR3N0Q2Fwc0ZsYWdzIHRvIGNoZWNrLgorICoKKyAqIEdpdmVzIHRoZSBzdGF0dXMgb2YgYSBzcGVjaWZpYyBmbGFnIG9uIGEgY2Fwcy4KKyAqLworI2RlZmluZSBHU1RfQ0FQU19GTEFHX0lTX1NFVChjYXBzLGZsYWcpICAgICAgICBHU1RfTUlOSV9PQkpFQ1RfRkxBR19JU19TRVQgKGNhcHMsIGZsYWcpCisvKioKKyAqIEdTVF9DQVBTX0ZMQUdfU0VUOgorICogQGNhcHM6IGEgI0dzdENhcHMuCisgKiBAZmxhZzogdGhlICNHc3RDYXBzRmxhZ3MgdG8gc2V0LgorICoKKyAqIFNldHMgYSBjYXBzIGZsYWcgb24gYSBjYXBzLgorICovCisjZGVmaW5lIEdTVF9DQVBTX0ZMQUdfU0VUKGNhcHMsZmxhZykgICAgICAgICAgIEdTVF9NSU5JX09CSkVDVF9GTEFHX1NFVCAoY2FwcywgZmxhZykKKy8qKgorICogR1NUX0NBUFNfRkxBR19VTlNFVDoKKyAqIEBjYXBzOiBhICNHc3RDYXBzLgorICogQGZsYWc6IHRoZSAjR3N0Q2Fwc0ZsYWdzIHRvIGNsZWFyLgorICoKKyAqIENsZWFycyBhIGNhcHMgZmxhZy4KKyAqLworI2RlZmluZSBHU1RfQ0FQU19GTEFHX1VOU0VUKGNhcHMsZmxhZykgICAgICAgICBHU1RfTUlOSV9PQkpFQ1RfRkxBR19VTlNFVCAoY2FwcywgZmxhZykKKworLyogcmVmY291bnRpbmcgKi8KKy8qKgorICogZ3N0X2NhcHNfcmVmOgorICogQGNhcHM6IHRoZSAjR3N0Q2FwcyB0byByZWZlcmVuY2UKKyAqCisgKiBBZGQgYSByZWZlcmVuY2UgdG8gYSAjR3N0Q2FwcyBvYmplY3QuCisgKgorICogRnJvbSB0aGlzIHBvaW50IG9uLCB1bnRpbCB0aGUgY2FsbGVyIGNhbGxzIGdzdF9jYXBzX3VucmVmKCkgb3IKKyAqIGdzdF9jYXBzX21ha2Vfd3JpdGFibGUoKSwgaXQgaXMgZ3VhcmFudGVlZCB0aGF0IHRoZSBjYXBzIG9iamVjdCB3aWxsIG5vdAorICogY2hhbmdlLiBUaGlzIG1lYW5zIGl0cyBzdHJ1Y3R1cmVzIHdvbid0IGNoYW5nZSwgZXRjLiBUbyB1c2UgYSAjR3N0Q2FwcworICogb2JqZWN0LCB5b3UgbXVzdCBhbHdheXMgaGF2ZSBhIHJlZmNvdW50IG9uIGl0IC0tIGVpdGhlciB0aGUgb25lIG1hZGUKKyAqIGltcGxpY2l0bHkgYnkgZS5nLiBnc3RfY2Fwc19uZXdfc2ltcGxlKCksIG9yIHZpYSB0YWtpbmcgb25lIGV4cGxpY2l0bHkgd2l0aAorICogdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBSZXR1cm5zOiB0aGUgc2FtZSAjR3N0Q2FwcyBvYmplY3QuCisgKi8KKyNpZmRlZiBfRk9PTF9HVEtfRE9DXworR19JTkxJTkVfRlVOQyBHc3RDYXBzICogZ3N0X2NhcHNfcmVmIChHc3RDYXBzICogY2Fwcyk7CisjZW5kaWYKKworc3RhdGljIGlubGluZSBHc3RDYXBzICoKK2dzdF9jYXBzX3JlZiAoR3N0Q2FwcyAqIGNhcHMpCit7CisgIHJldHVybiAoR3N0Q2FwcyAqKSBnc3RfbWluaV9vYmplY3RfcmVmIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoY2FwcykpOworfQorCisvKioKKyAqIGdzdF9jYXBzX3VucmVmOgorICogQGNhcHM6IGEgI0dzdENhcHMuCisgKgorICogVW5yZWYgYSAjR3N0Q2FwcyBhbmQgYW5kIGZyZWUgYWxsIGl0cyBzdHJ1Y3R1cmVzIGFuZCB0aGUKKyAqIHN0cnVjdHVyZXMnIHZhbHVlcyB3aGVuIHRoZSByZWZjb3VudCByZWFjaGVzIDAuCisgKi8KKyNpZmRlZiBfRk9PTF9HVEtfRE9DXworR19JTkxJTkVfRlVOQyB2b2lkIGdzdF9jYXBzX3VucmVmIChHc3RDYXBzICogY2Fwcyk7CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkCitnc3RfY2Fwc191bnJlZiAoR3N0Q2FwcyAqIGNhcHMpCit7CisgIGdzdF9taW5pX29iamVjdF91bnJlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGNhcHMpKTsKK30KKworLyogY29weSBjYXBzICovCisvKioKKyAqIGdzdF9jYXBzX2NvcHk6CisgKiBAY2FwczogYSAjR3N0Q2Fwcy4KKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNHc3RDYXBzIGFzIGEgY29weSBvZiB0aGUgb2xkIEBjYXBzLiBUaGUgbmV3IGNhcHMgd2lsbCBoYXZlIGEKKyAqIHJlZmNvdW50IG9mIDEsIG93bmVkIGJ5IHRoZSBjYWxsZXIuIFRoZSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgYXMgd2VsbC4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB0aGUgc2VtYW50aWMgZXF1aXZhbGVudCBvZiBhIGdzdF9jYXBzX3JlZigpCisgKiBmb2xsb3dlZCBieSBhIGdzdF9jYXBzX21ha2Vfd3JpdGFibGUoKS4gSWYgeW91IG9ubHkgd2FudCB0byBob2xkIG9uIHRvIGEKKyAqIHJlZmVyZW5jZSB0byB0aGUgZGF0YSwgeW91IHNob3VsZCB1c2UgZ3N0X2NhcHNfcmVmKCkuCisgKgorICogV2hlbiB5b3UgYXJlIGZpbmlzaGVkIHdpdGggdGhlIGNhcHMsIGNhbGwgZ3N0X2NhcHNfdW5yZWYoKSBvbiBpdC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbmV3ICNHc3RDYXBzCisgKi8KKyNpZmRlZiBfRk9PTF9HVEtfRE9DXworR19JTkxJTkVfRlVOQyBHc3RDYXBzICogZ3N0X2NhcHNfY29weSAoY29uc3QgR3N0Q2FwcyAqIGNhcHMpOworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgR3N0Q2FwcyAqCitnc3RfY2Fwc19jb3B5IChjb25zdCBHc3RDYXBzICogY2FwcykKK3sKKyAgcmV0dXJuIEdTVF9DQVBTIChnc3RfbWluaV9vYmplY3RfY29weSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGNhcHMpKSk7Cit9CisKKy8qKgorICogZ3N0X2NhcHNfaXNfd3JpdGFibGU6CisgKiBAY2FwczogYSAjR3N0Q2FwcworICoKKyAqIFRlc3RzIGlmIHlvdSBjYW4gc2FmZWx5IG1vZGlmeSBAY2Fwcy4gSXQgaXMgb25seSBzYWZlIHRvIG1vZGlmeSBjYXBzIHdoZW4KKyAqIHRoZXJlIGlzIG9ubHkgb25lIG93bmVyIG9mIHRoZSBjYXBzIC0gaWUsIHRoZSByZWZjb3VudCBpcyAxLgorICovCisjZGVmaW5lICAgICAgICAgZ3N0X2NhcHNfaXNfd3JpdGFibGUoY2FwcykgICAgIGdzdF9taW5pX29iamVjdF9pc193cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGNhcHMpKQorCisvKioKKyAqIGdzdF9jYXBzX21ha2Vfd3JpdGFibGU6CisgKiBAY2FwczogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RDYXBzCisgKgorICogUmV0dXJucyBhIHdyaXRhYmxlIGNvcHkgb2YgQGNhcHMuCisgKgorICogSWYgdGhlcmUgaXMgb25seSBvbmUgcmVmZXJlbmNlIGNvdW50IG9uIEBjYXBzLCB0aGUgY2FsbGVyIG11c3QgYmUgdGhlIG93bmVyLAorICogYW5kIHNvIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIGNhcHMgb2JqZWN0IHVuY2hhbmdlZC4gSWYgb24gdGhlIG90aGVyCisgKiBoYW5kIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcmVmZXJlbmNlIG9uIHRoZSBvYmplY3QsIGEgbmV3IGNhcHMgb2JqZWN0IHdpbGwKKyAqIGJlIHJldHVybmVkLiBUaGUgY2FsbGVyJ3MgcmVmZXJlbmNlIG9uIEBjYXBzIHdpbGwgYmUgcmVtb3ZlZCwgYW5kIGluc3RlYWQgdGhlCisgKiBjYWxsZXIgd2lsbCBvd24gYSByZWZlcmVuY2UgdG8gdGhlIHJldHVybmVkIG9iamVjdC4KKyAqCisgKiBJbiBzaG9ydCwgdGhpcyBmdW5jdGlvbiB1bnJlZnMgdGhlIGNhcHMgaW4gdGhlIGFyZ3VtZW50IGFuZCByZWZzIHRoZSBjYXBzCisgKiB0aGF0IGl0IHJldHVybnMuIERvbid0IGFjY2VzcyB0aGUgYXJndW1lbnQgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiBTZWUKKyAqIGFsc286IGdzdF9jYXBzX3JlZigpLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSB3cml0YWJsZSBjYXBzIHdoaWNoIG1heSBvciBtYXkgbm90IGJlIHRoZQorICogICAgIHNhbWUgYXMgQGNhcHMKKyAqLworI2RlZmluZSAgICAgICAgIGdzdF9jYXBzX21ha2Vfd3JpdGFibGUoY2FwcykgICBHU1RfQ0FQU19DQVNUIChnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGNhcHMpKSkKKworLyoqCisgKiBnc3RfY2Fwc19yZXBsYWNlOgorICogQG9jYXBzOiAoaW5vdXQpICh0cmFuc2ZlciBmdWxsKTogcG9pbnRlciB0byBhIHBvaW50ZXIgdG8gYSAjR3N0Q2FwcyB0byBiZQorICogICAgIHJlcGxhY2VkLgorICogQG5jYXBzOiAodHJhbnNmZXIgbm9uZSkgKGFsbG93LW5vbmUpOiBwb2ludGVyIHRvIGEgI0dzdENhcHMgdGhhdCB3aWxsCisgKiAgICAgcmVwbGFjZSB0aGUgY2FwcyBwb2ludGVkIHRvIGJ5IEBvY2Fwcy4KKyAqCisgKiBNb2RpZmllcyBhIHBvaW50ZXIgdG8gYSAjR3N0Q2FwcyB0byBwb2ludCB0byBhIGRpZmZlcmVudCAjR3N0Q2Fwcy4gVGhlCisgKiBtb2RpZmljYXRpb24gaXMgZG9uZSBhdG9taWNhbGx5IChzbyB0aGlzIGlzIHVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhyZWFkIHNhZmV0eQorICogaW4gc29tZSBjYXNlcyksIGFuZCB0aGUgcmVmZXJlbmNlIGNvdW50cyBhcmUgdXBkYXRlZCBhcHByb3ByaWF0ZWx5ICh0aGUgb2xkCisgKiBjYXBzIGlzIHVucmVmZmVkLCB0aGUgbmV3IGlzIHJlZmZlZCkuCisgKgorICogRWl0aGVyIEBuY2FwcyBvciB0aGUgI0dzdENhcHMgcG9pbnRlZCB0byBieSBAb2NhcHMgbWF5IGJlIE5VTEwuCisgKi8KKyNkZWZpbmUgICAgICAgICBnc3RfY2Fwc19yZXBsYWNlKG9jYXBzLG5jYXBzKSBcCitHX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEdzdENhcHMgKipfX19vY2Fwc2FkZHIgPSAoR3N0Q2FwcyAqKikob2NhcHMpOyAgICAgICAgIFwKKyAgZ3N0X21pbmlfb2JqZWN0X3JlcGxhY2UgKChHc3RNaW5pT2JqZWN0ICoqKV9fX29jYXBzYWRkciwgXAorICAgICAgR1NUX01JTklfT0JKRUNUX0NBU1QgKG5jYXBzKSk7ICAgICAgICAgICAgICAgICAgICAgICBcCit9IEdfU1RNVF9FTkQKKworLyoqCisgKiBHc3RDYXBzOgorICogQG1pbmlfb2JqZWN0OiB0aGUgcGFyZW50IHR5cGUKKyAqCisgKiBPYmplY3QgZGVzY3JpYmluZyBtZWRpYSB0eXBlcy4KKyAqLworc3RydWN0IF9Hc3RDYXBzIHsKKyAgR3N0TWluaU9iamVjdCBtaW5pX29iamVjdDsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgZ3BvaW50ZXIgICAgIHByaXY7Cit9OworCisvKioKKyAqIEdzdFN0YXRpY0NhcHM6CisgKiBAY2FwczogdGhlIGNhY2hlZCAjR3N0Q2FwcworICogQHN0cmluZzogYSBzdHJpbmcgZGVzY3JpYmluZyBhIGNhcHMKKyAqCisgKiBEYXRhc3RydWN0dXJlIHRvIGluaXRpYWxpemUgI0dzdENhcHMgZnJvbSBhIHN0cmluZyBkZXNjcmlwdGlvbiB1c3VhbGx5CisgKiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggR1NUX1NUQVRJQ19DQVBTKCkgYW5kIGdzdF9zdGF0aWNfY2Fwc19nZXQoKSB0bworICogaW5zdGFudGlhdGUgYSAjR3N0Q2Fwcy4KKyAqLworc3RydWN0IF9Hc3RTdGF0aWNDYXBzIHsKKyAgLyo8IHB1YmxpYyA+Ki8KKyAgR3N0Q2FwcyBjYXBzOworICBjb25zdCBjaGFyICpzdHJpbmc7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOworfTsKKworR1R5cGUgICAgICAgICAgICAgZ3N0X2NhcHNfZ2V0X3R5cGUgICAgICAgICAgICAgICAgKHZvaWQpOworCitHc3RDYXBzICogICAgICAgICBnc3RfY2Fwc19uZXdfZW1wdHkgICAgICAgICAgICAgICAodm9pZCk7CitHc3RDYXBzICogICAgICAgICBnc3RfY2Fwc19uZXdfYW55ICAgICAgICAgICAgICAgICAodm9pZCk7CitHc3RDYXBzICogICAgICAgICBnc3RfY2Fwc19uZXdfc2ltcGxlICAgICAgICAgICAgICAoY29uc3QgY2hhciAgICAqbWVkaWFfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICpmaWVsZG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKK0dzdENhcHMgKiAgICAgICAgIGdzdF9jYXBzX25ld19mdWxsICAgICAgICAgICAgICAgIChHc3RTdHJ1Y3R1cmUgICpzdHJ1Y3QxLCAuLi4pOworR3N0Q2FwcyAqICAgICAgICAgZ3N0X2NhcHNfbmV3X2Z1bGxfdmFsaXN0ICAgICAgICAgKEdzdFN0cnVjdHVyZSAgKnN0cnVjdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0ICAgICAgICB2YXJfYXJncyk7CisKK0dUeXBlICAgICAgICAgICAgIGdzdF9zdGF0aWNfY2Fwc19nZXRfdHlwZSAgICAgICAgICh2b2lkKTsKK0dzdENhcHMgKiAgICAgICAgIGdzdF9zdGF0aWNfY2Fwc19nZXQgICAgICAgICAgICAgIChHc3RTdGF0aWNDYXBzICpzdGF0aWNfY2Fwcyk7Cit2b2lkICAgICAgICAgICAgICBnc3Rfc3RhdGljX2NhcHNfY2xlYW51cCAgICAgICAgICAoR3N0U3RhdGljQ2FwcyAqc3RhdGljX2NhcHMpOworCisvKiBtYW5pcHVsYXRpb24gKi8KK3ZvaWQgICAgICAgICAgICAgIGdzdF9jYXBzX2FwcGVuZCAgICAgICAgICAgICAgICAgIChHc3RDYXBzICAgICAgICpjYXBzMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzICAgICAgICpjYXBzMik7Cit2b2lkICAgICAgICAgICAgICBnc3RfY2Fwc19tZXJnZSAgICAgICAgICAgICAgICAgICAoR3N0Q2FwcyAgICAgICAqY2FwczEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2FwcyAgICAgICAqY2FwczIpOwordm9pZCAgICAgICAgICAgICAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZSAgICAgICAgKEdzdENhcHMgICAgICAgKmNhcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U3RydWN0dXJlICAqc3RydWN0dXJlKTsKK3ZvaWQgICAgICAgICAgICAgIGdzdF9jYXBzX3JlbW92ZV9zdHJ1Y3R1cmUgICAgICAgIChHc3RDYXBzICAgICAgICpjYXBzLCBndWludCBpZHgpOwordm9pZCAgICAgICAgICAgICAgZ3N0X2NhcHNfbWVyZ2Vfc3RydWN0dXJlICAgICAgICAgKEdzdENhcHMgICAgICAgKmNhcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U3RydWN0dXJlICAqc3RydWN0dXJlKTsKK2d1aW50ICAgICAgICAgICAgIGdzdF9jYXBzX2dldF9zaXplICAgICAgICAgICAgICAgIChjb25zdCBHc3RDYXBzICpjYXBzKTsKK0dzdFN0cnVjdHVyZSAqICAgIGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgICAgICAgICAgIChjb25zdCBHc3RDYXBzICpjYXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgIGluZGV4KTsKK0dzdFN0cnVjdHVyZSAqICAgIGdzdF9jYXBzX3N0ZWFsX3N0cnVjdHVyZSAgICAgICAgIChHc3RDYXBzICpjYXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgIGluZGV4KTsKK0dzdENhcHMgKiAgICAgICAgIGdzdF9jYXBzX2NvcHlfbnRoICAgICAgICAgICAgICAgIChjb25zdCBHc3RDYXBzICpjYXBzLCBndWludCBudGgpOwordm9pZCAgICAgICAgICAgICAgZ3N0X2NhcHNfdHJ1bmNhdGUgICAgICAgICAgICAgICAgKEdzdENhcHMgICAgICAgKmNhcHMpOwordm9pZCAgICAgICAgICAgICAgZ3N0X2NhcHNfc2V0X3ZhbHVlICAgICAgICAgICAgICAgKEdzdENhcHMgICAgICAgKmNhcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAqZmllbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICAqdmFsdWUpOwordm9pZCAgICAgICAgICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAgICAgICAgICAgICAgKEdzdENhcHMgICAgICAgKmNhcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAqZmllbGQsIC4uLikgR19HTlVDX05VTExfVEVSTUlOQVRFRDsKK3ZvaWQgICAgICAgICAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGVfdmFsaXN0ICAgICAgIChHc3RDYXBzICAgICAgICpjYXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgKmZpZWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgICAgICAgIHZhcmFyZ3MpOworCisvKiB0ZXN0cyAqLworZ2Jvb2xlYW4gICAgICAgICAgZ3N0X2NhcHNfaXNfYW55ICAgICAgICAgICAgICAgICAgKGNvbnN0IEdzdENhcHMgKmNhcHMpOworZ2Jvb2xlYW4gICAgICAgICAgZ3N0X2NhcHNfaXNfZW1wdHkgICAgICAgICAgICAgICAgKGNvbnN0IEdzdENhcHMgKmNhcHMpOworZ2Jvb2xlYW4gICAgICAgICAgZ3N0X2NhcHNfaXNfZml4ZWQgICAgICAgICAgICAgICAgKGNvbnN0IEdzdENhcHMgKmNhcHMpOworZ2Jvb2xlYW4gICAgICAgICAgZ3N0X2NhcHNfaXNfYWx3YXlzX2NvbXBhdGlibGUgICAgKGNvbnN0IEdzdENhcHMgKmNhcHMxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdzdENhcHMgKmNhcHMyKTsKK2dib29sZWFuICAgICAgICAgIGdzdF9jYXBzX2lzX3N1YnNldAkJICAgKGNvbnN0IEdzdENhcHMgKnN1YnNldCwKKwkJCQkJCSAgICBjb25zdCBHc3RDYXBzICpzdXBlcnNldCk7CitnYm9vbGVhbiAgICAgICAgICBnc3RfY2Fwc19pc19zdWJzZXRfc3RydWN0dXJlICAgICAoY29uc3QgR3N0Q2FwcyAqY2FwcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSk7CitnYm9vbGVhbiAgICAgICAgICBnc3RfY2Fwc19pc19lcXVhbAkJICAgKGNvbnN0IEdzdENhcHMgKmNhcHMxLAorCQkJCQkJICAgIGNvbnN0IEdzdENhcHMgKmNhcHMyKTsKK2dib29sZWFuICAgICAgICAgIGdzdF9jYXBzX2lzX2VxdWFsX2ZpeGVkICAgICAgICAgIChjb25zdCBHc3RDYXBzICpjYXBzMSwKKwkJCQkJCSAgICBjb25zdCBHc3RDYXBzICpjYXBzMik7CitnYm9vbGVhbiAgICAgICAgICBnc3RfY2Fwc19jYW5faW50ZXJzZWN0ICAgICAgICAgICAoY29uc3QgR3N0Q2FwcyAqIGNhcHMxLAorCQkJCQkJICAgIGNvbnN0IEdzdENhcHMgKiBjYXBzMik7CisKKworLyogb3BlcmF0aW9ucyAqLworR3N0Q2FwcyAqICAgICAgICAgZ3N0X2NhcHNfaW50ZXJzZWN0ICAgICAgICAgICAgICAgKGNvbnN0IEdzdENhcHMgKmNhcHMxLAorCQkJCQkJICAgIGNvbnN0IEdzdENhcHMgKmNhcHMyKTsKK0dzdENhcHMgKiAgICAgICAgIGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsICAgICAgICAgIChjb25zdCBHc3RDYXBzICpjYXBzMSwKKwkJCQkJCSAgICBjb25zdCBHc3RDYXBzICpjYXBzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzSW50ZXJzZWN0TW9kZSBtb2RlKTsKK0dzdENhcHMgKiAgICAgICAgIGdzdF9jYXBzX3N1YnRyYWN0CQkgICAoY29uc3QgR3N0Q2FwcyAqbWludWVuZCwKKwkJCQkJCSAgICBjb25zdCBHc3RDYXBzICpzdWJ0cmFoZW5kKTsKK0dzdENhcHMgKiAgICAgICAgIGdzdF9jYXBzX3VuaW9uICAgICAgICAgICAgICAgICAgIChjb25zdCBHc3RDYXBzICpjYXBzMSwKKwkJCQkJCSAgICBjb25zdCBHc3RDYXBzICpjYXBzMik7CitHc3RDYXBzICogICAgICAgICBnc3RfY2Fwc19ub3JtYWxpemUgICAgICAgICAgICAgICAoY29uc3QgR3N0Q2FwcyAqY2Fwcyk7CitnYm9vbGVhbiAgICAgICAgICBnc3RfY2Fwc19kb19zaW1wbGlmeSAgICAgICAgICAgICAoR3N0Q2FwcyAgICAgICAqY2Fwcyk7CisKK3ZvaWQgICAgICAgICAgICAgIGdzdF9jYXBzX2ZpeGF0ZSAgICAgICAgICAgICAgICAgIChHc3RDYXBzICAgICAgICpjYXBzKTsKKworLyogdXRpbGl0eSAqLworZ2NoYXIgKiAgICAgICAgICAgZ3N0X2NhcHNfdG9fc3RyaW5nICAgICAgICAgICAgICAgKGNvbnN0IEdzdENhcHMgKmNhcHMpOworR3N0Q2FwcyAqICAgICAgICAgZ3N0X2NhcHNfZnJvbV9zdHJpbmcgICAgICAgICAgICAgKGNvbnN0IGdjaGFyICAgKnN0cmluZyk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9DQVBTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGNoaWxkcHJveHkuYyBiL2dzdC9nc3RjaGlsZHByb3h5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYwN2I0OQotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RjaGlsZHByb3h5LmMKQEAgLTAsMCArMSw1MzggQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA1IFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKyAqCisgKiBnc3RjaGlsZHByb3h5LmM6IGludGVyZmFjZSBmb3IgbXVsdGkgY2hpbGQgZWxlbWVudHMKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKioKKyAqIFNFQ1RJT046Z3N0Y2hpbGRwcm94eQorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBJbnRlcmZhY2UgZm9yIG11bHRpIGNoaWxkIGVsZW1lbnRzLgorICogQHNlZV9hbHNvOiAjR3N0QmluCisgKgorICogVGhpcyBpbnRlcmZhY2UgYWJzdHJhY3RzIGhhbmRsaW5nIG9mIHByb3BlcnR5IHNldHMgZm9yIGVsZW1lbnRzIHdpdGgKKyAqIGNoaWxkcmVuLiBJbWFnaW5lIGVsZW1lbnRzIHN1Y2ggYXMgbWl4ZXJzIG9yIHBvbHlwaG9uaWMgZ2VuZXJhdG9ycy4gVGhleSBhbGwKKyAqIGhhdmUgbXVsdGlwbGUgI0dzdFBhZCBvciBzb21lIGtpbmQgb2Ygdm9pY2Ugb2JqZWN0cy4gQW5vdGhlciB1c2UgY2FzZSBhcmUKKyAqIGNvbnRhaW5lciBlbGVtZW50cyBsaWtlICNHc3RCaW4uCisgKiBUaGUgZWxlbWVudCBpbXBsZW1lbnRpbmcgdGhlIGludGVyZmFjZSBhY3RzIGFzIGEgcGFyZW50IGZvciB0aG9zZSBjaGlsZAorICogb2JqZWN0cy4KKyAqCisgKiBCeSBpbXBsZW1lbnRpbmcgdGhpcyBpbnRlcmZhY2UgdGhlIGNoaWxkIHByb3BlcnRpZXMgY2FuIGJlIGFjY2Vzc2VkIGZyb20gdGhlCisgKiBwYXJlbnQgZWxlbWVudCBieSB1c2luZyBnc3RfY2hpbGRfcHJveHlfZ2V0KCkgYW5kIGdzdF9jaGlsZF9wcm94eV9zZXQoKS4KKyAqCisgKiBQcm9wZXJ0eSBuYW1lcyBhcmUgd3JpdHRlbiBhcyAiY2hpbGQtbmFtZTo6cHJvcGVydHktbmFtZSIuIFRoZSB3aG9sZSBuYW1pbmcKKyAqIHNjaGVtZSBpcyByZWN1cnNpdmUuIFRodXMgImNoaWxkMTo6Y2hpbGQyOjpwcm9wZXJ0eSIgaXMgdmFsaWQgdG9vLCBpZgorICogImNoaWxkMSIgYW5kICJjaGlsZDIiIGltcGxlbWVudCB0aGUgI0dzdENoaWxkUHJveHkgaW50ZXJmYWNlLgorICovCisvKiBGSVhNRS0wLjExOgorICogaXQgd291bGQgYmUgbmljZSB0byBtYWtlIGdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfbmFtZSB2aXJ0dWFsIHRvbyBhbmQKKyAqIHVzZSBHT2JqZWN0IGluc3RlYWQgb2YgR3N0T2JqZWN0LiBXZSBjb3VsZCBldmVudHVhbGx5IHByb3ZpZGUgdGhlIGN1cnJlbnQKKyAqIGltcGxlbWVudGF0aW9uIGFzIGEgZGVmYXVsdCBpZiBjaGlsZHJlbiBhcmUgR3N0T2JqZWN0cy4KKyAqIFRoaXMgY2hhbmdlIHdvdWxkIGFsbG93IHRvIHByb3Bvc2UgdGhlIGludGVyZmFjZSBmb3IgaW5jbHVzaW9uIHdpdGgKKyAqIGdsaWIvZ29iamVjdC4gSU1ITyB0aGlzIGlzIHVzZWZ1bCBmb3IgR3RrQ29udGFpbmVyIGFuZCBjb21wb3VuZCB3aWRnZXRzIHRvby4KKyAqLworCisjaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKKworI2luY2x1ZGUgImdzdGNoaWxkcHJveHkuaCIKKyNpbmNsdWRlICJnc3RtYXJzaGFsLmgiCisjaW5jbHVkZSA8Z29iamVjdC9ndmFsdWVjb2xsZWN0b3IuaD4KKworLyogc2lnbmFscyAqLworZW51bQoreworICBDSElMRF9BRERFRCwKKyAgQ0hJTERfUkVNT1ZFRCwKKyAgTEFTVF9TSUdOQUwKK307CisKK3N0YXRpYyBndWludCBzaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OworCisvKioKKyAqIGdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfbmFtZToKKyAqIEBwYXJlbnQ6IHRoZSBwYXJlbnQgb2JqZWN0IHRvIGdldCB0aGUgY2hpbGQgZnJvbQorICogQG5hbWU6IHRoZSBjaGlsZHMgbmFtZQorICoKKyAqIExvb2tzIHVwIGEgY2hpbGQgZWxlbWVudCBieSB0aGUgZ2l2ZW4gbmFtZS4KKyAqCisgKiBJbXBsZW1lbnRvcnMgY2FuIHVzZSAjR3N0T2JqZWN0IHRvZ2V0aGVyIHdpdGggZ3N0X29iamVjdF9nZXRfbmFtZSgpCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgY2hpbGQgb2JqZWN0IG9yICVOVUxMIGlmIG5vdCBmb3VuZC4gVW5yZWYKKyAqICAgICBhZnRlciB1c2FnZS4KKyAqCisgKiBNVCBzYWZlLgorICovCitHc3RPYmplY3QgKgorZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9uYW1lIChHc3RDaGlsZFByb3h5ICogcGFyZW50LCBjb25zdCBnY2hhciAqIG5hbWUpCit7CisgIGd1aW50IGNvdW50LCBpOworICBHc3RPYmplY3QgKm9iamVjdCwgKnJlc3VsdDsKKyAgZ2NoYXIgKm9iamVjdF9uYW1lOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0hJTERfUFJPWFkgKHBhcmVudCksIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAobmFtZSAhPSBOVUxMLCBOVUxMKTsKKworICByZXN1bHQgPSBOVUxMOworCisgIGNvdW50ID0gZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZHJlbl9jb3VudCAocGFyZW50KTsKKyAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICBnYm9vbGVhbiBlcTsKKworICAgIGlmICghKG9iamVjdCA9IGdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfaW5kZXggKHBhcmVudCwgaSkpKQorICAgICAgY29udGludWU7CisKKyAgICBvYmplY3RfbmFtZSA9IGdzdF9vYmplY3RfZ2V0X25hbWUgKG9iamVjdCk7CisgICAgaWYgKG9iamVjdF9uYW1lID09IE5VTEwpIHsKKyAgICAgIGdfd2FybmluZyAoImNoaWxkICV1IG9mIHBhcmVudCAlcyBoYXMgbm8gbmFtZSIsIGksCisgICAgICAgICAgR1NUX09CSkVDVF9OQU1FIChwYXJlbnQpKTsKKyAgICAgIGdvdG8gbmV4dDsKKyAgICB9CisgICAgZXEgPSBnX3N0cl9lcXVhbCAob2JqZWN0X25hbWUsIG5hbWUpOworICAgIGdfZnJlZSAob2JqZWN0X25hbWUpOworCisgICAgaWYgKGVxKSB7CisgICAgICByZXN1bHQgPSBvYmplY3Q7CisgICAgICBicmVhazsKKyAgICB9CisgIG5leHQ6CisgICAgZ3N0X29iamVjdF91bnJlZiAob2JqZWN0KTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfaW5kZXg6CisgKiBAcGFyZW50OiB0aGUgcGFyZW50IG9iamVjdCB0byBnZXQgdGhlIGNoaWxkIGZyb20KKyAqIEBpbmRleDogdGhlIGNoaWxkcyBwb3NpdGlvbiBpbiB0aGUgY2hpbGQgbGlzdAorICoKKyAqIEZldGNoZXMgYSBjaGlsZCBieSBpdHMgbnVtYmVyLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIGNoaWxkIG9iamVjdCBvciAlTlVMTCBpZiBub3QgZm91bmQgKGluZGV4CisgKiAgICAgdG9vIGhpZ2gpLiBVbnJlZiBhZnRlciB1c2FnZS4KKyAqCisgKiBNVCBzYWZlLgorICovCitHc3RPYmplY3QgKgorZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9pbmRleCAoR3N0Q2hpbGRQcm94eSAqIHBhcmVudCwgZ3VpbnQgaW5kZXgpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0hJTERfUFJPWFkgKHBhcmVudCksIE5VTEwpOworCisgIHJldHVybiAoR1NUX0NISUxEX1BST1hZX0dFVF9JTlRFUkZBQ0UgKHBhcmVudCktPmdldF9jaGlsZF9ieV9pbmRleCAocGFyZW50LAorICAgICAgICAgIGluZGV4KSk7Cit9CisKKy8qKgorICogZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZHJlbl9jb3VudDoKKyAqIEBwYXJlbnQ6IHRoZSBwYXJlbnQgb2JqZWN0CisgKgorICogR2V0cyB0aGUgbnVtYmVyIG9mIGNoaWxkIG9iamVjdHMgdGhpcyBwYXJlbnQgY29udGFpbnMuCisgKgorICogUmV0dXJuczogdGhlIG51bWJlciBvZiBjaGlsZCBvYmplY3RzCisgKgorICogTVQgc2FmZS4KKyAqLworZ3VpbnQKK2dzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRyZW5fY291bnQgKEdzdENoaWxkUHJveHkgKiBwYXJlbnQpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0hJTERfUFJPWFkgKHBhcmVudCksIDApOworCisgIHJldHVybiAoR1NUX0NISUxEX1BST1hZX0dFVF9JTlRFUkZBQ0UgKHBhcmVudCktPmdldF9jaGlsZHJlbl9jb3VudCAocGFyZW50KSk7Cit9CisKKy8qKgorICogZ3N0X2NoaWxkX3Byb3h5X2xvb2t1cDoKKyAqIEBvYmplY3Q6IG9iamVjdCB0byBsb29rdXAgdGhlIHByb3BlcnR5IGluCisgKiBAbmFtZTogbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gbG9vayB1cAorICogQHRhcmdldDogKG91dCkgKGFsbG93LW5vbmUpICh0cmFuc2ZlciBmdWxsKTogcG9pbnRlciB0byBhICNHc3RPYmplY3QgdGhhdAorICogICAgIHRha2VzIHRoZSByZWFsIG9iamVjdCB0byBzZXQgcHJvcGVydHkgb24KKyAqIEBwc3BlYzogKG91dCkgKGFsbG93LW5vbmUpICh0cmFuc2ZlciBmdWxsKTogcG9pbnRlciB0byB0YWtlIHRoZSAjR1BhcmFtU3BlYworICogICAgIGRlc2NyaWJpbmcgdGhlIHByb3BlcnR5CisgKgorICogTG9va3MgdXAgd2hpY2ggb2JqZWN0IGFuZCAjR1BhcmFtU3BlYyB3b3VsZCBiZSBlZmZlY3RlZCBieSB0aGUgZ2l2ZW4gQG5hbWUuCisgKgorICogUmV0dXJuczogVFJVRSBpZiBAdGFyZ2V0IGFuZCBAcHNwZWMgY291bGQgYmUgZm91bmQuIEZBTFNFIG90aGVyd2lzZS4gSW4gdGhhdAorICogY2FzZSB0aGUgdmFsdWVzIGZvciBAcHNwZWMgYW5kIEB0YXJnZXQgYXJlIG5vdCBtb2RpZmllZC4gVW5yZWYgQHRhcmdldCBhZnRlcgorICogdXNhZ2UuCisgKgorICogTVQgc2FmZS4KKyAqLworZ2Jvb2xlYW4KK2dzdF9jaGlsZF9wcm94eV9sb29rdXAgKEdzdE9iamVjdCAqIG9iamVjdCwgY29uc3QgZ2NoYXIgKiBuYW1lLAorICAgIEdzdE9iamVjdCAqKiB0YXJnZXQsIEdQYXJhbVNwZWMgKiogcHNwZWMpCit7CisgIGdib29sZWFuIHJlcyA9IEZBTFNFOworICBnY2hhciAqKm5hbWVzLCAqKmN1cnJlbnQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19PQkpFQ1QgKG9iamVjdCksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG5hbWUgIT0gTlVMTCwgRkFMU0UpOworCisgIGdzdF9vYmplY3RfcmVmIChvYmplY3QpOworCisgIGN1cnJlbnQgPSBuYW1lcyA9IGdfc3Ryc3BsaXQgKG5hbWUsICI6OiIsIC0xKTsKKyAgd2hpbGUgKGN1cnJlbnRbMV0pIHsKKyAgICBHc3RPYmplY3QgKm5leHQ7CisKKyAgICBpZiAoIUdTVF9JU19DSElMRF9QUk9YWSAob2JqZWN0KSkgeworICAgICAgR1NUX0lORk8KKyAgICAgICAgICAoIm9iamVjdCAlcyBpcyBub3QgYSBwYXJlbnQsIHNvIHlvdSBjYW5ub3QgcmVxdWVzdCBhIGNoaWxkIGJ5IG5hbWUgJXMiLAorICAgICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAob2JqZWN0KSwgY3VycmVudFswXSk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgbmV4dCA9IGdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfbmFtZSAoR1NUX0NISUxEX1BST1hZIChvYmplY3QpLAorICAgICAgICBjdXJyZW50WzBdKTsKKyAgICBpZiAoIW5leHQpIHsKKyAgICAgIEdTVF9JTkZPICgibm8gc3VjaCBvYmplY3QgJXMiLCBjdXJyZW50WzBdKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBnc3Rfb2JqZWN0X3VucmVmIChvYmplY3QpOworICAgIG9iamVjdCA9IG5leHQ7CisgICAgY3VycmVudCsrOworICB9CisgIGlmIChjdXJyZW50WzFdID09IE5VTEwpIHsKKyAgICBHUGFyYW1TcGVjICpzcGVjID0KKyAgICAgICAgZ19vYmplY3RfY2xhc3NfZmluZF9wcm9wZXJ0eSAoR19PQkpFQ1RfR0VUX0NMQVNTIChvYmplY3QpLCBjdXJyZW50WzBdKTsKKyAgICBpZiAoc3BlYyA9PSBOVUxMKSB7CisgICAgICBHU1RfSU5GTyAoIm5vIHBhcmFtIHNwZWMgbmFtZWQgJXMiLCBjdXJyZW50WzBdKTsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKHBzcGVjKQorICAgICAgICAqcHNwZWMgPSBzcGVjOworICAgICAgaWYgKHRhcmdldCkgeworICAgICAgICBnc3Rfb2JqZWN0X3JlZiAob2JqZWN0KTsKKyAgICAgICAgKnRhcmdldCA9IG9iamVjdDsKKyAgICAgIH0KKyAgICAgIHJlcyA9IFRSVUU7CisgICAgfQorICB9CisgIGdzdF9vYmplY3RfdW5yZWYgKG9iamVjdCk7CisgIGdfc3RyZnJlZXYgKG5hbWVzKTsKKyAgcmV0dXJuIHJlczsKK30KKworLyoqCisgKiBnc3RfY2hpbGRfcHJveHlfZ2V0X3Byb3BlcnR5OgorICogQG9iamVjdDogb2JqZWN0IHRvIHF1ZXJ5CisgKiBAbmFtZTogbmFtZSBvZiB0aGUgcHJvcGVydHkKKyAqIEB2YWx1ZTogKG91dCBjYWxsZXItYWxsb2NhdGVzKTogYSAjR1ZhbHVlIHRoYXQgc2hvdWxkIHRha2UgdGhlIHJlc3VsdC4KKyAqCisgKiBHZXRzIGEgc2luZ2xlIHByb3BlcnR5IHVzaW5nIHRoZSBHc3RDaGlsZFByb3h5IG1lY2hhbmlzbS4KKyAqIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgaXQgYnkgY2FsbGluZyBnX3ZhbHVlX3Vuc2V0KCkKKyAqLwordm9pZAorZ3N0X2NoaWxkX3Byb3h5X2dldF9wcm9wZXJ0eSAoR3N0T2JqZWN0ICogb2JqZWN0LCBjb25zdCBnY2hhciAqIG5hbWUsCisgICAgR1ZhbHVlICogdmFsdWUpCit7CisgIEdQYXJhbVNwZWMgKnBzcGVjOworICBHc3RPYmplY3QgKnRhcmdldDsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfT0JKRUNUIChvYmplY3QpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAobmFtZSAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR19JU19WQUxVRSAodmFsdWUpKTsKKworICBpZiAoIWdzdF9jaGlsZF9wcm94eV9sb29rdXAgKG9iamVjdCwgbmFtZSwgJnRhcmdldCwgJnBzcGVjKSkKKyAgICBnb3RvIG5vdF9mb3VuZDsKKworICBnX29iamVjdF9nZXRfcHJvcGVydHkgKEdfT0JKRUNUICh0YXJnZXQpLCBwc3BlYy0+bmFtZSwgdmFsdWUpOworICBnc3Rfb2JqZWN0X3VucmVmICh0YXJnZXQpOworCisgIHJldHVybjsKKworbm90X2ZvdW5kOgorICB7CisgICAgZ193YXJuaW5nICgibm8gcHJvcGVydHkgJXMgaW4gb2JqZWN0ICVzIiwgbmFtZSwgR1NUX09CSkVDVF9OQU1FIChvYmplY3QpKTsKKyAgICByZXR1cm47CisgIH0KK30KKworLyoqCisgKiBnc3RfY2hpbGRfcHJveHlfZ2V0X3ZhbGlzdDoKKyAqIEBvYmplY3Q6IHRoZSBvYmplY3QgdG8gcXVlcnkKKyAqIEBmaXJzdF9wcm9wZXJ0eV9uYW1lOiBuYW1lIG9mIHRoZSBmaXJzdCBwcm9wZXJ0eSB0byBnZXQKKyAqIEB2YXJfYXJnczogcmV0dXJuIGxvY2F0aW9uIGZvciB0aGUgZmlyc3QgcHJvcGVydHksIGZvbGxvd2VkIG9wdGlvbmFsbHkgYnkgbW9yZSBuYW1lL3JldHVybiBsb2NhdGlvbiBwYWlycywgZm9sbG93ZWQgYnkgTlVMTAorICoKKyAqIEdldHMgcHJvcGVydGllcyBvZiB0aGUgcGFyZW50IG9iamVjdCBhbmQgaXRzIGNoaWxkcmVuLgorICovCit2b2lkCitnc3RfY2hpbGRfcHJveHlfZ2V0X3ZhbGlzdCAoR3N0T2JqZWN0ICogb2JqZWN0LAorICAgIGNvbnN0IGdjaGFyICogZmlyc3RfcHJvcGVydHlfbmFtZSwgdmFfbGlzdCB2YXJfYXJncykKK3sKKyAgY29uc3QgZ2NoYXIgKm5hbWU7CisgIGdjaGFyICplcnJvciA9IE5VTEw7CisgIEdWYWx1ZSB2YWx1ZSA9IHsgMCwgfTsKKyAgR1BhcmFtU3BlYyAqcHNwZWM7CisgIEdzdE9iamVjdCAqdGFyZ2V0OworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdfSVNfT0JKRUNUIChvYmplY3QpKTsKKworICBuYW1lID0gZmlyc3RfcHJvcGVydHlfbmFtZTsKKworICAvKiBpdGVyYXRlIG92ZXIgcGFpcnMgKi8KKyAgd2hpbGUgKG5hbWUpIHsKKyAgICBpZiAoIWdzdF9jaGlsZF9wcm94eV9sb29rdXAgKG9iamVjdCwgbmFtZSwgJnRhcmdldCwgJnBzcGVjKSkKKyAgICAgIGdvdG8gbm90X2ZvdW5kOworCisgICAgZ192YWx1ZV9pbml0ICgmdmFsdWUsIHBzcGVjLT52YWx1ZV90eXBlKTsKKyAgICBnX29iamVjdF9nZXRfcHJvcGVydHkgKEdfT0JKRUNUICh0YXJnZXQpLCBwc3BlYy0+bmFtZSwgJnZhbHVlKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmICh0YXJnZXQpOworCisgICAgR19WQUxVRV9MQ09QWSAoJnZhbHVlLCB2YXJfYXJncywgMCwgJmVycm9yKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICBnb3RvIGNhbnRfY29weTsKKyAgICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUpOworICAgIG5hbWUgPSB2YV9hcmcgKHZhcl9hcmdzLCBnY2hhciAqKTsKKyAgfQorICByZXR1cm47CisKK25vdF9mb3VuZDoKKyAgeworICAgIGdfd2FybmluZyAoIm5vIHByb3BlcnR5ICVzIGluIG9iamVjdCAlcyIsIG5hbWUsIEdTVF9PQkpFQ1RfTkFNRSAob2JqZWN0KSk7CisgICAgcmV0dXJuOworICB9CitjYW50X2NvcHk6CisgIHsKKyAgICBnX3dhcm5pbmcgKCJlcnJvciBjb3B5aW5nIHZhbHVlICVzIGluIG9iamVjdCAlczogJXMiLCBwc3BlYy0+bmFtZSwKKyAgICAgICAgR1NUX09CSkVDVF9OQU1FIChvYmplY3QpLCBlcnJvcik7CisgICAgZ192YWx1ZV91bnNldCAoJnZhbHVlKTsKKyAgICByZXR1cm47CisgIH0KK30KKworLyoqCisgKiBnc3RfY2hpbGRfcHJveHlfZ2V0OgorICogQG9iamVjdDogdGhlIHBhcmVudCBvYmplY3QKKyAqIEBmaXJzdF9wcm9wZXJ0eV9uYW1lOiBuYW1lIG9mIHRoZSBmaXJzdCBwcm9wZXJ0eSB0byBnZXQKKyAqIEAuLi46IHJldHVybiBsb2NhdGlvbiBmb3IgdGhlIGZpcnN0IHByb3BlcnR5LCBmb2xsb3dlZCBvcHRpb25hbGx5IGJ5IG1vcmUgbmFtZS9yZXR1cm4gbG9jYXRpb24gcGFpcnMsIGZvbGxvd2VkIGJ5IE5VTEwKKyAqCisgKiBHZXRzIHByb3BlcnRpZXMgb2YgdGhlIHBhcmVudCBvYmplY3QgYW5kIGl0cyBjaGlsZHJlbi4KKyAqLwordm9pZAorZ3N0X2NoaWxkX3Byb3h5X2dldCAoR3N0T2JqZWN0ICogb2JqZWN0LCBjb25zdCBnY2hhciAqIGZpcnN0X3Byb3BlcnR5X25hbWUsIC4uLikKK3sKKyAgdmFfbGlzdCB2YXJfYXJnczsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfT0JKRUNUIChvYmplY3QpKTsKKworICB2YV9zdGFydCAodmFyX2FyZ3MsIGZpcnN0X3Byb3BlcnR5X25hbWUpOworICBnc3RfY2hpbGRfcHJveHlfZ2V0X3ZhbGlzdCAob2JqZWN0LCBmaXJzdF9wcm9wZXJ0eV9uYW1lLCB2YXJfYXJncyk7CisgIHZhX2VuZCAodmFyX2FyZ3MpOworfQorCisvKioKKyAqIGdzdF9jaGlsZF9wcm94eV9zZXRfcHJvcGVydHk6CisgKiBAb2JqZWN0OiB0aGUgcGFyZW50IG9iamVjdAorICogQG5hbWU6IG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHNldAorICogQHZhbHVlOiBuZXcgI0dWYWx1ZSBmb3IgdGhlIHByb3BlcnR5CisgKgorICogU2V0cyBhIHNpbmdsZSBwcm9wZXJ0eSB1c2luZyB0aGUgR3N0Q2hpbGRQcm94eSBtZWNoYW5pc20uCisgKi8KK3ZvaWQKK2dzdF9jaGlsZF9wcm94eV9zZXRfcHJvcGVydHkgKEdzdE9iamVjdCAqIG9iamVjdCwgY29uc3QgZ2NoYXIgKiBuYW1lLAorICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQoreworICBHUGFyYW1TcGVjICpwc3BlYzsKKyAgR3N0T2JqZWN0ICp0YXJnZXQ7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX09CSkVDVCAob2JqZWN0KSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKG5hbWUgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHZhbHVlKSk7CisKKyAgaWYgKCFnc3RfY2hpbGRfcHJveHlfbG9va3VwIChvYmplY3QsIG5hbWUsICZ0YXJnZXQsICZwc3BlYykpCisgICAgZ290byBub3RfZm91bmQ7CisKKyAgZ19vYmplY3Rfc2V0X3Byb3BlcnR5IChHX09CSkVDVCAodGFyZ2V0KSwgcHNwZWMtPm5hbWUsIHZhbHVlKTsKKyAgZ3N0X29iamVjdF91bnJlZiAodGFyZ2V0KTsKKyAgcmV0dXJuOworCitub3RfZm91bmQ6CisgIHsKKyAgICBnX3dhcm5pbmcgKCJjYW5ub3Qgc2V0IHByb3BlcnR5ICVzIG9uIG9iamVjdCAlcyIsIG5hbWUsCisgICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAob2JqZWN0KSk7CisgICAgcmV0dXJuOworICB9Cit9CisKKy8qKgorICogZ3N0X2NoaWxkX3Byb3h5X3NldF92YWxpc3Q6CisgKiBAb2JqZWN0OiB0aGUgcGFyZW50IG9iamVjdAorICogQGZpcnN0X3Byb3BlcnR5X25hbWU6IG5hbWUgb2YgdGhlIGZpcnN0IHByb3BlcnR5IHRvIHNldAorICogQHZhcl9hcmdzOiB2YWx1ZSBmb3IgdGhlIGZpcnN0IHByb3BlcnR5LCBmb2xsb3dlZCBvcHRpb25hbGx5IGJ5IG1vcmUgbmFtZS92YWx1ZSBwYWlycywgZm9sbG93ZWQgYnkgTlVMTAorICoKKyAqIFNldHMgcHJvcGVydGllcyBvZiB0aGUgcGFyZW50IG9iamVjdCBhbmQgaXRzIGNoaWxkcmVuLgorICovCit2b2lkCitnc3RfY2hpbGRfcHJveHlfc2V0X3ZhbGlzdCAoR3N0T2JqZWN0ICogb2JqZWN0LAorICAgIGNvbnN0IGdjaGFyICogZmlyc3RfcHJvcGVydHlfbmFtZSwgdmFfbGlzdCB2YXJfYXJncykKK3sKKyAgY29uc3QgZ2NoYXIgKm5hbWU7CisgIGdjaGFyICplcnJvciA9IE5VTEw7CisgIEdWYWx1ZSB2YWx1ZSA9IHsgMCwgfTsKKyAgR1BhcmFtU3BlYyAqcHNwZWM7CisgIEdzdE9iamVjdCAqdGFyZ2V0OworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdfSVNfT0JKRUNUIChvYmplY3QpKTsKKworICBuYW1lID0gZmlyc3RfcHJvcGVydHlfbmFtZTsKKworICAvKiBpdGVyYXRlIG92ZXIgcGFpcnMgKi8KKyAgd2hpbGUgKG5hbWUpIHsKKyAgICBpZiAoIWdzdF9jaGlsZF9wcm94eV9sb29rdXAgKG9iamVjdCwgbmFtZSwgJnRhcmdldCwgJnBzcGVjKSkKKyAgICAgIGdvdG8gbm90X2ZvdW5kOworCisgICAgR19WQUxVRV9DT0xMRUNUX0lOSVQgKCZ2YWx1ZSwgcHNwZWMtPnZhbHVlX3R5cGUsIHZhcl9hcmdzLAorICAgICAgICBHX1ZBTFVFX05PQ09QWV9DT05URU5UUywgJmVycm9yKTsKKworICAgIGlmIChlcnJvcikKKyAgICAgIGdvdG8gY2FudF9jb3B5OworCisgICAgZ19vYmplY3Rfc2V0X3Byb3BlcnR5IChHX09CSkVDVCAodGFyZ2V0KSwgcHNwZWMtPm5hbWUsICZ2YWx1ZSk7CisgICAgZ3N0X29iamVjdF91bnJlZiAodGFyZ2V0KTsKKworICAgIGdfdmFsdWVfdW5zZXQgKCZ2YWx1ZSk7CisgICAgbmFtZSA9IHZhX2FyZyAodmFyX2FyZ3MsIGdjaGFyICopOworICB9CisgIHJldHVybjsKKworbm90X2ZvdW5kOgorICB7CisgICAgZ193YXJuaW5nICgibm8gcHJvcGVydHkgJXMgaW4gb2JqZWN0ICVzIiwgbmFtZSwgR1NUX09CSkVDVF9OQU1FIChvYmplY3QpKTsKKyAgICByZXR1cm47CisgIH0KK2NhbnRfY29weToKKyAgeworICAgIGdfd2FybmluZyAoImVycm9yIGNvcHlpbmcgdmFsdWUgJXMgaW4gb2JqZWN0ICVzOiAlcyIsIHBzcGVjLT5uYW1lLAorICAgICAgICBHU1RfT0JKRUNUX05BTUUgKG9iamVjdCksIGVycm9yKTsKKyAgICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKHRhcmdldCk7CisgICAgcmV0dXJuOworICB9Cit9CisKKy8qKgorICogZ3N0X2NoaWxkX3Byb3h5X3NldDoKKyAqIEBvYmplY3Q6IHRoZSBwYXJlbnQgb2JqZWN0CisgKiBAZmlyc3RfcHJvcGVydHlfbmFtZTogbmFtZSBvZiB0aGUgZmlyc3QgcHJvcGVydHkgdG8gc2V0CisgKiBALi4uOiB2YWx1ZSBmb3IgdGhlIGZpcnN0IHByb3BlcnR5LCBmb2xsb3dlZCBvcHRpb25hbGx5IGJ5IG1vcmUgbmFtZS92YWx1ZSBwYWlycywgZm9sbG93ZWQgYnkgTlVMTAorICoKKyAqIFNldHMgcHJvcGVydGllcyBvZiB0aGUgcGFyZW50IG9iamVjdCBhbmQgaXRzIGNoaWxkcmVuLgorICovCit2b2lkCitnc3RfY2hpbGRfcHJveHlfc2V0IChHc3RPYmplY3QgKiBvYmplY3QsIGNvbnN0IGdjaGFyICogZmlyc3RfcHJvcGVydHlfbmFtZSwgLi4uKQoreworICB2YV9saXN0IHZhcl9hcmdzOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19PQkpFQ1QgKG9iamVjdCkpOworCisgIHZhX3N0YXJ0ICh2YXJfYXJncywgZmlyc3RfcHJvcGVydHlfbmFtZSk7CisgIGdzdF9jaGlsZF9wcm94eV9zZXRfdmFsaXN0IChvYmplY3QsIGZpcnN0X3Byb3BlcnR5X25hbWUsIHZhcl9hcmdzKTsKKyAgdmFfZW5kICh2YXJfYXJncyk7Cit9CisKKy8qKgorICogZ3N0X2NoaWxkX3Byb3h5X2NoaWxkX2FkZGVkOgorICogQG9iamVjdDogdGhlIHBhcmVudCBvYmplY3QKKyAqIEBjaGlsZDogdGhlIG5ld2x5IGFkZGVkIGNoaWxkCisgKgorICogRW1pdHMgdGhlICJjaGlsZC1hZGRlZCIgc2lnbmFsLgorICovCit2b2lkCitnc3RfY2hpbGRfcHJveHlfY2hpbGRfYWRkZWQgKEdzdE9iamVjdCAqIG9iamVjdCwgR3N0T2JqZWN0ICogY2hpbGQpCit7CisgIGdfc2lnbmFsX2VtaXQgKEdfT0JKRUNUIChvYmplY3QpLCBzaWduYWxzW0NISUxEX0FEREVEXSwgMCwgY2hpbGQpOworfQorCisvKioKKyAqIGdzdF9jaGlsZF9wcm94eV9jaGlsZF9yZW1vdmVkOgorICogQG9iamVjdDogdGhlIHBhcmVudCBvYmplY3QKKyAqIEBjaGlsZDogdGhlIHJlbW92ZWQgY2hpbGQKKyAqCisgKiBFbWl0cyB0aGUgImNoaWxkLXJlbW92ZWQiIHNpZ25hbC4KKyAqLwordm9pZAorZ3N0X2NoaWxkX3Byb3h5X2NoaWxkX3JlbW92ZWQgKEdzdE9iamVjdCAqIG9iamVjdCwgR3N0T2JqZWN0ICogY2hpbGQpCit7CisgIGdfc2lnbmFsX2VtaXQgKEdfT0JKRUNUIChvYmplY3QpLCBzaWduYWxzW0NISUxEX1JFTU9WRURdLCAwLCBjaGlsZCk7Cit9CisKKy8qIGdvYmplY3QgbWV0aG9kcyAqLworCitzdGF0aWMgdm9pZAorZ3N0X2NoaWxkX3Byb3h5X2Jhc2VfaW5pdCAoZ3BvaW50ZXIgZ19jbGFzcykKK3sKKyAgc3RhdGljIGdib29sZWFuIGluaXRpYWxpemVkID0gRkFMU0U7CisKKyAgaWYgKCFpbml0aWFsaXplZCkgeworICAgIC8qIGNyZWF0ZSBpbnRlcmZhY2Ugc2lnbmFscyBhbmQgcHJvcGVydGllcyBoZXJlLiAqLworICAgICAgICAvKioKKwkgKiBHc3RDaGlsZFByb3h5OjpjaGlsZC1hZGRlZDoKKwkgKiBAY2hpbGRfcHJveHk6IHRoZSAjR3N0Q2hpbGRQcm94eQorCSAqIEBvYmplY3Q6IHRoZSAjR09iamVjdCB0aGF0IHdhcyBhZGRlZAorCSAqCisJICogV2lsbCBiZSBlbWl0dGVkIGFmdGVyIHRoZSBAb2JqZWN0IHdhcyBhZGRlZCB0byB0aGUgQGNoaWxkX3Byb3h5LgorCSAqLworICAgIC8qIEZJWE1FIDAuMTE6IHVzZSBHU1RfVFlQRV9PQkpFQ1QgYXMgR3N0Q2hpbGRQcm94eSBvbmx5CisgICAgICogc3VwcG9ydHMgR3N0T2JqZWN0cyAqLworICAgIHNpZ25hbHNbQ0hJTERfQURERURdID0KKyAgICAgICAgZ19zaWduYWxfbmV3ICgiY2hpbGQtYWRkZWQiLCBHX1RZUEVfRlJPTV9DTEFTUyAoZ19jbGFzcyksCisgICAgICAgIEdfU0lHTkFMX1JVTl9GSVJTVCwgR19TVFJVQ1RfT0ZGU0VUIChHc3RDaGlsZFByb3h5SW50ZXJmYWNlLAorICAgICAgICAgICAgY2hpbGRfYWRkZWQpLCBOVUxMLCBOVUxMLCBnc3RfbWFyc2hhbF9WT0lEX19PQkpFQ1QsIEdfVFlQRV9OT05FLCAxLAorICAgICAgICBHX1RZUEVfT0JKRUNUKTsKKworICAgICAgICAvKioKKwkgKiBHc3RDaGlsZFByb3h5OjpjaGlsZC1yZW1vdmVkOgorCSAqIEBjaGlsZF9wcm94eTogdGhlICNHc3RDaGlsZFByb3h5CisJICogQG9iamVjdDogdGhlICNHT2JqZWN0IHRoYXQgd2FzIHJlbW92ZWQKKwkgKgorCSAqIFdpbGwgYmUgZW1pdHRlZCBhZnRlciB0aGUgQG9iamVjdCB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBAY2hpbGRfcHJveHkuCisJICovCisgICAgLyogRklYTUUgMC4xMTogdXNlIEdTVF9UWVBFX09CSkVDVCBhcyBHc3RDaGlsZFByb3h5IG9ubHkKKyAgICAgKiBzdXBwb3J0cyBHc3RPYmplY3RzICovCisgICAgc2lnbmFsc1tDSElMRF9SRU1PVkVEXSA9CisgICAgICAgIGdfc2lnbmFsX25ldyAoImNoaWxkLXJlbW92ZWQiLCBHX1RZUEVfRlJPTV9DTEFTUyAoZ19jbGFzcyksCisgICAgICAgIEdfU0lHTkFMX1JVTl9GSVJTVCwgR19TVFJVQ1RfT0ZGU0VUIChHc3RDaGlsZFByb3h5SW50ZXJmYWNlLAorICAgICAgICAgICAgY2hpbGRfcmVtb3ZlZCksIE5VTEwsIE5VTEwsIGdzdF9tYXJzaGFsX1ZPSURfX09CSkVDVCwgR19UWVBFX05PTkUsCisgICAgICAgIDEsIEdfVFlQRV9PQkpFQ1QpOworCisgICAgaW5pdGlhbGl6ZWQgPSBUUlVFOworICB9Cit9CisKK0dUeXBlCitnc3RfY2hpbGRfcHJveHlfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyB2b2xhdGlsZSBnc2l6ZSB0eXBlID0gMDsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZ0eXBlKSkgeworICAgIEdUeXBlIF90eXBlOworICAgIHN0YXRpYyBjb25zdCBHVHlwZUluZm8gaW5mbyA9IHsKKyAgICAgIHNpemVvZiAoR3N0Q2hpbGRQcm94eUludGVyZmFjZSksCisgICAgICBnc3RfY2hpbGRfcHJveHlfYmFzZV9pbml0LCAgICAgICAgLyogYmFzZV9pbml0ICovCisgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGJhc2VfZmluYWxpemUgKi8KKyAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogY2xhc3NfaW5pdCAqLworICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBjbGFzc19maW5hbGl6ZSAqLworICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBjbGFzc19kYXRhICovCisgICAgICAwLAorICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBuX3ByZWFsbG9jcyAqLworICAgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAvKiBpbnN0YW5jZV9pbml0ICovCisgICAgfTsKKworICAgIF90eXBlID0KKyAgICAgICAgZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyAoR19UWVBFX0lOVEVSRkFDRSwgIkdzdENoaWxkUHJveHkiLCAmaW5mbywgMCk7CisKKyAgICBnX3R5cGVfaW50ZXJmYWNlX2FkZF9wcmVyZXF1aXNpdGUgKF90eXBlLCBHU1RfVFlQRV9PQkpFQ1QpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmdHlwZSwgKGdzaXplKSBfdHlwZSk7CisgIH0KKyAgcmV0dXJuIHR5cGU7Cit9CmRpZmYgLS1naXQgYS9nc3QvZ3N0Y2hpbGRwcm94eS5oIGIvZ3N0L2dzdGNoaWxkcHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmIyZDE0Ci0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdGNoaWxkcHJveHkuaApAQCAtMCwwICsxLDkxIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNSBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisgKgorICogZ3N0Y2hpbGRwcm94eS5oOiBpbnRlcmZhY2UgaGVhZGVyIGZvciBtdWx0aSBjaGlsZCBlbGVtZW50cworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19HU1RfQ0hJTERfUFJPWFlfSF9fCisjZGVmaW5lIF9fR1NUX0NISUxEX1BST1hZX0hfXworCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKK0dfQkVHSU5fREVDTFMKKworCisjZGVmaW5lIEdTVF9UWVBFX0NISUxEX1BST1hZCQkJKGdzdF9jaGlsZF9wcm94eV9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgR1NUX0NISUxEX1BST1hZKG9iaikJCQkoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9DSElMRF9QUk9YWSwgR3N0Q2hpbGRQcm94eSkpCisjZGVmaW5lIEdTVF9JU19DSElMRF9QUk9YWShvYmopCSAgICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9DSElMRF9QUk9YWSkpCisjZGVmaW5lIEdTVF9DSElMRF9QUk9YWV9HRVRfSU5URVJGQUNFKG9iaikJKEdfVFlQRV9JTlNUQU5DRV9HRVRfSU5URVJGQUNFICgob2JqKSwgR1NUX1RZUEVfQ0hJTERfUFJPWFksIEdzdENoaWxkUHJveHlJbnRlcmZhY2UpKQorCisvKioKKyAqIEdzdENoaWxkUHJveHk6CisgKgorICogT3BhcXVlICNHc3RDaGlsZFByb3h5IGRhdGEgc3RydWN0dXJlLgorICovCit0eXBlZGVmIHN0cnVjdCBfR3N0Q2hpbGRQcm94eSBHc3RDaGlsZFByb3h5OyAgICAvKiBkdW1teSBvYmplY3QgKi8KK3R5cGVkZWYgc3RydWN0IF9Hc3RDaGlsZFByb3h5SW50ZXJmYWNlIEdzdENoaWxkUHJveHlJbnRlcmZhY2U7CisKKy8qKgorICogR3N0Q2hpbGRQcm94eUludGVyZmFjZToKKyAqIEBwYXJlbnQ6IHBhcmVudCBpbnRlcmZhY2UgdHlwZS4KKyAqIEBnZXRfY2hpbGRfYnlfaW5kZXg6IHZpcnR1YWwgbWV0aG9kIHRvIGZldGNoIHRoZSBjaGlsZAorICogQGdldF9jaGlsZHJlbl9jb3VudDogdmlydHVhbCBtZXRob2QgdG8gZ2V0IHRoZSBjaGlsZHJlbiBjb3VudAorICoKKyAqICNHc3RDaGlsZFByb3h5IGludGVyZmFjZS4KKyAqLworc3RydWN0IF9Hc3RDaGlsZFByb3h5SW50ZXJmYWNlCit7CisgIEdUeXBlSW50ZXJmYWNlIHBhcmVudDsKKworICAvKiBtZXRob2RzICovCisgIEdzdE9iamVjdCAqKCpnZXRfY2hpbGRfYnlfaW5kZXgpIChHc3RDaGlsZFByb3h5ICogcGFyZW50LCBndWludCBpbmRleCk7CisgIGd1aW50ICgqZ2V0X2NoaWxkcmVuX2NvdW50KSAoR3N0Q2hpbGRQcm94eSAqIHBhcmVudCk7CisgIC8qPCBwcml2YXRlID4qLworICAvKiBzaWduYWxzICovCisgIHZvaWQgKCpjaGlsZF9hZGRlZCkgKEdzdENoaWxkUHJveHkgKiBwYXJlbnQsIEdzdE9iamVjdCAqIGNoaWxkKTsKKyAgdm9pZCAoKmNoaWxkX3JlbW92ZWQpIChHc3RDaGlsZFByb3h5ICogcGFyZW50LCBHc3RPYmplY3QgKiBjaGlsZCk7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOworfTsKKworR1R5cGUgZ3N0X2NoaWxkX3Byb3h5X2dldF90eXBlICh2b2lkKTsKKworR3N0T2JqZWN0ICpnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X25hbWUgKEdzdENoaWxkUHJveHkgKiBwYXJlbnQsIGNvbnN0IGdjaGFyICogbmFtZSk7CitHc3RPYmplY3QgKmdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfaW5kZXggKEdzdENoaWxkUHJveHkgKiBwYXJlbnQsIGd1aW50IGluZGV4KTsKK2d1aW50IGdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRyZW5fY291bnQgKEdzdENoaWxkUHJveHkgKiBwYXJlbnQpOworCitnYm9vbGVhbiBnc3RfY2hpbGRfcHJveHlfbG9va3VwIChHc3RPYmplY3QgKm9iamVjdCwgY29uc3QgZ2NoYXIgKm5hbWUsCisgICAgR3N0T2JqZWN0ICoqdGFyZ2V0LCBHUGFyYW1TcGVjICoqcHNwZWMpOwordm9pZCBnc3RfY2hpbGRfcHJveHlfZ2V0X3Byb3BlcnR5IChHc3RPYmplY3QgKiBvYmplY3QsIGNvbnN0IGdjaGFyICpuYW1lLCBHVmFsdWUgKnZhbHVlKTsKK3ZvaWQgZ3N0X2NoaWxkX3Byb3h5X2dldF92YWxpc3QgKEdzdE9iamVjdCAqIG9iamVjdCwKKyAgICBjb25zdCBnY2hhciAqIGZpcnN0X3Byb3BlcnR5X25hbWUsIHZhX2xpc3QgdmFyX2FyZ3MpOwordm9pZCBnc3RfY2hpbGRfcHJveHlfZ2V0IChHc3RPYmplY3QgKiBvYmplY3QsIGNvbnN0IGdjaGFyICogZmlyc3RfcHJvcGVydHlfbmFtZSwKKyAgICAuLi4pIEdfR05VQ19OVUxMX1RFUk1JTkFURUQ7Cit2b2lkIGdzdF9jaGlsZF9wcm94eV9zZXRfcHJvcGVydHkgKEdzdE9iamVjdCAqIG9iamVjdCwgY29uc3QgZ2NoYXIgKm5hbWUsIGNvbnN0IEdWYWx1ZSAqdmFsdWUpOwordm9pZCBnc3RfY2hpbGRfcHJveHlfc2V0X3ZhbGlzdCAoR3N0T2JqZWN0KiBvYmplY3QsCisgICAgY29uc3QgZ2NoYXIgKiBmaXJzdF9wcm9wZXJ0eV9uYW1lLCB2YV9saXN0IHZhcl9hcmdzKTsKK3ZvaWQgZ3N0X2NoaWxkX3Byb3h5X3NldCAoR3N0T2JqZWN0ICogb2JqZWN0LCBjb25zdCBnY2hhciAqIGZpcnN0X3Byb3BlcnR5X25hbWUsCisgICAgLi4uKSBHX0dOVUNfTlVMTF9URVJNSU5BVEVEOwordm9pZCBnc3RfY2hpbGRfcHJveHlfY2hpbGRfYWRkZWQgKEdzdE9iamVjdCAqIG9iamVjdCwgR3N0T2JqZWN0ICogIGNoaWxkKTsKK3ZvaWQgZ3N0X2NoaWxkX3Byb3h5X2NoaWxkX3JlbW92ZWQgKEdzdE9iamVjdCAqIG9iamVjdCwgR3N0T2JqZWN0ICogIGNoaWxkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fR1NUX0NISUxEX1BST1hZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGNsb2NrLmMgYi9nc3QvZ3N0Y2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTY3MjM4Ci0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdGNsb2NrLmMKQEAgLTAsMCArMSwxNDg4IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwNCBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgorICoKKyAqIGdzdGNsb2NrLmM6IENsb2NrIHN1YnN5c3RlbSBmb3IgbWFpbnRhaW5pbmcgdGltZSBzeW5jCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoqCisgKiBTRUNUSU9OOmdzdGNsb2NrCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEFic3RyYWN0IGNsYXNzIGZvciBnbG9iYWwgY2xvY2tzCisgKiBAc2VlX2Fsc286ICNHc3RTeXN0ZW1DbG9jaywgI0dzdFBpcGVsaW5lCisgKgorICogR1N0cmVhbWVyIHVzZXMgYSBnbG9iYWwgY2xvY2sgdG8gc3luY2hyb25pemUgdGhlIHBsdWdpbnMgaW4gYSBwaXBlbGluZS4KKyAqIERpZmZlcmVudCBjbG9jayBpbXBsZW1lbnRhdGlvbnMgYXJlIHBvc3NpYmxlIGJ5IGltcGxlbWVudGluZyB0aGlzIGFic3RyYWN0CisgKiBiYXNlIGNsYXNzIG9yLCBtb3JlIGNvbnZlbmllbnRseSwgYnkgc3ViY2xhc3NpbmcgI0dzdFN5c3RlbUNsb2NrLgorICoKKyAqIFRoZSAjR3N0Q2xvY2sgcmV0dXJucyBhIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyB0aW1lIHdpdGggdGhlIG1ldGhvZAorICogZ3N0X2Nsb2NrX2dldF90aW1lKCkuIEl0cyBhY2N1cmFjeSBhbmQgYmFzZSB0aW1lIGRlcGVuZCBvbiB0aGUgc3BlY2lmaWMKKyAqIGNsb2NrIGltcGxlbWVudGF0aW9uIGJ1dCB0aW1lIGlzIGFsd2F5cyBleHByZXNzZWQgaW4gbmFub3NlY29uZHMuIFNpbmNlIHRoZQorICogYmFzZWxpbmUgb2YgdGhlIGNsb2NrIGlzIHVuZGVmaW5lZCwgdGhlIGNsb2NrIHRpbWUgcmV0dXJuZWQgaXMgbm90CisgKiBtZWFuaW5nZnVsIGluIGl0c2VsZiwgd2hhdCBtYXR0ZXJzIGFyZSB0aGUgZGVsdGFzIGJldHdlZW4gdHdvIGNsb2NrIHRpbWVzLgorICogVGhlIHRpbWUgcmV0dXJuZWQgYnkgYSBjbG9jayBpcyBjYWxsZWQgdGhlIGFic29sdXRlIHRpbWUuCisgKgorICogVGhlIHBpcGVsaW5lIHVzZXMgdGhlIGNsb2NrIHRvIGNhbGN1bGF0ZSB0aGUgcnVubmluZyB0aW1lLiBVc3VhbGx5IGFsbAorICogcmVuZGVyZXJzIHN5bmNocm9uaXplIHRvIHRoZSBnbG9iYWwgY2xvY2sgdXNpbmcgdGhlIGJ1ZmZlciB0aW1lc3RhbXBzLCB0aGUKKyAqIG5ld3NlZ21lbnQgZXZlbnRzIGFuZCB0aGUgZWxlbWVudCdzIGJhc2UgdGltZSwgc2VlICNHc3RQaXBlbGluZS4KKyAqCisgKiBBIGNsb2NrIGltcGxlbWVudGF0aW9uIGNhbiBzdXBwb3J0IHBlcmlvZGljIGFuZCBzaW5nbGUgc2hvdCBjbG9jaworICogbm90aWZpY2F0aW9ucyBib3RoIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMuCisgKgorICogT25lIGZpcnN0IG5lZWRzIHRvIGNyZWF0ZSBhICNHc3RDbG9ja0lEIGZvciB0aGUgcGVyaW9kaWMgb3Igc2luZ2xlIHNob3QKKyAqIG5vdGlmaWNhdGlvbiB1c2luZyBnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkKCkgb3IKKyAqIGdzdF9jbG9ja19uZXdfcGVyaW9kaWNfaWQoKS4KKyAqCisgKiBUbyBwZXJmb3JtIGEgYmxvY2tpbmcgd2FpdCBmb3IgdGhlIHNwZWNpZmljIHRpbWUgb2YgdGhlICNHc3RDbG9ja0lEIHVzZSB0aGUKKyAqIGdzdF9jbG9ja19pZF93YWl0KCkuIFRvIHJlY2VpdmUgYSBjYWxsYmFjayB3aGVuIHRoZSBzcGVjaWZpYyB0aW1lIGlzIHJlYWNoZWQKKyAqIGluIHRoZSBjbG9jayB1c2UgZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMoKS4gQm90aCB0aGVzZSBjYWxscyBjYW4gYmUKKyAqIGludGVycnVwdGVkIHdpdGggdGhlIGdzdF9jbG9ja19pZF91bnNjaGVkdWxlKCkgY2FsbC4gSWYgdGhlIGJsb2NraW5nIHdhaXQgaXMKKyAqIHVuc2NoZWR1bGVkIGEgcmV0dXJuIHZhbHVlIG9mICNHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQgaXMgcmV0dXJuZWQuCisgKgorICogUGVyaW9kaWMgY2FsbGJhY2tzIHNjaGVkdWxlZCBhc3luYyB3aWxsIGJlIHJlcGVhdGVkbHkgY2FsbGVkIGF1dG9tYXRpY2FsbHkKKyAqIHVudGlsIGl0IGlzIHVuc2NoZWR1bGVkLiBUbyBzY2hlZHVsZSBhIHN5bmMgcGVyaW9kaWMgY2FsbGJhY2ssCisgKiBnc3RfY2xvY2tfaWRfd2FpdCgpIHNob3VsZCBiZSBjYWxsZWQgcmVwZWF0ZWRseS4KKyAqCisgKiBUaGUgYXN5bmMgY2FsbGJhY2tzIGNhbiBoYXBwZW4gZnJvbSBhbnkgdGhyZWFkLCBlaXRoZXIgcHJvdmlkZWQgYnkgdGhlIGNvcmUKKyAqIG9yIGZyb20gYSBzdHJlYW1pbmcgdGhyZWFkLiBUaGUgYXBwbGljYXRpb24gc2hvdWxkIGJlIHByZXBhcmVkIGZvciB0aGlzLgorICoKKyAqIEEgI0dzdENsb2NrSUQgdGhhdCBoYXMgYmVlbiB1bnNjaGVkdWxlZCBjYW5ub3QgYmUgdXNlZCBhZ2FpbiBmb3IgYW55IHdhaXQKKyAqIG9wZXJhdGlvbiwgYSBuZXcgI0dzdENsb2NrSUQgc2hvdWxkIGJlIGNyZWF0ZWQgYW5kIHRoZSBvbGQgdW5zY2hlZHVsZWQgb25lCisgKiBzaG91bGQgYmUgZGVzdHJveWVkIHdpdGggZ3N0X2Nsb2NrX2lkX3VucmVmKCkuCisgKgorICogSXQgaXMgcG9zc2libGUgdG8gcGVyZm9ybSBhIGJsb2NraW5nIHdhaXQgb24gdGhlIHNhbWUgI0dzdENsb2NrSUQgZnJvbQorICogbXVsdGlwbGUgdGhyZWFkcy4gSG93ZXZlciwgcmVnaXN0ZXJpbmcgdGhlIHNhbWUgI0dzdENsb2NrSUQgZm9yIG11bHRpcGxlCisgKiBhc3luYyBub3RpZmljYXRpb25zIGlzIG5vdCBwb3NzaWJsZSwgdGhlIGNhbGxiYWNrIHdpbGwgb25seSBiZSBjYWxsZWQgZm9yCisgKiB0aGUgdGhyZWFkIHJlZ2lzdGVyaW5nIHRoZSBlbnRyeSBsYXN0LgorICoKKyAqIE5vbmUgb2YgdGhlIHdhaXQgb3BlcmF0aW9ucyB1bnJlZiB0aGUgI0dzdENsb2NrSUQsIHRoZSBvd25lciBpcyByZXNwb25zaWJsZQorICogZm9yIHVucmVmZmluZyB0aGUgaWRzIGl0c2VsZi4gVGhpcyBob2xkcyBmb3IgYm90aCBwZXJpb2RpYyBhbmQgc2luZ2xlIHNob3QKKyAqIG5vdGlmaWNhdGlvbnMuIFRoZSByZWFzb24gYmVpbmcgdGhhdCB0aGUgb3duZXIgb2YgdGhlICNHc3RDbG9ja0lEIGhhcyB0bworICoga2VlcCBhIGhhbmRsZSB0byB0aGUgI0dzdENsb2NrSUQgdG8gdW5ibG9jayB0aGUgd2FpdCBvbiBGTFVTSElORyBldmVudHMgb3IKKyAqIHN0YXRlIGNoYW5nZXMgYW5kIGlmIHRoZSBlbnRyeSB3b3VsZCBiZSB1bnJlZmZlZCBhdXRvbWF0aWNhbGx5LCB0aGUgaGFuZGxlIAorICogbWlnaHQgYmVjb21lIGludmFsaWQgd2l0aG91dCBhbnkgbm90aWZpY2F0aW9uLgorICoKKyAqIFRoZXNlIGNsb2NrIG9wZXJhdGlvbnMgZG8gbm90IG9wZXJhdGUgb24gdGhlIHJ1bm5pbmcgdGltZSwgc28gdGhlIGNhbGxiYWNrcworICogd2lsbCBhbHNvIG9jY3VyIHdoZW4gbm90IGluIFBMQVlJTkcgc3RhdGUgYXMgaWYgdGhlIGNsb2NrIGp1c3Qga2VlcHMgb24KKyAqIHJ1bm5pbmcuIFNvbWUgY2xvY2tzIGhvd2V2ZXIgZG8gbm90IHByb2dyZXNzIHdoZW4gdGhlIGVsZW1lbnQgdGhhdCBwcm92aWRlZAorICogdGhlIGNsb2NrIGlzIG5vdCBQTEFZSU5HLgorICoKKyAqIFdoZW4gYSBjbG9jayBoYXMgdGhlICNHU1RfQ0xPQ0tfRkxBR19DQU5fU0VUX01BU1RFUiBmbGFnIHNldCwgaXQgY2FuIGJlCisgKiBzbGF2ZWQgdG8gYW5vdGhlciAjR3N0Q2xvY2sgd2l0aCB0aGUgZ3N0X2Nsb2NrX3NldF9tYXN0ZXIoKS4gVGhlIGNsb2NrIHdpbGwKKyAqIHRoZW4gYXV0b21hdGljYWxseSBiZSBzeW5jaHJvbml6ZWQgdG8gdGhpcyBtYXN0ZXIgY2xvY2sgYnkgcmVwZWF0ZWRseQorICogc2FtcGxpbmcgdGhlIG1hc3RlciBjbG9jayBhbmQgdGhlIHNsYXZlIGNsb2NrIGFuZCByZWNhbGlicmF0aW5nIHRoZSBzbGF2ZQorICogY2xvY2sgd2l0aCBnc3RfY2xvY2tfc2V0X2NhbGlicmF0aW9uKCkuIFRoaXMgZmVhdHVyZSBpcyBtb3N0bHkgdXNlZnVsIGZvcgorICogcGx1Z2lucyB0aGF0IGhhdmUgYW4gaW50ZXJuYWwgY2xvY2sgYnV0IG11c3Qgb3BlcmF0ZSB3aXRoIGFub3RoZXIgY2xvY2sKKyAqIHNlbGVjdGVkIGJ5IHRoZSAjR3N0UGlwZWxpbmUuICBUaGV5IGNhbiB0cmFjayB0aGUgb2Zmc2V0IGFuZCByYXRlIGRpZmZlcmVuY2UKKyAqIG9mIHRoZWlyIGludGVybmFsIGNsb2NrIHJlbGF0aXZlIHRvIHRoZSBtYXN0ZXIgY2xvY2sgYnkgdXNpbmcgdGhlCisgKiBnc3RfY2xvY2tfZ2V0X2NhbGlicmF0aW9uKCkgZnVuY3Rpb24uIAorICoKKyAqIFRoZSBtYXN0ZXIvc2xhdmUgc3luY2hyb25pc2F0aW9uIGNhbiBiZSB0dW5lZCB3aXRoIHRoZSAjR3N0Q2xvY2s6dGltZW91dCwKKyAqICNHc3RDbG9jazp3aW5kb3ctc2l6ZSBhbmQgI0dzdENsb2NrOndpbmRvdy10aHJlc2hvbGQgcHJvcGVydGllcy4KKyAqIFRoZSAjR3N0Q2xvY2s6dGltZW91dCBwcm9wZXJ0eSBkZWZpbmVzIHRoZSBpbnRlcnZhbCB0byBzYW1wbGUgdGhlIG1hc3RlcgorICogY2xvY2sgYW5kIHJ1biB0aGUgY2FsaWJyYXRpb24gZnVuY3Rpb25zLiAjR3N0Q2xvY2s6d2luZG93LXNpemUgZGVmaW5lcyB0aGUKKyAqIG51bWJlciBvZiBzYW1wbGVzIHRvIHVzZSB3aGVuIGNhbGlicmF0aW5nIGFuZCAjR3N0Q2xvY2s6d2luZG93LXRocmVzaG9sZAorICogZGVmaW5lcyB0aGUgbWluaW11bSBudW1iZXIgb2Ygc2FtcGxlcyBiZWZvcmUgdGhlIGNhbGlicmF0aW9uIGlzIHBlcmZvcm1lZC4KKyAqCisgKiBMYXN0IHJldmlld2VkIG9uIDIwMDktMDUtMjEgKDAuMTAuMjQpCisgKi8KKworCisjaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlICJnc3RjbG9jay5oIgorI2luY2x1ZGUgImdzdGluZm8uaCIKKyNpbmNsdWRlICJnc3R1dGlscy5oIgorCisjaWZuZGVmIEdTVF9ESVNBQkxFX1RSQUNFCisvKiAjZGVmaW5lIEdTVF9XSVRIX0FMTE9DX1RSQUNFICovCisjaW5jbHVkZSAiZ3N0dHJhY2UuaCIKK3N0YXRpYyBHc3RBbGxvY1RyYWNlICpfZ3N0X2Nsb2NrX2VudHJ5X3RyYWNlOworI2VuZGlmCisKKy8qICNkZWZpbmUgREVCVUdHSU5HX0VOQUJMRUQgKi8KKworI2RlZmluZSBERUZBVUxUX1NUQVRTICAgICAgICAgICAgICAgICAgIEZBTFNFCisjZGVmaW5lIERFRkFVTFRfV0lORE9XX1NJWkUgICAgICAgICAgICAgMzIKKyNkZWZpbmUgREVGQVVMVF9XSU5ET1dfVEhSRVNIT0xEICAgICAgICA0CisjZGVmaW5lIERFRkFVTFRfVElNRU9VVCAgICAgICAgICAgICAgICAgR1NUX1NFQ09ORCAvIDEwCisKK2VudW0KK3sKKyAgUFJPUF8wLAorICBQUk9QX1NUQVRTLAorICBQUk9QX1dJTkRPV19TSVpFLAorICBQUk9QX1dJTkRPV19USFJFU0hPTEQsCisgIFBST1BfVElNRU9VVAorfTsKKworc3RydWN0IF9Hc3RDbG9ja1ByaXZhdGUKK3sKKyAgZ2ludCBwcmVfY291bnQ7CisgIGdpbnQgcG9zdF9jb3VudDsKK307CisKKy8qIHNlcWxvY2tzICovCisjZGVmaW5lIHJlYWRfc2VxYmVnaW4oY2xvY2spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGdfYXRvbWljX2ludF9nZXQgKCZjbG9jay0+QUJJLnByaXYtPnBvc3RfY291bnQpOworCitzdGF0aWMgaW5saW5lIGdib29sZWFuCityZWFkX3NlcXJldHJ5IChHc3RDbG9jayAqIGNsb2NrLCBnaW50IHNlcSkKK3sKKyAgLyogbm8gcmV0cnkgaWYgdGhlIHNlcW51bSBkaWQgbm90IGNoYW5nZSAqLworICBpZiAoR19MSUtFTFkgKHNlcSA9PSBnX2F0b21pY19pbnRfZ2V0ICgmY2xvY2stPkFCSS5wcml2LT5wcmVfY291bnQpKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgLyogd2FpdCBmb3IgdGhlIHdyaXRlciB0byBmaW5pc2ggYW5kIHJldHJ5ICovCisgIEdTVF9PQkpFQ1RfTE9DSyAoY2xvY2spOworICBHU1RfT0JKRUNUX1VOTE9DSyAoY2xvY2spOworICByZXR1cm4gVFJVRTsKK30KKworI2RlZmluZSB3cml0ZV9zZXFsb2NrKGNsb2NrKSAgICAgICAgICAgICAgICAgICAgICBcCitHX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgR1NUX09CSkVDVF9MT0NLIChjbG9jayk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICBnX2F0b21pY19pbnRfaW5jICgmY2xvY2stPkFCSS5wcml2LT5wcmVfY291bnQpOyAgICAgXAorfSBHX1NUTVRfRU5EOworCisjZGVmaW5lIHdyaXRlX3NlcXVubG9jayhjbG9jaykgICAgICAgICAgICAgICAgICAgIFwKK0dfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBnX2F0b21pY19pbnRfaW5jICgmY2xvY2stPkFCSS5wcml2LT5wb3N0X2NvdW50KTsgICAgXAorICBHU1RfT0JKRUNUX1VOTE9DSyAoY2xvY2spOyAgICAgICAgICAgICAgICAgICAgICBcCit9IEdfU1RNVF9FTkQ7CisKK3N0YXRpYyB2b2lkIGdzdF9jbG9ja19kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KTsKK3N0YXRpYyB2b2lkIGdzdF9jbG9ja19maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7CisKK3N0YXRpYyB2b2lkIGdzdF9jbG9ja19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7CitzdGF0aWMgdm9pZCBnc3RfY2xvY2tfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOworc3RhdGljIHZvaWQgZ3N0X2Nsb2NrX3VwZGF0ZV9zdGF0cyAoR3N0Q2xvY2sgKiBjbG9jayk7CisKKworc3RhdGljIEdzdE9iamVjdENsYXNzICpwYXJlbnRfY2xhc3MgPSBOVUxMOworCisvKiBzdGF0aWMgZ3VpbnQgZ3N0X2Nsb2NrX3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07ICovCisKK3N0YXRpYyBHc3RDbG9ja0lECitnc3RfY2xvY2tfZW50cnlfbmV3IChHc3RDbG9jayAqIGNsb2NrLCBHc3RDbG9ja1RpbWUgdGltZSwKKyAgICBHc3RDbG9ja1RpbWUgaW50ZXJ2YWwsIEdzdENsb2NrRW50cnlUeXBlIHR5cGUpCit7CisgIEdzdENsb2NrRW50cnkgKmVudHJ5OworCisgIGVudHJ5ID0gZ19zbGljZV9uZXcgKEdzdENsb2NrRW50cnkpOworI2lmbmRlZiBHU1RfRElTQUJMRV9UUkFDRQorICBnc3RfYWxsb2NfdHJhY2VfbmV3IChfZ3N0X2Nsb2NrX2VudHJ5X3RyYWNlLCBlbnRyeSk7CisjZW5kaWYKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0xPQ0ssIGNsb2NrLAorICAgICAgImNyZWF0ZWQgZW50cnkgJXAsIHRpbWUgJSIgR1NUX1RJTUVfRk9STUFULCBlbnRyeSwgR1NUX1RJTUVfQVJHUyAodGltZSkpOworCisgIGVudHJ5LT5yZWZjb3VudCA9IDE7CisgIGVudHJ5LT5jbG9jayA9IGNsb2NrOworICBlbnRyeS0+dHlwZSA9IHR5cGU7CisgIGVudHJ5LT50aW1lID0gdGltZTsKKyAgZW50cnktPmludGVydmFsID0gaW50ZXJ2YWw7CisgIGVudHJ5LT5zdGF0dXMgPSBHU1RfQ0xPQ0tfT0s7CisgIGVudHJ5LT5mdW5jID0gTlVMTDsKKyAgZW50cnktPnVzZXJfZGF0YSA9IE5VTEw7CisgIGVudHJ5LT5kZXN0cm95X2RhdGEgPSBOVUxMOworICBlbnRyeS0+dW5zY2hlZHVsZWQgPSBGQUxTRTsKKyAgZW50cnktPndva2VuX3VwID0gRkFMU0U7CisKKyAgcmV0dXJuIChHc3RDbG9ja0lEKSBlbnRyeTsKK30KKworLyogV0FSTklORyA6IERvZXMgbm90IG1vZGlmeSB0aGUgcmVmY291bnQKKyAqIFdBUk5JTkcgOiBEbyBub3QgdXNlIGlmIGEgcGVuZGluZyBjbG9jayBvcGVyYXRpb24gaXMgaGFwcGVuaW5nIG9uIHRoYXQgZW50cnkgKi8KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2Nsb2NrX2VudHJ5X3JlaW5pdCAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0Q2xvY2tFbnRyeSAqIGVudHJ5LAorICAgIEdzdENsb2NrVGltZSB0aW1lLCBHc3RDbG9ja1RpbWUgaW50ZXJ2YWwsIEdzdENsb2NrRW50cnlUeXBlIHR5cGUpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlbnRyeS0+c3RhdHVzICE9IEdTVF9DTE9DS19CVVNZLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlbnRyeS0+Y2xvY2sgPT0gY2xvY2ssIEZBTFNFKTsKKworICBlbnRyeS0+dHlwZSA9IHR5cGU7CisgIGVudHJ5LT50aW1lID0gdGltZTsKKyAgZW50cnktPmludGVydmFsID0gaW50ZXJ2YWw7CisgIGVudHJ5LT5zdGF0dXMgPSBHU1RfQ0xPQ0tfT0s7CisgIGVudHJ5LT51bnNjaGVkdWxlZCA9IEZBTFNFOworICBlbnRyeS0+d29rZW5fdXAgPSBGQUxTRTsKKworICByZXR1cm4gVFJVRTsKK30KKworLyoqCisgKiBnc3RfY2xvY2tfc2luZ2xlX3Nob3RfaWRfcmVpbml0OgorICogQGNsb2NrOiBhICNHc3RDbG9jaworICogQGlkOiBhICNHc3RDbG9ja0lECisgKiBAdGltZTogVGhlIHJlcXVlc3RlZCB0aW1lLgorICoKKyAqIFJlaW5pdGlhbGl6ZXMgdGhlIHByb3ZpZGVkIHNpbmdsZSBzaG90IEBpZCB0byB0aGUgcHJvdmlkZWQgdGltZS4gRG9lcyBub3QKKyAqIG1vZGlmeSB0aGUgcmVmZXJlbmNlIGNvdW50LgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBHc3RDbG9ja0lEIGNvdWxkIGJlIHJlaW5pdGlhbGl6ZWQgdG8gdGhlIHByb3ZpZGVkCisgKiBAdGltZSwgZWxzZSAlRkFMU0UuCisgKgorICogU2luY2U6IDAuMTAuMzIKKyAqLworZ2Jvb2xlYW4KK2dzdF9jbG9ja19zaW5nbGVfc2hvdF9pZF9yZWluaXQgKEdzdENsb2NrICogY2xvY2ssIEdzdENsb2NrSUQgaWQsCisgICAgR3N0Q2xvY2tUaW1lIHRpbWUpCit7CisgIHJldHVybiBnc3RfY2xvY2tfZW50cnlfcmVpbml0IChjbG9jaywgKEdzdENsb2NrRW50cnkgKikgaWQsIHRpbWUsCisgICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FLCBHU1RfQ0xPQ0tfRU5UUllfU0lOR0xFKTsKK30KKworLyoqCisgKiBnc3RfY2xvY2tfcGVyaW9kaWNfaWRfcmVpbml0OgorICogQGNsb2NrOiBhICNHc3RDbG9jaworICogQGlkOiBhICNHc3RDbG9ja0lECisgKiBAc3RhcnRfdGltZTogdGhlIHJlcXVlc3RlZCBzdGFydCB0aW1lCisgKiBAaW50ZXJ2YWw6IHRoZSByZXF1ZXN0ZWQgaW50ZXJ2YWwKKyAqCisgKiBSZWluaXRpYWxpemVzIHRoZSBwcm92aWRlZCBwZXJpb2RpYyBAaWQgdG8gdGhlIHByb3ZpZGVkIHN0YXJ0IHRpbWUgYW5kCisgKiBpbnRlcnZhbC4gRG9lcyBub3QgbW9kaWZ5IHRoZSByZWZlcmVuY2UgY291bnQuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIEdzdENsb2NrSUQgY291bGQgYmUgcmVpbml0aWFsaXplZCB0byB0aGUgcHJvdmlkZWQKKyAqIEB0aW1lLCBlbHNlICVGQUxTRS4KKyAqCisgKiBTaW5jZTogMC4xMC4zMworICoKKyAqLworZ2Jvb2xlYW4KK2dzdF9jbG9ja19wZXJpb2RpY19pZF9yZWluaXQgKEdzdENsb2NrICogY2xvY2ssIEdzdENsb2NrSUQgaWQsCisgICAgR3N0Q2xvY2tUaW1lIHN0YXJ0X3RpbWUsIEdzdENsb2NrVGltZSBpbnRlcnZhbCkKK3sKKyAgcmV0dXJuIGdzdF9jbG9ja19lbnRyeV9yZWluaXQgKGNsb2NrLCAoR3N0Q2xvY2tFbnRyeSAqKSBpZCwgc3RhcnRfdGltZSwKKyAgICAgIGludGVydmFsLCBHU1RfQ0xPQ0tfRU5UUllfUEVSSU9ESUMpOworfQorCisvKioKKyAqIGdzdF9jbG9ja19pZF9yZWY6CisgKiBAaWQ6IFRoZSAjR3N0Q2xvY2tJRCB0byByZWYKKyAqCisgKiBJbmNyZWFzZSB0aGUgcmVmY291bnQgb2YgZ2l2ZW4gQGlkLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogVGhlIHNhbWUgI0dzdENsb2NrSUQgd2l0aCBpbmNyZWFzZWQgcmVmY291bnQuCisgKgorICogTVQgc2FmZS4KKyAqLworR3N0Q2xvY2tJRAorZ3N0X2Nsb2NrX2lkX3JlZiAoR3N0Q2xvY2tJRCBpZCkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGlkICE9IE5VTEwsIE5VTEwpOworCisgIGdfYXRvbWljX2ludF9pbmMgKCYoKEdzdENsb2NrRW50cnkgKikgaWQpLT5yZWZjb3VudCk7CisKKyAgcmV0dXJuIGlkOworfQorCitzdGF0aWMgdm9pZAorX2dzdF9jbG9ja19pZF9mcmVlIChHc3RDbG9ja0lEIGlkKQoreworICBHc3RDbG9ja0VudHJ5ICplbnRyeTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoaWQgIT0gTlVMTCk7CisKKyAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgImZyZWVkIGVudHJ5ICVwIiwgaWQpOworICBlbnRyeSA9IChHc3RDbG9ja0VudHJ5ICopIGlkOworICBpZiAoZW50cnktPmRlc3Ryb3lfZGF0YSkKKyAgICBlbnRyeS0+ZGVzdHJveV9kYXRhIChlbnRyeS0+dXNlcl9kYXRhKTsKKworI2lmbmRlZiBHU1RfRElTQUJMRV9UUkFDRQorICBnc3RfYWxsb2NfdHJhY2VfZnJlZSAoX2dzdF9jbG9ja19lbnRyeV90cmFjZSwgaWQpOworI2VuZGlmCisgIGdfc2xpY2VfZnJlZSAoR3N0Q2xvY2tFbnRyeSwgaWQpOworfQorCisvKioKKyAqIGdzdF9jbG9ja19pZF91bnJlZjoKKyAqIEBpZDogKHRyYW5zZmVyIGZ1bGwpOiBUaGUgI0dzdENsb2NrSUQgdG8gdW5yZWYKKyAqCisgKiBVbnJlZiBnaXZlbiBAaWQuIFdoZW4gdGhlIHJlZmNvdW50IHJlYWNoZXMgMCB0aGUKKyAqICNHc3RDbG9ja0lEIHdpbGwgYmUgZnJlZWQuCisgKgorICogTVQgc2FmZS4KKyAqLwordm9pZAorZ3N0X2Nsb2NrX2lkX3VucmVmIChHc3RDbG9ja0lEIGlkKQoreworICBnaW50IHplcm87CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoaWQgIT0gTlVMTCk7CisKKyAgemVybyA9IGdfYXRvbWljX2ludF9kZWNfYW5kX3Rlc3QgKCYoKEdzdENsb2NrRW50cnkgKikgaWQpLT5yZWZjb3VudCk7CisgIC8qIGlmIHdlIGVuZGVkIHVwIHdpdGggdGhlIHJlZmNvdW50IGF0IHplcm8sIGZyZWUgdGhlIGlkICovCisgIGlmICh6ZXJvKSB7CisgICAgX2dzdF9jbG9ja19pZF9mcmVlIChpZCk7CisgIH0KK30KKworLyoqCisgKiBnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkOgorICogQGNsb2NrOiBUaGUgI0dzdENsb2NrSUQgdG8gZ2V0IGEgc2luZ2xlIHNob3Qgbm90aWZpY2F0aW9uIGZyb20KKyAqIEB0aW1lOiB0aGUgcmVxdWVzdGVkIHRpbWUKKyAqCisgKiBHZXQgYSAjR3N0Q2xvY2tJRCBmcm9tIEBjbG9jayB0byB0cmlnZ2VyIGEgc2luZ2xlIHNob3QKKyAqIG5vdGlmaWNhdGlvbiBhdCB0aGUgcmVxdWVzdGVkIHRpbWUuIFRoZSBzaW5nbGUgc2hvdCBpZCBzaG91bGQgYmUKKyAqIHVucmVmZmVkIGFmdGVyIHVzYWdlLgorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdzdF9jbG9ja19pZF91bnJlZgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0Q2xvY2tJRCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgdGhlCisgKiAgICAgdGltZSBub3RpZmljYXRpb24uCisgKgorICogTVQgc2FmZS4KKyAqLworR3N0Q2xvY2tJRAorZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0Q2xvY2tUaW1lIHRpbWUpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0xPQ0sgKGNsb2NrKSwgTlVMTCk7CisKKyAgcmV0dXJuIGdzdF9jbG9ja19lbnRyeV9uZXcgKGNsb2NrLAorICAgICAgdGltZSwgR1NUX0NMT0NLX1RJTUVfTk9ORSwgR1NUX0NMT0NLX0VOVFJZX1NJTkdMRSk7Cit9CisKKy8qKgorICogZ3N0X2Nsb2NrX25ld19wZXJpb2RpY19pZDoKKyAqIEBjbG9jazogVGhlICNHc3RDbG9ja0lEIHRvIGdldCBhIHBlcmlvZGljIG5vdGlmaWNhdGlvbiBpZCBmcm9tCisgKiBAc3RhcnRfdGltZTogdGhlIHJlcXVlc3RlZCBzdGFydCB0aW1lCisgKiBAaW50ZXJ2YWw6IHRoZSByZXF1ZXN0ZWQgaW50ZXJ2YWwKKyAqCisgKiBHZXQgYW4gSUQgZnJvbSBAY2xvY2sgdG8gdHJpZ2dlciBhIHBlcmlvZGljIG5vdGlmaWNhdGlvbi4KKyAqIFRoZSBwZXJpb2RpYyBub3RpZmljYXRpb25zIHdpbGwgc3RhcnQgYXQgdGltZSBAc3RhcnRfdGltZSBhbmQKKyAqIHdpbGwgdGhlbiBiZSBmaXJlZCB3aXRoIHRoZSBnaXZlbiBAaW50ZXJ2YWwuIEBpZCBzaG91bGQgYmUgdW5yZWZmZWQKKyAqIGFmdGVyIHVzYWdlLgorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdzdF9jbG9ja19pZF91bnJlZgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0Q2xvY2tJRCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgdGhlCisgKiAgICAgdGltZSBub3RpZmljYXRpb24uCisgKgorICogTVQgc2FmZS4KKyAqLworR3N0Q2xvY2tJRAorZ3N0X2Nsb2NrX25ld19wZXJpb2RpY19pZCAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0Q2xvY2tUaW1lIHN0YXJ0X3RpbWUsCisgICAgR3N0Q2xvY2tUaW1lIGludGVydmFsKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NMT0NLIChjbG9jayksIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHN0YXJ0X3RpbWUpLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGludGVydmFsICE9IDAsIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGludGVydmFsKSwgTlVMTCk7CisKKyAgcmV0dXJuIGdzdF9jbG9ja19lbnRyeV9uZXcgKGNsb2NrLAorICAgICAgc3RhcnRfdGltZSwgaW50ZXJ2YWwsIEdTVF9DTE9DS19FTlRSWV9QRVJJT0RJQyk7Cit9CisKKy8qKgorICogZ3N0X2Nsb2NrX2lkX2NvbXBhcmVfZnVuYworICogQGlkMTogQSAjR3N0Q2xvY2tJRAorICogQGlkMjogQSAjR3N0Q2xvY2tJRCB0byBjb21wYXJlIHdpdGgKKyAqCisgKiBDb21wYXJlcyB0aGUgdHdvICNHc3RDbG9ja0lEIGluc3RhbmNlcy4gVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZAorICogYXMgYSBHQ29tcGFyZUZ1bmMgd2hlbiBzb3J0aW5nIGlkcy4KKyAqCisgKiBSZXR1cm5zOiBuZWdhdGl2ZSB2YWx1ZSBpZiBhIDwgYjsgemVybyBpZiBhID0gYjsgcG9zaXRpdmUgdmFsdWUgaWYgYSA+IGIKKyAqCisgKiBNVCBzYWZlLgorICovCitnaW50Citnc3RfY2xvY2tfaWRfY29tcGFyZV9mdW5jIChnY29uc3Rwb2ludGVyIGlkMSwgZ2NvbnN0cG9pbnRlciBpZDIpCit7CisgIEdzdENsb2NrRW50cnkgKmVudHJ5MSwgKmVudHJ5MjsKKworICBlbnRyeTEgPSAoR3N0Q2xvY2tFbnRyeSAqKSBpZDE7CisgIGVudHJ5MiA9IChHc3RDbG9ja0VudHJ5ICopIGlkMjsKKworICBpZiAoR1NUX0NMT0NLX0VOVFJZX1RJTUUgKGVudHJ5MSkgPiBHU1RfQ0xPQ0tfRU5UUllfVElNRSAoZW50cnkyKSkgeworICAgIHJldHVybiAxOworICB9CisgIGlmIChHU1RfQ0xPQ0tfRU5UUllfVElNRSAoZW50cnkxKSA8IEdTVF9DTE9DS19FTlRSWV9USU1FIChlbnRyeTIpKSB7CisgICAgcmV0dXJuIC0xOworICB9CisgIHJldHVybiAwOworfQorCisvKioKKyAqIGdzdF9jbG9ja19pZF9nZXRfdGltZQorICogQGlkOiBUaGUgI0dzdENsb2NrSUQgdG8gcXVlcnkKKyAqCisgKiBHZXQgdGhlIHRpbWUgb2YgdGhlIGNsb2NrIElECisgKgorICogUmV0dXJuczogdGhlIHRpbWUgb2YgdGhlIGdpdmVuIGNsb2NrIGlkLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK0dzdENsb2NrVGltZQorZ3N0X2Nsb2NrX2lkX2dldF90aW1lIChHc3RDbG9ja0lEIGlkKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoaWQgIT0gTlVMTCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisKKyAgcmV0dXJuIEdTVF9DTE9DS19FTlRSWV9USU1FICgoR3N0Q2xvY2tFbnRyeSAqKSBpZCk7Cit9CisKKy8qKgorICogZ3N0X2Nsb2NrX2lkX3dhaXQKKyAqIEBpZDogVGhlICNHc3RDbG9ja0lEIHRvIHdhaXQgb24KKyAqIEBqaXR0ZXI6IChvdXQpIChhbGxvdy1ub25lKTogYSBwb2ludGVyIHRoYXQgd2lsbCBjb250YWluIHRoZSBqaXR0ZXIsCisgKiAgICAgY2FuIGJlICVOVUxMLgorICoKKyAqIFBlcmZvcm0gYSBibG9ja2luZyB3YWl0IG9uIEBpZC4gCisgKiBAaWQgc2hvdWxkIGhhdmUgYmVlbiBjcmVhdGVkIHdpdGggZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCgpCisgKiBvciBnc3RfY2xvY2tfbmV3X3BlcmlvZGljX2lkKCkgYW5kIHNob3VsZCBub3QgaGF2ZSBiZWVuIHVuc2NoZWR1bGVkCisgKiB3aXRoIGEgY2FsbCB0byBnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSgpLiAKKyAqCisgKiBJZiB0aGUgQGppdHRlciBhcmd1bWVudCBpcyBub3QgJU5VTEwgYW5kIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAjR1NUX0NMT0NLX09LCisgKiBvciAjR1NUX0NMT0NLX0VBUkxZLCBpdCB3aWxsIGNvbnRhaW4gdGhlIGRpZmZlcmVuY2UKKyAqIGFnYWluc3QgdGhlIGNsb2NrIGFuZCB0aGUgdGltZSBvZiBAaWQgd2hlbiB0aGlzIG1ldGhvZCB3YXMKKyAqIGNhbGxlZC4gCisgKiBQb3NpdGl2ZSB2YWx1ZXMgaW5kaWNhdGUgaG93IGxhdGUgQGlkIHdhcyByZWxhdGl2ZSB0byB0aGUgY2xvY2sKKyAqIChpbiB3aGljaCBjYXNlIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gI0dTVF9DTE9DS19FQVJMWSkuIAorICogTmVnYXRpdmUgdmFsdWVzIGluZGljYXRlIGhvdyBtdWNoIHRpbWUgd2FzIHNwZW50IHdhaXRpbmcgb24gdGhlIGNsb2NrIAorICogYmVmb3JlIHRoaXMgZnVuY3Rpb24gcmV0dXJuZWQuCisgKgorICogUmV0dXJuczogdGhlIHJlc3VsdCBvZiB0aGUgYmxvY2tpbmcgd2FpdC4gI0dTVF9DTE9DS19FQVJMWSB3aWxsIGJlIHJldHVybmVkCisgKiBpZiB0aGUgY3VycmVudCBjbG9jayB0aW1lIGlzIHBhc3QgdGhlIHRpbWUgb2YgQGlkLCAjR1NUX0NMT0NLX09LIGlmIAorICogQGlkIHdhcyBzY2hlZHVsZWQgaW4gdGltZS4gI0dTVF9DTE9DS19VTlNDSEVEVUxFRCBpZiBAaWQgd2FzIAorICogdW5zY2hlZHVsZWQgd2l0aCBnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSgpLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK0dzdENsb2NrUmV0dXJuCitnc3RfY2xvY2tfaWRfd2FpdCAoR3N0Q2xvY2tJRCBpZCwgR3N0Q2xvY2tUaW1lRGlmZiAqIGppdHRlcikKK3sKKyAgR3N0Q2xvY2tFbnRyeSAqZW50cnk7CisgIEdzdENsb2NrICpjbG9jazsKKyAgR3N0Q2xvY2tSZXR1cm4gcmVzOworICBHc3RDbG9ja1RpbWUgcmVxdWVzdGVkOworICBHc3RDbG9ja0NsYXNzICpjY2xhc3M7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGlkICE9IE5VTEwsIEdTVF9DTE9DS19FUlJPUik7CisKKyAgZW50cnkgPSAoR3N0Q2xvY2tFbnRyeSAqKSBpZDsKKyAgcmVxdWVzdGVkID0gR1NUX0NMT0NLX0VOVFJZX1RJTUUgKGVudHJ5KTsKKworICBjbG9jayA9IEdTVF9DTE9DS19FTlRSWV9DTE9DSyAoZW50cnkpOworCisgIC8qIGNhbid0IHN5bmMgb24gaW52YWxpZCB0aW1lcyAqLworICBpZiAoR19VTkxJS0VMWSAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChyZXF1ZXN0ZWQpKSkKKyAgICBnb3RvIGludmFsaWRfdGltZTsKKworICBjY2xhc3MgPSBHU1RfQ0xPQ0tfR0VUX0NMQVNTIChjbG9jayk7CisKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0xPQ0ssIGNsb2NrLCAid2FpdGluZyBvbiBjbG9jayBlbnRyeSAlcCIsIGlkKTsKKworICAvKiBpZiB3ZSBoYXZlIGEgd2FpdF9qaXR0ZXIgZnVuY3Rpb24sIHVzZSB0aGF0ICovCisgIGlmIChHX1VOTElLRUxZIChjY2xhc3MtPndhaXQgPT0gTlVMTCkpCisgICAgZ290byBub3Rfc3VwcG9ydGVkOworCisgIHJlcyA9IGNjbGFzcy0+d2FpdCAoY2xvY2ssIGVudHJ5LCBqaXR0ZXIpOworCisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NMT0NLLCBjbG9jaywKKyAgICAgICJkb25lIHdhaXRpbmcgZW50cnkgJXAsIHJlczogJWQiLCBpZCwgcmVzKTsKKworICBpZiAoZW50cnktPnR5cGUgPT0gR1NUX0NMT0NLX0VOVFJZX1BFUklPRElDKQorICAgIGVudHJ5LT50aW1lID0gcmVxdWVzdGVkICsgZW50cnktPmludGVydmFsOworCisgIGlmIChHX1VOTElLRUxZIChjbG9jay0+c3RhdHMpKQorICAgIGdzdF9jbG9ja191cGRhdGVfc3RhdHMgKGNsb2NrKTsKKworICByZXR1cm4gcmVzOworCisgIC8qIEVSUk9SUyAqLworaW52YWxpZF90aW1lOgorICB7CisgICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0xPQ0ssIGNsb2NrLAorICAgICAgICAiaW52YWxpZCB0aW1lIHJlcXVlc3RlZCwgcmV0dXJuaW5nIF9CQURUSU1FIik7CisgICAgcmV0dXJuIEdTVF9DTE9DS19CQURUSU1FOworICB9Citub3Rfc3VwcG9ydGVkOgorICB7CisgICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0xPQ0ssIGNsb2NrLCAiY2xvY2sgd2FpdCBpcyBub3Qgc3VwcG9ydGVkIik7CisgICAgcmV0dXJuIEdTVF9DTE9DS19VTlNVUFBPUlRFRDsKKyAgfQorfQorCisvKioKKyAqIGdzdF9jbG9ja19pZF93YWl0X2FzeW5jX2Z1bGw6CisgKiBAaWQ6IGEgI0dzdENsb2NrSUQgdG8gd2FpdCBvbgorICogQGZ1bmM6IFRoZSBjYWxsYmFjayBmdW5jdGlvbgorICogQHVzZXJfZGF0YTogVXNlciBkYXRhIHBhc3NlZCBpbiB0aGUgY2FsbGJhY2sKKyAqIEBkZXN0cm95X2RhdGE6ICNHRGVzdHJveU5vdGlmeSBmb3IgdXNlcl9kYXRhCisgKgorICogUmVnaXN0ZXIgYSBjYWxsYmFjayBvbiB0aGUgZ2l2ZW4gI0dzdENsb2NrSUQgQGlkIHdpdGggdGhlIGdpdmVuCisgKiBmdW5jdGlvbiBhbmQgdXNlcl9kYXRhLiBXaGVuIHBhc3NpbmcgYSAjR3N0Q2xvY2tJRCB3aXRoIGFuIGludmFsaWQKKyAqIHRpbWUgdG8gdGhpcyBmdW5jdGlvbiwgdGhlIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGltbWVkaWF0ZWx5CisgKiB3aXRoICBhIHRpbWUgc2V0IHRvIEdTVF9DTE9DS19USU1FX05PTkUuIFRoZSBjYWxsYmFjayB3aWxsCisgKiBiZSBjYWxsZWQgd2hlbiB0aGUgdGltZSBvZiBAaWQgaGFzIGJlZW4gcmVhY2hlZC4KKyAqCisgKiBUaGUgY2FsbGJhY2sgQGZ1bmMgY2FuIGJlIGludm9rZWQgZnJvbSBhbnkgdGhyZWFkLCBlaXRoZXIgcHJvdmlkZWQgYnkgdGhlCisgKiBjb3JlIG9yIGZyb20gYSBzdHJlYW1pbmcgdGhyZWFkLiBUaGUgYXBwbGljYXRpb24gc2hvdWxkIGJlIHByZXBhcmVkIGZvciB0aGlzLgorICoKKyAqIFJldHVybnM6IHRoZSByZXN1bHQgb2YgdGhlIG5vbiBibG9ja2luZyB3YWl0LgorICoKKyAqIE1UIHNhZmUuCisgKgorICogU2luY2U6IDAuMTAuMzAKKyAqLworR3N0Q2xvY2tSZXR1cm4KK2dzdF9jbG9ja19pZF93YWl0X2FzeW5jX2Z1bGwgKEdzdENsb2NrSUQgaWQsCisgICAgR3N0Q2xvY2tDYWxsYmFjayBmdW5jLCBncG9pbnRlciB1c2VyX2RhdGEsIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lfZGF0YSkKK3sKKyAgR3N0Q2xvY2tFbnRyeSAqZW50cnk7CisgIEdzdENsb2NrICpjbG9jazsKKyAgR3N0Q2xvY2tSZXR1cm4gcmVzOworICBHc3RDbG9ja0NsYXNzICpjY2xhc3M7CisgIEdzdENsb2NrVGltZSByZXF1ZXN0ZWQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGlkICE9IE5VTEwsIEdTVF9DTE9DS19FUlJPUik7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmdW5jICE9IE5VTEwsIEdTVF9DTE9DS19FUlJPUik7CisKKyAgZW50cnkgPSAoR3N0Q2xvY2tFbnRyeSAqKSBpZDsKKyAgcmVxdWVzdGVkID0gR1NUX0NMT0NLX0VOVFJZX1RJTUUgKGVudHJ5KTsKKyAgY2xvY2sgPSBHU1RfQ0xPQ0tfRU5UUllfQ0xPQ0sgKGVudHJ5KTsKKworICAvKiBjYW4ndCBzeW5jIG9uIGludmFsaWQgdGltZXMgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKCFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocmVxdWVzdGVkKSkpCisgICAgZ290byBpbnZhbGlkX3RpbWU7CisKKyAgY2NsYXNzID0gR1NUX0NMT0NLX0dFVF9DTEFTUyAoY2xvY2spOworCisgIGlmIChHX1VOTElLRUxZIChjY2xhc3MtPndhaXRfYXN5bmMgPT0gTlVMTCkpCisgICAgZ290byBub3Rfc3VwcG9ydGVkOworCisgIGVudHJ5LT5mdW5jID0gZnVuYzsKKyAgZW50cnktPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKKyAgZW50cnktPmRlc3Ryb3lfZGF0YSA9IGRlc3Ryb3lfZGF0YTsKKworICByZXMgPSBjY2xhc3MtPndhaXRfYXN5bmMgKGNsb2NrLCBlbnRyeSk7CisKKyAgcmV0dXJuIHJlczsKKworICAvKiBFUlJPUlMgKi8KK2ludmFsaWRfdGltZToKKyAgeworICAgIChmdW5jKSAoY2xvY2ssIEdTVF9DTE9DS19USU1FX05PTkUsIGlkLCB1c2VyX2RhdGEpOworICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NMT0NLLCBjbG9jaywKKyAgICAgICAgImludmFsaWQgdGltZSByZXF1ZXN0ZWQsIHJldHVybmluZyBfQkFEVElNRSIpOworICAgIHJldHVybiBHU1RfQ0xPQ0tfQkFEVElNRTsKKyAgfQorbm90X3N1cHBvcnRlZDoKKyAgeworICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NMT0NLLCBjbG9jaywgImNsb2NrIHdhaXQgaXMgbm90IHN1cHBvcnRlZCIpOworICAgIHJldHVybiBHU1RfQ0xPQ0tfVU5TVVBQT1JURUQ7CisgIH0KK30KKworLyoqCisgKiBnc3RfY2xvY2tfaWRfd2FpdF9hc3luYzoKKyAqIEBpZDogYSAjR3N0Q2xvY2tJRCB0byB3YWl0IG9uCisgKiBAZnVuYzogVGhlIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBAdXNlcl9kYXRhOiBVc2VyIGRhdGEgcGFzc2VkIGluIHRoZSBjYWxsYmFjaworICoKKyAqIFJlZ2lzdGVyIGEgY2FsbGJhY2sgb24gdGhlIGdpdmVuICNHc3RDbG9ja0lEIEBpZCB3aXRoIHRoZSBnaXZlbgorICogZnVuY3Rpb24gYW5kIHVzZXJfZGF0YS4gV2hlbiBwYXNzaW5nIGEgI0dzdENsb2NrSUQgd2l0aCBhbiBpbnZhbGlkCisgKiB0aW1lIHRvIHRoaXMgZnVuY3Rpb24sIHRoZSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBpbW1lZGlhdGVseQorICogd2l0aCAgYSB0aW1lIHNldCB0byBHU1RfQ0xPQ0tfVElNRV9OT05FLiBUaGUgY2FsbGJhY2sgd2lsbAorICogYmUgY2FsbGVkIHdoZW4gdGhlIHRpbWUgb2YgQGlkIGhhcyBiZWVuIHJlYWNoZWQuCisgKgorICogVGhlIGNhbGxiYWNrIEBmdW5jIGNhbiBiZSBpbnZva2VkIGZyb20gYW55IHRocmVhZCwgZWl0aGVyIHByb3ZpZGVkIGJ5IHRoZQorICogY29yZSBvciBmcm9tIGEgc3RyZWFtaW5nIHRocmVhZC4gVGhlIGFwcGxpY2F0aW9uIHNob3VsZCBiZSBwcmVwYXJlZCBmb3IgdGhpcy4KKyAqCisgKiBSZXR1cm5zOiB0aGUgcmVzdWx0IG9mIHRoZSBub24gYmxvY2tpbmcgd2FpdC4KKyAqCisgKiBNVCBzYWZlLgorICovCitHc3RDbG9ja1JldHVybgorZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMgKEdzdENsb2NrSUQgaWQsCisgICAgR3N0Q2xvY2tDYWxsYmFjayBmdW5jLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIHJldHVybiBnc3RfY2xvY2tfaWRfd2FpdF9hc3luY19mdWxsIChpZCwgZnVuYywgdXNlcl9kYXRhLCBOVUxMKTsKK30KKworLyoqCisgKiBnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZToKKyAqIEBpZDogVGhlIGlkIHRvIHVuc2NoZWR1bGUKKyAqCisgKiBDYW5jZWwgYW4gb3V0c3RhbmRpbmcgcmVxdWVzdCB3aXRoIEBpZC4gVGhpcyBjYW4gZWl0aGVyCisgKiBiZSBhbiBvdXRzdGFuZGluZyBhc3luYyBub3RpZmljYXRpb24gb3IgYSBwZW5kaW5nIHN5bmMgbm90aWZpY2F0aW9uLgorICogQWZ0ZXIgdGhpcyBjYWxsLCBAaWQgY2Fubm90IGJlIHVzZWQgYW55bW9yZSB0byByZWNlaXZlIHN5bmMgb3IKKyAqIGFzeW5jIG5vdGlmaWNhdGlvbnMsIHlvdSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyAjR3N0Q2xvY2tJRC4KKyAqCisgKiBNVCBzYWZlLgorICovCit2b2lkCitnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSAoR3N0Q2xvY2tJRCBpZCkKK3sKKyAgR3N0Q2xvY2tFbnRyeSAqZW50cnk7CisgIEdzdENsb2NrICpjbG9jazsKKyAgR3N0Q2xvY2tDbGFzcyAqY2NsYXNzOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKGlkICE9IE5VTEwpOworCisgIGVudHJ5ID0gKEdzdENsb2NrRW50cnkgKikgaWQ7CisgIGNsb2NrID0gZW50cnktPmNsb2NrOworCisgIGNjbGFzcyA9IEdTVF9DTE9DS19HRVRfQ0xBU1MgKGNsb2NrKTsKKworICBpZiAoR19MSUtFTFkgKGNjbGFzcy0+dW5zY2hlZHVsZSkpCisgICAgY2NsYXNzLT51bnNjaGVkdWxlIChjbG9jaywgZW50cnkpOworfQorCisKKy8qCisgKiBHc3RDbG9jayBhYnN0cmFjdCBiYXNlIGNsYXNzIGltcGxlbWVudGF0aW9uCisgKi8KK0dfREVGSU5FX1RZUEUgKEdzdENsb2NrLCBnc3RfY2xvY2ssIEdTVF9UWVBFX09CSkVDVCk7CisKK3N0YXRpYyB2b2lkCitnc3RfY2xvY2tfY2xhc3NfaW5pdCAoR3N0Q2xvY2tDbGFzcyAqIGtsYXNzKQoreworICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOworCisgIHBhcmVudF9jbGFzcyA9IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCAoa2xhc3MpOworCisjaWZuZGVmIEdTVF9ESVNBQkxFX1RSQUNFCisgIF9nc3RfY2xvY2tfZW50cnlfdHJhY2UgPQorICAgICAgZ3N0X2FsbG9jX3RyYWNlX3JlZ2lzdGVyIChHU1RfQ0xPQ0tfRU5UUllfVFJBQ0VfTkFNRSk7CisjZW5kaWYKKworICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3N0X2Nsb2NrX2Rpc3Bvc2U7CisgIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X2Nsb2NrX2ZpbmFsaXplOworICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfY2xvY2tfc2V0X3Byb3BlcnR5OworICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfY2xvY2tfZ2V0X3Byb3BlcnR5OworCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU1RBVFMsCisgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInN0YXRzIiwgIlN0YXRzIiwKKyAgICAgICAgICAiRW5hYmxlIGNsb2NrIHN0YXRzICh1bmltcGxlbWVudGVkKSIsIERFRkFVTFRfU1RBVFMsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfV0lORE9XX1NJWkUsCisgICAgICBnX3BhcmFtX3NwZWNfaW50ICgid2luZG93LXNpemUiLCAiV2luZG93IHNpemUiLAorICAgICAgICAgICJUaGUgc2l6ZSBvZiB0aGUgd2luZG93IHVzZWQgdG8gY2FsY3VsYXRlIHJhdGUgYW5kIG9mZnNldCIsIDIsIDEwMjQsCisgICAgICAgICAgREVGQVVMVF9XSU5ET1dfU0laRSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfV0lORE9XX1RIUkVTSE9MRCwKKyAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJ3aW5kb3ctdGhyZXNob2xkIiwgIldpbmRvdyB0aHJlc2hvbGQiLAorICAgICAgICAgICJUaGUgdGhyZXNob2xkIHRvIHN0YXJ0IGNhbGN1bGF0aW5nIHJhdGUgYW5kIG9mZnNldCIsIDIsIDEwMjQsCisgICAgICAgICAgREVGQVVMVF9XSU5ET1dfVEhSRVNIT0xELAorICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1RJTUVPVVQsCisgICAgICBnX3BhcmFtX3NwZWNfdWludDY0ICgidGltZW91dCIsICJUaW1lb3V0IiwKKyAgICAgICAgICAiVGhlIGFtb3VudCBvZiB0aW1lLCBpbiBuYW5vc2Vjb25kcywgdG8gc2FtcGxlIG1hc3RlciBhbmQgc2xhdmUgY2xvY2tzIiwKKyAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwgREVGQVVMVF9USU1FT1VULAorICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworCisgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAoa2xhc3MsIHNpemVvZiAoR3N0Q2xvY2tQcml2YXRlKSk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfY2xvY2tfaW5pdCAoR3N0Q2xvY2sgKiBjbG9jaykKK3sKKyAgY2xvY2stPmxhc3RfdGltZSA9IDA7CisgIGNsb2NrLT5lbnRyaWVzID0gTlVMTDsKKyAgY2xvY2stPmVudHJpZXNfY2hhbmdlZCA9IGdfY29uZF9uZXcgKCk7CisgIGNsb2NrLT5zdGF0cyA9IEZBTFNFOworCisgIGNsb2NrLT5BQkkucHJpdiA9CisgICAgICBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKGNsb2NrLCBHU1RfVFlQRV9DTE9DSywgR3N0Q2xvY2tQcml2YXRlKTsKKworICBjbG9jay0+aW50ZXJuYWxfY2FsaWJyYXRpb24gPSAwOworICBjbG9jay0+ZXh0ZXJuYWxfY2FsaWJyYXRpb24gPSAwOworICBjbG9jay0+cmF0ZV9udW1lcmF0b3IgPSAxOworICBjbG9jay0+cmF0ZV9kZW5vbWluYXRvciA9IDE7CisKKyAgY2xvY2stPnNsYXZlX2xvY2sgPSBnX211dGV4X25ldyAoKTsKKyAgY2xvY2stPndpbmRvd19zaXplID0gREVGQVVMVF9XSU5ET1dfU0laRTsKKyAgY2xvY2stPndpbmRvd190aHJlc2hvbGQgPSBERUZBVUxUX1dJTkRPV19USFJFU0hPTEQ7CisgIGNsb2NrLT5maWxsaW5nID0gVFJVRTsKKyAgY2xvY2stPnRpbWVfaW5kZXggPSAwOworICBjbG9jay0+dGltZW91dCA9IERFRkFVTFRfVElNRU9VVDsKKyAgY2xvY2stPnRpbWVzID0gZ19uZXcwIChHc3RDbG9ja1RpbWUsIDQgKiBjbG9jay0+d2luZG93X3NpemUpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2Nsb2NrX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpCit7CisgIEdzdENsb2NrICpjbG9jayA9IEdTVF9DTE9DSyAob2JqZWN0KTsKKyAgR3N0Q2xvY2sgKiptYXN0ZXJfcDsKKworICBHU1RfT0JKRUNUX0xPQ0sgKGNsb2NrKTsKKyAgbWFzdGVyX3AgPSAmY2xvY2stPm1hc3RlcjsKKyAgZ3N0X29iamVjdF9yZXBsYWNlICgoR3N0T2JqZWN0ICoqKSBtYXN0ZXJfcCwgTlVMTCk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChjbG9jayk7CisKKyAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfY2xvY2tfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCit7CisgIEdzdENsb2NrICpjbG9jayA9IEdTVF9DTE9DSyAob2JqZWN0KTsKKworICBHU1RfQ0xPQ0tfU0xBVkVfTE9DSyAoY2xvY2spOworICBpZiAoY2xvY2stPmNsb2NraWQpIHsKKyAgICBnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSAoY2xvY2stPmNsb2NraWQpOworICAgIGdzdF9jbG9ja19pZF91bnJlZiAoY2xvY2stPmNsb2NraWQpOworICAgIGNsb2NrLT5jbG9ja2lkID0gTlVMTDsKKyAgfQorICBnX2ZyZWUgKGNsb2NrLT50aW1lcyk7CisgIGNsb2NrLT50aW1lcyA9IE5VTEw7CisgIEdTVF9DTE9DS19TTEFWRV9VTkxPQ0sgKGNsb2NrKTsKKworICBnX2NvbmRfZnJlZSAoY2xvY2stPmVudHJpZXNfY2hhbmdlZCk7CisgIGdfbXV0ZXhfZnJlZSAoY2xvY2stPnNsYXZlX2xvY2spOworCisgIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworLyoqCisgKiBnc3RfY2xvY2tfc2V0X3Jlc29sdXRpb24KKyAqIEBjbG9jazogYSAjR3N0Q2xvY2sKKyAqIEByZXNvbHV0aW9uOiBUaGUgcmVzb2x1dGlvbiB0byBzZXQKKyAqCisgKiBTZXQgdGhlIGFjY3VyYWN5IG9mIHRoZSBjbG9jay4gU29tZSBjbG9ja3MgaGF2ZSB0aGUgcG9zc2liaWxpdHkgdG8gb3BlcmF0ZQorICogd2l0aCBkaWZmZXJlbnQgYWNjdXJhY3kgYXQgdGhlIGV4cGVuc2Ugb2YgbW9yZSByZXNvdXJjZSB1c2FnZS4gVGhlcmUgaXMKKyAqIG5vcm1hbGx5IG5vIG5lZWQgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHJlc29sdXRpb24gb2YgYSBjbG9jay4gVGhlIHJlc29sdXRpb24KKyAqIG9mIGEgY2xvY2sgY2FuIG9ubHkgYmUgY2hhbmdlZCBpZiB0aGUgY2xvY2sgaGFzIHRoZQorICogI0dTVF9DTE9DS19GTEFHX0NBTl9TRVRfUkVTT0xVVElPTiBmbGFnIHNldC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbmV3IHJlc29sdXRpb24gb2YgdGhlIGNsb2NrLgorICovCitHc3RDbG9ja1RpbWUKK2dzdF9jbG9ja19zZXRfcmVzb2x1dGlvbiAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0Q2xvY2tUaW1lIHJlc29sdXRpb24pCit7CisgIEdzdENsb2NrQ2xhc3MgKmNjbGFzczsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NMT0NLIChjbG9jayksIDApOworICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVzb2x1dGlvbiAhPSAwLCAwKTsKKworICBjY2xhc3MgPSBHU1RfQ0xPQ0tfR0VUX0NMQVNTIChjbG9jayk7CisKKyAgaWYgKGNjbGFzcy0+Y2hhbmdlX3Jlc29sdXRpb24pCisgICAgY2xvY2stPnJlc29sdXRpb24gPQorICAgICAgICBjY2xhc3MtPmNoYW5nZV9yZXNvbHV0aW9uIChjbG9jaywgY2xvY2stPnJlc29sdXRpb24sIHJlc29sdXRpb24pOworCisgIHJldHVybiBjbG9jay0+cmVzb2x1dGlvbjsKK30KKworLyoqCisgKiBnc3RfY2xvY2tfZ2V0X3Jlc29sdXRpb24KKyAqIEBjbG9jazogYSAjR3N0Q2xvY2sKKyAqCisgKiBHZXQgdGhlIGFjY3VyYWN5IG9mIHRoZSBjbG9jay4gVGhlIGFjY3VyYWN5IG9mIHRoZSBjbG9jayBpcyB0aGUgZ3JhbnVsYXJpdHkKKyAqIG9mIHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgZ3N0X2Nsb2NrX2dldF90aW1lKCkuCisgKgorICogUmV0dXJuczogdGhlIHJlc29sdXRpb24gb2YgdGhlIGNsb2NrIGluIHVuaXRzIG9mICNHc3RDbG9ja1RpbWUuCisgKgorICogTVQgc2FmZS4KKyAqLworR3N0Q2xvY2tUaW1lCitnc3RfY2xvY2tfZ2V0X3Jlc29sdXRpb24gKEdzdENsb2NrICogY2xvY2spCit7CisgIEdzdENsb2NrQ2xhc3MgKmNjbGFzczsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NMT0NLIChjbG9jayksIDApOworCisgIGNjbGFzcyA9IEdTVF9DTE9DS19HRVRfQ0xBU1MgKGNsb2NrKTsKKworICBpZiAoY2NsYXNzLT5nZXRfcmVzb2x1dGlvbikKKyAgICByZXR1cm4gY2NsYXNzLT5nZXRfcmVzb2x1dGlvbiAoY2xvY2spOworCisgIHJldHVybiAxOworfQorCisvKioKKyAqIGdzdF9jbG9ja19hZGp1c3RfdW5sb2NrZWQKKyAqIEBjbG9jazogYSAjR3N0Q2xvY2sgdG8gdXNlCisgKiBAaW50ZXJuYWw6IGEgY2xvY2sgdGltZQorICoKKyAqIENvbnZlcnRzIHRoZSBnaXZlbiBAaW50ZXJuYWwgY2xvY2sgdGltZSB0byB0aGUgZXh0ZXJuYWwgdGltZSwgYWRqdXN0aW5nIGZvciB0aGUKKyAqIHJhdGUgYW5kIHJlZmVyZW5jZSB0aW1lIHNldCB3aXRoIGdzdF9jbG9ja19zZXRfY2FsaWJyYXRpb24oKSBhbmQgbWFraW5nIHN1cmUKKyAqIHRoYXQgdGhlIHJldHVybmVkIHRpbWUgaXMgaW5jcmVhc2luZy4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlCisgKiBjbG9jaydzIE9CSkVDVF9MT0NLIGhlbGQgYW5kIGlzIG1haW5seSB1c2VkIGJ5IGNsb2NrIHN1YmNsYXNzZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgcmV2ZXJzZSBvZiBnc3RfY2xvY2tfdW5hZGp1c3RfdW5sb2NrZWQoKS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgY29udmVydGVkIHRpbWUgb2YgdGhlIGNsb2NrLgorICovCitHc3RDbG9ja1RpbWUKK2dzdF9jbG9ja19hZGp1c3RfdW5sb2NrZWQgKEdzdENsb2NrICogY2xvY2ssIEdzdENsb2NrVGltZSBpbnRlcm5hbCkKK3sKKyAgR3N0Q2xvY2tUaW1lIHJldCwgY2ludGVybmFsLCBjZXh0ZXJuYWwsIGNudW0sIGNkZW5vbTsKKworICAvKiBnZXQgY2FsaWJyYXRpb24gdmFsdWVzIGZvciByZWFkYWJpbGl0eSAqLworICBjaW50ZXJuYWwgPSBjbG9jay0+aW50ZXJuYWxfY2FsaWJyYXRpb247CisgIGNleHRlcm5hbCA9IGNsb2NrLT5leHRlcm5hbF9jYWxpYnJhdGlvbjsKKyAgY251bSA9IGNsb2NrLT5yYXRlX251bWVyYXRvcjsKKyAgY2Rlbm9tID0gY2xvY2stPnJhdGVfZGVub21pbmF0b3I7CisKKyAgLyogYXZvaWQgZGl2aWRlIGJ5IDAgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKGNkZW5vbSA9PSAwKSkKKyAgICBjbnVtID0gY2Rlbm9tID0gMTsKKworICAvKiBUaGUgZm9ybXVsYSBpcyAoaW50ZXJuYWwgLSBjaW50ZXJuYWwpICogY251bSAvIGNkZW5vbSArIGNleHRlcm5hbAorICAgKgorICAgKiBTaW5jZSB3ZSBkbyBtYXRoIG9uIHVuc2lnbmVkIDY0LWJpdCBpbnRzIHdlIGhhdmUgdG8gc3BlY2lhbCBjYXNlIGZvcgorICAgKiBpbnRlcm5hbCA8IGNpbnRlcm5hbCB0byBnZXQgdGhlIHNpZ24gcmlnaHQuIHRoaXMgY2FzZSBpcyBub3QgdmVyeSBjb21tb24sCisgICAqIHRob3VnaC4KKyAgICovCisgIGlmIChHX0xJS0VMWSAoaW50ZXJuYWwgPj0gY2ludGVybmFsKSkgeworICAgIHJldCA9IGludGVybmFsIC0gY2ludGVybmFsOworICAgIHJldCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAocmV0LCBjbnVtLCBjZGVub20pOworICAgIHJldCArPSBjZXh0ZXJuYWw7CisgIH0gZWxzZSB7CisgICAgcmV0ID0gY2ludGVybmFsIC0gaW50ZXJuYWw7CisgICAgcmV0ID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlIChyZXQsIGNudW0sIGNkZW5vbSk7CisgICAgLyogY2xhbXAgdG8gMCAqLworICAgIGlmIChHX0xJS0VMWSAoY2V4dGVybmFsID4gcmV0KSkKKyAgICAgIHJldCA9IGNleHRlcm5hbCAtIHJldDsKKyAgICBlbHNlCisgICAgICByZXQgPSAwOworICB9CisKKyAgLyogbWFrZSBzdXJlIHRoZSB0aW1lIGlzIGluY3JlYXNpbmcgKi8KKyAgY2xvY2stPmxhc3RfdGltZSA9IE1BWCAocmV0LCBjbG9jay0+bGFzdF90aW1lKTsKKworICByZXR1cm4gY2xvY2stPmxhc3RfdGltZTsKK30KKworLyoqCisgKiBnc3RfY2xvY2tfdW5hZGp1c3RfdW5sb2NrZWQKKyAqIEBjbG9jazogYSAjR3N0Q2xvY2sgdG8gdXNlCisgKiBAZXh0ZXJuYWw6IGFuIGV4dGVybmFsIGNsb2NrIHRpbWUKKyAqCisgKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gQGV4dGVybmFsIGNsb2NrIHRpbWUgdG8gdGhlIGludGVybmFsIHRpbWUgb2YgQGNsb2NrLAorICogdXNpbmcgdGhlIHJhdGUgYW5kIHJlZmVyZW5jZSB0aW1lIHNldCB3aXRoIGdzdF9jbG9ja19zZXRfY2FsaWJyYXRpb24oKS4KKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBjbG9jaydzIE9CSkVDVF9MT0NLIGhlbGQgYW5kCisgKiBpcyBtYWlubHkgdXNlZCBieSBjbG9jayBzdWJjbGFzc2VzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIHJldmVyc2Ugb2YgZ3N0X2Nsb2NrX2FkanVzdF91bmxvY2tlZCgpLgorICoKKyAqIFJldHVybnM6IHRoZSBpbnRlcm5hbCB0aW1lIG9mIHRoZSBjbG9jayBjb3JyZXNwb25kaW5nIHRvIEBleHRlcm5hbC4KKyAqCisgKiBTaW5jZTogMC4xMC4xMworICovCitHc3RDbG9ja1RpbWUKK2dzdF9jbG9ja191bmFkanVzdF91bmxvY2tlZCAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0Q2xvY2tUaW1lIGV4dGVybmFsKQoreworICBHc3RDbG9ja1RpbWUgcmV0LCBjaW50ZXJuYWwsIGNleHRlcm5hbCwgY251bSwgY2Rlbm9tOworCisgIC8qIGdldCBjYWxpYnJhdGlvbiB2YWx1ZXMgZm9yIHJlYWRhYmlsaXR5ICovCisgIGNpbnRlcm5hbCA9IGNsb2NrLT5pbnRlcm5hbF9jYWxpYnJhdGlvbjsKKyAgY2V4dGVybmFsID0gY2xvY2stPmV4dGVybmFsX2NhbGlicmF0aW9uOworICBjbnVtID0gY2xvY2stPnJhdGVfbnVtZXJhdG9yOworICBjZGVub20gPSBjbG9jay0+cmF0ZV9kZW5vbWluYXRvcjsKKworICAvKiBhdm9pZCBkaXZpZGUgYnkgMCAqLworICBpZiAoR19VTkxJS0VMWSAoY251bSA9PSAwKSkKKyAgICBjbnVtID0gY2Rlbm9tID0gMTsKKworICAvKiBUaGUgZm9ybXVsYSBpcyAoZXh0ZXJuYWwgLSBjZXh0ZXJuYWwpICogY2Rlbm9tIC8gY251bSArIGNpbnRlcm5hbCAqLworICBpZiAoR19MSUtFTFkgKGV4dGVybmFsID49IGNleHRlcm5hbCkpIHsKKyAgICByZXQgPSBleHRlcm5hbCAtIGNleHRlcm5hbDsKKyAgICByZXQgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHJldCwgY2Rlbm9tLCBjbnVtKTsKKyAgICByZXQgKz0gY2ludGVybmFsOworICB9IGVsc2UgeworICAgIHJldCA9IGNleHRlcm5hbCAtIGV4dGVybmFsOworICAgIHJldCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAocmV0LCBjZGVub20sIGNudW0pOworICAgIGlmIChHX0xJS0VMWSAoY2ludGVybmFsID4gcmV0KSkKKyAgICAgIHJldCA9IGNpbnRlcm5hbCAtIHJldDsKKyAgICBlbHNlCisgICAgICByZXQgPSAwOworICB9CisgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICogZ3N0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lCisgKiBAY2xvY2s6IGEgI0dzdENsb2NrIHRvIHF1ZXJ5CisgKgorICogR2V0cyB0aGUgY3VycmVudCBpbnRlcm5hbCB0aW1lIG9mIHRoZSBnaXZlbiBjbG9jay4gVGhlIHRpbWUgaXMgcmV0dXJuZWQKKyAqIHVuYWRqdXN0ZWQgZm9yIHRoZSBvZmZzZXQgYW5kIHRoZSByYXRlLgorICoKKyAqIFJldHVybnM6IHRoZSBpbnRlcm5hbCB0aW1lIG9mIHRoZSBjbG9jay4gT3IgR1NUX0NMT0NLX1RJTUVfTk9ORSB3aGVuCisgKiBnaXZlbiBpbnZhbGlkIGlucHV0LgorICoKKyAqIE1UIHNhZmUuCisgKi8KK0dzdENsb2NrVGltZQorZ3N0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lIChHc3RDbG9jayAqIGNsb2NrKQoreworICBHc3RDbG9ja1RpbWUgcmV0OworICBHc3RDbG9ja0NsYXNzICpjY2xhc3M7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DTE9DSyAoY2xvY2spLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKworICBjY2xhc3MgPSBHU1RfQ0xPQ0tfR0VUX0NMQVNTIChjbG9jayk7CisKKyAgaWYgKEdfVU5MSUtFTFkgKGNjbGFzcy0+Z2V0X2ludGVybmFsX3RpbWUgPT0gTlVMTCkpCisgICAgZ290byBub3Rfc3VwcG9ydGVkOworCisgIHJldCA9IGNjbGFzcy0+Z2V0X2ludGVybmFsX3RpbWUgKGNsb2NrKTsKKworICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9DTE9DSywgY2xvY2ssICJpbnRlcm5hbCB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgIEdTVF9USU1FX0FSR1MgKHJldCkpOworCisgIHJldHVybiByZXQ7CisKKyAgLyogRVJST1JTICovCitub3Rfc3VwcG9ydGVkOgorICB7CisgICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0xPQ0ssIGNsb2NrLAorICAgICAgICAiaW50ZXJuYWwgdGltZSBub3Qgc3VwcG9ydGVkLCByZXR1cm4gMCIpOworICAgIHJldHVybiBHX0dJTlQ2NF9DT05TVEFOVCAoMCk7CisgIH0KK30KKworLyoqCisgKiBnc3RfY2xvY2tfZ2V0X3RpbWUKKyAqIEBjbG9jazogYSAjR3N0Q2xvY2sgdG8gcXVlcnkKKyAqCisgKiBHZXRzIHRoZSBjdXJyZW50IHRpbWUgb2YgdGhlIGdpdmVuIGNsb2NrLiBUaGUgdGltZSBpcyBhbHdheXMKKyAqIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBhbmQgYWRqdXN0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50CisgKiBvZmZzZXQgYW5kIHJhdGUuCisgKgorICogUmV0dXJuczogdGhlIHRpbWUgb2YgdGhlIGNsb2NrLiBPciBHU1RfQ0xPQ0tfVElNRV9OT05FIHdoZW4KKyAqIGdpdmVuIGludmFsaWQgaW5wdXQuCisgKgorICogTVQgc2FmZS4KKyAqLworR3N0Q2xvY2tUaW1lCitnc3RfY2xvY2tfZ2V0X3RpbWUgKEdzdENsb2NrICogY2xvY2spCit7CisgIEdzdENsb2NrVGltZSByZXQ7CisgIGdpbnQgc2VxOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0xPQ0sgKGNsb2NrKSwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisKKyAgZG8geworICAgIC8qIHJlZ2V0IHRoZSBpbnRlcm5hbCB0aW1lIHdoZW4gd2UgcmV0cnkgdG8gZ2V0IHRoZSBtb3N0IGN1cnJlbnQKKyAgICAgKiB0aW1ldmFsdWUgKi8KKyAgICByZXQgPSBnc3RfY2xvY2tfZ2V0X2ludGVybmFsX3RpbWUgKGNsb2NrKTsKKworICAgIHNlcSA9IHJlYWRfc2VxYmVnaW4gKGNsb2NrKTsKKyAgICAvKiB0aGlzIHdpbGwgc2NhbGUgZm9yIHJhdGUgYW5kIG9mZnNldCAqLworICAgIHJldCA9IGdzdF9jbG9ja19hZGp1c3RfdW5sb2NrZWQgKGNsb2NrLCByZXQpOworICB9IHdoaWxlIChyZWFkX3NlcXJldHJ5IChjbG9jaywgc2VxKSk7CisKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0xPQ0ssIGNsb2NrLCAiYWRqdXN0ZWQgdGltZSAlIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICBHU1RfVElNRV9BUkdTIChyZXQpKTsKKworICByZXR1cm4gcmV0OworfQorCisvKioKKyAqIGdzdF9jbG9ja19zZXRfY2FsaWJyYXRpb24KKyAqIEBjbG9jazogYSAjR3N0Q2xvY2sgdG8gY2FsaWJyYXRlCisgKiBAaW50ZXJuYWw6IGEgcmVmZXJlbmNlIGludGVybmFsIHRpbWUKKyAqIEBleHRlcm5hbDogYSByZWZlcmVuY2UgZXh0ZXJuYWwgdGltZQorICogQHJhdGVfbnVtOiB0aGUgbnVtZXJhdG9yIG9mIHRoZSByYXRlIG9mIHRoZSBjbG9jayByZWxhdGl2ZSB0byBpdHMKKyAqICAgICAgICAgICAgaW50ZXJuYWwgdGltZSAKKyAqIEByYXRlX2Rlbm9tOiB0aGUgZGVub21pbmF0b3Igb2YgdGhlIHJhdGUgb2YgdGhlIGNsb2NrCisgKgorICogQWRqdXN0cyB0aGUgcmF0ZSBhbmQgdGltZSBvZiBAY2xvY2suIEEgcmF0ZSBvZiAxLzEgaXMgdGhlIG5vcm1hbCBzcGVlZCBvZgorICogdGhlIGNsb2NrLiBWYWx1ZXMgYmlnZ2VyIHRoYW4gMS8xIG1ha2UgdGhlIGNsb2NrIGdvIGZhc3Rlci4KKyAqCisgKiBAaW50ZXJuYWwgYW5kIEBleHRlcm5hbCBhcmUgY2FsaWJyYXRpb24gcGFyYW1ldGVycyB0aGF0IGFycmFuZ2UgdGhhdAorICogZ3N0X2Nsb2NrX2dldF90aW1lKCkgc2hvdWxkIGhhdmUgYmVlbiBAZXh0ZXJuYWwgYXQgaW50ZXJuYWwgdGltZSBAaW50ZXJuYWwuCisgKiBUaGlzIGludGVybmFsIHRpbWUgc2hvdWxkIG5vdCBiZSBpbiB0aGUgZnV0dXJlOyB0aGF0IGlzLCBpdCBzaG91bGQgYmUgbGVzcworICogdGhhbiB0aGUgdmFsdWUgb2YgZ3N0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lKCkgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqCisgKiBTdWJzZXF1ZW50IGNhbGxzIHRvIGdzdF9jbG9ja19nZXRfdGltZSgpIHdpbGwgcmV0dXJuIGNsb2NrIHRpbWVzIGNvbXB1dGVkIGFzCisgKiBmb2xsb3dzOgorICoKKyAqIDxwcm9ncmFtbGlzdGluZz4KKyAqICAgdGltZSA9IChpbnRlcm5hbF90aW1lIC0gaW50ZXJuYWwpICogcmF0ZV9udW0gLyByYXRlX2Rlbm9tICsgZXh0ZXJuYWwKKyAqIDwvcHJvZ3JhbWxpc3Rpbmc+CisgKgorICogVGhpcyBmb3JtdWxhIGlzIGltcGxlbWVudGVkIGluIGdzdF9jbG9ja19hZGp1c3RfdW5sb2NrZWQoKS4gT2YgY291cnNlLCBpdAorICogdHJpZXMgdG8gZG8gdGhlIGludGVnZXIgYXJpdGhtZXRpYyBhcyBwcmVjaXNlbHkgYXMgcG9zc2libGUuCisgKgorICogTm90ZSB0aGF0IGdzdF9jbG9ja19nZXRfdGltZSgpIGFsd2F5cyByZXR1cm5zIGluY3JlYXNpbmcgdmFsdWVzIHNvIHdoZW4geW91CisgKiBtb3ZlIHRoZSBjbG9jayBiYWNrd2FyZHMsIGdzdF9jbG9ja19nZXRfdGltZSgpIHdpbGwgcmVwb3J0IHRoZSBwcmV2aW91cyB2YWx1ZQorICogdW50aWwgdGhlIGNsb2NrIGNhdGNoZXMgdXAuCisgKgorICogTVQgc2FmZS4KKyAqLwordm9pZAorZ3N0X2Nsb2NrX3NldF9jYWxpYnJhdGlvbiAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0Q2xvY2tUaW1lIGludGVybmFsLCBHc3RDbG9ja1RpbWUKKyAgICBleHRlcm5hbCwgR3N0Q2xvY2tUaW1lIHJhdGVfbnVtLCBHc3RDbG9ja1RpbWUgcmF0ZV9kZW5vbSkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0NMT0NLIChjbG9jaykpOworICBnX3JldHVybl9pZl9mYWlsIChyYXRlX251bSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAocmF0ZV9kZW5vbSA+IDAgJiYgcmF0ZV9kZW5vbSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKworICB3cml0ZV9zZXFsb2NrIChjbG9jayk7CisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NMT0NLLCBjbG9jaywKKyAgICAgICJpbnRlcm5hbCAlIiBHU1RfVElNRV9GT1JNQVQgIiBleHRlcm5hbCAlIiBHU1RfVElNRV9GT1JNQVQgIiAlIgorICAgICAgR19HVUlOVDY0X0ZPUk1BVCAiLyUiIEdfR1VJTlQ2NF9GT1JNQVQgIiA9ICVmIiwgR1NUX1RJTUVfQVJHUyAoaW50ZXJuYWwpLAorICAgICAgR1NUX1RJTUVfQVJHUyAoZXh0ZXJuYWwpLCByYXRlX251bSwgcmF0ZV9kZW5vbSwKKyAgICAgIGdzdF9ndWludDY0X3RvX2dkb3VibGUgKHJhdGVfbnVtKSAvIGdzdF9ndWludDY0X3RvX2dkb3VibGUgKHJhdGVfZGVub20pKTsKKworICBjbG9jay0+aW50ZXJuYWxfY2FsaWJyYXRpb24gPSBpbnRlcm5hbDsKKyAgY2xvY2stPmV4dGVybmFsX2NhbGlicmF0aW9uID0gZXh0ZXJuYWw7CisgIGNsb2NrLT5yYXRlX251bWVyYXRvciA9IHJhdGVfbnVtOworICBjbG9jay0+cmF0ZV9kZW5vbWluYXRvciA9IHJhdGVfZGVub207CisgIHdyaXRlX3NlcXVubG9jayAoY2xvY2spOworfQorCisvKioKKyAqIGdzdF9jbG9ja19nZXRfY2FsaWJyYXRpb24KKyAqIEBjbG9jazogYSAjR3N0Q2xvY2sgCisgKiBAaW50ZXJuYWw6IChvdXQpIChhbGxvdy1ub25lKTogYSBsb2NhdGlvbiB0byBzdG9yZSB0aGUgaW50ZXJuYWwgdGltZQorICogQGV4dGVybmFsOiAob3V0KSAoYWxsb3ctbm9uZSk6IGEgbG9jYXRpb24gdG8gc3RvcmUgdGhlIGV4dGVybmFsIHRpbWUKKyAqIEByYXRlX251bTogKG91dCkgKGFsbG93LW5vbmUpOiBhIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSByYXRlIG51bWVyYXRvcgorICogQHJhdGVfZGVub206IChvdXQpIChhbGxvdy1ub25lKTogYSBsb2NhdGlvbiB0byBzdG9yZSB0aGUgcmF0ZSBkZW5vbWluYXRvcgorICoKKyAqIEdldHMgdGhlIGludGVybmFsIHJhdGUgYW5kIHJlZmVyZW5jZSB0aW1lIG9mIEBjbG9jay4gU2VlCisgKiBnc3RfY2xvY2tfc2V0X2NhbGlicmF0aW9uKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogQGludGVybmFsLCBAZXh0ZXJuYWwsIEByYXRlX251bSwgYW5kIEByYXRlX2Rlbm9tIGNhbiBiZSBsZWZ0ICVOVUxMIGlmIHRoZQorICogY2FsbGVyIGlzIG5vdCBpbnRlcmVzdGVkIGluIHRoZSB2YWx1ZXMuCisgKgorICogTVQgc2FmZS4KKyAqLwordm9pZAorZ3N0X2Nsb2NrX2dldF9jYWxpYnJhdGlvbiAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0Q2xvY2tUaW1lICogaW50ZXJuYWwsCisgICAgR3N0Q2xvY2tUaW1lICogZXh0ZXJuYWwsIEdzdENsb2NrVGltZSAqIHJhdGVfbnVtLCBHc3RDbG9ja1RpbWUgKiByYXRlX2Rlbm9tKQoreworICBnaW50IHNlcTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQ0xPQ0sgKGNsb2NrKSk7CisKKyAgZG8geworICAgIHNlcSA9IHJlYWRfc2VxYmVnaW4gKGNsb2NrKTsKKyAgICBpZiAocmF0ZV9udW0pCisgICAgICAqcmF0ZV9udW0gPSBjbG9jay0+cmF0ZV9udW1lcmF0b3I7CisgICAgaWYgKHJhdGVfZGVub20pCisgICAgICAqcmF0ZV9kZW5vbSA9IGNsb2NrLT5yYXRlX2Rlbm9taW5hdG9yOworICAgIGlmIChleHRlcm5hbCkKKyAgICAgICpleHRlcm5hbCA9IGNsb2NrLT5leHRlcm5hbF9jYWxpYnJhdGlvbjsKKyAgICBpZiAoaW50ZXJuYWwpCisgICAgICAqaW50ZXJuYWwgPSBjbG9jay0+aW50ZXJuYWxfY2FsaWJyYXRpb247CisgIH0gd2hpbGUgKHJlYWRfc2VxcmV0cnkgKGNsb2NrLCBzZXEpKTsKK30KKworLyogd2lsbCBiZSBjYWxsZWQgcmVwZWF0ZWRseSB0byBzYW1wbGUgdGhlIG1hc3RlciBhbmQgc2xhdmUgY2xvY2sKKyAqIHRvIHJlY2FsaWJyYXRlIHRoZSBjbG9jayAgKi8KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2Nsb2NrX3NsYXZlX2NhbGxiYWNrIChHc3RDbG9jayAqIG1hc3RlciwgR3N0Q2xvY2tUaW1lIHRpbWUsCisgICAgR3N0Q2xvY2tJRCBpZCwgR3N0Q2xvY2sgKiBjbG9jaykKK3sKKyAgR3N0Q2xvY2tUaW1lIHN0aW1lLCBtdGltZTsKKyAgZ2RvdWJsZSByX3NxdWFyZWQ7CisKKyAgc3RpbWUgPSBnc3RfY2xvY2tfZ2V0X2ludGVybmFsX3RpbWUgKGNsb2NrKTsKKyAgbXRpbWUgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKG1hc3Rlcik7CisKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0xPQ0ssIGNsb2NrLAorICAgICAgIm1hc3RlciAlIiBHU1RfVElNRV9GT1JNQVQgIiwgc2xhdmUgJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgR1NUX1RJTUVfQVJHUyAobXRpbWUpLCBHU1RfVElNRV9BUkdTIChzdGltZSkpOworCisgIGdzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb24gKGNsb2NrLCBzdGltZSwgbXRpbWUsICZyX3NxdWFyZWQpOworCisgIC8qIEZJWE1FLCB3ZSBjYW4gdXNlIHRoZSByX3NxdWFyZWQgdmFsdWUgdG8gYWRqdXN0IHRoZSB0aW1lb3V0CisgICAqIHZhbHVlIG9mIHRoZSBjbG9ja2lkICovCisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qKgorICogZ3N0X2Nsb2NrX3NldF9tYXN0ZXIKKyAqIEBjbG9jazogYSAjR3N0Q2xvY2sgCisgKiBAbWFzdGVyOiAoYWxsb3ctbm9uZSk6IGEgbWFzdGVyICNHc3RDbG9jayAKKyAqCisgKiBTZXQgQG1hc3RlciBhcyB0aGUgbWFzdGVyIGNsb2NrIGZvciBAY2xvY2suIEBjbG9jayB3aWxsIGJlIGF1dG9tYXRpY2FsbHkKKyAqIGNhbGlicmF0ZWQgc28gdGhhdCBnc3RfY2xvY2tfZ2V0X3RpbWUoKSByZXBvcnRzIHRoZSBzYW1lIHRpbWUgYXMgdGhlCisgKiBtYXN0ZXIgY2xvY2suICAKKyAqIAorICogQSBjbG9jayBwcm92aWRlciB0aGF0IHNsYXZlcyBpdHMgY2xvY2sgdG8gYSBtYXN0ZXIgY2FuIGdldCB0aGUgY3VycmVudAorICogY2FsaWJyYXRpb24gdmFsdWVzIHdpdGggZ3N0X2Nsb2NrX2dldF9jYWxpYnJhdGlvbigpLgorICoKKyAqIEBtYXN0ZXIgY2FuIGJlICVOVUxMIGluIHdoaWNoIGNhc2UgQGNsb2NrIHdpbGwgbm90IGJlIHNsYXZlZCBhbnltb3JlLiBJdCB3aWxsCisgKiBob3dldmVyIGtlZXAgcmVwb3J0aW5nIGl0cyB0aW1lIGFkanVzdGVkIHdpdGggdGhlIGxhc3QgY29uZmlndXJlZCByYXRlIAorICogYW5kIHRpbWUgb2Zmc2V0cy4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgY2xvY2sgaXMgY2FwYWJsZSBvZiBiZWluZyBzbGF2ZWQgdG8gYSBtYXN0ZXIgY2xvY2suIAorICogVHJ5aW5nIHRvIHNldCBhIG1hc3RlciBvbiBhIGNsb2NrIHdpdGhvdXQgdGhlIAorICogI0dTVF9DTE9DS19GTEFHX0NBTl9TRVRfTUFTVEVSIGZsYWcgd2lsbCBtYWtlIHRoaXMgZnVuY3Rpb24gcmV0dXJuICVGQUxTRS4KKyAqCisgKiBNVCBzYWZlLgorICovCitnYm9vbGVhbgorZ3N0X2Nsb2NrX3NldF9tYXN0ZXIgKEdzdENsb2NrICogY2xvY2ssIEdzdENsb2NrICogbWFzdGVyKQoreworICBHc3RDbG9jayAqKm1hc3Rlcl9wOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0xPQ0sgKGNsb2NrKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAobWFzdGVyICE9IGNsb2NrLCBGQUxTRSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChjbG9jayk7CisgIC8qIHdlIGFsd2F5cyBhbGxvdyBzZXR0aW5nIHRoZSBtYXN0ZXIgdG8gTlVMTCAqLworICBpZiAobWFzdGVyICYmICFHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChjbG9jaywgR1NUX0NMT0NLX0ZMQUdfQ0FOX1NFVF9NQVNURVIpKQorICAgIGdvdG8gbm90X3N1cHBvcnRlZDsKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0xPQ0ssIGNsb2NrLAorICAgICAgInNsYXZpbmcgJXAgdG8gbWFzdGVyIGNsb2NrICVwIiwgY2xvY2ssIG1hc3Rlcik7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChjbG9jayk7CisKKyAgR1NUX0NMT0NLX1NMQVZFX0xPQ0sgKGNsb2NrKTsKKyAgaWYgKGNsb2NrLT5jbG9ja2lkKSB7CisgICAgZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUgKGNsb2NrLT5jbG9ja2lkKTsKKyAgICBnc3RfY2xvY2tfaWRfdW5yZWYgKGNsb2NrLT5jbG9ja2lkKTsKKyAgICBjbG9jay0+Y2xvY2tpZCA9IE5VTEw7CisgIH0KKyAgaWYgKG1hc3RlcikgeworICAgIGNsb2NrLT5maWxsaW5nID0gVFJVRTsKKyAgICBjbG9jay0+dGltZV9pbmRleCA9IDA7CisgICAgLyogdXNlIHRoZSBtYXN0ZXIgcGVyaW9kaWMgaWQgdG8gc2NoZWR1bGUgc2FtcGxpbmcgYW5kCisgICAgICogY2xvY2sgY2FsaWJyYXRpb24uICovCisgICAgY2xvY2stPmNsb2NraWQgPSBnc3RfY2xvY2tfbmV3X3BlcmlvZGljX2lkIChtYXN0ZXIsCisgICAgICAgIGdzdF9jbG9ja19nZXRfdGltZSAobWFzdGVyKSwgY2xvY2stPnRpbWVvdXQpOworICAgIGdzdF9jbG9ja19pZF93YWl0X2FzeW5jX2Z1bGwgKGNsb2NrLT5jbG9ja2lkLAorICAgICAgICAoR3N0Q2xvY2tDYWxsYmFjaykgZ3N0X2Nsb2NrX3NsYXZlX2NhbGxiYWNrLAorICAgICAgICBnc3Rfb2JqZWN0X3JlZiAoY2xvY2spLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9vYmplY3RfdW5yZWYpOworICB9CisgIEdTVF9DTE9DS19TTEFWRV9VTkxPQ0sgKGNsb2NrKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKGNsb2NrKTsKKyAgbWFzdGVyX3AgPSAmY2xvY2stPm1hc3RlcjsKKyAgZ3N0X29iamVjdF9yZXBsYWNlICgoR3N0T2JqZWN0ICoqKSBtYXN0ZXJfcCwgKEdzdE9iamVjdCAqKSBtYXN0ZXIpOworICBHU1RfT0JKRUNUX1VOTE9DSyAoY2xvY2spOworCisgIHJldHVybiBUUlVFOworCisgIC8qIEVSUk9SUyAqLworbm90X3N1cHBvcnRlZDoKKyAgeworICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NMT0NLLCBjbG9jaywKKyAgICAgICAgImNhbm5vdCBiZSBzbGF2ZWQgdG8gYSBtYXN0ZXIgY2xvY2siKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoY2xvY2spOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCisvKioKKyAqIGdzdF9jbG9ja19nZXRfbWFzdGVyOgorICogQGNsb2NrOiBhICNHc3RDbG9jayAKKyAqCisgKiBHZXQgdGhlIG1hc3RlciBjbG9jayB0aGF0IEBjbG9jayBpcyBzbGF2ZWQgdG8gb3IgJU5VTEwgd2hlbiB0aGUgY2xvY2sgaXMKKyAqIG5vdCBzbGF2ZWQgdG8gYW55IG1hc3RlciBjbG9jay4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbWFzdGVyICNHc3RDbG9jayBvciAlTlVMTCB3aGVuIHRoaXMgY2xvY2sgaXMKKyAqICAgICBub3Qgc2xhdmVkIHRvIGEgbWFzdGVyIGNsb2NrLiBVbnJlZiBhZnRlciB1c2FnZS4KKyAqCisgKiBNVCBzYWZlLgorICovCitHc3RDbG9jayAqCitnc3RfY2xvY2tfZ2V0X21hc3RlciAoR3N0Q2xvY2sgKiBjbG9jaykKK3sKKyAgR3N0Q2xvY2sgKnJlc3VsdCA9IE5VTEw7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DTE9DSyAoY2xvY2spLCBOVUxMKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKGNsb2NrKTsKKyAgaWYgKGNsb2NrLT5tYXN0ZXIpCisgICAgcmVzdWx0ID0gZ3N0X29iamVjdF9yZWYgKGNsb2NrLT5tYXN0ZXIpOworICBHU1RfT0JKRUNUX1VOTE9DSyAoY2xvY2spOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIGh0dHA6Ly9tYXRod29ybGQud29sZnJhbS5jb20vTGVhc3RTcXVhcmVzRml0dGluZy5odG1sCisgKiB3aXRoIFNMQVZFX0xPQ0sKKyAqLworc3RhdGljIGdib29sZWFuCitkb19saW5lYXJfcmVncmVzc2lvbiAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0Q2xvY2tUaW1lICogbV9udW0sCisgICAgR3N0Q2xvY2tUaW1lICogbV9kZW5vbSwgR3N0Q2xvY2tUaW1lICogYiwgR3N0Q2xvY2tUaW1lICogeGJhc2UsCisgICAgZ2RvdWJsZSAqIHJfc3F1YXJlZCkKK3sKKyAgR3N0Q2xvY2tUaW1lICpuZXd4LCAqbmV3eTsKKyAgR3N0Q2xvY2tUaW1lIHhtaW4sIHltaW4sIHhiYXIsIHliYXIsIHhiYXI0LCB5YmFyNDsKKyAgR3N0Q2xvY2tUaW1lRGlmZiBzeHgsIHN4eSwgc3l5OworICBHc3RDbG9ja1RpbWUgKngsICp5OworICBnaW50IGksIGo7CisgIGd1aW50IG47CisKKyAgeGJhciA9IHliYXIgPSBzeHggPSBzeXkgPSBzeHkgPSAwOworCisgIHggPSBjbG9jay0+dGltZXM7CisgIHkgPSBjbG9jay0+dGltZXMgKyAyOworICBuID0gY2xvY2stPmZpbGxpbmcgPyBjbG9jay0+dGltZV9pbmRleCA6IGNsb2NrLT53aW5kb3dfc2l6ZTsKKworI2lmZGVmIERFQlVHR0lOR19FTkFCTEVECisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NMT0NLLCBjbG9jaywgImRvaW5nIHJlZ3Jlc3Npb24gb246Iik7CisgIGZvciAoaSA9IGogPSAwOyBpIDwgbjsgaSsrLCBqICs9IDQpCisgICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0xPQ0ssIGNsb2NrLAorICAgICAgICAiICAlIiBHX0dVSU5UNjRfRk9STUFUICIgICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHhbal0sIHlbal0pOworI2VuZGlmCisKKyAgeG1pbiA9IHltaW4gPSBHX01BWFVJTlQ2NDsKKyAgZm9yIChpID0gaiA9IDA7IGkgPCBuOyBpKyssIGogKz0gNCkgeworICAgIHhtaW4gPSBNSU4gKHhtaW4sIHhbal0pOworICAgIHltaW4gPSBNSU4gKHltaW4sIHlbal0pOworICB9CisKKyNpZmRlZiBERUJVR0dJTkdfRU5BQkxFRAorICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9DTE9DSywgY2xvY2ssICJtaW4geDogJSIgR19HVUlOVDY0X0ZPUk1BVCwKKyAgICAgIHhtaW4pOworICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9DTE9DSywgY2xvY2ssICJtaW4geTogJSIgR19HVUlOVDY0X0ZPUk1BVCwKKyAgICAgIHltaW4pOworI2VuZGlmCisKKyAgbmV3eCA9IGNsb2NrLT50aW1lcyArIDE7CisgIG5ld3kgPSBjbG9jay0+dGltZXMgKyAzOworCisgIC8qIHN0cmlwIG9mZiB1bm5lY2Vzc2FyeSBiaXRzIG9mIHByZWNpc2lvbiAqLworICBmb3IgKGkgPSBqID0gMDsgaSA8IG47IGkrKywgaiArPSA0KSB7CisgICAgbmV3eFtqXSA9IHhbal0gLSB4bWluOworICAgIG5ld3lbal0gPSB5W2pdIC0geW1pbjsKKyAgfQorCisjaWZkZWYgREVCVUdHSU5HX0VOQUJMRUQKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0xPQ0ssIGNsb2NrLCAicmVkdWNlZCBudW1iZXJzOiIpOworICBmb3IgKGkgPSBqID0gMDsgaSA8IG47IGkrKywgaiArPSA0KQorICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NMT0NLLCBjbG9jaywKKyAgICAgICAgIiAgJSIgR19HVUlOVDY0X0ZPUk1BVCAiICAlIiBHX0dVSU5UNjRfRk9STUFULCBuZXd4W2pdLCBuZXd5W2pdKTsKKyNlbmRpZgorCisgIC8qIGhhdmUgdG8gZG8gdGhpcyBwcmVjaXNlbHkgb3RoZXJ3aXNlIHRoZSByZXN1bHRzIGFyZSBwcmV0dHkgbXVjaCB1c2VsZXNzLgorICAgKiBzaG91bGQgZ3VhcmFudGVlIHRoYXQgbm9uZSBvZiB0aGVzZSBhY2N1bXVsYXRvcnMgY2FuIG92ZXJmbG93ICovCisKKyAgLyogcXVhbnRpdGllcyBvbiB0aGUgb3JkZXIgb2YgMWUxMCAtPiAzMCBiaXRzOyB3aW5kb3cgc2l6ZSBhIG1heCBvZiAyXjEwLCBzbworICAgICB0aGlzIGFkZGl0aW9uIGNvdWxkIGVuZCB1cCBhcm91bmQgMl40MCBvciBzbyAtLSBhbXBsZSBoZWFkcm9vbSAqLworICBmb3IgKGkgPSBqID0gMDsgaSA8IG47IGkrKywgaiArPSA0KSB7CisgICAgeGJhciArPSBuZXd4W2pdOworICAgIHliYXIgKz0gbmV3eVtqXTsKKyAgfQorICB4YmFyIC89IG47CisgIHliYXIgLz0gbjsKKworI2lmZGVmIERFQlVHR0lOR19FTkFCTEVECisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NMT0NLLCBjbG9jaywgIiAgeGJhciAgPSAlIiBHX0dVSU5UNjRfRk9STUFULAorICAgICAgeGJhcik7CisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NMT0NLLCBjbG9jaywgIiAgeWJhciAgPSAlIiBHX0dVSU5UNjRfRk9STUFULAorICAgICAgeWJhcik7CisjZW5kaWYKKworICAvKiBtdWx0aXBseWluZyBkaXJlY3RseSB3b3VsZCBnaXZlIHF1YW50aXRpZXMgb24gdGhlIG9yZGVyIG9mIDFlMjAgLT4gNjAgYml0czsKKyAgICAgdGltZXMgdGhlIHdpbmRvdyBzaXplIHRoYXQncyA3MCB3aGljaCBpcyB0b28gbXVjaC4gSW5zdGVhZCB3ZSAoMSkgc3VidHJhY3QKKyAgICAgb2ZmIHRoZSB4YmFyKnliYXIgaW4gdGhlIGxvb3AgaW5zdGVhZCBvZiBhZnRlciwgdG8gYXZvaWQgYWNjdW11bGF0aW9uOyAoMikKKyAgICAgc2hpZnQgb2ZmIDQgYml0cyBmcm9tIGVhY2ggbXVsdGlwbGljYW5kLCBnaXZpbmcgYW4gZXhwZWN0ZWQgY2VpbGluZyBvZiA1MgorICAgICBiaXRzLCB3aGljaCBzaG91bGQgYmUgZW5vdWdoLiBOZWVkIHRvIGNoZWNrIHRoZSBpbmNvbWluZyByYW5nZSBhbmQgZG9tYWluCisgICAgIHRvIGVuc3VyZSB0aGlzIGlzIGFuIGFwcHJvcHJpYXRlIGxvc3Mgb2YgcHJlY2lzaW9uIHRob3VnaC4gKi8KKyAgeGJhcjQgPSB4YmFyID4+IDQ7CisgIHliYXI0ID0geWJhciA+PiA0OworICBmb3IgKGkgPSBqID0gMDsgaSA8IG47IGkrKywgaiArPSA0KSB7CisgICAgR3N0Q2xvY2tUaW1lIG5ld3g0LCBuZXd5NDsKKworICAgIG5ld3g0ID0gbmV3eFtqXSA+PiA0OworICAgIG5ld3k0ID0gbmV3eVtqXSA+PiA0OworCisgICAgc3h4ICs9IG5ld3g0ICogbmV3eDQgLSB4YmFyNCAqIHhiYXI0OworICAgIHN5eSArPSBuZXd5NCAqIG5ld3k0IC0geWJhcjQgKiB5YmFyNDsKKyAgICBzeHkgKz0gbmV3eDQgKiBuZXd5NCAtIHhiYXI0ICogeWJhcjQ7CisgIH0KKworICBpZiAoR19VTkxJS0VMWSAoc3h4ID09IDApKQorICAgIGdvdG8gaW52YWxpZDsKKworICAqbV9udW0gPSBzeHk7CisgICptX2Rlbm9tID0gc3h4OworICAqeGJhc2UgPSB4bWluOworICAqYiA9ICh5YmFyICsgeW1pbikgLSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHhiYXIsICptX251bSwgKm1fZGVub20pOworICAqcl9zcXVhcmVkID0gKChkb3VibGUpIHN4eSAqIChkb3VibGUpIHN4eSkgLyAoKGRvdWJsZSkgc3h4ICogKGRvdWJsZSkgc3l5KTsKKworI2lmZGVmIERFQlVHR0lOR19FTkFCTEVECisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NMT0NLLCBjbG9jaywgIiAgbSAgICAgID0gJWciLAorICAgICAgKChkb3VibGUpICptX251bSkgLyAqbV9kZW5vbSk7CisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NMT0NLLCBjbG9jaywgIiAgYiAgICAgID0gJSIgR19HVUlOVDY0X0ZPUk1BVCwKKyAgICAgICpiKTsKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0xPQ0ssIGNsb2NrLCAiICB4YmFzZSAgPSAlIiBHX0dVSU5UNjRfRk9STUFULAorICAgICAgKnhiYXNlKTsKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0xPQ0ssIGNsb2NrLCAiICByMiAgICAgPSAlZyIsICpyX3NxdWFyZWQpOworI2VuZGlmCisKKyAgcmV0dXJuIFRSVUU7CisKK2ludmFsaWQ6CisgIHsKKyAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9DTE9DSywgY2xvY2ssICJzeHggPT0gMCwgcmVncmVzc2lvbiBmYWlsZWQiKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworLyoqCisgKiBnc3RfY2xvY2tfYWRkX29ic2VydmF0aW9uCisgKiBAY2xvY2s6IGEgI0dzdENsb2NrIAorICogQHNsYXZlOiBhIHRpbWUgb24gdGhlIHNsYXZlCisgKiBAbWFzdGVyOiBhIHRpbWUgb24gdGhlIG1hc3RlcgorICogQHJfc3F1YXJlZDogKG91dCk6IGEgcG9pbnRlciB0byBob2xkIHRoZSByZXN1bHQKKyAqCisgKiBUaGUgdGltZSBAbWFzdGVyIG9mIHRoZSBtYXN0ZXIgY2xvY2sgYW5kIHRoZSB0aW1lIEBzbGF2ZSBvZiB0aGUgc2xhdmUKKyAqIGNsb2NrIGFyZSBhZGRlZCB0byB0aGUgbGlzdCBvZiBvYnNlcnZhdGlvbnMuIElmIGVub3VnaCBvYnNlcnZhdGlvbnMKKyAqIGFyZSBhdmFpbGFibGUsIGEgbGluZWFyIHJlZ3Jlc3Npb24gYWxnb3JpdGhtIGlzIHJ1biBvbiB0aGUKKyAqIG9ic2VydmF0aW9ucyBhbmQgQGNsb2NrIGlzIHJlY2FsaWJyYXRlZC4KKyAqCisgKiBJZiB0aGlzIGZ1bmN0aW9ucyByZXR1cm5zICVUUlVFLCBAcl9zcXVhcmVkIHdpbGwgY29udGFpbiB0aGUgCisgKiBjb3JyZWxhdGlvbiBjb2VmZmljaWVudCBvZiB0aGUgaW50ZXJwb2xhdGlvbi4gQSB2YWx1ZSBvZiAxLjAKKyAqIG1lYW5zIGEgcGVyZmVjdCByZWdyZXNzaW9uIHdhcyBwZXJmb3JtZWQuIFRoaXMgdmFsdWUgY2FuCisgKiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHNhbXBsaW5nIGZyZXF1ZW5jeSBvZiB0aGUgbWFzdGVyIGFuZCBzbGF2ZQorICogY2xvY2tzLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIGVub3VnaCBvYnNlcnZhdGlvbnMgd2VyZSBhZGRlZCB0byBydW4gdGhlIAorICogcmVncmVzc2lvbiBhbGdvcml0aG0uCisgKgorICogTVQgc2FmZS4KKyAqLworZ2Jvb2xlYW4KK2dzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb24gKEdzdENsb2NrICogY2xvY2ssIEdzdENsb2NrVGltZSBzbGF2ZSwKKyAgICBHc3RDbG9ja1RpbWUgbWFzdGVyLCBnZG91YmxlICogcl9zcXVhcmVkKQoreworICBHc3RDbG9ja1RpbWUgbV9udW0sIG1fZGVub20sIGIsIHhiYXNlOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0xPQ0sgKGNsb2NrKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAocl9zcXVhcmVkICE9IE5VTEwsIEZBTFNFKTsKKworICBHU1RfQ0xPQ0tfU0xBVkVfTE9DSyAoY2xvY2spOworCisgIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9DTE9DSywgY2xvY2ssCisgICAgICAiYWRkaW5nIG9ic2VydmF0aW9uIHNsYXZlICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBtYXN0ZXIgJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgR1NUX1RJTUVfQVJHUyAoc2xhdmUpLCBHU1RfVElNRV9BUkdTIChtYXN0ZXIpKTsKKworICBjbG9jay0+dGltZXNbKDQgKiBjbG9jay0+dGltZV9pbmRleCldID0gc2xhdmU7CisgIGNsb2NrLT50aW1lc1soNCAqIGNsb2NrLT50aW1lX2luZGV4KSArIDJdID0gbWFzdGVyOworCisgIGNsb2NrLT50aW1lX2luZGV4Kys7CisgIGlmIChHX1VOTElLRUxZIChjbG9jay0+dGltZV9pbmRleCA9PSBjbG9jay0+d2luZG93X3NpemUpKSB7CisgICAgY2xvY2stPmZpbGxpbmcgPSBGQUxTRTsKKyAgICBjbG9jay0+dGltZV9pbmRleCA9IDA7CisgIH0KKworICBpZiAoR19VTkxJS0VMWSAoY2xvY2stPmZpbGxpbmcKKyAgICAgICAgICAmJiBjbG9jay0+dGltZV9pbmRleCA8IGNsb2NrLT53aW5kb3dfdGhyZXNob2xkKSkKKyAgICBnb3RvIGZpbGxpbmc7CisKKyAgaWYgKCFkb19saW5lYXJfcmVncmVzc2lvbiAoY2xvY2ssICZtX251bSwgJm1fZGVub20sICZiLCAmeGJhc2UsIHJfc3F1YXJlZCkpCisgICAgZ290byBpbnZhbGlkOworCisgIEdTVF9DTE9DS19TTEFWRV9VTkxPQ0sgKGNsb2NrKTsKKworICBHU1RfQ0FUX0xPR19PQkpFQ1QgKEdTVF9DQVRfQ0xPQ0ssIGNsb2NrLAorICAgICAgImFkanVzdGluZyBjbG9jayB0byBtPSUiIEdfR1VJTlQ2NF9GT1JNQVQgIi8lIiBHX0dVSU5UNjRfRk9STUFUICIsIGI9JSIKKyAgICAgIEdfR1VJTlQ2NF9GT1JNQVQgIiAocnNxdWFyZWQ9JWcpIiwgbV9udW0sIG1fZGVub20sIGIsICpyX3NxdWFyZWQpOworCisgIC8qIGlmIHdlIGhhdmUgYSB2YWxpZCByZWdyZXNzaW9uLCBhZGp1c3QgdGhlIGNsb2NrICovCisgIGdzdF9jbG9ja19zZXRfY2FsaWJyYXRpb24gKGNsb2NrLCB4YmFzZSwgYiwgbV9udW0sIG1fZGVub20pOworCisgIHJldHVybiBUUlVFOworCitmaWxsaW5nOgorICB7CisgICAgR1NUX0NMT0NLX1NMQVZFX1VOTE9DSyAoY2xvY2spOworICAgIHJldHVybiBGQUxTRTsKKyAgfQoraW52YWxpZDoKKyAgeworICAgIC8qIG5vIHZhbGlkIHJlZ3Jlc3Npb24gaGFzIGJlZW4gZG9uZSwgaWdub3JlIHRoZSByZXN1bHQgdGhlbiAqLworICAgIEdTVF9DTE9DS19TTEFWRV9VTkxPQ0sgKGNsb2NrKTsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZ3N0X2Nsb2NrX3VwZGF0ZV9zdGF0cyAoR3N0Q2xvY2sgKiBjbG9jaykKK3sKK30KKworc3RhdGljIHZvaWQKK2dzdF9jbG9ja19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgR3N0Q2xvY2sgKmNsb2NrOworCisgIGNsb2NrID0gR1NUX0NMT0NLIChvYmplY3QpOworCisgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9TVEFUUzoKKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoY2xvY2spOworICAgICAgY2xvY2stPnN0YXRzID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGNsb2NrKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XSU5ET1dfU0laRToKKyAgICAgIEdTVF9DTE9DS19TTEFWRV9MT0NLIChjbG9jayk7CisgICAgICBjbG9jay0+d2luZG93X3NpemUgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKKyAgICAgIGNsb2NrLT53aW5kb3dfdGhyZXNob2xkID0KKyAgICAgICAgICBNSU4gKGNsb2NrLT53aW5kb3dfdGhyZXNob2xkLCBjbG9jay0+d2luZG93X3NpemUpOworICAgICAgY2xvY2stPnRpbWVzID0KKyAgICAgICAgICBnX3JlbmV3IChHc3RDbG9ja1RpbWUsIGNsb2NrLT50aW1lcywgNCAqIGNsb2NrLT53aW5kb3dfc2l6ZSk7CisgICAgICAvKiByZXN0YXJ0IGNhbGlicmF0aW9uICovCisgICAgICBjbG9jay0+ZmlsbGluZyA9IFRSVUU7CisgICAgICBjbG9jay0+dGltZV9pbmRleCA9IDA7CisgICAgICBHU1RfQ0xPQ0tfU0xBVkVfVU5MT0NLIChjbG9jayk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0lORE9XX1RIUkVTSE9MRDoKKyAgICAgIEdTVF9DTE9DS19TTEFWRV9MT0NLIChjbG9jayk7CisgICAgICBjbG9jay0+d2luZG93X3RocmVzaG9sZCA9CisgICAgICAgICAgTUlOIChnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKSwgY2xvY2stPndpbmRvd19zaXplKTsKKyAgICAgIEdTVF9DTE9DS19TTEFWRV9VTkxPQ0sgKGNsb2NrKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9USU1FT1VUOgorICAgICAgR1NUX0NMT0NLX1NMQVZFX0xPQ0sgKGNsb2NrKTsKKyAgICAgIGNsb2NrLT50aW1lb3V0ID0gZ192YWx1ZV9nZXRfdWludDY0ICh2YWx1ZSk7CisgICAgICBHU1RfQ0xPQ0tfU0xBVkVfVU5MT0NLIChjbG9jayk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfY2xvY2tfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIEdzdENsb2NrICpjbG9jazsKKworICBjbG9jayA9IEdTVF9DTE9DSyAob2JqZWN0KTsKKworICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfU1RBVFM6CisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGNsb2NrKTsKKyAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBjbG9jay0+c3RhdHMpOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGNsb2NrKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XSU5ET1dfU0laRToKKyAgICAgIEdTVF9DTE9DS19TTEFWRV9MT0NLIChjbG9jayk7CisgICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBjbG9jay0+d2luZG93X3NpemUpOworICAgICAgR1NUX0NMT0NLX1NMQVZFX1VOTE9DSyAoY2xvY2spOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dJTkRPV19USFJFU0hPTEQ6CisgICAgICBHU1RfQ0xPQ0tfU0xBVkVfTE9DSyAoY2xvY2spOworICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgY2xvY2stPndpbmRvd190aHJlc2hvbGQpOworICAgICAgR1NUX0NMT0NLX1NMQVZFX1VOTE9DSyAoY2xvY2spOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RJTUVPVVQ6CisgICAgICBHU1RfQ0xPQ0tfU0xBVkVfTE9DSyAoY2xvY2spOworICAgICAgZ192YWx1ZV9zZXRfdWludDY0ICh2YWx1ZSwgY2xvY2stPnRpbWVvdXQpOworICAgICAgR1NUX0NMT0NLX1NMQVZFX1VOTE9DSyAoY2xvY2spOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICBicmVhazsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGNsb2NrLmggYi9nc3QvZ3N0Y2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmM5ZDgwCi0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdGNsb2NrLmgKQEAgLTAsMCArMSw1NzQgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+CisgKgorICogZ3N0Y2xvY2suaDogSGVhZGVyIGZvciBjbG9jayBzdWJzeXN0ZW0KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fR1NUX0NMT0NLX0hfXworI2RlZmluZSBfX0dTVF9DTE9DS19IX18KKworI2luY2x1ZGUgPGdzdC9nc3RvYmplY3QuaD4KKworR19CRUdJTl9ERUNMUworCisvKiAtLS0gc3RhbmRhcmQgdHlwZSBtYWNyb3MgLS0tICovCisjZGVmaW5lIEdTVF9UWVBFX0NMT0NLCQkJKGdzdF9jbG9ja19nZXRfdHlwZSAoKSkKKyNkZWZpbmUgR1NUX0NMT0NLKGNsb2NrKQkJKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgoY2xvY2spLCBHU1RfVFlQRV9DTE9DSywgR3N0Q2xvY2spKQorI2RlZmluZSBHU1RfSVNfQ0xPQ0soY2xvY2spCQkoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChjbG9jayksIEdTVF9UWVBFX0NMT0NLKSkKKyNkZWZpbmUgR1NUX0NMT0NLX0NMQVNTKGNjbGFzcykJCShHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGNjbGFzcyksIEdTVF9UWVBFX0NMT0NLLCBHc3RDbG9ja0NsYXNzKSkKKyNkZWZpbmUgR1NUX0lTX0NMT0NLX0NMQVNTKGNjbGFzcykJKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoY2NsYXNzKSwgR1NUX1RZUEVfQ0xPQ0spKQorI2RlZmluZSBHU1RfQ0xPQ0tfR0VUX0NMQVNTKGNsb2NrKQkoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKGNsb2NrKSwgR1NUX1RZUEVfQ0xPQ0ssIEdzdENsb2NrQ2xhc3MpKQorI2RlZmluZSBHU1RfQ0xPQ0tfQ0FTVChjbG9jaykJCSgoR3N0Q2xvY2sqKShjbG9jaykpCisKKyNkZWZpbmUgR1NUX0NMT0NLX1NMQVZFX0xPQ0soY2xvY2spCWdfbXV0ZXhfbG9jayAoR1NUX0NMT0NLX0NBU1QgKGNsb2NrKS0+c2xhdmVfbG9jaykKKyNkZWZpbmUgR1NUX0NMT0NLX1NMQVZFX1VOTE9DSyhjbG9jaykJZ19tdXRleF91bmxvY2sgKEdTVF9DTE9DS19DQVNUIChjbG9jayktPnNsYXZlX2xvY2spCisKKy8qKgorICogR3N0Q2xvY2tUaW1lOgorICoKKyAqIEEgZGF0YXR5cGUgdG8gaG9sZCBhIHRpbWUsIG1lYXN1cmVkIGluIG5hbm9zZWNvbmRzLgorICovCit0eXBlZGVmIGd1aW50NjQJR3N0Q2xvY2tUaW1lOworCisvKioKKyAqIEdTVF9UWVBFX0NMT0NLX1RJTUU6CisgKgorICogVGhlICNHVHlwZSBvZiBhICNHc3RDbG9ja1RpbWUuCisgKi8KKyNkZWZpbmUgR1NUX1RZUEVfQ0xPQ0tfVElNRSBHX1RZUEVfVUlOVDY0CisKKy8qKgorICogR3N0Q2xvY2tUaW1lRGlmZjoKKyAqCisgKiBBIGRhdGF0eXBlIHRvIGhvbGQgYSB0aW1lIGRpZmZlcmVuY2UsIG1lYXN1cmVkIGluIG5hbm9zZWNvbmRzLgorICovCit0eXBlZGVmIGdpbnQ2NCBHc3RDbG9ja1RpbWVEaWZmOworLyoqCisgKiBHc3RDbG9ja0lEOgorICoKKyAqIEEgZGF0YXR5cGUgdG8gaG9sZCB0aGUgaGFuZGxlIHRvIGFuIG91dHN0YW5kaW5nIHN5bmMgb3IgYXN5bmMgY2xvY2sgY2FsbGJhY2suCisgKi8KK3R5cGVkZWYgZ3BvaW50ZXIgR3N0Q2xvY2tJRDsKKworLyoqCisgKiBHU1RfQ0xPQ0tfVElNRV9OT05FOgorICoKKyAqIENvbnN0YW50IHRvIGRlZmluZSBhbiB1bmRlZmluZWQgY2xvY2sgdGltZS4KKyAqLworI2RlZmluZSBHU1RfQ0xPQ0tfVElNRV9OT05FCQkoKEdzdENsb2NrVGltZSkgLTEpCisvKioKKyAqIEdTVF9DTE9DS19USU1FX0lTX1ZBTElEOgorICogQHRpbWU6IGNsb2NrIHRpbWUgdG8gdmFsaWRhdGUKKyAqCisgKiBUZXN0cyBpZiBhIGdpdmVuICNHc3RDbG9ja1RpbWUgcmVwcmVzZW50cyBhIHZhbGlkIGRlZmluZWQgdGltZS4KKyAqLworI2RlZmluZSBHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCh0aW1lKQkoKChHc3RDbG9ja1RpbWUpKHRpbWUpKSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKQorCisvKioKKyAqIEdTVF9TRUNPTkQ6CisgKgorICogQ29uc3RhbnQgdGhhdCBkZWZpbmVzIG9uZSBHU3RyZWFtZXIgc2Vjb25kLgorICovCisjZGVmaW5lIEdTVF9TRUNPTkQgIChHX1VTRUNfUEVSX1NFQyAqIEdfR0lOVDY0X0NPTlNUQU5UICgxMDAwKSkKKy8qKgorICogR1NUX01TRUNPTkQ6CisgKgorICogQ29uc3RhbnQgdGhhdCBkZWZpbmVzIG9uZSBHU3RyZWFtZXIgbWlsbGlzZWNvbmQuCisgKi8KKyNkZWZpbmUgR1NUX01TRUNPTkQgKEdTVF9TRUNPTkQgLyBHX0dJTlQ2NF9DT05TVEFOVCAoMTAwMCkpCisvKioKKyAqIEdTVF9VU0VDT05EOgorICoKKyAqIENvbnN0YW50IHRoYXQgZGVmaW5lcyBvbmUgR1N0cmVhbWVyIG1pY3Jvc2Vjb25kLgorICovCisjZGVmaW5lIEdTVF9VU0VDT05EIChHU1RfU0VDT05EIC8gR19HSU5UNjRfQ09OU1RBTlQgKDEwMDAwMDApKQorLyoqCisgKiBHU1RfTlNFQ09ORDoKKyAqCisgKiBDb25zdGFudCB0aGF0IGRlZmluZXMgb25lIEdTdHJlYW1lciBuYW5vc2Vjb25kCisgKi8KKyNkZWZpbmUgR1NUX05TRUNPTkQgKEdTVF9TRUNPTkQgLyBHX0dJTlQ2NF9DT05TVEFOVCAoMTAwMDAwMDAwMCkpCisKKworLyoqCisgKiBHU1RfVElNRV9BU19TRUNPTkRTOgorICogQHRpbWU6IHRoZSB0aW1lCisgKgorICogQ29udmVydCBhICNHc3RDbG9ja1RpbWUgdG8gc2Vjb25kcy4KKyAqCisgKiBTaW5jZTogMC4xMC4xNgorICovCisjZGVmaW5lIEdTVF9USU1FX0FTX1NFQ09ORFModGltZSkgICgodGltZSkgLyBHU1RfU0VDT05EKQorLyoqCisgKiBHU1RfVElNRV9BU19NU0VDT05EUzoKKyAqIEB0aW1lOiB0aGUgdGltZQorICoKKyAqIENvbnZlcnQgYSAjR3N0Q2xvY2tUaW1lIHRvIG1pbGxpc2Vjb25kcyAoMS8xMDAwIG9mIGEgc2Vjb25kKS4KKyAqCisgKiBTaW5jZTogMC4xMC4xNgorICovCisjZGVmaW5lIEdTVF9USU1FX0FTX01TRUNPTkRTKHRpbWUpICgodGltZSkgLyBHX0dJTlQ2NF9DT05TVEFOVCAoMTAwMDAwMCkpCisvKioKKyAqIEdTVF9USU1FX0FTX1VTRUNPTkRTOgorICogQHRpbWU6IHRoZSB0aW1lCisgKgorICogQ29udmVydCBhICNHc3RDbG9ja1RpbWUgdG8gbWljcm9zZWNvbmRzICgxLzEwMDAwMDAgb2YgYSBzZWNvbmQpLgorICoKKyAqIFNpbmNlOiAwLjEwLjE2CisgKi8KKyNkZWZpbmUgR1NUX1RJTUVfQVNfVVNFQ09ORFModGltZSkgKCh0aW1lKSAvIEdfR0lOVDY0X0NPTlNUQU5UICgxMDAwKSkKKy8qKgorICogR1NUX1RJTUVfQVNfTlNFQ09ORFM6CisgKiBAdGltZTogdGhlIHRpbWUKKyAqCisgKiBDb252ZXJ0IGEgI0dzdENsb2NrVGltZSB0byBuYW5vc2Vjb25kcyAoMS8xMDAwMDAwMDAwIG9mIGEgc2Vjb25kKS4KKyAqCisgKiBTaW5jZTogMC4xMC4xNgorICovCisjZGVmaW5lIEdTVF9USU1FX0FTX05TRUNPTkRTKHRpbWUpICh0aW1lKQorCisvKioKKyAqIEdTVF9DTE9DS19ESUZGOgorICogQHM6IHRoZSBmaXJzdCB0aW1lCisgKiBAZTogdGhlIHNlY29uZCB0aW1lCisgKgorICogQ2FsY3VsYXRlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBjbG9jayB0aW1lcyBhcyBhICNHc3RDbG9ja1RpbWVEaWZmLgorICogVGhlIGRpZmZlcmVuY2UgaXMgY2FsY3VsYXRlZCBhcyBAZSAtIEBzLgorICovCisjZGVmaW5lIEdTVF9DTE9DS19ESUZGKHMsIGUpCQkoR3N0Q2xvY2tUaW1lRGlmZikoKGUpIC0gKHMpKQorCisvKioKKyAqIEdTVF9USU1FVkFMX1RPX1RJTUU6CisgKiBAdHY6IHRoZSB0aW1ldmFsIHRvIGNvbnZlcnQKKyAqCisgKiBDb252ZXJ0IGEgI0dUaW1lVmFsIHRvIGEgI0dzdENsb2NrVGltZS4KKyAqLworI2RlZmluZSBHU1RfVElNRVZBTF9UT19USU1FKHR2KQkJKEdzdENsb2NrVGltZSkoKHR2KS50dl9zZWMgKiBHU1RfU0VDT05EICsgKHR2KS50dl91c2VjICogR1NUX1VTRUNPTkQpCisKKy8qKgorICogR1NUX1RJTUVfVE9fVElNRVZBTDoKKyAqIEB0OiBUaGUgI0dzdENsb2NrVGltZSB0byBjb252ZXJ0CisgKiBAdHY6IFRoZSB0YXJnZXQgdGltZXZhbAorICoKKyAqIENvbnZlcnQgYSAjR3N0Q2xvY2tUaW1lIHRvIGEgI0dUaW1lVmFsCisgKgorICogPG5vdGU+b24gMzItYml0IHN5c3RlbXMsIGEgdGltZXZhbCBoYXMgYSByYW5nZSBvZiBvbmx5IDJeMzIgLSAxIHNlY29uZHMsCisgKiB3aGljaCBpcyBhYm91dCA2OCB5ZWFycy4gIEV4cGVjdCB0cm91YmxlIGlmIHlvdSB3YW50IHRvIHNjaGVkdWxlIHN0dWZmCisgKiBpbiB5b3VyIHBpcGVsaW5lIGZvciAyMDM4Ljwvbm90ZT4KKyAqLworI2RlZmluZSBHU1RfVElNRV9UT19USU1FVkFMKHQsdHYpCQkJCVwKK0dfU1RNVF9TVEFSVCB7CQkJCQkJCVwKKyAgKHR2KS50dl9zZWMgID0gKChHc3RDbG9ja1RpbWUpICh0KSkgLyBHU1RfU0VDT05EOwkJXAorICAodHYpLnR2X3VzZWMgPSAoKChHc3RDbG9ja1RpbWUpICh0KSkgLQkJCVwKKyAgICAgICAgICAgICAgICAgICgoR3N0Q2xvY2tUaW1lKSAodHYpLnR2X3NlYykgKiBHU1RfU0VDT05EKQlcCisgICAgICAgICAgICAgICAgIC8gR1NUX1VTRUNPTkQ7CQkJCQlcCit9IEdfU1RNVF9FTkQKKworLyoqCisgKiBHU1RfVElNRVNQRUNfVE9fVElNRToKKyAqIEB0czogdGhlIHRpbWVzcGVjIHRvIGNvbnZlcnQKKyAqCisgKiBDb252ZXJ0IGEgc3RydWN0IHRpbWVzcGVjIChzZWUgbWFuIHBzZWxlY3QpIHRvIGEgI0dzdENsb2NrVGltZS4KKyAqLworI2RlZmluZSBHU1RfVElNRVNQRUNfVE9fVElNRSh0cykJKEdzdENsb2NrVGltZSkoKHRzKS50dl9zZWMgKiBHU1RfU0VDT05EICsgKHRzKS50dl9uc2VjICogR1NUX05TRUNPTkQpCisvKioKKyAqIEdTVF9USU1FX1RPX1RJTUVTUEVDOgorICogQHQ6IFRoZSAjR3N0Q2xvY2tUaW1lIHRvIGNvbnZlcnQKKyAqIEB0czogVGhlIHRhcmdldCB0aW1lc3BlYworICoKKyAqIENvbnZlcnQgYSAjR3N0Q2xvY2tUaW1lIHRvIGEgc3RydWN0IHRpbWVzcGVjIChzZWUgbWFuIHBzZWxlY3QpCisgKi8KKyNkZWZpbmUgR1NUX1RJTUVfVE9fVElNRVNQRUModCx0cykJCQlcCitHX1NUTVRfU1RBUlQgewkJCQkJCVwKKyAgKHRzKS50dl9zZWMgID0gICh0KSAvIEdTVF9TRUNPTkQ7CQkJXAorICAodHMpLnR2X25zZWMgPSAoKHQpIC0gKHRzKS50dl9zZWMgKiBHU1RfU0VDT05EKSAvIEdTVF9OU0VDT05EOwlcCit9IEdfU1RNVF9FTkQKKworLyogdGltZXN0YW1wIGRlYnVnZ2luZyBtYWNyb3MgKi8KKy8qKgorICogR1NUX1RJTUVfRk9STUFUOgorICoKKyAqIEEgc3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQgaW4gcHJpbnRmLWxpa2UgZm9ybWF0IHN0cmluZ3MgdG8gZGlzcGxheSBhCisgKiAjR3N0Q2xvY2tUaW1lIHZhbHVlIGluIGg6bTpzIGZvcm1hdC4gIFVzZSBHU1RfVElNRV9BUkdTKCkgdG8gY29uc3RydWN0CisgKiB0aGUgbWF0Y2hpbmcgYXJndW1lbnRzLgorICoKKyAqIEV4YW1wbGU6CisgKiB8WworICogcHJpbnRmKCIlIiBHU1RfVElNRV9GT1JNQVQgIlxuIiwgR1NUX1RJTUVfQVJHUyh0cykpOworICogXXwKKyAqLworI2RlZmluZSBHU1RfVElNRV9GT1JNQVQgInU6JTAydTolMDJ1LiUwOXUiCisvKioKKyAqIEdTVF9USU1FX0FSR1M6CisgKiBAdDogYSAjR3N0Q2xvY2tUaW1lCisgKgorICogRm9ybWF0IEB0IGZvciB0aGUgI0dTVF9USU1FX0ZPUk1BVCBmb3JtYXQgc3RyaW5nLiBOb3RlOiBAdCB3aWxsIGJlCisgKiBldmFsdWF0ZWQgbW9yZSB0aGFuIG9uY2UuCisgKi8KKyNkZWZpbmUgR1NUX1RJTUVfQVJHUyh0KSBcCisgICAgICAgIEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0KSA/IFwKKyAgICAgICAgKGd1aW50KSAoKChHc3RDbG9ja1RpbWUpKHQpKSAvIChHU1RfU0VDT05EICogNjAgKiA2MCkpIDogOTksIFwKKyAgICAgICAgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHQpID8gXAorICAgICAgICAoZ3VpbnQpICgoKChHc3RDbG9ja1RpbWUpKHQpKSAvIChHU1RfU0VDT05EICogNjApKSAlIDYwKSA6IDk5LCBcCisgICAgICAgIEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0KSA/IFwKKyAgICAgICAgKGd1aW50KSAoKCgoR3N0Q2xvY2tUaW1lKSh0KSkgLyBHU1RfU0VDT05EKSAlIDYwKSA6IDk5LCBcCisgICAgICAgIEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0KSA/IFwKKyAgICAgICAgKGd1aW50KSAoKChHc3RDbG9ja1RpbWUpKHQpKSAlIEdTVF9TRUNPTkQpIDogOTk5OTk5OTk5CisKKy8qKgorICogR1NUX0NMT0NLX0VOVFJZX1RSQUNFX05BTUU6CisgKgorICogVGhlIG5hbWUgdXNlZCBmb3IgdHJhY2luZyBjbG9jayBlbnRyeSBhbGxvY2F0aW9ucy4KKyAqLworI2RlZmluZSBHU1RfQ0xPQ0tfRU5UUllfVFJBQ0VfTkFNRSAiR3N0Q2xvY2tFbnRyeSIKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdENsb2NrRW50cnkJR3N0Q2xvY2tFbnRyeTsKK3R5cGVkZWYgc3RydWN0IF9Hc3RDbG9jawlHc3RDbG9jazsKK3R5cGVkZWYgc3RydWN0IF9Hc3RDbG9ja0NsYXNzCUdzdENsb2NrQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfR3N0Q2xvY2tQcml2YXRlCUdzdENsb2NrUHJpdmF0ZTsKKworLyogLS0tIHByb3RvdHlwZSBmb3IgYXN5bmMgY2FsbGJhY2tzIC0tLSAqLworLyoqCisgKiBHc3RDbG9ja0NhbGxiYWNrOgorICogQGNsb2NrOiBUaGUgY2xvY2sgdGhhdCB0cmlnZ2VyZWQgdGhlIGNhbGxiYWNrCisgKiBAdGltZTogVGhlIHRpbWUgaXQgd2FzIHRyaWdnZXJlZAorICogQGlkOiBUaGUgI0dzdENsb2NrSUQgdGhhdCBleHBpcmVkCisgKiBAdXNlcl9kYXRhOiB1c2VyIGRhdGEgcGFzc2VkIGluIHRoZSBnc3RfY2xvY2tfaWRfd2FpdF9hc3luYygpIGZ1bmN0aW9uCisgKgorICogVGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBvZiB0aGUgY2FsbGJhY2suCisgKgorICogUmV0dXJuczogJVRSVUUgb3IgJUZBTFNFIChjdXJyZW50bHkgdW51c2VkKQorICovCit0eXBlZGVmIGdib29sZWFuCSgqR3N0Q2xvY2tDYWxsYmFjaykJKEdzdENsb2NrICpjbG9jaywgR3N0Q2xvY2tUaW1lIHRpbWUsCisJCQkJCQkgR3N0Q2xvY2tJRCBpZCwgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKKy8qKgorICogR3N0Q2xvY2tSZXR1cm46CisgKiBAR1NUX0NMT0NLX09LOiBUaGUgb3BlcmF0aW9uIHN1Y2NlZWRlZC4KKyAqIEBHU1RfQ0xPQ0tfRUFSTFk6IFRoZSBvcGVyYXRpb24gd2FzIHNjaGVkdWxlZCB0b28gbGF0ZS4KKyAqIEBHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQ6IFRoZSBjbG9ja0lEIHdhcyB1bnNjaGVkdWxlZAorICogQEdTVF9DTE9DS19CVVNZOiBUaGUgQ2xvY2tJRCBpcyBidXN5CisgKiBAR1NUX0NMT0NLX0JBRFRJTUU6IEEgYmFkIHRpbWUgd2FzIHByb3ZpZGVkIHRvIGEgZnVuY3Rpb24uCisgKiBAR1NUX0NMT0NLX0VSUk9SOiBBbiBlcnJvciBvY2N1cnJlZAorICogQEdTVF9DTE9DS19VTlNVUFBPUlRFRDogT3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKyAqIEBHU1RfQ0xPQ0tfRE9ORTogVGhlIENsb2NrSUQgaXMgZG9uZSB3YWl0aW5nIChTaW5jZTogMC4xMC4zMikKKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIG9mIGEgY2xvY2sgb3BlcmF0aW9uLgorICovCit0eXBlZGVmIGVudW0KK3sKKyAgR1NUX0NMT0NLX09LCQk9ICAwLAorICBHU1RfQ0xPQ0tfRUFSTFkJPSAgMSwKKyAgR1NUX0NMT0NLX1VOU0NIRURVTEVECT0gIDIsCisgIEdTVF9DTE9DS19CVVNZCT0gIDMsCisgIEdTVF9DTE9DS19CQURUSU1FCT0gIDQsCisgIEdTVF9DTE9DS19FUlJPUgk9ICA1LAorICBHU1RfQ0xPQ0tfVU5TVVBQT1JURUQJPSAgNiwKKyAgR1NUX0NMT0NLX0RPTkUJPSAgNworfSBHc3RDbG9ja1JldHVybjsKKworLyoqCisgKiBHc3RDbG9ja0VudHJ5VHlwZToKKyAqIEBHU1RfQ0xPQ0tfRU5UUllfU0lOR0xFOiBhIHNpbmdsZSBzaG90IHRpbWVvdXQKKyAqIEBHU1RfQ0xPQ0tfRU5UUllfUEVSSU9ESUM6IGEgcGVyaW9kaWMgdGltZW91dCByZXF1ZXN0CisgKgorICogVGhlIHR5cGUgb2YgdGhlIGNsb2NrIGVudHJ5CisgKi8KK3R5cGVkZWYgZW51bSB7CisgIEdTVF9DTE9DS19FTlRSWV9TSU5HTEUsCisgIEdTVF9DTE9DS19FTlRSWV9QRVJJT0RJQworfSBHc3RDbG9ja0VudHJ5VHlwZTsKKworLyoqCisgKiBHU1RfQ0xPQ0tfRU5UUlk6CisgKiBAZW50cnk6IHRoZSBlbnRyeSB0byBjYXN0CisgKgorICogQ2FzdCB0byBhIGNsb2NrIGVudHJ5CisgKi8KKyNkZWZpbmUgR1NUX0NMT0NLX0VOVFJZKGVudHJ5KQkJKChHc3RDbG9ja0VudHJ5ICopKGVudHJ5KSkKKy8qKgorICogR1NUX0NMT0NLX0VOVFJZX0NMT0NLOgorICogQGVudHJ5OiB0aGUgZW50cnkgdG8gcXVlcnkKKyAqCisgKiBHZXQgdGhlIG93bmVyIGNsb2NrIG9mIHRoZSBlbnRyeQorICovCisjZGVmaW5lIEdTVF9DTE9DS19FTlRSWV9DTE9DSyhlbnRyeSkJKChlbnRyeSktPmNsb2NrKQorLyoqCisgKiBHU1RfQ0xPQ0tfRU5UUllfVFlQRToKKyAqIEBlbnRyeTogdGhlIGVudHJ5IHRvIHF1ZXJ5CisgKgorICogR2V0IHRoZSB0eXBlIG9mIHRoZSBjbG9jayBlbnRyeQorICovCisjZGVmaW5lIEdTVF9DTE9DS19FTlRSWV9UWVBFKGVudHJ5KQkoKGVudHJ5KS0+dHlwZSkKKy8qKgorICogR1NUX0NMT0NLX0VOVFJZX1RJTUU6CisgKiBAZW50cnk6IHRoZSBlbnRyeSB0byBxdWVyeQorICoKKyAqIEdldCB0aGUgcmVxdWVzdGVkIHRpbWUgb2YgdGhpcyBlbnRyeQorICovCisjZGVmaW5lIEdTVF9DTE9DS19FTlRSWV9USU1FKGVudHJ5KQkoKGVudHJ5KS0+dGltZSkKKy8qKgorICogR1NUX0NMT0NLX0VOVFJZX0lOVEVSVkFMOgorICogQGVudHJ5OiB0aGUgZW50cnkgdG8gcXVlcnkKKyAqCisgKiBHZXQgdGhlIGludGVydmFsIG9mIHRoaXMgcGVyaW9kaWMgZW50cnkKKyAqLworI2RlZmluZSBHU1RfQ0xPQ0tfRU5UUllfSU5URVJWQUwoZW50cnkpCSgoZW50cnkpLT5pbnRlcnZhbCkKKy8qKgorICogR1NUX0NMT0NLX0VOVFJZX1NUQVRVUzoKKyAqIEBlbnRyeTogdGhlIGVudHJ5IHRvIHF1ZXJ5CisgKgorICogVGhlIHN0YXR1cyBvZiB0aGUgZW50cnkKKyAqLworI2RlZmluZSBHU1RfQ0xPQ0tfRU5UUllfU1RBVFVTKGVudHJ5KQkoKGVudHJ5KS0+c3RhdHVzKQorCisvKioKKyAqIEdzdENsb2NrRW50cnk6CisgKiBAcmVmY291bnQ6IHJlZmVyZW5jZSBjb3VudGVyIChyZWFkLW9ubHkpCisgKgorICogQWxsIHBlbmRpbmcgdGltZW91dHMgb3IgcGVyaW9kaWMgbm90aWZpZXMgYXJlIGNvbnZlcnRlZCBpbnRvCisgKiBhbiBlbnRyeS4KKyAqIE5vdGUgdGhhdCBHc3RDbG9ja0VudHJ5IHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIG9wYXF1ZSBzdHJ1Y3R1cmUuIEl0IG11c3QKKyAqIG5vdCBiZSBleHRlbmRlZCBvciBhbGxvY2F0ZWQgdXNpbmcgYSBjdXN0b20gYWxsb2NhdG9yLgorICovCitzdHJ1Y3QgX0dzdENsb2NrRW50cnkgeworICBnaW50CQkJcmVmY291bnQ7CisgIC8qPCBwcm90ZWN0ZWQgPiovCisgIEdzdENsb2NrCQkqY2xvY2s7CisgIEdzdENsb2NrRW50cnlUeXBlCSB0eXBlOworICBHc3RDbG9ja1RpbWUJCSB0aW1lOworICBHc3RDbG9ja1RpbWUJCSBpbnRlcnZhbDsKKyAgR3N0Q2xvY2tSZXR1cm4JIHN0YXR1czsKKyAgR3N0Q2xvY2tDYWxsYmFjawkgZnVuYzsKKyAgZ3BvaW50ZXIJCSB1c2VyX2RhdGE7CisgIEdEZXN0cm95Tm90aWZ5CSBkZXN0cm95X2RhdGE7CisgIGdib29sZWFuICAgICAgICAgICAgICAgdW5zY2hlZHVsZWQ7CisgIGdib29sZWFuICAgICAgICAgICAgICAgd29rZW5fdXA7Cit9OworCisvKioKKyAqIEdzdENsb2NrRmxhZ3M6CisgKiBAR1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1NJTkdMRV9TWU5DOiBjbG9jayBjYW4gZG8gYSBzaW5nbGUgc3luYyB0aW1lb3V0IHJlcXVlc3QKKyAqIEBHU1RfQ0xPQ0tfRkxBR19DQU5fRE9fU0lOR0xFX0FTWU5DOiBjbG9jayBjYW4gZG8gYSBzaW5nbGUgYXN5bmMgdGltZW91dCByZXF1ZXN0CisgKiBAR1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1BFUklPRElDX1NZTkM6IGNsb2NrIGNhbiBkbyBzeW5jIHBlcmlvZGljIHRpbWVvdXQgcmVxdWVzdHMKKyAqIEBHU1RfQ0xPQ0tfRkxBR19DQU5fRE9fUEVSSU9ESUNfQVNZTkM6IGNsb2NrIGNhbiBkbyBhc3luYyBwZXJpb2RpYyB0aW1lb3V0IGNhbGxiYWNrcworICogQEdTVF9DTE9DS19GTEFHX0NBTl9TRVRfUkVTT0xVVElPTjogY2xvY2sncyByZXNvbHV0aW9uIGNhbiBiZSBjaGFuZ2VkCisgKiBAR1NUX0NMT0NLX0ZMQUdfQ0FOX1NFVF9NQVNURVI6IGNsb2NrIGNhbiBiZSBzbGF2ZWQgdG8gYSBtYXN0ZXIgY2xvY2sKKyAqIEBHU1RfQ0xPQ0tfRkxBR19MQVNUOiBzdWJjbGFzc2VzIGNhbiBhZGQgYWRkaXRpb25hbCBmbGFncyBzdGFydGluZyBmcm9tIHRoaXMgZmxhZworICoKKyAqIFRoZSBjYXBhYmlsaXRpZXMgb2YgdGhpcyBjbG9jaworICovCit0eXBlZGVmIGVudW0geworICBHU1RfQ0xPQ0tfRkxBR19DQU5fRE9fU0lOR0xFX1NZTkMgICAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUIDw8IDApLAorICBHU1RfQ0xPQ0tfRkxBR19DQU5fRE9fU0lOR0xFX0FTWU5DICAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUIDw8IDEpLAorICBHU1RfQ0xPQ0tfRkxBR19DQU5fRE9fUEVSSU9ESUNfU1lOQyAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUIDw8IDIpLAorICBHU1RfQ0xPQ0tfRkxBR19DQU5fRE9fUEVSSU9ESUNfQVNZTkMgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUIDw8IDMpLAorICBHU1RfQ0xPQ0tfRkxBR19DQU5fU0VUX1JFU09MVVRJT04gICAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUIDw8IDQpLAorICBHU1RfQ0xPQ0tfRkxBR19DQU5fU0VUX01BU1RFUiAgICAgICAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUIDw8IDUpLAorICAvKiBwYWRkaW5nICovCisgIEdTVF9DTE9DS19GTEFHX0xBU1QJCSAgICAgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgOCkKK30gR3N0Q2xvY2tGbGFnczsKKworLyoqCisgKiBHU1RfQ0xPQ0tfRkxBR1M6CisgKiBAY2xvY2s6IHRoZSBjbG9jayB0byBxdWVyeQorICoKKyAqIEdldHMgdGhlICNHc3RDbG9ja0ZsYWdzIGNsb2NrIGZsYWdzLgorICovCisjZGVmaW5lIEdTVF9DTE9DS19GTEFHUyhjbG9jaykgIEdTVF9PQkpFQ1RfRkxBR1MoY2xvY2spCisKKy8qKgorICogR1NUX0NMT0NLX0NPTkQ6CisgKiBAY2xvY2s6IHRoZSBjbG9jayB0byBxdWVyeQorICoKKyAqIEdldHMgdGhlICNHQ29uZCB0aGF0IGdldHMgc2lnbmFsbGVkIHdoZW4gdGhlIGVudHJpZXMgb2YgdGhlIGNsb2NrCisgKiBjaGFuZ2VkLgorICovCisjZGVmaW5lIEdTVF9DTE9DS19DT05EKGNsb2NrKSAgICAgICAgICAgIChHU1RfQ0xPQ0tfQ0FTVChjbG9jayktPmVudHJpZXNfY2hhbmdlZCkKKy8qKgorICogR1NUX0NMT0NLX1dBSVQ6CisgKiBAY2xvY2s6IHRoZSBjbG9jayB0byB3YWl0IG9uCisgKgorICogV2FpdCBvbiB0aGUgY2xvY2sgdW50aWwgdGhlIGVudHJpZXMgY2hhbmdlZC4KKyAqLworI2RlZmluZSBHU1RfQ0xPQ0tfV0FJVChjbG9jaykgICAgICAgICAgICBnX2NvbmRfd2FpdChHU1RfQ0xPQ0tfQ09ORChjbG9jayksR1NUX09CSkVDVF9HRVRfTE9DSyhjbG9jaykpCisvKioKKyAqIEdTVF9DTE9DS19USU1FRF9XQUlUOgorICogQGNsb2NrOiB0aGUgY2xvY2sgdG8gd2FpdCBvbgorICogQHR2OiBhICNHVGltZVZhbCB0byB3YWl0LgorICoKKyAqIFdhaXQgb24gdGhlIGNsb2NrIHVudGlsIHRoZSBlbnRyaWVzIGNoYW5nZWQgb3IgdGhlIHNwZWNpZmllZCB0aW1lb3V0CisgKiBvY2N1cnJlZC4KKyAqLworI2RlZmluZSBHU1RfQ0xPQ0tfVElNRURfV0FJVChjbG9jayx0dikgICBnX2NvbmRfdGltZWRfd2FpdChHU1RfQ0xPQ0tfQ09ORChjbG9jayksR1NUX09CSkVDVF9HRVRfTE9DSyhjbG9jayksdHYpCisvKioKKyAqIEdTVF9DTE9DS19CUk9BRENBU1Q6CisgKiBAY2xvY2s6IHRoZSBjbG9jayB0byBicm9hZGNhc3QKKyAqCisgKiBTaWduYWwgdGhhdCB0aGUgZW50cmllcyBpbiB0aGUgY2xvY2sgaGF2ZSBjaGFuZ2VkLgorICovCisjZGVmaW5lIEdTVF9DTE9DS19CUk9BRENBU1QoY2xvY2spICAgICAgIGdfY29uZF9icm9hZGNhc3QoR1NUX0NMT0NLX0NPTkQoY2xvY2spKQorCisvKioKKyAqIEdzdENsb2NrOgorICoKKyAqICNHc3RDbG9jayBiYXNlIHN0cnVjdHVyZS4gVGhlIHZhbHVlcyBvZiB0aGlzIHN0cnVjdHVyZSBhcmUKKyAqIHByb3RlY3RlZCBmb3Igc3ViY2xhc3NlcywgdXNlIHRoZSBtZXRob2RzIHRvIHVzZSB0aGUgI0dzdENsb2NrLgorICovCitzdHJ1Y3QgX0dzdENsb2NrIHsKKyAgR3N0T2JqZWN0CSBvYmplY3Q7CisKKyAgR011dGV4CSpzbGF2ZV9sb2NrOyAvKiBvcmRlcjogU0xBVkVfTE9DSywgT0JKRUNUX0xPQ0sgKi8KKworICAvKjwgcHJvdGVjdGVkID4qLyAvKiB3aXRoIExPQ0sgKi8KKyAgR3N0Q2xvY2tUaW1lCSBpbnRlcm5hbF9jYWxpYnJhdGlvbjsKKyAgR3N0Q2xvY2tUaW1lCSBleHRlcm5hbF9jYWxpYnJhdGlvbjsKKyAgR3N0Q2xvY2tUaW1lCSByYXRlX251bWVyYXRvcjsKKyAgR3N0Q2xvY2tUaW1lCSByYXRlX2Rlbm9taW5hdG9yOworICBHc3RDbG9ja1RpbWUJIGxhc3RfdGltZTsKKyAgR0xpc3QJCSplbnRyaWVzOworICBHQ29uZAkJKmVudHJpZXNfY2hhbmdlZDsKKworICAvKjwgcHJpdmF0ZSA+Ki8gLyogd2l0aCBMT0NLICovCisgIEdzdENsb2NrVGltZQkgcmVzb2x1dGlvbjsKKyAgZ2Jvb2xlYW4JIHN0YXRzOworCisgIC8qIGZvciBtYXN0ZXIvc2xhdmUgY2xvY2tzICovCisgIEdzdENsb2NrICAgICAgKm1hc3RlcjsKKworICAvKiB3aXRoIFNMQVZFX0xPQ0sgKi8KKyAgZ2Jvb2xlYW4gICAgICAgZmlsbGluZzsKKyAgZ2ludCAgICAgICAgICAgd2luZG93X3NpemU7CisgIGdpbnQgICAgICAgICAgIHdpbmRvd190aHJlc2hvbGQ7CisgIGdpbnQgICAgICAgICAgIHRpbWVfaW5kZXg7CisgIEdzdENsb2NrVGltZSAgIHRpbWVvdXQ7CisgIEdzdENsb2NrVGltZSAgKnRpbWVzOworICBHc3RDbG9ja0lEICAgICBjbG9ja2lkOworCisgIC8qPCBwcml2YXRlID4qLworICB1bmlvbiB7CisgICAgR3N0Q2xvY2tQcml2YXRlICpwcml2OworICAgIEdzdENsb2NrVGltZSAgICAgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107CisgIH0gQUJJOworfTsKKworLyoqCisgKiBHc3RDbG9ja0NsYXNzOgorICogQHBhcmVudF9jbGFzczogdGhlIHBhcmVudCBjbGFzcyBzdHJ1Y3R1cmUKKyAqIEBjaGFuZ2VfcmVzb2x1dGlvbjogY2hhbmdlIHRoZSByZXNvbHV0aW9uIG9mIHRoZSBjbG9jay4gTm90IGFsbCB2YWx1ZXMgbWlnaHQKKyAqICAgICAgICAgICAgICAgICAgICAgYmUgYWNjZXB0YWJsZS4gVGhlIG5ldyByZXNvbHV0aW9uIHNob3VsZCBiZSByZXR1cm5lZC4KKyAqIEBnZXRfcmVzb2x1dGlvbjogZ2V0IHRoZSByZXNvbHV0aW9uIG9mIHRoZSBjbG9jay4KKyAqIEBnZXRfaW50ZXJuYWxfdGltZTogZ2V0IHRoZSBpbnRlcm5hbCB1bmFkanVzdGVkIHRpbWUgb2YgdGhlIGNsb2NrLgorICogICAgICAgIGltcGxlbWVudCBAd2FpdF9qaXR0ZXIgaW5zdGVhZC4KKyAqIEB3YWl0OiBwZXJmb3JtIGEgYmxvY2tpbmcgd2FpdCBvbiB0aGUgZ2l2ZW4gI0dzdENsb2NrRW50cnkgYW5kIHJldHVybgorICogICAgICAgICAgICAgICB0aGUgaml0dGVyLgorICogQHdhaXRfYXN5bmM6IHBlcmZvcm0gYW4gYXN5bmNocm9ub3VzIHdhaXQgZm9yIHRoZSBnaXZlbiAjR3N0Q2xvY2tFbnRyeS4KKyAqIEB1bnNjaGVkdWxlOiB1bmJsb2NrIGEgYmxvY2tpbmcgb3IgYXN5bmMgd2FpdCBvcGVyYXRpb24uCisgKgorICogR1N0cmVhbWVyIGNsb2NrIGNsYXNzLiBPdmVycmlkZSB0aGUgdm1ldGhvZHMgdG8gaW1wbGVtZW50IHRoZSBjbG9jaworICogZnVuY3Rpb25hbGl0eS4KKyAqLworc3RydWN0IF9Hc3RDbG9ja0NsYXNzIHsKKyAgR3N0T2JqZWN0Q2xhc3MgICAgICAgIHBhcmVudF9jbGFzczsKKworICAvKjwgcHVibGljID4qLworICAvKiB2dGFibGUgKi8KKyAgR3N0Q2xvY2tUaW1lICAgICAgICAgICgqY2hhbmdlX3Jlc29sdXRpb24pICAgIChHc3RDbG9jayAqY2xvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIG9sZF9yZXNvbHV0aW9uLAorCQkJCQkJIEdzdENsb2NrVGltZSBuZXdfcmVzb2x1dGlvbik7CisgIEdzdENsb2NrVGltZSAgICAgICAgICAoKmdldF9yZXNvbHV0aW9uKSAgICAgICAoR3N0Q2xvY2sgKmNsb2NrKTsKKworICBHc3RDbG9ja1RpbWUJCSgqZ2V0X2ludGVybmFsX3RpbWUpCShHc3RDbG9jayAqY2xvY2spOworCisgIC8qIHdhaXRpbmcgb24gYW4gSUQgKi8KKyAgR3N0Q2xvY2tSZXR1cm4gICAgICAgICgqd2FpdCkgICAgICAgICAgICAgICAgIChHc3RDbG9jayAqY2xvY2ssIEdzdENsb2NrRW50cnkgKmVudHJ5LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWVEaWZmICpqaXR0ZXIpOworICBHc3RDbG9ja1JldHVybiAgICAgICAgKCp3YWl0X2FzeW5jKSAgICAgICAgICAgKEdzdENsb2NrICpjbG9jaywgR3N0Q2xvY2tFbnRyeSAqZW50cnkpOworICB2b2lkICAgICAgICAgICAgICAgICAgKCp1bnNjaGVkdWxlKQkJKEdzdENsb2NrICpjbG9jaywgR3N0Q2xvY2tFbnRyeSAqZW50cnkpOworCisgIC8qPCBwcml2YXRlID4qLworICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKK307CisKK0dUeXBlCQkJZ3N0X2Nsb2NrX2dldF90eXBlCQkodm9pZCk7CisKK0dzdENsb2NrVGltZQkJZ3N0X2Nsb2NrX3NldF9yZXNvbHV0aW9uCShHc3RDbG9jayAqY2xvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgcmVzb2x1dGlvbik7CitHc3RDbG9ja1RpbWUJCWdzdF9jbG9ja19nZXRfcmVzb2x1dGlvbgkoR3N0Q2xvY2sgKmNsb2NrKTsKKworR3N0Q2xvY2tUaW1lCQlnc3RfY2xvY2tfZ2V0X3RpbWUJCShHc3RDbG9jayAqY2xvY2spOwordm9pZAkJCWdzdF9jbG9ja19zZXRfY2FsaWJyYXRpb24JKEdzdENsb2NrICpjbG9jaywgR3N0Q2xvY2tUaW1lIGludGVybmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIGV4dGVybmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIHJhdGVfbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIHJhdGVfZGVub20pOwordm9pZAkJCWdzdF9jbG9ja19nZXRfY2FsaWJyYXRpb24JKEdzdENsb2NrICpjbG9jaywgR3N0Q2xvY2tUaW1lICppbnRlcm5hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZSAqZXh0ZXJuYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgKnJhdGVfbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lICpyYXRlX2Rlbm9tKTsKKworLyogbWFzdGVyL3NsYXZlIGNsb2NrcyAqLworZ2Jvb2xlYW4JCWdzdF9jbG9ja19zZXRfbWFzdGVyCQkoR3N0Q2xvY2sgKmNsb2NrLCBHc3RDbG9jayAqbWFzdGVyKTsKK0dzdENsb2NrKgkJZ3N0X2Nsb2NrX2dldF9tYXN0ZXIJCShHc3RDbG9jayAqY2xvY2spOworZ2Jvb2xlYW4JCWdzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb24gICAgICAgKEdzdENsb2NrICpjbG9jaywgR3N0Q2xvY2tUaW1lIHNsYXZlLAorCQkJCQkJCSBHc3RDbG9ja1RpbWUgbWFzdGVyLCBnZG91YmxlICpyX3NxdWFyZWQpOworCisKKy8qIGdldHRpbmcgYW5kIGFkanVzdGluZyBpbnRlcm5hbC9leHRlcm5hbCB0aW1lICovCitHc3RDbG9ja1RpbWUJCWdzdF9jbG9ja19nZXRfaW50ZXJuYWxfdGltZQkoR3N0Q2xvY2sgKmNsb2NrKTsKK0dzdENsb2NrVGltZQkJZ3N0X2Nsb2NrX2FkanVzdF91bmxvY2tlZAkoR3N0Q2xvY2sgKmNsb2NrLCBHc3RDbG9ja1RpbWUgaW50ZXJuYWwpOworR3N0Q2xvY2tUaW1lICAgICAgICAgICAgZ3N0X2Nsb2NrX3VuYWRqdXN0X3VubG9ja2VkICAgICAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0Q2xvY2tUaW1lIGV4dGVybmFsKTsKKworCisvKiBjcmVhdGluZyBJRHMgdGhhdCBjYW4gYmUgdXNlZCB0byBnZXQgbm90aWZpY2F0aW9ucyAqLworR3N0Q2xvY2tJRAkJZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZAkoR3N0Q2xvY2sgKmNsb2NrLAorCQkJCQkJCSBHc3RDbG9ja1RpbWUgdGltZSk7CitHc3RDbG9ja0lECQlnc3RfY2xvY2tfbmV3X3BlcmlvZGljX2lkCShHc3RDbG9jayAqY2xvY2ssCisJCQkJCQkJIEdzdENsb2NrVGltZSBzdGFydF90aW1lLAorCQkJCQkJCSBHc3RDbG9ja1RpbWUgaW50ZXJ2YWwpOworCisvKiByZWZlcmVuY2UgY291bnRpbmcgKi8KK0dzdENsb2NrSUQgICAgICAgICAgICAgIGdzdF9jbG9ja19pZF9yZWYgICAgICAgICAgICAgICAgKEdzdENsb2NrSUQgaWQpOwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2Nsb2NrX2lkX3VucmVmICAgICAgICAgICAgICAoR3N0Q2xvY2tJRCBpZCk7CisKKy8qIG9wZXJhdGlvbnMgb24gSURzICovCitnaW50CQkJZ3N0X2Nsb2NrX2lkX2NvbXBhcmVfZnVuYwkoZ2NvbnN0cG9pbnRlciBpZDEsIGdjb25zdHBvaW50ZXIgaWQyKTsKKworR3N0Q2xvY2tUaW1lCQlnc3RfY2xvY2tfaWRfZ2V0X3RpbWUJCShHc3RDbG9ja0lEIGlkKTsKK0dzdENsb2NrUmV0dXJuCQlnc3RfY2xvY2tfaWRfd2FpdAkJKEdzdENsb2NrSUQgaWQsCisJCQkJCQkJIEdzdENsb2NrVGltZURpZmYgKmppdHRlcik7CitHc3RDbG9ja1JldHVybgkJZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMJCShHc3RDbG9ja0lEIGlkLAorCQkJCQkJCSBHc3RDbG9ja0NhbGxiYWNrIGZ1bmMsCisJCQkJCQkJIGdwb2ludGVyIHVzZXJfZGF0YSk7CitHc3RDbG9ja1JldHVybgkJZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmNfZnVsbAkoR3N0Q2xvY2tJRCBpZCwKKwkJCQkJCQkgR3N0Q2xvY2tDYWxsYmFjayBmdW5jLAorCQkJCQkJCSBncG9pbnRlciB1c2VyX2RhdGEsCisJCQkJCQkJIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lfZGF0YSk7Cit2b2lkCQkJZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUJCShHc3RDbG9ja0lEIGlkKTsKKworZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X2Nsb2NrX3NpbmdsZV9zaG90X2lkX3JlaW5pdCAoR3N0Q2xvY2sgKiBjbG9jaywKKwkJCQkJCQkgR3N0Q2xvY2tJRCBpZCwKKwkJCQkJCQkgR3N0Q2xvY2tUaW1lIHRpbWUpOworZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X2Nsb2NrX3BlcmlvZGljX2lkX3JlaW5pdCAgICAoR3N0Q2xvY2sgKiBjbG9jaywKKwkJCQkJCQkgR3N0Q2xvY2tJRCBpZCwKKwkJCQkJCQkgR3N0Q2xvY2tUaW1lIHN0YXJ0X3RpbWUsCisJCQkJCQkJIEdzdENsb2NrVGltZSBpbnRlcnZhbCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9DTE9DS19IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3Rjb21wYXQuaCBiL2dzdC9nc3Rjb21wYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmE1ZmMyCi0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdGNvbXBhdC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDA0IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+CisgKgorICogZ3N0Y29tcGF0Lmg6IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHN0dWZmCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKy8qKgorICogU0VDVElPTjpnc3Rjb21wYXQKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogRGVwcmVjYXRlZCBBUEkgZW50cmllcworICoKKyAqIFBsZWFzZSBkbyBub3QgdXNlIHRoZXNlIGluIG5ldyBjb2RlLgorICogVGhlc2Ugc3ltYm9scyBhcmUgb25seSBhdmFpbGFibGUgYnkgZGVmaW5pbmcgR1NUX0RJU0FCTEVfREVQUkVDQVRFRC4KKyAqIFRoaXMgY2FuIGJlIGRvbmUgaW4gQ0ZMQUdTIGZvciBjb21waWxpbmcgb2xkIGNvZGUuCisgKi8KKworLyogQVBJIGNvbXBhdGliaWxpdHkgc3R1ZmYgKi8KKyNpZm5kZWYgX19HU1RDT01QQVRfSF9fCisjZGVmaW5lIF9fR1NUQ09NUEFUX0hfXworCitHX0JFR0lOX0RFQ0xTCisKKy8qIGFkZGVkIHRvIGVhc2UgdGhlIHRyYW5zaXRpb24gdG8gMC4xMSAqLworI2RlZmluZSBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlsc19zaW1wbGUgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YQorCisjZGVmaW5lIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X2xvbmduYW1lKGYpICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X21ldGFkYXRhKGYsIEdTVF9FTEVNRU5UX01FVEFEQVRBX0xPTkdOQU1FKQorI2RlZmluZSBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9rbGFzcyhmKSAgICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YShmLCBHU1RfRUxFTUVOVF9NRVRBREFUQV9LTEFTUykKKyNkZWZpbmUgZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfZGVzY3JpcHRpb24oZikgZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbWV0YWRhdGEoZiwgR1NUX0VMRU1FTlRfTUVUQURBVEFfREVTQ1JJUFRJT04pCisjZGVmaW5lIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X2F1dGhvcihmKSAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X21ldGFkYXRhKGYsIEdTVF9FTEVNRU5UX01FVEFEQVRBX0FVVEhPUikKKyNkZWZpbmUgZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfZG9jdW1lbnRhdGlvbl91cmkoZikgIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X21ldGFkYXRhKGYsIEdTVF9FTEVNRU5UX01FVEFEQVRBX0RPQ19VUkkpCisjZGVmaW5lIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X2ljb25fbmFtZShmKSAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X21ldGFkYXRhKGYsIEdTVF9FTEVNRU5UX01FVEFEQVRBX0lDT05fTkFNRSkKKworI2RlZmluZSBnc3RfcGFkX2dldF9jYXBzX3JlZmZlZChwKSAgICAgICAgICAgICBnc3RfcGFkX2dldF9jYXBzKHApCisjZGVmaW5lIGdzdF9wYWRfcGVlcl9nZXRfY2Fwc19yZWZmZWQocCkgICAgICAgIGdzdF9wYWRfcGVlcl9nZXRfY2FwcyhwKQorCisvLyNkZWZpbmUgZ3N0X2J1ZmZlcl9jcmVhdGVfc3ViKGIsbyxzKSAgICAgICAgICAgZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbihiLEdTVF9CVUZGRVJfQ09QWV9BTEwsbyxzKQorCisjZGVmaW5lIGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyhzKSAgICAgICAgICAgIGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlKE5VTEwsIHMsIDApCisKKworI2lmbmRlZiBHU1RfRElTQUJMRV9ERVBSRUNBVEVECisKKyNlbmRpZiAvKiBub3QgR1NUX0RJU0FCTEVfREVQUkVDQVRFRCAqLworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HU1RDT01QQVRfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0Y29uZmlnLmguaW4gYi9nc3QvZ3N0Y29uZmlnLmguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FmMjQ5NgotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3Rjb25maWcuaC5pbgpAQCAtMCwwICsxLDE5OSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAyMDA0LDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KKyAqCisgKiBnc3Rjb25maWcuaDogR1NUX0RJU0FCTEVfKiBtYWNyb3MgZm9yIGJ1aWxkIGNvbmZpZ3VyYXRpb24KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKioKKyAqIFNFQ1RJT046Z3N0Y29uZmlnCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEJ1aWxkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworICoKKyAqIFRoaXMgZGVzY3JpYmVzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEdTdHJlYW1lci4gV2hlbiBidWlsZGluZworICogR1N0cmVhbWVyIHRoZXJlIGFyZSBhIGxvdCBvZiBwYXJ0cyAoa25vd24gaW50ZXJuYWxseSBhcyAic3Vic3lzdGVtcyIgKSB0aGF0CisgKiBjYW4gYmUgZGlzYWJsZWQgZm9yIHZhcmlvdXMgcmVhc29ucy4gVGhlIG1vc3QgY29tbW9uIHJlYXNvbnMgYXJlIHNwZWVkIGFuZAorICogc2l6ZSwgd2hpY2ggaXMgaW1wb3J0YW50IGJlY2F1c2UgR1N0cmVhbWVyIGlzIGRlc2lnbmVkIHRvIHJ1biBvbiBlbWJlZGRlZAorICogc3lzdGVtcy4KKyAqCisgKiBJZiBhIHN1YnN5c3RlbSBpcyBkaXNhYmxlZCwgbW9zdCBvZiB0aGlzIGNoYW5nZXMgYXJlIGRvbmUgaW4gYW4gQVBJCisgKiBjb21wYXRpYmxlIHdheSwgc28geW91IGRvbid0IG5lZWQgdG8gYWRhcHQgeW91ciBjb2RlIGluIG1vc3QgY2FzZXMuIEl0IGlzCisgKiBuZXZlciBkb25lIGluIGFuIEFCSSBjb21wYXRpYmxlIHdheSB0aG91Z2guIFNvIGlmIHlvdSB3YW50IHRvIGRpc2FibGUgYQorICogc3V5YnN5c3RlbSwgeW91IGhhdmUgdG8gcmVidWlsZCBhbGwgcHJvZ3JhbXMgZGVwZW5kaW5nIG9uIEdTdHJlYW1lciwgdG9vLgorICoKKyAqIElmIGEgc3Vic3lzdGVtIGlzIGRpc2FibGVkIGluIEdTdHJlYW1lciwgYSB2YWx1ZSBpcyBkZWZpbmVkIGluCisgKiAmbHQ7Z3N0L2dzdC5oJmd0Oy4gWW91IGNhbiBjaGVjayB0aGlzIGlmIHlvdSBkbyBzdWJzeXN0ZW0tc3BlY2lmaWMgc3R1ZmYuCisgKiA8ZXhhbXBsZSBpZD0iZXhhbXBsZS1nc3Rjb25maWciPgorICogPHRpdGxlPkRvaW5nIHN1YnN5c3RlbSBzcGVjaWZpYyB0aGluZ3M8L3RpdGxlPgorICogPHByb2dyYW1saXN0aW5nPgorICogJmhhc2g7aWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICogLy8gZG8gc3R1ZmYgc3BlY2lmaWMgdG8gdGhlIGRlYnVnZ2luZyBzdWJzeXN0ZW0KKyAqICZoYXNoO2VuZGlmIC8vIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICogPC9wcm9ncmFtbGlzdGluZz4KKyAqIDwvZXhhbXBsZT4KKyAqLworCisjaWZuZGVmIF9fR1NUX0NPTkZJR19IX18KKyNkZWZpbmUgX19HU1RfQ09ORklHX0hfXworCisvKiB0cmljayBndGstZG9jIGludG8gYmVsaWV2aW5nIHRoZXNlIHN5bWJvbHMgYXJlIGRlZmluZWQgKHllcywgaXQncyB1Z2x5KSAqLworCisjaWYgMAorI2RlZmluZSBHU1RfRElTQUJMRV9HU1RfREVCVUcgMQorI2RlZmluZSBHU1RfRElTQUJMRV9QQVJTRSAxCisjZGVmaW5lIEdTVF9ESVNBQkxFX1RSQUNFIDEKKyNkZWZpbmUgR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0UgMQorI2RlZmluZSBHU1RfRElTQUJMRV9SRUdJU1RSWSAxCisjZGVmaW5lIEdTVF9ESVNBQkxFX1BMVUdJTiAxCisjZGVmaW5lIEdTVF9IQVZFX0dMSUJfMl84IDEKKyNlbmRpZgorCisvKioqKiogZGVmYXVsdCBwYWRkaW5nIG9mIHN0cnVjdHVyZXMgKioqKiovCisjZGVmaW5lIEdTVF9QQURESU5HCQk0CisjZGVmaW5lIEdTVF9QQURESU5HX0lOSVQJeyBOVUxMIH0KKworLyoqKioqIHBhZGRpbmcgZm9yIHZlcnkgZXh0ZW5zaWJsZSBiYXNlIGNsYXNzZXMgKioqKiovCisjZGVmaW5lIEdTVF9QQURESU5HX0xBUkdFCTIwCisKKy8qKioqKiBkaXNhYmxpbmcgb2Ygc3Vic3lzdGVtcyAqKioqKi8KKworLyoqCisgKiBHU1RfRElTQUJMRV9HU1RfREVCVUc6CisgKgorICogQ29uZmlndXJlcyB0aGUgaW5jbHVzaW9uIG9mIHRoZSBkZWJ1Z2dpbmcgc3Vic3lzdGVtCisgKi8KK0BHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAorCisvKioKKyAqIEdTVF9ESVNBQkxFX1BBUlNFOgorICoKKyAqIENvbmZpZ3VyZXMgdGhlIGluY2x1c2lvbiBvZiB0aGUgZ3N0LWxhdWNoIHBhcnNlcgorICovCitAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAorCisvKioKKyAqIEdTVF9ESVNBQkxFX1RSQUNFOgorICoKKyAqIENvbmZpZ3VyZXMgdGhlIGluY2x1c2lvbiBvZiBhIHJlc291cmNlIHRyYWNpbmcgZmFjaWxsaXR5CisgKiAoc2VlbXMgdG8gYmUgdW51c2VkKQorICovCitAR1NUX0RJU0FCTEVfVFJBQ0VfREVGSU5FQAorCisvKioKKyAqIEdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFOgorICoKKyAqIENvbmZpZ3VyZXMgdGhlIHVzZSBvZiBhIG1lbW9yeSB0cmFjZXIgYmFzZWQgb24gdGhlIHJlc291cmNlIHRyYWNlcgorICogaWYgVFJBQ0UgaXMgZGlzYWJsZWQsIEFMTE9DX1RSQUNFIGlzIGRpc2FibGVkIGFzIHdlbGwKKyAqLworQEdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORUAKKworLyoqCisgKiBHU1RfRElTQUJMRV9SRUdJU1RSWToKKyAqCisgKiBDb25maWd1cmVzIHRoZSB1c2Ugb2YgdGhlIHBsdWdpbiByZWdpc3RyeS4KKyAqIElmIG9uZSBkaXNhYmxlcyB0aGlzLCByZXF1aXJlZCBwbHVnaW5zIG5lZWQgdG8gYmUgbG9hZGVkIGFuZCByZWdpc3RlcmVkCisgKiBtYW51YWxseQorICovCitAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAorCisvKiBGSVhNRTogdGVzdCBhbmQgZG9jdW1lbnQgdGhlc2UhICovCisvKiBDb25maWd1cmVzIHRoZSB1c2Ugb2YgZXh0ZXJuYWwgcGx1Z2lucyAqLworQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACisKKy8qIHByaW50ZiBleHRlbnNpb24gZm9ybWF0ICovCisvKioKKyAqIEdTVF9QVFJfRk9STUFUOgorICoKKyAqIHByaW50ZiBmb3JtYXQgdHlwZSB1c2VkIHRvIGRlYnVnIEdTdHJlYW1lciB0eXBlcy4KKyAqIFRoaXMgY2FuIG9ubHkgYmUgdXNlZCBvbiB0eXBlcyB3aG9zZSBzaXplIGlzID49IHNpemVvZihncG9pbnRlcikuCisgKi8KK0BHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkVACisvKioKKyAqIEdTVF9TRUdNRU5UX0ZPUk1BVDoKKyAqCisgKiBwcmludGYgZm9ybWF0IHR5cGUgdXNlZCB0byBkZWJ1ZyBHU3RyZWFtZXIgc2VnbWVudHMuCisgKiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgb24gcG9pbnRlcnMgdG8gR3N0U2VnbWVudCBzdHJ1Y3R1cmVzLgorICoKKyAqIFNpbmNlOiAwLjEwLjEwCisgKi8KK0BHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkVACisKKy8qIHdoZXRoZXIgb3Igbm90IEdTVF9QVFJfRk9STUFUIG9yIEdTVF9TRUdNRU5UX0ZPUk1BVCBhcmUgdXNpbmcKKyAqIHRoZSBwcmludGYgZXh0ZW5zaW9uIG1lY2hhbmlzbS4gVGhpcyBpcyBmb3IgaW50ZXJuYWwgdXNlIGluIG91cgorICogaGVhZGVyIGZpbGVzIHNvIHdlIGtub3cgd2hldGhlciB3ZSBjYW4gdXNlIEdfR05VQ19QUklOVEYgb3Igbm90ICovCitAR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FQAorCisvKiBHU1RfRElTQUJMRV9QUklOVEZfRVhURU5TSU9OOgorICoKKyAqIERlZmluZSB0aGlzIHRvIGRlYnVnIHlvdXIgZGVidWcgbG9nIG1lc3NhZ2VzIGFuZCBtYWtlIGdjYyBzcGV3IHdhcm5pbmdzCisgKiBpZiBwcmludGYgZm9ybWF0IHN0cmluZyBhbmQgYXJndW1lbnRzIGRvbid0IG1hdGNoIHVwICh0aGlzIGlzIHVzdWFsbHkKKyAqIG5vdCB0aGUgY2FzZSB3aGVuIGxpYmMgYW5kIGdjYyBhcmUgdXNlZCBiZWNhdXNlIHByaW50ZiBmb3JtYXQgd2FybmluZ3MKKyAqIGhhdmUgdG8gYmUgZGlzYWJsZWQgd2hlbiB0aGUgcHJpbnRmIGV4dGVuc2lvbiBtZWNoYW5pc20gaXMgaW4gdXNlKS4KKyAqCisgKiBOb3RlIHRoYXQgdXNpbmcgdGhpcyBvcHRpb24gZGlzYWJsZXMgJ3ByZXR0eSBsb2dnaW5nJyBvZiBHU3RyZWFtZXIgb2JqZWN0cworICogbGlrZSBjYXBzLCB0YWdzLCBzdHJ1Y3R1cmVzLCBldmVudHMsIHBhZHMgZXRjLiwgc28gdGhhdCBvbmx5IHRoZWlyIGFkZHJlc3MKKyAqIHdpbGwgYmUgcHJpbnRlZCBpbiB0aGUgbG9nLgorICoKKyAqIFRoaXMgZGVmaW5lIG9ubHkgZGlzYWJsZXMgdXNlIG9mIHRoZSBzcGVjaWFsIHJlZ2lzdGVyZWQgcHJpbnRmIGZvcm1hdAorICogZXh0ZW5zaW9ucyBpbiB0aGUgY29kZSBjb21waWxlZCB3aXRoIGl0IGRlZmluZWQuIEl0IGRvZXMgbm90IHN0b3AKKyAqIEdTdHJlYW1lciBmcm9tIHJlZ2lzdGVyaW5nIHRoZXNlIGV4dGVuc2lvbnMgaW4gdGhlIGZpcnN0IHBsYWNlIGlmIGl0CisgKiB3YXMgY29tcGlsZWQgYWdhaW5zdCBhIGxpYmMgdGhhdCBzdXBwb3J0cyB0aGlzLgorICoKKyAqIChub3Qgb2ZmaWNpYWwgQVBJKQorICovCisvKiBJZiBHTGliIGlzIG5vdCB1c2luZyB0aGUgc3lzdGVtIHByaW50Ziwgd2UgY2FuJ3QgdXNlIHRoZSByZWdpc3RlcmVkCisgKiBleHRlbnNpb25zIGJlY2F1c2UgdGhlIEdMaWItaW50ZXJuYWwgcHJpbnRmIHdvbid0IGtub3cgaG93IHRvIHBhcnNlIHRoZW0gKi8KKyNpZiBkZWZpbmVkKEdTVF9ESVNBQkxFX1BSSU5URl9FWFRFTlNJT04pIHx8ICFkZWZpbmVkKEdMSUJfVVNJTkdfU1lTVEVNX1BSSU5URikKKyAgI3VuZGVmIEdTVF9QVFJfRk9STUFUCisgICNkZWZpbmUgR1NUX1BUUl9GT1JNQVQgInAiCisgICN1bmRlZiBHU1RfU0VHTUVOVF9GT1JNQVQKKyAgI2RlZmluZSBHU1RfU0VHTUVOVF9GT1JNQVQgInAiCisgICN1bmRlZiBHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTgorI2VuZGlmCisKKy8qIHdoZXRoZXIgb3Igbm90IHRoZSBDUFUgc3VwcG9ydHMgdW5hbGlnbmVkIGFjY2VzcyAqLworQEdTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FQAorCisvKioKKyAqIEdTVF9FWFBPUlQ6CisgKgorICogRXhwb3J0IHRoZSBnaXZlbiB2YXJpYWJsZSBmcm9tIHRoZSBidWlsdCBzaGFyZWQgb2JqZWN0LgorICoKKyAqIE9uIFdpbmRvd3MsIHRoaXMgZXhwb3J0cyB0aGUgdmFyaWFibGUgZnJvbSB0aGUgRExMLgorICogT24gb3RoZXIgcGxhdGZvcm1zLCB0aGlzIGdldHMgZGVmaW5lZCB0byAiZXh0ZXJuIi4KKyAqLworLyoqCisgKiBHU1RfUExVR0lOX0VYUE9SVDoKKyAqCisgKiBFeHBvcnQgdGhlIHBsdWdpbidzIGRlZmluaXRpb24uCisgKgorICogT24gV2luZG93cywgdGhpcyBleHBvcnRzIHRoZSBwbHVnaW4gZGVmaW5pdGlvbiBmcm9tIHRoZSBETEwuCisgKiBPbiBvdGhlciBwbGF0Zm9ybXMsIHRoaXMgZ2V0cyBkZWZpbmVkIGFzIGEgbm8tb3AuCisgKi8KKyNpZmRlZiBfTVNDX1ZFUgorI2RlZmluZSBHU1RfUExVR0lOX0VYUE9SVCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkgZXh0ZXJuCisjaWZkZWYgR1NUX0VYUE9SVFMKKyNkZWZpbmUgR1NUX0VYUE9SVCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkgZXh0ZXJuCisjZWxzZQorI2RlZmluZSBHU1RfRVhQT1JUIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSBleHRlcm4KKyNlbmRpZgorI2Vsc2UgLyogbm90IF9NU0NfVkVSICovCisjZGVmaW5lIEdTVF9QTFVHSU5fRVhQT1JUCisjZGVmaW5lIEdTVF9FWFBPUlQgZXh0ZXJuCisjZW5kaWYKKworI2VuZGlmIC8qIF9fR1NUX0NPTkZJR19IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RkYXRldGltZS5jIGIvZ3N0L2dzdGRhdGV0aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBmNzA5ZgotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RkYXRldGltZS5jCkBAIC0wLDAgKzEsODE2IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJnbGliLWNvbXBhdC1wcml2YXRlLmgiCisjaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJnc3RkYXRldGltZS5oIgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKy8qKgorICogU0VDVElPTjpnc3RkYXRldGltZQorICogQHRpdGxlOiBHc3REYXRlVGltZQorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBBIGRhdGUsIHRpbWUgYW5kIHRpbWV6b25lIHN0cnVjdHVyZQorICoKKyAqIFN0cnVjdCB0byBzdG9yZSBkYXRlLCB0aW1lIGFuZCB0aW1lem9uZSBpbmZvcm1hdGlvbiBhbHRvZ2V0aGVyLgorICogI0dzdERhdGVUaW1lIGlzIHJlZmNvdW50ZWQgYW5kIGltbXV0YWJsZS4KKyAqCisgKiBEYXRlIGluZm9ybWF0aW9uIGlzIGhhbmRsZWQgdXNpbmcgdGhlIHByb2xlcHRpYyBHcmVnb3JpYW4gY2FsZW5kYXIuCisgKgorICogUHJvdmlkZXMgYmFzaWMgY3JlYXRpb24gZnVuY3Rpb25zIGFuZCBhY2Nlc3NvciBmdW5jdGlvbnMgdG8gaXRzIGZpZWxkcy4KKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCisKKy8qKgorICogZ3N0X2RhdGVfdGltZV9nZXRfeWVhcjoKKyAqIEBkYXRldGltZTogYSAjR3N0RGF0ZVRpbWUKKyAqCisgKiBSZXR1cm5zIHRoZSB5ZWFyIG9mIHRoaXMgI0dzdERhdGVUaW1lCisgKgorICogUmV0dXJuIHZhbHVlOiBUaGUgeWVhciBvZiB0aGlzICNHc3REYXRlVGltZQorICogU2luY2U6IDAuMTAuMzEKKyAqLworCisvKioKKyAqIGdzdF9kYXRlX3RpbWVfZ2V0X21vbnRoOgorICogQGRhdGV0aW1lOiBhICNHc3REYXRlVGltZQorICoKKyAqIFJldHVybnMgdGhlIG1vbnRoIG9mIHRoaXMgI0dzdERhdGVUaW1lLiBKYW51YXJ5IGlzIDEsIEZlYnJ1YXJ5IGlzIDIsIGV0Yy4uCisgKgorICogUmV0dXJuIHZhbHVlOiBUaGUgbW9udGggb2YgdGhpcyAjR3N0RGF0ZVRpbWUKKyAqIFNpbmNlOiAwLjEwLjMxCisgKi8KKworLyoqCisgKiBnc3RfZGF0ZV90aW1lX2dldF9kYXk6CisgKiBAZGF0ZXRpbWU6IGEgI0dzdERhdGVUaW1lCisgKgorICogUmV0dXJucyB0aGUgZGF5IG9mIHRoaXMgI0dzdERhdGVUaW1lLgorICoKKyAqIFJldHVybiB2YWx1ZTogVGhlIGRheSBvZiB0aGlzICNHc3REYXRlVGltZQorICogU2luY2U6IDAuMTAuMzEKKyAqLworCisvKioKKyAqIGdzdF9kYXRlX3RpbWVfZ2V0X2hvdXI6CisgKiBAZGF0ZXRpbWU6IGEgI0dzdERhdGVUaW1lCisgKgorICogUmV0cmlldmVzIHRoZSBob3VyIG9mIHRoZSBkYXkgcmVwcmVzZW50ZWQgYnkgQGRhdGV0aW1lIGluIHRoZSBncmVnb3JpYW4KKyAqIGNhbGVuZGFyLiBUaGUgcmV0dXJuIGlzIGluIHRoZSByYW5nZSBvZiAwIHRvIDIzLgorICoKKyAqIFJldHVybiB2YWx1ZTogdGhlIGhvdXIgb2YgdGhlIGRheQorICoKKyAqIFNpbmNlOiAwLjEwLjMxCisgKi8KKworLyoqCisgKiBnc3RfZGF0ZV90aW1lX2dldF9taWNyb3NlY29uZDoKKyAqIEBkYXRldGltZTogYSAjR3N0RGF0ZVRpbWUKKyAqCisgKiBSZXRyaWV2ZXMgdGhlIGZyYWN0aW9uYWwgcGFydCBvZiB0aGUgc2Vjb25kcyBpbiBtaWNyb3NlY29uZHMgcmVwcmVzZW50ZWQgYnkKKyAqIEBkYXRldGltZSBpbiB0aGUgZ3JlZ29yaWFuIGNhbGVuZGFyLgorICoKKyAqIFJldHVybiB2YWx1ZTogdGhlIG1pY3Jvc2Vjb25kIG9mIHRoZSBzZWNvbmQKKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCisKKy8qKgorICogZ3N0X2RhdGVfdGltZV9nZXRfbWludXRlOgorICogQGRhdGV0aW1lOiBhICNHc3REYXRlVGltZQorICoKKyAqIFJldHJpZXZlcyB0aGUgbWludXRlIG9mIHRoZSBob3VyIHJlcHJlc2VudGVkIGJ5IEBkYXRldGltZSBpbiB0aGUgZ3JlZ29yaWFuCisgKiBjYWxlbmRhci4KKyAqCisgKiBSZXR1cm4gdmFsdWU6IHRoZSBtaW51dGUgb2YgdGhlIGhvdXIKKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCisKKy8qKgorICogZ3N0X2RhdGVfdGltZV9nZXRfc2Vjb25kOgorICogQGRhdGV0aW1lOiBhICNHc3REYXRlVGltZQorICoKKyAqIFJldHJpZXZlcyB0aGUgc2Vjb25kIG9mIHRoZSBtaW51dGUgcmVwcmVzZW50ZWQgYnkgQGRhdGV0aW1lIGluIHRoZSBncmVnb3JpYW4KKyAqIGNhbGVuZGFyLgorICoKKyAqIFJldHVybiB2YWx1ZTogdGhlIHNlY29uZCByZXByZXNlbnRlZCBieSBAZGF0ZXRpbWUKKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCisKKy8qKgorICogZ3N0X2RhdGVfdGltZV9nZXRfc2Vjb25kOgorICogQGRhdGV0aW1lOiBhICNHc3REYXRlVGltZQorICoKKyAqIFJldHJpZXZlcyB0aGUgc2Vjb25kIG9mIHRoZSBtaW51dGUgcmVwcmVzZW50ZWQgYnkgQGRhdGV0aW1lIGluIHRoZSBncmVnb3JpYW4KKyAqIGNhbGVuZGFyLgorICoKKyAqIFJldHVybiB2YWx1ZTogdGhlIHNlY29uZCByZXByZXNlbnRlZCBieSBAZGF0ZXRpbWUKKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCisKKy8qKgorICogZ3N0X2RhdGVfdGltZV9nZXRfdGltZV96b25lX29mZnNldDoKKyAqIEBkYXRldGltZTogYSAjR3N0RGF0ZVRpbWUKKyAqCisgKiBSZXRyaWV2ZXMgdGhlIG9mZnNldCBmcm9tIFVUQyBpbiBob3VycyB0aGF0IHRoZSB0aW1lem9uZSBzcGVjaWZpZWQKKyAqIGJ5IEBkYXRldGltZSByZXByZXNlbnRzLiBUaW1lem9uZXMgYWhlYWQgKHRvIHRoZSBlYXN0KSBvZiBVVEMgaGF2ZSBwb3NpdGl2ZQorICogdmFsdWVzLCB0aW1lem9uZXMgYmVmb3JlICh0byB0aGUgd2VzdCkgb2YgVVRDIGhhdmUgbmVnYXRpdmUgdmFsdWVzLgorICogSWYgQGRhdGV0aW1lIHJlcHJlc2VudHMgVVRDIHRpbWUsIHRoZW4gdGhlIG9mZnNldCBpcyB6ZXJvLgorICoKKyAqIFJldHVybiB2YWx1ZTogdGhlIG9mZnNldCBmcm9tIFVUQyBpbiBob3VycworICogU2luY2U6IDAuMTAuMzEKKyAqLworCisvKioKKyAqIGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF9sb2NhbF90aW1lOgorICogQHNlY3M6IHNlY29uZHMgZnJvbSB0aGUgVW5peCBlcG9jaAorICoKKyAqIENyZWF0ZXMgYSBuZXcgI0dzdERhdGVUaW1lIHVzaW5nIHRoZSB0aW1lIHNpbmNlIEphbiAxLCAxOTcwIHNwZWNpZmllZCBieQorICogQHNlY3MuIFRoZSAjR3N0RGF0ZVRpbWUgaXMgaW4gdGhlIGxvY2FsIHRpbWV6b25lLgorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdzdF9kYXRlX3RpbWVfdW5yZWYKKyAqCisgKiBSZXR1cm4gdmFsdWU6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ld2x5IGNyZWF0ZWQgI0dzdERhdGVUaW1lCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLworCisvKioKKyAqIGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF91dGM6CisgKiBAc2Vjczogc2Vjb25kcyBmcm9tIHRoZSBVbml4IGVwb2NoCisgKgorICogQ3JlYXRlcyBhIG5ldyAjR3N0RGF0ZVRpbWUgdXNpbmcgdGhlIHRpbWUgc2luY2UgSmFuIDEsIDE5NzAgc3BlY2lmaWVkIGJ5CisgKiBAc2Vjcy4gVGhlICNHc3REYXRlVGltZSBpcyBpbiB0aGUgVVRDIHRpbWV6b25lLgorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdzdF9kYXRlX3RpbWVfdW5yZWYKKyAqCisgKiBSZXR1cm4gdmFsdWU6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ld2x5IGNyZWF0ZWQgI0dzdERhdGVUaW1lCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLworCisvKioKKyAqIGdzdF9kYXRlX3RpbWVfbmV3X2xvY2FsX3RpbWU6CisgKiBAeWVhcjogdGhlIGdyZWdvcmlhbiB5ZWFyCisgKiBAbW9udGg6IHRoZSBncmVnb3JpYW4gbW9udGgKKyAqIEBkYXk6IHRoZSBkYXkgb2YgdGhlIGdyZWdvcmlhbiBtb250aAorICogQGhvdXI6IHRoZSBob3VyIG9mIHRoZSBkYXkKKyAqIEBtaW51dGU6IHRoZSBtaW51dGUgb2YgdGhlIGhvdXIKKyAqIEBzZWNvbmRzOiB0aGUgc2Vjb25kIG9mIHRoZSBtaW51dGUKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNHc3REYXRlVGltZSB1c2luZyB0aGUgZGF0ZSBhbmQgdGltZXMgaW4gdGhlIGdyZWdvcmlhbiBjYWxlbmRhcgorICogaW4gdGhlIGxvY2FsIHRpbWV6b25lLgorICoKKyAqIEB5ZWFyIHNob3VsZCBiZSBmcm9tIDEgdG8gOTk5OSwgQG1vbnRoIHNob3VsZCBiZSBmcm9tIDEgdG8gMTIsIEBkYXkgZnJvbQorICogMSB0byAzMSwgQGhvdXIgZnJvbSAwIHRvIDIzLCBAbWludXRlcyBhbmQgQHNlY29uZHMgZnJvbSAwIHRvIDU5LgorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdzdF9kYXRlX3RpbWVfdW5yZWYKKyAqCisgKiBSZXR1cm4gdmFsdWU6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ld2x5IGNyZWF0ZWQgI0dzdERhdGVUaW1lCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLworCisvKioKKyAqIGdzdF9kYXRlX3RpbWVfbmV3OgorICogQHR6b2Zmc2V0OiBPZmZzZXQgZnJvbSBVVEMgaW4gaG91cnMuCisgKiBAeWVhcjogdGhlIGdyZWdvcmlhbiB5ZWFyCisgKiBAbW9udGg6IHRoZSBncmVnb3JpYW4gbW9udGgKKyAqIEBkYXk6IHRoZSBkYXkgb2YgdGhlIGdyZWdvcmlhbiBtb250aAorICogQGhvdXI6IHRoZSBob3VyIG9mIHRoZSBkYXkKKyAqIEBtaW51dGU6IHRoZSBtaW51dGUgb2YgdGhlIGhvdXIKKyAqIEBzZWNvbmRzOiB0aGUgc2Vjb25kIG9mIHRoZSBtaW51dGUKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNHc3REYXRlVGltZSB1c2luZyB0aGUgZGF0ZSBhbmQgdGltZXMgaW4gdGhlIGdyZWdvcmlhbiBjYWxlbmRhcgorICogaW4gdGhlIHN1cHBsaWVkIHRpbWV6b25lLgorICoKKyAqIEB5ZWFyIHNob3VsZCBiZSBmcm9tIDEgdG8gOTk5OSwgQG1vbnRoIHNob3VsZCBiZSBmcm9tIDEgdG8gMTIsIEBkYXkgZnJvbQorICogMSB0byAzMSwgQGhvdXIgZnJvbSAwIHRvIDIzLCBAbWludXRlcyBhbmQgQHNlY29uZHMgZnJvbSAwIHRvIDU5LgorICoKKyAqIE5vdGUgdGhhdCBAdHpvZmZzZXQgaXMgYSBmbG9hdCBhbmQgd2FzIGNob3NlbiBzbyBmb3IgYmVpbmcgYWJsZSB0byBoYW5kbGUKKyAqIHNvbWUgZnJhY3Rpb25hbCB0aW1lem9uZXMsIHdoaWxlIGl0IHN0aWxsIGtlZXBzIHRoZSByZWFkYWJpbGl0eSBvZgorICogcmVwcmVzZXRpbmcgaXQgaW4gaG91cnMgZm9yIG1vc3QgdGltZXpvbmVzLgorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdzdF9kYXRlX3RpbWVfdW5yZWYKKyAqCisgKiBSZXR1cm4gdmFsdWU6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ld2x5IGNyZWF0ZWQgI0dzdERhdGVUaW1lCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLworCisvKioKKyAqIGdzdF9kYXRlX3RpbWVfbmV3X25vd19sb2NhbF90aW1lOgorICoKKyAqIENyZWF0ZXMgYSBuZXcgI0dzdERhdGVUaW1lIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lLgorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdzdF9kYXRlX3RpbWVfdW5yZWYKKyAqCisgKiBSZXR1cm4gdmFsdWU6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ld2x5IGNyZWF0ZWQgI0dzdERhdGVUaW1lIHdoaWNoIHNob3VsZAorICogICAgIGJlIGZyZWVkIHdpdGggZ3N0X2RhdGVfdGltZV91bnJlZigpLgorICoKKyAqIFNpbmNlOiAwLjEwLjMxCisgKi8KKworLyoqCisgKiBnc3RfZGF0ZV90aW1lX25ld19ub3dfdXRjOgorICoKKyAqIENyZWF0ZXMgYSBuZXcgI0dzdERhdGVUaW1lIHRoYXQgcmVwcmVzZW50cyB0aGUgY3VycmVudCBpbnN0YW50IGF0IFVuaXZlcnNhbAorICogY29vcmRpbmF0ZWQgdGltZS4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnc3RfZGF0ZV90aW1lX3VucmVmCisgKgorICogUmV0dXJuIHZhbHVlOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXdseSBjcmVhdGVkICNHc3REYXRlVGltZSB3aGljaCBzaG91bGQKKyAqICAgYmUgZnJlZWQgd2l0aCBnc3RfZGF0ZV90aW1lX3VucmVmKCkuCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLworCisKKyNkZWZpbmUgR1NUX0RBVEVfVElNRV9TRUNfUEVSX0RBWSAgICAgICAgICAoR19HSU5UNjRfQ09OU1RBTlQgKDg2NDAwKSkKKyNkZWZpbmUgR1NUX0RBVEVfVElNRV9VU0VDX1BFUl9EQVkgICAgICAgICAoR19HSU5UNjRfQ09OU1RBTlQgKDg2NDAwMDAwMDAwKSkKKyNkZWZpbmUgR1NUX0RBVEVfVElNRV9VU0VDX1BFUl9IT1VSICAgICAgICAoR19HSU5UNjRfQ09OU1RBTlQgKDM2MDAwMDAwMDApKQorI2RlZmluZSBHU1RfREFURV9USU1FX1VTRUNfUEVSX01JTlVURSAgICAgIChHX0dJTlQ2NF9DT05TVEFOVCAoNjAwMDAwMDApKQorI2RlZmluZSBHU1RfREFURV9USU1FX1VTRUNfUEVSX1NFQ09ORCAgICAgIChHX0dJTlQ2NF9DT05TVEFOVCAoMTAwMDAwMCkpCisjZGVmaW5lIEdTVF9EQVRFX1RJTUVfVVNFQ19QRVJfTUlMTElTRUNPTkQgKEdfR0lOVDY0X0NPTlNUQU5UICgxMDAwKSkKKworLyogSmFuIDV0aCAyMDExIChFZHdhcmQpIDogR0xpYidzIEdEYXRlVGltZSBpcyBicm9rZW4gaW4gcmVnYXJkcyB0byBnbXQgb2Zmc2V0CisgKiBvbiBtYWNvc3guIFJlLWVuYWJsZSBpdCBvbmNlIHRoZSBmb2xsb3dpbmcgYnVnIGlzIGZpeGVkOgorICogaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzODY2NiAqLworI2lmZGVmIEhBVkVfT1NYCisjdW5kZWYgR0xJQl9IQVNfR0RBVEVUSU1FCisjZW5kaWYKKworCisjaWZuZGVmIEdMSUJfSEFTX0dEQVRFVElNRQorCisjZGVmaW5lIE1BWF9TVVBQT1JURURfWUVBUiA5OTk5CisjZGVmaW5lIEdSRUdPUklBTl9MRUFQKHkpICAoKCh5JTQpPT0wKSYmKCEoKCh5JTEwMCk9PTApJiYoKHklNDAwKSE9MCkpKSkKKworc3RhdGljIGNvbnN0IGd1aW50MTYgZGF5c19pbl9tb250aHNbMl1bMTNdID0geworICB7MCwgMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMX0sCisgIHswLCAzMSwgMjksIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxfQorfTsKKworc3RydWN0IF9Hc3REYXRlVGltZQoreworICAvKgorICAgKiBBcyB3ZSBkb24ndCBoYXZlIGEgZGF0ZXRpbWUgbWF0aCBBUEksIHdlIGNhbiBoYXZlIGZpZWxkcyBzcGxpdCBoZXJlLgorICAgKiAoVGhlcmUgaXMgc3RpbGwgc29tZSBtYXRoIGRvbmUgaW50ZXJuYWxseSwgYnV0IG5vdGhpbmcgcmVhbGx5IHJlbGV2YW50KS4KKyAgICoKKyAgICogSWYgd2UgZXZlciBhZGQgb25lLCB3ZSBzaG91bGQgZ28gZm9yIGEgZGF5cyBzaW5jZSBzb21lIGVwb2NoIGNvdW50ZXIuCisgICAqIChQcm9sZXB0aWMgR3JlZ29yaWFuIHdpdGggMDAwMS0wMS0wMSBhcyBkYXkgMSkKKyAgICovCisgIGdpbnQxNiB5ZWFyOworICBnaW50OCBtb250aDsKKyAgZ2ludDggZGF5OworICBndWludDY0IHVzZWM7ICAgICAgICAgICAgICAgICAvKiBNaWNyb3NlY29uZCB0aW1la2VlcGluZyB3aXRoaW4gRGF5ICovCisKKyAgZ2ludCB0em9mZnNldDsKKworICB2b2xhdGlsZSBnaW50IHJlZl9jb3VudDsKK307CisKKy8qCisgKiBSZXR1cm5zIHRoZSB1dGMgb2Zmc2V0IGluIHNlY29uZHMgZm9yIHRoaXMgdGltZSBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIGdpbnQKK2dtdF9vZmZzZXQgKHN0cnVjdCB0bSAqdG0sIHRpbWVfdCB0KQoreworI2lmIGRlZmluZWQgKEhBVkVfVE1fR01UT0ZGKQorICByZXR1cm4gdG0tPnRtX2dtdG9mZjsKKyNlbHNlCisgIHN0cnVjdCB0bSBnOworICB0aW1lX3QgdDI7CisjaWZkZWYgSEFWRV9HTVRJTUVfUgorICBnbXRpbWVfciAoJnQsICZnKTsKKyNlbHNlCisgIGcgPSAqZ210aW1lICgmdCk7CisjZW5kaWYKKyAgdDIgPSBta3RpbWUgKCZnKTsKKyAgcmV0dXJuIChpbnQpIGRpZmZ0aW1lICh0LCB0Mik7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQKK2dzdF9kYXRlX3RpbWVfc2V0X2xvY2FsX3RpbWV6b25lIChHc3REYXRlVGltZSAqIGR0KQoreworICBzdHJ1Y3QgdG0gdHQ7CisgIHRpbWVfdCB0OworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKGR0ICE9IE5VTEwpOworCisgIG1lbXNldCAoJnR0LCAwLCBzaXplb2YgKHR0KSk7CisKKyAgdHQudG1fbWRheSA9IGdzdF9kYXRlX3RpbWVfZ2V0X2RheSAoZHQpOworICB0dC50bV9tb24gPSBnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoZHQpIC0gMTsKKyAgdHQudG1feWVhciA9IGdzdF9kYXRlX3RpbWVfZ2V0X3llYXIgKGR0KSAtIDE5MDA7CisgIHR0LnRtX2hvdXIgPSBnc3RfZGF0ZV90aW1lX2dldF9ob3VyIChkdCk7CisgIHR0LnRtX21pbiA9IGdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZSAoZHQpOworICB0dC50bV9zZWMgPSBnc3RfZGF0ZV90aW1lX2dldF9zZWNvbmQgKGR0KTsKKworICB0ID0gbWt0aW1lICgmdHQpOworCisgIGR0LT50em9mZnNldCA9IGdtdF9vZmZzZXQgKCZ0dCwgdCkgLyA2MDsKK30KKworc3RhdGljIEdzdERhdGVUaW1lICoKK2dzdF9kYXRlX3RpbWVfYWxsb2MgKHZvaWQpCit7CisgIEdzdERhdGVUaW1lICpkYXRldGltZTsKKworICBkYXRldGltZSA9IGdfc2xpY2VfbmV3MCAoR3N0RGF0ZVRpbWUpOworICBkYXRldGltZS0+cmVmX2NvdW50ID0gMTsKKworICByZXR1cm4gZGF0ZXRpbWU7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfZGF0ZV90aW1lX2ZyZWUgKEdzdERhdGVUaW1lICogZGF0ZXRpbWUpCit7CisgIGdfc2xpY2VfZnJlZSAoR3N0RGF0ZVRpbWUsIGRhdGV0aW1lKTsKK30KKworc3RhdGljIEdzdERhdGVUaW1lICoKK2dzdF9kYXRlX3RpbWVfbmV3X2Zyb21fZGF0ZSAoZ2ludCB5ZWFyLCBnaW50IG1vbnRoLCBnaW50IGRheSkKK3sKKyAgR3N0RGF0ZVRpbWUgKmR0OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh5ZWFyID4gMCAmJiB5ZWFyIDw9IDk5OTksIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoKG1vbnRoID4gMCAmJiBtb250aCA8PSAxMiksIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoKGRheSA+IDAgJiYgZGF5IDw9IDMxKSwgTlVMTCk7CisKKyAgZHQgPSBnc3RfZGF0ZV90aW1lX2FsbG9jICgpOworCisgIGR0LT55ZWFyID0geWVhcjsKKyAgZHQtPm1vbnRoID0gbW9udGg7CisgIGR0LT5kYXkgPSBkYXk7CisgIGdzdF9kYXRlX3RpbWVfc2V0X2xvY2FsX3RpbWV6b25lIChkdCk7CisKKyAgcmV0dXJuIGR0OworfQorCitnaW50Citnc3RfZGF0ZV90aW1lX2dldF95ZWFyIChjb25zdCBHc3REYXRlVGltZSAqIGRhdGV0aW1lKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGF0ZXRpbWUgIT0gTlVMTCwgMCk7CisKKyAgcmV0dXJuIGRhdGV0aW1lLT55ZWFyOworfQorCitnaW50Citnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoY29uc3QgR3N0RGF0ZVRpbWUgKiBkYXRldGltZSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRhdGV0aW1lICE9IE5VTEwsIDApOworCisgIHJldHVybiBkYXRldGltZS0+bW9udGg7Cit9CisKK2dpbnQKK2dzdF9kYXRlX3RpbWVfZ2V0X2RheSAoY29uc3QgR3N0RGF0ZVRpbWUgKiBkYXRldGltZSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRhdGV0aW1lICE9IE5VTEwsIDApOworCisgIHJldHVybiBkYXRldGltZS0+ZGF5OworfQorCitnaW50Citnc3RfZGF0ZV90aW1lX2dldF9ob3VyIChjb25zdCBHc3REYXRlVGltZSAqIGRhdGV0aW1lKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGF0ZXRpbWUgIT0gTlVMTCwgMCk7CisgIHJldHVybiAoZGF0ZXRpbWUtPnVzZWMgLyBHU1RfREFURV9USU1FX1VTRUNfUEVSX0hPVVIpOworfQorCitnaW50Citnc3RfZGF0ZV90aW1lX2dldF9taWNyb3NlY29uZCAoY29uc3QgR3N0RGF0ZVRpbWUgKiBkYXRldGltZSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRhdGV0aW1lICE9IE5VTEwsIDApOworICByZXR1cm4gKGRhdGV0aW1lLT51c2VjICUgR1NUX0RBVEVfVElNRV9VU0VDX1BFUl9TRUNPTkQpOworfQorCitnaW50Citnc3RfZGF0ZV90aW1lX2dldF9taW51dGUgKGNvbnN0IEdzdERhdGVUaW1lICogZGF0ZXRpbWUpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkYXRldGltZSAhPSBOVUxMLCAwKTsKKyAgcmV0dXJuIChkYXRldGltZS0+dXNlYyAlIEdTVF9EQVRFX1RJTUVfVVNFQ19QRVJfSE9VUikgLworICAgICAgR1NUX0RBVEVfVElNRV9VU0VDX1BFUl9NSU5VVEU7Cit9CisKK2dpbnQKK2dzdF9kYXRlX3RpbWVfZ2V0X3NlY29uZCAoY29uc3QgR3N0RGF0ZVRpbWUgKiBkYXRldGltZSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRhdGV0aW1lICE9IE5VTEwsIDApOworICByZXR1cm4gKGRhdGV0aW1lLT51c2VjICUgR1NUX0RBVEVfVElNRV9VU0VDX1BFUl9NSU5VVEUpIC8KKyAgICAgIEdTVF9EQVRFX1RJTUVfVVNFQ19QRVJfU0VDT05EOworfQorCitnZmxvYXQKK2dzdF9kYXRlX3RpbWVfZ2V0X3RpbWVfem9uZV9vZmZzZXQgKGNvbnN0IEdzdERhdGVUaW1lICogZGF0ZXRpbWUpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkYXRldGltZSAhPSBOVUxMLCAwKTsKKworICByZXR1cm4gZGF0ZXRpbWUtPnR6b2Zmc2V0IC8gNjAuMGY7Cit9CisKK0dzdERhdGVUaW1lICoKK2dzdF9kYXRlX3RpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF9sb2NhbF90aW1lIChnaW50NjQgc2VjcykKK3sKKyAgR3N0RGF0ZVRpbWUgKmR0OworICBzdHJ1Y3QgdG0gdG07CisgIHRpbWVfdCB0dDsKKworICBtZW1zZXQgKCZ0bSwgMCwgc2l6ZW9mICh0bSkpOworICB0dCA9ICh0aW1lX3QpIHNlY3M7CisKKyNpZmRlZiBIQVZFX0xPQ0FMVElNRV9SCisgIGxvY2FsdGltZV9yICgmdHQsICZ0bSk7CisjZWxzZQorICBtZW1jcHkgKCZ0bSwgbG9jYWx0aW1lICgmdHQpLCBzaXplb2YgKHN0cnVjdCB0bSkpOworI2VuZGlmCisKKyAgZHQgPSBnc3RfZGF0ZV90aW1lX25ldyAoMCwgdG0udG1feWVhciArIDE5MDAsCisgICAgICB0bS50bV9tb24gKyAxLCB0bS50bV9tZGF5LCB0bS50bV9ob3VyLCB0bS50bV9taW4sIHRtLnRtX3NlYyk7CisgIGdzdF9kYXRlX3RpbWVfc2V0X2xvY2FsX3RpbWV6b25lIChkdCk7CisgIHJldHVybiBkdDsKK30KKworR3N0RGF0ZVRpbWUgKgorZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV91bml4X2Vwb2NoX3V0YyAoZ2ludDY0IHNlY3MpCit7CisgIEdzdERhdGVUaW1lICpkdDsKKyAgc3RydWN0IHRtIHRtOworICB0aW1lX3QgdHQ7CisKKyAgbWVtc2V0ICgmdG0sIDAsIHNpemVvZiAodG0pKTsKKyAgdHQgPSAodGltZV90KSBzZWNzOworCisjaWZkZWYgSEFWRV9HTVRJTUVfUgorICBnbXRpbWVfciAoJnR0LCAmdG0pOworI2Vsc2UKKyAgbWVtY3B5ICgmdG0sIGdtdGltZSAoJnR0KSwgc2l6ZW9mIChzdHJ1Y3QgdG0pKTsKKyNlbmRpZgorCisgIGR0ID0gZ3N0X2RhdGVfdGltZV9uZXcgKDAsIHRtLnRtX3llYXIgKyAxOTAwLAorICAgICAgdG0udG1fbW9uICsgMSwgdG0udG1fbWRheSwgdG0udG1faG91ciwgdG0udG1fbWluLCB0bS50bV9zZWMpOworICByZXR1cm4gZHQ7Cit9CisKK0dzdERhdGVUaW1lICoKK2dzdF9kYXRlX3RpbWVfbmV3X2xvY2FsX3RpbWUgKGdpbnQgeWVhciwgZ2ludCBtb250aCwgZ2ludCBkYXksIGdpbnQgaG91ciwKKyAgICBnaW50IG1pbnV0ZSwgZ2RvdWJsZSBzZWNvbmRzKQoreworICBHc3REYXRlVGltZSAqZHQ7CisKKyAgZHQgPSBnc3RfZGF0ZV90aW1lX25ldyAoMCwgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmRzKTsKKworICBnc3RfZGF0ZV90aW1lX3NldF9sb2NhbF90aW1lem9uZSAoZHQpOworCisgIHJldHVybiBkdDsKK30KKworR3N0RGF0ZVRpbWUgKgorZ3N0X2RhdGVfdGltZV9uZXcgKGdmbG9hdCB0em9mZnNldCwgZ2ludCB5ZWFyLCBnaW50IG1vbnRoLCBnaW50IGRheSwgZ2ludCBob3VyLAorICAgIGdpbnQgbWludXRlLCBnZG91YmxlIHNlY29uZHMpCit7CisgIEdzdERhdGVUaW1lICpkdDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoaG91ciA+PSAwICYmIGhvdXIgPCAyNCwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtaW51dGUgPj0gMCAmJiBtaW51dGUgPCA2MCwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWNvbmRzID49IDAgJiYgc2Vjb25kcyA8IDYwLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHR6b2Zmc2V0ID49IC0xMi4wICYmIHR6b2Zmc2V0IDw9IDEyLjAsIE5VTEwpOworCisgIGlmICghKGR0ID0gZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV9kYXRlICh5ZWFyLCBtb250aCwgZGF5KSkpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgZHQtPnVzZWMgPSAoaG91ciAqIEdTVF9EQVRFX1RJTUVfVVNFQ19QRVJfSE9VUikKKyAgICAgICsgKG1pbnV0ZSAqIEdTVF9EQVRFX1RJTUVfVVNFQ19QRVJfTUlOVVRFKQorICAgICAgKyAoZ3VpbnQ2NCkgKGZsb29yIChzZWNvbmRzICogR1NUX0RBVEVfVElNRV9VU0VDX1BFUl9TRUNPTkQgKyAwLjUpKTsKKworICAvKiB3ZSBzdG9yZSBpbiBtaW51dGVzICovCisgIGR0LT50em9mZnNldCA9IChnaW50KSAodHpvZmZzZXQgKiA2MC4wKTsKKworICByZXR1cm4gZHQ7Cit9CisKK0dzdERhdGVUaW1lICoKK2dzdF9kYXRlX3RpbWVfbmV3X25vd19sb2NhbF90aW1lICh2b2lkKQoreworICBHc3REYXRlVGltZSAqZGF0ZXRpbWU7CisgIEdUaW1lVmFsIHR2OworICBnX2dldF9jdXJyZW50X3RpbWUgKCZ0dik7CisKKyAgZGF0ZXRpbWUgPSBnc3RfZGF0ZV90aW1lX25ld19mcm9tX3VuaXhfZXBvY2hfbG9jYWxfdGltZSAodHYudHZfc2VjKTsKKyAgZGF0ZXRpbWUtPnVzZWMgKz0gdHYudHZfdXNlYzsKKyAgZ3N0X2RhdGVfdGltZV9zZXRfbG9jYWxfdGltZXpvbmUgKGRhdGV0aW1lKTsKKyAgcmV0dXJuIGRhdGV0aW1lOworfQorCitzdGF0aWMgR3N0RGF0ZVRpbWUgKgorZ3N0X2RhdGVfdGltZV9jb3B5IChjb25zdCBHc3REYXRlVGltZSAqIGR0KQoreworICBHc3REYXRlVGltZSAqY29weSA9IGdzdF9kYXRlX3RpbWVfYWxsb2MgKCk7CisKKyAgbWVtY3B5IChjb3B5LCBkdCwgc2l6ZW9mIChHc3REYXRlVGltZSkpOworICBjb3B5LT5yZWZfY291bnQgPSAxOworCisgIHJldHVybiBjb3B5OworfQorCitzdGF0aWMgR3N0RGF0ZVRpbWUgKgorZ3N0X2RhdGVfdGltZV90b191dGMgKGNvbnN0IEdzdERhdGVUaW1lICogZHQpCit7CisgIEdzdERhdGVUaW1lICp1dGM7CisgIGdpbnQ2NCB1c2VjOworICBnaW50IGRheXM7CisgIGdpbnQgbGVhcDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZHQgIT0gTlVMTCwgTlVMTCk7CisKKyAgdXRjID0gZ3N0X2RhdGVfdGltZV9jb3B5IChkdCk7CisKKyAgdXNlYyA9IGR0LT51c2VjIC0gZHQtPnR6b2Zmc2V0ICogR1NUX0RBVEVfVElNRV9VU0VDX1BFUl9NSU5VVEU7CisgIGRheXMgPSB1c2VjIC8gR1NUX0RBVEVfVElNRV9VU0VDX1BFUl9EQVk7CisgIGlmICh1c2VjIDwgMCkKKyAgICBkYXlzLS07CisgIHV0Yy0+ZGF5ICs9IGRheXM7CisKKyAgbGVhcCA9IEdSRUdPUklBTl9MRUFQICh1dGMtPnllYXIpID8gMSA6IDA7CisKKyAgLyogY2hlY2sgaWYgd2Ugc2hvdWxkIHVwZGF0ZSBtb250aC95ZWFyICovCisgIGlmICh1dGMtPmRheSA8IDEpIHsKKyAgICBpZiAodXRjLT5tb250aCA9PSAxKSB7CisgICAgICB1dGMtPnllYXItLTsKKyAgICAgIHV0Yy0+bW9udGggPSAxMjsKKyAgICB9IGVsc2UgeworICAgICAgdXRjLT5tb250aC0tOworICAgIH0KKyAgICBpZiAoR1JFR09SSUFOX0xFQVAgKHV0Yy0+eWVhcikpCisgICAgICB1dGMtPmRheSA9IGRheXNfaW5fbW9udGhzWzFdW3V0Yy0+bW9udGhdOworICAgIGVsc2UKKyAgICAgIHV0Yy0+ZGF5ID0gZGF5c19pbl9tb250aHNbMF1bdXRjLT5tb250aF07CisgIH0gZWxzZSBpZiAodXRjLT5kYXkgPiBkYXlzX2luX21vbnRoc1tsZWFwXVt1dGMtPm1vbnRoXSkgeworICAgIGlmICh1dGMtPm1vbnRoID09IDEyKSB7CisgICAgICB1dGMtPnllYXIrKzsKKyAgICAgIHV0Yy0+bW9udGggPSAxOworICAgIH0gZWxzZSB7CisgICAgICB1dGMtPm1vbnRoKys7CisgICAgfQorICAgIHV0Yy0+ZGF5ID0gMTsKKyAgfQorCisgIGlmICh1c2VjIDwgMCkKKyAgICB1dGMtPnVzZWMgPQorICAgICAgICBHU1RfREFURV9USU1FX1VTRUNfUEVSX0RBWSArICh1c2VjICUgR1NUX0RBVEVfVElNRV9VU0VDX1BFUl9EQVkpOworICBlbHNlCisgICAgdXRjLT51c2VjID0gdXNlYyAlIEdTVF9EQVRFX1RJTUVfVVNFQ19QRVJfREFZOworCisgIHJldHVybiB1dGM7Cit9CisKK0dzdERhdGVUaW1lICoKK2dzdF9kYXRlX3RpbWVfbmV3X25vd191dGMgKHZvaWQpCit7CisgIEdzdERhdGVUaW1lICpub3csICp1dGM7CisKKyAgbm93ID0gZ3N0X2RhdGVfdGltZV9uZXdfbm93X2xvY2FsX3RpbWUgKCk7CisgIHV0YyA9IGdzdF9kYXRlX3RpbWVfdG9fdXRjIChub3cpOworICBnc3RfZGF0ZV90aW1lX3VucmVmIChub3cpOworICByZXR1cm4gdXRjOworfQorCitnaW50Citwcml2X2dzdF9kYXRlX3RpbWVfY29tcGFyZSAoZ2NvbnN0cG9pbnRlciBkdDEsIGdjb25zdHBvaW50ZXIgZHQyKQoreworICBHc3REYXRlVGltZSAqYSwgKmI7CisgIGdpbnQgcmVzID0gMDsKKworICBhID0gZ3N0X2RhdGVfdGltZV90b191dGMgKGR0MSk7CisgIGIgPSBnc3RfZGF0ZV90aW1lX3RvX3V0YyAoZHQyKTsKKworI2RlZmluZSBHU1RfREFURV9USU1FX0NPTVBBUkVfVkFMVUUoYSxiLHYpICAgXAorICBpZiAoKGEpLT52ID4gKGIpLT52KSB7ICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlcyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdvdG8gZG9uZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IGVsc2UgaWYgKChhKS0+diA8IChiKS0+dikgeyAgICAgICAgICAgICAgXAorICAgIHJlcyA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdvdG8gZG9uZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisKKyAgR1NUX0RBVEVfVElNRV9DT01QQVJFX1ZBTFVFIChhLCBiLCB5ZWFyKTsKKyAgR1NUX0RBVEVfVElNRV9DT01QQVJFX1ZBTFVFIChhLCBiLCBtb250aCk7CisgIEdTVF9EQVRFX1RJTUVfQ09NUEFSRV9WQUxVRSAoYSwgYiwgZGF5KTsKKyAgR1NUX0RBVEVfVElNRV9DT01QQVJFX1ZBTFVFIChhLCBiLCB1c2VjKTsKKworI3VuZGVmIEdTVF9EQVRFX1RJTUVfQ09NUEFSRV9WQUxVRQorCitkb25lOgorICBnc3RfZGF0ZV90aW1lX3VucmVmIChhKTsKKyAgZ3N0X2RhdGVfdGltZV91bnJlZiAoYik7CisgIHJldHVybiByZXM7Cit9CisKKyNlbHNlCisKK3N0cnVjdCBfR3N0RGF0ZVRpbWUKK3sKKyAgR0RhdGVUaW1lICpkYXRldGltZTsKKworICB2b2xhdGlsZSBnaW50IHJlZl9jb3VudDsKK307CisKK3N0YXRpYyBHc3REYXRlVGltZSAqCitnc3RfZGF0ZV90aW1lX25ld19mcm9tX2dkYXRldGltZSAoR0RhdGVUaW1lICogZHQpCit7CisgIEdzdERhdGVUaW1lICpnc3RfZHQ7CisKKyAgaWYgKCFkdCkKKyAgICByZXR1cm4gTlVMTDsKKworICBnc3RfZHQgPSBnX3NsaWNlX25ldyAoR3N0RGF0ZVRpbWUpOworICBnc3RfZHQtPmRhdGV0aW1lID0gZHQ7CisgIGdzdF9kdC0+cmVmX2NvdW50ID0gMTsKKyAgcmV0dXJuIGdzdF9kdDsKK30KKworZ2ludAorZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoY29uc3QgR3N0RGF0ZVRpbWUgKiBkYXRldGltZSkKK3sKKyAgcmV0dXJuIGdfZGF0ZV90aW1lX2dldF95ZWFyIChkYXRldGltZS0+ZGF0ZXRpbWUpOworfQorCitnaW50Citnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoY29uc3QgR3N0RGF0ZVRpbWUgKiBkYXRldGltZSkKK3sKKyAgcmV0dXJuIGdfZGF0ZV90aW1lX2dldF9tb250aCAoZGF0ZXRpbWUtPmRhdGV0aW1lKTsKK30KKworZ2ludAorZ3N0X2RhdGVfdGltZV9nZXRfZGF5IChjb25zdCBHc3REYXRlVGltZSAqIGRhdGV0aW1lKQoreworICByZXR1cm4gZ19kYXRlX3RpbWVfZ2V0X2RheV9vZl9tb250aCAoZGF0ZXRpbWUtPmRhdGV0aW1lKTsKK30KKworZ2ludAorZ3N0X2RhdGVfdGltZV9nZXRfaG91ciAoY29uc3QgR3N0RGF0ZVRpbWUgKiBkYXRldGltZSkKK3sKKyAgcmV0dXJuIGdfZGF0ZV90aW1lX2dldF9ob3VyIChkYXRldGltZS0+ZGF0ZXRpbWUpOworfQorCitnaW50Citnc3RfZGF0ZV90aW1lX2dldF9taW51dGUgKGNvbnN0IEdzdERhdGVUaW1lICogZGF0ZXRpbWUpCit7CisgIHJldHVybiBnX2RhdGVfdGltZV9nZXRfbWludXRlIChkYXRldGltZS0+ZGF0ZXRpbWUpOworfQorCitnaW50Citnc3RfZGF0ZV90aW1lX2dldF9zZWNvbmQgKGNvbnN0IEdzdERhdGVUaW1lICogZGF0ZXRpbWUpCit7CisgIHJldHVybiBnX2RhdGVfdGltZV9nZXRfc2Vjb25kIChkYXRldGltZS0+ZGF0ZXRpbWUpOworfQorCitnaW50Citnc3RfZGF0ZV90aW1lX2dldF9taWNyb3NlY29uZCAoY29uc3QgR3N0RGF0ZVRpbWUgKiBkYXRldGltZSkKK3sKKyAgcmV0dXJuIGdfZGF0ZV90aW1lX2dldF9taWNyb3NlY29uZCAoZGF0ZXRpbWUtPmRhdGV0aW1lKTsKK30KKworZ2Zsb2F0Citnc3RfZGF0ZV90aW1lX2dldF90aW1lX3pvbmVfb2Zmc2V0IChjb25zdCBHc3REYXRlVGltZSAqIGRhdGV0aW1lKQoreworICByZXR1cm4gKGdfZGF0ZV90aW1lX2dldF91dGNfb2Zmc2V0IChkYXRldGltZS0+ZGF0ZXRpbWUpIC8KKyAgICAgIEdfVVNFQ19QRVJfU0VDKSAvIDM2MDAuMDsKK30KKworR3N0RGF0ZVRpbWUgKgorZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV91bml4X2Vwb2NoX2xvY2FsX3RpbWUgKGdpbnQ2NCBzZWNzKQoreworICByZXR1cm4KKyAgICAgIGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fZ2RhdGV0aW1lIChnX2RhdGVfdGltZV9uZXdfZnJvbV91bml4X2xvY2FsIChzZWNzKSk7Cit9CisKK0dzdERhdGVUaW1lICoKK2dzdF9kYXRlX3RpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF91dGMgKGdpbnQ2NCBzZWNzKQoreworICByZXR1cm4KKyAgICAgIGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fZ2RhdGV0aW1lIChnX2RhdGVfdGltZV9uZXdfZnJvbV91bml4X3V0YyAoc2VjcykpOworfQorCitHc3REYXRlVGltZSAqCitnc3RfZGF0ZV90aW1lX25ld19sb2NhbF90aW1lIChnaW50IHllYXIsIGdpbnQgbW9udGgsIGdpbnQgZGF5LCBnaW50IGhvdXIsCisgICAgZ2ludCBtaW51dGUsIGdkb3VibGUgc2Vjb25kcykKK3sKKyAgcmV0dXJuIGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fZ2RhdGV0aW1lIChnX2RhdGVfdGltZV9uZXdfbG9jYWwgKHllYXIsIG1vbnRoLAorICAgICAgICAgIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmRzKSk7Cit9CisKK0dzdERhdGVUaW1lICoKK2dzdF9kYXRlX3RpbWVfbmV3X25vd19sb2NhbF90aW1lICh2b2lkKQoreworICByZXR1cm4gZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV9nZGF0ZXRpbWUgKGdfZGF0ZV90aW1lX25ld19ub3dfbG9jYWwgKCkpOworfQorCitHc3REYXRlVGltZSAqCitnc3RfZGF0ZV90aW1lX25ld19ub3dfdXRjICh2b2lkKQoreworICByZXR1cm4gZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV9nZGF0ZXRpbWUgKGdfZGF0ZV90aW1lX25ld19ub3dfdXRjICgpKTsKK30KKworZ2ludAorcHJpdl9nc3RfZGF0ZV90aW1lX2NvbXBhcmUgKGdjb25zdHBvaW50ZXIgZHQxLCBnY29uc3Rwb2ludGVyIGR0MikKK3sKKyAgY29uc3QgR3N0RGF0ZVRpbWUgKmRhdGV0aW1lMSA9IGR0MTsKKyAgY29uc3QgR3N0RGF0ZVRpbWUgKmRhdGV0aW1lMiA9IGR0MjsKKyAgcmV0dXJuIGdfZGF0ZV90aW1lX2NvbXBhcmUgKGRhdGV0aW1lMS0+ZGF0ZXRpbWUsIGRhdGV0aW1lMi0+ZGF0ZXRpbWUpOworfQorCitHc3REYXRlVGltZSAqCitnc3RfZGF0ZV90aW1lX25ldyAoZ2Zsb2F0IHR6b2Zmc2V0LCBnaW50IHllYXIsIGdpbnQgbW9udGgsIGdpbnQgZGF5LCBnaW50IGhvdXIsCisgICAgZ2ludCBtaW51dGUsIGdkb3VibGUgc2Vjb25kcykKK3sKKyAgZ2NoYXIgYnVmWzZdOworICBHVGltZVpvbmUgKnR6OworICBHRGF0ZVRpbWUgKmR0OworICBnaW50IHR6aG91ciwgdHptaW51dGU7CisKKyAgdHpob3VyID0gKGdpbnQpIEFCUyAodHpvZmZzZXQpOworICB0em1pbnV0ZSA9IChnaW50KSAoKEFCUyAodHpvZmZzZXQpIC0gdHpob3VyKSAqIDYwKTsKKworICBnX3NucHJpbnRmIChidWYsIDYsICIlYyUwMmQlMDJkIiwgdHpvZmZzZXQgPj0gMCA/ICcrJyA6ICctJywgdHpob3VyLAorICAgICAgdHptaW51dGUpOworCisgIHR6ID0gZ190aW1lX3pvbmVfbmV3IChidWYpOworCisgIGR0ID0gZ19kYXRlX3RpbWVfbmV3ICh0eiwgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmRzKTsKKyAgZ190aW1lX3pvbmVfdW5yZWYgKHR6KTsKKyAgcmV0dXJuIGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fZ2RhdGV0aW1lIChkdCk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfZGF0ZV90aW1lX2ZyZWUgKEdzdERhdGVUaW1lICogZGF0ZXRpbWUpCit7CisgIGdfZGF0ZV90aW1lX3VucmVmIChkYXRldGltZS0+ZGF0ZXRpbWUpOworICBnX3NsaWNlX2ZyZWUgKEdzdERhdGVUaW1lLCBkYXRldGltZSk7Cit9CisKKyNlbmRpZgorCisvKioKKyAqIGdzdF9kYXRlX3RpbWVfcmVmOgorICogQGRhdGV0aW1lOiBhICNHc3REYXRlVGltZQorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIEBkYXRldGltZSBieSBvbmUuCisgKgorICogUmV0dXJuIHZhbHVlOiAodHJhbnNmZXIgZnVsbCk6IHRoZSByZWZlcmVuY2UgQGRhdGV0aW1lCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLworR3N0RGF0ZVRpbWUgKgorZ3N0X2RhdGVfdGltZV9yZWYgKEdzdERhdGVUaW1lICogZGF0ZXRpbWUpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkYXRldGltZSAhPSBOVUxMLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRhdGV0aW1lLT5yZWZfY291bnQgPiAwLCBOVUxMKTsKKyAgZ19hdG9taWNfaW50X2luYyAoJmRhdGV0aW1lLT5yZWZfY291bnQpOworICByZXR1cm4gZGF0ZXRpbWU7Cit9CisKKy8qKgorICogZ3N0X2RhdGVfdGltZV91bnJlZjoKKyAqIEBkYXRldGltZTogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3REYXRlVGltZQorICoKKyAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIEBkYXRldGltZSBieSBvbmUuICBXaGVuIHRoZQorICogcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgemVybywgdGhlIHN0cnVjdHVyZSBpcyBmcmVlZC4KKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCit2b2lkCitnc3RfZGF0ZV90aW1lX3VucmVmIChHc3REYXRlVGltZSAqIGRhdGV0aW1lKQoreworICBnX3JldHVybl9pZl9mYWlsIChkYXRldGltZSAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoZGF0ZXRpbWUtPnJlZl9jb3VudCA+IDApOworCisgIGlmIChnX2F0b21pY19pbnRfZGVjX2FuZF90ZXN0ICgmZGF0ZXRpbWUtPnJlZl9jb3VudCkpCisgICAgZ3N0X2RhdGVfdGltZV9mcmVlIChkYXRldGltZSk7Cit9CmRpZmYgLS1naXQgYS9nc3QvZ3N0ZGF0ZXRpbWUuaCBiL2dzdC9nc3RkYXRldGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZWIwMjAKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0ZGF0ZXRpbWUuaApAQCAtMCwwICsxLDY2IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fR1NUX0RBVEVfVElNRV9IX18KKyNkZWZpbmUgX19HU1RfREFURV9USU1FX0hfXworCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAqIEdzdERhdGVUaW1lOgorICoKKyAqIE9wYXF1ZSwgaW1tdXRhYmxlLCByZWZjb3VudGVkIHN0cnVjdCB0aGF0IHN0b3JlcyBkYXRlLCB0aW1lIGFuZCB0aW1lem9uZQorICogaW5mb3JtYXRpb24uIEl0IGN1cnJlbnRseSBzdXBwb3J0cyByYW5nZXMgZnJvbSAwMDAxLTAxLTAxIHRvCisgKiA5OTk5LTEyLTMxIGluIHRoZSBHcmVnb3JpYW4gcHJvbGVwdGljIGNhbGVuZGFyLgorICoKKyAqIFVzZSB0aGUgYWNlc3NvciBmdW5jdGlvbnMgdG8gZ2V0IHRoZSBzdG9yZWQgdmFsdWVzLgorICovCit0eXBlZGVmIHN0cnVjdCBfR3N0RGF0ZVRpbWUgR3N0RGF0ZVRpbWU7CisKK2dpbnQJZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAJCShjb25zdCBHc3REYXRlVGltZSAqIGRhdGV0aW1lKTsKK2dpbnQJZ3N0X2RhdGVfdGltZV9nZXRfbW9udGgJCShjb25zdCBHc3REYXRlVGltZSAqIGRhdGV0aW1lKTsKK2dpbnQJZ3N0X2RhdGVfdGltZV9nZXRfZGF5CQkoY29uc3QgR3N0RGF0ZVRpbWUgKiBkYXRldGltZSk7CitnaW50CWdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIgCQkoY29uc3QgR3N0RGF0ZVRpbWUgKiBkYXRldGltZSk7CitnaW50CWdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZSAJKGNvbnN0IEdzdERhdGVUaW1lICogZGF0ZXRpbWUpOworZ2ludAlnc3RfZGF0ZV90aW1lX2dldF9zZWNvbmQgCShjb25zdCBHc3REYXRlVGltZSAqIGRhdGV0aW1lKTsKK2dpbnQJZ3N0X2RhdGVfdGltZV9nZXRfbWljcm9zZWNvbmQgCShjb25zdCBHc3REYXRlVGltZSAqIGRhdGV0aW1lKTsKK2dmbG9hdAlnc3RfZGF0ZV90aW1lX2dldF90aW1lX3pvbmVfb2Zmc2V0IChjb25zdCBHc3REYXRlVGltZSAqIGRhdGV0aW1lKTsKKworR3N0RGF0ZVRpbWUgCSpnc3RfZGF0ZV90aW1lX25ld19mcm9tX3VuaXhfZXBvY2hfbG9jYWxfdGltZSAoZ2ludDY0IHNlY3MpOworR3N0RGF0ZVRpbWUgCSpnc3RfZGF0ZV90aW1lX25ld19mcm9tX3VuaXhfZXBvY2hfdXRjICAoZ2ludDY0IHNlY3MpOworR3N0RGF0ZVRpbWUgCSpnc3RfZGF0ZV90aW1lX25ld19sb2NhbF90aW1lCQkoZ2ludCB5ZWFyLCBnaW50IG1vbnRoLAorCQkJCQkJCSBnaW50IGRheSwgZ2ludCBob3VyLAorCQkJCQkJCSBnaW50IG1pbnV0ZSwKKwkJCQkJCQkgZ2RvdWJsZSBzZWNvbmRzKTsKK0dzdERhdGVUaW1lIAkqZ3N0X2RhdGVfdGltZV9uZXcJCQkoZ2Zsb2F0IHR6b2Zmc2V0LAorCQkJCQkJCSBnaW50IHllYXIsIGdpbnQgbW9udGgsCisJCQkJCQkJIGdpbnQgZGF5LCBnaW50IGhvdXIsCisJCQkJCQkJIGdpbnQgbWludXRlLAorCQkJCQkJCSBnZG91YmxlIHNlY29uZHMpOworR3N0RGF0ZVRpbWUgCSpnc3RfZGF0ZV90aW1lX25ld19ub3dfbG9jYWxfdGltZSAodm9pZCk7CitHc3REYXRlVGltZSAJKmdzdF9kYXRlX3RpbWVfbmV3X25vd191dGMgCSh2b2lkKTsKKworR3N0RGF0ZVRpbWUgCSpnc3RfZGF0ZV90aW1lX3JlZiAJCShHc3REYXRlVGltZSAqIGRhdGV0aW1lKTsKK3ZvaWQgCQlnc3RfZGF0ZV90aW1lX3VucmVmIAkJKEdzdERhdGVUaW1lICogZGF0ZXRpbWUpOworCitHX0VORF9ERUNMUworI2VuZGlmIC8qIF9fR1NUX0RBVEVfVElNRV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RkZWJ1Z3V0aWxzLmMgYi9nc3QvZ3N0ZGVidWd1dGlscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNzQ4NTAKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0ZGVidWd1dGlscy5jCkBAIC0wLDAgKzEsNzQ1IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNyBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisgKgorICogZ3N0ZGVidWd1dGlscy5jOiBkZWJ1Z2dpbmcgYW5kIGFuYWx5c2lzIHV0aWxsaXRpZXMKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworLyogVE9ETzoKKyAqIGVkZ2UgWyBjb25zdHJhaW50PWZhbHNlIF07CisgKiAgIHRoaXMgY3JlYXRlcyBzdHJhbmdlIGdyYXBocyAoIm1pbmxlbj0wIiBpcyBiZXR0ZXIpCisgKiB0cnkgcHV0aW5nIHNyYy9zaW5rIGdob3N0cGFkcyBmb3IgZWFjaCBiaW4gaW50byBpbnZpc2libGUgY2x1c3RlcnMKKyAqCisgKiBmb3IgbW9yZSBjb21wYWN0IG5vZGVzLCB0cnkKKyAqIC0gY2hhbmdpbmcgbm9kZS1zaGFwZSBmcm9tIGJveCBpbnRvIHJlY29yZAorICogLSB1c2UgbGFiZWxzIGxpa2UgOiBlbGVtZW50IFsgbGFiZWw9IntlbGVtZW50IHwgPHNyYz4gc3JjIHwgPHNpbms+IHNpbmt9Il0KKyAqIC0gcG9pbnQgdG8gcmVjb3JkLWNvbm5lY3RvcnMgOiBlbGVtZW50MTpzcmMgLT4gZWxlbWVudDI6c2luaworICogLSB3ZSB1c2UgaGVhZC90YWlsIGxhYmVscyBmb3IgcGFkLWNhcHMgcmlnaHQgbm93CisgKiAgIC0gdGhpcyBkb2VzIG5vdCB3b3JrIHdlbGwsIGFzIGRvdCBzZWVtcyB0byBub3QgbG9vayBhdCB0aGVpciBzaXplIHdoZW4KKyAqICAgICBkb2luZyB0aGUgbGF5b3V0CisgKiAgIC0gd2UgY291bGQgYWRkIHRoZSBjYXBzIHRvIHRoZSBwYWQgaXRzZWxmLCB0aGVuIHdlIHNob3VsZCB1c2Ugb25lIGxpbmUgcGVyCisgKiAgICAgY2FwcyAoc2ltcGxlIGNhcHMgPSBvbmUgbGluZSkKKyAqLworCisjaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJnc3RkZWJ1Z3V0aWxzLmgiCisKKyNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJnc3RpbmZvLmgiCisjaW5jbHVkZSAiZ3N0YmluLmgiCisjaW5jbHVkZSAiZ3N0b2JqZWN0LmgiCisjaW5jbHVkZSAiZ3N0Z2hvc3RwYWQuaCIKKyNpbmNsdWRlICJnc3RwYWQuaCIKKyNpbmNsdWRlICJnc3R1dGlscy5oIgorI2luY2x1ZGUgImdzdHZhbHVlLmgiCisKKy8qKiogUElQRUxJTkUgR1JBUEhTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2NvbnN0IGdjaGFyICpwcml2X2dzdF9kdW1wX2RvdF9kaXI7ICAgICAvKiBOVUxMICovLyogc2V0IGZyb20gZ3N0LmMgKi8KKworY29uc3QgZ2NoYXIgc3BhY2VzW10gPSB7CisgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgLyogMzIgKi8KKyAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIC8qIDY0ICovCisgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAvKiA5NiAqLworICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgLyogMTI4ICovCit9OworCitleHRlcm4gR3N0Q2xvY2tUaW1lIF9wcml2X2dzdF9pbmZvX3N0YXJ0X3RpbWU7CisKK3N0YXRpYyBnY2hhciAqCitkZWJ1Z19kdW1wX21ha2Vfb2JqZWN0X25hbWUgKEdzdE9iamVjdCAqIGVsZW1lbnQpCit7CisgIHJldHVybiBnX3N0cmNhbm9uIChnX3N0cmR1cF9wcmludGYgKCIlc18lcCIsIEdTVF9PQkpFQ1RfTkFNRSAoZWxlbWVudCksCisgICAgICAgICAgZWxlbWVudCksIEdfQ1NFVF9BXzJfWiBHX0NTRVRfYV8yX3ogR19DU0VUX0RJR0lUUyAiXyIsICdfJyk7Cit9CisKK3N0YXRpYyBnY2hhciAqCitkZWJ1Z19kdW1wX2dldF9lbGVtZW50X3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCkKK3sKKyAgZ2NoYXIgKnN0YXRlX25hbWUgPSBOVUxMOworICBjb25zdCBnY2hhciAqc3RhdGVfaWNvbnMgPSAifjAtPT4iOworICBHc3RTdGF0ZSBzdGF0ZSA9IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcsIHBlbmRpbmcgPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HOworCisgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoZWxlbWVudCwgJnN0YXRlLCAmcGVuZGluZywgMCk7CisgIGlmIChwZW5kaW5nID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcpIHsKKyAgICBzdGF0ZV9uYW1lID0gZ19zdHJkdXBfcHJpbnRmICgiXFxuWyVjXSIsIHN0YXRlX2ljb25zW3N0YXRlXSk7CisgIH0gZWxzZSB7CisgICAgc3RhdGVfbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoIlxcblslY10gLT4gWyVjXSIsIHN0YXRlX2ljb25zW3N0YXRlXSwKKyAgICAgICAgc3RhdGVfaWNvbnNbcGVuZGluZ10pOworICB9CisgIHJldHVybiBzdGF0ZV9uYW1lOworfQorCitzdGF0aWMgZ2NoYXIgKgorZGVidWdfZHVtcF9nZXRfZWxlbWVudF9wYXJhbXMgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQoreworICBnY2hhciAqcGFyYW1fbmFtZSA9IE5VTEw7CisgIEdQYXJhbVNwZWMgKipwcm9wZXJ0aWVzLCAqcHJvcGVydHk7CisgIEdWYWx1ZSB2YWx1ZSA9IHsgMCwgfTsKKyAgZ3VpbnQgaSwgbnVtYmVyX29mX3Byb3BlcnRpZXM7CisgIGdjaGFyICp0bXAsICp2YWx1ZV9zdHI7CisKKyAgLyogZ2V0IHBhcmFtc3BlY3MgYW5kIHNob3cgbm9uLWRlZmF1bHQgcHJvcGVydGllcyAqLworICBwcm9wZXJ0aWVzID0KKyAgICAgIGdfb2JqZWN0X2NsYXNzX2xpc3RfcHJvcGVydGllcyAoR19PQkpFQ1RfQ0xBU1MgKEdTVF9FTEVNRU5UX0dFVF9DTEFTUworICAgICAgICAgIChlbGVtZW50KSksICZudW1iZXJfb2ZfcHJvcGVydGllcyk7CisgIGlmIChwcm9wZXJ0aWVzKSB7CisgICAgZm9yIChpID0gMDsgaSA8IG51bWJlcl9vZl9wcm9wZXJ0aWVzOyBpKyspIHsKKyAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTsKKworICAgICAgLyogc2tpIHNvbWUgcHJvcGVydGllcyAqLworICAgICAgaWYgKCEocHJvcGVydHktPmZsYWdzICYgR19QQVJBTV9SRUFEQUJMRSkpCisgICAgICAgIGNvbnRpbnVlOworICAgICAgaWYgKCFzdHJjbXAgKHByb3BlcnR5LT5uYW1lLCAibmFtZSIpKQorICAgICAgICBjb250aW51ZTsKKworICAgICAgZ192YWx1ZV9pbml0ICgmdmFsdWUsIHByb3BlcnR5LT52YWx1ZV90eXBlKTsKKyAgICAgIGdfb2JqZWN0X2dldF9wcm9wZXJ0eSAoR19PQkpFQ1QgKGVsZW1lbnQpLCBwcm9wZXJ0eS0+bmFtZSwgJnZhbHVlKTsKKyAgICAgIGlmICghKGdfcGFyYW1fdmFsdWVfZGVmYXVsdHMgKHByb3BlcnR5LCAmdmFsdWUpKSkgeworICAgICAgICB0bXAgPSBnX3N0cmR1cF92YWx1ZV9jb250ZW50cyAoJnZhbHVlKTsKKyAgICAgICAgdmFsdWVfc3RyID0gZ19zdHJlc2NhcGUgKHRtcCwgTlVMTCk7CisgICAgICAgIGdfZnJlZSAodG1wKTsKKyAgICAgICAgaWYgKHBhcmFtX25hbWUpIHsKKyAgICAgICAgICB0bXAgPSBwYXJhbV9uYW1lOworICAgICAgICAgIHBhcmFtX25hbWUgPSBnX3N0cmR1cF9wcmludGYgKCIlc1xcbiVzPSVzIiwKKyAgICAgICAgICAgICAgdG1wLCBwcm9wZXJ0eS0+bmFtZSwgdmFsdWVfc3RyKTsKKyAgICAgICAgICBnX2ZyZWUgKHRtcCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcGFyYW1fbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoIlxcbiVzPSVzIiwgcHJvcGVydHktPm5hbWUsIHZhbHVlX3N0cik7CisgICAgICAgIH0KKyAgICAgICAgZ19mcmVlICh2YWx1ZV9zdHIpOworICAgICAgfQorICAgICAgZ192YWx1ZV91bnNldCAoJnZhbHVlKTsKKyAgICB9CisgICAgZ19mcmVlIChwcm9wZXJ0aWVzKTsKKyAgfQorICByZXR1cm4gcGFyYW1fbmFtZTsKK30KKworc3RhdGljIHZvaWQKK2RlYnVnX2R1bXBfcGFkIChHc3RQYWQgKiBwYWQsIGNvbnN0IGdjaGFyICogY29sb3JfbmFtZSwKKyAgICBjb25zdCBnY2hhciAqIGVsZW1lbnRfbmFtZSwgR3N0RGVidWdHcmFwaERldGFpbHMgZGV0YWlscywgRklMRSAqIG91dCwKKyAgICBjb25zdCBnaW50IGluZGVudCkKK3sKKyAgR3N0UGFkVGVtcGxhdGUgKnBhZF90ZW1wbDsKKyAgR3N0UGFkUHJlc2VuY2UgcHJlc2VuY2U7CisgIGdjaGFyICpwYWRfbmFtZTsKKyAgY29uc3QgZ2NoYXIgKnN0eWxlX25hbWU7CisgIGNvbnN0IGdjaGFyICpzcGMgPSAmc3BhY2VzW01BWCAoc2l6ZW9mIChzcGFjZXMpIC0gKDEgKyBpbmRlbnQgKiAyKSwgMCldOworCisgIHBhZF9uYW1lID0gZGVidWdfZHVtcF9tYWtlX29iamVjdF9uYW1lIChHU1RfT0JKRUNUIChwYWQpKTsKKworICAvKiBwYWQgYXZhaWxhYmlsaXR5ICovCisgIHN0eWxlX25hbWUgPSAiZmlsbGVkLHNvbGlkIjsKKyAgaWYgKChwYWRfdGVtcGwgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGUgKHBhZCkpKSB7CisgICAgcHJlc2VuY2UgPSBHU1RfUEFEX1RFTVBMQVRFX1BSRVNFTkNFIChwYWRfdGVtcGwpOworICAgIGlmIChwcmVzZW5jZSA9PSBHU1RfUEFEX1NPTUVUSU1FUykgeworICAgICAgc3R5bGVfbmFtZSA9ICJmaWxsZWQsZG90dGVkIjsKKyAgICB9IGVsc2UgaWYgKHByZXNlbmNlID09IEdTVF9QQURfUkVRVUVTVCkgeworICAgICAgc3R5bGVfbmFtZSA9ICJmaWxsZWQsZGFzaGVkIjsKKyAgICB9CisgIH0KKyAgaWYgKGRldGFpbHMgJiBHU1RfREVCVUdfR1JBUEhfU0hPV19TVEFURVMpIHsKKyAgICBnY2hhciBwYWRfZmxhZ3NbNV07CisgICAgY29uc3QgZ2NoYXIgKmFjdGl2YXRpb25fbW9kZSA9ICItPjwiOworCisgICAgLyogY2hlY2sgaWYgcGFkIGZsYWdzICovCisgICAgcGFkX2ZsYWdzWzBdID0gR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAocGFkLCBHU1RfUEFEX0JMT0NLRUQpID8gJ0InIDogJ2InOworICAgIHBhZF9mbGFnc1sxXSA9IEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKHBhZCwgR1NUX1BBRF9GTFVTSElORykgPyAnRicgOiAnZic7CisgICAgcGFkX2ZsYWdzWzJdID0gR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAocGFkLCBHU1RfUEFEX0lOX0dFVENBUFMpID8gJ0cnIDogJ2cnOworICAgIHBhZF9mbGFnc1szXSA9IEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKHBhZCwgR1NUX1BBRF9CTE9DS0lORykgPyAnQicgOiAnYic7CisgICAgcGFkX2ZsYWdzWzRdID0gJ1wwJzsKKworICAgIGZwcmludGYgKG91dCwKKyAgICAgICAgIiVzICAlc18lcyBbY29sb3I9YmxhY2ssIGZpbGxjb2xvcj1cIiVzXCIsIGxhYmVsPVwiJXNcXG5bJWNdWyVzXVwiLCBoZWlnaHQ9XCIwLjJcIiwgc3R5bGU9XCIlc1wiXTtcbiIsCisgICAgICAgIHNwYywgZWxlbWVudF9uYW1lLCBwYWRfbmFtZSwgY29sb3JfbmFtZSwgR1NUX09CSkVDVF9OQU1FIChwYWQpLAorICAgICAgICBhY3RpdmF0aW9uX21vZGVbcGFkLT5tb2RlXSwgcGFkX2ZsYWdzLCBzdHlsZV9uYW1lKTsKKyAgfSBlbHNlIHsKKyAgICBmcHJpbnRmIChvdXQsCisgICAgICAgICIlcyAgJXNfJXMgW2NvbG9yPWJsYWNrLCBmaWxsY29sb3I9XCIlc1wiLCBsYWJlbD1cIiVzXCIsIGhlaWdodD1cIjAuMlwiLCBzdHlsZT1cIiVzXCJdO1xuIiwKKyAgICAgICAgc3BjLCBlbGVtZW50X25hbWUsIHBhZF9uYW1lLCBjb2xvcl9uYW1lLCBHU1RfT0JKRUNUX05BTUUgKHBhZCksCisgICAgICAgIHN0eWxlX25hbWUpOworICB9CisKKyAgZ19mcmVlIChwYWRfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkCitkZWJ1Z19kdW1wX2VsZW1lbnRfcGFkIChHc3RQYWQgKiBwYWQsIEdzdEVsZW1lbnQgKiBlbGVtZW50LAorICAgIEdzdERlYnVnR3JhcGhEZXRhaWxzIGRldGFpbHMsIEZJTEUgKiBvdXQsIGNvbnN0IGdpbnQgaW5kZW50KQoreworICBHc3RFbGVtZW50ICp0YXJnZXRfZWxlbWVudDsKKyAgR3N0UGFkICp0YXJnZXRfcGFkLCAqdG1wX3BhZDsKKyAgR3N0UGFkRGlyZWN0aW9uIGRpcjsKKyAgZ2NoYXIgKmVsZW1lbnRfbmFtZTsKKyAgZ2NoYXIgKnRhcmdldF9lbGVtZW50X25hbWU7CisgIGNvbnN0IGdjaGFyICpjb2xvcl9uYW1lOworCisgIGRpciA9IGdzdF9wYWRfZ2V0X2RpcmVjdGlvbiAocGFkKTsKKyAgZWxlbWVudF9uYW1lID0gZGVidWdfZHVtcF9tYWtlX29iamVjdF9uYW1lIChHU1RfT0JKRUNUIChlbGVtZW50KSk7CisgIGlmIChHU1RfSVNfR0hPU1RfUEFEIChwYWQpKSB7CisgICAgY29sb3JfbmFtZSA9CisgICAgICAgIChkaXIgPT0gR1NUX1BBRF9TUkMpID8gIiNmZmRkZGQiIDogKChkaXIgPT0KKyAgICAgICAgICAgIEdTVF9QQURfU0lOSykgPyAiI2RkZGRmZiIgOiAiI2ZmZmZmZiIpOworICAgIC8qIG91dHB1dCB0YXJnZXQtcGFkIHNvIHRoYXQgaXQgYmVsb25ncyB0byB0aGlzIGVsZW1lbnQgKi8KKyAgICBpZiAoKHRtcF9wYWQgPSBnc3RfZ2hvc3RfcGFkX2dldF90YXJnZXQgKEdTVF9HSE9TVF9QQUQgKHBhZCkpKSkgeworICAgICAgaWYgKCh0YXJnZXRfcGFkID0gZ3N0X3BhZF9nZXRfcGVlciAodG1wX3BhZCkpKSB7CisgICAgICAgIGlmICgodGFyZ2V0X2VsZW1lbnQgPSBnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudCAodGFyZ2V0X3BhZCkpKSB7CisgICAgICAgICAgdGFyZ2V0X2VsZW1lbnRfbmFtZSA9CisgICAgICAgICAgICAgIGRlYnVnX2R1bXBfbWFrZV9vYmplY3RfbmFtZSAoR1NUX09CSkVDVCAodGFyZ2V0X2VsZW1lbnQpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0YXJnZXRfZWxlbWVudF9uYW1lID0gZ19zdHJkdXAgKCIiKTsKKyAgICAgICAgfQorICAgICAgICBkZWJ1Z19kdW1wX3BhZCAodGFyZ2V0X3BhZCwgY29sb3JfbmFtZSwgdGFyZ2V0X2VsZW1lbnRfbmFtZSwgZGV0YWlscywKKyAgICAgICAgICAgIG91dCwgaW5kZW50KTsKKyAgICAgICAgZ19mcmVlICh0YXJnZXRfZWxlbWVudF9uYW1lKTsKKyAgICAgICAgaWYgKHRhcmdldF9lbGVtZW50KQorICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHRhcmdldF9lbGVtZW50KTsKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZiAodGFyZ2V0X3BhZCk7CisgICAgICB9CisgICAgICBnc3Rfb2JqZWN0X3VucmVmICh0bXBfcGFkKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgY29sb3JfbmFtZSA9CisgICAgICAgIChkaXIgPT0gR1NUX1BBRF9TUkMpID8gIiNmZmFhYWEiIDogKChkaXIgPT0KKyAgICAgICAgICAgIEdTVF9QQURfU0lOSykgPyAiI2FhYWFmZiIgOiAiI2NjY2NjYyIpOworICB9CisgIC8qIHBhZHMgKi8KKyAgZGVidWdfZHVtcF9wYWQgKHBhZCwgY29sb3JfbmFtZSwgZWxlbWVudF9uYW1lLCBkZXRhaWxzLCBvdXQsIGluZGVudCk7CisgIGdfZnJlZSAoZWxlbWVudF9uYW1lKTsKK30KKworc3RhdGljIGdib29sZWFuCitzdHJpbmdfYXBwZW5kX2ZpZWxkIChHUXVhcmsgZmllbGQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBncG9pbnRlciBwdHIpCit7CisgIEdTdHJpbmcgKnN0ciA9IChHU3RyaW5nICopIHB0cjsKKyAgZ2NoYXIgKnZhbHVlX3N0ciA9IGdzdF92YWx1ZV9zZXJpYWxpemUgKHZhbHVlKTsKKyAgZ2NoYXIgKmVzY192YWx1ZV9zdHI7CisKKyAgLyogc29tZSBlbnVtcyBjYW4gYmVjb21lIHJlYWxseSBsb25nICovCisgIGlmIChzdHJsZW4gKHZhbHVlX3N0cikgPiAyNSkgeworICAgIGdpbnQgcG9zID0gMjQ7CisKKyAgICAvKiB0cnVuY2F0ZSAqLworICAgIHZhbHVlX3N0clsyNV0gPSAnXDAnOworCisgICAgLyogbWlycm9yIGFueSBicmFja2V0cyBhbmQgcXVvdGVzICovCisgICAgaWYgKHZhbHVlX3N0clswXSA9PSAnPCcpCisgICAgICB2YWx1ZV9zdHJbcG9zLS1dID0gJz4nOworICAgIGlmICh2YWx1ZV9zdHJbMF0gPT0gJ1snKQorICAgICAgdmFsdWVfc3RyW3Bvcy0tXSA9ICddJzsKKyAgICBpZiAodmFsdWVfc3RyWzBdID09ICcoJykKKyAgICAgIHZhbHVlX3N0cltwb3MtLV0gPSAnKSc7CisgICAgaWYgKHZhbHVlX3N0clswXSA9PSAneycpCisgICAgICB2YWx1ZV9zdHJbcG9zLS1dID0gJ30nOworICAgIGlmICh2YWx1ZV9zdHJbMF0gPT0gJyInKQorICAgICAgdmFsdWVfc3RyW3Bvcy0tXSA9ICciJzsKKyAgICBpZiAocG9zICE9IDI0KQorICAgICAgdmFsdWVfc3RyW3Bvcy0tXSA9ICcgJzsKKyAgICAvKiBlbGlwcHNpemUgKi8KKyAgICB2YWx1ZV9zdHJbcG9zLS1dID0gJy4nOworICAgIHZhbHVlX3N0cltwb3MtLV0gPSAnLic7CisgICAgdmFsdWVfc3RyW3Bvcy0tXSA9ICcuJzsKKyAgfQorICBlc2NfdmFsdWVfc3RyID0gZ19zdHJlc2NhcGUgKHZhbHVlX3N0ciwgTlVMTCk7CisKKyAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAoc3RyLCAiICAlMThzOiAlc1xcbCIsIGdfcXVhcmtfdG9fc3RyaW5nIChmaWVsZCksCisgICAgICBlc2NfdmFsdWVfc3RyKTsKKworICBnX2ZyZWUgKHZhbHVlX3N0cik7CisgIGdfZnJlZSAoZXNjX3ZhbHVlX3N0cik7CisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2NoYXIgKgorZGVidWdfZHVtcF9kZXNjcmliZV9jYXBzIChHc3RDYXBzICogY2FwcywgR3N0RGVidWdHcmFwaERldGFpbHMgZGV0YWlscykKK3sKKyAgZ2NoYXIgKm1lZGlhID0gTlVMTDsKKworICBpZiAoZGV0YWlscyAmIEdTVF9ERUJVR19HUkFQSF9TSE9XX0NBUFNfREVUQUlMUykgeworCisgICAgaWYgKGdzdF9jYXBzX2lzX2FueSAoY2FwcykgfHwgZ3N0X2NhcHNfaXNfZW1wdHkgKGNhcHMpKSB7CisgICAgICBtZWRpYSA9IGdzdF9jYXBzX3RvX3N0cmluZyAoY2Fwcyk7CisKKyAgICB9IGVsc2UgeworICAgICAgR1N0cmluZyAqc3RyID0gTlVMTDsKKyAgICAgIGd1aW50IGk7CisgICAgICBndWludCBzbGVuID0gMDsKKworICAgICAgZm9yIChpID0gMDsgaSA8IGdzdF9jYXBzX2dldF9zaXplIChjYXBzKTsgaSsrKSB7CisgICAgICAgIHNsZW4gKz0gMjUgKworICAgICAgICAgICAgU1RSVUNUVVJFX0VTVElNQVRFRF9TVFJJTkdfTEVOIChnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCBpKSk7CisgICAgICB9CisKKyAgICAgIHN0ciA9IGdfc3RyaW5nX3NpemVkX25ldyAoc2xlbik7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgZ3N0X2NhcHNfZ2V0X3NpemUgKGNhcHMpOyBpKyspIHsKKyAgICAgICAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCBpKTsKKworICAgICAgICBnX3N0cmluZ19hcHBlbmQgKHN0ciwgZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoc3RydWN0dXJlKSk7CisgICAgICAgIGdfc3RyaW5nX2FwcGVuZCAoc3RyLCAiXFxsIik7CisKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9mb3JlYWNoIChzdHJ1Y3R1cmUsIHN0cmluZ19hcHBlbmRfZmllbGQsIChncG9pbnRlcikgc3RyKTsKKyAgICAgIH0KKworICAgICAgbWVkaWEgPSBnX3N0cmluZ19mcmVlIChzdHIsIEZBTFNFKTsKKyAgICB9CisKKyAgfSBlbHNlIHsKKyAgICBpZiAoR1NUX0NBUFNfSVNfU0lNUExFIChjYXBzKSkKKyAgICAgIG1lZGlhID0KKyAgICAgICAgICBnX3N0cmR1cCAoZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCkpKTsKKyAgICBlbHNlCisgICAgICBtZWRpYSA9IGdfc3RyZHVwICgiKiIpOworICB9CisgIHJldHVybiBtZWRpYTsKK30KKworc3RhdGljIHZvaWQKK2RlYnVnX2R1bXBfZWxlbWVudF9wYWRfbGluayAoR3N0UGFkICogcGFkLCBHc3RFbGVtZW50ICogZWxlbWVudCwKKyAgICBHc3REZWJ1Z0dyYXBoRGV0YWlscyBkZXRhaWxzLCBGSUxFICogb3V0LCBjb25zdCBnaW50IGluZGVudCkKK3sKKyAgR3N0RWxlbWVudCAqcGVlcl9lbGVtZW50LCAqdGFyZ2V0X2VsZW1lbnQ7CisgIEdzdFBhZCAqcGVlcl9wYWQsICp0YXJnZXRfcGFkLCAqdG1wX3BhZDsKKyAgR3N0Q2FwcyAqY2FwcywgKnBlZXJfY2FwczsKKyAgZ2NoYXIgKm1lZGlhID0gTlVMTDsKKyAgZ2NoYXIgKm1lZGlhX3NyYyA9IE5VTEwsICptZWRpYV9zaW5rID0gTlVMTDsKKyAgZ2NoYXIgKnBhZF9uYW1lLCAqZWxlbWVudF9uYW1lOworICBnY2hhciAqcGVlcl9wYWRfbmFtZSwgKnBlZXJfZWxlbWVudF9uYW1lOworICBnY2hhciAqdGFyZ2V0X3BhZF9uYW1lLCAqdGFyZ2V0X2VsZW1lbnRfbmFtZTsKKyAgY29uc3QgZ2NoYXIgKnNwYyA9ICZzcGFjZXNbTUFYIChzaXplb2YgKHNwYWNlcykgLSAoMSArIGluZGVudCAqIDIpLCAwKV07CisKKyAgaWYgKChwZWVyX3BhZCA9IGdzdF9wYWRfZ2V0X3BlZXIgKHBhZCkpKSB7CisgICAgaWYgKChkZXRhaWxzICYgR1NUX0RFQlVHX0dSQVBIX1NIT1dfTUVESUFfVFlQRSkgfHwKKyAgICAgICAgKGRldGFpbHMgJiBHU1RfREVCVUdfR1JBUEhfU0hPV19DQVBTX0RFVEFJTFMpCisgICAgICAgICkgeworICAgICAgY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAocGFkKTsKKyAgICAgIGlmICghY2FwcykKKyAgICAgICAgY2FwcyA9IGdzdF9jYXBzX2NvcHkgKGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzIChwYWQpKTsKKyAgICAgIHBlZXJfY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAocGVlcl9wYWQpOworICAgICAgaWYgKCFwZWVyX2NhcHMpCisgICAgICAgIHBlZXJfY2FwcyA9IGdzdF9jYXBzX2NvcHkgKGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzIChwZWVyX3BhZCkpOworCisgICAgICBtZWRpYSA9IGRlYnVnX2R1bXBfZGVzY3JpYmVfY2FwcyAoY2FwcywgZGV0YWlscyk7CisgICAgICAvKiBjaGVjayBpZiBwZWVyIGNhcHMgYXJlIGRpZmZlcmVudCAqLworICAgICAgaWYgKHBlZXJfY2FwcyAmJiAhZ3N0X2NhcHNfaXNfZXF1YWwgKGNhcHMsIHBlZXJfY2FwcykpIHsKKyAgICAgICAgZ2NoYXIgKnRtcDsKKworICAgICAgICB0bXAgPSBkZWJ1Z19kdW1wX2Rlc2NyaWJlX2NhcHMgKHBlZXJfY2FwcywgZGV0YWlscyk7CisgICAgICAgIGlmIChnc3RfcGFkX2dldF9kaXJlY3Rpb24gKHBhZCkgPT0gR1NUX1BBRF9TUkMpIHsKKyAgICAgICAgICBtZWRpYV9zcmMgPSBtZWRpYTsKKyAgICAgICAgICBtZWRpYV9zaW5rID0gdG1wOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIG1lZGlhX3NyYyA9IHRtcDsKKyAgICAgICAgICBtZWRpYV9zaW5rID0gbWVkaWE7CisgICAgICAgIH0KKyAgICAgICAgbWVkaWEgPSBOVUxMOworICAgICAgfQorICAgICAgZ3N0X2NhcHNfdW5yZWYgKHBlZXJfY2Fwcyk7CisgICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7CisgICAgfQorCisgICAgcGFkX25hbWUgPSBkZWJ1Z19kdW1wX21ha2Vfb2JqZWN0X25hbWUgKEdTVF9PQkpFQ1QgKHBhZCkpOworICAgIGlmIChlbGVtZW50KSB7CisgICAgICBlbGVtZW50X25hbWUgPSBkZWJ1Z19kdW1wX21ha2Vfb2JqZWN0X25hbWUgKEdTVF9PQkpFQ1QgKGVsZW1lbnQpKTsKKyAgICB9IGVsc2UgeworICAgICAgZWxlbWVudF9uYW1lID0gZ19zdHJkdXAgKCIiKTsKKyAgICB9CisgICAgcGVlcl9wYWRfbmFtZSA9IGRlYnVnX2R1bXBfbWFrZV9vYmplY3RfbmFtZSAoR1NUX09CSkVDVCAocGVlcl9wYWQpKTsKKyAgICBpZiAoKHBlZXJfZWxlbWVudCA9IGdzdF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50IChwZWVyX3BhZCkpKSB7CisgICAgICBwZWVyX2VsZW1lbnRfbmFtZSA9CisgICAgICAgICAgZGVidWdfZHVtcF9tYWtlX29iamVjdF9uYW1lIChHU1RfT0JKRUNUIChwZWVyX2VsZW1lbnQpKTsKKyAgICB9IGVsc2UgeworICAgICAgcGVlcl9lbGVtZW50X25hbWUgPSBnX3N0cmR1cCAoIiIpOworICAgIH0KKworICAgIGlmIChHU1RfSVNfR0hPU1RfUEFEIChwYWQpKSB7CisgICAgICBpZiAoKHRtcF9wYWQgPSBnc3RfZ2hvc3RfcGFkX2dldF90YXJnZXQgKEdTVF9HSE9TVF9QQUQgKHBhZCkpKSkgeworICAgICAgICBpZiAoKHRhcmdldF9wYWQgPSBnc3RfcGFkX2dldF9wZWVyICh0bXBfcGFkKSkpIHsKKyAgICAgICAgICB0YXJnZXRfcGFkX25hbWUgPQorICAgICAgICAgICAgICBkZWJ1Z19kdW1wX21ha2Vfb2JqZWN0X25hbWUgKEdTVF9PQkpFQ1QgKHRhcmdldF9wYWQpKTsKKyAgICAgICAgICBpZiAoKHRhcmdldF9lbGVtZW50ID0gZ3N0X3BhZF9nZXRfcGFyZW50X2VsZW1lbnQgKHRhcmdldF9wYWQpKSkgeworICAgICAgICAgICAgdGFyZ2V0X2VsZW1lbnRfbmFtZSA9CisgICAgICAgICAgICAgICAgZGVidWdfZHVtcF9tYWtlX29iamVjdF9uYW1lIChHU1RfT0JKRUNUICh0YXJnZXRfZWxlbWVudCkpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0YXJnZXRfZWxlbWVudF9uYW1lID0gZ19zdHJkdXAgKCIiKTsKKyAgICAgICAgICB9CisgICAgICAgICAgLyogc3JjIGdob3N0cGFkIHJlbGF0aW9uc2hpcCAqLworICAgICAgICAgIGZwcmludGYgKG91dCwgIiVzJXNfJXMgLT4gJXNfJXMgW3N0eWxlPWRhc2hlZCwgbWlubGVuPTBdXG4iLCBzcGMsCisgICAgICAgICAgICAgIHRhcmdldF9lbGVtZW50X25hbWUsIHRhcmdldF9wYWRfbmFtZSwgZWxlbWVudF9uYW1lLCBwYWRfbmFtZSk7CisKKyAgICAgICAgICBnX2ZyZWUgKHRhcmdldF9wYWRfbmFtZSk7CisgICAgICAgICAgZ19mcmVlICh0YXJnZXRfZWxlbWVudF9uYW1lKTsKKyAgICAgICAgICBpZiAodGFyZ2V0X2VsZW1lbnQpCisgICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmICh0YXJnZXRfZWxlbWVudCk7CisgICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAodGFyZ2V0X3BhZCk7CisgICAgICAgIH0KKyAgICAgICAgZ3N0X29iamVjdF91bnJlZiAodG1wX3BhZCk7CisgICAgICB9CisgICAgfQorICAgIGlmIChHU1RfSVNfR0hPU1RfUEFEIChwZWVyX3BhZCkpIHsKKyAgICAgIGlmICgodG1wX3BhZCA9IGdzdF9naG9zdF9wYWRfZ2V0X3RhcmdldCAoR1NUX0dIT1NUX1BBRCAocGVlcl9wYWQpKSkpIHsKKyAgICAgICAgaWYgKCh0YXJnZXRfcGFkID0gZ3N0X3BhZF9nZXRfcGVlciAodG1wX3BhZCkpKSB7CisgICAgICAgICAgdGFyZ2V0X3BhZF9uYW1lID0KKyAgICAgICAgICAgICAgZGVidWdfZHVtcF9tYWtlX29iamVjdF9uYW1lIChHU1RfT0JKRUNUICh0YXJnZXRfcGFkKSk7CisgICAgICAgICAgaWYgKCh0YXJnZXRfZWxlbWVudCA9IGdzdF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50ICh0YXJnZXRfcGFkKSkpIHsKKyAgICAgICAgICAgIHRhcmdldF9lbGVtZW50X25hbWUgPQorICAgICAgICAgICAgICAgIGRlYnVnX2R1bXBfbWFrZV9vYmplY3RfbmFtZSAoR1NUX09CSkVDVCAodGFyZ2V0X2VsZW1lbnQpKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGFyZ2V0X2VsZW1lbnRfbmFtZSA9IGdfc3RyZHVwICgiIik7CisgICAgICAgICAgfQorICAgICAgICAgIC8qIHNpbmsgZ2hvc3RwYWQgcmVsYXRpb25zaGlwICovCisgICAgICAgICAgZnByaW50ZiAob3V0LCAiJXMlc18lcyAtPiAlc18lcyBbc3R5bGU9ZGFzaGVkLCBtaW5sZW49MF1cbiIsIHNwYywKKyAgICAgICAgICAgICAgcGVlcl9lbGVtZW50X25hbWUsIHBlZXJfcGFkX25hbWUsCisgICAgICAgICAgICAgIHRhcmdldF9lbGVtZW50X25hbWUsIHRhcmdldF9wYWRfbmFtZSk7CisgICAgICAgICAgLyogRklYTUU6IHdlIGFyZSBtaXNzaW5nIGxpbmtzIGZyb20gdGhlIHByb3h5IHBhZAorICAgICAgICAgICAqIHRoZW9yZXRpY2FsbHkgd2UgbmVlZCB0bzoKKyAgICAgICAgICAgKiBwYWQ9Z3N0X29iamVjdF9yZWYodGFyZ2V0X3BhZCk7CisgICAgICAgICAgICogZ290byBsaW5lIDI4MDogaWYgKChwZWVyX3BhZCA9IGdzdF9wYWRfZ2V0X3BlZXIgKHBhZCkpKQorICAgICAgICAgICAqIGFzIHRoaXMgd291bGQgYmUgdWdseSB3ZSBuZWVkIHRvIHJlZmFjdG9yIC4uLgorICAgICAgICAgICAqLworICAgICAgICAgIGRlYnVnX2R1bXBfZWxlbWVudF9wYWRfbGluayAodGFyZ2V0X3BhZCwgdGFyZ2V0X2VsZW1lbnQsIGRldGFpbHMsIG91dCwKKyAgICAgICAgICAgICAgaW5kZW50KTsKKyAgICAgICAgICBnX2ZyZWUgKHRhcmdldF9wYWRfbmFtZSk7CisgICAgICAgICAgZ19mcmVlICh0YXJnZXRfZWxlbWVudF9uYW1lKTsKKyAgICAgICAgICBpZiAodGFyZ2V0X2VsZW1lbnQpCisgICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmICh0YXJnZXRfZWxlbWVudCk7CisgICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAodGFyZ2V0X3BhZCk7CisgICAgICAgIH0KKyAgICAgICAgZ3N0X29iamVjdF91bnJlZiAodG1wX3BhZCk7CisgICAgICB9CisgICAgfQorCisgICAgLyogcGFkIGxpbmsgKi8KKyAgICBpZiAobWVkaWEpIHsKKyAgICAgIGZwcmludGYgKG91dCwgIiVzJXNfJXMgLT4gJXNfJXMgW2xhYmVsPVwiJXNcIl1cbiIsIHNwYywKKyAgICAgICAgICBlbGVtZW50X25hbWUsIHBhZF9uYW1lLCBwZWVyX2VsZW1lbnRfbmFtZSwgcGVlcl9wYWRfbmFtZSwgbWVkaWEpOworICAgICAgZ19mcmVlIChtZWRpYSk7CisgICAgfSBlbHNlIGlmIChtZWRpYV9zcmMgJiYgbWVkaWFfc2luaykgeworICAgICAgLyogZG90IGhhcyBzb21lIGlzc3VlcyB3aXRoIHBsYWNlbWVudCBvZiBoZWFkIGFuZCB0YWlsbGFiZWxzLAorICAgICAgICogd2UgbmVlZCBhbiBlbXB0eSBsYWJlbCB0byBtYWtlIHNwYWNlICovCisgICAgICBmcHJpbnRmIChvdXQsICIlcyVzXyVzIC0+ICVzXyVzIFtsYWJlbGRpc3RhbmNlPVwiMTBcIiwgbGFiZWxhbmdsZT1cIjBcIiwgIgorICAgICAgICAgICJsYWJlbD1cIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIsICIKKyAgICAgICAgICAiaGVhZGxhYmVsPVwiJXNcIiwgdGFpbGxhYmVsPVwiJXNcIl1cbiIsCisgICAgICAgICAgc3BjLCBlbGVtZW50X25hbWUsIHBhZF9uYW1lLCBwZWVyX2VsZW1lbnRfbmFtZSwgcGVlcl9wYWRfbmFtZSwKKyAgICAgICAgICBtZWRpYV9zcmMsIG1lZGlhX3NpbmspOworICAgICAgZ19mcmVlIChtZWRpYV9zcmMpOworICAgICAgZ19mcmVlIChtZWRpYV9zaW5rKTsKKyAgICB9IGVsc2UgeworICAgICAgZnByaW50ZiAob3V0LCAiJXMlc18lcyAtPiAlc18lc1xuIiwgc3BjLAorICAgICAgICAgIGVsZW1lbnRfbmFtZSwgcGFkX25hbWUsIHBlZXJfZWxlbWVudF9uYW1lLCBwZWVyX3BhZF9uYW1lKTsKKyAgICB9CisKKyAgICBnX2ZyZWUgKHBhZF9uYW1lKTsKKyAgICBnX2ZyZWUgKGVsZW1lbnRfbmFtZSk7CisgICAgZ19mcmVlIChwZWVyX3BhZF9uYW1lKTsKKyAgICBnX2ZyZWUgKHBlZXJfZWxlbWVudF9uYW1lKTsKKyAgICBpZiAocGVlcl9lbGVtZW50KQorICAgICAgZ3N0X29iamVjdF91bnJlZiAocGVlcl9lbGVtZW50KTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChwZWVyX3BhZCk7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2RlYnVnX2R1bXBfZWxlbWVudF9wYWRzIChHc3RJdGVyYXRvciAqIHBhZF9pdGVyLCBHc3RQYWQgKiBwYWQsCisgICAgR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdERlYnVnR3JhcGhEZXRhaWxzIGRldGFpbHMsIEZJTEUgKiBvdXQsCisgICAgY29uc3QgZ2ludCBpbmRlbnQsIGd1aW50ICogc3JjX3BhZHMsIGd1aW50ICogc2lua19wYWRzKQoreworICBHVmFsdWUgaXRlbSA9IHsgMCwgfTsKKyAgZ2Jvb2xlYW4gcGFkc19kb25lOworICBHc3RQYWREaXJlY3Rpb24gZGlyOworCisgIHBhZHNfZG9uZSA9IEZBTFNFOworICB3aGlsZSAoIXBhZHNfZG9uZSkgeworICAgIHN3aXRjaCAoZ3N0X2l0ZXJhdG9yX25leHQgKHBhZF9pdGVyLCAmaXRlbSkpIHsKKyAgICAgIGNhc2UgR1NUX0lURVJBVE9SX09LOgorICAgICAgICBwYWQgPSBnX3ZhbHVlX2dldF9vYmplY3QgKCZpdGVtKTsKKyAgICAgICAgZGVidWdfZHVtcF9lbGVtZW50X3BhZCAocGFkLCBlbGVtZW50LCBkZXRhaWxzLCBvdXQsIGluZGVudCk7CisgICAgICAgIGRpciA9IGdzdF9wYWRfZ2V0X2RpcmVjdGlvbiAocGFkKTsKKyAgICAgICAgaWYgKGRpciA9PSBHU1RfUEFEX1NSQykKKyAgICAgICAgICAoKnNyY19wYWRzKSsrOworICAgICAgICBlbHNlIGlmIChkaXIgPT0gR1NUX1BBRF9TSU5LKQorICAgICAgICAgICgqc2lua19wYWRzKSsrOworICAgICAgICBnX3ZhbHVlX3Jlc2V0ICgmaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfUkVTWU5DOgorICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jIChwYWRfaXRlcik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRVJST1I6CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgorICAgICAgICBwYWRzX2RvbmUgPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICB9CisgIH0KK30KKworLyoKKyAqIGRlYnVnX2R1bXBfZWxlbWVudDoKKyAqIEBiaW46IHRoZSBiaW4gdGhhdCBzaG91bGQgYmUgYW5hbHl6ZWQKKyAqIEBvdXQ6IGZpbGUgdG8gd3JpdGUgdG8KKyAqIEBpbmRlbnQ6IGxldmVsIG9mIGdyYXBoIGluZGVudGF0aW9uCisgKgorICogSGVscGVyIGZvciBfZ3N0X2RlYnVnX2Jpbl90b19kb3RfZmlsZSgpIHRvIHJlY3Vyc2l2ZWx5IGR1bXAgYSBwaXBlbGluZS4KKyAqLworc3RhdGljIHZvaWQKK2RlYnVnX2R1bXBfZWxlbWVudCAoR3N0QmluICogYmluLCBHc3REZWJ1Z0dyYXBoRGV0YWlscyBkZXRhaWxzLCBGSUxFICogb3V0LAorICAgIGNvbnN0IGdpbnQgaW5kZW50KQoreworICBHc3RJdGVyYXRvciAqZWxlbWVudF9pdGVyLCAqcGFkX2l0ZXI7CisgIGdib29sZWFuIGVsZW1lbnRzX2RvbmUsIHBhZHNfZG9uZTsKKyAgR1ZhbHVlIGl0ZW0gPSB7IDAsIH07CisgIEdWYWx1ZSBpdGVtMiA9IHsgMCwgfTsKKyAgR3N0RWxlbWVudCAqZWxlbWVudDsKKyAgR3N0UGFkICpwYWQgPSBOVUxMOworICBndWludCBzcmNfcGFkcywgc2lua19wYWRzOworICBnY2hhciAqZWxlbWVudF9uYW1lOworICBnY2hhciAqc3RhdGVfbmFtZSA9IE5VTEw7CisgIGdjaGFyICpwYXJhbV9uYW1lID0gTlVMTDsKKyAgY29uc3QgZ2NoYXIgKnNwYyA9ICZzcGFjZXNbTUFYIChzaXplb2YgKHNwYWNlcykgLSAoMSArIGluZGVudCAqIDIpLCAwKV07CisKKyAgZWxlbWVudF9pdGVyID0gZ3N0X2Jpbl9pdGVyYXRlX2VsZW1lbnRzIChiaW4pOworICBlbGVtZW50c19kb25lID0gRkFMU0U7CisgIHdoaWxlICghZWxlbWVudHNfZG9uZSkgeworICAgIHN3aXRjaCAoZ3N0X2l0ZXJhdG9yX25leHQgKGVsZW1lbnRfaXRlciwgJml0ZW0pKSB7CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9PSzoKKyAgICAgICAgZWxlbWVudCA9IGdfdmFsdWVfZ2V0X29iamVjdCAoJml0ZW0pOworICAgICAgICBlbGVtZW50X25hbWUgPSBkZWJ1Z19kdW1wX21ha2Vfb2JqZWN0X25hbWUgKEdTVF9PQkpFQ1QgKGVsZW1lbnQpKTsKKworICAgICAgICBpZiAoZGV0YWlscyAmIEdTVF9ERUJVR19HUkFQSF9TSE9XX1NUQVRFUykgeworICAgICAgICAgIHN0YXRlX25hbWUgPSBkZWJ1Z19kdW1wX2dldF9lbGVtZW50X3N0YXRlIChHU1RfRUxFTUVOVCAoZWxlbWVudCkpOworICAgICAgICB9CisgICAgICAgIGlmIChkZXRhaWxzICYgR1NUX0RFQlVHX0dSQVBIX1NIT1dfTk9OX0RFRkFVTFRfUEFSQU1TKSB7CisgICAgICAgICAgcGFyYW1fbmFtZSA9IGRlYnVnX2R1bXBfZ2V0X2VsZW1lbnRfcGFyYW1zIChHU1RfRUxFTUVOVCAoZWxlbWVudCkpOworICAgICAgICB9CisgICAgICAgIC8qIGVsZW1lbnRzICovCisgICAgICAgIGZwcmludGYgKG91dCwgIiVzc3ViZ3JhcGggY2x1c3Rlcl8lcyB7XG4iLCBzcGMsIGVsZW1lbnRfbmFtZSk7CisgICAgICAgIGZwcmludGYgKG91dCwgIiVzICBmb250bmFtZT1cIkJpdHN0cmVhbSBWZXJhIFNhbnNcIjtcbiIsIHNwYyk7CisgICAgICAgIGZwcmludGYgKG91dCwgIiVzICBmb250c2l6ZT1cIjhcIjtcbiIsIHNwYyk7CisgICAgICAgIGZwcmludGYgKG91dCwgIiVzICBzdHlsZT1maWxsZWQ7XG4iLCBzcGMpOworICAgICAgICBmcHJpbnRmIChvdXQsICIlcyAgY29sb3I9YmxhY2s7XG5cbiIsIHNwYyk7CisgICAgICAgIGZwcmludGYgKG91dCwgIiVzICBsYWJlbD1cIiVzXFxuJXMlcyVzXCI7XG4iLCBzcGMsCisgICAgICAgICAgICBHX09CSkVDVF9UWVBFX05BTUUgKGVsZW1lbnQpLCBHU1RfT0JKRUNUX05BTUUgKGVsZW1lbnQpLAorICAgICAgICAgICAgKHN0YXRlX25hbWUgPyBzdGF0ZV9uYW1lIDogIiIpLCAocGFyYW1fbmFtZSA/IHBhcmFtX25hbWUgOiAiIikKKyAgICAgICAgICAgICk7CisgICAgICAgIGlmIChzdGF0ZV9uYW1lKSB7CisgICAgICAgICAgZ19mcmVlIChzdGF0ZV9uYW1lKTsKKyAgICAgICAgICBzdGF0ZV9uYW1lID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFyYW1fbmFtZSkgeworICAgICAgICAgIGdfZnJlZSAocGFyYW1fbmFtZSk7CisgICAgICAgICAgcGFyYW1fbmFtZSA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZ19mcmVlIChlbGVtZW50X25hbWUpOworCisgICAgICAgIHNyY19wYWRzID0gc2lua19wYWRzID0gMDsKKyAgICAgICAgaWYgKChwYWRfaXRlciA9IGdzdF9lbGVtZW50X2l0ZXJhdGVfc2lua19wYWRzIChlbGVtZW50KSkpIHsKKyAgICAgICAgICBkZWJ1Z19kdW1wX2VsZW1lbnRfcGFkcyAocGFkX2l0ZXIsIHBhZCwgZWxlbWVudCwgZGV0YWlscywgb3V0LCBpbmRlbnQsCisgICAgICAgICAgICAgICZzcmNfcGFkcywgJnNpbmtfcGFkcyk7CisgICAgICAgICAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKHBhZF9pdGVyKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHBhZF9pdGVyID0gZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zcmNfcGFkcyAoZWxlbWVudCkpKSB7CisgICAgICAgICAgZGVidWdfZHVtcF9lbGVtZW50X3BhZHMgKHBhZF9pdGVyLCBwYWQsIGVsZW1lbnQsIGRldGFpbHMsIG91dCwgaW5kZW50LAorICAgICAgICAgICAgICAmc3JjX3BhZHMsICZzaW5rX3BhZHMpOworICAgICAgICAgIGdzdF9pdGVyYXRvcl9mcmVlIChwYWRfaXRlcik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKEdTVF9JU19CSU4gKGVsZW1lbnQpKSB7CisgICAgICAgICAgZnByaW50ZiAob3V0LCAiJXMgIGZpbGxjb2xvcj1cIiNmZmZmZmZcIjtcbiIsIHNwYyk7CisgICAgICAgICAgLyogcmVjdXJzZSAqLworICAgICAgICAgIGRlYnVnX2R1bXBfZWxlbWVudCAoR1NUX0JJTiAoZWxlbWVudCksIGRldGFpbHMsIG91dCwgaW5kZW50ICsgMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaWYgKHNyY19wYWRzICYmICFzaW5rX3BhZHMpCisgICAgICAgICAgICBmcHJpbnRmIChvdXQsICIlcyAgZmlsbGNvbG9yPVwiI2ZmYWFhYVwiO1xuIiwgc3BjKTsKKyAgICAgICAgICBlbHNlIGlmICghc3JjX3BhZHMgJiYgc2lua19wYWRzKQorICAgICAgICAgICAgZnByaW50ZiAob3V0LCAiJXMgIGZpbGxjb2xvcj1cIiNhYWFhZmZcIjtcbiIsIHNwYyk7CisgICAgICAgICAgZWxzZSBpZiAoc3JjX3BhZHMgJiYgc2lua19wYWRzKQorICAgICAgICAgICAgZnByaW50ZiAob3V0LCAiJXMgIGZpbGxjb2xvcj1cIiNhYWZmYWFcIjtcbiIsIHNwYyk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZnByaW50ZiAob3V0LCAiJXMgIGZpbGxjb2xvcj1cIiNmZmZmZmZcIjtcbiIsIHNwYyk7CisgICAgICAgIH0KKyAgICAgICAgZnByaW50ZiAob3V0LCAiJXN9XG5cbiIsIHNwYyk7CisgICAgICAgIGlmICgocGFkX2l0ZXIgPSBnc3RfZWxlbWVudF9pdGVyYXRlX3BhZHMgKGVsZW1lbnQpKSkgeworICAgICAgICAgIHBhZHNfZG9uZSA9IEZBTFNFOworICAgICAgICAgIHdoaWxlICghcGFkc19kb25lKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGdzdF9pdGVyYXRvcl9uZXh0IChwYWRfaXRlciwgJml0ZW0yKSkgeworICAgICAgICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9PSzoKKyAgICAgICAgICAgICAgICBwYWQgPSBnX3ZhbHVlX2dldF9vYmplY3QgKCZpdGVtMik7CisgICAgICAgICAgICAgICAgaWYgKGdzdF9wYWRfaXNfbGlua2VkIChwYWQpCisgICAgICAgICAgICAgICAgICAgICYmIGdzdF9wYWRfZ2V0X2RpcmVjdGlvbiAocGFkKSA9PSBHU1RfUEFEX1NSQykgeworICAgICAgICAgICAgICAgICAgZGVidWdfZHVtcF9lbGVtZW50X3BhZF9saW5rIChwYWQsIGVsZW1lbnQsIGRldGFpbHMsIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICBpbmRlbnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBnX3ZhbHVlX3Jlc2V0ICgmaXRlbTIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6CisgICAgICAgICAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAocGFkX2l0ZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9FUlJPUjoKKyAgICAgICAgICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRE9ORToKKyAgICAgICAgICAgICAgICBwYWRzX2RvbmUgPSBUUlVFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBnX3ZhbHVlX3Vuc2V0ICgmaXRlbTIpOworICAgICAgICAgIGdzdF9pdGVyYXRvcl9mcmVlIChwYWRfaXRlcik7CisgICAgICAgIH0KKyAgICAgICAgZ192YWx1ZV9yZXNldCAoJml0ZW0pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR1NUX0lURVJBVE9SX1JFU1lOQzoKKyAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAoZWxlbWVudF9pdGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9FUlJPUjoKKyAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0RPTkU6CisgICAgICAgIGVsZW1lbnRzX2RvbmUgPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgZ192YWx1ZV91bnNldCAoJml0ZW0pOworICBnc3RfaXRlcmF0b3JfZnJlZSAoZWxlbWVudF9pdGVyKTsKK30KKworLyoKKyAqIF9nc3RfZGVidWdfYmluX3RvX2RvdF9maWxlOgorICogQGJpbjogdGhlIHRvcC1sZXZlbCBwaXBlbGluZSB0aGF0IHNob3VsZCBiZSBhbmFseXplZAorICogQGZpbGVfbmFtZTogb3V0cHV0IGJhc2UgZmlsZW5hbWUgKGUuZy4gIm15cGxheWVyIikKKyAqCisgKiBUbyBhaWQgZGVidWdnaW5nIGFwcGxpY2F0aW9ucyBvbmUgY2FuIHVzZSB0aGlzIG1ldGhvZCB0byB3cml0ZSBvdXQgdGhlIHdob2xlCisgKiBuZXR3b3JrIG9mIGdzdHJlYW1lciBlbGVtZW50cyB0aGF0IGZvcm0gdGhlIHBpcGVsaW5lIGludG8gYW4gZG90IGZpbGUuCisgKiBUaGlzIGZpbGUgY2FuIGJlIHByb2Nlc3NlZCB3aXRoIGdyYXBodml6IHRvIGdldCBhbiBpbWFnZS4KKyAqIDxpbmZvcm1hbGV4YW1wbGU+PHByb2dyYW1saXN0aW5nPgorICogIGRvdCAtVHBuZyAtb2ltYWdlLnBuZyBncmFwaF9sb3dsZXZlbC5kb3QKKyAqIDwvcHJvZ3JhbWxpc3Rpbmc+PC9pbmZvcm1hbGV4YW1wbGU+CisgKi8KK3ZvaWQKK19nc3RfZGVidWdfYmluX3RvX2RvdF9maWxlIChHc3RCaW4gKiBiaW4sIEdzdERlYnVnR3JhcGhEZXRhaWxzIGRldGFpbHMsCisgICAgY29uc3QgZ2NoYXIgKiBmaWxlX25hbWUpCit7CisgIGdjaGFyICpmdWxsX2ZpbGVfbmFtZSA9IE5VTEw7CisgIEZJTEUgKm91dDsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQklOIChiaW4pKTsKKworICBpZiAoR19MSUtFTFkgKHByaXZfZ3N0X2R1bXBfZG90X2RpciA9PSBOVUxMKSkKKyAgICByZXR1cm47CisKKyAgaWYgKCFmaWxlX25hbWUpIHsKKyAgICBmaWxlX25hbWUgPSBnX2dldF9hcHBsaWNhdGlvbl9uYW1lICgpOworICAgIGlmICghZmlsZV9uYW1lKQorICAgICAgZmlsZV9uYW1lID0gInVubmFtZWQiOworICB9CisKKyAgZnVsbF9maWxlX25hbWUgPSBnX3N0cmR1cF9wcmludGYgKCIlcyIgR19ESVJfU0VQQVJBVE9SX1MgIiVzLmRvdCIsCisgICAgICBwcml2X2dzdF9kdW1wX2RvdF9kaXIsIGZpbGVfbmFtZSk7CisKKyAgaWYgKChvdXQgPSBmb3BlbiAoZnVsbF9maWxlX25hbWUsICJ3YiIpKSkgeworICAgIGdjaGFyICpzdGF0ZV9uYW1lID0gTlVMTDsKKyAgICBnY2hhciAqcGFyYW1fbmFtZSA9IE5VTEw7CisKKyAgICBpZiAoZGV0YWlscyAmIEdTVF9ERUJVR19HUkFQSF9TSE9XX1NUQVRFUykgeworICAgICAgc3RhdGVfbmFtZSA9IGRlYnVnX2R1bXBfZ2V0X2VsZW1lbnRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pKTsKKyAgICB9CisgICAgaWYgKGRldGFpbHMgJiBHU1RfREVCVUdfR1JBUEhfU0hPV19OT05fREVGQVVMVF9QQVJBTVMpIHsKKyAgICAgIHBhcmFtX25hbWUgPSBkZWJ1Z19kdW1wX2dldF9lbGVtZW50X3BhcmFtcyAoR1NUX0VMRU1FTlQgKGJpbikpOworICAgIH0KKworICAgIC8qIHdyaXRlIGhlYWRlciAqLworICAgIGZwcmludGYgKG91dCwKKyAgICAgICAgImRpZ3JhcGggcGlwZWxpbmUge1xuIgorICAgICAgICAiICByYW5rZGlyPUxSO1xuIgorICAgICAgICAiICBmb250bmFtZT1cInNhbnNcIjtcbiIKKyAgICAgICAgIiAgZm9udHNpemU9XCIxMFwiO1xuIgorICAgICAgICAiICBsYWJlbGxvYz10O1xuIgorICAgICAgICAiICBub2Rlc2VwPS4xO1xuIgorICAgICAgICAiICByYW5rc2VwPS4yO1xuIgorICAgICAgICAiICBsYWJlbD1cIjwlcz5cXG4lcyVzJXNcIjtcbiIKKyAgICAgICAgIiAgbm9kZSBbc3R5bGU9ZmlsbGVkLCBzaGFwZT1ib3gsIGZvbnRzaXplPVwiOVwiLCBmb250bmFtZT1cInNhbnNcIiwgbWFyZ2luPVwiMC4wLDAuMFwiXTtcbiIKKyAgICAgICAgIiAgZWRnZSBbbGFiZWxmb250c2l6ZT1cIjZcIiwgZm9udHNpemU9XCI5XCIsIGZvbnRuYW1lPVwibW9ub3NwYWNlXCJdO1xuIgorICAgICAgICAiXG4iLCBHX09CSkVDVF9UWVBFX05BTUUgKGJpbiksIEdTVF9PQkpFQ1RfTkFNRSAoYmluKSwKKyAgICAgICAgKHN0YXRlX25hbWUgPyBzdGF0ZV9uYW1lIDogIiIpLCAocGFyYW1fbmFtZSA/IHBhcmFtX25hbWUgOiAiIikKKyAgICAgICAgKTsKKyAgICBpZiAoc3RhdGVfbmFtZSkKKyAgICAgIGdfZnJlZSAoc3RhdGVfbmFtZSk7CisgICAgaWYgKHBhcmFtX25hbWUpCisgICAgICBnX2ZyZWUgKHBhcmFtX25hbWUpOworCisgICAgZGVidWdfZHVtcF9lbGVtZW50IChiaW4sIGRldGFpbHMsIG91dCwgMSk7CisKKyAgICAvKiB3cml0ZSBmb290ZXIgKi8KKyAgICBmcHJpbnRmIChvdXQsICJ9XG4iKTsKKyAgICBmY2xvc2UgKG91dCk7CisgICAgR1NUX0lORk8gKCJ3cm90ZSBiaW4gZ3JhcGggdG8gOiAnJXMnIiwgZnVsbF9maWxlX25hbWUpOworICB9IGVsc2UgeworICAgIEdTVF9XQVJOSU5HICgiRmFpbGVkIHRvIG9wZW4gZmlsZSAnJXMnIGZvciB3cml0aW5nOiAlcyIsIGZ1bGxfZmlsZV9uYW1lLAorICAgICAgICBnX3N0cmVycm9yIChlcnJubykpOworICB9CisgIGdfZnJlZSAoZnVsbF9maWxlX25hbWUpOworfQorCisvKgorICogX2dzdF9kZWJ1Z19iaW5fdG9fZG90X2ZpbGVfd2l0aF90czoKKyAqIEBiaW46IHRoZSB0b3AtbGV2ZWwgcGlwZWxpbmUgdGhhdCBzaG91bGQgYmUgYW5hbHl6ZWQKKyAqIEBmaWxlX25hbWU6IG91dHB1dCBiYXNlIGZpbGVuYW1lIChlLmcuICJteXBsYXllciIpCisgKgorICogVGhpcyB3b3JrcyBsaWtlIF9nc3RfZGVidWdfYmluX3RvX2RvdF9maWxlKCksIGJ1dCBhZGRzIHRoZSBjdXJyZW50IHRpbWVzdGFtcAorICogdG8gdGhlIGZpbGVuYW1lLCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIHRvIHRha2UgbXVsdGlwbGUgc25hcHNob3RzLgorICovCit2b2lkCitfZ3N0X2RlYnVnX2Jpbl90b19kb3RfZmlsZV93aXRoX3RzIChHc3RCaW4gKiBiaW4sIEdzdERlYnVnR3JhcGhEZXRhaWxzIGRldGFpbHMsCisgICAgY29uc3QgZ2NoYXIgKiBmaWxlX25hbWUpCit7CisgIGdjaGFyICp0c19maWxlX25hbWUgPSBOVUxMOworICBHc3RDbG9ja1RpbWUgZWxhcHNlZDsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQklOIChiaW4pKTsKKworICBpZiAoIWZpbGVfbmFtZSkgeworICAgIGZpbGVfbmFtZSA9IGdfZ2V0X2FwcGxpY2F0aW9uX25hbWUgKCk7CisgICAgaWYgKCFmaWxlX25hbWUpCisgICAgICBmaWxlX25hbWUgPSAidW5uYW1lZCI7CisgIH0KKworICAvKiBhZGQgdGltZXN0YW1wICovCisgIGVsYXBzZWQgPSBHU1RfQ0xPQ0tfRElGRiAoX3ByaXZfZ3N0X2luZm9fc3RhcnRfdGltZSwKKyAgICAgIGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCkpOworCisgIC8qIHdlIGRvbid0IHVzZSBHU1RfVElNRV9GT1JNQVQgYXMgc3VjaCBmaWxlbmFtZXMgd291bGQgZmFpbCBvbiBzb21lCisgICAqIGZpbGVzeXN0ZW1zIGxpa2UgZmF0ICovCisgIHRzX2ZpbGVfbmFtZSA9CisgICAgICBnX3N0cmR1cF9wcmludGYgKCIldS4lMDJ1LiUwMnUuJTA5dS0lcyIsIEdTVF9USU1FX0FSR1MgKGVsYXBzZWQpLAorICAgICAgZmlsZV9uYW1lKTsKKworICBfZ3N0X2RlYnVnX2Jpbl90b19kb3RfZmlsZSAoYmluLCBkZXRhaWxzLCB0c19maWxlX25hbWUpOworICBnX2ZyZWUgKHRzX2ZpbGVfbmFtZSk7Cit9CisjZWxzZSAvKiAhR1NUX0RJU0FCTEVfR1NUX0RFQlVHICovCisjaWZuZGVmIEdTVF9SRU1PVkVfRElTQUJMRUQKK3ZvaWQKK19nc3RfZGVidWdfYmluX3RvX2RvdF9maWxlIChHc3RCaW4gKiBiaW4sIEdzdERlYnVnR3JhcGhEZXRhaWxzIGRldGFpbHMsCisgICAgY29uc3QgZ2NoYXIgKiBmaWxlX25hbWUpCit7Cit9CisKK3ZvaWQKK19nc3RfZGVidWdfYmluX3RvX2RvdF9maWxlX3dpdGhfdHMgKEdzdEJpbiAqIGJpbiwgR3N0RGVidWdHcmFwaERldGFpbHMgZGV0YWlscywKKyAgICBjb25zdCBnY2hhciAqIGZpbGVfbmFtZSkKK3sKK30KKyNlbmRpZiAvKiBHU1RfUkVNT1ZFX0RJU0FCTEVEICovCisjZW5kaWYgLyogR1NUX0RJU0FCTEVfR1NUX0RFQlVHICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0ZGVidWd1dGlscy5oIGIvZ3N0L2dzdGRlYnVndXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjE4MzA4Ci0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdGRlYnVndXRpbHMuaApAQCAtMCwwICsxLDEwOSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorICoKKyAqIGdzdGRlYnVndXRpbHMuaDogZGVidWdnaW5nIGFuZCBhbmFseXNpcyB1dGlsbGl0aWVzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0dTVERFQlVHVVRJTFNfSF9fCisjZGVmaW5lIF9fR1NUREVCVUdVVElMU19IX18KKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPGdzdC9nc3Rjb25maWcuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0YmluLmg+CisKK0dfQkVHSU5fREVDTFMKKworLyoqCisgKiBHc3REZWJ1Z0dyYXBoRGV0YWlsczoKKyAqIEBHU1RfREVCVUdfR1JBUEhfU0hPV19NRURJQV9UWVBFOiBzaG93IGNhcHMtbmFtZSBvbiBlZGdlcworICogQEdTVF9ERUJVR19HUkFQSF9TSE9XX0NBUFNfREVUQUlMUzogc2hvdyBjYXBzLWRldGFpbHMgb24gZWRnZXMKKyAqIEBHU1RfREVCVUdfR1JBUEhfU0hPV19OT05fREVGQVVMVF9QQVJBTVM6IHNob3cgbW9kaWZpZWQgcGFyYW1ldGVycyBvbiBlbGVtZW50cworICogQEdTVF9ERUJVR19HUkFQSF9TSE9XX1NUQVRFUzogc2hvdyBlbGVtZW50IHN0YXRlcworICogQEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTDogc2hvdyBhbGwgZGV0YWlscworICoKKyAqIEF2YWlsYWJsZSBkZXRhaWxzIGZvciBwaXBlbGluZSBncmFwaHMgcHJvZHVjZWQgYnkgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRSgpCisgKiBhbmQgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKCkuCisgKgorICogU2luY2U6IDAuMTAuMTUKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgR1NUX0RFQlVHX0dSQVBIX1NIT1dfTUVESUFfVFlQRSAgICAgICAgID0gKDE8PDApLAorICBHU1RfREVCVUdfR1JBUEhfU0hPV19DQVBTX0RFVEFJTFMgICAgICAgPSAoMTw8MSksCisgIEdTVF9ERUJVR19HUkFQSF9TSE9XX05PTl9ERUZBVUxUX1BBUkFNUyA9ICgxPDwyKSwKKyAgR1NUX0RFQlVHX0dSQVBIX1NIT1dfU1RBVEVTICAgICAgICAgICAgID0gKDE8PDMpLAorICBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwgICAgICAgICAgICAgICAgPSAoKDE8PDQpLTEpCit9IEdzdERlYnVnR3JhcGhEZXRhaWxzOworCisKKy8qKioqKioqKioqIHBpcGVsaW5lIGdyYXBocyAqKioqKioqKioqLworCit2b2lkIF9nc3RfZGVidWdfYmluX3RvX2RvdF9maWxlIChHc3RCaW4gKmJpbiwgR3N0RGVidWdHcmFwaERldGFpbHMgZGV0YWlscywgY29uc3QgZ2NoYXIgKmZpbGVfbmFtZSk7Cit2b2lkIF9nc3RfZGVidWdfYmluX3RvX2RvdF9maWxlX3dpdGhfdHMgKEdzdEJpbiAqYmluLCBHc3REZWJ1Z0dyYXBoRGV0YWlscyBkZXRhaWxzLCBjb25zdCBnY2hhciAqZmlsZV9uYW1lKTsKKworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKworLyoqCisgKiBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFOgorICogQGJpbjogdGhlIHRvcC1sZXZlbCBwaXBlbGluZSB0aGF0IHNob3VsZCBiZSBhbmFseXplZAorICogQGRldGFpbHM6IGRldGFpbHMgdG8gc2hvdyBpbiB0aGUgZ3JhcGgsIGUuZy4gI0dTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCBvcgorICogICAgb25lIG9yIG1vcmUgb3RoZXIgI0dzdERlYnVnR3JhcGhEZXRhaWxzIGZsYWdzLgorICogQGZpbGVfbmFtZTogb3V0cHV0IGJhc2UgZmlsZW5hbWUgKGUuZy4gIm15cGxheWVyIikKKyAqCisgKiBUbyBhaWQgZGVidWdnaW5nIGFwcGxpY2F0aW9ucyBvbmUgY2FuIHVzZSB0aGlzIG1ldGhvZCB0byB3cml0ZSBvdXQgdGhlIHdob2xlCisgKiBuZXR3b3JrIG9mIGdzdHJlYW1lciBlbGVtZW50cyB0aGF0IGZvcm0gdGhlIHBpcGVsaW5lIGludG8gYW4gZG90IGZpbGUuCisgKiBUaGlzIGZpbGUgY2FuIGJlIHByb2Nlc3NlZCB3aXRoIGdyYXBodml6IHRvIGdldCBhbiBpbWFnZS4KKyAqIDxpbmZvcm1hbGV4YW1wbGU+PHByb2dyYW1saXN0aW5nPgorICogIGRvdCAtVHBuZyAtb2ltYWdlLnBuZyBncmFwaF9sb3dsZXZlbC5kb3QKKyAqIDwvcHJvZ3JhbWxpc3Rpbmc+PC9pbmZvcm1hbGV4YW1wbGU+CisgKgorICogVGhlIG1hY3JvIGlzIG9ubHkgYWN0aXZlIGlmIGdzdHJlYW1lciBpcyBjb25maWd1cmVkIHdpdGgKKyAqICZxdW90Oy0tZ3N0LWVuYWJsZS1nc3QtZGVidWcmcXVvdDsgYW5kIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorICogR1NUX0RFQlVHX0RVTVBfRE9UX0RJUiBpcyBzZXQgdG8gYSBiYXNlcGF0aCAoZS5nLiAvdG1wKS4KKyAqCisgKiBTaW5jZTogMC4xMC4xNQorICovCisjZGVmaW5lIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEUoYmluLCBkZXRhaWxzLCBmaWxlX25hbWUpIF9nc3RfZGVidWdfYmluX3RvX2RvdF9maWxlIChiaW4sIGRldGFpbHMsIGZpbGVfbmFtZSkKKworLyoqCisgKiBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFX1dJVEhfVFM6CisgKiBAYmluOiB0aGUgdG9wLWxldmVsIHBpcGVsaW5lIHRoYXQgc2hvdWxkIGJlIGFuYWx5emVkCisgKiBAZGV0YWlsczogZGV0YWlscyB0byBzaG93IGluIHRoZSBncmFwaCwgZS5nLiAjR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMIG9yCisgKiAgICBvbmUgb3IgbW9yZSBvdGhlciAjR3N0RGVidWdHcmFwaERldGFpbHMgZmxhZ3MuCisgKiBAZmlsZV9uYW1lOiBvdXRwdXQgYmFzZSBmaWxlbmFtZSAoZS5nLiAibXlwbGF5ZXIiKQorICoKKyAqIFRoaXMgd29ya3MgbGlrZSBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFKCksIGJ1dCBhZGRzIHRoZSBjdXJyZW50IHRpbWVzdGFtcAorICogdG8gdGhlIGZpbGVuYW1lLCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIHRvIHRha2UgbXVsdGlwbGUgc25hcHNob3RzLgorICoKKyAqIFNpbmNlOiAwLjEwLjE1CisgKi8KKyNkZWZpbmUgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKGJpbiwgZGV0YWlscywgZmlsZV9uYW1lKSBfZ3N0X2RlYnVnX2Jpbl90b19kb3RfZmlsZV93aXRoX3RzIChiaW4sIGRldGFpbHMsIGZpbGVfbmFtZSkKKworCisjZWxzZSAvKiBHU1RfRElTQUJMRV9HU1RfREVCVUcgKi8KKworCisjZGVmaW5lIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEUoYmluLCBkZXRhaWxzLCBmaWxlX25hbWUpCisjZGVmaW5lIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhiaW4sIGRldGFpbHMsIGZpbGVfbmFtZSkKKworI2VuZGlmIC8qIEdTVF9ESVNBQkxFX0dTVF9ERUJVRyAqLworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HU1RERUJVR1VUSUxTX0hfXyAqLworCmRpZmYgLS1naXQgYS9nc3QvZ3N0ZWxlbWVudC5jIGIvZ3N0L2dzdGVsZW1lbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWIxMmJlCi0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdGVsZW1lbnQuYwpAQCAtMCwwICsxLDI5OTIgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDA0IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+CisgKgorICogZ3N0ZWxlbWVudC5jOiBUaGUgYmFzZSBlbGVtZW50LCBhbGwgZWxlbWVudHMgZGVyaXZlIGZyb20gdGhpcworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qKgorICogU0VDVElPTjpnc3RlbGVtZW50CisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGFsbCBwaXBlbGluZSBlbGVtZW50cworICogQHNlZV9hbHNvOiAjR3N0RWxlbWVudEZhY3RvcnksICNHc3RQYWQKKyAqCisgKiBHc3RFbGVtZW50IGlzIHRoZSBhYnN0cmFjdCBiYXNlIGNsYXNzIG5lZWRlZCB0byBjb25zdHJ1Y3QgYW4gZWxlbWVudCB0aGF0CisgKiBjYW4gYmUgdXNlZCBpbiBhIEdTdHJlYW1lciBwaXBlbGluZS4gUGxlYXNlIHJlZmVyIHRvIHRoZSBwbHVnaW4gd3JpdGVycworICogZ3VpZGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY3JlYXRpbmcgI0dzdEVsZW1lbnQgc3ViY2xhc3Nlcy4KKyAqCisgKiBUaGUgbmFtZSBvZiBhICNHc3RFbGVtZW50IGNhbiBiZSBnZXQgd2l0aCBnc3RfZWxlbWVudF9nZXRfbmFtZSgpIGFuZCBzZXQgd2l0aAorICogZ3N0X2VsZW1lbnRfc2V0X25hbWUoKS4gIEZvciBzcGVlZCwgR1NUX0VMRU1FTlRfTkFNRSgpIGNhbiBiZSB1c2VkIGluIHRoZQorICogY29yZSB3aGVuIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBsb2NraW5nLiBEbyBub3QgdXNlIHRoaXMgaW4gcGx1Zy1pbnMgb3IKKyAqIGFwcGxpY2F0aW9ucyBpbiBvcmRlciB0byByZXRhaW4gQUJJIGNvbXBhdGliaWxpdHkuCisgKgorICogQWxsIGVsZW1lbnRzIGhhdmUgcGFkcyAob2YgdGhlIHR5cGUgI0dzdFBhZCkuICBUaGVzZSBwYWRzIGxpbmsgdG8gcGFkcyBvbgorICogb3RoZXIgZWxlbWVudHMuICAjR3N0QnVmZmVyIGZsb3cgYmV0d2VlbiB0aGVzZSBsaW5rZWQgcGFkcy4KKyAqIEEgI0dzdEVsZW1lbnQgaGFzIGEgI0dMaXN0IG9mICNHc3RQYWQgc3RydWN0dXJlcyBmb3IgYWxsIHRoZWlyIGlucHV0IChvciBzaW5rKQorICogYW5kIG91dHB1dCAob3Igc291cmNlKSBwYWRzLgorICogQ29yZSBhbmQgcGx1Zy1pbiB3cml0ZXJzIGNhbiBhZGQgYW5kIHJlbW92ZSBwYWRzIHdpdGggZ3N0X2VsZW1lbnRfYWRkX3BhZCgpCisgKiBhbmQgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCgpLgorICoKKyAqIEFuIGV4aXN0aW5nIHBhZCBvZiBhbiBlbGVtZW50IGNhbiBiZSByZXRyaWV2ZWQgYnkgbmFtZSB3aXRoCisgKiBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCgpLiBBIG5ldyBkeW5hbWljIHBhZCBjYW4gYmUgY3JlYXRlZCB1c2luZworICogZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQoKSB3aXRoIGEgI0dzdFBhZFRlbXBsYXRlIG9yIAorICogZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkKCkgd2l0aCB0aGUgdGVtcGxhdGUgbmFtZSBzdWNoIGFzICJzcmNfXCVkIi4KKyAqIEFuIGl0ZXJhdG9yIG9mIGFsbCBwYWRzIGNhbiBiZSByZXRyaWV2ZWQgd2l0aCBnc3RfZWxlbWVudF9pdGVyYXRlX3BhZHMoKS4KKyAqCisgKiBFbGVtZW50cyBjYW4gYmUgbGlua2VkIHRocm91Z2ggdGhlaXIgcGFkcy4KKyAqIElmIHRoZSBsaW5rIGlzIHN0cmFpZ2h0Zm9yd2FyZCwgdXNlIHRoZSBnc3RfZWxlbWVudF9saW5rKCkKKyAqIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGxpbmsgdHdvIGVsZW1lbnRzLCBvciBnc3RfZWxlbWVudF9saW5rX21hbnkoKQorICogZm9yIG1vcmUgZWxlbWVudHMgaW4gYSByb3cuCisgKiBVc2UgZ3N0X2VsZW1lbnRfbGlua19maWx0ZXJlZCgpIHRvIGxpbmsgdHdvIGVsZW1lbnRzIGNvbnN0cmFpbmVkIGJ5CisgKiBhIHNwZWNpZmllZCBzZXQgb2YgI0dzdENhcHMuCisgKiBGb3IgZmluZXIgY29udHJvbCwgdXNlIGdzdF9lbGVtZW50X2xpbmtfcGFkcygpIGFuZAorICogZ3N0X2VsZW1lbnRfbGlua19wYWRzX2ZpbHRlcmVkKCkgdG8gc3BlY2lmeSB0aGUgcGFkcyB0byBsaW5rIG9uCisgKiBlYWNoIGVsZW1lbnQgYnkgbmFtZS4KKyAqCisgKiBFYWNoIGVsZW1lbnQgaGFzIGEgc3RhdGUgKHNlZSAjR3N0U3RhdGUpLiAgWW91IGNhbiBnZXQgYW5kIHNldCB0aGUgc3RhdGUKKyAqIG9mIGFuIGVsZW1lbnQgd2l0aCBnc3RfZWxlbWVudF9nZXRfc3RhdGUoKSBhbmQgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKCkuCisgKiBTZXR0aW5nIGEgc3RhdGUgdHJpZ2dlcnMgYSAjR3N0U3RhdGVDaGFuZ2UuIFRvIGdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbgorICogb2YgYSAjR3N0U3RhdGUsIHVzZSBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSgpLgorICoKKyAqIFlvdSBjYW4gZ2V0IGFuZCBzZXQgYSAjR3N0Q2xvY2sgb24gYW4gZWxlbWVudCB1c2luZyBnc3RfZWxlbWVudF9nZXRfY2xvY2soKQorICogYW5kIGdzdF9lbGVtZW50X3NldF9jbG9jaygpLgorICogU29tZSBlbGVtZW50cyBjYW4gcHJvdmlkZSBhIGNsb2NrIGZvciB0aGUgcGlwZWxpbmUgaWYKKyAqIGdzdF9lbGVtZW50X3Byb3ZpZGVzX2Nsb2NrKCkgcmV0dXJucyAlVFJVRS4gV2l0aCB0aGUKKyAqIGdzdF9lbGVtZW50X3Byb3ZpZGVfY2xvY2soKSBtZXRob2Qgb25lIGNhbiByZXRyaWV2ZSB0aGUgY2xvY2sgcHJvdmlkZWQgYnkKKyAqIHN1Y2ggYW4gZWxlbWVudC4KKyAqIE5vdCBhbGwgZWxlbWVudHMgcmVxdWlyZSBhIGNsb2NrIHRvIG9wZXJhdGUgY29ycmVjdGx5LiBJZgorICogZ3N0X2VsZW1lbnRfcmVxdWlyZXNfY2xvY2soKSByZXR1cm5zICVUUlVFLCBhIGNsb2NrIHNob3VsZCBiZSBzZXQgb24gdGhlCisgKiBlbGVtZW50IHdpdGggZ3N0X2VsZW1lbnRfc2V0X2Nsb2NrKCkuCisgKgorICogTm90ZSB0aGF0IGNsb2NrIHNsZWN0aW9uIGFuZCBkaXN0cmlidXRpb24gaXMgbm9ybWFsbHkgaGFuZGxlZCBieSB0aGUKKyAqIHRvcGxldmVsICNHc3RQaXBlbGluZSBzbyB0aGUgY2xvY2sgZnVuY3Rpb25zIGFyZSBvbmx5IHRvIGJlIHVzZWQgaW4gdmVyeQorICogc3BlY2lmaWMgc2l0dWF0aW9ucy4KKyAqCisgKiBMYXN0IHJldmlld2VkIG9uIDIwMDktMDUtMjkgKDAuMTAuMjQpCisgKi8KKworI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGdvYmplY3QvZ3ZhbHVlY29sbGVjdG9yLmg+CisKKyNpbmNsdWRlICJnc3RlbGVtZW50LmgiCisjaW5jbHVkZSAiZ3N0ZWxlbWVudG1ldGFkYXRhLmgiCisjaW5jbHVkZSAiZ3N0ZW51bXR5cGVzLmgiCisjaW5jbHVkZSAiZ3N0YnVzLmgiCisjaW5jbHVkZSAiZ3N0bWFyc2hhbC5oIgorI2luY2x1ZGUgImdzdGVycm9yLmgiCisjaW5jbHVkZSAiZ3N0ZXZlbnQuaCIKKyNpbmNsdWRlICJnc3R1dGlscy5oIgorI2luY2x1ZGUgImdzdGluZm8uaCIKKyNpbmNsdWRlICJnc3R2YWx1ZS5oIgorI2luY2x1ZGUgImdzdC1pMThuLWxpYi5oIgorCisvKiBFbGVtZW50IHNpZ25hbHMgYW5kIGFyZ3MgKi8KK2VudW0KK3sKKyAgUEFEX0FEREVELAorICBQQURfUkVNT1ZFRCwKKyAgTk9fTU9SRV9QQURTLAorICAvKiBhZGQgbW9yZSBhYm92ZSAqLworICBMQVNUX1NJR05BTAorfTsKKworZW51bQoreworICBBUkdfMAorICAgICAgLyogRklMTCBNRSAqLworfTsKKworc3RhdGljIHZvaWQgZ3N0X2VsZW1lbnRfY2xhc3NfaW5pdCAoR3N0RWxlbWVudENsYXNzICoga2xhc3MpOworc3RhdGljIHZvaWQgZ3N0X2VsZW1lbnRfaW5pdCAoR3N0RWxlbWVudCAqIGVsZW1lbnQpOworc3RhdGljIHZvaWQgZ3N0X2VsZW1lbnRfYmFzZV9jbGFzc19pbml0IChncG9pbnRlciBnX2NsYXNzKTsKK3N0YXRpYyB2b2lkIGdzdF9lbGVtZW50X2Jhc2VfY2xhc3NfZmluYWxpemUgKGdwb2ludGVyIGdfY2xhc3MpOworCitzdGF0aWMgdm9pZCBnc3RfZWxlbWVudF9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KTsKK3N0YXRpYyB2b2lkIGdzdF9lbGVtZW50X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKKworc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZV9mdW5jIChHc3RFbGVtZW50ICogZWxlbWVudCwKKyAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKK3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfZWxlbWVudF9nZXRfc3RhdGVfZnVuYyAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCisgICAgR3N0U3RhdGUgKiBzdGF0ZSwgR3N0U3RhdGUgKiBwZW5kaW5nLCBHc3RDbG9ja1RpbWUgdGltZW91dCk7CitzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlX2Z1bmMgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAorICAgIEdzdFN0YXRlIHN0YXRlKTsKK3N0YXRpYyB2b2lkIGdzdF9lbGVtZW50X3NldF9idXNfZnVuYyAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEJ1cyAqIGJ1cyk7CisKK3N0YXRpYyBnYm9vbGVhbiBnc3RfZWxlbWVudF9kZWZhdWx0X3NlbmRfZXZlbnQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAorICAgIEdzdEV2ZW50ICogZXZlbnQpOworc3RhdGljIGdib29sZWFuIGdzdF9lbGVtZW50X2RlZmF1bHRfcXVlcnkgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAorICAgIEdzdFF1ZXJ5ICogcXVlcnkpOworCitzdGF0aWMgR3N0UGFkVGVtcGxhdGUKKyAgICAqIGdzdF9lbGVtZW50X2NsYXNzX2dldF9yZXF1ZXN0X3BhZF90ZW1wbGF0ZSAoR3N0RWxlbWVudENsYXNzICoKKyAgICBlbGVtZW50X2NsYXNzLCBjb25zdCBnY2hhciAqIG5hbWUpOworCitzdGF0aWMgR3N0T2JqZWN0Q2xhc3MgKnBhcmVudF9jbGFzcyA9IE5VTEw7CitzdGF0aWMgZ3VpbnQgZ3N0X2VsZW1lbnRfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKKworLyogdGhpcyBpcyB1c2VkIGluIGdzdGVsZW1lbnRmYWN0b3J5LmM6Z3N0X2VsZW1lbnRfcmVnaXN0ZXIoKSAqLworR1F1YXJrIF9nc3RfZWxlbWVudGNsYXNzX2ZhY3RvcnkgPSAwOworCitHVHlwZQorZ3N0X2VsZW1lbnRfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyB2b2xhdGlsZSBnc2l6ZSBnc3RfZWxlbWVudF90eXBlID0gMDsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZnc3RfZWxlbWVudF90eXBlKSkgeworICAgIEdUeXBlIF90eXBlOworICAgIHN0YXRpYyBjb25zdCBHVHlwZUluZm8gZWxlbWVudF9pbmZvID0geworICAgICAgc2l6ZW9mIChHc3RFbGVtZW50Q2xhc3MpLAorICAgICAgZ3N0X2VsZW1lbnRfYmFzZV9jbGFzc19pbml0LAorICAgICAgZ3N0X2VsZW1lbnRfYmFzZV9jbGFzc19maW5hbGl6ZSwKKyAgICAgIChHQ2xhc3NJbml0RnVuYykgZ3N0X2VsZW1lbnRfY2xhc3NfaW5pdCwKKyAgICAgIE5VTEwsCisgICAgICBOVUxMLAorICAgICAgc2l6ZW9mIChHc3RFbGVtZW50KSwKKyAgICAgIDAsCisgICAgICAoR0luc3RhbmNlSW5pdEZ1bmMpIGdzdF9lbGVtZW50X2luaXQsCisgICAgICBOVUxMCisgICAgfTsKKworICAgIF90eXBlID0gZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RZUEVfT0JKRUNULCAiR3N0RWxlbWVudCIsCisgICAgICAgICZlbGVtZW50X2luZm8sIEdfVFlQRV9GTEFHX0FCU1RSQUNUKTsKKworICAgIF9nc3RfZWxlbWVudGNsYXNzX2ZhY3RvcnkgPQorICAgICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoIkdTVF9FTEVNRU5UQ0xBU1NfRkFDVE9SWSIpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmZ3N0X2VsZW1lbnRfdHlwZSwgX3R5cGUpOworICB9CisgIHJldHVybiBnc3RfZWxlbWVudF90eXBlOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2VsZW1lbnRfY2xhc3NfaW5pdCAoR3N0RWxlbWVudENsYXNzICoga2xhc3MpCit7CisgIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKKworICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKKworICBwYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQgKGtsYXNzKTsKKworICAvKioKKyAgICogR3N0RWxlbWVudDo6cGFkLWFkZGVkOgorICAgKiBAZ3N0ZWxlbWVudDogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCisgICAqIEBuZXdfcGFkOiB0aGUgcGFkIHRoYXQgaGFzIGJlZW4gYWRkZWQKKyAgICoKKyAgICogYSBuZXcgI0dzdFBhZCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgZWxlbWVudC4gTm90ZSB0aGF0IHRoaXMgc2lnbmFsIHdpbGwKKyAgICogdXN1YWxseSBiZSBlbWl0dGVkIGZyb20gdGhlIGNvbnRleHQgb2YgdGhlIHN0cmVhbWluZyB0aHJlYWQuIEFsc28ga2VlcCBpbgorICAgKiBtaW5kIHRoYXQgaWYgeW91IGFkZCBuZXcgZWxlbWVudHMgdG8gdGhlIHBpcGVsaW5lIGluIHRoZSBzaWduYWwgaGFuZGxlcgorICAgKiB5b3Ugd2lsbCBuZWVkIHRvIHNldCB0aGVtIHRvIHRoZSBkZXNpcmVkIHRhcmdldCBzdGF0ZSB3aXRoCisgICAqIGdzdF9lbGVtZW50X3NldF9zdGF0ZSgpIG9yIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoKS4KKyAgICovCisgIGdzdF9lbGVtZW50X3NpZ25hbHNbUEFEX0FEREVEXSA9CisgICAgICBnX3NpZ25hbF9uZXcgKCJwYWQtYWRkZWQiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLCBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgIEdfU1RSVUNUX09GRlNFVCAoR3N0RWxlbWVudENsYXNzLCBwYWRfYWRkZWQpLCBOVUxMLCBOVUxMLAorICAgICAgZ3N0X21hcnNoYWxfVk9JRF9fT0JKRUNULCBHX1RZUEVfTk9ORSwgMSwgR1NUX1RZUEVfUEFEKTsKKyAgLyoqCisgICAqIEdzdEVsZW1lbnQ6OnBhZC1yZW1vdmVkOgorICAgKiBAZ3N0ZWxlbWVudDogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCisgICAqIEBvbGRfcGFkOiB0aGUgcGFkIHRoYXQgaGFzIGJlZW4gcmVtb3ZlZAorICAgKgorICAgKiBhICNHc3RQYWQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBlbGVtZW50CisgICAqLworICBnc3RfZWxlbWVudF9zaWduYWxzW1BBRF9SRU1PVkVEXSA9CisgICAgICBnX3NpZ25hbF9uZXcgKCJwYWQtcmVtb3ZlZCIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgR19TVFJVQ1RfT0ZGU0VUIChHc3RFbGVtZW50Q2xhc3MsIHBhZF9yZW1vdmVkKSwgTlVMTCwgTlVMTCwKKyAgICAgIGdzdF9tYXJzaGFsX1ZPSURfX09CSkVDVCwgR19UWVBFX05PTkUsIDEsIEdTVF9UWVBFX1BBRCk7CisgIC8qKgorICAgKiBHc3RFbGVtZW50Ojpuby1tb3JlLXBhZHM6CisgICAqIEBnc3RlbGVtZW50OiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKKyAgICoKKyAgICogVGhpcyBzaWduYWxzIHRoYXQgdGhlIGVsZW1lbnQgd2lsbCBub3QgZ2VuZXJhdGUgbW9yZSBkeW5hbWljIHBhZHMuCisgICAqIE5vdGUgdGhhdCB0aGlzIHNpZ25hbCB3aWxsIHVzdWFsbHkgYmUgZW1pdHRlZCBmcm9tIHRoZSBjb250ZXh0IG9mCisgICAqIHRoZSBzdHJlYW1pbmcgdGhyZWFkLgorICAgKi8KKyAgZ3N0X2VsZW1lbnRfc2lnbmFsc1tOT19NT1JFX1BBRFNdID0KKyAgICAgIGdfc2lnbmFsX25ldyAoIm5vLW1vcmUtcGFkcyIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCisgICAgICBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChHc3RFbGVtZW50Q2xhc3MsIG5vX21vcmVfcGFkcyksIE5VTEwsCisgICAgICBOVUxMLCBnc3RfbWFyc2hhbF9WT0lEX19WT0lELCBHX1RZUEVfTk9ORSwgMCk7CisKKyAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF9lbGVtZW50X2Rpc3Bvc2U7CisgIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X2VsZW1lbnRfZmluYWxpemU7CisKKyAga2xhc3MtPmNoYW5nZV9zdGF0ZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGVfZnVuYyk7CisgIGtsYXNzLT5zZXRfc3RhdGUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlX2Z1bmMpOworICBrbGFzcy0+Z2V0X3N0YXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9lbGVtZW50X2dldF9zdGF0ZV9mdW5jKTsKKyAga2xhc3MtPnNldF9idXMgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2VsZW1lbnRfc2V0X2J1c19mdW5jKTsKKyAga2xhc3MtPnF1ZXJ5ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9lbGVtZW50X2RlZmF1bHRfcXVlcnkpOworICBrbGFzcy0+c2VuZF9ldmVudCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZWxlbWVudF9kZWZhdWx0X3NlbmRfZXZlbnQpOworICBrbGFzcy0+bnVtcGFkdGVtcGxhdGVzID0gMDsKKworICBrbGFzcy0+ZWxlbWVudGZhY3RvcnkgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2VsZW1lbnRfYmFzZV9jbGFzc19pbml0IChncG9pbnRlciBnX2NsYXNzKQoreworICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoZ19jbGFzcyk7CisgIEdMaXN0ICpub2RlLCAqcGFkdGVtcGxhdGVzOworCisgIC8qIENvcHkgdGhlIGVsZW1lbnQgZGV0YWlscyBoZXJlIHNvIGVsZW1lbnRzIGNhbiBpbmhlcml0IHRoZQorICAgKiBkZXRhaWxzIGZyb20gdGhlaXIgYmFzZSBjbGFzcyBhbmQgY2xhc3NlcyBvbmx5IG5lZWQgdG8gc2V0CisgICAqIHRoZSBkZXRhaWxzIGluIGNsYXNzX2luaXQgaW5zdGVhZCBvZiBiYXNlX2luaXQgKi8KKyAgZWxlbWVudF9jbGFzcy0+bWV0YWRhdGEgPQorICAgICAgZWxlbWVudF9jbGFzcy0+bWV0YWRhdGEgPyBnc3Rfc3RydWN0dXJlX2NvcHkgKGVsZW1lbnRfY2xhc3MtPm1ldGFkYXRhKSA6CisgICAgICBnc3Rfc3RydWN0dXJlX2VtcHR5X25ldyAoIm1ldGFkYXRhIik7CisKKyAgLyogQ29weSB0aGUgcGFkIHRlbXBsYXRlcyBzbyBlbGVtZW50cyBpbmhlcml0IHRoZW0KKyAgICogZnJvbSB0aGVpciBiYXNlIGNsYXNzIGJ1dCBlbGVtZW50cyBjYW4gYWRkIHBhZCB0ZW1wbGF0ZXMgaW4gY2xhc3NfaW5pdAorICAgKiBpbnN0ZWFkIG9mIGJhc2VfaW5pdC4KKyAgICovCisgIHBhZHRlbXBsYXRlcyA9IGdfbGlzdF9jb3B5IChlbGVtZW50X2NsYXNzLT5wYWR0ZW1wbGF0ZXMpOworICBmb3IgKG5vZGUgPSBwYWR0ZW1wbGF0ZXM7IG5vZGUgIT0gTlVMTDsgbm9kZSA9IG5vZGUtPm5leHQpIHsKKyAgICBHc3RQYWRUZW1wbGF0ZSAqdG1wbCA9IChHc3RQYWRUZW1wbGF0ZSAqKSBub2RlLT5kYXRhOworICAgIGdzdF9vYmplY3RfcmVmICh0bXBsKTsKKyAgfQorICBlbGVtZW50X2NsYXNzLT5wYWR0ZW1wbGF0ZXMgPSBwYWR0ZW1wbGF0ZXM7CisKKyAgLyogc2V0IHRoZSBmYWN0b3J5LCBzZWUgZ3N0X2VsZW1lbnRfcmVnaXN0ZXIoKSAqLworICBlbGVtZW50X2NsYXNzLT5lbGVtZW50ZmFjdG9yeSA9CisgICAgICBnX3R5cGVfZ2V0X3FkYXRhIChHX1RZUEVfRlJPTV9DTEFTUyAoZWxlbWVudF9jbGFzcyksCisgICAgICBfZ3N0X2VsZW1lbnRjbGFzc19mYWN0b3J5KTsKKyAgR1NUX0RFQlVHICgidHlwZSAlcyA6IGZhY3RvcnkgJXAiLCBHX09CSkVDVF9DTEFTU19OQU1FIChlbGVtZW50X2NsYXNzKSwKKyAgICAgIGVsZW1lbnRfY2xhc3MtPmVsZW1lbnRmYWN0b3J5KTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9lbGVtZW50X2Jhc2VfY2xhc3NfZmluYWxpemUgKGdwb2ludGVyIGdfY2xhc3MpCit7CisgIEdzdEVsZW1lbnRDbGFzcyAqa2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoZ19jbGFzcyk7CisKKyAgZ19saXN0X2ZvcmVhY2ggKGtsYXNzLT5wYWR0ZW1wbGF0ZXMsIChHRnVuYykgZ3N0X29iamVjdF91bnJlZiwgTlVMTCk7CisgIGdfbGlzdF9mcmVlIChrbGFzcy0+cGFkdGVtcGxhdGVzKTsKKworICBnc3Rfc3RydWN0dXJlX2ZyZWUgKGtsYXNzLT5tZXRhZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfZWxlbWVudF9pbml0IChHc3RFbGVtZW50ICogZWxlbWVudCkKK3sKKyAgR1NUX1NUQVRFIChlbGVtZW50KSA9IEdTVF9TVEFURV9OVUxMOworICBHU1RfU1RBVEVfVEFSR0VUIChlbGVtZW50KSA9IEdTVF9TVEFURV9OVUxMOworICBHU1RfU1RBVEVfTkVYVCAoZWxlbWVudCkgPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HOworICBHU1RfU1RBVEVfUEVORElORyAoZWxlbWVudCkgPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HOworICBHU1RfU1RBVEVfUkVUVVJOIChlbGVtZW50KSA9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzsKKworICBnX3N0YXRpY19yZWNfbXV0ZXhfaW5pdCAoJmVsZW1lbnQtPnN0YXRlX2xvY2spOworICBlbGVtZW50LT5zdGF0ZV9jb25kID0gZ19jb25kX25ldyAoKTsKK30KKworLyoqCisgKiBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkOgorICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQgdG8gcmVsZWFzZSB0aGUgcmVxdWVzdCBwYWQgb2YuCisgKiBAcGFkOiB0aGUgI0dzdFBhZCB0byByZWxlYXNlLgorICoKKyAqIE1ha2VzIHRoZSBlbGVtZW50IGZyZWUgdGhlIHByZXZpb3VzbHkgcmVxdWVzdGVkIHBhZCBhcyBvYnRhaW5lZAorICogd2l0aCBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQoKS4KKyAqCisgKiBUaGlzIGRvZXMgbm90IHVucmVmIHRoZSBwYWQuIElmIHRoZSBwYWQgd2FzIGNyZWF0ZWQgYnkgdXNpbmcKKyAqIGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCgpLCBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkKCkgbmVlZHMgdG8gYmUKKyAqIGZvbGxvd2VkIGJ5IGdzdF9vYmplY3RfdW5yZWYoKSB0byBmcmVlIHRoZSBAcGFkLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK3ZvaWQKK2dzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RQYWQgKiBwYWQpCit7CisgIEdzdEVsZW1lbnRDbGFzcyAqb2NsYXNzOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCkpOworCisgIG9jbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAoZWxlbWVudCk7CisKKyAgLyogaWYgdGhlIGVsZW1lbnQgaW1wbGVtZW50cyBhIGN1c3RvbSByZWxlYXNlIGZ1bmN0aW9uIHdlIGNhbGwgdGhhdCwgZWxzZSB3ZQorICAgKiBzaW1wbHkgcmVtb3ZlIHRoZSBwYWQgZnJvbSB0aGUgZWxlbWVudCAqLworICBpZiAob2NsYXNzLT5yZWxlYXNlX3BhZCkKKyAgICAob2NsYXNzLT5yZWxlYXNlX3BhZCkgKGVsZW1lbnQsIHBhZCk7CisgIGVsc2UKKyAgICBnc3RfZWxlbWVudF9yZW1vdmVfcGFkIChlbGVtZW50LCBwYWQpOworfQorCisvKioKKyAqIGdzdF9lbGVtZW50X3JlcXVpcmVzX2Nsb2NrOgorICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQgdG8gcXVlcnkKKyAqCisgKiBRdWVyeSBpZiB0aGUgZWxlbWVudCByZXF1aXJlcyBhIGNsb2NrLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBlbGVtZW50IHJlcXVpcmVzIGEgY2xvY2sKKyAqCisgKiBNVCBzYWZlLgorICovCitnYm9vbGVhbgorZ3N0X2VsZW1lbnRfcmVxdWlyZXNfY2xvY2sgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQoreworICBnYm9vbGVhbiByZXN1bHQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSwgRkFMU0UpOworCisgIHJlc3VsdCA9IChHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKGVsZW1lbnQpLT5zZXRfY2xvY2sgIT0gTlVMTCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBnc3RfZWxlbWVudF9wcm92aWRlc19jbG9jazoKKyAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50IHRvIHF1ZXJ5CisgKgorICogUXVlcnkgaWYgdGhlIGVsZW1lbnQgcHJvdmlkZXMgYSBjbG9jay4gQSAjR3N0Q2xvY2sgcHJvdmlkZWQgYnkgYW4KKyAqIGVsZW1lbnQgY2FuIGJlIHVzZWQgYXMgdGhlIGdsb2JhbCAjR3N0Q2xvY2sgZm9yIHRoZSBwaXBlbGluZS4KKyAqIEFuIGVsZW1lbnQgdGhhdCBjYW4gcHJvdmlkZSBhIGNsb2NrIGlzIG9ubHkgcmVxdWlyZWQgdG8gZG8gc28gaW4gdGhlIFBBVVNFRAorICogc3RhdGUsIHRoaXMgbWVhbnMgd2hlbiBpdCBpcyBmdWxseSBuZWdvdGlhdGVkIGFuZCBoYXMgYWxsb2NhdGVkIHRoZSByZXNvdXJjZXMKKyAqIHRvIG9wZXJhdGUgdGhlIGNsb2NrLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBlbGVtZW50IHByb3ZpZGVzIGEgY2xvY2sKKyAqCisgKiBNVCBzYWZlLgorICovCitnYm9vbGVhbgorZ3N0X2VsZW1lbnRfcHJvdmlkZXNfY2xvY2sgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQoreworICBnYm9vbGVhbiByZXN1bHQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSwgRkFMU0UpOworCisgIHJlc3VsdCA9IChHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKGVsZW1lbnQpLT5wcm92aWRlX2Nsb2NrICE9IE5VTEwpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfcHJvdmlkZV9jbG9jazoKKyAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50IHRvIHF1ZXJ5CisgKgorICogR2V0IHRoZSBjbG9jayBwcm92aWRlZCBieSB0aGUgZ2l2ZW4gZWxlbWVudC4KKyAqIDxub3RlPkFuIGVsZW1lbnQgaXMgb25seSByZXF1aXJlZCB0byBwcm92aWRlIGEgY2xvY2sgaW4gdGhlIFBBVVNFRAorICogc3RhdGUuIFNvbWUgZWxlbWVudHMgY2FuIHByb3ZpZGUgYSBjbG9jayBpbiBvdGhlciBzdGF0ZXMuPC9ub3RlPgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIEdzdENsb2NrIHByb3ZpZGVkIGJ5IHRoZSBlbGVtZW50IG9yICVOVUxMCisgKiBpZiBubyBjbG9jayBjb3VsZCBiZSBwcm92aWRlZC4gIFVucmVmIGFmdGVyIHVzYWdlLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK0dzdENsb2NrICoKK2dzdF9lbGVtZW50X3Byb3ZpZGVfY2xvY2sgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQoreworICBHc3RDbG9jayAqcmVzdWx0ID0gTlVMTDsKKyAgR3N0RWxlbWVudENsYXNzICpvY2xhc3M7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSwgTlVMTCk7CisKKyAgb2NsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChlbGVtZW50KTsKKworICBpZiAob2NsYXNzLT5wcm92aWRlX2Nsb2NrKQorICAgIHJlc3VsdCA9IG9jbGFzcy0+cHJvdmlkZV9jbG9jayAoZWxlbWVudCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBnc3RfZWxlbWVudF9zZXRfY2xvY2s6CisgKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudCB0byBzZXQgdGhlIGNsb2NrIGZvci4KKyAqIEBjbG9jazogdGhlICNHc3RDbG9jayB0byBzZXQgZm9yIHRoZSBlbGVtZW50LgorICoKKyAqIFNldHMgdGhlIGNsb2NrIGZvciB0aGUgZWxlbWVudC4gVGhpcyBmdW5jdGlvbiBpbmNyZWFzZXMgdGhlCisgKiByZWZjb3VudCBvbiB0aGUgY2xvY2suIEFueSBwcmV2aW91c2x5IHNldCBjbG9jayBvbiB0aGUgb2JqZWN0CisgKiBpcyB1bnJlZmZlZC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgZWxlbWVudCBhY2NlcHRlZCB0aGUgY2xvY2suIEFuIGVsZW1lbnQgY2FuIHJlZnVzZSBhCisgKiBjbG9jayB3aGVuIGl0LCBmb3IgZXhhbXBsZSwgaXMgbm90IGFibGUgdG8gc2xhdmUgaXRzIGludGVybmFsIGNsb2NrIHRvIHRoZQorICogQGNsb2NrIG9yIHdoZW4gaXQgcmVxdWlyZXMgYSBzcGVjaWZpYyBjbG9jayB0byBvcGVyYXRlLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK2dib29sZWFuCitnc3RfZWxlbWVudF9zZXRfY2xvY2sgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RDbG9jayAqIGNsb2NrKQoreworICBHc3RFbGVtZW50Q2xhc3MgKm9jbGFzczsKKyAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKKyAgR3N0Q2xvY2sgKipjbG9ja19wOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGNsb2NrID09IE5VTEwgfHwgR1NUX0lTX0NMT0NLIChjbG9jayksIEZBTFNFKTsKKworICBvY2xhc3MgPSBHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKGVsZW1lbnQpOworCisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NMT0NLLCBlbGVtZW50LCAic2V0dGluZyBjbG9jayAlcCIsIGNsb2NrKTsKKworICBpZiAob2NsYXNzLT5zZXRfY2xvY2spCisgICAgcmVzID0gb2NsYXNzLT5zZXRfY2xvY2sgKGVsZW1lbnQsIGNsb2NrKTsKKworICBpZiAocmVzKSB7CisgICAgLyogb25seSB1cGRhdGUgdGhlIGNsb2NrIHBvaW50ZXIgaWYgdGhlIGVsZW1lbnQgYWNjZXB0ZWQgdGhlIGNsb2NrICovCisgICAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKKyAgICBjbG9ja19wID0gJmVsZW1lbnQtPmNsb2NrOworICAgIGdzdF9vYmplY3RfcmVwbGFjZSAoKEdzdE9iamVjdCAqKikgY2xvY2tfcCwgKEdzdE9iamVjdCAqKSBjbG9jayk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOworICB9CisgIHJldHVybiByZXM7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfZ2V0X2Nsb2NrOgorICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQgdG8gZ2V0IHRoZSBjbG9jayBvZi4KKyAqCisgKiBHZXRzIHRoZSBjdXJyZW50bHkgY29uZmlndXJlZCBjbG9jayBvZiB0aGUgZWxlbWVudC4gVGhpcyBpcyB0aGUgY2xvY2sgYXMgd2FzCisgKiBsYXN0IHNldCB3aXRoIGdzdF9lbGVtZW50X3NldF9jbG9jaygpLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RDbG9jayBvZiB0aGUgZWxlbWVudC4gdW5yZWYgYWZ0ZXIgdXNhZ2UuCisgKgorICogTVQgc2FmZS4KKyAqLworR3N0Q2xvY2sgKgorZ3N0X2VsZW1lbnRfZ2V0X2Nsb2NrIChHc3RFbGVtZW50ICogZWxlbWVudCkKK3sKKyAgR3N0Q2xvY2sgKnJlc3VsdDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBOVUxMKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOworICBpZiAoKHJlc3VsdCA9IGVsZW1lbnQtPmNsb2NrKSkKKyAgICBnc3Rfb2JqZWN0X3JlZiAocmVzdWx0KTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfc2V0X2Jhc2VfdGltZToKKyAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50LgorICogQHRpbWU6IHRoZSBiYXNlIHRpbWUgdG8gc2V0LgorICoKKyAqIFNldCB0aGUgYmFzZSB0aW1lIG9mIGFuIGVsZW1lbnQuIFNlZSBnc3RfZWxlbWVudF9nZXRfYmFzZV90aW1lKCkuCisgKgorICogTVQgc2FmZS4KKyAqLwordm9pZAorZ3N0X2VsZW1lbnRfc2V0X2Jhc2VfdGltZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdENsb2NrVGltZSB0aW1lKQoreworICBHc3RDbG9ja1RpbWUgb2xkOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKKyAgb2xkID0gZWxlbWVudC0+YmFzZV90aW1lOworICBlbGVtZW50LT5iYXNlX3RpbWUgPSB0aW1lOworICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7CisKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0xPQ0ssIGVsZW1lbnQsCisgICAgICAic2V0IGJhc2VfdGltZT0lIiBHU1RfVElNRV9GT1JNQVQgIiwgb2xkICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWUpLCBHU1RfVElNRV9BUkdTIChvbGQpKTsKK30KKworLyoqCisgKiBnc3RfZWxlbWVudF9nZXRfYmFzZV90aW1lOgorICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQuCisgKgorICogUmV0dXJucyB0aGUgYmFzZSB0aW1lIG9mIHRoZSBlbGVtZW50LiBUaGUgYmFzZSB0aW1lIGlzIHRoZQorICogYWJzb2x1dGUgdGltZSBvZiB0aGUgY2xvY2sgd2hlbiB0aGlzIGVsZW1lbnQgd2FzIGxhc3QgcHV0IHRvCisgKiBQTEFZSU5HLiBTdWJ0cmFjdGluZyB0aGUgYmFzZSB0aW1lIGZyb20gdGhlIGNsb2NrIHRpbWUgZ2l2ZXMKKyAqIHRoZSBydW5uaW5nIHRpbWUgb2YgdGhlIGVsZW1lbnQuCisgKgorICogUmV0dXJuczogdGhlIGJhc2UgdGltZSBvZiB0aGUgZWxlbWVudC4KKyAqCisgKiBNVCBzYWZlLgorICovCitHc3RDbG9ja1RpbWUKK2dzdF9lbGVtZW50X2dldF9iYXNlX3RpbWUgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQoreworICBHc3RDbG9ja1RpbWUgcmVzdWx0OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCksIEdTVF9DTE9DS19USU1FX05PTkUpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoZWxlbWVudCk7CisgIHJlc3VsdCA9IGVsZW1lbnQtPmJhc2VfdGltZTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfc2V0X3N0YXJ0X3RpbWU6CisgKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudC4KKyAqIEB0aW1lOiB0aGUgYmFzZSB0aW1lIHRvIHNldC4KKyAqCisgKiBTZXQgdGhlIHN0YXJ0IHRpbWUgb2YgYW4gZWxlbWVudC4gVGhlIHN0YXJ0IHRpbWUgb2YgdGhlIGVsZW1lbnQgaXMgdGhlCisgKiBydW5uaW5nIHRpbWUgb2YgdGhlIGVsZW1lbnQgd2hlbiBpdCBsYXN0IHdlbnQgdG8gdGhlIFBBVVNFRCBzdGF0ZS4gSW4gUkVBRFkKKyAqIG9yIGFmdGVyIGEgZmx1c2hpbmcgc2VlaywgaXQgaXMgc2V0IHRvIDAuCisgKgorICogVG9wbGV2ZWwgZWxlbWVudHMgbGlrZSAjR3N0UGlwZWxpbmUgd2lsbCBtYW5hZ2UgdGhlIHN0YXJ0X3RpbWUgYW5kCisgKiBiYXNlX3RpbWUgb24gaXRzIGNoaWxkcmVuLiBTZXR0aW5nIHRoZSBzdGFydF90aW1lIHRvICNHU1RfQ0xPQ0tfVElNRV9OT05FCisgKiBvbiBzdWNoIGEgdG9wbGV2ZWwgZWxlbWVudCB3aWxsIGRpc2FibGUgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgYmFzZV90aW1lIHRvCisgKiB0aGUgY2hpbGRyZW4gYW5kIGNhbiBiZSB1c2VmdWwgaWYgdGhlIGFwcGxpY2F0aW9uIG1hbmFnZXMgdGhlIGJhc2VfdGltZQorICogaXRzZWxmLCBmb3IgZXhhbXBsZSBpZiB5b3Ugd2FudCB0byBzeW5jaHJvbml6ZSBjYXB0dXJlIGZyb20gbXVsdGlwbGUKKyAqIHBpcGVsaW5lcywgYW5kIHlvdSBjYW4gYWxzbyBlbnN1cmUgdGhhdCB0aGUgcGlwZWxpbmVzIGhhdmUgdGhlIHNhbWUgY2xvY2suCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICovCit2b2lkCitnc3RfZWxlbWVudF9zZXRfc3RhcnRfdGltZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdENsb2NrVGltZSB0aW1lKQoreworICBHc3RDbG9ja1RpbWUgb2xkOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKKyAgb2xkID0gR1NUX0VMRU1FTlRfU1RBUlRfVElNRSAoZWxlbWVudCk7CisgIEdTVF9FTEVNRU5UX1NUQVJUX1RJTUUgKGVsZW1lbnQpID0gdGltZTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOworCisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NMT0NLLCBlbGVtZW50LAorICAgICAgInNldCBzdGFydF90aW1lPSUiIEdTVF9USU1FX0ZPUk1BVCAiLCBvbGQgJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgR1NUX1RJTUVfQVJHUyAodGltZSksIEdTVF9USU1FX0FSR1MgKG9sZCkpOworfQorCisvKioKKyAqIGdzdF9lbGVtZW50X2dldF9zdGFydF90aW1lOgorICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQuCisgKgorICogUmV0dXJucyB0aGUgc3RhcnQgdGltZSBvZiB0aGUgZWxlbWVudC4gVGhlIHN0YXJ0IHRpbWUgaXMgdGhlCisgKiBydW5uaW5nIHRpbWUgb2YgdGhlIGNsb2NrIHdoZW4gdGhpcyBlbGVtZW50IHdhcyBsYXN0IHB1dCB0byBQQVVTRUQuCisgKgorICogVXN1YWxseSB0aGUgc3RhcnRfdGltZSBpcyBtYW5hZ2VkIGJ5IGEgdG9wbGV2ZWwgZWxlbWVudCBzdWNoIGFzCisgKiAjR3N0UGlwZWxpbmUuCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgc3RhcnQgdGltZSBvZiB0aGUgZWxlbWVudC4KKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICovCitHc3RDbG9ja1RpbWUKK2dzdF9lbGVtZW50X2dldF9zdGFydF90aW1lIChHc3RFbGVtZW50ICogZWxlbWVudCkKK3sKKyAgR3N0Q2xvY2tUaW1lIHJlc3VsdDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOworICByZXN1bHQgPSBHU1RfRUxFTUVOVF9TVEFSVF9USU1FIChlbGVtZW50KTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfaXNfaW5kZXhhYmxlOgorICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQuCisgKgorICogUXVlcmllcyBpZiB0aGUgZWxlbWVudCBjYW4gYmUgaW5kZXhlZC4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBlbGVtZW50IGNhbiBiZSBpbmRleGVkLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK2dib29sZWFuCitnc3RfZWxlbWVudF9pc19pbmRleGFibGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQoreworICBnYm9vbGVhbiByZXN1bHQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSwgRkFMU0UpOworCisgIHJlc3VsdCA9IChHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKGVsZW1lbnQpLT5zZXRfaW5kZXggIT0gTlVMTCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBnc3RfZWxlbWVudF9zZXRfaW5kZXg6CisgKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudC4KKyAqIEBpbmRleDogKHRyYW5zZmVyIG5vbmUpOiBhICNHc3RJbmRleC4KKyAqCisgKiBTZXQgQGluZGV4IG9uIHRoZSBlbGVtZW50LiBUaGUgcmVmY291bnQgb2YgdGhlIGluZGV4CisgKiB3aWxsIGJlIGluY3JlYXNlZCwgYW55IHByZXZpb3VzbHkgc2V0IGluZGV4IGlzIHVucmVmZmVkLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK3ZvaWQKK2dzdF9lbGVtZW50X3NldF9pbmRleCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEluZGV4ICogaW5kZXgpCit7CisgIEdzdEVsZW1lbnRDbGFzcyAqb2NsYXNzOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKGluZGV4ID09IE5VTEwgfHwgR1NUX0lTX0lOREVYIChpbmRleCkpOworCisgIG9jbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAoZWxlbWVudCk7CisKKyAgaWYgKG9jbGFzcy0+c2V0X2luZGV4KQorICAgIG9jbGFzcy0+c2V0X2luZGV4IChlbGVtZW50LCBpbmRleCk7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfZ2V0X2luZGV4OgorICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQuCisgKgorICogR2V0cyB0aGUgaW5kZXggZnJvbSB0aGUgZWxlbWVudC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdEluZGV4IG9yICVOVUxMIHdoZW4gbm8gaW5kZXggd2FzIHNldCBvbiB0aGUKKyAqIGVsZW1lbnQuIHVucmVmIGFmdGVyIHVzYWdlLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK0dzdEluZGV4ICoKK2dzdF9lbGVtZW50X2dldF9pbmRleCAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCit7CisgIEdzdEVsZW1lbnRDbGFzcyAqb2NsYXNzOworICBHc3RJbmRleCAqcmVzdWx0ID0gTlVMTDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBOVUxMKTsKKworICBvY2xhc3MgPSBHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKGVsZW1lbnQpOworCisgIGlmIChvY2xhc3MtPmdldF9pbmRleCkKKyAgICByZXN1bHQgPSBvY2xhc3MtPmdldF9pbmRleCAoZWxlbWVudCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBnc3RfZWxlbWVudF9hZGRfcGFkOgorICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQgdG8gYWRkIHRoZSBwYWQgdG8uCisgKiBAcGFkOiAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0UGFkIHRvIGFkZCB0byB0aGUgZWxlbWVudC4KKyAqCisgKiBBZGRzIGEgcGFkIChsaW5rIHBvaW50KSB0byBAZWxlbWVudC4gQHBhZCdzIHBhcmVudCB3aWxsIGJlIHNldCB0byBAZWxlbWVudDsKKyAqIHNlZSBnc3Rfb2JqZWN0X3NldF9wYXJlbnQoKSBmb3IgcmVmY291bnRpbmcgaW5mb3JtYXRpb24uCisgKgorICogUGFkcyBhcmUgbm90IGF1dG9tYXRpY2FsbHkgYWN0aXZhdGVkIHNvIGVsZW1lbnRzIHNob3VsZCBwZXJmb3JtIHRoZSBuZWVkZWQKKyAqIHN0ZXBzIHRvIGFjdGl2YXRlIHRoZSBwYWQgaW4gY2FzZSB0aGlzIHBhZCBpcyBhZGRlZCBpbiB0aGUgUEFVU0VEIG9yIFBMQVlJTkcKKyAqIHN0YXRlLiBTZWUgZ3N0X3BhZF9zZXRfYWN0aXZlKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgYWN0aXZhdGluZyBwYWRzLgorICoKKyAqIFRoZSBwYWQgYW5kIHRoZSBlbGVtZW50IHNob3VsZCBiZSB1bmxvY2tlZCB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZW1pdCB0aGUgI0dzdEVsZW1lbnQ6OnBhZC1hZGRlZCBzaWduYWwgb24gdGhlIGVsZW1lbnQuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHBhZCBjb3VsZCBiZSBhZGRlZC4gVGhpcyBmdW5jdGlvbiBjYW4gZmFpbCB3aGVuCisgKiBhIHBhZCB3aXRoIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdGVkIG9yIHRoZSBwYWQgYWxyZWFkeSBoYWQgYW5vdGhlcgorICogcGFyZW50LgorICoKKyAqIE1UIHNhZmUuCisgKi8KK2dib29sZWFuCitnc3RfZWxlbWVudF9hZGRfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkICogcGFkKQoreworICBnY2hhciAqcGFkX25hbWU7CisgIGdib29sZWFuIGZsdXNoaW5nOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIEZBTFNFKTsKKworICAvKiBsb2NraW5nIHBhZCB0byBsb29rIGF0IHRoZSBuYW1lICovCisgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKKyAgcGFkX25hbWUgPSBnX3N0cmR1cCAoR1NUX1BBRF9OQU1FIChwYWQpKTsKKyAgR1NUX0NBVF9JTkZPX09CSkVDVCAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsIGVsZW1lbnQsICJhZGRpbmcgcGFkICclcyciLAorICAgICAgR1NUX1NUUl9OVUxMIChwYWRfbmFtZSkpOworICBmbHVzaGluZyA9IEdTVF9QQURfSVNfRkxVU0hJTkcgKHBhZCk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworCisgIC8qIHRoZW4gY2hlY2sgdG8gc2VlIGlmIHRoZXJlJ3MgYWxyZWFkeSBhIHBhZCBieSB0aGF0IG5hbWUgaGVyZSAqLworICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOworICBpZiAoR19VTkxJS0VMWSAoIWdzdF9vYmplY3RfY2hlY2tfdW5pcXVlbmVzcyAoZWxlbWVudC0+cGFkcywgcGFkX25hbWUpKSkKKyAgICBnb3RvIG5hbWVfZXhpc3RzOworCisgIC8qIHRyeSB0byBzZXQgdGhlIHBhZCdzIHBhcmVudCAqLworICBpZiAoR19VTkxJS0VMWSAoIWdzdF9vYmplY3Rfc2V0X3BhcmVudCAoR1NUX09CSkVDVF9DQVNUIChwYWQpLAorICAgICAgICAgICAgICBHU1RfT0JKRUNUX0NBU1QgKGVsZW1lbnQpKSkpCisgICAgZ290byBoYWRfcGFyZW50OworCisgIC8qIGNoZWNrIGZvciBmbHVzaGluZyBwYWRzICovCisgIGlmIChmbHVzaGluZyAmJiAoR1NUX1NUQVRFIChlbGVtZW50KSA+IEdTVF9TVEFURV9SRUFEWSB8fAorICAgICAgICAgIEdTVF9TVEFURV9ORVhUIChlbGVtZW50KSA9PSBHU1RfU1RBVEVfUEFVU0VEKSkgeworICAgIGdfd2FybmluZyAoImFkZGluZyBmbHVzaGluZyBwYWQgJyVzJyB0byBydW5uaW5nIGVsZW1lbnQgJyVzJywgeW91IG5lZWQgdG8gIgorICAgICAgICAidXNlIGdzdF9wYWRfc2V0X2FjdGl2ZShwYWQsVFJVRSkgYmVmb3JlIGFkZGluZyBpdC4iLAorICAgICAgICBHU1RfU1RSX05VTEwgKHBhZF9uYW1lKSwgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOworICAgIC8qIHVuc2V0IGZsdXNoaW5nICovCisgICAgR1NUX09CSkVDVF9MT0NLIChwYWQpOworICAgIEdTVF9QQURfVU5TRVRfRkxVU0hJTkcgKHBhZCk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisgIH0KKworICBnX2ZyZWUgKHBhZF9uYW1lKTsKKworICAvKiBhZGQgaXQgdG8gdGhlIGxpc3QgKi8KKyAgc3dpdGNoIChnc3RfcGFkX2dldF9kaXJlY3Rpb24gKHBhZCkpIHsKKyAgICBjYXNlIEdTVF9QQURfU1JDOgorICAgICAgZWxlbWVudC0+c3JjcGFkcyA9IGdfbGlzdF9wcmVwZW5kIChlbGVtZW50LT5zcmNwYWRzLCBwYWQpOworICAgICAgZWxlbWVudC0+bnVtc3JjcGFkcysrOworICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfUEFEX1NJTks6CisgICAgICBlbGVtZW50LT5zaW5rcGFkcyA9IGdfbGlzdF9wcmVwZW5kIChlbGVtZW50LT5zaW5rcGFkcywgcGFkKTsKKyAgICAgIGVsZW1lbnQtPm51bXNpbmtwYWRzKys7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgZ290byBub19kaXJlY3Rpb247CisgIH0KKyAgZWxlbWVudC0+cGFkcyA9IGdfbGlzdF9wcmVwZW5kIChlbGVtZW50LT5wYWRzLCBwYWQpOworICBlbGVtZW50LT5udW1wYWRzKys7CisgIGVsZW1lbnQtPnBhZHNfY29va2llKys7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKKworICAvKiBlbWl0IHRoZSBQQURfQURERUQgc2lnbmFsICovCisgIGdfc2lnbmFsX2VtaXQgKGVsZW1lbnQsIGdzdF9lbGVtZW50X3NpZ25hbHNbUEFEX0FEREVEXSwgMCwgcGFkKTsKKworICByZXR1cm4gVFJVRTsKKworICAvKiBFUlJPUiBjYXNlcyAqLworbmFtZV9leGlzdHM6CisgIHsKKyAgICBnX2NyaXRpY2FsICgiUGFkbmFtZSAlcyBpcyBub3QgdW5pcXVlIGluIGVsZW1lbnQgJXMsIG5vdCBhZGRpbmciLAorICAgICAgICBwYWRfbmFtZSwgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKKyAgICBnX2ZyZWUgKHBhZF9uYW1lKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK2hhZF9wYXJlbnQ6CisgIHsKKyAgICBnX2NyaXRpY2FsCisgICAgICAgICgiUGFkICVzIGFscmVhZHkgaGFzIHBhcmVudCB3aGVuIHRyeWluZyB0byBhZGQgdG8gZWxlbWVudCAlcyIsCisgICAgICAgIHBhZF9uYW1lLCBHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOworICAgIGdfZnJlZSAocGFkX25hbWUpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorbm9fZGlyZWN0aW9uOgorICB7CisgICAgR1NUX09CSkVDVF9MT0NLIChwYWQpOworICAgIGdfY3JpdGljYWwKKyAgICAgICAgKCJUcnlpbmcgdG8gYWRkIHBhZCAlcyB0byBlbGVtZW50ICVzLCBidXQgaXQgaGFzIG5vIGRpcmVjdGlvbiIsCisgICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAocGFkKSwgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworLyoqCisgKiBnc3RfZWxlbWVudF9yZW1vdmVfcGFkOgorICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQgdG8gcmVtb3ZlIHBhZCBmcm9tLgorICogQHBhZDogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI0dzdFBhZCB0byByZW1vdmUgZnJvbSB0aGUgZWxlbWVudC4KKyAqCisgKiBSZW1vdmVzIEBwYWQgZnJvbSBAZWxlbWVudC4gQHBhZCB3aWxsIGJlIGRlc3Ryb3llZCBpZiBpdCBoYXMgbm90IGJlZW4KKyAqIHJlZmVyZW5jZWQgZWxzZXdoZXJlIHVzaW5nIGdzdF9vYmplY3RfdW5wYXJlbnQoKS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgcGx1Z2luIGRldmVsb3BlcnMgYW5kIHNob3VsZCBub3QgYmUgdXNlZAorICogYnkgYXBwbGljYXRpb25zLiBQYWRzIHRoYXQgd2VyZSBkeW5hbWljYWxseSByZXF1ZXN0ZWQgZnJvbSBlbGVtZW50cworICogd2l0aCBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQoKSBzaG91bGQgYmUgcmVsZWFzZWQgd2l0aCB0aGUKKyAqIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQoKSBmdW5jdGlvbiBpbnN0ZWFkLgorICoKKyAqIFBhZHMgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IGRlYWN0aXZhdGVkIHNvIGVsZW1lbnRzIHNob3VsZCBwZXJmb3JtIHRoZSBuZWVkZWQKKyAqIHN0ZXBzIHRvIGRlYWN0aXZhdGUgdGhlIHBhZCBpbiBjYXNlIHRoaXMgcGFkIGlzIHJlbW92ZWQgaW4gdGhlIFBBVVNFRCBvcgorICogUExBWUlORyBzdGF0ZS4gU2VlIGdzdF9wYWRfc2V0X2FjdGl2ZSgpIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0CisgKiBkZWFjdGl2YXRpbmcgcGFkcy4KKyAqCisgKiBUaGUgcGFkIGFuZCB0aGUgZWxlbWVudCBzaG91bGQgYmUgdW5sb2NrZWQgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGVtaXQgdGhlICNHc3RFbGVtZW50OjpwYWQtcmVtb3ZlZCBzaWduYWwgb24gdGhlIGVsZW1lbnQuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHBhZCBjb3VsZCBiZSByZW1vdmVkLiBDYW4gcmV0dXJuICVGQUxTRSBpZiB0aGUKKyAqIHBhZCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIHByb3ZpZGVkIGVsZW1lbnQuCisgKgorICogTVQgc2FmZS4KKyAqLworZ2Jvb2xlYW4KK2dzdF9lbGVtZW50X3JlbW92ZV9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RQYWQgKiBwYWQpCit7CisgIEdzdFBhZCAqcGVlcjsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7CisKKyAgLyogbG9ja2luZyBwYWQgdG8gbG9vayBhdCB0aGUgbmFtZSBhbmQgcGFyZW50ICovCisgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKKyAgR1NUX0NBVF9JTkZPX09CSkVDVCAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsIGVsZW1lbnQsICJyZW1vdmluZyBwYWQgJyVzJyIsCisgICAgICBHU1RfU1RSX05VTEwgKEdTVF9QQURfTkFNRSAocGFkKSkpOworCisgIGlmIChHX1VOTElLRUxZIChHU1RfUEFEX1BBUkVOVCAocGFkKSAhPSBlbGVtZW50KSkKKyAgICBnb3RvIG5vdF9vdXJfcGFkOworICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKworICAvKiB1bmxpbmsgKi8KKyAgaWYgKChwZWVyID0gZ3N0X3BhZF9nZXRfcGVlciAocGFkKSkpIHsKKyAgICAvKiB3aW5kb3cgZm9yIE1UIHVuc2FmZW5lc3MsIHNvbWVvbmUgZWxzZSBjb3VsZCB1bmxpbmsgaGVyZQorICAgICAqIGFuZCB0aGVuIHdlIGNhbGwgdW5saW5rIHdpdGggd3JvbmcgcGFkcy4gVGhlIHVubGluaworICAgICAqIGZ1bmN0aW9uIHdvdWxkIGNhdGNoIHRoaXMgYW5kIHNhZmVseSByZXR1cm4gZmFpbGVkLiAqLworICAgIGlmIChHU1RfUEFEX0lTX1NSQyAocGFkKSkKKyAgICAgIGdzdF9wYWRfdW5saW5rIChwYWQsIHBlZXIpOworICAgIGVsc2UKKyAgICAgIGdzdF9wYWRfdW5saW5rIChwZWVyLCBwYWQpOworCisgICAgZ3N0X29iamVjdF91bnJlZiAocGVlcik7CisgIH0KKworICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOworICAvKiByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCAqLworICBzd2l0Y2ggKGdzdF9wYWRfZ2V0X2RpcmVjdGlvbiAocGFkKSkgeworICAgIGNhc2UgR1NUX1BBRF9TUkM6CisgICAgICBlbGVtZW50LT5zcmNwYWRzID0gZ19saXN0X3JlbW92ZSAoZWxlbWVudC0+c3JjcGFkcywgcGFkKTsKKyAgICAgIGVsZW1lbnQtPm51bXNyY3BhZHMtLTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1BBRF9TSU5LOgorICAgICAgZWxlbWVudC0+c2lua3BhZHMgPSBnX2xpc3RfcmVtb3ZlIChlbGVtZW50LT5zaW5rcGFkcywgcGFkKTsKKyAgICAgIGVsZW1lbnQtPm51bXNpbmtwYWRzLS07CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgZ19jcml0aWNhbCAoIlJlbW92aW5nIHBhZCB3aXRob3V0IGRpcmVjdGlvbj8/PyIpOworICAgICAgYnJlYWs7CisgIH0KKyAgZWxlbWVudC0+cGFkcyA9IGdfbGlzdF9yZW1vdmUgKGVsZW1lbnQtPnBhZHMsIHBhZCk7CisgIGVsZW1lbnQtPm51bXBhZHMtLTsKKyAgZWxlbWVudC0+cGFkc19jb29raWUrKzsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOworCisgIC8qIGVtaXQgdGhlIFBBRF9SRU1PVkVEIHNpZ25hbCBiZWZvcmUgdW5wYXJlbnRpbmcgYW5kIGxvc2luZyB0aGUgbGFzdCByZWYuICovCisgIGdfc2lnbmFsX2VtaXQgKGVsZW1lbnQsIGdzdF9lbGVtZW50X3NpZ25hbHNbUEFEX1JFTU9WRURdLCAwLCBwYWQpOworCisgIGdzdF9vYmplY3RfdW5wYXJlbnQgKEdTVF9PQkpFQ1RfQ0FTVCAocGFkKSk7CisKKyAgcmV0dXJuIFRSVUU7CisKKyAgLyogRVJST1JTICovCitub3Rfb3VyX3BhZDoKKyAgeworICAgIC8qIGxvY2tpbmcgb3JkZXIgaXMgZWxlbWVudCA+IHBhZCAqLworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworCisgICAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKKyAgICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7CisgICAgZ19jcml0aWNhbCAoIlBhZG5hbWUgJXM6JXMgZG9lcyBub3QgYmVsb25nIHRvIGVsZW1lbnQgJXMgd2hlbiByZW1vdmluZyIsCisgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSwgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworLyoqCisgKiBnc3RfZWxlbWVudF9ub19tb3JlX3BhZHM6CisgKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudAorICoKKyAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHNpZ25hbCB0aGF0IHRoZSBlbGVtZW50IGRvZXMgbm90IGV4cGVjdCBhbnkgbW9yZSBwYWRzCisgKiB0byBzaG93IHVwIGluIHRoZSBjdXJyZW50IHBpcGVsaW5lLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIKKyAqIHBhZHMgaGF2ZSBiZWVuIGFkZGVkIGJ5IHRoZSBlbGVtZW50IGl0c2VsZi4gRWxlbWVudHMgd2l0aCAjR1NUX1BBRF9TT01FVElNRVMKKyAqIHBhZCB0ZW1wbGF0ZXMgdXNlIHRoaXMgaW4gY29tYmluYXRpb24gd2l0aCBhdXRvcGx1Z2dlcnMgdG8gZmlndXJlIG91dCB0aGF0CisgKiB0aGUgZWxlbWVudCBpcyBkb25lIGluaXRpYWxpemluZyBpdHMgcGFkcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVtaXRzIHRoZSAjR3N0RWxlbWVudDo6bm8tbW9yZS1wYWRzIHNpZ25hbC4KKyAqCisgKiBNVCBzYWZlLgorICovCit2b2lkCitnc3RfZWxlbWVudF9ub19tb3JlX3BhZHMgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQoreworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCkpOworCisgIGdfc2lnbmFsX2VtaXQgKGVsZW1lbnQsIGdzdF9lbGVtZW50X3NpZ25hbHNbTk9fTU9SRV9QQURTXSwgMCk7Cit9CisKK3N0YXRpYyBnaW50CitwYWRfY29tcGFyZV9uYW1lIChHc3RQYWQgKiBwYWQxLCBjb25zdCBnY2hhciAqIG5hbWUpCit7CisgIGdpbnQgcmVzdWx0OworCisgIEdTVF9PQkpFQ1RfTE9DSyAocGFkMSk7CisgIHJlc3VsdCA9IHN0cmNtcCAoR1NUX1BBRF9OQU1FIChwYWQxKSwgbmFtZSk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQxKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkOgorICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQgdG8gZmluZCBhIHN0YXRpYyBwYWQgb2YuCisgKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIHN0YXRpYyAjR3N0UGFkIHRvIHJldHJpZXZlLgorICoKKyAqIFJldHJpZXZlcyBhIHBhZCBmcm9tIEBlbGVtZW50IGJ5IG5hbWUuIFRoaXMgdmVyc2lvbiBvbmx5IHJldHJpZXZlcworICogYWxyZWFkeS1leGlzdGluZyAoaS5lLiAnc3RhdGljJykgcGFkcy4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSByZXF1ZXN0ZWQgI0dzdFBhZCBpZiBmb3VuZCwgb3RoZXJ3aXNlICVOVUxMLgorICogICAgIHVucmVmIGFmdGVyIHVzYWdlLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK0dzdFBhZCAqCitnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIGNvbnN0IGdjaGFyICogbmFtZSkKK3sKKyAgR0xpc3QgKmZpbmQ7CisgIEdzdFBhZCAqcmVzdWx0ID0gTlVMTDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG5hbWUgIT0gTlVMTCwgTlVMTCk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKKyAgZmluZCA9CisgICAgICBnX2xpc3RfZmluZF9jdXN0b20gKGVsZW1lbnQtPnBhZHMsIG5hbWUsIChHQ29tcGFyZUZ1bmMpIHBhZF9jb21wYXJlX25hbWUpOworICBpZiAoZmluZCkgeworICAgIHJlc3VsdCA9IEdTVF9QQURfQ0FTVCAoZmluZC0+ZGF0YSk7CisgICAgZ3N0X29iamVjdF9yZWYgKHJlc3VsdCk7CisgIH0KKworICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfRUxFTUVOVF9QQURTLCAibm8gc3VjaCBwYWQgJyVzJyBpbiBlbGVtZW50IFwiJXNcIiIsCisgICAgICAgIG5hbWUsIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKKyAgfSBlbHNlIHsKKyAgICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfRUxFTUVOVF9QQURTLCAiZm91bmQgcGFkICVzOiVzIiwKKyAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCksIG5hbWUpOworICB9CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgR3N0UGFkICoKK19nc3RfZWxlbWVudF9yZXF1ZXN0X3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFBhZFRlbXBsYXRlICogdGVtcGwsCisgICAgY29uc3QgZ2NoYXIgKiBuYW1lLCBjb25zdCBHc3RDYXBzICogY2FwcykKK3sKKyAgR3N0UGFkICpuZXdwYWQgPSBOVUxMOworICBHc3RFbGVtZW50Q2xhc3MgKm9jbGFzczsKKworICBvY2xhc3MgPSBHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKGVsZW1lbnQpOworCisjaWZuZGVmIEdfRElTQUJMRV9DSEVDS1MKKyAgLyogU29tZSBzYW5pdHkgY2hlY2tpbmcgaGVyZSAqLworICBpZiAobmFtZSkgeworICAgIEdzdFBhZCAqcGFkOworCisgICAgLyogSXMgdGhpcyB0aGUgdGVtcGxhdGUgbmFtZT8gKi8KKyAgICBpZiAoc3Ryc3RyIChuYW1lLCAiJSIpIHx8ICFzdHJjaHIgKHRlbXBsLT5uYW1lX3RlbXBsYXRlLCAnJScpKSB7CisgICAgICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RyY21wIChuYW1lLCB0ZW1wbC0+bmFtZV90ZW1wbGF0ZSkgPT0gMCwgTlVMTCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGNvbnN0IGdjaGFyICpzdHIsICpkYXRhOworICAgICAgZ2NoYXIgKmVuZHB0cjsKKworICAgICAgLyogT3RoZXJ3aXNlIGNoZWNrIGlmIGl0J3MgYSB2YWxpZCBuYW1lIGZvciB0aGUgbmFtZSB0ZW1wbGF0ZSAqLworICAgICAgc3RyID0gc3RyY2hyICh0ZW1wbC0+bmFtZV90ZW1wbGF0ZSwgJyUnKTsKKyAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHIgIT0gTlVMTCwgTlVMTCk7CisgICAgICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RybmNtcCAodGVtcGwtPm5hbWVfdGVtcGxhdGUsIG5hbWUsCisgICAgICAgICAgICAgIHN0ciAtIHRlbXBsLT5uYW1lX3RlbXBsYXRlKSA9PSAwLCBOVUxMKTsKKyAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJsZW4gKG5hbWUpID4gc3RyIC0gdGVtcGwtPm5hbWVfdGVtcGxhdGUsIE5VTEwpOworCisgICAgICBkYXRhID0gbmFtZSArIChzdHIgLSB0ZW1wbC0+bmFtZV90ZW1wbGF0ZSk7CisKKyAgICAgIC8qIENhbiBlaXRoZXIgYmUgJXMgb3IgJWQgb3IgJXUsIGRvIHNhbml0eSBjaGVja2luZyBmb3IgJWQgKi8KKyAgICAgIGlmICgqKHN0ciArIDEpID09ICdkJykgeworICAgICAgICBnaW50NjQgdG1wOworCisgICAgICAgIC8qIGl0J3MgYW4gaW50ICovCisgICAgICAgIHRtcCA9IGdfYXNjaWlfc3RydG9sbCAoZGF0YSwgJmVuZHB0ciwgMTApOworICAgICAgICBnX3JldHVybl92YWxfaWZfZmFpbCAodG1wID49IEdfTUlOSU5UICYmIHRtcCA8PSBHX01BWElOVAorICAgICAgICAgICAgJiYgKmVuZHB0ciA9PSAnXDAnLCBOVUxMKTsKKyAgICAgIH0gZWxzZSBpZiAoKihzdHIgKyAxKSA9PSAndScpIHsKKyAgICAgICAgZ3VpbnQ2NCB0bXA7CisKKyAgICAgICAgLyogaXQncyBhbiBpbnQgKi8KKyAgICAgICAgdG1wID0gZ19hc2NpaV9zdHJ0b3VsbCAoZGF0YSwgJmVuZHB0ciwgMTApOworICAgICAgICBnX3JldHVybl92YWxfaWZfZmFpbCAodG1wIDw9IEdfTUFYVUlOVCAmJiAqZW5kcHRyID09ICdcMCcsIE5VTEwpOworICAgICAgfQorICAgIH0KKworICAgIHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChlbGVtZW50LCBuYW1lKTsKKyAgICBpZiAocGFkKSB7CisgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOworICAgICAgLyogRklYTUUgMC4xMTogQ2hhbmdlIHRoaXMgdG8gZ19yZXR1cm5fdmFsX2lmX2ZhaWwoKSAqLworICAgICAgZ19jcml0aWNhbCAoIkVsZW1lbnQgJXMgYWxyZWFkeSBoYXMgYSBwYWQgbmFtZWQgJXMsIHRoZSBiZWhhdmlvdXIgb2YgIgorICAgICAgICAgICIgZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkKCkgZm9yIGV4aXN0aW5nIHBhZHMgaXMgdW5kZWZpbmVkISIsCisgICAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCksIG5hbWUpOworICAgIH0KKyAgfQorI2VuZGlmCisKKyAgaWYgKG9jbGFzcy0+cmVxdWVzdF9uZXdfcGFkKQorICAgIG5ld3BhZCA9IChvY2xhc3MtPnJlcXVlc3RfbmV3X3BhZCkgKGVsZW1lbnQsIHRlbXBsLCBuYW1lLCBjYXBzKTsKKworICBpZiAobmV3cGFkKQorICAgIGdzdF9vYmplY3RfcmVmIChuZXdwYWQpOworCisgIHJldHVybiBuZXdwYWQ7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkOgorICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQgdG8gZmluZCBhIHJlcXVlc3QgcGFkIG9mLgorICogQG5hbWU6IHRoZSBuYW1lIG9mIHRoZSByZXF1ZXN0ICNHc3RQYWQgdG8gcmV0cmlldmUuCisgKgorICogUmV0cmlldmVzIGEgcGFkIGZyb20gdGhlIGVsZW1lbnQgYnkgbmFtZSAoZS5nLiAic3JjX1wlZCIpLiBUaGlzIHZlcnNpb24gb25seQorICogcmV0cmlldmVzIHJlcXVlc3QgcGFkcy4gVGhlIHBhZCBzaG91bGQgYmUgcmVsZWFzZWQgd2l0aAorICogZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCgpLgorICoKKyAqIFRoaXMgbWV0aG9kIGlzIHNsb3cgYW5kIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLiBOZXcgY29kZSBzaG91bGQKKyAqIHVzZSBnc3RfZWxlbWVudF9yZXF1ZXN0X3BhZCgpIHdpdGggdGhlIHJlcXVlc3RlZCB0ZW1wbGF0ZS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHJlcXVlc3RlZCAjR3N0UGFkIGlmIGZvdW5kLCBvdGhlcndpc2UgJU5VTEwuCisgKiAgICAgUmVsZWFzZSBhZnRlciB1c2FnZS4KKyAqLworR3N0UGFkICoKK2dzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIGNvbnN0IGdjaGFyICogbmFtZSkKK3sKKyAgR3N0UGFkVGVtcGxhdGUgKnRlbXBsID0gTlVMTDsKKyAgR3N0UGFkICpwYWQ7CisgIGNvbnN0IGdjaGFyICpyZXFfbmFtZSA9IE5VTEw7CisgIGdib29sZWFuIHRlbXBsX2ZvdW5kID0gRkFMU0U7CisgIEdMaXN0ICpsaXN0OworICBjb25zdCBnY2hhciAqZGF0YTsKKyAgZ2NoYXIgKnN0ciwgKmVuZHB0ciA9IE5VTEw7CisgIEdzdEVsZW1lbnRDbGFzcyAqY2xhc3M7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYW1lICE9IE5VTEwsIE5VTEwpOworCisgIGNsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChlbGVtZW50KTsKKworICAvKiBpZiB0aGUgbmFtZSBjb250YWlucyBhICUsIHdlIGFzc3VtZSBpdCdzIHRoZSBjb21wbGV0ZSB0ZW1wbGF0ZSBuYW1lLiBHZXQKKyAgICogdGhlIHRlbXBsYXRlIGFuZCB0cnkgdG8gZ2V0IGEgcGFkICovCisgIGlmIChzdHJzdHIgKG5hbWUsICIlIikpIHsKKyAgICB0ZW1wbCA9IGdzdF9lbGVtZW50X2NsYXNzX2dldF9yZXF1ZXN0X3BhZF90ZW1wbGF0ZSAoY2xhc3MsIG5hbWUpOworICAgIHJlcV9uYW1lID0gTlVMTDsKKyAgICBpZiAodGVtcGwpCisgICAgICB0ZW1wbF9mb3VuZCA9IFRSVUU7CisgIH0gZWxzZSB7CisgICAgLyogdGhlcmUgaXMgbm8gJSBpbiB0aGUgbmFtZSwgdHJ5IHRvIGZpbmQgYSBtYXRjaGluZyB0ZW1wbGF0ZSAqLworICAgIGxpc3QgPSBjbGFzcy0+cGFkdGVtcGxhdGVzOworICAgIHdoaWxlICghdGVtcGxfZm91bmQgJiYgbGlzdCkgeworICAgICAgdGVtcGwgPSAoR3N0UGFkVGVtcGxhdGUgKikgbGlzdC0+ZGF0YTsKKyAgICAgIGlmICh0ZW1wbC0+cHJlc2VuY2UgPT0gR1NUX1BBRF9SRVFVRVNUKSB7CisgICAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfUEFEUywgImNvbXBhcmluZyAlcyB0byAlcyIsIG5hbWUsCisgICAgICAgICAgICB0ZW1wbC0+bmFtZV90ZW1wbGF0ZSk7CisgICAgICAgIC8qIHNlZSBpZiB3ZSBmaW5kIGFuIGV4YWN0IG1hdGNoICovCisgICAgICAgIGlmIChzdHJjbXAgKG5hbWUsIHRlbXBsLT5uYW1lX3RlbXBsYXRlKSA9PSAwKSB7CisgICAgICAgICAgdGVtcGxfZm91bmQgPSBUUlVFOworICAgICAgICAgIHJlcV9uYW1lID0gbmFtZTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAvKiBCZWNhdXNlIG9mIHNhbml0eSBjaGVja3MgaW4gZ3N0X3BhZF90ZW1wbGF0ZV9uZXcoKSwgd2Uga25vdyB0aGF0ICVzCisgICAgICAgICAgIGFuZCAlZCBhbmQgJXUsIG9jY3VycmluZyBhdCB0aGUgZW5kIG9mIHRoZSBuYW1lX3RlbXBsYXRlLCBhcmUgdGhlIG9ubHkKKyAgICAgICAgICAgcG9zc2liaWxpdGllcy4gKi8KKyAgICAgICAgZWxzZSBpZiAoKHN0ciA9IHN0cmNociAodGVtcGwtPm5hbWVfdGVtcGxhdGUsICclJykpCisgICAgICAgICAgICAmJiBzdHJuY21wICh0ZW1wbC0+bmFtZV90ZW1wbGF0ZSwgbmFtZSwKKyAgICAgICAgICAgICAgICBzdHIgLSB0ZW1wbC0+bmFtZV90ZW1wbGF0ZSkgPT0gMAorICAgICAgICAgICAgJiYgc3RybGVuIChuYW1lKSA+IHN0ciAtIHRlbXBsLT5uYW1lX3RlbXBsYXRlKSB7CisgICAgICAgICAgZGF0YSA9IG5hbWUgKyAoc3RyIC0gdGVtcGwtPm5hbWVfdGVtcGxhdGUpOworICAgICAgICAgIGlmICgqKHN0ciArIDEpID09ICdkJykgeworICAgICAgICAgICAgZ2xvbmcgdG1wOworCisgICAgICAgICAgICAvKiBpdCdzIGFuIGludCAqLworICAgICAgICAgICAgdG1wID0gc3RydG9sIChkYXRhLCAmZW5kcHRyLCAxMCk7CisgICAgICAgICAgICBpZiAodG1wICE9IEdfTUlOTE9ORyAmJiB0bXAgIT0gR19NQVhMT05HICYmIGVuZHB0ciAmJgorICAgICAgICAgICAgICAgICplbmRwdHIgPT0gJ1wwJykgeworICAgICAgICAgICAgICB0ZW1wbF9mb3VuZCA9IFRSVUU7CisgICAgICAgICAgICAgIHJlcV9uYW1lID0gbmFtZTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIGlmICgqKHN0ciArIDEpID09ICd1JykgeworICAgICAgICAgICAgZ3Vsb25nIHRtcDsKKworICAgICAgICAgICAgLyogaXQncyBhbiBpbnQgKi8KKyAgICAgICAgICAgIHRtcCA9IHN0cnRvdWwgKGRhdGEsICZlbmRwdHIsIDEwKTsKKyAgICAgICAgICAgIGlmICh0bXAgIT0gR19NQVhVTE9ORyAmJiBlbmRwdHIgJiYgKmVuZHB0ciA9PSAnXDAnKSB7CisgICAgICAgICAgICAgIHRlbXBsX2ZvdW5kID0gVFJVRTsKKyAgICAgICAgICAgICAgcmVxX25hbWUgPSBuYW1lOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogaXQncyBhIHN0cmluZyAqLworICAgICAgICAgICAgdGVtcGxfZm91bmQgPSBUUlVFOworICAgICAgICAgICAgcmVxX25hbWUgPSBuYW1lOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBsaXN0ID0gbGlzdC0+bmV4dDsKKyAgICB9CisgIH0KKworICBpZiAoIXRlbXBsX2ZvdW5kKQorICAgIHJldHVybiBOVUxMOworCisgIHBhZCA9IF9nc3RfZWxlbWVudF9yZXF1ZXN0X3BhZCAoZWxlbWVudCwgdGVtcGwsIHJlcV9uYW1lLCBOVUxMKTsKKworICByZXR1cm4gcGFkOworfQorCisvKioKKyAqIGdzdF9lbGVtZW50X3JlcXVlc3RfcGFkOgorICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQgdG8gZmluZCBhIHJlcXVlc3QgcGFkIG9mLgorICogQHRlbXBsOiBhICNHc3RQYWRUZW1wbGF0ZSBvZiB3aGljaCB3ZSB3YW50IGEgcGFkIG9mLgorICogQG5hbWU6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IHRoZSBuYW1lIG9mIHRoZSByZXF1ZXN0ICNHc3RQYWQKKyAqIHRvIHJldHJpZXZlLiBDYW4gYmUgJU5VTEwuCisgKiBAY2FwczogKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25lKTogdGhlIGNhcHMgb2YgdGhlIHBhZCB3ZSB3YW50IHRvCisgKiByZXF1ZXN0LiBDYW4gYmUgJU5VTEwuCisgKgorICogUmV0cmlldmVzIGEgcmVxdWVzdCBwYWQgZnJvbSB0aGUgZWxlbWVudCBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIHRlbXBsYXRlLgorICogUGFkIHRlbXBsYXRlcyBjYW4gYmUgbG9va2VkIHVwIHVzaW5nCisgKiBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9zdGF0aWNfcGFkX3RlbXBsYXRlcygpLgorICoKKyAqIElmIHRoZSBAY2FwcyBhcmUgc3BlY2lmaWVkIGFuZCB0aGUgZWxlbWVudCBpbXBsZW1lbnRzIHRoZXcgbmV3CisgKiByZXF1ZXN0X25ld19wYWRfZnVsbCB2aXJ0dWFsIG1ldGhvZCwgdGhlIGVsZW1lbnQgd2lsbCB1c2UgdGhlbSB0byBzZWxlY3QKKyAqIHdoaWNoIHBhZCB0byBjcmVhdGUuCisgKgorICogVGhlIHBhZCBzaG91bGQgYmUgcmVsZWFzZWQgd2l0aCBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkKCkuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiByZXF1ZXN0ZWQgI0dzdFBhZCBpZiBmb3VuZCwgb3RoZXJ3aXNlICVOVUxMLgorICogICAgIFJlbGVhc2UgYWZ0ZXIgdXNhZ2UuCisgKgorICogU2luY2U6IDAuMTAuMzIKKyAqLworR3N0UGFkICoKK2dzdF9lbGVtZW50X3JlcXVlc3RfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwKKyAgICBHc3RQYWRUZW1wbGF0ZSAqIHRlbXBsLCBjb25zdCBnY2hhciAqIG5hbWUsIGNvbnN0IEdzdENhcHMgKiBjYXBzKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRlbXBsICE9IE5VTEwsIE5VTEwpOworCisgIHJldHVybiBfZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQgKGVsZW1lbnQsIHRlbXBsLCBuYW1lLCBjYXBzKTsKK30KKworc3RhdGljIEdzdEl0ZXJhdG9yICoKK2dzdF9lbGVtZW50X2l0ZXJhdGVfcGFkX2xpc3QgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHTGlzdCAqKiBwYWRsaXN0KQoreworICBHc3RJdGVyYXRvciAqcmVzdWx0OworCisgIEdTVF9PQkpFQ1RfTE9DSyAoZWxlbWVudCk7CisgIHJlc3VsdCA9IGdzdF9pdGVyYXRvcl9uZXdfbGlzdCAoR1NUX1RZUEVfUEFELAorICAgICAgR1NUX09CSkVDVF9HRVRfTE9DSyAoZWxlbWVudCksCisgICAgICAmZWxlbWVudC0+cGFkc19jb29raWUsIHBhZGxpc3QsIChHT2JqZWN0ICopIGVsZW1lbnQsIE5VTEwpOworICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBnc3RfZWxlbWVudF9pdGVyYXRlX3BhZHM6CisgKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudCB0byBpdGVyYXRlIHBhZHMgb2YuCisgKgorICogUmV0cmlldmVzIGFuIGl0ZXJhdG9yIG9mIEBlbGVtZW50J3MgcGFkcy4gVGhlIGl0ZXJhdG9yIHNob3VsZAorICogYmUgZnJlZWQgYWZ0ZXIgdXNhZ2UuIEFsc28gbW9yZSBzcGVjaWFsaXplZCBpdGVyYXRvcnMgZXhpc3RzIHN1Y2ggYXMKKyAqIGdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMoKSBvciBnc3RfZWxlbWVudF9pdGVyYXRlX3NpbmtfcGFkcygpLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RJdGVyYXRvciBvZiAjR3N0UGFkLiBVbnJlZiBlYWNoIHBhZAorICogICAgIGFmdGVyIHVzZS4KKyAqCisgKiBNVCBzYWZlLgorICovCitHc3RJdGVyYXRvciAqCitnc3RfZWxlbWVudF9pdGVyYXRlX3BhZHMgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBOVUxMKTsKKworICByZXR1cm4gZ3N0X2VsZW1lbnRfaXRlcmF0ZV9wYWRfbGlzdCAoZWxlbWVudCwgJmVsZW1lbnQtPnBhZHMpOworfQorCisvKioKKyAqIGdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHM6CisgKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudC4KKyAqCisgKiBSZXRyaWV2ZXMgYW4gaXRlcmF0b3Igb2YgQGVsZW1lbnQncyBzb3VyY2UgcGFkcy4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0SXRlcmF0b3Igb2YgI0dzdFBhZC4gVW5yZWYgZWFjaCBwYWQKKyAqICAgICBhZnRlciB1c2UuCisgKgorICogTVQgc2FmZS4KKyAqLworR3N0SXRlcmF0b3IgKgorZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zcmNfcGFkcyAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCksIE5VTEwpOworCisgIHJldHVybiBnc3RfZWxlbWVudF9pdGVyYXRlX3BhZF9saXN0IChlbGVtZW50LCAmZWxlbWVudC0+c3JjcGFkcyk7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zaW5rX3BhZHM6CisgKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudC4KKyAqCisgKiBSZXRyaWV2ZXMgYW4gaXRlcmF0b3Igb2YgQGVsZW1lbnQncyBzaW5rIHBhZHMuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdEl0ZXJhdG9yIG9mICNHc3RQYWQuIFVucmVmIGVhY2ggcGFkCisgKiAgICAgYWZ0ZXIgdXNlLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK0dzdEl0ZXJhdG9yICoKK2dzdF9lbGVtZW50X2l0ZXJhdGVfc2lua19wYWRzIChHc3RFbGVtZW50ICogZWxlbWVudCkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSwgTlVMTCk7CisKKyAgcmV0dXJuIGdzdF9lbGVtZW50X2l0ZXJhdGVfcGFkX2xpc3QgKGVsZW1lbnQsICZlbGVtZW50LT5zaW5rcGFkcyk7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZToKKyAqIEBrbGFzczogdGhlICNHc3RFbGVtZW50Q2xhc3MgdG8gYWRkIHRoZSBwYWQgdGVtcGxhdGUgdG8uCisgKiBAdGVtcGw6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0UGFkVGVtcGxhdGUgdG8gYWRkIHRvIHRoZSBlbGVtZW50IGNsYXNzLgorICoKKyAqIEFkZHMgYSBwYWR0ZW1wbGF0ZSB0byBhbiBlbGVtZW50IGNsYXNzLiBUaGlzIGlzIG1haW5seSB1c2VkIGluIHRoZSBfY2xhc3NfaW5pdAorICogZnVuY3Rpb25zIG9mIGNsYXNzZXMuIElmIGEgcGFkIHRlbXBsYXRlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhbiBhbHJlYWR5CisgKiBleGlzdGluZyBvbmUgaXMgYWRkZWQgdGhlIG9sZCBvbmUgaXMgcmVwbGFjZWQgYnkgdGhlIG5ldyBvbmUuCisgKgorICovCit2b2lkCitnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlIChHc3RFbGVtZW50Q2xhc3MgKiBrbGFzcywKKyAgICBHc3RQYWRUZW1wbGF0ZSAqIHRlbXBsKQoreworICBHTGlzdCAqdGVtcGxhdGVfbGlzdCA9IGtsYXNzLT5wYWR0ZW1wbGF0ZXM7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19QQURfVEVNUExBVEUgKHRlbXBsKSk7CisKKyAgLyogSWYgd2UgYWxyZWFkeSBoYXZlIGEgcGFkIHRlbXBsYXRlIHdpdGggdGhlIHNhbWUgbmFtZSByZXBsYWNlIHRoZQorICAgKiBvbGQgb25lLiAqLworICB3aGlsZSAodGVtcGxhdGVfbGlzdCkgeworICAgIEdzdFBhZFRlbXBsYXRlICpwYWR0ZW1wbCA9IChHc3RQYWRUZW1wbGF0ZSAqKSB0ZW1wbGF0ZV9saXN0LT5kYXRhOworCisgICAgLyogRm91bmQgcGFkIHdpdGggdGhlIHNhbWUgbmFtZSwgcmVwbGFjZSBhbmQgcmV0dXJuICovCisgICAgaWYgKHN0cmNtcCAodGVtcGwtPm5hbWVfdGVtcGxhdGUsIHBhZHRlbXBsLT5uYW1lX3RlbXBsYXRlKSA9PSAwKSB7CisgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWR0ZW1wbCk7CisgICAgICB0ZW1wbGF0ZV9saXN0LT5kYXRhID0gdGVtcGw7CisgICAgICByZXR1cm47CisgICAgfQorICAgIHRlbXBsYXRlX2xpc3QgPSBnX2xpc3RfbmV4dCAodGVtcGxhdGVfbGlzdCk7CisgIH0KKworICAvKiBUYWtlIG93bmVyc2hpcCBvZiB0aGUgZmxvYXRpbmcgcmVmICovCisgIGdfb2JqZWN0X3JlZl9zaW5rICh0ZW1wbCk7CisKKyAga2xhc3MtPnBhZHRlbXBsYXRlcyA9IGdfbGlzdF9hcHBlbmQgKGtsYXNzLT5wYWR0ZW1wbGF0ZXMsIHRlbXBsKTsKKyAga2xhc3MtPm51bXBhZHRlbXBsYXRlcysrOworfQorCisvKioKKyAqIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9tZXRhZGF0YToKKyAqIEBrbGFzczogY2xhc3MgdG8gc2V0IG1ldGFkYXRhIGZvcgorICogQGtleTogdGhlIGtleSB0byBzZXQKKyAqIEB2YWx1ZTogdGhlIHZhbHVlIHRvIHNldAorICoKKyAqIFNldCBAa2V5IHdpdGggQHZhbHVlIGFzIG1ldGFkYXRhIGluIEBrbGFzcy4KKyAqLwordm9pZAorZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX21ldGFkYXRhIChHc3RFbGVtZW50Q2xhc3MgKiBrbGFzcywKKyAgICBjb25zdCBnY2hhciAqIGtleSwgY29uc3QgZ2NoYXIgKiB2YWx1ZSkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKGtleSAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAodmFsdWUgIT0gTlVMTCk7CisKKyAgZ3N0X3N0cnVjdHVyZV9zZXQgKChHc3RTdHJ1Y3R1cmUgKikga2xhc3MtPm1ldGFkYXRhLAorICAgICAga2V5LCBHX1RZUEVfU1RSSU5HLCB2YWx1ZSwgTlVMTCk7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X21ldGFkYXRhOgorICogQGtsYXNzOiBjbGFzcyB0byBzZXQgbWV0YWRhdGEgZm9yCisgKiBAbG9uZ25hbWU6IFRoZSBsb25nIEVuZ2xpc2ggbmFtZSBvZiB0aGUgZWxlbWVudC4gRS5nLiAiRmlsZSBTaW5rIgorICogQGNsYXNzaWZpY2F0aW9uOiBTdHJpbmcgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiBlbGVtZW50LCBhcyBhbiB1bm9yZGVyZWQgbGlzdAorICogc2VwYXJhdGVkIHdpdGggc2xhc2hlcyAoJy8nKS4gU2VlIGRyYWZ0LWtsYXNzLnR4dCBvZiB0aGUgZGVzaWduIGRvY3MKKyAqIGZvciBtb3JlIGRldGFpbHMgYW5kIGNvbW1vbiB0eXBlcy4gRS5nOiAiU2luay9GaWxlIgorICogQGRlc2NyaXB0aW9uOiBTZW50ZW5jZSBkZXNjcmliaW5nIHRoZSBwdXJwb3NlIG9mIHRoZSBlbGVtZW50LgorICogRS5nOiAiV3JpdGUgc3RyZWFtIHRvIGEgZmlsZSIKKyAqIEBhdXRob3I6IE5hbWUgYW5kIGNvbnRhY3QgZGV0YWlscyBvZiB0aGUgYXV0aG9yKHMpLiBVc2UgXG4gdG8gc2VwYXJhdGUKKyAqIG11bHRpcGxlIGF1dGhvciBtZXRhZGF0YS4gRS5nOiAiSm9lIEJsb2dncyAmbHQ7am9lLmJsb2dzIGF0IGZvby5jb20mZ3Q7IgorICoKKyAqIFNldHMgdGhlIGRldGFpbGVkIGluZm9ybWF0aW9uIGZvciBhICNHc3RFbGVtZW50Q2xhc3MuCisgKiA8bm90ZT5UaGlzIGZ1bmN0aW9uIGlzIGZvciB1c2UgaW4gX2NsYXNzX2luaXQgZnVuY3Rpb25zIG9ubHkuPC9ub3RlPgorICovCit2b2lkCitnc3RfZWxlbWVudF9jbGFzc19zZXRfbWV0YWRhdGEgKEdzdEVsZW1lbnRDbGFzcyAqIGtsYXNzLAorICAgIGNvbnN0IGdjaGFyICogbG9uZ25hbWUsIGNvbnN0IGdjaGFyICogY2xhc3NpZmljYXRpb24sCisgICAgY29uc3QgZ2NoYXIgKiBkZXNjcmlwdGlvbiwgY29uc3QgZ2NoYXIgKiBhdXRob3IpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UX0NMQVNTIChrbGFzcykpOworCisgIGdzdF9zdHJ1Y3R1cmVfc2V0ICgoR3N0U3RydWN0dXJlICopIGtsYXNzLT5tZXRhZGF0YSwKKyAgICAgIEdTVF9FTEVNRU5UX01FVEFEQVRBX0xPTkdOQU1FLCBHX1RZUEVfU1RSSU5HLCBsb25nbmFtZSwKKyAgICAgIEdTVF9FTEVNRU5UX01FVEFEQVRBX0tMQVNTLCBHX1RZUEVfU1RSSU5HLCBjbGFzc2lmaWNhdGlvbiwKKyAgICAgIEdTVF9FTEVNRU5UX01FVEFEQVRBX0RFU0NSSVBUSU9OLCBHX1RZUEVfU1RSSU5HLCBkZXNjcmlwdGlvbiwKKyAgICAgIEdTVF9FTEVNRU5UX01FVEFEQVRBX0FVVEhPUiwgR19UWVBFX1NUUklORywgYXV0aG9yLCBOVUxMKTsKK30KKworLyoqCisgKiBnc3RfZWxlbWVudF9jbGFzc19nZXRfbWV0YWRhdGE6CisgKiBAa2xhc3M6IGNsYXNzIHRvIGdldCBtZXRhZGF0YSBmb3IKKyAqIEBrZXk6IHRoZSBrZXkgdG8gZ2V0CisgKgorICogR2V0IG1ldGFkYXRhIHdpdGggQGtleSBpbiBAa2xhc3MuCisgKgorICogUmV0dXJuczogdGhlIG1ldGFkYXRhIGZvciBAa2V5LgorICovCitjb25zdCBnY2hhciAqCitnc3RfZWxlbWVudF9jbGFzc19nZXRfbWV0YWRhdGEgKEdzdEVsZW1lbnRDbGFzcyAqIGtsYXNzLCBjb25zdCBnY2hhciAqIGtleSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UX0NMQVNTIChrbGFzcyksIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoa2V5ICE9IE5VTEwsIE5VTEwpOworCisgIHJldHVybiBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKChHc3RTdHJ1Y3R1cmUgKikga2xhc3MtPm1ldGFkYXRhLCBrZXkpOworfQorCisvKioKKyAqIGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGVfbGlzdDoKKyAqIEBlbGVtZW50X2NsYXNzOiBhICNHc3RFbGVtZW50Q2xhc3MgdG8gZ2V0IHBhZCB0ZW1wbGF0ZXMgb2YuCisgKgorICogUmV0cmlldmVzIGEgbGlzdCBvZiB0aGUgcGFkIHRlbXBsYXRlcyBhc3NvY2lhdGVkIHdpdGggQGVsZW1lbnRfY2xhc3MuIFRoZQorICogbGlzdCBtdXN0IG5vdCBiZSBtb2RpZmllZCBieSB0aGUgY2FsbGluZyBjb2RlLgorICogPG5vdGU+SWYgeW91IHVzZSB0aGlzIGZ1bmN0aW9uIGluIHRoZSAjR0luc3RhbmNlSW5pdEZ1bmMgb2YgYW4gb2JqZWN0IGNsYXNzCisgKiB0aGF0IGhhcyBzdWJjbGFzc2VzLCBtYWtlIHN1cmUgdG8gcGFzcyB0aGUgZ19jbGFzcyBwYXJhbWV0ZXIgb2YgdGhlCisgKiAjR0luc3RhbmNlSW5pdEZ1bmMgaGVyZS48L25vdGU+CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpIChlbGVtZW50LXR5cGUgR3N0LlBhZFRlbXBsYXRlKTogdGhlICNHTGlzdCBvZgorICogICAgIHBhZCB0ZW1wbGF0ZXMuCisgKi8KK0dMaXN0ICoKK2dzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGVfbGlzdCAoR3N0RWxlbWVudENsYXNzICogZWxlbWVudF9jbGFzcykKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UX0NMQVNTIChlbGVtZW50X2NsYXNzKSwgTlVMTCk7CisKKyAgcmV0dXJuIGVsZW1lbnRfY2xhc3MtPnBhZHRlbXBsYXRlczsKK30KKworLyoqCisgKiBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlOgorICogQGVsZW1lbnRfY2xhc3M6IGEgI0dzdEVsZW1lbnRDbGFzcyB0byBnZXQgdGhlIHBhZCB0ZW1wbGF0ZSBvZi4KKyAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgI0dzdFBhZFRlbXBsYXRlIHRvIGdldC4KKyAqCisgKiBSZXRyaWV2ZXMgYSBwYWR0ZW1wbGF0ZSBmcm9tIEBlbGVtZW50X2NsYXNzIHdpdGggdGhlIGdpdmVuIG5hbWUuCisgKiA8bm90ZT5JZiB5b3UgdXNlIHRoaXMgZnVuY3Rpb24gaW4gdGhlICNHSW5zdGFuY2VJbml0RnVuYyBvZiBhbiBvYmplY3QgY2xhc3MKKyAqIHRoYXQgaGFzIHN1YmNsYXNzZXMsIG1ha2Ugc3VyZSB0byBwYXNzIHRoZSBnX2NsYXNzIHBhcmFtZXRlciBvZiB0aGUKKyAqICNHSW5zdGFuY2VJbml0RnVuYyBoZXJlLjwvbm90ZT4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjR3N0UGFkVGVtcGxhdGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgb3IgJU5VTEwKKyAqICAgICBpZiBub25lIHdhcyBmb3VuZC4gTm8gdW5yZWZlcmVuY2luZyBpcyBuZWNlc3NhcnkuCisgKi8KK0dzdFBhZFRlbXBsYXRlICoKK2dzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKEdzdEVsZW1lbnRDbGFzcyAqCisgICAgZWxlbWVudF9jbGFzcywgY29uc3QgZ2NoYXIgKiBuYW1lKQoreworICBHTGlzdCAqcGFkbGlzdDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlRfQ0xBU1MgKGVsZW1lbnRfY2xhc3MpLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG5hbWUgIT0gTlVMTCwgTlVMTCk7CisKKyAgcGFkbGlzdCA9IGVsZW1lbnRfY2xhc3MtPnBhZHRlbXBsYXRlczsKKworICB3aGlsZSAocGFkbGlzdCkgeworICAgIEdzdFBhZFRlbXBsYXRlICpwYWR0ZW1wbCA9IChHc3RQYWRUZW1wbGF0ZSAqKSBwYWRsaXN0LT5kYXRhOworCisgICAgaWYgKHN0cmNtcCAocGFkdGVtcGwtPm5hbWVfdGVtcGxhdGUsIG5hbWUpID09IDApCisgICAgICByZXR1cm4gcGFkdGVtcGw7CisKKyAgICBwYWRsaXN0ID0gZ19saXN0X25leHQgKHBhZGxpc3QpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBHc3RQYWRUZW1wbGF0ZSAqCitnc3RfZWxlbWVudF9jbGFzc19nZXRfcmVxdWVzdF9wYWRfdGVtcGxhdGUgKEdzdEVsZW1lbnRDbGFzcyAqCisgICAgZWxlbWVudF9jbGFzcywgY29uc3QgZ2NoYXIgKiBuYW1lKQoreworICBHc3RQYWRUZW1wbGF0ZSAqdG1wbDsKKworICB0bXBsID0gZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgbmFtZSk7CisgIGlmICh0bXBsICE9IE5VTEwgJiYgdG1wbC0+cHJlc2VuY2UgPT0gR1NUX1BBRF9SRVFVRVNUKQorICAgIHJldHVybiB0bXBsOworCisgIHJldHVybiBOVUxMOworfQorCisvKiBnZXQgYSByYW5kb20gcGFkIG9uIGVsZW1lbnQgb2YgdGhlIGdpdmVuIGRpcmVjdGlvbi4KKyAqIFRoZSBwYWQgaXMgcmFuZG9tIGluIGEgc2Vuc2UgdGhhdCBpdCBpcyB0aGUgZmlyc3QgcGFkIHRoYXQgaXMgKG9wdGlvbmFseSkgbGlua2VkLgorICovCitzdGF0aWMgR3N0UGFkICoKK2dzdF9lbGVtZW50X2dldF9yYW5kb21fcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwKKyAgICBnYm9vbGVhbiBuZWVkX2xpbmtlZCwgR3N0UGFkRGlyZWN0aW9uIGRpcikKK3sKKyAgR3N0UGFkICpyZXN1bHQgPSBOVUxMOworICBHTGlzdCAqcGFkczsKKworICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0VMRU1FTlRfUEFEUywgImdldHRpbmcgYSByYW5kb20gcGFkIik7CisKKyAgc3dpdGNoIChkaXIpIHsKKyAgICBjYXNlIEdTVF9QQURfU1JDOgorICAgICAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKKyAgICAgIHBhZHMgPSBlbGVtZW50LT5zcmNwYWRzOworICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfUEFEX1NJTks6CisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOworICAgICAgcGFkcyA9IGVsZW1lbnQtPnNpbmtwYWRzOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGdvdG8gd3JvbmdfZGlyZWN0aW9uOworICB9CisgIGZvciAoOyBwYWRzOyBwYWRzID0gZ19saXN0X25leHQgKHBhZHMpKSB7CisgICAgR3N0UGFkICpwYWQgPSBHU1RfUEFEX0NBU1QgKHBhZHMtPmRhdGEpOworCisgICAgR1NUX09CSkVDVF9MT0NLIChwYWQpOworICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfRUxFTUVOVF9QQURTLCAiY2hlY2tpbmcgcGFkICVzOiVzIiwKKyAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKKworICAgIGlmIChuZWVkX2xpbmtlZCAmJiAhR1NUX1BBRF9JU19MSU5LRUQgKHBhZCkpIHsKKyAgICAgIC8qIGlmIHdlIHJlcXVpcmUgYSBsaW5rZWQgcGFkLCBhbmQgaXQgaXMgbm90IGxpbmtlZCwgY29udGludWUgdGhlCisgICAgICAgKiBzZWFyY2ggKi8KKyAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfRUxFTUVOVF9QQURTLCAicGFkICVzOiVzIGlzIG5vdCBsaW5rZWQiLAorICAgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7CisgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0gZWxzZSB7CisgICAgICAvKiBmb3VuZCBhIHBhZCwgc3RvcCBzZWFyY2ggKi8KKyAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfRUxFTUVOVF9QQURTLCAiZm91bmQgcGFkICVzOiVzIiwKKyAgICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisgICAgICByZXN1bHQgPSBwYWQ7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgaWYgKHJlc3VsdCkKKyAgICBnc3Rfb2JqZWN0X3JlZiAocmVzdWx0KTsKKworICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKKworICAvKiBFUlJPUiBoYW5kbGluZyAqLword3JvbmdfZGlyZWN0aW9uOgorICB7CisgICAgZ193YXJuaW5nICgidW5rbm93biBwYWQgZGlyZWN0aW9uICVkIiwgZGlyKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9lbGVtZW50X2RlZmF1bHRfc2VuZF9ldmVudCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEV2ZW50ICogZXZlbnQpCit7CisgIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOworICBHc3RQYWQgKnBhZDsKKworICBwYWQgPSBHU1RfRVZFTlRfSVNfRE9XTlNUUkVBTSAoZXZlbnQpID8KKyAgICAgIGdzdF9lbGVtZW50X2dldF9yYW5kb21fcGFkIChlbGVtZW50LCBUUlVFLCBHU1RfUEFEX1NSQykgOgorICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3JhbmRvbV9wYWQgKGVsZW1lbnQsIFRSVUUsIEdTVF9QQURfU0lOSyk7CisKKyAgaWYgKHBhZCkgeworICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfRUxFTUVOVF9QQURTLAorICAgICAgICAicHVzaGluZyAlcyBldmVudCB0byByYW5kb20gJXMgcGFkICVzOiVzIiwKKyAgICAgICAgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpLAorICAgICAgICAoR1NUX1BBRF9ESVJFQ1RJT04gKHBhZCkgPT0gR1NUX1BBRF9TUkMgPyAic3JjIiA6ICJzaW5rIiksCisgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7CisKKyAgICByZXN1bHQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZXZlbnQpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7CisgIH0gZWxzZSB7CisgICAgR1NUX0NBVF9JTkZPIChHU1RfQ0FUX0VMRU1FTlRfUEFEUywgImNhbid0IHNlbmQgJXMgZXZlbnQgb24gZWxlbWVudCAlcyIsCisgICAgICAgIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSwgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOworICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfc2VuZF9ldmVudDoKKyAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50IHRvIHNlbmQgdGhlIGV2ZW50IHRvLgorICogQGV2ZW50OiAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0RXZlbnQgdG8gc2VuZCB0byB0aGUgZWxlbWVudC4KKyAqCisgKiBTZW5kcyBhbiBldmVudCB0byBhbiBlbGVtZW50LiBJZiB0aGUgZWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBhbgorICogZXZlbnQgaGFuZGxlciwgdGhlIGV2ZW50IHdpbGwgYmUgcHVzaGVkIG9uIGEgcmFuZG9tIGxpbmtlZCBzaW5rIHBhZCBmb3IKKyAqIHVwc3RyZWFtIGV2ZW50cyBvciBhIHJhbmRvbSBsaW5rZWQgc291cmNlIHBhZCBmb3IgZG93bnN0cmVhbSBldmVudHMuCisgKgorICogVGhpcyBmdW5jdGlvbiB0YWtlcyBvd2Vyc2hpcCBvZiB0aGUgcHJvdmlkZWQgZXZlbnQgc28geW91IHNob3VsZAorICogZ3N0X2V2ZW50X3JlZigpIGl0IGlmIHlvdSB3YW50IHRvIHJldXNlIHRoZSBldmVudCBhZnRlciB0aGlzIGNhbGwuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGV2ZW50IHdhcyBoYW5kbGVkLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK2dib29sZWFuCitnc3RfZWxlbWVudF9zZW5kX2V2ZW50IChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0RXZlbnQgKiBldmVudCkKK3sKKyAgR3N0RWxlbWVudENsYXNzICpvY2xhc3M7CisgIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGV2ZW50ICE9IE5VTEwsIEZBTFNFKTsKKworICBvY2xhc3MgPSBHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKGVsZW1lbnQpOworCisgIEdTVF9TVEFURV9MT0NLIChlbGVtZW50KTsKKyAgaWYgKG9jbGFzcy0+c2VuZF9ldmVudCkgeworICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfRUxFTUVOVF9QQURTLCAic2VuZCAlcyBldmVudCBvbiBlbGVtZW50ICVzIiwKKyAgICAgICAgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpLCBHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSk7CisgICAgcmVzdWx0ID0gb2NsYXNzLT5zZW5kX2V2ZW50IChlbGVtZW50LCBldmVudCk7CisgIH0gZWxzZSB7CisgICAgcmVzdWx0ID0gZ3N0X2VsZW1lbnRfZGVmYXVsdF9zZW5kX2V2ZW50IChlbGVtZW50LCBldmVudCk7CisgIH0KKyAgR1NUX1NUQVRFX1VOTE9DSyAoZWxlbWVudCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBnc3RfZWxlbWVudF9zZWVrOgorICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQgdG8gc2VuZCB0aGUgZXZlbnQgdG8uCisgKiBAcmF0ZTogVGhlIG5ldyBwbGF5YmFjayByYXRlCisgKiBAZm9ybWF0OiBUaGUgZm9ybWF0IG9mIHRoZSBzZWVrIHZhbHVlcworICogQGZsYWdzOiBUaGUgb3B0aW9uYWwgc2VlayBmbGFncy4KKyAqIEBjdXJfdHlwZTogVGhlIHR5cGUgYW5kIGZsYWdzIGZvciB0aGUgbmV3IGN1cnJlbnQgcG9zaXRpb24KKyAqIEBjdXI6IFRoZSB2YWx1ZSBvZiB0aGUgbmV3IGN1cnJlbnQgcG9zaXRpb24KKyAqIEBzdG9wX3R5cGU6IFRoZSB0eXBlIGFuZCBmbGFncyBmb3IgdGhlIG5ldyBzdG9wIHBvc2l0aW9uCisgKiBAc3RvcDogVGhlIHZhbHVlIG9mIHRoZSBuZXcgc3RvcCBwb3NpdGlvbgorICoKKyAqIFNlbmRzIGEgc2VlayBldmVudCB0byBhbiBlbGVtZW50LiBTZWUgZ3N0X2V2ZW50X25ld19zZWVrKCkgZm9yIHRoZSBkZXRhaWxzIG9mCisgKiB0aGUgcGFyYW1ldGVycy4gVGhlIHNlZWsgZXZlbnQgaXMgc2VudCB0byB0aGUgZWxlbWVudCB1c2luZworICogZ3N0X2VsZW1lbnRfc2VuZF9ldmVudCgpLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBldmVudCB3YXMgaGFuZGxlZC4KKyAqCisgKiBNVCBzYWZlLgorICovCitnYm9vbGVhbgorZ3N0X2VsZW1lbnRfc2VlayAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIGdkb3VibGUgcmF0ZSwgR3N0Rm9ybWF0IGZvcm1hdCwKKyAgICBHc3RTZWVrRmxhZ3MgZmxhZ3MsIEdzdFNlZWtUeXBlIGN1cl90eXBlLCBnaW50NjQgY3VyLAorICAgIEdzdFNlZWtUeXBlIHN0b3BfdHlwZSwgZ2ludDY0IHN0b3ApCit7CisgIEdzdEV2ZW50ICpldmVudDsKKyAgZ2Jvb2xlYW4gcmVzdWx0OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCksIEZBTFNFKTsKKworICBldmVudCA9CisgICAgICBnc3RfZXZlbnRfbmV3X3NlZWsgKHJhdGUsIGZvcm1hdCwgZmxhZ3MsIGN1cl90eXBlLCBjdXIsIHN0b3BfdHlwZSwgc3RvcCk7CisgIHJlc3VsdCA9IGdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKGVsZW1lbnQsIGV2ZW50KTsKKworICByZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGdzdF9lbGVtZW50X2dldF9xdWVyeV90eXBlczoKKyAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50IHRvIHF1ZXJ5CisgKgorICogR2V0IGFuIGFycmF5IG9mIHF1ZXJ5IHR5cGVzIGZyb20gdGhlIGVsZW1lbnQuCisgKiBJZiB0aGUgZWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBhIHF1ZXJ5IHR5cGVzIGZ1bmN0aW9uLAorICogdGhlIHF1ZXJ5IHdpbGwgYmUgZm9yd2FyZGVkIHRvIHRoZSBwZWVyIG9mIGEgcmFuZG9tIGxpbmtlZCBzaW5rIHBhZC4KKyAqCisgKiBSZXR1cm5zOiBBbiBhcnJheSBvZiAjR3N0UXVlcnlUeXBlIGVsZW1lbnRzIHRoYXQgc2hvdWxkIG5vdAorICogYmUgZnJlZWQgb3IgbW9kaWZpZWQuCisgKgorICogTVQgc2FmZS4KKyAqLworY29uc3QgR3N0UXVlcnlUeXBlICoKK2dzdF9lbGVtZW50X2dldF9xdWVyeV90eXBlcyAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCit7CisgIEdzdEVsZW1lbnRDbGFzcyAqb2NsYXNzOworICBjb25zdCBHc3RRdWVyeVR5cGUgKnJlc3VsdCA9IE5VTEw7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSwgTlVMTCk7CisKKyAgb2NsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChlbGVtZW50KTsKKworICBpZiAob2NsYXNzLT5nZXRfcXVlcnlfdHlwZXMpIHsKKyAgICByZXN1bHQgPSBvY2xhc3MtPmdldF9xdWVyeV90eXBlcyAoZWxlbWVudCk7CisgIH0gZWxzZSB7CisgICAgR3N0UGFkICpwYWQgPSBnc3RfZWxlbWVudF9nZXRfcmFuZG9tX3BhZCAoZWxlbWVudCwgVFJVRSwgR1NUX1BBRF9TSU5LKTsKKworICAgIGlmIChwYWQpIHsKKyAgICAgIEdzdFBhZCAqcGVlciA9IGdzdF9wYWRfZ2V0X3BlZXIgKHBhZCk7CisKKyAgICAgIGlmIChwZWVyKSB7CisgICAgICAgIHJlc3VsdCA9IGdzdF9wYWRfZ2V0X3F1ZXJ5X3R5cGVzIChwZWVyKTsKKworICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwZWVyKTsKKyAgICAgIH0KKyAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7CisgICAgfQorICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2VsZW1lbnRfZGVmYXVsdF9xdWVyeSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFF1ZXJ5ICogcXVlcnkpCit7CisgIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOworICBHc3RQYWQgKnBhZDsKKworICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfcmFuZG9tX3BhZCAoZWxlbWVudCwgRkFMU0UsIEdTVF9QQURfU1JDKTsKKyAgaWYgKHBhZCkgeworICAgIHJlc3VsdCA9IGdzdF9wYWRfcXVlcnkgKHBhZCwgcXVlcnkpOworCisgICAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKKyAgfSBlbHNlIHsKKyAgICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfcmFuZG9tX3BhZCAoZWxlbWVudCwgVFJVRSwgR1NUX1BBRF9TSU5LKTsKKyAgICBpZiAocGFkKSB7CisgICAgICBHc3RQYWQgKnBlZXIgPSBnc3RfcGFkX2dldF9wZWVyIChwYWQpOworCisgICAgICBpZiAocGVlcikgeworICAgICAgICByZXN1bHQgPSBnc3RfcGFkX3F1ZXJ5IChwZWVyLCBxdWVyeSk7CisKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZiAocGVlcik7CisgICAgICB9CisgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOworICAgIH0KKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGdzdF9lbGVtZW50X3F1ZXJ5OgorICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQgdG8gcGVyZm9ybSB0aGUgcXVlcnkgb24uCisgKiBAcXVlcnk6ICh0cmFuc2ZlciBub25lKTogdGhlICNHc3RRdWVyeS4KKyAqCisgKiBQZXJmb3JtcyBhIHF1ZXJ5IG9uIHRoZSBnaXZlbiBlbGVtZW50LgorICoKKyAqIEZvciBlbGVtZW50cyB0aGF0IGRvbid0IGltcGxlbWVudCBhIHF1ZXJ5IGhhbmRsZXIsIHRoaXMgZnVuY3Rpb24KKyAqIGZvcndhcmRzIHRoZSBxdWVyeSB0byBhIHJhbmRvbSBzcmNwYWQgb3IgdG8gdGhlIHBlZXIgb2YgYQorICogcmFuZG9tIGxpbmtlZCBzaW5rcGFkIG9mIHRoaXMgZWxlbWVudC4KKyAqCisgKiBQbGVhc2Ugbm90ZSB0aGF0IHNvbWUgcXVlcmllcyBtaWdodCBuZWVkIGEgcnVubmluZyBwaXBlbGluZSB0byB3b3JrLgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIHF1ZXJ5IGNvdWxkIGJlIHBlcmZvcm1lZC4KKyAqCisgKiBNVCBzYWZlLgorICovCitnYm9vbGVhbgorZ3N0X2VsZW1lbnRfcXVlcnkgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KQoreworICBHc3RFbGVtZW50Q2xhc3MgKm9jbGFzczsKKyAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAocXVlcnkgIT0gTlVMTCwgRkFMU0UpOworCisgIG9jbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAoZWxlbWVudCk7CisKKyAgaWYgKG9jbGFzcy0+cXVlcnkpIHsKKyAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0VMRU1FTlRfUEFEUywgInNlbmQgcXVlcnkgb24gZWxlbWVudCAlcyIsCisgICAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKKyAgICByZXN1bHQgPSBvY2xhc3MtPnF1ZXJ5IChlbGVtZW50LCBxdWVyeSk7CisgIH0gZWxzZSB7CisgICAgcmVzdWx0ID0gZ3N0X2VsZW1lbnRfZGVmYXVsdF9xdWVyeSAoZWxlbWVudCwgcXVlcnkpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlOgorICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQgcG9zdGluZyB0aGUgbWVzc2FnZQorICogQG1lc3NhZ2U6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0TWVzc2FnZSB0byBwb3N0CisgKgorICogUG9zdCBhIG1lc3NhZ2Ugb24gdGhlIGVsZW1lbnQncyAjR3N0QnVzLiBUaGlzIGZ1bmN0aW9uIHRha2VzIG93bmVyc2hpcCBvZiB0aGUKKyAqIG1lc3NhZ2U7IGlmIHlvdSB3YW50IHRvIGFjY2VzcyB0aGUgbWVzc2FnZSBhZnRlciB0aGlzIGNhbGwsIHlvdSBzaG91bGQgYWRkIGFuCisgKiBhZGRpdGlvbmFsIHJlZmVyZW5jZSBiZWZvcmUgY2FsbGluZy4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgbWVzc2FnZSB3YXMgc3VjY2Vzc2Z1bGx5IHBvc3RlZC4gVGhlIGZ1bmN0aW9uIHJldHVybnMKKyAqICVGQUxTRSBpZiB0aGUgZWxlbWVudCBkaWQgbm90IGhhdmUgYSBidXMuCisgKgorICogTVQgc2FmZS4KKyAqLworZ2Jvb2xlYW4KK2dzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdE1lc3NhZ2UgKiBtZXNzYWdlKQoreworICBHc3RCdXMgKmJ1czsKKyAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAobWVzc2FnZSAhPSBOVUxMLCBGQUxTRSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKKyAgYnVzID0gZWxlbWVudC0+YnVzOworCisgIGlmIChHX1VOTElLRUxZIChidXMgPT0gTlVMTCkpCisgICAgZ290byBub19idXM7CisKKyAgZ3N0X29iamVjdF9yZWYgKGJ1cyk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKKworICAvKiB3ZSByZWxlYXNlIHRoZSBlbGVtZW50IGxvY2sgd2hlbiBwb3N0aW5nIHRoZSBtZXNzYWdlIHNvIHRoYXQgYW55CisgICAqIChzeW5jaHJvbm91cykgbWVzc2FnZSBoYW5kbGVycyBjYW4gb3BlcmF0ZSBvbiB0aGUgZWxlbWVudCAqLworICByZXN1bHQgPSBnc3RfYnVzX3Bvc3QgKGJ1cywgbWVzc2FnZSk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7CisKKyAgcmV0dXJuIHJlc3VsdDsKKworICAvKiBFUlJPUlMgKi8KK25vX2J1czoKKyAgeworICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX01FU1NBR0UsIGVsZW1lbnQsCisgICAgICAgICJub3QgcG9zdGluZyBtZXNzYWdlICVwOiBubyBidXMiLCBtZXNzYWdlKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7CisgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCisvKioKKyAqIF9nc3RfZWxlbWVudF9lcnJvcl9wcmludGY6CisgKiBAZm9ybWF0OiB0aGUgcHJpbnRmLWxpa2UgZm9ybWF0IHRvIHVzZSwgb3IgJU5VTEwKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBnc3RfZWxlbWVudF9lcnJvcigpIG1hY3JvLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXdseSBhbGxvY2F0ZWQgc3RyaW5nLCBvciAlTlVMTCBpZiB0aGUgZm9ybWF0CisgKiAgICAgd2FzICVOVUxMIG9yICIiCisgKgorICogTVQgc2FmZS4KKyAqLworZ2NoYXIgKgorX2dzdF9lbGVtZW50X2Vycm9yX3ByaW50ZiAoY29uc3QgZ2NoYXIgKiBmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdzOworICBnY2hhciAqYnVmZmVyOworCisgIGlmIChmb3JtYXQgPT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsKKyAgaWYgKGZvcm1hdFswXSA9PSAwKQorICAgIHJldHVybiBOVUxMOworCisgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworICBidWZmZXIgPSBnX3N0cmR1cF92cHJpbnRmIChmb3JtYXQsIGFyZ3MpOworICB2YV9lbmQgKGFyZ3MpOworICByZXR1cm4gYnVmZmVyOworfQorCisvKioKKyAqIGdzdF9lbGVtZW50X21lc3NhZ2VfZnVsbDoKKyAqIEBlbGVtZW50OiAgYSAjR3N0RWxlbWVudCB0byBzZW5kIG1lc3NhZ2UgZnJvbQorICogQHR5cGU6ICAgICB0aGUgI0dzdE1lc3NhZ2VUeXBlCisgKiBAZG9tYWluOiAgIHRoZSBHU3RyZWFtZXIgR0Vycm9yIGRvbWFpbiB0aGlzIG1lc3NhZ2UgYmVsb25ncyB0bworICogQGNvZGU6ICAgICB0aGUgR0Vycm9yIGNvZGUgYmVsb25naW5nIHRvIHRoZSBkb21haW4KKyAqIEB0ZXh0OiAgICAgKGFsbG93LW5vbmUpICh0cmFuc2ZlciBmdWxsKTogYW4gYWxsb2NhdGVkIHRleHQgc3RyaW5nIHRvIGJlIHVzZWQKKyAqICAgICAgICAgICAgYXMgYSByZXBsYWNlbWVudCBmb3IgdGhlIGRlZmF1bHQgbWVzc2FnZSBjb25uZWN0ZWQgdG8gY29kZSwKKyAqICAgICAgICAgICAgb3IgJU5VTEwKKyAqIEBkZWJ1ZzogICAgKGFsbG93LW5vbmUpICh0cmFuc2ZlciBmdWxsKTogYW4gYWxsb2NhdGVkIGRlYnVnIG1lc3NhZ2UgdG8gYmUKKyAqICAgICAgICAgICAgdXNlZCBhcyBhIHJlcGxhY2VtZW50IGZvciB0aGUgZGVmYXVsdCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24sCisgKiAgICAgICAgICAgIG9yICVOVUxMCisgKiBAZmlsZTogICAgIHRoZSBzb3VyY2UgY29kZSBmaWxlIHdoZXJlIHRoZSBlcnJvciB3YXMgZ2VuZXJhdGVkCisgKiBAZnVuY3Rpb246IHRoZSBzb3VyY2UgY29kZSBmdW5jdGlvbiB3aGVyZSB0aGUgZXJyb3Igd2FzIGdlbmVyYXRlZAorICogQGxpbmU6ICAgICB0aGUgc291cmNlIGNvZGUgbGluZSB3aGVyZSB0aGUgZXJyb3Igd2FzIGdlbmVyYXRlZAorICoKKyAqIFBvc3QgYW4gZXJyb3IsIHdhcm5pbmcgb3IgaW5mbyBtZXNzYWdlIG9uIHRoZSBidXMgZnJvbSBpbnNpZGUgYW4gZWxlbWVudC4KKyAqCisgKiBAdHlwZSBtdXN0IGJlIG9mICNHU1RfTUVTU0FHRV9FUlJPUiwgI0dTVF9NRVNTQUdFX1dBUk5JTkcgb3IKKyAqICNHU1RfTUVTU0FHRV9JTkZPLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK3ZvaWQgZ3N0X2VsZW1lbnRfbWVzc2FnZV9mdWxsCisgICAgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RNZXNzYWdlVHlwZSB0eXBlLAorICAgIEdRdWFyayBkb21haW4sIGdpbnQgY29kZSwgZ2NoYXIgKiB0ZXh0LAorICAgIGdjaGFyICogZGVidWcsIGNvbnN0IGdjaGFyICogZmlsZSwgY29uc3QgZ2NoYXIgKiBmdW5jdGlvbiwgZ2ludCBsaW5lKQoreworICBHRXJyb3IgKmdlcnJvciA9IE5VTEw7CisgIGdjaGFyICpuYW1lOworICBnY2hhciAqc2VudF90ZXh0OworICBnY2hhciAqc2VudF9kZWJ1ZzsKKyAgZ2Jvb2xlYW4gaGFzX2RlYnVnID0gVFJVRTsKKyAgR3N0TWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisKKyAgLyogY2hlY2tzICovCisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX01FU1NBR0UsIGVsZW1lbnQsICJzdGFydCIpOworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCkpOworICBnX3JldHVybl9pZl9mYWlsICgodHlwZSA9PSBHU1RfTUVTU0FHRV9FUlJPUikgfHwKKyAgICAgICh0eXBlID09IEdTVF9NRVNTQUdFX1dBUk5JTkcpIHx8ICh0eXBlID09IEdTVF9NRVNTQUdFX0lORk8pKTsKKworICAvKiBjaGVjayBpZiB3ZSBzZW5kIHRoZSBnaXZlbiB0ZXh0IG9yIHRoZSBkZWZhdWx0IGVycm9yIHRleHQgKi8KKyAgaWYgKCh0ZXh0ID09IE5VTEwpIHx8ICh0ZXh0WzBdID09IDApKSB7CisgICAgLyogdGV4dCBjb3VsZCBoYXZlIGNvbWUgZnJvbSBnX3N0cmR1cF9wcmludGYgKCIiKTsgKi8KKyAgICBnX2ZyZWUgKHRleHQpOworICAgIHNlbnRfdGV4dCA9IGdzdF9lcnJvcl9nZXRfbWVzc2FnZSAoZG9tYWluLCBjb2RlKTsKKyAgfSBlbHNlCisgICAgc2VudF90ZXh0ID0gdGV4dDsKKworICAvKiBjb25zdHJ1Y3QgYSBzZW50X2RlYnVnIHdpdGggZXh0cmEgaW5mb3JtYXRpb24gZnJvbSBzb3VyY2UgKi8KKyAgaWYgKChkZWJ1ZyA9PSBOVUxMKSB8fCAoZGVidWdbMF0gPT0gMCkpIHsKKyAgICAvKiBkZWJ1ZyBjb3VsZCBoYXZlIGNvbWUgZnJvbSBnX3N0cmR1cF9wcmludGYgKCIiKTsgKi8KKyAgICBoYXNfZGVidWcgPSBGQUxTRTsKKyAgfQorCisgIG5hbWUgPSBnc3Rfb2JqZWN0X2dldF9wYXRoX3N0cmluZyAoR1NUX09CSkVDVF9DQVNUIChlbGVtZW50KSk7CisgIGlmIChoYXNfZGVidWcpCisgICAgc2VudF9kZWJ1ZyA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzKCVkKTogJXMgKCk6ICVzOlxuJXMiLAorICAgICAgICBmaWxlLCBsaW5lLCBmdW5jdGlvbiwgbmFtZSwgZGVidWcpOworICBlbHNlCisgICAgc2VudF9kZWJ1ZyA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzKCVkKTogJXMgKCk6ICVzIiwKKyAgICAgICAgZmlsZSwgbGluZSwgZnVuY3Rpb24sIG5hbWUpOworICBnX2ZyZWUgKG5hbWUpOworICBnX2ZyZWUgKGRlYnVnKTsKKworICAvKiBjcmVhdGUgZ2Vycm9yIGFuZCBwb3N0IG1lc3NhZ2UgKi8KKyAgR1NUX0NBVF9JTkZPX09CSkVDVCAoR1NUX0NBVF9FUlJPUl9TWVNURU0sIGVsZW1lbnQsICJwb3N0aW5nIG1lc3NhZ2U6ICVzIiwKKyAgICAgIHNlbnRfdGV4dCk7CisgIGdlcnJvciA9IGdfZXJyb3JfbmV3X2xpdGVyYWwgKGRvbWFpbiwgY29kZSwgc2VudF90ZXh0KTsKKworICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOgorICAgICAgbWVzc2FnZSA9CisgICAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X2Vycm9yIChHU1RfT0JKRUNUX0NBU1QgKGVsZW1lbnQpLCBnZXJyb3IsIHNlbnRfZGVidWcpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfTUVTU0FHRV9XQVJOSU5HOgorICAgICAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld193YXJuaW5nIChHU1RfT0JKRUNUX0NBU1QgKGVsZW1lbnQpLCBnZXJyb3IsCisgICAgICAgICAgc2VudF9kZWJ1Zyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9NRVNTQUdFX0lORk86CisgICAgICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2luZm8gKEdTVF9PQkpFQ1RfQ0FTVCAoZWxlbWVudCksIGdlcnJvciwKKyAgICAgICAgICBzZW50X2RlYnVnKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKKyAgICAgIGJyZWFrOworICB9CisgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoZWxlbWVudCwgbWVzc2FnZSk7CisKKyAgR1NUX0NBVF9JTkZPX09CSkVDVCAoR1NUX0NBVF9FUlJPUl9TWVNURU0sIGVsZW1lbnQsICJwb3N0ZWQgJXMgbWVzc2FnZTogJXMiLAorICAgICAgKHR5cGUgPT0gR1NUX01FU1NBR0VfRVJST1IgPyAiZXJyb3IiIDogIndhcm5pbmciKSwgc2VudF90ZXh0KTsKKworICAvKiBjbGVhbnVwICovCisgIGdfZXJyb3JfZnJlZSAoZ2Vycm9yKTsKKyAgZ19mcmVlIChzZW50X2RlYnVnKTsKKyAgZ19mcmVlIChzZW50X3RleHQpOworfQorCisvKioKKyAqIGdzdF9lbGVtZW50X2lzX2xvY2tlZF9zdGF0ZToKKyAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50LgorICoKKyAqIENoZWNrcyBpZiB0aGUgc3RhdGUgb2YgYW4gZWxlbWVudCBpcyBsb2NrZWQuCisgKiBJZiB0aGUgc3RhdGUgb2YgYW4gZWxlbWVudCBpcyBsb2NrZWQsIHN0YXRlIGNoYW5nZXMgb2YgdGhlIHBhcmVudCBkb24ndAorICogYWZmZWN0IHRoZSBlbGVtZW50LgorICogVGhpcyB3YXkgeW91IGNhbiBsZWF2ZSBjdXJyZW50bHkgdW51c2VkIGVsZW1lbnRzIGluc2lkZSBiaW5zLiBKdXN0IGxvY2sgdGhlaXIKKyAqIHN0YXRlIGJlZm9yZSBjaGFuZ2luZyB0aGUgc3RhdGUgZnJvbSAjR1NUX1NUQVRFX05VTEwuCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBSZXR1cm5zOiBUUlVFLCBpZiB0aGUgZWxlbWVudCdzIHN0YXRlIGlzIGxvY2tlZC4KKyAqLworZ2Jvb2xlYW4KK2dzdF9lbGVtZW50X2lzX2xvY2tlZF9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCit7CisgIGdib29sZWFuIHJlc3VsdDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBGQUxTRSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKKyAgcmVzdWx0ID0gR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAoZWxlbWVudCwgR1NUX0VMRU1FTlRfTE9DS0VEX1NUQVRFKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZToKKyAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50CisgKiBAbG9ja2VkX3N0YXRlOiBUUlVFIHRvIGxvY2sgdGhlIGVsZW1lbnQncyBzdGF0ZQorICoKKyAqIExvY2tzIHRoZSBzdGF0ZSBvZiBhbiBlbGVtZW50LCBzbyBzdGF0ZSBjaGFuZ2VzIG9mIHRoZSBwYXJlbnQgZG9uJ3QgYWZmZWN0CisgKiB0aGlzIGVsZW1lbnQgYW55bW9yZS4KKyAqCisgKiBNVCBzYWZlLgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIHN0YXRlIHdhcyBjaGFuZ2VkLCBGQUxTRSBpZiBiYWQgcGFyYW1ldGVycyB3ZXJlIGdpdmVuCisgKiBvciB0aGUgZWxlbWVudHMgc3RhdGUtbG9ja2luZyBuZWVkZWQgbm8gY2hhbmdlLgorICovCitnYm9vbGVhbgorZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIGdib29sZWFuIGxvY2tlZF9zdGF0ZSkKK3sKKyAgZ2Jvb2xlYW4gb2xkOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCksIEZBTFNFKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOworICBvbGQgPSBHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChlbGVtZW50LCBHU1RfRUxFTUVOVF9MT0NLRURfU1RBVEUpOworCisgIGlmIChHX1VOTElLRUxZIChvbGQgPT0gbG9ja2VkX3N0YXRlKSkKKyAgICBnb3RvIHdhc19vazsKKworICBpZiAobG9ja2VkX3N0YXRlKSB7CisgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9TVEFURVMsICJsb2NraW5nIHN0YXRlIG9mIGVsZW1lbnQgJXMiLAorICAgICAgICBHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSk7CisgICAgR1NUX09CSkVDVF9GTEFHX1NFVCAoZWxlbWVudCwgR1NUX0VMRU1FTlRfTE9DS0VEX1NUQVRFKTsKKyAgfSBlbHNlIHsKKyAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX1NUQVRFUywgInVubG9ja2luZyBzdGF0ZSBvZiBlbGVtZW50ICVzIiwKKyAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOworICAgIEdTVF9PQkpFQ1RfRkxBR19VTlNFVCAoZWxlbWVudCwgR1NUX0VMRU1FTlRfTE9DS0VEX1NUQVRFKTsKKyAgfQorICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7CisKKyAgcmV0dXJuIFRSVUU7CisKK3dhc19vazoKKyAgeworICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfU1RBVEVTLAorICAgICAgICAiZWxlbWVudHMgJXMgd2FzIGFscmVhZHkgaW4gbG9ja2VkIHN0YXRlICVkIiwKKyAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCksIG9sZCk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOworCisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudDoKKyAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50LgorICoKKyAqIFRyaWVzIHRvIGNoYW5nZSB0aGUgc3RhdGUgb2YgdGhlIGVsZW1lbnQgdG8gdGhlIHNhbWUgYXMgaXRzIHBhcmVudC4KKyAqIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBGQUxTRSwgdGhlIHN0YXRlIG9mIGVsZW1lbnQgaXMgdW5kZWZpbmVkLgorICoKKyAqIFJldHVybnM6IFRSVUUsIGlmIHRoZSBlbGVtZW50J3Mgc3RhdGUgY291bGQgYmUgc3luY2VkIHRvIHRoZSBwYXJlbnQncyBzdGF0ZS4KKyAqCisgKiBNVCBzYWZlLgorICovCitnYm9vbGVhbgorZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudCAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCit7CisgIEdzdEVsZW1lbnQgKnBhcmVudDsKKyAgR3N0U3RhdGUgdGFyZ2V0OworICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSwgRkFMU0UpOworCisgIGlmICgocGFyZW50ID0gR1NUX0VMRU1FTlRfQ0FTVCAoZ3N0X2VsZW1lbnRfZ2V0X3BhcmVudCAoZWxlbWVudCkpKSkgeworICAgIEdzdFN0YXRlIHBhcmVudF9jdXJyZW50LCBwYXJlbnRfcGVuZGluZzsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyAocGFyZW50KTsKKyAgICBwYXJlbnRfY3VycmVudCA9IEdTVF9TVEFURSAocGFyZW50KTsKKyAgICBwYXJlbnRfcGVuZGluZyA9IEdTVF9TVEFURV9QRU5ESU5HIChwYXJlbnQpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYXJlbnQpOworCisgICAgLyogc2V0IHRvIHBlbmRpbmcgaWYgdGhlcmUgaXMgb25lLCBlbHNlIHdlIHNldCBpdCB0byB0aGUgY3VycmVudCBzdGF0ZSBvZgorICAgICAqIHRoZSBwYXJlbnQgKi8KKyAgICBpZiAocGFyZW50X3BlbmRpbmcgIT0gR1NUX1NUQVRFX1ZPSURfUEVORElORykKKyAgICAgIHRhcmdldCA9IHBhcmVudF9wZW5kaW5nOworICAgIGVsc2UKKyAgICAgIHRhcmdldCA9IHBhcmVudF9jdXJyZW50OworCisgICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LAorICAgICAgICAic3luY2luZyBzdGF0ZSAoJXMpIHRvIHBhcmVudCAlcyAlcyAoJXMsICVzKSIsCisgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChHU1RfU1RBVEUgKGVsZW1lbnQpKSwKKyAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAocGFyZW50KSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKHRhcmdldCksCisgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChwYXJlbnRfY3VycmVudCksCisgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChwYXJlbnRfcGVuZGluZykpOworCisgICAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCB0YXJnZXQpOworICAgIGlmIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKQorICAgICAgZ290byBmYWlsZWQ7CisKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChwYXJlbnQpOworCisgICAgcmV0dXJuIFRSVUU7CisgIH0gZWxzZSB7CisgICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LCAiZWxlbWVudCBoYXMgbm8gcGFyZW50Iik7CisgIH0KKyAgcmV0dXJuIEZBTFNFOworCisgIC8qIEVSUk9SICovCitmYWlsZWQ6CisgIHsKKyAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsCisgICAgICAgICJzeW5jaW5nIHN0YXRlIGZhaWxlZCAoJXMpIiwKKyAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRfbmFtZSAocmV0KSk7CisgICAgZ3N0X29iamVjdF91bnJlZiAocGFyZW50KTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworLyogTVQgc2FmZSAqLworc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCitnc3RfZWxlbWVudF9nZXRfc3RhdGVfZnVuYyAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCisgICAgR3N0U3RhdGUgKiBzdGF0ZSwgR3N0U3RhdGUgKiBwZW5kaW5nLCBHc3RDbG9ja1RpbWUgdGltZW91dCkKK3sKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOworICBHc3RTdGF0ZSBvbGRfcGVuZGluZzsKKworICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsICJnZXR0aW5nIHN0YXRlLCB0aW1lb3V0ICUiCisgICAgICBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKHRpbWVvdXQpKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOworICByZXQgPSBHU1RfU1RBVEVfUkVUVVJOIChlbGVtZW50KTsKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LCAiUkVUVVJOIGlzICVzIiwKKyAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2NoYW5nZV9yZXR1cm5fZ2V0X25hbWUgKHJldCkpOworCisgIC8qIHdlIGdvdCBhbiBlcnJvciwgcmVwb3J0IGltbWVkaWF0ZWx5ICovCisgIGlmIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKQorICAgIGdvdG8gZG9uZTsKKworICAvKiB3ZSBnb3Qgbm9fcHJlcm9sbCwgcmVwb3J0IGltbWVkaWF0ZWx5ICovCisgIGlmIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMKQorICAgIGdvdG8gZG9uZTsKKworICAvKiBubyBuZWVkIHRvIHdhaXQgYXN5bmMgaWYgd2UgYXJlIG5vdCBhc3luYyAqLworICBpZiAocmV0ICE9IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpCisgICAgZ290byBkb25lOworCisgIG9sZF9wZW5kaW5nID0gR1NUX1NUQVRFX1BFTkRJTkcgKGVsZW1lbnQpOworICBpZiAob2xkX3BlbmRpbmcgIT0gR1NUX1NUQVRFX1ZPSURfUEVORElORykgeworICAgIEdUaW1lVmFsICp0aW1ldmFsLCBhYnN0aW1lb3V0OworICAgIGd1aW50MzIgY29va2llOworCisgICAgaWYgKHRpbWVvdXQgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkgeworICAgICAgZ2xvbmcgYWRkID0gdGltZW91dCAvIDEwMDA7CisKKyAgICAgIGlmIChhZGQgPT0gMCkKKyAgICAgICAgZ290byBkb25lOworCisgICAgICAvKiBtYWtlIHRpbWVvdXQgYWJzb2x1dGUgKi8KKyAgICAgIGdfZ2V0X2N1cnJlbnRfdGltZSAoJmFic3RpbWVvdXQpOworICAgICAgZ190aW1lX3ZhbF9hZGQgKCZhYnN0aW1lb3V0LCBhZGQpOworICAgICAgdGltZXZhbCA9ICZhYnN0aW1lb3V0OworICAgIH0gZWxzZSB7CisgICAgICB0aW1ldmFsID0gTlVMTDsKKyAgICB9CisgICAgLyogZ2V0IGNvb2tpZSB0byBkZXRlY3Qgc3RhdGUgY2hhbmdlcyBkdXJpbmcgd2FpdGluZyAqLworICAgIGNvb2tpZSA9IGVsZW1lbnQtPnN0YXRlX2Nvb2tpZTsKKworICAgIEdTVF9DQVRfSU5GT19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LAorICAgICAgICAid2FpdGluZyBmb3IgZWxlbWVudCB0byBjb21taXQgc3RhdGUiKTsKKworICAgIC8qIHdlIGhhdmUgYSBwZW5kaW5nIHN0YXRlIGNoYW5nZSwgd2FpdCBmb3IgaXQgdG8gY29tcGxldGUgKi8KKyAgICBpZiAoIUdTVF9TVEFURV9USU1FRF9XQUlUIChlbGVtZW50LCB0aW1ldmFsKSkgeworICAgICAgR1NUX0NBVF9JTkZPX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsICJ0aW1lZCBvdXQiKTsKKyAgICAgIC8qIHRpbWVvdXQgdHJpZ2dlcmVkICovCisgICAgICByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DOworICAgIH0gZWxzZSB7CisgICAgICBpZiAoY29va2llICE9IGVsZW1lbnQtPnN0YXRlX2Nvb2tpZSkKKyAgICAgICAgZ290byBpbnRlcnJ1cHRlZDsKKworICAgICAgLyogY291bGQgYmUgc3VjY2VzcyBvciBmYWlsdXJlICovCisgICAgICBpZiAob2xkX3BlbmRpbmcgPT0gR1NUX1NUQVRFIChlbGVtZW50KSkgeworICAgICAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsICJnb3Qgc3VjY2VzcyIpOworICAgICAgICByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7CisgICAgICB9IGVsc2UgeworICAgICAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsICJnb3QgZmFpbHVyZSIpOworICAgICAgICByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU7CisgICAgICB9CisgICAgfQorICAgIC8qIGlmIG5vdGhpbmcgaXMgcGVuZGluZyBhbnltb3JlIHdlIGNhbiByZXR1cm4gU1VDQ0VTUyAqLworICAgIGlmIChHU1RfU1RBVEVfUEVORElORyAoZWxlbWVudCkgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORykgeworICAgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgZWxlbWVudCwgIm5vdGhpbmcgcGVuZGluZyIpOworICAgICAgcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOworICAgIH0KKyAgfQorCitkb25lOgorICBpZiAoc3RhdGUpCisgICAgKnN0YXRlID0gR1NUX1NUQVRFIChlbGVtZW50KTsKKyAgaWYgKHBlbmRpbmcpCisgICAgKnBlbmRpbmcgPSBHU1RfU1RBVEVfUEVORElORyAoZWxlbWVudCk7CisKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LAorICAgICAgInN0YXRlIGN1cnJlbnQ6ICVzLCBwZW5kaW5nOiAlcywgcmVzdWx0OiAlcyIsCisgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAoR1NUX1NUQVRFIChlbGVtZW50KSksCisgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAoR1NUX1NUQVRFX1BFTkRJTkcgKGVsZW1lbnQpKSwKKyAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2NoYW5nZV9yZXR1cm5fZ2V0X25hbWUgKHJldCkpOworICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7CisKKyAgcmV0dXJuIHJldDsKKworaW50ZXJydXB0ZWQ6CisgIHsKKyAgICBpZiAoc3RhdGUpCisgICAgICAqc3RhdGUgPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HOworICAgIGlmIChwZW5kaW5nKQorICAgICAgKnBlbmRpbmcgPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HOworCisgICAgR1NUX0NBVF9JTkZPX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsICJpbnRlcnJ1cGVkIik7CisKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7CisKKyAgICByZXR1cm4gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOworICB9Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlOgorICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQgdG8gZ2V0IHRoZSBzdGF0ZSBvZi4KKyAqIEBzdGF0ZTogKG91dCkgKGFsbG93LW5vbmUpOiBhIHBvaW50ZXIgdG8gI0dzdFN0YXRlIHRvIGhvbGQgdGhlIHN0YXRlLgorICogICAgIENhbiBiZSAlTlVMTC4KKyAqIEBwZW5kaW5nOiAob3V0KSAoYWxsb3ctbm9uZSk6IGEgcG9pbnRlciB0byAjR3N0U3RhdGUgdG8gaG9sZCB0aGUgcGVuZGluZworICogICAgIHN0YXRlLiBDYW4gYmUgJU5VTEwuCisgKiBAdGltZW91dDogYSAjR3N0Q2xvY2tUaW1lIHRvIHNwZWNpZnkgdGhlIHRpbWVvdXQgZm9yIGFuIGFzeW5jCisgKiAgICAgICAgICAgc3RhdGUgY2hhbmdlIG9yICVHU1RfQ0xPQ0tfVElNRV9OT05FIGZvciBpbmZpbml0ZSB0aW1lb3V0LgorICoKKyAqIEdldHMgdGhlIHN0YXRlIG9mIHRoZSBlbGVtZW50LgorICoKKyAqIEZvciBlbGVtZW50cyB0aGF0IHBlcmZvcm1lZCBhbiBBU1lOQyBzdGF0ZSBjaGFuZ2UsIGFzIHJlcG9ydGVkIGJ5CisgKiBnc3RfZWxlbWVudF9zZXRfc3RhdGUoKSwgdGhpcyBmdW5jdGlvbiB3aWxsIGJsb2NrIHVwIHRvIHRoZQorICogc3BlY2lmaWVkIHRpbWVvdXQgdmFsdWUgZm9yIHRoZSBzdGF0ZSBjaGFuZ2UgdG8gY29tcGxldGUuCisgKiBJZiB0aGUgZWxlbWVudCBjb21wbGV0ZXMgdGhlIHN0YXRlIGNoYW5nZSBvciBnb2VzIGludG8KKyAqIGFuIGVycm9yLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgaW1tZWRpYXRlbHkgd2l0aCBhIHJldHVybiB2YWx1ZSBvZgorICogJUdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyBvciAlR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFIHJlc3BlY3RpdmVseS4KKyAqCisgKiBGb3IgZWxlbWVudHMgdGhhdCBkaWQgbm90IHJldHVybiAlR1NUX1NUQVRFX0NIQU5HRV9BU1lOQywgdGhpcyBmdW5jdGlvbgorICogcmV0dXJucyB0aGUgY3VycmVudCBhbmQgcGVuZGluZyBzdGF0ZSBpbW1lZGlhdGVseS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgJUdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCBpZiB0aGUgZWxlbWVudAorICogc3VjY2Vzc2Z1bGx5IGNoYW5nZWQgaXRzIHN0YXRlIGJ1dCBpcyBub3QgYWJsZSB0byBwcm92aWRlIGRhdGEgeWV0LgorICogVGhpcyBtb3N0bHkgaGFwcGVucyBmb3IgbGl2ZSBzb3VyY2VzIHRoYXQgb25seSBwcm9kdWNlIGRhdGEgaW4KKyAqICVHU1RfU1RBVEVfUExBWUlORy4gV2hpbGUgdGhlIHN0YXRlIGNoYW5nZSByZXR1cm4gaXMgZXF1aXZhbGVudCB0bworICogJUdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgaXQgaXMgcmV0dXJuZWQgdG8gdGhlIGFwcGxpY2F0aW9uIHRvIHNpZ25hbCB0aGF0CisgKiBzb21lIHNpbmsgZWxlbWVudHMgbWlnaHQgbm90IGJlIGFibGUgdG8gY29tcGxldGUgdGhlaXIgc3RhdGUgY2hhbmdlIGJlY2F1c2UKKyAqIGFuIGVsZW1lbnQgaXMgbm90IHByb2R1Y2luZyBkYXRhIHRvIGNvbXBsZXRlIHRoZSBwcmVyb2xsLiBXaGVuIHNldHRpbmcgdGhlCisgKiBlbGVtZW50IHRvIHBsYXlpbmcsIHRoZSBwcmVyb2xsIHdpbGwgY29tcGxldGUgYW5kIHBsYXliYWNrIHdpbGwgc3RhcnQuCisgKgorICogUmV0dXJuczogJUdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyBpZiB0aGUgZWxlbWVudCBoYXMgbm8gbW9yZSBwZW5kaW5nIHN0YXRlCisgKiAgICAgICAgICBhbmQgdGhlIGxhc3Qgc3RhdGUgY2hhbmdlIHN1Y2NlZWRlZCwgJUdTVF9TVEFURV9DSEFOR0VfQVNZTkMgaWYgdGhlCisgKiAgICAgICAgICBlbGVtZW50IGlzIHN0aWxsIHBlcmZvcm1pbmcgYSBzdGF0ZSBjaGFuZ2Ugb3IKKyAqICAgICAgICAgICVHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUgaWYgdGhlIGxhc3Qgc3RhdGUgY2hhbmdlIGZhaWxlZC4KKyAqCisgKiBNVCBzYWZlLgorICovCitHc3RTdGF0ZUNoYW5nZVJldHVybgorZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKKyAgICBHc3RTdGF0ZSAqIHN0YXRlLCBHc3RTdGF0ZSAqIHBlbmRpbmcsIEdzdENsb2NrVGltZSB0aW1lb3V0KQoreworICBHc3RFbGVtZW50Q2xhc3MgKm9jbGFzczsKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmVzdWx0ID0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCksIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7CisKKyAgb2NsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChlbGVtZW50KTsKKworICBpZiAob2NsYXNzLT5nZXRfc3RhdGUpCisgICAgcmVzdWx0ID0gKG9jbGFzcy0+Z2V0X3N0YXRlKSAoZWxlbWVudCwgc3RhdGUsIHBlbmRpbmcsIHRpbWVvdXQpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfYWJvcnRfc3RhdGU6CisgKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudCB0byBhYm9ydCB0aGUgc3RhdGUgb2YuCisgKgorICogQWJvcnQgdGhlIHN0YXRlIGNoYW5nZSBvZiB0aGUgZWxlbWVudC4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkCisgKiBieSBlbGVtZW50cyB0aGF0IGRvIGFzeW5jaHJvbm91cyBzdGF0ZSBjaGFuZ2VzIGFuZCBmaW5kIG91dAorICogc29tZXRoaW5nIGlzIHdyb25nLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBTVEFURV9MT0NLIGhlbGQuCisgKgorICogTVQgc2FmZS4KKyAqLwordm9pZAorZ3N0X2VsZW1lbnRfYWJvcnRfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQoreworICBHc3RTdGF0ZSBwZW5kaW5nOworCisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICBHc3RTdGF0ZSBvbGRfc3RhdGU7CisjZW5kaWYKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCkpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoZWxlbWVudCk7CisgIHBlbmRpbmcgPSBHU1RfU1RBVEVfUEVORElORyAoZWxlbWVudCk7CisKKyAgaWYgKHBlbmRpbmcgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORyB8fAorICAgICAgR1NUX1NUQVRFX1JFVFVSTiAoZWxlbWVudCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKQorICAgIGdvdG8gbm90aGluZ19hYm9ydGVkOworCisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICBvbGRfc3RhdGUgPSBHU1RfU1RBVEUgKGVsZW1lbnQpOworCisgIEdTVF9DQVRfSU5GT19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LAorICAgICAgImFib3J0aW5nIHN0YXRlIGZyb20gJXMgdG8gJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAob2xkX3N0YXRlKSwKKyAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChwZW5kaW5nKSk7CisjZW5kaWYKKworICAvKiBmbGFnIGVycm9yICovCisgIEdTVF9TVEFURV9SRVRVUk4gKGVsZW1lbnQpID0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOworCisgIEdTVF9TVEFURV9CUk9BRENBU1QgKGVsZW1lbnQpOworICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7CisKKyAgcmV0dXJuOworCitub3RoaW5nX2Fib3J0ZWQ6CisgIHsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7CisgICAgcmV0dXJuOworICB9Cit9CisKKy8qIE5vdCBzdGF0aWMgYmVjYXVzZSBHc3RCaW4gaGFzIG1hbnVhbCBzdGF0ZSBoYW5kbGluZyB0b28gKi8KK3ZvaWQKK19wcml2X2dzdF9lbGVtZW50X3N0YXRlX2NoYW5nZWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZSBvbGRzdGF0ZSwKKyAgICBHc3RTdGF0ZSBuZXdzdGF0ZSwgR3N0U3RhdGUgcGVuZGluZykKK3sKKyAgR3N0RWxlbWVudENsYXNzICprbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAoZWxlbWVudCk7CisgIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAgR1NUX0NBVF9JTkZPX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsCisgICAgICAibm90aWZ5aW5nIGFib3V0IHN0YXRlLWNoYW5nZWQgJXMgdG8gJXMgKCVzIHBlbmRpbmcpIiwKKyAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChvbGRzdGF0ZSksCisgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAobmV3c3RhdGUpLAorICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKHBlbmRpbmcpKTsKKworICBpZiAoa2xhc3MtPnN0YXRlX2NoYW5nZWQpCisgICAga2xhc3MtPnN0YXRlX2NoYW5nZWQgKGVsZW1lbnQsIG9sZHN0YXRlLCBuZXdzdGF0ZSwgcGVuZGluZyk7CisKKyAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19zdGF0ZV9jaGFuZ2VkIChHU1RfT0JKRUNUX0NBU1QgKGVsZW1lbnQpLAorICAgICAgb2xkc3RhdGUsIG5ld3N0YXRlLCBwZW5kaW5nKTsKKyAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChlbGVtZW50LCBtZXNzYWdlKTsKK30KKworLyoqCisgKiBnc3RfZWxlbWVudF9jb250aW51ZV9zdGF0ZToKKyAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50IHRvIGNvbnRpbnVlIHRoZSBzdGF0ZSBjaGFuZ2Ugb2YuCisgKiBAcmV0OiBUaGUgcHJldmlvdXMgc3RhdGUgcmV0dXJuIHZhbHVlCisgKgorICogQ29tbWl0IHRoZSBzdGF0ZSBjaGFuZ2Ugb2YgdGhlIGVsZW1lbnQgYW5kIHByb2NlZWQgdG8gdGhlIG5leHQKKyAqIHBlbmRpbmcgc3RhdGUgaWYgYW55LiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQKKyAqIGJ5IGVsZW1lbnRzIHRoYXQgZG8gYXN5bmNocm9ub3VzIHN0YXRlIGNoYW5nZXMuCisgKiBUaGUgY29yZSB3aWxsIG5vcm1hbGx5IGNhbGwgdGhpcyBtZXRob2QgYXV0b21hdGljYWxseSB3aGVuIGFuCisgKiBlbGVtZW50IHJldHVybmVkICVHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MgZnJvbSB0aGUgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uLgorICoKKyAqIElmIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgdGhlIGVsZW1lbnQgc3RpbGwgaGFzIG5vdCByZWFjaGVkCisgKiB0aGUgcGVuZGluZyBzdGF0ZSwgdGhlIG5leHQgc3RhdGUgY2hhbmdlIGlzIHBlcmZvcm1lZC4KKyAqCisgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGludGVybmFsbHkgYW5kIHNob3VsZCBub3JtYWxseSBub3QgYmUgY2FsbGVkIGJ5IHBsdWdpbnMKKyAqIG9yIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBSZXR1cm5zOiBUaGUgcmVzdWx0IG9mIHRoZSBjb21taXQgc3RhdGUgY2hhbmdlLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK0dzdFN0YXRlQ2hhbmdlUmV0dXJuCitnc3RfZWxlbWVudF9jb250aW51ZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldCkKK3sKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gb2xkX3JldDsKKyAgR3N0U3RhdGUgb2xkX3N0YXRlLCBvbGRfbmV4dDsKKyAgR3N0U3RhdGUgY3VycmVudCwgbmV4dCwgcGVuZGluZzsKKyAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbjsKKworICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOworICBvbGRfcmV0ID0gR1NUX1NUQVRFX1JFVFVSTiAoZWxlbWVudCk7CisgIEdTVF9TVEFURV9SRVRVUk4gKGVsZW1lbnQpID0gcmV0OworICBwZW5kaW5nID0gR1NUX1NUQVRFX1BFTkRJTkcgKGVsZW1lbnQpOworCisgIC8qIGNoZWNrIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0byBjb21taXQgKi8KKyAgaWYgKHBlbmRpbmcgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORykKKyAgICBnb3RvIG5vdGhpbmdfcGVuZGluZzsKKworICBvbGRfc3RhdGUgPSBHU1RfU1RBVEUgKGVsZW1lbnQpOworICAvKiB0aGlzIGlzIHRoZSBzdGF0ZSB3ZSBzaG91bGQgZ28gdG8gbmV4dCAqLworICBvbGRfbmV4dCA9IEdTVF9TVEFURV9ORVhUIChlbGVtZW50KTsKKyAgLyogdXBkYXRlIGN1cnJlbnQgc3RhdGUgKi8KKyAgY3VycmVudCA9IEdTVF9TVEFURSAoZWxlbWVudCkgPSBvbGRfbmV4dDsKKworICAvKiBzZWUgaWYgd2UgcmVhY2hlZCB0aGUgZmluYWwgc3RhdGUgKi8KKyAgaWYgKHBlbmRpbmcgPT0gY3VycmVudCkKKyAgICBnb3RvIGNvbXBsZXRlOworCisgIG5leHQgPSBHU1RfU1RBVEVfR0VUX05FWFQgKGN1cnJlbnQsIHBlbmRpbmcpOworICB0cmFuc2l0aW9uID0gKEdzdFN0YXRlQ2hhbmdlKSBHU1RfU1RBVEVfVFJBTlNJVElPTiAoY3VycmVudCwgbmV4dCk7CisKKyAgR1NUX1NUQVRFX05FWFQgKGVsZW1lbnQpID0gbmV4dDsKKyAgLyogbWFyayBidXN5ICovCisgIEdTVF9TVEFURV9SRVRVUk4gKGVsZW1lbnQpID0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQzsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOworCisgIEdTVF9DQVRfSU5GT19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LAorICAgICAgImNvbW1pdHRpbmcgc3RhdGUgZnJvbSAlcyB0byAlcywgcGVuZGluZyAlcywgbmV4dCAlcyIsCisgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAob2xkX3N0YXRlKSwKKyAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChvbGRfbmV4dCksCisgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAocGVuZGluZyksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChuZXh0KSk7CisKKyAgX3ByaXZfZ3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlZCAoZWxlbWVudCwgb2xkX3N0YXRlLCBvbGRfbmV4dCwgcGVuZGluZyk7CisKKyAgR1NUX0NBVF9JTkZPX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsCisgICAgICAiY29udGludWUgc3RhdGUgY2hhbmdlICVzIHRvICVzLCBmaW5hbCAlcyIsCisgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAoY3VycmVudCksCisgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAobmV4dCksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChwZW5kaW5nKSk7CisKKyAgcmV0ID0gZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKKworICByZXR1cm4gcmV0OworCitub3RoaW5nX3BlbmRpbmc6CisgIHsKKyAgICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgZWxlbWVudCwgIm5vdGhpbmcgcGVuZGluZyIpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKKyAgICByZXR1cm4gcmV0OworICB9Citjb21wbGV0ZToKKyAgeworICAgIEdTVF9TVEFURV9QRU5ESU5HIChlbGVtZW50KSA9IEdTVF9TVEFURV9WT0lEX1BFTkRJTkc7CisgICAgR1NUX1NUQVRFX05FWFQgKGVsZW1lbnQpID0gR1NUX1NUQVRFX1ZPSURfUEVORElORzsKKworICAgIEdTVF9DQVRfSU5GT19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LAorICAgICAgICAiY29tcGxldGVkIHN0YXRlIGNoYW5nZSB0byAlcyIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChwZW5kaW5nKSk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOworCisgICAgLyogZG9uJ3QgcG9zdCBzaWxseSBtZXNzYWdlcyB3aXRoIHRoZSBzYW1lIHN0YXRlLiBUaGlzIGNhbiBoYXBwZW4KKyAgICAgKiB3aGVuIGFuIGVsZW1lbnQgc3RhdGUgaXMgY2hhbmdlZCB0byB3aGF0IGl0IGFscmVhZHkgd2FzLiBGb3IgYmlucworICAgICAqIHRoaXMgY2FuIGJlIHRoZSByZXN1bHQgb2YgYSBsb3N0IHN0YXRlLCB3aGljaCB3ZSBjaGVjayB3aXRoIHRoZQorICAgICAqIHByZXZpb3VzIHJldHVybiB2YWx1ZS4KKyAgICAgKiBXZSBkbyBzaWduYWwgdGhlIGNvbmQgdGhvdWdoIGFzIGEgX2dldF9zdGF0ZSgpIG1pZ2h0IGJlIGJsb2NraW5nCisgICAgICogb24gaXQuICovCisgICAgaWYgKG9sZF9zdGF0ZSAhPSBvbGRfbmV4dCB8fCBvbGRfcmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpCisgICAgICBfcHJpdl9nc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VkIChlbGVtZW50LCBvbGRfc3RhdGUsIG9sZF9uZXh0LAorICAgICAgICAgIEdTVF9TVEFURV9WT0lEX1BFTkRJTkcpOworCisgICAgR1NUX1NUQVRFX0JST0FEQ0FTVCAoZWxlbWVudCk7CisKKyAgICByZXR1cm4gcmV0OworICB9Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfbG9zdF9zdGF0ZToKKyAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50IHRoZSBzdGF0ZSBpcyBsb3N0IG9mCisgKgorICogQnJpbmdzIHRoZSBlbGVtZW50IHRvIHRoZSBsb3N0IHN0YXRlLiBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUKKyAqIGVsZW1lbnQgaXMgY29waWVkIHRvIHRoZSBwZW5kaW5nIHN0YXRlIHNvIHRoYXQgYW55IGNhbGwgdG8KKyAqIGdzdF9lbGVtZW50X2dldF9zdGF0ZSgpIHdpbGwgcmV0dXJuICVHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DLgorICoKKyAqIEFuIEFTWU5DX1NUQVJUIG1lc3NhZ2UgaXMgcG9zdGVkLiBJZiB0aGUgZWxlbWVudCB3YXMgUExBWUlORywgaXQgd2lsbAorICogZ28gdG8gUEFVU0VELiBUaGUgZWxlbWVudCB3aWxsIGJlIHJlc3RvcmVkIHRvIGl0cyBQTEFZSU5HIHN0YXRlIGJ5CisgKiB0aGUgcGFyZW50IHBpcGVsaW5lIHdoZW4gaXQgcHJlcm9sbHMgYWdhaW4uCisgKgorICogVGhpcyBpcyBtb3N0bHkgdXNlZCBmb3IgZWxlbWVudHMgdGhhdCBsb3N0IHRoZWlyIHByZXJvbGwgYnVmZmVyCisgKiBpbiB0aGUgJUdTVF9TVEFURV9QQVVTRUQgb3IgJUdTVF9TVEFURV9QTEFZSU5HIHN0YXRlIGFmdGVyIGEgZmx1c2gsCisgKiB0aGV5IHdpbGwgZ28gdG8gdGhlaXIgcGVuZGluZyBzdGF0ZSBhZ2FpbiB3aGVuIGEgbmV3IHByZXJvbGwgYnVmZmVyIGlzCisgKiBxdWV1ZWQuIFRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgYmUgY2FsbGVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgY3VycmVudGx5CisgKiBub3QgaW4gZXJyb3Igb3IgYW4gYXN5bmMgc3RhdGUgY2hhbmdlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbnRlcm5hbGx5IGFuZCBzaG91bGQgbm9ybWFsbHkgbm90IGJlIGNhbGxlZCBmcm9tCisgKiBwbHVnaW5zIG9yIGFwcGxpY2F0aW9ucy4KKyAqLwordm9pZAorZ3N0X2VsZW1lbnRfbG9zdF9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCit7CisgIEdzdFN0YXRlIG9sZF9zdGF0ZSwgbmV3X3N0YXRlOworICBHc3RNZXNzYWdlICptZXNzYWdlOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKKyAgaWYgKEdTVF9TVEFURV9SRVRVUk4gKGVsZW1lbnQpID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkKKyAgICBnb3RvIG5vdGhpbmdfbG9zdDsKKworICBpZiAoR1NUX1NUQVRFX1BFTkRJTkcgKGVsZW1lbnQpICE9IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcpCisgICAgZ290byBvbmx5X2FzeW5jX3N0YXJ0OworCisgIG9sZF9zdGF0ZSA9IEdTVF9TVEFURSAoZWxlbWVudCk7CisKKyAgLyogd2hlbiB3ZSB3ZXJlIFBMQVlJTkcsIHRoZSBuZXcgc3RhdGUgaXMgUEFVU0VELiBXZSB3aWxsIGFsc28gbm90CisgICAqIGF1dG9tYXRpY2FsbHkgZ28gdG8gUExBWUlORyBidXQgbGV0IHRoZSBwYXJlbnQgYmluKHMpIHNldCB1cyB0byBQTEFZSU5HCisgICAqIHdoZW4gd2UgcHJlcm9sbC4gKi8KKyAgaWYgKG9sZF9zdGF0ZSA+IEdTVF9TVEFURV9QQVVTRUQpCisgICAgbmV3X3N0YXRlID0gR1NUX1NUQVRFX1BBVVNFRDsKKyAgZWxzZQorICAgIG5ld19zdGF0ZSA9IG9sZF9zdGF0ZTsKKworICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsCisgICAgICAibG9zdCBzdGF0ZSBvZiAlcyB0byAlcyIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChvbGRfc3RhdGUpLAorICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKG5ld19zdGF0ZSkpOworCisgIEdTVF9TVEFURSAoZWxlbWVudCkgPSBuZXdfc3RhdGU7CisgIEdTVF9TVEFURV9ORVhUIChlbGVtZW50KSA9IG5ld19zdGF0ZTsKKyAgR1NUX1NUQVRFX1BFTkRJTkcgKGVsZW1lbnQpID0gbmV3X3N0YXRlOworICBHU1RfU1RBVEVfUkVUVVJOIChlbGVtZW50KSA9IEdTVF9TVEFURV9DSEFOR0VfQVNZTkM7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKKworICBfcHJpdl9nc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VkIChlbGVtZW50LCBuZXdfc3RhdGUsIG5ld19zdGF0ZSwgbmV3X3N0YXRlKTsKKworICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2FzeW5jX3N0YXJ0IChHU1RfT0JKRUNUX0NBU1QgKGVsZW1lbnQpKTsKKyAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChlbGVtZW50LCBtZXNzYWdlKTsKKworICByZXR1cm47CisKK25vdGhpbmdfbG9zdDoKKyAgeworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKKyAgICByZXR1cm47CisgIH0KK29ubHlfYXN5bmNfc3RhcnQ6CisgIHsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7CisKKyAgICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2FzeW5jX3N0YXJ0IChHU1RfT0JKRUNUX0NBU1QgKGVsZW1lbnQpKTsKKyAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKGVsZW1lbnQsIG1lc3NhZ2UpOworICAgIHJldHVybjsKKyAgfQorfQorCisvKioKKyAqIGdzdF9lbGVtZW50X3NldF9zdGF0ZToKKyAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50IHRvIGNoYW5nZSBzdGF0ZSBvZi4KKyAqIEBzdGF0ZTogdGhlIGVsZW1lbnQncyBuZXcgI0dzdFN0YXRlLgorICoKKyAqIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBlbGVtZW50LiBUaGlzIGZ1bmN0aW9uIHdpbGwgdHJ5IHRvIHNldCB0aGUKKyAqIHJlcXVlc3RlZCBzdGF0ZSBieSBnb2luZyB0aHJvdWdoIGFsbCB0aGUgaW50ZXJtZWRpYXJ5IHN0YXRlcyBhbmQgY2FsbGluZworICogdGhlIGNsYXNzJ3Mgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIGZvciBlYWNoLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIHJldHVybiAjR1NUX1NUQVRFX0NIQU5HRV9BU1lOQywgaW4gd2hpY2ggY2FzZSB0aGUKKyAqIGVsZW1lbnQgd2lsbCBwZXJmb3JtIHRoZSByZW1haW5kZXIgb2YgdGhlIHN0YXRlIGNoYW5nZSBhc3luY2hyb25vdXNseSBpbgorICogYW5vdGhlciB0aHJlYWQuCisgKiBBbiBhcHBsaWNhdGlvbiBjYW4gdXNlIGdzdF9lbGVtZW50X2dldF9zdGF0ZSgpIHRvIHdhaXQgZm9yIHRoZSBjb21wbGV0aW9uCisgKiBvZiB0aGUgc3RhdGUgY2hhbmdlIG9yIGl0IGNhbiB3YWl0IGZvciBhIHN0YXRlIGNoYW5nZSBtZXNzYWdlIG9uIHRoZSBidXMuCisgKgorICogU3RhdGUgY2hhbmdlcyB0byAlR1NUX1NUQVRFX1JFQURZIG9yICVHU1RfU1RBVEVfTlVMTCBuZXZlciByZXR1cm4KKyAqICNHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DLgorICoKKyAqIFJldHVybnM6IFJlc3VsdCBvZiB0aGUgc3RhdGUgY2hhbmdlIHVzaW5nICNHc3RTdGF0ZUNoYW5nZVJldHVybi4KKyAqCisgKiBNVCBzYWZlLgorICovCitHc3RTdGF0ZUNoYW5nZVJldHVybgorZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGUgc3RhdGUpCit7CisgIEdzdEVsZW1lbnRDbGFzcyAqb2NsYXNzOworICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXN1bHQgPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSwgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKKworICBvY2xhc3MgPSBHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKGVsZW1lbnQpOworCisgIGlmIChvY2xhc3MtPnNldF9zdGF0ZSkKKyAgICByZXN1bHQgPSAob2NsYXNzLT5zZXRfc3RhdGUpIChlbGVtZW50LCBzdGF0ZSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIGRlZmF1bHQgc2V0IHN0YXRlIGZ1bmN0aW9uLCBjYWxjdWxhdGVzIHRoZSBuZXh0IHN0YXRlIGJhc2VkCisgKiBvbiBjdXJyZW50IHN0YXRlIGFuZCBjYWxscyB0aGUgY2hhbmdlX3N0YXRlIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgorZ3N0X2VsZW1lbnRfc2V0X3N0YXRlX2Z1bmMgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZSBzdGF0ZSkKK3sKKyAgR3N0U3RhdGUgY3VycmVudCwgbmV4dCwgb2xkX3BlbmRpbmc7CisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKKyAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbjsKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gb2xkX3JldDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpOworCisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgZWxlbWVudCwgInNldF9zdGF0ZSB0byAlcyIsCisgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAoc3RhdGUpKTsKKworICAvKiBzdGF0ZSBsb2NrIGlzIHRha2VuIHRvIHByb3RlY3QgdGhlIHNldF9zdGF0ZSgpIGFuZCBnZXRfc3RhdGUoKQorICAgKiBwcm9jZWR1cmVzLCBpdCBkb2VzIG5vdCBsb2NrIGFueSB2YXJpYWJsZXMuICovCisgIEdTVF9TVEFURV9MT0NLIChlbGVtZW50KTsKKworICAvKiBub3cgY2FsY3VsYXRlIGhvdyB0byBnZXQgdG8gdGhlIG5ldyBzdGF0ZSAqLworICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOworICBvbGRfcmV0ID0gR1NUX1NUQVRFX1JFVFVSTiAoZWxlbWVudCk7CisgIC8qIHByZXZpb3VzIHN0YXRlIGNoYW5nZSByZXR1cm5lZCBhbiBlcnJvciwgcmVtb3ZlIGFsbCBwZW5kaW5nCisgICAqIGFuZCBuZXh0IHN0YXRlcyAqLworICBpZiAob2xkX3JldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpIHsKKyAgICBHU1RfU1RBVEVfTkVYVCAoZWxlbWVudCkgPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HOworICAgIEdTVF9TVEFURV9QRU5ESU5HIChlbGVtZW50KSA9IEdTVF9TVEFURV9WT0lEX1BFTkRJTkc7CisgICAgR1NUX1NUQVRFX1JFVFVSTiAoZWxlbWVudCkgPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7CisgIH0KKworICBjdXJyZW50ID0gR1NUX1NUQVRFIChlbGVtZW50KTsKKyAgbmV4dCA9IEdTVF9TVEFURV9ORVhUIChlbGVtZW50KTsKKyAgb2xkX3BlbmRpbmcgPSBHU1RfU1RBVEVfUEVORElORyAoZWxlbWVudCk7CisKKyAgLyogdGhpcyBpcyB0aGUgKG5ldykgc3RhdGUgd2Ugc2hvdWxkIGdvIHRvLiBUQVJHRVQgaXMgdGhlIGxhc3Qgc3RhdGUgd2Ugc2V0IG9uCisgICAqIHRoZSBlbGVtZW50LiAqLworICBpZiAoc3RhdGUgIT0gR1NUX1NUQVRFX1RBUkdFVCAoZWxlbWVudCkpIHsKKyAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsCisgICAgICAgICJzZXR0aW5nIHRhcmdldCBzdGF0ZSB0byAlcyIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChzdGF0ZSkpOworICAgIEdTVF9TVEFURV9UQVJHRVQgKGVsZW1lbnQpID0gc3RhdGU7CisgICAgLyogaW5jcmVtZW50IHN0YXRlIGNvb2tpZSBzbyB0aGF0IHdlIGNhbiB0cmFjayBlYWNoIHN0YXRlIGNoYW5nZS4gV2Ugb25seSBkbworICAgICAqIHRoaXMgaWYgdGhpcyBpcyBhY3R1YWxseSBhIG5ldyBzdGF0ZSBjaGFuZ2UuICovCisgICAgZWxlbWVudC0+c3RhdGVfY29va2llKys7CisgIH0KKyAgR1NUX1NUQVRFX1BFTkRJTkcgKGVsZW1lbnQpID0gc3RhdGU7CisKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LAorICAgICAgImN1cnJlbnQgJXMsIG9sZF9wZW5kaW5nICVzLCBuZXh0ICVzLCBvbGQgcmV0dXJuICVzIiwKKyAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChjdXJyZW50KSwKKyAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChvbGRfcGVuZGluZyksCisgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAobmV4dCksCisgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VfcmV0dXJuX2dldF9uYW1lIChvbGRfcmV0KSk7CisKKyAgLyogaWYgdGhlIGVsZW1lbnQgd2FzIGJ1c3kgZG9pbmcgYSBzdGF0ZSBjaGFuZ2UsIHdlIGp1c3QgdXBkYXRlIHRoZQorICAgKiB0YXJnZXQgc3RhdGUsIGl0J2xsIGdldCB0byBpdCBhc3luYyB0aGVuLiAqLworICBpZiAob2xkX3BlbmRpbmcgIT0gR1NUX1NUQVRFX1ZPSURfUEVORElORykgeworICAgIC8qIHVwd2FyZHMgc3RhdGUgY2hhbmdlIHdpbGwgaGFwcGVuIEFTWU5DICovCisgICAgaWYgKG9sZF9wZW5kaW5nIDw9IHN0YXRlKQorICAgICAgZ290byB3YXNfYnVzeTsKKyAgICAvKiBlbGVtZW50IGlzIGdvaW5nIHRvIHRoaXMgc3RhdGUgYWxyZWFkeSAqLworICAgIGVsc2UgaWYgKG5leHQgPT0gc3RhdGUpCisgICAgICBnb3RvIHdhc19idXN5OworICAgIC8qIGVsZW1lbnQgd2FzIHBlcmZvcm1pbmcgYW4gQVNZTkMgdXB3YXJkIHN0YXRlIGNoYW5nZSBhbmQKKyAgICAgKiB3ZSByZXF1ZXN0IHRvIGdvIGRvd253YXJkIGFnYWluLiBTdGFydCBmcm9tIHRoZSBuZXh0IHBlbmRpbmcKKyAgICAgKiBzdGF0ZSB0aGVuLiAqLworICAgIGVsc2UgaWYgKG5leHQgPiBzdGF0ZQorICAgICAgICAmJiBHU1RfU1RBVEVfUkVUVVJOIChlbGVtZW50KSA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKSB7CisgICAgICBjdXJyZW50ID0gbmV4dDsKKyAgICB9CisgIH0KKyAgbmV4dCA9IEdTVF9TVEFURV9HRVRfTkVYVCAoY3VycmVudCwgc3RhdGUpOworICAvKiBub3cgd2Ugc3RvcmUgdGhlIG5leHQgc3RhdGUgKi8KKyAgR1NUX1NUQVRFX05FWFQgKGVsZW1lbnQpID0gbmV4dDsKKyAgLyogbWFyayBidXN5LCB3ZSBuZWVkIHRvIGNoZWNrIHRoYXQgdGhlcmUgaXMgYWN0dWFsbHkgYSBzdGF0ZSBjaGFuZ2UKKyAgICogdG8gYmUgZG9uZSBlbHNlIHdlIGNvdWxkIGFjY2lkZW50YWxseSBvdmVycmlkZSBTVUNDRVNTL05PX1BSRVJPTEwgYW5kCisgICAqIHRoZSBkZWZhdWx0IGVsZW1lbnQgY2hhbmdlX3N0YXRlIGZ1bmN0aW9uIGhhcyBubyB3YXkgdG8ga25vdyB3aGF0IHRoZQorICAgKiBvbGQgdmFsdWUgd2FzLi4uIGNvdWxkIGNvbnNpZGVyIHRoaXMgYSBGSVhNRS4uLiovCisgIGlmIChjdXJyZW50ICE9IG5leHQpCisgICAgR1NUX1NUQVRFX1JFVFVSTiAoZWxlbWVudCkgPSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DOworCisgIHRyYW5zaXRpb24gPSAoR3N0U3RhdGVDaGFuZ2UpIEdTVF9TVEFURV9UUkFOU0lUSU9OIChjdXJyZW50LCBuZXh0KTsKKworICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsCisgICAgICAiJXM6IHNldHRpbmcgc3RhdGUgZnJvbSAlcyB0byAlcyIsCisgICAgICAobmV4dCAhPSBzdGF0ZSA/ICJpbnRlcm1lZGlhdGUiIDogImZpbmFsIiksCisgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAoY3VycmVudCksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChuZXh0KSk7CisKKyAgLyogbm93IHNpZ25hbCBhbnkgd2FpdGVycywgdGhleSB3aWxsIGVycm9yIHNpbmNlIHRoZSBjb29raWUgd2FzIGluY3JlbWVudGVkICovCisgIEdTVF9TVEFURV9CUk9BRENBU1QgKGVsZW1lbnQpOworCisgIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKKworICByZXQgPSBnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOworCisgIEdTVF9TVEFURV9VTkxPQ0sgKGVsZW1lbnQpOworCisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgZWxlbWVudCwgInJldHVybmVkICVzIiwKKyAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2NoYW5nZV9yZXR1cm5fZ2V0X25hbWUgKHJldCkpOworCisgIHJldHVybiByZXQ7CisKK3dhc19idXN5OgorICB7CisgICAgR1NUX1NUQVRFX1JFVFVSTiAoZWxlbWVudCkgPSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DOworICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgZWxlbWVudCwKKyAgICAgICAgImVsZW1lbnQgd2FzIGJ1c3kgd2l0aCBhc3luYyBzdGF0ZSBjaGFuZ2UiKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7CisKKyAgICBHU1RfU1RBVEVfVU5MT0NLIChlbGVtZW50KTsKKworICAgIHJldHVybiBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DOworICB9Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlOgorICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQKKyAqIEB0cmFuc2l0aW9uOiB0aGUgcmVxdWVzdGVkIHRyYW5zaXRpb24KKyAqCisgKiBQZXJmb3JtIEB0cmFuc2l0aW9uIG9uIEBlbGVtZW50LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBTVEFURV9MT0NLIGhlbGQgYW5kIGlzIG1haW5seSB1c2VkCisgKiBpbnRlcm5hbGx5LgorICoKKyAqIFJldHVybnM6IHRoZSAjR3N0U3RhdGVDaGFuZ2VSZXR1cm4gb2YgdGhlIHN0YXRlIHRyYW5zaXRpb24uCisgKi8KK0dzdFN0YXRlQ2hhbmdlUmV0dXJuCitnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQoreworICBHc3RFbGVtZW50Q2xhc3MgKm9jbGFzczsKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOworCisgIG9jbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAoZWxlbWVudCk7CisKKyAgLyogY2FsbCB0aGUgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIHNvIGl0IGNhbiBzZXQgdGhlIHN0YXRlICovCisgIGlmIChvY2xhc3MtPmNoYW5nZV9zdGF0ZSkKKyAgICByZXQgPSAob2NsYXNzLT5jaGFuZ2Vfc3RhdGUpIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKKyAgZWxzZQorICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKKworICBzd2l0Y2ggKHJldCkgeworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOgorICAgICAgR1NUX0NBVF9JTkZPX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsCisgICAgICAgICAgImhhdmUgRkFJTFVSRSBjaGFuZ2Vfc3RhdGUgcmV0dXJuIik7CisgICAgICAvKiBzdGF0ZSBjaGFuZ2UgZmFpbHVyZSAqLworICAgICAgZ3N0X2VsZW1lbnRfYWJvcnRfc3RhdGUgKGVsZW1lbnQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DOgorICAgIHsKKyAgICAgIEdzdFN0YXRlIHRhcmdldDsKKworICAgICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LAorICAgICAgICAgICJlbGVtZW50IHdpbGwgY2hhbmdlIHN0YXRlIEFTWU5DIik7CisKKyAgICAgIHRhcmdldCA9IEdTVF9TVEFURV9UQVJHRVQgKGVsZW1lbnQpOworCisgICAgICBpZiAodGFyZ2V0ID4gR1NUX1NUQVRFX1JFQURZKQorICAgICAgICBnb3RvIGFzeW5jOworCisgICAgICAvKiBlbHNlIHdlIGp1c3QgY29udGludWUgdGhlIHN0YXRlIGNoYW5nZSBkb3dud2FyZHMgKi8KKyAgICAgIEdTVF9DQVRfSU5GT19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LAorICAgICAgICAgICJmb3JjaW5nIGNvbW1pdCBzdGF0ZSAlcyA8PSAlcyIsCisgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKHRhcmdldCksCisgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKEdTVF9TVEFURV9SRUFEWSkpOworCisgICAgICByZXQgPSBnc3RfZWxlbWVudF9jb250aW51ZV9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzoKKyAgICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgZWxlbWVudCwKKyAgICAgICAgICAiZWxlbWVudCBjaGFuZ2VkIHN0YXRlIFNVQ0NFU1MiKTsKKyAgICAgIC8qIHdlIGNhbiBjb21taXQgdGhlIHN0YXRlIG5vdyB3aGljaCB3aWxsIHByb2NlZWVkIHRvCisgICAgICAgKiB0aGUgbmV4dCBzdGF0ZSAqLworICAgICAgcmV0ID0gZ3N0X2VsZW1lbnRfY29udGludWVfc3RhdGUgKGVsZW1lbnQsIHJldCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTDoKKyAgICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgZWxlbWVudCwKKyAgICAgICAgICAiZWxlbWVudCBjaGFuZ2VkIHN0YXRlIE5PX1BSRVJPTEwiKTsKKyAgICAgIC8qIHdlIGNhbiBjb21taXQgdGhlIHN0YXRlIG5vdyB3aGljaCB3aWxsIHByb2NlZWVkIHRvCisgICAgICAgKiB0aGUgbmV4dCBzdGF0ZSAqLworICAgICAgcmV0ID0gZ3N0X2VsZW1lbnRfY29udGludWVfc3RhdGUgKGVsZW1lbnQsIHJldCk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgZ290byBpbnZhbGlkX3JldHVybjsKKyAgfQorCisgIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsICJleGl0IHN0YXRlIGNoYW5nZSAlZCIsIHJldCk7CisKKyAgcmV0dXJuIHJldDsKKworYXN5bmM6CisgIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsICJleGl0IGFzeW5jIHN0YXRlIGNoYW5nZSAlZCIsCisgICAgICByZXQpOworCisgIHJldHVybiByZXQ7CisKKyAgLyogRVJST1IgKi8KK2ludmFsaWRfcmV0dXJuOgorICB7CisgICAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKKyAgICAvKiBzb21lYm9keSBhZGRlZCBhIEdTVF9TVEFURV8gYW5kIGZvcmdvdCB0byBkbyBzdHVmZiBoZXJlICEgKi8KKyAgICBnX2NyaXRpY2FsICgiJXM6IHVua25vd24gcmV0dXJuIHZhbHVlICVkIGZyb20gYSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24iLAorICAgICAgICBHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSwgcmV0KTsKKworICAgIC8qIHdlIGFyZSBpbiBlcnJvciBub3cgKi8KKyAgICByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU7CisgICAgR1NUX1NUQVRFX1JFVFVSTiAoZWxlbWVudCkgPSByZXQ7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOworCisgICAgcmV0dXJuIHJldDsKKyAgfQorfQorCisvKiBnc3RfaXRlcmF0b3JfZm9sZCBmdW5jdGlvbnMgZm9yIHBhZHNfYWN0aXZhdGUKKyAqIFN0b3AgdGhlIGl0ZXJhdG9yIGlmIGFjdGl2YXRpbmcgb25lIHBhZCBmYWlsZWQuICovCitzdGF0aWMgZ2Jvb2xlYW4KK2FjdGl2YXRlX3BhZHMgKGNvbnN0IEdWYWx1ZSAqIHZwYWQsIEdWYWx1ZSAqIHJldCwgZ2Jvb2xlYW4gKiBhY3RpdmUpCit7CisgIEdzdFBhZCAqcGFkID0gZ192YWx1ZV9nZXRfb2JqZWN0ICh2cGFkKTsKKyAgZ2Jvb2xlYW4gY29udCA9IFRSVUU7CisKKyAgaWYgKCEoY29udCA9IGdzdF9wYWRfc2V0X2FjdGl2ZSAocGFkLCAqYWN0aXZlKSkpCisgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAocmV0LCBGQUxTRSk7CisKKyAgcmV0dXJuIGNvbnQ7Cit9CisKKy8qIHJldHVybnMgZmFsc2Ugb24gZXJyb3Igb3IgZWFybHkgY3V0b3V0IG9mIHRoZSBmb2xkLCB0cnVlIGlmIGFsbAorICogcGFkcyBpbiBAaXRlciB3ZXJlIChkZSlhY3RpdmF0ZWQgc3VjY2Vzc2Z1bGx5LiAqLworc3RhdGljIGdib29sZWFuCitpdGVyYXRvcl9hY3RpdmF0ZV9mb2xkX3dpdGhfcmVzeW5jIChHc3RJdGVyYXRvciAqIGl0ZXIsCisgICAgR3N0SXRlcmF0b3JGb2xkRnVuY3Rpb24gZnVuYywgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBHc3RJdGVyYXRvclJlc3VsdCBpcmVzOworICBHVmFsdWUgcmV0ID0geyAwIH07CisKKyAgLyogbm8gbmVlZCB0byB1bnNldCB0aGlzIGxhdGVyLCBpdCdzIGp1c3QgYSBib29sZWFuICovCisgIGdfdmFsdWVfaW5pdCAoJnJldCwgR19UWVBFX0JPT0xFQU4pOworICBnX3ZhbHVlX3NldF9ib29sZWFuICgmcmV0LCBUUlVFKTsKKworICB3aGlsZSAoMSkgeworICAgIGlyZXMgPSBnc3RfaXRlcmF0b3JfZm9sZCAoaXRlciwgZnVuYywgJnJldCwgdXNlcl9kYXRhKTsKKyAgICBzd2l0Y2ggKGlyZXMpIHsKKyAgICAgIGNhc2UgR1NUX0lURVJBVE9SX1JFU1lOQzoKKyAgICAgICAgLyogbmVlZCB0byByZXNldCB0aGUgcmVzdWx0IGFnYWluICovCisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKCZyZXQsIFRSVUUpOworICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jIChpdGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgorICAgICAgICAvKiBhbGwgcGFkcyBpdGVyYXRlZCwgcmV0dXJuIGNvbGxlY3RlZCB2YWx1ZSAqLworICAgICAgICBnb3RvIGRvbmU7CisgICAgICBkZWZhdWx0OgorICAgICAgICAvKiBpdGVyYXRvciByZXR1cm5lZCBfRVJST1Igb3IgcHJlbWF0dXJlIGVuZCB3aXRoIF9PSywKKyAgICAgICAgICogbWFyayBhbiBlcnJvciBhbmQgZXhpdCAqLworICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICgmcmV0LCBGQUxTRSk7CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisgIH0KK2RvbmU6CisgIC8qIHJldHVybiBjb2xsZWN0ZWQgdmFsdWUgKi8KKyAgcmV0dXJuIGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKCZyZXQpOworfQorCisvKiBpcyBjYWxsZWQgd2l0aCBTVEFURV9MT0NLCisgKgorICogUGFkcyBhcmUgYWN0aXZhdGVkIGZyb20gc291cmNlIHBhZHMgdG8gc2lua3BhZHMuCisgKi8KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2VsZW1lbnRfcGFkc19hY3RpdmF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIGdib29sZWFuIGFjdGl2ZSkKK3sKKyAgR3N0SXRlcmF0b3IgKml0ZXI7CisgIGdib29sZWFuIHJlczsKKworICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsIGVsZW1lbnQsCisgICAgICAicGFkc19hY3RpdmF0ZSB3aXRoIGFjdGl2ZSAlZCIsIGFjdGl2ZSk7CisKKyAgaXRlciA9IGdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMgKGVsZW1lbnQpOworICByZXMgPQorICAgICAgaXRlcmF0b3JfYWN0aXZhdGVfZm9sZF93aXRoX3Jlc3luYyAoaXRlciwKKyAgICAgIChHc3RJdGVyYXRvckZvbGRGdW5jdGlvbikgYWN0aXZhdGVfcGFkcywgJmFjdGl2ZSk7CisgIGdzdF9pdGVyYXRvcl9mcmVlIChpdGVyKTsKKyAgaWYgKEdfVU5MSUtFTFkgKCFyZXMpKQorICAgIGdvdG8gc3JjX2ZhaWxlZDsKKworICBpdGVyID0gZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zaW5rX3BhZHMgKGVsZW1lbnQpOworICByZXMgPQorICAgICAgaXRlcmF0b3JfYWN0aXZhdGVfZm9sZF93aXRoX3Jlc3luYyAoaXRlciwKKyAgICAgIChHc3RJdGVyYXRvckZvbGRGdW5jdGlvbikgYWN0aXZhdGVfcGFkcywgJmFjdGl2ZSk7CisgIGdzdF9pdGVyYXRvcl9mcmVlIChpdGVyKTsKKyAgaWYgKEdfVU5MSUtFTFkgKCFyZXMpKQorICAgIGdvdG8gc2lua19mYWlsZWQ7CisKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfRUxFTUVOVF9QQURTLCBlbGVtZW50LAorICAgICAgInBhZHNfYWN0aXZhdGUgc3VjY2Vzc2Z1bCIpOworCisgIHJldHVybiBUUlVFOworCisgIC8qIEVSUk9SUyAqLworc3JjX2ZhaWxlZDoKKyAgeworICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0VMRU1FTlRfUEFEUywgZWxlbWVudCwKKyAgICAgICAgInNvdXJjZSBwYWRzX2FjdGl2YXRlIGZhaWxlZCIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorc2lua19mYWlsZWQ6CisgIHsKKyAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsIGVsZW1lbnQsCisgICAgICAgICJzaW5rIHBhZHNfYWN0aXZhdGUgZmFpbGVkIik7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKKy8qIGlzIGNhbGxlZCB3aXRoIFNUQVRFX0xPQ0sgKi8KK3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgorZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlX2Z1bmMgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQoreworICBHc3RTdGF0ZSBzdGF0ZSwgbmV4dDsKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmVzdWx0ID0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCksIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7CisKKyAgc3RhdGUgPSAoR3N0U3RhdGUpIEdTVF9TVEFURV9UUkFOU0lUSU9OX0NVUlJFTlQgKHRyYW5zaXRpb24pOworICBuZXh0ID0gR1NUX1NUQVRFX1RSQU5TSVRJT05fTkVYVCAodHJhbnNpdGlvbik7CisKKyAgLyogaWYgdGhlIGVsZW1lbnQgYWxyZWFkeSBpcyBpbiB0aGUgZ2l2ZW4gc3RhdGUsIHdlIGp1c3QgcmV0dXJuIHN1Y2Nlc3MgKi8KKyAgaWYgKG5leHQgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORyB8fCBzdGF0ZSA9PSBuZXh0KQorICAgIGdvdG8gd2FzX29rOworCisgIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsCisgICAgICAiZGVmYXVsdCBoYW5kbGVyIHRyaWVzIHNldHRpbmcgc3RhdGUgZnJvbSAlcyB0byAlcyAoJTA0eCkiLAorICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKHN0YXRlKSwKKyAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChuZXh0KSwgdHJhbnNpdGlvbik7CisKKyAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgorICAgICAgaWYgKCFnc3RfZWxlbWVudF9wYWRzX2FjdGl2YXRlIChlbGVtZW50LCBUUlVFKSkgeworICAgICAgICByZXN1bHQgPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1BMQVlJTkc6CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUExBWUlOR19UT19QQVVTRUQ6CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgorICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOgorICAgICAgLyogZGVhY3RpdmF0ZSBwYWRzIGluIGJvdGggY2FzZXMsIHNpbmNlIHRoZXkgYXJlIGFjdGl2YXRlZCBvbgorICAgICAgICAgcmVhZHktPnBhdXNlZCBidXQgdGhlIGVsZW1lbnQgbWlnaHQgbm90IGhhdmUgbWFkZSBpdCB0byBwYXVzZWQgKi8KKyAgICAgIGlmICghZ3N0X2VsZW1lbnRfcGFkc19hY3RpdmF0ZSAoZWxlbWVudCwgRkFMU0UpKSB7CisgICAgICAgIHJlc3VsdCA9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAvKiB0aGlzIHdpbGwgY2F0Y2ggcmVhbCBidXQgdW5oYW5kbGVkIHN0YXRlIGNoYW5nZXM7CisgICAgICAgKiBjYW4gb25seSBiZSBjYXVzZWQgYnk6CisgICAgICAgKiAtIGEgbmV3IHN0YXRlIHdhcyBhZGRlZAorICAgICAgICogLSBzb21laG93IHRoZSBlbGVtZW50IHdhcyBhc2tlZCB0byBqdW1wIGFjcm9zcyBhbiBpbnRlcm1lZGlhdGUgc3RhdGUKKyAgICAgICAqLworICAgICAgZ193YXJuaW5nICgiVW5oYW5kbGVkIHN0YXRlIGNoYW5nZSBmcm9tICVzIHRvICVzIiwKKyAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAoc3RhdGUpLAorICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChuZXh0KSk7CisgICAgICBicmVhazsKKyAgfQorICByZXR1cm4gcmVzdWx0OworCit3YXNfb2s6CisgIHsKKyAgICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOworICAgIHJlc3VsdCA9IEdTVF9TVEFURV9SRVRVUk4gKGVsZW1lbnQpOworICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgZWxlbWVudCwKKyAgICAgICAgImVsZW1lbnQgaXMgYWxyZWFkeSBpbiB0aGUgJXMgc3RhdGUiLAorICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAoc3RhdGUpKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworICB9Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfZ2V0X2ZhY3Rvcnk6CisgKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudCB0byByZXF1ZXN0IHRoZSBlbGVtZW50IGZhY3Rvcnkgb2YuCisgKgorICogUmV0cmlldmVzIHRoZSBmYWN0b3J5IHRoYXQgd2FzIHVzZWQgdG8gY3JlYXRlIHRoaXMgZWxlbWVudC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjR3N0RWxlbWVudEZhY3RvcnkgdXNlZCBmb3IgY3JlYXRpbmcgdGhpcworICogICAgIGVsZW1lbnQuIG5vIHJlZmNvdW50aW5nIGlzIG5lZWRlZC4KKyAqLworR3N0RWxlbWVudEZhY3RvcnkgKgorZ3N0X2VsZW1lbnRfZ2V0X2ZhY3RvcnkgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBOVUxMKTsKKworICByZXR1cm4gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChlbGVtZW50KS0+ZWxlbWVudGZhY3Rvcnk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfZWxlbWVudF9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQoreworICBHc3RFbGVtZW50ICplbGVtZW50ID0gR1NUX0VMRU1FTlRfQ0FTVCAob2JqZWN0KTsKKyAgR3N0Q2xvY2sgKipjbG9ja19wOworICBHc3RCdXMgKipidXNfcDsKKworICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX1JFRkNPVU5USU5HLCBlbGVtZW50LCAiZGlzcG9zZSIpOworCisgIGlmIChHU1RfU1RBVEUgKGVsZW1lbnQpICE9IEdTVF9TVEFURV9OVUxMKQorICAgIGdvdG8gbm90X251bGw7CisKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfRUxFTUVOVF9QQURTLCBlbGVtZW50LAorICAgICAgInJlbW92aW5nICVkIHBhZHMiLCBnX2xpc3RfbGVuZ3RoIChlbGVtZW50LT5wYWRzKSk7CisgIC8qIGZpcnN0IHdlIGJyZWFrIGFsbCBvdXIgbGlua3Mgd2l0aCB0aGUgb3V0c2lkZSAqLworICB3aGlsZSAoZWxlbWVudC0+cGFkcyAmJiBlbGVtZW50LT5wYWRzLT5kYXRhKSB7CisgICAgLyogZG9uJ3QgY2FsbCBfcmVtb3ZlX3BhZCB3aXRoIE5VTEwgKi8KKyAgICBnc3RfZWxlbWVudF9yZW1vdmVfcGFkIChlbGVtZW50LCBHU1RfUEFEX0NBU1QgKGVsZW1lbnQtPnBhZHMtPmRhdGEpKTsKKyAgfQorICBpZiAoR19VTkxJS0VMWSAoZWxlbWVudC0+cGFkcyAhPSBOVUxMKSkgeworICAgIGdfY3JpdGljYWwgKCJjb3VsZCBub3QgcmVtb3ZlIHBhZHMgZnJvbSBlbGVtZW50ICVzIiwKKyAgICAgICAgR1NUX1NUUl9OVUxMIChHU1RfT0JKRUNUX05BTUUgKG9iamVjdCkpKTsKKyAgfQorCisgIEdTVF9PQkpFQ1RfTE9DSyAoZWxlbWVudCk7CisgIGNsb2NrX3AgPSAmZWxlbWVudC0+Y2xvY2s7CisgIGJ1c19wID0gJmVsZW1lbnQtPmJ1czsKKyAgZ3N0X29iamVjdF9yZXBsYWNlICgoR3N0T2JqZWN0ICoqKSBjbG9ja19wLCBOVUxMKTsKKyAgZ3N0X29iamVjdF9yZXBsYWNlICgoR3N0T2JqZWN0ICoqKSBidXNfcCwgTlVMTCk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKKworICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX1JFRkNPVU5USU5HLCBlbGVtZW50LCAicGFyZW50IGNsYXNzIGRpc3Bvc2UiKTsKKworICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKKworICByZXR1cm47CisKKyAgLyogRVJST1JTICovCitub3RfbnVsbDoKKyAgeworICAgIGdib29sZWFuIGlzX2xvY2tlZDsKKworICAgIGlzX2xvY2tlZCA9IEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKGVsZW1lbnQsIEdTVF9FTEVNRU5UX0xPQ0tFRF9TVEFURSk7CisgICAgZ19jcml0aWNhbAorICAgICAgICAoIlxuVHJ5aW5nIHRvIGRpc3Bvc2UgZWxlbWVudCAlcywgYnV0IGl0IGlzIGluICVzJXMgaW5zdGVhZCBvZiB0aGUgTlVMTCIKKyAgICAgICAgIiBzdGF0ZS5cbiIKKyAgICAgICAgIllvdSBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0IGVsZW1lbnRzIHRvIHRoZSBOVUxMIHN0YXRlIGJlZm9yZVxuIgorICAgICAgICAiZHJvcHBpbmcgdGhlIGZpbmFsIHJlZmVyZW5jZSwgdG8gYWxsb3cgdGhlbSB0byBjbGVhbiB1cC5cbiIKKyAgICAgICAgIlRoaXMgcHJvYmxlbSBtYXkgYWxzbyBiZSBjYXVzZWQgYnkgYSByZWZjb3VudGluZyBidWcgaW4gdGhlXG4iCisgICAgICAgICJhcHBsaWNhdGlvbiBvciBzb21lIGVsZW1lbnQuXG4iLAorICAgICAgICBHU1RfT0JKRUNUX05BTUUgKGVsZW1lbnQpLAorICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAoR1NUX1NUQVRFIChlbGVtZW50KSksCisgICAgICAgIGlzX2xvY2tlZCA/ICIgKGxvY2tlZCkiIDogIiIpOworICAgIHJldHVybjsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZ3N0X2VsZW1lbnRfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCit7CisgIEdzdEVsZW1lbnQgKmVsZW1lbnQgPSBHU1RfRUxFTUVOVF9DQVNUIChvYmplY3QpOworCisgIEdTVF9DQVRfSU5GT19PQkpFQ1QgKEdTVF9DQVRfUkVGQ09VTlRJTkcsIGVsZW1lbnQsICJmaW5hbGl6ZSIpOworCisgIGdfY29uZF9mcmVlIChlbGVtZW50LT5zdGF0ZV9jb25kKTsKKyAgZ19zdGF0aWNfcmVjX211dGV4X2ZyZWUgKCZlbGVtZW50LT5zdGF0ZV9sb2NrKTsKKworICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX1JFRkNPVU5USU5HLCBlbGVtZW50LCAiZmluYWxpemUgcGFyZW50Iik7CisKKyAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2VsZW1lbnRfc2V0X2J1c19mdW5jIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0QnVzICogYnVzKQoreworICBHc3RCdXMgKipidXNfcDsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCkpOworCisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1BBUkVOVEFHRSwgZWxlbWVudCwgInNldHRpbmcgYnVzIHRvICVwIiwgYnVzKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOworICBidXNfcCA9ICZHU1RfRUxFTUVOVF9CVVMgKGVsZW1lbnQpOworICBnc3Rfb2JqZWN0X3JlcGxhY2UgKChHc3RPYmplY3QgKiopIGJ1c19wLCBHU1RfT0JKRUNUX0NBU1QgKGJ1cykpOworICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfc2V0X2J1czoKKyAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50IHRvIHNldCB0aGUgYnVzIG9mLgorICogQGJ1czogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI0dzdEJ1cyB0byBzZXQuCisgKgorICogU2V0cyB0aGUgYnVzIG9mIHRoZSBlbGVtZW50LiBJbmNyZWFzZXMgdGhlIHJlZmNvdW50IG9uIHRoZSBidXMuCisgKiBGb3IgaW50ZXJuYWwgdXNlIG9ubHksIHVubGVzcyB5b3UncmUgdGVzdGluZyBlbGVtZW50cy4KKyAqCisgKiBNVCBzYWZlLgorICovCit2b2lkCitnc3RfZWxlbWVudF9zZXRfYnVzIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0QnVzICogYnVzKQoreworICBHc3RFbGVtZW50Q2xhc3MgKm9jbGFzczsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCkpOworCisgIG9jbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAoZWxlbWVudCk7CisKKyAgaWYgKG9jbGFzcy0+c2V0X2J1cykKKyAgICBvY2xhc3MtPnNldF9idXMgKGVsZW1lbnQsIGJ1cyk7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfZ2V0X2J1czoKKyAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50IHRvIGdldCB0aGUgYnVzIG9mLgorICoKKyAqIFJldHVybnMgdGhlIGJ1cyBvZiB0aGUgZWxlbWVudC4gTm90ZSB0aGF0IG9ubHkgYSAjR3N0UGlwZWxpbmUgd2lsbCBwcm92aWRlIGEKKyAqIGJ1cyBmb3IgdGhlIGFwcGxpY2F0aW9uLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIGVsZW1lbnQncyAjR3N0QnVzLiB1bnJlZiBhZnRlciB1c2FnZS4KKyAqCisgKiBNVCBzYWZlLgorICovCitHc3RCdXMgKgorZ3N0X2VsZW1lbnRfZ2V0X2J1cyAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCit7CisgIEdzdEJ1cyAqcmVzdWx0ID0gTlVMTDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCByZXN1bHQpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoZWxlbWVudCk7CisgIGlmICgocmVzdWx0ID0gR1NUX0VMRU1FTlRfQlVTIChlbGVtZW50KSkpCisgICAgZ3N0X29iamVjdF9yZWYgKHJlc3VsdCk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKKworICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9CVVMsIGVsZW1lbnQsICJnb3QgYnVzICUiIEdTVF9QVFJfRk9STUFULAorICAgICAgcmVzdWx0KTsKKworICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGVsZW1lbnQuaCBiL2dzdC9nc3RlbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNjMzBlZAotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RlbGVtZW50LmgKQEAgLTAsMCArMSw4MTEgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgMjAwMCwyMDA0IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+CisgKgorICogZ3N0ZWxlbWVudC5oOiBIZWFkZXIgZm9yIEdzdEVsZW1lbnQKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKKyNpZm5kZWYgX19HU1RfRUxFTUVOVF9IX18KKyNkZWZpbmUgX19HU1RfRUxFTUVOVF9IX18KKworLyogZ3N0ZWxlbWVudC5oIGFuZCBnc3RlbGVtZW50ZmFjdG9yeS5oIGluY2x1ZGUgZWFjaG90aGVyICovCit0eXBlZGVmIHN0cnVjdCBfR3N0RWxlbWVudCBHc3RFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX0dzdEVsZW1lbnRDbGFzcyBHc3RFbGVtZW50Q2xhc3M7CisKKy8qIGdzdG1lc3NhZ2UuaCBuZWVkcyBTdGF0ZSAqLworLyoqCisgKiBHc3RTdGF0ZToKKyAqIEBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HOiBubyBwZW5kaW5nIHN0YXRlLgorICogQEdTVF9TVEFURV9OVUxMICAgICAgICA6IHRoZSBOVUxMIHN0YXRlIG9yIGluaXRpYWwgc3RhdGUgb2YgYW4gZWxlbWVudC4KKyAqIEBHU1RfU1RBVEVfUkVBRFkgICAgICAgOiB0aGUgZWxlbWVudCBpcyByZWFkeSB0byBnbyB0byBQQVVTRUQuCisgKiBAR1NUX1NUQVRFX1BBVVNFRCAgICAgIDogdGhlIGVsZW1lbnQgaXMgUEFVU0VELCBpdCBpcyByZWFkeSB0byBhY2NlcHQgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2VzcyBkYXRhLiBTaW5rIGVsZW1lbnRzIGhvd2V2ZXIgb25seSBhY2NlcHQgb25lCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyIGFuZCB0aGVuIGJsb2NrLgorICogQEdTVF9TVEFURV9QTEFZSU5HICAgICA6IHRoZSBlbGVtZW50IGlzIFBMQVlJTkcsIHRoZSAjR3N0Q2xvY2sgaXMgcnVubmluZyBhbmQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGF0YSBpcyBmbG93aW5nLgorICoKKyAqIFRoZSBwb3NzaWJsZSBzdGF0ZXMgYW4gZWxlbWVudCBjYW4gYmUgaW4uIFN0YXRlcyBjYW4gYmUgY2hhbmdlZCB1c2luZworICogZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKCkgYW5kIGNoZWNrZWQgdXNpbmcgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKCkuCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIEdTVF9TVEFURV9WT0lEX1BFTkRJTkcgICAgICAgID0gMCwKKyAgR1NUX1NUQVRFX05VTEwgICAgICAgICAgICAgICAgPSAxLAorICBHU1RfU1RBVEVfUkVBRFkgICAgICAgICAgICAgICA9IDIsCisgIEdTVF9TVEFURV9QQVVTRUQgICAgICAgICAgICAgID0gMywKKyAgR1NUX1NUQVRFX1BMQVlJTkcgICAgICAgICAgICAgPSA0Cit9IEdzdFN0YXRlOworCisKKyNpbmNsdWRlIDxnc3QvZ3N0Y29uZmlnLmg+CisjaW5jbHVkZSA8Z3N0L2dzdG9iamVjdC5oPgorI2luY2x1ZGUgPGdzdC9nc3RwYWQuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0YnVzLmg+CisjaW5jbHVkZSA8Z3N0L2dzdGNsb2NrLmg+CisjaW5jbHVkZSA8Z3N0L2dzdGVsZW1lbnRmYWN0b3J5Lmg+CisjaW5jbHVkZSA8Z3N0L2dzdHBsdWdpbi5oPgorI2luY2x1ZGUgPGdzdC9nc3RwbHVnaW5mZWF0dXJlLmg+CisjaW5jbHVkZSA8Z3N0L2dzdGluZGV4Lmg+CisjaW5jbHVkZSA8Z3N0L2dzdGluZGV4ZmFjdG9yeS5oPgorI2luY2x1ZGUgPGdzdC9nc3RpdGVyYXRvci5oPgorI2luY2x1ZGUgPGdzdC9nc3RtZXNzYWdlLmg+CisjaW5jbHVkZSA8Z3N0L2dzdHF1ZXJ5Lmg+CisjaW5jbHVkZSA8Z3N0L2dzdHRhZ2xpc3QuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEdTVF9UWVBFX0VMRU1FTlQgICAgICAgICAgICAgICAgKGdzdF9lbGVtZW50X2dldF90eXBlICgpKQorI2RlZmluZSBHU1RfSVNfRUxFTUVOVChvYmopICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX0VMRU1FTlQpKQorI2RlZmluZSBHU1RfSVNfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfRUxFTUVOVCkpCisjZGVmaW5lIEdTVF9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9FTEVNRU5ULCBHc3RFbGVtZW50Q2xhc3MpKQorI2RlZmluZSBHU1RfRUxFTUVOVChvYmopICAgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX0VMRU1FTlQsIEdzdEVsZW1lbnQpKQorI2RlZmluZSBHU1RfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfRUxFTUVOVCwgR3N0RWxlbWVudENsYXNzKSkKKyNkZWZpbmUgR1NUX0VMRU1FTlRfQ0FTVChvYmopICAgICAgICAgICAoKEdzdEVsZW1lbnQqKShvYmopKQorCisvKioKKyAqIEdzdFN0YXRlQ2hhbmdlUmV0dXJuOgorICogQEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSAgIDogdGhlIHN0YXRlIGNoYW5nZSBmYWlsZWQKKyAqIEBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MgICA6IHRoZSBzdGF0ZSBjaGFuZ2Ugc3VjY2VlZGVkCisgKiBAR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyAgICAgOiB0aGUgc3RhdGUgY2hhbmdlIHdpbGwgaGFwcGVuIGFzeW5jaHJvbm91c2x5CisgKiBAR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMOiB0aGUgc3RhdGUgY2hhbmdlIHN1Y2NlZWRlZCBidXQgdGhlIGVsZW1lbnQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbm5vdCBwcm9kdWNlIGRhdGEgaW4gJUdTVF9TVEFURV9QQVVTRUQuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHR5cGljYWxseSBoYXBwZW5zIHdpdGggbGl2ZSBzb3VyY2VzLgorICoKKyAqIFRoZSBwb3NzaWJsZSByZXR1cm4gdmFsdWVzIGZyb20gYSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gc3VjaCBhcyAKKyAqIGdzdF9lbGVtZW50X3NldF9zdGF0ZSgpLiBPbmx5IEBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUgaXMgYSByZWFsIGZhaWx1cmUuCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSAgICAgICAgICAgICA9IDAsCisgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyAgICAgICAgICAgICA9IDEsCisgIEdTVF9TVEFURV9DSEFOR0VfQVNZTkMgICAgICAgICAgICAgICA9IDIsCisgIEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCAgICAgICAgICA9IDMKK30gR3N0U3RhdGVDaGFuZ2VSZXR1cm47CisKKy8qIE5PVEU6IHRoaXMgcHJvYmFibHkgc2hvdWxkIGJlIGRvbmUgd2l0aCBhbiAjaWZkZWYgdG8gZGVjaWRlCisgKiB3aGV0aGVyIHRvIHNhZmUtY2FzdCBvciB0byBqdXN0IGRvIHRoZSBub24tY2hlY2tpbmcgY2FzdC4KKyAqLworCisvKioKKyAqIEdTVF9TVEFURToKKyAqIEBlbGVtOiBhICNHc3RFbGVtZW50IHRvIHJldHVybiBzdGF0ZSBmb3IuCisgKgorICogVGhpcyBtYWNybyByZXR1cm5zIHRoZSBjdXJyZW50ICNHc3RTdGF0ZSBvZiB0aGUgZWxlbWVudC4KKyAqLworI2RlZmluZSBHU1RfU1RBVEUoZWxlbSkgICAgICAgICAgICAgICAgIChHU1RfRUxFTUVOVF9DQVNUKGVsZW0pLT5jdXJyZW50X3N0YXRlKQorCisvKioKKyAqIEdTVF9TVEFURV9ORVhUOgorICogQGVsZW06IGEgI0dzdEVsZW1lbnQgdG8gcmV0dXJuIHRoZSBuZXh0IHN0YXRlIGZvci4KKyAqCisgKiBUaGlzIG1hY3JvIHJldHVybnMgdGhlIG5leHQgI0dzdFN0YXRlIG9mIHRoZSBlbGVtZW50LgorICovCisjZGVmaW5lIEdTVF9TVEFURV9ORVhUKGVsZW0pICAgICAgICAgICAgKEdTVF9FTEVNRU5UX0NBU1QoZWxlbSktPm5leHRfc3RhdGUpCisKKy8qKgorICogR1NUX1NUQVRFX1BFTkRJTkc6CisgKiBAZWxlbTogYSAjR3N0RWxlbWVudCB0byByZXR1cm4gdGhlIHBlbmRpbmcgc3RhdGUgZm9yLgorICoKKyAqIFRoaXMgbWFjcm8gcmV0dXJucyB0aGUgY3VycmVudGx5IHBlbmRpbmcgI0dzdFN0YXRlIG9mIHRoZSBlbGVtZW50LgorICovCisjZGVmaW5lIEdTVF9TVEFURV9QRU5ESU5HKGVsZW0pICAgICAgICAgKEdTVF9FTEVNRU5UX0NBU1QoZWxlbSktPnBlbmRpbmdfc3RhdGUpCisKKy8qKgorICogR1NUX1NUQVRFX1RBUkdFVDoKKyAqIEBlbGVtOiBhICNHc3RFbGVtZW50IHRvIHJldHVybiB0aGUgdGFyZ2V0IHN0YXRlIGZvci4KKyAqCisgKiBUaGlzIG1hY3JvIHJldHVybnMgdGhlIHRhcmdldCAjR3N0U3RhdGUgb2YgdGhlIGVsZW1lbnQuCisgKgorICogU2luY2U6IDAuMTAuMTMKKyAqLworI2RlZmluZSBHU1RfU1RBVEVfVEFSR0VUKGVsZW0pICAgICAgICAgIChHU1RfRUxFTUVOVF9DQVNUKGVsZW0pLT50YXJnZXRfc3RhdGUpCisKKy8qKgorICogR1NUX1NUQVRFX1JFVFVSTjoKKyAqIEBlbGVtOiBhICNHc3RFbGVtZW50IHRvIHJldHVybiB0aGUgbGFzdCBzdGF0ZSByZXN1bHQgZm9yLgorICoKKyAqIFRoaXMgbWFjcm8gcmV0dXJucyB0aGUgbGFzdCAjR3N0U3RhdGVDaGFuZ2VSZXR1cm4gdmFsdWUuCisgKi8KKyNkZWZpbmUgR1NUX1NUQVRFX1JFVFVSTihlbGVtKSAgICAgICAgICAoR1NUX0VMRU1FTlRfQ0FTVChlbGVtKS0+bGFzdF9yZXR1cm4pCisKKyNkZWZpbmUgX19HU1RfU0lHTih2YWwpICAgICAgICAgICAgICAgICAoKHZhbCkgPCAwID8gLTEgOiAoKHZhbCkgPiAwID8gMSA6IDApKQorLyoqCisgKiBHU1RfU1RBVEVfR0VUX05FWFQ6CisgKiBAY3VyOiBBIHN0YXJ0aW5nICNHc3RTdGF0ZQorICogQHBlbmRpbmc6IEEgdGFyZ2V0ICNHc3RTdGF0ZQorICoKKyAqIEdpdmVuIGEgY3VycmVudCBzdGF0ZSBAY3VyIGFuZCBhIHRhcmdldCBzdGF0ZSBAcGVuZGluZywgY2FsY3VsYXRlIHRoZSBuZXh0IChpbnRlcm1lZGlhdGUpCisgKiAjR3N0U3RhdGUuCisgKi8KKyNkZWZpbmUgR1NUX1NUQVRFX0dFVF9ORVhUKGN1cixwZW5kaW5nKSAgICAgICAgICgoR3N0U3RhdGUpKChjdXIpICsgX19HU1RfU0lHTiAoKGdpbnQpKHBlbmRpbmcpIC0gKGdpbnQpKGN1cikpKSkKKy8qKgorICogR1NUX1NUQVRFX1RSQU5TSVRJT046CisgKiBAY3VyOiBBIGN1cnJlbnQgc3RhdGUKKyAqIEBuZXh0OiBBIG5leHQgc3RhdGUKKyAqCisgKiBHaXZlbiBhIGN1cnJlbnQgc3RhdGUgQGN1ciBhbmQgYSBuZXh0IHN0YXRlIEBuZXh0LCBjYWxjdWxhdGUgdGhlIGFzc29jaWF0ZWQKKyAqICNHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uLgorICovCisjZGVmaW5lIEdTVF9TVEFURV9UUkFOU0lUSU9OKGN1cixuZXh0KSAgICAgICAgICAoKEdzdFN0YXRlQ2hhbmdlKSgoKGN1cik8PDMpfChuZXh0KSkpCisvKioKKyAqIEdTVF9TVEFURV9UUkFOU0lUSU9OX0NVUlJFTlQ6CisgKiBAdHJhbnM6IEEgI0dzdFN0YXRlQ2hhbmdlCisgKgorICogR2l2ZW4gYSBzdGF0ZSB0cmFuc2l0aW9uIEB0cmFucywgZXh0cmFjdCB0aGUgY3VycmVudCAjR3N0U3RhdGUuCisgKi8KKyNkZWZpbmUgR1NUX1NUQVRFX1RSQU5TSVRJT05fQ1VSUkVOVCh0cmFucykgICAgICgoR3N0U3RhdGUpKCh0cmFucyk+PjMpKQorLyoqCisgKiBHU1RfU1RBVEVfVFJBTlNJVElPTl9ORVhUOgorICogQHRyYW5zOiBBICNHc3RTdGF0ZUNoYW5nZQorICoKKyAqIEdpdmVuIGEgc3RhdGUgdHJhbnNpdGlvbiBAdHJhbnMsIGV4dHJhY3QgdGhlIG5leHQgI0dzdFN0YXRlLgorICovCisjZGVmaW5lIEdTVF9TVEFURV9UUkFOU0lUSU9OX05FWFQodHJhbnMpICAgICAgICAoKEdzdFN0YXRlKSgodHJhbnMpJjB4NykpCisKKy8qKgorICogR3N0U3RhdGVDaGFuZ2U6CisgKiBAR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZICAgIDogc3RhdGUgY2hhbmdlIGZyb20gTlVMTCB0byBSRUFEWS4KKyAqIDxpdGVtaXplZGxpc3Q+CisgKiAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICBUaGUgZWxlbWVudCBtdXN0IGNoZWNrIGlmIHRoZSByZXNvdXJjZXMgaXQgbmVlZHMgYXJlIGF2YWlsYWJsZS4gRGV2aWNlCisgKiAgICAgc2lua3MgYW5kIC1zb3VyY2VzIHR5cGljYWxseSB0cnkgdG8gcHJvYmUgdGhlIGRldmljZSB0byBjb25zdHJhaW4gdGhlaXIKKyAqICAgICBjYXBzLgorICogICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgIFRoZSBlbGVtZW50IG9wZW5zIHRoZSBkZXZpY2UgKGluIGNhc2UgZmVhdHVyZSBuZWVkIHRvIGJlIHByb2JlZCkuCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogPC9pdGVtaXplZGxpc3Q+CisgKiBAR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQgIDogc3RhdGUgY2hhbmdlIGZyb20gUkVBRFkgdG8gUEFVU0VELgorICogPGl0ZW1pemVkbGlzdD4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgIFRoZSBlbGVtZW50IHBhZHMgYXJlIGFjdGl2YXRlZCBpbiBvcmRlciB0byByZWNlaXZlIGRhdGEgaW4gUEFVU0VELgorICogICAgIFN0cmVhbWluZyB0aHJlYWRzIGFyZSBzdGFydGVkLgorICogICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgIFNvbWUgZWxlbWVudHMgbWlnaHQgbmVlZCB0byByZXR1cm4gJUdTVF9TVEFURV9DSEFOR0VfQVNZTkMgYW5kIGNvbXBsZXRlCisgKiAgICAgdGhlIHN0YXRlIGNoYW5nZSB3aGVuIHRoZXkgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24uIEl0IGlzIGEgcmVxdWlyZW1lbnQKKyAqICAgICBmb3Igc2lua3MgdG8gcmV0dXJuICVHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DIGFuZCBjb21wbGV0ZSB0aGUgc3RhdGUgY2hhbmdlCisgKiAgICAgd2hlbiB0aGV5IHJlY2VpdmUgdGhlIGZpcnN0IGJ1ZmZlciBvciAlR1NUX0VWRU5UX0VPUyAocHJlcm9sbCkuCisgKiAgICAgU2lua3MgYWxzbyBibG9jayB0aGUgZGF0YWZsb3cgd2hlbiBpbiBQQVVTRUQuCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgQSBwaXBlbGluZSByZXNldHMgdGhlIHJ1bm5pbmdfdGltZSB0byAwLgorICogICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgIExpdmUgc291cmNlcyByZXR1cm4gJUdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCBhbmQgZG9uJ3QgZ2VuZXJhdGUgZGF0YS4KKyAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiA8L2l0ZW1pemVkbGlzdD4KKyAqIEBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19QTEFZSU5HOiBzdGF0ZSBjaGFuZ2UgZnJvbSBQQVVTRUQgdG8gUExBWUlORy4KKyAqIDxpdGVtaXplZGxpc3Q+CisgKiAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICBNb3N0IGVsZW1lbnRzIGlnbm9yZSB0aGlzIHN0YXRlIGNoYW5nZS4KKyAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICBUaGUgcGlwZWxpbmUgc2VsZWN0cyBhICNHc3RDbG9jayBhbmQgZGlzdHJpYnV0ZXMgdGhpcyB0byBhbGwgdGhlIGNoaWxkcmVuCisgKiAgICAgYmVmb3JlIHNldHRpbmcgdGhlbSB0byBQTEFZSU5HLiBUaGlzIG1lYW5zIHRoYXQgaXQgaXMgb25seSBhbG93ZWQgdG8KKyAqICAgICBzeW5jaHJvbml6ZSBvbiB0aGUgI0dzdENsb2NrIGluIHRoZSBQTEFZSU5HIHN0YXRlLgorICogICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgIFRoZSBwaXBlbGluZSB1c2VzIHRoZSAjR3N0Q2xvY2sgYW5kIHRoZSBydW5uaW5nX3RpbWUgdG8gY2FsY3VsYXRlIHRoZQorICogICAgIGJhc2VfdGltZS4gVGhlIGJhc2VfdGltZSBpcyBkaXN0cmlidXRlZCB0byBhbGwgY2hpbGRyZW4gd2hlbiBwZXJmb3JtaW5nCisgKiAgICAgdGhlIHN0YXRlIGNoYW5nZS4KKyAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICBTaW5rIGVsZW1lbnRzIHN0b3AgYmxvY2tpbmcgb24gdGhlIHByZXJvbGwgYnVmZmVyIG9yIGV2ZW50IGFuZCBzdGFydAorICogICAgIHJlbmRlcmluZyB0aGUgZGF0YS4KKyAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICBTaW5rcyBjYW4gcG9zdCAlR1NUX01FU1NBR0VfRU9TIGluIHRoZSBQTEFZSU5HIHN0YXRlLiBJdCBpcyBub3QgYWxsb3dlZAorICogICAgIHRvIHBvc3QgJUdTVF9NRVNTQUdFX0VPUyB3aGVuIG5vdCBpbiB0aGUgUExBWUlORyBzdGF0ZS4KKyAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICBXaGlsZSBzdHJlYW1pbmcgaW4gUEFVU0VEIG9yIFBMQVlJTkcgZWxlbWVudHMgY2FuIGNyZWF0ZSBhbmQgcmVtb3ZlCisgKiAgICAgc29tZXRpbWVzIHBhZHMuCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgTGl2ZSBzb3VyY2VzIHN0YXJ0IGdlbmVyYXRpbmcgZGF0YSBhbmQgcmV0dXJuICVHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MuCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogPC9pdGVtaXplZGxpc3Q+CisgKiBAR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRDogc3RhdGUgY2hhbmdlIGZyb20gUExBWUlORyB0byBQQVVTRUQuCisgKiA8aXRlbWl6ZWRsaXN0PgorICogICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgTW9zdCBlbGVtZW50cyBpZ25vcmUgdGhpcyBzdGF0ZSBjaGFuZ2UuCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgVGhlIHBpcGVsaW5lIGNhbGN1bGF0ZXMgdGhlIHJ1bm5pbmdfdGltZSBiYXNlZCBvbiB0aGUgbGFzdCBzZWxlY3RlZAorICogICAgICNHc3RDbG9jayBhbmQgdGhlIGJhc2VfdGltZS4gSXQgc3RvcmVzIHRoaXMgaW5mb3JtYXRpb24gdG8gY29udGludWUKKyAqICAgICBwbGF5YmFjayB3aGVuIGdvaW5nIGJhY2sgdG8gdGhlIFBMQVlJTkcgc3RhdGUuCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgU2lua3MgdW5ibG9jayBhbnkgI0dzdENsb2NrIHdhaXQgY2FsbHMuCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgV2hlbiBhIHNpbmsgZG9lcyBub3QgaGF2ZSBhIHBlbmRpbmcgYnVmZmVyIHRvIHBsYXksIGl0IHJldHVybnMgCisgKiAgICAgJUdTVF9TVEFURV9DSEFOR0VfQVNZTkMgZnJvbSB0aGlzIHN0YXRlIGNoYW5nZSBhbmQgY29tcGxldGVzIHRoZSBzdGF0ZQorICogICAgIGNoYW5nZSB3aGVuIGl0IHJlY2VpdmVzIGEgbmV3IGJ1ZmZlciBvciBhbiAlR1NUX0VWRU5UX0VPUy4KKyAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICBBbnkgcXVldWVkICVHU1RfTUVTU0FHRV9FT1MgaXRlbXMgYXJlIHJlbW92ZWQgc2luY2UgdGhleSB3aWxsIGJlIHJlcG9zdGVkCisgKiAgICAgd2hlbiBnb2luZyBiYWNrIHRvIHRoZSBQTEFZSU5HIHN0YXRlLiBUaGUgRU9TIG1lc3NhZ2VzIGFyZSBxdWV1ZWQgaW4KKyAqICAgICAjR3N0QmluIGNvbnRhaW5lcnMuCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgTGl2ZSBzb3VyY2VzIHN0b3AgZ2VuZXJhdGluZyBkYXRhIGFuZCByZXR1cm4gJUdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTC4KKyAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiA8L2l0ZW1pemVkbGlzdD4KKyAqIEBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWSAgOiBzdGF0ZSBjaGFuZ2UgZnJvbSBQQVVTRUQgdG8gUkVBRFkuCisgKiA8aXRlbWl6ZWRsaXN0PgorICogICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgU2lua3MgdW5ibG9jayBhbnkgd2FpdHMgaW4gdGhlIHByZXJvbGwuCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgRWxlbWVudHMgdW5ibG9jayBhbnkgd2FpdHMgb24gZGV2aWNlcworICogICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgIENoYWluIG9yIGdldF9yYW5nZSBmdW5jdGlvbnMgcmV0dXJuICVHU1RfRkxPV19XUk9OR19TVEFURS4KKyAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICBUaGUgZWxlbWVudCBwYWRzIGFyZSBkZWFjdGl2YXRlZCBzbyB0aGF0IHN0cmVhbWluZyBiZWNvbWVzIGltcG9zc2libGUgYW5kCisgKiAgICAgYWxsIHN0cmVhbWluZyB0aHJlYWRzIGFyZSBzdG9wcGVkLgorICogICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgIFRoZSBzaW5rIGZvcmdldHMgYWxsIG5lZ290aWF0ZWQgZm9ybWF0cworICogICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgIEVsZW1lbnRzIHJlbW92ZSBhbGwgc29tZXRpbWVzIHBhZHMKKyAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiA8L2l0ZW1pemVkbGlzdD4KKyAqIEBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEwgICAgOiBzdGF0ZSBjaGFuZ2UgZnJvbSBSRUFEWSB0byBOVUxMLgorICogPGl0ZW1pemVkbGlzdD4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgIEVsZW1lbnRzIGNsb3NlIGRldmljZXMKKyAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICBFbGVtZW50cyByZXNldCBhbnkgaW50ZXJuYWwgc3RhdGUuCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogPC9pdGVtaXplZGxpc3Q+CisgKgorICogVGhlc2UgYXJlIHRoZSBkaWZmZXJlbnQgc3RhdGUgY2hhbmdlcyBhbiBlbGVtZW50IGdvZXMgdGhyb3VnaC4KKyAqICVHU1RfU1RBVEVfTlVMTCAmckFycjsgJUdTVF9TVEFURV9QTEFZSU5HIGlzIGNhbGxlZCBhbiB1cHdhcmRzIHN0YXRlIGNoYW5nZQorICogYW5kICVHU1RfU1RBVEVfUExBWUlORyAmckFycjsgJUdTVF9TVEFURV9OVUxMIGEgZG93bndhcmRzIHN0YXRlIGNoYW5nZS4KKyAqLwordHlwZWRlZiBlbnVtIC8qPCBmbGFncz0wID4qLworeworICBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFkgICAgICAgID0gKEdTVF9TVEFURV9OVUxMPDwzKSB8IEdTVF9TVEFURV9SRUFEWSwKKyAgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQgICAgICA9IChHU1RfU1RBVEVfUkVBRFk8PDMpIHwgR1NUX1NUQVRFX1BBVVNFRCwKKyAgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUExBWUlORyAgICA9IChHU1RfU1RBVEVfUEFVU0VEPDwzKSB8IEdTVF9TVEFURV9QTEFZSU5HLAorICBHU1RfU1RBVEVfQ0hBTkdFX1BMQVlJTkdfVE9fUEFVU0VEICAgID0gKEdTVF9TVEFURV9QTEFZSU5HPDwzKSB8IEdTVF9TVEFURV9QQVVTRUQsCisgIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZICAgICAgPSAoR1NUX1NUQVRFX1BBVVNFRDw8MykgfCBHU1RfU1RBVEVfUkVBRFksCisgIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTCAgICAgICAgPSAoR1NUX1NUQVRFX1JFQURZPDwzKSB8IEdTVF9TVEFURV9OVUxMCit9IEdzdFN0YXRlQ2hhbmdlOworCisvKioKKyAqIEdzdEVsZW1lbnRGbGFnczoKKyAqIEBHU1RfRUxFTUVOVF9MT0NLRURfU1RBVEU6IGlnbm9yZSBzdGF0ZSBjaGFuZ2VzIGZyb20gcGFyZW50CisgKiBAR1NUX0VMRU1FTlRfSVNfU0lOSzogdGhlIGVsZW1lbnQgaXMgYSBzaW5rCisgKiBAR1NUX0VMRU1FTlRfVU5QQVJFTlRJTkc6IENoaWxkIGlzIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgcGFyZW50IGJpbi4KKyAqICBnc3RfYmluX3JlbW92ZSgpIG9uIGEgY2hpbGQgYWxyZWFkeSBiZWluZyByZW1vdmVkIGltbWVkaWF0ZWx5IHJldHVybnMgRkFMU0UKKyAqIEBHU1RfRUxFTUVOVF9JU19TT1VSQ0U6IHRoZSBlbGVtZW50IGlzIGEgc291cmNlLiBTaW5jZSAwLjEwLjMxCisgKiBAR1NUX0VMRU1FTlRfRkxBR19MQVNUOiBvZmZzZXQgdG8gZGVmaW5lIG1vcmUgZmxhZ3MKKyAqCisgKiBUaGUgc3RhbmRhcmQgZmxhZ3MgdGhhdCBhbiBlbGVtZW50IG1heSBoYXZlLgorICovCit0eXBlZGVmIGVudW0KK3sKKyAgR1NUX0VMRU1FTlRfTE9DS0VEX1NUQVRFICAgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgMCksCisgIEdTVF9FTEVNRU5UX0lTX1NJTksgICAgICAgICAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUIDw8IDEpLAorICBHU1RfRUxFTUVOVF9VTlBBUkVOVElORyAgICAgICA9IChHU1RfT0JKRUNUX0ZMQUdfTEFTVCA8PCAyKSwKKyAgR1NUX0VMRU1FTlRfSVNfU09VUkNFICAgICAgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgMyksCisgIC8qIHBhZGRpbmcgKi8KKyAgR1NUX0VMRU1FTlRfRkxBR19MQVNUICAgICAgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgMTYpCit9IEdzdEVsZW1lbnRGbGFnczsKKworLyoqCisgKiBHU1RfRUxFTUVOVF9JU19MT0NLRURfU1RBVEU6CisgKiBAZWxlbTogQSAjR3N0RWxlbWVudCB0byBxdWVyeQorICoKKyAqIENoZWNrIGlmIHRoZSBlbGVtZW50IGlzIGluIHRoZSBsb2NrZWQgc3RhdGUgYW5kIHRoZXJlZm9yZSB3aWxsIGlnbm9yZSBzdGF0ZQorICogY2hhbmdlcyBmcm9tIGl0cyBwYXJlbnQgb2JqZWN0LgorICovCisjZGVmaW5lIEdTVF9FTEVNRU5UX0lTX0xPQ0tFRF9TVEFURShlbGVtKSAgICAgICAgKEdTVF9PQkpFQ1RfRkxBR19JU19TRVQoZWxlbSxHU1RfRUxFTUVOVF9MT0NLRURfU1RBVEUpKQorCisvKioKKyAqIEdTVF9FTEVNRU5UX05BTUU6CisgKiBAZWxlbTogQSAjR3N0RWxlbWVudCB0byBxdWVyeQorICoKKyAqIEdldHMgdGhlIG5hbWUgb2YgdGhpcyBlbGVtZW50LiBVc2Ugb25seSBpbiBjb3JlIGFzIHRoaXMgaXMgbm90CisgKiBBQkktY29tcGF0aWJsZS4gT3RoZXJzIHVzZSBnc3RfZWxlbWVudF9nZXRfbmFtZSgpCisgKi8KKyNkZWZpbmUgR1NUX0VMRU1FTlRfTkFNRShlbGVtKSAgICAgICAgICAgICAgICAgIChHU1RfT0JKRUNUX05BTUUoZWxlbSkpCisKKy8qKgorICogR1NUX0VMRU1FTlRfUEFSRU5UOgorICogQGVsZW06IEEgI0dzdEVsZW1lbnQgdG8gcXVlcnkKKyAqCisgKiBHZXQgdGhlIHBhcmVudCBvYmplY3Qgb2YgdGhpcyBlbGVtZW50LgorICovCisjZGVmaW5lIEdTVF9FTEVNRU5UX1BBUkVOVChlbGVtKSAgICAgICAgICAgICAgICAoR1NUX0VMRU1FTlRfQ0FTVChHU1RfT0JKRUNUX1BBUkVOVChlbGVtKSkpCisKKy8qKgorICogR1NUX0VMRU1FTlRfQlVTOgorICogQGVsZW06IEEgI0dzdEVsZW1lbnQgdG8gcXVlcnkKKyAqCisgKiBHZXQgdGhlIG1lc3NhZ2UgYnVzIG9mIHRoaXMgZWxlbWVudC4KKyAqLworI2RlZmluZSBHU1RfRUxFTUVOVF9CVVMoZWxlbSkgICAgICAgICAgICAgICAgICAgKEdTVF9FTEVNRU5UX0NBU1QoZWxlbSktPmJ1cykKKworLyoqCisgKiBHU1RfRUxFTUVOVF9DTE9DSzoKKyAqIEBlbGVtOiBBICNHc3RFbGVtZW50IHRvIHF1ZXJ5CisgKgorICogR2V0IHRoZSBjbG9jayBvZiB0aGlzIGVsZW1lbnQKKyAqLworI2RlZmluZSBHU1RfRUxFTUVOVF9DTE9DSyhlbGVtKSAgICAgICAgICAgICAgICAgKEdTVF9FTEVNRU5UX0NBU1QoZWxlbSktPmNsb2NrKQorCisvKioKKyAqIEdTVF9FTEVNRU5UX1BBRFM6CisgKiBAZWxlbTogQSAjR3N0RWxlbWVudCB0byBxdWVyeQorICoKKyAqIEdldCB0aGUgcGFkcyBvZiB0aGlzIGVsZW1lbnRzLgorICovCisjZGVmaW5lIEdTVF9FTEVNRU5UX1BBRFMoZWxlbSkgICAgICAgICAgICAgICAgICAoR1NUX0VMRU1FTlRfQ0FTVChlbGVtKS0+cGFkcykKKworLyoqCisgKiBHU1RfRUxFTUVOVF9TVEFSVF9USU1FOgorICogQGVsZW06IGEgI0dzdEVsZW1lbnQgdG8gcmV0dXJuIHRoZSBzdGFydCB0aW1lIGZvci4KKyAqCisgKiBUaGlzIG1hY3JvIHJldHVybnMgdGhlIHN0YXJ0X3RpbWUgb2YgdGhlIEBlbGVtLiBUaGUgc3RhcnRfdGltZSBpcyB0aGUKKyAqIHJ1bm5pbmdfdGltZSBvZiB0aGUgcGlwZWxpbmUgd2hlbiB0aGUgZWxlbWVudCB3ZW50IHRvIFBBVVNFRC4KKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICovCisjZGVmaW5lIEdTVF9FTEVNRU5UX1NUQVJUX1RJTUUoZWxlbSkgICAgICAgICAgICAoR1NUX0VMRU1FTlRfQ0FTVChlbGVtKS0+c3RhcnRfdGltZSkKKworLyoqCisgKiBHU1RfRUxFTUVOVF9FUlJPUjoKKyAqIEBlbDogICAgIHRoZSBlbGVtZW50IHRoYXQgZ2VuZXJhdGVzIHRoZSBlcnJvcgorICogQGRvbWFpbjogbGlrZSBDT1JFLCBMSUJSQVJZLCBSRVNPVVJDRSBvciBTVFJFQU0gKHNlZSAjZ3N0cmVhbWVyLUdzdEdFcnJvcikKKyAqIEBjb2RlOiAgIGVycm9yIGNvZGUgZGVmaW5lZCBmb3IgdGhhdCBkb21haW4gKHNlZSAjZ3N0cmVhbWVyLUdzdEdFcnJvcikKKyAqIEB0ZXh0OiAgIHRoZSBtZXNzYWdlIHRvIGRpc3BsYXkgKGZvcm1hdCBzdHJpbmcgYW5kIGFyZ3MgZW5jbG9zZWQgaW4KKyAgICAgICAgICAgIHBhcmVudGhlc2VzKQorICogQGRlYnVnOiAgZGVidWdnaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgbWVzc2FnZSAoZm9ybWF0IHN0cmluZyBhbmQgYXJncworICAgICAgICAgICAgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMpCisgKgorICogVXRpbGl0eSBmdW5jdGlvbiB0aGF0IGVsZW1lbnRzIGNhbiB1c2UgaW4gY2FzZSB0aGV5IGVuY291bnRlcmVkIGEgZmF0YWwKKyAqIGRhdGEgcHJvY2Vzc2luZyBlcnJvci4gVGhlIHBpcGVsaW5lIHdpbGwgcG9zdCBhbiBlcnJvciBtZXNzYWdlIGFuZCB0aGUKKyAqIGFwcGxpY2F0aW9uIHdpbGwgYmUgcmVxdWVzdGVkIHRvIHN0b3AgZnVydGhlciBtZWRpYSBwcm9jZXNzaW5nLgorICovCisjZGVmaW5lIEdTVF9FTEVNRU5UX0VSUk9SKGVsLCBkb21haW4sIGNvZGUsIHRleHQsIGRlYnVnKSAgICAgICAgICAgICAgICBcCitHX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGdjaGFyICpfX3R4dCA9IF9nc3RfZWxlbWVudF9lcnJvcl9wcmludGYgdGV4dDsgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGdjaGFyICpfX2RiZyA9IF9nc3RfZWxlbWVudF9lcnJvcl9wcmludGYgZGVidWc7ICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmIChfX3R4dCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChlbCwgImVycm9yOiAlcyIsIF9fdHh0KTsgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmIChfX2RiZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChlbCwgImVycm9yOiAlcyIsIF9fZGJnKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGdzdF9lbGVtZW50X21lc3NhZ2VfZnVsbCAoR1NUX0VMRU1FTlQoZWwpLCBHU1RfTUVTU0FHRV9FUlJPUiwgICAgICAgICBcCisgICAgR1NUXyAjIyBkb21haW4gIyMgX0VSUk9SLCBHU1RfICMjIGRvbWFpbiAjIyBfRVJST1JfICMjIGNvZGUsICAgICAgICBcCisgICAgX190eHQsIF9fZGJnLCBfX0ZJTEVfXywgR1NUX0ZVTkNUSU9OLCBfX0xJTkVfXyk7ICAgICAgICAgICAgICAgICAgICBcCit9IEdfU1RNVF9FTkQKKworLyoqCisgKiBHU1RfRUxFTUVOVF9XQVJOSU5HOgorICogQGVsOiAgICAgdGhlIGVsZW1lbnQgdGhhdCBnZW5lcmF0ZXMgdGhlIHdhcm5pbmcKKyAqIEBkb21haW46IGxpa2UgQ09SRSwgTElCUkFSWSwgUkVTT1VSQ0Ugb3IgU1RSRUFNIChzZWUgI2dzdHJlYW1lci1Hc3RHRXJyb3IpCisgKiBAY29kZTogICBlcnJvciBjb2RlIGRlZmluZWQgZm9yIHRoYXQgZG9tYWluIChzZWUgI2dzdHJlYW1lci1Hc3RHRXJyb3IpCisgKiBAdGV4dDogICB0aGUgbWVzc2FnZSB0byBkaXNwbGF5IChmb3JtYXQgc3RyaW5nIGFuZCBhcmdzIGVuY2xvc2VkIGluCisgICAgICAgICAgICBwYXJlbnRoZXNlcykKKyAqIEBkZWJ1ZzogIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIG1lc3NhZ2UgKGZvcm1hdCBzdHJpbmcgYW5kIGFyZ3MKKyAgICAgICAgICAgIGVuY2xvc2VkIGluIHBhcmVudGhlc2VzKQorICoKKyAqIFV0aWxpdHkgZnVuY3Rpb24gdGhhdCBlbGVtZW50cyBjYW4gdXNlIGluIGNhc2UgdGhleSBlbmNvdW50ZXJlZCBhIG5vbi1mYXRhbAorICogZGF0YSBwcm9jZXNzaW5nIHByb2JsZW0uIFRoZSBwaXBlbGluZSB3aWxsIHBvc3QgYSB3YXJuaW5nIG1lc3NhZ2UgYW5kIHRoZQorICogYXBwbGljYXRpb24gd2lsbCBiZSBpbmZvcm1lZC4KKyAqLworI2RlZmluZSBHU1RfRUxFTUVOVF9XQVJOSU5HKGVsLCBkb21haW4sIGNvZGUsIHRleHQsIGRlYnVnKSAgICAgICAgICAgICAgXAorR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBnY2hhciAqX190eHQgPSBfZ3N0X2VsZW1lbnRfZXJyb3JfcHJpbnRmIHRleHQ7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICBnY2hhciAqX19kYmcgPSBfZ3N0X2VsZW1lbnRfZXJyb3JfcHJpbnRmIGRlYnVnOyAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAoX190eHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZWwsICJ3YXJuaW5nOiAlcyIsIF9fdHh0KTsgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAoX19kYmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZWwsICJ3YXJuaW5nOiAlcyIsIF9fZGJnKTsgICAgICAgICAgICAgICAgICAgICAgXAorICBnc3RfZWxlbWVudF9tZXNzYWdlX2Z1bGwgKEdTVF9FTEVNRU5UKGVsKSwgR1NUX01FU1NBR0VfV0FSTklORywgICAgICAgXAorICAgIEdTVF8gIyMgZG9tYWluICMjIF9FUlJPUiwgR1NUXyAjIyBkb21haW4gIyMgX0VSUk9SXyAjIyBjb2RlLCAgICAgICAgXAorICBfX3R4dCwgX19kYmcsIF9fRklMRV9fLCBHU1RfRlVOQ1RJT04sIF9fTElORV9fKTsgICAgICAgICAgICAgICAgICAgICAgXAorfSBHX1NUTVRfRU5ECisKKy8qKgorICogR1NUX0VMRU1FTlRfSU5GTzoKKyAqIEBlbDogICAgIHRoZSBlbGVtZW50IHRoYXQgZ2VuZXJhdGVzIHRoZSBpbmZvcm1hdGlvbgorICogQGRvbWFpbjogbGlrZSBDT1JFLCBMSUJSQVJZLCBSRVNPVVJDRSBvciBTVFJFQU0gKHNlZSAjZ3N0cmVhbWVyLUdzdEdFcnJvcikKKyAqIEBjb2RlOiAgIGVycm9yIGNvZGUgZGVmaW5lZCBmb3IgdGhhdCBkb21haW4gKHNlZSAjZ3N0cmVhbWVyLUdzdEdFcnJvcikKKyAqIEB0ZXh0OiAgIHRoZSBtZXNzYWdlIHRvIGRpc3BsYXkgKGZvcm1hdCBzdHJpbmcgYW5kIGFyZ3MgZW5jbG9zZWQgaW4KKyAgICAgICAgICAgIHBhcmVudGhlc2VzKQorICogQGRlYnVnOiAgZGVidWdnaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgbWVzc2FnZSAoZm9ybWF0IHN0cmluZyBhbmQgYXJncworICAgICAgICAgICAgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMpCisgKgorICogVXRpbGl0eSBmdW5jdGlvbiB0aGF0IGVsZW1lbnRzIGNhbiB1c2UgaW4gY2FzZSB0aGV5IHdhbnQgdG8gaW5mb3JtCisgKiB0aGUgYXBwbGljYXRpb24gb2Ygc29tZXRoaW5nIG5vdGV3b3J0aHkgdGhhdCBpcyBub3QgYW4gZXJyb3IuCisgKiBUaGUgcGlwZWxpbmUgd2lsbCBwb3N0IGEgaW5mbyBtZXNzYWdlIGFuZCB0aGUKKyAqIGFwcGxpY2F0aW9uIHdpbGwgYmUgaW5mb3JtZWQuCisgKgorICogU2luY2U6IDAuMTAuMTIKKyAqLworI2RlZmluZSBHU1RfRUxFTUVOVF9JTkZPKGVsLCBkb21haW4sIGNvZGUsIHRleHQsIGRlYnVnKSAgICAgICAgICAgICAgICAgXAorR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBnY2hhciAqX190eHQgPSBfZ3N0X2VsZW1lbnRfZXJyb3JfcHJpbnRmIHRleHQ7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICBnY2hhciAqX19kYmcgPSBfZ3N0X2VsZW1lbnRfZXJyb3JfcHJpbnRmIGRlYnVnOyAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAoX190eHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEdTVF9JTkZPX09CSkVDVCAoZWwsICJpbmZvOiAlcyIsIF9fdHh0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAoX19kYmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEdTVF9JTkZPX09CSkVDVCAoZWwsICJpbmZvOiAlcyIsIF9fZGJnKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBnc3RfZWxlbWVudF9tZXNzYWdlX2Z1bGwgKEdTVF9FTEVNRU5UKGVsKSwgR1NUX01FU1NBR0VfSU5GTywgICAgICAgICAgXAorICAgIEdTVF8gIyMgZG9tYWluICMjIF9FUlJPUiwgR1NUXyAjIyBkb21haW4gIyMgX0VSUk9SXyAjIyBjb2RlLCAgICAgICAgXAorICBfX3R4dCwgX19kYmcsIF9fRklMRV9fLCBHU1RfRlVOQ1RJT04sIF9fTElORV9fKTsgICAgICAgICAgICAgICAgICAgICAgXAorfSBHX1NUTVRfRU5ECisKKy8qIHRoZSBzdGF0ZSBjaGFuZ2UgbXV0ZXhlcyBhbmQgY29uZHMgKi8KKy8qKgorICogR1NUX1NUQVRFX0dFVF9MT0NLOgorICogQGVsZW06ICAgYSAjR3N0RWxlbWVudAorICoKKyAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgc3RhdGUgbG9jayBvZiBAZWxlbS4KKyAqIFRoaXMgbG9jayBpcyB1c2VkIGJ5IHRoZSBjb3JlLiAgSXQgaXMgdGFrZW4gd2hpbGUgZ2V0dGluZyBvciBzZXR0aW5nCisgKiB0aGUgc3RhdGUsIGR1cmluZyBzdGF0ZSBjaGFuZ2VzLCBhbmQgd2hpbGUgZmluYWxpemluZy4KKyAqLworI2RlZmluZSBHU1RfU1RBVEVfR0VUX0xPQ0soZWxlbSkgICAgICAgICAgICAgICAoJihHU1RfRUxFTUVOVF9DQVNUKGVsZW0pLT5zdGF0ZV9sb2NrKSkKKy8qKgorICogR1NUX1NUQVRFX0dFVF9DT05EOgorICogQGVsZW06IGEgI0dzdEVsZW1lbnQKKyAqCisgKiBHZXQgdGhlIGNvbmRpdGlvbmFsIHVzZWQgdG8gc2lnbmFsIHRoZSBjb21wbGV0aW9uIG9mIGEgc3RhdGUgY2hhbmdlLgorICovCisjZGVmaW5lIEdTVF9TVEFURV9HRVRfQ09ORChlbGVtKSAgICAgICAgICAgICAgIChHU1RfRUxFTUVOVF9DQVNUKGVsZW0pLT5zdGF0ZV9jb25kKQorCisjZGVmaW5lIEdTVF9TVEFURV9MT0NLKGVsZW0pICAgICAgICAgICAgICAgICAgIGdfc3RhdGljX3JlY19tdXRleF9sb2NrKEdTVF9TVEFURV9HRVRfTE9DSyhlbGVtKSkKKyNkZWZpbmUgR1NUX1NUQVRFX1RSWUxPQ0soZWxlbSkgICAgICAgICAgICAgICAgZ19zdGF0aWNfcmVjX211dGV4X3RyeWxvY2soR1NUX1NUQVRFX0dFVF9MT0NLKGVsZW0pKQorI2RlZmluZSBHU1RfU1RBVEVfVU5MT0NLKGVsZW0pICAgICAgICAgICAgICAgICBnX3N0YXRpY19yZWNfbXV0ZXhfdW5sb2NrKEdTVF9TVEFURV9HRVRfTE9DSyhlbGVtKSkKKyNkZWZpbmUgR1NUX1NUQVRFX1VOTE9DS19GVUxMKGVsZW0pICAgICAgICAgICAgZ19zdGF0aWNfcmVjX211dGV4X3VubG9ja19mdWxsKEdTVF9TVEFURV9HRVRfTE9DSyhlbGVtKSkKKyNkZWZpbmUgR1NUX1NUQVRFX0xPQ0tfRlVMTChlbGVtLHQpICAgICAgICAgICAgZ19zdGF0aWNfcmVjX211dGV4X2xvY2tfZnVsbChHU1RfU1RBVEVfR0VUX0xPQ0soZWxlbSksIHQpCisjZGVmaW5lIEdTVF9TVEFURV9XQUlUKGVsZW0pICAgICAgICAgICAgICAgICAgIGdfY29uZF93YWl0IChHU1RfU1RBVEVfR0VUX0NPTkQgKGVsZW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTVF9PQkpFQ1RfR0VUX0xPQ0sgKGVsZW0pKQorI2RlZmluZSBHU1RfU1RBVEVfVElNRURfV0FJVChlbGVtLCB0aW1ldmFsKSAgICBnX2NvbmRfdGltZWRfd2FpdCAoR1NUX1NUQVRFX0dFVF9DT05EIChlbGVtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU1RfT0JKRUNUX0dFVF9MT0NLIChlbGVtKSwgdGltZXZhbCkKKyNkZWZpbmUgR1NUX1NUQVRFX1NJR05BTChlbGVtKSAgICAgICAgICAgICAgICAgZ19jb25kX3NpZ25hbCAoR1NUX1NUQVRFX0dFVF9DT05EIChlbGVtKSk7CisjZGVmaW5lIEdTVF9TVEFURV9CUk9BRENBU1QoZWxlbSkgICAgICAgICAgICAgIGdfY29uZF9icm9hZGNhc3QgKEdTVF9TVEFURV9HRVRfQ09ORCAoZWxlbSkpOworCisvKioKKyAqIEdzdEVsZW1lbnQ6CisgKiBAc3RhdGVfbG9jazogVXNlZCB0byBzZXJpYWxpemUgZXhlY3V0aW9uIG9mIGdzdF9lbGVtZW50X3NldF9zdGF0ZSgpCisgKiBAc3RhdGVfY29uZDogVXNlZCB0byBzaWduYWwgY29tcGxldGlvbiBvZiBhIHN0YXRlIGNoYW5nZQorICogQHN0YXRlX2Nvb2tpZTogVXNlZCB0byBkZXRlY3QgY29uY3VycmVudCBleGVjdXRpb24gb2YKKyAqIGdzdF9lbGVtZW50X3NldF9zdGF0ZSgpIGFuZCBnc3RfZWxlbWVudF9nZXRfc3RhdGUoKQorICogQHRhcmdldF9zdGF0ZTogdGhlIHRhcmdldCBzdGF0ZSBvZiBhbiBlbGVtZW50IGFzIHNldCBieSB0aGUgYXBwbGljYXRpb24KKyAqIEBjdXJyZW50X3N0YXRlOiB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbiBlbGVtZW50CisgKiBAbmV4dF9zdGF0ZTogdGhlIG5leHQgc3RhdGUgb2YgYW4gZWxlbWVudCwgY2FuIGJlICNHU1RfU1RBVEVfVk9JRF9QRU5ESU5HIGlmCisgKiB0aGUgZWxlbWVudCBpcyBpbiB0aGUgY29ycmVjdCBzdGF0ZS4KKyAqIEBwZW5kaW5nX3N0YXRlOiB0aGUgZmluYWwgc3RhdGUgdGhlIGVsZW1lbnQgc2hvdWxkIGdvIHRvLCBjYW4gYmUKKyAqICNHU1RfU1RBVEVfVk9JRF9QRU5ESU5HIGlmIHRoZSBlbGVtZW50IGlzIGluIHRoZSBjb3JyZWN0IHN0YXRlCisgKiBAbGFzdF9yZXR1cm46IHRoZSBsYXN0IHJldHVybiB2YWx1ZSBvZiBhbiBlbGVtZW50IHN0YXRlIGNoYW5nZQorICogQGJ1czogdGhlIGJ1cyBvZiB0aGUgZWxlbWVudC4gVGhpcyBidXMgaXMgcHJvdmlkZWQgdG8gdGhlIGVsZW1lbnQgYnkgdGhlCisgKiBwYXJlbnQgZWxlbWVudCBvciB0aGUgYXBwbGljYXRpb24uIEEgI0dzdFBpcGVsaW5lIGhhcyBhIGJ1cyBvZiBpdHMgb3duLgorICogQGNsb2NrOiB0aGUgY2xvY2sgb2YgdGhlIGVsZW1lbnQuIFRoaXMgY2xvY2sgaXMgdXN1YWxseSBwcm92aWRlZCB0byB0aGUKKyAqIGVsZW1lbnQgYnkgdGhlIHRvcGxldmVsICNHc3RQaXBlbGluZS4KKyAqIEBiYXNlX3RpbWU6IHRoZSB0aW1lIG9mIHRoZSBjbG9jayByaWdodCBiZWZvcmUgdGhlIGVsZW1lbnQgaXMgc2V0IHRvCisgKiBQTEFZSU5HLiBTdWJ0cmFjdGluZyBAYmFzZV90aW1lIGZyb20gdGhlIGN1cnJlbnQgY2xvY2sgdGltZSBpbiB0aGUgUExBWUlORworICogc3RhdGUgd2lsbCB5aWVsZCB0aGUgcnVubmluZ190aW1lIGFnYWluc3QgdGhlIGNsb2NrLgorICogQHN0YXJ0X3RpbWU6IHRoZSBydW5uaW5nX3RpbWUgb2YgdGhlIGxhc3QgUEFVU0VEIHN0YXRlCisgKiBAbnVtcGFkczogbnVtYmVyIG9mIHBhZHMgb2YgdGhlIGVsZW1lbnQsIGluY2x1ZGVzIGJvdGggc291cmNlIGFuZCBzaW5rIHBhZHMuCisgKiBAcGFkczogbGlzdCBvZiBwYWRzCisgKiBAbnVtc3JjcGFkczogbnVtYmVyIG9mIHNvdXJjZSBwYWRzIG9mIHRoZSBlbGVtZW50LgorICogQHNyY3BhZHM6IGxpc3Qgb2Ygc291cmNlIHBhZHMKKyAqIEBudW1zaW5rcGFkczogbnVtYmVyIG9mIHNpbmsgcGFkcyBvZiB0aGUgZWxlbWVudC4KKyAqIEBzaW5rcGFkczogbGlzdCBvZiBzaW5rIHBhZHMKKyAqIEBwYWRzX2Nvb2tpZTogdXBkYXRlZCB3aGVuZXZlciB0aGUgYSBwYWQgaXMgYWRkZWQgb3IgcmVtb3ZlZAorICoKKyAqIEdTdHJlYW1lciBlbGVtZW50IGFic3RyYWN0IGJhc2UgY2xhc3MuCisgKi8KK3N0cnVjdCBfR3N0RWxlbWVudAoreworICBHc3RPYmplY3QgICAgICAgICAgICAgb2JqZWN0OworCisgIC8qPCBwdWJsaWMgPiovIC8qIHdpdGggTE9DSyAqLworICBHU3RhdGljUmVjTXV0ZXggICAgICAgc3RhdGVfbG9jazsKKworICAvKiBlbGVtZW50IHN0YXRlICovCisgIEdDb25kICAgICAgICAgICAgICAgICpzdGF0ZV9jb25kOworICBndWludDMyICAgICAgICAgICAgICAgc3RhdGVfY29va2llOworICBHc3RTdGF0ZSAgICAgICAgICAgICAgdGFyZ2V0X3N0YXRlOworICBHc3RTdGF0ZSAgICAgICAgICAgICAgY3VycmVudF9zdGF0ZTsKKyAgR3N0U3RhdGUgICAgICAgICAgICAgIG5leHRfc3RhdGU7CisgIEdzdFN0YXRlICAgICAgICAgICAgICBwZW5kaW5nX3N0YXRlOworICBHc3RTdGF0ZUNoYW5nZVJldHVybiAgbGFzdF9yZXR1cm47CisKKyAgR3N0QnVzICAgICAgICAgICAgICAgKmJ1czsKKworICAvKiBhbGxvY2F0ZWQgY2xvY2sgKi8KKyAgR3N0Q2xvY2sgICAgICAgICAgICAgKmNsb2NrOworICBHc3RDbG9ja1RpbWVEaWZmICAgICAgYmFzZV90aW1lOyAvKiBOVUxML1JFQURZOiAwIC0gUEFVU0VEOiBjdXJyZW50IHRpbWUgLSBQTEFZSU5HOiBkaWZmZXJlbmNlIHRvIGNsb2NrICovCisgIEdzdENsb2NrVGltZSAgICAgICAgICBzdGFydF90aW1lOworCisgIC8qIGVsZW1lbnQgcGFkcywgdGhlc2UgbGlzdHMgY2FuIG9ubHkgYmUgaXRlcmF0ZWQgd2hpbGUgaG9sZGluZworICAgKiB0aGUgTE9DSyBvciBjaGVja2luZyB0aGUgY29va2llIGFmdGVyIGVhY2ggTE9DSy4gKi8KKyAgZ3VpbnQxNiAgICAgICAgICAgICAgIG51bXBhZHM7CisgIEdMaXN0ICAgICAgICAgICAgICAgICpwYWRzOworICBndWludDE2ICAgICAgICAgICAgICAgbnVtc3JjcGFkczsKKyAgR0xpc3QgICAgICAgICAgICAgICAgKnNyY3BhZHM7CisgIGd1aW50MTYgICAgICAgICAgICAgICBudW1zaW5rcGFkczsKKyAgR0xpc3QgICAgICAgICAgICAgICAgKnNpbmtwYWRzOworICBndWludDMyICAgICAgICAgICAgICAgcGFkc19jb29raWU7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOworfTsKKworLyoqCisgKiBHc3RFbGVtZW50Q2xhc3M6CisgKiBAcGFyZW50X2NsYXNzOiB0aGUgcGFyZW50IGNsYXNzIHN0cnVjdHVyZQorICogQG1ldGFkYXRhOiBtZXRhZGF0YSBmb3IgZWxlbWVudHMgb2YgdGhpcyBjbGFzcworICogQGVsZW1lbnRmYWN0b3J5OiB0aGUgI0dzdEVsZW1lbnRGYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGVzZSBlbGVtZW50cworICogQHBhZHRlbXBsYXRlczogYSAjR0xpc3Qgb2YgI0dzdFBhZFRlbXBsYXRlCisgKiBAbnVtcGFkdGVtcGxhdGVzOiB0aGUgbnVtYmVyIG9mIHBhZHRlbXBsYXRlcworICogQHBhZF90ZW1wbF9jb29raWU6IGNoYW5nZWQgd2hlbmV2ZXIgdGhlIHBhZHRlbXBsYXRlcyBjaGFuZ2UKKyAqIEByZXF1ZXN0X25ld19wYWQ6IGNhbGxlZCB3aGVuIGEgbmV3IHBhZCBpcyByZXF1ZXN0ZWQKKyAqIEByZWxlYXNlX3BhZDogY2FsbGVkIHdoZW4gYSByZXF1ZXN0IHBhZCBpcyB0byBiZSByZWxlYXNlZAorICogQGdldF9zdGF0ZTogZ2V0IHRoZSBzdGF0ZSBvZiB0aGUgZWxlbWVudAorICogQHNldF9zdGF0ZTogc2V0IGEgbmV3IHN0YXRlIG9uIHRoZSBlbGVtZW50CisgKiBAY2hhbmdlX3N0YXRlOiBjYWxsZWQgYnkgQHNldF9zdGF0ZSB0byBwZXJmb3JtIGFuIGluY3JlbWVudGFsIHN0YXRlIGNoYW5nZQorICogQHNldF9idXM6IHNldCBhICNHc3RCdXMgb24gdGhlIGVsZW1lbnQKKyAqIEBwcm92aWRlX2Nsb2NrOiBnZXRzIHRoZSAjR3N0Q2xvY2sgcHJvdmlkZWQgYnkgdGhlIGVsZW1lbnQKKyAqIEBzZXRfY2xvY2s6IHNldCB0aGUgI0dzdENsb2NrIG9uIHRoZSBlbGVtZW50CisgKiBAZ2V0X2luZGV4OiBzZXQgYSAjR3N0SW5kZXggb24gdGhlIGVsZW1lbnQKKyAqIEBzZXRfaW5kZXg6IGdldCB0aGUgI0dzdEluZGV4IG9mIGFuIGVsZW1lbnQKKyAqIEBzZW5kX2V2ZW50OiBzZW5kIGEgI0dzdEV2ZW50IHRvIHRoZSBlbGVtZW50CisgKiBAZ2V0X3F1ZXJ5X3R5cGVzOiBnZXQgdGhlIHN1cHBvcnRlZCAjR3N0UXVlcnlUeXBlIG9mIHRoaXMgZWxlbWVudAorICogQHF1ZXJ5OiBwZXJmb3JtIGEgI0dzdFF1ZXJ5IG9uIHRoZSBlbGVtZW50CisgKiBAc3RhdGVfY2hhbmdlZDogY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIGEgbmV3IHN0YXRlIHdhcyBzZXQuIFNpbmNlOiAwLjEwLjM1LgorICoKKyAqIEdTdHJlYW1lciBlbGVtZW50IGNsYXNzLiBPdmVycmlkZSB0aGUgdm1ldGhvZHMgdG8gaW1wbGVtZW50IHRoZSBlbGVtZW50CisgKiBmdW5jdGlvbmFsaXR5LgorICovCitzdHJ1Y3QgX0dzdEVsZW1lbnRDbGFzcworeworICBHc3RPYmplY3RDbGFzcyAgICAgICAgIHBhcmVudF9jbGFzczsKKworICAvKjwgcHVibGljID4qLworICAvKiB0aGUgZWxlbWVudCBtZXRhZGF0YSAqLworICBncG9pbnRlcgkJIG1ldGFkYXRhOworCisgIC8qIGZhY3RvcnkgdGhhdCB0aGUgZWxlbWVudCB3YXMgY3JlYXRlZCBmcm9tICovCisgIEdzdEVsZW1lbnRGYWN0b3J5ICAgICAqZWxlbWVudGZhY3Rvcnk7CisKKyAgLyogdGVtcGxhdGVzIGZvciBvdXIgcGFkcyAqLworICBHTGlzdCAgICAgICAgICAgICAgICAgKnBhZHRlbXBsYXRlczsKKyAgZ2ludCAgICAgICAgICAgICAgICAgICBudW1wYWR0ZW1wbGF0ZXM7CisgIGd1aW50MzIgICAgICAgICAgICAgICAgcGFkX3RlbXBsX2Nvb2tpZTsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgLyogc2lnbmFsIGNhbGxiYWNrcyAqLworICB2b2lkICgqcGFkX2FkZGVkKSAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdFBhZCAqcGFkKTsKKyAgdm9pZCAoKnBhZF9yZW1vdmVkKSAgIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RQYWQgKnBhZCk7CisgIHZvaWQgKCpub19tb3JlX3BhZHMpICAoR3N0RWxlbWVudCAqZWxlbWVudCk7CisKKyAgLyo8IHB1YmxpYyA+Ki8KKyAgLyogdmlydHVhbCBtZXRob2RzIGZvciBzdWJjbGFzc2VzICovCisKKyAgLyogcmVxdWVzdC9yZWxlYXNlIHBhZHMgKi8KKyAgR3N0UGFkKiAgICAgICAgICAgICAgICgqcmVxdWVzdF9uZXdfcGFkKSAgICAgIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RQYWRUZW1wbGF0ZSAqdGVtcGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqIG5hbWUsIGNvbnN0IEdzdENhcHMgKmNhcHMpOworICB2b2lkICAgICAgICAgICAgICAgICAgKCpyZWxlYXNlX3BhZCkgICAgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdFBhZCAqcGFkKTsKKworICAvKiBzdGF0ZSBjaGFuZ2VzICovCisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuICgqZ2V0X3N0YXRlKSAgICAgICAgICAgICAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlICogc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U3RhdGUgKiBwZW5kaW5nLCBHc3RDbG9ja1RpbWUgdGltZW91dCk7CisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuICgqc2V0X3N0YXRlKSAgICAgICAgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0U3RhdGUgc3RhdGUpOworICBHc3RTdGF0ZUNoYW5nZVJldHVybiAoKmNoYW5nZV9zdGF0ZSkgICAgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOworICB2b2lkICAgICAgICAgICAgICAgICAoKnN0YXRlX2NoYW5nZWQpICAgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdFN0YXRlIG9sZHN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFN0YXRlIG5ld3N0YXRlLCBHc3RTdGF0ZSBwZW5kaW5nKTsKKworICAvKiBidXMgKi8KKyAgdm9pZCAgICAgICAgICAgICAgICAgICgqc2V0X2J1cykgICAgICAgICAgICAgIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0QnVzICogYnVzKTsKKworICAvKiBzZXQvZ2V0IGNsb2NrcyAqLworICBHc3RDbG9jayogICAgICAgICAgICAgKCpwcm92aWRlX2Nsb2NrKSAgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQpOworICBnYm9vbGVhbiAgICAgICAgICAgICAgKCpzZXRfY2xvY2spICAgICAgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdENsb2NrICpjbG9jayk7CisKKyAgLyogaW5kZXggKi8KKyAgR3N0SW5kZXgqICAgICAgICAgICAgICgqZ2V0X2luZGV4KSAgICAgICAgICAgIChHc3RFbGVtZW50ICplbGVtZW50KTsKKyAgdm9pZCAgICAgICAgICAgICAgICAgICgqc2V0X2luZGV4KSAgICAgICAgICAgIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RJbmRleCAqaW5kZXgpOworCisgIC8qIHF1ZXJ5IGZ1bmN0aW9ucyAqLworICBnYm9vbGVhbiAgICAgICAgICAgICAgKCpzZW5kX2V2ZW50KSAgICAgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdEV2ZW50ICpldmVudCk7CisKKyAgY29uc3QgR3N0UXVlcnlUeXBlKiAgICgqZ2V0X3F1ZXJ5X3R5cGVzKSAgICAgIChHc3RFbGVtZW50ICplbGVtZW50KTsKKyAgZ2Jvb2xlYW4gICAgICAgICAgICAgICgqcXVlcnkpICAgICAgICAgICAgICAgIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RRdWVyeSAqcXVlcnkpOworCisgIC8qPCBwcml2YXRlID4qLworICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKK307CisKKy8qIGVsZW1lbnQgY2xhc3MgcGFkIHRlbXBsYXRlcyAqLwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAgICAgIChHc3RFbGVtZW50Q2xhc3MgKmtsYXNzLCBHc3RQYWRUZW1wbGF0ZSAqdGVtcGwpOworR3N0UGFkVGVtcGxhdGUqICAgICAgICAgZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAgICAgIChHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3MsIGNvbnN0IGdjaGFyICpuYW1lKTsKK0dMaXN0KiAgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGVfbGlzdCAoR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzKTsKKworLyogZWxlbWVudCBjbGFzcyBtZXRhIGRhdGEgKi8KK3ZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YSAgICAgICAgICAoR3N0RWxlbWVudENsYXNzICprbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICpsb25nbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICpjbGFzc2lmaWNhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICpkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICphdXRob3IpOwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX21ldGFkYXRhICAgICAgICAgIChHc3RFbGVtZW50Q2xhc3MgKiBrbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBrZXksIGNvbnN0IGdjaGFyICogdmFsdWUpOworY29uc3QgZ2NoYXIgICAgICAgICAgKiAgZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X21ldGFkYXRhICAgICAgICAgIChHc3RFbGVtZW50Q2xhc3MgKiBrbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBrZXkpOworCisKKy8qIGVsZW1lbnQgaW5zdGFuY2UgKi8KK0dUeXBlICAgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2dldF90eXBlICAgICAgICAgICAgKHZvaWQpOworCisvKiBiYXNpYyBuYW1lIGFuZCBwYXJlbnRhZ2Ugc3R1ZmYgZnJvbSBHc3RPYmplY3QgKi8KKworLyoqCisgKiBnc3RfZWxlbWVudF9nZXRfbmFtZToKKyAqIEBlbGVtOiBhICNHc3RFbGVtZW50IHRvIGdldCB0aGUgbmFtZSBvZiBAZWxlbS4KKyAqCisgKiBSZXR1cm5zIGEgY29weSBvZiB0aGUgbmFtZSBvZiBAZWxlbS4KKyAqIENhbGxlciBzaG91bGQgZ19mcmVlKCkgdGhlIHJldHVybiB2YWx1ZSBhZnRlciB1c2FnZS4KKyAqIEZvciBhIG5hbWVsZXNzIGVsZW1lbnQsIHRoaXMgcmV0dXJucyBOVUxMLCB3aGljaCB5b3UgY2FuIHNhZmVseSBnX2ZyZWUoKQorICogYXMgd2VsbC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuYW1lIG9mIEBlbGVtLiBnX2ZyZWUoKSBhZnRlciB1c2FnZS4gTVQgc2FmZS4KKyAqCisgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2dldF9uYW1lKGVsZW0pICAgICAgZ3N0X29iamVjdF9nZXRfbmFtZShHU1RfT0JKRUNUX0NBU1QoZWxlbSkpCisKKy8qKgorICogZ3N0X2VsZW1lbnRfc2V0X25hbWU6CisgKiBAZWxlbTogYSAjR3N0RWxlbWVudCB0byBzZXQgdGhlIG5hbWUgb2YuCisgKiBAbmFtZTogdGhlIG5ldyBuYW1lCisgKgorICogU2V0cyB0aGUgbmFtZSBvZiB0aGUgZWxlbWVudCwgZ2V0dGluZyByaWQgb2YgdGhlIG9sZCBuYW1lIGlmIHRoZXJlIHdhcyBvbmUuCisgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9uYW1lKGVsZW0sbmFtZSkgZ3N0X29iamVjdF9zZXRfbmFtZShHU1RfT0JKRUNUX0NBU1QoZWxlbSksbmFtZSkKKworLyoqCisgKiBnc3RfZWxlbWVudF9nZXRfcGFyZW50OgorICogQGVsZW06IGEgI0dzdEVsZW1lbnQgdG8gZ2V0IHRoZSBwYXJlbnQgb2YuCisgKgorICogR2V0IHRoZSBwYXJlbnQgb2YgYW4gZWxlbWVudC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBwYXJlbnQgb2YgYW4gZWxlbWVudC4KKyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3BhcmVudChlbGVtKSAgICBnc3Rfb2JqZWN0X2dldF9wYXJlbnQoR1NUX09CSkVDVF9DQVNUKGVsZW0pKQorCisvKioKKyAqIGdzdF9lbGVtZW50X3NldF9wYXJlbnQ6CisgKiBAZWxlbTogYSAjR3N0RWxlbWVudCB0byBzZXQgdGhlIHBhcmVudCBvZi4KKyAqIEBwYXJlbnQ6IHRoZSBuZXcgcGFyZW50ICNHc3RPYmplY3Qgb2YgdGhlIGVsZW1lbnQuCisgKgorICogU2V0cyB0aGUgcGFyZW50IG9mIGFuIGVsZW1lbnQuCisgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9wYXJlbnQoZWxlbSxwYXJlbnQpICAgICBnc3Rfb2JqZWN0X3NldF9wYXJlbnQoR1NUX09CSkVDVF9DQVNUKGVsZW0pLHBhcmVudCkKKworLyogY2xvY2tpbmcgKi8KK2dib29sZWFuICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3JlcXVpcmVzX2Nsb2NrICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQpOworZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfcHJvdmlkZXNfY2xvY2sgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCk7CitHc3RDbG9jayogICAgICAgICAgICAgICBnc3RfZWxlbWVudF9wcm92aWRlX2Nsb2NrICAgICAgIChHc3RFbGVtZW50ICplbGVtZW50KTsKK0dzdENsb2NrKiAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2dldF9jbG9jayAgICAgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQpOworZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2Nsb2NrICAgICAgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0Q2xvY2sgKmNsb2NrKTsKK3ZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9iYXNlX3RpbWUgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdENsb2NrVGltZSB0aW1lKTsKK0dzdENsb2NrVGltZSAgICAgICAgICAgIGdzdF9lbGVtZW50X2dldF9iYXNlX3RpbWUgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQpOwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXJ0X3RpbWUgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0Q2xvY2tUaW1lIHRpbWUpOworR3N0Q2xvY2tUaW1lICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXJ0X3RpbWUgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCk7CisKKy8qIGluZGV4ZXMgKi8KK2dib29sZWFuICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2lzX2luZGV4YWJsZSAgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQpOwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2luZGV4ICAgICAgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0SW5kZXggKmluZGV4KTsKK0dzdEluZGV4KiAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2dldF9pbmRleCAgICAgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQpOworCisvKiBidXMgKi8KK3ZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9idXMgICAgICAgICAgICAgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RCdXMgKiBidXMpOworR3N0QnVzICogICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X2J1cyAgICAgICAgICAgICAoR3N0RWxlbWVudCAqIGVsZW1lbnQpOworCisvKiBwYWQgbWFuYWdlbWVudCAqLworZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAgICAgICAgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0UGFkICpwYWQpOworZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAgICAgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0UGFkICpwYWQpOwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfbm9fbW9yZV9wYWRzICAgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCk7CisKK0dzdFBhZCogICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIGNvbnN0IGdjaGFyICpuYW1lKTsKK0dzdFBhZCogICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIGNvbnN0IGdjaGFyICpuYW1lKTsKK0dzdFBhZCogICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3JlcXVlc3RfcGFkICAgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdFBhZFRlbXBsYXRlICp0ZW1wbCwKKwkJCQkJCQkgY29uc3QgZ2NoYXIgKiBuYW1lLCBjb25zdCBHc3RDYXBzICpjYXBzKTsKK3ZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdFBhZCAqcGFkKTsKKworR3N0SXRlcmF0b3IgKiAgICAgICAgICAgZ3N0X2VsZW1lbnRfaXRlcmF0ZV9wYWRzICAgICAgICAoR3N0RWxlbWVudCAqIGVsZW1lbnQpOworR3N0SXRlcmF0b3IgKiAgICAgICAgICAgZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zcmNfcGFkcyAgICAoR3N0RWxlbWVudCAqIGVsZW1lbnQpOworR3N0SXRlcmF0b3IgKiAgICAgICAgICAgZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zaW5rX3BhZHMgICAoR3N0RWxlbWVudCAqIGVsZW1lbnQpOworCisvKiBldmVudC9xdWVyeS9mb3JtYXQgc3R1ZmYgKi8KK2dib29sZWFuICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3NlbmRfZXZlbnQgICAgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdEV2ZW50ICpldmVudCk7CitnYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zZWVrICAgICAgICAgICAgICAgIChHc3RFbGVtZW50ICplbGVtZW50LCBnZG91YmxlIHJhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RGb3JtYXQgZm9ybWF0LCBHc3RTZWVrRmxhZ3MgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RTZWVrVHlwZSBjdXJfdHlwZSwgZ2ludDY0IGN1ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFNlZWtUeXBlIHN0b3BfdHlwZSwgZ2ludDY0IHN0b3ApOworY29uc3QgR3N0UXVlcnlUeXBlKiAgICAgZ3N0X2VsZW1lbnRfZ2V0X3F1ZXJ5X3R5cGVzICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCk7CitnYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9xdWVyeSAgICAgICAgICAgICAgIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RRdWVyeSAqcXVlcnkpOworCisvKiBtZXNzYWdlcyAqLworZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlICAgICAgICAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdE1lc3NhZ2UgKiBtZXNzYWdlKTsKKworLyogZXJyb3IgaGFuZGxpbmcgKi8KKy8qIGdjYyB2ZXJzaW9ucyA8IDMuMyB3YXJuIGFib3V0IE5VTEwgYmVpbmcgcGFzc2VkIGFzIGZvcm1hdCB0byBwcmludGYgKi8KKyNpZiAoZGVmaW5lZChHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTikgfHwgIWRlZmluZWQoX19HTlVDX18pIHx8IChfX0dOVUNfXyA8IDMpIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fIDwgMykpCitnY2hhciAqICAgICAgICAgICAgICAgICBfZ3N0X2VsZW1lbnRfZXJyb3JfcHJpbnRmICAgICAgIChjb25zdCBnY2hhciAqZm9ybWF0LCAuLi4pOworI2Vsc2UKK2djaGFyICogICAgICAgICAgICAgICAgIF9nc3RfZWxlbWVudF9lcnJvcl9wcmludGYgICAgICAgKGNvbnN0IGdjaGFyICpmb3JtYXQsIC4uLikgR19HTlVDX1BSSU5URiAoMSwgMik7CisjZW5kaWYKK3ZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X21lc3NhZ2VfZnVsbCAgICAgICAgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RNZXNzYWdlVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1F1YXJrIGRvbWFpbiwgZ2ludCBjb2RlLCBnY2hhciAqIHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY2hhciAqIGRlYnVnLCBjb25zdCBnY2hhciAqIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIGZ1bmN0aW9uLCBnaW50IGxpbmUpOworCisvKiBzdGF0ZSBtYW5hZ2VtZW50ICovCitnYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9pc19sb2NrZWRfc3RhdGUgICAgIChHc3RFbGVtZW50ICplbGVtZW50KTsKK2dib29sZWFuICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIGdib29sZWFuIGxvY2tlZF9zdGF0ZSk7CitnYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50IChHc3RFbGVtZW50ICplbGVtZW50KTsKKworR3N0U3RhdGVDaGFuZ2VSZXR1cm4gICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlICAgICAgICAgICAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RTdGF0ZSAqIHN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U3RhdGUgKiBwZW5kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIHRpbWVvdXQpOworR3N0U3RhdGVDaGFuZ2VSZXR1cm4gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlICAgICAgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0U3RhdGUgc3RhdGUpOworCit2b2lkICAgICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9hYm9ydF9zdGF0ZSAgICAgICAgIChHc3RFbGVtZW50ICogZWxlbWVudCk7CitHc3RTdGF0ZUNoYW5nZVJldHVybiAgICBnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUgICAgICAgIChHc3RFbGVtZW50ICogZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOworR3N0U3RhdGVDaGFuZ2VSZXR1cm4gICAgZ3N0X2VsZW1lbnRfY29udGludWVfc3RhdGUgICAgICAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQpOwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfbG9zdF9zdGF0ZSAgICAgICAgICAoR3N0RWxlbWVudCAqIGVsZW1lbnQpOworCisvKiBmYWN0b3J5IG1hbmFnZW1lbnQgKi8KK0dzdEVsZW1lbnRGYWN0b3J5KiAgICAgIGdzdF9lbGVtZW50X2dldF9mYWN0b3J5ICAgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HU1RfRUxFTUVOVF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RlbGVtZW50ZmFjdG9yeS5jIGIvZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ3Njc0ZQotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RlbGVtZW50ZmFjdG9yeS5jCkBAIC0wLDAgKzEsODE1IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwMyBCZW5qYW1pbiBPdHRlIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KKyAqCisgKiBnc3RlbGVtZW50ZmFjdG9yeS5jOiBHc3RFbGVtZW50RmFjdG9yeSBvYmplY3QsIHN1cHBvcnQgcm91dGluZXMKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKioKKyAqIFNFQ1RJT046Z3N0ZWxlbWVudGZhY3RvcnkKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogQ3JlYXRlIEdzdEVsZW1lbnRzIGZyb20gYSBmYWN0b3J5CisgKiBAc2VlX2Fsc286ICNHc3RFbGVtZW50LCAjR3N0UGx1Z2luLCAjR3N0UGx1Z2luRmVhdHVyZSwgI0dzdFBhZFRlbXBsYXRlLgorICoKKyAqICNHc3RFbGVtZW50RmFjdG9yeSBpcyB1c2VkIHRvIGNyZWF0ZSBpbnN0YW5jZXMgb2YgZWxlbWVudHMuIEEKKyAqIEdzdEVsZW1lbnRmYWN0b3J5IGNhbiBiZSBhZGRlZCB0byBhICNHc3RQbHVnaW4gYXMgaXQgaXMgYWxzbyBhCisgKiAjR3N0UGx1Z2luRmVhdHVyZS4KKyAqCisgKiBVc2UgdGhlIGdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZCgpIGFuZCBnc3RfZWxlbWVudF9mYWN0b3J5X2NyZWF0ZSgpCisgKiBmdW5jdGlvbnMgdG8gY3JlYXRlIGVsZW1lbnQgaW5zdGFuY2VzIG9yIHVzZSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoKSBhcyBhCisgKiBjb252ZW5pZW50IHNob3J0Y3V0LgorICoKKyAqIFRoZSBmb2xsb3dpbmcgY29kZSBleGFtcGxlIHNob3dzIHlvdSBob3cgdG8gY3JlYXRlIGEgR3N0RmlsZVNyYyBlbGVtZW50LgorICoKKyAqIDxleGFtcGxlPgorICogPHRpdGxlPlVzaW5nIGFuIGVsZW1lbnQgZmFjdG9yeTwvdGl0bGU+CisgKiA8cHJvZ3JhbWxpc3RpbmcgbGFuZ3VhZ2U9ImMiPgorICogICAjaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OworICoKKyAqICAgR3N0RWxlbWVudCAqc3JjOworICogICBHc3RFbGVtZW50RmFjdG9yeSAqc3JjZmFjdG9yeTsKKyAqCisgKiAgIGdzdF9pbml0ICgmYW1wO2FyZ2MsICZhbXA7YXJndik7CisgKgorICogICBzcmNmYWN0b3J5ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9maW5kICgiZmlsZXNyYyIpOworICogICBnX3JldHVybl9pZl9mYWlsIChzcmNmYWN0b3J5ICE9IE5VTEwpOworICogICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2NyZWF0ZSAoc3JjZmFjdG9yeSwgInNyYyIpOworICogICBnX3JldHVybl9pZl9mYWlsIChzcmMgIT0gTlVMTCk7CisgKiAgIC4uLgorICogPC9wcm9ncmFtbGlzdGluZz4KKyAqIDwvZXhhbXBsZT4KKyAqCisgKiBMYXN0IHJldmlld2VkIG9uIDIwMDUtMTEtMjMgKDAuOS41KQorICovCisKKyNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgorCisjaW5jbHVkZSAiZ3N0ZWxlbWVudC5oIgorI2luY2x1ZGUgImdzdGVsZW1lbnRtZXRhZGF0YS5oIgorI2luY2x1ZGUgImdzdGluZm8uaCIKKyNpbmNsdWRlICJnc3R1cmkuaCIKKyNpbmNsdWRlICJnc3RyZWdpc3RyeS5oIgorI2luY2x1ZGUgImdzdC5oIgorCisjaW5jbHVkZSAiZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIgorCitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChlbGVtZW50X2ZhY3RvcnlfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZWxlbWVudF9mYWN0b3J5X2RlYnVnCisKK3N0YXRpYyB2b2lkIGdzdF9lbGVtZW50X2ZhY3RvcnlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOworc3RhdGljIHZvaWQgZ3N0X2VsZW1lbnRfZmFjdG9yeV9jbGVhbnVwIChHc3RFbGVtZW50RmFjdG9yeSAqIGZhY3RvcnkpOworCisvKiBzdGF0aWMgZ3VpbnQgZ3N0X2VsZW1lbnRfZmFjdG9yeV9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OyAqLworCisvKiB0aGlzIGlzIGRlZmluZWQgaW4gZ3N0ZWxlbWVudC5jICovCitleHRlcm4gR1F1YXJrIF9nc3RfZWxlbWVudGNsYXNzX2ZhY3Rvcnk7CisKKyNkZWZpbmUgX2RvX2luaXQgXAoreyBcCisgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChlbGVtZW50X2ZhY3RvcnlfZGVidWcsICJHU1RfRUxFTUVOVF9GQUNUT1JZIiwgXAorICAgICAgR1NUX0RFQlVHX0JPTEQgfCBHU1RfREVCVUdfRkdfV0hJVEUgfCBHU1RfREVCVUdfQkdfUkVELCBcCisgICAgICAiZWxlbWVudCBmYWN0b3JpZXMga2VlcCBpbmZvcm1hdGlvbiBhYm91dCBpbnN0YWxsZWQgZWxlbWVudHMiKTsgXAorfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0RWxlbWVudEZhY3RvcnksIGdzdF9lbGVtZW50X2ZhY3RvcnksCisgICAgR1NUX1RZUEVfUExVR0lOX0ZFQVRVUkUsIF9kb19pbml0KTsKKworc3RhdGljIHZvaWQKK2dzdF9lbGVtZW50X2ZhY3RvcnlfY2xhc3NfaW5pdCAoR3N0RWxlbWVudEZhY3RvcnlDbGFzcyAqIGtsYXNzKQoreworICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOworCisgIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9maW5hbGl6ZTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9lbGVtZW50X2ZhY3RvcnlfaW5pdCAoR3N0RWxlbWVudEZhY3RvcnkgKiBmYWN0b3J5KQoreworICBmYWN0b3J5LT5zdGF0aWNwYWR0ZW1wbGF0ZXMgPSBOVUxMOworICBmYWN0b3J5LT5udW1wYWR0ZW1wbGF0ZXMgPSAwOworCisgIGZhY3RvcnktPnVyaV90eXBlID0gR1NUX1VSSV9VTktOT1dOOworICBmYWN0b3J5LT51cmlfcHJvdG9jb2xzID0gTlVMTDsKKworICBmYWN0b3J5LT5pbnRlcmZhY2VzID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK2dzdF9lbGVtZW50X2ZhY3RvcnlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCit7CisgIEdzdEVsZW1lbnRGYWN0b3J5ICpmYWN0b3J5ID0gR1NUX0VMRU1FTlRfRkFDVE9SWSAob2JqZWN0KTsKKworICBnc3RfZWxlbWVudF9mYWN0b3J5X2NsZWFudXAgKGZhY3RvcnkpOworICBHX09CSkVDVF9DTEFTUyAoZ3N0X2VsZW1lbnRfZmFjdG9yeV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworLyoqCisgKiBnc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmQ6CisgKiBAbmFtZTogbmFtZSBvZiBmYWN0b3J5IHRvIGZpbmQKKyAqCisgKiBTZWFyY2ggZm9yIGFuIGVsZW1lbnQgZmFjdG9yeSBvZiB0aGUgZ2l2ZW4gbmFtZS4gUmVmcyB0aGUgcmV0dXJuZWQKKyAqIGVsZW1lbnQgZmFjdG9yeTsgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciB1bnJlZmZpbmcuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiAjR3N0RWxlbWVudEZhY3RvcnkgaWYgZm91bmQsIE5VTEwgb3RoZXJ3aXNlCisgKi8KK0dzdEVsZW1lbnRGYWN0b3J5ICoKK2dzdF9lbGVtZW50X2ZhY3RvcnlfZmluZCAoY29uc3QgZ2NoYXIgKiBuYW1lKQoreworICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYW1lICE9IE5VTEwsIE5VTEwpOworCisgIGZlYXR1cmUgPSBnc3RfcmVnaXN0cnlfZmluZF9mZWF0dXJlIChnc3RfcmVnaXN0cnlfZ2V0X2RlZmF1bHQgKCksIG5hbWUsCisgICAgICBHU1RfVFlQRV9FTEVNRU5UX0ZBQ1RPUlkpOworICBpZiAoZmVhdHVyZSkKKyAgICByZXR1cm4gR1NUX0VMRU1FTlRfRkFDVE9SWSAoZmVhdHVyZSk7CisKKyAgLyogdGhpcyBpc24ndCBhbiBlcnJvciwgZm9yIGluc3RhbmNlIHdoZW4geW91IHF1ZXJ5IGlmIGFuIGVsZW1lbnQgZmFjdG9yeSBpcworICAgKiBwcmVzZW50ICovCisgIEdTVF9MT0cgKCJubyBzdWNoIGVsZW1lbnQgZmFjdG9yeSBcIiVzXCIiLCBuYW1lKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfZWxlbWVudF9mYWN0b3J5X2NsZWFudXAgKEdzdEVsZW1lbnRGYWN0b3J5ICogZmFjdG9yeSkKK3sKKyAgR0xpc3QgKml0ZW07CisKKyAgaWYgKGZhY3RvcnktPm1ldGFkYXRhKSB7CisgICAgZ3N0X3N0cnVjdHVyZV9mcmVlICgoR3N0U3RydWN0dXJlICopIGZhY3RvcnktPm1ldGFkYXRhKTsKKyAgICBmYWN0b3J5LT5tZXRhZGF0YSA9IE5VTEw7CisgIH0KKyAgaWYgKGZhY3RvcnktPnR5cGUpIHsKKyAgICBmYWN0b3J5LT50eXBlID0gR19UWVBFX0lOVkFMSUQ7CisgIH0KKworICBmb3IgKGl0ZW0gPSBmYWN0b3J5LT5zdGF0aWNwYWR0ZW1wbGF0ZXM7IGl0ZW07IGl0ZW0gPSBpdGVtLT5uZXh0KSB7CisgICAgR3N0U3RhdGljUGFkVGVtcGxhdGUgKnRlbXBsID0gaXRlbS0+ZGF0YTsKKworICAgIGdzdF9zdGF0aWNfY2Fwc19jbGVhbnVwICgmdGVtcGwtPnN0YXRpY19jYXBzKTsKKyAgICBnX3NsaWNlX2ZyZWUgKEdzdFN0YXRpY1BhZFRlbXBsYXRlLCB0ZW1wbCk7CisgIH0KKyAgZ19saXN0X2ZyZWUgKGZhY3RvcnktPnN0YXRpY3BhZHRlbXBsYXRlcyk7CisgIGZhY3RvcnktPnN0YXRpY3BhZHRlbXBsYXRlcyA9IE5VTEw7CisgIGZhY3RvcnktPm51bXBhZHRlbXBsYXRlcyA9IDA7CisgIGZhY3RvcnktPnVyaV90eXBlID0gR1NUX1VSSV9VTktOT1dOOworICBpZiAoZmFjdG9yeS0+dXJpX3Byb3RvY29scykgeworICAgIGdfc3RyZnJlZXYgKGZhY3RvcnktPnVyaV9wcm90b2NvbHMpOworICAgIGZhY3RvcnktPnVyaV9wcm90b2NvbHMgPSBOVUxMOworICB9CisKKyAgZ19saXN0X2ZyZWUgKGZhY3RvcnktPmludGVyZmFjZXMpOworICBmYWN0b3J5LT5pbnRlcmZhY2VzID0gTlVMTDsKK30KKworLyoqCisgKiBnc3RfZWxlbWVudF9yZWdpc3RlcjoKKyAqIEBwbHVnaW46IChhbGxvdy1ub25lKTogI0dzdFBsdWdpbiB0byByZWdpc3RlciB0aGUgZWxlbWVudCB3aXRoLCBvciBOVUxMIGZvcgorICogICAgIGEgc3RhdGljIGVsZW1lbnQgKG5vdGUgdGhhdCBwYXNzaW5nIE5VTEwgb25seSB3b3JrcyBpbiBHU3RyZWFtZXIgMC4xMC4xMworICogICAgIGFuZCBsYXRlcikKKyAqIEBuYW1lOiBuYW1lIG9mIGVsZW1lbnRzIG9mIHRoaXMgdHlwZQorICogQHJhbms6IHJhbmsgb2YgZWxlbWVudCAoaGlnaGVyIHJhbmsgbWVhbnMgbW9yZSBpbXBvcnRhbmNlIHdoZW4gYXV0b3BsdWdnaW5nKQorICogQHR5cGU6IEdUeXBlIG9mIGVsZW1lbnQgdG8gcmVnaXN0ZXIKKyAqCisgKiBDcmVhdGUgYSBuZXcgZWxlbWVudGZhY3RvcnkgY2FwYWJsZSBvZiBpbnN0YW50aWF0aW5nIG9iamVjdHMgb2YgdGhlCisgKiBAdHlwZSBhbmQgYWRkIHRoZSBmYWN0b3J5IHRvIEBwbHVnaW4uCisgKgorICogUmV0dXJuczogVFJVRSwgaWYgdGhlIHJlZ2lzdGVyaW5nIHN1Y2NlZWRlZCwgRkFMU0Ugb24gZXJyb3IKKyAqLworZ2Jvb2xlYW4KK2dzdF9lbGVtZW50X3JlZ2lzdGVyIChHc3RQbHVnaW4gKiBwbHVnaW4sIGNvbnN0IGdjaGFyICogbmFtZSwgZ3VpbnQgcmFuaywKKyAgICBHVHlwZSB0eXBlKQoreworICBHc3RQbHVnaW5GZWF0dXJlICpleGlzdGluZ19mZWF0dXJlOworICBHc3RSZWdpc3RyeSAqcmVnaXN0cnk7CisgIEdzdEVsZW1lbnRGYWN0b3J5ICpmYWN0b3J5OworICBHVHlwZSAqaW50ZXJmYWNlczsKKyAgZ3VpbnQgbl9pbnRlcmZhY2VzLCBpOworICBHc3RFbGVtZW50Q2xhc3MgKmtsYXNzOworICBHTGlzdCAqaXRlbTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAobmFtZSAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnX3R5cGVfaXNfYSAodHlwZSwgR1NUX1RZUEVfRUxFTUVOVCksIEZBTFNFKTsKKworICByZWdpc3RyeSA9IGdzdF9yZWdpc3RyeV9nZXRfZGVmYXVsdCAoKTsKKworICAvKiBjaGVjayBpZiBmZWF0dXJlIGFscmVhZHkgZXhpc3RzLCBpZiBpdCBleGlzdHMgdGhlcmUgaXMgbm8gbmVlZCB0byB1cGRhdGUgaXQKKyAgICogd2hlbiB0aGUgcmVnaXN0cnkgaXMgZ2V0dGluZyB1cGRhdGVkLCBvdXRkYXRlZCBwbHVnaW5zIGFuZCBhbGwgdGhlaXIKKyAgICogZmVhdHVyZXMgYXJlIHJlbW92ZWQgYW5kIHJlYWRkZWQuCisgICAqLworICBleGlzdGluZ19mZWF0dXJlID0gZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9mZWF0dXJlIChyZWdpc3RyeSwgbmFtZSk7CisgIGlmIChleGlzdGluZ19mZWF0dXJlKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocmVnaXN0cnksICJ1cGRhdGUgZXhpc3RpbmcgZmVhdHVyZSAlcCAoJXMpIiwKKyAgICAgICAgZXhpc3RpbmdfZmVhdHVyZSwgbmFtZSk7CisgICAgZmFjdG9yeSA9IEdTVF9FTEVNRU5UX0ZBQ1RPUllfQ0FTVCAoZXhpc3RpbmdfZmVhdHVyZSk7CisgICAgZmFjdG9yeS0+dHlwZSA9IHR5cGU7CisgICAgZXhpc3RpbmdfZmVhdHVyZS0+bG9hZGVkID0gVFJVRTsKKyAgICBnX3R5cGVfc2V0X3FkYXRhICh0eXBlLCBfZ3N0X2VsZW1lbnRjbGFzc19mYWN0b3J5LCBmYWN0b3J5KTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChleGlzdGluZ19mZWF0dXJlKTsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorCisgIGZhY3RvcnkgPQorICAgICAgR1NUX0VMRU1FTlRfRkFDVE9SWV9DQVNUIChnX29iamVjdF9uZXd2IChHU1RfVFlQRV9FTEVNRU5UX0ZBQ1RPUlksIDAsCisgICAgICAgICAgTlVMTCkpOworICBnc3RfcGx1Z2luX2ZlYXR1cmVfc2V0X25hbWUgKEdTVF9QTFVHSU5fRkVBVFVSRV9DQVNUIChmYWN0b3J5KSwgbmFtZSk7CisgIEdTVF9MT0dfT0JKRUNUIChmYWN0b3J5LCAiQ3JlYXRlZCBuZXcgZWxlbWVudGZhY3RvcnkgZm9yIHR5cGUgJXMiLAorICAgICAgZ190eXBlX25hbWUgKHR5cGUpKTsKKworICAvKiBwcm92aWRlIGluZm8gbmVlZGVkIGR1cmluZyBjbGFzcyBzdHJ1Y3R1cmUgc2V0dXAgKi8KKyAgZ190eXBlX3NldF9xZGF0YSAodHlwZSwgX2dzdF9lbGVtZW50Y2xhc3NfZmFjdG9yeSwgZmFjdG9yeSk7CisgIGtsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGdfdHlwZV9jbGFzc19yZWYgKHR5cGUpKTsKKyNpZiAwCisgIC8qIEZJWE1FICovCisgIGlmICgoa2xhc3MtPmRldGFpbHMubG9uZ25hbWUgPT0gTlVMTCkgfHwKKyAgICAgIChrbGFzcy0+ZGV0YWlscy5rbGFzcyA9PSBOVUxMKSB8fCAoa2xhc3MtPmRldGFpbHMuYXV0aG9yID09IE5VTEwpKQorICAgIGdvdG8gZGV0YWlsc2Vycm9yOworI2VuZGlmCisKKyAgZmFjdG9yeS0+dHlwZSA9IHR5cGU7CisgIGZhY3RvcnktPm1ldGFkYXRhID0gZ3N0X3N0cnVjdHVyZV9jb3B5ICgoR3N0U3RydWN0dXJlICopIGtsYXNzLT5tZXRhZGF0YSk7CisKKyAgZm9yIChpdGVtID0ga2xhc3MtPnBhZHRlbXBsYXRlczsgaXRlbTsgaXRlbSA9IGl0ZW0tPm5leHQpIHsKKyAgICBHc3RQYWRUZW1wbGF0ZSAqdGVtcGwgPSBpdGVtLT5kYXRhOworICAgIEdzdFN0YXRpY1BhZFRlbXBsYXRlICpuZXd0OworICAgIGdjaGFyICpjYXBzX3N0cmluZyA9IGdzdF9jYXBzX3RvX3N0cmluZyAodGVtcGwtPmNhcHMpOworCisgICAgbmV3dCA9IGdfc2xpY2VfbmV3IChHc3RTdGF0aWNQYWRUZW1wbGF0ZSk7CisgICAgbmV3dC0+bmFtZV90ZW1wbGF0ZSA9IGdfaW50ZXJuX3N0cmluZyAodGVtcGwtPm5hbWVfdGVtcGxhdGUpOworICAgIG5ld3QtPmRpcmVjdGlvbiA9IHRlbXBsLT5kaXJlY3Rpb247CisgICAgbmV3dC0+cHJlc2VuY2UgPSB0ZW1wbC0+cHJlc2VuY2U7CisgICAgbmV3dC0+c3RhdGljX2NhcHMuY2Fwcy5taW5pX29iamVjdC5yZWZjb3VudCA9IDA7CisgICAgbmV3dC0+c3RhdGljX2NhcHMuc3RyaW5nID0gZ19pbnRlcm5fc3RyaW5nIChjYXBzX3N0cmluZyk7CisgICAgZmFjdG9yeS0+c3RhdGljcGFkdGVtcGxhdGVzID0KKyAgICAgICAgZ19saXN0X2FwcGVuZCAoZmFjdG9yeS0+c3RhdGljcGFkdGVtcGxhdGVzLCBuZXd0KTsKKworICAgIGdfZnJlZSAoY2Fwc19zdHJpbmcpOworICB9CisgIGZhY3RvcnktPm51bXBhZHRlbXBsYXRlcyA9IGtsYXNzLT5udW1wYWR0ZW1wbGF0ZXM7CisKKyAgLyogc3BlY2lhbCBzdHVmZiBmb3IgVVJJIGhhbmRsaW5nICovCisgIGlmIChnX3R5cGVfaXNfYSAodHlwZSwgR1NUX1RZUEVfVVJJX0hBTkRMRVIpKSB7CisgICAgR3N0VVJJSGFuZGxlckludGVyZmFjZSAqaWZhY2UgPSAoR3N0VVJJSGFuZGxlckludGVyZmFjZSAqKQorICAgICAgICBnX3R5cGVfaW50ZXJmYWNlX3BlZWsgKGtsYXNzLCBHU1RfVFlQRV9VUklfSEFORExFUik7CisKKyAgICBpZiAoIWlmYWNlIHx8ICFpZmFjZS0+Z2V0X3R5cGUgfHwgIWlmYWNlLT5nZXRfcHJvdG9jb2xzKQorICAgICAgZ290byB1cmllcnJvcjsKKyAgICBpZiAoaWZhY2UtPmdldF90eXBlKQorICAgICAgZmFjdG9yeS0+dXJpX3R5cGUgPSBpZmFjZS0+Z2V0X3R5cGUgKGZhY3RvcnktPnR5cGUpOworICAgIGlmICghR1NUX1VSSV9UWVBFX0lTX1ZBTElEIChmYWN0b3J5LT51cmlfdHlwZSkpCisgICAgICBnb3RvIHVyaWVycm9yOworICAgIGlmIChpZmFjZS0+Z2V0X3Byb3RvY29scykKKyAgICAgIGZhY3RvcnktPnVyaV9wcm90b2NvbHMgPSBpZmFjZS0+Z2V0X3Byb3RvY29scyAoZmFjdG9yeS0+dHlwZSk7CisgICAgaWYgKCFmYWN0b3J5LT51cmlfcHJvdG9jb2xzKQorICAgICAgZ290byB1cmllcnJvcjsKKyAgfQorCisgIGludGVyZmFjZXMgPSBnX3R5cGVfaW50ZXJmYWNlcyAodHlwZSwgJm5faW50ZXJmYWNlcyk7CisgIGZvciAoaSA9IDA7IGkgPCBuX2ludGVyZmFjZXM7IGkrKykgeworICAgIF9fZ3N0X2VsZW1lbnRfZmFjdG9yeV9hZGRfaW50ZXJmYWNlIChmYWN0b3J5LCBnX3R5cGVfbmFtZSAoaW50ZXJmYWNlc1tpXSkpOworICB9CisgIGdfZnJlZSAoaW50ZXJmYWNlcyk7CisKKyAgaWYgKHBsdWdpbiAmJiBwbHVnaW4tPmRlc2MubmFtZSkgeworICAgIEdTVF9QTFVHSU5fRkVBVFVSRV9DQVNUIChmYWN0b3J5KS0+cGx1Z2luX25hbWUgPSBwbHVnaW4tPmRlc2MubmFtZTsKKyAgICBHU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVCAoZmFjdG9yeSktPnBsdWdpbiA9IHBsdWdpbjsKKyAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyICgoR09iamVjdCAqKSBwbHVnaW4sCisgICAgICAgIChncG9pbnRlciAqKSAmIEdTVF9QTFVHSU5fRkVBVFVSRV9DQVNUIChmYWN0b3J5KS0+cGx1Z2luKTsKKyAgfSBlbHNlIHsKKyAgICBHU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVCAoZmFjdG9yeSktPnBsdWdpbl9uYW1lID0gIk5VTEwiOworICAgIEdTVF9QTFVHSU5fRkVBVFVSRV9DQVNUIChmYWN0b3J5KS0+cGx1Z2luID0gTlVMTDsKKyAgfQorICBnc3RfcGx1Z2luX2ZlYXR1cmVfc2V0X3JhbmsgKEdTVF9QTFVHSU5fRkVBVFVSRV9DQVNUIChmYWN0b3J5KSwgcmFuayk7CisgIEdTVF9QTFVHSU5fRkVBVFVSRV9DQVNUIChmYWN0b3J5KS0+bG9hZGVkID0gVFJVRTsKKworICBnc3RfcmVnaXN0cnlfYWRkX2ZlYXR1cmUgKHJlZ2lzdHJ5LCBHU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVCAoZmFjdG9yeSkpOworCisgIHJldHVybiBUUlVFOworCisgIC8qIEVSUk9SUyAqLwordXJpZXJyb3I6CisgIHsKKyAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGZhY3RvcnksICJlcnJvciB3aXRoIHVyaSBoYW5kbGVyISIpOworICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfY2xlYW51cCAoZmFjdG9yeSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyNpZiAwCitkZXRhaWxzZXJyb3I6CisgIHsKKyAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGZhY3RvcnksCisgICAgICAgICJUaGUgR3N0RWxlbWVudERldGFpbHMgZG9uJ3Qgc2VlbSB0byBoYXZlIGJlZW4gc2V0IHByb3Blcmx5Iik7CisgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9jbGVhbnVwIChmYWN0b3J5KTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKyNlbmRpZgorfQorCisvKioKKyAqIGdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlOgorICogQGZhY3Rvcnk6IGZhY3RvcnkgdG8gaW5zdGFudGlhdGUKKyAqIEBuYW1lOiAoYWxsb3ctbm9uZSk6IG5hbWUgb2YgbmV3IGVsZW1lbnQsIG9yIE5VTEwgdG8gYXV0b21hdGljYWxseSBjcmVhdGUKKyAqICAgIGEgdW5pcXVlIG5hbWUKKyAqCisgKiBDcmVhdGUgYSBuZXcgZWxlbWVudCBvZiB0aGUgdHlwZSBkZWZpbmVkIGJ5IHRoZSBnaXZlbiBlbGVtZW50ZmFjdG9yeS4KKyAqIEl0IHdpbGwgYmUgZ2l2ZW4gdGhlIG5hbWUgc3VwcGxpZWQsIHNpbmNlIGFsbCBlbGVtZW50cyByZXF1aXJlIGEgbmFtZSBhcworICogdGhlaXIgZmlyc3QgYXJndW1lbnQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBuZXcgI0dzdEVsZW1lbnQgb3IgTlVMTCBpZiB0aGUgZWxlbWVudCBjb3VsZG4ndAorICogICAgIGJlIGNyZWF0ZWQKKyAqLworR3N0RWxlbWVudCAqCitnc3RfZWxlbWVudF9mYWN0b3J5X2NyZWF0ZSAoR3N0RWxlbWVudEZhY3RvcnkgKiBmYWN0b3J5LCBjb25zdCBnY2hhciAqIG5hbWUpCit7CisgIEdzdEVsZW1lbnQgKmVsZW1lbnQ7CisgIEdzdEVsZW1lbnRDbGFzcyAqb2NsYXNzOworICBHc3RFbGVtZW50RmFjdG9yeSAqbmV3ZmFjdG9yeTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmFjdG9yeSAhPSBOVUxMLCBOVUxMKTsKKworICBuZXdmYWN0b3J5ID0KKyAgICAgIEdTVF9FTEVNRU5UX0ZBQ1RPUlkgKGdzdF9wbHVnaW5fZmVhdHVyZV9sb2FkIChHU1RfUExVR0lOX0ZFQVRVUkUKKyAgICAgICAgICAoZmFjdG9yeSkpKTsKKworICBpZiAobmV3ZmFjdG9yeSA9PSBOVUxMKQorICAgIGdvdG8gbG9hZF9mYWlsZWQ7CisKKyAgZmFjdG9yeSA9IG5ld2ZhY3Rvcnk7CisKKyAgaWYgKG5hbWUpCisgICAgR1NUX0lORk8gKCJjcmVhdGluZyBlbGVtZW50IFwiJXNcIiBuYW1lZCBcIiVzXCIiLAorICAgICAgICBHU1RfT0JKRUNUX05BTUUgKGZhY3RvcnkpLCBHU1RfU1RSX05VTEwgKG5hbWUpKTsKKyAgZWxzZQorICAgIEdTVF9JTkZPICgiY3JlYXRpbmcgZWxlbWVudCBcIiVzXCIiLCBHU1RfT0JKRUNUX05BTUUgKGZhY3RvcnkpKTsKKworICBpZiAoZmFjdG9yeS0+dHlwZSA9PSAwKQorICAgIGdvdG8gbm9fdHlwZTsKKworICAvKiBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGVsZW1lbnQsIGNhc3Qgc28gd2UgZG9uJ3QgYXNzZXJ0IG9uIE5VTEwKKyAgICogYWxzbyBzZXQgbmFtZSBhcyBlYXJseSBhcyB3ZSBjYW4KKyAgICovCisgIGlmIChuYW1lKQorICAgIGVsZW1lbnQgPQorICAgICAgICBHU1RfRUxFTUVOVF9DQVNUIChnX29iamVjdF9uZXcgKGZhY3RvcnktPnR5cGUsICJuYW1lIiwgbmFtZSwgTlVMTCkpOworICBlbHNlCisgICAgZWxlbWVudCA9IEdTVF9FTEVNRU5UX0NBU1QgKGdfb2JqZWN0X25ld3YgKGZhY3RvcnktPnR5cGUsIDAsIE5VTEwpKTsKKyAgaWYgKEdfVU5MSUtFTFkgKGVsZW1lbnQgPT0gTlVMTCkpCisgICAgZ290byBub19lbGVtZW50OworCisgIC8qIGZpbGwgaW4gdGhlIHBvaW50ZXIgdG8gdGhlIGZhY3RvcnkgaW4gdGhlIGVsZW1lbnQgY2xhc3MuIFRoZQorICAgKiBjbGFzcyB3aWxsIG5vdCBiZSB1bnJlZmZlZCBjdXJyZW50bHkuCisgICAqIEJlIHRocmVhZCBzYWZlIGFzIHRoZXJlIG1pZ2h0IGJlIDIgdGhyZWFkcyBjcmVhdGluZyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YKKyAgICogYW4gZWxlbWVudCBhdCB0aGUgc2FtZSBtb21lbnQKKyAgICovCisgIG9jbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAoZWxlbWVudCk7CisgIGlmICghR19BVE9NSUNfUE9JTlRFUl9DT01QQVJFX0FORF9FWENIQU5HRSAoJm9jbGFzcy0+ZWxlbWVudGZhY3RvcnksIE5VTEwsCisgICAgICAgICAgZmFjdG9yeSkpCisgICAgZ3N0X29iamVjdF91bnJlZiAoZmFjdG9yeSk7CisKKyAgR1NUX0RFQlVHICgiY3JlYXRlZCBlbGVtZW50IFwiJXNcIiIsIEdTVF9PQkpFQ1RfTkFNRSAoZmFjdG9yeSkpOworCisgIHJldHVybiBlbGVtZW50OworCisgIC8qIEVSUk9SUyAqLworbG9hZF9mYWlsZWQ6CisgIHsKKyAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGZhY3RvcnksCisgICAgICAgICJsb2FkaW5nIHBsdWdpbiBjb250YWluaW5nIGZlYXR1cmUgJXMgcmV0dXJuZWQgTlVMTCEiLCBuYW1lKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorbm9fdHlwZToKKyAgeworICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZmFjdG9yeSwgImZhY3RvcnkgaGFzIG5vIHR5cGUiKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChmYWN0b3J5KTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorbm9fZWxlbWVudDoKKyAgeworICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZmFjdG9yeSwgImNvdWxkIG5vdCBjcmVhdGUgZWxlbWVudCIpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKGZhY3RvcnkpOworICAgIHJldHVybiBOVUxMOworICB9Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlOgorICogQGZhY3RvcnluYW1lOiBhIG5hbWVkIGZhY3RvcnkgdG8gaW5zdGFudGlhdGUKKyAqIEBuYW1lOiAoYWxsb3ctbm9uZSk6IG5hbWUgb2YgbmV3IGVsZW1lbnQsIG9yIE5VTEwgdG8gYXV0b21hdGljYWxseSBjcmVhdGUKKyAqICAgIGEgdW5pcXVlIG5hbWUKKyAqCisgKiBDcmVhdGUgYSBuZXcgZWxlbWVudCBvZiB0aGUgdHlwZSBkZWZpbmVkIGJ5IHRoZSBnaXZlbiBlbGVtZW50IGZhY3RvcnkuCisgKiBJZiBuYW1lIGlzIE5VTEwsIHRoZW4gdGhlIGVsZW1lbnQgd2lsbCByZWNlaXZlIGEgZ3VhcmFudGVlZCB1bmlxdWUgbmFtZSwKKyAqIGNvbnNpc3Rpbmcgb2YgdGhlIGVsZW1lbnQgZmFjdG9yeSBuYW1lIGFuZCBhIG51bWJlci4KKyAqIElmIG5hbWUgaXMgZ2l2ZW4sIGl0IHdpbGwgYmUgZ2l2ZW4gdGhlIG5hbWUgc3VwcGxpZWQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBuZXcgI0dzdEVsZW1lbnQgb3IgTlVMTCBpZiB1bmFibGUgdG8gY3JlYXRlIGVsZW1lbnQKKyAqLworR3N0RWxlbWVudCAqCitnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKGNvbnN0IGdjaGFyICogZmFjdG9yeW5hbWUsIGNvbnN0IGdjaGFyICogbmFtZSkKK3sKKyAgR3N0RWxlbWVudEZhY3RvcnkgKmZhY3Rvcnk7CisgIEdzdEVsZW1lbnQgKmVsZW1lbnQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZhY3RvcnluYW1lICE9IE5VTEwsIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X2lzX2luaXRpYWxpemVkICgpLCBOVUxMKTsKKworICBHU1RfTE9HICgiZ3N0ZWxlbWVudGZhY3Rvcnk6IG1ha2UgXCIlc1wiIFwiJXNcIiIsCisgICAgICBmYWN0b3J5bmFtZSwgR1NUX1NUUl9OVUxMIChuYW1lKSk7CisKKyAgZmFjdG9yeSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZCAoZmFjdG9yeW5hbWUpOworICBpZiAoZmFjdG9yeSA9PSBOVUxMKQorICAgIGdvdG8gbm9fZmFjdG9yeTsKKworICBHU1RfTE9HX09CSkVDVCAoZmFjdG9yeSwgImZvdW5kIGZhY3RvcnkgJXAiLCBmYWN0b3J5KTsKKyAgZWxlbWVudCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlIChmYWN0b3J5LCBuYW1lKTsKKyAgaWYgKGVsZW1lbnQgPT0gTlVMTCkKKyAgICBnb3RvIGNyZWF0ZV9mYWlsZWQ7CisKKyAgZ3N0X29iamVjdF91bnJlZiAoZmFjdG9yeSk7CisgIHJldHVybiBlbGVtZW50OworCisgIC8qIEVSUk9SUyAqLworbm9fZmFjdG9yeToKKyAgeworICAgIEdTVF9JTkZPICgibm8gc3VjaCBlbGVtZW50IGZhY3RvcnkgXCIlc1wiISIsIGZhY3RvcnluYW1lKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorY3JlYXRlX2ZhaWxlZDoKKyAgeworICAgIEdTVF9JTkZPX09CSkVDVCAoZmFjdG9yeSwgImNvdWxkbid0IGNyZWF0ZSBpbnN0YW5jZSEiKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChmYWN0b3J5KTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorfQorCit2b2lkCitfX2dzdF9lbGVtZW50X2ZhY3RvcnlfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKEdzdEVsZW1lbnRGYWN0b3J5ICogZmFjdG9yeSwKKyAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqIHRlbXBsKQoreworICBnX3JldHVybl9pZl9mYWlsIChmYWN0b3J5ICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsICh0ZW1wbCAhPSBOVUxMKTsKKworICBmYWN0b3J5LT5zdGF0aWNwYWR0ZW1wbGF0ZXMgPQorICAgICAgZ19saXN0X2FwcGVuZCAoZmFjdG9yeS0+c3RhdGljcGFkdGVtcGxhdGVzLCB0ZW1wbCk7CisgIGZhY3RvcnktPm51bXBhZHRlbXBsYXRlcysrOworfQorCisvKioKKyAqIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X2VsZW1lbnRfdHlwZToKKyAqIEBmYWN0b3J5OiBmYWN0b3J5IHRvIGdldCBtYW5hZ2VkICNHVHlwZSBmcm9tCisgKgorICogR2V0IHRoZSAjR1R5cGUgZm9yIGVsZW1lbnRzIG1hbmFnZWQgYnkgdGhpcyBmYWN0b3J5LiBUaGUgdHlwZSBjYW4KKyAqIG9ubHkgYmUgcmV0cmlldmVkIGlmIHRoZSBlbGVtZW50IGZhY3RvcnkgaXMgbG9hZGVkLCB3aGljaCBjYW4gYmUKKyAqIGFzc3VyZWQgd2l0aCBnc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZCgpLgorICoKKyAqIFJldHVybnM6IHRoZSAjR1R5cGUgZm9yIGVsZW1lbnRzIG1hbmFnZWQgYnkgdGhpcyBmYWN0b3J5IG9yIDAgaWYKKyAqIHRoZSBmYWN0b3J5IGlzIG5vdCBsb2FkZWQuCisgKi8KK0dUeXBlCitnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9lbGVtZW50X3R5cGUgKEdzdEVsZW1lbnRGYWN0b3J5ICogZmFjdG9yeSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UX0ZBQ1RPUlkgKGZhY3RvcnkpLCAwKTsKKworICByZXR1cm4gZmFjdG9yeS0+dHlwZTsKK30KKworY29uc3QgZ2NoYXIgKgorZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbWV0YWRhdGEgKEdzdEVsZW1lbnRGYWN0b3J5ICogZmFjdG9yeSwKKyAgICBjb25zdCBnY2hhciAqIGtleSkKK3sKKyAgcmV0dXJuIGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoKEdzdFN0cnVjdHVyZSAqKSBmYWN0b3J5LT5tZXRhZGF0YSwga2V5KTsKK30KKworLyoqCisgKiBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9udW1fcGFkX3RlbXBsYXRlczoKKyAqIEBmYWN0b3J5OiBhICNHc3RFbGVtZW50RmFjdG9yeQorICoKKyAqIEdldHMgdGhlIG51bWJlciBvZiBwYWRfdGVtcGxhdGVzIGluIHRoaXMgZmFjdG9yeS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbnVtYmVyIG9mIHBhZF90ZW1wbGF0ZXMKKyAqLworZ3VpbnQKK2dzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X251bV9wYWRfdGVtcGxhdGVzIChHc3RFbGVtZW50RmFjdG9yeSAqIGZhY3RvcnkpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVF9GQUNUT1JZIChmYWN0b3J5KSwgMCk7CisKKyAgcmV0dXJuIGZhY3RvcnktPm51bXBhZHRlbXBsYXRlczsKK30KKworLyoqCisgKiBfX2dzdF9lbGVtZW50X2ZhY3RvcnlfYWRkX2ludGVyZmFjZToKKyAqIEBlbGVtZW50ZmFjdG9yeTogVGhlIGVsZW1lbnRmYWN0b3J5IHRvIGFkZCB0aGUgaW50ZXJmYWNlIHRvCisgKiBAaW50ZXJmYWNlbmFtZTogTmFtZSBvZiB0aGUgaW50ZXJmYWNlCisgKgorICogQWRkcyB0aGUgZ2l2ZW4gaW50ZXJmYWNlbmFtZSB0byB0aGUgbGlzdCBvZiBpbXBsZW1lbnRlZCBpbnRlcmZhY2VzIG9mIHRoZQorICogZWxlbWVudC4KKyAqLwordm9pZAorX19nc3RfZWxlbWVudF9mYWN0b3J5X2FkZF9pbnRlcmZhY2UgKEdzdEVsZW1lbnRGYWN0b3J5ICogZWxlbWVudGZhY3RvcnksCisgICAgY29uc3QgZ2NoYXIgKiBpbnRlcmZhY2VuYW1lKQoreworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVF9GQUNUT1JZIChlbGVtZW50ZmFjdG9yeSkpOworICBnX3JldHVybl9pZl9mYWlsIChpbnRlcmZhY2VuYW1lICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsIChpbnRlcmZhY2VuYW1lWzBdICE9ICdcMCcpOyAgLyogbm8gZW1wdHkgc3RyaW5nICovCisKKyAgZWxlbWVudGZhY3RvcnktPmludGVyZmFjZXMgPQorICAgICAgZ19saXN0X3ByZXBlbmQgKGVsZW1lbnRmYWN0b3J5LT5pbnRlcmZhY2VzLAorICAgICAgKGdwb2ludGVyKSBnX2ludGVybl9zdHJpbmcgKGludGVyZmFjZW5hbWUpKTsKK30KKworLyoqCisgKiBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9zdGF0aWNfcGFkX3RlbXBsYXRlczoKKyAqIEBmYWN0b3J5OiBhICNHc3RFbGVtZW50RmFjdG9yeQorICoKKyAqIEdldHMgdGhlICNHTGlzdCBvZiAjR3N0U3RhdGljUGFkVGVtcGxhdGUgZm9yIHRoaXMgZmFjdG9yeS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSkgKGVsZW1lbnQtdHlwZSBHc3QuU3RhdGljUGFkVGVtcGxhdGUpOiB0aGUKKyAqICAgICBzdGF0aWMgcGFkIHRlbXBsYXRlcworICovCitjb25zdCBHTGlzdCAqCitnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9zdGF0aWNfcGFkX3RlbXBsYXRlcyAoR3N0RWxlbWVudEZhY3RvcnkgKiBmYWN0b3J5KQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlRfRkFDVE9SWSAoZmFjdG9yeSksIE5VTEwpOworCisgIHJldHVybiBmYWN0b3J5LT5zdGF0aWNwYWR0ZW1wbGF0ZXM7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfdXJpX3R5cGU6CisgKiBAZmFjdG9yeTogYSAjR3N0RWxlbWVudEZhY3RvcnkKKyAqCisgKiBHZXRzIHRoZSB0eXBlIG9mIFVSSXMgdGhlIGVsZW1lbnQgc3VwcG9ydHMgb3IgI0dTVF9VUklfVU5LTk9XTiBpZiBub25lLgorICoKKyAqIFJldHVybnM6IHR5cGUgb2YgVVJJcyB0aGlzIGVsZW1lbnQgc3VwcG9ydHMKKyAqLworZ2ludAorZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfdXJpX3R5cGUgKEdzdEVsZW1lbnRGYWN0b3J5ICogZmFjdG9yeSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UX0ZBQ1RPUlkgKGZhY3RvcnkpLCBHU1RfVVJJX1VOS05PV04pOworCisgIHJldHVybiBmYWN0b3J5LT51cmlfdHlwZTsKK30KKworLyoqCisgKiBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF91cmlfcHJvdG9jb2xzOgorICogQGZhY3Rvcnk6IGEgI0dzdEVsZW1lbnRGYWN0b3J5CisgKgorICogR2V0cyBhIE5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBwcm90b2NvbHMgdGhpcyBlbGVtZW50IHN1cHBvcnRzIG9yIE5VTEwgaWYKKyAqIG5vIHByb3RvY29scyBhcmUgc3VwcG9ydGVkLiBZb3UgbWF5IG5vdCBjaGFuZ2UgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXR1cm5lZAorICogYXJyYXksIGFzIGl0IGlzIHN0aWxsIG93bmVkIGJ5IHRoZSBlbGVtZW50IGZhY3RvcnkuIFVzZSBnX3N0cmR1cHYoKSB0bworICogbWFrZSBhIGNvcHkgb2YgdGhlIHByb3RvY29sIHN0cmluZyBhcnJheSBpZiB5b3UgbmVlZCB0by4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSkgKGFycmF5IHplcm8tdGVybWluYXRlZD0xKTogdGhlIHN1cHBvcnRlZCBwcm90b2NvbHMKKyAqICAgICBvciBOVUxMCisgKi8KK2djaGFyICoqCitnc3RfZWxlbWVudF9mYWN0b3J5X2dldF91cmlfcHJvdG9jb2xzIChHc3RFbGVtZW50RmFjdG9yeSAqIGZhY3RvcnkpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVF9GQUNUT1JZIChmYWN0b3J5KSwgTlVMTCk7CisKKyAgcmV0dXJuIGZhY3RvcnktPnVyaV9wcm90b2NvbHM7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfZmFjdG9yeV9oYXNfaW50ZXJmYWNlOgorICogQGZhY3Rvcnk6IGEgI0dzdEVsZW1lbnRGYWN0b3J5CisgKiBAaW50ZXJmYWNlbmFtZTogYW4gaW50ZXJmYWNlIG5hbWUKKyAqCisgKiBDaGVjayBpZiBAZmFjdG9yeSBpbXBsZW1lbnRzIHRoZSBpbnRlcmZhY2Ugd2l0aCBuYW1lIEBpbnRlcmZhY2VuYW1lLgorICoKKyAqIFJldHVybnM6ICNUUlVFIHdoZW4gQGZhY3RvcnkgaW1wbGVtZW50IHRoZSBpbnRlcmZhY2UuCisgKgorICogU2luY2U6IDAuMTAuMTQKKyAqLworZ2Jvb2xlYW4KK2dzdF9lbGVtZW50X2ZhY3RvcnlfaGFzX2ludGVyZmFjZSAoR3N0RWxlbWVudEZhY3RvcnkgKiBmYWN0b3J5LAorICAgIGNvbnN0IGdjaGFyICogaW50ZXJmYWNlbmFtZSkKK3sKKyAgR0xpc3QgKndhbGs7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UX0ZBQ1RPUlkgKGZhY3RvcnkpLCBGQUxTRSk7CisKKyAgZm9yICh3YWxrID0gZmFjdG9yeS0+aW50ZXJmYWNlczsgd2Fsazsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgeworICAgIGdjaGFyICppbmFtZSA9IChnY2hhciAqKSB3YWxrLT5kYXRhOworCisgICAgaWYgKCFzdHJjbXAgKGluYW1lLCBpbnRlcmZhY2VuYW1lKSkKKyAgICAgIHJldHVybiBUUlVFOworICB9CisgIHJldHVybiBGQUxTRTsKK30KKworCit0eXBlZGVmIHN0cnVjdAoreworICBHc3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlIHR5cGU7CisgIEdzdFJhbmsgbWlucmFuazsKK30gRmlsdGVyRGF0YTsKKworCisvKioKKyAqIGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9pc190eXBlOgorICogQGZhY3Rvcnk6IGEgI0dzdEVsZW1lbnRGYWN0b3J5CisgKiBAdHlwZTogYSAjR3N0RWxlbWVudEZhY3RvcnlMaXN0VHlwZQorICoKKyAqIENoZWNrIGlmIEBmYWN0b3J5IGlzIG9mIHRoZSBnaXZlbiB0eXBlcy4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBAZmFjdG9yeSBpcyBvZiBAdHlwZS4KKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCitnYm9vbGVhbgorZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2lzX3R5cGUgKEdzdEVsZW1lbnRGYWN0b3J5ICogZmFjdG9yeSwKKyAgICBHc3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlIHR5cGUpCit7CisgIGdib29sZWFuIHJlcyA9IEZBTFNFOworICBjb25zdCBnY2hhciAqa2xhc3M7CisKKyAga2xhc3MgPQorICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbWV0YWRhdGEgKGZhY3RvcnksIEdTVF9FTEVNRU5UX01FVEFEQVRBX0tMQVNTKTsKKworICAvKiBGaWx0ZXIgYnkgZWxlbWVudCB0eXBlIGZpcnN0LCBhcyBzb29uIGFzIGl0IG1hdGNoZXMKKyAgICogb25lIHR5cGUsIHdlIHNraXAgYWxsIG90aGVyIHRlc3RzICovCisgIGlmICghcmVzICYmICh0eXBlICYgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1NJTkspKQorICAgIHJlcyA9IChzdHJzdHIgKGtsYXNzLCAiU2luayIpICE9IE5VTEwpOworCisgIGlmICghcmVzICYmICh0eXBlICYgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1NSQykpCisgICAgcmVzID0gKHN0cnN0ciAoa2xhc3MsICJTb3VyY2UiKSAhPSBOVUxMKTsKKworICBpZiAoIXJlcyAmJiAodHlwZSAmIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNPREVSKSkKKyAgICByZXMgPSAoc3Ryc3RyIChrbGFzcywgIkRlY29kZXIiKSAhPSBOVUxMKTsKKworICBpZiAoIXJlcyAmJiAodHlwZSAmIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9FTkNPREVSKSkKKyAgICByZXMgPSAoc3Ryc3RyIChrbGFzcywgIkVuY29kZXIiKSAhPSBOVUxMKTsKKworICBpZiAoIXJlcyAmJiAodHlwZSAmIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NVVhFUikpCisgICAgcmVzID0gKHN0cnN0ciAoa2xhc3MsICJNdXhlciIpICE9IE5VTEwpOworCisgIGlmICghcmVzICYmICh0eXBlICYgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFTVVYRVIpKQorICAgIHJlcyA9IChzdHJzdHIgKGtsYXNzLCAiRGVtdXgiKSAhPSBOVUxMKTsKKworICAvKiBGSVhNRSA6IFdlJ3JlIGFjdHVhbGx5IHBhcnNpbmcgdHdvIENsYXNzZXMgaGVyZS4uLiAqLworICBpZiAoIXJlcyAmJiAodHlwZSAmIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVJTRVIpKQorICAgIHJlcyA9ICgoc3Ryc3RyIChrbGFzcywgIlBhcnNlciIpICE9IE5VTEwpCisgICAgICAgICYmIChzdHJzdHIgKGtsYXNzLCAiQ29kZWMiKSAhPSBOVUxMKSk7CisKKyAgaWYgKCFyZXMgJiYgKHR5cGUgJiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVQQVlMT0FERVIpKQorICAgIHJlcyA9IChzdHJzdHIgKGtsYXNzLCAiRGVwYXlsb2FkZXIiKSAhPSBOVUxMKTsKKworICBpZiAoIXJlcyAmJiAodHlwZSAmIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVlMT0FERVIpKQorICAgIHJlcyA9IChzdHJzdHIgKGtsYXNzLCAiUGF5bG9hZGVyIikgIT0gTlVMTCk7CisKKyAgaWYgKCFyZXMgJiYgKHR5cGUgJiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfRk9STUFUVEVSKSkKKyAgICByZXMgPSAoc3Ryc3RyIChrbGFzcywgIkZvcm1hdHRlciIpICE9IE5VTEwpOworCisgIC8qIEZpbHRlciBieSBtZWRpYSB0eXBlIG5vdywgd2Ugb25seSB0ZXN0IGlmIGl0CisgICAqIG1hdGNoZWQgYW55IG9mIHRoZSB0eXBlcyBhYm92ZS4gKi8KKyAgaWYgKHJlcworICAgICAgJiYgKHR5cGUgJiAoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX0FVRElPIHwKKyAgICAgICAgICAgICAgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX1ZJREVPIHwKKyAgICAgICAgICAgICAgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX0lNQUdFKSkpCisgICAgcmVzID0gKCh0eXBlICYgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX0FVRElPKQorICAgICAgICAmJiAoc3Ryc3RyIChrbGFzcywgIkF1ZGlvIikgIT0gTlVMTCkpCisgICAgICAgIHx8ICgodHlwZSAmIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9WSURFTykKKyAgICAgICAgJiYgKHN0cnN0ciAoa2xhc3MsICJWaWRlbyIpICE9IE5VTEwpKQorICAgICAgICB8fCAoKHR5cGUgJiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfSU1BR0UpCisgICAgICAgICYmIChzdHJzdHIgKGtsYXNzLCAiSW1hZ2UiKSAhPSBOVUxMKSk7CisKKyAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIGdib29sZWFuCitlbGVtZW50X2ZpbHRlciAoR3N0UGx1Z2luRmVhdHVyZSAqIGZlYXR1cmUsIEZpbHRlckRhdGEgKiBkYXRhKQoreworICBnYm9vbGVhbiByZXM7CisKKyAgLyogd2Ugb25seSBjYXJlIGFib3V0IGVsZW1lbnQgZmFjdG9yaWVzICovCisgIGlmIChHX1VOTElLRUxZICghR1NUX0lTX0VMRU1FTlRfRkFDVE9SWSAoZmVhdHVyZSkpKQorICAgIHJldHVybiBGQUxTRTsKKworICByZXMgPSAoZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9yYW5rIChmZWF0dXJlKSA+PSBkYXRhLT5taW5yYW5rKSAmJgorICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2lzX3R5cGUgKEdTVF9FTEVNRU5UX0ZBQ1RPUllfQ0FTVCAoZmVhdHVyZSksCisgICAgICBkYXRhLT50eXBlKTsKKworICByZXR1cm4gcmVzOworfQorCisvKioKKyAqIGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHM6CisgKiBAdHlwZTogYSAjR3N0RWxlbWVudEZhY3RvcnlMaXN0VHlwZQorICogQG1pbnJhbms6IE1pbmltdW0gcmFuaworICoKKyAqIEdldCBhIGxpc3Qgb2YgZmFjdG9yaWVzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIEB0eXBlLiBPbmx5IGVsZW1lbnRzCisgKiB3aXRoIGEgcmFuayBncmVhdGVyIG9yIGVxdWFsIHRvIEBtaW5yYW5rIHdpbGwgYmUgcmV0dXJuZWQuCisgKiBUaGUgbGlzdCBvZiBmYWN0b3JpZXMgaXMgcmV0dXJuZWQgYnkgZGVjcmVhc2luZyByYW5rLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAoZWxlbWVudC10eXBlIEdzdC5FbGVtZW50RmFjdG9yeSk6IGEgI0dMaXN0IG9mCisgKiAgICAgI0dzdEVsZW1lbnRGYWN0b3J5IGVsZW1lbnRzLiBVc2UgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSgpIGFmdGVyCisgKiAgICAgdXNhZ2UuCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLworR0xpc3QgKgorZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2dldF9lbGVtZW50cyAoR3N0RWxlbWVudEZhY3RvcnlMaXN0VHlwZSB0eXBlLAorICAgIEdzdFJhbmsgbWlucmFuaykKK3sKKyAgR0xpc3QgKnJlc3VsdDsKKyAgRmlsdGVyRGF0YSBkYXRhOworCisgIC8qIHByZXBhcmUgdHlwZSAqLworICBkYXRhLnR5cGUgPSB0eXBlOworICBkYXRhLm1pbnJhbmsgPSBtaW5yYW5rOworCisgIC8qIGdldCB0aGUgZmVhdHVyZSBsaXN0IHVzaW5nIHRoZSBmaWx0ZXIgKi8KKyAgcmVzdWx0ID0gZ3N0X2RlZmF1bHRfcmVnaXN0cnlfZmVhdHVyZV9maWx0ZXIgKChHc3RQbHVnaW5GZWF0dXJlRmlsdGVyKQorICAgICAgZWxlbWVudF9maWx0ZXIsIEZBTFNFLCAmZGF0YSk7CisKKyAgLyogc29ydCBvbiByYW5rIGFuZCBuYW1lICovCisgIHJlc3VsdCA9IGdfbGlzdF9zb3J0IChyZXN1bHQsIGdzdF9wbHVnaW5fZmVhdHVyZV9yYW5rX2NvbXBhcmVfZnVuYyk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZmlsdGVyOgorICogQGxpc3Q6ICh0cmFuc2ZlciBub25lKSAoZWxlbWVudC10eXBlIEdzdC5FbGVtZW50RmFjdG9yeSk6IGEgI0dMaXN0IG9mCisgKiAgICAgI0dzdEVsZW1lbnRGYWN0b3J5IHRvIGZpbHRlcgorICogQGNhcHM6IGEgI0dzdENhcHMKKyAqIEBkaXJlY3Rpb246IGEgI0dzdFBhZERpcmVjdGlvbiB0byBmaWx0ZXIgb24KKyAqIEBzdWJzZXRvbmx5OiB3aGV0aGVyIHRvIGZpbHRlciBvbiBjYXBzIHN1YnNldHMgb3Igbm90LgorICoKKyAqIEZpbHRlciBvdXQgYWxsIHRoZSBlbGVtZW50ZmFjdG9yaWVzIGluIEBsaXN0IHRoYXQgY2FuIGhhbmRsZSBAY2FwcyBpbgorICogdGhlIGdpdmVuIGRpcmVjdGlvbi4KKyAqCisgKiBJZiBAc3Vic2V0b25seSBpcyAlVFJVRSwgdGhlbiBvbmx5IHRoZSBlbGVtZW50cyB3aG9zZSBwYWRzIHRlbXBsYXRlcworICogYXJlIGEgY29tcGxldGUgc3VwZXJzZXQgb2YgQGNhcHMgd2lsbCBiZSByZXR1cm5lZC4gRWxzZSBhbnkgZWxlbWVudAorICogd2hvc2UgcGFkIHRlbXBsYXRlcyBjYXBzIGNhbiBpbnRlcnNlY3Qgd2l0aCBAY2FwcyB3aWxsIGJlIHJldHVybmVkLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAoZWxlbWVudC10eXBlIEdzdC5FbGVtZW50RmFjdG9yeSk6IGEgI0dMaXN0IG9mCisgKiAgICAgI0dzdEVsZW1lbnRGYWN0b3J5IGVsZW1lbnRzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIHJlcXVpc2l0cy4KKyAqICAgICBVc2UgI2dzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUgYWZ0ZXIgdXNhZ2UuCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLworR0xpc3QgKgorZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2ZpbHRlciAoR0xpc3QgKiBsaXN0LAorICAgIGNvbnN0IEdzdENhcHMgKiBjYXBzLCBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBnYm9vbGVhbiBzdWJzZXRvbmx5KQoreworICBHTGlzdCAqcmVzdWx0ID0gTlVMTDsKKworICBHU1RfREVCVUcgKCJmaW5kaW5nIGZhY3RvcmllcyIpOworCisgIC8qIGxvb3Agb3ZlciBhbGwgdGhlIGZhY3RvcmllcyAqLworICBmb3IgKDsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpIHsKKyAgICBHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeTsKKyAgICBjb25zdCBHTGlzdCAqdGVtcGxhdGVzOworICAgIEdMaXN0ICp3YWxrOworCisgICAgZmFjdG9yeSA9IChHc3RFbGVtZW50RmFjdG9yeSAqKSBsaXN0LT5kYXRhOworCisgICAgR1NUX0RFQlVHICgiVHJ5aW5nICVzIiwKKyAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9uYW1lICgoR3N0UGx1Z2luRmVhdHVyZSAqKSBmYWN0b3J5KSk7CisKKyAgICAvKiBnZXQgdGhlIHRlbXBsYXRlcyBmcm9tIHRoZSBlbGVtZW50IGZhY3RvcnkgKi8KKyAgICB0ZW1wbGF0ZXMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9zdGF0aWNfcGFkX3RlbXBsYXRlcyAoZmFjdG9yeSk7CisgICAgZm9yICh3YWxrID0gKEdMaXN0ICopIHRlbXBsYXRlczsgd2Fsazsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgeworICAgICAgR3N0U3RhdGljUGFkVGVtcGxhdGUgKnRlbXBsID0gd2Fsay0+ZGF0YTsKKworICAgICAgLyogd2Ugb25seSBjYXJlIGFib3V0IHRoZSBzaW5rIHRlbXBsYXRlcyAqLworICAgICAgaWYgKHRlbXBsLT5kaXJlY3Rpb24gPT0gZGlyZWN0aW9uKSB7CisgICAgICAgIEdzdENhcHMgKnRtcGxfY2FwczsKKworICAgICAgICAvKiB0cnkgdG8gaW50ZXJzZWN0IHRoZSBjYXBzIHdpdGggdGhlIGNhcHMgb2YgdGhlIHRlbXBsYXRlICovCisgICAgICAgIHRtcGxfY2FwcyA9IGdzdF9zdGF0aWNfY2Fwc19nZXQgKCZ0ZW1wbC0+c3RhdGljX2NhcHMpOworCisgICAgICAgIC8qIEZJWE1FLCBpbnRlcnNlY3QgaXMgbm90IHRoZSByaWdodCBtZXRob2QsIHdlIGlkZWFsbHkgd2FudCB0byBjaGVjaworICAgICAgICAgKiBmb3IgYSBzdWJzZXQgaGVyZSAqLworCisgICAgICAgIC8qIGNoZWNrIGlmIHRoZSBpbnRlcnNlY3Rpb24gaXMgZW1wdHkgKi8KKyAgICAgICAgaWYgKChzdWJzZXRvbmx5ICYmIGdzdF9jYXBzX2lzX3N1YnNldCAoY2FwcywgdG1wbF9jYXBzKSkgfHwKKyAgICAgICAgICAgICghc3Vic2V0b25seSAmJiBnc3RfY2Fwc19jYW5faW50ZXJzZWN0IChjYXBzLCB0bXBsX2NhcHMpKSkgeworICAgICAgICAgIC8qIG5vbiBlbXB0eSBpbnRlcnNlY3Rpb24sIHdlIGNhbiB1c2UgdGhpcyBlbGVtZW50ICovCisgICAgICAgICAgcmVzdWx0ID0gZ19saXN0X3ByZXBlbmQgKHJlc3VsdCwgZ3N0X29iamVjdF9yZWYgKGZhY3RvcnkpKTsKKyAgICAgICAgICBnc3RfY2Fwc191bnJlZiAodG1wbF9jYXBzKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBnc3RfY2Fwc191bnJlZiAodG1wbF9jYXBzKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIGdfbGlzdF9yZXZlcnNlIChyZXN1bHQpOworfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmggYi9nc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTk5NTk0Ci0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmgKQEAgLTAsMCArMSwyNDkgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgMjAwMCwyMDA0IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+CisgKgorICogZ3N0ZWxlbWVudC5oOiBIZWFkZXIgZm9yIEdzdEVsZW1lbnQKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKKyNpZm5kZWYgX19HU1RfRUxFTUVOVF9GQUNUT1JZX0hfXworI2RlZmluZSBfX0dTVF9FTEVNRU5UX0ZBQ1RPUllfSF9fCisKK3R5cGVkZWYgc3RydWN0IF9Hc3RFbGVtZW50RmFjdG9yeSBHc3RFbGVtZW50RmFjdG9yeTsKK3R5cGVkZWYgc3RydWN0IF9Hc3RFbGVtZW50RmFjdG9yeUNsYXNzIEdzdEVsZW1lbnRGYWN0b3J5Q2xhc3M7CisKKyNpbmNsdWRlIDxnc3QvZ3N0Y29uZmlnLmg+CisjaW5jbHVkZSA8Z3N0L2dzdGVsZW1lbnQuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0b2JqZWN0Lmg+CisjaW5jbHVkZSA8Z3N0L2dzdHBsdWdpbi5oPgorI2luY2x1ZGUgPGdzdC9nc3RwbHVnaW5mZWF0dXJlLmg+CisjaW5jbHVkZSA8Z3N0L2dzdHBhZHRlbXBsYXRlLmg+CisjaW5jbHVkZSA8Z3N0L2dzdGl0ZXJhdG9yLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBHU1RfVFlQRV9FTEVNRU5UX0ZBQ1RPUlkgICAgICAgICAgICAgICAgKGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgR1NUX0VMRU1FTlRfRkFDVE9SWShvYmopICAgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9FTEVNRU5UX0ZBQ1RPUlksXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEVsZW1lbnRGYWN0b3J5KSkKKyNkZWZpbmUgR1NUX0VMRU1FTlRfRkFDVE9SWV9DTEFTUyhrbGFzcykgICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0VMRU1FTlRfRkFDVE9SWSxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0RWxlbWVudEZhY3RvcnlDbGFzcykpCisjZGVmaW5lIEdTVF9JU19FTEVNRU5UX0ZBQ1RPUlkob2JqKSAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfRUxFTUVOVF9GQUNUT1JZKSkKKyNkZWZpbmUgR1NUX0lTX0VMRU1FTlRfRkFDVE9SWV9DTEFTUyhrbGFzcykgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0VMRU1FTlRfRkFDVE9SWSkpCisjZGVmaW5lIEdTVF9FTEVNRU5UX0ZBQ1RPUllfQ0FTVChvYmopICAgICAgICAgICAoKEdzdEVsZW1lbnRGYWN0b3J5ICopKG9iaikpCisKKy8qKgorICogR3N0RWxlbWVudEZhY3Rvcnk6CisgKgorICogVGhlIG9wYXF1ZSAjR3N0RWxlbWVudEZhY3RvcnkgZGF0YSBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBfR3N0RWxlbWVudEZhY3RvcnkgeworICBHc3RQbHVnaW5GZWF0dXJlICAgICAgcGFyZW50OworCisgIEdUeXBlICAgICAgICAgICAgICAgICB0eXBlOyAgICAgICAgICAgICAgICAgICAvKiB1bmlxdWUgR1R5cGUgb2YgZWxlbWVudCBvciAwIGlmIG5vdCBsb2FkZWQgKi8KKworICBncG9pbnRlcgkJbWV0YWRhdGE7CisKKyAgR0xpc3QgKiAgICAgICAgICAgICAgIHN0YXRpY3BhZHRlbXBsYXRlczsgICAgIC8qIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGxpc3QgKi8KKyAgZ3VpbnQgICAgICAgICAgICAgICAgIG51bXBhZHRlbXBsYXRlczsKKworICAvKiBVUkkgaW50ZXJmYWNlIHN0dWZmICovCisgIGd1aW50ICAgICAgICAgICAgICAgICB1cmlfdHlwZTsKKyAgZ2NoYXIgKiogICAgICAgICAgICAgIHVyaV9wcm90b2NvbHM7CisKKyAgR0xpc3QgKiAgICAgICAgICAgICAgIGludGVyZmFjZXM7ICAgICAgICAgICAgIC8qIGludGVyZmFjZSB0eXBlIG5hbWVzIHRoaXMgZWxlbWVudCBpbXBsZW1lbnRzICovCisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOworfTsKKworc3RydWN0IF9Hc3RFbGVtZW50RmFjdG9yeUNsYXNzIHsKKyAgR3N0UGx1Z2luRmVhdHVyZUNsYXNzIHBhcmVudF9jbGFzczsKKworICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKK307CisKK0dUeXBlICAgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3R5cGUgICAgICAgICAgICAodm9pZCk7CisKK0dzdEVsZW1lbnRGYWN0b3J5ICogICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZCAgICAgICAgICAgICAgICAoY29uc3QgZ2NoYXIgKm5hbWUpOworCitHVHlwZSAgICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9lbGVtZW50X3R5cGUgICAgKEdzdEVsZW1lbnRGYWN0b3J5ICpmYWN0b3J5KTsKKworY29uc3QgZ2NoYXIgKiAgICAgICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbWV0YWRhdGEgICAgICAgIChHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeSwgY29uc3QgZ2NoYXIgKmtleSk7CisKK2d1aW50ICAgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X251bV9wYWRfdGVtcGxhdGVzIChHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeSk7Citjb25zdCBHTGlzdCAqICAgICAgICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9zdGF0aWNfcGFkX3RlbXBsYXRlcyAoR3N0RWxlbWVudEZhY3RvcnkgKmZhY3RvcnkpOworCitnaW50ICAgICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF91cmlfdHlwZSAgICAgICAgKEdzdEVsZW1lbnRGYWN0b3J5ICpmYWN0b3J5KTsKK2djaGFyICoqICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3VyaV9wcm90b2NvbHMgICAoR3N0RWxlbWVudEZhY3RvcnkgKmZhY3RvcnkpOworCitnYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X2hhc19pbnRlcmZhY2UgICAgICAgKEdzdEVsZW1lbnRGYWN0b3J5ICpmYWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqaW50ZXJmYWNlbmFtZSk7CisKK0dzdEVsZW1lbnQqICAgICAgICAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlICAgICAgICAgICAgICAoR3N0RWxlbWVudEZhY3RvcnkgKmZhY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpuYW1lKTsKK0dzdEVsZW1lbnQqICAgICAgICAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAgICAgICAgICAgICAgICAoY29uc3QgZ2NoYXIgKmZhY3RvcnluYW1lLCBjb25zdCBnY2hhciAqbmFtZSk7CisKKy8qIEZJWE1FIDAuMTE6IG1vdmUgdGhlc2UgdHdvIGludG8gb3VyIHByaXZhdGUgaGVhZGVycyAqLwordm9pZCAgICAgICAgICAgICAgICAgICAgX19nc3RfZWxlbWVudF9mYWN0b3J5X2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChHc3RFbGVtZW50RmFjdG9yeSAqZWxlbWVudGZhY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFN0YXRpY1BhZFRlbXBsYXRlICp0ZW1wbCk7Cit2b2lkICAgICAgICAgICAgICAgICAgICBfX2dzdF9lbGVtZW50X2ZhY3RvcnlfYWRkX2ludGVyZmFjZSAgICAgKEdzdEVsZW1lbnRGYWN0b3J5ICplbGVtZW50ZmFjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKmludGVyZmFjZW5hbWUpOworZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgIChHc3RQbHVnaW4gKnBsdWdpbiwgY29uc3QgZ2NoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IHJhbmssIEdUeXBlIHR5cGUpOworCisvKiBGYWN0b3J5IGxpc3QgZnVuY3Rpb25zICovCisKKy8qKgorICogR3N0RmFjdG9yeUxpc3RUeXBlOgorICogQEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNPREVSOiBEZWNvZGVyIGVsZW1lbnRzCisgKiBAR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0VOQ09ERVI6IEVuY29kZXIgZWxlbWVudHMKKyAqIEBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfU0lOSzogU2luayBlbGVtZW50cworICogQEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9TUkM6IFNvdXJjZSBlbGVtZW50cworICogQEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NVVhFUjogTXV4ZXIgZWxlbWVudHMKKyAqIEBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVNVVhFUjogRGVtdXhlciBlbGVtZW50cworICogQEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVJTRVI6IFBhcnNlciBlbGVtZW50cworICogQEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVlMT0FERVI6IFBheWxvYWRlciBlbGVtZW50cworICogQEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERVBBWUxPQURFUjogRGVwYXlsb2FkZXIgZWxlbWVudHMKKyAqIEBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUFYX0VMRU1FTlRTOiBQcml2YXRlLCBkbyBub3QgdXNlCisgKiBAR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX1ZJREVPOiBFbGVtZW50cyBoYW5kbGluZyB2aWRlbyBtZWRpYSB0eXBlcworICogQEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9BVURJTzogRWxlbWVudHMgaGFuZGxpbmcgYXVkaW8gbWVkaWEgdHlwZXMKKyAqIEBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfSU1BR0U6IEVsZW1lbnRzIGhhbmRsaW5nIGltYWdlIG1lZGlhIHR5cGVzCisgKiBAR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX1NVQlRJVExFOiBFbGVtZW50cyBoYW5kbGluZyBzdWJ0aXRsZSBtZWRpYSB0eXBlcworICogQEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9NRVRBREFUQTogRWxlbWVudHMgaGFuZGxpbmcgbWV0YWRhdGEgbWVkaWEgdHlwZXMKKyAqCisgKiBUaGUgdHlwZSBvZiAjR3N0RWxlbWVudEZhY3RvcnkgdG8gZmlsdGVyLgorICoKKyAqIEFsbCBAR3N0RmFjdG9yeUxpc3RUeXBlIHVwIHRvIEBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUFYX0VMRU1FTlRTIGFyZSBleGNsdXNpdmUuCisgKgorICogSWYgb25lIG9yIG1vcmUgb2YgdGhlIE1FRElBIHR5cGVzIGFyZSBzcGVjaWZpZWQsIHRoZW4gb25seSBlbGVtZW50cworICogbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBtZWRpYSB0eXBlcyB3aWxsIGJlIHNlbGVjdGVkLgorICoKKyAqIFNpbmNlOiAwLjEwLjMxCisgKi8KKwordHlwZWRlZiBndWludDY0IEdzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGU7CisKKyNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNPREVSICAgICAgICAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSA8PCAwKQorI2RlZmluZSAgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0VOQ09ERVIgICAgICAgIChHX0dVSU5UNjRfQ09OU1RBTlQgKDEpIDw8IDEpCisjZGVmaW5lICBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfU0lOSyAgICAgICAgICAgKEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgPDwgMikKKyNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9TUkMgICAgICAgICAgICAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSA8PCAzKQorI2RlZmluZSAgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01VWEVSICAgICAgICAgIChHX0dVSU5UNjRfQ09OU1RBTlQgKDEpIDw8IDQpCisjZGVmaW5lICBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVNVVhFUiAgICAgICAgKEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgPDwgNSkKKyNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVJTRVIgICAgICAgICAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSA8PCA2KQorI2RlZmluZSAgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1BBWUxPQURFUiAgICAgIChHX0dVSU5UNjRfQ09OU1RBTlQgKDEpIDw8IDcpCisjZGVmaW5lICBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVQQVlMT0FERVIgICAgKEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgPDwgOCkKKyNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9GT1JNQVRURVIgICAgICAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSA8PCA5KQorCisjZGVmaW5lICBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUFYX0VMRU1FTlRTICAgKEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgPDwgNDgpCisKKyNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9WSURFTyAgICAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSA8PCA0OSkKKyNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9BVURJTyAgICAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSA8PCA1MCkKKyNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9JTUFHRSAgICAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSA8PCA1MSkKKyNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9TVUJUSVRMRSAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSA8PCA1MikKKyNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9NRVRBREFUQSAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSA8PCA1MykKKworLyoqCisgKiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQU5ZOgorICoKKyAqIEVsZW1lbnRzIG9mIGFueSBvZiB0aGUgZGVmaW5lZCBHU1RfRUxFTUVOVF9GQUNUT1JZX0xJU1QgdHlwZXMKKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCisjZGVmaW5lICBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQU5ZICgoR19HVUlOVDY0X0NPTlNUQU5UICgxKSA8PCA0OSkgLSAxKQorCisvKioKKyAqIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9BTlk6CisgKgorICogRWxlbWVudHMgbWF0Y2hpbmcgYW55IG9mIHRoZSBkZWZpbmVkIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQSB0eXBlcworICoKKyAqIE5vdGU6IERvIG5vdCB1c2UgdGhpcyBpZiB5b3Ugd2lzaCB0byBub3QgZmlsdGVyIGFnYWluc3QgYW55IG9mIHRoZSBkZWZpbmVkCisgKiBtZWRpYSB0eXBlcy4gSWYgeW91IHdpc2ggdG8gZG8gdGhpcywgc2ltcGx5IGRvbid0IHNwZWNpZnkgYW55IAorICogR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBIGZsYWcuCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLworI2RlZmluZSBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQU5ZICh+R19HVUlOVDY0X0NPTlNUQU5UICgwKSA8PCA0OCkKKworLyoqCisgKiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfVklERU9fRU5DT0RFUjoKKyAqCisgKiBBbGwgZW5jb2RlcnMgaGFuZGxpbmcgdmlkZW8gb3IgaW1hZ2UgbWVkaWEgdHlwZXMKKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCisjZGVmaW5lIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9WSURFT19FTkNPREVSIChHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfRU5DT0RFUiB8IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9WSURFTyB8IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9JTUFHRSkKKworLyoqCisgKiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQVVESU9fRU5DT0RFUjoKKyAqCisgKiBBbGwgZW5jb2RlcnMgaGFuZGxpbmcgYXVkaW8gbWVkaWEgdHlwZXMKKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCisjZGVmaW5lIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9BVURJT19FTkNPREVSIChHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfRU5DT0RFUiB8IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9BVURJTykKKworLyoqCisgKiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQVVESU9WSURFT19TSU5LUzoKKyAqCisgKiBBbGwgc2lua3MgaGFuZGxpbmcgYXVkaW8sIHZpZGVvIG9yIGltYWdlIG1lZGlhIHR5cGVzCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLworI2RlZmluZSBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQVVESU9WSURFT19TSU5LUyAoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1NJTksgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQVVESU8gfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfVklERU8gfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfSU1BR0UpCisKKy8qKgorICogR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09EQUJMRToKKyAqCisgKiBBbGwgZWxlbWVudHMgdXNlZCB0byAnZGVjb2RlJyBzdHJlYW1zIChkZWNvZGVycywgZGVtdXhlcnMsIHBhcnNlcnMsIGRlcGF5bG9hZGVycykKKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCisjZGVmaW5lIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNPREFCTEUgXAorICAoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVNVVhFUiB8IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERVBBWUxPQURFUiB8IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVJTRVIpCisKKy8qIEVsZW1lbnQga2xhc3MgZGVmaW5lcyAqLworI2RlZmluZSBHU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX0RFQ09ERVIJCSJEZWNvZGVyIgorI2RlZmluZSBHU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX0VOQ09ERVIJCSJFbmNvZGVyIgorI2RlZmluZSBHU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX1NJTksJCQkiU2luayIKKyNkZWZpbmUgR1NUX0VMRU1FTlRfRkFDVE9SWV9LTEFTU19TUkMJCQkiU291cmNlIgorI2RlZmluZSBHU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX01VWEVSCQkJIk11eGVyIgorI2RlZmluZSBHU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX0RFTVVYRVIJCSJEZW11eGVyIgorI2RlZmluZSBHU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX1BBUlNFUgkJIlBhcnNlciIKKyNkZWZpbmUgR1NUX0VMRU1FTlRfRkFDVE9SWV9LTEFTU19QQVlMT0FERVIJCSJQYXlsb2FkZXIiCisjZGVmaW5lIEdTVF9FTEVNRU5UX0ZBQ1RPUllfS0xBU1NfREVQQVlMT0FERVIJCSJEZXBheWxvYWRlciIKKyNkZWZpbmUgR1NUX0VMRU1FTlRfRkFDVE9SWV9LTEFTU19GT1JNQVRURVIJCSJGb3JtYXR0ZXIiCisKKyNkZWZpbmUgR1NUX0VMRU1FTlRfRkFDVE9SWV9LTEFTU19NRURJQV9WSURFTwkJIlZpZGVvIgorI2RlZmluZSBHU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX01FRElBX0FVRElPCQkiQXVkaW8iCisjZGVmaW5lIEdTVF9FTEVNRU5UX0ZBQ1RPUllfS0xBU1NfTUVESUFfSU1BR0UJCSJJbWFnZSIKKyNkZWZpbmUgR1NUX0VMRU1FTlRfRkFDVE9SWV9LTEFTU19NRURJQV9TVUJUSVRMRQkiU3VidGl0bGUiCisjZGVmaW5lIEdTVF9FTEVNRU5UX0ZBQ1RPUllfS0xBU1NfTUVESUFfTUVUQURBVEEJIk1ldGFkYXRhIgorCitnYm9vbGVhbiAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9pc190eXBlICAgICAgKEdzdEVsZW1lbnRGYWN0b3J5ICpmYWN0b3J5LAorCQkJCQkJICAgICBHc3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlIHR5cGUpOworCitHTGlzdCAqICAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMgKEdzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGUgdHlwZSwKKwkJCQkJCSAgICAgR3N0UmFuayBtaW5yYW5rKTsKKworCitHTGlzdCAqICAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9maWx0ZXIgICAgICAgKEdMaXN0ICpsaXN0LCBjb25zdCBHc3RDYXBzICpjYXBzLAorCQkJCQkJICAgICBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJICAgICBnYm9vbGVhbiBzdWJzZXRvbmx5KTsKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9FTEVNRU5UX0ZBQ1RPUllfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0ZWxlbWVudG1ldGFkYXRhLmggYi9nc3QvZ3N0ZWxlbWVudG1ldGFkYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMzMzFkOQotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RlbGVtZW50bWV0YWRhdGEuaApAQCAtMCwwICsxLDc3IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgIDIwMDAsMjAwNCBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgorICoKKyAqIGdzdGVsZW1lbnRtZXRhZGF0YS5oOiBNZXRhZGF0YSBmb3IgR3N0RWxlbWVudCBjbGFzc2VzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0dTVF9FTEVNRU5UX01FVEFEQVRBX0hfXworI2RlZmluZSBfX0dTVF9FTEVNRU5UX01FVEFEQVRBX0hfXworCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICogR1NUX0VMRU1FTlRfTUVUQURBVEFfTE9OR05BTUU6CisgKgorICogVGhlIGxvbmcgRW5nbGlzaCBuYW1lIG9mIHRoZSBlbGVtZW50LiBFLmcuICJGaWxlIFNpbmsiCisgKi8KKyNkZWZpbmUgR1NUX0VMRU1FTlRfTUVUQURBVEFfTE9OR05BTUUgICAgICAibG9uZy1uYW1lIgorLyoqCisgKiBHU1RfRUxFTUVOVF9NRVRBREFUQV9LTEFTUzoKKyAqCisgKiBTdHJpbmcgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiBlbGVtZW50LCBhcyBhbiB1bm9yZGVyZWQgbGlzdAorICogc2VwYXJhdGVkIHdpdGggc2xhc2hlcyAoJy8nKS4gU2VlIGRyYWZ0LWtsYXNzLnR4dCBvZiB0aGUgZGVzaWduIGRvY3MKKyAqIGZvciBtb3JlIGRldGFpbHMgYW5kIGNvbW1vbiB0eXBlcy4gRS5nOiAiU2luay9GaWxlIgorICovCisjZGVmaW5lIEdTVF9FTEVNRU5UX01FVEFEQVRBX0tMQVNTICAgICAgICAgImtsYXNzIgorCisvKioKKyAqIEdTVF9FTEVNRU5UX01FVEFEQVRBX0RFU0NSSVBUSU9OOgorICoKKyAqIFNlbnRlbmNlIGRlc2NyaWJpbmcgdGhlIHB1cnBvc2Ugb2YgdGhlIGVsZW1lbnQuCisgKiBFLmc6ICJXcml0ZSBzdHJlYW0gdG8gYSBmaWxlIgorICovCisjZGVmaW5lIEdTVF9FTEVNRU5UX01FVEFEQVRBX0RFU0NSSVBUSU9OICAgImRlc2NyaXB0aW9uIgorLyoqCisgKiBHU1RfRUxFTUVOVF9NRVRBREFUQV9BVVRIT1I6CisgKgorICogTmFtZSBhbmQgY29udGFjdCBkZXRhaWxzIG9mIHRoZSBhdXRob3IocykuIFVzZSBcbiB0byBzZXBhcmF0ZQorICogbXVsdGlwbGUgYXV0aG9yIGRldGFpbHMuCisgKiBFLmc6ICJKb2UgQmxvZ2dzICZsdDtqb2UuYmxvZ3MgYXQgZm9vLmNvbSZndDsiCisgKi8KKyNkZWZpbmUgR1NUX0VMRU1FTlRfTUVUQURBVEFfQVVUSE9SICAgICAgICAiYXV0aG9yIgorCisvKioKKyAqIEdTVF9FTEVNRU5UX01FVEFEQVRBX0RPQ19VUkk6CisgKgorICogU2V0IHVyaSBwb2ludGluZyB0byB1c2VyIGRvY3VtZW50YXRpb24uIEFwcGxpY2F0aW9ucyBjYW4gdXNlIHRoaXMgdG8gc2hvdworICogaGVscCBmb3IgZS5nLiBlZmZlY3RzIHRvIHVzZXJzLgorICovCisjZGVmaW5lIEdTVF9FTEVNRU5UX01FVEFEQVRBX0RPQ19VUkkgICAgICAgImRvYy11cmkiCisvKioKKyAqIEdTVF9FTEVNRU5UX01FVEFEQVRBX0lDT05fTkFNRToKKyAqCisgKiBFbGVtZW50cyB0aGF0IGJyaWRnZSB0byBjZXJ0YWluIG90aGVyIHByb2R1Y3RzIGNhbiBpbmNsdWRlIGFuIGljb24gb2YgdGhhdAorICogdXNlZCBwcm9kdWN0LiBBcHBsaWNhdGlvbiBjYW4gc2hvdyB0aGUgaWNvbiBpbiBtZW51cy9zZWxlY3RvcnMgdG8gaGVscAorICogaWRlbnRpZnlpbmcgc3BlY2lmaWMgZWxlbWVudHMuCisgKi8KKyNkZWZpbmUgR1NUX0VMRU1FTlRfTUVUQURBVEFfSUNPTl9OQU1FICAgICAiaWNvbi1uYW1lIgorCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HU1RfRUxFTUVOVF9NRVRBREFUQV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RlcnJvci5jIGIvZ3N0L2dzdGVycm9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNmMmQyMgotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RlcnJvci5jCkBAIC0wLDAgKzEsMzMxIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgPDIwMDM+IERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qKgorICogU0VDVElPTjpnc3RlcnJvcgorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBDYXRlZ29yaXplZCBlcnJvciBtZXNzYWdlcworICogQHNlZV9hbHNvOiAjR3N0TWVzc2FnZQorICoKKyAqIEdTdHJlYW1lciBlbGVtZW50cyBjYW4gdGhyb3cgbm9uLWZhdGFsIHdhcm5pbmdzIGFuZCBmYXRhbCBlcnJvcnMuCisgKiBIaWdoZXItbGV2ZWwgZWxlbWVudHMgYW5kIGFwcGxpY2F0aW9ucyBjYW4gcHJvZ3JhbWF0aWNhbGx5IGZpbHRlcgorICogdGhlIG9uZXMgdGhleSBhcmUgaW50ZXJlc3RlZCBpbiBvciBjYW4gcmVjb3ZlciBmcm9tLAorICogYW5kIGhhdmUgYSBkZWZhdWx0IGhhbmRsZXIgaGFuZGxlIHRoZSByZXN0IG9mIHRoZW0uCisgKgorICogVGhlIHJlc3Qgb2YgdGhpcyBzZWN0aW9uIHdpbGwgdXNlIHRoZSB0ZXJtIDxxdW90ZT5lcnJvcjwvcXVvdGU+CisgKiB0byBtZWFuIGJvdGggKG5vbi1mYXRhbCkgd2FybmluZ3MgYW5kIChmYXRhbCkgZXJyb3JzOyB0aGV5IGFyZSB0cmVhdGVkCisgKiBzaW1pbGFybHkuCisgKgorICogRXJyb3JzIGZyb20gZWxlbWVudHMgYXJlIHRoZSBjb21iaW5hdGlvbiBvZiBhICNHRXJyb3IgYW5kIGEgZGVidWcgc3RyaW5nLgorICogVGhlICNHRXJyb3IgY29udGFpbnM6CisgKiAtIGEgZG9tYWluIHR5cGU6IENPUkUsIExJQlJBUlksIFJFU09VUkNFIG9yIFNUUkVBTQorICogLSBhIGNvZGU6IGFuIGVudW0gdmFsdWUgc3BlY2lmaWMgdG8gdGhlIGRvbWFpbgorICogLSBhIHRyYW5zbGF0ZWQsIGh1bWFuLXJlYWRhYmxlIG1lc3NhZ2UKKyAqIC0gYSBub24tdHJhbnNsYXRlZCBhZGRpdGlvbmFsIGRlYnVnIHN0cmluZywgd2hpY2ggYWxzbyBjb250YWlucworICogLSBmaWxlIGFuZCBsaW5lIGluZm9ybWF0aW9uCisgKgorICogRWxlbWVudHMgZG8gbm90IGhhdmUgdGhlIGNvbnRleHQgcmVxdWlyZWQgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aAorICogZXJyb3JzLiAgQXMgc3VjaCwgdGhleSBzaG91bGQgb25seSBpbmZvcm0gYWJvdXQgZXJyb3JzLCBhbmQgc3RvcCB0aGVpcgorICogcHJvY2Vzc2luZy4gIEluIHNob3J0LCBhbiBlbGVtZW50IGRvZXNuJ3Qga25vdyB3aGF0IGl0IGlzIGJlaW5nIHVzZWQgZm9yLgorICoKKyAqIEl0IGlzIHRoZSBhcHBsaWNhdGlvbiBvciBjb21wb3VuZCBlbGVtZW50IHVzaW5nIHRoZSBnaXZlbiBlbGVtZW50IHRoYXQKKyAqIGhhcyBtb3JlIGNvbnRleHQgYWJvdXQgdGhlIHVzZSBvZiB0aGUgZWxlbWVudC4gRXJyb3JzIGNhbiBiZSByZWNlaXZlZCBieQorICogbGlzdGVuaW5nIHRvIHRoZSAjR3N0QnVzIG9mIHRoZSBlbGVtZW50L3BpcGVsaW5lIGZvciAjR3N0TWVzc2FnZSBvYmplY3RzIHdpdGgKKyAqIHRoZSB0eXBlICVHU1RfTUVTU0FHRV9FUlJPUiBvciAlR1NUX01FU1NBR0VfV0FSTklORy4gVGhlIHRocm93biBlcnJvcnMgc2hvdWxkCisgKiBiZSBpbnNwZWN0ZWQsIGFuZCBmaWx0ZXJlZCBpZiBhcHByb3ByaWF0ZS4KKyAqCisgKiBBbiBhcHBsaWNhdGlvbiBpcyBleHBlY3RlZCB0bywgYnkgZGVmYXVsdCwgcHJlc2VudCB0aGUgdXNlciB3aXRoIGEKKyAqIGRpYWxvZyBib3ggKG9yIGFuIGVxdWl2YWxlbnQpIHNob3dpbmcgdGhlIGVycm9yIG1lc3NhZ2UuICBUaGUgZGlhbG9nCisgKiBzaG91bGQgYWxzbyBhbGxvdyBhIHdheSB0byBnZXQgYXQgdGhlIGFkZGl0aW9uYWwgZGVidWcgaW5mb3JtYXRpb24sCisgKiBzbyB0aGUgdXNlciBjYW4gcHJvdmlkZSBidWcgcmVwb3J0aW5nIGluZm9ybWF0aW9uLgorICoKKyAqIEEgY29tcG91bmQgZWxlbWVudCBpcyBleHBlY3RlZCB0byBmb3J3YXJkIGVycm9ycyBieSBkZWZhdWx0IGhpZ2hlciB1cAorICogdGhlIGhpZXJhcmNoeTsgdGhpcyBpcyBkb25lIGJ5IGRlZmF1bHQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvciBvdGhlciB0eXBlcworICogb2YgI0dzdE1lc3NhZ2UuCisgKgorICogV2hlbiBhcHBsaWNhdGlvbnMgb3IgY29tcG91bmQgZWxlbWVudHMgdHJpZ2dlciBlcnJvcnMgdGhhdCB0aGV5IGNhbgorICogcmVjb3ZlciBmcm9tLCB0aGV5IGNhbiBmaWx0ZXIgb3V0IHRoZXNlIGVycm9ycyBhbmQgdGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24uCisgKiBGb3IgZXhhbXBsZSwgYW4gYXBwbGljYXRpb24gdGhhdCBnZXRzIGFuIGVycm9yIGZyb20geHZpbWFnZXNpbmsKKyAqIHRoYXQgaW5kaWNhdGVzIGFsbCBYVmlkZW8gcG9ydHMgYXJlIHRha2VuLCB0aGUgYXBwbGljYXRpb24gY2FuIGF0dGVtcHQKKyAqIHRvIHVzZSBhbm90aGVyIHNpbmsgaW5zdGVhZC4KKyAqCisgKiBFbGVtZW50cyB0aHJvdyBlcnJvcnMgdXNpbmcgdGhlICNHU1RfRUxFTUVOVF9FUlJPUiBjb252ZW5pZW5jZSBtYWNybzoKKyAqCisgKiA8ZXhhbXBsZT4KKyAqIDx0aXRsZT5UaHJvd2luZyBhbiBlcnJvcjwvdGl0bGU+CisgKiAgIDxwcm9ncmFtbGlzdGluZz4KKyAqICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgTk9UX0ZPVU5ELAorICogICAgICAgKF8oIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHJlYWRpbmcuIikpLCAoTlVMTCkpOworICogICA8L3Byb2dyYW1saXN0aW5nPgorICogPC9leGFtcGxlPgorICoKKyAqIFRoaW5ncyB0byBrZWVwIGluIG1pbmQ6CisgKiA8aXRlbWl6ZWRsaXN0PgorICogICA8bGlzdGl0ZW0+PHBhcmE+RG9uJ3QgZ28gb2ZmIGludmVudGluZyBuZXcgZXJyb3IgY29kZXMuICBUaGUgb25lcworICogICAgIGN1cnJlbnRseSBwcm92aWRlZCBzaG91bGQgYmUgZW5vdWdoLiAgSWYgeW91IGZpbmQgeW91ciB0eXBlIG9mIGVycm9yCisgKiAgICAgZG9lcyBub3QgZml0IHRoZSBjdXJyZW50IGNvZGVzLCB5b3Ugc2hvdWxkIHVzZSBGQUlMRUQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT5Eb24ndCBwcm92aWRlIGEgbWVzc2FnZSBpZiB0aGUgZGVmYXVsdCBvbmUgc3VmZmljZXMuCisgKiAgICAgdGhpcyBrZWVwcyBtZXNzYWdlcyBtb3JlIHVuaWZvcm0uICBVc2UgKE5VTEwpIC0gbm90IGZvcmdldHRpbmcgdGhlCisgKiAgICAgcGFyZW50aGVzZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT5JZiB5b3UgZG8gc3VwcGx5IGEgY3VzdG9tIG1lc3NhZ2UsIGl0IHNob3VsZCBiZQorICogICAgIG1hcmtlZCBmb3IgdHJhbnNsYXRpb24uICBUaGUgbWVzc2FnZSBzaG91bGQgc3RhcnQgd2l0aCBhIGNhcGl0YWwKKyAqICAgICBhbmQgZW5kIHdpdGggYSBwZXJpb2QuICBUaGUgbWVzc2FnZSBzaG91bGQgZGVzY3JpYmUgdGhlIGVycm9yIGluIHNob3J0LAorICogICAgIGluIGEgaHVtYW4tcmVhZGFibGUgZm9ybSwgYW5kIHdpdGhvdXQgYW55IGNvbXBsZXggdGVjaG5pY2FsIHRlcm1zLgorICogICAgIEEgdXNlciBpbnRlcmZhY2Ugd2lsbCBwcmVzZW50IHRoaXMgbWVzc2FnZSBhcyB0aGUgZmlyc3QgdGhpbmcgYSB1c2VyCisgKiAgICAgc2Vlcy4gIERldGFpbHMsIHRlY2huaWNhbCBpbmZvLCAuLi4gc2hvdWxkIGdvIGluIHRoZSBkZWJ1ZyBzdHJpbmcuCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGRlYnVnIHN0cmluZyBjYW4gYmUgYXMgeW91IGxpa2UuICBBZ2FpbiwgdXNlIChOVUxMKQorICogICAgIGlmIHRoZXJlJ3Mgbm90aGluZyB0byBhZGQgLSBmaWxlIGFuZCBsaW5lIG51bWJlciB3aWxsIHN0aWxsIGJlCisgKiAgICAgcGFzc2VkLiAgI0dTVF9FUlJPUl9TWVNURU0gY2FuIGJlIHVzZWQgYXMgYSBzaG9ydGN1dCB0byBnaXZlCisgKiAgICAgZGVidWcgaW5mb3JtYXRpb24gb24gYSBzeXN0ZW0gY2FsbCBlcnJvci48L3BhcmE+PC9saXN0aXRlbT4KKyAqIDwvaXRlbWl6ZWRsaXN0PgorICoKKyAqIExhc3QgcmV2aWV3ZWQgb24gMjAwNi0wOS0xNSAoMC4xMC4xMCkKKyAqLworCisvKiBGSVhNRSAwLjExOiB0aGUgZW50aXJlIGVycm9yIHN5c3RlbSBuZWVkcyBhbiBvdmVyaGF1bCAtIGl0J3Mgbm90IHZlcnkKKyAqIHVzZWZ1bCB0aGUgd2F5IGl0IGlzLiBBbHNvLCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gc3BlY2lmeSBhZGRpdGlvbmFsCisgKiAnZGV0YWlscycgZm9yIGVycm9ycyAoZS5nLiBkaXNrL2ZpbGUvcmVzb3VyY2UgZXJyb3IgLT4gb3V0LW9mLXNwYWNlOyBvcgorICogcHV0IHRoZSB1cmwvZmlsZW5hbWUvZGV2aWNlIG5hbWUgdGhhdCBjYXVzZWQgdGhlIGVycm9yIHNvbWV3aGVyZSkKKyAqIHdpdGhvdXQgaGF2aW5nIHRvIGFkZCBlbnVtcyBmb3IgZXZlcnkgbGl0dGxlIHRoaW5nLgorICoKKyAqIEZJWE1FIDAuMTE6IGdldCByaWQgb2YgR1NUX3tDT1JFLExJQlJBUlksUkVTT1VSQ0UsU1RSRUFNfV9FUlJPUl9OVU1fRVJST1JTLgorICogTWF5YmUgYWxzbyByZXBsYWNlIF9xdWFyaygpIGZ1bmN0aW9ucyB3aXRoIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nKCk/CisgKi8KKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgImdzdC1pMThuLWxpYi5oIgorCisjZGVmaW5lIFFVQVJLX0ZVTkMoc3RyaW5nKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitHUXVhcmsgZ3N0XyAjIyBzdHJpbmcgIyMgX2Vycm9yX3F1YXJrICh2b2lkKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHN0YXRpYyBHUXVhcmsgcXVhcms7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmICghcXVhcmspICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcXVhcmsgPSBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoImdzdC0iICMgc3RyaW5nICItZXJyb3ItcXVhcmsiKTsgXAorICByZXR1cm4gcXVhcms7IH0KKworLyogRklYTUU6IERlcHJlY2F0ZSB3aGVuIHdlIGRlcGVuZCBvbiBHTGliIDIuMjYgKi8KK0dUeXBlCitnc3RfZ19lcnJvcl9nZXRfdHlwZSAodm9pZCkKK3sKKyNpZiBHTElCX0NIRUNLX1ZFUlNJT04oMiwyNSwyKQorICByZXR1cm4gZ19lcnJvcl9nZXRfdHlwZSAoKTsKKyNlbHNlCisgIHN0YXRpYyBHVHlwZSB0eXBlID0gMDsKKworICBpZiAoR19VTkxJS0VMWSAodHlwZSA9PSAwKSkKKyAgICB0eXBlID0gZ19ib3hlZF90eXBlX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdEdFcnJvciIsCisgICAgICAgIChHQm94ZWRDb3B5RnVuYykgZ19lcnJvcl9jb3B5LCAoR0JveGVkRnJlZUZ1bmMpIGdfZXJyb3JfZnJlZSk7CisgIHJldHVybiB0eXBlOworI2VuZGlmCit9CisKKyNkZWZpbmUgRklMRV9BX0JVRyAiICBQbGVhc2UgZmlsZSBhIGJ1ZyBhdCAiIFBBQ0tBR0VfQlVHUkVQT1JUICIuIgorCitzdGF0aWMgY29uc3QgZ2NoYXIgKgorZ3N0X2Vycm9yX2dldF9jb3JlX2Vycm9yIChHc3RDb3JlRXJyb3IgY29kZSkKK3sKKyAgc3dpdGNoIChjb2RlKSB7CisgICAgY2FzZSBHU1RfQ09SRV9FUlJPUl9GQUlMRUQ6CisgICAgICByZXR1cm4gXygiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIik7CisgICAgY2FzZSBHU1RfQ09SRV9FUlJPUl9UT09fTEFaWToKKyAgICAgIHJldHVybiBfKCJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlICIKKyAgICAgICAgICAidG8gdGhpcyBlcnJvci4iIEZJTEVfQV9CVUcpOworICAgIGNhc2UgR1NUX0NPUkVfRVJST1JfTk9UX0lNUExFTUVOVEVEOgorICAgICAgcmV0dXJuIF8oIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY29kZSBub3QgaW1wbGVtZW50ZWQuIiBGSUxFX0FfQlVHKTsKKyAgICBjYXNlIEdTVF9DT1JFX0VSUk9SX1NUQVRFX0NIQU5HRToKKyAgICAgIHJldHVybiBfKCJHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQgYW5kIHNvbWUgZWxlbWVudCBmYWlsZWQgIgorICAgICAgICAgICJ0byBwb3N0IGEgcHJvcGVyIGVycm9yIG1lc3NhZ2Ugd2l0aCB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZS4iKTsKKyAgICBjYXNlIEdTVF9DT1JFX0VSUk9SX1BBRDoKKyAgICAgIHJldHVybiBfKCJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHBhZCBwcm9ibGVtLiIgRklMRV9BX0JVRyk7CisgICAgY2FzZSBHU1RfQ09SRV9FUlJPUl9USFJFQUQ6CisgICAgICByZXR1cm4gXygiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iIEZJTEVfQV9CVUcpOworICAgIGNhc2UgR1NUX0NPUkVfRVJST1JfTkVHT1RJQVRJT046CisgICAgICByZXR1cm4gXygiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBuZWdvdGlhdGlvbiBwcm9ibGVtLiIgRklMRV9BX0JVRyk7CisgICAgY2FzZSBHU1RfQ09SRV9FUlJPUl9FVkVOVDoKKyAgICAgIHJldHVybiBfKCJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIiBGSUxFX0FfQlVHKTsKKyAgICBjYXNlIEdTVF9DT1JFX0VSUk9SX1NFRUs6CisgICAgICByZXR1cm4gXygiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uIiBGSUxFX0FfQlVHKTsKKyAgICBjYXNlIEdTVF9DT1JFX0VSUk9SX0NBUFM6CisgICAgICByZXR1cm4gXygiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIiBGSUxFX0FfQlVHKTsKKyAgICBjYXNlIEdTVF9DT1JFX0VSUk9SX1RBRzoKKyAgICAgIHJldHVybiBfKCJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIgRklMRV9BX0JVRyk7CisgICAgY2FzZSBHU1RfQ09SRV9FUlJPUl9NSVNTSU5HX1BMVUdJTjoKKyAgICAgIHJldHVybiBfKCJZb3VyIEdTdHJlYW1lciBpbnN0YWxsYXRpb24gaXMgbWlzc2luZyBhIHBsdWctaW4uIik7CisgICAgY2FzZSBHU1RfQ09SRV9FUlJPUl9DTE9DSzoKKyAgICAgIHJldHVybiBfKCJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIiBGSUxFX0FfQlVHKTsKKyAgICBjYXNlIEdTVF9DT1JFX0VSUk9SX0RJU0FCTEVEOgorICAgICAgcmV0dXJuIF8oIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSAiCisgICAgICAgICAgInRoYXQgaGFzIGJlZW4gZGlzYWJsZWQuIik7CisgICAgY2FzZSBHU1RfQ09SRV9FUlJPUl9OVU1fRVJST1JTOgorICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IGdjaGFyICoKK2dzdF9lcnJvcl9nZXRfbGlicmFyeV9lcnJvciAoR3N0TGlicmFyeUVycm9yIGNvZGUpCit7CisgIHN3aXRjaCAoY29kZSkgeworICAgIGNhc2UgR1NUX0xJQlJBUllfRVJST1JfRkFJTEVEOgorICAgICAgcmV0dXJuIF8oIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3VwcG9ydGluZyBsaWJyYXJ5IGVycm9yLiIpOworICAgIGNhc2UgR1NUX0xJQlJBUllfRVJST1JfVE9PX0xBWlk6CisgICAgICByZXR1cm4gXygiR1N0cmVhbWVyIGRldmVsb3BlcnMgd2VyZSB0b28gbGF6eSB0byBhc3NpZ24gYW4gZXJyb3IgY29kZSAiCisgICAgICAgICAgInRvIHRoaXMgZXJyb3IuIiBGSUxFX0FfQlVHKTsKKyAgICBjYXNlIEdTVF9MSUJSQVJZX0VSUk9SX0lOSVQ6CisgICAgICByZXR1cm4gXygiQ291bGQgbm90IGluaXRpYWxpemUgc3VwcG9ydGluZyBsaWJyYXJ5LiIpOworICAgIGNhc2UgR1NUX0xJQlJBUllfRVJST1JfU0hVVERPV046CisgICAgICByZXR1cm4gXygiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iKTsKKyAgICBjYXNlIEdTVF9MSUJSQVJZX0VSUk9SX1NFVFRJTkdTOgorICAgICAgcmV0dXJuIF8oIkNvdWxkIG5vdCBjb25maWd1cmUgc3VwcG9ydGluZyBsaWJyYXJ5LiIpOworICAgIGNhc2UgR1NUX0xJQlJBUllfRVJST1JfRU5DT0RFOgorICAgICAgcmV0dXJuIF8oIkVuY29kaW5nIGVycm9yLiIpOworICAgIGNhc2UgR1NUX0xJQlJBUllfRVJST1JfTlVNX0VSUk9SUzoKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBnY2hhciAqCitnc3RfZXJyb3JfZ2V0X3Jlc291cmNlX2Vycm9yIChHc3RSZXNvdXJjZUVycm9yIGNvZGUpCit7CisgIHN3aXRjaCAoY29kZSkgeworICAgIGNhc2UgR1NUX1JFU09VUkNFX0VSUk9SX0ZBSUxFRDoKKyAgICAgIHJldHVybiBfKCJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHJlc291cmNlIGVycm9yLiIpOworICAgIGNhc2UgR1NUX1JFU09VUkNFX0VSUk9SX1RPT19MQVpZOgorICAgICAgcmV0dXJuIF8oIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgIgorICAgICAgICAgICJ0byB0aGlzIGVycm9yLiIgRklMRV9BX0JVRyk7CisgICAgY2FzZSBHU1RfUkVTT1VSQ0VfRVJST1JfTk9UX0ZPVU5EOgorICAgICAgcmV0dXJuIF8oIlJlc291cmNlIG5vdCBmb3VuZC4iKTsKKyAgICBjYXNlIEdTVF9SRVNPVVJDRV9FUlJPUl9CVVNZOgorICAgICAgcmV0dXJuIF8oIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iKTsKKyAgICBjYXNlIEdTVF9SRVNPVVJDRV9FUlJPUl9PUEVOX1JFQUQ6CisgICAgICByZXR1cm4gXygiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcuIik7CisgICAgY2FzZSBHU1RfUkVTT1VSQ0VfRVJST1JfT1BFTl9XUklURToKKyAgICAgIHJldHVybiBfKCJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iKTsKKyAgICBjYXNlIEdTVF9SRVNPVVJDRV9FUlJPUl9PUEVOX1JFQURfV1JJVEU6CisgICAgICByZXR1cm4gXygiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIik7CisgICAgY2FzZSBHU1RfUkVTT1VSQ0VfRVJST1JfQ0xPU0U6CisgICAgICByZXR1cm4gXygiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIpOworICAgIGNhc2UgR1NUX1JFU09VUkNFX0VSUk9SX1JFQUQ6CisgICAgICByZXR1cm4gXygiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iKTsKKyAgICBjYXNlIEdTVF9SRVNPVVJDRV9FUlJPUl9XUklURToKKyAgICAgIHJldHVybiBfKCJDb3VsZCBub3Qgd3JpdGUgdG8gcmVzb3VyY2UuIik7CisgICAgY2FzZSBHU1RfUkVTT1VSQ0VfRVJST1JfU0VFSzoKKyAgICAgIHJldHVybiBfKCJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIpOworICAgIGNhc2UgR1NUX1JFU09VUkNFX0VSUk9SX1NZTkM6CisgICAgICByZXR1cm4gXygiQ291bGQgbm90IHN5bmNocm9uaXplIG9uIHJlc291cmNlLiIpOworICAgIGNhc2UgR1NUX1JFU09VUkNFX0VSUk9SX1NFVFRJTkdTOgorICAgICAgcmV0dXJuIF8oIkNvdWxkIG5vdCBnZXQvc2V0IHNldHRpbmdzIGZyb20vb24gcmVzb3VyY2UuIik7CisgICAgY2FzZSBHU1RfUkVTT1VSQ0VfRVJST1JfTk9fU1BBQ0VfTEVGVDoKKyAgICAgIHJldHVybiBfKCJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iKTsKKyAgICBjYXNlIEdTVF9SRVNPVVJDRV9FUlJPUl9OVU1fRVJST1JTOgorICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IGdjaGFyICoKK2dzdF9lcnJvcl9nZXRfc3RyZWFtX2Vycm9yIChHc3RTdHJlYW1FcnJvciBjb2RlKQoreworICBzd2l0Y2ggKGNvZGUpIHsKKyAgICBjYXNlIEdTVF9TVFJFQU1fRVJST1JfRkFJTEVEOgorICAgICAgcmV0dXJuIF8oIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIpOworICAgIGNhc2UgR1NUX1NUUkVBTV9FUlJPUl9UT09fTEFaWToKKyAgICAgIHJldHVybiBfKCJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlICIKKyAgICAgICAgICAidG8gdGhpcyBlcnJvci4iIEZJTEVfQV9CVUcpOworICAgIGNhc2UgR1NUX1NUUkVBTV9FUlJPUl9OT1RfSU1QTEVNRU5URUQ6CisgICAgICByZXR1cm4gXygiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBoYW5kbGluZyBvZiB0aGlzIHN0cmVhbS4gIgorICAgICAgICAgICJQbGVhc2UgZmlsZSBhIGJ1Zy4iKTsKKyAgICBjYXNlIEdTVF9TVFJFQU1fRVJST1JfVFlQRV9OT1RfRk9VTkQ6CisgICAgICByZXR1cm4gXygiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iKTsKKyAgICBjYXNlIEdTVF9TVFJFQU1fRVJST1JfV1JPTkdfVFlQRToKKyAgICAgIHJldHVybiBfKCJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgIgorICAgICAgICAgICJlbGVtZW50LiIpOworICAgIGNhc2UgR1NUX1NUUkVBTV9FUlJPUl9DT0RFQ19OT1RfRk9VTkQ6CisgICAgICByZXR1cm4gXygiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIik7CisgICAgY2FzZSBHU1RfU1RSRUFNX0VSUk9SX0RFQ09ERToKKyAgICAgIHJldHVybiBfKCJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iKTsKKyAgICBjYXNlIEdTVF9TVFJFQU1fRVJST1JfRU5DT0RFOgorICAgICAgcmV0dXJuIF8oIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIpOworICAgIGNhc2UgR1NUX1NUUkVBTV9FUlJPUl9ERU1VWDoKKyAgICAgIHJldHVybiBfKCJDb3VsZCBub3QgZGVtdWx0aXBsZXggc3RyZWFtLiIpOworICAgIGNhc2UgR1NUX1NUUkVBTV9FUlJPUl9NVVg6CisgICAgICByZXR1cm4gXygiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIik7CisgICAgY2FzZSBHU1RfU1RSRUFNX0VSUk9SX0ZPUk1BVDoKKyAgICAgIHJldHVybiBfKCJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIik7CisgICAgY2FzZSBHU1RfU1RSRUFNX0VSUk9SX0RFQ1JZUFQ6CisgICAgICByZXR1cm4gXygiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iKTsKKyAgICBjYXNlIEdTVF9TVFJFQU1fRVJST1JfREVDUllQVF9OT0tFWToKKyAgICAgIHJldHVybiBfKCJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgY2FuJ3QgYmUgZGVjcnlwdGVkIGJlY2F1c2Ugbm8gIgorICAgICAgICAgICJzdWl0YWJsZSBrZXkgaGFzIGJlZW4gc3VwcGxpZWQuIik7CisgICAgY2FzZSBHU1RfU1RSRUFNX0VSUk9SX05VTV9FUlJPUlM6CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK1FVQVJLX0ZVTkMgKGNvcmUpOworUVVBUktfRlVOQyAobGlicmFyeSk7CitRVUFSS19GVU5DIChyZXNvdXJjZSk7CitRVUFSS19GVU5DIChzdHJlYW0pOworCisvKioKKyAqIGdzdF9lcnJvcl9nZXRfbWVzc2FnZToKKyAqIEBkb21haW46IHRoZSBHU3RyZWFtZXIgZXJyb3IgZG9tYWluIHRoaXMgZXJyb3IgYmVsb25ncyB0by4KKyAqIEBjb2RlOiB0aGUgZXJyb3IgY29kZSBiZWxvbmdpbmcgdG8gdGhlIGRvbWFpbi4KKyAqCisgKiBHZXQgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgZXJyb3IgbWVzc2FnZSBpbiB0aGUgY3VycmVudCBsb2NhbGUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ld2x5IGFsbG9jYXRlZCBzdHJpbmcgZGVzY3JpYmluZworICogICAgIHRoZSBlcnJvciBtZXNzYWdlIChpbiBVVEYtOCBlbmNvZGluZykKKyAqLworZ2NoYXIgKgorZ3N0X2Vycm9yX2dldF9tZXNzYWdlIChHUXVhcmsgZG9tYWluLCBnaW50IGNvZGUpCit7CisgIGNvbnN0IGdjaGFyICptZXNzYWdlID0gTlVMTDsKKworICBpZiAoZG9tYWluID09IEdTVF9DT1JFX0VSUk9SKQorICAgIG1lc3NhZ2UgPSBnc3RfZXJyb3JfZ2V0X2NvcmVfZXJyb3IgKChHc3RDb3JlRXJyb3IpIGNvZGUpOworICBlbHNlIGlmIChkb21haW4gPT0gR1NUX0xJQlJBUllfRVJST1IpCisgICAgbWVzc2FnZSA9IGdzdF9lcnJvcl9nZXRfbGlicmFyeV9lcnJvciAoKEdzdExpYnJhcnlFcnJvcikgY29kZSk7CisgIGVsc2UgaWYgKGRvbWFpbiA9PSBHU1RfUkVTT1VSQ0VfRVJST1IpCisgICAgbWVzc2FnZSA9IGdzdF9lcnJvcl9nZXRfcmVzb3VyY2VfZXJyb3IgKChHc3RSZXNvdXJjZUVycm9yKSBjb2RlKTsKKyAgZWxzZSBpZiAoZG9tYWluID09IEdTVF9TVFJFQU1fRVJST1IpCisgICAgbWVzc2FnZSA9IGdzdF9lcnJvcl9nZXRfc3RyZWFtX2Vycm9yICgoR3N0U3RyZWFtRXJyb3IpIGNvZGUpOworICBlbHNlIHsKKyAgICBnX3dhcm5pbmcgKCJObyBlcnJvciBtZXNzYWdlcyBmb3IgZG9tYWluICVzIiwgZ19xdWFya190b19zdHJpbmcgKGRvbWFpbikpOworICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKF8oIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iKSwKKyAgICAgICAgZ19xdWFya190b19zdHJpbmcgKGRvbWFpbikpOworICB9CisgIGlmIChtZXNzYWdlKQorICAgIHJldHVybiBnX3N0cmR1cCAobWVzc2FnZSk7CisgIGVsc2UKKyAgICByZXR1cm4KKyAgICAgICAgZ19zdHJkdXBfcHJpbnRmIChfCisgICAgICAgICgiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIpLAorICAgICAgICBnX3F1YXJrX3RvX3N0cmluZyAoZG9tYWluKSwgY29kZSk7Cit9CmRpZmYgLS1naXQgYS9nc3QvZ3N0ZXJyb3IuaCBiL2dzdC9nc3RlcnJvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MjJjZTAKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0ZXJyb3IuaApAQCAtMCwwICsxLDI1NSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19HU1RfRVJST1JfSF9fCisjZGVmaW5lIF9fR1NUX0VSUk9SX0hfXworCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworR19CRUdJTl9ERUNMUworLyoKKyAqIHdlIGRlZmluZSBGSVhNRSBlcnJvciBkb21haW5zOgorICogR1NUX0NPUkVfRVJST1IKKyAqIEdTVF9MSUJSQVJZX0VSUk9SCisgKiBHU1RfUkVTT1VSQ0VfRVJST1IKKyAqIEdTVF9TVFJFQU1fRVJST1IKKyAqCisgKiBDaGVjayBHRXJyb3IgQVBJIGRvY3MgZm9yIHJhdGlvbmFsZSBmb3IgbmFtaW5nLgorICovCisvKioKKyAqIEdzdENvcmVFcnJvcjoKKyAqIEBHU1RfQ09SRV9FUlJPUl9GQUlMRUQ6IGEgZ2VuZXJhbCBlcnJvciB3aGljaCBkb2Vzbid0IGZpdCBpbiBhbnkgb3RoZXIKKyAqIGNhdGVnb3J5LiAgTWFrZSBzdXJlIHlvdSBhZGQgYSBjdXN0b20gbWVzc2FnZSB0byB0aGUgZXJyb3IgY2FsbC4KKyAqIEBHU1RfQ09SRV9FUlJPUl9UT09fTEFaWTogZG8gbm90IHVzZSB0aGlzIGV4Y2VwdCBhcyBhIHBsYWNlaG9sZGVyIGZvcgorICogZGVjaWRpbmcgd2hlcmUgdG8gZ28gd2hpbGUgZGV2ZWxvcGluZyBjb2RlLgorICogQEdTVF9DT1JFX0VSUk9SX05PVF9JTVBMRU1FTlRFRDogdXNlIHRoaXMgd2hlbiB5b3UgZG8gbm90IHdhbnQgdG8gaW1wbGVtZW50CisgKiB0aGlzIGZ1bmN0aW9uYWxpdHkgeWV0LgorICogQEdTVF9DT1JFX0VSUk9SX1NUQVRFX0NIQU5HRTogdXNlZCBmb3Igc3RhdGUgY2hhbmdlIGVycm9ycy4KKyAqIEBHU1RfQ09SRV9FUlJPUl9QQUQ6IHVzZWQgZm9yIHBhZC1yZWxhdGVkIGVycm9ycy4KKyAqIEBHU1RfQ09SRV9FUlJPUl9USFJFQUQ6IHVzZWQgZm9yIHRocmVhZC1yZWxhdGVkIGVycm9ycy4KKyAqIEBHU1RfQ09SRV9FUlJPUl9ORUdPVElBVElPTjogdXNlZCBmb3IgbmVnb3RpYXRpb24tcmVsYXRlZCBlcnJvcnMuCisgKiBAR1NUX0NPUkVfRVJST1JfRVZFTlQ6IHVzZWQgZm9yIGV2ZW50LXJlbGF0ZWQgZXJyb3JzLgorICogQEdTVF9DT1JFX0VSUk9SX1NFRUs6IHVzZWQgZm9yIHNlZWstcmVsYXRlZCBlcnJvcnMuCisgKiBAR1NUX0NPUkVfRVJST1JfQ0FQUzogdXNlZCBmb3IgY2Fwcy1yZWxhdGVkIGVycm9ycy4KKyAqIEBHU1RfQ09SRV9FUlJPUl9UQUc6IHVzZWQgZm9yIG5lZ290aWF0aW9uLXJlbGF0ZWQgZXJyb3JzLgorICogQEdTVF9DT1JFX0VSUk9SX01JU1NJTkdfUExVR0lOOiB1c2VkIGlmIGEgcGx1Z2luIGlzIG1pc3NpbmcuCisgKiBAR1NUX0NPUkVfRVJST1JfQ0xPQ0s6IHVzZWQgZm9yIGNsb2NrIHJlbGF0ZWQgZXJyb3JzLgorICogQEdTVF9DT1JFX0VSUk9SX0RJU0FCTEVEOiB1c2VkIGlmIGZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4gZGlzYWJsZWQgYXQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZSB0aW1lIChTaW5jZTogMC4xMC4xMykuCisgKiBAR1NUX0NPUkVfRVJST1JfTlVNX0VSUk9SUzogdGhlIG51bWJlciBvZiBjb3JlIGVycm9yIHR5cGVzLgorICoKKyAqIENvcmUgZXJyb3JzIGFyZSBlcnJvcnMgaW5zaWRlIHRoZSBjb3JlIEdTdHJlYW1lciBsaWJyYXJ5LgorICovCisvKiBGSVhNRTogc2hvdWxkIHdlIGRpdmlkZSBpbiBudW1lcmljYWwgYmxvY2tzIHNvIHdlIGNhbiBlYXNpbHkgYWRkCisgICAgICAgICAgZm9yIGV4YW1wbGUgUEFEIGVycm9ycyBsYXRlciA/ICovCit0eXBlZGVmIGVudW0KK3sKKyAgR1NUX0NPUkVfRVJST1JfRkFJTEVEID0gMSwKKyAgR1NUX0NPUkVfRVJST1JfVE9PX0xBWlksCisgIEdTVF9DT1JFX0VSUk9SX05PVF9JTVBMRU1FTlRFRCwKKyAgR1NUX0NPUkVfRVJST1JfU1RBVEVfQ0hBTkdFLAorICBHU1RfQ09SRV9FUlJPUl9QQUQsCisgIEdTVF9DT1JFX0VSUk9SX1RIUkVBRCwKKyAgR1NUX0NPUkVfRVJST1JfTkVHT1RJQVRJT04sCisgIEdTVF9DT1JFX0VSUk9SX0VWRU5ULAorICBHU1RfQ09SRV9FUlJPUl9TRUVLLAorICBHU1RfQ09SRV9FUlJPUl9DQVBTLAorICBHU1RfQ09SRV9FUlJPUl9UQUcsCisgIEdTVF9DT1JFX0VSUk9SX01JU1NJTkdfUExVR0lOLAorICBHU1RfQ09SRV9FUlJPUl9DTE9DSywKKyAgR1NUX0NPUkVfRVJST1JfRElTQUJMRUQsCisgIEdTVF9DT1JFX0VSUk9SX05VTV9FUlJPUlMKK30gR3N0Q29yZUVycm9yOworCisvKioKKyAqIEdzdExpYnJhcnlFcnJvcjoKKyAqIEBHU1RfTElCUkFSWV9FUlJPUl9GQUlMRUQ6IGEgZ2VuZXJhbCBlcnJvciB3aGljaCBkb2Vzbid0IGZpdCBpbiBhbnkgb3RoZXIKKyAqIGNhdGVnb3J5LiAgTWFrZSBzdXJlIHlvdSBhZGQgYSBjdXN0b20gbWVzc2FnZSB0byB0aGUgZXJyb3IgY2FsbC4KKyAqIEBHU1RfTElCUkFSWV9FUlJPUl9UT09fTEFaWTogZG8gbm90IHVzZSB0aGlzIGV4Y2VwdCBhcyBhIHBsYWNlaG9sZGVyIGZvcgorICogZGVjaWRpbmcgd2hlcmUgdG8gZ28gd2hpbGUgZGV2ZWxvcGluZyBjb2RlLgorICogQEdTVF9MSUJSQVJZX0VSUk9SX0lOSVQ6IHVzZWQgd2hlbiB0aGUgbGlicmFyeSBjb3VsZCBub3QgYmUgb3BlbmVkLgorICogQEdTVF9MSUJSQVJZX0VSUk9SX1NIVVRET1dOOiB1c2VkIHdoZW4gdGhlIGxpYnJhcnkgY291bGQgbm90IGJlIGNsb3NlZC4KKyAqIEBHU1RfTElCUkFSWV9FUlJPUl9TRVRUSU5HUzogdXNlZCB3aGVuIHRoZSBsaWJyYXJ5IGRvZXNuJ3QgYWNjZXB0IHNldHRpbmdzLgorICogQEdTVF9MSUJSQVJZX0VSUk9SX0VOQ09ERTogdXNlZCB3aGVuIHRoZSBsaWJyYXJ5IGdlbmVyYXRlZCBhbiBlbmNvZGluZyBlcnJvci4KKyAqIEBHU1RfTElCUkFSWV9FUlJPUl9OVU1fRVJST1JTOiB0aGUgbnVtYmVyIG9mIGxpYnJhcnkgZXJyb3IgdHlwZXMuCisgKgorICogTGlicmFyeSBlcnJvcnMgYXJlIGZvciBlcnJvcnMgZnJvbSB0aGUgbGlicmFyeSBiZWluZyB1c2VkIGJ5IGVsZW1lbnRzCisgKiAoaW5pdGlhbGl6aW5nLCBmaW5hbGl6aW5nLCBzZXR0aW5ncywgLi4uKQorICovCit0eXBlZGVmIGVudW0KK3sKKyAgR1NUX0xJQlJBUllfRVJST1JfRkFJTEVEID0gMSwKKyAgR1NUX0xJQlJBUllfRVJST1JfVE9PX0xBWlksCisgIEdTVF9MSUJSQVJZX0VSUk9SX0lOSVQsCisgIEdTVF9MSUJSQVJZX0VSUk9SX1NIVVRET1dOLAorICBHU1RfTElCUkFSWV9FUlJPUl9TRVRUSU5HUywKKyAgR1NUX0xJQlJBUllfRVJST1JfRU5DT0RFLAorICBHU1RfTElCUkFSWV9FUlJPUl9OVU1fRVJST1JTCit9IEdzdExpYnJhcnlFcnJvcjsKKworLyoqCisgKiBHc3RSZXNvdXJjZUVycm9yOgorICogQEdTVF9SRVNPVVJDRV9FUlJPUl9GQUlMRUQ6IGEgZ2VuZXJhbCBlcnJvciB3aGljaCBkb2Vzbid0IGZpdCBpbiBhbnkgb3RoZXIKKyAqIGNhdGVnb3J5LiAgTWFrZSBzdXJlIHlvdSBhZGQgYSBjdXN0b20gbWVzc2FnZSB0byB0aGUgZXJyb3IgY2FsbC4KKyAqIEBHU1RfUkVTT1VSQ0VfRVJST1JfVE9PX0xBWlk6IGRvIG5vdCB1c2UgdGhpcyBleGNlcHQgYXMgYSBwbGFjZWhvbGRlciBmb3IKKyAqIGRlY2lkaW5nIHdoZXJlIHRvIGdvIHdoaWxlIGRldmVsb3BpbmcgY29kZS4KKyAqIEBHU1RfUkVTT1VSQ0VfRVJST1JfTk9UX0ZPVU5EOiB1c2VkIHdoZW4gdGhlIHJlc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZC4KKyAqIEBHU1RfUkVTT1VSQ0VfRVJST1JfQlVTWTogdXNlZCB3aGVuIHJlc291cmNlIGlzIGJ1c3kuCisgKiBAR1NUX1JFU09VUkNFX0VSUk9SX09QRU5fUkVBRDogdXNlZCB3aGVuIHJlc291cmNlIGZhaWxzIHRvIG9wZW4gZm9yIHJlYWRpbmcuCisgKiBAR1NUX1JFU09VUkNFX0VSUk9SX09QRU5fV1JJVEU6IHVzZWQgd2hlbiByZXNvdXJjZSBmYWlscyB0byBvcGVuIGZvciB3cml0aW5nLgorICogQEdTVF9SRVNPVVJDRV9FUlJPUl9PUEVOX1JFQURfV1JJVEU6IHVzZWQgd2hlbiByZXNvdXJjZSBjYW5ub3QgYmUgb3BlbmVkIGZvcgorICogYm90aCByZWFkaW5nIGFuZCB3cml0aW5nLCBvciBlaXRoZXIgKGJ1dCB1bnNwZWNpZmllZCB3aGljaCkuCisgKiBAR1NUX1JFU09VUkNFX0VSUk9SX0NMT1NFOiB1c2VkIHdoZW4gdGhlIHJlc291cmNlIGNhbid0IGJlIGNsb3NlZC4KKyAqIEBHU1RfUkVTT1VSQ0VfRVJST1JfUkVBRDogdXNlZCB3aGVuIHRoZSByZXNvdXJjZSBjYW4ndCBiZSByZWFkIGZyb20uCisgKiBAR1NUX1JFU09VUkNFX0VSUk9SX1dSSVRFOiB1c2VkIHdoZW4gdGhlIHJlc291cmNlIGNhbid0IGJlIHdyaXR0ZW4gdG8uCisgKiBAR1NUX1JFU09VUkNFX0VSUk9SX1NFRUs6IHVzZWQgd2hlbiBhIHNlZWsgb24gdGhlIHJlc291cmNlIGZhaWxzLgorICogQEdTVF9SRVNPVVJDRV9FUlJPUl9TWU5DOiB1c2VkIHdoZW4gYSBzeW5jaHJvbml6ZSBvbiB0aGUgcmVzb3VyY2UgZmFpbHMuCisgKiBAR1NUX1JFU09VUkNFX0VSUk9SX1NFVFRJTkdTOiB1c2VkIHdoZW4gc2V0dGluZ3MgY2FuJ3QgYmUgbWFuaXB1bGF0ZWQgb24uCisgKiBAR1NUX1JFU09VUkNFX0VSUk9SX05PX1NQQUNFX0xFRlQ6IHVzZWQgd2hlbiB0aGUgcmVzb3VyY2UgaGFzIG5vIHNwYWNlIGxlZnQuCisgKiBAR1NUX1JFU09VUkNFX0VSUk9SX05VTV9FUlJPUlM6IHRoZSBudW1iZXIgb2YgcmVzb3VyY2UgZXJyb3IgdHlwZXMuCisgKgorICogUmVzb3VyY2UgZXJyb3JzIGFyZSBmb3IgYW55IHJlc291cmNlIHVzZWQgYnkgYW4gZWxlbWVudDoKKyAqIG1lbW9yeSwgZmlsZXMsIG5ldHdvcmsgY29ubmVjdGlvbnMsIHByb2Nlc3Mgc3BhY2UsIC4uLgorICogVGhleSdyZSB0eXBpY2FsbHkgdXNlZCBieSBzb3VyY2UgYW5kIHNpbmsgZWxlbWVudHMuCisgKi8KK3R5cGVkZWYgZW51bQoreworICBHU1RfUkVTT1VSQ0VfRVJST1JfRkFJTEVEID0gMSwKKyAgR1NUX1JFU09VUkNFX0VSUk9SX1RPT19MQVpZLAorICBHU1RfUkVTT1VSQ0VfRVJST1JfTk9UX0ZPVU5ELAorICBHU1RfUkVTT1VSQ0VfRVJST1JfQlVTWSwKKyAgR1NUX1JFU09VUkNFX0VSUk9SX09QRU5fUkVBRCwKKyAgR1NUX1JFU09VUkNFX0VSUk9SX09QRU5fV1JJVEUsCisgIEdTVF9SRVNPVVJDRV9FUlJPUl9PUEVOX1JFQURfV1JJVEUsCisgIEdTVF9SRVNPVVJDRV9FUlJPUl9DTE9TRSwKKyAgR1NUX1JFU09VUkNFX0VSUk9SX1JFQUQsCisgIEdTVF9SRVNPVVJDRV9FUlJPUl9XUklURSwKKyAgR1NUX1JFU09VUkNFX0VSUk9SX1NFRUssCisgIEdTVF9SRVNPVVJDRV9FUlJPUl9TWU5DLAorICBHU1RfUkVTT1VSQ0VfRVJST1JfU0VUVElOR1MsCisgIEdTVF9SRVNPVVJDRV9FUlJPUl9OT19TUEFDRV9MRUZULAorICBHU1RfUkVTT1VSQ0VfRVJST1JfTlVNX0VSUk9SUworfSBHc3RSZXNvdXJjZUVycm9yOworCisvKioKKyAqIEdzdFN0cmVhbUVycm9yOgorICogQEdTVF9TVFJFQU1fRVJST1JfRkFJTEVEOiBhIGdlbmVyYWwgZXJyb3Igd2hpY2ggZG9lc24ndCBmaXQgaW4gYW55IG90aGVyCisgKiBjYXRlZ29yeS4gIE1ha2Ugc3VyZSB5b3UgYWRkIGEgY3VzdG9tIG1lc3NhZ2UgdG8gdGhlIGVycm9yIGNhbGwuCisgKiBAR1NUX1NUUkVBTV9FUlJPUl9UT09fTEFaWTogZG8gbm90IHVzZSB0aGlzIGV4Y2VwdCBhcyBhIHBsYWNlaG9sZGVyIGZvcgorICogZGVjaWRpbmcgd2hlcmUgdG8gZ28gd2hpbGUgZGV2ZWxvcGluZyBjb2RlLgorICogQEdTVF9TVFJFQU1fRVJST1JfTk9UX0lNUExFTUVOVEVEOiB1c2UgdGhpcyB3aGVuIHlvdSBkbyBub3Qgd2FudCB0byBpbXBsZW1lbnQKKyAqIHRoaXMgZnVuY3Rpb25hbGl0eSB5ZXQuCisgKiBAR1NUX1NUUkVBTV9FUlJPUl9UWVBFX05PVF9GT1VORDogdXNlZCB3aGVuIHRoZSBlbGVtZW50IGRvZXNuJ3Qga25vdyB0aGUKKyAqIHN0cmVhbSdzIHR5cGUuCisgKiBAR1NUX1NUUkVBTV9FUlJPUl9XUk9OR19UWVBFOiB1c2VkIHdoZW4gdGhlIGVsZW1lbnQgZG9lc24ndCBoYW5kbGUgdGhpcyB0eXBlCisgKiBvZiBzdHJlYW0uCisgKiBAR1NUX1NUUkVBTV9FUlJPUl9DT0RFQ19OT1RfRk9VTkQ6IHVzZWQgd2hlbiB0aGVyZSdzIG5vIGNvZGVjIHRvIGhhbmRsZSB0aGUKKyAqIHN0cmVhbSdzIHR5cGUuCisgKiBAR1NUX1NUUkVBTV9FUlJPUl9ERUNPREU6IHVzZWQgd2hlbiBkZWNvZGluZyBmYWlscy4KKyAqIEBHU1RfU1RSRUFNX0VSUk9SX0VOQ09ERTogdXNlZCB3aGVuIGVuY29kaW5nIGZhaWxzLgorICogQEdTVF9TVFJFQU1fRVJST1JfREVNVVg6IHVzZWQgd2hlbiBkZW11eGluZyBmYWlscy4KKyAqIEBHU1RfU1RSRUFNX0VSUk9SX01VWDogdXNlZCB3aGVuIG11eGluZyBmYWlscy4KKyAqIEBHU1RfU1RSRUFNX0VSUk9SX0ZPUk1BVDogdXNlZCB3aGVuIHRoZSBzdHJlYW0gaXMgb2YgdGhlIHdyb25nIGZvcm1hdAorICogKGZvciBleGFtcGxlLCB3cm9uZyBjYXBzKS4KKyAqIEBHU1RfU1RSRUFNX0VSUk9SX0RFQ1JZUFQ6IHVzZWQgd2hlbiB0aGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgY2FuJ3QgYmUKKyAqIGRlY3J5cHRlZCBiZWNhdXNlIHRoaXMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZWxlbWVudC4gKFNpbmNlOiAwLjEwLjIwKQorICogQEdTVF9TVFJFQU1fRVJST1JfREVDUllQVF9OT0tFWTogdXNlZCB3aGVuIHRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZAorICogY2FuJ3QgYmUgZGVjcnlwdGVkIGJlY2F1c2Ugbm8gc3VpdGFibGUga2V5IGlzIGF2YWlsYWJsZS4gKFNpbmNlOiAwLjEwLjIwKQorICogQEdTVF9TVFJFQU1fRVJST1JfTlVNX0VSUk9SUzogdGhlIG51bWJlciBvZiBzdHJlYW0gZXJyb3IgdHlwZXMuCisgKgorICogU3RyZWFtIGVycm9ycyBhcmUgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhlIHN0cmVhbSBiZWluZyBwcm9jZXNzZWQ6CisgKiBmb3JtYXQgZXJyb3JzLCBtZWRpYSB0eXBlIGVycm9ycywgLi4uCisgKiBUaGV5J3JlIHR5cGljYWxseSB1c2VkIGJ5IGRlY29kZXJzLCBkZW11eGVycywgY29udmVydGVycywgLi4uCisgKi8KK3R5cGVkZWYgZW51bQoreworICBHU1RfU1RSRUFNX0VSUk9SX0ZBSUxFRCA9IDEsCisgIEdTVF9TVFJFQU1fRVJST1JfVE9PX0xBWlksCisgIEdTVF9TVFJFQU1fRVJST1JfTk9UX0lNUExFTUVOVEVELAorICBHU1RfU1RSRUFNX0VSUk9SX1RZUEVfTk9UX0ZPVU5ELAorICBHU1RfU1RSRUFNX0VSUk9SX1dST05HX1RZUEUsCisgIEdTVF9TVFJFQU1fRVJST1JfQ09ERUNfTk9UX0ZPVU5ELAorICBHU1RfU1RSRUFNX0VSUk9SX0RFQ09ERSwKKyAgR1NUX1NUUkVBTV9FUlJPUl9FTkNPREUsCisgIEdTVF9TVFJFQU1fRVJST1JfREVNVVgsCisgIEdTVF9TVFJFQU1fRVJST1JfTVVYLAorICBHU1RfU1RSRUFNX0VSUk9SX0ZPUk1BVCwKKyAgR1NUX1NUUkVBTV9FUlJPUl9ERUNSWVBULAorICBHU1RfU1RSRUFNX0VSUk9SX0RFQ1JZUFRfTk9LRVksCisgIEdTVF9TVFJFQU1fRVJST1JfTlVNX0VSUk9SUworfSBHc3RTdHJlYW1FcnJvcjsKKworI2RlZmluZSBHU1RfVFlQRV9HX0VSUk9SICAgIChnc3RfZ19lcnJvcl9nZXRfdHlwZSAoKSkKKworLyoqCisgKiBHU1RfTElCUkFSWV9FUlJPUjoKKyAqCisgKiBFcnJvciBkb21haW4gZm9yIGxpYnJhcnkgbG9hZGluZy4gRXJyb3JzIGluIHRoaXMgZG9tYWluIHdpbGwKKyAqIGJlIGZyb20gdGhlICNHc3RMaWJyYXJ5RXJyb3IgZW51bWVyYXRpb24uCisgKiBTZWUgI0dFcnJvciBmb3IgaW5mb3JtYXRpb24gb24gZXJyb3IgZG9tYWlucy4KKyAqLworI2RlZmluZSBHU1RfTElCUkFSWV9FUlJPUiAgIGdzdF9saWJyYXJ5X2Vycm9yX3F1YXJrICgpCisvKioKKyAqIEdTVF9SRVNPVVJDRV9FUlJPUjoKKyAqCisgKiBFcnJvciBkb21haW4gZm9yIHJlc291cmNlIGhhbmRsaW5nLiBFcnJvcnMgaW4gdGhpcyBkb21haW4gd2lsbAorICogYmUgZnJvbSB0aGUgI0dzdFJlc291cmNlRXJyb3IgZW51bWVyYXRpb24uCisgKiBTZWUgI0dFcnJvciBmb3IgaW5mb3JtYXRpb24gb24gZXJyb3IgZG9tYWlucy4KKyAqLworI2RlZmluZSBHU1RfUkVTT1VSQ0VfRVJST1IgIGdzdF9yZXNvdXJjZV9lcnJvcl9xdWFyayAoKQorLyoqCisgKiBHU1RfQ09SRV9FUlJPUjoKKyAqCisgKiBFcnJvciBkb21haW4gZm9yIGNvcmUgc3lzdGVtLiBFcnJvcnMgaW4gdGhpcyBkb21haW4gd2lsbAorICogYmUgZnJvbSB0aGUgI0dzdENvcmVFcnJvciBlbnVtZXJhdGlvbi4KKyAqIFNlZSAjR0Vycm9yIGZvciBpbmZvcm1hdGlvbiBvbiBlcnJvciBkb21haW5zLgorICovCisjZGVmaW5lIEdTVF9DT1JFX0VSUk9SICAgICAgZ3N0X2NvcmVfZXJyb3JfcXVhcmsgKCkKKy8qKgorICogR1NUX1NUUkVBTV9FUlJPUjoKKyAqCisgKiBFcnJvciBkb21haW4gZm9yIG1lZGlhIHN0cmVhbSBwcm9jZXNzaW5nLiBFcnJvcnMgaW4gdGhpcyBkb21haW4gd2lsbAorICogYmUgZnJvbSB0aGUgI0dzdFN0cmVhbUVycm9yIGVudW1lcmF0aW9uLgorICogU2VlICNHRXJyb3IgZm9yIGluZm9ybWF0aW9uIG9uIGVycm9yIGRvbWFpbnMuCisgKi8KKyNkZWZpbmUgR1NUX1NUUkVBTV9FUlJPUiAgICBnc3Rfc3RyZWFtX2Vycm9yX3F1YXJrICgpCisKKy8qKgorICogR1NUX0VSUk9SX1NZU1RFTToKKyAqCisgKiBCdWlsZHMgYSBzdHJpbmcgdXNpbmcgZXJybm8gZGVzY3JpYmluZyB0aGUgcHJldmlvdXNseSBmYWlsZWQgc3lzdGVtCisgKiBjYWxsLiAgVG8gYmUgdXNlZCBhcyB0aGUgZGVidWcgYXJndW1lbnQgaW4gI0dTVF9FTEVNRU5UX0VSUk9SLgorICovCisjZGVmaW5lIEdTVF9FUlJPUl9TWVNURU0gICAgKCJzeXN0ZW0gZXJyb3I6ICVzIiwgZ19zdHJlcnJvciAoZXJybm8pKQorCisvKiBIaWRlIHRoaXMgY29tcGF0aWJpbGl0eSB0eXBlIGZyb20gaW50cm9zcGVjdGlvbiAqLworI2lmbmRlZiBfX0dJX1NDQU5ORVJfXworR1R5cGUgZ3N0X2dfZXJyb3JfZ2V0X3R5cGUgKHZvaWQpOworI2VuZGlmCisKK2djaGFyICpnc3RfZXJyb3JfZ2V0X21lc3NhZ2UgKEdRdWFyayBkb21haW4sIGdpbnQgY29kZSk7CitHUXVhcmsgZ3N0X3N0cmVhbV9lcnJvcl9xdWFyayAodm9pZCk7CitHUXVhcmsgZ3N0X2NvcmVfZXJyb3JfcXVhcmsgKHZvaWQpOworR1F1YXJrIGdzdF9yZXNvdXJjZV9lcnJvcl9xdWFyayAodm9pZCk7CitHUXVhcmsgZ3N0X2xpYnJhcnlfZXJyb3JfcXVhcmsgKHZvaWQpOworCitHX0VORF9ERUNMUworI2VuZGlmIC8qIF9fR1NUX0VSUk9SX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGV2ZW50LmMgYi9nc3QvZ3N0ZXZlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzBiOWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdGV2ZW50LmMKQEAgLTAsMCArMSwxMzExIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY2hlbGxvLmJlPgorICogICAgICAgICAgICAgICAgICAgIDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KKyAqCisgKiBnc3RldmVudC5jOiBHc3RFdmVudCBzdWJzeXN0ZW0KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKioKKyAqIFNFQ1RJT046Z3N0ZXZlbnQKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogU3RydWN0dXJlIGRlc2NyaWJpbmcgZXZlbnRzIHRoYXQgYXJlIHBhc3NlZCB1cCBhbmQgZG93bgorICogICAgICAgICAgICAgICAgICAgICBhIHBpcGVsaW5lCisgKiBAc2VlX2Fsc286ICNHc3RQYWQsICNHc3RFbGVtZW50CisgKgorICogVGhlIGV2ZW50IGNsYXNzIHByb3ZpZGVzIGZhY3RvcnkgbWV0aG9kcyB0byBjb25zdHJ1Y3QgZXZlbnRzIGZvciBzZW5kaW5nCisgKiBhbmQgZnVuY3Rpb25zIHRvIHF1ZXJ5IChwYXJzZSkgcmVjZWl2ZWQgZXZlbnRzLgorICoKKyAqIEV2ZW50cyBhcmUgdXN1YWxseSBjcmVhdGVkIHdpdGggZ3N0X2V2ZW50X25ld18qKCkgd2hpY2ggdGFrZXMgZXZlbnQtdHlwZQorICogc3BlY2lmaWMgcGFyYW1ldGVycyBhcyBhcmd1bWVudHMuCisgKiBUbyBzZW5kIGFuIGV2ZW50IGFwcGxpY2F0aW9uIHdpbGwgdXN1YWxseSB1c2UgZ3N0X2VsZW1lbnRfc2VuZF9ldmVudCgpIGFuZAorICogZWxlbWVudHMgd2lsbCB1c2UgZ3N0X3BhZF9zZW5kX2V2ZW50KCkgb3IgZ3N0X3BhZF9wdXNoX2V2ZW50KCkuCisgKiBUaGUgZXZlbnQgc2hvdWxkIGJlIHVucmVmZmVkIHdpdGggZ3N0X2V2ZW50X3VucmVmKCkgaWYgaXQgaGFzIG5vdCBiZWVuIHNlbnQuCisgKgorICogRXZlbnRzIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkIGNhbiBiZSBwYXJzZWQgd2l0aCB0aGVpciByZXNwZWN0aXZlIAorICogZ3N0X2V2ZW50X3BhcnNlXyooKSBmdW5jdGlvbnMuIEl0IGlzIHZhbGlkIHRvIHBhc3MgJU5VTEwgZm9yIHVud2FudGVkIGRldGFpbHMuCisgKgorICogRXZlbnRzIGFyZSBwYXNzZWQgYmV0d2VlbiBlbGVtZW50cyBpbiBwYXJhbGxlbCB0byB0aGUgZGF0YSBzdHJlYW0uIFNvbWUgZXZlbnRzCisgKiBhcmUgc2VyaWFsaXplZCB3aXRoIGJ1ZmZlcnMsIG90aGVycyBhcmUgbm90LiBTb21lIGV2ZW50cyBvbmx5IHRyYXZlbCBkb3duc3RyZWFtLAorICogb3RoZXJzIG9ubHkgdXBzdHJlYW0uIFNvbWUgZXZlbnRzIGNhbiB0cmF2ZWwgYm90aCB1cHN0cmVhbSBhbmQgZG93bnN0cmVhbS4gCisgKiAKKyAqIFRoZSBldmVudHMgYXJlIHVzZWQgdG8gc2lnbmFsIHNwZWNpYWwgY29uZGl0aW9ucyBpbiB0aGUgZGF0YXN0cmVhbSBzdWNoIGFzCisgKiBFT1MgKGVuZCBvZiBzdHJlYW0pIG9yIHRoZSBzdGFydCBvZiBhIG5ldyBzdHJlYW0tc2VnbWVudC4KKyAqIEV2ZW50cyBhcmUgYWxzbyB1c2VkIHRvIGZsdXNoIHRoZSBwaXBlbGluZSBvZiBhbnkgcGVuZGluZyBkYXRhLgorICoKKyAqIE1vc3Qgb2YgdGhlIGV2ZW50IEFQSSBpcyB1c2VkIGluc2lkZSBwbHVnaW5zLiBBcHBsaWNhdGlvbnMgdXN1YWxseSBvbmx5IAorICogY29uc3RydWN0IGFuZCB1c2Ugc2VlayBldmVudHMuIAorICogVG8gZG8gdGhhdCBnc3RfZXZlbnRfbmV3X3NlZWsoKSBpcyB1c2VkIHRvIGNyZWF0ZSBhIHNlZWsgZXZlbnQuIEl0IHRha2VzCisgKiB0aGUgbmVlZGVkIHBhcmFtZXRlcnMgdG8gc3BlY2lmeSBzZWVraW5nIHRpbWUgYW5kIG1vZGUuCisgKiA8ZXhhbXBsZT4KKyAqIDx0aXRsZT5wZXJmb3JtaW5nIGEgc2VlayBvbiBhIHBpcGVsaW5lPC90aXRsZT4KKyAqICAgPHByb2dyYW1saXN0aW5nPgorICogICBHc3RFdmVudCAqZXZlbnQ7CisgKiAgIGdib29sZWFuIHJlc3VsdDsKKyAqICAgLi4uCisgKiAgIC8vIGNvbnN0cnVjdCBhIHNlZWsgZXZlbnQgdG8gcGxheSB0aGUgbWVkaWEgZnJvbSBzZWNvbmQgMiB0byA1LCBmbHVzaAorICogICAvLyB0aGUgcGlwZWxpbmUgdG8gZGVjcmVhc2UgbGF0ZW5jeS4KKyAqICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZWsgKDEuMCwgCisgKiAgICAgIEdTVF9GT1JNQVRfVElNRSwgCisgKiAgICAgIEdTVF9TRUVLX0ZMQUdfRkxVU0gsCisgKiAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCAyICogR1NUX1NFQ09ORCwKKyAqICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIDUgKiBHU1RfU0VDT05EKTsKKyAqICAgLi4uCisgKiAgIHJlc3VsdCA9IGdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKHBpcGVsaW5lLCBldmVudCk7CisgKiAgIGlmICghcmVzdWx0KQorICogICAgIGdfd2FybmluZyAoInNlZWsgZmFpbGVkIik7CisgKiAgIC4uLgorICogICA8L3Byb2dyYW1saXN0aW5nPgorICogPC9leGFtcGxlPgorICoKKyAqIExhc3QgcmV2aWV3ZWQgb24gMjAwNi0wOS02ICgwLjEwLjEwKQorICovCisKKworI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+ICAgICAgICAgICAgIC8qIG1lbWNweSAqLworCisjaW5jbHVkZSAiZ3N0aW5mby5oIgorI2luY2x1ZGUgImdzdGV2ZW50LmgiCisjaW5jbHVkZSAiZ3N0ZW51bXR5cGVzLmgiCisjaW5jbHVkZSAiZ3N0dXRpbHMuaCIKKyNpbmNsdWRlICJnc3RxdWFyay5oIgorCitHVHlwZSBfZ3N0X2V2ZW50X3R5cGUgPSAwOworCit0eXBlZGVmIHN0cnVjdAoreworICBHc3RFdmVudCBldmVudDsKKworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKK30gR3N0RXZlbnRJbXBsOworCisjZGVmaW5lIEdTVF9FVkVOVF9TVFJVQ1RVUkUoZSkgICgoKEdzdEV2ZW50SW1wbCAqKShlKSktPnN0cnVjdHVyZSkKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgY29uc3QgZ2ludCB0eXBlOworICBjb25zdCBnY2hhciAqbmFtZTsKKyAgR1F1YXJrIHF1YXJrOworfSBHc3RFdmVudFF1YXJrczsKKworc3RhdGljIEdzdEV2ZW50UXVhcmtzIGV2ZW50X3F1YXJrc1tdID0geworICB7R1NUX0VWRU5UX1VOS05PV04sICJ1bmtub3duIiwgMH0sCisgIHtHU1RfRVZFTlRfRkxVU0hfU1RBUlQsICJmbHVzaC1zdGFydCIsIDB9LAorICB7R1NUX0VWRU5UX0ZMVVNIX1NUT1AsICJmbHVzaC1zdG9wIiwgMH0sCisgIHtHU1RfRVZFTlRfRU9TLCAiZW9zIiwgMH0sCisgIHtHU1RfRVZFTlRfQ0FQUywgImNhcHMiLCAwfSwKKyAge0dTVF9FVkVOVF9TRUdNRU5ULCAic2VnbWVudCIsIDB9LAorICB7R1NUX0VWRU5UX1RBRywgInRhZyIsIDB9LAorICB7R1NUX0VWRU5UX0JVRkZFUlNJWkUsICJidWZmZXJzaXplIiwgMH0sCisgIHtHU1RfRVZFTlRfU0lOS19NRVNTQUdFLCAic2luay1tZXNzYWdlIiwgMH0sCisgIHtHU1RfRVZFTlRfUU9TLCAicW9zIiwgMH0sCisgIHtHU1RfRVZFTlRfU0VFSywgInNlZWsiLCAwfSwKKyAge0dTVF9FVkVOVF9OQVZJR0FUSU9OLCAibmF2aWdhdGlvbiIsIDB9LAorICB7R1NUX0VWRU5UX0xBVEVOQ1ksICJsYXRlbmN5IiwgMH0sCisgIHtHU1RfRVZFTlRfU1RFUCwgInN0ZXAiLCAwfSwKKyAge0dTVF9FVkVOVF9SRUNPTkZJR1VSRSwgInJlY29uZmlndXJlIiwgMH0sCisgIHtHU1RfRVZFTlRfQ1VTVE9NX1VQU1RSRUFNLCAiY3VzdG9tLXVwc3RyZWFtIiwgMH0sCisgIHtHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU0sICJjdXN0b20tZG93bnN0cmVhbSIsIDB9LAorICB7R1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX09PQiwgImN1c3RvbS1kb3duc3RyZWFtLW9vYiIsIDB9LAorICB7R1NUX0VWRU5UX0NVU1RPTV9CT1RILCAiY3VzdG9tLWJvdGgiLCAwfSwKKyAge0dTVF9FVkVOVF9DVVNUT01fQk9USF9PT0IsICJjdXN0b20tYm90aC1vb2IiLCAwfSwKKworICB7MCwgTlVMTCwgMH0KK307CisKK0dTVF9ERUZJTkVfTUlOSV9PQkpFQ1RfVFlQRSAoR3N0RXZlbnQsIGdzdF9ldmVudCk7CisKK3ZvaWQKK19wcml2X2dzdF9ldmVudF9pbml0aWFsaXplICh2b2lkKQoreworICBnaW50IGk7CisKKyAgX2dzdF9ldmVudF90eXBlID0gZ3N0X2V2ZW50X2dldF90eXBlICgpOworCisgIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9zZWVrX2ZsYWdzX2dldF90eXBlICgpKTsKKyAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3NlZWtfdHlwZV9nZXRfdHlwZSAoKSk7CisKKyAgZm9yIChpID0gMDsgZXZlbnRfcXVhcmtzW2ldLm5hbWU7IGkrKykgeworICAgIGV2ZW50X3F1YXJrc1tpXS5xdWFyayA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChldmVudF9xdWFya3NbaV0ubmFtZSk7CisgIH0KK30KKworLyoqCisgKiBnc3RfZXZlbnRfdHlwZV9nZXRfbmFtZToKKyAqIEB0eXBlOiB0aGUgZXZlbnQgdHlwZQorICoKKyAqIEdldCBhIHByaW50YWJsZSBuYW1lIGZvciB0aGUgZ2l2ZW4gZXZlbnQgdHlwZS4gRG8gbm90IG1vZGlmeSBvciBmcmVlLgorICoKKyAqIFJldHVybnM6IGEgcmVmZXJlbmNlIHRvIHRoZSBzdGF0aWMgbmFtZSBvZiB0aGUgZXZlbnQuCisgKi8KK2NvbnN0IGdjaGFyICoKK2dzdF9ldmVudF90eXBlX2dldF9uYW1lIChHc3RFdmVudFR5cGUgdHlwZSkKK3sKKyAgZ2ludCBpOworCisgIGZvciAoaSA9IDA7IGV2ZW50X3F1YXJrc1tpXS5uYW1lOyBpKyspIHsKKyAgICBpZiAodHlwZSA9PSBldmVudF9xdWFya3NbaV0udHlwZSkKKyAgICAgIHJldHVybiBldmVudF9xdWFya3NbaV0ubmFtZTsKKyAgfQorICByZXR1cm4gInVua25vd24iOworfQorCisvKioKKyAqIGdzdF9ldmVudF90eXBlX3RvX3F1YXJrOgorICogQHR5cGU6IHRoZSBldmVudCB0eXBlCisgKgorICogR2V0IHRoZSB1bmlxdWUgcXVhcmsgZm9yIHRoZSBnaXZlbiBldmVudCB0eXBlLgorICoKKyAqIFJldHVybnM6IHRoZSBxdWFyayBhc3NvY2lhdGVkIHdpdGggdGhlIGV2ZW50IHR5cGUKKyAqLworR1F1YXJrCitnc3RfZXZlbnRfdHlwZV90b19xdWFyayAoR3N0RXZlbnRUeXBlIHR5cGUpCit7CisgIGdpbnQgaTsKKworICBmb3IgKGkgPSAwOyBldmVudF9xdWFya3NbaV0ubmFtZTsgaSsrKSB7CisgICAgaWYgKHR5cGUgPT0gZXZlbnRfcXVhcmtzW2ldLnR5cGUpCisgICAgICByZXR1cm4gZXZlbnRfcXVhcmtzW2ldLnF1YXJrOworICB9CisgIHJldHVybiAwOworfQorCisvKioKKyAqIGdzdF9ldmVudF90eXBlX2dldF9mbGFnczoKKyAqIEB0eXBlOiBhICNHc3RFdmVudFR5cGUKKyAqCisgKiBHZXRzIHRoZSAjR3N0RXZlbnRUeXBlRmxhZ3MgYXNzb2NpYXRlZCB3aXRoIEB0eXBlLgorICoKKyAqIFJldHVybnM6IGEgI0dzdEV2ZW50VHlwZUZsYWdzLgorICovCitHc3RFdmVudFR5cGVGbGFncworZ3N0X2V2ZW50X3R5cGVfZ2V0X2ZsYWdzIChHc3RFdmVudFR5cGUgdHlwZSkKK3sKKyAgR3N0RXZlbnRUeXBlRmxhZ3MgcmV0OworCisgIHJldCA9IHR5cGUgJiAoKDEgPDwgR1NUX0VWRU5UX1NUSUNLWV9TSElGVCkgLSAxKTsKKworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAorX2dzdF9ldmVudF9mcmVlIChHc3RFdmVudCAqIGV2ZW50KQoreworICBHc3RTdHJ1Y3R1cmUgKnM7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoZXZlbnQgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FVkVOVCAoZXZlbnQpKTsKKworICBHU1RfQ0FUX0xPRyAoR1NUX0NBVF9FVkVOVCwgImZyZWVpbmcgZXZlbnQgJXAgdHlwZSAlcyIsIGV2ZW50LAorICAgICAgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKKworICBzID0gR1NUX0VWRU5UX1NUUlVDVFVSRSAoZXZlbnQpOworCisgIGlmIChzKSB7CisgICAgZ3N0X3N0cnVjdHVyZV9zZXRfcGFyZW50X3JlZmNvdW50IChzLCBOVUxMKTsKKyAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOworICB9CisKKyAgZ19zbGljZV9mcmVlMSAoR1NUX01JTklfT0JKRUNUX1NJWkUgKGV2ZW50KSwgZXZlbnQpOworfQorCitzdGF0aWMgdm9pZCBnc3RfZXZlbnRfaW5pdCAoR3N0RXZlbnRJbXBsICogZXZlbnQsIGdzaXplIHNpemUsCisgICAgR3N0RXZlbnRUeXBlIHR5cGUpOworCitzdGF0aWMgR3N0RXZlbnQgKgorX2dzdF9ldmVudF9jb3B5IChHc3RFdmVudCAqIGV2ZW50KQoreworICBHc3RFdmVudEltcGwgKmNvcHk7CisgIEdzdFN0cnVjdHVyZSAqczsKKworICBjb3B5ID0gZ19zbGljZV9uZXcwIChHc3RFdmVudEltcGwpOworCisgIGdzdF9ldmVudF9pbml0IChjb3B5LCBzaXplb2YgKEdzdEV2ZW50SW1wbCksIEdTVF9FVkVOVF9UWVBFIChldmVudCkpOworCisgIEdTVF9FVkVOVF9USU1FU1RBTVAgKGNvcHkpID0gR1NUX0VWRU5UX1RJTUVTVEFNUCAoZXZlbnQpOworICBHU1RfRVZFTlRfU0VRTlVNIChjb3B5KSA9IEdTVF9FVkVOVF9TRVFOVU0gKGV2ZW50KTsKKworICBzID0gR1NUX0VWRU5UX1NUUlVDVFVSRSAoZXZlbnQpOworICBpZiAocykgeworICAgIEdTVF9FVkVOVF9TVFJVQ1RVUkUgKGNvcHkpID0gZ3N0X3N0cnVjdHVyZV9jb3B5IChzKTsKKyAgICBnc3Rfc3RydWN0dXJlX3NldF9wYXJlbnRfcmVmY291bnQgKEdTVF9FVkVOVF9TVFJVQ1RVUkUgKGNvcHkpLAorICAgICAgICAmY29weS0+ZXZlbnQubWluaV9vYmplY3QucmVmY291bnQpOworICB9CisgIHJldHVybiBHU1RfRVZFTlRfQ0FTVCAoY29weSk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfZXZlbnRfaW5pdCAoR3N0RXZlbnRJbXBsICogZXZlbnQsIGdzaXplIHNpemUsIEdzdEV2ZW50VHlwZSB0eXBlKQoreworICBnc3RfbWluaV9vYmplY3RfaW5pdCAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGV2ZW50KSwgX2dzdF9ldmVudF90eXBlLCBzaXplKTsKKworICBldmVudC0+ZXZlbnQubWluaV9vYmplY3QuY29weSA9IChHc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uKSBfZ3N0X2V2ZW50X2NvcHk7CisgIGV2ZW50LT5ldmVudC5taW5pX29iamVjdC5mcmVlID0gKEdzdE1pbmlPYmplY3RGcmVlRnVuY3Rpb24pIF9nc3RfZXZlbnRfZnJlZTsKKworICBHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID0gdHlwZTsKKyAgR1NUX0VWRU5UX1RJTUVTVEFNUCAoZXZlbnQpID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgR1NUX0VWRU5UX1NFUU5VTSAoZXZlbnQpID0gZ3N0X3V0aWxfc2VxbnVtX25leHQgKCk7Cit9CisKK3N0YXRpYyBHc3RFdmVudCAqCitnc3RfZXZlbnRfbmV3IChHc3RFdmVudFR5cGUgdHlwZSkKK3sKKyAgR3N0RXZlbnRJbXBsICpldmVudDsKKworICBldmVudCA9IGdfc2xpY2VfbmV3MCAoR3N0RXZlbnRJbXBsKTsKKworICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0VWRU5ULCAiY3JlYXRpbmcgbmV3IGV2ZW50ICVwICVzICVkIiwgZXZlbnQsCisgICAgICBnc3RfZXZlbnRfdHlwZV9nZXRfbmFtZSAodHlwZSksIHR5cGUpOworCisgIGdzdF9ldmVudF9pbml0IChldmVudCwgc2l6ZW9mIChHc3RFdmVudEltcGwpLCB0eXBlKTsKKworICByZXR1cm4gR1NUX0VWRU5UX0NBU1QgKGV2ZW50KTsKK30KKworLyoqCisgKiBnc3RfZXZlbnRfbmV3X2N1c3RvbToKKyAqIEB0eXBlOiBUaGUgdHlwZSBvZiB0aGUgbmV3IGV2ZW50CisgKiBAc3RydWN0dXJlOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBzdHJ1Y3R1cmUgZm9yIHRoZSBldmVudC4gVGhlIGV2ZW50IHdpbGwKKyAqICAgICB0YWtlIG93bmVyc2hpcCBvZiB0aGUgc3RydWN0dXJlLgorICoKKyAqIENyZWF0ZSBhIG5ldyBjdXN0b20tdHlwZWQgZXZlbnQuIFRoaXMgY2FuIGJlIHVzZWQgZm9yIGFueXRoaW5nIG5vdAorICogaGFuZGxlZCBieSBvdGhlciBldmVudC1zcGVjaWZpYyBmdW5jdGlvbnMgdG8gcGFzcyBhbiBldmVudCB0byBhbm90aGVyCisgKiBlbGVtZW50LgorICoKKyAqIE1ha2Ugc3VyZSB0byBhbGxvY2F0ZSBhbiBldmVudCB0eXBlIHdpdGggdGhlICNHU1RfRVZFTlRfTUFLRV9UWVBFIG1hY3JvLAorICogYXNzaWduaW5nIGEgZnJlZSBudW1iZXIgYW5kIGZpbGxpbmcgaW4gdGhlIGNvcnJlY3QgZGlyZWN0aW9uIGFuZAorICogc2VyaWFsaXphdGlvbiBmbGFncy4KKyAqCisgKiBOZXcgY3VzdG9tIGV2ZW50cyBjYW4gYWxzbyBiZSBjcmVhdGVkIGJ5IHN1YmNsYXNzaW5nIHRoZSBldmVudCB0eXBlIGlmCisgKiBuZWVkZWQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3IGN1c3RvbSBldmVudC4KKyAqLworR3N0RXZlbnQgKgorZ3N0X2V2ZW50X25ld19jdXN0b20gKEdzdEV2ZW50VHlwZSB0eXBlLCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUpCit7CisgIEdzdEV2ZW50ICpldmVudDsKKworICAvKiBzdHJ1Y3R1cmUgbXVzdCBub3QgaGF2ZSBhIHBhcmVudCAqLworICBldmVudCA9IGdzdF9ldmVudF9uZXcgKHR5cGUpOworICBpZiAoc3RydWN0dXJlKSB7CisgICAgaWYgKCFnc3Rfc3RydWN0dXJlX3NldF9wYXJlbnRfcmVmY291bnQgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgICZldmVudC0+bWluaV9vYmplY3QucmVmY291bnQpKQorICAgICAgZ290byBoYWRfcGFyZW50OworCisgICAgR1NUX0VWRU5UX1NUUlVDVFVSRSAoZXZlbnQpID0gc3RydWN0dXJlOworICB9CisgIHJldHVybiBldmVudDsKKworICAvKiBFUlJPUlMgKi8KK2hhZF9wYXJlbnQ6CisgIHsKKyAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKyAgICBnX3dhcm5pbmcgKCJzdHJ1Y3R1cmUgaXMgYWxyZWFkeSBvd25lZCBieSBhbm90aGVyIG9iamVjdCIpOworICAgIHJldHVybiBOVUxMOworICB9Cit9CisKKy8qKgorICogZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmU6CisgKiBAZXZlbnQ6IFRoZSAjR3N0RXZlbnQuCisgKgorICogQWNjZXNzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGV2ZW50LgorICoKKyAqIFJldHVybnM6IFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGV2ZW50LiBUaGUgc3RydWN0dXJlIGlzIHN0aWxsCisgKiBvd25lZCBieSB0aGUgZXZlbnQsIHdoaWNoIG1lYW5zIHRoYXQgeW91IHNob3VsZCBub3QgZnJlZSBpdCBhbmQKKyAqIHRoYXQgdGhlIHBvaW50ZXIgYmVjb21lcyBpbnZhbGlkIHdoZW4geW91IGZyZWUgdGhlIGV2ZW50LgorICoKKyAqIE1UIHNhZmUuCisgKi8KK2NvbnN0IEdzdFN0cnVjdHVyZSAqCitnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoR3N0RXZlbnQgKiBldmVudCkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FVkVOVCAoZXZlbnQpLCBOVUxMKTsKKworICByZXR1cm4gR1NUX0VWRU5UX1NUUlVDVFVSRSAoZXZlbnQpOworfQorCisvKioKKyAqIGdzdF9ldmVudF93cml0YWJsZV9zdHJ1Y3R1cmU6CisgKiBAZXZlbnQ6IFRoZSAjR3N0RXZlbnQuCisgKgorICogR2V0IGEgd3JpdGFibGUgdmVyc2lvbiBvZiB0aGUgc3RydWN0dXJlLgorICoKKyAqIFJldHVybnM6IFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGV2ZW50LiBUaGUgc3RydWN0dXJlIGlzIHN0aWxsCisgKiBvd25lZCBieSB0aGUgZXZlbnQsIHdoaWNoIG1lYW5zIHRoYXQgeW91IHNob3VsZCBub3QgZnJlZSBpdCBhbmQKKyAqIHRoYXQgdGhlIHBvaW50ZXIgYmVjb21lcyBpbnZhbGlkIHdoZW4geW91IGZyZWUgdGhlIGV2ZW50LgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgQGV2ZW50IGlzIHdyaXRhYmxlIGFuZCB3aWxsIG5ldmVyIHJldHVybiBOVUxMLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK0dzdFN0cnVjdHVyZSAqCitnc3RfZXZlbnRfd3JpdGFibGVfc3RydWN0dXJlIChHc3RFdmVudCAqIGV2ZW50KQoreworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VWRU5UIChldmVudCksIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X2V2ZW50X2lzX3dyaXRhYmxlIChldmVudCksIE5VTEwpOworCisgIHN0cnVjdHVyZSA9IEdTVF9FVkVOVF9TVFJVQ1RVUkUgKGV2ZW50KTsKKworICBpZiAoc3RydWN0dXJlID09IE5VTEwpIHsKKyAgICBzdHJ1Y3R1cmUgPQorICAgICAgICBnc3Rfc3RydWN0dXJlX2lkX2VtcHR5X25ldyAoZ3N0X2V2ZW50X3R5cGVfdG9fcXVhcmsgKEdTVF9FVkVOVF9UWVBFCisgICAgICAgICAgICAoZXZlbnQpKSk7CisgICAgZ3N0X3N0cnVjdHVyZV9zZXRfcGFyZW50X3JlZmNvdW50IChzdHJ1Y3R1cmUsICZldmVudC0+bWluaV9vYmplY3QucmVmY291bnQpOworICAgIEdTVF9FVkVOVF9TVFJVQ1RVUkUgKGV2ZW50KSA9IHN0cnVjdHVyZTsKKyAgfQorICByZXR1cm4gc3RydWN0dXJlOworfQorCisvKioKKyAqIGdzdF9ldmVudF9oYXNfbmFtZToKKyAqIEBldmVudDogVGhlICNHc3RFdmVudC4KKyAqIEBuYW1lOiBuYW1lIHRvIGNoZWNrCisgKgorICogQ2hlY2tzIGlmIEBldmVudCBoYXMgdGhlIGdpdmVuIEBuYW1lLiBUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgdXNlZCB0bworICogY2hlY2sgdGhlIG5hbWUgb2YgYSBjdXN0b20gZXZlbnQuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgQG5hbWUgbWF0Y2hlcyB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgc3RydWN0dXJlLgorICoKKyAqIFNpbmNlOiAwLjEwLjIwCisgKi8KK2dib29sZWFuCitnc3RfZXZlbnRfaGFzX25hbWUgKEdzdEV2ZW50ICogZXZlbnQsIGNvbnN0IGdjaGFyICogbmFtZSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FVkVOVCAoZXZlbnQpLCBGQUxTRSk7CisKKyAgaWYgKEdTVF9FVkVOVF9TVFJVQ1RVUkUgKGV2ZW50KSA9PSBOVUxMKQorICAgIHJldHVybiBGQUxTRTsKKworICByZXR1cm4gZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAoR1NUX0VWRU5UX1NUUlVDVFVSRSAoZXZlbnQpLCBuYW1lKTsKK30KKworLyoqCisgKiBnc3RfZXZlbnRfZ2V0X3NlcW51bToKKyAqIEBldmVudDogQSAjR3N0RXZlbnQuCisgKgorICogUmV0cmlldmUgdGhlIHNlcXVlbmNlIG51bWJlciBvZiBhIGV2ZW50LgorICoKKyAqIEV2ZW50cyBoYXZlIGV2ZXItaW5jcmVtZW50aW5nIHNlcXVlbmNlIG51bWJlcnMsIHdoaWNoIG1heSBhbHNvIGJlIHNldAorICogZXhwbGljaXRseSB2aWEgZ3N0X2V2ZW50X3NldF9zZXFudW0oKS4gU2VxdWVuY2UgbnVtYmVycyBhcmUgdHlwaWNhbGx5IHVzZWQgdG8KKyAqIGluZGljYXRlIHRoYXQgYSBldmVudCBjb3JyZXNwb25kcyB0byBzb21lIG90aGVyIHNldCBvZiBldmVudHMgb3IgbWVzc2FnZXMsCisgKiBmb3IgZXhhbXBsZSBhbiBFT1MgZXZlbnQgY29ycmVzcG9uZGluZyB0byBhIFNFRUsgZXZlbnQuIEl0IGlzIGNvbnNpZGVyZWQgZ29vZAorICogcHJhY3RpY2UgdG8gbWFrZSB0aGlzIGNvcnJlc3BvbmRlbmNlIHdoZW4gcG9zc2libGUsIHRob3VnaCBpdCBpcyBub3QKKyAqIHJlcXVpcmVkLgorICoKKyAqIE5vdGUgdGhhdCBldmVudHMgYW5kIG1lc3NhZ2VzIHNoYXJlIHRoZSBzYW1lIHNlcXVlbmNlIG51bWJlciBpbmNyZW1lbnRvcjsKKyAqIHR3byBldmVudHMgb3IgbWVzc2FnZXMgd2lsbCBuZXZlciBoYXZlIHRoZSBzYW1lIHNlcXVlbmNlIG51bWJlciB1bmxlc3MKKyAqIHRoYXQgY29ycmVzcG9uZGVuY2Ugd2FzIG1hZGUgZXhwbGljaXRseS4KKyAqCisgKiBSZXR1cm5zOiBUaGUgZXZlbnQncyBzZXF1ZW5jZSBudW1iZXIuCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yMgorICovCitndWludDMyCitnc3RfZXZlbnRfZ2V0X3NlcW51bSAoR3N0RXZlbnQgKiBldmVudCkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FVkVOVCAoZXZlbnQpLCAtMSk7CisKKyAgcmV0dXJuIEdTVF9FVkVOVF9TRVFOVU0gKGV2ZW50KTsKK30KKworLyoqCisgKiBnc3RfZXZlbnRfc2V0X3NlcW51bToKKyAqIEBldmVudDogQSAjR3N0RXZlbnQuCisgKiBAc2VxbnVtOiBBIHNlcXVlbmNlIG51bWJlci4KKyAqCisgKiBTZXQgdGhlIHNlcXVlbmNlIG51bWJlciBvZiBhIGV2ZW50LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWlnaHQgYmUgY2FsbGVkIGJ5IHRoZSBjcmVhdG9yIG9mIGEgZXZlbnQgdG8gaW5kaWNhdGUgdGhhdCB0aGUKKyAqIGV2ZW50IHJlbGF0ZXMgdG8gb3RoZXIgZXZlbnRzIG9yIG1lc3NhZ2VzLiBTZWUgZ3N0X2V2ZW50X2dldF9zZXFudW0oKSBmb3IKKyAqIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yMgorICovCit2b2lkCitnc3RfZXZlbnRfc2V0X3NlcW51bSAoR3N0RXZlbnQgKiBldmVudCwgZ3VpbnQzMiBzZXFudW0pCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FVkVOVCAoZXZlbnQpKTsKKworICBHU1RfRVZFTlRfU0VRTlVNIChldmVudCkgPSBzZXFudW07Cit9CisKKy8qIEZJWE1FIDAuMTE6IEl0IHdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBmbHVzaCBldmVudHMKKyAqIHRoYXQgZG9uJ3QgcmVzZXQgdGhlIHJ1bm5pbmcgdGltZSBpbiB0aGUgc2lua3MKKyAqLworCisvKioKKyAqIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQ6CisgKgorICogQWxsb2NhdGUgYSBuZXcgZmx1c2ggc3RhcnQgZXZlbnQuIFRoZSBmbHVzaCBzdGFydCBldmVudCBjYW4gYmUgc2VudAorICogdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0gYW5kIHRyYXZlbHMgb3V0LW9mLWJvdW5kcyB3aXRoIHRoZSBkYXRhZmxvdy4KKyAqCisgKiBJdCBtYXJrcyBwYWRzIGFzIGJlaW5nIGZsdXNoaW5nIGFuZCB3aWxsIG1ha2UgdGhlbSByZXR1cm4KKyAqICNHU1RfRkxPV19XUk9OR19TVEFURSB3aGVuIHVzZWQgZm9yIGRhdGEgZmxvdyB3aXRoIGdzdF9wYWRfcHVzaCgpLAorICogZ3N0X3BhZF9jaGFpbigpLCBnc3RfcGFkX2FsbG9jX2J1ZmZlcigpLCBnc3RfcGFkX2dldF9yYW5nZSgpIGFuZAorICogZ3N0X3BhZF9wdWxsX3JhbmdlKCkuIEFueSBldmVudCAoZXhjZXB0IGEgI0dTVF9FVkVOVF9GTFVTSF9TVE9QKSByZWNlaXZlZAorICogb24gYSBmbHVzaGluZyBwYWQgd2lsbCByZXR1cm4gJUZBTFNFIGltbWVkaWF0ZWx5LgorICoKKyAqIEVsZW1lbnRzIHNob3VsZCB1bmxvY2sgYW55IGJsb2NraW5nIGZ1bmN0aW9ucyBhbmQgZXhpdCB0aGVpciBzdHJlYW1pbmcKKyAqIGZ1bmN0aW9ucyBhcyBmYXN0IGFzIHBvc3NpYmxlIHdoZW4gdGhpcyBldmVudCBpcyByZWNlaXZlZC4KKyAqCisgKiBUaGlzIGV2ZW50IGlzIHR5cGljYWxseSBnZW5lcmF0ZWQgYWZ0ZXIgYSBzZWVrIHRvIGZsdXNoIG91dCBhbGwgcXVldWVkIGRhdGEKKyAqIGluIHRoZSBwaXBlbGluZSBzbyB0aGF0IHRoZSBuZXcgbWVkaWEgaXMgcGxheWVkIGFzIHNvb24gYXMgcG9zc2libGUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyBmbHVzaCBzdGFydCBldmVudC4KKyAqLworR3N0RXZlbnQgKgorZ3N0X2V2ZW50X25ld19mbHVzaF9zdGFydCAodm9pZCkKK3sKKyAgcmV0dXJuIGdzdF9ldmVudF9uZXcgKEdTVF9FVkVOVF9GTFVTSF9TVEFSVCk7Cit9CisKKy8qKgorICogZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wOgorICogQHJlc2V0X3RpbWU6IGlmIHRpbWUgc2hvdWxkIGJlIHJlc2V0CisgKgorICogQWxsb2NhdGUgYSBuZXcgZmx1c2ggc3RvcCBldmVudC4gVGhlIGZsdXNoIHN0b3AgZXZlbnQgY2FuIGJlIHNlbnQKKyAqIHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtIGFuZCB0cmF2ZWxzIHNlcmlhbGl6ZWQgd2l0aCB0aGUgZGF0YWZsb3cuCisgKiBJdCBpcyB0eXBpY2FsbHkgc2VudCBhZnRlciBzZW5kaW5nIGEgRkxVU0hfU1RBUlQgZXZlbnQgdG8gbWFrZSB0aGUKKyAqIHBhZHMgYWNjZXB0IGRhdGEgYWdhaW4uCisgKgorICogRWxlbWVudHMgY2FuIHByb2Nlc3MgdGhpcyBldmVudCBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgZGF0YWZsb3cgc2luY2UKKyAqIHRoZSBwcmVjZWVkaW5nIEZMVVNIX1NUQVJUIGV2ZW50IHN0b3BwZWQgdGhlIGRhdGFmbG93LgorICoKKyAqIFRoaXMgZXZlbnQgaXMgdHlwaWNhbGx5IGdlbmVyYXRlZCB0byBjb21wbGV0ZSBhIHNlZWsgYW5kIHRvIHJlc3VtZQorICogZGF0YWZsb3cuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyBmbHVzaCBzdG9wIGV2ZW50LgorICovCitHc3RFdmVudCAqCitnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AgKGdib29sZWFuIHJlc2V0X3RpbWUpCit7CisgIEdzdEV2ZW50ICpldmVudDsKKworICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfRVZFTlQsICJjcmVhdGluZyBmbHVzaCBzdG9wICVkIiwgcmVzZXRfdGltZSk7CisKKyAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX0ZMVVNIX1NUT1AsCisgICAgICBnc3Rfc3RydWN0dXJlX2lkX25ldyAoR1NUX1FVQVJLIChFVkVOVF9GTFVTSF9TVE9QKSwKKyAgICAgICAgICBHU1RfUVVBUksgKFJFU0VUX1RJTUUpLCBHX1RZUEVfQk9PTEVBTiwgcmVzZXRfdGltZSwgTlVMTCkpOworCisgIHJldHVybiBldmVudDsKK30KKworLyoqCisgKiBnc3RfZXZlbnRfcGFyc2VfZmx1c2hfc3RvcDoKKyAqIEBldmVudDogVGhlIGV2ZW50IHRvIHBhcnNlCisgKiBAcmVzZXRfdGltZTogKG91dCk6IGlmIHRpbWUgc2hvdWxkIGJlIHJlc2V0CisgKgorICogUGFyc2UgdGhlIEZMVVNIX1NUT1AgZXZlbnQgYW5kIHJldHJpZXZlIHRoZSBAcmVzZXRfdGltZSBtZW1iZXIuCisgKi8KK3ZvaWQKK2dzdF9ldmVudF9wYXJzZV9mbHVzaF9zdG9wIChHc3RFdmVudCAqIGV2ZW50LCBnYm9vbGVhbiAqIHJlc2V0X3RpbWUpCit7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FVkVOVCAoZXZlbnQpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfRkxVU0hfU1RPUCk7CisKKyAgc3RydWN0dXJlID0gR1NUX0VWRU5UX1NUUlVDVFVSRSAoZXZlbnQpOworICBpZiAoR19MSUtFTFkgKHJlc2V0X3RpbWUpKQorICAgICpyZXNldF90aW1lID0KKyAgICAgICAgZ192YWx1ZV9nZXRfYm9vbGVhbiAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgIEdTVF9RVUFSSyAoUkVTRVRfVElNRSkpKTsKK30KKworLyoqCisgKiBnc3RfZXZlbnRfbmV3X2VvczoKKyAqCisgKiBDcmVhdGUgYSBuZXcgRU9TIGV2ZW50LiBUaGUgZW9zIGV2ZW50IGNhbiBvbmx5IHRyYXZlbCBkb3duc3RyZWFtCisgKiBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgYnVmZmVyIGZsb3cuIEVsZW1lbnRzIHRoYXQgcmVjZWl2ZSB0aGUgRU9TCisgKiBldmVudCBvbiBhIHBhZCBjYW4gcmV0dXJuICNHU1RfRkxPV19VTkVYUEVDVEVEIGFzIGEgI0dzdEZsb3dSZXR1cm4KKyAqIHdoZW4gZGF0YSBhZnRlciB0aGUgRU9TIGV2ZW50IGFycml2ZXMuCisgKgorICogVGhlIEVPUyBldmVudCB3aWxsIHRyYXZlbCBkb3duIHRvIHRoZSBzaW5rIGVsZW1lbnRzIGluIHRoZSBwaXBlbGluZQorICogd2hpY2ggd2lsbCB0aGVuIHBvc3QgdGhlICNHU1RfTUVTU0FHRV9FT1Mgb24gdGhlIGJ1cyBhZnRlciB0aGV5IGhhdmUKKyAqIGZpbmlzaGVkIHBsYXlpbmcgYW55IGJ1ZmZlcmVkIGRhdGEuCisgKgorICogV2hlbiBhbGwgc2lua3MgaGF2ZSBwb3N0ZWQgYW4gRU9TIG1lc3NhZ2UsIGFuIEVPUyBtZXNzYWdlIGlzCisgKiBmb3J3YXJkZWQgdG8gdGhlIGFwcGxpY2F0aW9uLgorICoKKyAqIFRoZSBFT1MgZXZlbnQgaXRzZWxmIHdpbGwgbm90IGNhdXNlIGFueSBzdGF0ZSB0cmFuc2l0aW9ucyBvZiB0aGUgcGlwZWxpbmUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3IEVPUyBldmVudC4KKyAqLworR3N0RXZlbnQgKgorZ3N0X2V2ZW50X25ld19lb3MgKHZvaWQpCit7CisgIHJldHVybiBnc3RfZXZlbnRfbmV3IChHU1RfRVZFTlRfRU9TKTsKK30KKworLyoqCisgKiBnc3RfZXZlbnRfbmV3X2NhcHM6CisgKiBAY2FwczogYSAjR3N0Q2FwcworICoKKyAqIENyZWF0ZSBhIG5ldyBDQVBTIGV2ZW50IGZvciBAY2Fwcy4gVGhlIGNhcHMgZXZlbnQgY2FuIG9ubHkgdHJhdmVsIGRvd25zdHJlYW0KKyAqIHN5bmNocm9uaXplZCB3aXRoIHRoZSBidWZmZXIgZmxvdyBhbmQgY29udGFpbnMgdGhlIGZvcm1hdCBvZiB0aGUgYnVmZmVycworICogdGhhdCB3aWxsIGZvbGxvdyBhZnRlciB0aGUgZXZlbnQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3IENBUFMgZXZlbnQuCisgKi8KK0dzdEV2ZW50ICoKK2dzdF9ldmVudF9uZXdfY2FwcyAoR3N0Q2FwcyAqIGNhcHMpCit7CisgIEdzdEV2ZW50ICpldmVudDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoY2FwcyAhPSBOVUxMLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF9jYXBzX2lzX2ZpeGVkIChjYXBzKSwgTlVMTCk7CisKKyAgR1NUX0NBVF9JTkZPIChHU1RfQ0FUX0VWRU5ULCAiY3JlYXRpbmcgY2FwcyBldmVudCAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7CisKKyAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX0NBUFMsCisgICAgICBnc3Rfc3RydWN0dXJlX2lkX25ldyAoR1NUX1FVQVJLIChFVkVOVF9DQVBTKSwKKyAgICAgICAgICBHU1RfUVVBUksgKENBUFMpLCBHU1RfVFlQRV9DQVBTLCBjYXBzLCBOVUxMKSk7CisKKyAgcmV0dXJuIGV2ZW50OworfQorCisvKioKKyAqIGdzdF9ldmVudF9wYXJzZV9jYXBzOgorICogQGV2ZW50OiBUaGUgZXZlbnQgdG8gcGFyc2UKKyAqIEBjYXBzOiAob3V0KTogQSBwb2ludGVyIHRvIHRoZSBjYXBzCisgKgorICogR2V0IHRoZSBjYXBzIGZyb20gQGV2ZW50LiBUaGUgY2FwcyByZW1haW5zIHZhbGlkIGFzIGxvbmcgYXMgQGV2ZW50IHJlbWFpbnMKKyAqIHZhbGlkLgorICovCit2b2lkCitnc3RfZXZlbnRfcGFyc2VfY2FwcyAoR3N0RXZlbnQgKiBldmVudCwgR3N0Q2FwcyAqKiBjYXBzKQoreworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRVZFTlQgKGV2ZW50KSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX0NBUFMpOworCisgIHN0cnVjdHVyZSA9IEdTVF9FVkVOVF9TVFJVQ1RVUkUgKGV2ZW50KTsKKyAgaWYgKEdfTElLRUxZIChjYXBzKSkKKyAgICAqY2FwcyA9CisgICAgICAgIGdfdmFsdWVfZ2V0X2JveGVkIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAorICAgICAgICAgICAgR1NUX1FVQVJLIChDQVBTKSkpOworfQorCisvKioKKyAqIGdzdF9ldmVudF9uZXdfc2VnbWVudDoKKyAqIEBzZWdtZW50OiBhICNHc3RTZWdtZW50CisgKgorICogQ3JlYXRlIGEgbmV3IFNFR01FTlQgZXZlbnQgZm9yIEBzZWdtZW50LiBUaGUgc2VnbWVudCBldmVudCBjYW4gb25seSB0cmF2ZWwKKyAqIGRvd25zdHJlYW0gc3luY2hyb25pemVkIHdpdGggdGhlIGJ1ZmZlciBmbG93IGFuZCBjb250YWlucyB0aW1pbmcgaW5mb3JtYXRpb24KKyAqIGFuZCBwbGF5YmFjayBwcm9wZXJ0aWVzIGZvciB0aGUgYnVmZmVycyB0aGF0IHdpbGwgZm9sbG93LgorICoKKyAqIFRoZSBuZXdzZWdtZW50IGV2ZW50IG1hcmtzIHRoZSByYW5nZSBvZiBidWZmZXJzIHRvIGJlIHByb2Nlc3NlZC4gQWxsCisgKiBkYXRhIG5vdCB3aXRoaW4gdGhlIHNlZ21lbnQgcmFuZ2UgaXMgbm90IHRvIGJlIHByb2Nlc3NlZC4gVGhpcyBjYW4gYmUKKyAqIHVzZWQgaW50ZWxsaWdlbnRseSBieSBwbHVnaW5zIHRvIGFwcGx5IG1vcmUgZWZmaWNpZW50IG1ldGhvZHMgb2Ygc2tpcHBpbmcKKyAqIHVubmVlZGVkIGRhdGEuIFRoZSB2YWxpZCByYW5nZSBpcyBleHByZXNzZWQgd2l0aCB0aGUgQHN0YXJ0IGFuZCBAc3RvcAorICogdmFsdWVzLgorICoKKyAqIFRoZSB0aW1lIHZhbHVlIG9mIHRoZSBzZWdtZW50IGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgc3RhcnQKKyAqIHZhbHVlIHRvIGNvbnZlcnQgdGhlIGJ1ZmZlciB0aW1lc3RhbXBzIGludG8gdGhlIHN0cmVhbSB0aW1lLiBUaGlzIGlzCisgKiB1c3VhbGx5IGRvbmUgaW4gc2lua3MgdG8gcmVwb3J0IHRoZSBjdXJyZW50IHN0cmVhbV90aW1lLgorICogQHRpbWUgcmVwcmVzZW50cyB0aGUgc3RyZWFtX3RpbWUgb2YgYSBidWZmZXIgY2FycnlpbmcgYSB0aW1lc3RhbXAgb2YKKyAqIEBzdGFydC4gQHRpbWUgY2Fubm90IGJlIC0xLgorICoKKyAqIEBzdGFydCBjYW5ub3QgYmUgLTEsIEBzdG9wIGNhbiBiZSAtMS4gSWYgdGhlcmUKKyAqIGlzIGEgdmFsaWQgQHN0b3AgZ2l2ZW4sIGl0IG11c3QgYmUgZ3JlYXRlciBvciBlcXVhbCB0aGUgQHN0YXJ0LCBpbmNsdWRpbmcKKyAqIHdoZW4gdGhlIGluZGljYXRlZCBwbGF5YmFjayBAcmF0ZSBpcyA8IDAuCisgKgorICogVGhlIEBhcHBsaWVkX3JhdGUgdmFsdWUgcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgYW55IHJhdGUgYWRqdXN0bWVudCB0aGF0CisgKiBoYXMgYWxyZWFkeSBiZWVuIG1hZGUgdG8gdGhlIHRpbWVzdGFtcHMgYW5kIGNvbnRlbnQgb24gdGhlIGJ1ZmZlcnMgb2YgdGhlCisgKiBzdHJlYW0uIChAcmF0ZSAqIEBhcHBsaWVkX3JhdGUpIHNob3VsZCBhbHdheXMgZXF1YWwgdGhlIHJhdGUgdGhhdCBoYXMgYmVlbgorICogcmVxdWVzdGVkIGZvciBwbGF5YmFjay4gRm9yIGV4YW1wbGUsIGlmIGFuIGVsZW1lbnQgaGFzIGFuIGlucHV0IHNlZ21lbnQKKyAqIHdpdGggaW50ZW5kZWQgcGxheWJhY2sgQHJhdGUgb2YgMi4wIGFuZCBhcHBsaWVkX3JhdGUgb2YgMS4wLCBpdCBjYW4gYWRqdXN0CisgKiBpbmNvbWluZyB0aW1lc3RhbXBzIGFuZCBidWZmZXIgY29udGVudCBieSBoYWxmIGFuZCBvdXRwdXQgYSBuZXdzZWdtZW50IGV2ZW50CisgKiB3aXRoIEByYXRlIG9mIDEuMCBhbmQgQGFwcGxpZWRfcmF0ZSBvZiAyLjAKKyAqCisgKiBBZnRlciBhIG5ld3NlZ21lbnQgZXZlbnQsIHRoZSBidWZmZXIgc3RyZWFtIHRpbWUgaXMgY2FsY3VsYXRlZCB3aXRoOgorICoKKyAqICAgdGltZSArIChUSU1FU1RBTVAoYnVmKSAtIHN0YXJ0KSAqIEFCUyAocmF0ZSAqIGFwcGxpZWRfcmF0ZSkKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXcgU0VHTUVOVCBldmVudC4KKyAqLworR3N0RXZlbnQgKgorZ3N0X2V2ZW50X25ld19zZWdtZW50IChHc3RTZWdtZW50ICogc2VnbWVudCkKK3sKKyAgR3N0RXZlbnQgKmV2ZW50OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWdtZW50ICE9IE5VTEwsIE5VTEwpOworCisgIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9FVkVOVCwgImNyZWF0aW5nIHNlZ21lbnQgZXZlbnQgJSIgR1NUX1NFR01FTlRfRk9STUFULAorICAgICAgc2VnbWVudCk7CisKKyAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX1NFR01FTlQsCisgICAgICBnc3Rfc3RydWN0dXJlX2lkX25ldyAoR1NUX1FVQVJLIChFVkVOVF9TRUdNRU5UKSwKKyAgICAgICAgICBHU1RfUVVBUksgKFNFR01FTlQpLCBHU1RfVFlQRV9TRUdNRU5ULCBzZWdtZW50LCBOVUxMKSk7CisKKyAgcmV0dXJuIGV2ZW50OworfQorCisvKioKKyAqIGdzdF9ldmVudF9wYXJzZV9zZWdtZW50OgorICogQGV2ZW50OiBUaGUgZXZlbnQgdG8gcGFyc2UKKyAqIEBzZWdtZW50OiAob3V0KSAodHJhbnNmZXIgbm9uZSk6IGEgcG9pbnRlciB0byBhICNHc3RTZWdtZW50CisgKgorICogUGFyc2VzIGEgc2VnbWVudCBAZXZlbnQgYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluIHRoZSBnaXZlbiBAc2VnbWVudCBsb2NhdGlvbi4KKyAqIEBzZWdtZW50IHJlbWFpbnMgdmFsaWQgb25seSB1bnRpbCB0aGUgQGV2ZW50IGlzIGZyZWVkLiBEb24ndCBtb2RpZnkgdGhlIHNlZ21lbnQKKyAqIGFuZCBtYWtlIGEgY29weSBpZiB5b3Ugd2FudCB0byBtb2RpZnkgaXQgb3Igc3RvcmUgaXQgZm9yIGxhdGVyIHVzZS4KKyAqLwordm9pZAorZ3N0X2V2ZW50X3BhcnNlX3NlZ21lbnQgKEdzdEV2ZW50ICogZXZlbnQsIGNvbnN0IEdzdFNlZ21lbnQgKiogc2VnbWVudCkKK3sKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0VWRU5UIChldmVudCkpOworICBnX3JldHVybl9pZl9mYWlsIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9TRUdNRU5UKTsKKworICBpZiAoc2VnbWVudCkgeworICAgIHN0cnVjdHVyZSA9IEdTVF9FVkVOVF9TVFJVQ1RVUkUgKGV2ZW50KTsKKyAgICAqc2VnbWVudCA9IGdfdmFsdWVfZ2V0X2JveGVkIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAorICAgICAgICAgICAgR1NUX1FVQVJLIChTRUdNRU5UKSkpOworICB9Cit9CisKKy8qKgorICogZ3N0X2V2ZW50X2NvcHlfc2VnbWVudDoKKyAqIEBldmVudDogVGhlIGV2ZW50IHRvIHBhcnNlCisgKiBAc2VnbWVudDogYSBwb2ludGVyIHRvIGEgI0dzdFNlZ21lbnQKKyAqCisgKiBQYXJzZXMgYSBzZWdtZW50IEBldmVudCBhbmQgY29waWVzIHRoZSAjR3N0U2VnbWVudCBpbnRvIHRoZSBsb2NhdGlvbgorICogZ2l2ZW4gYnkgQHNlZ21lbnQuCisgKi8KK3ZvaWQKK2dzdF9ldmVudF9jb3B5X3NlZ21lbnQgKEdzdEV2ZW50ICogZXZlbnQsIEdzdFNlZ21lbnQgKiBzZWdtZW50KQoreworICBjb25zdCBHc3RTZWdtZW50ICpzcmM7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0VWRU5UIChldmVudCkpOworICBnX3JldHVybl9pZl9mYWlsIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9TRUdNRU5UKTsKKworICBpZiAoc2VnbWVudCkgeworICAgIGdzdF9ldmVudF9wYXJzZV9zZWdtZW50IChldmVudCwgJnNyYyk7CisgICAgZ3N0X3NlZ21lbnRfY29weV9pbnRvIChzcmMsIHNlZ21lbnQpOworICB9Cit9CisKKy8qKgorICogZ3N0X2V2ZW50X25ld190YWc6CisgKiBAdGFnbGlzdDogKHRyYW5zZmVyIGZ1bGwpOiBtZXRhZGF0YSBsaXN0LiBUaGUgZXZlbnQgd2lsbCB0YWtlIG93bmVyc2hpcAorICogICAgIG9mIHRoZSB0YWdsaXN0LgorICoKKyAqIEdlbmVyYXRlcyBhIG1ldGFkYXRhIHRhZyBldmVudCBmcm9tIHRoZSBnaXZlbiBAdGFnbGlzdC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RFdmVudAorICovCitHc3RFdmVudCAqCitnc3RfZXZlbnRfbmV3X3RhZyAoR3N0VGFnTGlzdCAqIHRhZ2xpc3QpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0YWdsaXN0ICE9IE5VTEwsIE5VTEwpOworCisgIHJldHVybiBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX1RBRywgKEdzdFN0cnVjdHVyZSAqKSB0YWdsaXN0KTsKK30KKworLyoqCisgKiBnc3RfZXZlbnRfcGFyc2VfdGFnOgorICogQGV2ZW50OiBhIHRhZyBldmVudAorICogQHRhZ2xpc3Q6IChvdXQpICh0cmFuc2ZlciBub25lKTogcG9pbnRlciB0byBtZXRhZGF0YSBsaXN0CisgKgorICogUGFyc2VzIGEgdGFnIEBldmVudCBhbmQgc3RvcmVzIHRoZSByZXN1bHRzIGluIHRoZSBnaXZlbiBAdGFnbGlzdCBsb2NhdGlvbi4KKyAqIE5vIHJlZmVyZW5jZSB0byB0aGUgdGFnbGlzdCB3aWxsIGJlIHJldHVybmVkLCBpdCByZW1haW5zIHZhbGlkIG9ubHkgdW50aWwKKyAqIHRoZSBAZXZlbnQgaXMgZnJlZWQuIERvbid0IG1vZGlmeSBvciBmcmVlIHRoZSB0YWdsaXN0LCBtYWtlIGEgY29weSBpZiB5b3UKKyAqIHdhbnQgdG8gbW9kaWZ5IGl0IG9yIHN0b3JlIGl0IGZvciBsYXRlciB1c2UuCisgKi8KK3ZvaWQKK2dzdF9ldmVudF9wYXJzZV90YWcgKEdzdEV2ZW50ICogZXZlbnQsIEdzdFRhZ0xpc3QgKiogdGFnbGlzdCkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0VWRU5UIChldmVudCkpOworICBnX3JldHVybl9pZl9mYWlsIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9UQUcpOworCisgIGlmICh0YWdsaXN0KQorICAgICp0YWdsaXN0ID0gKEdzdFRhZ0xpc3QgKikgR1NUX0VWRU5UX1NUUlVDVFVSRSAoZXZlbnQpOworfQorCisvKiBidWZmZXJzaXplIGV2ZW50ICovCisvKioKKyAqIGdzdF9ldmVudF9uZXdfYnVmZmVyX3NpemU6CisgKiBAZm9ybWF0OiBidWZmZXIgZm9ybWF0CisgKiBAbWluc2l6ZTogbWluaW11bSBidWZmZXIgc2l6ZQorICogQG1heHNpemU6IG1heGltdW0gYnVmZmVyIHNpemUKKyAqIEBhc3luYzogdGhyZWFkIGJlaGF2aW9yCisgKgorICogQ3JlYXRlIGEgbmV3IGJ1ZmZlcnNpemUgZXZlbnQuIFRoZSBldmVudCBpcyBzZW50IGRvd25zdHJlYW0gYW5kIG5vdGlmaWVzCisgKiBlbGVtZW50cyB0aGF0IHRoZXkgc2hvdWxkIHByb3ZpZGUgYSBidWZmZXIgb2YgdGhlIHNwZWNpZmllZCBkaW1lbnNpb25zLgorICoKKyAqIFdoZW4gdGhlIEBhc3luYyBmbGFnIGlzIHNldCwgYSB0aHJlYWQgYm91bmRhcnkgaXMgcHJlZmVycmVkLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdEV2ZW50CisgKi8KK0dzdEV2ZW50ICoKK2dzdF9ldmVudF9uZXdfYnVmZmVyX3NpemUgKEdzdEZvcm1hdCBmb3JtYXQsIGdpbnQ2NCBtaW5zaXplLAorICAgIGdpbnQ2NCBtYXhzaXplLCBnYm9vbGVhbiBhc3luYykKK3sKKyAgR3N0RXZlbnQgKmV2ZW50OworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfRVZFTlQsCisgICAgICAiY3JlYXRpbmcgYnVmZmVyc2l6ZSBmb3JtYXQgJXMsIG1pbnNpemUgJSIgR19HSU5UNjRfRk9STUFUCisgICAgICAiLCBtYXhzaXplICUiIEdfR0lOVDY0X0ZPUk1BVCAiLCBhc3luYyAlZCIsIGdzdF9mb3JtYXRfZ2V0X25hbWUgKGZvcm1hdCksCisgICAgICBtaW5zaXplLCBtYXhzaXplLCBhc3luYyk7CisKKyAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9pZF9uZXcgKEdTVF9RVUFSSyAoRVZFTlRfQlVGRkVSX1NJWkUpLAorICAgICAgR1NUX1FVQVJLIChGT1JNQVQpLCBHU1RfVFlQRV9GT1JNQVQsIGZvcm1hdCwKKyAgICAgIEdTVF9RVUFSSyAoTUlOU0laRSksIEdfVFlQRV9JTlQ2NCwgbWluc2l6ZSwKKyAgICAgIEdTVF9RVUFSSyAoTUFYU0laRSksIEdfVFlQRV9JTlQ2NCwgbWF4c2l6ZSwKKyAgICAgIEdTVF9RVUFSSyAoQVNZTkMpLCBHX1RZUEVfQk9PTEVBTiwgYXN5bmMsIE5VTEwpOworICBldmVudCA9IGdzdF9ldmVudF9uZXdfY3VzdG9tIChHU1RfRVZFTlRfQlVGRkVSU0laRSwgc3RydWN0dXJlKTsKKworICByZXR1cm4gZXZlbnQ7Cit9CisKKy8qKgorICogZ3N0X2V2ZW50X3BhcnNlX2J1ZmZlcl9zaXplOgorICogQGV2ZW50OiBUaGUgZXZlbnQgdG8gcXVlcnkKKyAqIEBmb3JtYXQ6IChvdXQpOiBBIHBvaW50ZXIgdG8gc3RvcmUgdGhlIGZvcm1hdCBpbgorICogQG1pbnNpemU6IChvdXQpOiBBIHBvaW50ZXIgdG8gc3RvcmUgdGhlIG1pbnNpemUgaW4KKyAqIEBtYXhzaXplOiAob3V0KTogQSBwb2ludGVyIHRvIHN0b3JlIHRoZSBtYXhzaXplIGluCisgKiBAYXN5bmM6IChvdXQpOiBBIHBvaW50ZXIgdG8gc3RvcmUgdGhlIGFzeW5jLWZsYWcgaW4KKyAqCisgKiBHZXQgdGhlIGZvcm1hdCwgbWluc2l6ZSwgbWF4c2l6ZSBhbmQgYXN5bmMtZmxhZyBpbiB0aGUgYnVmZmVyc2l6ZSBldmVudC4KKyAqLwordm9pZAorZ3N0X2V2ZW50X3BhcnNlX2J1ZmZlcl9zaXplIChHc3RFdmVudCAqIGV2ZW50LCBHc3RGb3JtYXQgKiBmb3JtYXQsCisgICAgZ2ludDY0ICogbWluc2l6ZSwgZ2ludDY0ICogbWF4c2l6ZSwgZ2Jvb2xlYW4gKiBhc3luYykKK3sKKyAgY29uc3QgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0VWRU5UIChldmVudCkpOworICBnX3JldHVybl9pZl9mYWlsIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9CVUZGRVJTSVpFKTsKKworICBzdHJ1Y3R1cmUgPSBHU1RfRVZFTlRfU1RSVUNUVVJFIChldmVudCk7CisgIGlmIChmb3JtYXQpCisgICAgKmZvcm1hdCA9IChHc3RGb3JtYXQpCisgICAgICAgIGdfdmFsdWVfZ2V0X2VudW0gKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCisgICAgICAgICAgICBHU1RfUVVBUksgKEZPUk1BVCkpKTsKKyAgaWYgKG1pbnNpemUpCisgICAgKm1pbnNpemUgPQorICAgICAgICBnX3ZhbHVlX2dldF9pbnQ2NCAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgIEdTVF9RVUFSSyAoTUlOU0laRSkpKTsKKyAgaWYgKG1heHNpemUpCisgICAgKm1heHNpemUgPQorICAgICAgICBnX3ZhbHVlX2dldF9pbnQ2NCAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgIEdTVF9RVUFSSyAoTUFYU0laRSkpKTsKKyAgaWYgKGFzeW5jKQorICAgICphc3luYyA9CisgICAgICAgIGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCisgICAgICAgICAgICBHU1RfUVVBUksgKEFTWU5DKSkpOworfQorCisvKioKKyAqIGdzdF9ldmVudF9uZXdfcW9zOgorICogQHR5cGU6IHRoZSBRb1MgdHlwZQorICogQHByb3BvcnRpb246IHRoZSBwcm9wb3J0aW9uIG9mIHRoZSBxb3MgbWVzc2FnZQorICogQGRpZmY6IFRoZSB0aW1lIGRpZmZlcmVuY2Ugb2YgdGhlIGxhc3QgQ2xvY2sgc3luYworICogQHRpbWVzdGFtcDogVGhlIHRpbWVzdGFtcCBvZiB0aGUgYnVmZmVyCisgKgorICogQWxsb2NhdGUgYSBuZXcgcW9zIGV2ZW50IHdpdGggdGhlIGdpdmVuIHZhbHVlcy4KKyAqIFRoZSBRT1MgZXZlbnQgaXMgZ2VuZXJhdGVkIGluIGFuIGVsZW1lbnQgdGhhdCB3YW50cyBhbiB1cHN0cmVhbQorICogZWxlbWVudCB0byBlaXRoZXIgcmVkdWNlIG9yIGluY3JlYXNlIGl0cyByYXRlIGJlY2F1c2Ugb2YKKyAqIGhpZ2gvbG93IENQVSBsb2FkIG9yIG90aGVyIHJlc291cmNlIHVzYWdlIHN1Y2ggYXMgbmV0d29yayBwZXJmb3JtYW5jZSBvcgorICogdGhyb3R0bGluZy4gVHlwaWNhbGx5IHNpbmtzIGdlbmVyYXRlIHRoZXNlIGV2ZW50cyBmb3IgZWFjaCBidWZmZXIKKyAqIHRoZXkgcmVjZWl2ZS4KKyAqCisgKiBAdHlwZSBpbmRpY2F0ZXMgdGhlIHJlYXNvbiBmb3IgdGhlIFFvUyBldmVudC4gI0dTVF9RT1NfVFlQRV9PVkVSRkxPVyBpcworICogdXNlZCB3aGVuIGEgYnVmZmVyIGFycml2ZWQgaW4gdGltZSBvciB3aGVuIHRoZSBzaW5rIGNhbm5vdCBrZWVwIHVwIHdpdGgKKyAqIHRoZSB1cHN0cmVhbSBkYXRhcmF0ZS4gI0dTVF9RT1NfVFlQRV9VTkRFUkZMT1cgaXMgd2hlbiB0aGUgc2luayBpcyBub3QKKyAqIHJlY2VpdmluZyBidWZmZXJzIGZhc3QgZW5vdWdoIGFuZCB0aHVzIGhhcyB0byBkcm9wIGxhdGUgYnVmZmVycy4gCisgKiAjR1NUX1FPU19UWVBFX1RIUk9UVExFIGlzIHVzZWQgd2hlbiB0aGUgZGF0YXJhdGUgaXMgYXJ0aWZpY2lhbGx5IGxpbWl0ZWQKKyAqIGJ5IHRoZSBhcHBsaWNhdGlvbiwgZm9yIGV4YW1wbGUgdG8gcmVkdWNlIHBvd2VyIGNvbnN1bXB0aW9uLgorICoKKyAqIEBwcm9wb3J0aW9uIGluZGljYXRlcyB0aGUgcmVhbC10aW1lIHBlcmZvcm1hbmNlIG9mIHRoZSBzdHJlYW1pbmcgaW4gdGhlCisgKiBlbGVtZW50IHRoYXQgZ2VuZXJhdGVkIHRoZSBRb1MgZXZlbnQgKHVzdWFsbHkgdGhlIHNpbmspLiBUaGUgdmFsdWUgaXMKKyAqIGdlbmVyYWxseSBjb21wdXRlZCBiYXNlZCBvbiBtb3JlIGxvbmcgdGVybSBzdGF0aXN0aWNzIGFib3V0IHRoZSBzdHJlYW1zCisgKiB0aW1lc3RhbXBzIGNvbXBhcmVkIHRvIHRoZSBjbG9jay4KKyAqIEEgdmFsdWUgPCAxLjAgaW5kaWNhdGVzIHRoYXQgdGhlIHVwc3RyZWFtIGVsZW1lbnQgaXMgcHJvZHVjaW5nIGRhdGEgZmFzdGVyCisgKiB0aGFuIHJlYWwtdGltZS4gQSB2YWx1ZSA+IDEuMCBpbmRpY2F0ZXMgdGhhdCB0aGUgdXBzdHJlYW0gZWxlbWVudCBpcyBub3QKKyAqIHByb2R1Y2luZyBkYXRhIGZhc3QgZW5vdWdoLiAxLjAgaXMgdGhlIGlkZWFsIEBwcm9wb3J0aW9uIHZhbHVlLiBUaGUKKyAqIHByb3BvcnRpb24gdmFsdWUgY2FuIHNhZmVseSBiZSB1c2VkIHRvIGxvd2VyIG9yIGluY3JlYXNlIHRoZSBxdWFsaXR5IG9mCisgKiB0aGUgZWxlbWVudC4KKyAqCisgKiBAZGlmZiBpcyB0aGUgZGlmZmVyZW5jZSBhZ2FpbnN0IHRoZSBjbG9jayBpbiBydW5uaW5nIHRpbWUgb2YgdGhlIGxhc3QKKyAqIGJ1ZmZlciB0aGF0IGNhdXNlZCB0aGUgZWxlbWVudCB0byBnZW5lcmF0ZSB0aGUgUU9TIGV2ZW50LiBBIG5lZ2F0aXZlIHZhbHVlCisgKiBtZWFucyB0aGF0IHRoZSBidWZmZXIgd2l0aCBAdGltZXN0YW1wIGFycml2ZWQgaW4gdGltZS4gQSBwb3NpdGl2ZSB2YWx1ZQorICogaW5kaWNhdGVzIGhvdyBsYXRlIHRoZSBidWZmZXIgd2l0aCBAdGltZXN0YW1wIHdhcy4gV2hlbiB0aHJvdHRsaW5nIGlzCisgKiBlbmFibGVkLCBAZGlmZiB3aWxsIGJlIHNldCB0byB0aGUgcmVxdWVzdGVkIHRocm90dGxpbmcgaW50ZXJ2YWwuCisgKgorICogQHRpbWVzdGFtcCBpcyB0aGUgdGltZXN0YW1wIG9mIHRoZSBsYXN0IGJ1ZmZlciB0aGF0IGNhdXNlIHRoZSBlbGVtZW50CisgKiB0byBnZW5lcmF0ZSB0aGUgUU9TIGV2ZW50LiBJdCBpcyBleHByZXNzZWQgaW4gcnVubmluZyB0aW1lIGFuZCB0aHVzIGFuIGV2ZXIKKyAqIGluY3JlYXNpbmcgdmFsdWUuCisgKgorICogVGhlIHVwc3RyZWFtIGVsZW1lbnQgY2FuIHVzZSB0aGUgQGRpZmYgYW5kIEB0aW1lc3RhbXAgdmFsdWVzIHRvIGRlY2lkZQorICogd2hldGhlciB0byBwcm9jZXNzIG1vcmUgYnVmZmVycy4gRm9yIHBvc3NpdGl2ZSBAZGlmZiwgYWxsIGJ1ZmZlcnMgd2l0aAorICogdGltZXN0YW1wIDw9IEB0aW1lc3RhbXAgKyBAZGlmZiB3aWxsIGNlcnRhaW5seSBhcnJpdmUgbGF0ZSBpbiB0aGUgc2luaworICogYXMgd2VsbC4gQSAobmVnYXRpdmUpIEBkaWZmIHZhbHVlIHNvIHRoYXQgQHRpbWVzdGFtcCArIEBkaWZmIHdvdWxkIHlpZWxkIGEKKyAqIHJlc3VsdCBzbWFsbGVyIHRoYW4gMCBpcyBub3QgYWxsb3dlZC4KKyAqCisgKiBUaGUgYXBwbGljYXRpb24gY2FuIHVzZSBnZW5lcmFsIGV2ZW50IHByb2JlcyB0byBpbnRlcmNlcHQgdGhlIFFvUworICogZXZlbnQgYW5kIGltcGxlbWVudCBjdXN0b20gYXBwbGljYXRpb24gc3BlY2lmaWMgUW9TIGhhbmRsaW5nLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgUU9TIGV2ZW50LgorICovCitHc3RFdmVudCAqCitnc3RfZXZlbnRfbmV3X3FvcyAoR3N0UU9TVHlwZSB0eXBlLCBnZG91YmxlIHByb3BvcnRpb24sCisgICAgR3N0Q2xvY2tUaW1lRGlmZiBkaWZmLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKQoreworICBHc3RFdmVudCAqZXZlbnQ7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIC8qIGRpZmYgbXVzdCBiZSBwb3NpdGl2ZSBvciB0aW1lc3RhbXAgKyBkaWZmIG11c3QgYmUgcG9zaXRpdmUgKi8KKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRpZmYgPj0gMCB8fCAtZGlmZiA8PSB0aW1lc3RhbXAsIE5VTEwpOworCisgIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9FVkVOVCwKKyAgICAgICJjcmVhdGluZyBxb3MgdHlwZSAlZCwgcHJvcG9ydGlvbiAlbGYsIGRpZmYgJSIgR19HSU5UNjRfRk9STUFUCisgICAgICAiLCB0aW1lc3RhbXAgJSIgR1NUX1RJTUVfRk9STUFULCB0eXBlLCBwcm9wb3J0aW9uLAorICAgICAgZGlmZiwgR1NUX1RJTUVfQVJHUyAodGltZXN0YW1wKSk7CisKKyAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9pZF9uZXcgKEdTVF9RVUFSSyAoRVZFTlRfUU9TKSwKKyAgICAgIEdTVF9RVUFSSyAoVFlQRSksIEdTVF9UWVBFX1FPU19UWVBFLCB0eXBlLAorICAgICAgR1NUX1FVQVJLIChQUk9QT1JUSU9OKSwgR19UWVBFX0RPVUJMRSwgcHJvcG9ydGlvbiwKKyAgICAgIEdTVF9RVUFSSyAoRElGRiksIEdfVFlQRV9JTlQ2NCwgZGlmZiwKKyAgICAgIEdTVF9RVUFSSyAoVElNRVNUQU1QKSwgR19UWVBFX1VJTlQ2NCwgdGltZXN0YW1wLCBOVUxMKTsKKyAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX1FPUywgc3RydWN0dXJlKTsKKworICByZXR1cm4gZXZlbnQ7Cit9CisKKy8qKgorICogZ3N0X2V2ZW50X3BhcnNlX3FvczoKKyAqIEBldmVudDogVGhlIGV2ZW50IHRvIHF1ZXJ5CisgKiBAdHlwZTogKG91dCk6IEEgcG9pbnRlciB0byBzdG9yZSB0aGUgUW9TIHR5cGUgaW4KKyAqIEBwcm9wb3J0aW9uOiAob3V0KTogQSBwb2ludGVyIHRvIHN0b3JlIHRoZSBwcm9wb3J0aW9uIGluCisgKiBAZGlmZjogKG91dCk6IEEgcG9pbnRlciB0byBzdG9yZSB0aGUgZGlmZiBpbgorICogQHRpbWVzdGFtcDogKG91dCk6IEEgcG9pbnRlciB0byBzdG9yZSB0aGUgdGltZXN0YW1wIGluCisgKgorICogR2V0IHRoZSB0eXBlLCBwcm9wb3J0aW9uLCBkaWZmIGFuZCB0aW1lc3RhbXAgaW4gdGhlIHFvcyBldmVudC4gU2VlCisgKiBnc3RfZXZlbnRfbmV3X3FvcygpIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkaWZmZXJlbnQgUW9TIHZhbHVlcy4KKyAqLwordm9pZAorZ3N0X2V2ZW50X3BhcnNlX3FvcyAoR3N0RXZlbnQgKiBldmVudCwgR3N0UU9TVHlwZSAqIHR5cGUsCisgICAgZ2RvdWJsZSAqIHByb3BvcnRpb24sIEdzdENsb2NrVGltZURpZmYgKiBkaWZmLCBHc3RDbG9ja1RpbWUgKiB0aW1lc3RhbXApCit7CisgIGNvbnN0IEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FVkVOVCAoZXZlbnQpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfUU9TKTsKKworICBzdHJ1Y3R1cmUgPSBHU1RfRVZFTlRfU1RSVUNUVVJFIChldmVudCk7CisgIGlmICh0eXBlKQorICAgICp0eXBlID0gKEdzdFFPU1R5cGUpCisgICAgICAgIGdfdmFsdWVfZ2V0X2VudW0gKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCisgICAgICAgICAgICBHU1RfUVVBUksgKFRZUEUpKSk7CisgIGlmIChwcm9wb3J0aW9uKQorICAgICpwcm9wb3J0aW9uID0KKyAgICAgICAgZ192YWx1ZV9nZXRfZG91YmxlIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAorICAgICAgICAgICAgR1NUX1FVQVJLIChQUk9QT1JUSU9OKSkpOworICBpZiAoZGlmZikKKyAgICAqZGlmZiA9CisgICAgICAgIGdfdmFsdWVfZ2V0X2ludDY0IChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAorICAgICAgICAgICAgR1NUX1FVQVJLIChESUZGKSkpOworICBpZiAodGltZXN0YW1wKQorICAgICp0aW1lc3RhbXAgPQorICAgICAgICBnX3ZhbHVlX2dldF91aW50NjQgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCisgICAgICAgICAgICBHU1RfUVVBUksgKFRJTUVTVEFNUCkpKTsKK30KKworLyoqCisgKiBnc3RfZXZlbnRfbmV3X3NlZWs6CisgKiBAcmF0ZTogVGhlIG5ldyBwbGF5YmFjayByYXRlCisgKiBAZm9ybWF0OiBUaGUgZm9ybWF0IG9mIHRoZSBzZWVrIHZhbHVlcworICogQGZsYWdzOiBUaGUgb3B0aW9uYWwgc2VlayBmbGFncworICogQHN0YXJ0X3R5cGU6IFRoZSB0eXBlIGFuZCBmbGFncyBmb3IgdGhlIG5ldyBzdGFydCBwb3NpdGlvbgorICogQHN0YXJ0OiBUaGUgdmFsdWUgb2YgdGhlIG5ldyBzdGFydCBwb3NpdGlvbgorICogQHN0b3BfdHlwZTogVGhlIHR5cGUgYW5kIGZsYWdzIGZvciB0aGUgbmV3IHN0b3AgcG9zaXRpb24KKyAqIEBzdG9wOiBUaGUgdmFsdWUgb2YgdGhlIG5ldyBzdG9wIHBvc2l0aW9uCisgKgorICogQWxsb2NhdGUgYSBuZXcgc2VlayBldmVudCB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLgorICoKKyAqIFRoZSBzZWVrIGV2ZW50IGNvbmZpZ3VyZXMgcGxheWJhY2sgb2YgdGhlIHBpcGVsaW5lIGJldHdlZW4gQHN0YXJ0IHRvIEBzdG9wCisgKiBhdCB0aGUgc3BlZWQgZ2l2ZW4gaW4gQHJhdGUsIGFsc28gY2FsbGVkIGEgcGxheWJhY2sgc2VnbWVudC4KKyAqIFRoZSBAc3RhcnQgYW5kIEBzdG9wIHZhbHVlcyBhcmUgZXhwcmVzc2VkIGluIEBmb3JtYXQuCisgKgorICogQSBAcmF0ZSBvZiAxLjAgbWVhbnMgbm9ybWFsIHBsYXliYWNrIHJhdGUsIDIuMCBtZWFucyBkb3VibGUgc3BlZWQuCisgKiBOZWdhdGl2ZXMgdmFsdWVzIG1lYW5zIGJhY2t3YXJkcyBwbGF5YmFjay4gQSB2YWx1ZSBvZiAwLjAgZm9yIHRoZQorICogcmF0ZSBpcyBub3QgYWxsb3dlZCBhbmQgc2hvdWxkIGJlIGFjY29tcGxpc2hlZCBpbnN0ZWFkIGJ5IFBBVVNJTkcgdGhlCisgKiBwaXBlbGluZS4KKyAqCisgKiBBIHBpcGVsaW5lIGhhcyBhIGRlZmF1bHQgcGxheWJhY2sgc2VnbWVudCBjb25maWd1cmVkIHdpdGggYSBzdGFydAorICogcG9zaXRpb24gb2YgMCwgYSBzdG9wIHBvc2l0aW9uIG9mIC0xIGFuZCBhIHJhdGUgb2YgMS4wLiBUaGUgY3VycmVudGx5CisgKiBjb25maWd1cmVkIHBsYXliYWNrIHNlZ21lbnQgY2FuIGJlIHF1ZXJpZWQgd2l0aCAjR1NUX1FVRVJZX1NFR01FTlQuIAorICoKKyAqIEBzdGFydF90eXBlIGFuZCBAc3RvcF90eXBlIHNwZWNpZnkgaG93IHRvIGFkanVzdCB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQgCisgKiBzdGFydCBhbmQgc3RvcCBmaWVsZHMgaW4gcGxheWJhY2sgc2VnbWVudC4gQWRqdXN0bWVudHMgY2FuIGJlIG1hZGUgcmVsYXRpdmUKKyAqIG9yIGFic29sdXRlIHRvIHRoZSBsYXN0IGNvbmZpZ3VyZWQgdmFsdWVzLiBBIHR5cGUgb2YgI0dTVF9TRUVLX1RZUEVfTk9ORQorICogbWVhbnMgdGhhdCB0aGUgcG9zaXRpb24gc2hvdWxkIG5vdCBiZSB1cGRhdGVkLgorICoKKyAqIFdoZW4gdGhlIHJhdGUgaXMgcG9zaXRpdmUgYW5kIEBzdGFydCBoYXMgYmVlbiB1cGRhdGVkLCBwbGF5YmFjayB3aWxsIHN0YXJ0CisgKiBmcm9tIHRoZSBuZXdseSBjb25maWd1cmVkIHN0YXJ0IHBvc2l0aW9uLiAKKyAqCisgKiBGb3IgbmVnYXRpdmUgcmF0ZXMsIHBsYXliYWNrIHdpbGwgc3RhcnQgZnJvbSB0aGUgbmV3bHkgY29uZmlndXJlZCBzdG9wCisgKiBwb3NpdGlvbiAoaWYgYW55KS4gSWYgdGhlIHN0b3AgcG9zaXRpb24gaWYgdXBkYXRlZCwgaXQgbXVzdCBiZSBkaWZmZXJlbnQgZnJvbQorICogLTEgZm9yIG5lZ2F0aXZlIHJhdGVzLgorICoKKyAqIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBzZWVrIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uLCB0byBkbworICogdGhpcywgUEFVU0UgdGhlIHBpcGVsaW5lLCBxdWVyeSB0aGUgY3VycmVudCBwbGF5YmFjayBwb3NpdGlvbiB3aXRoCisgKiAjR1NUX1FVRVJZX1BPU0lUSU9OIGFuZCB1cGRhdGUgdGhlIHBsYXliYWNrIHNlZ21lbnQgY3VycmVudCBwb3NpdGlvbiB3aXRoIGEKKyAqICNHU1RfU0VFS19UWVBFX1NFVCB0byB0aGUgZGVzaXJlZCBwb3NpdGlvbi4gCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyBzZWVrIGV2ZW50LgorICovCitHc3RFdmVudCAqCitnc3RfZXZlbnRfbmV3X3NlZWsgKGdkb3VibGUgcmF0ZSwgR3N0Rm9ybWF0IGZvcm1hdCwgR3N0U2Vla0ZsYWdzIGZsYWdzLAorICAgIEdzdFNlZWtUeXBlIHN0YXJ0X3R5cGUsIGdpbnQ2NCBzdGFydCwgR3N0U2Vla1R5cGUgc3RvcF90eXBlLCBnaW50NjQgc3RvcCkKK3sKKyAgR3N0RXZlbnQgKmV2ZW50OworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAocmF0ZSAhPSAwLjAsIE5VTEwpOworCisgIGlmIChmb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKSB7CisgICAgR1NUX0NBVF9JTkZPIChHU1RfQ0FUX0VWRU5ULAorICAgICAgICAiY3JlYXRpbmcgc2VlayByYXRlICVsZiwgZm9ybWF0IFRJTUUsIGZsYWdzICVkLCAiCisgICAgICAgICJzdGFydF90eXBlICVkLCBzdGFydCAlIiBHU1RfVElNRV9GT1JNQVQgIiwgIgorICAgICAgICAic3RvcF90eXBlICVkLCBzdG9wICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgICAgcmF0ZSwgZmxhZ3MsIHN0YXJ0X3R5cGUsIEdTVF9USU1FX0FSR1MgKHN0YXJ0KSwKKyAgICAgICAgc3RvcF90eXBlLCBHU1RfVElNRV9BUkdTIChzdG9wKSk7CisgIH0gZWxzZSB7CisgICAgR1NUX0NBVF9JTkZPIChHU1RfQ0FUX0VWRU5ULAorICAgICAgICAiY3JlYXRpbmcgc2VlayByYXRlICVsZiwgZm9ybWF0ICVzLCBmbGFncyAlZCwgIgorICAgICAgICAic3RhcnRfdHlwZSAlZCwgc3RhcnQgJSIgR19HSU5UNjRfRk9STUFUICIsICIKKyAgICAgICAgInN0b3BfdHlwZSAlZCwgc3RvcCAlIiBHX0dJTlQ2NF9GT1JNQVQsCisgICAgICAgIHJhdGUsIGdzdF9mb3JtYXRfZ2V0X25hbWUgKGZvcm1hdCksIGZsYWdzLCBzdGFydF90eXBlLCBzdGFydCwgc3RvcF90eXBlLAorICAgICAgICBzdG9wKTsKKyAgfQorCisgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfbmV3IChHU1RfUVVBUksgKEVWRU5UX1NFRUspLAorICAgICAgR1NUX1FVQVJLIChSQVRFKSwgR19UWVBFX0RPVUJMRSwgcmF0ZSwKKyAgICAgIEdTVF9RVUFSSyAoRk9STUFUKSwgR1NUX1RZUEVfRk9STUFULCBmb3JtYXQsCisgICAgICBHU1RfUVVBUksgKEZMQUdTKSwgR1NUX1RZUEVfU0VFS19GTEFHUywgZmxhZ3MsCisgICAgICBHU1RfUVVBUksgKENVUl9UWVBFKSwgR1NUX1RZUEVfU0VFS19UWVBFLCBzdGFydF90eXBlLAorICAgICAgR1NUX1FVQVJLIChDVVIpLCBHX1RZUEVfSU5UNjQsIHN0YXJ0LAorICAgICAgR1NUX1FVQVJLIChTVE9QX1RZUEUpLCBHU1RfVFlQRV9TRUVLX1RZUEUsIHN0b3BfdHlwZSwKKyAgICAgIEdTVF9RVUFSSyAoU1RPUCksIEdfVFlQRV9JTlQ2NCwgc3RvcCwgTlVMTCk7CisgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19jdXN0b20gKEdTVF9FVkVOVF9TRUVLLCBzdHJ1Y3R1cmUpOworCisgIHJldHVybiBldmVudDsKK30KKworLyoqCisgKiBnc3RfZXZlbnRfcGFyc2Vfc2VlazoKKyAqIEBldmVudDogYSBzZWVrIGV2ZW50CisgKiBAcmF0ZTogKG91dCk6IHJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIHJhdGUKKyAqIEBmb3JtYXQ6IChvdXQpOiByZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBzdHJlYW0gZm9ybWF0CisgKiBAZmxhZ3M6ICAob3V0KTogcmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgI0dzdFNlZWtGbGFncworICogQHN0YXJ0X3R5cGU6IChvdXQpOiByZXN1bHQgbG9jYXRpb24gZm9yIHRoZSAjR3N0U2Vla1R5cGUgb2YgdGhlIHN0YXJ0IHBvc2l0aW9uCisgKiBAc3RhcnQ6IChvdXQpOiByZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBzdGFydCBwb3N0aW9uIGV4cHJlc3NlZCBpbiBAZm9ybWF0CisgKiBAc3RvcF90eXBlOiAgKG91dCk6IHJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlICNHc3RTZWVrVHlwZSBvZiB0aGUgc3RvcCBwb3NpdGlvbgorICogQHN0b3A6IChvdXQpOiByZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBzdG9wIHBvc3Rpb24gZXhwcmVzc2VkIGluIEBmb3JtYXQKKyAqCisgKiBQYXJzZXMgYSBzZWVrIEBldmVudCBhbmQgc3RvcmVzIHRoZSByZXN1bHRzIGluIHRoZSBnaXZlbiByZXN1bHQgbG9jYXRpb25zLgorICovCit2b2lkCitnc3RfZXZlbnRfcGFyc2Vfc2VlayAoR3N0RXZlbnQgKiBldmVudCwgZ2RvdWJsZSAqIHJhdGUsCisgICAgR3N0Rm9ybWF0ICogZm9ybWF0LCBHc3RTZWVrRmxhZ3MgKiBmbGFncywgR3N0U2Vla1R5cGUgKiBzdGFydF90eXBlLAorICAgIGdpbnQ2NCAqIHN0YXJ0LCBHc3RTZWVrVHlwZSAqIHN0b3BfdHlwZSwgZ2ludDY0ICogc3RvcCkKK3sKKyAgY29uc3QgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0VWRU5UIChldmVudCkpOworICBnX3JldHVybl9pZl9mYWlsIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9TRUVLKTsKKworICBzdHJ1Y3R1cmUgPSBHU1RfRVZFTlRfU1RSVUNUVVJFIChldmVudCk7CisgIGlmIChyYXRlKQorICAgICpyYXRlID0KKyAgICAgICAgZ192YWx1ZV9nZXRfZG91YmxlIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAorICAgICAgICAgICAgR1NUX1FVQVJLIChSQVRFKSkpOworICBpZiAoZm9ybWF0KQorICAgICpmb3JtYXQgPSAoR3N0Rm9ybWF0KQorICAgICAgICBnX3ZhbHVlX2dldF9lbnVtIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAorICAgICAgICAgICAgR1NUX1FVQVJLIChGT1JNQVQpKSk7CisgIGlmIChmbGFncykKKyAgICAqZmxhZ3MgPSAoR3N0U2Vla0ZsYWdzKQorICAgICAgICBnX3ZhbHVlX2dldF9mbGFncyAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgIEdTVF9RVUFSSyAoRkxBR1MpKSk7CisgIGlmIChzdGFydF90eXBlKQorICAgICpzdGFydF90eXBlID0gKEdzdFNlZWtUeXBlKQorICAgICAgICBnX3ZhbHVlX2dldF9lbnVtIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAorICAgICAgICAgICAgR1NUX1FVQVJLIChDVVJfVFlQRSkpKTsKKyAgaWYgKHN0YXJ0KQorICAgICpzdGFydCA9CisgICAgICAgIGdfdmFsdWVfZ2V0X2ludDY0IChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAorICAgICAgICAgICAgR1NUX1FVQVJLIChDVVIpKSk7CisgIGlmIChzdG9wX3R5cGUpCisgICAgKnN0b3BfdHlwZSA9IChHc3RTZWVrVHlwZSkKKyAgICAgICAgZ192YWx1ZV9nZXRfZW51bSAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgIEdTVF9RVUFSSyAoU1RPUF9UWVBFKSkpOworICBpZiAoc3RvcCkKKyAgICAqc3RvcCA9CisgICAgICAgIGdfdmFsdWVfZ2V0X2ludDY0IChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAorICAgICAgICAgICAgR1NUX1FVQVJLIChTVE9QKSkpOworfQorCisvKioKKyAqIGdzdF9ldmVudF9uZXdfbmF2aWdhdGlvbjoKKyAqIEBzdHJ1Y3R1cmU6ICh0cmFuc2ZlciBmdWxsKTogZGVzY3JpcHRpb24gb2YgdGhlIGV2ZW50LiBUaGUgZXZlbnQgd2lsbCB0YWtlCisgKiAgICAgb3duZXJzaGlwIG9mIHRoZSBzdHJ1Y3R1cmUuCisgKgorICogQ3JlYXRlIGEgbmV3IG5hdmlnYXRpb24gZXZlbnQgZnJvbSB0aGUgZ2l2ZW4gZGVzY3JpcHRpb24uCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0RXZlbnQKKyAqLworR3N0RXZlbnQgKgorZ3N0X2V2ZW50X25ld19uYXZpZ2F0aW9uIChHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCwgTlVMTCk7CisKKyAgcmV0dXJuIGdzdF9ldmVudF9uZXdfY3VzdG9tIChHU1RfRVZFTlRfTkFWSUdBVElPTiwgc3RydWN0dXJlKTsKK30KKworLyoqCisgKiBnc3RfZXZlbnRfbmV3X2xhdGVuY3k6CisgKiBAbGF0ZW5jeTogdGhlIG5ldyBsYXRlbmN5IHZhbHVlCisgKgorICogQ3JlYXRlIGEgbmV3IGxhdGVuY3kgZXZlbnQuIFRoZSBldmVudCBpcyBzZW50IHVwc3RyZWFtIGZyb20gdGhlIHNpbmtzIGFuZAorICogbm90aWZpZXMgZWxlbWVudHMgdGhhdCB0aGV5IHNob3VsZCBhZGQgYW4gYWRkaXRpb25hbCBAbGF0ZW5jeSB0byB0aGUKKyAqIHJ1bm5pbmcgdGltZSBiZWZvcmUgc3luY2hyb25pc2luZyBhZ2FpbnN0IHRoZSBjbG9jay4KKyAqCisgKiBUaGUgbGF0ZW5jeSBpcyBtb3N0bHkgdXNlZCBpbiBsaXZlIHNpbmtzIGFuZCBpcyBhbHdheXMgZXhwcmVzc2VkIGluCisgKiB0aGUgdGltZSBmb3JtYXQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0RXZlbnQKKyAqCisgKiBTaW5jZTogMC4xMC4xMgorICovCitHc3RFdmVudCAqCitnc3RfZXZlbnRfbmV3X2xhdGVuY3kgKEdzdENsb2NrVGltZSBsYXRlbmN5KQoreworICBHc3RFdmVudCAqZXZlbnQ7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9FVkVOVCwKKyAgICAgICJjcmVhdGluZyBsYXRlbmN5IGV2ZW50ICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAobGF0ZW5jeSkpOworCisgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfbmV3IChHU1RfUVVBUksgKEVWRU5UX0xBVEVOQ1kpLAorICAgICAgR1NUX1FVQVJLIChMQVRFTkNZKSwgR19UWVBFX1VJTlQ2NCwgbGF0ZW5jeSwgTlVMTCk7CisgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19jdXN0b20gKEdTVF9FVkVOVF9MQVRFTkNZLCBzdHJ1Y3R1cmUpOworCisgIHJldHVybiBldmVudDsKK30KKworLyoqCisgKiBnc3RfZXZlbnRfcGFyc2VfbGF0ZW5jeToKKyAqIEBldmVudDogVGhlIGV2ZW50IHRvIHF1ZXJ5CisgKiBAbGF0ZW5jeTogKG91dCk6IEEgcG9pbnRlciB0byBzdG9yZSB0aGUgbGF0ZW5jeSBpbi4KKyAqCisgKiBHZXQgdGhlIGxhdGVuY3kgaW4gdGhlIGxhdGVuY3kgZXZlbnQuCisgKgorICogU2luY2U6IDAuMTAuMTIKKyAqLwordm9pZAorZ3N0X2V2ZW50X3BhcnNlX2xhdGVuY3kgKEdzdEV2ZW50ICogZXZlbnQsIEdzdENsb2NrVGltZSAqIGxhdGVuY3kpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FVkVOVCAoZXZlbnQpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfTEFURU5DWSk7CisKKyAgaWYgKGxhdGVuY3kpCisgICAgKmxhdGVuY3kgPQorICAgICAgICBnX3ZhbHVlX2dldF91aW50NjQgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChHU1RfRVZFTlRfU1RSVUNUVVJFCisgICAgICAgICAgICAoZXZlbnQpLCBHU1RfUVVBUksgKExBVEVOQ1kpKSk7Cit9CisKKy8qKgorICogZ3N0X2V2ZW50X25ld19zdGVwOgorICogQGZvcm1hdDogdGhlIGZvcm1hdCBvZiBAYW1vdW50CisgKiBAYW1vdW50OiB0aGUgYW1vdW50IG9mIGRhdGEgdG8gc3RlcAorICogQHJhdGU6IHRoZSBzdGVwIHJhdGUKKyAqIEBmbHVzaDogZmx1c2hpbmcgc3RlcHMKKyAqIEBpbnRlcm1lZGlhdGU6IGludGVybWVkaWF0ZSBzdGVwcworICoKKyAqIENyZWF0ZSBhIG5ldyBzdGVwIGV2ZW50LiBUaGUgcHVycG9zZSBvZiB0aGUgc3RlcCBldmVudCBpcyB0byBpbnN0cnVjdCBhIHNpbmsKKyAqIHRvIHNraXAgQGFtb3VudCAoZXhwcmVzc2VkIGluIEBmb3JtYXQpIG9mIG1lZGlhLiBJdCBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQKKyAqIHN0ZXBwaW5nIHRocm91Z2ggdGhlIHZpZGVvIGZyYW1lIGJ5IGZyYW1lIG9yIGZvciBkb2luZyBmYXN0IHRyaWNrIG1vZGVzLgorICoKKyAqIEEgcmF0ZSBvZiA8PSAwLjAgaXMgbm90IGFsbG93ZWQsIHBhdXNlIHRoZSBwaXBlbGluZSBvciByZXZlcnNlIHRoZSBwbGF5YmFjaworICogZGlyZWN0aW9uIG9mIHRoZSBwaXBlbGluZSB0byBnZXQgdGhlIHNhbWUgZWZmZWN0LgorICoKKyAqIFRoZSBAZmx1c2ggZmxhZyB3aWxsIGNsZWFyIGFueSBwZW5kaW5nIGRhdGEgaW4gdGhlIHBpcGVsaW5lIGJlZm9yZSBzdGFydGluZworICogdGhlIHN0ZXAgb3BlcmF0aW9uLgorICoKKyAqIFRoZSBAaW50ZXJtZWRpYXRlIGZsYWcgaW5zdHJ1Y3RzIHRoZSBwaXBlbGluZSB0aGF0IHRoaXMgc3RlcCBvcGVyYXRpb24gaXMKKyAqIHBhcnQgb2YgYSBsYXJnZXIgc3RlcCBvcGVyYXRpb24uCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0RXZlbnQKKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICovCitHc3RFdmVudCAqCitnc3RfZXZlbnRfbmV3X3N0ZXAgKEdzdEZvcm1hdCBmb3JtYXQsIGd1aW50NjQgYW1vdW50LCBnZG91YmxlIHJhdGUsCisgICAgZ2Jvb2xlYW4gZmx1c2gsIGdib29sZWFuIGludGVybWVkaWF0ZSkKK3sKKyAgR3N0RXZlbnQgKmV2ZW50OworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAocmF0ZSA+IDAuMCwgTlVMTCk7CisKKyAgR1NUX0NBVF9JTkZPIChHU1RfQ0FUX0VWRU5ULCAiY3JlYXRpbmcgc3RlcCBldmVudCIpOworCisgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfbmV3IChHU1RfUVVBUksgKEVWRU5UX1NURVApLAorICAgICAgR1NUX1FVQVJLIChGT1JNQVQpLCBHU1RfVFlQRV9GT1JNQVQsIGZvcm1hdCwKKyAgICAgIEdTVF9RVUFSSyAoQU1PVU5UKSwgR19UWVBFX1VJTlQ2NCwgYW1vdW50LAorICAgICAgR1NUX1FVQVJLIChSQVRFKSwgR19UWVBFX0RPVUJMRSwgcmF0ZSwKKyAgICAgIEdTVF9RVUFSSyAoRkxVU0gpLCBHX1RZUEVfQk9PTEVBTiwgZmx1c2gsCisgICAgICBHU1RfUVVBUksgKElOVEVSTUVESUFURSksIEdfVFlQRV9CT09MRUFOLCBpbnRlcm1lZGlhdGUsIE5VTEwpOworICBldmVudCA9IGdzdF9ldmVudF9uZXdfY3VzdG9tIChHU1RfRVZFTlRfU1RFUCwgc3RydWN0dXJlKTsKKworICByZXR1cm4gZXZlbnQ7Cit9CisKKy8qKgorICogZ3N0X2V2ZW50X3BhcnNlX3N0ZXA6CisgKiBAZXZlbnQ6IFRoZSBldmVudCB0byBxdWVyeQorICogQGZvcm1hdDogKG91dCkgKGFsbG93LW5vbmUpOiBhIHBvaW50ZXIgdG8gc3RvcmUgdGhlIGZvcm1hdCBpbgorICogQGFtb3VudDogKG91dCkgKGFsbG93LW5vbmUpOiBhIHBvaW50ZXIgdG8gc3RvcmUgdGhlIGFtb3VudCBpbgorICogQHJhdGU6IChvdXQpIChhbGxvdy1ub25lKTogYSBwb2ludGVyIHRvIHN0b3JlIHRoZSByYXRlIGluCisgKiBAZmx1c2g6IChvdXQpIChhbGxvdy1ub25lKTogYSBwb2ludGVyIHRvIHN0b3JlIHRoZSBmbHVzaCBib29sZWFuIGluCisgKiBAaW50ZXJtZWRpYXRlOiAob3V0KSAoYWxsb3ctbm9uZSk6IGEgcG9pbnRlciB0byBzdG9yZSB0aGUgaW50ZXJtZWRpYXRlCisgKiAgICAgYm9vbGVhbiBpbgorICoKKyAqIFBhcnNlIHRoZSBzdGVwIGV2ZW50LgorICoKKyAqIFNpbmNlOiAwLjEwLjI0CisgKi8KK3ZvaWQKK2dzdF9ldmVudF9wYXJzZV9zdGVwIChHc3RFdmVudCAqIGV2ZW50LCBHc3RGb3JtYXQgKiBmb3JtYXQsIGd1aW50NjQgKiBhbW91bnQsCisgICAgZ2RvdWJsZSAqIHJhdGUsIGdib29sZWFuICogZmx1c2gsIGdib29sZWFuICogaW50ZXJtZWRpYXRlKQoreworICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRVZFTlQgKGV2ZW50KSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX1NURVApOworCisgIHN0cnVjdHVyZSA9IEdTVF9FVkVOVF9TVFJVQ1RVUkUgKGV2ZW50KTsKKyAgaWYgKGZvcm1hdCkKKyAgICAqZm9ybWF0ID0KKyAgICAgICAgKEdzdEZvcm1hdCkgZ192YWx1ZV9nZXRfZW51bSAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgIEdTVF9RVUFSSyAoRk9STUFUKSkpOworICBpZiAoYW1vdW50KQorICAgICphbW91bnQgPSBnX3ZhbHVlX2dldF91aW50NjQgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCisgICAgICAgICAgICBHU1RfUVVBUksgKEFNT1VOVCkpKTsKKyAgaWYgKHJhdGUpCisgICAgKnJhdGUgPSBnX3ZhbHVlX2dldF9kb3VibGUgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCisgICAgICAgICAgICBHU1RfUVVBUksgKFJBVEUpKSk7CisgIGlmIChmbHVzaCkKKyAgICAqZmx1c2ggPSBnX3ZhbHVlX2dldF9ib29sZWFuIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAorICAgICAgICAgICAgR1NUX1FVQVJLIChGTFVTSCkpKTsKKyAgaWYgKGludGVybWVkaWF0ZSkKKyAgICAqaW50ZXJtZWRpYXRlID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgIEdTVF9RVUFSSyAoSU5URVJNRURJQVRFKSkpOworfQorCisvKioKKyAqIGdzdF9ldmVudF9uZXdfcmVjb25maWd1cmU6CisKKyAqIENyZWF0ZSBhIG5ldyByZWNvbmZpZ3VyZSBldmVudC4gVGhlIHB1cnBvc2Ugb2YgdGhlIHJlY29uZmluZ3VyZSBldmVudCBpcworICogdG8gdHJhdmVsIHVwc3RyZWFtIGFuZCBtYWtlIGVsZW1lbnRzIHJlbmVnb3RpYXRlIHRoZWlyIGNhcHMgb3IgcmVjb25maWd1cmUKKyAqIHRoZWlyIGJ1ZmZlciBwb29scy4gVGhpcyBpcyB1c2VmdWwgd2hlbiBjaGFuZ2luZyBwcm9wZXJ0aWVzIG9uIGVsZW1lbnRzCisgKiBvciBjaGFuZ2luZyB0aGUgdG9wb2xvZ3kgb2YgdGhlIHBpcGVsaW5lLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdEV2ZW50CisgKgorICogU2luY2U6IDAuMTEuMAorICovCitHc3RFdmVudCAqCitnc3RfZXZlbnRfbmV3X3JlY29uZmlndXJlICh2b2lkKQoreworICBHc3RFdmVudCAqZXZlbnQ7CisKKyAgR1NUX0NBVF9JTkZPIChHU1RfQ0FUX0VWRU5ULCAiY3JlYXRpbmcgcmVjb25maWd1cmUgZXZlbnQiKTsKKworICBldmVudCA9IGdzdF9ldmVudF9uZXdfY3VzdG9tIChHU1RfRVZFTlRfUkVDT05GSUdVUkUsIE5VTEwpOworCisgIHJldHVybiBldmVudDsKK30KKworLyoqCisgKiBnc3RfZXZlbnRfbmV3X3NpbmtfbWVzc2FnZToKKyAqIEBtc2c6ICh0cmFuc2ZlciBub25lKTogdGhlICNHc3RNZXNzYWdlIHRvIGJlIHBvc3RlZAorICoKKyAqIENyZWF0ZSBhIG5ldyBzaW5rLW1lc3NhZ2UgZXZlbnQuIFRoZSBwdXJwb3NlIG9mIHRoZSBzaW5rLW1lc3NhZ2UgZXZlbnQgaXMKKyAqIHRvIGluc3RydWN0IGEgc2luayB0byBwb3N0IHRoZSBtZXNzYWdlIGNvbnRhaW5lZCBpbiB0aGUgZXZlbnQgc3luY2hyb25pemVkCisgKiB3aXRoIHRoZSBzdHJlYW0uCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0RXZlbnQKKyAqCisgKiBTaW5jZTogMC4xMC4yNgorICovCisvKiBGSVhNRSAwLjExOiB0YWtlIG93bmVyc2hpcCBvZiBtc2cgZm9yIGNvbnNpc3RlbmN5PyAqLworR3N0RXZlbnQgKgorZ3N0X2V2ZW50X25ld19zaW5rX21lc3NhZ2UgKEdzdE1lc3NhZ2UgKiBtc2cpCit7CisgIEdzdEV2ZW50ICpldmVudDsKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG1zZyAhPSBOVUxMLCBOVUxMKTsKKworICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfRVZFTlQsICJjcmVhdGluZyBzaW5rLW1lc3NhZ2UgZXZlbnQiKTsKKworICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX2lkX25ldyAoR1NUX1FVQVJLIChFVkVOVF9TSU5LX01FU1NBR0UpLAorICAgICAgR1NUX1FVQVJLIChNRVNTQUdFKSwgR1NUX1RZUEVfTUVTU0FHRSwgbXNnLCBOVUxMKTsKKyAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX1NJTktfTUVTU0FHRSwgc3RydWN0dXJlKTsKKworICByZXR1cm4gZXZlbnQ7Cit9CisKKy8qKgorICogZ3N0X2V2ZW50X3BhcnNlX3NpbmtfbWVzc2FnZToKKyAqIEBldmVudDogVGhlIGV2ZW50IHRvIHF1ZXJ5CisgKiBAbXNnOiAob3V0KSAodHJhbnNmZXIgZnVsbCk6IGEgcG9pbnRlciB0byBzdG9yZSB0aGUgI0dzdE1lc3NhZ2UgaW4uCisgKgorICogUGFyc2UgdGhlIHNpbmstbWVzc2FnZSBldmVudC4gVW5yZWYgQG1zZyBhZnRlciB1c2FnZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yNgorICovCit2b2lkCitnc3RfZXZlbnRfcGFyc2Vfc2lua19tZXNzYWdlIChHc3RFdmVudCAqIGV2ZW50LCBHc3RNZXNzYWdlICoqIG1zZykKK3sKKyAgY29uc3QgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0VWRU5UIChldmVudCkpOworICBnX3JldHVybl9pZl9mYWlsIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9TSU5LX01FU1NBR0UpOworCisgIHN0cnVjdHVyZSA9IEdTVF9FVkVOVF9TVFJVQ1RVUkUgKGV2ZW50KTsKKyAgaWYgKG1zZykKKyAgICAqbXNnID0KKyAgICAgICAgR1NUX01FU1NBR0UgKGdfdmFsdWVfZHVwX2JveGVkIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZQorICAgICAgICAgICAgKHN0cnVjdHVyZSwgR1NUX1FVQVJLIChNRVNTQUdFKSkpKTsKK30KZGlmZiAtLWdpdCBhL2dzdC9nc3RldmVudC5oIGIvZ3N0L2dzdGV2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUwMTNiYQotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RldmVudC5oCkBAIC0wLDAgKzEsNDk3IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY2hlbGxvLmJlPgorICogICAgICAgICAgICAgICAgICAgIDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KKyAqCisgKiBnc3RldmVudC5oOiBIZWFkZXIgZm9yIEdzdEV2ZW50IHN1YnN5c3RlbQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworI2lmbmRlZiBfX0dTVF9FVkVOVF9IX18KKyNkZWZpbmUgX19HU1RfRVZFTlRfSF9fCisKK3R5cGVkZWYgc3RydWN0IF9Hc3RFdmVudCBHc3RFdmVudDsKKworLyoqCisgKiBHc3RFdmVudFR5cGVGbGFnczoKKyAqIEBHU1RfRVZFTlRfVFlQRV9VUFNUUkVBTTogICBTZXQgaWYgdGhlIGV2ZW50IGNhbiB0cmF2ZWwgdXBzdHJlYW0uCisgKiBAR1NUX0VWRU5UX1RZUEVfRE9XTlNUUkVBTTogU2V0IGlmIHRoZSBldmVudCBjYW4gdHJhdmVsIGRvd25zdHJlYW0uCisgKiBAR1NUX0VWRU5UX1RZUEVfU0VSSUFMSVpFRDogU2V0IGlmIHRoZSBldmVudCBzaG91bGQgYmUgc2VyaWFsaXplZCB3aXRoIGRhdGEKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG93LgorICogQEdTVF9FVkVOVF9UWVBFX1NUSUNLWTogICAgIFNldCBpZiB0aGUgZXZlbnQgaXMgc3RpY2t5IG9uIHRoZSBwYWRzLgorICoKKyAqICNHc3RFdmVudFR5cGVGbGFncyBpbmRpY2F0ZSB0aGUgYXNwZWN0cyBvZiB0aGUgZGlmZmVyZW50ICNHc3RFdmVudFR5cGUKKyAqIHZhbHVlcy4gWW91IGNhbiBnZXQgdGhlIHR5cGUgZmxhZ3Mgb2YgYSAjR3N0RXZlbnRUeXBlIHdpdGggdGhlCisgKiBnc3RfZXZlbnRfdHlwZV9nZXRfZmxhZ3MoKSBmdW5jdGlvbi4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgR1NUX0VWRU5UX1RZUEVfVVBTVFJFQU0gICAgICAgPSAxIDw8IDAsCisgIEdTVF9FVkVOVF9UWVBFX0RPV05TVFJFQU0gICAgID0gMSA8PCAxLAorICBHU1RfRVZFTlRfVFlQRV9TRVJJQUxJWkVEICAgICA9IDEgPDwgMiwKKyAgR1NUX0VWRU5UX1RZUEVfU1RJQ0tZICAgICAgICAgPSAxIDw8IDMKK30gR3N0RXZlbnRUeXBlRmxhZ3M7CisKKy8qKgorICogR1NUX0VWRU5UX1RZUEVfQk9USDoKKyAqCisgKiBUaGUgc2FtZSB0aGluZyBhcyAjR1NUX0VWRU5UX1RZUEVfVVBTVFJFQU0gfCAjR1NUX0VWRU5UX1RZUEVfRE9XTlNUUkVBTS4KKyAqLworI2RlZmluZSBHU1RfRVZFTlRfVFlQRV9CT1RIIFwKKyAgICAoR1NUX0VWRU5UX1RZUEVfVVBTVFJFQU0gfCBHU1RfRVZFTlRfVFlQRV9ET1dOU1RSRUFNKQorCisjZGVmaW5lIEdTVF9FVkVOVF9NQVhfU1RJQ0tZICAgIDE2CisjZGVmaW5lIEdTVF9FVkVOVF9TVElDS1lfU0hJRlQgIDgKKyNkZWZpbmUgR1NUX0VWRU5UX05VTV9TSElGVCAgICAgKEdTVF9FVkVOVF9TVElDS1lfU0hJRlQgKyA0KQorCisvKioKKyAqIEdTVF9FVkVOVF9NQUtFX1RZUEU6CisgKiBAbnVtOiB0aGUgZXZlbnQgbnVtYmVyIHRvIGNyZWF0ZQorICogQGlkeDogdGhlIGluZGV4IGluIHRoZSBzdGlja3kgYXJyYXkKKyAqIEBmbGFnczogdGhlIGV2ZW50IGZsYWdzCisgKgorICogd2hlbiBtYWtpbmcgY3VzdG9tIGV2ZW50IHR5cGVzLCB1c2UgdGhpcyBtYWNybyB3aXRoIHRoZSBudW0gYW5kCisgKiB0aGUgZ2l2ZW4gZmxhZ3MKKyAqLworI2RlZmluZSBHU1RfRVZFTlRfTUFLRV9UWVBFKG51bSxpZHgsZmxhZ3MpIFwKKyAgICAoKChudW0pIDw8IEdTVF9FVkVOVF9OVU1fU0hJRlQpIHwgKChpZHgpIDw8IEdTVF9FVkVOVF9TVElDS1lfU0hJRlQpIHwgKGZsYWdzKSkKKworI2RlZmluZSBGTEFHKG5hbWUpIEdTVF9FVkVOVF9UWVBFXyMjbmFtZQorCisjZGVmaW5lIEdTVF9FVkVOVF9TVElDS1lfSURYX1RZUEUodHlwZSkgICgoKHR5cGUpID4+IEdTVF9FVkVOVF9TVElDS1lfU0hJRlQpICYgMHhmKQorI2RlZmluZSBHU1RfRVZFTlRfU1RJQ0tZX0lEWChldikgICAgICAgICBHU1RfRVZFTlRfU1RJQ0tZX0lEWF9UWVBFKEdTVF9FVkVOVF9UWVBFKGV2KSkKKworLyoqCisgKiBHc3RFdmVudFR5cGU6CisgKiBAR1NUX0VWRU5UX1VOS05PV046IHVua25vd24gZXZlbnQuCisgKiBAR1NUX0VWRU5UX0ZMVVNIX1NUQVJUOiBTdGFydCBhIGZsdXNoIG9wZXJhdGlvbi4gVGhpcyBldmVudCBjbGVhcnMgYWxsIGRhdGEKKyAqICAgICAgICAgICAgICAgICBmcm9tIHRoZSBwaXBlbGluZSBhbmQgdW5ibG9jayBhbGwgc3RyZWFtaW5nIHRocmVhZHMuCisgKiBAR1NUX0VWRU5UX0ZMVVNIX1NUT1A6IFN0b3AgYSBmbHVzaCBvcGVyYXRpb24uIFRoaXMgZXZlbnQgcmVzZXRzIHRoZQorICogICAgICAgICAgICAgICAgIHJ1bm5pbmctdGltZSBvZiB0aGUgcGlwZWxpbmUuCisgKiBAR1NUX0VWRU5UX0NBUFM6ICNHc3RDYXBzIGV2ZW50LiBOb3RpZnkgdGhlIHBhZCBvZiBhIG5ldyBtZWRpYSB0eXBlLgorICogQEdTVF9FVkVOVF9TRUdNRU5UOiBBIG5ldyBtZWRpYSBzZWdtZW50IGZvbGxvd3MgaW4gdGhlIGRhdGFmbG93LiBUaGUKKyAqICAgICAgICAgICAgICAgICBzZWdtZW50IGV2ZW50cyBjb250YWlucyBpbmZvcm1hdGlvbiBmb3IgY2xpcHBpbmcgYnVmZmVycyBhbmQKKyAqICAgICAgICAgICAgICAgICBjb252ZXJ0aW5nIGJ1ZmZlciB0aW1lc3RhbXBzIHRvIHJ1bm5pbmctdGltZSBhbmQKKyAqICAgICAgICAgICAgICAgICBzdHJlYW0tdGltZS4KKyAqIEBHU1RfRVZFTlRfVEFHOiBBIG5ldyBzZXQgb2YgbWV0YWRhdGEgdGFncyBoYXMgYmVlbiBmb3VuZCBpbiB0aGUgc3RyZWFtLgorICogQEdTVF9FVkVOVF9CVUZGRVJTSVpFOiBOb3RpZmljYXRpb24gb2YgYnVmZmVyaW5nIHJlcXVpcmVtZW50cy4gQ3VycmVudGx5IG5vdAorICogICAgICAgICAgICAgICAgIHVzZWQgeWV0LgorICogQEdTVF9FVkVOVF9TSU5LX01FU1NBR0U6IEFuIGV2ZW50IHRoYXQgc2lua3MgdHVybiBpbnRvIGEgbWVzc2FnZS4gVXNlZCB0bworICogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmQgbWVzc2FnZXMgdGhhdCBzaG91bGQgYmUgZW1pdHRlZCBpbiBzeW5jIHdpdGgKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJpbmcuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgU2luY2U6IDAuMTAuMjYKKyAqIEBHU1RfRVZFTlRfRU9TOiBFbmQtT2YtU3RyZWFtLiBObyBtb3JlIGRhdGEgaXMgdG8gYmUgZXhwZWN0ZWQgdG8gZm9sbG93CisgKiAgICAgICAgICAgICAgICAgd2l0aG91dCBhIFNFR01FTlQgZXZlbnQuCisgKiBAR1NUX0VWRU5UX1FPUzogQSBxdWFsaXR5IG1lc3NhZ2UuIFVzZWQgdG8gaW5kaWNhdGUgdG8gdXBzdHJlYW0gZWxlbWVudHMKKyAqICAgICAgICAgICAgICAgICB0aGF0IHRoZSBkb3duc3RyZWFtIGVsZW1lbnRzIHNob3VsZCBhZGp1c3QgdGhlaXIgcHJvY2Vzc2luZworICogICAgICAgICAgICAgICAgIHJhdGUuCisgKiBAR1NUX0VWRU5UX1NFRUs6IEEgcmVxdWVzdCBmb3IgYSBuZXcgcGxheWJhY2sgcG9zaXRpb24gYW5kIHJhdGUuCisgKiBAR1NUX0VWRU5UX05BVklHQVRJT046IE5hdmlnYXRpb24gZXZlbnRzIGFyZSB1c3VhbGx5IHVzZWQgZm9yIGNvbW11bmljYXRpbmcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgdXNlciByZXF1ZXN0cywgc3VjaCBhcyBtb3VzZSBvciBrZXlib2FyZCBtb3ZlbWVudHMsCisgKiAgICAgICAgICAgICAgICAgICAgICAgIHRvIHVwc3RyZWFtIGVsZW1lbnRzLgorICogQEdTVF9FVkVOVF9MQVRFTkNZOiBOb3RpZmljYXRpb24gb2YgbmV3IGxhdGVuY3kgYWRqdXN0bWVudC4gU2lua3Mgd2lsbCB1c2UKKyAqICAgICAgICAgICAgICAgICAgICAgdGhlIGxhdGVuY3kgaW5mb3JtYXRpb24gdG8gYWRqdXN0IHRoZWlyIHN5bmNocm9uaXNhdGlvbi4KKyAqICAgICAgICAgICAgICAgICAgICAgU2luY2U6IDAuMTAuMTIKKyAqIEBHU1RfRVZFTlRfU1RFUDogQSByZXF1ZXN0IGZvciBzdGVwcGluZyB0aHJvdWdoIHRoZSBtZWRpYS4gU2lua3Mgd2lsbCB1c3VhbGx5CisgKiAgICAgICAgICAgICAgICAgIGV4ZWN1dGUgdGhlIHN0ZXAgb3BlcmF0aW9uLiBTaW5jZTogMC4xMC4yNAorICogQEdTVF9FVkVOVF9SRUNPTkZJR1VSRTogQSByZXF1ZXN0IGZvciB1cHN0cmVhbSByZW5lZ290aWF0aW5nIGNhcHMgYW5kIHJlY29uZmlndXJpbmcuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBTaW5jZTogMC4xMS4wCisgKiBAR1NUX0VWRU5UX0NVU1RPTV9VUFNUUkVBTTogVXBzdHJlYW0gY3VzdG9tIGV2ZW50CisgKiBAR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNOiBEb3duc3RyZWFtIGN1c3RvbSBldmVudCB0aGF0IHRyYXZlbHMgaW4gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgZmxvdy4KKyAqIEBHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU1fT09COiBDdXN0b20gb3V0LW9mLWJhbmQgZG93bnN0cmVhbSBldmVudC4KKyAqIEBHU1RfRVZFTlRfQ1VTVE9NX0JPVEg6IEN1c3RvbSB1cHN0cmVhbSBvciBkb3duc3RyZWFtIGV2ZW50LgorICogICAgICAgICAgICAgICAgICAgICAgICAgSW4tYmFuZCB3aGVuIHRyYXZlbGxpbmcgZG93bnN0cmVhbS4KKyAqIEBHU1RfRVZFTlRfQ1VTVE9NX0JPVEhfT09COiBDdXN0b20gdXBzdHJlYW0gb3IgZG93bnN0cmVhbSBvdXQtb2YtYmFuZCBldmVudC4KKyAqCisgKiAjR3N0RXZlbnRUeXBlIGxpc3RzIHRoZSBzdGFuZGFyZCBldmVudCB0eXBlcyB0aGF0IGNhbiBiZSBzZW50IGluIGEgcGlwZWxpbmUuCisgKgorICogVGhlIGN1c3RvbSBldmVudCB0eXBlcyBjYW4gYmUgdXNlZCBmb3IgcHJpdmF0ZSBtZXNzYWdlcyBiZXR3ZWVuIGVsZW1lbnRzCisgKiB0aGF0IGNhbid0IGJlIGV4cHJlc3NlZCB1c2luZyBub3JtYWwKKyAqIEdTdHJlYW1lciBidWZmZXIgcGFzc2luZyBzZW1hbnRpY3MuIEN1c3RvbSBldmVudHMgY2FycnkgYW4gYXJiaXRyYXJ5CisgKiAjR3N0U3RydWN0dXJlLgorICogU3BlY2lmaWMgY3VzdG9tIGV2ZW50cyBhcmUgZGlzdGluZ3Vpc2hlZCBieSB0aGUgbmFtZSBvZiB0aGUgc3RydWN0dXJlLgorICovCisvKiBOT1RFOiBrZWVwIGluIHN5bmMgd2l0aCBxdWFyayByZWdpc3RyYXRpb24gaW4gZ3N0ZXZlbnQuYyAqLwordHlwZWRlZiBlbnVtIHsKKyAgR1NUX0VWRU5UX1VOS05PV04gICAgICAgICAgICAgICA9IEdTVF9FVkVOVF9NQUtFX1RZUEUgKDAsIDAsIDApLAorICAvKiBiaWRpcmVjdGlvbmFsIGV2ZW50cyAqLworICBHU1RfRVZFTlRfRkxVU0hfU1RBUlQgICAgICAgICAgID0gR1NUX0VWRU5UX01BS0VfVFlQRSAoMSwgMCwgRkxBRyhCT1RIKSksCisgIEdTVF9FVkVOVF9GTFVTSF9TVE9QICAgICAgICAgICAgPSBHU1RfRVZFTlRfTUFLRV9UWVBFICgyLCAwLCBGTEFHKEJPVEgpIHwgRkxBRyhTRVJJQUxJWkVEKSksCisgIC8qIGRvd25zdHJlYW0gc2VyaWFsaXplZCBldmVudHMgKi8KKyAgR1NUX0VWRU5UX0NBUFMgICAgICAgICAgICAgICAgICA9IEdTVF9FVkVOVF9NQUtFX1RZUEUgKDUsIDEsIEZMQUcoRE9XTlNUUkVBTSkgfCBGTEFHKFNFUklBTElaRUQpIHwgRkxBRyhTVElDS1kpKSwKKyAgR1NUX0VWRU5UX1NFR01FTlQgICAgICAgICAgICAgICA9IEdTVF9FVkVOVF9NQUtFX1RZUEUgKDYsIDIsIEZMQUcoRE9XTlNUUkVBTSkgfCBGTEFHKFNFUklBTElaRUQpIHwgRkxBRyhTVElDS1kpKSwKKyAgR1NUX0VWRU5UX1RBRyAgICAgICAgICAgICAgICAgICA9IEdTVF9FVkVOVF9NQUtFX1RZUEUgKDcsIDMsIEZMQUcoRE9XTlNUUkVBTSkgfCBGTEFHKFNFUklBTElaRUQpIHwgRkxBRyhTVElDS1kpKSwKKyAgR1NUX0VWRU5UX0JVRkZFUlNJWkUgICAgICAgICAgICA9IEdTVF9FVkVOVF9NQUtFX1RZUEUgKDgsIDQsIEZMQUcoRE9XTlNUUkVBTSkgfCBGTEFHKFNFUklBTElaRUQpIHwgRkxBRyhTVElDS1kpKSwKKyAgR1NUX0VWRU5UX1NJTktfTUVTU0FHRSAgICAgICAgICA9IEdTVF9FVkVOVF9NQUtFX1RZUEUgKDksIDUsIEZMQUcoRE9XTlNUUkVBTSkgfCBGTEFHKFNFUklBTElaRUQpIHwgRkxBRyhTVElDS1kpKSwKKyAgR1NUX0VWRU5UX0VPUyAgICAgICAgICAgICAgICAgICA9IEdTVF9FVkVOVF9NQUtFX1RZUEUgKDEwLCA2LCBGTEFHKERPV05TVFJFQU0pIHwgRkxBRyhTRVJJQUxJWkVEKSB8IEZMQUcoU1RJQ0tZKSksCisKKyAgLyogdXBzdHJlYW0gZXZlbnRzICovCisgIEdTVF9FVkVOVF9RT1MgICAgICAgICAgICAgICAgICAgPSBHU1RfRVZFTlRfTUFLRV9UWVBFICgxNSwgMCwgRkxBRyhVUFNUUkVBTSkpLAorICBHU1RfRVZFTlRfU0VFSyAgICAgICAgICAgICAgICAgID0gR1NUX0VWRU5UX01BS0VfVFlQRSAoMTYsIDAsIEZMQUcoVVBTVFJFQU0pKSwKKyAgR1NUX0VWRU5UX05BVklHQVRJT04gICAgICAgICAgICA9IEdTVF9FVkVOVF9NQUtFX1RZUEUgKDE3LCAwLCBGTEFHKFVQU1RSRUFNKSksCisgIEdTVF9FVkVOVF9MQVRFTkNZICAgICAgICAgICAgICAgPSBHU1RfRVZFTlRfTUFLRV9UWVBFICgxOCwgMCwgRkxBRyhVUFNUUkVBTSkpLAorICBHU1RfRVZFTlRfU1RFUCAgICAgICAgICAgICAgICAgID0gR1NUX0VWRU5UX01BS0VfVFlQRSAoMTksIDAsIEZMQUcoVVBTVFJFQU0pKSwKKyAgR1NUX0VWRU5UX1JFQ09ORklHVVJFICAgICAgICAgICA9IEdTVF9FVkVOVF9NQUtFX1RZUEUgKDIwLCAwLCBGTEFHKFVQU1RSRUFNKSksCisKKyAgLyogY3VzdG9tIGV2ZW50cyBzdGFydCBoZXJlICovCisgIEdTVF9FVkVOVF9DVVNUT01fVVBTVFJFQU0gICAgICAgPSBHU1RfRVZFTlRfTUFLRV9UWVBFICgzMiwgMCwgRkxBRyhVUFNUUkVBTSkpLAorICBHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU0gICAgID0gR1NUX0VWRU5UX01BS0VfVFlQRSAoMzIsIDAsIEZMQUcoRE9XTlNUUkVBTSkgfCBGTEFHKFNFUklBTElaRUQpKSwKKyAgR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX09PQiA9IEdTVF9FVkVOVF9NQUtFX1RZUEUgKDMyLCAwLCBGTEFHKERPV05TVFJFQU0pKSwKKyAgR1NUX0VWRU5UX0NVU1RPTV9CT1RIICAgICAgICAgICA9IEdTVF9FVkVOVF9NQUtFX1RZUEUgKDMyLCAwLCBGTEFHKEJPVEgpIHwgRkxBRyhTRVJJQUxJWkVEKSksCisgIEdTVF9FVkVOVF9DVVNUT01fQk9USF9PT0IgICAgICAgPSBHU1RfRVZFTlRfTUFLRV9UWVBFICgzMiwgMCwgRkxBRyhCT1RIKSkKK30gR3N0RXZlbnRUeXBlOworI3VuZGVmIEZMQUcKKworI2luY2x1ZGUgPGdzdC9nc3RtaW5pb2JqZWN0Lmg+CisjaW5jbHVkZSA8Z3N0L2dzdGZvcm1hdC5oPgorI2luY2x1ZGUgPGdzdC9nc3RvYmplY3QuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Y2xvY2suaD4KKyNpbmNsdWRlIDxnc3QvZ3N0c3RydWN0dXJlLmg+CisjaW5jbHVkZSA8Z3N0L2dzdHRhZ2xpc3QuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0c2VnbWVudC5oPgorI2luY2x1ZGUgPGdzdC9nc3RzZWdtZW50Lmg+CisjaW5jbHVkZSA8Z3N0L2dzdG1lc3NhZ2UuaD4KKworR19CRUdJTl9ERUNMUworCitleHRlcm4gR1R5cGUgX2dzdF9ldmVudF90eXBlOworCisjZGVmaW5lIEdTVF9UWVBFX0VWRU5UICAgICAgICAgICAgICAgICAgKF9nc3RfZXZlbnRfdHlwZSkKKyNkZWZpbmUgR1NUX0lTX0VWRU5UKG9iaikgICAgICAgICAgICAgICAoR1NUX0lTX01JTklfT0JKRUNUX1RZUEUgKG9iaiwgR1NUX1RZUEVfRVZFTlQpKQorI2RlZmluZSBHU1RfRVZFTlRfQ0FTVChvYmopICAgICAgICAgICAgICgoR3N0RXZlbnQgKikob2JqKSkKKyNkZWZpbmUgR1NUX0VWRU5UKG9iaikgICAgICAgICAgICAgICAgICAoR1NUX0VWRU5UX0NBU1Qob2JqKSkKKworLyoqCisgKiBHU1RfRVZFTlRfVFJBQ0VfTkFNRToKKyAqCisgKiBUaGUgbmFtZSB1c2VkIGZvciBtZW1vcnkgYWxsb2NhdGlvbiB0cmFjaW5nCisgKi8KKyNkZWZpbmUgR1NUX0VWRU5UX1RSQUNFX05BTUUgICAgIkdzdEV2ZW50IgorCisvKioKKyAqIEdTVF9FVkVOVF9UWVBFOgorICogQGV2ZW50OiB0aGUgZXZlbnQgdG8gcXVlcnkKKyAqCisgKiBHZXQgdGhlICNHc3RFdmVudFR5cGUgb2YgdGhlIGV2ZW50LgorICovCisjZGVmaW5lIEdTVF9FVkVOVF9UWVBFKGV2ZW50KSAgICAgICAgICAgKEdTVF9FVkVOVF9DQVNUKGV2ZW50KS0+dHlwZSkKKworLyoqCisgKiBHU1RfRVZFTlRfVFlQRV9OQU1FOgorICogQGV2ZW50OiB0aGUgZXZlbnQgdG8gcXVlcnkKKyAqCisgKiBHZXQgYSBjb25zdGFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlICNHc3RFdmVudFR5cGUgb2YgdGhlIGV2ZW50LgorICovCisjZGVmaW5lIEdTVF9FVkVOVF9UWVBFX05BTUUoZXZlbnQpICAgICAgKGdzdF9ldmVudF90eXBlX2dldF9uYW1lKEdTVF9FVkVOVF9UWVBFKGV2ZW50KSkpCisKKy8qKgorICogR1NUX0VWRU5UX1RJTUVTVEFNUDoKKyAqIEBldmVudDogdGhlIGV2ZW50IHRvIHF1ZXJ5CisgKgorICogR2V0IHRoZSAjR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCBvZiB0aGUgZXZlbnQuIFRoaXMgaXMgdGhlIHRpbWUgd2hlbiB0aGUgZXZlbnQKKyAqIHdhcyBjcmVhdGVkLgorICovCisjZGVmaW5lIEdTVF9FVkVOVF9USU1FU1RBTVAoZXZlbnQpICAgICAgKEdTVF9FVkVOVF9DQVNUKGV2ZW50KS0+dGltZXN0YW1wKQorCisvKioKKyAqIEdTVF9FVkVOVF9TRVFOVU06CisgKiBAZXZlbnQ6IHRoZSBldmVudCB0byBxdWVyeQorICoKKyAqIFRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgQGV2ZW50LgorICovCisjZGVmaW5lIEdTVF9FVkVOVF9TRVFOVU0oZXZlbnQpICAgICAgICAgKEdTVF9FVkVOVF9DQVNUKGV2ZW50KS0+c2VxbnVtKQorCisvKioKKyAqIEdTVF9FVkVOVF9JU19VUFNUUkVBTToKKyAqIEBldjogdGhlIGV2ZW50IHRvIHF1ZXJ5CisgKgorICogQ2hlY2sgaWYgYW4gZXZlbnQgY2FuIHRyYXZlbCB1cHN0cmVhbS4KKyAqLworI2RlZmluZSBHU1RfRVZFTlRfSVNfVVBTVFJFQU0oZXYpICAgICAgICEhKEdTVF9FVkVOVF9UWVBFIChldikgJiBHU1RfRVZFTlRfVFlQRV9VUFNUUkVBTSkKKy8qKgorICogR1NUX0VWRU5UX0lTX0RPV05TVFJFQU06CisgKiBAZXY6IHRoZSBldmVudCB0byBxdWVyeQorICoKKyAqIENoZWNrIGlmIGFuIGV2ZW50IGNhbiB0cmF2ZWwgZG93bnN0cmVhbS4KKyAqLworI2RlZmluZSBHU1RfRVZFTlRfSVNfRE9XTlNUUkVBTShldikgICAgICEhKEdTVF9FVkVOVF9UWVBFIChldikgJiBHU1RfRVZFTlRfVFlQRV9ET1dOU1RSRUFNKQorLyoqCisgKiBHU1RfRVZFTlRfSVNfU0VSSUFMSVpFRDoKKyAqIEBldjogdGhlIGV2ZW50IHRvIHF1ZXJ5CisgKgorICogQ2hlY2sgaWYgYW4gZXZlbnQgaXMgc2VyaWFsaXplZCB3aXRoIHRoZSBkYXRhIHN0cmVhbS4KKyAqLworI2RlZmluZSBHU1RfRVZFTlRfSVNfU0VSSUFMSVpFRChldikgICAgICEhKEdTVF9FVkVOVF9UWVBFIChldikgJiBHU1RfRVZFTlRfVFlQRV9TRVJJQUxJWkVEKQorLyoqCisgKiBHU1RfRVZFTlRfSVNfU1RJQ0tZOgorICogQGV2OiB0aGUgZXZlbnQgdG8gcXVlcnkKKyAqCisgKiBDaGVjayBpZiBhbiBldmVudCBpcyBzdGlja3kgb24gdGhlIHBhZHMuCisgKi8KKyNkZWZpbmUgR1NUX0VWRU5UX0lTX1NUSUNLWShldikgICAgICEhKEdTVF9FVkVOVF9UWVBFIChldikgJiBHU1RfRVZFTlRfVFlQRV9TVElDS1kpCisKKy8qKgorICogZ3N0X2V2ZW50X2lzX3dyaXRhYmxlOgorICogQGV2OiBhICNHc3RFdmVudAorICoKKyAqIFRlc3RzIGlmIHlvdSBjYW4gc2FmZWx5IHdyaXRlIGRhdGEgaW50byBhIGV2ZW50J3Mgc3RydWN0dXJlIG9yIHZhbGlkbHkKKyAqIG1vZGlmeSB0aGUgc2VxbnVtIGFuZCB0aW1lc3RhbXAgZmllbGQuCisgKi8KKyNkZWZpbmUgICAgICAgICBnc3RfZXZlbnRfaXNfd3JpdGFibGUoZXYpICAgICBnc3RfbWluaV9vYmplY3RfaXNfd3JpdGFibGUgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChldikpCisvKioKKyAqIGdzdF9ldmVudF9tYWtlX3dyaXRhYmxlOgorICogQGV2OiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdEV2ZW50CisgKgorICogTWFrZXMgYSB3cml0YWJsZSBldmVudCBmcm9tIHRoZSBnaXZlbiBldmVudC4gSWYgdGhlIHNvdXJjZSBldmVudCBpcworICogYWxyZWFkeSB3cml0YWJsZSwgdGhpcyB3aWxsIHNpbXBseSByZXR1cm4gdGhlIHNhbWUgZXZlbnQuIEEgY29weSB3aWxsCisgKiBvdGhlcndpc2UgYmUgbWFkZSB1c2luZyBnc3RfZXZlbnRfY29weSgpLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSB3cml0YWJsZSBldmVudCB3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSB0aGUKKyAqICAgICBzYW1lIGFzIEBldgorICovCisjZGVmaW5lICAgICAgICAgZ3N0X2V2ZW50X21ha2Vfd3JpdGFibGUoZXYpICAgR1NUX0VWRU5UX0NBU1QgKGdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoZXYpKSkKKy8qKgorICogZ3N0X2V2ZW50X3JlcGxhY2U6CisgKiBAb2xkX2V2ZW50OiAoaW5vdXQpICh0cmFuc2ZlciBmdWxsKTogcG9pbnRlciB0byBhIHBvaW50ZXIgdG8gYSAjR3N0RXZlbnQKKyAqICAgICB0byBiZSByZXBsYWNlZC4KKyAqIEBuZXdfZXZlbnQ6IChhbGxvdy1ub25lKSAodHJhbnNmZXIgbm9uZSk6IHBvaW50ZXIgdG8gYSAjR3N0RXZlbnQgdGhhdCB3aWxsCisgKiAgICAgcmVwbGFjZSB0aGUgZXZlbnQgcG9pbnRlZCB0byBieSBAb2xkX2V2ZW50LgorICoKKyAqIE1vZGlmaWVzIGEgcG9pbnRlciB0byBhICNHc3RFdmVudCB0byBwb2ludCB0byBhIGRpZmZlcmVudCAjR3N0RXZlbnQuIFRoZQorICogbW9kaWZpY2F0aW9uIGlzIGRvbmUgYXRvbWljYWxseSAoc28gdGhpcyBpcyB1c2VmdWwgZm9yIGVuc3VyaW5nIHRocmVhZCBzYWZldHkKKyAqIGluIHNvbWUgY2FzZXMpLCBhbmQgdGhlIHJlZmVyZW5jZSBjb3VudHMgYXJlIHVwZGF0ZWQgYXBwcm9wcmlhdGVseSAodGhlIG9sZAorICogZXZlbnQgaXMgdW5yZWZmZWQsIHRoZSBuZXcgb25lIGlzIHJlZmZlZCkuCisgKgorICogRWl0aGVyIEBuZXdfZXZlbnQgb3IgdGhlICNHc3RFdmVudCBwb2ludGVkIHRvIGJ5IEBvbGRfZXZlbnQgbWF5IGJlIE5VTEwuCisgKgorICogUmV0dXJuczogVFJVRSBpZiBAbmV3X2V2ZW50IHdhcyBkaWZmZXJlbnQgZnJvbSBAb2xkX2V2ZW50CisgKi8KKyNkZWZpbmUgICAgICAgICBnc3RfZXZlbnRfcmVwbGFjZShvbGRfZXZlbnQsbmV3X2V2ZW50KSBcCisgICAgZ3N0X21pbmlfb2JqZWN0X3JlcGxhY2UgKChHc3RNaW5pT2JqZWN0ICoqKShvbGRfZXZlbnQpLCBHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAobmV3X2V2ZW50KSkKKy8qKgorICogZ3N0X2V2ZW50X3N0ZWFsOgorICogQG9sZF9ldmVudDogKGlub3V0KSAodHJhbnNmZXIgZnVsbCk6IHBvaW50ZXIgdG8gYSBwb2ludGVyIHRvIGEgI0dzdEV2ZW50CisgKiAgICAgdG8gYmUgc3RvbGVuLgorICoKKyAqIEF0b21pY2FsbHkgcmVwbGFjZSB0aGUgI0dzdEV2ZW50IHBvaW50ZWQgdG8gYnkgQG9sZF9ldmVudCB3aXRoIE5VTEwgYW5kCisgKiByZXR1cm4gdGhlIG9yaWdpbmFsIGV2ZW50LgorICoKKyAqIFJldHVybnM6IHRoZSAjR3N0RXZlbnQgdGhhdCB3YXMgaW4gQG9sZF9ldmVudAorICovCisjZGVmaW5lICAgICAgICAgZ3N0X2V2ZW50X3N0ZWFsKG9sZF9ldmVudCkgXAorICAgIEdTVF9FVkVOVF9DQVNUIChnc3RfbWluaV9vYmplY3Rfc3RlYWwgKChHc3RNaW5pT2JqZWN0ICoqKShvbGRfZXZlbnQpKSkKKy8qKgorICogZ3N0X2V2ZW50X3Rha2U6CisgKiBAb2xkX2V2ZW50OiAoaW5vdXQpICh0cmFuc2ZlciBmdWxsKTogcG9pbnRlciB0byBhIHBvaW50ZXIgdG8gYSAjR3N0RXZlbnQKKyAqICAgICB0byBiZSBzdG9sZW4uCisgKiBAbmV3X2V2ZW50OiAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIGZ1bGwpOiBwb2ludGVyIHRvIGEgI0dzdEV2ZW50IHRoYXQgd2lsbAorICogICAgIHJlcGxhY2UgdGhlIGV2ZW50IHBvaW50ZWQgdG8gYnkgQG9sZF9ldmVudC4KKyAqCisgKiBNb2RpZmllcyBhIHBvaW50ZXIgdG8gYSAjR3N0RXZlbnQgdG8gcG9pbnQgdG8gYSBkaWZmZXJlbnQgI0dzdEV2ZW50LiBUaGlzCisgKiBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIGdzdF9ldmVudF9yZXBsYWNlKCkgZXhjZXB0IHRoYXQgaXQgdGFrZXMgb3duZXJzaGlwIG9mCisgKiBAbmV3X2V2ZW50LgorICoKKyAqIEVpdGhlciBAbmV3X2V2ZW50IG9yIHRoZSAjR3N0RXZlbnQgcG9pbnRlZCB0byBieSBAb2xkX2V2ZW50IG1heSBiZSBOVUxMLgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgQG5ld19ldmVudCB3YXMgZGlmZmVyZW50IGZyb20gQG9sZF9ldmVudAorICovCisjZGVmaW5lICAgICAgICAgZ3N0X2V2ZW50X3Rha2Uob2xkX2V2ZW50LG5ld19ldmVudCkgXAorICAgIGdzdF9taW5pX29iamVjdF90YWtlICgoR3N0TWluaU9iamVjdCAqKikob2xkX2V2ZW50KSwgR1NUX01JTklfT0JKRUNUX0NBU1QgKG5ld19ldmVudCkpCisKKy8qKgorICogR3N0UU9TVHlwZToKKyAqIEBHU1RfUU9TX1RZUEVfT1ZFUkZMT1c6IFRoZSBRb1MgZXZlbnQgdHlwZSB0aGF0IGlzIHByb2R1Y2VkIHdoZW4gZG93bnN0cmVhbQorICogICAgZWxlbWVudHMgYXJlIHByb2R1Y2luZyBkYXRhIHRvbyBxdWlja2x5IGFuZCB0aGUgZWxlbWVudCBjYW4ndCBrZWVwIHVwCisgKiAgICBwcm9jZXNzaW5nIHRoZSBkYXRhLiBVcHN0cmVhbSBzaG91bGQgcmVkdWNlIHRoZWlyIHByb2Nlc3NpbmcgcmF0ZS4gVGhpcworICogICAgdHlwZSBpcyBhbHNvIHVzZWQgd2hlbiBidWZmZXJzIGFycml2ZSBlYXJseSBvciBpbiB0aW1lLgorICogQEdTVF9RT1NfVFlQRV9VTkRFUkZMT1c6IFRoZSBRb1MgZXZlbnQgdHlwZSB0aGF0IGlzIHByb2R1Y2VkIHdoZW4gZG93bnN0cmVhbQorICogICAgZWxlbWVudHMgYXJlIHByb2R1Y2luZyBkYXRhIHRvbyBzbG93bHkgYW5kIG5lZWQgdG8gc3BlZWQgdXAgdGhlaXIgcHJvY2Vzc2luZworICogICAgcmF0ZS4KKyAqIEBHU1RfUU9TX1RZUEVfVEhST1RUTEU6IFRoZSBRb1MgZXZlbnQgdHlwZSB0aGF0IGlzIHByb2R1Y2VkIHdoZW4gdGhlCisgKiAgICBhcHBsaWNhdGlvbiBlbmFibGVkIHRocm90dGxpbmcgdG8gbGltaXQgdGhlIGRhdGFyYXRlLgorICoKKyAqIFRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgUW9TIGV2ZW50cyB0aGF0IGNhbiBiZSBnaXZlbiB0byB0aGUKKyAqIGdzdF9ldmVudF9uZXdfcW9zKCkgbWV0aG9kLgorICoKKyAqIFNpbmNlOiAwLjEwLjMzCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIEdTVF9RT1NfVFlQRV9PVkVSRkxPVyAgICAgICAgPSAwLAorICBHU1RfUU9TX1RZUEVfVU5ERVJGTE9XICAgICAgID0gMSwKKyAgR1NUX1FPU19UWVBFX1RIUk9UVExFICAgICAgICA9IDIKK30gR3N0UU9TVHlwZTsKKworLyoqCisgKiBHc3RFdmVudDoKKyAqIEBtaW5pX29iamVjdDogdGhlIHBhcmVudCBzdHJ1Y3R1cmUKKyAqIEB0eXBlOiB0aGUgI0dzdEV2ZW50VHlwZSBvZiB0aGUgZXZlbnQKKyAqIEB0aW1lc3RhbXA6IHRoZSB0aW1lc3RhbXAgb2YgdGhlIGV2ZW50CisgKiBAc2VxbnVtOiB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBldmVudAorICoKKyAqIEEgI0dzdEV2ZW50LgorICovCitzdHJ1Y3QgX0dzdEV2ZW50IHsKKyAgR3N0TWluaU9iamVjdCBtaW5pX29iamVjdDsKKworICAvKjwgcHVibGljID4qLyAvKiB3aXRoIENPVyAqLworICBHc3RFdmVudFR5cGUgIHR5cGU7CisgIGd1aW50NjQgICAgICAgdGltZXN0YW1wOworICBndWludDMyICAgICAgIHNlcW51bTsKK307CisKK2NvbnN0IGdjaGFyKiAgICBnc3RfZXZlbnRfdHlwZV9nZXRfbmFtZSAgICAgICAgIChHc3RFdmVudFR5cGUgdHlwZSk7CitHUXVhcmsgICAgICAgICAgZ3N0X2V2ZW50X3R5cGVfdG9fcXVhcmsgICAgICAgICAoR3N0RXZlbnRUeXBlIHR5cGUpOworR3N0RXZlbnRUeXBlRmxhZ3MKKyAgICAgICAgICAgICAgICBnc3RfZXZlbnRfdHlwZV9nZXRfZmxhZ3MgICAgICAgIChHc3RFdmVudFR5cGUgdHlwZSk7CisKKworLyogcmVmY291bnRpbmcgKi8KKy8qKgorICogZ3N0X2V2ZW50X3JlZjoKKyAqIEBldmVudDogVGhlIGV2ZW50IHRvIHJlZmNvdW50CisgKgorICogSW5jcmVhc2UgdGhlIHJlZmNvdW50IG9mIHRoaXMgZXZlbnQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBAZXZlbnQgKGZvciBjb252ZW5pZW5jZSB3aGVuIGRvaW5nIGFzc2lnbm1lbnRzKQorICovCisjaWZkZWYgX0ZPT0xfR1RLX0RPQ18KK0dfSU5MSU5FX0ZVTkMgR3N0RXZlbnQgKiBnc3RfZXZlbnRfcmVmIChHc3RFdmVudCAqIGV2ZW50KTsKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIEdzdEV2ZW50ICoKK2dzdF9ldmVudF9yZWYgKEdzdEV2ZW50ICogZXZlbnQpCit7CisgIHJldHVybiAoR3N0RXZlbnQgKikgZ3N0X21pbmlfb2JqZWN0X3JlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGV2ZW50KSk7Cit9CisKKy8qKgorICogZ3N0X2V2ZW50X3VucmVmOgorICogQGV2ZW50OiAodHJhbnNmZXIgZnVsbCk6IHRoZSBldmVudCB0byByZWZjb3VudAorICoKKyAqIERlY3JlYXNlIHRoZSByZWZjb3VudCBvZiBhbiBldmVudCwgZnJlZWluZyBpdCBpZiB0aGUgcmVmY291bnQgcmVhY2hlcyAwLgorICovCisjaWZkZWYgX0ZPT0xfR1RLX0RPQ18KK0dfSU5MSU5FX0ZVTkMgdm9pZCBnc3RfZXZlbnRfdW5yZWYgKEdzdEV2ZW50ICogZXZlbnQpOworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ3N0X2V2ZW50X3VucmVmIChHc3RFdmVudCAqIGV2ZW50KQoreworICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChldmVudCkpOworfQorCisvKiBjb3B5IGV2ZW50ICovCisvKioKKyAqIGdzdF9ldmVudF9jb3B5OgorICogQGV2ZW50OiBUaGUgZXZlbnQgdG8gY29weQorICoKKyAqIENvcHkgdGhlIGV2ZW50IHVzaW5nIHRoZSBldmVudCBzcGVjaWZpYyBjb3B5IGZ1bmN0aW9uLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ldyBldmVudAorICovCisjaWZkZWYgX0ZPT0xfR1RLX0RPQ18KK0dfSU5MSU5FX0ZVTkMgR3N0RXZlbnQgKiBnc3RfZXZlbnRfY29weSAoY29uc3QgR3N0RXZlbnQgKiBldmVudCk7CisjZW5kaWYKKworc3RhdGljIGlubGluZSBHc3RFdmVudCAqCitnc3RfZXZlbnRfY29weSAoY29uc3QgR3N0RXZlbnQgKiBldmVudCkKK3sKKyAgcmV0dXJuIEdTVF9FVkVOVF9DQVNUIChnc3RfbWluaV9vYmplY3RfY29weSAoR1NUX01JTklfT0JKRUNUX0NPTlNUX0NBU1QgKGV2ZW50KSkpOworfQorCitHVHlwZSAgICAgICAgICAgZ3N0X2V2ZW50X2dldF90eXBlICAgICAgICAgICAgICAodm9pZCk7CisKKy8qIGN1c3RvbSBldmVudCAqLworR3N0RXZlbnQqICAgICAgIGdzdF9ldmVudF9uZXdfY3VzdG9tICAgICAgICAgICAgKEdzdEV2ZW50VHlwZSB0eXBlLCBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSk7CisKK2NvbnN0IEdzdFN0cnVjdHVyZSAqCisgICAgICAgICAgICAgICAgZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUgICAgICAgICAoR3N0RXZlbnQgKmV2ZW50KTsKK0dzdFN0cnVjdHVyZSAqICBnc3RfZXZlbnRfd3JpdGFibGVfc3RydWN0dXJlICAgIChHc3RFdmVudCAqZXZlbnQpOworCitnYm9vbGVhbiAgICAgICAgZ3N0X2V2ZW50X2hhc19uYW1lICAgICAgICAgICAgICAoR3N0RXZlbnQgKmV2ZW50LCBjb25zdCBnY2hhciAqbmFtZSk7CisKKy8qIGlkZW50aWZpZXJzIGZvciBldmVudHMgYW5kIG1lc3NhZ2VzICovCitndWludDMyICAgICAgICAgZ3N0X2V2ZW50X2dldF9zZXFudW0gICAgICAgICAgICAoR3N0RXZlbnQgKmV2ZW50KTsKK3ZvaWQgICAgICAgICAgICBnc3RfZXZlbnRfc2V0X3NlcW51bSAgICAgICAgICAgIChHc3RFdmVudCAqZXZlbnQsIGd1aW50MzIgc2VxbnVtKTsKKworLyogZmx1c2ggZXZlbnRzICovCitHc3RFdmVudCAqICAgICAgZ3N0X2V2ZW50X25ld19mbHVzaF9zdGFydCAgICAgICAodm9pZCk7CisKK0dzdEV2ZW50ICogICAgICBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AgICAgICAgIChnYm9vbGVhbiByZXNldF90aW1lKTsKK3ZvaWQgICAgICAgICAgICBnc3RfZXZlbnRfcGFyc2VfZmx1c2hfc3RvcCAgICAgIChHc3RFdmVudCAqZXZlbnQsIGdib29sZWFuICpyZXNldF90aW1lKTsKKworLyogRU9TIGV2ZW50ICovCitHc3RFdmVudCAqICAgICAgZ3N0X2V2ZW50X25ld19lb3MgICAgICAgICAgICAgICAodm9pZCk7CisKKy8qIENhcHMgZXZlbnRzICovCitHc3RFdmVudCAqICAgICAgZ3N0X2V2ZW50X25ld19jYXBzICAgICAgICAgICAgICAoR3N0Q2FwcyAqY2Fwcyk7Cit2b2lkICAgICAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX2NhcHMgICAgICAgICAgICAoR3N0RXZlbnQgKmV2ZW50LCBHc3RDYXBzICoqY2Fwcyk7CisKKy8qIHNlZ21lbnQgZXZlbnQgKi8KK0dzdEV2ZW50KiAgICAgICBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgICAgICAgICAgIChHc3RTZWdtZW50ICpzZWdtZW50KTsKK3ZvaWQgICAgICAgICAgICBnc3RfZXZlbnRfcGFyc2Vfc2VnbWVudCAgICAgICAgIChHc3RFdmVudCAqZXZlbnQsIGNvbnN0IEdzdFNlZ21lbnQgKipzZWdtZW50KTsKK3ZvaWQgICAgICAgICAgICBnc3RfZXZlbnRfY29weV9zZWdtZW50ICAgICAgICAgIChHc3RFdmVudCAqZXZlbnQsIEdzdFNlZ21lbnQgKnNlZ21lbnQpOworCisvKiB0YWcgZXZlbnQgKi8KK0dzdEV2ZW50KiAgICAgICBnc3RfZXZlbnRfbmV3X3RhZyAgICAgICAgICAgICAgIChHc3RUYWdMaXN0ICp0YWdsaXN0KTsKK3ZvaWQgICAgICAgICAgICBnc3RfZXZlbnRfcGFyc2VfdGFnICAgICAgICAgICAgIChHc3RFdmVudCAqZXZlbnQsIEdzdFRhZ0xpc3QgKip0YWdsaXN0KTsKKworLyogYnVmZmVyICovCitHc3RFdmVudCAqICAgICAgZ3N0X2V2ZW50X25ld19idWZmZXJfc2l6ZSAgICAgICAoR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0IG1pbnNpemUsIGdpbnQ2NCBtYXhzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuIGFzeW5jKTsKK3ZvaWQgICAgICAgICAgICBnc3RfZXZlbnRfcGFyc2VfYnVmZmVyX3NpemUgICAgIChHc3RFdmVudCAqZXZlbnQsIEdzdEZvcm1hdCAqZm9ybWF0LCBnaW50NjQgKm1pbnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0ICptYXhzaXplLCBnYm9vbGVhbiAqYXN5bmMpOworCisvKiBzaW5rIG1lc3NhZ2UgKi8KK0dzdEV2ZW50KiAgICAgICBnc3RfZXZlbnRfbmV3X3NpbmtfbWVzc2FnZSAgICAgIChHc3RNZXNzYWdlICptc2cpOwordm9pZCAgICAgICAgICAgIGdzdF9ldmVudF9wYXJzZV9zaW5rX21lc3NhZ2UgICAgKEdzdEV2ZW50ICpldmVudCwgR3N0TWVzc2FnZSAqKm1zZyk7CisKKy8qIFFPUyBldmVudHMgKi8KK0dzdEV2ZW50KiAgICAgICBnc3RfZXZlbnRfbmV3X3FvcyAgICAgICAgICAgICAgIChHc3RRT1NUeXBlIHR5cGUsIGdkb3VibGUgcHJvcG9ydGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWVEaWZmIGRpZmYsIEdzdENsb2NrVGltZSB0aW1lc3RhbXApOwordm9pZCAgICAgICAgICAgIGdzdF9ldmVudF9wYXJzZV9xb3MgICAgICAgICAgICAgKEdzdEV2ZW50ICpldmVudCwgR3N0UU9TVHlwZSAqdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZG91YmxlICpwcm9wb3J0aW9uLCBHc3RDbG9ja1RpbWVEaWZmICpkaWZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZSAqdGltZXN0YW1wKTsKKy8qIHNlZWsgZXZlbnQgKi8KK0dzdEV2ZW50KiAgICAgICBnc3RfZXZlbnRfbmV3X3NlZWsgICAgICAgICAgICAgIChnZG91YmxlIHJhdGUsIEdzdEZvcm1hdCBmb3JtYXQsIEdzdFNlZWtGbGFncyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RTZWVrVHlwZSBzdGFydF90eXBlLCBnaW50NjQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U2Vla1R5cGUgc3RvcF90eXBlLCBnaW50NjQgc3RvcCk7Cit2b2lkICAgICAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3NlZWsgICAgICAgICAgICAoR3N0RXZlbnQgKmV2ZW50LCBnZG91YmxlICpyYXRlLCBHc3RGb3JtYXQgKmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RTZWVrRmxhZ3MgKmZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFNlZWtUeXBlICpzdGFydF90eXBlLCBnaW50NjQgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFNlZWtUeXBlICpzdG9wX3R5cGUsIGdpbnQ2NCAqc3RvcCk7CisKKy8qIG5hdmlnYXRpb24gZXZlbnQgKi8KK0dzdEV2ZW50KiAgICAgICBnc3RfZXZlbnRfbmV3X25hdmlnYXRpb24gICAgICAgIChHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSk7CisKKy8qIGxhdGVuY3kgZXZlbnQgKi8KK0dzdEV2ZW50KiAgICAgICBnc3RfZXZlbnRfbmV3X2xhdGVuY3kgICAgICAgICAgIChHc3RDbG9ja1RpbWUgbGF0ZW5jeSk7Cit2b2lkICAgICAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX2xhdGVuY3kgICAgICAgICAoR3N0RXZlbnQgKmV2ZW50LCBHc3RDbG9ja1RpbWUgKmxhdGVuY3kpOworCisvKiBzdGVwIGV2ZW50ICovCitHc3RFdmVudCogICAgICAgZ3N0X2V2ZW50X25ld19zdGVwICAgICAgICAgICAgICAoR3N0Rm9ybWF0IGZvcm1hdCwgZ3VpbnQ2NCBhbW91bnQsIGdkb3VibGUgcmF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBmbHVzaCwgZ2Jvb2xlYW4gaW50ZXJtZWRpYXRlKTsKK3ZvaWQgICAgICAgICAgICBnc3RfZXZlbnRfcGFyc2Vfc3RlcCAgICAgICAgICAgIChHc3RFdmVudCAqZXZlbnQsIEdzdEZvcm1hdCAqZm9ybWF0LCBndWludDY0ICphbW91bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSAqcmF0ZSwgZ2Jvb2xlYW4gKmZsdXNoLCBnYm9vbGVhbiAqaW50ZXJtZWRpYXRlKTsKKworLyogcmVuZWdvdGlhdGUgZXZlbnQgKi8KK0dzdEV2ZW50KiAgICAgICBnc3RfZXZlbnRfbmV3X3JlY29uZmlndXJlICAgICAgICh2b2lkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fR1NUX0VWRU5UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGZpbHRlci5jIGIvZ3N0L2dzdGZpbHRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNmMwNTUKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0ZmlsdGVyLmMKQEAgLTAsMCArMSw4OCBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qKgorICogU0VDVElPTjpnc3RmaWx0ZXIKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogQSB1dGlsaXR5IGZ1bmN0aW9uIHRvIGZpbHRlciBHTGlzdHMuCisgKgorICogPGV4YW1wbGU+CisgKiA8dGl0bGU+RmlsdGVyaW5nIGEgbGlzdDwvdGl0bGU+CisgKiAgIDxwcm9ncmFtbGlzdGluZz4KKyAqICAgICBHTGlzdCAqbm9kZTsKKyAqICAgICBHc3RPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisgKiAgICAgCisgKiAgICAgbm9kZSA9IGdzdF9maWx0ZXJfcnVuIChsaXN0LCAoR3N0RmlsdGVyRnVuYykgbXlfZmlsdGVyLCBUUlVFLCBOVUxMKTsKKyAqICAgICBpZiAobm9kZSkgeworICogICAgICAgcmVzdWx0ID0gR1NUX09CSkVDVCAobm9kZS0+ZGF0YSk7CisgKiAgICAgICBnc3Rfb2JqZWN0X3JlZiAocmVzdWx0KTsKKyAqICAgICAgIGdfbGlzdF9mcmVlIChub2RlKTsKKyAqICAgICB9CisgKiAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgKiA8L2V4YW1wbGU+CisgKi8KKyNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPGdzdC9nc3RmaWx0ZXIuaD4KKworLyoqCisgKiBnc3RfZmlsdGVyX3J1bjoKKyAqIEBsaXN0OiBhIGxpbmtlZCBsaXN0CisgKiBAZnVuYzogKHNjb3BlIGNhbGwpOiB0aGUgZnVuY3Rpb24gdG8gZXhlY3V0ZSBmb3IgZWFjaCBpdGVtCisgKiBAZmlyc3Q6IGZsYWcgdG8gc3RvcCBleGVjdXRpb24gYWZ0ZXIgYSBzdWNjZXNzZnVsIGl0ZW0KKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogdXNlciBkYXRhCisgKgorICogSXRlcmF0ZXMgb3ZlciB0aGUgZWxlbWVudHMgaW4gQGxpc3QsIGNhbGxpbmcgQGZ1bmMgd2l0aCB0aGUKKyAqIGxpc3QgaXRlbSBkYXRhIGZvciBlYWNoIGl0ZW0uICBJZiBAZnVuYyByZXR1cm5zIFRSVUUsIEBkYXRhIGlzCisgKiBwcmVwZW5kZWQgdG8gdGhlIGxpc3Qgb2YgcmVzdWx0cyByZXR1cm5lZC4gIElmIEBmaXJzdCBpcyB0cnVlLAorICogdGhlIHNlYXJjaCBpcyBoYWx0ZWQgYWZ0ZXIgdGhlIGZpcnN0IHJlc3VsdCBpcyBmb3VuZC4KKyAqCisgKiBTaW5jZSBnc3RfZmlsdGVyX3J1bigpIGtub3dzIG5vdGhpbmcgYWJvdXQgdGhlIHR5cGUgb2YgQGRhdGEsIG5vCisgKiByZWZlcmVuY2Ugd2lsbCBiZSB0YWtlbiAoaWYgQGRhdGEgcmVmZXJzIHRvIGFuIG9iamVjdCkgYW5kIG5vIGNvcHkgb2YKKyAqIEBkYXRhIHdpbCBiZSBtYWRlIGluIGFueSBvdGhlciB3YXkgd2hlbiBwcmVwZW5kaW5nIEBkYXRhIHRvIHRoZSBsaXN0IG9mCisgKiByZXN1bHRzLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBjb250YWluZXIpOiB0aGUgbGlzdCBvZiByZXN1bHRzLiBGcmVlIHdpdGggZ19saXN0X2ZyZWUoKQorICogICAgIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZCAodGhlIGRhdGEgY29udGFpbmVkIGluIHRoZSBsaXN0IGlzIGEgZmxhdCBjb3B5CisgKiAgICAgYW5kIGRvZXMgbmVlZCB0byBiZSB1bnJlZmVyZW5jZWQgb3IgZnJlZWQpLgorICovCitHTGlzdCAqCitnc3RfZmlsdGVyX3J1biAoY29uc3QgR0xpc3QgKiBsaXN0LCBHc3RGaWx0ZXJGdW5jIGZ1bmMsIGdib29sZWFuIGZpcnN0LAorICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgY29uc3QgR0xpc3QgKndhbGsgPSBsaXN0OworICBHTGlzdCAqcmVzdWx0ID0gTlVMTDsKKworICB3aGlsZSAod2FsaykgeworICAgIGdib29sZWFuIHJlcyA9IFRSVUU7CisgICAgZ3BvaW50ZXIgZGF0YSA9IHdhbGstPmRhdGE7CisKKyAgICB3YWxrID0gZ19saXN0X25leHQgKHdhbGspOworCisgICAgaWYgKGZ1bmMpCisgICAgICByZXMgPSBmdW5jIChkYXRhLCB1c2VyX2RhdGEpOworCisgICAgaWYgKHJlcykgeworICAgICAgcmVzdWx0ID0gZ19saXN0X3ByZXBlbmQgKHJlc3VsdCwgZGF0YSk7CisKKyAgICAgIGlmIChmaXJzdCkKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2dzdC9nc3RmaWx0ZXIuaCBiL2dzdC9nc3RmaWx0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzI4ZjAwCi0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdGZpbHRlci5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fR1NUX0ZJTFRFUl9IX18KKyNkZWZpbmUgX19HU1RfRklMVEVSX0hfXworCisjaW5jbHVkZSA8Z2xpYi5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICogR3N0RmlsdGVyRnVuYzoKKyAqIEBvYmo6IHRoZSBvYmplY3QKKyAqIEB1c2VyX2RhdGE6IGZpbHRlciBkYXRhCisgKgorICogRnVuY3Rpb24gcHJvdG90eXBlIGZvciBhIGZpbHRlciBjYWxsYmFjayB0aGF0IGNhbiBiZSB1c2UgaW4gZ3N0X2ZpbHRlcl9ydW4oKS4KKyAqIFRoZSBmdW5jdGlvbiBzaG91bGQgYXBwbHkgaXRzIGZpbHRlcmluZyB0byBAb2JqLiBBZGRpdGlvbmFsIGRhdGEgcGFzc2VkIHRvCisgKiBnc3RfZmlsdGVyX3J1bigpIGFyZSBpbiBAZGF0YS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBmb3Igc3VjY2Vzcy4KKyAqLwordHlwZWRlZiBnYm9vbGVhbiAoKkdzdEZpbHRlckZ1bmMpCShncG9pbnRlciBvYmosIGdwb2ludGVyIHVzZXJfZGF0YSk7CisKK0dMaXN0Kglnc3RfZmlsdGVyX3J1biAJKGNvbnN0IEdMaXN0ICpsaXN0LCBHc3RGaWx0ZXJGdW5jIGZ1bmMsIGdib29sZWFuIGZpcnN0LCBncG9pbnRlciB1c2VyX2RhdGEpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HU1RfRklMVEVSX0hfICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0Zm9ybWF0LmMgYi9nc3QvZ3N0Zm9ybWF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRjM2QwZgotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3Rmb3JtYXQuYwpAQCAtMCwwICsxLDI2NCBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNoZWxsby5iZT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+CisgKgorICogZ3N0Zm9ybWF0LmM6IEdzdEZvcm1hdCByZWdpc3RyYXRpb24KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKioKKyAqIFNFQ1RJT046Z3N0Zm9ybWF0CisgKiBAc2hvcnRfZGVzY3JpcHRpb246IER5bmFtaWNhbGx5IHJlZ2lzdGVyIG5ldyBkYXRhIGZvcm1hdHMKKyAqIEBzZWVfYWxzbzogI0dzdFBhZCwgI0dzdEVsZW1lbnQKKyAqCisgKiBHc3RGb3JtYXRzIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byByZWdpc3RlciBhIG5ldyBmb3JtYXQgdG8gdGhlIGdzdHJlYW1lcgorICogY29yZS4gIEZvcm1hdHMgY2FuIGJlIHVzZWQgdG8gcGVyZm9ybSBzZWVraW5nIG9yIGNvbnZlcnNpb25zL3F1ZXJ5CisgKiBvcGVyYXRpb25zLgorICovCisKKworI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAiZ3N0Zm9ybWF0LmgiCisjaW5jbHVkZSAiZ3N0ZW51bXR5cGVzLmgiCisKK3N0YXRpYyBHU3RhdGljTXV0ZXggbXV0ZXggPSBHX1NUQVRJQ19NVVRFWF9JTklUOworc3RhdGljIEdMaXN0ICpfZ3N0X2Zvcm1hdHMgPSBOVUxMOworc3RhdGljIEdIYXNoVGFibGUgKl9uaWNrX3RvX2Zvcm1hdCA9IE5VTEw7CitzdGF0aWMgR0hhc2hUYWJsZSAqX2Zvcm1hdF90b19uaWNrID0gTlVMTDsKK3N0YXRpYyBndWludDMyIF9uX3ZhbHVlcyA9IDE7ICAgLyogd2Ugc3RhcnQgZnJvbSAxIGJlY2F1c2UgMCByZXNlcnZlZCBmb3IgVU5ERUZJTkVEICovCisKK3N0YXRpYyBHc3RGb3JtYXREZWZpbml0aW9uIHN0YW5kYXJkX2RlZmluaXRpb25zW10gPSB7CisgIHtHU1RfRk9STUFUX0RFRkFVTFQsICJkZWZhdWx0IiwgIkRlZmF1bHQgZm9ybWF0IGZvciB0aGUgbWVkaWEgdHlwZSIsIDB9LAorICB7R1NUX0ZPUk1BVF9CWVRFUywgImJ5dGVzIiwgIkJ5dGVzIiwgMH0sCisgIHtHU1RfRk9STUFUX1RJTUUsICJ0aW1lIiwgIlRpbWUiLCAwfSwKKyAge0dTVF9GT1JNQVRfQlVGRkVSUywgImJ1ZmZlcnMiLCAiQnVmZmVycyIsIDB9LAorICB7R1NUX0ZPUk1BVF9QRVJDRU5ULCAicGVyY2VudCIsICJQZXJjZW50IiwgMH0sCisgIHtHU1RfRk9STUFUX1VOREVGSU5FRCwgTlVMTCwgTlVMTCwgMH0KK307CisKK3ZvaWQKK19wcml2X2dzdF9mb3JtYXRfaW5pdGlhbGl6ZSAodm9pZCkKK3sKKyAgR3N0Rm9ybWF0RGVmaW5pdGlvbiAqc3RhbmRhcmRzID0gc3RhbmRhcmRfZGVmaW5pdGlvbnM7CisKKyAgZ19zdGF0aWNfbXV0ZXhfbG9jayAoJm11dGV4KTsKKyAgaWYgKF9uaWNrX3RvX2Zvcm1hdCA9PSBOVUxMKSB7CisgICAgX25pY2tfdG9fZm9ybWF0ID0gZ19oYXNoX3RhYmxlX25ldyAoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWwpOworICAgIF9mb3JtYXRfdG9fbmljayA9IGdfaGFzaF90YWJsZV9uZXcgKE5VTEwsIE5VTEwpOworICB9CisKKyAgd2hpbGUgKHN0YW5kYXJkcy0+bmljaykgeworICAgIHN0YW5kYXJkcy0+cXVhcmsgPSBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoc3RhbmRhcmRzLT5uaWNrKTsKKyAgICBnX2hhc2hfdGFibGVfaW5zZXJ0IChfbmlja190b19mb3JtYXQsIChncG9pbnRlcikgc3RhbmRhcmRzLT5uaWNrLAorICAgICAgICBzdGFuZGFyZHMpOworICAgIGdfaGFzaF90YWJsZV9pbnNlcnQgKF9mb3JtYXRfdG9fbmljaywgR0lOVF9UT19QT0lOVEVSIChzdGFuZGFyZHMtPnZhbHVlKSwKKyAgICAgICAgc3RhbmRhcmRzKTsKKworICAgIF9nc3RfZm9ybWF0cyA9IGdfbGlzdF9hcHBlbmQgKF9nc3RfZm9ybWF0cywgc3RhbmRhcmRzKTsKKyAgICBzdGFuZGFyZHMrKzsKKyAgICBfbl92YWx1ZXMrKzsKKyAgfQorICAvKiBnZXR0aW5nIHRoZSB0eXBlIHJlZ2lzdGVycyB0aGUgZW51bSAqLworICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfZm9ybWF0X2dldF90eXBlICgpKTsKKyAgZ19zdGF0aWNfbXV0ZXhfdW5sb2NrICgmbXV0ZXgpOworfQorCisvKioKKyAqIGdzdF9mb3JtYXRfZ2V0X25hbWU6CisgKiBAZm9ybWF0OiBhICNHc3RGb3JtYXQKKyAqCisgKiBHZXQgYSBwcmludGFibGUgbmFtZSBmb3IgdGhlIGdpdmVuIGZvcm1hdC4gRG8gbm90IG1vZGlmeSBvciBmcmVlLgorICoKKyAqIFJldHVybnM6IGEgcmVmZXJlbmNlIHRvIHRoZSBzdGF0aWMgbmFtZSBvZiB0aGUgZm9ybWF0IG9yIE5VTEwgaWYKKyAqIHRoZSBmb3JtYXQgaXMgdW5rbm93bi4KKyAqLworY29uc3QgZ2NoYXIgKgorZ3N0X2Zvcm1hdF9nZXRfbmFtZSAoR3N0Rm9ybWF0IGZvcm1hdCkKK3sKKyAgY29uc3QgR3N0Rm9ybWF0RGVmaW5pdGlvbiAqZGVmOworICBjb25zdCBnY2hhciAqcmVzdWx0OworCisgIGlmICgoZGVmID0gZ3N0X2Zvcm1hdF9nZXRfZGV0YWlscyAoZm9ybWF0KSkgIT0gTlVMTCkKKyAgICByZXN1bHQgPSBkZWYtPm5pY2s7CisgIGVsc2UKKyAgICByZXN1bHQgPSBOVUxMOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZ3N0X2Zvcm1hdF90b19xdWFyazoKKyAqIEBmb3JtYXQ6IGEgI0dzdEZvcm1hdAorICoKKyAqIEdldCB0aGUgdW5pcXVlIHF1YXJrIGZvciB0aGUgZ2l2ZW4gZm9ybWF0LgorICoKKyAqIFJldHVybnM6IHRoZSBxdWFyayBhc3NvY2lhdGVkIHdpdGggdGhlIGZvcm1hdCBvciAwIGlmIHRoZSBmb3JtYXQKKyAqIGlzIHVua25vd24uCisgKi8KK0dRdWFyaworZ3N0X2Zvcm1hdF90b19xdWFyayAoR3N0Rm9ybWF0IGZvcm1hdCkKK3sKKyAgY29uc3QgR3N0Rm9ybWF0RGVmaW5pdGlvbiAqZGVmOworICBHUXVhcmsgcmVzdWx0OworCisgIGlmICgoZGVmID0gZ3N0X2Zvcm1hdF9nZXRfZGV0YWlscyAoZm9ybWF0KSkgIT0gTlVMTCkKKyAgICByZXN1bHQgPSBkZWYtPnF1YXJrOworICBlbHNlCisgICAgcmVzdWx0ID0gMDsKKworICByZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGdzdF9mb3JtYXRfcmVnaXN0ZXI6CisgKiBAbmljazogVGhlIG5pY2sgb2YgdGhlIG5ldyBmb3JtYXQKKyAqIEBkZXNjcmlwdGlvbjogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBuZXcgZm9ybWF0CisgKgorICogQ3JlYXRlIGEgbmV3IEdzdEZvcm1hdCBiYXNlZCBvbiB0aGUgbmljayBvciByZXR1cm4gYW4KKyAqIGFscmVhZHkgcmVnaXN0ZXJlZCBmb3JtYXQgd2l0aCB0aGF0IG5pY2suCisgKgorICogUmV0dXJuczogQSBuZXcgR3N0Rm9ybWF0IG9yIGFuIGFscmVhZHkgcmVnaXN0ZXJlZCBmb3JtYXQKKyAqIHdpdGggdGhlIHNhbWUgbmljay4KKyAqCisgKiBNVCBzYWZlLgorICovCitHc3RGb3JtYXQKK2dzdF9mb3JtYXRfcmVnaXN0ZXIgKGNvbnN0IGdjaGFyICogbmljaywgY29uc3QgZ2NoYXIgKiBkZXNjcmlwdGlvbikKK3sKKyAgR3N0Rm9ybWF0RGVmaW5pdGlvbiAqZm9ybWF0OworICBHc3RGb3JtYXQgcXVlcnk7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG5pY2sgIT0gTlVMTCwgR1NUX0ZPUk1BVF9VTkRFRklORUQpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGVzY3JpcHRpb24gIT0gTlVMTCwgR1NUX0ZPUk1BVF9VTkRFRklORUQpOworCisgIHF1ZXJ5ID0gZ3N0X2Zvcm1hdF9nZXRfYnlfbmljayAobmljayk7CisgIGlmIChxdWVyeSAhPSBHU1RfRk9STUFUX1VOREVGSU5FRCkKKyAgICByZXR1cm4gcXVlcnk7CisKKyAgZ19zdGF0aWNfbXV0ZXhfbG9jayAoJm11dGV4KTsKKyAgZm9ybWF0ID0gZ19zbGljZV9uZXcgKEdzdEZvcm1hdERlZmluaXRpb24pOworICBmb3JtYXQtPnZhbHVlID0gKEdzdEZvcm1hdCkgX25fdmFsdWVzOworICBmb3JtYXQtPm5pY2sgPSBnX3N0cmR1cCAobmljayk7CisgIGZvcm1hdC0+ZGVzY3JpcHRpb24gPSBnX3N0cmR1cCAoZGVzY3JpcHRpb24pOworICBmb3JtYXQtPnF1YXJrID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKGZvcm1hdC0+bmljayk7CisKKyAgZ19oYXNoX3RhYmxlX2luc2VydCAoX25pY2tfdG9fZm9ybWF0LCAoZ3BvaW50ZXIpIGZvcm1hdC0+bmljaywgZm9ybWF0KTsKKyAgZ19oYXNoX3RhYmxlX2luc2VydCAoX2Zvcm1hdF90b19uaWNrLCBHSU5UX1RPX1BPSU5URVIgKGZvcm1hdC0+dmFsdWUpLAorICAgICAgZm9ybWF0KTsKKyAgX2dzdF9mb3JtYXRzID0gZ19saXN0X2FwcGVuZCAoX2dzdF9mb3JtYXRzLCBmb3JtYXQpOworICBfbl92YWx1ZXMrKzsKKyAgZ19zdGF0aWNfbXV0ZXhfdW5sb2NrICgmbXV0ZXgpOworCisgIHJldHVybiBmb3JtYXQtPnZhbHVlOworfQorCisvKioKKyAqIGdzdF9mb3JtYXRfZ2V0X2J5X25pY2s6CisgKiBAbmljazogVGhlIG5pY2sgb2YgdGhlIGZvcm1hdAorICoKKyAqIFJldHVybiB0aGUgZm9ybWF0IHJlZ2lzdGVyZWQgd2l0aCB0aGUgZ2l2ZW4gbmljay4KKyAqCisgKiBSZXR1cm5zOiBUaGUgZm9ybWF0IHdpdGggQG5pY2sgb3IgR1NUX0ZPUk1BVF9VTkRFRklORUQKKyAqIGlmIHRoZSBmb3JtYXQgd2FzIG5vdCByZWdpc3RlcmVkLgorICovCitHc3RGb3JtYXQKK2dzdF9mb3JtYXRfZ2V0X2J5X25pY2sgKGNvbnN0IGdjaGFyICogbmljaykKK3sKKyAgR3N0Rm9ybWF0RGVmaW5pdGlvbiAqZm9ybWF0OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuaWNrICE9IE5VTEwsIEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKKworICBnX3N0YXRpY19tdXRleF9sb2NrICgmbXV0ZXgpOworICBmb3JtYXQgPSBnX2hhc2hfdGFibGVfbG9va3VwIChfbmlja190b19mb3JtYXQsIG5pY2spOworICBnX3N0YXRpY19tdXRleF91bmxvY2sgKCZtdXRleCk7CisKKyAgaWYgKGZvcm1hdCAhPSBOVUxMKQorICAgIHJldHVybiBmb3JtYXQtPnZhbHVlOworICBlbHNlCisgICAgcmV0dXJuIEdTVF9GT1JNQVRfVU5ERUZJTkVEOworfQorCisvKioKKyAqIGdzdF9mb3JtYXRzX2NvbnRhaW5zOgorICogQGZvcm1hdHM6IFRoZSBmb3JtYXQgYXJyYXkgdG8gc2VhcmNoCisgKiBAZm9ybWF0OiB0aGUgZm9ybWF0IHRvIGZpbmQKKyAqCisgKiBTZWUgaWYgdGhlIGdpdmVuIGZvcm1hdCBpcyBpbnNpZGUgdGhlIGZvcm1hdCBhcnJheS4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBmb3JtYXQgaXMgZm91bmQgaW5zaWRlIHRoZSBhcnJheQorICovCitnYm9vbGVhbgorZ3N0X2Zvcm1hdHNfY29udGFpbnMgKGNvbnN0IEdzdEZvcm1hdCAqIGZvcm1hdHMsIEdzdEZvcm1hdCBmb3JtYXQpCit7CisgIGlmICghZm9ybWF0cykKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgd2hpbGUgKCpmb3JtYXRzKSB7CisgICAgaWYgKCpmb3JtYXRzID09IGZvcm1hdCkKKyAgICAgIHJldHVybiBUUlVFOworCisgICAgZm9ybWF0cysrOworICB9CisgIHJldHVybiBGQUxTRTsKK30KKworCisvKioKKyAqIGdzdF9mb3JtYXRfZ2V0X2RldGFpbHM6CisgKiBAZm9ybWF0OiBUaGUgZm9ybWF0IHRvIGdldCBkZXRhaWxzIG9mCisgKgorICogR2V0IGRldGFpbHMgYWJvdXQgdGhlIGdpdmVuIGZvcm1hdC4KKyAqCisgKiBSZXR1cm5zOiBUaGUgI0dzdEZvcm1hdERlZmluaXRpb24gZm9yIEBmb3JtYXQgb3IgTlVMTCBvbiBmYWlsdXJlLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK2NvbnN0IEdzdEZvcm1hdERlZmluaXRpb24gKgorZ3N0X2Zvcm1hdF9nZXRfZGV0YWlscyAoR3N0Rm9ybWF0IGZvcm1hdCkKK3sKKyAgY29uc3QgR3N0Rm9ybWF0RGVmaW5pdGlvbiAqcmVzdWx0OworCisgIGdfc3RhdGljX211dGV4X2xvY2sgKCZtdXRleCk7CisgIHJlc3VsdCA9IGdfaGFzaF90YWJsZV9sb29rdXAgKF9mb3JtYXRfdG9fbmljaywgR0lOVF9UT19QT0lOVEVSIChmb3JtYXQpKTsKKyAgZ19zdGF0aWNfbXV0ZXhfdW5sb2NrICgmbXV0ZXgpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZ3N0X2Zvcm1hdF9pdGVyYXRlX2RlZmluaXRpb25zOgorICoKKyAqIEl0ZXJhdGUgYWxsIHRoZSByZWdpc3RlcmVkIGZvcm1hdHMuIFRoZSBmb3JtYXQgZGVmaW5pdGlvbiBpcyByZWFkCisgKiBvbmx5LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBHc3RJdGVyYXRvciBvZiAjR3N0Rm9ybWF0RGVmaW5pdGlvbi4KKyAqLworR3N0SXRlcmF0b3IgKgorZ3N0X2Zvcm1hdF9pdGVyYXRlX2RlZmluaXRpb25zICh2b2lkKQoreworICBHc3RJdGVyYXRvciAqcmVzdWx0OworCisgIGdfc3RhdGljX211dGV4X2xvY2sgKCZtdXRleCk7CisgIC8qIEZJWE1FOiByZWdpc3RlciBhIGJveGVkIHR5cGUgZm9yIEdzdEZvcm1hdERlZmluaXRpb24gKi8KKyAgcmVzdWx0ID0gZ3N0X2l0ZXJhdG9yX25ld19saXN0IChHX1RZUEVfUE9JTlRFUiwKKyAgICAgIGdfc3RhdGljX211dGV4X2dldF9tdXRleCAoJm11dGV4KSwgJl9uX3ZhbHVlcywgJl9nc3RfZm9ybWF0cywgTlVMTCwgTlVMTCk7CisgIGdfc3RhdGljX211dGV4X3VubG9jayAoJm11dGV4KTsKKworICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGZvcm1hdC5oIGIvZ3N0L2dzdGZvcm1hdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmOGIzNjIKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0Zm9ybWF0LmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BjaGVsbG8uYmU+CisgKgorICogZ3N0Zm9ybWF0Lmg6IEhlYWRlciBmb3IgR3N0Rm9ybWF0IHR5cGVzIHVzZWQgaW4gcXVlcmllcyBhbmQKKyAqICAgICAgICAgICAgICBzZWVraW5nLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworI2lmbmRlZiBfX0dTVF9GT1JNQVRfSF9fCisjZGVmaW5lIF9fR1NUX0ZPUk1BVF9IX18KKworI2luY2x1ZGUgPGdsaWIuaD4KKworI2luY2x1ZGUgPGdzdC9nc3RpdGVyYXRvci5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICogR3N0Rm9ybWF0OgorICogQEdTVF9GT1JNQVRfVU5ERUZJTkVEOiB1bmRlZmluZWQgZm9ybWF0CisgKiBAR1NUX0ZPUk1BVF9ERUZBVUxUOiB0aGUgZGVmYXVsdCBmb3JtYXQgb2YgdGhlIHBhZC9lbGVtZW50LiBUaGlzIGNhbiBiZQorICogICAgc2FtcGxlcyBmb3IgcmF3IGF1ZGlvLCBmcmFtZXMvZmllbGRzIGZvciByYXcgdmlkZW8gKHNvbWUsIGJ1dCBub3QgYWxsLAorICogICAgZWxlbWVudHMgc3VwcG9ydCB0aGlzOyB1c2UgQEdTVF9GT1JNQVRfVElNRSBpZiB5b3UgZG9uJ3QgaGF2ZSBhIGdvb2QKKyAqICAgIHJlYXNvbiB0byBxdWVyeSBmb3Igc2FtcGxlcy9mcmFtZXMpCisgKiBAR1NUX0ZPUk1BVF9CWVRFUzogYnl0ZXMKKyAqIEBHU1RfRk9STUFUX1RJTUU6IHRpbWUgaW4gbmFub3NlY29uZHMKKyAqIEBHU1RfRk9STUFUX0JVRkZFUlM6IGJ1ZmZlcnMgKGZldywgaWYgYW55LCBlbGVtZW50cyBpbXBsZW1lbnQgdGhpcyBhcyBvZgorICogICAgIE1heSAyMDA5KQorICogQEdTVF9GT1JNQVRfUEVSQ0VOVDogcGVyY2VudGFnZSBvZiBzdHJlYW0gKGZldywgaWYgYW55LCBlbGVtZW50cyBpbXBsZW1lbnQKKyAqICAgICB0aGlzIGFzIG9mIE1heSAyMDA5KQorICoKKyAqIFN0YW5kYXJkIHByZWRlZmluZWQgZm9ybWF0cworICovCisvKiBOT1RFOiBkb24ndCBmb3JnZXQgdG8gdXBkYXRlIHRoZSB0YWJsZSBpbiBnc3Rmb3JtYXQuYyB3aGVuIGNoYW5naW5nCisgKiB0aGlzIGVudW0gKi8KK3R5cGVkZWYgZW51bSB7CisgIEdTVF9GT1JNQVRfVU5ERUZJTkVEIAk9ICAwLCAvKiBtdXN0IGJlIGZpcnN0IGluIGxpc3QgKi8KKyAgR1NUX0ZPUk1BVF9ERUZBVUxUICAgCT0gIDEsCisgIEdTVF9GT1JNQVRfQllURVMgICAJPSAgMiwKKyAgR1NUX0ZPUk1BVF9USU1FIAk9ICAzLAorICBHU1RfRk9STUFUX0JVRkZFUlMJPSAgNCwKKyAgR1NUX0ZPUk1BVF9QRVJDRU5UCT0gIDUKK30gR3N0Rm9ybWF0OworCisvKiBhIHBlcmNlbnRhZ2UgaXMgYWx3YXlzIHJlbGF0aXZlIHRvIDEwMDAwMDAgKi8KKy8qKgorICogR1NUX0ZPUk1BVF9QRVJDRU5UX01BWDoKKyAqCisgKiBUaGUgUEVSQ0VOVCBmb3JtYXQgaXMgYmV0d2VlbiAwIGFuZCB0aGlzIHZhbHVlCisgKi8KKyNkZWZpbmUJR1NUX0ZPUk1BVF9QRVJDRU5UX01BWAkJR19HSU5UNjRfQ09OU1RBTlQgKDEwMDAwMDApCisvKioKKyAqIEdTVF9GT1JNQVRfUEVSQ0VOVF9TQ0FMRToKKyAqCisgKiBUaGUgdmFsdWUgdXNlZCB0byBzY2FsZSBkb3duIHRoZSByZXBvcnRlZCBQRVJDRU5UIGZvcm1hdCB2YWx1ZSB0bworICogaXRzIHJlYWwgdmFsdWUuCisgKi8KKyNkZWZpbmUJR1NUX0ZPUk1BVF9QRVJDRU5UX1NDQUxFCUdfR0lOVDY0X0NPTlNUQU5UICgxMDAwMCkKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdEZvcm1hdERlZmluaXRpb24gR3N0Rm9ybWF0RGVmaW5pdGlvbjsKKworLyoqCisgKiBHc3RGb3JtYXREZWZpbml0aW9uOgorICogQHZhbHVlOiBUaGUgdW5pcXVlIGlkIG9mIHRoaXMgZm9ybWF0CisgKiBAbmljazogQSBzaG9ydCBuaWNrIG9mIHRoZSBmb3JtYXQKKyAqIEBkZXNjcmlwdGlvbjogQSBsb25nZXIgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdAorICogQHF1YXJrOiBBIHF1YXJrIGZvciB0aGUgbmljaworICoKKyAqIEEgZm9ybWF0IGRlZmluaXRpb24KKyAqLworc3RydWN0IF9Hc3RGb3JtYXREZWZpbml0aW9uCit7CisgIEdzdEZvcm1hdCAgICB2YWx1ZTsKKyAgY29uc3QgZ2NoYXIgKm5pY2s7CisgIGNvbnN0IGdjaGFyICpkZXNjcmlwdGlvbjsKKyAgR1F1YXJrICAgICAgIHF1YXJrOworfTsKKworY29uc3QgZ2NoYXIqICAgIGdzdF9mb3JtYXRfZ2V0X25hbWUgICAgICAgICAgICAgKEdzdEZvcm1hdCBmb3JtYXQpOworR1F1YXJrICAgICAgICAgIGdzdF9mb3JtYXRfdG9fcXVhcmsgICAgICAgICAgICAgKEdzdEZvcm1hdCBmb3JtYXQpOworCisvKiByZWdpc3RlciBhIG5ldyBmb3JtYXQgKi8KK0dzdEZvcm1hdAlnc3RfZm9ybWF0X3JlZ2lzdGVyCQkoY29uc3QgZ2NoYXIgKm5pY2ssCisJCQkJCQkgY29uc3QgZ2NoYXIgKmRlc2NyaXB0aW9uKTsKK0dzdEZvcm1hdAlnc3RfZm9ybWF0X2dldF9ieV9uaWNrCQkoY29uc3QgZ2NoYXIgKm5pY2spOworCisvKiBjaGVjayBpZiBhIGZvcm1hdCBpcyBpbiBhbiBhcnJheSBvZiBmb3JtYXRzICovCitnYm9vbGVhbglnc3RfZm9ybWF0c19jb250YWlucwkJKGNvbnN0IEdzdEZvcm1hdCAqZm9ybWF0cywgR3N0Rm9ybWF0IGZvcm1hdCk7CisKKy8qIHF1ZXJ5IGZvciBmb3JtYXQgZGV0YWlscyAqLworY29uc3QgR3N0Rm9ybWF0RGVmaW5pdGlvbioKKwkJZ3N0X2Zvcm1hdF9nZXRfZGV0YWlscwkJKEdzdEZvcm1hdCBmb3JtYXQpOworR3N0SXRlcmF0b3IqIAlnc3RfZm9ybWF0X2l0ZXJhdGVfZGVmaW5pdGlvbnMgCSh2b2lkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fR1NUX0ZPUk1BVF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RnaG9zdHBhZC5jIGIvZ3N0L2dzdGdob3N0cGFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjczOTk4OAotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RnaG9zdHBhZC5jCkBAIC0wLDAgKzEsMTMxMiBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgorICogICAgICAgICAgICAgICAgICAgIDIwMDUgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorICoJCSAgICAgIDIwMDYgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKyAqCisgKiBnc3RnaG9zdHBhZC5jOiBQcm94eSBwYWRzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoqCisgKiBTRUNUSU9OOmdzdGdob3N0cGFkCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IFBzZXVkbyBsaW5rIHBhZHMKKyAqIEBzZWVfYWxzbzogI0dzdFBhZAorICoKKyAqIEdob3N0UGFkcyBhcmUgdXNlZnVsIHdoZW4gb3JnYW5pemluZyBwaXBlbGluZXMgd2l0aCAjR3N0QmluIGxpa2UgZWxlbWVudHMuCisgKiBUaGUgaWRlYSBoZXJlIGlzIHRvIGNyZWF0ZSBoaWVyYXJjaGljYWwgZWxlbWVudCBncmFwaHMuIFRoZSBiaW4gZWxlbWVudAorICogY29udGFpbnMgYSBzdWItZ3JhcGguIE5vdyBvbmUgd291bGQgbGlrZSB0byB0cmVhdCB0aGUgYmluLWVsZW1lbnQgbGlrZSBhbnkKKyAqIG90aGVyICNHc3RFbGVtZW50LiBUaGlzIGlzIHdoZXJlIEdob3N0UGFkcyBjb21lIGludG8gcGxheS4gQSBHaG9zdFBhZCBhY3RzIGFzCisgKiBhIHByb3h5IGZvciBhbm90aGVyIHBhZC4gVGh1cyB0aGUgYmluIGNhbiBoYXZlIHNpbmsgYW5kIHNvdXJjZSBnaG9zdC1wYWRzCisgKiB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggc2luayBhbmQgc291cmNlIHBhZHMgb2YgdGhlIGNoaWxkIGVsZW1lbnRzLgorICoKKyAqIElmIHRoZSB0YXJnZXQgcGFkIGlzIGtub3duIGF0IGNyZWF0aW9uIHRpbWUsIGdzdF9naG9zdF9wYWRfbmV3KCkgaXMgdGhlCisgKiBmdW5jdGlvbiB0byB1c2UgdG8gZ2V0IGEgZ2hvc3QtcGFkLiBPdGhlcndpc2Ugb25lIGNhbiB1c2UgZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0KCkKKyAqIHRvIGNyZWF0ZSB0aGUgZ2hvc3QtcGFkIGFuZCB1c2UgZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0KCkgdG8gZXN0YWJsaXNoIHRoZQorICogYXNzb2NpYXRpb24gbGF0ZXIgb24uCisgKgorICogTm90ZSB0aGF0IEdob3N0UGFkcyBhZGQgb3ZlcmhlYWQgdG8gdGhlIGRhdGEgcHJvY2Vzc2luZyBvZiBhIHBpcGVsaW5lLgorICoKKyAqIExhc3QgcmV2aWV3ZWQgb24gMjAwNS0xMS0xOCAoMC45LjUpCisgKi8KKworI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCisjaW5jbHVkZSAiZ3N0aW5mby5oIgorCisjaW5jbHVkZSAiZ3N0Z2hvc3RwYWQuaCIKKyNpbmNsdWRlICJnc3QuaCIKKworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgR1NUX0NBVF9QQURTCisKKyNkZWZpbmUgR1NUX1BST1hZX1BBRF9DQVNUKG9iaikgICAgICAgICAoKEdzdFByb3h5UGFkICopb2JqKQorI2RlZmluZSBHU1RfUFJPWFlfUEFEX1BSSVZBVEUob2JqKSAgICAgIChHU1RfUFJPWFlfUEFEX0NBU1QgKG9iaiktPnByaXYpCisjZGVmaW5lIEdTVF9QUk9YWV9QQURfVEFSR0VUKHBhZCkgICAgICAgKEdTVF9QUk9YWV9QQURfUFJJVkFURSAocGFkKS0+dGFyZ2V0KQorI2RlZmluZSBHU1RfUFJPWFlfUEFEX0lOVEVSTkFMKHBhZCkgICAgIChHU1RfUFJPWFlfUEFEX1BSSVZBVEUgKHBhZCktPmludGVybmFsKQorI2RlZmluZSBHU1RfUFJPWFlfUEFEX1JFVEFSR0VUKHBhZCkgICAgIChHU1RfUFJPWFlfUEFEX1BSSVZBVEUgKHBhZCktPnJldGFyZ2V0KQorI2RlZmluZSBHU1RfUFJPWFlfR0VUX0xPQ0socGFkKSAoR1NUX1BST1hZX1BBRF9QUklWQVRFIChwYWQpLT5wcm94eV9sb2NrKQorI2RlZmluZSBHU1RfUFJPWFlfTE9DSyhwYWQpICAgICAoZ19tdXRleF9sb2NrIChHU1RfUFJPWFlfR0VUX0xPQ0sgKHBhZCkpKQorI2RlZmluZSBHU1RfUFJPWFlfVU5MT0NLKHBhZCkgICAoZ19tdXRleF91bmxvY2sgKEdTVF9QUk9YWV9HRVRfTE9DSyAocGFkKSkpCisKK3N0cnVjdCBfR3N0UHJveHlQYWRQcml2YXRlCit7CisgIC8qIHdpdGggUFJPWFlfTE9DSyAqLworICBHTXV0ZXggKnByb3h5X2xvY2s7CisgIEdzdFBhZCAqdGFyZ2V0OworICBHc3RQYWQgKmludGVybmFsOworICBnYm9vbGVhbiByZXRhcmdldDsKK307CisKK0dfREVGSU5FX1RZUEUgKEdzdFByb3h5UGFkLCBnc3RfcHJveHlfcGFkLCBHU1RfVFlQRV9QQUQpOworCitzdGF0aWMgR3N0UGFkICpnc3RfcHJveHlfcGFkX2dldF90YXJnZXQgKEdzdFBhZCAqIHBhZCk7CisKK3N0YXRpYyB2b2lkIGdzdF9wcm94eV9wYWRfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7CitzdGF0aWMgdm9pZCBnc3RfcHJveHlfcGFkX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKKworLyoqCisgKiBnc3RfcHJveHlfcGFkX3F1ZXJ5X3R5cGVfZGVmYXVsdDoKKyAqIEBwYWQ6IGEgI0dzdFBhZC4KKyAqCisgKiBJbnZva2UgdGhlIGRlZmF1bHQgcXVlcnkgdHlwZSBoYW5kbGVyIG9mIHRoZSBwcm94eSBwYWQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpIChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSk6IGEgemVyby10ZXJtaW5hdGVkIGFycmF5CisgKiAgICAgb2YgI0dzdFF1ZXJ5VHlwZS4KKyAqCisgKiBTaW5jZTogMC4xMC4zNQorICovCitjb25zdCBHc3RRdWVyeVR5cGUgKgorZ3N0X3Byb3h5X3BhZF9xdWVyeV90eXBlX2RlZmF1bHQgKEdzdFBhZCAqIHBhZCkKK3sKKyAgR3N0UGFkICp0YXJnZXQ7CisgIGNvbnN0IEdzdFF1ZXJ5VHlwZSAqcmVzID0gTlVMTDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BST1hZX1BBRCAocGFkKSwgTlVMTCk7CisKKyAgaWYgKCEodGFyZ2V0ID0gZ3N0X3Byb3h5X3BhZF9nZXRfdGFyZ2V0IChwYWQpKSkKKyAgICBnb3RvIG5vX3RhcmdldDsKKworICByZXMgPSBnc3RfcGFkX2dldF9xdWVyeV90eXBlcyAodGFyZ2V0KTsKKyAgZ3N0X29iamVjdF91bnJlZiAodGFyZ2V0KTsKKworICByZXR1cm4gcmVzOworCisgIC8qIEVSUk9SUyAqLworbm9fdGFyZ2V0OgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAibm8gdGFyZ2V0IHBhZCIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCisvKioKKyAqIGdzdF9wcm94eV9wYWRfZXZlbnRfZGVmYXVsdDoKKyAqIEBwYWQ6IGEgI0dzdFBhZCB0byBwdXNoIHRoZSBldmVudCB0by4KKyAqIEBldmVudDogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdEV2ZW50IHRvIHNlbmQgdG8gdGhlIHBhZC4KKyAqCisgKiBJbnZva2UgdGhlIGRlZmF1bHQgZXZlbnQgb2YgdGhlIHByb3h5IHBhZC4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBldmVudCB3YXMgaGFuZGxlZC4KKyAqCisgKiBTaW5jZTogMC4xMC4zNQorICovCitnYm9vbGVhbgorZ3N0X3Byb3h5X3BhZF9ldmVudF9kZWZhdWx0IChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpCit7CisgIGdib29sZWFuIHJlczsKKyAgR3N0UGFkICppbnRlcm5hbDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BST1hZX1BBRCAocGFkKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VWRU5UIChldmVudCksIEZBTFNFKTsKKworICBpbnRlcm5hbCA9IEdTVF9QUk9YWV9QQURfSU5URVJOQUwgKHBhZCk7CisgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAoaW50ZXJuYWwsIGV2ZW50KTsKKworICByZXR1cm4gcmVzOworfQorCisvKioKKyAqIGdzdF9wcm94eV9wYWRfcXVlcnlfZGVmYXVsdDoKKyAqIEBwYWQ6IGEgI0dzdFBhZCB0byBpbnZva2UgdGhlIGRlZmF1bHQgcXVlcnkgb24uCisgKiBAcXVlcnk6ICh0cmFuc2ZlciBub25lKTogdGhlICNHc3RRdWVyeSB0byBwZXJmb3JtLgorICoKKyAqIEludm9rZSB0aGUgZGVmYXVsdCBxdWVyeSBmdW5jdGlvbiBvZiB0aGUgcHJveHkgcGFkLgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIHF1ZXJ5IGNvdWxkIGJlIHBlcmZvcm1lZC4KKyAqCisgKiBTaW5jZTogMC4xMC4zNQorICovCitnYm9vbGVhbgorZ3N0X3Byb3h5X3BhZF9xdWVyeV9kZWZhdWx0IChHc3RQYWQgKiBwYWQsIEdzdFF1ZXJ5ICogcXVlcnkpCit7CisgIGdib29sZWFuIHJlczsKKyAgR3N0UGFkICp0YXJnZXQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QUk9YWV9QQUQgKHBhZCksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19RVUVSWSAocXVlcnkpLCBGQUxTRSk7CisKKyAgaWYgKCEodGFyZ2V0ID0gZ3N0X3Byb3h5X3BhZF9nZXRfdGFyZ2V0IChwYWQpKSkKKyAgICBnb3RvIG5vX3RhcmdldDsKKworICByZXMgPSBnc3RfcGFkX3F1ZXJ5ICh0YXJnZXQsIHF1ZXJ5KTsKKyAgZ3N0X29iamVjdF91bnJlZiAodGFyZ2V0KTsKKworICByZXR1cm4gcmVzOworCisgIC8qIEVSUk9SUyAqLworbm9fdGFyZ2V0OgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAibm8gdGFyZ2V0IHBhZCIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCisvKioKKyAqIGdzdF9wcm95eF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19kZWZhdWx0OgorICogQHBhZDogdGhlICNHc3RQYWQgdG8gZ2V0IHRoZSBpbnRlcm5hbCBsaW5rcyBvZi4KKyAqCisgKiBJbnZva2UgdGhlIGRlZmF1bHQgaXRlcmF0ZSBpbnRlcm5hbCBsaW5rcyBmdW5jdGlvbiBvZiB0aGUgcHJveHkgcGFkLgorICoKKyAqIFJldHVybnM6IGEgI0dzdEl0ZXJhdG9yIG9mICNHc3RQYWQsIG9yIE5VTEwgaWYgQHBhZCBoYXMgbm8gcGFyZW50LiBVbnJlZiBlYWNoCisgKiByZXR1cm5lZCBwYWQgd2l0aCBnc3Rfb2JqZWN0X3VucmVmKCkuCisgKgorICogU2luY2U6IDAuMTAuMzUKKyAqLworR3N0SXRlcmF0b3IgKgorZ3N0X3Byb3h5X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2RlZmF1bHQgKEdzdFBhZCAqIHBhZCkKK3sKKyAgR3N0SXRlcmF0b3IgKnJlcyA9IE5VTEw7CisgIEdzdFBhZCAqaW50ZXJuYWw7CisgIEdWYWx1ZSB2ID0geyAwLCB9OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUFJPWFlfUEFEIChwYWQpLCBOVUxMKTsKKworICBpbnRlcm5hbCA9IEdTVF9QUk9YWV9QQURfSU5URVJOQUwgKHBhZCk7CisgIGdfdmFsdWVfaW5pdCAoJnYsIEdTVF9UWVBFX1BBRCk7CisgIGdfdmFsdWVfc2V0X29iamVjdCAoJnYsIGludGVybmFsKTsKKyAgcmVzID0gZ3N0X2l0ZXJhdG9yX25ld19zaW5nbGUgKEdTVF9UWVBFX1BBRCwgJnYpOworICBnX3ZhbHVlX3Vuc2V0ICgmdik7CisgIGdzdF9vYmplY3RfdW5yZWYgKGludGVybmFsKTsKKworICByZXR1cm4gcmVzOworfQorCisvKioKKyAqIGdzdF9wcm94eV9wYWRfY2hhaW5fZGVmYXVsdDoKKyAqIEBwYWQ6IGEgc2luayAjR3N0UGFkLCByZXR1cm5zIEdTVF9GTE9XX0VSUk9SIGlmIG5vdC4KKyAqIEBidWZmZXI6ICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RCdWZmZXIgdG8gc2VuZCwgcmV0dXJuIEdTVF9GTE9XX0VSUk9SCisgKiAgICAgaWYgbm90LgorICoKKyAqIEludm9rZSB0aGUgZGVmYXVsdCBjaGFpbiBmdW5jdGlvbiBvZiB0aGUgcHJveHkgcGFkLgorICoKKyAqIFJldHVybnM6IGEgI0dzdEZsb3dSZXR1cm4gZnJvbSB0aGUgcGFkLgorICoKKyAqIFNpbmNlOiAwLjEwLjM1CisgKi8KK0dzdEZsb3dSZXR1cm4KK2dzdF9wcm94eV9wYWRfY2hhaW5fZGVmYXVsdCAoR3N0UGFkICogcGFkLCBHc3RCdWZmZXIgKiBidWZmZXIpCit7CisgIEdzdEZsb3dSZXR1cm4gcmVzOworICBHc3RQYWQgKmludGVybmFsOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUFJPWFlfUEFEIChwYWQpLCBHU1RfRkxPV19FUlJPUik7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVGRkVSIChidWZmZXIpLCBHU1RfRkxPV19FUlJPUik7CisKKyAgaW50ZXJuYWwgPSBHU1RfUFJPWFlfUEFEX0lOVEVSTkFMIChwYWQpOworICByZXMgPSBnc3RfcGFkX3B1c2ggKGludGVybmFsLCBidWZmZXIpOworCisgIHJldHVybiByZXM7Cit9CisKKy8qKgorICogZ3N0X3Byb3h5X3BhZF9jaGFpbl9saXN0X2RlZmF1bHQ6CisgKiBAcGFkOiBhIHNpbmsgI0dzdFBhZCwgcmV0dXJucyBHU1RfRkxPV19FUlJPUiBpZiBub3QuCisgKiBAbGlzdDogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdEJ1ZmZlckxpc3QgdG8gc2VuZCwgcmV0dXJuIEdTVF9GTE9XX0VSUk9SCisgKiAgICAgaWYgbm90LgorICoKKyAqIEludm9rZSB0aGUgZGVmYXVsdCBjaGFpbiBsaXN0IGZ1bmN0aW9uIG9mIHRoZSBwcm94eSBwYWQuCisgKgorICogUmV0dXJuczogYSAjR3N0Rmxvd1JldHVybiBmcm9tIHRoZSBwYWQuCisgKgorICogU2luY2U6IDAuMTAuMzUKKyAqLworR3N0Rmxvd1JldHVybgorZ3N0X3Byb3h5X3BhZF9jaGFpbl9saXN0X2RlZmF1bHQgKEdzdFBhZCAqIHBhZCwgR3N0QnVmZmVyTGlzdCAqIGxpc3QpCit7CisgIEdzdEZsb3dSZXR1cm4gcmVzOworICBHc3RQYWQgKmludGVybmFsOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUFJPWFlfUEFEIChwYWQpLCBHU1RfRkxPV19FUlJPUik7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVGRkVSX0xJU1QgKGxpc3QpLCBHU1RfRkxPV19FUlJPUik7CisKKyAgaW50ZXJuYWwgPSBHU1RfUFJPWFlfUEFEX0lOVEVSTkFMIChwYWQpOworICByZXMgPSBnc3RfcGFkX3B1c2hfbGlzdCAoaW50ZXJuYWwsIGxpc3QpOworCisgIHJldHVybiByZXM7Cit9CisKKy8qKgorICogZ3N0X3Byb3h5X3BhZF9nZXRfcmFuZ2VfZGVmYXVsdDoKKyAqIEBwYWQ6IGEgc3JjICNHc3RQYWQsIHJldHVybnMgI0dTVF9GTE9XX0VSUk9SIGlmIG5vdC4KKyAqIEBvZmZzZXQ6IFRoZSBzdGFydCBvZmZzZXQgb2YgdGhlIGJ1ZmZlcgorICogQHNpemU6IFRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlcgorICogQGJ1ZmZlcjogKG91dCBjYWxsZWUtYWxsb2NhdGVzKTogYSBwb2ludGVyIHRvIGhvbGQgdGhlICNHc3RCdWZmZXIsCisgKiAgICAgcmV0dXJucyAjR1NUX0ZMT1dfRVJST1IgaWYgJU5VTEwuCisgKgorICogSW52b2tlIHRoZSBkZWZhdWx0IGdldHJhbmdlIGZ1bmN0aW9uIG9mIHRoZSBwcm94eSBwYWQuCisgKgorICogUmV0dXJuczogYSAjR3N0Rmxvd1JldHVybiBmcm9tIHRoZSBwYWQuCisgKgorICogU2luY2U6IDAuMTAuMzUKKyAqLworR3N0Rmxvd1JldHVybgorZ3N0X3Byb3h5X3BhZF9nZXRyYW5nZV9kZWZhdWx0IChHc3RQYWQgKiBwYWQsIGd1aW50NjQgb2Zmc2V0LCBndWludCBzaXplLAorICAgIEdzdEJ1ZmZlciAqKiBidWZmZXIpCit7CisgIEdzdEZsb3dSZXR1cm4gcmVzOworICBHc3RQYWQgKmludGVybmFsOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUFJPWFlfUEFEIChwYWQpLCBHU1RfRkxPV19FUlJPUik7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChidWZmZXIgIT0gTlVMTCwgR1NUX0ZMT1dfRVJST1IpOworCisgIGludGVybmFsID0gR1NUX1BST1hZX1BBRF9JTlRFUk5BTCAocGFkKTsKKyAgcmVzID0gZ3N0X3BhZF9wdWxsX3JhbmdlIChpbnRlcm5hbCwgb2Zmc2V0LCBzaXplLCBidWZmZXIpOworCisgIHJldHVybiByZXM7Cit9CisKKy8qKgorICogZ3N0X3Byb3h5X3BhZF9nZXRjYXBzX2RlZmF1bHQ6CisgKiBAcGFkOiBhICNHc3RQYWQgdG8gZ2V0IHRoZSBjYXBhYmlsaXRpZXMgb2YuCisgKiBAZmlsdGVyOiBhICNHc3RDYXBzIGZpbHRlci4KKyAqCisgKiBJbnZva2UgdGhlIGRlZmF1bHQgZ2V0Y2FwcyBmdW5jdGlvbiBvZiB0aGUgcHJveHkgcGFkLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIGNhcHMgb2YgdGhlIHBhZCB3aXRoIGluY3JlbWVudGVkIHJlZi1jb3VudAorICoKKyAqIFNpbmNlOiAwLjEwLjM1CisgKi8KK0dzdENhcHMgKgorZ3N0X3Byb3h5X3BhZF9nZXRjYXBzX2RlZmF1bHQgKEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGZpbHRlcikKK3sKKyAgR3N0UGFkICp0YXJnZXQ7CisgIEdzdENhcHMgKnJlczsKKyAgR3N0UGFkVGVtcGxhdGUgKnRlbXBsOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUFJPWFlfUEFEIChwYWQpLCBOVUxMKTsKKworICB0ZW1wbCA9IEdTVF9QQURfUEFEX1RFTVBMQVRFIChwYWQpOworICB0YXJnZXQgPSBnc3RfcHJveHlfcGFkX2dldF90YXJnZXQgKHBhZCk7CisgIGlmICh0YXJnZXQpIHsKKyAgICAvKiBpZiB3ZSBoYXZlIGEgcmVhbCB0YXJnZXQsIHByb3h5IHRoZSBjYWxsICovCisgICAgcmVzID0gZ3N0X3BhZF9nZXRfY2FwcyAodGFyZ2V0LCBmaWx0ZXIpOworCisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiZ2V0IGNhcHMgb2YgdGFyZ2V0ICVzOiVzIDogJSIgR1NUX1BUUl9GT1JNQVQsCisgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAodGFyZ2V0KSwgcmVzKTsKKworICAgIGdzdF9vYmplY3RfdW5yZWYgKHRhcmdldCk7CisKKyAgICAvKiBmaWx0ZXIgYWdhaW5zdCB0aGUgdGVtcGxhdGUgKi8KKyAgICBpZiAodGVtcGwgJiYgcmVzKSB7CisgICAgICBHc3RDYXBzICpmaWx0LCAqdG1wOworCisgICAgICBmaWx0ID0gR1NUX1BBRF9URU1QTEFURV9DQVBTICh0ZW1wbCk7CisgICAgICBpZiAoZmlsdCkgeworICAgICAgICB0bXAgPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAocmVzLCBmaWx0LCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOworICAgICAgICBnc3RfY2Fwc191bnJlZiAocmVzKTsKKyAgICAgICAgcmVzID0gdG1wOworICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsCisgICAgICAgICAgICAiZmlsdGVyZWQgYWdhaW5zdCB0ZW1wbGF0ZSBnaXZlcyAlIiBHU1RfUFRSX0ZPUk1BVCwgcmVzKTsKKyAgICAgIH0KKyAgICB9CisgIH0gZWxzZSB7CisgICAgLyogZWxzZSwgaWYgd2UgaGF2ZSBhIHRlbXBsYXRlLCB1c2UgaXRzIGNhcHMuICovCisgICAgaWYgKHRlbXBsKSB7CisgICAgICByZXMgPSBHU1RfUEFEX1RFTVBMQVRFX0NBUFMgKHRlbXBsKTsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwKKyAgICAgICAgICAidXNpbmcgcGFkIHRlbXBsYXRlICVwIHdpdGggY2FwcyAlcCAlIiBHU1RfUFRSX0ZPUk1BVCwgdGVtcGwsIHJlcywKKyAgICAgICAgICByZXMpOworICAgICAgcmVzID0gZ3N0X2NhcHNfcmVmIChyZXMpOworCisgICAgICBpZiAoZmlsdGVyKSB7CisgICAgICAgIEdzdENhcHMgKmludGVyc2VjdGlvbiA9CisgICAgICAgICAgICBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCByZXMsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7CisKKyAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKHJlcyk7CisgICAgICAgIHJlcyA9IGludGVyc2VjdGlvbjsKKyAgICAgIH0KKworICAgICAgZ290byBkb25lOworICAgIH0KKworICAgIC8qIGxhc3QgcmVzb3J0LCBhbnkgY2FwcyAqLworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInBhZCBoYXMgbm8gdGVtcGxhdGUsIHJldHVybmluZyBBTlkiKTsKKyAgICByZXMgPSBnc3RfY2Fwc19uZXdfYW55ICgpOworICB9CisKK2RvbmU6CisgIHJldHVybiByZXM7Cit9CisKKy8qKgorICogZ3N0X3Byb3h5X3BhZF9hY2NlcHRjYXBzX2RlZmF1bHQ6CisgKiBAcGFkOiBhICNHc3RQYWQgdG8gY2hlY2sKKyAqIEBjYXBzOiBhICNHc3RDYXBzIHRvIGNoZWNrIG9uIHRoZSBwYWQKKyAqCisgKiBJbnZva2UgdGhlIGRlZmF1bHQgYWNjZXB0Y2FwcyBmdW5jdGlvbiBvZiB0aGUgcHJveHkgcGFkLgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIHBhZCBjYW4gYWNjZXB0IHRoZSBjYXBzLgorICoKKyAqIFNpbmNlOiAwLjEwLjM1CisgKi8KK2dib29sZWFuCitnc3RfcHJveHlfcGFkX2FjY2VwdGNhcHNfZGVmYXVsdCAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogY2FwcykKK3sKKyAgR3N0UGFkICp0YXJnZXQ7CisgIGdib29sZWFuIHJlczsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BST1hZX1BBRCAocGFkKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoY2FwcyA9PSBOVUxMIHx8IEdTVF9JU19DQVBTIChjYXBzKSwgRkFMU0UpOworCisgIHRhcmdldCA9IGdzdF9wcm94eV9wYWRfZ2V0X3RhcmdldCAocGFkKTsKKyAgaWYgKHRhcmdldCkgeworICAgIHJlcyA9IGdzdF9wYWRfYWNjZXB0X2NhcHMgKHRhcmdldCwgY2Fwcyk7CisgICAgZ3N0X29iamVjdF91bnJlZiAodGFyZ2V0KTsKKyAgfSBlbHNlIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJubyB0YXJnZXQiKTsKKyAgICAvKiBXZSBkb24ndCBoYXZlIGEgdGFyZ2V0LCB3ZSByZXR1cm4gVFJVRSBhbmQgd2UgYXNzdW1lIHRoYXQgYW55IGZ1dHVyZQorICAgICAqIHRhcmdldCB3aWxsIGJlIGFibGUgdG8gZGVhbCB3aXRoIGFueSBjb25maWd1cmVkIGNhcHMuICovCisgICAgcmVzID0gVFJVRTsKKyAgfQorCisgIHJldHVybiByZXM7Cit9CisKKy8qKgorICogZ3N0X3Byb3h5X3BhZF9maXhhdGVjYXBzX2RlZmF1bHQ6CisgKiBAcGFkOiBhICAjR3N0UGFkIHRvIGZpeGF0ZQorICogQGNhcHM6IHRoZSAgI0dzdENhcHMgdG8gZml4YXRlCisgKgorICogSW52b2tlIHRoZSBkZWZhdWx0IGZpeGF0ZWNhcHMgZnVuY3Rpb24gb2YgdGhlIHByb3h5IHBhZC4KKyAqCisgKiBTaW5jZTogMC4xMC4zNQorICovCit2b2lkCitnc3RfcHJveHlfcGFkX2ZpeGF0ZWNhcHNfZGVmYXVsdCAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogY2FwcykKK3sKKyAgR3N0UGFkICp0YXJnZXQ7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1BST1hZX1BBRCAocGFkKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19DQVBTIChjYXBzKSk7CisKKyAgaWYgKCEodGFyZ2V0ID0gZ3N0X3Byb3h5X3BhZF9nZXRfdGFyZ2V0IChwYWQpKSkKKyAgICBnb3RvIG5vX3RhcmdldDsKKworICBnc3RfcGFkX2ZpeGF0ZV9jYXBzICh0YXJnZXQsIGNhcHMpOworICBnc3Rfb2JqZWN0X3VucmVmICh0YXJnZXQpOworCisgIHJldHVybjsKKworICAvKiBFUlJPUlMgKi8KK25vX3RhcmdldDoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIm5vIHRhcmdldCIpOworICAgIHJldHVybjsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9wcm94eV9wYWRfc2V0X3RhcmdldF91bmxvY2tlZCAoR3N0UGFkICogcGFkLCBHc3RQYWQgKiB0YXJnZXQpCit7CisgIEdzdFBhZCAqb2xkdGFyZ2V0OworCisgIGlmICh0YXJnZXQpIHsKKyAgICBHU1RfTE9HX09CSkVDVCAocGFkLCAic2V0dGluZyB0YXJnZXQgJXM6JXMiLCBHU1RfREVCVUdfUEFEX05BTUUgKHRhcmdldCkpOworCisgICAgaWYgKEdfVU5MSUtFTFkgKEdTVF9QQURfRElSRUNUSU9OIChwYWQpICE9IEdTVF9QQURfRElSRUNUSU9OICh0YXJnZXQpKSkKKyAgICAgIGdvdG8gd3JvbmdfZGlyZWN0aW9uOworICB9IGVsc2UKKyAgICBHU1RfTE9HX09CSkVDVCAocGFkLCAiY2xlYXJpbmcgdGFyZ2V0Iik7CisKKyAgLyogY2xlYXIgb2xkIHRhcmdldCAqLworICBpZiAoKG9sZHRhcmdldCA9IEdTVF9QUk9YWV9QQURfVEFSR0VUIChwYWQpKSkKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChvbGR0YXJnZXQpOworCisgIC8qIHNldCBhbmQgcmVmIG5ldyB0YXJnZXQgaWYgYW55ICovCisgIGlmICh0YXJnZXQpCisgICAgR1NUX1BST1hZX1BBRF9UQVJHRVQgKHBhZCkgPSBnc3Rfb2JqZWN0X3JlZiAodGFyZ2V0KTsKKyAgZWxzZQorICAgIEdTVF9QUk9YWV9QQURfVEFSR0VUIChwYWQpID0gTlVMTDsKKworICByZXR1cm4gVFJVRTsKKworICAvKiBFUlJPUlMgKi8KK3dyb25nX2RpcmVjdGlvbjoKKyAgeworICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHBhZCwKKyAgICAgICAgInRhcmdldCBwYWQgZG9lc24ndCBoYXZlIHRoZSBzYW1lIGRpcmVjdGlvbiBhcyBvdXJzZWxmIik7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3Byb3h5X3BhZF9zZXRfdGFyZ2V0IChHc3RQYWQgKiBwYWQsIEdzdFBhZCAqIHRhcmdldCkKK3sKKyAgZ2Jvb2xlYW4gcmVzdWx0OworCisgIEdTVF9QUk9YWV9MT0NLIChwYWQpOworICByZXN1bHQgPSBnc3RfcHJveHlfcGFkX3NldF90YXJnZXRfdW5sb2NrZWQgKHBhZCwgdGFyZ2V0KTsKKyAgR1NUX1BST1hZX1VOTE9DSyAocGFkKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgR3N0UGFkICoKK2dzdF9wcm94eV9wYWRfZ2V0X3RhcmdldCAoR3N0UGFkICogcGFkKQoreworICBHc3RQYWQgKnRhcmdldDsKKworICBHU1RfUFJPWFlfTE9DSyAocGFkKTsKKyAgdGFyZ2V0ID0gR1NUX1BST1hZX1BBRF9UQVJHRVQgKHBhZCk7CisgIGlmICh0YXJnZXQpCisgICAgZ3N0X29iamVjdF9yZWYgKHRhcmdldCk7CisgIEdTVF9QUk9YWV9VTkxPQ0sgKHBhZCk7CisKKyAgcmV0dXJuIHRhcmdldDsKK30KKworLyoqCisgKiBnc3RfcHJveHlfcGFkX2dldF9pbnRlcm5hbDoKKyAqIEBwYWQ6IHRoZSAjR3N0UHJveHlQYWQKKyAqCisgKiBHZXQgdGhlIGludGVybmFsIHBhZCBvZiBAcGFkLiBVbnJlZiB0YXJnZXQgcGFkIGFmdGVyIHVzYWdlLgorICoKKyAqIFRoZSBpbnRlcm5hbCBwYWQgb2YgYSAjR3N0R2hvc3RQYWQgaXMgdGhlIGludGVybmFsbHkgdXNlZAorICogcGFkIG9mIG9wcG9zaXRlIGRpcmVjdGlvbiwgd2hpY2ggaXMgdXNlZCB0byBsaW5rIHRvIHRoZSB0YXJnZXQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgdGFyZ2V0ICNHc3RQcm94eVBhZCwgY2FuIGJlIE5VTEwuCisgKiBVbnJlZiB0YXJnZXQgcGFkIGFmdGVyIHVzYWdlLgorICoKKyAqIFNpbmNlOiAwLjEwLjM1CisgKi8KK0dzdFByb3h5UGFkICoKK2dzdF9wcm94eV9wYWRfZ2V0X2ludGVybmFsIChHc3RQcm94eVBhZCAqIHBhZCkKK3sKKyAgR3N0UGFkICppbnRlcm5hbDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BST1hZX1BBRCAocGFkKSwgTlVMTCk7CisKKyAgR1NUX1BST1hZX0xPQ0sgKHBhZCk7CisgIGludGVybmFsID0gR1NUX1BST1hZX1BBRF9JTlRFUk5BTCAocGFkKTsKKyAgaWYgKGludGVybmFsKQorICAgIGdzdF9vYmplY3RfcmVmIChpbnRlcm5hbCk7CisgIEdTVF9QUk9YWV9VTkxPQ0sgKHBhZCk7CisKKyAgcmV0dXJuIEdTVF9QUk9YWV9QQURfQ0FTVCAoaW50ZXJuYWwpOworfQorCisvKioKKyAqIGdzdF9wcm94eV9wYWRfdW5saW5rX2RlZmF1bHQ6CisgKiBAcGFkOiBhICNHc3RQYWQgdG8gdW5saW5rCisgKgorICogSW52b2tlIHRoZSBkZWZhdWx0IHVubGluayBmdW5jdGlvbiBvZiB0aGUgcHJveHkgcGFkLgorICoKKyAqIFNpbmNlOiAwLjEwLjM1CisgKi8KK3ZvaWQKK2dzdF9wcm94eV9wYWRfdW5saW5rX2RlZmF1bHQgKEdzdFBhZCAqIHBhZCkKK3sKKyAgR3N0UGFkICppbnRlcm5hbDsKKworICAvKiBkb24ndCBkbyBhbnl0aGluZyBpZiB0aGlzIHVubGluayByZXN1bHRlZCBmcm9tIHJldGFyZ2V0aW5nIHRoZSBwYWQKKyAgICogY29udHJvbGxlZCBieSB0aGUgZ2hvc3RwYWQuIFdlIG9ubHkgd2FudCB0byBpbnZhbGlkYXRlIHRoZSB0YXJnZXQgcGFkIHdoZW4KKyAgICogdGhlIGVsZW1lbnQgc3VkZGVubHkgdW5saW5rZWQgd2l0aCBvdXIgaW50ZXJuYWwgcGFkLiAqLworICBpZiAoR1NUX1BST1hZX1BBRF9SRVRBUkdFVCAocGFkKSkKKyAgICByZXR1cm47CisKKyAgaW50ZXJuYWwgPSBHU1RfUFJPWFlfUEFEX0lOVEVSTkFMIChwYWQpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInBhZCBpcyB1bmxpbmtlZCIpOworCisgIGdzdF9wcm94eV9wYWRfc2V0X3RhcmdldCAoaW50ZXJuYWwsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3Byb3h5X3BhZF9jbGFzc19pbml0IChHc3RQcm94eVBhZENsYXNzICoga2xhc3MpCit7CisgIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7CisKKyAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChrbGFzcywgc2l6ZW9mIChHc3RQcm94eVBhZFByaXZhdGUpKTsKKworICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3N0X3Byb3h5X3BhZF9kaXNwb3NlOworICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9wcm94eV9wYWRfZmluYWxpemU7CisKKyAgLyogUmVnaXN0ZXIgY29tbW9uIGZ1bmN0aW9uIHBvaW50ZXIgZGVzY3JpcHRpb25zICovCisgIEdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSIChnc3RfcHJveHlfcGFkX3F1ZXJ5X3R5cGVfZGVmYXVsdCk7CisgIEdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSIChnc3RfcHJveHlfcGFkX2V2ZW50X2RlZmF1bHQpOworICBHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUiAoZ3N0X3Byb3h5X3BhZF9xdWVyeV9kZWZhdWx0KTsKKyAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9wcm94eV9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19kZWZhdWx0KTsKKyAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9wcm94eV9wYWRfZ2V0Y2Fwc19kZWZhdWx0KTsKKyAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9wcm94eV9wYWRfYWNjZXB0Y2Fwc19kZWZhdWx0KTsKKyAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9wcm94eV9wYWRfZml4YXRlY2Fwc19kZWZhdWx0KTsKKyAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9wcm94eV9wYWRfdW5saW5rX2RlZmF1bHQpOworICBHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUiAoZ3N0X3Byb3h5X3BhZF9jaGFpbl9kZWZhdWx0KTsKKyAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9wcm94eV9wYWRfY2hhaW5fbGlzdF9kZWZhdWx0KTsKKyAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9wcm94eV9wYWRfZ2V0cmFuZ2VfZGVmYXVsdCk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfcHJveHlfcGFkX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpCit7CisgIEdzdFBhZCAqcGFkID0gR1NUX1BBRCAob2JqZWN0KTsKKyAgR3N0UGFkICoqdGFyZ2V0X3A7CisKKyAgR1NUX1BST1hZX0xPQ0sgKHBhZCk7CisgIC8qIHJlbW92ZSBhbmQgdW5yZWYgdGhlIHRhcmdldCAqLworICB0YXJnZXRfcCA9ICZHU1RfUFJPWFlfUEFEX1RBUkdFVCAocGFkKTsKKyAgZ3N0X29iamVjdF9yZXBsYWNlICgoR3N0T2JqZWN0ICoqKSB0YXJnZXRfcCwgTlVMTCk7CisgIC8qIFRoZSBpbnRlcm5hbCBpcyBvbmx5IGNsZWFyZWQgYnkgR3N0R2hvc3RQYWQ6OmRpc3Bvc2UsIHNpbmNlIGl0IGlzIHRoZSAKKyAgICogcGFyZW50IG9mIG5vbi1naG9zdCBHc3RQcm94eVBhZCBhbmQgb3ducyB0aGUgcmVmY291bnQgb24gdGhlIGludGVybmFsLgorICAgKi8KKyAgR1NUX1BST1hZX1VOTE9DSyAocGFkKTsKKworICBHX09CSkVDVF9DTEFTUyAoZ3N0X3Byb3h5X3BhZF9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChvYmplY3QpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3Byb3h5X3BhZF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKK3sKKyAgR3N0UHJveHlQYWQgKnBhZCA9IEdTVF9QUk9YWV9QQUQgKG9iamVjdCk7CisKKyAgZ19tdXRleF9mcmVlIChHU1RfUFJPWFlfR0VUX0xPQ0sgKHBhZCkpOworICBHU1RfUFJPWFlfR0VUX0xPQ0sgKHBhZCkgPSBOVUxMOworCisgIEdfT0JKRUNUX0NMQVNTIChnc3RfcHJveHlfcGFkX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3Byb3h5X3BhZF9pbml0IChHc3RQcm94eVBhZCAqIHBwYWQpCit7CisgIEdzdFBhZCAqcGFkID0gKEdzdFBhZCAqKSBwcGFkOworCisgIEdTVF9QUk9YWV9QQURfUFJJVkFURSAocHBhZCkgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKHBwYWQsCisgICAgICBHU1RfVFlQRV9QUk9YWV9QQUQsIEdzdFByb3h5UGFkUHJpdmF0ZSk7CisgIEdTVF9QUk9YWV9HRVRfTE9DSyAocGFkKSA9IGdfbXV0ZXhfbmV3ICgpOworCisgIGdzdF9wYWRfc2V0X3F1ZXJ5X3R5cGVfZnVuY3Rpb24gKHBhZCwgZ3N0X3Byb3h5X3BhZF9xdWVyeV90eXBlX2RlZmF1bHQpOworICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAocGFkLCBnc3RfcHJveHlfcGFkX2V2ZW50X2RlZmF1bHQpOworICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAocGFkLCBnc3RfcHJveHlfcGFkX3F1ZXJ5X2RlZmF1bHQpOworICBnc3RfcGFkX3NldF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2Z1bmN0aW9uIChwYWQsCisgICAgICBnc3RfcHJveHlfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZGVmYXVsdCk7CisKKyAgZ3N0X3BhZF9zZXRfZ2V0Y2Fwc19mdW5jdGlvbiAocGFkLCBnc3RfcHJveHlfcGFkX2dldGNhcHNfZGVmYXVsdCk7CisgIGdzdF9wYWRfc2V0X2FjY2VwdGNhcHNfZnVuY3Rpb24gKHBhZCwgZ3N0X3Byb3h5X3BhZF9hY2NlcHRjYXBzX2RlZmF1bHQpOworICBnc3RfcGFkX3NldF9maXhhdGVjYXBzX2Z1bmN0aW9uIChwYWQsIGdzdF9wcm94eV9wYWRfZml4YXRlY2Fwc19kZWZhdWx0KTsKKyAgZ3N0X3BhZF9zZXRfdW5saW5rX2Z1bmN0aW9uIChwYWQsIGdzdF9wcm94eV9wYWRfdW5saW5rX2RlZmF1bHQpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR2hvc3QgcGFkcywgaW1wbGVtZW50ZWQgYXMgYSBwYWlyIG9mIHByb3h5IHBhZHMgKHNvcnQgb2YpCisgKi8KKworCisjZGVmaW5lIEdTVF9HSE9TVF9QQURfUFJJVkFURShvYmopCShHU1RfR0hPU1RfUEFEX0NBU1QgKG9iaiktPnByaXYpCisKK3N0cnVjdCBfR3N0R2hvc3RQYWRQcml2YXRlCit7CisgIC8qIHdpdGggUFJPWFlfTE9DSyAqLworICBnYm9vbGVhbiBjb25zdHJ1Y3RlZDsKK307CisKK0dfREVGSU5FX1RZUEUgKEdzdEdob3N0UGFkLCBnc3RfZ2hvc3RfcGFkLCBHU1RfVFlQRV9QUk9YWV9QQUQpOworCitzdGF0aWMgdm9pZCBnc3RfZ2hvc3RfcGFkX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOworCisvKioKKyAqIGdzdF9naG9zdF9wYWRfaW50ZXJuYWxfYWN0aXZhdGVfcHVzaF9kZWZhdWx0OgorICogQHBhZDogdGhlICNHc3RQYWQgdG8gYWN0aXZhdGUgb3IgZGVhY3RpdmF0ZS4KKyAqIEBhY3RpdmU6IHdoZXRoZXIgdGhlIHBhZCBzaG91bGQgYmUgYWN0aXZlIG9yIG5vdC4KKyAqCisgKiBJbnZva2UgdGhlIGRlZmF1bHQgYWN0aXZhdGUgcHVzaCBmdW5jdGlvbiBvZiBhIHByb3h5IHBhZCB0aGF0IGlzCisgKiBvd25lZCBieSBhIGdob3N0IHBhZC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLgorICoKKyAqIFNpbmNlOiAwLjEwLjM1CisgKi8KK2dib29sZWFuCitnc3RfZ2hvc3RfcGFkX2ludGVybmFsX2FjdGl2YXRlX3B1c2hfZGVmYXVsdCAoR3N0UGFkICogcGFkLCBnYm9vbGVhbiBhY3RpdmUpCit7CisgIGdib29sZWFuIHJldDsKKyAgR3N0UGFkICpvdGhlcjsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BST1hZX1BBRCAocGFkKSwgRkFMU0UpOworCisgIEdTVF9MT0dfT0JKRUNUIChwYWQsICIlc2FjdGl2YXRlIHB1c2ggb24gJXM6JXMsIHdlJ3JlIG9rIiwKKyAgICAgIChhY3RpdmUgPyAiIiA6ICJkZSIpLCBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOworCisgIC8qIGluIGJvdGggY2FzZXMgKFNSQyBhbmQgU0lOSykgd2UgYWN0aXZhdGUganVzdCB0aGUgaW50ZXJuYWwgcGFkLiBUaGUgdGFyZ2V0cworICAgKiB3aWxsIGJlIGFjdGl2YXRlZCBsYXRlciAob3IgYWxyZWFkeSBpbiBjYXNlIG9mIGEgZ2hvc3Qgc2lua3BhZCkuICovCisgIG90aGVyID0gR1NUX1BST1hZX1BBRF9JTlRFUk5BTCAocGFkKTsKKyAgcmV0ID0gZ3N0X3BhZF9hY3RpdmF0ZV9wdXNoIChvdGhlciwgYWN0aXZlKTsKKworICByZXR1cm4gcmV0OworfQorCisvKioKKyAqIGdzdF9naG9zdF9wYWRfaW50ZXJuYWxfYWN0aXZhdGVfcHVsbF9kZWZhdWx0OgorICogQHBhZDogdGhlICNHc3RQYWQgdG8gYWN0aXZhdGUgb3IgZGVhY3RpdmF0ZS4KKyAqIEBhY3RpdmU6IHdoZXRoZXIgdGhlIHBhZCBzaG91bGQgYmUgYWN0aXZlIG9yIG5vdC4KKyAqCisgKiBJbnZva2UgdGhlIGRlZmF1bHQgYWN0aXZhdGUgcHVsbCBmdW5jdGlvbiBvZiBhIHByb3h5IHBhZCB0aGF0IGlzCisgKiBvd25lZCBieSBhIGdob3N0IHBhZC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLgorICoKKyAqIFNpbmNlOiAwLjEwLjM1CisgKi8KK2dib29sZWFuCitnc3RfZ2hvc3RfcGFkX2ludGVybmFsX2FjdGl2YXRlX3B1bGxfZGVmYXVsdCAoR3N0UGFkICogcGFkLCBnYm9vbGVhbiBhY3RpdmUpCit7CisgIGdib29sZWFuIHJldDsKKyAgR3N0UGFkICpvdGhlcjsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BST1hZX1BBRCAocGFkKSwgRkFMU0UpOworCisgIEdTVF9MT0dfT0JKRUNUIChwYWQsICIlc2FjdGl2YXRlIHB1bGwgb24gJXM6JXMiLCAoYWN0aXZlID8gIiIgOiAiZGUiKSwKKyAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7CisKKyAgaWYgKEdTVF9QQURfRElSRUNUSU9OIChwYWQpID09IEdTVF9QQURfU1JDKSB7CisgICAgLyogd2UgYXJlIGFjdGl2YXRlZCBpbiBwdWxsIG1vZGUgYnkgb3VyIHBlZXIgZWxlbWVudCwgd2hpY2ggaXMgYSBzaW5rcGFkCisgICAgICogdGhhdCB3YW50cyB0byBvcGVyYXRlIGluIHB1bGwgbW9kZS4gVGhpcyBhY3RpdmF0aW9uIGhhcyB0byBwcm9wYWdhdGUKKyAgICAgKiB1cHN0cmVhbSB0aHJvdWdoIHRoZSBwaXBlbGluZS4gV2UgY2FsbCB0aGUgaW50ZXJuYWwgYWN0aXZhdGlvbiBmdW5jdGlvbiwKKyAgICAgKiB3aGljaCB3aWxsIHRyaWdnZXIgZ3N0X2dob3N0X3BhZF9hY3RpdmF0ZV9wdWxsX2RlZmF1bHQsIHdoaWNoIHByb3BhZ2F0ZXMgZXZlbgorICAgICAqIGZ1cnRoZXIgdXBzdHJlYW0gKi8KKyAgICBHU1RfTE9HX09CSkVDVCAocGFkLCAicGFkIGlzIHNyYywgYWN0aXZhdGUgaW50ZXJuYWwiKTsKKyAgICBvdGhlciA9IEdTVF9QUk9YWV9QQURfSU5URVJOQUwgKHBhZCk7CisgICAgcmV0ID0gZ3N0X3BhZF9hY3RpdmF0ZV9wdWxsIChvdGhlciwgYWN0aXZlKTsKKyAgfSBlbHNlIGlmIChHX0xJS0VMWSAoKG90aGVyID0gZ3N0X3BhZF9nZXRfcGVlciAocGFkKSkpKSB7CisgICAgLyogV2UgYXJlIFNJTkssIHRoZSBnaG9zdHBhZCBpcyBTUkMsIHdlIHByb3BhZ2F0ZSB0aGUgYWN0aXZhdGlvbiB1cHN0cmVhbQorICAgICAqIHNpbmNlIHdlIGhvbGQgYSBwb2ludGVyIHRvIHRoZSB1cHN0cmVhbSBwZWVyLiAqLworICAgIEdTVF9MT0dfT0JKRUNUIChwYWQsICJhY3RpdmF0aW5nIHBlZXIiKTsKKyAgICByZXQgPSBnc3RfcGFkX2FjdGl2YXRlX3B1bGwgKG90aGVyLCBhY3RpdmUpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKG90aGVyKTsKKyAgfSBlbHNlIHsKKyAgICAvKiB0aGlzIGlzIGZhaWx1cmUsIHdlIGNhbid0IGFjdGl2YXRlIHB1bGwgaWYgdGhlcmUgaXMgbm8gcGVlciAqLworICAgIEdTVF9MT0dfT0JKRUNUIChwYWQsICJub3Qgc3JjIGFuZCBubyBwZWVyLCBmYWlsaW5nIik7CisgICAgcmV0ID0gRkFMU0U7CisgIH0KKworICByZXR1cm4gcmV0OworfQorCisvKioKKyAqIGdzdF9naG9zdF9wYWRfYWN0aXZhdGVfcHVzaF9kZWZhdWx0OgorICogQHBhZDogdGhlICNHc3RQYWQgdG8gYWN0aXZhdGUgb3IgZGVhY3RpdmF0ZS4KKyAqIEBhY3RpdmU6IHdoZXRoZXIgdGhlIHBhZCBzaG91bGQgYmUgYWN0aXZlIG9yIG5vdC4KKyAqCisgKiBJbnZva2UgdGhlIGRlZmF1bHQgYWN0aXZhdGUgcHVzaCBmdW5jdGlvbiBvZiBhIGdob3N0IHBhZC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLgorICoKKyAqIFNpbmNlOiAwLjEwLjM1CisgKi8KK2dib29sZWFuCitnc3RfZ2hvc3RfcGFkX2FjdGl2YXRlX3B1c2hfZGVmYXVsdCAoR3N0UGFkICogcGFkLCBnYm9vbGVhbiBhY3RpdmUpCit7CisgIGdib29sZWFuIHJldDsKKyAgR3N0UGFkICpvdGhlcjsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0dIT1NUX1BBRCAocGFkKSwgRkFMU0UpOworCisgIEdTVF9MT0dfT0JKRUNUIChwYWQsICIlc2FjdGl2YXRlIHB1c2ggb24gJXM6JXMsIHByb3h5IGludGVybmFsIiwKKyAgICAgIChhY3RpdmUgPyAiIiA6ICJkZSIpLCBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOworCisgIC8qIGp1c3QgYWN0aXZhdGUgdGhlIGludGVybmFsIHBhZCAqLworICBvdGhlciA9IEdTVF9QUk9YWV9QQURfSU5URVJOQUwgKHBhZCk7CisgIHJldCA9IGdzdF9wYWRfYWN0aXZhdGVfcHVzaCAob3RoZXIsIGFjdGl2ZSk7CisKKyAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBnc3RfZ2hvc3RfcGFkX2FjdGl2YXRlX3B1bGxfZGVmYXVsdDoKKyAqIEBwYWQ6IHRoZSAjR3N0UGFkIHRvIGFjdGl2YXRlIG9yIGRlYWN0aXZhdGUuCisgKiBAYWN0aXZlOiB3aGV0aGVyIHRoZSBwYWQgc2hvdWxkIGJlIGFjdGl2ZSBvciBub3QuCisgKgorICogSW52b2tlIHRoZSBkZWZhdWx0IGFjdGl2YXRlIHB1bGwgZnVuY3Rpb24gb2YgYSBnaG9zdCBwYWQuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4KKyAqCisgKiBTaW5jZTogMC4xMC4zNQorICovCitnYm9vbGVhbgorZ3N0X2dob3N0X3BhZF9hY3RpdmF0ZV9wdWxsX2RlZmF1bHQgKEdzdFBhZCAqIHBhZCwgZ2Jvb2xlYW4gYWN0aXZlKQoreworICBnYm9vbGVhbiByZXQ7CisgIEdzdFBhZCAqb3RoZXI7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19HSE9TVF9QQUQgKHBhZCksIEZBTFNFKTsKKworICBHU1RfTE9HX09CSkVDVCAocGFkLCAiJXNhY3RpdmF0ZSBwdWxsIG9uICVzOiVzIiwgKGFjdGl2ZSA/ICIiIDogImRlIiksCisgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOworCisgIGlmIChHU1RfUEFEX0RJUkVDVElPTiAocGFkKSA9PSBHU1RfUEFEX1NSQykgeworICAgIC8qIHRoZSBnaG9zdHBhZCBpcyBTUkMgYW5kIGFjdGl2YXRlZCBpbiBwdWxsIG1vZGUgYnkgaXRzIHBlZXIsIGNhbGwgdGhlCisgICAgICogYWN0aXZhdGlvbiBmdW5jdGlvbiBvZiB0aGUgaW50ZXJuYWwgcGFkIHRvIHByb3BhZ2F0ZSB0aGUgYWN0aXZhdGlvbgorICAgICAqIHVwc3RyZWFtICovCisgICAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgInBhZCBpcyBzcmMsIGFjdGl2YXRlIGludGVybmFsIik7CisgICAgb3RoZXIgPSBHU1RfUFJPWFlfUEFEX0lOVEVSTkFMIChwYWQpOworICAgIHJldCA9IGdzdF9wYWRfYWN0aXZhdGVfcHVsbCAob3RoZXIsIGFjdGl2ZSk7CisgIH0gZWxzZSBpZiAoR19MSUtFTFkgKChvdGhlciA9IGdzdF9wYWRfZ2V0X3BlZXIgKHBhZCkpKSkgeworICAgIC8qIFdlIGFyZSBTSU5LIGFuZCBhY3RpdmF0ZWQgYnkgdGhlIGludGVybmFsIHBhZCwgcHJvcGFnYXRlIGFjdGl2YXRpb24KKyAgICAgKiB1cHN0cmVhbSBiZWNhdXNlIHdlIGhvbGQgYSByZWYgdG8gdGhlIHVwc3RyZWFtIHBlZXIgKi8KKyAgICBHU1RfTE9HX09CSkVDVCAocGFkLCAiYWN0aXZhdGluZyBwZWVyIik7CisgICAgcmV0ID0gZ3N0X3BhZF9hY3RpdmF0ZV9wdWxsIChvdGhlciwgYWN0aXZlKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChvdGhlcik7CisgIH0gZWxzZSB7CisgICAgLyogbm8gcGVlciwgd2UgZmFpbCAqLworICAgIEdTVF9MT0dfT0JKRUNUIChwYWQsICJwYWQgbm90IHNyYyBhbmQgbm8gcGVlciwgZmFpbGluZyIpOworICAgIHJldCA9IEZBTFNFOworICB9CisKKyAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBnc3RfZ2hvc3RfcGFkX2xpbmtfZGVmYXVsdDoKKyAqIEBwYWQ6IHRoZSAjR3N0UGFkIHRvIGxpbmsuCisgKiBAcGVlcjogdGhlICNHc3RQYWQgcGVlcgorICoKKyAqIEludm9rZSB0aGUgZGVmYXVsdCBsaW5rIGZ1bmN0aW9uIG9mIGEgZ2hvc3QgcGFkLgorICoKKyAqIFJldHVybnM6ICNHc3RQYWRMaW5rUmV0dXJuIG9mIHRoZSBvcGVyYXRpb24KKyAqCisgKiBTaW5jZTogMC4xMC4zNQorICovCitHc3RQYWRMaW5rUmV0dXJuCitnc3RfZ2hvc3RfcGFkX2xpbmtfZGVmYXVsdCAoR3N0UGFkICogcGFkLCBHc3RQYWQgKiBwZWVyKQoreworICBHc3RQYWRMaW5rUmV0dXJuIHJldDsKKyAgR3N0UGFkICppbnRlcm5hbDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0dIT1NUX1BBRCAocGFkKSwgR1NUX1BBRF9MSU5LX1JFRlVTRUQpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGVlciksIEdTVF9QQURfTElOS19SRUZVU0VEKTsKKworICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJsaW5raW5nIGdob3N0cGFkIik7CisKKyAgaW50ZXJuYWwgPSBHU1RfUFJPWFlfUEFEX0lOVEVSTkFMIChwYWQpOworICBpZiAoIWdzdF9wcm94eV9wYWRfc2V0X3RhcmdldCAoaW50ZXJuYWwsIHBlZXIpKQorICAgIGdvdG8gdGFyZ2V0X2ZhaWxlZDsKKworICByZXQgPSBHU1RfUEFEX0xJTktfT0s7CisgIC8qIGlmIHdlIGFyZSBhIHNvdXJjZSBwYWQsIHdlIHNob3VsZCBjYWxsIHRoZSBwZWVyIGxpbmsgZnVuY3Rpb24KKyAgICogaWYgdGhlIHBlZXIgaGFzIG9uZSwgc2VlIGRlc2lnbiBkb2NzLiAqLworICBpZiAoR1NUX1BBRF9JU19TUkMgKHBhZCkpIHsKKyAgICBpZiAoR1NUX1BBRF9MSU5LRlVOQyAocGVlcikpIHsKKyAgICAgIHJldCA9IEdTVF9QQURfTElOS0ZVTkMgKHBlZXIpIChwZWVyLCBwYWQpOworICAgICAgaWYgKHJldCAhPSBHU1RfUEFEX0xJTktfT0spCisgICAgICAgIGdvdG8gbGlua19mYWlsZWQ7CisgICAgfQorICB9CisgIHJldHVybiByZXQ7CisKKyAgLyogRVJST1JTICovCit0YXJnZXRfZmFpbGVkOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAic2V0dGluZyB0YXJnZXQgZmFpbGVkIik7CisgICAgcmV0dXJuIEdTVF9QQURfTElOS19SRUZVU0VEOworICB9CitsaW5rX2ZhaWxlZDoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImxpbmtpbmcgZmFpbGVkIik7CisgICAgLyogY2xlYXIgdGFyZ2V0IGFnYWluICovCisgICAgZ3N0X3Byb3h5X3BhZF9zZXRfdGFyZ2V0IChpbnRlcm5hbCwgTlVMTCk7CisgICAgcmV0dXJuIHJldDsKKyAgfQorfQorCisvKioKKyAqIGdzdF9naG9zdF9wYWRfdW5saW5rX2RlZmF1bHQ6CisgKiBAcGFkOiB0aGUgI0dzdFBhZCB0byBsaW5rLgorICoKKyAqIEludm9rZSB0aGUgZGVmYXVsdCB1bmxpbmsgZnVuY3Rpb24gb2YgYSBnaG9zdCBwYWQuCisgKgorICogU2luY2U6IDAuMTAuMzUKKyAqLwordm9pZAorZ3N0X2dob3N0X3BhZF91bmxpbmtfZGVmYXVsdCAoR3N0UGFkICogcGFkKQoreworICBHc3RQYWQgKmludGVybmFsOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19HSE9TVF9QQUQgKHBhZCkpOworCisgIGludGVybmFsID0gR1NUX1BST1hZX1BBRF9JTlRFUk5BTCAocGFkKTsKKworICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJ1bmxpbmtpbmcgZ2hvc3RwYWQiKTsKKworICAvKiBUaGUgdGFyZ2V0IG9mIHRoZSBpbnRlcm5hbCBwYWQgaXMgbm8gbG9uZ2VyIHZhbGlkICovCisgIGdzdF9wcm94eV9wYWRfc2V0X3RhcmdldCAoaW50ZXJuYWwsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2dob3N0X3BhZF9jbGFzc19pbml0IChHc3RHaG9zdFBhZENsYXNzICoga2xhc3MpCit7CisgIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7CisKKyAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChrbGFzcywgc2l6ZW9mIChHc3RHaG9zdFBhZFByaXZhdGUpKTsKKworICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3N0X2dob3N0X3BhZF9kaXNwb3NlOworCisgIEdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSIChnc3RfZ2hvc3RfcGFkX2FjdGl2YXRlX3B1bGxfZGVmYXVsdCk7CisgIEdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSIChnc3RfZ2hvc3RfcGFkX2FjdGl2YXRlX3B1c2hfZGVmYXVsdCk7CisgIEdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSIChnc3RfZ2hvc3RfcGFkX2xpbmtfZGVmYXVsdCk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfZ2hvc3RfcGFkX2luaXQgKEdzdEdob3N0UGFkICogcGFkKQoreworICBHU1RfR0hPU1RfUEFEX1BSSVZBVEUgKHBhZCkgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKHBhZCwKKyAgICAgIEdTVF9UWVBFX0dIT1NUX1BBRCwgR3N0R2hvc3RQYWRQcml2YXRlKTsKKworICBnc3RfcGFkX3NldF9hY3RpdmF0ZXB1bGxfZnVuY3Rpb24gKEdTVF9QQURfQ0FTVCAocGFkKSwKKyAgICAgIGdzdF9naG9zdF9wYWRfYWN0aXZhdGVfcHVsbF9kZWZhdWx0KTsKKyAgZ3N0X3BhZF9zZXRfYWN0aXZhdGVwdXNoX2Z1bmN0aW9uIChHU1RfUEFEX0NBU1QgKHBhZCksCisgICAgICBnc3RfZ2hvc3RfcGFkX2FjdGl2YXRlX3B1c2hfZGVmYXVsdCk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfZ2hvc3RfcGFkX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpCit7CisgIEdzdFBhZCAqcGFkOworICBHc3RQYWQgKmludGVybmFsOworICBHc3RQYWQgKnBlZXI7CisKKyAgcGFkID0gR1NUX1BBRCAob2JqZWN0KTsKKworICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJkaXNwb3NlIik7CisKKyAgZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0IChHU1RfR0hPU1RfUEFEIChwYWQpLCBOVUxMKTsKKworICAvKiBVbmxpbmsgaGVyZSBzbyB0aGF0IGdzdF9wYWRfZGlzcG9zZSBkb2Vzbid0LiBUaGF0IHdvdWxkIGxlYWQgdG8gYSBjYWxsIHRvCisgICAqIGdzdF9naG9zdF9wYWRfdW5saW5rX2RlZmF1bHQgd2hlbiB0aGUgZ2hvc3QgcGFkIGlzIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSAqLworICBwZWVyID0gZ3N0X3BhZF9nZXRfcGVlciAocGFkKTsKKyAgaWYgKHBlZXIpIHsKKyAgICBpZiAoR1NUX1BBRF9JU19TUkMgKHBhZCkpCisgICAgICBnc3RfcGFkX3VubGluayAocGFkLCBwZWVyKTsKKyAgICBlbHNlCisgICAgICBnc3RfcGFkX3VubGluayAocGVlciwgcGFkKTsKKworICAgIGdzdF9vYmplY3RfdW5yZWYgKHBlZXIpOworICB9CisKKyAgR1NUX1BST1hZX0xPQ0sgKHBhZCk7CisgIGludGVybmFsID0gR1NUX1BST1hZX1BBRF9JTlRFUk5BTCAocGFkKTsKKworICBnc3RfcGFkX3NldF9hY3RpdmF0ZXB1bGxfZnVuY3Rpb24gKGludGVybmFsLCBOVUxMKTsKKyAgZ3N0X3BhZF9zZXRfYWN0aXZhdGVwdXNoX2Z1bmN0aW9uIChpbnRlcm5hbCwgTlVMTCk7CisKKyAgLyogZGlzcG9zZXMgb2YgdGhlIGludGVybmFsIHBhZCwgc2luY2UgdGhlIGdob3N0cGFkIGlzIHRoZSBvbmx5IHBvc3NpYmxlIG9iamVjdAorICAgKiB0aGF0IGhhcyBhIHJlZmNvdW50IG9uIHRoZSBpbnRlcm5hbCBwYWQuICovCisgIGdzdF9vYmplY3RfdW5wYXJlbnQgKEdTVF9PQkpFQ1RfQ0FTVCAoaW50ZXJuYWwpKTsKKyAgR1NUX1BST1hZX1BBRF9JTlRFUk5BTCAocGFkKSA9IE5VTEw7CisKKyAgR1NUX1BST1hZX1VOTE9DSyAocGFkKTsKKworICBHX09CSkVDVF9DTEFTUyAoZ3N0X2dob3N0X3BhZF9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChvYmplY3QpOworfQorCisvKioKKyAqIGdzdF9naG9zdF9wYWRfY29uc3RydWN0OgorICogQGdwYWQ6IHRoZSBuZXdseSBhbGxvY2F0ZWQgZ2hvc3QgcGFkCisgKgorICogRmluaXNoIGluaXRpYWxpemF0aW9uIG9mIGEgbmV3bHkgYWxsb2NhdGVkIGdob3N0IHBhZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG1vc3QgdXNlZnVsIGluIGxhbmd1YWdlIGJpbmRpbmdzIGFuZCB3aGVuIHN1YmNsYXNzaW5nCisgKiAjR3N0R2hvc3RQYWQ7IHBsdWdpbiBhbmQgYXBwbGljYXRpb24gZGV2ZWxvcGVycyBub3JtYWxseSB3aWxsIG5vdCBjYWxsIHRoaXMKKyAqIGZ1bmN0aW9uLiBDYWxsIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgYWZ0ZXIgYSBjYWxsIHRvIGdfb2JqZWN0X25ldworICogKEdTVF9UWVBFX0dIT1NUX1BBRCwgImRpcmVjdGlvbiIsIEBkaXIsIC4uLiwgTlVMTCkuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGNvbnN0cnVjdGlvbiBzdWNjZWVkcywgJUZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yMgorICovCitnYm9vbGVhbgorZ3N0X2dob3N0X3BhZF9jb25zdHJ1Y3QgKEdzdEdob3N0UGFkICogZ3BhZCkKK3sKKyAgR3N0UGFkRGlyZWN0aW9uIGRpciwgb3RoZXJkaXI7CisgIEdzdFBhZFRlbXBsYXRlICp0ZW1wbDsKKyAgR3N0UGFkICpwYWQsICppbnRlcm5hbDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0dIT1NUX1BBRCAoZ3BhZCksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9HSE9TVF9QQURfUFJJVkFURSAoZ3BhZCktPmNvbnN0cnVjdGVkID09IEZBTFNFLAorICAgICAgRkFMU0UpOworCisgIGdfb2JqZWN0X2dldCAoZ3BhZCwgImRpcmVjdGlvbiIsICZkaXIsICJ0ZW1wbGF0ZSIsICZ0ZW1wbCwgTlVMTCk7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRpciAhPSBHU1RfUEFEX1VOS05PV04sIEZBTFNFKTsKKworICBwYWQgPSBHU1RfUEFEIChncGFkKTsKKworICAvKiBTZXQgZGlyZWN0aW9uYWwgcGFkZnVuY3Rpb25zIGZvciBnaG9zdHBhZCAqLworICBpZiAoZGlyID09IEdTVF9QQURfU0lOSykgeworICAgIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChwYWQsIGdzdF9wcm94eV9wYWRfY2hhaW5fZGVmYXVsdCk7CisgICAgZ3N0X3BhZF9zZXRfY2hhaW5fbGlzdF9mdW5jdGlvbiAocGFkLCBnc3RfcHJveHlfcGFkX2NoYWluX2xpc3RfZGVmYXVsdCk7CisgIH0gZWxzZSB7CisgICAgZ3N0X3BhZF9zZXRfZ2V0cmFuZ2VfZnVuY3Rpb24gKHBhZCwgZ3N0X3Byb3h5X3BhZF9nZXRyYW5nZV9kZWZhdWx0KTsKKyAgfQorCisgIC8qIGxpbmsvdW5saW5rIGZ1bmN0aW9ucyAqLworICBnc3RfcGFkX3NldF9saW5rX2Z1bmN0aW9uIChwYWQsIGdzdF9naG9zdF9wYWRfbGlua19kZWZhdWx0KTsKKyAgZ3N0X3BhZF9zZXRfdW5saW5rX2Z1bmN0aW9uIChwYWQsIGdzdF9naG9zdF9wYWRfdW5saW5rX2RlZmF1bHQpOworCisgIC8qIElOVEVSTkFMIFBBRCwgaXQgYWx3YXlzIGV4aXN0cyBhbmQgaXMgY2hpbGQgb2YgdGhlIGdob3N0cGFkICovCisgIG90aGVyZGlyID0gKGRpciA9PSBHU1RfUEFEX1NSQykgPyBHU1RfUEFEX1NJTksgOiBHU1RfUEFEX1NSQzsKKyAgaWYgKHRlbXBsKSB7CisgICAgaW50ZXJuYWwgPQorICAgICAgICBnX29iamVjdF9uZXcgKEdTVF9UWVBFX1BST1hZX1BBRCwgIm5hbWUiLCBOVUxMLAorICAgICAgICAiZGlyZWN0aW9uIiwgb3RoZXJkaXIsICJ0ZW1wbGF0ZSIsIHRlbXBsLCBOVUxMKTsKKyAgICAvKiByZWxlYXNlIHJlZiBvYnRhaW5lZCB2aWEgZ19vYmplY3RfZ2V0ICovCisgICAgZ3N0X29iamVjdF91bnJlZiAodGVtcGwpOworICB9IGVsc2UgeworICAgIGludGVybmFsID0KKyAgICAgICAgZ19vYmplY3RfbmV3IChHU1RfVFlQRV9QUk9YWV9QQUQsICJuYW1lIiwgTlVMTCwKKyAgICAgICAgImRpcmVjdGlvbiIsIG90aGVyZGlyLCBOVUxMKTsKKyAgfQorICBHU1RfUEFEX1VOU0VUX0ZMVVNISU5HIChpbnRlcm5hbCk7CisKKyAgLyogU2V0IGRpcmVjdGlvbmFsIHBhZGZ1bmN0aW9ucyBmb3IgaW50ZXJuYWwgcGFkICovCisgIGlmIChkaXIgPT0gR1NUX1BBRF9TUkMpIHsKKyAgICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoaW50ZXJuYWwsIGdzdF9wcm94eV9wYWRfY2hhaW5fZGVmYXVsdCk7CisgICAgZ3N0X3BhZF9zZXRfY2hhaW5fbGlzdF9mdW5jdGlvbiAoaW50ZXJuYWwsCisgICAgICAgIGdzdF9wcm94eV9wYWRfY2hhaW5fbGlzdF9kZWZhdWx0KTsKKyAgfSBlbHNlIHsKKyAgICBnc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbiAoaW50ZXJuYWwsIGdzdF9wcm94eV9wYWRfZ2V0cmFuZ2VfZGVmYXVsdCk7CisgIH0KKworICBHU1RfUFJPWFlfTE9DSyAocGFkKTsKKworICAvKiBub3cgbWFrZSB0aGUgZ2hvc3RwYWQgYSBwYXJlbnQgb2YgdGhlIGludGVybmFsIHBhZCAqLworICBpZiAoIWdzdF9vYmplY3Rfc2V0X3BhcmVudCAoR1NUX09CSkVDVF9DQVNUIChpbnRlcm5hbCksCisgICAgICAgICAgR1NUX09CSkVDVF9DQVNUIChwYWQpKSkKKyAgICBnb3RvIHBhcmVudF9mYWlsZWQ7CisKKyAgLyogVGhlIGdob3N0cGFkIGlzIHRoZSBwYXJlbnQgb2YgdGhlIGludGVybmFsIHBhZCBhbmQgaXMgdGhlIG9ubHkgb2JqZWN0IHRoYXQKKyAgICogY2FuIGhhdmUgYSByZWZjb3VudCBvbiB0aGUgaW50ZXJuYWwgcGFkLgorICAgKiBBdCB0aGlzIHBvaW50LCB0aGUgR3N0R2hvc3RQYWQgaGFzIGEgcmVmY291bnQgb2YgMSwgYW5kIHRoZSBpbnRlcm5hbCBwYWQgaGFzCisgICAqIGEgcmVmY291bnQgb2YgMS4KKyAgICogV2hlbiB0aGUgcmVmY291bnQgb2YgdGhlIEdzdEdob3N0UGFkIGRyb3BzIHRvIDAsIHRoZSBnaG9zdHBhZCB3aWxsIGRpc3Bvc2UKKyAgICogaXRzIHJlZmNvdW50IG9uIHRoZSBpbnRlcm5hbCBwYWQgaW4gdGhlIGRpc3Bvc2UgbWV0aG9kIGJ5IHVuLXBhcmVudGluZyBpdC4KKyAgICogVGhpcyBpcyB3aHkgd2UgZG9uJ3QgdGFrZSBleHRyYSByZWZjb3VudHMgaW4gdGhlIGFzc2lnbm1lbnRzIGJlbG93CisgICAqLworICBHU1RfUFJPWFlfUEFEX0lOVEVSTkFMIChwYWQpID0gaW50ZXJuYWw7CisgIEdTVF9QUk9YWV9QQURfSU5URVJOQUwgKGludGVybmFsKSA9IHBhZDsKKworICAvKiBzcGVjaWFsIGFjdGl2YXRpb24gZnVuY3Rpb25zIGZvciB0aGUgaW50ZXJuYWwgcGFkICovCisgIGdzdF9wYWRfc2V0X2FjdGl2YXRlcHVsbF9mdW5jdGlvbiAoaW50ZXJuYWwsCisgICAgICBnc3RfZ2hvc3RfcGFkX2ludGVybmFsX2FjdGl2YXRlX3B1bGxfZGVmYXVsdCk7CisgIGdzdF9wYWRfc2V0X2FjdGl2YXRlcHVzaF9mdW5jdGlvbiAoaW50ZXJuYWwsCisgICAgICBnc3RfZ2hvc3RfcGFkX2ludGVybmFsX2FjdGl2YXRlX3B1c2hfZGVmYXVsdCk7CisKKyAgR1NUX1BST1hZX1VOTE9DSyAocGFkKTsKKworICBHU1RfR0hPU1RfUEFEX1BSSVZBVEUgKGdwYWQpLT5jb25zdHJ1Y3RlZCA9IFRSVUU7CisgIHJldHVybiBUUlVFOworCisgIC8qIEVSUk9SUyAqLworcGFyZW50X2ZhaWxlZDoKKyAgeworICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZ3BhZCwgIkNvdWxkIG5vdCBzZXQgaW50ZXJuYWwgcGFkICVzOiVzIiwKKyAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChpbnRlcm5hbCkpOworICAgIGdfY3JpdGljYWwgKCJDb3VsZCBub3Qgc2V0IGludGVybmFsIHBhZCAlczolcyIsCisgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAoaW50ZXJuYWwpKTsKKyAgICBHU1RfUFJPWFlfVU5MT0NLIChwYWQpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKGludGVybmFsKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworc3RhdGljIEdzdFBhZCAqCitnc3RfZ2hvc3RfcGFkX25ld19mdWxsIChjb25zdCBnY2hhciAqIG5hbWUsIEdzdFBhZERpcmVjdGlvbiBkaXIsCisgICAgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCkKK3sKKyAgR3N0R2hvc3RQYWQgKnJldDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGlyICE9IEdTVF9QQURfVU5LTk9XTiwgTlVMTCk7CisKKyAgLyogT0JKRUNUIENSRUFUSU9OICovCisgIGlmICh0ZW1wbCkgeworICAgIHJldCA9IGdfb2JqZWN0X25ldyAoR1NUX1RZUEVfR0hPU1RfUEFELCAibmFtZSIsIG5hbWUsCisgICAgICAgICJkaXJlY3Rpb24iLCBkaXIsICJ0ZW1wbGF0ZSIsIHRlbXBsLCBOVUxMKTsKKyAgfSBlbHNlIHsKKyAgICByZXQgPSBnX29iamVjdF9uZXcgKEdTVF9UWVBFX0dIT1NUX1BBRCwgIm5hbWUiLCBuYW1lLAorICAgICAgICAiZGlyZWN0aW9uIiwgZGlyLCBOVUxMKTsKKyAgfQorCisgIGlmICghZ3N0X2dob3N0X3BhZF9jb25zdHJ1Y3QgKHJldCkpCisgICAgZ290byBjb25zdHJ1Y3RfZmFpbGVkOworCisgIHJldHVybiBHU1RfUEFEX0NBU1QgKHJldCk7CisKK2NvbnN0cnVjdF9mYWlsZWQ6CisgIC8qIGFscmVhZHkgbG9nZ2VkICovCisgIGdzdF9vYmplY3RfdW5yZWYgKHJldCk7CisgIHJldHVybiBOVUxMOworfQorCisvKioKKyAqIGdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldDoKKyAqIEBuYW1lOiAoYWxsb3ctbm9uZSk6IHRoZSBuYW1lIG9mIHRoZSBuZXcgcGFkLCBvciBOVUxMIHRvIGFzc2lnbiBhIGRlZmF1bHQgbmFtZS4KKyAqIEBkaXI6IHRoZSBkaXJlY3Rpb24gb2YgdGhlIGdob3N0cGFkCisgKgorICogQ3JlYXRlIGEgbmV3IGdob3N0cGFkIHdpdGhvdXQgYSB0YXJnZXQgd2l0aCB0aGUgZ2l2ZW4gZGlyZWN0aW9uLgorICogQSB0YXJnZXQgY2FuIGJlIHNldCBvbiB0aGUgZ2hvc3RwYWQgbGF0ZXIgd2l0aCB0aGUKKyAqIGdzdF9naG9zdF9wYWRfc2V0X3RhcmdldCgpIGZ1bmN0aW9uLgorICoKKyAqIFRoZSBjcmVhdGVkIGdob3N0cGFkIHdpbGwgbm90IGhhdmUgYSBwYWR0ZW1wbGF0ZS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RQYWQsIG9yIE5VTEwgaW4gY2FzZSBvZiBhbiBlcnJvci4KKyAqLworR3N0UGFkICoKK2dzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldCAoY29uc3QgZ2NoYXIgKiBuYW1lLCBHc3RQYWREaXJlY3Rpb24gZGlyKQoreworICBHc3RQYWQgKnJldDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGlyICE9IEdTVF9QQURfVU5LTk9XTiwgTlVMTCk7CisKKyAgR1NUX0xPRyAoIm5hbWU6JXMsIGRpcmVjdGlvbjolZCIsIEdTVF9TVFJfTlVMTCAobmFtZSksIGRpcik7CisKKyAgcmV0ID0gZ3N0X2dob3N0X3BhZF9uZXdfZnVsbCAobmFtZSwgZGlyLCBOVUxMKTsKKworICByZXR1cm4gcmV0OworfQorCisvKioKKyAqIGdzdF9naG9zdF9wYWRfbmV3OgorICogQG5hbWU6IChhbGxvdy1ub25lKTogdGhlIG5hbWUgb2YgdGhlIG5ldyBwYWQsIG9yIE5VTEwgdG8gYXNzaWduIGEgZGVmYXVsdCBuYW1lCisgKiBAdGFyZ2V0OiAodHJhbnNmZXIgbm9uZSk6IHRoZSBwYWQgdG8gZ2hvc3QuCisgKgorICogQ3JlYXRlIGEgbmV3IGdob3N0cGFkIHdpdGggQHRhcmdldCBhcyB0aGUgdGFyZ2V0LiBUaGUgZGlyZWN0aW9uIHdpbGwgYmUgdGFrZW4KKyAqIGZyb20gdGhlIHRhcmdldCBwYWQuIEB0YXJnZXQgbXVzdCBiZSB1bmxpbmtlZC4KKyAqCisgKiBXaWxsIHJlZiB0aGUgdGFyZ2V0LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdFBhZCwgb3IgTlVMTCBpbiBjYXNlIG9mIGFuIGVycm9yLgorICovCitHc3RQYWQgKgorZ3N0X2dob3N0X3BhZF9uZXcgKGNvbnN0IGdjaGFyICogbmFtZSwgR3N0UGFkICogdGFyZ2V0KQoreworICBHc3RQYWQgKnJldDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAodGFyZ2V0KSwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICghZ3N0X3BhZF9pc19saW5rZWQgKHRhcmdldCksIE5VTEwpOworCisgIEdTVF9MT0cgKCJuYW1lOiVzLCB0YXJnZXQ6JXM6JXMiLCBHU1RfU1RSX05VTEwgKG5hbWUpLAorICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FICh0YXJnZXQpKTsKKworICBpZiAoKHJldCA9IGdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldCAobmFtZSwgR1NUX1BBRF9ESVJFQ1RJT04gKHRhcmdldCkpKSkKKyAgICBpZiAoIWdzdF9naG9zdF9wYWRfc2V0X3RhcmdldCAoR1NUX0dIT1NUX1BBRF9DQVNUIChyZXQpLCB0YXJnZXQpKQorICAgICAgZ290byBzZXRfdGFyZ2V0X2ZhaWxlZDsKKworICByZXR1cm4gcmV0OworCisgIC8qIEVSUk9SUyAqLworc2V0X3RhcmdldF9mYWlsZWQ6CisgIHsKKyAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHJldCwgImZhaWxlZCB0byBzZXQgdGFyZ2V0ICVzOiVzIiwKKyAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FICh0YXJnZXQpKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChyZXQpOworICAgIHJldHVybiBOVUxMOworICB9Cit9CisKKy8qKgorICogZ3N0X2dob3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZToKKyAqIEBuYW1lOiAoYWxsb3ctbm9uZSk6IHRoZSBuYW1lIG9mIHRoZSBuZXcgcGFkLCBvciBOVUxMIHRvIGFzc2lnbiBhIGRlZmF1bHQgbmFtZS4KKyAqIEB0YXJnZXQ6ICh0cmFuc2ZlciBub25lKTogdGhlIHBhZCB0byBnaG9zdC4KKyAqIEB0ZW1wbDogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI0dzdFBhZFRlbXBsYXRlIHRvIHVzZSBvbiB0aGUgZ2hvc3RwYWQuCisgKgorICogQ3JlYXRlIGEgbmV3IGdob3N0cGFkIHdpdGggQHRhcmdldCBhcyB0aGUgdGFyZ2V0LiBUaGUgZGlyZWN0aW9uIHdpbGwgYmUgdGFrZW4KKyAqIGZyb20gdGhlIHRhcmdldCBwYWQuIFRoZSB0ZW1wbGF0ZSB1c2VkIG9uIHRoZSBnaG9zdHBhZCB3aWxsIGJlIEB0ZW1wbGF0ZS4KKyAqCisgKiBXaWxsIHJlZiB0aGUgdGFyZ2V0LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdFBhZCwgb3IgTlVMTCBpbiBjYXNlIG9mIGFuIGVycm9yLgorICoKKyAqIFNpbmNlOiAwLjEwLjEwCisgKi8KKworR3N0UGFkICoKK2dzdF9naG9zdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKGNvbnN0IGdjaGFyICogbmFtZSwgR3N0UGFkICogdGFyZ2V0LAorICAgIEdzdFBhZFRlbXBsYXRlICogdGVtcGwpCit7CisgIEdzdFBhZCAqcmV0OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEICh0YXJnZXQpLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKCFnc3RfcGFkX2lzX2xpbmtlZCAodGFyZ2V0KSwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0ZW1wbCAhPSBOVUxMLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9QQURfVEVNUExBVEVfRElSRUNUSU9OICh0ZW1wbCkgPT0KKyAgICAgIEdTVF9QQURfRElSRUNUSU9OICh0YXJnZXQpLCBOVUxMKTsKKworICBHU1RfTE9HICgibmFtZTolcywgdGFyZ2V0OiVzOiVzLCB0ZW1wbDolcCIsIEdTVF9TVFJfTlVMTCAobmFtZSksCisgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHRhcmdldCksIHRlbXBsKTsKKworICBpZiAoKHJldCA9IGdzdF9naG9zdF9wYWRfbmV3X2Z1bGwgKG5hbWUsIEdTVF9QQURfRElSRUNUSU9OICh0YXJnZXQpLCB0ZW1wbCkpKQorICAgIGlmICghZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0IChHU1RfR0hPU1RfUEFEX0NBU1QgKHJldCksIHRhcmdldCkpCisgICAgICBnb3RvIHNldF90YXJnZXRfZmFpbGVkOworCisgIHJldHVybiByZXQ7CisKKyAgLyogRVJST1JTICovCitzZXRfdGFyZ2V0X2ZhaWxlZDoKKyAgeworICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocmV0LCAiZmFpbGVkIHRvIHNldCB0YXJnZXQgJXM6JXMiLAorICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHRhcmdldCkpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKHJldCk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KK30KKworLyoqCisgKiBnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXRfZnJvbV90ZW1wbGF0ZToKKyAqIEBuYW1lOiAoYWxsb3ctbm9uZSk6IHRoZSBuYW1lIG9mIHRoZSBuZXcgcGFkLCBvciBOVUxMIHRvIGFzc2lnbiBhIGRlZmF1bHQgbmFtZQorICogQHRlbXBsOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjR3N0UGFkVGVtcGxhdGUgdG8gY3JlYXRlIHRoZSBnaG9zdHBhZCBmcm9tLgorICoKKyAqIENyZWF0ZSBhIG5ldyBnaG9zdHBhZCBiYXNlZCBvbiBAdGVtcGwsIHdpdGhvdXQgc2V0dGluZyBhIHRhcmdldC4gVGhlCisgKiBkaXJlY3Rpb24gd2lsbCBiZSB0YWtlbiBmcm9tIHRoZSBAdGVtcGwuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0UGFkLCBvciBOVUxMIGluIGNhc2Ugb2YgYW4gZXJyb3IuCisgKgorICogU2luY2U6IDAuMTAuMTAKKyAqLworR3N0UGFkICoKK2dzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldF9mcm9tX3RlbXBsYXRlIChjb25zdCBnY2hhciAqIG5hbWUsCisgICAgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCkKK3sKKyAgR3N0UGFkICpyZXQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRlbXBsICE9IE5VTEwsIE5VTEwpOworCisgIHJldCA9CisgICAgICBnc3RfZ2hvc3RfcGFkX25ld19mdWxsIChuYW1lLCBHU1RfUEFEX1RFTVBMQVRFX0RJUkVDVElPTiAodGVtcGwpLCB0ZW1wbCk7CisKKyAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBnc3RfZ2hvc3RfcGFkX2dldF90YXJnZXQ6CisgKiBAZ3BhZDogdGhlICNHc3RHaG9zdFBhZAorICoKKyAqIEdldCB0aGUgdGFyZ2V0IHBhZCBvZiBAZ3BhZC4gVW5yZWYgdGFyZ2V0IHBhZCBhZnRlciB1c2FnZS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSB0YXJnZXQgI0dzdFBhZCwgY2FuIGJlIE5VTEwgaWYgdGhlIGdob3N0cGFkCisgKiBoYXMgbm8gdGFyZ2V0IHNldC4gVW5yZWYgdGFyZ2V0IHBhZCBhZnRlciB1c2FnZS4KKyAqLworR3N0UGFkICoKK2dzdF9naG9zdF9wYWRfZ2V0X3RhcmdldCAoR3N0R2hvc3RQYWQgKiBncGFkKQoreworICBHc3RQYWQgKnJldDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0dIT1NUX1BBRCAoZ3BhZCksIE5VTEwpOworCisgIHJldCA9IGdzdF9wcm94eV9wYWRfZ2V0X3RhcmdldCAoR1NUX1BBRF9DQVNUIChncGFkKSk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoZ3BhZCwgImdldCB0YXJnZXQgJXM6JXMiLCBHU1RfREVCVUdfUEFEX05BTUUgKHJldCkpOworCisgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICogZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0OgorICogQGdwYWQ6IHRoZSAjR3N0R2hvc3RQYWQKKyAqIEBuZXd0YXJnZXQ6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IHRoZSBuZXcgcGFkIHRhcmdldAorICoKKyAqIFNldCB0aGUgbmV3IHRhcmdldCBvZiB0aGUgZ2hvc3RwYWQgQGdwYWQuIEFueSBleGlzdGluZyB0YXJnZXQKKyAqIGlzIHVubGlua2VkIGFuZCBsaW5rcyB0byB0aGUgbmV3IHRhcmdldCBhcmUgZXN0YWJsaXNoZWQuIGlmIEBuZXd0YXJnZXQgaXMKKyAqIE5VTEwgdGhlIHRhcmdldCB3aWxsIGJlIGNsZWFyZWQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBUUlVFIGlmIHRoZSBuZXcgdGFyZ2V0IGNvdWxkIGJlIHNldC4gVGhpcyBmdW5jdGlvbgorICogICAgIGNhbiByZXR1cm4gRkFMU0Ugd2hlbiB0aGUgaW50ZXJuYWwgcGFkcyBjb3VsZCBub3QgYmUgbGlua2VkLgorICovCitnYm9vbGVhbgorZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0IChHc3RHaG9zdFBhZCAqIGdwYWQsIEdzdFBhZCAqIG5ld3RhcmdldCkKK3sKKyAgR3N0UGFkICppbnRlcm5hbDsKKyAgR3N0UGFkICpvbGR0YXJnZXQ7CisgIGdib29sZWFuIHJlc3VsdDsKKyAgR3N0UGFkTGlua1JldHVybiBscmV0OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfR0hPU1RfUEFEIChncGFkKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1BBRF9DQVNUIChncGFkKSAhPSBuZXd0YXJnZXQsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG5ld3RhcmdldCAhPSBHU1RfUFJPWFlfUEFEX0lOVEVSTkFMIChncGFkKSwgRkFMU0UpOworCisgIC8qIG5vIG5lZWQgZm9yIGxvY2tpbmcsIHRoZSBpbnRlcm5hbCBwYWQncyBsaWZlY3ljbGUgaXMgZGlyZWN0bHkgbGlua2VkIHRvIHRoZQorICAgKiBnaG9zdHBhZCdzICovCisgIGludGVybmFsID0gR1NUX1BST1hZX1BBRF9JTlRFUk5BTCAoZ3BhZCk7CisKKyAgaWYgKG5ld3RhcmdldCkKKyAgICBHU1RfREVCVUdfT0JKRUNUIChncGFkLCAic2V0IHRhcmdldCAlczolcyIsIEdTVF9ERUJVR19QQURfTkFNRSAobmV3dGFyZ2V0KSk7CisgIGVsc2UKKyAgICBHU1RfREVCVUdfT0JKRUNUIChncGFkLCAiY2xlYXJpbmcgdGFyZ2V0Iik7CisKKyAgLyogY2xlYXIgb2xkIHRhcmdldCAqLworICBHU1RfUFJPWFlfTE9DSyAoZ3BhZCk7CisgIGlmICgob2xkdGFyZ2V0ID0gR1NUX1BST1hZX1BBRF9UQVJHRVQgKGdwYWQpKSkgeworCisgICAgR1NUX1BST1hZX1BBRF9SRVRBUkdFVCAoaW50ZXJuYWwpID0gVFJVRTsKKworICAgIC8qIHVubGluayBpbnRlcm5hbCBwYWQgKi8KKyAgICBpZiAoR1NUX1BBRF9JU19TUkMgKGludGVybmFsKSkKKyAgICAgIGdzdF9wYWRfdW5saW5rIChpbnRlcm5hbCwgb2xkdGFyZ2V0KTsKKyAgICBlbHNlCisgICAgICBnc3RfcGFkX3VubGluayAob2xkdGFyZ2V0LCBpbnRlcm5hbCk7CisKKyAgICBHU1RfUFJPWFlfUEFEX1JFVEFSR0VUIChpbnRlcm5hbCkgPSBGQUxTRTsKKyAgfQorCisgIHJlc3VsdCA9IGdzdF9wcm94eV9wYWRfc2V0X3RhcmdldF91bmxvY2tlZCAoR1NUX1BBRF9DQVNUIChncGFkKSwgbmV3dGFyZ2V0KTsKKyAgR1NUX1BST1hZX1VOTE9DSyAoZ3BhZCk7CisKKyAgaWYgKHJlc3VsdCAmJiBuZXd0YXJnZXQpIHsKKyAgICAvKiBhbmQgbGluayB0byBpbnRlcm5hbCBwYWQgd2l0aG91dCBhbnkgY2hlY2tzICovCisgICAgR1NUX0RFQlVHX09CSkVDVCAoZ3BhZCwgImNvbm5lY3RpbmcgaW50ZXJuYWwgcGFkIHRvIHRhcmdldCIpOworCisgICAgaWYgKEdTVF9QQURfSVNfU1JDIChpbnRlcm5hbCkpCisgICAgICBscmV0ID0KKyAgICAgICAgICBnc3RfcGFkX2xpbmtfZnVsbCAoaW50ZXJuYWwsIG5ld3RhcmdldCwgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOworICAgIGVsc2UKKyAgICAgIGxyZXQgPQorICAgICAgICAgIGdzdF9wYWRfbGlua19mdWxsIChuZXd0YXJnZXQsIGludGVybmFsLCBHU1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORyk7CisKKyAgICBpZiAobHJldCAhPSBHU1RfUEFEX0xJTktfT0spCisgICAgICBnb3RvIGxpbmtfZmFpbGVkOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKKworICAvKiBFUlJPUlMgKi8KK2xpbmtfZmFpbGVkOgorICB7CisgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChncGFkLCAiY291bGQgbm90IGxpbmsgaW50ZXJuYWwgYW5kIHRhcmdldCwgcmVhc29uOiVkIiwKKyAgICAgICAgbHJldCk7CisgICAgLyogYW5kIHVuc2V0IHRhcmdldCBhZ2FpbiAqLworICAgIEdTVF9QUk9YWV9MT0NLIChncGFkKTsKKyAgICBnc3RfcHJveHlfcGFkX3NldF90YXJnZXRfdW5sb2NrZWQgKEdTVF9QQURfQ0FTVCAoZ3BhZCksIE5VTEwpOworICAgIEdTVF9QUk9YWV9VTkxPQ0sgKGdwYWQpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGdob3N0cGFkLmggYi9nc3QvZ3N0Z2hvc3RwYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWIwMTBhCi0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdGdob3N0cGFkLmgKQEAgLTAsMCArMSwxMzMgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BjaGVsbG8uYmU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwNSBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisgKgorICogZ3N0Z2hvc3RwYWQuaDogUHJveHkgcGFkcworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworI2lmbmRlZiBfX0dTVF9HSE9TVF9QQURfSF9fCisjZGVmaW5lIF9fR1NUX0dIT1NUX1BBRF9IX18KKworCisjaW5jbHVkZSA8Z3N0L2dzdHBhZC5oPgorCisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBHU1RfVFlQRV9QUk9YWV9QQUQgICAgICAgICAgICAgIChnc3RfcHJveHlfcGFkX2dldF90eXBlICgpKQorI2RlZmluZSBHU1RfSVNfUFJPWFlfUEFEKG9iaikgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX1BST1hZX1BBRCkpCisjZGVmaW5lIEdTVF9JU19QUk9YWV9QQURfQ0xBU1Moa2xhc3MpICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9QUk9YWV9QQUQpKQorI2RlZmluZSBHU1RfUFJPWFlfUEFEKG9iaikgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX1BST1hZX1BBRCwgR3N0UHJveHlQYWQpKQorI2RlZmluZSBHU1RfUFJPWFlfUEFEX0NMQVNTKGtsYXNzKSAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfUFJPWFlfUEFELCBHc3RQcm94eVBhZENsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdFByb3h5UGFkIEdzdFByb3h5UGFkOwordHlwZWRlZiBzdHJ1Y3QgX0dzdFByb3h5UGFkUHJpdmF0ZSBHc3RQcm94eVBhZFByaXZhdGU7Cit0eXBlZGVmIHN0cnVjdCBfR3N0UHJveHlQYWRDbGFzcyBHc3RQcm94eVBhZENsYXNzOworCitzdHJ1Y3QgX0dzdFByb3h5UGFkCit7CisgIEdzdFBhZCBwYWQ7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIEdzdFByb3h5UGFkUHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfR3N0UHJveHlQYWRDbGFzcworeworICBHc3RQYWRDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbMV07Cit9OworCitHVHlwZSBnc3RfcHJveHlfcGFkX2dldF90eXBlICh2b2lkKTsKKworR3N0UHJveHlQYWQqICAgICBnc3RfcHJveHlfcGFkX2dldF9pbnRlcm5hbCAgICAgKEdzdFByb3h5UGFkICpwYWQpOworCisKK2NvbnN0IEdzdFF1ZXJ5VHlwZSogZ3N0X3Byb3h5X3BhZF9xdWVyeV90eXBlX2RlZmF1bHQgICAgICAgICAgICAgKEdzdFBhZCAqcGFkKTsKK2dib29sZWFuICAgICAgICAgICAgZ3N0X3Byb3h5X3BhZF9ldmVudF9kZWZhdWx0ICAgICAgICAgICAgICAgICAgKEdzdFBhZCAqcGFkLCBHc3RFdmVudCAqZXZlbnQpOworZ2Jvb2xlYW4gICAgICAgICAgICBnc3RfcHJveHlfcGFkX3F1ZXJ5X2RlZmF1bHQgICAgICAgICAgICAgICAgICAoR3N0UGFkICpwYWQsIEdzdFF1ZXJ5ICpxdWVyeSk7CitHc3RJdGVyYXRvciogICAgICAgIGdzdF9wcm94eV9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19kZWZhdWx0IChHc3RQYWQgKnBhZCk7CitHc3RGbG93UmV0dXJuICAgICAgIGdzdF9wcm94eV9wYWRfY2hhaW5fZGVmYXVsdCAgICAgICAgICAgICAgICAgIChHc3RQYWQgKnBhZCwgR3N0QnVmZmVyICpidWZmZXIpOworR3N0Rmxvd1JldHVybiAgICAgICBnc3RfcHJveHlfcGFkX2NoYWluX2xpc3RfZGVmYXVsdCAgICAgICAgICAgICAoR3N0UGFkICpwYWQsIEdzdEJ1ZmZlckxpc3QgKmxpc3QpOworR3N0Rmxvd1JldHVybiAgICAgICBnc3RfcHJveHlfcGFkX2dldHJhbmdlX2RlZmF1bHQgICAgICAgICAgICAgICAoR3N0UGFkICpwYWQsIGd1aW50NjQgb2Zmc2V0LCBndWludCBzaXplLCBHc3RCdWZmZXIgKipidWZmZXIpOworR3N0Q2FwcyogICAgICAgICAgICBnc3RfcHJveHlfcGFkX2dldGNhcHNfZGVmYXVsdCAgICAgICAgICAgICAgICAoR3N0UGFkICpwYWQsIEdzdENhcHMgKiBmaWx0ZXIpOworZ2Jvb2xlYW4gICAgICAgICAgICBnc3RfcHJveHlfcGFkX2FjY2VwdGNhcHNfZGVmYXVsdCAgICAgICAgICAgICAoR3N0UGFkICpwYWQsIEdzdENhcHMgKmNhcHMpOwordm9pZCAgICAgICAgICAgICAgICBnc3RfcHJveHlfcGFkX2ZpeGF0ZWNhcHNfZGVmYXVsdCAgICAgICAgICAgICAoR3N0UGFkICpwYWQsIEdzdENhcHMgKmNhcHMpOwordm9pZCAgICAgICAgICAgICAgICBnc3RfcHJveHlfcGFkX3VubGlua19kZWZhdWx0ICAgICAgICAgICAgICAgICAoR3N0UGFkICogcGFkKTsKKworI2RlZmluZSBHU1RfVFlQRV9HSE9TVF9QQUQJCShnc3RfZ2hvc3RfcGFkX2dldF90eXBlICgpKQorI2RlZmluZSBHU1RfSVNfR0hPU1RfUEFEKG9iaikJCShHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX0dIT1NUX1BBRCkpCisjZGVmaW5lIEdTVF9JU19HSE9TVF9QQURfQ0xBU1Moa2xhc3MpCShHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfR0hPU1RfUEFEKSkKKyNkZWZpbmUgR1NUX0dIT1NUX1BBRChvYmopCQkoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9HSE9TVF9QQUQsIEdzdEdob3N0UGFkKSkKKyNkZWZpbmUgR1NUX0dIT1NUX1BBRF9DTEFTUyhrbGFzcykJKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9HSE9TVF9QQUQsIEdzdEdob3N0UGFkQ2xhc3MpKQorI2RlZmluZSBHU1RfR0hPU1RfUEFEX0NBU1Qob2JqKQkJKChHc3RHaG9zdFBhZCopKG9iaikpCisKKy8qKgorICogR3N0R2hvc3RQYWQ6CisgKgorICogT3BhcXVlICNHc3RHaG9zdFBhZCBzdHJ1Y3R1cmUuCisgKi8KK3R5cGVkZWYgc3RydWN0IF9Hc3RHaG9zdFBhZCBHc3RHaG9zdFBhZDsKK3R5cGVkZWYgc3RydWN0IF9Hc3RHaG9zdFBhZFByaXZhdGUgR3N0R2hvc3RQYWRQcml2YXRlOwordHlwZWRlZiBzdHJ1Y3QgX0dzdEdob3N0UGFkQ2xhc3MgR3N0R2hvc3RQYWRDbGFzczsKKworc3RydWN0IF9Hc3RHaG9zdFBhZAoreworICBHc3RQcm94eVBhZCBwYWQ7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIEdzdEdob3N0UGFkUHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfR3N0R2hvc3RQYWRDbGFzcworeworICBHc3RQcm94eVBhZENsYXNzIHBhcmVudF9jbGFzczsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Cit9OworCisKK0dUeXBlCQkgZ3N0X2dob3N0X3BhZF9nZXRfdHlwZSAJKHZvaWQpOworCitHc3RQYWQqCQkgZ3N0X2dob3N0X3BhZF9uZXcJCShjb25zdCBnY2hhciAqbmFtZSwgR3N0UGFkICp0YXJnZXQpOworR3N0UGFkKgkJIGdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldAkoY29uc3QgZ2NoYXIgKm5hbWUsIEdzdFBhZERpcmVjdGlvbiBkaXIpOworCitHc3RQYWQqCQkgZ3N0X2dob3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoY29uc3QgZ2NoYXIgKm5hbWUsIEdzdFBhZCAqIHRhcmdldCwgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCk7CitHc3RQYWQqCQkgZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0X2Zyb21fdGVtcGxhdGUgKGNvbnN0IGdjaGFyICpuYW1lLCBHc3RQYWRUZW1wbGF0ZSAqIHRlbXBsKTsKKworR3N0UGFkKgkJIGdzdF9naG9zdF9wYWRfZ2V0X3RhcmdldAkoR3N0R2hvc3RQYWQgKmdwYWQpOworZ2Jvb2xlYW4JIGdzdF9naG9zdF9wYWRfc2V0X3RhcmdldAkoR3N0R2hvc3RQYWQgKmdwYWQsIEdzdFBhZCAqbmV3dGFyZ2V0KTsKKworZ2Jvb2xlYW4JIGdzdF9naG9zdF9wYWRfY29uc3RydWN0CShHc3RHaG9zdFBhZCAqZ3BhZCk7CisKK3ZvaWQgICAgICAgICAgICAgZ3N0X2dob3N0X3BhZF91bmxpbmtfZGVmYXVsdCAgICAgICAgIChHc3RQYWQgKiBwYWQpOworR3N0UGFkTGlua1JldHVybiBnc3RfZ2hvc3RfcGFkX2xpbmtfZGVmYXVsdCAgICAgICAgICAgKEdzdFBhZCAqIHBhZCwgR3N0UGFkICogcGVlcik7CitnYm9vbGVhbiAgICAgICAgIGdzdF9naG9zdF9wYWRfYWN0aXZhdGVfcHVsbF9kZWZhdWx0ICAoR3N0UGFkICogcGFkLCBnYm9vbGVhbiBhY3RpdmUpOworZ2Jvb2xlYW4gICAgICAgICBnc3RfZ2hvc3RfcGFkX2FjdGl2YXRlX3B1c2hfZGVmYXVsdCAgKEdzdFBhZCAqIHBhZCwgZ2Jvb2xlYW4gYWN0aXZlKTsKKworZ2Jvb2xlYW4gICAgICAgICBnc3RfZ2hvc3RfcGFkX2ludGVybmFsX2FjdGl2YXRlX3B1c2hfZGVmYXVsdCAoR3N0UGFkICogcGFkLCBnYm9vbGVhbiBhY3RpdmUpOworZ2Jvb2xlYW4gICAgICAgICBnc3RfZ2hvc3RfcGFkX2ludGVybmFsX2FjdGl2YXRlX3B1bGxfZGVmYXVsdCAoR3N0UGFkICogcGFkLCBnYm9vbGVhbiBhY3RpdmUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HU1RfR0hPU1RfUEFEX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGluZGV4LmMgYi9nc3QvZ3N0aW5kZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTY4ZWVlCi0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdGluZGV4LmMKQEAgLTAsMCArMSwxMDA5IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwMSBSaWRnZVJ1biAoaHR0cDovL3d3dy5yaWRnZXJ1bi5jb20vKQorICogV3JpdHRlbiBieSBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQHJpZGdlcnVuLmNvbT4KKyAqCisgKiBnc3RpbmRleC5jOiBJbmRleCBmb3IgbWFwcGluZ3MgYW5kIG90aGVyIGRhdGEKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKioKKyAqIFNFQ1RJT046Z3N0aW5kZXgKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogR2VuZXJhdGUgaW5kZXhlcyBvbiBvYmplY3RzCisgKiBAc2VlX2Fsc286ICNHc3RJbmRleEZhY3RvcnkKKyAqCisgKiBHc3RJbmRleCBpcyB1c2VkIHRvIGdlbmVyYXRlIGEgc3RyZWFtIGluZGV4IG9mIG9uZSBvciBtb3JlIGVsZW1lbnRzCisgKiBpbiBhIHBpcGVsaW5lLgorICoKKyAqIEVsZW1lbnRzIHdpbGwgb3ZlcmxvYWQgdGhlIHNldF9pbmRleCBhbmQgZ2V0X2luZGV4IHZpcnR1YWwgbWV0aG9kcyBpbgorICogI0dzdEVsZW1lbnQuIFdoZW4gc3RyZWFtaW5nIGRhdGEsIHRoZSBlbGVtZW50IHdpbGwgYWRkIGluZGV4IGVudHJpZXMgaWYgaXQKKyAqIGhhcyBhbiBpbmRleCBzZXQuCisgKgorICogRWFjaCBlbGVtZW50IHRoYXQgYWRkcyB0byB0aGUgaW5kZXggd2lsbCBkbyB0aGF0IHVzaW5nIGEgd3JpdGVyX2lkLiBUaGUKKyAqIHdyaXRlcl9pZCBpcyBvYnRhaW5lZCBmcm9tIGdzdF9pbmRleF9nZXRfd3JpdGVyX2lkKCkuCisgKgorICogVGhlIGFwcGxpY2F0aW9uIHRoYXQgd2FudHMgdG8gaW5kZXggdGhlIHN0cmVhbSB3aWxsIGNyZWF0ZSBhIG5ldyBpbmRleCBvYmplY3QKKyAqIHVzaW5nIGdzdF9pbmRleF9uZXcoKSBvciBnc3RfaW5kZXhfZmFjdG9yeV9tYWtlKCkuIFRoZSBpbmRleCBpcyBhc3NpZ25lZCB0byBhCisgKiBzcGVjaWZpYyBlbGVtZW50LCBhIGJpbiBvciB0aGUgd2hvbGUgcGlwZWxpbmUuIFRoaXMgd2lsbCBjYXVzZSBpbmRleGFibGUKKyAqIGVsZW1lbnRzIHRvIGFkZCBlbnRpcmVzIHRvIHRoZSBpbmRleCB3aGlsZSBwbGF5aW5nLgorICovCisKKy8qIEZJWE1FOiBjb21wbGV0ZSBnb2JqZWN0IGFubm90YXRpb25zICovCisvKiBGSVhNRS0wLjExOiBjbGVhbnVwIEFQSQorICogLSBubyBvbmUgc2VlbXMgdG8gdXNlIEdzdEluZGV4R3JvdXAsIEdzdEluZGV4Q2VydGFpbnR5CisgKgorICogLSB0aGUgQVBJIGZvciBhcHBsaWNhdGlvbiB0byB1c2UgdGhlIGluZGV4IGlzIG1vc3RseSBtaXNzaW5nCisgKiAgIC0gYXBwcyBuZWVkIHRvIGdldCBhIGxpc3Qgb2Ygd3JpdGVycworICogICAtIGFwcHMgbmVlZCB0byBiZSBhYmxlIHRvIGl0ZXJhdGUgb3ZlciBlYWNoIHdyaXRlcnMgaW5kZXggZW50cnkgY29sbGVjdGlvbgorICogLSBnc3RfaW5kZXhfZ2V0X2Fzc29jX2VudHJ5KCkgc2hvdWxkIHBhc3Mgb3duZXJzaGlwCisgKiAgIC0gdGhlIEdzdEluZGV4RW50cnkgc3RydWN0dXJlIGlzIGxhcmdlIGFuZCBjb250YWlucyByZXBldGl0aXZlIGluZm9ybWF0aW9uCisgKiAgIC0gd2Ugd2FudCB0byBhbGxvdyBJbmRleGVycyB0byBpbXBsZW1lbnQgYSBzYW5lciBzdG9yYWdlIGFuZCBjcmVhdGUKKyAqICAgICBHc3RJbmRleEVudHJpZXMgb24gZGVtYW5kICh0aGUgYXBwIGhhcyB0byBmcmVlIHRoZW0pLCBtaWdodCBldmVuIG1ha2UKKyAqICAgICBzZW5zZSB0byBhc2sgdGhlIGFwcCB0byBwcm92aWRlIGEgcHRyIGFuZCBmaWxsIGl0LgorICovCisKKyNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgorCisjaW5jbHVkZSAiZ3N0aW5mby5oIgorI2luY2x1ZGUgImdzdGluZGV4LmgiCisjaW5jbHVkZSAiZ3N0aW5kZXhmYWN0b3J5LmgiCisjaW5jbHVkZSAiZ3N0bWFyc2hhbC5oIgorI2luY2x1ZGUgImdzdHJlZ2lzdHJ5LmgiCisvKiBmb3IgY29uc3RydWN0aW5nIGFuIGVudHJ5IG5hbWUgKi8KKyNpbmNsdWRlICJnc3RlbGVtZW50LmgiCisjaW5jbHVkZSAiZ3N0cGFkLmgiCisjaW5jbHVkZSAiZ3N0aW5mby5oIgorCisvKiBJbmRleCBzaWduYWxzIGFuZCBhcmdzICovCitlbnVtCit7CisgIEVOVFJZX0FEREVELAorICBMQVNUX1NJR05BTAorfTsKKworZW51bQoreworICBBUkdfMCwKKyAgQVJHX1JFU09MVkVSCisgICAgICAvKiBGSUxMIE1FICovCit9OworCitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChpbmRleF9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBpbmRleF9kZWJ1ZworCitzdGF0aWMgdm9pZCBnc3RfaW5kZXhfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOworCitzdGF0aWMgdm9pZCBnc3RfaW5kZXhfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOworc3RhdGljIHZvaWQgZ3N0X2luZGV4X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKKworc3RhdGljIEdzdEluZGV4R3JvdXAgKmdzdF9pbmRleF9ncm91cF9uZXcgKGd1aW50IGdyb3VwbnVtKTsKK3N0YXRpYyB2b2lkIGdzdF9pbmRleF9ncm91cF9mcmVlIChHc3RJbmRleEdyb3VwICogZ3JvdXApOworCitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2luZGV4X3BhdGhfcmVzb2x2ZXIgKEdzdEluZGV4ICogaW5kZXgsIEdzdE9iamVjdCAqIHdyaXRlciwKKyAgICBnY2hhciAqKiB3cml0ZXJfc3RyaW5nLCBncG9pbnRlciBkYXRhKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfaW5kZXhfZ3R5cGVfcmVzb2x2ZXIgKEdzdEluZGV4ICogaW5kZXgsIEdzdE9iamVjdCAqIHdyaXRlciwKKyAgICBnY2hhciAqKiB3cml0ZXJfc3RyaW5nLCBncG9pbnRlciBkYXRhKTsKK3N0YXRpYyB2b2lkIGdzdF9pbmRleF9hZGRfZW50cnkgKEdzdEluZGV4ICogaW5kZXgsIEdzdEluZGV4RW50cnkgKiBlbnRyeSk7CisKK3N0YXRpYyBHc3RPYmplY3QgKnBhcmVudF9jbGFzcyA9IE5VTEw7CitzdGF0aWMgZ3VpbnQgZ3N0X2luZGV4X3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIEdzdEluZGV4UmVzb2x2ZXJNZXRob2QgbWV0aG9kOworICBHc3RJbmRleFJlc29sdmVyIHJlc29sdmVyOworICBncG9pbnRlciB1c2VyX2RhdGE7Cit9CitSZXNvbHZlckVudHJ5OworCitzdGF0aWMgY29uc3QgUmVzb2x2ZXJFbnRyeSByZXNvbHZlcnNbXSA9IHsKKyAge0dTVF9JTkRFWF9SRVNPTFZFUl9DVVNUT00sIE5VTEwsIE5VTEx9LAorICB7R1NUX0lOREVYX1JFU09MVkVSX0dUWVBFLCBnc3RfaW5kZXhfZ3R5cGVfcmVzb2x2ZXIsIE5VTEx9LAorICB7R1NUX0lOREVYX1JFU09MVkVSX1BBVEgsIGdzdF9pbmRleF9wYXRoX3Jlc29sdmVyLCBOVUxMfSwKK307CisKKyNkZWZpbmUgR1NUX1RZUEVfSU5ERVhfUkVTT0xWRVIgKGdzdF9pbmRleF9yZXNvbHZlcl9nZXRfdHlwZSgpKQorc3RhdGljIEdUeXBlCitnc3RfaW5kZXhfcmVzb2x2ZXJfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBHVHlwZSBpbmRleF9yZXNvbHZlcl90eXBlID0gMDsKKyAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgaW5kZXhfcmVzb2x2ZXJbXSA9IHsKKyAgICB7R1NUX0lOREVYX1JFU09MVkVSX0NVU1RPTSwgIkdTVF9JTkRFWF9SRVNPTFZFUl9DVVNUT00iLCAiY3VzdG9tIn0sCisgICAge0dTVF9JTkRFWF9SRVNPTFZFUl9HVFlQRSwgIkdTVF9JTkRFWF9SRVNPTFZFUl9HVFlQRSIsICJndHlwZSJ9LAorICAgIHtHU1RfSU5ERVhfUkVTT0xWRVJfUEFUSCwgIkdTVF9JTkRFWF9SRVNPTFZFUl9QQVRIIiwgInBhdGgifSwKKyAgICB7MCwgTlVMTCwgTlVMTH0sCisgIH07CisKKyAgaWYgKCFpbmRleF9yZXNvbHZlcl90eXBlKSB7CisgICAgaW5kZXhfcmVzb2x2ZXJfdHlwZSA9CisgICAgICAgIGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RJbmRleFJlc29sdmVyIiwgaW5kZXhfcmVzb2x2ZXIpOworICB9CisgIHJldHVybiBpbmRleF9yZXNvbHZlcl90eXBlOworfQorCitHVHlwZQorZ3N0X2luZGV4X2VudHJ5X2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgR1R5cGUgaW5kZXhfZW50cnlfdHlwZSA9IDA7CisKKyAgaWYgKCFpbmRleF9lbnRyeV90eXBlKSB7CisgICAgaW5kZXhfZW50cnlfdHlwZSA9IGdfYm94ZWRfdHlwZV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RJbmRleEVudHJ5IiwKKyAgICAgICAgKEdCb3hlZENvcHlGdW5jKSBnc3RfaW5kZXhfZW50cnlfY29weSwKKyAgICAgICAgKEdCb3hlZEZyZWVGdW5jKSBnc3RfaW5kZXhfZW50cnlfZnJlZSk7CisgIH0KKyAgcmV0dXJuIGluZGV4X2VudHJ5X3R5cGU7Cit9CisKKyNkZWZpbmUgX2RvX2luaXQgXAoreyBcCisgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChpbmRleF9kZWJ1ZywgIkdTVF9JTkRFWCIsIEdTVF9ERUJVR19CT0xELCBcCisgICAgICAiR2VuZXJpYyBpbmRleGluZyBzdXBwb3J0Iik7IFwKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdEluZGV4LCBnc3RfaW5kZXgsIEdTVF9UWVBFX09CSkVDVCwgX2RvX2luaXQpOworCitzdGF0aWMgdm9pZAorZ3N0X2luZGV4X2NsYXNzX2luaXQgKEdzdEluZGV4Q2xhc3MgKiBrbGFzcykKK3sKKyAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKKworICBwYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQgKGtsYXNzKTsKKworICAvKioKKyAgICogR3N0SW5kZXg6OmVudHJ5LWFkZGVkCisgICAqIEBnc3RpbmRleDogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsLgorICAgKiBAYXJnMTogVGhlIGVudHJ5IGFkZGVkIHRvIHRoZSBpbmRleC4KKyAgICoKKyAgICogSXMgZW1pdHRlZCB3aGVuIGEgbmV3IGVudHJ5IGlzIGFkZGVkIHRvIHRoZSBpbmRleC4KKyAgICovCisgIGdzdF9pbmRleF9zaWduYWxzW0VOVFJZX0FEREVEXSA9CisgICAgICBnX3NpZ25hbF9uZXcgKCJlbnRyeS1hZGRlZCIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgR19TVFJVQ1RfT0ZGU0VUIChHc3RJbmRleENsYXNzLCBlbnRyeV9hZGRlZCksIE5VTEwsIE5VTEwsCisgICAgICBnc3RfbWFyc2hhbF9WT0lEX19CT1hFRCwgR19UWVBFX05PTkUsIDEsIEdTVF9UWVBFX0lOREVYX0VOVFJZKTsKKworICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfaW5kZXhfc2V0X3Byb3BlcnR5OworICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfaW5kZXhfZ2V0X3Byb3BlcnR5OworICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9pbmRleF9maW5hbGl6ZTsKKworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBBUkdfUkVTT0xWRVIsCisgICAgICBnX3BhcmFtX3NwZWNfZW51bSAoInJlc29sdmVyIiwgIlJlc29sdmVyIiwKKyAgICAgICAgICAiU2VsZWN0IGEgcHJlZGVmaW5lZCBvYmplY3QgdG8gc3RyaW5nIG1hcHBlciIsCisgICAgICAgICAgR1NUX1RZUEVfSU5ERVhfUkVTT0xWRVIsIEdTVF9JTkRFWF9SRVNPTFZFUl9QQVRILAorICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2luZGV4X2luaXQgKEdzdEluZGV4ICogaW5kZXgpCit7CisgIGluZGV4LT5jdXJncm91cCA9IGdzdF9pbmRleF9ncm91cF9uZXcgKDApOworICBpbmRleC0+bWF4Z3JvdXAgPSAwOworICBpbmRleC0+Z3JvdXBzID0gZ19saXN0X3ByZXBlbmQgKE5VTEwsIGluZGV4LT5jdXJncm91cCk7CisKKyAgaW5kZXgtPndyaXRlcnMgPSBnX2hhc2hfdGFibGVfbmV3IChOVUxMLCBOVUxMKTsKKyAgaW5kZXgtPmxhc3RfaWQgPSAwOworCisgIGluZGV4LT5tZXRob2QgPSBHU1RfSU5ERVhfUkVTT0xWRVJfUEFUSDsKKyAgaW5kZXgtPnJlc29sdmVyID0gcmVzb2x2ZXJzW2luZGV4LT5tZXRob2RdLnJlc29sdmVyOworICBpbmRleC0+cmVzb2x2ZXJfdXNlcl9kYXRhID0gcmVzb2x2ZXJzW2luZGV4LT5tZXRob2RdLnVzZXJfZGF0YTsKKworICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChpbmRleCwgR1NUX0lOREVYX1dSSVRBQkxFKTsKKyAgR1NUX09CSkVDVF9GTEFHX1NFVCAoaW5kZXgsIEdTVF9JTkRFWF9SRUFEQUJMRSk7CisKKyAgR1NUX0RFQlVHICgiY3JlYXRlZCBuZXcgaW5kZXgiKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9pbmRleF9mcmVlX3dyaXRlciAoZ3BvaW50ZXIga2V5LCBncG9pbnRlciB2YWx1ZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBHc3RJbmRleEVudHJ5ICplbnRyeSA9IChHc3RJbmRleEVudHJ5ICopIHZhbHVlOworCisgIGlmIChlbnRyeSkgeworICAgIGdzdF9pbmRleF9lbnRyeV9mcmVlIChlbnRyeSk7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9pbmRleF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKK3sKKyAgR3N0SW5kZXggKmluZGV4ID0gR1NUX0lOREVYIChvYmplY3QpOworCisgIGlmIChpbmRleC0+Z3JvdXBzKSB7CisgICAgZ19saXN0X2ZvcmVhY2ggKGluZGV4LT5ncm91cHMsIChHRnVuYykgZ3N0X2luZGV4X2dyb3VwX2ZyZWUsIE5VTEwpOworICAgIGdfbGlzdF9mcmVlIChpbmRleC0+Z3JvdXBzKTsKKyAgICBpbmRleC0+Z3JvdXBzID0gTlVMTDsKKyAgfQorCisgIGlmIChpbmRleC0+d3JpdGVycykgeworICAgIGdfaGFzaF90YWJsZV9mb3JlYWNoIChpbmRleC0+d3JpdGVycywgZ3N0X2luZGV4X2ZyZWVfd3JpdGVyLCBOVUxMKTsKKyAgICBnX2hhc2hfdGFibGVfZGVzdHJveSAoaW5kZXgtPndyaXRlcnMpOworICAgIGluZGV4LT53cml0ZXJzID0gTlVMTDsKKyAgfQorCisgIGlmIChpbmRleC0+ZmlsdGVyX3VzZXJfZGF0YSAmJiBpbmRleC0+ZmlsdGVyX3VzZXJfZGF0YV9kZXN0cm95KQorICAgIGluZGV4LT5maWx0ZXJfdXNlcl9kYXRhX2Rlc3Ryb3kgKGluZGV4LT5maWx0ZXJfdXNlcl9kYXRhKTsKKworICBpZiAoaW5kZXgtPnJlc29sdmVyX3VzZXJfZGF0YSAmJiBpbmRleC0+cmVzb2x2ZXJfdXNlcl9kYXRhX2Rlc3Ryb3kpCisgICAgaW5kZXgtPnJlc29sdmVyX3VzZXJfZGF0YV9kZXN0cm95IChpbmRleC0+cmVzb2x2ZXJfdXNlcl9kYXRhKTsKKworICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfaW5kZXhfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIEdzdEluZGV4ICppbmRleDsKKworICBpbmRleCA9IEdTVF9JTkRFWCAob2JqZWN0KTsKKworICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIEFSR19SRVNPTFZFUjoKKyAgICAgIGluZGV4LT5tZXRob2QgPSAoR3N0SW5kZXhSZXNvbHZlck1ldGhvZCkgZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOworICAgICAgaW5kZXgtPnJlc29sdmVyID0gcmVzb2x2ZXJzW2luZGV4LT5tZXRob2RdLnJlc29sdmVyOworICAgICAgaW5kZXgtPnJlc29sdmVyX3VzZXJfZGF0YSA9IHJlc29sdmVyc1tpbmRleC0+bWV0aG9kXS51c2VyX2RhdGE7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfaW5kZXhfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIEdzdEluZGV4ICppbmRleDsKKworICBpbmRleCA9IEdTVF9JTkRFWCAob2JqZWN0KTsKKworICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIEFSR19SRVNPTFZFUjoKKyAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBpbmRleC0+bWV0aG9kKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KK30KKworc3RhdGljIEdzdEluZGV4R3JvdXAgKgorZ3N0X2luZGV4X2dyb3VwX25ldyAoZ3VpbnQgZ3JvdXBudW0pCit7CisgIEdzdEluZGV4R3JvdXAgKmluZGV4Z3JvdXAgPSBnX3NsaWNlX25ldyAoR3N0SW5kZXhHcm91cCk7CisKKyAgaW5kZXhncm91cC0+Z3JvdXBudW0gPSBncm91cG51bTsKKyAgaW5kZXhncm91cC0+ZW50cmllcyA9IE5VTEw7CisgIGluZGV4Z3JvdXAtPmNlcnRhaW50eSA9IEdTVF9JTkRFWF9VTktOT1dOOworICBpbmRleGdyb3VwLT5wZWVyZ3JvdXAgPSAtMTsKKworICBHU1RfREVCVUcgKCJjcmVhdGVkIG5ldyBpbmRleCBncm91cCAlZCIsIGdyb3VwbnVtKTsKKworICByZXR1cm4gaW5kZXhncm91cDsKK30KKworc3RhdGljIHZvaWQKK2dzdF9pbmRleF9ncm91cF9mcmVlIChHc3RJbmRleEdyb3VwICogZ3JvdXApCit7CisgIGdfc2xpY2VfZnJlZSAoR3N0SW5kZXhHcm91cCwgZ3JvdXApOworfQorCisvKioKKyAqIGdzdF9pbmRleF9uZXc6CisgKgorICogQ3JlYXRlIGEgbmV3IGR1bW15IGluZGV4IG9iamVjdC4gVXNlIGdzdF9lbGVtZW50X3NldF9pbmRleCgpIHRvIGFzc2lnbiB0aGF0CisgKiB0byBhbiBlbGVtZW50IG9yIHBpcGVsaW5lLiBUaGlzIGluZGV4IGlzIG5vdCBzdG9yaW5nIGFueXRoaW5nLCBidXQgd2lsbAorICogc3RpbGwgZW1pdCBlLmcuIHRoZSAjR3N0SW5kZXg6OmVudHJ5LWFkZGVkIHNpZ25hbC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IGluZGV4IG9iamVjdAorICovCitHc3RJbmRleCAqCitnc3RfaW5kZXhfbmV3ICh2b2lkKQoreworICBHc3RJbmRleCAqaW5kZXg7CisKKyAgaW5kZXggPSBnX29iamVjdF9uZXd2IChnc3RfaW5kZXhfZ2V0X3R5cGUgKCksIDAsIE5VTEwpOworCisgIHJldHVybiBpbmRleDsKK30KKworLyoqCisgKiBnc3RfaW5kZXhfY29tbWl0OgorICogQGluZGV4OiB0aGUgaW5kZXggdG8gY29tbWl0CisgKiBAaWQ6IHRoZSB3cml0ZXIgdGhhdCBjb21taXRlZCB0aGUgaW5kZXgKKyAqCisgKiBUZWxsIHRoZSBpbmRleCB0aGF0IHRoZSB3cml0ZXIgd2l0aCB0aGUgZ2l2ZW4gaWQgaXMgZG9uZQorICogd2l0aCB0aGlzIGluZGV4IGFuZCBpcyBub3QgZ29pbmcgdG8gd3JpdGUgYW55IG1vcmUgZW50cmllcworICogdG8gaXQuCisgKi8KK3ZvaWQKK2dzdF9pbmRleF9jb21taXQgKEdzdEluZGV4ICogaW5kZXgsIGdpbnQgaWQpCit7CisgIEdzdEluZGV4Q2xhc3MgKmljbGFzczsKKworICBpY2xhc3MgPSBHU1RfSU5ERVhfR0VUX0NMQVNTIChpbmRleCk7CisKKyAgaWYgKGljbGFzcy0+Y29tbWl0KQorICAgIGljbGFzcy0+Y29tbWl0IChpbmRleCwgaWQpOworfQorCisKKy8qKgorICogZ3N0X2luZGV4X2dldF9ncm91cDoKKyAqIEBpbmRleDogdGhlIGluZGV4IHRvIGdldCB0aGUgY3VycmVudCBncm91cCBmcm9tCisgKgorICogR2V0IHRoZSBpZCBvZiB0aGUgY3VycmVudCBncm91cC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgaWQgb2YgdGhlIGN1cnJlbnQgZ3JvdXAuCisgKi8KK2dpbnQKK2dzdF9pbmRleF9nZXRfZ3JvdXAgKEdzdEluZGV4ICogaW5kZXgpCit7CisgIHJldHVybiBpbmRleC0+Y3VyZ3JvdXAtPmdyb3VwbnVtOworfQorCisvKioKKyAqIGdzdF9pbmRleF9uZXdfZ3JvdXA6CisgKiBAaW5kZXg6IHRoZSBpbmRleCB0byBjcmVhdGUgdGhlIG5ldyBncm91cCBpbgorICoKKyAqIENyZWF0ZSBhIG5ldyBncm91cCBmb3IgdGhlIGdpdmVuIGluZGV4LiBJdCB3aWxsIGJlCisgKiBzZXQgYXMgdGhlIGN1cnJlbnQgZ3JvdXAuCisgKgorICogUmV0dXJuczogdGhlIGlkIG9mIHRoZSBuZXdseSBjcmVhdGVkIGdyb3VwLgorICovCitnaW50Citnc3RfaW5kZXhfbmV3X2dyb3VwIChHc3RJbmRleCAqIGluZGV4KQoreworICBpbmRleC0+Y3VyZ3JvdXAgPSBnc3RfaW5kZXhfZ3JvdXBfbmV3ICgrK2luZGV4LT5tYXhncm91cCk7CisgIGluZGV4LT5ncm91cHMgPSBnX2xpc3RfYXBwZW5kIChpbmRleC0+Z3JvdXBzLCBpbmRleC0+Y3VyZ3JvdXApOworICBHU1RfREVCVUcgKCJjcmVhdGVkIG5ldyBncm91cCAlZCBpbiBpbmRleCIsIGluZGV4LT5tYXhncm91cCk7CisgIHJldHVybiBpbmRleC0+bWF4Z3JvdXA7Cit9CisKKy8qKgorICogZ3N0X2luZGV4X3NldF9ncm91cDoKKyAqIEBpbmRleDogdGhlIGluZGV4IHRvIHNldCB0aGUgbmV3IGdyb3VwIGluCisgKiBAZ3JvdXBudW06IHRoZSBncm91cG51bWJlciB0byBzZXQKKyAqCisgKiBTZXQgdGhlIGN1cnJlbnQgZ3JvdXBudW1iZXIgdG8gdGhlIGdpdmVuIGFyZ3VtZW50LgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIG9wZXJhdGlvbiBzdWNjZWVkZWQsIEZBTFNFIGlmIHRoZSBncm91cAorICogZGlkIG5vdCBleGlzdC4KKyAqLworZ2Jvb2xlYW4KK2dzdF9pbmRleF9zZXRfZ3JvdXAgKEdzdEluZGV4ICogaW5kZXgsIGdpbnQgZ3JvdXBudW0pCit7CisgIEdMaXN0ICpsaXN0OworICBHc3RJbmRleEdyb3VwICppbmRleGdyb3VwOworCisgIC8qIGZpcnN0IGNoZWNrIGZvciBudWxsIGNoYW5nZSAqLworICBpZiAoZ3JvdXBudW0gPT0gaW5kZXgtPmN1cmdyb3VwLT5ncm91cG51bSkKKyAgICByZXR1cm4gVFJVRTsKKworICAvKiBlbHNlIHNlYXJjaCBmb3IgdGhlIHByb3BlciBncm91cCAqLworICBsaXN0ID0gaW5kZXgtPmdyb3VwczsKKyAgd2hpbGUgKGxpc3QpIHsKKyAgICBpbmRleGdyb3VwID0gKEdzdEluZGV4R3JvdXAgKikgKGxpc3QtPmRhdGEpOworICAgIGxpc3QgPSBnX2xpc3RfbmV4dCAobGlzdCk7CisgICAgaWYgKGluZGV4Z3JvdXAtPmdyb3VwbnVtID09IGdyb3VwbnVtKSB7CisgICAgICBpbmRleC0+Y3VyZ3JvdXAgPSBpbmRleGdyb3VwOworICAgICAgR1NUX0RFQlVHICgic3dpdGNoZWQgdG8gaW5kZXggZ3JvdXAgJWQiLCBpbmRleGdyb3VwLT5ncm91cG51bSk7CisgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgIH0KKworICAvKiBjb3VsZG4ndCBmaW5kIHRoZSBncm91cCBpbiBxdWVzdGlvbiAqLworICBHU1RfREVCVUcgKCJjb3VsZG4ndCBmaW5kIGluZGV4IGdyb3VwICVkIiwgZ3JvdXBudW0pOworICByZXR1cm4gRkFMU0U7Cit9CisKKy8qKgorICogZ3N0X2luZGV4X3NldF9jZXJ0YWludHk6CisgKiBAaW5kZXg6IHRoZSBpbmRleCB0byBzZXQgdGhlIGNlcnRhaW50eSBvbgorICogQGNlcnRhaW50eTogdGhlIGNlcnRhaW50eSB0byBzZXQKKyAqCisgKiBTZXQgdGhlIGNlcnRhaW50eSBvZiB0aGUgZ2l2ZW4gaW5kZXguCisgKi8KK3ZvaWQKK2dzdF9pbmRleF9zZXRfY2VydGFpbnR5IChHc3RJbmRleCAqIGluZGV4LCBHc3RJbmRleENlcnRhaW50eSBjZXJ0YWludHkpCit7CisgIGluZGV4LT5jdXJncm91cC0+Y2VydGFpbnR5ID0gY2VydGFpbnR5OworfQorCisvKioKKyAqIGdzdF9pbmRleF9nZXRfY2VydGFpbnR5OgorICogQGluZGV4OiB0aGUgaW5kZXggdG8gZ2V0IHRoZSBjZXJ0YWludHkgb2YKKyAqCisgKiBHZXQgdGhlIGNlcnRhaW50eSBvZiB0aGUgZ2l2ZW4gaW5kZXguCisgKgorICogUmV0dXJuczogdGhlIGNlcnRhaW50eSBvZiB0aGUgaW5kZXguCisgKi8KK0dzdEluZGV4Q2VydGFpbnR5Citnc3RfaW5kZXhfZ2V0X2NlcnRhaW50eSAoR3N0SW5kZXggKiBpbmRleCkKK3sKKyAgcmV0dXJuIGluZGV4LT5jdXJncm91cC0+Y2VydGFpbnR5OworfQorCisvKioKKyAqIGdzdF9pbmRleF9zZXRfZmlsdGVyOgorICogQGluZGV4OiB0aGUgaW5kZXggdG8gcmVnaXN0ZXIgdGhlIGZpbHRlciBvbgorICogQGZpbHRlcjogdGhlIGZpbHRlciB0byByZWdpc3RlcgorICogQHVzZXJfZGF0YTogZGF0YSBwYXNzZWQgdG8gdGhlIGZpbHRlciBmdW5jdGlvbgorICoKKyAqIExldHMgdGhlIGFwcCByZWdpc3RlciBhIGN1c3RvbSBmaWx0ZXIgZnVuY3Rpb24gc28gdGhhdAorICogaXQgY2FuIHNlbGVjdCB3aGF0IGVudHJpZXMgc2hvdWxkIGJlIHN0b3JlZCBpbiB0aGUgaW5kZXguCisgKi8KK3ZvaWQKK2dzdF9pbmRleF9zZXRfZmlsdGVyIChHc3RJbmRleCAqIGluZGV4LAorICAgIEdzdEluZGV4RmlsdGVyIGZpbHRlciwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfSU5ERVggKGluZGV4KSk7CisKKyAgZ3N0X2luZGV4X3NldF9maWx0ZXJfZnVsbCAoaW5kZXgsIGZpbHRlciwgdXNlcl9kYXRhLCBOVUxMKTsKK30KKworLyoqCisgKiBnc3RfaW5kZXhfc2V0X2ZpbHRlcl9mdWxsOgorICogQGluZGV4OiB0aGUgaW5kZXggdG8gcmVnaXN0ZXIgdGhlIGZpbHRlciBvbgorICogQGZpbHRlcjogdGhlIGZpbHRlciB0byByZWdpc3RlcgorICogQHVzZXJfZGF0YTogZGF0YSBwYXNzZWQgdG8gdGhlIGZpbHRlciBmdW5jdGlvbgorICogQHVzZXJfZGF0YV9kZXN0cm95OiBmdW5jdGlvbiB0byBjYWxsIHdoZW4gQHVzZXJfZGF0YSBpcyB1bnNldAorICoKKyAqIExldHMgdGhlIGFwcCByZWdpc3RlciBhIGN1c3RvbSBmaWx0ZXIgZnVuY3Rpb24gc28gdGhhdAorICogaXQgY2FuIHNlbGVjdCB3aGF0IGVudHJpZXMgc2hvdWxkIGJlIHN0b3JlZCBpbiB0aGUgaW5kZXguCisgKi8KK3ZvaWQKK2dzdF9pbmRleF9zZXRfZmlsdGVyX2Z1bGwgKEdzdEluZGV4ICogaW5kZXgsCisgICAgR3N0SW5kZXhGaWx0ZXIgZmlsdGVyLCBncG9pbnRlciB1c2VyX2RhdGEsIEdEZXN0cm95Tm90aWZ5IHVzZXJfZGF0YV9kZXN0cm95KQoreworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfSU5ERVggKGluZGV4KSk7CisKKyAgaWYgKGluZGV4LT5maWx0ZXJfdXNlcl9kYXRhICYmIGluZGV4LT5maWx0ZXJfdXNlcl9kYXRhX2Rlc3Ryb3kpCisgICAgaW5kZXgtPmZpbHRlcl91c2VyX2RhdGFfZGVzdHJveSAoaW5kZXgtPmZpbHRlcl91c2VyX2RhdGEpOworCisgIGluZGV4LT5maWx0ZXIgPSBmaWx0ZXI7CisgIGluZGV4LT5maWx0ZXJfdXNlcl9kYXRhID0gdXNlcl9kYXRhOworICBpbmRleC0+ZmlsdGVyX3VzZXJfZGF0YV9kZXN0cm95ID0gdXNlcl9kYXRhX2Rlc3Ryb3k7Cit9CisKKy8qKgorICogZ3N0X2luZGV4X3NldF9yZXNvbHZlcjoKKyAqIEBpbmRleDogdGhlIGluZGV4IHRvIHJlZ2lzdGVyIHRoZSByZXNvbHZlciBvbgorICogQHJlc29sdmVyOiB0aGUgcmVzb2x2ZXIgdG8gcmVnaXN0ZXIKKyAqIEB1c2VyX2RhdGE6IGRhdGEgcGFzc2VkIHRvIHRoZSByZXNvbHZlciBmdW5jdGlvbgorICoKKyAqIExldHMgdGhlIGFwcCByZWdpc3RlciBhIGN1c3RvbSBmdW5jdGlvbiB0byBtYXAgaW5kZXgKKyAqIGlkcyB0byB3cml0ZXIgZGVzY3JpcHRpb25zLgorICovCit2b2lkCitnc3RfaW5kZXhfc2V0X3Jlc29sdmVyIChHc3RJbmRleCAqIGluZGV4LAorICAgIEdzdEluZGV4UmVzb2x2ZXIgcmVzb2x2ZXIsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgZ3N0X2luZGV4X3NldF9yZXNvbHZlcl9mdWxsIChpbmRleCwgcmVzb2x2ZXIsIHVzZXJfZGF0YSwgTlVMTCk7Cit9CisKKy8qKgorICogZ3N0X2luZGV4X3NldF9yZXNvbHZlcl9mdWxsOgorICogQGluZGV4OiB0aGUgaW5kZXggdG8gcmVnaXN0ZXIgdGhlIHJlc29sdmVyIG9uCisgKiBAcmVzb2x2ZXI6IHRoZSByZXNvbHZlciB0byByZWdpc3RlcgorICogQHVzZXJfZGF0YTogZGF0YSBwYXNzZWQgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uCisgKiBAdXNlcl9kYXRhX2Rlc3Ryb3k6IGRlc3Ryb3kgZnVuY3Rpb24gZm9yIEB1c2VyX2RhdGEKKyAqCisgKiBMZXRzIHRoZSBhcHAgcmVnaXN0ZXIgYSBjdXN0b20gZnVuY3Rpb24gdG8gbWFwIGluZGV4CisgKiBpZHMgdG8gd3JpdGVyIGRlc2NyaXB0aW9ucy4KKyAqCisgKiBTaW5jZTogMC4xMC4xOAorICovCit2b2lkCitnc3RfaW5kZXhfc2V0X3Jlc29sdmVyX2Z1bGwgKEdzdEluZGV4ICogaW5kZXgsIEdzdEluZGV4UmVzb2x2ZXIgcmVzb2x2ZXIsCisgICAgZ3BvaW50ZXIgdXNlcl9kYXRhLCBHRGVzdHJveU5vdGlmeSB1c2VyX2RhdGFfZGVzdHJveSkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0lOREVYIChpbmRleCkpOworCisgIGlmIChpbmRleC0+cmVzb2x2ZXJfdXNlcl9kYXRhICYmIGluZGV4LT5yZXNvbHZlcl91c2VyX2RhdGFfZGVzdHJveSkKKyAgICBpbmRleC0+cmVzb2x2ZXJfdXNlcl9kYXRhX2Rlc3Ryb3kgKGluZGV4LT5yZXNvbHZlcl91c2VyX2RhdGEpOworCisgIGluZGV4LT5yZXNvbHZlciA9IHJlc29sdmVyOworICBpbmRleC0+cmVzb2x2ZXJfdXNlcl9kYXRhID0gdXNlcl9kYXRhOworICBpbmRleC0+cmVzb2x2ZXJfdXNlcl9kYXRhX2Rlc3Ryb3kgPSB1c2VyX2RhdGFfZGVzdHJveTsKKyAgaW5kZXgtPm1ldGhvZCA9IEdTVF9JTkRFWF9SRVNPTFZFUl9DVVNUT007Cit9CisKKy8qKgorICogZ3N0X2luZGV4X2VudHJ5X2NvcHk6CisgKiBAZW50cnk6IHRoZSBlbnRyeSB0byBjb3B5CisgKgorICogQ29waWVzIGFuIGVudHJ5IGFuZCByZXR1cm5zIHRoZSByZXN1bHQuCisgKgorICogRnJlZS1mdW5jdGlvbjogZ3N0X2luZGV4X2VudHJ5X2ZyZWUKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3bHkgYWxsb2NhdGVkICNHc3RJbmRleEVudHJ5LgorICovCitHc3RJbmRleEVudHJ5ICoKK2dzdF9pbmRleF9lbnRyeV9jb3B5IChHc3RJbmRleEVudHJ5ICogZW50cnkpCit7CisgIEdzdEluZGV4RW50cnkgKm5ld19lbnRyeSA9IGdfc2xpY2VfbmV3IChHc3RJbmRleEVudHJ5KTsKKworICBtZW1jcHkgKG5ld19lbnRyeSwgZW50cnksIHNpemVvZiAoR3N0SW5kZXhFbnRyeSkpOworICByZXR1cm4gbmV3X2VudHJ5OworfQorCisvKioKKyAqIGdzdF9pbmRleF9lbnRyeV9mcmVlOgorICogQGVudHJ5OiAodHJhbnNmZXIgZnVsbCk6IHRoZSBlbnRyeSB0byBmcmVlCisgKgorICogRnJlZSB0aGUgbWVtb3J5IHVzZWQgYnkgdGhlIGdpdmVuIGVudHJ5LgorICovCit2b2lkCitnc3RfaW5kZXhfZW50cnlfZnJlZSAoR3N0SW5kZXhFbnRyeSAqIGVudHJ5KQoreworICBzd2l0Y2ggKGVudHJ5LT50eXBlKSB7CisgICAgY2FzZSBHU1RfSU5ERVhfRU5UUllfSUQ6CisgICAgICBpZiAoZW50cnktPmRhdGEuaWQuZGVzY3JpcHRpb24pIHsKKyAgICAgICAgZ19mcmVlIChlbnRyeS0+ZGF0YS5pZC5kZXNjcmlwdGlvbik7CisgICAgICAgIGVudHJ5LT5kYXRhLmlkLmRlc2NyaXB0aW9uID0gTlVMTDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX0lOREVYX0VOVFJZX0FTU09DSUFUSU9OOgorICAgICAgaWYgKGVudHJ5LT5kYXRhLmFzc29jLmFzc29jcykgeworICAgICAgICBnX2ZyZWUgKGVudHJ5LT5kYXRhLmFzc29jLmFzc29jcyk7CisgICAgICAgIGVudHJ5LT5kYXRhLmFzc29jLmFzc29jcyA9IE5VTEw7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9JTkRFWF9FTlRSWV9PQkpFQ1Q6CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9JTkRFWF9FTlRSWV9GT1JNQVQ6CisgICAgICBicmVhazsKKyAgfQorCisgIGdfc2xpY2VfZnJlZSAoR3N0SW5kZXhFbnRyeSwgZW50cnkpOworfQorCisvKioKKyAqIGdzdF9pbmRleF9hZGRfZm9ybWF0OgorICogQGluZGV4OiB0aGUgaW5kZXggdG8gYWRkIHRoZSBlbnRyeSB0bworICogQGlkOiB0aGUgaWQgb2YgdGhlIGluZGV4IHdyaXRlcgorICogQGZvcm1hdDogdGhlIGZvcm1hdCB0byBhZGQgdG8gdGhlIGluZGV4CisgKgorICogQWRkcyBhIGZvcm1hdCBlbnRyeSBpbnRvIHRoZSBpbmRleC4gVGhpcyBmdW5jdGlvbiBpcworICogdXNlZCB0byBtYXAgZHluYW1pYyBHc3RGb3JtYXQgaWRzIHRvIHRoZWlyIG9yaWdpbmFsCisgKiBmb3JtYXQga2V5LgorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdzdF9pbmRleF9lbnRyeV9mcmVlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGFkZGVkIGVudHJ5IGluIHRoZSBpbmRleC4KKyAqLworR3N0SW5kZXhFbnRyeSAqCitnc3RfaW5kZXhfYWRkX2Zvcm1hdCAoR3N0SW5kZXggKiBpbmRleCwgZ2ludCBpZCwgR3N0Rm9ybWF0IGZvcm1hdCkKK3sKKyAgR3N0SW5kZXhFbnRyeSAqZW50cnk7CisgIGNvbnN0IEdzdEZvcm1hdERlZmluaXRpb24gKmRlZjsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0lOREVYIChpbmRleCksIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZm9ybWF0ICE9IDAsIE5VTEwpOworCisgIGlmICghR1NUX0lOREVYX0lTX1dSSVRBQkxFIChpbmRleCkgfHwgaWQgPT0gLTEpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgZW50cnkgPSBnX3NsaWNlX25ldyAoR3N0SW5kZXhFbnRyeSk7CisgIGVudHJ5LT50eXBlID0gR1NUX0lOREVYX0VOVFJZX0ZPUk1BVDsKKyAgZW50cnktPmlkID0gaWQ7CisgIGVudHJ5LT5kYXRhLmZvcm1hdC5mb3JtYXQgPSBmb3JtYXQ7CisKKyAgZGVmID0gZ3N0X2Zvcm1hdF9nZXRfZGV0YWlscyAoZm9ybWF0KTsKKyAgZW50cnktPmRhdGEuZm9ybWF0LmtleSA9IGRlZi0+bmljazsKKworICBnc3RfaW5kZXhfYWRkX2VudHJ5IChpbmRleCwgZW50cnkpOworCisgIHJldHVybiBlbnRyeTsKK30KKworLyoqCisgKiBnc3RfaW5kZXhfYWRkX2lkOgorICogQGluZGV4OiB0aGUgaW5kZXggdG8gYWRkIHRoZSBlbnRyeSB0bworICogQGlkOiB0aGUgaWQgb2YgdGhlIGluZGV4IHdyaXRlcgorICogQGRlc2NyaXB0aW9uOiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGluZGV4IHdyaXRlcgorICoKKyAqIEFkZCBhbiBpZCBlbnRyeSBpbnRvIHRoZSBpbmRleC4KKyAqCisgKiBSZXR1cm5zOiBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGFkZGVkIGVudHJ5IGluIHRoZSBpbmRleC4KKyAqLworR3N0SW5kZXhFbnRyeSAqCitnc3RfaW5kZXhfYWRkX2lkIChHc3RJbmRleCAqIGluZGV4LCBnaW50IGlkLCBnY2hhciAqIGRlc2NyaXB0aW9uKQoreworICBHc3RJbmRleEVudHJ5ICplbnRyeTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0lOREVYIChpbmRleCksIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGVzY3JpcHRpb24gIT0gTlVMTCwgTlVMTCk7CisKKyAgaWYgKCFHU1RfSU5ERVhfSVNfV1JJVEFCTEUgKGluZGV4KSB8fCBpZCA9PSAtMSkKKyAgICByZXR1cm4gTlVMTDsKKworICBlbnRyeSA9IGdfc2xpY2VfbmV3IChHc3RJbmRleEVudHJ5KTsKKyAgZW50cnktPnR5cGUgPSBHU1RfSU5ERVhfRU5UUllfSUQ7CisgIGVudHJ5LT5pZCA9IGlkOworICBlbnRyeS0+ZGF0YS5pZC5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworCisgIGdzdF9pbmRleF9hZGRfZW50cnkgKGluZGV4LCBlbnRyeSk7CisKKyAgcmV0dXJuIGVudHJ5OworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9pbmRleF9wYXRoX3Jlc29sdmVyIChHc3RJbmRleCAqIGluZGV4LCBHc3RPYmplY3QgKiB3cml0ZXIsCisgICAgZ2NoYXIgKiogd3JpdGVyX3N0cmluZywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgKndyaXRlcl9zdHJpbmcgPSBnc3Rfb2JqZWN0X2dldF9wYXRoX3N0cmluZyAod3JpdGVyKTsKKworICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfaW5kZXhfZ3R5cGVfcmVzb2x2ZXIgKEdzdEluZGV4ICogaW5kZXgsIEdzdE9iamVjdCAqIHdyaXRlciwKKyAgICBnY2hhciAqKiB3cml0ZXJfc3RyaW5nLCBncG9pbnRlciBkYXRhKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAod3JpdGVyICE9IE5VTEwsIEZBTFNFKTsKKworICBpZiAoR1NUX0lTX1BBRCAod3JpdGVyKSkgeworICAgIEdzdE9iamVjdCAqZWxlbWVudCA9IGdzdF9vYmplY3RfZ2V0X3BhcmVudCAoR1NUX09CSkVDVCAod3JpdGVyKSk7CisgICAgZ2NoYXIgKm5hbWU7CisKKyAgICBuYW1lID0gZ3N0X29iamVjdF9nZXRfbmFtZSAod3JpdGVyKTsKKyAgICBpZiAoZWxlbWVudCkgeworICAgICAgKndyaXRlcl9zdHJpbmcgPSBnX3N0cmR1cF9wcmludGYgKCIlcy4lcyIsCisgICAgICAgICAgR19PQkpFQ1RfVFlQRV9OQU1FIChlbGVtZW50KSwgbmFtZSk7CisgICAgICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtZW50KTsKKyAgICB9IGVsc2UgeworICAgICAgKndyaXRlcl9zdHJpbmcgPSBuYW1lOworICAgICAgbmFtZSA9IE5VTEw7CisgICAgfQorCisgICAgZ19mcmVlIChuYW1lKTsKKworICB9IGVsc2UgeworICAgICp3cml0ZXJfc3RyaW5nID0gZ19zdHJkdXAgKEdfT0JKRUNUX1RZUEVfTkFNRSAod3JpdGVyKSk7CisgIH0KKworICByZXR1cm4gVFJVRTsKK30KKworLyoqCisgKiBnc3RfaW5kZXhfZ2V0X3dyaXRlcl9pZDoKKyAqIEBpbmRleDogdGhlIGluZGV4IHRvIGdldCBhIHVuaXF1ZSB3cml0ZSBpZCBmb3IKKyAqIEB3cml0ZXI6IHRoZSBHc3RPYmplY3QgdG8gYWxsb2NhdGUgYW4gaWQgZm9yCisgKiBAaWQ6IGEgcG9pbnRlciB0byBhIGdpbnQgdG8gaG9sZCB0aGUgaWQKKyAqCisgKiBCZWZvcmUgZW50cmllcyBjYW4gYmUgYWRkZWQgdG8gdGhlIGluZGV4LCBhIHdyaXRlcgorICogc2hvdWxkIG9idGFpbiBhIHVuaXF1ZSBpZC4gVGhlIG1ldGhvZHMgdG8gYWRkIG5ldyBlbnRyaWVzCisgKiB0byB0aGUgaW5kZXggcmVxdWlyZSB0aGlzIGlkIGFzIGFuIGFyZ3VtZW50LgorICoKKyAqIFRoZSBhcHBsaWNhdGlvbiBjYW4gaW1wbGVtZW50IGEgY3VzdG9tIGZ1bmN0aW9uIHRvIG1hcCB0aGUgd3JpdGVyIG9iamVjdAorICogdG8gYSBzdHJpbmcuIFRoYXQgc3RyaW5nIHdpbGwgYmUgdXNlZCB0byByZWdpc3RlciBvciBsb29rIHVwIGFuIGlkCisgKiBpbiB0aGUgaW5kZXguCisgKgorICogPG5vdGU+CisgKiBUaGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgQHdyaXRlcidzICNHU1RfT0JKRUNUX0xPQ0ssIGFzIHRoZSBkZWZhdWx0CisgKiByZXNvbHZlciBtYXkgY2FsbCBmdW5jdGlvbnMgdGhhdCB0YWtlIHRoZSBvYmplY3QgbG9jayBhcyB3ZWxsLCBhbmQKKyAqIHRoZSBsb2NrIGlzIG5vdCByZWN1cnNpdmUuCisgKiA8L25vdGU+CisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgd3JpdGVyIHdvdWxkIGJlIG1hcHBlZCB0byBhbiBpZC4KKyAqLworZ2Jvb2xlYW4KK2dzdF9pbmRleF9nZXRfd3JpdGVyX2lkIChHc3RJbmRleCAqIGluZGV4LCBHc3RPYmplY3QgKiB3cml0ZXIsIGdpbnQgKiBpZCkKK3sKKyAgZ2NoYXIgKndyaXRlcl9zdHJpbmcgPSBOVUxMOworICBHc3RJbmRleEVudHJ5ICplbnRyeTsKKyAgR3N0SW5kZXhDbGFzcyAqaWNsYXNzOworICBnYm9vbGVhbiBzdWNjZXNzID0gRkFMU0U7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19JTkRFWCAoaW5kZXgpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfT0JKRUNUICh3cml0ZXIpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpZCwgRkFMU0UpOworCisgICppZCA9IC0xOworCisgIC8qIGZpcnN0IHRyeSB0byBnZXQgYSBwcmV2aW91c2x5IGNhY2hlZCBpZCAqLworICBlbnRyeSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGluZGV4LT53cml0ZXJzLCB3cml0ZXIpOworICBpZiAoZW50cnkgPT0gTlVMTCkgeworCisgICAgaWNsYXNzID0gR1NUX0lOREVYX0dFVF9DTEFTUyAoaW5kZXgpOworCisgICAgLyogbGV0IHRoZSBhcHAgbWFrZSBhIHN0cmluZyAqLworICAgIGlmIChpbmRleC0+cmVzb2x2ZXIpIHsKKyAgICAgIGdib29sZWFuIHJlczsKKworICAgICAgcmVzID0KKyAgICAgICAgICBpbmRleC0+cmVzb2x2ZXIgKGluZGV4LCB3cml0ZXIsICZ3cml0ZXJfc3RyaW5nLAorICAgICAgICAgIGluZGV4LT5yZXNvbHZlcl91c2VyX2RhdGEpOworICAgICAgaWYgKCFyZXMpCisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9IGVsc2UgeworICAgICAgZ193YXJuaW5nICgibm8gcmVzb2x2ZXIgZm91bmQiKTsKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICAvKiBpZiB0aGUgaW5kZXggaGFzIGEgcmVzb2x2ZXIsIG1ha2UgaXQgbWFwIHRoaXMgc3RyaW5nIHRvIGFuIGlkICovCisgICAgaWYgKGljbGFzcy0+Z2V0X3dyaXRlcl9pZCkgeworICAgICAgc3VjY2VzcyA9IGljbGFzcy0+Z2V0X3dyaXRlcl9pZCAoaW5kZXgsIGlkLCB3cml0ZXJfc3RyaW5nKTsKKyAgICB9CisgICAgLyogaWYgdGhlIGluZGV4IGNvdWxkIG5vdCByZXNvbHZlLCB3ZSBhbGxvY2F0ZSBvbmUgb3Vyc2VsdmVzICovCisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAqaWQgPSArK2luZGV4LT5sYXN0X2lkOworICAgIH0KKworICAgIGVudHJ5ID0gZ3N0X2luZGV4X2FkZF9pZCAoaW5kZXgsICppZCwgd3JpdGVyX3N0cmluZyk7CisgICAgaWYgKCFlbnRyeSkgeworICAgICAgLyogaW5kZXggaXMgcHJvYmFibHkgbm90IHdyaXRhYmxlLCBtYWtlIGFuIGVudHJ5IGFueXdheQorICAgICAgICogdG8ga2VlcCBpdCBpbiBvdXIgY2FjaGUgKi8KKyAgICAgIGVudHJ5ID0gZ19zbGljZV9uZXcgKEdzdEluZGV4RW50cnkpOworICAgICAgZW50cnktPnR5cGUgPSBHU1RfSU5ERVhfRU5UUllfSUQ7CisgICAgICBlbnRyeS0+aWQgPSAqaWQ7CisgICAgICBlbnRyeS0+ZGF0YS5pZC5kZXNjcmlwdGlvbiA9IHdyaXRlcl9zdHJpbmc7CisgICAgfQorICAgIGdfaGFzaF90YWJsZV9pbnNlcnQgKGluZGV4LT53cml0ZXJzLCB3cml0ZXIsIGVudHJ5KTsKKyAgfSBlbHNlIHsKKyAgICAqaWQgPSBlbnRyeS0+aWQ7CisgIH0KKworICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9pbmRleF9hZGRfZW50cnkgKEdzdEluZGV4ICogaW5kZXgsIEdzdEluZGV4RW50cnkgKiBlbnRyeSkKK3sKKyAgR3N0SW5kZXhDbGFzcyAqaWNsYXNzOworCisgIGljbGFzcyA9IEdTVF9JTkRFWF9HRVRfQ0xBU1MgKGluZGV4KTsKKworICBpZiAoaWNsYXNzLT5hZGRfZW50cnkpIHsKKyAgICBpY2xhc3MtPmFkZF9lbnRyeSAoaW5kZXgsIGVudHJ5KTsKKyAgfQorCisgIGdfc2lnbmFsX2VtaXQgKGluZGV4LCBnc3RfaW5kZXhfc2lnbmFsc1tFTlRSWV9BRERFRF0sIDAsIGVudHJ5KTsKK30KKworLyoqCisgKiBnc3RfaW5kZXhfYWRkX2Fzc29jaWF0aW9udjoKKyAqIEBpbmRleDogdGhlIGluZGV4IHRvIGFkZCB0aGUgZW50cnkgdG8KKyAqIEBpZDogdGhlIGlkIG9mIHRoZSBpbmRleCB3cml0ZXIKKyAqIEBmbGFnczogb3B0aW5hbCBmbGFncyBmb3IgdGhpcyBlbnRyeQorICogQG46IG51bWJlciBvZiBhc3NvY2lhdGlvbnMKKyAqIEBsaXN0OiBsaXN0IG9mIGFzc29jaWF0aW9ucworICoKKyAqIEFzc29jaWF0ZSBnaXZlbiBmb3JtYXQvdmFsdWUgcGFpcnMgd2l0aCBlYWNoIG90aGVyLgorICoKKyAqIFJldHVybnM6IGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWRkZWQgZW50cnkgaW4gdGhlIGluZGV4LgorICovCitHc3RJbmRleEVudHJ5ICoKK2dzdF9pbmRleF9hZGRfYXNzb2NpYXRpb252IChHc3RJbmRleCAqIGluZGV4LCBnaW50IGlkLCBHc3RBc3NvY0ZsYWdzIGZsYWdzLAorICAgIGdpbnQgbiwgY29uc3QgR3N0SW5kZXhBc3NvY2lhdGlvbiAqIGxpc3QpCit7CisgIEdzdEluZGV4RW50cnkgKmVudHJ5OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuID4gMCwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChsaXN0ICE9IE5VTEwsIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0lOREVYIChpbmRleCksIE5VTEwpOworCisgIGlmICghR1NUX0lOREVYX0lTX1dSSVRBQkxFIChpbmRleCkgfHwgaWQgPT0gLTEpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgZW50cnkgPSBnX3NsaWNlX25ldyAoR3N0SW5kZXhFbnRyeSk7CisKKyAgZW50cnktPnR5cGUgPSBHU1RfSU5ERVhfRU5UUllfQVNTT0NJQVRJT047CisgIGVudHJ5LT5pZCA9IGlkOworICBlbnRyeS0+ZGF0YS5hc3NvYy5mbGFncyA9IGZsYWdzOworICBlbnRyeS0+ZGF0YS5hc3NvYy5hc3NvY3MgPSBnX21lbWR1cCAobGlzdCwgc2l6ZW9mIChHc3RJbmRleEFzc29jaWF0aW9uKSAqIG4pOworICBlbnRyeS0+ZGF0YS5hc3NvYy5uYXNzb2NzID0gbjsKKworICBnc3RfaW5kZXhfYWRkX2VudHJ5IChpbmRleCwgZW50cnkpOworCisgIHJldHVybiBlbnRyeTsKK30KKworLyoqCisgKiBnc3RfaW5kZXhfYWRkX2Fzc29jaWF0aW9uOgorICogQGluZGV4OiB0aGUgaW5kZXggdG8gYWRkIHRoZSBlbnRyeSB0bworICogQGlkOiB0aGUgaWQgb2YgdGhlIGluZGV4IHdyaXRlcgorICogQGZsYWdzOiBvcHRpbmFsIGZsYWdzIGZvciB0aGlzIGVudHJ5CisgKiBAZm9ybWF0OiB0aGUgZm9ybWF0IG9mIHRoZSB2YWx1ZQorICogQHZhbHVlOiB0aGUgdmFsdWUKKyAqIEAuLi46IG90aGVyIGZvcm1hdC92YWx1ZSBwYWlycyBvciAwIHRvIGVuZCB0aGUgbGlzdAorICoKKyAqIEFzc29jaWF0ZSBnaXZlbiBmb3JtYXQvdmFsdWUgcGFpcnMgd2l0aCBlYWNoIG90aGVyLgorICogQmUgc3VyZSB0byBwYXNzIGdpbnQ2NCB2YWx1ZXMgdG8gdGhpcyBmdW5jdGlvbnMgdmFyYXJncywKKyAqIHlvdSBtaWdodCB3YW50IHRvIHVzZSBhIGdpbnQ2NCBjYXN0IHRvIGJlIHN1cmUuCisgKgorICogUmV0dXJuczogYSBwb2ludGVyIHRvIHRoZSBuZXdseSBhZGRlZCBlbnRyeSBpbiB0aGUgaW5kZXguCisgKi8KK0dzdEluZGV4RW50cnkgKgorZ3N0X2luZGV4X2FkZF9hc3NvY2lhdGlvbiAoR3N0SW5kZXggKiBpbmRleCwgZ2ludCBpZCwgR3N0QXNzb2NGbGFncyBmbGFncywKKyAgICBHc3RGb3JtYXQgZm9ybWF0LCBnaW50NjQgdmFsdWUsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdzOworICBHc3RJbmRleEVudHJ5ICplbnRyeTsKKyAgR3N0SW5kZXhBc3NvY2lhdGlvbiAqbGlzdDsKKyAgZ2ludCBuX2Fzc29jcyA9IDA7CisgIEdzdEZvcm1hdCBjdXJfZm9ybWF0OworICBHQXJyYXkgKmFycmF5OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfSU5ERVggKGluZGV4KSwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmb3JtYXQgIT0gMCwgTlVMTCk7CisKKyAgaWYgKCFHU1RfSU5ERVhfSVNfV1JJVEFCTEUgKGluZGV4KSB8fCBpZCA9PSAtMSkKKyAgICByZXR1cm4gTlVMTDsKKworICBhcnJheSA9IGdfYXJyYXlfbmV3IChGQUxTRSwgRkFMU0UsIHNpemVvZiAoR3N0SW5kZXhBc3NvY2lhdGlvbikpOworCisgIHsKKyAgICBHc3RJbmRleEFzc29jaWF0aW9uIGE7CisKKyAgICBhLmZvcm1hdCA9IGZvcm1hdDsKKyAgICBhLnZhbHVlID0gdmFsdWU7CisgICAgbl9hc3NvY3MgPSAxOworICAgIGdfYXJyYXlfYXBwZW5kX3ZhbCAoYXJyYXksIGEpOworICB9CisKKyAgdmFfc3RhcnQgKGFyZ3MsIHZhbHVlKTsKKworICB3aGlsZSAoKGN1cl9mb3JtYXQgPSB2YV9hcmcgKGFyZ3MsIEdzdEZvcm1hdCkpKSB7CisgICAgR3N0SW5kZXhBc3NvY2lhdGlvbiBhOworCisgICAgYS5mb3JtYXQgPSBjdXJfZm9ybWF0OworICAgIGEudmFsdWUgPSB2YV9hcmcgKGFyZ3MsIGdpbnQ2NCk7CisgICAgbl9hc3NvY3MrKzsKKyAgICBnX2FycmF5X2FwcGVuZF92YWwgKGFycmF5LCBhKTsKKyAgfQorCisgIHZhX2VuZCAoYXJncyk7CisKKyAgbGlzdCA9IChHc3RJbmRleEFzc29jaWF0aW9uICopIGdfYXJyYXlfZnJlZSAoYXJyYXksIEZBTFNFKTsKKworICBlbnRyeSA9IGdzdF9pbmRleF9hZGRfYXNzb2NpYXRpb252IChpbmRleCwgaWQsIGZsYWdzLCBuX2Fzc29jcywgbGlzdCk7CisgIGdfZnJlZSAobGlzdCk7CisKKyAgcmV0dXJuIGVudHJ5OworfQorCisvKioKKyAqIGdzdF9pbmRleF9hZGRfb2JqZWN0OgorICogQGluZGV4OiB0aGUgaW5kZXggdG8gYWRkIHRoZSBvYmplY3QgdG8KKyAqIEBpZDogdGhlIGlkIG9mIHRoZSBpbmRleCB3cml0ZXIKKyAqIEBrZXk6IGEga2V5IGZvciB0aGUgb2JqZWN0CisgKiBAdHlwZTogdGhlIEdUeXBlIG9mIHRoZSBvYmplY3QKKyAqIEBvYmplY3Q6IGEgcG9pbnRlciB0byB0aGUgb2JqZWN0IHRvIGFkZAorICoKKyAqIEFkZCB0aGUgZ2l2ZW4gb2JqZWN0IHRvIHRoZSBpbmRleCB3aXRoIHRoZSBnaXZlbiBrZXkuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBub3QgeWV0IGltcGxlbWVudGVkLgorICoKKyAqIFJldHVybnM6IGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWRkZWQgZW50cnkgaW4gdGhlIGluZGV4LgorICovCitHc3RJbmRleEVudHJ5ICoKK2dzdF9pbmRleF9hZGRfb2JqZWN0IChHc3RJbmRleCAqIGluZGV4LCBnaW50IGlkLCBnY2hhciAqIGtleSwKKyAgICBHVHlwZSB0eXBlLCBncG9pbnRlciBvYmplY3QpCit7CisgIGlmICghR1NUX0lOREVYX0lTX1dSSVRBQkxFIChpbmRleCkgfHwgaWQgPT0gLTEpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBnaW50Citnc3RfaW5kZXhfY29tcGFyZV9mdW5jIChnY29uc3Rwb2ludGVyIGEsIGdjb25zdHBvaW50ZXIgYiwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBpZiAoYSA8IGIpCisgICAgcmV0dXJuIC0xOworICBpZiAoYSA+IGIpCisgICAgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorCisvKioKKyAqIGdzdF9pbmRleF9nZXRfYXNzb2NfZW50cnk6CisgKiBAaW5kZXg6IHRoZSBpbmRleCB0byBzZWFyY2gKKyAqIEBpZDogdGhlIGlkIG9mIHRoZSBpbmRleCB3cml0ZXIKKyAqIEBtZXRob2Q6IFRoZSBsb29rdXAgbWV0aG9kIHRvIHVzZQorICogQGZsYWdzOiBGbGFncyBmb3IgdGhlIGVudHJ5CisgKiBAZm9ybWF0OiB0aGUgZm9ybWF0IG9mIHRoZSB2YWx1ZQorICogQHZhbHVlOiB0aGUgdmFsdWUgdG8gZmluZAorICoKKyAqIEZpbmRzIHRoZSBnaXZlbiBmb3JtYXQvdmFsdWUgaW4gdGhlIGluZGV4CisgKgorICogUmV0dXJuczogdGhlIGVudHJ5IGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFsdWUgb3IgTlVMTCBpZiB0aGUKKyAqICAgdmFsdWUgd2FzIG5vdCBmb3VuZC4KKyAqLworR3N0SW5kZXhFbnRyeSAqCitnc3RfaW5kZXhfZ2V0X2Fzc29jX2VudHJ5IChHc3RJbmRleCAqIGluZGV4LCBnaW50IGlkLAorICAgIEdzdEluZGV4TG9va3VwTWV0aG9kIG1ldGhvZCwgR3N0QXNzb2NGbGFncyBmbGFncywKKyAgICBHc3RGb3JtYXQgZm9ybWF0LCBnaW50NjQgdmFsdWUpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfSU5ERVggKGluZGV4KSwgTlVMTCk7CisKKyAgaWYgKGlkID09IC0xKQorICAgIHJldHVybiBOVUxMOworCisgIHJldHVybiBnc3RfaW5kZXhfZ2V0X2Fzc29jX2VudHJ5X2Z1bGwgKGluZGV4LCBpZCwgbWV0aG9kLCBmbGFncywgZm9ybWF0LAorICAgICAgdmFsdWUsIGdzdF9pbmRleF9jb21wYXJlX2Z1bmMsIE5VTEwpOworfQorCisvKioKKyAqIGdzdF9pbmRleF9nZXRfYXNzb2NfZW50cnlfZnVsbDoKKyAqIEBpbmRleDogdGhlIGluZGV4IHRvIHNlYXJjaAorICogQGlkOiB0aGUgaWQgb2YgdGhlIGluZGV4IHdyaXRlcgorICogQG1ldGhvZDogVGhlIGxvb2t1cCBtZXRob2QgdG8gdXNlCisgKiBAZmxhZ3M6IEZsYWdzIGZvciB0aGUgZW50cnkKKyAqIEBmb3JtYXQ6IHRoZSBmb3JtYXQgb2YgdGhlIHZhbHVlCisgKiBAdmFsdWU6IHRoZSB2YWx1ZSB0byBmaW5kCisgKiBAZnVuYzogdGhlIGZ1bmN0aW9uIHVzZWQgdG8gY29tcGFyZSBlbnRyaWVzCisgKiBAdXNlcl9kYXRhOiB1c2VyIGRhdGEgcGFzc2VkIHRvIHRoZSBjb21wYXJlIGZ1bmN0aW9uCisgKgorICogRmluZHMgdGhlIGdpdmVuIGZvcm1hdC92YWx1ZSBpbiB0aGUgaW5kZXggd2l0aCB0aGUgZ2l2ZW4KKyAqIGNvbXBhcmUgZnVuY3Rpb24gYW5kIHVzZXJfZGF0YS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgZW50cnkgYXNzb2NpYXRlZCB3aXRoIHRoZSB2YWx1ZSBvciBOVUxMIGlmIHRoZQorICogICB2YWx1ZSB3YXMgbm90IGZvdW5kLgorICovCitHc3RJbmRleEVudHJ5ICoKK2dzdF9pbmRleF9nZXRfYXNzb2NfZW50cnlfZnVsbCAoR3N0SW5kZXggKiBpbmRleCwgZ2ludCBpZCwKKyAgICBHc3RJbmRleExvb2t1cE1ldGhvZCBtZXRob2QsIEdzdEFzc29jRmxhZ3MgZmxhZ3MsCisgICAgR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0IHZhbHVlLCBHQ29tcGFyZURhdGFGdW5jIGZ1bmMsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgR3N0SW5kZXhDbGFzcyAqaWNsYXNzOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfSU5ERVggKGluZGV4KSwgTlVMTCk7CisKKyAgaWYgKGlkID09IC0xKQorICAgIHJldHVybiBOVUxMOworCisgIGljbGFzcyA9IEdTVF9JTkRFWF9HRVRfQ0xBU1MgKGluZGV4KTsKKworICBpZiAoaWNsYXNzLT5nZXRfYXNzb2NfZW50cnkpCisgICAgcmV0dXJuIGljbGFzcy0+Z2V0X2Fzc29jX2VudHJ5IChpbmRleCwgaWQsIG1ldGhvZCwgZmxhZ3MsIGZvcm1hdCwgdmFsdWUsCisgICAgICAgIGZ1bmMsIHVzZXJfZGF0YSk7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogZ3N0X2luZGV4X2VudHJ5X2Fzc29jX21hcDoKKyAqIEBlbnRyeTogdGhlIGluZGV4IHRvIHNlYXJjaAorICogQGZvcm1hdDogdGhlIGZvcm1hdCBvZiB0aGUgdmFsdWUgdGhlIGZpbmQKKyAqIEB2YWx1ZTogYSBwb2ludGVyIHRvIHN0b3JlIHRoZSB2YWx1ZQorICoKKyAqIEdldHMgYWx0ZXJuYXRpdmUgZm9ybWF0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGluZGV4ZW50cnkuCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGVyZSB3YXMgYSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuCisgKiBmb3JtYXQuCisgKi8KK2dib29sZWFuCitnc3RfaW5kZXhfZW50cnlfYXNzb2NfbWFwIChHc3RJbmRleEVudHJ5ICogZW50cnksCisgICAgR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0ICogdmFsdWUpCit7CisgIGdpbnQgaTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZW50cnkgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAodmFsdWUgIT0gTlVMTCwgRkFMU0UpOworCisgIGZvciAoaSA9IDA7IGkgPCBHU1RfSU5ERVhfTkFTU09DUyAoZW50cnkpOyBpKyspIHsKKyAgICBpZiAoR1NUX0lOREVYX0FTU09DX0ZPUk1BVCAoZW50cnksIGkpID09IGZvcm1hdCkgeworICAgICAgKnZhbHVlID0gR1NUX0lOREVYX0FTU09DX1ZBTFVFIChlbnRyeSwgaSk7CisgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIEZBTFNFOworfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGluZGV4LmggYi9nc3QvZ3N0aW5kZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDQ3YTM4Ci0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdGluZGV4LmgKQEAgLTAsMCArMSw0MjQgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BjaGVsbG8uYmU+CisgKgorICogZ3N0aW5kZXguaDogSGVhZGVyIGZvciBHc3RJbmRleCwgYmFzZSBjbGFzcyB0byBoYW5kbGUgZWZmaWNpZW50CisgKiAgICAgICAgICAgICBzdG9yYWdlIG9yIGNhY2hpbmcgb2Ygc2Vla2luZyBpbmZvcm1hdGlvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fR1NUX0lOREVYX0hfXworI2RlZmluZSBfX0dTVF9JTkRFWF9IX18KKworI2luY2x1ZGUgPGdzdC9nc3RvYmplY3QuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Zm9ybWF0Lmg+CisjaW5jbHVkZSA8Z3N0L2dzdHBsdWdpbmZlYXR1cmUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEdTVF9UWVBFX0lOREVYICAgICAgICAgICAgICAgICAgKGdzdF9pbmRleF9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgR1NUX0lOREVYKG9iaikgICAgICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9JTkRFWCwgR3N0SW5kZXgpKQorI2RlZmluZSBHU1RfSVNfSU5ERVgob2JqKSAgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX0lOREVYKSkKKyNkZWZpbmUgR1NUX0lOREVYX0NMQVNTKGtsYXNzKSAgICAgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX0lOREVYLCBHc3RJbmRleENsYXNzKSkKKyNkZWZpbmUgR1NUX0lTX0lOREVYX0NMQVNTKGtsYXNzKSAgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX0lOREVYKSkKKyNkZWZpbmUgR1NUX0lOREVYX0dFVF9DTEFTUyhvYmopICAgICAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIEdTVF9UWVBFX0lOREVYLCBHc3RJbmRleENsYXNzKSkKKworI2RlZmluZSBHU1RfVFlQRV9JTkRFWF9FTlRSWSAgICAgICAgICAgIChnc3RfaW5kZXhfZW50cnlfZ2V0X3R5cGUoKSkKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdEluZGV4RW50cnkgR3N0SW5kZXhFbnRyeTsKK3R5cGVkZWYgc3RydWN0IF9Hc3RJbmRleEdyb3VwIEdzdEluZGV4R3JvdXA7Cit0eXBlZGVmIHN0cnVjdCBfR3N0SW5kZXggR3N0SW5kZXg7Cit0eXBlZGVmIHN0cnVjdCBfR3N0SW5kZXhDbGFzcyBHc3RJbmRleENsYXNzOworCisvKioKKyAqIEdzdEluZGV4Q2VydGFpbnR5OgorICogQEdTVF9JTkRFWF9VTktOT1dOOiBhY2N1cmFjeSBpcyBub3Qga25vd24KKyAqIEBHU1RfSU5ERVhfQ0VSVEFJTjogYWNjdXJhY3kgaXMgcGVyZmVjdAorICogQEdTVF9JTkRFWF9GVVpaWTogYWNjdXJhY3kgaXMgZnV6enkKKyAqCisgKiBUaGUgY2VydGFpbnR5IG9mIGEgZ3JvdXAgaW4gdGhlIGluZGV4LgorICovCit0eXBlZGVmIGVudW0geworICBHU1RfSU5ERVhfVU5LTk9XTiwKKyAgR1NUX0lOREVYX0NFUlRBSU4sCisgIEdTVF9JTkRFWF9GVVpaWQorfSBHc3RJbmRleENlcnRhaW50eTsKKworLyoqCisgKiBHc3RJbmRleEVudHJ5VHlwZToKKyAqIEBHU1RfSU5ERVhfRU5UUllfSUQ6IFRoaXMgZW50cnkgaXMgYW4gaWQgdGhhdCBtYXBzIGFuIGluZGV4IGlkIHRvIGl0cyBvd25lciBvYmplY3QKKyAqIEBHU1RfSU5ERVhfRU5UUllfQVNTT0NJQVRJT046IFRoaXMgZW50cnkgaXMgYW4gYXNzb2NpYXRpb24gYmV0d2VlbiBmb3JtYXRzCisgKiBAR1NUX0lOREVYX0VOVFJZX09CSkVDVDogQW4gb2JqZWN0CisgKiBAR1NUX0lOREVYX0VOVFJZX0ZPUk1BVDogQSBmb3JtYXQgZGVmaW5pdGlvbgorICoKKyAqIFRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgZW50cmllcyBpbiB0aGUgaW5kZXguCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIEdTVF9JTkRFWF9FTlRSWV9JRCwKKyAgR1NUX0lOREVYX0VOVFJZX0FTU09DSUFUSU9OLAorICBHU1RfSU5ERVhfRU5UUllfT0JKRUNULAorICBHU1RfSU5ERVhfRU5UUllfRk9STUFUCit9IEdzdEluZGV4RW50cnlUeXBlOworCisvKioKKyAqIEdzdEluZGV4TG9va3VwTWV0aG9kOgorICogQEdTVF9JTkRFWF9MT09LVVBfRVhBQ1Q6IFRoZXJlIGhhcyB0byBiZSBhbiBleGFjdCBpbmRleGVudHJ5IHdpdGggdGhlIGdpdmVuIGZvcm1hdC92YWx1ZQorICogQEdTVF9JTkRFWF9MT09LVVBfQkVGT1JFOiBUaGUgZXhhY3QgZW50cnkgb3IgdGhlIG9uZSBiZWZvcmUgaXQKKyAqIEBHU1RfSU5ERVhfTE9PS1VQX0FGVEVSOiBUaGUgZXhhY3QgZW50cnkgb3IgdGhlIG9uZSBhZnRlciBpdAorICoKKyAqIFNwZWNpZnkgdGhlIG1ldGhvZCB0byBmaW5kIGFuIGluZGV4IGVudHJ5IGluIHRoZSBpbmRleC4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgR1NUX0lOREVYX0xPT0tVUF9FWEFDVCwKKyAgR1NUX0lOREVYX0xPT0tVUF9CRUZPUkUsCisgIEdTVF9JTkRFWF9MT09LVVBfQUZURVIKK30gR3N0SW5kZXhMb29rdXBNZXRob2Q7CisKKy8qKgorICogR1NUX0lOREVYX05BU1NPQ1M6CisgKiBAZW50cnk6IFRoZSBlbnRyeSB0byBxdWVyeQorICoKKyAqIEdldCB0aGUgbnVtYmVyIG9mIGFzc29jaWF0aW9ucyBpbiB0aGUgZW50cnkuCisgKi8KKyNkZWZpbmUgR1NUX0lOREVYX05BU1NPQ1MoZW50cnkpICAgICAgICAgICAgICAgICgoZW50cnkpLT5kYXRhLmFzc29jLm5hc3NvY3MpCisKKy8qKgorICogR1NUX0lOREVYX0FTU09DX0ZMQUdTOgorICogQGVudHJ5OiBUaGUgZW50cnkgdG8gcXVlcnkKKyAqCisgKiAgR2V0IHRoZSBmbGFncyBmb3IgdGhpcyBlbnRyeS4KKyAqLworI2RlZmluZSBHU1RfSU5ERVhfQVNTT0NfRkxBR1MoZW50cnkpICAgICAgICAgICAgKChlbnRyeSktPmRhdGEuYXNzb2MuZmxhZ3MpCisKKy8qKgorICogR1NUX0lOREVYX0FTU09DX0ZPUk1BVDoKKyAqIEBlbnRyeTogVGhlIGVudHJ5IHRvIHF1ZXJ5CisgKiBAaTogVGhlIGZvcm1hdCBpbmRleAorICoKKyAqIEdldCB0aGUgaS10aCBmb3JtYXQgb2YgdGhlIGVudHJ5LgorICovCisjZGVmaW5lIEdTVF9JTkRFWF9BU1NPQ19GT1JNQVQoZW50cnksaSkgICAgICAgICAoKGVudHJ5KS0+ZGF0YS5hc3NvYy5hc3NvY3NbKGkpXS5mb3JtYXQpCisKKy8qKgorICogR1NUX0lOREVYX0FTU09DX1ZBTFVFOgorICogQGVudHJ5OiBUaGUgZW50cnkgdG8gcXVlcnkKKyAqIEBpOiBUaGUgdmFsdWUgaW5kZXgKKyAqCisgKiBHZXQgdGhlIGktdGggdmFsdWUgb2YgdGhlIGVudHJ5LgorICovCisjZGVmaW5lIEdTVF9JTkRFWF9BU1NPQ19WQUxVRShlbnRyeSxpKSAgICAgICAgICAoKGVudHJ5KS0+ZGF0YS5hc3NvYy5hc3NvY3NbKGkpXS52YWx1ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdEluZGV4QXNzb2NpYXRpb24gR3N0SW5kZXhBc3NvY2lhdGlvbjsKKworLyoqCisgKiBHc3RJbmRleEFzc29jaWF0aW9uOgorICogQGZvcm1hdDogdGhlIGZvcm1hdCBvZiB0aGUgYXNzb2NpYXRpb24KKyAqIEB2YWx1ZTogdGhlIHZhbHVlIG9mIHRoZSBhc3NvY2lhdGlvbgorICoKKyAqIEFuIGFzc29jaWF0aW9uIGluIGFuIGVudHJ5LgorICovCitzdHJ1Y3QgX0dzdEluZGV4QXNzb2NpYXRpb24geworICBHc3RGb3JtYXQgICAgIGZvcm1hdDsKKyAgZ2ludDY0ICAgICAgICB2YWx1ZTsKK307CisKKy8qKgorICogR3N0QXNzb2NGbGFnczoKKyAqIEBHU1RfQVNTT0NJQVRJT05fRkxBR19OT05FOiBubyBleHRyYSBmbGFncworICogQEdTVF9BU1NPQ0lBVElPTl9GTEFHX0tFWV9VTklUOiB0aGUgZW50cnkgbWFya3MgYSBrZXkgdW5pdCwgYSBrZXkgdW5pdCBpcyBvbmUKKyAqICB0aGF0IG1hcmtzIGEgcGxhY2Ugd2hlcmUgb25lIGNhbiByYW5kb21seSBzZWVrIHRvLgorICogQEdTVF9BU1NPQ0lBVElPTl9GTEFHX0RFTFRBX1VOSVQ6IHRoZSBlbnRyeSBtYXJrcyBhIGRlbHRhIHVuaXQsIGEgZGVsdGEgdW5pdAorICogIGlzIG9uZSB0aGF0IG1hcmtzIGEgcGxhY2Ugd2hlcmUgb25lIGNhbiByZWxhdGl2ZWx5IHNlZWsgdG8uCisgKiBAR1NUX0FTU09DSUFUSU9OX0ZMQUdfTEFTVDogZXh0cmEgdXNlciBkZWZpbmVkIGZsYWdzIHNob3VsZCBzdGFydCBoZXJlLgorICoKKyAqIEZsYWdzIGZvciBhbiBhc3NvY2lhdGlvbiBlbnRyeS4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgR1NUX0FTU09DSUFUSU9OX0ZMQUdfTk9ORSAgICAgICA9IDAsCisgIEdTVF9BU1NPQ0lBVElPTl9GTEFHX0tFWV9VTklUICAgPSAoMSA8PCAwKSwKKyAgR1NUX0FTU09DSUFUSU9OX0ZMQUdfREVMVEFfVU5JVCA9ICgxIDw8IDEpLAorCisgIC8qIG5ldyBmbGFncyBzaG91bGQgc3RhcnQgaGVyZSAqLworICBHU1RfQVNTT0NJQVRJT05fRkxBR19MQVNUICAgICA9ICgxIDw8IDgpCit9IEdzdEFzc29jRmxhZ3M7CisKKy8qKgorICogR1NUX0lOREVYX0ZPUk1BVF9GT1JNQVQ6CisgKiBAZW50cnk6IFRoZSBlbnRyeSB0byBxdWVyeQorICoKKyAqIEdldCB0aGUgZm9ybWF0IG9mIHRoZSBmb3JtYXQgZW50cnkKKyAqLworI2RlZmluZSBHU1RfSU5ERVhfRk9STUFUX0ZPUk1BVChlbnRyeSkgICAgICAgICAgKChlbnRyeSktPmRhdGEuZm9ybWF0LmZvcm1hdCkKKworLyoqCisgKiBHU1RfSU5ERVhfRk9STUFUX0tFWToKKyAqIEBlbnRyeTogVGhlIGVudHJ5IHRvIHF1ZXJ5CisgKgorICogR2V0IHRoZSBrZXkgb2YgdGhlIGZvcm1hdCBlbnRyeQorICovCisjZGVmaW5lIEdTVF9JTkRFWF9GT1JNQVRfS0VZKGVudHJ5KSAgICAgICAgICAgICAoKGVudHJ5KS0+ZGF0YS5mb3JtYXQua2V5KQorCisvKioKKyAqIEdTVF9JTkRFWF9JRF9JTlZBTElEOgorICoKKyAqIENvbnN0YW50IGZvciBhbiBpbnZhbGlkIGluZGV4IGlkCisgKi8KKyNkZWZpbmUgR1NUX0lOREVYX0lEX0lOVkFMSUQgICAgICAgICAgICAgICAgICAgICgtMSkKKworLyoqCisgKiBHU1RfSU5ERVhfSURfREVTQ1JJUFRJT046CisgKiBAZW50cnk6IFRoZSBlbnRyeSB0byBxdWVyeQorICoKKyAqIEdldCB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGlkIGVudHJ5CisgKi8KKyNkZWZpbmUgR1NUX0lOREVYX0lEX0RFU0NSSVBUSU9OKGVudHJ5KSAgICAgICAgICgoZW50cnkpLT5kYXRhLmlkLmRlc2NyaXB0aW9uKQorCisvKioKKyAqIEdzdEluZGV4RW50cnk6CisgKgorICogVGhlIGJhc2ljIGVsZW1lbnQgb2YgYW4gaW5kZXguCisgKi8KK3N0cnVjdCBfR3N0SW5kZXhFbnRyeSB7CisgIC8qPCBwcml2YXRlID4qLworICBHc3RJbmRleEVudHJ5VHlwZSAgICAgIHR5cGU7CisgIGdpbnQgICAgICAgICAgICAgICAgICAgaWQ7CisKKyAgdW5pb24geworICAgIHN0cnVjdCB7CisgICAgICBnY2hhciAgICAgICAgICAgICAqZGVzY3JpcHRpb247CisgICAgfSBpZDsKKyAgICBzdHJ1Y3QgeworICAgICAgZ2ludCAgICAgICAgICAgICAgIG5hc3NvY3M7CisgICAgICBHc3RJbmRleEFzc29jaWF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAqYXNzb2NzOworICAgICAgR3N0QXNzb2NGbGFncyAgICAgIGZsYWdzOworICAgIH0gYXNzb2M7CisgICAgc3RydWN0IHsKKyAgICAgIGdjaGFyICAgICAgICAgICAgICprZXk7CisgICAgICBHVHlwZSAgICAgICAgICAgICAgdHlwZTsKKyAgICAgIGdwb2ludGVyICAgICAgICAgICBvYmplY3Q7CisgICAgfSBvYmplY3Q7CisgICAgc3RydWN0IHsKKyAgICAgIEdzdEZvcm1hdCAgICAgICAgICBmb3JtYXQ7CisgICAgICBjb25zdCBnY2hhciAgICAgICAqa2V5OworICAgIH0gZm9ybWF0OworICB9IGRhdGE7Cit9OworCisvKioKKyAqIEdzdEluZGV4R3JvdXA6CisgKgorICogQSBncm91cCBvZiByZWxhdGVkIGVudHJpZXMgaW4gYW4gaW5kZXguCisgKi8KKworc3RydWN0IF9Hc3RJbmRleEdyb3VwIHsKKyAgLyo8IHByaXZhdGUgPiovCisgIC8qIHVuaXF1ZSBJRCBvZiBncm91cCBpbiBpbmRleCAqLworICBnaW50IGdyb3VwbnVtOworCisgIC8qIGxpc3Qgb2YgZW50cmllcyAqLworICBHTGlzdCAqZW50cmllczsKKworICAvKiB0aGUgY2VydGFpbnR5IGxldmVsIG9mIHRoZSBncm91cCAqLworICBHc3RJbmRleENlcnRhaW50eSBjZXJ0YWludHk7CisKKyAgLyogcGVlciBncm91cCB0aGF0IGNvbnRhaW5zIG1vcmUgY2VydGFpbiBlbnRyaWVzICovCisgIGdpbnQgcGVlcmdyb3VwOworfTsKKworLyoqCisgKiBHc3RJbmRleEZpbHRlcjoKKyAqIEBpbmRleDogVGhlIGluZGV4IGJlaW5nIHF1ZXJpZWQKKyAqIEBlbnRyeTogVGhlIGVudHJ5IHRvIGJlIGFkZGVkLgorICogQHVzZXJfZGF0YTogVXNlciBkYXRhIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCisgKgorICogRnVuY3Rpb24gdG8gZmlsdGVyIG91dCBlbnRyaWVzIGluIHRoZSBpbmRleC4KKyAqCisgKiBSZXR1cm5zOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gJVRSVUUgaWYgdGhlIGVudHJ5IGlzIHRvIGJlIGFkZGVkCisgKiB0byB0aGUgaW5kZXgsICVGQUxTRSBvdGhlcndpc2UuCisgKgorICovCit0eXBlZGVmIGdib29sZWFuICAgICAgICAoKkdzdEluZGV4RmlsdGVyKSAgICAgICAgICAgICAgIChHc3RJbmRleCAqaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RJbmRleEVudHJ5ICplbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7CisvKioKKyAqIEdzdEluZGV4UmVzb2x2ZXJNZXRob2Q6CisgKiBAR1NUX0lOREVYX1JFU09MVkVSX0NVU1RPTTogVXNlIGEgY3VzdG9tIHJlc29sdmVyCisgKiBAR1NUX0lOREVYX1JFU09MVkVSX0dUWVBFOiBSZXNvbHZlIGJhc2VkIG9uIHRoZSBHVHlwZSBvZiB0aGUgb2JqZWN0CisgKiBAR1NUX0lOREVYX1JFU09MVkVSX1BBVEg6IFJlc29sdmUgb24gdGhlIHBhdGggaW4gZ3JhcGgKKyAqCisgKiBUaGUgbWV0aG9kIHVzZWQgdG8gcmVzb2x2ZSBpbmRleCB3cml0ZXJzCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIEdTVF9JTkRFWF9SRVNPTFZFUl9DVVNUT00sCisgIEdTVF9JTkRFWF9SRVNPTFZFUl9HVFlQRSwKKyAgR1NUX0lOREVYX1JFU09MVkVSX1BBVEgKK30gR3N0SW5kZXhSZXNvbHZlck1ldGhvZDsKKworLyoqCisgKiBHc3RJbmRleFJlc29sdmVyOgorICogQGluZGV4OiB0aGUgaW5kZXggYmVpbmcgcXVlcmllZC4KKyAqIEB3cml0ZXI6IFRoZSBvYmplY3QgdGhhdCB3YW50cyB0byB3cml0ZQorICogQHdyaXRlcl9zdHJpbmc6IEEgZGVzY3JpcHRpb24gb2YgdGhlIHdyaXRlci4KKyAqIEB1c2VyX2RhdGE6IHVzZXJfZGF0YSBhcyByZWdpc3RlcmVkCisgKgorICogRnVuY3Rpb24gdG8gcmVzb2x2ZSBpZHMgdG8gd3JpdGVyIGRlc2NyaXB0aW9ucy4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBhbiBpZCBjb3VsZCBiZSBhc3NpZ25lZCB0byB0aGUgd3JpdGVyLgorICovCit0eXBlZGVmIGdib29sZWFuICAgICAgICAoKkdzdEluZGV4UmVzb2x2ZXIpICAgICAgICAgICAgIChHc3RJbmRleCAqaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RPYmplY3QgKndyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyICoqd3JpdGVyX3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7CisKKy8qKgorICogR3N0SW5kZXhGbGFnczoKKyAqIEBHU1RfSU5ERVhfV1JJVEFCTEU6IFRoZSBpbmRleCBpcyB3cml0YWJsZQorICogQEdTVF9JTkRFWF9SRUFEQUJMRTogVGhlIGluZGV4IGlzIHJlYWRhYmxlCisgKiBAR1NUX0lOREVYX0ZMQUdfTEFTVDogRmlyc3QgZmxhZyB0aGF0IGNhbiBiZSB1c2VkIGJ5IHN1YmNsYXNzZXMKKyAqCisgKiBGbGFncyBmb3IgdGhpcyBpbmRleAorICovCit0eXBlZGVmIGVudW0geworICBHU1RfSU5ERVhfV1JJVEFCTEUgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgMCksCisgIEdTVF9JTkRFWF9SRUFEQUJMRSAgICA9IChHU1RfT0JKRUNUX0ZMQUdfTEFTVCA8PCAxKSwKKworICBHU1RfSU5ERVhfRkxBR19MQVNUICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgOCkKK30gR3N0SW5kZXhGbGFnczsKKworLyoqCisgKiBHU1RfSU5ERVhfSVNfUkVBREFCTEU6CisgKiBAb2JqOiBUaGUgaW5kZXggdG8gY2hlY2sKKyAqCisgKiBDaGVjayBpZiB0aGUgaW5kZXggY2FuIGJlIHJlYWQgZnJvbQorICovCisjZGVmaW5lIEdTVF9JTkRFWF9JU19SRUFEQUJMRShvYmopICAgIChHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChvYmosIEdTVF9JTkRFWF9SRUFEQUJMRSkpCisKKy8qKgorICogR1NUX0lOREVYX0lTX1dSSVRBQkxFOgorICogQG9iajogVGhlIGluZGV4IHRvIGNoZWNrCisgKgorICogQ2hlY2sgaWYgdGhlIGluZGV4IGNhbiBiZSB3cml0dGVuIHRvCisgKi8KKyNkZWZpbmUgR1NUX0lOREVYX0lTX1dSSVRBQkxFKG9iaikgICAgKEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKG9iaiwgR1NUX0lOREVYX1dSSVRBQkxFKSkKKworLyoqCisgKiBHc3RJbmRleDoKKyAqIAorICogT3BhcXVlICNHc3RJbmRleCBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBfR3N0SW5kZXggeworICBHc3RPYmplY3QgICAgICAgICAgICAgIG9iamVjdDsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgR0xpc3QgICAgICAgICAgICAgICAgICpncm91cHM7CisgIEdzdEluZGV4R3JvdXAgICAgICAgICAqY3VyZ3JvdXA7CisgIGdpbnQgICAgICAgICAgICAgICAgICAgbWF4Z3JvdXA7CisKKyAgR3N0SW5kZXhSZXNvbHZlck1ldGhvZCBtZXRob2Q7CisgIEdzdEluZGV4UmVzb2x2ZXIgICAgICAgcmVzb2x2ZXI7CisgIGdwb2ludGVyICAgICAgICAgICAgICAgcmVzb2x2ZXJfdXNlcl9kYXRhOworICBHRGVzdHJveU5vdGlmeSAgICAgICAgIHJlc29sdmVyX3VzZXJfZGF0YV9kZXN0cm95OworCisgIEdzdEluZGV4RmlsdGVyICAgICAgICAgZmlsdGVyOworICBncG9pbnRlciAgICAgICAgICAgICAgIGZpbHRlcl91c2VyX2RhdGE7CisgIEdEZXN0cm95Tm90aWZ5ICAgICAgICAgZmlsdGVyX3VzZXJfZGF0YV9kZXN0cm95OworCisgIEdIYXNoVGFibGUgICAgICAgICAgICAqd3JpdGVyczsKKyAgZ2ludCAgICAgICAgICAgICAgICAgICBsYXN0X2lkOworCisgIC8qPCBwcml2YXRlID4qLworICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKK307CisKK3N0cnVjdCBfR3N0SW5kZXhDbGFzcyB7CisgIEdzdE9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICAvKjwgcHJvdGVjdGVkID4qLworICBnYm9vbGVhbiAgICAgICgqZ2V0X3dyaXRlcl9pZCkgICAgICAgIChHc3RJbmRleCAqaW5kZXgsIGdpbnQgKndyaXRlcl9pZCwgZ2NoYXIgKndyaXRlcl9zdHJpbmcpOworCisgIHZvaWQgICAgICAgICAgKCpjb21taXQpICAgICAgICAgICAgICAgKEdzdEluZGV4ICppbmRleCwgZ2ludCBpZCk7CisKKyAgLyogYWJzdHJhY3QgbWV0aG9kcyAqLworICB2b2lkICAgICAgICAgICgqYWRkX2VudHJ5KSAgICAgICAgICAgIChHc3RJbmRleCAqaW5kZXgsIEdzdEluZGV4RW50cnkgKmVudHJ5KTsKKworICBHc3RJbmRleEVudHJ5KiAoKmdldF9hc3NvY19lbnRyeSkgICAgIChHc3RJbmRleCAqaW5kZXgsIGdpbnQgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEluZGV4TG9va3VwTWV0aG9kIG1ldGhvZCwgR3N0QXNzb2NGbGFncyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0IHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ29tcGFyZURhdGFGdW5jIGZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7CisgIC8qIHNpZ25hbHMgKi8KKyAgdm9pZCAgICAgICAgICAoKmVudHJ5X2FkZGVkKSAgICAgICAgICAoR3N0SW5kZXggKmluZGV4LCBHc3RJbmRleEVudHJ5ICplbnRyeSk7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOworfTsKKworR1R5cGUgICAgICAgICAgICAgICAgICAgZ3N0X2luZGV4X2dldF90eXBlICAgICAgICAgICAgICAodm9pZCk7CitHc3RJbmRleCogICAgICAgICAgICAgICBnc3RfaW5kZXhfbmV3ICAgICAgICAgICAgICAgICAgICh2b2lkKTsKK3ZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9pbmRleF9jb21taXQgICAgICAgICAgICAgICAgKEdzdEluZGV4ICppbmRleCwgZ2ludCBpZCk7CisKK2dpbnQgICAgICAgICAgICAgICAgICAgIGdzdF9pbmRleF9nZXRfZ3JvdXAgICAgICAgICAgICAgKEdzdEluZGV4ICppbmRleCk7CitnaW50ICAgICAgICAgICAgICAgICAgICBnc3RfaW5kZXhfbmV3X2dyb3VwICAgICAgICAgICAgIChHc3RJbmRleCAqaW5kZXgpOworZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X2luZGV4X3NldF9ncm91cCAgICAgICAgICAgICAoR3N0SW5kZXggKmluZGV4LCBnaW50IGdyb3VwbnVtKTsKKwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2luZGV4X3NldF9jZXJ0YWludHkgICAgICAgICAoR3N0SW5kZXggKmluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0SW5kZXhDZXJ0YWludHkgY2VydGFpbnR5KTsKK0dzdEluZGV4Q2VydGFpbnR5ICAgICAgIGdzdF9pbmRleF9nZXRfY2VydGFpbnR5ICAgICAgICAgKEdzdEluZGV4ICppbmRleCk7CisKK3ZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9pbmRleF9zZXRfZmlsdGVyICAgICAgICAgICAgKEdzdEluZGV4ICppbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEluZGV4RmlsdGVyIGZpbHRlciwgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKK3ZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9pbmRleF9zZXRfZmlsdGVyX2Z1bGwgICAgICAgKEdzdEluZGV4ICppbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEluZGV4RmlsdGVyIGZpbHRlciwgZ3BvaW50ZXIgdXNlcl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3RpZnkgdXNlcl9kYXRhX2Rlc3Ryb3kpOwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2luZGV4X3NldF9yZXNvbHZlciAgICAgICAgICAoR3N0SW5kZXggKmluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0SW5kZXhSZXNvbHZlciByZXNvbHZlciwgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKK3ZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9pbmRleF9zZXRfcmVzb2x2ZXJfZnVsbCAgICAgKEdzdEluZGV4ICppbmRleCwgR3N0SW5kZXhSZXNvbHZlciByZXNvbHZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEZXN0cm95Tm90aWZ5IHVzZXJfZGF0YV9kZXN0cm95KTsKKworZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X2luZGV4X2dldF93cml0ZXJfaWQgICAgICAgICAoR3N0SW5kZXggKmluZGV4LCBHc3RPYmplY3QgKndyaXRlciwgZ2ludCAqaWQpOworCitHc3RJbmRleEVudHJ5KiAgICAgICAgICBnc3RfaW5kZXhfYWRkX2Zvcm1hdCAgICAgICAgICAgIChHc3RJbmRleCAqaW5kZXgsIGdpbnQgaWQsIEdzdEZvcm1hdCBmb3JtYXQpOworR3N0SW5kZXhFbnRyeSogICAgICAgICAgZ3N0X2luZGV4X2FkZF9hc3NvY2lhdGlvbnYgICAgICAoR3N0SW5kZXggKiBpbmRleCwgZ2ludCBpZCwgR3N0QXNzb2NGbGFncyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgbiwgY29uc3QgR3N0SW5kZXhBc3NvY2lhdGlvbiAqIGxpc3QpOworR3N0SW5kZXhFbnRyeSogICAgICAgICAgZ3N0X2luZGV4X2FkZF9hc3NvY2lhdGlvbiAgICAgICAoR3N0SW5kZXggKmluZGV4LCBnaW50IGlkLCBHc3RBc3NvY0ZsYWdzIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0IHZhbHVlLCAuLi4pOworR3N0SW5kZXhFbnRyeSogICAgICAgICAgZ3N0X2luZGV4X2FkZF9vYmplY3QgICAgICAgICAgICAoR3N0SW5kZXggKmluZGV4LCBnaW50IGlkLCBnY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1R5cGUgdHlwZSwgZ3BvaW50ZXIgb2JqZWN0KTsKK0dzdEluZGV4RW50cnkqICAgICAgICAgIGdzdF9pbmRleF9hZGRfaWQgICAgICAgICAgICAgICAgKEdzdEluZGV4ICppbmRleCwgZ2ludCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyICpkZXNjcmlwdGlvbik7CisKK0dzdEluZGV4RW50cnkqICAgICAgICAgIGdzdF9pbmRleF9nZXRfYXNzb2NfZW50cnkgICAgICAgKEdzdEluZGV4ICppbmRleCwgZ2ludCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEluZGV4TG9va3VwTWV0aG9kIG1ldGhvZCwgR3N0QXNzb2NGbGFncyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEZvcm1hdCBmb3JtYXQsIGdpbnQ2NCB2YWx1ZSk7CitHc3RJbmRleEVudHJ5KiAgICAgICAgICBnc3RfaW5kZXhfZ2V0X2Fzc29jX2VudHJ5X2Z1bGwgIChHc3RJbmRleCAqaW5kZXgsIGdpbnQgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RJbmRleExvb2t1cE1ldGhvZCBtZXRob2QsIEdzdEFzc29jRmxhZ3MgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RGb3JtYXQgZm9ybWF0LCBnaW50NjQgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ29tcGFyZURhdGFGdW5jIGZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEpOworCisvKiB3b3JraW5nIHdpdGggaW5kZXggZW50cmllcyAqLworR1R5cGUgZ3N0X2luZGV4X2VudHJ5X2dldF90eXBlICh2b2lkKTsKK0dzdEluZGV4RW50cnkgKiAgICAgICAgIGdzdF9pbmRleF9lbnRyeV9jb3B5ICAgICAgICAgICAgKEdzdEluZGV4RW50cnkgKmVudHJ5KTsKK3ZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9pbmRleF9lbnRyeV9mcmVlICAgICAgICAgICAgKEdzdEluZGV4RW50cnkgKmVudHJ5KTsKK2dib29sZWFuICAgICAgICAgICAgICAgIGdzdF9pbmRleF9lbnRyeV9hc3NvY19tYXAgICAgICAgKEdzdEluZGV4RW50cnkgKmVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0ICp2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9JTkRFWF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RpbmRleGZhY3RvcnkuYyBiL2dzdC9nc3RpbmRleGZhY3RvcnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTFhMGNlCi0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdGluZGV4ZmFjdG9yeS5jCkBAIC0wLDAgKzEsMjE0IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwMSBSaWRnZVJ1biAoaHR0cDovL3d3dy5yaWRnZXJ1bi5jb20vKQorICogV3JpdHRlbiBieSBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQHJpZGdlcnVuLmNvbT4KKyAqCisgKiBnc3RpbmRleGZhY3RvcnkuYzogSW5kZXggZm9yIG1hcHBpbmdzIGFuZCBvdGhlciBkYXRhCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoqCisgKiBTRUNUSU9OOmdzdGluZGV4ZmFjdG9yeQorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBDcmVhdGUgR3N0SW5kZXhlcyBmcm9tIGEgZmFjdG9yeQorICogQHNlZV9hbHNvOiAjR3N0SW5kZXgKKyAqCisgKiBHc3RJbmRleEZhY3RvcnkgaXMgdXNlZCB0byBkeW5hbWljYWxseSBjcmVhdGUgR3N0SW5kZXggaW1wbGVtZW50YXRpb25zLgorICovCisKKworI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCisKKyNpbmNsdWRlICJnc3RpbmZvLmgiCisjaW5jbHVkZSAiZ3N0aW5kZXguaCIKKyNpbmNsdWRlICJnc3RpbmRleGZhY3RvcnkuaCIKKyNpbmNsdWRlICJnc3RtYXJzaGFsLmgiCisjaW5jbHVkZSAiZ3N0cmVnaXN0cnkuaCIKKworc3RhdGljIHZvaWQgZ3N0X2luZGV4X2ZhY3RvcnlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOworCitzdGF0aWMgR3N0UGx1Z2luRmVhdHVyZUNsYXNzICpmYWN0b3J5X3BhcmVudF9jbGFzcyA9IE5VTEw7CisKKy8qIHN0YXRpYyBndWludCBnc3RfaW5kZXhfZmFjdG9yeV9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OyAqLworR19ERUZJTkVfVFlQRSAoR3N0SW5kZXhGYWN0b3J5LCBnc3RfaW5kZXhfZmFjdG9yeSwgR1NUX1RZUEVfUExVR0lOX0ZFQVRVUkUpOworCitzdGF0aWMgdm9pZAorZ3N0X2luZGV4X2ZhY3RvcnlfY2xhc3NfaW5pdCAoR3N0SW5kZXhGYWN0b3J5Q2xhc3MgKiBrbGFzcykKK3sKKyAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKKworICBmYWN0b3J5X3BhcmVudF9jbGFzcyA9IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCAoa2xhc3MpOworCisgIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X2luZGV4X2ZhY3RvcnlfZmluYWxpemU7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfaW5kZXhfZmFjdG9yeV9pbml0IChHc3RJbmRleEZhY3RvcnkgKiBmYWN0b3J5KQoreworfQorCitzdGF0aWMgdm9pZAorZ3N0X2luZGV4X2ZhY3RvcnlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCit7CisgIEdzdEluZGV4RmFjdG9yeSAqZmFjdG9yeSA9IEdTVF9JTkRFWF9GQUNUT1JZIChvYmplY3QpOworCisgIGdfZnJlZSAoZmFjdG9yeS0+bG9uZ2Rlc2MpOworCisgIEdfT0JKRUNUX0NMQVNTIChmYWN0b3J5X3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOworCit9CisKKy8qKgorICogZ3N0X2luZGV4X2ZhY3RvcnlfbmV3OgorICogQG5hbWU6IG5hbWUgb2YgaW5kZXhmYWN0b3J5IHRvIGNyZWF0ZQorICogQGxvbmdkZXNjOiBsb25nIGRlc2NyaXB0aW9uIG9mIGluZGV4ZmFjdG9yeSB0byBjcmVhdGUKKyAqIEB0eXBlOiB0aGUgR1R5cGUgb2YgdGhlIEdzdEluZGV4IGVsZW1lbnQgb2YgdGhpcyBmYWN0b3J5CisgKgorICogQ3JlYXRlIGEgbmV3IGluZGV4ZmFjdG9yeSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0SW5kZXhGYWN0b3J5LgorICovCitHc3RJbmRleEZhY3RvcnkgKgorZ3N0X2luZGV4X2ZhY3RvcnlfbmV3IChjb25zdCBnY2hhciAqIG5hbWUsIGNvbnN0IGdjaGFyICogbG9uZ2Rlc2MsIEdUeXBlIHR5cGUpCit7CisgIEdzdEluZGV4RmFjdG9yeSAqZmFjdG9yeTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAobmFtZSAhPSBOVUxMLCBOVUxMKTsKKworICBmYWN0b3J5ID0KKyAgICAgIEdTVF9JTkRFWF9GQUNUT1JZIChnX29iamVjdF9uZXcgKEdTVF9UWVBFX0lOREVYX0ZBQ1RPUlksICJuYW1lIiwgbmFtZSwKKyAgICAgICAgICBOVUxMKSk7CisKKyAgaWYgKGZhY3RvcnktPmxvbmdkZXNjKQorICAgIGdfZnJlZSAoZmFjdG9yeS0+bG9uZ2Rlc2MpOworICBmYWN0b3J5LT5sb25nZGVzYyA9IGdfc3RyZHVwIChsb25nZGVzYyk7CisgIGZhY3RvcnktPnR5cGUgPSB0eXBlOworCisgIHJldHVybiBmYWN0b3J5OworfQorCisvKioKKyAqIGdzdF9pbmRleF9mYWN0b3J5X2Rlc3Ryb3k6CisgKiBAZmFjdG9yeTogZmFjdG9yeSB0byBkZXN0cm95CisgKgorICogUmVtb3ZlcyB0aGUgaW5kZXggZnJvbSB0aGUgZ2xvYmFsIGxpc3QuCisgKi8KK3ZvaWQKK2dzdF9pbmRleF9mYWN0b3J5X2Rlc3Ryb3kgKEdzdEluZGV4RmFjdG9yeSAqIGZhY3RvcnkpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKGZhY3RvcnkgIT0gTlVMTCk7CisKKyAgLyogd2UgZG9uJ3QgZnJlZSB0aGUgc3RydWN0IGJhY2F1c2Ugc29tZW9uZSBtaWdodCAgaGF2ZSBhIGhhbmRsZSB0byBpdC4uICovCisgIC8qIEZJWE1FOiBnc3RfaW5kZXhfZmFjdG9yeV9kZXN0cm95ICovCit9CisKKy8qKgorICogZ3N0X2luZGV4X2ZhY3RvcnlfZmluZDoKKyAqIEBuYW1lOiBuYW1lIG9mIGluZGV4ZmFjdG9yeSB0byBmaW5kCisgKgorICogU2VhcmNoIGZvciBhbiBpbmRleGZhY3Rvcnkgb2YgdGhlIGdpdmVuIG5hbWUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiAjR3N0SW5kZXhGYWN0b3J5IGlmIGZvdW5kLCBOVUxMIG90aGVyd2lzZQorICovCitHc3RJbmRleEZhY3RvcnkgKgorZ3N0X2luZGV4X2ZhY3RvcnlfZmluZCAoY29uc3QgZ2NoYXIgKiBuYW1lKQoreworICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYW1lICE9IE5VTEwsIE5VTEwpOworCisgIEdTVF9ERUJVRyAoImdzdGluZGV4OiBmaW5kIFwiJXNcIiIsIG5hbWUpOworCisgIGZlYXR1cmUgPSBnc3RfcmVnaXN0cnlfZmluZF9mZWF0dXJlIChnc3RfcmVnaXN0cnlfZ2V0X2RlZmF1bHQgKCksIG5hbWUsCisgICAgICBHU1RfVFlQRV9JTkRFWF9GQUNUT1JZKTsKKyAgaWYgKGZlYXR1cmUpCisgICAgcmV0dXJuIEdTVF9JTkRFWF9GQUNUT1JZIChmZWF0dXJlKTsKKworICByZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBnc3RfaW5kZXhfZmFjdG9yeV9jcmVhdGU6CisgKiBAZmFjdG9yeTogdGhlIGZhY3RvcnkgdXNlZCB0byBjcmVhdGUgdGhlIGluc3RhbmNlCisgKgorICogQ3JlYXRlIGEgbmV3ICNHc3RJbmRleCBpbnN0YW5jZSBmcm9tIHRoZQorICogZ2l2ZW4gaW5kZXhmYWN0b3J5LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdEluZGV4IGluc3RhbmNlLgorICovCitHc3RJbmRleCAqCitnc3RfaW5kZXhfZmFjdG9yeV9jcmVhdGUgKEdzdEluZGV4RmFjdG9yeSAqIGZhY3RvcnkpCit7CisgIEdzdEluZGV4RmFjdG9yeSAqbmV3ZmFjdG9yeTsKKyAgR3N0SW5kZXggKm5ldyA9IE5VTEw7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZhY3RvcnkgIT0gTlVMTCwgTlVMTCk7CisKKyAgbmV3ZmFjdG9yeSA9CisgICAgICBHU1RfSU5ERVhfRkFDVE9SWSAoZ3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQgKEdTVF9QTFVHSU5fRkVBVFVSRQorICAgICAgICAgIChmYWN0b3J5KSkpOworICBpZiAobmV3ZmFjdG9yeSA9PSBOVUxMKQorICAgIHJldHVybiBOVUxMOworCisgIG5ldyA9IEdTVF9JTkRFWCAoZ19vYmplY3RfbmV3diAobmV3ZmFjdG9yeS0+dHlwZSwgMCwgTlVMTCkpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKG5ld2ZhY3RvcnkpOworCisgIHJldHVybiBuZXc7Cit9CisKKy8qKgorICogZ3N0X2luZGV4X2ZhY3RvcnlfbWFrZToKKyAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgZmFjdG9yeSB1c2VkIHRvIGNyZWF0ZSB0aGUgaW5zdGFuY2UKKyAqCisgKiBDcmVhdGUgYSBuZXcgI0dzdEluZGV4IGluc3RhbmNlIGZyb20gdGhlCisgKiBpbmRleGZhY3Rvcnkgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RJbmRleCBpbnN0YW5jZS4KKyAqLworR3N0SW5kZXggKgorZ3N0X2luZGV4X2ZhY3RvcnlfbWFrZSAoY29uc3QgZ2NoYXIgKiBuYW1lKQoreworICBHc3RJbmRleEZhY3RvcnkgKmZhY3Rvcnk7CisgIEdzdEluZGV4ICppbmRleDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAobmFtZSAhPSBOVUxMLCBOVUxMKTsKKworICBmYWN0b3J5ID0gZ3N0X2luZGV4X2ZhY3RvcnlfZmluZCAobmFtZSk7CisKKyAgaWYgKGZhY3RvcnkgPT0gTlVMTCkKKyAgICBnb3RvIG5vX2ZhY3Rvcnk7CisKKyAgaW5kZXggPSBnc3RfaW5kZXhfZmFjdG9yeV9jcmVhdGUgKGZhY3RvcnkpOworCisgIGlmIChpbmRleCA9PSBOVUxMKQorICAgIGdvdG8gY3JlYXRlX2ZhaWxlZDsKKworICBnc3Rfb2JqZWN0X3VucmVmIChmYWN0b3J5KTsKKyAgcmV0dXJuIGluZGV4OworCisgIC8qIEVSUk9SUyAqLworbm9fZmFjdG9yeToKKyAgeworICAgIEdTVF9JTkZPICgibm8gc3VjaCBpbmRleCBmYWN0b3J5IFwiJXNcIiEiLCBuYW1lKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorY3JlYXRlX2ZhaWxlZDoKKyAgeworICAgIEdTVF9JTkZPX09CSkVDVCAoZmFjdG9yeSwgImNvdWxkbid0IGNyZWF0ZSBpbnN0YW5jZSEiKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChmYWN0b3J5KTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGluZGV4ZmFjdG9yeS5oIGIvZ3N0L2dzdGluZGV4ZmFjdG9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZTllZjMKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0aW5kZXhmYWN0b3J5LmgKQEAgLTAsMCArMSw3NiBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNoZWxsby5iZT4KKyAqCisgKiBnc3RpbmRleGZhY3RvcnkuaDogSGVhZGVyIGZvciBHc3RJbmRleEZhY3RvcnksIGJhc2UgY2xhc3MgdG8gaGFuZGxlIGVmZmljaWVudAorICogICAgICAgICAgICAgICAgICAgIHN0b3JhZ2Ugb3IgY2FjaGluZyBvZiBzZWVraW5nIGluZm9ybWF0aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19HU1RfSU5ERVhfRkFDVE9SWV9IX18KKyNkZWZpbmUgX19HU1RfSU5ERVhfRkFDVE9SWV9IX18KKworI2luY2x1ZGUgPGdzdC9nc3RvYmplY3QuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Zm9ybWF0Lmg+CisjaW5jbHVkZSA8Z3N0L2dzdHBsdWdpbmZlYXR1cmUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEdTVF9UWVBFX0lOREVYX0ZBQ1RPUlkgIAkJKGdzdF9pbmRleF9mYWN0b3J5X2dldF90eXBlKCkpCisjZGVmaW5lIEdTVF9JTkRFWF9GQUNUT1JZKG9iaikgCQkJKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfSU5ERVhfRkFDVE9SWSwgR3N0SW5kZXhGYWN0b3J5KSkKKyNkZWZpbmUgR1NUX0lTX0lOREVYX0ZBQ1RPUlkob2JqKSAJCShHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX0lOREVYX0ZBQ1RPUlkpKQorI2RlZmluZSBHU1RfSU5ERVhfRkFDVE9SWV9DTEFTUyhrbGFzcykgCQkoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX0lOREVYX0ZBQ1RPUlksIEdzdEluZGV4RmFjdG9yeUNsYXNzKSkKKyNkZWZpbmUgR1NUX0lTX0lOREVYX0ZBQ1RPUllfQ0xBU1Moa2xhc3MpIAkoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX0lOREVYX0ZBQ1RPUlkpKQorI2RlZmluZSBHU1RfSU5ERVhfRkFDVE9SWV9HRVRfQ0xBU1Mob2JqKSAJKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9JTkRFWF9GQUNUT1JZLCBHc3RJbmRleEZhY3RvcnlDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9Hc3RJbmRleEZhY3RvcnkgR3N0SW5kZXhGYWN0b3J5OwordHlwZWRlZiBzdHJ1Y3QgX0dzdEluZGV4RmFjdG9yeUNsYXNzIEdzdEluZGV4RmFjdG9yeUNsYXNzOworCisvKioKKyAqIEdzdEluZGV4RmFjdG9yeToKKyAqCisgKiBUaGUgR3N0SW5kZXhGYWN0b3J5IG9iamVjdAorICovCitzdHJ1Y3QgX0dzdEluZGV4RmFjdG9yeSB7CisgIEdzdFBsdWdpbkZlYXR1cmUgZmVhdHVyZTsKKworICBnY2hhciAqbG9uZ2Rlc2M7ICAgICAgICAgICAgLyogbG9uZyBkZXNjcmlwdGlvbiBvZiB0aGUgaW5kZXggKHdlbGwsIGRvbid0IG92ZXJkbyBpdC4uKSAqLworICBHVHlwZSB0eXBlOyAgICAgICAgICAgICAgICAgLyogdW5pcXVlIEdUeXBlIG9mIHRoZSBpbmRleCAqLworCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOworfTsKKworc3RydWN0IF9Hc3RJbmRleEZhY3RvcnlDbGFzcyB7CisgIEdzdFBsdWdpbkZlYXR1cmVDbGFzcyBwYXJlbnQ7CisKKyAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Cit9OworCitHVHlwZSAJCQlnc3RfaW5kZXhfZmFjdG9yeV9nZXRfdHlwZSAJKHZvaWQpOworCitHc3RJbmRleEZhY3RvcnkqCWdzdF9pbmRleF9mYWN0b3J5X25ldyAJCShjb25zdCBnY2hhciAqbmFtZSwKKwkJCQkJCQkgY29uc3QgZ2NoYXIgKmxvbmdkZXNjLCBHVHlwZSB0eXBlKTsKK3ZvaWQgCQkJZ3N0X2luZGV4X2ZhY3RvcnlfZGVzdHJveQkoR3N0SW5kZXhGYWN0b3J5ICpmYWN0b3J5KTsKKworR3N0SW5kZXhGYWN0b3J5Kglnc3RfaW5kZXhfZmFjdG9yeV9maW5kCQkoY29uc3QgZ2NoYXIgKm5hbWUpOworCitHc3RJbmRleCoJCWdzdF9pbmRleF9mYWN0b3J5X2NyZWF0ZSAJKEdzdEluZGV4RmFjdG9yeSAqZmFjdG9yeSk7CitHc3RJbmRleCoJCWdzdF9pbmRleF9mYWN0b3J5X21ha2UgICAJKGNvbnN0IGdjaGFyICpuYW1lKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fR1NUX0lOREVYX0ZBQ1RPUllfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0aW5mby5jIGIvZ3N0L2dzdGluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTYyYjgzCi0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdGluZm8uYwpAQCAtMCwwICsxLDIwMDMgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAzIEJlbmphbWluIE90dGUgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KKyAqCisgKiBnc3RpbmZvLmM6IGRlYnVnZ2luZyBmdW5jdGlvbnMKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKioKKyAqIFNFQ1RJT046Z3N0aW5mbworICogQHNob3J0X2Rlc2NyaXB0aW9uOiBEZWJ1Z2dpbmcgYW5kIGxvZ2dpbmcgZmFjaWxpdGllcworICogQHNlZV9hbHNvOiAjZ3N0cmVhbWVyLWdzdGNvbmZpZywgI2dzdHJlYW1lci1Hc3QgZm9yIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzCisgKiBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgYWZmZWN0IHRoZSBkZWJ1Z2dpbmcgb3V0cHV0LgorICoKKyAqIEdTdHJlYW1lcidzIGRlYnVnZ2luZyBzdWJzeXN0ZW0gaXMgYW4gZWFzeSB3YXkgdG8gZ2V0IGluZm9ybWF0aW9uIGFib3V0IHdoYXQKKyAqIHRoZSBhcHBsaWNhdGlvbiBpcyBkb2luZy4gIEl0IGlzIG5vdCBtZWFudCBmb3IgcHJvZ3JhbW1pbmcgZXJyb3JzLiBVc2UgR0xpYgorICogbWV0aG9kcyAoZ193YXJuaW5nIGFuZCBmcmllbmRzKSBmb3IgdGhhdC4KKyAqCisgKiBUaGUgZGVidWdnaW5nIHN1YnN5c3RlbSB3b3JrcyBvbmx5IGFmdGVyIEdTdHJlYW1lciBoYXMgYmVlbiBpbml0aWFsaXplZAorICogLSBmb3IgZXhhbXBsZSBieSBjYWxsaW5nIGdzdF9pbml0KCkuCisgKgorICogVGhlIGRlYnVnZ2luZyBzdWJzeXN0ZW0gaXMgdXNlZCB0byBsb2cgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyB3aGlsZSB0aGUKKyAqIGFwcGxpY2F0aW9uIHJ1bnMuICBFYWNoIG1lc3NhZ2VzIGhhcyBzb21lIHByb3BlcnRpZXMgYXR0YWNoZWQgdG8gaXQuIEFtb25nCisgKiB0aGVzZSBwcm9wZXJ0aWVzIGFyZSB0aGUgZGVidWdnaW5nIGNhdGVnb3J5LCB0aGUgc2V2ZXJpdHkgKGNhbGxlZCAibGV2ZWwiCisgKiBoZXJlKSBhbmQgYW4gb3B0aW9uYWwgI0dPYmplY3QgaXQgYmVsb25ncyB0by4gRWFjaCBvZiB0aGVzZSBtZXNzYWdlcyBpcyBzZW50CisgKiB0byBhbGwgcmVnaXN0ZXJlZCBkZWJ1Z2dpbmcgaGFuZGxlcnMsIHdoaWNoIHRoZW4gaGFuZGxlIHRoZSBtZXNzYWdlcy4KKyAqIEdTdHJlYW1lciBhdHRhY2hlcyBhIGRlZmF1bHQgaGFuZGxlciBvbiBzdGFydHVwLCB3aGljaCBvdXRwdXRzIHJlcXVlc3RlZAorICogbWVzc2FnZXMgdG8gc3RkZXJyLgorICoKKyAqIE1lc3NhZ2VzIGFyZSBvdXRwdXQgYnkgdXNpbmcgc2hvcnRjdXQgbWFjcm9zIGxpa2UgI0dTVF9ERUJVRywKKyAqICNHU1RfQ0FUX0VSUk9SX09CSkVDVCBvciBzaW1pbGFyLiBUaGVzZSBhbGwgZXhwYW5kIHRvIGNhbGxpbmcgZ3N0X2RlYnVnX2xvZygpCisgKiB3aXRoIHRoZSByaWdodCBwYXJhbWV0ZXJzLgorICogVGhlIG9ubHkgdGhpbmcgYSBkZXZlbG9wZXIgd2lsbCBwcm9iYWJseSB3YW50IHRvIGRvIGlzIGRlZmluZSBoaXMgb3duCisgKiBjYXRlZ29yaWVzLiBUaGlzIGlzIGVhc2lseSBkb25lIHdpdGggMyBsaW5lcy4gQXQgdGhlIHRvcCBvZiB5b3VyIGNvZGUsCisgKiBkZWNsYXJlCisgKiB0aGUgdmFyaWFibGVzIGFuZCBzZXQgdGhlIGRlZmF1bHQgY2F0ZWdvcnkuCisgKiA8aW5mb3JtYWxleGFtcGxlPgorICogPHByb2dyYW1saXN0aW5nPgorICogR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAobXlfY2F0ZWdvcnkpOyAgICAgLy8gZGVmaW5lIGNhdGVnb3J5IChzdGF0aWNhbGx5KQorICogJmhhc2g7ZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBteV9jYXRlZ29yeSAgICAgLy8gc2V0IGFzIGRlZmF1bHQKKyAqIDwvcHJvZ3JhbWxpc3Rpbmc+CisgKiA8L2luZm9ybWFsZXhhbXBsZT4KKyAqIEFmdGVyIHRoYXQgeW91IG9ubHkgbmVlZCB0byBpbml0aWFsaXplIHRoZSBjYXRlZ29yeS4KKyAqIDxpbmZvcm1hbGV4YW1wbGU+CisgKiA8cHJvZ3JhbWxpc3Rpbmc+CisgKiBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAobXlfY2F0ZWdvcnksICJteSBjYXRlZ29yeSIsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgIlRoaXMgaXMgbXkgdmVyeSBvd24iKTsKKyAqIDwvcHJvZ3JhbWxpc3Rpbmc+CisgKiA8L2luZm9ybWFsZXhhbXBsZT4KKyAqIEluaXRpYWxpemF0aW9uIG11c3QgYmUgZG9uZSBiZWZvcmUgdGhlIGNhdGVnb3J5IGlzIHVzZWQgZmlyc3QuCisgKiBQbHVnaW5zIGRvIHRoaXMKKyAqIGluIHRoZWlyIHBsdWdpbl9pbml0IGZ1bmN0aW9uLCBsaWJyYXJpZXMgYW5kIGFwcGxpY2F0aW9ucyBzaG91bGQgZG8gdGhhdAorICogZHVyaW5nIHRoZWlyIGluaXRpYWxpemF0aW9uLgorICoKKyAqIFRoZSB3aG9sZSBkZWJ1Z2dpbmcgc3Vic3lzdGVtIGNhbiBiZSBkaXNhYmxlZCBhdCBidWlsZCB0aW1lIHdpdGggcGFzc2luZyB0aGUKKyAqIC0tZGlzYWJsZS1nc3QtZGVidWcgc3dpdGNoIHRvIGNvbmZpZ3VyZS4gSWYgdGhpcyBpcyBkb25lLCBldmVyeSBmdW5jdGlvbiwKKyAqIG1hY3JvIGFuZCBldmVuIHN0cnVjdHMgZGVzY3JpYmVkIGluIHRoaXMgZmlsZSBldmFsdWF0ZSB0byBkZWZhdWx0IHZhbHVlcyBvcgorICogbm90aGluZyBhdCBhbGwuCisgKiBTbyBkb24ndCB0YWtlIGFkZHJlc3NlcyBvZiB0aGVzZSBmdW5jdGlvbnMgb3IgdXNlIG90aGVyIHRyaWNrcy4KKyAqIElmIHlvdSBtdXN0IGRvIHRoYXQgZm9yIHNvbWUgcmVhc29uLCB0aGVyZSBpcyBzdGlsbCBhbiBvcHRpb24uCisgKiBJZiB0aGUgZGVidWdnaW5nCisgKiBzdWJzeXN0ZW0gd2FzIGNvbXBpbGVkIG91dCwgI0dTVF9ESVNBQkxFX0dTVF9ERUJVRyBpcyBkZWZpbmVkIGluCisgKiAmbHQ7Z3N0L2dzdC5oJmd0OywKKyAqIHNvIHlvdSBjYW4gY2hlY2sgdGhhdCBiZWZvcmUgZG9pbmcgeW91ciB0cmljay4KKyAqIERpc2FibGluZyB0aGUgZGVidWdnaW5nIHN1YnN5c3RlbSB3aWxsIGdpdmUgeW91IGEgc2xpZ2h0IChyZWFkOiB1bm5vdGljZWFibGUpCisgKiBzcGVlZCBpbmNyZWFzZSBhbmQgd2lsbCByZWR1Y2UgdGhlIHNpemUgb2YgeW91ciBjb21waWxlZCBjb2RlLiBUaGUgR1N0cmVhbWVyCisgKiBsaWJyYXJ5IGl0c2VsZiBiZWNvbWVzIGFyb3VuZCAxMCUgc21hbGxlci4KKyAqCisgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXJlIGFyZSBuYW1pbmcgY29udmVudGlvbnMgZm9yIHRoZSBuYW1lcyBvZiBkZWJ1Z2dpbmcKKyAqIGNhdGVnb3JpZXMuIFRoZXNlIGFyZSBleHBsYWluZWQgYXQgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQoKS4KKyAqLworCisjZGVmaW5lIEdTVF9JTkZPX0MKKyNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImdzdGluZm8uaCIKKworI3VuZGVmIGdzdF9kZWJ1Z19yZW1vdmVfbG9nX2Z1bmN0aW9uCisjdW5kZWYgZ3N0X2RlYnVnX2FkZF9sb2dfZnVuY3Rpb24KKworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKworI2lmZGVmIEhBVkVfRExGQ05fSAorIyAgaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfUFJJTlRGX0VYVEVOU0lPTgorIyAgaW5jbHVkZSA8cHJpbnRmLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPiAgICAgICAgICAgICAgLyogZnByaW50ZiAqLworI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgICAgIC8qIGdldHBpZCBvbiBVTklYICovCisjZW5kaWYKKyNpZmRlZiBIQVZFX1BST0NFU1NfSAorIyAgaW5jbHVkZSA8cHJvY2Vzcy5oPiAgICAgICAgICAvKiBnZXRwaWQgb24gd2luMzIgKi8KKyNlbmRpZgorI2luY2x1ZGUgPHN0cmluZy5oPiAgICAgICAgICAgICAvKiBHX1ZBX0NPUFkgKi8KKyNpZmRlZiBHX09TX1dJTjMyCisjICBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTiAgIC8qIHByZXZlbnRzIGZyb20gaW5jbHVkaW5nIHRvbyBtYW55IHRoaW5ncyAqLworIyAgaW5jbHVkZSA8d2luZG93cy5oPiAgICAgICAgICAvKiBHZXRTdGRIYW5kbGUsIHdpbmRvd3MgY29uc29sZSAqLworI2VuZGlmCisKKyNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImdzdHV0aWxzLmgiCisjaW5jbHVkZSAiZ3N0cXVhcmsuaCIKKyNpbmNsdWRlICJnc3RzZWdtZW50LmgiCisjaWZkZWYgSEFWRV9WQUxHUklORF9WQUxHUklORF9ICisjICBpbmNsdWRlIDx2YWxncmluZC92YWxncmluZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8Z2xpYi9ncHJpbnRmLmg+ICAgICAgIC8qIGdfc3ByaW50ZiAqLworCisjZW5kaWYgLyogIUdTVF9ESVNBQkxFX0dTVF9ERUJVRyAqLworCisvKiB3ZSB3YW50IHRoZXNlIHN5bWJvbHMgZXhwb3J0ZWQgZXZlbiBpZiBkZWJ1ZyBpcyBkaXNhYmxlZCwgdG8gbWFpbnRhaW4KKyAqIEFCSSBjb21wYXRpYmlsaXR5LiBVbmxlc3MgR1NUX1JFTU9WRV9ESVNBQkxFRCBpcyBkZWZpbmVkLiAqLworI2lmICFkZWZpbmVkKEdTVF9ESVNBQkxFX0dTVF9ERUJVRykgfHwgIWRlZmluZWQoR1NUX1JFTU9WRV9ESVNBQkxFRCkKKworLyogZGlzYWJsZWQgYnkgZGVmYXVsdCwgYXMgc29vbiBhcyBzb21lIHRocmVzaG9sZCBpcyBzZXQgPiBOT05FLAorICogaXQgYmVjb21lcyBlbmFibGVkLiAqLworZ2Jvb2xlYW4gX19nc3RfZGVidWdfZW5hYmxlZCA9IEZBTFNFOworR3N0RGVidWdMZXZlbCBfX2dzdF9kZWJ1Z19taW4gPSBHU1RfTEVWRUxfTk9ORTsKKworR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9ERUZBVUxUID0gTlVMTDsKKworR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9HU1RfSU5JVCA9IE5VTEw7CitHc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX0FVVE9QTFVHID0gTlVMTDsKK0dzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfQVVUT1BMVUdfQVRURU1QVCA9IE5VTEw7CitHc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX1BBUkVOVEFHRSA9IE5VTEw7CitHc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX1NUQVRFUyA9IE5VTEw7CitHc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX1NDSEVEVUxJTkcgPSBOVUxMOworCitHc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX0JVRkZFUiA9IE5VTEw7CitHc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX0JVRkZFUl9MSVNUID0gTlVMTDsKK0dzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfQlVTID0gTlVMTDsKK0dzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfQ0FQUyA9IE5VTEw7CitHc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX0NMT0NLID0gTlVMTDsKK0dzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfRUxFTUVOVF9QQURTID0gTlVMTDsKK0dzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfUEFEUyA9IE5VTEw7CitHc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX1BFUkZPUk1BTkNFID0gTlVMTDsKK0dzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfUElQRUxJTkUgPSBOVUxMOworR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9QTFVHSU5fTE9BRElORyA9IE5VTEw7CitHc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX1BMVUdJTl9JTkZPID0gTlVMTDsKK0dzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfUFJPUEVSVElFUyA9IE5VTEw7CitHc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX1RZUEVTID0gTlVMTDsKK0dzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfTkVHT1RJQVRJT04gPSBOVUxMOworR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9SRUZDT1VOVElORyA9IE5VTEw7CitHc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX0VSUk9SX1NZU1RFTSA9IE5VTEw7CitHc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX0VWRU5UID0gTlVMTDsKK0dzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfTUVTU0FHRSA9IE5VTEw7CitHc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX1BBUkFNUyA9IE5VTEw7CitHc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX0NBTExfVFJBQ0UgPSBOVUxMOworR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9TSUdOQUwgPSBOVUxMOworR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9QUk9CRSA9IE5VTEw7CitHc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX1JFR0lTVFJZID0gTlVMTDsKK0dzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfUU9TID0gTlVMTDsKK0dzdERlYnVnQ2F0ZWdvcnkgKl9wcml2X0dTVF9DQVRfUE9MTCA9IE5VTEw7CisKKworI2VuZGlmIC8qICFkZWZpbmVkKEdTVF9ESVNBQkxFX0dTVF9ERUJVRykgfHwgIWRlZmluZWQoR1NUX1JFTU9WRV9ESVNBQkxFRCkgKi8KKworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKworLyogdW5kZXJzY29yZSBpcyB0byBwcmV2ZW50IGNvbmZsaWN0IHdpdGggR1NUX0NBVF9ERUJVRyBkZWZpbmUgKi8KK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKF9HU1RfQ0FUX0RFQlVHKTsKKworLyogdGltZSBvZiBpbml0aWFsaXphdGlvbiwgc28gd2UgZ2V0IHVzZWZ1bCBkZWJ1Z2dpbmcgb3V0cHV0IHRpbWVzCisgKiBGSVhNRTogd2UgdXNlIHRoaXMgaW4gZ3N0ZGVidWd1dGlscy5jLCB3aGF0IGFib3V0IGEgZnVuY3Rpb24gKyBtYWNybyB0bworICogZ2V0IHRoZSBydW5uaW5nIHRpbWU6IEdTVF9ERUJVR19SVU5OSU5HX1RJTUUKKyAqLworR3N0Q2xvY2tUaW1lIF9wcml2X2dzdF9pbmZvX3N0YXJ0X3RpbWU7CisKKyNpZiAwCisjaWYgZGVmaW5lZCBfX3NnaV9fCisjaW5jbHVkZSA8cmxkX2ludGVyZmFjZS5oPgordHlwZWRlZiBzdHJ1Y3QgRExfSU5GTworeworICBjb25zdCBjaGFyICpkbGlfZm5hbWU7CisgIHZvaWQgKmRsaV9mYmFzZTsKKyAgY29uc3QgY2hhciAqZGxpX3NuYW1lOworICB2b2lkICpkbGlfc2FkZHI7CisgIGludCBkbGlfdmVyc2lvbjsKKyAgaW50IGRsaV9yZXNlcnZlZDE7CisgIGxvbmcgZGxpX3Jlc2VydmVkWzRdOworfQorRGxfaW5mbzsKKworI2RlZmluZSBfUkxEX0RMQUREUiAgICAgICAgICAgICAxNAoraW50IGRsYWRkciAodm9pZCAqYWRkcmVzcywgRGxfaW5mbyAqIGRsKTsKKworaW50CitkbGFkZHIgKHZvaWQgKmFkZHJlc3MsIERsX2luZm8gKiBkbCkKK3sKKyAgdm9pZCAqdjsKKworICB2ID0gX3JsZF9uZXdfaW50ZXJmYWNlIChfUkxEX0RMQUREUiwgYWRkcmVzcywgZGwpOworICByZXR1cm4gKGludCkgdjsKK30KKyNlbmRpZiAvKiBfX3NnaV9fICovCisjZW5kaWYKKworc3RhdGljIHZvaWQgZ3N0X2RlYnVnX3Jlc2V0X3RocmVzaG9sZCAoZ3BvaW50ZXIgY2F0ZWdvcnksIGdwb2ludGVyIHVudXNlZCk7CitzdGF0aWMgdm9pZCBnc3RfZGVidWdfcmVzZXRfYWxsX3RocmVzaG9sZHMgKHZvaWQpOworCisjaWZkZWYgSEFWRV9QUklOVEZfRVhURU5TSU9OCitzdGF0aWMgaW50IF9nc3RfaW5mb19wcmludGZfZXh0ZW5zaW9uX3B0ciAoRklMRSAqIHN0cmVhbSwKKyAgICBjb25zdCBzdHJ1Y3QgcHJpbnRmX2luZm8gKmluZm8sIGNvbnN0IHZvaWQgKmNvbnN0ICphcmdzKTsKK3N0YXRpYyBpbnQgX2dzdF9pbmZvX3ByaW50Zl9leHRlbnNpb25fc2VnbWVudCAoRklMRSAqIHN0cmVhbSwKKyAgICBjb25zdCBzdHJ1Y3QgcHJpbnRmX2luZm8gKmluZm8sIGNvbnN0IHZvaWQgKmNvbnN0ICphcmdzKTsKKyNpZmRlZiBIQVZFX1JFR0lTVEVSX1BSSU5URl9TUEVDSUZJRVIKK3N0YXRpYyBpbnQgX2dzdF9pbmZvX3ByaW50Zl9leHRlbnNpb25fYXJnaW5mbyAoY29uc3Qgc3RydWN0IHByaW50Zl9pbmZvICppbmZvLAorICAgIHNpemVfdCBuLCBpbnQgKmFyZ3R5cGVzLCBpbnQgKnNpemUpOworI2Vsc2UKK3N0YXRpYyBpbnQgX2dzdF9pbmZvX3ByaW50Zl9leHRlbnNpb25fYXJnaW5mbyAoY29uc3Qgc3RydWN0IHByaW50Zl9pbmZvICppbmZvLAorICAgIHNpemVfdCBuLCBpbnQgKmFyZ3R5cGVzKTsKKyNlbmRpZgorI2VuZGlmCisKK3N0cnVjdCBfR3N0RGVidWdNZXNzYWdlCit7CisgIGdjaGFyICptZXNzYWdlOworICBjb25zdCBnY2hhciAqZm9ybWF0OworICB2YV9saXN0IGFyZ3VtZW50czsKK307CisKKy8qIGxpc3Qgb2YgYWxsIG5hbWUvbGV2ZWwgcGFpcnMgZnJvbSAtLWdzdC1kZWJ1ZyBhbmQgR1NUX0RFQlVHICovCitzdGF0aWMgR1N0YXRpY011dGV4IF9fbGV2ZWxfbmFtZV9tdXRleCA9IEdfU1RBVElDX01VVEVYX0lOSVQ7CitzdGF0aWMgR1NMaXN0ICpfX2xldmVsX25hbWUgPSBOVUxMOwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgR1BhdHRlcm5TcGVjICpwYXQ7CisgIEdzdERlYnVnTGV2ZWwgbGV2ZWw7Cit9CitMZXZlbE5hbWVFbnRyeTsKKworLyogbGlzdCBvZiBhbGwgY2F0ZWdvcmllcyAqLworc3RhdGljIEdTdGF0aWNNdXRleCBfX2NhdF9tdXRleCA9IEdfU1RBVElDX01VVEVYX0lOSVQ7CitzdGF0aWMgR1NMaXN0ICpfX2NhdGVnb3JpZXMgPSBOVUxMOworCisvKiBhbGwgcmVnaXN0ZXJlZCBkZWJ1ZyBoYW5kbGVycyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgR3N0TG9nRnVuY3Rpb24gZnVuYzsKKyAgZ3BvaW50ZXIgdXNlcl9kYXRhOworfQorTG9nRnVuY0VudHJ5Oworc3RhdGljIEdTdGF0aWNNdXRleCBfX2xvZ19mdW5jX211dGV4ID0gR19TVEFUSUNfTVVURVhfSU5JVDsKK3N0YXRpYyBHU0xpc3QgKl9fbG9nX2Z1bmN0aW9ucyA9IE5VTEw7CisKKyNkZWZpbmUgUFJFVFRZX1RBR1NfREVGQVVMVCAgVFJVRQorc3RhdGljIGdib29sZWFuIHByZXR0eV90YWdzID0gUFJFVFRZX1RBR1NfREVGQVVMVDsKKworc3RhdGljIHZvbGF0aWxlIGdpbnQgR19HTlVDX01BWV9BTElBUyBfX2RlZmF1bHRfbGV2ZWwgPSBHU1RfTEVWRUxfREVGQVVMVDsKK3N0YXRpYyB2b2xhdGlsZSBnaW50IEdfR05VQ19NQVlfQUxJQVMgX191c2VfY29sb3IgPSAxOworCitzdGF0aWMgRklMRSAqbG9nX2ZpbGU7CisKKy8qIEZJWE1FOiBleHBvcnQgdGhpcz8gKi8KK2dib29sZWFuCitfcHJpdl9nc3RfaW5fdmFsZ3JpbmQgKHZvaWQpCit7CisgIHN0YXRpYyBlbnVtCisgIHsKKyAgICBHU1RfVkdfVU5DSEVDS0VELAorICAgIEdTVF9WR19OT19WQUxHUklORCwKKyAgICBHU1RfVkdfSU5TSURFCisgIH0KKyAgaW5fdmFsZ3JpbmQgPSBHU1RfVkdfVU5DSEVDS0VEOworCisgIGlmIChpbl92YWxncmluZCA9PSBHU1RfVkdfVU5DSEVDS0VEKSB7CisjaWZkZWYgSEFWRV9WQUxHUklORF9WQUxHUklORF9ICisgICAgaWYgKFJVTk5JTkdfT05fVkFMR1JJTkQpIHsKKyAgICAgIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9HU1RfSU5JVCwgIndlJ3JlIHJ1bm5pbmcgaW5zaWRlIHZhbGdyaW5kIik7CisgICAgICBwcmludGYgKCJHU3RyZWFtZXIgaGFzIGRldGVjdGVkIHRoYXQgaXQgaXMgcnVubmluZyBpbnNpZGUgdmFsZ3JpbmQuXG4iKTsKKyAgICAgIHByaW50ZiAoIkl0IG1pZ2h0IG5vdyB0YWtlIGRpZmZlcmVudCBjb2RlIHBhdGhzIHRvIGVhc2UgZGVidWdnaW5nLlxuIik7CisgICAgICBwcmludGYgKCJPZiBjb3Vyc2UsIHRoaXMgbWF5IGFsc28gbGVhZCB0byBkaWZmZXJlbnQgYnVncy5cbiIpOworICAgICAgaW5fdmFsZ3JpbmQgPSBHU1RfVkdfSU5TSURFOworICAgIH0gZWxzZSB7CisgICAgICBHU1RfQ0FUX0xPRyAoR1NUX0NBVF9HU1RfSU5JVCwgIm5vdCBkb2luZyBleHRyYSB2YWxncmluZCBzdHVmZiIpOworICAgICAgaW5fdmFsZ3JpbmQgPSBHU1RfVkdfTk9fVkFMR1JJTkQ7CisgICAgfQorI2Vsc2UKKyAgICBpbl92YWxncmluZCA9IEdTVF9WR19OT19WQUxHUklORDsKKyNlbmRpZgorICAgIGdfYXNzZXJ0IChpbl92YWxncmluZCA9PSBHU1RfVkdfTk9fVkFMR1JJTkQgfHwKKyAgICAgICAgaW5fdmFsZ3JpbmQgPT0gR1NUX1ZHX0lOU0lERSk7CisgIH0KKyAgcmV0dXJuIChpbl92YWxncmluZCA9PSBHU1RfVkdfSU5TSURFKTsKK30KKworLyoqCisgKiBfZ3N0X2RlYnVnX2luaXQ6CisgKgorICogSW5pdGlhbGl6ZXMgdGhlIGRlYnVnZ2luZyBzeXN0ZW0uCisgKiBOb3JtYWxseSB5b3UgZG9uJ3Qgd2FudCB0byBjYWxsIHRoaXMsIGJlY2F1c2UgZ3N0X2luaXQoKSBkb2VzIGl0IGZvciB5b3UuCisgKi8KK3ZvaWQKK19nc3RfZGVidWdfaW5pdCAodm9pZCkKK3sKKyAgY29uc3QgZ2NoYXIgKmVudjsKKworICBlbnYgPSBnX2dldGVudiAoIkdTVF9ERUJVR19GSUxFIik7CisgIGlmIChlbnYgIT0gTlVMTCAmJiAqZW52ICE9ICdcMCcpIHsKKyAgICBpZiAoc3RyY21wIChlbnYsICItIikgPT0gMCkgeworICAgICAgbG9nX2ZpbGUgPSBzdGRvdXQ7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZ19maWxlID0gZ19mb3BlbiAoZW52LCAidyIpOworICAgICAgaWYgKGxvZ19maWxlID09IE5VTEwpIHsKKyAgICAgICAgZ19wcmludGVyciAoIkNvdWxkIG5vdCBvcGVuIGxvZyBmaWxlICclcycgZm9yIHdyaXRpbmc6ICVzXG4iLCBlbnYsCisgICAgICAgICAgICBnX3N0cmVycm9yIChlcnJubykpOworICAgICAgICBsb2dfZmlsZSA9IHN0ZGVycjsKKyAgICAgIH0KKyAgICB9CisgIH0gZWxzZSB7CisgICAgbG9nX2ZpbGUgPSBzdGRlcnI7CisgIH0KKworICAvKiBnZXQgdGltZSB3ZSBzdGFydGVkIGZvciBkZWJ1Z2dpbmcgbWVzc2FnZXMgKi8KKyAgX3ByaXZfZ3N0X2luZm9fc3RhcnRfdGltZSA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7CisKKyNpZmRlZiBIQVZFX1BSSU5URl9FWFRFTlNJT04KKyNpZmRlZiBIQVZFX1JFR0lTVEVSX1BSSU5URl9TUEVDSUZJRVIKKyAgcmVnaXN0ZXJfcHJpbnRmX3NwZWNpZmllciAoR1NUX1BUUl9GT1JNQVRbMF0sIF9nc3RfaW5mb19wcmludGZfZXh0ZW5zaW9uX3B0ciwKKyAgICAgIF9nc3RfaW5mb19wcmludGZfZXh0ZW5zaW9uX2FyZ2luZm8pOworICByZWdpc3Rlcl9wcmludGZfc3BlY2lmaWVyIChHU1RfU0VHTUVOVF9GT1JNQVRbMF0sCisgICAgICBfZ3N0X2luZm9fcHJpbnRmX2V4dGVuc2lvbl9zZWdtZW50LCBfZ3N0X2luZm9fcHJpbnRmX2V4dGVuc2lvbl9hcmdpbmZvKTsKKyNlbHNlCisgIHJlZ2lzdGVyX3ByaW50Zl9mdW5jdGlvbiAoR1NUX1BUUl9GT1JNQVRbMF0sIF9nc3RfaW5mb19wcmludGZfZXh0ZW5zaW9uX3B0ciwKKyAgICAgIF9nc3RfaW5mb19wcmludGZfZXh0ZW5zaW9uX2FyZ2luZm8pOworICByZWdpc3Rlcl9wcmludGZfZnVuY3Rpb24gKEdTVF9TRUdNRU5UX0ZPUk1BVFswXSwKKyAgICAgIF9nc3RfaW5mb19wcmludGZfZXh0ZW5zaW9uX3NlZ21lbnQsIF9nc3RfaW5mb19wcmludGZfZXh0ZW5zaW9uX2FyZ2luZm8pOworI2VuZGlmCisjZW5kaWYKKworICAvKiBkbyBOT1QgdXNlIGEgc2luZ2xlIGRlYnVnIGZ1bmN0aW9uIGJlZm9yZSB0aGlzIGxpbmUgaGFzIGJlZW4gcnVuICovCisgIEdTVF9DQVRfREVGQVVMVCA9IF9nc3RfZGVidWdfY2F0ZWdvcnlfbmV3ICgiZGVmYXVsdCIsCisgICAgICBHU1RfREVCVUdfVU5ERVJMSU5FLCBOVUxMKTsKKyAgX0dTVF9DQVRfREVCVUcgPSBfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldyAoIkdTVF9ERUJVRyIsCisgICAgICBHU1RfREVCVUdfQk9MRCB8IEdTVF9ERUJVR19GR19ZRUxMT1csICJkZWJ1Z2dpbmcgc3Vic3lzdGVtIik7CisKKyAgZ3N0X2RlYnVnX2FkZF9sb2dfZnVuY3Rpb24gKGdzdF9kZWJ1Z19sb2dfZGVmYXVsdCwgTlVMTCk7CisKKyAgLyogRklYTUU6IGFkZCBkZXNjcmlwdGlvbnMgaGVyZSAqLworICBHU1RfQ0FUX0dTVF9JTklUID0gX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcgKCJHU1RfSU5JVCIsCisgICAgICBHU1RfREVCVUdfQk9MRCB8IEdTVF9ERUJVR19GR19SRUQsIE5VTEwpOworICBHU1RfQ0FUX0FVVE9QTFVHID0gX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcgKCJHU1RfQVVUT1BMVUciLAorICAgICAgR1NUX0RFQlVHX0JPTEQgfCBHU1RfREVCVUdfRkdfQkxVRSwgTlVMTCk7CisgIEdTVF9DQVRfQVVUT1BMVUdfQVRURU1QVCA9IF9nc3RfZGVidWdfY2F0ZWdvcnlfbmV3ICgiR1NUX0FVVE9QTFVHX0FUVEVNUFQiLAorICAgICAgR1NUX0RFQlVHX0JPTEQgfCBHU1RfREVCVUdfRkdfQ1lBTiB8IEdTVF9ERUJVR19CR19CTFVFLCBOVUxMKTsKKyAgR1NUX0NBVF9QQVJFTlRBR0UgPSBfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldyAoIkdTVF9QQVJFTlRBR0UiLAorICAgICAgR1NUX0RFQlVHX0JPTEQgfCBHU1RfREVCVUdfRkdfV0hJVEUgfCBHU1RfREVCVUdfQkdfUkVELCBOVUxMKTsKKyAgR1NUX0NBVF9TVEFURVMgPSBfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldyAoIkdTVF9TVEFURVMiLAorICAgICAgR1NUX0RFQlVHX0JPTEQgfCBHU1RfREVCVUdfRkdfUkVELCBOVUxMKTsKKyAgR1NUX0NBVF9TQ0hFRFVMSU5HID0gX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcgKCJHU1RfU0NIRURVTElORyIsCisgICAgICBHU1RfREVCVUdfQk9MRCB8IEdTVF9ERUJVR19GR19NQUdFTlRBLCBOVUxMKTsKKyAgR1NUX0NBVF9CVUZGRVIgPSBfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldyAoIkdTVF9CVUZGRVIiLAorICAgICAgR1NUX0RFQlVHX0JPTEQgfCBHU1RfREVCVUdfQkdfR1JFRU4sIE5VTEwpOworICBHU1RfQ0FUX0JVRkZFUl9MSVNUID0gX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcgKCJHU1RfQlVGRkVSX0xJU1QiLAorICAgICAgR1NUX0RFQlVHX0JPTEQgfCBHU1RfREVCVUdfQkdfR1JFRU4sIE5VTEwpOworICBHU1RfQ0FUX0JVUyA9IF9nc3RfZGVidWdfY2F0ZWdvcnlfbmV3ICgiR1NUX0JVUyIsIEdTVF9ERUJVR19CR19ZRUxMT1csIE5VTEwpOworICBHU1RfQ0FUX0NBUFMgPSBfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldyAoIkdTVF9DQVBTIiwKKyAgICAgIEdTVF9ERUJVR19CT0xEIHwgR1NUX0RFQlVHX0ZHX0JMVUUsIE5VTEwpOworICBHU1RfQ0FUX0NMT0NLID0gX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcgKCJHU1RfQ0xPQ0siLAorICAgICAgR1NUX0RFQlVHX0JPTEQgfCBHU1RfREVCVUdfRkdfWUVMTE9XLCBOVUxMKTsKKyAgR1NUX0NBVF9FTEVNRU5UX1BBRFMgPSBfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldyAoIkdTVF9FTEVNRU5UX1BBRFMiLAorICAgICAgR1NUX0RFQlVHX0JPTEQgfCBHU1RfREVCVUdfRkdfV0hJVEUgfCBHU1RfREVCVUdfQkdfUkVELCBOVUxMKTsKKyAgR1NUX0NBVF9QQURTID0gX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcgKCJHU1RfUEFEUyIsCisgICAgICBHU1RfREVCVUdfQk9MRCB8IEdTVF9ERUJVR19GR19SRUQgfCBHU1RfREVCVUdfQkdfUkVELCBOVUxMKTsKKyAgR1NUX0NBVF9QRVJGT1JNQU5DRSA9IF9nc3RfZGVidWdfY2F0ZWdvcnlfbmV3ICgiR1NUX1BFUkZPUk1BTkNFIiwKKyAgICAgIEdTVF9ERUJVR19CT0xEIHwgR1NUX0RFQlVHX0ZHX1dISVRFIHwgR1NUX0RFQlVHX0JHX1JFRCwgTlVMTCk7CisgIEdTVF9DQVRfUElQRUxJTkUgPSBfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldyAoIkdTVF9QSVBFTElORSIsCisgICAgICBHU1RfREVCVUdfQk9MRCB8IEdTVF9ERUJVR19GR19XSElURSB8IEdTVF9ERUJVR19CR19SRUQsIE5VTEwpOworICBHU1RfQ0FUX1BMVUdJTl9MT0FESU5HID0gX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcgKCJHU1RfUExVR0lOX0xPQURJTkciLAorICAgICAgR1NUX0RFQlVHX0JPTEQgfCBHU1RfREVCVUdfRkdfQ1lBTiwgTlVMTCk7CisgIEdTVF9DQVRfUExVR0lOX0lORk8gPSBfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldyAoIkdTVF9QTFVHSU5fSU5GTyIsCisgICAgICBHU1RfREVCVUdfQk9MRCB8IEdTVF9ERUJVR19GR19DWUFOLCBOVUxMKTsKKyAgR1NUX0NBVF9QUk9QRVJUSUVTID0gX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcgKCJHU1RfUFJPUEVSVElFUyIsCisgICAgICBHU1RfREVCVUdfQk9MRCB8IEdTVF9ERUJVR19GR19XSElURSB8IEdTVF9ERUJVR19CR19CTFVFLCBOVUxMKTsKKyAgR1NUX0NBVF9UWVBFUyA9IF9nc3RfZGVidWdfY2F0ZWdvcnlfbmV3ICgiR1NUX1RZUEVTIiwKKyAgICAgIEdTVF9ERUJVR19CT0xEIHwgR1NUX0RFQlVHX0ZHX1dISVRFIHwgR1NUX0RFQlVHX0JHX1JFRCwgTlVMTCk7CisgIEdTVF9DQVRfTkVHT1RJQVRJT04gPSBfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldyAoIkdTVF9ORUdPVElBVElPTiIsCisgICAgICBHU1RfREVCVUdfQk9MRCB8IEdTVF9ERUJVR19GR19CTFVFLCBOVUxMKTsKKyAgR1NUX0NBVF9SRUZDT1VOVElORyA9IF9nc3RfZGVidWdfY2F0ZWdvcnlfbmV3ICgiR1NUX1JFRkNPVU5USU5HIiwKKyAgICAgIEdTVF9ERUJVR19CT0xEIHwgR1NUX0RFQlVHX0ZHX1JFRCB8IEdTVF9ERUJVR19CR19CTFVFLCBOVUxMKTsKKyAgR1NUX0NBVF9FUlJPUl9TWVNURU0gPSBfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldyAoIkdTVF9FUlJPUl9TWVNURU0iLAorICAgICAgR1NUX0RFQlVHX0JPTEQgfCBHU1RfREVCVUdfRkdfUkVEIHwgR1NUX0RFQlVHX0JHX1dISVRFLCBOVUxMKTsKKworICBHU1RfQ0FUX0VWRU5UID0gX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcgKCJHU1RfRVZFTlQiLAorICAgICAgR1NUX0RFQlVHX0JPTEQgfCBHU1RfREVCVUdfRkdfQkxVRSwgTlVMTCk7CisgIEdTVF9DQVRfTUVTU0FHRSA9IF9nc3RfZGVidWdfY2F0ZWdvcnlfbmV3ICgiR1NUX01FU1NBR0UiLAorICAgICAgR1NUX0RFQlVHX0JPTEQgfCBHU1RfREVCVUdfRkdfV0hJVEUgfCBHU1RfREVCVUdfQkdfUkVELCBOVUxMKTsKKyAgR1NUX0NBVF9QQVJBTVMgPSBfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldyAoIkdTVF9QQVJBTVMiLAorICAgICAgR1NUX0RFQlVHX0JPTEQgfCBHU1RfREVCVUdfRkdfQkxBQ0sgfCBHU1RfREVCVUdfQkdfWUVMTE9XLCBOVUxMKTsKKyAgR1NUX0NBVF9DQUxMX1RSQUNFID0gX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcgKCJHU1RfQ0FMTF9UUkFDRSIsCisgICAgICBHU1RfREVCVUdfQk9MRCwgTlVMTCk7CisgIEdTVF9DQVRfU0lHTkFMID0gX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcgKCJHU1RfU0lHTkFMIiwKKyAgICAgIEdTVF9ERUJVR19CT0xEIHwgR1NUX0RFQlVHX0ZHX1dISVRFIHwgR1NUX0RFQlVHX0JHX1JFRCwgTlVMTCk7CisgIEdTVF9DQVRfUFJPQkUgPSBfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldyAoIkdTVF9QUk9CRSIsCisgICAgICBHU1RfREVCVUdfQk9MRCB8IEdTVF9ERUJVR19GR19HUkVFTiwgInBhZCBwcm9iZXMiKTsKKyAgR1NUX0NBVF9SRUdJU1RSWSA9IF9nc3RfZGVidWdfY2F0ZWdvcnlfbmV3ICgiR1NUX1JFR0lTVFJZIiwgMCwgInJlZ2lzdHJ5Iik7CisgIEdTVF9DQVRfUU9TID0gX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcgKCJHU1RfUU9TIiwgMCwgIlFvUyIpOworICBfcHJpdl9HU1RfQ0FUX1BPTEwgPSBfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldyAoIkdTVF9QT0xMIiwgMCwgInBvbGwiKTsKKworCisgIC8qIHByaW50IG91dCB0aGUgdmFsZ3JpbmQgbWVzc2FnZSBpZiB3ZSdyZSBpbiB2YWxncmluZCAqLworICBfcHJpdl9nc3RfaW5fdmFsZ3JpbmQgKCk7CisKKyAgZW52ID0gZ19nZXRlbnYgKCJHU1RfREVCVUdfT1BUSU9OUyIpOworICBpZiAoZW52ICE9IE5VTEwpIHsKKyAgICBpZiAoc3Ryc3RyIChlbnYsICJmdWxsX3RhZ3MiKSB8fCBzdHJzdHIgKGVudiwgImZ1bGwtdGFncyIpKQorICAgICAgcHJldHR5X3RhZ3MgPSBGQUxTRTsKKyAgICBlbHNlIGlmIChzdHJzdHIgKGVudiwgInByZXR0eV90YWdzIikgfHwgc3Ryc3RyIChlbnYsICJwcmV0dHktdGFncyIpKQorICAgICAgcHJldHR5X3RhZ3MgPSBUUlVFOworICB9Cit9CisKKy8qIHdlIGNhbid0IGRvIHRoaXMgZnVydGhlciBhYm92ZSwgYmVjYXVzZSB3ZSBpbml0aWFsaXplIHRoZSBHU1RfQ0FUX0RFRkFVTFQgc3RydWN0ICovCisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBfR1NUX0NBVF9ERUJVRworCisvKioKKyAqIGdzdF9kZWJ1Z19sb2c6CisgKiBAY2F0ZWdvcnk6IGNhdGVnb3J5IHRvIGxvZworICogQGxldmVsOiBsZXZlbCBvZiB0aGUgbWVzc2FnZSBpcyBpbgorICogQGZpbGU6IHRoZSBmaWxlIHRoYXQgZW1pdHRlZCB0aGUgbWVzc2FnZSwgdXN1YWxseSB0aGUgX19GSUxFX18gaWRlbnRpZmllcgorICogQGZ1bmN0aW9uOiB0aGUgZnVuY3Rpb24gdGhhdCBlbWl0dGVkIHRoZSBtZXNzYWdlCisgKiBAbGluZTogdGhlIGxpbmUgZnJvbSB0aGF0IHRoZSBtZXNzYWdlIHdhcyBlbWl0dGVkLCB1c3VhbGx5IF9fTElORV9fCisgKiBAb2JqZWN0OiAodHJhbnNmZXIgbm9uZSkgKGFsbG93LW5vbmUpOiB0aGUgb2JqZWN0IHRoaXMgbWVzc2FnZSByZWxhdGVzIHRvLAorICogICAgIG9yIE5VTEwgaWYgbm9uZQorICogQGZvcm1hdDogYSBwcmludGYgc3R5bGUgZm9ybWF0IHN0cmluZworICogQC4uLjogb3B0aW9uYWwgYXJndW1lbnRzIGZvciB0aGUgZm9ybWF0CisgKgorICogTG9ncyB0aGUgZ2l2ZW4gbWVzc2FnZSB1c2luZyB0aGUgY3VycmVudGx5IHJlZ2lzdGVyZWQgZGVidWdnaW5nIGhhbmRsZXJzLgorICovCit2b2lkCitnc3RfZGVidWdfbG9nIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnksIEdzdERlYnVnTGV2ZWwgbGV2ZWwsCisgICAgY29uc3QgZ2NoYXIgKiBmaWxlLCBjb25zdCBnY2hhciAqIGZ1bmN0aW9uLCBnaW50IGxpbmUsCisgICAgR09iamVjdCAqIG9iamVjdCwgY29uc3QgZ2NoYXIgKiBmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCB2YXJfYXJnczsKKworICB2YV9zdGFydCAodmFyX2FyZ3MsIGZvcm1hdCk7CisgIGdzdF9kZWJ1Z19sb2dfdmFsaXN0IChjYXRlZ29yeSwgbGV2ZWwsIGZpbGUsIGZ1bmN0aW9uLCBsaW5lLCBvYmplY3QsIGZvcm1hdCwKKyAgICAgIHZhcl9hcmdzKTsKKyAgdmFfZW5kICh2YXJfYXJncyk7Cit9CisKKyNpZmRlZiBfTVNDX1ZFUgorLyogYmFzZWQgb24gZ19iYXNlbmFtZSgpLCB3aGljaCB3ZSBjYW4ndCB1c2UgYmVjYXVzZSBpdCB3YXMgZGVwcmVjYXRlZCAqLworc3RhdGljIGlubGluZSBjb25zdCBnY2hhciAqCitnc3RfcGF0aF9iYXNlbmFtZSAoY29uc3QgZ2NoYXIgKiBmaWxlX25hbWUpCit7CisgIHJlZ2lzdGVyIGNvbnN0IGdjaGFyICpiYXNlOworCisgIGJhc2UgPSBzdHJyY2hyIChmaWxlX25hbWUsIEdfRElSX1NFUEFSQVRPUik7CisKKyAgeworICAgIGNvbnN0IGdjaGFyICpxID0gc3RycmNociAoZmlsZV9uYW1lLCAnLycpOworICAgIGlmIChiYXNlID09IE5VTEwgfHwgKHEgIT0gTlVMTCAmJiBxID4gYmFzZSkpCisgICAgICBiYXNlID0gcTsKKyAgfQorCisgIGlmIChiYXNlKQorICAgIHJldHVybiBiYXNlICsgMTsKKworICBpZiAoZ19hc2NpaV9pc2FscGhhIChmaWxlX25hbWVbMF0pICYmIGZpbGVfbmFtZVsxXSA9PSAnOicpCisgICAgcmV0dXJuIGZpbGVfbmFtZSArIDI7CisKKyAgcmV0dXJuIGZpbGVfbmFtZTsKK30KKyNlbmRpZgorCisvKioKKyAqIGdzdF9kZWJ1Z19sb2dfdmFsaXN0OgorICogQGNhdGVnb3J5OiBjYXRlZ29yeSB0byBsb2cKKyAqIEBsZXZlbDogbGV2ZWwgb2YgdGhlIG1lc3NhZ2UgaXMgaW4KKyAqIEBmaWxlOiB0aGUgZmlsZSB0aGF0IGVtaXR0ZWQgdGhlIG1lc3NhZ2UsIHVzdWFsbHkgdGhlIF9fRklMRV9fIGlkZW50aWZpZXIKKyAqIEBmdW5jdGlvbjogdGhlIGZ1bmN0aW9uIHRoYXQgZW1pdHRlZCB0aGUgbWVzc2FnZQorICogQGxpbmU6IHRoZSBsaW5lIGZyb20gdGhhdCB0aGUgbWVzc2FnZSB3YXMgZW1pdHRlZCwgdXN1YWxseSBfX0xJTkVfXworICogQG9iamVjdDogKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25lKTogdGhlIG9iamVjdCB0aGlzIG1lc3NhZ2UgcmVsYXRlcyB0bywKKyAqICAgICBvciBOVUxMIGlmIG5vbmUKKyAqIEBmb3JtYXQ6IGEgcHJpbnRmIHN0eWxlIGZvcm1hdCBzdHJpbmcKKyAqIEBhcmdzOiBvcHRpb25hbCBhcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQKKyAqCisgKiBMb2dzIHRoZSBnaXZlbiBtZXNzYWdlIHVzaW5nIHRoZSBjdXJyZW50bHkgcmVnaXN0ZXJlZCBkZWJ1Z2dpbmcgaGFuZGxlcnMuCisgKi8KK3ZvaWQKK2dzdF9kZWJ1Z19sb2dfdmFsaXN0IChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnksIEdzdERlYnVnTGV2ZWwgbGV2ZWwsCisgICAgY29uc3QgZ2NoYXIgKiBmaWxlLCBjb25zdCBnY2hhciAqIGZ1bmN0aW9uLCBnaW50IGxpbmUsCisgICAgR09iamVjdCAqIG9iamVjdCwgY29uc3QgZ2NoYXIgKiBmb3JtYXQsIHZhX2xpc3QgYXJncykKK3sKKyAgR3N0RGVidWdNZXNzYWdlIG1lc3NhZ2U7CisgIExvZ0Z1bmNFbnRyeSAqZW50cnk7CisgIEdTTGlzdCAqaGFuZGxlcjsKKworICBnX3JldHVybl9pZl9mYWlsIChjYXRlZ29yeSAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoZmlsZSAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoZnVuY3Rpb24gIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKGZvcm1hdCAhPSBOVUxMKTsKKworICAvKiBUaGUgcHJlZGVmaW5lZCBtYWNybyBfX0ZJTEVfXyBpcyBhbHdheXMgdGhlIGV4YWN0IHBhdGggZ2l2ZW4gdG8gdGhlCisgICAqIGNvbXBpbGVyIHdpdGggTVNWQywgd2hpY2ggbWF5IG9yIG1heSBub3QgYmUgdGhlIGJhc2VuYW1lLiAgV2Ugd29yaworICAgKiBhcm91bmQgaXQgYXQgcnVudGltZSB0byBpbXByb3ZlIHRoZSByZWFkYWJpbGl0eS4gKi8KKyNpZmRlZiBfTVNDX1ZFUgorICBmaWxlID0gZ3N0X3BhdGhfYmFzZW5hbWUgKGZpbGUpOworI2VuZGlmCisKKyAgbWVzc2FnZS5tZXNzYWdlID0gTlVMTDsKKyAgbWVzc2FnZS5mb3JtYXQgPSBmb3JtYXQ7CisgIEdfVkFfQ09QWSAobWVzc2FnZS5hcmd1bWVudHMsIGFyZ3MpOworCisgIGhhbmRsZXIgPSBfX2xvZ19mdW5jdGlvbnM7CisgIHdoaWxlIChoYW5kbGVyKSB7CisgICAgZW50cnkgPSBoYW5kbGVyLT5kYXRhOworICAgIGhhbmRsZXIgPSBnX3NsaXN0X25leHQgKGhhbmRsZXIpOworICAgIGVudHJ5LT5mdW5jIChjYXRlZ29yeSwgbGV2ZWwsIGZpbGUsIGZ1bmN0aW9uLCBsaW5lLCBvYmplY3QsICZtZXNzYWdlLAorICAgICAgICBlbnRyeS0+dXNlcl9kYXRhKTsKKyAgfQorICBnX2ZyZWUgKG1lc3NhZ2UubWVzc2FnZSk7CisgIHZhX2VuZCAobWVzc2FnZS5hcmd1bWVudHMpOworfQorCisvKioKKyAqIGdzdF9kZWJ1Z19tZXNzYWdlX2dldDoKKyAqIEBtZXNzYWdlOiBhIGRlYnVnIG1lc3NhZ2UKKyAqCisgKiBHZXRzIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSAjR3N0RGVidWdNZXNzYWdlLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQKKyAqIGluIGRlYnVnIGhhbmRsZXJzIHRvIGV4dHJhY3QgdGhlIG1lc3NhZ2UuCisgKgorICogUmV0dXJuczogdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhICNHc3REZWJ1Z01lc3NhZ2UuCisgKi8KK2NvbnN0IGdjaGFyICoKK2dzdF9kZWJ1Z19tZXNzYWdlX2dldCAoR3N0RGVidWdNZXNzYWdlICogbWVzc2FnZSkKK3sKKyAgaWYgKG1lc3NhZ2UtPm1lc3NhZ2UgPT0gTlVMTCkgeworICAgIG1lc3NhZ2UtPm1lc3NhZ2UgPSBnX3N0cmR1cF92cHJpbnRmIChtZXNzYWdlLT5mb3JtYXQsIG1lc3NhZ2UtPmFyZ3VtZW50cyk7CisgIH0KKyAgcmV0dXJuIG1lc3NhZ2UtPm1lc3NhZ2U7Cit9CisKKyNkZWZpbmUgTUFYX0JVRkZFUl9EVU1QX1NUUklOR19MRU4gIDEwMAorCisvKiBzdHJ1Y3R1cmVfdG9fcHJldHR5X3N0cmluZzoKKyAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQorICoKKyAqIENvbnZlcnRzIEBzdHJ1Y3R1cmUgdG8gYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgcmVwcmVzZW50YXRpb24uIEJhc2ljYWxseQorICogdGhlIHNhbWUgYXMgZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcoKSwgYnV0IGlmIHRoZSBzdHJ1Y3R1cmUgY29udGFpbnMgbGFyZ2UKKyAqIGJ1ZmZlcnMgc3VjaCBhcyBpbWFnZXMgdGhlIGhleCByZXByZXNlbnRhdGlvbiBvZiB0aG9zZSBidWZmZXJzIHdpbGwgYmUKKyAqIHNob3J0ZW5lZCBzbyB0aGF0IHRoZSBzdHJpbmcgcmVtYWlucyByZWFkYWJsZS4KKyAqCisgKiBSZXR1cm5zOiBhIG5ld2x5LWFsbG9jYXRlZCBzdHJpbmcuIGdfZnJlZSgpIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC4KKyAqLworc3RhdGljIGdjaGFyICoKK3N0cnVjdHVyZV90b19wcmV0dHlfc3RyaW5nIChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzKQoreworICBnY2hhciAqc3RyLCAqcG9zLCAqZW5kOworCisgIHN0ciA9IGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChzKTsKKyAgaWYgKHN0ciA9PSBOVUxMKQorICAgIHJldHVybiBOVUxMOworCisgIHBvcyA9IHN0cjsKKyAgd2hpbGUgKChwb3MgPSBzdHJzdHIgKHBvcywgIihidWZmZXIpIikpKSB7CisgICAgZ3VpbnQgY291bnQgPSAwOworCisgICAgcG9zICs9IHN0cmxlbiAoIihidWZmZXIpIik7CisgICAgZm9yIChlbmQgPSBwb3M7ICplbmQgIT0gJ1wwJyAmJiAqZW5kICE9ICc7JyAmJiAqZW5kICE9ICcgJzsgKytlbmQpCisgICAgICArK2NvdW50OworICAgIGlmIChjb3VudCA+IE1BWF9CVUZGRVJfRFVNUF9TVFJJTkdfTEVOKSB7CisgICAgICBtZW1jcHkgKHBvcyArIE1BWF9CVUZGRVJfRFVNUF9TVFJJTkdfTEVOIC0gNiwgIi4uIiwgMik7CisgICAgICBtZW1jcHkgKHBvcyArIE1BWF9CVUZGRVJfRFVNUF9TVFJJTkdfTEVOIC0gNCwgcG9zICsgY291bnQgLSA0LCA0KTsKKyAgICAgIGdfbWVtbW92ZSAocG9zICsgTUFYX0JVRkZFUl9EVU1QX1NUUklOR19MRU4sIHBvcyArIGNvdW50LAorICAgICAgICAgIHN0cmxlbiAocG9zICsgY291bnQpICsgMSk7CisgICAgICBwb3MgKz0gTUFYX0JVRkZFUl9EVU1QX1NUUklOR19MRU47CisgICAgfQorICB9CisKKyAgcmV0dXJuIHN0cjsKK30KKworc3RhdGljIGlubGluZSBnY2hhciAqCitnc3RfaW5mb19zdHJ1Y3R1cmVfdG9fc3RyaW5nIChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzKQoreworICBpZiAoR19VTkxJS0VMWSAocHJldHR5X3RhZ3MgJiYgcy0+bmFtZSA9PSBHU1RfUVVBUksgKFRBR0xJU1QpKSkKKyAgICByZXR1cm4gc3RydWN0dXJlX3RvX3ByZXR0eV9zdHJpbmcgKHMpOworICBlbHNlCisgICAgcmV0dXJuIGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChzKTsKK30KKworc3RhdGljIGdjaGFyICoKK2dzdF9kZWJ1Z19wcmludF9vYmplY3QgKGdwb2ludGVyIHB0cikKK3sKKyAgR09iamVjdCAqb2JqZWN0ID0gKEdPYmplY3QgKikgcHRyOworCisjaWZkZWYgdW51c2VkCisgIC8qIFRoaXMgaXMgYSBjdXRlIHRyaWNrIHRvIGRldGVjdCB1bm1hcHBlZCBtZW1vcnksIGJ1dCBpcyB1bnBvcnRhYmxlLAorICAgKiBzbG93LCBzY3Jld3MgYXJvdW5kIHdpdGggbWFkdmlzZSwgYW5kIG5vdCBhY3R1YWxseSB0aGF0IHVzZWZ1bC4gKi8KKyAgeworICAgIGludCByZXQ7CisKKyAgICByZXQgPSBtYWR2aXNlICgodm9pZCAqKSAoKHVuc2lnbmVkIGxvbmcpIHB0ciAmICh+MHhmZmYpKSwgNDA5NiwgMCk7CisgICAgaWYgKHJldCA9PSAtMSAmJiBlcnJubyA9PSBFTk9NRU0pIHsKKyAgICAgIGJ1ZmZlciA9IGdfc3RyZHVwX3ByaW50ZiAoIiVwICh1bm1hcHBlZCBtZW1vcnkpIiwgcHRyKTsKKyAgICB9CisgIH0KKyNlbmRpZgorCisgIC8qIG5pY2VseSBwcmludGVkIG9iamVjdCAqLworICBpZiAob2JqZWN0ID09IE5VTEwpIHsKKyAgICByZXR1cm4gZ19zdHJkdXAgKCIoTlVMTCkiKTsKKyAgfQorICBpZiAoKihHVHlwZSAqKSBwdHIgPT0gR1NUX1RZUEVfQ0FQUykgeworICAgIHJldHVybiBnc3RfY2Fwc190b19zdHJpbmcgKChjb25zdCBHc3RDYXBzICopIHB0cik7CisgIH0KKyAgaWYgKCooR1R5cGUgKikgcHRyID09IEdTVF9UWVBFX1NUUlVDVFVSRSkgeworICAgIHJldHVybiBnc3RfaW5mb19zdHJ1Y3R1cmVfdG9fc3RyaW5nICgoY29uc3QgR3N0U3RydWN0dXJlICopIHB0cik7CisgIH0KKyNpZmRlZiBVU0VfUE9JU09OSU5HCisgIGlmICgqKGd1aW50MzIgKikgcHRyID09IDB4ZmZmZmZmZmYpIHsKKyAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgiPHBvaXNvbmVkQCVwPiIsIHB0cik7CisgIH0KKyNlbmRpZgorICBpZiAoR1NUX0lTX1BBRCAob2JqZWN0KSAmJiBHU1RfT0JKRUNUX05BTUUgKG9iamVjdCkpIHsKKyAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgiPCVzOiVzPiIsIEdTVF9ERUJVR19QQURfTkFNRSAob2JqZWN0KSk7CisgIH0KKyAgaWYgKEdTVF9JU19PQkpFQ1QgKG9iamVjdCkgJiYgR1NUX09CSkVDVF9OQU1FIChvYmplY3QpKSB7CisgICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoIjwlcz4iLCBHU1RfT0JKRUNUX05BTUUgKG9iamVjdCkpOworICB9CisgIGlmIChHX0lTX09CSkVDVCAob2JqZWN0KSkgeworICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCI8JXNAJXA+IiwgR19PQkpFQ1RfVFlQRV9OQU1FIChvYmplY3QpLCBvYmplY3QpOworICB9CisgIGlmIChHU1RfSVNfTUVTU0FHRSAob2JqZWN0KSkgeworICAgIEdzdE1lc3NhZ2UgKm1zZyA9IEdTVF9NRVNTQUdFX0NBU1QgKG9iamVjdCk7CisgICAgZ2NoYXIgKnMsICpyZXQ7CisgICAgY29uc3QgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgICBzdHJ1Y3R1cmUgPSBnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlIChtc2cpOworCisgICAgaWYgKHN0cnVjdHVyZSkgeworICAgICAgcyA9IGdzdF9pbmZvX3N0cnVjdHVyZV90b19zdHJpbmcgKHN0cnVjdHVyZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHMgPSBnX3N0cmR1cCAoIihOVUxMKSIpOworICAgIH0KKworICAgIHJldCA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzIG1lc3NhZ2UgZnJvbSBlbGVtZW50ICclcyc6ICVzIiwKKyAgICAgICAgR1NUX01FU1NBR0VfVFlQRV9OQU1FIChtc2cpLCAobXNnLT5zcmMgIT0gTlVMTCkgPworICAgICAgICBHU1RfRUxFTUVOVF9OQU1FIChtc2ctPnNyYykgOiAiKE5VTEwpIiwgcyk7CisgICAgZ19mcmVlIChzKTsKKyAgICByZXR1cm4gcmV0OworICB9CisgIGlmIChHU1RfSVNfUVVFUlkgKG9iamVjdCkpIHsKKyAgICBHc3RRdWVyeSAqcXVlcnkgPSBHU1RfUVVFUllfQ0FTVCAob2JqZWN0KTsKKyAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICAgIHN0cnVjdHVyZSA9IGdzdF9xdWVyeV9nZXRfc3RydWN0dXJlIChxdWVyeSk7CisKKyAgICBpZiAoc3RydWN0dXJlKSB7CisgICAgICByZXR1cm4gZ3N0X2luZm9fc3RydWN0dXJlX3RvX3N0cmluZyAoc3RydWN0dXJlKTsKKyAgICB9IGVsc2UgeworICAgICAgY29uc3QgZ2NoYXIgKnF1ZXJ5X3R5cGVfbmFtZTsKKworICAgICAgcXVlcnlfdHlwZV9uYW1lID0gZ3N0X3F1ZXJ5X3R5cGVfZ2V0X25hbWUgKHF1ZXJ5LT50eXBlKTsKKyAgICAgIGlmIChHX0xJS0VMWSAocXVlcnlfdHlwZV9uYW1lICE9IE5VTEwpKSB7CisgICAgICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCIlcyBxdWVyeSIsIHF1ZXJ5X3R5cGVfbmFtZSk7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgicXVlcnkgb2YgdW5rbm93biB0eXBlICVkIiwgcXVlcnktPnR5cGUpOworICAgICAgfQorICAgIH0KKyAgfQorICBpZiAoR1NUX0lTX0VWRU5UIChvYmplY3QpKSB7CisgICAgR3N0RXZlbnQgKmV2ZW50ID0gR1NUX0VWRU5UX0NBU1QgKG9iamVjdCk7CisgICAgZ2NoYXIgKnMsICpyZXQ7CisgICAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgICBzdHJ1Y3R1cmUgPSAoR3N0U3RydWN0dXJlICopIGdzdF9ldmVudF9nZXRfc3RydWN0dXJlIChldmVudCk7CisgICAgaWYgKHN0cnVjdHVyZSkgeworICAgICAgcyA9IGdzdF9pbmZvX3N0cnVjdHVyZV90b19zdHJpbmcgKHN0cnVjdHVyZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHMgPSBnX3N0cmR1cCAoIihOVUxMKSIpOworICAgIH0KKworICAgIHJldCA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzIGV2ZW50IGF0IHRpbWUgJSIKKyAgICAgICAgR1NUX1RJTUVfRk9STUFUICI6ICVzIiwKKyAgICAgICAgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpLCBHU1RfVElNRV9BUkdTIChldmVudC0+dGltZXN0YW1wKSwgcyk7CisgICAgZ19mcmVlIChzKTsKKyAgICByZXR1cm4gcmV0OworICB9CisKKyAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoIiVwIiwgcHRyKTsKK30KKworI2lmZGVmIEhBVkVfUFJJTlRGX0VYVEVOU0lPTgorCitzdGF0aWMgZ2NoYXIgKgorZ3N0X2RlYnVnX3ByaW50X3NlZ21lbnQgKGdwb2ludGVyIHB0cikKK3sKKyAgR3N0U2VnbWVudCAqc2VnbWVudCA9IChHc3RTZWdtZW50ICopIHB0cjsKKworICAvKiBuaWNlbHkgcHJpbnRlZCBzZWdtZW50ICovCisgIGlmIChzZWdtZW50ID09IE5VTEwpIHsKKyAgICByZXR1cm4gZ19zdHJkdXAgKCIoTlVMTCkiKTsKKyAgfQorCisgIHN3aXRjaCAoc2VnbWVudC0+Zm9ybWF0KSB7CisgICAgY2FzZSBHU1RfRk9STUFUX1VOREVGSU5FRDp7CisgICAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgiVU5ERUZJTkVEIHNlZ21lbnQiKTsKKyAgICB9CisgICAgY2FzZSBHU1RfRk9STUFUX1RJTUU6eworICAgICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoInRpbWUgc2VnbWVudCBzdGFydD0lIiBHU1RfVElNRV9GT1JNQVQKKyAgICAgICAgICAiLCBzdG9wPSUiIEdTVF9USU1FX0ZPUk1BVCAiLCByYXRlPSVmLCBhcHBsaWVkX3JhdGU9JWYiCisgICAgICAgICAgIiwgZmxhZ3M9MHglMDJ4LCB0aW1lPSUiIEdTVF9USU1FX0ZPUk1BVCAiLCBiYXNlPSUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgICAgICBHU1RfVElNRV9BUkdTIChzZWdtZW50LT5zdGFydCksIEdTVF9USU1FX0FSR1MgKHNlZ21lbnQtPnN0b3ApLAorICAgICAgICAgIHNlZ21lbnQtPnJhdGUsIHNlZ21lbnQtPmFwcGxpZWRfcmF0ZSwgKGd1aW50KSBzZWdtZW50LT5mbGFncywKKyAgICAgICAgICBHU1RfVElNRV9BUkdTIChzZWdtZW50LT50aW1lKSwgR1NUX1RJTUVfQVJHUyAoc2VnbWVudC0+YmFzZSkpOworICAgIH0KKyAgICBkZWZhdWx0OnsKKyAgICAgIGNvbnN0IGdjaGFyICpmb3JtYXRfbmFtZTsKKworICAgICAgZm9ybWF0X25hbWUgPSBnc3RfZm9ybWF0X2dldF9uYW1lIChzZWdtZW50LT5mb3JtYXQpOworICAgICAgaWYgKEdfVU5MSUtFTFkgKGZvcm1hdF9uYW1lID09IE5VTEwpKQorICAgICAgICBmb3JtYXRfbmFtZSA9ICIoVU5LTk9XTiBGT1JNQVQpIjsKKyAgICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCIlcyBzZWdtZW50IHN0YXJ0PSUiIEdfR0lOVDY0X0ZPUk1BVAorICAgICAgICAgICIsIHN0b3A9JSIgR19HSU5UNjRfRk9STUFUICIsIHJhdGU9JWYsIGFwcGxpZWRfcmF0ZT0lZiIKKyAgICAgICAgICAiLCBmbGFncz0weCUwMngsIHRpbWU9JSIgR1NUX1RJTUVfRk9STUFUICIsIGJhc2U9JSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgICAgIGZvcm1hdF9uYW1lLCBzZWdtZW50LT5zdGFydCwgc2VnbWVudC0+c3RvcCwgc2VnbWVudC0+cmF0ZSwKKyAgICAgICAgICBzZWdtZW50LT5hcHBsaWVkX3JhdGUsIChndWludCkgc2VnbWVudC0+ZmxhZ3MsCisgICAgICAgICAgR1NUX1RJTUVfQVJHUyAoc2VnbWVudC0+dGltZSksIEdTVF9USU1FX0FSR1MgKHNlZ21lbnQtPmJhc2UpKTsKKyAgICB9CisgIH0KK30KKworI2VuZGlmIC8qIEhBVkVfUFJJTlRGX0VYVEVOU0lPTiAqLworCisvKioKKyAqIGdzdF9kZWJ1Z19jb25zdHJ1Y3RfdGVybV9jb2xvcjoKKyAqIEBjb2xvcmluZm86IHRoZSBjb2xvciBpbmZvCisgKgorICogQ29uc3RydWN0cyBhIHN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIGZvciBnZXR0aW5nIHRoZSBkZXNpcmVkIGNvbG9yIGluIGNvbG9yCisgKiB0ZXJtaW5hbHMuCisgKiBZb3UgbmVlZCB0byBmcmVlIHRoZSBzdHJpbmcgYWZ0ZXIgdXNlLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAodHlwZSBnY2hhciopOiBhIHN0cmluZyBjb250YWluaW5nIHRoZSBjb2xvcgorICogICAgIGRlZmluaXRpb24KKyAqLworZ2NoYXIgKgorZ3N0X2RlYnVnX2NvbnN0cnVjdF90ZXJtX2NvbG9yIChndWludCBjb2xvcmluZm8pCit7CisgIEdTdHJpbmcgKmNvbG9yOworCisgIGNvbG9yID0gZ19zdHJpbmdfbmV3ICgiXDAzM1swMCIpOworCisgIGlmIChjb2xvcmluZm8gJiBHU1RfREVCVUdfQk9MRCkgeworICAgIGdfc3RyaW5nX2FwcGVuZF9sZW4gKGNvbG9yLCAiOzAxIiwgMyk7CisgIH0KKyAgaWYgKGNvbG9yaW5mbyAmIEdTVF9ERUJVR19VTkRFUkxJTkUpIHsKKyAgICBnX3N0cmluZ19hcHBlbmRfbGVuIChjb2xvciwgIjswNCIsIDMpOworICB9CisgIGlmIChjb2xvcmluZm8gJiBHU1RfREVCVUdfRkdfTUFTSykgeworICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKGNvbG9yLCAiOzMlMWQiLCBjb2xvcmluZm8gJiBHU1RfREVCVUdfRkdfTUFTSyk7CisgIH0KKyAgaWYgKGNvbG9yaW5mbyAmIEdTVF9ERUJVR19CR19NQVNLKSB7CisgICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAoY29sb3IsICI7NCUxZCIsCisgICAgICAgIChjb2xvcmluZm8gJiBHU1RfREVCVUdfQkdfTUFTSykgPj4gNCk7CisgIH0KKyAgZ19zdHJpbmdfYXBwZW5kX2MgKGNvbG9yLCAnbScpOworCisgIHJldHVybiBnX3N0cmluZ19mcmVlIChjb2xvciwgRkFMU0UpOworfQorCisvKioKKyAqIGdzdF9kZWJ1Z19jb25zdHJ1Y3Rfd2luX2NvbG9yOgorICogQGNvbG9yaW5mbzogdGhlIGNvbG9yIGluZm8KKyAqCisgKiBDb25zdHJ1Y3RzIGFuIGludGVnZXIgdGhhdCBjYW4gYmUgdXNlZCBmb3IgZ2V0dGluZyB0aGUgZGVzaXJlZCBjb2xvciBpbgorICogd2luZG93cycgdGVybWluYWxzIChjbWQuZXhlKS4gQXMgdGhlcmUgaXMgbm8gbWVhbiB0byB1bmRlcmxpbmUsIHdlIHNpbXBseQorICogaWdub3JlIHRoaXMgYXR0cmlidXRlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIG9uIG5vbi13aW5kb3dzIG1hY2hpbmVzLgorICoKKyAqIFJldHVybnM6IGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgY29sb3IgZGVmaW5pdGlvbgorICoKKyAqIFNpbmNlOiAwLjEwLjIzCisgKi8KK2dpbnQKK2dzdF9kZWJ1Z19jb25zdHJ1Y3Rfd2luX2NvbG9yIChndWludCBjb2xvcmluZm8pCit7CisgIGdpbnQgY29sb3IgPSAwOworI2lmZGVmIEdfT1NfV0lOMzIKKyAgc3RhdGljIGNvbnN0IGd1Y2hhciBhbnNpX3RvX3dpbl9mZ1s4XSA9IHsKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYmxhY2sgICAqLworICAgIEZPUkVHUk9VTkRfUkVELCAgICAgICAgICAgICAvKiByZWQgICAgICovCisgICAgRk9SRUdST1VORF9HUkVFTiwgICAgICAgICAgIC8qIGdyZWVuICAgKi8KKyAgICBGT1JFR1JPVU5EX1JFRCB8IEZPUkVHUk9VTkRfR1JFRU4sICAvKiB5ZWxsb3cgICovCisgICAgRk9SRUdST1VORF9CTFVFLCAgICAgICAgICAgIC8qIGJsdWUgICAgKi8KKyAgICBGT1JFR1JPVU5EX1JFRCB8IEZPUkVHUk9VTkRfQkxVRSwgICAvKiBtYWdlbnRhICovCisgICAgRk9SRUdST1VORF9HUkVFTiB8IEZPUkVHUk9VTkRfQkxVRSwgLyogY3lhbiAgICAqLworICAgIEZPUkVHUk9VTkRfUkVEIHwgRk9SRUdST1VORF9HUkVFTiB8IEZPUkVHUk9VTkRfQkxVRSAvKiB3aGl0ZSAgICovCisgIH07CisgIHN0YXRpYyBjb25zdCBndWNoYXIgYW5zaV90b193aW5fYmdbOF0gPSB7CisgICAgMCwKKyAgICBCQUNLR1JPVU5EX1JFRCwKKyAgICBCQUNLR1JPVU5EX0dSRUVOLAorICAgIEJBQ0tHUk9VTkRfUkVEIHwgQkFDS0dST1VORF9HUkVFTiwKKyAgICBCQUNLR1JPVU5EX0JMVUUsCisgICAgQkFDS0dST1VORF9SRUQgfCBCQUNLR1JPVU5EX0JMVUUsCisgICAgQkFDS0dST1VORF9HUkVFTiB8IEZPUkVHUk9VTkRfQkxVRSwKKyAgICBCQUNLR1JPVU5EX1JFRCB8IEJBQ0tHUk9VTkRfR1JFRU4gfCBCQUNLR1JPVU5EX0JMVUUKKyAgfTsKKworICAvKiB3ZSBkcmF3IGJsYWNrIGFzIHdoaXRlLCBhcyBjbWQuZXhlIGNhbiBvbmx5IGhhdmUgYmxhY2sgYmcgKi8KKyAgaWYgKGNvbG9yaW5mbyA9PSAwKSB7CisgICAgcmV0dXJuIGFuc2lfdG9fd2luX2ZnWzddOworICB9CisKKyAgaWYgKGNvbG9yaW5mbyAmIEdTVF9ERUJVR19CT0xEKSB7CisgICAgY29sb3IgfD0gRk9SRUdST1VORF9JTlRFTlNJVFk7CisgIH0KKyAgaWYgKGNvbG9yaW5mbyAmIEdTVF9ERUJVR19GR19NQVNLKSB7CisgICAgY29sb3IgfD0gYW5zaV90b193aW5fZmdbY29sb3JpbmZvICYgR1NUX0RFQlVHX0ZHX01BU0tdOworICB9CisgIGlmIChjb2xvcmluZm8gJiBHU1RfREVCVUdfQkdfTUFTSykgeworICAgIGNvbG9yIHw9IGFuc2lfdG9fd2luX2JnWyhjb2xvcmluZm8gJiBHU1RfREVCVUdfQkdfTUFTSykgPj4gNF07CisgIH0KKyNlbmRpZgorICByZXR1cm4gY29sb3I7Cit9CisKKy8qIHdpZHRoIG9mICVwIHZhcmllcyBkZXBlbmRpbmcgb24gYWN0dWFsIHZhbHVlIG9mIHBvaW50ZXIsIHdoaWNoIGNhbiBtYWtlCisgKiBvdXRwdXQgdW5ldmVubHkgYWxpZ25lZCBpZiBtdWx0aXBsZSB0aHJlYWRzIGFyZSBpbnZvbHZlZCwgaGVuY2UgdGhlICUxNHAKKyAqIChzaG91bGQgcmVhbGx5IGJlICUxOHAsIGJ1dCAlMTRwIHNlZW1zIGEgZ29vZCBjb21wcm9taXNlIGJldHdlZW4gdG9vIG1hbnkKKyAqIHdoaXRlIHNwYWNlcyBhbmQgbGlrZWx5IHVuYWxpZ25tZW50IG9uIG15IHN5c3RlbSkgKi8KKyNpZiBkZWZpbmVkIChHTElCX1NJWkVPRl9WT0lEX1ApICYmIEdMSUJfU0laRU9GX1ZPSURfUCA9PSA4CisjZGVmaW5lIFBUUl9GTVQgIiUxNHAiCisjZWxzZQorI2RlZmluZSBQVFJfRk1UICIlMTBwIgorI2VuZGlmCisjZGVmaW5lIFBJRF9GTVQgIiU1ZCIKKyNkZWZpbmUgQ0FUX0ZNVCAiJTIwcyAlczolZDolczolcyIKKworI2lmZGVmIEdfT1NfV0lOMzIKK3N0YXRpYyBjb25zdCBndWNoYXIgbGV2ZWxjb2xvcm1hcFtHU1RfTEVWRUxfQ09VTlRdID0geworICAvKiBHU1RfTEVWRUxfTk9ORSAqLworICBGT1JFR1JPVU5EX1JFRCB8IEZPUkVHUk9VTkRfR1JFRU4gfCBGT1JFR1JPVU5EX0JMVUUsCisgIC8qIEdTVF9MRVZFTF9FUlJPUiAqLworICBGT1JFR1JPVU5EX1JFRCB8IEZPUkVHUk9VTkRfSU5URU5TSVRZLAorICAvKiBHU1RfTEVWRUxfV0FSTklORyAqLworICBGT1JFR1JPVU5EX1JFRCB8IEZPUkVHUk9VTkRfR1JFRU4gfCBGT1JFR1JPVU5EX0lOVEVOU0lUWSwKKyAgLyogR1NUX0xFVkVMX0lORk8gKi8KKyAgRk9SRUdST1VORF9HUkVFTiB8IEZPUkVHUk9VTkRfSU5URU5TSVRZLAorICAvKiBHU1RfTEVWRUxfREVCVUcgKi8KKyAgRk9SRUdST1VORF9HUkVFTiB8IEZPUkVHUk9VTkRfQkxVRSwKKyAgLyogR1NUX0xFVkVMX0xPRyAqLworICBGT1JFR1JPVU5EX1JFRCB8IEZPUkVHUk9VTkRfR1JFRU4gfCBGT1JFR1JPVU5EX0JMVUUsCisgIC8qIEdTVF9MRVZFTF9GSVhNRSAqLworICBGT1JFR1JPVU5EX1JFRCB8IEZPUkVHUk9VTkRfR1JFRU4sCisgIC8qIEdTVF9MRVZFTF9UUkFDRSAqLworICBGT1JFR1JPVU5EX1JFRCB8IEZPUkVHUk9VTkRfR1JFRU4gfCBGT1JFR1JPVU5EX0JMVUUsCisgIC8qIHBsYWNlaG9sZGVyIGZvciBsb2cgbGV2ZWwgOCAqLworICAwLAorICAvKiBHU1RfTEVWRUxfTUVNRFVNUCAqLworICBGT1JFR1JPVU5EX1JFRCB8IEZPUkVHUk9VTkRfR1JFRU4gfCBGT1JFR1JPVU5EX0JMVUUKK307CisKK3N0YXRpYyBjb25zdCBndWNoYXIgYXZhaWxhYmxlX2NvbG9yc1tdID0geworICBGT1JFR1JPVU5EX1JFRCwgRk9SRUdST1VORF9HUkVFTiwgRk9SRUdST1VORF9SRUQgfCBGT1JFR1JPVU5EX0dSRUVOLAorICBGT1JFR1JPVU5EX0JMVUUsIEZPUkVHUk9VTkRfUkVEIHwgRk9SRUdST1VORF9CTFVFLAorICBGT1JFR1JPVU5EX0dSRUVOIHwgRk9SRUdST1VORF9CTFVFLAorfTsKKyNlbHNlCitzdGF0aWMgY29uc3QgZ2NoYXIgKmxldmVsY29sb3JtYXBbR1NUX0xFVkVMX0NPVU5UXSA9IHsKKyAgIlwwMzNbMzdtIiwgICAgICAgICAgICAgICAgICAgLyogR1NUX0xFVkVMX05PTkUgKi8KKyAgIlwwMzNbMzE7MDFtIiwgICAgICAgICAgICAgICAgLyogR1NUX0xFVkVMX0VSUk9SICovCisgICJcMDMzWzMzOzAxbSIsICAgICAgICAgICAgICAgIC8qIEdTVF9MRVZFTF9XQVJOSU5HICovCisgICJcMDMzWzMyOzAxbSIsICAgICAgICAgICAgICAgIC8qIEdTVF9MRVZFTF9JTkZPICovCisgICJcMDMzWzM2bSIsICAgICAgICAgICAgICAgICAgIC8qIEdTVF9MRVZFTF9ERUJVRyAqLworICAiXDAzM1szN20iLCAgICAgICAgICAgICAgICAgICAvKiBHU1RfTEVWRUxfTE9HICovCisgICJcMDMzWzMzOzAxbSIsICAgICAgICAgICAgICAgIC8qIEdTVF9MRVZFTF9GSVhNRSAqLworICAiXDAzM1szN20iLCAgICAgICAgICAgICAgICAgICAvKiBHU1RfTEVWRUxfVFJBQ0UgKi8KKyAgIlwwMzNbMzdtIiwgICAgICAgICAgICAgICAgICAgLyogcGxhY2Vob2xkZXIgZm9yIGxvZyBsZXZlbCA4ICovCisgICJcMDMzWzM3bSIgICAgICAgICAgICAgICAgICAgIC8qIEdTVF9MRVZFTF9NRU1EVU1QICovCit9OworI2VuZGlmCisKKy8qKgorICogZ3N0X2RlYnVnX2xvZ19kZWZhdWx0OgorICogQGNhdGVnb3J5OiBjYXRlZ29yeSB0byBsb2cKKyAqIEBsZXZlbDogbGV2ZWwgb2YgdGhlIG1lc3NhZ2UKKyAqIEBmaWxlOiB0aGUgZmlsZSB0aGF0IGVtaXR0ZWQgdGhlIG1lc3NhZ2UsIHVzdWFsbHkgdGhlIF9fRklMRV9fIGlkZW50aWZpZXIKKyAqIEBmdW5jdGlvbjogdGhlIGZ1bmN0aW9uIHRoYXQgZW1pdHRlZCB0aGUgbWVzc2FnZQorICogQGxpbmU6IHRoZSBsaW5lIGZyb20gdGhhdCB0aGUgbWVzc2FnZSB3YXMgZW1pdHRlZCwgdXN1YWxseSBfX0xJTkVfXworICogQG1lc3NhZ2U6IHRoZSBhY3R1YWwgbWVzc2FnZQorICogQG9iamVjdDogKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25lKTogdGhlIG9iamVjdCB0aGlzIG1lc3NhZ2UgcmVsYXRlcyB0bywKKyAqICAgICBvciBOVUxMIGlmIG5vbmUKKyAqIEB1bnVzZWQ6IGFuIHVudXNlZCB2YXJpYWJsZSwgcmVzZXJ2ZWQgZm9yIHNvbWUgdXNlcl9kYXRhLgorICoKKyAqIFRoZSBkZWZhdWx0IGxvZ2dpbmcgaGFuZGxlciB1c2VkIGJ5IEdTdHJlYW1lci4gTG9nZ2luZyBmdW5jdGlvbnMgZ2V0IGNhbGxlZAorICogd2hlbmV2ZXIgYSBtYWNybyBsaWtlIEdTVF9ERUJVRyBvciBzaW1pbGFyIGlzIHVzZWQuIFRoaXMgZnVuY3Rpb24gb3V0cHV0cyB0aGUKKyAqIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaW5mbyB0byBzdGRlcnIgKG9yIHRoZSBsb2cgZmlsZSBzcGVjaWZpZWQgdmlhIHRoZQorICogR1NUX0RFQlVHX0ZJTEUgZW52aXJvbm1lbnQgdmFyaWFibGUpLgorICoKKyAqIFlvdSBjYW4gYWRkIG90aGVyIGhhbmRsZXJzIGJ5IHVzaW5nIGdzdF9kZWJ1Z19hZGRfbG9nX2Z1bmN0aW9uKCkuCisgKiBBbmQgeW91IGNhbiByZW1vdmUgdGhpcyBoYW5kbGVyIGJ5IGNhbGxpbmcKKyAqIGdzdF9kZWJ1Z19yZW1vdmVfbG9nX2Z1bmN0aW9uKGdzdF9kZWJ1Z19sb2dfZGVmYXVsdCk7CisgKi8KK3ZvaWQKK2dzdF9kZWJ1Z19sb2dfZGVmYXVsdCAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdGVnb3J5LCBHc3REZWJ1Z0xldmVsIGxldmVsLAorICAgIGNvbnN0IGdjaGFyICogZmlsZSwgY29uc3QgZ2NoYXIgKiBmdW5jdGlvbiwgZ2ludCBsaW5lLAorICAgIEdPYmplY3QgKiBvYmplY3QsIEdzdERlYnVnTWVzc2FnZSAqIG1lc3NhZ2UsIGdwb2ludGVyIHVudXNlZCkKK3sKKyAgZ2ludCBwaWQ7CisgIEdzdENsb2NrVGltZSBlbGFwc2VkOworICBnY2hhciAqb2JqID0gTlVMTDsKKyAgZ2Jvb2xlYW4gaXNfY29sb3JlZDsKKworICBpZiAobGV2ZWwgPiBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZCAoY2F0ZWdvcnkpKQorICAgIHJldHVybjsKKworICBwaWQgPSBnZXRwaWQgKCk7CisgIGlzX2NvbG9yZWQgPSBnc3RfZGVidWdfaXNfY29sb3JlZCAoKTsKKworICBpZiAob2JqZWN0KSB7CisgICAgb2JqID0gZ3N0X2RlYnVnX3ByaW50X29iamVjdCAob2JqZWN0KTsKKyAgfSBlbHNlIHsKKyAgICBvYmogPSBnX3N0cmR1cCAoIiIpOworICB9CisKKyAgZWxhcHNlZCA9IEdTVF9DTE9DS19ESUZGIChfcHJpdl9nc3RfaW5mb19zdGFydF90aW1lLAorICAgICAgZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKSk7CisKKyAgaWYgKGlzX2NvbG9yZWQpIHsKKyNpZm5kZWYgR19PU19XSU4zMgorICAgIC8qIGNvbG9ycywgbm9uLXdpbmRvd3MgKi8KKyAgICBnY2hhciAqY29sb3IgPSBOVUxMOworICAgIGNvbnN0IGdjaGFyICpjbGVhcjsKKyAgICBnY2hhciBwaWRjb2xvclsxMF07CisgICAgY29uc3QgZ2NoYXIgKmxldmVsY29sb3I7CisKKyAgICBjb2xvciA9IGdzdF9kZWJ1Z19jb25zdHJ1Y3RfdGVybV9jb2xvciAoZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9jb2xvcgorICAgICAgICAoY2F0ZWdvcnkpKTsKKyAgICBjbGVhciA9ICJcMDMzWzAwbSI7CisgICAgZ19zcHJpbnRmIChwaWRjb2xvciwgIlwwMzNbMyUxZG0iLCBwaWQgJSA2ICsgMzEpOworICAgIGxldmVsY29sb3IgPSBsZXZlbGNvbG9ybWFwW2xldmVsXTsKKworI2RlZmluZSBQUklOVF9GTVQgIiAlcyJQSURfRk1UIiVzICJQVFJfRk1UIiAlcyVzJXMgJXMiQ0FUX0ZNVCIlcyAlc1xuIgorICAgIGZwcmludGYgKGxvZ19maWxlLCAiJSIgR1NUX1RJTUVfRk9STUFUIFBSSU5UX0ZNVCwgR1NUX1RJTUVfQVJHUyAoZWxhcHNlZCksCisgICAgICAgIHBpZGNvbG9yLCBwaWQsIGNsZWFyLCBnX3RocmVhZF9zZWxmICgpLCBsZXZlbGNvbG9yLAorICAgICAgICBnc3RfZGVidWdfbGV2ZWxfZ2V0X25hbWUgKGxldmVsKSwgY2xlYXIsIGNvbG9yLAorICAgICAgICBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X25hbWUgKGNhdGVnb3J5KSwgZmlsZSwgbGluZSwgZnVuY3Rpb24sIG9iaiwKKyAgICAgICAgY2xlYXIsIGdzdF9kZWJ1Z19tZXNzYWdlX2dldCAobWVzc2FnZSkpOworICAgIGZmbHVzaCAobG9nX2ZpbGUpOworI3VuZGVmIFBSSU5UX0ZNVAorICAgIGdfZnJlZSAoY29sb3IpOworI2Vsc2UKKyAgICAvKiBjb2xvcnMsIHdpbmRvd3MuIFdlIHRha2UgYSBsb2NrIHRvIGtlZXAgY29sb3JzIGFuZCBjb250ZW50IHRvZ2V0aGVyLgorICAgICAqIE1heWJlIHRoZXJlIGlzIGEgYmV0dGVyIHdheSBidXQgZm9yIG5vdyB0aGlzIHdpbGwgZG8gdGhlIHJpZ2h0CisgICAgICogdGhpbmcuICovCisgICAgc3RhdGljIEdTdGF0aWNNdXRleCB3aW5fcHJpbnRfbXV0ZXggPSBHX1NUQVRJQ19NVVRFWF9JTklUOworICAgIGNvbnN0IGdpbnQgY2xlYXIgPSBGT1JFR1JPVU5EX1JFRCB8IEZPUkVHUk9VTkRfR1JFRU4gfCBGT1JFR1JPVU5EX0JMVUU7CisjZGVmaW5lIFNFVF9DT0xPUihjKSBHX1NUTVRfU1RBUlQgeyBcCisgIGlmIChsb2dfZmlsZSA9PSBzdGRlcnIpIFwKKyAgICBTZXRDb25zb2xlVGV4dEF0dHJpYnV0ZSAoR2V0U3RkSGFuZGxlIChTVERfRVJST1JfSEFORExFKSwgKGMpKTsgXAorICB9IEdfU1RNVF9FTkQKKyAgICBnX3N0YXRpY19tdXRleF9sb2NrICgmd2luX3ByaW50X211dGV4KTsKKyAgICAvKiB0aW1lc3RhbXAgKi8KKyAgICBmcHJpbnRmIChsb2dfZmlsZSwgIiUiIEdTVF9USU1FX0ZPUk1BVCAiICIsIEdTVF9USU1FX0FSR1MgKGVsYXBzZWQpKTsKKyAgICBmZmx1c2ggKGxvZ19maWxlKTsKKyAgICAvKiBwaWQgKi8KKyAgICBTRVRfQ09MT1IgKGF2YWlsYWJsZV9jb2xvcnNbcGlkICUgR19OX0VMRU1FTlRTIChhdmFpbGFibGVfY29sb3JzKV0pOworICAgIGZwcmludGYgKGxvZ19maWxlLCBQSURfRk1ULCBwaWQpOworICAgIGZmbHVzaCAobG9nX2ZpbGUpOworICAgIC8qIHRocmVhZCAqLworICAgIFNFVF9DT0xPUiAoY2xlYXIpOworICAgIGZwcmludGYgKGxvZ19maWxlLCAiICIgUFRSX0ZNVCAiICIsIGdfdGhyZWFkX3NlbGYgKCkpOworICAgIGZmbHVzaCAobG9nX2ZpbGUpOworICAgIC8qIGxldmVsICovCisgICAgU0VUX0NPTE9SIChsZXZlbGNvbG9ybWFwW2xldmVsXSk7CisgICAgZnByaW50ZiAobG9nX2ZpbGUsICIlcyAiLCBnc3RfZGVidWdfbGV2ZWxfZ2V0X25hbWUgKGxldmVsKSk7CisgICAgZmZsdXNoIChsb2dfZmlsZSk7CisgICAgLyogY2F0ZWdvcnkgKi8KKyAgICBTRVRfQ09MT1IgKGdzdF9kZWJ1Z19jb25zdHJ1Y3Rfd2luX2NvbG9yIChnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X2NvbG9yCisgICAgICAgICAgICAoY2F0ZWdvcnkpKSk7CisgICAgZnByaW50ZiAobG9nX2ZpbGUsIENBVF9GTVQsIGdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfbmFtZSAoY2F0ZWdvcnkpLAorICAgICAgICBmaWxlLCBsaW5lLCBmdW5jdGlvbiwgb2JqKTsKKyAgICBmZmx1c2ggKGxvZ19maWxlKTsKKyAgICAvKiBtZXNzYWdlICovCisgICAgU0VUX0NPTE9SIChjbGVhcik7CisgICAgZnByaW50ZiAobG9nX2ZpbGUsICIgJXNcbiIsIGdzdF9kZWJ1Z19tZXNzYWdlX2dldCAobWVzc2FnZSkpOworICAgIGZmbHVzaCAobG9nX2ZpbGUpOworICAgIGdfc3RhdGljX211dGV4X3VubG9jayAoJndpbl9wcmludF9tdXRleCk7CisjZW5kaWYKKyAgfSBlbHNlIHsKKyAgICAvKiBubyBjb2xvciwgYWxsIHBsYXRmb3JtcyAqLworI2RlZmluZSBQUklOVF9GTVQgIiAiUElEX0ZNVCIgIlBUUl9GTVQiICVzICJDQVRfRk1UIiAlc1xuIgorICAgIGZwcmludGYgKGxvZ19maWxlLCAiJSIgR1NUX1RJTUVfRk9STUFUIFBSSU5UX0ZNVCwgR1NUX1RJTUVfQVJHUyAoZWxhcHNlZCksCisgICAgICAgIHBpZCwgZ190aHJlYWRfc2VsZiAoKSwgZ3N0X2RlYnVnX2xldmVsX2dldF9uYW1lIChsZXZlbCksCisgICAgICAgIGdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfbmFtZSAoY2F0ZWdvcnkpLCBmaWxlLCBsaW5lLCBmdW5jdGlvbiwgb2JqLAorICAgICAgICBnc3RfZGVidWdfbWVzc2FnZV9nZXQgKG1lc3NhZ2UpKTsKKyAgICBmZmx1c2ggKGxvZ19maWxlKTsKKyN1bmRlZiBQUklOVF9GTVQKKyAgfQorCisgIGdfZnJlZSAob2JqKTsKK30KKworLyoqCisgKiBnc3RfZGVidWdfbGV2ZWxfZ2V0X25hbWU6CisgKiBAbGV2ZWw6IHRoZSBsZXZlbCB0byBnZXQgdGhlIG5hbWUgZm9yCisgKgorICogR2V0IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkZWJ1Z2dpbmcgbGV2ZWwKKyAqCisgKiBSZXR1cm5zOiB0aGUgbmFtZQorICovCitjb25zdCBnY2hhciAqCitnc3RfZGVidWdfbGV2ZWxfZ2V0X25hbWUgKEdzdERlYnVnTGV2ZWwgbGV2ZWwpCit7CisgIHN3aXRjaCAobGV2ZWwpIHsKKyAgICBjYXNlIEdTVF9MRVZFTF9OT05FOgorICAgICAgcmV0dXJuICIiOworICAgIGNhc2UgR1NUX0xFVkVMX0VSUk9SOgorICAgICAgcmV0dXJuICJFUlJPUiAgIjsKKyAgICBjYXNlIEdTVF9MRVZFTF9XQVJOSU5HOgorICAgICAgcmV0dXJuICJXQVJOICAgIjsKKyAgICBjYXNlIEdTVF9MRVZFTF9JTkZPOgorICAgICAgcmV0dXJuICJJTkZPICAgIjsKKyAgICBjYXNlIEdTVF9MRVZFTF9ERUJVRzoKKyAgICAgIHJldHVybiAiREVCVUcgICI7CisgICAgY2FzZSBHU1RfTEVWRUxfTE9HOgorICAgICAgcmV0dXJuICJMT0cgICAgIjsKKyAgICBjYXNlIEdTVF9MRVZFTF9GSVhNRToKKyAgICAgIHJldHVybiAiRklYTUUgICI7CisgICAgY2FzZSBHU1RfTEVWRUxfVFJBQ0U6CisgICAgICByZXR1cm4gIlRSQUNFICAiOworICAgIGNhc2UgR1NUX0xFVkVMX01FTURVTVA6CisgICAgICByZXR1cm4gIk1FTURVTVAiOworICAgIGRlZmF1bHQ6CisgICAgICBnX3dhcm5pbmcgKCJpbnZhbGlkIGxldmVsIHNwZWNpZmllZCBmb3IgZ3N0X2RlYnVnX2xldmVsX2dldF9uYW1lIik7CisgICAgICByZXR1cm4gIiI7CisgIH0KK30KKworLyoqCisgKiBnc3RfZGVidWdfYWRkX2xvZ19mdW5jdGlvbjoKKyAqIEBmdW5jOiB0aGUgZnVuY3Rpb24gdG8gdXNlCisgKiBAZGF0YTogKGNsb3N1cmUpOiB1c2VyIGRhdGEKKyAqCisgKiBBZGRzIHRoZSBsb2dnaW5nIGZ1bmN0aW9uIHRvIHRoZSBsaXN0IG9mIGxvZ2dpbmcgZnVuY3Rpb25zLgorICogQmUgc3VyZSB0byB1c2UgI0dfR05VQ19OT19JTlNUUlVNRU5UIG9uIHRoYXQgZnVuY3Rpb24sIGl0IGlzIG5lZWRlZC4KKyAqLwordm9pZAorZ3N0X2RlYnVnX2FkZF9sb2dfZnVuY3Rpb24gKEdzdExvZ0Z1bmN0aW9uIGZ1bmMsIGdwb2ludGVyIGRhdGEpCit7CisgIExvZ0Z1bmNFbnRyeSAqZW50cnk7CisgIEdTTGlzdCAqbGlzdDsKKworICBpZiAoZnVuYyA9PSBOVUxMKQorICAgIGZ1bmMgPSBnc3RfZGVidWdfbG9nX2RlZmF1bHQ7CisKKyAgZW50cnkgPSBnX3NsaWNlX25ldyAoTG9nRnVuY0VudHJ5KTsKKyAgZW50cnktPmZ1bmMgPSBmdW5jOworICBlbnRyeS0+dXNlcl9kYXRhID0gZGF0YTsKKyAgLyogRklYTUU6IHdlIGxlYWsgdGhlIG9sZCBsaXN0IGhlcmUgLSBvdGhlciB0aHJlYWRzIG1pZ2h0IGFjY2VzcyBpdCByaWdodCBub3cKKyAgICogaW4gZ3N0X2RlYnVnX2xvZ3YuIEFub3RoZXIgc29sdXRpb24gaXMgdG8gbG9jayB0aGUgbXV0ZXggaW4gZ3N0X2RlYnVnX2xvZ3YsCisgICAqIGJ1dCB0aGF0IGlzIHdhYWF5IGNvc3RseS4KKyAgICogSXQnZCBwcm9iYWJseSBiZSBjbGV2ZXIgdG8gdXNlIHNvbWUga2luZCBvZiBSQ1UgaGVyZSwgYnV0IEkgZG9uJ3Qga25vdworICAgKiBhbnl0aGluZyBhYm91dCB0aGF0LgorICAgKi8KKyAgZ19zdGF0aWNfbXV0ZXhfbG9jayAoJl9fbG9nX2Z1bmNfbXV0ZXgpOworICBsaXN0ID0gZ19zbGlzdF9jb3B5IChfX2xvZ19mdW5jdGlvbnMpOworICBfX2xvZ19mdW5jdGlvbnMgPSBnX3NsaXN0X3ByZXBlbmQgKGxpc3QsIGVudHJ5KTsKKyAgZ19zdGF0aWNfbXV0ZXhfdW5sb2NrICgmX19sb2dfZnVuY19tdXRleCk7CisKKyAgR1NUX0RFQlVHICgicHJlcGVuZGVkIGxvZyBmdW5jdGlvbiAlcCAodXNlciBkYXRhICVwKSB0byBsb2cgZnVuY3Rpb25zIiwKKyAgICAgIGZ1bmMsIGRhdGEpOworfQorCitzdGF0aWMgZ2ludAorZ3N0X2RlYnVnX2NvbXBhcmVfbG9nX2Z1bmN0aW9uX2J5X2Z1bmMgKGdjb25zdHBvaW50ZXIgZW50cnksIGdjb25zdHBvaW50ZXIgZnVuYykKK3sKKyAgZ3BvaW50ZXIgZW50cnlmdW5jID0gKGdwb2ludGVyKSAoKChMb2dGdW5jRW50cnkgKikgZW50cnkpLT5mdW5jKTsKKworICByZXR1cm4gKGVudHJ5ZnVuYyA8IGZ1bmMpID8gLTEgOiAoZW50cnlmdW5jID4gZnVuYykgPyAxIDogMDsKK30KKworc3RhdGljIGdpbnQKK2dzdF9kZWJ1Z19jb21wYXJlX2xvZ19mdW5jdGlvbl9ieV9kYXRhIChnY29uc3Rwb2ludGVyIGVudHJ5LCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgIGdwb2ludGVyIGVudHJ5ZGF0YSA9ICgoTG9nRnVuY0VudHJ5ICopIGVudHJ5KS0+dXNlcl9kYXRhOworCisgIHJldHVybiAoZW50cnlkYXRhIDwgZGF0YSkgPyAtMSA6IChlbnRyeWRhdGEgPiBkYXRhKSA/IDEgOiAwOworfQorCitzdGF0aWMgZ3VpbnQKK2dzdF9kZWJ1Z19yZW1vdmVfd2l0aF9jb21wYXJlX2Z1bmMgKEdDb21wYXJlRnVuYyBmdW5jLCBncG9pbnRlciBkYXRhKQoreworICBHU0xpc3QgKmZvdW5kOworICBHU0xpc3QgKm5ldzsKKyAgZ3VpbnQgcmVtb3ZhbHMgPSAwOworCisgIGdfc3RhdGljX211dGV4X2xvY2sgKCZfX2xvZ19mdW5jX211dGV4KTsKKyAgbmV3ID0gX19sb2dfZnVuY3Rpb25zOworICB3aGlsZSAoKGZvdW5kID0gZ19zbGlzdF9maW5kX2N1c3RvbSAobmV3LCBkYXRhLCBmdW5jKSkpIHsKKyAgICBpZiAobmV3ID09IF9fbG9nX2Z1bmN0aW9ucykgeworICAgICAgLyogbWFrZSBhIGNvcHkgd2hlbiB3ZSBoYXZlIHRoZSBmaXJzdCBoaXQsIHNvIHRoYXQgd2UgbW9kaWZ5IHRoZSBjb3B5IGFuZAorICAgICAgICogbWFrZSB0aGF0IHRoZSBuZXcgbGlzdCBsYXRlciAqLworICAgICAgbmV3ID0gZ19zbGlzdF9jb3B5IChuZXcpOworICAgICAgY29udGludWU7CisgICAgfQorICAgIGdfc2xpY2VfZnJlZSAoTG9nRnVuY0VudHJ5LCBmb3VuZC0+ZGF0YSk7CisgICAgbmV3ID0gZ19zbGlzdF9kZWxldGVfbGluayAobmV3LCBmb3VuZCk7CisgICAgcmVtb3ZhbHMrKzsKKyAgfQorICAvKiBGSVhNRTogV2UgbGVhayB0aGUgb2xkIGxpc3QgaGVyZS4gU2VlIF9hZGRfbG9nX2Z1bmN0aW9uIGZvciB3aHkuICovCisgIF9fbG9nX2Z1bmN0aW9ucyA9IG5ldzsKKyAgZ19zdGF0aWNfbXV0ZXhfdW5sb2NrICgmX19sb2dfZnVuY19tdXRleCk7CisKKyAgcmV0dXJuIHJlbW92YWxzOworfQorCisvKioKKyAqIGdzdF9kZWJ1Z19yZW1vdmVfbG9nX2Z1bmN0aW9uOgorICogQGZ1bmM6IHRoZSBsb2cgZnVuY3Rpb24gdG8gcmVtb3ZlCisgKgorICogUmVtb3ZlcyBhbGwgcmVnaXN0ZXJlZCBpbnN0YW5jZXMgb2YgdGhlIGdpdmVuIGxvZ2dpbmcgZnVuY3Rpb25zLgorICoKKyAqIFJldHVybnM6IEhvdyBtYW55IGluc3RhbmNlcyBvZiB0aGUgZnVuY3Rpb24gd2VyZSByZW1vdmVkCisgKi8KK2d1aW50Citnc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbiAoR3N0TG9nRnVuY3Rpb24gZnVuYykKK3sKKyAgZ3VpbnQgcmVtb3ZhbHM7CisKKyAgaWYgKGZ1bmMgPT0gTlVMTCkKKyAgICBmdW5jID0gZ3N0X2RlYnVnX2xvZ19kZWZhdWx0OworCisgIHJlbW92YWxzID0KKyAgICAgIGdzdF9kZWJ1Z19yZW1vdmVfd2l0aF9jb21wYXJlX2Z1bmMKKyAgICAgIChnc3RfZGVidWdfY29tcGFyZV9sb2dfZnVuY3Rpb25fYnlfZnVuYywgKGdwb2ludGVyKSBmdW5jKTsKKyAgR1NUX0RFQlVHICgicmVtb3ZlZCBsb2cgZnVuY3Rpb24gJXAgJWQgdGltZXMgZnJvbSBsb2cgZnVuY3Rpb24gbGlzdCIsIGZ1bmMsCisgICAgICByZW1vdmFscyk7CisKKyAgcmV0dXJuIHJlbW92YWxzOworfQorCisvKioKKyAqIGdzdF9kZWJ1Z19yZW1vdmVfbG9nX2Z1bmN0aW9uX2J5X2RhdGE6CisgKiBAZGF0YTogdXNlciBkYXRhIG9mIHRoZSBsb2cgZnVuY3Rpb24gdG8gcmVtb3ZlCisgKgorICogUmVtb3ZlcyBhbGwgcmVnaXN0ZXJlZCBpbnN0YW5jZXMgb2YgbG9nIGZ1bmN0aW9ucyB3aXRoIHRoZSBnaXZlbiB1c2VyIGRhdGEuCisgKgorICogUmV0dXJuczogSG93IG1hbnkgaW5zdGFuY2VzIG9mIHRoZSBmdW5jdGlvbiB3ZXJlIHJlbW92ZWQKKyAqLworZ3VpbnQKK2dzdF9kZWJ1Z19yZW1vdmVfbG9nX2Z1bmN0aW9uX2J5X2RhdGEgKGdwb2ludGVyIGRhdGEpCit7CisgIGd1aW50IHJlbW92YWxzOworCisgIHJlbW92YWxzID0KKyAgICAgIGdzdF9kZWJ1Z19yZW1vdmVfd2l0aF9jb21wYXJlX2Z1bmMKKyAgICAgIChnc3RfZGVidWdfY29tcGFyZV9sb2dfZnVuY3Rpb25fYnlfZGF0YSwgZGF0YSk7CisgIEdTVF9ERUJVRworICAgICAgKCJyZW1vdmVkICVkIGxvZyBmdW5jdGlvbnMgd2l0aCB1c2VyIGRhdGEgJXAgZnJvbSBsb2cgZnVuY3Rpb24gbGlzdCIsCisgICAgICByZW1vdmFscywgZGF0YSk7CisKKyAgcmV0dXJuIHJlbW92YWxzOworfQorCisvKioKKyAqIGdzdF9kZWJ1Z19zZXRfY29sb3JlZDoKKyAqIEBjb2xvcmVkOiBXaGV0aGVyIHRvIHVzZSBjb2xvcmVkIG91dHB1dCBvciBub3QKKyAqCisgKiBTZXRzIG9yIHVuc2V0cyB0aGUgdXNlIG9mIGNvbG91cmVkIGRlYnVnZ2luZyBvdXRwdXQuCisgKgorICogVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGJlZm9yZSBnc3RfaW5pdCgpLgorICovCit2b2lkCitnc3RfZGVidWdfc2V0X2NvbG9yZWQgKGdib29sZWFuIGNvbG9yZWQpCit7CisgIGdfYXRvbWljX2ludF9zZXQgKCZfX3VzZV9jb2xvciwgKGdpbnQpIGNvbG9yZWQpOworfQorCisvKioKKyAqIGdzdF9kZWJ1Z19pc19jb2xvcmVkOgorICoKKyAqIENoZWNrcyBpZiB0aGUgZGVidWdnaW5nIG91dHB1dCBzaG91bGQgYmUgY29sb3JlZC4KKyAqCisgKiBSZXR1cm5zOiBUUlVFLCBpZiB0aGUgZGVidWcgb3V0cHV0IHNob3VsZCBiZSBjb2xvcmVkLgorICovCitnYm9vbGVhbgorZ3N0X2RlYnVnX2lzX2NvbG9yZWQgKHZvaWQpCit7CisgIHJldHVybiAoZ2Jvb2xlYW4pIGdfYXRvbWljX2ludF9nZXQgKCZfX3VzZV9jb2xvcik7Cit9CisKKy8qKgorICogZ3N0X2RlYnVnX3NldF9hY3RpdmU6CisgKiBAYWN0aXZlOiBXaGV0aGVyIHRvIHVzZSBkZWJ1Z2dpbmcgb3V0cHV0IG9yIG5vdAorICoKKyAqIElmIGFjdGl2YXRlZCwgZGVidWdnaW5nIG1lc3NhZ2VzIGFyZSBzZW50IHRvIHRoZSBkZWJ1Z2dpbmcKKyAqIGhhbmRsZXJzLgorICogSXQgbWFrZXMgc2Vuc2UgdG8gZGVhY3RpdmF0ZSBpdCBmb3Igc3BlZWQgaXNzdWVzLgorICogPG5vdGU+PHBhcmE+VGhpcyBmdW5jdGlvbiBpcyBub3QgdGhyZWFkc2FmZS4gSXQgbWFrZXMgc2Vuc2UgdG8gb25seSBjYWxsIGl0CisgKiBkdXJpbmcgaW5pdGlhbGl6YXRpb24uPC9wYXJhPjwvbm90ZT4KKyAqLwordm9pZAorZ3N0X2RlYnVnX3NldF9hY3RpdmUgKGdib29sZWFuIGFjdGl2ZSkKK3sKKyAgX19nc3RfZGVidWdfZW5hYmxlZCA9IGFjdGl2ZTsKKyAgaWYgKGFjdGl2ZSkKKyAgICBfX2dzdF9kZWJ1Z19taW4gPSBHU1RfTEVWRUxfQ09VTlQ7CisgIGVsc2UKKyAgICBfX2dzdF9kZWJ1Z19taW4gPSBHU1RfTEVWRUxfTk9ORTsKK30KKworLyoqCisgKiBnc3RfZGVidWdfaXNfYWN0aXZlOgorICoKKyAqIENoZWNrcyBpZiBkZWJ1Z2dpbmcgb3V0cHV0IGlzIGFjdGl2YXRlZC4KKyAqCisgKiBSZXR1cm5zOiBUUlVFLCBpZiBkZWJ1Z2dpbmcgaXMgYWN0aXZhdGVkCisgKi8KK2dib29sZWFuCitnc3RfZGVidWdfaXNfYWN0aXZlICh2b2lkKQoreworICByZXR1cm4gX19nc3RfZGVidWdfZW5hYmxlZDsKK30KKworLyoqCisgKiBnc3RfZGVidWdfc2V0X2RlZmF1bHRfdGhyZXNob2xkOgorICogQGxldmVsOiBsZXZlbCB0byBzZXQKKyAqCisgKiBTZXRzIHRoZSBkZWZhdWx0IHRocmVzaG9sZCB0byB0aGUgZ2l2ZW4gbGV2ZWwgYW5kIHVwZGF0ZXMgYWxsIGNhdGVnb3JpZXMgdG8KKyAqIHVzZSB0aGlzIHRocmVzaG9sZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgYmVmb3JlIGdzdF9pbml0KCkuCisgKi8KK3ZvaWQKK2dzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGQgKEdzdERlYnVnTGV2ZWwgbGV2ZWwpCit7CisgIGdfYXRvbWljX2ludF9zZXQgKCZfX2RlZmF1bHRfbGV2ZWwsIGxldmVsKTsKKyAgZ3N0X2RlYnVnX3Jlc2V0X2FsbF90aHJlc2hvbGRzICgpOworfQorCisvKioKKyAqIGdzdF9kZWJ1Z19nZXRfZGVmYXVsdF90aHJlc2hvbGQ6CisgKgorICogUmV0dXJucyB0aGUgZGVmYXVsdCB0aHJlc2hvbGQgdGhhdCBpcyB1c2VkIGZvciBuZXcgY2F0ZWdvcmllcy4KKyAqCisgKiBSZXR1cm5zOiB0aGUgZGVmYXVsdCB0aHJlc2hvbGQgbGV2ZWwKKyAqLworR3N0RGVidWdMZXZlbAorZ3N0X2RlYnVnX2dldF9kZWZhdWx0X3RocmVzaG9sZCAodm9pZCkKK3sKKyAgcmV0dXJuIChHc3REZWJ1Z0xldmVsKSBnX2F0b21pY19pbnRfZ2V0ICgmX19kZWZhdWx0X2xldmVsKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9kZWJ1Z19yZXNldF90aHJlc2hvbGQgKGdwb2ludGVyIGNhdGVnb3J5LCBncG9pbnRlciB1bnVzZWQpCit7CisgIEdzdERlYnVnQ2F0ZWdvcnkgKmNhdCA9IChHc3REZWJ1Z0NhdGVnb3J5ICopIGNhdGVnb3J5OworICBHU0xpc3QgKndhbGs7CisKKyAgZ19zdGF0aWNfbXV0ZXhfbG9jayAoJl9fbGV2ZWxfbmFtZV9tdXRleCk7CisgIHdhbGsgPSBfX2xldmVsX25hbWU7CisgIHdoaWxlICh3YWxrKSB7CisgICAgTGV2ZWxOYW1lRW50cnkgKmVudHJ5ID0gd2Fsay0+ZGF0YTsKKworICAgIHdhbGsgPSBnX3NsaXN0X25leHQgKHdhbGspOworICAgIGlmIChnX3BhdHRlcm5fbWF0Y2hfc3RyaW5nIChlbnRyeS0+cGF0LCBjYXQtPm5hbWUpKSB7CisgICAgICBHU1RfTE9HICgiY2F0ZWdvcnkgJXMgbWF0Y2hlcyBwYXR0ZXJuICVwIC0gZ2V0cyBzZXQgdG8gbGV2ZWwgJWQiLAorICAgICAgICAgIGNhdC0+bmFtZSwgZW50cnktPnBhdCwgZW50cnktPmxldmVsKTsKKyAgICAgIGdzdF9kZWJ1Z19jYXRlZ29yeV9zZXRfdGhyZXNob2xkIChjYXQsIGVudHJ5LT5sZXZlbCk7CisgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICB9CisgIGdzdF9kZWJ1Z19jYXRlZ29yeV9zZXRfdGhyZXNob2xkIChjYXQsIGdzdF9kZWJ1Z19nZXRfZGVmYXVsdF90aHJlc2hvbGQgKCkpOworCitleGl0OgorICBnX3N0YXRpY19tdXRleF91bmxvY2sgKCZfX2xldmVsX25hbWVfbXV0ZXgpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2RlYnVnX3Jlc2V0X2FsbF90aHJlc2hvbGRzICh2b2lkKQoreworICBnX3N0YXRpY19tdXRleF9sb2NrICgmX19jYXRfbXV0ZXgpOworICBnX3NsaXN0X2ZvcmVhY2ggKF9fY2F0ZWdvcmllcywgZ3N0X2RlYnVnX3Jlc2V0X3RocmVzaG9sZCwgTlVMTCk7CisgIGdfc3RhdGljX211dGV4X3VubG9jayAoJl9fY2F0X211dGV4KTsKK30KKworc3RhdGljIHZvaWQKK2Zvcl9lYWNoX3RocmVzaG9sZF9ieV9lbnRyeSAoZ3BvaW50ZXIgZGF0YSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBHc3REZWJ1Z0NhdGVnb3J5ICpjYXQgPSAoR3N0RGVidWdDYXRlZ29yeSAqKSBkYXRhOworICBMZXZlbE5hbWVFbnRyeSAqZW50cnkgPSAoTGV2ZWxOYW1lRW50cnkgKikgdXNlcl9kYXRhOworCisgIGlmIChnX3BhdHRlcm5fbWF0Y2hfc3RyaW5nIChlbnRyeS0+cGF0LCBjYXQtPm5hbWUpKSB7CisgICAgR1NUX0xPRyAoImNhdGVnb3J5ICVzIG1hdGNoZXMgcGF0dGVybiAlcCAtIGdldHMgc2V0IHRvIGxldmVsICVkIiwKKyAgICAgICAgY2F0LT5uYW1lLCBlbnRyeS0+cGF0LCBlbnRyeS0+bGV2ZWwpOworICAgIGdzdF9kZWJ1Z19jYXRlZ29yeV9zZXRfdGhyZXNob2xkIChjYXQsIGVudHJ5LT5sZXZlbCk7CisgIH0KK30KKworLyoqCisgKiBnc3RfZGVidWdfc2V0X3RocmVzaG9sZF9mb3JfbmFtZToKKyAqIEBuYW1lOiBuYW1lIG9mIHRoZSBjYXRlZ29yaWVzIHRvIHNldAorICogQGxldmVsOiBsZXZlbCB0byBzZXQgdGhlbSB0bworICoKKyAqIFNldHMgYWxsIGNhdGVnb3JpZXMgd2hpY2ggbWF0Y2ggdGhlIGdpdmVuIGdsb2Igc3R5bGUgcGF0dGVybiB0byB0aGUgZ2l2ZW4KKyAqIGxldmVsLgorICovCit2b2lkCitnc3RfZGVidWdfc2V0X3RocmVzaG9sZF9mb3JfbmFtZSAoY29uc3QgZ2NoYXIgKiBuYW1lLCBHc3REZWJ1Z0xldmVsIGxldmVsKQoreworICBHUGF0dGVyblNwZWMgKnBhdDsKKyAgTGV2ZWxOYW1lRW50cnkgKmVudHJ5OworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKG5hbWUgIT0gTlVMTCk7CisKKyAgcGF0ID0gZ19wYXR0ZXJuX3NwZWNfbmV3IChuYW1lKTsKKyAgZW50cnkgPSBnX3NsaWNlX25ldyAoTGV2ZWxOYW1lRW50cnkpOworICBlbnRyeS0+cGF0ID0gcGF0OworICBlbnRyeS0+bGV2ZWwgPSBsZXZlbDsKKyAgZ19zdGF0aWNfbXV0ZXhfbG9jayAoJl9fbGV2ZWxfbmFtZV9tdXRleCk7CisgIF9fbGV2ZWxfbmFtZSA9IGdfc2xpc3RfcHJlcGVuZCAoX19sZXZlbF9uYW1lLCBlbnRyeSk7CisgIGdfc3RhdGljX211dGV4X3VubG9jayAoJl9fbGV2ZWxfbmFtZV9tdXRleCk7CisgIGdfc3RhdGljX211dGV4X2xvY2sgKCZfX2NhdF9tdXRleCk7CisgIGdfc2xpc3RfZm9yZWFjaCAoX19jYXRlZ29yaWVzLCBmb3JfZWFjaF90aHJlc2hvbGRfYnlfZW50cnksIGVudHJ5KTsKKyAgZ19zdGF0aWNfbXV0ZXhfdW5sb2NrICgmX19jYXRfbXV0ZXgpOworfQorCisvKioKKyAqIGdzdF9kZWJ1Z191bnNldF90aHJlc2hvbGRfZm9yX25hbWU6CisgKiBAbmFtZTogbmFtZSBvZiB0aGUgY2F0ZWdvcmllcyB0byBzZXQKKyAqCisgKiBSZXNldHMgYWxsIGNhdGVnb3JpZXMgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBiYWNrIHRvIHRoZSBkZWZhdWx0IGxldmVsLgorICovCit2b2lkCitnc3RfZGVidWdfdW5zZXRfdGhyZXNob2xkX2Zvcl9uYW1lIChjb25zdCBnY2hhciAqIG5hbWUpCit7CisgIEdTTGlzdCAqd2FsazsKKyAgR1BhdHRlcm5TcGVjICpwYXQ7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAobmFtZSAhPSBOVUxMKTsKKworICBwYXQgPSBnX3BhdHRlcm5fc3BlY19uZXcgKG5hbWUpOworICBnX3N0YXRpY19tdXRleF9sb2NrICgmX19sZXZlbF9uYW1lX211dGV4KTsKKyAgd2FsayA9IF9fbGV2ZWxfbmFtZTsKKyAgLyogaW1wcm92ZSB0aGlzIGlmIHlvdSB3YW50LCBpdCdzIG1pZ2h0eSBzbG93ICovCisgIHdoaWxlICh3YWxrKSB7CisgICAgTGV2ZWxOYW1lRW50cnkgKmVudHJ5ID0gd2Fsay0+ZGF0YTsKKworICAgIGlmIChnX3BhdHRlcm5fc3BlY19lcXVhbCAoZW50cnktPnBhdCwgcGF0KSkgeworICAgICAgX19sZXZlbF9uYW1lID0gZ19zbGlzdF9yZW1vdmVfbGluayAoX19sZXZlbF9uYW1lLCB3YWxrKTsKKyAgICAgIGdfcGF0dGVybl9zcGVjX2ZyZWUgKGVudHJ5LT5wYXQpOworICAgICAgZ19zbGljZV9mcmVlIChMZXZlbE5hbWVFbnRyeSwgZW50cnkpOworICAgICAgZ19zbGlzdF9mcmVlXzEgKHdhbGspOworICAgICAgd2FsayA9IF9fbGV2ZWxfbmFtZTsKKyAgICB9CisgIH0KKyAgZ19zdGF0aWNfbXV0ZXhfdW5sb2NrICgmX19sZXZlbF9uYW1lX211dGV4KTsKKyAgZ19wYXR0ZXJuX3NwZWNfZnJlZSAocGF0KTsKKyAgZ3N0X2RlYnVnX3Jlc2V0X2FsbF90aHJlc2hvbGRzICgpOworfQorCitHc3REZWJ1Z0NhdGVnb3J5ICoKK19nc3RfZGVidWdfY2F0ZWdvcnlfbmV3IChjb25zdCBnY2hhciAqIG5hbWUsIGd1aW50IGNvbG9yLAorICAgIGNvbnN0IGdjaGFyICogZGVzY3JpcHRpb24pCit7CisgIEdzdERlYnVnQ2F0ZWdvcnkgKmNhdDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAobmFtZSAhPSBOVUxMLCBOVUxMKTsKKworICBjYXQgPSBnX3NsaWNlX25ldyAoR3N0RGVidWdDYXRlZ29yeSk7CisgIGNhdC0+bmFtZSA9IGdfc3RyZHVwIChuYW1lKTsKKyAgY2F0LT5jb2xvciA9IGNvbG9yOworICBpZiAoZGVzY3JpcHRpb24gIT0gTlVMTCkgeworICAgIGNhdC0+ZGVzY3JpcHRpb24gPSBnX3N0cmR1cCAoZGVzY3JpcHRpb24pOworICB9IGVsc2UgeworICAgIGNhdC0+ZGVzY3JpcHRpb24gPSBnX3N0cmR1cCAoIm5vIGRlc2NyaXB0aW9uIik7CisgIH0KKyAgZ19hdG9taWNfaW50X3NldCAoJmNhdC0+dGhyZXNob2xkLCAwKTsKKyAgZ3N0X2RlYnVnX3Jlc2V0X3RocmVzaG9sZCAoY2F0LCBOVUxMKTsKKworICAvKiBhZGQgdG8gY2F0ZWdvcnkgbGlzdCAqLworICBnX3N0YXRpY19tdXRleF9sb2NrICgmX19jYXRfbXV0ZXgpOworICBfX2NhdGVnb3JpZXMgPSBnX3NsaXN0X3ByZXBlbmQgKF9fY2F0ZWdvcmllcywgY2F0KTsKKyAgZ19zdGF0aWNfbXV0ZXhfdW5sb2NrICgmX19jYXRfbXV0ZXgpOworCisgIHJldHVybiBjYXQ7Cit9CisKKy8qKgorICogZ3N0X2RlYnVnX2NhdGVnb3J5X2ZyZWU6CisgKiBAY2F0ZWdvcnk6ICNHc3REZWJ1Z0NhdGVnb3J5IHRvIGZyZWUuCisgKgorICogUmVtb3ZlcyBhbmQgZnJlZXMgdGhlIGNhdGVnb3J5IGFuZCBhbGwgYXNzb2NpYXRlZCByZXNvdXJjZXMuCisgKi8KK3ZvaWQKK2dzdF9kZWJ1Z19jYXRlZ29yeV9mcmVlIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnkpCit7CisgIGlmIChjYXRlZ29yeSA9PSBOVUxMKQorICAgIHJldHVybjsKKworICAvKiByZW1vdmUgZnJvbSBjYXRlZ29yeSBsaXN0ICovCisgIGdfc3RhdGljX211dGV4X2xvY2sgKCZfX2NhdF9tdXRleCk7CisgIF9fY2F0ZWdvcmllcyA9IGdfc2xpc3RfcmVtb3ZlIChfX2NhdGVnb3JpZXMsIGNhdGVnb3J5KTsKKyAgZ19zdGF0aWNfbXV0ZXhfdW5sb2NrICgmX19jYXRfbXV0ZXgpOworCisgIGdfZnJlZSAoKGdwb2ludGVyKSBjYXRlZ29yeS0+bmFtZSk7CisgIGdfZnJlZSAoKGdwb2ludGVyKSBjYXRlZ29yeS0+ZGVzY3JpcHRpb24pOworICBnX3NsaWNlX2ZyZWUgKEdzdERlYnVnQ2F0ZWdvcnksIGNhdGVnb3J5KTsKK30KKworLyoqCisgKiBnc3RfZGVidWdfY2F0ZWdvcnlfc2V0X3RocmVzaG9sZDoKKyAqIEBjYXRlZ29yeTogYSAjR3N0RGVidWdDYXRlZ29yeSB0byBzZXQgdGhyZXNob2xkIG9mLgorICogQGxldmVsOiB0aGUgI0dzdERlYnVnTGV2ZWwgdGhyZXNob2xkIHRvIHNldC4KKyAqCisgKiBTZXRzIHRoZSB0aHJlc2hvbGQgb2YgdGhlIGNhdGVnb3J5IHRvIHRoZSBnaXZlbiBsZXZlbC4gRGVidWcgaW5mb3JtYXRpb24gd2lsbAorICogb25seSBiZSBvdXRwdXQgaWYgdGhlIHRocmVzaG9sZCBpcyBsb3dlciBvciBlcXVhbCB0byB0aGUgbGV2ZWwgb2YgdGhlCisgKiBkZWJ1Z2dpbmcgbWVzc2FnZS4KKyAqIDxub3RlPjxwYXJhPgorICogRG8gbm90IHVzZSB0aGlzIGZ1bmN0aW9uIGluIHByb2R1Y3Rpb24gY29kZSwgYmVjYXVzZSBvdGhlciBmdW5jdGlvbnMgbWF5CisgKiBjaGFuZ2UgdGhlIHRocmVzaG9sZCBvZiBjYXRlZ29yaWVzIGFzIHNpZGUgZWZmZWN0LiBJdCBpcyBob3dldmVyIGEgbmljZQorICogZnVuY3Rpb24gdG8gdXNlIHdoZW4gZGVidWdnaW5nIChldmVuIGZyb20gZ2RiKS4KKyAqIDwvcGFyYT48L25vdGU+CisgKi8KK3ZvaWQKK2dzdF9kZWJ1Z19jYXRlZ29yeV9zZXRfdGhyZXNob2xkIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnksCisgICAgR3N0RGVidWdMZXZlbCBsZXZlbCkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoY2F0ZWdvcnkgIT0gTlVMTCk7CisKKyAgaWYgKGxldmVsID4gX19nc3RfZGVidWdfbWluKSB7CisgICAgX19nc3RfZGVidWdfZW5hYmxlZCA9IFRSVUU7CisgICAgX19nc3RfZGVidWdfbWluID0gbGV2ZWw7CisgIH0KKworICBnX2F0b21pY19pbnRfc2V0ICgmY2F0ZWdvcnktPnRocmVzaG9sZCwgbGV2ZWwpOworfQorCisvKioKKyAqIGdzdF9kZWJ1Z19jYXRlZ29yeV9yZXNldF90aHJlc2hvbGQ6CisgKiBAY2F0ZWdvcnk6IGEgI0dzdERlYnVnQ2F0ZWdvcnkgdG8gcmVzZXQgdGhyZXNob2xkIG9mLgorICoKKyAqIFJlc2V0cyB0aGUgdGhyZXNob2xkIG9mIHRoZSBjYXRlZ29yeSB0byB0aGUgZGVmYXVsdCBsZXZlbC4gRGVidWcgaW5mb3JtYXRpb24KKyAqIHdpbGwgb25seSBiZSBvdXRwdXQgaWYgdGhlIHRocmVzaG9sZCBpcyBsb3dlciBvciBlcXVhbCB0byB0aGUgbGV2ZWwgb2YgdGhlCisgKiBkZWJ1Z2dpbmcgbWVzc2FnZS4KKyAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHNldCB0aGUgdGhyZXNob2xkIGJhY2sgdG8gd2hlcmUgaXQgd2FzIGFmdGVyIHVzaW5nCisgKiBnc3RfZGVidWdfY2F0ZWdvcnlfc2V0X3RocmVzaG9sZCgpLgorICovCit2b2lkCitnc3RfZGVidWdfY2F0ZWdvcnlfcmVzZXRfdGhyZXNob2xkIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnkpCit7CisgIGdzdF9kZWJ1Z19yZXNldF90aHJlc2hvbGQgKGNhdGVnb3J5LCBOVUxMKTsKK30KKworLyoqCisgKiBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZDoKKyAqIEBjYXRlZ29yeTogYSAjR3N0RGVidWdDYXRlZ29yeSB0byBnZXQgdGhyZXNob2xkIG9mLgorICoKKyAqIFJldHVybnMgdGhlIHRocmVzaG9sZCBvZiBhICNHc3REZWJ1Z0NhdGVnb3J5LgorICoKKyAqIFJldHVybnM6IHRoZSAjR3N0RGVidWdMZXZlbCB0aGF0IGlzIHVzZWQgYXMgdGhyZXNob2xkLgorICovCitHc3REZWJ1Z0xldmVsCitnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZCAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdGVnb3J5KQoreworICByZXR1cm4gKEdzdERlYnVnTGV2ZWwpIGdfYXRvbWljX2ludF9nZXQgKCZjYXRlZ29yeS0+dGhyZXNob2xkKTsKK30KKworLyoqCisgKiBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X25hbWU6CisgKiBAY2F0ZWdvcnk6IGEgI0dzdERlYnVnQ2F0ZWdvcnkgdG8gZ2V0IG5hbWUgb2YuCisgKgorICogUmV0dXJucyB0aGUgbmFtZSBvZiBhIGRlYnVnIGNhdGVnb3J5LgorICoKKyAqIFJldHVybnM6IHRoZSBuYW1lIG9mIHRoZSBjYXRlZ29yeS4KKyAqLworY29uc3QgZ2NoYXIgKgorZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9uYW1lIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnkpCit7CisgIHJldHVybiBjYXRlZ29yeS0+bmFtZTsKK30KKworLyoqCisgKiBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X2NvbG9yOgorICogQGNhdGVnb3J5OiBhICNHc3REZWJ1Z0NhdGVnb3J5IHRvIGdldCB0aGUgY29sb3Igb2YuCisgKgorICogUmV0dXJucyB0aGUgY29sb3Igb2YgYSBkZWJ1ZyBjYXRlZ29yeSB1c2VkIHdoZW4gcHJpbnRpbmcgb3V0cHV0IGluIHRoaXMKKyAqIGNhdGVnb3J5LgorICoKKyAqIFJldHVybnM6IHRoZSBjb2xvciBvZiB0aGUgY2F0ZWdvcnkuCisgKi8KK2d1aW50Citnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X2NvbG9yIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnkpCit7CisgIHJldHVybiBjYXRlZ29yeS0+Y29sb3I7Cit9CisKKy8qKgorICogZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9kZXNjcmlwdGlvbjoKKyAqIEBjYXRlZ29yeTogYSAjR3N0RGVidWdDYXRlZ29yeSB0byBnZXQgdGhlIGRlc2NyaXB0aW9uIG9mLgorICoKKyAqIFJldHVybnMgdGhlIGRlc2NyaXB0aW9uIG9mIGEgZGVidWcgY2F0ZWdvcnkuCisgKgorICogUmV0dXJuczogdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBjYXRlZ29yeS4KKyAqLworY29uc3QgZ2NoYXIgKgorZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9kZXNjcmlwdGlvbiAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdGVnb3J5KQoreworICByZXR1cm4gY2F0ZWdvcnktPmRlc2NyaXB0aW9uOworfQorCisvKioKKyAqIGdzdF9kZWJ1Z19nZXRfYWxsX2NhdGVnb3JpZXM6CisgKgorICogUmV0dXJucyBhIHNuYXBzaG90IG9mIGEgYWxsIGNhdGVnb3JpZXMgdGhhdCBhcmUgY3VycmVudGx5IGluIHVzZSAuIFRoaXMgbGlzdAorICogbWF5IGNoYW5nZSBhbnl0aW1lLgorICogVGhlIGNhbGxlciBoYXMgdG8gZnJlZSB0aGUgbGlzdCBhZnRlciB1c2UuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGNvbnRhaW5lcikgKGVsZW1lbnQtdHlwZSBHc3QuRGVidWdDYXRlZ29yeSk6IHRoZSBsaXN0IG9mCisgKiAgICAgZGVidWcgY2F0ZWdvcmllcworICovCitHU0xpc3QgKgorZ3N0X2RlYnVnX2dldF9hbGxfY2F0ZWdvcmllcyAodm9pZCkKK3sKKyAgR1NMaXN0ICpyZXQ7CisKKyAgZ19zdGF0aWNfbXV0ZXhfbG9jayAoJl9fY2F0X211dGV4KTsKKyAgcmV0ID0gZ19zbGlzdF9jb3B5IChfX2NhdGVnb3JpZXMpOworICBnX3N0YXRpY19tdXRleF91bmxvY2sgKCZfX2NhdF9tdXRleCk7CisKKyAgcmV0dXJuIHJldDsKK30KKworR3N0RGVidWdDYXRlZ29yeSAqCitfZ3N0X2RlYnVnX2dldF9jYXRlZ29yeSAoY29uc3QgZ2NoYXIgKiBuYW1lKQoreworICBHc3REZWJ1Z0NhdGVnb3J5ICpyZXQgPSBOVUxMOworICBHU0xpc3QgKm5vZGU7CisKKyAgZm9yIChub2RlID0gX19jYXRlZ29yaWVzOyBub2RlOyBub2RlID0gZ19zbGlzdF9uZXh0IChub2RlKSkgeworICAgIHJldCA9IChHc3REZWJ1Z0NhdGVnb3J5ICopIG5vZGUtPmRhdGE7CisgICAgaWYgKCFzdHJjbXAgKG5hbWUsIHJldC0+bmFtZSkpIHsKKyAgICAgIHJldHVybiByZXQ7CisgICAgfQorICB9CisgIHJldHVybiBOVUxMOworfQorCisvKioqIEZVTkNUSU9OIFBPSU5URVJTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgR0hhc2hUYWJsZSAqX19nc3RfZnVuY3Rpb25fcG9pbnRlcnM7ICAgICAvKiBOVUxMICovCitzdGF0aWMgR1N0YXRpY011dGV4IF9fZGJnX2Z1bmN0aW9uc19tdXRleCA9IEdfU1RBVElDX01VVEVYX0lOSVQ7CisKKy8qIFRoaXMgZnVuY3Rpb24gTVVTVCBOT1QgcmV0dXJuIE5VTEwgKi8KK2NvbnN0IGdjaGFyICoKK19nc3RfZGVidWdfbmFtZW9mX2Z1bmNwdHIgKEdzdERlYnVnRnVuY1B0ciBmdW5jKQoreworICBnY2hhciAqcHRybmFtZTsKKworI2lmZGVmIEhBVkVfRExBRERSCisgIERsX2luZm8gZGxfaW5mbzsKKyNlbmRpZgorCisgIGlmIChHX1VOTElLRUxZIChmdW5jID09IE5VTEwpKQorICAgIHJldHVybiAiKE5VTEwpIjsKKworICBnX3N0YXRpY19tdXRleF9sb2NrICgmX19kYmdfZnVuY3Rpb25zX211dGV4KTsKKyAgaWYgKEdfTElLRUxZIChfX2dzdF9mdW5jdGlvbl9wb2ludGVycykpIHsKKyAgICBwdHJuYW1lID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoX19nc3RfZnVuY3Rpb25fcG9pbnRlcnMsIChncG9pbnRlcikgZnVuYyk7CisgICAgZ19zdGF0aWNfbXV0ZXhfdW5sb2NrICgmX19kYmdfZnVuY3Rpb25zX211dGV4KTsKKyAgICBpZiAoR19MSUtFTFkgKHB0cm5hbWUpKQorICAgICAgcmV0dXJuIHB0cm5hbWU7CisgIH0gZWxzZSB7CisgICAgZ19zdGF0aWNfbXV0ZXhfdW5sb2NrICgmX19kYmdfZnVuY3Rpb25zX211dGV4KTsKKyAgfQorICAvKiB3ZSBuZWVkIHRvIGNyZWF0ZSBhbiBlbnRyeSBpbiB0aGUgaGFzaCB0YWJsZSBmb3IgdGhpcyBvbmUgc28gd2UgZG9uJ3QgbGVhaworICAgKiB0aGUgbmFtZSAqLworI2lmZGVmIEhBVkVfRExBRERSCisgIGlmIChkbGFkZHIgKChncG9pbnRlcikgZnVuYywgJmRsX2luZm8pICYmIGRsX2luZm8uZGxpX3NuYW1lKSB7CisgICAgZ2NoYXIgKm5hbWUgPSBnX3N0cmR1cCAoZGxfaW5mby5kbGlfc25hbWUpOworCisgICAgX2dzdF9kZWJ1Z19yZWdpc3Rlcl9mdW5jcHRyIChmdW5jLCBuYW1lKTsKKyAgICByZXR1cm4gbmFtZTsKKyAgfSBlbHNlCisjZW5kaWYKKyAgeworICAgIGdjaGFyICpuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgiJXAiLCAoZ3BvaW50ZXIpIGZ1bmMpOworCisgICAgX2dzdF9kZWJ1Z19yZWdpc3Rlcl9mdW5jcHRyIChmdW5jLCBuYW1lKTsKKyAgICByZXR1cm4gbmFtZTsKKyAgfQorfQorCit2b2lkCitfZ3N0X2RlYnVnX3JlZ2lzdGVyX2Z1bmNwdHIgKEdzdERlYnVnRnVuY1B0ciBmdW5jLCBjb25zdCBnY2hhciAqIHB0cm5hbWUpCit7CisgIGdwb2ludGVyIHB0ciA9IChncG9pbnRlcikgZnVuYzsKKworICBnX3N0YXRpY19tdXRleF9sb2NrICgmX19kYmdfZnVuY3Rpb25zX211dGV4KTsKKworICBpZiAoIV9fZ3N0X2Z1bmN0aW9uX3BvaW50ZXJzKQorICAgIF9fZ3N0X2Z1bmN0aW9uX3BvaW50ZXJzID0gZ19oYXNoX3RhYmxlX25ldyAoZ19kaXJlY3RfaGFzaCwgZ19kaXJlY3RfZXF1YWwpOworICBpZiAoIWdfaGFzaF90YWJsZV9sb29rdXAgKF9fZ3N0X2Z1bmN0aW9uX3BvaW50ZXJzLCBwdHIpKQorICAgIGdfaGFzaF90YWJsZV9pbnNlcnQgKF9fZ3N0X2Z1bmN0aW9uX3BvaW50ZXJzLCBwdHIsIChncG9pbnRlcikgcHRybmFtZSk7CisKKyAgZ19zdGF0aWNfbXV0ZXhfdW5sb2NrICgmX19kYmdfZnVuY3Rpb25zX211dGV4KTsKK30KKworLyoqKiBQUklOVEYgRVhURU5TSU9OUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIEhBVkVfUFJJTlRGX0VYVEVOU0lPTgorc3RhdGljIGludAorX2dzdF9pbmZvX3ByaW50Zl9leHRlbnNpb25fcHRyIChGSUxFICogc3RyZWFtLCBjb25zdCBzdHJ1Y3QgcHJpbnRmX2luZm8gKmluZm8sCisgICAgY29uc3Qgdm9pZCAqY29uc3QgKmFyZ3MpCit7CisgIGNoYXIgKmJ1ZmZlcjsKKyAgaW50IGxlbjsKKyAgdm9pZCAqcHRyOworCisgIGJ1ZmZlciA9IE5VTEw7CisgIHB0ciA9ICoodm9pZCAqKikgYXJnc1swXTsKKworICBidWZmZXIgPSBnc3RfZGVidWdfcHJpbnRfb2JqZWN0IChwdHIpOworICBsZW4gPSBmcHJpbnRmIChzdHJlYW0sICIlKnMiLCAoaW5mby0+bGVmdCA/IC1pbmZvLT53aWR0aCA6IGluZm8tPndpZHRoKSwKKyAgICAgIGJ1ZmZlcik7CisKKyAgZ19mcmVlIChidWZmZXIpOworICByZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50CitfZ3N0X2luZm9fcHJpbnRmX2V4dGVuc2lvbl9zZWdtZW50IChGSUxFICogc3RyZWFtLAorICAgIGNvbnN0IHN0cnVjdCBwcmludGZfaW5mbyAqaW5mbywgY29uc3Qgdm9pZCAqY29uc3QgKmFyZ3MpCit7CisgIGNoYXIgKmJ1ZmZlcjsKKyAgaW50IGxlbjsKKyAgdm9pZCAqcHRyOworCisgIGJ1ZmZlciA9IE5VTEw7CisgIHB0ciA9ICoodm9pZCAqKikgYXJnc1swXTsKKworICBidWZmZXIgPSBnc3RfZGVidWdfcHJpbnRfc2VnbWVudCAocHRyKTsKKyAgbGVuID0gZnByaW50ZiAoc3RyZWFtLCAiJSpzIiwgKGluZm8tPmxlZnQgPyAtaW5mby0+d2lkdGggOiBpbmZvLT53aWR0aCksCisgICAgICBidWZmZXIpOworCisgIGdfZnJlZSAoYnVmZmVyKTsKKyAgcmV0dXJuIGxlbjsKK30KKworI2lmZGVmIEhBVkVfUkVHSVNURVJfUFJJTlRGX1NQRUNJRklFUgorc3RhdGljIGludAorX2dzdF9pbmZvX3ByaW50Zl9leHRlbnNpb25fYXJnaW5mbyAoY29uc3Qgc3RydWN0IHByaW50Zl9pbmZvICppbmZvLCBzaXplX3QgbiwKKyAgICBpbnQgKmFyZ3R5cGVzLCBpbnQgKnNpemUpCisjZWxzZQorc3RhdGljIGludAorX2dzdF9pbmZvX3ByaW50Zl9leHRlbnNpb25fYXJnaW5mbyAoY29uc3Qgc3RydWN0IHByaW50Zl9pbmZvICppbmZvLCBzaXplX3QgbiwKKyAgICBpbnQgKmFyZ3R5cGVzKQorI2VuZGlmCit7CisgIGlmIChuID4gMCkgeworICAgIGFyZ3R5cGVzWzBdID0gUEFfUE9JTlRFUjsKKyNpZmRlZiBIQVZFX1JFR0lTVEVSX1BSSU5URl9TUEVDSUZJRVIKKyAgICAqc2l6ZSA9IHNpemVvZiAoZ3BvaW50ZXIpOworI2VuZGlmCisgIH0KKyAgcmV0dXJuIDE7Cit9CisjZW5kaWYgLyogSEFWRV9QUklOVEZfRVhURU5TSU9OICovCisKK3N0YXRpYyB2b2lkCitnc3RfaW5mb19kdW1wX21lbV9saW5lIChnY2hhciAqIGxpbmVidWYsIGdzaXplIGxpbmVidWZfc2l6ZSwKKyAgICBjb25zdCBndWludDggKiBtZW0sIGdzaXplIG1lbV9vZmZzZXQsIGdzaXplIG1lbV9zaXplKQoreworICBnY2hhciBoZXhzdHJbNTBdLCBhc2NzdHJbMThdLCBkaWdpdHN0cls0XTsKKworICBpZiAobWVtX3NpemUgPiAxNikKKyAgICBtZW1fc2l6ZSA9IDE2OworCisgIGhleHN0clswXSA9ICdcMCc7CisgIGFzY3N0clswXSA9ICdcMCc7CisKKyAgaWYgKG1lbSAhPSBOVUxMKSB7CisgICAgZ3VpbnQgaSA9IDA7CisKKyAgICBtZW0gKz0gbWVtX29mZnNldDsKKyAgICB3aGlsZSAoaSA8IG1lbV9zaXplKSB7CisgICAgICBhc2NzdHJbaV0gPSAoZ19hc2NpaV9pc3ByaW50IChtZW1baV0pKSA/IG1lbVtpXSA6ICcuJzsKKyAgICAgIGdfc25wcmludGYgKGRpZ2l0c3RyLCBzaXplb2YgKGRpZ2l0c3RyKSwgIiUwMnggIiwgbWVtW2ldKTsKKyAgICAgIGdfc3RybGNhdCAoaGV4c3RyLCBkaWdpdHN0ciwgc2l6ZW9mIChoZXhzdHIpKTsKKyAgICAgICsraTsKKyAgICB9CisgICAgYXNjc3RyW2ldID0gJ1wwJzsKKyAgfQorCisgIGdfc25wcmludGYgKGxpbmVidWYsIGxpbmVidWZfc2l6ZSwgIiUwOHg6ICUtNDguNDhzICUtMTYuMTZzIiwKKyAgICAgIChndWludCkgbWVtX29mZnNldCwgaGV4c3RyLCBhc2NzdHIpOworfQorCit2b2lkCitfZ3N0X2RlYnVnX2R1bXBfbWVtIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0LCBjb25zdCBnY2hhciAqIGZpbGUsCisgICAgY29uc3QgZ2NoYXIgKiBmdW5jLCBnaW50IGxpbmUsIEdPYmplY3QgKiBvYmosIGNvbnN0IGdjaGFyICogbXNnLAorICAgIGNvbnN0IGd1aW50OCAqIGRhdGEsIGd1aW50IGxlbmd0aCkKK3sKKyAgZ3VpbnQgb2ZmID0gMDsKKworICBnc3RfZGVidWdfbG9nICgoY2F0KSwgR1NUX0xFVkVMX01FTURVTVAsIGZpbGUsIGZ1bmMsIGxpbmUsIG9iaiwgIi0tLS0tLS0tIgorICAgICAgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKworICBpZiAobXNnICE9IE5VTEwgJiYgKm1zZyAhPSAnXDAnKSB7CisgICAgZ3N0X2RlYnVnX2xvZyAoKGNhdCksIEdTVF9MRVZFTF9NRU1EVU1QLCBmaWxlLCBmdW5jLCBsaW5lLCBvYmosICIlcyIsIG1zZyk7CisgIH0KKworICB3aGlsZSAob2ZmIDwgbGVuZ3RoKSB7CisgICAgZ2NoYXIgYnVmWzEyOF07CisKKyAgICAvKiBnc3RfaW5mb19kdW1wX21lbV9saW5lIHdpbGwgcHJvY2VzcyAxNiBieXRlcyBhdCBtb3N0ICovCisgICAgZ3N0X2luZm9fZHVtcF9tZW1fbGluZSAoYnVmLCBzaXplb2YgKGJ1ZiksIGRhdGEsIG9mZiwgbGVuZ3RoIC0gb2ZmKTsKKyAgICBnc3RfZGVidWdfbG9nIChjYXQsIEdTVF9MRVZFTF9NRU1EVU1QLCBmaWxlLCBmdW5jLCBsaW5lLCBvYmosICIlcyIsIGJ1Zik7CisgICAgb2ZmICs9IDE2OworICB9CisKKyAgZ3N0X2RlYnVnX2xvZyAoKGNhdCksIEdTVF9MRVZFTF9NRU1EVU1QLCBmaWxlLCBmdW5jLCBsaW5lLCBvYmosICItLS0tLS0tLSIKKyAgICAgICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7Cit9CisKKyNlbHNlIC8qICFHU1RfRElTQUJMRV9HU1RfREVCVUcgKi8KKyNpZm5kZWYgR1NUX1JFTU9WRV9ESVNBQkxFRAorCitHc3REZWJ1Z0NhdGVnb3J5ICoKK19nc3RfZGVidWdfY2F0ZWdvcnlfbmV3IChjb25zdCBnY2hhciAqIG5hbWUsIGd1aW50IGNvbG9yLAorICAgIGNvbnN0IGdjaGFyICogZGVzY3JpcHRpb24pCit7CisgIHJldHVybiBOVUxMOworfQorCit2b2lkCitfZ3N0X2RlYnVnX3JlZ2lzdGVyX2Z1bmNwdHIgKEdzdERlYnVnRnVuY1B0ciBmdW5jLCBjb25zdCBnY2hhciAqIHB0cm5hbWUpCit7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gTVVTVCBOT1QgcmV0dXJuIE5VTEwgKi8KK2NvbnN0IGdjaGFyICoKK19nc3RfZGVidWdfbmFtZW9mX2Z1bmNwdHIgKEdzdERlYnVnRnVuY1B0ciBmdW5jKQoreworICByZXR1cm4gIihOVUxMKSI7Cit9CisKK3ZvaWQKK2dzdF9kZWJ1Z19sb2cgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXRlZ29yeSwgR3N0RGVidWdMZXZlbCBsZXZlbCwKKyAgICBjb25zdCBnY2hhciAqIGZpbGUsIGNvbnN0IGdjaGFyICogZnVuY3Rpb24sIGdpbnQgbGluZSwKKyAgICBHT2JqZWN0ICogb2JqZWN0LCBjb25zdCBnY2hhciAqIGZvcm1hdCwgLi4uKQoreworfQorCit2b2lkCitnc3RfZGVidWdfbG9nX3ZhbGlzdCAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdGVnb3J5LCBHc3REZWJ1Z0xldmVsIGxldmVsLAorICAgIGNvbnN0IGdjaGFyICogZmlsZSwgY29uc3QgZ2NoYXIgKiBmdW5jdGlvbiwgZ2ludCBsaW5lLAorICAgIEdPYmplY3QgKiBvYmplY3QsIGNvbnN0IGdjaGFyICogZm9ybWF0LCB2YV9saXN0IGFyZ3MpCit7Cit9CisKK2NvbnN0IGdjaGFyICoKK2dzdF9kZWJ1Z19tZXNzYWdlX2dldCAoR3N0RGVidWdNZXNzYWdlICogbWVzc2FnZSkKK3sKKyAgcmV0dXJuICIiOworfQorCit2b2lkCitnc3RfZGVidWdfbG9nX2RlZmF1bHQgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXRlZ29yeSwgR3N0RGVidWdMZXZlbCBsZXZlbCwKKyAgICBjb25zdCBnY2hhciAqIGZpbGUsIGNvbnN0IGdjaGFyICogZnVuY3Rpb24sIGdpbnQgbGluZSwKKyAgICBHT2JqZWN0ICogb2JqZWN0LCBHc3REZWJ1Z01lc3NhZ2UgKiBtZXNzYWdlLCBncG9pbnRlciB1bnVzZWQpCit7Cit9CisKK2NvbnN0IGdjaGFyICoKK2dzdF9kZWJ1Z19sZXZlbF9nZXRfbmFtZSAoR3N0RGVidWdMZXZlbCBsZXZlbCkKK3sKKyAgcmV0dXJuICJOT05FIjsKK30KKwordm9pZAorZ3N0X2RlYnVnX2FkZF9sb2dfZnVuY3Rpb24gKEdzdExvZ0Z1bmN0aW9uIGZ1bmMsIGdwb2ludGVyIGRhdGEpCit7Cit9CisKK2d1aW50Citnc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbiAoR3N0TG9nRnVuY3Rpb24gZnVuYykKK3sKKyAgcmV0dXJuIDA7Cit9CisKK2d1aW50Citnc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbl9ieV9kYXRhIChncG9pbnRlciBkYXRhKQoreworICByZXR1cm4gMDsKK30KKwordm9pZAorZ3N0X2RlYnVnX3NldF9hY3RpdmUgKGdib29sZWFuIGFjdGl2ZSkKK3sKK30KKworZ2Jvb2xlYW4KK2dzdF9kZWJ1Z19pc19hY3RpdmUgKHZvaWQpCit7CisgIHJldHVybiBGQUxTRTsKK30KKwordm9pZAorZ3N0X2RlYnVnX3NldF9jb2xvcmVkIChnYm9vbGVhbiBjb2xvcmVkKQoreworfQorCitnYm9vbGVhbgorZ3N0X2RlYnVnX2lzX2NvbG9yZWQgKHZvaWQpCit7CisgIHJldHVybiBGQUxTRTsKK30KKwordm9pZAorZ3N0X2RlYnVnX3NldF9kZWZhdWx0X3RocmVzaG9sZCAoR3N0RGVidWdMZXZlbCBsZXZlbCkKK3sKK30KKworR3N0RGVidWdMZXZlbAorZ3N0X2RlYnVnX2dldF9kZWZhdWx0X3RocmVzaG9sZCAodm9pZCkKK3sKKyAgcmV0dXJuIEdTVF9MRVZFTF9OT05FOworfQorCit2b2lkCitnc3RfZGVidWdfc2V0X3RocmVzaG9sZF9mb3JfbmFtZSAoY29uc3QgZ2NoYXIgKiBuYW1lLCBHc3REZWJ1Z0xldmVsIGxldmVsKQoreworfQorCit2b2lkCitnc3RfZGVidWdfdW5zZXRfdGhyZXNob2xkX2Zvcl9uYW1lIChjb25zdCBnY2hhciAqIG5hbWUpCit7Cit9CisKK3ZvaWQKK2dzdF9kZWJ1Z19jYXRlZ29yeV9mcmVlIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnkpCit7Cit9CisKK3ZvaWQKK2dzdF9kZWJ1Z19jYXRlZ29yeV9zZXRfdGhyZXNob2xkIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnksCisgICAgR3N0RGVidWdMZXZlbCBsZXZlbCkKK3sKK30KKwordm9pZAorZ3N0X2RlYnVnX2NhdGVnb3J5X3Jlc2V0X3RocmVzaG9sZCAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdGVnb3J5KQoreworfQorCitHc3REZWJ1Z0xldmVsCitnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZCAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdGVnb3J5KQoreworICByZXR1cm4gR1NUX0xFVkVMX05PTkU7Cit9CisKK2NvbnN0IGdjaGFyICoKK2dzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfbmFtZSAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdGVnb3J5KQoreworICByZXR1cm4gIiI7Cit9CisKK2d1aW50Citnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X2NvbG9yIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnkpCit7CisgIHJldHVybiAwOworfQorCitjb25zdCBnY2hhciAqCitnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X2Rlc2NyaXB0aW9uIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnkpCit7CisgIHJldHVybiAiIjsKK30KKworR1NMaXN0ICoKK2dzdF9kZWJ1Z19nZXRfYWxsX2NhdGVnb3JpZXMgKHZvaWQpCit7CisgIHJldHVybiBOVUxMOworfQorCitHc3REZWJ1Z0NhdGVnb3J5ICoKK19nc3RfZGVidWdfZ2V0X2NhdGVnb3J5IChjb25zdCBnY2hhciAqIG5hbWUpCit7CisgIHJldHVybiBOVUxMOworfQorCitnY2hhciAqCitnc3RfZGVidWdfY29uc3RydWN0X3Rlcm1fY29sb3IgKGd1aW50IGNvbG9yaW5mbykKK3sKKyAgcmV0dXJuIGdfc3RyZHVwICgiMDAiKTsKK30KKworZ2ludAorZ3N0X2RlYnVnX2NvbnN0cnVjdF93aW5fY29sb3IgKGd1aW50IGNvbG9yaW5mbykKK3sKKyAgcmV0dXJuIDA7Cit9CisKK2dib29sZWFuCitfcHJpdl9nc3RfaW5fdmFsZ3JpbmQgKHZvaWQpCit7CisgIHJldHVybiBGQUxTRTsKK30KKwordm9pZAorX2dzdF9kZWJ1Z19kdW1wX21lbSAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdCwgY29uc3QgZ2NoYXIgKiBmaWxlLAorICAgIGNvbnN0IGdjaGFyICogZnVuYywgZ2ludCBsaW5lLCBHT2JqZWN0ICogb2JqLCBjb25zdCBnY2hhciAqIG1zZywKKyAgICBjb25zdCBndWludDggKiBkYXRhLCBndWludCBsZW5ndGgpCit7Cit9CisjZW5kaWYgLyogR1NUX1JFTU9WRV9ESVNBQkxFRCAqLworI2VuZGlmIC8qIEdTVF9ESVNBQkxFX0dTVF9ERUJVRyAqLworCisKKyNpZmRlZiBHU1RfRU5BQkxFX0ZVTkNfSU5TVFJVTUVOVEFUSU9OCisvKiBGSVhNRSBtYWtlIHRoaXMgdGhyZWFkIHNwZWNpZmljICovCitzdGF0aWMgR1NMaXN0ICpzdGFja190cmFjZSA9IE5VTEw7CisKK3ZvaWQKK19fY3lnX3Byb2ZpbGVfZnVuY19lbnRlciAodm9pZCAqdGhpc19mbiwgdm9pZCAqY2FsbF9zaXRlKQorICAgIEdfR05VQ19OT19JTlNUUlVNRU5UOworICAgICB2b2lkIF9fY3lnX3Byb2ZpbGVfZnVuY19lbnRlciAodm9pZCAqdGhpc19mbiwgdm9pZCAqY2FsbF9zaXRlKQoreworICBnY2hhciAqbmFtZSA9IF9nc3RfZGVidWdfbmFtZW9mX2Z1bmNwdHIgKHRoaXNfZm4pOworICBnY2hhciAqc2l0ZSA9IF9nc3RfZGVidWdfbmFtZW9mX2Z1bmNwdHIgKGNhbGxfc2l0ZSk7CisKKyAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DQUxMX1RSQUNFLCAiZW50ZXJpbmcgZnVuY3Rpb24gJXMgZnJvbSAlcyIsIG5hbWUsCisgICAgICBzaXRlKTsKKyAgc3RhY2tfdHJhY2UgPQorICAgICAgZ19zbGlzdF9wcmVwZW5kIChzdGFja190cmFjZSwgZ19zdHJkdXBfcHJpbnRmICgiJThwIGluICVzIGZyb20gJXAgKCVzKSIsCisgICAgICAgICAgdGhpc19mbiwgbmFtZSwgY2FsbF9zaXRlLCBzaXRlKSk7CisKKyAgZ19mcmVlIChuYW1lKTsKKyAgZ19mcmVlIChzaXRlKTsKK30KKwordm9pZAorX19jeWdfcHJvZmlsZV9mdW5jX2V4aXQgKHZvaWQgKnRoaXNfZm4sIHZvaWQgKmNhbGxfc2l0ZSkKKyAgICBHX0dOVUNfTk9fSU5TVFJVTUVOVDsKKyAgICAgdm9pZCBfX2N5Z19wcm9maWxlX2Z1bmNfZXhpdCAodm9pZCAqdGhpc19mbiwgdm9pZCAqY2FsbF9zaXRlKQoreworICBnY2hhciAqbmFtZSA9IF9nc3RfZGVidWdfbmFtZW9mX2Z1bmNwdHIgKHRoaXNfZm4pOworCisgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0FMTF9UUkFDRSwgImxlYXZpbmcgZnVuY3Rpb24gJXMiLCBuYW1lKTsKKyAgZ19mcmVlIChzdGFja190cmFjZS0+ZGF0YSk7CisgIHN0YWNrX3RyYWNlID0gZ19zbGlzdF9kZWxldGVfbGluayAoc3RhY2tfdHJhY2UsIHN0YWNrX3RyYWNlKTsKKworICBnX2ZyZWUgKG5hbWUpOworfQorCisvKioKKyAqIGdzdF9kZWJ1Z19wcmludF9zdGFja190cmFjZToKKyAqCisgKiBJZiBHU1RfRU5BQkxFX0ZVTkNfSU5TVFJVTUVOVEFUSU9OIGlzIGRlZmluZWQgYSBzdGFja3RyYWNlIGlzIGF2YWlsYWJsZSBmb3IKKyAqIGdzdHJlYW1lciBjb2RlLCB3aGljaCBjYW4gYmUgcHJpbnRlZCB3aXRoIHRoaXMgZnVuY3Rpb24uCisgKi8KK3ZvaWQKK2dzdF9kZWJ1Z19wcmludF9zdGFja190cmFjZSAodm9pZCkKK3sKKyAgR1NMaXN0ICp3YWxrID0gc3RhY2tfdHJhY2U7CisgIGdpbnQgY291bnQgPSAwOworCisgIGlmICh3YWxrKQorICAgIHdhbGsgPSBnX3NsaXN0X25leHQgKHdhbGspOworCisgIHdoaWxlICh3YWxrKSB7CisgICAgZ2NoYXIgKm5hbWUgPSAoZ2NoYXIgKikgd2Fsay0+ZGF0YTsKKworICAgIGdfcHJpbnQgKCIjJS0yZCAlc1xuIiwgY291bnQrKywgbmFtZSk7CisKKyAgICB3YWxrID0gZ19zbGlzdF9uZXh0ICh3YWxrKTsKKyAgfQorfQorI2Vsc2UKK3ZvaWQKK2dzdF9kZWJ1Z19wcmludF9zdGFja190cmFjZSAodm9pZCkKK3sKKyAgLyogbm90aGluZyBiZWNhdXNlIGl0J3MgY29tcGlsZWQgb3V0ICovCit9CisKKyNlbmRpZiAvKiBHU1RfRU5BQkxFX0ZVTkNfSU5TVFJVTUVOVEFUSU9OICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0aW5mby5oIGIvZ3N0L2dzdGluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODQxY2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdGluZm8uaApAQCAtMCwwICsxLDE1NDkgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAzIEJlbmphbWluIE90dGUgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgorICoKKyAqIGdzdGluZm8uaDogZGVidWdnaW5nIGZ1bmN0aW9ucworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19HU1RJTkZPX0hfXworI2RlZmluZSBfX0dTVElORk9fSF9fCisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Y29uZmlnLmg+CisKK0dfQkVHSU5fREVDTFMKKworLyoqCisgKiBHc3REZWJ1Z0xldmVsOgorICogQEdTVF9MRVZFTF9OT05FOiBObyBkZWJ1Z2dpbmcgbGV2ZWwgc3BlY2lmaWVkIG9yIGRlc2lyZWQuIFVzZWQgdG8gZGVhY3RpdmF0ZQorICogIGRlYnVnZ2luZyBvdXRwdXQuCisgKiBAR1NUX0xFVkVMX0VSUk9SOiBFcnJvciBtZXNzYWdlcyBhcmUgdG8gYmUgdXNlZCBvbmx5IHdoZW4gYW4gZXJyb3Igb2NjdXJlZAorICogIHRoYXQgc3RvcHMgdGhlIGFwcGxpY2F0aW9uIGZyb20ga2VlcGluZyB3b3JraW5nIGNvcnJlY3RseS4KKyAqICBBbiBleGFtcGxlcyBpcyBnc3RfZWxlbWVudF9lcnJvciwgd2hpY2ggb3V0cHV0cyBhIG1lc3NhZ2Ugd2l0aCB0aGlzIHByaW9yaXR5LgorICogIEl0IGRvZXMgbm90IG1lYW4gdGhhdCB0aGUgYXBwbGljYXRpb24gaXMgdGVybWluYXRpbmcgYXMgd2l0aCBnX2VycnJvci4KKyAqIEBHU1RfTEVWRUxfV0FSTklORzogV2FybmluZyBtZXNzYWdlcyBhcmUgdG8gaW5mb3JtIGFib3V0IGFibm9ybWFsIGJlaGF2aW91cgorICogIHRoYXQgY291bGQgbGVhZCB0byBwcm9ibGVtcyBvciB3ZWlyZCBiZWhhdmlvdXIgbGF0ZXIgb24uIEFuIGV4YW1wbGUgb2YgdGhpcworICogIHdvdWxkIGJlIGNsb2NraW5nIGlzc3VlcyAoInlvdXIgY29tcHV0ZXIgaXMgcHJldHR5IHNsb3ciKSBvciBicm9rZW4gaW5wdXQKKyAqICBkYXRhICgiQ2FuJ3Qgc3luY2hyb25pemUgdG8gc3RyZWFtLiIpCisgKiBAR1NUX0xFVkVMX0lORk86IEluZm9ybWF0aW9uYWwgbWVzc2FnZXMgc2hvdWxkIGJlIHVzZWQgdG8ga2VlcCB0aGUgZGV2ZWxvcGVyCisgKiAgdXBkYXRlZCBhYm91dCB3aGF0IGlzIGhhcHBlbmluZy4KKyAqICBFeGFtcGxlcyB3aGVyZSB0aGlzIHNob3VsZCBiZSB1c2VkIGFyZSB3aGVuIGEgdHlwZWZpbmQgZnVuY3Rpb24gaGFzCisgKiAgc3VjY2Vzc2Z1bGx5IGRldGVybWluZWQgdGhlIHR5cGUgb2YgdGhlIHN0cmVhbSBvciB3aGVuIGFuIG1wMyBwbHVnaW4gZGV0ZWN0cworICogIHRoZSBmb3JtYXQgdG8gYmUgdXNlZC4gKCJUaGlzIGZpbGUgaGFzIG1vbm8gc291bmQuIikKKyAqIEBHU1RfTEVWRUxfREVCVUc6IERlYnVnZ2luZyBtZXNzYWdlcyBzaG91bGQgYmUgdXNlZCB3aGVuIHNvbWV0aGluZyBjb21tb24KKyAqICBoYXBwZW5zIHRoYXQgaXMgbm90IHRoZSBleHBlY3RlZCBkZWZhdWx0IGJlaGF2aW9yLCBvciBzb21ldGhpbmcgdGhhdCdzCisgKiAgdXNlZnVsIHRvIGtub3cgYnV0IGRvZXNuJ3QgaGFwcGVuIGFsbCB0aGUgdGltZSAoaWUuIHBlciBsb29wIGl0ZXJhdGlvbiBvcgorICogIGJ1ZmZlciBwcm9jZXNzZWQgb3IgZXZlbnQgaGFuZGxlZCkuCisgKiAgQW4gZXhhbXBsZSB3b3VsZCBiZSBub3RpZmljYXRpb25zIGFib3V0IHN0YXRlIGNoYW5nZXMgb3IgcmVjZWl2aW5nL3NlbmRpbmcKKyAqICBvZiBldmVudHMuCisgKiBAR1NUX0xFVkVMX0xPRzogTG9nIG1lc3NhZ2VzIGFyZSBtZXNzYWdlcyB0aGF0IGFyZSB2ZXJ5IGNvbW1vbiBidXQgbWlnaHQgYmUKKyAqICB1c2VmdWwgdG8ga25vdy4gQXMgYSBydWxlIG9mIHRodW1iIGEgcGlwZWxpbmUgdGhhdCBpcyBpdGVyYXRpbmcgYXMgZXhwZWN0ZWQKKyAqICBzaG91bGQgbmV2ZXIgb3V0cHV0IGFueXRoaW5nIGVsc2UgYnV0IExPRyBtZXNzYWdlcy4gVXNlIHRoaXMgbG9nIGxldmVsIHRvCisgKiAgbG9nIHJlY3VycmluZyBpbmZvcm1hdGlvbiBpbiBjaGFpbiBmdW5jdGlvbnMgYW5kIGxvb3AgZnVuY3Rpb25zLCBmb3IKKyAqICBleGFtcGxlLgorICogQEdTVF9MRVZFTF9GSVhNRTogRml4bWUgbWVzc2FnZXMgYXJlIG1lc3NhZ2VzIHRoYXQgaW5kaWNhdGUgdGhhdCBzb21ldGhpbmcKKyAqICBpbiB0aGUgZXhlY3V0ZWQgY29kZSBwYXRoIGlzIG5vdCBmdWxseSBpbXBsZW1lbnRlZCBvciBoYW5kbGVkIHlldC4gTm90ZQorICogIHRoYXQgdGhpcyBkb2VzIG5vdCByZXBsYWNlIHByb3BlciBlcnJvciBoYW5kbGluZyBpbiBhbnkgd2F5LCB0aGUgcHVycG9zZQorICogIG9mIHRoaXMgbWVzc2FnZSBpcyB0byBtYWtlIGl0IGVhc2llciB0byBzcG90IGluY29tcGxldGUvdW5maW5pc2hlZCBwaWVjZXMKKyAqICBvZiBjb2RlIHdoZW4gcmVhZGluZyB0aGUgZGVidWcgbG9nLiAoU2luY2U6IDAuMTAuMjMpCisgKiBAR1NUX0xFVkVMX1RSQUNFOiBUcmFjaW5nLXJlbGF0ZWQgbWVzc2FnZXMgKFNpbmNlOiAwLjEwLjMwKQorICogIEV4YW1wbGVzIGZvciB0aGlzIGFyZSByZWZlcmVuY2luZy9kZXJlZmVyZW5jaW5nIG9mIG9iamVjdHMuCisgKiBAR1NUX0xFVkVMX01FTURVTVA6IG1lbW9yeSBkdW1wIG1lc3NhZ2VzIGFyZSB1c2VkIHRvIGxvZyAoc21hbGwpIGNodW5rcyBvZgorICogIGRhdGEgYXMgbWVtb3J5IGR1bXBzIGluIHRoZSBsb2cuIFRoZXkgd2lsbCBiZSBkaXNwbGF5ZWQgYXMgaGV4ZHVtcCB3aXRoCisgKiAgQVNDSUkgY2hhcmFjdGVycy4gKFNpbmNlOiAwLjEwLjIzKQorICogQEdTVF9MRVZFTF9DT1VOVDogVGhlIG51bWJlciBvZiBkZWZpbmVkIGRlYnVnZ2luZyBsZXZlbHMuCisgKgorICogVGhlIGxldmVsIGRlZmluZXMgdGhlIGltcG9ydGFuY2Ugb2YgYSBkZWJ1Z2dpbmcgbWVzc2FnZS4gVGhlIG1vcmUgaW1wb3J0YW50IGEKKyAqIG1lc3NhZ2UgaXMsIHRoZSBncmVhdGVyIHRoZSBwcm9iYWJpbGl0eSB0aGF0IHRoZSBkZWJ1Z2dpbmcgc3lzdGVtIG91dHB1dHMgaXQuCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIEdTVF9MRVZFTF9OT05FID0gMCwKKyAgR1NUX0xFVkVMX0VSUk9SLAorICBHU1RfTEVWRUxfV0FSTklORywKKyAgR1NUX0xFVkVMX0lORk8sCisgIEdTVF9MRVZFTF9ERUJVRywKKyAgR1NUX0xFVkVMX0xPRywKKyAgR1NUX0xFVkVMX0ZJWE1FID0gNiwKKyAgR1NUX0xFVkVMX1RSQUNFID0gNywKKyAgLyogYWRkIG1vcmUgKi8KKyAgR1NUX0xFVkVMX01FTURVTVAgPSA5LAorICAvKiBhZGQgbW9yZSAqLworICBHU1RfTEVWRUxfQ09VTlQKK30gR3N0RGVidWdMZXZlbDsKKworLyoqCisgKiBHU1RfTEVWRUxfREVGQVVMVDoKKyAqCisgKiBEZWZpbmVzIHRoZSBkZWZhdWx0IGRlYnVnZ2luZyBsZXZlbCB0byBiZSB1c2VkIHdpdGggR1N0cmVhbWVyLiBJdCBpcyBub3JtYWxseQorICogc2V0IHRvICNHU1RfTEVWRUxfTk9ORSBzbyBub3RoaW5nIGdldCBwcmludGVkLgorICogQXMgaXQgY2FuIGJlIGNvbmZpZ3VyZWQgYXQgY29tcGlsZSB0aW1lLCBkZXZlbG9wZXIgYnVpbGRzIG1heSBjaG9zZSB0bworICogb3ZlcnJpZGUgdGhhdCB0aG91Z2guCisgKiBZb3UgY2FuIHVzZSB0aGlzIGFzIGFuIGFyZ3VtZW50IHRvIGdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGQoKSB0bworICogcmVzZXQgdGhlIGRlYnVnZ2luZyBvdXRwdXQgdG8gZGVmYXVsdCBiZWhhdmlvdXIuCisgKi8KKyNpZm5kZWYgR1NUX0xFVkVMX0RFRkFVTFQKKyNkZWZpbmUgR1NUX0xFVkVMX0RFRkFVTFQgR1NUX0xFVkVMX05PTkUKKyNlbmRpZgorCisvKiBkZWZpbmVzIGZvciBmb3JtYXQgKGNvbG9ycyBldGMpCisgKiBkb24ndCBjaGFuZ2UgdGhlbSBhcm91bmQsIGl0IHVzZXMgdGVybWluYWwgbGF5b3V0CisgKiBUZXJtaW5hbCBjb2xvciBzdHJpbmdzOgorICogMDA9bm9uZSAwMT1ib2xkIDA0PXVuZGVyc2NvcmUgMDU9YmxpbmsgMDc9cmV2ZXJzZSAwOD1jb25jZWFsZWQKKyAqIFRleHQgY29sb3IgY29kZXM6CisgKiAzMD1ibGFjayAzMT1yZWQgMzI9Z3JlZW4gMzM9eWVsbG93IDM0PWJsdWUgMzU9bWFnZW50YSAzNj1jeWFuIDM3PXdoaXRlCisgKiBCYWNrZ3JvdW5kIGNvbG9yIGNvZGVzOgorICogNDA9YmxhY2sgNDE9cmVkIDQyPWdyZWVuIDQzPXllbGxvdyA0ND1ibHVlIDQ1PW1hZ2VudGEgNDY9Y3lhbiA0Nz13aGl0ZQorICovCisvKioKKyAqIEdzdERlYnVnQ29sb3JGbGFnczoKKyAqIEBHU1RfREVCVUdfRkdfQkxBQ0s6IFVzZSBibGFjayBhcyBmb3JlZ3JvdW5kIGNvbG9yLgorICogQEdTVF9ERUJVR19GR19SRUQ6IFVzZSByZWQgYXMgZm9yZWdyb3VuZCBjb2xvci4KKyAqIEBHU1RfREVCVUdfRkdfR1JFRU46IFVzZSBncmVlbiBhcyBmb3JlZ3JvdW5kIGNvbG9yLgorICogQEdTVF9ERUJVR19GR19ZRUxMT1c6IFVzZSB5ZWxsb3cgYXMgZm9yZWdyb3VuZCBjb2xvci4KKyAqIEBHU1RfREVCVUdfRkdfQkxVRTogVXNlIGJsdWUgYXMgZm9yZWdyb3VuZCBjb2xvci4KKyAqIEBHU1RfREVCVUdfRkdfTUFHRU5UQTogVXNlIG1hZ2VudGEgYXMgZm9yZWdyb3VuZCBjb2xvci4KKyAqIEBHU1RfREVCVUdfRkdfQ1lBTjogVXNlIGN5YW4gYXMgZm9yZWdyb3VuZCBjb2xvci4KKyAqIEBHU1RfREVCVUdfRkdfV0hJVEU6IFVzZSB3aGl0ZSBhcyBmb3JlZ3JvdW5kIGNvbG9yLgorICogQEdTVF9ERUJVR19CR19CTEFDSzogVXNlIGJsYWNrIGFzIGJhY2tncm91bmQgY29sb3IuCisgKiBAR1NUX0RFQlVHX0JHX1JFRDogVXNlIHJlZCBhcyBiYWNrZ3JvdW5kIGNvbG9yLgorICogQEdTVF9ERUJVR19CR19HUkVFTjogVXNlIGdyZWVuIGFzIGJhY2tncm91bmQgY29sb3IuCisgKiBAR1NUX0RFQlVHX0JHX1lFTExPVzogVXNlIHllbGxvdyBhcyBiYWNrZ3JvdW5kIGNvbG9yLgorICogQEdTVF9ERUJVR19CR19CTFVFOiBVc2UgYmx1ZSBhcyBiYWNrZ3JvdW5kIGNvbG9yLgorICogQEdTVF9ERUJVR19CR19NQUdFTlRBOiBVc2UgbWFnZW50YSBhcyBiYWNrZ3JvdW5kIGNvbG9yLgorICogQEdTVF9ERUJVR19CR19DWUFOOiBVc2UgY3lhbiBhcyBiYWNrZ3JvdW5kIGNvbG9yLgorICogQEdTVF9ERUJVR19CR19XSElURTogVXNlIHdoaXRlIGFzIGJhY2tncm91bmQgY29sb3IuCisgKiBAR1NUX0RFQlVHX0JPTEQ6IE1ha2UgdGhlIG91dHB1dCBib2xkLgorICogQEdTVF9ERUJVR19VTkRFUkxJTkU6IFVuZGVybGluZSB0aGUgb3V0cHV0LgorICoKKyAqIFRoZXNlIGFyZSBzb21lIHRlcm1pbmFsIHN0eWxlIGZsYWdzIHlvdSBjYW4gdXNlIHdoZW4gY3JlYXRpbmcgeW91cgorICogZGVidWdnaW5nIGNhdGVnb3JpZXMgdG8gbWFrZSB0aGVtIHN0YW5kIG91dCBpbiBkZWJ1Z2dpbmcgb3V0cHV0LgorICovCit0eXBlZGVmIGVudW0geworICAvKiBjb2xvcnMgKi8KKyAgR1NUX0RFQlVHX0ZHX0JMQUNLCQk9IDB4MDAwMCwKKyAgR1NUX0RFQlVHX0ZHX1JFRAkJPSAweDAwMDEsCisgIEdTVF9ERUJVR19GR19HUkVFTgkJPSAweDAwMDIsCisgIEdTVF9ERUJVR19GR19ZRUxMT1cJCT0gMHgwMDAzLAorICBHU1RfREVCVUdfRkdfQkxVRQkJPSAweDAwMDQsCisgIEdTVF9ERUJVR19GR19NQUdFTlRBCQk9IDB4MDAwNSwKKyAgR1NUX0RFQlVHX0ZHX0NZQU4JCT0gMHgwMDA2LAorICBHU1RfREVCVUdfRkdfV0hJVEUJCT0gMHgwMDA3LAorICAvKiBiYWNrZ3JvdW5kIGNvbG9ycyAqLworICBHU1RfREVCVUdfQkdfQkxBQ0sJCT0gMHgwMDAwLAorICBHU1RfREVCVUdfQkdfUkVECQk9IDB4MDAxMCwKKyAgR1NUX0RFQlVHX0JHX0dSRUVOCQk9IDB4MDAyMCwKKyAgR1NUX0RFQlVHX0JHX1lFTExPVwkJPSAweDAwMzAsCisgIEdTVF9ERUJVR19CR19CTFVFCQk9IDB4MDA0MCwKKyAgR1NUX0RFQlVHX0JHX01BR0VOVEEJCT0gMHgwMDUwLAorICBHU1RfREVCVUdfQkdfQ1lBTgkJPSAweDAwNjAsCisgIEdTVF9ERUJVR19CR19XSElURQkJPSAweDAwNzAsCisgIC8qIG90aGVyIGZvcm1hdHMgKi8KKyAgR1NUX0RFQlVHX0JPTEQJCT0gMHgwMTAwLAorICBHU1RfREVCVUdfVU5ERVJMSU5FCQk9IDB4MDIwMAorfSBHc3REZWJ1Z0NvbG9yRmxhZ3M7CisKKyNkZWZpbmUgR1NUX0RFQlVHX0ZHX01BU0sJKDB4MDAwRikKKyNkZWZpbmUgR1NUX0RFQlVHX0JHX01BU0sJKDB4MDBGMCkKKyNkZWZpbmUgR1NUX0RFQlVHX0ZPUk1BVF9NQVNLCSgweEZGMDApCisKK3R5cGVkZWYgc3RydWN0IF9Hc3REZWJ1Z0NhdGVnb3J5IEdzdERlYnVnQ2F0ZWdvcnk7CisvKioKKyAqIEdzdERlYnVnQ2F0ZWdvcnk6CisgKgorICogVGhpcyBpcyB0aGUgc3RydWN0IHRoYXQgZGVzY3JpYmVzIHRoZSBjYXRlZ29yaWVzLiBPbmNlIGluaXRpYWxpemVkIHdpdGgKKyAqICNHU1RfREVCVUdfQ0FURUdPUllfSU5JVCwgaXRzIHZhbHVlcyBjYW4ndCBiZSBjaGFuZ2VkIGFueW1vcmUuCisgKi8KK3N0cnVjdCBfR3N0RGVidWdDYXRlZ29yeSB7CisgIC8qPCBwcml2YXRlID4qLworICBnaW50ICAgICAgICAgICAgICAgICAgdGhyZXNob2xkOworICBndWludAkJCWNvbG9yOwkJLyogc2VlIGRlZmluZXMgYWJvdmUgKi8KKworICBjb25zdCBnY2hhciAqCQluYW1lOworICBjb25zdCBnY2hhciAqCQlkZXNjcmlwdGlvbjsKK307CisKKy8qKioqKioqKioqIHNvbWUgY29udmVuaWVuY2UgbWFjcm9zIGZvciBkZWJ1Z2dpbmcgKioqKioqKioqKi8KKworLyoqCisgKiBHU1RfU1RSX05VTEw6CisgKiBAc3RyOiBUaGUgc3RyaW5nIHRvIGNoZWNrLgorICoKKyAqIE1hY3JvIHRvIHVzZSB3aGVuIGEgc3RyaW5nIG11c3Qgbm90IGJlIE5VTEwsIGJ1dCBtYXkgYmUgTlVMTC4gSWYgdGhlIHN0cmluZworICogaXMgTlVMTCwgIihOVUxMKSIgaXMgcHJpbnRlZCBpbnN0ZWFkLgorICogSW4gR1N0cmVhbWVyIHByaW50ZiBzdHJpbmcgYXJndW1lbnRzIG1heSBub3QgYmUgTlVMTCwgYmVjYXVzZSBvbiBzb21lCisgKiBwbGF0Zm9ybXMgKGllIFNvbGFyaXMpIHRoZSBsaWJjIGNyYXNoZXMgaW4gdGhhdCBjYXNlLiBUaGlzIGluY2x1ZGVzIGRlYnVnZ2luZworICogc3RyaW5ncy4KKyAqLworI2RlZmluZSBHU1RfU1RSX05VTEwoc3RyKSAoKHN0cikgPyAoc3RyKSA6ICIoTlVMTCkiKQorCisvKiBGSVhNRSwgbm90IE1UIHNhZmUgKi8KKy8qKgorICogR1NUX0RFQlVHX1BBRF9OQU1FOgorICogQHBhZDogVGhlIHBhZCB0byBkZWJ1Zy4KKyAqCisgKiBFdmFsdWF0ZXMgdG8gMiBzdHJpbmdzLCB0aGF0IGRlc2NyaWJlIHRoZSBwYWQuIE9mdGVuIHVzZWQgaW4gZGVidWdnaW5nCisgKiBzdGF0ZW1lbnRzLgorICovCisjZGVmaW5lIEdTVF9ERUJVR19QQURfTkFNRShwYWQpIFwKKyAgKHBhZCAhPSBOVUxMKSA/ICBcCisgICgoR1NUX09CSkVDVF9QQVJFTlQocGFkKSAhPSBOVUxMKSA/IFwKKyAgR1NUX1NUUl9OVUxMIChHU1RfT0JKRUNUX05BTUUgKEdTVF9PQkpFQ1RfUEFSRU5UKHBhZCkpKSA6IFwKKyAgIicnIiApIDogIicnIiwgXAorICAocGFkICE9IE5VTEwpID8gR1NUX1NUUl9OVUxMIChHU1RfT0JKRUNUX05BTUUgKHBhZCkpIDogIicnIgorCisvKioKKyAqIEdTVF9GVU5DVElPTjoKKyAqCisgKiBUaGlzIG1hY3JvIHNob3VsZCBldmFsdWF0ZSB0byB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBmdW5jdGlvbiBhbmQgYmUgc2hvdWxkCisgKiBiZSBkZWZpbmVkIHdoZW4gY29uZmlndXJpbmcgeW91ciBwcm9qZWN0LCBhcyBpdCBpcyBjb21waWxlciBkZXBlbmRhbnQuIElmIGl0CisgKiBpcyBub3QgZGVmaW5lZCwgc29tZSBkZWZhdWx0IHZhbHVlIGlzIHVzZWQuIEl0IGlzIHVzZWQgdG8gcHJvdmlkZSBkZWJ1Z2dpbmcKKyAqIG91dHB1dCB3aXRoIHRoZSBmdW5jdGlvbiBuYW1lIG9mIHRoZSBtZXNzYWdlLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIEdfU1RSRlVOQyBhcyB3ZSBkbyBub3Qgd2FudCB0aGUgZnVsbAorICogZnVuY3Rpb24gc2lnbmF0dXJlIGluIEMrKyBjb2RlLgorICovCisjaWZuZGVmIEdTVF9GVU5DVElPTgorI2lmIGRlZmluZWQgKF9fR05VQ19fKSB8fCAoZGVmaW5lZCAoX01TQ19WRVIpICYmIF9NU0NfVkVSID49IDEzMDApCisjICBkZWZpbmUgR1NUX0ZVTkNUSU9OICAgICAoKGNvbnN0IGNoYXIqKSAoX19GVU5DVElPTl9fKSkKKyNlbGlmIGRlZmluZWQgKF9fU1REQ19fKSAmJiBkZWZpbmVkIChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKyMgIGRlZmluZSBHU1RfRlVOQ1RJT04gICAgICgoY29uc3QgY2hhciopIChfX2Z1bmNfXykpCisjZWxzZQorIyAgZGVmaW5lIEdTVF9GVU5DVElPTiAgICAgKChjb25zdCBjaGFyKikgKCI/Pz8iKSkKKyNlbmRpZgorI2VuZGlmIC8qIGlmbmRlZiBHU1RfRlVOQ1RJT04gKi8KKworCit0eXBlZGVmIHN0cnVjdCBfR3N0RGVidWdNZXNzYWdlIEdzdERlYnVnTWVzc2FnZTsKKworLyoqCisgKiBHc3RMb2dGdW5jdGlvbjoKKyAqIEBjYXRlZ29yeTogYSAjR3N0RGVidWdDYXRlZ29yeQorICogQGxldmVsOiBhICNHc3REZWJ1Z0xldmVsCisgKiBAZmlsZTogZmlsZSBuYW1lCisgKiBAZnVuY3Rpb246IGZ1bmN0aW9uIG5hbWUKKyAqIEBsaW5lOiBsaW5lIG51bWJlcgorICogQG9iamVjdDogYSAjR09iamVjdAorICogQG1lc3NhZ2U6IHRoZSBtZXNzYWdlCisgKiBAZGF0YTogdXNlciBkYXRhIGZvciB0aGUgbG9nIGZ1bmN0aW9uCisgKgorICogRnVuY3Rpb24gcHJvdG90eXBlIGZvciBhIGxvZ2dpbmcgZnVuY3Rpb24gdGhhdCBjYW4gYmUgcmVnaXN0ZXJlZCB3aXRoCisgKiBnc3RfZGVidWdfYWRkX2xvZ19mdW5jdGlvbigpLgorICogVXNlIEdfR05VQ19OT19JTlNUUlVNRU5UIG9uIHRoYXQgZnVuY3Rpb24uCisgKi8KK3R5cGVkZWYgdm9pZCAoKkdzdExvZ0Z1bmN0aW9uKSAgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXRlZ29yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdERlYnVnTGV2ZWwgICAgICBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgICAgIGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHT2JqZWN0ICAgICAgICAgICogb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0RGVidWdNZXNzYWdlICAqIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgZGF0YSk7CisKKworLyogRklYTUUgMC4xMTogbW92ZSB0aGlzIGludG8gcHJpdmF0ZSBoZWFkZXJzICovCit2b2lkICAgICAgICAgICAgX2dzdF9kZWJ1Z19pbml0ICh2b2lkKTsKKworCisjaWZkZWYgR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT04KKworLyogbm90IHVzaW5nIEdfR05VQ19QUklOVEYsIHNpbmNlIGdjYyB3aWxsIGNob2tlIG9uIEdTVF9QVFJfRk9STUFUIGJlaW5nICVQICovCit2b2lkCQkgICAgZ3N0X2RlYnVnX2xvZyAgICAgICAgICAgIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3REZWJ1Z0xldmVsICAgICAgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiBmdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgICAgICBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR09iamVjdCAgICAgICAgICAqIG9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pIEdfR05VQ19OT19JTlNUUlVNRU5UOworCisjZWxzZSAvKiBHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTiAqLworCit2b2lkCQkgICAgZ3N0X2RlYnVnX2xvZyAgICAgICAgICAgIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3REZWJ1Z0xldmVsICAgICAgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiBmdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgICAgICBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR09iamVjdCAgICAgICAgICAqIG9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pIEdfR05VQ19QUklOVEYgKDcsIDgpIEdfR05VQ19OT19JTlNUUlVNRU5UOworCisjZW5kaWYgLyogR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT04gKi8KKwordm9pZCAgICAgICAgICAgIGdzdF9kZWJ1Z19sb2dfdmFsaXN0ICAgICAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdGVnb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0RGVidWdMZXZlbCAgICAgIGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogZnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50CSAgICAgICAgICAgICAgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdPYmplY3QgICAgICAgICAgKiBvYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCAgICAgICAgICAgIGFyZ3MpIEdfR05VQ19OT19JTlNUUlVNRU5UOworCisvKiBkbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24sIHVzZSB0aGUgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgbWFjcm8gKi8KK0dzdERlYnVnQ2F0ZWdvcnkgKl9nc3RfZGVidWdfY2F0ZWdvcnlfbmV3IChjb25zdCBnY2hhciAqIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICBjb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIGRlc2NyaXB0aW9uKTsKKy8qIGRvIG5vdCB1c2UgdGhpcyBmdW5jdGlvbiwgdXNlIHRoZSBHU1RfREVCVUdfQ0FURUdPUllfR0VUIG1hY3JvICovCitHc3REZWJ1Z0NhdGVnb3J5ICpfZ3N0X2RlYnVnX2dldF9jYXRlZ29yeSAoY29uc3QgZ2NoYXIgKm5hbWUpOworCisKKy8qIGRvIG5vdCB1c2UgdGhpcyBmdW5jdGlvbiwgdXNlIHRoZSBHU1RfQ0FUX01FTURVTVBfKiBtYWNyb3MgKi8KK3ZvaWQgX2dzdF9kZWJ1Z19kdW1wX21lbSAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdCwgY29uc3QgZ2NoYXIgKiBmaWxlLAorICAgIGNvbnN0IGdjaGFyICogZnVuYywgZ2ludCBsaW5lLCBHT2JqZWN0ICogb2JqLCBjb25zdCBnY2hhciAqIG1zZywKKyAgICBjb25zdCBndWludDggKiBkYXRhLCBndWludCBsZW5ndGgpOworCisvKiB3ZSBkZWZpbmUgdGhpcyB0byBhdm9pZCBhIGNvbXBpbGVyIHdhcm5pbmcgcmVnYXJkaW5nIGEgY2FzdCBmcm9tIGEgZnVuY3Rpb24KKyAqIHBvaW50ZXIgdG8gYSB2b2lkIHBvaW50ZXIKKyAqIChzZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTMwOTI1MykKKyAqLwordHlwZWRlZgl2b2lkICgqIEdzdERlYnVnRnVuY1B0cikJKHZvaWQpOworCisvKiBkbyBubyB1c2UgdGhlc2UgZnVuY3Rpb25zLCB1c2UgdGhlIEdTVF9ERUJVRypfRlVOQ1BUUiBtYWNyb3MgKi8KK3ZvaWQJX2dzdF9kZWJ1Z19yZWdpc3Rlcl9mdW5jcHRyCShHc3REZWJ1Z0Z1bmNQdHIJZnVuYywKKwkJCQkJIGNvbnN0IGdjaGFyICoJCXB0cm5hbWUpOworY29uc3QgZ2NoYXIgKgorCV9nc3RfZGVidWdfbmFtZW9mX2Z1bmNwdHIJKEdzdERlYnVnRnVuY1B0cglmdW5jKSBHX0dOVUNfTk9fSU5TVFJVTUVOVDsKKworCitjb25zdCBnY2hhciAgICogZ3N0X2RlYnVnX21lc3NhZ2VfZ2V0ICAgIChHc3REZWJ1Z01lc3NhZ2UgICogbWVzc2FnZSk7CisKK3ZvaWQgICAgICAgICAgICBnc3RfZGVidWdfbG9nX2RlZmF1bHQgICAgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXRlZ29yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdERlYnVnTGV2ZWwgICAgICBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgICAgIGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHT2JqZWN0ICAgICAgICAgICogb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0RGVidWdNZXNzYWdlICAqIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgdW51c2VkKSBHX0dOVUNfTk9fSU5TVFJVTUVOVDsKKworY29uc3QgZ2NoYXIgKiAgIGdzdF9kZWJ1Z19sZXZlbF9nZXRfbmFtZSAoR3N0RGVidWdMZXZlbCBsZXZlbCk7CisKK3ZvaWQgICAgICAgICAgICBnc3RfZGVidWdfYWRkX2xvZ19mdW5jdGlvbiAgICAgICAgICAgIChHc3RMb2dGdW5jdGlvbiBmdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgIGRhdGEpOworCitndWludCAgICAgICAgICAgZ3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb24gICAgICAgICAoR3N0TG9nRnVuY3Rpb24gZnVuYyk7CitndWludCAgICAgICAgICAgZ3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb25fYnlfZGF0YSAoZ3BvaW50ZXIgICAgICAgZGF0YSk7CisKK3ZvaWQgICAgICAgICAgICBnc3RfZGVidWdfc2V0X2FjdGl2ZSAgKGdib29sZWFuIGFjdGl2ZSk7CitnYm9vbGVhbiAgICAgICAgZ3N0X2RlYnVnX2lzX2FjdGl2ZSAgICh2b2lkKTsKKwordm9pZCAgICAgICAgICAgIGdzdF9kZWJ1Z19zZXRfY29sb3JlZCAoZ2Jvb2xlYW4gY29sb3JlZCk7CitnYm9vbGVhbiAgICAgICAgZ3N0X2RlYnVnX2lzX2NvbG9yZWQgICh2b2lkKTsKKwordm9pZCAgICAgICAgICAgIGdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGQgICAgICAoR3N0RGVidWdMZXZlbCBsZXZlbCk7CitHc3REZWJ1Z0xldmVsICAgZ3N0X2RlYnVnX2dldF9kZWZhdWx0X3RocmVzaG9sZCAgICAgICh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBnc3RfZGVidWdfc2V0X3RocmVzaG9sZF9mb3JfbmFtZSAgICAgKGNvbnN0IGdjaGFyICogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdERlYnVnTGV2ZWwgbGV2ZWwpOwordm9pZCAgICAgICAgICAgIGdzdF9kZWJ1Z191bnNldF90aHJlc2hvbGRfZm9yX25hbWUgICAoY29uc3QgZ2NoYXIgKiBuYW1lKTsKKworCit2b2lkICAgICAgICAgICAgZ3N0X2RlYnVnX2NhdGVnb3J5X2ZyZWUgICAgICAgICAgICAgIChHc3REZWJ1Z0NhdGVnb3J5ICoJY2F0ZWdvcnkpOwordm9pZAkgICAgICAgICAgICBnc3RfZGVidWdfY2F0ZWdvcnlfc2V0X3RocmVzaG9sZCAgICAgKEdzdERlYnVnQ2F0ZWdvcnkgKgljYXRlZ29yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdERlYnVnTGV2ZWwJCWxldmVsKTsKK3ZvaWQgICAgICAgICAgICBnc3RfZGVidWdfY2F0ZWdvcnlfcmVzZXRfdGhyZXNob2xkICAgKEdzdERlYnVnQ2F0ZWdvcnkgKgljYXRlZ29yeSk7CitHc3REZWJ1Z0xldmVsICAgZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF90aHJlc2hvbGQgICAgIChHc3REZWJ1Z0NhdGVnb3J5ICoJY2F0ZWdvcnkpOworY29uc3QgZ2NoYXIgKiAgIGdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfbmFtZSAgICAgICAgICAoR3N0RGVidWdDYXRlZ29yeSAqCWNhdGVnb3J5KTsKK2d1aW50ICAgICAgICAgICBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X2NvbG9yICAgICAgICAgKEdzdERlYnVnQ2F0ZWdvcnkgKgljYXRlZ29yeSk7Citjb25zdCBnY2hhciAqICAgZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9kZXNjcmlwdGlvbiAgIChHc3REZWJ1Z0NhdGVnb3J5ICoJY2F0ZWdvcnkpOworR1NMaXN0ICogICAgICAgIGdzdF9kZWJ1Z19nZXRfYWxsX2NhdGVnb3JpZXMJKHZvaWQpOworCisKK2djaGFyICogZ3N0X2RlYnVnX2NvbnN0cnVjdF90ZXJtX2NvbG9yIChndWludCBjb2xvcmluZm8pOworZ2ludCAgICBnc3RfZGVidWdfY29uc3RydWN0X3dpbl9jb2xvciAgKGd1aW50IGNvbG9yaW5mbyk7CisKKworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKworI2RlZmluZSBnc3RfZGVidWdfYWRkX2xvZ19mdW5jdGlvbihmdW5jLGRhdGEpIFwKK0dfU1RNVF9TVEFSVHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmIChmdW5jID09IGdzdF9kZWJ1Z19sb2dfZGVmYXVsdCkgeyAgICAgICAgXAorICAgIGdzdF9kZWJ1Z19hZGRfbG9nX2Z1bmN0aW9uKE5VTEwsZGF0YSk7ICAgIFwKKyAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ3N0X2RlYnVnX2FkZF9sb2dfZnVuY3Rpb24oZnVuYyxkYXRhKTsgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK31HX1NUTVRfRU5ECisKKyNkZWZpbmUgZ3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb24oZnVuYykgICBcCisgICAgKGZ1bmMgPT0gZ3N0X2RlYnVnX2xvZ19kZWZhdWx0KSA/ICAgICAgICAgXAorICAgICAgICBnc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbihOVUxMKSA6IFwKKyAgICAgICAgZ3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb24oZnVuYykKKworLyoqCisgKiBHU1RfREVCVUdfQ0FURUdPUlk6CisgKiBAY2F0OiB0aGUgY2F0ZWdvcnkKKyAqCisgKiBEZWZpbmVzIGEgR3N0RGVidWdDYXRlZ29yeSB2YXJpYWJsZS4KKyAqIFRoaXMgbWFjcm8gZXhwYW5kcyB0byBub3RoaW5nIGlmIGRlYnVnZ2luZyBpcyBkaXNhYmxlZC4KKyAqLworI2RlZmluZSBHU1RfREVCVUdfQ0FURUdPUlkoY2F0KSBHc3REZWJ1Z0NhdGVnb3J5ICpjYXQgPSBOVUxMCisvKioKKyAqIEdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk46CisgKiBAY2F0OiB0aGUgY2F0ZWdvcnkKKyAqCisgKiBEZWNsYXJlcyBhIEdzdERlYnVnQ2F0ZWdvcnkgdmFyaWFibGUgYXMgZXh0ZXJuLiBVc2UgaW4gaGVhZGVyIGZpbGVzLgorICogVGhpcyBtYWNybyBleHBhbmRzIHRvIG5vdGhpbmcgaWYgZGVidWdnaW5nIGlzIGRpc2FibGVkLgorICovCisjZGVmaW5lIEdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4oY2F0KSBleHRlcm4gR3N0RGVidWdDYXRlZ29yeSAqY2F0CisKKy8qKgorICogR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQzoKKyAqIEBjYXQ6IHRoZSBjYXRlZ29yeQorICoKKyAqIERlZmluZXMgYSBzdGF0aWMgR3N0RGVidWdDYXRlZ29yeSB2YXJpYWJsZS4KKyAqIFRoaXMgbWFjcm8gZXhwYW5kcyB0byBub3RoaW5nIGlmIGRlYnVnZ2luZyBpcyBkaXNhYmxlZC4KKyAqLworI2RlZmluZSBHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDKGNhdCkgc3RhdGljIEdzdERlYnVnQ2F0ZWdvcnkgKmNhdCA9IE5VTEwKKworLyoqCisgKiBHU1RfREVCVUdfQ0FURUdPUllfSU5JVDoKKyAqIEBjYXQ6IHRoZSBjYXRlZ29yeSB0byBpbml0aWFsaXplLgorICogQG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBjYXRlZ29yeS4KKyAqIEBjb2xvcjogdGhlIGNvbG9ycyB0byB1c2UgZm9yIGEgY29sb3IgcmVwcmVzZW50YXRpb24gb3IgMCBmb3Igbm8gY29sb3IuCisgKiBAZGVzY3JpcHRpb246IG9wdGlvbmFsIGRlc2NyaXB0aW9uIG9mIHRoZSBjYXRlZ29yeS4KKyAqCisgKiBJbml0aWFsaXplcyBhIG5ldyAjR3N0RGVidWdDYXRlZ29yeSB3aXRoIHRoZSBnaXZlbiBwcm9wZXJ0aWVzIGFuZCBzZXQgdG8KKyAqIHRoZSBkZWZhdWx0IHRocmVzaG9sZC4KKyAqCisgKiA8bm90ZT4KKyAqIDxwYXJhPgorICogVGhpcyBtYWNybyBleHBhbmRzIHRvIG5vdGhpbmcgaWYgZGVidWdnaW5nIGlzIGRpc2FibGVkLgorICogPC9wYXJhPgorICogPHBhcmE+CisgKiBXaGVuIG5hbWluZyB5b3VyIGNhdGVnb3J5LCBwbGVhc2UgZm9sbG93IHRoZSBmb2xsb3dpbmcgY29udmVudGlvbnMgdG8gZW5zdXJlCisgKiB0aGF0IHRoZSBwYXR0ZXJuIG1hdGNoaW5nIGZvciBjYXRlZ29yaWVzIHdvcmtzIGFzIGV4cGVjdGVkLiBJdCBpcyBub3QKKyAqIGVhcnRoLXNoYXR0ZXJpbmcgaWYgeW91IGRvbid0IGZvbGxvdyB0aGVzZSBjb252ZW50aW9ucywgYnV0IGl0IHdvdWxkIGJlIG5pY2UKKyAqIGZvciBldmVyeW9uZS4KKyAqIDwvcGFyYT4KKyAqIDxwYXJhPgorICogSWYgeW91IGRlZmluZSBhIGNhdGVnb3J5IGZvciBhIHBsdWdpbiBvciBhIGZlYXR1cmUgb2YgaXQsIG5hbWUgdGhlIGNhdGVnb3J5CisgKiBsaWtlIHRoZSBmZWF0dXJlLiBTbyBpZiB5b3Ugd2FudGVkIHRvIHdyaXRlIGEgImZpbGVzcmMiIGVsZW1lbnQsIHlvdSB3b3VsZAorICogbmFtZSB0aGUgY2F0ZWdvcnkgImZpbGVzcmMiLiBVc2UgbG93ZXJjYXNlIGxldHRlcnMgb25seS4KKyAqIElmIHlvdSBkZWZpbmUgbW9yZSB0aGFuIG9uZSBjYXRlZ29yeSBmb3IgdGhlIHNhbWUgZWxlbWVudCwgYXBwZW5kIGFuCisgKiB1bmRlcnNjb3JlIGFuZCBhbiBpZGVudGlmaWVyIHRvIHlvdXIgY2F0ZWdvcmllcywgbGlrZSB0aGlzOiAiZmlsZXNyY19jYWNoZSIKKyAqIDwvcGFyYT4KKyAqIDxwYXJhPgorICogSWYgeW91IGNyZWF0ZSBhIGxpYnJhcnkgb3IgYW4gYXBwbGljYXRpb24gdXNpbmcgZGVidWdnaW5nIGNhdGVnb3JpZXMsIHVzZSBhCisgKiBjb21tb24gcHJlZml4IGZvbGxvd2VkIGJ5IGFuIHVuZGVyc2NvcmUgZm9yIGFsbCB5b3VyIGNhdGVnb3JpZXMuIEdTdHJlYW1lcgorICogdXNlcyB0aGUgR1NUIHByZWZpeCBzbyBHU3RyZWFtZXIgY2F0ZWdvcmllcyBsb29rIGxpa2UgIkdTVF9TVEFURVMiLiBCZSBzdXJlCisgKiB0byBpbmNsdWRlIHVwcGVyY2FzZSBsZXR0ZXJzLgorICogPC9wYXJhPgorICogPC9ub3RlPgorICovCisjZGVmaW5lIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKGNhdCxuYW1lLGNvbG9yLGRlc2NyaXB0aW9uKSBHX1NUTVRfU1RBUlR7XAorICBpZiAoY2F0ID09IE5VTEwpCQkJCQkJCVwKKyAgICBjYXQgPSBfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldyAobmFtZSxjb2xvcixkZXNjcmlwdGlvbik7CQlcCit9R19TVE1UX0VORAorCisvKioKKyAqIEdTVF9ERUJVR19DQVRFR09SWV9HRVQ6CisgKiBAY2F0OiB0aGUgY2F0ZWdvcnkgdG8gaW5pdGlhbGl6ZS4KKyAqIEBuYW1lOiBsb2cgY2F0ZWdvcnkgbmFtZQorICoKKyAqIExvb2tzIHVwIGFuIGV4aXN0aW5nICNHc3REZWJ1Z0NhdGVnb3J5IGJ5IGl0cyBAbmFtZSBhbmQgc2V0cyBAY2F0LiBJZiB0aGUKKyAqIGNhdGVnb3J5IGlzIG5vdCBmb3VuZCwgYnV0IEdTVF9DQVRfREVGQVVMVCBpcyBkZWZpbmVkLCB0aGF0IGlzIGFzc2lnbmVkIHRvCisgKiBAY2F0LiBPdGhlcndpc2UgQGNhdCB3aWxsIGJlIE5VTEwuCisgKgorICogfFsKKyAqIEdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9teXBsdWdpbl9kZWJ1Zyk7CisgKiAjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfbXlwbHVnaW5fZGVidWcKKyAqIEdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKEdTVF9DQVRfUEVSRk9STUFOQ0UpOworICogLi4uCisgKiBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X215cGx1Z2luX2RlYnVnLCAibXlwbHVnaW4iLCAwLCAibmljZSBlbGVtZW50Iik7CisgKiBHU1RfREVCVUdfQ0FURUdPUllfR0VUIChHU1RfQ0FUX1BFUkZPUk1BTkNFLCAiR1NUX1BFUkZPUk1BTkNFIik7CisgKiBdfAorICoKKyAqIFNpbmNlOiAwLjEwLjI0CisgKi8KKyNpZmRlZiBHU1RfQ0FUX0RFRkFVTFQKKyNkZWZpbmUgR1NUX0RFQlVHX0NBVEVHT1JZX0dFVChjYXQsbmFtZSkgIEdfU1RNVF9TVEFSVHtcCisgIGNhdCA9IF9nc3RfZGVidWdfZ2V0X2NhdGVnb3J5IChuYW1lKTsJCQlcCisgIGlmICghY2F0KSB7CQkJCQkJXAorICAgIGNhdCA9IEdTVF9DQVRfREVGQVVMVDsJCQkJXAorICB9CQkJCQkJCVwKK31HX1NUTVRfRU5ECisjZWxzZQorI2RlZmluZSBHU1RfREVCVUdfQ0FURUdPUllfR0VUKGNhdCxuYW1lKSAgR19TVE1UX1NUQVJUe1wKKyAgY2F0ID0gX2dzdF9kZWJ1Z19nZXRfY2F0ZWdvcnkgKG5hbWUpOwkJCVwKK31HX1NUTVRfRU5ECisjZW5kaWYKKworLyoqCisgKiBHU1RfQ0FUX0RFRkFVTFQ6CisgKgorICogRGVmYXVsdCBnc3RyZWFtZXIgY29yZSBkZWJ1ZyBsb2cgY2F0ZWdvcnkuIFBsZWFzZSBkZWZpbmUgeW91ciBvd24uCisgKi8KK0dTVF9FWFBPUlQgR3N0RGVidWdDYXRlZ29yeSAqCUdTVF9DQVRfREVGQVVMVDsKKy8qIHRoaXMgc3ltYm9sIG1heSBub3QgYmUgdXNlZCAqLworZXh0ZXJuIGdib29sZWFuCQkJX19nc3RfZGVidWdfZW5hYmxlZDsKKworLyogc2luY2UgMC4xMC43LCB0aGUgbWluIGRlYnVnIGxldmVsLCB1c2VkIGZvciBxdWlja2x5IGRpc2NhcmRpbmcgZGVidWcKKyAqIG1lc3NhZ2VzIHRoYXQgZmFsbCB1bmRlciB0aGUgdGhyZXNob2xkLiAqLworR1NUX0VYUE9SVCBHc3REZWJ1Z0xldmVsICAgICAgICAgICAgX19nc3RfZGVidWdfbWluOworCisvKioKKyAqIEdTVF9DQVRfTEVWRUxfTE9HOgorICogQGNhdDogY2F0ZWdvcnkgdG8gdXNlCisgKiBAbGV2ZWw6IHRoZSBzZXZlcml0eSBvZiB0aGUgbWVzc2FnZQorICogQG9iamVjdDogdGhlICNHT2JqZWN0IHRoZSBtZXNzYWdlIGJlbG9uZ3MgdG8gb3IgTlVMTCBpZiBub25lCisgKiBALi4uOiBBIHByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dAorICoKKyAqIE91dHB1dHMgYSBkZWJ1Z2dpbmcgbWVzc2FnZS4gVGhpcyBpcyB0aGUgbW9zdCBnZW5lcmFsIG1hY3JvIGZvciBvdXRwdXR0aW5nCisgKiBkZWJ1Z2dpbmcgbWVzc2FnZXMuIFlvdSB3aWxsIHByb2JhYmx5IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgb25lcyBkZXNjcmliZWQKKyAqIGJlbG93LgorICovCisjaWZkZWYgR19IQVZFX0lTT19WQVJBUkdTCisjZGVmaW5lIEdTVF9DQVRfTEVWRUxfTE9HKGNhdCxsZXZlbCxvYmplY3QsLi4uKSBHX1NUTVRfU1RBUlR7CQlcCisgIGlmIChHX1VOTElLRUxZIChsZXZlbCA8PSBfX2dzdF9kZWJ1Z19taW4pKSB7CQkJCQkJXAorICAgIGdzdF9kZWJ1Z19sb2cgKChjYXQpLCAobGV2ZWwpLCBfX0ZJTEVfXywgR1NUX0ZVTkNUSU9OLCBfX0xJTkVfXywJXAorICAgICAgICAoR09iamVjdCAqKSAob2JqZWN0KSwgX19WQV9BUkdTX18pOwkJCQlcCisgIH0JCQkJCQkJCQlcCit9R19TVE1UX0VORAorI2Vsc2UgLyogR19IQVZFX0dOVUNfVkFSQVJHUyAqLworI2lmZGVmIEdfSEFWRV9HTlVDX1ZBUkFSR1MKKyNkZWZpbmUgR1NUX0NBVF9MRVZFTF9MT0coY2F0LGxldmVsLG9iamVjdCxhcmdzLi4uKSBHX1NUTVRfU1RBUlR7CVwKKyAgaWYgKEdfVU5MSUtFTFkgKGxldmVsIDw9IF9fZ3N0X2RlYnVnX21pbikpIHsJCQkJCQlcCisgICAgZ3N0X2RlYnVnX2xvZyAoKGNhdCksIChsZXZlbCksIF9fRklMRV9fLCBHU1RfRlVOQ1RJT04sIF9fTElORV9fLAlcCisgICAgICAgIChHT2JqZWN0ICopIChvYmplY3QpLCAjI2FyZ3MgKTsJCQkJCVwKKyAgfQkJCQkJCQkJCVwKK31HX1NUTVRfRU5ECisjZWxzZSAvKiBubyB2YXJpYWRpYyBtYWNyb3MsIHVzZSBpbmxpbmUgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorR1NUX0NBVF9MRVZFTF9MT0dfdmFsaXN0IChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0LAorICAgIEdzdERlYnVnTGV2ZWwgbGV2ZWwsIGdwb2ludGVyIG9iamVjdCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhcmFyZ3MpCit7CisgIGlmIChHX1VOTElLRUxZIChsZXZlbCA8PSBfX2dzdF9kZWJ1Z19taW4pKSB7CisgICAgZ3N0X2RlYnVnX2xvZ192YWxpc3QgKGNhdCwgbGV2ZWwsICIiLCAiIiwgMCwgKEdPYmplY3QgKikgb2JqZWN0LCBmb3JtYXQsCisgICAgICAgIHZhcmFyZ3MpOworICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorR1NUX0NBVF9MRVZFTF9MT0cgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXQsIEdzdERlYnVnTGV2ZWwgbGV2ZWwsCisgICAgZ3BvaW50ZXIgb2JqZWN0LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCB2YXJhcmdzOworCisgIHZhX3N0YXJ0ICh2YXJhcmdzLCBmb3JtYXQpOworICBHU1RfQ0FUX0xFVkVMX0xPR192YWxpc3QgKGNhdCwgbGV2ZWwsIG9iamVjdCwgZm9ybWF0LCB2YXJhcmdzKTsKKyAgdmFfZW5kICh2YXJhcmdzKTsKK30KKyNlbmRpZgorI2VuZGlmIC8qIEdfSEFWRV9JU09fVkFSQVJHUyAqLworCisvKiBUaGlzIG9uZSBkb2Vzbid0IGhhdmUgdmFyYXJncyBpbiB0aGUgbWFjcm8sIHNvIGl0J3MgZGlmZmVyZW50IHRoYW4gYWxsIHRoZQorICogb3RoZXIgbWFjcm9zIGFuZCBoZW5jZSBpbiBhIHNlcGFyYXRlIGJsb2NrIHJpZ2h0IGhlcmUuIERvY3MgY2h1bmtzIGFyZQorICogd2l0aCB0aGUgb3RoZXIgZG9jIGNodW5rcyBiZWxvdyB0aG91Z2guICovCisjZGVmaW5lIF9fR1NUX0NBVF9NRU1EVU1QX0xPRyhjYXQsb2JqZWN0LG1zZyxkYXRhLGxlbmd0aCkgR19TVE1UX1NUQVJUeyAgICAgICBcCisgIGlmIChHX1VOTElLRUxZIChHU1RfTEVWRUxfTUVNRFVNUCA8PSBfX2dzdF9kZWJ1Z19taW4pKSB7ICAgICAgICAgICAgICAgICAgICBcCisgICAgX2dzdF9kZWJ1Z19kdW1wX21lbSAoKGNhdCksIF9fRklMRV9fLCBHU1RfRlVOQ1RJT04sIF9fTElORV9fLCAgICAgICAgICAgICBcCisgICAgICAgIChHT2JqZWN0ICopIChvYmplY3QpLCAobXNnKSwgKGRhdGEpLCAobGVuZ3RoKSk7ICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9R19TVE1UX0VORAorCisjZGVmaW5lIEdTVF9DQVRfTUVNRFVNUF9PQkpFQ1QoY2F0LG9iaixtc2csZGF0YSxsZW5ndGgpICBcCisgICAgX19HU1RfQ0FUX01FTURVTVBfTE9HKGNhdCxvYmosbXNnLGRhdGEsbGVuZ3RoKQorI2RlZmluZSBHU1RfQ0FUX01FTURVTVAoY2F0LG1zZyxkYXRhLGxlbmd0aCkgICAgICAgICAgICAgXAorICAgIF9fR1NUX0NBVF9NRU1EVU1QX0xPRyhjYXQsTlVMTCxtc2csZGF0YSxsZW5ndGgpCisjZGVmaW5lIEdTVF9NRU1EVU1QX09CSkVDVChvYmosbXNnLGRhdGEsbGVuZ3RoKSAgICAgICAgICBcCisgICAgX19HU1RfQ0FUX01FTURVTVBfTE9HKEdTVF9DQVRfREVGQVVMVCxvYmosbXNnLGRhdGEsbGVuZ3RoKQorI2RlZmluZSBHU1RfTUVNRFVNUChtc2csZGF0YSxsZW5ndGgpICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9fR1NUX0NBVF9NRU1EVU1QX0xPRyhHU1RfQ0FUX0RFRkFVTFQsTlVMTCxtc2csZGF0YSxsZW5ndGgpCisKKy8qKgorICogR1NUX0NBVF9FUlJPUl9PQkpFQ1Q6CisgKiBAY2F0OiBjYXRlZ29yeSB0byB1c2UKKyAqIEBvYmo6IHRoZSAjR09iamVjdCB0aGUgbWVzc2FnZSBiZWxvbmdzIHRvCisgKiBALi4uOiBwcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQKKyAqCisgKiBPdXRwdXQgYW4gZXJyb3IgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCisgKi8KKy8qKgorICogR1NUX0NBVF9XQVJOSU5HX09CSkVDVDoKKyAqIEBjYXQ6IGNhdGVnb3J5IHRvIHVzZQorICogQG9iajogdGhlICNHT2JqZWN0IHRoZSBtZXNzYWdlIGJlbG9uZ3MgdG8KKyAqIEAuLi46IHByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dAorICoKKyAqIE91dHB1dCBhIHdhcm5pbmcgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCisgKi8KKy8qKgorICogR1NUX0NBVF9JTkZPX09CSkVDVDoKKyAqIEBjYXQ6IGNhdGVnb3J5IHRvIHVzZQorICogQG9iajogdGhlICNHT2JqZWN0IHRoZSBtZXNzYWdlIGJlbG9uZ3MgdG8KKyAqIEAuLi46IHByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dAorICoKKyAqIE91dHB1dCBhbiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UgYmVsb25naW5nIHRvIHRoZSBnaXZlbiBvYmplY3QgaW4gdGhlIGdpdmVuCisgKiBjYXRlZ29yeS4KKyAqLworLyoqCisgKiBHU1RfQ0FUX0RFQlVHX09CSkVDVDoKKyAqIEBjYXQ6IGNhdGVnb3J5IHRvIHVzZQorICogQG9iajogdGhlICNHT2JqZWN0IHRoZSBtZXNzYWdlIGJlbG9uZ3MgdG8KKyAqIEAuLi46IHByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dAorICoKKyAqIE91dHB1dCBhbiBkZWJ1Z2dpbmcgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCisgKi8KKy8qKgorICogR1NUX0NBVF9MT0dfT0JKRUNUOgorICogQGNhdDogY2F0ZWdvcnkgdG8gdXNlCisgKiBAb2JqOiB0aGUgI0dPYmplY3QgdGhlIG1lc3NhZ2UgYmVsb25ncyB0bworICogQC4uLjogcHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0CisgKgorICogT3V0cHV0IGFuIGxvZ2dpbmcgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCisgKi8KKy8qKgorICogR1NUX0NBVF9GSVhNRV9PQkpFQ1Q6CisgKiBAY2F0OiBjYXRlZ29yeSB0byB1c2UKKyAqIEBvYmo6IHRoZSAjR09iamVjdCB0aGUgbWVzc2FnZSBiZWxvbmdzIHRvCisgKiBALi4uOiBwcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQKKyAqCisgKiBPdXRwdXQgYSBmaXhtZSBtZXNzYWdlIGJlbG9uZ2luZyB0byB0aGUgZ2l2ZW4gb2JqZWN0IGluIHRoZSBnaXZlbiBjYXRlZ29yeS4KKyAqCisgKiBTaW5jZTogMC4xMC4yMworICovCisvKioKKyAqIEdTVF9DQVRfVFJBQ0VfT0JKRUNUOgorICogQGNhdDogY2F0ZWdvcnkgdG8gdXNlCisgKiBAb2JqOiB0aGUgI0dPYmplY3QgdGhlIG1lc3NhZ2UgYmVsb25ncyB0bworICogQC4uLjogcHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0CisgKgorICogT3V0cHV0IGEgdHJhY2luZyBtZXNzYWdlIGJlbG9uZ2luZyB0byB0aGUgZ2l2ZW4gb2JqZWN0IGluIHRoZSBnaXZlbgorICogY2F0ZWdvcnkuCisgKgorICogU2luY2U6IDAuMTAuMzAKKyAqLworLyoqCisgKiBHU1RfQ0FUX01FTURVTVBfT0JKRUNUOgorICogQGNhdDogY2F0ZWdvcnkgdG8gdXNlCisgKiBAb2JqOiB0aGUgI0dPYmplY3QgdGhlIG1lc3NhZ2UgYmVsb25ncyB0bworICogQG1zZzogbWVzc2FnZSBzdHJpbmcgdG8gbG9nIHdpdGggdGhlIGRhdGEKKyAqIEBkYXRhOiBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIG91dHB1dAorICogQGxlbmd0aDogbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIG91dHB1dAorICoKKyAqIE91dHB1dCBhIGhleGR1bXAgb2YgQGRhdGEgcmVsYXRpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZ2l2ZW4KKyAqIGNhdGVnb3J5LgorICoKKyAqIFNpbmNlOiAwLjEwLjIzCisgKi8KKworCisvKioKKyAqIEdTVF9DQVRfRVJST1I6CisgKiBAY2F0OiBjYXRlZ29yeSB0byB1c2UKKyAqIEAuLi46IHByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dAorICoKKyAqIE91dHB1dCBhbiBlcnJvciBtZXNzYWdlIGluIHRoZSBnaXZlbiBjYXRlZ29yeS4KKyAqLworLyoqCisgKiBHU1RfQ0FUX1dBUk5JTkc6CisgKiBAY2F0OiBjYXRlZ29yeSB0byB1c2UKKyAqIEAuLi46IHByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dAorICoKKyAqIE91dHB1dCBhbiB3YXJuaW5nIG1lc3NhZ2UgaW4gdGhlIGdpdmVuIGNhdGVnb3J5LgorICovCisvKioKKyAqIEdTVF9DQVRfSU5GTzoKKyAqIEBjYXQ6IGNhdGVnb3J5IHRvIHVzZQorICogQC4uLjogcHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0CisgKgorICogT3V0cHV0IGFuIGluZm9ybWF0aW9uYWwgbWVzc2FnZSBpbiB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCisgKi8KKy8qKgorICogR1NUX0NBVF9ERUJVRzoKKyAqIEBjYXQ6IGNhdGVnb3J5IHRvIHVzZQorICogQC4uLjogcHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0CisgKgorICogT3V0cHV0IGFuIGRlYnVnZ2luZyBtZXNzYWdlIGluIHRoZSBnaXZlbiBjYXRlZ29yeS4KKyAqLworLyoqCisgKiBHU1RfQ0FUX0xPRzoKKyAqIEBjYXQ6IGNhdGVnb3J5IHRvIHVzZQorICogQC4uLjogcHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0CisgKgorICogT3V0cHV0IGFuIGxvZ2dpbmcgbWVzc2FnZSBpbiB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCisgKi8KKy8qKgorICogR1NUX0NBVF9GSVhNRToKKyAqIEBjYXQ6IGNhdGVnb3J5IHRvIHVzZQorICogQC4uLjogcHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0CisgKgorICogT3V0cHV0IGFuIGZpeG1lIG1lc3NhZ2UgaW4gdGhlIGdpdmVuIGNhdGVnb3J5LgorICoKKyAqIFNpbmNlOiAwLjEwLjIzCisgKi8KKy8qKgorICogR1NUX0NBVF9UUkFDRToKKyAqIEBjYXQ6IGNhdGVnb3J5IHRvIHVzZQorICogQC4uLjogcHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0CisgKgorICogT3V0cHV0IGEgdHJhY2luZyBtZXNzYWdlIGluIHRoZSBnaXZlbiBjYXRlZ29yeS4KKyAqCisgKiBTaW5jZTogMC4xMC4zMAorICovCisvKioKKyAqIEdTVF9DQVRfTUVNRFVNUDoKKyAqIEBjYXQ6IGNhdGVnb3J5IHRvIHVzZQorICogQG1zZzogbWVzc2FnZSBzdHJpbmcgdG8gbG9nIHdpdGggdGhlIGRhdGEKKyAqIEBkYXRhOiBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIG91dHB1dAorICogQGxlbmd0aDogbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIG91dHB1dAorICoKKyAqIE91dHB1dCBhIGhleGR1bXAgb2YgQGRhdGEgaW4gdGhlIGdpdmVuIGNhdGVnb3J5LgorICoKKyAqIFNpbmNlOiAwLjEwLjIzCisgKi8KKworCisvKioKKyAqIEdTVF9FUlJPUl9PQkpFQ1Q6CisgKiBAb2JqOiB0aGUgI0dPYmplY3QgdGhlIG1lc3NhZ2UgYmVsb25ncyB0bworICogQC4uLjogcHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0CisgKgorICogT3V0cHV0IGFuIGVycm9yIG1lc3NhZ2UgYmVsb25naW5nIHRvIHRoZSBnaXZlbiBvYmplY3QgaW4gdGhlIGRlZmF1bHQgY2F0ZWdvcnkuCisgKi8KKy8qKgorICogR1NUX1dBUk5JTkdfT0JKRUNUOgorICogQG9iajogdGhlICNHT2JqZWN0IHRoZSBtZXNzYWdlIGJlbG9uZ3MgdG8KKyAqIEAuLi46IHByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dAorICoKKyAqIE91dHB1dCBhIHdhcm5pbmcgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZGVmYXVsdCBjYXRlZ29yeS4KKyAqLworLyoqCisgKiBHU1RfSU5GT19PQkpFQ1Q6CisgKiBAb2JqOiB0aGUgI0dPYmplY3QgdGhlIG1lc3NhZ2UgYmVsb25ncyB0bworICogQC4uLjogcHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0CisgKgorICogT3V0cHV0IGFuIGluZm9ybWF0aW9uYWwgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZGVmYXVsdAorICogY2F0ZWdvcnkuCisgKi8KKy8qKgorICogR1NUX0RFQlVHX09CSkVDVDoKKyAqIEBvYmo6IHRoZSAjR09iamVjdCB0aGUgbWVzc2FnZSBiZWxvbmdzIHRvCisgKiBALi4uOiBwcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQKKyAqCisgKiBPdXRwdXQgYSBkZWJ1Z2dpbmcgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZGVmYXVsdAorICogY2F0ZWdvcnkuCisgKi8KKy8qKgorICogR1NUX0xPR19PQkpFQ1Q6CisgKiBAb2JqOiB0aGUgI0dPYmplY3QgdGhlIG1lc3NhZ2UgYmVsb25ncyB0bworICogQC4uLjogcHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0CisgKgorICogT3V0cHV0IGEgbG9nZ2luZyBtZXNzYWdlIGJlbG9uZ2luZyB0byB0aGUgZ2l2ZW4gb2JqZWN0IGluIHRoZSBkZWZhdWx0IGNhdGVnb3J5LgorICovCisvKioKKyAqIEdTVF9GSVhNRV9PQkpFQ1Q6CisgKiBAb2JqOiB0aGUgI0dPYmplY3QgdGhlIG1lc3NhZ2UgYmVsb25ncyB0bworICogQC4uLjogcHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0CisgKgorICogT3V0cHV0IGEgZml4bWUgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZGVmYXVsdCBjYXRlZ29yeS4KKyAqCisgKiBTaW5jZTogMC4xMC4yMworICovCisvKioKKyAqIEdTVF9UUkFDRV9PQkpFQ1Q6CisgKiBAb2JqOiB0aGUgI0dPYmplY3QgdGhlIG1lc3NhZ2UgYmVsb25ncyB0bworICogQC4uLjogcHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0CisgKgorICogT3V0cHV0IGEgdHJhY2luZyBtZXNzYWdlIGJlbG9uZ2luZyB0byB0aGUgZ2l2ZW4gb2JqZWN0IGluIHRoZSBkZWZhdWx0IGNhdGVnb3J5LgorICoKKyAqIFNpbmNlOiAwLjEwLjMwCisgKi8KKy8qKgorICogR1NUX01FTURVTVBfT0JKRUNUOgorICogQG9iajogdGhlICNHT2JqZWN0IHRoZSBtZXNzYWdlIGJlbG9uZ3MgdG8KKyAqIEBtc2c6IG1lc3NhZ2Ugc3RyaW5nIHRvIGxvZyB3aXRoIHRoZSBkYXRhCisgKiBAZGF0YTogcG9pbnRlciB0byB0aGUgZGF0YSB0byBvdXRwdXQKKyAqIEBsZW5ndGg6IGxlbmd0aCBvZiB0aGUgZGF0YSB0byBvdXRwdXQKKyAqCisgKiBPdXRwdXQgYSBsb2dnaW5nIG1lc3NhZ2UgYmVsb25naW5nIHRvIHRoZSBnaXZlbiBvYmplY3QgaW4gdGhlIGRlZmF1bHQgY2F0ZWdvcnkuCisgKgorICogU2luY2U6IDAuMTAuMjMKKyAqLworCisKKy8qKgorICogR1NUX0VSUk9SOgorICogQC4uLjogcHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0CisgKgorICogT3V0cHV0IGFuIGVycm9yIG1lc3NhZ2UgaW4gdGhlIGRlZmF1bHQgY2F0ZWdvcnkuCisgKi8KKy8qKgorICogR1NUX1dBUk5JTkc6CisgKiBALi4uOiBwcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQKKyAqCisgKiBPdXRwdXQgYSB3YXJuaW5nIG1lc3NhZ2UgaW4gdGhlIGRlZmF1bHQgY2F0ZWdvcnkuCisgKi8KKy8qKgorICogR1NUX0lORk86CisgKiBALi4uOiBwcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQKKyAqCisgKiBPdXRwdXQgYW4gaW5mb3JtYXRpb25hbCBtZXNzYWdlIGluIHRoZSBkZWZhdWx0IGNhdGVnb3J5LgorICovCisvKioKKyAqIEdTVF9ERUJVRzoKKyAqIEAuLi46IHByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dAorICoKKyAqIE91dHB1dCBhIGRlYnVnZ2luZyBtZXNzYWdlIGluIHRoZSBkZWZhdWx0IGNhdGVnb3J5LgorICovCisvKioKKyAqIEdTVF9MT0c6CisgKiBALi4uOiBwcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQKKyAqCisgKiBPdXRwdXQgYSBsb2dnaW5nIG1lc3NhZ2UgaW4gdGhlIGRlZmF1bHQgY2F0ZWdvcnkuCisgKi8KKy8qKgorICogR1NUX0ZJWE1FOgorICogQC4uLjogcHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0CisgKgorICogT3V0cHV0IGEgZml4bWUgbWVzc2FnZSBpbiB0aGUgZGVmYXVsdCBjYXRlZ29yeS4KKyAqCisgKiBTaW5jZTogMC4xMC4yMworICovCisvKioKKyAqIEdTVF9UUkFDRToKKyAqIEAuLi46IHByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dAorICoKKyAqIE91dHB1dCBhIHRyYWNpbmcgbWVzc2FnZSBpbiB0aGUgZGVmYXVsdCBjYXRlZ29yeS4KKyAqCisgKiBTaW5jZTogMC4xMC4zMAorICovCisvKioKKyAqIEdTVF9NRU1EVU1QOgorICogQG1zZzogbWVzc2FnZSBzdHJpbmcgdG8gbG9nIHdpdGggdGhlIGRhdGEKKyAqIEBkYXRhOiBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIG91dHB1dAorICogQGxlbmd0aDogbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIG91dHB1dAorICoKKyAqIE91dHB1dCBhIGhleGR1bXAgb2YgQGRhdGEuCisgKgorICogU2luY2U6IDAuMTAuMjMKKyAqLworCisjaWZkZWYgR19IQVZFX0lTT19WQVJBUkdTCisKKyNkZWZpbmUgR1NUX0NBVF9FUlJPUl9PQkpFQ1QoY2F0LG9iaiwuLi4pCUdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9FUlJPUiwgICBvYmosICBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgR1NUX0NBVF9XQVJOSU5HX09CSkVDVChjYXQsb2JqLC4uLikJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX1dBUk5JTkcsIG9iaiwgIF9fVkFfQVJHU19fKQorI2RlZmluZSBHU1RfQ0FUX0lORk9fT0JKRUNUKGNhdCxvYmosLi4uKQlHU1RfQ0FUX0xFVkVMX0xPRyAoY2F0LCBHU1RfTEVWRUxfSU5GTywgICAgb2JqLCAgX19WQV9BUkdTX18pCisjZGVmaW5lIEdTVF9DQVRfREVCVUdfT0JKRUNUKGNhdCxvYmosLi4uKQlHU1RfQ0FUX0xFVkVMX0xPRyAoY2F0LCBHU1RfTEVWRUxfREVCVUcsICAgb2JqLCAgX19WQV9BUkdTX18pCisjZGVmaW5lIEdTVF9DQVRfTE9HX09CSkVDVChjYXQsb2JqLC4uLikJCUdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9MT0csICAgICBvYmosICBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgR1NUX0NBVF9GSVhNRV9PQkpFQ1QoY2F0LG9iaiwuLi4pCUdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9GSVhNRSwgICBvYmosICBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgR1NUX0NBVF9UUkFDRV9PQkpFQ1QoY2F0LG9iaiwuLi4pCUdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9UUkFDRSwgICBvYmosICBfX1ZBX0FSR1NfXykKKworI2RlZmluZSBHU1RfQ0FUX0VSUk9SKGNhdCwuLi4pCQkJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX0VSUk9SLCAgIE5VTEwsIF9fVkFfQVJHU19fKQorI2RlZmluZSBHU1RfQ0FUX1dBUk5JTkcoY2F0LC4uLikJCUdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9XQVJOSU5HLCBOVUxMLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgR1NUX0NBVF9JTkZPKGNhdCwuLi4pCQkJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX0lORk8sICAgIE5VTEwsIF9fVkFfQVJHU19fKQorI2RlZmluZSBHU1RfQ0FUX0RFQlVHKGNhdCwuLi4pCQkJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX0RFQlVHLCAgIE5VTEwsIF9fVkFfQVJHU19fKQorI2RlZmluZSBHU1RfQ0FUX0xPRyhjYXQsLi4uKQkJCUdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9MT0csICAgICBOVUxMLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgR1NUX0NBVF9GSVhNRShjYXQsLi4uKQkJCUdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9GSVhNRSwgICBOVUxMLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgR1NUX0NBVF9UUkFDRShjYXQsLi4uKQkJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX1RSQUNFLCAgIE5VTEwsIF9fVkFfQVJHU19fKQorCisjZGVmaW5lIEdTVF9FUlJPUl9PQkpFQ1Qob2JqLC4uLikJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0VSUk9SLCAgIG9iaiwgIF9fVkFfQVJHU19fKQorI2RlZmluZSBHU1RfV0FSTklOR19PQkpFQ1Qob2JqLC4uLikJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX1dBUk5JTkcsIG9iaiwgIF9fVkFfQVJHU19fKQorI2RlZmluZSBHU1RfSU5GT19PQkpFQ1Qob2JqLC4uLikJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0lORk8sICAgIG9iaiwgIF9fVkFfQVJHU19fKQorI2RlZmluZSBHU1RfREVCVUdfT0JKRUNUKG9iaiwuLi4pCUdTVF9DQVRfTEVWRUxfTE9HIChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9ERUJVRywgICBvYmosICBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgR1NUX0xPR19PQkpFQ1Qob2JqLC4uLikJCUdTVF9DQVRfTEVWRUxfTE9HIChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9MT0csICAgICBvYmosICBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgR1NUX0ZJWE1FX09CSkVDVChvYmosLi4uKQlHU1RfQ0FUX0xFVkVMX0xPRyAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfRklYTUUsICAgb2JqLCAgX19WQV9BUkdTX18pCisjZGVmaW5lIEdTVF9UUkFDRV9PQkpFQ1Qob2JqLC4uLikJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX1RSQUNFLCAgIG9iaiwgIF9fVkFfQVJHU19fKQorCisjZGVmaW5lIEdTVF9FUlJPUiguLi4pCQkJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0VSUk9SLCAgIE5VTEwsIF9fVkFfQVJHU19fKQorI2RlZmluZSBHU1RfV0FSTklORyguLi4pCQlHU1RfQ0FUX0xFVkVMX0xPRyAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfV0FSTklORywgTlVMTCwgX19WQV9BUkdTX18pCisjZGVmaW5lIEdTVF9JTkZPKC4uLikJCQlHU1RfQ0FUX0xFVkVMX0xPRyAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfSU5GTywgICAgTlVMTCwgX19WQV9BUkdTX18pCisjZGVmaW5lIEdTVF9ERUJVRyguLi4pCQkJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0RFQlVHLCAgIE5VTEwsIF9fVkFfQVJHU19fKQorI2RlZmluZSBHU1RfTE9HKC4uLikJCQlHU1RfQ0FUX0xFVkVMX0xPRyAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfTE9HLCAgICAgTlVMTCwgX19WQV9BUkdTX18pCisjZGVmaW5lIEdTVF9GSVhNRSguLi4pCQkJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0ZJWE1FLCAgIE5VTEwsIF9fVkFfQVJHU19fKQorI2RlZmluZSBHU1RfVFJBQ0UoLi4uKQkJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX1RSQUNFLCAgIE5VTEwsIF9fVkFfQVJHU19fKQorCisjZWxzZQorI2lmZGVmIEdfSEFWRV9HTlVDX1ZBUkFSR1MKKworI2RlZmluZSBHU1RfQ0FUX0VSUk9SX09CSkVDVChjYXQsb2JqLGFyZ3MuLi4pCUdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9FUlJPUiwgICBvYmosICAjI2FyZ3MgKQorI2RlZmluZSBHU1RfQ0FUX1dBUk5JTkdfT0JKRUNUKGNhdCxvYmosYXJncy4uLikJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX1dBUk5JTkcsIG9iaiwgICMjYXJncyApCisjZGVmaW5lIEdTVF9DQVRfSU5GT19PQkpFQ1QoY2F0LG9iaixhcmdzLi4uKQlHU1RfQ0FUX0xFVkVMX0xPRyAoY2F0LCBHU1RfTEVWRUxfSU5GTywgICAgb2JqLCAgIyNhcmdzICkKKyNkZWZpbmUgR1NUX0NBVF9ERUJVR19PQkpFQ1QoY2F0LG9iaixhcmdzLi4uKQlHU1RfQ0FUX0xFVkVMX0xPRyAoY2F0LCBHU1RfTEVWRUxfREVCVUcsICAgb2JqLCAgIyNhcmdzICkKKyNkZWZpbmUgR1NUX0NBVF9MT0dfT0JKRUNUKGNhdCxvYmosYXJncy4uLikJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX0xPRywgICAgIG9iaiwgICMjYXJncyApCisjZGVmaW5lIEdTVF9DQVRfRklYTUVfT0JKRUNUKGNhdCxvYmosYXJncy4uLikJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX0ZJWE1FLCAgIG9iaiwgICMjYXJncyApCisjZGVmaW5lIEdTVF9DQVRfVFJBQ0VfT0JKRUNUKGNhdCxvYmosYXJncy4uLikJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX1RSQUNFLCAgIG9iaiwgICMjYXJncyApCisKKyNkZWZpbmUgR1NUX0NBVF9FUlJPUihjYXQsYXJncy4uLikJCUdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9FUlJPUiwgICBOVUxMLCAjI2FyZ3MgKQorI2RlZmluZSBHU1RfQ0FUX1dBUk5JTkcoY2F0LGFyZ3MuLi4pCQlHU1RfQ0FUX0xFVkVMX0xPRyAoY2F0LCBHU1RfTEVWRUxfV0FSTklORywgTlVMTCwgIyNhcmdzICkKKyNkZWZpbmUgR1NUX0NBVF9JTkZPKGNhdCxhcmdzLi4uKQkJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX0lORk8sICAgIE5VTEwsICMjYXJncyApCisjZGVmaW5lIEdTVF9DQVRfREVCVUcoY2F0LGFyZ3MuLi4pCQlHU1RfQ0FUX0xFVkVMX0xPRyAoY2F0LCBHU1RfTEVWRUxfREVCVUcsICAgTlVMTCwgIyNhcmdzICkKKyNkZWZpbmUgR1NUX0NBVF9MT0coY2F0LGFyZ3MuLi4pCQlHU1RfQ0FUX0xFVkVMX0xPRyAoY2F0LCBHU1RfTEVWRUxfTE9HLCAgICAgTlVMTCwgIyNhcmdzICkKKyNkZWZpbmUgR1NUX0NBVF9GSVhNRShjYXQsYXJncy4uLikJCUdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9GSVhNRSwgICBOVUxMLCAjI2FyZ3MgKQorI2RlZmluZSBHU1RfQ0FUX1RSQUNFKGNhdCxhcmdzLi4uKQkJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX1RSQUNFLCAgIE5VTEwsICMjYXJncyApCisKKyNkZWZpbmUgR1NUX0VSUk9SX09CSkVDVChvYmosYXJncy4uLikJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0VSUk9SLCAgIG9iaiwgICMjYXJncyApCisjZGVmaW5lIEdTVF9XQVJOSU5HX09CSkVDVChvYmosYXJncy4uLikJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX1dBUk5JTkcsIG9iaiwgICMjYXJncyApCisjZGVmaW5lIEdTVF9JTkZPX09CSkVDVChvYmosYXJncy4uLikJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0lORk8sICAgIG9iaiwgICMjYXJncyApCisjZGVmaW5lIEdTVF9ERUJVR19PQkpFQ1Qob2JqLGFyZ3MuLi4pCUdTVF9DQVRfTEVWRUxfTE9HIChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9ERUJVRywgICBvYmosICAjI2FyZ3MgKQorI2RlZmluZSBHU1RfTE9HX09CSkVDVChvYmosYXJncy4uLikJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0xPRywgICAgIG9iaiwgICMjYXJncyApCisjZGVmaW5lIEdTVF9GSVhNRV9PQkpFQ1Qob2JqLGFyZ3MuLi4pCUdTVF9DQVRfTEVWRUxfTE9HIChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9GSVhNRSwgICBvYmosICAjI2FyZ3MgKQorI2RlZmluZSBHU1RfVFJBQ0VfT0JKRUNUKG9iaixhcmdzLi4uKQlHU1RfQ0FUX0xFVkVMX0xPRyAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfVFJBQ0UsICAgb2JqLCAgIyNhcmdzICkKKworI2RlZmluZSBHU1RfRVJST1IoYXJncy4uLikJCUdTVF9DQVRfTEVWRUxfTE9HIChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9FUlJPUiwgICBOVUxMLCAjI2FyZ3MgKQorI2RlZmluZSBHU1RfV0FSTklORyhhcmdzLi4uKQkJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX1dBUk5JTkcsIE5VTEwsICMjYXJncyApCisjZGVmaW5lIEdTVF9JTkZPKGFyZ3MuLi4pCQlHU1RfQ0FUX0xFVkVMX0xPRyAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfSU5GTywgICAgTlVMTCwgIyNhcmdzICkKKyNkZWZpbmUgR1NUX0RFQlVHKGFyZ3MuLi4pCQlHU1RfQ0FUX0xFVkVMX0xPRyAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfREVCVUcsICAgTlVMTCwgIyNhcmdzICkKKyNkZWZpbmUgR1NUX0xPRyhhcmdzLi4uKQkJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0xPRywgICAgIE5VTEwsICMjYXJncyApCisjZGVmaW5lIEdTVF9GSVhNRShhcmdzLi4uKQkJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0ZJWE1FLCAgIE5VTEwsICMjYXJncyApCisjZGVmaW5lIEdTVF9UUkFDRShhcmdzLi4uKQkJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX1RSQUNFLCAgIE5VTEwsICMjYXJncyApCisKKyNlbHNlCisvKiBubyB2YXJpYWRpYyBtYWNyb3MsIHVzZSBpbmxpbmUgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorR1NUX0NBVF9FUlJPUl9PQkpFQ1QgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXQsIGdwb2ludGVyIG9iaiwgY29uc3QgY2hhciAqZm9ybWF0LAorICAgIC4uLikKK3sKKyAgdmFfbGlzdCB2YXJhcmdzOworCisgIHZhX3N0YXJ0ICh2YXJhcmdzLCBmb3JtYXQpOworICBHU1RfQ0FUX0xFVkVMX0xPR192YWxpc3QgKGNhdCwgR1NUX0xFVkVMX0VSUk9SLCBvYmosIGZvcm1hdCwgdmFyYXJncyk7CisgIHZhX2VuZCAodmFyYXJncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorR1NUX0NBVF9XQVJOSU5HX09CSkVDVCAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdCwgZ3BvaW50ZXIgb2JqLAorICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IHZhcmFyZ3M7CisKKyAgdmFfc3RhcnQgKHZhcmFyZ3MsIGZvcm1hdCk7CisgIEdTVF9DQVRfTEVWRUxfTE9HX3ZhbGlzdCAoY2F0LCBHU1RfTEVWRUxfV0FSTklORywgb2JqLCBmb3JtYXQsIHZhcmFyZ3MpOworICB2YV9lbmQgKHZhcmFyZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0dTVF9DQVRfSU5GT19PQkpFQ1QgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXQsIGdwb2ludGVyIG9iaiwgY29uc3QgY2hhciAqZm9ybWF0LAorICAgIC4uLikKK3sKKyAgdmFfbGlzdCB2YXJhcmdzOworCisgIHZhX3N0YXJ0ICh2YXJhcmdzLCBmb3JtYXQpOworICBHU1RfQ0FUX0xFVkVMX0xPR192YWxpc3QgKGNhdCwgR1NUX0xFVkVMX0lORk8sIG9iaiwgZm9ybWF0LCB2YXJhcmdzKTsKKyAgdmFfZW5kICh2YXJhcmdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdCwgZ3BvaW50ZXIgb2JqLCBjb25zdCBjaGFyICpmb3JtYXQsCisgICAgLi4uKQoreworICB2YV9saXN0IHZhcmFyZ3M7CisKKyAgdmFfc3RhcnQgKHZhcmFyZ3MsIGZvcm1hdCk7CisgIEdTVF9DQVRfTEVWRUxfTE9HX3ZhbGlzdCAoY2F0LCBHU1RfTEVWRUxfREVCVUcsIG9iaiwgZm9ybWF0LCB2YXJhcmdzKTsKKyAgdmFfZW5kICh2YXJhcmdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitHU1RfQ0FUX0xPR19PQkpFQ1QgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXQsIGdwb2ludGVyIG9iaiwgY29uc3QgY2hhciAqZm9ybWF0LAorICAgIC4uLikKK3sKKyAgdmFfbGlzdCB2YXJhcmdzOworCisgIHZhX3N0YXJ0ICh2YXJhcmdzLCBmb3JtYXQpOworICBHU1RfQ0FUX0xFVkVMX0xPR192YWxpc3QgKGNhdCwgR1NUX0xFVkVMX0xPRywgb2JqLCBmb3JtYXQsIHZhcmFyZ3MpOworICB2YV9lbmQgKHZhcmFyZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0dTVF9DQVRfRklYTUVfT0JKRUNUIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0LCBncG9pbnRlciBvYmosIGNvbnN0IGNoYXIgKmZvcm1hdCwKKyAgICAuLi4pCit7CisgIHZhX2xpc3QgdmFyYXJnczsKKworICB2YV9zdGFydCAodmFyYXJncywgZm9ybWF0KTsKKyAgR1NUX0NBVF9MRVZFTF9MT0dfdmFsaXN0IChjYXQsIEdTVF9MRVZFTF9GSVhNRSwgb2JqLCBmb3JtYXQsIHZhcmFyZ3MpOworICB2YV9lbmQgKHZhcmFyZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0dTVF9DQVRfVFJBQ0VfT0JKRUNUIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0LCBncG9pbnRlciBvYmosIGNvbnN0IGNoYXIgKmZvcm1hdCwKKyAgICAuLi4pCit7CisgIHZhX2xpc3QgdmFyYXJnczsKKworICB2YV9zdGFydCAodmFyYXJncywgZm9ybWF0KTsKKyAgR1NUX0NBVF9MRVZFTF9MT0dfdmFsaXN0IChjYXQsIEdTVF9MRVZFTF9UUkFDRSwgb2JqLCBmb3JtYXQsIHZhcmFyZ3MpOworICB2YV9lbmQgKHZhcmFyZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0dTVF9DQVRfRVJST1IgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IHZhcmFyZ3M7CisKKyAgdmFfc3RhcnQgKHZhcmFyZ3MsIGZvcm1hdCk7CisgIEdTVF9DQVRfTEVWRUxfTE9HX3ZhbGlzdCAoY2F0LCBHU1RfTEVWRUxfRVJST1IsIE5VTEwsIGZvcm1hdCwgdmFyYXJncyk7CisgIHZhX2VuZCAodmFyYXJncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorR1NUX0NBVF9XQVJOSU5HIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCB2YXJhcmdzOworCisgIHZhX3N0YXJ0ICh2YXJhcmdzLCBmb3JtYXQpOworICBHU1RfQ0FUX0xFVkVMX0xPR192YWxpc3QgKGNhdCwgR1NUX0xFVkVMX1dBUk5JTkcsIE5VTEwsIGZvcm1hdCwgdmFyYXJncyk7CisgIHZhX2VuZCAodmFyYXJncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorR1NUX0NBVF9JTkZPIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCB2YXJhcmdzOworCisgIHZhX3N0YXJ0ICh2YXJhcmdzLCBmb3JtYXQpOworICBHU1RfQ0FUX0xFVkVMX0xPR192YWxpc3QgKGNhdCwgR1NUX0xFVkVMX0lORk8sIE5VTEwsIGZvcm1hdCwgdmFyYXJncyk7CisgIHZhX2VuZCAodmFyYXJncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorR1NUX0NBVF9ERUJVRyAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgdmFyYXJnczsKKworICB2YV9zdGFydCAodmFyYXJncywgZm9ybWF0KTsKKyAgR1NUX0NBVF9MRVZFTF9MT0dfdmFsaXN0IChjYXQsIEdTVF9MRVZFTF9ERUJVRywgTlVMTCwgZm9ybWF0LCB2YXJhcmdzKTsKKyAgdmFfZW5kICh2YXJhcmdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitHU1RfQ0FUX0xPRyAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgdmFyYXJnczsKKworICB2YV9zdGFydCAodmFyYXJncywgZm9ybWF0KTsKKyAgR1NUX0NBVF9MRVZFTF9MT0dfdmFsaXN0IChjYXQsIEdTVF9MRVZFTF9MT0csIE5VTEwsIGZvcm1hdCwgdmFyYXJncyk7CisgIHZhX2VuZCAodmFyYXJncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorR1NUX0NBVF9GSVhNRSAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgdmFyYXJnczsKKworICB2YV9zdGFydCAodmFyYXJncywgZm9ybWF0KTsKKyAgR1NUX0NBVF9MRVZFTF9MT0dfdmFsaXN0IChjYXQsIEdTVF9MRVZFTF9GSVhNRSwgTlVMTCwgZm9ybWF0LCB2YXJhcmdzKTsKKyAgdmFfZW5kICh2YXJhcmdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitHU1RfQ0FUX1RSQUNFIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCB2YXJhcmdzOworCisgIHZhX3N0YXJ0ICh2YXJhcmdzLCBmb3JtYXQpOworICBHU1RfQ0FUX0xFVkVMX0xPR192YWxpc3QgKGNhdCwgR1NUX0xFVkVMX1RSQUNFLCBOVUxMLCBmb3JtYXQsIHZhcmFyZ3MpOworICB2YV9lbmQgKHZhcmFyZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0dTVF9FUlJPUl9PQkpFQ1QgKGdwb2ludGVyIG9iaiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgdmFyYXJnczsKKworICB2YV9zdGFydCAodmFyYXJncywgZm9ybWF0KTsKKyAgR1NUX0NBVF9MRVZFTF9MT0dfdmFsaXN0IChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9FUlJPUiwgb2JqLCBmb3JtYXQsCisgICAgICB2YXJhcmdzKTsKKyAgdmFfZW5kICh2YXJhcmdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitHU1RfV0FSTklOR19PQkpFQ1QgKGdwb2ludGVyIG9iaiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgdmFyYXJnczsKKworICB2YV9zdGFydCAodmFyYXJncywgZm9ybWF0KTsKKyAgR1NUX0NBVF9MRVZFTF9MT0dfdmFsaXN0IChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9XQVJOSU5HLCBvYmosIGZvcm1hdCwKKyAgICAgIHZhcmFyZ3MpOworICB2YV9lbmQgKHZhcmFyZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0dTVF9JTkZPX09CSkVDVCAoZ3BvaW50ZXIgb2JqLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCB2YXJhcmdzOworCisgIHZhX3N0YXJ0ICh2YXJhcmdzLCBmb3JtYXQpOworICBHU1RfQ0FUX0xFVkVMX0xPR192YWxpc3QgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0lORk8sIG9iaiwgZm9ybWF0LAorICAgICAgdmFyYXJncyk7CisgIHZhX2VuZCAodmFyYXJncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorR1NUX0RFQlVHX09CSkVDVCAoZ3BvaW50ZXIgb2JqLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCB2YXJhcmdzOworCisgIHZhX3N0YXJ0ICh2YXJhcmdzLCBmb3JtYXQpOworICBHU1RfQ0FUX0xFVkVMX0xPR192YWxpc3QgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0RFQlVHLCBvYmosIGZvcm1hdCwKKyAgICAgIHZhcmFyZ3MpOworICB2YV9lbmQgKHZhcmFyZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0dTVF9MT0dfT0JKRUNUIChncG9pbnRlciBvYmosIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IHZhcmFyZ3M7CisKKyAgdmFfc3RhcnQgKHZhcmFyZ3MsIGZvcm1hdCk7CisgIEdTVF9DQVRfTEVWRUxfTE9HX3ZhbGlzdCAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfTE9HLCBvYmosIGZvcm1hdCwKKyAgICAgIHZhcmFyZ3MpOworICB2YV9lbmQgKHZhcmFyZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0dTVF9GSVhNRV9PQkpFQ1QgKGdwb2ludGVyIG9iaiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgdmFyYXJnczsKKworICB2YV9zdGFydCAodmFyYXJncywgZm9ybWF0KTsKKyAgR1NUX0NBVF9MRVZFTF9MT0dfdmFsaXN0IChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9GSVhNRSwgb2JqLCBmb3JtYXQsCisgICAgICB2YXJhcmdzKTsKKyAgdmFfZW5kICh2YXJhcmdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitHU1RfVFJBQ0VfT0JKRUNUIChncG9pbnRlciBvYmosIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IHZhcmFyZ3M7CisKKyAgdmFfc3RhcnQgKHZhcmFyZ3MsIGZvcm1hdCk7CisgIEdTVF9DQVRfTEVWRUxfTE9HX3ZhbGlzdCAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfVFJBQ0UsIG9iaiwgZm9ybWF0LAorICAgICAgdmFyYXJncyk7CisgIHZhX2VuZCAodmFyYXJncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorR1NUX0VSUk9SIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCB2YXJhcmdzOworCisgIHZhX3N0YXJ0ICh2YXJhcmdzLCBmb3JtYXQpOworICBHU1RfQ0FUX0xFVkVMX0xPR192YWxpc3QgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0VSUk9SLCBOVUxMLCBmb3JtYXQsCisgICAgICB2YXJhcmdzKTsKKyAgdmFfZW5kICh2YXJhcmdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitHU1RfV0FSTklORyAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgdmFyYXJnczsKKworICB2YV9zdGFydCAodmFyYXJncywgZm9ybWF0KTsKKyAgR1NUX0NBVF9MRVZFTF9MT0dfdmFsaXN0IChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9XQVJOSU5HLCBOVUxMLCBmb3JtYXQsCisgICAgICB2YXJhcmdzKTsKKyAgdmFfZW5kICh2YXJhcmdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitHU1RfSU5GTyAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgdmFyYXJnczsKKworICB2YV9zdGFydCAodmFyYXJncywgZm9ybWF0KTsKKyAgR1NUX0NBVF9MRVZFTF9MT0dfdmFsaXN0IChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9JTkZPLCBOVUxMLCBmb3JtYXQsCisgICAgICB2YXJhcmdzKTsKKyAgdmFfZW5kICh2YXJhcmdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitHU1RfREVCVUcgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IHZhcmFyZ3M7CisKKyAgdmFfc3RhcnQgKHZhcmFyZ3MsIGZvcm1hdCk7CisgIEdTVF9DQVRfTEVWRUxfTE9HX3ZhbGlzdCAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfREVCVUcsIE5VTEwsIGZvcm1hdCwKKyAgICAgIHZhcmFyZ3MpOworICB2YV9lbmQgKHZhcmFyZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0dTVF9MT0cgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IHZhcmFyZ3M7CisKKyAgdmFfc3RhcnQgKHZhcmFyZ3MsIGZvcm1hdCk7CisgIEdTVF9DQVRfTEVWRUxfTE9HX3ZhbGlzdCAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfTE9HLCBOVUxMLAorICAgICAgZm9ybWF0LCB2YXJhcmdzKTsKKyAgdmFfZW5kICh2YXJhcmdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitHU1RfRklYTUUgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IHZhcmFyZ3M7CisKKyAgdmFfc3RhcnQgKHZhcmFyZ3MsIGZvcm1hdCk7CisgIEdTVF9DQVRfTEVWRUxfTE9HX3ZhbGlzdCAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfRklYTUUsIE5VTEwsIGZvcm1hdCwKKyAgICAgIHZhcmFyZ3MpOworICB2YV9lbmQgKHZhcmFyZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0dTVF9UUkFDRSAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgdmFyYXJnczsKKworICB2YV9zdGFydCAodmFyYXJncywgZm9ybWF0KTsKKyAgR1NUX0NBVF9MRVZFTF9MT0dfdmFsaXN0IChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9UUkFDRSwgTlVMTCwgZm9ybWF0LAorICAgICAgdmFyYXJncyk7CisgIHZhX2VuZCAodmFyYXJncyk7Cit9CisjZW5kaWYKKyNlbmRpZgorCisKKy8qKioqKioqKioqIGZ1bmN0aW9uIHBvaW50ZXIgc3R1ZmYgKioqKioqKioqKi8KKworLyoqCisgKiBHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUjoKKyAqIEBwdHI6IHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyCisgKgorICogUmVnaXN0ZXIgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gd2l0aCBpdHMgbmFtZSwgc28gaXQgY2FuIGxhdGVyIGJlIHVzZWQgYnkKKyAqIEdTVF9ERUJVR19GVU5DUFRSX05BTUUoKS4KKyAqCisgKiBVc2UgdGhpcyB2YXJpYW50IG9mICNHU1RfREVCVUdfRlVOQ1BUUiBpZiB5b3UgZG8gbm90IG5lZWQgdG8gdXNlIEBwdHIuCisgKgorICogU2luY2U6IDAuMTAuMjYKKyAqLworI2RlZmluZSBHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUihwdHIpIFwKKyAgX2dzdF9kZWJ1Z19yZWdpc3Rlcl9mdW5jcHRyKChHc3REZWJ1Z0Z1bmNQdHIpKHB0ciksICNwdHIpCisvKioKKyAqIEdTVF9ERUJVR19GVU5DUFRSOgorICogQHB0cjogcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIKKyAqCisgKiBSZWdpc3RlciBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB3aXRoIGl0cyBuYW1lLCBzbyBpdCBjYW4gbGF0ZXIgYmUgdXNlZCBieQorICogR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRSgpLgorICoKKyAqIFJldHVybnM6IHRoZSB2YWx1ZSBwYXNzZWQgdG8gQHB0ci4KKyAqLworI2RlZmluZSBHU1RfREVCVUdfRlVOQ1BUUihwdHIpIFwKKyAgKF9nc3RfZGVidWdfcmVnaXN0ZXJfZnVuY3B0cigoR3N0RGVidWdGdW5jUHRyKShwdHIpLCAjcHRyKSAsIHB0cikKKworLyoqCisgKiBHU1RfREVCVUdfRlVOQ1BUUl9OQU1FOgorICogQHB0cjogYWRkcmVzcyBvZiB0aGUgZnVuY3Rpb24gb2Ygd2hpY2ggdG8gbG9vayB1cCB0aGUgbmFtZQorICoKKyAqIFJldHJpZXZlcyB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24sIGlmIGl0IHdhcyBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgd2l0aAorICogR1NUX0RFQlVHX0ZVTkNQVFIoKS4gSWYgbm90LCBpdCByZXR1cm5zIGEgZGVzY3JpcHRpb24gb2YgdGhlIHBvaW50ZXIuCisgKgorICogVGhpcyBtYWNybyByZXR1cm5zIGEgY29uc3RhbnQgc3RyaW5nIHdoaWNoIG11c3Qgbm90IGJlIG1vZGlmaWVkIG9yCisgKiBmcmVlZCBieSB0aGUgY2FsbGVyLgorICovCisjZGVmaW5lIEdTVF9ERUJVR19GVU5DUFRSX05BTUUocHRyKSBcCisgIF9nc3RfZGVidWdfbmFtZW9mX2Z1bmNwdHIoKEdzdERlYnVnRnVuY1B0cilwdHIpCisKKworI2Vsc2UgLyogR1NUX0RJU0FCTEVfR1NUX0RFQlVHICovCisKKworI2lmbmRlZiBHU1RfSU5GT19DCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA+PSAzCisjICBwcmFnbWEgR0NDIHBvaXNvbiBnc3RfZGVidWdfbG9nCisjICBwcmFnbWEgR0NDIHBvaXNvbiBnc3RfZGVidWdfbG9nX3ZhbGlzdAorIyAgcHJhZ21hIEdDQyBwb2lzb24gX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcKKyNlbmRpZgorCisjZGVmaW5lIF9fZ3N0X2RlYnVnX21pbiBHU1RfTEVWRUxfTk9ORQorCisjZGVmaW5lIF9nc3RfZGVidWdfaW5pdCgpCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKKworI2RlZmluZSBnc3RfZGVidWdfc2V0X2RlZmF1bHRfdGhyZXNob2xkKGxldmVsKQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAorI2RlZmluZSBnc3RfZGVidWdfZ2V0X2RlZmF1bHRfdGhyZXNob2xkKCkJCShHU1RfTEVWRUxfTk9ORSkKKworI2RlZmluZSBnc3RfZGVidWdfbGV2ZWxfZ2V0X25hbWUobGV2ZWwpCQkJCSgiTk9ORSIpCisjZGVmaW5lIGdzdF9kZWJ1Z19tZXNzYWdlX2dldChtZXNzYWdlKSAgCQkJKCIiKQorI2RlZmluZSBnc3RfZGVidWdfYWRkX2xvZ19mdW5jdGlvbihmdW5jLGRhdGEpCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisjZGVmaW5lIGdzdF9kZWJ1Z19zZXRfYWN0aXZlKGFjdGl2ZSkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisjZGVmaW5lIGdzdF9kZWJ1Z19pc19hY3RpdmUoKQkJCQkoRkFMU0UpCisjZGVmaW5lIGdzdF9kZWJ1Z19zZXRfY29sb3JlZChjb2xvcmVkKQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKKyNkZWZpbmUgZ3N0X2RlYnVnX2lzX2NvbG9yZWQoKQkJCQkoRkFMU0UpCisjZGVmaW5lIGdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGQobGV2ZWwpCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisjZGVmaW5lIGdzdF9kZWJ1Z19nZXRfZGVmYXVsdF90aHJlc2hvbGQoKQkJKEdTVF9MRVZFTF9OT05FKQorI2RlZmluZSBnc3RfZGVidWdfc2V0X3RocmVzaG9sZF9mb3JfbmFtZShuYW1lLGxldmVsKQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisjZGVmaW5lIGdzdF9kZWJ1Z191bnNldF90aHJlc2hvbGRfZm9yX25hbWUobmFtZSkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAorCisvKiB3ZSBhcmUgdXNpbmcgZHVtbXkgZnVuY3Rpb24gcHJvdG90eXBlcyBoZXJlIHRvIGVhdCAnOycgYXMgdGhlc2UgbWFjcm9zIGFyZQorICogdXNlZCBvdXRzaWRlIG9mIGZ1bmN0aW9ucyAqLworI2RlZmluZSBHU1RfREVCVUdfQ0FURUdPUlkodmFyKQkJCQl2b2lkIF9nc3RfZGVidWdfZHVtbXlfIyN2YXIgKHZvaWQpCisjZGVmaW5lIEdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4odmFyKQkJCXZvaWQgX2dzdF9kZWJ1Z19kdW1teV9leHRlcm5fIyN2YXIgKHZvaWQpCisjZGVmaW5lIEdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUModmFyKQkJCXZvaWQgX2dzdF9kZWJ1Z19kdW1teV9zdGF0aWNfIyN2YXIgKHZvaWQpCisKKyNkZWZpbmUgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQodmFyLG5hbWUsY29sb3IsZGVzYykJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAorI2RlZmluZSBHU1RfREVCVUdfQ0FURUdPUllfR0VUKHZhcixuYW1lKQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAorI2RlZmluZSBnc3RfZGVidWdfY2F0ZWdvcnlfZnJlZShjYXRlZ29yeSkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKKyNkZWZpbmUgZ3N0X2RlYnVnX2NhdGVnb3J5X3NldF90aHJlc2hvbGQoY2F0ZWdvcnksbGV2ZWwpIEdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKKyNkZWZpbmUgZ3N0X2RlYnVnX2NhdGVnb3J5X3Jlc2V0X3RocmVzaG9sZChjYXRlZ29yeSkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAorI2RlZmluZSBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZChjYXRlZ29yeSkJKEdTVF9MRVZFTF9OT05FKQorI2RlZmluZSBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X25hbWUoY2F0KQkJKCIiKQorI2RlZmluZSBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X2NvbG9yKGNhdCkJCSgwKQorI2RlZmluZSBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X2Rlc2NyaXB0aW9uKGNhdCkJCSgiIikKKyNkZWZpbmUgZ3N0X2RlYnVnX2dldF9hbGxfY2F0ZWdvcmllcygpCQkJKE5VTEwpCisjZGVmaW5lIGdzdF9kZWJ1Z19jb25zdHJ1Y3RfdGVybV9jb2xvcihjb2xvcmluZm8pCShnX3N0cmR1cCAoIjAwIikpCisjZGVmaW5lIGdzdF9kZWJ1Z19jb25zdHJ1Y3Rfd2luX2NvbG9yKGNvbG9yaW5mbykJKDApCisKKyNlbmRpZiAvKiAhR1NUX0lORk9fQyAqLworCisjaWZkZWYgR19IQVZFX0lTT19WQVJBUkdTCisKKyNkZWZpbmUgR1NUX0NBVF9MRVZFTF9MT0coY2F0LGxldmVsLC4uLikJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKKworI2RlZmluZSBHU1RfQ0FUX0VSUk9SX09CSkVDVCguLi4pCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAorI2RlZmluZSBHU1RfQ0FUX1dBUk5JTkdfT0JKRUNUKC4uLikJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisjZGVmaW5lIEdTVF9DQVRfSU5GT19PQkpFQ1QoLi4uKQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKKyNkZWZpbmUgR1NUX0NBVF9ERUJVR19PQkpFQ1QoLi4uKQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKKyNkZWZpbmUgR1NUX0NBVF9MT0dfT0JKRUNUKC4uLikJCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAorI2RlZmluZSBHU1RfQ0FUX0ZJWE1FX09CSkVDVCguLi4pCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAorI2RlZmluZSBHU1RfQ0FUX1RSQUNFX09CSkVDVCguLi4pCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAorCisjZGVmaW5lIEdTVF9DQVRfRVJST1IoLi4uKQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisjZGVmaW5lIEdTVF9DQVRfV0FSTklORyguLi4pCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKKyNkZWZpbmUgR1NUX0NBVF9JTkZPKC4uLikJCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAorI2RlZmluZSBHU1RfQ0FUX0RFQlVHKC4uLikJCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAorI2RlZmluZSBHU1RfQ0FUX0xPRyguLi4pCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKKyNkZWZpbmUgR1NUX0NBVF9GSVhNRSguLi4pCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKKyNkZWZpbmUgR1NUX0NBVF9UUkFDRSguLi4pCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKKworI2RlZmluZSBHU1RfRVJST1JfT0JKRUNUKC4uLikJCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAorI2RlZmluZSBHU1RfV0FSTklOR19PQkpFQ1QoLi4uKQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisjZGVmaW5lIEdTVF9JTkZPX09CSkVDVCguLi4pCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKKyNkZWZpbmUgR1NUX0RFQlVHX09CSkVDVCguLi4pCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKKyNkZWZpbmUgR1NUX0xPR19PQkpFQ1QoLi4uKQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisjZGVmaW5lIEdTVF9GSVhNRV9PQkpFQ1QoLi4uKQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisjZGVmaW5lIEdTVF9UUkFDRV9PQkpFQ1QoLi4uKQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisKKyNkZWZpbmUgR1NUX0VSUk9SKC4uLikJCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKKyNkZWZpbmUgR1NUX1dBUk5JTkcoLi4uKQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisjZGVmaW5lIEdTVF9JTkZPKC4uLikJCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKKyNkZWZpbmUgR1NUX0RFQlVHKC4uLikJCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKKyNkZWZpbmUgR1NUX0xPRyguLi4pCQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisjZGVmaW5lIEdTVF9GSVhNRSguLi4pCQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisjZGVmaW5lIEdTVF9UUkFDRSguLi4pCQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisKKyNlbHNlIC8qICFHX0hBVkVfSVNPX1ZBUkFSR1MgKi8KKyNpZmRlZiBHX0hBVkVfR05VQ19WQVJBUkdTCisKKyNkZWZpbmUgR1NUX0NBVF9MRVZFTF9MT0coY2F0LGxldmVsLGFyZ3MuLi4pCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisKKyNkZWZpbmUgR1NUX0NBVF9FUlJPUl9PQkpFQ1QoYXJncy4uLikJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisjZGVmaW5lIEdTVF9DQVRfV0FSTklOR19PQkpFQ1QoYXJncy4uLikJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisjZGVmaW5lIEdTVF9DQVRfSU5GT19PQkpFQ1QoYXJncy4uLikJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisjZGVmaW5lIEdTVF9DQVRfREVCVUdfT0JKRUNUKGFyZ3MuLi4pCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAorI2RlZmluZSBHU1RfQ0FUX0xPR19PQkpFQ1QoYXJncy4uLikJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisjZGVmaW5lIEdTVF9DQVRfRklYTUVfT0JKRUNUKGFyZ3MuLi4pCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAorI2RlZmluZSBHU1RfQ0FUX1RSQUNFX09CSkVDVChhcmdzLi4uKQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKKworI2RlZmluZSBHU1RfQ0FUX0VSUk9SKGFyZ3MuLi4pCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKKyNkZWZpbmUgR1NUX0NBVF9XQVJOSU5HKGFyZ3MuLi4pCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAorI2RlZmluZSBHU1RfQ0FUX0lORk8oYXJncy4uLikJCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAorI2RlZmluZSBHU1RfQ0FUX0RFQlVHKGFyZ3MuLi4pCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKKyNkZWZpbmUgR1NUX0NBVF9MT0coYXJncy4uLikJCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAorI2RlZmluZSBHU1RfQ0FUX0ZJWE1FKGFyZ3MuLi4pCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKKyNkZWZpbmUgR1NUX0NBVF9UUkFDRShhcmdzLi4uKQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisKKyNkZWZpbmUgR1NUX0VSUk9SX09CSkVDVChhcmdzLi4uKQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKKyNkZWZpbmUgR1NUX1dBUk5JTkdfT0JKRUNUKGFyZ3MuLi4pCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAorI2RlZmluZSBHU1RfSU5GT19PQkpFQ1QoYXJncy4uLikJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisjZGVmaW5lIEdTVF9ERUJVR19PQkpFQ1QoYXJncy4uLikJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisjZGVmaW5lIEdTVF9MT0dfT0JKRUNUKGFyZ3MuLi4pCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKKyNkZWZpbmUgR1NUX0ZJWE1FX09CSkVDVChhcmdzLi4uKQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKKyNkZWZpbmUgR1NUX1RSQUNFX09CSkVDVChhcmdzLi4uKQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKKworI2RlZmluZSBHU1RfRVJST1IoYXJncy4uLikJCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAorI2RlZmluZSBHU1RfV0FSTklORyhhcmdzLi4uKQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisjZGVmaW5lIEdTVF9JTkZPKGFyZ3MuLi4pCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKKyNkZWZpbmUgR1NUX0RFQlVHKGFyZ3MuLi4pCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKKyNkZWZpbmUgR1NUX0xPRyhhcmdzLi4uKQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisjZGVmaW5lIEdTVF9GSVhNRShhcmdzLi4uKQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisjZGVmaW5lIEdTVF9UUkFDRShhcmdzLi4uKQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisKKyNlbHNlIC8qICFHX0hBVkVfR05VQ19WQVJBUkdTICovCitzdGF0aWMgaW5saW5lIHZvaWQKK0dTVF9DQVRfTEVWRUxfTE9HX3ZhbGlzdCAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdCwKKyAgICBHc3REZWJ1Z0xldmVsIGxldmVsLCBncG9pbnRlciBvYmplY3QsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCB2YXJhcmdzKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0dTVF9DQVRfRVJST1JfT0JKRUNUIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0LCBncG9pbnRlciBvYmosIGNvbnN0IGNoYXIgKmZvcm1hdCwKKyAgICAuLi4pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorR1NUX0NBVF9XQVJOSU5HX09CSkVDVCAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdCwgZ3BvaW50ZXIgb2JqLAorICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0dTVF9DQVRfSU5GT19PQkpFQ1QgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXQsIGdwb2ludGVyIG9iaiwgY29uc3QgY2hhciAqZm9ybWF0LAorICAgIC4uLikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkCitHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdCwgZ3BvaW50ZXIgb2JqLCBjb25zdCBjaGFyICpmb3JtYXQsCisgICAgLi4uKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0dTVF9DQVRfTE9HX09CSkVDVCAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdCwgZ3BvaW50ZXIgb2JqLCBjb25zdCBjaGFyICpmb3JtYXQsCisgICAgLi4uKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0dTVF9DQVRfRklYTUVfT0JKRUNUIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0LCBncG9pbnRlciBvYmosIGNvbnN0IGNoYXIgKmZvcm1hdCwKKyAgICAuLi4pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorR1NUX0NBVF9UUkFDRV9PQkpFQ1QgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXQsIGdwb2ludGVyIG9iaiwgY29uc3QgY2hhciAqZm9ybWF0LAorICAgIC4uLikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkCitHU1RfQ0FUX0VSUk9SIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkCitHU1RfQ0FUX1dBUk5JTkcgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0dTVF9DQVRfSU5GTyAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorR1NUX0NBVF9ERUJVRyAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorR1NUX0NBVF9MT0cgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0dTVF9DQVRfRklYTUUgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0dTVF9DQVRfVFJBQ0UgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0dTVF9FUlJPUl9PQkpFQ1QgKGdwb2ludGVyIG9iaiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorR1NUX1dBUk5JTkdfT0JKRUNUIChncG9pbnRlciBvYmosIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0dTVF9JTkZPX09CSkVDVCAoZ3BvaW50ZXIgb2JqLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkCitHU1RfREVCVUdfT0JKRUNUIChncG9pbnRlciBvYmosIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0dTVF9MT0dfT0JKRUNUIChncG9pbnRlciBvYmosIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0dTVF9GSVhNRV9PQkpFQ1QgKGdwb2ludGVyIG9iaiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorR1NUX1RSQUNFX09CSkVDVCAoZ3BvaW50ZXIgb2JqLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkCitHU1RfRVJST1IgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0dTVF9XQVJOSU5HIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkCitHU1RfSU5GTyAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorR1NUX0RFQlVHIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkCitHU1RfTE9HIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkCitHU1RfRklYTUUgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0dTVF9UUkFDRSAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7Cit9CisKKyNlbmRpZiAvKiBHX0hBVkVfR05VQ19WQVJBUkdTICovCisjZW5kaWYgLyogR19IQVZFX0lTT19WQVJBUkdTICovCisKKyNkZWZpbmUgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIocHRyKSBHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisjZGVmaW5lIEdTVF9ERUJVR19GVU5DUFRSKHB0cikgKHB0cikKKyNkZWZpbmUgR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRShwdHIpIChnX3N0cmR1cF9wcmludGYgKCIlcCIsIHB0cikpCisKKyNkZWZpbmUgR1NUX0NBVF9NRU1EVU1QX09CSkVDVChjYXQsb2JqLG1zZyxkYXRhLGxlbmd0aCkgR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAorI2RlZmluZSBHU1RfQ0FUX01FTURVTVAoY2F0LG1zZyxkYXRhLGxlbmd0aCkgICAgICAgICAgICBHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECisjZGVmaW5lIEdTVF9NRU1EVU1QX09CSkVDVChvYmosbXNnLGRhdGEsbGVuZ3RoKSAgICAgICAgIEdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKKyNkZWZpbmUgR1NUX01FTURVTVAobXNnLGRhdGEsbGVuZ3RoKSAgICAgICAgICAgICAgICAgICAgR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAorCisjZW5kaWYgLyogR1NUX0RJU0FCTEVfR1NUX0RFQlVHICovCisKKwordm9pZCBnc3RfZGVidWdfcHJpbnRfc3RhY2tfdHJhY2UgKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HU1RJTkZPX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGl0ZXJhdG9yLmMgYi9nc3QvZ3N0aXRlcmF0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjY3NWI0Ci0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdGl0ZXJhdG9yLmMKQEAgLTAsMCArMSw4MzAgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA0IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisgKgorICogZ3N0aXRlcmF0b3IuaDogQmFzZSBjbGFzcyBmb3IgaXRlcmF0aW5nIGRhdGFzdHJ1Y3R1cmVzLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qKgorICogU0VDVElPTjpnc3RpdGVyYXRvcgorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBPYmplY3QgdG8gcmV0cmlldmUgbXVsdGlwbGUgZWxlbWVudHMgaW4gYSB0aHJlYWRzYWZlCisgKiB3YXkuCisgKiBAc2VlX2Fsc286ICNHc3RFbGVtZW50LCAjR3N0QmluCisgKgorICogQSBHc3RJdGVyYXRvciBpcyB1c2VkIHRvIHJldHJpZXZlIG11bHRpcGxlIG9iamVjdHMgZnJvbSBhbm90aGVyIG9iamVjdCBpbgorICogYSB0aHJlYWRzYWZlIHdheS4KKyAqCisgKiBWYXJpb3VzIEdTdHJlYW1lciBvYmplY3RzIHByb3ZpZGUgYWNjZXNzIHRvIHRoZWlyIGludGVybmFsIHN0cnVjdHVyZXMgdXNpbmcKKyAqIGFuIGl0ZXJhdG9yLgorICoKKyAqIEluIGdlbmVyYWwsIHdoZW5ldmVyIGNhbGxpbmcgYSBHc3RJdGVyYXRvciBmdW5jdGlvbiByZXN1bHRzIGluIHlvdXIgY29kZQorICogcmVjZWl2aW5nIGEgcmVmY291bnRlZCBvYmplY3QsIHRoZSByZWZjb3VudCBmb3IgdGhhdCBvYmplY3Qgd2lsbCBoYXZlIGJlZW4KKyAqIGluY3JlYXNlZC4gIFlvdXIgY29kZSBpcyByZXNwb25zaWJsZSBmb3IgdW5yZWZpbmcgdGhhdCBvYmplY3QgYWZ0ZXIgdXNlLgorICoKKyAqIFRoZSBiYXNpYyB1c2UgcGF0dGVybiBvZiBhbiBpdGVyYXRvciBpcyBhcyBmb2xsb3dzOgorICoKKyAqIDxleGFtcGxlPgorICogPHRpdGxlPlVzaW5nIGFuIGl0ZXJhdG9yPC90aXRsZT4KKyAqICAgPHByb2dyYW1saXN0aW5nPgorICogICAgaXQgPSBfZ2V0X2l0ZXJhdG9yKG9iamVjdCk7CisgKiAgICBkb25lID0gRkFMU0U7CisgKiAgICB3aGlsZSAoIWRvbmUpIHsKKyAqICAgICAgc3dpdGNoIChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZhbXA7aXRlbSkpIHsKKyAqICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9PSzoKKyAqICAgICAgICAgIC4uLiB1c2UvY2hhbmdlIGl0ZW0gaGVyZS4uLgorICogICAgICAgICAgZ192YWx1ZV9yZXNldCAoJmFtcDtpdGVtKTsKKyAqICAgICAgICAgIGJyZWFrOworICogICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX1JFU1lOQzoKKyAqICAgICAgICAgIC4uLnJvbGxiYWNrIGNoYW5nZXMgdG8gaXRlbXMuLi4KKyAqICAgICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0KTsKKyAqICAgICAgICAgIGJyZWFrOworICogICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0VSUk9SOgorICogICAgICAgICAgLi4ud3JvbmcgcGFyYW1ldGVycyB3ZXJlIGdpdmVuLi4uCisgKiAgICAgICAgICBkb25lID0gVFJVRTsKKyAqICAgICAgICAgIGJyZWFrOworICogICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0RPTkU6CisgKiAgICAgICAgICBkb25lID0gVFJVRTsKKyAqICAgICAgICAgIGJyZWFrOworICogICAgICB9CisgKiAgICB9CisgKiAgICBnX3ZhbHVlX3Vuc2V0ICgmYW1wO2l0ZW0pOworICogICAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKKyAqICAgPC9wcm9ncmFtbGlzdGluZz4KKyAqIDwvZXhhbXBsZT4KKyAqCisgKiBMYXN0IHJldmlld2VkIG9uIDIwMDktMDYtMTYgKDAuMTAuMjQpCisgKi8KKworI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCisjaW5jbHVkZSA8Z3N0L2dzdGl0ZXJhdG9yLmg+CisKK0dzdEl0ZXJhdG9yICoKK2dzdF9pdGVyYXRvcl9jb3B5IChjb25zdCBHc3RJdGVyYXRvciAqIGl0KQoreworICBHc3RJdGVyYXRvciAqY29weTsKKworICBjb3B5ID0gZ19zbGljZV9jb3B5IChpdC0+c2l6ZSwgaXQpOworICBpZiAoaXQtPmNvcHkpCisgICAgaXQtPmNvcHkgKGl0LCBjb3B5KTsKKworICByZXR1cm4gY29weTsKK30KKworR1R5cGUKK2dzdF9pdGVyYXRvcl9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIEdUeXBlIHR5cGUgPSAwOworCisgIGlmIChHX1VOTElLRUxZICh0eXBlID09IDApKQorICAgIHR5cGUgPSBnX2JveGVkX3R5cGVfcmVnaXN0ZXJfc3RhdGljICgiR3N0SXRlcmF0b3IiLAorICAgICAgICAoR0JveGVkQ29weUZ1bmMpIGdzdF9pdGVyYXRvcl9jb3B5LCAoR0JveGVkRnJlZUZ1bmMpIGdzdF9pdGVyYXRvcl9mcmVlKTsKKyAgcmV0dXJuIHR5cGU7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfaXRlcmF0b3JfaW5pdCAoR3N0SXRlcmF0b3IgKiBpdCwKKyAgICBndWludCBzaXplLAorICAgIEdUeXBlIHR5cGUsCisgICAgR011dGV4ICogbG9jaywKKyAgICBndWludDMyICogbWFzdGVyX2Nvb2tpZSwKKyAgICBHc3RJdGVyYXRvckNvcHlGdW5jdGlvbiBjb3B5LAorICAgIEdzdEl0ZXJhdG9yTmV4dEZ1bmN0aW9uIG5leHQsCisgICAgR3N0SXRlcmF0b3JJdGVtRnVuY3Rpb24gaXRlbSwKKyAgICBHc3RJdGVyYXRvclJlc3luY0Z1bmN0aW9uIHJlc3luYywgR3N0SXRlcmF0b3JGcmVlRnVuY3Rpb24gZnJlZSkKK3sKKyAgaXQtPnNpemUgPSBzaXplOworICBpdC0+dHlwZSA9IHR5cGU7CisgIGl0LT5sb2NrID0gbG9jazsKKyAgaXQtPm1hc3Rlcl9jb29raWUgPSBtYXN0ZXJfY29va2llOworICBpdC0+Y29va2llID0gKm1hc3Rlcl9jb29raWU7CisgIGl0LT5jb3B5ID0gY29weTsKKyAgaXQtPm5leHQgPSBuZXh0OworICBpdC0+aXRlbSA9IGl0ZW07CisgIGl0LT5yZXN5bmMgPSByZXN5bmM7CisgIGl0LT5mcmVlID0gZnJlZTsKKyAgaXQtPnB1c2hlZCA9IE5VTEw7Cit9CisKKy8qKgorICogZ3N0X2l0ZXJhdG9yX25ldzoKKyAqIEBzaXplOiB0aGUgc2l6ZSBvZiB0aGUgaXRlcmF0b3Igc3RydWN0dXJlCisgKiBAdHlwZTogI0dUeXBlIG9mIGNoaWxkcmVuCisgKiBAbG9jazogcG9pbnRlciB0byBhICNHTXV0ZXguCisgKiBAbWFzdGVyX2Nvb2tpZTogcG9pbnRlciB0byBhIGd1aW50MzIgdGhhdCBpcyBjaGFuZ2VkIHdoZW4gdGhlIGl0ZW1zIGluIHRoZQorICogICAgaXRlcmF0b3IgY2hhbmdlZC4KKyAqIEBjb3B5OiBjb3B5IGZ1bmN0aW9uCisgKiBAbmV4dDogZnVuY3Rpb24gdG8gZ2V0IG5leHQgaXRlbQorICogQGl0ZW06IGZ1bmN0aW9uIHRvIGNhbGwgb24gZWFjaCBpdGVtIHJldHJpZXZlZAorICogQHJlc3luYzogZnVuY3Rpb24gdG8gcmVzeW5jIHRoZSBpdGVyYXRvcgorICogQGZyZWU6IGZ1bmN0aW9uIHRvIGZyZWUgdGhlIGl0ZXJhdG9yCisgKgorICogQ3JlYXRlIGEgbmV3IGl0ZXJhdG9yLiBUaGlzIGZ1bmN0aW9uIGlzIG1haW5seSB1c2VkIGZvciBvYmplY3RzCisgKiBpbXBsZW1lbnRpbmcgdGhlIG5leHQvcmVzeW5jL2ZyZWUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIEZvciBlYWNoIGl0ZW0gcmV0cmlldmVkLCB0aGUgQGl0ZW0gZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIGxvY2sKKyAqIGhlbGQuIFRoZSBAZnJlZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgaXRlcmF0b3IgaXMgZnJlZWQuCisgKgorICogUmV0dXJuczogdGhlIG5ldyAjR3N0SXRlcmF0b3IuCisgKgorICogTVQgc2FmZS4KKyAqLworR3N0SXRlcmF0b3IgKgorZ3N0X2l0ZXJhdG9yX25ldyAoZ3VpbnQgc2l6ZSwKKyAgICBHVHlwZSB0eXBlLAorICAgIEdNdXRleCAqIGxvY2ssCisgICAgZ3VpbnQzMiAqIG1hc3Rlcl9jb29raWUsCisgICAgR3N0SXRlcmF0b3JDb3B5RnVuY3Rpb24gY29weSwKKyAgICBHc3RJdGVyYXRvck5leHRGdW5jdGlvbiBuZXh0LAorICAgIEdzdEl0ZXJhdG9ySXRlbUZ1bmN0aW9uIGl0ZW0sCisgICAgR3N0SXRlcmF0b3JSZXN5bmNGdW5jdGlvbiByZXN5bmMsIEdzdEl0ZXJhdG9yRnJlZUZ1bmN0aW9uIGZyZWUpCit7CisgIEdzdEl0ZXJhdG9yICpyZXN1bHQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNpemUgPj0gc2l6ZW9mIChHc3RJdGVyYXRvciksIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ190eXBlX3FuYW1lICh0eXBlKSAhPSAwLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG1hc3Rlcl9jb29raWUgIT0gTlVMTCwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuZXh0ICE9IE5VTEwsIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVzeW5jICE9IE5VTEwsIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZnJlZSAhPSBOVUxMLCBOVUxMKTsKKworICByZXN1bHQgPSBnX3NsaWNlX2FsbG9jMCAoc2l6ZSk7CisgIGdzdF9pdGVyYXRvcl9pbml0IChyZXN1bHQsIHNpemUsIHR5cGUsIGxvY2ssIG1hc3Rlcl9jb29raWUsIGNvcHksIG5leHQsIGl0ZW0sCisgICAgICByZXN5bmMsIGZyZWUpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBsaXN0IGl0ZXJhdG9yCisgKi8KK3R5cGVkZWYgc3RydWN0IF9Hc3RMaXN0SXRlcmF0b3IKK3sKKyAgR3N0SXRlcmF0b3IgaXRlcmF0b3I7CisgIEdPYmplY3QgKm93bmVyOworICBHTGlzdCAqKm9yaWc7CisgIEdMaXN0ICpsaXN0OyAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgaW4gbGlzdCAqLworCisgIHZvaWQgKCpzZXRfdmFsdWUpIChHVmFsdWUgKiB2YWx1ZSwgZ3BvaW50ZXIgaXRlbSk7Cit9IEdzdExpc3RJdGVyYXRvcjsKKworc3RhdGljIHZvaWQKK2dzdF9saXN0X2l0ZXJhdG9yX2NvcHkgKGNvbnN0IEdzdExpc3RJdGVyYXRvciAqIGl0LCBHc3RMaXN0SXRlcmF0b3IgKiBjb3B5KQoreworICBpZiAoY29weS0+b3duZXIpCisgICAgZ19vYmplY3RfcmVmIChjb3B5LT5vd25lcik7Cit9CisKK3N0YXRpYyBHc3RJdGVyYXRvclJlc3VsdAorZ3N0X2xpc3RfaXRlcmF0b3JfbmV4dCAoR3N0TGlzdEl0ZXJhdG9yICogaXQsIEdWYWx1ZSAqIGVsZW0pCit7CisgIGdwb2ludGVyIGRhdGE7CisKKyAgaWYgKGl0LT5saXN0ID09IE5VTEwpCisgICAgcmV0dXJuIEdTVF9JVEVSQVRPUl9ET05FOworCisgIGRhdGEgPSBpdC0+bGlzdC0+ZGF0YTsKKyAgaXQtPmxpc3QgPSBnX2xpc3RfbmV4dCAoaXQtPmxpc3QpOworCisgIGl0LT5zZXRfdmFsdWUgKGVsZW0sIGRhdGEpOworCisgIHJldHVybiBHU1RfSVRFUkFUT1JfT0s7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfbGlzdF9pdGVyYXRvcl9yZXN5bmMgKEdzdExpc3RJdGVyYXRvciAqIGl0KQoreworICBpdC0+bGlzdCA9ICppdC0+b3JpZzsKK30KKworc3RhdGljIHZvaWQKK2dzdF9saXN0X2l0ZXJhdG9yX2ZyZWUgKEdzdExpc3RJdGVyYXRvciAqIGl0KQoreworICBpZiAoaXQtPm93bmVyKQorICAgIGdfb2JqZWN0X3VucmVmIChpdC0+b3duZXIpOworfQorCisvKioKKyAqIGdzdF9pdGVyYXRvcl9uZXdfbGlzdDoKKyAqIEB0eXBlOiAjR1R5cGUgb2YgZWxlbWVudHMKKyAqIEBsb2NrOiBwb2ludGVyIHRvIGEgI0dNdXRleCBwcm90ZWN0aW5nIHRoZSBsaXN0LgorICogQG1hc3Rlcl9jb29raWU6IHBvaW50ZXIgdG8gYSBndWludDMyIHRoYXQgaXMgaW5jcmVtZW50ZWQgd2hlbiB0aGUgbGlzdAorICogICAgIGlzIGNoYW5nZWQuCisgKiBAbGlzdDogcG9pbnRlciB0byB0aGUgbGlzdAorICogQG93bmVyOiBvYmplY3Qgb3duaW5nIHRoZSBsaXN0CisgKiBAaXRlbTogZnVuY3Rpb24gdG8gY2FsbCBvbiBlYWNoIGl0ZW0gcmV0cmlldmVkCisgKgorICogQ3JlYXRlIGEgbmV3IGl0ZXJhdG9yIGRlc2lnbmVkIGZvciBpdGVyYXRpbmcgQGxpc3QuCisgKgorICogVGhlIGxpc3QgeW91IGl0ZXJhdGUgaXMgdXN1YWxseSBwYXJ0IG9mIGEgZGF0YSBzdHJ1Y3R1cmUgQG93bmVyIGFuZCBpcworICogcHJvdGVjdGVkIHdpdGggQGxvY2suIAorICoKKyAqIFRoZSBpdGVyYXRvciB3aWxsIHVzZSBAbG9jayB0byByZXRyaWV2ZSB0aGUgbmV4dCBpdGVtIG9mIHRoZSBsaXN0IGFuZCBpdAorICogd2lsbCB0aGVuIGNhbGwgdGhlIEBpdGVtIGZ1bmN0aW9uIGJlZm9yZSByZWxlYXNpbmcgQGxvY2sgYWdhaW4uCisgKgorICogV2hlbiBhIGNvbmN1cnJlbnQgdXBkYXRlIHRvIHRoZSBsaXN0IGlzIHBlcmZvcm1lZCwgdXN1YWxseSBieSBAb3duZXIgd2hpbGUKKyAqIGhvbGRpbmcgQGxvY2ssIEBtYXN0ZXJfY29va2llIHdpbGwgYmUgdXBkYXRlZC4gVGhlIGl0ZXJhdG9yIGltcGxlbWVudGF0aW9uCisgKiB3aWxsIG5vdGljZSB0aGUgdXBkYXRlIG9mIHRoZSBjb29raWUgYW5kIHdpbGwgcmV0dXJuICVHU1RfSVRFUkFUT1JfUkVTWU5DIHRvCisgKiB0aGUgdXNlciBvZiB0aGUgaXRlcmF0b3IgaW4gdGhlIG5leHQgY2FsbCB0byBnc3RfaXRlcmF0b3JfbmV4dCgpLgorICoKKyAqIFJldHVybnM6IHRoZSBuZXcgI0dzdEl0ZXJhdG9yIGZvciBAbGlzdC4KKyAqCisgKiBNVCBzYWZlLgorICovCitHc3RJdGVyYXRvciAqCitnc3RfaXRlcmF0b3JfbmV3X2xpc3QgKEdUeXBlIHR5cGUsCisgICAgR011dGV4ICogbG9jaywgZ3VpbnQzMiAqIG1hc3Rlcl9jb29raWUsIEdMaXN0ICoqIGxpc3QsIEdPYmplY3QgKiBvd25lciwKKyAgICBHc3RJdGVyYXRvckl0ZW1GdW5jdGlvbiBpdGVtKQoreworICBHc3RMaXN0SXRlcmF0b3IgKnJlc3VsdDsKKyAgZ3BvaW50ZXIgc2V0X3ZhbHVlOworCisgIGlmIChnX3R5cGVfaXNfYSAodHlwZSwgR19UWVBFX09CSkVDVCkpIHsKKyAgICBzZXRfdmFsdWUgPSBnX3ZhbHVlX3NldF9vYmplY3Q7CisgIH0gZWxzZSBpZiAoZ190eXBlX2lzX2EgKHR5cGUsIEdfVFlQRV9CT1hFRCkpIHsKKyAgICBzZXRfdmFsdWUgPSBnX3ZhbHVlX3NldF9ib3hlZDsKKyAgfSBlbHNlIGlmIChnX3R5cGVfaXNfYSAodHlwZSwgR19UWVBFX1BPSU5URVIpKSB7CisgICAgc2V0X3ZhbHVlID0gZ192YWx1ZV9zZXRfcG9pbnRlcjsKKyAgfSBlbHNlIGlmIChnX3R5cGVfaXNfYSAodHlwZSwgR19UWVBFX1NUUklORykpIHsKKyAgICBzZXRfdmFsdWUgPSBnX3ZhbHVlX3NldF9zdHJpbmc7CisgIH0gZWxzZSB7CisgICAgZ19jcml0aWNhbCAoIkxpc3QgaXRlcmF0b3JzIGNhbiBvbmx5IGJlIGNyZWF0ZWQgZm9yIGxpc3RzIGNvbnRhaW5pbmcgIgorICAgICAgICAiaW5zdGFuY2VzIG9mIEdPYmplY3QsIGJveGVkIHR5cGVzLCBwb2ludGVyIHR5cGVzIGFuZCBzdHJpbmdzIik7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICAvKiBubyBuZWVkIHRvIGxvY2ssIG5vdGhpbmcgY2FuIGNoYW5nZSBoZXJlICovCisgIHJlc3VsdCA9IChHc3RMaXN0SXRlcmF0b3IgKikgZ3N0X2l0ZXJhdG9yX25ldyAoc2l6ZW9mIChHc3RMaXN0SXRlcmF0b3IpLAorICAgICAgdHlwZSwKKyAgICAgIGxvY2ssCisgICAgICBtYXN0ZXJfY29va2llLAorICAgICAgKEdzdEl0ZXJhdG9yQ29weUZ1bmN0aW9uKSBnc3RfbGlzdF9pdGVyYXRvcl9jb3B5LAorICAgICAgKEdzdEl0ZXJhdG9yTmV4dEZ1bmN0aW9uKSBnc3RfbGlzdF9pdGVyYXRvcl9uZXh0LAorICAgICAgKEdzdEl0ZXJhdG9ySXRlbUZ1bmN0aW9uKSBpdGVtLAorICAgICAgKEdzdEl0ZXJhdG9yUmVzeW5jRnVuY3Rpb24pIGdzdF9saXN0X2l0ZXJhdG9yX3Jlc3luYywKKyAgICAgIChHc3RJdGVyYXRvckZyZWVGdW5jdGlvbikgZ3N0X2xpc3RfaXRlcmF0b3JfZnJlZSk7CisKKyAgcmVzdWx0LT5vd25lciA9IG93bmVyID8gZ19vYmplY3RfcmVmIChvd25lcikgOiBOVUxMOworICByZXN1bHQtPm9yaWcgPSBsaXN0OworICByZXN1bHQtPmxpc3QgPSAqbGlzdDsKKyAgcmVzdWx0LT5zZXRfdmFsdWUgPSBzZXRfdmFsdWU7CisKKyAgcmV0dXJuIEdTVF9JVEVSQVRPUiAocmVzdWx0KTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9pdGVyYXRvcl9wb3AgKEdzdEl0ZXJhdG9yICogaXQpCit7CisgIGlmIChpdC0+cHVzaGVkKSB7CisgICAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0LT5wdXNoZWQpOworICAgIGl0LT5wdXNoZWQgPSBOVUxMOworICB9Cit9CisKKy8qKgorICogZ3N0X2l0ZXJhdG9yX25leHQ6CisgKiBAaXQ6IFRoZSAjR3N0SXRlcmF0b3IgdG8gaXRlcmF0ZQorICogQGVsZW06IChvdXQgY2FsbGVyLWFsbG9jYXRlcyk6IHBvaW50ZXIgdG8gaG9sZCBuZXh0IGVsZW1lbnQKKyAqCisgKiBHZXQgdGhlIG5leHQgaXRlbSBmcm9tIHRoZSBpdGVyYXRvciBpbiBAZWxlbS4gCisgKgorICogT25seSB3aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAlR1NUX0lURVJBVE9SX09LLCBAZWxlbSB3aWxsIGNvbnRhaW4gYSB2YWxpZAorICogdmFsdWUuIEBlbGVtIG11c3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIHRvIHRoZSB0eXBlIG9mIHRoZSBpdGVyYXRvciBvcgorICogaW5pdGlhbGl6ZWQgdG8gemVyb2VzIHdpdGggZ192YWx1ZV91bnNldCgpLiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvcgorICogdW5zZXR0aW5nIG9yIHJlc2V0dGluZyBAZWxlbSB3aXRoIGdfdmFsdWVfdW5zZXQoKSBvciBnX3ZhbHVlX3Jlc2V0KCkKKyAqIGFmdGVyIHVzYWdlLgorICoKKyAqIFdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zICVHU1RfSVRFUkFUT1JfRE9ORSwgbm8gbW9yZSBlbGVtZW50cyBjYW4gYmUKKyAqIHJldHJpZXZlZCBmcm9tIEBpdC4KKyAqCisgKiBBIHJldHVybiB2YWx1ZSBvZiAlR1NUX0lURVJBVE9SX1JFU1lOQyBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBsaXN0IHdhcworICogY29uY3VycmVudGx5IHVwZGF0ZWQuIFRoZSB1c2VyIG9mIEBpdCBzaG91bGQgY2FsbCBnc3RfaXRlcmF0b3JfcmVzeW5jKCkgdG8KKyAqIGdldCB0aGUgbmV3bHkgdXBkYXRlZCBsaXN0LiAKKyAqCisgKiBBIHJldHVybiB2YWx1ZSBvZiAlR1NUX0lURVJBVE9SX0VSUk9SIGluZGljYXRlcyBhbiB1bnJlY292ZXJhYmxlIGZhdGFsIGVycm9yLgorICoKKyAqIFJldHVybnM6IFRoZSByZXN1bHQgb2YgdGhlIGl0ZXJhdGlvbi4gVW5zZXQgQGVsZW0gYWZ0ZXIgdXNhZ2UuCisgKgorICogTVQgc2FmZS4KKyAqLworR3N0SXRlcmF0b3JSZXN1bHQKK2dzdF9pdGVyYXRvcl9uZXh0IChHc3RJdGVyYXRvciAqIGl0LCBHVmFsdWUgKiBlbGVtKQoreworICBHc3RJdGVyYXRvclJlc3VsdCByZXN1bHQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGl0ICE9IE5VTEwsIEdTVF9JVEVSQVRPUl9FUlJPUik7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlbGVtICE9IE5VTEwsIEdTVF9JVEVSQVRPUl9FUlJPUik7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX1ZBTFVFX1RZUEUgKGVsZW0pID09IEdfVFlQRV9JTlZBTElECisgICAgICB8fCBHX1ZBTFVFX0hPTERTIChlbGVtLCBpdC0+dHlwZSksIEdTVF9JVEVSQVRPUl9FUlJPUik7CisKKyAgaWYgKEdfVkFMVUVfVFlQRSAoZWxlbSkgPT0gR19UWVBFX0lOVkFMSUQpCisgICAgZ192YWx1ZV9pbml0IChlbGVtLCBpdC0+dHlwZSk7CisKK3Jlc3RhcnQ6CisgIGlmIChpdC0+cHVzaGVkKSB7CisgICAgcmVzdWx0ID0gZ3N0X2l0ZXJhdG9yX25leHQgKGl0LT5wdXNoZWQsIGVsZW0pOworICAgIGlmIChyZXN1bHQgPT0gR1NUX0lURVJBVE9SX0RPTkUpIHsKKyAgICAgIC8qIHdlIGFyZSBkb25lIHdpdGggdGhpcyBpdGVyYXRvciwgcG9wIGl0IGFuZAorICAgICAgICogZmFsbHRocm91Z2ggaXRlcmF0aW5nIHRoZSBtYWluIGl0ZXJhdG9yIGFnYWluLiAqLworICAgICAgZ3N0X2l0ZXJhdG9yX3BvcCAoaXQpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgfQorCisgIGlmIChHX0xJS0VMWSAoaXQtPmxvY2spKQorICAgIGdfbXV0ZXhfbG9jayAoaXQtPmxvY2spOworCisgIGlmIChHX1VOTElLRUxZICgqaXQtPm1hc3Rlcl9jb29raWUgIT0gaXQtPmNvb2tpZSkpIHsKKyAgICByZXN1bHQgPSBHU1RfSVRFUkFUT1JfUkVTWU5DOworICAgIGdvdG8gZG9uZTsKKyAgfQorCisgIHJlc3VsdCA9IGl0LT5uZXh0IChpdCwgZWxlbSk7CisgIGlmIChyZXN1bHQgPT0gR1NUX0lURVJBVE9SX09LICYmIGl0LT5pdGVtKSB7CisgICAgR3N0SXRlcmF0b3JJdGVtIGl0ZW1yZXM7CisKKyAgICBpdGVtcmVzID0gaXQtPml0ZW0gKGl0LCBlbGVtKTsKKyAgICBzd2l0Y2ggKGl0ZW1yZXMpIHsKKyAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0lURU1fU0tJUDoKKyAgICAgICAgaWYgKEdfTElLRUxZIChpdC0+bG9jaykpCisgICAgICAgICAgZ19tdXRleF91bmxvY2sgKGl0LT5sb2NrKTsKKyAgICAgICAgZ192YWx1ZV9yZXNldCAoZWxlbSk7CisgICAgICAgIGdvdG8gcmVzdGFydDsKKyAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0lURU1fRU5EOgorICAgICAgICByZXN1bHQgPSBHU1RfSVRFUkFUT1JfRE9ORTsKKyAgICAgICAgZ192YWx1ZV9yZXNldCAoZWxlbSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfSVRFTV9QQVNTOgorICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKworZG9uZToKKyAgaWYgKEdfTElLRUxZIChpdC0+bG9jaykpCisgICAgZ19tdXRleF91bmxvY2sgKGl0LT5sb2NrKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGdzdF9pdGVyYXRvcl9yZXN5bmM6CisgKiBAaXQ6IFRoZSAjR3N0SXRlcmF0b3IgdG8gcmVzeW5jCisgKgorICogUmVzeW5jIHRoZSBpdGVyYXRvci4gdGhpcyBmdW5jdGlvbiBpcyBtb3N0bHkgY2FsbGVkCisgKiBhZnRlciBnc3RfaXRlcmF0b3JfbmV4dCgpIHJldHVybmVkICVHU1RfSVRFUkFUT1JfUkVTWU5DLgorICoKKyAqIFdoZW4gYW4gaXRlcmF0b3Igd2FzIHB1c2hlZCBvbiBAaXQsIGl0IHdpbGwgYXV0b21hdGljYWxseSBiZSBwb3BwZWQgYWdhaW4KKyAqIHdpdGggdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBNVCBzYWZlLgorICovCit2b2lkCitnc3RfaXRlcmF0b3JfcmVzeW5jIChHc3RJdGVyYXRvciAqIGl0KQoreworICBnX3JldHVybl9pZl9mYWlsIChpdCAhPSBOVUxMKTsKKworICBnc3RfaXRlcmF0b3JfcG9wIChpdCk7CisKKyAgaWYgKEdfTElLRUxZIChpdC0+bG9jaykpCisgICAgZ19tdXRleF9sb2NrIChpdC0+bG9jayk7CisgIGl0LT5yZXN5bmMgKGl0KTsKKyAgaXQtPmNvb2tpZSA9ICppdC0+bWFzdGVyX2Nvb2tpZTsKKyAgaWYgKEdfTElLRUxZIChpdC0+bG9jaykpCisgICAgZ19tdXRleF91bmxvY2sgKGl0LT5sb2NrKTsKK30KKworLyoqCisgKiBnc3RfaXRlcmF0b3JfZnJlZToKKyAqIEBpdDogVGhlICNHc3RJdGVyYXRvciB0byBmcmVlCisgKgorICogRnJlZSB0aGUgaXRlcmF0b3IuCisgKgorICogTVQgc2FmZS4KKyAqLwordm9pZAorZ3N0X2l0ZXJhdG9yX2ZyZWUgKEdzdEl0ZXJhdG9yICogaXQpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKGl0ICE9IE5VTEwpOworCisgIGdzdF9pdGVyYXRvcl9wb3AgKGl0KTsKKworICBpdC0+ZnJlZSAoaXQpOworCisgIGdfc2xpY2VfZnJlZTEgKGl0LT5zaXplLCBpdCk7Cit9CisKKy8qKgorICogZ3N0X2l0ZXJhdG9yX3B1c2g6CisgKiBAaXQ6IFRoZSAjR3N0SXRlcmF0b3IgdG8gdXNlCisgKiBAb3RoZXI6IFRoZSAjR3N0SXRlcmF0b3IgdG8gcHVzaAorICoKKyAqIFB1c2hlcyBAb3RoZXIgaXRlcmF0b3Igb250byBAaXQuIEFsbCBjYWxscyBwZXJmb3JtZWQgb24gQGl0IGFyZQorICogZm9yd2FyZGVkIHRvIEBvdGhlci4gSWYgQG90aGVyIHJldHVybnMgJUdTVF9JVEVSQVRPUl9ET05FLCBpdCBpcworICogcG9wcGVkIGFnYWluIGFuZCBjYWxscyBhcmUgaGFuZGxlZCBieSBAaXQgYWdhaW4uCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBtYWlubHkgdXNlZCBieSBvYmplY3RzIGltcGxlbWVudGluZyB0aGUgaXRlcmF0b3IKKyAqIG5leHQgZnVuY3Rpb24gdG8gcmVjdXJzZSBpbnRvIHN1YnN0cnVjdHVyZXMuCisgKgorICogV2hlbiBnc3RfaXRlcmF0b3JfcmVzeW5jKCkgaXMgY2FsbGVkIG9uIEBpdCwgQG90aGVyIHdpbGwgYXV0b21hdGljYWxseSBiZQorICogcG9wcGVkLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK3ZvaWQKK2dzdF9pdGVyYXRvcl9wdXNoIChHc3RJdGVyYXRvciAqIGl0LCBHc3RJdGVyYXRvciAqIG90aGVyKQoreworICBnX3JldHVybl9pZl9mYWlsIChpdCAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAob3RoZXIgIT0gTlVMTCk7CisKKyAgaXQtPnB1c2hlZCA9IG90aGVyOworfQorCit0eXBlZGVmIHN0cnVjdCBfR3N0SXRlcmF0b3JGaWx0ZXIKK3sKKyAgR3N0SXRlcmF0b3IgaXRlcmF0b3I7CisgIEdzdEl0ZXJhdG9yICpzbGF2ZTsKKworICBHQ29tcGFyZUZ1bmMgZnVuYzsKKyAgR1ZhbHVlIHVzZXJfZGF0YTsKKyAgZ2Jvb2xlYW4gaGF2ZV91c2VyX2RhdGE7Cit9IEdzdEl0ZXJhdG9yRmlsdGVyOworCitzdGF0aWMgR3N0SXRlcmF0b3JSZXN1bHQKK2ZpbHRlcl9uZXh0IChHc3RJdGVyYXRvckZpbHRlciAqIGl0LCBHVmFsdWUgKiBlbGVtKQoreworICBHc3RJdGVyYXRvclJlc3VsdCByZXN1bHQgPSBHU1RfSVRFUkFUT1JfRVJST1I7CisgIGdib29sZWFuIGRvbmUgPSBGQUxTRTsKKyAgR1ZhbHVlIGl0ZW0gPSB7IDAsIH07CisKKyAgd2hpbGUgKEdfTElLRUxZICghZG9uZSkpIHsKKyAgICByZXN1bHQgPSBnc3RfaXRlcmF0b3JfbmV4dCAoaXQtPnNsYXZlLCAmaXRlbSk7CisgICAgc3dpdGNoIChyZXN1bHQpIHsKKyAgICAgIGNhc2UgR1NUX0lURVJBVE9SX09LOgorICAgICAgICBpZiAoR19MSUtFTFkgKEdTVF9JVEVSQVRPUiAoaXQpLT5sb2NrKSkKKyAgICAgICAgICBnX211dGV4X3VubG9jayAoR1NUX0lURVJBVE9SIChpdCktPmxvY2spOworICAgICAgICBpZiAoaXQtPmZ1bmMgKCZpdGVtLCAmaXQtPnVzZXJfZGF0YSkgPT0gMCkgeworICAgICAgICAgIGdfdmFsdWVfY29weSAoJml0ZW0sIGVsZW0pOworICAgICAgICAgIGRvbmUgPSBUUlVFOworICAgICAgICB9CisgICAgICAgIGdfdmFsdWVfcmVzZXQgKCZpdGVtKTsKKyAgICAgICAgaWYgKEdfTElLRUxZIChHU1RfSVRFUkFUT1IgKGl0KS0+bG9jaykpCisgICAgICAgICAgZ19tdXRleF9sb2NrIChHU1RfSVRFUkFUT1IgKGl0KS0+bG9jayk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfUkVTWU5DOgorICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRE9ORToKKyAgICAgICAgZG9uZSA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBnX3ZhbHVlX3Vuc2V0ICgmaXRlbSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitmaWx0ZXJfY29weSAoY29uc3QgR3N0SXRlcmF0b3JGaWx0ZXIgKiBpdCwgR3N0SXRlcmF0b3JGaWx0ZXIgKiBjb3B5KQoreworICBjb3B5LT5zbGF2ZSA9IGdzdF9pdGVyYXRvcl9jb3B5IChpdC0+c2xhdmUpOworCisgIGlmIChpdC0+aGF2ZV91c2VyX2RhdGEpIHsKKyAgICBtZW1zZXQgKCZjb3B5LT51c2VyX2RhdGEsIDAsIHNpemVvZiAoY29weS0+dXNlcl9kYXRhKSk7CisgICAgZ192YWx1ZV9pbml0ICgmY29weS0+dXNlcl9kYXRhLCBHX1ZBTFVFX1RZUEUgKCZpdC0+dXNlcl9kYXRhKSk7CisgICAgZ192YWx1ZV9jb3B5ICgmaXQtPnVzZXJfZGF0YSwgJmNvcHktPnVzZXJfZGF0YSk7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2ZpbHRlcl9yZXN5bmMgKEdzdEl0ZXJhdG9yRmlsdGVyICogaXQpCit7CisgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0LT5zbGF2ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitmaWx0ZXJfZnJlZSAoR3N0SXRlcmF0b3JGaWx0ZXIgKiBpdCkKK3sKKyAgaWYgKGl0LT5oYXZlX3VzZXJfZGF0YSkKKyAgICBnX3ZhbHVlX3Vuc2V0ICgmaXQtPnVzZXJfZGF0YSk7CisgIGdzdF9pdGVyYXRvcl9mcmVlIChpdC0+c2xhdmUpOworfQorCisvKioKKyAqIGdzdF9pdGVyYXRvcl9maWx0ZXI6CisgKiBAaXQ6IFRoZSAjR3N0SXRlcmF0b3IgdG8gZmlsdGVyCisgKiBAZnVuYzogKHNjb3BlIGNhbGwpOiB0aGUgY29tcGFyZSBmdW5jdGlvbiB0byBzZWxlY3QgZWxlbWVudHMKKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogdXNlciBkYXRhIHBhc3NlZCB0byB0aGUgY29tcGFyZSBmdW5jdGlvbgorICoKKyAqIENyZWF0ZSBhIG5ldyBpdGVyYXRvciBmcm9tIGFuIGV4aXN0aW5nIGl0ZXJhdG9yLiBUaGUgbmV3IGl0ZXJhdG9yCisgKiB3aWxsIG9ubHkgcmV0dXJuIHRob3NlIGVsZW1lbnRzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIGNvbXBhcmUgZnVuY3Rpb24gQGZ1bmMuCisgKiBUaGUgZmlyc3QgcGFyYW1ldGVyIHRoYXQgaXMgcGFzc2VkIHRvIEBmdW5jIGlzIHRoZSAjR1ZhbHVlIG9mIHRoZSBjdXJyZW50CisgKiBpdGVyYXRvciBlbGVtZW50IGFuZCB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyBAdXNlcl9kYXRhLiBAZnVuYyBzaG91bGQKKyAqIHJldHVybiAwIGZvciBlbGVtZW50cyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgZmlsdGVyZWQgaXRlcmF0b3IuCisgKgorICogV2hlbiB0aGlzIGl0ZXJhdG9yIGlzIGZyZWVkLCBAaXQgd2lsbCBhbHNvIGJlIGZyZWVkLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdEl0ZXJhdG9yLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK0dzdEl0ZXJhdG9yICoKK2dzdF9pdGVyYXRvcl9maWx0ZXIgKEdzdEl0ZXJhdG9yICogaXQsIEdDb21wYXJlRnVuYyBmdW5jLAorICAgIGNvbnN0IEdWYWx1ZSAqIHVzZXJfZGF0YSkKK3sKKyAgR3N0SXRlcmF0b3JGaWx0ZXIgKnJlc3VsdDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoaXQgIT0gTlVMTCwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmdW5jICE9IE5VTEwsIE5VTEwpOworCisgIHJlc3VsdCA9IChHc3RJdGVyYXRvckZpbHRlciAqKSBnc3RfaXRlcmF0b3JfbmV3IChzaXplb2YgKEdzdEl0ZXJhdG9yRmlsdGVyKSwKKyAgICAgIGl0LT50eXBlLCBpdC0+bG9jaywgaXQtPm1hc3Rlcl9jb29raWUsCisgICAgICAoR3N0SXRlcmF0b3JDb3B5RnVuY3Rpb24pIGZpbHRlcl9jb3B5LAorICAgICAgKEdzdEl0ZXJhdG9yTmV4dEZ1bmN0aW9uKSBmaWx0ZXJfbmV4dCwKKyAgICAgIChHc3RJdGVyYXRvckl0ZW1GdW5jdGlvbikgTlVMTCwKKyAgICAgIChHc3RJdGVyYXRvclJlc3luY0Z1bmN0aW9uKSBmaWx0ZXJfcmVzeW5jLAorICAgICAgKEdzdEl0ZXJhdG9yRnJlZUZ1bmN0aW9uKSBmaWx0ZXJfZnJlZSk7CisKKyAgaXQtPmxvY2sgPSBOVUxMOworICByZXN1bHQtPmZ1bmMgPSBmdW5jOworICBpZiAodXNlcl9kYXRhKSB7CisgICAgZ192YWx1ZV9pbml0ICgmcmVzdWx0LT51c2VyX2RhdGEsIEdfVkFMVUVfVFlQRSAodXNlcl9kYXRhKSk7CisgICAgZ192YWx1ZV9jb3B5ICh1c2VyX2RhdGEsICZyZXN1bHQtPnVzZXJfZGF0YSk7CisgICAgcmVzdWx0LT5oYXZlX3VzZXJfZGF0YSA9IFRSVUU7CisgIH0gZWxzZSB7CisgICAgcmVzdWx0LT5oYXZlX3VzZXJfZGF0YSA9IEZBTFNFOworICB9CisgIHJlc3VsdC0+c2xhdmUgPSBpdDsKKworICByZXR1cm4gR1NUX0lURVJBVE9SIChyZXN1bHQpOworfQorCisvKioKKyAqIGdzdF9pdGVyYXRvcl9mb2xkOgorICogQGl0OiBUaGUgI0dzdEl0ZXJhdG9yIHRvIGZvbGQgb3ZlcgorICogQGZ1bmM6IChzY29wZSBjYWxsKTogdGhlIGZvbGQgZnVuY3Rpb24KKyAqIEByZXQ6IHRoZSBzZWVkIHZhbHVlIHBhc3NlZCB0byB0aGUgZm9sZCBmdW5jdGlvbgorICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiB1c2VyIGRhdGEgcGFzc2VkIHRvIHRoZSBmb2xkIGZ1bmN0aW9uCisgKgorICogRm9sZHMgQGZ1bmMgb3ZlciB0aGUgZWxlbWVudHMgb2YgQGl0ZXIuIFRoYXQgaXMgdG8gc2F5LCBAZnVuYyB3aWxsIGJlIGNhbGxlZAorICogYXMgQGZ1bmMgKG9iamVjdCwgQHJldCwgQHVzZXJfZGF0YSkgZm9yIGVhY2ggb2JqZWN0IGluIEBpdC4gVGhlIG5vcm1hbCB1c2UKKyAqIG9mIHRoaXMgcHJvY2VkdXJlIGlzIHRvIGFjY3VtdWxhdGUgdGhlIHJlc3VsdHMgb2Ygb3BlcmF0aW5nIG9uIHRoZSBvYmplY3RzIGluCisgKiBAcmV0LgorICoKKyAqIFRoaXMgcHJvY2VkdXJlIGNhbiBiZSB1c2VkIChhbmQgaXMgdXNlZCBpbnRlcm5hbGx5KSB0byBpbXBsZW1lbnQgdGhlCisgKiBnc3RfaXRlcmF0b3JfZm9yZWFjaCgpIGFuZCBnc3RfaXRlcmF0b3JfZmluZF9jdXN0b20oKSBvcGVyYXRpb25zLgorICoKKyAqIFRoZSBmb2xkIHdpbGwgcHJvY2VlZCBhcyBsb25nIGFzIEBmdW5jIHJldHVybnMgVFJVRS4gV2hlbiB0aGUgaXRlcmF0b3IgaGFzIG5vCisgKiBtb3JlIGFyZ3VtZW50cywgJUdTVF9JVEVSQVRPUl9ET05FIHdpbGwgYmUgcmV0dXJuZWQuIElmIEBmdW5jIHJldHVybnMgRkFMU0UsCisgKiB0aGUgZm9sZCB3aWxsIHN0b3AsIGFuZCAlR1NUX0lURVJBVE9SX09LIHdpbGwgYmUgcmV0dXJuZWQuIEVycm9ycyBvciByZXN5bmNzCisgKiB3aWxsIGNhdXNlIGZvbGQgdG8gcmV0dXJuICVHU1RfSVRFUkFUT1JfRVJST1Igb3IgJUdTVF9JVEVSQVRPUl9SRVNZTkMgYXMKKyAqIGFwcHJvcHJpYXRlLgorICoKKyAqIFRoZSBpdGVyYXRvciB3aWxsIG5vdCBiZSBmcmVlZC4KKyAqCisgKiBSZXR1cm5zOiBBICNHc3RJdGVyYXRvclJlc3VsdCwgYXMgZGVzY3JpYmVkIGFib3ZlLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK0dzdEl0ZXJhdG9yUmVzdWx0Citnc3RfaXRlcmF0b3JfZm9sZCAoR3N0SXRlcmF0b3IgKiBpdCwgR3N0SXRlcmF0b3JGb2xkRnVuY3Rpb24gZnVuYywKKyAgICBHVmFsdWUgKiByZXQsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgR1ZhbHVlIGl0ZW0gPSB7IDAsIH07CisgIEdzdEl0ZXJhdG9yUmVzdWx0IHJlc3VsdDsKKworICB3aGlsZSAoMSkgeworICAgIHJlc3VsdCA9IGdzdF9pdGVyYXRvcl9uZXh0IChpdCwgJml0ZW0pOworICAgIHN3aXRjaCAocmVzdWx0KSB7CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9PSzoKKyAgICAgICAgaWYgKCFmdW5jICgmaXRlbSwgcmV0LCB1c2VyX2RhdGEpKQorICAgICAgICAgIGdvdG8gZm9sZF9kb25lOworCisgICAgICAgIGdfdmFsdWVfcmVzZXQgKCZpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9FUlJPUjoKKyAgICAgICAgZ290byBmb2xkX2RvbmU7CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgorICAgICAgICBnb3RvIGZvbGRfZG9uZTsKKyAgICB9CisgIH0KKworZm9sZF9kb25lOgorICBnX3ZhbHVlX3Vuc2V0ICgmaXRlbSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgR3N0SXRlcmF0b3JGb3JlYWNoRnVuY3Rpb24gZnVuYzsKKyAgZ3BvaW50ZXIgdXNlcl9kYXRhOworfSBGb3JlYWNoRm9sZERhdGE7CisKK3N0YXRpYyBnYm9vbGVhbgorZm9yZWFjaF9mb2xkX2Z1bmMgKGNvbnN0IEdWYWx1ZSAqIGl0ZW0sIEdWYWx1ZSAqIHVudXNlZCwgRm9yZWFjaEZvbGREYXRhICogZGF0YSkKK3sKKyAgZGF0YS0+ZnVuYyAoaXRlbSwgZGF0YS0+dXNlcl9kYXRhKTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qKgorICogZ3N0X2l0ZXJhdG9yX2ZvcmVhY2g6CisgKiBAaXQ6IFRoZSAjR3N0SXRlcmF0b3IgdG8gaXRlcmF0ZQorICogQGZ1bmM6IChzY29wZSBjYWxsKTogdGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZWxlbWVudC4KKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogdXNlciBkYXRhIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24KKyAqCisgKiBJdGVyYXRlIG92ZXIgYWxsIGVsZW1lbnQgb2YgQGl0IGFuZCBjYWxsIHRoZSBnaXZlbiBmdW5jdGlvbiBAZnVuYyBmb3IKKyAqIGVhY2ggZWxlbWVudC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgcmVzdWx0IGNhbGwgdG8gZ3N0X2l0ZXJhdG9yX2ZvbGQoKS4gVGhlIGl0ZXJhdG9yIHdpbGwgbm90IGJlCisgKiBmcmVlZC4KKyAqCisgKiBNVCBzYWZlLgorICovCitHc3RJdGVyYXRvclJlc3VsdAorZ3N0X2l0ZXJhdG9yX2ZvcmVhY2ggKEdzdEl0ZXJhdG9yICogaXQsIEdzdEl0ZXJhdG9yRm9yZWFjaEZ1bmN0aW9uIGZ1bmMsCisgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBGb3JlYWNoRm9sZERhdGEgZGF0YTsKKworICBkYXRhLmZ1bmMgPSBmdW5jOworICBkYXRhLnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKKworICByZXR1cm4gZ3N0X2l0ZXJhdG9yX2ZvbGQgKGl0LCAoR3N0SXRlcmF0b3JGb2xkRnVuY3Rpb24pIGZvcmVhY2hfZm9sZF9mdW5jLAorICAgICAgTlVMTCwgJmRhdGEpOworfQorCit0eXBlZGVmIHN0cnVjdAoreworICBHQ29tcGFyZUZ1bmMgZnVuYzsKKyAgZ3BvaW50ZXIgdXNlcl9kYXRhOworICBnYm9vbGVhbiBmb3VuZDsKK30gRmluZEN1c3RvbUZvbGREYXRhOworCitzdGF0aWMgZ2Jvb2xlYW4KK2ZpbmRfY3VzdG9tX2ZvbGRfZnVuYyAoY29uc3QgR1ZhbHVlICogaXRlbSwgR1ZhbHVlICogcmV0LAorICAgIEZpbmRDdXN0b21Gb2xkRGF0YSAqIGRhdGEpCit7CisgIGlmIChkYXRhLT5mdW5jIChpdGVtLCBkYXRhLT51c2VyX2RhdGEpID09IDApIHsKKyAgICBkYXRhLT5mb3VuZCA9IFRSVUU7CisgICAgZ192YWx1ZV9jb3B5IChpdGVtLCByZXQpOworICAgIHJldHVybiBGQUxTRTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorfQorCisvKioKKyAqIGdzdF9pdGVyYXRvcl9maW5kX2N1c3RvbToKKyAqIEBpdDogVGhlICNHc3RJdGVyYXRvciB0byBpdGVyYXRlCisgKiBAZnVuYzogKHNjb3BlIGNhbGwpOiB0aGUgY29tcGFyZSBmdW5jdGlvbiB0byB1c2UKKyAqIEBlbGVtOiAob3V0KTogcG9pbnRlciB0byBhICNHVmFsdWUgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdAorICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiB1c2VyIGRhdGEgcGFzc2VkIHRvIHRoZSBjb21wYXJlIGZ1bmN0aW9uCisgKgorICogRmluZCB0aGUgZmlyc3QgZWxlbWVudCBpbiBAaXQgdGhhdCBtYXRjaGVzIHRoZSBjb21wYXJlIGZ1bmN0aW9uIEBmdW5jLgorICogQGZ1bmMgc2hvdWxkIHJldHVybiAwIHdoZW4gdGhlIGVsZW1lbnQgaXMgZm91bmQuIFRoZSBmaXJzdCBwYXJhbWV0ZXIKKyAqIHRvIEBmdW5jIHdpbGwgYmUgdGhlIGN1cnJlbnQgZWxlbWVudCBvZiB0aGUgaXRlcmF0b3IgYW5kIHRoZQorICogc2Vjb25kIHBhcmFtZXRlciB3aWxsIGJlIEB1c2VyX2RhdGEuCisgKiBUaGUgcmVzdWx0IHdpbGwgYmUgc3RvcmVkIGluIEBlbGVtIGlmIGEgcmVzdWx0IGlzIGZvdW5kLgorICoKKyAqIFRoZSBpdGVyYXRvciB3aWxsIG5vdCBiZSBmcmVlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIEZBTFNFIGlmIGFuIGVycm9yIGhhcHBlbmVkIHRvIHRoZSBpdGVyYXRvcgorICogb3IgaWYgdGhlIGVsZW1lbnQgd2Fzbid0IGZvdW5kLgorICoKKyAqIFJldHVybnM6IFJldHVybnMgVFJVRSBpZiB0aGUgZWxlbWVudCB3YXMgZm91bmQsIGVsc2UgRkFMU0UuCisgKgorICogTVQgc2FmZS4KKyAqLworZ2Jvb2xlYW4KK2dzdF9pdGVyYXRvcl9maW5kX2N1c3RvbSAoR3N0SXRlcmF0b3IgKiBpdCwgR0NvbXBhcmVGdW5jIGZ1bmMsCisgICAgR1ZhbHVlICogZWxlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBHc3RJdGVyYXRvclJlc3VsdCByZXM7CisgIEZpbmRDdXN0b21Gb2xkRGF0YSBkYXRhOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX1ZBTFVFX1RZUEUgKGVsZW0pID09IEdfVFlQRV9JTlZBTElECisgICAgICB8fCBHX1ZBTFVFX0hPTERTIChlbGVtLCBpdC0+dHlwZSksIEdTVF9JVEVSQVRPUl9FUlJPUik7CisKKyAgaWYgKEdfVkFMVUVfVFlQRSAoZWxlbSkgPT0gR19UWVBFX0lOVkFMSUQpCisgICAgZ192YWx1ZV9pbml0IChlbGVtLCBpdC0+dHlwZSk7CisKKyAgZGF0YS5mdW5jID0gZnVuYzsKKyAgZGF0YS51c2VyX2RhdGEgPSB1c2VyX2RhdGE7CisgIGRhdGEuZm91bmQgPSBGQUxTRTsKKworICBkbyB7CisgICAgcmVzID0KKyAgICAgICAgZ3N0X2l0ZXJhdG9yX2ZvbGQgKGl0LCAoR3N0SXRlcmF0b3JGb2xkRnVuY3Rpb24pIGZpbmRfY3VzdG9tX2ZvbGRfZnVuYywKKyAgICAgICAgZWxlbSwgJmRhdGEpOworICAgIGlmIChyZXMgPT0gR1NUX0lURVJBVE9SX1JFU1lOQykKKyAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0KTsKKyAgfSB3aGlsZSAocmVzID09IEdTVF9JVEVSQVRPUl9SRVNZTkMpOworCisgIGlmICghZGF0YS5mb3VuZCkKKyAgICBnX3ZhbHVlX3Vuc2V0IChlbGVtKTsKKworICByZXR1cm4gZGF0YS5mb3VuZDsKK30KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgR3N0SXRlcmF0b3IgcGFyZW50OworICBHVmFsdWUgb2JqZWN0OworICBnYm9vbGVhbiB2aXNpdGVkOworICBnYm9vbGVhbiBlbXB0eTsKK30gR3N0U2luZ2xlT2JqZWN0SXRlcmF0b3I7CisKK3N0YXRpYyBndWludDMyIF9zaW5nbGVfb2JqZWN0X2R1bW15X2Nvb2tpZSA9IDA7CisKK3N0YXRpYyB2b2lkCitnc3Rfc2luZ2xlX29iamVjdF9pdGVyYXRvcl9jb3B5IChjb25zdCBHc3RTaW5nbGVPYmplY3RJdGVyYXRvciAqIGl0LAorICAgIEdzdFNpbmdsZU9iamVjdEl0ZXJhdG9yICogY29weSkKK3sKKyAgaWYgKCFpdC0+ZW1wdHkpIHsKKyAgICBtZW1zZXQgKCZjb3B5LT5vYmplY3QsIDAsIHNpemVvZiAoY29weS0+b2JqZWN0KSk7CisgICAgZ192YWx1ZV9pbml0ICgmY29weS0+b2JqZWN0LCBpdC0+cGFyZW50LnR5cGUpOworICAgIGdfdmFsdWVfY29weSAoJml0LT5vYmplY3QsICZjb3B5LT5vYmplY3QpOworICB9Cit9CisKK3N0YXRpYyBHc3RJdGVyYXRvclJlc3VsdAorZ3N0X3NpbmdsZV9vYmplY3RfaXRlcmF0b3JfbmV4dCAoR3N0U2luZ2xlT2JqZWN0SXRlcmF0b3IgKiBpdCwgR1ZhbHVlICogcmVzdWx0KQoreworICBpZiAoaXQtPnZpc2l0ZWQgfHwgaXQtPmVtcHR5KQorICAgIHJldHVybiBHU1RfSVRFUkFUT1JfRE9ORTsKKworICBnX3ZhbHVlX2NvcHkgKCZpdC0+b2JqZWN0LCByZXN1bHQpOworICBpdC0+dmlzaXRlZCA9IFRSVUU7CisKKyAgcmV0dXJuIEdTVF9JVEVSQVRPUl9PSzsKK30KKworc3RhdGljIHZvaWQKK2dzdF9zaW5nbGVfb2JqZWN0X2l0ZXJhdG9yX3Jlc3luYyAoR3N0U2luZ2xlT2JqZWN0SXRlcmF0b3IgKiBpdCkKK3sKKyAgaXQtPnZpc2l0ZWQgPSBGQUxTRTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9zaW5nbGVfb2JqZWN0X2l0ZXJhdG9yX2ZyZWUgKEdzdFNpbmdsZU9iamVjdEl0ZXJhdG9yICogaXQpCit7CisgIGlmICghaXQtPmVtcHR5KQorICAgIGdfdmFsdWVfdW5zZXQgKCZpdC0+b2JqZWN0KTsKK30KKworLyoqCisgKiBnc3RfaXRlcmF0b3JfbmV3X3NpbmdsZToKKyAqIEB0eXBlOiAjR1R5cGUgb2YgdGhlIHBhc3NlZCBvYmplY3QKKyAqIEBvYmplY3Q6IG9iamVjdCB0aGF0IHRoaXMgaXRlcmF0b3Igc2hvdWxkIHJldHVybgorICoKKyAqIFRoaXMgI0dzdEl0ZXJhdG9yIGlzIGEgY29udmVuaWVudCBpdGVyYXRvciBmb3IgdGhlIGNvbW1vbgorICogY2FzZSB3aGVyZSBhICNHc3RJdGVyYXRvciBuZWVkcyB0byBiZSByZXR1cm5lZCBidXQgb25seQorICogYSBzaW5nbGUgb2JqZWN0IGhhcyB0byBiZSBjb25zaWRlcmVkLiBUaGlzIGhhcHBlbnMgb2Z0ZW4KKyAqIGZvciB0aGUgI0dzdFBhZEl0ZXJJbnRMaW5rRnVuY3Rpb24uCisgKgorICogUmV0dXJuczogdGhlIG5ldyAjR3N0SXRlcmF0b3IgZm9yIEBvYmplY3QuCisgKgorICogU2luY2U6IDAuMTAuMjUKKyAqLworR3N0SXRlcmF0b3IgKgorZ3N0X2l0ZXJhdG9yX25ld19zaW5nbGUgKEdUeXBlIHR5cGUsIGNvbnN0IEdWYWx1ZSAqIG9iamVjdCkKK3sKKyAgR3N0U2luZ2xlT2JqZWN0SXRlcmF0b3IgKnJlc3VsdDsKKworICByZXN1bHQgPSAoR3N0U2luZ2xlT2JqZWN0SXRlcmF0b3IgKikKKyAgICAgIGdzdF9pdGVyYXRvcl9uZXcgKHNpemVvZiAoR3N0U2luZ2xlT2JqZWN0SXRlcmF0b3IpLAorICAgICAgdHlwZSwgTlVMTCwgJl9zaW5nbGVfb2JqZWN0X2R1bW15X2Nvb2tpZSwKKyAgICAgIChHc3RJdGVyYXRvckNvcHlGdW5jdGlvbikgZ3N0X3NpbmdsZV9vYmplY3RfaXRlcmF0b3JfY29weSwKKyAgICAgIChHc3RJdGVyYXRvck5leHRGdW5jdGlvbikgZ3N0X3NpbmdsZV9vYmplY3RfaXRlcmF0b3JfbmV4dCwKKyAgICAgIChHc3RJdGVyYXRvckl0ZW1GdW5jdGlvbikgTlVMTCwKKyAgICAgIChHc3RJdGVyYXRvclJlc3luY0Z1bmN0aW9uKSBnc3Rfc2luZ2xlX29iamVjdF9pdGVyYXRvcl9yZXN5bmMsCisgICAgICAoR3N0SXRlcmF0b3JGcmVlRnVuY3Rpb24pIGdzdF9zaW5nbGVfb2JqZWN0X2l0ZXJhdG9yX2ZyZWUpOworCisgIGlmIChvYmplY3QpIHsKKyAgICBnX3ZhbHVlX2luaXQgKCZyZXN1bHQtPm9iamVjdCwgdHlwZSk7CisgICAgZ192YWx1ZV9jb3B5IChvYmplY3QsICZyZXN1bHQtPm9iamVjdCk7CisgICAgcmVzdWx0LT5lbXB0eSA9IEZBTFNFOworICB9IGVsc2UgeworICAgIHJlc3VsdC0+ZW1wdHkgPSBUUlVFOworICB9CisgIHJlc3VsdC0+dmlzaXRlZCA9IEZBTFNFOworCisgIHJldHVybiBHU1RfSVRFUkFUT1IgKHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9nc3QvZ3N0aXRlcmF0b3IuaCBiL2dzdC9nc3RpdGVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NDM0MDIKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0aXRlcmF0b3IuaApAQCAtMCwwICsxLDI3MyBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKyAqCisgKiBnc3RpdGVyYXRvci5oOiBIZWFkZXIgZm9yIEdzdEl0ZXJhdG9yCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0dTVF9JVEVSQVRPUl9IX18KKyNkZWZpbmUgX19HU1RfSVRFUkFUT1JfSF9fCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPiAvKiBmb3IgR1ZhbHVlIGluIHRoZSBmb2xkICovCisjaW5jbHVkZSA8Z3N0L2dzdGNvbmZpZy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgR1NUX1RZUEVfSVRFUkFUT1IgKGdzdF9pdGVyYXRvcl9nZXRfdHlwZSAoKSkKKworLyoqCisgKiBHc3RJdGVyYXRvclJlc3VsdDoKKyAqIEBHU1RfSVRFUkFUT1JfRE9ORTogICBObyBtb3JlIGl0ZW1zIGluIHRoZSBpdGVyYXRvcgorICogQEdTVF9JVEVSQVRPUl9PSzogICAgIEFuIGl0ZW0gd2FzIHJldHJpZXZlZAorICogQEdTVF9JVEVSQVRPUl9SRVNZTkM6IERhdGFzdHJ1Y3R1cmUgY2hhbmdlZCB3aGlsZSBpdGVyYXRpbmcKKyAqIEBHU1RfSVRFUkFUT1JfRVJST1I6ICBBbiBlcnJvciBoYXBwZW5lZAorICoKKyAqIFRoZSByZXN1bHQgb2YgZ3N0X2l0ZXJhdG9yX25leHQoKS4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgR1NUX0lURVJBVE9SX0RPTkUJPSAwLAorICBHU1RfSVRFUkFUT1JfT0sJPSAxLAorICBHU1RfSVRFUkFUT1JfUkVTWU5DCT0gMiwKKyAgR1NUX0lURVJBVE9SX0VSUk9SCT0gMworfSBHc3RJdGVyYXRvclJlc3VsdDsKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdEl0ZXJhdG9yIEdzdEl0ZXJhdG9yOworCisvKioKKyAqIEdzdEl0ZXJhdG9ySXRlbToKKyAqIEBHU1RfSVRFUkFUT1JfSVRFTV9TS0lQOiAgU2tpcCB0aGlzIGl0ZW0KKyAqIEBHU1RfSVRFUkFUT1JfSVRFTV9QQVNTOiAgUmV0dXJuIGl0ZW0KKyAqIEBHU1RfSVRFUkFUT1JfSVRFTV9FTkQ6ICAgU3RvcCBhZnRlciB0aGlzIGl0ZW0uCisgKgorICogVGhlIHJlc3VsdCBvZiBhICNHc3RJdGVyYXRvckl0ZW1GdW5jdGlvbi4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgR1NUX0lURVJBVE9SX0lURU1fU0tJUAk9IDAsCisgIEdTVF9JVEVSQVRPUl9JVEVNX1BBU1MJPSAxLAorICBHU1RfSVRFUkFUT1JfSVRFTV9FTkQJCT0gMgorfSBHc3RJdGVyYXRvckl0ZW07CisKKy8qKgorICogR3N0SXRlcmF0b3JDb3B5RnVuY3Rpb246CisgKiBAaXQ6IFRoZSBvcmlnaW5hbCBpdGVyYXRvcgorICogQGNvcHk6IFRoZSBjb3BpZWQgaXRlcmF0b3IKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW4gY3JlYXRpbmcgYSBjb3B5IG9mIEBpdCBhbmQgc2hvdWxkCisgKiBjcmVhdGUgYSBjb3B5IG9mIGFsbCBjdXN0b20gaXRlcmF0b3IgZmllbGRzIG9yIGluY3JlYXNlIHRoZWlyCisgKiByZWZlcmVuY2UgY291bnRzLgorICovCit0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICgqR3N0SXRlcmF0b3JDb3B5RnVuY3Rpb24pIChjb25zdCBHc3RJdGVyYXRvciAqaXQsIEdzdEl0ZXJhdG9yICpjb3B5KTsKKworLyoqCisgKiBHc3RJdGVyYXRvckl0ZW1GdW5jdGlvbjoKKyAqIEBpdDogdGhlIGl0ZXJhdG9yCisgKiBAaXRlbTogdGhlIGl0ZW0gYmVpbmcgcmV0cmlldmVkLgorICoKKyAqIFRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBuZXh0IGl0ZW0gb2YgdGhlIGl0ZXJhdG9yCisgKiBoYXMgYmVlbiByZXRyaWV2ZWQuIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gc2tpcCBpdGVtcyBvciBzdG9wCisgKiB0aGUgaXRlcmF0b3IuCisgKgorICogVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGl0ZXJhdG9yIGxvY2sgaGVsZC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisgKi8KK3R5cGVkZWYgR3N0SXRlcmF0b3JJdGVtICAgKCpHc3RJdGVyYXRvckl0ZW1GdW5jdGlvbikgICAgKEdzdEl0ZXJhdG9yICppdCwgY29uc3QgR1ZhbHVlICogaXRlbSk7CisKKy8qKgorICogR3N0SXRlcmF0b3JOZXh0RnVuY3Rpb246CisgKiBAaXQ6IHRoZSBpdGVyYXRvcgorICogQHJlc3VsdDogYSBwb2ludGVyIHRvIGhvbGQgdGhlIG5leHQgaXRlbQorICoKKyAqIFRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIG5leHQgZWxlbWVudCBvZiB0aGUgaXRlcmF0b3IKKyAqIHNob3VsZCBiZSByZXRyaWV2ZWQuIAorICoKKyAqIEltcGxlbWVudG9ycyBvZiBhICNHc3RJdGVyYXRvciBzaG91bGQgaW1wbGVtZW50IHRoaXMKKyAqIGZ1bmN0aW9uIGFuZCBwYXNzIGl0IHRvIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgY3VzdG9tIGl0ZXJhdG9yLgorICogVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGl0ZXJhdG9yIGxvY2sgaGVsZC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisgKi8KK3R5cGVkZWYgR3N0SXRlcmF0b3JSZXN1bHQgKCpHc3RJdGVyYXRvck5leHRGdW5jdGlvbikJKEdzdEl0ZXJhdG9yICppdCwgR1ZhbHVlICpyZXN1bHQpOworLyoqCisgKiBHc3RJdGVyYXRvclJlc3luY0Z1bmN0aW9uOgorICogQGl0OiB0aGUgaXRlcmF0b3IKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIGEgY29uY3VycmVudCB1cGRhdGUgaGFwcGVuZWQKKyAqIHRvIHRoZSBpdGVyYXRlZCBkYXRhc3RydWN0dXJlLiBUaGUgaW1wbGVtZW50b3Igb2YgdGhlIGl0ZXJhdG9yIHNob3VsZAorICogcmVzdGFydCB0aGUgaXRlcmF0b3IgZnJvbSB0aGUgYmVnaW5uaW5nIGFuZCBjbGVhbiB1cCBhbnkgc3RhdGUgaXQgbWlnaHQKKyAqIGhhdmUuCisgKgorICogSW1wbGVtZW50b3JzIG9mIGEgI0dzdEl0ZXJhdG9yIHNob3VsZCBpbXBsZW1lbnQgdGhpcworICogZnVuY3Rpb24gYW5kIHBhc3MgaXQgdG8gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBjdXN0b20gaXRlcmF0b3IuCisgKiBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgaXRlcmF0b3IgbG9jayBoZWxkLgorICovCit0eXBlZGVmIHZvaWQJCSAgKCpHc3RJdGVyYXRvclJlc3luY0Z1bmN0aW9uKQkoR3N0SXRlcmF0b3IgKml0KTsKKy8qKgorICogR3N0SXRlcmF0b3JGcmVlRnVuY3Rpb246CisgKiBAaXQ6IHRoZSBpdGVyYXRvcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgaXRlcmF0b3IgaXMgZnJlZWQuCisgKgorICogSW1wbGVtZW50b3JzIG9mIGEgI0dzdEl0ZXJhdG9yIHNob3VsZCBpbXBsZW1lbnQgdGhpcworICogZnVuY3Rpb24gYW5kIHBhc3MgaXQgdG8gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBjdXN0b20gaXRlcmF0b3IuCisgKiBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgaXRlcmF0b3IgbG9jayBoZWxkLgorICovCit0eXBlZGVmIHZvaWQJCSAgKCpHc3RJdGVyYXRvckZyZWVGdW5jdGlvbikJKEdzdEl0ZXJhdG9yICppdCk7CisKKy8qKgorICogR3N0SXRlcmF0b3JGb3JlYWNoRnVuY3Rpb246CisgKiBAaXRlbTogVGhlIGl0ZW0KKyAqIEB1c2VyX2RhdGE6IFVzZXIgZGF0YQorICoKKyAqIEEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgYnkgZ3N0X2l0ZXJhdG9yX2ZvcmVhY2goKSBmb3IgZXZlcnkgZWxlbWVudC4KKyAqLwordHlwZWRlZiB2b2lkICAgICAgICAgKCpHc3RJdGVyYXRvckZvcmVhY2hGdW5jdGlvbikgICAgIChjb25zdCBHVmFsdWUgKiBpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpOworCisvKioKKyAqIEdzdEl0ZXJhdG9yRm9sZEZ1bmN0aW9uOgorICogQGl0ZW06IHRoZSBpdGVtIHRvIGZvbGQKKyAqIEByZXQ6IGEgI0dWYWx1ZSBjb2xsZWN0aW5nIHRoZSByZXN1bHQKKyAqIEB1c2VyX2RhdGE6IGRhdGEgcGFzc2VkIHRvIGdzdF9pdGVyYXRvcl9mb2xkKCkKKyAqCisgKiBBIGZ1bmN0aW9uIHRvIGJlIHBhc3NlZCB0byBnc3RfaXRlcmF0b3JfZm9sZCgpLgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIGZvbGQgc2hvdWxkIGNvbnRpbnVlLCBGQUxTRSBpZiBpdCBzaG91bGQgc3RvcC4KKyAqLwordHlwZWRlZiBnYm9vbGVhbgkgICgqR3N0SXRlcmF0b3JGb2xkRnVuY3Rpb24pICAgIChjb25zdCBHVmFsdWUgKiBpdGVtLCBHVmFsdWUgKiByZXQsIGdwb2ludGVyIHVzZXJfZGF0YSk7CisKKy8qKgorICogR1NUX0lURVJBVE9SOgorICogQGl0OiB0aGUgI0dzdEl0ZXJhdG9yIHZhbHVlCisgKgorICogTWFjcm8gdG8gY2FzdCB0byBhICNHc3RJdGVyYXRvcgorICovCisjZGVmaW5lIEdTVF9JVEVSQVRPUihpdCkJCSgoR3N0SXRlcmF0b3IqKShpdCkpCisvKioKKyAqIEdTVF9JVEVSQVRPUl9MT0NLOgorICogQGl0OiB0aGUgI0dzdEl0ZXJhdG9yIHRvIGdldCB0aGUgbG9jayBvZgorICoKKyAqIE1hY3JvIHRvIGdldCB0aGUgbG9jayBwcm90ZWN0aW5nIHRoZSBkYXRhc3RydWN0dXJlIGJlaW5nIGl0ZXJhdGVkLgorICovCisjZGVmaW5lIEdTVF9JVEVSQVRPUl9MT0NLKGl0KQkJKEdTVF9JVEVSQVRPUihpdCktPmxvY2spCisvKioKKyAqIEdTVF9JVEVSQVRPUl9DT09LSUU6CisgKiBAaXQ6IHRoZSAjR3N0SXRlcmF0b3IgdG8gZ2V0IHRoZSBjb29raWUgb2YKKyAqCisgKiBNYWNybyB0byBnZXQgdGhlIGNvb2tpZSBvZiBhICNHc3RJdGVyYXRvci4gVGhlIGNvb2tpZSBvZiB0aGUKKyAqIGl0ZXJhdG9yIGlzIHRoZSB2YWx1ZSBvZiB0aGUgbWFzdGVyIGNvb2tpZSB3aGVuIHRoZSBpdGVyYXRvcgorICogd2FzIGNyZWF0ZWQuCisgKiBXaGVuZXZlciB0aGUgaXRlcmF0b3IgaXMgaXRlcmF0ZWQsIHRoZSB2YWx1ZSBpcyBjb21wYXJlZCB0byB0aGUKKyAqIHZhbHVlIG9mIHRoZSBtYXN0ZXIgY29va2llLiBJZiB0aGV5IGFyZSBkaWZmZXJlbnQsIGEgY29uY3VycmVudAorICogbW9kaWZpY2F0aW9uIGhhcHBlbmVkIHRvIHRoZSBpdGVyYXRvciBhbmQgYSByZXN5bmMgaXMgbmVlZGVkLgorICovCisjZGVmaW5lIEdTVF9JVEVSQVRPUl9DT09LSUUoaXQpCQkoR1NUX0lURVJBVE9SKGl0KS0+Y29va2llKQorLyoqCisgKiBHU1RfSVRFUkFUT1JfT1JJR19DT09LSUU6CisgKiBAaXQ6IHRoZSAjR3N0SXRlcmF0b3IgdG8gZ2V0IHRoZSBtYXN0ZXIgY29va2llIG9mCisgKgorICogTWFjcm8gdG8gZ2V0IGEgcG9pbnRlciB0byB3aGVyZSB0aGUgbWFzdGVyIGNvb2tpZSBpcyBzdG9yZWQuIFRoZQorICogbWFzdGVyIGNvb2tpZSBwcm90ZWN0cyB0aGUgc3RydWN0dXJlIGJlaW5nIGl0ZXJhdGVkIGFuZCBnZXRzIHVwZGF0ZWQKKyAqIHdoZW5ldmVyIHRoZSBkYXRhc3RydWN0dXJlIGNoYW5nZXMuCisgKi8KKyNkZWZpbmUgR1NUX0lURVJBVE9SX09SSUdfQ09PS0lFKGl0KQkoR1NUX0lURVJBVE9SKGl0KS0+bWFzdGVyX2Nvb2tpZSkKKworLyoqCisgKiBHc3RJdGVyYXRvcjoKKyAqIEBjb3B5OiBUaGUgZnVuY3Rpb24gdG8gY29weSB0aGUgaXRlcmF0b3IKKyAqIEBuZXh0OiBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBuZXh0IGl0ZW0gaW4gdGhlIGl0ZXJhdG9yCisgKiBAaXRlbTogVGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgZWFjaCBpdGVtIHJldHJpZXZlZAorICogQHJlc3luYzogVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIHJlc3luYyBpcyBuZWVkZWQuCisgKiBAZnJlZTogVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgaXRlcmF0b3IgaXMgZnJlZWQKKyAqIEBwdXNoZWQ6IFRoZSBpdGVyYXRvciB0aGF0IGlzIGN1cnJlbnRseSBwdXNoZWQgd2l0aCBnc3RfaXRlcmF0b3JfcHVzaCgpCisgKiBAdHlwZTogVGhlIHR5cGUgb2YgdGhlIG9iamVjdCB0aGF0IHRoaXMgaXRlcmF0b3Igd2lsbCByZXR1cm4KKyAqIEBsb2NrOiBUaGUgbG9jayBwcm90ZWN0aW5nIHRoZSBkYXRhIHN0cnVjdHVyZSBhbmQgdGhlIGNvb2tpZS4KKyAqIEBjb29raWU6IFRoZSBjb29raWU7IHRoZSB2YWx1ZSBvZiB0aGUgbWFzdGVyX2Nvb2tpZSB3aGVuIHRoaXMgaXRlcmF0b3Igd2FzCisgKiAgICAgICAgICBjcmVhdGVkLgorICogQG1hc3Rlcl9jb29raWU6IEEgcG9pbnRlciB0byB0aGUgbWFzdGVyIGNvb2tpZS4KKyAqIEBzaXplOiB0aGUgc2l6ZSBvZiB0aGUgaXRlcmF0b3IKKyAqCisgKiAjR3N0SXRlcmF0b3IgYmFzZSBzdHJ1Y3R1cmUuIFRoZSB2YWx1ZXMgb2YgdGhpcyBzdHJ1Y3R1cmUgYXJlIAorICogcHJvdGVjdGVkIGZvciBzdWJjbGFzc2VzLCB1c2UgdGhlIG1ldGhvZHMgdG8gdXNlIHRoZSAjR3N0SXRlcmF0b3IuCisgKi8KK3N0cnVjdCBfR3N0SXRlcmF0b3IgeworICAvKjwgcHJvdGVjdGVkID4qLworICBHc3RJdGVyYXRvckNvcHlGdW5jdGlvbiBjb3B5OworICBHc3RJdGVyYXRvck5leHRGdW5jdGlvbiBuZXh0OworICBHc3RJdGVyYXRvckl0ZW1GdW5jdGlvbiBpdGVtOworICBHc3RJdGVyYXRvclJlc3luY0Z1bmN0aW9uIHJlc3luYzsKKyAgR3N0SXRlcmF0b3JGcmVlRnVuY3Rpb24gZnJlZTsKKworICBHc3RJdGVyYXRvciAqcHVzaGVkOwkJLyogcHVzaGVkIGl0ZXJhdG9yICovCisKKyAgR1R5cGUgICAgIHR5cGU7CisgIEdNdXRleCAgICpsb2NrOworICBndWludDMyICAgY29va2llOwkJLyogY29va2llIG9mIHRoZSBpdGVyYXRvciAqLworICBndWludDMyICAqbWFzdGVyX2Nvb2tpZTsJLyogcG9pbnRlciB0byBndWludDMyIGhvbGRpbmcgdGhlIGNvb2tpZSB3aGVuIHRoaXMKKwkJCQkgICBpdGVyYXRvciB3YXMgY3JlYXRlZCAqLworICBndWludCAgICAgc2l6ZTsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Cit9OworCitHVHlwZSAgICAgICAgICAgICAgICAgICBnc3RfaXRlcmF0b3JfZ2V0X3R5cGUgICAgICAgICAgICh2b2lkKTsKKworLyogY3JlYXRpbmcgaXRlcmF0b3JzICovCitHc3RJdGVyYXRvcioJCWdzdF9pdGVyYXRvcl9uZXcJCShndWludCBzaXplLAorCQkJCQkJCSBHVHlwZSB0eXBlLAorCQkJCQkJCSBHTXV0ZXggKmxvY2ssCisJCQkJCQkJIGd1aW50MzIgKm1hc3Rlcl9jb29raWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RJdGVyYXRvckNvcHlGdW5jdGlvbiBjb3B5LAorCQkJCQkJCSBHc3RJdGVyYXRvck5leHRGdW5jdGlvbiBuZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0SXRlcmF0b3JJdGVtRnVuY3Rpb24gaXRlbSwKKwkJCQkJCQkgR3N0SXRlcmF0b3JSZXN5bmNGdW5jdGlvbiByZXN5bmMsCisJCQkJCQkJIEdzdEl0ZXJhdG9yRnJlZUZ1bmN0aW9uIGZyZWUpOworCitHc3RJdGVyYXRvcioJCWdzdF9pdGVyYXRvcl9uZXdfbGlzdAkgICAgICAgIChHVHlwZSB0eXBlLAorCQkJCQkJCSBHTXV0ZXggKmxvY2ssCisJCQkJCQkJIGd1aW50MzIgKm1hc3Rlcl9jb29raWUsCisJCQkJCQkJIEdMaXN0ICoqbGlzdCwKKwkJCQkJCQkgR09iamVjdCAqIG93bmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0SXRlcmF0b3JJdGVtRnVuY3Rpb24gaXRlbSk7CisKK0dzdEl0ZXJhdG9yKiAgICAgICAgICAgIGdzdF9pdGVyYXRvcl9uZXdfc2luZ2xlICAgICAgICAgKEdUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHVmFsdWUgKiBvYmplY3QpOworCitHc3RJdGVyYXRvciogICAgICAgICAgICBnc3RfaXRlcmF0b3JfY29weSAgICAgICAgICAgICAgIChjb25zdCBHc3RJdGVyYXRvciAqaXQpOworCisvKiB1c2luZyBpdGVyYXRvcnMgKi8KK0dzdEl0ZXJhdG9yUmVzdWx0CWdzdF9pdGVyYXRvcl9uZXh0CQkoR3N0SXRlcmF0b3IgKml0LCBHVmFsdWUgKiBlbGVtKTsKK3ZvaWQJCQlnc3RfaXRlcmF0b3JfcmVzeW5jCQkoR3N0SXRlcmF0b3IgKml0KTsKK3ZvaWQJCQlnc3RfaXRlcmF0b3JfZnJlZQkJKEdzdEl0ZXJhdG9yICppdCk7CisKK3ZvaWQJCQlnc3RfaXRlcmF0b3JfcHVzaAkJKEdzdEl0ZXJhdG9yICppdCwgR3N0SXRlcmF0b3IgKm90aGVyKTsKKworLyogaGlnaGVyLW9yZGVyIGZ1bmN0aW9ucyB0aGF0IG9wZXJhdGUgb24gaXRlcmF0b3JzICovCitHc3RJdGVyYXRvcioJCWdzdF9pdGVyYXRvcl9maWx0ZXIJCShHc3RJdGVyYXRvciAqaXQsIEdDb21wYXJlRnVuYyBmdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICogdXNlcl9kYXRhKTsKK0dzdEl0ZXJhdG9yUmVzdWx0CWdzdF9pdGVyYXRvcl9mb2xkCQkoR3N0SXRlcmF0b3IgKml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0SXRlcmF0b3JGb2xkRnVuY3Rpb24gZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdWYWx1ZSAqcmV0LCBncG9pbnRlciB1c2VyX2RhdGEpOworR3N0SXRlcmF0b3JSZXN1bHQJZ3N0X2l0ZXJhdG9yX2ZvcmVhY2gJCShHc3RJdGVyYXRvciAqaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RJdGVyYXRvckZvcmVhY2hGdW5jdGlvbiBmdW5jLCBncG9pbnRlciB1c2VyX2RhdGEpOworZ2Jvb2xlYW4gCQlnc3RfaXRlcmF0b3JfZmluZF9jdXN0b20JKEdzdEl0ZXJhdG9yICppdCwgR0NvbXBhcmVGdW5jIGZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVmFsdWUgKmVsZW0sIGdwb2ludGVyIHVzZXJfZGF0YSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9JVEVSQVRPUl9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RtYWNyb3MuaCBiL2dzdC9nc3RtYWNyb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzhhZjUzCi0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdG1hY3Jvcy5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworI2lmbmRlZiBfX0dTVF9NQUNST1NfSF9fCisjZGVmaW5lIF9fR1NUX01BQ1JPU19IX18KKworR19CRUdJTl9ERUNMUworCisjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID4gNCkKKyMgZGVmaW5lIEdTVF9HTlVDX0NPTlNUUlVDVE9SIFwKKyAgX19hdHRyaWJ1dGVfXyAoKGNvbnN0cnVjdG9yKSkKKyNlbHNlICAvKiAhX19HTlVDX18gKi8KKyMgZGVmaW5lIEdTVF9HTlVDX0NPTlNUUlVDVE9SCisjZW5kaWYgLyogIV9fR05VQ19fICovCisKKyNpZiBkZWZpbmVkIChfX0dOVUNfXykgJiYgIWRlZmluZWQgKEdTVF9JTVBMRU1FTlRfSU5MSU5FUykKKyMgZGVmaW5lIEdTVF9JTkxJTkVfRlVOQyBleHRlcm4gX19pbmxpbmVfXworIyBkZWZpbmUgR1NUX0NBTl9JTkxJTkUgMQorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyMgZGVmaW5lIEdTVF9JTkxJTkVfRlVOQyBleHRlcm4gX19pbmxpbmUKKyMgZGVmaW5lIEdTVF9DQU5fSU5MSU5FIDEKKyNlbHNlCisjIGRlZmluZSBHU1RfSU5MSU5FX0ZVTkMgZXh0ZXJuCisjIHVuZGVmIEdTVF9DQU5fSU5MSU5FCisjZW5kaWYKKworI2lmICghZGVmaW5lZChfX1NURENfVkVSU0lPTl9fKSB8fCBfX1NURENfVkVSU0lPTl9fIDwgMTk5OTAxTCkgJiYgIWRlZmluZWQocmVzdHJpY3QpCisjICBpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA+PSA0CisjICAgIGRlZmluZSByZXN0cmljdCBfX3Jlc3RyaWN0X18KKyMgIGVsc2UKKyMgICAgZGVmaW5lIHJlc3RyaWN0CisjICBlbmRpZgorI2VuZGlmCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9NQUNST1NfSF9fICovCisKKwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdG1hcnNoYWwubGlzdCBiL2dzdC9nc3RtYXJzaGFsLmxpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlmYzE2NAotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RtYXJzaGFsLmxpc3QKQEAgLTAsMCArMSwyNSBAQAorVk9JRDpWT0lECitWT0lEOkJPT0xFQU4KK1ZPSUQ6SU5UCitWT0lEOlNUUklORworVk9JRDpCT1hFRAorVk9JRDpCT1hFRCxPQkpFQ1QKK1ZPSUQ6UE9JTlRFUgorVk9JRDpQT0lOVEVSLE9CSkVDVAorVk9JRDpPQkpFQ1QKK1ZPSUQ6T0JKRUNULE9CSkVDVAorVk9JRDpPQkpFQ1QsUEFSQU0KK1ZPSUQ6T0JKRUNULFBPSU5URVIKK1ZPSUQ6T0JKRUNULEJPWEVECitWT0lEOk9CSkVDVCxCT1hFRCxTVFJJTkcKK1ZPSUQ6T0JKRUNULE9CSkVDVCxTVFJJTkcKK1ZPSUQ6T0JKRUNULFNUUklORworVk9JRDpJTlQsSU5UCitWT0lEOklOVDY0CitWT0lEOlVJTlQsQk9YRUQKK1ZPSUQ6VUlOVCxQT0lOVEVSCitCT09MRUFOOlZPSUQKK0JPT0xFQU46UE9JTlRFUgorQk9PTEVBTjpCT1hFRAorUE9JTlRFUjpQT0lOVEVSCitCT1hFRDpCT1hFRApkaWZmIC0tZ2l0IGEvZ3N0L2dzdG1lbW9yeS5jIGIvZ3N0L2dzdG1lbW9yeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYWVmYzMKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0bWVtb3J5LmMKQEAgLTAsMCArMSw2NzcgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDExIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5iZT4KKyAqCisgKiBnc3RtZW1vcnkuYzogbWVtb3J5IGJsb2NrIGhhbmRsaW5nCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoqCisgKiBTRUNUSU9OOmdzdG1lbW9yeQorICogQHNob3J0X2Rlc2NyaXB0aW9uOiByZWZjb3VudGVkIHdyYXBwZXIgZm9yIG1lbW9yeSBibG9ja3MKKyAqIEBzZWVfYWxzbzogI0dzdEJ1ZmZlcgorICoKKyAqIEdzdE1lbW9yeSBpcyBhIGxpZ2h0d2VpZ2h0IHJlZmNvdW50ZWQgb2JqZWN0IHRoYXQgd3JhcHMgYSByZWdpb24gb2YgbWVtb3J5LgorICogVGhleSBhcmUgdHlwaWNhbGx5IHVzZWQgdG8gbWFuYWdlIHRoZSBkYXRhIG9mIGEgI0dzdEJ1ZmZlci4KKyAqCisgKiBNZW1vcnkgaXMgdXN1YWxseSBjcmVhdGVkIGJ5IGFsbG9jYXRvcnMgd2l0aCBhIGdzdF9hbGxvY2F0b3JfYWxsb2MoKQorICogbWV0aG9kIGNhbGwuIFdoZW4gTlVMTCBpcyB1c2VkIGFzIHRoZSBhbGxvY2F0b3IsIHRoZSBkZWZhdWx0IGFsbG9jYXRvciB3aWxsCisgKiBiZSB1c2VkLgorICoKKyAqIE5ldyBhbGxvY2F0b3JzIGNhbiBiZSByZWdpc3RlcmVkIHdpdGggZ3N0X2FsbG9jYXRvcl9yZWdpc3RlcigpLgorICogQWxsb2NhdG9ycyBhcmUgaWRlbnRpZmllZCBieSBuYW1lIGFuZCBjYW4gYmUgcmV0cmlldmVkIHdpdGgKKyAqIGdzdF9hbGxvY2F0b3JfZmluZCgpLgorICoKKyAqIE5ldyBtZW1vcnkgY2FuIGJlIGNyZWF0ZWQgd2l0aCBnc3RfbWVtb3J5X25ld193cmFwcGVkKCkgdGhhdCB3cmFwcyB0aGUgbWVtb3J5CisgKiBhbGxvY2F0ZWQgZWxzZXdoZXJlLgorICoKKyAqIFJlZmNvdW50aW5nIG9mIHRoZSBtZW1vcnkgYmxvY2sgaXMgcGVyZm9ybWVkIHdpdGggZ3N0X21lbW9yeV9yZWYoKSBhbmQKKyAqIGdzdF9tZW1vcnlfdW5yZWYoKS4KKyAqCisgKiBUaGUgc2l6ZSBvZiB0aGUgbWVtb3J5IGNhbiBiZSByZXRyaWV2ZWQgYW5kIGNoYW5nZWQgd2l0aAorICogZ3N0X21lbW9yeV9nZXRfc2l6ZXMoKSBhbmQgZ3N0X21lbW9yeV9yZXNpemUoKSByZXNwZWN0aXZlbHkuCisgKgorICogR2V0dGluZyBhY2Nlc3MgdG8gdGhlIGRhdGEgb2YgdGhlIG1lbW9yeSBpcyBwZXJmb3JtZWQgd2l0aCBnc3RfbWVtb3J5X21hcCgpLgorICogQWZ0ZXIgdGhlIG1lbW9yeSBhY2Nlc3MgaXMgY29tcGxldGVkLCBnc3RfbWVtb3J5X3VubWFwKCkgc2hvdWxkIGJlIGNhbGxlZC4KKyAqCisgKiBNZW1vcnkgY2FuIGJlIGNvcGllZCB3aXRoIGdzdF9tZW1vcnlfY29weSgpLCB3aGljaCB3aWxsIHJldHVybm4gYSB3cml0YWJsZQorICogY29weS4gZ3N0X21lbW9yeV9zaGFyZSgpIHdpbGwgY3JlYXRlIGEgbmV3IG1lbW9yeSBibG9jayB0aGF0IHNoYXJlcyB0aGUKKyAqIG1lbW9yeSB3aXRoIGFuIGV4aXN0aW5nIG1lbW9yeSBibG9jayBhdCBhIGN1c3RvbSBvZmZzZXQgYW5kIHdpdGggYSBjdXN0b20KKyAqIHNpemUuCisgKgorICogTWVtb3J5IGNhbiBiZSBlZmZpY2llbnRseSBtZXJnZWQgd2hlbiBnc3RfbWVtb3J5X2lzX3NwYW4oKSByZXR1cm5zIFRSVUUuCisgKgorICogTGFzdCByZXZpZXdlZCBvbiAyMDExLTA2LTA4ICgwLjExLjApCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCisjaW5jbHVkZSAiZ3N0bWVtb3J5LmgiCisKKworLyogYnVmZmVyIGFsaWdubWVudCBpbiBieXRlcyAtIDEKKyAqIGFuIGFsaWdubWVudCBvZiA3IHdvdWxkIGJlIHRoZSBzYW1lIGFzIG1hbGxvYygpIGd1YXJhbnRlZXMKKyAqLworI2lmIGRlZmluZWQoTUVNT1JZX0FMSUdOTUVOVF9NQUxMT0MpCitzaXplX3QgZ3N0X21lbW9yeV9hbGlnbm1lbnQgPSA3OworI2VsaWYgZGVmaW5lZChNRU1PUllfQUxJR05NRU5UX1BBR0VTSVpFKQorLyogd2UgZmlsbCB0aGlzIGluIGluIHRoZSBfaW5pdCBtZXRob2QgKi8KK3NpemVfdCBnc3RfbWVtb3J5X2FsaWdubWVudCA9IDA7CisjZWxpZiBkZWZpbmVkKE1FTU9SWV9BTElHTk1FTlQpCitzaXplX3QgZ3N0X21lbW9yeV9hbGlnbm1lbnQgPSBNRU1PUllfQUxJR05NRU5UIC0gMTsKKyNlbHNlCisjZXJyb3IgIk5vIG1lbW9yeSBhbGlnbm1lbnQgY29uZmlndXJlZCIKK3NpemVfdCBnc3RfbWVtb3J5X2FsaWdubWVudCA9IDA7CisjZW5kaWYKKworc3RydWN0IF9Hc3RBbGxvY2F0b3IKK3sKKyAgR1F1YXJrIG5hbWU7CisKKyAgR3N0TWVtb3J5SW5mbyBpbmZvOworfTsKKworLyogZGVmYXVsdCBtZW1vcnkgaW1wbGVtZW50YXRpb24gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIEdzdE1lbW9yeSBtZW07CisgIGdzaXplIHNsaWNlX3NpemU7CisgIGd1aW50OCAqZGF0YTsKKyAgR0ZyZWVGdW5jIGZyZWVfZnVuYzsKKyAgZ3NpemUgbWF4c2l6ZTsKKyAgZ3NpemUgb2Zmc2V0OworICBnc2l6ZSBzaXplOworfSBHc3RNZW1vcnlEZWZhdWx0OworCisvKiB0aGUgZGVmYXVsdCBhbGxvY2F0b3IgKi8KK3N0YXRpYyBjb25zdCBHc3RBbGxvY2F0b3IgKl9kZWZhdWx0X2FsbG9jYXRvcjsKKworLyogb3VyIHByZWRlZmluZWQgYWxsb2NhdG9ycyAqLworc3RhdGljIGNvbnN0IEdzdEFsbG9jYXRvciAqX2RlZmF1bHRfbWVtX2ltcGw7CisKKy8qIGluaXRpYWxpemUgdGhlIGZpZWxkcyAqLworc3RhdGljIHZvaWQKK19kZWZhdWx0X21lbV9pbml0IChHc3RNZW1vcnlEZWZhdWx0ICogbWVtLCBHc3RNZW1vcnlGbGFncyBmbGFncywKKyAgICBHc3RNZW1vcnkgKiBwYXJlbnQsIGdzaXplIHNsaWNlX3NpemUsIGdwb2ludGVyIGRhdGEsCisgICAgR0ZyZWVGdW5jIGZyZWVfZnVuYywgZ3NpemUgbWF4c2l6ZSwgZ3NpemUgb2Zmc2V0LCBnc2l6ZSBzaXplKQoreworICBtZW0tPm1lbS5hbGxvY2F0b3IgPSBfZGVmYXVsdF9tZW1faW1wbDsKKyAgbWVtLT5tZW0uZmxhZ3MgPSBmbGFnczsKKyAgbWVtLT5tZW0ucmVmY291bnQgPSAxOworICBtZW0tPm1lbS5wYXJlbnQgPSBwYXJlbnQgPyBnc3RfbWVtb3J5X3JlZiAocGFyZW50KSA6IE5VTEw7CisgIG1lbS0+c2xpY2Vfc2l6ZSA9IHNsaWNlX3NpemU7CisgIG1lbS0+ZGF0YSA9IGRhdGE7CisgIG1lbS0+ZnJlZV9mdW5jID0gZnJlZV9mdW5jOworICBtZW0tPm1heHNpemUgPSBtYXhzaXplOworICBtZW0tPm9mZnNldCA9IG9mZnNldDsKKyAgbWVtLT5zaXplID0gc2l6ZTsKK30KKworLyogY3JlYXRlIGEgbmV3IG1lbW9yeSBibG9jayB0aGF0IG1hbmFnZXMgdGhlIGdpdmVuIG1lbW9yeSAqLworc3RhdGljIEdzdE1lbW9yeURlZmF1bHQgKgorX2RlZmF1bHRfbWVtX25ldyAoR3N0TWVtb3J5RmxhZ3MgZmxhZ3MsIEdzdE1lbW9yeSAqIHBhcmVudCwgZ3BvaW50ZXIgZGF0YSwKKyAgICBHRnJlZUZ1bmMgZnJlZV9mdW5jLCBnc2l6ZSBtYXhzaXplLCBnc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUpCit7CisgIEdzdE1lbW9yeURlZmF1bHQgKm1lbTsKKyAgZ3NpemUgc2xpY2Vfc2l6ZTsKKworICBzbGljZV9zaXplID0gc2l6ZW9mIChHc3RNZW1vcnlEZWZhdWx0KTsKKworICBtZW0gPSBnX3NsaWNlX2FsbG9jIChzbGljZV9zaXplKTsKKyAgX2RlZmF1bHRfbWVtX2luaXQgKG1lbSwgZmxhZ3MsIHBhcmVudCwgc2xpY2Vfc2l6ZSwKKyAgICAgIGRhdGEsIGZyZWVfZnVuYywgbWF4c2l6ZSwgb2Zmc2V0LCBzaXplKTsKKworICByZXR1cm4gbWVtOworfQorCisvKiBhbGxvY2F0ZSB0aGUgbWVtb3J5IGFuZCBzdHJ1Y3R1cmUgaW4gb25lIGJsb2NrICovCitzdGF0aWMgR3N0TWVtb3J5RGVmYXVsdCAqCitfZGVmYXVsdF9tZW1fbmV3X2Jsb2NrIChnc2l6ZSBtYXhzaXplLCBnc2l6ZSBhbGlnbiwgZ3NpemUgb2Zmc2V0LCBnc2l6ZSBzaXplKQoreworICBHc3RNZW1vcnlEZWZhdWx0ICptZW07CisgIGdzaXplIGFvZmZzZXQsIHNsaWNlX3NpemU7CisgIGd1aW50OCAqZGF0YTsKKworICAvKiBlbnN1cmUgY29uZmlndXJlZCBhbGlnbm1lbnQgKi8KKyAgYWxpZ24gfD0gZ3N0X21lbW9yeV9hbGlnbm1lbnQ7CisgIC8qIGFsbG9jYXRlIG1vcmUgdG8gY29tcGVuc2F0ZSBmb3IgYWxpZ25tZW50ICovCisgIG1heHNpemUgKz0gYWxpZ247CisgIC8qIGFsbG9jIGhlYWRlciBhbmQgZGF0YSBpbiBvbmUgYmxvY2sgKi8KKyAgc2xpY2Vfc2l6ZSA9IHNpemVvZiAoR3N0TWVtb3J5RGVmYXVsdCkgKyBtYXhzaXplOworCisgIG1lbSA9IGdfc2xpY2VfYWxsb2MgKHNsaWNlX3NpemUpOworICBpZiAobWVtID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgZGF0YSA9IChndWludDggKikgbWVtICsgc2l6ZW9mIChHc3RNZW1vcnlEZWZhdWx0KTsKKworICBpZiAoKGFvZmZzZXQgPSAoKGd1aW50cHRyKSBkYXRhICYgYWxpZ24pKSkKKyAgICBhb2Zmc2V0ID0gKGFsaWduICsgMSkgLSBhb2Zmc2V0OworCisgIF9kZWZhdWx0X21lbV9pbml0IChtZW0sIDAsIE5VTEwsIHNsaWNlX3NpemUsIGRhdGEsIE5VTEwsIG1heHNpemUsCisgICAgICBhb2Zmc2V0ICsgb2Zmc2V0LCBzaXplKTsKKworICByZXR1cm4gbWVtOworfQorCitzdGF0aWMgR3N0TWVtb3J5ICoKK19kZWZhdWx0X21lbV9hbGxvYyAoY29uc3QgR3N0QWxsb2NhdG9yICogYWxsb2NhdG9yLCBnc2l6ZSBtYXhzaXplLCBnc2l6ZSBhbGlnbikKK3sKKyAgcmV0dXJuIChHc3RNZW1vcnkgKikgX2RlZmF1bHRfbWVtX25ld19ibG9jayAobWF4c2l6ZSwgYWxpZ24sIDAsIG1heHNpemUpOworfQorCitzdGF0aWMgZ3NpemUKK19kZWZhdWx0X21lbV9nZXRfc2l6ZXMgKEdzdE1lbW9yeURlZmF1bHQgKiBtZW0sIGdzaXplICogb2Zmc2V0LCBnc2l6ZSAqIG1heHNpemUpCit7CisgIGlmIChvZmZzZXQpCisgICAgKm9mZnNldCA9IG1lbS0+b2Zmc2V0OworICBpZiAobWF4c2l6ZSkKKyAgICAqbWF4c2l6ZSA9IG1lbS0+bWF4c2l6ZTsKKworICByZXR1cm4gbWVtLT5zaXplOworfQorCitzdGF0aWMgdm9pZAorX2RlZmF1bHRfbWVtX3Jlc2l6ZSAoR3N0TWVtb3J5RGVmYXVsdCAqIG1lbSwgZ3NzaXplIG9mZnNldCwgZ3NpemUgc2l6ZSkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoc2l6ZSArIG1lbS0+b2Zmc2V0ICsgb2Zmc2V0IDw9IG1lbS0+bWF4c2l6ZSk7CisKKyAgbWVtLT5vZmZzZXQgKz0gb2Zmc2V0OworICBtZW0tPnNpemUgPSBzaXplOworfQorCitzdGF0aWMgZ3BvaW50ZXIKK19kZWZhdWx0X21lbV9tYXAgKEdzdE1lbW9yeURlZmF1bHQgKiBtZW0sIGdzaXplICogc2l6ZSwgZ3NpemUgKiBtYXhzaXplLAorICAgIEdzdE1hcEZsYWdzIGZsYWdzKQoreworICBpZiAoc2l6ZSkKKyAgICAqc2l6ZSA9IG1lbS0+c2l6ZTsKKyAgaWYgKG1heHNpemUpCisgICAgKm1heHNpemUgPSBtZW0tPm1heHNpemU7CisKKyAgcmV0dXJuIG1lbS0+ZGF0YSArIG1lbS0+b2Zmc2V0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK19kZWZhdWx0X21lbV91bm1hcCAoR3N0TWVtb3J5RGVmYXVsdCAqIG1lbSwgZ3BvaW50ZXIgZGF0YSwgZ3NpemUgc2l6ZSkKK3sKKyAgaWYgKHNpemUgIT0gLTEpCisgICAgbWVtLT5zaXplID0gc2l6ZTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkCitfZGVmYXVsdF9tZW1fZnJlZSAoR3N0TWVtb3J5RGVmYXVsdCAqIG1lbSkKK3sKKyAgaWYgKG1lbS0+bWVtLnBhcmVudCkKKyAgICBnc3RfbWVtb3J5X3VucmVmIChtZW0tPm1lbS5wYXJlbnQpOworCisgIGlmIChtZW0tPmZyZWVfZnVuYykKKyAgICBtZW0tPmZyZWVfZnVuYyAobWVtLT5kYXRhKTsKKworICBnX3NsaWNlX2ZyZWUxIChtZW0tPnNsaWNlX3NpemUsIG1lbSk7Cit9CisKK3N0YXRpYyBHc3RNZW1vcnlEZWZhdWx0ICoKK19kZWZhdWx0X21lbV9jb3B5IChHc3RNZW1vcnlEZWZhdWx0ICogbWVtLCBnc3NpemUgb2Zmc2V0LCBnc2l6ZSBzaXplKQoreworICBHc3RNZW1vcnlEZWZhdWx0ICpjb3B5OworCisgIGlmIChzaXplID09IC0xKQorICAgIHNpemUgPSBtZW0tPnNpemUgPiBvZmZzZXQgPyBtZW0tPnNpemUgLSBvZmZzZXQgOiAwOworCisgIGNvcHkgPSBfZGVmYXVsdF9tZW1fbmV3X2Jsb2NrIChtZW0tPm1heHNpemUsIDAsIG1lbS0+b2Zmc2V0ICsgb2Zmc2V0LCBzaXplKTsKKyAgbWVtY3B5IChjb3B5LT5kYXRhLCBtZW0tPmRhdGEsIG1lbS0+bWF4c2l6ZSk7CisKKyAgcmV0dXJuIGNvcHk7Cit9CisKK3N0YXRpYyBHc3RNZW1vcnlEZWZhdWx0ICoKK19kZWZhdWx0X21lbV9zaGFyZSAoR3N0TWVtb3J5RGVmYXVsdCAqIG1lbSwgZ3NzaXplIG9mZnNldCwgZ3NpemUgc2l6ZSkKK3sKKyAgR3N0TWVtb3J5RGVmYXVsdCAqc3ViOworICBHc3RNZW1vcnkgKnBhcmVudDsKKworICAvKiBmaW5kIHRoZSByZWFsIHBhcmVudCAqLworICBpZiAoKHBhcmVudCA9IG1lbS0+bWVtLnBhcmVudCkgPT0gTlVMTCkKKyAgICBwYXJlbnQgPSAoR3N0TWVtb3J5ICopIG1lbTsKKworICBpZiAoc2l6ZSA9PSAtMSkKKyAgICBzaXplID0gbWVtLT5zaXplIC0gb2Zmc2V0OworCisgIHN1YiA9IF9kZWZhdWx0X21lbV9uZXcgKHBhcmVudC0+ZmxhZ3MsIHBhcmVudCwgbWVtLT5kYXRhLCBOVUxMLCBtZW0tPm1heHNpemUsCisgICAgICBtZW0tPm9mZnNldCArIG9mZnNldCwgc2l6ZSk7CisKKyAgcmV0dXJuIHN1YjsKK30KKworc3RhdGljIGdib29sZWFuCitfZGVmYXVsdF9tZW1faXNfc3BhbiAoR3N0TWVtb3J5RGVmYXVsdCAqIG1lbTEsIEdzdE1lbW9yeURlZmF1bHQgKiBtZW0yLAorICAgIGdzaXplICogb2Zmc2V0KQoreworCisgIGlmIChvZmZzZXQpIHsKKyAgICBHc3RNZW1vcnlEZWZhdWx0ICpwYXJlbnQ7CisKKyAgICBwYXJlbnQgPSAoR3N0TWVtb3J5RGVmYXVsdCAqKSBtZW0xLT5tZW0ucGFyZW50OworCisgICAgKm9mZnNldCA9IG1lbTEtPm9mZnNldCAtIHBhcmVudC0+b2Zmc2V0OworICB9CisKKyAgLyogYW5kIG1lbW9yeSBpcyBjb250aWd1b3VzICovCisgIHJldHVybiBtZW0xLT5kYXRhICsgbWVtMS0+b2Zmc2V0ICsgbWVtMS0+c2l6ZSA9PSBtZW0yLT5kYXRhICsgbWVtMi0+b2Zmc2V0OworfQorCitzdGF0aWMgR3N0TWVtb3J5ICoKK19mYWxsYmFja19jb3B5IChHc3RNZW1vcnkgKiBtZW0sIGdzc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUpCit7CisgIEdzdE1lbW9yeSAqY29weTsKKyAgZ3VpbnQ4ICpkYXRhLCAqZGVzdDsKKyAgZ3NpemUgbXNpemU7CisKKyAgZGF0YSA9IGdzdF9tZW1vcnlfbWFwIChtZW0sICZtc2l6ZSwgTlVMTCwgR1NUX01BUF9SRUFEKTsKKyAgaWYgKHNpemUgPT0gLTEpCisgICAgc2l6ZSA9IG1zaXplID4gb2Zmc2V0ID8gbXNpemUgLSBvZmZzZXQgOiAwOworICAvKiB1c2UgdGhlIHNhbWUgYWxsb2NhdG9yIGFzIHRoZSBtZW1vcnkgd2UgY29weSwgRklYTUUsIGFsaWdubWVudD8gICovCisgIGNvcHkgPSBnc3RfYWxsb2NhdG9yX2FsbG9jIChtZW0tPmFsbG9jYXRvciwgc2l6ZSwgMCk7CisgIGRlc3QgPSBnc3RfbWVtb3J5X21hcCAoY29weSwgTlVMTCwgTlVMTCwgR1NUX01BUF9XUklURSk7CisgIG1lbWNweSAoZGVzdCwgZGF0YSArIG9mZnNldCwgc2l6ZSk7CisgIGdzdF9tZW1vcnlfdW5tYXAgKGNvcHksIGRlc3QsIHNpemUpOworCisgIGdzdF9tZW1vcnlfdW5tYXAgKG1lbSwgZGF0YSwgbXNpemUpOworCisgIHJldHVybiAoR3N0TWVtb3J5ICopIGNvcHk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorX2ZhbGxiYWNrX2lzX3NwYW4gKEdzdE1lbW9yeSAqIG1lbTEsIEdzdE1lbW9yeSAqIG1lbTIsIGdzaXplICogb2Zmc2V0KQoreworICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBHU3RhdGljUldMb2NrIGxvY2sgPSBHX1NUQVRJQ19SV19MT0NLX0lOSVQ7CitzdGF0aWMgR0hhc2hUYWJsZSAqYWxsb2NhdG9yczsKKwordm9pZAorX3ByaXZfZ3N0X21lbW9yeV9pbml0aWFsaXplICh2b2lkKQoreworICBzdGF0aWMgY29uc3QgR3N0TWVtb3J5SW5mbyBfbWVtX2luZm8gPSB7CisgICAgKEdzdE1lbW9yeUFsbG9jRnVuY3Rpb24pIF9kZWZhdWx0X21lbV9hbGxvYywKKyAgICAoR3N0TWVtb3J5R2V0U2l6ZXNGdW5jdGlvbikgX2RlZmF1bHRfbWVtX2dldF9zaXplcywKKyAgICAoR3N0TWVtb3J5UmVzaXplRnVuY3Rpb24pIF9kZWZhdWx0X21lbV9yZXNpemUsCisgICAgKEdzdE1lbW9yeU1hcEZ1bmN0aW9uKSBfZGVmYXVsdF9tZW1fbWFwLAorICAgIChHc3RNZW1vcnlVbm1hcEZ1bmN0aW9uKSBfZGVmYXVsdF9tZW1fdW5tYXAsCisgICAgKEdzdE1lbW9yeUZyZWVGdW5jdGlvbikgX2RlZmF1bHRfbWVtX2ZyZWUsCisgICAgKEdzdE1lbW9yeUNvcHlGdW5jdGlvbikgX2RlZmF1bHRfbWVtX2NvcHksCisgICAgKEdzdE1lbW9yeVNoYXJlRnVuY3Rpb24pIF9kZWZhdWx0X21lbV9zaGFyZSwKKyAgICAoR3N0TWVtb3J5SXNTcGFuRnVuY3Rpb24pIF9kZWZhdWx0X21lbV9pc19zcGFuLAorICAgIE5VTEwKKyAgfTsKKworICBhbGxvY2F0b3JzID0gZ19oYXNoX3RhYmxlX25ldyAoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWwpOworCisjaWZkZWYgSEFWRV9HRVRQQUdFU0laRQorI2lmZGVmIE1FTU9SWV9BTElHTk1FTlRfUEFHRVNJWkUKKyAgZ3N0X21lbW9yeV9hbGlnbm1lbnQgPSBnZXRwYWdlc2l6ZSAoKSAtIDE7CisjZW5kaWYKKyNlbmRpZgorCisgIEdTVF9ERUJVRyAoIm1lbW9yeSBhbGlnbm1lbnQ6ICUiIEdfR1NJWkVfRk9STUFULCBnc3RfbWVtb3J5X2FsaWdubWVudCk7CisKKyAgX2RlZmF1bHRfbWVtX2ltcGwgPSBnc3RfYWxsb2NhdG9yX3JlZ2lzdGVyIChHU1RfQUxMT0NBVE9SX1NZU01FTSwgJl9tZW1faW5mbyk7CisKKyAgX2RlZmF1bHRfYWxsb2NhdG9yID0gX2RlZmF1bHRfbWVtX2ltcGw7Cit9CisKKy8qKgorICogZ3N0X21lbW9yeV9uZXdfd3JhcHBlZDoKKyAqIEBmbGFnczogI0dzdE1lbW9yeUZsYWdzCisgKiBAZGF0YTogZGF0YSB0byB3cmFwCisgKiBAZnJlZV9mdW5jOiBmdW5jdGlvbiB0byBmcmVlIEBkYXRhCisgKiBAbWF4c2l6ZTogYWxsb2NhdGVkIHNpemUgb2YgQGRhdGEKKyAqIEBvZmZzZXQ6IG9mZnNldCBpbiBAZGF0YQorICogQHNpemU6IHNpemUgb2YgdmFsaWQgZGF0YQorICoKKyAqIEFsbG9jYXRlIGEgbmV3IG1lbW9yeSBibG9jayB0aGF0IHdyYXBzIHRoZSBnaXZlbiBAZGF0YS4KKyAqCisgKiBSZXR1cm5zOiBhIG5ldyAjR3N0TWVtb3J5LgorICovCitHc3RNZW1vcnkgKgorZ3N0X21lbW9yeV9uZXdfd3JhcHBlZCAoR3N0TWVtb3J5RmxhZ3MgZmxhZ3MsIGdwb2ludGVyIGRhdGEsCisgICAgR0ZyZWVGdW5jIGZyZWVfZnVuYywgZ3NpemUgbWF4c2l6ZSwgZ3NpemUgb2Zmc2V0LCBnc2l6ZSBzaXplKQoreworICBHc3RNZW1vcnlEZWZhdWx0ICptZW07CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRhdGEgIT0gTlVMTCwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChvZmZzZXQgKyBzaXplIDw9IG1heHNpemUsIE5VTEwpOworCisgIG1lbSA9IF9kZWZhdWx0X21lbV9uZXcgKGZsYWdzLCBOVUxMLCBkYXRhLCBmcmVlX2Z1bmMsIG1heHNpemUsIG9mZnNldCwgc2l6ZSk7CisKKyAgcmV0dXJuIChHc3RNZW1vcnkgKikgbWVtOworfQorCisvKioKKyAqIGdzdF9tZW1vcnlfcmVmOgorICogQG1lbTogYSAjR3N0TWVtb3J5CisgKgorICogSW5jcmVhc2VzIHRoZSByZWZjb3VudCBvZiBAbWVtLgorICoKKyAqIFJldHVybnM6IEBtZW0gd2l0aCBpbmNyZWFzZWQgcmVmY291bnQKKyAqLworR3N0TWVtb3J5ICoKK2dzdF9tZW1vcnlfcmVmIChHc3RNZW1vcnkgKiBtZW0pCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtZW0gIT0gTlVMTCwgTlVMTCk7CisKKyAgZ19hdG9taWNfaW50X2luYyAoJm1lbS0+cmVmY291bnQpOworCisgIHJldHVybiBtZW07Cit9CisKKy8qKgorICogZ3N0X21lbW9yeV91bnJlZjoKKyAqIEBtZW06IGEgI0dzdE1lbW9yeQorICoKKyAqIERlY3JlYXNlcyB0aGUgcmVmY291bnQgb2YgQG1lbS4gV2hlbiB0aGUgcmVmY291bnQgcmVhY2hlcyAwLCB0aGUgZnJlZQorICogZnVuY3Rpb24gb2YgQG1lbSB3aWxsIGJlIGNhbGxlZC4KKyAqLwordm9pZAorZ3N0X21lbW9yeV91bnJlZiAoR3N0TWVtb3J5ICogbWVtKQoreworICBnX3JldHVybl9pZl9mYWlsIChtZW0gIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKG1lbS0+YWxsb2NhdG9yICE9IE5VTEwpOworCisgIGlmIChnX2F0b21pY19pbnRfZGVjX2FuZF90ZXN0ICgmbWVtLT5yZWZjb3VudCkpCisgICAgbWVtLT5hbGxvY2F0b3ItPmluZm8uZnJlZSAobWVtKTsKK30KKworLyoqCisgKiBnc3RfbWVtb3J5X2dldF9zaXplczoKKyAqIEBtZW06IGEgI0dzdE1lbW9yeQorICogQG9mZnNldDogcG9pbnRlciB0byBvZmZzZXQKKyAqIEBtYXhzaXplOiBwb2ludGVyIHRvIG1heHNpemUKKyAqCisgKiBHZXQgdGhlIGN1cnJlbnQgQHNpemUsIEBvZmZzZXQgYW5kIEBtYXhzaXplIG9mIEBtZW0uCisgKgorICogUmV0dXJuczogdGhlIGN1cnJlbnQgc2l6ZXMgb2YgQG1lbQorICovCitnc2l6ZQorZ3N0X21lbW9yeV9nZXRfc2l6ZXMgKEdzdE1lbW9yeSAqIG1lbSwgZ3NpemUgKiBvZmZzZXQsIGdzaXplICogbWF4c2l6ZSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG1lbSAhPSBOVUxMLCAwKTsKKworICByZXR1cm4gbWVtLT5hbGxvY2F0b3ItPmluZm8uZ2V0X3NpemVzIChtZW0sIG9mZnNldCwgbWF4c2l6ZSk7Cit9CisKKy8qKgorICogZ3N0X21lbW9yeV9yZXNpemU6CisgKiBAbWVtOiBhICNHc3RNZW1vcnkKKyAqIEBvZmZzZXQ6IGEgbmV3IG9mZnNldAorICogQHNpemU6IGEgbmV3IHNpemUKKyAqCisgKiBSZXNpemUgdGhlIG1lbW9yeSByZWdpb24uIEBtZW0gc2hvdWxkIGJlIHdyaXRhYmxlIGFuZCBvZmZzZXQgKyBzaXplIHNob3VsZCBiZQorICogbGVzcyB0aGFuIHRoZSBtYXhzaXplIG9mIEBtZW0uCisgKi8KK3ZvaWQKK2dzdF9tZW1vcnlfcmVzaXplIChHc3RNZW1vcnkgKiBtZW0sIGdzc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKG1lbSAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX01FTU9SWV9JU19XUklUQUJMRSAobWVtKSk7CisKKyAgbWVtLT5hbGxvY2F0b3ItPmluZm8ucmVzaXplIChtZW0sIG9mZnNldCwgc2l6ZSk7Cit9CisKKy8qKgorICogZ3N0X21lbW9yeV9tYXA6CisgKiBAbWVtOiBhICNHc3RNZW1vcnkKKyAqIEBzaXplOiBwb2ludGVyIGZvciBzaXplCisgKiBAbWF4c2l6ZTogcG9pbnRlciBmb3IgbWF4c2l6ZQorICogQGZsYWdzOiBtYXBwaW5nIGZsYWdzCisgKgorICogR2V0IGEgcG9pbnRlciB0byB0aGUgbWVtb3J5IG9mIEBtZW0gdGhhdCBjYW4gYmUgYWNjZXNzZWQgYWNjb3JkaW5nIHRvIEBmbGFncy4KKyAqCisgKiBAc2l6ZSBhbmQgQG1heHNpemUgd2lsbCBjb250YWluIHRoZSBzaXplIG9mIHRoZSBtZW1vcnkgYW5kIHRoZSBtYXhpbXVtCisgKiBhbGxvY2F0ZWQgbWVtb3J5IG9mIEBtZW0gcmVzcGVjdGl2ZWx5LiBUaGV5IGNhbiBiZSBzZXQgdG8gTlVMTC4KKyAqCisgKiBSZXR1cm5zOiBhIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSBvZiBAbWVtLgorICovCitncG9pbnRlcgorZ3N0X21lbW9yeV9tYXAgKEdzdE1lbW9yeSAqIG1lbSwgZ3NpemUgKiBzaXplLCBnc2l6ZSAqIG1heHNpemUsCisgICAgR3N0TWFwRmxhZ3MgZmxhZ3MpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtZW0gIT0gTlVMTCwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICghKGZsYWdzICYgR1NUX01BUF9XUklURSkgfHwKKyAgICAgIEdTVF9NRU1PUllfSVNfV1JJVEFCTEUgKG1lbSksIE5VTEwpOworCisgIHJldHVybiBtZW0tPmFsbG9jYXRvci0+aW5mby5tYXAgKG1lbSwgc2l6ZSwgbWF4c2l6ZSwgZmxhZ3MpOworfQorCisvKioKKyAqIGdzdF9tZW1vcnlfdW5tYXA6CisgKiBAbWVtOiBhICNHc3RNZW1vcnkKKyAqIEBkYXRhOiBkYXRhIHRvIHVubWFwCisgKiBAc2l6ZTogbmV3IHNpemUgb2YgQG1lbQorICoKKyAqIFJlbGVhc2UgdGhlIG1lbW9yeSBwb2ludGVyIG9idGFpbmVkIHdpdGggZ3N0X21lbW9yeV9tYXAoKSBhbmQgc2V0IHRoZSBzaXplIG9mCisgKiB0aGUgbWVtb3J5IHRvIEBzaXplLiBAc2l6ZSBjYW4gYmUgc2V0IHRvIC0xIHdoZW4gdGhlIHNpemUgc2hvdWxkIG5vdCBiZQorICogdXBkYXRlZC4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIHdoZW4gdGhlIG1lbW9yeSB3YXMgcmVsZWFzZSBzdWNjZXNzZnVsbHkuCisgKi8KK2dib29sZWFuCitnc3RfbWVtb3J5X3VubWFwIChHc3RNZW1vcnkgKiBtZW0sIGdwb2ludGVyIGRhdGEsIGdzaXplIHNpemUpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtZW0gIT0gTlVMTCwgRkFMU0UpOworCisgIHJldHVybiBtZW0tPmFsbG9jYXRvci0+aW5mby51bm1hcCAobWVtLCBkYXRhLCBzaXplKTsKK30KKworLyoqCisgKiBnc3RfbWVtb3J5X2NvcHk6CisgKiBAbWVtOiBhICNHc3RNZW1vcnkKKyAqIEBvZmZzZXQ6IGFuIG9mZnNldCB0byBjb3B5CisgKiBAc2l6ZTogc2l6ZSB0byBjb3B5CisgKgorICogUmV0dXJuIGEgY29weSBvZiBAc2l6ZSBieXRlcyBmcm9tIEBtZW0gc3RhcnRpbmcgZnJvbSBAb2Zmc2V0LiBUaGlzIGNvcHkgaXMKKyAqIGd1YXJhbnRlZWQgdG8gYmUgd3JpdGFibGUuIEBzaXplIGNhbiBiZSBzZXQgdG8gLTEgdG8gcmV0dXJuIGEgY29weSBhbGwgYnl0ZXMKKyAqIGZyb20gQG9mZnNldC4KKyAqCisgKiBSZXR1cm5zOiBhIG5ldyAjR3N0TWVtb3J5LgorICovCitHc3RNZW1vcnkgKgorZ3N0X21lbW9yeV9jb3B5IChHc3RNZW1vcnkgKiBtZW0sIGdzc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtZW0gIT0gTlVMTCwgTlVMTCk7CisKKyAgcmV0dXJuIG1lbS0+YWxsb2NhdG9yLT5pbmZvLmNvcHkgKG1lbSwgb2Zmc2V0LCBzaXplKTsKK30KKworLyoqCisgKiBnc3RfbWVtb3J5X3NoYXJlOgorICogQG1lbTogYSAjR3N0TWVtb3J5CisgKiBAb2Zmc2V0OiBhbiBvZmZzZXQgdG8gc2hhcmUKKyAqIEBzaXplOiBzaXplIHRvIHNoYXJlCisgKgorICogUmV0dXJuIGEgc2hhcmVkIGNvcHkgb2YgQHNpemUgYnl0ZXMgZnJvbSBAbWVtIHN0YXJ0aW5nIGZyb20gQG9mZnNldC4gTm8gbWVtb3J5CisgKiBjb3B5IGlzIHBlcmZvcm1lZCBhbmQgdGhlIG1lbW9yeSByZWdpb24gaXMgc2ltcGx5IHNoYXJlZC4gVGhlIHJlc3VsdCBpcworICogZ3VhcmFudGVlZCB0byBiZSBub3Qtd3JpdGFibGUuIEBzaXplIGNhbiBiZSBzZXQgdG8gLTEgdG8gcmV0dXJuIGEgc2hhcmUgYWxsIGJ5dGVzCisgKiBmcm9tIEBvZmZzZXQuCisgKgorICogUmV0dXJuczogYSBuZXcgI0dzdE1lbW9yeS4KKyAqLworR3N0TWVtb3J5ICoKK2dzdF9tZW1vcnlfc2hhcmUgKEdzdE1lbW9yeSAqIG1lbSwgZ3NzaXplIG9mZnNldCwgZ3NpemUgc2l6ZSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG1lbSAhPSBOVUxMLCBOVUxMKTsKKworICByZXR1cm4gbWVtLT5hbGxvY2F0b3ItPmluZm8uc2hhcmUgKG1lbSwgb2Zmc2V0LCBzaXplKTsKK30KKworLyoqCisgKiBnc3RfbWVtb3J5X2lzX3NwYW46CisgKiBAbWVtMTogYSAjR3N0TWVtb3J5CisgKiBAbWVtMjogYSAjR3N0TWVtb3J5CisgKiBAb2Zmc2V0OiBhIHBvaW50ZXIgdG8gYSByZXN1bHQgb2Zmc2V0CisgKgorICogQ2hlY2sgaWYgQG1lbTEgYW5kIG1lbTIgc2hhcmUgdGhlIG1lbW9yeSB3aXRoIGEgY29tbW9uIHBhcmVudCBtZW1vcnkgb2JqZWN0CisgKiBhbmQgdGhhdCB0aGUgbWVtb3J5IGlzIGNvbnRpZ3VvdXMuCisgKgorICogSWYgdGhpcyBpcyB0aGUgY2FzZSwgdGhlIG1lbW9yeSBvZiBAbWVtMSBhbmQgQG1lbTIgY2FuIGJlIG1lcmdlZAorICogZWZmaWNpZW50bHkgYnkgcGVyZm9ybWluZyBnc3RfbWVtb3J5X3NoYXJlKCkgb24gdGhlIHBhcmVudCBvYmplY3QgZnJvbQorICogdGhlIHJldHVybmVkIEBvZmZzZXQuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIG1lbW9yeSBpcyBjb250aWd1b3VzIGFuZCBvZiBhIGNvbW1vbiBwYXJlbnQuCisgKi8KK2dib29sZWFuCitnc3RfbWVtb3J5X2lzX3NwYW4gKEdzdE1lbW9yeSAqIG1lbTEsIEdzdE1lbW9yeSAqIG1lbTIsIGdzaXplICogb2Zmc2V0KQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAobWVtMSAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtZW0yICE9IE5VTEwsIEZBTFNFKTsKKworICAvKiBuZWVkIHRvIGhhdmUgdGhlIHNhbWUgYWxsb2NhdG9ycyAqLworICBpZiAobWVtMS0+YWxsb2NhdG9yICE9IG1lbTItPmFsbG9jYXRvcikKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgLyogbmVlZCB0byBoYXZlIHRoZSBzYW1lIHBhcmVudCAqLworICBpZiAobWVtMS0+cGFyZW50ID09IE5VTEwgfHwgbWVtMS0+cGFyZW50ICE9IG1lbTItPnBhcmVudCkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgLyogYW5kIG1lbW9yeSBpcyBjb250aWd1b3VzICovCisgIGlmICghbWVtMS0+YWxsb2NhdG9yLT5pbmZvLmlzX3NwYW4gKG1lbTEsIG1lbTIsIG9mZnNldCkpCisgICAgcmV0dXJuIEZBTFNFOworCisgIHJldHVybiBUUlVFOworfQorCisvKioKKyAqIGdzdF9hbGxvY2F0b3JfcmVnaXN0ZXI6CisgKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIGFsbG9jYXRvcgorICogQGluZm86ICNHc3RNZW1vcnlJbmZvCisgKgorICogUmVnaXN0ZXJzIHRoZSBtZW1vcnkgYWxsb2NhdG9yIHdpdGggQG5hbWUgYW5kIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucworICogQGluZm8uCisgKgorICogQWxsIGZ1bmN0aW9ucyBpbiBAaW5mbyBhcmUgbWFuZGF0b3J5IGV4ZXB0IHRoZSBjb3B5IGFuZCBpc19zcGFuCisgKiBmdW5jdGlvbnMsIHdoaWNoIHdpbGwgaGF2ZSBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2hlbiBsZWZ0IE5VTEwuCisgKgorICogVGhlIHVzZXJfZGF0YSBmaWVsZCBpbiBAaW5mbyB3aWxsIGJlIHBhc3NlZCB0byBhbGwgY2FsbHMgb2YgdGhlIGFsbG9jCisgKiBmdW5jdGlvbi4KKyAqCisgKiBSZXR1cm5zOiBhIG5ldyAjR3N0QWxsb2NhdG9yLgorICovCitjb25zdCBHc3RBbGxvY2F0b3IgKgorZ3N0X2FsbG9jYXRvcl9yZWdpc3RlciAoY29uc3QgZ2NoYXIgKiBuYW1lLCBjb25zdCBHc3RNZW1vcnlJbmZvICogaW5mbykKK3sKKyAgR3N0QWxsb2NhdG9yICphbGxvY2F0b3I7CisKKyNkZWZpbmUgSU5TVEFMTF9GQUxMQkFDSyhfdCkgXAorICBpZiAoYWxsb2NhdG9yLT5pbmZvLl90ID09IE5VTEwpIGFsbG9jYXRvci0+aW5mby5fdCA9IF9mYWxsYmFja18gIyNfdDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAobmFtZSAhPSBOVUxMLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGluZm8gIT0gTlVMTCwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpbmZvLT5hbGxvYyAhPSBOVUxMLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGluZm8tPmdldF9zaXplcyAhPSBOVUxMLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGluZm8tPnJlc2l6ZSAhPSBOVUxMLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGluZm8tPm1hcCAhPSBOVUxMLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGluZm8tPnVubWFwICE9IE5VTEwsIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoaW5mby0+ZnJlZSAhPSBOVUxMLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGluZm8tPnNoYXJlICE9IE5VTEwsIE5VTEwpOworCisgIGFsbG9jYXRvciA9IGdfc2xpY2VfbmV3IChHc3RBbGxvY2F0b3IpOworICBhbGxvY2F0b3ItPm5hbWUgPSBnX3F1YXJrX2Zyb21fc3RyaW5nIChuYW1lKTsKKyAgYWxsb2NhdG9yLT5pbmZvID0gKmluZm87CisgIElOU1RBTExfRkFMTEJBQ0sgKGNvcHkpOworICBJTlNUQUxMX0ZBTExCQUNLIChpc19zcGFuKTsKKyN1bmRlZiBJTlNUQUxMX0ZBTExCQUNLCisKKyAgR1NUX0RFQlVHICgicmVnaXN0ZXJpbmcgYWxsb2NhdG9yIFwiJXNcIiIsIG5hbWUpOworCisgIGdfc3RhdGljX3J3X2xvY2tfd3JpdGVyX2xvY2sgKCZsb2NrKTsKKyAgZ19oYXNoX3RhYmxlX2luc2VydCAoYWxsb2NhdG9ycywgKGdwb2ludGVyKSBuYW1lLCAoZ3BvaW50ZXIpIGFsbG9jYXRvcik7CisgIGdfc3RhdGljX3J3X2xvY2tfd3JpdGVyX3VubG9jayAoJmxvY2spOworCisgIHJldHVybiBhbGxvY2F0b3I7Cit9CisKKy8qKgorICogZ3N0X2FsbG9jYXRvcl9maW5kOgorICogQG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBhbGxvY2F0b3IKKyAqCisgKiBGaW5kIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIGFsbG9jYXRvciB3aXRoIEBuYW1lLiBXaGVuIEBuYW1lIGlzIE5VTEwsIHRoZQorICogZGVmYXVsdCBhbGxvY2F0b3Igd2lsbCBiZSByZXR1cm5lZC4KKyAqCisgKiBSZXR1cm5zOiBhICNHc3RBbGxvY2F0b3Igb3IgTlVMTCB3aGVuIHRoZSBhbGxvY2F0b3Igd2l0aCBAbmFtZSB3YXMgbm90CisgKiByZWdpc3RlcmVkLgorICovCitjb25zdCBHc3RBbGxvY2F0b3IgKgorZ3N0X2FsbG9jYXRvcl9maW5kIChjb25zdCBnY2hhciAqIG5hbWUpCit7CisgIGNvbnN0IEdzdEFsbG9jYXRvciAqYWxsb2NhdG9yOworCisgIGdfc3RhdGljX3J3X2xvY2tfcmVhZGVyX2xvY2sgKCZsb2NrKTsKKyAgaWYgKG5hbWUpIHsKKyAgICBhbGxvY2F0b3IgPSBnX2hhc2hfdGFibGVfbG9va3VwIChhbGxvY2F0b3JzLCAoZ2NvbnN0cG9pbnRlcikgbmFtZSk7CisgIH0gZWxzZSB7CisgICAgYWxsb2NhdG9yID0gX2RlZmF1bHRfYWxsb2NhdG9yOworICB9CisgIGdfc3RhdGljX3J3X2xvY2tfcmVhZGVyX3VubG9jayAoJmxvY2spOworCisgIHJldHVybiBhbGxvY2F0b3I7Cit9CisKKy8qKgorICogZ3N0X2FsbG9jYXRvcl9zZXRfZGVmYXVsdDoKKyAqIEBhbGxvY2F0b3I6IGEgI0dzdEFsbG9jYXRvcgorICoKKyAqIFNldCB0aGUgZGVmYXVsdCBhbGxvY2F0b3IuCisgKi8KK3ZvaWQKK2dzdF9hbGxvY2F0b3Jfc2V0X2RlZmF1bHQgKGNvbnN0IEdzdEFsbG9jYXRvciAqIGFsbG9jYXRvcikKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoYWxsb2NhdG9yICE9IE5VTEwpOworCisgIGdfc3RhdGljX3J3X2xvY2tfd3JpdGVyX2xvY2sgKCZsb2NrKTsKKyAgX2RlZmF1bHRfYWxsb2NhdG9yID0gYWxsb2NhdG9yOworICBnX3N0YXRpY19yd19sb2NrX3dyaXRlcl91bmxvY2sgKCZsb2NrKTsKK30KKworLyoqCisgKiBnc3RfYWxsb2NhdG9yX2FsbG9jOgorICogQGFsbG9jYXRvcjogYSAjR3N0QWxsb2NhdG9yIHRvIHVzZQorICogQG1heHNpemU6IGFsbG9jYXRlZCBzaXplIG9mIEBkYXRhCisgKiBAYWxpZ246IGFsaWdubWVudCBmb3IgdGhlIGRhdGEKKyAqCisgKiBVc2UgQGFsbG9jYXRvciB0byBhbGxvY2F0ZSBhIG5ldyBtZW1vcnkgYmxvY2sgd2l0aCBtZW1vcnkgdGhhdCBpcyBhdCBsZWFzdAorICogQG1heHNpemUgYmlnIGFuZCBoYXMgdGhlIGdpdmVuIGFsaWdubWVudC4KKyAqCisgKiBXaGVuIEBhbGxvY2F0b3IgaXMgTlVMTCwgdGhlIGRlZmF1bHQgYWxsb2NhdG9yIHdpbGwgYmUgdXNlZC4KKyAqCisgKiBAYWxpZ24gaXMgZ2l2ZW4gYXMgYSBiaXRtYXNrIHNvIHRoYXQgQGFsaWduICsgMSBlcXVhbHMgdGhlIGFtb3VudCBvZiBieXRlcyB0bworICogYWxpZ24gdG8uIEZvciBleGFtcGxlLCB0byBhbGlnbiB0byA4IGJ5dGVzLCB1c2UgYW4gYWxpZ25tZW50IG9mIDcuCisgKgorICogUmV0dXJuczogYSBuZXcgI0dzdE1lbW9yeS4KKyAqLworR3N0TWVtb3J5ICoKK2dzdF9hbGxvY2F0b3JfYWxsb2MgKGNvbnN0IEdzdEFsbG9jYXRvciAqIGFsbG9jYXRvciwgZ3NpemUgbWF4c2l6ZSwgZ3NpemUgYWxpZ24pCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICgoKGFsaWduICsgMSkgJiBhbGlnbikgPT0gMCwgTlVMTCk7CisKKyAgaWYgKGFsbG9jYXRvciA9PSBOVUxMKQorICAgIGFsbG9jYXRvciA9IF9kZWZhdWx0X2FsbG9jYXRvcjsKKworICByZXR1cm4gYWxsb2NhdG9yLT5pbmZvLmFsbG9jIChhbGxvY2F0b3IsIG1heHNpemUsIGFsaWduLAorICAgICAgYWxsb2NhdG9yLT5pbmZvLnVzZXJfZGF0YSk7Cit9CmRpZmYgLS1naXQgYS9nc3QvZ3N0bWVtb3J5LmggYi9nc3QvZ3N0bWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFmOGU2NwotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RtZW1vcnkuaApAQCAtMCwwICsxLDMwMiBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmJlPgorICoKKyAqIGdzdG1lbW9yeS5oOiBIZWFkZXIgZm9yIG1lbW9yeSBibG9ja3MKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKKyNpZm5kZWYgX19HU1RfTUVNT1JZX0hfXworI2RlZmluZSBfX0dTVF9NRU1PUllfSF9fCisKKyNpbmNsdWRlIDxnc3QvZ3N0Y29uZmlnLmg+CisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCitHX0JFR0lOX0RFQ0xTCisKK3R5cGVkZWYgc3RydWN0IF9Hc3RNZW1vcnkgR3N0TWVtb3J5OwordHlwZWRlZiBzdHJ1Y3QgX0dzdE1lbW9yeUluZm8gR3N0TWVtb3J5SW5mbzsKK3R5cGVkZWYgc3RydWN0IF9Hc3RBbGxvY2F0b3IgR3N0QWxsb2NhdG9yOworCitleHRlcm4gZ3NpemUgZ3N0X21lbW9yeV9hbGlnbm1lbnQ7CisKKy8qKgorICogR3N0TWVtb3J5RmxhZ3M6CisgKiBAR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZOiBtZW1vcnkgaXMgcmVhZG9ubHkuIEl0IGlzIG5vdCBhbGxvd2VkIHRvIG1hcCB0aGUKKyAqIG1lbW9yeSB3aXRoICNHU1RfTUFQX1dSSVRFLgorICogQEdTVF9NRU1PUllfRkxBR19OT19TSEFSRTogbWVtb3J5IG11c3Qgbm90IGJlIHNoYXJlZC4gQ29waWVzIHdpbGwgaGF2ZSB0byBiZQorICogbWFkZSB3aGVuIHRoaXMgbWVtb3J5IG5lZWRzIHRvIGJlIHNoYXJlZCBiZXR3ZWVuIGJ1ZmZlcnMuCisgKiBAR1NUX01FTU9SWV9GTEFHX0xBU1Q6IGZpcnN0IGZsYWcgdGhhdCBjYW4gYmUgdXNlZCBmb3IgY3VzdG9tIHB1cnBvc2VzCisgKgorICogRmxhZ3MgZm9yIHdyYXBwZWQgbWVtb3J5LgorICovCit0eXBlZGVmIGVudW0geworICBHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFkgPSAoMSA8PCAwKSwKKyAgR1NUX01FTU9SWV9GTEFHX05PX1NIQVJFID0gKDEgPDwgMSksCisKKyAgR1NUX01FTU9SWV9GTEFHX0xBU1QgPSAoMSA8PCAyNCkKK30gR3N0TWVtb3J5RmxhZ3M7CisKKy8qKgorICogR1NUX01FTU9SWV9JU19XUklUQUJMRToKKyAqIEBtZW06IGEgI0dzdE1lbW9yeQorICoKKyAqIENoZWNrIGlmIEBtZW0gaXMgd3JpdGFibGUuCisgKi8KKyNkZWZpbmUgR1NUX01FTU9SWV9JU19XUklUQUJMRShtZW0pICgoKG1lbSktPnJlZmNvdW50ID09IDEpICYmIFwKKyAgICAoKChtZW0pLT5wYXJlbnQgPT0gTlVMTCkgfHwgKChtZW0pLT5wYXJlbnQtPnJlZmNvdW50ID09IDEpKSAmJiBcCisgICAgKCgobWVtKS0+ZmxhZ3MgJiBHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFkpID09IDApKQorCisvKioKKyAqIEdzdE1lbW9yeToKKyAqIEBhbGxvY2F0b3I6IHBvaW50ZXIgdG8gdGhlICNHc3RBbGxvY2F0b3IKKyAqIEBmbGFnczogbWVtb3J5IGZsYWdzCisgKiBAcmVmY291bnQ6IHJlZmNvdW50CisgKiBAcGFyZW50OiBwYXJlbnQgbWVtb3J5IGJsb2NrCisgKgorICogQmFzZSBzdHJ1Y3R1cmUgZm9yIG1lbW9yeSBpbXBsZW1lbnRhdGlvbnMuIEN1c3RvbSBtZW1vcnkgd2lsbCBwdXQgdGhpcyBzdHJ1Y3R1cmUKKyAqIGFzIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhlaXIgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgX0dzdE1lbW9yeSB7CisgIGNvbnN0IEdzdEFsbG9jYXRvciAqYWxsb2NhdG9yOworCisgIEdzdE1lbW9yeUZsYWdzICBmbGFnczsKKyAgZ2ludCAgICAgICAgICAgIHJlZmNvdW50OworICBHc3RNZW1vcnkgICAgICAqcGFyZW50OworfTsKKworLyoqCisgKiBHc3RNYXBGbGFnczoKKyAqIEBHU1RfTUFQX1JFQUQ6IG1hcCBmb3IgcmVhZCBhY2Nlc3MKKyAqIEBHU1RfTUFQX1dSSVRFOiBtYXAgZm9yIHdyaXRlIGFjY2VzcworICoKKyAqIEZsYWdzIHVzZWQgd2hlbiBtYXBwaW5nIG1lbW9yeQorICovCit0eXBlZGVmIGVudW0geworICBHU1RfTUFQX1JFQUQgPSAgKDEgPDwgMCksCisgIEdTVF9NQVBfV1JJVEUgPSAoMSA8PCAxKSwKK30gR3N0TWFwRmxhZ3M7CisKKy8qKgorICogR1NUX01BUF9SRUFEV1JJVEU6CisgKgorICogTWFwIGZvciByZWFkd3JpdGUgYWNjZXNzCisgKi8KKyNkZWZpbmUgR1NUX01BUF9SRUFEV1JJVEUgICAgICAoR1NUX01BUF9SRUFEIHwgR1NUX01BUF9XUklURSkKKworLyoqCisgKiBHU1RfQUxMT0NBVE9SX1NZU01FTToKKyAqCisgKiBUaGUgYWxsb2NhdG9yIG5hbWUgZm9yIHRoZSBkZWZhdWx0IHN5c3RlbSBtZW1vcnkgYWxsb2NhdG9yCisgKi8KKyNkZWZpbmUgR1NUX0FMTE9DQVRPUl9TWVNNRU0gICAiU3lzdGVtTWVtb3J5IgorCisvKioKKyAqIEdzdE1lbW9yeUFsbG9jRnVuY3Rpb246CisgKiBAYWxsb2NhdG9yOiBhICNHc3RBbGxvY2F0b3IKKyAqIEBtYXhzaXplOiB0aGUgbWF4c2l6ZQorICogQGFsaWduOiB0aGUgYWxpZ25tZW50CisgKiBAdXNlcl9kYXRhOiB1c2VyIGRhdGEKKyAqCisgKiBBbGxvY2F0ZSBhIG5ldyAjR3N0TWVtb3J5IGZyb20gQGFsbG9jYXRvciB0aGF0IGNhbiBob2xkIGF0IGxlYXN0IEBtYXhzaXplIGJ5dGVzCisgKiBhbmQgaXMgYWxpZ25lZCB0byAoQGFsaWduICsgMSkgYnl0ZXMuCisgKgorICogQHVzZXJfZGF0YSBpcyB0aGUgZGF0YSB0aGF0IHdhcyB1c2VkIHdoZW4gcmVnaXN0ZXJpbmcgQGFsbG9jYXRvci4KKyAqCisgKiBSZXR1cm5zOiBhIG5ld2x5IGFsbG9jYXRlZCAjR3N0TWVtb3J5LiBGcmVlIHdpdGggZ3N0X21lbW9yeV91bnJlZigpCisgKi8KK3R5cGVkZWYgR3N0TWVtb3J5ICogICgqR3N0TWVtb3J5QWxsb2NGdW5jdGlvbikgIChjb25zdCBHc3RBbGxvY2F0b3IgKmFsbG9jYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSBtYXhzaXplLCBnc2l6ZSBhbGlnbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEpOworCisvKioKKyAqIEdzdE1lbW9yeUdldFNpemVzRnVuY3Rpb246CisgKiBAbWVtOiBhICNHc3RNZW1vcnkKKyAqIEBvZmZzZXQ6IHJlc3VsdCBwb2ludGVyIGZvciBvZmZzZXQKKyAqIEBtYXhzaXplOiByZXN1bHQgcG9pbnRlciBmb3IgbWF4c2l6ZQorICoKKyAqIFJldHJpZXZlIHRoZSBzaXplLCBvZmZzZXQgYW5kIG1heHNpemUgb2YgQG1lbS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgc2l6ZSBvZiBAbWVtLCB0aGUgb2Zmc2V0IGFuZCB0aGUgbWF4aW11bSBhbGxvY2F0ZWQgc2l6ZSBpbiBAbWF4c2l6ZS4KKyAqLwordHlwZWRlZiBnc2l6ZSAgICAgICAoKkdzdE1lbW9yeUdldFNpemVzRnVuY3Rpb24pICAoR3N0TWVtb3J5ICptZW0sIGdzaXplICpvZmZzZXQsIGdzaXplICptYXhzaXplKTsKKworLyoqCisgKiBHc3RNZW1vcnlSZXNpemVGdW5jdGlvbjoKKyAqIEBtZW06IGEgI0dzdE1lbW9yeQorICogQG9mZnNldDogdGhlIG9mZnNldCBhZGp1c3RlbWVudAorICogQHNpemU6IHRoZSBuZXcgc2l6ZQorICoKKyAqIEFkanVzdCB0aGUgc2l6ZSBhbmQgb2Zmc2V0IG9mIEBtZW0uIEBvZmZzZXQgYnl0ZXMgd2lsbCBiZSBhZGp1c3RlZCBmcm9tIHRoZQorICogY3VycmVudCBmaXJzdCBieXRlIGluIEBtZW0gYXMgcmV0cmlldmVkIHdpdGggZ3N0X21lbW9yeV9tYXAoKSBhbmQgdGhlIG5ldworICogc2l6ZSB3aWxsIGJlIHNldCB0byBAc2l6ZS4KKyAqCisgKiBAc2l6ZSBjYW4gYmUgc2V0IHRvIC0xLCB3aGljaCB3aWxsIG9ubHkgYWRqdXN0IHRoZSBvZmZzZXQuCisgKi8KK3R5cGVkZWYgdm9pZCAgICAgICAgKCpHc3RNZW1vcnlSZXNpemVGdW5jdGlvbikgICAgKEdzdE1lbW9yeSAqbWVtLCBnc3NpemUgb2Zmc2V0LCBnc2l6ZSBzaXplKTsKKworLyoqCisgKiBHc3RNZW1vcnlNYXBGdW5jdGlvbjoKKyAqIEBtZW06IGEgI0dzdE1lbW9yeQorICogQHNpemU6IHBvaW50ZXIgZm9yIHRoZSBzaXplCisgKiBAbWF4c2l6ZTogcG9pbnRlciBmb3IgdGhlIG1heHNpemUKKyAqIEBmbGFnczogYWNjZXNzIG1vZGUgZm9yIHRoZSBtZW1vcnkKKyAqCisgKiBHZXQgdGhlIG1lbW9yeSBvZiBAbWVtIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGFjY29yZGluZyB0byB0aGUgbW9kZSBzcGVjaWZpZWQKKyAqIGluIEBmbGFncy4gQHNpemUgYW5kIEBtYXhzaXplIHdpbGwgcmVzcGVjdGl2ZWx5IGNvbnRhaW4gdGhlIGN1cnJlbnQgYW1vdW50IG9mCisgKiB2YWxpZCBieXRlcyBpbiB0aGUgcmV0dXJuZWQgbWVtb3J5IGFuZCB0aGUgbWF4aW11bSBhbGxvY2F0ZWQgbWVtb3J5LgorICogQHNpemUgYW5kIEBtYXhzaXplIGNhbiBvcHRpb25hbGx5IGJlIHNldCB0byBOVUxMLgorICoKKyAqIFJldHVybnM6IGEgcG9pbnRlciB0byBtZW1vcnkuIEBzaXplIGJ5dGVzIGFyZSBjdXJyZW50bHkgdXNlZCBmcm9tIHRoZQorICogcmV0dXJuZWQgcG9pbnRlciBhbmQgQG1heHNpemUgYnl0ZXMgY2FuIHBvdGVudGlhbGx5IGJlIHVzZWQuCisgKi8KK3R5cGVkZWYgZ3BvaW50ZXIgICAgKCpHc3RNZW1vcnlNYXBGdW5jdGlvbikgICAgICAgKEdzdE1lbW9yeSAqbWVtLCBnc2l6ZSAqc2l6ZSwgZ3NpemUgKm1heHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RNYXBGbGFncyBmbGFncyk7CisKKy8qKgorICogR3N0TWVtb3J5VW5tYXBGdW5jdGlvbjoKKyAqIEBtZW06IGEgI0dzdE1lbW9yeQorICogQGRhdGE6IHRoZSBkYXRhIHBvaW50ZXIKKyAqIEBzaXplOiB0aGUgbmV3IHNpemUKKyAqCisgKiBSZXR1cm4gdGhlIHBvaW50ZXIgcHJldmlvdXNseSByZXRyaWV2ZWQgd2l0aCBnc3RfbWVtb3J5X21hcCgpIGFuZCBhZGp1c3QgdGhlCisgKiBzaXplIG9mIHRoZSBtZW1vcnkgd2l0aCBAc2l6ZS4gQHNpemUgY2FuIG9wdGlvbmFsbHkgYmUgc2V0IHRvIC0xIHRvIG5vdAorICogbW9kaWZ5IHRoZSBzaXplLgorICoKKyAqIFJldHVybnM6ICVUUlVFIG9uIHN1Y2Nlc3MuCisgKi8KK3R5cGVkZWYgZ2Jvb2xlYW4gICAgKCpHc3RNZW1vcnlVbm1hcEZ1bmN0aW9uKSAgICAgKEdzdE1lbW9yeSAqbWVtLCBncG9pbnRlciBkYXRhLCBnc2l6ZSBzaXplKTsKKworLyoqCisgKiBHc3RNZW1vcnlGcmVlRnVuY3Rpb246CisgKiBAbWVtOiBhICNHc3RNZW1vcnkKKyAqCisgKiBGcmVlIHRoZSBtZW1vcnkgdXNlZCBieSBAbWVtLiBUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkIHdoZW4gdGhlCisgKiByZWZjb3VudCBvZiB0aGUgQG1lbSBoYXMgcmVhY2hlZCAwLgorICovCit0eXBlZGVmIHZvaWQgICAgICAgICgqR3N0TWVtb3J5RnJlZUZ1bmN0aW9uKSAgICAgIChHc3RNZW1vcnkgKm1lbSk7CisKKy8qKgorICogR3N0TWVtb3J5Q29weUZ1bmN0aW9uOgorICogQG1lbTogYSAjR3N0TWVtb3J5CisgKiBAb2Zmc2V0OiBhbiBvZmZzZXQKKyAqIEBzaXplOiBhIHNpemUKKyAqCisgKiBDb3B5IEBzaXplIGJ5dGVzIGZyb20gQG1lbSBzdGFydGluZyBhdCBAb2Zmc2V0IGFuZCByZXR1cm4gdGhlbSB3cmFwcGVkIGluIGEKKyAqIG5ldyBHc3RNZW1vcnkgb2JqZWN0LgorICogSWYgQHNpemUgaXMgc2V0IHRvIC0xLCBhbGwgYnl0ZXMgc3RhcnRpbmcgYXQgQG9mZnNldCBhcmUgY29waWVkLgorICoKKyAqIFJldHVybnM6IGEgbmV3ICNHc3RNZW1vcnkgb2JqZWN0IHdyYXBwaW5nIGEgY29weSBvZiB0aGUgcmVxdWVzdGVkIHJlZ2lvbiBpbgorICogQG1lbS4KKyAqLwordHlwZWRlZiBHc3RNZW1vcnkgKiAoKkdzdE1lbW9yeUNvcHlGdW5jdGlvbikgICAgICAoR3N0TWVtb3J5ICptZW0sIGdzc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUpOworCisvKioKKyAqIEdzdE1lbW9yeVNoYXJlRnVuY3Rpb246CisgKiBAbWVtOiBhICNHc3RNZW1vcnkKKyAqIEBvZmZzZXQ6IGFuIG9mZnNldAorICogQHNpemU6IGEgc2l6ZQorICoKKyAqIFNoYXJlIEBzaXplIGJ5dGVzIGZyb20gQG1lbSBzdGFydGluZyBhdCBAb2Zmc2V0IGFuZCByZXR1cm4gdGhlbSB3cmFwcGVkIGluIGEKKyAqIG5ldyBHc3RNZW1vcnkgb2JqZWN0LiBJZiBAc2l6ZSBpcyBzZXQgdG8gLTEsIGFsbCBieXRlcyBzdGFydGluZyBhdCBAb2Zmc2V0IGFyZQorICogc2hhcmVkLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IG1ha2UgYSBjb3B5IG9mIHRoZSBieXRlcyBpbiBAbWVtLgorICoKKyAqIFJldHVybnM6IGEgbmV3ICNHc3RNZW1vcnkgb2JqZWN0IHNoYXJpbmcgdGhlIHJlcXVlc3RlZCByZWdpb24gaW4gQG1lbS4KKyAqLwordHlwZWRlZiBHc3RNZW1vcnkgKiAoKkdzdE1lbW9yeVNoYXJlRnVuY3Rpb24pICAgICAoR3N0TWVtb3J5ICptZW0sIGdzc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUpOworCisvKioKKyAqIEdzdE1lbW9yeUlzU3BhbkZ1bmN0aW9uOgorICogQG1lbTE6IGEgI0dzdE1lbW9yeQorICogQG1lbTI6IGEgI0dzdE1lbW9yeQorICogQG9mZnNldDogYSByZXN1bHQgb2Zmc2V0CisgKgorICogQ2hlY2sgaWYgQG1lbTEgYW5kIEBtZW0yIG9jY3VweSBjb250aWd1b3VzIG1lbW9yeSBhbmQgcmV0dXJuIHRoZSBvZmZzZXQgb2YKKyAqIEBtZW0xIGluIHRoZSBwYXJlbnQgYnVmZmVyIGluIEBvZmZzZXQuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgQG1lbTEgYW5kIEBtZW0yIGFyZSBpbiBjb250aWd1b3VzIG1lbW9yeS4KKyAqLwordHlwZWRlZiBnYm9vbGVhbiAgICAoKkdzdE1lbW9yeUlzU3BhbkZ1bmN0aW9uKSAgICAoR3N0TWVtb3J5ICptZW0xLCBHc3RNZW1vcnkgKm1lbTIsIGdzaXplICpvZmZzZXQpOworCisvKioKKyAqIEdzdE1lbW9yeUluZm86CisgKiBAYWxsb2M6IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgR3N0TWVtb3J5QWxsb2NGdW5jdGlvbgorICogQGdldF9zaXplczogdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBHc3RNZW1vcnlHZXRTaXplc0Z1bmN0aW9uCisgKiBAcmVzaXplOiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEdzdE1lbW9yeVJlc2l6ZUZ1bmN0aW9uCisgKiBAbWFwOiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEdzdE1lbW9yeU1hcEZ1bmN0aW9uCisgKiBAdW5tYXA6IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgR3N0TWVtb3J5VW5tYXBGdW5jdGlvbgorICogQGZyZWU6IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgR3N0TWVtb3J5RnJlZUZ1bmN0aW9uCisgKiBAY29weTogdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBHc3RNZW1vcnlDb3B5RnVuY3Rpb24KKyAqIEBzaGFyZTogdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBHc3RNZW1vcnlTaGFyZUZ1bmN0aW9uCisgKiBAaXNfc3BhbjogdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBHc3RNZW1vcnlJc1NwYW5GdW5jdGlvbgorICogQHVzZXJfZGF0YTogZ2VuZXJpYyB1c2VyIGRhdGEgZm9yIHRoZSBhbGxvY2F0b3IKKyAqCisgKiBUaGUgI0dzdE1lbW9yeUluZm8gaXMgdXNlZCB0byByZWdpc3RlciBuZXcgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGNvbnRhaW4KKyAqIHRoZSBpbXBsZW1lbnRhdGlvbnMgZm9yIHZhcmlvdXMgbWVtb3J5IG9wZXJhdGlvbnMuCisgKi8KK3N0cnVjdCBfR3N0TWVtb3J5SW5mbyB7CisgIEdzdE1lbW9yeUFsbG9jRnVuY3Rpb24gICAgYWxsb2M7CisgIEdzdE1lbW9yeUdldFNpemVzRnVuY3Rpb24gZ2V0X3NpemVzOworICBHc3RNZW1vcnlSZXNpemVGdW5jdGlvbiAgIHJlc2l6ZTsKKyAgR3N0TWVtb3J5TWFwRnVuY3Rpb24gICAgICBtYXA7CisgIEdzdE1lbW9yeVVubWFwRnVuY3Rpb24gICAgdW5tYXA7CisgIEdzdE1lbW9yeUZyZWVGdW5jdGlvbiAgICAgZnJlZTsKKworICBHc3RNZW1vcnlDb3B5RnVuY3Rpb24gICAgIGNvcHk7CisgIEdzdE1lbW9yeVNoYXJlRnVuY3Rpb24gICAgc2hhcmU7CisgIEdzdE1lbW9yeUlzU3BhbkZ1bmN0aW9uICAgaXNfc3BhbjsKKworICBncG9pbnRlciB1c2VyX2RhdGE7Cit9OworCisvKiBhbGxvY2F0b3JzICovCitjb25zdCBHc3RBbGxvY2F0b3IgKiAgZ3N0X2FsbG9jYXRvcl9yZWdpc3RlciAgICAoY29uc3QgZ2NoYXIgKm5hbWUsIGNvbnN0IEdzdE1lbW9yeUluZm8gKmluZm8pOworY29uc3QgR3N0QWxsb2NhdG9yICogIGdzdF9hbGxvY2F0b3JfZmluZCAgICAgICAgKGNvbnN0IGdjaGFyICpuYW1lKTsKKwordm9pZCAgICAgICAgICAgICAgICAgIGdzdF9hbGxvY2F0b3Jfc2V0X2RlZmF1bHQgKGNvbnN0IEdzdEFsbG9jYXRvciAqIGFsbG9jYXRvcik7CisKKy8qIGFsbG9jYXRpbmcgbWVtb3J5IGJsb2NrcyAqLworR3N0TWVtb3J5ICogZ3N0X2FsbG9jYXRvcl9hbGxvYyAgICAgICAgKGNvbnN0IEdzdEFsbG9jYXRvciAqIGFsbG9jYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSBtYXhzaXplLCBnc2l6ZSBhbGlnbik7CisKK0dzdE1lbW9yeSAqIGdzdF9tZW1vcnlfbmV3X3dyYXBwZWQgICAgIChHc3RNZW1vcnlGbGFncyBmbGFncywgZ3BvaW50ZXIgZGF0YSwgR0ZyZWVGdW5jIGZyZWVfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSBtYXhzaXplLCBnc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUpOworCisvKiByZWZjb3VudGluZyAqLworR3N0TWVtb3J5ICogZ3N0X21lbW9yeV9yZWYgICAgICAgIChHc3RNZW1vcnkgKm1lbSk7Cit2b2lkICAgICAgICBnc3RfbWVtb3J5X3VucmVmICAgICAgKEdzdE1lbW9yeSAqbWVtKTsKKworLyogZ2V0dGluZy9zZXR0aW5nIG1lbW9yeSBwcm9wZXJ0aWVzICovCitnc2l6ZSAgICAgICBnc3RfbWVtb3J5X2dldF9zaXplcyAgKEdzdE1lbW9yeSAqbWVtLCBnc2l6ZSAqb2Zmc2V0LCBnc2l6ZSAqbWF4c2l6ZSk7Cit2b2lkICAgICAgICBnc3RfbWVtb3J5X3Jlc2l6ZSAgICAgKEdzdE1lbW9yeSAqbWVtLCBnc3NpemUgb2Zmc2V0LCBnc2l6ZSBzaXplKTsKKworLyogcmV0cmlldmluZyBkYXRhICovCitncG9pbnRlciAgICBnc3RfbWVtb3J5X21hcCAgICAgICAgKEdzdE1lbW9yeSAqbWVtLCBnc2l6ZSAqc2l6ZSwgZ3NpemUgKm1heHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdE1hcEZsYWdzIGZsYWdzKTsKK2dib29sZWFuICAgIGdzdF9tZW1vcnlfdW5tYXAgICAgICAoR3N0TWVtb3J5ICptZW0sIGdwb2ludGVyIGRhdGEsIGdzaXplIHNpemUpOworCisvKiBjb3B5IGFuZCBzdWJyZWdpb25zICovCitHc3RNZW1vcnkgKiBnc3RfbWVtb3J5X2NvcHkgICAgICAgKEdzdE1lbW9yeSAqbWVtLCBnc3NpemUgb2Zmc2V0LCBnc2l6ZSBzaXplKTsKK0dzdE1lbW9yeSAqIGdzdF9tZW1vcnlfc2hhcmUgICAgICAoR3N0TWVtb3J5ICptZW0sIGdzc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUpOworCisvKiBzcGFuIG1lbW9yeSAqLworZ2Jvb2xlYW4gICAgZ3N0X21lbW9yeV9pc19zcGFuICAgIChHc3RNZW1vcnkgKm1lbTEsIEdzdE1lbW9yeSAqbWVtMiwgZ3NpemUgKm9mZnNldCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9NRU1PUllfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0bWVzc2FnZS5jIGIvZ3N0L2dzdG1lc3NhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWU3Y2NjCi0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdG1lc3NhZ2UuYwpAQCAtMCwwICsxLDIxNTggQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA0IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+CisgKgorICogZ3N0bWVzc2FnZS5jOiBHc3RNZXNzYWdlIHN1YnN5c3RlbQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qKgorICogU0VDVElPTjpnc3RtZXNzYWdlCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IExpZ2h0d2VpZ2h0IG9iamVjdHMgdG8gc2lnbmFsIHRoZSBhcHBsaWNhdGlvbiBvZgorICogICAgICAgICAgICAgICAgICAgICBwaXBlbGluZSBldmVudHMKKyAqIEBzZWVfYWxzbzogI0dzdEJ1cywgI0dzdE1pbmlPYmplY3QsICNHc3RFbGVtZW50CisgKgorICogTWVzc2FnZXMgYXJlIGltcGxlbWVudGVkIGFzIGEgc3ViY2xhc3Mgb2YgI0dzdE1pbmlPYmplY3Qgd2l0aCBhIGdlbmVyaWMKKyAqICNHc3RTdHJ1Y3R1cmUgYXMgdGhlIGNvbnRlbnQuIFRoaXMgYWxsb3dzIGZvciB3cml0aW5nIGN1c3RvbSBtZXNzYWdlcyB3aXRob3V0CisgKiByZXF1aXJpbmcgYW4gQVBJIGNoYW5nZSB3aGlsZSBhbGxvd2luZyBhIHdpZGUgcmFuZ2Ugb2YgZGlmZmVyZW50IHR5cGVzCisgKiBvZiBtZXNzYWdlcy4KKyAqCisgKiBNZXNzYWdlcyBhcmUgcG9zdGVkIGJ5IG9iamVjdHMgaW4gdGhlIHBpcGVsaW5lIGFuZCBhcmUgcGFzc2VkIHRvIHRoZQorICogYXBwbGljYXRpb24gdXNpbmcgdGhlICNHc3RCdXMuCisKKyAqIFRoZSBiYXNpYyB1c2UgcGF0dGVybiBvZiBwb3N0aW5nIGEgbWVzc2FnZSBvbiBhICNHc3RCdXMgaXMgYXMgZm9sbG93czoKKyAqCisgKiA8ZXhhbXBsZT4KKyAqIDx0aXRsZT5Qb3N0aW5nIGEgI0dzdE1lc3NhZ2U8L3RpdGxlPgorICogICA8cHJvZ3JhbWxpc3Rpbmc+CisgKiAgICBnc3RfYnVzX3Bvc3QgKGJ1cywgZ3N0X21lc3NhZ2VfbmV3X2VvcygpKTsKKyAqICAgPC9wcm9ncmFtbGlzdGluZz4KKyAqIDwvZXhhbXBsZT4KKyAqCisgKiBBICNHc3RFbGVtZW50IHVzdWFsbHkgcG9zdHMgbWVzc2FnZXMgb24gdGhlIGJ1cyBwcm92aWRlZCBieSB0aGUgcGFyZW50CisgKiBjb250YWluZXIgdXNpbmcgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKCkuCisgKgorICogTGFzdCByZXZpZXdlZCBvbiAyMDA1LTExLTA5ICgwLjkuNCkKKyAqLworCisKKyNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPHN0cmluZy5oPiAgICAgICAgICAgICAvKiBtZW1jcHkgKi8KKyNpbmNsdWRlICJnc3RlcnJvci5oIgorI2luY2x1ZGUgImdzdGVudW10eXBlcy5oIgorI2luY2x1ZGUgImdzdGluZm8uaCIKKyNpbmNsdWRlICJnc3RtZXNzYWdlLmgiCisjaW5jbHVkZSAiZ3N0dGFnbGlzdC5oIgorI2luY2x1ZGUgImdzdHV0aWxzLmgiCisjaW5jbHVkZSAiZ3N0cXVhcmsuaCIKKworCit0eXBlZGVmIHN0cnVjdAoreworICBHc3RNZXNzYWdlIG1lc3NhZ2U7CisKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Cit9IEdzdE1lc3NhZ2VJbXBsOworCisjZGVmaW5lIEdTVF9NRVNTQUdFX1NUUlVDVFVSRShtKSAoKChHc3RNZXNzYWdlSW1wbCAqKShtKSktPnN0cnVjdHVyZSkKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgY29uc3QgZ2ludCB0eXBlOworICBjb25zdCBnY2hhciAqbmFtZTsKKyAgR1F1YXJrIHF1YXJrOworfSBHc3RNZXNzYWdlUXVhcmtzOworCitzdGF0aWMgR3N0TWVzc2FnZVF1YXJrcyBtZXNzYWdlX3F1YXJrc1tdID0geworICB7R1NUX01FU1NBR0VfVU5LTk9XTiwgInVua25vd24iLCAwfSwKKyAge0dTVF9NRVNTQUdFX0VPUywgImVvcyIsIDB9LAorICB7R1NUX01FU1NBR0VfRVJST1IsICJlcnJvciIsIDB9LAorICB7R1NUX01FU1NBR0VfV0FSTklORywgIndhcm5pbmciLCAwfSwKKyAge0dTVF9NRVNTQUdFX0lORk8sICJpbmZvIiwgMH0sCisgIHtHU1RfTUVTU0FHRV9UQUcsICJ0YWciLCAwfSwKKyAge0dTVF9NRVNTQUdFX0JVRkZFUklORywgImJ1ZmZlcmluZyIsIDB9LAorICB7R1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCwgInN0YXRlLWNoYW5nZWQiLCAwfSwKKyAge0dTVF9NRVNTQUdFX1NUQVRFX0RJUlRZLCAic3RhdGUtZGlydHkiLCAwfSwKKyAge0dTVF9NRVNTQUdFX1NURVBfRE9ORSwgInN0ZXAtZG9uZSIsIDB9LAorICB7R1NUX01FU1NBR0VfQ0xPQ0tfUFJPVklERSwgImNsb2NrLXByb3ZpZGUiLCAwfSwKKyAge0dTVF9NRVNTQUdFX0NMT0NLX0xPU1QsICJjbG9jay1sb3N0IiwgMH0sCisgIHtHU1RfTUVTU0FHRV9ORVdfQ0xPQ0ssICJuZXctY2xvY2siLCAwfSwKKyAge0dTVF9NRVNTQUdFX1NUUlVDVFVSRV9DSEFOR0UsICJzdHJ1Y3R1cmUtY2hhbmdlIiwgMH0sCisgIHtHU1RfTUVTU0FHRV9TVFJFQU1fU1RBVFVTLCAic3RyZWFtLXN0YXR1cyIsIDB9LAorICB7R1NUX01FU1NBR0VfQVBQTElDQVRJT04sICJhcHBsaWNhdGlvbiIsIDB9LAorICB7R1NUX01FU1NBR0VfRUxFTUVOVCwgImVsZW1lbnQiLCAwfSwKKyAge0dTVF9NRVNTQUdFX1NFR01FTlRfU1RBUlQsICJzZWdtZW50LXN0YXJ0IiwgMH0sCisgIHtHU1RfTUVTU0FHRV9TRUdNRU5UX0RPTkUsICJzZWdtZW50LWRvbmUiLCAwfSwKKyAge0dTVF9NRVNTQUdFX0RVUkFUSU9OLCAiZHVyYXRpb24iLCAwfSwKKyAge0dTVF9NRVNTQUdFX0xBVEVOQ1ksICJsYXRlbmN5IiwgMH0sCisgIHtHU1RfTUVTU0FHRV9BU1lOQ19TVEFSVCwgImFzeW5jLXN0YXJ0IiwgMH0sCisgIHtHU1RfTUVTU0FHRV9BU1lOQ19ET05FLCAiYXN5bmMtZG9uZSIsIDB9LAorICB7R1NUX01FU1NBR0VfUkVRVUVTVF9TVEFURSwgInJlcXVlc3Qtc3RhdGUiLCAwfSwKKyAge0dTVF9NRVNTQUdFX1NURVBfU1RBUlQsICJzdGVwLXN0YXJ0IiwgMH0sCisgIHtHU1RfTUVTU0FHRV9RT1MsICJxb3MiLCAwfSwKKyAge0dTVF9NRVNTQUdFX1BST0dSRVNTLCAicHJvZ3Jlc3MiLCAwfSwKKyAgezAsIE5VTEwsIDB9Cit9OworCitzdGF0aWMgR1R5cGUgX2dzdF9tZXNzYWdlX3R5cGUgPSAwOworR1NUX0RFRklORV9NSU5JX09CSkVDVF9UWVBFIChHc3RNZXNzYWdlLCBnc3RfbWVzc2FnZSk7CisKK3ZvaWQKK19wcml2X2dzdF9tZXNzYWdlX2luaXRpYWxpemUgKHZvaWQpCit7CisgIGdpbnQgaTsKKworICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfR1NUX0lOSVQsICJpbml0IG1lc3NhZ2VzIik7CisKKyAgLyogdGhlIEdzdE1pbmlPYmplY3QgdHlwZXMgbmVlZCB0byBiZSBjbGFzc19yZWYnZCBvbmNlIGJlZm9yZSBpdCBjYW4gYmUKKyAgICogZG9uZSBmcm9tIG11bHRpcGxlIHRocmVhZHM7CisgICAqIHNlZSBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDQ1NTEgKi8KKyAgZ3N0X21lc3NhZ2VfZ2V0X3R5cGUgKCk7CisKKyAgZm9yIChpID0gMDsgbWVzc2FnZV9xdWFya3NbaV0ubmFtZTsgaSsrKSB7CisgICAgbWVzc2FnZV9xdWFya3NbaV0ucXVhcmsgPQorICAgICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAobWVzc2FnZV9xdWFya3NbaV0ubmFtZSk7CisgIH0KKworICBfZ3N0X21lc3NhZ2VfdHlwZSA9IGdzdF9tZXNzYWdlX2dldF90eXBlICgpOworfQorCisvKioKKyAqIGdzdF9tZXNzYWdlX3R5cGVfZ2V0X25hbWU6CisgKiBAdHlwZTogdGhlIG1lc3NhZ2UgdHlwZQorICoKKyAqIEdldCBhIHByaW50YWJsZSBuYW1lIGZvciB0aGUgZ2l2ZW4gbWVzc2FnZSB0eXBlLiBEbyBub3QgbW9kaWZ5IG9yIGZyZWUuCisgKgorICogUmV0dXJuczogYSByZWZlcmVuY2UgdG8gdGhlIHN0YXRpYyBuYW1lIG9mIHRoZSBtZXNzYWdlLgorICovCitjb25zdCBnY2hhciAqCitnc3RfbWVzc2FnZV90eXBlX2dldF9uYW1lIChHc3RNZXNzYWdlVHlwZSB0eXBlKQoreworICBnaW50IGk7CisKKyAgZm9yIChpID0gMDsgbWVzc2FnZV9xdWFya3NbaV0ubmFtZTsgaSsrKSB7CisgICAgaWYgKHR5cGUgPT0gbWVzc2FnZV9xdWFya3NbaV0udHlwZSkKKyAgICAgIHJldHVybiBtZXNzYWdlX3F1YXJrc1tpXS5uYW1lOworICB9CisgIHJldHVybiAidW5rbm93biI7Cit9CisKKy8qKgorICogZ3N0X21lc3NhZ2VfdHlwZV90b19xdWFyazoKKyAqIEB0eXBlOiB0aGUgbWVzc2FnZSB0eXBlCisgKgorICogR2V0IHRoZSB1bmlxdWUgcXVhcmsgZm9yIHRoZSBnaXZlbiBtZXNzYWdlIHR5cGUuCisgKgorICogUmV0dXJuczogdGhlIHF1YXJrIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVzc2FnZSB0eXBlCisgKi8KK0dRdWFyaworZ3N0X21lc3NhZ2VfdHlwZV90b19xdWFyayAoR3N0TWVzc2FnZVR5cGUgdHlwZSkKK3sKKyAgZ2ludCBpOworCisgIGZvciAoaSA9IDA7IG1lc3NhZ2VfcXVhcmtzW2ldLm5hbWU7IGkrKykgeworICAgIGlmICh0eXBlID09IG1lc3NhZ2VfcXVhcmtzW2ldLnR5cGUpCisgICAgICByZXR1cm4gbWVzc2FnZV9xdWFya3NbaV0ucXVhcms7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitfZ3N0X21lc3NhZ2VfZnJlZSAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UpCit7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKG1lc3NhZ2UgIT0gTlVMTCk7CisKKyAgR1NUX0NBVF9MT0cgKEdTVF9DQVRfTUVTU0FHRSwgImZpbmFsaXplIG1lc3NhZ2UgJXAiLCBtZXNzYWdlKTsKKworICBpZiAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSkgeworICAgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkpOworICAgIEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkgPSBOVUxMOworICB9CisKKyAgaWYgKG1lc3NhZ2UtPmxvY2spIHsKKyAgICBHU1RfTUVTU0FHRV9MT0NLIChtZXNzYWdlKTsKKyAgICBHU1RfTUVTU0FHRV9TSUdOQUwgKG1lc3NhZ2UpOworICAgIEdTVF9NRVNTQUdFX1VOTE9DSyAobWVzc2FnZSk7CisgIH0KKworICBzdHJ1Y3R1cmUgPSBHU1RfTUVTU0FHRV9TVFJVQ1RVUkUgKG1lc3NhZ2UpOworICBpZiAoc3RydWN0dXJlKSB7CisgICAgZ3N0X3N0cnVjdHVyZV9zZXRfcGFyZW50X3JlZmNvdW50IChzdHJ1Y3R1cmUsIE5VTEwpOworICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoc3RydWN0dXJlKTsKKyAgfQorCisgIGdfc2xpY2VfZnJlZTEgKEdTVF9NSU5JX09CSkVDVF9TSVpFIChtZXNzYWdlKSwgbWVzc2FnZSk7Cit9CisKK3N0YXRpYyBHc3RNZXNzYWdlICoKK19nc3RfbWVzc2FnZV9jb3B5IChHc3RNZXNzYWdlICogbWVzc2FnZSkKK3sKKyAgR3N0TWVzc2FnZUltcGwgKmNvcHk7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIEdTVF9DQVRfTE9HIChHU1RfQ0FUX01FU1NBR0UsICJjb3B5IG1lc3NhZ2UgJXAiLCBtZXNzYWdlKTsKKworICBjb3B5ID0gZ19zbGljZV9uZXcwIChHc3RNZXNzYWdlSW1wbCk7CisKKyAgZ3N0X21pbmlfb2JqZWN0X2luaXQgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChjb3B5KSwKKyAgICAgIF9nc3RfbWVzc2FnZV90eXBlLCBzaXplb2YgKEdzdE1lc3NhZ2VJbXBsKSk7CisKKyAgY29weS0+bWVzc2FnZS5taW5pX29iamVjdC5jb3B5ID0KKyAgICAgIChHc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uKSBfZ3N0X21lc3NhZ2VfY29weTsKKyAgY29weS0+bWVzc2FnZS5taW5pX29iamVjdC5mcmVlID0KKyAgICAgIChHc3RNaW5pT2JqZWN0RnJlZUZ1bmN0aW9uKSBfZ3N0X21lc3NhZ2VfZnJlZTsKKworICBHU1RfTUVTU0FHRV9UWVBFIChjb3B5KSA9IEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpOworICBHU1RfTUVTU0FHRV9USU1FU1RBTVAgKGNvcHkpID0gR1NUX01FU1NBR0VfVElNRVNUQU1QIChtZXNzYWdlKTsKKyAgR1NUX01FU1NBR0VfU0VRTlVNIChjb3B5KSA9IEdTVF9NRVNTQUdFX1NFUU5VTSAobWVzc2FnZSk7CisgIGlmIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpKSB7CisgICAgR1NUX01FU1NBR0VfU1JDIChjb3B5KSA9IGdzdF9vYmplY3RfcmVmIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpKTsKKyAgfQorCisgIEdTVF9NRVNTQUdFX0dFVF9MT0NLIChjb3B5KSA9IEdTVF9NRVNTQUdFX0dFVF9MT0NLIChtZXNzYWdlKTsKKyAgR1NUX01FU1NBR0VfQ09ORCAoY29weSkgPSBHU1RfTUVTU0FHRV9DT05EIChtZXNzYWdlKTsKKworICBzdHJ1Y3R1cmUgPSBHU1RfTUVTU0FHRV9TVFJVQ1RVUkUgKG1lc3NhZ2UpOworICBpZiAoc3RydWN0dXJlKSB7CisgICAgY29weS0+c3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9jb3B5IChzdHJ1Y3R1cmUpOworICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X3BhcmVudF9yZWZjb3VudCAoY29weS0+c3RydWN0dXJlLAorICAgICAgICAmY29weS0+bWVzc2FnZS5taW5pX29iamVjdC5yZWZjb3VudCk7CisgIH0KKworICByZXR1cm4gR1NUX01FU1NBR0VfQ0FTVCAoY29weSk7Cit9CisKKy8qKgorICogZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbToKKyAqIEB0eXBlOiBUaGUgI0dzdE1lc3NhZ2VUeXBlIHRvIGRpc3Rpbmd1aXNoIG1lc3NhZ2VzCisgKiBAc3JjOiBUaGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLgorICogQHN0cnVjdHVyZTogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgc3RydWN0dXJlIGZvciB0aGUgbWVzc2FnZS4gVGhlIG1lc3NhZ2UKKyAqICAgICB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZSBzdHJ1Y3R1cmUuCisgKgorICogQ3JlYXRlIGEgbmV3IGN1c3RvbS10eXBlZCBtZXNzYWdlLiBUaGlzIGNhbiBiZSB1c2VkIGZvciBhbnl0aGluZyBub3QKKyAqIGhhbmRsZWQgYnkgb3RoZXIgbWVzc2FnZS1zcGVjaWZpYyBmdW5jdGlvbnMgdG8gcGFzcyBhIG1lc3NhZ2UgdG8gdGhlCisgKiBhcHAuIFRoZSBzdHJ1Y3R1cmUgZmllbGQgY2FuIGJlIE5VTEwuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBUaGUgbmV3IG1lc3NhZ2UuCisgKgorICogTVQgc2FmZS4KKyAqLworR3N0TWVzc2FnZSAqCitnc3RfbWVzc2FnZV9uZXdfY3VzdG9tIChHc3RNZXNzYWdlVHlwZSB0eXBlLCBHc3RPYmplY3QgKiBzcmMsCisgICAgR3N0U3RydWN0dXJlICogc3RydWN0dXJlKQoreworICBHc3RNZXNzYWdlSW1wbCAqbWVzc2FnZTsKKworICBtZXNzYWdlID0gZ19zbGljZV9uZXcwIChHc3RNZXNzYWdlSW1wbCk7CisKKyAgZ3N0X21pbmlfb2JqZWN0X2luaXQgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChtZXNzYWdlKSwKKyAgICAgIF9nc3RfbWVzc2FnZV90eXBlLCBzaXplb2YgKEdzdE1lc3NhZ2VJbXBsKSk7CisKKyAgbWVzc2FnZS0+bWVzc2FnZS5taW5pX29iamVjdC5jb3B5ID0KKyAgICAgIChHc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uKSBfZ3N0X21lc3NhZ2VfY29weTsKKyAgbWVzc2FnZS0+bWVzc2FnZS5taW5pX29iamVjdC5mcmVlID0KKyAgICAgIChHc3RNaW5pT2JqZWN0RnJlZUZ1bmN0aW9uKSBfZ3N0X21lc3NhZ2VfZnJlZTsKKworICBHU1RfQ0FUX0xPRyAoR1NUX0NBVF9NRVNTQUdFLCAic291cmNlICVzOiBjcmVhdGluZyBuZXcgbWVzc2FnZSAlcCAlcyIsCisgICAgICAoc3JjID8gR1NUX09CSkVDVF9OQU1FIChzcmMpIDogIk5VTEwiKSwgbWVzc2FnZSwKKyAgICAgIGdzdF9tZXNzYWdlX3R5cGVfZ2V0X25hbWUgKHR5cGUpKTsKKworICBHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9IHR5cGU7CisgIGlmIChzcmMpCisgICAgZ3N0X29iamVjdF9yZWYgKHNyYyk7CisgIEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkgPSBzcmM7CisgIEdTVF9NRVNTQUdFX1RJTUVTVEFNUCAobWVzc2FnZSkgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICBHU1RfTUVTU0FHRV9TRVFOVU0gKG1lc3NhZ2UpID0gZ3N0X3V0aWxfc2VxbnVtX25leHQgKCk7CisKKyAgaWYgKHN0cnVjdHVyZSkgeworICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X3BhcmVudF9yZWZjb3VudCAoc3RydWN0dXJlLAorICAgICAgICAmbWVzc2FnZS0+bWVzc2FnZS5taW5pX29iamVjdC5yZWZjb3VudCk7CisgIH0KKyAgbWVzc2FnZS0+c3RydWN0dXJlID0gc3RydWN0dXJlOworCisgIHJldHVybiBHU1RfTUVTU0FHRV9DQVNUIChtZXNzYWdlKTsKK30KKworLyoqCisgKiBnc3RfbWVzc2FnZV9nZXRfc2VxbnVtOgorICogQG1lc3NhZ2U6IEEgI0dzdE1lc3NhZ2UuCisgKgorICogUmV0cmlldmUgdGhlIHNlcXVlbmNlIG51bWJlciBvZiBhIG1lc3NhZ2UuCisgKgorICogTWVzc2FnZXMgaGF2ZSBldmVyLWluY3JlbWVudGluZyBzZXF1ZW5jZSBudW1iZXJzLCB3aGljaCBtYXkgYWxzbyBiZSBzZXQKKyAqIGV4cGxpY2l0bHkgdmlhIGdzdF9tZXNzYWdlX3NldF9zZXFudW0oKS4gU2VxdWVuY2UgbnVtYmVycyBhcmUgdHlwaWNhbGx5IHVzZWQKKyAqIHRvIGluZGljYXRlIHRoYXQgYSBtZXNzYWdlIGNvcnJlc3BvbmRzIHRvIHNvbWUgb3RoZXIgc2V0IG9mIG1lc3NhZ2VzIG9yCisgKiBldmVudHMsIGZvciBleGFtcGxlIGEgU0VHTUVOVF9ET05FIG1lc3NhZ2UgY29ycmVzcG9uZGluZyB0byBhIFNFRUsgZXZlbnQuIEl0CisgKiBpcyBjb25zaWRlcmVkIGdvb2QgcHJhY3RpY2UgdG8gbWFrZSB0aGlzIGNvcnJlc3BvbmRlbmNlIHdoZW4gcG9zc2libGUsIHRob3VnaAorICogaXQgaXMgbm90IHJlcXVpcmVkLgorICoKKyAqIE5vdGUgdGhhdCBldmVudHMgYW5kIG1lc3NhZ2VzIHNoYXJlIHRoZSBzYW1lIHNlcXVlbmNlIG51bWJlciBpbmNyZW1lbnRvcjsKKyAqIHR3byBldmVudHMgb3IgbWVzc2FnZXMgd2lsbCBuZXZlciBoYXZlIHRoZSBzYW1lIHNlcXVlbmNlIG51bWJlciB1bmxlc3MKKyAqIHRoYXQgY29ycmVzcG9uZGVuY2Ugd2FzIG1hZGUgZXhwbGljaXRseS4KKyAqCisgKiBSZXR1cm5zOiBUaGUgbWVzc2FnZSdzIHNlcXVlbmNlIG51bWJlci4KKyAqCisgKiBNVCBzYWZlLgorICoKKyAqIFNpbmNlOiAwLjEwLjIyCisgKi8KK2d1aW50MzIKK2dzdF9tZXNzYWdlX2dldF9zZXFudW0gKEdzdE1lc3NhZ2UgKiBtZXNzYWdlKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX01FU1NBR0UgKG1lc3NhZ2UpLCAtMSk7CisKKyAgcmV0dXJuIEdTVF9NRVNTQUdFX1NFUU5VTSAobWVzc2FnZSk7Cit9CisKKy8qKgorICogZ3N0X21lc3NhZ2Vfc2V0X3NlcW51bToKKyAqIEBtZXNzYWdlOiBBICNHc3RNZXNzYWdlLgorICogQHNlcW51bTogQSBzZXF1ZW5jZSBudW1iZXIuCisgKgorICogU2V0IHRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgYSBtZXNzYWdlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWlnaHQgYmUgY2FsbGVkIGJ5IHRoZSBjcmVhdG9yIG9mIGEgbWVzc2FnZSB0byBpbmRpY2F0ZSB0aGF0CisgKiB0aGUgbWVzc2FnZSByZWxhdGVzIHRvIG90aGVyIG1lc3NhZ2VzIG9yIGV2ZW50cy4gU2VlIGdzdF9tZXNzYWdlX2dldF9zZXFudW0oKQorICogZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yMgorICovCit2b2lkCitnc3RfbWVzc2FnZV9zZXRfc2VxbnVtIChHc3RNZXNzYWdlICogbWVzc2FnZSwgZ3VpbnQzMiBzZXFudW0pCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSk7CisKKyAgR1NUX01FU1NBR0VfU0VRTlVNIChtZXNzYWdlKSA9IHNlcW51bTsKK30KKworLyoqCisgKiBnc3RfbWVzc2FnZV9uZXdfZW9zOgorICogQHNyYzogKHRyYW5zZmVyIG5vbmUpOiBUaGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLgorICoKKyAqIENyZWF0ZSBhIG5ldyBlb3MgbWVzc2FnZS4gVGhpcyBtZXNzYWdlIGlzIGdlbmVyYXRlZCBhbmQgcG9zdGVkIGluCisgKiB0aGUgc2luayBlbGVtZW50cyBvZiBhIEdzdEJpbi4gVGhlIGJpbiB3aWxsIG9ubHkgZm9yd2FyZCB0aGUgRU9TCisgKiBtZXNzYWdlIHRvIHRoZSBhcHBsaWNhdGlvbiBpZiBhbGwgc2lua3MgaGF2ZSBwb3N0ZWQgYW4gRU9TIG1lc3NhZ2UuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBUaGUgbmV3IGVvcyBtZXNzYWdlLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK0dzdE1lc3NhZ2UgKgorZ3N0X21lc3NhZ2VfbmV3X2VvcyAoR3N0T2JqZWN0ICogc3JjKQoreworICBHc3RNZXNzYWdlICptZXNzYWdlOworCisgIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfY3VzdG9tIChHU1RfTUVTU0FHRV9FT1MsIHNyYywgTlVMTCk7CisKKyAgcmV0dXJuIG1lc3NhZ2U7Cit9CisKKy8qKgorICogZ3N0X21lc3NhZ2VfbmV3X2Vycm9yOgorICogQHNyYzogKHRyYW5zZmVyIG5vbmUpOiBUaGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLgorICogQGVycm9yOiAodHJhbnNmZXIgbm9uZSk6IFRoZSBHRXJyb3IgZm9yIHRoaXMgbWVzc2FnZS4KKyAqIEBkZWJ1ZzogQSBkZWJ1Z2dpbmcgc3RyaW5nLgorICoKKyAqIENyZWF0ZSBhIG5ldyBlcnJvciBtZXNzYWdlLiBUaGUgbWVzc2FnZSB3aWxsIGNvcHkgQGVycm9yIGFuZAorICogQGRlYnVnLiBUaGlzIG1lc3NhZ2UgaXMgcG9zdGVkIGJ5IGVsZW1lbnQgd2hlbiBhIGZhdGFsIGV2ZW50CisgKiBvY2N1cmVkLiBUaGUgcGlwZWxpbmUgd2lsbCBwcm9iYWJseSAocGFydGlhbGx5KSBzdG9wLiBUaGUgYXBwbGljYXRpb24KKyAqIHJlY2VpdmluZyB0aGlzIG1lc3NhZ2Ugc2hvdWxkIHN0b3AgdGhlIHBpcGVsaW5lLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ldyBlcnJvciBtZXNzYWdlLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK0dzdE1lc3NhZ2UgKgorZ3N0X21lc3NhZ2VfbmV3X2Vycm9yIChHc3RPYmplY3QgKiBzcmMsIEdFcnJvciAqIGVycm9yLCBjb25zdCBnY2hhciAqIGRlYnVnKQoreworICBHc3RNZXNzYWdlICptZXNzYWdlOworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX2lkX25ldyAoR1NUX1FVQVJLIChNRVNTQUdFX0VSUk9SKSwKKyAgICAgIEdTVF9RVUFSSyAoR0VSUk9SKSwgR1NUX1RZUEVfR19FUlJPUiwgZXJyb3IsCisgICAgICBHU1RfUVVBUksgKERFQlVHKSwgR19UWVBFX1NUUklORywgZGVidWcsIE5VTEwpOworICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbSAoR1NUX01FU1NBR0VfRVJST1IsIHNyYywgc3RydWN0dXJlKTsKKworICByZXR1cm4gbWVzc2FnZTsKK30KKworLyoqCisgKiBnc3RfbWVzc2FnZV9uZXdfd2FybmluZzoKKyAqIEBzcmM6ICh0cmFuc2ZlciBub25lKTogVGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4KKyAqIEBlcnJvcjogKHRyYW5zZmVyIG5vbmUpOiBUaGUgR0Vycm9yIGZvciB0aGlzIG1lc3NhZ2UuCisgKiBAZGVidWc6IEEgZGVidWdnaW5nIHN0cmluZy4KKyAqCisgKiBDcmVhdGUgYSBuZXcgd2FybmluZyBtZXNzYWdlLiBUaGUgbWVzc2FnZSB3aWxsIG1ha2UgY29waWVzIG9mIEBlcnJvciBhbmQKKyAqIEBkZWJ1Zy4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IFRoZSBuZXcgd2FybmluZyBtZXNzYWdlLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK0dzdE1lc3NhZ2UgKgorZ3N0X21lc3NhZ2VfbmV3X3dhcm5pbmcgKEdzdE9iamVjdCAqIHNyYywgR0Vycm9yICogZXJyb3IsIGNvbnN0IGdjaGFyICogZGVidWcpCit7CisgIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfbmV3IChHU1RfUVVBUksgKE1FU1NBR0VfV0FSTklORyksCisgICAgICBHU1RfUVVBUksgKEdFUlJPUiksIEdTVF9UWVBFX0dfRVJST1IsIGVycm9yLAorICAgICAgR1NUX1FVQVJLIChERUJVRyksIEdfVFlQRV9TVFJJTkcsIGRlYnVnLCBOVUxMKTsKKyAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19jdXN0b20gKEdTVF9NRVNTQUdFX1dBUk5JTkcsIHNyYywgc3RydWN0dXJlKTsKKworICByZXR1cm4gbWVzc2FnZTsKK30KKworLyoqCisgKiBnc3RfbWVzc2FnZV9uZXdfaW5mbzoKKyAqIEBzcmM6ICh0cmFuc2ZlciBub25lKTogVGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4KKyAqIEBlcnJvcjogKHRyYW5zZmVyIG5vbmUpOiBUaGUgR0Vycm9yIGZvciB0aGlzIG1lc3NhZ2UuCisgKiBAZGVidWc6IEEgZGVidWdnaW5nIHN0cmluZy4KKyAqCisgKiBDcmVhdGUgYSBuZXcgaW5mbyBtZXNzYWdlLiBUaGUgbWVzc2FnZSB3aWxsIG1ha2UgY29waWVzIG9mIEBlcnJvciBhbmQKKyAqIEBkZWJ1Zy4KKyAqCisgKiBNVCBzYWZlLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ldyBpbmZvIG1lc3NhZ2UuCisgKgorICogU2luY2U6IDAuMTAuMTIKKyAqLworR3N0TWVzc2FnZSAqCitnc3RfbWVzc2FnZV9uZXdfaW5mbyAoR3N0T2JqZWN0ICogc3JjLCBHRXJyb3IgKiBlcnJvciwgY29uc3QgZ2NoYXIgKiBkZWJ1ZykKK3sKKyAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9pZF9uZXcgKEdTVF9RVUFSSyAoTUVTU0FHRV9JTkZPKSwKKyAgICAgIEdTVF9RVUFSSyAoR0VSUk9SKSwgR1NUX1RZUEVfR19FUlJPUiwgZXJyb3IsCisgICAgICBHU1RfUVVBUksgKERFQlVHKSwgR19UWVBFX1NUUklORywgZGVidWcsIE5VTEwpOworICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbSAoR1NUX01FU1NBR0VfSU5GTywgc3JjLCBzdHJ1Y3R1cmUpOworCisgIHJldHVybiBtZXNzYWdlOworfQorCisvKioKKyAqIGdzdF9tZXNzYWdlX25ld190YWc6CisgKiBAc3JjOiAodHJhbnNmZXIgbm9uZSk6IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuCisgKiBAdGFnX2xpc3Q6ICh0cmFuc2ZlciBmdWxsKTogdGhlIHRhZyBsaXN0IGZvciB0aGUgbWVzc2FnZS4KKyAqCisgKiBDcmVhdGUgYSBuZXcgdGFnIG1lc3NhZ2UuIFRoZSBtZXNzYWdlIHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhlIHRhZyBsaXN0LgorICogVGhlIG1lc3NhZ2UgaXMgcG9zdGVkIGJ5IGVsZW1lbnRzIHRoYXQgZGlzY292ZXJlZCBhIG5ldyB0YWdsaXN0LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ldyB0YWcgbWVzc2FnZS4KKyAqCisgKiBNVCBzYWZlLgorICovCitHc3RNZXNzYWdlICoKK2dzdF9tZXNzYWdlX25ld190YWcgKEdzdE9iamVjdCAqIHNyYywgR3N0VGFnTGlzdCAqIHRhZ19saXN0KQoreworICBHc3RNZXNzYWdlICptZXNzYWdlOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfU1RSVUNUVVJFICh0YWdfbGlzdCksIE5VTEwpOworCisgIG1lc3NhZ2UgPQorICAgICAgZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbSAoR1NUX01FU1NBR0VfVEFHLCBzcmMsIChHc3RTdHJ1Y3R1cmUgKikgdGFnX2xpc3QpOworCisgIHJldHVybiBtZXNzYWdlOworfQorCisvKioKKyAqIGdzdF9tZXNzYWdlX25ld19idWZmZXJpbmc6CisgKiBAc3JjOiAodHJhbnNmZXIgbm9uZSk6IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuCisgKiBAcGVyY2VudDogVGhlIGJ1ZmZlcmluZyBwZXJjZW50CisgKgorICogQ3JlYXRlIGEgbmV3IGJ1ZmZlcmluZyBtZXNzYWdlLiBUaGlzIG1lc3NhZ2UgY2FuIGJlIHBvc3RlZCBieSBhbiBlbGVtZW50IHRoYXQKKyAqIG5lZWRzIHRvIGJ1ZmZlciBkYXRhIGJlZm9yZSBpdCBjYW4gY29udGludWUgcHJvY2Vzc2luZy4gQHBlcmNlbnQgc2hvdWxkIGJlIGEKKyAqIHZhbHVlIGJldHdlZW4gMCBhbmQgMTAwLiBBIHZhbHVlIG9mIDEwMCBtZWFucyB0aGF0IHRoZSBidWZmZXJpbmcgY29tcGxldGVkLgorICoKKyAqIFdoZW4gQHBlcmNlbnQgaXMgPCAxMDAgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBQQVVTRSBhIFBMQVlJTkcgcGlwZWxpbmUuIFdoZW4KKyAqIEBwZXJjZW50IGlzIDEwMCwgdGhlIGFwcGxpY2F0aW9uIGNhbiBzZXQgdGhlIHBpcGVsaW5lIChiYWNrKSB0byBQTEFZSU5HLgorICogVGhlIGFwcGxpY2F0aW9uIG11c3QgYmUgcHJlcGFyZWQgdG8gcmVjZWl2ZSBCVUZGRVJJTkcgbWVzc2FnZXMgaW4gdGhlCisgKiBQUkVST0xMSU5HIHN0YXRlIGFuZCBtYXkgb25seSBzZXQgdGhlIHBpcGVsaW5lIHRvIFBMQVlJTkcgYWZ0ZXIgcmVjZWl2aW5nIGEKKyAqIG1lc3NhZ2Ugd2l0aCBAcGVyY2VudCBzZXQgdG8gMTAwLCB3aGljaCBjYW4gaGFwcGVuIGFmdGVyIHRoZSBwaXBlbGluZQorICogY29tcGxldGVkIHByZXJvbGxpbmcuIAorICoKKyAqIE1UIHNhZmUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBUaGUgbmV3IGJ1ZmZlcmluZyBtZXNzYWdlLgorICoKKyAqIFNpbmNlOiAwLjEwLjExCisgKi8KK0dzdE1lc3NhZ2UgKgorZ3N0X21lc3NhZ2VfbmV3X2J1ZmZlcmluZyAoR3N0T2JqZWN0ICogc3JjLCBnaW50IHBlcmNlbnQpCit7CisgIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwZXJjZW50ID49IDAgJiYgcGVyY2VudCA8PSAxMDAsIE5VTEwpOworCisgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfbmV3IChHU1RfUVVBUksgKE1FU1NBR0VfQlVGRkVSSU5HKSwKKyAgICAgIEdTVF9RVUFSSyAoQlVGRkVSX1BFUkNFTlQpLCBHX1RZUEVfSU5ULCBwZXJjZW50LAorICAgICAgR1NUX1FVQVJLIChCVUZGRVJJTkdfTU9ERSksIEdTVF9UWVBFX0JVRkZFUklOR19NT0RFLCBHU1RfQlVGRkVSSU5HX1NUUkVBTSwKKyAgICAgIEdTVF9RVUFSSyAoQVZHX0lOX1JBVEUpLCBHX1RZUEVfSU5ULCAtMSwKKyAgICAgIEdTVF9RVUFSSyAoQVZHX09VVF9SQVRFKSwgR19UWVBFX0lOVCwgLTEsCisgICAgICBHU1RfUVVBUksgKEJVRkZFUklOR19MRUZUKSwgR19UWVBFX0lOVDY0LCBHX0dJTlQ2NF9DT05TVEFOVCAoLTEpLAorICAgICAgR1NUX1FVQVJLIChFU1RJTUFURURfVE9UQUwpLCBHX1RZUEVfSU5UNjQsIEdfR0lOVDY0X0NPTlNUQU5UICgtMSksIE5VTEwpOworICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbSAoR1NUX01FU1NBR0VfQlVGRkVSSU5HLCBzcmMsIHN0cnVjdHVyZSk7CisKKyAgcmV0dXJuIG1lc3NhZ2U7Cit9CisKKy8qKgorICogZ3N0X21lc3NhZ2VfbmV3X3N0YXRlX2NoYW5nZWQ6CisgKiBAc3JjOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UKKyAqIEBvbGRzdGF0ZTogdGhlIHByZXZpb3VzIHN0YXRlCisgKiBAbmV3c3RhdGU6IHRoZSBuZXcgKGN1cnJlbnQpIHN0YXRlCisgKiBAcGVuZGluZzogdGhlIHBlbmRpbmcgKHRhcmdldCkgc3RhdGUKKyAqCisgKiBDcmVhdGUgYSBzdGF0ZSBjaGFuZ2UgbWVzc2FnZS4gVGhpcyBtZXNzYWdlIGlzIHBvc3RlZCB3aGVuZXZlciBhbiBlbGVtZW50CisgKiBjaGFuZ2VkIGl0cyBzdGF0ZS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXcgc3RhdGUgY2hhbmdlIG1lc3NhZ2UuCisgKgorICogTVQgc2FmZS4KKyAqLworR3N0TWVzc2FnZSAqCitnc3RfbWVzc2FnZV9uZXdfc3RhdGVfY2hhbmdlZCAoR3N0T2JqZWN0ICogc3JjLAorICAgIEdzdFN0YXRlIG9sZHN0YXRlLCBHc3RTdGF0ZSBuZXdzdGF0ZSwgR3N0U3RhdGUgcGVuZGluZykKK3sKKyAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9pZF9uZXcgKEdTVF9RVUFSSyAoTUVTU0FHRV9TVEFURSksCisgICAgICBHU1RfUVVBUksgKE9MRF9TVEFURSksIEdTVF9UWVBFX1NUQVRFLCAoZ2ludCkgb2xkc3RhdGUsCisgICAgICBHU1RfUVVBUksgKE5FV19TVEFURSksIEdTVF9UWVBFX1NUQVRFLCAoZ2ludCkgbmV3c3RhdGUsCisgICAgICBHU1RfUVVBUksgKFBFTkRJTkdfU1RBVEUpLCBHU1RfVFlQRV9TVEFURSwgKGdpbnQpIHBlbmRpbmcsIE5VTEwpOworICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbSAoR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCwgc3JjLCBzdHJ1Y3R1cmUpOworCisgIHJldHVybiBtZXNzYWdlOworfQorCisvKioKKyAqIGdzdF9tZXNzYWdlX25ld19zdGF0ZV9kaXJ0eToKKyAqIEBzcmM6ICh0cmFuc2ZlciBub25lKTogdGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZQorICoKKyAqIENyZWF0ZSBhIHN0YXRlIGRpcnR5IG1lc3NhZ2UuIFRoaXMgbWVzc2FnZSBpcyBwb3N0ZWQgd2hlbmV2ZXIgYW4gZWxlbWVudAorICogY2hhbmdlZCBpdHMgc3RhdGUgYXN5bmNocm9ub3VzbHkgYW5kIGlzIHVzZWQgaW50ZXJuYWxseSB0byB1cGRhdGUgdGhlCisgKiBzdGF0ZXMgb2YgY29udGFpbmVyIG9iamVjdHMuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3IHN0YXRlIGRpcnR5IG1lc3NhZ2UuCisgKgorICogTVQgc2FmZS4KKyAqLworR3N0TWVzc2FnZSAqCitnc3RfbWVzc2FnZV9uZXdfc3RhdGVfZGlydHkgKEdzdE9iamVjdCAqIHNyYykKK3sKKyAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKKworICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbSAoR1NUX01FU1NBR0VfU1RBVEVfRElSVFksIHNyYywgTlVMTCk7CisKKyAgcmV0dXJuIG1lc3NhZ2U7Cit9CisKKy8qKgorICogZ3N0X21lc3NhZ2VfbmV3X2Nsb2NrX3Byb3ZpZGU6CisgKiBAc3JjOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuCisgKiBAY2xvY2s6ICh0cmFuc2ZlciBub25lKTogdGhlIGNsb2NrIGl0IHByb3ZpZGVzCisgKiBAcmVhZHk6IFRSVUUgaWYgdGhlIHNlbmRlciBjYW4gcHJvdmlkZSBhIGNsb2NrCisgKgorICogQ3JlYXRlIGEgY2xvY2sgcHJvdmlkZSBtZXNzYWdlLiBUaGlzIG1lc3NhZ2UgaXMgcG9zdGVkIHdoZW5ldmVyIGFuCisgKiBlbGVtZW50IGlzIHJlYWR5IHRvIHByb3ZpZGUgYSBjbG9jayBvciBsb3N0IGl0cyBhYmlsaXR5IHRvIHByb3ZpZGUKKyAqIGEgY2xvY2sgKG1heWJlIGJlY2F1c2UgaXQgcGF1c2VkIG9yIGJlY2FtZSBFT1MpLgorICoKKyAqIFRoaXMgbWVzc2FnZSBpcyBtYWlubHkgdXNlZCBpbnRlcm5hbGx5IHRvIG1hbmFnZSB0aGUgY2xvY2sKKyAqIHNlbGVjdGlvbi4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXcgcHJvdmlkZSBjbG9jayBtZXNzYWdlLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK0dzdE1lc3NhZ2UgKgorZ3N0X21lc3NhZ2VfbmV3X2Nsb2NrX3Byb3ZpZGUgKEdzdE9iamVjdCAqIHNyYywgR3N0Q2xvY2sgKiBjbG9jaywKKyAgICBnYm9vbGVhbiByZWFkeSkKK3sKKyAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9pZF9uZXcgKEdTVF9RVUFSSyAoTUVTU0FHRV9DTE9DS19QUk9WSURFKSwKKyAgICAgIEdTVF9RVUFSSyAoQ0xPQ0spLCBHU1RfVFlQRV9DTE9DSywgY2xvY2ssCisgICAgICBHU1RfUVVBUksgKFJFQURZKSwgR19UWVBFX0JPT0xFQU4sIHJlYWR5LCBOVUxMKTsKKyAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19jdXN0b20gKEdTVF9NRVNTQUdFX0NMT0NLX1BST1ZJREUsIHNyYywgc3RydWN0dXJlKTsKKworICByZXR1cm4gbWVzc2FnZTsKK30KKworLyoqCisgKiBnc3RfbWVzc2FnZV9uZXdfY2xvY2tfbG9zdDoKKyAqIEBzcmM6ICh0cmFuc2ZlciBub25lKTogdGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4KKyAqIEBjbG9jazogKHRyYW5zZmVyIG5vbmUpOiB0aGUgY2xvY2sgdGhhdCB3YXMgbG9zdAorICoKKyAqIENyZWF0ZSBhIGNsb2NrIGxvc3QgbWVzc2FnZS4gVGhpcyBtZXNzYWdlIGlzIHBvc3RlZCB3aGVuZXZlciB0aGUKKyAqIGNsb2NrIGlzIG5vdCB2YWxpZCBhbnltb3JlLgorICoKKyAqIElmIHRoaXMgbWVzc2FnZSBpcyBwb3N0ZWQgYnkgdGhlIHBpcGVsaW5lLCB0aGUgcGlwZWxpbmUgd2lsbAorICogc2VsZWN0IGEgbmV3IGNsb2NrIGFnYWluIHdoZW4gaXQgZ29lcyB0byBQTEFZSU5HLiBJdCBtaWdodCB0aGVyZWZvcmUKKyAqIGJlIG5lZWRlZCB0byBzZXQgdGhlIHBpcGVsaW5lIHRvIFBBVVNFRCBhbmQgUExBWUlORyBhZ2Fpbi4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IFRoZSBuZXcgY2xvY2sgbG9zdCBtZXNzYWdlLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK0dzdE1lc3NhZ2UgKgorZ3N0X21lc3NhZ2VfbmV3X2Nsb2NrX2xvc3QgKEdzdE9iamVjdCAqIHNyYywgR3N0Q2xvY2sgKiBjbG9jaykKK3sKKyAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9pZF9uZXcgKEdTVF9RVUFSSyAoTUVTU0FHRV9DTE9DS19MT1NUKSwKKyAgICAgIEdTVF9RVUFSSyAoQ0xPQ0spLCBHU1RfVFlQRV9DTE9DSywgY2xvY2ssIE5VTEwpOworICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbSAoR1NUX01FU1NBR0VfQ0xPQ0tfTE9TVCwgc3JjLCBzdHJ1Y3R1cmUpOworCisgIHJldHVybiBtZXNzYWdlOworfQorCisvKioKKyAqIGdzdF9tZXNzYWdlX25ld19uZXdfY2xvY2s6CisgKiBAc3JjOiAodHJhbnNmZXIgbm9uZSk6IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuCisgKiBAY2xvY2s6ICh0cmFuc2ZlciBub25lKTogdGhlIG5ldyBzZWxlY3RlZCBjbG9jaworICoKKyAqIENyZWF0ZSBhIG5ldyBjbG9jayBtZXNzYWdlLiBUaGlzIG1lc3NhZ2UgaXMgcG9zdGVkIHdoZW5ldmVyIHRoZQorICogcGlwZWxpbmUgc2VsZWN0ZXMgYSBuZXcgY2xvY2sgZm9yIHRoZSBwaXBlbGluZS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IFRoZSBuZXcgbmV3IGNsb2NrIG1lc3NhZ2UuCisgKgorICogTVQgc2FmZS4KKyAqLworR3N0TWVzc2FnZSAqCitnc3RfbWVzc2FnZV9uZXdfbmV3X2Nsb2NrIChHc3RPYmplY3QgKiBzcmMsIEdzdENsb2NrICogY2xvY2spCit7CisgIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfbmV3IChHU1RfUVVBUksgKE1FU1NBR0VfTkVXX0NMT0NLKSwKKyAgICAgIEdTVF9RVUFSSyAoQ0xPQ0spLCBHU1RfVFlQRV9DTE9DSywgY2xvY2ssIE5VTEwpOworICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbSAoR1NUX01FU1NBR0VfTkVXX0NMT0NLLCBzcmMsIHN0cnVjdHVyZSk7CisKKyAgcmV0dXJuIG1lc3NhZ2U7Cit9CisKKy8qKgorICogZ3N0X21lc3NhZ2VfbmV3X3N0cnVjdHVyZV9jaGFuZ2U6CisgKiBAc3JjOiAodHJhbnNmZXIgbm9uZSk6IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuCisgKiBAdHlwZTogVGhlIGNoYW5nZSB0eXBlLgorICogQG93bmVyOiAodHJhbnNmZXIgbm9uZSk6IFRoZSBvd25lciBlbGVtZW50IG9mIEBzcmMuCisgKiBAYnVzeTogV2hldGhlciB0aGUgc3RydWN0dXJlIGNoYW5nZSBpcyBidXN5LgorICoKKyAqIENyZWF0ZSBhIG5ldyBzdHJ1Y3R1cmUgY2hhbmdlIG1lc3NhZ2UuIFRoaXMgbWVzc2FnZSBpcyBwb3N0ZWQgd2hlbiB0aGUKKyAqIHN0cnVjdHVyZSBvZiBhIHBpcGVsaW5lIGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGNoYW5nZWQsIGZvciBleGFtcGxlCisgKiB3aGVuIHBhZHMgYXJlIGxpbmtlZCBvciB1bmxpbmtlZC4KKyAqCisgKiBAc3JjIHNob3VsZCBiZSB0aGUgc2lua3BhZCB0aGF0IHVubGlua2VkIG9yIGxpbmtlZC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXcgc3RydWN0dXJlIGNoYW5nZSBtZXNzYWdlLgorICoKKyAqIE1UIHNhZmUuCisgKgorICogU2luY2U6IDAuMTAuMjIuCisgKi8KK0dzdE1lc3NhZ2UgKgorZ3N0X21lc3NhZ2VfbmV3X3N0cnVjdHVyZV9jaGFuZ2UgKEdzdE9iamVjdCAqIHNyYywgR3N0U3RydWN0dXJlQ2hhbmdlVHlwZSB0eXBlLAorICAgIEdzdEVsZW1lbnQgKiBvd25lciwgZ2Jvb2xlYW4gYnVzeSkKK3sKKyAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHNyYyksIE5VTEwpOworICAvKiBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1BBRF9ESVJFQ1RJT04gKHNyYykgPT0gR1NUX1BBRF9TSU5LLCBOVUxMKTsgKi8KKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChvd25lciksIE5VTEwpOworCisgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfbmV3IChHU1RfUVVBUksgKE1FU1NBR0VfU1RSVUNUVVJFX0NIQU5HRSksCisgICAgICBHU1RfUVVBUksgKFRZUEUpLCBHU1RfVFlQRV9TVFJVQ1RVUkVfQ0hBTkdFX1RZUEUsIHR5cGUsCisgICAgICBHU1RfUVVBUksgKE9XTkVSKSwgR1NUX1RZUEVfRUxFTUVOVCwgb3duZXIsCisgICAgICBHU1RfUVVBUksgKEJVU1kpLCBHX1RZUEVfQk9PTEVBTiwgYnVzeSwgTlVMTCk7CisKKyAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19jdXN0b20gKEdTVF9NRVNTQUdFX1NUUlVDVFVSRV9DSEFOR0UsIHNyYywKKyAgICAgIHN0cnVjdHVyZSk7CisKKyAgcmV0dXJuIG1lc3NhZ2U7Cit9CisKKy8qKgorICogZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfc3RhcnQ6CisgKiBAc3JjOiAodHJhbnNmZXIgbm9uZSk6IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuCisgKiBAZm9ybWF0OiBUaGUgZm9ybWF0IG9mIHRoZSBwb3NpdGlvbiBiZWluZyBwbGF5ZWQKKyAqIEBwb3NpdGlvbjogVGhlIHBvc2l0aW9uIG9mIHRoZSBzZWdtZW50IGJlaW5nIHBsYXllZAorICoKKyAqIENyZWF0ZSBhIG5ldyBzZWdtZW50IG1lc3NhZ2UuIFRoaXMgbWVzc2FnZSBpcyBwb3N0ZWQgYnkgZWxlbWVudHMgdGhhdAorICogc3RhcnQgcGxheWJhY2sgb2YgYSBzZWdtZW50IGFzIGEgcmVzdWx0IG9mIGEgc2VnbWVudCBzZWVrLiBUaGlzIG1lc3NhZ2UKKyAqIGlzIG5vdCByZWNlaXZlZCBieSB0aGUgYXBwbGljYXRpb24gYnV0IGlzIHVzZWQgZm9yIG1haW50ZW5hbmNlIHJlYXNvbnMgaW4KKyAqIGNvbnRhaW5lciBlbGVtZW50cy4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXcgc2VnbWVudCBzdGFydCBtZXNzYWdlLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK0dzdE1lc3NhZ2UgKgorZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfc3RhcnQgKEdzdE9iamVjdCAqIHNyYywgR3N0Rm9ybWF0IGZvcm1hdCwKKyAgICBnaW50NjQgcG9zaXRpb24pCit7CisgIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfbmV3IChHU1RfUVVBUksgKE1FU1NBR0VfU0VHTUVOVF9TVEFSVCksCisgICAgICBHU1RfUVVBUksgKEZPUk1BVCksIEdTVF9UWVBFX0ZPUk1BVCwgZm9ybWF0LAorICAgICAgR1NUX1FVQVJLIChQT1NJVElPTiksIEdfVFlQRV9JTlQ2NCwgcG9zaXRpb24sIE5VTEwpOworICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbSAoR1NUX01FU1NBR0VfU0VHTUVOVF9TVEFSVCwgc3JjLCBzdHJ1Y3R1cmUpOworCisgIHJldHVybiBtZXNzYWdlOworfQorCisvKioKKyAqIGdzdF9tZXNzYWdlX25ld19zZWdtZW50X2RvbmU6CisgKiBAc3JjOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuCisgKiBAZm9ybWF0OiBUaGUgZm9ybWF0IG9mIHRoZSBwb3NpdGlvbiBiZWluZyBkb25lCisgKiBAcG9zaXRpb246IFRoZSBwb3NpdGlvbiBvZiB0aGUgc2VnbWVudCBiZWluZyBkb25lCisgKgorICogQ3JlYXRlIGEgbmV3IHNlZ21lbnQgZG9uZSBtZXNzYWdlLiBUaGlzIG1lc3NhZ2UgaXMgcG9zdGVkIGJ5IGVsZW1lbnRzIHRoYXQKKyAqIGZpbmlzaCBwbGF5YmFjayBvZiBhIHNlZ21lbnQgYXMgYSByZXN1bHQgb2YgYSBzZWdtZW50IHNlZWsuIFRoaXMgbWVzc2FnZQorICogaXMgcmVjZWl2ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGFmdGVyIGFsbCBlbGVtZW50cyB0aGF0IHBvc3RlZCBhIHNlZ21lbnRfc3RhcnQKKyAqIGhhdmUgcG9zdGVkIHRoZSBzZWdtZW50X2RvbmUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3IHNlZ21lbnQgZG9uZSBtZXNzYWdlLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK0dzdE1lc3NhZ2UgKgorZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfZG9uZSAoR3N0T2JqZWN0ICogc3JjLCBHc3RGb3JtYXQgZm9ybWF0LAorICAgIGdpbnQ2NCBwb3NpdGlvbikKK3sKKyAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9pZF9uZXcgKEdTVF9RVUFSSyAoTUVTU0FHRV9TRUdNRU5UX0RPTkUpLAorICAgICAgR1NUX1FVQVJLIChGT1JNQVQpLCBHU1RfVFlQRV9GT1JNQVQsIGZvcm1hdCwKKyAgICAgIEdTVF9RVUFSSyAoUE9TSVRJT04pLCBHX1RZUEVfSU5UNjQsIHBvc2l0aW9uLCBOVUxMKTsKKyAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19jdXN0b20gKEdTVF9NRVNTQUdFX1NFR01FTlRfRE9ORSwgc3JjLCBzdHJ1Y3R1cmUpOworCisgIHJldHVybiBtZXNzYWdlOworfQorCisvKioKKyAqIGdzdF9tZXNzYWdlX25ld19hcHBsaWNhdGlvbjoKKyAqIEBzcmM6ICh0cmFuc2ZlciBub25lKTogdGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4KKyAqIEBzdHJ1Y3R1cmU6ICh0cmFuc2ZlciBmdWxsKTogdGhlIHN0cnVjdHVyZSBmb3IgdGhlIG1lc3NhZ2UuIFRoZSBtZXNzYWdlCisgKiAgICAgd2lsbCB0YWtlIG93bmVyc2hpcCBvZiB0aGUgc3RydWN0dXJlLgorICoKKyAqIENyZWF0ZSBhIG5ldyBhcHBsaWNhdGlvbi10eXBlZCBtZXNzYWdlLiBHU3RyZWFtZXIgd2lsbCBuZXZlciBjcmVhdGUgdGhlc2UKKyAqIG1lc3NhZ2VzOyB0aGV5IGFyZSBhIGdpZnQgZnJvbSB1cyB0byB5b3UuIEVuam95LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogVGhlIG5ldyBhcHBsaWNhdGlvbiBtZXNzYWdlLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK0dzdE1lc3NhZ2UgKgorZ3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9uIChHc3RPYmplY3QgKiBzcmMsIEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSkKK3sKKyAgcmV0dXJuIGdzdF9tZXNzYWdlX25ld19jdXN0b20gKEdTVF9NRVNTQUdFX0FQUExJQ0FUSU9OLCBzcmMsIHN0cnVjdHVyZSk7Cit9CisKKy8qKgorICogZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQ6CisgKiBAc3JjOiAodHJhbnNmZXIgbm9uZSk6IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuCisgKiBAc3RydWN0dXJlOiAodHJhbnNmZXIgZnVsbCk6IFRoZSBzdHJ1Y3R1cmUgZm9yIHRoZSBtZXNzYWdlLiBUaGUgbWVzc2FnZQorICogICAgIHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhlIHN0cnVjdHVyZS4KKyAqCisgKiBDcmVhdGUgYSBuZXcgZWxlbWVudC1zcGVjaWZpYyBtZXNzYWdlLiBUaGlzIGlzIG1lYW50IGFzIGEgZ2VuZXJpYyB3YXkgb2YKKyAqIGFsbG93aW5nIG9uZS13YXkgY29tbXVuaWNhdGlvbiBmcm9tIGFuIGVsZW1lbnQgdG8gYW4gYXBwbGljYXRpb24sIGZvciBleGFtcGxlCisgKiAidGhlIGZpcmV3aXJlIGNhYmxlIHdhcyB1bnBsdWdnZWQiLiBUaGUgZm9ybWF0IG9mIHRoZSBtZXNzYWdlIHNob3VsZCBiZQorICogZG9jdW1lbnRlZCBpbiB0aGUgZWxlbWVudCdzIGRvY3VtZW50YXRpb24uIFRoZSBzdHJ1Y3R1cmUgZmllbGQgY2FuIGJlIE5VTEwuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBUaGUgbmV3IGVsZW1lbnQgbWVzc2FnZS4KKyAqCisgKiBNVCBzYWZlLgorICovCitHc3RNZXNzYWdlICoKK2dzdF9tZXNzYWdlX25ld19lbGVtZW50IChHc3RPYmplY3QgKiBzcmMsIEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSkKK3sKKyAgcmV0dXJuIGdzdF9tZXNzYWdlX25ld19jdXN0b20gKEdTVF9NRVNTQUdFX0VMRU1FTlQsIHNyYywgc3RydWN0dXJlKTsKK30KKworLyoqCisgKiBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb246CisgKiBAc3JjOiAodHJhbnNmZXIgbm9uZSk6IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuCisgKiBAZm9ybWF0OiBUaGUgZm9ybWF0IG9mIHRoZSBkdXJhdGlvbgorICogQGR1cmF0aW9uOiBUaGUgbmV3IGR1cmF0aW9uIAorICoKKyAqIENyZWF0ZSBhIG5ldyBkdXJhdGlvbiBtZXNzYWdlLiBUaGlzIG1lc3NhZ2UgaXMgcG9zdGVkIGJ5IGVsZW1lbnRzIHRoYXQKKyAqIGtub3cgdGhlIGR1cmF0aW9uIG9mIGEgc3RyZWFtIGluIGEgc3BlY2lmaWMgZm9ybWF0LiBUaGlzIG1lc3NhZ2UKKyAqIGlzIHJlY2VpdmVkIGJ5IGJpbnMgYW5kIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSB0b3RhbCBkdXJhdGlvbiBvZiBhCisgKiBwaXBlbGluZS4gRWxlbWVudHMgbWF5IHBvc3QgYSBkdXJhdGlvbiBtZXNzYWdlIHdpdGggYSBkdXJhdGlvbiBvZgorICogR1NUX0NMT0NLX1RJTUVfTk9ORSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBkdXJhdGlvbiBoYXMgY2hhbmdlZCBhbmQgdGhlIAorICogY2FjaGVkIGR1cmF0aW9uIHNob3VsZCBiZSBkaXNjYXJkZWQuIFRoZSBuZXcgZHVyYXRpb24gY2FuIHRoZW4gYmUgCisgKiByZXRyaWV2ZWQgdmlhIGEgcXVlcnkuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBUaGUgbmV3IGR1cmF0aW9uIG1lc3NhZ2UuCisgKgorICogTVQgc2FmZS4KKyAqLworR3N0TWVzc2FnZSAqCitnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb24gKEdzdE9iamVjdCAqIHNyYywgR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0IGR1cmF0aW9uKQoreworICBHc3RNZXNzYWdlICptZXNzYWdlOworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX2lkX25ldyAoR1NUX1FVQVJLIChNRVNTQUdFX0RVUkFUSU9OKSwKKyAgICAgIEdTVF9RVUFSSyAoRk9STUFUKSwgR1NUX1RZUEVfRk9STUFULCBmb3JtYXQsCisgICAgICBHU1RfUVVBUksgKERVUkFUSU9OKSwgR19UWVBFX0lOVDY0LCBkdXJhdGlvbiwgTlVMTCk7CisgIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfY3VzdG9tIChHU1RfTUVTU0FHRV9EVVJBVElPTiwgc3JjLCBzdHJ1Y3R1cmUpOworCisgIHJldHVybiBtZXNzYWdlOworfQorCisvKioKKyAqIGdzdF9tZXNzYWdlX25ld19hc3luY19zdGFydDoKKyAqIEBzcmM6ICh0cmFuc2ZlciBub25lKTogVGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4KKyAqCisgKiBUaGlzIG1lc3NhZ2UgaXMgcG9zdGVkIGJ5IGVsZW1lbnRzIHdoZW4gdGhleSBzdGFydCBhbiBBU1lOQyBzdGF0ZSBjaGFuZ2UuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBUaGUgbmV3IGFzeW5jX3N0YXJ0IG1lc3NhZ2UuCisgKgorICogTVQgc2FmZS4KKyAqLworR3N0TWVzc2FnZSAqCitnc3RfbWVzc2FnZV9uZXdfYXN5bmNfc3RhcnQgKEdzdE9iamVjdCAqIHNyYykKK3sKKyAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKKworICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbSAoR1NUX01FU1NBR0VfQVNZTkNfU1RBUlQsIHNyYywgTlVMTCk7CisKKyAgcmV0dXJuIG1lc3NhZ2U7Cit9CisKKy8qKgorICogZ3N0X21lc3NhZ2VfbmV3X2FzeW5jX2RvbmU6CisgKiBAc3JjOiAodHJhbnNmZXIgbm9uZSk6IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuCisgKiBAcmVzZXRfdGltZTogaWYgdGhlIHJ1bm5pbmdfdGltZSBzaG91bGQgYmUgcmVzZXQKKyAqCisgKiBUaGUgbWVzc2FnZSBpcyBwb3N0ZWQgd2hlbiBlbGVtZW50cyBjb21wbGV0ZWQgYW4gQVNZTkMgc3RhdGUgY2hhbmdlLgorICogQHJlc2V0X3RpbWUgaXMgc2V0IHRvIFRSVUUgd2hlbiB0aGUgZWxlbWVudCByZXF1ZXN0cyBhIG5ldyBydW5uaW5nX3RpbWUKKyAqIGJlZm9yZSBnb2luZyB0byBQTEFZSU5HLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogVGhlIG5ldyBhc3luY19kb25lIG1lc3NhZ2UuCisgKgorICogTVQgc2FmZS4KKyAqLworR3N0TWVzc2FnZSAqCitnc3RfbWVzc2FnZV9uZXdfYXN5bmNfZG9uZSAoR3N0T2JqZWN0ICogc3JjLCBnYm9vbGVhbiByZXNldF90aW1lKQoreworICBHc3RNZXNzYWdlICptZXNzYWdlOworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX2lkX25ldyAoR1NUX1FVQVJLIChNRVNTQUdFX0FTWU5DX0RPTkUpLAorICAgICAgR1NUX1FVQVJLIChSRVNFVF9USU1FKSwgR19UWVBFX0JPT0xFQU4sIHJlc2V0X3RpbWUsIE5VTEwpOworICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbSAoR1NUX01FU1NBR0VfQVNZTkNfRE9ORSwgc3JjLCBzdHJ1Y3R1cmUpOworCisgIHJldHVybiBtZXNzYWdlOworfQorCisvKioKKyAqIGdzdF9tZXNzYWdlX25ld19sYXRlbmN5OgorICogQHNyYzogKHRyYW5zZmVyIG5vbmUpOiBUaGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLgorICoKKyAqIFRoaXMgbWVzc2FnZSBjYW4gYmUgcG9zdGVkIGJ5IGVsZW1lbnRzIHdoZW4gdGhlaXIgbGF0ZW5jeSByZXF1aXJlbWVudHMgaGF2ZQorICogY2hhbmdlZC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IFRoZSBuZXcgbGF0ZW5jeSBtZXNzYWdlLgorICoKKyAqIE1UIHNhZmUuCisgKgorICogU2luY2U6IDAuMTAuMTIKKyAqLworR3N0TWVzc2FnZSAqCitnc3RfbWVzc2FnZV9uZXdfbGF0ZW5jeSAoR3N0T2JqZWN0ICogc3JjKQoreworICBHc3RNZXNzYWdlICptZXNzYWdlOworCisgIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfY3VzdG9tIChHU1RfTUVTU0FHRV9MQVRFTkNZLCBzcmMsIE5VTEwpOworCisgIHJldHVybiBtZXNzYWdlOworfQorCisvKioKKyAqIGdzdF9tZXNzYWdlX25ld19yZXF1ZXN0X3N0YXRlOgorICogQHNyYzogKHRyYW5zZmVyIG5vbmUpOiB0aGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLgorICogQHN0YXRlOiBUaGUgbmV3IHJlcXVlc3RlZCBzdGF0ZQorICoKKyAqIFRoaXMgbWVzc2FnZSBjYW4gYmUgcG9zdGVkIGJ5IGVsZW1lbnRzIHdoZW4gdGhleSB3YW50IHRvIGhhdmUgdGhlaXIgc3RhdGUKKyAqIGNoYW5nZWQuIEEgdHlwaWNhbCB1c2UgY2FzZSB3b3VsZCBiZSBhbiBhdWRpbyBzZXJ2ZXIgdGhhdCB3YW50cyB0byBwYXVzZSB0aGUKKyAqIHBpcGVsaW5lIGJlY2F1c2UgYSBoaWdoZXIgcHJpb3JpdHkgc3RyZWFtIGlzIGJlaW5nIHBsYXllZC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXcgcmVxdXN0IHN0YXRlIG1lc3NhZ2UuCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yMworICovCitHc3RNZXNzYWdlICoKK2dzdF9tZXNzYWdlX25ld19yZXF1ZXN0X3N0YXRlIChHc3RPYmplY3QgKiBzcmMsIEdzdFN0YXRlIHN0YXRlKQoreworICBHc3RNZXNzYWdlICptZXNzYWdlOworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX2lkX25ldyAoR1NUX1FVQVJLIChNRVNTQUdFX1JFUVVFU1RfU1RBVEUpLAorICAgICAgR1NUX1FVQVJLIChORVdfU1RBVEUpLCBHU1RfVFlQRV9TVEFURSwgKGdpbnQpIHN0YXRlLCBOVUxMKTsKKyAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19jdXN0b20gKEdTVF9NRVNTQUdFX1JFUVVFU1RfU1RBVEUsIHNyYywgc3RydWN0dXJlKTsKKworICByZXR1cm4gbWVzc2FnZTsKK30KKworLyoqCisgKiBnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlOgorICogQG1lc3NhZ2U6IFRoZSAjR3N0TWVzc2FnZS4KKyAqCisgKiBBY2Nlc3MgdGhlIHN0cnVjdHVyZSBvZiB0aGUgbWVzc2FnZS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG1lc3NhZ2UuIFRoZSBzdHJ1Y3R1cmUgaXMKKyAqIHN0aWxsIG93bmVkIGJ5IHRoZSBtZXNzYWdlLCB3aGljaCBtZWFucyB0aGF0IHlvdSBzaG91bGQgbm90IGZyZWUgaXQgYW5kCisgKiB0aGF0IHRoZSBwb2ludGVyIGJlY29tZXMgaW52YWxpZCB3aGVuIHlvdSBmcmVlIHRoZSBtZXNzYWdlLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK2NvbnN0IEdzdFN0cnVjdHVyZSAqCitnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlIChHc3RNZXNzYWdlICogbWVzc2FnZSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSwgTlVMTCk7CisKKyAgcmV0dXJuIEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSk7Cit9CisKKy8qKgorICogZ3N0X21lc3NhZ2VfaGFzX25hbWU6CisgKiBAbWVzc2FnZTogVGhlICNHc3RNZXNzYWdlLgorICogQG5hbWU6IG5hbWUgdG8gY2hlY2sKKyAqCisgKiBDaGVja3MgaWYgQG1lc3NhZ2UgaGFzIHRoZSBnaXZlbiBAbmFtZS4gVGhpcyBmdW5jdGlvbiBpcyB1c3VhbGx5IHVzZWQgdG8KKyAqIGNoZWNrIHRoZSBuYW1lIG9mIGEgY3VzdG9tIG1lc3NhZ2UuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgQG5hbWUgbWF0Y2hlcyB0aGUgbmFtZSBvZiB0aGUgbWVzc2FnZSBzdHJ1Y3R1cmUuCisgKgorICogU2luY2U6IDAuMTAuMjAKKyAqLworZ2Jvb2xlYW4KK2dzdF9tZXNzYWdlX2hhc19uYW1lIChHc3RNZXNzYWdlICogbWVzc2FnZSwgY29uc3QgZ2NoYXIgKiBuYW1lKQoreworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX01FU1NBR0UgKG1lc3NhZ2UpLCBGQUxTRSk7CisKKyAgc3RydWN0dXJlID0gR1NUX01FU1NBR0VfU1RSVUNUVVJFIChtZXNzYWdlKTsKKyAgaWYgKHN0cnVjdHVyZSA9PSBOVUxMKQorICAgIHJldHVybiBGQUxTRTsKKworICByZXR1cm4gZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAoc3RydWN0dXJlLCBuYW1lKTsKK30KKworLyoqCisgKiBnc3RfbWVzc2FnZV9wYXJzZV90YWc6CisgKiBAbWVzc2FnZTogQSB2YWxpZCAjR3N0TWVzc2FnZSBvZiB0eXBlIEdTVF9NRVNTQUdFX1RBRy4KKyAqIEB0YWdfbGlzdDogKG91dCBjYWxsZWUtYWxsb2NhdGVzKTogcmV0dXJuIGxvY2F0aW9uIGZvciB0aGUgdGFnLWxpc3QuCisgKgorICogRXh0cmFjdHMgdGhlIHRhZyBsaXN0IGZyb20gdGhlIEdzdE1lc3NhZ2UuIFRoZSB0YWcgbGlzdCByZXR1cm5lZCBpbiB0aGUKKyAqIG91dHB1dCBhcmd1bWVudCBpcyBhIGNvcHk7IHRoZSBjYWxsZXIgbXVzdCBmcmVlIGl0IHdoZW4gZG9uZS4KKyAqCisgKiBUeXBpY2FsIHVzYWdlIG9mIHRoaXMgZnVuY3Rpb24gbWlnaHQgYmU6CisgKiB8WworICogICAuLi4KKyAqICAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpKSB7CisgKiAgICAgY2FzZSBHU1RfTUVTU0FHRV9UQUc6IHsKKyAqICAgICAgIEdzdFRhZ0xpc3QgKnRhZ3MgPSBOVUxMOworICogICAgICAgCisgKiAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV90YWcgKG1zZywgJmFtcDt0YWdzKTsKKyAqICAgICAgIGdfcHJpbnQgKCJHb3QgdGFncyBmcm9tIGVsZW1lbnQgJXNcbiIsIEdTVF9PQkpFQ1RfTkFNRSAobXNnLT5zcmMpKTsKKyAqICAgICAgIGhhbmRsZV90YWdzICh0YWdzKTsKKyAqICAgICAgIGdzdF90YWdfbGlzdF9mcmVlICh0YWdzKTsKKyAqICAgICAgIGJyZWFrOworICogICAgIH0KKyAqICAgICAuLi4KKyAqICAgfQorICogICAuLi4KKyAqIF18CisgKgorICogTVQgc2FmZS4KKyAqLwordm9pZAorZ3N0X21lc3NhZ2VfcGFyc2VfdGFnIChHc3RNZXNzYWdlICogbWVzc2FnZSwgR3N0VGFnTGlzdCAqKiB0YWdfbGlzdCkKK3sKKyAgR3N0U3RydWN0dXJlICpyZXQ7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX01FU1NBR0UgKG1lc3NhZ2UpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfVEFHKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAodGFnX2xpc3QgIT0gTlVMTCk7CisKKyAgcmV0ID0gZ3N0X3N0cnVjdHVyZV9jb3B5IChHU1RfTUVTU0FHRV9TVFJVQ1RVUkUgKG1lc3NhZ2UpKTsKKyAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKHJldCwgInNvdXJjZS1wYWQiKTsKKworICAqdGFnX2xpc3QgPSAoR3N0VGFnTGlzdCAqKSByZXQ7Cit9CisKKy8qKgorICogZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nOgorICogQG1lc3NhZ2U6IEEgdmFsaWQgI0dzdE1lc3NhZ2Ugb2YgdHlwZSBHU1RfTUVTU0FHRV9CVUZGRVJJTkcuCisgKiBAcGVyY2VudDogKG91dCkgKGFsbG93LW5vbmUpOiBSZXR1cm4gbG9jYXRpb24gZm9yIHRoZSBwZXJjZW50LgorICoKKyAqIEV4dHJhY3RzIHRoZSBidWZmZXJpbmcgcGVyY2VudCBmcm9tIHRoZSBHc3RNZXNzYWdlLiBzZWUgYWxzbworICogZ3N0X21lc3NhZ2VfbmV3X2J1ZmZlcmluZygpLgorICoKKyAqIE1UIHNhZmUuCisgKgorICogU2luY2U6IDAuMTAuMTEKKyAqLwordm9pZAorZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nIChHc3RNZXNzYWdlICogbWVzc2FnZSwgZ2ludCAqIHBlcmNlbnQpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX0JVRkZFUklORyk7CisKKyAgaWYgKHBlcmNlbnQpCisgICAgKnBlcmNlbnQgPQorICAgICAgICBnX3ZhbHVlX2dldF9pbnQgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChHU1RfTUVTU0FHRV9TVFJVQ1RVUkUKKyAgICAgICAgICAgIChtZXNzYWdlKSwgR1NUX1FVQVJLIChCVUZGRVJfUEVSQ0VOVCkpKTsKK30KKworLyoqCisgKiBnc3RfbWVzc2FnZV9zZXRfYnVmZmVyaW5nX3N0YXRzOgorICogQG1lc3NhZ2U6IEEgdmFsaWQgI0dzdE1lc3NhZ2Ugb2YgdHlwZSBHU1RfTUVTU0FHRV9CVUZGRVJJTkcuCisgKiBAbW9kZTogYSBidWZmZXJpbmcgbW9kZSAKKyAqIEBhdmdfaW46IHRoZSBhdmVyYWdlIGlucHV0IHJhdGUKKyAqIEBhdmdfb3V0OiB0aGUgYXZlcmFnZSBvdXRwdXQgcmF0ZQorICogQGJ1ZmZlcmluZ19sZWZ0OiBhbW91bnQgb2YgYnVmZmVyaW5nIHRpbWUgbGVmdCBpbiBtaWxsaXNlY29uZHMKKyAqCisgKiBDb25maWd1cmVzIHRoZSBidWZmZXJpbmcgc3RhdHMgdmFsdWVzIGluIEBtZXNzYWdlLgorICoKKyAqIFNpbmNlOiAwLjEwLjIwCisgKi8KK3ZvaWQKK2dzdF9tZXNzYWdlX3NldF9idWZmZXJpbmdfc3RhdHMgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHc3RCdWZmZXJpbmdNb2RlIG1vZGUsCisgICAgZ2ludCBhdmdfaW4sIGdpbnQgYXZnX291dCwgZ2ludDY0IGJ1ZmZlcmluZ19sZWZ0KQoreworICBnX3JldHVybl9pZl9mYWlsIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9CVUZGRVJJTkcpOworCisgIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0IChHU1RfTUVTU0FHRV9TVFJVQ1RVUkUgKG1lc3NhZ2UpLAorICAgICAgR1NUX1FVQVJLIChCVUZGRVJJTkdfTU9ERSksIEdTVF9UWVBFX0JVRkZFUklOR19NT0RFLCBtb2RlLAorICAgICAgR1NUX1FVQVJLIChBVkdfSU5fUkFURSksIEdfVFlQRV9JTlQsIGF2Z19pbiwKKyAgICAgIEdTVF9RVUFSSyAoQVZHX09VVF9SQVRFKSwgR19UWVBFX0lOVCwgYXZnX291dCwKKyAgICAgIEdTVF9RVUFSSyAoQlVGRkVSSU5HX0xFRlQpLCBHX1RZUEVfSU5UNjQsIGJ1ZmZlcmluZ19sZWZ0LCBOVUxMKTsKK30KKworLyoqCisgKiBnc3RfbWVzc2FnZV9wYXJzZV9idWZmZXJpbmdfc3RhdHM6CisgKiBAbWVzc2FnZTogQSB2YWxpZCAjR3N0TWVzc2FnZSBvZiB0eXBlIEdTVF9NRVNTQUdFX0JVRkZFUklORy4KKyAqIEBtb2RlOiAob3V0KSAoYWxsb3ctbm9uZSk6IGEgYnVmZmVyaW5nIG1vZGUsIG9yIE5VTEwKKyAqIEBhdmdfaW46IChvdXQpIChhbGxvdy1ub25lKTogdGhlIGF2ZXJhZ2UgaW5wdXQgcmF0ZSwgb3IgTlVMTAorICogQGF2Z19vdXQ6IChvdXQpIChhbGxvdy1ub25lKTogdGhlIGF2ZXJhZ2Ugb3V0cHV0IHJhdGUsIG9yIE5VTEwKKyAqIEBidWZmZXJpbmdfbGVmdDogKG91dCkgKGFsbG93LW5vbmUpOiBhbW91bnQgb2YgYnVmZmVyaW5nIHRpbWUgbGVmdCBpbgorICogICAgIG1pbGxpc2Vjb25kcywgb3IgTlVMTAorICoKKyAqIEV4dHJhY3RzIHRoZSBidWZmZXJpbmcgc3RhdHMgdmFsdWVzIGZyb20gQG1lc3NhZ2UuCisgKgorICogU2luY2U6IDAuMTAuMjAKKyAqLwordm9pZAorZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nX3N0YXRzIChHc3RNZXNzYWdlICogbWVzc2FnZSwKKyAgICBHc3RCdWZmZXJpbmdNb2RlICogbW9kZSwgZ2ludCAqIGF2Z19pbiwgZ2ludCAqIGF2Z19vdXQsCisgICAgZ2ludDY0ICogYnVmZmVyaW5nX2xlZnQpCit7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX0JVRkZFUklORyk7CisKKyAgc3RydWN0dXJlID0gR1NUX01FU1NBR0VfU1RSVUNUVVJFIChtZXNzYWdlKTsKKyAgaWYgKG1vZGUpCisgICAgKm1vZGUgPSAoR3N0QnVmZmVyaW5nTW9kZSkKKyAgICAgICAgZ192YWx1ZV9nZXRfZW51bSAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgIEdTVF9RVUFSSyAoQlVGRkVSSU5HX01PREUpKSk7CisgIGlmIChhdmdfaW4pCisgICAgKmF2Z19pbiA9IGdfdmFsdWVfZ2V0X2ludCAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgIEdTVF9RVUFSSyAoQVZHX0lOX1JBVEUpKSk7CisgIGlmIChhdmdfb3V0KQorICAgICphdmdfb3V0ID0gZ192YWx1ZV9nZXRfaW50IChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAorICAgICAgICAgICAgR1NUX1FVQVJLIChBVkdfT1VUX1JBVEUpKSk7CisgIGlmIChidWZmZXJpbmdfbGVmdCkKKyAgICAqYnVmZmVyaW5nX2xlZnQgPQorICAgICAgICBnX3ZhbHVlX2dldF9pbnQ2NCAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgIEdTVF9RVUFSSyAoQlVGRkVSSU5HX0xFRlQpKSk7Cit9CisKKy8qKgorICogZ3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZDoKKyAqIEBtZXNzYWdlOiBhIHZhbGlkICNHc3RNZXNzYWdlIG9mIHR5cGUgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRAorICogQG9sZHN0YXRlOiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBwcmV2aW91cyBzdGF0ZSwgb3IgTlVMTAorICogQG5ld3N0YXRlOiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBuZXcgKGN1cnJlbnQpIHN0YXRlLCBvciBOVUxMCisgKiBAcGVuZGluZzogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgcGVuZGluZyAodGFyZ2V0KSBzdGF0ZSwgb3IgTlVMTAorICoKKyAqIEV4dHJhY3RzIHRoZSBvbGQgYW5kIG5ldyBzdGF0ZXMgZnJvbSB0aGUgR3N0TWVzc2FnZS4KKyAqCisgKiBUeXBpY2FsIHVzYWdlIG9mIHRoaXMgZnVuY3Rpb24gbWlnaHQgYmU6CisgKiB8WworICogICAuLi4KKyAqICAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpKSB7CisgKiAgICAgY2FzZSBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEOiB7CisgKiAgICAgICBHc3RTdGF0ZSBvbGRfc3RhdGUsIG5ld19zdGF0ZTsKKyAqICAgICAgIAorICogICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZCAobXNnLCAmYW1wO29sZF9zdGF0ZSwgJmFtcDtuZXdfc3RhdGUsIE5VTEwpOworICogICAgICAgZ19wcmludCAoIkVsZW1lbnQgJXMgY2hhbmdlZCBzdGF0ZSBmcm9tICVzIHRvICVzLlxuIiwKKyAqICAgICAgICAgICBHU1RfT0JKRUNUX05BTUUgKG1zZy0+c3JjKSwKKyAqICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAob2xkX3N0YXRlKSwKKyAqICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAobmV3X3N0YXRlKSk7CisgKiAgICAgICBicmVhazsKKyAqICAgICB9CisgKiAgICAgLi4uCisgKiAgIH0KKyAqICAgLi4uCisgKiBdfAorICoKKyAqIE1UIHNhZmUuCisgKi8KK3ZvaWQKK2dzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLAorICAgIEdzdFN0YXRlICogb2xkc3RhdGUsIEdzdFN0YXRlICogbmV3c3RhdGUsIEdzdFN0YXRlICogcGVuZGluZykKK3sKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX01FU1NBR0UgKG1lc3NhZ2UpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCk7CisKKyAgc3RydWN0dXJlID0gR1NUX01FU1NBR0VfU1RSVUNUVVJFIChtZXNzYWdlKTsKKyAgaWYgKG9sZHN0YXRlKQorICAgICpvbGRzdGF0ZSA9IChHc3RTdGF0ZSkKKyAgICAgICAgZ192YWx1ZV9nZXRfZW51bSAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgIEdTVF9RVUFSSyAoT0xEX1NUQVRFKSkpOworICBpZiAobmV3c3RhdGUpCisgICAgKm5ld3N0YXRlID0gKEdzdFN0YXRlKQorICAgICAgICBnX3ZhbHVlX2dldF9lbnVtIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAorICAgICAgICAgICAgR1NUX1FVQVJLIChORVdfU1RBVEUpKSk7CisgIGlmIChwZW5kaW5nKQorICAgICpwZW5kaW5nID0gKEdzdFN0YXRlKQorICAgICAgICBnX3ZhbHVlX2dldF9lbnVtIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAorICAgICAgICAgICAgR1NUX1FVQVJLIChQRU5ESU5HX1NUQVRFKSkpOworfQorCisvKioKKyAqIGdzdF9tZXNzYWdlX3BhcnNlX2Nsb2NrX3Byb3ZpZGU6CisgKiBAbWVzc2FnZTogQSB2YWxpZCAjR3N0TWVzc2FnZSBvZiB0eXBlIEdTVF9NRVNTQUdFX0NMT0NLX1BST1ZJREUuCisgKiBAY2xvY2s6IChvdXQpIChhbGxvdy1ub25lKSAodHJhbnNmZXIgbm9uZSk6IGEgcG9pbnRlciB0byAgaG9sZCBhIGNsb2NrCisgKiAgICAgb2JqZWN0LCBvciBOVUxMCisgKiBAcmVhZHk6IChvdXQpIChhbGxvdy1ub25lKTogYSBwb2ludGVyIHRvIGhvbGQgdGhlIHJlYWR5IGZsYWcsIG9yIE5VTEwKKyAqCisgKiBFeHRyYWN0cyB0aGUgY2xvY2sgYW5kIHJlYWR5IGZsYWcgZnJvbSB0aGUgR3N0TWVzc2FnZS4KKyAqIFRoZSBjbG9jayBvYmplY3QgcmV0dXJuZWQgcmVtYWlucyB2YWxpZCB1bnRpbCB0aGUgbWVzc2FnZSBpcyBmcmVlZC4KKyAqCisgKiBNVCBzYWZlLgorICovCit2b2lkCitnc3RfbWVzc2FnZV9wYXJzZV9jbG9ja19wcm92aWRlIChHc3RNZXNzYWdlICogbWVzc2FnZSwgR3N0Q2xvY2sgKiogY2xvY2ssCisgICAgZ2Jvb2xlYW4gKiByZWFkeSkKK3sKKyAgY29uc3QgR1ZhbHVlICpjbG9ja19ndmFsdWU7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX0NMT0NLX1BST1ZJREUpOworCisgIHN0cnVjdHVyZSA9IEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSk7CisgIGNsb2NrX2d2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsIEdTVF9RVUFSSyAoQ0xPQ0spKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoY2xvY2tfZ3ZhbHVlICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsIChHX1ZBTFVFX1RZUEUgKGNsb2NrX2d2YWx1ZSkgPT0gR1NUX1RZUEVfQ0xPQ0spOworCisgIGlmIChyZWFkeSkKKyAgICAqcmVhZHkgPQorICAgICAgICBnX3ZhbHVlX2dldF9ib29sZWFuIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAorICAgICAgICAgICAgR1NUX1FVQVJLIChSRUFEWSkpKTsKKyAgaWYgKGNsb2NrKQorICAgICpjbG9jayA9IChHc3RDbG9jayAqKSBnX3ZhbHVlX2dldF9vYmplY3QgKGNsb2NrX2d2YWx1ZSk7Cit9CisKKy8qKgorICogZ3N0X21lc3NhZ2VfcGFyc2VfY2xvY2tfbG9zdDoKKyAqIEBtZXNzYWdlOiBBIHZhbGlkICNHc3RNZXNzYWdlIG9mIHR5cGUgR1NUX01FU1NBR0VfQ0xPQ0tfTE9TVC4KKyAqIEBjbG9jazogKG91dCkgKGFsbG93LW5vbmUpICh0cmFuc2ZlciBub25lKTogYSBwb2ludGVyIHRvIGhvbGQgdGhlIGxvc3QgY2xvY2sKKyAqCisgKiBFeHRyYWN0cyB0aGUgbG9zdCBjbG9jayBmcm9tIHRoZSBHc3RNZXNzYWdlLgorICogVGhlIGNsb2NrIG9iamVjdCByZXR1cm5lZCByZW1haW5zIHZhbGlkIHVudGlsIHRoZSBtZXNzYWdlIGlzIGZyZWVkLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK3ZvaWQKK2dzdF9tZXNzYWdlX3BhcnNlX2Nsb2NrX2xvc3QgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHc3RDbG9jayAqKiBjbG9jaykKK3sKKyAgY29uc3QgR1ZhbHVlICpjbG9ja19ndmFsdWU7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX0NMT0NLX0xPU1QpOworCisgIHN0cnVjdHVyZSA9IEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSk7CisgIGNsb2NrX2d2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsIEdTVF9RVUFSSyAoQ0xPQ0spKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoY2xvY2tfZ3ZhbHVlICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsIChHX1ZBTFVFX1RZUEUgKGNsb2NrX2d2YWx1ZSkgPT0gR1NUX1RZUEVfQ0xPQ0spOworCisgIGlmIChjbG9jaykKKyAgICAqY2xvY2sgPSAoR3N0Q2xvY2sgKikgZ192YWx1ZV9nZXRfb2JqZWN0IChjbG9ja19ndmFsdWUpOworfQorCisvKioKKyAqIGdzdF9tZXNzYWdlX3BhcnNlX25ld19jbG9jazoKKyAqIEBtZXNzYWdlOiBBIHZhbGlkICNHc3RNZXNzYWdlIG9mIHR5cGUgR1NUX01FU1NBR0VfTkVXX0NMT0NLLgorICogQGNsb2NrOiAob3V0KSAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIG5vbmUpOiBhIHBvaW50ZXIgdG8gaG9sZCB0aGUgc2VsZWN0ZWQKKyAqICAgICBuZXcgY2xvY2sKKyAqCisgKiBFeHRyYWN0cyB0aGUgbmV3IGNsb2NrIGZyb20gdGhlIEdzdE1lc3NhZ2UuCisgKiBUaGUgY2xvY2sgb2JqZWN0IHJldHVybmVkIHJlbWFpbnMgdmFsaWQgdW50aWwgdGhlIG1lc3NhZ2UgaXMgZnJlZWQuCisgKgorICogTVQgc2FmZS4KKyAqLwordm9pZAorZ3N0X21lc3NhZ2VfcGFyc2VfbmV3X2Nsb2NrIChHc3RNZXNzYWdlICogbWVzc2FnZSwgR3N0Q2xvY2sgKiogY2xvY2spCit7CisgIGNvbnN0IEdWYWx1ZSAqY2xvY2tfZ3ZhbHVlOworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfTUVTU0FHRSAobWVzc2FnZSkpOworICBnX3JldHVybl9pZl9mYWlsIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9ORVdfQ0xPQ0spOworCisgIHN0cnVjdHVyZSA9IEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSk7CisgIGNsb2NrX2d2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsIEdTVF9RVUFSSyAoQ0xPQ0spKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoY2xvY2tfZ3ZhbHVlICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsIChHX1ZBTFVFX1RZUEUgKGNsb2NrX2d2YWx1ZSkgPT0gR1NUX1RZUEVfQ0xPQ0spOworCisgIGlmIChjbG9jaykKKyAgICAqY2xvY2sgPSAoR3N0Q2xvY2sgKikgZ192YWx1ZV9nZXRfb2JqZWN0IChjbG9ja19ndmFsdWUpOworfQorCisvKioKKyAqIGdzdF9tZXNzYWdlX3BhcnNlX3N0cnVjdHVyZV9jaGFuZ2U6CisgKiBAbWVzc2FnZTogQSB2YWxpZCAjR3N0TWVzc2FnZSBvZiB0eXBlIEdTVF9NRVNTQUdFX1NUUlVDVFVSRV9DSEFOR0UuCisgKiBAdHlwZTogKG91dCk6IEEgcG9pbnRlciB0byBob2xkIHRoZSBjaGFuZ2UgdHlwZQorICogQG93bmVyOiAob3V0KSAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIG5vbmUpOiBUaGUgb3duZXIgZWxlbWVudCBvZiB0aGUKKyAqICAgICBtZXNzYWdlIHNvdXJjZQorICogQGJ1c3k6IChvdXQpIChhbGxvdy1ub25lKTogYSBwb2ludGVyIHRvIGhvbGQgd2hldGhlciB0aGUgY2hhbmdlIGlzIGluCisgKiAgICAgcHJvZ3Jlc3Mgb3IgaGFzIGJlZW4gY29tcGxldGVkCisgKgorICogRXh0cmFjdHMgdGhlIGNoYW5nZSB0eXBlIGFuZCBjb21wbGV0aW9uIHN0YXR1cyBmcm9tIHRoZSBHc3RNZXNzYWdlLgorICoKKyAqIE1UIHNhZmUuCisgKgorICogU2luY2U6IDAuMTAuMjIKKyAqLwordm9pZAorZ3N0X21lc3NhZ2VfcGFyc2Vfc3RydWN0dXJlX2NoYW5nZSAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsCisgICAgR3N0U3RydWN0dXJlQ2hhbmdlVHlwZSAqIHR5cGUsIEdzdEVsZW1lbnQgKiogb3duZXIsIGdib29sZWFuICogYnVzeSkKK3sKKyAgY29uc3QgR1ZhbHVlICpvd25lcl9ndmFsdWU7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1NUUlVDVFVSRV9DSEFOR0UpOworCisgIHN0cnVjdHVyZSA9IEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSk7CisgIG93bmVyX2d2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsIEdTVF9RVUFSSyAoT1dORVIpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAob3duZXJfZ3ZhbHVlICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsIChHX1ZBTFVFX1RZUEUgKG93bmVyX2d2YWx1ZSkgPT0gR1NUX1RZUEVfRUxFTUVOVCk7CisKKyAgaWYgKHR5cGUpCisgICAgKnR5cGUgPSAoR3N0U3RydWN0dXJlQ2hhbmdlVHlwZSkKKyAgICAgICAgZ192YWx1ZV9nZXRfZW51bSAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgIEdTVF9RVUFSSyAoVFlQRSkpKTsKKyAgaWYgKG93bmVyKQorICAgICpvd25lciA9IChHc3RFbGVtZW50ICopIGdfdmFsdWVfZ2V0X29iamVjdCAob3duZXJfZ3ZhbHVlKTsKKyAgaWYgKGJ1c3kpCisgICAgKmJ1c3kgPQorICAgICAgICBnX3ZhbHVlX2dldF9ib29sZWFuIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAorICAgICAgICAgICAgR1NUX1FVQVJLIChCVVNZKSkpOworfQorCisvKioKKyAqIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yOgorICogQG1lc3NhZ2U6IEEgdmFsaWQgI0dzdE1lc3NhZ2Ugb2YgdHlwZSBHU1RfTUVTU0FHRV9FUlJPUi4KKyAqIEBnZXJyb3I6IChvdXQpIChhbGxvdy1ub25lKSAodHJhbnNmZXIgZnVsbCk6IGxvY2F0aW9uIGZvciB0aGUgR0Vycm9yCisgKiBAZGVidWc6IChvdXQpIChhbGxvdy1ub25lKSAodHJhbnNmZXIgZnVsbCk6IGxvY2F0aW9uIGZvciB0aGUgZGVidWcgbWVzc2FnZSwKKyAqICAgICBvciBOVUxMCisgKgorICogRXh0cmFjdHMgdGhlIEdFcnJvciBhbmQgZGVidWcgc3RyaW5nIGZyb20gdGhlIEdzdE1lc3NhZ2UuIFRoZSB2YWx1ZXMgcmV0dXJuZWQKKyAqIGluIHRoZSBvdXRwdXQgYXJndW1lbnRzIGFyZSBjb3BpZXM7IHRoZSBjYWxsZXIgbXVzdCBmcmVlIHRoZW0gd2hlbiBkb25lLgorICoKKyAqIFR5cGljYWwgdXNhZ2Ugb2YgdGhpcyBmdW5jdGlvbiBtaWdodCBiZToKKyAqIHxbCisgKiAgIC4uLgorICogICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykpIHsKKyAqICAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOiB7CisgKiAgICAgICBHRXJyb3IgKmVyciA9IE5VTEw7CisgKiAgICAgICBnY2hhciAqZGJnX2luZm8gPSBOVUxMOworICogICAgICAgCisgKiAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobXNnLCAmYW1wO2VyciwgJmFtcDtkYmdfaW5mbyk7CisgKiAgICAgICBnX3ByaW50ZXJyICgiRVJST1IgZnJvbSBlbGVtZW50ICVzOiAlc1xuIiwKKyAqICAgICAgICAgICBHU1RfT0JKRUNUX05BTUUgKG1zZy0+c3JjKSwgZXJyLT5tZXNzYWdlKTsKKyAqICAgICAgIGdfcHJpbnRlcnIgKCJEZWJ1Z2dpbmcgaW5mbzogJXNcbiIsIChkYmdfaW5mbykgPyBkYmdfaW5mbyA6ICJub25lIik7CisgKiAgICAgICBnX2Vycm9yX2ZyZWUgKGVycik7CisgKiAgICAgICBnX2ZyZWUgKGRiZ19pbmZvKTsKKyAqICAgICAgIGJyZWFrOworICogICAgIH0KKyAqICAgICAuLi4KKyAqICAgfQorICogICAuLi4KKyAqIF18CisgKgorICogTVQgc2FmZS4KKyAqLwordm9pZAorZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHRXJyb3IgKiogZ2Vycm9yLCBnY2hhciAqKiBkZWJ1ZykKK3sKKyAgY29uc3QgR1ZhbHVlICplcnJvcl9ndmFsdWU7CisgIEdFcnJvciAqZXJyb3JfdmFsOworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfTUVTU0FHRSAobWVzc2FnZSkpOworICBnX3JldHVybl9pZl9mYWlsIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9FUlJPUik7CisKKyAgc3RydWN0dXJlID0gR1NUX01FU1NBR0VfU1RSVUNUVVJFIChtZXNzYWdlKTsKKyAgZXJyb3JfZ3ZhbHVlID0gZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgR1NUX1FVQVJLIChHRVJST1IpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoZXJyb3JfZ3ZhbHVlICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsIChHX1ZBTFVFX1RZUEUgKGVycm9yX2d2YWx1ZSkgPT0gR1NUX1RZUEVfR19FUlJPUik7CisKKyAgZXJyb3JfdmFsID0gKEdFcnJvciAqKSBnX3ZhbHVlX2dldF9ib3hlZCAoZXJyb3JfZ3ZhbHVlKTsKKyAgaWYgKGVycm9yX3ZhbCkKKyAgICAqZ2Vycm9yID0gZ19lcnJvcl9jb3B5IChlcnJvcl92YWwpOworICBlbHNlCisgICAgKmdlcnJvciA9IE5VTEw7CisKKyAgaWYgKGRlYnVnKQorICAgICpkZWJ1ZyA9CisgICAgICAgIGdfdmFsdWVfZHVwX3N0cmluZyAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgIEdTVF9RVUFSSyAoREVCVUcpKSk7Cit9CisKKy8qKgorICogZ3N0X21lc3NhZ2VfcGFyc2Vfd2FybmluZzoKKyAqIEBtZXNzYWdlOiBBIHZhbGlkICNHc3RNZXNzYWdlIG9mIHR5cGUgR1NUX01FU1NBR0VfV0FSTklORy4KKyAqIEBnZXJyb3I6IChvdXQpIChhbGxvdy1ub25lKSAodHJhbnNmZXIgZnVsbCk6IGxvY2F0aW9uIGZvciB0aGUgR0Vycm9yCisgKiBAZGVidWc6IChvdXQpIChhbGxvdy1ub25lKSAodHJhbnNmZXIgZnVsbCk6IGxvY2F0aW9uIGZvciB0aGUgZGVidWcgbWVzc2FnZSwKKyAqICAgICBvciBOVUxMCisgKgorICogRXh0cmFjdHMgdGhlIEdFcnJvciBhbmQgZGVidWcgc3RyaW5nIGZyb20gdGhlIEdzdE1lc3NhZ2UuIFRoZSB2YWx1ZXMgcmV0dXJuZWQKKyAqIGluIHRoZSBvdXRwdXQgYXJndW1lbnRzIGFyZSBjb3BpZXM7IHRoZSBjYWxsZXIgbXVzdCBmcmVlIHRoZW0gd2hlbiBkb25lLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK3ZvaWQKK2dzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmcgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHRXJyb3IgKiogZ2Vycm9yLAorICAgIGdjaGFyICoqIGRlYnVnKQoreworICBjb25zdCBHVmFsdWUgKmVycm9yX2d2YWx1ZTsKKyAgR0Vycm9yICplcnJvcl92YWw7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1dBUk5JTkcpOworCisgIHN0cnVjdHVyZSA9IEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSk7CisgIGVycm9yX2d2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsIEdTVF9RVUFSSyAoR0VSUk9SKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKGVycm9yX2d2YWx1ZSAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR19WQUxVRV9UWVBFIChlcnJvcl9ndmFsdWUpID09IEdTVF9UWVBFX0dfRVJST1IpOworCisgIGVycm9yX3ZhbCA9IChHRXJyb3IgKikgZ192YWx1ZV9nZXRfYm94ZWQgKGVycm9yX2d2YWx1ZSk7CisgIGlmIChlcnJvcl92YWwpCisgICAgKmdlcnJvciA9IGdfZXJyb3JfY29weSAoZXJyb3JfdmFsKTsKKyAgZWxzZQorICAgICpnZXJyb3IgPSBOVUxMOworCisgIGlmIChkZWJ1ZykKKyAgICAqZGVidWcgPQorICAgICAgICBnX3ZhbHVlX2R1cF9zdHJpbmcgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCisgICAgICAgICAgICBHU1RfUVVBUksgKERFQlVHKSkpOworfQorCisvKioKKyAqIGdzdF9tZXNzYWdlX3BhcnNlX2luZm86CisgKiBAbWVzc2FnZTogQSB2YWxpZCAjR3N0TWVzc2FnZSBvZiB0eXBlIEdTVF9NRVNTQUdFX0lORk8uCisgKiBAZ2Vycm9yOiAob3V0KSAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIGZ1bGwpOiBsb2NhdGlvbiBmb3IgdGhlIEdFcnJvcgorICogQGRlYnVnOiAob3V0KSAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIGZ1bGwpOiBsb2NhdGlvbiBmb3IgdGhlIGRlYnVnIG1lc3NhZ2UsCisgKiAgICAgb3IgTlVMTAorICoKKyAqIEV4dHJhY3RzIHRoZSBHRXJyb3IgYW5kIGRlYnVnIHN0cmluZyBmcm9tIHRoZSBHc3RNZXNzYWdlLiBUaGUgdmFsdWVzIHJldHVybmVkCisgKiBpbiB0aGUgb3V0cHV0IGFyZ3VtZW50cyBhcmUgY29waWVzOyB0aGUgY2FsbGVyIG11c3QgZnJlZSB0aGVtIHdoZW4gZG9uZS4KKyAqCisgKiBNVCBzYWZlLgorICoKKyAqIFNpbmNlOiAwLjEwLjEyCisgKi8KK3ZvaWQKK2dzdF9tZXNzYWdlX3BhcnNlX2luZm8gKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHRXJyb3IgKiogZ2Vycm9yLCBnY2hhciAqKiBkZWJ1ZykKK3sKKyAgY29uc3QgR1ZhbHVlICplcnJvcl9ndmFsdWU7CisgIEdFcnJvciAqZXJyb3JfdmFsOworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfTUVTU0FHRSAobWVzc2FnZSkpOworICBnX3JldHVybl9pZl9mYWlsIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9JTkZPKTsKKworICBzdHJ1Y3R1cmUgPSBHU1RfTUVTU0FHRV9TVFJVQ1RVUkUgKG1lc3NhZ2UpOworICBlcnJvcl9ndmFsdWUgPSBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLCBHU1RfUVVBUksgKEdFUlJPUikpOworICBnX3JldHVybl9pZl9mYWlsIChlcnJvcl9ndmFsdWUgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdfVkFMVUVfVFlQRSAoZXJyb3JfZ3ZhbHVlKSA9PSBHU1RfVFlQRV9HX0VSUk9SKTsKKworICBlcnJvcl92YWwgPSAoR0Vycm9yICopIGdfdmFsdWVfZ2V0X2JveGVkIChlcnJvcl9ndmFsdWUpOworICBpZiAoZXJyb3JfdmFsKQorICAgICpnZXJyb3IgPSBnX2Vycm9yX2NvcHkgKGVycm9yX3ZhbCk7CisgIGVsc2UKKyAgICAqZ2Vycm9yID0gTlVMTDsKKworICBpZiAoZGVidWcpCisgICAgKmRlYnVnID0KKyAgICAgICAgZ192YWx1ZV9kdXBfc3RyaW5nIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAorICAgICAgICAgICAgR1NUX1FVQVJLIChERUJVRykpKTsKK30KKworLyoqCisgKiBnc3RfbWVzc2FnZV9wYXJzZV9zZWdtZW50X3N0YXJ0OgorICogQG1lc3NhZ2U6IEEgdmFsaWQgI0dzdE1lc3NhZ2Ugb2YgdHlwZSBHU1RfTUVTU0FHRV9TRUdNRU5UX1NUQVJULgorICogQGZvcm1hdDogKG91dCk6IFJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIGZvcm1hdCwgb3IgTlVMTAorICogQHBvc2l0aW9uOiAob3V0KTogUmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgcG9zaXRpb24sIG9yIE5VTEwKKyAqCisgKiBFeHRyYWN0cyB0aGUgcG9zaXRpb24gYW5kIGZvcm1hdCBmcm9tIHRoZSBzZWdtZW50IHN0YXJ0IG1lc3NhZ2UuCisgKgorICogTVQgc2FmZS4KKyAqLwordm9pZAorZ3N0X21lc3NhZ2VfcGFyc2Vfc2VnbWVudF9zdGFydCAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIEdzdEZvcm1hdCAqIGZvcm1hdCwKKyAgICBnaW50NjQgKiBwb3NpdGlvbikKK3sKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX01FU1NBR0UgKG1lc3NhZ2UpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfU0VHTUVOVF9TVEFSVCk7CisKKyAgc3RydWN0dXJlID0gR1NUX01FU1NBR0VfU1RSVUNUVVJFIChtZXNzYWdlKTsKKyAgaWYgKGZvcm1hdCkKKyAgICAqZm9ybWF0ID0gKEdzdEZvcm1hdCkKKyAgICAgICAgZ192YWx1ZV9nZXRfZW51bSAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgIEdTVF9RVUFSSyAoRk9STUFUKSkpOworICBpZiAocG9zaXRpb24pCisgICAgKnBvc2l0aW9uID0KKyAgICAgICAgZ192YWx1ZV9nZXRfaW50NjQgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCisgICAgICAgICAgICBHU1RfUVVBUksgKFBPU0lUSU9OKSkpOworfQorCisvKioKKyAqIGdzdF9tZXNzYWdlX3BhcnNlX3NlZ21lbnRfZG9uZToKKyAqIEBtZXNzYWdlOiBBIHZhbGlkICNHc3RNZXNzYWdlIG9mIHR5cGUgR1NUX01FU1NBR0VfU0VHTUVOVF9ET05FLgorICogQGZvcm1hdDogKG91dCk6IFJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIGZvcm1hdCwgb3IgTlVMTAorICogQHBvc2l0aW9uOiAob3V0KTogUmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgcG9zaXRpb24sIG9yIE5VTEwKKyAqCisgKiBFeHRyYWN0cyB0aGUgcG9zaXRpb24gYW5kIGZvcm1hdCBmcm9tIHRoZSBzZWdtZW50IHN0YXJ0IG1lc3NhZ2UuCisgKgorICogTVQgc2FmZS4KKyAqLwordm9pZAorZ3N0X21lc3NhZ2VfcGFyc2Vfc2VnbWVudF9kb25lIChHc3RNZXNzYWdlICogbWVzc2FnZSwgR3N0Rm9ybWF0ICogZm9ybWF0LAorICAgIGdpbnQ2NCAqIHBvc2l0aW9uKQoreworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfTUVTU0FHRSAobWVzc2FnZSkpOworICBnX3JldHVybl9pZl9mYWlsIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9TRUdNRU5UX0RPTkUpOworCisgIHN0cnVjdHVyZSA9IEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSk7CisgIGlmIChmb3JtYXQpCisgICAgKmZvcm1hdCA9IChHc3RGb3JtYXQpCisgICAgICAgIGdfdmFsdWVfZ2V0X2VudW0gKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCisgICAgICAgICAgICBHU1RfUVVBUksgKEZPUk1BVCkpKTsKKyAgaWYgKHBvc2l0aW9uKQorICAgICpwb3NpdGlvbiA9CisgICAgICAgIGdfdmFsdWVfZ2V0X2ludDY0IChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAorICAgICAgICAgICAgR1NUX1FVQVJLIChQT1NJVElPTikpKTsKK30KKworLyoqCisgKiBnc3RfbWVzc2FnZV9wYXJzZV9kdXJhdGlvbjoKKyAqIEBtZXNzYWdlOiBBIHZhbGlkICNHc3RNZXNzYWdlIG9mIHR5cGUgR1NUX01FU1NBR0VfRFVSQVRJT04uCisgKiBAZm9ybWF0OiAob3V0KTogUmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgZm9ybWF0LCBvciBOVUxMCisgKiBAZHVyYXRpb246IChvdXQpOiBSZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBkdXJhdGlvbiwgb3IgTlVMTAorICoKKyAqIEV4dHJhY3RzIHRoZSBkdXJhdGlvbiBhbmQgZm9ybWF0IGZyb20gdGhlIGR1cmF0aW9uIG1lc3NhZ2UuIFRoZSBkdXJhdGlvbgorICogbWlnaHQgYmUgR1NUX0NMT0NLX1RJTUVfTk9ORSwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIGR1cmF0aW9uIGhhcworICogY2hhbmdlZC4gQXBwbGljYXRpb25zIHNob3VsZCBhbHdheXMgdXNlIGEgcXVlcnkgdG8gcmV0cmlldmUgdGhlIGR1cmF0aW9uCisgKiBvZiBhIHBpcGVsaW5lLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK3ZvaWQKK2dzdF9tZXNzYWdlX3BhcnNlX2R1cmF0aW9uIChHc3RNZXNzYWdlICogbWVzc2FnZSwgR3N0Rm9ybWF0ICogZm9ybWF0LAorICAgIGdpbnQ2NCAqIGR1cmF0aW9uKQoreworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfTUVTU0FHRSAobWVzc2FnZSkpOworICBnX3JldHVybl9pZl9mYWlsIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9EVVJBVElPTik7CisKKyAgc3RydWN0dXJlID0gR1NUX01FU1NBR0VfU1RSVUNUVVJFIChtZXNzYWdlKTsKKyAgaWYgKGZvcm1hdCkKKyAgICAqZm9ybWF0ID0gKEdzdEZvcm1hdCkKKyAgICAgICAgZ192YWx1ZV9nZXRfZW51bSAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgIEdTVF9RVUFSSyAoRk9STUFUKSkpOworICBpZiAoZHVyYXRpb24pCisgICAgKmR1cmF0aW9uID0KKyAgICAgICAgZ192YWx1ZV9nZXRfaW50NjQgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCisgICAgICAgICAgICBHU1RfUVVBUksgKERVUkFUSU9OKSkpOworfQorCisvKioKKyAqIGdzdF9tZXNzYWdlX3BhcnNlX2FzeW5jX2RvbmU6CisgKiBAbWVzc2FnZTogQSB2YWxpZCAjR3N0TWVzc2FnZSBvZiB0eXBlIEdTVF9NRVNTQUdFX0FTWU5DX0RPTkUuCisgKiBAcmVzZXRfdGltZTogKG91dCk6IFJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIHJlc2V0X3RpbWUgb3IgTlVMTAorICoKKyAqIEV4dHJhY3QgdGhlIHJlc2V0X3RpbWUgZnJvbSB0aGUgYXN5bmNfZG9uZSBtZXNzYWdlLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK3ZvaWQKK2dzdF9tZXNzYWdlX3BhcnNlX2FzeW5jX2RvbmUgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBnYm9vbGVhbiAqIHJlc2V0X3RpbWUpCit7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX0FTWU5DX0RPTkUpOworCisgIHN0cnVjdHVyZSA9IEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSk7CisgIGlmIChyZXNldF90aW1lKQorICAgICpyZXNldF90aW1lID0KKyAgICAgICAgZ192YWx1ZV9nZXRfYm9vbGVhbiAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgIEdTVF9RVUFSSyAoUkVTRVRfVElNRSkpKTsKK30KKworLyoqCisgKiBnc3RfbWVzc2FnZV9wYXJzZV9yZXF1ZXN0X3N0YXRlOgorICogQG1lc3NhZ2U6IEEgdmFsaWQgI0dzdE1lc3NhZ2Ugb2YgdHlwZSBHU1RfTUVTU0FHRV9SRVFVRVNUX1NUQVRFLgorICogQHN0YXRlOiAob3V0KTogUmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgcmVxdWVzdGVkIHN0YXRlIG9yIE5VTEwKKyAqCisgKiBFeHRyYWN0IHRoZSByZXF1ZXN0ZWQgc3RhdGUgZnJvbSB0aGUgcmVxdWVzdF9zdGF0ZSBtZXNzYWdlLgorICoKKyAqIE1UIHNhZmUuCisgKgorICogU2luY2U6IDAuMTAuMjMKKyAqLwordm9pZAorZ3N0X21lc3NhZ2VfcGFyc2VfcmVxdWVzdF9zdGF0ZSAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIEdzdFN0YXRlICogc3RhdGUpCit7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1JFUVVFU1RfU1RBVEUpOworCisgIHN0cnVjdHVyZSA9IEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSk7CisgIGlmIChzdGF0ZSkKKyAgICAqc3RhdGUgPSAoR3N0U3RhdGUpCisgICAgICAgIGdfdmFsdWVfZ2V0X2VudW0gKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCisgICAgICAgICAgICBHU1RfUVVBUksgKE5FV19TVEFURSkpKTsKK30KKworLyoqCisgKiBnc3RfbWVzc2FnZV9uZXdfc3RyZWFtX3N0YXR1czoKKyAqIEBzcmM6IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuCisgKiBAdHlwZTogVGhlIHN0cmVhbSBzdGF0dXMgdHlwZS4KKyAqIEBvd25lcjogKHRyYW5zZmVyIG5vbmUpOiB0aGUgb3duZXIgZWxlbWVudCBvZiBAc3JjLgorICoKKyAqIENyZWF0ZSBhIG5ldyBzdHJlYW0gc3RhdHVzIG1lc3NhZ2UuIFRoaXMgbWVzc2FnZSBpcyBwb3N0ZWQgd2hlbiBhIHN0cmVhbWluZworICogdGhyZWFkIGlzIGNyZWF0ZWQvZGVzdHJveWVkIG9yIHdoZW4gdGhlIHN0YXRlIGNoYW5nZWQuCisgKiAKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ldyBzdHJlYW0gc3RhdHVzIG1lc3NhZ2UuCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yNC4KKyAqLworR3N0TWVzc2FnZSAqCitnc3RfbWVzc2FnZV9uZXdfc3RyZWFtX3N0YXR1cyAoR3N0T2JqZWN0ICogc3JjLCBHc3RTdHJlYW1TdGF0dXNUeXBlIHR5cGUsCisgICAgR3N0RWxlbWVudCAqIG93bmVyKQoreworICBHc3RNZXNzYWdlICptZXNzYWdlOworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX2lkX25ldyAoR1NUX1FVQVJLIChNRVNTQUdFX1NUUkVBTV9TVEFUVVMpLAorICAgICAgR1NUX1FVQVJLIChUWVBFKSwgR1NUX1RZUEVfU1RSRUFNX1NUQVRVU19UWVBFLCAoZ2ludCkgdHlwZSwKKyAgICAgIEdTVF9RVUFSSyAoT1dORVIpLCBHU1RfVFlQRV9FTEVNRU5ULCBvd25lciwgTlVMTCk7CisgIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfY3VzdG9tIChHU1RfTUVTU0FHRV9TVFJFQU1fU1RBVFVTLCBzcmMsIHN0cnVjdHVyZSk7CisKKyAgcmV0dXJuIG1lc3NhZ2U7Cit9CisKKy8qKgorICogZ3N0X21lc3NhZ2VfcGFyc2Vfc3RyZWFtX3N0YXR1czoKKyAqIEBtZXNzYWdlOiBBIHZhbGlkICNHc3RNZXNzYWdlIG9mIHR5cGUgR1NUX01FU1NBR0VfU1RSRUFNX1NUQVRVUy4KKyAqIEB0eXBlOiAob3V0KTogQSBwb2ludGVyIHRvIGhvbGQgdGhlIHN0YXR1cyB0eXBlCisgKiBAb3duZXI6IChvdXQpICh0cmFuc2ZlciBub25lKTogVGhlIG93bmVyIGVsZW1lbnQgb2YgdGhlIG1lc3NhZ2Ugc291cmNlCisgKgorICogRXh0cmFjdHMgdGhlIHN0cmVhbSBzdGF0dXMgdHlwZSBhbmQgb3duZXIgdGhlIEdzdE1lc3NhZ2UuIFRoZSByZXR1cm5lZAorICogb3duZXIgcmVtYWlucyB2YWxpZCBmb3IgYXMgbG9uZyBhcyB0aGUgcmVmZXJlbmNlIHRvIEBtZXNzYWdlIGlzIHZhbGlkIGFuZAorICogc2hvdWxkIHRodXMgbm90IGJlIHVucmVmZmVkLgorICoKKyAqIE1UIHNhZmUuCisgKgorICogU2luY2U6IDAuMTAuMjQuCisgKi8KK3ZvaWQKK2dzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9zdGF0dXMgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLAorICAgIEdzdFN0cmVhbVN0YXR1c1R5cGUgKiB0eXBlLCBHc3RFbGVtZW50ICoqIG93bmVyKQoreworICBjb25zdCBHVmFsdWUgKm93bmVyX2d2YWx1ZTsKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX01FU1NBR0UgKG1lc3NhZ2UpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfU1RSRUFNX1NUQVRVUyk7CisKKyAgc3RydWN0dXJlID0gR1NUX01FU1NBR0VfU1RSVUNUVVJFIChtZXNzYWdlKTsKKyAgb3duZXJfZ3ZhbHVlID0gZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgR1NUX1FVQVJLIChPV05FUikpOworICBnX3JldHVybl9pZl9mYWlsIChvd25lcl9ndmFsdWUgIT0gTlVMTCk7CisKKyAgaWYgKHR5cGUpCisgICAgKnR5cGUgPSAoR3N0U3RyZWFtU3RhdHVzVHlwZSkKKyAgICAgICAgZ192YWx1ZV9nZXRfZW51bSAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgIEdTVF9RVUFSSyAoVFlQRSkpKTsKKyAgaWYgKG93bmVyKQorICAgICpvd25lciA9IChHc3RFbGVtZW50ICopIGdfdmFsdWVfZ2V0X29iamVjdCAob3duZXJfZ3ZhbHVlKTsKK30KKworLyoqCisgKiBnc3RfbWVzc2FnZV9zZXRfc3RyZWFtX3N0YXR1c19vYmplY3Q6CisgKiBAbWVzc2FnZTogQSB2YWxpZCAjR3N0TWVzc2FnZSBvZiB0eXBlIEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFUVVMuCisgKiBAb2JqZWN0OiB0aGUgb2JqZWN0IGNvbnRyb2xsaW5nIHRoZSBzdHJlYW1pbmcKKyAqCisgKiBDb25maWd1cmVzIHRoZSBvYmplY3QgaGFuZGxpbmcgdGhlIHN0cmVhbWluZyB0aHJlYWQuIFRoaXMgaXMgdXN1YWxseSBhCisgKiBHc3RUYXNrIG9iamVjdCBidXQgb3RoZXIgb2JqZWN0cyBtaWdodCBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLgorICoKKyAqIFNpbmNlOiAwLjEwLjI0CisgKi8KK3ZvaWQKK2dzdF9tZXNzYWdlX3NldF9zdHJlYW1fc3RhdHVzX29iamVjdCAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsCisgICAgY29uc3QgR1ZhbHVlICogb2JqZWN0KQoreworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfTUVTU0FHRSAobWVzc2FnZSkpOworICBnX3JldHVybl9pZl9mYWlsIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9TVFJFQU1fU1RBVFVTKTsKKworICBzdHJ1Y3R1cmUgPSBHU1RfTUVTU0FHRV9TVFJVQ1RVUkUgKG1lc3NhZ2UpOworICBnc3Rfc3RydWN0dXJlX2lkX3NldF92YWx1ZSAoc3RydWN0dXJlLCBHU1RfUVVBUksgKE9CSkVDVCksIG9iamVjdCk7Cit9CisKKy8qKgorICogZ3N0X21lc3NhZ2VfZ2V0X3N0cmVhbV9zdGF0dXNfb2JqZWN0OgorICogQG1lc3NhZ2U6IEEgdmFsaWQgI0dzdE1lc3NhZ2Ugb2YgdHlwZSBHU1RfTUVTU0FHRV9TVFJFQU1fU1RBVFVTLgorICoKKyAqIEV4dHJhY3RzIHRoZSBvYmplY3QgbWFuYWdpbmcgdGhlIHN0cmVhbWluZyB0aHJlYWQgZnJvbSBAbWVzc2FnZS4KKyAqCisgKiBSZXR1cm5zOiBhIEdWYWx1ZSBjb250YWluaW5nIHRoZSBvYmplY3QgdGhhdCBtYW5hZ2VzIHRoZSBzdHJlYW1pbmcgdGhyZWFkLgorICogVGhpcyBvYmplY3QgaXMgdXN1YWxseSBvZiB0eXBlIEdzdFRhc2sgYnV0IG90aGVyIHR5cGVzIGNhbiBiZSBhZGRlZCBpbiB0aGUKKyAqIGZ1dHVyZS4gVGhlIG9iamVjdCByZW1haW5zIHZhbGlkIGFzIGxvbmcgYXMgQG1lc3NhZ2UgaXMgdmFsaWQuCisgKgorICogU2luY2U6IDAuMTAuMjQKKyAqLworY29uc3QgR1ZhbHVlICoKK2dzdF9tZXNzYWdlX2dldF9zdHJlYW1fc3RhdHVzX29iamVjdCAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UpCit7CisgIGNvbnN0IEdWYWx1ZSAqcmVzdWx0OworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX01FU1NBR0UgKG1lc3NhZ2UpLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFUVVMsCisgICAgICBOVUxMKTsKKworICBzdHJ1Y3R1cmUgPSBHU1RfTUVTU0FHRV9TVFJVQ1RVUkUgKG1lc3NhZ2UpOworICByZXN1bHQgPSBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLCBHU1RfUVVBUksgKE9CSkVDVCkpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZ3N0X21lc3NhZ2VfbmV3X3N0ZXBfZG9uZToKKyAqIEBzcmM6IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuCisgKiBAZm9ybWF0OiB0aGUgZm9ybWF0IG9mIEBhbW91bnQKKyAqIEBhbW91bnQ6IHRoZSBhbW91bnQgb2Ygc3RlcHBlZCBkYXRhCisgKiBAcmF0ZTogdGhlIHJhdGUgb2YgdGhlIHN0ZXBwZWQgYW1vdW50CisgKiBAZmx1c2g6IGlzIHRoaXMgYW4gZmx1c2hpbmcgc3RlcAorICogQGludGVybWVkaWF0ZTogaXMgdGhpcyBhbiBpbnRlcm1lZGlhdGUgc3RlcAorICogQGR1cmF0aW9uOiB0aGUgZHVyYXRpb24gb2YgdGhlIGRhdGEKKyAqIEBlb3M6IHRoZSBzdGVwIGNhdXNlZCBFT1MKKyAqCisgKiBUaGlzIG1lc3NhZ2UgaXMgcG9zdGVkIGJ5IGVsZW1lbnRzIHdoZW4gdGhleSBjb21wbGV0ZSBhIHBhcnQsIHdoZW4gQGludGVybWVkaWF0ZSBzZXQKKyAqIHRvIFRSVUUsIG9yIGEgY29tcGxldGUgc3RlcCBvcGVyYXRpb24uCisgKgorICogQGR1cmF0aW9uIHdpbGwgY29udGFpbiB0aGUgYW1vdW50IG9mIHRpbWUgKGluIEdTVF9GT1JNQVRfVElNRSkgb2YgdGhlIHN0ZXBwZWQKKyAqIEBhbW91bnQgb2YgbWVkaWEgaW4gZm9ybWF0IEBmb3JtYXQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3IHN0ZXBfZG9uZSBtZXNzYWdlLgorICoKKyAqIE1UIHNhZmUuCisgKgorICogU2luY2U6IDAuMTAuMjQKKyAqLworR3N0TWVzc2FnZSAqCitnc3RfbWVzc2FnZV9uZXdfc3RlcF9kb25lIChHc3RPYmplY3QgKiBzcmMsIEdzdEZvcm1hdCBmb3JtYXQsIGd1aW50NjQgYW1vdW50LAorICAgIGdkb3VibGUgcmF0ZSwgZ2Jvb2xlYW4gZmx1c2gsIGdib29sZWFuIGludGVybWVkaWF0ZSwgZ3VpbnQ2NCBkdXJhdGlvbiwKKyAgICBnYm9vbGVhbiBlb3MpCit7CisgIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfbmV3IChHU1RfUVVBUksgKE1FU1NBR0VfU1RFUF9ET05FKSwKKyAgICAgIEdTVF9RVUFSSyAoRk9STUFUKSwgR1NUX1RZUEVfRk9STUFULCBmb3JtYXQsCisgICAgICBHU1RfUVVBUksgKEFNT1VOVCksIEdfVFlQRV9VSU5UNjQsIGFtb3VudCwKKyAgICAgIEdTVF9RVUFSSyAoUkFURSksIEdfVFlQRV9ET1VCTEUsIHJhdGUsCisgICAgICBHU1RfUVVBUksgKEZMVVNIKSwgR19UWVBFX0JPT0xFQU4sIGZsdXNoLAorICAgICAgR1NUX1FVQVJLIChJTlRFUk1FRElBVEUpLCBHX1RZUEVfQk9PTEVBTiwgaW50ZXJtZWRpYXRlLAorICAgICAgR1NUX1FVQVJLIChEVVJBVElPTiksIEdfVFlQRV9VSU5UNjQsIGR1cmF0aW9uLAorICAgICAgR1NUX1FVQVJLIChFT1MpLCBHX1RZUEVfQk9PTEVBTiwgZW9zLCBOVUxMKTsKKyAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19jdXN0b20gKEdTVF9NRVNTQUdFX1NURVBfRE9ORSwgc3JjLCBzdHJ1Y3R1cmUpOworCisgIHJldHVybiBtZXNzYWdlOworfQorCisvKioKKyAqIGdzdF9tZXNzYWdlX3BhcnNlX3N0ZXBfZG9uZToKKyAqIEBtZXNzYWdlOiBBIHZhbGlkICNHc3RNZXNzYWdlIG9mIHR5cGUgR1NUX01FU1NBR0VfU1RFUF9ET05FLgorICogQGZvcm1hdDogKG91dCkgKGFsbG93LW5vbmUpOiByZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBmb3JtYXQKKyAqIEBhbW91bnQ6IChvdXQpIChhbGxvdy1ub25lKTogcmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgYW1vdW50CisgKiBAcmF0ZTogKG91dCkgKGFsbG93LW5vbmUpOiByZXN1bHQgbG9jYXRpb24gZm9yIHRoZSByYXRlCisgKiBAZmx1c2g6IChvdXQpIChhbGxvdy1ub25lKTogcmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgZmx1c2ggZmxhZworICogQGludGVybWVkaWF0ZTogKG91dCkgKGFsbG93LW5vbmUpOiByZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBpbnRlcm1lZGlhdGUgZmxhZworICogQGR1cmF0aW9uOiAob3V0KSAoYWxsb3ctbm9uZSk6IHJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIGR1cmF0aW9uCisgKiBAZW9zOiAob3V0KSAoYWxsb3ctbm9uZSk6IHJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIEVPUyBmbGFnCisgKgorICogRXh0cmFjdCB0aGUgdmFsdWVzIHRoZSBzdGVwX2RvbmUgbWVzc2FnZS4KKyAqCisgKiBNVCBzYWZlLgorICoKKyAqIFNpbmNlOiAwLjEwLjI0CisgKi8KK3ZvaWQKK2dzdF9tZXNzYWdlX3BhcnNlX3N0ZXBfZG9uZSAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIEdzdEZvcm1hdCAqIGZvcm1hdCwKKyAgICBndWludDY0ICogYW1vdW50LCBnZG91YmxlICogcmF0ZSwgZ2Jvb2xlYW4gKiBmbHVzaCwgZ2Jvb2xlYW4gKiBpbnRlcm1lZGlhdGUsCisgICAgZ3VpbnQ2NCAqIGR1cmF0aW9uLCBnYm9vbGVhbiAqIGVvcykKK3sKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX01FU1NBR0UgKG1lc3NhZ2UpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfU1RFUF9ET05FKTsKKworICBzdHJ1Y3R1cmUgPSBHU1RfTUVTU0FHRV9TVFJVQ1RVUkUgKG1lc3NhZ2UpOworICBnc3Rfc3RydWN0dXJlX2lkX2dldCAoc3RydWN0dXJlLAorICAgICAgR1NUX1FVQVJLIChGT1JNQVQpLCBHU1RfVFlQRV9GT1JNQVQsIGZvcm1hdCwKKyAgICAgIEdTVF9RVUFSSyAoQU1PVU5UKSwgR19UWVBFX1VJTlQ2NCwgYW1vdW50LAorICAgICAgR1NUX1FVQVJLIChSQVRFKSwgR19UWVBFX0RPVUJMRSwgcmF0ZSwKKyAgICAgIEdTVF9RVUFSSyAoRkxVU0gpLCBHX1RZUEVfQk9PTEVBTiwgZmx1c2gsCisgICAgICBHU1RfUVVBUksgKElOVEVSTUVESUFURSksIEdfVFlQRV9CT09MRUFOLCBpbnRlcm1lZGlhdGUsCisgICAgICBHU1RfUVVBUksgKERVUkFUSU9OKSwgR19UWVBFX1VJTlQ2NCwgZHVyYXRpb24sCisgICAgICBHU1RfUVVBUksgKEVPUyksIEdfVFlQRV9CT09MRUFOLCBlb3MsIE5VTEwpOworfQorCisvKioKKyAqIGdzdF9tZXNzYWdlX25ld19zdGVwX3N0YXJ0OgorICogQHNyYzogVGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4KKyAqIEBhY3RpdmU6IGlmIHRoZSBzdGVwIGlzIGFjdGl2ZSBvciBxdWV1ZWQKKyAqIEBmb3JtYXQ6IHRoZSBmb3JtYXQgb2YgQGFtb3VudAorICogQGFtb3VudDogdGhlIGFtb3VudCBvZiBzdGVwcGVkIGRhdGEKKyAqIEByYXRlOiB0aGUgcmF0ZSBvZiB0aGUgc3RlcHBlZCBhbW91bnQKKyAqIEBmbHVzaDogaXMgdGhpcyBhbiBmbHVzaGluZyBzdGVwCisgKiBAaW50ZXJtZWRpYXRlOiBpcyB0aGlzIGFuIGludGVybWVkaWF0ZSBzdGVwCisgKgorICogVGhpcyBtZXNzYWdlIGlzIHBvc3RlZCBieSBlbGVtZW50cyB3aGVuIHRoZXkgYWNjZXB0IG9yIGFjdGl2YXRlIGEgbmV3IHN0ZXAKKyAqIGV2ZW50IGZvciBAYW1vdW50IGluIEBmb3JtYXQuIAorICoKKyAqIEBhY3RpdmUgaXMgc2V0IHRvIEZBTFNFIHdoZW4gdGhlIGVsZW1lbnQgYWNjZXB0ZWQgdGhlIG5ldyBzdGVwIGV2ZW50IGFuZCBoYXMKKyAqIHF1ZXVlZCBpdCBmb3IgZXhlY3V0aW9uIGluIHRoZSBzdHJlYW1pbmcgdGhyZWFkcy4KKyAqCisgKiBAYWN0aXZlIGlzIHNldCB0byBUUlVFIHdoZW4gdGhlIGVsZW1lbnQgaGFzIGFjdGl2YXRlZCB0aGUgc3RlcCBvcGVyYXRpb24gYW5kCisgKiBpcyBub3cgcmVhZHkgdG8gc3RhcnQgZXhlY3V0aW5nIHRoZSBzdGVwIGluIHRoZSBzdHJlYW1pbmcgdGhyZWFkLiBBZnRlciB0aGlzCisgKiBtZXNzYWdlIGlzIGVtaXRlZCwgdGhlIGFwcGxpY2F0aW9uIGNhbiBxdWV1ZSBhIG5ldyBzdGVwIG9wZXJhdGlvbiBpbiB0aGUKKyAqIGVsZW1lbnQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBUaGUgbmV3IHN0ZXBfc3RhcnQgbWVzc2FnZS4gCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICovCitHc3RNZXNzYWdlICoKK2dzdF9tZXNzYWdlX25ld19zdGVwX3N0YXJ0IChHc3RPYmplY3QgKiBzcmMsIGdib29sZWFuIGFjdGl2ZSwgR3N0Rm9ybWF0IGZvcm1hdCwKKyAgICBndWludDY0IGFtb3VudCwgZ2RvdWJsZSByYXRlLCBnYm9vbGVhbiBmbHVzaCwgZ2Jvb2xlYW4gaW50ZXJtZWRpYXRlKQoreworICBHc3RNZXNzYWdlICptZXNzYWdlOworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX2lkX25ldyAoR1NUX1FVQVJLIChNRVNTQUdFX1NURVBfU1RBUlQpLAorICAgICAgR1NUX1FVQVJLIChBQ1RJVkUpLCBHX1RZUEVfQk9PTEVBTiwgYWN0aXZlLAorICAgICAgR1NUX1FVQVJLIChGT1JNQVQpLCBHU1RfVFlQRV9GT1JNQVQsIGZvcm1hdCwKKyAgICAgIEdTVF9RVUFSSyAoQU1PVU5UKSwgR19UWVBFX1VJTlQ2NCwgYW1vdW50LAorICAgICAgR1NUX1FVQVJLIChSQVRFKSwgR19UWVBFX0RPVUJMRSwgcmF0ZSwKKyAgICAgIEdTVF9RVUFSSyAoRkxVU0gpLCBHX1RZUEVfQk9PTEVBTiwgZmx1c2gsCisgICAgICBHU1RfUVVBUksgKElOVEVSTUVESUFURSksIEdfVFlQRV9CT09MRUFOLCBpbnRlcm1lZGlhdGUsIE5VTEwpOworICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbSAoR1NUX01FU1NBR0VfU1RFUF9TVEFSVCwgc3JjLCBzdHJ1Y3R1cmUpOworCisgIHJldHVybiBtZXNzYWdlOworfQorCisvKioKKyAqIGdzdF9tZXNzYWdlX3BhcnNlX3N0ZXBfc3RhcnQ6CisgKiBAbWVzc2FnZTogQSB2YWxpZCAjR3N0TWVzc2FnZSBvZiB0eXBlIEdTVF9NRVNTQUdFX1NURVBfRE9ORS4KKyAqIEBhY3RpdmU6IChvdXQpIChhbGxvdy1ub25lKTogcmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgYWN0aXZlIGZsYWcKKyAqIEBmb3JtYXQ6IChvdXQpIChhbGxvdy1ub25lKTogcmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgZm9ybWF0CisgKiBAYW1vdW50OiAob3V0KSAoYWxsb3ctbm9uZSk6IHJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIGFtb3VudAorICogQHJhdGU6IChvdXQpIChhbGxvdy1ub25lKTogcmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgcmF0ZQorICogQGZsdXNoOiAob3V0KSAoYWxsb3ctbm9uZSk6IHJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIGZsdXNoIGZsYWcKKyAqIEBpbnRlcm1lZGlhdGU6IChvdXQpIChhbGxvdy1ub25lKTogcmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgaW50ZXJtZWRpYXRlIGZsYWcKKyAqCisgKiBFeHRyYWN0IHRoZSB2YWx1ZXMgZnJvbSBzdGVwX3N0YXJ0IG1lc3NhZ2UuCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICovCit2b2lkCitnc3RfbWVzc2FnZV9wYXJzZV9zdGVwX3N0YXJ0IChHc3RNZXNzYWdlICogbWVzc2FnZSwgZ2Jvb2xlYW4gKiBhY3RpdmUsCisgICAgR3N0Rm9ybWF0ICogZm9ybWF0LCBndWludDY0ICogYW1vdW50LCBnZG91YmxlICogcmF0ZSwgZ2Jvb2xlYW4gKiBmbHVzaCwKKyAgICBnYm9vbGVhbiAqIGludGVybWVkaWF0ZSkKK3sKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX01FU1NBR0UgKG1lc3NhZ2UpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfU1RFUF9TVEFSVCk7CisKKyAgc3RydWN0dXJlID0gR1NUX01FU1NBR0VfU1RSVUNUVVJFIChtZXNzYWdlKTsKKyAgZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKHN0cnVjdHVyZSwKKyAgICAgIEdTVF9RVUFSSyAoQUNUSVZFKSwgR19UWVBFX0JPT0xFQU4sIGFjdGl2ZSwKKyAgICAgIEdTVF9RVUFSSyAoRk9STUFUKSwgR1NUX1RZUEVfRk9STUFULCBmb3JtYXQsCisgICAgICBHU1RfUVVBUksgKEFNT1VOVCksIEdfVFlQRV9VSU5UNjQsIGFtb3VudCwKKyAgICAgIEdTVF9RVUFSSyAoUkFURSksIEdfVFlQRV9ET1VCTEUsIHJhdGUsCisgICAgICBHU1RfUVVBUksgKEZMVVNIKSwgR19UWVBFX0JPT0xFQU4sIGZsdXNoLAorICAgICAgR1NUX1FVQVJLIChJTlRFUk1FRElBVEUpLCBHX1RZUEVfQk9PTEVBTiwgaW50ZXJtZWRpYXRlLCBOVUxMKTsKK30KKworLyoqCisgKiBnc3RfbWVzc2FnZV9uZXdfcW9zOgorICogQHNyYzogVGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4KKyAqIEBsaXZlOiBpZiB0aGUgbWVzc2FnZSB3YXMgZ2VuZXJhdGVkIGJ5IGEgbGl2ZSBlbGVtZW50CisgKiBAcnVubmluZ190aW1lOiB0aGUgcnVubmluZyB0aW1lIG9mIHRoZSBidWZmZXIgdGhhdCBnZW5lcmF0ZWQgdGhlIG1lc3NhZ2UKKyAqIEBzdHJlYW1fdGltZTogdGhlIHN0cmVhbSB0aW1lIG9mIHRoZSBidWZmZXIgdGhhdCBnZW5lcmF0ZWQgdGhlIG1lc3NhZ2UKKyAqIEB0aW1lc3RhbXA6IHRoZSB0aW1lc3RhbXBzIG9mIHRoZSBidWZmZXIgdGhhdCBnZW5lcmF0ZWQgdGhlIG1lc3NhZ2UKKyAqIEBkdXJhdGlvbjogdGhlIGR1cmF0aW9uIG9mIHRoZSBidWZmZXIgdGhhdCBnZW5lcmF0ZWQgdGhlIG1lc3NhZ2UKKyAqCisgKiBBIFFPUyBtZXNzYWdlIGlzIHBvc3RlZCBvbiB0aGUgYnVzIHdoZW5ldmVyIGFuIGVsZW1lbnQgZGVjaWRlcyB0byBkcm9wIGEKKyAqIGJ1ZmZlciBiZWNhdXNlIG9mIFFvUyByZWFzb25zIG9yIHdoZW5ldmVyIGl0IGNoYW5nZXMgaXRzIHByb2Nlc3Npbmcgc3RyYXRlZ3kKKyAqIGJlY2F1c2Ugb2YgUW9TIHJlYXNvbnMgKHF1YWxpdHkgYWRqdXN0bWVudHMgc3VjaCBhcyBwcm9jZXNzaW5nIGF0IGxvd2VyCisgKiBhY2N1cmFjeSkuCisgKgorICogVGhpcyBtZXNzYWdlIGNhbiBiZSBwb3N0ZWQgYnkgYW4gZWxlbWVudCB0aGF0IHBlcmZvcm1zIHN5bmNocm9uaXNhdGlvbiBhZ2FpbnN0IHRoZQorICogY2xvY2sgKGxpdmUpIG9yIGl0IGNvdWxkIGJlIGRyb3BwZWQgYnkgYW4gZWxlbWVudCB0aGF0IHBlcmZvcm1zIFFvUyBiZWNhdXNlIG9mIFFPUworICogZXZlbnRzIHJlY2VpdmVkIGZyb20gYSBkb3duc3RyZWFtIGVsZW1lbnQgKCFsaXZlKS4KKyAqCisgKiBAcnVubmluZ190aW1lLCBAc3RyZWFtX3RpbWUsIEB0aW1lc3RhbXAsIEBkdXJhdGlvbiBzaG91bGQgYmUgc2V0IHRvIHRoZQorICogcmVzcGVjdGl2ZSBydW5uaW5nLXRpbWUsIHN0cmVhbS10aW1lLCB0aW1lc3RhbXAgYW5kIGR1cmF0aW9uIG9mIHRoZSAoZHJvcHBlZCkKKyAqIGJ1ZmZlciB0aGF0IGdlbmVyYXRlZCB0aGUgUW9TIGV2ZW50LiBWYWx1ZXMgY2FuIGJlIGxlZnQgdG8KKyAqIEdTVF9DTE9DS19USU1FX05PTkUgd2hlbiB1bmtub3duLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogVGhlIG5ldyBxb3MgbWVzc2FnZS4KKyAqCisgKiBNVCBzYWZlLgorICoKKyAqIFNpbmNlOiAwLjEwLjI5CisgKi8KK0dzdE1lc3NhZ2UgKgorZ3N0X21lc3NhZ2VfbmV3X3FvcyAoR3N0T2JqZWN0ICogc3JjLCBnYm9vbGVhbiBsaXZlLCBndWludDY0IHJ1bm5pbmdfdGltZSwKKyAgICBndWludDY0IHN0cmVhbV90aW1lLCBndWludDY0IHRpbWVzdGFtcCwgZ3VpbnQ2NCBkdXJhdGlvbikKK3sKKyAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9pZF9uZXcgKEdTVF9RVUFSSyAoTUVTU0FHRV9RT1MpLAorICAgICAgR1NUX1FVQVJLIChMSVZFKSwgR19UWVBFX0JPT0xFQU4sIGxpdmUsCisgICAgICBHU1RfUVVBUksgKFJVTk5JTkdfVElNRSksIEdfVFlQRV9VSU5UNjQsIHJ1bm5pbmdfdGltZSwKKyAgICAgIEdTVF9RVUFSSyAoU1RSRUFNX1RJTUUpLCBHX1RZUEVfVUlOVDY0LCBzdHJlYW1fdGltZSwKKyAgICAgIEdTVF9RVUFSSyAoVElNRVNUQU1QKSwgR19UWVBFX1VJTlQ2NCwgdGltZXN0YW1wLAorICAgICAgR1NUX1FVQVJLIChEVVJBVElPTiksIEdfVFlQRV9VSU5UNjQsIGR1cmF0aW9uLAorICAgICAgR1NUX1FVQVJLIChKSVRURVIpLCBHX1RZUEVfSU5UNjQsIChnaW50NjQpIDAsCisgICAgICBHU1RfUVVBUksgKFBST1BPUlRJT04pLCBHX1RZUEVfRE9VQkxFLCAoZ2RvdWJsZSkgMS4wLAorICAgICAgR1NUX1FVQVJLIChRVUFMSVRZKSwgR19UWVBFX0lOVCwgKGdpbnQpIDEwMDAwMDAsCisgICAgICBHU1RfUVVBUksgKEZPUk1BVCksIEdTVF9UWVBFX0ZPUk1BVCwgR1NUX0ZPUk1BVF9VTkRFRklORUQsCisgICAgICBHU1RfUVVBUksgKFBST0NFU1NFRCksIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSAtIDEsCisgICAgICBHU1RfUVVBUksgKERST1BQRUQpLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgLSAxLCBOVUxMKTsKKyAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19jdXN0b20gKEdTVF9NRVNTQUdFX1FPUywgc3JjLCBzdHJ1Y3R1cmUpOworCisgIHJldHVybiBtZXNzYWdlOworfQorCisvKioKKyAqIGdzdF9tZXNzYWdlX3NldF9xb3NfdmFsdWVzOgorICogQG1lc3NhZ2U6IEEgdmFsaWQgI0dzdE1lc3NhZ2Ugb2YgdHlwZSBHU1RfTUVTU0FHRV9RT1MuCisgKiBAaml0dGVyOiBUaGUgZGlmZmVyZW5jZSBvZiB0aGUgcnVubmluZy10aW1lIGFnYWluc3QgdGhlIGRlYWRsaW5lLgorICogQHByb3BvcnRpb246IExvbmcgdGVybSBwcmVkaWN0aW9uIG9mIHRoZSBpZGVhbCByYXRlIHJlbGF0aXZlIHRvIG5vcm1hbCByYXRlCisgKiB0byBnZXQgb3B0aW1hbCBxdWFsaXR5LgorICogQHF1YWxpdHk6IEFuIGVsZW1lbnQgZGVwZW5kZW50IGludGVnZXIgdmFsdWUgdGhhdCBzcGVjaWZpZXMgdGhlIGN1cnJlbnQKKyAqIHF1YWxpdHkgbGV2ZWwgb2YgdGhlIGVsZW1lbnQuIFRoZSBkZWZhdWx0IG1heGltdW0gcXVhbGl0eSBpcyAxMDAwMDAwLgorICoKKyAqIFNldCB0aGUgUW9TIHZhbHVlcyB0aGF0IGhhdmUgYmVlbiBjYWxjdWxhdGVkL2FuYWx5c2VkIGZyb20gdGhlIFFvUyBkYXRhCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yOQorICovCit2b2lkCitnc3RfbWVzc2FnZV9zZXRfcW9zX3ZhbHVlcyAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIGdpbnQ2NCBqaXR0ZXIsCisgICAgZ2RvdWJsZSBwcm9wb3J0aW9uLCBnaW50IHF1YWxpdHkpCit7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1FPUyk7CisKKyAgc3RydWN0dXJlID0gR1NUX01FU1NBR0VfU1RSVUNUVVJFIChtZXNzYWdlKTsKKyAgZ3N0X3N0cnVjdHVyZV9pZF9zZXQgKHN0cnVjdHVyZSwKKyAgICAgIEdTVF9RVUFSSyAoSklUVEVSKSwgR19UWVBFX0lOVDY0LCBqaXR0ZXIsCisgICAgICBHU1RfUVVBUksgKFBST1BPUlRJT04pLCBHX1RZUEVfRE9VQkxFLCBwcm9wb3J0aW9uLAorICAgICAgR1NUX1FVQVJLIChRVUFMSVRZKSwgR19UWVBFX0lOVCwgcXVhbGl0eSwgTlVMTCk7Cit9CisKKy8qKgorICogZ3N0X21lc3NhZ2Vfc2V0X3Fvc19zdGF0czoKKyAqIEBtZXNzYWdlOiBBIHZhbGlkICNHc3RNZXNzYWdlIG9mIHR5cGUgR1NUX01FU1NBR0VfUU9TLgorICogQGZvcm1hdDogVW5pdHMgb2YgdGhlICdwcm9jZXNzZWQnIGFuZCAnZHJvcHBlZCcgZmllbGRzLiBWaWRlbyBzaW5rcyBhbmQgdmlkZW8KKyAqIGZpbHRlcnMgd2lsbCB1c2UgR1NUX0ZPUk1BVF9CVUZGRVJTIChmcmFtZXMpLiBBdWRpbyBzaW5rcyBhbmQgYXVkaW8gZmlsdGVycworICogd2lsbCBsaWtlbHkgdXNlIEdTVF9GT1JNQVRfREVGQVVMVCAoc2FtcGxlcykuCisgKiBAcHJvY2Vzc2VkOiBUb3RhbCBudW1iZXIgb2YgdW5pdHMgY29ycmVjdGx5IHByb2Nlc3NlZCBzaW5jZSB0aGUgbGFzdCBzdGF0ZQorICogY2hhbmdlIHRvIFJFQURZIG9yIGEgZmx1c2hpbmcgb3BlcmF0aW9uLgorICogQGRyb3BwZWQ6IFRvdGFsIG51bWJlciBvZiB1bml0cyBkcm9wcGVkIHNpbmNlIHRoZSBsYXN0IHN0YXRlIGNoYW5nZSB0byBSRUFEWQorICogb3IgYSBmbHVzaGluZyBvcGVyYXRpb24uCisgKgorICogU2V0IHRoZSBRb1Mgc3RhdHMgcmVwcmVzZW50aW5nIHRoZSBoaXN0b3J5IG9mIHRoZSBjdXJyZW50IGNvbnRpbnVvdXMgcGlwZWxpbmUKKyAqIHBsYXliYWNrIHBlcmlvZC4KKyAqCisgKiBXaGVuIEBmb3JtYXQgaXMgQEdTVF9GT1JNQVRfVU5ERUZJTkVEIGJvdGggQGRyb3BwZWQgYW5kIEBwcm9jZXNzZWQgYXJlCisgKiBpbnZhbGlkLiBWYWx1ZXMgb2YgLTEgZm9yIGVpdGhlciBAcHJvY2Vzc2VkIG9yIEBkcm9wcGVkIG1lYW4gdW5rbm93biB2YWx1ZXMuCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yOQorICovCit2b2lkCitnc3RfbWVzc2FnZV9zZXRfcW9zX3N0YXRzIChHc3RNZXNzYWdlICogbWVzc2FnZSwgR3N0Rm9ybWF0IGZvcm1hdCwKKyAgICBndWludDY0IHByb2Nlc3NlZCwgZ3VpbnQ2NCBkcm9wcGVkKQoreworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfTUVTU0FHRSAobWVzc2FnZSkpOworICBnX3JldHVybl9pZl9mYWlsIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9RT1MpOworCisgIHN0cnVjdHVyZSA9IEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSk7CisgIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0IChzdHJ1Y3R1cmUsCisgICAgICBHU1RfUVVBUksgKEZPUk1BVCksIEdTVF9UWVBFX0ZPUk1BVCwgZm9ybWF0LAorICAgICAgR1NUX1FVQVJLIChQUk9DRVNTRUQpLCBHX1RZUEVfVUlOVDY0LCBwcm9jZXNzZWQsCisgICAgICBHU1RfUVVBUksgKERST1BQRUQpLCBHX1RZUEVfVUlOVDY0LCBkcm9wcGVkLCBOVUxMKTsKK30KKworLyoqCisgKiBnc3RfbWVzc2FnZV9wYXJzZV9xb3M6CisgKiBAbWVzc2FnZTogQSB2YWxpZCAjR3N0TWVzc2FnZSBvZiB0eXBlIEdTVF9NRVNTQUdFX1FPUy4KKyAqIEBsaXZlOiAob3V0KSAoYWxsb3ctbm9uZSk6IGlmIHRoZSBtZXNzYWdlIHdhcyBnZW5lcmF0ZWQgYnkgYSBsaXZlIGVsZW1lbnQKKyAqIEBydW5uaW5nX3RpbWU6IChvdXQpIChhbGxvdy1ub25lKTogdGhlIHJ1bm5pbmcgdGltZSBvZiB0aGUgYnVmZmVyIHRoYXQKKyAqICAgICBnZW5lcmF0ZWQgdGhlIG1lc3NhZ2UKKyAqIEBzdHJlYW1fdGltZTogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgc3RyZWFtIHRpbWUgb2YgdGhlIGJ1ZmZlciB0aGF0CisgKiAgICAgZ2VuZXJhdGVkIHRoZSBtZXNzYWdlCisgKiBAdGltZXN0YW1wOiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSB0aW1lc3RhbXBzIG9mIHRoZSBidWZmZXIgdGhhdAorICogICAgIGdlbmVyYXRlZCB0aGUgbWVzc2FnZQorICogQGR1cmF0aW9uOiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBkdXJhdGlvbiBvZiB0aGUgYnVmZmVyIHRoYXQKKyAqICAgICBnZW5lcmF0ZWQgdGhlIG1lc3NhZ2UKKyAqCisgKiBFeHRyYWN0IHRoZSB0aW1lc3RhbXBzIGFuZCBsaXZlIHN0YXR1cyBmcm9tIHRoZSBRb1MgbWVzc2FnZS4KKyAqCisgKiBUaGUgcmV0dXJuZWQgdmFsdWVzIGdpdmUgdGhlIHJ1bm5pbmdfdGltZSwgc3RyZWFtX3RpbWUsIHRpbWVzdGFtcCBhbmQKKyAqIGR1cmF0aW9uIG9mIHRoZSBkcm9wcGVkIGJ1ZmZlci4gVmFsdWVzIG9mIEdTVF9DTE9DS19USU1FX05PTkUgbWVhbiB1bmtub3duCisgKiB2YWx1ZXMuCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yOQorICovCit2b2lkCitnc3RfbWVzc2FnZV9wYXJzZV9xb3MgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBnYm9vbGVhbiAqIGxpdmUsCisgICAgZ3VpbnQ2NCAqIHJ1bm5pbmdfdGltZSwgZ3VpbnQ2NCAqIHN0cmVhbV90aW1lLCBndWludDY0ICogdGltZXN0YW1wLAorICAgIGd1aW50NjQgKiBkdXJhdGlvbikKK3sKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX01FU1NBR0UgKG1lc3NhZ2UpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfUU9TKTsKKworICBzdHJ1Y3R1cmUgPSBHU1RfTUVTU0FHRV9TVFJVQ1RVUkUgKG1lc3NhZ2UpOworICBnc3Rfc3RydWN0dXJlX2lkX2dldCAoc3RydWN0dXJlLAorICAgICAgR1NUX1FVQVJLIChMSVZFKSwgR19UWVBFX0JPT0xFQU4sIGxpdmUsCisgICAgICBHU1RfUVVBUksgKFJVTk5JTkdfVElNRSksIEdfVFlQRV9VSU5UNjQsIHJ1bm5pbmdfdGltZSwKKyAgICAgIEdTVF9RVUFSSyAoU1RSRUFNX1RJTUUpLCBHX1RZUEVfVUlOVDY0LCBzdHJlYW1fdGltZSwKKyAgICAgIEdTVF9RVUFSSyAoVElNRVNUQU1QKSwgR19UWVBFX1VJTlQ2NCwgdGltZXN0YW1wLAorICAgICAgR1NUX1FVQVJLIChEVVJBVElPTiksIEdfVFlQRV9VSU5UNjQsIGR1cmF0aW9uLCBOVUxMKTsKK30KKworLyoqCisgKiBnc3RfbWVzc2FnZV9wYXJzZV9xb3NfdmFsdWVzOgorICogQG1lc3NhZ2U6IEEgdmFsaWQgI0dzdE1lc3NhZ2Ugb2YgdHlwZSBHU1RfTUVTU0FHRV9RT1MuCisgKiBAaml0dGVyOiAob3V0KSAoYWxsb3ctbm9uZSk6IFRoZSBkaWZmZXJlbmNlIG9mIHRoZSBydW5uaW5nLXRpbWUgYWdhaW5zdAorICogICAgIHRoZSBkZWFkbGluZS4KKyAqIEBwcm9wb3J0aW9uOiAob3V0KSAoYWxsb3ctbm9uZSk6IExvbmcgdGVybSBwcmVkaWN0aW9uIG9mIHRoZSBpZGVhbCByYXRlCisgKiAgICAgcmVsYXRpdmUgdG8gbm9ybWFsIHJhdGUgdG8gZ2V0IG9wdGltYWwgcXVhbGl0eS4KKyAqIEBxdWFsaXR5OiAob3V0KSAoYWxsb3ctbm9uZSk6IEFuIGVsZW1lbnQgZGVwZW5kZW50IGludGVnZXIgdmFsdWUgdGhhdAorICogICAgIHNwZWNpZmllcyB0aGUgY3VycmVudCBxdWFsaXR5IGxldmVsIG9mIHRoZSBlbGVtZW50LiBUaGUgZGVmYXVsdAorICogICAgIG1heGltdW0gcXVhbGl0eSBpcyAxMDAwMDAwLgorICoKKyAqIEV4dHJhY3QgdGhlIFFvUyB2YWx1ZXMgdGhhdCBoYXZlIGJlZW4gY2FsY3VsYXRlZC9hbmFseXNlZCBmcm9tIHRoZSBRb1MgZGF0YQorICoKKyAqIE1UIHNhZmUuCisgKgorICogU2luY2U6IDAuMTAuMjkKKyAqLwordm9pZAorZ3N0X21lc3NhZ2VfcGFyc2VfcW9zX3ZhbHVlcyAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIGdpbnQ2NCAqIGppdHRlciwKKyAgICBnZG91YmxlICogcHJvcG9ydGlvbiwgZ2ludCAqIHF1YWxpdHkpCit7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1FPUyk7CisKKyAgc3RydWN0dXJlID0gR1NUX01FU1NBR0VfU1RSVUNUVVJFIChtZXNzYWdlKTsKKyAgZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKHN0cnVjdHVyZSwKKyAgICAgIEdTVF9RVUFSSyAoSklUVEVSKSwgR19UWVBFX0lOVDY0LCBqaXR0ZXIsCisgICAgICBHU1RfUVVBUksgKFBST1BPUlRJT04pLCBHX1RZUEVfRE9VQkxFLCBwcm9wb3J0aW9uLAorICAgICAgR1NUX1FVQVJLIChRVUFMSVRZKSwgR19UWVBFX0lOVCwgcXVhbGl0eSwgTlVMTCk7Cit9CisKKy8qKgorICogZ3N0X21lc3NhZ2VfcGFyc2VfcW9zX3N0YXRzOgorICogQG1lc3NhZ2U6IEEgdmFsaWQgI0dzdE1lc3NhZ2Ugb2YgdHlwZSBHU1RfTUVTU0FHRV9RT1MuCisgKiBAZm9ybWF0OiAob3V0KSAoYWxsb3ctbm9uZSk6IFVuaXRzIG9mIHRoZSAncHJvY2Vzc2VkJyBhbmQgJ2Ryb3BwZWQnIGZpZWxkcy4KKyAqICAgICBWaWRlbyBzaW5rcyBhbmQgdmlkZW8gZmlsdGVycyB3aWxsIHVzZSBHU1RfRk9STUFUX0JVRkZFUlMgKGZyYW1lcykuCisgKiAgICAgQXVkaW8gc2lua3MgYW5kIGF1ZGlvIGZpbHRlcnMgd2lsbCBsaWtlbHkgdXNlIEdTVF9GT1JNQVRfREVGQVVMVAorICogICAgIChzYW1wbGVzKS4KKyAqIEBwcm9jZXNzZWQ6IChvdXQpIChhbGxvdy1ub25lKTogVG90YWwgbnVtYmVyIG9mIHVuaXRzIGNvcnJlY3RseSBwcm9jZXNzZWQKKyAqICAgICBzaW5jZSB0aGUgbGFzdCBzdGF0ZSBjaGFuZ2UgdG8gUkVBRFkgb3IgYSBmbHVzaGluZyBvcGVyYXRpb24uCisgKiBAZHJvcHBlZDogKG91dCkgKGFsbG93LW5vbmUpOiBUb3RhbCBudW1iZXIgb2YgdW5pdHMgZHJvcHBlZCBzaW5jZSB0aGUgbGFzdAorICogICAgIHN0YXRlIGNoYW5nZSB0byBSRUFEWSBvciBhIGZsdXNoaW5nIG9wZXJhdGlvbi4KKyAqCisgKiBFeHRyYWN0IHRoZSBRb1Mgc3RhdHMgcmVwcmVzZW50aW5nIHRoZSBoaXN0b3J5IG9mIHRoZSBjdXJyZW50IGNvbnRpbnVvdXMKKyAqIHBpcGVsaW5lIHBsYXliYWNrIHBlcmlvZC4KKyAqCisgKiBXaGVuIEBmb3JtYXQgaXMgQEdTVF9GT1JNQVRfVU5ERUZJTkVEIGJvdGggQGRyb3BwZWQgYW5kIEBwcm9jZXNzZWQgYXJlCisgKiBpbnZhbGlkLiBWYWx1ZXMgb2YgLTEgZm9yIGVpdGhlciBAcHJvY2Vzc2VkIG9yIEBkcm9wcGVkIG1lYW4gdW5rbm93biB2YWx1ZXMuCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yOQorICovCit2b2lkCitnc3RfbWVzc2FnZV9wYXJzZV9xb3Nfc3RhdHMgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHc3RGb3JtYXQgKiBmb3JtYXQsCisgICAgZ3VpbnQ2NCAqIHByb2Nlc3NlZCwgZ3VpbnQ2NCAqIGRyb3BwZWQpCit7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1FPUyk7CisKKyAgc3RydWN0dXJlID0gR1NUX01FU1NBR0VfU1RSVUNUVVJFIChtZXNzYWdlKTsKKyAgZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKHN0cnVjdHVyZSwKKyAgICAgIEdTVF9RVUFSSyAoRk9STUFUKSwgR1NUX1RZUEVfRk9STUFULCBmb3JtYXQsCisgICAgICBHU1RfUVVBUksgKFBST0NFU1NFRCksIEdfVFlQRV9VSU5UNjQsIHByb2Nlc3NlZCwKKyAgICAgIEdTVF9RVUFSSyAoRFJPUFBFRCksIEdfVFlQRV9VSU5UNjQsIGRyb3BwZWQsIE5VTEwpOworfQorCisvKioKKyAqIGdzdF9tZXNzYWdlX25ld19wcm9ncmVzczoKKyAqIEBzcmM6IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuCisgKiBAdHlwZTogYSAjR3N0UHJvZ3Jlc3NUeXBlCisgKiBAY29kZTogYSBwcm9ncmVzcyBjb2RlCisgKiBAdGV4dDogZnJlZSwgdXNlciB2aXNpYmxlIHRleHQgZGVzY3JpYmluZyB0aGUgcHJvZ3Jlc3MKKyAqCisgKiBQcm9ncmVzcyBtZXNzYWdlcyBhcmUgcG9zdGVkIGJ5IGVsZW1lbnRzIHdoZW4gdGhleSB1c2UgYW4gYXN5bmNocm9ub3VzIHRhc2sKKyAqIHRvIHBlcmZvcm0gYWN0aW9ucyB0cmlnZ2VyZWQgYnkgYSBzdGF0ZSBjaGFuZ2UuCisgKgorICogQGNvZGUgY29udGFpbnMgYSB3ZWxsIGRlZmluZWQgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGFjdGlvbi4KKyAqIEB0ZXN0IHNob3VsZCBjb250YWluIGEgdXNlciB2aXNpYmxlIHN0cmluZyBkZXRhaWxpbmcgdGhlIGN1cnJlbnQgYWN0aW9uLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogVGhlIG5ldyBxb3MgbWVzc2FnZS4KKyAqCisgKiBTaW5jZTogMC4xMC4zMworICovCitHc3RNZXNzYWdlICoKK2dzdF9tZXNzYWdlX25ld19wcm9ncmVzcyAoR3N0T2JqZWN0ICogc3JjLCBHc3RQcm9ncmVzc1R5cGUgdHlwZSwKKyAgICBjb25zdCBnY2hhciAqIGNvZGUsIGNvbnN0IGdjaGFyICogdGV4dCkKK3sKKyAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisgIGdpbnQgcGVyY2VudCA9IDEwMCwgdGltZW91dCA9IC0xOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChjb2RlICE9IE5VTEwsIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAodGV4dCAhPSBOVUxMLCBOVUxMKTsKKworICBpZiAodHlwZSA9PSBHU1RfUFJPR1JFU1NfVFlQRV9TVEFSVCB8fCB0eXBlID09IEdTVF9QUk9HUkVTU19UWVBFX0NPTlRJTlVFKQorICAgIHBlcmNlbnQgPSAwOworCisgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfbmV3IChHU1RfUVVBUksgKE1FU1NBR0VfUFJPR1JFU1MpLAorICAgICAgR1NUX1FVQVJLIChUWVBFKSwgR1NUX1RZUEVfUFJPR1JFU1NfVFlQRSwgdHlwZSwKKyAgICAgIEdTVF9RVUFSSyAoQ09ERSksIEdfVFlQRV9TVFJJTkcsIGNvZGUsCisgICAgICBHU1RfUVVBUksgKFRFWFQpLCBHX1RZUEVfU1RSSU5HLCB0ZXh0LAorICAgICAgR1NUX1FVQVJLIChQRVJDRU5UKSwgR19UWVBFX0lOVCwgcGVyY2VudCwKKyAgICAgIEdTVF9RVUFSSyAoVElNRU9VVCksIEdfVFlQRV9JTlQsIHRpbWVvdXQsIE5VTEwpOworICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbSAoR1NUX01FU1NBR0VfUFJPR1JFU1MsIHNyYywgc3RydWN0dXJlKTsKKworICByZXR1cm4gbWVzc2FnZTsKK30KKworLyoqCisgKiBnc3RfbWVzc2FnZV9wYXJzZV9wcm9ncmVzczoKKyAqIEBtZXNzYWdlOiBBIHZhbGlkICNHc3RNZXNzYWdlIG9mIHR5cGUgR1NUX01FU1NBR0VfUFJPR1JFU1MuCisgKiBAdHlwZTogKG91dCkgKGFsbG93LW5vbmUpOiBsb2NhdGlvbiBmb3IgdGhlIHR5cGUKKyAqIEBjb2RlOiAob3V0KSAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIGZ1bGwpOiBsb2NhdGlvbiBmb3IgdGhlIGNvZGUKKyAqIEB0ZXh0OiAob3V0KSAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIGZ1bGwpOiBsb2NhdGlvbiBmb3IgdGhlIHRleHQKKyAqCisgKiBQYXJzZXMgdGhlIHByb2dyZXNzIEB0eXBlLCBAY29kZSBhbmQgQHRleHQuCisgKgorICogU2luY2U6IDAuMTAuMzMKKyAqLwordm9pZAorZ3N0X21lc3NhZ2VfcGFyc2VfcHJvZ3Jlc3MgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHc3RQcm9ncmVzc1R5cGUgKiB0eXBlLAorICAgIGdjaGFyICoqIGNvZGUsIGdjaGFyICoqIHRleHQpCit7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1BST0dSRVNTKTsKKworICBzdHJ1Y3R1cmUgPSBHU1RfTUVTU0FHRV9TVFJVQ1RVUkUgKG1lc3NhZ2UpOworICBnc3Rfc3RydWN0dXJlX2lkX2dldCAoc3RydWN0dXJlLAorICAgICAgR1NUX1FVQVJLIChUWVBFKSwgR1NUX1RZUEVfUFJPR1JFU1NfVFlQRSwgdHlwZSwKKyAgICAgIEdTVF9RVUFSSyAoQ09ERSksIEdfVFlQRV9TVFJJTkcsIGNvZGUsCisgICAgICBHU1RfUVVBUksgKFRFWFQpLCBHX1RZUEVfU1RSSU5HLCB0ZXh0LCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL2dzdC9nc3RtZXNzYWdlLmggYi9nc3QvZ3N0bWVzc2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MGJlNjcKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0bWVzc2FnZS5oCkBAIC0wLDAgKzEsNTQ5IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNCBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgorICoKKyAqIGdzdG1lc3NhZ2UuaDogSGVhZGVyIGZvciBHc3RNZXNzYWdlIHN1YnN5c3RlbQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19HU1RfTUVTU0FHRV9IX18KKyNkZWZpbmUgX19HU1RfTUVTU0FHRV9IX18KKworR19CRUdJTl9ERUNMUworCit0eXBlZGVmIHN0cnVjdCBfR3N0TWVzc2FnZSBHc3RNZXNzYWdlOworCisvKioKKyAqIEdzdE1lc3NhZ2VUeXBlOgorICogQEdTVF9NRVNTQUdFX1VOS05PV046IGFuIHVuZGVmaW5lZCBtZXNzYWdlCisgKiBAR1NUX01FU1NBR0VfRU9TOiBlbmQtb2Ytc3RyZWFtIHJlYWNoZWQgaW4gYSBwaXBlbGluZS4gVGhlIGFwcGxpY2F0aW9uIHdpbGwKKyAqIG9ubHkgcmVjZWl2ZSB0aGlzIG1lc3NhZ2UgaW4gdGhlIFBMQVlJTkcgc3RhdGUgYW5kIGV2ZXJ5IHRpbWUgaXQgc2V0cyBhCisgKiBwaXBlbGluZSB0byBQTEFZSU5HIHRoYXQgaXMgaW4gdGhlIEVPUyBzdGF0ZS4gVGhlIGFwcGxpY2F0aW9uIGNhbiBwZXJmb3JtIGEKKyAqIGZsdXNoaW5nIHNlZWsgaW4gdGhlIHBpcGVsaW5lLCB3aGljaCB3aWxsIHVuZG8gdGhlIEVPUyBzdGF0ZSBhZ2Fpbi4KKyAqIEBHU1RfTUVTU0FHRV9FUlJPUjogYW4gZXJyb3Igb2NjdXJlZC4gV2hlbiB0aGUgYXBwbGljYXRpb24gcmVjZWl2ZXMgYW4gZXJyb3IKKyAqIG1lc3NhZ2UgaXQgc2hvdWxkIHN0b3AgcGxheWJhY2sgb2YgdGhlIHBpcGVsaW5lIGFuZCBub3QgYXNzdW1lIHRoYXQgbW9yZQorICogZGF0YSB3aWxsIGJlIHBsYXllZC4KKyAqIEBHU1RfTUVTU0FHRV9XQVJOSU5HOiBhIHdhcm5pbmcgb2NjdXJlZC4KKyAqIEBHU1RfTUVTU0FHRV9JTkZPOiBhbiBpbmZvIG1lc3NhZ2Ugb2NjdXJlZAorICogQEdTVF9NRVNTQUdFX1RBRzogYSB0YWcgd2FzIGZvdW5kLgorICogQEdTVF9NRVNTQUdFX0JVRkZFUklORzogdGhlIHBpcGVsaW5lIGlzIGJ1ZmZlcmluZy4gV2hlbiB0aGUgYXBwbGljYXRpb24KKyAqIHJlY2VpdmVzIGEgYnVmZmVyaW5nIG1lc3NhZ2UgaW4gdGhlIFBMQVlJTkcgc3RhdGUgZm9yIGEgbm9uLWxpdmUgcGlwZWxpbmUgaXQKKyAqIG11c3QgUEFVU0UgdGhlIHBpcGVsaW5lIHVudGlsIHRoZSBidWZmZXJpbmcgY29tcGxldGVzLCB3aGVuIHRoZSBwZXJjZW50YWdlCisgKiBmaWVsZCBpbiB0aGUgbWVzc2FnZSBpcyAxMDAlLiBGb3IgbGl2ZSBwaXBlbGluZXMsIG5vIGFjdGlvbiBtdXN0IGJlCisgKiBwZXJmb3JtZWQgYW5kIHRoZSBidWZmZXJpbmcgcGVyY2VudGFnZSBjYW4gYmUgdXNlZCB0byBpbmZvcm0gdGhlIHVzZXIgYWJvdXQKKyAqIHRoZSBwcm9ncmVzcy4KKyAqIEBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEOiBhIHN0YXRlIGNoYW5nZSBoYXBwZW5lZAorICogQEdTVF9NRVNTQUdFX1NUQVRFX0RJUlRZOiBhbiBlbGVtZW50IGNoYW5nZWQgc3RhdGUgaW4gYSBzdHJlYW1pbmcgdGhyZWFkLgorICogVGhpcyBtZXNzYWdlIGlzIGRlcHJlY2F0ZWQuCisgKiBAR1NUX01FU1NBR0VfU1RFUF9ET05FOiBhIHN0ZXBwaW5nIG9wZXJhdGlvbiBmaW5pc2hlZC4KKyAqIEBHU1RfTUVTU0FHRV9DTE9DS19QUk9WSURFOiBhbiBlbGVtZW50IG5vdGlmaWVzIGl0cyBjYXBhYmlsaXR5IG9mIHByb3ZpZGluZworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgY2xvY2suIFRoaXMgbWVzc2FnZSBpcyB1c2VkIGludGVybmFsbHkgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV2ZXIgZm9yd2FyZGVkIHRvIHRoZSBhcHBsaWNhdGlvbi4KKyAqIEBHU1RfTUVTU0FHRV9DTE9DS19MT1NUOiBUaGUgY3VycmVudCBjbG9jayBhcyBzZWxlY3RlZCBieSB0aGUgcGlwZWxpbmUgYmVjYW1lCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdW51c2FibGUuIFRoZSBwaXBlbGluZSB3aWxsIHNlbGVjdCBhIG5ldyBjbG9jayBvbgorICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBuZXh0IFBMQVlJTkcgc3RhdGUgY2hhbmdlLiBUaGUgYXBwbGljYXRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgc2V0IHRoZSBwaXBlbGluZSB0byBQQVVTRUQgYW5kIGJhY2sgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBQTEFZSU5HIHdoZW4gdGhpcyBtZXNzYWdlIGlzIHJlY2VpdmVkLgorICogQEdTVF9NRVNTQUdFX05FV19DTE9DSzogYSBuZXcgY2xvY2sgd2FzIHNlbGVjdGVkIGluIHRoZSBwaXBlbGluZS4KKyAqIEBHU1RfTUVTU0FHRV9TVFJVQ1RVUkVfQ0hBTkdFOiB0aGUgc3RydWN0dXJlIG9mIHRoZSBwaXBlbGluZSBjaGFuZ2VkLiBUaGlzCisgKiBtZXNzYWdlIGlzIHVzZWQgaW50ZXJuYWxseSBhbmQgbmV2ZXIgZm9yd2FyZGVkIHRvIHRoZSBhcHBsaWNhdGlvbi4KKyAqIEBHU1RfTUVTU0FHRV9TVFJFQU1fU1RBVFVTOiBzdGF0dXMgYWJvdXQgYSBzdHJlYW0sIGVtaXR0ZWQgd2hlbiBpdCBzdGFydHMsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcHMsIGVycm9ycywgZXRjLi4KKyAqIEBHU1RfTUVTU0FHRV9BUFBMSUNBVElPTjogbWVzc2FnZSBwb3N0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLCBwb3NzaWJseQorICogICAgICAgICAgICAgICAgICAgICAgICAgICB2aWEgYW4gYXBwbGljYXRpb24tc3BlY2lmaWMgZWxlbWVudC4KKyAqIEBHU1RfTUVTU0FHRV9FTEVNRU5UOiBlbGVtZW50LXNwZWNpZmljIG1lc3NhZ2UsIHNlZSB0aGUgc3BlY2lmaWMgZWxlbWVudCdzCisgKiAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRhdGlvbgorICogQEdTVF9NRVNTQUdFX1NFR01FTlRfU1RBUlQ6IHBpcGVsaW5lIHN0YXJ0ZWQgcGxheWJhY2sgb2YgYSBzZWdtZW50LiBUaGlzCisgKiBtZXNzYWdlIGlzIHVzZWQgaW50ZXJuYWxseSBhbmQgbmV2ZXIgZm9yd2FyZGVkIHRvIHRoZSBhcHBsaWNhdGlvbi4KKyAqIEBHU1RfTUVTU0FHRV9TRUdNRU5UX0RPTkU6IHBpcGVsaW5lIGNvbXBsZXRlZCBwbGF5YmFjayBvZiBhIHNlZ21lbnQuIFRoaXMKKyAqIG1lc3NhZ2UgaXMgZm9yd2FyZGVkIHRvIHRoZSBhcHBsaWNhdGlvbiBhZnRlciBhbGwgZWxlbWVudHMgdGhhdCBwb3N0ZWQKKyAqIEBHU1RfTUVTU0FHRV9TRUdNRU5UX1NUQVJUIHBvc3RlZCBhIEdTVF9NRVNTQUdFX1NFR01FTlRfRE9ORSBtZXNzYWdlLgorICogQEdTVF9NRVNTQUdFX0RVUkFUSU9OOiBUaGUgZHVyYXRpb24gb2YgYSBwaXBlbGluZSBjaGFuZ2VkLiBUaGUgYXBwbGljYXRpb24KKyAqIGNhbiBnZXQgdGhlIG5ldyBkdXJhdGlvbiB3aXRoIGEgZHVyYXRpb24gcXVlcnkuCisgKiBAR1NUX01FU1NBR0VfQVNZTkNfU1RBUlQ6IFBvc3RlZCBieSBlbGVtZW50cyB3aGVuIHRoZXkgc3RhcnQgYW4gQVNZTkMKKyAqICNHc3RTdGF0ZUNoYW5nZS4gVGhpcyBtZXNzYWdlIGlzIG5vdCBmb3J3YXJkZWQgdG8gdGhlIGFwcGxpY2F0aW9uIGJ1dCBpcyB1c2VkCisgKiBpbnRlcm5hbGx5LiBTaW5jZTogMC4xMC4xMy4KKyAqIEBHU1RfTUVTU0FHRV9BU1lOQ19ET05FOiBQb3N0ZWQgYnkgZWxlbWVudHMgd2hlbiB0aGV5IGNvbXBsZXRlIGFuIEFTWU5DCisgKiAjR3N0U3RhdGVDaGFuZ2UuIFRoZSBhcHBsaWNhdGlvbiB3aWxsIG9ubHkgcmVjZWl2ZSB0aGlzIG1lc3NhZ2UgZnJvbSB0aGUgdG9wbGV2ZWwKKyAqIHBpcGVsaW5lLiBTaW5jZTogMC4xMC4xMworICogQEdTVF9NRVNTQUdFX0xBVEVOQ1k6IFBvc3RlZCBieSBlbGVtZW50cyB3aGVuIHRoZWlyIGxhdGVuY3kgY2hhbmdlcy4gVGhlCisgKiBhcHBsaWNhdGlvbiBzaG91bGQgcmVjYWxjdWxhdGUgYW5kIGRpc3RyaWJ1dGUgYSBuZXcgbGF0ZW5jeS4gU2luY2U6IDAuMTAuMTIKKyAqIEBHU1RfTUVTU0FHRV9SRVFVRVNUX1NUQVRFOiBQb3N0ZWQgYnkgZWxlbWVudHMgd2hlbiB0aGV5IHdhbnQgdGhlIHBpcGVsaW5lIHRvCisgKiBjaGFuZ2Ugc3RhdGUuIFRoaXMgbWVzc2FnZSBpcyBhIHN1Z2dlc3Rpb24gdG8gdGhlIGFwcGxpY2F0aW9uIHdoaWNoIGNhbgorICogZGVjaWRlIHRvIHBlcmZvcm0gdGhlIHN0YXRlIGNoYW5nZSBvbiAocGFydCBvZikgdGhlIHBpcGVsaW5lLiBTaW5jZTogMC4xMC4yMy4KKyAqIEBHU1RfTUVTU0FHRV9TVEVQX1NUQVJUOiBBIHN0ZXBwaW5nIG9wZXJhdGlvbiB3YXMgc3RhcnRlZC4gU2luY2U6IDAuMTAuMjQKKyAqIEBHU1RfTUVTU0FHRV9RT1M6IEEgYnVmZmVyIHdhcyBkcm9wcGVkIG9yIGFuIGVsZW1lbnQgY2hhbmdlZCBpdHMgcHJvY2Vzc2luZworICogc3RyYXRlZ3kgZm9yIFF1YWxpdHkgb2YgU2VydmljZSByZWFzb25zLiBTaW5jZTogMC4xMC4yOQorICogQEdTVF9NRVNTQUdFX1BST0dSRVNTOiBBIHByb2dyZXNzIG1lc3NhZ2UuIFNpbmNlOiAwLjEwLjMzCisgKiBAR1NUX01FU1NBR0VfQU5ZOiBtYXNrIGZvciBhbGwgb2YgdGhlIGFib3ZlIG1lc3NhZ2VzLgorICoKKyAqIFRoZSBkaWZmZXJlbnQgbWVzc2FnZSB0eXBlcyB0aGF0IGFyZSBhdmFpbGFibGUuCisgKi8KKy8qIE5PVEU6IGtlZXAgaW4gc3luYyB3aXRoIHF1YXJrIHJlZ2lzdHJhdGlvbiBpbiBnc3RtZXNzYWdlLmMKKyAqIE5PVEU6IGtlZXAgR1NUX01FU1NBR0VfQU5ZIGEgdmFsaWQgZ2ludCB0byBhdm9pZCBjb21waWxlciB3YXJuaW5ncy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisgIEdTVF9NRVNTQUdFX1VOS05PV04gICAgICAgICAgID0gMCwKKyAgR1NUX01FU1NBR0VfRU9TICAgICAgICAgICAgICAgPSAoMSA8PCAwKSwKKyAgR1NUX01FU1NBR0VfRVJST1IgICAgICAgICAgICAgPSAoMSA8PCAxKSwKKyAgR1NUX01FU1NBR0VfV0FSTklORyAgICAgICAgICAgPSAoMSA8PCAyKSwKKyAgR1NUX01FU1NBR0VfSU5GTyAgICAgICAgICAgICAgPSAoMSA8PCAzKSwKKyAgR1NUX01FU1NBR0VfVEFHICAgICAgICAgICAgICAgPSAoMSA8PCA0KSwKKyAgR1NUX01FU1NBR0VfQlVGRkVSSU5HICAgICAgICAgPSAoMSA8PCA1KSwKKyAgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCAgICAgPSAoMSA8PCA2KSwKKyAgR1NUX01FU1NBR0VfU1RBVEVfRElSVFkgICAgICAgPSAoMSA8PCA3KSwKKyAgR1NUX01FU1NBR0VfU1RFUF9ET05FICAgICAgICAgPSAoMSA8PCA4KSwKKyAgR1NUX01FU1NBR0VfQ0xPQ0tfUFJPVklERSAgICAgPSAoMSA8PCA5KSwKKyAgR1NUX01FU1NBR0VfQ0xPQ0tfTE9TVCAgICAgICAgPSAoMSA8PCAxMCksCisgIEdTVF9NRVNTQUdFX05FV19DTE9DSyAgICAgICAgID0gKDEgPDwgMTEpLAorICBHU1RfTUVTU0FHRV9TVFJVQ1RVUkVfQ0hBTkdFICA9ICgxIDw8IDEyKSwKKyAgR1NUX01FU1NBR0VfU1RSRUFNX1NUQVRVUyAgICAgPSAoMSA8PCAxMyksCisgIEdTVF9NRVNTQUdFX0FQUExJQ0FUSU9OICAgICAgID0gKDEgPDwgMTQpLAorICBHU1RfTUVTU0FHRV9FTEVNRU5UICAgICAgICAgICA9ICgxIDw8IDE1KSwKKyAgR1NUX01FU1NBR0VfU0VHTUVOVF9TVEFSVCAgICAgPSAoMSA8PCAxNiksCisgIEdTVF9NRVNTQUdFX1NFR01FTlRfRE9ORSAgICAgID0gKDEgPDwgMTcpLAorICBHU1RfTUVTU0FHRV9EVVJBVElPTiAgICAgICAgICA9ICgxIDw8IDE4KSwKKyAgR1NUX01FU1NBR0VfTEFURU5DWSAgICAgICAgICAgPSAoMSA8PCAxOSksCisgIEdTVF9NRVNTQUdFX0FTWU5DX1NUQVJUICAgICAgID0gKDEgPDwgMjApLAorICBHU1RfTUVTU0FHRV9BU1lOQ19ET05FICAgICAgICA9ICgxIDw8IDIxKSwKKyAgR1NUX01FU1NBR0VfUkVRVUVTVF9TVEFURSAgICAgPSAoMSA8PCAyMiksCisgIEdTVF9NRVNTQUdFX1NURVBfU1RBUlQgICAgICAgID0gKDEgPDwgMjMpLAorICBHU1RfTUVTU0FHRV9RT1MgICAgICAgICAgICAgICA9ICgxIDw8IDI0KSwKKyAgR1NUX01FU1NBR0VfUFJPR1JFU1MgICAgICAgICAgPSAoMSA8PCAyNSksCisgIEdTVF9NRVNTQUdFX0FOWSAgICAgICAgICAgICAgID0gfjAKK30gR3N0TWVzc2FnZVR5cGU7CisKKyNpbmNsdWRlIDxnc3QvZ3N0bWluaW9iamVjdC5oPgorI2luY2x1ZGUgPGdzdC9nc3RvYmplY3QuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0ZWxlbWVudC5oPgorI2luY2x1ZGUgPGdzdC9nc3R0YWdsaXN0Lmg+CisjaW5jbHVkZSA8Z3N0L2dzdHN0cnVjdHVyZS5oPgorI2luY2x1ZGUgPGdzdC9nc3RxdWVyeS5oPgorCisvKioKKyAqIEdTVF9NRVNTQUdFX1RSQUNFX05BTUU6CisgKgorICogVGhlIG5hbWUgdXNlZCBmb3IgbWVtb3J5IGFsbG9jYXRpb24gdHJhY2luZworICovCisjZGVmaW5lIEdTVF9NRVNTQUdFX1RSQUNFX05BTUUgICJHc3RNZXNzYWdlIgorCisjZGVmaW5lIEdTVF9UWVBFX01FU1NBR0UgICAgICAgICAgICAgICAgICAgICAgICAgKGdzdF9tZXNzYWdlX2dldF90eXBlKCkpCisjZGVmaW5lIEdTVF9JU19NRVNTQUdFKG9iaikgICAgICAgICAgICAgICAgICAgICAgKEdTVF9JU19NSU5JX09CSkVDVF9UWVBFIChvYmosIEdTVF9UWVBFX01FU1NBR0UpKQorI2RlZmluZSBHU1RfTUVTU0FHRV9DQVNUKG9iaikgICAgICAgICAgICAgICAgICAgICgoR3N0TWVzc2FnZSopKG9iaikpCisjZGVmaW5lIEdTVF9NRVNTQUdFKG9iaikgICAgICAgICAgICAgICAgICAgICAgICAgKEdTVF9NRVNTQUdFX0NBU1Qob2JqKSkKKworLyogdGhlIGxvY2sgaXMgdXNlZCB0byBoYW5kbGUgdGhlIHN5bmNocm9ub3VzIGhhbmRsaW5nIG9mIG1lc3NhZ2VzLAorICogdGhlIGVtaXRpbmcgdGhyZWFkIGlzIGJsb2NrIHVudGlsIHRoZSBoYW5kbGluZyB0aHJlYWQgcHJvY2Vzc2VkCisgKiB0aGUgbWVzc2FnZSB1c2luZyB0aGlzIG11dGV4L2NvbmQgcGFpciAqLworI2RlZmluZSBHU1RfTUVTU0FHRV9HRVRfTE9DSyhtZXNzYWdlKSAgIChHU1RfTUVTU0FHRV9DQVNUKG1lc3NhZ2UpLT5sb2NrKQorI2RlZmluZSBHU1RfTUVTU0FHRV9MT0NLKG1lc3NhZ2UpICAgICAgIGdfbXV0ZXhfbG9jayhHU1RfTUVTU0FHRV9HRVRfTE9DSyhtZXNzYWdlKSkKKyNkZWZpbmUgR1NUX01FU1NBR0VfVU5MT0NLKG1lc3NhZ2UpICAgICBnX211dGV4X3VubG9jayhHU1RfTUVTU0FHRV9HRVRfTE9DSyhtZXNzYWdlKSkKKyNkZWZpbmUgR1NUX01FU1NBR0VfQ09ORChtZXNzYWdlKSAgICAgICAoR1NUX01FU1NBR0VfQ0FTVChtZXNzYWdlKS0+Y29uZCkKKyNkZWZpbmUgR1NUX01FU1NBR0VfV0FJVChtZXNzYWdlKSAgICAgICBnX2NvbmRfd2FpdChHU1RfTUVTU0FHRV9DT05EKG1lc3NhZ2UpLEdTVF9NRVNTQUdFX0dFVF9MT0NLKG1lc3NhZ2UpKQorI2RlZmluZSBHU1RfTUVTU0FHRV9TSUdOQUwobWVzc2FnZSkgICAgIGdfY29uZF9zaWduYWwoR1NUX01FU1NBR0VfQ09ORChtZXNzYWdlKSkKKworLyoqCisgKiBHU1RfTUVTU0FHRV9UWVBFOgorICogQG1lc3NhZ2U6IGEgI0dzdE1lc3NhZ2UKKyAqCisgKiBHZXQgdGhlICNHc3RNZXNzYWdlVHlwZSBvZiBAbWVzc2FnZS4KKyAqLworI2RlZmluZSBHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpICAgICAgIChHU1RfTUVTU0FHRV9DQVNUKG1lc3NhZ2UpLT50eXBlKQorLyoqCisgKiBHU1RfTUVTU0FHRV9UWVBFX05BTUU6CisgKiBAbWVzc2FnZTogYSAjR3N0TWVzc2FnZQorICoKKyAqIEdldCBhIGNvbnN0YW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgI0dzdE1lc3NhZ2VUeXBlIG9mIEBtZXNzYWdlLgorICoKKyAqIFNpbmNlOiAwLjEwLjQKKyAqLworI2RlZmluZSBHU1RfTUVTU0FHRV9UWVBFX05BTUUobWVzc2FnZSkgIGdzdF9tZXNzYWdlX3R5cGVfZ2V0X25hbWUoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSkKKy8qKgorICogR1NUX01FU1NBR0VfVElNRVNUQU1QOgorICogQG1lc3NhZ2U6IGEgI0dzdE1lc3NhZ2UKKyAqCisgKiBHZXQgdGhlIHRpbWVzdGFtcCBvZiBAbWVzc2FnZS4gVGhpcyBpcyB0aGUgdGltZXN0YW1wIHdoZW4gdGhlIG1lc3NhZ2UKKyAqIHdhcyBjcmVhdGVkLgorICovCisjZGVmaW5lIEdTVF9NRVNTQUdFX1RJTUVTVEFNUChtZXNzYWdlKSAgKEdTVF9NRVNTQUdFX0NBU1QobWVzc2FnZSktPnRpbWVzdGFtcCkKKy8qKgorICogR1NUX01FU1NBR0VfU1JDOgorICogQG1lc3NhZ2U6IGEgI0dzdE1lc3NhZ2UKKyAqCisgKiBHZXQgdGhlIG9iamVjdCB0aGF0IHBvc3RlZCBAbWVzc2FnZS4KKyAqLworI2RlZmluZSBHU1RfTUVTU0FHRV9TUkMobWVzc2FnZSkgICAgICAgIChHU1RfTUVTU0FHRV9DQVNUKG1lc3NhZ2UpLT5zcmMpCisKKy8qKgorICogR1NUX01FU1NBR0VfU0VRTlVNOgorICogQG1lc3NhZ2U6IGEgI0dzdE1lc3NhZ2UKKyAqCisgKiBHZXQgdGhlIHNlcXVlbmNlIG51bWJlciBvZiBAbWVzc2FnZS4KKyAqLworI2RlZmluZSBHU1RfTUVTU0FHRV9TRVFOVU0obWVzc2FnZSkgICAgIChHU1RfTUVTU0FHRV9DQVNUKG1lc3NhZ2UpLT5zZXFudW0pCisKKy8qKgorICogR1NUX01FU1NBR0VfU1JDX05BTUU6CisgKiBAbWVzc2FnZTogYSAjR3N0TWVzc2FnZQorICoKKyAqIEdldCB0aGUgbmFtZSBvZiB0aGUgb2JqZWN0IHRoYXQgcG9zdGVkIEBtZXNzYWdlLiBSZXR1cm5zICIoTlVMTCkiIGlmCisgKiB0aGUgbWVzc2FnZSBoYXMgbm8gc291cmNlIG9iamVjdCBzZXQuCisgKgorICogU2luY2U6IDAuMTAuMjQKKyAqLworI2RlZmluZSBHU1RfTUVTU0FHRV9TUkNfTkFNRShtZXNzYWdlKSAgIChHU1RfTUVTU0FHRV9TUkMobWVzc2FnZSkgPyBcCisgICAgR1NUX09CSkVDVF9OQU1FIChHU1RfTUVTU0FHRV9TUkMobWVzc2FnZSkpIDogIihOVUxMKSIpCisKKy8qKgorICogR3N0U3RydWN0dXJlQ2hhbmdlVHlwZToKKyAqIEBHU1RfU1RSVUNUVVJFX0NIQU5HRV9UWVBFX1BBRF9MSU5LOiBQYWQgbGlua2luZyBpcyBzdGFydGluZyBvciBkb25lLgorICogQEdTVF9TVFJVQ1RVUkVfQ0hBTkdFX1RZUEVfUEFEX1VOTElOSzogUGFkIHVubGlua2luZyBpcyBzdGFydGluZyBvciBkb25lLgorICoKKyAqIFRoZSB0eXBlIG9mIGEgJUdTVF9NRVNTQUdFX1NUUlVDVFVSRV9DSEFOR0UuCisgKgorICogU2luY2U6IDAuMTAuMjIKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgR1NUX1NUUlVDVFVSRV9DSEFOR0VfVFlQRV9QQURfTElOSyAgID0gMCwKKyAgR1NUX1NUUlVDVFVSRV9DSEFOR0VfVFlQRV9QQURfVU5MSU5LID0gMQorfSBHc3RTdHJ1Y3R1cmVDaGFuZ2VUeXBlOworCisvKioKKyAqIEdzdFN0cmVhbVN0YXR1c1R5cGU6CisgKiBAR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9DUkVBVEU6IEEgbmV3IHRocmVhZCBuZWVkIHRvIGJlIGNyZWF0ZWQuCisgKiBAR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9FTlRFUjogYSB0aHJlYWQgZW50ZXJlZCBpdHMgbG9vcCBmdW5jdGlvbgorICogQEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfTEVBVkU6IGEgdGhyZWFkIGxlZnQgaXRzIGxvb3AgZnVuY3Rpb24KKyAqIEBHU1RfU1RSRUFNX1NUQVRVU19UWVBFX0RFU1RST1k6IGEgdGhyZWFkIGlzIGRlc3Ryb3llZAorICogQEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfU1RBUlQ6IGEgdGhyZWFkIGlzIHN0YXJ0ZWQKKyAqIEBHU1RfU1RSRUFNX1NUQVRVU19UWVBFX1BBVVNFOiBhIHRocmVhZCBpcyBwYXVzZWQKKyAqIEBHU1RfU1RSRUFNX1NUQVRVU19UWVBFX1NUT1A6IGEgdGhyZWFkIGlzIHN0b3BwZWQKKyAqCisgKiBUaGUgdHlwZSBvZiBhICVHU1RfTUVTU0FHRV9TVFJFQU1fU1RBVFVTLiBUaGUgc3RyZWFtIHN0YXR1cyBtZXNzYWdlcyBpbmZvcm0gdGhlCisgKiBhcHBsaWNhdGlvbiBvZiBuZXcgc3RyZWFtaW5nIHRocmVhZHMgYW5kIHRoZWlyIHN0YXR1cy4KKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICovCit0eXBlZGVmIGVudW0geworICBHU1RfU1RSRUFNX1NUQVRVU19UWVBFX0NSRUFURSAgID0gMCwKKyAgR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9FTlRFUiAgICA9IDEsCisgIEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfTEVBVkUgICAgPSAyLAorICBHU1RfU1RSRUFNX1NUQVRVU19UWVBFX0RFU1RST1kgID0gMywKKworICBHU1RfU1RSRUFNX1NUQVRVU19UWVBFX1NUQVJUICAgID0gOCwKKyAgR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9QQVVTRSAgICA9IDksCisgIEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfU1RPUCAgICAgPSAxMAorfSBHc3RTdHJlYW1TdGF0dXNUeXBlOworCisvKioKKyAqIEdzdFByb2dyZXNzVHlwZToKKyAqIEBHU1RfUFJPR1JFU1NfVFlQRV9TVEFSVDogQSBuZXcgdGFzayBzdGFydGVkLgorICogQEdTVF9QUk9HUkVTU19UWVBFX0NPTlRJTlVFOiBBIHRhc2sgY29tcGxldGVkIGFuZCBhIG5ldyBvbmUgY29udGludWVzLgorICogQEdTVF9QUk9HUkVTU19UWVBFX0NPTVBMRVRFOiBBIHRhc2sgY29tcGxldGVkLgorICogQEdTVF9QUk9HUkVTU19UWVBFX0NBTkNFTEVEOiBBIHRhc2sgd2FzIGNhbmNlbGVkLgorICogQEdTVF9QUk9HUkVTU19UWVBFX0VSUk9SOiBBIHRhc2sgY2F1c2VkIGFuIGVycm9yLiBBbiBlcnJvciBtZXNzYWdlIGlzIGFsc28KKyAqICAgICAgICAgIHBvc3RlZCBvbiB0aGUgYnVzLgorICoKKyAqIFRoZSB0eXBlIG9mIGEgJUdTVF9NRVNTQUdFX1BST0dSRVNTLiBUaGUgcHJvZ3Jlc3MgbWVzc2FnZXMgaW5mb3JtIHRoZQorICogYXBwbGljYXRpb24gb2YgdGhlIHN0YXR1cyBvZiBhc3N5bmNocm9ub3VzIHRhc2tzLgorICoKKyAqIFNpbmNlOiAwLjEwLjMzCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIEdTVF9QUk9HUkVTU19UWVBFX1NUQVJUICAgID0gMCwKKyAgR1NUX1BST0dSRVNTX1RZUEVfQ09OVElOVUUgPSAxLAorICBHU1RfUFJPR1JFU1NfVFlQRV9DT01QTEVURSA9IDIsCisgIEdTVF9QUk9HUkVTU19UWVBFX0NBTkNFTEVEID0gMywKKyAgR1NUX1BST0dSRVNTX1RZUEVfRVJST1IgICAgPSA0LAorfSBHc3RQcm9ncmVzc1R5cGU7CisKKy8qKgorICogR3N0TWVzc2FnZToKKyAqIEBtaW5pX29iamVjdDogdGhlIHBhcmVudCBzdHJ1Y3R1cmUKKyAqIEB0eXBlOiB0aGUgI0dzdE1lc3NhZ2VUeXBlIG9mIHRoZSBtZXNzYWdlCisgKiBAdGltZXN0YW1wOiB0aGUgdGltZXN0YW1wIG9mIHRoZSBtZXNzYWdlCisgKiBAc3JjOiB0aGUgc3JjIG9mIHRoZSBtZXNzYWdlCisgKiBAc2VxbnVtOiB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBtZXNzYWdlCisgKgorICogQSAjR3N0TWVzc2FnZS4KKyAqLworc3RydWN0IF9Hc3RNZXNzYWdlCit7CisgIEdzdE1pbmlPYmplY3QgbWluaV9vYmplY3Q7CisKKyAgLyo8IHB1YmxpYyA+ICovLyogd2l0aCBDT1cgKi8KKyAgR3N0TWVzc2FnZVR5cGUgdHlwZTsKKyAgZ3VpbnQ2NCB0aW1lc3RhbXA7CisgIEdzdE9iamVjdCAqc3JjOworICBndWludDMyIHNlcW51bTsKKworICAvKjwgcHJpdmF0ZSA+Ki8vKiB3aXRoIE1FU1NBR0VfTE9DSyAqLworICBHTXV0ZXggKmxvY2s7ICAgICAgICAgICAgICAgICAvKiBsb2NrIGFuZCBjb25kIGZvciBhc3luYyBkZWxpdmVyeSAqLworICBHQ29uZCAqY29uZDsKK307CisKK0dUeXBlICAgICAgICAgICBnc3RfbWVzc2FnZV9nZXRfdHlwZSAgICAgICAgICAgICh2b2lkKTsKKworY29uc3QgZ2NoYXIqICAgIGdzdF9tZXNzYWdlX3R5cGVfZ2V0X25hbWUgICAgICAgKEdzdE1lc3NhZ2VUeXBlIHR5cGUpOworR1F1YXJrICAgICAgICAgIGdzdF9tZXNzYWdlX3R5cGVfdG9fcXVhcmsgICAgICAgKEdzdE1lc3NhZ2VUeXBlIHR5cGUpOworCisvKiByZWZjb3VudGluZyAqLworLyoqCisgKiBnc3RfbWVzc2FnZV9yZWY6CisgKiBAbXNnOiB0aGUgbWVzc2FnZSB0byByZWYKKyAqCisgKiBDb252ZW5pZW5jZSBtYWNybyB0byBpbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBtZXNzYWdlLgorICoKKyAqIFJldHVybnM6IEBtc2cgKGZvciBjb252ZW5pZW5jZSB3aGVuIGRvaW5nIGFzc2lnbm1lbnRzKQorICovCisjaWZkZWYgX0ZPT0xfR1RLX0RPQ18KK0dfSU5MSU5FX0ZVTkMgR3N0TWVzc2FnZSAqIGdzdF9tZXNzYWdlX3JlZiAoR3N0TWVzc2FnZSAqIG1zZyk7CisjZW5kaWYKKworc3RhdGljIGlubGluZSBHc3RNZXNzYWdlICoKK2dzdF9tZXNzYWdlX3JlZiAoR3N0TWVzc2FnZSAqIG1zZykKK3sKKyAgcmV0dXJuIChHc3RNZXNzYWdlICopIGdzdF9taW5pX29iamVjdF9yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChtc2cpKTsKK30KKworLyoqCisgKiBnc3RfbWVzc2FnZV91bnJlZjoKKyAqIEBtc2c6IHRoZSBtZXNzYWdlIHRvIHVucmVmCisgKgorICogQ29udmVuaWVuY2UgbWFjcm8gdG8gZGVjcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgbWVzc2FnZSwgcG9zc2libHkKKyAqIGZyZWVpbmcgaXQuCisgKi8KKyNpZmRlZiBfRk9PTF9HVEtfRE9DXworR19JTkxJTkVfRlVOQyB2b2lkIGdzdF9tZXNzYWdlX3VucmVmIChHc3RNZXNzYWdlICogbXNnKTsKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQKK2dzdF9tZXNzYWdlX3VucmVmIChHc3RNZXNzYWdlICogbXNnKQoreworICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChtc2cpKTsKK30KKworLyogY29weSBtZXNzYWdlICovCisvKioKKyAqIGdzdF9tZXNzYWdlX2NvcHk6CisgKiBAbXNnOiB0aGUgbWVzc2FnZSB0byBjb3B5CisgKgorICogQ3JlYXRlcyBhIGNvcHkgb2YgdGhlIG1lc3NhZ2UuIFJldHVybnMgYSBjb3B5IG9mIHRoZSBtZXNzYWdlLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgY29weSBvZiBAbXNnLgorICoKKyAqIE1UIHNhZmUKKyAqLworI2lmZGVmIF9GT09MX0dUS19ET0NfCitHX0lOTElORV9GVU5DIEdzdE1lc3NhZ2UgKiBnc3RfbWVzc2FnZV9jb3B5IChjb25zdCBHc3RNZXNzYWdlICogbXNnKTsKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIEdzdE1lc3NhZ2UgKgorZ3N0X21lc3NhZ2VfY29weSAoY29uc3QgR3N0TWVzc2FnZSAqIG1zZykKK3sKKyAgcmV0dXJuIEdTVF9NRVNTQUdFX0NBU1QgKGdzdF9taW5pX29iamVjdF9jb3B5IChHU1RfTUlOSV9PQkpFQ1RfQ09OU1RfQ0FTVCAobXNnKSkpOworfQorCisvKioKKyAqIGdzdF9tZXNzYWdlX2lzX3dyaXRhYmxlOgorICogQG1zZzogYSAjR3N0TWVzc2FnZQorICoKKyAqIFRlc3RzIGlmIHlvdSBjYW4gc2FmZWx5IHdyaXRlIGludG8gYSBtZXNzYWdlJ3Mgc3RydWN0dXJlIG9yIHZhbGlkbHkKKyAqIG1vZGlmeSB0aGUgc2VxbnVtIGFuZCB0aW1lc3RhbXAgZmllbGRzLgorICovCisjZGVmaW5lICAgICAgICAgZ3N0X21lc3NhZ2VfaXNfd3JpdGFibGUobXNnKSAgICAgZ3N0X21pbmlfb2JqZWN0X2lzX3dyaXRhYmxlIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAobXNnKSkKKy8qKgorICogZ3N0X21lc3NhZ2VfbWFrZV93cml0YWJsZToKKyAqIEBtc2c6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG1lc3NhZ2UgdG8gbWFrZSB3cml0YWJsZQorICoKKyAqIENoZWNrcyBpZiBhIG1lc3NhZ2UgaXMgd3JpdGFibGUuIElmIG5vdCwgYSB3cml0YWJsZSBjb3B5IGlzIG1hZGUgYW5kCisgKiByZXR1cm5lZC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbWVzc2FnZSAocG9zc2libHkgYSBkdXBsaWNhdGUpIHRoYXQgaXMgd3JpdGFibGUuCisgKgorICogTVQgc2FmZQorICovCisjZGVmaW5lICAgICAgICAgZ3N0X21lc3NhZ2VfbWFrZV93cml0YWJsZShtc2cpICBHU1RfTUVTU0FHRV9DQVNUIChnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKG1zZykpKQorLyoqCisgKiBnc3RfbWVzc2FnZV9yZXBsYWNlOgorICogQG9sZF9tZXNzYWdlOiAoaW5vdXQpICh0cmFuc2ZlciBmdWxsKTogcG9pbnRlciB0byBhIHBvaW50ZXIgdG8gYSAjR3N0TWVzc2FnZQorICogICAgIHRvIGJlIHJlcGxhY2VkLgorICogQG5ld19tZXNzYWdlOiAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIG5vbmUpOiBwb2ludGVyIHRvIGEgI0dzdE1lc3NhZ2UgdGhhdCB3aWxsCisgKiAgICAgcmVwbGFjZSB0aGUgbWVzc2FnZSBwb2ludGVkIHRvIGJ5IEBvbGRfbWVzc2FnZS4KKyAqCisgKiBNb2RpZmllcyBhIHBvaW50ZXIgdG8gYSAjR3N0TWVzc2FnZSB0byBwb2ludCB0byBhIGRpZmZlcmVudCAjR3N0TWVzc2FnZS4gVGhlCisgKiBtb2RpZmljYXRpb24gaXMgZG9uZSBhdG9taWNhbGx5IChzbyB0aGlzIGlzIHVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhyZWFkIHNhZmV0eQorICogaW4gc29tZSBjYXNlcyksIGFuZCB0aGUgcmVmZXJlbmNlIGNvdW50cyBhcmUgdXBkYXRlZCBhcHByb3ByaWF0ZWx5ICh0aGUgb2xkCisgKiBtZXNzYWdlIGlzIHVucmVmZmVkLCB0aGUgbmV3IG9uZSBpcyByZWZmZWQpLgorICoKKyAqIEVpdGhlciBAbmV3X21lc3NhZ2Ugb3IgdGhlICNHc3RNZXNzYWdlIHBvaW50ZWQgdG8gYnkgQG9sZF9tZXNzYWdlIG1heSBiZSBOVUxMLgorICovCisjZGVmaW5lICAgICAgICAgZ3N0X21lc3NhZ2VfcmVwbGFjZShvbGRfbWVzc2FnZSxuZXdfbWVzc2FnZSkgXAorICAgIGdzdF9taW5pX29iamVjdF9yZXBsYWNlICgoR3N0TWluaU9iamVjdCAqKikob2xkX21lc3NhZ2UpLCBHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAobmV3X21lc3NhZ2UpKQorCisKKy8qIGN1c3RvbSBtZXNzYWdlcyAqLworR3N0TWVzc2FnZSAqICAgIGdzdF9tZXNzYWdlX25ld19jdXN0b20gICAgICAgICAgKEdzdE1lc3NhZ2VUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0T2JqZWN0ICAgICogc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSk7Citjb25zdCBHc3RTdHJ1Y3R1cmUgKgorICAgICAgICAgICAgICAgIGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUgICAgICAgKEdzdE1lc3NhZ2UgKm1lc3NhZ2UpOworCitnYm9vbGVhbiAgICAgICAgZ3N0X21lc3NhZ2VfaGFzX25hbWUgICAgICAgICAgICAoR3N0TWVzc2FnZSAqbWVzc2FnZSwgY29uc3QgZ2NoYXIgKm5hbWUpOworCisvKiBpZGVudGlmaWVycyBmb3IgZXZlbnRzIGFuZCBtZXNzYWdlcyAqLworZ3VpbnQzMiAgICAgICAgIGdzdF9tZXNzYWdlX2dldF9zZXFudW0gICAgICAgICAgKEdzdE1lc3NhZ2UgKm1lc3NhZ2UpOwordm9pZCAgICAgICAgICAgIGdzdF9tZXNzYWdlX3NldF9zZXFudW0gICAgICAgICAgKEdzdE1lc3NhZ2UgKm1lc3NhZ2UsIGd1aW50MzIgc2VxbnVtKTsKKworLyogRU9TICovCitHc3RNZXNzYWdlICogICAgZ3N0X21lc3NhZ2VfbmV3X2VvcyAgICAgICAgICAgICAoR3N0T2JqZWN0ICogc3JjKTsKKworLyogRVJST1IgKi8KKworR3N0TWVzc2FnZSAqICAgIGdzdF9tZXNzYWdlX25ld19lcnJvciAgICAgICAgICAgKEdzdE9iamVjdCAqIHNyYywgR0Vycm9yICogZXJyb3IsIGNvbnN0IGdjaGFyICogZGVidWcpOwordm9pZCAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yICAgICAgICAgKEdzdE1lc3NhZ2UgKm1lc3NhZ2UsIEdFcnJvciAqKmdlcnJvciwgZ2NoYXIgKipkZWJ1Zyk7CisKKy8qIFdBUk5JTkcgKi8KK0dzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfd2FybmluZyAgICAgICAgIChHc3RPYmplY3QgKiBzcmMsIEdFcnJvciAqIGVycm9yLCBjb25zdCBnY2hhciAqIGRlYnVnKTsKK3ZvaWQgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV93YXJuaW5nICAgICAgIChHc3RNZXNzYWdlICptZXNzYWdlLCBHRXJyb3IgKipnZXJyb3IsIGdjaGFyICoqZGVidWcpOworCisvKiBJTkZPICovCitHc3RNZXNzYWdlICogICAgZ3N0X21lc3NhZ2VfbmV3X2luZm8gICAgICAgICAgICAoR3N0T2JqZWN0ICogc3JjLCBHRXJyb3IgKiBlcnJvciwgY29uc3QgZ2NoYXIgKiBkZWJ1Zyk7Cit2b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfaW5mbyAgICAgICAgICAoR3N0TWVzc2FnZSAqbWVzc2FnZSwgR0Vycm9yICoqZ2Vycm9yLCBnY2hhciAqKmRlYnVnKTsKKworLyogVEFHICovCitHc3RNZXNzYWdlICogICAgZ3N0X21lc3NhZ2VfbmV3X3RhZyAgICAgICAgICAgICAoR3N0T2JqZWN0ICogc3JjLCBHc3RUYWdMaXN0ICogdGFnX2xpc3QpOwordm9pZCAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3RhZyAgICAgICAgICAgKEdzdE1lc3NhZ2UgKm1lc3NhZ2UsIEdzdFRhZ0xpc3QgKip0YWdfbGlzdCk7CisKKy8qIEJVRkZFUklORyAqLworR3N0TWVzc2FnZSAqICAgIGdzdF9tZXNzYWdlX25ld19idWZmZXJpbmcgICAgICAgICAoR3N0T2JqZWN0ICogc3JjLCBnaW50IHBlcmNlbnQpOwordm9pZCAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZyAgICAgICAoR3N0TWVzc2FnZSAqbWVzc2FnZSwgZ2ludCAqcGVyY2VudCk7Cit2b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2Vfc2V0X2J1ZmZlcmluZ19zdGF0cyAgIChHc3RNZXNzYWdlICptZXNzYWdlLCBHc3RCdWZmZXJpbmdNb2RlIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IGF2Z19pbiwgZ2ludCBhdmdfb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0IGJ1ZmZlcmluZ19sZWZ0KTsKK3ZvaWQgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9idWZmZXJpbmdfc3RhdHMgKEdzdE1lc3NhZ2UgKm1lc3NhZ2UsIEdzdEJ1ZmZlcmluZ01vZGUgKm1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICphdmdfaW4sIGdpbnQgKmF2Z19vdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50NjQgKmJ1ZmZlcmluZ19sZWZ0KTsKKworLyogU1RBVEVfQ0hBTkdFRCAqLworR3N0TWVzc2FnZSAqICAgIGdzdF9tZXNzYWdlX25ld19zdGF0ZV9jaGFuZ2VkICAgKEdzdE9iamVjdCAqIHNyYywgR3N0U3RhdGUgb2xkc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U3RhdGUgbmV3c3RhdGUsIEdzdFN0YXRlIHBlbmRpbmcpOwordm9pZCAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQgKEdzdE1lc3NhZ2UgKm1lc3NhZ2UsIEdzdFN0YXRlICpvbGRzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RTdGF0ZSAqbmV3c3RhdGUsIEdzdFN0YXRlICpwZW5kaW5nKTsKKworLyogU1RBVEVfRElSVFkgKi8KK0dzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfc3RhdGVfZGlydHkgICAgIChHc3RPYmplY3QgKiBzcmMpOworCisvKiBTVEVQX0RPTkUgKi8KK0dzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfc3RlcF9kb25lICAgICAgIChHc3RPYmplY3QgKiBzcmMsIEdzdEZvcm1hdCBmb3JtYXQsIGd1aW50NjQgYW1vdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkb3VibGUgcmF0ZSwgZ2Jvb2xlYW4gZmx1c2gsIGdib29sZWFuIGludGVybWVkaWF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDY0IGR1cmF0aW9uLCBnYm9vbGVhbiBlb3MpOwordm9pZCAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0ZXBfZG9uZSAgICAgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHc3RGb3JtYXQgKmZvcm1hdCwgZ3VpbnQ2NCAqYW1vdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkb3VibGUgKnJhdGUsIGdib29sZWFuICpmbHVzaCwgZ2Jvb2xlYW4gKmludGVybWVkaWF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDY0ICpkdXJhdGlvbiwgZ2Jvb2xlYW4gKmVvcyk7CisvKiBDTE9DS19QUk9WSURFICovCitHc3RNZXNzYWdlICogICAgZ3N0X21lc3NhZ2VfbmV3X2Nsb2NrX3Byb3ZpZGUgICAoR3N0T2JqZWN0ICogc3JjLCBHc3RDbG9jayAqY2xvY2ssIGdib29sZWFuIHJlYWR5KTsKK3ZvaWQgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9jbG9ja19wcm92aWRlIChHc3RNZXNzYWdlICptZXNzYWdlLCBHc3RDbG9jayAqKmNsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICpyZWFkeSk7CisKKy8qIENMT0NLX0xPU1QgKi8KK0dzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfY2xvY2tfbG9zdCAgICAgIChHc3RPYmplY3QgKiBzcmMsIEdzdENsb2NrICpjbG9jayk7Cit2b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfY2xvY2tfbG9zdCAgICAoR3N0TWVzc2FnZSAqbWVzc2FnZSwgR3N0Q2xvY2sgKipjbG9jayk7CisKKy8qIE5FV19DTE9DSyAqLworR3N0TWVzc2FnZSAqICAgIGdzdF9tZXNzYWdlX25ld19uZXdfY2xvY2sgICAgICAgKEdzdE9iamVjdCAqIHNyYywgR3N0Q2xvY2sgKmNsb2NrKTsKK3ZvaWQgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9uZXdfY2xvY2sgICAgIChHc3RNZXNzYWdlICptZXNzYWdlLCBHc3RDbG9jayAqKmNsb2NrKTsKKworLyogQVBQTElDQVRJT04gKi8KK0dzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRpb24gICAgIChHc3RPYmplY3QgKiBzcmMsIEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSk7CisKKy8qIEVMRU1FTlQgKi8KK0dzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfZWxlbWVudCAgICAgICAgIChHc3RPYmplY3QgKiBzcmMsIEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSk7CisKKy8qIFNFR01FTlRfU1RBUlQgKi8KK0dzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9zdGFydCAgIChHc3RPYmplY3QgKiBzcmMsIEdzdEZvcm1hdCBmb3JtYXQsIGdpbnQ2NCBwb3NpdGlvbik7Cit2b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc2VnbWVudF9zdGFydCAoR3N0TWVzc2FnZSAqbWVzc2FnZSwgR3N0Rm9ybWF0ICpmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0ICpwb3NpdGlvbik7CisKKy8qIFNFR01FTlRfRE9ORSAqLworR3N0TWVzc2FnZSAqICAgIGdzdF9tZXNzYWdlX25ld19zZWdtZW50X2RvbmUgICAgKEdzdE9iamVjdCAqIHNyYywgR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0IHBvc2l0aW9uKTsKK3ZvaWQgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9zZWdtZW50X2RvbmUgIChHc3RNZXNzYWdlICptZXNzYWdlLCBHc3RGb3JtYXQgKmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50NjQgKnBvc2l0aW9uKTsKKworLyogRFVSQVRJT04gKi8KK0dzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb24gICAgICAgIChHc3RPYmplY3QgKiBzcmMsIEdzdEZvcm1hdCBmb3JtYXQsIGdpbnQ2NCBkdXJhdGlvbik7Cit2b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZHVyYXRpb24gICAgICAoR3N0TWVzc2FnZSAqbWVzc2FnZSwgR3N0Rm9ybWF0ICpmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0ICpkdXJhdGlvbik7CisKKy8qIExBVEVOQ1kgKi8KK0dzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfbGF0ZW5jeSAgICAgICAgIChHc3RPYmplY3QgKiBzcmMpOworCisvKiBBU1lOQ19TVEFSVCAqLworR3N0TWVzc2FnZSAqICAgIGdzdF9tZXNzYWdlX25ld19hc3luY19zdGFydCAgICAgKEdzdE9iamVjdCAqIHNyYyk7CisKKy8qIEFTWU5DX0RPTkUgKi8KK0dzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfYXN5bmNfZG9uZSAgICAgIChHc3RPYmplY3QgKiBzcmMsIGdib29sZWFuIHJlc2V0X3RpbWUpOwordm9pZCAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2FzeW5jX2RvbmUgICAgKEdzdE1lc3NhZ2UgKm1lc3NhZ2UsIGdib29sZWFuICpyZXNldF90aW1lKTsKKworLyogU1RSVUNUVVJFIENIQU5HRSAqLworR3N0TWVzc2FnZSAqICAgIGdzdF9tZXNzYWdlX25ld19zdHJ1Y3R1cmVfY2hhbmdlICAgKEdzdE9iamVjdCAqIHNyYywgR3N0U3RydWN0dXJlQ2hhbmdlVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEVsZW1lbnQgKm93bmVyLCBnYm9vbGVhbiBidXN5KTsKK3ZvaWQgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9zdHJ1Y3R1cmVfY2hhbmdlIChHc3RNZXNzYWdlICptZXNzYWdlLCBHc3RTdHJ1Y3R1cmVDaGFuZ2VUeXBlICp0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEVsZW1lbnQgKipvd25lciwgZ2Jvb2xlYW4gKmJ1c3kpOworCisvKiBTVFJFQU0gU1RBVFVTICovCitHc3RNZXNzYWdlICogICAgZ3N0X21lc3NhZ2VfbmV3X3N0cmVhbV9zdGF0dXMgICAgICAgIChHc3RPYmplY3QgKiBzcmMsIEdzdFN0cmVhbVN0YXR1c1R5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEVsZW1lbnQgKm93bmVyKTsKK3ZvaWQgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1fc3RhdHVzICAgICAgKEdzdE1lc3NhZ2UgKm1lc3NhZ2UsIEdzdFN0cmVhbVN0YXR1c1R5cGUgKnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RFbGVtZW50ICoqb3duZXIpOwordm9pZCAgICAgICAgICAgIGdzdF9tZXNzYWdlX3NldF9zdHJlYW1fc3RhdHVzX29iamVjdCAoR3N0TWVzc2FnZSAqbWVzc2FnZSwgY29uc3QgR1ZhbHVlICpvYmplY3QpOworY29uc3QgR1ZhbHVlICogIGdzdF9tZXNzYWdlX2dldF9zdHJlYW1fc3RhdHVzX29iamVjdCAoR3N0TWVzc2FnZSAqbWVzc2FnZSk7CisKKy8qIFJFUVVFU1RfU1RBVEUgKi8KK0dzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfcmVxdWVzdF9zdGF0ZSAgIChHc3RPYmplY3QgKiBzcmMsIEdzdFN0YXRlIHN0YXRlKTsKK3ZvaWQgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9yZXF1ZXN0X3N0YXRlIChHc3RNZXNzYWdlICogbWVzc2FnZSwgR3N0U3RhdGUgKnN0YXRlKTsKKworLyogU1RFUF9TVEFSVCAqLworR3N0TWVzc2FnZSAqICAgIGdzdF9tZXNzYWdlX25ld19zdGVwX3N0YXJ0ICAgICAgKEdzdE9iamVjdCAqIHNyYywgZ2Jvb2xlYW4gYWN0aXZlLCBHc3RGb3JtYXQgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgYW1vdW50LCBnZG91YmxlIHJhdGUsIGdib29sZWFuIGZsdXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuIGludGVybWVkaWF0ZSk7Cit2b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RlcF9zdGFydCAgICAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIGdib29sZWFuICphY3RpdmUsIEdzdEZvcm1hdCAqZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgKmFtb3VudCwgZ2RvdWJsZSAqcmF0ZSwgZ2Jvb2xlYW4gKmZsdXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICppbnRlcm1lZGlhdGUpOworCisvKiBRT1MgKi8KK0dzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfcW9zICAgICAgICAgICAgIChHc3RPYmplY3QgKiBzcmMsIGdib29sZWFuIGxpdmUsIGd1aW50NjQgcnVubmluZ190aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgc3RyZWFtX3RpbWUsIGd1aW50NjQgdGltZXN0YW1wLCBndWludDY0IGR1cmF0aW9uKTsKK3ZvaWQgICAgICAgICAgICBnc3RfbWVzc2FnZV9zZXRfcW9zX3ZhbHVlcyAgICAgIChHc3RNZXNzYWdlICogbWVzc2FnZSwgZ2ludDY0IGppdHRlciwgZ2RvdWJsZSBwcm9wb3J0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgcXVhbGl0eSk7Cit2b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2Vfc2V0X3Fvc19zdGF0cyAgICAgICAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIEdzdEZvcm1hdCBmb3JtYXQsIGd1aW50NjQgcHJvY2Vzc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgZHJvcHBlZCk7Cit2b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfcW9zICAgICAgICAgICAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIGdib29sZWFuICogbGl2ZSwgZ3VpbnQ2NCAqIHJ1bm5pbmdfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDY0ICogc3RyZWFtX3RpbWUsIGd1aW50NjQgKiB0aW1lc3RhbXAsIGd1aW50NjQgKiBkdXJhdGlvbik7Cit2b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfcW9zX3ZhbHVlcyAgICAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIGdpbnQ2NCAqIGppdHRlciwgZ2RvdWJsZSAqIHByb3BvcnRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAqIHF1YWxpdHkpOwordm9pZCAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3Fvc19zdGF0cyAgICAgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHc3RGb3JtYXQgKiBmb3JtYXQsIGd1aW50NjQgKiBwcm9jZXNzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQ2NCAqIGRyb3BwZWQpOworLyogUFJPR1JFU1MgKi8KK0dzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfcHJvZ3Jlc3MgICAgICAgICAgIChHc3RPYmplY3QgKiBzcmMsIEdzdFByb2dyZXNzVHlwZSB0eXBlLCBjb25zdCBnY2hhciAqY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqdGV4dCk7Cit2b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfcHJvZ3Jlc3MgICAgICAgICAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIEdzdFByb2dyZXNzVHlwZSAqIHR5cGUsIGdjaGFyICoqIGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIgKiogdGV4dCk7CisKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fR1NUX01FU1NBR0VfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0bWV0YS5jIGIvZ3N0L2dzdG1ldGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzhhZWYxCi0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdG1ldGEuYwpAQCAtMCwwICsxLDE1MyBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKyAqCisgKiBnc3RtZXRhLmM6IG1ldGFkYXRhIG9wZXJhdGlvbnMKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKioKKyAqIFNFQ1RJT046Z3N0bWV0YQorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBCdWZmZXIgbWV0YWRhdGEKKyAqCisgKiBMYXN0IHJldmlld2VkIG9uIERlY2VtYmVyIDE3dGgsIDIwMDkgKDAuMTAuMjYpCisgKi8KKyNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgorCisjaW5jbHVkZSAiZ3N0YnVmZmVyLmgiCisjaW5jbHVkZSAiZ3N0bWV0YS5oIgorI2luY2x1ZGUgImdzdGluZm8uaCIKKyNpbmNsdWRlICJnc3R1dGlscy5oIgorCitzdGF0aWMgR0hhc2hUYWJsZSAqbWV0YWluZm8gPSBOVUxMOworc3RhdGljIEdTdGF0aWNSV0xvY2sgbG9jayA9IEdfU1RBVElDX1JXX0xPQ0tfSU5JVDsKKwordm9pZAorX3ByaXZfZ3N0X21ldGFfaW5pdGlhbGl6ZSAodm9pZCkKK3sKKyAgbWV0YWluZm8gPSBnX2hhc2hfdGFibGVfbmV3IChnX3N0cl9oYXNoLCBnX3N0cl9lcXVhbCk7Cit9CisKKy8qKgorICogZ3N0X21ldGFfcmVnaXN0ZXJfaW5mbzoKKyAqIEBpbmZvOiBhICNHc3RNZXRhSW5mbworICoKKyAqIFJlZ2lzdGVyIGEgI0dzdE1ldGFJbmZvLiBUaGUgc2FtZSBAaW5mbyBjYW4gYmUgcmV0cmlldmVkIGxhdGVyIHdpdGgKKyAqIGdzdF9tZXRhX2dldF9pbmZvKCkgYnkgdXNpbmcgQGltcGwgYXMgdGhlIGtleS4KKyAqCisgKiBSZXR1cm5zOiBhICNHc3RNZXRhSW5mbyB0aGF0IGNhbiBiZSB1c2VkIHRvIGFjY2VzcyBtZXRhZGF0YS4KKyAqLworCitjb25zdCBHc3RNZXRhSW5mbyAqCitnc3RfbWV0YV9yZWdpc3RlciAoY29uc3QgZ2NoYXIgKiBhcGksIGNvbnN0IGdjaGFyICogaW1wbCwgZ3NpemUgc2l6ZSwKKyAgICBHc3RNZXRhSW5pdEZ1bmN0aW9uIGluaXRfZnVuYywgR3N0TWV0YUZyZWVGdW5jdGlvbiBmcmVlX2Z1bmMsCisgICAgR3N0TWV0YUNvcHlGdW5jdGlvbiBjb3B5X2Z1bmMsIEdzdE1ldGFUcmFuc2Zvcm1GdW5jdGlvbiB0cmFuc2Zvcm1fZnVuYykKK3sKKyAgR3N0TWV0YUluZm8gKmluZm87CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGFwaSAhPSBOVUxMLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGltcGwgIT0gTlVMTCwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzaXplICE9IDAsIE5VTEwpOworCisgIGluZm8gPSBnX3NsaWNlX25ldyAoR3N0TWV0YUluZm8pOworICBpbmZvLT5hcGkgPSBnX3F1YXJrX2Zyb21fc3RyaW5nIChhcGkpOworICBpbmZvLT50eXBlID0gZ19wb2ludGVyX3R5cGVfcmVnaXN0ZXJfc3RhdGljIChpbXBsKTsKKyAgaW5mby0+c2l6ZSA9IHNpemU7CisgIGluZm8tPmluaXRfZnVuYyA9IGluaXRfZnVuYzsKKyAgaW5mby0+ZnJlZV9mdW5jID0gZnJlZV9mdW5jOworICBpbmZvLT5jb3B5X2Z1bmMgPSBjb3B5X2Z1bmM7CisgIGluZm8tPnRyYW5zZm9ybV9mdW5jID0gdHJhbnNmb3JtX2Z1bmM7CisKKyAgR1NUX0RFQlVHICgicmVnaXN0ZXIgXCIlc1wiIGltcGxlbWVudGluZyBcIiVzXCIgb2Ygc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCwKKyAgICAgIGFwaSwgaW1wbCwgc2l6ZSk7CisKKyAgZ19zdGF0aWNfcndfbG9ja193cml0ZXJfbG9jayAoJmxvY2spOworICBnX2hhc2hfdGFibGVfaW5zZXJ0IChtZXRhaW5mbywgKGdwb2ludGVyKSBpbXBsLCAoZ3BvaW50ZXIpIGluZm8pOworICBnX3N0YXRpY19yd19sb2NrX3dyaXRlcl91bmxvY2sgKCZsb2NrKTsKKworICByZXR1cm4gaW5mbzsKK30KKworLyoqCisgKiBnc3RfbWV0YV9nZXRfaW5mbzoKKyAqIEBpbXBsOiB0aGUgbmFtZQorICoKKyAqIExvb2t1cCBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBtZXRhIGluZm8gc3RydWN0dXJlIGJ5IGl0cyBpbXBsZW1lbnRvciBuYW1lCisgKiBAaW1wbC4KKyAqCisgKiBSZXR1cm5zOiBhICNHc3RNZXRhSW5mbyB3aXRoIEBpbXBsIG9yICNOVUxMIHdoZW4gbm8gc3VjaCBtZXRhaW5mbworICogZXhpc3RzLgorICovCitjb25zdCBHc3RNZXRhSW5mbyAqCitnc3RfbWV0YV9nZXRfaW5mbyAoY29uc3QgZ2NoYXIgKiBpbXBsKQoreworICBHc3RNZXRhSW5mbyAqaW5mbzsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoaW1wbCAhPSBOVUxMLCBOVUxMKTsKKworICBnX3N0YXRpY19yd19sb2NrX3JlYWRlcl9sb2NrICgmbG9jayk7CisgIGluZm8gPSBnX2hhc2hfdGFibGVfbG9va3VwIChtZXRhaW5mbywgaW1wbCk7CisgIGdfc3RhdGljX3J3X2xvY2tfcmVhZGVyX3VubG9jayAoJmxvY2spOworCisgIHJldHVybiBpbmZvOworfQorCisvKiBUaW1pbmcgbWV0YWRhdGEgKi8KK3N0YXRpYyB2b2lkCittZXRhX3RpbWluZ19jb3B5IChHc3RCdWZmZXIgKiBjb3B5YnVmLCBHc3RNZXRhVGltaW5nICogbWV0YSwKKyAgICBHc3RCdWZmZXIgKiBidWZmZXIsIGdzaXplIG9mZnNldCwgZ3NpemUgc2l6ZSkKK3sKKyAgR3N0TWV0YVRpbWluZyAqdGltaW5nOworCisgIEdTVF9ERUJVRyAoInRyYW5zIGNhbGxlZCBmcm9tIGJ1ZmZlciAlcCB0byAlcCwgbWV0YSAlcCwiCisgICAgICAib2Zmc2V0ICUiIEdfR1NJWkVfRk9STUFUICIsIHNpemUgJSIgR19HU0laRV9GT1JNQVQsIGJ1ZmZlciwKKyAgICAgIGNvcHlidWYsIG1ldGEsIG9mZnNldCwgc2l6ZSk7CisKKyAgdGltaW5nID0gZ3N0X2J1ZmZlcl9hZGRfbWV0YV90aW1pbmcgKGNvcHlidWYpOworICBpZiAob2Zmc2V0ID09IDApIHsKKyAgICAvKiBzYW1lIG9mZnNldCwgY29weSB0aW1lc3RhbXBzICovCisgICAgdGltaW5nLT5wdHMgPSBtZXRhLT5wdHM7CisgICAgdGltaW5nLT5kdHMgPSBtZXRhLT5kdHM7CisgICAgaWYgKHNpemUgPT0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSkgeworICAgICAgLyogc2FtZSBzaXplLCBjb3B5IGR1cmF0aW9uICovCisgICAgICB0aW1pbmctPmR1cmF0aW9uID0gbWV0YS0+ZHVyYXRpb247CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIGVsc2UgY2xlYXIgKi8KKyAgICAgIHRpbWluZy0+ZHVyYXRpb24gPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICB0aW1pbmctPnB0cyA9IC0xOworICAgIHRpbWluZy0+ZHRzID0gLTE7CisgICAgdGltaW5nLT5kdXJhdGlvbiA9IC0xOworICB9CisgIHRpbWluZy0+Y2xvY2tfcmF0ZSA9IG1ldGEtPmNsb2NrX3JhdGU7Cit9CisKK2NvbnN0IEdzdE1ldGFJbmZvICoKK2dzdF9tZXRhX3RpbWluZ19nZXRfaW5mbyAodm9pZCkKK3sKKyAgc3RhdGljIGNvbnN0IEdzdE1ldGFJbmZvICptZXRhX2luZm8gPSBOVUxMOworCisgIGlmIChtZXRhX2luZm8gPT0gTlVMTCkgeworICAgIG1ldGFfaW5mbyA9IGdzdF9tZXRhX3JlZ2lzdGVyICgiR3N0TWV0YVRpbWluZyIsICJHc3RNZXRhVGltaW5nIiwKKyAgICAgICAgc2l6ZW9mIChHc3RNZXRhVGltaW5nKSwKKyAgICAgICAgKEdzdE1ldGFJbml0RnVuY3Rpb24pIE5VTEwsCisgICAgICAgIChHc3RNZXRhRnJlZUZ1bmN0aW9uKSBOVUxMLAorICAgICAgICAoR3N0TWV0YUNvcHlGdW5jdGlvbikgbWV0YV90aW1pbmdfY29weSwKKyAgICAgICAgKEdzdE1ldGFUcmFuc2Zvcm1GdW5jdGlvbikgTlVMTCk7CisgIH0KKyAgcmV0dXJuIG1ldGFfaW5mbzsKK30KZGlmZiAtLWdpdCBhL2dzdC9nc3RtZXRhLmggYi9nc3QvZ3N0bWV0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZDdmYzIKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0bWV0YS5oCkBAIC0wLDAgKzEsMTUxIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOSBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuYmU+CisgKgorICogZ3N0bWV0YS5oOiBIZWFkZXIgZm9yIE1ldGFkYXRhIHN0cnVjdHVyZXMKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKKyNpZm5kZWYgX19HU1RfTUVUQV9IX18KKyNkZWZpbmUgX19HU1RfTUVUQV9IX18KKworR19CRUdJTl9ERUNMUworCit0eXBlZGVmIHN0cnVjdCBfR3N0TWV0YSBHc3RNZXRhOwordHlwZWRlZiBzdHJ1Y3QgX0dzdE1ldGFJbmZvIEdzdE1ldGFJbmZvOworCisvKioKKyAqIEdzdE1ldGE6CisgKiBAaW5mbzogcG9pbnRlciB0byB0aGUgI0dzdE1ldGFJbmZvCisgKgorICogQmFzZSBzdHJ1Y3R1cmUgZm9yIG1ldGFkYXRhLiBDdXN0b20gbWV0YWRhdGEgd2lsbCBwdXQgdGhpcyBzdHJ1Y3R1cmUKKyAqIGFzIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhlaXIgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgX0dzdE1ldGEgeworICBjb25zdCBHc3RNZXRhSW5mbyAqaW5mbzsKK307CisKKy8qKgorICogR1NUX01FVEFfVFJBQ0VfTkFNRToKKyAqCisgKiBUaGUgbmFtZSB1c2VkIGZvciB0cmFjaW5nIG1lbW9yeSBhbGxvY2F0aW9ucy4KKyAqLworI2RlZmluZSBHU1RfTUVUQV9UUkFDRV9OQU1FICAgICAgICAgICAiR3N0TWV0YSIKKworLyoqCisgKiBHc3RNZXRhSW5pdEZ1bmN0aW9uOgorICogQG1ldGE6IGEgI0dzdE1ldGEKKyAqIEBwYXJhbXM6IHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoZSBpbml0IGZ1bmN0aW9uCisgKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIKKyAqCisgKiBGdW5jdGlvbiBjYWxsZWQgd2hlbiBAbWV0YSBpcyBpbml0aWFsaXplZCBpbiBAYnVmZmVyLgorICovCit0eXBlZGVmIGdib29sZWFuICgqR3N0TWV0YUluaXRGdW5jdGlvbikgKEdzdE1ldGEgKm1ldGEsIGdwb2ludGVyIHBhcmFtcywgR3N0QnVmZmVyICpidWZmZXIpOworCisvKioKKyAqIEdzdE1ldGFGcmVlRnVuY3Rpb246CisgKiBAbWV0YTogYSAjR3N0TWV0YQorICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyCisgKgorICogRnVuY3Rpb24gY2FsbGVkIHdoZW4gQG1ldGEgaXMgZnJlZWQgaW4gQGJ1ZmZlci4KKyAqLwordHlwZWRlZiB2b2lkICgqR3N0TWV0YUZyZWVGdW5jdGlvbikgICAgIChHc3RNZXRhICptZXRhLCBHc3RCdWZmZXIgKmJ1ZmZlcik7CisKK3R5cGVkZWYgdm9pZCAoKkdzdE1ldGFDb3B5RnVuY3Rpb24pICAgICAoR3N0QnVmZmVyICpkZXN0LCBHc3RNZXRhICptZXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCdWZmZXIgKmJ1ZmZlciwgZ3NpemUgb2Zmc2V0LCBnc2l6ZSBzaXplKTsKKy8qKgorICogR3N0TWV0YVRyYW5zZm9ybUZ1bmN0aW9uOgorICogQHRyYW5zYnVmOiBhICNHc3RCdWZmZXIKKyAqIEBtZXRhOiBhICNHc3RNZXRhCisgKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIKKyAqIEBkYXRhOiB0cmFuc2Zvcm0gc3BlY2lmaWMgZGF0YS4KKyAqCisgKiBGdW5jdGlvbiBjYWxsZWQgZm9yIGVhY2ggQG1ldGEgaW4gQGJ1ZmZlciBhcyBhIHJlc3VsdCBvZiBwZXJmb3JtaW5nIGEKKyAqIHRyYW5zZm9ybWF0aW9uIG9uIEB0cmFuc2J1Zi4gQWRkaXRpb25hbCB0eXBlIHNwZWNpZmljIHRyYW5zZm9ybSBkYXRhCisgKiBpcyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgorICoKKyAqIEltcGxlbWVudGF0aW9ucyBzaG91bGQgY2hlY2sgdGhlIHR5cGUgb2YgdGhlIHRyYW5zZm9ybSBAZGF0YSBhbmQgcGFyc2UKKyAqIGFkZGl0aW9uYWwgdHlwZSBzcGVjaWZpYyBmaWVsZCB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIHBlcmZvcm0gdGhlIHRyYW5zZm9ybS4KKyAqLwordHlwZWRlZiB2b2lkICgqR3N0TWV0YVRyYW5zZm9ybUZ1bmN0aW9uKSAoR3N0QnVmZmVyICp0cmFuc2J1ZiwgR3N0TWV0YSAqbWV0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEJ1ZmZlciAqYnVmZmVyLCBncG9pbnRlciBkYXRhKTsKKworLyoqCisgKiBHc3RNZXRhSW5mbzoKKyAqIEBhcGk6IHRhZyBpbmRlbnRpZnlpbmcgdGhlIG1ldGFkYXRhIHN0cnVjdHVyZSBhbmQgYXBpCisgKiBAdHlwZTogdHlwZSBpbmRlbnRpZnlpbmcgdGhlIGltcGxlbWVudG9yIG9mIHRoZSBhcGkKKyAqIEBzaXplOiBzaXplIG9mIHRoZSBtZXRhZGF0YQorICogQGluaXRfZnVuYzogZnVuY3Rpb24gZm9yIGluaXRpYWxpemluZyB0aGUgbWV0YWRhdGEKKyAqIEBmcmVlX2Z1bmM6IGZ1bmN0aW9uIGZvciBmcmVlaW5nIHRoZSBtZXRhZGF0YQorICogQGNvcHlfZnVuYzogZnVuY3Rpb24gZm9yIGNvcHlpbmcgdGhlIG1ldGFkYXRhCisgKiBAdHJhbnNmb3JtX2Z1bmM6IGZ1bmN0aW9uIGZvciB0cmFuc2Zvcm1pbmcgdGhlIG1ldGFkYXRhCisgKgorICogVGhlICNHc3RNZXRhSW5mbyBwcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCBhIHNwZWNpZmljIG1ldGFkYXRhCisgKiBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBfR3N0TWV0YUluZm8geworICBHUXVhcmsgICAgICAgICAgICAgICAgICAgICBhcGk7CisgIEdUeXBlICAgICAgICAgICAgICAgICAgICAgIHR5cGU7CisgIGdzaXplICAgICAgICAgICAgICAgICAgICAgIHNpemU7CisKKyAgR3N0TWV0YUluaXRGdW5jdGlvbiAgICAgICAgaW5pdF9mdW5jOworICBHc3RNZXRhRnJlZUZ1bmN0aW9uICAgICAgICBmcmVlX2Z1bmM7CisgIEdzdE1ldGFDb3B5RnVuY3Rpb24gICAgICAgIGNvcHlfZnVuYzsKKyAgR3N0TWV0YVRyYW5zZm9ybUZ1bmN0aW9uICAgdHJhbnNmb3JtX2Z1bmM7Cit9OworCitjb25zdCBHc3RNZXRhSW5mbyAqICBnc3RfbWV0YV9yZWdpc3RlciAgICAgICAgKGNvbnN0IGdjaGFyICphcGksIGNvbnN0IGdjaGFyICppbXBsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RNZXRhSW5pdEZ1bmN0aW9uICAgICAgICBpbml0X2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdE1ldGFGcmVlRnVuY3Rpb24gICAgICAgIGZyZWVfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0TWV0YUNvcHlGdW5jdGlvbiAgICAgICAgY29weV9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RNZXRhVHJhbnNmb3JtRnVuY3Rpb24gICB0cmFuc2Zvcm1fZnVuYyk7Citjb25zdCBHc3RNZXRhSW5mbyAqICBnc3RfbWV0YV9nZXRfaW5mbyAgICAgICAgKGNvbnN0IGdjaGFyICogaW1wbCk7CisKKy8qIGRlZmF1bHQgbWV0YWRhdGEgKi8KKworLyogdGltaW5nIG1ldGFkYXRhICovCit0eXBlZGVmIHN0cnVjdCBfR3N0TWV0YVRpbWluZyBHc3RNZXRhVGltaW5nOworCitjb25zdCBHc3RNZXRhSW5mbyAqZ3N0X21ldGFfdGltaW5nX2dldF9pbmZvKHZvaWQpOworI2RlZmluZSBHU1RfTUVUQV9USU1JTkdfSU5GTyAoZ3N0X21ldGFfdGltaW5nX2dldF9pbmZvKCkpCisKKy8qKgorICogR3N0TWV0YVRpbWluZzoKKyAqIEBtZXRhOiBwYXJlbnQgbWV0YWRhdGEKKyAqIEBkdHM6IHRoZSBkZWNvZGluZyB0aW1lc3RhbXAKKyAqIEBwdHM6IHRoZSBwcmVzZW50YXRpb24gdGltZXN0YW1wCisgKiBAZHVyYXRpb246IHRoZSBkdXJhdGlvbgorICogQGNsb2NrX3JhdGU6IHRoZSBjbG9jayByYXRlIG9mIHRoZSBkdHMsIHB0cyBhbmQgZHVyYXRpb24gdmFsdWVzCisgKgorICogRXh0cmEgdGltaW5nIG1ldGFkYXRhCisgKi8KK3N0cnVjdCBfR3N0TWV0YVRpbWluZyB7CisgIEdzdE1ldGEgICAgICAgIG1ldGE7ICAgICAgICAvKiBjb21tb24gbWV0YSBoZWFkZXIgKi8KKworICBHc3RDbG9ja1RpbWUgICBkdHM7ICAgICAgICAgLyogZGVjb2RpbmcgdGltZXN0YW1wICovCisgIEdzdENsb2NrVGltZSAgIHB0czsgICAgICAgICAvKiBwcmVzZW50YXRpb24gdGltZXN0YW1wICovCisgIEdzdENsb2NrVGltZSAgIGR1cmF0aW9uOyAgICAvKiBkdXJhdGlvbiBvZiB0aGUgZGF0YSAqLworICBHc3RDbG9ja1RpbWUgICBjbG9ja19yYXRlOyAgLyogY2xvY2sgcmF0ZSBmb3IgdGhlIGFib3ZlIHZhbHVlcyAqLworfTsKKworI2RlZmluZSBnc3RfYnVmZmVyX2dldF9tZXRhX3RpbWluZyhiKSAgKChHc3RNZXRhVGltaW5nKilnc3RfYnVmZmVyX2dldF9tZXRhKChiKSxHU1RfTUVUQV9USU1JTkdfSU5GTykpCisjZGVmaW5lIGdzdF9idWZmZXJfYWRkX21ldGFfdGltaW5nKGIpICAoKEdzdE1ldGFUaW1pbmcqKWdzdF9idWZmZXJfYWRkX21ldGEoKGIpLEdTVF9NRVRBX1RJTUlOR19JTkZPLE5VTEwpKQorCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HU1RfTUVUQV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RtaW5pb2JqZWN0LmMgYi9nc3QvZ3N0bWluaW9iamVjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NzQ5ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0bWluaW9iamVjdC5jCkBAIC0wLDAgKzEsNDQzIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNSBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKyAqCisgKiBnc3RtaW5pb2JqZWN0Lmg6IEhlYWRlciBmb3IgR3N0TWluaU9iamVjdAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisvKioKKyAqIFNFQ1RJT046Z3N0bWluaW9iamVjdAorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBMaWdodHdlaWdodCBiYXNlIGNsYXNzIGZvciB0aGUgR1N0cmVhbWVyIG9iamVjdCBoaWVyYXJjaHkKKyAqCisgKiAjR3N0TWluaU9iamVjdCBpcyBhIGJhc2VjbGFzcyBsaWtlICNHT2JqZWN0LCBidXQgaGFzIGJlZW4gc3RyaXBwZWQgZG93biBvZgorICogZmVhdHVyZXMgdG8gYmUgZmFzdCBhbmQgc21hbGwuCisgKiBJdCBvZmZlcnMgc3ViLWNsYXNzaW5nIGFuZCByZWYtY291bnRpbmcgaW4gdGhlIHNhbWUgd2F5IGFzICNHT2JqZWN0IGRvZXMuCisgKiBJdCBoYXMgbm8gcHJvcGVydGllcyBhbmQgbm8gc2lnbmFsLXN1cHBvcnQgdGhvdWdoLgorICoKKyAqIExhc3QgcmV2aWV3ZWQgb24gMjAwNS0xMS0yMyAoMC45LjUpCisgKi8KKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgImdzdC9nc3RfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImdzdC9nc3RtaW5pb2JqZWN0LmgiCisjaW5jbHVkZSAiZ3N0L2dzdGluZm8uaCIKKyNpbmNsdWRlIDxnb2JqZWN0L2d2YWx1ZWNvbGxlY3Rvci5oPgorCisjZGVmaW5lIEdTVF9ESVNBQkxFX1RSQUNFCisKKyNpZm5kZWYgR1NUX0RJU0FCTEVfVFJBQ0UKKyNpbmNsdWRlICJnc3R0cmFjZS5oIgorc3RhdGljIEdzdEFsbG9jVHJhY2UgKl9nc3RfbWluaV9vYmplY3RfdHJhY2U7CisjZW5kaWYKKworLyogTXV0ZXggdXNlZCBmb3Igd2VhayByZWZlcmVuY2luZyAqLworR19MT0NLX0RFRklORV9TVEFUSUMgKHdlYWtfcmVmc19tdXRleCk7CisKKy8qKgorICogZ3N0X21pbmlfb2JqZWN0X2luaXQ6CisgKiBAbWluaV9vYmplY3Q6IGEgI0dzdE1pbmlPYmplY3QgCisgKiBAdHlwZTogdGhlICNHVHlwZSBvZiB0aGUgbWluaS1vYmplY3QgdG8gY3JlYXRlCisgKiBAc2l6ZTogdGhlIHNpemUgb2YgdGhlIGRhdGEKKyAqCisgKiBJbml0aWFsaXplcyBhIG1pbmktb2JqZWN0IHdpdGggdGhlIGRlc2lyZWQgdHlwZSBhbmQgc2l6ZS4KKyAqCisgKiBNVCBzYWZlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3IG1pbmktb2JqZWN0LgorICovCit2b2lkCitnc3RfbWluaV9vYmplY3RfaW5pdCAoR3N0TWluaU9iamVjdCAqIG1pbmlfb2JqZWN0LCBHVHlwZSB0eXBlLCBnc2l6ZSBzaXplKQoreworICBtaW5pX29iamVjdC0+dHlwZSA9IHR5cGU7CisgIG1pbmlfb2JqZWN0LT5yZWZjb3VudCA9IDE7CisgIG1pbmlfb2JqZWN0LT5mbGFncyA9IDA7CisgIG1pbmlfb2JqZWN0LT5zaXplID0gc2l6ZTsKKyAgbWluaV9vYmplY3QtPm5fd2Vha19yZWZzID0gMDsKKyAgbWluaV9vYmplY3QtPndlYWtfcmVmcyA9IE5VTEw7Cit9CisKKy8qKgorICogZ3N0X21pbmlfb2JqZWN0X2NvcHk6CisgKiBAbWluaV9vYmplY3Q6IHRoZSBtaW5pLW9iamVjdCB0byBjb3B5CisgKgorICogQ3JlYXRlcyBhIGNvcHkgb2YgdGhlIG1pbmktb2JqZWN0LgorICoKKyAqIE1UIHNhZmUKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXcgbWluaS1vYmplY3QuCisgKi8KK0dzdE1pbmlPYmplY3QgKgorZ3N0X21pbmlfb2JqZWN0X2NvcHkgKGNvbnN0IEdzdE1pbmlPYmplY3QgKiBtaW5pX29iamVjdCkKK3sKKyAgR3N0TWluaU9iamVjdCAqY29weTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAobWluaV9vYmplY3QgIT0gTlVMTCwgTlVMTCk7CisKKyAgaWYgKG1pbmlfb2JqZWN0LT5jb3B5KQorICAgIGNvcHkgPSBtaW5pX29iamVjdC0+Y29weSAobWluaV9vYmplY3QpOworICBlbHNlCisgICAgY29weSA9IE5VTEw7CisKKyAgcmV0dXJuIGNvcHk7Cit9CisKKy8qKgorICogZ3N0X21pbmlfb2JqZWN0X2lzX3dyaXRhYmxlOgorICogQG1pbmlfb2JqZWN0OiB0aGUgbWluaS1vYmplY3QgdG8gY2hlY2sKKyAqCisgKiBDaGVja3MgaWYgYSBtaW5pLW9iamVjdCBpcyB3cml0YWJsZS4gIEEgbWluaS1vYmplY3QgaXMgd3JpdGFibGUKKyAqIGlmIHRoZSByZWZlcmVuY2UgY291bnQgaXMgb25lIGFuZCB0aGUgI0dTVF9NSU5JX09CSkVDVF9GTEFHX1JFQURPTkxZCisgKiBmbGFnIGlzIG5vdCBzZXQuICBNb2RpZmljYXRpb24gb2YgYSBtaW5pLW9iamVjdCBzaG91bGQgb25seSBiZQorICogZG9uZSBhZnRlciB2ZXJpZnlpbmcgdGhhdCBpdCBpcyB3cml0YWJsZS4KKyAqCisgKiBNVCBzYWZlCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgb2JqZWN0IGlzIHdyaXRhYmxlLgorICovCitnYm9vbGVhbgorZ3N0X21pbmlfb2JqZWN0X2lzX3dyaXRhYmxlIChjb25zdCBHc3RNaW5pT2JqZWN0ICogbWluaV9vYmplY3QpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtaW5pX29iamVjdCAhPSBOVUxMLCBGQUxTRSk7CisKKyAgcmV0dXJuIChHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKG1pbmlfb2JqZWN0KSA9PSAxKTsKK30KKworLyoqCisgKiBnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZToKKyAqIEBtaW5pX29iamVjdDogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbWluaS1vYmplY3QgdG8gbWFrZSB3cml0YWJsZQorICoKKyAqIENoZWNrcyBpZiBhIG1pbmktb2JqZWN0IGlzIHdyaXRhYmxlLiAgSWYgbm90LCBhIHdyaXRhYmxlIGNvcHkgaXMgbWFkZSBhbmQKKyAqIHJldHVybmVkLiAgVGhpcyBnaXZlcyBhd2F5IHRoZSByZWZlcmVuY2UgdG8gdGhlIG9yaWdpbmFsIG1pbmkgb2JqZWN0LAorICogYW5kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIG5ldyBvYmplY3QuCisgKgorICogTVQgc2FmZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBtaW5pLW9iamVjdCAocG9zc2libHkgdGhlIHNhbWUgcG9pbnRlcikgdGhhdAorICogICAgIGlzIHdyaXRhYmxlLgorICovCitHc3RNaW5pT2JqZWN0ICoKK2dzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlIChHc3RNaW5pT2JqZWN0ICogbWluaV9vYmplY3QpCit7CisgIEdzdE1pbmlPYmplY3QgKnJldDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAobWluaV9vYmplY3QgIT0gTlVMTCwgTlVMTCk7CisKKyAgaWYgKGdzdF9taW5pX29iamVjdF9pc193cml0YWJsZSAobWluaV9vYmplY3QpKSB7CisgICAgcmV0ID0gbWluaV9vYmplY3Q7CisgIH0gZWxzZSB7CisgICAgcmV0ID0gZ3N0X21pbmlfb2JqZWN0X2NvcHkgKG1pbmlfb2JqZWN0KTsKKyAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX1BFUkZPUk1BTkNFLCAiY29weSAlcyBtaW5pb2JqZWN0ICVwIC0+ICVwIiwKKyAgICAgICAgZ190eXBlX25hbWUgKEdTVF9NSU5JX09CSkVDVF9UWVBFIChtaW5pX29iamVjdCkpLCBtaW5pX29iamVjdCwgcmV0KTsKKyAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKG1pbmlfb2JqZWN0KTsKKyAgfQorCisgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICogZ3N0X21pbmlfb2JqZWN0X3JlZjoKKyAqIEBtaW5pX29iamVjdDogdGhlIG1pbmktb2JqZWN0CisgKgorICogSW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgbWluaS1vYmplY3QuCisgKgorICogTm90ZSB0aGF0IHRoZSByZWZjb3VudCBhZmZlY3RzIHRoZSB3cml0ZWFiaWxpdHkKKyAqIG9mIEBtaW5pLW9iamVjdCwgc2VlIGdzdF9taW5pX29iamVjdF9pc193cml0YWJsZSgpLiBJdCBpcworICogaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBrZWVwaW5nIGFkZGl0aW9uYWwgcmVmZXJlbmNlcyB0bworICogR3N0TWluaU9iamVjdCBpbnN0YW5jZXMgY2FuIHBvdGVudGlhbGx5IGluY3JlYXNlIHRoZSBudW1iZXIKKyAqIG9mIG1lbWNweSBvcGVyYXRpb25zIGluIGEgcGlwZWxpbmUsIGVzcGVjaWFsbHkgaWYgdGhlIG1pbmlvYmplY3QKKyAqIGlzIGEgI0dzdEJ1ZmZlci4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBtaW5pLW9iamVjdC4KKyAqLworR3N0TWluaU9iamVjdCAqCitnc3RfbWluaV9vYmplY3RfcmVmIChHc3RNaW5pT2JqZWN0ICogbWluaV9vYmplY3QpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtaW5pX29iamVjdCAhPSBOVUxMLCBOVUxMKTsKKyAgLyogd2UgY2FuJ3QgYXNzZXJ0IHRoYXQgdGhlIHJlZmNvdW50ID4gMCBzaW5jZSB0aGUgX2ZyZWUgZnVuY3Rpb25zCisgICAqIGluY3JlbWVudHMgdGhlIHJlZmNvdW50IGZyb20gMCB0byAxIGFnYWluIHRvIGFsbG93IHJlc3VyZWN0aW5nCisgICAqIHRoZSBvYmplY3QKKyAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtaW5pX29iamVjdC0+cmVmY291bnQgPiAwLCBOVUxMKTsKKyAgICovCisKKyAgR1NUX0NBVF9UUkFDRSAoR1NUX0NBVF9SRUZDT1VOVElORywgIiVwIHJlZiAlZC0+JWQiLCBtaW5pX29iamVjdCwKKyAgICAgIEdTVF9NSU5JX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAobWluaV9vYmplY3QpLAorICAgICAgR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChtaW5pX29iamVjdCkgKyAxKTsKKworICBnX2F0b21pY19pbnRfaW5jICgmbWluaV9vYmplY3QtPnJlZmNvdW50KTsKKworICByZXR1cm4gbWluaV9vYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWFrX3JlZnNfbm90aWZ5IChHc3RNaW5pT2JqZWN0ICogb2JqKQoreworICBndWludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBvYmotPm5fd2Vha19yZWZzOyBpKyspCisgICAgb2JqLT53ZWFrX3JlZnNbaV0ubm90aWZ5IChvYmotPndlYWtfcmVmc1tpXS5kYXRhLCBvYmopOworICBnX2ZyZWUgKG9iai0+d2Vha19yZWZzKTsKK30KKworLyoqCisgKiBnc3RfbWluaV9vYmplY3RfdW5yZWY6CisgKiBAbWluaV9vYmplY3Q6IHRoZSBtaW5pLW9iamVjdAorICoKKyAqIERlY3JlYXNlcyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBtaW5pLW9iamVjdCwgcG9zc2libHkgZnJlZWluZworICogdGhlIG1pbmktb2JqZWN0LgorICovCit2b2lkCitnc3RfbWluaV9vYmplY3RfdW5yZWYgKEdzdE1pbmlPYmplY3QgKiBtaW5pX29iamVjdCkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAobWluaV9vYmplY3QgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKG1pbmlfb2JqZWN0LT5yZWZjb3VudCA+IDApOworCisgIEdTVF9DQVRfVFJBQ0UgKEdTVF9DQVRfUkVGQ09VTlRJTkcsICIlcCB1bnJlZiAlZC0+JWQiLAorICAgICAgbWluaV9vYmplY3QsCisgICAgICBHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKG1pbmlfb2JqZWN0KSwKKyAgICAgIEdTVF9NSU5JX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAobWluaV9vYmplY3QpIC0gMSk7CisKKyAgaWYgKEdfVU5MSUtFTFkgKGdfYXRvbWljX2ludF9kZWNfYW5kX3Rlc3QgKCZtaW5pX29iamVjdC0+cmVmY291bnQpKSkgeworICAgIGdib29sZWFuIGRvX2ZyZWU7CisKKyAgICBpZiAobWluaV9vYmplY3QtPmRpc3Bvc2UpCisgICAgICBkb19mcmVlID0gbWluaV9vYmplY3QtPmRpc3Bvc2UgKG1pbmlfb2JqZWN0KTsKKyAgICBlbHNlCisgICAgICBkb19mcmVlID0gVFJVRTsKKworICAgIC8qIGlmIHRoZSBzdWJjbGFzcyByZWN5Y2xlZCB0aGUgb2JqZWN0IChhbmQgcmV0dXJuZWQgRkFMU0UpIHdlIGRvbid0CisgICAgICogd2FudCB0byBmcmVlIHRoZSBpbnN0YW5jZSBhbnltb3JlICovCisgICAgaWYgKEdfTElLRUxZIChkb19mcmVlKSkgeworICAgICAgLyogVGhlIHdlYWsgcmVmZXJlbmNlIHN0YWNrIGlzIGZyZWVkIGluIHRoZSBub3RpZmljYXRpb24gZnVuY3Rpb24gKi8KKyAgICAgIGlmIChtaW5pX29iamVjdC0+bl93ZWFrX3JlZnMpCisgICAgICAgIHdlYWtfcmVmc19ub3RpZnkgKG1pbmlfb2JqZWN0KTsKKworI2lmbmRlZiBHU1RfRElTQUJMRV9UUkFDRQorICAgICAgZ3N0X2FsbG9jX3RyYWNlX2ZyZWUgKF9nc3RfbWluaV9vYmplY3RfdHJhY2UsIG1pbmlfb2JqZWN0KTsKKyNlbmRpZgorICAgICAgaWYgKG1pbmlfb2JqZWN0LT5mcmVlKQorICAgICAgICBtaW5pX29iamVjdC0+ZnJlZSAobWluaV9vYmplY3QpOworICAgIH0KKyAgfQorfQorCisvKioKKyAqIGdzdF9taW5pX29iamVjdF9yZXBsYWNlOgorICogQG9sZGRhdGE6IChpbm91dCkgKHRyYW5zZmVyIGZ1bGwpOiBwb2ludGVyIHRvIGEgcG9pbnRlciB0byBhIG1pbmktb2JqZWN0IHRvCisgKiAgICAgYmUgcmVwbGFjZWQKKyAqIEBuZXdkYXRhOiBwb2ludGVyIHRvIG5ldyBtaW5pLW9iamVjdAorICoKKyAqIEF0b21pY2FsbHkgbW9kaWZpZXMgYSBwb2ludGVyIHRvIHBvaW50IHRvIGEgbmV3IG1pbmktb2JqZWN0LgorICogVGhlIHJlZmVyZW5jZSBjb3VudCBvZiBAb2xkZGF0YSBpcyBkZWNyZWFzZWQgYW5kIHRoZSByZWZlcmVuY2UgY291bnQgb2YKKyAqIEBuZXdkYXRhIGlzIGluY3JlYXNlZC4KKyAqCisgKiBFaXRoZXIgQG5ld2RhdGEgYW5kIHRoZSB2YWx1ZSBwb2ludGVkIHRvIGJ5IEBvbGRkYXRhIG1heSBiZSBOVUxMLgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgQG5ld2RhdGEgd2FzIGRpZmZlcmVudCBmcm9tIEBvbGRkYXRhCisgKi8KK2dib29sZWFuCitnc3RfbWluaV9vYmplY3RfcmVwbGFjZSAoR3N0TWluaU9iamVjdCAqKiBvbGRkYXRhLCBHc3RNaW5pT2JqZWN0ICogbmV3ZGF0YSkKK3sKKyAgR3N0TWluaU9iamVjdCAqb2xkZGF0YV92YWw7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG9sZGRhdGEgIT0gTlVMTCwgRkFMU0UpOworCisgIEdTVF9DQVRfVFJBQ0UgKEdTVF9DQVRfUkVGQ09VTlRJTkcsICJyZXBsYWNlICVwICglZCkgd2l0aCAlcCAoJWQpIiwKKyAgICAgICpvbGRkYXRhLCAqb2xkZGF0YSA/ICgqb2xkZGF0YSktPnJlZmNvdW50IDogMCwKKyAgICAgIG5ld2RhdGEsIG5ld2RhdGEgPyBuZXdkYXRhLT5yZWZjb3VudCA6IDApOworCisgIG9sZGRhdGFfdmFsID0gZ19hdG9taWNfcG9pbnRlcl9nZXQgKChncG9pbnRlciAqKSBvbGRkYXRhKTsKKworICBpZiAoR19VTkxJS0VMWSAob2xkZGF0YV92YWwgPT0gbmV3ZGF0YSkpCisgICAgcmV0dXJuIEZBTFNFOworCisgIGlmIChuZXdkYXRhKQorICAgIGdzdF9taW5pX29iamVjdF9yZWYgKG5ld2RhdGEpOworCisgIHdoaWxlIChHX1VOTElLRUxZICghZ19hdG9taWNfcG9pbnRlcl9jb21wYXJlX2FuZF9leGNoYW5nZSAoKGdwb2ludGVyICopCisgICAgICAgICAgICAgIG9sZGRhdGEsIG9sZGRhdGFfdmFsLCBuZXdkYXRhKSkpIHsKKyAgICBvbGRkYXRhX3ZhbCA9IGdfYXRvbWljX3BvaW50ZXJfZ2V0ICgoZ3BvaW50ZXIgKikgb2xkZGF0YSk7CisgICAgaWYgKEdfVU5MSUtFTFkgKG9sZGRhdGFfdmFsID09IG5ld2RhdGEpKQorICAgICAgYnJlYWs7CisgIH0KKworICBpZiAob2xkZGF0YV92YWwpCisgICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChvbGRkYXRhX3ZhbCk7CisKKyAgcmV0dXJuIG9sZGRhdGFfdmFsICE9IG5ld2RhdGE7Cit9CisKKy8qKgorICogZ3N0X21pbmlfb2JqZWN0X3N0ZWFsOgorICogQG9sZGRhdGE6IChpbm91dCkgKHRyYW5zZmVyIGZ1bGwpOiBwb2ludGVyIHRvIGEgcG9pbnRlciB0byBhIG1pbmktb2JqZWN0IHRvCisgKiAgICAgYmUgc3RvbGVuCisgKgorICogUmVwbGFjZSB0aGUgY3VycmVudCAjR3N0TWluaU9iamVjdCBwb2ludGVyIHRvIGJ5IEBvbGRkYXRhIHdpdGggTlVMTCBhbmQKKyAqIHJldHVybiB0aGUgb2xkIHZhbHVlLgorICoKKyAqIFJldHVybnM6IHRoZSAjR3N0TWluaU9iamVjdCBhdCBAb2xkYXRhCisgKi8KK0dzdE1pbmlPYmplY3QgKgorZ3N0X21pbmlfb2JqZWN0X3N0ZWFsIChHc3RNaW5pT2JqZWN0ICoqIG9sZGRhdGEpCit7CisgIEdzdE1pbmlPYmplY3QgKm9sZGRhdGFfdmFsOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChvbGRkYXRhICE9IE5VTEwsIE5VTEwpOworCisgIEdTVF9DQVRfVFJBQ0UgKEdTVF9DQVRfUkVGQ09VTlRJTkcsICJzdGVhbCAlcCAoJWQpIiwKKyAgICAgICpvbGRkYXRhLCAqb2xkZGF0YSA/ICgqb2xkZGF0YSktPnJlZmNvdW50IDogMCk7CisKKyAgZG8geworICAgIG9sZGRhdGFfdmFsID0gZ19hdG9taWNfcG9pbnRlcl9nZXQgKChncG9pbnRlciAqKSBvbGRkYXRhKTsKKyAgICBpZiAob2xkZGF0YV92YWwgPT0gTlVMTCkKKyAgICAgIGJyZWFrOworICB9IHdoaWxlIChHX1VOTElLRUxZICghZ19hdG9taWNfcG9pbnRlcl9jb21wYXJlX2FuZF9leGNoYW5nZSAoKGdwb2ludGVyICopCisgICAgICAgICAgICAgIG9sZGRhdGEsIG9sZGRhdGFfdmFsLCBOVUxMKSkpOworCisgIHJldHVybiBvbGRkYXRhX3ZhbDsKK30KKworLyoqCisgKiBnc3RfbWluaV9vYmplY3RfdGFrZToKKyAqIEBvbGRkYXRhOiAoaW5vdXQpICh0cmFuc2ZlciBmdWxsKTogcG9pbnRlciB0byBhIHBvaW50ZXIgdG8gYSBtaW5pLW9iamVjdCB0bworICogICAgIGJlIHJlcGxhY2VkCisgKiBAbmV3ZGF0YTogcG9pbnRlciB0byBuZXcgbWluaS1vYmplY3QKKyAqCisgKiBNb2RpZmllcyBhIHBvaW50ZXIgdG8gcG9pbnQgdG8gYSBuZXcgbWluaS1vYmplY3QuIFRoZSBtb2RpZmljYXRpb24KKyAqIGlzIGRvbmUgYXRvbWljYWxseS4gVGhpcyB2ZXJzaW9uIGlzIHNpbWlsYXIgdG8gZ3N0X21pbmlfb2JqZWN0X3JlcGxhY2UoKQorICogZXhjZXB0IHRoYXQgaXQgZG9lcyBub3QgaW5jcmVhc2UgdGhlIHJlZmNvdW50IG9mIEBuZXdkYXRhIGFuZCB0aHVzCisgKiB0YWtlcyBvd25lcnNoaXAgb2YgQG5ld2RhdGEuCisgKgorICogRWl0aGVyIEBuZXdkYXRhIGFuZCB0aGUgdmFsdWUgcG9pbnRlZCB0byBieSBAb2xkZGF0YSBtYXkgYmUgTlVMTC4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIEBuZXdkYXRhIHdhcyBkaWZmZXJlbnQgZnJvbSBAb2xkZGF0YQorICovCitnYm9vbGVhbgorZ3N0X21pbmlfb2JqZWN0X3Rha2UgKEdzdE1pbmlPYmplY3QgKiogb2xkZGF0YSwgR3N0TWluaU9iamVjdCAqIG5ld2RhdGEpCit7CisgIEdzdE1pbmlPYmplY3QgKm9sZGRhdGFfdmFsOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChvbGRkYXRhICE9IE5VTEwsIEZBTFNFKTsKKworICBHU1RfQ0FUX1RSQUNFIChHU1RfQ0FUX1JFRkNPVU5USU5HLCAidGFrZSAlcCAoJWQpIHdpdGggJXAgKCVkKSIsCisgICAgICAqb2xkZGF0YSwgKm9sZGRhdGEgPyAoKm9sZGRhdGEpLT5yZWZjb3VudCA6IDAsCisgICAgICBuZXdkYXRhLCBuZXdkYXRhID8gbmV3ZGF0YS0+cmVmY291bnQgOiAwKTsKKworICBkbyB7CisgICAgb2xkZGF0YV92YWwgPSBnX2F0b21pY19wb2ludGVyX2dldCAoKGdwb2ludGVyICopIG9sZGRhdGEpOworICAgIGlmIChHX1VOTElLRUxZIChvbGRkYXRhX3ZhbCA9PSBuZXdkYXRhKSkKKyAgICAgIGJyZWFrOworICB9IHdoaWxlIChHX1VOTElLRUxZICghZ19hdG9taWNfcG9pbnRlcl9jb21wYXJlX2FuZF9leGNoYW5nZSAoKGdwb2ludGVyICopCisgICAgICAgICAgICAgIG9sZGRhdGEsIG9sZGRhdGFfdmFsLCBuZXdkYXRhKSkpOworCisgIGlmIChvbGRkYXRhX3ZhbCkKKyAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKG9sZGRhdGFfdmFsKTsKKworICByZXR1cm4gb2xkZGF0YV92YWwgIT0gbmV3ZGF0YTsKK30KKworLyoqCisgKiBnc3RfbWluaV9vYmplY3Rfd2Vha19yZWY6IChza2lwKQorICogQG9iamVjdDogI0dzdE1pbmlPYmplY3QgdG8gcmVmZXJlbmNlIHdlYWtseQorICogQG5vdGlmeTogY2FsbGJhY2sgdG8gaW52b2tlIGJlZm9yZSB0aGUgbWluaSBvYmplY3QgaXMgZnJlZWQKKyAqIEBkYXRhOiBleHRyYSBkYXRhIHRvIHBhc3MgdG8gbm90aWZ5CisgKgorICogQWRkcyBhIHdlYWsgcmVmZXJlbmNlIGNhbGxiYWNrIHRvIGEgbWluaSBvYmplY3QuIFdlYWsgcmVmZXJlbmNlcyBhcmUKKyAqIHVzZWQgZm9yIG5vdGlmaWNhdGlvbiB3aGVuIGEgbWluaSBvYmplY3QgaXMgZmluYWxpemVkLiBUaGV5IGFyZSBjYWxsZWQKKyAqICJ3ZWFrIHJlZmVyZW5jZXMiIGJlY2F1c2UgdGhleSBhbGxvdyB5b3UgdG8gc2FmZWx5IGhvbGQgYSBwb2ludGVyCisgKiB0byB0aGUgbWluaSBvYmplY3Qgd2l0aG91dCBjYWxsaW5nIGdzdF9taW5pX29iamVjdF9yZWYoKQorICogKGdzdF9taW5pX29iamVjdF9yZWYoKSBhZGRzIGEgc3Ryb25nIHJlZmVyZW5jZSwgdGhhdCBpcywgZm9yY2VzIHRoZSBvYmplY3QKKyAqIHRvIHN0YXkgYWxpdmUpLgorICoKKyAqIFNpbmNlOiAwLjEwLjM1CisgKi8KK3ZvaWQKK2dzdF9taW5pX29iamVjdF93ZWFrX3JlZiAoR3N0TWluaU9iamVjdCAqIG9iamVjdCwKKyAgICBHc3RNaW5pT2JqZWN0V2Vha05vdGlmeSBub3RpZnksIGdwb2ludGVyIGRhdGEpCit7CisgIGd1aW50IGk7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAob2JqZWN0ICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsIChub3RpZnkgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NSU5JX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAob2JqZWN0KSA+PSAxKTsKKworICBHX0xPQ0sgKHdlYWtfcmVmc19tdXRleCk7CisKKyAgaWYgKG9iamVjdC0+bl93ZWFrX3JlZnMpIHsKKyAgICAvKiBEb24ndCBhZGQgdGhlIHdlYWsgcmVmZXJlbmNlIGlmIGl0IGFscmVhZHkgZXhpc3RzLiAqLworICAgIGZvciAoaSA9IDA7IGkgPCBvYmplY3QtPm5fd2Vha19yZWZzOyBpKyspIHsKKyAgICAgIGlmIChvYmplY3QtPndlYWtfcmVmc1tpXS5ub3RpZnkgPT0gbm90aWZ5ICYmCisgICAgICAgICAgb2JqZWN0LT53ZWFrX3JlZnNbaV0uZGF0YSA9PSBkYXRhKSB7CisgICAgICAgIGdfd2FybmluZyAoIiVzOiBBdHRlbXB0IHRvIHJlLWFkZCBleGlzdGluZyB3ZWFrIHJlZiAlcCglcCkgZmFpbGVkLiIsCisgICAgICAgICAgICBHX1NUUkZVTkMsIG5vdGlmeSwgZGF0YSk7CisgICAgICAgIGdvdG8gZm91bmQ7CisgICAgICB9CisgICAgfQorCisgICAgaSA9IG9iamVjdC0+bl93ZWFrX3JlZnMrKzsKKyAgICBvYmplY3QtPndlYWtfcmVmcyA9CisgICAgICAgIGdfcmVhbGxvYyAob2JqZWN0LT53ZWFrX3JlZnMsIHNpemVvZiAob2JqZWN0LT53ZWFrX3JlZnNbMF0pICogaSk7CisgIH0gZWxzZSB7CisgICAgb2JqZWN0LT53ZWFrX3JlZnMgPSBnX21hbGxvYzAgKHNpemVvZiAob2JqZWN0LT53ZWFrX3JlZnNbMF0pKTsKKyAgICBvYmplY3QtPm5fd2Vha19yZWZzID0gMTsKKyAgICBpID0gMDsKKyAgfQorICBvYmplY3QtPndlYWtfcmVmc1tpXS5ub3RpZnkgPSBub3RpZnk7CisgIG9iamVjdC0+d2Vha19yZWZzW2ldLmRhdGEgPSBkYXRhOworZm91bmQ6CisgIEdfVU5MT0NLICh3ZWFrX3JlZnNfbXV0ZXgpOworfQorCisvKioKKyAqIGdzdF9taW5pX29iamVjdF93ZWFrX3VucmVmOiAoc2tpcCkKKyAqIEBvYmplY3Q6ICNHc3RNaW5pT2JqZWN0IHRvIHJlbW92ZSBhIHdlYWsgcmVmZXJlbmNlIGZyb20KKyAqIEBub3RpZnk6IGNhbGxiYWNrIHRvIHNlYXJjaCBmb3IKKyAqIEBkYXRhOiBkYXRhIHRvIHNlYXJjaCBmb3IKKyAqCisgKiBSZW1vdmVzIGEgd2VhayByZWZlcmVuY2UgY2FsbGJhY2sgdG8gYSBtaW5pIG9iamVjdC4KKyAqCisgKiBTaW5jZTogMC4xMC4zNQorICovCit2b2lkCitnc3RfbWluaV9vYmplY3Rfd2Vha191bnJlZiAoR3N0TWluaU9iamVjdCAqIG9iamVjdCwKKyAgICBHc3RNaW5pT2JqZWN0V2Vha05vdGlmeSBub3RpZnksIGdwb2ludGVyIGRhdGEpCit7CisgIGdib29sZWFuIGZvdW5kX29uZSA9IEZBTFNFOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKG9iamVjdCAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAobm90aWZ5ICE9IE5VTEwpOworCisgIEdfTE9DSyAod2Vha19yZWZzX211dGV4KTsKKworICBpZiAob2JqZWN0LT5uX3dlYWtfcmVmcykgeworICAgIGd1aW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgb2JqZWN0LT5uX3dlYWtfcmVmczsgaSsrKQorICAgICAgaWYgKG9iamVjdC0+d2Vha19yZWZzW2ldLm5vdGlmeSA9PSBub3RpZnkgJiYKKyAgICAgICAgICBvYmplY3QtPndlYWtfcmVmc1tpXS5kYXRhID09IGRhdGEpIHsKKyAgICAgICAgZm91bmRfb25lID0gVFJVRTsKKyAgICAgICAgb2JqZWN0LT5uX3dlYWtfcmVmcyAtPSAxOworICAgICAgICBpZiAoaSAhPSBvYmplY3QtPm5fd2Vha19yZWZzKQorICAgICAgICAgIG9iamVjdC0+d2Vha19yZWZzW2ldID0gb2JqZWN0LT53ZWFrX3JlZnNbb2JqZWN0LT5uX3dlYWtfcmVmc107CisKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgIH0KKyAgR19VTkxPQ0sgKHdlYWtfcmVmc19tdXRleCk7CisgIGlmICghZm91bmRfb25lKQorICAgIGdfd2FybmluZyAoIiVzOiBjb3VsZG4ndCBmaW5kIHdlYWsgcmVmICVwKCVwKSIsIEdfU1RSRlVOQywgbm90aWZ5LCBkYXRhKTsKK30KZGlmZiAtLWdpdCBhL2dzdC9nc3RtaW5pb2JqZWN0LmggYi9nc3QvZ3N0bWluaW9iamVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YjRkZmIKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0bWluaW9iamVjdC5oCkBAIC0wLDAgKzEsMjI4IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNSBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKyAqCisgKiBnc3RtaW5pb2JqZWN0Lmg6IEhlYWRlciBmb3IgR3N0TWluaU9iamVjdAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworI2lmbmRlZiBfX0dTVF9NSU5JX09CSkVDVF9IX18KKyNkZWZpbmUgX19HU1RfTUlOSV9PQkpFQ1RfSF9fCisKKyNpbmNsdWRlIDxnc3QvZ3N0Y29uZmlnLmg+CisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgR1NUX0lTX01JTklfT0JKRUNUX1RZUEUob2JqLHR5cGUpICAoKG9iaikgJiYgR1NUX01JTklfT0JKRUNUX1RZUEUob2JqKSA9PSAodHlwZSkpCisjZGVmaW5lIEdTVF9NSU5JX09CSkVDVF9DQVNUKG9iaikgICAgICAgICAgKChHc3RNaW5pT2JqZWN0Kikob2JqKSkKKyNkZWZpbmUgR1NUX01JTklfT0JKRUNUX0NPTlNUX0NBU1Qob2JqKSAgICAoKGNvbnN0IEdzdE1pbmlPYmplY3QqKShvYmopKQorI2RlZmluZSBHU1RfTUlOSV9PQkpFQ1Qob2JqKSAgICAgICAgICAgICAgIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVChvYmopKQorCit0eXBlZGVmIHN0cnVjdCBfR3N0TWluaU9iamVjdCBHc3RNaW5pT2JqZWN0OworCisvKioKKyAqIEdzdE1pbmlPYmplY3RDb3B5RnVuY3Rpb246CisgKiBAb2JqOiBNaW5pT2JqZWN0IHRvIGNvcHkKKyAqCisgKiBGdW5jdGlvbiBwcm90b3R5cGUgZm9yIG1ldGhvZHMgdG8gY3JlYXRlIGNvcGllcyBvZiBpbnN0YW5jZXMuCisgKgorICogUmV0dXJuczogcmVmZXJlbmNlIHRvIGNsb25lZCBpbnN0YW5jZS4KKyAqLwordHlwZWRlZiBHc3RNaW5pT2JqZWN0ICogKCpHc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uKSAoY29uc3QgR3N0TWluaU9iamVjdCAqb2JqKTsKKy8qKgorICogR3N0TWluaU9iamVjdERpc3Bvc2VGdW5jdGlvbjoKKyAqIEBvYmo6IE1pbmlPYmplY3QgdG8gZGlzcG9zZQorICoKKyAqIEZ1bmN0aW9uIHByb3RvdHlwZSBmb3Igd2hlbiBhIG1pbmlvYmplY3QgaGFzIGxvc3QgaXRzIGxhc3QgcmVmY291bnQuCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgbWluaSBvYmplY3QgYXJlIGFsbG93ZWQgdG8gcmV2aXZlIHRoZQorICogcGFzc2VkIG9iamVjdCBieSBkb2luZyBhIGdzdF9taW5pX29iamVjdF9yZWYoKS4gSWYgdGhlIG9iamVjdCBpcyBub3QKKyAqIHJldml2ZWQgYWZ0ZXIgdGhlIGRpc3Bvc2UgZnVuY3Rpb24sIHRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuICVUUlVFCisgKiBhbmQgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIG9iamVjdCBpcyBmcmVlZC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgb2JqZWN0IHNob3VsZCBiZSBjbGVhbmVkIHVwLgorICovCit0eXBlZGVmIGdib29sZWFuICgqR3N0TWluaU9iamVjdERpc3Bvc2VGdW5jdGlvbikgKEdzdE1pbmlPYmplY3QgKm9iaik7CisvKioKKyAqIEdzdE1pbmlPYmplY3RGcmVlRnVuY3Rpb246CisgKiBAb2JqOiBNaW5pT2JqZWN0IHRvIGZyZWUKKyAqCisgKiBWaXJ0dWFsIGZ1bmN0aW9uIHByb3RvdHlwZSBmb3IgbWV0aG9kcyB0byBmcmVlIHJlc3NvdXJjZXMgdXNlZCBieQorICogbWluaS1vYmplY3RzLgorICovCit0eXBlZGVmIHZvaWQgKCpHc3RNaW5pT2JqZWN0RnJlZUZ1bmN0aW9uKSAoR3N0TWluaU9iamVjdCAqb2JqKTsKKworIC8qKgorICogR3N0TWluaU9iamVjdFdlYWtOb3RpZnk6CisgKiBAZGF0YTogZGF0YSB0aGF0IHdhcyBwcm92aWRlZCB3aGVuIHRoZSB3ZWFrIHJlZmVyZW5jZSB3YXMgZXN0YWJsaXNoZWQKKyAqIEB3aGVyZV90aGVfbWluaV9vYmplY3Rfd2FzOiB0aGUgbWluaSBvYmplY3QgYmVpbmcgZmluYWxpemVkCisgKiAKKyAqIEEgI0dzdE1pbmlPYmplY3RXZWFrTm90aWZ5IGZ1bmN0aW9uIGNhbiBiZSBhZGRlZCB0byBhIG1pbmkgb2JqZWN0IGFzIGEKKyAqIGNhbGxiYWNrIHRoYXQgZ2V0cyB0cmlnZ2VyZWQgd2hlbiB0aGUgbWluaSBvYmplY3QgaXMgZmluYWxpemVkLiBTaW5jZSB0aGUKKyAqIG1pbmkgb2JqZWN0IGlzIGFscmVhZHkgYmVpbmcgZmluYWxpemVkIHdoZW4gdGhlICNHc3RNaW5pT2JqZWN0V2Vha05vdGlmeSBpcworICogY2FsbGVkLCB0aGVyZSdzIG5vdCBtdWNoIHlvdSBjb3VsZCBkbyB3aXRoIHRoZSBvYmplY3QsIGFwYXJ0IGZyb20gZS5nLiB1c2luZworICogaXRzIGFkcmVzcyBhcyBoYXNoLWluZGV4IG9yIHRoZSBsaWtlLgorICoKKyAqIFNpbmNlOiAwLjEwLjM1CisgKi8KK3R5cGVkZWYgdm9pZCAoKkdzdE1pbmlPYmplY3RXZWFrTm90aWZ5KSAoZ3BvaW50ZXIgZGF0YSwKKyAgICBHc3RNaW5pT2JqZWN0ICogd2hlcmVfdGhlX21pbmlfb2JqZWN0X3dhcyk7CisKKy8qKgorICogR1NUX01JTklfT0JKRUNUX0ZMQUdTOgorICogQG9iajogTWluaU9iamVjdCB0byByZXR1cm4gZmxhZ3MgZm9yLgorICoKKyAqIFRoaXMgbWFjcm8gcmV0dXJucyB0aGUgZW50aXJlIHNldCBvZiBmbGFncyBmb3IgdGhlIG1pbmktb2JqZWN0LgorICovCisjZGVmaW5lIEdTVF9NSU5JX09CSkVDVF9UWVBFKG9iaikgIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVChvYmopLT50eXBlKQorLyoqCisgKiBHU1RfTUlOSV9PQkpFQ1RfRkxBR1M6CisgKiBAb2JqOiBNaW5pT2JqZWN0IHRvIHJldHVybiBmbGFncyBmb3IuCisgKgorICogVGhpcyBtYWNybyByZXR1cm5zIHRoZSBlbnRpcmUgc2V0IG9mIGZsYWdzIGZvciB0aGUgbWluaS1vYmplY3QuCisgKi8KKyNkZWZpbmUgR1NUX01JTklfT0JKRUNUX0ZMQUdTKG9iaikgIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVChvYmopLT5mbGFncykKKy8qKgorICogR1NUX01JTklfT0JKRUNUX0ZMQUdfSVNfU0VUOgorICogQG9iajogTWluaU9iamVjdCB0byBjaGVjayBmb3IgZmxhZ3MuCisgKiBAZmxhZzogRmxhZyB0byBjaGVjayBmb3IKKyAqCisgKiBUaGlzIG1hY3JvIGNoZWNrcyB0byBzZWUgaWYgdGhlIGdpdmVuIGZsYWcgaXMgc2V0LgorICovCisjZGVmaW5lIEdTVF9NSU5JX09CSkVDVF9GTEFHX0lTX1NFVChvYmosZmxhZykgICAgICAgICEhKEdTVF9NSU5JX09CSkVDVF9GTEFHUyAob2JqKSAmIChmbGFnKSkKKy8qKgorICogR1NUX01JTklfT0JKRUNUX0ZMQUdfU0VUOgorICogQG9iajogTWluaU9iamVjdCB0byBzZXQgZmxhZyBpbi4KKyAqIEBmbGFnOiBGbGFnIHRvIHNldCwgY2FuIGJ5IGFueSBudW1iZXIgb2YgYml0cyBpbiBndWludDMyLgorICoKKyAqIFRoaXMgbWFjcm8gc2V0cyB0aGUgZ2l2ZW4gYml0cy4KKyAqLworI2RlZmluZSBHU1RfTUlOSV9PQkpFQ1RfRkxBR19TRVQob2JqLGZsYWcpICAgICAgICAgICAoR1NUX01JTklfT0JKRUNUX0ZMQUdTIChvYmopIHw9IChmbGFnKSkKKy8qKgorICogR1NUX01JTklfT0JKRUNUX0ZMQUdfVU5TRVQ6CisgKiBAb2JqOiBNaW5pT2JqZWN0IHRvIHVuc2V0IGZsYWcgaW4uCisgKiBAZmxhZzogRmxhZyB0byBzZXQsIG11c3QgYmUgYSBzaW5nbGUgYml0IGluIGd1aW50MzIuCisgKgorICogVGhpcyBtYWNybyB1c2V0cyB0aGUgZ2l2ZW4gYml0cy4KKyAqLworI2RlZmluZSBHU1RfTUlOSV9PQkpFQ1RfRkxBR19VTlNFVChvYmosZmxhZykgICAgICAgICAoR1NUX01JTklfT0JKRUNUX0ZMQUdTIChvYmopICY9IH4oZmxhZykpCisKKy8qKgorICogR3N0TWluaU9iamVjdEZsYWdzOgorICogQEdTVF9NSU5JX09CSkVDVF9GTEFHX0xBU1Q6IGZpcnN0IGZsYWcgdGhhdCBjYW4gYmUgdXNlZCBieSBzdWJjbGFzc2VzLgorICoKKyAqIEZsYWdzIGZvciB0aGUgbWluaSBvYmplY3QKKyAqLwordHlwZWRlZiBlbnVtCit7CisgIC8qIHBhZGRpbmcgKi8KKyAgR1NUX01JTklfT0JKRUNUX0ZMQUdfTEFTVCA9ICgxPDw0KQorfSBHc3RNaW5pT2JqZWN0RmxhZ3M7CisKKy8qKgorICogR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UOgorICogQG9iajogYSAjR3N0TWluaU9iamVjdAorICoKKyAqIEdldCBhY2Nlc3MgdG8gdGhlIHJlZmVyZW5jZSBjb3VudCBmaWVsZCBvZiB0aGUgbWluaS1vYmplY3QuCisgKi8KKyNkZWZpbmUgR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UKG9iaikgICAgICAgICAgICgoR1NUX01JTklfT0JKRUNUX0NBU1Qob2JqKSktPnJlZmNvdW50KQorLyoqCisgKiBHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUU6CisgKiBAb2JqOiBhICNHc3RNaW5pT2JqZWN0CisgKgorICogR2V0IHRoZSByZWZlcmVuY2UgY291bnQgdmFsdWUgb2YgdGhlIG1pbmktb2JqZWN0LgorICovCisjZGVmaW5lIEdTVF9NSU5JX09CSkVDVF9SRUZDT1VOVF9WQUxVRShvYmopICAgICAoZ19hdG9taWNfaW50X2dldCAoJihHU1RfTUlOSV9PQkpFQ1RfQ0FTVChvYmopKS0+cmVmY291bnQpKQorCisvKioKKyAqIEdTVF9NSU5JX09CSkVDVF9TSVpFOgorICogQG9iajogYSAjR3N0TWluaU9iamVjdAorICoKKyAqIEdldCB0aGUgYWxsb2NhdGVkIHNpemUgb2YgQG9iai4KKyAqLworI2RlZmluZSBHU1RfTUlOSV9PQkpFQ1RfU0laRShvYmopICAgICAgICAgICAgICAoKEdTVF9NSU5JX09CSkVDVF9DQVNUKG9iaikpLT5zaXplKQorCisvKioKKyAqIEdzdE1pbmlPYmplY3Q6CisgKiBAdHlwZTogdGhlIEdUeXBlIG9mIHRoZSBvYmplY3QKKyAqIEByZWZjb3VudDogYXRvbWljIHJlZmNvdW50CisgKiBAZmxhZ3M6IGV4dHJhIGZsYWdzLgorICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUKKyAqIEBjb3B5OiBhIGNvcHkgZnVuY3Rpb24KKyAqIEBkaXNwb3NlOiBhIGRpc3Bvc2UgZnVuY3Rpb24KKyAqIEBmcmVlOiB0aGUgZnJlZSBmdW5jdGlvbgorICoKKyAqIEJhc2UgY2xhc3MgZm9yIHJlZmNvdW50ZWQgbGlnaHR3ZWlnaHQgb2JqZWN0cy4KKyAqIFJlZiBGdW5jOiBnc3RfbWluaV9vYmplY3RfcmVmCisgKiBVbnJlZiBGdW5jOiBnc3RfbWluaV9vYmplY3RfdW5yZWYKKyAqIFNldCBWYWx1ZSBGdW5jOiBnX3ZhbHVlX3NldF9ib3hlZAorICogR2V0IFZhbHVlIEZ1bmM6IGdfdmFsdWVfZ2V0X2JveGVkCisgKi8KK3N0cnVjdCBfR3N0TWluaU9iamVjdCB7CisgIEdUeXBlICAgdHlwZTsKKworICAvKjwgcHVibGljID4qLyAvKiB3aXRoIENPVyAqLworICBnaW50ICAgIHJlZmNvdW50OworICBndWludCAgIGZsYWdzOworICBnc2l6ZSAgIHNpemU7CisKKyAgR3N0TWluaU9iamVjdENvcHlGdW5jdGlvbiBjb3B5OworICBHc3RNaW5pT2JqZWN0RGlzcG9zZUZ1bmN0aW9uIGRpc3Bvc2U7CisgIEdzdE1pbmlPYmplY3RGcmVlRnVuY3Rpb24gZnJlZTsKKworICAvKiA8IHByaXZhdGUgPiAqLworICAvKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2VhayByZWYgbm90aWZpZXMgKi8KKyAgZ3VpbnQgbl93ZWFrX3JlZnM7CisgIHN0cnVjdAorICB7CisgICAgR3N0TWluaU9iamVjdFdlYWtOb3RpZnkgbm90aWZ5OworICAgIGdwb2ludGVyIGRhdGE7CisgIH0gKndlYWtfcmVmczsKK307CisKK3ZvaWQgICAgICAgICAgICBnc3RfbWluaV9vYmplY3RfaW5pdCAgICAgICAgICAgIChHc3RNaW5pT2JqZWN0ICptaW5pX29iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVHlwZSB0eXBlLCBnc2l6ZSBzaXplKTsKKworR3N0TWluaU9iamVjdCAqIGdzdF9taW5pX29iamVjdF9jb3B5CQkoY29uc3QgR3N0TWluaU9iamVjdCAqbWluaV9vYmplY3QpOworZ2Jvb2xlYW4gICAgICAgIGdzdF9taW5pX29iamVjdF9pc193cml0YWJsZQkoY29uc3QgR3N0TWluaU9iamVjdCAqbWluaV9vYmplY3QpOworR3N0TWluaU9iamVjdCAqIGdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlCShHc3RNaW5pT2JqZWN0ICptaW5pX29iamVjdCk7CisKKy8qIHJlZmNvdW50aW5nICovCitHc3RNaW5pT2JqZWN0ICogZ3N0X21pbmlfb2JqZWN0X3JlZgkJKEdzdE1pbmlPYmplY3QgKm1pbmlfb2JqZWN0KTsKK3ZvaWQgICAgICAgICAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYJCShHc3RNaW5pT2JqZWN0ICptaW5pX29iamVjdCk7CisKK3ZvaWQgICAgICAgICAgICBnc3RfbWluaV9vYmplY3Rfd2Vha19yZWYgICAgICAgIChHc3RNaW5pT2JqZWN0ICpvYmplY3QsCisJCQkJCSAgICAgICAgIEdzdE1pbmlPYmplY3RXZWFrTm90aWZ5IG5vdGlmeSwKKwkJCQkJICAgICAgICAgZ3BvaW50ZXIgZGF0YSk7Cit2b2lkICAgICAgICAgICAgZ3N0X21pbmlfb2JqZWN0X3dlYWtfdW5yZWYJKEdzdE1pbmlPYmplY3QgKm9iamVjdCwKKwkJCQkJICAgICAgICAgR3N0TWluaU9iamVjdFdlYWtOb3RpZnkgbm90aWZ5LAorCQkJCQkgICAgICAgICBncG9pbnRlciBkYXRhKTsKKworZ2Jvb2xlYW4gICAgICAgIGdzdF9taW5pX29iamVjdF9yZXBsYWNlICAgICAgICAgKEdzdE1pbmlPYmplY3QgKipvbGRkYXRhLCBHc3RNaW5pT2JqZWN0ICpuZXdkYXRhKTsKK2dib29sZWFuICAgICAgICBnc3RfbWluaV9vYmplY3RfdGFrZSAgICAgICAgICAgIChHc3RNaW5pT2JqZWN0ICoqb2xkZGF0YSwgR3N0TWluaU9iamVjdCAqbmV3ZGF0YSk7CitHc3RNaW5pT2JqZWN0ICogZ3N0X21pbmlfb2JqZWN0X3N0ZWFsICAgICAgICAgICAoR3N0TWluaU9iamVjdCAqKm9sZGRhdGEpOworCisjZGVmaW5lIEdTVF9ERUZJTkVfTUlOSV9PQkpFQ1RfVFlQRShUeXBlTmFtZSx0eXBlX25hbWUpIFwKKyAgIEdfREVGSU5FX0JPWEVEX1RZUEUoVHlwZU5hbWUsdHlwZV9uYW1lLCAgICAgICAgICAgICAgXAorICAgICAgIChHQm94ZWRDb3B5RnVuYykgZ3N0X21pbmlfb2JqZWN0X3JlZiwgICAgICAgICAgICBcCisgICAgICAgKEdCb3hlZEZyZWVGdW5jKWdzdF9taW5pX29iamVjdF91bnJlZikKKworR19FTkRfREVDTFMKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2dzdC9nc3RvYmplY3QuYyBiL2dzdC9nc3RvYmplY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGM0YzI1Ci0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdG9iamVjdC5jCkBAIC0wLDAgKzEsOTUyIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgorICoKKyAqIGdzdG9iamVjdC5jOiBGdW5kYW1lbnRhbCBjbGFzcyB1c2VkIGZvciBhbGwgb2YgR1N0cmVhbWVyCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoqCisgKiBTRUNUSU9OOmdzdG9iamVjdAorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBCYXNlIGNsYXNzIGZvciB0aGUgR1N0cmVhbWVyIG9iamVjdCBoaWVyYXJjaHkKKyAqCisgKiAjR3N0T2JqZWN0IHByb3ZpZGVzIGEgcm9vdCBmb3IgdGhlIG9iamVjdCBoaWVyYXJjaHkgdHJlZSBmaWxlZCBpbiBieSB0aGUKKyAqIEdTdHJlYW1lciBsaWJyYXJ5LiAgSXQgaXMgY3VycmVudGx5IGEgdGhpbiB3cmFwcGVyIG9uIHRvcCBvZgorICogI0dPYmplY3QuIEl0IGlzIGFuIGFic3RyYWN0IGNsYXNzIHRoYXQgaXMgbm90IHZlcnkgdXNhYmxlIG9uIGl0cyBvd24uCisgKgorICogI0dzdE9iamVjdCBnaXZlcyB1cyBiYXNpYyByZWZjb3VudGluZywgcGFyZW50aW5nIGZ1bmN0aW9uYWxpdHkgYW5kIGxvY2tpbmcuCisgKiBNb3N0IG9mIHRoZSBmdW5jdGlvbiBhcmUganVzdCBleHRlbmRlZCBmb3Igc3BlY2lhbCBHU3RyZWFtZXIgbmVlZHMgYW5kIGNhbiBiZQorICogZm91bmQgdW5kZXIgdGhlIHNhbWUgbmFtZSBpbiB0aGUgYmFzZSBjbGFzcyBvZiAjR3N0T2JqZWN0IHdoaWNoIGlzICNHT2JqZWN0CisgKiAoZS5nLiBnX29iamVjdF9yZWYoKSBiZWNvbWVzIGdzdF9vYmplY3RfcmVmKCkpLgorICoKKyAqIFRoZSBtb3N0IGludGVyZXN0aW5nIGRpZmZlcmVuY2UgYmV0d2VlbiAjR3N0T2JqZWN0IGFuZCAjR09iamVjdCBpcyB0aGUKKyAqICJmbG9hdGluZyIgcmVmZXJlbmNlIGNvdW50LiBBICNHT2JqZWN0IGlzIGNyZWF0ZWQgd2l0aCBhIHJlZmVyZW5jZSBjb3VudCBvZgorICogMSwgb3duZWQgYnkgdGhlIGNyZWF0b3Igb2YgdGhlICNHT2JqZWN0LiAoVGhlIG93bmVyIG9mIGEgcmVmZXJlbmNlIGlzIHRoZQorICogY29kZSBzZWN0aW9uIHRoYXQgaGFzIHRoZSByaWdodCB0byBjYWxsIGdzdF9vYmplY3RfdW5yZWYoKSBpbiBvcmRlciB0bworICogcmVtb3ZlIHRoYXQgcmVmZXJlbmNlLikgQSAjR3N0T2JqZWN0IGlzIGNyZWF0ZWQgd2l0aCBhIHJlZmVyZW5jZSBjb3VudCBvZiAxCisgKiBhbHNvLCBidXQgaXQgaXNuJ3Qgb3duZWQgYnkgYW55b25lOyBJbnN0ZWFkLCB0aGUgaW5pdGlhbCByZWZlcmVuY2UgY291bnQKKyAqIG9mIGEgI0dzdE9iamVjdCBpcyAiZmxvYXRpbmciLiBUaGUgZmxvYXRpbmcgcmVmZXJlbmNlIGNhbiBiZSByZW1vdmVkIGJ5CisgKiBhbnlvbmUgYXQgYW55IHRpbWUsIGJ5IGNhbGxpbmcgZ3N0X29iamVjdF9zaW5rKCkuICBnc3Rfb2JqZWN0X3NpbmsoKSBkb2VzCisgKiBub3RoaW5nIGlmIGFuIG9iamVjdCBpcyBhbHJlYWR5IHN1bmsgKGhhcyBubyBmbG9hdGluZyByZWZlcmVuY2UpLgorICoKKyAqIFdoZW4geW91IGFkZCBhICNHc3RFbGVtZW50IHRvIGl0cyBwYXJlbnQgY29udGFpbmVyLCB0aGUgcGFyZW50IGNvbnRhaW5lciB3aWxsCisgKiBkbyB0aGlzOgorICogPGluZm9ybWFsZXhhbXBsZT4KKyAqIDxwcm9ncmFtbGlzdGluZz4KKyAqICAgZ3N0X29iamVjdF9yZWYgKEdTVF9PQkpFQ1QgKGNoaWxkX2VsZW1lbnQpKTsKKyAqICAgZ3N0X29iamVjdF9zaW5rIChHU1RfT0JKRUNUIChjaGlsZF9lbGVtZW50KSk7CisgKiA8L3Byb2dyYW1saXN0aW5nPgorICogPC9pbmZvcm1hbGV4YW1wbGU+CisgKiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNvbnRhaW5lciBub3cgb3ducyBhIHJlZmVyZW5jZSB0byB0aGUgY2hpbGQgZWxlbWVudAorICogKHNpbmNlIGl0IGNhbGxlZCBnc3Rfb2JqZWN0X3JlZigpKSwgYW5kIHRoZSBjaGlsZCBlbGVtZW50IGhhcyBubyBmbG9hdGluZworICogcmVmZXJlbmNlLgorICoKKyAqIFRoZSBwdXJwb3NlIG9mIHRoZSBmbG9hdGluZyByZWZlcmVuY2UgaXMgdG8ga2VlcCB0aGUgY2hpbGQgZWxlbWVudCBhbGl2ZQorICogdW50aWwgeW91IGFkZCBpdCB0byBhIHBhcmVudCBjb250YWluZXIsIHdoaWNoIHRoZW4gbWFuYWdlcyB0aGUgbGlmZXRpbWUgb2YKKyAqIHRoZSBvYmplY3QgaXRzZWxmOgorICogPGluZm9ybWFsZXhhbXBsZT4KKyAqIDxwcm9ncmFtbGlzdGluZz4KKyAqICAgIGVsZW1lbnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKGZhY3RvcnluYW1lLCBuYW1lKTsKKyAqICAgIC8vIGVsZW1lbnQgaGFzIG9uZSBmbG9hdGluZyByZWZlcmVuY2UgdG8ga2VlcCBpdCBhbGl2ZQorICogICAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGJpbiksIGVsZW1lbnQpOworICogICAgLy8gZWxlbWVudCBoYXMgb25lIG5vbi1mbG9hdGluZyByZWZlcmVuY2Ugb3duZWQgYnkgdGhlIGNvbnRhaW5lcgorICogPC9wcm9ncmFtbGlzdGluZz4KKyAqIDwvaW5mb3JtYWxleGFtcGxlPgorICoKKyAqIEFub3RoZXIgZWZmZWN0IG9mIHRoaXMgaXMsIHRoYXQgY2FsbGluZyBnc3Rfb2JqZWN0X3VucmVmKCkgb24gYSBiaW4gb2JqZWN0LAorICogd2lsbCBhbHNvIGRlc3RveSBhbGwgdGhlICNHc3RFbGVtZW50IG9iamVjdHMgaW4gaXQuIFRoZSBzYW1lIGlzIHRydWUgZm9yCisgKiBjYWxsaW5nIGdzdF9iaW5fcmVtb3ZlKCkuCisgKgorICogU3BlY2lhbCBjYXJlIGhhcyB0byBiZSB0YWtlbiBmb3IgYWxsIG1ldGhvZHMgdGhhdCBnc3Rfb2JqZWN0X3NpbmsoKSBhbiBvYmplY3QKKyAqIHNpbmNlIGlmIHRoZSBjYWxsZXIgb2YgdGhvc2UgZnVuY3Rpb25zIGhhZCBhIGZsb2F0aW5nIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0LAorICogdGhlIG9iamVjdCByZWZlcmVuY2UgaXMgbm93IGludmFsaWQuCisgKgorICogSW4gY29udHJhc3QgdG8gI0dPYmplY3QgaW5zdGFuY2VzLCAjR3N0T2JqZWN0IGFkZHMgYSBuYW1lIHByb3BlcnR5LiBUaGUgZnVuY3Rpb25zCisgKiBnc3Rfb2JqZWN0X3NldF9uYW1lKCkgYW5kIGdzdF9vYmplY3RfZ2V0X25hbWUoKSBhcmUgdXNlZCB0byBzZXQvZ2V0IHRoZSBuYW1lCisgKiBvZiB0aGUgb2JqZWN0LgorICoKKyAqIExhc3QgcmV2aWV3ZWQgb24gMjAwNS0xMS0wOSAoMC45LjQpCisgKi8KKworI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCisjaW5jbHVkZSAiZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIgorCisjaW5jbHVkZSAiZ3N0b2JqZWN0LmgiCisjaW5jbHVkZSAiZ3N0bWFyc2hhbC5oIgorI2luY2x1ZGUgImdzdGluZm8uaCIKKyNpbmNsdWRlICJnc3R1dGlscy5oIgorCisjaWZuZGVmIEdTVF9ESVNBQkxFX1RSQUNFCisjaW5jbHVkZSAiZ3N0dHJhY2UuaCIKK3N0YXRpYyBHc3RBbGxvY1RyYWNlICpfZ3N0X29iamVjdF90cmFjZTsKKyNlbmRpZgorCisjZGVmaW5lIERFQlVHX1JFRkNPVU5UCisKKy8qIE9iamVjdCBzaWduYWxzIGFuZCBhcmdzICovCitlbnVtCit7CisgIERFRVBfTk9USUZZLAorICBMQVNUX1NJR05BTAorfTsKKworZW51bQoreworICBQUk9QXzAsCisgIFBST1BfTkFNRSwKKyAgUFJPUF9QQVJFTlQsCisgIFBST1BfTEFTVAorfTsKKworZW51bQoreworICBTT19PQkpFQ1RfTE9BREVELAorICBTT19MQVNUX1NJR05BTAorfTsKKworLyogbWFwcyB0eXBlIG5hbWUgcXVhcmsgPT4gY291bnQgKi8KK3N0YXRpYyBHRGF0YSAqb2JqZWN0X25hbWVfY291bnRzID0gTlVMTDsKKworR19MT0NLX0RFRklORV9TVEFUSUMgKG9iamVjdF9uYW1lX211dGV4KTsKKworc3RhdGljIHZvaWQgZ3N0X29iamVjdF9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7CitzdGF0aWMgdm9pZCBnc3Rfb2JqZWN0X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKKworc3RhdGljIHZvaWQgZ3N0X29iamVjdF9kaXNwYXRjaF9wcm9wZXJ0aWVzX2NoYW5nZWQgKEdPYmplY3QgKiBvYmplY3QsCisgICAgZ3VpbnQgbl9wc3BlY3MsIEdQYXJhbVNwZWMgKiogcHNwZWNzKTsKKworc3RhdGljIHZvaWQgZ3N0X29iamVjdF9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KTsKK3N0YXRpYyB2b2lkIGdzdF9vYmplY3RfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOworCitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X29iamVjdF9zZXRfbmFtZV9kZWZhdWx0IChHc3RPYmplY3QgKiBvYmplY3QpOworCitzdGF0aWMgZ3VpbnQgZ3N0X29iamVjdF9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OworCitzdGF0aWMgR1BhcmFtU3BlYyAqcHJvcGVydGllc1tQUk9QX0xBU1RdOworCitHX0RFRklORV9BQlNUUkFDVF9UWVBFIChHc3RPYmplY3QsIGdzdF9vYmplY3QsIEdfVFlQRV9JTklUSUFMTFlfVU5PV05FRCk7CisKK3N0YXRpYyB2b2lkCitnc3Rfb2JqZWN0X2NsYXNzX2luaXQgKEdzdE9iamVjdENsYXNzICoga2xhc3MpCit7CisgIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7CisKKyNpZm5kZWYgR1NUX0RJU0FCTEVfVFJBQ0UKKyAgX2dzdF9vYmplY3RfdHJhY2UgPSBnc3RfYWxsb2NfdHJhY2VfcmVnaXN0ZXIgKGdfdHlwZV9uYW1lIChHU1RfVFlQRV9PQkpFQ1QpKTsKKyNlbmRpZgorCisgIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9vYmplY3Rfc2V0X3Byb3BlcnR5OworICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3Rfb2JqZWN0X2dldF9wcm9wZXJ0eTsKKworICBwcm9wZXJ0aWVzW1BST1BfTkFNRV0gPQorICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoIm5hbWUiLCAiTmFtZSIsICJUaGUgbmFtZSBvZiB0aGUgb2JqZWN0IiwgTlVMTCwKKyAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1QgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKTsKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9OQU1FLAorICAgICAgcHJvcGVydGllc1tQUk9QX05BTUVdKTsKKworICBwcm9wZXJ0aWVzW1BST1BfUEFSRU5UXSA9CisgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0ICgicGFyZW50IiwgIlBhcmVudCIsICJUaGUgcGFyZW50IG9mIHRoZSBvYmplY3QiLAorICAgICAgR1NUX1RZUEVfT0JKRUNULCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpOworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1BBUkVOVCwKKyAgICAgIHByb3BlcnRpZXNbUFJPUF9QQVJFTlRdKTsKKworICAvKioKKyAgICogR3N0T2JqZWN0OjpkZWVwLW5vdGlmeToKKyAgICogQGdzdG9iamVjdDogYSAjR3N0T2JqZWN0CisgICAqIEBwcm9wX29iamVjdDogdGhlIG9iamVjdCB0aGF0IG9yaWdpbmF0ZWQgdGhlIHNpZ25hbAorICAgKiBAcHJvcDogdGhlIHByb3BlcnR5IHRoYXQgY2hhbmdlZAorICAgKgorICAgKiBUaGUgZGVlcCBub3RpZnkgc2lnbmFsIGlzIHVzZWQgdG8gYmUgbm90aWZpZWQgb2YgcHJvcGVydHkgY2hhbmdlcy4gSXQgaXMKKyAgICogdHlwaWNhbGx5IGF0dGFjaGVkIHRvIHRoZSB0b3BsZXZlbCBiaW4gdG8gcmVjZWl2ZSBub3RpZmljYXRpb25zIGZyb20gYWxsCisgICAqIHRoZSBlbGVtZW50cyBjb250YWluZWQgaW4gdGhhdCBiaW4uCisgICAqLworICBnc3Rfb2JqZWN0X3NpZ25hbHNbREVFUF9OT1RJRlldID0KKyAgICAgIGdfc2lnbmFsX25ldyAoImRlZXAtbm90aWZ5IiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKKyAgICAgIEdfU0lHTkFMX1JVTl9GSVJTVCB8IEdfU0lHTkFMX05PX1JFQ1VSU0UgfCBHX1NJR05BTF9ERVRBSUxFRCB8CisgICAgICBHX1NJR05BTF9OT19IT09LUywgR19TVFJVQ1RfT0ZGU0VUIChHc3RPYmplY3RDbGFzcywgZGVlcF9ub3RpZnkpLCBOVUxMLAorICAgICAgTlVMTCwgZ3N0X21hcnNoYWxfVk9JRF9fT0JKRUNUX1BBUkFNLCBHX1RZUEVfTk9ORSwgMiwgR1NUX1RZUEVfT0JKRUNULAorICAgICAgR19UWVBFX1BBUkFNKTsKKworICBrbGFzcy0+cGF0aF9zdHJpbmdfc2VwYXJhdG9yID0gIi8iOworCisgIC8qIHNlZSB0aGUgY29tbWVudHMgYXQgZ3N0X29iamVjdF9kaXNwYXRjaF9wcm9wZXJ0aWVzX2NoYW5nZWQgKi8KKyAgZ29iamVjdF9jbGFzcy0+ZGlzcGF0Y2hfcHJvcGVydGllc19jaGFuZ2VkCisgICAgICA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfb2JqZWN0X2Rpc3BhdGNoX3Byb3BlcnRpZXNfY2hhbmdlZCk7CisKKyAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF9vYmplY3RfZGlzcG9zZTsKKyAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3Rfb2JqZWN0X2ZpbmFsaXplOworfQorCitzdGF0aWMgdm9pZAorZ3N0X29iamVjdF9pbml0IChHc3RPYmplY3QgKiBvYmplY3QpCit7CisgIG9iamVjdC0+bG9jayA9IGdfbXV0ZXhfbmV3ICgpOworICBvYmplY3QtPnBhcmVudCA9IE5VTEw7CisgIG9iamVjdC0+bmFtZSA9IE5VTEw7CisgIEdTVF9DQVRfVFJBQ0VfT0JKRUNUIChHU1RfQ0FUX1JFRkNPVU5USU5HLCBvYmplY3QsICIlcCBuZXciLCBvYmplY3QpOworCisjaWZuZGVmIEdTVF9ESVNBQkxFX1RSQUNFCisgIGdzdF9hbGxvY190cmFjZV9uZXcgKF9nc3Rfb2JqZWN0X3RyYWNlLCBvYmplY3QpOworI2VuZGlmCisKKyAgb2JqZWN0LT5mbGFncyA9IDA7Cit9CisKKy8qKgorICogZ3N0X29iamVjdF9yZWY6CisgKiBAb2JqZWN0OiBhICNHc3RPYmplY3QgdG8gcmVmZXJlbmNlCisgKgorICogSW5jcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IG9uIEBvYmplY3QuIFRoaXMgZnVuY3Rpb24KKyAqIGRvZXMgbm90IHRha2UgdGhlIGxvY2sgb24gQG9iamVjdCBiZWNhdXNlIGl0IHJlbGllcyBvbgorICogYXRvbWljIHJlZmNvdW50aW5nLgorICoKKyAqIFRoaXMgb2JqZWN0IHJldHVybnMgdGhlIGlucHV0IHBhcmFtZXRlciB0byBlYXNlIHdyaXRpbmcKKyAqIGNvbnN0cnVjdHMgbGlrZSA6CisgKiAgcmVzdWx0ID0gZ3N0X29iamVjdF9yZWYgKG9iamVjdC0+cGFyZW50KTsKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgcG9pbnRlciB0byBAb2JqZWN0CisgKi8KK2dwb2ludGVyCitnc3Rfb2JqZWN0X3JlZiAoZ3BvaW50ZXIgb2JqZWN0KQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAob2JqZWN0ICE9IE5VTEwsIE5VTEwpOworCisjaWZkZWYgREVCVUdfUkVGQ09VTlQKKyAgR1NUX0NBVF9UUkFDRV9PQkpFQ1QgKEdTVF9DQVRfUkVGQ09VTlRJTkcsIG9iamVjdCwgIiVwIHJlZiAlZC0+JWQiLCBvYmplY3QsCisgICAgICAoKEdPYmplY3QgKikgb2JqZWN0KS0+cmVmX2NvdW50LCAoKEdPYmplY3QgKikgb2JqZWN0KS0+cmVmX2NvdW50ICsgMSk7CisjZW5kaWYKKyAgZ19vYmplY3RfcmVmIChvYmplY3QpOworCisgIHJldHVybiBvYmplY3Q7Cit9CisKKy8qKgorICogZ3N0X29iamVjdF91bnJlZjoKKyAqIEBvYmplY3Q6IGEgI0dzdE9iamVjdCB0byB1bnJlZmVyZW5jZQorICoKKyAqIERlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBvbiBAb2JqZWN0LiAgSWYgcmVmZXJlbmNlIGNvdW50IGhpdHMKKyAqIHplcm8sIGRlc3Ryb3kgQG9iamVjdC4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIHRoZSBsb2NrCisgKiBvbiBAb2JqZWN0IGFzIGl0IHJlbGllcyBvbiBhdG9taWMgcmVmY291bnRpbmcuCisgKgorICogVGhlIHVucmVmIG1ldGhvZCBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdpdGggdGhlIExPQ0sgaGVsZCBzaW5jZQorICogdGhpcyBtaWdodCBkZWFkbG9jayB0aGUgZGlzcG9zZSBmdW5jdGlvbi4KKyAqLwordm9pZAorZ3N0X29iamVjdF91bnJlZiAoZ3BvaW50ZXIgb2JqZWN0KQoreworICBnX3JldHVybl9pZl9mYWlsIChvYmplY3QgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKCgoR09iamVjdCAqKSBvYmplY3QpLT5yZWZfY291bnQgPiAwKTsKKworI2lmZGVmIERFQlVHX1JFRkNPVU5UCisgIEdTVF9DQVRfVFJBQ0VfT0JKRUNUIChHU1RfQ0FUX1JFRkNPVU5USU5HLCBvYmplY3QsICIlcCB1bnJlZiAlZC0+JWQiLCBvYmplY3QsCisgICAgICAoKEdPYmplY3QgKikgb2JqZWN0KS0+cmVmX2NvdW50LCAoKEdPYmplY3QgKikgb2JqZWN0KS0+cmVmX2NvdW50IC0gMSk7CisjZW5kaWYKKyAgZ19vYmplY3RfdW5yZWYgKG9iamVjdCk7Cit9CisKKy8qKgorICogZ3N0X29iamVjdF9yZWZfc2luazoKKyAqIEBvYmplY3Q6IGEgI0dzdE9iamVjdCB0byBzaW5rCisgKgorICogSW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBAb2JqZWN0LCBhbmQgcG9zc2libHkgcmVtb3ZlIHRoZSBmbG9hdGluZworICogcmVmZXJlbmNlLCBpZiBAb2JqZWN0IGhhcyBhIGZsb2F0aW5nIHJlZmVyZW5jZS4KKyAqCisgKiBJbiBvdGhlciB3b3JkcywgaWYgdGhlIG9iamVjdCBpcyBmbG9hdGluZywgdGhlbiB0aGlzIGNhbGwgImFzc3VtZXMgb3duZXJzaGlwIgorICogb2YgdGhlIGZsb2F0aW5nIHJlZmVyZW5jZSwgY29udmVydGluZyBpdCB0byBhIG5vcm1hbCByZWZlcmVuY2UgYnkgY2xlYXJpbmcKKyAqIHRoZSBmbG9hdGluZyBmbGFnIHdoaWxlIGxlYXZpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCB1bmNoYW5nZWQuIElmIHRoZSBvYmplY3QKKyAqIGlzIG5vdCBmbG9hdGluZywgdGhlbiB0aGlzIGNhbGwgYWRkcyBhIG5ldyBub3JtYWwgcmVmZXJlbmNlIGluY3JlYXNpbmcgdGhlCisgKiByZWZlcmVuY2UgY291bnQgYnkgb25lLgorICovCitncG9pbnRlcgorZ3N0X29iamVjdF9yZWZfc2luayAoZ3BvaW50ZXIgb2JqZWN0KQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAob2JqZWN0ICE9IE5VTEwsIE5VTEwpOworCisjaWZkZWYgREVCVUdfUkVGQ09VTlQKKyAgR1NUX0NBVF9UUkFDRV9PQkpFQ1QgKEdTVF9DQVRfUkVGQ09VTlRJTkcsIG9iamVjdCwgIiVwIHJlZl9zaW5rICVkLT4lZCIsCisgICAgICBvYmplY3QsICgoR09iamVjdCAqKSBvYmplY3QpLT5yZWZfY291bnQsCisgICAgICAoKEdPYmplY3QgKikgb2JqZWN0KS0+cmVmX2NvdW50ICsgMSk7CisjZW5kaWYKKyAgcmV0dXJuIGdfb2JqZWN0X3JlZl9zaW5rIChvYmplY3QpOworfQorCisvKioKKyAqIGdzdF9vYmplY3RfcmVwbGFjZToKKyAqIEBvbGRvYmo6IChpbm91dCkgKHRyYW5zZmVyIGZ1bGwpOiBwb2ludGVyIHRvIGEgcGxhY2Ugb2YgYSAjR3N0T2JqZWN0IHRvCisgKiAgICAgcmVwbGFjZQorICogQG5ld29iajogKHRyYW5zZmVyIG5vbmUpOiBhIG5ldyAjR3N0T2JqZWN0CisgKgorICogQXRvbWljYWxseSBtb2RpZmllcyBhIHBvaW50ZXIgdG8gcG9pbnQgdG8gYSBuZXcgb2JqZWN0LgorICogVGhlIHJlZmVyZW5jZSBjb3VudCBvZiBAb2xkb2JqIGlzIGRlY3JlYXNlZCBhbmQgdGhlIHJlZmVyZW5jZSBjb3VudCBvZgorICogQG5ld29iaiBpcyBpbmNyZWFzZWQuCisgKgorICogRWl0aGVyIEBuZXdvYmogYW5kIHRoZSB2YWx1ZSBwb2ludGVkIHRvIGJ5IEBvbGRvYmogbWF5IGJlIE5VTEwuCisgKgorICogUmV0dXJuczogVFJVRSBpZiBAbmV3b2JqIHdhcyBkaWZmZXJlbnQgZnJvbSBAb2xkb2JqCisgKi8KK2dib29sZWFuCitnc3Rfb2JqZWN0X3JlcGxhY2UgKEdzdE9iamVjdCAqKiBvbGRvYmosIEdzdE9iamVjdCAqIG5ld29iaikKK3sKKyAgR3N0T2JqZWN0ICpvbGRwdHI7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG9sZG9iaiAhPSBOVUxMLCBGQUxTRSk7CisKKyNpZmRlZiBERUJVR19SRUZDT1VOVAorICBHU1RfQ0FUX1RSQUNFIChHU1RfQ0FUX1JFRkNPVU5USU5HLCAicmVwbGFjZSAlcCAlcyAoJWQpIHdpdGggJXAgJXMgKCVkKSIsCisgICAgICAqb2xkb2JqLCAqb2xkb2JqID8gR1NUX1NUUl9OVUxMIChHU1RfT0JKRUNUX05BTUUgKCpvbGRvYmopKSA6ICIoTk9ORSkiLAorICAgICAgKm9sZG9iaiA/IEdfT0JKRUNUICgqb2xkb2JqKS0+cmVmX2NvdW50IDogMCwKKyAgICAgIG5ld29iaiwgbmV3b2JqID8gR1NUX1NUUl9OVUxMIChHU1RfT0JKRUNUX05BTUUgKG5ld29iaikpIDogIihOT05FKSIsCisgICAgICBuZXdvYmogPyBHX09CSkVDVCAobmV3b2JqKS0+cmVmX2NvdW50IDogMCk7CisjZW5kaWYKKworICBvbGRwdHIgPSBnX2F0b21pY19wb2ludGVyX2dldCAoKGdwb2ludGVyICopIG9sZG9iaik7CisKKyAgaWYgKEdfVU5MSUtFTFkgKG9sZHB0ciA9PSBuZXdvYmopKQorICAgIHJldHVybiBGQUxTRTsKKworICBpZiAobmV3b2JqKQorICAgIGdfb2JqZWN0X3JlZiAobmV3b2JqKTsKKworICB3aGlsZSAoR19VTkxJS0VMWSAoIWdfYXRvbWljX3BvaW50ZXJfY29tcGFyZV9hbmRfZXhjaGFuZ2UgKChncG9pbnRlciAqKQorICAgICAgICAgICAgICBvbGRvYmosIG9sZHB0ciwgbmV3b2JqKSkpIHsKKyAgICBvbGRwdHIgPSBnX2F0b21pY19wb2ludGVyX2dldCAoKGdwb2ludGVyICopIG9sZG9iaik7CisgICAgaWYgKEdfVU5MSUtFTFkgKG9sZHB0ciA9PSBuZXdvYmopKQorICAgICAgYnJlYWs7CisgIH0KKworICBpZiAob2xkcHRyKQorICAgIGdfb2JqZWN0X3VucmVmIChvbGRwdHIpOworCisgIHJldHVybiBvbGRwdHIgIT0gbmV3b2JqOworfQorCisvKiBkaXNwb3NlIGlzIGNhbGxlZCB3aGVuIHRoZSBvYmplY3QgaGFzIHRvIHJlbGVhc2UgYWxsIGxpbmtzCisgKiB0byBvdGhlciBvYmplY3RzICovCitzdGF0aWMgdm9pZAorZ3N0X29iamVjdF9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQoreworICBHc3RPYmplY3QgKnBhcmVudDsKKworICBHU1RfQ0FUX1RSQUNFX09CSkVDVCAoR1NUX0NBVF9SRUZDT1VOVElORywgb2JqZWN0LCAiZGlzcG9zZSIpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAob2JqZWN0KTsKKyAgaWYgKChwYXJlbnQgPSBHU1RfT0JKRUNUX1BBUkVOVCAob2JqZWN0KSkpCisgICAgZ290byBoYXZlX3BhcmVudDsKKyAgR1NUX09CSkVDVF9QQVJFTlQgKG9iamVjdCkgPSBOVUxMOworICBHU1RfT0JKRUNUX1VOTE9DSyAob2JqZWN0KTsKKworICAoKEdPYmplY3RDbGFzcyAqKSBnc3Rfb2JqZWN0X3BhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iamVjdCk7CisKKyAgcmV0dXJuOworCisgIC8qIEVSUk9SUyAqLworaGF2ZV9wYXJlbnQ6CisgIHsKKyAgICBnX2NyaXRpY2FsICgiXG5UcnlpbmcgdG8gZGlzcG9zZSBvYmplY3QgXCIlc1wiLCBidXQgaXQgc3RpbGwgaGFzIGEgIgorICAgICAgICAicGFyZW50IFwiJXNcIi5cbllvdSBuZWVkIHRvIGxldCB0aGUgcGFyZW50IG1hbmFnZSB0aGUgIgorICAgICAgICAib2JqZWN0IGluc3RlYWQgb2YgdW5yZWZmaW5nIHRoZSBvYmplY3QgZGlyZWN0bHkuXG4iLAorICAgICAgICBHU1RfT0JKRUNUX05BTUUgKG9iamVjdCksIEdTVF9PQkpFQ1RfTkFNRSAocGFyZW50KSk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKG9iamVjdCk7CisgICAgLyogcmVmIHRoZSBvYmplY3QgYWdhaW4gdG8gcmV2aXZlIGl0IGluIHRoaXMgZXJyb3IgY2FzZSAqLworICAgIGdzdF9vYmplY3RfcmVmIChvYmplY3QpOworICAgIHJldHVybjsKKyAgfQorfQorCisvKiBmaW5hbGl6ZSBpcyBjYWxsZWQgd2hlbiB0aGUgb2JqZWN0IGhhcyB0byBmcmVlIGl0cyByZXNvdXJjZXMgKi8KK3N0YXRpYyB2b2lkCitnc3Rfb2JqZWN0X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQoreworICBHc3RPYmplY3QgKmdzdG9iamVjdCA9IEdTVF9PQkpFQ1RfQ0FTVCAob2JqZWN0KTsKKworICBHU1RfQ0FUX1RSQUNFX09CSkVDVCAoR1NUX0NBVF9SRUZDT1VOVElORywgb2JqZWN0LCAiZmluYWxpemUiKTsKKworICBnX3NpZ25hbF9oYW5kbGVyc19kZXN0cm95IChvYmplY3QpOworCisgIGdfZnJlZSAoZ3N0b2JqZWN0LT5uYW1lKTsKKyAgZ19tdXRleF9mcmVlIChnc3RvYmplY3QtPmxvY2spOworCisjaWZuZGVmIEdTVF9ESVNBQkxFX1RSQUNFCisgIGdzdF9hbGxvY190cmFjZV9mcmVlIChfZ3N0X29iamVjdF90cmFjZSwgb2JqZWN0KTsKKyNlbmRpZgorCisgICgoR09iamVjdENsYXNzICopIGdzdF9vYmplY3RfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Cit9CisKKy8qIENoYW5naW5nIGEgR09iamVjdCBwcm9wZXJ0eSBvZiBhIEdzdE9iamVjdCB3aWxsIHJlc3VsdCBpbiAiZGVlcC1ub3RpZnkiCisgKiBzaWduYWxzIGJlaW5nIGVtaXR0ZWQgYnkgdGhlIG9iamVjdCBpdHNlbGYsIGFzIHdlbGwgYXMgaW4gZWFjaCBwYXJlbnQKKyAqIG9iamVjdC4gVGhpcyBpcyBzbyB0aGF0IGFuIGFwcGxpY2F0aW9uIGNhbiBjb25uZWN0IGEgbGlzdGVuZXIgdG8gdGhlCisgKiB0b3AtbGV2ZWwgYmluIHRvIGNhdGNoIHByb3BlcnR5LWNoYW5nZSBub3RpZmljYXRpb25zIGZvciBhbGwgY29udGFpbmVkCisgKiBlbGVtZW50cy4KKyAqCisgKiBNVCBzYWZlLgorICovCitzdGF0aWMgdm9pZAorZ3N0X29iamVjdF9kaXNwYXRjaF9wcm9wZXJ0aWVzX2NoYW5nZWQgKEdPYmplY3QgKiBvYmplY3QsCisgICAgZ3VpbnQgbl9wc3BlY3MsIEdQYXJhbVNwZWMgKiogcHNwZWNzKQoreworICBHc3RPYmplY3QgKmdzdF9vYmplY3QsICpwYXJlbnQsICpvbGRfcGFyZW50OworICBndWludCBpOworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKyAgZ2NoYXIgKm5hbWUgPSBOVUxMOworICBjb25zdCBnY2hhciAqZGVidWdfbmFtZTsKKyNlbmRpZgorCisgIC8qIGRvIHRoZSBzdGFuZGFyZCBkaXNwYXRjaGluZyAqLworICAoKEdPYmplY3RDbGFzcyAqKQorICAgICAgZ3N0X29iamVjdF9wYXJlbnRfY2xhc3MpLT5kaXNwYXRjaF9wcm9wZXJ0aWVzX2NoYW5nZWQgKG9iamVjdCwgbl9wc3BlY3MsCisgICAgICBwc3BlY3MpOworCisgIGdzdF9vYmplY3QgPSBHU1RfT0JKRUNUX0NBU1QgKG9iamVjdCk7CisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICBpZiAoR19VTkxJS0VMWSAoX19nc3RfZGVidWdfbWluID49IEdTVF9MRVZFTF9MT0cpKSB7CisgICAgbmFtZSA9IGdzdF9vYmplY3RfZ2V0X25hbWUgKGdzdF9vYmplY3QpOworICAgIGRlYnVnX25hbWUgPSBHU1RfU1RSX05VTEwgKG5hbWUpOworICB9IGVsc2UKKyAgICBkZWJ1Z19uYW1lID0gIiI7CisjZW5kaWYKKworICAvKiBub3cgbGV0IHRoZSBwYXJlbnQgZGlzcGF0Y2ggdGhvc2UsIHRvbyAqLworICBwYXJlbnQgPSBnc3Rfb2JqZWN0X2dldF9wYXJlbnQgKGdzdF9vYmplY3QpOworICB3aGlsZSAocGFyZW50KSB7CisgICAgZm9yIChpID0gMDsgaSA8IG5fcHNwZWNzOyBpKyspIHsKKyAgICAgIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9QUk9QRVJUSUVTLCBwYXJlbnQsCisgICAgICAgICAgImRlZXAgbm90aWZpY2F0aW9uIGZyb20gJXMgKCVzKSIsIGRlYnVnX25hbWUsIHBzcGVjc1tpXS0+bmFtZSk7CisKKyAgICAgIGdfc2lnbmFsX2VtaXQgKHBhcmVudCwgZ3N0X29iamVjdF9zaWduYWxzW0RFRVBfTk9USUZZXSwKKyAgICAgICAgICBnX3F1YXJrX2Zyb21fc3RyaW5nIChwc3BlY3NbaV0tPm5hbWUpLCBnc3Rfb2JqZWN0LCBwc3BlY3NbaV0pOworICAgIH0KKworICAgIG9sZF9wYXJlbnQgPSBwYXJlbnQ7CisgICAgcGFyZW50ID0gZ3N0X29iamVjdF9nZXRfcGFyZW50IChvbGRfcGFyZW50KTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChvbGRfcGFyZW50KTsKKyAgfQorI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKyAgZ19mcmVlIChuYW1lKTsKKyNlbmRpZgorfQorCisvKioKKyAqIGdzdF9vYmplY3RfZGVmYXVsdF9kZWVwX25vdGlmeToKKyAqIEBvYmplY3Q6IHRoZSAjR09iamVjdCB0aGF0IHNpZ25hbGxlZCB0aGUgbm90aWZ5LgorICogQG9yaWc6IGEgI0dzdE9iamVjdCB0aGF0IGluaXRpYXRlZCB0aGUgbm90aWZ5LgorICogQHBzcGVjOiBhICNHUGFyYW1TcGVjIG9mIHRoZSBwcm9wZXJ0eS4KKyAqIEBleGNsdWRlZF9wcm9wczogKGFycmF5IHplcm8tdGVybWluYXRlZD0xKSAoZWxlbWVudC10eXBlIGdjaGFyKikKKyAqICAgICAoYWxsb3ctbm9uZSk6YSBzZXQgb2YgdXNlci1zcGVjaWZpZWQgcHJvcGVydGllcyB0byBleGNsdWRlIG9yCisgKiAgICAgTlVMTCB0byBzaG93IGFsbCBjaGFuZ2VzLgorICoKKyAqIEEgZGVmYXVsdCBkZWVwX25vdGlmeSBzaWduYWwgY2FsbGJhY2sgZm9yIGFuIG9iamVjdC4gVGhlIHVzZXIgZGF0YQorICogc2hvdWxkIGNvbnRhaW4gYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHN0cmluZ3MgdGhhdCBzaG91bGQgYmUgZXhjbHVkZWQKKyAqIGZyb20gdGhlIG5vdGlmeS4gVGhlIGRlZmF1bHQgaGFuZGxlciB3aWxsIHByaW50IHRoZSBuZXcgdmFsdWUgb2YgdGhlIHByb3BlcnR5CisgKiB1c2luZyBnX3ByaW50LgorICoKKyAqIE1UIHNhZmUuIFRoaXMgZnVuY3Rpb24gZ3JhYnMgYW5kIHJlbGVhc2VzIEBvYmplY3QncyBMT0NLIGZvciBnZXR0aW5nIGl0cworICogICAgICAgICAgcGF0aCBzdHJpbmcuCisgKi8KK3ZvaWQKK2dzdF9vYmplY3RfZGVmYXVsdF9kZWVwX25vdGlmeSAoR09iamVjdCAqIG9iamVjdCwgR3N0T2JqZWN0ICogb3JpZywKKyAgICBHUGFyYW1TcGVjICogcHNwZWMsIGdjaGFyICoqIGV4Y2x1ZGVkX3Byb3BzKQoreworICBHVmFsdWUgdmFsdWUgPSB7IDAsIH07ICAgICAgICAvKiB0aGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgdmFsdWUudHlwZSA9IDAgKi8KKyAgZ2NoYXIgKnN0ciA9IE5VTEw7CisgIGdjaGFyICpuYW1lID0gTlVMTDsKKworICBpZiAocHNwZWMtPmZsYWdzICYgR19QQVJBTV9SRUFEQUJMRSkgeworICAgIC8qIGxldCdzIG5vdCBwcmludCB0aGVzZSBvdXQgZm9yIGV4Y2x1ZGVkIHByb3BlcnRpZXMuLi4gKi8KKyAgICB3aGlsZSAoZXhjbHVkZWRfcHJvcHMgIT0gTlVMTCAmJiAqZXhjbHVkZWRfcHJvcHMgIT0gTlVMTCkgeworICAgICAgaWYgKHN0cmNtcCAocHNwZWMtPm5hbWUsICpleGNsdWRlZF9wcm9wcykgPT0gMCkKKyAgICAgICAgcmV0dXJuOworICAgICAgZXhjbHVkZWRfcHJvcHMrKzsKKyAgICB9CisgICAgZ192YWx1ZV9pbml0ICgmdmFsdWUsIHBzcGVjLT52YWx1ZV90eXBlKTsKKyAgICBnX29iamVjdF9nZXRfcHJvcGVydHkgKEdfT0JKRUNUIChvcmlnKSwgcHNwZWMtPm5hbWUsICZ2YWx1ZSk7CisKKyAgICAvKiBGSVhNRTogaGFuZGxlIGZsYWdzICovCisgICAgaWYgKEdfSVNfUEFSQU1fU1BFQ19FTlVNIChwc3BlYykpIHsKKyAgICAgIEdFbnVtVmFsdWUgKmVudW1fdmFsdWU7CisgICAgICBHRW51bUNsYXNzICprbGFzcyA9IEdfRU5VTV9DTEFTUyAoZ190eXBlX2NsYXNzX3JlZiAocHNwZWMtPnZhbHVlX3R5cGUpKTsKKworICAgICAgZW51bV92YWx1ZSA9IGdfZW51bV9nZXRfdmFsdWUgKGtsYXNzLCBnX3ZhbHVlX2dldF9lbnVtICgmdmFsdWUpKTsKKworICAgICAgc3RyID0gZ19zdHJkdXBfcHJpbnRmICgiJXMgKCVkKSIsIGVudW1fdmFsdWUtPnZhbHVlX25pY2ssCisgICAgICAgICAgZW51bV92YWx1ZS0+dmFsdWUpOworICAgICAgZ190eXBlX2NsYXNzX3VucmVmIChrbGFzcyk7CisgICAgfSBlbHNlIHsKKyAgICAgIHN0ciA9IGdfc3RyZHVwX3ZhbHVlX2NvbnRlbnRzICgmdmFsdWUpOworICAgIH0KKyAgICBuYW1lID0gZ3N0X29iamVjdF9nZXRfcGF0aF9zdHJpbmcgKG9yaWcpOworICAgIGdfcHJpbnQgKCIlczogJXMgPSAlc1xuIiwgbmFtZSwgcHNwZWMtPm5hbWUsIHN0cik7CisgICAgZ19mcmVlIChuYW1lKTsKKyAgICBnX2ZyZWUgKHN0cik7CisgICAgZ192YWx1ZV91bnNldCAoJnZhbHVlKTsKKyAgfSBlbHNlIHsKKyAgICBuYW1lID0gZ3N0X29iamVjdF9nZXRfcGF0aF9zdHJpbmcgKG9yaWcpOworICAgIGdfd2FybmluZyAoIlBhcmFtZXRlciAlcyBub3QgcmVhZGFibGUgaW4gJXMuIiwgcHNwZWMtPm5hbWUsIG5hbWUpOworICAgIGdfZnJlZSAobmFtZSk7CisgIH0KK30KKworc3RhdGljIGdib29sZWFuCitnc3Rfb2JqZWN0X3NldF9uYW1lX2RlZmF1bHQgKEdzdE9iamVjdCAqIG9iamVjdCkKK3sKKyAgY29uc3QgZ2NoYXIgKnR5cGVfbmFtZTsKKyAgZ2ludCBjb3VudDsKKyAgZ2NoYXIgKm5hbWU7CisgIEdRdWFyayBxOworICBndWludCBpLCBsOworCisgIC8qIHRvIGVuc3VyZSBndWFyYW50ZWVkIHVuaXF1ZW5lc3MgYWNyb3NzIHRocmVhZHMsIG9ubHkgb25lIHRocmVhZAorICAgKiBtYXkgZXZlciBhc3NpZ24gYSBuYW1lICovCisgIEdfTE9DSyAob2JqZWN0X25hbWVfbXV0ZXgpOworCisgIGlmICghb2JqZWN0X25hbWVfY291bnRzKSB7CisgICAgZ19kYXRhbGlzdF9pbml0ICgmb2JqZWN0X25hbWVfY291bnRzKTsKKyAgfQorCisgIHEgPSBnX3R5cGVfcW5hbWUgKEdfT0JKRUNUX1RZUEUgKG9iamVjdCkpOworICBjb3VudCA9IEdQT0lOVEVSX1RPX0lOVCAoZ19kYXRhbGlzdF9pZF9nZXRfZGF0YSAoJm9iamVjdF9uYW1lX2NvdW50cywgcSkpOworICBnX2RhdGFsaXN0X2lkX3NldF9kYXRhICgmb2JqZWN0X25hbWVfY291bnRzLCBxLCBHSU5UX1RPX1BPSU5URVIgKGNvdW50ICsgMSkpOworCisgIEdfVU5MT0NLIChvYmplY3RfbmFtZV9tdXRleCk7CisKKyAgLyogR3N0Rm9vU2luayAtPiBmb29zaW5rPE4+ICovCisgIHR5cGVfbmFtZSA9IGdfcXVhcmtfdG9fc3RyaW5nIChxKTsKKyAgaWYgKHN0cm5jbXAgKHR5cGVfbmFtZSwgIkdzdCIsIDMpID09IDApCisgICAgdHlwZV9uYW1lICs9IDM7CisgIG5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCIlcyVkIiwgdHlwZV9uYW1lLCBjb3VudCk7CisgIGwgPSBzdHJsZW4gKG5hbWUpOworICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKQorICAgIG5hbWVbaV0gPSBnX2FzY2lpX3RvbG93ZXIgKG5hbWVbaV0pOworCisgIEdTVF9PQkpFQ1RfTE9DSyAob2JqZWN0KTsKKyAgaWYgKEdfVU5MSUtFTFkgKG9iamVjdC0+cGFyZW50ICE9IE5VTEwpKQorICAgIGdvdG8gaGFkX3BhcmVudDsKKworICBnX2ZyZWUgKG9iamVjdC0+bmFtZSk7CisgIG9iamVjdC0+bmFtZSA9IG5hbWU7CisKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKG9iamVjdCk7CisKKyAgcmV0dXJuIFRSVUU7CisKK2hhZF9wYXJlbnQ6CisgIHsKKyAgICBnX2ZyZWUgKG5hbWUpOworICAgIEdTVF9XQVJOSU5HICgicGFyZW50ZWQgb2JqZWN0cyBjYW4ndCBiZSByZW5hbWVkIik7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKG9iamVjdCk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKKy8qKgorICogZ3N0X29iamVjdF9zZXRfbmFtZToKKyAqIEBvYmplY3Q6IGEgI0dzdE9iamVjdAorICogQG5hbWU6ICAgbmV3IG5hbWUgb2Ygb2JqZWN0CisgKgorICogU2V0cyB0aGUgbmFtZSBvZiBAb2JqZWN0LCBvciBnaXZlcyBAb2JqZWN0IGEgZ3VhcmFudGVlZCB1bmlxdWUKKyAqIG5hbWUgKGlmIEBuYW1lIGlzIE5VTEwpLgorICogVGhpcyBmdW5jdGlvbiBtYWtlcyBhIGNvcHkgb2YgdGhlIHByb3ZpZGVkIG5hbWUsIHNvIHRoZSBjYWxsZXIKKyAqIHJldGFpbnMgb3duZXJzaGlwIG9mIHRoZSBuYW1lIGl0IHNlbnQuCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgbmFtZSBjb3VsZCBiZSBzZXQuIFNpbmNlIE9iamVjdHMgdGhhdCBoYXZlCisgKiBhIHBhcmVudCBjYW5ub3QgYmUgcmVuYW1lZCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIEZBTFNFIGluIHRob3NlCisgKiBjYXNlcy4KKyAqCisgKiBNVCBzYWZlLiAgVGhpcyBmdW5jdGlvbiBncmFicyBhbmQgcmVsZWFzZXMgQG9iamVjdCdzIExPQ0suCisgKi8KK2dib29sZWFuCitnc3Rfb2JqZWN0X3NldF9uYW1lIChHc3RPYmplY3QgKiBvYmplY3QsIGNvbnN0IGdjaGFyICogbmFtZSkKK3sKKyAgZ2Jvb2xlYW4gcmVzdWx0OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfT0JKRUNUIChvYmplY3QpLCBGQUxTRSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChvYmplY3QpOworCisgIC8qIHBhcmVudGVkIG9iamVjdHMgY2Fubm90IGJlIHJlbmFtZWQgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKG9iamVjdC0+cGFyZW50ICE9IE5VTEwpKQorICAgIGdvdG8gaGFkX3BhcmVudDsKKworICBpZiAobmFtZSAhPSBOVUxMKSB7CisgICAgZ19mcmVlIChvYmplY3QtPm5hbWUpOworICAgIG9iamVjdC0+bmFtZSA9IGdfc3RyZHVwIChuYW1lKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAob2JqZWN0KTsKKyAgICByZXN1bHQgPSBUUlVFOworICB9IGVsc2UgeworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChvYmplY3QpOworICAgIHJlc3VsdCA9IGdzdF9vYmplY3Rfc2V0X25hbWVfZGVmYXVsdCAob2JqZWN0KTsKKyAgfQorICAvKiBGSVhNRS0wLjExOiB0aGlzIG1pc3NlcyBhIGdfb2JqZWN0X25vdGlmeSAob2JqZWN0LCAibmFtZSIpOyB1bmxlc3MgY2FsbGVkCisgICAqIGZyb20gZ3N0X29iamVjdF9zZXRfcHJvcGVydHkuCisgICAqIElkZWFsbHkgcmVtb3ZlIHN1Y2ggY3VzdG9tIHNldHRlcnMgKG9yIG1ha2UgaXQgc3RhdGljKS4KKyAgICovCisgIHJldHVybiByZXN1bHQ7CisKKyAgLyogZXJyb3IgKi8KK2hhZF9wYXJlbnQ6CisgIHsKKyAgICBHU1RfV0FSTklORyAoInBhcmVudGVkIG9iamVjdHMgY2FuJ3QgYmUgcmVuYW1lZCIpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChvYmplY3QpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCisvKioKKyAqIGdzdF9vYmplY3RfZ2V0X25hbWU6CisgKiBAb2JqZWN0OiBhICNHc3RPYmplY3QKKyAqCisgKiBSZXR1cm5zIGEgY29weSBvZiB0aGUgbmFtZSBvZiBAb2JqZWN0LgorICogQ2FsbGVyIHNob3VsZCBnX2ZyZWUoKSB0aGUgcmV0dXJuIHZhbHVlIGFmdGVyIHVzYWdlLgorICogRm9yIGEgbmFtZWxlc3Mgb2JqZWN0LCB0aGlzIHJldHVybnMgTlVMTCwgd2hpY2ggeW91IGNhbiBzYWZlbHkgZ19mcmVlKCkKKyAqIGFzIHdlbGwuCisgKgorICogRnJlZS1mdW5jdGlvbjogZ19mcmVlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmFtZSBvZiBAb2JqZWN0LiBnX2ZyZWUoKSBhZnRlciB1c2FnZS4KKyAqCisgKiBNVCBzYWZlLiBUaGlzIGZ1bmN0aW9uIGdyYWJzIGFuZCByZWxlYXNlcyBAb2JqZWN0J3MgTE9DSy4KKyAqLworZ2NoYXIgKgorZ3N0X29iamVjdF9nZXRfbmFtZSAoR3N0T2JqZWN0ICogb2JqZWN0KQoreworICBnY2hhciAqcmVzdWx0ID0gTlVMTDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX09CSkVDVCAob2JqZWN0KSwgTlVMTCk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChvYmplY3QpOworICByZXN1bHQgPSBnX3N0cmR1cCAob2JqZWN0LT5uYW1lKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKG9iamVjdCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBnc3Rfb2JqZWN0X3NldF9wYXJlbnQ6CisgKiBAb2JqZWN0OiBhICNHc3RPYmplY3QKKyAqIEBwYXJlbnQ6IG5ldyBwYXJlbnQgb2Ygb2JqZWN0CisgKgorICogU2V0cyB0aGUgcGFyZW50IG9mIEBvYmplY3QgdG8gQHBhcmVudC4gVGhlIG9iamVjdCdzIHJlZmVyZW5jZSBjb3VudCB3aWxsCisgKiBiZSBpbmNyZW1lbnRlZCwgYW5kIGFueSBmbG9hdGluZyByZWZlcmVuY2Ugd2lsbCBiZSByZW1vdmVkIChzZWUgZ3N0X29iamVjdF9yZWZfc2luaygpKS4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIEBwYXJlbnQgY291bGQgYmUgc2V0IG9yIEZBTFNFIHdoZW4gQG9iamVjdAorICogYWxyZWFkeSBoYWQgYSBwYXJlbnQgb3IgQG9iamVjdCBhbmQgQHBhcmVudCBhcmUgdGhlIHNhbWUuCisgKgorICogTVQgc2FmZS4gR3JhYnMgYW5kIHJlbGVhc2VzIEBvYmplY3QncyBMT0NLLgorICovCitnYm9vbGVhbgorZ3N0X29iamVjdF9zZXRfcGFyZW50IChHc3RPYmplY3QgKiBvYmplY3QsIEdzdE9iamVjdCAqIHBhcmVudCkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19PQkpFQ1QgKG9iamVjdCksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19PQkpFQ1QgKHBhcmVudCksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG9iamVjdCAhPSBwYXJlbnQsIEZBTFNFKTsKKworICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9SRUZDT1VOVElORywgb2JqZWN0LAorICAgICAgInNldCBwYXJlbnQgKHJlZiBhbmQgc2luaykiKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKG9iamVjdCk7CisgIGlmIChHX1VOTElLRUxZIChvYmplY3QtPnBhcmVudCAhPSBOVUxMKSkKKyAgICBnb3RvIGhhZF9wYXJlbnQ7CisKKyAgb2JqZWN0LT5wYXJlbnQgPSBwYXJlbnQ7CisgIGdfb2JqZWN0X3JlZl9zaW5rIChvYmplY3QpOworICBHU1RfT0JKRUNUX1VOTE9DSyAob2JqZWN0KTsKKworICAvKiBGSVhNRSwgdGhpcyBkb2VzIG5vdCB3b3JrLCB0aGUgZGVlcCBub3RpZnkgdGFrZXMgdGhlIGxvY2sgZnJvbSB0aGUgcGFyZW50CisgICAqIG9iamVjdCBhbmQgZGVhZGxvY2tzIHdoZW4gdGhlIHBhcmVudCBob2xkcyBpdHMgbG9jayB3aGVuIGNhbGxpbmcgdGhpcworICAgKiBmdW5jdGlvbiAobGlrZSBfZWxlbWVudF9hZGRfcGFkKCkpICovCisgIC8qIGdfb2JqZWN0X25vdGlmeV9ieV9wc3BlYyAoKEdPYmplY3QgKilvYmplY3QsIHByb3BlcnRpZXNbUFJPUF9QQVJFTlRdKTsgKi8KKworICByZXR1cm4gVFJVRTsKKworICAvKiBFUlJPUiBoYW5kbGluZyAqLworaGFkX3BhcmVudDoKKyAgeworICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1JFRkNPVU5USU5HLCBvYmplY3QsCisgICAgICAgICJzZXQgcGFyZW50IGZhaWxlZCwgb2JqZWN0IGFscmVhZHkgaGFkIGEgcGFyZW50Iik7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKG9iamVjdCk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKKy8qKgorICogZ3N0X29iamVjdF9nZXRfcGFyZW50OgorICogQG9iamVjdDogYSAjR3N0T2JqZWN0CisgKgorICogUmV0dXJucyB0aGUgcGFyZW50IG9mIEBvYmplY3QuIFRoaXMgZnVuY3Rpb24gaW5jcmVhc2VzIHRoZSByZWZjb3VudAorICogb2YgdGhlIHBhcmVudCBvYmplY3Qgc28geW91IHNob3VsZCBnc3Rfb2JqZWN0X3VucmVmKCkgaXQgYWZ0ZXIgdXNhZ2UuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBwYXJlbnQgb2YgQG9iamVjdCwgdGhpcyBjYW4gYmUgTlVMTCBpZiBAb2JqZWN0CisgKiAgIGhhcyBubyBwYXJlbnQuIHVucmVmIGFmdGVyIHVzYWdlLgorICoKKyAqIE1UIHNhZmUuIEdyYWJzIGFuZCByZWxlYXNlcyBAb2JqZWN0J3MgTE9DSy4KKyAqLworR3N0T2JqZWN0ICoKK2dzdF9vYmplY3RfZ2V0X3BhcmVudCAoR3N0T2JqZWN0ICogb2JqZWN0KQoreworICBHc3RPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19PQkpFQ1QgKG9iamVjdCksIE5VTEwpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAob2JqZWN0KTsKKyAgcmVzdWx0ID0gb2JqZWN0LT5wYXJlbnQ7CisgIGlmIChHX0xJS0VMWSAocmVzdWx0KSkKKyAgICBnc3Rfb2JqZWN0X3JlZiAocmVzdWx0KTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKG9iamVjdCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBnc3Rfb2JqZWN0X3VucGFyZW50OgorICogQG9iamVjdDogYSAjR3N0T2JqZWN0IHRvIHVucGFyZW50CisgKgorICogQ2xlYXIgdGhlIHBhcmVudCBvZiBAb2JqZWN0LCByZW1vdmluZyB0aGUgYXNzb2NpYXRlZCByZWZlcmVuY2UuCisgKiBUaGlzIGZ1bmN0aW9uIGRlY3JlYXNlcyB0aGUgcmVmY291bnQgb2YgQG9iamVjdC4KKyAqCisgKiBNVCBzYWZlLiBHcmFicyBhbmQgcmVsZWFzZXMgQG9iamVjdCdzIGxvY2suCisgKi8KK3ZvaWQKK2dzdF9vYmplY3RfdW5wYXJlbnQgKEdzdE9iamVjdCAqIG9iamVjdCkKK3sKKyAgR3N0T2JqZWN0ICpwYXJlbnQ7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX09CSkVDVCAob2JqZWN0KSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChvYmplY3QpOworICBwYXJlbnQgPSBvYmplY3QtPnBhcmVudDsKKworICBpZiAoR19MSUtFTFkgKHBhcmVudCAhPSBOVUxMKSkgeworICAgIEdTVF9DQVRfVFJBQ0VfT0JKRUNUIChHU1RfQ0FUX1JFRkNPVU5USU5HLCBvYmplY3QsICJ1bnBhcmVudCIpOworICAgIG9iamVjdC0+cGFyZW50ID0gTlVMTDsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAob2JqZWN0KTsKKworICAgIC8qIGdfb2JqZWN0X25vdGlmeV9ieV9wc3BlYyAoKEdPYmplY3QgKilvYmplY3QsIHByb3BlcnRpZXNbUFJPUF9QQVJFTlRdKTsgKi8KKworICAgIGdzdF9vYmplY3RfdW5yZWYgKG9iamVjdCk7CisgIH0gZWxzZSB7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKG9iamVjdCk7CisgIH0KK30KKworLyoqCisgKiBnc3Rfb2JqZWN0X2hhc19hbmNlc3RvcjoKKyAqIEBvYmplY3Q6IGEgI0dzdE9iamVjdCB0byBjaGVjaworICogQGFuY2VzdG9yOiBhICNHc3RPYmplY3QgdG8gY2hlY2sgYXMgYW5jZXN0b3IKKyAqCisgKiBDaGVjayBpZiBAb2JqZWN0IGhhcyBhbiBhbmNlc3RvciBAYW5jZXN0b3Igc29tZXdoZXJlIHVwIGluCisgKiB0aGUgaGllcmFyY2h5LiBPbmUgY2FuIGUuZy4gY2hlY2sgaWYgYSAjR3N0RWxlbWVudCBpcyBpbnNpZGUgYSAjR3N0UGlwZWxpbmUuCisgKgorICogUmV0dXJuczogVFJVRSBpZiBAYW5jZXN0b3IgaXMgYW4gYW5jZXN0b3Igb2YgQG9iamVjdC4KKyAqCisgKiBNVCBzYWZlLiBHcmFicyBhbmQgcmVsZWFzZXMgQG9iamVjdCdzIGxvY2tzLgorICovCitnYm9vbGVhbgorZ3N0X29iamVjdF9oYXNfYW5jZXN0b3IgKEdzdE9iamVjdCAqIG9iamVjdCwgR3N0T2JqZWN0ICogYW5jZXN0b3IpCit7CisgIEdzdE9iamVjdCAqcGFyZW50LCAqdG1wOworCisgIGlmICghYW5jZXN0b3IgfHwgIW9iamVjdCkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgcGFyZW50ID0gZ3N0X29iamVjdF9yZWYgKG9iamVjdCk7CisgIGRvIHsKKyAgICBpZiAocGFyZW50ID09IGFuY2VzdG9yKSB7CisgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwYXJlbnQpOworICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgdG1wID0gZ3N0X29iamVjdF9nZXRfcGFyZW50IChwYXJlbnQpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhcmVudCk7CisgICAgcGFyZW50ID0gdG1wOworICB9IHdoaWxlIChwYXJlbnQpOworCisgIHJldHVybiBGQUxTRTsKK30KKworLyoqCisgKiBnc3Rfb2JqZWN0X2NoZWNrX3VuaXF1ZW5lc3M6CisgKiBAbGlzdDogKHRyYW5zZmVyIG5vbmUpIChlbGVtZW50LXR5cGUgR3N0Lk9iamVjdCk6IGEgbGlzdCBvZiAjR3N0T2JqZWN0IHRvCisgKiAgICAgIGNoZWNrIHRocm91Z2gKKyAqIEBuYW1lOiB0aGUgbmFtZSB0byBzZWFyY2ggZm9yCisgKgorICogQ2hlY2tzIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgb2JqZWN0IG5hbWVkIEBuYW1lIGluIEBsaXN0LiBUaGlzIGZ1bmN0aW9uCisgKiBkb2VzIG5vdCBkbyBhbnkgbG9ja2luZyBvZiBhbnkga2luZC4gWW91IG1pZ2h0IHdhbnQgdG8gcHJvdGVjdCB0aGUKKyAqIHByb3ZpZGVkIGxpc3Qgd2l0aCB0aGUgbG9jayBvZiB0aGUgb3duZXIgb2YgdGhlIGxpc3QuIFRoaXMgZnVuY3Rpb24KKyAqIHdpbGwgbG9jayBlYWNoICNHc3RPYmplY3QgaW4gdGhlIGxpc3QgdG8gY29tcGFyZSB0aGUgbmFtZSwgc28gYmUKKyAqIGNhcmVmdWxsIHdoZW4gcGFzc2luZyBhIGxpc3Qgd2l0aCBhIGxvY2tlZCBvYmplY3QuCisgKgorICogUmV0dXJuczogVFJVRSBpZiBhICNHc3RPYmplY3QgbmFtZWQgQG5hbWUgZG9lcyBub3QgYXBwZWFyIGluIEBsaXN0LAorICogRkFMU0UgaWYgaXQgZG9lcy4KKyAqCisgKiBNVCBzYWZlLiBHcmFicyBhbmQgcmVsZWFzZXMgdGhlIExPQ0sgb2YgZWFjaCBvYmplY3QgaW4gdGhlIGxpc3QuCisgKi8KK2dib29sZWFuCitnc3Rfb2JqZWN0X2NoZWNrX3VuaXF1ZW5lc3MgKEdMaXN0ICogbGlzdCwgY29uc3QgZ2NoYXIgKiBuYW1lKQoreworICBnYm9vbGVhbiByZXN1bHQgPSBUUlVFOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYW1lICE9IE5VTEwsIEZBTFNFKTsKKworICBmb3IgKDsgbGlzdDsgbGlzdCA9IGdfbGlzdF9uZXh0IChsaXN0KSkgeworICAgIEdzdE9iamVjdCAqY2hpbGQ7CisgICAgZ2Jvb2xlYW4gZXE7CisKKyAgICBjaGlsZCA9IEdTVF9PQkpFQ1RfQ0FTVCAobGlzdC0+ZGF0YSk7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sgKGNoaWxkKTsKKyAgICBlcSA9IHN0cmNtcCAoR1NUX09CSkVDVF9OQU1FIChjaGlsZCksIG5hbWUpID09IDA7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGNoaWxkKTsKKworICAgIGlmIChHX1VOTElLRUxZIChlcSkpIHsKKyAgICAgIHJlc3VsdCA9IEZBTFNFOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIHZvaWQKK2dzdF9vYmplY3Rfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIEdzdE9iamVjdCAqZ3N0b2JqZWN0OworCisgIGdzdG9iamVjdCA9IEdTVF9PQkpFQ1RfQ0FTVCAob2JqZWN0KTsKKworICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgIGdzdF9vYmplY3Rfc2V0X25hbWUgKGdzdG9iamVjdCwgZ192YWx1ZV9nZXRfc3RyaW5nICh2YWx1ZSkpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BBUkVOVDoKKyAgICAgIGdzdF9vYmplY3Rfc2V0X3BhcmVudCAoZ3N0b2JqZWN0LCBnX3ZhbHVlX2dldF9vYmplY3QgKHZhbHVlKSk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3Rfb2JqZWN0X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQoreworICBHc3RPYmplY3QgKmdzdG9iamVjdDsKKworICBnc3RvYmplY3QgPSBHU1RfT0JKRUNUX0NBU1QgKG9iamVjdCk7CisKKyAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nICh2YWx1ZSwgZ3N0X29iamVjdF9nZXRfbmFtZSAoZ3N0b2JqZWN0KSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUEFSRU5UOgorICAgICAgZ192YWx1ZV90YWtlX29iamVjdCAodmFsdWUsIGdzdF9vYmplY3RfZ2V0X3BhcmVudCAoZ3N0b2JqZWN0KSk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgIGJyZWFrOworICB9Cit9CisKKy8qKgorICogZ3N0X29iamVjdF9nZXRfcGF0aF9zdHJpbmc6CisgKiBAb2JqZWN0OiBhICNHc3RPYmplY3QKKyAqCisgKiBHZW5lcmF0ZXMgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgcGF0aCBvZiBAb2JqZWN0IGluCisgKiB0aGUgb2JqZWN0IGhpZXJhcmNoeS4gT25seSB1c2VmdWwgKG9yIHVzZWQpIGZvciBkZWJ1Z2dpbmcuCisgKgorICogRnJlZS1mdW5jdGlvbjogZ19mcmVlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBwYXRoIG9mIEBvYmplY3QuIFlvdSBtdXN0CisgKiAgICAgICAgICBnX2ZyZWUoKSB0aGUgc3RyaW5nIGFmdGVyIHVzYWdlLgorICoKKyAqIE1UIHNhZmUuIEdyYWJzIGFuZCByZWxlYXNlcyB0aGUgI0dzdE9iamVjdCdzIExPQ0sgZm9yIGFsbCBvYmplY3RzCisgKiAgICAgICAgICBpbiB0aGUgaGllcmFyY2h5LgorICovCitnY2hhciAqCitnc3Rfb2JqZWN0X2dldF9wYXRoX3N0cmluZyAoR3N0T2JqZWN0ICogb2JqZWN0KQoreworICBHU0xpc3QgKnBhcmVudGFnZTsKKyAgR1NMaXN0ICpwYXJlbnRzOworICB2b2lkICpwYXJlbnQ7CisgIGdjaGFyICpwcmV2cGF0aCwgKnBhdGg7CisgIGNvbnN0IGdjaGFyICp0eXBlbmFtZTsKKyAgZ2NoYXIgKmNvbXBvbmVudDsKKyAgY29uc3QgZ2NoYXIgKnNlcGFyYXRvcjsKKworICAvKiByZWYgb2JqZWN0IGJlZm9yZSBhZGRpbmcgdG8gbGlzdCAqLworICBnc3Rfb2JqZWN0X3JlZiAob2JqZWN0KTsKKyAgcGFyZW50YWdlID0gZ19zbGlzdF9wcmVwZW5kIChOVUxMLCBvYmplY3QpOworCisgIHBhdGggPSBnX3N0cmR1cCAoIiIpOworCisgIC8qIGZpcnN0IHdhbGsgdGhlIG9iamVjdCBoaWVyYXJjaHkgdG8gYnVpbGQgYSBsaXN0IG9mIHRoZSBwYXJlbnRzLAorICAgKiBiZSBjYXJlZnVsbCBoZXJlIHdpdGggcmVmY291bnRpbmcuICovCisgIGRvIHsKKyAgICBpZiAoR1NUX0lTX09CSkVDVCAob2JqZWN0KSkgeworICAgICAgcGFyZW50ID0gZ3N0X29iamVjdF9nZXRfcGFyZW50IChvYmplY3QpOworICAgICAgLyogYWRkIHBhcmVudHMgdG8gbGlzdCwgcmVmY291bnQgcmVtYWlucyBpbmNyZWFzZWQgd2hpbGUKKyAgICAgICAqIHdlIGhhbmRsZSB0aGUgb2JqZWN0ICovCisgICAgICBpZiAocGFyZW50KQorICAgICAgICBwYXJlbnRhZ2UgPSBnX3NsaXN0X3ByZXBlbmQgKHBhcmVudGFnZSwgcGFyZW50KTsKKyAgICB9IGVsc2UgeworICAgICAgYnJlYWs7CisgICAgfQorICAgIG9iamVjdCA9IHBhcmVudDsKKyAgfSB3aGlsZSAob2JqZWN0ICE9IE5VTEwpOworCisgIC8qIHRoZW4gd2FsayB0aGUgcGFyZW50IGxpc3QgYW5kIHByaW50IHRoZW0gb3V0LiB3ZSBuZWVkIHRvCisgICAqIGRlY3JlYXNlIHRoZSByZWZjb3VudGluZyBvbiBlYWNoIGVsZW1lbnQgYWZ0ZXIgd2UgaGFuZGxlZAorICAgKiBpdC4gKi8KKyAgZm9yIChwYXJlbnRzID0gcGFyZW50YWdlOyBwYXJlbnRzOyBwYXJlbnRzID0gZ19zbGlzdF9uZXh0IChwYXJlbnRzKSkgeworICAgIGlmIChHX0lTX09CSkVDVCAocGFyZW50cy0+ZGF0YSkpIHsKKyAgICAgIHR5cGVuYW1lID0gR19PQkpFQ1RfVFlQRV9OQU1FIChwYXJlbnRzLT5kYXRhKTsKKyAgICB9IGVsc2UgeworICAgICAgdHlwZW5hbWUgPSBOVUxMOworICAgIH0KKyAgICBpZiAoR1NUX0lTX09CSkVDVCAocGFyZW50cy0+ZGF0YSkpIHsKKyAgICAgIEdzdE9iamVjdCAqaXRlbSA9IEdTVF9PQkpFQ1RfQ0FTVCAocGFyZW50cy0+ZGF0YSk7CisgICAgICBHc3RPYmplY3RDbGFzcyAqb2NsYXNzID0gR1NUX09CSkVDVF9HRVRfQ0xBU1MgKGl0ZW0pOworICAgICAgZ2NoYXIgKm9iam5hbWUgPSBnc3Rfb2JqZWN0X2dldF9uYW1lIChpdGVtKTsKKworICAgICAgY29tcG9uZW50ID0gZ19zdHJkdXBfcHJpbnRmICgiJXM6JXMiLCB0eXBlbmFtZSwgb2JqbmFtZSk7CisgICAgICBzZXBhcmF0b3IgPSBvY2xhc3MtPnBhdGhfc3RyaW5nX3NlcGFyYXRvcjsKKyAgICAgIC8qIGFuZCB1bnJlZiBub3cgKi8KKyAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGl0ZW0pOworICAgICAgZ19mcmVlIChvYmpuYW1lKTsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKHR5cGVuYW1lKSB7CisgICAgICAgIGNvbXBvbmVudCA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzOiVwIiwgdHlwZW5hbWUsIHBhcmVudHMtPmRhdGEpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgY29tcG9uZW50ID0gZ19zdHJkdXBfcHJpbnRmICgiJXAiLCBwYXJlbnRzLT5kYXRhKTsKKyAgICAgIH0KKyAgICAgIHNlcGFyYXRvciA9ICIvIjsKKyAgICB9CisKKyAgICBwcmV2cGF0aCA9IHBhdGg7CisgICAgcGF0aCA9IGdfc3Ryam9pbiAoc2VwYXJhdG9yLCBwcmV2cGF0aCwgY29tcG9uZW50LCBOVUxMKTsKKyAgICBnX2ZyZWUgKHByZXZwYXRoKTsKKyAgICBnX2ZyZWUgKGNvbXBvbmVudCk7CisgIH0KKworICBnX3NsaXN0X2ZyZWUgKHBhcmVudGFnZSk7CisKKyAgcmV0dXJuIHBhdGg7Cit9CmRpZmYgLS1naXQgYS9nc3QvZ3N0b2JqZWN0LmggYi9nc3QvZ3N0b2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M5YWMwNAotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RvYmplY3QuaApAQCAtMCwwICsxLDIzNCBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgorICogICAgICAgICAgICAgICAgICAgIDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KKyAqCisgKiBnc3RvYmplY3QuaDogSGVhZGVyIGZvciBiYXNlIEdzdE9iamVjdAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19HU1RfT0JKRUNUX0hfXworI2RlZmluZSBfX0dTVF9PQkpFQ1RfSF9fCisKKyNpbmNsdWRlIDxnc3QvZ3N0Y29uZmlnLmg+CisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgR1NUX1RZUEVfT0JKRUNUCQkJKGdzdF9vYmplY3RfZ2V0X3R5cGUgKCkpCisjZGVmaW5lIEdTVF9JU19PQkpFQ1Qob2JqKQkJKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfT0JKRUNUKSkKKyNkZWZpbmUgR1NUX0lTX09CSkVDVF9DTEFTUyhrbGFzcykJKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9PQkpFQ1QpKQorI2RlZmluZSBHU1RfT0JKRUNUX0dFVF9DTEFTUyhvYmopCShHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfT0JKRUNULCBHc3RPYmplY3RDbGFzcykpCisjZGVmaW5lIEdTVF9PQkpFQ1Qob2JqKQkJCShHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX09CSkVDVCwgR3N0T2JqZWN0KSkKKyNkZWZpbmUgR1NUX09CSkVDVF9DTEFTUyhrbGFzcykJCShHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfT0JKRUNULCBHc3RPYmplY3RDbGFzcykpCisjZGVmaW5lIEdTVF9PQkpFQ1RfQ0FTVChvYmopICAgICAgICAgICAgKChHc3RPYmplY3QqKShvYmopKQorI2RlZmluZSBHU1RfT0JKRUNUX0NMQVNTX0NBU1Qoa2xhc3MpICAgICgoR3N0T2JqZWN0Q2xhc3MqKShrbGFzcykpCisKKy8qKgorICogR3N0T2JqZWN0RmxhZ3M6CisgKiBAR1NUX09CSkVDVF9GTEFHX0xBU1Q6IHN1YmNsYXNzZXMgY2FuIGFkZCBhZGRpdGlvbmFsIGZsYWdzIHN0YXJ0aW5nIGZyb20gdGhpcyBmbGFnCisgKgorICogVGhlIHN0YW5kYXJkIGZsYWdzIHRoYXQgYW4gZ3N0b2JqZWN0IG1heSBoYXZlLgorICovCit0eXBlZGVmIGVudW0KK3sKKyAgLyogcGFkZGluZyAqLworICBHU1RfT0JKRUNUX0ZMQUdfTEFTVCA9ICgxPDw0KQorfSBHc3RPYmplY3RGbGFnczsKKworLyoqCisgKiBHU1RfT0JKRUNUX1JFRkNPVU5UOgorICogQG9iajogYSAjR3N0T2JqZWN0CisgKgorICogR2V0IGFjY2VzcyB0byB0aGUgcmVmZXJlbmNlIGNvdW50IGZpZWxkIG9mIHRoZSBvYmplY3QuCisgKi8KKyNkZWZpbmUgR1NUX09CSkVDVF9SRUZDT1VOVChvYmopICAgICAgICAgICAgICAgICgoKEdPYmplY3QqKShvYmopKS0+cmVmX2NvdW50KQorLyoqCisgKiBHU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFOgorICogQG9iajogYSAjR3N0T2JqZWN0CisgKgorICogR2V0IHRoZSByZWZlcmVuY2UgY291bnQgdmFsdWUgb2YgdGhlIG9iamVjdC4KKyAqLworI2RlZmluZSBHU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFKG9iaikgICAgICAgICAgZ19hdG9taWNfaW50X2dldCAoKGdpbnQgKikgJkdTVF9PQkpFQ1RfUkVGQ09VTlQob2JqKSkKKworLyogd2UgZG8gYSBHU1RfT0JKRUNUX0NBU1QgdG8gYXZvaWQgdHlwZSBjaGVja2luZywgYmV0dGVyIGNhbGwgdGhlc2UKKyAqIGZ1bmN0aW9uIHdpdGggYSB2YWxpZCBvYmplY3QhICovCisKKy8qKgorICogR1NUX09CSkVDVF9HRVRfTE9DSzoKKyAqIEBvYmo6IGEgI0dzdE9iamVjdAorICoKKyAqIEFjcXVpcmUgYSByZWZlcmVuY2UgdG8gdGhlIG11dGV4IG9mIHRoaXMgb2JqZWN0LgorICovCisjZGVmaW5lIEdTVF9PQkpFQ1RfR0VUX0xPQ0sob2JqKSAgICAgICAgICAgICAgIChHU1RfT0JKRUNUX0NBU1Qob2JqKS0+bG9jaykKKy8qKgorICogR1NUX09CSkVDVF9MT0NLOgorICogQG9iajogYSAjR3N0T2JqZWN0IHRvIGxvY2sKKyAqCisgKiBUaGlzIG1hY3JvIHdpbGwgb2J0YWluIGEgbG9jayBvbiB0aGUgb2JqZWN0LCBtYWtpbmcgc2VyaWFsaXphdGlvbiBwb3NzaWJsZS4KKyAqIEl0IGJsb2NrcyB1bnRpbCB0aGUgbG9jayBjYW4gYmUgb2J0YWluZWQuCisgKi8KKyNkZWZpbmUgR1NUX09CSkVDVF9MT0NLKG9iaikgICAgICAgICAgICAgICAgICAgZ19tdXRleF9sb2NrKEdTVF9PQkpFQ1RfR0VUX0xPQ0sob2JqKSkKKy8qKgorICogR1NUX09CSkVDVF9UUllMT0NLOgorICogQG9iajogYSAjR3N0T2JqZWN0LgorICoKKyAqIFRoaXMgbWFjcm8gd2lsbCB0cnkgdG8gb2J0YWluIGEgbG9jayBvbiB0aGUgb2JqZWN0LCBidXQgd2lsbCByZXR1cm4gd2l0aAorICogRkFMU0UgaWYgaXQgY2FuJ3QgZ2V0IGl0IGltbWVkaWF0ZWx5LgorICovCisjZGVmaW5lIEdTVF9PQkpFQ1RfVFJZTE9DSyhvYmopICAgICAgICAgICAgICAgIGdfbXV0ZXhfdHJ5bG9jayhHU1RfT0JKRUNUX0dFVF9MT0NLKG9iaikpCisvKioKKyAqIEdTVF9PQkpFQ1RfVU5MT0NLOgorICogQG9iajogYSAjR3N0T2JqZWN0IHRvIHVubG9jay4KKyAqCisgKiBUaGlzIG1hY3JvIHJlbGVhc2VzIGEgbG9jayBvbiB0aGUgb2JqZWN0LgorICovCisjZGVmaW5lIEdTVF9PQkpFQ1RfVU5MT0NLKG9iaikgICAgICAgICAgICAgICAgIGdfbXV0ZXhfdW5sb2NrKEdTVF9PQkpFQ1RfR0VUX0xPQ0sob2JqKSkKKworCisvKioKKyAqIEdTVF9PQkpFQ1RfTkFNRToKKyAqIEBvYmo6IGEgI0dzdE9iamVjdAorICoKKyAqIEdldCB0aGUgbmFtZSBvZiB0aGlzIG9iamVjdAorICovCisjZGVmaW5lIEdTVF9PQkpFQ1RfTkFNRShvYmopICAgICAgICAgICAgKEdTVF9PQkpFQ1RfQ0FTVChvYmopLT5uYW1lKQorLyoqCisgKiBHU1RfT0JKRUNUX1BBUkVOVDoKKyAqIEBvYmo6IGEgI0dzdE9iamVjdAorICoKKyAqIEdldCB0aGUgcGFyZW50IG9mIHRoaXMgb2JqZWN0CisgKi8KKyNkZWZpbmUgR1NUX09CSkVDVF9QQVJFTlQob2JqKSAgICAgICAgICAoR1NUX09CSkVDVF9DQVNUKG9iaiktPnBhcmVudCkKKworCisvKioKKyAqIEdTVF9PQkpFQ1RfRkxBR1M6CisgKiBAb2JqOiBhICNHc3RPYmplY3QKKyAqCisgKiBUaGlzIG1hY3JvIHJldHVybnMgdGhlIGVudGlyZSBzZXQgb2YgZmxhZ3MgZm9yIHRoZSBvYmplY3QuCisgKi8KKyNkZWZpbmUgR1NUX09CSkVDVF9GTEFHUyhvYmopICAgICAgICAgICAgICAgICAgKEdTVF9PQkpFQ1RfQ0FTVCAob2JqKS0+ZmxhZ3MpCisvKioKKyAqIEdTVF9PQkpFQ1RfRkxBR19JU19TRVQ6CisgKiBAb2JqOiBhICNHc3RPYmplY3QKKyAqIEBmbGFnOiBGbGFnIHRvIGNoZWNrIGZvcgorICoKKyAqIFRoaXMgbWFjcm8gY2hlY2tzIHRvIHNlZSBpZiB0aGUgZ2l2ZW4gZmxhZyBpcyBzZXQuCisgKi8KKyNkZWZpbmUgR1NUX09CSkVDVF9GTEFHX0lTX1NFVChvYmosZmxhZykgICAgICAgKChHU1RfT0JKRUNUX0ZMQUdTIChvYmopICYgKGZsYWcpKSA9PSAoZmxhZykpCisvKioKKyAqIEdTVF9PQkpFQ1RfRkxBR19TRVQ6CisgKiBAb2JqOiBhICNHc3RPYmplY3QKKyAqIEBmbGFnOiBGbGFnIHRvIHNldAorICoKKyAqIFRoaXMgbWFjcm8gc2V0cyB0aGUgZ2l2ZW4gYml0cy4KKyAqLworI2RlZmluZSBHU1RfT0JKRUNUX0ZMQUdfU0VUKG9iaixmbGFnKSAgICAgICAgICAoR1NUX09CSkVDVF9GTEFHUyAob2JqKSB8PSAoZmxhZykpCisvKioKKyAqIEdTVF9PQkpFQ1RfRkxBR19VTlNFVDoKKyAqIEBvYmo6IGEgI0dzdE9iamVjdAorICogQGZsYWc6IEZsYWcgdG8gc2V0CisgKgorICogVGhpcyBtYWNybyB1c2V0cyB0aGUgZ2l2ZW4gYml0cy4KKyAqLworI2RlZmluZSBHU1RfT0JKRUNUX0ZMQUdfVU5TRVQob2JqLGZsYWcpICAgICAgICAoR1NUX09CSkVDVF9GTEFHUyAob2JqKSAmPSB+KGZsYWcpKQorCisKK3R5cGVkZWYgc3RydWN0IF9Hc3RPYmplY3QgR3N0T2JqZWN0OwordHlwZWRlZiBzdHJ1Y3QgX0dzdE9iamVjdENsYXNzIEdzdE9iamVjdENsYXNzOworCisvKioKKyAqIEdzdE9iamVjdDoKKyAqIEBsb2NrOiBvYmplY3QgTE9DSworICogQG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBvYmplY3QKKyAqIEBwYXJlbnQ6IHRoaXMgb2JqZWN0J3MgcGFyZW50LCB3ZWFrIHJlZgorICogQGZsYWdzOiBmbGFncyBmb3IgdGhpcyBvYmplY3QKKyAqCisgKiBHU3RyZWFtZXIgYmFzZSBvYmplY3QgY2xhc3MuCisgKi8KK3N0cnVjdCBfR3N0T2JqZWN0IHsKKyAgR0luaXRpYWxseVVub3duZWQgb2JqZWN0OworCisgIC8qPCBwdWJsaWMgPiovIC8qIHdpdGggTE9DSyAqLworICBHTXV0ZXggICAgICAgICpsb2NrOyAgICAgICAgLyogb2JqZWN0IExPQ0sgKi8KKyAgZ2NoYXIgICAgICAgICAqbmFtZTsgICAgICAgIC8qIG9iamVjdCBuYW1lICovCisgIEdzdE9iamVjdCAgICAgKnBhcmVudDsgICAgICAvKiB0aGlzIG9iamVjdCdzIHBhcmVudCwgd2VhayByZWYgKi8KKyAgZ3VpbnQzMiAgICAgICAgZmxhZ3M7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWQ7Cit9OworCisvKioKKyAqIEdzdE9iamVjdENsYXNzOgorICogQHBhcmVudF9jbGFzczogcGFyZW50CisgKiBAcGF0aF9zdHJpbmdfc2VwYXJhdG9yOiBzZXBhcmF0b3IgdXNlZCBieSBnc3Rfb2JqZWN0X2dldF9wYXRoX3N0cmluZygpCisgKiBAZGVlcF9ub3RpZnk6IGRlZmF1bHQgc2lnbmFsIGhhbmRsZXIKKyAqCisgKiBHU3RyZWFtZXIgYmFzZSBvYmplY3QgY2xhc3MuCisgKi8KK3N0cnVjdCBfR3N0T2JqZWN0Q2xhc3MgeworICBHSW5pdGlhbGx5VW5vd25lZENsYXNzIHBhcmVudF9jbGFzczsKKworICBjb25zdCBnY2hhcgkqcGF0aF9zdHJpbmdfc2VwYXJhdG9yOworCisgIC8qIHNpZ25hbHMgKi8KKyAgdm9pZCAgICAgICAgICAoKmRlZXBfbm90aWZ5KSAgICAgIChHc3RPYmplY3QgKiBvYmplY3QsIEdzdE9iamVjdCAqIG9yaWcsIEdQYXJhbVNwZWMgKiBwc3BlYyk7CisKKyAgLyo8IHB1YmxpYyA+Ki8KKyAgLyogdmlydHVhbCBtZXRob2RzIGZvciBzdWJjbGFzc2VzICovCisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOworfTsKKworLyogbm9ybWFsIEdPYmplY3Qgc3R1ZmYgKi8KK0dUeXBlCQlnc3Rfb2JqZWN0X2dldF90eXBlCQkodm9pZCk7CisKKy8qIG5hbWUgcm91dGluZXMgKi8KK2dib29sZWFuCWdzdF9vYmplY3Rfc2V0X25hbWUJCShHc3RPYmplY3QgKm9iamVjdCwgY29uc3QgZ2NoYXIgKm5hbWUpOworZ2NoYXIqCQlnc3Rfb2JqZWN0X2dldF9uYW1lCQkoR3N0T2JqZWN0ICpvYmplY3QpOworCisvKiBwYXJlbnRhZ2Ugcm91dGluZXMgKi8KK2dib29sZWFuCWdzdF9vYmplY3Rfc2V0X3BhcmVudAkJKEdzdE9iamVjdCAqb2JqZWN0LCBHc3RPYmplY3QgKnBhcmVudCk7CitHc3RPYmplY3QqCWdzdF9vYmplY3RfZ2V0X3BhcmVudAkJKEdzdE9iamVjdCAqb2JqZWN0KTsKK3ZvaWQJCWdzdF9vYmplY3RfdW5wYXJlbnQJCShHc3RPYmplY3QgKm9iamVjdCk7CitnYm9vbGVhbglnc3Rfb2JqZWN0X2hhc19hbmNlc3RvcgkJKEdzdE9iamVjdCAqb2JqZWN0LCBHc3RPYmplY3QgKmFuY2VzdG9yKTsKKwordm9pZCAgICAgICAgICAgIGdzdF9vYmplY3RfZGVmYXVsdF9kZWVwX25vdGlmeSAgKEdPYmplY3QgKm9iamVjdCwgR3N0T2JqZWN0ICpvcmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQYXJhbVNwZWMgKnBzcGVjLCBnY2hhciAqKmV4Y2x1ZGVkX3Byb3BzKTsKKworLyogcmVmY291bnRpbmcgKyBsaWZlIGN5Y2xlICovCitncG9pbnRlcglnc3Rfb2JqZWN0X3JlZgkJCShncG9pbnRlciBvYmplY3QpOwordm9pZAkJZ3N0X29iamVjdF91bnJlZgkJKGdwb2ludGVyIG9iamVjdCk7CitncG9pbnRlciAgICAgICAgZ3N0X29iamVjdF9yZWZfc2luawkJKGdwb2ludGVyIG9iamVjdCk7CisKKy8qIHJlcGxhY2Ugb2JqZWN0IHBvaW50ZXIgKi8KK2dib29sZWFuICAgICAgICBnc3Rfb2JqZWN0X3JlcGxhY2UJCShHc3RPYmplY3QgKipvbGRvYmosIEdzdE9iamVjdCAqbmV3b2JqKTsKKworLyogcHJpbnRpbmcgb3V0IHRoZSAncGF0aCcgb2YgdGhlIG9iamVjdCAqLworZ2NoYXIgKgkJZ3N0X29iamVjdF9nZXRfcGF0aF9zdHJpbmcJKEdzdE9iamVjdCAqb2JqZWN0KTsKKworLyogbWlzYyB1dGlscyAqLworZ2Jvb2xlYW4JZ3N0X29iamVjdF9jaGVja191bmlxdWVuZXNzCShHTGlzdCAqbGlzdCwgY29uc3QgZ2NoYXIgKm5hbWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HU1RfT0JKRUNUX0hfXyAqLworCmRpZmYgLS1naXQgYS9nc3QvZ3N0cGFkLmMgYi9nc3QvZ3N0cGFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU3MzJkYwotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RwYWQuYwpAQCAtMCwwICsxLDQ5MzQgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KKyAqCisgKiBnc3RwYWQuYzogUGFkcyBmb3IgbGlua2luZyBlbGVtZW50cyB0b2dldGhlcgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisvKioKKyAqIFNFQ1RJT046Z3N0cGFkCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IE9iamVjdCBjb250YWluZWQgYnkgZWxlbWVudHMgdGhhdCBhbGxvd3MgbGlua3MgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgb3RoZXIgZWxlbWVudHMKKyAqIEBzZWVfYWxzbzogI0dzdFBhZFRlbXBsYXRlLCAjR3N0RWxlbWVudCwgI0dzdEV2ZW50CisgKgorICogQSAjR3N0RWxlbWVudCBpcyBsaW5rZWQgdG8gb3RoZXIgZWxlbWVudHMgdmlhICJwYWRzIiwgd2hpY2ggYXJlIGV4dHJlbWVseQorICogbGlnaHQtd2VpZ2h0IGdlbmVyaWMgbGluayBwb2ludHMuCisgKiBBZnRlciB0d28gcGFkcyBhcmUgcmV0cmlldmVkIGZyb20gYW4gZWxlbWVudCB3aXRoIGdzdF9lbGVtZW50X2dldF9wYWQoKSwKKyAqIHRoZSBwYWRzIGNhbiBiZSBsaW5rIHdpdGggZ3N0X3BhZF9saW5rKCkuIChGb3IgcXVpY2sgbGlua3MsCisgKiB5b3UgY2FuIGFsc28gdXNlIGdzdF9lbGVtZW50X2xpbmsoKSwgd2hpY2ggd2lsbCBtYWtlIHRoZSBvYnZpb3VzCisgKiBsaW5rIGZvciB5b3UgaWYgaXQncyBzdHJhaWdodGZvcndhcmQuKQorICoKKyAqIFBhZHMgYXJlIHR5cGljYWxseSBjcmVhdGVkIGZyb20gYSAjR3N0UGFkVGVtcGxhdGUgd2l0aAorICogZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSgpLgorICoKKyAqIFBhZHMgaGF2ZSAjR3N0Q2FwcyBhdHRhY2hlZCB0byBpdCB0byBkZXNjcmliZSB0aGUgbWVkaWEgdHlwZSB0aGV5IGFyZQorICogY2FwYWJsZSBvZiBkZWFsaW5nIHdpdGguICBnc3RfcGFkX2dldF9jYXBzKCkgYW5kIGdzdF9wYWRfc2V0X2NhcHMoKSBhcmUKKyAqIHVzZWQgdG8gbWFuaXB1bGF0ZSB0aGUgY2FwcyBvZiB0aGUgcGFkcy4KKyAqIFBhZHMgY3JlYXRlZCBmcm9tIGEgcGFkIHRlbXBsYXRlIGNhbm5vdCBzZXQgY2FwYWJpbGl0aWVzIHRoYXQgYXJlCisgKiBpbmNvbXBhdGlibGUgd2l0aCB0aGUgcGFkIHRlbXBsYXRlIGNhcGFiaWxpdGllcy4KKyAqCisgKiBQYWRzIHdpdGhvdXQgcGFkIHRlbXBsYXRlcyBjYW4gYmUgY3JlYXRlZCB3aXRoIGdzdF9wYWRfbmV3KCksCisgKiB3aGljaCB0YWtlcyBhIGRpcmVjdGlvbiBhbmQgYSBuYW1lIGFzIGFuIGFyZ3VtZW50LiAgSWYgdGhlIG5hbWUgaXMgTlVMTCwKKyAqIHRoZW4gYSBndWFyYW50ZWVkIHVuaXF1ZSBuYW1lIHdpbGwgYmUgYXNzaWduZWQgdG8gaXQuCisgKgorICogZ3N0X3BhZF9nZXRfcGFyZW50KCkgd2lsbCByZXRyaWV2ZSB0aGUgI0dzdEVsZW1lbnQgdGhhdCBvd25zIHRoZSBwYWQuCisgKgorICogQSAjR3N0RWxlbWVudCBjcmVhdGluZyBhIHBhZCB3aWxsIHR5cGljYWxseSB1c2UgdGhlIHZhcmlvdXMKKyAqIGdzdF9wYWRfc2V0XypfZnVuY3Rpb24oKSBjYWxscyB0byByZWdpc3RlciBjYWxsYmFja3MgZm9yIHZhcmlvdXMgZXZlbnRzCisgKiBvbiB0aGUgcGFkcy4KKyAqCisgKiBHc3RFbGVtZW50cyB3aWxsIHVzZSBnc3RfcGFkX3B1c2goKSBhbmQgZ3N0X3BhZF9wdWxsX3JhbmdlKCkgdG8gcHVzaCBvdXQKKyAqIG9yIHB1bGwgaW4gYSBidWZmZXIuCisgKgorICogVG8gc2VuZCBhICNHc3RFdmVudCBvbiBhIHBhZCwgdXNlIGdzdF9wYWRfc2VuZF9ldmVudCgpIGFuZAorICogZ3N0X3BhZF9wdXNoX2V2ZW50KCkuCisgKgorICogTGFzdCByZXZpZXdlZCBvbiAyMDA2LTA3LTA2ICgwLjEwLjkpCisgKi8KKworI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCisKKyNpbmNsdWRlICJnc3RwYWQuaCIKKyNpbmNsdWRlICJnc3RwYWR0ZW1wbGF0ZS5oIgorI2luY2x1ZGUgImdzdGVudW10eXBlcy5oIgorI2luY2x1ZGUgImdzdG1hcnNoYWwuaCIKKyNpbmNsdWRlICJnc3R1dGlscy5oIgorI2luY2x1ZGUgImdzdGluZm8uaCIKKyNpbmNsdWRlICJnc3RlcnJvci5oIgorI2luY2x1ZGUgImdzdHZhbHVlLmgiCisjaW5jbHVkZSAiZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIgorCitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChkZWJ1Z19kYXRhZmxvdyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBHU1RfQ0FUX1BBRFMKKworLyogUGFkIHNpZ25hbHMgYW5kIGFyZ3MgKi8KK2VudW0KK3sKKyAgUEFEX0xJTktFRCwKKyAgUEFEX1VOTElOS0VELAorICAvKiBGSUxMIE1FICovCisgIExBU1RfU0lHTkFMCit9OworCitlbnVtCit7CisgIFBBRF9QUk9QXzAsCisgIFBBRF9QUk9QX0NBUFMsCisgIFBBRF9QUk9QX0RJUkVDVElPTiwKKyAgUEFEX1BST1BfVEVNUExBVEUsCisgIC8qIEZJTEwgTUUgKi8KK307CisKKyNkZWZpbmUgR1NUX1BBRF9HRVRfUFJJVkFURShvYmopICBcCisgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgob2JqKSwgR1NUX1RZUEVfUEFELCBHc3RQYWRQcml2YXRlKSkKKworLyogd2UgaGF2ZSBhIHBlbmRpbmcgYW5kIGFuIGFjdGl2ZSBldmVudCBvbiB0aGUgcGFkLiBPbiBzb3VyY2UgcGFkcyBvbmx5IHRoZQorICogYWN0aXZlIGV2ZW50IGlzIHVzZWQuIE9uIHNpbmtwYWRzLCBldmVudHMgYXJlIGNvcGllZCB0byB0aGUgcGVuZGluZyBlbnRyeSBhbmQKKyAqIG1vdmVkIHRvIHRoZSBhY3RpdmUgZXZlbnQgd2hlbiB0aGUgZXZlbnRmdW5jIHJldHVybmVkIFRSVUUuICovCit0eXBlZGVmIHN0cnVjdAoreworICBHc3RFdmVudCAqcGVuZGluZzsKKyAgR3N0RXZlbnQgKmV2ZW50OworfSBQYWRFdmVudDsKKworc3RydWN0IF9Hc3RQYWRQcml2YXRlCit7CisgIFBhZEV2ZW50IGV2ZW50c1tHU1RfRVZFTlRfTUFYX1NUSUNLWV07CisKKyAgZ2ludCB1c2luZzsKKyAgZ2ludCBwcm9iZV9jb29raWU7Cit9OworCit0eXBlZGVmIHN0cnVjdAoreworICBHSG9vayBob29rOworICBndWludCBjb29raWU7Cit9IEdzdFByb2JlOworCisjZGVmaW5lIFBST0JFX0NPT0tJRShoKSAoKChHc3RQcm9iZSAqKShoKSktPmNvb2tpZSkKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgR3N0UGFkICpwYWQ7CisgIEdzdFByb2JlVHlwZSBtYXNrOworICBncG9pbnRlciB0eXBlX2RhdGE7CisgIEdzdFByb2JlUmV0dXJuIHJldDsKKyAgZ2Jvb2xlYW4gcGFzczsKKyAgZ3VpbnQgY29va2llOworfSBQcm9iZU1hcnNoYWxsOworCitzdGF0aWMgdm9pZCBnc3RfcGFkX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOworc3RhdGljIHZvaWQgZ3N0X3BhZF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7CitzdGF0aWMgdm9pZCBnc3RfcGFkX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKK3N0YXRpYyB2b2lkIGdzdF9wYWRfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOworCitzdGF0aWMgR3N0Q2FwcyAqZ3N0X3BhZF9nZXRfY2Fwc191bmxvY2tlZCAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogZmlsdGVyKTsKK3N0YXRpYyB2b2lkIGdzdF9wYWRfc2V0X3BhZF90ZW1wbGF0ZSAoR3N0UGFkICogcGFkLCBHc3RQYWRUZW1wbGF0ZSAqIHRlbXBsKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfcGFkX2FjdGl2YXRlX2RlZmF1bHQgKEdzdFBhZCAqIHBhZCk7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X3BhZF9hY2NlcHRjYXBzX2RlZmF1bHQgKEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGNhcHMpOworc3RhdGljIHZvaWQgZ3N0X3BhZF9maXhhdGVfY2Fwc19kZWZhdWx0IChHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBjYXBzKTsKK3N0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9wYWRfY2hhaW5fbGlzdF9kZWZhdWx0IChHc3RQYWQgKiBwYWQsCisgICAgR3N0QnVmZmVyTGlzdCAqIGxpc3QpOworCitzdGF0aWMgR3N0T2JqZWN0Q2xhc3MgKnBhcmVudF9jbGFzcyA9IE5VTEw7CitzdGF0aWMgZ3VpbnQgZ3N0X3BhZF9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OworCitzdGF0aWMgR1BhcmFtU3BlYyAqcHNwZWNfY2FwcyA9IE5VTEw7CisKKy8qIHF1YXJrcyBmb3IgcHJvYmUgc2lnbmFscyAqLworc3RhdGljIEdRdWFyayBidWZmZXJfcXVhcms7CitzdGF0aWMgR1F1YXJrIGJ1ZmZlcl9saXN0X3F1YXJrOworc3RhdGljIEdRdWFyayBldmVudF9xdWFyazsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgY29uc3QgZ2ludCByZXQ7CisgIGNvbnN0IGdjaGFyICpuYW1lOworICBHUXVhcmsgcXVhcms7Cit9IEdzdEZsb3dRdWFya3M7CisKK3N0YXRpYyBHc3RGbG93UXVhcmtzIGZsb3dfcXVhcmtzW10gPSB7CisgIHtHU1RfRkxPV19DVVNUT01fU1VDQ0VTUywgImN1c3RvbS1zdWNjZXNzIiwgMH0sCisgIHtHU1RfRkxPV19SRVNFTkQsICJyZXNlbmQiLCAwfSwKKyAge0dTVF9GTE9XX09LLCAib2siLCAwfSwKKyAge0dTVF9GTE9XX05PVF9MSU5LRUQsICJub3QtbGlua2VkIiwgMH0sCisgIHtHU1RfRkxPV19XUk9OR19TVEFURSwgIndyb25nLXN0YXRlIiwgMH0sCisgIHtHU1RfRkxPV19VTkVYUEVDVEVELCAidW5leHBlY3RlZCIsIDB9LAorICB7R1NUX0ZMT1dfTk9UX05FR09USUFURUQsICJub3QtbmVnb3RpYXRlZCIsIDB9LAorICB7R1NUX0ZMT1dfRVJST1IsICJlcnJvciIsIDB9LAorICB7R1NUX0ZMT1dfTk9UX1NVUFBPUlRFRCwgIm5vdC1zdXBwb3J0ZWQiLCAwfSwKKyAge0dTVF9GTE9XX0NVU1RPTV9FUlJPUiwgImN1c3RvbS1lcnJvciIsIDB9Cit9OworCisvKioKKyAqIGdzdF9mbG93X2dldF9uYW1lOgorICogQHJldDogYSAjR3N0Rmxvd1JldHVybiB0byBnZXQgdGhlIG5hbWUgb2YuCisgKgorICogR2V0cyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGdpdmVuIGZsb3cgcmV0dXJuLgorICoKKyAqIFJldHVybnM6IGEgc3RhdGljIHN0cmluZyB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmbG93IHJldHVybi4KKyAqLworY29uc3QgZ2NoYXIgKgorZ3N0X2Zsb3dfZ2V0X25hbWUgKEdzdEZsb3dSZXR1cm4gcmV0KQoreworICBnaW50IGk7CisKKyAgcmV0ID0gQ0xBTVAgKHJldCwgR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SLCBHU1RfRkxPV19DVVNUT01fU1VDQ0VTUyk7CisKKyAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoZmxvd19xdWFya3MpOyBpKyspIHsKKyAgICBpZiAocmV0ID09IGZsb3dfcXVhcmtzW2ldLnJldCkKKyAgICAgIHJldHVybiBmbG93X3F1YXJrc1tpXS5uYW1lOworICB9CisgIHJldHVybiAidW5rbm93biI7Cit9CisKKy8qKgorICogZ3N0X2Zsb3dfdG9fcXVhcms6CisgKiBAcmV0OiBhICNHc3RGbG93UmV0dXJuIHRvIGdldCB0aGUgcXVhcmsgb2YuCisgKgorICogR2V0IHRoZSB1bmlxdWUgcXVhcmsgZm9yIHRoZSBnaXZlbiBHc3RGbG93UmV0dXJuLgorICoKKyAqIFJldHVybnM6IHRoZSBxdWFyayBhc3NvY2lhdGVkIHdpdGggdGhlIGZsb3cgcmV0dXJuIG9yIDAgaWYgYW4KKyAqIGludmFsaWQgcmV0dXJuIHdhcyBzcGVjaWZpZWQuCisgKi8KK0dRdWFyaworZ3N0X2Zsb3dfdG9fcXVhcmsgKEdzdEZsb3dSZXR1cm4gcmV0KQoreworICBnaW50IGk7CisKKyAgcmV0ID0gQ0xBTVAgKHJldCwgR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SLCBHU1RfRkxPV19DVVNUT01fU1VDQ0VTUyk7CisKKyAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoZmxvd19xdWFya3MpOyBpKyspIHsKKyAgICBpZiAocmV0ID09IGZsb3dfcXVhcmtzW2ldLnJldCkKKyAgICAgIHJldHVybiBmbG93X3F1YXJrc1tpXS5xdWFyazsKKyAgfQorICByZXR1cm4gMDsKK30KKworI2RlZmluZSBfZG9faW5pdCBcCit7IFwKKyAgZ2ludCBpOyBcCisgIFwKKyAgYnVmZmVyX3F1YXJrID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJidWZmZXIiKTsgXAorICBidWZmZXJfbGlzdF9xdWFyayA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgiYnVmZmVybGlzdCIpOyBcCisgIGV2ZW50X3F1YXJrID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJldmVudCIpOyBcCisgIFwKKyAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoZmxvd19xdWFya3MpOyBpKyspIHsJCQlcCisgICAgZmxvd19xdWFya3NbaV0ucXVhcmsgPSBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoZmxvd19xdWFya3NbaV0ubmFtZSk7IFwKKyAgfSBcCisgIFwKKyAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGRlYnVnX2RhdGFmbG93LCAiR1NUX0RBVEFGTE9XIiwgXAorICAgICAgR1NUX0RFQlVHX0JPTEQgfCBHU1RfREVCVUdfRkdfR1JFRU4sICJkYXRhZmxvdyBpbnNpZGUgcGFkcyIpOyBcCit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RQYWQsIGdzdF9wYWQsIEdTVF9UWVBFX09CSkVDVCwgX2RvX2luaXQpOworCitzdGF0aWMgdm9pZAorZ3N0X3BhZF9jbGFzc19pbml0IChHc3RQYWRDbGFzcyAqIGtsYXNzKQoreworICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7CisgIEdzdE9iamVjdENsYXNzICpnc3RvYmplY3RfY2xhc3M7CisKKyAgZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7CisgIGdzdG9iamVjdF9jbGFzcyA9IEdTVF9PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKKworICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKGtsYXNzLCBzaXplb2YgKEdzdFBhZFByaXZhdGUpKTsKKworICBwYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQgKGtsYXNzKTsKKworICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3N0X3BhZF9kaXNwb3NlOworICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9wYWRfZmluYWxpemU7CisgIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9wYWRfc2V0X3Byb3BlcnR5OworICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfcGFkX2dldF9wcm9wZXJ0eTsKKworICAvKioKKyAgICogR3N0UGFkOjpsaW5rZWQ6CisgICAqIEBwYWQ6IHRoZSBwYWQgdGhhdCBlbWl0dGVkIHRoZSBzaWduYWwKKyAgICogQHBlZXI6IHRoZSBwZWVyIHBhZCB0aGF0IGhhcyBiZWVuIGNvbm5lY3RlZAorICAgKgorICAgKiBTaWduYWxzIHRoYXQgYSBwYWQgaGFzIGJlZW4gbGlua2VkIHRvIHRoZSBwZWVyIHBhZC4KKyAgICovCisgIGdzdF9wYWRfc2lnbmFsc1tQQURfTElOS0VEXSA9CisgICAgICBnX3NpZ25hbF9uZXcgKCJsaW5rZWQiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLCBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgIEdfU1RSVUNUX09GRlNFVCAoR3N0UGFkQ2xhc3MsIGxpbmtlZCksIE5VTEwsIE5VTEwsCisgICAgICBnc3RfbWFyc2hhbF9WT0lEX19PQkpFQ1QsIEdfVFlQRV9OT05FLCAxLCBHU1RfVFlQRV9QQUQpOworICAvKioKKyAgICogR3N0UGFkOjp1bmxpbmtlZDoKKyAgICogQHBhZDogdGhlIHBhZCB0aGF0IGVtaXR0ZWQgdGhlIHNpZ25hbAorICAgKiBAcGVlcjogdGhlIHBlZXIgcGFkIHRoYXQgaGFzIGJlZW4gZGlzY29ubmVjdGVkCisgICAqCisgICAqIFNpZ25hbHMgdGhhdCBhIHBhZCBoYXMgYmVlbiB1bmxpbmtlZCBmcm9tIHRoZSBwZWVyIHBhZC4KKyAgICovCisgIGdzdF9wYWRfc2lnbmFsc1tQQURfVU5MSU5LRURdID0KKyAgICAgIGdfc2lnbmFsX25ldyAoInVubGlua2VkIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICBHX1NUUlVDVF9PRkZTRVQgKEdzdFBhZENsYXNzLCB1bmxpbmtlZCksIE5VTEwsIE5VTEwsCisgICAgICBnc3RfbWFyc2hhbF9WT0lEX19PQkpFQ1QsIEdfVFlQRV9OT05FLCAxLCBHU1RfVFlQRV9QQUQpOworCisgIHBzcGVjX2NhcHMgPSBnX3BhcmFtX3NwZWNfYm94ZWQgKCJjYXBzIiwgIkNhcHMiLAorICAgICAgIlRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHBhZCIsIEdTVF9UWVBFX0NBUFMsCisgICAgICBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBBRF9QUk9QX0NBUFMsIHBzcGVjX2NhcHMpOworCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBBRF9QUk9QX0RJUkVDVElPTiwKKyAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgiZGlyZWN0aW9uIiwgIkRpcmVjdGlvbiIsICJUaGUgZGlyZWN0aW9uIG9mIHRoZSBwYWQiLAorICAgICAgICAgIEdTVF9UWVBFX1BBRF9ESVJFQ1RJT04sIEdTVF9QQURfVU5LTk9XTiwKKyAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisKKyAgLyogRklYTUUsIE1ha2UgR19QQVJBTV9DT05TVFJVQ1RfT05MWSB3aGVuIHdlIGZpeCBnaG9zdHBhZHMuICovCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBBRF9QUk9QX1RFTVBMQVRFLAorICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCAoInRlbXBsYXRlIiwgIlRlbXBsYXRlIiwKKyAgICAgICAgICAiVGhlIEdzdFBhZFRlbXBsYXRlIG9mIHRoaXMgcGFkIiwgR1NUX1RZUEVfUEFEX1RFTVBMQVRFLAorICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworCisgIGdzdG9iamVjdF9jbGFzcy0+cGF0aF9zdHJpbmdfc2VwYXJhdG9yID0gIi4iOworCisgIC8qIFJlZ2lzdGVyIGNvbW1vbiBmdW5jdGlvbiBwb2ludGVyIGRlc2NyaXB0aW9ucyAqLworICBHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUiAoZ3N0X3BhZF9hY3RpdmF0ZV9kZWZhdWx0KTsKKyAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9wYWRfZXZlbnRfZGVmYXVsdCk7CisgIEdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSIChnc3RfcGFkX2dldF9xdWVyeV90eXBlc19kZWZhdWx0KTsKKyAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9wYWRfcXVlcnlfZGVmYXVsdCk7CisgIEdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSIChnc3RfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZGVmYXVsdCk7CisgIEdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSIChnc3RfcGFkX2FjY2VwdGNhcHNfZGVmYXVsdCk7CisgIEdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSIChnc3RfcGFkX2NoYWluX2xpc3RfZGVmYXVsdCk7CisgIEdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSIChnc3RfcGFkX2ZpeGF0ZV9jYXBzX2RlZmF1bHQpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3BhZF9pbml0IChHc3RQYWQgKiBwYWQpCit7CisgIHBhZC0+cHJpdiA9IEdTVF9QQURfR0VUX1BSSVZBVEUgKHBhZCk7CisKKyAgR1NUX1BBRF9ESVJFQ1RJT04gKHBhZCkgPSBHU1RfUEFEX1VOS05PV047CisKKyAgR1NUX1BBRF9BQ1RJVkFURUZVTkMgKHBhZCkgPSBnc3RfcGFkX2FjdGl2YXRlX2RlZmF1bHQ7CisgIEdTVF9QQURfRVZFTlRGVU5DIChwYWQpID0gZ3N0X3BhZF9ldmVudF9kZWZhdWx0OworICBHU1RfUEFEX1FVRVJZVFlQRUZVTkMgKHBhZCkgPSBnc3RfcGFkX2dldF9xdWVyeV90eXBlc19kZWZhdWx0OworICBHU1RfUEFEX1FVRVJZRlVOQyAocGFkKSA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdDsKKyAgR1NUX1BBRF9JVEVSSU5UTElOS0ZVTkMgKHBhZCkgPSBnc3RfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZGVmYXVsdDsKKyAgR1NUX1BBRF9BQ0NFUFRDQVBTRlVOQyAocGFkKSA9IGdzdF9wYWRfYWNjZXB0Y2Fwc19kZWZhdWx0OworICBHU1RfUEFEX0ZJWEFURUNBUFNGVU5DIChwYWQpID0gZ3N0X3BhZF9maXhhdGVfY2Fwc19kZWZhdWx0OworICBHU1RfUEFEX0NIQUlOTElTVEZVTkMgKHBhZCkgPSBnc3RfcGFkX2NoYWluX2xpc3RfZGVmYXVsdDsKKworICBHU1RfUEFEX1NFVF9GTFVTSElORyAocGFkKTsKKworICBnX3N0YXRpY19yZWNfbXV0ZXhfaW5pdCAoJnBhZC0+c3RyZWFtX3JlY19sb2NrKTsKKworICBwYWQtPmJsb2NrX2NvbmQgPSBnX2NvbmRfbmV3ICgpOworCisgIGdfaG9va19saXN0X2luaXQgKCZwYWQtPnByb2Jlcywgc2l6ZW9mIChHc3RQcm9iZSkpOworfQorCisvKiBjYWxsZWQgd2hlbiBzZXR0aW5nIHRoZSBwYWQgaW5hY3RpdmUuIEl0IHJlbW92ZXMgYWxsIHN0aWNreSBldmVudHMgZnJvbQorICogdGhlIHBhZCAqLworc3RhdGljIHZvaWQKK2NsZWFyX2V2ZW50cyAoUGFkRXZlbnQgZXZlbnRzW10pCit7CisgIGd1aW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IEdTVF9FVkVOVF9NQVhfU1RJQ0tZOyBpKyspIHsKKyAgICBnc3RfZXZlbnRfcmVwbGFjZSAoJmV2ZW50c1tpXS5ldmVudCwgTlVMTCk7CisgICAgZ3N0X2V2ZW50X3JlcGxhY2UgKCZldmVudHNbaV0ucGVuZGluZywgTlVMTCk7CisgIH0KK30KKworLyogVGhlIHN0aWNreSBldmVudCB3aXRoIEBpZHggZnJvbSB0aGUgc3JjcGFkIGlzIGNvcGllZCB0byB0aGUKKyAqIHBlbmRpbmcgZXZlbnQgb24gdGhlIHNpbmtwYWQgKHdoZW4gZGlmZmVyZW50KS4KKyAqIFRoaXMgZnVuY3Rpb24gYXBwbGllcyB0aGUgcGFkIG9mZnNldHMgaW4gY2FzZSBvZiBzZWdtZW50IGV2ZW50cy4KKyAqIFRoaXMgd2lsbCBtYWtlIHN1cmUgdGhhdCB3ZSBzZW5kIHRoZSBldmVudCB0byB0aGUgc2lua3BhZCBldmVudAorICogZnVuY3Rpb24gd2hlbiB0aGUgbmV4dCBidWZmZXIgb2YgZXZlbnQgYXJyaXZlcy4KKyAqIFNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUgT0JKRUNUIGxvY2sgb2YgYm90aCBwYWRzLgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIFRSVUUgd2hlbiB0aGVyZSBpcyBhIHBlbmRpbmcgZXZlbnQgb24gdGhlCisgKiBzaW5rcGFkICovCitzdGF0aWMgZ2Jvb2xlYW4KK3JlcGxhY2VfZXZlbnQgKEdzdFBhZCAqIHNyY3BhZCwgR3N0UGFkICogc2lua3BhZCwgZ3VpbnQgaWR4KQoreworICBQYWRFdmVudCAqc3JjZXYsICpzaW5rZXY7CisgIEdzdEV2ZW50ICpldmVudDsKKyAgZ2Jvb2xlYW4gcGVuZGluZyA9IEZBTFNFOworCisgIHNyY2V2ID0gJnNyY3BhZC0+cHJpdi0+ZXZlbnRzW2lkeF07CisKKyAgaWYgKChldmVudCA9IHNyY2V2LT5ldmVudCkpIHsKKyAgICBzaW5rZXYgPSAmc2lua3BhZC0+cHJpdi0+ZXZlbnRzW2lkeF07CisKKyAgICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKKyAgICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6CisgICAgICB7CisgICAgICAgIEdzdFNlZ21lbnQgc2VnbWVudDsKKyAgICAgICAgZ2ludDY0IG9mZnNldDsKKworICAgICAgICBvZmZzZXQgPSBzcmNwYWQtPm9mZnNldCArIHNpbmtwYWQtPm9mZnNldDsKKyAgICAgICAgaWYgKG9mZnNldCAhPSAwKSB7CisgICAgICAgICAgZ3N0X2V2ZW50X2NvcHlfc2VnbWVudCAoZXZlbnQsICZzZWdtZW50KTsKKyAgICAgICAgICAvKiBhZGp1c3QgdGhlIGJhc2UgdGltZS4gRklYTUUsIGNoZWNrIG5lZ2F0aXZlIHRpbWVzLCB0cnkgdG8gdHdlYWsgdGhlCisgICAgICAgICAgICogc3RhcnQgdG8gZG8gY2xpcHBpbmcgb24gbmVnYXRpdmUgdGltZXMgKi8KKyAgICAgICAgICBzZWdtZW50LmJhc2UgKz0gb2Zmc2V0OworICAgICAgICAgIC8qIG1ha2UgYSBuZXcgZXZlbnQgZnJvbSB0aGUgdXBkYXRlZCBzZWdtZW50ICovCisgICAgICAgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoc2lua2V2LT5ldmVudCAhPSBldmVudCkgeworICAgICAgLyogcHV0IGluIHRoZSBwZW5kaW5nIGVudHJ5IHdoZW4gZGlmZmVyZW50ICovCisgICAgICBnc3RfZXZlbnRfcmVwbGFjZSAoJnNpbmtldi0+cGVuZGluZywgZXZlbnQpOworICAgICAgcGVuZGluZyA9IFRSVUU7CisgICAgfQorICB9CisgIHJldHVybiBwZW5kaW5nOworfQorCisKK3N0YXRpYyB2b2lkCitwcmVwYXJlX2V2ZW50X3VwZGF0ZSAoR3N0UGFkICogc3JjcGFkLCBHc3RQYWQgKiBzaW5rcGFkKQoreworICBnYm9vbGVhbiBwZW5kaW5nOworICBnaW50IGk7CisKKyAgLyogbWFrZSBzdXJlIHdlIHB1c2ggdGhlIGV2ZW50cyBmcm9tIHRoZSBzb3VyY2UgdG8gdGhpcyBuZXcgcGVlciwgZm9yIHRoaXMgd2UKKyAgICogY29weSB0aGUgZXZlbnRzIG9uIHRoZSBzaW5rcGFkIGFuZCBtYXJrIEVWRU5UU19QRU5ESU5HICovCisgIHBlbmRpbmcgPSBGQUxTRTsKKyAgZm9yIChpID0gMDsgaSA8IEdTVF9FVkVOVF9NQVhfU1RJQ0tZOyBpKyspCisgICAgcGVuZGluZyB8PSByZXBsYWNlX2V2ZW50IChzcmNwYWQsIHNpbmtwYWQsIGkpOworCisgIC8qIHdlIGhhZCBzb21lIG5ldyBwZW5kaW5nIGV2ZW50cywgc2V0IG91ciBmbGFnICovCisgIGlmIChwZW5kaW5nKQorICAgIEdTVF9PQkpFQ1RfRkxBR19TRVQgKHNpbmtwYWQsIEdTVF9QQURfTkVFRF9FVkVOVFMpOworfQorCisvKiBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIE9CSkVDVF9MT0NLICovCitzdGF0aWMgR3N0Q2FwcyAqCitnZXRfcGFkX2NhcHMgKEdzdFBhZCAqIHBhZCkKK3sKKyAgR3N0Q2FwcyAqY2FwcyA9IE5VTEw7CisgIEdzdEV2ZW50ICpldmVudDsKKyAgZ3VpbnQgaWR4OworCisgIGlkeCA9IEdTVF9FVkVOVF9TVElDS1lfSURYX1RZUEUgKEdTVF9FVkVOVF9DQVBTKTsKKyAgLyogd2UgY2FuIG9ubHkgdXNlIHRoZSBjYXBzIHdoZW4gd2UgaGF2ZSBzdWNjZXNzZnVsbHkgc2VuZCB0aGUgY2FwcworICAgKiBldmVudCB0byB0aGUgZXZlbnQgZnVuY3Rpb24gYW5kIGlzIHRodXMgaW4gdGhlIGFjdGl2ZSBlbnRyeSAqLworICBpZiAoKGV2ZW50ID0gcGFkLT5wcml2LT5ldmVudHNbaWR4XS5ldmVudCkpCisgICAgZ3N0X2V2ZW50X3BhcnNlX2NhcHMgKGV2ZW50LCAmY2Fwcyk7CisKKyAgcmV0dXJuIGNhcHM7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfcGFkX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpCit7CisgIEdzdFBhZCAqcGFkID0gR1NUX1BBRF9DQVNUIChvYmplY3QpOworICBHc3RQYWQgKnBlZXI7CisKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfUkVGQ09VTlRJTkcsIHBhZCwgImRpc3Bvc2UiKTsKKworICAvKiB1bmxpbmsgdGhlIHBlZXIgcGFkICovCisgIGlmICgocGVlciA9IGdzdF9wYWRfZ2V0X3BlZXIgKHBhZCkpKSB7CisgICAgLyogd2luZG93IGZvciBNVCB1bnNhZmVuZXNzLCBzb21lb25lIGVsc2UgY291bGQgdW5saW5rIGhlcmUKKyAgICAgKiBhbmQgdGhlbiB3ZSBjYWxsIHVubGluayB3aXRoIHdyb25nIHBhZHMuIFRoZSB1bmxpbmsKKyAgICAgKiBmdW5jdGlvbiB3b3VsZCBjYXRjaCB0aGlzIGFuZCBzYWZlbHkgcmV0dXJuIGZhaWxlZC4gKi8KKyAgICBpZiAoR1NUX1BBRF9JU19TUkMgKHBhZCkpCisgICAgICBnc3RfcGFkX3VubGluayAocGFkLCBwZWVyKTsKKyAgICBlbHNlCisgICAgICBnc3RfcGFkX3VubGluayAocGVlciwgcGFkKTsKKworICAgIGdzdF9vYmplY3RfdW5yZWYgKHBlZXIpOworICB9CisKKyAgZ3N0X3BhZF9zZXRfcGFkX3RlbXBsYXRlIChwYWQsIE5VTEwpOworCisgIGNsZWFyX2V2ZW50cyAocGFkLT5wcml2LT5ldmVudHMpOworCisgIGdfaG9va19saXN0X2NsZWFyICgmcGFkLT5wcm9iZXMpOworCisgIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChvYmplY3QpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3BhZF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKK3sKKyAgR3N0UGFkICpwYWQgPSBHU1RfUEFEX0NBU1QgKG9iamVjdCk7CisgIEdzdFRhc2sgKnRhc2s7CisKKyAgLyogaW4gY2FzZSB0aGUgdGFzayBpcyBzdGlsbCBhcm91bmQsIGNsZWFuIGl0IHVwICovCisgIGlmICgodGFzayA9IEdTVF9QQURfVEFTSyAocGFkKSkpIHsKKyAgICBnc3RfdGFza19qb2luICh0YXNrKTsKKyAgICBHU1RfUEFEX1RBU0sgKHBhZCkgPSBOVUxMOworICAgIGdzdF9vYmplY3RfdW5yZWYgKHRhc2spOworICB9CisKKyAgZ19zdGF0aWNfcmVjX211dGV4X2ZyZWUgKCZwYWQtPnN0cmVhbV9yZWNfbG9jayk7CisgIGdfY29uZF9mcmVlIChwYWQtPmJsb2NrX2NvbmQpOworCisgIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9wYWRfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19QQUQgKG9iamVjdCkpOworCisgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUEFEX1BST1BfRElSRUNUSU9OOgorICAgICAgR1NUX1BBRF9ESVJFQ1RJT04gKG9iamVjdCkgPSAoR3N0UGFkRGlyZWN0aW9uKSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBBRF9QUk9QX1RFTVBMQVRFOgorICAgICAgZ3N0X3BhZF9zZXRfcGFkX3RlbXBsYXRlIChHU1RfUEFEX0NBU1QgKG9iamVjdCksCisgICAgICAgICAgKEdzdFBhZFRlbXBsYXRlICopIGdfdmFsdWVfZ2V0X29iamVjdCAodmFsdWUpKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9wYWRfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19QQUQgKG9iamVjdCkpOworCisgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUEFEX1BST1BfQ0FQUzoKKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAob2JqZWN0KTsKKyAgICAgIGdfdmFsdWVfc2V0X2JveGVkICh2YWx1ZSwgZ2V0X3BhZF9jYXBzIChHU1RfUEFEX0NBU1QgKG9iamVjdCkpKTsKKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChvYmplY3QpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQQURfUFJPUF9ESVJFQ1RJT046CisgICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgR1NUX1BBRF9ESVJFQ1RJT04gKG9iamVjdCkpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQQURfUFJPUF9URU1QTEFURToKKyAgICAgIGdfdmFsdWVfc2V0X29iamVjdCAodmFsdWUsIEdTVF9QQURfUEFEX1RFTVBMQVRFIChvYmplY3QpKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KK30KKworLyoqCisgKiBnc3RfcGFkX25ldzoKKyAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgbmV3IHBhZC4KKyAqIEBkaXJlY3Rpb246IHRoZSAjR3N0UGFkRGlyZWN0aW9uIG9mIHRoZSBwYWQuCisgKgorICogQ3JlYXRlcyBhIG5ldyBwYWQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLgorICogSWYgbmFtZSBpcyBOVUxMLCBhIGd1YXJhbnRlZWQgdW5pcXVlIG5hbWUgKGFjcm9zcyBhbGwgcGFkcykKKyAqIHdpbGwgYmUgYXNzaWduZWQuCisgKiBUaGlzIGZ1bmN0aW9uIG1ha2VzIGEgY29weSBvZiB0aGUgbmFtZSBzbyB5b3UgY2FuIHNhZmVseSBmcmVlIHRoZSBuYW1lLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdFBhZCwgb3IgTlVMTCBpbiBjYXNlIG9mIGFuIGVycm9yLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK0dzdFBhZCAqCitnc3RfcGFkX25ldyAoY29uc3QgZ2NoYXIgKiBuYW1lLCBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICByZXR1cm4gZ19vYmplY3RfbmV3IChHU1RfVFlQRV9QQUQsCisgICAgICAibmFtZSIsIG5hbWUsICJkaXJlY3Rpb24iLCBkaXJlY3Rpb24sIE5VTEwpOworfQorCisvKioKKyAqIGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGU6CisgKiBAdGVtcGw6IHRoZSBwYWQgdGVtcGxhdGUgdG8gdXNlCisgKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQKKyAqCisgKiBDcmVhdGVzIGEgbmV3IHBhZCB3aXRoIHRoZSBnaXZlbiBuYW1lIGZyb20gdGhlIGdpdmVuIHRlbXBsYXRlLgorICogSWYgbmFtZSBpcyBOVUxMLCBhIGd1YXJhbnRlZWQgdW5pcXVlIG5hbWUgKGFjcm9zcyBhbGwgcGFkcykKKyAqIHdpbGwgYmUgYXNzaWduZWQuCisgKiBUaGlzIGZ1bmN0aW9uIG1ha2VzIGEgY29weSBvZiB0aGUgbmFtZSBzbyB5b3UgY2FuIHNhZmVseSBmcmVlIHRoZSBuYW1lLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdFBhZCwgb3IgTlVMTCBpbiBjYXNlIG9mIGFuIGVycm9yLgorICovCitHc3RQYWQgKgorZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCwgY29uc3QgZ2NoYXIgKiBuYW1lKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRF9URU1QTEFURSAodGVtcGwpLCBOVUxMKTsKKworICByZXR1cm4gZ19vYmplY3RfbmV3IChHU1RfVFlQRV9QQUQsCisgICAgICAibmFtZSIsIG5hbWUsICJkaXJlY3Rpb24iLCB0ZW1wbC0+ZGlyZWN0aW9uLCAidGVtcGxhdGUiLCB0ZW1wbCwgTlVMTCk7Cit9CisKKy8qKgorICogZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGU6CisgKiBAdGVtcGw6IHRoZSAjR3N0U3RhdGljUGFkVGVtcGxhdGUgdG8gdXNlCisgKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQKKyAqCisgKiBDcmVhdGVzIGEgbmV3IHBhZCB3aXRoIHRoZSBnaXZlbiBuYW1lIGZyb20gdGhlIGdpdmVuIHN0YXRpYyB0ZW1wbGF0ZS4KKyAqIElmIG5hbWUgaXMgTlVMTCwgYSBndWFyYW50ZWVkIHVuaXF1ZSBuYW1lIChhY3Jvc3MgYWxsIHBhZHMpCisgKiB3aWxsIGJlIGFzc2lnbmVkLgorICogVGhpcyBmdW5jdGlvbiBtYWtlcyBhIGNvcHkgb2YgdGhlIG5hbWUgc28geW91IGNhbiBzYWZlbHkgZnJlZSB0aGUgbmFtZS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RQYWQsIG9yIE5VTEwgaW4gY2FzZSBvZiBhbiBlcnJvci4KKyAqLworR3N0UGFkICoKK2dzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlIChHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqIHRlbXBsLAorICAgIGNvbnN0IGdjaGFyICogbmFtZSkKK3sKKyAgR3N0UGFkICpwYWQ7CisgIEdzdFBhZFRlbXBsYXRlICp0ZW1wbGF0ZTsKKworICB0ZW1wbGF0ZSA9IGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAodGVtcGwpOworICBwYWQgPSBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlICh0ZW1wbGF0ZSwgbmFtZSk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHRlbXBsYXRlKTsKKyAgcmV0dXJuIHBhZDsKK30KKworLyoqCisgKiBnc3RfcGFkX2dldF9kaXJlY3Rpb246CisgKiBAcGFkOiBhICNHc3RQYWQgdG8gZ2V0IHRoZSBkaXJlY3Rpb24gb2YuCisgKgorICogR2V0cyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBwYWQuIFRoZSBkaXJlY3Rpb24gb2YgdGhlIHBhZCBpcworICogZGVjaWRlZCBhdCBjb25zdHJ1Y3Rpb24gdGltZSBzbyB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRha2UKKyAqIHRoZSBMT0NLLgorICoKKyAqIFJldHVybnM6IHRoZSAjR3N0UGFkRGlyZWN0aW9uIG9mIHRoZSBwYWQuCisgKgorICogTVQgc2FmZS4KKyAqLworR3N0UGFkRGlyZWN0aW9uCitnc3RfcGFkX2dldF9kaXJlY3Rpb24gKEdzdFBhZCAqIHBhZCkKK3sKKyAgR3N0UGFkRGlyZWN0aW9uIHJlc3VsdDsKKworICAvKiBQQURfVU5LTk9XTiBpcyBhIGxpdHRsZSBzaWxseSBidXQgd2UgbmVlZCBzb21lIHNvcnQgb2YKKyAgICogZXJyb3IgcmV0dXJuIHZhbHVlICovCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBHU1RfUEFEX1VOS05PV04pOworCisgIHJlc3VsdCA9IEdTVF9QQURfRElSRUNUSU9OIChwYWQpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3BhZF9hY3RpdmF0ZV9kZWZhdWx0IChHc3RQYWQgKiBwYWQpCit7CisgIHJldHVybiBnc3RfcGFkX2FjdGl2YXRlX3B1c2ggKHBhZCwgVFJVRSk7Cit9CisKK3N0YXRpYyB2b2lkCitwcmVfYWN0aXZhdGUgKEdzdFBhZCAqIHBhZCwgR3N0QWN0aXZhdGVNb2RlIG5ld19tb2RlKQoreworICBzd2l0Y2ggKG5ld19tb2RlKSB7CisgICAgY2FzZSBHU1RfQUNUSVZBVEVfUFVTSDoKKyAgICBjYXNlIEdTVF9BQ1RJVkFURV9QVUxMOgorICAgICAgR1NUX09CSkVDVF9MT0NLIChwYWQpOworICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAic2V0dGluZyBBQ1RJVkFURV9NT0RFICVkLCB1bnNldCBmbHVzaGluZyIsCisgICAgICAgICAgbmV3X21vZGUpOworICAgICAgR1NUX1BBRF9VTlNFVF9GTFVTSElORyAocGFkKTsKKyAgICAgIEdTVF9QQURfQUNUSVZBVEVfTU9ERSAocGFkKSA9IG5ld19tb2RlOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9BQ1RJVkFURV9OT05FOgorICAgICAgR1NUX09CSkVDVF9MT0NLIChwYWQpOworICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAic2V0dGluZyBBQ1RJVkFURV9NT0RFIE5PTkUsIHNldCBmbHVzaGluZyIpOworICAgICAgR1NUX1BBRF9TRVRfRkxVU0hJTkcgKHBhZCk7CisgICAgICBHU1RfUEFEX0FDVElWQVRFX01PREUgKHBhZCkgPSBuZXdfbW9kZTsKKyAgICAgIC8qIHVubG9jayBibG9ja2VkIHBhZHMgc28gZWxlbWVudCBjYW4gcmVzdW1lIGFuZCBzdG9wICovCisgICAgICBHU1RfUEFEX0JMT0NLX0JST0FEQ0FTVCAocGFkKTsKKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworICAgICAgYnJlYWs7CisgIH0KK30KKworc3RhdGljIHZvaWQKK3Bvc3RfYWN0aXZhdGUgKEdzdFBhZCAqIHBhZCwgR3N0QWN0aXZhdGVNb2RlIG5ld19tb2RlKQoreworICBzd2l0Y2ggKG5ld19tb2RlKSB7CisgICAgY2FzZSBHU1RfQUNUSVZBVEVfUFVTSDoKKyAgICBjYXNlIEdTVF9BQ1RJVkFURV9QVUxMOgorICAgICAgLyogbm9wICovCisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9BQ1RJVkFURV9OT05FOgorICAgICAgLyogZW5zdXJlcyB0aGF0IHN0cmVhbWluZyBzdG9wcyAqLworICAgICAgR1NUX1BBRF9TVFJFQU1fTE9DSyAocGFkKTsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInN0b3BwZWQgc3RyZWFtaW5nIik7CisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7CisgICAgICBjbGVhcl9ldmVudHMgKHBhZC0+cHJpdi0+ZXZlbnRzKTsKKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworICAgICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChwYWQpOworICAgICAgYnJlYWs7CisgIH0KK30KKworLyoqCisgKiBnc3RfcGFkX3NldF9hY3RpdmU6CisgKiBAcGFkOiB0aGUgI0dzdFBhZCB0byBhY3RpdmF0ZSBvciBkZWFjdGl2YXRlLgorICogQGFjdGl2ZTogd2hldGhlciBvciBub3QgdGhlIHBhZCBzaG91bGQgYmUgYWN0aXZlLgorICoKKyAqIEFjdGl2YXRlcyBvciBkZWFjdGl2YXRlcyB0aGUgZ2l2ZW4gcGFkLgorICogTm9ybWFsbHkgY2FsbGVkIGZyb20gd2l0aGluIGNvcmUgc3RhdGUgY2hhbmdlIGZ1bmN0aW9ucy4KKyAqCisgKiBJZiBAYWN0aXZlLCBtYWtlcyBzdXJlIHRoZSBwYWQgaXMgYWN0aXZlLiBJZiBpdCBpcyBhbHJlYWR5IGFjdGl2ZSwgZWl0aGVyIGluCisgKiBwdXNoIG9yIHB1bGwgbW9kZSwganVzdCByZXR1cm4uIE90aGVyd2lzZSBkaXNwYXRjaGVzIHRvIHRoZSBwYWQncyBhY3RpdmF0ZQorICogZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUgYWN0dWFsIGFjdGl2YXRpb24uCisgKgorICogSWYgbm90IEBhY3RpdmUsIGNoZWNrcyB0aGUgcGFkJ3MgY3VycmVudCBtb2RlIGFuZCBjYWxscworICogZ3N0X3BhZF9hY3RpdmF0ZV9wdXNoKCkgb3IgZ3N0X3BhZF9hY3RpdmF0ZV9wdWxsKCksIGFzIGFwcHJvcHJpYXRlLCB3aXRoIGEKKyAqIEZBTFNFIGFyZ3VtZW50LgorICoKKyAqIFJldHVybnM6ICNUUlVFIGlmIHRoZSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCisgKgorICogTVQgc2FmZS4KKyAqLworZ2Jvb2xlYW4KK2dzdF9wYWRfc2V0X2FjdGl2ZSAoR3N0UGFkICogcGFkLCBnYm9vbGVhbiBhY3RpdmUpCit7CisgIEdzdEFjdGl2YXRlTW9kZSBvbGQ7CisgIGdib29sZWFuIHJldCA9IEZBTFNFOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChwYWQpOworICBvbGQgPSBHU1RfUEFEX0FDVElWQVRFX01PREUgKHBhZCk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworCisgIGlmIChhY3RpdmUpIHsKKyAgICBzd2l0Y2ggKG9sZCkgeworICAgICAgY2FzZSBHU1RfQUNUSVZBVEVfUFVTSDoKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiYWN0aXZhdGluZyBwYWQgZnJvbSBwdXNoIik7CisgICAgICAgIHJldCA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHU1RfQUNUSVZBVEVfUFVMTDoKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiYWN0aXZhdGluZyBwYWQgZnJvbSBwdWxsIik7CisgICAgICAgIHJldCA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHU1RfQUNUSVZBVEVfTk9ORToKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiYWN0aXZhdGluZyBwYWQgZnJvbSBub25lIik7CisgICAgICAgIHJldCA9IChHU1RfUEFEX0FDVElWQVRFRlVOQyAocGFkKSkgKHBhZCk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAidW5rbm93biBhY3RpdmF0aW9uIG1vZGUhIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBzd2l0Y2ggKG9sZCkgeworICAgICAgY2FzZSBHU1RfQUNUSVZBVEVfUFVTSDoKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiZGVhY3RpdmF0aW5nIHBhZCBmcm9tIHB1c2giKTsKKyAgICAgICAgcmV0ID0gZ3N0X3BhZF9hY3RpdmF0ZV9wdXNoIChwYWQsIEZBTFNFKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9BQ1RJVkFURV9QVUxMOgorICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJkZWFjdGl2YXRpbmcgcGFkIGZyb20gcHVsbCIpOworICAgICAgICByZXQgPSBnc3RfcGFkX2FjdGl2YXRlX3B1bGwgKHBhZCwgRkFMU0UpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR1NUX0FDVElWQVRFX05PTkU6CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImRlYWN0aXZhdGluZyBwYWQgZnJvbSBub25lIik7CisgICAgICAgIHJldCA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAidW5rbm93biBhY3RpdmF0aW9uIG1vZGUhIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIGlmICghcmV0KSB7CisgICAgR1NUX09CSkVDVF9MT0NLIChwYWQpOworICAgIGlmICghYWN0aXZlKSB7CisgICAgICBnX2NyaXRpY2FsICgiRmFpbGVkIHRvIGRlYWN0aXZhdGUgcGFkICVzOiVzLCB2ZXJ5IGJhZCIsCisgICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKKyAgICB9IGVsc2UgeworICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYWQsICJGYWlsZWQgdG8gYWN0aXZhdGUgcGFkIik7CisgICAgfQorICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworICB9IGVsc2UgeworICAgIGlmICghYWN0aXZlKSB7CisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7CisgICAgICBHU1RfT0JKRUNUX0ZMQUdfVU5TRVQgKHBhZCwgR1NUX1BBRF9ORUVEX1JFQ09ORklHVVJFKTsKKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworICAgIH0KKyAgfQorCisgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICogZ3N0X3BhZF9hY3RpdmF0ZV9wdWxsOgorICogQHBhZDogdGhlICNHc3RQYWQgdG8gYWN0aXZhdGUgb3IgZGVhY3RpdmF0ZS4KKyAqIEBhY3RpdmU6IHdoZXRoZXIgb3Igbm90IHRoZSBwYWQgc2hvdWxkIGJlIGFjdGl2ZS4KKyAqCisgKiBBY3RpdmF0ZXMgb3IgZGVhY3RpdmF0ZXMgdGhlIGdpdmVuIHBhZCBpbiBwdWxsIG1vZGUgdmlhIGRpc3BhdGNoaW5nIHRvIHRoZQorICogcGFkJ3MgYWN0aXZhdGVwdWxsZnVuYy4gRm9yIHVzZSBmcm9tIHdpdGhpbiBwYWQgYWN0aXZhdGlvbiBmdW5jdGlvbnMgb25seS4KKyAqIFdoZW4gY2FsbGVkIG9uIHNpbmsgcGFkcywgd2lsbCBmaXJzdCBwcm94eSB0aGUgY2FsbCB0byB0aGUgcGVlciBwYWQsIHdoaWNoCisgKiBpcyBleHBlY3RlZCB0byBhY3RpdmF0ZSBpdHMgaW50ZXJuYWxseSBsaW5rZWQgcGFkcyBmcm9tIHdpdGhpbiBpdHMKKyAqIGFjdGl2YXRlX3B1bGwgZnVuY3Rpb24uCisgKgorICogSWYgeW91IGRvbid0IGtub3cgd2hhdCB0aGlzIGlzLCB5b3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBjYWxsIGl0LgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4KKyAqCisgKiBNVCBzYWZlLgorICovCitnYm9vbGVhbgorZ3N0X3BhZF9hY3RpdmF0ZV9wdWxsIChHc3RQYWQgKiBwYWQsIGdib29sZWFuIGFjdGl2ZSkKK3sKKyAgR3N0QWN0aXZhdGVNb2RlIG9sZCwgbmV3OworICBHc3RQYWQgKnBlZXI7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIEZBTFNFKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7CisgIG9sZCA9IEdTVF9QQURfQUNUSVZBVEVfTU9ERSAocGFkKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisKKyAgaWYgKGFjdGl2ZSkgeworICAgIHN3aXRjaCAob2xkKSB7CisgICAgICBjYXNlIEdTVF9BQ1RJVkFURV9QVUxMOgorICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJhY3RpdmF0aW5nIHBhZCBmcm9tIHB1bGwsIHdhcyBvayIpOworICAgICAgICBnb3RvIHdhc19vazsKKyAgICAgIGNhc2UgR1NUX0FDVElWQVRFX1BVU0g6CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwKKyAgICAgICAgICAgICJhY3RpdmF0aW5nIHBhZCBmcm9tIHB1c2gsIGRlYWN0aXZhdGUgcHVzaCBmaXJzdCIpOworICAgICAgICAvKiBwYWQgd2FzIGFjdGl2YXRlIGluIHRoZSB3cm9uZyBkaXJlY3Rpb24sIGRlYWN0aXZhdGUgaXQKKyAgICAgICAgICogYW5kIHJlYWN0aXZhdGUgaXQgaW4gcHVsbCBtb2RlICovCisgICAgICAgIGlmIChHX1VOTElLRUxZICghZ3N0X3BhZF9hY3RpdmF0ZV9wdXNoIChwYWQsIEZBTFNFKSkpCisgICAgICAgICAgZ290byBkZWFjdGl2YXRlX2ZhaWxlZDsKKyAgICAgICAgLyogZmFsbHRocm91Z2gsIHBhZCBpcyBkZWFjdGl2YXRlZCBub3cuICovCisgICAgICBjYXNlIEdTVF9BQ1RJVkFURV9OT05FOgorICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJhY3RpdmF0aW5nIHBhZCBmcm9tIG5vbmUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9IGVsc2UgeworICAgIHN3aXRjaCAob2xkKSB7CisgICAgICBjYXNlIEdTVF9BQ1RJVkFURV9OT05FOgorICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJkZWFjdGl2YXRpbmcgcGFkIGZyb20gbm9uZSwgd2FzIG9rIik7CisgICAgICAgIGdvdG8gd2FzX29rOworICAgICAgY2FzZSBHU1RfQUNUSVZBVEVfUFVTSDoKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiZGVhY3RpdmF0aW5nIHBhZCBmcm9tIHB1c2gsIHdlaXJkIik7CisgICAgICAgIC8qIHBhZCB3YXMgYWN0aXZhdGVkIGluIHRoZSBvdGhlciBkaXJlY3Rpb24sIGRlYWN0aXZhdGUgaXQKKyAgICAgICAgICogaW4gcHVzaCBtb2RlLCB0aGlzIHNob3VsZCBub3QgaGFwcGVuLi4uICovCisgICAgICAgIGlmIChHX1VOTElLRUxZICghZ3N0X3BhZF9hY3RpdmF0ZV9wdXNoIChwYWQsIEZBTFNFKSkpCisgICAgICAgICAgZ290byBkZWFjdGl2YXRlX2ZhaWxlZDsKKyAgICAgICAgLyogZXZlcnl0aGluZyBpcyBmaW5lIG5vdyAqLworICAgICAgICBnb3RvIHdhc19vazsKKyAgICAgIGNhc2UgR1NUX0FDVElWQVRFX1BVTEw6CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImRlYWN0aXZhdGluZyBwYWQgZnJvbSBwdWxsIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIGlmIChnc3RfcGFkX2dldF9kaXJlY3Rpb24gKHBhZCkgPT0gR1NUX1BBRF9TSU5LKSB7CisgICAgaWYgKChwZWVyID0gZ3N0X3BhZF9nZXRfcGVlciAocGFkKSkpIHsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImNhbGxpbmcgcGVlciIpOworICAgICAgaWYgKEdfVU5MSUtFTFkgKCFnc3RfcGFkX2FjdGl2YXRlX3B1bGwgKHBlZXIsIGFjdGl2ZSkpKQorICAgICAgICBnb3RvIHBlZXJfZmFpbGVkOworICAgICAgZ3N0X29iamVjdF91bnJlZiAocGVlcik7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIHRoZXJlIGlzIG5vIHBlZXIsIHRoaXMgaXMgb25seSBmYXRhbCB3aGVuIHdlIGFjdGl2YXRlLiBXaGVuIHdlCisgICAgICAgKiBkZWFjdGl2YXRlLCB3ZSBtdXN0IGFzc3VtZSB0aGUgYXBwbGljYXRpb24gaGFzIHVubGlua2VkIHRoZSBwZWVyIGFuZAorICAgICAgICogd2lsbCBkZWFjdGl2YXRlIGl0IGV2ZW50dWFsbHkuICovCisgICAgICBpZiAoYWN0aXZlKQorICAgICAgICBnb3RvIG5vdF9saW5rZWQ7CisgICAgICBlbHNlCisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImRlYWN0aXZhdGluZyB1bmxpbmtlZCBwYWQiKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgaWYgKEdfVU5MSUtFTFkgKEdTVF9QQURfR0VUUkFOR0VGVU5DIChwYWQpID09IE5VTEwpKQorICAgICAgZ290byBmYWlsdXJlOyAgICAgICAgICAgICAvKiBDYW4ndCBhY3RpdmF0ZSBwdWxsIG9uIGEgc3JjIHdpdGhvdXQgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRyYW5nZSBmdW5jdGlvbiAqLworICB9CisKKyAgbmV3ID0gYWN0aXZlID8gR1NUX0FDVElWQVRFX1BVTEwgOiBHU1RfQUNUSVZBVEVfTk9ORTsKKyAgcHJlX2FjdGl2YXRlIChwYWQsIG5ldyk7CisKKyAgaWYgKEdTVF9QQURfQUNUSVZBVEVQVUxMRlVOQyAocGFkKSkgeworICAgIGlmIChHX1VOTElLRUxZICghR1NUX1BBRF9BQ1RJVkFURVBVTExGVU5DIChwYWQpIChwYWQsIGFjdGl2ZSkpKQorICAgICAgZ290byBmYWlsdXJlOworICB9IGVsc2UgeworICAgIC8qIGNhbiBoYXBwZW4gZm9yIHNpbmtzIG9mIHBhc3N0aHJvdWdoIGVsZW1lbnRzICovCisgIH0KKworICBwb3N0X2FjdGl2YXRlIChwYWQsIG5ldyk7CisKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfUEFEUywgcGFkLCAiJXMgaW4gcHVsbCBtb2RlIiwKKyAgICAgIGFjdGl2ZSA/ICJhY3RpdmF0ZWQiIDogImRlYWN0aXZhdGVkIik7CisKKyAgcmV0dXJuIFRSVUU7CisKK3dhc19vazoKKyAgeworICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1BBRFMsIHBhZCwgImFscmVhZHkgJXMgaW4gcHVsbCBtb2RlIiwKKyAgICAgICAgYWN0aXZlID8gImFjdGl2YXRlZCIgOiAiZGVhY3RpdmF0ZWQiKTsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorZGVhY3RpdmF0ZV9mYWlsZWQ6CisgIHsKKyAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9QQURTLCBwYWQsCisgICAgICAgICJmYWlsZWQgdG8gJXMgaW4gc3dpdGNoIHRvIHB1bGwgZnJvbSBtb2RlICVkIiwKKyAgICAgICAgKGFjdGl2ZSA/ICJhY3RpdmF0ZSIgOiAiZGVhY3RpdmF0ZSIpLCBvbGQpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorcGVlcl9mYWlsZWQ6CisgIHsKKyAgICBHU1RfT0JKRUNUX0xPQ0sgKHBlZXIpOworICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1BBRFMsIHBhZCwKKyAgICAgICAgImFjdGl2YXRlX3B1bGwgb24gcGVlciAoJXM6JXMpIGZhaWxlZCIsIEdTVF9ERUJVR19QQURfTkFNRSAocGVlcikpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwZWVyKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChwZWVyKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK25vdF9saW5rZWQ6CisgIHsKKyAgICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX1BBRFMsIHBhZCwgImNhbid0IGFjdGl2YXRlIHVubGlua2VkIHNpbmsgIgorICAgICAgICAicGFkIGluIHB1bGwgbW9kZSIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorZmFpbHVyZToKKyAgeworICAgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKKyAgICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX1BBRFMsIHBhZCwgImZhaWxlZCB0byAlcyBpbiBwdWxsIG1vZGUiLAorICAgICAgICBhY3RpdmUgPyAiYWN0aXZhdGUiIDogImRlYWN0aXZhdGUiKTsKKyAgICBHU1RfUEFEX1NFVF9GTFVTSElORyAocGFkKTsKKyAgICBHU1RfUEFEX0FDVElWQVRFX01PREUgKHBhZCkgPSBvbGQ7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKKy8qKgorICogZ3N0X3BhZF9hY3RpdmF0ZV9wdXNoOgorICogQHBhZDogdGhlICNHc3RQYWQgdG8gYWN0aXZhdGUgb3IgZGVhY3RpdmF0ZS4KKyAqIEBhY3RpdmU6IHdoZXRoZXIgdGhlIHBhZCBzaG91bGQgYmUgYWN0aXZlIG9yIG5vdC4KKyAqCisgKiBBY3RpdmF0ZXMgb3IgZGVhY3RpdmF0ZXMgdGhlIGdpdmVuIHBhZCBpbiBwdXNoIG1vZGUgdmlhIGRpc3BhdGNoaW5nIHRvIHRoZQorICogcGFkJ3MgYWN0aXZhdGVwdXNoZnVuYy4gRm9yIHVzZSBmcm9tIHdpdGhpbiBwYWQgYWN0aXZhdGlvbiBmdW5jdGlvbnMgb25seS4KKyAqCisgKiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRoaXMgaXMsIHlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGNhbGwgaXQuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4KKyAqCisgKiBNVCBzYWZlLgorICovCitnYm9vbGVhbgorZ3N0X3BhZF9hY3RpdmF0ZV9wdXNoIChHc3RQYWQgKiBwYWQsIGdib29sZWFuIGFjdGl2ZSkKK3sKKyAgR3N0QWN0aXZhdGVNb2RlIG9sZCwgbmV3OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7CisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1BBRFMsIHBhZCwgInRyeWluZyB0byBzZXQgJXMgaW4gcHVzaCBtb2RlIiwKKyAgICAgIGFjdGl2ZSA/ICJhY3RpdmF0ZWQiIDogImRlYWN0aXZhdGVkIik7CisKKyAgR1NUX09CSkVDVF9MT0NLIChwYWQpOworICBvbGQgPSBHU1RfUEFEX0FDVElWQVRFX01PREUgKHBhZCk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworCisgIGlmIChhY3RpdmUpIHsKKyAgICBzd2l0Y2ggKG9sZCkgeworICAgICAgY2FzZSBHU1RfQUNUSVZBVEVfUFVTSDoKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiYWN0aXZhdGluZyBwYWQgZnJvbSBwdXNoLCB3YXMgb2siKTsKKyAgICAgICAgZ290byB3YXNfb2s7CisgICAgICBjYXNlIEdTVF9BQ1RJVkFURV9QVUxMOgorICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsCisgICAgICAgICAgICAiYWN0aXZhdGluZyBwYWQgZnJvbSBwdXNoLCBkZWFjdGl2YXRpbmcgcHVsbCBmaXJzdCIpOworICAgICAgICAvKiBwYWQgd2FzIGFjdGl2YXRlIGluIHRoZSB3cm9uZyBkaXJlY3Rpb24sIGRlYWN0aXZhdGUgaXQKKyAgICAgICAgICogYW4gcmVhY3RpdmF0ZSBpdCBpbiBwdXNoIG1vZGUgKi8KKyAgICAgICAgaWYgKEdfVU5MSUtFTFkgKCFnc3RfcGFkX2FjdGl2YXRlX3B1bGwgKHBhZCwgRkFMU0UpKSkKKyAgICAgICAgICBnb3RvIGRlYWN0aXZhdGVfZmFpbGVkOworICAgICAgICAvKiBmYWxsdGhyb3VnaCwgcGFkIGlzIGRlYWN0aXZhdGVkIG5vdy4gKi8KKyAgICAgIGNhc2UgR1NUX0FDVElWQVRFX05PTkU6CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImFjdGl2YXRpbmcgcGFkIGZyb20gbm9uZSIpOworICAgICAgICBicmVhazsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgc3dpdGNoIChvbGQpIHsKKyAgICAgIGNhc2UgR1NUX0FDVElWQVRFX05PTkU6CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImRlYWN0aXZhdGluZyBwYWQgZnJvbSBub25lLCB3YXMgb2siKTsKKyAgICAgICAgZ290byB3YXNfb2s7CisgICAgICBjYXNlIEdTVF9BQ1RJVkFURV9QVUxMOgorICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJkZWFjdGl2YXRpbmcgcGFkIGZyb20gcHVsbCwgd2VpcmQiKTsKKyAgICAgICAgLyogcGFkIHdhcyBhY3RpdmF0ZWQgaW4gdGhlIG90aGVyIGRpcmVjdGlvbiwgZGVhY3RpdmF0ZSBpdAorICAgICAgICAgKiBpbiBwdWxsIG1vZGUsIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4uLi4gKi8KKyAgICAgICAgaWYgKEdfVU5MSUtFTFkgKCFnc3RfcGFkX2FjdGl2YXRlX3B1bGwgKHBhZCwgRkFMU0UpKSkKKyAgICAgICAgICBnb3RvIGRlYWN0aXZhdGVfZmFpbGVkOworICAgICAgICAvKiBldmVyeXRoaW5nIGlzIGZpbmUgbm93ICovCisgICAgICAgIGdvdG8gd2FzX29rOworICAgICAgY2FzZSBHU1RfQUNUSVZBVEVfUFVTSDoKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiZGVhY3RpdmF0aW5nIHBhZCBmcm9tIHB1c2giKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgbmV3ID0gYWN0aXZlID8gR1NUX0FDVElWQVRFX1BVU0ggOiBHU1RfQUNUSVZBVEVfTk9ORTsKKyAgcHJlX2FjdGl2YXRlIChwYWQsIG5ldyk7CisKKyAgaWYgKEdTVF9QQURfQUNUSVZBVEVQVVNIRlVOQyAocGFkKSkgeworICAgIGlmIChHX1VOTElLRUxZICghR1NUX1BBRF9BQ1RJVkFURVBVU0hGVU5DIChwYWQpIChwYWQsIGFjdGl2ZSkpKSB7CisgICAgICBnb3RvIGZhaWx1cmU7CisgICAgfQorICB9IGVsc2UgeworICAgIC8qIHF1aXRlIG9rLCBlbGVtZW50IHJlbGllcyBvbiBzdGF0ZSBjaGFuZ2UgZnVuYyB0byBwcmVwYXJlIGl0c2VsZiAqLworICB9CisKKyAgcG9zdF9hY3RpdmF0ZSAocGFkLCBuZXcpOworCisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1BBRFMsIHBhZCwgIiVzIGluIHB1c2ggbW9kZSIsCisgICAgICBhY3RpdmUgPyAiYWN0aXZhdGVkIiA6ICJkZWFjdGl2YXRlZCIpOworICByZXR1cm4gVFJVRTsKKword2FzX29rOgorICB7CisgICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfUEFEUywgcGFkLCAiYWxyZWFkeSAlcyBpbiBwdXNoIG1vZGUiLAorICAgICAgICBhY3RpdmUgPyAiYWN0aXZhdGVkIiA6ICJkZWFjdGl2YXRlZCIpOworICAgIHJldHVybiBUUlVFOworICB9CitkZWFjdGl2YXRlX2ZhaWxlZDoKKyAgeworICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1BBRFMsIHBhZCwKKyAgICAgICAgImZhaWxlZCB0byAlcyBpbiBzd2l0Y2ggdG8gcHVzaCBmcm9tIG1vZGUgJWQiLAorICAgICAgICAoYWN0aXZlID8gImFjdGl2YXRlIiA6ICJkZWFjdGl2YXRlIiksIG9sZCk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CitmYWlsdXJlOgorICB7CisgICAgR1NUX09CSkVDVF9MT0NLIChwYWQpOworICAgIEdTVF9DQVRfSU5GT19PQkpFQ1QgKEdTVF9DQVRfUEFEUywgcGFkLCAiZmFpbGVkIHRvICVzIGluIHB1c2ggbW9kZSIsCisgICAgICAgIGFjdGl2ZSA/ICJhY3RpdmF0ZSIgOiAiZGVhY3RpdmF0ZSIpOworICAgIEdTVF9QQURfU0VUX0ZMVVNISU5HIChwYWQpOworICAgIEdTVF9QQURfQUNUSVZBVEVfTU9ERSAocGFkKSA9IG9sZDsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworLyoqCisgKiBnc3RfcGFkX2lzX2FjdGl2ZToKKyAqIEBwYWQ6IHRoZSAjR3N0UGFkIHRvIHF1ZXJ5CisgKgorICogUXVlcnkgaWYgYSBwYWQgaXMgYWN0aXZlCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgcGFkIGlzIGFjdGl2ZS4KKyAqCisgKiBNVCBzYWZlLgorICovCitnYm9vbGVhbgorZ3N0X3BhZF9pc19hY3RpdmUgKEdzdFBhZCAqIHBhZCkKK3sKKyAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIEZBTFNFKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7CisgIHJlc3VsdCA9IEdTVF9QQURfSVNfQUNUSVZFIChwYWQpOworICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGdzdF9wYWRfYWRkX3Byb2JlOgorICogQHBhZDogdGhlICNHc3RQYWQgdG8gYWRkIHRoZSBwcm9iZSB0bworICogQG1hc2s6IHRoZSBwcm9iZSBtYXNrCisgKiBAY2FsbGJhY2s6ICNHc3RQYWRQcm9iZUNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aCBub3RpZmljYXRpb25zIG9mCisgKiAgICAgICAgICAgdGhlIHBhZCBzdGF0ZQorICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiB1c2VyIGRhdGEgcGFzc2VkIHRvIHRoZSBjYWxsYmFjaworICogQGRlc3Ryb3lfZGF0YTogI0dEZXN0cm95Tm90aWZ5IGZvciB1c2VyX2RhdGEKKyAqCisgKiBCZSBub3RpZmllZCBvZiBkaWZmZXJlbnQgc3RhdGVzIG9mIHBhZHMuIFRoZSBwcm92aWRlZCBjYWxsYmFjayBpcyBjYWxsZWQgZm9yCisgKiBldmVyeSBzdGF0ZSB0aGF0IG1hdGNoZXMgQG1hc2suCisgKgorICogPG5vdGU+CisgKiAgUGFkIHByb2JlIGhhbmRsZXJzIGFyZSBvbmx5IGNhbGxlZCBmb3Igc291cmNlIHBhZHMgaW4gcHVzaCBtb2RlCisgKiAgYW5kIHNpbmsgcGFkcyBpbiBwdWxsIG1vZGUuCisgKiA8L25vdGU+CisgKgorICogUmV0dXJuczogYW4gaWQgb3IgMCBvbiBlcnJvci4gVGhlIGlkIGNhbiBiZSB1c2VkIHRvIHJlbW92ZSB0aGUgcHJvYmUgd2l0aAorICogZ3N0X3BhZF9yZW1vdmVfcHJvYmUoKS4KKyAqCisgKiBNVCBzYWZlLgorICovCitndWxvbmcKK2dzdF9wYWRfYWRkX3Byb2JlIChHc3RQYWQgKiBwYWQsIEdzdFByb2JlVHlwZSBtYXNrLAorICAgIEdzdFBhZFByb2JlQ2FsbGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJfZGF0YSwKKyAgICBHRGVzdHJveU5vdGlmeSBkZXN0cm95X2RhdGEpCit7CisgIEdIb29rICpob29rOworICBndWxvbmcgcmVzOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCAwKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG1hc2sgIT0gMCwgMCk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChwYWQpOworICAvKiBtYWtlIGEgbmV3IHByb2JlICovCisgIGhvb2sgPSBnX2hvb2tfYWxsb2MgKCZwYWQtPnByb2Jlcyk7CisKKyAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1NDSEVEVUxJTkcsIHBhZCwgImFkZGluZyBwcm9iZSBmb3IgbWFzayAweCUwOHgiLAorICAgICAgbWFzayk7CisKKyAgLyogd2hlbiBubyBjb250cmFpbnRzIGFyZSBnaXZlbiBmb3IgdGhlIHR5cGVzLCBhc3N1bWUgYWxsIHR5cGVzIGFyZQorICAgKiBhY2NlcHRhYmxlICovCisgIGlmICgobWFzayAmIEdTVF9QUk9CRV9UWVBFX0RBVEEpID09IDApCisgICAgbWFzayB8PSBHU1RfUFJPQkVfVFlQRV9EQVRBOworICBpZiAoKG1hc2sgJiBHU1RfUFJPQkVfVFlQRV9TQ0hFRFVMSU5HKSA9PSAwKQorICAgIG1hc2sgfD0gR1NUX1BST0JFX1RZUEVfU0NIRURVTElORzsKKworICAvKiBzdG9yZSBvdXIgZmxhZ3MgYW5kIG90aGVyIGZpZWxkcyAqLworICBob29rLT5mbGFncyB8PSAobWFzayA8PCBHX0hPT0tfRkxBR19VU0VSX1NISUZUKTsKKyAgaG9vay0+ZnVuYyA9IGNhbGxiYWNrOworICBob29rLT5kYXRhID0gdXNlcl9kYXRhOworICBob29rLT5kZXN0cm95ID0gZGVzdHJveV9kYXRhOworICBQUk9CRV9DT09LSUUgKGhvb2spID0gMDsKKworICAvKiBpbmNyZW1lbmVudCBjb29raWUgc28gdGhhdCB0aGUgbmV3IGhvb2sgZ2V0J3MgY2FsbGVkICovCisgIHBhZC0+cHJpdi0+cHJvYmVfY29va2llKys7CisKKyAgLyogYWRkIHRoZSBwcm9iZSAqLworICBnX2hvb2tfcHJlcGVuZCAoJnBhZC0+cHJvYmVzLCBob29rKTsKKyAgcGFkLT5udW1fcHJvYmVzKys7CisKKyAgLyogZ2V0IHRoZSBpZCBvZiB0aGUgaG9vaywgd2UgcmV0dXJuIHRoaXMgYW5kIGl0IGNhbiBiZSB1c2VkIHRvIHJlbW92ZSB0aGUKKyAgICogcHJvYmUgbGF0ZXIgKi8KKyAgcmVzID0gaG9vay0+aG9va19pZDsKKworICBHU1RfQ0FUX0xPR19PQkpFQ1QgKEdTVF9DQVRfU0NIRURVTElORywgcGFkLCAiZ290IHByb2JlIGlkICVsdSIsIHJlcyk7CisKKyAgaWYgKG1hc2sgJiBHU1RfUFJPQkVfVFlQRV9CTE9DS0lORykgeworICAgIC8qIHdlIGhhdmUgYSBibG9jayBwcm9iZSAqLworICAgIHBhZC0+bnVtX2Jsb2NrZWQrKzsKKyAgICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChwYWQsIEdTVF9QQURfQkxPQ0tFRCk7CisgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1NDSEVEVUxJTkcsIHBhZCwgImFkZGVkIGJsb2NraW5nIHByb2JlLCAiCisgICAgICAgICJub3cgJWQgYmxvY2tpbmcgcHJvYmVzIiwgcGFkLT5udW1fYmxvY2tlZCk7CisgIH0KKworICAvKiBjYWxsIHRoZSBjYWxsYmFjayBpZiB3ZSBuZWVkIHRvIGJlIGNhbGxlZCBmb3IgaWRsZSBjYWxsYmFja3MgKi8KKyAgaWYgKChtYXNrICYgR1NUX1BST0JFX1RZUEVfSURMRSkgJiYgKGNhbGxiYWNrICE9IE5VTEwpKSB7CisgICAgaWYgKHBhZC0+cHJpdi0+dXNpbmcgPiAwKSB7CisgICAgICAvKiB0aGUgcGFkIGlzIGluIHVzZSwgd2UgY2FuJ3Qgc2lnbmFsIHRoZSBpZGxlIGNhbGxiYWNrIHlldC4gU2luY2Ugd2Ugc2V0IHRoZQorICAgICAgICogZmxhZyBhYm92ZSwgdGhlIGxhc3QgdGhyZWFkIHRvIGxlYXZlIHRoZSBwdXNoIHdpbGwgZG8gdGhlIGNhbGxiYWNrLiBOZXcKKyAgICAgICAqIHRocmVhZHMgZ29pbmcgaW50byB0aGUgcHVzaCB3aWxsIGJsb2NrLiAqLworICAgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1NDSEVEVUxJTkcsIHBhZCwKKyAgICAgICAgICAicGFkIGlzIGluIHVzZSwgZGVsYXkgaWRsZSBjYWxsYmFjayIpOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIHRoZSBwYWQgaXMgaWRsZSBub3csIHdlIGNhbiBzaWduYWwgdGhlIGlkbGUgY2FsbGJhY2sgbm93ICovCisgICAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKEdTVF9DQVRfU0NIRURVTElORywgcGFkLAorICAgICAgICAgICJwYWQgaXMgaWRsZSwgdHJpZ2dlciBpZGxlIGNhbGxiYWNrIik7CisgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKworICAgICAgY2FsbGJhY2sgKHBhZCwgR1NUX1BST0JFX1RZUEVfSURMRSwgTlVMTCwgdXNlcl9kYXRhKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisgIH0KKyAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQKK2NsZWFudXBfaG9vayAoR3N0UGFkICogcGFkLCBHSG9vayAqIGhvb2spCit7CisgIEdzdFByb2JlVHlwZSB0eXBlOworCisgIHR5cGUgPSAoaG9vay0+ZmxhZ3MpID4+IEdfSE9PS19GTEFHX1VTRVJfU0hJRlQ7CisKKyAgaWYgKHR5cGUgJiBHU1RfUFJPQkVfVFlQRV9CTE9DS0lORykgeworICAgIC8qIHVuYmxvY2sgd2hlbiB3ZSByZW1vdmUgdGhlIGxhc3QgYmxvY2tpbmcgcHJvYmUgKi8KKyAgICBwYWQtPm51bV9ibG9ja2VkLS07CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAicmVtb3ZlIGJsb2NraW5nIHByb2JlLCBub3cgJWQgbGVmdCIsCisgICAgICAgIHBhZC0+bnVtX2Jsb2NrZWQpOworICAgIGlmIChwYWQtPm51bV9ibG9ja2VkID09IDApIHsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImxhc3QgYmxvY2tpbmcgcHJvYmUgcmVtb3ZlZCwgdW5ibG9ja2luZyIpOworICAgICAgR1NUX09CSkVDVF9GTEFHX1VOU0VUIChwYWQsIEdTVF9QQURfQkxPQ0tFRCk7CisgICAgICBHU1RfUEFEX0JMT0NLX0JST0FEQ0FTVCAocGFkKTsKKyAgICB9CisgIH0KKyAgZ19ob29rX2Rlc3Ryb3lfbGluayAoJnBhZC0+cHJvYmVzLCBob29rKTsKKyAgcGFkLT5udW1fcHJvYmVzLS07Cit9CisKKy8qKgorICogZ3N0X3BhZF9yZW1vdmVfcHJvYmU6CisgKiBAcGFkOiB0aGUgI0dzdFBhZCB3aXRoIHRoZSBwcm9iZQorICogQGlkOiB0aGUgcHJvYmUgaWQgdG8gcmVtb3ZlCisgKgorICogUmVtb3ZlIHRoZSBwcm9iZSB3aXRoIEBpZCBmcm9tIEBwYWQuCisgKgorICogTVQgc2FmZS4KKyAqLwordm9pZAorZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKEdzdFBhZCAqIHBhZCwgZ3Vsb25nIGlkKQoreworICBHSG9vayAqaG9vazsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7CisKKyAgaG9vayA9IGdfaG9va19nZXQgKCZwYWQtPnByb2JlcywgaWQpOworICBpZiAoaG9vayA9PSBOVUxMKQorICAgIGdvdG8gbm90X2ZvdW5kOworCisgIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9TQ0hFRFVMSU5HLCBwYWQsICJyZW1vdmluZyBob29rICVsZCIsCisgICAgICBob29rLT5ob29rX2lkKTsKKyAgY2xlYW51cF9ob29rIChwYWQsIGhvb2spOworICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKworICByZXR1cm47CisKK25vdF9mb3VuZDoKKyAgeworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworICAgIGdfd2FybmluZyAoIiVzOiBwYWQgYCVwJyBoYXMgbm8gcHJvYmUgd2l0aCBpZCBgJWx1JyIsIEdfU1RSTE9DLCBwYWQsIGlkKTsKKyAgICByZXR1cm47CisgIH0KK30KKworLyoqCisgKiBnc3RfcGFkX2lzX2Jsb2NrZWQ6CisgKiBAcGFkOiB0aGUgI0dzdFBhZCB0byBxdWVyeQorICoKKyAqIENoZWNrcyBpZiB0aGUgcGFkIGlzIGJsb2NrZWQgb3Igbm90LiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlCisgKiBsYXN0IHJlcXVlc3RlZCBzdGF0ZSBvZiB0aGUgcGFkLiBJdCBpcyBub3QgY2VydGFpbiB0aGF0IHRoZSBwYWQKKyAqIGlzIGFjdHVhbGx5IGJsb2NraW5nIGF0IHRoaXMgcG9pbnQgKHNlZSBnc3RfcGFkX2lzX2Jsb2NraW5nKCkpLgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIHBhZCBpcyBibG9ja2VkLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK2dib29sZWFuCitnc3RfcGFkX2lzX2Jsb2NrZWQgKEdzdFBhZCAqIHBhZCkKK3sKKyAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIHJlc3VsdCk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChwYWQpOworICByZXN1bHQgPSBHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChwYWQsIEdTVF9QQURfQkxPQ0tFRCk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZ3N0X3BhZF9pc19ibG9ja2luZzoKKyAqIEBwYWQ6IHRoZSAjR3N0UGFkIHRvIHF1ZXJ5CisgKgorICogQ2hlY2tzIGlmIHRoZSBwYWQgaXMgYmxvY2tpbmcgb3Igbm90LiBUaGlzIGlzIGEgZ3VhcmFudGVlZCBzdGF0ZQorICogb2Ygd2hldGhlciB0aGUgcGFkIGlzIGFjdHVhbGx5IGJsb2NraW5nIG9uIGEgI0dzdEJ1ZmZlciBvciBhICNHc3RFdmVudC4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBwYWQgaXMgYmxvY2tpbmcuCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBTaW5jZTogMC4xMC4xMQorICovCitnYm9vbGVhbgorZ3N0X3BhZF9pc19ibG9ja2luZyAoR3N0UGFkICogcGFkKQoreworICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgcmVzdWx0KTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7CisgIC8qIHRoZSBibG9ja2luZyBmbGFnIGlzIG9ubHkgdmFsaWQgaWYgdGhlIHBhZCBpcyBub3QgZmx1c2hpbmcgKi8KKyAgcmVzdWx0ID0gR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAocGFkLCBHU1RfUEFEX0JMT0NLSU5HKSAmJgorICAgICAgIUdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKHBhZCwgR1NUX1BBRF9GTFVTSElORyk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZ3N0X3BhZF9jaGVja19yZWNvbmZpZ3VyZToKKyAqIEBwYWQ6IHRoZSAjR3N0UGFkIHRvIGNoZWNrCisgKgorICogQ2hlY2sgYW5kIGNsZWFyIHRoZSAjR1NUX1BBRF9ORUVEX1JFQ09ORklHVVJFIGZsYWcgb24gQHBhZCBhbmQgcmV0dXJuICVUUlVFCisgKiBpZiB0aGUgZmxhZyB3YXMgc2V0LgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlzIHRoZSBHU1RfUEFEX05FRURfUkVDT05GSUdVUkUgZmxhZyB3YXMgc2V0IG9uIEBwYWQuCisgKi8KK2dib29sZWFuCitnc3RfcGFkX2NoZWNrX3JlY29uZmlndXJlIChHc3RQYWQgKiBwYWQpCit7CisgIGdib29sZWFuIHJlY29uZmlndXJlOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChwYWQpOworICByZWNvbmZpZ3VyZSA9IEdTVF9QQURfTkVFRFNfUkVDT05GSUdVUkUgKHBhZCk7CisgIEdTVF9PQkpFQ1RfRkxBR19VTlNFVCAocGFkLCBHU1RfUEFEX05FRURfUkVDT05GSUdVUkUpOworICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKworICByZXR1cm4gcmVjb25maWd1cmU7Cit9CisKKy8qKgorICogZ3N0X3BhZF9tYXJrX3JlY29uZmlndXJlOgorICogQHBhZDogdGhlICNHc3RQYWQgdG8gbWFyaworICoKKyAqIE1hcmsgYSBwYWQgZm9yIG5lZWRpbmcgcmVjb25maWd1cmF0aW9uLiBUaGUgbmV4dCBjYWxsIHRvCisgKiBnc3RfcGFkX2NoZWNrX3JlY29uZmlndXJlKCkgd2lsbCByZXR1cm4gJVRSVUUgYWZ0ZXIgdGhpcyBjYWxsLgorICovCit2b2lkCitnc3RfcGFkX21hcmtfcmVjb25maWd1cmUgKEdzdFBhZCAqIHBhZCkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChwYWQpOworICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChwYWQsIEdTVF9QQURfTkVFRF9SRUNPTkZJR1VSRSk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworfQorCisvKioKKyAqIGdzdF9wYWRfc2V0X2FjdGl2YXRlX2Z1bmN0aW9uOgorICogQHBhZDogYSAjR3N0UGFkLgorICogQGFjdGl2YXRlOiB0aGUgI0dzdFBhZEFjdGl2YXRlRnVuY3Rpb24gdG8gc2V0LgorICoKKyAqIFNldHMgdGhlIGdpdmVuIGFjdGl2YXRlIGZ1bmN0aW9uIGZvciBAcGFkLiBUaGUgYWN0aXZhdGUgZnVuY3Rpb24gd2lsbAorICogZGlzcGF0Y2ggdG8gZ3N0X3BhZF9hY3RpdmF0ZV9wdXNoKCkgb3IgZ3N0X3BhZF9hY3RpdmF0ZV9wdWxsKCkgdG8gcGVyZm9ybQorICogdGhlIGFjdHVhbCBhY3RpdmF0aW9uLiBPbmx5IG1ha2VzIHNlbnNlIHRvIHNldCBvbiBzaW5rIHBhZHMuCisgKgorICogQ2FsbCB0aGlzIGZ1bmN0aW9uIGlmIHlvdXIgc2luayBwYWQgY2FuIHN0YXJ0IGEgcHVsbC1iYXNlZCB0YXNrLgorICovCit2b2lkCitnc3RfcGFkX3NldF9hY3RpdmF0ZV9mdW5jdGlvbiAoR3N0UGFkICogcGFkLCBHc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uIGFjdGl2YXRlKQoreworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpKTsKKworICBHU1RfUEFEX0FDVElWQVRFRlVOQyAocGFkKSA9IGFjdGl2YXRlOworICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9QQURTLCBwYWQsICJhY3RpdmF0ZWZ1bmMgc2V0IHRvICVzIiwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSX05BTUUgKGFjdGl2YXRlKSk7Cit9CisKKy8qKgorICogZ3N0X3BhZF9zZXRfYWN0aXZhdGVwdWxsX2Z1bmN0aW9uOgorICogQHBhZDogYSAjR3N0UGFkLgorICogQGFjdGl2YXRlcHVsbDogdGhlICNHc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbiB0byBzZXQuCisgKgorICogU2V0cyB0aGUgZ2l2ZW4gYWN0aXZhdGVfcHVsbCBmdW5jdGlvbiBmb3IgdGhlIHBhZC4gQW4gYWN0aXZhdGVfcHVsbCBmdW5jdGlvbgorICogcHJlcGFyZXMgdGhlIGVsZW1lbnQgYW5kIGFueSB1cHN0cmVhbSBjb25uZWN0aW9ucyBmb3IgcHVsbGluZy4gU2VlIFhYWAorICogcGFydC1hY3RpdmF0aW9uLnR4dCBmb3IgZGV0YWlscy4KKyAqLwordm9pZAorZ3N0X3BhZF9zZXRfYWN0aXZhdGVwdWxsX2Z1bmN0aW9uIChHc3RQYWQgKiBwYWQsCisgICAgR3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb24gYWN0aXZhdGVwdWxsKQoreworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpKTsKKworICBHU1RfUEFEX0FDVElWQVRFUFVMTEZVTkMgKHBhZCkgPSBhY3RpdmF0ZXB1bGw7CisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1BBRFMsIHBhZCwgImFjdGl2YXRlcHVsbGZ1bmMgc2V0IHRvICVzIiwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSX05BTUUgKGFjdGl2YXRlcHVsbCkpOworfQorCisvKioKKyAqIGdzdF9wYWRfc2V0X2FjdGl2YXRlcHVzaF9mdW5jdGlvbjoKKyAqIEBwYWQ6IGEgI0dzdFBhZC4KKyAqIEBhY3RpdmF0ZXB1c2g6IHRoZSAjR3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb24gdG8gc2V0LgorICoKKyAqIFNldHMgdGhlIGdpdmVuIGFjdGl2YXRlX3B1c2ggZnVuY3Rpb24gZm9yIHRoZSBwYWQuIEFuIGFjdGl2YXRlX3B1c2ggZnVuY3Rpb24KKyAqIHByZXBhcmVzIHRoZSBlbGVtZW50IGZvciBwdXNoaW5nLiBTZWUgWFhYIHBhcnQtYWN0aXZhdGlvbi50eHQgZm9yIGRldGFpbHMuCisgKi8KK3ZvaWQKK2dzdF9wYWRfc2V0X2FjdGl2YXRlcHVzaF9mdW5jdGlvbiAoR3N0UGFkICogcGFkLAorICAgIEdzdFBhZEFjdGl2YXRlTW9kZUZ1bmN0aW9uIGFjdGl2YXRlcHVzaCkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSk7CisKKyAgR1NUX1BBRF9BQ1RJVkFURVBVU0hGVU5DIChwYWQpID0gYWN0aXZhdGVwdXNoOworICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9QQURTLCBwYWQsICJhY3RpdmF0ZXB1c2hmdW5jIHNldCB0byAlcyIsCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUl9OQU1FIChhY3RpdmF0ZXB1c2gpKTsKK30KKworLyoqCisgKiBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbjoKKyAqIEBwYWQ6IGEgc2luayAjR3N0UGFkLgorICogQGNoYWluOiB0aGUgI0dzdFBhZENoYWluRnVuY3Rpb24gdG8gc2V0LgorICoKKyAqIFNldHMgdGhlIGdpdmVuIGNoYWluIGZ1bmN0aW9uIGZvciB0aGUgcGFkLiBUaGUgY2hhaW4gZnVuY3Rpb24gaXMgY2FsbGVkIHRvCisgKiBwcm9jZXNzIGEgI0dzdEJ1ZmZlciBpbnB1dCBidWZmZXIuIHNlZSAjR3N0UGFkQ2hhaW5GdW5jdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorICovCit2b2lkCitnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoR3N0UGFkICogcGFkLCBHc3RQYWRDaGFpbkZ1bmN0aW9uIGNoYWluKQoreworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1BBRF9JU19TSU5LIChwYWQpKTsKKworICBHU1RfUEFEX0NIQUlORlVOQyAocGFkKSA9IGNoYWluOworICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9QQURTLCBwYWQsICJjaGFpbmZ1bmMgc2V0IHRvICVzIiwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSX05BTUUgKGNoYWluKSk7Cit9CisKKy8qKgorICogZ3N0X3BhZF9zZXRfY2hhaW5fbGlzdF9mdW5jdGlvbjoKKyAqIEBwYWQ6IGEgc2luayAjR3N0UGFkLgorICogQGNoYWlubGlzdDogdGhlICNHc3RQYWRDaGFpbkxpc3RGdW5jdGlvbiB0byBzZXQuCisgKgorICogU2V0cyB0aGUgZ2l2ZW4gY2hhaW4gbGlzdCBmdW5jdGlvbiBmb3IgdGhlIHBhZC4gVGhlIGNoYWlubGlzdCBmdW5jdGlvbiBpcworICogY2FsbGVkIHRvIHByb2Nlc3MgYSAjR3N0QnVmZmVyTGlzdCBpbnB1dCBidWZmZXIgbGlzdC4gU2VlCisgKiAjR3N0UGFkQ2hhaW5MaXN0RnVuY3Rpb24gZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICovCit2b2lkCitnc3RfcGFkX3NldF9jaGFpbl9saXN0X2Z1bmN0aW9uIChHc3RQYWQgKiBwYWQsCisgICAgR3N0UGFkQ2hhaW5MaXN0RnVuY3Rpb24gY2hhaW5saXN0KQoreworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1BBRF9JU19TSU5LIChwYWQpKTsKKworICBHU1RfUEFEX0NIQUlOTElTVEZVTkMgKHBhZCkgPSBjaGFpbmxpc3Q7CisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1BBRFMsIHBhZCwgImNoYWlubGlzdGZ1bmMgc2V0IHRvICVzIiwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSX05BTUUgKGNoYWlubGlzdCkpOworfQorCisvKioKKyAqIGdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uOgorICogQHBhZDogYSBzb3VyY2UgI0dzdFBhZC4KKyAqIEBnZXQ6IHRoZSAjR3N0UGFkR2V0UmFuZ2VGdW5jdGlvbiB0byBzZXQuCisgKgorICogU2V0cyB0aGUgZ2l2ZW4gZ2V0cmFuZ2UgZnVuY3Rpb24gZm9yIHRoZSBwYWQuIFRoZSBnZXRyYW5nZSBmdW5jdGlvbiBpcworICogY2FsbGVkIHRvIHByb2R1Y2UgYSBuZXcgI0dzdEJ1ZmZlciB0byBzdGFydCB0aGUgcHJvY2Vzc2luZyBwaXBlbGluZS4gc2VlCisgKiAjR3N0UGFkR2V0UmFuZ2VGdW5jdGlvbiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZ2V0cmFuZ2UgZnVuY3Rpb24uCisgKi8KK3ZvaWQKK2dzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uIChHc3RQYWQgKiBwYWQsIEdzdFBhZEdldFJhbmdlRnVuY3Rpb24gZ2V0KQoreworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1BBRF9JU19TUkMgKHBhZCkpOworCisgIEdTVF9QQURfR0VUUkFOR0VGVU5DIChwYWQpID0gZ2V0OworCisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1BBRFMsIHBhZCwgImdldHJhbmdlZnVuYyBzZXQgdG8gJXMiLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRSAoZ2V0KSk7Cit9CisKKy8qKgorICogZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb246CisgKiBAcGFkOiBhICNHc3RQYWQgb2YgZWl0aGVyIGRpcmVjdGlvbi4KKyAqIEBldmVudDogdGhlICNHc3RQYWRFdmVudEZ1bmN0aW9uIHRvIHNldC4KKyAqCisgKiBTZXRzIHRoZSBnaXZlbiBldmVudCBoYW5kbGVyIGZvciB0aGUgcGFkLgorICovCit2b2lkCitnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAoR3N0UGFkICogcGFkLCBHc3RQYWRFdmVudEZ1bmN0aW9uIGV2ZW50KQoreworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpKTsKKworICBHU1RfUEFEX0VWRU5URlVOQyAocGFkKSA9IGV2ZW50OworCisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1BBRFMsIHBhZCwgImV2ZW50ZnVuYyBmb3Igc2V0IHRvICVzIiwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSX05BTUUgKGV2ZW50KSk7Cit9CisKKy8qKgorICogZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb246CisgKiBAcGFkOiBhICNHc3RQYWQgb2YgZWl0aGVyIGRpcmVjdGlvbi4KKyAqIEBxdWVyeTogdGhlICNHc3RQYWRRdWVyeUZ1bmN0aW9uIHRvIHNldC4KKyAqCisgKiBTZXQgdGhlIGdpdmVuIHF1ZXJ5IGZ1bmN0aW9uIGZvciB0aGUgcGFkLgorICovCit2b2lkCitnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAoR3N0UGFkICogcGFkLCBHc3RQYWRRdWVyeUZ1bmN0aW9uIHF1ZXJ5KQoreworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpKTsKKworICBHU1RfUEFEX1FVRVJZRlVOQyAocGFkKSA9IHF1ZXJ5OworCisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1BBRFMsIHBhZCwgInF1ZXJ5ZnVuYyBzZXQgdG8gJXMiLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRSAocXVlcnkpKTsKK30KKworLyoqCisgKiBnc3RfcGFkX3NldF9xdWVyeV90eXBlX2Z1bmN0aW9uOgorICogQHBhZDogYSAjR3N0UGFkIG9mIGVpdGhlciBkaXJlY3Rpb24uCisgKiBAdHlwZV9mdW5jOiB0aGUgI0dzdFBhZFF1ZXJ5VHlwZUZ1bmN0aW9uIHRvIHNldC4KKyAqCisgKiBTZXQgdGhlIGdpdmVuIHF1ZXJ5IHR5cGUgZnVuY3Rpb24gZm9yIHRoZSBwYWQuCisgKi8KK3ZvaWQKK2dzdF9wYWRfc2V0X3F1ZXJ5X3R5cGVfZnVuY3Rpb24gKEdzdFBhZCAqIHBhZCwKKyAgICBHc3RQYWRRdWVyeVR5cGVGdW5jdGlvbiB0eXBlX2Z1bmMpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCkpOworCisgIEdTVF9QQURfUVVFUllUWVBFRlVOQyAocGFkKSA9IHR5cGVfZnVuYzsKKworICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9QQURTLCBwYWQsICJxdWVyeXR5cGVmdW5jIHNldCB0byAlcyIsCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUl9OQU1FICh0eXBlX2Z1bmMpKTsKK30KKworLyoqCisgKiBnc3RfcGFkX2dldF9xdWVyeV90eXBlczoKKyAqIEBwYWQ6IGEgI0dzdFBhZC4KKyAqCisgKiBHZXQgYW4gYXJyYXkgb2Ygc3VwcG9ydGVkIHF1ZXJpZXMgdGhhdCBjYW4gYmUgcGVyZm9ybWVkCisgKiBvbiB0aGlzIHBhZC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSkgKGFycmF5IHplcm8tdGVybWluYXRlZD0xKTogYSB6ZXJvLXRlcm1pbmF0ZWQgYXJyYXkKKyAqICAgICBvZiAjR3N0UXVlcnlUeXBlLgorICovCitjb25zdCBHc3RRdWVyeVR5cGUgKgorZ3N0X3BhZF9nZXRfcXVlcnlfdHlwZXMgKEdzdFBhZCAqIHBhZCkKK3sKKyAgR3N0UGFkUXVlcnlUeXBlRnVuY3Rpb24gZnVuYzsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgTlVMTCk7CisKKyAgaWYgKEdfVU5MSUtFTFkgKChmdW5jID0gR1NUX1BBRF9RVUVSWVRZUEVGVU5DIChwYWQpKSA9PSBOVUxMKSkKKyAgICBnb3RvIG5vX2Z1bmM7CisKKyAgcmV0dXJuIGZ1bmMgKHBhZCk7CisKK25vX2Z1bmM6CisgIHsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9wYWRfZ2V0X3F1ZXJ5X3R5cGVzX2Rpc3BhdGNoZXIgKEdzdFBhZCAqIHBhZCwgY29uc3QgR3N0UXVlcnlUeXBlICoqIGRhdGEpCit7CisgIEdzdFBhZCAqcGVlcjsKKworICBpZiAoKHBlZXIgPSBnc3RfcGFkX2dldF9wZWVyIChwYWQpKSkgeworICAgICpkYXRhID0gZ3N0X3BhZF9nZXRfcXVlcnlfdHlwZXMgKHBlZXIpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKHBlZXIpOworICB9CisgIHJldHVybiBUUlVFOworfQorCisvKioKKyAqIGdzdF9wYWRfZ2V0X3F1ZXJ5X3R5cGVzX2RlZmF1bHQ6CisgKiBAcGFkOiBhICNHc3RQYWQuCisgKgorICogSW52b2tlIHRoZSBkZWZhdWx0IHF1ZXJ5IHR5cGVzIGZ1bmN0aW9uIG9uIHRoZSBwYWQuIFRoaXMgZnVuY3Rpb24gd2lsbCBnZXQKKyAqIHRoZSBzdXBwb3J0ZWQgcXVlcnkgdHlwZSBmcm9tIHRoZSBwZWVyIG9mIGFuIGludGVybmFsbHkgbGlua2VkIHBhZCBvZiBAcGFkLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKSAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpOiBhIHplcm8tdGVybWluYXRlZCBhcnJheQorICogICAgIG9mICNHc3RRdWVyeVR5cGUsIG9yIE5VTEwgaWYgbm9uZSBvZiB0aGUgaW50ZXJuYWxseS1saW5rZWQgcGFkcyBoYXMgYQorICogICAgIHF1ZXJ5IHR5cGVzIGZ1bmN0aW9uLgorICovCitjb25zdCBHc3RRdWVyeVR5cGUgKgorZ3N0X3BhZF9nZXRfcXVlcnlfdHlwZXNfZGVmYXVsdCAoR3N0UGFkICogcGFkKQoreworICBHc3RRdWVyeVR5cGUgKnJlc3VsdCA9IE5VTEw7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIE5VTEwpOworCisgIGdzdF9wYWRfZm9yd2FyZCAocGFkLCAoR3N0UGFkRm9yd2FyZEZ1bmN0aW9uKQorICAgICAgZ3N0X3BhZF9nZXRfcXVlcnlfdHlwZXNfZGlzcGF0Y2hlciwgJnJlc3VsdCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBnc3RfcGFkX3NldF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2Z1bmN0aW9uOgorICogQHBhZDogYSAjR3N0UGFkIG9mIGVpdGhlciBkaXJlY3Rpb24uCisgKiBAaXRlcmludGxpbms6IHRoZSAjR3N0UGFkSXRlckludExpbmtGdW5jdGlvbiB0byBzZXQuCisgKgorICogU2V0cyB0aGUgZ2l2ZW4gaW50ZXJuYWwgbGluayBpdGVyYXRvciBmdW5jdGlvbiBmb3IgdGhlIHBhZC4KKyAqCisgKiBTaW5jZTogMC4xMC4yMQorICovCit2b2lkCitnc3RfcGFkX3NldF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2Z1bmN0aW9uIChHc3RQYWQgKiBwYWQsCisgICAgR3N0UGFkSXRlckludExpbmtGdW5jdGlvbiBpdGVyaW50bGluaykKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSk7CisKKyAgR1NUX1BBRF9JVEVSSU5UTElOS0ZVTkMgKHBhZCkgPSBpdGVyaW50bGluazsKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfUEFEUywgcGFkLCAiaW50ZXJuYWwgbGluayBpdGVyYXRvciBzZXQgdG8gJXMiLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRSAoaXRlcmludGxpbmspKTsKK30KKworLyoqCisgKiBnc3RfcGFkX3NldF9saW5rX2Z1bmN0aW9uOgorICogQHBhZDogYSAjR3N0UGFkLgorICogQGxpbms6IHRoZSAjR3N0UGFkTGlua0Z1bmN0aW9uIHRvIHNldC4KKyAqCisgKiBTZXRzIHRoZSBnaXZlbiBsaW5rIGZ1bmN0aW9uIGZvciB0aGUgcGFkLiBJdCB3aWxsIGJlIGNhbGxlZCB3aGVuCisgKiB0aGUgcGFkIGlzIGxpbmtlZCB3aXRoIGFub3RoZXIgcGFkLgorICoKKyAqIFRoZSByZXR1cm4gdmFsdWUgI0dTVF9QQURfTElOS19PSyBzaG91bGQgYmUgdXNlZCB3aGVuIHRoZSBjb25uZWN0aW9uIGNhbiBiZQorICogbWFkZS4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlICNHU1RfUEFEX0xJTktfUkVGVVNFRCBzaG91bGQgYmUgdXNlZCB3aGVuIHRoZSBjb25uZWN0aW9uCisgKiBjYW5ub3QgYmUgbWFkZSBmb3Igc29tZSByZWFzb24uCisgKgorICogSWYgQGxpbmsgaXMgaW5zdGFsbGVkIG9uIGEgc291cmNlIHBhZCwgaXQgc2hvdWxkIGNhbGwgdGhlICNHc3RQYWRMaW5rRnVuY3Rpb24KKyAqIG9mIHRoZSBwZWVyIHNpbmsgcGFkLCBpZiBwcmVzZW50LgorICovCit2b2lkCitnc3RfcGFkX3NldF9saW5rX2Z1bmN0aW9uIChHc3RQYWQgKiBwYWQsIEdzdFBhZExpbmtGdW5jdGlvbiBsaW5rKQoreworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpKTsKKworICBHU1RfUEFEX0xJTktGVU5DIChwYWQpID0gbGluazsKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfUEFEUywgcGFkLCAibGlua2Z1bmMgc2V0IHRvICVzIiwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSX05BTUUgKGxpbmspKTsKK30KKworLyoqCisgKiBnc3RfcGFkX3NldF91bmxpbmtfZnVuY3Rpb246CisgKiBAcGFkOiBhICNHc3RQYWQuCisgKiBAdW5saW5rOiB0aGUgI0dzdFBhZFVubGlua0Z1bmN0aW9uIHRvIHNldC4KKyAqCisgKiBTZXRzIHRoZSBnaXZlbiB1bmxpbmsgZnVuY3Rpb24gZm9yIHRoZSBwYWQuIEl0IHdpbGwgYmUgY2FsbGVkCisgKiB3aGVuIHRoZSBwYWQgaXMgdW5saW5rZWQuCisgKi8KK3ZvaWQKK2dzdF9wYWRfc2V0X3VubGlua19mdW5jdGlvbiAoR3N0UGFkICogcGFkLCBHc3RQYWRVbmxpbmtGdW5jdGlvbiB1bmxpbmspCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCkpOworCisgIEdTVF9QQURfVU5MSU5LRlVOQyAocGFkKSA9IHVubGluazsKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfUEFEUywgcGFkLCAidW5saW5rZnVuYyBzZXQgdG8gJXMiLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRSAodW5saW5rKSk7Cit9CisKKy8qKgorICogZ3N0X3BhZF9zZXRfZ2V0Y2Fwc19mdW5jdGlvbjoKKyAqIEBwYWQ6IGEgI0dzdFBhZC4KKyAqIEBnZXRjYXBzOiB0aGUgI0dzdFBhZEdldENhcHNGdW5jdGlvbiB0byBzZXQuCisgKgorICogU2V0cyB0aGUgZ2l2ZW4gZ2V0Y2FwcyBmdW5jdGlvbiBmb3IgdGhlIHBhZC4gQGdldGNhcHMgc2hvdWxkIHJldHVybiB0aGUKKyAqIGFsbG93YWJsZSBjYXBzIGZvciBhIHBhZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgZWxlbWVudCdzIHN0YXRlLCBpdHMgbGluayB0bworICogb3RoZXIgZWxlbWVudHMsIGFuZCB0aGUgZGV2aWNlcyBvciBmaWxlcyBpdCBoYXMgb3BlbmVkLiBUaGVzZSBjYXBzIG11c3QgYmUgYQorICogc3Vic2V0IG9mIHRoZSBwYWQgdGVtcGxhdGUgY2Fwcy4gSW4gdGhlIE5VTEwgc3RhdGUgd2l0aCBubyBsaW5rcywgQGdldGNhcHMKKyAqIHNob3VsZCBpZGVhbGx5IHJldHVybiB0aGUgc2FtZSBjYXBzIGFzIHRoZSBwYWQgdGVtcGxhdGUuIEluIHJhcmUKKyAqIGNpcmN1bXN0YW5jZXMsIGFuIG9iamVjdCBwcm9wZXJ0eSBjYW4gYWZmZWN0IHRoZSBjYXBzIHJldHVybmVkIGJ5IEBnZXRjYXBzLAorICogYnV0IHRoaXMgaXMgZGlzY291cmFnZWQuCisgKgorICogWW91IGRvIG5vdCBuZWVkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBpZiBAcGFkJ3MgYWxsb3dlZCBjYXBzIGFyZSBhbHdheXMgdGhlCisgKiBzYW1lIGFzIHRoZSBwYWQgdGVtcGxhdGUgY2Fwcy4gVGhpcyBjYW4gb25seSBiZSB0cnVlIGlmIHRoZSBwYWR0ZW1wbGF0ZQorICogaGFzIGZpeGVkIHNpbXBsZSBjYXBzLgorICoKKyAqIEZvciBtb3N0IGZpbHRlcnMsIHRoZSBjYXBzIHJldHVybmVkIGJ5IEBnZXRjYXBzIGlzIGRpcmVjdGx5IGFmZmVjdGVkIGJ5IHRoZQorICogYWxsb3dlZCBjYXBzIG9uIG90aGVyIHBhZHMuIEZvciBkZW11eGVycyBhbmQgZGVjb2RlcnMsIHRoZSBjYXBzIHJldHVybmVkIGJ5CisgKiB0aGUgc3JjcGFkJ3MgZ2V0Y2FwcyBmdW5jdGlvbiBpcyBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBzdHJlYW0gZGF0YS4gQWdhaW4sCisgKiBAZ2V0Y2FwcyBzaG91bGQgcmV0dXJuIHRoZSBtb3N0IHNwZWNpZmljIGNhcHMgaXQgcmVhc29uYWJseSBjYW4sIHNpbmNlIHRoaXMKKyAqIGhlbHBzIHdpdGggYXV0b3BsdWdnaW5nLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgcmV0dXJuIHZhbHVlIGZyb20gQGdldGNhcHMgaXMgb3duZWQgYnkgdGhlIGNhbGxlciwgc28gdGhlCisgKiBjYWxsZXIgc2hvdWxkIHVucmVmIHRoZSBjYXBzIGFmdGVyIHVzYWdlLgorICovCit2b2lkCitnc3RfcGFkX3NldF9nZXRjYXBzX2Z1bmN0aW9uIChHc3RQYWQgKiBwYWQsIEdzdFBhZEdldENhcHNGdW5jdGlvbiBnZXRjYXBzKQoreworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpKTsKKworICBHU1RfUEFEX0dFVENBUFNGVU5DIChwYWQpID0gZ2V0Y2FwczsKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfUEFEUywgcGFkLCAiZ2V0Y2Fwc2Z1bmMgc2V0IHRvICVzIiwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSX05BTUUgKGdldGNhcHMpKTsKK30KKworLyoqCisgKiBnc3RfcGFkX3NldF9hY2NlcHRjYXBzX2Z1bmN0aW9uOgorICogQHBhZDogYSAjR3N0UGFkLgorICogQGFjY2VwdGNhcHM6IHRoZSAjR3N0UGFkQWNjZXB0Q2Fwc0Z1bmN0aW9uIHRvIHNldC4KKyAqCisgKiBTZXRzIHRoZSBnaXZlbiBhY2NlcHRjYXBzIGZ1bmN0aW9uIGZvciB0aGUgcGFkLiAgVGhlIGFjY2VwdGNhcHMgZnVuY3Rpb24KKyAqIHdpbGwgYmUgY2FsbGVkIHRvIGNoZWNrIGlmIHRoZSBwYWQgY2FuIGFjY2VwdCB0aGUgZ2l2ZW4gY2Fwcy4gU2V0dGluZyB0aGUKKyAqIGFjY2VwdGNhcHMgZnVuY3Rpb24gdG8gTlVMTCByZXN0b3JlcyB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgb2YgYWxsb3dpbmcKKyAqIGFueSBjYXBzIHRoYXQgbWF0Y2hlcyB0aGUgY2FwcyBmcm9tIGdzdF9wYWRfZ2V0X2NhcHMoKS4KKyAqLwordm9pZAorZ3N0X3BhZF9zZXRfYWNjZXB0Y2Fwc19mdW5jdGlvbiAoR3N0UGFkICogcGFkLAorICAgIEdzdFBhZEFjY2VwdENhcHNGdW5jdGlvbiBhY2NlcHRjYXBzKQoreworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpKTsKKworICBHU1RfUEFEX0FDQ0VQVENBUFNGVU5DIChwYWQpID0gYWNjZXB0Y2FwczsKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfUEFEUywgcGFkLCAiYWNjZXB0Y2Fwc2Z1bmMgc2V0IHRvICVzIiwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSX05BTUUgKGFjY2VwdGNhcHMpKTsKK30KKworLyoqCisgKiBnc3RfcGFkX3NldF9maXhhdGVjYXBzX2Z1bmN0aW9uOgorICogQHBhZDogYSAjR3N0UGFkLgorICogQGZpeGF0ZWNhcHM6IHRoZSAjR3N0UGFkRml4YXRlQ2Fwc0Z1bmN0aW9uIHRvIHNldC4KKyAqCisgKiBTZXRzIHRoZSBnaXZlbiBmaXhhdGVjYXBzIGZ1bmN0aW9uIGZvciB0aGUgcGFkLiAgVGhlIGZpeGF0ZWNhcHMgZnVuY3Rpb24KKyAqIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgYSBHc3RDYXBzIG5lZWRzIHRvIGJlCisgKiBmaWxsZWQgaW4uCisgKi8KK3ZvaWQKK2dzdF9wYWRfc2V0X2ZpeGF0ZWNhcHNfZnVuY3Rpb24gKEdzdFBhZCAqIHBhZCwKKyAgICBHc3RQYWRGaXhhdGVDYXBzRnVuY3Rpb24gZml4YXRlY2FwcykKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSk7CisKKyAgR1NUX1BBRF9GSVhBVEVDQVBTRlVOQyAocGFkKSA9IGZpeGF0ZWNhcHM7CisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1BBRFMsIHBhZCwgImZpeGF0ZWNhcHNmdW5jIHNldCB0byAlcyIsCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUl9OQU1FIChmaXhhdGVjYXBzKSk7Cit9CisKKy8qKgorICogZ3N0X3BhZF91bmxpbms6CisgKiBAc3JjcGFkOiB0aGUgc291cmNlICNHc3RQYWQgdG8gdW5saW5rLgorICogQHNpbmtwYWQ6IHRoZSBzaW5rICNHc3RQYWQgdG8gdW5saW5rLgorICoKKyAqIFVubGlua3MgdGhlIHNvdXJjZSBwYWQgZnJvbSB0aGUgc2luayBwYWQuIFdpbGwgZW1pdCB0aGUgI0dzdFBhZDo6dW5saW5rZWQKKyAqIHNpZ25hbCBvbiBib3RoIHBhZHMuCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgcGFkcyB3ZXJlIHVubGlua2VkLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgRkFMU0UgaWYKKyAqIHRoZSBwYWRzIHdlcmUgbm90IGxpbmtlZCB0b2dldGhlci4KKyAqCisgKiBNVCBzYWZlLgorICovCitnYm9vbGVhbgorZ3N0X3BhZF91bmxpbmsgKEdzdFBhZCAqIHNyY3BhZCwgR3N0UGFkICogc2lua3BhZCkKK3sKKyAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisgIEdzdEVsZW1lbnQgKnBhcmVudCA9IE5VTEw7CisgIGdpbnQgaTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAoc3JjcGFkKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1BBRF9JU19TUkMgKHNyY3BhZCksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHNpbmtwYWQpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfUEFEX0lTX1NJTksgKHNpbmtwYWQpLCBGQUxTRSk7CisKKyAgR1NUX0NBVF9JTkZPIChHU1RfQ0FUX0VMRU1FTlRfUEFEUywgInVubGlua2luZyAlczolcyglcCkgYW5kICVzOiVzKCVwKSIsCisgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHNyY3BhZCksIHNyY3BhZCwKKyAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAoc2lua3BhZCksIHNpbmtwYWQpOworCisgIC8qIFdlIG5lZWQgdG8gbm90aWZ5IHRoZSBwYXJlbnQgYmVmb3JlIHRha2luZyBhbnkgcGFkIGxvY2tzIGFzIHRoZSBiaW4gaW4KKyAgICogcXVlc3Rpb24gbWlnaHQgYmUgd2FpdGluZyBmb3IgYSBsb2NrIG9uIHRoZSBwYWQgd2hpbGUgaG9sZGluZyBpdHMgbG9jaworICAgKiB0aGF0IG91ciBtZXNzYWdlIHdpbGwgdHJ5IHRvIHRha2UuICovCisgIGlmICgocGFyZW50ID0gR1NUX0VMRU1FTlRfQ0FTVCAoZ3N0X3BhZF9nZXRfcGFyZW50IChzcmNwYWQpKSkpIHsKKyAgICBpZiAoR1NUX0lTX0VMRU1FTlQgKHBhcmVudCkpIHsKKyAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAocGFyZW50LAorICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19zdHJ1Y3R1cmVfY2hhbmdlIChHU1RfT0JKRUNUX0NBU1QgKHNpbmtwYWQpLAorICAgICAgICAgICAgICBHU1RfU1RSVUNUVVJFX0NIQU5HRV9UWVBFX1BBRF9VTkxJTkssIHBhcmVudCwgVFJVRSkpOworICAgIH0gZWxzZSB7CisgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwYXJlbnQpOworICAgICAgcGFyZW50ID0gTlVMTDsKKyAgICB9CisgIH0KKworICBHU1RfT0JKRUNUX0xPQ0sgKHNyY3BhZCk7CisgIEdTVF9PQkpFQ1RfTE9DSyAoc2lua3BhZCk7CisKKyAgaWYgKEdfVU5MSUtFTFkgKEdTVF9QQURfUEVFUiAoc3JjcGFkKSAhPSBzaW5rcGFkKSkKKyAgICBnb3RvIG5vdF9saW5rZWRfdG9nZXRoZXI7CisKKyAgaWYgKEdTVF9QQURfVU5MSU5LRlVOQyAoc3JjcGFkKSkgeworICAgIEdTVF9QQURfVU5MSU5LRlVOQyAoc3JjcGFkKSAoc3JjcGFkKTsKKyAgfQorICBpZiAoR1NUX1BBRF9VTkxJTktGVU5DIChzaW5rcGFkKSkgeworICAgIEdTVF9QQURfVU5MSU5LRlVOQyAoc2lua3BhZCkgKHNpbmtwYWQpOworICB9CisKKyAgLyogZmlyc3QgY2xlYXIgcGVlcnMgKi8KKyAgR1NUX1BBRF9QRUVSIChzcmNwYWQpID0gTlVMTDsKKyAgR1NUX1BBRF9QRUVSIChzaW5rcGFkKSA9IE5VTEw7CisKKyAgLyogY2xlYXIgcGVuZGluZyBjYXBzIGlmIGFueSAqLworICBmb3IgKGkgPSAwOyBpIDwgR1NUX0VWRU5UX01BWF9TVElDS1k7IGkrKykKKyAgICBnc3RfZXZlbnRfcmVwbGFjZSAoJnNpbmtwYWQtPnByaXYtPmV2ZW50c1tpXS5wZW5kaW5nLCBOVUxMKTsKKworICBHU1RfT0JKRUNUX1VOTE9DSyAoc2lua3BhZCk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmNwYWQpOworCisgIC8qIGZpcmUgb2ZmIGEgc2lnbmFsIHRvIGVhY2ggb2YgdGhlIHBhZHMgdGVsbGluZyB0aGVtCisgICAqIHRoYXQgdGhleSd2ZSBiZWVuIHVubGlua2VkICovCisgIGdfc2lnbmFsX2VtaXQgKHNyY3BhZCwgZ3N0X3BhZF9zaWduYWxzW1BBRF9VTkxJTktFRF0sIDAsIHNpbmtwYWQpOworICBnX3NpZ25hbF9lbWl0IChzaW5rcGFkLCBnc3RfcGFkX3NpZ25hbHNbUEFEX1VOTElOS0VEXSwgMCwgc3JjcGFkKTsKKworICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfRUxFTUVOVF9QQURTLCAidW5saW5rZWQgJXM6JXMgYW5kICVzOiVzIiwKKyAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAoc3JjcGFkKSwgR1NUX0RFQlVHX1BBRF9OQU1FIChzaW5rcGFkKSk7CisKKyAgcmVzdWx0ID0gVFJVRTsKKworZG9uZToKKyAgaWYgKHBhcmVudCAhPSBOVUxMKSB7CisgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChwYXJlbnQsCisgICAgICAgIGdzdF9tZXNzYWdlX25ld19zdHJ1Y3R1cmVfY2hhbmdlIChHU1RfT0JKRUNUX0NBU1QgKHNpbmtwYWQpLAorICAgICAgICAgICAgR1NUX1NUUlVDVFVSRV9DSEFOR0VfVFlQRV9QQURfVU5MSU5LLCBwYXJlbnQsIEZBTFNFKSk7CisgICAgZ3N0X29iamVjdF91bnJlZiAocGFyZW50KTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworCisgIC8qIEVSUk9SUyAqLworbm90X2xpbmtlZF90b2dldGhlcjoKKyAgeworICAgIC8qIHdlIGRvIG5vdCBlbWl0IGEgd2FybmluZyBpbiB0aGlzIGNhc2UgYmVjYXVzZSB1bmxpbmtpbmcgY2Fubm90CisgICAgICogYmUgbWFkZSBNVCBzYWZlLiovCisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmtwYWQpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmNwYWQpOworICAgIGdvdG8gZG9uZTsKKyAgfQorfQorCisvKioKKyAqIGdzdF9wYWRfaXNfbGlua2VkOgorICogQHBhZDogcGFkIHRvIGNoZWNrCisgKgorICogQ2hlY2tzIGlmIGEgQHBhZCBpcyBsaW5rZWQgdG8gYW5vdGhlciBwYWQgb3Igbm90LgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIHBhZCBpcyBsaW5rZWQsIEZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBNVCBzYWZlLgorICovCitnYm9vbGVhbgorZ3N0X3BhZF9pc19saW5rZWQgKEdzdFBhZCAqIHBhZCkKK3sKKyAgZ2Jvb2xlYW4gcmVzdWx0OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChwYWQpOworICByZXN1bHQgPSAoR1NUX1BBRF9QRUVSIChwYWQpICE9IE5VTEwpOworICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBnZXQgdGhlIGNhcHMgZnJvbSBib3RoIHBhZHMgYW5kIHNlZSBpZiB0aGUgaW50ZXJzZWN0aW9uCisgKiBpcyBub3QgZW1wdHkuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIHBhZCBMT0NLIG9uIGJvdGgKKyAqIHBhZHMKKyAqLworc3RhdGljIGdib29sZWFuCitnc3RfcGFkX2xpbmtfY2hlY2tfY29tcGF0aWJsZV91bmxvY2tlZCAoR3N0UGFkICogc3JjLCBHc3RQYWQgKiBzaW5rLAorICAgIEdzdFBhZExpbmtDaGVjayBmbGFncykKK3sKKyAgR3N0Q2FwcyAqc3JjY2FwcyA9IE5VTEw7CisgIEdzdENhcHMgKnNpbmtjYXBzID0gTlVMTDsKKyAgZ2Jvb2xlYW4gY29tcGF0aWJsZSA9IEZBTFNFOworCisgIGlmICghKGZsYWdzICYgKEdTVF9QQURfTElOS19DSEVDS19DQVBTIHwgR1NUX1BBRF9MSU5LX0NIRUNLX1RFTVBMQVRFX0NBUFMpKSkKKyAgICByZXR1cm4gVFJVRTsKKworICAvKiBEb2luZyB0aGUgZXhwZW5zaXZlIGNhcHMgY2hlY2tpbmcgdGFrZXMgcHJpb3JpdHkgb3ZlciBvbmx5IGNoZWNraW5nIHRoZSB0ZW1wbGF0ZSBjYXBzICovCisgIGlmIChmbGFncyAmIEdTVF9QQURfTElOS19DSEVDS19DQVBTKSB7CisgICAgc3JjY2FwcyA9IGdzdF9wYWRfZ2V0X2NhcHNfdW5sb2NrZWQgKHNyYywgTlVMTCk7CisgICAgc2lua2NhcHMgPSBnc3RfcGFkX2dldF9jYXBzX3VubG9ja2VkIChzaW5rLCBOVUxMKTsKKyAgfSBlbHNlIHsKKyAgICAvKiBJZiBvbmUgb2YgdGhlIHR3byBwYWRzIGRvZXNuJ3QgaGF2ZSBhIHRlbXBsYXRlLCBjb25zaWRlciB0aGUgaW50ZXJzZWN0aW9uCisgICAgICogYXMgdmFsaWQuKi8KKyAgICBpZiAoR19VTkxJS0VMWSAoKEdTVF9QQURfUEFEX1RFTVBMQVRFIChzcmMpID09IE5VTEwpCisgICAgICAgICAgICB8fCAoR1NUX1BBRF9QQURfVEVNUExBVEUgKHNpbmspID09IE5VTEwpKSkgeworICAgICAgY29tcGF0aWJsZSA9IFRSVUU7CisgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIHNyY2NhcHMgPSBnc3RfY2Fwc19yZWYgKEdTVF9QQURfVEVNUExBVEVfQ0FQUyAoR1NUX1BBRF9QQURfVEVNUExBVEUgKHNyYykpKTsKKyAgICBzaW5rY2FwcyA9CisgICAgICAgIGdzdF9jYXBzX3JlZiAoR1NUX1BBRF9URU1QTEFURV9DQVBTIChHU1RfUEFEX1BBRF9URU1QTEFURSAoc2luaykpKTsKKyAgfQorCisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NBUFMsIHNyYywgInNyYyBjYXBzICUiIEdTVF9QVFJfRk9STUFULAorICAgICAgc3JjY2Fwcyk7CisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NBUFMsIHNpbmssICJzaW5rIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsCisgICAgICBzaW5rY2Fwcyk7CisKKyAgLyogaWYgd2UgaGF2ZSBjYXBzIG9uIGJvdGggcGFkcyB3ZSBjYW4gY2hlY2sgdGhlIGludGVyc2VjdGlvbi4gSWYgb25lCisgICAqIG9mIHRoZSBjYXBzIGlzIE5VTEwsIHdlIHJldHVybiBUUlVFLiAqLworICBpZiAoR19VTkxJS0VMWSAoc3JjY2FwcyA9PSBOVUxMIHx8IHNpbmtjYXBzID09IE5VTEwpKSB7CisgICAgaWYgKHNyY2NhcHMpCisgICAgICBnc3RfY2Fwc191bnJlZiAoc3JjY2Fwcyk7CisgICAgaWYgKHNpbmtjYXBzKQorICAgICAgZ3N0X2NhcHNfdW5yZWYgKHNpbmtjYXBzKTsKKyAgICBnb3RvIGRvbmU7CisgIH0KKworICBjb21wYXRpYmxlID0gZ3N0X2NhcHNfY2FuX2ludGVyc2VjdCAoc3JjY2Fwcywgc2lua2NhcHMpOworICBnc3RfY2Fwc191bnJlZiAoc3JjY2Fwcyk7CisgIGdzdF9jYXBzX3VucmVmIChzaW5rY2Fwcyk7CisKK2RvbmU6CisgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0FQUywgImNhcHMgYXJlICVzY29tcGF0aWJsZSIsCisgICAgICAoY29tcGF0aWJsZSA/ICIiIDogIm5vdCIpKTsKKworICByZXR1cm4gY29tcGF0aWJsZTsKK30KKworLyogY2hlY2sgaWYgdGhlIGdyYW5kcGFyZW50cyBvZiBib3RoIHBhZHMgYXJlIHRoZSBzYW1lLgorICogVGhpcyBjaGVjayBpcyByZXF1aXJlZCBzbyB0aGF0IHdlIGRvbid0IHRyeSB0byBsaW5rCisgKiBwYWRzIGZyb20gZWxlbWVudHMgaW4gZGlmZmVyZW50IGJpbnMgd2l0aG91dCBnaG9zdHBhZHMuCisgKgorICogVGhlIExPQ0sgc2hvdWxkIGJlIGhlbGQgb24gYm90aCBwYWRzCisgKi8KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3BhZF9saW5rX2NoZWNrX2hpZXJhcmNoeSAoR3N0UGFkICogc3JjLCBHc3RQYWQgKiBzaW5rKQoreworICBHc3RPYmplY3QgKnBzcmMsICpwc2luazsKKworICBwc3JjID0gR1NUX09CSkVDVF9QQVJFTlQgKHNyYyk7CisgIHBzaW5rID0gR1NUX09CSkVDVF9QQVJFTlQgKHNpbmspOworCisgIC8qIGlmIG9uZSBvZiB0aGUgcGFkcyBoYXMgbm8gcGFyZW50LCB3ZSBhbGxvdyB0aGUgbGluayAqLworICBpZiAoR19VTkxJS0VMWSAocHNyYyA9PSBOVUxMIHx8IHBzaW5rID09IE5VTEwpKQorICAgIGdvdG8gbm9fcGFyZW50OworCisgIC8qIG9ubHkgY2FyZSBhYm91dCBwYXJlbnRzIHRoYXQgYXJlIGVsZW1lbnRzICovCisgIGlmIChHX1VOTElLRUxZICghR1NUX0lTX0VMRU1FTlQgKHBzcmMpIHx8ICFHU1RfSVNfRUxFTUVOVCAocHNpbmspKSkKKyAgICBnb3RvIG5vX2VsZW1lbnRfcGFyZW50OworCisgIC8qIGlmIHRoZSBwYXJlbnRzIGFyZSB0aGUgc2FtZSwgd2UgaGF2ZSBhIGxvb3AgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKHBzcmMgPT0gcHNpbmspKQorICAgIGdvdG8gc2FtZV9wYXJlbnRzOworCisgIC8qIGlmIHRoZXkgYm90aCBoYXZlIGEgcGFyZW50LCB3ZSBjaGVjayB0aGUgZ3JhbmRwYXJlbnRzLiBXZSBjYW4gbm90IGxvY2sKKyAgICogdGhlIHBhcmVudCBiZWNhdXNlIHdlIGhvbGQgb24gdGhlIGNoaWxkIChwYWQpIGFuZCB0aGUgbG9ja2luZyBvcmRlciBpcworICAgKiBwYXJlbnQgPj4gY2hpbGQuICovCisgIHBzcmMgPSBHU1RfT0JKRUNUX1BBUkVOVCAocHNyYyk7CisgIHBzaW5rID0gR1NUX09CSkVDVF9QQVJFTlQgKHBzaW5rKTsKKworICAvKiBpZiB0aGV5IGhhdmUgZ3JhbmRwYXJlbnRzIGJ1dCB0aGV5IGFyZSBub3QgdGhlIHNhbWUgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKHBzcmMgIT0gcHNpbmspKQorICAgIGdvdG8gd3JvbmdfZ3JhbmRwYXJlbnRzOworCisgIHJldHVybiBUUlVFOworCisgIC8qIEVSUk9SUyAqLworbm9fcGFyZW50OgorICB7CisgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DQVBTLAorICAgICAgICAib25lIG9mIHRoZSBwYWRzIGhhcyBubyBwYXJlbnQgJSIgR1NUX1BUUl9GT1JNQVQgIiBhbmQgJSIKKyAgICAgICAgR1NUX1BUUl9GT1JNQVQsIHBzcmMsIHBzaW5rKTsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorbm9fZWxlbWVudF9wYXJlbnQ6CisgIHsKKyAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NBUFMsCisgICAgICAgICJvbmUgb2YgdGhlIHBhZHMgaGFzIG5vIGVsZW1lbnQgcGFyZW50ICUiIEdTVF9QVFJfRk9STUFUICIgYW5kICUiCisgICAgICAgIEdTVF9QVFJfRk9STUFULCBwc3JjLCBwc2luayk7CisgICAgcmV0dXJuIFRSVUU7CisgIH0KK3NhbWVfcGFyZW50czoKKyAgeworICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0FQUywgInBhZHMgaGF2ZSBzYW1lIHBhcmVudCAlIiBHU1RfUFRSX0ZPUk1BVCwKKyAgICAgICAgcHNyYyk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit3cm9uZ19ncmFuZHBhcmVudHM6CisgIHsKKyAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NBUFMsCisgICAgICAgICJwYWRzIGhhdmUgZGlmZmVyZW50IGdyYW5kcGFyZW50cyAlIiBHU1RfUFRSX0ZPUk1BVCAiIGFuZCAlIgorICAgICAgICBHU1RfUFRSX0ZPUk1BVCwgcHNyYywgcHNpbmspOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCisvKiBGSVhNRSBsZWZ0b3ZlciBmcm9tIGFuIGF0dGVtcHQgYXQgcmVmYWN0b3JpbmcuLi4gKi8KKy8qIGNhbGwgd2l0aCB0aGUgdHdvIHBhZHMgdW5sb2NrZWQsIHdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIEdTVF9QQURfTElOS19PSywKKyAqIHRoZSB0d28gcGFkcyB3aWxsIGJlIGxvY2tlZCBpbiB0aGUgc3JjcGFkLCBzaW5rcGFkIG9yZGVyLiAqLworc3RhdGljIEdzdFBhZExpbmtSZXR1cm4KK2dzdF9wYWRfbGlua19wcmVwYXJlIChHc3RQYWQgKiBzcmNwYWQsIEdzdFBhZCAqIHNpbmtwYWQsIEdzdFBhZExpbmtDaGVjayBmbGFncykKK3sKKyAgR1NUX0NBVF9JTkZPIChHU1RfQ0FUX1BBRFMsICJ0cnlpbmcgdG8gbGluayAlczolcyBhbmQgJXM6JXMiLAorICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChzcmNwYWQpLCBHU1RfREVCVUdfUEFEX05BTUUgKHNpbmtwYWQpKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHNyY3BhZCk7CisKKyAgaWYgKEdfVU5MSUtFTFkgKEdTVF9QQURfUEVFUiAoc3JjcGFkKSAhPSBOVUxMKSkKKyAgICBnb3RvIHNyY193YXNfbGlua2VkOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoc2lua3BhZCk7CisKKyAgaWYgKEdfVU5MSUtFTFkgKEdTVF9QQURfUEVFUiAoc2lua3BhZCkgIT0gTlVMTCkpCisgICAgZ290byBzaW5rX3dhc19saW5rZWQ7CisKKyAgLyogY2hlY2sgaGllcmFyY2h5LCBwYWRzIGNhbiBvbmx5IGJlIGxpbmtlZCBpZiB0aGUgZ3JhbmRwYXJlbnRzCisgICAqIGFyZSB0aGUgc2FtZS4gKi8KKyAgaWYgKChmbGFncyAmIEdTVF9QQURfTElOS19DSEVDS19ISUVSQVJDSFkpCisgICAgICAmJiAhZ3N0X3BhZF9saW5rX2NoZWNrX2hpZXJhcmNoeSAoc3JjcGFkLCBzaW5rcGFkKSkKKyAgICBnb3RvIHdyb25nX2hpZXJhcmNoeTsKKworICAvKiBjaGVjayBwYWQgY2FwcyBmb3Igbm9uLWVtcHR5IGludGVyc2VjdGlvbiAqLworICBpZiAoIWdzdF9wYWRfbGlua19jaGVja19jb21wYXRpYmxlX3VubG9ja2VkIChzcmNwYWQsIHNpbmtwYWQsIGZsYWdzKSkKKyAgICBnb3RvIG5vX2Zvcm1hdDsKKworICAvKiBGSVhNRSBjaGVjayBwYWQgc2NoZWR1bGluZyBmb3Igbm9uLWVtcHR5IGludGVyc2VjdGlvbiAqLworCisgIHJldHVybiBHU1RfUEFEX0xJTktfT0s7CisKK3NyY193YXNfbGlua2VkOgorICB7CisgICAgR1NUX0NBVF9JTkZPIChHU1RfQ0FUX1BBRFMsICJzcmMgJXM6JXMgd2FzIGFscmVhZHkgbGlua2VkIHRvICVzOiVzIiwKKyAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChzcmNwYWQpLAorICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKEdTVF9QQURfUEVFUiAoc3JjcGFkKSkpOworICAgIC8qIHdlIGRvIG5vdCBlbWl0IGEgd2FybmluZyBpbiB0aGlzIGNhc2UgYmVjYXVzZSB1bmxpbmtpbmcgY2Fubm90CisgICAgICogYmUgbWFkZSBNVCBzYWZlLiovCisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyY3BhZCk7CisgICAgcmV0dXJuIEdTVF9QQURfTElOS19XQVNfTElOS0VEOworICB9CitzaW5rX3dhc19saW5rZWQ6CisgIHsKKyAgICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfUEFEUywgInNpbmsgJXM6JXMgd2FzIGFscmVhZHkgbGlua2VkIHRvICVzOiVzIiwKKyAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChzaW5rcGFkKSwKKyAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChHU1RfUEFEX1BFRVIgKHNpbmtwYWQpKSk7CisgICAgLyogd2UgZG8gbm90IGVtaXQgYSB3YXJuaW5nIGluIHRoaXMgY2FzZSBiZWNhdXNlIHVubGlua2luZyBjYW5ub3QKKyAgICAgKiBiZSBtYWRlIE1UIHNhZmUuKi8KKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc2lua3BhZCk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyY3BhZCk7CisgICAgcmV0dXJuIEdTVF9QQURfTElOS19XQVNfTElOS0VEOworICB9Cit3cm9uZ19oaWVyYXJjaHk6CisgIHsKKyAgICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfUEFEUywgInBhZHMgaGF2ZSB3cm9uZyBoaWVyYXJjaHkiKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc2lua3BhZCk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyY3BhZCk7CisgICAgcmV0dXJuIEdTVF9QQURfTElOS19XUk9OR19ISUVSQVJDSFk7CisgIH0KK25vX2Zvcm1hdDoKKyAgeworICAgIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9QQURTLCAiY2FwcyBhcmUgaW5jb21wYXRpYmxlIik7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmtwYWQpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmNwYWQpOworICAgIHJldHVybiBHU1RfUEFEX0xJTktfTk9GT1JNQVQ7CisgIH0KK30KKworLyoqCisgKiBnc3RfcGFkX2Nhbl9saW5rOgorICogQHNyY3BhZDogdGhlIHNvdXJjZSAjR3N0UGFkLgorICogQHNpbmtwYWQ6IHRoZSBzaW5rICNHc3RQYWQuCisgKgorICogQ2hlY2tzIGlmIHRoZSBzb3VyY2UgcGFkIGFuZCB0aGUgc2luayBwYWQgYXJlIGNvbXBhdGlibGUgc28gdGhleSBjYW4gYmUKKyAqIGxpbmtlZC4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBwYWRzIGNhbiBiZSBsaW5rZWQuCisgKi8KK2dib29sZWFuCitnc3RfcGFkX2Nhbl9saW5rIChHc3RQYWQgKiBzcmNwYWQsIEdzdFBhZCAqIHNpbmtwYWQpCit7CisgIEdzdFBhZExpbmtSZXR1cm4gcmVzdWx0OworCisgIC8qIGdlbmVyaWMgY2hlY2tzICovCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChzcmNwYWQpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChzaW5rcGFkKSwgRkFMU0UpOworCisgIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9QQURTLCAiY2hlY2sgaWYgJXM6JXMgY2FuIGxpbmsgd2l0aCAlczolcyIsCisgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHNyY3BhZCksIEdTVF9ERUJVR19QQURfTkFNRSAoc2lua3BhZCkpOworCisgIC8qIGdzdF9wYWRfbGlua19wcmVwYXJlIGRvZXMgZXZlcnl0aGluZyBmb3IgdXMsIHdlIG9ubHkgcmVsZWFzZSB0aGUgbG9ja3MKKyAgICogb24gdGhlIHBhZHMgdGhhdCBpdCBnZXRzIHVzLiBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgIU9LIHRoZSBsb2NrcyBhcmUgbm90CisgICAqIHRha2VuIGFueW1vcmUuICovCisgIHJlc3VsdCA9IGdzdF9wYWRfbGlua19wcmVwYXJlIChzcmNwYWQsIHNpbmtwYWQsIEdTVF9QQURfTElOS19DSEVDS19ERUZBVUxUKTsKKyAgaWYgKHJlc3VsdCAhPSBHU1RfUEFEX0xJTktfT0spCisgICAgZ290byBkb25lOworCisgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmNwYWQpOworICBHU1RfT0JKRUNUX1VOTE9DSyAoc2lua3BhZCk7CisKK2RvbmU6CisgIHJldHVybiByZXN1bHQgPT0gR1NUX1BBRF9MSU5LX09LOworfQorCisvKioKKyAqIGdzdF9wYWRfbGlua19mdWxsOgorICogQHNyY3BhZDogdGhlIHNvdXJjZSAjR3N0UGFkIHRvIGxpbmsuCisgKiBAc2lua3BhZDogdGhlIHNpbmsgI0dzdFBhZCB0byBsaW5rLgorICogQGZsYWdzOiB0aGUgY2hlY2tzIHRvIHZhbGlkYXRlIHdoZW4gbGlua2luZworICoKKyAqIExpbmtzIHRoZSBzb3VyY2UgcGFkIGFuZCB0aGUgc2luayBwYWQuCisgKgorICogVGhpcyB2YXJpYW50IG9mICNnc3RfcGFkX2xpbmsgcHJvdmlkZXMgYSBtb3JlIGdyYW51bGFyIGNvbnRyb2wgb24gdGhlCisgKiBjaGVja3MgYmVpbmcgZG9uZSB3aGVuIGxpbmtpbmcuIFdoaWxlIHByb3ZpZGluZyBzb21lIGNvbnNpZGVyYWJsZSBzcGVlZHVwcworICogdGhlIGNhbGxlciBvZiB0aGlzIG1ldGhvZCBtdXN0IGJlIGF3YXJlIHRoYXQgd3JvbmcgdXNhZ2Ugb2YgdGhvc2UgZmxhZ3MKKyAqIGNhbiBjYXVzZSBzZXZlcmUgaXNzdWVzLiBSZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBvZiAjR3N0UGFkTGlua0NoZWNrCisgKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiBNVCBTYWZlLgorICoKKyAqIFJldHVybnM6IEEgcmVzdWx0IGNvZGUgaW5kaWNhdGluZyBpZiB0aGUgY29ubmVjdGlvbiB3b3JrZWQgb3IKKyAqICAgICAgICAgIHdoYXQgd2VudCB3cm9uZy4KKyAqCisgKiBTaW5jZTogMC4xMC4zMAorICovCitHc3RQYWRMaW5rUmV0dXJuCitnc3RfcGFkX2xpbmtfZnVsbCAoR3N0UGFkICogc3JjcGFkLCBHc3RQYWQgKiBzaW5rcGFkLCBHc3RQYWRMaW5rQ2hlY2sgZmxhZ3MpCit7CisgIEdzdFBhZExpbmtSZXR1cm4gcmVzdWx0OworICBHc3RFbGVtZW50ICpwYXJlbnQ7CisgIEdzdFBhZExpbmtGdW5jdGlvbiBzcmNmdW5jLCBzaW5rZnVuYzsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAoc3JjcGFkKSwgR1NUX1BBRF9MSU5LX1JFRlVTRUQpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1BBRF9JU19TUkMgKHNyY3BhZCksIEdTVF9QQURfTElOS19XUk9OR19ESVJFQ1RJT04pOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAoc2lua3BhZCksIEdTVF9QQURfTElOS19SRUZVU0VEKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9QQURfSVNfU0lOSyAoc2lua3BhZCksCisgICAgICBHU1RfUEFEX0xJTktfV1JPTkdfRElSRUNUSU9OKTsKKworICAvKiBOb3RpZnkgdGhlIHBhcmVudCBlYXJseS4gU2VlIGdzdF9wYWRfdW5saW5rIGZvciBkZXRhaWxzLiAqLworICBpZiAoR19MSUtFTFkgKChwYXJlbnQgPSBHU1RfRUxFTUVOVF9DQVNUIChnc3RfcGFkX2dldF9wYXJlbnQgKHNyY3BhZCkpKSkpIHsKKyAgICBpZiAoR19MSUtFTFkgKEdTVF9JU19FTEVNRU5UIChwYXJlbnQpKSkgeworICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChwYXJlbnQsCisgICAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3N0cnVjdHVyZV9jaGFuZ2UgKEdTVF9PQkpFQ1RfQ0FTVCAoc2lua3BhZCksCisgICAgICAgICAgICAgIEdTVF9TVFJVQ1RVUkVfQ0hBTkdFX1RZUEVfUEFEX0xJTkssIHBhcmVudCwgVFJVRSkpOworICAgIH0gZWxzZSB7CisgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwYXJlbnQpOworICAgICAgcGFyZW50ID0gTlVMTDsKKyAgICB9CisgIH0KKworICAvKiBwcmVwYXJlIHdpbGwgYWxzbyBsb2NrIHRoZSB0d28gcGFkcyAqLworICByZXN1bHQgPSBnc3RfcGFkX2xpbmtfcHJlcGFyZSAoc3JjcGFkLCBzaW5rcGFkLCBmbGFncyk7CisKKyAgaWYgKEdfVU5MSUtFTFkgKHJlc3VsdCAhPSBHU1RfUEFEX0xJTktfT0spKQorICAgIGdvdG8gZG9uZTsKKworICAvKiBtdXN0IHNldCBwZWVycyBiZWZvcmUgY2FsbGluZyB0aGUgbGluayBmdW5jdGlvbiAqLworICBHU1RfUEFEX1BFRVIgKHNyY3BhZCkgPSBzaW5rcGFkOworICBHU1RfUEFEX1BFRVIgKHNpbmtwYWQpID0gc3JjcGFkOworCisgIC8qIG1ha2Ugc3VyZSB3ZSB1cGRhdGUgZXZlbnRzICovCisgIHByZXBhcmVfZXZlbnRfdXBkYXRlIChzcmNwYWQsIHNpbmtwYWQpOworCisgIC8qIGdldCB0aGUgbGluayBmdW5jdGlvbnMgKi8KKyAgc3JjZnVuYyA9IEdTVF9QQURfTElOS0ZVTkMgKHNyY3BhZCk7CisgIHNpbmtmdW5jID0gR1NUX1BBRF9MSU5LRlVOQyAoc2lua3BhZCk7CisKKyAgaWYgKEdfVU5MSUtFTFkgKHNyY2Z1bmMgfHwgc2lua2Z1bmMpKSB7CisgICAgLyogY3VzdG9tIGxpbmsgZnVuY3Rpb25zLCBleGVjdXRlIHRoZW0gKi8KKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc2lua3BhZCk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyY3BhZCk7CisKKyAgICBpZiAoc3JjZnVuYykgeworICAgICAgLyogdGhpcyBvbmUgd2lsbCBjYWxsIHRoZSBwZWVyIGxpbmsgZnVuY3Rpb24gKi8KKyAgICAgIHJlc3VsdCA9IHNyY2Z1bmMgKHNyY3BhZCwgc2lua3BhZCk7CisgICAgfSBlbHNlIGlmIChzaW5rZnVuYykgeworICAgICAgLyogaWYgbm8gc291cmNlIGxpbmsgZnVuY3Rpb24sIHdlIG5lZWQgdG8gY2FsbCB0aGUgc2luayBsaW5rCisgICAgICAgKiBmdW5jdGlvbiBvdXJzZWx2ZXMuICovCisgICAgICByZXN1bHQgPSBzaW5rZnVuYyAoc2lua3BhZCwgc3JjcGFkKTsKKyAgICB9CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sgKHNyY3BhZCk7CisgICAgR1NUX09CSkVDVF9MT0NLIChzaW5rcGFkKTsKKworICAgIC8qIHdlIHJlbGVhc2VkIHRoZSBsb2NrLCBjaGVjayBpZiB0aGUgc2FtZSBwYWRzIGFyZSBsaW5rZWQgc3RpbGwgKi8KKyAgICBpZiAoR1NUX1BBRF9QRUVSIChzcmNwYWQpICE9IHNpbmtwYWQgfHwgR1NUX1BBRF9QRUVSIChzaW5rcGFkKSAhPSBzcmNwYWQpCisgICAgICBnb3RvIGNvbmN1cnJlbnRfbGluazsKKworICAgIGlmIChHX1VOTElLRUxZIChyZXN1bHQgIT0gR1NUX1BBRF9MSU5LX09LKSkKKyAgICAgIGdvdG8gbGlua19mYWlsZWQ7CisgIH0KKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmtwYWQpOworICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjcGFkKTsKKworICAvKiBmaXJlIG9mZiBhIHNpZ25hbCB0byBlYWNoIG9mIHRoZSBwYWRzIHRlbGxpbmcgdGhlbQorICAgKiB0aGF0IHRoZXkndmUgYmVlbiBsaW5rZWQgKi8KKyAgZ19zaWduYWxfZW1pdCAoc3JjcGFkLCBnc3RfcGFkX3NpZ25hbHNbUEFEX0xJTktFRF0sIDAsIHNpbmtwYWQpOworICBnX3NpZ25hbF9lbWl0IChzaW5rcGFkLCBnc3RfcGFkX3NpZ25hbHNbUEFEX0xJTktFRF0sIDAsIHNyY3BhZCk7CisKKyAgR1NUX0NBVF9JTkZPIChHU1RfQ0FUX1BBRFMsICJsaW5rZWQgJXM6JXMgYW5kICVzOiVzLCBzdWNjZXNzZnVsIiwKKyAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAoc3JjcGFkKSwgR1NUX0RFQlVHX1BBRF9OQU1FIChzaW5rcGFkKSk7CisKKyAgZ3N0X3BhZF9zZW5kX2V2ZW50IChzcmNwYWQsIGdzdF9ldmVudF9uZXdfcmVjb25maWd1cmUgKCkpOworCitkb25lOgorICBpZiAoR19MSUtFTFkgKHBhcmVudCkpIHsKKyAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKHBhcmVudCwKKyAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3N0cnVjdHVyZV9jaGFuZ2UgKEdTVF9PQkpFQ1RfQ0FTVCAoc2lua3BhZCksCisgICAgICAgICAgICBHU1RfU1RSVUNUVVJFX0NIQU5HRV9UWVBFX1BBRF9MSU5LLCBwYXJlbnQsIEZBTFNFKSk7CisgICAgZ3N0X29iamVjdF91bnJlZiAocGFyZW50KTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7CisKKyAgLyogRVJST1JTICovCitjb25jdXJyZW50X2xpbms6CisgIHsKKyAgICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfUEFEUywgImNvbmN1cnJlbnQgbGluayBiZXR3ZWVuICVzOiVzIGFuZCAlczolcyIsCisgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAoc3JjcGFkKSwgR1NUX0RFQlVHX1BBRF9OQU1FIChzaW5rcGFkKSk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmtwYWQpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmNwYWQpOworCisgICAgLyogVGhlIG90aGVyIGxpbmsgb3BlcmF0aW9uIHN1Y2NlZWRlZCBmaXJzdCAqLworICAgIHJlc3VsdCA9IEdTVF9QQURfTElOS19XQVNfTElOS0VEOworICAgIGdvdG8gZG9uZTsKKyAgfQorbGlua19mYWlsZWQ6CisgIHsKKyAgICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfUEFEUywgImxpbmsgYmV0d2VlbiAlczolcyBhbmQgJXM6JXMgZmFpbGVkIiwKKyAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChzcmNwYWQpLCBHU1RfREVCVUdfUEFEX05BTUUgKHNpbmtwYWQpKTsKKworICAgIEdTVF9QQURfUEVFUiAoc3JjcGFkKSA9IE5VTEw7CisgICAgR1NUX1BBRF9QRUVSIChzaW5rcGFkKSA9IE5VTEw7CisKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc2lua3BhZCk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyY3BhZCk7CisKKyAgICBnb3RvIGRvbmU7CisgIH0KK30KKworLyoqCisgKiBnc3RfcGFkX2xpbms6CisgKiBAc3JjcGFkOiB0aGUgc291cmNlICNHc3RQYWQgdG8gbGluay4KKyAqIEBzaW5rcGFkOiB0aGUgc2luayAjR3N0UGFkIHRvIGxpbmsuCisgKgorICogTGlua3MgdGhlIHNvdXJjZSBwYWQgYW5kIHRoZSBzaW5rIHBhZC4KKyAqCisgKiBSZXR1cm5zOiBBIHJlc3VsdCBjb2RlIGluZGljYXRpbmcgaWYgdGhlIGNvbm5lY3Rpb24gd29ya2VkIG9yCisgKiAgICAgICAgICB3aGF0IHdlbnQgd3JvbmcuCisgKgorICogTVQgU2FmZS4KKyAqLworR3N0UGFkTGlua1JldHVybgorZ3N0X3BhZF9saW5rIChHc3RQYWQgKiBzcmNwYWQsIEdzdFBhZCAqIHNpbmtwYWQpCit7CisgIHJldHVybiBnc3RfcGFkX2xpbmtfZnVsbCAoc3JjcGFkLCBzaW5rcGFkLCBHU1RfUEFEX0xJTktfQ0hFQ0tfREVGQVVMVCk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfcGFkX3NldF9wYWRfdGVtcGxhdGUgKEdzdFBhZCAqIHBhZCwgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCkKK3sKKyAgR3N0UGFkVGVtcGxhdGUgKip0ZW1wbGF0ZV9wOworCisgIC8qIHRoaXMgZnVuY3Rpb24gd291bGQgbmVlZCBjaGVja3MgaWYgaXQgd2VyZW4ndCBzdGF0aWMgKi8KKworICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7CisgIHRlbXBsYXRlX3AgPSAmcGFkLT5wYWR0ZW1wbGF0ZTsKKyAgZ3N0X29iamVjdF9yZXBsYWNlICgoR3N0T2JqZWN0ICoqKSB0ZW1wbGF0ZV9wLCAoR3N0T2JqZWN0ICopIHRlbXBsKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisKKyAgaWYgKHRlbXBsKQorICAgIGdzdF9wYWRfdGVtcGxhdGVfcGFkX2NyZWF0ZWQgKHRlbXBsLCBwYWQpOworfQorCisvKioKKyAqIGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZToKKyAqIEBwYWQ6IGEgI0dzdFBhZC4KKyAqCisgKiBHZXRzIHRoZSB0ZW1wbGF0ZSBmb3IgQHBhZC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0UGFkVGVtcGxhdGUgZnJvbSB3aGljaCB0aGlzIHBhZCB3YXMKKyAqICAgICBpbnN0YW50aWF0ZWQsIG9yICVOVUxMIGlmIHRoaXMgcGFkIGhhcyBubyB0ZW1wbGF0ZS4gVW5yZWYgYWZ0ZXIKKyAqICAgICB1c2FnZS4KKyAqLworR3N0UGFkVGVtcGxhdGUgKgorZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlIChHc3RQYWQgKiBwYWQpCit7CisgIEdzdFBhZFRlbXBsYXRlICp0ZW1wbDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgTlVMTCk7CisKKyAgdGVtcGwgPSBHU1RfUEFEX1BBRF9URU1QTEFURSAocGFkKTsKKworICByZXR1cm4gKHRlbXBsID8gZ3N0X29iamVjdF9yZWYgKHRlbXBsKSA6IE5VTEwpOworfQorCitzdGF0aWMgR3N0Q2FwcyAqCitjYXBzX3dpdGhfZ2V0Y2FwcyAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogZmlsdGVyKQoreworICBHc3RDYXBzICpyZXN1bHQ7CisKKyAgaWYgKEdTVF9QQURfR0VUQ0FQU0ZVTkMgKHBhZCkgPT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsKKworICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9DQVBTLCBwYWQsCisgICAgICAiZGlzcGF0Y2hpbmcgdG8gcGFkIGdldGNhcHMgZnVuY3Rpb24gd2l0aCAiCisgICAgICAiZmlsdGVyICUiIEdTVF9QVFJfRk9STUFULCBmaWx0ZXIpOworCisgIEdTVF9PQkpFQ1RfRkxBR19TRVQgKHBhZCwgR1NUX1BBRF9JTl9HRVRDQVBTKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisgIHJlc3VsdCA9IEdTVF9QQURfR0VUQ0FQU0ZVTkMgKHBhZCkgKHBhZCwgZmlsdGVyKTsKKyAgR1NUX09CSkVDVF9MT0NLIChwYWQpOworICBHU1RfT0JKRUNUX0ZMQUdfVU5TRVQgKHBhZCwgR1NUX1BBRF9JTl9HRVRDQVBTKTsKKworICBpZiAoR19VTkxJS0VMWSAocmVzdWx0ID09IE5VTEwpKQorICAgIGdvdG8gbnVsbF9jYXBzOworCisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NBUFMsIHBhZCwKKyAgICAgICJwYWQgZ2V0Y2FwcyByZXR1cm5lZCAlIiBHU1RfUFRSX0ZPUk1BVCwgcmVzdWx0KTsKKworI2lmbmRlZiBHX0RJU0FCTEVfQVNTRVJUCisgIC8qIGNoZWNrIHRoYXQgdGhlIHJldHVybmVkIGNhcHMgYXJlIGEgcmVhbCBzdWJzZXQgb2YgdGhlIHRlbXBsYXRlIGNhcHMgKi8KKyAgaWYgKEdTVF9QQURfUEFEX1RFTVBMQVRFIChwYWQpKSB7CisgICAgY29uc3QgR3N0Q2FwcyAqdGVtcGxfY2FwcyA9CisgICAgICAgIEdTVF9QQURfVEVNUExBVEVfQ0FQUyAoR1NUX1BBRF9QQURfVEVNUExBVEUgKHBhZCkpOworICAgIGlmICghZ3N0X2NhcHNfaXNfc3Vic2V0IChyZXN1bHQsIHRlbXBsX2NhcHMpKSB7CisgICAgICBHc3RDYXBzICp0ZW1wOworCisgICAgICBHU1RfQ0FUX0VSUk9SX09CSkVDVCAoR1NUX0NBVF9DQVBTLCBwYWQsCisgICAgICAgICAgInBhZCByZXR1cm5lZCBjYXBzICUiIEdTVF9QVFJfRk9STUFUCisgICAgICAgICAgIiB3aGljaCBhcmUgbm90IGEgcmVhbCBzdWJzZXQgb2YgaXRzIHRlbXBsYXRlIGNhcHMgJSIKKyAgICAgICAgICBHU1RfUFRSX0ZPUk1BVCwgcmVzdWx0LCB0ZW1wbF9jYXBzKTsKKyAgICAgIGdfd2FybmluZworICAgICAgICAgICgicGFkICVzOiVzIHJldHVybmVkIGNhcHMgd2hpY2ggYXJlIG5vdCBhIHJlYWwgIgorICAgICAgICAgICJzdWJzZXQgb2YgaXRzIHRlbXBsYXRlIGNhcHMiLCBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOworICAgICAgdGVtcCA9IGdzdF9jYXBzX2ludGVyc2VjdCAodGVtcGxfY2FwcywgcmVzdWx0KTsKKyAgICAgIGdzdF9jYXBzX3VucmVmIChyZXN1bHQpOworICAgICAgcmVzdWx0ID0gdGVtcDsKKyAgICB9CisgIH0KKyAgaWYgKGZpbHRlcikgeworICAgIGlmICghZ3N0X2NhcHNfaXNfc3Vic2V0IChyZXN1bHQsIGZpbHRlcikpIHsKKyAgICAgIEdzdENhcHMgKnRlbXA7CisKKyAgICAgIEdTVF9DQVRfRVJST1JfT0JKRUNUIChHU1RfQ0FUX0NBUFMsIHBhZCwKKyAgICAgICAgICAicGFkIHJldHVybmVkIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQKKyAgICAgICAgICAiIHdoaWNoIGFyZSBub3QgYSByZWFsIHN1YnNldCBvZiB0aGUgZmlsdGVyIGNhcHMgJSIKKyAgICAgICAgICBHU1RfUFRSX0ZPUk1BVCwgcmVzdWx0LCBmaWx0ZXIpOworICAgICAgZ193YXJuaW5nICgicGFkICVzOiVzIHJldHVybmVkIGNhcHMgd2hpY2ggYXJlIG5vdCBhIHJlYWwgIgorICAgICAgICAgICJzdWJzZXQgb2YgdGhlIGZpbHRlciBjYXBzIiwgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKKyAgICAgIC8qIEZJWE1FOiBPcmRlcj8gQnV0IHNob3VsZG4ndCBoYXBwZW4gYW55d2F5Li4uICovCisgICAgICB0ZW1wID0gZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGZpbHRlciwgcmVzdWx0LCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOworICAgICAgZ3N0X2NhcHNfdW5yZWYgKHJlc3VsdCk7CisgICAgICByZXN1bHQgPSB0ZW1wOworICAgIH0KKyAgfQorI2VuZGlmCisKKyAgcmV0dXJuIHJlc3VsdDsKKworICAvKiBFUlJPUlMgKi8KK251bGxfY2FwczoKKyAgeworICAgIGdfY3JpdGljYWwgKCJwYWQgJXM6JXMgcmV0dXJuZWQgTlVMTCBjYXBzIGZyb20gZ2V0Y2FwcyBmdW5jdGlvbiIsCisgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KK30KKworLyogc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBwYWQgTE9DSyBoZWxkICovCisvKiByZWZzIHRoZSBjYXBzLCBzbyBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGdldHRpbmcgaXQgdW5yZWZmZWQgKi8KK3N0YXRpYyBHc3RDYXBzICoKK2dzdF9wYWRfZ2V0X2NhcHNfdW5sb2NrZWQgKEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGZpbHRlcikKK3sKKyAgR3N0Q2FwcyAqcmVzdWx0ID0gTlVMTDsKKyAgR3N0UGFkVGVtcGxhdGUgKnRlbXBsOworICBnYm9vbGVhbiBmaXhlZF9jYXBzOworCisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NBUFMsIHBhZCwgImdldCBwYWQgY2FwcyIpOworCisgIGZpeGVkX2NhcHMgPSBHU1RfUEFEX0lTX0ZJWEVEX0NBUFMgKHBhZCk7CisKKyAgaWYgKGZpeGVkX2NhcHMpIHsKKyAgICAvKiBmaXhlZCBjYXBzLCB0cnkgdGhlIG5lZ290aWF0ZWQgY2FwcyBmaXJzdCAqLworICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NBUFMsIHBhZCwgImZpeGVkIHBhZCBjYXBzOiB0cnlpbmcgcGFkIGNhcHMiKTsKKyAgICBpZiAoKHJlc3VsdCA9IGdldF9wYWRfY2FwcyAocGFkKSkpCisgICAgICBnb3RvIGZpbHRlcl9kb25lOworICB9CisKKyAgLyogdHJ5IHRoZSBnZXRjYXBzIGZ1bmN0aW9uIG5leHQgKi8KKyAgaWYgKChyZXN1bHQgPSBjYXBzX3dpdGhfZ2V0Y2FwcyAocGFkLCBmaWx0ZXIpKSkKKyAgICBnb3RvIGRvbmU7CisKKyAgaWYgKCh0ZW1wbCA9IEdTVF9QQURfUEFEX1RFTVBMQVRFIChwYWQpKSkgeworICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NBUFMsIHBhZCwgInRyeWluZyBwYWQgdGVtcGxhdGUgY2FwcyIpOworICAgIGlmICgocmVzdWx0ID0gR1NUX1BBRF9URU1QTEFURV9DQVBTICh0ZW1wbCkpKQorICAgICAgZ290byBmaWx0ZXJfZG9uZTsKKyAgfQorCisgIGlmICghZml4ZWRfY2FwcykgeworICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NBUFMsIHBhZCwKKyAgICAgICAgIm5vbi1maXhlZCBwYWQgY2FwczogdHJ5aW5nIHBhZCBjYXBzIik7CisgICAgLyogbm9uIGZpeGVkIGNhcHMsIHRyeSB0aGUgbmVnb3RpYXRlZCBjYXBzICovCisgICAgaWYgKChyZXN1bHQgPSBnZXRfcGFkX2NhcHMgKHBhZCkpKQorICAgICAgZ290byBmaWx0ZXJfZG9uZTsKKyAgfQorCisgIC8qIHRoaXMgYWxtb3N0IG5ldmVyIGhhcHBlbnMgKi8KKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0FQUywgcGFkLCAicGFkIGhhcyBubyBjYXBzIik7CisgIHJlc3VsdCA9IGdzdF9jYXBzX25ld19lbXB0eSAoKTsKKyAgZ290byBkb25lOworCitmaWx0ZXJfZG9uZToKKyAgLyogcnVuIHRoZSBmaWx0ZXIgb24gdGhlIHJlc3VsdCAqLworICBpZiAoZmlsdGVyKSB7CisgICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0FQUywgcGFkLAorICAgICAgICAidXNpbmcgY2FwcyAlcCAlIiBHU1RfUFRSX0ZPUk1BVCAiIHdpdGggZmlsdGVyICVwICUiCisgICAgICAgIEdTVF9QVFJfRk9STUFULCByZXN1bHQsIHJlc3VsdCwgZmlsdGVyLCBmaWx0ZXIpOworICAgIHJlc3VsdCA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChmaWx0ZXIsIHJlc3VsdCwgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKKyAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9DQVBTLCBwYWQsICJyZXN1bHQgJXAgJSIgR1NUX1BUUl9GT1JNQVQsCisgICAgICAgIHJlc3VsdCwgcmVzdWx0KTsKKyAgfSBlbHNlIHsKKyAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9DQVBTLCBwYWQsCisgICAgICAgICJ1c2luZyBjYXBzICVwICUiIEdTVF9QVFJfRk9STUFULCByZXN1bHQsIHJlc3VsdCk7CisgICAgcmVzdWx0ID0gZ3N0X2NhcHNfcmVmIChyZXN1bHQpOworICB9Citkb25lOgorICByZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGdzdF9wYWRfaGFzX2N1cnJlbnRfY2FwczoKKyAqIEBwYWQ6IGEgICNHc3RQYWQgdG8gY2hlY2sKKyAqCisgKiBDaGVjayBpZiBAcGFkIGhhcyBjYXBzIHNldCBvbiBpdCB3aXRoIGEgI0dTVF9FVkVOVF9DQVBTIGV2ZW50LgorICoKKyAqIFJldHVybnM6IFRSVUUgd2hlbiBAcGFkIGhhcyBjYXBzIGFzc29jaWF0ZWQgd2l0aCBpdC4KKyAqLworZ2Jvb2xlYW4KK2dzdF9wYWRfaGFzX2N1cnJlbnRfY2FwcyAoR3N0UGFkICogcGFkKQoreworICBnYm9vbGVhbiByZXN1bHQ7CisgIEdzdENhcHMgKmNhcHM7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIEZBTFNFKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7CisgIGNhcHMgPSBnZXRfcGFkX2NhcHMgKHBhZCk7CisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NBUFMsIHBhZCwKKyAgICAgICJjaGVjayBjdXJyZW50IHBhZCBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKKyAgcmVzdWx0ID0gKGNhcHMgIT0gTlVMTCk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzOgorICogQHBhZDogYSAgI0dzdFBhZCB0byBnZXQgdGhlIGN1cnJlbnQgY2FwYWJpbGl0aWVzIG9mLgorICoKKyAqIEdldHMgdGhlIGNhcGFiaWxpdGllcyBjdXJyZW50bHkgY29uZmlndXJlZCBvbiBAcGFkIHdpdGggdGhlIGxhc3QKKyAqICNHU1RfRVZFTlRfQ0FQUyBldmVudC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgY3VycmVudCBjYXBzIG9mIHRoZSBwYWQgd2l0aCBpbmNyZW1lbnRlZCByZWYtY291bnQuCisgKi8KK0dzdENhcHMgKgorZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChHc3RQYWQgKiBwYWQpCit7CisgIEdzdENhcHMgKnJlc3VsdDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgTlVMTCk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChwYWQpOworICBpZiAoKHJlc3VsdCA9IGdldF9wYWRfY2FwcyAocGFkKSkpCisgICAgZ3N0X2NhcHNfcmVmIChyZXN1bHQpOworICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9DQVBTLCBwYWQsCisgICAgICAiZ2V0IGN1cnJlbnQgcGFkIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIHJlc3VsdCk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZ3N0X3BhZF9nZXRfY2FwczoKKyAqIEBwYWQ6IGEgICNHc3RQYWQgdG8gZ2V0IHRoZSBjYXBhYmlsaXRpZXMgb2YuCisgKiBAZmlsdGVyOiBzdWdnZXN0ZWQgI0dzdENhcHMuCisgKgorICogR2V0cyB0aGUgY2FwYWJpbGl0aWVzIHRoaXMgcGFkIGNhbiBwcm9kdWNlIG9yIGNvbnN1bWUuCisgKiBOb3RlIHRoYXQgdGhpcyBtZXRob2QgZG9lc24ndCBuZWNlc3NhcmlseSByZXR1cm4gdGhlIGNhcHMgc2V0IGJ5CisgKiBnc3RfcGFkX3NldF9jYXBzKCkgLSB1c2UgZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzKCkgZm9yIHRoYXQgaW5zdGVhZC4KKyAqIGdzdF9wYWRfZ2V0X2NhcHMgcmV0dXJucyBhbGwgcG9zc2libGUgY2FwcyBhIHBhZCBjYW4gb3BlcmF0ZSB3aXRoLCB1c2luZworICogdGhlIHBhZCdzIGdldF9jYXBzIGZ1bmN0aW9uOworICogdGhpcyByZXR1cm5zIHRoZSBwYWQgdGVtcGxhdGUgY2FwcyBpZiBub3QgZXhwbGljaXRseSBzZXQuCisgKgorICogV2hlbiBjYWxsZWQgb24gc2lua3BhZHMgQGZpbHRlciBjb250YWlucyB0aGUgY2FwcyB0aGF0CisgKiB1cHN0cmVhbSBjb3VsZCBwcm9kdWNlIGluIHRoZSBvcmRlciBwcmVmZXJyZWQgYnkgdXBzdHJlYW0uIFdoZW4KKyAqIGNhbGxlZCBvbiBzcmNwYWRzIEBmaWx0ZXIgY29udGFpbnMgdGhlIGNhcHMgYWNjZXB0ZWQgYnkKKyAqIGRvd25zdHJlYW0gaW4gdGhlIHByZWZmZXJlZCBvcmRlci4gQGZpbHRlciBtaWdodCBiZSAlTlVMTCBidXQKKyAqIGlmIGl0IGlzIG5vdCAlTlVMTCB0aGUgcmV0dXJuZWQgY2FwcyB3aWxsIGJlIGEgc3Vic2V0IG9mIEBmaWx0ZXIuCisgKgorICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIHdyaXRhYmxlICNHc3RDYXBzLCB1c2UKKyAqIGdzdF9jYXBzX21ha2Vfd3JpdGFibGUoKSBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBjYXBzLgorICoKKyAqIFJldHVybnM6IHRoZSBjYXBzIG9mIHRoZSBwYWQgd2l0aCBpbmNyZW1lbnRlZCByZWYtY291bnQuCisgKi8KK0dzdENhcHMgKgorZ3N0X3BhZF9nZXRfY2FwcyAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogZmlsdGVyKQoreworICBHc3RDYXBzICpyZXN1bHQgPSBOVUxMOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpbHRlciA9PSBOVUxMIHx8IEdTVF9JU19DQVBTIChmaWx0ZXIpLCBOVUxMKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7CisKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0FQUywgcGFkLCAiZ2V0IHBhZCBjYXBzIik7CisKKyAgcmVzdWx0ID0gZ3N0X3BhZF9nZXRfY2Fwc191bmxvY2tlZCAocGFkLCBmaWx0ZXIpOworCisgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKworLyoqCisgKiBnc3RfcGFkX3BlZXJfZ2V0X2NhcHM6CisgKiBAcGFkOiBhICAjR3N0UGFkIHRvIGdldCB0aGUgY2FwYWJpbGl0aWVzIG9mLgorICogQGZpbHRlcjogYSAjR3N0Q2FwcyBmaWx0ZXIuCisgKgorICogR2V0cyB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBwZWVyIGNvbm5lY3RlZCB0byB0aGlzIHBhZC4gU2ltaWxhciB0bworICogZ3N0X3BhZF9nZXRfY2FwcygpLgorICoKKyAqIFdoZW4gY2FsbGVkIG9uIHNyY3BhZHMgQGZpbHRlciBjb250YWlucyB0aGUgY2FwcyB0aGF0CisgKiB1cHN0cmVhbSBjb3VsZCBwcm9kdWNlIGluIHRoZSBvcmRlciBwcmVmZXJyZWQgYnkgdXBzdHJlYW0uIFdoZW4KKyAqIGNhbGxlZCBvbiBzaW5rcGFkcyBAZmlsdGVyIGNvbnRhaW5zIHRoZSBjYXBzIGFjY2VwdGVkIGJ5CisgKiBkb3duc3RyZWFtIGluIHRoZSBwcmVmZmVyZWQgb3JkZXIuIEBmaWx0ZXIgbWlnaHQgYmUgJU5VTEwgYnV0CisgKiBpZiBpdCBpcyBub3QgJU5VTEwgdGhlIHJldHVybmVkIGNhcHMgd2lsbCBiZSBhIHN1YnNldCBvZiBAZmlsdGVyLgorICoKKyAqIFJldHVybnM6IHRoZSBjYXBzIG9mIHRoZSBwZWVyIHBhZCB3aXRoIGluY3JlbWVudGVkIHJlZi1jb3VudC4gVGhpcyBmdW5jdGlvbgorICogcmV0dXJucyAlTlVMTCB3aGVuIHRoZXJlIGlzIG5vIHBlZXIgcGFkLgorICovCitHc3RDYXBzICoKK2dzdF9wYWRfcGVlcl9nZXRfY2FwcyAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogZmlsdGVyKQoreworICBHc3RQYWQgKnBlZXJwYWQ7CisgIEdzdENhcHMgKnJlc3VsdCA9IE5VTEw7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmlsdGVyID09IE5VTEwgfHwgR1NUX0lTX0NBUFMgKGZpbHRlciksIE5VTEwpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKKworICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9DQVBTLCBwYWQsICJnZXQgcGVlciBjYXBzIik7CisKKyAgcGVlcnBhZCA9IEdTVF9QQURfUEVFUiAocGFkKTsKKyAgaWYgKEdfVU5MSUtFTFkgKHBlZXJwYWQgPT0gTlVMTCkpCisgICAgZ290byBub19wZWVyOworCisgIGdzdF9vYmplY3RfcmVmIChwZWVycGFkKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisKKyAgcmVzdWx0ID0gZ3N0X3BhZF9nZXRfY2FwcyAocGVlcnBhZCwgZmlsdGVyKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChwZWVycGFkKTsKKworICByZXR1cm4gcmVzdWx0OworCitub19wZWVyOgorICB7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9wYWRfZml4YXRlX2NhcHNfZGVmYXVsdCAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogY2FwcykKK3sKKyAgLyogZGVmYXVsdCBmaXhhdGlvbiAqLworICBnc3RfY2Fwc19maXhhdGUgKGNhcHMpOworfQorCisvKioKKyAqIGdzdF9wYWRfZml4YXRlX2NhcHM6CisgKiBAcGFkOiBhICAjR3N0UGFkIHRvIGZpeGF0ZQorICogQGNhcHM6IHRoZSAgI0dzdENhcHMgdG8gZml4YXRlCisgKgorICogRml4YXRlIGEgY2FwcyBvbiB0aGUgZ2l2ZW4gcGFkLiBNb2RpZmllcyB0aGUgY2FwcyBpbiBwbGFjZSwgc28geW91IHNob3VsZAorICogbWFrZSBzdXJlIHRoYXQgdGhlIGNhcHMgYXJlIGFjdHVhbGx5IHdyaXRhYmxlIChzZWUgZ3N0X2NhcHNfbWFrZV93cml0YWJsZSgpKS4KKyAqLwordm9pZAorZ3N0X3BhZF9maXhhdGVfY2FwcyAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogY2FwcykKK3sKKyAgR3N0UGFkRml4YXRlQ2Fwc0Z1bmN0aW9uIGZpeGF0ZWZ1bmM7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKGNhcHMgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKCFnc3RfY2Fwc19pc19lbXB0eSAoY2FwcykpOworICBnX3JldHVybl9pZl9mYWlsICghZ3N0X2NhcHNfaXNfYW55IChjYXBzKSk7CisKKyAgaWYgKGdzdF9jYXBzX2lzX2ZpeGVkIChjYXBzKSB8fCBnc3RfY2Fwc19pc19hbnkgKGNhcHMpKQorICAgIHJldHVybjsKKworICBnX3JldHVybl9pZl9mYWlsIChnc3RfY2Fwc19pc193cml0YWJsZSAoY2FwcykpOworCisgIGlmIChHX0xJS0VMWSAoKGZpeGF0ZWZ1bmMgPSBHU1RfUEFEX0ZJWEFURUNBUFNGVU5DIChwYWQpKSkpCisgICAgZml4YXRlZnVuYyAocGFkLCBjYXBzKTsKK30KKworLyogRGVmYXVsdCBhY2NlcHQgY2FwcyBpbXBsZW1lbnRhdGlvbiBqdXN0IGNoZWNrcyBhZ2FpbnN0CisgKiBhZ2FpbnN0IHRoZSBhbGxvd2VkIGNhcHMgZm9yIHRoZSBwYWQgKi8KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3BhZF9hY2NlcHRjYXBzX2RlZmF1bHQgKEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGNhcHMpCit7CisgIC8qIGdldCB0aGUgY2FwcyBhbmQgc2VlIGlmIGl0IGludGVyc2VjdHMgdG8gc29tZXRoaW5nIG5vdCBlbXB0eSAqLworICBHc3RDYXBzICphbGxvd2VkOworICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKKworICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJjYXBzICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKKworICBhbGxvd2VkID0gZ3N0X3BhZF9nZXRfY2FwcyAocGFkLCBOVUxMKTsKKyAgaWYgKCFhbGxvd2VkKQorICAgIGdvdG8gbm90aGluZ19hbGxvd2VkOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImFsbG93ZWQgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgYWxsb3dlZCk7CisKKyAgcmVzdWx0ID0gZ3N0X2NhcHNfaXNfc3Vic2V0IChjYXBzLCBhbGxvd2VkKTsKKworICBnc3RfY2Fwc191bnJlZiAoYWxsb3dlZCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKKworICAvKiBFUlJPUlMgKi8KK25vdGhpbmdfYWxsb3dlZDoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIm5vIGNhcHMgYWxsb3dlZCBvbiB0aGUgcGFkIik7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKKy8qKgorICogZ3N0X3BhZF9hY2NlcHRfY2FwczoKKyAqIEBwYWQ6IGEgI0dzdFBhZCB0byBjaGVjaworICogQGNhcHM6IGEgI0dzdENhcHMgdG8gY2hlY2sgb24gdGhlIHBhZAorICoKKyAqIENoZWNrIGlmIHRoZSBnaXZlbiBwYWQgYWNjZXB0cyB0aGUgY2Fwcy4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBwYWQgY2FuIGFjY2VwdCB0aGUgY2Fwcy4KKyAqLworZ2Jvb2xlYW4KK2dzdF9wYWRfYWNjZXB0X2NhcHMgKEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGNhcHMpCit7CisgIGdib29sZWFuIHJlc3VsdDsKKyAgR3N0UGFkQWNjZXB0Q2Fwc0Z1bmN0aW9uIGFjY2VwdGZ1bmM7CisjaWYgMAorICBHc3RDYXBzICpleGlzdGluZyA9IE5VTEw7CisjZW5kaWYKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgRkFMU0UpOworCisgIC8qIGFueSBwYWQgY2FuIGJlIHVubmVnb3RpYXRlZCAqLworICBpZiAoY2FwcyA9PSBOVUxMKQorICAgIHJldHVybiBUUlVFOworCisgIC8qIGxvY2sgZm9yIGNoZWNraW5nIHRoZSBleGlzdGluZyBjYXBzICovCisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NBUFMsIHBhZCwgImFjY2VwdCBjYXBzIG9mICVwIiwgY2Fwcyk7CisjaWYgMAorICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7CisgIC8qIFRoZSBjdXJyZW50IGNhcHMgb24gYSBwYWQgYXJlIHRyaXZpYWxseSBhY2NlcHRhYmxlICovCisgIGlmIChHX0xJS0VMWSAoKGV4aXN0aW5nID0gR1NUX1BBRF9DQVBTIChwYWQpKSkpIHsKKyAgICBpZiAoY2FwcyA9PSBleGlzdGluZyB8fCBnc3RfY2Fwc19pc19lcXVhbCAoY2FwcywgZXhpc3RpbmcpKQorICAgICAgZ290byBpc19zYW1lX2NhcHM7CisgIH0KKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisjZW5kaWYKKyAgYWNjZXB0ZnVuYyA9IEdTVF9QQURfQUNDRVBUQ0FQU0ZVTkMgKHBhZCk7CisKKyAgLyogT25seSBudWxsIGlmIHRoZSBlbGVtZW50IGV4cGxpY2l0bHkgdW5zZXQgaXQgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKGFjY2VwdGZ1bmMgPT0gTlVMTCkpCisgICAgZ290byBub19mdW5jOworCisgIC8qIHdlIGNhbiBjYWxsIHRoZSBmdW5jdGlvbiAqLworICByZXN1bHQgPSBhY2NlcHRmdW5jIChwYWQsIGNhcHMpOworICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJhY2NlcHRmdW5jIHJldHVybmVkICVkIiwgcmVzdWx0KTsKKworICByZXR1cm4gcmVzdWx0OworCisjaWYgMAoraXNfc2FtZV9jYXBzOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAicGFkIGhhZCBzYW1lIGNhcHMiKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorI2VuZGlmCitub19mdW5jOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAibm8gYWNjZXB0Y2FwcyBmdW5jdGlvbiIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCisvKioKKyAqIGdzdF9wYWRfcGVlcl9hY2NlcHRfY2FwczoKKyAqIEBwYWQ6IGEgICNHc3RQYWQgdG8gY2hlY2sgdGhlIHBlZXIgb2YKKyAqIEBjYXBzOiBhICNHc3RDYXBzIHRvIGNoZWNrIG9uIHRoZSBwYWQKKyAqCisgKiBDaGVjayBpZiB0aGUgcGVlciBvZiBAcGFkIGFjY2VwdHMgQGNhcHMuIElmIEBwYWQgaGFzIG5vIHBlZXIsIHRoaXMgZnVuY3Rpb24KKyAqIHJldHVybnMgVFJVRS4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBwZWVyIG9mIEBwYWQgY2FuIGFjY2VwdCB0aGUgY2FwcyBvciBAcGFkIGhhcyBubyBwZWVyLgorICovCitnYm9vbGVhbgorZ3N0X3BhZF9wZWVyX2FjY2VwdF9jYXBzIChHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBjYXBzKQoreworICBHc3RQYWQgKnBlZXJwYWQ7CisgIGdib29sZWFuIHJlc3VsdDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgRkFMU0UpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKKworICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9DQVBTLCBwYWQsICJwZWVyIGFjY2VwdCBjYXBzIG9mICglcCkiLCBwYWQpOworCisgIHBlZXJwYWQgPSBHU1RfUEFEX1BFRVIgKHBhZCk7CisgIGlmIChHX1VOTElLRUxZIChwZWVycGFkID09IE5VTEwpKQorICAgIGdvdG8gbm9fcGVlcjsKKworICBnc3Rfb2JqZWN0X3JlZiAocGVlcnBhZCk7CisgIC8qIHJlbGVhc2UgbG9jayBiZWZvcmUgY2FsbGluZyBleHRlcm5hbCBtZXRob2RzIGJ1dCBrZWVwIHJlZiB0byBwYWQgKi8KKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisKKyAgcmVzdWx0ID0gZ3N0X3BhZF9hY2NlcHRfY2FwcyAocGVlcnBhZCwgY2Fwcyk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAocGVlcnBhZCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKKworbm9fcGVlcjoKKyAgeworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworICAgIHJldHVybiBUUlVFOworICB9Cit9CisKKy8qKgorICogZ3N0X3BhZF9zZXRfY2FwczoKKyAqIEBwYWQ6IGEgICNHc3RQYWQgdG8gc2V0IHRoZSBjYXBhYmlsaXRpZXMgb2YuCisgKiBAY2FwczogKHRyYW5zZmVyIG5vbmUpOiBhICNHc3RDYXBzIHRvIHNldC4KKyAqCisgKiBTZXRzIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhpcyBwYWQuIFRoZSBjYXBzIG11c3QgYmUgZml4ZWQuIEFueSBwcmV2aW91cworICogY2FwcyBvbiB0aGUgcGFkIHdpbGwgYmUgdW5yZWZmZWQuIFRoaXMgZnVuY3Rpb24gcmVmcyB0aGUgY2FwcyBzbyB5b3Ugc2hvdWxkCisgKiB1bnJlZiBpZiBhcyBzb29uIGFzIHlvdSBkb24ndCBuZWVkIGl0IGFueW1vcmUuCisgKiBJdCBpcyBwb3NzaWJsZSB0byBzZXQgTlVMTCBjYXBzLCB3aGljaCB3aWxsIG1ha2UgdGhlIHBhZCB1bm5lZ290aWF0ZWQKKyAqIGFnYWluLgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIGNhcHMgY291bGQgYmUgc2V0LiBGQUxTRSBpZiB0aGUgY2FwcyB3ZXJlIG5vdCBmaXhlZAorICogb3IgYmFkIHBhcmFtZXRlcnMgd2VyZSBwcm92aWRlZCB0byB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK2dib29sZWFuCitnc3RfcGFkX3NldF9jYXBzIChHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBjYXBzKQoreworICBHc3RFdmVudCAqZXZlbnQ7CisgIGdib29sZWFuIHJlcyA9IFRSVUU7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGNhcHMgIT0gTlVMTCAmJiBnc3RfY2Fwc19pc19maXhlZCAoY2FwcyksIEZBTFNFKTsKKworICBldmVudCA9IGdzdF9ldmVudF9uZXdfY2FwcyAoY2Fwcyk7CisKKyAgaWYgKEdTVF9QQURfSVNfU1JDIChwYWQpKQorICAgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLCBldmVudCk7CisgIGVsc2UKKyAgICByZXMgPSBnc3RfcGFkX3NlbmRfZXZlbnQgKHBhZCwgZXZlbnQpOworCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZG9fZXZlbnRfZnVuY3Rpb24gKEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiBldmVudCwKKyAgICBHc3RQYWRFdmVudEZ1bmN0aW9uIGV2ZW50ZnVuYywgZ2Jvb2xlYW4gKiBjYXBzX25vdGlmeSkKK3sKKyAgZ2Jvb2xlYW4gcmVzdWx0ID0gVFJVRSwgY2FsbF9ldmVudCA9IFRSVUU7CisgIEdzdENhcHMgKmNhcHMsICpvbGQsICp0ZW1wbDsKKworICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKKyAgICBjYXNlIEdTVF9FVkVOVF9DQVBTOgorICAgIHsKKyAgICAgIC8qIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG1vZGUgZm9yIGNhcHMgKi8KKyAgICAgIGdzdF9ldmVudF9wYXJzZV9jYXBzIChldmVudCwgJmNhcHMpOworCisgICAgICAvKiBTZWUgaWYgcGFkIGFjY2VwdHMgdGhlIGNhcHMgKi8KKyAgICAgIHRlbXBsID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKHBhZCk7CisgICAgICBpZiAoIWdzdF9jYXBzX2lzX3N1YnNldCAoY2FwcywgdGVtcGwpKQorICAgICAgICBnb3RvIG5vdF9hY2NlcHRlZDsKKworICAgICAgLyogY2hlY2sgaWYgaXQgY2hhbmdlZCAqLworICAgICAgaWYgKChvbGQgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKHBhZCkpKSB7CisgICAgICAgIGNhbGxfZXZlbnQgPSAhZ3N0X2NhcHNfaXNfZXF1YWwgKGNhcHMsIG9sZCk7CisgICAgICAgIGdzdF9jYXBzX3VucmVmIChvbGQpOworICAgICAgfQorICAgICAgaWYgKGNhbGxfZXZlbnQpCisgICAgICAgICpjYXBzX25vdGlmeSA9IFRSVUU7CisgICAgICBnc3RfY2Fwc191bnJlZiAodGVtcGwpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIGlmIChjYWxsX2V2ZW50KSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiY2FsbGluZyBldmVudCBmdW5jdGlvbiB3aXRoIGV2ZW50ICVwIiwgZXZlbnQpOworICAgIHJlc3VsdCA9IGV2ZW50ZnVuYyAocGFkLCBldmVudCk7CisgIH0gZWxzZSB7CisgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKKworICAvKiBFUlJPUlMgKi8KK25vdF9hY2NlcHRlZDoKKyAgeworICAgIGdzdF9jYXBzX3VucmVmICh0ZW1wbCk7CisgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0FQUywgcGFkLAorICAgICAgICAiY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCAiIG5vdCBhY2NlcHRlZCIsIGNhcHMpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCisvKiBmdW5jdGlvbiB0byBzZW5kIGFsbCBwZW5kaW5nIGV2ZW50cyBvbiB0aGUgc2lua3BhZCB0byB0aGUgZXZlbnQKKyAqIGZ1bmN0aW9uIGFuZCBjb2xsZWN0IHRoZSByZXN1bHRzLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2l0aAorICogdGhlIG9iamVjdCBsb2NrLiBUaGUgb2JqZWN0IGxvY2sgbWlnaHQgYmUgcmVsZWFzZWQgYnkgdGhpcyBmdW5jdGlvbi4KKyAqLworc3RhdGljIEdzdEZsb3dSZXR1cm4KK2dzdF9wYWRfdXBkYXRlX2V2ZW50cyAoR3N0UGFkICogcGFkKQoreworICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOworICBndWludCBpOworICBHc3RQYWRFdmVudEZ1bmN0aW9uIGV2ZW50ZnVuYzsKKyAgR3N0RXZlbnQgKmV2ZW50OworICBnYm9vbGVhbiBjYXBzX25vdGlmeSA9IEZBTFNFOworCisgIGlmIChHX1VOTElLRUxZICgoZXZlbnRmdW5jID0gR1NUX1BBRF9FVkVOVEZVTkMgKHBhZCkpID09IE5VTEwpKQorICAgIGdvdG8gbm9fZnVuY3Rpb247CisKKyAgZm9yIChpID0gMDsgaSA8IEdTVF9FVkVOVF9NQVhfU1RJQ0tZOyBpKyspIHsKKyAgICBnYm9vbGVhbiByZXM7CisgICAgUGFkRXZlbnQgKmV2OworCisgICAgZXYgPSAmcGFkLT5wcml2LT5ldmVudHNbaV07CisKKyAgICAvKiBza2lwIHdpdGhvdXQgcGVuZGluZyBldmVudCAqLworICAgIGlmICgoZXZlbnQgPSBnc3RfZXZlbnRfc3RlYWwgKCZldi0+cGVuZGluZykpID09IE5VTEwpCisgICAgICBjb250aW51ZTsKKworICAgIGdzdF9ldmVudF9yZWYgKGV2ZW50KTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKworICAgIHJlcyA9IGRvX2V2ZW50X2Z1bmN0aW9uIChwYWQsIGV2ZW50LCBldmVudGZ1bmMsICZjYXBzX25vdGlmeSk7CisKKyAgICAvKiB0aGluZ3MgY291bGQgaGF2ZSBjaGFuZ2VkIHdoaWxlIHdlIHJlbGVhc2UgdGhlIGxvY2ssIGNoZWNrIGlmIHdlIHN0aWxsCisgICAgICogYXJlIGhhbmRsaW5nIHRoZSBzYW1lIGV2ZW50LCBpZiB3ZSBkb24ndCBzb21ldGhpbmcgY2hhbmdlZCBhbmQgd2UgaGF2ZQorICAgICAqIHRvIHRyeSBhZ2Fpbi4gRklYTUUuIHdlIG5lZWQgYSBjb29raWUgaGVyZS4gRklYTUUsIHdlIGFsc28gd2FudCB0byByZW1vdmUKKyAgICAgKiB0aGF0IGxvY2sgZXZlbnR1YWxseSBhbmQgdGhlbiBkbyB0aGUgcmV0cnkgZWxzZXdoZXJlLiAqLworCisgICAgaWYgKHJlcykgeworICAgICAgLyogbWFrZSB0aGUgZXZlbnQgYWN0aXZlICovCisgICAgICBnc3RfZXZlbnRfdGFrZSAoJmV2LT5ldmVudCwgZXZlbnQpOworCisgICAgICAvKiBub3RpZnkgY2FwcyBjaGFuZ2Ugd2hlbiBuZWVkZWQgKi8KKyAgICAgIGlmIChjYXBzX25vdGlmeSkgeworICAgICAgICBnX29iamVjdF9ub3RpZnlfYnlfcHNwZWMgKChHT2JqZWN0ICopIHBhZCwgcHNwZWNfY2Fwcyk7CisgICAgICAgIGNhcHNfbm90aWZ5ID0gRkFMU0U7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworICAgICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7CisgICAgfQorICAgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKKyAgfQorICAvKiB3aGVuIHdlIGdldCBoZXJlIGFsbCBldmVudHMgd2VyZSBzdWNjZXNzZnVsbHkgdXBkYXRlZC4gKi8KKyAgcmV0dXJuIHJldDsKKworICAvKiBFUlJPUlMgKi8KK25vX2Z1bmN0aW9uOgorICB7CisgICAgZ193YXJuaW5nICgicGFkICVzOiVzIGhhcyBubyBldmVudCBoYW5kbGVyLCBmaWxlIGEgYnVnLiIsCisgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7CisgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CisgIH0KK30KKworLyoqCisgKiBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwczoKKyAqIEBwYWQ6IGEgI0dzdFBhZCB0byBnZXQgdGhlIHRlbXBsYXRlIGNhcGFiaWxpdGllcyBmcm9tLgorICoKKyAqIEdldHMgdGhlIGNhcGFiaWxpdGllcyBmb3IgQHBhZCdzIHRlbXBsYXRlLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RDYXBzIG9mIHRoaXMgcGFkIHRlbXBsYXRlLgorICogVW5yZWYgYWZ0ZXIgdXNhZ2UuCisgKi8KK0dzdENhcHMgKgorZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKEdzdFBhZCAqIHBhZCkKK3sKKyAgc3RhdGljIEdzdFN0YXRpY0NhcHMgYW55Y2FwcyA9IEdTVF9TVEFUSUNfQ0FQUyAoIkFOWSIpOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBOVUxMKTsKKworICBpZiAoR1NUX1BBRF9QQURfVEVNUExBVEUgKHBhZCkpCisgICAgcmV0dXJuIGdzdF9wYWRfdGVtcGxhdGVfZ2V0X2NhcHMgKEdTVF9QQURfUEFEX1RFTVBMQVRFIChwYWQpKTsKKworICByZXR1cm4gZ3N0X3N0YXRpY19jYXBzX2dldCAoJmFueWNhcHMpOworfQorCisvKioKKyAqIGdzdF9wYWRfZ2V0X3BlZXI6CisgKiBAcGFkOiBhICNHc3RQYWQgdG8gZ2V0IHRoZSBwZWVyIG9mLgorICoKKyAqIEdldHMgdGhlIHBlZXIgb2YgQHBhZC4gVGhpcyBmdW5jdGlvbiByZWZzIHRoZSBwZWVyIHBhZCBzbworICogeW91IG5lZWQgdG8gdW5yZWYgaXQgYWZ0ZXIgdXNlLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIHBlZXIgI0dzdFBhZC4gVW5yZWYgYWZ0ZXIgdXNhZ2UuCisgKgorICogTVQgc2FmZS4KKyAqLworR3N0UGFkICoKK2dzdF9wYWRfZ2V0X3BlZXIgKEdzdFBhZCAqIHBhZCkKK3sKKyAgR3N0UGFkICpyZXN1bHQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIE5VTEwpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKKyAgcmVzdWx0ID0gR1NUX1BBRF9QRUVSIChwYWQpOworICBpZiAocmVzdWx0KQorICAgIGdzdF9vYmplY3RfcmVmIChyZXN1bHQpOworICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwczoKKyAqIEBwYWQ6IGEgI0dzdFBhZC4KKyAqCisgKiBHZXRzIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGFsbG93ZWQgbWVkaWEgdHlwZXMgdGhhdCBjYW4gZmxvdyB0aHJvdWdoCisgKiBAcGFkIGFuZCBpdHMgcGVlci4KKyAqCisgKiBUaGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgaXMgY2FsY3VsYXRlZCBhcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSByZXN1bHRzIG9mCisgKiBjYWxsaW5nIGdzdF9wYWRfZ2V0X2NhcHMoKSBvbiBAcGFkIGFuZCBpdHMgcGVlci4gVGhlIGNhbGxlciBvd25zIGEgcmVmZXJlbmNlCisgKiBvbiB0aGUgcmVzdWx0aW5nIGNhcHMuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgYWxsb3dlZCAjR3N0Q2FwcyBvZiB0aGUgcGFkIGxpbmsuIFVucmVmIHRoZQorICogICAgIGNhcHMgd2hlbiB5b3Ugbm8gbG9uZ2VyIG5lZWQgaXQuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBOVUxMIHdoZW4gQHBhZAorICogICAgIGhhcyBubyBwZWVyLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK0dzdENhcHMgKgorZ3N0X3BhZF9nZXRfYWxsb3dlZF9jYXBzIChHc3RQYWQgKiBwYWQpCit7CisgIEdzdENhcHMgKm15Y2FwczsKKyAgR3N0Q2FwcyAqY2FwczsKKyAgR3N0Q2FwcyAqcGVlcmNhcHM7CisgIEdzdFBhZCAqcGVlcjsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgTlVMTCk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChwYWQpOworICBwZWVyID0gR1NUX1BBRF9QRUVSIChwYWQpOworICBpZiAoR19VTkxJS0VMWSAocGVlciA9PSBOVUxMKSkKKyAgICBnb3RvIG5vX3BlZXI7CisKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfUFJPUEVSVElFUywgcGFkLCAiZ2V0dGluZyBhbGxvd2VkIGNhcHMiKTsKKworICBnc3Rfb2JqZWN0X3JlZiAocGVlcik7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworICBteWNhcHMgPSBnc3RfcGFkX2dldF9jYXBzIChwYWQsIE5VTEwpOworCisgIHBlZXJjYXBzID0gZ3N0X3BhZF9nZXRfY2FwcyAocGVlciwgTlVMTCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBlZXIpOworCisgIGNhcHMgPSBnc3RfY2Fwc19pbnRlcnNlY3QgKG15Y2FwcywgcGVlcmNhcHMpOworICBnc3RfY2Fwc191bnJlZiAocGVlcmNhcHMpOworICBnc3RfY2Fwc191bnJlZiAobXljYXBzKTsKKworICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9DQVBTLCBwYWQsICJhbGxvd2VkIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsCisgICAgICBjYXBzKTsKKworICByZXR1cm4gY2FwczsKKworbm9fcGVlcjoKKyAgeworICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1BST1BFUlRJRVMsIHBhZCwgIm5vIHBlZXIiKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKworICAgIHJldHVybiBOVUxMOworICB9Cit9CisKKy8qKgorICogZ3N0X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2RlZmF1bHQ6CisgKiBAcGFkOiB0aGUgI0dzdFBhZCB0byBnZXQgdGhlIGludGVybmFsIGxpbmtzIG9mLgorICoKKyAqIEl0ZXJhdGUgdGhlIGxpc3Qgb2YgcGFkcyB0byB3aGljaCB0aGUgZ2l2ZW4gcGFkIGlzIGxpbmtlZCB0byBpbnNpZGUgb2YKKyAqIHRoZSBwYXJlbnQgZWxlbWVudC4KKyAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgaGFuZGxlciwgYW5kIHRodXMgcmV0dXJucyBhbiBpdGVyYXRvciBvZiBhbGwgb2YgdGhlCisgKiBwYWRzIGluc2lkZSB0aGUgcGFyZW50IGVsZW1lbnQgd2l0aCBvcHBvc2l0ZSBkaXJlY3Rpb24uCisgKgorICogVGhlIGNhbGxlciBtdXN0IGZyZWUgdGhpcyBpdGVyYXRvciBhZnRlciB1c2Ugd2l0aCBnc3RfaXRlcmF0b3JfZnJlZSgpLgorICoKKyAqIFJldHVybnM6IGEgI0dzdEl0ZXJhdG9yIG9mICNHc3RQYWQsIG9yIE5VTEwgaWYgQHBhZCBoYXMgbm8gcGFyZW50LiBVbnJlZiBlYWNoCisgKiByZXR1cm5lZCBwYWQgd2l0aCBnc3Rfb2JqZWN0X3VucmVmKCkuCisgKgorICogU2luY2U6IDAuMTAuMjEKKyAqLworR3N0SXRlcmF0b3IgKgorZ3N0X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2RlZmF1bHQgKEdzdFBhZCAqIHBhZCkKK3sKKyAgR3N0SXRlcmF0b3IgKnJlczsKKyAgR0xpc3QgKipwYWRsaXN0OworICBndWludDMyICpjb29raWU7CisgIEdNdXRleCAqbG9jazsKKyAgZ3BvaW50ZXIgb3duZXI7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIE5VTEwpOworCisgIHsKKyAgICBHc3RFbGVtZW50ICpwYXJlbnQ7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7CisgICAgcGFyZW50ID0gR1NUX1BBRF9QQVJFTlQgKHBhZCk7CisgICAgaWYgKCFwYXJlbnQgfHwgIUdTVF9JU19FTEVNRU5UIChwYXJlbnQpKQorICAgICAgZ290byBub19wYXJlbnQ7CisKKyAgICBnc3Rfb2JqZWN0X3JlZiAocGFyZW50KTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKworICAgIGlmIChwYWQtPmRpcmVjdGlvbiA9PSBHU1RfUEFEX1NSQykKKyAgICAgIHBhZGxpc3QgPSAmcGFyZW50LT5zaW5rcGFkczsKKyAgICBlbHNlCisgICAgICBwYWRsaXN0ID0gJnBhcmVudC0+c3JjcGFkczsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIk1ha2luZyBpdGVyYXRvciIpOworCisgICAgY29va2llID0gJnBhcmVudC0+cGFkc19jb29raWU7CisgICAgb3duZXIgPSBwYXJlbnQ7CisgICAgbG9jayA9IEdTVF9PQkpFQ1RfR0VUX0xPQ0sgKHBhcmVudCk7CisgIH0KKworICByZXMgPSBnc3RfaXRlcmF0b3JfbmV3X2xpc3QgKEdTVF9UWVBFX1BBRCwKKyAgICAgIGxvY2ssIGNvb2tpZSwgcGFkbGlzdCwgKEdPYmplY3QgKikgb3duZXIsIE5VTEwpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKG93bmVyKTsKKworICByZXR1cm4gcmVzOworCisgIC8qIEVSUk9SUyAqLworbm9fcGFyZW50OgorICB7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAibm8gcGFyZW50IGVsZW1lbnQiKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorfQorCisvKioKKyAqIGdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rczoKKyAqIEBwYWQ6IHRoZSBHc3RQYWQgdG8gZ2V0IHRoZSBpbnRlcm5hbCBsaW5rcyBvZi4KKyAqCisgKiBHZXRzIGFuIGl0ZXJhdG9yIGZvciB0aGUgcGFkcyB0byB3aGljaCB0aGUgZ2l2ZW4gcGFkIGlzIGxpbmtlZCB0byBpbnNpZGUKKyAqIG9mIHRoZSBwYXJlbnQgZWxlbWVudC4KKyAqCisgKiBFYWNoICNHc3RQYWQgZWxlbWVudCB5aWVsZGVkIGJ5IHRoZSBpdGVyYXRvciB3aWxsIGhhdmUgaXRzIHJlZmNvdW50IGluY3JlYXNlZCwKKyAqIHNvIHVucmVmIGFmdGVyIHVzZS4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnc3RfaXRlcmF0b3JfZnJlZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdEl0ZXJhdG9yIG9mICNHc3RQYWQgb3IgJU5VTEwgd2hlbiB0aGUKKyAqICAgICBwYWQgZG9lcyBub3QgaGF2ZSBhbiBpdGVyYXRvciBmdW5jdGlvbiBjb25maWd1cmVkLiBVc2UKKyAqICAgICBnc3RfaXRlcmF0b3JfZnJlZSgpIGFmdGVyIHVzYWdlLgorICoKKyAqIFNpbmNlOiAwLjEwLjIxCisgKi8KK0dzdEl0ZXJhdG9yICoKK2dzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rcyAoR3N0UGFkICogcGFkKQoreworICBHc3RJdGVyYXRvciAqcmVzID0gTlVMTDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgTlVMTCk7CisKKyAgaWYgKEdTVF9QQURfSVRFUklOVExJTktGVU5DIChwYWQpKQorICAgIHJlcyA9IEdTVF9QQURfSVRFUklOVExJTktGVU5DIChwYWQpIChwYWQpOworCisgIHJldHVybiByZXM7Cit9CisKKy8qKgorICogZ3N0X3BhZF9mb3J3YXJkOgorICogQHBhZDogYSAjR3N0UGFkCisgKiBAZm9yd2FyZDogYSAjR3N0UGFkRm9yd2FyZEZ1bmN0aW9uCisgKiBAdXNlcl9kYXRhOiB1c2VyIGRhdGEgcGFzc2VkIHRvIEBmb3J3YXJkCisgKgorICogQ2FsbHMgQGZvcndhcmQgZm9yIGFsbCBpbnRlcm5hbGx5IGxpbmtlZCBwYWRzIG9mIEBwYWQuIFRoaXMgZnVuY3Rpb24gZGVhbHMgd2l0aAorICogZHluYW1pY2FsbHkgY2hhbmdpbmcgaW50ZXJuYWwgcGFkcyBhbmQgd2lsbCBtYWtlIHN1cmUgdGhhdCB0aGUgQGZvcndhcmQKKyAqIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIG9uY2UgZm9yIGVhY2ggcGFkLgorICoKKyAqIFdoZW4gQGZvcndhcmQgcmV0dXJucyBUUlVFLCBubyBmdXJ0aGVyIHBhZHMgd2lsbCBiZSBwcm9jZXNzZWQuCisgKgorICogUmV0dXJuczogVFJVRSBpZiBvbmUgb2YgdGhlIGRpc3BhdGNoZXIgZnVuY3Rpb25zIHJldHVybmVkIFRSVUUuCisgKi8KK2dib29sZWFuCitnc3RfcGFkX2ZvcndhcmQgKEdzdFBhZCAqIHBhZCwgR3N0UGFkRm9yd2FyZEZ1bmN0aW9uIGZvcndhcmQsCisgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKKyAgR3N0SXRlcmF0b3IgKml0ZXI7CisgIGdib29sZWFuIGRvbmUgPSBGQUxTRTsKKyAgR1ZhbHVlIGl0ZW0gPSB7IDAsIH07CisgIEdMaXN0ICpwdXNoZWRfcGFkcyA9IE5VTEw7CisKKyAgaXRlciA9IGdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rcyAocGFkKTsKKworICBpZiAoIWl0ZXIpCisgICAgZ290byBub19pdGVyOworCisgIHdoaWxlICghZG9uZSkgeworICAgIHN3aXRjaCAoZ3N0X2l0ZXJhdG9yX25leHQgKGl0ZXIsICZpdGVtKSkgeworICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfT0s6CisgICAgICB7CisgICAgICAgIEdzdFBhZCAqaW50cGFkOworCisgICAgICAgIGludHBhZCA9IGdfdmFsdWVfZ2V0X29iamVjdCAoJml0ZW0pOworCisgICAgICAgIC8qIGlmIGFscmVhZHkgcHVzaGVkLCBza2lwLiBGSVhNRSwgZmluZCBzb21ldGhpbmcgZmFzdGVyIHRvIHRhZyBwYWRzICovCisgICAgICAgIGlmIChnX2xpc3RfZmluZCAocHVzaGVkX3BhZHMsIGludHBhZCkpIHsKKyAgICAgICAgICBnX3ZhbHVlX3Jlc2V0ICgmaXRlbSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBHU1RfTE9HX09CSkVDVCAocGFkLCAiY2FsbGluZyBmb3J3YXJkIGZ1bmN0aW9uIG9uIHBhZCAlczolcyIsCisgICAgICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKGludHBhZCkpOworICAgICAgICBkb25lID0gcmVzdWx0ID0gZm9yd2FyZCAoaW50cGFkLCB1c2VyX2RhdGEpOworCisgICAgICAgIHB1c2hlZF9wYWRzID0gZ19saXN0X3ByZXBlbmQgKHB1c2hlZF9wYWRzLCBpbnRwYWQpOworCisgICAgICAgIGdfdmFsdWVfcmVzZXQgKCZpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6CisgICAgICAgIC8qIFdlIGRvbid0IHJlc2V0IHRoZSByZXN1bHQgaGVyZSBiZWNhdXNlIHdlIGRvbid0IHB1c2ggdGhlIGV2ZW50CisgICAgICAgICAqIGFnYWluIG9uIHBhZHMgdGhhdCBnb3QgdGhlIGV2ZW50IGFscmVhZHkgYW5kIGJlY2F1c2Ugd2UgbmVlZAorICAgICAgICAgKiB0byBjb25zaWRlciB0aGUgcmVzdWx0IG9mIHRoZSBwcmV2aW91cyBwdXNoZXMgKi8KKyAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAoaXRlcik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRVJST1I6CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHBhZCwgIkNvdWxkIG5vdCBpdGVyYXRlIG92ZXIgaW50ZXJuYWxseSBsaW5rZWQgcGFkcyIpOworICAgICAgICBkb25lID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgorICAgICAgICBkb25lID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGdfdmFsdWVfdW5zZXQgKCZpdGVtKTsKKyAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0ZXIpOworCisgIGdfbGlzdF9mcmVlIChwdXNoZWRfcGFkcyk7CisKK25vX2l0ZXI6CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIEdzdEV2ZW50ICpldmVudDsKKyAgZ2Jvb2xlYW4gcmVzdWx0OworICBnYm9vbGVhbiBkaXNwYXRjaGVkOworfSBFdmVudERhdGE7CisKK3N0YXRpYyBnYm9vbGVhbgorZXZlbnRfZm9yd2FyZF9mdW5jIChHc3RQYWQgKiBwYWQsIEV2ZW50RGF0YSAqIGRhdGEpCit7CisgIC8qIGZvciBlYWNoIHBhZCB3ZSBzZW5kIHRvLCB3ZSBzaG91bGQgcmVmIHRoZSBldmVudDsgaXQncyB1cAorICAgKiB0byBkb3duc3RyZWFtIHRvIHVucmVmIGFnYWluIHdoZW4gaGFuZGxlZC4gKi8KKyAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgIlJlZmZpbmcgYW5kIHB1c2hpbmcgZXZlbnQgJXAgKCVzKSB0byAlczolcyIsCisgICAgICBkYXRhLT5ldmVudCwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZGF0YS0+ZXZlbnQpLCBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOworCisgIGRhdGEtPnJlc3VsdCB8PSBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZ3N0X2V2ZW50X3JlZiAoZGF0YS0+ZXZlbnQpKTsKKworICBkYXRhLT5kaXNwYXRjaGVkID0gVFJVRTsKKworICAvKiBkb24ndCBzdG9wICovCisgIHJldHVybiBGQUxTRTsKK30KKworLyoqCisgKiBnc3RfcGFkX2V2ZW50X2RlZmF1bHQ6CisgKiBAcGFkOiBhICNHc3RQYWQgdG8gY2FsbCB0aGUgZGVmYXVsdCBldmVudCBoYW5kbGVyIG9uLgorICogQGV2ZW50OiAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0RXZlbnQgdG8gaGFuZGxlLgorICoKKyAqIEludm9rZXMgdGhlIGRlZmF1bHQgZXZlbnQgaGFuZGxlciBmb3IgdGhlIGdpdmVuIHBhZC4KKyAqCisgKiBUaGUgRU9TIGV2ZW50IHdpbGwgcGF1c2UgdGhlIHRhc2sgYXNzb2NpYXRlZCB3aXRoIEBwYWQgYmVmb3JlIGl0IGlzIGZvcndhcmRlZAorICogdG8gYWxsIGludGVybmFsbHkgbGlua2VkIHBhZHMsCisgKgorICogVGhlIENBUFMgZXZlbnQgd2lsbCBuZXZlciBiZSBmb3J3YXJkZWQuCisgKgorICogVGhlIHRoZSBldmVudCBpcyBzZW50IHRvIGFsbCBwYWRzIGludGVybmFsbHkgbGlua2VkIHRvIEBwYWQuIFRoaXMgZnVuY3Rpb24KKyAqIHRha2VzIG93bmVyc2hpcCBvZiBAZXZlbnQuCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgZXZlbnQgd2FzIHNlbnQgc3VjY2Vzc2Z1bGx5LgorICovCitnYm9vbGVhbgorZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpCit7CisgIGdib29sZWFuIHJlc3VsdDsKKyAgRXZlbnREYXRhIGRhdGE7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGV2ZW50ICE9IE5VTEwsIEZBTFNFKTsKKworICBHU1RfTE9HX09CSkVDVCAocGFkLCAiZGVmYXVsdCBldmVudCBoYW5kbGVyIik7CisKKyAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7CisgICAgY2FzZSBHU1RfRVZFTlRfRU9TOgorICAgIHsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInBhdXNpbmcgdGFzayBiZWNhdXNlIG9mIGVvcyIpOworICAgICAgZ3N0X3BhZF9wYXVzZV90YXNrIChwYWQpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIGRhdGEuZXZlbnQgPSBldmVudDsKKyAgZGF0YS5kaXNwYXRjaGVkID0gRkFMU0U7CisgIGRhdGEucmVzdWx0ID0gRkFMU0U7CisKKyAgZ3N0X3BhZF9mb3J3YXJkIChwYWQsIChHc3RQYWRGb3J3YXJkRnVuY3Rpb24pIGV2ZW50X2ZvcndhcmRfZnVuYywgJmRhdGEpOworCisgIC8qIGZvciBzaW5rcGFkcyB3aXRob3V0IGEgcGFyZW50IGVsZW1lbnQgb3Igd2l0aG91dCBpbnRlcm5hbCBsaW5rcywgbm90aGluZworICAgKiB3aWxsIGJlIGRpc3BhdGNoZWQgYnV0IHdlIHN0aWxsIHdhbnQgdG8gcmV0dXJuIFRSVUUuICovCisgIGlmIChkYXRhLmRpc3BhdGNoZWQpCisgICAgcmVzdWx0ID0gZGF0YS5yZXN1bHQ7CisgIGVsc2UKKyAgICByZXN1bHQgPSBUUlVFOworCisgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZ3N0X3BhZF9xdWVyeToKKyAqIEBwYWQ6IGEgI0dzdFBhZCB0byBpbnZva2UgdGhlIGRlZmF1bHQgcXVlcnkgb24uCisgKiBAcXVlcnk6ICh0cmFuc2ZlciBub25lKTogdGhlICNHc3RRdWVyeSB0byBwZXJmb3JtLgorICoKKyAqIERpc3BhdGNoZXMgYSBxdWVyeSB0byBhIHBhZC4gVGhlIHF1ZXJ5IHNob3VsZCBoYXZlIGJlZW4gYWxsb2NhdGVkIGJ5IHRoZQorICogY2FsbGVyIHZpYSBvbmUgb2YgdGhlIHR5cGUtc3BlY2lmaWMgYWxsb2NhdGlvbiBmdW5jdGlvbnMuIFRoZSBlbGVtZW50IHRoYXQKKyAqIHRoZSBwYWQgYmVsb25ncyB0byBpcyByZXNwb25zaWJsZSBmb3IgZmlsbGluZyB0aGUgcXVlcnkgd2l0aCBhbiBhcHByb3ByaWF0ZQorICogcmVzcG9uc2UsIHdoaWNoIHNob3VsZCB0aGVuIGJlIHBhcnNlZCB3aXRoIGEgdHlwZS1zcGVjaWZpYyBxdWVyeSBwYXJzaW5nCisgKiBmdW5jdGlvbi4KKyAqCisgKiBBZ2FpbiwgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgYm90aCB0aGUgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIG9mCisgKiB0aGUgcXVlcnkgc3RydWN0dXJlLgorICoKKyAqIFBsZWFzZSBhbHNvIG5vdGUgdGhhdCBzb21lIHF1ZXJpZXMgbWlnaHQgbmVlZCBhIHJ1bm5pbmcgcGlwZWxpbmUgdG8gd29yay4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBxdWVyeSBjb3VsZCBiZSBwZXJmb3JtZWQuCisgKi8KK2dib29sZWFuCitnc3RfcGFkX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdFF1ZXJ5ICogcXVlcnkpCit7CisgIGdib29sZWFuIHJlczsKKyAgR3N0UGFkUXVlcnlGdW5jdGlvbiBmdW5jOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUVVFUlkgKHF1ZXJ5KSwgRkFMU0UpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInNlbmRpbmcgcXVlcnkgJXAgKCVzKSIsIHF1ZXJ5LAorICAgICAgR1NUX1FVRVJZX1RZUEVfTkFNRSAocXVlcnkpKTsKKworICBpZiAoKGZ1bmMgPSBHU1RfUEFEX1FVRVJZRlVOQyAocGFkKSkgPT0gTlVMTCkKKyAgICBnb3RvIG5vX2Z1bmM7CisKKyAgcmVzID0gZnVuYyAocGFkLCBxdWVyeSk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAic2VudCBxdWVyeSAlcCAoJXMpLCByZXN1bHQgJWQiLCBxdWVyeSwKKyAgICAgIEdTVF9RVUVSWV9UWVBFX05BTUUgKHF1ZXJ5KSwgcmVzKTsKKworICByZXR1cm4gcmVzOworCitub19mdW5jOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiaGFkIG5vIHF1ZXJ5IGZ1bmN0aW9uIik7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKKy8qKgorICogZ3N0X3BhZF9wZWVyX3F1ZXJ5OgorICogQHBhZDogYSAjR3N0UGFkIHRvIGludm9rZSB0aGUgcGVlciBxdWVyeSBvbi4KKyAqIEBxdWVyeTogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI0dzdFF1ZXJ5IHRvIHBlcmZvcm0uCisgKgorICogUGVyZm9ybXMgZ3N0X3BhZF9xdWVyeSgpIG9uIHRoZSBwZWVyIG9mIEBwYWQuCisgKgorICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgYm90aCB0aGUgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIG9mCisgKiB0aGUgcXVlcnkgc3RydWN0dXJlLgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIHF1ZXJ5IGNvdWxkIGJlIHBlcmZvcm1lZC4gVGhpcyBmdW5jdGlvbiByZXR1cm5zICVGQUxTRQorICogaWYgQHBhZCBoYXMgbm8gcGVlci4KKyAqCisgKiBTaW5jZTogMC4xMC4xNQorICovCitnYm9vbGVhbgorZ3N0X3BhZF9wZWVyX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdFF1ZXJ5ICogcXVlcnkpCit7CisgIEdzdFBhZCAqcGVlcnBhZDsKKyAgZ2Jvb2xlYW4gcmVzdWx0OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUVVFUlkgKHF1ZXJ5KSwgRkFMU0UpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKKworICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJwZWVyIHF1ZXJ5ICVwICglcykiLCBxdWVyeSwKKyAgICAgIEdTVF9RVUVSWV9UWVBFX05BTUUgKHF1ZXJ5KSk7CisKKyAgcGVlcnBhZCA9IEdTVF9QQURfUEVFUiAocGFkKTsKKyAgaWYgKEdfVU5MSUtFTFkgKHBlZXJwYWQgPT0gTlVMTCkpCisgICAgZ290byBub19wZWVyOworCisgIGdzdF9vYmplY3RfcmVmIChwZWVycGFkKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisKKyAgcmVzdWx0ID0gZ3N0X3BhZF9xdWVyeSAocGVlcnBhZCwgcXVlcnkpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHBlZXJwYWQpOworCisgIHJldHVybiByZXN1bHQ7CisKKyAgLyogRVJST1JTICovCitub19wZWVyOgorICB7CisgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYWQsICJwYWQgaGFzIG5vIHBlZXIiKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworLyoqCisgKiBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQ6CisgKiBAcGFkOiBhICNHc3RQYWQgdG8gY2FsbCB0aGUgZGVmYXVsdCBxdWVyeSBoYW5kbGVyIG9uLgorICogQHF1ZXJ5OiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjR3N0UXVlcnkgdG8gaGFuZGxlLgorICoKKyAqIEludm9rZXMgdGhlIGRlZmF1bHQgcXVlcnkgaGFuZGxlciBmb3IgdGhlIGdpdmVuIHBhZC4KKyAqIFRoZSBxdWVyeSBpcyBzZW50IHRvIGFsbCBwYWRzIGludGVybmFsbHkgbGlua2VkIHRvIEBwYWQuIE5vdGUgdGhhdAorICogaWYgdGhlcmUgYXJlIG1hbnkgcG9zc2libGUgc2luayBwYWRzIHRoYXQgYXJlIGludGVybmFsbHkgbGlua2VkIHRvCisgKiBAcGFkLCBvbmx5IG9uZSB3aWxsIGJlIHNlbnQgdGhlIHF1ZXJ5LgorICogTXVsdGktc2lua3BhZCBlbGVtZW50cyBzaG91bGQgaW1wbGVtZW50IGN1c3RvbSBxdWVyeSBoYW5kbGVycy4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBxdWVyeSB3YXMgcGVyZm9ybWVkIHN1Y2Nlc3NmdWxseS4KKyAqLworZ2Jvb2xlYW4KK2dzdF9wYWRfcXVlcnlfZGVmYXVsdCAoR3N0UGFkICogcGFkLCBHc3RRdWVyeSAqIHF1ZXJ5KQoreworICBnYm9vbGVhbiBmb3J3YXJkID0gVFJVRSwgcmV0ID0gRkFMU0U7CisKKyAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7CisgICAgY2FzZSBHU1RfUVVFUllfU0NIRURVTElORzoKKyAgICAgIGZvcndhcmQgPSBGQUxTRTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1FVRVJZX1BPU0lUSU9OOgorICAgIGNhc2UgR1NUX1FVRVJZX1NFRUtJTkc6CisgICAgY2FzZSBHU1RfUVVFUllfRk9STUFUUzoKKyAgICBjYXNlIEdTVF9RVUVSWV9MQVRFTkNZOgorICAgIGNhc2UgR1NUX1FVRVJZX0pJVFRFUjoKKyAgICBjYXNlIEdTVF9RVUVSWV9SQVRFOgorICAgIGNhc2UgR1NUX1FVRVJZX0NPTlZFUlQ6CisgICAgY2FzZSBHU1RfUVVFUllfQUxMT0NBVElPTjoKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKworICBpZiAoZm9yd2FyZCkgeworICAgIHJldCA9IGdzdF9wYWRfZm9yd2FyZAorICAgICAgICAocGFkLCAoR3N0UGFkRm9yd2FyZEZ1bmN0aW9uKSBnc3RfcGFkX3BlZXJfcXVlcnksIHF1ZXJ5KTsKKyAgfQorICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAorcHJvYmVfaG9va19tYXJzaGFsIChHSG9vayAqIGhvb2ssIFByb2JlTWFyc2hhbGwgKiBkYXRhKQoreworICBHc3RQYWQgKnBhZCA9IGRhdGEtPnBhZDsKKyAgR3N0UHJvYmVUeXBlIGZsYWdzOworICBHc3RQYWRQcm9iZUNhbGxiYWNrIGNhbGxiYWNrOworICBHc3RQcm9iZVJldHVybiByZXQ7CisKKyAgLyogaWYgd2UgaGF2ZSBjYWxsZWQgdGhpcyBjYWxsYmFjaywgZG8gbm90aGluZyAqLworICBpZiAoUFJPQkVfQ09PS0lFIChob29rKSA9PSBkYXRhLT5jb29raWUpCisgICAgcmV0dXJuOworCisgIFBST0JFX0NPT0tJRSAoaG9vaykgPSBkYXRhLT5jb29raWU7CisKKyAgZmxhZ3MgPSBob29rLT5mbGFncyA+PiBHX0hPT0tfRkxBR19VU0VSX1NISUZUOworCisgIC8qIG9uZSBvZiB0aGUgZGF0YSB0eXBlcyAqLworICBpZiAoKGZsYWdzICYgR1NUX1BST0JFX1RZUEVfREFUQSAmIGRhdGEtPm1hc2spID09IDApCisgICAgcmV0dXJuOworICAvKiBvbmUgb2YgdGhlIHNjaGVkdWxpbmcgdHlwZXMgKi8KKyAgaWYgKChmbGFncyAmIEdTVF9QUk9CRV9UWVBFX1NDSEVEVUxJTkcgJiBkYXRhLT5tYXNrKSA9PSAwKQorICAgIHJldHVybjsKKyAgLyogYWxsIG9mIHRoZSBibG9ja2luZyB0eXBlcyBtdXN0IG1hdGNoICovCisgIGlmICgoZmxhZ3MgJiBHU1RfUFJPQkVfVFlQRV9CTE9DS0lORykgIT0KKyAgICAgIChkYXRhLT5tYXNrICYgR1NUX1BST0JFX1RZUEVfQkxPQ0tJTkcpKQorICAgIHJldHVybjsKKworICBHU1RfQ0FUX0xPR19PQkpFQ1QgKEdTVF9DQVRfU0NIRURVTElORywgcGFkLAorICAgICAgImhvb2sgJWx1IHdpdGggZmxhZ3MgMHglMDh4IG1hdGNoZXMiLCBob29rLT5ob29rX2lkLCBmbGFncyk7CisKKyAgY2FsbGJhY2sgPSAoR3N0UGFkUHJvYmVDYWxsYmFjaykgaG9vay0+ZnVuYzsKKyAgaWYgKGNhbGxiYWNrID09IE5VTEwpCisgICAgcmV0dXJuOworCisgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworCisgIHJldCA9IGNhbGxiYWNrIChwYWQsIGRhdGEtPm1hc2ssIGRhdGEtPnR5cGVfZGF0YSwgaG9vay0+ZGF0YSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChwYWQpOworCisgIHN3aXRjaCAocmV0KSB7CisgICAgY2FzZSBHU1RfUFJPQkVfUkVNT1ZFOgorICAgICAgLyogcmVtb3ZlIHRoZSBwcm9iZSAqLworICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiYXNrZWQgdG8gcmVtb3ZlIGhvb2siKTsKKyAgICAgIGNsZWFudXBfaG9vayAocGFkLCBob29rKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1BST0JFX0RST1A6CisgICAgICAvKiBuZWVkIHRvIGRyb3AgdGhlIGRhdGEsIG1ha2Ugc3VyZSBvdGhlciBwcm9iZXMgZG9uJ3QgZ2V0IGNhbGxlZAorICAgICAgICogYW55bW9yZSAqLworICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiYXNrZWQgdG8gZHJvcCBpdGVtIik7CisgICAgICBkYXRhLT5tYXNrID0gR1NUX1BST0JFX1RZUEVfSU5WQUxJRDsKKyAgICAgIGRhdGEtPnJldCA9IEdTVF9QUk9CRV9EUk9QOworICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfUFJPQkVfUEFTUzoKKyAgICAgIC8qIGluZm9ybSB0aGUgcGFkIGJsb2NrIHRvIGxldCB0aGluZ3MgcGFzcyAqLworICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiYXNrZWQgdG8gcGFzcyBpdGVtIik7CisgICAgICBkYXRhLT5wYXNzID0gVFJVRTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJwcm9iZSByZXR1cm5lZCAlZCIsIHJldCk7CisgICAgICBicmVhazsKKyAgfQorfQorCisjZGVmaW5lIFBST0JFKHBhZCxtYXNrLGRhdGEsbGFiZWwpICAgICAgICAgICAgICAgIFwKKyAgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChHX1VOTElLRUxZIChwYWQtPm51bV9wcm9iZXMpKSB7ICAgICAgICAgICBcCisgICAgICByZXQgPSBkb19wcm9iZV9jYWxsYmFja3MgKHBhZCwgbWFzaywgZGF0YSk7IFwKKyAgICAgIGlmIChHX1VOTElLRUxZIChyZXQgIT0gR1NUX0ZMT1dfT0spKSAgICAgICAgXAorICAgICAgICBnb3RvIGxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSBHX1NUTVRfRU5ECisKK3N0YXRpYyBHc3RGbG93UmV0dXJuCitkb19wcm9iZV9jYWxsYmFja3MgKEdzdFBhZCAqIHBhZCwgR3N0UHJvYmVUeXBlIG1hc2ssIGdwb2ludGVyIHR5cGVfZGF0YSkKK3sKKyAgUHJvYmVNYXJzaGFsbCBkYXRhOworICBndWludCBjb29raWU7CisKKyAgZGF0YS5wYWQgPSBwYWQ7CisgIGRhdGEubWFzayA9IG1hc2s7CisgIGRhdGEudHlwZV9kYXRhID0gdHlwZV9kYXRhOworICBkYXRhLnJldCA9IEdTVF9QUk9CRV9PSzsKKyAgZGF0YS5wYXNzID0gRkFMU0U7CisgIGRhdGEuY29va2llID0gcGFkLT5wcml2LT5wcm9iZV9jb29raWUrKzsKKworYWdhaW46CisgIGNvb2tpZSA9IHBhZC0+cHJpdi0+cHJvYmVfY29va2llOworCisgIGdfaG9va19saXN0X21hcnNoYWwgKCZwYWQtPnByb2JlcywgRkFMU0UsCisgICAgICAoR0hvb2tNYXJzaGFsbGVyKSBwcm9iZV9ob29rX21hcnNoYWwsICZkYXRhKTsKKworICAvKiBpZiB0aGUgbGlzdCBjaGFuZ2VkLCBjYWxsIHRoZSBuZXcgY2FsbGJhY2tzICh0aGV5IHdpbGwgbm90IGhhdmUgdGhlaXIKKyAgICogY29va2llIHNldCB0byBkYXRhLmNvb2tpZSAqLworICBpZiAoY29va2llICE9IHBhZC0+cHJpdi0+cHJvYmVfY29va2llKSB7CisgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1NDSEVEVUxJTkcsIHBhZCwKKyAgICAgICAgInByb2JlIGxpc3QgY2hhbmdlZCwgcmVzdGFydGluZyIpOworICAgIGdvdG8gYWdhaW47CisgIH0KKworICBpZiAoZGF0YS5yZXQgPT0gR1NUX1BST0JFX0RST1ApCisgICAgZ290byBkcm9wcGVkOworCisgIGlmIChkYXRhLnBhc3MpCisgICAgZ290byBwYXNzZWQ7CisKKyAgaWYgKG1hc2sgJiBHU1RfUFJPQkVfVFlQRV9CTE9DSykgeworICAgIHdoaWxlIChHU1RfUEFEX0lTX0JMT0NLRUQgKHBhZCkpIHsKKyAgICAgIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9TQ0hFRFVMSU5HLCBwYWQsCisgICAgICAgICAgIndlIGFyZSBibG9ja2VkICVkIHRpbWVzIiwgcGFkLT5udW1fYmxvY2tlZCk7CisKKyAgICAgIC8qIHdlIG1pZ2h0IGhhdmUgcmVsZWFzZWQgdGhlIGxvY2sgKi8KKyAgICAgIGlmIChHX1VOTElLRUxZIChHU1RfUEFEX0lTX0ZMVVNISU5HIChwYWQpKSkKKyAgICAgICAgZ290byBmbHVzaGluZzsKKworICAgICAgLyogbm93IHdlIGJsb2NrIHRoZSBzdHJlYW1pbmcgdGhyZWFkLiBJdCBjYW4gYmUgdW5sb2NrZWQgd2hlbiB3ZQorICAgICAgICogZGVhY3RpdmF0ZSB0aGUgcGFkICh3aGljaCB3aWxsIGFsc28gc2V0IHRoZSBGTFVTSElORyBmbGFnKSBvcgorICAgICAgICogd2hlbiB0aGUgcGFkIGlzIHVuYmxvY2tlZC4gQSBmbHVzaGluZyBldmVudCB3aWxsIGFsc28gdW5ibG9jaworICAgICAgICogdGhlIHBhZCBhZnRlciBzZXR0aW5nIHRoZSBGTFVTSElORyBmbGFnLiAqLworICAgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1NDSEVEVUxJTkcsIHBhZCwKKyAgICAgICAgICAiV2FpdGluZyB0byBiZSB1bmJsb2NrZWQgb3Igc2V0IGZsdXNoaW5nIik7CisgICAgICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChwYWQsIEdTVF9QQURfQkxPQ0tJTkcpOworICAgICAgR1NUX1BBRF9CTE9DS19XQUlUIChwYWQpOworICAgICAgR1NUX09CSkVDVF9GTEFHX1VOU0VUIChwYWQsIEdTVF9QQURfQkxPQ0tJTkcpOworICAgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1NDSEVEVUxJTkcsIHBhZCwgIldlIGdvdCB1bmJsb2NrZWQiKTsKKworICAgICAgaWYgKEdfVU5MSUtFTFkgKEdTVF9QQURfSVNfRkxVU0hJTkcgKHBhZCkpKQorICAgICAgICBnb3RvIGZsdXNoaW5nOworICAgIH0KKyAgfQorCisgIHJldHVybiBHU1RfRkxPV19PSzsKKworICAvKiBFUlJPUlMgKi8KK2ZsdXNoaW5nOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAicGFkIGlzIGZsdXNoaW5nIik7CisgICAgcmV0dXJuIEdTVF9GTE9XX1dST05HX1NUQVRFOworICB9Citkcm9wcGVkOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiZGF0YSBpcyBkcm9wcGVkIik7CisgICAgcmV0dXJuIEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTOworICB9CitwYXNzZWQ6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJkYXRhIGlzIHBhc3NlZCIpOworICAgIHJldHVybiBHU1RfRkxPV19PSzsKKyAgfQorfQorCisvKiBwYWQgb2Zmc2V0cyAqLworCisvKioKKyAqIGdzdF9wYWRfZ2V0X29mZnNldDoKKyAqIEBwYWQ6IGEgI0dzdFBhZAorICoKKyAqIEdldCB0aGUgb2Zmc2V0IGFwcGxpZWQgdG8gdGhlIHJ1bm5pbmcgdGltZSBvZiBAcGFkLiBAcGFkIGhhcyB0byBiZSBhIHNvdXJjZQorICogcGFkLgorICoKKyAqIFJldHVybnM6IHRoZSBvZmZzZXQuCisgKi8KK2dpbnQ2NAorZ3N0X3BhZF9nZXRfb2Zmc2V0IChHc3RQYWQgKiBwYWQpCit7CisgIGdpbnQ2NCByZXN1bHQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIDApOworCisgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKKyAgcmVzdWx0ID0gcGFkLT5vZmZzZXQ7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZ3N0X3BhZF9zZXRfb2Zmc2V0OgorICogQHBhZDogYSAjR3N0UGFkCisgKiBAb2Zmc2V0OiB0aGUgb2Zmc2V0CisgKgorICogU2V0IHRoZSBvZmZzZXQgdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHJ1bm5pbmcgdGltZSBvZiBAcGFkLgorICovCit2b2lkCitnc3RfcGFkX3NldF9vZmZzZXQgKEdzdFBhZCAqIHBhZCwgZ2ludDY0IG9mZnNldCkKK3sKKyAgZ3VpbnQgaWR4OworICBHc3RQYWQgKnBlZXI7CisgIEdzdFBhZCAqdG1wID0gTlVMTDsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7CisgIC8qIGlmIG5vdGhpbmcgY2hhbmdlZCwgZG8gbm90aGluZyAqLworICBpZiAocGFkLT5vZmZzZXQgPT0gb2Zmc2V0KQorICAgIGdvdG8gZG9uZTsKKworICBwYWQtPm9mZnNldCA9IG9mZnNldDsKKworICAvKiBpZiBubyBwZWVyLCB3ZSBqdXN0IHVwZGF0ZWQgdGhlIG9mZnNldCAqLworICBpZiAoKHBlZXIgPSBHU1RfUEFEX1BFRVIgKHBhZCkpID09IE5VTEwpCisgICAgZ290byBkb25lOworCisgIC8qIHN3aXRjaCBwYWRzIGFyb3VuZCB3aGVuIGRlYWxpbmcgd2l0aCBhIHNpbmtwYWQgKi8KKyAgaWYgKEdTVF9QQURfSVNfU0lOSyAocGFkKSkgeworICAgIC8qIHJlZiB0aGUgcGVlciBzbyBpdCBkb2Vzbid0IGdvIGF3YXkgd2hlbiB3ZSByZWxlYXNlIHRoZSBsb2NrICovCisgICAgdG1wID0gZ3N0X29iamVjdF9yZWYgKHBlZXIpOworICAgIC8qIG1ha2Ugc3VyZSB3ZSBnZXQgdGhlIHBlZXIgKHRoZSBzcmNwYWQpICovCisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisKKyAgICAvKiBzd2FwIHBhZHMgKi8KKyAgICBwZWVyID0gcGFkOworICAgIHBhZCA9IHRtcDsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKKyAgICAvKiBjaGVjayBpZiB0aGUgcGFkIGRpZG4ndCBnZXQgcmVsaW5rZWQgKi8KKyAgICBpZiAoR1NUX1BBRF9QRUVSIChwYWQpICE9IHBlZXIpCisgICAgICBnb3RvIGRvbmU7CisKKyAgICAvKiB3ZSBjYW4gcmVsZWFzZSB0aGUgcmVmIG5vdyAqLworICAgIGdzdF9vYmplY3RfdW5yZWYgKHBlZXIpOworICB9CisKKyAgLyogdGhlIGluZGV4IG9mIHRoZSBzZWdtZW50IGV2ZW50IGluIHRoZSBhcnJheSAqLworICBpZHggPSBHU1RfRVZFTlRfU1RJQ0tZX0lEWF9UWVBFIChHU1RfRVZFTlRfU0VHTUVOVCk7CisKKyAgLyogbG9jayBvcmRlciBpcyBzcmNwYWQgPj4gc2lua3BhZCAqLworICBHU1RfT0JKRUNUX0xPQ0sgKHBlZXIpOworICAvKiB0YWtlIHRoZSBjdXJyZW50IHNlZ21lbnQgZXZlbnQsIGFkanVzdCBpdCBhbmQgdGhlbiBwbGFjZQorICAgKiBpdCBvbiB0aGUgc2lua3BhZC4gZXZlbnRzIG9uIHRoZSBzcmNwYWQgYXJlIGFsd2F5cyBhY3RpdmUuICovCisgIGlmIChyZXBsYWNlX2V2ZW50IChwYWQsIHBlZXIsIGlkeCkpCisgICAgR1NUX09CSkVDVF9GTEFHX1NFVCAocGVlciwgR1NUX1BBRF9ORUVEX0VWRU5UUyk7CisKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHBlZXIpOworCitkb25lOgorICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGF0YSBwYXNzaW5nIGZ1bmN0aW9ucworICovCisKKy8qIHRoaXMgaXMgdGhlIGNoYWluIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3QgcGVyZm9ybSB0aGUgYWRkaXRpb25hbCBhcmd1bWVudAorICogY2hlY2tpbmcgZm9yIHRoYXQgbGl0dGxlIGV4dHJhIHNwZWVkLgorICovCitzdGF0aWMgaW5saW5lIEdzdEZsb3dSZXR1cm4KK2dzdF9wYWRfY2hhaW5fZGF0YV91bmNoZWNrZWQgKEdzdFBhZCAqIHBhZCwgR3N0UHJvYmVUeXBlIHR5cGUsIHZvaWQgKmRhdGEpCit7CisgIEdzdEZsb3dSZXR1cm4gcmV0OworICBnYm9vbGVhbiBuZWVkc19ldmVudHM7CisKKyAgR1NUX1BBRF9TVFJFQU1fTE9DSyAocGFkKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7CisgIGlmIChHX1VOTElLRUxZIChHU1RfUEFEX0lTX0ZMVVNISU5HIChwYWQpKSkKKyAgICBnb3RvIGZsdXNoaW5nOworCisgIG5lZWRzX2V2ZW50cyA9IEdTVF9QQURfTkVFRFNfRVZFTlRTIChwYWQpOworICBpZiAoR19VTkxJS0VMWSAobmVlZHNfZXZlbnRzKSkgeworICAgIEdTVF9PQkpFQ1RfRkxBR19VTlNFVCAocGFkLCBHU1RfUEFEX05FRURfRVZFTlRTKTsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIm5lZWQgdG8gdXBkYXRlIGFsbCBldmVudHMiKTsKKyAgICByZXQgPSBnc3RfcGFkX3VwZGF0ZV9ldmVudHMgKHBhZCk7CisgICAgaWYgKEdfVU5MSUtFTFkgKHJldCAhPSBHU1RfRkxPV19PSykpCisgICAgICBnb3RvIGV2ZW50c19lcnJvcjsKKyAgfQorCisgIFBST0JFIChwYWQsIEdTVF9QUk9CRV9UWVBFX1BVU0ggfCB0eXBlLCBkYXRhLCBwcm9iZV9zdG9wcGVkKTsKKworICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKworICAvKiBOT1RFOiB3ZSByZWFkIHRoZSBjaGFpbmZ1bmMgdW5sb2NrZWQuCisgICAqIHdlIGNhbm5vdCBob2xkIHRoZSBsb2NrIGZvciB0aGUgcGFkIHNvIHdlIG1pZ2h0IHNlbmQKKyAgICogdGhlIGRhdGEgdG8gdGhlIHdyb25nIGZ1bmN0aW9uLiBUaGlzIGlzIG5vdCByZWFsbHkgYQorICAgKiBwcm9ibGVtIHNpbmNlIGZ1bmN0aW9ucyBhcmUgYXNzaWduZWQgYXQgY3JlYXRpb24gdGltZQorICAgKiBhbmQgZG9uJ3QgY2hhbmdlIHRoYXQgb2Z0ZW4uLi4gKi8KKyAgaWYgKEdfTElLRUxZICh0eXBlICYgR1NUX1BST0JFX1RZUEVfQlVGRkVSKSkgeworICAgIEdzdFBhZENoYWluRnVuY3Rpb24gY2hhaW5mdW5jOworCisgICAgaWYgKEdfVU5MSUtFTFkgKChjaGFpbmZ1bmMgPSBHU1RfUEFEX0NIQUlORlVOQyAocGFkKSkgPT0gTlVMTCkpCisgICAgICBnb3RvIG5vX2Z1bmN0aW9uOworCisgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1NDSEVEVUxJTkcsIHBhZCwKKyAgICAgICAgImNhbGxpbmcgY2hhaW5mdW5jdGlvbiAmJXMgd2l0aCBidWZmZXIgJXAsIHRzICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgICAgR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRSAoY2hhaW5mdW5jKSwKKyAgICAgICAgR1NUX0JVRkZFUiAoZGF0YSksIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChkYXRhKSkpOworCisgICAgcmV0ID0gY2hhaW5mdW5jIChwYWQsIEdTVF9CVUZGRVJfQ0FTVCAoZGF0YSkpOworCisgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1NDSEVEVUxJTkcsIHBhZCwKKyAgICAgICAgImNhbGxlZCBjaGFpbmZ1bmN0aW9uICYlcyB3aXRoIGJ1ZmZlciAlcCwgcmV0dXJuZWQgJXMiLAorICAgICAgICBHU1RfREVCVUdfRlVOQ1BUUl9OQU1FIChjaGFpbmZ1bmMpLCBkYXRhLCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7CisgIH0gZWxzZSB7CisgICAgR3N0UGFkQ2hhaW5MaXN0RnVuY3Rpb24gY2hhaW5saXN0ZnVuYzsKKworICAgIGlmIChHX1VOTElLRUxZICgoY2hhaW5saXN0ZnVuYyA9IEdTVF9QQURfQ0hBSU5MSVNURlVOQyAocGFkKSkgPT0gTlVMTCkpCisgICAgICBnb3RvIG5vX2Z1bmN0aW9uOworCisgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1NDSEVEVUxJTkcsIHBhZCwKKyAgICAgICAgImNhbGxpbmcgY2hhaW5saXN0ZnVuY3Rpb24gJiVzIiwKKyAgICAgICAgR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRSAoY2hhaW5saXN0ZnVuYykpOworCisgICAgcmV0ID0gY2hhaW5saXN0ZnVuYyAocGFkLCBHU1RfQlVGRkVSX0xJU1RfQ0FTVCAoZGF0YSkpOworCisgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1NDSEVEVUxJTkcsIHBhZCwKKyAgICAgICAgImNhbGxlZCBjaGFpbmxpc3RmdW5jdGlvbiAmJXMsIHJldHVybmVkICVzIiwKKyAgICAgICAgR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRSAoY2hhaW5saXN0ZnVuYyksIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKKyAgfQorCisgIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAocGFkKTsKKworICByZXR1cm4gcmV0OworCisgIC8qIEVSUk9SUyAqLworZmx1c2hpbmc6CisgIHsKKyAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKEdTVF9DQVRfU0NIRURVTElORywgcGFkLAorICAgICAgICAiY2hhaW5pbmcsIGJ1dCBwYWQgd2FzIGZsdXNoaW5nIik7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisgICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChwYWQpOworICAgIHJldHVybiBHU1RfRkxPV19XUk9OR19TVEFURTsKKyAgfQorZXZlbnRzX2Vycm9yOgorICB7CisgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1NDSEVEVUxJTkcsIHBhZCwgImV2ZW50cyB3ZXJlIG5vdCBhY2NlcHRlZCIpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworICAgIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAocGFkKTsKKyAgICByZXR1cm4gcmV0OworICB9Citwcm9iZV9zdG9wcGVkOgorICB7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisgICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChwYWQpOworICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGRhdGEpKTsKKworICAgIHN3aXRjaCAocmV0KSB7CisgICAgICBjYXNlIEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTOgorICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJkcm9wcGVkIGJ1ZmZlciIpOworICAgICAgICByZXQgPSBHU1RfRkxPV19PSzsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJlbiBlcnJvciBvY2N1cmVkICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKKyAgfQorbm9fZnVuY3Rpb246CisgIHsKKyAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChkYXRhKSk7CisgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1NDSEVEVUxJTkcsIHBhZCwKKyAgICAgICAgInB1c2hpbmcsIGJ1dCBub3QgY2hhaW5oYW5kbGVyIik7CisgICAgR1NUX0VMRU1FTlRfRVJST1IgKEdTVF9QQURfUEFSRU5UIChwYWQpLCBDT1JFLCBQQUQsIChOVUxMKSwKKyAgICAgICAgKCJwdXNoIG9uIHBhZCAlczolcyBidXQgaXQgaGFzIG5vIGNoYWluZnVuY3Rpb24iLAorICAgICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKSk7CisgICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChwYWQpOworICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOworICB9Cit9CisKKy8qKgorICogZ3N0X3BhZF9jaGFpbjoKKyAqIEBwYWQ6IGEgc2luayAjR3N0UGFkLCByZXR1cm5zIEdTVF9GTE9XX0VSUk9SIGlmIG5vdC4KKyAqIEBidWZmZXI6ICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RCdWZmZXIgdG8gc2VuZCwgcmV0dXJuIEdTVF9GTE9XX0VSUk9SCisgKiAgICAgaWYgbm90LgorICoKKyAqIENoYWluIGEgYnVmZmVyIHRvIEBwYWQuCisgKgorICogVGhlIGZ1bmN0aW9uIHJldHVybnMgI0dTVF9GTE9XX1dST05HX1NUQVRFIGlmIHRoZSBwYWQgd2FzIGZsdXNoaW5nLgorICoKKyAqIElmIHRoZSBidWZmZXIgdHlwZSBpcyBub3QgYWNjZXB0YWJsZSBmb3IgQHBhZCAoYXMgbmVnb3RpYXRlZCB3aXRoIGEKKyAqIHByZWNlZWRpbmcgR1NUX0VWRU5UX0NBUFMgZXZlbnQpLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMKKyAqICNHU1RfRkxPV19OT1RfTkVHT1RJQVRFRC4KKyAqCisgKiBUaGUgZnVuY3Rpb24gcHJvY2VlZHMgY2FsbGluZyB0aGUgY2hhaW4gZnVuY3Rpb24gaW5zdGFsbGVkIG9uIEBwYWQgKHNlZQorICogZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24oKSkgYW5kIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhhdCBmdW5jdGlvbiBpcworICogcmV0dXJuZWQgdG8gdGhlIGNhbGxlci4gI0dTVF9GTE9XX05PVF9TVVBQT1JURUQgaXMgcmV0dXJuZWQgaWYgQHBhZCBoYXMgbm8KKyAqIGNoYWluIGZ1bmN0aW9uLgorICoKKyAqIEluIGFsbCBjYXNlcywgc3VjY2VzcyBvciBmYWlsdXJlLCB0aGUgY2FsbGVyIGxvc2VzIGl0cyByZWZlcmVuY2UgdG8gQGJ1ZmZlcgorICogYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFJldHVybnM6IGEgI0dzdEZsb3dSZXR1cm4gZnJvbSB0aGUgcGFkLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK0dzdEZsb3dSZXR1cm4KK2dzdF9wYWRfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0QnVmZmVyICogYnVmZmVyKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgR1NUX0ZMT1dfRVJST1IpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1BBRF9JU19TSU5LIChwYWQpLCBHU1RfRkxPV19FUlJPUik7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVGRkVSIChidWZmZXIpLCBHU1RfRkxPV19FUlJPUik7CisKKyAgcmV0dXJuIGdzdF9wYWRfY2hhaW5fZGF0YV91bmNoZWNrZWQgKHBhZCwgR1NUX1BST0JFX1RZUEVfQlVGRkVSLCBidWZmZXIpOworfQorCitzdGF0aWMgR3N0Rmxvd1JldHVybgorZ3N0X3BhZF9jaGFpbl9saXN0X2RlZmF1bHQgKEdzdFBhZCAqIHBhZCwgR3N0QnVmZmVyTGlzdCAqIGxpc3QpCit7CisgIGd1aW50IGksIGxlbjsKKyAgR3N0QnVmZmVyICpidWZmZXI7CisgIEdzdEZsb3dSZXR1cm4gcmV0OworCisgIEdTVF9JTkZPX09CSkVDVCAocGFkLCAiY2hhaW5pbmcgZWFjaCBncm91cCBpbiBsaXN0IGFzIGEgbWVyZ2VkIGJ1ZmZlciIpOworCisgIGxlbiA9IGdzdF9idWZmZXJfbGlzdF9sZW4gKGxpc3QpOworCisgIHJldCA9IEdTVF9GTE9XX09LOworICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICBidWZmZXIgPSBnc3RfYnVmZmVyX2xpc3RfZ2V0IChsaXN0LCBpKTsKKyAgICByZXQgPQorICAgICAgICBnc3RfcGFkX2NoYWluX2RhdGFfdW5jaGVja2VkIChwYWQsIEdTVF9QUk9CRV9UWVBFX0JVRkZFUiwKKyAgICAgICAgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcikpOworICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCisgICAgICBicmVhazsKKyAgfQorICBnc3RfYnVmZmVyX2xpc3RfdW5yZWYgKGxpc3QpOworCisgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICogZ3N0X3BhZF9jaGFpbl9saXN0OgorICogQHBhZDogYSBzaW5rICNHc3RQYWQsIHJldHVybnMgR1NUX0ZMT1dfRVJST1IgaWYgbm90LgorICogQGxpc3Q6ICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RCdWZmZXJMaXN0IHRvIHNlbmQsIHJldHVybiBHU1RfRkxPV19FUlJPUgorICogICAgIGlmIG5vdC4KKyAqCisgKiBDaGFpbiBhIGJ1ZmZlcmxpc3QgdG8gQHBhZC4KKyAqCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyAjR1NUX0ZMT1dfV1JPTkdfU1RBVEUgaWYgdGhlIHBhZCB3YXMgZmx1c2hpbmcuCisgKgorICogSWYgQHBhZCB3YXMgbm90IG5lZ290aWF0ZWQgcHJvcGVybHkgd2l0aCBhIENBUFMgZXZlbnQsIHRoaXMgZnVuY3Rpb24KKyAqIHJldHVybnMgI0dTVF9GTE9XX05PVF9ORUdPVElBVEVELgorICoKKyAqIFRoZSBmdW5jdGlvbiBwcm9jZWVkcyBjYWxsaW5nIHRoZSBjaGFpbmxpc3QgZnVuY3Rpb24gaW5zdGFsbGVkIG9uIEBwYWQgKHNlZQorICogZ3N0X3BhZF9zZXRfY2hhaW5fbGlzdF9mdW5jdGlvbigpKSBhbmQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGF0IGZ1bmN0aW9uIGlzCisgKiByZXR1cm5lZCB0byB0aGUgY2FsbGVyLiAjR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRCBpcyByZXR1cm5lZCBpZiBAcGFkIGhhcyBubworICogY2hhaW5saXN0IGZ1bmN0aW9uLgorICoKKyAqIEluIGFsbCBjYXNlcywgc3VjY2VzcyBvciBmYWlsdXJlLCB0aGUgY2FsbGVyIGxvc2VzIGl0cyByZWZlcmVuY2UgdG8gQGxpc3QKKyAqIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBNVCBzYWZlLgorICoKKyAqIFJldHVybnM6IGEgI0dzdEZsb3dSZXR1cm4gZnJvbSB0aGUgcGFkLgorICoKKyAqIFNpbmNlOiAwLjEwLjI0CisgKi8KK0dzdEZsb3dSZXR1cm4KK2dzdF9wYWRfY2hhaW5fbGlzdCAoR3N0UGFkICogcGFkLCBHc3RCdWZmZXJMaXN0ICogbGlzdCkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIEdTVF9GTE9XX0VSUk9SKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9QQURfSVNfU0lOSyAocGFkKSwgR1NUX0ZMT1dfRVJST1IpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVRkZFUl9MSVNUIChsaXN0KSwgR1NUX0ZMT1dfRVJST1IpOworCisgIHJldHVybiBnc3RfcGFkX2NoYWluX2RhdGFfdW5jaGVja2VkIChwYWQsIEdTVF9QUk9CRV9UWVBFX0JVRkZFUl9MSVNULCBsaXN0KTsKK30KKworc3RhdGljIEdzdEZsb3dSZXR1cm4KK2dzdF9wYWRfcHVzaF9kYXRhIChHc3RQYWQgKiBwYWQsIEdzdFByb2JlVHlwZSB0eXBlLCB2b2lkICpkYXRhKQoreworICBHc3RQYWQgKnBlZXI7CisgIEdzdEZsb3dSZXR1cm4gcmV0OworCisgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKKyAgaWYgKEdfVU5MSUtFTFkgKEdTVF9QQURfSVNfRkxVU0hJTkcgKHBhZCkpKQorICAgIGdvdG8gZmx1c2hpbmc7CisKKyAgdHlwZSB8PSBHU1RfUFJPQkVfVFlQRV9QVVNIOworCisgIC8qIGRvIGJsb2NrIHByb2JlcyAqLworICBQUk9CRSAocGFkLCB0eXBlIHwgR1NUX1BST0JFX1RZUEVfQkxPQ0ssIGRhdGEsIHByb2JlX3N0b3BwZWQpOworCisgIC8qIGRvIHBvc3QtYmxvY2tpbmcgcHJvYmVzICovCisgIFBST0JFIChwYWQsIHR5cGUsIGRhdGEsIHByb2JlX3N0b3BwZWQpOworCisgIGlmIChHX1VOTElLRUxZICgocGVlciA9IEdTVF9QQURfUEVFUiAocGFkKSkgPT0gTlVMTCkpCisgICAgZ290byBub3RfbGlua2VkOworCisgIC8qIHRha2UgcmVmIHRvIHBlZXIgcGFkIGJlZm9yZSByZWxlYXNpbmcgdGhlIGxvY2sgKi8KKyAgZ3N0X29iamVjdF9yZWYgKHBlZXIpOworICBwYWQtPnByaXYtPnVzaW5nKys7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworCisgIHJldCA9IGdzdF9wYWRfY2hhaW5fZGF0YV91bmNoZWNrZWQgKHBlZXIsIHR5cGUsIGRhdGEpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHBlZXIpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKKyAgcGFkLT5wcml2LT51c2luZy0tOworICBpZiAocGFkLT5wcml2LT51c2luZyA9PSAwKSB7CisgICAgLyogcGFkIGlzIG5vdCBhY3RpdmUgYW55bW9yZSwgdHJpZ2dlciBpZGxlIGNhbGxiYWNrcyAqLworICAgIFBST0JFIChwYWQsIEdTVF9QUk9CRV9UWVBFX1BVU0ggfCBHU1RfUFJPQkVfVFlQRV9JRExFLCBOVUxMLCBwcm9iZV9zdG9wcGVkKTsKKyAgfQorICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKworICByZXR1cm4gcmV0OworCisgIC8qIEVSUk9SIHJlY292ZXJ5IGhlcmUgKi8KKyAgLyogRVJST1JTICovCitmbHVzaGluZzoKKyAgeworICAgIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9TQ0hFRFVMSU5HLCBwYWQsCisgICAgICAgICJwdXNoaW5nLCBidXQgcGFkIHdhcyBmbHVzaGluZyIpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGRhdGEpKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfV1JPTkdfU1RBVEU7CisgIH0KK3Byb2JlX3N0b3BwZWQ6CisgIHsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKyAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChkYXRhKSk7CisKKyAgICBzd2l0Y2ggKHJldCkgeworICAgICAgY2FzZSBHU1RfRkxPV19DVVNUT01fU1VDQ0VTUzoKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiZHJvcHBlZCBidWZmZXIiKTsKKyAgICAgICAgcmV0ID0gR1NUX0ZMT1dfT0s7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiZW4gZXJyb3Igb2NjdXJlZCAlcyIsIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiByZXQ7CisgIH0KK25vdF9saW5rZWQ6CisgIHsKKyAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKEdTVF9DQVRfU0NIRURVTElORywgcGFkLAorICAgICAgICAicHVzaGluZywgYnV0IGl0IHdhcyBub3QgbGlua2VkIik7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisgICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoZGF0YSkpOworICAgIHJldHVybiBHU1RfRkxPV19OT1RfTElOS0VEOworICB9Cit9CisKKy8qKgorICogZ3N0X3BhZF9wdXNoOgorICogQHBhZDogYSBzb3VyY2UgI0dzdFBhZCwgcmV0dXJucyAjR1NUX0ZMT1dfRVJST1IgaWYgbm90LgorICogQGJ1ZmZlcjogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdEJ1ZmZlciB0byBwdXNoIHJldHVybnMgR1NUX0ZMT1dfRVJST1IKKyAqICAgICBpZiBub3QuCisgKgorICogUHVzaGVzIGEgYnVmZmVyIHRvIHRoZSBwZWVyIG9mIEBwYWQuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGNhbGwgaW5zdGFsbGVkIGJsb2NrIHByb2JlcyBiZWZvcmUgdHJpZ2dlcmluZyBhbnkKKyAqIGluc3RhbGxlZCBkYXRhIHByb2Jlcy4KKyAqCisgKiBUaGUgZnVuY3Rpb24gcHJvY2VlZHMgY2FsbGluZyBnc3RfcGFkX2NoYWluKCkgb24gdGhlIHBlZXIgcGFkIGFuZCByZXR1cm5zCisgKiB0aGUgdmFsdWUgZnJvbSB0aGF0IGZ1bmN0aW9uLiBJZiBAcGFkIGhhcyBubyBwZWVyLCAjR1NUX0ZMT1dfTk9UX0xJTktFRCB3aWxsCisgKiBiZSByZXR1cm5lZC4KKyAqCisgKiBJbiBhbGwgY2FzZXMsIHN1Y2Nlc3Mgb3IgZmFpbHVyZSwgdGhlIGNhbGxlciBsb3NlcyBpdHMgcmVmZXJlbmNlIHRvIEBidWZmZXIKKyAqIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBSZXR1cm5zOiBhICNHc3RGbG93UmV0dXJuIGZyb20gdGhlIHBlZXIgcGFkLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK0dzdEZsb3dSZXR1cm4KK2dzdF9wYWRfcHVzaCAoR3N0UGFkICogcGFkLCBHc3RCdWZmZXIgKiBidWZmZXIpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBHU1RfRkxPV19FUlJPUik7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfUEFEX0lTX1NSQyAocGFkKSwgR1NUX0ZMT1dfRVJST1IpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVRkZFUiAoYnVmZmVyKSwgR1NUX0ZMT1dfRVJST1IpOworCisgIHJldHVybiBnc3RfcGFkX3B1c2hfZGF0YSAocGFkLCBHU1RfUFJPQkVfVFlQRV9CVUZGRVIsIGJ1ZmZlcik7Cit9CisKKy8qKgorICogZ3N0X3BhZF9wdXNoX2xpc3Q6CisgKiBAcGFkOiBhIHNvdXJjZSAjR3N0UGFkLCByZXR1cm5zICNHU1RfRkxPV19FUlJPUiBpZiBub3QuCisgKiBAbGlzdDogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdEJ1ZmZlckxpc3QgdG8gcHVzaCByZXR1cm5zIEdTVF9GTE9XX0VSUk9SCisgKiAgICAgaWYgbm90LgorICoKKyAqIFB1c2hlcyBhIGJ1ZmZlciBsaXN0IHRvIHRoZSBwZWVyIG9mIEBwYWQuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGNhbGwgaW5zdGFsbGVkIGJsb2NrIHByb2JlcyBiZWZvcmUgdHJpZ2dlcmluZyBhbnkKKyAqIGluc3RhbGxlZCBkYXRhIHByb2Jlcy4KKyAqCisgKiBUaGUgZnVuY3Rpb24gcHJvY2VlZHMgY2FsbGluZyB0aGUgY2hhaW4gZnVuY3Rpb24gb24gdGhlIHBlZXIgcGFkIGFuZCByZXR1cm5zCisgKiB0aGUgdmFsdWUgZnJvbSB0aGF0IGZ1bmN0aW9uLiBJZiBAcGFkIGhhcyBubyBwZWVyLCAjR1NUX0ZMT1dfTk9UX0xJTktFRCB3aWxsCisgKiBiZSByZXR1cm5lZC4gSWYgdGhlIHBlZXIgcGFkIGRvZXMgbm90IGhhdmUgYW55IGluc3RhbGxlZCBjaGFpbmxpc3QgZnVuY3Rpb24KKyAqIGV2ZXJ5IGdyb3VwIGJ1ZmZlciBvZiB0aGUgbGlzdCB3aWxsIGJlIG1lcmdlZCBpbnRvIGEgbm9ybWFsICNHc3RCdWZmZXIgYW5kCisgKiBjaGFpbmVkIHZpYSBnc3RfcGFkX2NoYWluKCkuCisgKgorICogSW4gYWxsIGNhc2VzLCBzdWNjZXNzIG9yIGZhaWx1cmUsIHRoZSBjYWxsZXIgbG9zZXMgaXRzIHJlZmVyZW5jZSB0byBAbGlzdAorICogYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFJldHVybnM6IGEgI0dzdEZsb3dSZXR1cm4gZnJvbSB0aGUgcGVlciBwYWQuCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICovCitHc3RGbG93UmV0dXJuCitnc3RfcGFkX3B1c2hfbGlzdCAoR3N0UGFkICogcGFkLCBHc3RCdWZmZXJMaXN0ICogbGlzdCkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIEdTVF9GTE9XX0VSUk9SKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9QQURfSVNfU1JDIChwYWQpLCBHU1RfRkxPV19FUlJPUik7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVGRkVSX0xJU1QgKGxpc3QpLCBHU1RfRkxPV19FUlJPUik7CisKKyAgcmV0dXJuIGdzdF9wYWRfcHVzaF9kYXRhIChwYWQsIEdTVF9QUk9CRV9UWVBFX0JVRkZFUl9MSVNULCBsaXN0KTsKK30KKworc3RhdGljIEdzdEZsb3dSZXR1cm4KK2dzdF9wYWRfZ2V0X3JhbmdlX3VuY2hlY2tlZCAoR3N0UGFkICogcGFkLCBndWludDY0IG9mZnNldCwgZ3VpbnQgc2l6ZSwKKyAgICBHc3RCdWZmZXIgKiogYnVmZmVyKQoreworICBHc3RGbG93UmV0dXJuIHJldDsKKyAgR3N0UGFkR2V0UmFuZ2VGdW5jdGlvbiBnZXRyYW5nZWZ1bmM7CisKKyAgR1NUX1BBRF9TVFJFQU1fTE9DSyAocGFkKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7CisgIGlmIChHX1VOTElLRUxZIChHU1RfUEFEX0lTX0ZMVVNISU5HIChwYWQpKSkKKyAgICBnb3RvIGZsdXNoaW5nOworICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKworICBpZiAoR19VTkxJS0VMWSAoKGdldHJhbmdlZnVuYyA9IEdTVF9QQURfR0VUUkFOR0VGVU5DIChwYWQpKSA9PSBOVUxMKSkKKyAgICBnb3RvIG5vX2Z1bmN0aW9uOworCisgIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9TQ0hFRFVMSU5HLCBwYWQsCisgICAgICAiY2FsbGluZyBnZXRyYW5nZWZ1bmMgJXMsIG9mZnNldCAlIgorICAgICAgR19HVUlOVDY0X0ZPUk1BVCAiLCBzaXplICV1IiwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSX05BTUUgKGdldHJhbmdlZnVuYyksIG9mZnNldCwgc2l6ZSk7CisKKyAgcmV0ID0gZ2V0cmFuZ2VmdW5jIChwYWQsIG9mZnNldCwgc2l6ZSwgYnVmZmVyKTsKKworICBpZiAoR19VTkxJS0VMWSAocmV0ICE9IEdTVF9GTE9XX09LKSkKKyAgICBnb3RvIGdldF9yYW5nZV9mYWlsZWQ7CisKKyAgLyogY2FuIG9ubHkgZmlyZSB0aGUgc2lnbmFsIGlmIHdlIGhhdmUgYSB2YWxpZCBidWZmZXIgKi8KKyAgR1NUX09CSkVDVF9MT0NLIChwYWQpOworICBQUk9CRSAocGFkLCBHU1RfUFJPQkVfVFlQRV9QVUxMIHwgR1NUX1BST0JFX1RZUEVfQlVGRkVSLCAqYnVmZmVyLAorICAgICAgcHJvYmVfc3RvcHBlZCk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworCisgIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAocGFkKTsKKworICByZXR1cm4gcmV0OworCisgIC8qIEVSUk9SUyAqLworZmx1c2hpbmc6CisgIHsKKyAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKEdTVF9DQVRfU0NIRURVTElORywgcGFkLAorICAgICAgICAiZ2V0cmFuZ2UsIGJ1dCBwYWQgd2FzIGZsdXNoaW5nIik7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisgICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChwYWQpOworICAgIHJldHVybiBHU1RfRkxPV19XUk9OR19TVEFURTsKKyAgfQorbm9fZnVuY3Rpb246CisgIHsKKyAgICBHU1RfRUxFTUVOVF9FUlJPUiAoR1NUX1BBRF9QQVJFTlQgKHBhZCksIENPUkUsIFBBRCwgKE5VTEwpLAorICAgICAgICAoImdldHJhbmdlIG9uIHBhZCAlczolcyBidXQgaXQgaGFzIG5vIGdldHJhbmdlZnVuY3Rpb24iLAorICAgICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKSk7CisgICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChwYWQpOworICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOworICB9Citwcm9iZV9zdG9wcGVkOgorICB7CisgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1NDSEVEVUxJTkcsIHBhZCwKKyAgICAgICAgInByb2JlIHJldHVybmVkICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworICAgIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAocGFkKTsKKyAgICBnc3RfYnVmZmVyX3VucmVmICgqYnVmZmVyKTsKKyAgICAqYnVmZmVyID0gTlVMTDsKKyAgICByZXR1cm4gcmV0OworICB9CitnZXRfcmFuZ2VfZmFpbGVkOgorICB7CisgICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChwYWQpOworICAgICpidWZmZXIgPSBOVUxMOworICAgIEdTVF9DQVRfTEVWRUxfTE9HIChHU1RfQ0FUX1NDSEVEVUxJTkcsCisgICAgICAgIChyZXQgPj0gR1NUX0ZMT1dfVU5FWFBFQ1RFRCkgPyBHU1RfTEVWRUxfSU5GTyA6IEdTVF9MRVZFTF9XQVJOSU5HLAorICAgICAgICBwYWQsICJnZXRyYW5nZSBmYWlsZWQsIGZsb3c6ICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOworICAgIHJldHVybiByZXQ7CisgIH0KK30KKworLyoqCisgKiBnc3RfcGFkX2dldF9yYW5nZToKKyAqIEBwYWQ6IGEgc3JjICNHc3RQYWQsIHJldHVybnMgI0dTVF9GTE9XX0VSUk9SIGlmIG5vdC4KKyAqIEBvZmZzZXQ6IFRoZSBzdGFydCBvZmZzZXQgb2YgdGhlIGJ1ZmZlcgorICogQHNpemU6IFRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlcgorICogQGJ1ZmZlcjogKG91dCBjYWxsZWUtYWxsb2NhdGVzKTogYSBwb2ludGVyIHRvIGhvbGQgdGhlICNHc3RCdWZmZXIsCisgKiAgICAgcmV0dXJucyAjR1NUX0ZMT1dfRVJST1IgaWYgJU5VTEwuCisgKgorICogV2hlbiBAcGFkIGlzIGZsdXNoaW5nIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAjR1NUX0ZMT1dfV1JPTkdfU1RBVEUKKyAqIGltbWVkaWF0ZWx5IGFuZCBAYnVmZmVyIGlzICVOVUxMLgorICoKKyAqIENhbGxzIHRoZSBnZXRyYW5nZSBmdW5jdGlvbiBvZiBAcGFkLCBzZWUgI0dzdFBhZEdldFJhbmdlRnVuY3Rpb24gZm9yIGEKKyAqIGRlc2NyaXB0aW9uIG9mIGEgZ2V0cmFuZ2UgZnVuY3Rpb24uIElmIEBwYWQgaGFzIG5vIGdldHJhbmdlIGZ1bmN0aW9uCisgKiBpbnN0YWxsZWQgKHNlZSBnc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbigpKSB0aGlzIGZ1bmN0aW9uIHJldHVybnMKKyAqICNHU1RfRkxPV19OT1RfU1VQUE9SVEVELgorICoKKyAqIFRoaXMgaXMgYSBsb3dsZXZlbCBmdW5jdGlvbi4gVXN1YWx5IGdzdF9wYWRfcHVsbF9yYW5nZSgpIGlzIHVzZWQuCisgKgorICogUmV0dXJuczogYSAjR3N0Rmxvd1JldHVybiBmcm9tIHRoZSBwYWQuCisgKgorICogTVQgc2FmZS4KKyAqLworR3N0Rmxvd1JldHVybgorZ3N0X3BhZF9nZXRfcmFuZ2UgKEdzdFBhZCAqIHBhZCwgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50IHNpemUsCisgICAgR3N0QnVmZmVyICoqIGJ1ZmZlcikKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIEdTVF9GTE9XX0VSUk9SKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9QQURfSVNfU1JDIChwYWQpLCBHU1RfRkxPV19FUlJPUik7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChidWZmZXIgIT0gTlVMTCwgR1NUX0ZMT1dfRVJST1IpOworCisgIHJldHVybiBnc3RfcGFkX2dldF9yYW5nZV91bmNoZWNrZWQgKHBhZCwgb2Zmc2V0LCBzaXplLCBidWZmZXIpOworfQorCisvKioKKyAqIGdzdF9wYWRfcHVsbF9yYW5nZToKKyAqIEBwYWQ6IGEgc2luayAjR3N0UGFkLCByZXR1cm5zIEdTVF9GTE9XX0VSUk9SIGlmIG5vdC4KKyAqIEBvZmZzZXQ6IFRoZSBzdGFydCBvZmZzZXQgb2YgdGhlIGJ1ZmZlcgorICogQHNpemU6IFRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlcgorICogQGJ1ZmZlcjogKG91dCBjYWxsZWUtYWxsb2NhdGVzKTogYSBwb2ludGVyIHRvIGhvbGQgdGhlICNHc3RCdWZmZXIsIHJldHVybnMKKyAqICAgICBHU1RfRkxPV19FUlJPUiBpZiAlTlVMTC4KKyAqCisgKiBQdWxscyBhIEBidWZmZXIgZnJvbSB0aGUgcGVlciBwYWQuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGZpcnN0IHRyaWdnZXIgdGhlIHBhZCBibG9jayBzaWduYWwgaWYgaXQgd2FzCisgKiBpbnN0YWxsZWQuCisgKgorICogV2hlbiBAcGFkIGlzIG5vdCBsaW5rZWQgI0dTVF9GTE9XX05PVF9MSU5LRUQgaXMgcmV0dXJuZWQgZWxzZSB0aGlzCisgKiBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXN1bHQgb2YgZ3N0X3BhZF9nZXRfcmFuZ2UoKSBvbiB0aGUgcGVlciBwYWQuCisgKiBTZWUgZ3N0X3BhZF9nZXRfcmFuZ2UoKSBmb3IgYSBsaXN0IG9mIHJldHVybiB2YWx1ZXMgYW5kIGZvciB0aGUKKyAqIHNlbWFudGljcyBvZiB0aGUgYXJndW1lbnRzIG9mIHRoaXMgZnVuY3Rpb24uCisgKgorICogUmV0dXJuczogYSAjR3N0Rmxvd1JldHVybiBmcm9tIHRoZSBwZWVyIHBhZC4KKyAqIFdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zICNHU1RfRkxPV19PSywgQGJ1ZmZlciB3aWxsIGNvbnRhaW4gYSB2YWxpZAorICogI0dzdEJ1ZmZlciB0aGF0IHNob3VsZCBiZSBmcmVlZCB3aXRoIGdzdF9idWZmZXJfdW5yZWYoKSBhZnRlciB1c2FnZS4KKyAqIEBidWZmZXIgbWF5IG5vdCBiZSB1c2VkIG9yIGZyZWVkIHdoZW4gYW55IG90aGVyIHJldHVybiB2YWx1ZSB0aGFuCisgKiAjR1NUX0ZMT1dfT0sgaXMgcmV0dXJuZWQuCisgKgorICogTVQgc2FmZS4KKyAqLworR3N0Rmxvd1JldHVybgorZ3N0X3BhZF9wdWxsX3JhbmdlIChHc3RQYWQgKiBwYWQsIGd1aW50NjQgb2Zmc2V0LCBndWludCBzaXplLAorICAgIEdzdEJ1ZmZlciAqKiBidWZmZXIpCit7CisgIEdzdFBhZCAqcGVlcjsKKyAgR3N0Rmxvd1JldHVybiByZXQ7CisgIGdib29sZWFuIG5lZWRzX2V2ZW50czsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgR1NUX0ZMT1dfRVJST1IpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1BBRF9JU19TSU5LIChwYWQpLCBHU1RfRkxPV19FUlJPUik7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChidWZmZXIgIT0gTlVMTCwgR1NUX0ZMT1dfRVJST1IpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKKyAgaWYgKEdfVU5MSUtFTFkgKEdTVF9QQURfSVNfRkxVU0hJTkcgKHBhZCkpKQorICAgIGdvdG8gZmx1c2hpbmc7CisKKyAgUFJPQkUgKHBhZCwgR1NUX1BST0JFX1RZUEVfUFVMTCB8IEdTVF9QUk9CRV9UWVBFX0JMT0NLLCBOVUxMLAorICAgICAgcHJlX3Byb2JlX3N0b3BwZWQpOworCisgIGlmIChHX1VOTElLRUxZICgocGVlciA9IEdTVF9QQURfUEVFUiAocGFkKSkgPT0gTlVMTCkpCisgICAgZ290byBub3RfbGlua2VkOworCisgIGdzdF9vYmplY3RfcmVmIChwZWVyKTsKKyAgcGFkLT5wcml2LT51c2luZysrOworICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKworICByZXQgPSBnc3RfcGFkX2dldF9yYW5nZV91bmNoZWNrZWQgKHBlZXIsIG9mZnNldCwgc2l6ZSwgYnVmZmVyKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChwZWVyKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7CisgIHBhZC0+cHJpdi0+dXNpbmctLTsKKyAgaWYgKHBhZC0+cHJpdi0+dXNpbmcgPT0gMCkgeworICAgIC8qIHBhZCBpcyBub3QgYWN0aXZlIGFueW1vcmUsIHRyaWdnZXIgaWRsZSBjYWxsYmFja3MgKi8KKyAgICBQUk9CRSAocGFkLCBHU1RfUFJPQkVfVFlQRV9QVUxMIHwgR1NUX1BST0JFX1RZUEVfSURMRSwgTlVMTCwKKyAgICAgICAgcG9zdF9wcm9iZV9zdG9wcGVkKTsKKyAgfQorCisgIGlmIChHX1VOTElLRUxZIChyZXQgIT0gR1NUX0ZMT1dfT0spKQorICAgIGdvdG8gcHVsbF9yYW5nZV9mYWlsZWQ7CisKKyAgUFJPQkUgKHBhZCwgR1NUX1BST0JFX1RZUEVfUFVMTCB8IEdTVF9QUk9CRV9UWVBFX0JVRkZFUiwgYnVmZmVyLAorICAgICAgcG9zdF9wcm9iZV9zdG9wcGVkKTsKKworICBuZWVkc19ldmVudHMgPSBHU1RfUEFEX05FRURTX0VWRU5UUyAocGFkKTsKKyAgaWYgKEdfVU5MSUtFTFkgKG5lZWRzX2V2ZW50cykpIHsKKyAgICBHU1RfT0JKRUNUX0ZMQUdfVU5TRVQgKHBhZCwgR1NUX1BBRF9ORUVEX0VWRU5UUyk7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJ3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgZXZlbnRzIik7CisgICAgcmV0ID0gZ3N0X3BhZF91cGRhdGVfZXZlbnRzIChwYWQpOworICAgIGlmIChHX1VOTElLRUxZIChyZXQgIT0gR1NUX0ZMT1dfT0spKQorICAgICAgZ290byBldmVudHNfZXJyb3I7CisgIH0KKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisKKyAgcmV0dXJuIHJldDsKKworICAvKiBFUlJPUiByZWNvdmVyeSBoZXJlICovCitmbHVzaGluZzoKKyAgeworICAgIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9TQ0hFRFVMSU5HLCBwYWQsCisgICAgICAgICJwdWxscmFuZ2UsIGJ1dCBwYWQgd2FzIGZsdXNoaW5nIik7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisgICAgcmV0dXJuIEdTVF9GTE9XX1dST05HX1NUQVRFOworICB9CitwcmVfcHJvYmVfc3RvcHBlZDoKKyAgeworICAgIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9TQ0hFRFVMSU5HLCBwYWQsICJwcmUgcHJvYmUgcmV0dXJuZWQgJXMiLAorICAgICAgICBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisgICAgcmV0dXJuIHJldDsKKyAgfQorbm90X2xpbmtlZDoKKyAgeworICAgIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9TQ0hFRFVMSU5HLCBwYWQsCisgICAgICAgICJwdWxsaW5nIHJhbmdlLCBidXQgaXQgd2FzIG5vdCBsaW5rZWQiKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX0xJTktFRDsKKyAgfQorcHVsbF9yYW5nZV9mYWlsZWQ6CisgIHsKKyAgICAqYnVmZmVyID0gTlVMTDsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKyAgICBHU1RfQ0FUX0xFVkVMX0xPRyAoR1NUX0NBVF9TQ0hFRFVMSU5HLAorICAgICAgICAocmV0ID49IEdTVF9GTE9XX1VORVhQRUNURUQpID8gR1NUX0xFVkVMX0lORk8gOiBHU1RfTEVWRUxfV0FSTklORywKKyAgICAgICAgcGFkLCAicHVsbHJhbmdlIGZhaWxlZCwgZmxvdzogJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7CisgICAgcmV0dXJuIHJldDsKKyAgfQorcG9zdF9wcm9iZV9zdG9wcGVkOgorICB7CisgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1NDSEVEVUxJTkcsIHBhZCwKKyAgICAgICAgInBvc3QgcHJvYmUgcmV0dXJuZWQgJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisgICAgaWYgKHJldCA9PSBHU1RfRkxPV19PSykKKyAgICAgIGdzdF9idWZmZXJfdW5yZWYgKCpidWZmZXIpOworICAgICpidWZmZXIgPSBOVUxMOworICAgIHJldHVybiByZXQ7CisgIH0KK2V2ZW50c19lcnJvcjoKKyAgeworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworICAgIGdzdF9idWZmZXJfdW5yZWYgKCpidWZmZXIpOworICAgICpidWZmZXIgPSBOVUxMOworICAgIEdTVF9DQVRfV0FSTklOR19PQkpFQ1QgKEdTVF9DQVRfU0NIRURVTElORywgcGFkLAorICAgICAgICAicHVsbHJhbmdlIHJldHVybmVkIGV2ZW50cyB0aGF0IHdlcmUgbm90IGFjY2VwdGVkIik7CisgICAgcmV0dXJuIHJldDsKKyAgfQorfQorCisvKioKKyAqIGdzdF9wYWRfcHVzaF9ldmVudDoKKyAqIEBwYWQ6IGEgI0dzdFBhZCB0byBwdXNoIHRoZSBldmVudCB0by4KKyAqIEBldmVudDogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdEV2ZW50IHRvIHNlbmQgdG8gdGhlIHBhZC4KKyAqCisgKiBTZW5kcyB0aGUgZXZlbnQgdG8gdGhlIHBlZXIgb2YgdGhlIGdpdmVuIHBhZC4gVGhpcyBmdW5jdGlvbiBpcworICogbWFpbmx5IHVzZWQgYnkgZWxlbWVudHMgdG8gc2VuZCBldmVudHMgdG8gdGhlaXIgcGVlcgorICogZWxlbWVudHMuCisgKgorICogVGhpcyBmdW5jdGlvbiB0YWtlcyBvd2Vyc2hpcCBvZiB0aGUgcHJvdmlkZWQgZXZlbnQgc28geW91IHNob3VsZAorICogZ3N0X2V2ZW50X3JlZigpIGl0IGlmIHlvdSB3YW50IHRvIHJldXNlIHRoZSBldmVudCBhZnRlciB0aGlzIGNhbGwuCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgZXZlbnQgd2FzIGhhbmRsZWQuCisgKgorICogTVQgc2FmZS4KKyAqLworZ2Jvb2xlYW4KK2dzdF9wYWRfcHVzaF9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KQoreworICBHc3RGbG93UmV0dXJuIHJldDsKKyAgR3N0UGFkICpwZWVycGFkOworICBnYm9vbGVhbiByZXN1bHQ7CisgIGdib29sZWFuIHN0b3JlZCA9IEZBTFNFOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChldmVudCAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRVZFTlQgKGV2ZW50KSwgRkFMU0UpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKKworICBwZWVycGFkID0gR1NUX1BBRF9QRUVSIChwYWQpOworCisgIC8qIFR3byBjaGVja3MgdG8gYmUgbWFkZToKKyAgICogLiAodW4pc2V0IHRoZSBGTFVTSElORyBmbGFnIGZvciBmbHVzaGluZyBldmVudHMsCisgICAqIC4gaGFuZGxlIHBhZCBibG9ja2luZyAqLworICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKKyAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVEFSVDoKKyAgICAgIEdTVF9QQURfU0VUX0ZMVVNISU5HIChwYWQpOworCisgICAgICBpZiAoR19VTkxJS0VMWSAoR1NUX1BBRF9JU19CTE9DS0VEIChwYWQpKSkgeworICAgICAgICAvKiBmbHVzaCBzdGFydCB3aWxsIGhhdmUgc2V0IHRoZSBGTFVTSElORyBmbGFnIGFuZCB3aWxsIHRoZW4KKyAgICAgICAgICogdW5sb2NrIGFsbCB0aHJlYWRzIGRvaW5nIGEgR0NvbmQgd2FpdCBvbiB0aGUgYmxvY2tpbmcgcGFkLiBUaGlzCisgICAgICAgICAqIHdpbGwgdHlwaWNhbGx5IHVuYmxvY2sgdGhlIFNUUkVBTUlORyB0aHJlYWQgYmxvY2tlZCBvbiBhIHBhZC4gKi8KKyAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgIlBhZCBpcyBibG9ja2VkLCBub3QgZm9yd2FyZGluZyBmbHVzaC1zdGFydCwgIgorICAgICAgICAgICAgImRvaW5nIGJsb2NrIHNpZ25hbC4iKTsKKyAgICAgICAgR1NUX1BBRF9CTE9DS19CUk9BRENBU1QgKHBhZCk7CisgICAgICAgIGdvdG8gZmx1c2hlZDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6CisgICAgICBHU1RfUEFEX1VOU0VUX0ZMVVNISU5HIChwYWQpOworICAgICAgaWYgKEdfVU5MSUtFTFkgKEdTVF9QQURfSVNfQkxPQ0tFRCAocGFkKSkpIHsKKyAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgIlBhZCBpcyBibG9ja2VkLCBub3QgZm9yd2FyZGluZyBmbHVzaC1zdG9wIik7CisgICAgICAgIGdvdG8gZmx1c2hlZDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgeworICAgICAgLyogc3RvcmUgdGhlIGV2ZW50IG9uIHRoZSBwYWQsIGJ1dCBvbmx5IG9uIHNyY3BhZHMgKi8KKyAgICAgIGlmIChHU1RfUEFEX0lTX1NSQyAocGFkKSAmJiBHU1RfRVZFTlRfSVNfU1RJQ0tZIChldmVudCkpIHsKKyAgICAgICAgZ3VpbnQgaWR4OworCisgICAgICAgIGlkeCA9IEdTVF9FVkVOVF9TVElDS1lfSURYIChldmVudCk7CisgICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYWQsICJzdG9yaW5nIHN0aWNreSBldmVudCAlcyBhdCBpbmRleCAldSIsCisgICAgICAgICAgICBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCksIGlkeCk7CisKKyAgICAgICAgLyogc3JjcGFkIHN0aWNreSBldmVudHMgYWx3YXlzIGJlY29tZSBhY3RpdmUgaW1tZWRpYXRlbHkgKi8KKyAgICAgICAgZ3N0X2V2ZW50X3JlcGxhY2UgKCZwYWQtPnByaXYtPmV2ZW50c1tpZHhdLmV2ZW50LCBldmVudCk7CisKKyAgICAgICAgc3RvcmVkID0gVFJVRTsKKyAgICAgIH0KKworICAgICAgLyogYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgbW9kZSBmb3IgY2FwcyAqLworICAgICAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7CisgICAgICAgIGNhc2UgR1NUX0VWRU5UX0NBUFM6CisgICAgICAgIHsKKyAgICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKworICAgICAgICAgIGdfb2JqZWN0X25vdGlmeV9ieV9wc3BlYyAoKEdPYmplY3QgKikgcGFkLCBwc3BlY19jYXBzKTsKKworICAgICAgICAgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKKyAgICAgICAgICAvKiB0aGUgcGVlcnBhZCBtaWdodCBoYXZlIGNoYW5nZWQuIFRoaW5ncyB3ZSBjaGVja2VkIGFib3ZlIGNvdWxkIG5vdAorICAgICAgICAgICAqIGhhdmUgY2hhbmdlZC4gKi8KKyAgICAgICAgICBwZWVycGFkID0gR1NUX1BBRF9QRUVSIChwYWQpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6CisgICAgICAgIHsKKyAgICAgICAgICBnaW50NjQgb2Zmc2V0OworCisgICAgICAgICAgb2Zmc2V0ID0gcGFkLT5vZmZzZXQ7CisgICAgICAgICAgLyogY2hlY2sgaWYgd2UgbmVlZCB0byBhZGp1c3QgdGhlIHNlZ21lbnQgKi8KKyAgICAgICAgICBpZiAob2Zmc2V0ICE9IDAgJiYgKHBlZXJwYWQgIT0gTlVMTCkpIHsKKyAgICAgICAgICAgIEdzdFNlZ21lbnQgc2VnbWVudDsKKworICAgICAgICAgICAgLyogY29weSBzZWdtZW50IHZhbHVlcyAqLworICAgICAgICAgICAgZ3N0X2V2ZW50X2NvcHlfc2VnbWVudCAoZXZlbnQsICZzZWdtZW50KTsKKyAgICAgICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworCisgICAgICAgICAgICAvKiBhZGp1c3QgYW5kIG1ha2UgYSBuZXcgZXZlbnQgd2l0aCB0aGUgb2Zmc2V0IGFwcGxpZWQgKi8KKyAgICAgICAgICAgIHNlZ21lbnQuYmFzZSArPSBvZmZzZXQ7CisgICAgICAgICAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdTVF9FVkVOVF9SRUNPTkZJR1VSRToKKyAgICAgICAgICBpZiAoR1NUX1BBRF9JU19TSU5LIChwYWQpKQorICAgICAgICAgICAgR1NUX09CSkVDVF9GTEFHX1NFVCAocGFkLCBHU1RfUEFEX05FRURfUkVDT05GSUdVUkUpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBpZiAoR19VTkxJS0VMWSAoR1NUX1BBRF9JU19GTFVTSElORyAocGFkKSkpCisgICAgICAgIGdvdG8gZmx1c2hlZDsKKworICAgICAgUFJPQkUgKHBhZCwgR1NUX1BST0JFX1RZUEVfUFVTSCB8IEdTVF9QUk9CRV9UWVBFX0VWRU5UCisgICAgICAgICAgfCBHU1RfUFJPQkVfVFlQRV9CTE9DSywgZXZlbnQsIHByb2JlX3N0b3BwZWQpOworCisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICAvKiBzZW5kIHByb2JlcyBhZnRlciBtb2RpZnlpbmcgdGhlIGV2ZW50cyBhYm92ZSAqLworICBQUk9CRSAocGFkLCBHU1RfUFJPQkVfVFlQRV9QVVNIIHwgR1NUX1BST0JFX1RZUEVfRVZFTlQsIGV2ZW50LCBwcm9iZV9zdG9wcGVkKTsKKworICAvKiBub3cgY2hlY2sgdGhlIHBlZXIgcGFkICovCisgIGlmIChwZWVycGFkID09IE5VTEwpCisgICAgZ290byBub3RfbGlua2VkOworCisgIGdzdF9vYmplY3RfcmVmIChwZWVycGFkKTsKKyAgcGFkLT5wcml2LT51c2luZysrOworICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKworICBHU1RfTE9HX09CSkVDVCAocGFkLCAic2VuZGluZyBldmVudCAlcCAoJXMpIHRvIHBlZXJwYWQgJSIgR1NUX1BUUl9GT1JNQVQsCisgICAgICBldmVudCwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpLCBwZWVycGFkKTsKKworICByZXN1bHQgPSBnc3RfcGFkX3NlbmRfZXZlbnQgKHBlZXJwYWQsIGV2ZW50KTsKKworICAvKiBOb3RlOiB3ZSBnYXZlIGF3YXkgb3duZXJzaGlwIG9mIHRoZSBldmVudCBhdCB0aGlzIHBvaW50IGJ1dCB3ZSBjYW4gc3RpbGwKKyAgICogcHJpbnQgdGhlIG9sZCBwb2ludGVyICovCisgIEdTVF9MT0dfT0JKRUNUIChwYWQsCisgICAgICAic2VudCBldmVudCAlcCB0byBwZWVycGFkICUiIEdTVF9QVFJfRk9STUFUICIsIHJlc3VsdCAlZCIsIGV2ZW50LCBwZWVycGFkLAorICAgICAgcmVzdWx0KTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChwZWVycGFkKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7CisgIHBhZC0+cHJpdi0+dXNpbmctLTsKKyAgaWYgKHBhZC0+cHJpdi0+dXNpbmcgPT0gMCkgeworICAgIC8qIHBhZCBpcyBub3QgYWN0aXZlIGFueW1vcmUsIHRyaWdnZXIgaWRsZSBjYWxsYmFja3MgKi8KKyAgICBQUk9CRSAocGFkLCBHU1RfUFJPQkVfVFlQRV9QVVNIIHwgR1NUX1BST0JFX1RZUEVfSURMRSwgTlVMTCwgcHJvYmVfc3RvcHBlZCk7CisgIH0KKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisKKyAgcmV0dXJuIHJlc3VsdCB8IHN0b3JlZDsKKworICAvKiBFUlJPUiBoYW5kbGluZyAqLworZmx1c2hlZDoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIldlJ3JlIGZsdXNoaW5nIik7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgICAgcmV0dXJuIHN0b3JlZDsKKyAgfQorcHJvYmVfc3RvcHBlZDoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIlByb2JlIHJldHVybmVkICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworICAgIHJldHVybiBzdG9yZWQ7CisgIH0KK25vdF9saW5rZWQ6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJEcm9wcGluZyBldmVudCBiZWNhdXNlIHBhZCBpcyBub3QgbGlua2VkIik7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgICAgcmV0dXJuIHN0b3JlZDsKKyAgfQorfQorCisvKioKKyAqIGdzdF9wYWRfc2VuZF9ldmVudDoKKyAqIEBwYWQ6IGEgI0dzdFBhZCB0byBzZW5kIHRoZSBldmVudCB0by4KKyAqIEBldmVudDogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdEV2ZW50IHRvIHNlbmQgdG8gdGhlIHBhZC4KKyAqCisgKiBTZW5kcyB0aGUgZXZlbnQgdG8gdGhlIHBhZC4gVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZAorICogYnkgYXBwbGljYXRpb25zIHRvIHNlbmQgZXZlbnRzIGluIHRoZSBwaXBlbGluZS4KKyAqCisgKiBJZiBAcGFkIGlzIGEgc291cmNlIHBhZCwgQGV2ZW50IHNob3VsZCBiZSBhbiB1cHN0cmVhbSBldmVudC4gSWYgQHBhZCBpcyBhCisgKiBzaW5rIHBhZCwgQGV2ZW50IHNob3VsZCBiZSBhIGRvd25zdHJlYW0gZXZlbnQuIEZvciBleGFtcGxlLCB5b3Ugd291bGQgbm90CisgKiBzZW5kIGEgI0dTVF9FVkVOVF9FT1Mgb24gYSBzcmMgcGFkOyBFT1MgZXZlbnRzIG9ubHkgcHJvcGFnYXRlIGRvd25zdHJlYW0uCisgKiBGdXJ0aGVybW9yZSwgc29tZSBkb3duc3RyZWFtIGV2ZW50cyBoYXZlIHRvIGJlIHNlcmlhbGl6ZWQgd2l0aCBkYXRhIGZsb3csCisgKiBsaWtlIEVPUywgd2hpbGUgc29tZSBjYW4gdHJhdmVsIG91dC1vZi1iYW5kLCBsaWtlICNHU1RfRVZFTlRfRkxVU0hfU1RBUlQuIElmCisgKiB0aGUgZXZlbnQgbmVlZHMgdG8gYmUgc2VyaWFsaXplZCB3aXRoIGRhdGEgZmxvdywgdGhpcyBmdW5jdGlvbiB3aWxsIHRha2UgdGhlCisgKiBwYWQncyBzdHJlYW0gbG9jayB3aGlsZSBjYWxsaW5nIGl0cyBldmVudCBmdW5jdGlvbi4KKyAqCisgKiBUbyBmaW5kIG91dCB3aGV0aGVyIGFuIGV2ZW50IHR5cGUgaXMgdXBzdHJlYW0sIGRvd25zdHJlYW0sIG9yIGRvd25zdHJlYW0gYW5kCisgKiBzZXJpYWxpemVkLCBzZWUgI0dzdEV2ZW50VHlwZUZsYWdzLCBnc3RfZXZlbnRfdHlwZV9nZXRfZmxhZ3MoKSwKKyAqICNHU1RfRVZFTlRfSVNfVVBTVFJFQU0sICNHU1RfRVZFTlRfSVNfRE9XTlNUUkVBTSwgYW5kCisgKiAjR1NUX0VWRU5UX0lTX1NFUklBTElaRUQuIE5vdGUgdGhhdCBpbiBwcmFjdGljZSB0aGF0IGFuIGFwcGxpY2F0aW9uIG9yCisgKiBwbHVnaW4gZG9lc24ndCBuZWVkIHRvIGJvdGhlciBpdHNlbGYgd2l0aCB0aGlzIGluZm9ybWF0aW9uOyB0aGUgY29yZSBoYW5kbGVzCisgKiBhbGwgbmVjZXNzYXJ5IGxvY2tzIGFuZCBjaGVja3MuCisgKgorICogVGhpcyBmdW5jdGlvbiB0YWtlcyBvd2Vyc2hpcCBvZiB0aGUgcHJvdmlkZWQgZXZlbnQgc28geW91IHNob3VsZAorICogZ3N0X2V2ZW50X3JlZigpIGl0IGlmIHlvdSB3YW50IHRvIHJldXNlIHRoZSBldmVudCBhZnRlciB0aGlzIGNhbGwuCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgZXZlbnQgd2FzIGhhbmRsZWQuCisgKi8KK2dib29sZWFuCitnc3RfcGFkX3NlbmRfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiBldmVudCkKK3sKKyAgR3N0Rmxvd1JldHVybiByZXQ7CisgIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOworICBnYm9vbGVhbiBzZXJpYWxpemVkLCBuZWVkX3VubG9jayA9IEZBTFNFLCBuZWVkc19ldmVudHMsIHN0aWNreTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZXZlbnQgIT0gTlVMTCwgRkFMU0UpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKKyAgaWYgKEdTVF9QQURfSVNfU0lOSyAocGFkKSkgeworICAgIGlmIChHX1VOTElLRUxZICghR1NUX0VWRU5UX0lTX0RPV05TVFJFQU0gKGV2ZW50KSkpCisgICAgICBnb3RvIHdyb25nX2RpcmVjdGlvbjsKKyAgICBzZXJpYWxpemVkID0gR1NUX0VWRU5UX0lTX1NFUklBTElaRUQgKGV2ZW50KTsKKyAgICBzdGlja3kgPSBHU1RfRVZFTlRfSVNfU1RJQ0tZIChldmVudCk7CisgIH0gZWxzZSBpZiAoR1NUX1BBRF9JU19TUkMgKHBhZCkpIHsKKyAgICBpZiAoR19VTkxJS0VMWSAoIUdTVF9FVkVOVF9JU19VUFNUUkVBTSAoZXZlbnQpKSkKKyAgICAgIGdvdG8gd3JvbmdfZGlyZWN0aW9uOworICAgIC8qIGV2ZW50cyBvbiBzcmNwYWQgbmV2ZXIgYXJlIHNlcmlhbGl6ZWQgYW5kIHN0aWNreSAqLworICAgIHNlcmlhbGl6ZWQgPSBzdGlja3kgPSBGQUxTRTsKKyAgfSBlbHNlCisgICAgZ290byB1bmtub3duX2RpcmVjdGlvbjsKKworICAvKiBnZXQgdGhlIGZsYWcgZmlyc3QsIHdlIGNsZWFyIGl0IHdoZW4gd2UgaGF2ZSBhIEZMVVNIIG9yIGEgbm9uLXNlcmlhbGl6ZWQKKyAgICogZXZlbnQuICovCisgIG5lZWRzX2V2ZW50cyA9IEdTVF9QQURfTkVFRFNfRVZFTlRTIChwYWQpOworCisgIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgeworICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUQVJUOgorICAgICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfRVZFTlQsIHBhZCwKKyAgICAgICAgICAiaGF2ZSBldmVudCB0eXBlICVkIChGTFVTSF9TVEFSVCkiLCBHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKTsKKworICAgICAgLyogY2FuJ3QgZXZlbiBhY2NlcHQgYSBmbHVzaCBiZWdpbiBldmVudCB3aGVuIGZsdXNoaW5nICovCisgICAgICBpZiAoR1NUX1BBRF9JU19GTFVTSElORyAocGFkKSkKKyAgICAgICAgZ290byBmbHVzaGluZzsKKworICAgICAgR1NUX1BBRF9TRVRfRkxVU0hJTkcgKHBhZCk7CisgICAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9FVkVOVCwgcGFkLCAic2V0IGZsdXNoIGZsYWciKTsKKyAgICAgIG5lZWRzX2V2ZW50cyA9IEZBTFNFOworICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKKyAgICAgIGlmIChHX0xJS0VMWSAoR1NUX1BBRF9BQ1RJVkFURV9NT0RFIChwYWQpICE9IEdTVF9BQ1RJVkFURV9OT05FKSkgeworICAgICAgICBHU1RfUEFEX1VOU0VUX0ZMVVNISU5HIChwYWQpOworICAgICAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9FVkVOVCwgcGFkLCAiY2xlYXJlZCBmbHVzaCBmbGFnIik7CisgICAgICB9CisgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKyAgICAgIC8qIGdyYWIgc3RyZWFtIGxvY2sgKi8KKyAgICAgIEdTVF9QQURfU1RSRUFNX0xPQ0sgKHBhZCk7CisgICAgICBuZWVkX3VubG9jayA9IFRSVUU7CisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7CisgICAgICBuZWVkc19ldmVudHMgPSBGQUxTRTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX0VWRU5UX1JFQ09ORklHVVJFOgorICAgICAgaWYgKEdTVF9QQURfSVNfU1JDIChwYWQpKQorICAgICAgICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChwYWQsIEdTVF9QQURfTkVFRF9SRUNPTkZJR1VSRSk7CisgICAgZGVmYXVsdDoKKyAgICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0VWRU5ULCBwYWQsICJoYXZlIGV2ZW50IHR5cGUgJXMiLAorICAgICAgICAgIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7CisKKyAgICAgIGlmIChzZXJpYWxpemVkKSB7CisgICAgICAgIC8qIGxvY2sgb3JkZXI6IFNUUkVBTV9MT0NLLCBMT0NLLCByZWNoZWNrIGZsdXNoaW5nLiAqLworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKyAgICAgICAgR1NUX1BBRF9TVFJFQU1fTE9DSyAocGFkKTsKKyAgICAgICAgbmVlZF91bmxvY2sgPSBUUlVFOworICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7CisgICAgICB9IGVsc2UgeworICAgICAgICAvKiBkb24ndCBmb3J3YXJkIGV2ZW50cyBvbiBub24tc2VyaWFsaXplZCBldmVudHMgKi8KKyAgICAgICAgbmVlZHNfZXZlbnRzID0gRkFMU0U7CisgICAgICB9CisKKyAgICAgIC8qIHN0b3JlIHRoZSBldmVudCBvbiB0aGUgcGFkLCBidXQgb25seSBvbiBzcmNwYWRzLiBXZSBuZWVkIHRvIHN0b3JlIHRoZQorICAgICAgICogZXZlbnQgYmVmb3JlIGNoZWNraW5nIHRoZSBmbHVzaGluZyBmbGFnLiAqLworICAgICAgaWYgKHN0aWNreSkgeworICAgICAgICBndWludCBpZHg7CisgICAgICAgIFBhZEV2ZW50ICpldjsKKworICAgICAgICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKKyAgICAgICAgICBjYXNlIEdTVF9FVkVOVF9TRUdNRU5UOgorICAgICAgICAgICAgaWYgKHBhZC0+b2Zmc2V0ICE9IDApIHsKKyAgICAgICAgICAgICAgR3N0U2VnbWVudCBzZWdtZW50OworCisgICAgICAgICAgICAgIC8qIGNvcHkgc2VnbWVudCB2YWx1ZXMgKi8KKyAgICAgICAgICAgICAgZ3N0X2V2ZW50X2NvcHlfc2VnbWVudCAoZXZlbnQsICZzZWdtZW50KTsKKyAgICAgICAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisKKyAgICAgICAgICAgICAgLyogYWRqdXN0IGFuZCBtYWtlIGEgbmV3IGV2ZW50IHdpdGggdGhlIG9mZnNldCBhcHBsaWVkICovCisgICAgICAgICAgICAgIHNlZ21lbnQuYmFzZSArPSBwYWQtPm9mZnNldDsKKyAgICAgICAgICAgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlkeCA9IEdTVF9FVkVOVF9TVElDS1lfSURYIChldmVudCk7CisgICAgICAgIGV2ID0gJnBhZC0+cHJpdi0+ZXZlbnRzW2lkeF07CisKKyAgICAgICAgaWYgKGV2LT5ldmVudCAhPSBldmVudCkgeworICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYWQsICJzdG9yaW5nIHN0aWNreSBldmVudCAlcyBhdCBpbmRleCAldSIsCisgICAgICAgICAgICAgIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSwgaWR4KTsKKyAgICAgICAgICBnc3RfZXZlbnRfcmVwbGFjZSAoJmV2LT5wZW5kaW5nLCBldmVudCk7CisgICAgICAgICAgLyogc2V0IHRoZSBmbGFnIHNvIHRoYXQgd2UgdXBkYXRlIHRoZSBldmVudHMgbmV4dCB0aW1lLiBXZSB3b3VsZAorICAgICAgICAgICAqIHVzdWFsbHkgdXBkYXRlIGJlbG93IGJ1dCB3ZSBtaWdodCBiZSBmbHVzaGluZyB0b28uICovCisgICAgICAgICAgR1NUX09CSkVDVF9GTEFHX1NFVCAocGFkLCBHU1RfUEFEX05FRURfRVZFTlRTKTsKKyAgICAgICAgICBuZWVkc19ldmVudHMgPSBUUlVFOworICAgICAgICB9CisgICAgICB9CisgICAgICAvKiBub3cgZG8gdGhlIHByb2JlICovCisgICAgICBpZiAoR19VTkxJS0VMWSAoR1NUX1BBRF9JU19GTFVTSElORyAocGFkKSkpCisgICAgICAgIGdvdG8gZmx1c2hpbmc7CisKKyAgICAgIFBST0JFIChwYWQsIEdTVF9QUk9CRV9UWVBFX1BVU0ggfCBHU1RfUFJPQkVfVFlQRV9FVkVOVCwgZXZlbnQsCisgICAgICAgICAgcHJvYmVfc3RvcHBlZCk7CisKKyAgICAgIGJyZWFrOworICB9CisKKyAgaWYgKEdfVU5MSUtFTFkgKG5lZWRzX2V2ZW50cykpIHsKKyAgICBHc3RGbG93UmV0dXJuIHJldDsKKworICAgIEdTVF9PQkpFQ1RfRkxBR19VTlNFVCAocGFkLCBHU1RfUEFEX05FRURfRVZFTlRTKTsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIm5lZWQgdG8gdXBkYXRlIGFsbCBldmVudHMiKTsKKyAgICByZXQgPSBnc3RfcGFkX3VwZGF0ZV9ldmVudHMgKHBhZCk7CisgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKKyAgICAgIGdvdG8gdXBkYXRlX2ZhaWxlZDsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKworICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworCisgICAgcmVzdWx0ID0gVFJVRTsKKyAgfQorCisgIC8qIGVuc3VyZSB0byBwYXNzIG9uIGV2ZW50OworICAgKiBub3RlIHRoYXQgYSBzdGlja3kgZXZlbnQgaGFzIGFscmVhZHkgYmVlbiB1cGRhdGVkIGFib3ZlICovCisgIGlmIChHX0xJS0VMWSAoIW5lZWRzX2V2ZW50cyB8fCAhc3RpY2t5KSkgeworICAgIEdzdFBhZEV2ZW50RnVuY3Rpb24gZXZlbnRmdW5jOworCisgICAgaWYgKEdfVU5MSUtFTFkgKChldmVudGZ1bmMgPSBHU1RfUEFEX0VWRU5URlVOQyAocGFkKSkgPT0gTlVMTCkpCisgICAgICBnb3RvIG5vX2Z1bmN0aW9uOworCisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisKKyAgICByZXN1bHQgPSBldmVudGZ1bmMgKHBhZCwgZXZlbnQpOworICB9CisKKyAgaWYgKG5lZWRfdW5sb2NrKQorICAgIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAocGFkKTsKKworICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJzZW50IGV2ZW50LCByZXN1bHQgJWQiLCByZXN1bHQpOworCisgIHJldHVybiByZXN1bHQ7CisKKyAgLyogRVJST1IgaGFuZGxpbmcgKi8KK3dyb25nX2RpcmVjdGlvbjoKKyAgeworICAgIGdfd2FybmluZyAoInBhZCAlczolcyBzZW5kaW5nICVzIGV2ZW50IGluIHdyb25nIGRpcmVjdGlvbiIsCisgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKyAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK3Vua25vd25fZGlyZWN0aW9uOgorICB7CisgICAgZ193YXJuaW5nICgicGFkICVzOiVzIGhhcyBpbnZhbGlkIGRpcmVjdGlvbiIsIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Citub19mdW5jdGlvbjoKKyAgeworICAgIGdfd2FybmluZyAoInBhZCAlczolcyBoYXMgbm8gZXZlbnQgaGFuZGxlciwgZmlsZSBhIGJ1Zy4iLAorICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworICAgIGlmIChuZWVkX3VubG9jaykKKyAgICAgIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAocGFkKTsKKyAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK2ZsdXNoaW5nOgorICB7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisgICAgaWYgKG5lZWRfdW5sb2NrKQorICAgICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChwYWQpOworICAgIEdTVF9DQVRfSU5GT19PQkpFQ1QgKEdTVF9DQVRfRVZFTlQsIHBhZCwKKyAgICAgICAgIlJlY2VpdmVkIGV2ZW50IG9uIGZsdXNoaW5nIHBhZC4gRGlzY2FyZGluZyIpOworICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorcHJvYmVfc3RvcHBlZDoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInByb2JlIHJldHVybmVkICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworICAgIGlmIChuZWVkX3VubG9jaykKKyAgICAgIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAocGFkKTsKKyAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK3VwZGF0ZV9mYWlsZWQ6CisgIHsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKyAgICBpZiAobmVlZF91bmxvY2spCisgICAgICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKHBhZCk7CisgICAgR1NUX0NBVF9JTkZPX09CSkVDVCAoR1NUX0NBVF9FVkVOVCwgcGFkLCAiVXBkYXRlIGV2ZW50cyBmYWlsZWQiKTsKKyAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworLyoqCisgKiBnc3RfcGFkX3NldF9lbGVtZW50X3ByaXZhdGU6CisgKiBAcGFkOiB0aGUgI0dzdFBhZCB0byBzZXQgdGhlIHByaXZhdGUgZGF0YSBvZi4KKyAqIEBwcml2OiBUaGUgcHJpdmF0ZSBkYXRhIHRvIGF0dGFjaCB0byB0aGUgcGFkLgorICoKKyAqIFNldCB0aGUgZ2l2ZW4gcHJpdmF0ZSBkYXRhIGdwb2ludGVyIG9uIHRoZSBwYWQuCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgYnkgdGhlIGVsZW1lbnQgdGhhdCBvd25zIHRoZSBwYWQuCisgKiBObyBsb2NraW5nIGlzIHBlcmZvcm1lZCBpbiB0aGlzIGZ1bmN0aW9uLgorICovCit2b2lkCitnc3RfcGFkX3NldF9lbGVtZW50X3ByaXZhdGUgKEdzdFBhZCAqIHBhZCwgZ3BvaW50ZXIgcHJpdikKK3sKKyAgcGFkLT5lbGVtZW50X3ByaXZhdGUgPSBwcml2OworfQorCisvKioKKyAqIGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZToKKyAqIEBwYWQ6IHRoZSAjR3N0UGFkIHRvIGdldCB0aGUgcHJpdmF0ZSBkYXRhIG9mLgorICoKKyAqIEdldHMgdGhlIHByaXZhdGUgZGF0YSBvZiBhIHBhZC4KKyAqIE5vIGxvY2tpbmcgaXMgcGVyZm9ybWVkIGluIHRoaXMgZnVuY3Rpb24uCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBhICNncG9pbnRlciB0byB0aGUgcHJpdmF0ZSBkYXRhLgorICovCitncG9pbnRlcgorZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlIChHc3RQYWQgKiBwYWQpCit7CisgIHJldHVybiBwYWQtPmVsZW1lbnRfcHJpdmF0ZTsKK30KKworLyoqCisgKiBnc3RfcGFkX2dldF9zdGlja3lfZXZlbnQ6CisgKiBAcGFkOiB0aGUgI0dzdFBhZCB0byBnZXQgdGhlIGV2ZW50IGZyb20uCisgKiBAZXZlbnRfdHlwZTogdGhlICNHc3RFdmVudFR5cGUgdGhhdCBzaG91bGQgYmUgcmV0cmlldmVkLgorICoKKyAqIFJldHVybnMgYSBuZXcgcmVmZXJlbmNlIG9mIHRoZSBzdGlja3kgZXZlbnQgb2YgdHlwZSBAZXZlbnRfdHlwZQorICogZnJvbSB0aGUgZXZlbnQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RFdmVudCBvZiB0eXBlIEBldmVudF90eXBlLiBVbnJlZiBhZnRlciB1c2FnZS4KKyAqLworR3N0RXZlbnQgKgorZ3N0X3BhZF9nZXRfc3RpY2t5X2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50VHlwZSBldmVudF90eXBlKQoreworICBHc3RFdmVudCAqZXZlbnQgPSBOVUxMOworICBndWludCBpZHg7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoKGV2ZW50X3R5cGUgJiBHU1RfRVZFTlRfVFlQRV9TVElDS1kpICE9IDAsIE5VTEwpOworCisgIGlkeCA9IEdTVF9FVkVOVF9TVElDS1lfSURYX1RZUEUgKGV2ZW50X3R5cGUpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKKyAgaWYgKChldmVudCA9IHBhZC0+cHJpdi0+ZXZlbnRzW2lkeF0uZXZlbnQpKSB7CisgICAgZ3N0X2V2ZW50X3JlZiAoZXZlbnQpOworICB9CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworCisgIHJldHVybiBldmVudDsKK30KKworLyoqCisgKiBnc3RfcGFkX3N0aWNreV9ldmVudHNfZm9yZWFjaDoKKyAqIEBwYWQ6IHRoZSAjR3N0UGFkIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIGl0ZXJhdGlvbi4KKyAqIEBmb3JlYWNoX2Z1bmM6IChzY29wZSBjYWxsKTogdGhlICNHc3RQYWRTdGlja3lFdmVudHNGb3JlYWNoRnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgY2FsbGVkIGZvciBldmVyeSBldmVudC4KKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogdGhlIG9wdGlvbmFsIHVzZXIgZGF0YS4KKyAqCisgKiBJdGVyYXRlcyBhbGwgYWN0aXZlIHN0aWNreSBldmVudHMgb24gQHBhZCBhbmQgY2FsbHMgQGZvcmVhY2hfZnVuYyBmb3IgZXZlcnkKKyAqIGV2ZW50LiBJZiBAZm9yZWFjaF9mdW5jIHJldHVybnMgc29tZXRoaW5nIGVsc2UgdGhhbiBHU1RfRkxPV19PSyB0aGUgaXRlcmF0aW9uCisgKiBpcyBpbW1lZGlhdGVseSBzdG9wcGVkLgorICoKKyAqIFJldHVybnM6IEdTVF9GTE9XX09LIGlmIGl0ZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bAorICovCitHc3RGbG93UmV0dXJuCitnc3RfcGFkX3N0aWNreV9ldmVudHNfZm9yZWFjaCAoR3N0UGFkICogcGFkLAorICAgIEdzdFBhZFN0aWNreUV2ZW50c0ZvcmVhY2hGdW5jdGlvbiBmb3JlYWNoX2Z1bmMsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKKyAgZ3VpbnQgaTsKKyAgR3N0RXZlbnQgKmV2ZW50OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBHU1RfRkxPV19FUlJPUik7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmb3JlYWNoX2Z1bmMgIT0gTlVMTCwgR1NUX0ZMT1dfRVJST1IpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKKworcmVzdGFydDoKKyAgZm9yIChpID0gMDsgaSA8IEdTVF9FVkVOVF9NQVhfU1RJQ0tZOyBpKyspIHsKKyAgICBnYm9vbGVhbiByZXM7CisgICAgUGFkRXZlbnQgKmV2OworCisgICAgZXYgPSAmcGFkLT5wcml2LT5ldmVudHNbaV07CisKKyAgICAvKiBza2lwIHdpdGhvdXQgYWN0aXZlIGV2ZW50ICovCisgICAgaWYgKChldmVudCA9IGV2LT5ldmVudCkgPT0gTlVMTCkKKyAgICAgIGNvbnRpbnVlOworCisgICAgZ3N0X2V2ZW50X3JlZiAoZXZlbnQpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworCisgICAgcmVzID0gZm9yZWFjaF9mdW5jIChwYWQsIGV2ZW50LCB1c2VyX2RhdGEpOworCisgICAgR1NUX09CSkVDVF9MT0NLIChwYWQpOworICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworCisgICAgaWYgKHJlcyAhPSBHU1RfRkxPV19PSykgeworICAgICAgcmV0ID0gcmVzOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLyogdGhpbmdzIGNvdWxkIGhhdmUgY2hhbmdlZCB3aGlsZSB3ZSByZWxlYXNlIHRoZSBsb2NrLCBjaGVjayBpZiB3ZSBzdGlsbAorICAgICAqIGFyZSBoYW5kbGluZyB0aGUgc2FtZSBldmVudCwgaWYgd2UgZG9uJ3Qgc29tZXRoaW5nIGNoYW5nZWQgYW5kIHdlIGhhdmUKKyAgICAgKiB0byB0cnkgYWdhaW4uIEZJWE1FLiB3ZSBuZWVkIGEgY29va2llIGhlcmUuICovCisgICAgaWYgKGV2ZW50ICE9IGV2LT5ldmVudCkgeworICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiZXZlbnRzIGNoYW5nZWQsIHJlc3RhcnRpbmciKTsKKyAgICAgIGdvdG8gcmVzdGFydDsKKyAgICB9CisgIH0KKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisKKyAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK2RvX3N0cmVhbV9zdGF0dXMgKEdzdFBhZCAqIHBhZCwgR3N0U3RyZWFtU3RhdHVzVHlwZSB0eXBlLAorICAgIEdUaHJlYWQgKiB0aHJlYWQsIEdzdFRhc2sgKiB0YXNrKQoreworICBHc3RFbGVtZW50ICpwYXJlbnQ7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiZG9pbmcgc3RyZWFtLXN0YXR1cyAlZCIsIHR5cGUpOworCisgIGlmICgocGFyZW50ID0gR1NUX0VMRU1FTlRfQ0FTVCAoZ3N0X3BhZF9nZXRfcGFyZW50IChwYWQpKSkpIHsKKyAgICBpZiAoR1NUX0lTX0VMRU1FTlQgKHBhcmVudCkpIHsKKyAgICAgIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7CisgICAgICBHVmFsdWUgdmFsdWUgPSB7IDAgfTsKKworICAgICAgaWYgKHR5cGUgPT0gR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9FTlRFUikgeworICAgICAgICBnY2hhciAqdG5hbWUsICplbmFtZSwgKnBuYW1lOworCisgICAgICAgIC8qIGNyZWF0ZSBhIGdvb2QgdGFzayBuYW1lICovCisgICAgICAgIGVuYW1lID0gZ3N0X2VsZW1lbnRfZ2V0X25hbWUgKHBhcmVudCk7CisgICAgICAgIHBuYW1lID0gZ3N0X3BhZF9nZXRfbmFtZSAocGFkKTsKKyAgICAgICAgdG5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCIlczolcyIsIGVuYW1lLCBwbmFtZSk7CisgICAgICAgIGdfZnJlZSAoZW5hbWUpOworICAgICAgICBnX2ZyZWUgKHBuYW1lKTsKKworICAgICAgICBnc3Rfb2JqZWN0X3NldF9uYW1lIChHU1RfT0JKRUNUX0NBU1QgKHRhc2spLCB0bmFtZSk7CisgICAgICAgIGdfZnJlZSAodG5hbWUpOworICAgICAgfQorCisgICAgICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X3N0cmVhbV9zdGF0dXMgKEdTVF9PQkpFQ1RfQ0FTVCAocGFkKSwKKyAgICAgICAgICB0eXBlLCBwYXJlbnQpOworCisgICAgICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZSwgR1NUX1RZUEVfVEFTSyk7CisgICAgICBnX3ZhbHVlX3NldF9vYmplY3QgKCZ2YWx1ZSwgdGFzayk7CisgICAgICBnc3RfbWVzc2FnZV9zZXRfc3RyZWFtX3N0YXR1c19vYmplY3QgKG1lc3NhZ2UsICZ2YWx1ZSk7CisgICAgICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUpOworCisgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJwb3N0aW5nIHN0cmVhbS1zdGF0dXMgJWQiLCB0eXBlKTsKKyAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAocGFyZW50LCBtZXNzYWdlKTsKKyAgICB9CisgICAgZ3N0X29iamVjdF91bnJlZiAocGFyZW50KTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorcGFkX2VudGVyX3RocmVhZCAoR3N0VGFzayAqIHRhc2ssIEdUaHJlYWQgKiB0aHJlYWQsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgZG9fc3RyZWFtX3N0YXR1cyAoR1NUX1BBRF9DQVNUICh1c2VyX2RhdGEpLCBHU1RfU1RSRUFNX1NUQVRVU19UWVBFX0VOVEVSLAorICAgICAgdGhyZWFkLCB0YXNrKTsKK30KKworc3RhdGljIHZvaWQKK3BhZF9sZWF2ZV90aHJlYWQgKEdzdFRhc2sgKiB0YXNrLCBHVGhyZWFkICogdGhyZWFkLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIGRvX3N0cmVhbV9zdGF0dXMgKEdTVF9QQURfQ0FTVCAodXNlcl9kYXRhKSwgR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9MRUFWRSwKKyAgICAgIHRocmVhZCwgdGFzayk7Cit9CisKK3N0YXRpYyBHc3RUYXNrVGhyZWFkQ2FsbGJhY2tzIHRocl9jYWxsYmFja3MgPSB7CisgIHBhZF9lbnRlcl90aHJlYWQsCisgIHBhZF9sZWF2ZV90aHJlYWQsCit9OworCisvKioKKyAqIGdzdF9wYWRfc3RhcnRfdGFzazoKKyAqIEBwYWQ6IHRoZSAjR3N0UGFkIHRvIHN0YXJ0IHRoZSB0YXNrIG9mCisgKiBAZnVuYzogdGhlIHRhc2sgZnVuY3Rpb24gdG8gY2FsbAorICogQGRhdGE6IGRhdGEgcGFzc2VkIHRvIHRoZSB0YXNrIGZ1bmN0aW9uCisgKgorICogU3RhcnRzIGEgdGFzayB0aGF0IHJlcGVhdGVkbHkgY2FsbHMgQGZ1bmMgd2l0aCBAZGF0YS4gVGhpcyBmdW5jdGlvbgorICogaXMgbW9zdGx5IHVzZWQgaW4gcGFkIGFjdGl2YXRpb24gZnVuY3Rpb25zIHRvIHN0YXJ0IHRoZSBkYXRhZmxvdy4KKyAqIFRoZSAjR1NUX1BBRF9TVFJFQU1fTE9DSyBvZiBAcGFkIHdpbGwgYXV0b21hdGljYWxseSBiZSBhY3F1aXJlZAorICogYmVmb3JlIEBmdW5jIGlzIGNhbGxlZC4KKyAqCisgKiBSZXR1cm5zOiBhICVUUlVFIGlmIHRoZSB0YXNrIGNvdWxkIGJlIHN0YXJ0ZWQuCisgKi8KK2dib29sZWFuCitnc3RfcGFkX3N0YXJ0X3Rhc2sgKEdzdFBhZCAqIHBhZCwgR3N0VGFza0Z1bmN0aW9uIGZ1bmMsIGdwb2ludGVyIGRhdGEpCit7CisgIEdzdFRhc2sgKnRhc2s7CisgIGdib29sZWFuIHJlczsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZnVuYyAhPSBOVUxMLCBGQUxTRSk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAic3RhcnQgdGFzayIpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKKyAgdGFzayA9IEdTVF9QQURfVEFTSyAocGFkKTsKKyAgaWYgKHRhc2sgPT0gTlVMTCkgeworICAgIHRhc2sgPSBnc3RfdGFza19jcmVhdGUgKGZ1bmMsIGRhdGEpOworICAgIGdzdF90YXNrX3NldF9sb2NrICh0YXNrLCBHU1RfUEFEX0dFVF9TVFJFQU1fTE9DSyAocGFkKSk7CisgICAgZ3N0X3Rhc2tfc2V0X3RocmVhZF9jYWxsYmFja3MgKHRhc2ssICZ0aHJfY2FsbGJhY2tzLCBwYWQsIE5VTEwpOworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImNyZWF0ZWQgdGFzayIpOworICAgIEdTVF9QQURfVEFTSyAocGFkKSA9IHRhc2s7CisgICAgZ3N0X29iamVjdF9yZWYgKHRhc2spOworICAgIC8qIHJlbGVhc2UgbG9jayB0byBwb3N0IHRoZSBtZXNzYWdlICovCisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisKKyAgICBkb19zdHJlYW1fc3RhdHVzIChwYWQsIEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfQ1JFQVRFLCBOVUxMLCB0YXNrKTsKKworICAgIGdzdF9vYmplY3RfdW5yZWYgKHRhc2spOworCisgICAgR1NUX09CSkVDVF9MT0NLIChwYWQpOworICAgIC8qIG5vYm9keSBlbHNlIGlzIHN1cHBvc2VkIHRvIGhhdmUgY2hhbmdlZCB0aGUgcGFkIG5vdyAqLworICAgIGlmIChHU1RfUEFEX1RBU0sgKHBhZCkgIT0gdGFzaykKKyAgICAgIGdvdG8gY29uY3VycmVudF9zdG9wOworICB9CisgIHJlcyA9IGdzdF90YXNrX3NldF9zdGF0ZSAodGFzaywgR1NUX1RBU0tfU1RBUlRFRCk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworCisgIHJldHVybiByZXM7CisKKyAgLyogRVJST1JTICovCitjb25jdXJyZW50X3N0b3A6CisgIHsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorfQorCisvKioKKyAqIGdzdF9wYWRfcGF1c2VfdGFzazoKKyAqIEBwYWQ6IHRoZSAjR3N0UGFkIHRvIHBhdXNlIHRoZSB0YXNrIG9mCisgKgorICogUGF1c2UgdGhlIHRhc2sgb2YgQHBhZC4gVGhpcyBmdW5jdGlvbiB3aWxsIGFsc28gd2FpdCB1bnRpbCB0aGUKKyAqIGZ1bmN0aW9uIGV4ZWN1dGVkIGJ5IHRoZSB0YXNrIGlzIGZpbmlzaGVkIGlmIHRoaXMgZnVuY3Rpb24gaXMgbm90CisgKiBjYWxsZWQgZnJvbSB0aGUgdGFzayBmdW5jdGlvbi4KKyAqCisgKiBSZXR1cm5zOiBhIFRSVUUgaWYgdGhlIHRhc2sgY291bGQgYmUgcGF1c2VkIG9yIEZBTFNFIHdoZW4gdGhlIHBhZAorICogaGFzIG5vIHRhc2suCisgKi8KK2dib29sZWFuCitnc3RfcGFkX3BhdXNlX3Rhc2sgKEdzdFBhZCAqIHBhZCkKK3sKKyAgR3N0VGFzayAqdGFzazsKKyAgZ2Jvb2xlYW4gcmVzOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAicGF1c2UgdGFzayIpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKKyAgdGFzayA9IEdTVF9QQURfVEFTSyAocGFkKTsKKyAgaWYgKHRhc2sgPT0gTlVMTCkKKyAgICBnb3RvIG5vX3Rhc2s7CisgIHJlcyA9IGdzdF90YXNrX3NldF9zdGF0ZSAodGFzaywgR1NUX1RBU0tfUEFVU0VEKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisKKyAgLyogd2FpdCBmb3IgdGFzayBmdW5jdGlvbiB0byBmaW5pc2gsIHRoaXMgbG9jayBpcyByZWN1cnNpdmUgc28gaXQgZG9lcyBub3RoaW5nCisgICAqIHdoZW4gdGhlIHBhdXNlIGlzIGNhbGxlZCBmcm9tIHRoZSB0YXNrIGl0c2VsZiAqLworICBHU1RfUEFEX1NUUkVBTV9MT0NLIChwYWQpOworICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKHBhZCk7CisKKyAgcmV0dXJuIHJlczsKKworbm9fdGFzazoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInBhZCBoYXMgbm8gdGFzayIpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCisvKioKKyAqIGdzdF9wYWRfc3RvcF90YXNrOgorICogQHBhZDogdGhlICNHc3RQYWQgdG8gc3RvcCB0aGUgdGFzayBvZgorICoKKyAqIFN0b3AgdGhlIHRhc2sgb2YgQHBhZC4gVGhpcyBmdW5jdGlvbiB3aWxsIGFsc28gbWFrZSBzdXJlIHRoYXQgdGhlCisgKiBmdW5jdGlvbiBleGVjdXRlZCBieSB0aGUgdGFzayB3aWxsIGVmZmVjdGl2ZWx5IHN0b3AgaWYgbm90IGNhbGxlZAorICogZnJvbSB0aGUgR3N0VGFza0Z1bmN0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBkZWFkbG9jayBpZiBjYWxsZWQgZnJvbSB0aGUgR3N0VGFza0Z1bmN0aW9uIG9mCisgKiB0aGUgdGFzay4gVXNlIGdzdF90YXNrX3BhdXNlKCkgaW5zdGVhZC4KKyAqCisgKiBSZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHBhZCBoYXMgYSB0YXNrLCB0aGUgc3RyZWFtIGxvY2sgaXMgYWNxdWlyZWQgYW5kCisgKiByZWxlYXNlZCBzbyBhcyB0byBlbnN1cmUgdGhhdCBzdHJlYW1pbmcgdGhyb3VnaCB0aGlzIHBhZCBoYXMgZmluaXNoZWQuCisgKgorICogUmV0dXJuczogYSBUUlVFIGlmIHRoZSB0YXNrIGNvdWxkIGJlIHN0b3BwZWQgb3IgRkFMU0Ugb24gZXJyb3IuCisgKi8KK2dib29sZWFuCitnc3RfcGFkX3N0b3BfdGFzayAoR3N0UGFkICogcGFkKQoreworICBHc3RUYXNrICp0YXNrOworICBnYm9vbGVhbiByZXM7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIEZBTFNFKTsKKworICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJzdG9wIHRhc2siKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7CisgIHRhc2sgPSBHU1RfUEFEX1RBU0sgKHBhZCk7CisgIGlmICh0YXNrID09IE5VTEwpCisgICAgZ290byBub190YXNrOworICBHU1RfUEFEX1RBU0sgKHBhZCkgPSBOVUxMOworICByZXMgPSBnc3RfdGFza19zZXRfc3RhdGUgKHRhc2ssIEdTVF9UQVNLX1NUT1BQRUQpOworICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKworICBHU1RfUEFEX1NUUkVBTV9MT0NLIChwYWQpOworICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKHBhZCk7CisKKyAgaWYgKCFnc3RfdGFza19qb2luICh0YXNrKSkKKyAgICBnb3RvIGpvaW5fZmFpbGVkOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHRhc2spOworCisgIHJldHVybiByZXM7CisKK25vX3Rhc2s6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJubyB0YXNrIik7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisKKyAgICBHU1RfUEFEX1NUUkVBTV9MT0NLIChwYWQpOworICAgIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAocGFkKTsKKworICAgIC8qIHRoaXMgaXMgbm90IGFuIGVycm9yICovCisgICAgcmV0dXJuIFRSVUU7CisgIH0KK2pvaW5fZmFpbGVkOgorICB7CisgICAgLyogdGhpcyBpcyBiYWQsIHBvc3NpYmx5IHRoZSBhcHBsaWNhdGlvbiB0cmllZCB0byBqb2luIHRoZSB0YXNrIGZyb20KKyAgICAgKiB0aGUgdGFzaydzIHRocmVhZC4gV2UgaW5zdGFsbCB0aGUgdGFzayBhZ2FpbiBzbyB0aGF0IGl0IHdpbGwgYmUgc3RvcHBlZAorICAgICAqIGFnYWluIGZyb20gdGhlIHJpZ2h0IHRocmVhZCBuZXh0IHRpbWUgaG9wZWZ1bGx5LiAqLworICAgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJqb2luIGZhaWxlZCIpOworICAgIC8qIHdlIGNhbiBvbmx5IGluc3RhbGwgdGhpcyB0YXNrIGlmIHRoZXJlIHdhcyBubyBvdGhlciB0YXNrICovCisgICAgaWYgKEdTVF9QQURfVEFTSyAocGFkKSA9PSBOVUxMKQorICAgICAgR1NUX1BBRF9UQVNLIChwYWQpID0gdGFzazsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHBhZC5oIGIvZ3N0L2dzdHBhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZWQyYzUKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0cGFkLmgKQEAgLTAsMCArMSw5MjcgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BjaGVsbG8uYmU+CisgKgorICogZ3N0cGFkLmg6IEhlYWRlciBmb3IgR3N0UGFkIG9iamVjdAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworI2lmbmRlZiBfX0dTVF9QQURfSF9fCisjZGVmaW5lIF9fR1NUX1BBRF9IX18KKworI2luY2x1ZGUgPGdzdC9nc3Rjb25maWcuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0dzdFBhZCBHc3RQYWQ7Cit0eXBlZGVmIHN0cnVjdCBfR3N0UGFkUHJpdmF0ZSBHc3RQYWRQcml2YXRlOwordHlwZWRlZiBzdHJ1Y3QgX0dzdFBhZENsYXNzIEdzdFBhZENsYXNzOworCisvKioKKyAqIEdzdFBhZERpcmVjdGlvbjoKKyAqIEBHU1RfUEFEX1VOS05PV046IGRpcmVjdGlvbiBpcyB1bmtub3duLgorICogQEdTVF9QQURfU1JDOiB0aGUgcGFkIGlzIGEgc291cmNlIHBhZC4KKyAqIEBHU1RfUEFEX1NJTks6IHRoZSBwYWQgaXMgYSBzaW5rIHBhZC4KKyAqCisgKiBUaGUgZGlyZWN0aW9uIG9mIGEgcGFkLgorICovCit0eXBlZGVmIGVudW0geworICBHU1RfUEFEX1VOS05PV04sCisgIEdTVF9QQURfU1JDLAorICBHU1RfUEFEX1NJTksKK30gR3N0UGFkRGlyZWN0aW9uOworCisjaW5jbHVkZSA8Z3N0L2dzdG9iamVjdC5oPgorI2luY2x1ZGUgPGdzdC9nc3RidWZmZXIuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0YnVmZmVybGlzdC5oPgorI2luY2x1ZGUgPGdzdC9nc3RjYXBzLmg+CisjaW5jbHVkZSA8Z3N0L2dzdHBhZHRlbXBsYXRlLmg+CisjaW5jbHVkZSA8Z3N0L2dzdGV2ZW50Lmg+CisjaW5jbHVkZSA8Z3N0L2dzdHF1ZXJ5Lmg+CisjaW5jbHVkZSA8Z3N0L2dzdHRhc2suaD4KKworR19CRUdJTl9ERUNMUworCisvKgorICogUGFkIGJhc2UgY2xhc3MKKyAqLworI2RlZmluZSBHU1RfVFlQRV9QQUQJCQkoZ3N0X3BhZF9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgR1NUX0lTX1BBRChvYmopCQkJKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfUEFEKSkKKyNkZWZpbmUgR1NUX0lTX1BBRF9DTEFTUyhrbGFzcykJCShHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfUEFEKSkKKyNkZWZpbmUgR1NUX1BBRChvYmopCQkJKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfUEFELCBHc3RQYWQpKQorI2RlZmluZSBHU1RfUEFEX0NMQVNTKGtsYXNzKQkJKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9QQUQsIEdzdFBhZENsYXNzKSkKKyNkZWZpbmUgR1NUX1BBRF9DQVNUKG9iaikJCSgoR3N0UGFkKikob2JqKSkKKworCisKKy8qKgorICogR3N0UGFkTGlua1JldHVybjoKKyAqIEBHU1RfUEFEX0xJTktfT0sJCTogbGluayBzdWNjZWVkZWQKKyAqIEBHU1RfUEFEX0xJTktfV1JPTkdfSElFUkFSQ0hZOiBwYWRzIGhhdmUgbm8gY29tbW9uIGdyYW5kcGFyZW50CisgKiBAR1NUX1BBRF9MSU5LX1dBU19MSU5LRUQJOiBwYWQgd2FzIGFscmVhZHkgbGlua2VkCisgKiBAR1NUX1BBRF9MSU5LX1dST05HX0RJUkVDVElPTjogcGFkcyBoYXZlIHdyb25nIGRpcmVjdGlvbgorICogQEdTVF9QQURfTElOS19OT0ZPUk1BVAk6IHBhZHMgZG8gbm90IGhhdmUgY29tbW9uIGZvcm1hdAorICogQEdTVF9QQURfTElOS19OT1NDSEVECTogcGFkcyBjYW5ub3QgY29vcGVyYXRlIGluIHNjaGVkdWxpbmcKKyAqIEBHU1RfUEFEX0xJTktfUkVGVVNFRAk6IHJlZnVzZWQgZm9yIHNvbWUgcmVhc29uCisgKgorICogUmVzdWx0IHZhbHVlcyBmcm9tIGdzdF9wYWRfbGluayBhbmQgZnJpZW5kcy4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgR1NUX1BBRF9MSU5LX09LICAgICAgICAgICAgICAgPSAgMCwKKyAgR1NUX1BBRF9MSU5LX1dST05HX0hJRVJBUkNIWSAgPSAtMSwKKyAgR1NUX1BBRF9MSU5LX1dBU19MSU5LRUQgICAgICAgPSAtMiwKKyAgR1NUX1BBRF9MSU5LX1dST05HX0RJUkVDVElPTiAgPSAtMywKKyAgR1NUX1BBRF9MSU5LX05PRk9STUFUICAgICAgICAgPSAtNCwKKyAgR1NUX1BBRF9MSU5LX05PU0NIRUQgICAgICAgICAgPSAtNSwKKyAgR1NUX1BBRF9MSU5LX1JFRlVTRUQgICAgICAgICAgPSAtNgorfSBHc3RQYWRMaW5rUmV0dXJuOworCisvKioKKyAqIEdTVF9QQURfTElOS19GQUlMRUQ6CisgKiBAcmV0OiB0aGUgI0dzdFBhZExpbmtSZXR1cm4gdmFsdWUKKyAqCisgKiBNYWNybyB0byB0ZXN0IGlmIHRoZSBnaXZlbiAjR3N0UGFkTGlua1JldHVybiB2YWx1ZSBpbmRpY2F0ZXMgYSBmYWlsZWQKKyAqIGxpbmsgc3RlcC4KKyAqLworI2RlZmluZSBHU1RfUEFEX0xJTktfRkFJTEVEKHJldCkgKChyZXQpIDwgR1NUX1BBRF9MSU5LX09LKQorCisvKioKKyAqIEdTVF9QQURfTElOS19TVUNDRVNTRlVMOgorICogQHJldDogdGhlICNHc3RQYWRMaW5rUmV0dXJuIHZhbHVlCisgKgorICogTWFjcm8gdG8gdGVzdCBpZiB0aGUgZ2l2ZW4gI0dzdFBhZExpbmtSZXR1cm4gdmFsdWUgaW5kaWNhdGVzIGEgc3VjY2Vzc2Z1bAorICogbGluayBzdGVwLgorICovCisjZGVmaW5lIEdTVF9QQURfTElOS19TVUNDRVNTRlVMKHJldCkgKChyZXQpID49IEdTVF9QQURfTElOS19PSykKKworLyoqCisgKiBHc3RGbG93UmV0dXJuOgorICogQEdTVF9GTE9XX1JFU0VORDoJCSBSZXNlbmQgYnVmZmVyLCBwb3NzaWJseSB3aXRoIG5ldyBjYXBzIChub3QKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VudCB5ZXQpICh1bnVzZWQvdW5pbXBsZW1lbnRlZCkuCisgKiBAR1NUX0ZMT1dfT0s6CQkgRGF0YSBwYXNzaW5nIHdhcyBvay4KKyAqIEBHU1RfRkxPV19OT1RfTElOS0VEOgkgUGFkIGlzIG5vdCBsaW5rZWQuCisgKiBAR1NUX0ZMT1dfV1JPTkdfU1RBVEU6CSBQYWQgaXMgaW4gd3Jvbmcgc3RhdGUuCisgKiBAR1NUX0ZMT1dfVU5FWFBFQ1RFRDoJIERpZCBub3QgZXhwZWN0IGFueXRoaW5nLCBsaWtlIGFmdGVyIEVPUy4KKyAqIEBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRDoJIFBhZCBpcyBub3QgbmVnb3RpYXRlZC4KKyAqIEBHU1RfRkxPV19FUlJPUjoJCSBTb21lIChmYXRhbCkgZXJyb3Igb2NjdXJlZC4gRWxlbWVudCBnZW5lcmF0aW5nCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGVycm9yIHNob3VsZCBwb3N0IGFuIGVycm9yIG1lc3NhZ2Ugd2l0aCBtb3JlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzLgorICogQEdTVF9GTE9XX05PVF9TVVBQT1JURUQ6CSBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLgorICogQEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTOgkgRWxlbWVudHMgY2FuIHVzZSB2YWx1ZXMgc3RhcnRpbmcgZnJvbQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyAoYW5kIGhpZ2hlcikgdG8gZGVmaW5lIGN1c3RvbSBzdWNjZXNzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2Rlcy4gU2luY2UgMC4xMC43LgorICogQEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTXzE6CSBQcmUtZGVmaW5lZCBjdXN0b20gc3VjY2VzcyBjb2RlIChkZWZpbmUgeW91cgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tIHN1Y2Nlc3MgY29kZSB0byB0aGlzIHRvIGF2b2lkIGNvbXBpbGVyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncykuIFNpbmNlIDAuMTAuMjkuCisgKiBAR1NUX0ZMT1dfQ1VTVE9NX1NVQ0NFU1NfMjoJIFByZS1kZWZpbmVkIGN1c3RvbSBzdWNjZXNzIGNvZGUuIFNpbmNlIDAuMTAuMjkuCisgKiBAR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SOgkgRWxlbWVudHMgY2FuIHVzZSB2YWx1ZXMgc3RhcnRpbmcgZnJvbQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyAoYW5kIGxvd2VyKSB0byBkZWZpbmUgY3VzdG9tIGVycm9yIGNvZGVzLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2luY2UgMC4xMC43LgorICogQEdTVF9GTE9XX0NVU1RPTV9FUlJPUl8xOgkgUHJlLWRlZmluZWQgY3VzdG9tIGVycm9yIGNvZGUgKGRlZmluZSB5b3VyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b20gZXJyb3IgY29kZSB0byB0aGlzIHRvIGF2b2lkIGNvbXBpbGVyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncykuIFNpbmNlIDAuMTAuMjkuCisgKiBAR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SXzI6CSBQcmUtZGVmaW5lZCBjdXN0b20gZXJyb3IgY29kZS4gU2luY2UgMC4xMC4yOS4KKyAqCisgKiBUaGUgcmVzdWx0IG9mIHBhc3NpbmcgZGF0YSB0byBhIHBhZC4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIGN1c3RvbSByZXR1cm4gdmFsdWVzIHNob3VsZCBub3QgYmUgZXhwb3NlZCBvdXRzaWRlIG9mIHRoZQorICogZWxlbWVudCBzY29wZSBhbmQgYXJlIGF2YWlsYWJsZSBzaW5jZSAwLjEwLjcuCisgKi8KKy8qIEZJWE1FIDAuMTE6IHJlbW92ZSBjdXN0b20gZmxvdyByZXR1cm5zICovCit0eXBlZGVmIGVudW0geworICAvKiBjdXN0b20gc3VjY2VzcyBzdGFydHMgaGVyZSAqLworICBHU1RfRkxPV19DVVNUT01fU1VDQ0VTU18yID0gMTAyLAorICBHU1RfRkxPV19DVVNUT01fU1VDQ0VTU18xID0gMTAxLAorICBHU1RfRkxPV19DVVNUT01fU1VDQ0VTUyA9IDEwMCwKKworICAvKiBjb3JlIHByZWRlZmluZWQgKi8KKyAgR1NUX0ZMT1dfUkVTRU5ECSAgPSAgMSwKKyAgR1NUX0ZMT1dfT0sJCSAgPSAgMCwKKyAgLyogZXhwZWN0ZWQgZmFpbHVyZXMgKi8KKyAgR1NUX0ZMT1dfTk9UX0xJTktFRCAgICAgPSAtMSwKKyAgR1NUX0ZMT1dfV1JPTkdfU1RBVEUgICAgPSAtMiwKKyAgLyogZXJyb3IgY2FzZXMgKi8KKyAgR1NUX0ZMT1dfVU5FWFBFQ1RFRCAgICAgPSAtMywKKyAgR1NUX0ZMT1dfTk9UX05FR09USUFURUQgPSAtNCwKKyAgR1NUX0ZMT1dfRVJST1IJICA9IC01LAorICBHU1RfRkxPV19OT1RfU1VQUE9SVEVEICA9IC02LAorCisgIC8qIGN1c3RvbSBlcnJvciBzdGFydHMgaGVyZSAqLworICBHU1RfRkxPV19DVVNUT01fRVJST1IgICA9IC0xMDAsCisgIEdTVF9GTE9XX0NVU1RPTV9FUlJPUl8xID0gLTEwMSwKKyAgR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SXzIgPSAtMTAyCit9IEdzdEZsb3dSZXR1cm47CisKK2NvbnN0IGdjaGFyKgkgICAgICAgIGdzdF9mbG93X2dldF9uYW1lCShHc3RGbG93UmV0dXJuIHJldCk7CitHUXVhcmsJCQlnc3RfZmxvd190b19xdWFyawkoR3N0Rmxvd1JldHVybiByZXQpOworCisvKioKKyAqIEdzdFBhZExpbmtDaGVjazoKKyAqIEBHU1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORzogRG9uJ3QgY2hlY2sgaGllcmFyY2h5IG9yIGNhcHMgY29tcGF0aWJpbGl0eS4KKyAqIEBHU1RfUEFEX0xJTktfQ0hFQ0tfSElFUkFSQ0hZOiBDaGVjayB0aGUgcGFkcyBoYXZlIHNhbWUgcGFyZW50cy9ncmFuZHBhcmVudHMuCisgKiAgIENvdWxkIGJlIG9taXR0ZWQgaWYgaXQgaXMgYWxyZWFkeSBrbm93biB0aGF0IHRoZSB0d28gZWxlbWVudHMgdGhhdCBvd24gdGhlCisgKiAgIHBhZHMgYXJlIGluIHRoZSBzYW1lIGJpbi4KKyAqIEBHU1RfUEFEX0xJTktfQ0hFQ0tfVEVNUExBVEVfQ0FQUzogQ2hlY2sgaWYgdGhlIHBhZHMgYXJlIGNvbXBhdGlibGUgYnkgdXNpbmcKKyAqICAgdGhlaXIgdGVtcGxhdGUgY2Fwcy4gVGhpcyBpcyBtdWNoIGZhc3RlciB0aGFuIEBHU1RfUEFEX0xJTktfQ0hFQ0tfQ0FQUywgYnV0CisgKiAgIHdvdWxkIGJlIHVuc2FmZSBlLmcuIGlmIG9uZSBwYWQgaGFzICVHU1RfQ0FQU19BTlkuCisgKiBAR1NUX1BBRF9MSU5LX0NIRUNLX0NBUFM6IENoZWNrIGlmIHRoZSBwYWRzIGFyZSBjb21wYXRpYmxlIGJ5IGNvbXBhcmluZyB0aGUKKyAqICAgY2FwcyByZXR1cm5lZCBieSBnc3RfcGFkX2dldF9jYXBzKCkuCisgKgorICogVGhlIGFtb3VudCBvZiBjaGVja2luZyB0byBiZSBkb25lIHdoZW4gbGlua2luZyBwYWRzLiBAR1NUX1BBRF9MSU5LX0NIRUNLX0NBUFMKKyAqIGFuZCBAR1NUX1BBRF9MSU5LX0NIRUNLX1RFTVBMQVRFX0NBUFMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gSWYgYm90aCBhcmUKKyAqIHNwZWNpZmllZCwgZXhwZW5zaXZlIGJ1dCBzYWZlIEBHU1RfUEFEX0xJTktfQ0hFQ0tfQ0FQUyBhcmUgcGVyZm9ybWVkLgorICoKKyAqIDx3YXJuaW5nPjxwYXJhPgorICogT25seSBkaXNhYmxlIHNvbWUgb2YgdGhlIGNoZWNrcyBpZiB5b3UgYXJlIDEwMCUgY2VydGFpbiB5b3Uga25vdyB0aGUgbGluaworICogd2lsbCBub3QgZmFpbCBiZWNhdXNlIG9mIGhpZXJhcmNoeS9jYXBzIGNvbXBhdGliaWxpdHkgZmFpbHVyZXMuIElmIHVuY2VydGFpbiwKKyAqIHVzZSB0aGUgZGVmYXVsdCBjaGVja3MgKCVHU1RfUEFEX0xJTktfQ0hFQ0tfREVGQVVMVCkgb3IgdGhlIHJlZ3VsYXIgbWV0aG9kcworICogZm9yIGxpbmtpbmcgdGhlIHBhZHMuCisgKiA8L3BhcmE+PC93YXJuaW5nPgorICoKKyAqIFNpbmNlOiAwLjEwLjMwCisgKi8KKwordHlwZWRlZiBlbnVtIHsKKyAgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcgICAgICAgPSAwLAorICBHU1RfUEFEX0xJTktfQ0hFQ0tfSElFUkFSQ0hZICAgICA9IDEgPDwgMCwKKyAgR1NUX1BBRF9MSU5LX0NIRUNLX1RFTVBMQVRFX0NBUFMgPSAxIDw8IDEsCisgIEdTVF9QQURfTElOS19DSEVDS19DQVBTICAgICAgICAgID0gMSA8PCAyCit9IEdzdFBhZExpbmtDaGVjazsKKworLyoqCisgKiBHU1RfUEFEX0xJTktfQ0hFQ0tfREVGQVVMVDoKKyAqCisgKiBUaGUgZGVmYXVsdCBjaGVja3MgZG9uZSB3aGVuIGxpbmtpbmcgcGFkcyAoaS5lLiB0aGUgb25lcyB1c2VkIGJ5CisgKiBnc3RfcGFkX2xpbmsoKSkuCisgKgorICogU2luY2U6IDAuMTAuMzAKKyAqLworI2RlZmluZSBHU1RfUEFEX0xJTktfQ0hFQ0tfREVGQVVMVCAoKEdzdFBhZExpbmtDaGVjaykgKEdTVF9QQURfTElOS19DSEVDS19ISUVSQVJDSFkgfCBHU1RfUEFEX0xJTktfQ0hFQ0tfQ0FQUykpCisKKy8qKgorICogR3N0QWN0aXZhdGVNb2RlOgorICogQEdTVF9BQ1RJVkFURV9OT05FOgkgIAkgUGFkIHdpbGwgbm90IGhhbmRsZSBkYXRhZmxvdworICogQEdTVF9BQ1RJVkFURV9QVVNIOgkJIFBhZCBoYW5kbGVzIGRhdGFmbG93IGluIGRvd25zdHJlYW0gcHVzaCBtb2RlCisgKiBAR1NUX0FDVElWQVRFX1BVTEw6ICAgICAJIFBhZCBoYW5kbGVzIGRhdGFmbG93IGluIHVwc3RyZWFtIHB1bGwgbW9kZQorICoKKyAqIFRoZSBzdGF0dXMgb2YgYSBHc3RQYWQuIEFmdGVyIGFjdGl2YXRpbmcgYSBwYWQsIHdoaWNoIHVzdWFsbHkgaGFwcGVucyB3aGVuIHRoZQorICogcGFyZW50IGVsZW1lbnQgZ29lcyBmcm9tIFJFQURZIHRvIFBBVVNFRCwgdGhlIEdzdEFjdGl2YXRlTW9kZSBkZWZpbmVzIGlmIHRoZQorICogcGFkIG9wZXJhdGVzIGluIHB1c2ggb3IgcHVsbCBtb2RlLgorICovCit0eXBlZGVmIGVudW0geworICBHU1RfQUNUSVZBVEVfTk9ORSwKKyAgR1NUX0FDVElWQVRFX1BVU0gsCisgIEdTVF9BQ1RJVkFURV9QVUxMCit9IEdzdEFjdGl2YXRlTW9kZTsKKworLyogcGFkIHN0YXRlcyAqLworLyoqCisgKiBHc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uOgorICogQHBhZDogYSAjR3N0UGFkCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgcGFkIGlzIGFjdGl2YXRlZCBkdXJpbmcgdGhlIGVsZW1lbnQKKyAqIFJFQURZIHRvIFBBVVNFRCBzdGF0ZSBjaGFuZ2UuIEJ5IGRlZmF1bHQgdGhpcyBmdW5jdGlvbiB3aWxsIGNhbGwgdGhlCisgKiBhY3RpdmF0ZSBmdW5jdGlvbiB0aGF0IHB1dHMgdGhlIHBhZCBpbiBwdXNoIG1vZGUgYnV0IGVsZW1lbnRzIGNhbgorICogb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiB0byBhY3RpdmF0ZSB0aGUgcGFkIGluIHB1bGwgbW9kZSBpZiB0aGV5IHdpc2guCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgcGFkIGNvdWxkIGJlIGFjdGl2YXRlZC4KKyAqLwordHlwZWRlZiBnYm9vbGVhbgkJKCpHc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uKQkoR3N0UGFkICpwYWQpOworLyoqCisgKiBHc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbjoKKyAqIEBwYWQ6IGEgI0dzdFBhZAorICogQGFjdGl2ZTogYWN0aXZhdGUgb3IgZGVhY3RpdmF0ZSB0aGUgcGFkLgorICoKKyAqIFRoZSBwcm90b3R5cGUgb2YgdGhlIHB1c2ggYW5kIHB1bGwgYWN0aXZhdGUgZnVuY3Rpb25zLgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIHBhZCBjb3VsZCBiZSBhY3RpdmF0ZWQgb3IgZGVhY3RpdmF0ZWQuCisgKi8KK3R5cGVkZWYgZ2Jvb2xlYW4JCSgqR3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb24pCShHc3RQYWQgKnBhZCwgZ2Jvb2xlYW4gYWN0aXZlKTsKKworCisvKiBkYXRhIHBhc3NpbmcgKi8KKy8qKgorICogR3N0UGFkQ2hhaW5GdW5jdGlvbjoKKyAqIEBwYWQ6IHRoZSBzaW5rICNHc3RQYWQgdGhhdCBwZXJmb3JtZWQgdGhlIGNoYWluLgorICogQGJ1ZmZlcjogdGhlICNHc3RCdWZmZXIgdGhhdCBpcyBjaGFpbmVkLCBub3QgJU5VTEwuCisgKgorICogQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIHNpbmtwYWRzIHdoZW4gY2hhaW5pbmcgYnVmZmVycy4KKyAqIFRoZSBmdW5jdGlvbiB0eXBpY2FsbHkgcHJvY2Vzc2VzIHRoZSBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgYnVmZmVyIGFuZAorICogZWl0aGVyIGNvbnN1bWVzIHRoZSBkYXRhIG9yIHBhc3NlcyBpdCBvbiB0byB0aGUgaW50ZXJuYWxseSBsaW5rZWQgcGFkKHMpLgorICoKKyAqIFRoZSBpbXBsZW1lbnRlciBvZiB0aGlzIGZ1bmN0aW9uIHJlY2VpdmVzIGEgcmVmY291bnQgdG8gQGJ1ZmZlciBhbmQgc2hvdWxkCisgKiBnc3RfYnVmZmVyX3VucmVmKCkgd2hlbiB0aGUgYnVmZmVyIGlzIG5vIGxvbmdlciBuZWVkZWQuCisgKgorICogV2hlbiBhIGNoYWluIGZ1bmN0aW9uIGRldGVjdHMgYW4gZXJyb3IgaW4gdGhlIGRhdGEgc3RyZWFtLCBpdCBtdXN0IHBvc3QgYW4KKyAqIGVycm9yIG9uIHRoZSBidXMgYW5kIHJldHVybiBhbiBhcHByb3ByaWF0ZSAjR3N0Rmxvd1JldHVybiB2YWx1ZS4KKyAqCisgKiBSZXR1cm5zOiAjR1NUX0ZMT1dfT0sgZm9yIHN1Y2Nlc3MKKyAqLwordHlwZWRlZiBHc3RGbG93UmV0dXJuCQkoKkdzdFBhZENoYWluRnVuY3Rpb24pCQkoR3N0UGFkICpwYWQsIEdzdEJ1ZmZlciAqYnVmZmVyKTsKKworLyoqCisgKiBHc3RQYWRDaGFpbkxpc3RGdW5jdGlvbjoKKyAqIEBwYWQ6IHRoZSBzaW5rICNHc3RQYWQgdGhhdCBwZXJmb3JtZWQgdGhlIGNoYWluLgorICogQGxpc3Q6IHRoZSAjR3N0QnVmZmVyTGlzdCB0aGF0IGlzIGNoYWluZWQsIG5vdCAlTlVMTC4KKyAqCisgKiBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gc2lua3BhZHMgd2hlbiBjaGFpbmluZyBidWZmZXIgbGlzdHMuCisgKiBUaGUgZnVuY3Rpb24gdHlwaWNhbGx5IHByb2Nlc3NlcyB0aGUgZGF0YSBjb250YWluZWQgaW4gdGhlIGJ1ZmZlciBsaXN0IGFuZAorICogZWl0aGVyIGNvbnN1bWVzIHRoZSBkYXRhIG9yIHBhc3NlcyBpdCBvbiB0byB0aGUgaW50ZXJuYWxseSBsaW5rZWQgcGFkKHMpLgorICoKKyAqIFRoZSBpbXBsZW1lbnRlciBvZiB0aGlzIGZ1bmN0aW9uIHJlY2VpdmVzIGEgcmVmY291bnQgdG8gQGxpc3QgYW5kCisgKiBzaG91bGQgZ3N0X2J1ZmZlcl9saXN0X3VucmVmKCkgd2hlbiB0aGUgbGlzdCBpcyBubyBsb25nZXIgbmVlZGVkLgorICoKKyAqIFdoZW4gYSBjaGFpbmxpc3QgZnVuY3Rpb24gZGV0ZWN0cyBhbiBlcnJvciBpbiB0aGUgZGF0YSBzdHJlYW0sIGl0IG11c3QKKyAqIHBvc3QgYW4gZXJyb3Igb24gdGhlIGJ1cyBhbmQgcmV0dXJuIGFuIGFwcHJvcHJpYXRlICNHc3RGbG93UmV0dXJuIHZhbHVlLgorICoKKyAqIFJldHVybnM6ICNHU1RfRkxPV19PSyBmb3Igc3VjY2VzcworICovCit0eXBlZGVmIEdzdEZsb3dSZXR1cm4JCSgqR3N0UGFkQ2hhaW5MaXN0RnVuY3Rpb24pCShHc3RQYWQgKnBhZCwgR3N0QnVmZmVyTGlzdCAqbGlzdCk7CisKKy8qKgorICogR3N0UGFkR2V0UmFuZ2VGdW5jdGlvbjoKKyAqIEBwYWQ6IHRoZSBzcmMgI0dzdFBhZCB0byBwZXJmb3JtIHRoZSBnZXRyYW5nZSBvbi4KKyAqIEBvZmZzZXQ6IHRoZSBvZmZzZXQgb2YgdGhlIHJhbmdlCisgKiBAbGVuZ3RoOiB0aGUgbGVuZ3RoIG9mIHRoZSByYW5nZQorICogQGJ1ZmZlcjogYSBtZW1vcnkgbG9jYXRpb24gdG8gaG9sZCB0aGUgcmVzdWx0IGJ1ZmZlciwgY2Fubm90IGJlIE5VTEwuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBvbiBzb3VyY2UgcGFkcyB3aGVuIGEgcGVlciBlbGVtZW50CisgKiByZXF1ZXN0IGEgYnVmZmVyIGF0IHRoZSBzcGVjaWZpZWQgQG9mZnNldCBhbmQgQGxlbmd0aC4gSWYgdGhpcyBmdW5jdGlvbgorICogcmV0dXJucyAjR1NUX0ZMT1dfT0ssIHRoZSByZXN1bHQgYnVmZmVyIHdpbGwgYmUgc3RvcmVkIGluIEBidWZmZXIuIFRoZQorICogY29udGVudHMgb2YgQGJ1ZmZlciBpcyBpbnZhbGlkIGZvciBhbnkgb3RoZXIgcmV0dXJuIHZhbHVlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgaW5zdGFsbGVkIG9uIGEgc291cmNlIHBhZCB3aXRoCisgKiBnc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbigpIGFuZCBjYW4gb25seSBiZSBjYWxsZWQgb24gc291cmNlIHBhZHMgYWZ0ZXIKKyAqIHRoZXkgYXJlIHN1Y2Nlc3NmdWxseSBhY3RpdmF0ZWQgd2l0aCBnc3RfcGFkX2FjdGl2YXRlX3B1bGwoKS4KKyAqCisgKiBAb2Zmc2V0IGFuZCBAbGVuZ3RoIGFyZSBhbHdheXMgZ2l2ZW4gaW4gYnl0ZSB1bml0cy4gQG9mZnNldCBtdXN0IG5vcm1hbGx5IGJlIGEgdmFsdWUKKyAqIGJldHdlZW4gMCBhbmQgdGhlIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgZGF0YSBhdmFpbGFibGUgb24gQHBhZC4gVGhlCisgKiBsZW5ndGggKGR1cmF0aW9uIGluIGJ5dGVzKSBjYW4gYmUgcmV0cmlldmVkIHdpdGggYSAjR1NUX1FVRVJZX0RVUkFUSU9OIG9yIHdpdGggYQorICogI0dTVF9RVUVSWV9TRUVLSU5HLgorICoKKyAqIEFueSBAb2Zmc2V0IGxhcmdlciBvciBlcXVhbCB0aGFuIHRoZSBsZW5ndGggd2lsbCBtYWtlIHRoZSBmdW5jdGlvbiByZXR1cm4KKyAqICNHU1RfRkxPV19VTkVYUEVDVEVELCB3aGljaCBjb3JyZXNwb25kcyB0byBFT1MuIEluIHRoaXMgY2FzZSBAYnVmZmVyIGRvZXMgbm90CisgKiBjb250YWluIGEgdmFsaWQgYnVmZmVyLgorICoKKyAqIFRoZSBidWZmZXIgc2l6ZSBvZiBAYnVmZmVyIHdpbGwgb25seSBiZSBzbWFsbGVyIHRoYW4gQGxlbmd0aCB3aGVuIEBvZmZzZXQgaXMKKyAqIG5lYXIgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLiBJbiBhbGwgb3RoZXIgY2FzZXMsIHRoZSBzaXplIG9mIEBidWZmZXIgbXVzdCBiZQorICogZXhhY3RseSB0aGUgcmVxdWVzdGVkIHNpemUuCisgKgorICogSXQgaXMgYWxsb3dlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCBhIDAgQGxlbmd0aCBhbmQgdmFsaWQgQG9mZnNldCwgaW4KKyAqIHdoaWNoIGNhc2UgQGJ1ZmZlciB3aWxsIGNvbnRhaW4gYSAwLXNpemVkIGJ1ZmZlciBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMKKyAqICNHU1RfRkxPV19PSy4KKyAqCisgKiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYSAtMSBAb2Zmc2V0LCB0aGUgc2VxdWVudGlhbGx5IG5leHQgYnVmZmVyCisgKiBvZiBsZW5ndGggQGxlbmd0aCBpbiB0aGUgc3RyZWFtIGlzIHJldHVybmVkLgorICoKKyAqIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIC0xIEBsZW5ndGgsIGEgYnVmZmVyIHdpdGggYSBkZWZhdWx0CisgKiBvcHRpbWFsIGxlbmd0aCBpcyByZXR1cm5lZCBpbiBAYnVmZmVyLiBUaGUgbGVuZ3RoIG1pZ2h0IGRlcGVuZCBvbiB0aGUgdmFsdWUKKyAqIG9mIEBvZmZzZXQuCisgKgorICogUmV0dXJuczogI0dTVF9GTE9XX09LIGZvciBzdWNjZXNzIGFuZCBhIHZhbGlkIGJ1ZmZlciBpbiBAYnVmZmVyLiBBbnkgb3RoZXIKKyAqIHJldHVybiB2YWx1ZSBsZWF2ZXMgQGJ1ZmZlciB1bmRlZmluZWQuCisgKi8KK3R5cGVkZWYgR3N0Rmxvd1JldHVybgkJKCpHc3RQYWRHZXRSYW5nZUZ1bmN0aW9uKQkoR3N0UGFkICpwYWQsIGd1aW50NjQgb2Zmc2V0LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgbGVuZ3RoLCBHc3RCdWZmZXIgKipidWZmZXIpOworCisvKioKKyAqIEdzdFBhZEV2ZW50RnVuY3Rpb246CisgKiBAcGFkOiB0aGUgI0dzdFBhZCB0byBoYW5kbGUgdGhlIGV2ZW50LgorICogQGV2ZW50OiB0aGUgI0dzdEV2ZW50IHRvIGhhbmRsZS4KKyAqCisgKiBGdW5jdGlvbiBzaWduYXR1cmUgdG8gaGFuZGxlIGFuIGV2ZW50IGZvciB0aGUgcGFkLgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIHBhZCBjb3VsZCBoYW5kbGUgdGhlIGV2ZW50LgorICovCit0eXBlZGVmIGdib29sZWFuCQkoKkdzdFBhZEV2ZW50RnVuY3Rpb24pCQkoR3N0UGFkICpwYWQsIEdzdEV2ZW50ICpldmVudCk7CisKKworLyogaW50ZXJuYWwgbGlua3MgKi8KKy8qKgorICogR3N0UGFkSXRlckludExpbmtGdW5jdGlvbjoKKyAqIEBwYWQ6IFRoZSAjR3N0UGFkIHRvIHF1ZXJ5LgorICoKKyAqIFRoZSBzaWduYXR1cmUgb2YgdGhlIGludGVybmFsIHBhZCBsaW5rIGl0ZXJhdG9yIGZ1bmN0aW9uLgorICoKKyAqIFJldHVybnM6IGEgbmV3ICNHc3RJdGVyYXRvciB0aGF0IHdpbGwgaXRlcmF0ZSBvdmVyIGFsbCBwYWRzIHRoYXQgYXJlCisgKiBsaW5rZWQgdG8gdGhlIGdpdmVuIHBhZCBvbiB0aGUgaW5zaWRlIG9mIHRoZSBwYXJlbnQgZWxlbWVudC4KKyAqCisgKiB0aGUgY2FsbGVyIG11c3QgY2FsbCBnc3RfaXRlcmF0b3JfZnJlZSgpIGFmdGVyIHVzYWdlLgorICoKKyAqIFNpbmNlIDAuMTAuMjEKKyAqLwordHlwZWRlZiBHc3RJdGVyYXRvciogICAgICAgICAgICgqR3N0UGFkSXRlckludExpbmtGdW5jdGlvbikgICAgKEdzdFBhZCAqcGFkKTsKKworLyogZ2VuZXJpYyBxdWVyeSBmdW5jdGlvbiAqLworLyoqCisgKiBHc3RQYWRRdWVyeVR5cGVGdW5jdGlvbjoKKyAqIEBwYWQ6IGEgI0dzdFBhZCB0byBxdWVyeQorICoKKyAqIFRoZSBzaWduYXR1cmUgb2YgdGhlIHF1ZXJ5IHR5cGVzIGZ1bmN0aW9uLgorICoKKyAqIFJldHVybnM6IGEgY29uc3RhbnQgYXJyYXkgb2YgcXVlcnkgdHlwZXMKKyAqLwordHlwZWRlZiBjb25zdCBHc3RRdWVyeVR5cGUqCSgqR3N0UGFkUXVlcnlUeXBlRnVuY3Rpb24pCShHc3RQYWQgKnBhZCk7CisKKy8qKgorICogR3N0UGFkUXVlcnlGdW5jdGlvbjoKKyAqIEBwYWQ6IHRoZSAjR3N0UGFkIHRvIHF1ZXJ5LgorICogQHF1ZXJ5OiB0aGUgI0dzdFF1ZXJ5IG9iamVjdCB0byBleGVjdXRlCisgKgorICogVGhlIHNpZ25hdHVyZSBvZiB0aGUgcXVlcnkgZnVuY3Rpb24uCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgcXVlcnkgY291bGQgYmUgcGVyZm9ybWVkLgorICovCit0eXBlZGVmIGdib29sZWFuCQkoKkdzdFBhZFF1ZXJ5RnVuY3Rpb24pCQkoR3N0UGFkICpwYWQsIEdzdFF1ZXJ5ICpxdWVyeSk7CisKKworLyogbGlua2luZyAqLworLyoqCisgKiBHc3RQYWRMaW5rRnVuY3Rpb24KKyAqIEBwYWQ6IHRoZSAjR3N0UGFkIHRoYXQgaXMgbGlua2VkLgorICogQHBlZXI6IHRoZSBwZWVyICNHc3RQYWQgb2YgdGhlIGxpbmsKKyAqCisgKiBGdW5jdGlvbiBzaWduYXR1cmUgdG8gaGFuZGxlIGEgbmV3IGxpbmsgb24gdGhlIHBhZC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgcmVzdWx0IG9mIHRoZSBsaW5rIHdpdGggdGhlIHNwZWNpZmllZCBwZWVyLgorICovCit0eXBlZGVmIEdzdFBhZExpbmtSZXR1cm4JKCpHc3RQYWRMaW5rRnVuY3Rpb24pCQkoR3N0UGFkICpwYWQsIEdzdFBhZCAqcGVlcik7CisvKioKKyAqIEdzdFBhZFVubGlua0Z1bmN0aW9uCisgKiBAcGFkOiB0aGUgI0dzdFBhZCB0aGF0IGlzIGxpbmtlZC4KKyAqCisgKiBGdW5jdGlvbiBzaWduYXR1cmUgdG8gaGFuZGxlIGEgdW5saW5raW5nIHRoZSBwYWQgcHJvbSBpdHMgcGVlci4KKyAqLwordHlwZWRlZiB2b2lkCQkJKCpHc3RQYWRVbmxpbmtGdW5jdGlvbikJCShHc3RQYWQgKnBhZCk7CisKKworLyogY2FwcyBuZWdvICovCisvKioKKyAqIEdzdFBhZEdldENhcHNGdW5jdGlvbjoKKyAqIEBwYWQ6IHRoZSAjR3N0UGFkIHRvIGdldCB0aGUgY2FwYWJpbGl0aWVzIG9mLgorICogQGZpbHRlcjogZmlsdGVyICNHc3RDYXBzLgorICoKKyAqIFdoZW4gY2FsbGVkIG9uIHNpbmtwYWRzIEBmaWx0ZXIgY29udGFpbnMgdGhlIGNhcHMgdGhhdAorICogdXBzdHJlYW0gY291bGQgcHJvZHVjZSBpbiB0aGUgb3JkZXIgcHJlZmVycmVkIGJ5IHVwc3RyZWFtLiBXaGVuCisgKiBjYWxsZWQgb24gc3JjcGFkcyBAZmlsdGVyIGNvbnRhaW5zIHRoZSBjYXBzIGFjY2VwdGVkIGJ5CisgKiBkb3duc3RyZWFtIGluIHRoZSBwcmVmZmVyZWQgb3JkZXIuIEBmaWx0ZXIgbWlnaHQgYmUgJU5VTEwgYnV0IGlmCisgKiBpdCBpcyBub3QgJU5VTEwgb25seSBhIHN1YnNldCBvZiBAZmlsdGVyIG11c3QgYmUgcmV0dXJuZWQuCisgKgorICogUmV0dXJucyBhIGNvcHkgb2YgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgc3BlY2lmaWVkIHBhZC4gQnkgZGVmYXVsdCB0aGlzCisgKiBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgcGFkIHRlbXBsYXRlIGNhcGFiaWxpdGllcywgYnV0IGNhbiBvcHRpb25hbGx5CisgKiBiZSBvdmVycmlkZGVuIGJ5IGVsZW1lbnRzLgorICoKKyAqIFJldHVybnM6IGEgbmV3bHkgYWxsb2NhdGVkIGNvcHkgI0dzdENhcHMgb2YgdGhlIHBhZC4KKyAqLwordHlwZWRlZiBHc3RDYXBzKgkJKCpHc3RQYWRHZXRDYXBzRnVuY3Rpb24pCShHc3RQYWQgKnBhZCwgR3N0Q2FwcyAqZmlsdGVyKTsKKworLyoqCisgKiBHc3RQYWRBY2NlcHRDYXBzRnVuY3Rpb246CisgKiBAcGFkOiB0aGUgI0dzdFBhZCB0byBjaGVjaworICogQGNhcHM6IHRoZSAjR3N0Q2FwcyB0byBjaGVjaworICoKKyAqIENoZWNrIGlmIEBwYWQgY2FuIGFjY2VwdCBAY2Fwcy4gQnkgZGVmYXVsdCB0aGlzIGZ1bmN0aW9uIHdpbGwgc2VlIGlmIEBjYXBzCisgKiBpbnRlcnNlY3Qgd2l0aCB0aGUgcmVzdWx0IGZyb20gZ3N0X3BhZF9nZXRfY2FwcygpIGJ5IGNhbiBiZSBvdmVycmlkZGVuIHRvCisgKiBwZXJmb3JtIGV4dHJhIGNoZWNrcy4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBjYXBzIGNhbiBiZSBhY2NlcHRlZCBieSB0aGUgcGFkLgorICovCit0eXBlZGVmIGdib29sZWFuCQkoKkdzdFBhZEFjY2VwdENhcHNGdW5jdGlvbikJKEdzdFBhZCAqcGFkLCBHc3RDYXBzICpjYXBzKTsKKy8qKgorICogR3N0UGFkRml4YXRlQ2Fwc0Z1bmN0aW9uOgorICogQHBhZDogYSAjR3N0UGFkCisgKiBAY2FwczogdGhlICNHc3RDYXBzIHRvIGZpeGF0ZQorICoKKyAqIEdpdmVuIHBvc3NpYmx5IHVuZml4ZWQgY2FwcyBAY2FwcywgbGV0IEBwYWQgdXNlIGl0cyBkZWZhdWx0IHByZWZlcnJlZAorICogZm9ybWF0IHRvIG1ha2UgYSBmaXhlZCBjYXBzLiBAY2FwcyBzaG91bGQgYmUgd3JpdGFibGUuIEJ5IGRlZmF1bHQgdGhpcworICogZnVuY3Rpb24gd2lsbCBwaWNrIHRoZSBmaXJzdCB2YWx1ZSBvZiBhbnkgcmFuZ2VzIG9yIGxpc3RzIGluIHRoZSBjYXBzIGJ1dAorICogZWxlbWVudHMgY2FuIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gdG8gcGVyZm9ybSBvdGhlciBiZWhhdmlvdXIuCisgKi8KK3R5cGVkZWYgdm9pZAkJCSgqR3N0UGFkRml4YXRlQ2Fwc0Z1bmN0aW9uKQkoR3N0UGFkICpwYWQsIEdzdENhcHMgKmNhcHMpOworCisvKiBtaXNjICovCisvKioKKyAqIEdzdFBhZEZvcndhcmRGdW5jdGlvbjoKKyAqIEBwYWQ6IHRoZSAjR3N0UGFkIHRoYXQgaXMgZm9yd2FyZGVkLgorICogQHVzZXJfZGF0YTogdGhlIGdwb2ludGVyIHRvIG9wdGlvbmFsIHVzZXIgZGF0YS4KKyAqCisgKiBBIGZvcndhcmQgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBhbGwgaW50ZXJuYWxseSBsaW5rZWQgcGFkcywgc2VlCisgKiBnc3RfcGFkX2ZvcndhcmQoKS4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBkaXNwYXRjaGluZyBwcm9jZWR1cmUgaGFzIHRvIGJlIHN0b3BwZWQuCisgKi8KK3R5cGVkZWYgZ2Jvb2xlYW4JCSgqR3N0UGFkRm9yd2FyZEZ1bmN0aW9uKQkoR3N0UGFkICpwYWQsIGdwb2ludGVyIHVzZXJfZGF0YSk7CisKKy8qKgorICogR3N0UHJvYmVUeXBlOgorICogQEdTVF9QUk9CRV9UWVBFX0lOVkFMSUQ6IGludmFsaWQgcHJvYmUgdHlwZQorICogQEdTVF9QUk9CRV9UWVBFX0lETEU6IHByb2JlIGlkbGUgcGFkcyBhbmQgYmxvY2sKKyAqIEBHU1RfUFJPQkVfVFlQRV9CTE9DSzogcHJvYmUgYW5kIGJsb2NrIHBhZHMKKyAqIEBHU1RfUFJPQkVfVFlQRV9CVUZGRVI6IHByb2JlIGJ1ZmZlcnMKKyAqIEBHU1RfUFJPQkVfVFlQRV9CVUZGRVJfTElTVDogcHJvYmUgYnVmZmVyIGxpc3RzCisgKiBAR1NUX1BST0JFX1RZUEVfRVZFTlQ6IHByb2JlIGV2ZW50cworICogQEdTVF9QUk9CRV9UWVBFX1BVU0g6IHByb2JlIHB1c2gKKyAqIEBHU1RfUFJPQkVfVFlQRV9QVUxMOiBwcm9iZSBwdWxsCisgKgorICogVGhlIGRpZmZlcmVudCBwcm9iaW5nIHR5cGVzIHRoYXQgY2FuIG9jY3VyLiBXaGVuIGVpdGhlciBvbmUgb2YKKyAqIEBHU1RfUFJPQkVfVFlQRV9JRExFIG9yIEBHU1RfUFJPQkVfVFlQRV9CTE9DSyBpcyB1c2VkLCB0aGUgcHJvYmUgd2lsbCBiZSBhCisgKiBibG9ja2luZyBwcm9iZS4KKyAqLwordHlwZWRlZiBlbnVtCit7CisgIEdTVF9QUk9CRV9UWVBFX0lOVkFMSUQgICAgICA9IDAsCisgIC8qIGZsYWdzIHRvIGNvbnRyb2wgYmxvY2tpbmcgKi8KKyAgR1NUX1BST0JFX1RZUEVfSURMRSAgICAgICAgID0gKDEgPDwgMCksCisgIEdTVF9QUk9CRV9UWVBFX0JMT0NLICAgICAgICA9ICgxIDw8IDEpLAorICAvKiBmbGFncyB0byBzZWxlY3QgZGF0YXR5cGVzICovCisgIEdTVF9QUk9CRV9UWVBFX0JVRkZFUiAgICAgICA9ICgxIDw8IDIpLAorICBHU1RfUFJPQkVfVFlQRV9CVUZGRVJfTElTVCAgPSAoMSA8PCAzKSwKKyAgR1NUX1BST0JFX1RZUEVfRVZFTlQgICAgICAgID0gKDEgPDwgNCksCisgIC8qIGZsYWdzIHRvIHNlbGVjdCBzY2hlZHVsaW5nIG1vZGUgKi8KKyAgR1NUX1BST0JFX1RZUEVfUFVTSCAgICAgICAgID0gKDEgPDwgNSksCisgIEdTVF9QUk9CRV9UWVBFX1BVTEwgICAgICAgICA9ICgxIDw8IDYpLAorfSBHc3RQcm9iZVR5cGU7CisKKyNkZWZpbmUgR1NUX1BST0JFX1RZUEVfQkxPQ0tJTkcgICAoR1NUX1BST0JFX1RZUEVfSURMRSB8IEdTVF9QUk9CRV9UWVBFX0JMT0NLKQorI2RlZmluZSBHU1RfUFJPQkVfVFlQRV9EQVRBICAgICAgIChHU1RfUFJPQkVfVFlQRV9CVUZGRVIgfCBHU1RfUFJPQkVfVFlQRV9FVkVOVCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NUX1BST0JFX1RZUEVfQlVGRkVSX0xJU1QpCisjZGVmaW5lIEdTVF9QUk9CRV9UWVBFX1NDSEVEVUxJTkcgKEdTVF9QUk9CRV9UWVBFX1BVU0ggfCBHU1RfUFJPQkVfVFlQRV9QVUxMKQorCisvKioKKyAqIEdzdFByb2JlUmV0dXJuOgorICogQEdTVF9QUk9CRV9PSzogbm9ybWFsIHByb2JlIHJldHVybiB2YWx1ZQorICogQEdTVF9QUk9CRV9EUk9QOiBkcm9wIGRhdGEgaW4gZGF0YSBwcm9iZXMKKyAqIEBHU1RfUFJPQkVfUkVNT1ZFOiByZW1vdmUgcHJvYmUKKyAqIEBHU1RfUFJPQkVfUEFTUzogcGFzcyB0aGUgZGF0YSBpdGVtIGluIHRoZSBibG9jayBwcm9iZSBhbmQgYmxvY2sgb24KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBuZXh0IGl0ZW0KKyAqCisgKiBEaWZmZXJlbnQgcmV0dXJuIHZhbHVlcyBmb3IgdGhlICNHc3RQYWRQcm9iZUNhbGxiYWNrLgorICovCit0eXBlZGVmIGVudW0KK3sKKyAgR1NUX1BST0JFX0RST1AsCisgIEdTVF9QUk9CRV9PSywKKyAgR1NUX1BST0JFX1JFTU9WRSwKKyAgR1NUX1BST0JFX1BBU1MsCit9IEdzdFByb2JlUmV0dXJuOworCisvKioKKyAqIEdzdFBhZFByb2JlQ2FsbGJhY2sKKyAqIEBwYWQ6IHRoZSAjR3N0UGFkIHRoYXQgaXMgYmxvY2tlZAorICogQHR5cGU6IHRoZSBjdXJyZW50IHByb2JlIHR5cGUKKyAqIEB0eXBlX2RhdGE6IHR5cGUgc3BlY2lmaWMgZGF0YQorICogQHVzZXJfZGF0YTogdGhlIGdwb2ludGVyIHRvIG9wdGlvbmFsIHVzZXIgZGF0YS4KKyAqCisgKiBDYWxsYmFjayB1c2VkIGJ5IGdzdF9wYWRfYWRkX3Byb2JlKCkuIEdldHMgY2FsbGVkIHRvIG5vdGlmeSBhYm91dCB0aGUgY3VycmVudAorICogYmxvY2tpbmcgdHlwZS4KKyAqLwordHlwZWRlZiBHc3RQcm9iZVJldHVybiAgICAgICgqR3N0UGFkUHJvYmVDYWxsYmFjaykgICAgICAgICAgICAgIChHc3RQYWQgKnBhZCwgR3N0UHJvYmVUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHR5cGVfZGF0YSwgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKKworLyoqCisgKiBHc3RQYWRTdGlja3lFdmVudHNGb3JlYWNoRnVuY3Rpb246CisgKiBAcGFkOiB0aGUgI0dzdFBhZC4KKyAqIEBldmVudDogdGhlIHN0aWNreSAjR3N0RXZlbnQuCisgKiBAdXNlcl9kYXRhOiB0aGUgI2dwb2ludGVyIHRvIG9wdGlvbmFsIHVzZXIgZGF0YS4KKyAqCisgKiBDYWxsYmFjayB1c2VkIGJ5IGdzdF9wYWRfc3RpY2t5X2V2ZW50c19mb3JlYWNoKCkuCisgKgorICogUmV0dXJuczogR1NUX0ZMT1dfT0sgaWYgdGhlIGl0ZXJhdGlvbiBzaG91bGQgY29udGludWUKKyAqLwordHlwZWRlZiBHc3RGbG93UmV0dXJuICAgICAgICAgICAoKkdzdFBhZFN0aWNreUV2ZW50c0ZvcmVhY2hGdW5jdGlvbikgKEdzdFBhZCAqcGFkLCBHc3RFdmVudCAqZXZlbnQsIGdwb2ludGVyIHVzZXJfZGF0YSk7CisKKy8qKgorICogR3N0UGFkRmxhZ3M6CisgKiBAR1NUX1BBRF9CTE9DS0VEOiBpcyBkYXRhZmxvdyBvbiBhIHBhZCBibG9ja2VkCisgKiBAR1NUX1BBRF9GTFVTSElORzogaXMgcGFkIHJlZnVzaW5nIGJ1ZmZlcnMKKyAqIEBHU1RfUEFEX0lOX0dFVENBUFM6IEdzdFBhZEdldENhcHNGdW5jdGlvbigpIGlzIHJ1bm5pbmcgbm93CisgKiBAR1NUX1BBRF9CTE9DS0lORzogaXMgcGFkIGN1cnJlbnRseSBibG9ja2luZyBvbiBhIGJ1ZmZlciBvciBldmVudAorICogQEdTVF9QQURfTkVFRF9SRUNPTkZJR1VSRTogdGhlIHBhZCBzaG91bGQgYmUgcmVjb25maWd1cmVkL3JlbmVnb3RpYXRlZC4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmbGFnIGhhcyB0byBiZSB1bnNldCBtYW51YWxseSBhZnRlcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb25maWd1cmF0aW9uIGhhcHBlbmVkLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2luY2U6IDAuMTAuMzQuCisgKiBAR1NUX1BBRF9ORUVEX0VWRU5UUzogdGhlIHBhZCBoYXMgcGVuZGluZyBldmVudHMKKyAqIEBHU1RfUEFEX0ZJWEVEX0NBUFM6IHRoZSBwYWQgaXMgdXNpbmcgZml4ZWQgY2FwcyB0aGlzIG1lYW5zIHRoYXQgb25jZSB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgIGNhcHMgYXJlIHNldCBvbiB0aGUgcGFkLCB0aGUgZ2V0Y2FwcyBmdW5jdGlvbiBvbmx5CisgKiAgICAgICAgICAgICAgICAgICAgICByZXR1cm5zIHRob3NlIGNhcHMuCisgKiBAR1NUX1BBRF9GTEFHX0xBU1Q6IG9mZnNldCB0byBkZWZpbmUgbW9yZSBmbGFncworICoKKyAqIFBhZCBzdGF0ZSBmbGFncworICovCit0eXBlZGVmIGVudW0geworICBHU1RfUEFEX0JMT0NLRUQgICAgICAgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgMCksCisgIEdTVF9QQURfRkxVU0hJTkcgICAgICAgICA9IChHU1RfT0JKRUNUX0ZMQUdfTEFTVCA8PCAxKSwKKyAgR1NUX1BBRF9JTl9HRVRDQVBTICAgICAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUIDw8IDIpLAorICBHU1RfUEFEX0JMT0NLSU5HICAgICAgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgNCksCisgIEdTVF9QQURfTkVFRF9SRUNPTkZJR1VSRSA9IChHU1RfT0JKRUNUX0ZMQUdfTEFTVCA8PCA1KSwKKyAgR1NUX1BBRF9ORUVEX0VWRU5UUyAgICAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUIDw8IDYpLAorICBHU1RfUEFEX0ZJWEVEX0NBUFMgICAgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgNyksCisgIC8qIHBhZGRpbmcgKi8KKyAgR1NUX1BBRF9GTEFHX0xBU1QgICAgICAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUIDw8IDE2KQorfSBHc3RQYWRGbGFnczsKKworLyoqCisgKiBHc3RQYWQ6CisgKiBAZWxlbWVudF9wcml2YXRlOiBwcml2YXRlIGRhdGEgb3duZWQgYnkgdGhlIHBhcmVudCBlbGVtZW50CisgKiBAcGFkdGVtcGxhdGU6IHBhZHRlbXBsYXRlIGZvciB0aGlzIHBhZAorICogQGRpcmVjdGlvbjogdGhlIGRpcmVjdGlvbiBvZiB0aGUgcGFkLCBjYW5ub3QgY2hhbmdlIGFmdGVyIGNyZWF0aW5nCisgKiAgICAgICAgICAgICB0aGUgcGFkLgorICogQHN0cmVhbV9yZWNfbG9jazogcmVjdXJzaXZlIHN0cmVhbSBsb2NrIG9mIHRoZSBwYWQsIHVzZWQgdG8gcHJvdGVjdAorICogICAgICAgICAgICAgICAgICAgdGhlIGRhdGEgdXNlZCBpbiBzdHJlYW1pbmcuCisgKiBAdGFzazogdGFzayBmb3IgdGhpcyBwYWQgaWYgdGhlIHBhZCBpcyBhY3RpdmVseSBkcml2aW5nIGRhdGFmbG93LgorICogQGJsb2NrX2NvbmQ6IGNvbmRpdGlvbmFsIHRvIHNpZ25hbCBwYWQgYmxvY2sKKyAqIEBwcm9iZXM6IGluc3RhbGxlZCBwcm9iZXMKKyAqIEBnZXRjYXBzZnVuYzogZnVuY3Rpb24gdG8gZ2V0IGNhcHMgb2YgdGhlIHBhZAorICogQGFjY2VwdGNhcHNmdW5jOiBmdW5jdGlvbiB0byBjaGVjayBpZiBwYWQgY2FuIGFjY2VwdCBjYXBzCisgKiBAZml4YXRlY2Fwc2Z1bmM6IGZ1bmN0aW9uIHRvIGZpeGF0ZSBjYXBzCisgKiBAbW9kZTogY3VycmVudCBhY3RpdmF0aW9uIG1vZGUgb2YgdGhlIHBhZAorICogQGFjdGl2YXRlZnVuYzogcGFkIGFjdGl2YXRpb24gZnVuY3Rpb24KKyAqIEBhY3RpdmF0ZXB1c2hmdW5jOiBmdW5jdGlvbiB0byBhY3RpdmF0ZS9kZWFjdGl2YXRlIHBhZCBpbiBwdXNoIG1vZGUKKyAqIEBhY3RpdmF0ZXB1bGxmdW5jOiBmdW5jdGlvbiB0byBhY3RpdmF0ZS9kZWFjdGl2YXRlIHBhZCBpbiBwdWxsIG1vZGUKKyAqIEBwZWVyOiB0aGUgcGFkIHRoaXMgcGFkIGlzIGxpbmtlZCB0bworICogQGxpbmtmdW5jOiBmdW5jdGlvbiBjYWxsZWQgd2hlbiBwYWQgaXMgbGlua2VkCisgKiBAdW5saW5rZnVuYzogZnVuY3Rpb24gY2FsbGVkIHdoZW4gcGFkIGlzIHVubGlua2VkCisgKiBAY2hhaW5mdW5jOiBmdW5jdGlvbiB0byBjaGFpbiBidWZmZXIgdG8gcGFkCisgKiBAY2hhaW5saXN0ZnVuYzogZnVuY3Rpb24gdG8gY2hhaW4gYSBsaXN0IG9mIGJ1ZmZlcnMgdG8gcGFkCisgKiBAZ2V0cmFuZ2VmdW5jOiBmdW5jdGlvbiB0byBnZXQgYSByYW5nZSBvZiBkYXRhIGZyb20gYSBwYWQKKyAqIEBldmVudGZ1bmM6IGZ1bmN0aW9uIHRvIHNlbmQgYW4gZXZlbnQgdG8gYSBwYWQKKyAqIEBvZmZzZXQ6IHRoZSBwYWQgb2Zmc2V0CisgKiBAcXVlcnl0eXBlZnVuYzogZ2V0IGxpc3Qgb2Ygc3VwcG9ydGVkIHF1ZXJpZXMKKyAqIEBxdWVyeWZ1bmM6IHBlcmZvcm0gYSBxdWVyeSBvbiB0aGUgcGFkCisgKiBAaXRlcmludGxpbmtmdW5jOiBnZXQgdGhlIGludGVybmFsIGxpbmtzIGl0ZXJhdG9yIG9mIHRoaXMgcGFkCisgKgorICogVGhlICNHc3RQYWQgc3RydWN0dXJlLiBVc2UgdGhlIGZ1bmN0aW9ucyB0byB1cGRhdGUgdGhlIHZhcmlhYmxlcy4KKyAqLworc3RydWN0IF9Hc3RQYWQgeworICBHc3RPYmplY3QgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0OworCisgIC8qPCBwdWJsaWMgPiovCisgIGdwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X3ByaXZhdGU7CisKKyAgR3N0UGFkVGVtcGxhdGUgICAgICAgICAgICAgICAgKnBhZHRlbXBsYXRlOworCisgIEdzdFBhZERpcmVjdGlvbiAgICAgICAgICAgICAgICBkaXJlY3Rpb247CisKKyAgLyo8IHB1YmxpYyA+Ki8gLyogd2l0aCBTVFJFQU1fTE9DSyAqLworICAvKiBzdHJlYW1pbmcgcmVjX2xvY2sgKi8KKyAgR1N0YXRpY1JlY011dGV4CQkgc3RyZWFtX3JlY19sb2NrOworICBHc3RUYXNrCQkJKnRhc2s7CisKKyAgLyo8IHB1YmxpYyA+Ki8gLyogd2l0aCBMT0NLICovCisgIC8qIGJsb2NrIGNvbmQsIG11dGV4IGlzIGZyb20gdGhlIG9iamVjdCAqLworICBHQ29uZAkJCQkqYmxvY2tfY29uZDsKKyAgR0hvb2tMaXN0ICAgICAgICAgICAgICAgICAgICAgIHByb2JlczsKKworICAvKiB0aGUgcGFkIGNhcGFiaWxpdGllcyAqLworICBHc3RQYWRHZXRDYXBzRnVuY3Rpb24JCWdldGNhcHNmdW5jOworICBHc3RQYWRBY2NlcHRDYXBzRnVuY3Rpb24JIGFjY2VwdGNhcHNmdW5jOworICBHc3RQYWRGaXhhdGVDYXBzRnVuY3Rpb24JIGZpeGF0ZWNhcHNmdW5jOworCisgIEdzdEFjdGl2YXRlTW9kZQkJIG1vZGU7CisgIEdzdFBhZEFjdGl2YXRlRnVuY3Rpb24JIGFjdGl2YXRlZnVuYzsKKyAgR3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb24JIGFjdGl2YXRlcHVzaGZ1bmM7CisgIEdzdFBhZEFjdGl2YXRlTW9kZUZ1bmN0aW9uCSBhY3RpdmF0ZXB1bGxmdW5jOworCisgIC8qIHBhZCBsaW5rICovCisgIEdzdFBhZAkJCSpwZWVyOworICBHc3RQYWRMaW5rRnVuY3Rpb24JCSBsaW5rZnVuYzsKKyAgR3N0UGFkVW5saW5rRnVuY3Rpb24JCSB1bmxpbmtmdW5jOworCisgIC8qIGRhdGEgdHJhbnNwb3J0IGZ1bmN0aW9ucyAqLworICBHc3RQYWRDaGFpbkZ1bmN0aW9uCQkgY2hhaW5mdW5jOworICBHc3RQYWRDaGFpbkxpc3RGdW5jdGlvbiAgICAgICAgY2hhaW5saXN0ZnVuYzsKKyAgR3N0UGFkR2V0UmFuZ2VGdW5jdGlvbgkgZ2V0cmFuZ2VmdW5jOworICBHc3RQYWRFdmVudEZ1bmN0aW9uCQkgZXZlbnRmdW5jOworCisgIC8qIHBhZCBvZmZzZXQgKi8KKyAgZ2ludDY0ICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDsKKworICAvKiBnZW5lcmljIHF1ZXJ5IG1ldGhvZCAqLworICBHc3RQYWRRdWVyeVR5cGVGdW5jdGlvbgkgcXVlcnl0eXBlZnVuYzsKKyAgR3N0UGFkUXVlcnlGdW5jdGlvbgkJIHF1ZXJ5ZnVuYzsKKworICAvKiBpbnRlcm5hbCBsaW5rcyAqLworICBHc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uICAgICAgaXRlcmludGxpbmtmdW5jOworCisgIC8qPCBwcml2YXRlID4qLworICAvKiBjb3VudHMgbnVtYmVyIG9mIHByb2JlcyBhdHRhY2hlZC4gKi8KKyAgZ2ludAkJCQkgbnVtX3Byb2JlczsKKyAgZ2ludAkJCQkgbnVtX2Jsb2NrZWQ7CisKKyAgR3N0UGFkUHJpdmF0ZSAgICAgICAgICAgICAgICAgKnByaXY7CisKKyAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Cit9OworCitzdHJ1Y3QgX0dzdFBhZENsYXNzIHsKKyAgR3N0T2JqZWN0Q2xhc3MJcGFyZW50X2NsYXNzOworCisgIC8qIHNpZ25hbCBjYWxsYmFja3MgKi8KKyAgdm9pZAkJKCpsaW5rZWQpCQkoR3N0UGFkICpwYWQsIEdzdFBhZCAqcGVlcik7CisgIHZvaWQJCSgqdW5saW5rZWQpCQkoR3N0UGFkICpwYWQsIEdzdFBhZCAqcGVlcik7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOworfTsKKworCisvKioqKiogaGVscGVyIG1hY3JvcyAqKioqKi8KKy8qIEdzdFBhZCAqLworI2RlZmluZSBHU1RfUEFEX05BTUUocGFkKQkJKEdTVF9PQkpFQ1RfTkFNRShwYWQpKQorI2RlZmluZSBHU1RfUEFEX1BBUkVOVChwYWQpCQkoR1NUX0VMRU1FTlRfQ0FTVChHU1RfT0JKRUNUX1BBUkVOVChwYWQpKSkKKyNkZWZpbmUgR1NUX1BBRF9FTEVNRU5UX1BSSVZBVEUocGFkKSAgICAoR1NUX1BBRF9DQVNUKHBhZCktPmVsZW1lbnRfcHJpdmF0ZSkKKyNkZWZpbmUgR1NUX1BBRF9QQURfVEVNUExBVEUocGFkKQkoR1NUX1BBRF9DQVNUKHBhZCktPnBhZHRlbXBsYXRlKQorI2RlZmluZSBHU1RfUEFEX0RJUkVDVElPTihwYWQpCQkoR1NUX1BBRF9DQVNUKHBhZCktPmRpcmVjdGlvbikKKyNkZWZpbmUgR1NUX1BBRF9UQVNLKHBhZCkJCShHU1RfUEFEX0NBU1QocGFkKS0+dGFzaykKKyNkZWZpbmUgR1NUX1BBRF9BQ1RJVkFURV9NT0RFKHBhZCkJKEdTVF9QQURfQ0FTVChwYWQpLT5tb2RlKQorCisjZGVmaW5lIEdTVF9QQURfQUNUSVZBVEVGVU5DKHBhZCkJKEdTVF9QQURfQ0FTVChwYWQpLT5hY3RpdmF0ZWZ1bmMpCisjZGVmaW5lIEdTVF9QQURfQUNUSVZBVEVQVVNIRlVOQyhwYWQpCShHU1RfUEFEX0NBU1QocGFkKS0+YWN0aXZhdGVwdXNoZnVuYykKKyNkZWZpbmUgR1NUX1BBRF9BQ1RJVkFURVBVTExGVU5DKHBhZCkJKEdTVF9QQURfQ0FTVChwYWQpLT5hY3RpdmF0ZXB1bGxmdW5jKQorI2RlZmluZSBHU1RfUEFEX0NIQUlORlVOQyhwYWQpCQkoR1NUX1BBRF9DQVNUKHBhZCktPmNoYWluZnVuYykKKyNkZWZpbmUgR1NUX1BBRF9DSEFJTkxJU1RGVU5DKHBhZCkgICAgICAoR1NUX1BBRF9DQVNUKHBhZCktPmNoYWlubGlzdGZ1bmMpCisjZGVmaW5lIEdTVF9QQURfR0VUUkFOR0VGVU5DKHBhZCkJKEdTVF9QQURfQ0FTVChwYWQpLT5nZXRyYW5nZWZ1bmMpCisjZGVmaW5lIEdTVF9QQURfRVZFTlRGVU5DKHBhZCkJCShHU1RfUEFEX0NBU1QocGFkKS0+ZXZlbnRmdW5jKQorI2RlZmluZSBHU1RfUEFEX1FVRVJZVFlQRUZVTkMocGFkKQkoR1NUX1BBRF9DQVNUKHBhZCktPnF1ZXJ5dHlwZWZ1bmMpCisjZGVmaW5lIEdTVF9QQURfUVVFUllGVU5DKHBhZCkJCShHU1RfUEFEX0NBU1QocGFkKS0+cXVlcnlmdW5jKQorI2RlZmluZSBHU1RfUEFEX0lURVJJTlRMSU5LRlVOQyhwYWQpICAgIChHU1RfUEFEX0NBU1QocGFkKS0+aXRlcmludGxpbmtmdW5jKQorCisjZGVmaW5lIEdTVF9QQURfUEVFUihwYWQpCQkoR1NUX1BBRF9DQVNUKHBhZCktPnBlZXIpCisjZGVmaW5lIEdTVF9QQURfTElOS0ZVTkMocGFkKQkJKEdTVF9QQURfQ0FTVChwYWQpLT5saW5rZnVuYykKKyNkZWZpbmUgR1NUX1BBRF9VTkxJTktGVU5DKHBhZCkJCShHU1RfUEFEX0NBU1QocGFkKS0+dW5saW5rZnVuYykKKworI2RlZmluZSBHU1RfUEFEX0dFVENBUFNGVU5DKHBhZCkJKEdTVF9QQURfQ0FTVChwYWQpLT5nZXRjYXBzZnVuYykKKyNkZWZpbmUgR1NUX1BBRF9BQ0NFUFRDQVBTRlVOQyhwYWQpCShHU1RfUEFEX0NBU1QocGFkKS0+YWNjZXB0Y2Fwc2Z1bmMpCisjZGVmaW5lIEdTVF9QQURfRklYQVRFQ0FQU0ZVTkMocGFkKQkoR1NUX1BBRF9DQVNUKHBhZCktPmZpeGF0ZWNhcHNmdW5jKQorCisjZGVmaW5lIEdTVF9QQURfSVNfU1JDKHBhZCkJCShHU1RfUEFEX0RJUkVDVElPTihwYWQpID09IEdTVF9QQURfU1JDKQorI2RlZmluZSBHU1RfUEFEX0lTX1NJTksocGFkKQkJKEdTVF9QQURfRElSRUNUSU9OKHBhZCkgPT0gR1NUX1BBRF9TSU5LKQorCisjZGVmaW5lIEdTVF9QQURfSVNfTElOS0VEKHBhZCkJCShHU1RfUEFEX1BFRVIocGFkKSAhPSBOVUxMKQorCisjZGVmaW5lIEdTVF9QQURfSVNfQUNUSVZFKHBhZCkgICAgICAgICAgKEdTVF9QQURfQUNUSVZBVEVfTU9ERShwYWQpICE9IEdTVF9BQ1RJVkFURV9OT05FKQorCisjZGVmaW5lIEdTVF9QQURfSVNfQkxPQ0tFRChwYWQpCQkoR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAocGFkLCBHU1RfUEFEX0JMT0NLRUQpKQorI2RlZmluZSBHU1RfUEFEX0lTX0JMT0NLSU5HKHBhZCkJKEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKHBhZCwgR1NUX1BBRF9CTE9DS0lORykpCisjZGVmaW5lIEdTVF9QQURfSVNfRkxVU0hJTkcocGFkKQkoR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAocGFkLCBHU1RfUEFEX0ZMVVNISU5HKSkKKyNkZWZpbmUgR1NUX1BBRF9JU19JTl9HRVRDQVBTKHBhZCkJKEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKHBhZCwgR1NUX1BBRF9JTl9HRVRDQVBTKSkKKyNkZWZpbmUgR1NUX1BBRF9ORUVEU19SRUNPTkZJR1VSRShwYWQpICAoR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAocGFkLCBHU1RfUEFEX05FRURfUkVDT05GSUdVUkUpKQorI2RlZmluZSBHU1RfUEFEX05FRURTX0VWRU5UUyhwYWQpICAgICAgIChHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChwYWQsIEdTVF9QQURfTkVFRF9FVkVOVFMpKQorI2RlZmluZSBHU1RfUEFEX0lTX0ZJWEVEX0NBUFMocGFkKQkoR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAocGFkLCBHU1RfUEFEX0ZJWEVEX0NBUFMpKQorCisjZGVmaW5lIEdTVF9QQURfU0VUX0ZMVVNISU5HKHBhZCkJKEdTVF9PQkpFQ1RfRkxBR19TRVQgKHBhZCwgR1NUX1BBRF9GTFVTSElORykpCisjZGVmaW5lIEdTVF9QQURfVU5TRVRfRkxVU0hJTkcocGFkKQkoR1NUX09CSkVDVF9GTEFHX1VOU0VUIChwYWQsIEdTVF9QQURfRkxVU0hJTkcpKQorCisvKioKKyAqIEdTVF9QQURfR0VUX1NUUkVBTV9MT0NLOgorICogQHBhZDogYSAjR3N0UGFkCisgKgorICogR2V0IHRoZSBzdHJlYW0gbG9jayBvZiBAcGFkLiBUaGUgc3RyZWFtIGxvY2sgaXMgcHJvdGVjdGluZyB0aGUKKyAqIHJlc291cmNlcyB1c2VkIGluIHRoZSBkYXRhIHByb2Nlc3NpbmcgZnVuY3Rpb25zIG9mIEBwYWQuCisgKi8KKyNkZWZpbmUgR1NUX1BBRF9HRVRfU1RSRUFNX0xPQ0socGFkKSAgICAoJihHU1RfUEFEX0NBU1QocGFkKS0+c3RyZWFtX3JlY19sb2NrKSkKKy8qKgorICogR1NUX1BBRF9TVFJFQU1fTE9DSzoKKyAqIEBwYWQ6IGEgI0dzdFBhZAorICoKKyAqIExvY2sgdGhlIHN0cmVhbSBsb2NrIG9mIEBwYWQuCisgKi8KKyNkZWZpbmUgR1NUX1BBRF9TVFJFQU1fTE9DSyhwYWQpICAgICAgICAoZ19zdGF0aWNfcmVjX211dGV4X2xvY2soR1NUX1BBRF9HRVRfU1RSRUFNX0xPQ0socGFkKSkpCisvKioKKyAqIEdTVF9QQURfU1RSRUFNX0xPQ0tfRlVMTDoKKyAqIEBwYWQ6IGEgI0dzdFBhZAorICogQHQ6IHRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVjdXJzaXZlbHkgbG9jaworICoKKyAqIExvY2sgdGhlIHN0cmVhbSBsb2NrIG9mIEBwYWQgQHQgdGltZXMuCisgKi8KKyNkZWZpbmUgR1NUX1BBRF9TVFJFQU1fTE9DS19GVUxMKHBhZCx0KSAoZ19zdGF0aWNfcmVjX211dGV4X2xvY2tfZnVsbChHU1RfUEFEX0dFVF9TVFJFQU1fTE9DSyhwYWQpLCB0KSkKKy8qKgorICogR1NUX1BBRF9TVFJFQU1fVFJZTE9DSzoKKyAqIEBwYWQ6IGEgI0dzdFBhZAorICoKKyAqIFRyeSB0byBMb2NrIHRoZSBzdHJlYW0gbG9jayBvZiB0aGUgcGFkLCByZXR1cm4gVFJVRSBpZiB0aGUgbG9jayBjb3VsZCBiZQorICogdGFrZW4uCisgKi8KKyNkZWZpbmUgR1NUX1BBRF9TVFJFQU1fVFJZTE9DSyhwYWQpICAgICAoZ19zdGF0aWNfcmVjX211dGV4X3RyeWxvY2soR1NUX1BBRF9HRVRfU1RSRUFNX0xPQ0socGFkKSkpCisvKioKKyAqIEdTVF9QQURfU1RSRUFNX1VOTE9DSzoKKyAqIEBwYWQ6IGEgI0dzdFBhZAorICoKKyAqIFVubG9jayB0aGUgc3RyZWFtIGxvY2sgb2YgQHBhZC4KKyAqLworI2RlZmluZSBHU1RfUEFEX1NUUkVBTV9VTkxPQ0socGFkKSAgICAgIChnX3N0YXRpY19yZWNfbXV0ZXhfdW5sb2NrKEdTVF9QQURfR0VUX1NUUkVBTV9MT0NLKHBhZCkpKQorLyoqCisgKiBHU1RfUEFEX1NUUkVBTV9VTkxPQ0tfRlVMTDoKKyAqIEBwYWQ6IGEgI0dzdFBhZAorICoKKyAqIEZ1bGx5IHVubG9jayB0aGUgcmVjdXJzaXZlIHN0cmVhbSBsb2NrIG9mIEBwYWQsIHJldHVybiB0aGUgbnVtYmVyIG9mIHRpbWVzCisgKiBAcGFkIHdhcyBsb2NrZWQuCisgKi8KKyNkZWZpbmUgR1NUX1BBRF9TVFJFQU1fVU5MT0NLX0ZVTEwocGFkKSAoZ19zdGF0aWNfcmVjX211dGV4X3VubG9ja19mdWxsKEdTVF9QQURfR0VUX1NUUkVBTV9MT0NLKHBhZCkpKQorCisjZGVmaW5lIEdTVF9QQURfQkxPQ0tfR0VUX0NPTkQocGFkKSAgICAgKEdTVF9QQURfQ0FTVChwYWQpLT5ibG9ja19jb25kKQorI2RlZmluZSBHU1RfUEFEX0JMT0NLX1dBSVQocGFkKSAgICAgICAgIChnX2NvbmRfd2FpdChHU1RfUEFEX0JMT0NLX0dFVF9DT05EIChwYWQpLCBHU1RfT0JKRUNUX0dFVF9MT0NLIChwYWQpKSkKKyNkZWZpbmUgR1NUX1BBRF9CTE9DS19TSUdOQUwocGFkKSAgICAgICAoZ19jb25kX3NpZ25hbChHU1RfUEFEX0JMT0NLX0dFVF9DT05EIChwYWQpKSkKKyNkZWZpbmUgR1NUX1BBRF9CTE9DS19CUk9BRENBU1QocGFkKSAgICAoZ19jb25kX2Jyb2FkY2FzdChHU1RfUEFEX0JMT0NLX0dFVF9DT05EIChwYWQpKSkKKworR1R5cGUJCQlnc3RfcGFkX2dldF90eXBlCQkJKHZvaWQpOworCisvKiBjcmVhdGluZyBwYWRzICovCitHc3RQYWQqCQkJZ3N0X3BhZF9uZXcJCQkJKGNvbnN0IGdjaGFyICpuYW1lLCBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uKTsKK0dzdFBhZCoJCQlnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlCQkoR3N0UGFkVGVtcGxhdGUgKnRlbXBsLCBjb25zdCBnY2hhciAqbmFtZSk7CitHc3RQYWQqCQkJZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUJKEdzdFN0YXRpY1BhZFRlbXBsYXRlICp0ZW1wbCwgY29uc3QgZ2NoYXIgKm5hbWUpOworCisKKy8qKgorICogZ3N0X3BhZF9nZXRfbmFtZToKKyAqIEBwYWQ6IHRoZSBwYWQgdG8gZ2V0IHRoZSBuYW1lIGZyb20KKyAqCisgKiBHZXQgYSBjb3B5IG9mIHRoZSBuYW1lIG9mIHRoZSBwYWQuIGdfZnJlZSgpIGFmdGVyIHVzYWdlLgorICoKKyAqIE1UIHNhZmUuCisgKi8KKyNkZWZpbmUgZ3N0X3BhZF9nZXRfbmFtZShwYWQpIGdzdF9vYmplY3RfZ2V0X25hbWUgKEdTVF9PQkpFQ1RfQ0FTVCAocGFkKSkKKy8qKgorICogZ3N0X3BhZF9nZXRfcGFyZW50OgorICogQHBhZDogdGhlIHBhZCB0byBnZXQgdGhlIHBhcmVudCBvZgorICoKKyAqIEdldCB0aGUgcGFyZW50IG9mIEBwYWQuIFRoaXMgZnVuY3Rpb24gaW5jcmVhc2VzIHRoZSByZWZjb3VudAorICogb2YgdGhlIHBhcmVudCBvYmplY3Qgc28geW91IHNob3VsZCBnc3Rfb2JqZWN0X3VucmVmKCkgaXQgYWZ0ZXIgdXNhZ2UuCisgKiBDYW4gcmV0dXJuIE5VTEwgaWYgdGhlIHBhZCBkaWQgbm90IGhhdmUgYSBwYXJlbnQuCisgKgorICogTVQgc2FmZS4KKyAqLworI2RlZmluZSBnc3RfcGFkX2dldF9wYXJlbnQocGFkKSBnc3Rfb2JqZWN0X2dldF9wYXJlbnQgKEdTVF9PQkpFQ1RfQ0FTVCAocGFkKSkKKworR3N0UGFkRGlyZWN0aW9uCQlnc3RfcGFkX2dldF9kaXJlY3Rpb24JCQkoR3N0UGFkICpwYWQpOworCitnYm9vbGVhbgkJZ3N0X3BhZF9zZXRfYWN0aXZlCQkJKEdzdFBhZCAqcGFkLCBnYm9vbGVhbiBhY3RpdmUpOworZ2Jvb2xlYW4JCWdzdF9wYWRfaXNfYWN0aXZlCQkJKEdzdFBhZCAqcGFkKTsKK2dib29sZWFuCQlnc3RfcGFkX2FjdGl2YXRlX3B1bGwJCQkoR3N0UGFkICpwYWQsIGdib29sZWFuIGFjdGl2ZSk7CitnYm9vbGVhbgkJZ3N0X3BhZF9hY3RpdmF0ZV9wdXNoCQkJKEdzdFBhZCAqcGFkLCBnYm9vbGVhbiBhY3RpdmUpOworCitndWxvbmcgICAgICAgICAgICAgICAgICBnc3RfcGFkX2FkZF9wcm9iZSAgICAgICAgICAgICAgICAgICAgICAgKEdzdFBhZCAqcGFkLAorCQkJCQkJCQkgR3N0UHJvYmVUeXBlIG1hc2ssCisJCQkJCQkJCSBHc3RQYWRQcm9iZUNhbGxiYWNrIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lfZGF0YSk7Cit2b2lkICAgICAgICAgICAgICAgICAgICBnc3RfcGFkX3JlbW92ZV9wcm9iZSAgICAgICAgICAgICAgICAgICAgKEdzdFBhZCAqcGFkLCBndWxvbmcgaWQpOworCitnYm9vbGVhbgkJZ3N0X3BhZF9pc19ibG9ja2VkCQkJKEdzdFBhZCAqcGFkKTsKK2dib29sZWFuCQlnc3RfcGFkX2lzX2Jsb2NraW5nCQkJKEdzdFBhZCAqcGFkKTsKKwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X3BhZF9tYXJrX3JlY29uZmlndXJlICAgICAgICAgICAgICAgIChHc3RQYWQgKnBhZCk7CitnYm9vbGVhbgkJZ3N0X3BhZF9jaGVja19yZWNvbmZpZ3VyZSAgICAgICAgICAgICAgIChHc3RQYWQgKnBhZCk7CisKK3ZvaWQJCQlnc3RfcGFkX3NldF9lbGVtZW50X3ByaXZhdGUJCShHc3RQYWQgKnBhZCwgZ3BvaW50ZXIgcHJpdik7CitncG9pbnRlcgkJZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlCQkoR3N0UGFkICpwYWQpOworCitHc3RQYWRUZW1wbGF0ZSoJCWdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZQkJKEdzdFBhZCAqcGFkKTsKKworR3N0RXZlbnQqICAgICAgICAgICAgICAgZ3N0X3BhZF9nZXRfc3RpY2t5X2V2ZW50ICAgICAgICAgICAgICAgIChHc3RQYWQgKnBhZCwgR3N0RXZlbnRUeXBlIGV2ZW50X3R5cGUpOworR3N0Rmxvd1JldHVybiAgICAgICAgICAgZ3N0X3BhZF9zdGlja3lfZXZlbnRzX2ZvcmVhY2ggICAgICAgICAgIChHc3RQYWQgKnBhZCwgR3N0UGFkU3RpY2t5RXZlbnRzRm9yZWFjaEZ1bmN0aW9uIGZvcmVhY2hfZnVuYywgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKKworLyogZGF0YSBwYXNzaW5nIHNldHVwIGZ1bmN0aW9ucyAqLwordm9pZAkJCWdzdF9wYWRfc2V0X2FjdGl2YXRlX2Z1bmN0aW9uCQkoR3N0UGFkICpwYWQsIEdzdFBhZEFjdGl2YXRlRnVuY3Rpb24gYWN0aXZhdGUpOwordm9pZAkJCWdzdF9wYWRfc2V0X2FjdGl2YXRlcHVsbF9mdW5jdGlvbgkoR3N0UGFkICpwYWQsIEdzdFBhZEFjdGl2YXRlTW9kZUZ1bmN0aW9uIGFjdGl2YXRlcHVsbCk7Cit2b2lkCQkJZ3N0X3BhZF9zZXRfYWN0aXZhdGVwdXNoX2Z1bmN0aW9uCShHc3RQYWQgKnBhZCwgR3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb24gYWN0aXZhdGVwdXNoKTsKK3ZvaWQJCQlnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbgkJKEdzdFBhZCAqcGFkLCBHc3RQYWRDaGFpbkZ1bmN0aW9uIGNoYWluKTsKK3ZvaWQJCQlnc3RfcGFkX3NldF9jaGFpbl9saXN0X2Z1bmN0aW9uCSAgICAgICAgKEdzdFBhZCAqcGFkLCBHc3RQYWRDaGFpbkxpc3RGdW5jdGlvbiBjaGFpbmxpc3QpOwordm9pZAkJCWdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uCQkoR3N0UGFkICpwYWQsIEdzdFBhZEdldFJhbmdlRnVuY3Rpb24gZ2V0KTsKK3ZvaWQJCQlnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbgkJKEdzdFBhZCAqcGFkLCBHc3RQYWRFdmVudEZ1bmN0aW9uIGV2ZW50KTsKKworLyogcGFkIGxpbmtzICovCit2b2lkCQkJZ3N0X3BhZF9zZXRfbGlua19mdW5jdGlvbgkJKEdzdFBhZCAqcGFkLCBHc3RQYWRMaW5rRnVuY3Rpb24gbGluayk7Cit2b2lkCQkJZ3N0X3BhZF9zZXRfdW5saW5rX2Z1bmN0aW9uCQkoR3N0UGFkICpwYWQsIEdzdFBhZFVubGlua0Z1bmN0aW9uIHVubGluayk7CisKK2dib29sZWFuICAgICAgICAgICAgICAgIGdzdF9wYWRfY2FuX2xpbmsgICAgICAgICAgICAgICAgICAgICAgICAoR3N0UGFkICpzcmNwYWQsIEdzdFBhZCAqc2lua3BhZCk7CitHc3RQYWRMaW5rUmV0dXJuICAgICAgICBnc3RfcGFkX2xpbmsJCQkJKEdzdFBhZCAqc3JjcGFkLCBHc3RQYWQgKnNpbmtwYWQpOworR3N0UGFkTGlua1JldHVybiAgICAgICAgZ3N0X3BhZF9saW5rX2Z1bGwJCQkoR3N0UGFkICpzcmNwYWQsIEdzdFBhZCAqc2lua3BhZCwgR3N0UGFkTGlua0NoZWNrIGZsYWdzKTsKK2dib29sZWFuCQlnc3RfcGFkX3VubGluawkJCQkoR3N0UGFkICpzcmNwYWQsIEdzdFBhZCAqc2lua3BhZCk7CitnYm9vbGVhbgkJZ3N0X3BhZF9pc19saW5rZWQJCQkoR3N0UGFkICpwYWQpOworCitHc3RQYWQqCQkJZ3N0X3BhZF9nZXRfcGVlcgkJCShHc3RQYWQgKnBhZCk7CisKKy8qIGNhcHNuZWdvIGZ1bmN0aW9ucyAqLwordm9pZAkJCWdzdF9wYWRfc2V0X2dldGNhcHNfZnVuY3Rpb24JCShHc3RQYWQgKnBhZCwgR3N0UGFkR2V0Q2Fwc0Z1bmN0aW9uIGdldGNhcHMpOwordm9pZAkJCWdzdF9wYWRfc2V0X2FjY2VwdGNhcHNfZnVuY3Rpb24JCShHc3RQYWQgKnBhZCwgR3N0UGFkQWNjZXB0Q2Fwc0Z1bmN0aW9uIGFjY2VwdGNhcHMpOwordm9pZAkJCWdzdF9wYWRfc2V0X2ZpeGF0ZWNhcHNfZnVuY3Rpb24JCShHc3RQYWQgKnBhZCwgR3N0UGFkRml4YXRlQ2Fwc0Z1bmN0aW9uIGZpeGF0ZWNhcHMpOworCitHc3RDYXBzKiAgICAgICAgICAgICAgICBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcwkJKEdzdFBhZCAqcGFkKTsKKworLyogY2Fwc25lZ28gZnVuY3Rpb24gZm9yIGxpbmtlZC91bmxpbmtlZCBwYWRzICovCitHc3RDYXBzICoJCWdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAgICAgICAgICAgICAgICAoR3N0UGFkICogcGFkKTsKK2dib29sZWFuCQlnc3RfcGFkX2hhc19jdXJyZW50X2NhcHMgICAgICAgICAgICAgICAgKEdzdFBhZCAqIHBhZCk7CitHc3RDYXBzICoJCWdzdF9wYWRfZ2V0X2NhcHMJCQkoR3N0UGFkICogcGFkLCBHc3RDYXBzICpmaWx0ZXIpOwordm9pZAkJCWdzdF9wYWRfZml4YXRlX2NhcHMJCQkoR3N0UGFkICogcGFkLCBHc3RDYXBzICpjYXBzKTsKK2dib29sZWFuCQlnc3RfcGFkX2FjY2VwdF9jYXBzCQkJKEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqY2Fwcyk7CitnYm9vbGVhbgkJZ3N0X3BhZF9zZXRfY2FwcwkJCShHc3RQYWQgKiBwYWQsIEdzdENhcHMgKmNhcHMpOworCitHc3RDYXBzICoJCWdzdF9wYWRfcGVlcl9nZXRfY2FwcwkJCShHc3RQYWQgKiBwYWQsIEdzdENhcHMgKmZpbHRlcik7CitnYm9vbGVhbgkJZ3N0X3BhZF9wZWVyX2FjY2VwdF9jYXBzCQkoR3N0UGFkICogcGFkLCBHc3RDYXBzICpjYXBzKTsKKworLyogY2Fwc25lZ28gZm9yIGxpbmtlZCBwYWRzICovCitHc3RDYXBzICoJCWdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwcwkJKEdzdFBhZCAqIHBhZCk7CisKKy8qIHBhZCBvZmZzZXRzICovCitnaW50NjQgICAgICAgICAgICAgICAgICBnc3RfcGFkX2dldF9vZmZzZXQgICAgICAgICAgICAgICAgICAgICAgKEdzdFBhZCAqcGFkKTsKK3ZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9wYWRfc2V0X29mZnNldCAgICAgICAgICAgICAgICAgICAgICAoR3N0UGFkICpwYWQsIGdpbnQ2NCBvZmZzZXQpOworCisvKiBkYXRhIHBhc3NpbmcgZnVuY3Rpb25zIHRvIHBlZXIgKi8KK0dzdEZsb3dSZXR1cm4JCWdzdF9wYWRfcHVzaAkJCQkoR3N0UGFkICpwYWQsIEdzdEJ1ZmZlciAqYnVmZmVyKTsKK0dzdEZsb3dSZXR1cm4JCWdzdF9wYWRfcHVzaF9saXN0CQkJKEdzdFBhZCAqcGFkLCBHc3RCdWZmZXJMaXN0ICpsaXN0KTsKK0dzdEZsb3dSZXR1cm4JCWdzdF9wYWRfcHVsbF9yYW5nZQkJCShHc3RQYWQgKnBhZCwgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50IHNpemUsCisJCQkJCQkJCSBHc3RCdWZmZXIgKipidWZmZXIpOworZ2Jvb2xlYW4JCWdzdF9wYWRfcHVzaF9ldmVudAkJCShHc3RQYWQgKnBhZCwgR3N0RXZlbnQgKmV2ZW50KTsKK2dib29sZWFuCQlnc3RfcGFkX2V2ZW50X2RlZmF1bHQJCQkoR3N0UGFkICpwYWQsIEdzdEV2ZW50ICpldmVudCk7CisKKy8qIGRhdGEgcGFzc2luZyBmdW5jdGlvbnMgb24gcGFkICovCitHc3RGbG93UmV0dXJuCQlnc3RfcGFkX2NoYWluCQkJCShHc3RQYWQgKnBhZCwgR3N0QnVmZmVyICpidWZmZXIpOworR3N0Rmxvd1JldHVybgkJZ3N0X3BhZF9jaGFpbl9saXN0ICAgICAgICAgICAgICAgICAgICAgIChHc3RQYWQgKnBhZCwgR3N0QnVmZmVyTGlzdCAqbGlzdCk7CitHc3RGbG93UmV0dXJuCQlnc3RfcGFkX2dldF9yYW5nZQkJCShHc3RQYWQgKnBhZCwgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50IHNpemUsCisJCQkJCQkJCSBHc3RCdWZmZXIgKipidWZmZXIpOworZ2Jvb2xlYW4JCWdzdF9wYWRfc2VuZF9ldmVudAkJCShHc3RQYWQgKnBhZCwgR3N0RXZlbnQgKmV2ZW50KTsKKworLyogcGFkIHRhc2tzICovCitnYm9vbGVhbgkJZ3N0X3BhZF9zdGFydF90YXNrCQkJKEdzdFBhZCAqcGFkLCBHc3RUYXNrRnVuY3Rpb24gZnVuYywKKwkJCQkJCQkJIGdwb2ludGVyIGRhdGEpOworZ2Jvb2xlYW4JCWdzdF9wYWRfcGF1c2VfdGFzawkJCShHc3RQYWQgKnBhZCk7CitnYm9vbGVhbgkJZ3N0X3BhZF9zdG9wX3Rhc2sJCQkoR3N0UGFkICpwYWQpOworCisvKiBpbnRlcm5hbCBsaW5rcyAqLwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X3BhZF9zZXRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19mdW5jdGlvbiAoR3N0UGFkICogcGFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uIGl0ZXJpbnRsaW5rKTsKK0dzdEl0ZXJhdG9yICogICAgICAgICAgIGdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rcyAgICAgICAgICAoR3N0UGFkICogcGFkKTsKK0dzdEl0ZXJhdG9yICogICAgICAgICAgIGdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19kZWZhdWx0ICAoR3N0UGFkICogcGFkKTsKKworCisvKiBnZW5lcmljIHF1ZXJ5IGZ1bmN0aW9uICovCit2b2lkCQkJZ3N0X3BhZF9zZXRfcXVlcnlfdHlwZV9mdW5jdGlvbgkJKEdzdFBhZCAqcGFkLCBHc3RQYWRRdWVyeVR5cGVGdW5jdGlvbiB0eXBlX2Z1bmMpOworY29uc3QgR3N0UXVlcnlUeXBlKglnc3RfcGFkX2dldF9xdWVyeV90eXBlcwkJCShHc3RQYWQgKnBhZCk7Citjb25zdCBHc3RRdWVyeVR5cGUqCWdzdF9wYWRfZ2V0X3F1ZXJ5X3R5cGVzX2RlZmF1bHQJCShHc3RQYWQgKnBhZCk7CisKK2dib29sZWFuCQlnc3RfcGFkX3F1ZXJ5CQkJCShHc3RQYWQgKnBhZCwgR3N0UXVlcnkgKnF1ZXJ5KTsKK2dib29sZWFuCQlnc3RfcGFkX3BlZXJfcXVlcnkJCQkoR3N0UGFkICpwYWQsIEdzdFF1ZXJ5ICpxdWVyeSk7Cit2b2lkCQkJZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24JCShHc3RQYWQgKnBhZCwgR3N0UGFkUXVlcnlGdW5jdGlvbiBxdWVyeSk7CitnYm9vbGVhbgkJZ3N0X3BhZF9xdWVyeV9kZWZhdWx0CQkJKEdzdFBhZCAqcGFkLCBHc3RRdWVyeSAqcXVlcnkpOworCisvKiBtaXNjIGhlbHBlciBmdW5jdGlvbnMgKi8KK2dib29sZWFuCQlnc3RfcGFkX2ZvcndhcmQgICAgICAgICAgICAgICAgICAgICAgICAgKEdzdFBhZCAqcGFkLCBHc3RQYWRGb3J3YXJkRnVuY3Rpb24gZm9yd2FyZCwKKwkJCQkJCQkJIGdwb2ludGVyIHVzZXJfZGF0YSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9QQURfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0cGFkdGVtcGxhdGUuYyBiL2dzdC9nc3RwYWR0ZW1wbGF0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmOGQ1NzYKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0cGFkdGVtcGxhdGUuYwpAQCAtMCwwICsxLDQ1NiBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgorICoKKyAqIGdzdHBhZHRlbXBsYXRlLmM6IFRlbXBsYXRlcyBmb3IgcGFkIGNyZWF0aW9uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoqCisgKiBTRUNUSU9OOmdzdHBhZHRlbXBsYXRlCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IERlc2NyaWJlIHRoZSBtZWRpYSB0eXBlIG9mIGEgcGFkLgorICogQHNlZV9hbHNvOiAjR3N0UGFkLCAjR3N0RWxlbWVudEZhY3RvcnkKKyAqCisgKiBQYWR0ZW1wbGF0ZXMgZGVzY3JpYmUgdGhlIHBvc3NpYmxlIG1lZGlhIHR5cGVzIGEgcGFkIG9yIGFuIGVsZW1lbnRmYWN0b3J5IGNhbgorICogaGFuZGxlLiBUaGlzIGFsbG93cyBmb3IgYm90aCBpbnNwZWN0aW9uIG9mIGhhbmRsZWQgdHlwZXMgYmVmb3JlIGxvYWRpbmcgdGhlCisgKiBlbGVtZW50IHBsdWdpbiBhcyB3ZWxsIGFzIGlkZW50aWZ5aW5nIHBhZHMgb24gZWxlbWVudHMgdGhhdCBhcmUgbm90IHlldAorICogY3JlYXRlZCAocmVxdWVzdCBvciBzb21ldGltZXMgcGFkcykuCisgKgorICogUGFkIGFuZCBQYWRUZW1wbGF0ZXMgaGF2ZSAjR3N0Q2FwcyBhdHRhY2hlZCB0byBpdCB0byBkZXNjcmliZSB0aGUgbWVkaWEgdHlwZQorICogdGhleSBhcmUgY2FwYWJsZSBvZiBkZWFsaW5nIHdpdGguIGdzdF9wYWRfdGVtcGxhdGVfZ2V0X2NhcHMoKSBvcgorICogR1NUX1BBRF9URU1QTEFURV9DQVBTKCkgYXJlIHVzZWQgdG8gZ2V0IHRoZSBjYXBzIG9mIGEgcGFkdGVtcGxhdGUuIEl0J3Mgbm90CisgKiBwb3NzaWJsZSB0byBtb2RpZnkgdGhlIGNhcHMgb2YgYSBwYWR0ZW1wbGF0ZSBhZnRlciBjcmVhdGlvbi4KKyAqCisgKiBQYWRUZW1wbGF0ZXMgaGF2ZSBhICNHc3RQYWRQcmVzZW5jZSBwcm9wZXJ0eSB3aGljaCBpZGVudGlmaWVzIHRoZSBsaWZldGltZQorICogb2YgdGhlIHBhZCBhbmQgdGhhdCBjYW4gYmUgcmV0cmlldmVkIHdpdGggR1NUX1BBRF9URU1QTEFURV9QUkVTRU5DRSgpLiBBbHNvCisgKiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBwYWQgY2FuIGJlIHJldHJpZXZlZCBmcm9tIHRoZSAjR3N0UGFkVGVtcGxhdGUgd2l0aAorICogR1NUX1BBRF9URU1QTEFURV9ESVJFQ1RJT04oKS4KKyAqCisgKiBUaGUgR1NUX1BBRF9URU1QTEFURV9OQU1FX1RFTVBMQVRFICgpIGlzIGltcG9ydGFudCBmb3IgR1NUX1BBRF9SRVFVRVNUIHBhZHMKKyAqIGJlY2F1c2UgaXQgaGFzIHRvIGJlIHVzZWQgYXMgdGhlIG5hbWUgaW4gdGhlIGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCgpCisgKiBjYWxsIHRvIGluc3RhbnRpYXRlIGEgcGFkIGZyb20gdGhpcyB0ZW1wbGF0ZS4KKyAqCisgKiBQYWR0ZW1wbGF0ZXMgY2FuIGJlIGNyZWF0ZWQgd2l0aCBnc3RfcGFkX3RlbXBsYXRlX25ldygpIG9yIHdpdGgKKyAqIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoKSwgd2hpY2ggY3JlYXRlcyBhICNHc3RQYWRUZW1wbGF0ZSBmcm9tIGEKKyAqICNHc3RTdGF0aWNQYWRUZW1wbGF0ZSB0aGF0IGNhbiBiZSBmaWxsZWQgd2l0aCB0aGUKKyAqIGNvbnZlbmllbnQgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUoKSBtYWNyby4KKyAqCisgKiBBIHBhZHRlbXBsYXRlIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIHBhZCAoc2VlIGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUoKQorICogb3IgZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCkpIG9yIHRvIGFkZCB0byBhbiBlbGVtZW50IGNsYXNzCisgKiAoc2VlIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKCkpLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgY29kZSBleGFtcGxlIHNob3dzIHRoZSBjb2RlIHRvIGNyZWF0ZSBhIHBhZCBmcm9tIGEgcGFkdGVtcGxhdGUuCisgKiA8ZXhhbXBsZT4KKyAqIDx0aXRsZT5DcmVhdGUgYSBwYWQgZnJvbSBhIHBhZHRlbXBsYXRlPC90aXRsZT4KKyAqICAgPHByb2dyYW1saXN0aW5nPgorICogICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBteV90ZW1wbGF0ZSA9CisgKiAgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgKKyAqICAgICAic2luayIsICAgICAgICAgIC8vIHRoZSBuYW1lIG9mIHRoZSBwYWQKKyAqICAgICBHU1RfUEFEX1NJTkssICAgIC8vIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHBhZAorICogICAgIEdTVF9QQURfQUxXQVlTLCAgLy8gd2hlbiB0aGlzIHBhZCB3aWxsIGJlIHByZXNlbnQKKyAqICAgICBHU1RfU1RBVElDX0NBUFMgKCAgICAgICAgLy8gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgcGFkdGVtcGxhdGUKKyAqICAgICAgICJhdWRpby94LXJhdy1pbnQsICIKKyAqICAgICAgICAgImNoYW5uZWxzID0gKGludCkgWyAxLCA2IF0iCisgKiAgICAgKQorICogICApOworICogICB2b2lkCisgKiAgIG15X21ldGhvZCAodm9pZCkKKyAqICAgeworICogICAgIEdzdFBhZCAqcGFkOworICogICAgIHBhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmYW1wO215X3RlbXBsYXRlLCAic2luayIpOworICogICAgIC4uLgorICogICB9CisgKiAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgKiA8L2V4YW1wbGU+CisgKgorICogVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIHlvdSBob3cgdG8gYWRkIHRoZSBwYWR0ZW1wbGF0ZSB0byBhbgorICogZWxlbWVudCBjbGFzcywgdGhpcyBpcyB1c3VhbGx5IGRvbmUgaW4gdGhlIGNsYXNzX2luaXQgb2YgdGhlIGNsYXNzOgorICogPGluZm9ybWFsZXhhbXBsZT4KKyAqICAgPHByb2dyYW1saXN0aW5nPgorICogICBzdGF0aWMgdm9pZAorICogICBteV9lbGVtZW50X2NsYXNzX2luaXQgKEdzdE15RWxlbWVudENsYXNzICprbGFzcykKKyAqICAgeworICogICAgIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7CisgKgorICogICAgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCisgKiAgICAgICAgIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoJmFtcDtteV90ZW1wbGF0ZSkpOworICogICB9CisgKiAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgKiA8L2luZm9ybWFsZXhhbXBsZT4KKyAqCisgKiBMYXN0IHJldmlld2VkIG9uIDIwMDYtMDItMTQgKDAuMTAuMykKKyAqLworCisjaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKKworI2luY2x1ZGUgImdzdHBhZC5oIgorI2luY2x1ZGUgImdzdHBhZHRlbXBsYXRlLmgiCisjaW5jbHVkZSAiZ3N0ZW51bXR5cGVzLmgiCisjaW5jbHVkZSAiZ3N0bWFyc2hhbC5oIgorI2luY2x1ZGUgImdzdHV0aWxzLmgiCisjaW5jbHVkZSAiZ3N0aW5mby5oIgorI2luY2x1ZGUgImdzdGVycm9yLmgiCisjaW5jbHVkZSAiZ3N0dmFsdWUuaCIKKworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgR1NUX0NBVF9QQURTCisKK2VudW0KK3sKKyAgUFJPUF9OQU1FX1RFTVBMQVRFID0gMSwKKyAgUFJPUF9ESVJFQ1RJT04sCisgIFBST1BfUFJFU0VOQ0UsCisgIFBST1BfQ0FQUworfTsKKworZW51bQoreworICBURU1QTF9QQURfQ1JFQVRFRCwKKyAgLyogRklMTCBNRSAqLworICBMQVNUX1NJR05BTAorfTsKKworc3RhdGljIEdzdE9iamVjdCAqcGFyZW50X2NsYXNzID0gTlVMTDsKK3N0YXRpYyBndWludCBnc3RfcGFkX3RlbXBsYXRlX3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07CisKK3N0YXRpYyB2b2lkIGdzdF9wYWRfdGVtcGxhdGVfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7CitzdGF0aWMgdm9pZCBnc3RfcGFkX3RlbXBsYXRlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKK3N0YXRpYyB2b2lkIGdzdF9wYWRfdGVtcGxhdGVfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOworCitHX0RFRklORV9UWVBFIChHc3RQYWRUZW1wbGF0ZSwgZ3N0X3BhZF90ZW1wbGF0ZSwgR1NUX1RZUEVfT0JKRUNUKTsKKworc3RhdGljIHZvaWQKK2dzdF9wYWRfdGVtcGxhdGVfY2xhc3NfaW5pdCAoR3N0UGFkVGVtcGxhdGVDbGFzcyAqIGtsYXNzKQoreworICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7CisgIEdzdE9iamVjdENsYXNzICpnc3RvYmplY3RfY2xhc3M7CisKKyAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7CisgIGdzdG9iamVjdF9jbGFzcyA9IChHc3RPYmplY3RDbGFzcyAqKSBrbGFzczsKKworICBwYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQgKGtsYXNzKTsKKworICAvKioKKyAgICogR3N0UGFkVGVtcGxhdGU6OnBhZC1jcmVhdGVkOgorICAgKiBAcGFkX3RlbXBsYXRlOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwuCisgICAqIEBwYWQ6IHRoZSBwYWQgdGhhdCB3YXMgY3JlYXRlZC4KKyAgICoKKyAgICogVGhpcyBzaWduYWwgaXMgZmlyZWQgd2hlbiBhbiBlbGVtZW50IGNyZWF0ZXMgYSBwYWQgZnJvbSB0aGlzIHRlbXBsYXRlLgorICAgKi8KKyAgZ3N0X3BhZF90ZW1wbGF0ZV9zaWduYWxzW1RFTVBMX1BBRF9DUkVBVEVEXSA9CisgICAgICBnX3NpZ25hbF9uZXcgKCJwYWQtY3JlYXRlZCIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgR19TVFJVQ1RfT0ZGU0VUIChHc3RQYWRUZW1wbGF0ZUNsYXNzLCBwYWRfY3JlYXRlZCksCisgICAgICBOVUxMLCBOVUxMLCBnc3RfbWFyc2hhbF9WT0lEX19PQkpFQ1QsIEdfVFlQRV9OT05FLCAxLCBHU1RfVFlQRV9QQUQpOworCisgIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnc3RfcGFkX3RlbXBsYXRlX2Rpc3Bvc2U7CisKKyAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3BhZF90ZW1wbGF0ZV9nZXRfcHJvcGVydHk7CisgIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9wYWRfdGVtcGxhdGVfc2V0X3Byb3BlcnR5OworCisgIC8qKgorICAgKiBHc3RQYWRUZW1wbGF0ZTpuYW1lLXRlbXBsYXRlCisgICAqCisgICAqIFRoZSBuYW1lIHRlbXBsYXRlIG9mIHRoZSBwYWQgdGVtcGxhdGUuCisgICAqCisgICAqIFNpbmNlOiAwLjEwLjIxCisgICAqLworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX05BTUVfVEVNUExBVEUsCisgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgibmFtZS10ZW1wbGF0ZSIsICJOYW1lIHRlbXBsYXRlIiwKKyAgICAgICAgICAiVGhlIG5hbWUgdGVtcGxhdGUgb2YgdGhlIHBhZCB0ZW1wbGF0ZSIsIE5VTEwsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworCisgIC8qKgorICAgKiBHc3RQYWRUZW1wbGF0ZTpkaXJlY3Rpb24KKyAgICoKKyAgICogVGhlIGRpcmVjdGlvbiBvZiB0aGUgcGFkIGRlc2NyaWJlZCBieSB0aGUgcGFkIHRlbXBsYXRlLgorICAgKgorICAgKiBTaW5jZTogMC4xMC4yMQorICAgKi8KKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9ESVJFQ1RJT04sCisgICAgICBnX3BhcmFtX3NwZWNfZW51bSAoImRpcmVjdGlvbiIsICJEaXJlY3Rpb24iLAorICAgICAgICAgICJUaGUgZGlyZWN0aW9uIG9mIHRoZSBwYWQgZGVzY3JpYmVkIGJ5IHRoZSBwYWQgdGVtcGxhdGUiLAorICAgICAgICAgIEdTVF9UWVBFX1BBRF9ESVJFQ1RJT04sIEdTVF9QQURfVU5LTk9XTiwKKyAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisKKyAgLyoqCisgICAqIEdzdFBhZFRlbXBsYXRlOnByZXNlbmNlCisgICAqCisgICAqIFdoZW4gdGhlIHBhZCBkZXNjcmliZWQgYnkgdGhlIHBhZCB0ZW1wbGF0ZSB3aWxsIGJlY29tZSBhdmFpbGFibGUuCisgICAqCisgICAqIFNpbmNlOiAwLjEwLjIxCisgICAqLworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1BSRVNFTkNFLAorICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJwcmVzZW5jZSIsICJQcmVzZW5jZSIsCisgICAgICAgICAgIldoZW4gdGhlIHBhZCBkZXNjcmliZWQgYnkgdGhlIHBhZCB0ZW1wbGF0ZSB3aWxsIGJlY29tZSBhdmFpbGFibGUiLAorICAgICAgICAgIEdTVF9UWVBFX1BBRF9QUkVTRU5DRSwgR1NUX1BBRF9BTFdBWVMsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworCisgIC8qKgorICAgKiBHc3RQYWRUZW1wbGF0ZTpjYXBzCisgICAqCisgICAqIFRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHBhZCBkZXNjcmliZWQgYnkgdGhlIHBhZCB0ZW1wbGF0ZS4KKyAgICoKKyAgICogU2luY2U6IDAuMTAuMjEKKyAgICovCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ0FQUywKKyAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCAoImNhcHMiLCAiQ2FwcyIsCisgICAgICAgICAgIlRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHBhZCBkZXNjcmliZWQgYnkgdGhlIHBhZCB0ZW1wbGF0ZSIsCisgICAgICAgICAgR1NUX1RZUEVfQ0FQUywKKyAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisKKyAgZ3N0b2JqZWN0X2NsYXNzLT5wYXRoX3N0cmluZ19zZXBhcmF0b3IgPSAiKiI7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfcGFkX3RlbXBsYXRlX2luaXQgKEdzdFBhZFRlbXBsYXRlICogdGVtcGwpCit7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfcGFkX3RlbXBsYXRlX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpCit7CisgIEdzdFBhZFRlbXBsYXRlICp0ZW1wbCA9IEdTVF9QQURfVEVNUExBVEUgKG9iamVjdCk7CisKKyAgZ19mcmVlIChHU1RfUEFEX1RFTVBMQVRFX05BTUVfVEVNUExBVEUgKHRlbXBsKSk7CisgIGlmIChHU1RfUEFEX1RFTVBMQVRFX0NBUFMgKHRlbXBsKSkgeworICAgIGdzdF9jYXBzX3VucmVmIChHU1RfUEFEX1RFTVBMQVRFX0NBUFMgKHRlbXBsKSk7CisgIH0KKworICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKK30KKworLyogQUxXQVlTIHBhZHRlbXBsYXRlcyBjYW5ub3QgaGF2ZSBjb252ZXJzaW9uIHNwZWNpZmljYXRpb25zIChsaWtlIHNyY18lZCksCisgKiBzaW5jZSBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UuCisgKiBTT01FVElNRVMgcGFkdGVtcGxhdGVzIGNhbiBkbyB3aGF0ZXZlciB0aGV5IHdhbnQsIHRoZXkgYXJlIHByb3ZpZGVkIGJ5IHRoZQorICogZWxlbWVudC4KKyAqIFJFUVVFU1QgcGFkdGVtcGxhdGVzIGNhbiBiZSByZXZlcnNlLXBhcnNlZCAodGhlIHVzZXIgYXNrcyBmb3IgJ3NpbmsxJywgdGhlCisgKiAnc2luayVkJyB0ZW1wbGF0ZSBpcyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkKSwgc28gd2UgbmVlZCB0byByZXN0cmljdCB0aGVpcgorICogbmFtaW5nLgorICovCitzdGF0aWMgZ2Jvb2xlYW4KK25hbWVfaXNfdmFsaWQgKGNvbnN0IGdjaGFyICogbmFtZSwgR3N0UGFkUHJlc2VuY2UgcHJlc2VuY2UpCit7CisgIGNvbnN0IGdjaGFyICpzdHI7CisKKyAgaWYgKHByZXNlbmNlID09IEdTVF9QQURfQUxXQVlTKSB7CisgICAgaWYgKHN0cmNociAobmFtZSwgJyUnKSkgeworICAgICAgZ193YXJuaW5nICgiaW52YWxpZCBuYW1lIHRlbXBsYXRlICVzOiBjb252ZXJzaW9uIHNwZWNpZmljYXRpb25zIGFyZSBub3QiCisgICAgICAgICAgIiBhbGxvd2VkIGZvciBHU1RfUEFEX0FMV0FZUyBwYWR0ZW1wbGF0ZXMiLCBuYW1lKTsKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgIH0gZWxzZSBpZiAocHJlc2VuY2UgPT0gR1NUX1BBRF9SRVFVRVNUKSB7CisgICAgaWYgKChzdHIgPSBzdHJjaHIgKG5hbWUsICclJykpICYmIHN0cmNociAoc3RyICsgMSwgJyUnKSkgeworICAgICAgZ193YXJuaW5nICgiaW52YWxpZCBuYW1lIHRlbXBsYXRlICVzOiBvbmx5IG9uZSBjb252ZXJzaW9uIHNwZWNpZmljYXRpb24iCisgICAgICAgICAgIiBhbGxvd2VkIGluIEdTVF9QQURfUkVRVUVTVCBwYWR0ZW1wbGF0ZSIsIG5hbWUpOworICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAoc3RyICYmICgqKHN0ciArIDEpICE9ICdzJyAmJiAqKHN0ciArIDEpICE9ICdkJyAmJiAqKHN0ciArIDEpICE9ICd1JykpIHsKKyAgICAgIGdfd2FybmluZyAoImludmFsaWQgbmFtZSB0ZW1wbGF0ZSAlczogY29udmVyc2lvbiBzcGVjaWZpY2F0aW9uIG11c3QgYmUgb2YiCisgICAgICAgICAgIiB0eXBlICclJWQnLCAnJSV1JyBvciAnJSVzJyBmb3IgR1NUX1BBRF9SRVFVRVNUIHBhZHRlbXBsYXRlIiwgbmFtZSk7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChzdHIgJiYgKCooc3RyICsgMikgIT0gJ1wwJykpIHsKKyAgICAgIGdfd2FybmluZyAoImludmFsaWQgbmFtZSB0ZW1wbGF0ZSAlczogY29udmVyc2lvbiBzcGVjaWZpY2F0aW9uIG11c3QiCisgICAgICAgICAgIiBhcHBlYXIgYXQgdGhlIGVuZCBvZiB0aGUgR1NUX1BBRF9SRVFVRVNUIHBhZHRlbXBsYXRlIG5hbWUiLCBuYW1lKTsKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgIH0KKworICByZXR1cm4gVFJVRTsKK30KKworR1R5cGUKK2dzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgR1R5cGUgc3RhdGljcGFkdGVtcGxhdGVfdHlwZSA9IDA7CisKKyAgaWYgKEdfVU5MSUtFTFkgKHN0YXRpY3BhZHRlbXBsYXRlX3R5cGUgPT0gMCkpIHsKKyAgICBzdGF0aWNwYWR0ZW1wbGF0ZV90eXBlID0KKyAgICAgICAgZ19wb2ludGVyX3R5cGVfcmVnaXN0ZXJfc3RhdGljICgiR3N0U3RhdGljUGFkVGVtcGxhdGUiKTsKKyAgfQorICByZXR1cm4gc3RhdGljcGFkdGVtcGxhdGVfdHlwZTsKK30KKworLyoqCisgKiBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQ6CisgKiBAcGFkX3RlbXBsYXRlOiB0aGUgc3RhdGljIHBhZCB0ZW1wbGF0ZQorICoKKyAqIENvbnZlcnRzIGEgI0dzdFN0YXRpY1BhZFRlbXBsYXRlIGludG8gYSAjR3N0UGFkVGVtcGxhdGUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0UGFkVGVtcGxhdGUuCisgKi8KKy8qIEZJWE1FMC4xMTogcmVuYW1lIHRvIGdzdF9wYWRfdGVtcGxhdGVfbmV3X2Zyb21fc3RhdGljX3BhZF90ZW1wbGF0ZSgpICovCitHc3RQYWRUZW1wbGF0ZSAqCitnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgKEdzdFN0YXRpY1BhZFRlbXBsYXRlICogcGFkX3RlbXBsYXRlKQoreworICBHc3RQYWRUZW1wbGF0ZSAqbmV3OworICBHc3RDYXBzICpjYXBzOworCisgIGlmICghbmFtZV9pc192YWxpZCAocGFkX3RlbXBsYXRlLT5uYW1lX3RlbXBsYXRlLCBwYWRfdGVtcGxhdGUtPnByZXNlbmNlKSkKKyAgICByZXR1cm4gTlVMTDsKKworICBjYXBzID0gZ3N0X3N0YXRpY19jYXBzX2dldCAoJnBhZF90ZW1wbGF0ZS0+c3RhdGljX2NhcHMpOworCisgIG5ldyA9IGdfb2JqZWN0X25ldyAoZ3N0X3BhZF90ZW1wbGF0ZV9nZXRfdHlwZSAoKSwKKyAgICAgICJuYW1lIiwgcGFkX3RlbXBsYXRlLT5uYW1lX3RlbXBsYXRlLAorICAgICAgIm5hbWUtdGVtcGxhdGUiLCBwYWRfdGVtcGxhdGUtPm5hbWVfdGVtcGxhdGUsCisgICAgICAiZGlyZWN0aW9uIiwgcGFkX3RlbXBsYXRlLT5kaXJlY3Rpb24sCisgICAgICAicHJlc2VuY2UiLCBwYWRfdGVtcGxhdGUtPnByZXNlbmNlLCAiY2FwcyIsIGNhcHMsIE5VTEwpOworCisgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKKworICByZXR1cm4gbmV3OworfQorCisvKioKKyAqIGdzdF9wYWRfdGVtcGxhdGVfbmV3OgorICogQG5hbWVfdGVtcGxhdGU6IHRoZSBuYW1lIHRlbXBsYXRlLgorICogQGRpcmVjdGlvbjogdGhlICNHc3RQYWREaXJlY3Rpb24gb2YgdGhlIHRlbXBsYXRlLgorICogQHByZXNlbmNlOiB0aGUgI0dzdFBhZFByZXNlbmNlIG9mIHRoZSBwYWQuCisgKiBAY2FwczogYSAjR3N0Q2FwcyBzZXQgZm9yIHRoZSB0ZW1wbGF0ZS4KKyAqCisgKiBDcmVhdGVzIGEgbmV3IHBhZCB0ZW1wbGF0ZSB3aXRoIGEgbmFtZSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIHRlbXBsYXRlCisgKiBhbmQgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdFBhZFRlbXBsYXRlLgorICovCitHc3RQYWRUZW1wbGF0ZSAqCitnc3RfcGFkX3RlbXBsYXRlX25ldyAoY29uc3QgZ2NoYXIgKiBuYW1lX3RlbXBsYXRlLAorICAgIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdFBhZFByZXNlbmNlIHByZXNlbmNlLCBHc3RDYXBzICogY2FwcykKK3sKKyAgR3N0UGFkVGVtcGxhdGUgKm5ldzsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAobmFtZV90ZW1wbGF0ZSAhPSBOVUxMLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGNhcHMgIT0gTlVMTCwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkaXJlY3Rpb24gPT0gR1NUX1BBRF9TUkMKKyAgICAgIHx8IGRpcmVjdGlvbiA9PSBHU1RfUEFEX1NJTkssIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAocHJlc2VuY2UgPT0gR1NUX1BBRF9BTFdBWVMKKyAgICAgIHx8IHByZXNlbmNlID09IEdTVF9QQURfU09NRVRJTUVTIHx8IHByZXNlbmNlID09IEdTVF9QQURfUkVRVUVTVCwgTlVMTCk7CisKKyAgaWYgKCFuYW1lX2lzX3ZhbGlkIChuYW1lX3RlbXBsYXRlLCBwcmVzZW5jZSkpIHsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIG5ldyA9IGdfb2JqZWN0X25ldyAoZ3N0X3BhZF90ZW1wbGF0ZV9nZXRfdHlwZSAoKSwKKyAgICAgICJuYW1lIiwgbmFtZV90ZW1wbGF0ZSwgIm5hbWUtdGVtcGxhdGUiLCBuYW1lX3RlbXBsYXRlLAorICAgICAgImRpcmVjdGlvbiIsIGRpcmVjdGlvbiwgInByZXNlbmNlIiwgcHJlc2VuY2UsICJjYXBzIiwgY2FwcywgTlVMTCk7CisKKyAgcmV0dXJuIG5ldzsKK30KKworLyoqCisgKiBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXRfY2FwczoKKyAqIEB0ZW1wbDogYSAjR3N0U3RhdGljUGFkVGVtcGxhdGUgdG8gZ2V0IGNhcGFiaWxpdGllcyBvZi4KKyAqCisgKiBHZXRzIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHN0YXRpYyBwYWQgdGVtcGxhdGUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdENhcHMgb2YgdGhlIHN0YXRpYyBwYWQgdGVtcGxhdGUuCisgKiBVbnJlZiBhZnRlciB1c2FnZS4gU2luY2UgdGhlIGNvcmUgaG9sZHMgYW4gYWRkaXRpb25hbAorICogcmVmIHRvIHRoZSByZXR1cm5lZCBjYXBzLCB1c2UgZ3N0X2NhcHNfbWFrZV93cml0YWJsZSgpCisgKiBvbiB0aGUgcmV0dXJuZWQgY2FwcyB0byBtb2RpZnkgaXQuCisgKi8KK0dzdENhcHMgKgorZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHMgKEdzdFN0YXRpY1BhZFRlbXBsYXRlICogdGVtcGwpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0ZW1wbCwgTlVMTCk7CisKKyAgcmV0dXJuIChHc3RDYXBzICopIGdzdF9zdGF0aWNfY2Fwc19nZXQgKCZ0ZW1wbC0+c3RhdGljX2NhcHMpOworfQorCisvKioKKyAqIGdzdF9wYWRfdGVtcGxhdGVfZ2V0X2NhcHM6CisgKiBAdGVtcGw6IGEgI0dzdFBhZFRlbXBsYXRlIHRvIGdldCBjYXBhYmlsaXRpZXMgb2YuCisgKgorICogR2V0cyB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBwYWQgdGVtcGxhdGUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdENhcHMgb2YgdGhlIHBhZCB0ZW1wbGF0ZS4KKyAqIFVucmVmIGFmdGVyIHVzYWdlLgorICovCitHc3RDYXBzICoKK2dzdF9wYWRfdGVtcGxhdGVfZ2V0X2NhcHMgKEdzdFBhZFRlbXBsYXRlICogdGVtcGwpCit7CisgIEdzdENhcHMgKmNhcHM7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEX1RFTVBMQVRFICh0ZW1wbCksIE5VTEwpOworCisgIGNhcHMgPSBHU1RfUEFEX1RFTVBMQVRFX0NBUFMgKHRlbXBsKTsKKworICByZXR1cm4gKGNhcHMgPyBnc3RfY2Fwc19yZWYgKGNhcHMpIDogTlVMTCk7Cit9CisKKy8qKgorICogZ3N0X3BhZF90ZW1wbGF0ZV9wYWRfY3JlYXRlZDoKKyAqIEB0ZW1wbDogYSAjR3N0UGFkVGVtcGxhdGUgdGhhdCBoYXMgYmVlbiBjcmVhdGVkCisgKiBAcGFkOiAgIHRoZSAjR3N0UGFkIHRoYXQgY3JlYXRlZCBpdAorICoKKyAqIEVtaXQgdGhlIHBhZC1jcmVhdGVkIHNpZ25hbCBmb3IgdGhpcyB0ZW1wbGF0ZSB3aGVuIGNyZWF0ZWQgYnkgdGhpcyBwYWQuCisgKi8KK3ZvaWQKK2dzdF9wYWRfdGVtcGxhdGVfcGFkX2NyZWF0ZWQgKEdzdFBhZFRlbXBsYXRlICogdGVtcGwsIEdzdFBhZCAqIHBhZCkKK3sKKyAgZ19zaWduYWxfZW1pdCAodGVtcGwsIGdzdF9wYWRfdGVtcGxhdGVfc2lnbmFsc1tURU1QTF9QQURfQ1JFQVRFRF0sIDAsIHBhZCk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfcGFkX3RlbXBsYXRlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQoreworICAvKiB0aGVzZSBwcm9wZXJ0aWVzIGFyZSBhbGwgY29uc3RydWN0LW9ubHkgKi8KKyAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX05BTUVfVEVNUExBVEU6CisgICAgICBHU1RfUEFEX1RFTVBMQVRFX05BTUVfVEVNUExBVEUgKG9iamVjdCkgPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbHVlKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ESVJFQ1RJT046CisgICAgICBHU1RfUEFEX1RFTVBMQVRFX0RJUkVDVElPTiAob2JqZWN0KSA9CisgICAgICAgICAgKEdzdFBhZERpcmVjdGlvbikgZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BSRVNFTkNFOgorICAgICAgR1NUX1BBRF9URU1QTEFURV9QUkVTRU5DRSAob2JqZWN0KSA9CisgICAgICAgICAgKEdzdFBhZFByZXNlbmNlKSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0FQUzoKKyAgICAgIEdTVF9QQURfVEVNUExBVEVfQ0FQUyAob2JqZWN0KSA9IGdfdmFsdWVfZHVwX2JveGVkICh2YWx1ZSk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfcGFkX3RlbXBsYXRlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsCisgICAgR1BhcmFtU3BlYyAqIHBzcGVjKQoreworICAvKiB0aGVzZSBwcm9wZXJ0aWVzIGFyZSBhbGwgY29uc3RydWN0LW9ubHkgKi8KKyAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX05BTUVfVEVNUExBVEU6CisgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBHU1RfUEFEX1RFTVBMQVRFX05BTUVfVEVNUExBVEUgKG9iamVjdCkpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RJUkVDVElPTjoKKyAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBHU1RfUEFEX1RFTVBMQVRFX0RJUkVDVElPTiAob2JqZWN0KSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUFJFU0VOQ0U6CisgICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgR1NUX1BBRF9URU1QTEFURV9QUkVTRU5DRSAob2JqZWN0KSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0FQUzoKKyAgICAgIGdfdmFsdWVfc2V0X2JveGVkICh2YWx1ZSwgR1NUX1BBRF9URU1QTEFURV9DQVBTIChvYmplY3QpKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KK30KZGlmZiAtLWdpdCBhL2dzdC9nc3RwYWR0ZW1wbGF0ZS5oIGIvZ3N0L2dzdHBhZHRlbXBsYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMyYmNlZQotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RwYWR0ZW1wbGF0ZS5oCkBAIC0wLDAgKzEsMTkyIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY2hlbGxvLmJlPgorICoKKyAqIGdzdHBhZHRlbXBsYXRlLmg6IEhlYWRlciBmb3IgR3N0UGFkVGVtcGxhdGUgb2JqZWN0CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworCisjaWZuZGVmIF9fR1NUX1BBRF9URU1QTEFURV9IX18KKyNkZWZpbmUgX19HU1RfUEFEX1RFTVBMQVRFX0hfXworCisjaW5jbHVkZSA8Z3N0L2dzdGNvbmZpZy5oPgorCit0eXBlZGVmIHN0cnVjdCBfR3N0UGFkVGVtcGxhdGUgR3N0UGFkVGVtcGxhdGU7Cit0eXBlZGVmIHN0cnVjdCBfR3N0UGFkVGVtcGxhdGVDbGFzcyBHc3RQYWRUZW1wbGF0ZUNsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX0dzdFN0YXRpY1BhZFRlbXBsYXRlIEdzdFN0YXRpY1BhZFRlbXBsYXRlOworCisjaW5jbHVkZSA8Z3N0L2dzdG9iamVjdC5oPgorI2luY2x1ZGUgPGdzdC9nc3RidWZmZXIuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Y2Fwcy5oPgorI2luY2x1ZGUgPGdzdC9nc3RldmVudC5oPgorI2luY2x1ZGUgPGdzdC9nc3RxdWVyeS5oPgorI2luY2x1ZGUgPGdzdC9nc3R0YXNrLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBHU1RfVFlQRV9TVEFUSUNfUEFEX1RFTVBMQVRFCShnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXRfdHlwZSAoKSkKKworI2RlZmluZSBHU1RfVFlQRV9QQURfVEVNUExBVEUJCShnc3RfcGFkX3RlbXBsYXRlX2dldF90eXBlICgpKQorI2RlZmluZSBHU1RfUEFEX1RFTVBMQVRFKG9iaikJCShHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX1BBRF9URU1QTEFURSxHc3RQYWRUZW1wbGF0ZSkpCisjZGVmaW5lIEdTVF9QQURfVEVNUExBVEVfQ0xBU1Moa2xhc3MpCShHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfUEFEX1RFTVBMQVRFLEdzdFBhZFRlbXBsYXRlQ2xhc3MpKQorI2RlZmluZSBHU1RfSVNfUEFEX1RFTVBMQVRFKG9iaikJKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfUEFEX1RFTVBMQVRFKSkKKyNkZWZpbmUgR1NUX0lTX1BBRF9URU1QTEFURV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9QQURfVEVNUExBVEUpKQorCisvKioKKyAqIEdzdFBhZFByZXNlbmNlOgorICogQEdTVF9QQURfQUxXQVlTOiB0aGUgcGFkIGlzIGFsd2F5cyBhdmFpbGFibGUKKyAqIEBHU1RfUEFEX1NPTUVUSU1FUzogdGhlIHBhZCB3aWxsIGJlY29tZSBhdmFpbGFibGUgZGVwZW5kaW5nIG9uIHRoZSBtZWRpYSBzdHJlYW0KKyAqIEBHU1RfUEFEX1JFUVVFU1Q6IHRoZSBwYWQgaXMgb25seSBhdmFpbGFibGUgb24gcmVxdWVzdCB3aXRoCisgKiAgZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkKCkuCisgKgorICogSW5kaWNhdGVzIHdoZW4gdGhpcyBwYWQgd2lsbCBiZWNvbWUgYXZhaWxhYmxlLgorICovCit0eXBlZGVmIGVudW0geworICBHU1RfUEFEX0FMV0FZUywKKyAgR1NUX1BBRF9TT01FVElNRVMsCisgIEdTVF9QQURfUkVRVUVTVAorfSBHc3RQYWRQcmVzZW5jZTsKKworLyoqCisgKiBHU1RfUEFEX1RFTVBMQVRFX05BTUVfVEVNUExBVEU6CisgKiBAdGVtcGw6IHRoZSB0ZW1wbGF0ZSB0byBxdWVyeQorICoKKyAqIEdldCB0aGUgbmFtZXRlbXBsYXRlIG9mIHRoZSBwYWR0ZW1wbGF0ZS4KKyAqLworI2RlZmluZSBHU1RfUEFEX1RFTVBMQVRFX05BTUVfVEVNUExBVEUodGVtcGwpCSgoKEdzdFBhZFRlbXBsYXRlICopKHRlbXBsKSktPm5hbWVfdGVtcGxhdGUpCisKKy8qKgorICogR1NUX1BBRF9URU1QTEFURV9ESVJFQ1RJT046CisgKiBAdGVtcGw6IHRoZSB0ZW1wbGF0ZSB0byBxdWVyeQorICoKKyAqIEdldCB0aGUgI0dzdFBhZERpcmVjdGlvbiBvZiB0aGUgcGFkdGVtcGxhdGUuCisgKi8KKyNkZWZpbmUgR1NUX1BBRF9URU1QTEFURV9ESVJFQ1RJT04odGVtcGwpCSgoKEdzdFBhZFRlbXBsYXRlICopKHRlbXBsKSktPmRpcmVjdGlvbikKKworLyoqCisgKiBHU1RfUEFEX1RFTVBMQVRFX1BSRVNFTkNFOgorICogQHRlbXBsOiB0aGUgdGVtcGxhdGUgdG8gcXVlcnkKKyAqCisgKiBHZXQgdGhlICNHc3RQYWRQcmVzZW5jZSBvZiB0aGUgcGFkdGVtcGxhdGUuCisgKi8KKyNkZWZpbmUgR1NUX1BBRF9URU1QTEFURV9QUkVTRU5DRSh0ZW1wbCkJKCgoR3N0UGFkVGVtcGxhdGUgKikodGVtcGwpKS0+cHJlc2VuY2UpCisKKy8qKgorICogR1NUX1BBRF9URU1QTEFURV9DQVBTOgorICogQHRlbXBsOiB0aGUgdGVtcGxhdGUgdG8gcXVlcnkKKyAqCisgKiBHZXQgYSBoYW5kbGUgdG8gdGhlIHBhZHRlbXBsYXRlICNHc3RDYXBzCisgKi8KKyNkZWZpbmUgR1NUX1BBRF9URU1QTEFURV9DQVBTKHRlbXBsKQkJKCgoR3N0UGFkVGVtcGxhdGUgKikodGVtcGwpKS0+Y2FwcykKKworLyoqCisgKiBHc3RQYWRUZW1wbGF0ZUZsYWdzOgorICogQEdTVF9QQURfVEVNUExBVEVfRkxBR19MQVNUOiBmaXJzdCBmbGFnIHRoYXQgY2FuIGJlIHVzZWQgYnkgc3ViY2xhc3Nlcy4KKyAqCisgKiBGbGFncyBmb3IgdGhlIHBhZHRlbXBsYXRlCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIC8qIHBhZGRpbmcgKi8KKyAgR1NUX1BBRF9URU1QTEFURV9GTEFHX0xBU1QgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgNCkKK30gR3N0UGFkVGVtcGxhdGVGbGFnczsKKworLyoqCisgKiBHU1RfUEFEX1RFTVBMQVRFX0lTX0ZJWEVEOgorICogQHRlbXBsOiB0aGUgdGVtcGxhdGUgdG8gcXVlcnkKKyAqCisgKiBDaGVjayBpZiB0aGUgcHJvcGVydGllcyBvZiB0aGUgcGFkdGVtcGxhdGUgYXJlIGZpeGVkCisgKi8KKyNkZWZpbmUgR1NUX1BBRF9URU1QTEFURV9JU19GSVhFRCh0ZW1wbCkJKEdTVF9PQkpFQ1RfRkxBR19JU19TRVQodGVtcGwsIEdTVF9QQURfVEVNUExBVEVfRklYRUQpKQorCisvKioKKyAqIEdzdFBhZFRlbXBsYXRlOgorICoKKyAqIFRoZSBwYWR0ZW1wbGF0ZSBvYmplY3QuCisgKi8KK3N0cnVjdCBfR3N0UGFkVGVtcGxhdGUgeworICBHc3RPYmplY3QJICAgb2JqZWN0OworCisgIGdjaGFyICAgICAgICAgICAqbmFtZV90ZW1wbGF0ZTsKKyAgR3N0UGFkRGlyZWN0aW9uICBkaXJlY3Rpb247CisgIEdzdFBhZFByZXNlbmNlICAgcHJlc2VuY2U7CisgIEdzdENhcHMJICAqY2FwczsKKworICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKK307CisKK3N0cnVjdCBfR3N0UGFkVGVtcGxhdGVDbGFzcyB7CisgIEdzdE9iamVjdENsYXNzICAgcGFyZW50X2NsYXNzOworCisgIC8qIHNpZ25hbCBjYWxsYmFja3MgKi8KKyAgdm9pZCAoKnBhZF9jcmVhdGVkKQkoR3N0UGFkVGVtcGxhdGUgKnRlbXBsLCBHc3RQYWQgKnBhZCk7CisKKyAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Cit9OworCisvKiogCisgKiBHc3RTdGF0aWNQYWRUZW1wbGF0ZToKKyAqIEBuYW1lX3RlbXBsYXRlOiB0aGUgbmFtZSBvZiB0aGUgdGVtcGxhdGUKKyAqIEBkaXJlY3Rpb246IHRoZSBkaXJlY3Rpb24gb2YgdGhlIHRlbXBsYXRlCisgKiBAcHJlc2VuY2U6IHRoZSBwcmVzZW5jZSBvZiB0aGUgdGVtcGxhdGUKKyAqIEBzdGF0aWNfY2FwczogdGhlIGNhcHMgb2YgdGhlIHRlbXBsYXRlLgorICoKKyAqIFN0cnVjdHVyZSBkZXNjcmliaW5nIHRoZSAjR3N0U3RhdGljUGFkVGVtcGxhdGUuCisgKi8KK3N0cnVjdCBfR3N0U3RhdGljUGFkVGVtcGxhdGUgeworICBjb25zdCBnY2hhciAgICAgKm5hbWVfdGVtcGxhdGU7CisgIEdzdFBhZERpcmVjdGlvbiAgZGlyZWN0aW9uOworICBHc3RQYWRQcmVzZW5jZSAgIHByZXNlbmNlOworICBHc3RTdGF0aWNDYXBzICAgIHN0YXRpY19jYXBzOworfTsKKworLyoqCisgKiBHU1RfU1RBVElDX1BBRF9URU1QTEFURToKKyAqIEBwYWRuYW1lOiB0aGUgbmFtZSB0ZW1wbGF0ZSBvZiB0aGUgcGFkCisgKiBAZGlyOiB0aGUgR3N0UGFkRGlyZWN0aW9uIG9mIHRoZSBwYWQKKyAqIEBwcmVzOiB0aGUgR3N0UGFkUHJlc2VuY2Ugb2YgdGhlIHBhZAorICogQGNhcHM6IHRoZSBHc3RTdGF0aWNDYXBzIG9mIHRoZSBwYWQKKyAqCisgKiBDb252ZW5pZW5jZSBtYWNybyB0byBmaWxsIHRoZSB2YWx1ZXMgb2YgYSBHc3RTdGF0aWNQYWRUZW1wbGF0ZQorICogc3RydWN0dXJlLgorICovCisjZGVmaW5lIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKHBhZG5hbWUsIGRpciwgcHJlcywgY2FwcykgXAoreyBcCisgIC8qIG5hbWVfdGVtcGxhdGUgKi8gICAgcGFkbmFtZSwgXAorICAvKiBkaXJlY3Rpb24gKi8gICAgICAgIGRpciwgXAorICAvKiBwcmVzZW5jZSAqLyAgICAgICAgIHByZXMsIFwKKyAgLyogY2FwcyAqLyAgICAgICAgICAgICBjYXBzIFwKK30KKworLyogdGVtcGxhdGVzIGFuZCBmYWN0b3JpZXMgKi8KK0dUeXBlCQkJZ3N0X3BhZF90ZW1wbGF0ZV9nZXRfdHlwZQkJKHZvaWQpOworR1R5cGUJCQlnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXRfdHlwZQkodm9pZCk7CisKK0dzdFBhZFRlbXBsYXRlKgkJZ3N0X3BhZF90ZW1wbGF0ZV9uZXcJCQkoY29uc3QgZ2NoYXIgKm5hbWVfdGVtcGxhdGUsCisJCQkJCQkJCSBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBHc3RQYWRQcmVzZW5jZSBwcmVzZW5jZSwKKwkJCQkJCQkJIEdzdENhcHMgKmNhcHMpOworCitHc3RQYWRUZW1wbGF0ZSAqCWdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAgICAgICAgICAgICAoR3N0U3RhdGljUGFkVGVtcGxhdGUgKnBhZF90ZW1wbGF0ZSk7CitHc3RDYXBzKgkJZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHMJKEdzdFN0YXRpY1BhZFRlbXBsYXRlICp0ZW1wbCk7CitHc3RDYXBzKgkJZ3N0X3BhZF90ZW1wbGF0ZV9nZXRfY2FwcwkJKEdzdFBhZFRlbXBsYXRlICp0ZW1wbCk7CisKK3ZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9wYWRfdGVtcGxhdGVfcGFkX2NyZWF0ZWQgICAgICAgICAgICAoR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCwgR3N0UGFkICogcGFkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fR1NUX1BBRF9URU1QTEFURV9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHBhcmFtc3BlY3MuYyBiL2dzdC9nc3RwYXJhbXNwZWNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc1YTk0NAotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RwYXJhbXNwZWNzLmMKQEAgLTAsMCArMSwyMDcgQEAKKy8qIEdTdHJlYW1lciAtIEdQYXJhbVNwZWNzIGZvciBzb21lIG9mIG91ciB0eXBlcworICogQ29weXJpZ2h0IChDKSAyMDA3IFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gY2VudHJpY3VsYXIgbmV0PgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisvKioKKyAqIFNFQ1RJT046Z3N0cGFyYW1zcGVjCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEdQYXJhbVNwZWMgaW1wbGVtZW50YXRpb25zIHNwZWNpZmljCisgKiB0byBHU3RyZWFtZXIKKyAqCisgKiBHUGFyYW1TcGVjIGltcGxlbWVudGF0aW9ucyBzcGVjaWZpYyB0byBHU3RyZWFtZXIuCisgKgorICogTGFzdCByZXZpZXdlZCBvbiAyMDA4LTAzLTExICgwLjEwLjE4KQorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCisjaW5jbHVkZSAiZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIgorI2luY2x1ZGUgImdzdHBhcmFtc3BlY3MuaCIKKworLyogLS0tIEdzdFBhcmFtU3BlY0ZyYWN0aW9uIC0tLSAqLworCitzdGF0aWMgdm9pZAorX2dzdF9wYXJhbV9mcmFjdGlvbl9pbml0IChHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIEdzdFBhcmFtU3BlY0ZyYWN0aW9uICpmc3BlYyA9IEdTVF9QQVJBTV9TUEVDX0ZSQUNUSU9OIChwc3BlYyk7CisKKyAgZnNwZWMtPm1pbl9udW0gPSAwOworICBmc3BlYy0+bWluX2RlbiA9IDE7CisgIGZzcGVjLT5tYXhfbnVtID0gR19NQVhJTlQ7CisgIGZzcGVjLT5tYXhfZGVuID0gMTsKKyAgZnNwZWMtPmRlZl9udW0gPSAxOworICBmc3BlYy0+ZGVmX2RlbiA9IDE7Cit9CisKK3N0YXRpYyB2b2lkCitfZ3N0X3BhcmFtX2ZyYWN0aW9uX3NldF9kZWZhdWx0IChHUGFyYW1TcGVjICogcHNwZWMsIEdWYWx1ZSAqIHZhbHVlKQoreworICB2YWx1ZS0+ZGF0YVswXS52X2ludCA9IEdTVF9QQVJBTV9TUEVDX0ZSQUNUSU9OIChwc3BlYyktPmRlZl9udW07CisgIHZhbHVlLT5kYXRhWzFdLnZfaW50ID0gR1NUX1BBUkFNX1NQRUNfRlJBQ1RJT04gKHBzcGVjKS0+ZGVmX2RlbjsKK30KKworc3RhdGljIGdib29sZWFuCitfZ3N0X3BhcmFtX2ZyYWN0aW9uX3ZhbGlkYXRlIChHUGFyYW1TcGVjICogcHNwZWMsIEdWYWx1ZSAqIHZhbHVlKQoreworICBHc3RQYXJhbVNwZWNGcmFjdGlvbiAqZnNwZWMgPSBHU1RfUEFSQU1fU1BFQ19GUkFDVElPTiAocHNwZWMpOworICBnYm9vbGVhbiB3aXRoaW5fcmFuZ2UgPSBGQUxTRTsKKyAgR1ZhbHVlIGZfdGhpcyA9IHsgMCwgfTsKKyAgR1ZhbHVlIGZfbWluID0geyAwLCB9OworICBHVmFsdWUgZl9tYXggPSB7IDAsIH07CisgIGdpbnQgcmVzOworCisgIGdfdmFsdWVfaW5pdCAoJmZfdGhpcywgR1NUX1RZUEVfRlJBQ1RJT04pOworICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmZl90aGlzLCB2YWx1ZS0+ZGF0YVswXS52X2ludCwgdmFsdWUtPmRhdGFbMV0udl9pbnQpOworCisgIGdfdmFsdWVfaW5pdCAoJmZfbWluLCBHU1RfVFlQRV9GUkFDVElPTik7CisgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZmX21pbiwgZnNwZWMtPm1pbl9udW0sIGZzcGVjLT5taW5fZGVuKTsKKworICBnX3ZhbHVlX2luaXQgKCZmX21heCwgR1NUX1RZUEVfRlJBQ1RJT04pOworICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmZl9tYXgsIGZzcGVjLT5tYXhfbnVtLCBmc3BlYy0+bWF4X2Rlbik7CisKKyAgcmVzID0gZ3N0X3ZhbHVlX2NvbXBhcmUgKCZmX21pbiwgJmZfdGhpcyk7CisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICBHU1RfTE9HICgiY29tcGFyaW5nICVkLyVkIHRvICVkLyVkLCByZXN1bHQgPSAlZCIsIGZzcGVjLT5taW5fbnVtLAorICAgICAgZnNwZWMtPm1pbl9kZW4sIHZhbHVlLT5kYXRhWzBdLnZfaW50LCB2YWx1ZS0+ZGF0YVsxXS52X2ludCwgcmVzKTsKKyNlbmRpZgorICBpZiAocmVzICE9IEdTVF9WQUxVRV9MRVNTX1RIQU4gJiYgcmVzICE9IEdTVF9WQUxVRV9FUVVBTCkKKyAgICBnb3RvIG91dDsKKworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKyAgR1NUX0xPRyAoImNvbXBhcmluZyAlZC8lZCB0byAlZC8lZCwgcmVzdWx0ID0gJWQiLCB2YWx1ZS0+ZGF0YVswXS52X2ludCwKKyAgICAgIHZhbHVlLT5kYXRhWzFdLnZfaW50LCBmc3BlYy0+bWF4X251bSwgZnNwZWMtPm1heF9kZW4sIHJlcyk7CisjZW5kaWYKKyAgcmVzID0gZ3N0X3ZhbHVlX2NvbXBhcmUgKCZmX3RoaXMsICZmX21heCk7CisgIGlmIChyZXMgIT0gR1NUX1ZBTFVFX0xFU1NfVEhBTiAmJiByZXMgIT0gR1NUX1ZBTFVFX0VRVUFMKQorICAgIGdvdG8gb3V0OworCisgIHdpdGhpbl9yYW5nZSA9IFRSVUU7CisKK291dDoKKworICBnX3ZhbHVlX3Vuc2V0ICgmZl9taW4pOworICBnX3ZhbHVlX3Vuc2V0ICgmZl9tYXgpOworICBnX3ZhbHVlX3Vuc2V0ICgmZl90aGlzKTsKKworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKyAgR1NUX0xPRyAoIiVzd2l0aGluIHJhbmdlIiwgKHdpdGhpbl9yYW5nZSkgPyAiIiA6ICJub3QgIik7CisjZW5kaWYKKworICAvKiByZXR1cm4gRkFMU0UgaWYgZXZlcnl0aGluZyBvaywgb3RoZXJ3aXNlIFRSVUUgKi8KKyAgcmV0dXJuICF3aXRoaW5fcmFuZ2U7Cit9CisKK3N0YXRpYyBnaW50CitfZ3N0X3BhcmFtX2ZyYWN0aW9uX3ZhbHVlc19jbXAgKEdQYXJhbVNwZWMgKiBwc3BlYywgY29uc3QgR1ZhbHVlICogdmFsdWUxLAorICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKK3sKKyAgZ2ludCByZXM7CisKKyAgcmVzID0gZ3N0X3ZhbHVlX2NvbXBhcmUgKHZhbHVlMSwgdmFsdWUyKTsKKworICBnX2Fzc2VydCAocmVzICE9IEdTVF9WQUxVRV9VTk9SREVSRUQpOworCisgIC8qIEdTVF9WQUxVRV9MRVNTX1RIQU4gaXMgLTEsIEVRVUFMIGlzIDAsIGFuZCBHUkVBVEVSX1RIQU4gaXMgMSAqLworICByZXR1cm4gcmVzOworfQorCitHVHlwZQorZ3N0X3BhcmFtX3NwZWNfZnJhY3Rpb25fZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBHVHlwZSB0eXBlOyAgICAgICAgICAgIC8qIDAgKi8KKworICAvKiByZWdpc3RlciBHU1RfVFlQRV9QQVJBTV9GUkFDVElPTiAqLworICBpZiAodHlwZSA9PSAwKSB7CisgICAgc3RhdGljIEdQYXJhbVNwZWNUeXBlSW5mbyBwc3BlY19pbmZvID0geworICAgICAgc2l6ZW9mIChHc3RQYXJhbVNwZWNGcmFjdGlvbiksICAgIC8qIGluc3RhbmNlX3NpemUgICAgICovCisgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5fcHJlYWxsb2NzICAgICAgICovCisgICAgICBfZ3N0X3BhcmFtX2ZyYWN0aW9uX2luaXQsIC8qIGluc3RhbmNlX2luaXQgICAgICovCisgICAgICBHX1RZUEVfSU5WQUxJRCwgICAgICAgICAgIC8qIHZhbHVlX3R5cGUgICAgICAgICovCisgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGZpbmFsaXplICAgICAgICAgICovCisgICAgICBfZ3N0X3BhcmFtX2ZyYWN0aW9uX3NldF9kZWZhdWx0LCAgLyogdmFsdWVfc2V0X2RlZmF1bHQgKi8KKyAgICAgIF9nc3RfcGFyYW1fZnJhY3Rpb25fdmFsaWRhdGUsICAgICAvKiB2YWx1ZV92YWxpZGF0ZSAgICAqLworICAgICAgX2dzdF9wYXJhbV9mcmFjdGlvbl92YWx1ZXNfY21wLCAgIC8qIHZhbHVlc19jbXAgICAgICAgICovCisgICAgfTsKKyAgICBwc3BlY19pbmZvLnZhbHVlX3R5cGUgPSBHU1RfVFlQRV9GUkFDVElPTjsKKyAgICB0eXBlID0gZ19wYXJhbV90eXBlX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFBhcmFtRnJhY3Rpb24iLCAmcHNwZWNfaW5mbyk7CisgIH0KKyAgcmV0dXJuIHR5cGU7Cit9CisKKy8qKgorICogZ3N0X3BhcmFtX3NwZWNfZnJhY3Rpb246CisgKiBAbmFtZTogY2Fub25pY2FsIG5hbWUgb2YgdGhlIHByb3BlcnR5IHNwZWNpZmllZAorICogQG5pY2s6IG5pY2sgbmFtZSBmb3IgdGhlIHByb3BlcnR5IHNwZWNpZmllZAorICogQGJsdXJiOiBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvcGVydHkgc3BlY2lmaWVkCisgKiBAbWluX251bTogbWluaW11bSB2YWx1ZSAoZnJhY3Rpb24gbnVtZXJhdG9yKQorICogQG1pbl9kZW5vbTogbWluaW11bSB2YWx1ZSAoZnJhY3Rpb24gZGVub21pbmF0b3IpCisgKiBAbWF4X251bTogbWF4aW11bSB2YWx1ZSAoZnJhY3Rpb24gbnVtZXJhdG9yKQorICogQG1heF9kZW5vbTogbWF4aW11bSB2YWx1ZSAoZnJhY3Rpb24gZGVub21pbmF0b3IpCisgKiBAZGVmYXVsdF9udW06IGRlZmF1bHQgdmFsdWUgKGZyYWN0aW9uIG51bWVyYXRvcikKKyAqIEBkZWZhdWx0X2Rlbm9tOiBkZWZhdWx0IHZhbHVlIChmcmFjdGlvbiBkZW5vbWluYXRvcikKKyAqIEBmbGFnczogZmxhZ3MgZm9yIHRoZSBwcm9wZXJ0eSBzcGVjaWZpZWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBmcmFjdGlvbiBHUGFyYW1TcGVjIGZvciB1c2UgYnkgb2JqZWN0cy9lbGVtZW50cworICogdGhhdCB3YW50IHRvIGV4cG9zZSBwcm9wZXJ0aWVzIG9mIGZyYWN0aW9uIHR5cGUuIFRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5CisgKiB1c2VkIGluIGNvbm5lY3Rpb24gd2l0aCBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KCkgaW4gYSBHT2JqZWN0cydzCisgKiBpbnN0YW5jZV9pbml0IGZ1bmN0aW9uLgorICoKKyAqIFJldHVybnM6IGEgbmV3bHkgY3JlYXRlZCBwYXJhbWV0ZXIgc3BlY2lmaWNhdGlvbgorICoKKyAqIFNpbmNlOiAwLjEwLjE0CisgKi8KK0dQYXJhbVNwZWMgKgorZ3N0X3BhcmFtX3NwZWNfZnJhY3Rpb24gKGNvbnN0IGdjaGFyICogbmFtZSwgY29uc3QgZ2NoYXIgKiBuaWNrLAorICAgIGNvbnN0IGdjaGFyICogYmx1cmIsIGdpbnQgbWluX251bSwgZ2ludCBtaW5fZGVub20sIGdpbnQgbWF4X251bSwKKyAgICBnaW50IG1heF9kZW5vbSwgZ2ludCBkZWZhdWx0X251bSwgZ2ludCBkZWZhdWx0X2Rlbm9tLCBHUGFyYW1GbGFncyBmbGFncykKK3sKKyAgR3N0UGFyYW1TcGVjRnJhY3Rpb24gKmZzcGVjOworICBHUGFyYW1TcGVjICpwc3BlYzsKKyAgR1ZhbHVlIGRlZmF1bHRfdmFsID0geyAwLCB9OworCisgIGZzcGVjID0KKyAgICAgIGdfcGFyYW1fc3BlY19pbnRlcm5hbCAoR1NUX1RZUEVfUEFSQU1fRlJBQ1RJT04sIG5hbWUsIG5pY2ssIGJsdXJiLCBmbGFncyk7CisKKyAgZnNwZWMtPm1pbl9udW0gPSBtaW5fbnVtOworICBmc3BlYy0+bWluX2RlbiA9IG1pbl9kZW5vbTsKKyAgZnNwZWMtPm1heF9udW0gPSBtYXhfbnVtOworICBmc3BlYy0+bWF4X2RlbiA9IG1heF9kZW5vbTsKKyAgZnNwZWMtPmRlZl9udW0gPSBkZWZhdWx0X251bTsKKyAgZnNwZWMtPmRlZl9kZW4gPSBkZWZhdWx0X2Rlbm9tOworCisgIHBzcGVjID0gR19QQVJBTV9TUEVDIChmc3BlYyk7CisKKyAgLyogY2hlY2sgdGhhdCBtaW4gPD0gZGVmYXVsdCA8PSBtYXggKi8KKyAgZ192YWx1ZV9pbml0ICgmZGVmYXVsdF92YWwsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJmRlZmF1bHRfdmFsLCBkZWZhdWx0X251bSwgZGVmYXVsdF9kZW5vbSk7CisgIC8qIHZhbGlkYXRlIHJldHVybnMgVFJVRSBpZiB0aGUgdmFsaWRhdGlvbiBmYWlscyAqLworICBpZiAoX2dzdF9wYXJhbV9mcmFjdGlvbl92YWxpZGF0ZSAocHNwZWMsICZkZWZhdWx0X3ZhbCkpIHsKKyAgICBnX2NyaXRpY2FsICgiR3N0UGFyYW1TcGVjIG9mIHR5cGUgJ2ZyYWN0aW9uJyBmb3IgcHJvcGVydHkgJyVzJyBoYXMgYSAiCisgICAgICAgICJkZWZhdWx0IHZhbHVlIG9mICVkLyVkLCB3aGljaCBpcyBub3Qgd2l0aGluIHRoZSBhbGxvd2VkIHJhbmdlIG9mICIKKyAgICAgICAgIiVkLyVkIHRvICVkLyVkIiwgbmFtZSwgZGVmYXVsdF9udW0sIGRlZmF1bHRfZGVub20sIG1pbl9udW0sCisgICAgICAgIG1pbl9kZW5vbSwgbWF4X251bSwgbWF4X2Rlbm9tKTsKKyAgICBnX3BhcmFtX3NwZWNfcmVmIChwc3BlYyk7CisgICAgZ19wYXJhbV9zcGVjX3NpbmsgKHBzcGVjKTsKKyAgICBnX3BhcmFtX3NwZWNfdW5yZWYgKHBzcGVjKTsKKyAgICBwc3BlYyA9IE5VTEw7CisgIH0KKyAgZ192YWx1ZV91bnNldCAoJmRlZmF1bHRfdmFsKTsKKworICByZXR1cm4gcHNwZWM7Cit9CmRpZmYgLS1naXQgYS9nc3QvZ3N0cGFyYW1zcGVjcy5oIGIvZ3N0L2dzdHBhcmFtc3BlY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmNkZjZmCi0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdHBhcmFtc3BlY3MuaApAQCAtMCwwICsxLDEyOCBAQAorLyogR1N0cmVhbWVyIC0gR1BhcmFtU3BlY3MgZm9yIHNvbWUgb2Ygb3VyIHR5cGVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBjZW50cmljdWxhciBuZXQ+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0dTVF9QQVJBTVNQRUNTX0hfXworI2RlZmluZSBfX0dTVF9QQVJBTVNQRUNTX0hfXworCisjaW5jbHVkZSA8Z3N0L2dzdHZhbHVlLmg+CisKK0dfQkVHSU5fREVDTFMKKworLyogLS0tIHBhcmFtc3BlYyBmbGFncyAqLworCisvKioKKyAqIEdTVF9QQVJBTV9DT05UUk9MTEFCTEU6CisgKgorICogVXNlIHRoaXMgZmxhZyBvbiBHT2JqZWN0IHByb3BlcnRpZXMgdG8gc2lnbmFsIHRoZXkgY2FuIG1ha2Ugc2Vuc2UgdG8gYmUuCisgKiBjb250cm9sbGVkIG92ZXIgdGltZS4gVGhpcyBoaW50IGlzIHVzZWQgYnkgdGhlIEdzdENvbnRyb2xsZXIuCisgKi8KKyNkZWZpbmUJR1NUX1BBUkFNX0NPTlRST0xMQUJMRQkoMSA8PCAoR19QQVJBTV9VU0VSX1NISUZUICsgMSkpCisKKy8qKgorICogR1NUX1BBUkFNX01VVEFCTEVfUkVBRFk6CisgKgorICogVXNlIHRoaXMgZmxhZyBvbiBHT2JqZWN0IHByb3BlcnRpZXMgb2YgR3N0RWxlbWVudHMgdG8gaW5kaWNhdGUgdGhhdAorICogdGhleSBjYW4gYmUgY2hhbmdlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGluIHRoZSBSRUFEWSBvciBsb3dlciBzdGF0ZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yMworICovCisjZGVmaW5lIEdTVF9QQVJBTV9NVVRBQkxFX1JFQURZICAoMSA8PCAoR19QQVJBTV9VU0VSX1NISUZUICsgMikpCisKKy8qKgorICogR1NUX1BBUkFNX01VVEFCTEVfUEFVU0VEOgorICoKKyAqIFVzZSB0aGlzIGZsYWcgb24gR09iamVjdCBwcm9wZXJ0aWVzIG9mIEdzdEVsZW1lbnRzIHRvIGluZGljYXRlIHRoYXQKKyAqIHRoZXkgY2FuIGJlIGNoYW5nZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBpbiB0aGUgUEFVU0VEIG9yIGxvd2VyIHN0YXRlLgorICogVGhpcyBmbGFnIGltcGxpZXMgR1NUX1BBUkFNX01VVEFCTEVfUkVBRFkuCisgKgorICogU2luY2U6IDAuMTAuMjMKKyAqLworI2RlZmluZSBHU1RfUEFSQU1fTVVUQUJMRV9QQVVTRUQgICgxIDw8IChHX1BBUkFNX1VTRVJfU0hJRlQgKyAzKSkKKworLyoqCisgKiBHU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HOgorICoKKyAqIFVzZSB0aGlzIGZsYWcgb24gR09iamVjdCBwcm9wZXJ0aWVzIG9mIEdzdEVsZW1lbnRzIHRvIGluZGljYXRlIHRoYXQKKyAqIHRoZXkgY2FuIGJlIGNoYW5nZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBpbiB0aGUgUExBWUlORyBvciBsb3dlciBzdGF0ZS4KKyAqIFRoaXMgZmxhZyBpbXBsaWVzIEdTVF9QQVJBTV9NVVRBQkxFX1BBVVNFRC4KKyAqCisgKiBTaW5jZTogMC4xMC4yMworICovCisjZGVmaW5lIEdTVF9QQVJBTV9NVVRBQkxFX1BMQVlJTkcgICgxIDw8IChHX1BBUkFNX1VTRVJfU0hJRlQgKyA0KSkKKworLyoqCisgKiBHU1RfUEFSQU1fVVNFUl9TSElGVDoKKyAqCisgKiBCaXRzIGJhc2VkIG9uIEdTVF9QQVJBTV9VU0VSX1NISUZUIGNhbiBiZSB1c2VkIGJ5IDNyZCBwYXJ0eSBhcHBsaWNhdGlvbnMuCisgKi8KKyNkZWZpbmUJR1NUX1BBUkFNX1VTRVJfU0hJRlQJKDEgPDwgKEdfUEFSQU1fVVNFUl9TSElGVCArIDgpKQorCisKKy8qIC0tLSB0eXBlIG1hY3JvcyAtLS0gKi8KKworI2RlZmluZSBHU1RfVFlQRV9QQVJBTV9GUkFDVElPTiAgICAgICAgICAgKGdzdF9wYXJhbV9zcGVjX2ZyYWN0aW9uX2dldF90eXBlICgpKQorI2RlZmluZSBHU1RfSVNfUEFSQU1fU1BFQ19GUkFDVElPTihwc3BlYykgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgocHNwZWMpLCBHU1RfVFlQRV9QQVJBTV9GUkFDVElPTikpCisjZGVmaW5lIEdTVF9QQVJBTV9TUEVDX0ZSQUNUSU9OKHBzcGVjKSAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChwc3BlYyksIEdTVF9UWVBFX1BBUkFNX0ZSQUNUSU9OLCBHc3RQYXJhbVNwZWNGcmFjdGlvbikpCisKKworLyogLS0tIGdldF90eXBlIGZ1bmN0aW9ucyAtLS0gKi8KKworR1R5cGUgIGdzdF9wYXJhbV9zcGVjX2ZyYWN0aW9uX2dldF90eXBlICh2b2lkKTsKKworCisvKiAtLS0gdHlwZWRlZnMgJiBzdHJ1Y3R1cmVzIC0tLSAqLworCit0eXBlZGVmIHN0cnVjdCBfR3N0UGFyYW1TcGVjRnJhY3Rpb24gR3N0UGFyYW1TcGVjRnJhY3Rpb247CisKKy8qKgorICogR3N0UGFyYW1TcGVjRnJhY3Rpb246CisgKiBAcGFyZW50X2luc3RhbmNlOiBzdXBlciBjbGFzcworICogQG1pbl9udW06IG1pbmltYWwgbnVtZXJhdG9yCisgKiBAbWluX2RlbjogbWluaW1hbCBkZW5vbWluYXRvcgorICogQG1heF9udW06IG1heGltYWwgbnVtZXJhdG9yCisgKiBAbWF4X2RlbjogbWF4aW1hbCBkZW5vbWluYXRvcgorICogQGRlZl9udW06IGRlZmF1bHQgbnVtZXJhdG9yCisgKiBAZGVmX2RlbjogZGVmYXVsdCBkZW5vbWluYXRvcgorICoKKyAqIEEgR1BhcmFtU3BlYyBkZXJpdmVkIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIHRoZSBtZXRhIGRhdGEgZm9yIGZyYWN0aW9uYWwKKyAqIHByb3BlcnRpZXMuCisgKi8KK3N0cnVjdCBfR3N0UGFyYW1TcGVjRnJhY3Rpb24geworICBHUGFyYW1TcGVjICAgIHBhcmVudF9pbnN0YW5jZTsKKyAgCisgIGdpbnQgICAgICAgICAgbWluX251bSwgbWluX2RlbjsKKyAgZ2ludCAgICAgICAgICBtYXhfbnVtLCBtYXhfZGVuOworICBnaW50ICAgICAgICAgIGRlZl9udW0sIGRlZl9kZW47Cit9OworCisKKy8qIC0tLSBHUGFyYW1TcGVjIHByb3RvdHlwZXMgLS0tICovCisKK0dQYXJhbVNwZWMgICogZ3N0X3BhcmFtX3NwZWNfZnJhY3Rpb24gKGNvbnN0IGdjaGFyICogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogbmljaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogYmx1cmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IG1pbl9udW0sIGdpbnQgbWluX2Rlbm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBtYXhfbnVtLCBnaW50IG1heF9kZW5vbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgZGVmYXVsdF9udW0sIGdpbnQgZGVmYXVsdF9kZW5vbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQYXJhbUZsYWdzIGZsYWdzKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fR1NUX1BBUkFNU1BFQ1NfSF9fICovCisKZGlmZiAtLWdpdCBhL2dzdC9nc3RwYXJzZS5jIGIvZ3N0L2dzdHBhcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYwZDc1OAotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RwYXJzZS5jCkBAIC0wLDAgKzEsMzYwIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwMiBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwOCBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgorICoKKyAqIGdzdHBhcnNlLmM6IGdldCBhIHBpcGVsaW5lIGZyb20gYSB0ZXh0IHBpcGVsaW5lIGRlc2NyaXB0aW9uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoqCisgKiBTRUNUSU9OOmdzdHBhcnNlCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEdldCBhIHBpcGVsaW5lIGZyb20gYSB0ZXh0IHBpcGVsaW5lIGRlc2NyaXB0aW9uCisgKgorICogVGhlc2UgZnVuY3Rpb24gYWxsb3cgdG8gY3JlYXRlIGEgcGlwZWxpbmUgYmFzZWQgb24gdGhlIHN5bnRheCB1c2VkIGluIHRoZQorICogZ3N0LWxhdW5jaCB1dGlsaXR5IChzZWUgbWFuLXBhZ2UgZm9yIHN5bnRheCBkb2N1bWVudGF0aW9uKS4KKyAqCisgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyB0YWtlIHNldmVyYWwgbWVhc3VyZXMgdG8gY3JlYXRlCisgKiBzb21ld2hhdCBkeW5hbWljIHBpcGVsaW5lcy4gRHVlIHRvIHRoYXQgc3VjaCBwaXBlbGluZXMgYXJlIG5vdCBhbHdheXMKKyAqIHJldXNhYmxlIChzZXQgdGhlIHN0YXRlIHRvIE5VTEwgYW5kIGJhY2sgdG8gUExBWUlORykuCisgKi8KKworI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJnc3RwYXJzZS5oIgorI2luY2x1ZGUgImdzdGVycm9yLmgiCisjaW5jbHVkZSAiZ3N0aW5mby5oIgorI2lmbmRlZiBHU1RfRElTQUJMRV9QQVJTRQorI2luY2x1ZGUgInBhcnNlL3R5cGVzLmgiCisjZW5kaWYKKworc3RhdGljIHZvaWQKK19wcmVwZW5kX21pc3NpbmdfZWxlbWVudCAoZ2NoYXIgKiBlbGVtZW50LCBHTGlzdCAqKiBsaXN0KQoreworICAqbGlzdCA9IGdfbGlzdF9wcmVwZW5kICgqbGlzdCwgZ19zdHJkdXAgKGVsZW1lbnQpKTsKK30KKworc3RhdGljIEdzdFBhcnNlQ29udGV4dCAqCitnc3RfcGFyc2VfY29udGV4dF9jb3B5IChjb25zdCBHc3RQYXJzZUNvbnRleHQgKiBjb250ZXh0KQoreworICBHc3RQYXJzZUNvbnRleHQgKnJldCA9IE5VTEw7CisjaWZuZGVmIEdTVF9ESVNBQkxFX1BBUlNFCisKKyAgcmV0ID0gZ3N0X3BhcnNlX2NvbnRleHRfbmV3ICgpOworICBpZiAoY29udGV4dCkgeworICAgIGdfbGlzdF9mb3JlYWNoIChjb250ZXh0LT5taXNzaW5nX2VsZW1lbnRzLCAoR0Z1bmMpIF9wcmVwZW5kX21pc3NpbmdfZWxlbWVudCwKKyAgICAgICAgJnJldC0+bWlzc2luZ19lbGVtZW50cyk7CisgICAgcmV0LT5taXNzaW5nX2VsZW1lbnRzID0gZ19saXN0X3JldmVyc2UgKHJldC0+bWlzc2luZ19lbGVtZW50cyk7CisgIH0KKyNlbmRpZgorICByZXR1cm4gcmV0OworfQorCitHVHlwZQorZ3N0X3BhcnNlX2NvbnRleHRfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBHVHlwZSB0eXBlID0gMDsKKworICBpZiAoR19VTkxJS0VMWSAodHlwZSA9PSAwKSkgeworICAgIHR5cGUgPSBnX2JveGVkX3R5cGVfcmVnaXN0ZXJfc3RhdGljICgiR3N0UGFyc2VDb250ZXh0IiwKKyAgICAgICAgKEdCb3hlZENvcHlGdW5jKSBnc3RfcGFyc2VfY29udGV4dF9jb3B5LAorICAgICAgICAoR0JveGVkRnJlZUZ1bmMpIGdzdF9wYXJzZV9jb250ZXh0X2ZyZWUpOworICB9CisKKyAgcmV0dXJuIHR5cGU7Cit9CisKKy8qKgorICogZ3N0X3BhcnNlX2Vycm9yX3F1YXJrOgorICoKKyAqIEdldCB0aGUgZXJyb3IgcXVhcmsgdXNlZCBieSB0aGUgcGFyc2luZyBzdWJzeXN0ZW0uCisgKgorICogUmV0dXJuczogdGhlIHF1YXJrIG9mIHRoZSBwYXJzZSBlcnJvcnMuCisgKi8KK0dRdWFyaworZ3N0X3BhcnNlX2Vycm9yX3F1YXJrICh2b2lkKQoreworICBzdGF0aWMgR1F1YXJrIHF1YXJrID0gMDsKKworICBpZiAoIXF1YXJrKQorICAgIHF1YXJrID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJnc3RfcGFyc2VfZXJyb3IiKTsKKyAgcmV0dXJuIHF1YXJrOworfQorCisKKy8qKgorICogZ3N0X3BhcnNlX2NvbnRleHRfbmV3OgorICoKKyAqIEFsbG9jYXRlcyBhIHBhcnNlIGNvbnRleHQgZm9yIHVzZSB3aXRoIGdzdF9wYXJzZV9sYXVuY2hfZnVsbCgpIG9yCisgKiBnc3RfcGFyc2VfbGF1bmNodl9mdWxsKCkuCisgKgorICogRnJlZS1mdW5jdGlvbjogZ3N0X3BhcnNlX2NvbnRleHRfZnJlZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXdseS1hbGxvY2F0ZWQgcGFyc2UgY29udGV4dC4gRnJlZSB3aXRoCisgKiAgICAgZ3N0X3BhcnNlX2NvbnRleHRfZnJlZSgpIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC4KKyAqCisgKiBTaW5jZTogMC4xMC4yMAorICovCitHc3RQYXJzZUNvbnRleHQgKgorZ3N0X3BhcnNlX2NvbnRleHRfbmV3ICh2b2lkKQoreworI2lmbmRlZiBHU1RfRElTQUJMRV9QQVJTRQorICBHc3RQYXJzZUNvbnRleHQgKmN0eDsKKworICBjdHggPSBnX3NsaWNlX25ldyAoR3N0UGFyc2VDb250ZXh0KTsKKyAgY3R4LT5taXNzaW5nX2VsZW1lbnRzID0gTlVMTDsKKworICByZXR1cm4gY3R4OworI2Vsc2UKKyAgcmV0dXJuIE5VTEw7CisjZW5kaWYKK30KKworLyoqCisgKiBnc3RfcGFyc2VfY29udGV4dF9mcmVlOgorICogQGNvbnRleHQ6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0UGFyc2VDb250ZXh0CisgKgorICogRnJlZXMgYSBwYXJzZSBjb250ZXh0IHByZXZpb3VzbHkgYWxsb2NhdGVkIHdpdGggZ3N0X3BhcnNlX2NvbnRleHRfbmV3KCkuCisgKgorICogU2luY2U6IDAuMTAuMjAKKyAqLwordm9pZAorZ3N0X3BhcnNlX2NvbnRleHRfZnJlZSAoR3N0UGFyc2VDb250ZXh0ICogY29udGV4dCkKK3sKKyNpZm5kZWYgR1NUX0RJU0FCTEVfUEFSU0UKKyAgaWYgKGNvbnRleHQpIHsKKyAgICBnX2xpc3RfZm9yZWFjaCAoY29udGV4dC0+bWlzc2luZ19lbGVtZW50cywgKEdGdW5jKSBnX2ZyZWUsIE5VTEwpOworICAgIGdfbGlzdF9mcmVlIChjb250ZXh0LT5taXNzaW5nX2VsZW1lbnRzKTsKKyAgICBnX3NsaWNlX2ZyZWUgKEdzdFBhcnNlQ29udGV4dCwgY29udGV4dCk7CisgIH0KKyNlbmRpZgorfQorCisvKioKKyAqIGdzdF9wYXJzZV9jb250ZXh0X2dldF9taXNzaW5nX2VsZW1lbnRzOgorICogQGNvbnRleHQ6IGEgI0dzdFBhcnNlQ29udGV4dAorICoKKyAqIFJldHJpZXZlIG1pc3NpbmcgZWxlbWVudHMgZnJvbSBhIHByZXZpb3VzIHJ1biBvZiBnc3RfcGFyc2VfbGF1bmNoX2Z1bGwoKQorICogb3IgZ3N0X3BhcnNlX2xhdW5jaHZfZnVsbCgpLiBXaWxsIG9ubHkgcmV0dXJuIHJlc3VsdHMgaWYgYW4gZXJyb3IgY29kZQorICogb2YgJUdTVF9QQVJTRV9FUlJPUl9OT19TVUNIX0VMRU1FTlQgd2FzIHJldHVybmVkLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpIChlbGVtZW50LXR5cGUgZ2NoYXIqKTogYQorICogICAgIE5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBlbGVtZW50IGZhY3RvcnkgbmFtZSBzdHJpbmdzIG9mIG1pc3NpbmcKKyAqICAgICBlbGVtZW50cy4gRnJlZSB3aXRoIGdfc3RyZnJlZXYoKSB3aGVuIG5vIGxvbmdlciBuZWVkZWQuCisgKgorICogU2luY2U6IDAuMTAuMjAKKyAqLworZ2NoYXIgKioKK2dzdF9wYXJzZV9jb250ZXh0X2dldF9taXNzaW5nX2VsZW1lbnRzIChHc3RQYXJzZUNvbnRleHQgKiBjb250ZXh0KQoreworI2lmbmRlZiBHU1RfRElTQUJMRV9QQVJTRQorICBnY2hhciAqKmFycjsKKyAgR0xpc3QgKmw7CisgIGd1aW50IGxlbiwgaTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoY29udGV4dCAhPSBOVUxMLCBOVUxMKTsKKworICBsZW4gPSBnX2xpc3RfbGVuZ3RoIChjb250ZXh0LT5taXNzaW5nX2VsZW1lbnRzKTsKKworICBpZiAoR19VTkxJS0VMWSAobGVuID09IDApKQorICAgIHJldHVybiBOVUxMOworCisgIGFyciA9IGdfbmV3IChnY2hhciAqLCBsZW4gKyAxKTsKKworICBmb3IgKGkgPSAwLCBsID0gY29udGV4dC0+bWlzc2luZ19lbGVtZW50czsgbCAhPSBOVUxMOyBsID0gbC0+bmV4dCwgKytpKQorICAgIGFycltpXSA9IGdfc3RyZHVwIChsLT5kYXRhKTsKKworICBhcnJbaV0gPSBOVUxMOworCisgIHJldHVybiBhcnI7CisjZWxzZQorICByZXR1cm4gTlVMTDsKKyNlbmRpZgorfQorCisjaWZuZGVmIEdTVF9ESVNBQkxFX1BBUlNFCitzdGF0aWMgZ2NoYXIgKgorX2dzdF9wYXJzZV9lc2NhcGUgKGNvbnN0IGdjaGFyICogc3RyKQoreworICBHU3RyaW5nICpnc3RyID0gTlVMTDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RyICE9IE5VTEwsIE5VTEwpOworCisgIGdzdHIgPSBnX3N0cmluZ19zaXplZF9uZXcgKHN0cmxlbiAoc3RyKSk7CisKKyAgd2hpbGUgKCpzdHIpIHsKKyAgICBpZiAoKnN0ciA9PSAnICcpCisgICAgICBnX3N0cmluZ19hcHBlbmRfYyAoZ3N0ciwgJ1xcJyk7CisgICAgZ19zdHJpbmdfYXBwZW5kX2MgKGdzdHIsICpzdHIpOworICAgIHN0cisrOworICB9CisKKyAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUgKGdzdHIsIEZBTFNFKTsKK30KKyNlbmRpZiAvKiAhR1NUX0RJU0FCTEVfUEFSU0UgKi8KKworLyoqCisgKiBnc3RfcGFyc2VfbGF1bmNodjoKKyAqIEBhcmd2OiAoaW4pIChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSk6IG51bGwtdGVybWluYXRlZCBhcnJheSBvZiBhcmd1bWVudHMKKyAqIEBlcnJvcjogcG9pbnRlciB0byBhICNHRXJyb3IKKyAqCisgKiBDcmVhdGUgYSBuZXcgZWxlbWVudCBiYXNlZCBvbiBjb21tYW5kIGxpbmUgc3ludGF4LgorICogQGVycm9yIHdpbGwgY29udGFpbiBhbiBlcnJvciBtZXNzYWdlIGlmIGFuIGVycm9uZXVvcyBwaXBlbGluZSBpcyBzcGVjaWZpZWQuCisgKiBBbiBlcnJvciBkb2VzIG5vdCBtZWFuIHRoYXQgdGhlIHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IGVsZW1lbnQgb24gc3VjY2VzcyBhbmQgJU5VTEwgb24gZmFpbHVyZS4KKyAqLworR3N0RWxlbWVudCAqCitnc3RfcGFyc2VfbGF1bmNodiAoY29uc3QgZ2NoYXIgKiogYXJndiwgR0Vycm9yICoqIGVycm9yKQoreworICByZXR1cm4gZ3N0X3BhcnNlX2xhdW5jaHZfZnVsbCAoYXJndiwgTlVMTCwgR1NUX1BBUlNFX0ZMQUdfTk9ORSwgZXJyb3IpOworfQorCisvKioKKyAqIGdzdF9wYXJzZV9sYXVuY2h2X2Z1bGw6CisgKiBAYXJndjogKGluKSAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpOiBudWxsLXRlcm1pbmF0ZWQgYXJyYXkgb2YgYXJndW1lbnRzCisgKiBAY29udGV4dDogKGFsbG93LW5vbmUpOiBhIHBhcnNlIGNvbnRleHQgYWxsb2NhdGVkIHdpdGgKKyAqICAgICBnc3RfcGFyc2VfY29udGV4dF9uZXcoKSwgb3IgJU5VTEwKKyAqIEBmbGFnczogcGFyc2luZyBvcHRpb25zLCBvciAjR1NUX1BBUlNFX0ZMQUdfTk9ORQorICogQGVycm9yOiBwb2ludGVyIHRvIGEgI0dFcnJvciAod2hpY2ggbXVzdCBiZSBpbml0aWFsaXNlZCB0byAlTlVMTCkKKyAqCisgKiBDcmVhdGUgYSBuZXcgZWxlbWVudCBiYXNlZCBvbiBjb21tYW5kIGxpbmUgc3ludGF4LgorICogQGVycm9yIHdpbGwgY29udGFpbiBhbiBlcnJvciBtZXNzYWdlIGlmIGFuIGVycm9uZW91cyBwaXBlbGluZSBpcyBzcGVjaWZpZWQuCisgKiBBbiBlcnJvciBkb2VzIG5vdCBtZWFuIHRoYXQgdGhlIHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IGVsZW1lbnQgb24gc3VjY2Vzczsgb24gZmFpbHVyZSwgZWl0aGVyICVOVUxMCisgKiAgIG9yIGEgcGFydGlhbGx5LWNvbnN0cnVjdGVkIGJpbiBvciBlbGVtZW50IHdpbGwgYmUgcmV0dXJuZWQgYW5kIEBlcnJvciB3aWxsCisgKiAgIGJlIHNldCAodW5sZXNzIHlvdSBwYXNzZWQgI0dTVF9QQVJTRV9GTEFHX0ZBVEFMX0VSUk9SUyBpbiBAZmxhZ3MsIHRoZW4KKyAqICAgJU5VTEwgd2lsbCBhbHdheXMgYmUgcmV0dXJuZWQgb24gZmFpbHVyZSkKKyAqCisgKiBTaW5jZTogMC4xMC4yMAorICovCitHc3RFbGVtZW50ICoKK2dzdF9wYXJzZV9sYXVuY2h2X2Z1bGwgKGNvbnN0IGdjaGFyICoqIGFyZ3YsIEdzdFBhcnNlQ29udGV4dCAqIGNvbnRleHQsCisgICAgR3N0UGFyc2VGbGFncyBmbGFncywgR0Vycm9yICoqIGVycm9yKQoreworI2lmbmRlZiBHU1RfRElTQUJMRV9QQVJTRQorICBHc3RFbGVtZW50ICplbGVtZW50OworICBHU3RyaW5nICpzdHI7CisgIGNvbnN0IGdjaGFyICoqYXJndnAsICphcmc7CisgIGdjaGFyICp0bXA7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGFyZ3YgIT0gTlVMTCwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlcnJvciA9PSBOVUxMIHx8ICplcnJvciA9PSBOVUxMLCBOVUxMKTsKKworICAvKiBsZXQncyBnaXZlIGl0IGEgbmljZSBzaXplLiAqLworICBzdHIgPSBnX3N0cmluZ19zaXplZF9uZXcgKDEwMjQpOworCisgIGFyZ3ZwID0gYXJndjsKKyAgd2hpbGUgKCphcmd2cCkgeworICAgIGFyZyA9ICphcmd2cDsKKyAgICB0bXAgPSBfZ3N0X3BhcnNlX2VzY2FwZSAoYXJnKTsKKyAgICBnX3N0cmluZ19hcHBlbmQgKHN0ciwgdG1wKTsKKyAgICBnX2ZyZWUgKHRtcCk7CisgICAgZ19zdHJpbmdfYXBwZW5kX2MgKHN0ciwgJyAnKTsKKyAgICBhcmd2cCsrOworICB9CisKKyAgZWxlbWVudCA9IGdzdF9wYXJzZV9sYXVuY2hfZnVsbCAoc3RyLT5zdHIsIGNvbnRleHQsIGZsYWdzLCBlcnJvcik7CisKKyAgZ19zdHJpbmdfZnJlZSAoc3RyLCBUUlVFKTsKKworICByZXR1cm4gZWxlbWVudDsKKyNlbHNlCisgIC8qIGdzdF9wYXJzZV9sYXVuY2hfZnVsbCgpIHdpbGwgc2V0IGEgR1NUX0NPUkVfRVJST1JfRElTQUJMRUQgZXJyb3IgZm9yIHVzICovCisgIHJldHVybiBnc3RfcGFyc2VfbGF1bmNoX2Z1bGwgKCIiLCBOVUxMLCAwLCBlcnJvcik7CisjZW5kaWYKK30KKworLyoqCisgKiBnc3RfcGFyc2VfbGF1bmNoOgorICogQHBpcGVsaW5lX2Rlc2NyaXB0aW9uOiB0aGUgY29tbWFuZCBsaW5lIGRlc2NyaWJpbmcgdGhlIHBpcGVsaW5lCisgKiBAZXJyb3I6IHRoZSBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgYW4gZXJyb25lb3VzIHBpcGVsaW5lLgorICoKKyAqIENyZWF0ZSBhIG5ldyBwaXBlbGluZSBiYXNlZCBvbiBjb21tYW5kIGxpbmUgc3ludGF4LgorICogUGxlYXNlIG5vdGUgdGhhdCB5b3UgbWlnaHQgZ2V0IGEgcmV0dXJuIHZhbHVlIHRoYXQgaXMgbm90ICVOVUxMIGV2ZW4gdGhvdWdoCisgKiB0aGUgQGVycm9yIGlzIHNldC4gSW4gdGhpcyBjYXNlIHRoZXJlIHdhcyBhIHJlY292ZXJhYmxlIHBhcnNpbmcgZXJyb3IgYW5kIHlvdQorICogY2FuIHRyeSB0byBwbGF5IHRoZSBwaXBlbGluZS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IGVsZW1lbnQgb24gc3VjY2VzcywgJU5VTEwgb24gZmFpbHVyZS4gSWYKKyAqICAgIG1vcmUgdGhhbiBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzcGVjaWZpZWQgYnkgdGhlIEBwaXBlbGluZV9kZXNjcmlwdGlvbiwKKyAqICAgYWxsIGVsZW1lbnRzIGFyZSBwdXQgaW50byBhICNHc3RQaXBlbGluZSwgd2hpY2ggdGhhbiBpcyByZXR1cm5lZC4KKyAqLworR3N0RWxlbWVudCAqCitnc3RfcGFyc2VfbGF1bmNoIChjb25zdCBnY2hhciAqIHBpcGVsaW5lX2Rlc2NyaXB0aW9uLCBHRXJyb3IgKiogZXJyb3IpCit7CisgIHJldHVybiBnc3RfcGFyc2VfbGF1bmNoX2Z1bGwgKHBpcGVsaW5lX2Rlc2NyaXB0aW9uLCBOVUxMLCBHU1RfUEFSU0VfRkxBR19OT05FLAorICAgICAgZXJyb3IpOworfQorCisvKioKKyAqIGdzdF9wYXJzZV9sYXVuY2hfZnVsbDoKKyAqIEBwaXBlbGluZV9kZXNjcmlwdGlvbjogdGhlIGNvbW1hbmQgbGluZSBkZXNjcmliaW5nIHRoZSBwaXBlbGluZQorICogQGNvbnRleHQ6IChhbGxvdy1ub25lKTogYSBwYXJzZSBjb250ZXh0IGFsbG9jYXRlZCB3aXRoCisgKiAgICAgIGdzdF9wYXJzZV9jb250ZXh0X25ldygpLCBvciAlTlVMTAorICogQGZsYWdzOiBwYXJzaW5nIG9wdGlvbnMsIG9yICNHU1RfUEFSU0VfRkxBR19OT05FCisgKiBAZXJyb3I6IHRoZSBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgYW4gZXJyb25lb3VzIHBpcGVsaW5lLgorICoKKyAqIENyZWF0ZSBhIG5ldyBwaXBlbGluZSBiYXNlZCBvbiBjb21tYW5kIGxpbmUgc3ludGF4LgorICogUGxlYXNlIG5vdGUgdGhhdCB5b3UgbWlnaHQgZ2V0IGEgcmV0dXJuIHZhbHVlIHRoYXQgaXMgbm90ICVOVUxMIGV2ZW4gdGhvdWdoCisgKiB0aGUgQGVycm9yIGlzIHNldC4gSW4gdGhpcyBjYXNlIHRoZXJlIHdhcyBhIHJlY292ZXJhYmxlIHBhcnNpbmcgZXJyb3IgYW5kIHlvdQorICogY2FuIHRyeSB0byBwbGF5IHRoZSBwaXBlbGluZS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IGVsZW1lbnQgb24gc3VjY2VzcywgJU5VTEwgb24gZmFpbHVyZS4gSWYKKyAqICAgIG1vcmUgdGhhbiBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzcGVjaWZpZWQgYnkgdGhlIEBwaXBlbGluZV9kZXNjcmlwdGlvbiwKKyAqICAgIGFsbCBlbGVtZW50cyBhcmUgcHV0IGludG8gYSAjR3N0UGlwZWxpbmUsIHdoaWNoIHRoZW4gaXMgcmV0dXJuZWQuCisgKgorICogU2luY2U6IDAuMTAuMjAKKyAqLworR3N0RWxlbWVudCAqCitnc3RfcGFyc2VfbGF1bmNoX2Z1bGwgKGNvbnN0IGdjaGFyICogcGlwZWxpbmVfZGVzY3JpcHRpb24sCisgICAgR3N0UGFyc2VDb250ZXh0ICogY29udGV4dCwgR3N0UGFyc2VGbGFncyBmbGFncywgR0Vycm9yICoqIGVycm9yKQoreworI2lmbmRlZiBHU1RfRElTQUJMRV9QQVJTRQorICBHc3RFbGVtZW50ICplbGVtZW50OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwaXBlbGluZV9kZXNjcmlwdGlvbiAhPSBOVUxMLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGVycm9yID09IE5VTEwgfHwgKmVycm9yID09IE5VTEwsIE5VTEwpOworCisgIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9QSVBFTElORSwgInBhcnNpbmcgcGlwZWxpbmUgZGVzY3JpcHRpb24gJyVzJyIsCisgICAgICBwaXBlbGluZV9kZXNjcmlwdGlvbik7CisKKyAgZWxlbWVudCA9IF9nc3RfcGFyc2VfbGF1bmNoIChwaXBlbGluZV9kZXNjcmlwdGlvbiwgZXJyb3IsIGNvbnRleHQsIGZsYWdzKTsKKworICAvKiBkb24ndCByZXR1cm4gcGFydGlhbGx5IGNvbnN0cnVjdGVkIHBpcGVsaW5lIGlmIEZBVEFMX0VSUk9SUyB3YXMgZ2l2ZW4gKi8KKyAgaWYgKEdfVU5MSUtFTFkgKGVycm9yICE9IE5VTEwgJiYgKmVycm9yICE9IE5VTEwgJiYgZWxlbWVudCAhPSBOVUxMKSkgeworICAgIGlmICgoZmxhZ3MgJiBHU1RfUEFSU0VfRkxBR19GQVRBTF9FUlJPUlMpKSB7CisgICAgICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtZW50KTsKKyAgICAgIGVsZW1lbnQgPSBOVUxMOworICAgIH0KKyAgfQorCisgIHJldHVybiBlbGVtZW50OworI2Vsc2UKKyAgZ2NoYXIgKm1zZzsKKworICBHU1RfV0FSTklORyAoIkRpc2FibGVkIEFQSSBjYWxsZWQiKTsKKworICBtc2cgPSBnc3RfZXJyb3JfZ2V0X21lc3NhZ2UgKEdTVF9DT1JFX0VSUk9SLCBHU1RfQ09SRV9FUlJPUl9ESVNBQkxFRCk7CisgIGdfc2V0X2Vycm9yIChlcnJvciwgR1NUX0NPUkVfRVJST1IsIEdTVF9DT1JFX0VSUk9SX0RJU0FCTEVELCAiJXMiLCBtc2cpOworICBnX2ZyZWUgKG1zZyk7CisKKyAgcmV0dXJuIE5VTEw7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2dzdC9nc3RwYXJzZS5oIGIvZ3N0L2dzdHBhcnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBmMjdiMwotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RwYXJzZS5oCkBAIC0wLDAgKzEsMTE5IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+CisgKgorICogZ3N0cGFyc2UuaDogZ2V0IGEgcGlwZWxpbmUgZnJvbSBhIHRleHQgcGlwZWxpbmUgZGVzY3JpcHRpb24KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fR1NUX1BBUlNFX0hfXworI2RlZmluZSBfX0dTVF9QQVJTRV9IX18KKworI2luY2x1ZGUgPGdzdC9nc3RlbGVtZW50Lmg+CisKK0dfQkVHSU5fREVDTFMKKworR1F1YXJrIGdzdF9wYXJzZV9lcnJvcl9xdWFyayAodm9pZCk7CisvKioKKyAqIEdTVF9QQVJTRV9FUlJPUjoKKyAqCisgKiBHZXQgYWNjZXNzIHRvIHRoZSBlcnJvciBxdWFyayBvZiB0aGUgcGFyc2Ugc3Vic3lzdGVtLgorICovCisjZGVmaW5lIEdTVF9QQVJTRV9FUlJPUiBnc3RfcGFyc2VfZXJyb3JfcXVhcmsgKCkKKworLyoqCisgKiBHc3RQYXJzZUVycm9yOgorICogQEdTVF9QQVJTRV9FUlJPUl9TWU5UQVg6IEEgc3ludGF4IGVycm9yIG9jY3VyZWQuCisgKiBAR1NUX1BBUlNFX0VSUk9SX05PX1NVQ0hfRUxFTUVOVDogVGhlIGRlc2NyaXB0aW9uIGNvbnRhaW5lZCBhbiB1bmtub3duIGVsZW1lbnQKKyAqIEBHU1RfUEFSU0VfRVJST1JfTk9fU1VDSF9QUk9QRVJUWTogQW4gZWxlbWVudCBkaWQgbm90IGhhdmUgYSBzcGVjaWZpZWQgcHJvcGVydHkKKyAqIEBHU1RfUEFSU0VfRVJST1JfTElOSzogVGhlcmUgd2FzIGFuIGVycm9yIGxpbmtpbmcgdHdvIHBhZHMuCisgKiBAR1NUX1BBUlNFX0VSUk9SX0NPVUxEX05PVF9TRVRfUFJPUEVSVFk6IFRoZXJlIHdhcyBhbiBlcnJvciBzZXR0aW5nIGEgcHJvcGVydHkKKyAqIEBHU1RfUEFSU0VfRVJST1JfRU1QVFlfQklOOiBBbiBlbXB0eSBiaW4gd2FzIHNwZWNpZmllZC4KKyAqIEBHU1RfUEFSU0VfRVJST1JfRU1QVFk6IEFuIGVtcHR5IGRlc2NyaXB0aW9uIHdhcyBzcGVjaWZpZWQKKyAqCisgKiBUaGUgZGlmZmVyZW50IHBhcnNpbmcgZXJyb3JzIHRoYXQgY2FuIG9jY3VyLgorICovCit0eXBlZGVmIGVudW0KK3sKKyAgR1NUX1BBUlNFX0VSUk9SX1NZTlRBWCwKKyAgR1NUX1BBUlNFX0VSUk9SX05PX1NVQ0hfRUxFTUVOVCwKKyAgR1NUX1BBUlNFX0VSUk9SX05PX1NVQ0hfUFJPUEVSVFksCisgIEdTVF9QQVJTRV9FUlJPUl9MSU5LLAorICBHU1RfUEFSU0VfRVJST1JfQ09VTERfTk9UX1NFVF9QUk9QRVJUWSwKKyAgR1NUX1BBUlNFX0VSUk9SX0VNUFRZX0JJTiwKKyAgR1NUX1BBUlNFX0VSUk9SX0VNUFRZCit9IEdzdFBhcnNlRXJyb3I7CisKKy8qKgorICogR3N0UGFyc2VGbGFnczoKKyAqIEBHU1RfUEFSU0VfRkxBR19OT05FOiBEbyBub3QgdXNlIGFueSBzcGVjaWFsIHBhcnNpbmcgb3B0aW9ucy4KKyAqIEBHU1RfUEFSU0VfRkxBR19GQVRBTF9FUlJPUlM6IEFsd2F5cyByZXR1cm4gTlVMTCB3aGVuIGFuIGVycm9yIG9jY3VycworICogICAgIChkZWZhdWx0IGJlaGF2aW91ciBpcyB0byByZXR1cm4gcGFydGlhbGx5IGNvbnN0cnVjdGVkIGJpbnMgb3IgZWxlbWVudHMKKyAqICAgICAgaW4gc29tZSBjYXNlcykKKyAqCisgKiBQYXJzaW5nIG9wdGlvbnMuCisgKgorICogU2luY2U6IDAuMTAuMjAKKyAqLwordHlwZWRlZiBlbnVtCit7CisgIEdTVF9QQVJTRV9GTEFHX05PTkUgPSAwLAorICBHU1RfUEFSU0VfRkxBR19GQVRBTF9FUlJPUlMgPSAoMSA8PCAwKQorfSBHc3RQYXJzZUZsYWdzOworCisjZGVmaW5lIEdTVF9UWVBFX1BBUlNFX0NPTlRFWFQgKGdzdF9wYXJzZV9jb250ZXh0X2dldF90eXBlKCkpCisKKy8qKgorICogR3N0UGFyc2VDb250ZXh0OgorICoKKyAqIE9wYXF1ZSBzdHJ1Y3R1cmUuCisgKgorICogU2luY2U6IDAuMTAuMjAKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX0dzdFBhcnNlQ29udGV4dCBHc3RQYXJzZUNvbnRleHQ7CisKKy8qIGNyZWF0ZSwgcHJvY2VzcyBhbmQgZnJlZSBhIHBhcnNlIGNvbnRleHQgKi8KKworR1R5cGUgICAgICAgICAgICAgZ3N0X3BhcnNlX2NvbnRleHRfZ2V0X3R5cGUgKHZvaWQpOworR3N0UGFyc2VDb250ZXh0ICogZ3N0X3BhcnNlX2NvbnRleHRfbmV3ICh2b2lkKTsKKworZ2NoYXIgICAgICAgICAgKiogZ3N0X3BhcnNlX2NvbnRleHRfZ2V0X21pc3NpbmdfZWxlbWVudHMgKEdzdFBhcnNlQ29udGV4dCAqIGNvbnRleHQpOworCit2b2lkICAgICAgICAgICAgICBnc3RfcGFyc2VfY29udGV4dF9mcmVlIChHc3RQYXJzZUNvbnRleHQgKiBjb250ZXh0KTsKKworCisvKiBwYXJzZSBmdW5jdGlvbnMgKi8KKworR3N0RWxlbWVudCAgICAgICogZ3N0X3BhcnNlX2xhdW5jaCAgICAgICAoY29uc3QgZ2NoYXIgICAgICAqIHBpcGVsaW5lX2Rlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICoqIGVycm9yKTsKKworR3N0RWxlbWVudCAgICAgICogZ3N0X3BhcnNlX2xhdW5jaHYgICAgICAoY29uc3QgZ2NoYXIgICAgICoqIGFyZ3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgKiogZXJyb3IpOworCitHc3RFbGVtZW50ICAgICAgKiBnc3RfcGFyc2VfbGF1bmNoX2Z1bGwgIChjb25zdCBnY2hhciAgICAgICogcGlwZWxpbmVfZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RQYXJzZUNvbnRleHQgICogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFBhcnNlRmxhZ3MgICAgICBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAqKiBlcnJvcik7CisKK0dzdEVsZW1lbnQgICAgICAqIGdzdF9wYXJzZV9sYXVuY2h2X2Z1bGwgKGNvbnN0IGdjaGFyICAgICAqKiBhcmd2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UGFyc2VDb250ZXh0ICAqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RQYXJzZUZsYWdzICAgICAgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgKiogZXJyb3IpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HU1RfUEFSU0VfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0cGlwZWxpbmUuYyBiL2dzdC9nc3RwaXBlbGluZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZmMwMjkKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0cGlwZWxpbmUuYwpAQCAtMCwwICsxLDg1NSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAgICAgIDIwMDQsMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgorICoKKyAqIGdzdHBpcGVsaW5lLmM6IE92ZXJhbGwgcGlwZWxpbmUgbWFuYWdlbWVudCBlbGVtZW50CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoqCisgKiBTRUNUSU9OOmdzdHBpcGVsaW5lCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IFRvcC1sZXZlbCBiaW4gd2l0aCBjbG9ja2luZyBhbmQgYnVzIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25hbGl0eS4KKyAqIEBzZWVfYWxzbzogI0dzdEVsZW1lbnQsICNHc3RCaW4sICNHc3RDbG9jaywgI0dzdEJ1cworICoKKyAqIEEgI0dzdFBpcGVsaW5lIGlzIGEgc3BlY2lhbCAjR3N0QmluIHVzZWQgYXMgdGhlIHRvcGxldmVsIGNvbnRhaW5lciBmb3IKKyAqIHRoZSBmaWx0ZXIgZ3JhcGguIFRoZSAjR3N0UGlwZWxpbmUgd2lsbCBtYW5hZ2UgdGhlIHNlbGVjdGlvbiBhbmQKKyAqIGRpc3RyaWJ1dGlvbiBvZiBhIGdsb2JhbCAjR3N0Q2xvY2sgYXMgd2VsbCBhcyBwcm92aWRlIGEgI0dzdEJ1cyB0byB0aGUKKyAqIGFwcGxpY2F0aW9uLiBJdCB3aWxsIGFsc28gaW1wbGVtZW50IGEgZGVmYXVsdCBiZWhhdmlvdXIgZm9yIG1hbmFnaW5nCisgKiBzZWVrIGV2ZW50cyAoc2VlIGdzdF9lbGVtZW50X3NlZWsoKSkuCisgKgorICogZ3N0X3BpcGVsaW5lX25ldygpIGlzIHVzZWQgdG8gY3JlYXRlIGEgcGlwZWxpbmUuIHdoZW4geW91IGFyZSBkb25lIHdpdGgKKyAqIHRoZSBwaXBlbGluZSwgdXNlIGdzdF9vYmplY3RfdW5yZWYoKSB0byBmcmVlIGl0cyByZXNvdXJjZXMgaW5jbHVkaW5nIGFsbAorICogYWRkZWQgI0dzdEVsZW1lbnQgb2JqZWN0cyAoaWYgbm90IG90aGVyd2lzZSByZWZlcmVuY2VkKS4KKyAqCisgKiBFbGVtZW50cyBhcmUgYWRkZWQgYW5kIHJlbW92ZWQgZnJvbSB0aGUgcGlwZWxpbmUgdXNpbmcgdGhlICNHc3RCaW4KKyAqIG1ldGhvZHMgbGlrZSBnc3RfYmluX2FkZCgpIGFuZCBnc3RfYmluX3JlbW92ZSgpIChzZWUgI0dzdEJpbikuCisgKgorICogQmVmb3JlIGNoYW5naW5nIHRoZSBzdGF0ZSBvZiB0aGUgI0dzdFBpcGVsaW5lIChzZWUgI0dzdEVsZW1lbnQpIGEgI0dzdEJ1cworICogY2FuIGJlIHJldHJpZXZlZCB3aXRoIGdzdF9waXBlbGluZV9nZXRfYnVzKCkuIFRoaXMgYnVzIGNhbiB0aGVuIGJlCisgKiB1c2VkIHRvIHJlY2VpdmUgI0dzdE1lc3NhZ2UgZnJvbSB0aGUgZWxlbWVudHMgaW4gdGhlIHBpcGVsaW5lLgorICoKKyAqIEJ5IGRlZmF1bHQsIGEgI0dzdFBpcGVsaW5lIHdpbGwgYXV0b21hdGljYWxseSBmbHVzaCB0aGUgcGVuZGluZyAjR3N0QnVzCisgKiBtZXNzYWdlcyB3aGVuIGdvaW5nIHRvIHRoZSBOVUxMIHN0YXRlIHRvIGVuc3VyZSB0aGF0IG5vIGNpcmN1bGFyCisgKiByZWZlcmVuY2VzIGV4aXN0IHdoZW4gbm8gbWVzc2FnZXMgYXJlIHJlYWQgZnJvbSB0aGUgI0dzdEJ1cy4gVGhpcworICogYmVoYXZpb3VyIGNhbiBiZSBjaGFuZ2VkIHdpdGggZ3N0X3BpcGVsaW5lX3NldF9hdXRvX2ZsdXNoX2J1cygpLgorICoKKyAqIFdoZW4gdGhlICNHc3RQaXBlbGluZSBwZXJmb3JtcyB0aGUgUEFVU0VEIHRvIFBMQVlJTkcgc3RhdGUgY2hhbmdlIGl0IHdpbGwKKyAqIHNlbGVjdCBhIGNsb2NrIGZvciB0aGUgZWxlbWVudHMuIFRoZSBjbG9jayBzZWxlY3Rpb24gYWxnb3JpdGhtIHdpbGwgYnkKKyAqIGRlZmF1bHQgc2VsZWN0IGEgY2xvY2sgcHJvdmlkZWQgYnkgYW4gZWxlbWVudCB0aGF0IGlzIG1vc3QgdXBzdHJlYW0KKyAqIChjbG9zZXN0IHRvIHRoZSBzb3VyY2UpLiBGb3IgbGl2ZSBwaXBlbGluZXMgKG9uZXMgdGhhdCByZXR1cm4KKyAqICNHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwgZnJvbSB0aGUgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKCkgY2FsbCkgdGhpcworICogd2lsbCBzZWxlY3QgdGhlIGNsb2NrIHByb3ZpZGVkIGJ5IHRoZSBsaXZlIHNvdXJjZS4gRm9yIG5vcm1hbCBwaXBlbGluZXMKKyAqIHRoaXMgd2lsbCBzZWxlY3QgYSBjbG9jayBwcm92aWRlZCBieSB0aGUgc2lua3MgKG1vc3QgbGlrZWx5IHRoZSBhdWRpbworICogc2luaykuIElmIG5vIGVsZW1lbnQgcHJvdmlkZXMgYSBjbG9jaywgYSBkZWZhdWx0ICNHc3RTeXN0ZW1DbG9jayBpcyB1c2VkLgorICoKKyAqIFRoZSBjbG9jayBzZWxlY3Rpb24gY2FuIGJlIGNvbnRyb2xsZWQgd2l0aCB0aGUgZ3N0X3BpcGVsaW5lX3VzZV9jbG9jaygpCisgKiBtZXRob2QsIHdoaWNoIHdpbGwgZW5mb3JjZSBhIGdpdmVuIGNsb2NrIG9uIHRoZSBwaXBlbGluZS4gV2l0aAorICogZ3N0X3BpcGVsaW5lX2F1dG9fY2xvY2soKSB0aGUgZGVmYXVsdCBjbG9jayBzZWxlY3Rpb24gYWxnb3JpdGhtIGNhbiBiZQorICogcmVzdG9yZWQuCisgKgorICogQSAjR3N0UGlwZWxpbmUgbWFpbnRhaW5zIGEgcnVubmluZyB0aW1lIGZvciB0aGUgZWxlbWVudHMuIFRoZSBydW5uaW5nCisgKiB0aW1lIGlzIGRlZmluZWQgYXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgY3VycmVudCBjbG9jayB0aW1lIGFuZAorICogdGhlIGJhc2UgdGltZS4gV2hlbiB0aGUgcGlwZWxpbmUgZ29lcyB0byBSRUFEWSBvciBhIGZsdXNoaW5nIHNlZWsgaXMKKyAqIHBlcmZvcm1lZCBvbiBpdCwgdGhlIHJ1bm5pbmcgdGltZSBpcyByZXNldCB0byAwLiBXaGVuIHRoZSBwaXBlbGluZSBpcworICogc2V0IGZyb20gUExBWUlORyB0byBQQVVTRUQsIHRoZSBjdXJyZW50IGNsb2NrIHRpbWUgaXMgc2FtcGxlZCBhbmQgdXNlZCB0bworICogY29uZmlndXJlIHRoZSBiYXNlIHRpbWUgZm9yIHRoZSBlbGVtZW50cyB3aGVuIHRoZSBwaXBlbGluZSBpcyBzZXQKKyAqIHRvIFBMQVlJTkcgYWdhaW4uIFRoZSBlZmZlY3QgaXMgdGhhdCB0aGUgcnVubmluZyB0aW1lIChhcyB0aGUgZGlmZmVyZW5jZQorICogYmV0d2VlbiB0aGUgY2xvY2sgdGltZSBhbmQgdGhlIGJhc2UgdGltZSkgd2lsbCBjb3VudCBob3cgbXVjaCB0aW1lIHdhcyBzcGVudAorICogaW4gdGhlIFBMQVlJTkcgc3RhdGUuIFRoaXMgZGVmYXVsdCBiZWhhdmlvdXIgY2FuIGJlIGNoYW5nZWQgd2l0aCB0aGUKKyAqIGdzdF9lbGVtZW50X3NldF9zdGFydF90aW1lKCkgbWV0aG9kLgorICoKKyAqIFdoZW4gc2VuZGluZyBhIGZsdXNoaW5nIHNlZWsgZXZlbnQgdG8gYSBHc3RQaXBlbGluZSAoc2VlCisgKiBnc3RfZWxlbWVudF9zZWVrKCkpLCBpdCB3aWxsIG1ha2Ugc3VyZSB0aGF0IHRoZSBwaXBlbGluZSBpcyBwcm9wZXJseQorICogUEFVU0VEIGFuZCByZXN1bWVkIGFzIHdlbGwgYXMgc2V0IHRoZSBuZXcgcnVubmluZyB0aW1lIHRvIDAgd2hlbiB0aGUKKyAqIHNlZWsgc3VjY2VlZGVkLgorICoKKyAqIExhc3QgcmV2aWV3ZWQgb24gMjAwOS0wNS0yOSAoMC4xMC4yNCkKKyAqLworCisjaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJnc3RlcnJvci5oIgorI2luY2x1ZGUgImdzdC1pMThuLWxpYi5oIgorCisjaW5jbHVkZSAiZ3N0cGlwZWxpbmUuaCIKKyNpbmNsdWRlICJnc3RpbmZvLmgiCisjaW5jbHVkZSAiZ3N0c3lzdGVtY2xvY2suaCIKKyNpbmNsdWRlICJnc3R1dGlscy5oIgorCitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChwaXBlbGluZV9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBwaXBlbGluZV9kZWJ1ZworCisvKiBQaXBlbGluZSBzaWduYWxzIGFuZCBhcmdzICovCitlbnVtCit7CisgIC8qIEZJTEwgTUUgKi8KKyAgTEFTVF9TSUdOQUwKK307CisKKyNkZWZpbmUgREVGQVVMVF9ERUxBWSAgICAgICAgICAgMAorI2RlZmluZSBERUZBVUxUX0FVVE9fRkxVU0hfQlVTICBUUlVFCisKK2VudW0KK3sKKyAgUFJPUF8wLAorICBQUk9QX0RFTEFZLAorICBQUk9QX0FVVE9fRkxVU0hfQlVTCit9OworCisjZGVmaW5lIEdTVF9QSVBFTElORV9HRVRfUFJJVkFURShvYmopICBcCisgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgob2JqKSwgR1NUX1RZUEVfUElQRUxJTkUsIEdzdFBpcGVsaW5lUHJpdmF0ZSkpCisKK3N0cnVjdCBfR3N0UGlwZWxpbmVQcml2YXRlCit7CisgIC8qIHdpdGggTE9DSyAqLworICBnYm9vbGVhbiBhdXRvX2ZsdXNoX2J1czsKKworICAvKiB3aGVuIHdlIG5lZWQgdG8gdXBkYXRlIHN0cmVhbV90aW1lIG9yIGNsb2NrIHdoZW4gZ29pbmcgYmFjayB0bworICAgKiBQTEFZSU5HKi8KKyAgR3N0Q2xvY2tUaW1lIGxhc3Rfc3RhcnRfdGltZTsKKyAgZ2Jvb2xlYW4gdXBkYXRlX2Nsb2NrOworfTsKKworCitzdGF0aWMgdm9pZCBnc3RfcGlwZWxpbmVfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7CitzdGF0aWMgdm9pZCBnc3RfcGlwZWxpbmVfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOworc3RhdGljIHZvaWQgZ3N0X3BpcGVsaW5lX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKKworc3RhdGljIEdzdENsb2NrICpnc3RfcGlwZWxpbmVfcHJvdmlkZV9jbG9ja19mdW5jIChHc3RFbGVtZW50ICogZWxlbWVudCk7CitzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3BpcGVsaW5lX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCisgICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7CisKK3N0YXRpYyB2b2lkIGdzdF9waXBlbGluZV9oYW5kbGVfbWVzc2FnZSAoR3N0QmluICogYmluLCBHc3RNZXNzYWdlICogbWVzc2FnZSk7CisKKy8qIHN0YXRpYyBndWludCBnc3RfcGlwZWxpbmVfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsgKi8KKworI2RlZmluZSBfZG9faW5pdCBcCit7IFwKKyAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHBpcGVsaW5lX2RlYnVnLCAicGlwZWxpbmUiLCBHU1RfREVCVUdfQk9MRCwgXAorICAgICAgImRlYnVnZ2luZyBpbmZvIGZvciB0aGUgJ3BpcGVsaW5lJyBjb250YWluZXIgZWxlbWVudCIpOyBcCit9CisKKyNkZWZpbmUgZ3N0X3BpcGVsaW5lX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RQaXBlbGluZSwgZ3N0X3BpcGVsaW5lLCBHU1RfVFlQRV9CSU4sIF9kb19pbml0KTsKKworc3RhdGljIHZvaWQKK2dzdF9waXBlbGluZV9jbGFzc19pbml0IChHc3RQaXBlbGluZUNsYXNzICoga2xhc3MpCit7CisgIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7CisgIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7CisgIEdzdEJpbkNsYXNzICpnc3RiaW5fY2xhc3MgPSBHU1RfQklOX0NMQVNTIChrbGFzcyk7CisKKyAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChrbGFzcywgc2l6ZW9mIChHc3RQaXBlbGluZVByaXZhdGUpKTsKKworICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfcGlwZWxpbmVfc2V0X3Byb3BlcnR5OworICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfcGlwZWxpbmVfZ2V0X3Byb3BlcnR5OworCisgIC8qKgorICAgKiBHc3RQaXBlbGluZTpkZWxheQorICAgKgorICAgKiBUaGUgZXhwZWN0ZWQgZGVsYXkgbmVlZGVkIGZvciBlbGVtZW50cyB0byBzcGluIHVwIHRvIHRoZQorICAgKiBQTEFZSU5HIHN0YXRlIGV4cHJlc3NlZCBpbiBuYW5vc2Vjb25kcy4KKyAgICogc2VlIGdzdF9waXBlbGluZV9zZXRfZGVsYXkoKSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIG9wdGlvbi4KKyAgICoKKyAgICogU2luY2U6IDAuMTAuNQorICAgKiovCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfREVMQVksCisgICAgICBnX3BhcmFtX3NwZWNfdWludDY0ICgiZGVsYXkiLCAiRGVsYXkiLAorICAgICAgICAgICJFeHBlY3RlZCBkZWxheSBuZWVkZWQgZm9yIGVsZW1lbnRzICIKKyAgICAgICAgICAidG8gc3BpbiB1cCB0byBQTEFZSU5HIGluIG5hbm9zZWNvbmRzIiwgMCwgR19NQVhVSU5UNjQsIERFRkFVTFRfREVMQVksCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisKKyAgLyoqCisgICAqIEdzdFBpcGVsaW5lOmF1dG8tZmx1c2gtYnVzOgorICAgKgorICAgKiBXaGV0aGVyIG9yIG5vdCB0byBhdXRvbWF0aWNhbGx5IGZsdXNoIGFsbCBtZXNzYWdlcyBvbiB0aGUKKyAgICogcGlwZWxpbmUncyBidXMgd2hlbiBnb2luZyBmcm9tIFJFQURZIHRvIE5VTEwgc3RhdGUuIFBsZWFzZSBzZWUKKyAgICogZ3N0X3BpcGVsaW5lX3NldF9hdXRvX2ZsdXNoX2J1cygpIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgb3B0aW9uLgorICAgKgorICAgKiBTaW5jZTogMC4xMC40CisgICAqKi8KKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9BVVRPX0ZMVVNIX0JVUywKKyAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiYXV0by1mbHVzaC1idXMiLCAiQXV0byBGbHVzaCBCdXMiLAorICAgICAgICAgICJXaGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgZmx1c2ggdGhlIHBpcGVsaW5lJ3MgYnVzIHdoZW4gZ29pbmcgIgorICAgICAgICAgICJmcm9tIFJFQURZIGludG8gTlVMTCBzdGF0ZSIsIERFRkFVTFRfQVVUT19GTFVTSF9CVVMsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisKKyAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF9waXBlbGluZV9kaXNwb3NlOworCisgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIlBpcGVsaW5lIG9iamVjdCIsCisgICAgICAiR2VuZXJpYy9CaW4iLAorICAgICAgIkNvbXBsZXRlIHBpcGVsaW5lIG9iamVjdCIsCisgICAgICAiRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4sIFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Iik7CisKKyAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0KKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcGlwZWxpbmVfY2hhbmdlX3N0YXRlKTsKKyAgZ3N0ZWxlbWVudF9jbGFzcy0+cHJvdmlkZV9jbG9jayA9CisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3BpcGVsaW5lX3Byb3ZpZGVfY2xvY2tfZnVuYyk7CisgIGdzdGJpbl9jbGFzcy0+aGFuZGxlX21lc3NhZ2UgPQorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9waXBlbGluZV9oYW5kbGVfbWVzc2FnZSk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfcGlwZWxpbmVfaW5pdCAoR3N0UGlwZWxpbmUgKiBwaXBlbGluZSkKK3sKKyAgR3N0QnVzICpidXM7CisKKyAgcGlwZWxpbmUtPnByaXYgPSBHU1RfUElQRUxJTkVfR0VUX1BSSVZBVEUgKHBpcGVsaW5lKTsKKworICAvKiBzZXQgZGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgKi8KKyAgcGlwZWxpbmUtPnByaXYtPmF1dG9fZmx1c2hfYnVzID0gREVGQVVMVF9BVVRPX0ZMVVNIX0JVUzsKKyAgcGlwZWxpbmUtPmRlbGF5ID0gREVGQVVMVF9ERUxBWTsKKworICAvKiBjcmVhdGUgYW5kIHNldCBhIGRlZmF1bHQgYnVzICovCisgIGJ1cyA9IGdzdF9idXNfbmV3ICgpOworI2lmIDAKKyAgLyogRklYTUUsIGRpc2FibGVkIGZvciAwLjEwLjUgcmVsZWFzZSBhcyBpdCBjYXVzZWQgdG8gbWFueSByZWdyZXNzaW9ucyAqLworICAvKiBTdGFydCBvdXIgYnVzIGluIGZsdXNoaW5nIGlmIGFwcHJvcHJpYXRlICovCisgIGlmIChwaXBlbGluZS0+cHJpdi0+YXV0b19mbHVzaF9idXMpCisgICAgZ3N0X2J1c19zZXRfZmx1c2hpbmcgKGJ1cywgVFJVRSk7CisjZW5kaWYKKworICBnc3RfZWxlbWVudF9zZXRfYnVzIChHU1RfRUxFTUVOVF9DQVNUIChwaXBlbGluZSksIGJ1cyk7CisgIEdTVF9ERUJVR19PQkpFQ1QgKHBpcGVsaW5lLCAic2V0IGJ1cyAlIiBHU1RfUFRSX0ZPUk1BVCAiIG9uIHBpcGVsaW5lIiwgYnVzKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9waXBlbGluZV9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQoreworICBHc3RQaXBlbGluZSAqcGlwZWxpbmUgPSBHU1RfUElQRUxJTkUgKG9iamVjdCk7CisgIEdzdENsb2NrICoqY2xvY2tfcCA9ICZwaXBlbGluZS0+Zml4ZWRfY2xvY2s7CisKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfUkVGQ09VTlRJTkcsIHBpcGVsaW5lLCAiZGlzcG9zZSIpOworCisgIC8qIGNsZWFyIGFuZCB1bnJlZiBhbnkgZml4ZWQgY2xvY2sgKi8KKyAgZ3N0X29iamVjdF9yZXBsYWNlICgoR3N0T2JqZWN0ICoqKSBjbG9ja19wLCBOVUxMKTsKKworICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9waXBlbGluZV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgR3N0UGlwZWxpbmUgKnBpcGVsaW5lID0gR1NUX1BJUEVMSU5FIChvYmplY3QpOworCisgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9ERUxBWToKKyAgICAgIGdzdF9waXBlbGluZV9zZXRfZGVsYXkgKHBpcGVsaW5lLCBnX3ZhbHVlX2dldF91aW50NjQgKHZhbHVlKSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVVUT19GTFVTSF9CVVM6CisgICAgICBnc3RfcGlwZWxpbmVfc2V0X2F1dG9fZmx1c2hfYnVzIChwaXBlbGluZSwgZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9waXBlbGluZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgR3N0UGlwZWxpbmUgKnBpcGVsaW5lID0gR1NUX1BJUEVMSU5FIChvYmplY3QpOworCisgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9ERUxBWToKKyAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAodmFsdWUsIGdzdF9waXBlbGluZV9nZXRfZGVsYXkgKHBpcGVsaW5lKSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVVUT19GTFVTSF9CVVM6CisgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgZ3N0X3BpcGVsaW5lX2dldF9hdXRvX2ZsdXNoX2J1cyAocGlwZWxpbmUpKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KK30KKworLyogc2V0IHRoZSBzdGFydF90aW1lIHRvIDAsIHRoaXMgd2lsbCBjYXVzZSB1cyB0byBzZWxlY3QgYSBuZXcgYmFzZV90aW1lIGFuZAorICogbWFrZSB0aGUgcnVubmluZ190aW1lIHN0YXJ0IGZyb20gMCBhZ2Fpbi4gKi8KK3N0YXRpYyB2b2lkCityZXNldF9zdGFydF90aW1lIChHc3RQaXBlbGluZSAqIHBpcGVsaW5lKQoreworICBHU1RfT0JKRUNUX0xPQ0sgKHBpcGVsaW5lKTsKKyAgaWYgKEdTVF9FTEVNRU5UX1NUQVJUX1RJTUUgKHBpcGVsaW5lKSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGlwZWxpbmUsICJyZXNldCBzdGFydF90aW1lIHRvIDAiKTsKKyAgICBHU1RfRUxFTUVOVF9TVEFSVF9USU1FIChwaXBlbGluZSkgPSAwOworICAgIHBpcGVsaW5lLT5wcml2LT5sYXN0X3N0YXJ0X3RpbWUgPSAtMTsKKyAgfSBlbHNlIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChwaXBlbGluZSwgImFwcGxpY2F0aW9uIGFza2VkIHRvIG5vdCByZXNldCBzdHJlYW1fdGltZSIpOworICB9CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChwaXBlbGluZSk7Cit9CisKKy8qKgorICogZ3N0X3BpcGVsaW5lX25ldzoKKyAqIEBuYW1lOiBuYW1lIG9mIG5ldyBwaXBlbGluZQorICoKKyAqIENyZWF0ZSBhIG5ldyBwaXBlbGluZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogbmV3bHkgY3JlYXRlZCBHc3RQaXBlbGluZQorICoKKyAqIE1UIHNhZmUuCisgKi8KK0dzdEVsZW1lbnQgKgorZ3N0X3BpcGVsaW5lX25ldyAoY29uc3QgZ2NoYXIgKiBuYW1lKQoreworICByZXR1cm4gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicGlwZWxpbmUiLCBuYW1lKTsKK30KKworLyogdGFrZXMgYSBzbmFwc2hvdCBvZiB0aGUgcnVubmluZ190aW1lIG9mIHRoZSBwaXBlbGluZSBhbmQgc3RvcmUgdGhpcyBhcyB0aGUKKyAqIGVsZW1lbnQgc3RhcnRfdGltZS4gVGhpcyBpcyB0aGUgdGltZSB3ZSB3aWxsIHNldCBhcyB0aGUgcnVubmluZ190aW1lIG9mIHRoZQorICogcGlwZWxpbmUgd2hlbiB3ZSBnbyB0byBQTEFZSU5HIG5leHQuICovCitzdGF0aWMgdm9pZAorcGlwZWxpbmVfdXBkYXRlX3N0YXJ0X3RpbWUgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQoreworICBHc3RQaXBlbGluZSAqcGlwZWxpbmUgPSBHU1RfUElQRUxJTkVfQ0FTVCAoZWxlbWVudCk7CisgIEdzdENsb2NrICpjbG9jazsKKworICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOworICBpZiAoKGNsb2NrID0gZWxlbWVudC0+Y2xvY2spKSB7CisgICAgR3N0Q2xvY2tUaW1lIG5vdzsKKworICAgIGdzdF9vYmplY3RfcmVmIChjbG9jayk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOworCisgICAgLyogY2FsY3VsYXRlIHRoZSB0aW1lIHdoZW4gd2Ugc3RvcHBlZCAqLworICAgIG5vdyA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOworICAgIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyAoZWxlbWVudCk7CisgICAgLyogc3RvcmUgdGhlIGN1cnJlbnQgcnVubmluZyB0aW1lICovCisgICAgaWYgKEdTVF9FTEVNRU5UX1NUQVJUX1RJTUUgKHBpcGVsaW5lKSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7CisgICAgICBpZiAobm93ICE9IEdTVF9DTE9DS19USU1FX05PTkUpCisgICAgICAgIEdTVF9FTEVNRU5UX1NUQVJUX1RJTUUgKHBpcGVsaW5lKSA9IG5vdyAtIGVsZW1lbnQtPmJhc2VfdGltZTsKKyAgICAgIGVsc2UKKyAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChlbGVtZW50LAorICAgICAgICAgICAgIkNsb2NrICVzIHJldHVybmVkIGludmFsaWQgdGltZSwgY2FuJ3QgY2FsY3VsYXRlICIKKyAgICAgICAgICAgICJydW5uaW5nX3RpbWUgd2hlbiBnb2luZyB0byB0aGUgUEFVU0VEIHN0YXRlIiwKKyAgICAgICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoY2xvY2spKTsKKworICAgICAgLyogd2Ugd2VudCB0byBQQVVTRUQsIHdoZW4gZ29pbmcgdG8gUExBWUlORyBzZWxlY3QgY2xvY2sgYW5kIG5ldworICAgICAgICogYmFzZV90aW1lICovCisgICAgICBwaXBlbGluZS0+cHJpdi0+dXBkYXRlX2Nsb2NrID0gVFJVRTsKKyAgICB9CisgICAgR1NUX0RFQlVHX09CSkVDVCAoZWxlbWVudCwKKyAgICAgICAgInN0YXJ0X3RpbWU9JSIgR1NUX1RJTUVfRk9STUFUICIsIG5vdz0lIiBHU1RfVElNRV9GT1JNQVQKKyAgICAgICAgIiwgYmFzZV90aW1lICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0VMRU1FTlRfU1RBUlRfVElNRSAocGlwZWxpbmUpKSwKKyAgICAgICAgR1NUX1RJTUVfQVJHUyAobm93KSwgR1NUX1RJTUVfQVJHUyAoZWxlbWVudC0+YmFzZV90aW1lKSk7CisgIH0KKyAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOworfQorCisvKiBNVCBzYWZlICovCitzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KK2dzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQoreworICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXN1bHQgPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7CisgIEdzdFBpcGVsaW5lICpwaXBlbGluZSA9IEdTVF9QSVBFTElORV9DQVNUIChlbGVtZW50KTsKKyAgR3N0Q2xvY2sgKmNsb2NrOworCisgIHN3aXRjaCAodHJhbnNpdGlvbikgeworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgorICAgICAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKKyAgICAgIGlmIChlbGVtZW50LT5idXMpCisgICAgICAgIGdzdF9idXNfc2V0X2ZsdXNoaW5nIChlbGVtZW50LT5idXMsIEZBTFNFKTsKKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6CisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOworICAgICAgcGlwZWxpbmUtPnByaXYtPnVwZGF0ZV9jbG9jayA9IFRSVUU7CisgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1BMQVlJTkc6CisgICAgeworICAgICAgR3N0Q2xvY2tUaW1lIG5vdywgc3RhcnRfdGltZSwgbGFzdF9zdGFydF90aW1lLCBkZWxheTsKKyAgICAgIGdib29sZWFuIHVwZGF0ZV9jbG9jazsKKyAgICAgIEdzdENsb2NrICpjdXJfY2xvY2s7CisKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGVsZW1lbnQsICJzZWxlY3RpbmcgY2xvY2sgYW5kIGJhc2VfdGltZSIpOworCisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOworICAgICAgY3VyX2Nsb2NrID0gZWxlbWVudC0+Y2xvY2s7CisgICAgICBpZiAoY3VyX2Nsb2NrKQorICAgICAgICBnc3Rfb2JqZWN0X3JlZiAoY3VyX2Nsb2NrKTsKKyAgICAgIC8qIGdldCB0aGUgZGVzaXJlZCBydW5uaW5nX3RpbWUgb2YgdGhlIGZpcnN0IGJ1ZmZlciBha2EgdGhlIHN0YXJ0X3RpbWUgKi8KKyAgICAgIHN0YXJ0X3RpbWUgPSBHU1RfRUxFTUVOVF9TVEFSVF9USU1FIChwaXBlbGluZSk7CisgICAgICBsYXN0X3N0YXJ0X3RpbWUgPSBwaXBlbGluZS0+cHJpdi0+bGFzdF9zdGFydF90aW1lOworICAgICAgcGlwZWxpbmUtPnByaXYtPmxhc3Rfc3RhcnRfdGltZSA9IHN0YXJ0X3RpbWU7CisgICAgICAvKiBzZWUgaWYgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGNsb2NrICovCisgICAgICB1cGRhdGVfY2xvY2sgPSBwaXBlbGluZS0+cHJpdi0+dXBkYXRlX2Nsb2NrOworICAgICAgcGlwZWxpbmUtPnByaXYtPnVwZGF0ZV9jbG9jayA9IEZBTFNFOworICAgICAgZGVsYXkgPSBwaXBlbGluZS0+ZGVsYXk7CisgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7CisKKyAgICAgIC8qIHJ1bm5pbmcgdGltZSBjaGFuZ2VkLCBlaXRoZXIgd2l0aCBhIFBBVVNFRCBvciBhIGZsdXNoLCB3ZSBuZWVkIHRvIGNoZWNrCisgICAgICAgKiBpZiB0aGVyZSBpcyBhIG5ldyBjbG9jayAmIHVwZGF0ZSB0aGUgYmFzZSB0aW1lICovCisgICAgICBpZiAodXBkYXRlX2Nsb2NrIHx8IGxhc3Rfc3RhcnRfdGltZSAhPSBzdGFydF90aW1lKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBpcGVsaW5lLCAiTmVlZCB0byB1cGRhdGUgc3RhcnRfdGltZSIpOworCisgICAgICAgIC8qIHdoZW4gZ29pbmcgdG8gUExBWUlORywgc2VsZWN0IGEgY2xvY2sgd2hlbiBuZWVkZWQuIElmIHdlIGp1c3QgZ290CisgICAgICAgICAqIGZsdXNoZWQsIHdlIGRvbid0IHJlc2VsZWN0IHRoZSBjbG9jay4gKi8KKyAgICAgICAgaWYgKHVwZGF0ZV9jbG9jaykgeworICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBpcGVsaW5lLCAiTmVlZCB0byB1cGRhdGUgY2xvY2suIik7CisgICAgICAgICAgY2xvY2sgPSBnc3RfZWxlbWVudF9wcm92aWRlX2Nsb2NrIChlbGVtZW50KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwaXBlbGluZSwKKyAgICAgICAgICAgICAgIkRvbid0IG5lZWQgdG8gdXBkYXRlIGNsb2NrLCB1c2luZyBvbGQgY2xvY2suIik7CisgICAgICAgICAgY2xvY2sgPSBnc3Rfb2JqZWN0X3JlZiAoY3VyX2Nsb2NrKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjbG9jaykgeworICAgICAgICAgIG5vdyA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIEdTVF9ERUJVRyAoIm5vIGNsb2NrLCB1c2luZyBiYXNlIHRpbWUgb2YgTk9ORSIpOworICAgICAgICAgIG5vdyA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2xvY2sgIT0gY3VyX2Nsb2NrKSB7CisgICAgICAgICAgLyogbm93IGRpc3RyaWJ1dGUgdGhlIGNsb2NrICh3aGljaCBjb3VsZCBiZSBOVUxMKS4gSWYgc29tZQorICAgICAgICAgICAqIGVsZW1lbnQgcmVmdXNlcyB0aGUgY2xvY2ssIHRoaXMgd2lsbCByZXR1cm4gRkFMU0UgYW5kCisgICAgICAgICAgICogd2UgZWZmZWN0aXZlbHkgZmFpbCB0aGUgc3RhdGUgY2hhbmdlLiAqLworICAgICAgICAgIGlmICghZ3N0X2VsZW1lbnRfc2V0X2Nsb2NrIChlbGVtZW50LCBjbG9jaykpCisgICAgICAgICAgICBnb3RvIGludmFsaWRfY2xvY2s7CisKKyAgICAgICAgICAvKiBpZiB3ZSBzZWxlY3RlZCBhbmQgZGlzdHJpYnV0ZWQgYSBuZXcgY2xvY2ssIGxldCB0aGUgYXBwCisgICAgICAgICAgICoga25vdyBhYm91dCBpdCAqLworICAgICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoZWxlbWVudCwKKyAgICAgICAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X25ld19jbG9jayAoR1NUX09CSkVDVF9DQVNUIChlbGVtZW50KSwgY2xvY2spKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjbG9jaykKKyAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7CisKKyAgICAgICAgaWYgKHN0YXJ0X3RpbWUgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSAmJiBub3cgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkgeworICAgICAgICAgIEdzdENsb2NrVGltZSBuZXdfYmFzZV90aW1lID0gbm93IC0gc3RhcnRfdGltZSArIGRlbGF5OworICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGVsZW1lbnQsCisgICAgICAgICAgICAgICJzdGFydF90aW1lPSUiIEdTVF9USU1FX0ZPUk1BVCAiLCBub3c9JSIgR1NUX1RJTUVfRk9STUFUCisgICAgICAgICAgICAgICIsIGJhc2VfdGltZSAlIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHN0YXJ0X3RpbWUpLCBHU1RfVElNRV9BUkdTIChub3cpLAorICAgICAgICAgICAgICBHU1RfVElNRV9BUkdTIChuZXdfYmFzZV90aW1lKSk7CisKKyAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfYmFzZV90aW1lIChlbGVtZW50LCBuZXdfYmFzZV90aW1lKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwaXBlbGluZSwKKyAgICAgICAgICAgICAgIk5PVCBhZGp1c3RpbmcgYmFzZV90aW1lIGJlY2F1c2Ugc3RhcnRfdGltZSBpcyBOT05FIik7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBpcGVsaW5lLAorICAgICAgICAgICAgIk5PVCBhZGp1c3RpbmcgYmFzZV90aW1lIGJlY2F1c2Ugd2Ugc2VsZWN0ZWQgb25lIGJlZm9yZSIpOworICAgICAgfQorCisgICAgICBpZiAoY3VyX2Nsb2NrKQorICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChjdXJfY2xvY2spOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRDoKKyAgICB7CisgICAgICAvKiB3ZSB0YWtlIGEgc3RhcnRfdGltZSBzbmFwc2hvdCBiZWZvcmUgY2FsbGluZyB0aGUgY2hpbGRyZW4gc3RhdGUgY2hhbmdlcworICAgICAgICogc28gdGhhdCB0aGV5IGtub3cgYWJvdXQgd2hlbiB0aGUgcGlwZWxpbmUgUEFVU0VELiAqLworICAgICAgcGlwZWxpbmVfdXBkYXRlX3N0YXJ0X3RpbWUgKGVsZW1lbnQpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEw6CisgICAgICBicmVhazsKKyAgfQorCisgIHJlc3VsdCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOworCisgIHN3aXRjaCAodHJhbnNpdGlvbikgeworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKKyAgICB7CisgICAgICByZXNldF9zdGFydF90aW1lIChwaXBlbGluZSk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19QTEFZSU5HOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BMQVlJTkdfVE9fUEFVU0VEOgorICAgIHsKKyAgICAgIC8qIFRha2UgYSBuZXcgc25hcHNob3Qgb2YgdGhlIHN0YXJ0X3RpbWUgYWZ0ZXIgY2FsbGluZyB0aGUgc3RhdGUgY2hhbmdlIG9uCisgICAgICAgKiBhbGwgY2hpbGRyZW4uIFRoaXMgd2lsbCBiZSB0aGUgcnVubmluZ190aW1lIG9mIHRoZSBwaXBlbGluZSB3aGVuIHdlIGdvCisgICAgICAgKiBiYWNrIHRvIFBMQVlJTkcgKi8KKyAgICAgIHBpcGVsaW5lX3VwZGF0ZV9zdGFydF90aW1lIChlbGVtZW50KTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEw6CisgICAgeworICAgICAgR3N0QnVzICpidXM7CisgICAgICBnYm9vbGVhbiBhdXRvX2ZsdXNoOworCisgICAgICAvKiBncmFiIHNvbWUgc3R1ZmYgYmVmb3JlIHdlIHJlbGVhc2UgdGhlIGxvY2sgdG8gZmx1c2ggb3V0IHRoZSBidXMgKi8KKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoZWxlbWVudCk7CisgICAgICBpZiAoKGJ1cyA9IGVsZW1lbnQtPmJ1cykpCisgICAgICAgIGdzdF9vYmplY3RfcmVmIChidXMpOworICAgICAgYXV0b19mbHVzaCA9IHBpcGVsaW5lLT5wcml2LT5hdXRvX2ZsdXNoX2J1czsKKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKKworICAgICAgaWYgKGJ1cykgeworICAgICAgICBpZiAoYXV0b19mbHVzaCkgeworICAgICAgICAgIGdzdF9idXNfc2V0X2ZsdXNoaW5nIChidXMsIFRSVUUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIEdTVF9JTkZPX09CSkVDVCAoZWxlbWVudCwgIm5vdCBmbHVzaGluZyBidXMsIGF1dG8tZmx1c2hpbmcgZGlzYWJsZWQiKTsKKyAgICAgICAgfQorICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIHJldHVybiByZXN1bHQ7CisKKyAgLyogRVJST1JTICovCitpbnZhbGlkX2Nsb2NrOgorICB7CisgICAgLyogd2UgZ2VuZXJhdGUgdGhpcyBlcnJvciB3aGVuIHRoZSBzZWxlY3RlZCBjbG9jayB3YXMgbm90CisgICAgICogYWNjZXB0ZWQgYnkgc29tZSBlbGVtZW50ICovCisgICAgR1NUX0VMRU1FTlRfRVJST1IgKHBpcGVsaW5lLCBDT1JFLCBDTE9DSywKKyAgICAgICAgKF8oIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIpKSwKKyAgICAgICAgKCJQaXBlbGluZSBjYW5ub3Qgb3BlcmF0ZSB3aXRoIHNlbGVjdGVkIGNsb2NrIikpOworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBpcGVsaW5lLAorICAgICAgICAiUGlwZWxpbmUgY2Fubm90IG9wZXJhdGUgd2l0aCBzZWxlY3RlZCBjbG9jayAlcCIsIGNsb2NrKTsKKyAgICBpZiAoY2xvY2spCisgICAgICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7CisgICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKKyAgfQorfQorCisvKiBpbnRlcmNlcHQgdGhlIGJ1cyBtZXNzYWdlcyBmcm9tIG91ciBjaGlsZHJlbi4gV2Ugd2F0Y2ggZm9yIHRoZSBBU1lOQ19TVEFSVAorICogbWVzc2FnZSB3aXRoIGlzIHBvc3RlZCBieSB0aGUgZWxlbWVudHMgKHNpbmtzKSB0aGF0IHJlcXVpcmUgYSByZXNldCBvZiB0aGUKKyAqIHJ1bm5pbmdfdGltZSBhZnRlciBhIGZsdXNoLiBBU1lOQ19TVEFSVCBhbHNvIGJyaW5ncyB0aGUgcGlwZWxpbmUgYmFjayBpbnRvCisgKiB0aGUgUEFVU0VELCBwZW5kaW5nIFBBVVNFRCBzdGF0ZS4gV2hlbiB0aGUgQVNZTkNfRE9ORSBtZXNzYWdlIGlzIHJlY2VpdmVkIHRoZQorICogcGlwZWxpbmUgd2lsbCByZWRpc3RyaWJ1dGUgdGhlIG5ldyBiYXNlX3RpbWUgYW5kIHdpbGwgYnJpbmcgdGhlIGVsZW1lbnRzIGJhY2sKKyAqIHRvIHRoZSBkZXNpcmVkIHN0YXRlIG9mIHRoZSBwaXBlbGluZS4gKi8KK3N0YXRpYyB2b2lkCitnc3RfcGlwZWxpbmVfaGFuZGxlX21lc3NhZ2UgKEdzdEJpbiAqIGJpbiwgR3N0TWVzc2FnZSAqIG1lc3NhZ2UpCit7CisgIEdzdFBpcGVsaW5lICpwaXBlbGluZSA9IEdTVF9QSVBFTElORV9DQVNUIChiaW4pOworCisgIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkpIHsKKyAgICBjYXNlIEdTVF9NRVNTQUdFX0FTWU5DX0RPTkU6CisgICAgeworICAgICAgZ2Jvb2xlYW4gcmVzZXRfdGltZTsKKworICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfYXN5bmNfZG9uZSAobWVzc2FnZSwgJnJlc2V0X3RpbWUpOworCisgICAgICAvKiByZXNldCBvdXIgcnVubmluZyB0aW1lIGlmIHdlIG5lZWQgdG8gZGlzdHJpYnV0ZSBhIG5ldyBiYXNlX3RpbWUgdG8gdGhlCisgICAgICAgKiBjaGlsZHJlbi4gKi8KKyAgICAgIGlmIChyZXNldF90aW1lKQorICAgICAgICByZXNldF9zdGFydF90aW1lIChwaXBlbGluZSk7CisKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9NRVNTQUdFX0NMT0NLX0xPU1Q6CisgICAgeworICAgICAgR3N0Q2xvY2sgKmNsb2NrOworCisgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9jbG9ja19sb3N0IChtZXNzYWdlLCAmY2xvY2spOworCisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGJpbik7CisgICAgICBpZiAoY2xvY2sgPT0gR1NUX0VMRU1FTlRfQ0FTVCAoYmluKS0+Y2xvY2spIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiVXNlZCBjbG9jayAnJXMnIGdvdCBsb3N0IiwKKyAgICAgICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoY2xvY2spKTsKKyAgICAgICAgcGlwZWxpbmUtPnByaXYtPnVwZGF0ZV9jbG9jayA9IFRSVUU7CisgICAgICB9CisgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisgIEdTVF9CSU5fQ0xBU1MgKHBhcmVudF9jbGFzcyktPmhhbmRsZV9tZXNzYWdlIChiaW4sIG1lc3NhZ2UpOworfQorCisvKioKKyAqIGdzdF9waXBlbGluZV9nZXRfYnVzOgorICogQHBpcGVsaW5lOiBhICNHc3RQaXBlbGluZQorICoKKyAqIEdldHMgdGhlICNHc3RCdXMgb2YgQHBpcGVsaW5lLiBUaGUgYnVzIGFsbG93cyBhcHBsaWNhdGlvbnMgdG8gcmVjZWl2ZQorICogI0dzdE1lc3NhZ2UgcGFja2V0cy4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdEJ1cywgdW5yZWYgYWZ0ZXIgdXNhZ2UuCisgKgorICogTVQgc2FmZS4KKyAqLworR3N0QnVzICoKK2dzdF9waXBlbGluZV9nZXRfYnVzIChHc3RQaXBlbGluZSAqIHBpcGVsaW5lKQoreworICByZXR1cm4gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAoR1NUX0VMRU1FTlRfQ0FTVCAocGlwZWxpbmUpKTsKK30KKworc3RhdGljIEdzdENsb2NrICoKK2dzdF9waXBlbGluZV9wcm92aWRlX2Nsb2NrX2Z1bmMgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQoreworICBHc3RDbG9jayAqY2xvY2sgPSBOVUxMOworICBHc3RQaXBlbGluZSAqcGlwZWxpbmUgPSBHU1RfUElQRUxJTkUgKGVsZW1lbnQpOworCisgIC8qIGlmIHdlIGhhdmUgYSBmaXhlZCBjbG9jaywgdXNlIHRoYXQgb25lICovCisgIEdTVF9PQkpFQ1RfTE9DSyAocGlwZWxpbmUpOworICBpZiAoR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAocGlwZWxpbmUsIEdTVF9QSVBFTElORV9GTEFHX0ZJWEVEX0NMT0NLKSkgeworICAgIGNsb2NrID0gcGlwZWxpbmUtPmZpeGVkX2Nsb2NrOworICAgIGlmIChjbG9jaykKKyAgICAgIGdzdF9vYmplY3RfcmVmIChjbG9jayk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBpcGVsaW5lKTsKKworICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssICJwaXBlbGluZSB1c2luZyBmaXhlZCBjbG9jayAlcCAoJXMpIiwKKyAgICAgICAgY2xvY2ssIGNsb2NrID8gR1NUX1NUUl9OVUxMIChHU1RfT0JKRUNUX05BTUUgKGNsb2NrKSkgOiAiLSIpOworICB9IGVsc2UgeworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwaXBlbGluZSk7CisgICAgLyogbGV0IHRoZSBwYXJlbnQgYmluIHNlbGVjdCBhIGNsb2NrICovCisgICAgY2xvY2sgPQorICAgICAgICBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+cHJvdmlkZV9jbG9jayAoR1NUX0VMRU1FTlQKKyAgICAgICAgKHBpcGVsaW5lKSk7CisgICAgLyogbm8gY2xvY2ssIHVzZSBhIHN5c3RlbSBjbG9jayAqLworICAgIGlmICghY2xvY2spIHsKKyAgICAgIGNsb2NrID0gZ3N0X3N5c3RlbV9jbG9ja19vYnRhaW4gKCk7CisKKyAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssICJwaXBlbGluZSBvYnRhaW5lZCBzeXN0ZW0gY2xvY2s6ICVwICglcykiLAorICAgICAgICAgIGNsb2NrLCBjbG9jayA/IEdTVF9TVFJfTlVMTCAoR1NUX09CSkVDVF9OQU1FIChjbG9jaykpIDogIi0iKTsKKyAgICB9IGVsc2UgeworICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgInBpcGVsaW5lIG9idGFpbmVkIGNsb2NrOiAlcCAoJXMpIiwKKyAgICAgICAgICBjbG9jaywgY2xvY2sgPyBHU1RfU1RSX05VTEwgKEdTVF9PQkpFQ1RfTkFNRSAoY2xvY2spKSA6ICItIik7CisgICAgfQorICB9CisgIHJldHVybiBjbG9jazsKK30KKworLyoqCisgKiBnc3RfcGlwZWxpbmVfZ2V0X2Nsb2NrOgorICogQHBpcGVsaW5lOiBhICNHc3RQaXBlbGluZQorICoKKyAqIEdldHMgdGhlIGN1cnJlbnQgY2xvY2sgdXNlZCBieSBAcGlwZWxpbmUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RDbG9jaywgdW5yZWYgYWZ0ZXIgdXNhZ2UuCisgKi8KK0dzdENsb2NrICoKK2dzdF9waXBlbGluZV9nZXRfY2xvY2sgKEdzdFBpcGVsaW5lICogcGlwZWxpbmUpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUElQRUxJTkUgKHBpcGVsaW5lKSwgTlVMTCk7CisKKyAgcmV0dXJuIGdzdF9waXBlbGluZV9wcm92aWRlX2Nsb2NrX2Z1bmMgKEdTVF9FTEVNRU5UX0NBU1QgKHBpcGVsaW5lKSk7Cit9CisKKworLyoqCisgKiBnc3RfcGlwZWxpbmVfdXNlX2Nsb2NrOgorICogQHBpcGVsaW5lOiBhICNHc3RQaXBlbGluZQorICogQGNsb2NrOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBjbG9jayB0byB1c2UKKyAqCisgKiBGb3JjZSBAcGlwZWxpbmUgdG8gdXNlIHRoZSBnaXZlbiBAY2xvY2suIFRoZSBwaXBlbGluZSB3aWxsCisgKiBhbHdheXMgdXNlIHRoZSBnaXZlbiBjbG9jayBldmVuIGlmIG5ldyBjbG9jayBwcm92aWRlcnMgYXJlIGFkZGVkCisgKiB0byB0aGlzIHBpcGVsaW5lLgorICoKKyAqIElmIEBjbG9jayBpcyBOVUxMIGFsbCBjbG9ja2luZyB3aWxsIGJlIGRpc2FibGVkIHdoaWNoIHdpbGwgbWFrZQorICogdGhlIHBpcGVsaW5lIHJ1biBhcyBmYXN0IGFzIHBvc3NpYmxlLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK3ZvaWQKK2dzdF9waXBlbGluZV91c2VfY2xvY2sgKEdzdFBpcGVsaW5lICogcGlwZWxpbmUsIEdzdENsb2NrICogY2xvY2spCit7CisgIEdzdENsb2NrICoqY2xvY2tfcDsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUElQRUxJTkUgKHBpcGVsaW5lKSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChwaXBlbGluZSk7CisgIEdTVF9PQkpFQ1RfRkxBR19TRVQgKHBpcGVsaW5lLCBHU1RfUElQRUxJTkVfRkxBR19GSVhFRF9DTE9DSyk7CisKKyAgY2xvY2tfcCA9ICZwaXBlbGluZS0+Zml4ZWRfY2xvY2s7CisgIGdzdF9vYmplY3RfcmVwbGFjZSAoKEdzdE9iamVjdCAqKikgY2xvY2tfcCwgKEdzdE9iamVjdCAqKSBjbG9jayk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChwaXBlbGluZSk7CisKKyAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgInBpcGVsaW5lIHVzaW5nIGZpeGVkIGNsb2NrICVwICglcykiLCBjbG9jaywKKyAgICAgIChjbG9jayA/IEdTVF9PQkpFQ1RfTkFNRSAoY2xvY2spIDogIm5pbCIpKTsKK30KKworLyoqCisgKiBnc3RfcGlwZWxpbmVfc2V0X2Nsb2NrOgorICogQHBpcGVsaW5lOiBhICNHc3RQaXBlbGluZQorICogQGNsb2NrOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBjbG9jayB0byBzZXQKKyAqCisgKiBTZXQgdGhlIGNsb2NrIGZvciBAcGlwZWxpbmUuIFRoZSBjbG9jayB3aWxsIGJlIGRpc3RyaWJ1dGVkCisgKiB0byBhbGwgdGhlIGVsZW1lbnRzIG1hbmFnZWQgYnkgdGhlIHBpcGVsaW5lLgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIGNsb2NrIGNvdWxkIGJlIHNldCBvbiB0aGUgcGlwZWxpbmUuIEZBTFNFIGlmCisgKiAgIHNvbWUgZWxlbWVudCBkaWQgbm90IGFjY2VwdCB0aGUgY2xvY2suCisgKgorICogTVQgc2FmZS4KKyAqLworZ2Jvb2xlYW4KK2dzdF9waXBlbGluZV9zZXRfY2xvY2sgKEdzdFBpcGVsaW5lICogcGlwZWxpbmUsIEdzdENsb2NrICogY2xvY2spCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwaXBlbGluZSAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUElQRUxJTkUgKHBpcGVsaW5lKSwgRkFMU0UpOworCisgIHJldHVybgorICAgICAgR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPnNldF9jbG9jayAoR1NUX0VMRU1FTlRfQ0FTVCAocGlwZWxpbmUpLAorICAgICAgY2xvY2spOworfQorCisvKioKKyAqIGdzdF9waXBlbGluZV9hdXRvX2Nsb2NrOgorICogQHBpcGVsaW5lOiBhICNHc3RQaXBlbGluZQorICoKKyAqIExldCBAcGlwZWxpbmUgc2VsZWN0IGEgY2xvY2sgYXV0b21hdGljYWxseS4gVGhpcyBpcyB0aGUgZGVmYXVsdAorICogYmVoYXZpb3VyLgorICoKKyAqIFVzZSB0aGlzIGZ1bmN0aW9uIGlmIHlvdSBwcmV2aW91cyBmb3JjZWQgYSBmaXhlZCBjbG9jayB3aXRoCisgKiBnc3RfcGlwZWxpbmVfdXNlX2Nsb2NrKCkgYW5kIHdhbnQgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdAorICogcGlwZWxpbmUgY2xvY2sgc2VsZWN0aW9uIGFsZ29yaXRobS4KKyAqCisgKiBNVCBzYWZlLgorICovCit2b2lkCitnc3RfcGlwZWxpbmVfYXV0b19jbG9jayAoR3N0UGlwZWxpbmUgKiBwaXBlbGluZSkKK3sKKyAgR3N0Q2xvY2sgKipjbG9ja19wOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKHBpcGVsaW5lICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUElQRUxJTkUgKHBpcGVsaW5lKSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChwaXBlbGluZSk7CisgIEdTVF9PQkpFQ1RfRkxBR19VTlNFVCAocGlwZWxpbmUsIEdTVF9QSVBFTElORV9GTEFHX0ZJWEVEX0NMT0NLKTsKKworICBjbG9ja19wID0gJnBpcGVsaW5lLT5maXhlZF9jbG9jazsKKyAgZ3N0X29iamVjdF9yZXBsYWNlICgoR3N0T2JqZWN0ICoqKSBjbG9ja19wLCBOVUxMKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHBpcGVsaW5lKTsKKworICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAicGlwZWxpbmUgdXNpbmcgYXV0b21hdGljIGNsb2NrIik7Cit9CisKKy8qKgorICogZ3N0X3BpcGVsaW5lX3NldF9kZWxheToKKyAqIEBwaXBlbGluZTogYSAjR3N0UGlwZWxpbmUKKyAqIEBkZWxheTogdGhlIGRlbGF5CisgKgorICogU2V0IHRoZSBleHBlY3RlZCBkZWxheSBuZWVkZWQgZm9yIGFsbCBlbGVtZW50cyB0byBwZXJmb3JtIHRoZQorICogUEFVU0VEIHRvIFBMQVlJTkcgc3RhdGUgY2hhbmdlLiBAZGVsYXkgd2lsbCBiZSBhZGRlZCB0byB0aGUKKyAqIGJhc2UgdGltZSBvZiB0aGUgZWxlbWVudHMgc28gdGhhdCB0aGV5IHdhaXQgYW4gYWRkaXRpb25hbCBAZGVsYXkKKyAqIGFtb3VudCBvZiB0aW1lIGJlZm9yZSBzdGFydGluZyB0byBwcm9jZXNzIGJ1ZmZlcnMgYW5kIGNhbm5vdCBiZQorICogI0dTVF9DTE9DS19USU1FX05PTkUuCisgKgorICogVGhpcyBvcHRpb24gaXMgdXNlZCBmb3IgdHVuaW5nIHB1cnBvc2VzIGFuZCBzaG91bGQgbm9ybWFsbHkgbm90IGJlCisgKiB1c2VkLgorICoKKyAqIE1UIHNhZmUuCisgKgorICogU2luY2U6IDAuMTAuNQorICovCit2b2lkCitnc3RfcGlwZWxpbmVfc2V0X2RlbGF5IChHc3RQaXBlbGluZSAqIHBpcGVsaW5lLCBHc3RDbG9ja1RpbWUgZGVsYXkpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19QSVBFTElORSAocGlwZWxpbmUpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoZGVsYXkgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChwaXBlbGluZSk7CisgIHBpcGVsaW5lLT5kZWxheSA9IGRlbGF5OworICBHU1RfT0JKRUNUX1VOTE9DSyAocGlwZWxpbmUpOworfQorCisvKioKKyAqIGdzdF9waXBlbGluZV9nZXRfZGVsYXk6CisgKiBAcGlwZWxpbmU6IGEgI0dzdFBpcGVsaW5lCisgKgorICogR2V0IHRoZSBjb25maWd1cmVkIGRlbGF5IChzZWUgZ3N0X3BpcGVsaW5lX3NldF9kZWxheSgpKS4KKyAqCisgKiBSZXR1cm5zOiBUaGUgY29uZmlndXJlZCBkZWxheS4KKyAqCisgKiBNVCBzYWZlLgorICoKKyAqIFNpbmNlOiAwLjEwLjUKKyAqLworR3N0Q2xvY2tUaW1lCitnc3RfcGlwZWxpbmVfZ2V0X2RlbGF5IChHc3RQaXBlbGluZSAqIHBpcGVsaW5lKQoreworICBHc3RDbG9ja1RpbWUgcmVzOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUElQRUxJTkUgKHBpcGVsaW5lKSwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChwaXBlbGluZSk7CisgIHJlcyA9IHBpcGVsaW5lLT5kZWxheTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHBpcGVsaW5lKTsKKworICByZXR1cm4gcmVzOworfQorCisvKioKKyAqIGdzdF9waXBlbGluZV9zZXRfYXV0b19mbHVzaF9idXM6CisgKiBAcGlwZWxpbmU6IGEgI0dzdFBpcGVsaW5lCisgKiBAYXV0b19mbHVzaDogd2hldGhlciBvciBub3QgdG8gYXV0b21hdGljYWxseSBmbHVzaCB0aGUgYnVzIHdoZW4KKyAqIHRoZSBwaXBlbGluZSBnb2VzIGZyb20gUkVBRFkgdG8gTlVMTCBzdGF0ZQorICoKKyAqIFVzdWFsbHksIHdoZW4gYSBwaXBlbGluZSBnb2VzIGZyb20gUkVBRFkgdG8gTlVMTCBzdGF0ZSwgaXQgYXV0b21hdGljYWxseQorICogZmx1c2hlcyBhbGwgcGVuZGluZyBtZXNzYWdlcyBvbiB0aGUgYnVzLCB3aGljaCBpcyBkb25lIGZvciByZWZjb3VudGluZworICogcHVycG9zZXMsIHRvIGJyZWFrIGNpcmN1bGFyIHJlZmVyZW5jZXMuCisgKgorICogVGhpcyBtZWFucyB0aGF0IGFwcGxpY2F0aW9ucyB0aGF0IHVwZGF0ZSBzdGF0ZSB1c2luZyAoYXN5bmMpIGJ1cyBtZXNzYWdlcworICogKGUuZy4gZG8gY2VydGFpbiB0aGluZ3Mgd2hlbiBhIHBpcGVsaW5lIGdvZXMgZnJvbSBQQVVTRUQgdG8gUkVBRFkpIG1pZ2h0CisgKiBub3QgZ2V0IHRvIHNlZSBtZXNzYWdlcyB3aGVuIHRoZSBwaXBlbGluZSBpcyBzaHV0IGRvd24sIGJlY2F1c2UgdGhleSBtaWdodAorICogYmUgZmx1c2hlZCBiZWZvcmUgdGhleSBjYW4gYmUgZGlzcGF0Y2hlZCBpbiB0aGUgbWFpbiB0aHJlYWQuIFRoaXMgYmVoYXZpb3VyCisgKiBjYW4gYmUgZGlzYWJsZWQgdXNpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBJdCBpcyBpbXBvcnRhbnQgdGhhdCBhbGwgbWVzc2FnZXMgb24gdGhlIGJ1cyBhcmUgaGFuZGxlZCB3aGVuIHRoZQorICogYXV0b21hdGljIGZsdXNoaW5nIGlzIGRpc2FibGVkIGVsc2UgbWVtb3J5IGxlYWtzIHdpbGwgYmUgaW50cm9kdWNlZC4KKyAqCisgKiBNVCBzYWZlLgorICoKKyAqIFNpbmNlOiAwLjEwLjQKKyAqLwordm9pZAorZ3N0X3BpcGVsaW5lX3NldF9hdXRvX2ZsdXNoX2J1cyAoR3N0UGlwZWxpbmUgKiBwaXBlbGluZSwgZ2Jvb2xlYW4gYXV0b19mbHVzaCkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1BJUEVMSU5FIChwaXBlbGluZSkpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAocGlwZWxpbmUpOworICBwaXBlbGluZS0+cHJpdi0+YXV0b19mbHVzaF9idXMgPSBhdXRvX2ZsdXNoOworICBHU1RfT0JKRUNUX1VOTE9DSyAocGlwZWxpbmUpOworfQorCisvKioKKyAqIGdzdF9waXBlbGluZV9nZXRfYXV0b19mbHVzaF9idXM6CisgKiBAcGlwZWxpbmU6IGEgI0dzdFBpcGVsaW5lCisgKgorICogQ2hlY2sgaWYgQHBpcGVsaW5lIHdpbGwgYXV0b21hdGljYWxseSBmbHVzaCBtZXNzYWdlcyB3aGVuIGdvaW5nIHRvCisgKiB0aGUgTlVMTCBzdGF0ZS4KKyAqCisgKiBSZXR1cm5zOiB3aGV0aGVyIHRoZSBwaXBlbGluZSB3aWxsIGF1dG9tYXRpY2FsbHkgZmx1c2ggaXRzIGJ1cyB3aGVuCisgKiBnb2luZyBmcm9tIFJFQURZIHRvIE5VTEwgc3RhdGUgb3Igbm90LgorICoKKyAqIE1UIHNhZmUuCisgKgorICogU2luY2U6IDAuMTAuNAorICovCitnYm9vbGVhbgorZ3N0X3BpcGVsaW5lX2dldF9hdXRvX2ZsdXNoX2J1cyAoR3N0UGlwZWxpbmUgKiBwaXBlbGluZSkKK3sKKyAgZ2Jvb2xlYW4gcmVzOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUElQRUxJTkUgKHBpcGVsaW5lKSwgRkFMU0UpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAocGlwZWxpbmUpOworICByZXMgPSBwaXBlbGluZS0+cHJpdi0+YXV0b19mbHVzaF9idXM7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChwaXBlbGluZSk7CisKKyAgcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL2dzdC9nc3RwaXBlbGluZS5oIGIvZ3N0L2dzdHBpcGVsaW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RiZjk2ZgotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RwaXBlbGluZS5oCkBAIC0wLDAgKzEsMTEwIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+CisgKgorICogZ3N0cGlwZWxpbmUuaDogSGVhZGVyIGZvciBHc3RQaXBlbGluZSBlbGVtZW50CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworCisjaWZuZGVmIF9fR1NUX1BJUEVMSU5FX0hfXworI2RlZmluZSBfX0dTVF9QSVBFTElORV9IX18KKworI2luY2x1ZGUgPGdzdC9nc3RiaW4uaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEdTVF9UWVBFX1BJUEVMSU5FIAkJKGdzdF9waXBlbGluZV9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgR1NUX1BJUEVMSU5FKG9iaikgCQkoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9QSVBFTElORSwgR3N0UGlwZWxpbmUpKQorI2RlZmluZSBHU1RfSVNfUElQRUxJTkUob2JqKSAJCShHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX1BJUEVMSU5FKSkKKyNkZWZpbmUgR1NUX1BJUEVMSU5FX0NMQVNTKGtsYXNzKSAJKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9QSVBFTElORSwgR3N0UGlwZWxpbmVDbGFzcykpCisjZGVmaW5lIEdTVF9JU19QSVBFTElORV9DTEFTUyhrbGFzcykgCShHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfUElQRUxJTkUpKQorI2RlZmluZSBHU1RfUElQRUxJTkVfR0VUX0NMQVNTKG9iaikgCShHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfUElQRUxJTkUsIEdzdFBpcGVsaW5lQ2xhc3MpKQorI2RlZmluZSBHU1RfUElQRUxJTkVfQ0FTVChvYmopIAkJKChHc3RQaXBlbGluZSopKG9iaikpCisKK3R5cGVkZWYgc3RydWN0IF9Hc3RQaXBlbGluZSBHc3RQaXBlbGluZTsKK3R5cGVkZWYgc3RydWN0IF9Hc3RQaXBlbGluZUNsYXNzIEdzdFBpcGVsaW5lQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfR3N0UGlwZWxpbmVQcml2YXRlIEdzdFBpcGVsaW5lUHJpdmF0ZTsKKworLyoqCisgKiBHc3RQaXBlbGluZUZsYWdzOgorICogQEdTVF9QSVBFTElORV9GTEFHX0ZJWEVEX0NMT0NLOiB0aGlzIHBpcGVsaW5lIHdvcmtzIHdpdGggYSBmaXhlZCBjbG9jaworICogQEdTVF9QSVBFTElORV9GTEFHX0xBU1Q6IG9mZnNldCB0byBkZWZpbmUgbW9yZSBmbGFncworICoKKyAqIFBpcGVsaW5lIGZsYWdzCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIEdTVF9QSVBFTElORV9GTEFHX0ZJWEVEX0NMT0NLICAgICAgICA9IChHU1RfQklOX0ZMQUdfTEFTVCA8PCAwKSwKKyAgLyogcGFkZGluZyAqLworICBHU1RfUElQRUxJTkVfRkxBR19MQVNUICAgICAgICAgICAgICAgPSAoR1NUX0JJTl9GTEFHX0xBU1QgPDwgNCkKK30gR3N0UGlwZWxpbmVGbGFnczsKKworLyoqCisgKiBHc3RQaXBlbGluZToKKyAqIEBmaXhlZF9jbG9jazogVGhlIGZpeGVkIGNsb2NrIG9mIHRoZSBwaXBlbGluZSwgdXNlZCB3aGVuIAorICogICAgICAgICAgICAgICBHU1RfUElQRUxJTkVfRkxBR19GSVhFRF9DTE9DSyBpcyBzZXQuCisgKiBAc3RyZWFtX3RpbWU6IFRoZSBzdHJlYW0gdGltZSBvZiB0aGUgcGlwZWxpbmUuIEEgYmV0dGVyIG5hbWUgZm9yIHRoaXMKKyAqICAgICAgICAgcHJvcGVydHkgd291bGQgYmUgdGhlIHJ1bm5pbmdfdGltZSwgdGhlIHRvdGFsIHRpbWUgc3BlbnQgaW4gdGhlCisgKiAgICAgICAgIFBMQVlJTkcgc3RhdGUgd2l0aG91dCBiZWluZyBmbHVzaGVkLiAoZGVwcmVjYXRlZCwgdXNlIHRoZSBzdGFydF90aW1lCisgKiAgICAgICAgIG9uIEdzdEVsZW1lbnQpLgorICogQGRlbGF5OiBFeHRyYSBkZWxheSBhZGRlZCB0byBiYXNlX3RpbWUgdG8gY29tcGVuc2F0ZSBmb3IgY29tcHV0aW5nIGRlbGF5cworICogICAgICAgICB3aGVuIHNldHRpbmcgZWxlbWVudHMgdG8gUExBWUlORy4KKyAqCisgKiBUaGUgI0dzdFBpcGVsaW5lIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IF9Hc3RQaXBlbGluZSB7CisgIEdzdEJpbiAJIGJpbjsKKworICAvKjwgcHVibGljID4qLyAvKiB3aXRoIExPQ0sgKi8KKyAgR3N0Q2xvY2sgICAgICAqZml4ZWRfY2xvY2s7CisKKyAgR3N0Q2xvY2tUaW1lICAgc3RyZWFtX3RpbWU7CQorICBHc3RDbG9ja1RpbWUgICBkZWxheTsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgR3N0UGlwZWxpbmVQcml2YXRlICpwcml2OworCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkctMV07Cit9OworCitzdHJ1Y3QgX0dzdFBpcGVsaW5lQ2xhc3MgeworICBHc3RCaW5DbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOworfTsKKworR1R5cGUJCWdzdF9waXBlbGluZV9nZXRfdHlwZQkJKHZvaWQpOworR3N0RWxlbWVudCoJZ3N0X3BpcGVsaW5lX25ldwkJKGNvbnN0IGdjaGFyICpuYW1lKTsKKworR3N0QnVzKgkJZ3N0X3BpcGVsaW5lX2dldF9idXMJCShHc3RQaXBlbGluZSAqcGlwZWxpbmUpOworCit2b2lkICAgICAgICAgICAgZ3N0X3BpcGVsaW5lX3VzZV9jbG9jayAgICAgICAgICAoR3N0UGlwZWxpbmUgKnBpcGVsaW5lLCBHc3RDbG9jayAqY2xvY2spOworZ2Jvb2xlYW4gICAgICAgIGdzdF9waXBlbGluZV9zZXRfY2xvY2sgICAgICAgICAgKEdzdFBpcGVsaW5lICpwaXBlbGluZSwgR3N0Q2xvY2sgKmNsb2NrKTsKK0dzdENsb2NrKiAgICAgICBnc3RfcGlwZWxpbmVfZ2V0X2Nsb2NrICAgICAgICAgIChHc3RQaXBlbGluZSAqcGlwZWxpbmUpOwordm9pZCAgICAgICAgICAgIGdzdF9waXBlbGluZV9hdXRvX2Nsb2NrICAgICAgICAgKEdzdFBpcGVsaW5lICpwaXBlbGluZSk7CisKK3ZvaWQgICAgICAgICAgICBnc3RfcGlwZWxpbmVfc2V0X2RlbGF5ICAgICAgICAgIChHc3RQaXBlbGluZSAqcGlwZWxpbmUsIEdzdENsb2NrVGltZSBkZWxheSk7CitHc3RDbG9ja1RpbWUgICAgZ3N0X3BpcGVsaW5lX2dldF9kZWxheSAgICAgICAgICAoR3N0UGlwZWxpbmUgKnBpcGVsaW5lKTsKKwordm9pZCAgICAgICAgICAgIGdzdF9waXBlbGluZV9zZXRfYXV0b19mbHVzaF9idXMgKEdzdFBpcGVsaW5lICpwaXBlbGluZSwgZ2Jvb2xlYW4gYXV0b19mbHVzaCk7CitnYm9vbGVhbiAgICAgICAgZ3N0X3BpcGVsaW5lX2dldF9hdXRvX2ZsdXNoX2J1cyAoR3N0UGlwZWxpbmUgKnBpcGVsaW5lKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fR1NUX1BJUEVMSU5FX0hfXyAqLworCmRpZmYgLS1naXQgYS9nc3QvZ3N0cGx1Z2luLmMgYi9nc3QvZ3N0cGx1Z2luLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZiNWYwYwotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RwbHVnaW4uYwpAQCAtMCwwICsxLDE4NTkgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KKyAqCisgKiBnc3RwbHVnaW4uYzogUGx1Z2luIHN1YnN5c3RlbSBmb3IgbG9hZGluZyBlbGVtZW50cywgdHlwZXMsIGFuZCBsaWJzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoqCisgKiBTRUNUSU9OOmdzdHBsdWdpbgorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBDb250YWluZXIgZm9yIGZlYXR1cmVzIGxvYWRlZCBmcm9tIGEgc2hhcmVkIG9iamVjdCBtb2R1bGUKKyAqIEBzZWVfYWxzbzogI0dzdFBsdWdpbkZlYXR1cmUsICNHc3RFbGVtZW50RmFjdG9yeQorICoKKyAqIEdTdHJlYW1lciBpcyBleHRlbnNpYmxlLCBzbyAjR3N0RWxlbWVudCBpbnN0YW5jZXMgY2FuIGJlIGxvYWRlZCBhdCBydW50aW1lLgorICogQSBwbHVnaW4gc3lzdGVtIGNhbiBwcm92aWRlIG9uZSBvciBtb3JlIG9mIHRoZSBiYXNpYworICogPGFwcGxpY2F0aW9uPkdTdHJlYW1lcjwvYXBwbGljYXRpb24+ICNHc3RQbHVnaW5GZWF0dXJlIHN1YmNsYXNzZXMuCisgKgorICogQSBwbHVnaW4gc2hvdWxkIGV4cG9ydCBhIHN5bWJvbCA8c3ltYm9sPmdzdF9wbHVnaW5fZGVzYzwvc3ltYm9sPiB0aGF0IGlzIGEKKyAqIHN0cnVjdCBvZiB0eXBlICNHc3RQbHVnaW5EZXNjLgorICogdGhlIHBsdWdpbiBsb2FkZXIgd2lsbCBjaGVjayB0aGUgdmVyc2lvbiBvZiB0aGUgY29yZSBsaWJyYXJ5IHRoZSBwbHVnaW4gd2FzCisgKiBsaW5rZWQgYWdhaW5zdCBhbmQgd2lsbCBjcmVhdGUgYSBuZXcgI0dzdFBsdWdpbi4gSXQgd2lsbCB0aGVuIGNhbGwgdGhlCisgKiAjR3N0UGx1Z2luSW5pdEZ1bmMgZnVuY3Rpb24gdGhhdCB3YXMgcHJvdmlkZWQgaW4gdGhlCisgKiA8c3ltYm9sPmdzdF9wbHVnaW5fZGVzYzwvc3ltYm9sPi4KKyAqCisgKiBPbmNlIHlvdSBoYXZlIGEgaGFuZGxlIHRvIGEgI0dzdFBsdWdpbiAoZS5nLiBmcm9tIHRoZSAjR3N0UmVnaXN0cnkpLCB5b3UKKyAqIGNhbiBhZGQgYW55IG9iamVjdCB0aGF0IHN1YmNsYXNzZXMgI0dzdFBsdWdpbkZlYXR1cmUuCisgKgorICogVXN1YWxseSBwbHVnaW5zIGFyZSBhbHdheXMgYXV0b21hdGljbGx5IGxvYWRlZCBzbyB5b3UgZG9uJ3QgbmVlZCB0byBjYWxsCisgKiBnc3RfcGx1Z2luX2xvYWQoKSBleHBsaWNpdGx5IHRvIGJyaW5nIGl0IGludG8gbWVtb3J5LiBUaGVyZSBhcmUgb3B0aW9ucyB0bworICogc3RhdGljYWxseSBsaW5rIHBsdWdpbnMgdG8gYW4gYXBwIG9yIGV2ZW4gdXNlIEdTdHJlYW1lciB3aXRob3V0IGEgcGx1Z2luCisgKiByZXBvc2l0b3J5IGluIHdoaWNoIGNhc2UgZ3N0X3BsdWdpbl9sb2FkKCkgY2FuIGJlIG5lZWRlZCB0byBicmluZyB0aGUgcGx1Z2luCisgKiBpbnRvIG1lbW9yeS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBIQVZFX0RJUkVOVF9ICisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBHU1RfQ0FUX1BMVUdJTl9MT0FESU5HCisKK3N0YXRpYyBndWludCBfbnVtX3N0YXRpY19wbHVnaW5zOyAgICAgICAvKiAwICAgICovCitzdGF0aWMgR3N0UGx1Z2luRGVzYyAqX3N0YXRpY19wbHVnaW5zOyAgLyogTlVMTCAqLworc3RhdGljIGdib29sZWFuIF9nc3RfcGx1Z2luX2luaXRlZDsKK3N0YXRpYyBnY2hhciAqKl9wbHVnaW5fbG9hZGluZ193aGl0ZWxpc3Q7ICAgICAgIC8qIE5VTEwgKi8KKworLyogc3RhdGljIHZhcmlhYmxlcyBmb3Igc2VnZmF1bHQgaGFuZGxpbmcgb2YgcGx1Z2luIGxvYWRpbmcgKi8KK3N0YXRpYyBjaGFyICpfZ3N0X3BsdWdpbl9mYXVsdF9oYW5kbGVyX2ZpbGVuYW1lID0gTlVMTDsKKworLyogbGlzdCBvZiB2YWxpZCBsaWNlbnNlcy4KKyAqIE9uZSBvZiB0aGVzZSBtdXN0IGJlIHNwZWNpZmllZCBvciB0aGUgcGx1Z2luIHdvbid0IGJlIGxvYWRlZAorICogQ29udGFjdCBnc3RyZWFtZXItZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IGlmIHlvdXIgbGljZW5zZSBzaG91bGQgYmUKKyAqIGFkZGVkLgorICoKKyAqIEdQTDogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiBMR1BMOiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvbGVzc2VyLmh0bWwKKyAqIFFQTDogaHR0cDovL3d3dy50cm9sbHRlY2guY29tL2xpY2Vuc2VzL3FwbC5odG1sCisgKiBNUEw6IGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbW96aWxsYTEuMS5waHAKKyAqIE1JVC9YMTE6IGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwCisgKiAzLWNsYXVzZSBCU0Q6IGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwCisgKi8KK3N0YXRpYyBjb25zdCBnY2hhciAqdmFsaWRfbGljZW5zZXNbXSA9IHsKKyAgIkxHUEwiLCAgICAgICAgICAgICAgICAgICAgICAgLyogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICovCisgICJHUEwiLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICovCisgICJRUEwiLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRyb2xsdGVjaCBRdCBQdWJsaWMgTGljZW5zZSAqLworICAiR1BML1FQTCIsICAgICAgICAgICAgICAgICAgICAvKiBDb21iaS1saWNlbnNlIG9mIEdQTCArIFFQTCAqLworICAiTVBMIiwgICAgICAgICAgICAgICAgICAgICAgICAvKiBNUEwgMS4xIGxpY2Vuc2UgKi8KKyAgIkJTRCIsICAgICAgICAgICAgICAgICAgICAgICAgLyogMy1jbGF1c2UgQlNEIGxpY2Vuc2UgKi8KKyAgIk1JVC9YMTEiLCAgICAgICAgICAgICAgICAgICAgLyogTUlUL1gxMSBsaWNlbnNlICovCisgICJQcm9wcmlldGFyeSIsICAgICAgICAgICAgICAgIC8qIFByb3ByaWV0YXJ5IGxpY2Vuc2UgKi8KKyAgR1NUX0xJQ0VOU0VfVU5LTk9XTiwgICAgICAgICAgLyogc29tZSBvdGhlciBsaWNlbnNlICovCisgIE5VTEwKK307CisKK3N0YXRpYyBHc3RQbHVnaW4gKmdzdF9wbHVnaW5fcmVnaXN0ZXJfZnVuYyAoR3N0UGx1Z2luICogcGx1Z2luLAorICAgIGNvbnN0IEdzdFBsdWdpbkRlc2MgKiBkZXNjLCBncG9pbnRlciB1c2VyX2RhdGEpOworc3RhdGljIHZvaWQgZ3N0X3BsdWdpbl9kZXNjX2NvcHkgKEdzdFBsdWdpbkRlc2MgKiBkZXN0LAorICAgIGNvbnN0IEdzdFBsdWdpbkRlc2MgKiBzcmMpOworCitzdGF0aWMgdm9pZCBnc3RfcGx1Z2luX2V4dF9kZXBfZnJlZSAoR3N0UGx1Z2luRGVwICogZGVwKTsKKworR19ERUZJTkVfVFlQRSAoR3N0UGx1Z2luLCBnc3RfcGx1Z2luLCBHU1RfVFlQRV9PQkpFQ1QpOworCitzdGF0aWMgdm9pZAorZ3N0X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCit7CisgIHBsdWdpbi0+cHJpdiA9CisgICAgICBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKHBsdWdpbiwgR1NUX1RZUEVfUExVR0lOLCBHc3RQbHVnaW5Qcml2YXRlKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9wbHVnaW5fZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCit7CisgIEdzdFBsdWdpbiAqcGx1Z2luID0gR1NUX1BMVUdJTl9DQVNUIChvYmplY3QpOworICBHc3RSZWdpc3RyeSAqcmVnaXN0cnkgPSBnc3RfcmVnaXN0cnlfZ2V0X2RlZmF1bHQgKCk7CisgIEdMaXN0ICpnOworCisgIEdTVF9ERUJVRyAoImZpbmFsaXppbmcgcGx1Z2luICUiIEdTVF9QVFJfRk9STUFULCBwbHVnaW4pOworICBmb3IgKGcgPSByZWdpc3RyeS0+cGx1Z2luczsgZzsgZyA9IGctPm5leHQpIHsKKyAgICBpZiAoZy0+ZGF0YSA9PSAoZ3BvaW50ZXIpIHBsdWdpbikgeworICAgICAgZ193YXJuaW5nICgicmVtb3ZpbmcgcGx1Z2luIHRoYXQgaXMgc3RpbGwgaW4gcmVnaXN0cnkiKTsKKyAgICB9CisgIH0KKyAgZ19mcmVlIChwbHVnaW4tPmZpbGVuYW1lKTsKKyAgZ19mcmVlIChwbHVnaW4tPmJhc2VuYW1lKTsKKworICBnX2xpc3RfZm9yZWFjaCAocGx1Z2luLT5wcml2LT5kZXBzLCAoR0Z1bmMpIGdzdF9wbHVnaW5fZXh0X2RlcF9mcmVlLCBOVUxMKTsKKyAgZ19saXN0X2ZyZWUgKHBsdWdpbi0+cHJpdi0+ZGVwcyk7CisgIHBsdWdpbi0+cHJpdi0+ZGVwcyA9IE5VTEw7CisKKyAgaWYgKHBsdWdpbi0+cHJpdi0+Y2FjaGVfZGF0YSkgeworICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocGx1Z2luLT5wcml2LT5jYWNoZV9kYXRhKTsKKyAgfQorCisgIEdfT0JKRUNUX0NMQVNTIChnc3RfcGx1Z2luX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3BsdWdpbl9jbGFzc19pbml0IChHc3RQbHVnaW5DbGFzcyAqIGtsYXNzKQoreworICBHX09CSkVDVF9DTEFTUyAoa2xhc3MpLT5maW5hbGl6ZSA9IGdzdF9wbHVnaW5fZmluYWxpemU7CisKKyAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChrbGFzcywgc2l6ZW9mIChHc3RQbHVnaW5Qcml2YXRlKSk7Cit9CisKK0dRdWFyaworZ3N0X3BsdWdpbl9lcnJvcl9xdWFyayAodm9pZCkKK3sKKyAgc3RhdGljIEdRdWFyayBxdWFyayA9IDA7CisKKyAgaWYgKCFxdWFyaykKKyAgICBxdWFyayA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgiZ3N0X3BsdWdpbl9lcnJvciIpOworICByZXR1cm4gcXVhcms7Cit9CisKKy8qKgorICogZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWM6CisgKiBAbWFqb3JfdmVyc2lvbjogdGhlIG1ham9yIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBHU3RyZWFtZXIgY29yZSB0aGF0IHRoZQorICogICAgIHBsdWdpbiB3YXMgY29tcGlsZWQgZm9yLCB5b3UgY2FuIGp1c3QgdXNlIEdTVF9WRVJTSU9OX01BSk9SIGhlcmUKKyAqIEBtaW5vcl92ZXJzaW9uOiB0aGUgbWlub3IgdmVyc2lvbiBudW1iZXIgb2YgdGhlIEdTdHJlYW1lciBjb3JlIHRoYXQgdGhlCisgKiAgICAgcGx1Z2luIHdhcyBjb21waWxlZCBmb3IsIHlvdSBjYW4ganVzdCB1c2UgR1NUX1ZFUlNJT05fTUlOT1IgaGVyZQorICogQG5hbWU6IGEgdW5pcXVlIG5hbWUgb2YgdGhlIHBsdWdpbiAoaWRlYWxseSBwcmVmaXhlZCB3aXRoIGFuIGFwcGxpY2F0aW9uLSBvcgorICogICAgIGxpYnJhcnktc3BlY2lmaWMgbmFtZXNwYWNlIHByZWZpeCBpbiBvcmRlciB0byBhdm9pZCBuYW1lIGNvbmZsaWN0cyBpbgorICogICAgIGNhc2UgYSBzaW1pbGFyIHBsdWdpbiB3aXRoIHRoZSBzYW1lIG5hbWUgZXZlciBnZXRzIGFkZGVkIHRvIEdTdHJlYW1lcikKKyAqIEBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gb2YgdGhlIHBsdWdpbgorICogQGluaXRfZnVuYzogKHNjb3BlIGNhbGwpOiBwb2ludGVyIHRvIHRoZSBpbml0IGZ1bmN0aW9uIG9mIHRoaXMgcGx1Z2luLgorICogQHZlcnNpb246IHZlcnNpb24gc3RyaW5nIG9mIHRoZSBwbHVnaW4KKyAqIEBsaWNlbnNlOiBlZmZlY3RpdmUgbGljZW5zZSBvZiBwbHVnaW4uIE11c3QgYmUgb25lIG9mIHRoZSBhcHByb3ZlZCBsaWNlbnNlcworICogICAgIChzZWUgI0dzdFBsdWdpbkRlc2MgYWJvdmUpIG9yIHRoZSBwbHVnaW4gd2lsbCBub3QgYmUgcmVnaXN0ZXJlZC4KKyAqIEBzb3VyY2U6IHNvdXJjZSBtb2R1bGUgcGx1Z2luIGJlbG9uZ3MgdG8KKyAqIEBwYWNrYWdlOiBzaGlwcGVkIHBhY2thZ2UgcGx1Z2luIGJlbG9uZ3MgdG8KKyAqIEBvcmlnaW46IFVSTCB0byBwcm92aWRlciBvZiBwbHVnaW4KKyAqCisgKiBSZWdpc3RlcnMgYSBzdGF0aWMgcGx1Z2luLCBpZS4gYSBwbHVnaW4gd2hpY2ggaXMgcHJpdmF0ZSB0byBhbiBhcHBsaWNhdGlvbgorICogb3IgbGlicmFyeSBhbmQgY29udGFpbmVkIHdpdGhpbiB0aGUgYXBwbGljYXRpb24gb3IgbGlicmFyeSAoYXMgb3Bwb3NlZCB0bworICogYmVpbmcgc2hpcHBlZCBhcyBhIHNlcGFyYXRlIG1vZHVsZSBmaWxlKS4KKyAqCisgKiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCBHU3RyZWFtZXIgaGFzIGJlZW4gaW5pdGlhbGlzZWQgKHdpdGggZ3N0X2luaXQoKSBvcgorICogdmlhIGdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXAoKSkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBwbHVnaW4gd2FzIHJlZ2lzdGVyZWQgY29ycmVjdGx5LCBvdGhlcndpc2UgRkFMU0UuCisgKgorICogU2luY2U6IDAuMTAuMTYKKyAqLworZ2Jvb2xlYW4KK2dzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljIChnaW50IG1ham9yX3ZlcnNpb24sIGdpbnQgbWlub3JfdmVyc2lvbiwKKyAgICBjb25zdCBnY2hhciAqIG5hbWUsIGNvbnN0IGdjaGFyICogZGVzY3JpcHRpb24sIEdzdFBsdWdpbkluaXRGdW5jIGluaXRfZnVuYywKKyAgICBjb25zdCBnY2hhciAqIHZlcnNpb24sIGNvbnN0IGdjaGFyICogbGljZW5zZSwgY29uc3QgZ2NoYXIgKiBzb3VyY2UsCisgICAgY29uc3QgZ2NoYXIgKiBwYWNrYWdlLCBjb25zdCBnY2hhciAqIG9yaWdpbikKK3sKKyAgR3N0UGx1Z2luRGVzYyBkZXNjID0geyBtYWpvcl92ZXJzaW9uLCBtaW5vcl92ZXJzaW9uLCBuYW1lLCBkZXNjcmlwdGlvbiwKKyAgICBpbml0X2Z1bmMsIHZlcnNpb24sIGxpY2Vuc2UsIHNvdXJjZSwgcGFja2FnZSwgb3JpZ2luLCBOVUxMLAorICB9OworICBHc3RQbHVnaW4gKnBsdWdpbjsKKyAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG5hbWUgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGVzY3JpcHRpb24gIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoaW5pdF9mdW5jICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZlcnNpb24gIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAobGljZW5zZSAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzb3VyY2UgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAocGFja2FnZSAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChvcmlnaW4gIT0gTlVMTCwgRkFMU0UpOworCisgIC8qIG1ha2Ugc3VyZSBnc3RfaW5pdCgpIGhhcyBiZWVuIGNhbGxlZCAqLworICBnX3JldHVybl92YWxfaWZfZmFpbCAoX2dzdF9wbHVnaW5faW5pdGVkICE9IEZBTFNFLCBGQUxTRSk7CisKKyAgR1NUX0xPRyAoImF0dGVtcHRpbmcgdG8gbG9hZCBzdGF0aWMgcGx1Z2luIFwiJXNcIiBub3cuLi4iLCBuYW1lKTsKKyAgcGx1Z2luID0gZ19vYmplY3RfbmV3diAoR1NUX1RZUEVfUExVR0lOLCAwLCBOVUxMKTsKKyAgaWYgKGdzdF9wbHVnaW5fcmVnaXN0ZXJfZnVuYyAocGx1Z2luLCAmZGVzYywgTlVMTCkgIT0gTlVMTCkgeworICAgIEdTVF9JTkZPICgicmVnaXN0ZXJlZCBzdGF0aWMgcGx1Z2luIFwiJXNcIiIsIG5hbWUpOworICAgIHJlcyA9IGdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2FkZF9wbHVnaW4gKHBsdWdpbik7CisgICAgR1NUX0lORk8gKCJhZGRlZCBzdGF0aWMgcGx1Z2luIFwiJXNcIiwgcmVzdWx0OiAlZCIsIG5hbWUsIHJlcyk7CisgIH0KKyAgcmV0dXJuIHJlczsKK30KKworLyoqCisgKiBnc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpY19mdWxsOgorICogQG1ham9yX3ZlcnNpb246IHRoZSBtYWpvciB2ZXJzaW9uIG51bWJlciBvZiB0aGUgR1N0cmVhbWVyIGNvcmUgdGhhdCB0aGUKKyAqICAgICBwbHVnaW4gd2FzIGNvbXBpbGVkIGZvciwgeW91IGNhbiBqdXN0IHVzZSBHU1RfVkVSU0lPTl9NQUpPUiBoZXJlCisgKiBAbWlub3JfdmVyc2lvbjogdGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBHU3RyZWFtZXIgY29yZSB0aGF0IHRoZQorICogICAgIHBsdWdpbiB3YXMgY29tcGlsZWQgZm9yLCB5b3UgY2FuIGp1c3QgdXNlIEdTVF9WRVJTSU9OX01JTk9SIGhlcmUKKyAqIEBuYW1lOiBhIHVuaXF1ZSBuYW1lIG9mIHRoZSBwbHVnaW4gKGlkZWFsbHkgcHJlZml4ZWQgd2l0aCBhbiBhcHBsaWNhdGlvbi0gb3IKKyAqICAgICBsaWJyYXJ5LXNwZWNpZmljIG5hbWVzcGFjZSBwcmVmaXggaW4gb3JkZXIgdG8gYXZvaWQgbmFtZSBjb25mbGljdHMgaW4KKyAqICAgICBjYXNlIGEgc2ltaWxhciBwbHVnaW4gd2l0aCB0aGUgc2FtZSBuYW1lIGV2ZXIgZ2V0cyBhZGRlZCB0byBHU3RyZWFtZXIpCisgKiBAZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uIG9mIHRoZSBwbHVnaW4KKyAqIEBpbml0X2Z1bGxfZnVuYzogKHNjb3BlIGNhbGwpOiBwb2ludGVyIHRvIHRoZSBpbml0IGZ1bmN0aW9uIHdpdGggdXNlciBkYXRhCisgKiAgICAgb2YgdGhpcyBwbHVnaW4uCisgKiBAdmVyc2lvbjogdmVyc2lvbiBzdHJpbmcgb2YgdGhlIHBsdWdpbgorICogQGxpY2Vuc2U6IGVmZmVjdGl2ZSBsaWNlbnNlIG9mIHBsdWdpbi4gTXVzdCBiZSBvbmUgb2YgdGhlIGFwcHJvdmVkIGxpY2Vuc2VzCisgKiAgICAgKHNlZSAjR3N0UGx1Z2luRGVzYyBhYm92ZSkgb3IgdGhlIHBsdWdpbiB3aWxsIG5vdCBiZSByZWdpc3RlcmVkLgorICogQHNvdXJjZTogc291cmNlIG1vZHVsZSBwbHVnaW4gYmVsb25ncyB0bworICogQHBhY2thZ2U6IHNoaXBwZWQgcGFja2FnZSBwbHVnaW4gYmVsb25ncyB0bworICogQG9yaWdpbjogVVJMIHRvIHByb3ZpZGVyIG9mIHBsdWdpbgorICogQHVzZXJfZGF0YTogZ3BvaW50ZXIgdG8gdXNlciBkYXRhCisgKgorICogUmVnaXN0ZXJzIGEgc3RhdGljIHBsdWdpbiwgaWUuIGEgcGx1Z2luIHdoaWNoIGlzIHByaXZhdGUgdG8gYW4gYXBwbGljYXRpb24KKyAqIG9yIGxpYnJhcnkgYW5kIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGFwcGxpY2F0aW9uIG9yIGxpYnJhcnkgKGFzIG9wcG9zZWQgdG8KKyAqIGJlaW5nIHNoaXBwZWQgYXMgYSBzZXBhcmF0ZSBtb2R1bGUgZmlsZSkgd2l0aCBhICNHc3RQbHVnaW5Jbml0RnVsbEZ1bmMKKyAqIHdoaWNoIGFsbG93cyB1c2VyIGRhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbiAodXNlZnVsCisgKiBmb3IgYmluZGluZ3MpLgorICoKKyAqIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IEdTdHJlYW1lciBoYXMgYmVlbiBpbml0aWFsaXNlZCAod2l0aCBnc3RfaW5pdCgpIG9yCisgKiB2aWEgZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCgpKSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIHBsdWdpbiB3YXMgcmVnaXN0ZXJlZCBjb3JyZWN0bHksIG90aGVyd2lzZSBGQUxTRS4KKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICoKKyAqLworZ2Jvb2xlYW4KK2dzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljX2Z1bGwgKGdpbnQgbWFqb3JfdmVyc2lvbiwgZ2ludCBtaW5vcl92ZXJzaW9uLAorICAgIGNvbnN0IGdjaGFyICogbmFtZSwgY29uc3QgZ2NoYXIgKiBkZXNjcmlwdGlvbiwKKyAgICBHc3RQbHVnaW5Jbml0RnVsbEZ1bmMgaW5pdF9mdWxsX2Z1bmMsIGNvbnN0IGdjaGFyICogdmVyc2lvbiwKKyAgICBjb25zdCBnY2hhciAqIGxpY2Vuc2UsIGNvbnN0IGdjaGFyICogc291cmNlLCBjb25zdCBnY2hhciAqIHBhY2thZ2UsCisgICAgY29uc3QgZ2NoYXIgKiBvcmlnaW4sIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgR3N0UGx1Z2luRGVzYyBkZXNjID0geyBtYWpvcl92ZXJzaW9uLCBtaW5vcl92ZXJzaW9uLCBuYW1lLCBkZXNjcmlwdGlvbiwKKyAgICAoR3N0UGx1Z2luSW5pdEZ1bmMpIGluaXRfZnVsbF9mdW5jLCB2ZXJzaW9uLCBsaWNlbnNlLCBzb3VyY2UsIHBhY2thZ2UsCisgICAgb3JpZ2luLCBOVUxMLAorICB9OworICBHc3RQbHVnaW4gKnBsdWdpbjsKKyAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG5hbWUgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGVzY3JpcHRpb24gIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoaW5pdF9mdWxsX2Z1bmMgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAodmVyc2lvbiAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChsaWNlbnNlICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNvdXJjZSAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwYWNrYWdlICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG9yaWdpbiAhPSBOVUxMLCBGQUxTRSk7CisKKyAgLyogbWFrZSBzdXJlIGdzdF9pbml0KCkgaGFzIGJlZW4gY2FsbGVkICovCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChfZ3N0X3BsdWdpbl9pbml0ZWQgIT0gRkFMU0UsIEZBTFNFKTsKKworICBHU1RfTE9HICgiYXR0ZW1wdGluZyB0byBsb2FkIHN0YXRpYyBwbHVnaW4gXCIlc1wiIG5vdy4uLiIsIG5hbWUpOworICBwbHVnaW4gPSBnX29iamVjdF9uZXd2IChHU1RfVFlQRV9QTFVHSU4sIDAsIE5VTEwpOworICBpZiAoZ3N0X3BsdWdpbl9yZWdpc3Rlcl9mdW5jIChwbHVnaW4sICZkZXNjLCB1c2VyX2RhdGEpICE9IE5VTEwpIHsKKyAgICBHU1RfSU5GTyAoInJlZ2lzdGVyZWQgc3RhdGljIHBsdWdpbiBcIiVzXCIiLCBuYW1lKTsKKyAgICByZXMgPSBnc3RfZGVmYXVsdF9yZWdpc3RyeV9hZGRfcGx1Z2luIChwbHVnaW4pOworICAgIEdTVF9JTkZPICgiYWRkZWQgc3RhdGljIHBsdWdpbiBcIiVzXCIsIHJlc3VsdDogJWQiLCBuYW1lLCByZXMpOworICB9CisgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK19wcml2X2dzdF9wbHVnaW5faW5pdGlhbGl6ZSAodm9pZCkKK3sKKyAgY29uc3QgZ2NoYXIgKndoaXRlbGlzdDsKKyAgZ3VpbnQgaTsKKworICBfZ3N0X3BsdWdpbl9pbml0ZWQgPSBUUlVFOworCisgIHdoaXRlbGlzdCA9IGdfZ2V0ZW52ICgiR1NUX1BMVUdJTl9MT0FESU5HX1dISVRFTElTVCIpOworICBpZiAod2hpdGVsaXN0ICE9IE5VTEwgJiYgKndoaXRlbGlzdCAhPSAnXDAnKSB7CisgICAgX3BsdWdpbl9sb2FkaW5nX3doaXRlbGlzdCA9IGdfc3Ryc3BsaXQgKHdoaXRlbGlzdCwKKyAgICAgICAgR19TRUFSQ0hQQVRIX1NFUEFSQVRPUl9TLCAtMSk7CisgICAgZm9yIChpID0gMDsgX3BsdWdpbl9sb2FkaW5nX3doaXRlbGlzdFtpXSAhPSBOVUxMOyArK2kpIHsKKyAgICAgIEdTVF9JTkZPICgicGx1Z2lucyB3aGl0ZWxpc3QgZW50cnk6ICVzIiwgX3BsdWdpbl9sb2FkaW5nX3doaXRlbGlzdFtpXSk7CisgICAgfQorICB9CisKKyAgLyogbm93IHJlZ2lzdGVyIGFsbCBzdGF0aWMgcGx1Z2lucyAqLworICBHU1RfSU5GTyAoInJlZ2lzdGVyaW5nICV1IHN0YXRpYyBwbHVnaW5zIiwgX251bV9zdGF0aWNfcGx1Z2lucyk7CisgIGZvciAoaSA9IDA7IGkgPCBfbnVtX3N0YXRpY19wbHVnaW5zOyArK2kpIHsKKyAgICBnc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpYyAoX3N0YXRpY19wbHVnaW5zW2ldLm1ham9yX3ZlcnNpb24sCisgICAgICAgIF9zdGF0aWNfcGx1Z2luc1tpXS5taW5vcl92ZXJzaW9uLCBfc3RhdGljX3BsdWdpbnNbaV0ubmFtZSwKKyAgICAgICAgX3N0YXRpY19wbHVnaW5zW2ldLmRlc2NyaXB0aW9uLCBfc3RhdGljX3BsdWdpbnNbaV0ucGx1Z2luX2luaXQsCisgICAgICAgIF9zdGF0aWNfcGx1Z2luc1tpXS52ZXJzaW9uLCBfc3RhdGljX3BsdWdpbnNbaV0ubGljZW5zZSwKKyAgICAgICAgX3N0YXRpY19wbHVnaW5zW2ldLnNvdXJjZSwgX3N0YXRpY19wbHVnaW5zW2ldLnBhY2thZ2UsCisgICAgICAgIF9zdGF0aWNfcGx1Z2luc1tpXS5vcmlnaW4pOworICB9CisKKyAgaWYgKF9zdGF0aWNfcGx1Z2lucykgeworICAgIGZyZWUgKF9zdGF0aWNfcGx1Z2lucyk7CisgICAgX3N0YXRpY19wbHVnaW5zID0gTlVMTDsKKyAgICBfbnVtX3N0YXRpY19wbHVnaW5zID0gMDsKKyAgfQorfQorCisvKiBXaGl0ZWxpc3QgZW50cnkgZm9ybWF0OgorICoKKyAqICAgcGx1Z2luMSxwbHVnaW4yQHBhdGhwcmVmaXggb3IKKyAqICAgcGx1Z2luMSxwbHVnaW4yQCogb3IganVzdAorICogICBwbHVnaW4xLHBsdWdpbjIgb3IKKyAqICAgc291cmNlLXBhY2thZ2VAcGF0aHByZWZpeCBvcgorICogICBzb3VyY2UtcGFja2FnZUAqIG9yIGp1c3QKKyAqICAgc291cmNlLXBhY2thZ2UKKyAqCisgKiBpZS4gdGhlIGJpdCBiZWZvcmUgdGhlIHBhdGggd2lsbCBiZSBjaGVja2VkIGFnYWluc3QgYm90aCB0aGUgcGx1Z2luCisgKiBuYW1lIGFuZCB0aGUgcGx1Z2luJ3Mgc291cmNlIHBhY2thZ2UgbmFtZSwgdG8ga2VlcCB0aGUgZm9ybWF0IHNpbXBsZS4KKyAqLworc3RhdGljIGdib29sZWFuCitnc3RfcGx1Z2luX2Rlc2NfbWF0Y2hlc193aGl0ZWxpc3RfZW50cnkgKEdzdFBsdWdpbkRlc2MgKiBkZXNjLAorICAgIGNvbnN0IGdjaGFyICogZmlsZW5hbWUsIGNvbnN0IGdjaGFyICogcGF0dGVybikKK3sKKyAgY29uc3QgZ2NoYXIgKnNlcDsKKyAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7CisgIGdjaGFyICpuYW1lOworCisgIEdTVF9MT0cgKCJXaGl0ZWxpc3QgcGF0dGVybiAnJXMnLCBwbHVnaW46ICVzIG9mICVzQCVzIiwgcGF0dGVybiwgZGVzYy0+bmFtZSwKKyAgICAgIGRlc2MtPnNvdXJjZSwgR1NUX1NUUl9OVUxMIChmaWxlbmFtZSkpOworCisgIC8qIGRvIHdlIGhhdmUgYSBwYXRoIHByZWZpeD8gKi8KKyAgc2VwID0gc3RyY2hyIChwYXR0ZXJuLCAnQCcpOworICBpZiAoc2VwICE9IE5VTEwgJiYgc3RyY21wIChzZXAsICJAKiIpICE9IDAgJiYgc3RyY21wIChzZXAsICJAIikgIT0gMCkgeworICAgIC8qIHBhdGhzIGFyZSBub3QgY2Fub25pY2FsaXNlZCBvciB0cmVhdGVkIHdpdGggcmVhbHBhdGgoKSBoZXJlLiBUaGlzCisgICAgICogc2hvdWxkIGJlIGdvb2QgZW5vdWdoIGZvciBvdXIgdXNlIGNhc2UsIHNpbmNlIHdlIGp1c3QgdXNlIHRoZSBwYXRocworICAgICAqIGF1dG90b29scyB1c2VzLCBhbmQgdGhvc2Ugd2lsbCBiZSBjb25zdHJ1Y3RlZCBmcm9tIHRoZSBzYW1lIHByZWZpeC4gKi8KKyAgICBpZiAoZmlsZW5hbWUgIT0gTlVMTCAmJiAhZ19zdHJfaGFzX3ByZWZpeCAoZmlsZW5hbWUsIHNlcCArIDEpKQorICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgR1NUX0xPRyAoIiVzIG1hdGNoZXMgcGF0aCBwcmVmaXggJXMiLCBHU1RfU1RSX05VTEwgKGZpbGVuYW1lKSwgc2VwICsgMSk7CisgIH0KKworICBpZiAoc2VwICE9IE5VTEwpIHsKKyAgICBuYW1lID0gZ19zdHJuZHVwIChwYXR0ZXJuLCAoZ3NpemUpIChzZXAgLSBwYXR0ZXJuKSk7CisgIH0gZWxzZSB7CisgICAgbmFtZSA9IGdfc3RyZHVwIChwYXR0ZXJuKTsKKyAgfQorCisgIGdfc3Ryc3RyaXAgKG5hbWUpOworICBpZiAoIWdfYXNjaWlfaXNhbG51bSAoKm5hbWUpKSB7CisgICAgR1NUX1dBUk5JTkcgKCJJbnZhbGlkIHdoaXRlbGlzdCBwYXR0ZXJuOiAlcyIsIHBhdHRlcm4pOworICAgIGdvdG8gZG9uZTsKKyAgfQorCisgIC8qIG5vdyBjaGVjayBwbHVnaW4gbmFtZXMgLyBzb3VyY2UgcGFja2FnZSBuYW1lICovCisgIGlmIChzdHJjaHIgKG5hbWUsICcsJykgPT0gTlVMTCkgeworICAgIC8qIG9ubHkgYSBzaW5nbGUgbmFtZTogZWl0aGVyIGEgcGx1Z2luIG5hbWUgb3IgdGhlIHNvdXJjZSBwYWNrYWdlIG5hbWUgKi8KKyAgICByZXQgPSAoc3RyY21wIChkZXNjLT5zb3VyY2UsIG5hbWUpID09IDAgfHwgc3RyY21wIChkZXNjLT5uYW1lLCBuYW1lKSA9PSAwKTsKKyAgfSBlbHNlIHsKKyAgICBnY2hhciAqKm4sICoqbmFtZXM7CisKKyAgICAvKiBtdWx0aXBsZSBuYW1lczogYXNzdW1lIHRoZXNlIGFyZSBwbHVnaW4gbmFtZXMgKi8KKyAgICBuYW1lcyA9IGdfc3Ryc3BsaXQgKG5hbWUsICIsIiwgLTEpOworICAgIGZvciAobiA9IG5hbWVzOyBuICE9IE5VTEwgJiYgKm4gIT0gTlVMTDsgKytuKSB7CisgICAgICBnX3N0cnN0cmlwICgqbik7CisgICAgICBpZiAoc3RyY21wIChkZXNjLT5uYW1lLCAqbikgPT0gMCkgeworICAgICAgICByZXQgPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgZ19zdHJmcmVldiAobmFtZXMpOworICB9CisKKyAgR1NUX0xPRyAoInBsdWdpbiAvIHNvdXJjZSBwYWNrYWdlIG5hbWUgbWF0Y2g6ICVkIiwgcmV0KTsKKworZG9uZToKKworICBnX2ZyZWUgKG5hbWUpOworICByZXR1cm4gcmV0OworfQorCitnYm9vbGVhbgorcHJpdl9nc3RfcGx1Z2luX2Rlc2NfaXNfd2hpdGVsaXN0ZWQgKEdzdFBsdWdpbkRlc2MgKiBkZXNjLAorICAgIGNvbnN0IGdjaGFyICogZmlsZW5hbWUpCit7CisgIGdjaGFyICoqZW50cnk7CisKKyAgaWYgKF9wbHVnaW5fbG9hZGluZ193aGl0ZWxpc3QgPT0gTlVMTCkKKyAgICByZXR1cm4gVFJVRTsKKworICBmb3IgKGVudHJ5ID0gX3BsdWdpbl9sb2FkaW5nX3doaXRlbGlzdDsgKmVudHJ5ICE9IE5VTEw7ICsrZW50cnkpIHsKKyAgICBpZiAoZ3N0X3BsdWdpbl9kZXNjX21hdGNoZXNfd2hpdGVsaXN0X2VudHJ5IChkZXNjLCBmaWxlbmFtZSwgKmVudHJ5KSkgeworICAgICAgR1NUX0xPRyAoIlBsdWdpbiAlcyBpcyBpbiB3aGl0ZWxpc3QiLCBmaWxlbmFtZSk7CisgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgIH0KKworICBHU1RfTE9HICgiUGx1Z2luICVzIChwYWNrYWdlICVzLCBmaWxlICVzKSBub3QgaW4gd2hpdGVsaXN0IiwgZGVzYy0+bmFtZSwKKyAgICAgIGRlc2MtPnNvdXJjZSwgZmlsZW5hbWUpOworICByZXR1cm4gRkFMU0U7Cit9CisKK2dib29sZWFuCitwcml2X2dzdF9wbHVnaW5fbG9hZGluZ19oYXZlX3doaXRlbGlzdCAodm9pZCkKK3sKKyAgcmV0dXJuIChfcGx1Z2luX2xvYWRpbmdfd2hpdGVsaXN0ICE9IE5VTEwpOworfQorCitndWludDMyCitwcml2X2dzdF9wbHVnaW5fbG9hZGluZ19nZXRfd2hpdGVsaXN0X2hhc2ggKHZvaWQpCit7CisgIGd1aW50MzIgaGFzaCA9IDA7CisKKyAgaWYgKF9wbHVnaW5fbG9hZGluZ193aGl0ZWxpc3QgIT0gTlVMTCkgeworICAgIGdjaGFyICoqdzsKKworICAgIGZvciAodyA9IF9wbHVnaW5fbG9hZGluZ193aGl0ZWxpc3Q7ICp3ICE9IE5VTEw7ICsrdykKKyAgICAgIGhhc2ggPSAoaGFzaCA8PCAxKSBeIGdfc3RyX2hhc2ggKCp3KTsKKyAgfQorCisgIHJldHVybiBoYXNoOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGNvdWxkIGJlIGV4dGVuZGVkIHRvIGNoZWNrIGlmIHRoZSBwbHVnaW4gbGljZW5zZSBtYXRjaGVzIHRoZQorICogYXBwbGljYXRpb25zIGxpY2Vuc2UgKHdvdWxkIHJlcXVpcmUgdGhlIGFwcCB0byByZWdpc3RlciBpdHMgbGljZW5zZSBzb21laG93KS4KKyAqIFdlJ2xsIHdhaXQgZm9yIHNvbWVvbmUgd2hvJ3MgaW50ZXJlc3RlZCBpbiBpdCB0byBjb2RlIGl0IDopCisgKi8KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3BsdWdpbl9jaGVja19saWNlbnNlIChjb25zdCBnY2hhciAqIGxpY2Vuc2UpCit7CisgIGNvbnN0IGdjaGFyICoqY2hlY2tfbGljZW5zZSA9IHZhbGlkX2xpY2Vuc2VzOworCisgIGdfYXNzZXJ0IChjaGVja19saWNlbnNlKTsKKworICB3aGlsZSAoKmNoZWNrX2xpY2Vuc2UpIHsKKyAgICBpZiAoc3RyY21wIChsaWNlbnNlLCAqY2hlY2tfbGljZW5zZSkgPT0gMCkKKyAgICAgIHJldHVybiBUUlVFOworICAgIGNoZWNrX2xpY2Vuc2UrKzsKKyAgfQorICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3BsdWdpbl9jaGVja192ZXJzaW9uIChnaW50IG1ham9yLCBnaW50IG1pbm9yKQoreworICAvKiByZXR1cm4gTlVMTCBpZiB0aGUgbWFqb3IgYW5kIG1pbm9yIHZlcnNpb24gbnVtYmVycyBhcmUgbm90IGNvbXBhdGlibGUgKi8KKyAgLyogd2l0aCBvdXJzLiAqLworICBpZiAobWFqb3IgIT0gR1NUX1ZFUlNJT05fTUFKT1IgfHwgbWlub3IgIT0gR1NUX1ZFUlNJT05fTUlOT1IpCisgICAgcmV0dXJuIEZBTFNFOworCisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgR3N0UGx1Z2luICoKK2dzdF9wbHVnaW5fcmVnaXN0ZXJfZnVuYyAoR3N0UGx1Z2luICogcGx1Z2luLCBjb25zdCBHc3RQbHVnaW5EZXNjICogZGVzYywKKyAgICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIGlmICghZ3N0X3BsdWdpbl9jaGVja192ZXJzaW9uIChkZXNjLT5tYWpvcl92ZXJzaW9uLCBkZXNjLT5taW5vcl92ZXJzaW9uKSkgeworICAgIGlmIChHU1RfQ0FUX0RFRkFVTFQpCisgICAgICBHU1RfV0FSTklORyAoInBsdWdpbiBcIiVzXCIgaGFzIGluY29tcGF0aWJsZSB2ZXJzaW9uLCBub3QgbG9hZGluZyIsCisgICAgICAgICAgcGx1Z2luLT5maWxlbmFtZSk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICBpZiAoIWRlc2MtPmxpY2Vuc2UgfHwgIWRlc2MtPmRlc2NyaXB0aW9uIHx8ICFkZXNjLT5zb3VyY2UgfHwKKyAgICAgICFkZXNjLT5wYWNrYWdlIHx8ICFkZXNjLT5vcmlnaW4pIHsKKyAgICBpZiAoR1NUX0NBVF9ERUZBVUxUKQorICAgICAgR1NUX1dBUk5JTkcgKCJwbHVnaW4gXCIlc1wiIGhhcyBpbmNvcnJlY3QgR3N0UGx1Z2luRGVzYywgbm90IGxvYWRpbmciLAorICAgICAgICAgIHBsdWdpbi0+ZmlsZW5hbWUpOworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgaWYgKCFnc3RfcGx1Z2luX2NoZWNrX2xpY2Vuc2UgKGRlc2MtPmxpY2Vuc2UpKSB7CisgICAgaWYgKEdTVF9DQVRfREVGQVVMVCkKKyAgICAgIEdTVF9XQVJOSU5HICgicGx1Z2luIFwiJXNcIiBoYXMgaW52YWxpZCBsaWNlbnNlIFwiJXNcIiwgbm90IGxvYWRpbmciLAorICAgICAgICAgIHBsdWdpbi0+ZmlsZW5hbWUsIGRlc2MtPmxpY2Vuc2UpOworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgaWYgKEdTVF9DQVRfREVGQVVMVCkKKyAgICBHU1RfTE9HICgicGx1Z2luIFwiJXNcIiBsb29rcyBnb29kIiwgR1NUX1NUUl9OVUxMIChwbHVnaW4tPmZpbGVuYW1lKSk7CisKKyAgZ3N0X3BsdWdpbl9kZXNjX2NvcHkgKCZwbHVnaW4tPmRlc2MsIGRlc2MpOworCisgIC8qIG1ha2UgcmVzaWRlbnQgc28gd2UncmUgcmVhbGx5IHN1cmUgaXQgbmV2ZXIgZ2V0cyB1bmxvYWRlZCBhZ2Fpbi4KKyAgICogVGhlb3JldGljYWxseSB0aGlzIGlzIG5vdCBuZWVkZWQsIGJ1dCBwcmFjdGljYWxseSBpdCBkb2Vzbid0IGh1cnQuCisgICAqIEFuZCB3ZSdyZSByYXRoZXIgc2FmZSB0aGFuIHNvcnJ5LiAqLworICBpZiAocGx1Z2luLT5tb2R1bGUpCisgICAgZ19tb2R1bGVfbWFrZV9yZXNpZGVudCAocGx1Z2luLT5tb2R1bGUpOworCisgIGlmICh1c2VyX2RhdGEpIHsKKyAgICBpZiAoISgoKEdzdFBsdWdpbkluaXRGdWxsRnVuYykgKGRlc2MtPnBsdWdpbl9pbml0KSkgKHBsdWdpbiwgdXNlcl9kYXRhKSkpIHsKKyAgICAgIGlmIChHU1RfQ0FUX0RFRkFVTFQpCisgICAgICAgIEdTVF9XQVJOSU5HICgicGx1Z2luIFwiJXNcIiBmYWlsZWQgdG8gaW5pdGlhbGlzZSIsIHBsdWdpbi0+ZmlsZW5hbWUpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICB9IGVsc2UgeworICAgIGlmICghKChkZXNjLT5wbHVnaW5faW5pdCkgKHBsdWdpbikpKSB7CisgICAgICBpZiAoR1NUX0NBVF9ERUZBVUxUKQorICAgICAgICBHU1RfV0FSTklORyAoInBsdWdpbiBcIiVzXCIgZmFpbGVkIHRvIGluaXRpYWxpc2UiLCBwbHVnaW4tPmZpbGVuYW1lKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgfQorCisgIGlmIChHU1RfQ0FUX0RFRkFVTFQpCisgICAgR1NUX0xPRyAoInBsdWdpbiBcIiVzXCIgaW5pdGlhbGlzZWQiLCBHU1RfU1RSX05VTEwgKHBsdWdpbi0+ZmlsZW5hbWUpKTsKKworICByZXR1cm4gcGx1Z2luOworfQorCisjaWZkZWYgSEFWRV9TSUdBQ1RJT04KK3N0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZGFjdGlvbjsKK3N0YXRpYyBnYm9vbGVhbiBfZ3N0X3BsdWdpbl9mYXVsdF9oYW5kbGVyX2lzX3NldHVwID0gRkFMU0U7CisKKy8qCisgKiBfZ3N0X3BsdWdpbl9mYXVsdF9oYW5kbGVyX3Jlc3RvcmU6CisgKiBzZWdmYXVsdCBoYW5kbGVyIHJlc3RvcmVyCisgKi8KK3N0YXRpYyB2b2lkCitfZ3N0X3BsdWdpbl9mYXVsdF9oYW5kbGVyX3Jlc3RvcmUgKHZvaWQpCit7CisgIGlmICghX2dzdF9wbHVnaW5fZmF1bHRfaGFuZGxlcl9pc19zZXR1cCkKKyAgICByZXR1cm47CisKKyAgX2dzdF9wbHVnaW5fZmF1bHRfaGFuZGxlcl9pc19zZXR1cCA9IEZBTFNFOworCisgIHNpZ2FjdGlvbiAoU0lHU0VHViwgJm9sZGFjdGlvbiwgTlVMTCk7Cit9CisKKy8qCisgKiBfZ3N0X3BsdWdpbl9mYXVsdF9oYW5kbGVyX3NpZ2hhbmRsZXI6CisgKiBzZWdmYXVsdCBoYW5kbGVyIGltcGxlbWVudGF0aW9uCisgKi8KK3N0YXRpYyB2b2lkCitfZ3N0X3BsdWdpbl9mYXVsdF9oYW5kbGVyX3NpZ2hhbmRsZXIgKGludCBzaWdudW0pCit7CisgIC8qIFdlIG5lZWQgdG8gcmVzdG9yZSB0aGUgZmF1bHQgaGFuZGxlciBvciB3ZSdsbCBrZWVwIGdldHRpbmcgaXQgKi8KKyAgX2dzdF9wbHVnaW5fZmF1bHRfaGFuZGxlcl9yZXN0b3JlICgpOworCisgIHN3aXRjaCAoc2lnbnVtKSB7CisgICAgY2FzZSBTSUdTRUdWOgorICAgICAgZ19wcmludCAoIlxuRVJST1I6ICIpOworICAgICAgZ19wcmludCAoIkNhdWdodCBhIHNlZ21lbnRhdGlvbiBmYXVsdCB3aGlsZSBsb2FkaW5nIHBsdWdpbiBmaWxlOlxuIik7CisgICAgICBnX3ByaW50ICgiJXNcblxuIiwgX2dzdF9wbHVnaW5fZmF1bHRfaGFuZGxlcl9maWxlbmFtZSk7CisgICAgICBnX3ByaW50ICgiUGxlYXNlIGVpdGhlcjpcbiIpOworICAgICAgZ19wcmludCAoIi0gcmVtb3ZlIGl0IGFuZCByZXN0YXJ0LlxuIik7CisgICAgICBnX3ByaW50CisgICAgICAgICAgKCItIHJ1biB3aXRoIC0tZ3N0LWRpc2FibGUtc2VndHJhcCAtLWdzdC1kaXNhYmxlLXJlZ2lzdHJ5LWZvcmsgYW5kIGRlYnVnLlxuIik7CisgICAgICBleGl0ICgtMSk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgZ19wcmludCAoIkNhdWdodCB1bmhhbmRsZWQgc2lnbmFsIG9uIHBsdWdpbiBsb2FkaW5nXG4iKTsKKyAgICAgIGJyZWFrOworICB9Cit9CisKKy8qCisgKiBfZ3N0X3BsdWdpbl9mYXVsdF9oYW5kbGVyX3NldHVwOgorICogc2V0cyB1cCB0aGUgc2VnZmF1bHQgaGFuZGxlcgorICovCitzdGF0aWMgdm9pZAorX2dzdF9wbHVnaW5fZmF1bHRfaGFuZGxlcl9zZXR1cCAodm9pZCkKK3sKKyAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247CisKKyAgLyogaWYgYXNrZWQgdG8gbGVhdmUgc2VnZmF1bHRzIGFsb25lLCBqdXN0IHJldHVybiAqLworICBpZiAoIWdzdF9zZWd0cmFwX2lzX2VuYWJsZWQgKCkpCisgICAgcmV0dXJuOworCisgIGlmIChfZ3N0X3BsdWdpbl9mYXVsdF9oYW5kbGVyX2lzX3NldHVwKQorICAgIHJldHVybjsKKworICBfZ3N0X3BsdWdpbl9mYXVsdF9oYW5kbGVyX2lzX3NldHVwID0gVFJVRTsKKworICBtZW1zZXQgKCZhY3Rpb24sIDAsIHNpemVvZiAoYWN0aW9uKSk7CisgIGFjdGlvbi5zYV9oYW5kbGVyID0gX2dzdF9wbHVnaW5fZmF1bHRfaGFuZGxlcl9zaWdoYW5kbGVyOworCisgIHNpZ2FjdGlvbiAoU0lHU0VHViwgJmFjdGlvbiwgJm9sZGFjdGlvbik7Cit9CisjZWxzZSAvKiAhSEFWRV9TSUdBQ1RJT04gKi8KK3N0YXRpYyB2b2lkCitfZ3N0X3BsdWdpbl9mYXVsdF9oYW5kbGVyX3Jlc3RvcmUgKHZvaWQpCit7Cit9CisKK3N0YXRpYyB2b2lkCitfZ3N0X3BsdWdpbl9mYXVsdF9oYW5kbGVyX3NldHVwICh2b2lkKQoreworfQorI2VuZGlmIC8qIEhBVkVfU0lHQUNUSU9OICovCisKKy8qIGdfdGltZV92YWxfZnJvbV9pc284NjAxKCkgZG9lc24ndCBkbyBxdWl0ZSB3aGF0IHdlIHdhbnQgKi8KK3N0YXRpYyBnYm9vbGVhbgorY2hlY2tfcmVsZWFzZV9kYXRldGltZSAoY29uc3QgZ2NoYXIgKiBkYXRlX3RpbWUpCit7CisgIGd1aW50NjQgdmFsOworCisgIC8qIHdlIHJlcXVpcmUgWVlZWS1NTS1ERCBvciBZWVlZLU1NLUREVEhIOk1NWiBmb3JtYXQgKi8KKyAgaWYgKCFnX2FzY2lpX2lzZGlnaXQgKCpkYXRlX3RpbWUpKQorICAgIHJldHVybiBGQUxTRTsKKworICB2YWwgPSBnX2FzY2lpX3N0cnRvdWxsIChkYXRlX3RpbWUsIChnY2hhciAqKikgJiBkYXRlX3RpbWUsIDEwKTsKKyAgaWYgKHZhbCA8IDIwMDAgfHwgdmFsID4gMjEwMCB8fCAqZGF0ZV90aW1lICE9ICctJykKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgdmFsID0gZ19hc2NpaV9zdHJ0b3VsbCAoZGF0ZV90aW1lICsgMSwgKGdjaGFyICoqKSAmIGRhdGVfdGltZSwgMTApOworICBpZiAodmFsID09IDAgfHwgdmFsID4gMTIgfHwgKmRhdGVfdGltZSAhPSAnLScpCisgICAgcmV0dXJuIEZBTFNFOworCisgIHZhbCA9IGdfYXNjaWlfc3RydG91bGwgKGRhdGVfdGltZSArIDEsIChnY2hhciAqKikgJiBkYXRlX3RpbWUsIDEwKTsKKyAgaWYgKHZhbCA9PSAwIHx8IHZhbCA+IDMyKQorICAgIHJldHVybiBGQUxTRTsKKworICAvKiBlbmQgb2Ygc3RyaW5nIG9yIGRhdGUvdGltZSBzZXBhcmF0b3IgKyBISDpNTVogKi8KKyAgaWYgKCpkYXRlX3RpbWUgPT0gJ1QnIHx8ICpkYXRlX3RpbWUgPT0gJyAnKSB7CisgICAgdmFsID0gZ19hc2NpaV9zdHJ0b3VsbCAoZGF0ZV90aW1lICsgMSwgKGdjaGFyICoqKSAmIGRhdGVfdGltZSwgMTApOworICAgIGlmICh2YWwgPiAyNCB8fCAqZGF0ZV90aW1lICE9ICc6JykKKyAgICAgIHJldHVybiBGQUxTRTsKKworICAgIHZhbCA9IGdfYXNjaWlfc3RydG91bGwgKGRhdGVfdGltZSArIDEsIChnY2hhciAqKikgJiBkYXRlX3RpbWUsIDEwKTsKKyAgICBpZiAodmFsID4gNTkgfHwgKmRhdGVfdGltZSAhPSAnWicpCisgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICArK2RhdGVfdGltZTsKKyAgfQorCisgIHJldHVybiAoKmRhdGVfdGltZSA9PSAnXDAnKTsKK30KKworc3RhdGljIEdTdGF0aWNNdXRleCBnc3RfcGx1Z2luX2xvYWRpbmdfbXV0ZXggPSBHX1NUQVRJQ19NVVRFWF9JTklUOworCisjZGVmaW5lIENIRUNLX1BMVUdJTl9ERVNDX0ZJRUxEKGRlc2MsZmllbGQsZm4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYgKEdfVU5MSUtFTFkgKChkZXNjKS0+ZmllbGQgPT0gTlVMTCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEdTVF9FUlJPUiAoIkdzdFBsdWdpbkRlc2MgZm9yICclcycgaGFzIG5vICVzIiwgZm4sIEdfU1RSSU5HSUZZIChmaWVsZCkpOyBcCisgIH0KKworLyoqCisgKiBnc3RfcGx1Z2luX2xvYWRfZmlsZToKKyAqIEBmaWxlbmFtZTogdGhlIHBsdWdpbiBmaWxlbmFtZSB0byBsb2FkCisgKiBAZXJyb3I6IHBvaW50ZXIgdG8gYSBOVUxMLXZhbHVlZCBHRXJyb3IKKyAqCisgKiBMb2FkcyB0aGUgZ2l2ZW4gcGx1Z2luIGFuZCByZWZzIGl0LiAgQ2FsbGVyIG5lZWRzIHRvIHVucmVmIGFmdGVyIHVzZS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgcmVmZXJlbmNlIHRvIHRoZSBleGlzdGluZyBsb2FkZWQgR3N0UGx1Z2luLCBhIAorICogcmVmZXJlbmNlIHRvIHRoZSBuZXdseS1sb2FkZWQgR3N0UGx1Z2luLCBvciBOVUxMIGlmIGFuIGVycm9yIG9jY3VycmVkLgorICovCitHc3RQbHVnaW4gKgorZ3N0X3BsdWdpbl9sb2FkX2ZpbGUgKGNvbnN0IGdjaGFyICogZmlsZW5hbWUsIEdFcnJvciAqKiBlcnJvcikKK3sKKyAgR3N0UGx1Z2luRGVzYyAqZGVzYzsKKyAgR3N0UGx1Z2luICpwbHVnaW47CisgIEdNb2R1bGUgKm1vZHVsZTsKKyAgZ2Jvb2xlYW4gcmV0OworICBncG9pbnRlciBwdHI7CisgIEdTdGF0QnVmIGZpbGVfc3RhdHVzOworICBHc3RSZWdpc3RyeSAqcmVnaXN0cnk7CisgIGdib29sZWFuIG5ld19wbHVnaW4gPSBUUlVFOworICBHTW9kdWxlRmxhZ3MgZmxhZ3M7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpbGVuYW1lICE9IE5VTEwsIE5VTEwpOworCisgIHJlZ2lzdHJ5ID0gZ3N0X3JlZ2lzdHJ5X2dldF9kZWZhdWx0ICgpOworICBnX3N0YXRpY19tdXRleF9sb2NrICgmZ3N0X3BsdWdpbl9sb2FkaW5nX211dGV4KTsKKworICBwbHVnaW4gPSBnc3RfcmVnaXN0cnlfbG9va3VwIChyZWdpc3RyeSwgZmlsZW5hbWUpOworICBpZiAocGx1Z2luKSB7CisgICAgaWYgKHBsdWdpbi0+bW9kdWxlKSB7CisgICAgICAvKiBhbHJlYWR5IGxvYWRlZCAqLworICAgICAgZ19zdGF0aWNfbXV0ZXhfdW5sb2NrICgmZ3N0X3BsdWdpbl9sb2FkaW5nX211dGV4KTsKKyAgICAgIHJldHVybiBwbHVnaW47CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIGxvYWQgcGx1Z2luIGFuZCB1cGRhdGUgZmllbGRzICovCisgICAgICBuZXdfcGx1Z2luID0gRkFMU0U7CisgICAgfQorICB9CisKKyAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9QTFVHSU5fTE9BRElORywgImF0dGVtcHQgdG8gbG9hZCBwbHVnaW4gXCIlc1wiIiwKKyAgICAgIGZpbGVuYW1lKTsKKworICBpZiAoZ19tb2R1bGVfc3VwcG9ydGVkICgpID09IEZBTFNFKSB7CisgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9QTFVHSU5fTE9BRElORywgIm1vZHVsZSBsb2FkaW5nIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICBnX3NldF9lcnJvciAoZXJyb3IsCisgICAgICAgIEdTVF9QTFVHSU5fRVJST1IsCisgICAgICAgIEdTVF9QTFVHSU5fRVJST1JfTU9EVUxFLCAiRHluYW1pYyBsb2FkaW5nIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICBnb3RvIHJldHVybl9lcnJvcjsKKyAgfQorCisgIGlmIChnX3N0YXQgKGZpbGVuYW1lLCAmZmlsZV9zdGF0dXMpKSB7CisgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9QTFVHSU5fTE9BRElORywgInByb2JsZW0gYWNjZXNzaW5nIGZpbGUiKTsKKyAgICBnX3NldF9lcnJvciAoZXJyb3IsCisgICAgICAgIEdTVF9QTFVHSU5fRVJST1IsCisgICAgICAgIEdTVF9QTFVHSU5fRVJST1JfTU9EVUxFLCAiUHJvYmxlbSBhY2Nlc3NpbmcgZmlsZSAlczogJXMiLCBmaWxlbmFtZSwKKyAgICAgICAgZ19zdHJlcnJvciAoZXJybm8pKTsKKyAgICBnb3RvIHJldHVybl9lcnJvcjsKKyAgfQorCisgIGZsYWdzID0gR19NT0RVTEVfQklORF9MT0NBTDsKKyAgLyogbGliZ3N0cHl0aG9uLnNvIGlzIHRoZSBnc3QtcHl0aG9uIHBsdWdpbiBsb2FkZXIuIEl0IG5lZWRzIHRvIGJlIGxvYWRlZCB3aXRoCisgICAqIEdfTU9EVUxFX0JJTkRfTEFaWS4KKyAgICoKKyAgICogSWRlYWxseSB0aGVyZSBzaG91bGQgYmUgYSBnZW5lcmljIHdheSBmb3IgcGx1Z2lucyB0byBzcGVjaWZ5IHRoYXQgdGhleQorICAgKiBuZWVkIHRvIGJlIGxvYWRlZCB3aXRoIF9MQVpZLgorICAgKiAqLworICBpZiAoc3Ryc3RyIChmaWxlbmFtZSwgImxpYmdzdHB5dGhvbiIpKQorICAgIGZsYWdzIHw9IEdfTU9EVUxFX0JJTkRfTEFaWTsKKworICBtb2R1bGUgPSBnX21vZHVsZV9vcGVuIChmaWxlbmFtZSwgZmxhZ3MpOworICBpZiAobW9kdWxlID09IE5VTEwpIHsKKyAgICBHU1RfQ0FUX1dBUk5JTkcgKEdTVF9DQVRfUExVR0lOX0xPQURJTkcsICJtb2R1bGVfb3BlbiBmYWlsZWQ6ICVzIiwKKyAgICAgICAgZ19tb2R1bGVfZXJyb3IgKCkpOworICAgIGdfc2V0X2Vycm9yIChlcnJvciwKKyAgICAgICAgR1NUX1BMVUdJTl9FUlJPUiwgR1NUX1BMVUdJTl9FUlJPUl9NT0RVTEUsICJPcGVuaW5nIG1vZHVsZSBmYWlsZWQ6ICVzIiwKKyAgICAgICAgZ19tb2R1bGVfZXJyb3IgKCkpOworICAgIC8qIElmIHdlIGZhaWxlZCB0byBvcGVuIHRoZSBzaGFyZWQgb2JqZWN0LCB0aGVuIGl0J3MgcHJvYmFibHkgYmVjYXVzZSBhCisgICAgICogcGx1Z2luIGlzIGxpbmtlZCBhZ2FpbnN0IHRoZSB3cm9uZyBsaWJyYXJpZXMuIFByaW50IG91dCBhbiBlYXN5LXRvLXNlZQorICAgICAqIG1lc3NhZ2UgaW4gdGhpcyBjYXNlLiAqLworICAgIGdfd2FybmluZyAoIkZhaWxlZCB0byBsb2FkIHBsdWdpbiAnJXMnOiAlcyIsIGZpbGVuYW1lLCBnX21vZHVsZV9lcnJvciAoKSk7CisgICAgZ290byByZXR1cm5fZXJyb3I7CisgIH0KKworICByZXQgPSBnX21vZHVsZV9zeW1ib2wgKG1vZHVsZSwgImdzdF9wbHVnaW5fZGVzYyIsICZwdHIpOworICBpZiAoIXJldCkgeworICAgIEdTVF9ERUJVRyAoIkNvdWxkIG5vdCBmaW5kIHBsdWdpbiBlbnRyeSBwb2ludCBpbiBcIiVzXCIiLCBmaWxlbmFtZSk7CisgICAgZ19zZXRfZXJyb3IgKGVycm9yLAorICAgICAgICBHU1RfUExVR0lOX0VSUk9SLAorICAgICAgICBHU1RfUExVR0lOX0VSUk9SX01PRFVMRSwKKyAgICAgICAgIkZpbGUgXCIlc1wiIGlzIG5vdCBhIEdTdHJlYW1lciBwbHVnaW4iLCBmaWxlbmFtZSk7CisgICAgZ19tb2R1bGVfY2xvc2UgKG1vZHVsZSk7CisgICAgZ290byByZXR1cm5fZXJyb3I7CisgIH0KKworICBkZXNjID0gKEdzdFBsdWdpbkRlc2MgKikgcHRyOworCisgIGlmIChwcml2X2dzdF9wbHVnaW5fbG9hZGluZ19oYXZlX3doaXRlbGlzdCAoKSAmJgorICAgICAgIXByaXZfZ3N0X3BsdWdpbl9kZXNjX2lzX3doaXRlbGlzdGVkIChkZXNjLCBmaWxlbmFtZSkpIHsKKyAgICBHU1RfSU5GTyAoIldoaXRlbGlzdCBzcGVjaWZpZWQgYW5kIHBsdWdpbiBub3QgaW4gd2hpdGVsaXN0LCBub3QgbG9hZGluZzogIgorICAgICAgICAibmFtZT0lcywgcGFja2FnZT0lcywgZmlsZT0lcyIsIGRlc2MtPm5hbWUsIGRlc2MtPnNvdXJjZSwgZmlsZW5hbWUpOworICAgIGdfc2V0X2Vycm9yIChlcnJvciwgR1NUX1BMVUdJTl9FUlJPUiwgR1NUX1BMVUdJTl9FUlJPUl9NT0RVTEUsCisgICAgICAgICJOb3QgbG9hZGluZyBwbHVnaW4gZmlsZSBcIiVzXCIsIG5vdCBpbiB3aGl0ZWxpc3QiLCBmaWxlbmFtZSk7CisgICAgZ19tb2R1bGVfY2xvc2UgKG1vZHVsZSk7CisgICAgZ290byByZXR1cm5fZXJyb3I7CisgIH0KKworICBpZiAobmV3X3BsdWdpbikgeworICAgIHBsdWdpbiA9IGdfb2JqZWN0X25ld3YgKEdTVF9UWVBFX1BMVUdJTiwgMCwgTlVMTCk7CisgICAgcGx1Z2luLT5maWxlX210aW1lID0gZmlsZV9zdGF0dXMuc3RfbXRpbWU7CisgICAgcGx1Z2luLT5maWxlX3NpemUgPSBmaWxlX3N0YXR1cy5zdF9zaXplOworICAgIHBsdWdpbi0+ZmlsZW5hbWUgPSBnX3N0cmR1cCAoZmlsZW5hbWUpOworICAgIHBsdWdpbi0+YmFzZW5hbWUgPSBnX3BhdGhfZ2V0X2Jhc2VuYW1lIChmaWxlbmFtZSk7CisgIH0KKworICBwbHVnaW4tPm1vZHVsZSA9IG1vZHVsZTsKKyAgcGx1Z2luLT5vcmlnX2Rlc2MgPSBkZXNjOworCisgIGlmIChuZXdfcGx1Z2luKSB7CisgICAgLyogY2hlY2sgcGx1Z2luIGRlc2NyaXB0aW9uOiBjb21wbGFpbiBhYm91dCBiYWQgdmFsdWVzIGJ1dCBhY2NlcHQgdGhlbSwgdG8KKyAgICAgKiBtYWludGFpbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAoRklYTUU6IDAuMTEpICovCisgICAgQ0hFQ0tfUExVR0lOX0RFU0NfRklFTEQgKHBsdWdpbi0+b3JpZ19kZXNjLCBuYW1lLCBmaWxlbmFtZSk7CisgICAgQ0hFQ0tfUExVR0lOX0RFU0NfRklFTEQgKHBsdWdpbi0+b3JpZ19kZXNjLCBkZXNjcmlwdGlvbiwgZmlsZW5hbWUpOworICAgIENIRUNLX1BMVUdJTl9ERVNDX0ZJRUxEIChwbHVnaW4tPm9yaWdfZGVzYywgdmVyc2lvbiwgZmlsZW5hbWUpOworICAgIENIRUNLX1BMVUdJTl9ERVNDX0ZJRUxEIChwbHVnaW4tPm9yaWdfZGVzYywgbGljZW5zZSwgZmlsZW5hbWUpOworICAgIENIRUNLX1BMVUdJTl9ERVNDX0ZJRUxEIChwbHVnaW4tPm9yaWdfZGVzYywgc291cmNlLCBmaWxlbmFtZSk7CisgICAgQ0hFQ0tfUExVR0lOX0RFU0NfRklFTEQgKHBsdWdpbi0+b3JpZ19kZXNjLCBwYWNrYWdlLCBmaWxlbmFtZSk7CisgICAgQ0hFQ0tfUExVR0lOX0RFU0NfRklFTEQgKHBsdWdpbi0+b3JpZ19kZXNjLCBvcmlnaW4sIGZpbGVuYW1lKTsKKworICAgIGlmIChwbHVnaW4tPm9yaWdfZGVzYy0+cmVsZWFzZV9kYXRldGltZSAhPSBOVUxMICYmCisgICAgICAgICFjaGVja19yZWxlYXNlX2RhdGV0aW1lIChwbHVnaW4tPm9yaWdfZGVzYy0+cmVsZWFzZV9kYXRldGltZSkpIHsKKyAgICAgIEdTVF9FUlJPUiAoIkdzdFBsdWdpbkRlc2MgZm9yICclcycgaGFzIGludmFsaWQgZGF0ZXRpbWUgJyVzJyIsCisgICAgICAgICAgZmlsZW5hbWUsIHBsdWdpbi0+b3JpZ19kZXNjLT5yZWxlYXNlX2RhdGV0aW1lKTsKKyAgICAgIHBsdWdpbi0+b3JpZ19kZXNjLT5yZWxlYXNlX2RhdGV0aW1lID0gTlVMTDsKKyAgICB9CisgIH0KKworICBHU1RfTE9HICgiUGx1Z2luICVwIGZvciBmaWxlIFwiJXNcIiBwcmVwYXJlZCwgY2FsbGluZyBlbnRyeSBmdW5jdGlvbi4uLiIsCisgICAgICBwbHVnaW4sIGZpbGVuYW1lKTsKKworICAvKiB0aGlzIGlzIHdoZXJlIHdlIGxvYWQgdGhlIGFjdHVhbCAuc28sIHNvIGxldCdzIHRyYXAgU0lHU0VHViAqLworICBfZ3N0X3BsdWdpbl9mYXVsdF9oYW5kbGVyX3NldHVwICgpOworICBfZ3N0X3BsdWdpbl9mYXVsdF9oYW5kbGVyX2ZpbGVuYW1lID0gcGx1Z2luLT5maWxlbmFtZTsKKworICBHU1RfTE9HICgiUGx1Z2luICVwIGZvciBmaWxlIFwiJXNcIiBwcmVwYXJlZCwgcmVnaXN0ZXJpbmcuLi4iLAorICAgICAgcGx1Z2luLCBmaWxlbmFtZSk7CisKKyAgaWYgKCFnc3RfcGx1Z2luX3JlZ2lzdGVyX2Z1bmMgKHBsdWdpbiwgcGx1Z2luLT5vcmlnX2Rlc2MsIE5VTEwpKSB7CisgICAgLyogcmVtb3ZlIHNpZ25hbCBoYW5kbGVyICovCisgICAgX2dzdF9wbHVnaW5fZmF1bHRfaGFuZGxlcl9yZXN0b3JlICgpOworICAgIEdTVF9ERUJVRyAoImdzdF9wbHVnaW5fcmVnaXN0ZXJfZnVuYyBmYWlsZWQgZm9yIHBsdWdpbiBcIiVzXCIiLCBmaWxlbmFtZSk7CisgICAgLyogcGx1Z2luID09IE5VTEwgKi8KKyAgICBnX3NldF9lcnJvciAoZXJyb3IsCisgICAgICAgIEdTVF9QTFVHSU5fRVJST1IsCisgICAgICAgIEdTVF9QTFVHSU5fRVJST1JfTU9EVUxFLAorICAgICAgICAiRmlsZSBcIiVzXCIgYXBwZWFycyB0byBiZSBhIEdTdHJlYW1lciBwbHVnaW4sIGJ1dCBpdCBmYWlsZWQgdG8gaW5pdGlhbGl6ZSIsCisgICAgICAgIGZpbGVuYW1lKTsKKyAgICBnb3RvIHJldHVybl9lcnJvcjsKKyAgfQorCisgIC8qIHJlbW92ZSBzaWduYWwgaGFuZGxlciAqLworICBfZ3N0X3BsdWdpbl9mYXVsdF9oYW5kbGVyX3Jlc3RvcmUgKCk7CisgIF9nc3RfcGx1Z2luX2ZhdWx0X2hhbmRsZXJfZmlsZW5hbWUgPSBOVUxMOworICBHU1RfSU5GTyAoInBsdWdpbiBcIiVzXCIgbG9hZGVkIiwgcGx1Z2luLT5maWxlbmFtZSk7CisKKyAgaWYgKG5ld19wbHVnaW4pIHsKKyAgICBnc3Rfb2JqZWN0X3JlZiAocGx1Z2luKTsKKyAgICBnc3RfZGVmYXVsdF9yZWdpc3RyeV9hZGRfcGx1Z2luIChwbHVnaW4pOworICB9CisKKyAgZ19zdGF0aWNfbXV0ZXhfdW5sb2NrICgmZ3N0X3BsdWdpbl9sb2FkaW5nX211dGV4KTsKKyAgcmV0dXJuIHBsdWdpbjsKKworcmV0dXJuX2Vycm9yOgorICB7CisgICAgaWYgKHBsdWdpbikKKyAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBsdWdpbik7CisgICAgZ19zdGF0aWNfbXV0ZXhfdW5sb2NrICgmZ3N0X3BsdWdpbl9sb2FkaW5nX211dGV4KTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZ3N0X3BsdWdpbl9kZXNjX2NvcHkgKEdzdFBsdWdpbkRlc2MgKiBkZXN0LCBjb25zdCBHc3RQbHVnaW5EZXNjICogc3JjKQoreworICBkZXN0LT5tYWpvcl92ZXJzaW9uID0gc3JjLT5tYWpvcl92ZXJzaW9uOworICBkZXN0LT5taW5vcl92ZXJzaW9uID0gc3JjLT5taW5vcl92ZXJzaW9uOworICBkZXN0LT5uYW1lID0gZ19pbnRlcm5fc3RyaW5nIChzcmMtPm5hbWUpOworICBkZXN0LT5kZXNjcmlwdGlvbiA9IGdfaW50ZXJuX3N0cmluZyAoc3JjLT5kZXNjcmlwdGlvbik7CisgIGRlc3QtPnBsdWdpbl9pbml0ID0gc3JjLT5wbHVnaW5faW5pdDsKKyAgZGVzdC0+dmVyc2lvbiA9IGdfaW50ZXJuX3N0cmluZyAoc3JjLT52ZXJzaW9uKTsKKyAgZGVzdC0+bGljZW5zZSA9IGdfaW50ZXJuX3N0cmluZyAoc3JjLT5saWNlbnNlKTsKKyAgZGVzdC0+c291cmNlID0gZ19pbnRlcm5fc3RyaW5nIChzcmMtPnNvdXJjZSk7CisgIGRlc3QtPnBhY2thZ2UgPSBnX2ludGVybl9zdHJpbmcgKHNyYy0+cGFja2FnZSk7CisgIGRlc3QtPm9yaWdpbiA9IGdfaW50ZXJuX3N0cmluZyAoc3JjLT5vcmlnaW4pOworICBkZXN0LT5yZWxlYXNlX2RhdGV0aW1lID0gZ19pbnRlcm5fc3RyaW5nIChzcmMtPnJlbGVhc2VfZGF0ZXRpbWUpOworfQorCisvKioKKyAqIGdzdF9wbHVnaW5fZ2V0X25hbWU6CisgKiBAcGx1Z2luOiBwbHVnaW4gdG8gZ2V0IHRoZSBuYW1lIG9mCisgKgorICogR2V0IHRoZSBzaG9ydCBuYW1lIG9mIHRoZSBwbHVnaW4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbmFtZSBvZiB0aGUgcGx1Z2luCisgKi8KK2NvbnN0IGdjaGFyICoKK2dzdF9wbHVnaW5fZ2V0X25hbWUgKEdzdFBsdWdpbiAqIHBsdWdpbikKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBsdWdpbiAhPSBOVUxMLCBOVUxMKTsKKworICByZXR1cm4gcGx1Z2luLT5kZXNjLm5hbWU7Cit9CisKKy8qKgorICogZ3N0X3BsdWdpbl9nZXRfZGVzY3JpcHRpb246CisgKiBAcGx1Z2luOiBwbHVnaW4gdG8gZ2V0IGxvbmcgbmFtZSBvZgorICoKKyAqIEdldCB0aGUgbG9uZyBkZXNjcmlwdGl2ZSBuYW1lIG9mIHRoZSBwbHVnaW4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbG9uZyBuYW1lIG9mIHRoZSBwbHVnaW4KKyAqLworY29uc3QgZ2NoYXIgKgorZ3N0X3BsdWdpbl9nZXRfZGVzY3JpcHRpb24gKEdzdFBsdWdpbiAqIHBsdWdpbikKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBsdWdpbiAhPSBOVUxMLCBOVUxMKTsKKworICByZXR1cm4gcGx1Z2luLT5kZXNjLmRlc2NyaXB0aW9uOworfQorCisvKioKKyAqIGdzdF9wbHVnaW5fZ2V0X2ZpbGVuYW1lOgorICogQHBsdWdpbjogcGx1Z2luIHRvIGdldCB0aGUgZmlsZW5hbWUgb2YKKyAqCisgKiBnZXQgdGhlIGZpbGVuYW1lIG9mIHRoZSBwbHVnaW4KKyAqCisgKiBSZXR1cm5zOiB0aGUgZmlsZW5hbWUgb2YgdGhlIHBsdWdpbgorICovCitjb25zdCBnY2hhciAqCitnc3RfcGx1Z2luX2dldF9maWxlbmFtZSAoR3N0UGx1Z2luICogcGx1Z2luKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAocGx1Z2luICE9IE5VTEwsIE5VTEwpOworCisgIHJldHVybiBwbHVnaW4tPmZpbGVuYW1lOworfQorCisvKioKKyAqIGdzdF9wbHVnaW5fZ2V0X3ZlcnNpb246CisgKiBAcGx1Z2luOiBwbHVnaW4gdG8gZ2V0IHRoZSB2ZXJzaW9uIG9mCisgKgorICogZ2V0IHRoZSB2ZXJzaW9uIG9mIHRoZSBwbHVnaW4KKyAqCisgKiBSZXR1cm5zOiB0aGUgdmVyc2lvbiBvZiB0aGUgcGx1Z2luCisgKi8KK2NvbnN0IGdjaGFyICoKK2dzdF9wbHVnaW5fZ2V0X3ZlcnNpb24gKEdzdFBsdWdpbiAqIHBsdWdpbikKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBsdWdpbiAhPSBOVUxMLCBOVUxMKTsKKworICByZXR1cm4gcGx1Z2luLT5kZXNjLnZlcnNpb247Cit9CisKKy8qKgorICogZ3N0X3BsdWdpbl9nZXRfbGljZW5zZToKKyAqIEBwbHVnaW46IHBsdWdpbiB0byBnZXQgdGhlIGxpY2Vuc2Ugb2YKKyAqCisgKiBnZXQgdGhlIGxpY2Vuc2Ugb2YgdGhlIHBsdWdpbgorICoKKyAqIFJldHVybnM6IHRoZSBsaWNlbnNlIG9mIHRoZSBwbHVnaW4KKyAqLworY29uc3QgZ2NoYXIgKgorZ3N0X3BsdWdpbl9nZXRfbGljZW5zZSAoR3N0UGx1Z2luICogcGx1Z2luKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAocGx1Z2luICE9IE5VTEwsIE5VTEwpOworCisgIHJldHVybiBwbHVnaW4tPmRlc2MubGljZW5zZTsKK30KKworLyoqCisgKiBnc3RfcGx1Z2luX2dldF9zb3VyY2U6CisgKiBAcGx1Z2luOiBwbHVnaW4gdG8gZ2V0IHRoZSBzb3VyY2Ugb2YKKyAqCisgKiBnZXQgdGhlIHNvdXJjZSBtb2R1bGUgdGhlIHBsdWdpbiBiZWxvbmdzIHRvLgorICoKKyAqIFJldHVybnM6IHRoZSBzb3VyY2Ugb2YgdGhlIHBsdWdpbgorICovCitjb25zdCBnY2hhciAqCitnc3RfcGx1Z2luX2dldF9zb3VyY2UgKEdzdFBsdWdpbiAqIHBsdWdpbikKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBsdWdpbiAhPSBOVUxMLCBOVUxMKTsKKworICByZXR1cm4gcGx1Z2luLT5kZXNjLnNvdXJjZTsKK30KKworLyoqCisgKiBnc3RfcGx1Z2luX2dldF9wYWNrYWdlOgorICogQHBsdWdpbjogcGx1Z2luIHRvIGdldCB0aGUgcGFja2FnZSBvZgorICoKKyAqIGdldCB0aGUgcGFja2FnZSB0aGUgcGx1Z2luIGJlbG9uZ3MgdG8uCisgKgorICogUmV0dXJuczogdGhlIHBhY2thZ2Ugb2YgdGhlIHBsdWdpbgorICovCitjb25zdCBnY2hhciAqCitnc3RfcGx1Z2luX2dldF9wYWNrYWdlIChHc3RQbHVnaW4gKiBwbHVnaW4pCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwbHVnaW4gIT0gTlVMTCwgTlVMTCk7CisKKyAgcmV0dXJuIHBsdWdpbi0+ZGVzYy5wYWNrYWdlOworfQorCisvKioKKyAqIGdzdF9wbHVnaW5fZ2V0X29yaWdpbjoKKyAqIEBwbHVnaW46IHBsdWdpbiB0byBnZXQgdGhlIG9yaWdpbiBvZgorICoKKyAqIGdldCB0aGUgVVJMIHdoZXJlIHRoZSBwbHVnaW4gY29tZXMgZnJvbQorICoKKyAqIFJldHVybnM6IHRoZSBvcmlnaW4gb2YgdGhlIHBsdWdpbgorICovCitjb25zdCBnY2hhciAqCitnc3RfcGx1Z2luX2dldF9vcmlnaW4gKEdzdFBsdWdpbiAqIHBsdWdpbikKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBsdWdpbiAhPSBOVUxMLCBOVUxMKTsKKworICByZXR1cm4gcGx1Z2luLT5kZXNjLm9yaWdpbjsKK30KKworLyoqCisgKiBnc3RfcGx1Z2luX2dldF9tb2R1bGU6CisgKiBAcGx1Z2luOiBwbHVnaW4gdG8gcXVlcnkKKyAqCisgKiBHZXRzIHRoZSAjR01vZHVsZSBvZiB0aGUgcGx1Z2luLiBJZiB0aGUgcGx1Z2luIGlzbid0IGxvYWRlZCB5ZXQsIE5VTEwgaXMKKyAqIHJldHVybmVkLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogbW9kdWxlIGJlbG9uZ2luZyB0byB0aGUgcGx1Z2luIG9yIE5VTEwgaWYgdGhlCisgKiAgICAgICAgICBwbHVnaW4gaXNuJ3QgbG9hZGVkIHlldC4KKyAqLworR01vZHVsZSAqCitnc3RfcGx1Z2luX2dldF9tb2R1bGUgKEdzdFBsdWdpbiAqIHBsdWdpbikKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBsdWdpbiAhPSBOVUxMLCBOVUxMKTsKKworICByZXR1cm4gcGx1Z2luLT5tb2R1bGU7Cit9CisKKy8qKgorICogZ3N0X3BsdWdpbl9pc19sb2FkZWQ6CisgKiBAcGx1Z2luOiBwbHVnaW4gdG8gcXVlcnkKKyAqCisgKiBxdWVyaWVzIGlmIHRoZSBwbHVnaW4gaXMgbG9hZGVkIGludG8gbWVtb3J5CisgKgorICogUmV0dXJuczogVFJVRSBpcyBsb2FkZWQsIEZBTFNFIG90aGVyd2lzZQorICovCitnYm9vbGVhbgorZ3N0X3BsdWdpbl9pc19sb2FkZWQgKEdzdFBsdWdpbiAqIHBsdWdpbikKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBsdWdpbiAhPSBOVUxMLCBGQUxTRSk7CisKKyAgcmV0dXJuIChwbHVnaW4tPm1vZHVsZSAhPSBOVUxMIHx8IHBsdWdpbi0+ZmlsZW5hbWUgPT0gTlVMTCk7Cit9CisKKy8qKgorICogZ3N0X3BsdWdpbl9nZXRfY2FjaGVfZGF0YToKKyAqIEBwbHVnaW46IGEgcGx1Z2luCisgKgorICogR2V0cyB0aGUgcGx1Z2luIHNwZWNpZmljIGRhdGEgY2FjaGUuIElmIGl0IGlzICVOVUxMIHRoZXJlIGlzIG5vIGNhY2hlZCBkYXRhCisgKiBzdG9yZWQuIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiB0aGUgcmVnaXN0cnkgaXMgZ2V0dGluZyByZWJ1aWx0LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogVGhlIGNhY2hlZCBkYXRhIGFzIGEgI0dzdFN0cnVjdHVyZSBvciAlTlVMTC4KKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICovCitjb25zdCBHc3RTdHJ1Y3R1cmUgKgorZ3N0X3BsdWdpbl9nZXRfY2FjaGVfZGF0YSAoR3N0UGx1Z2luICogcGx1Z2luKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BMVUdJTiAocGx1Z2luKSwgTlVMTCk7CisKKyAgcmV0dXJuIHBsdWdpbi0+cHJpdi0+Y2FjaGVfZGF0YTsKK30KKworLyoqCisgKiBnc3RfcGx1Z2luX3NldF9jYWNoZV9kYXRhOgorICogQHBsdWdpbjogYSBwbHVnaW4KKyAqIEBjYWNoZV9kYXRhOiAodHJhbnNmZXIgZnVsbCk6IGEgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIGRhdGEgdG8gY2FjaGUKKyAqCisgKiBBZGRzIHBsdWdpbiBzcGVjaWZpYyBkYXRhIHRvIGNhY2hlLiBQYXNzZXMgdGhlIG93bmVyc2hpcCBvZiB0aGUgc3RydWN0dXJlIHRvCisgKiB0aGUgQHBsdWdpbi4KKyAqCisgKiBUaGUgY2FjaGUgaXMgZmx1c2hlZCBldmVyeSB0aW1lIHRoZSByZWdpc3RyeSBpcyByZWJ1aWx0LgorICoKKyAqIFNpbmNlOiAwLjEwLjI0CisgKi8KK3ZvaWQKK2dzdF9wbHVnaW5fc2V0X2NhY2hlX2RhdGEgKEdzdFBsdWdpbiAqIHBsdWdpbiwgR3N0U3RydWN0dXJlICogY2FjaGVfZGF0YSkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1BMVUdJTiAocGx1Z2luKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19TVFJVQ1RVUkUgKGNhY2hlX2RhdGEpKTsKKworICBpZiAocGx1Z2luLT5wcml2LT5jYWNoZV9kYXRhKSB7CisgICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChwbHVnaW4tPnByaXYtPmNhY2hlX2RhdGEpOworICB9CisgIHBsdWdpbi0+cHJpdi0+Y2FjaGVfZGF0YSA9IGNhY2hlX2RhdGE7Cit9CisKKyNpZiAwCisvKioKKyAqIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0OgorICogQHBsdWdpbjogcGx1Z2luIHRvIHF1ZXJ5CisgKiBAZmlsdGVyOiB0aGUgZmlsdGVyIHRvIHVzZQorICogQGZpcnN0OiBvbmx5IHJldHVybiBmaXJzdCBtYXRjaAorICogQHVzZXJfZGF0YTogdXNlciBkYXRhIHBhc3NlZCB0byB0aGUgZmlsdGVyIGZ1bmN0aW9uCisgKgorICogUnVucyBhIGZpbHRlciBhZ2FpbnN0IGFsbCBwbHVnaW4gZmVhdHVyZXMgYW5kIHJldHVybnMgYSBHTGlzdCB3aXRoCisgKiB0aGUgcmVzdWx0cy4gSWYgdGhlIGZpcnN0IGZsYWcgaXMgc2V0LCBvbmx5IHRoZSBmaXJzdCBtYXRjaCBpcworICogcmV0dXJuZWQgKGFzIGEgbGlzdCB3aXRoIGEgc2luZ2xlIG9iamVjdCkuCisgKgorICogUmV0dXJuczogYSBHTGlzdCBvZiBmZWF0dXJlcywgZ19saXN0X2ZyZWUgYWZ0ZXIgdXNlLgorICovCitHTGlzdCAqCitnc3RfcGx1Z2luX2ZlYXR1cmVfZmlsdGVyIChHc3RQbHVnaW4gKiBwbHVnaW4sCisgICAgR3N0UGx1Z2luRmVhdHVyZUZpbHRlciBmaWx0ZXIsIGdib29sZWFuIGZpcnN0LCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIEdMaXN0ICpsaXN0OworICBHTGlzdCAqZzsKKworICBsaXN0ID0gZ3N0X2ZpbHRlcl9ydW4gKHBsdWdpbi0+ZmVhdHVyZXMsIChHc3RGaWx0ZXJGdW5jKSBmaWx0ZXIsIGZpcnN0LAorICAgICAgdXNlcl9kYXRhKTsKKyAgZm9yIChnID0gbGlzdDsgZzsgZyA9IGctPm5leHQpIHsKKyAgICBnc3Rfb2JqZWN0X3JlZiAocGx1Z2luKTsKKyAgfQorCisgIHJldHVybiBsaXN0OworfQorCit0eXBlZGVmIHN0cnVjdAoreworICBHc3RQbHVnaW5GZWF0dXJlRmlsdGVyIGZpbHRlcjsKKyAgZ2Jvb2xlYW4gZmlyc3Q7CisgIGdwb2ludGVyIHVzZXJfZGF0YTsKKyAgR0xpc3QgKnJlc3VsdDsKK30KK0ZlYXR1cmVGaWx0ZXJEYXRhOworCitzdGF0aWMgZ2Jvb2xlYW4KK19mZWF0dXJlX2ZpbHRlciAoR3N0UGx1Z2luICogcGx1Z2luLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIEdMaXN0ICpyZXN1bHQ7CisgIEZlYXR1cmVGaWx0ZXJEYXRhICpkYXRhID0gKEZlYXR1cmVGaWx0ZXJEYXRhICopIHVzZXJfZGF0YTsKKworICByZXN1bHQgPSBnc3RfcGx1Z2luX2ZlYXR1cmVfZmlsdGVyIChwbHVnaW4sIGRhdGEtPmZpbHRlciwgZGF0YS0+Zmlyc3QsCisgICAgICBkYXRhLT51c2VyX2RhdGEpOworICBpZiAocmVzdWx0KSB7CisgICAgZGF0YS0+cmVzdWx0ID0gZ19saXN0X2NvbmNhdCAoZGF0YS0+cmVzdWx0LCByZXN1bHQpOworICAgIHJldHVybiBUUlVFOworICB9CisgIHJldHVybiBGQUxTRTsKK30KKworLyoqCisgKiBnc3RfcGx1Z2luX2xpc3RfZmVhdHVyZV9maWx0ZXI6CisgKiBAbGlzdDogYSAjR0xpc3Qgb2YgcGx1Z2lucyB0byBxdWVyeQorICogQGZpbHRlcjogdGhlIGZpbHRlciBmdW5jdGlvbiB0byB1c2UKKyAqIEBmaXJzdDogb25seSByZXR1cm4gZmlyc3QgbWF0Y2gKKyAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YSBwYXNzZWQgdG8gdGhlIGZpbHRlciBmdW5jdGlvbgorICoKKyAqIFJ1bnMgYSBmaWx0ZXIgYWdhaW5zdCBhbGwgcGx1Z2luIGZlYXR1cmVzIG9mIHRoZSBwbHVnaW5zIGluIHRoZSBnaXZlbgorICogbGlzdCBhbmQgcmV0dXJucyBhIEdMaXN0IHdpdGggdGhlIHJlc3VsdHMuCisgKiBJZiB0aGUgZmlyc3QgZmxhZyBpcyBzZXQsIG9ubHkgdGhlIGZpcnN0IG1hdGNoIGlzCisgKiByZXR1cm5lZCAoYXMgYSBsaXN0IHdpdGggYSBzaW5nbGUgb2JqZWN0KS4KKyAqCisgKiBSZXR1cm5zOiBhIEdMaXN0IG9mIGZlYXR1cmVzLCBnX2xpc3RfZnJlZSBhZnRlciB1c2UuCisgKi8KK0dMaXN0ICoKK2dzdF9wbHVnaW5fbGlzdF9mZWF0dXJlX2ZpbHRlciAoR0xpc3QgKiBsaXN0LAorICAgIEdzdFBsdWdpbkZlYXR1cmVGaWx0ZXIgZmlsdGVyLCBnYm9vbGVhbiBmaXJzdCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBGZWF0dXJlRmlsdGVyRGF0YSBkYXRhOworICBHTGlzdCAqcmVzdWx0OworCisgIGRhdGEuZmlsdGVyID0gZmlsdGVyOworICBkYXRhLmZpcnN0ID0gZmlyc3Q7CisgIGRhdGEudXNlcl9kYXRhID0gdXNlcl9kYXRhOworICBkYXRhLnJlc3VsdCA9IE5VTEw7CisKKyAgcmVzdWx0ID0gZ3N0X2ZpbHRlcl9ydW4gKGxpc3QsIChHc3RGaWx0ZXJGdW5jKSBfZmVhdHVyZV9maWx0ZXIsIGZpcnN0LCAmZGF0YSk7CisgIGdfbGlzdF9mcmVlIChyZXN1bHQpOworCisgIHJldHVybiBkYXRhLnJlc3VsdDsKK30KKyNlbmRpZgorCisvKioKKyAqIGdzdF9wbHVnaW5fbmFtZV9maWx0ZXI6CisgKiBAcGx1Z2luOiB0aGUgcGx1Z2luIHRvIGNoZWNrCisgKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIHBsdWdpbgorICoKKyAqIEEgc3RhbmRhcmQgZmlsdGVyIHRoYXQgcmV0dXJucyBUUlVFIHdoZW4gdGhlIHBsdWdpbiBpcyBvZiB0aGUKKyAqIGdpdmVuIG5hbWUuCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgcGx1Z2luIGlzIG9mIHRoZSBnaXZlbiBuYW1lLgorICovCitnYm9vbGVhbgorZ3N0X3BsdWdpbl9uYW1lX2ZpbHRlciAoR3N0UGx1Z2luICogcGx1Z2luLCBjb25zdCBnY2hhciAqIG5hbWUpCit7CisgIHJldHVybiAocGx1Z2luLT5kZXNjLm5hbWUgJiYgIXN0cmNtcCAocGx1Z2luLT5kZXNjLm5hbWUsIG5hbWUpKTsKK30KKworI2lmIDAKKy8qKgorICogZ3N0X3BsdWdpbl9maW5kX2ZlYXR1cmU6CisgKiBAcGx1Z2luOiBwbHVnaW4gdG8gZ2V0IHRoZSBmZWF0dXJlIGZyb20KKyAqIEBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgZmVhdHVyZSB0byBmaW5kCisgKiBAdHlwZTogVGhlIHR5cGUgb2YgdGhlIGZlYXR1cmUgdG8gZmluZAorICoKKyAqIEZpbmQgYSBmZWF0dXJlIG9mIHRoZSBnaXZlbiBuYW1lIGFuZCB0eXBlIGluIHRoZSBnaXZlbiBwbHVnaW4uCisgKgorICogUmV0dXJuczogYSBHc3RQbHVnaW5GZWF0dXJlIG9yIE5VTEwgaWYgdGhlIGZlYXR1cmUgd2FzIG5vdCBmb3VuZC4KKyAqLworR3N0UGx1Z2luRmVhdHVyZSAqCitnc3RfcGx1Z2luX2ZpbmRfZmVhdHVyZSAoR3N0UGx1Z2luICogcGx1Z2luLCBjb25zdCBnY2hhciAqIG5hbWUsIEdUeXBlIHR5cGUpCit7CisgIEdMaXN0ICp3YWxrOworICBHc3RQbHVnaW5GZWF0dXJlICpyZXN1bHQgPSBOVUxMOworICBHc3RUeXBlTmFtZURhdGEgZGF0YTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAobmFtZSAhPSBOVUxMLCBOVUxMKTsKKworICBkYXRhLnR5cGUgPSB0eXBlOworICBkYXRhLm5hbWUgPSBuYW1lOworCisgIHdhbGsgPSBnc3RfZmlsdGVyX3J1biAocGx1Z2luLT5mZWF0dXJlcywKKyAgICAgIChHc3RGaWx0ZXJGdW5jKSBnc3RfcGx1Z2luX2ZlYXR1cmVfdHlwZV9uYW1lX2ZpbHRlciwgVFJVRSwgJmRhdGEpOworCisgIGlmICh3YWxrKSB7CisgICAgcmVzdWx0ID0gR1NUX1BMVUdJTl9GRUFUVVJFICh3YWxrLT5kYXRhKTsKKworICAgIGdzdF9vYmplY3RfcmVmIChyZXN1bHQpOworICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUgKHdhbGspOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCisjaWYgMAorc3RhdGljIGdib29sZWFuCitnc3RfcGx1Z2luX2ZlYXR1cmVfbmFtZV9maWx0ZXIgKEdzdFBsdWdpbkZlYXR1cmUgKiBmZWF0dXJlLCBjb25zdCBnY2hhciAqIG5hbWUpCit7CisgIHJldHVybiAhc3RyY21wIChuYW1lLCBHU1RfUExVR0lOX0ZFQVRVUkVfTkFNRSAoZmVhdHVyZSkpOworfQorI2VuZGlmCisKKyNpZiAwCisvKioKKyAqIGdzdF9wbHVnaW5fZmluZF9mZWF0dXJlX2J5X25hbWU6CisgKiBAcGx1Z2luOiBwbHVnaW4gdG8gZ2V0IHRoZSBmZWF0dXJlIGZyb20KKyAqIEBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgZmVhdHVyZSB0byBmaW5kCisgKgorICogRmluZCBhIGZlYXR1cmUgb2YgdGhlIGdpdmVuIG5hbWUgaW4gdGhlIGdpdmVuIHBsdWdpbi4KKyAqCisgKiBSZXR1cm5zOiBhIEdzdFBsdWdpbkZlYXR1cmUgb3IgTlVMTCBpZiB0aGUgZmVhdHVyZSB3YXMgbm90IGZvdW5kLgorICovCitHc3RQbHVnaW5GZWF0dXJlICoKK2dzdF9wbHVnaW5fZmluZF9mZWF0dXJlX2J5X25hbWUgKEdzdFBsdWdpbiAqIHBsdWdpbiwgY29uc3QgZ2NoYXIgKiBuYW1lKQoreworICBHTGlzdCAqd2FsazsKKyAgR3N0UGx1Z2luRmVhdHVyZSAqcmVzdWx0ID0gTlVMTDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAobmFtZSAhPSBOVUxMLCBOVUxMKTsKKworICB3YWxrID0gZ3N0X2ZpbHRlcl9ydW4gKHBsdWdpbi0+ZmVhdHVyZXMsCisgICAgICAoR3N0RmlsdGVyRnVuYykgZ3N0X3BsdWdpbl9mZWF0dXJlX25hbWVfZmlsdGVyLCBUUlVFLCAodm9pZCAqKSBuYW1lKTsKKworICBpZiAod2FsaykgeworICAgIHJlc3VsdCA9IEdTVF9QTFVHSU5fRkVBVFVSRSAod2Fsay0+ZGF0YSk7CisKKyAgICBnc3Rfb2JqZWN0X3JlZiAocmVzdWx0KTsKKyAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlICh3YWxrKTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworLyoqCisgKiBnc3RfcGx1Z2luX2xvYWRfYnlfbmFtZToKKyAqIEBuYW1lOiBuYW1lIG9mIHBsdWdpbiB0byBsb2FkCisgKgorICogTG9hZCB0aGUgbmFtZWQgcGx1Z2luLiBSZWZzIHRoZSBwbHVnaW4uCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIHJlZmVyZW5jZSB0byBhIGxvYWRlZCBwbHVnaW4sIG9yIE5VTEwgb24gZXJyb3IuCisgKi8KK0dzdFBsdWdpbiAqCitnc3RfcGx1Z2luX2xvYWRfYnlfbmFtZSAoY29uc3QgZ2NoYXIgKiBuYW1lKQoreworICBHc3RQbHVnaW4gKnBsdWdpbiwgKm5ld3BsdWdpbjsKKyAgR0Vycm9yICplcnJvciA9IE5VTEw7CisKKyAgR1NUX0RFQlVHICgibG9va2luZyB1cCBwbHVnaW4gJXMgaW4gZGVmYXVsdCByZWdpc3RyeSIsIG5hbWUpOworICBwbHVnaW4gPSBnc3RfcmVnaXN0cnlfZmluZF9wbHVnaW4gKGdzdF9yZWdpc3RyeV9nZXRfZGVmYXVsdCAoKSwgbmFtZSk7CisgIGlmIChwbHVnaW4pIHsKKyAgICBHU1RfREVCVUcgKCJsb2FkaW5nIHBsdWdpbiAlcyBmcm9tIGZpbGUgJXMiLCBuYW1lLCBwbHVnaW4tPmZpbGVuYW1lKTsKKyAgICBuZXdwbHVnaW4gPSBnc3RfcGx1Z2luX2xvYWRfZmlsZSAocGx1Z2luLT5maWxlbmFtZSwgJmVycm9yKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChwbHVnaW4pOworCisgICAgaWYgKCFuZXdwbHVnaW4pIHsKKyAgICAgIEdTVF9XQVJOSU5HICgibG9hZF9wbHVnaW4gZXJyb3I6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgZ19lcnJvcl9mcmVlIChlcnJvcik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgLyogbmV3cGx1Z2luIHdhcyByZWZmZWQgYnkgbG9hZF9maWxlICovCisgICAgcmV0dXJuIG5ld3BsdWdpbjsKKyAgfQorCisgIEdTVF9ERUJVRyAoIkNvdWxkIG5vdCBmaW5kIHBsdWdpbiAlcyBpbiByZWdpc3RyeSIsIG5hbWUpOworICByZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBnc3RfcGx1Z2luX2xvYWQ6CisgKiBAcGx1Z2luOiAodHJhbnNmZXIgbm9uZSk6IHBsdWdpbiB0byBsb2FkCisgKgorICogTG9hZHMgQHBsdWdpbi4gTm90ZSB0aGF0IHRoZSAqcmV0dXJuIHZhbHVlKiBpcyB0aGUgbG9hZGVkIHBsdWdpbjsgQHBsdWdpbiBpcworICogdW50b3VjaGVkLiBUaGUgbm9ybWFsIHVzZSBwYXR0ZXJuIG9mIHRoaXMgZnVuY3Rpb24gZ29lcyBsaWtlIHRoaXM6CisgKgorICogPHByb2dyYW1saXN0aW5nPgorICogR3N0UGx1Z2luICpsb2FkZWRfcGx1Z2luOworICogbG9hZGVkX3BsdWdpbiA9IGdzdF9wbHVnaW5fbG9hZCAocGx1Z2luKTsKKyAqIC8vIHByZXN1bWFibHksIHdlJ3JlIG5vIGxvbmdlciBpbnRlcmVzdGVkIGluIHRoZSBwb3RlbnRpYWxseS11bmxvYWRlZCBwbHVnaW4KKyAqIGdzdF9vYmplY3RfdW5yZWYgKHBsdWdpbik7CisgKiBwbHVnaW4gPSBsb2FkZWRfcGx1Z2luOworICogPC9wcm9ncmFtbGlzdGluZz4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgcmVmZXJlbmNlIHRvIGEgbG9hZGVkIHBsdWdpbiwgb3IgTlVMTCBvbiBlcnJvci4KKyAqLworR3N0UGx1Z2luICoKK2dzdF9wbHVnaW5fbG9hZCAoR3N0UGx1Z2luICogcGx1Z2luKQoreworICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKyAgR3N0UGx1Z2luICpuZXdwbHVnaW47CisKKyAgaWYgKGdzdF9wbHVnaW5faXNfbG9hZGVkIChwbHVnaW4pKSB7CisgICAgcmV0dXJuIHBsdWdpbjsKKyAgfQorCisgIGlmICghKG5ld3BsdWdpbiA9IGdzdF9wbHVnaW5fbG9hZF9maWxlIChwbHVnaW4tPmZpbGVuYW1lLCAmZXJyb3IpKSkKKyAgICBnb3RvIGxvYWRfZXJyb3I7CisKKyAgcmV0dXJuIG5ld3BsdWdpbjsKKworbG9hZF9lcnJvcjoKKyAgeworICAgIEdTVF9XQVJOSU5HICgibG9hZF9wbHVnaW4gZXJyb3I6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgIGdfZXJyb3JfZnJlZSAoZXJyb3IpOworICAgIHJldHVybiBOVUxMOworICB9Cit9CisKKy8qKgorICogZ3N0X3BsdWdpbl9saXN0X2ZyZWU6CisgKiBAbGlzdDogKHRyYW5zZmVyIGZ1bGwpIChlbGVtZW50LXR5cGUgR3N0LlBsdWdpbik6IGxpc3Qgb2YgI0dzdFBsdWdpbgorICoKKyAqIFVucmVmcyBlYWNoIG1lbWJlciBvZiBAbGlzdCwgdGhlbiBmcmVlcyB0aGUgbGlzdC4KKyAqLwordm9pZAorZ3N0X3BsdWdpbl9saXN0X2ZyZWUgKEdMaXN0ICogbGlzdCkKK3sKKyAgR0xpc3QgKmc7CisKKyAgZm9yIChnID0gbGlzdDsgZzsgZyA9IGctPm5leHQpIHsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfUExVR0lOX0NBU1QgKGctPmRhdGEpKTsKKyAgfQorICBnX2xpc3RfZnJlZSAobGlzdCk7Cit9CisKKy8qID09PT09IHBsdWdpbiBkZXBlbmRlbmNpZXMgPT09PT0gKi8KKworLyogU2NlbmFyaW9zOgorICogRU5WICsgeHl6ICAgICB3aGVyZSBFTlYgY2FuIGNvbnRhaW4gbXVsdGlwbGUgdmFsdWVzIHNlcGFyYXRlZCBieSBTRVBBUkFUT1IKKyAqICAgICAgICAgICAgICAgeHl6IG1heSBiZSAiIiAoaWYgRU5WIGNvbnRhaW5zIHBhdGggdG8gZmlsZSByYXRoZXIgdGhhbiBkaXIpCisgKiBFTlYgKyAqeHl6ICAgc2FtZSBhcyBhYm92ZSwgYnV0IHh5eiBhY3RzIGFzIHN1ZmZpeCBmaWx0ZXIKKyAqIEVOViArIHh5eiogICBzYW1lIGFzIGFib3ZlLCBidXQgeHl6IGFjdHMgYXMgcHJlZml4IGZpbHRlciAoaXMgdGhpcyBuZWVkZWQ/KQorICogRU5WICsgKnh5eiogIHNhbWUgYXMgYWJvdmUsIGJ1dCB4eXogYWN0cyBhcyBzdHJzdHIgZmlsdGVyIChpcyB0aGlzIG5lZWRlZD8pCisgKiAKKyAqIHNhbWUgYXMgYWJvdmUsIHdpdGggYWRkaXRpb25hbCBwYXRocyBoYXJkLWNvZGVkIGF0IGNvbXBpbGUtdGltZToKKyAqICAgLSBvbmx5IGNoZWNrIHBhdGhzICsgLi4uIGlmIEVOViBpcyBub3Qgc2V0IG9yIHlpZWxkcyBub3QgcGF0aHMKKyAqICAgLSBhbHdheXMgY2hlY2sgcGF0aHMgKyAuLi4gaW4gYWRkaXRpb24gdG8gRU5WCisgKgorICogV2hlbiB1c2VyIHNwZWNpZmllcyBzZXQgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBoZS9zaGUgbWF5IGFsc28gdXNlIGUuZy4KKyAqICJIT01FLy5teXN0dWZmL3BsdWdpbnMiLCBhbmQgd2UnbGwgZXhwYW5kIHRoZSBjb250ZW50IG9mICRIT01FIHdpdGggdGhlCisgKiByZW1haW5kZXIgCisgKi8KKworLyogd2Ugc3RvcmUgaW4gcmVnaXN0cnk6CisgKiAgc2V0cyBvZjoKKyAqICAgeyAKKyAqICAgICAtIGVudmlyb25tZW50IHZhcmlhYmxlcyAoYXJyYXkgb2Ygc3RyaW5ncykKKyAqICAgICAtIGxhc3QgaGFzaCBvZiBlbnYgdmFyaWFibGUgY29udGVudHMgKHVpbnQpIChzbyB3ZSBjYW4gYXZvaWQgZG9pbmcgc3RhdHMKKyAqICAgICAgIGlmIG9uZSBvZiB0aGUgZW52IHZhcnMgaGFzIGNoYW5nZWQ7IHByZW1hdHVyZSBvcHRpbWlzYXRpb24gZ2Fsb3JlKQorICogICAgIC0gaGFyZC1jb2RlZCBwYXRocyAoYXJyYXkgb2Ygc3RyaW5ncykKKyAqICAgICAtIHh5eiBmaWxlbmFtZS9zdWZmaXgvcHJlZml4IHN0cmluZ3MgKGFycmF5IG9mIHN0cmluZ3MpCisgKiAgICAgLSBmbGFncyAoaW50KQorICogICAgIC0gbGFzdCBoYXNoIG9mIGZpbGUvZGlyIHN0YXRzIChpbnQpCisgKiAgIH0KKyAqICAgKD0gc3RydWN0IEdzdFBsdWdpbkRlcCkKKyAqLworCitzdGF0aWMgZ3VpbnQKK2dzdF9wbHVnaW5fZXh0X2RlcF9nZXRfZW52X3ZhcnNfaGFzaCAoR3N0UGx1Z2luICogcGx1Z2luLCBHc3RQbHVnaW5EZXAgKiBkZXApCit7CisgIGdjaGFyICoqZTsKKyAgZ3VpbnQgaGFzaDsKKworICAvKiB0aGVyZSdzIG5vIGRlZXBlciBsb2dpYyB0byB3aGF0IHdlIGRvIGhlcmU7IGFsbCB3ZSB3YW50IHRvIGtub3cgKHdoZW4KKyAgICogY2hlY2tpbmcgaWYgdGhlIHBsdWdpbiBuZWVkcyB0byBiZSByZXNjYW5uZWQpIGlzIHdoZXRoZXIgdGhlIGNvbnRlbnQgb2YKKyAgICogb25lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gdGhlIGxpc3QgaXMgZGlmZmVyZW50IGZyb20gd2hlbiBpdAorICAgKiB3YXMgbGFzdCBzY2FubmVkICovCisgIGhhc2ggPSAwOworICBmb3IgKGUgPSBkZXAtPmVudl92YXJzOyBlICE9IE5VTEwgJiYgKmUgIT0gTlVMTDsgKytlKSB7CisgICAgY29uc3QgZ2NoYXIgKnZhbDsKKyAgICBnY2hhciBlbnZfdmFyWzI1Nl07CisKKyAgICAvKiBvcmRlciBtYXR0ZXJzOiAidmFsIixOVUxMIG5lZWRzIHRvIHlpZWxkIGEgZGlmZmVyZW50IGhhc2ggdGhhbgorICAgICAqIE5VTEwsInZhbCIsIHNvIGRvIGEgc2hpZnQgaGVyZSB3aGV0aGVyIHRoZSB2YXIgaXMgc2V0IG9yIG5vdCAqLworICAgIGhhc2ggPSBoYXNoIDw8IDU7CisKKyAgICAvKiB3YW50IGVudmlyb25tZW50IHZhcmlhYmxlIGF0IGJlZ2lubmluZyBvZiBzdHJpbmcgKi8KKyAgICBpZiAoIWdfYXNjaWlfaXNhbG51bSAoKiplKSkgeworICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwbHVnaW4sICJzdHJpbmcgcHJlZml4IGlzIG5vdCBhIHZhbGlkIGVudmlyb25tZW50ICIKKyAgICAgICAgICAidmFyaWFibGUgc3RyaW5nOiAlcyIsICplKTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIC8qIHVzZXIgaXMgYWxsb3dlZCB0byBzcGVjaWZ5IGUuZy4gIkhPTUUvLnBpdGl2aS9wbHVnaW5zIiAqLworICAgIGdfc3RybGNweSAoZW52X3ZhciwgKmUsIHNpemVvZiAoZW52X3ZhcikpOworICAgIGdfc3RyZGVsaW1pdCAoZW52X3ZhciwgIi9cXCIsICdcMCcpOworCisgICAgaWYgKCh2YWwgPSBnX2dldGVudiAoZW52X3ZhcikpKQorICAgICAgaGFzaCArPSBnX3N0cl9oYXNoICh2YWwpOworICB9CisKKyAgcmV0dXJuIGhhc2g7Cit9CisKK2dib29sZWFuCitfcHJpdl9wbHVnaW5fZGVwc19lbnZfdmFyc19jaGFuZ2VkIChHc3RQbHVnaW4gKiBwbHVnaW4pCit7CisgIEdMaXN0ICpsOworCisgIGZvciAobCA9IHBsdWdpbi0+cHJpdi0+ZGVwczsgbCAhPSBOVUxMOyBsID0gbC0+bmV4dCkgeworICAgIEdzdFBsdWdpbkRlcCAqZGVwID0gbC0+ZGF0YTsKKworICAgIGlmIChkZXAtPmVudl9oYXNoICE9IGdzdF9wbHVnaW5fZXh0X2RlcF9nZXRfZW52X3ZhcnNfaGFzaCAocGx1Z2luLCBkZXApKQorICAgICAgcmV0dXJuIFRSVUU7CisgIH0KKworICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBHTGlzdCAqCitnc3RfcGx1Z2luX2V4dF9kZXBfZXh0cmFjdF9lbnZfdmFyc19wYXRocyAoR3N0UGx1Z2luICogcGx1Z2luLAorICAgIEdzdFBsdWdpbkRlcCAqIGRlcCkKK3sKKyAgZ2NoYXIgKipldmFyczsKKyAgR0xpc3QgKnBhdGhzID0gTlVMTDsKKworICBmb3IgKGV2YXJzID0gZGVwLT5lbnZfdmFyczsgZXZhcnMgIT0gTlVMTCAmJiAqZXZhcnMgIT0gTlVMTDsgKytldmFycykgeworICAgIGNvbnN0IGdjaGFyICplOworICAgIGdjaGFyICoqY29tcG9uZW50czsKKworICAgIC8qIHdhbnQgZW52aXJvbm1lbnQgdmFyaWFibGUgYXQgYmVnaW5uaW5nIG9mIHN0cmluZyAqLworICAgIGlmICghZ19hc2NpaV9pc2FsbnVtICgqKmV2YXJzKSkgeworICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwbHVnaW4sICJzdHJpbmcgcHJlZml4IGlzIG5vdCBhIHZhbGlkIGVudmlyb25tZW50ICIKKyAgICAgICAgICAidmFyaWFibGUgc3RyaW5nOiAlcyIsICpldmFycyk7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvKiB1c2VyIGlzIGFsbG93ZWQgdG8gc3BlY2lmeSBlLmcuICJIT01FLy5waXRpdmkvcGx1Z2lucyIsIHdoaWNoIHdlIHdhbnQgdG8KKyAgICAgKiBzcGxpdCBpbnRvIHRoZSBlbnZfdmFyIG5hbWUgY29tcG9uZW50IGFuZCB0aGUgcGF0aCBjb21wb25lbnQgKi8KKyAgICBjb21wb25lbnRzID0gZ19zdHJzcGxpdF9zZXQgKCpldmFycywgIi9cXCIsIDIpOworICAgIGdfYXNzZXJ0IChjb21wb25lbnRzICE9IE5VTEwpOworCisgICAgZSA9IGdfZ2V0ZW52IChjb21wb25lbnRzWzBdKTsKKyAgICBHU1RfTE9HX09CSkVDVCAocGx1Z2luLCAiZXhwYW5kaW5nICVzID0gJyVzJyAocGF0aCBzdWZmaXg6ICVzKSIsCisgICAgICAgIGNvbXBvbmVudHNbMF0sIEdTVF9TVFJfTlVMTCAoZSksIEdTVF9TVFJfTlVMTCAoY29tcG9uZW50c1sxXSkpOworCisgICAgaWYgKGNvbXBvbmVudHNbMV0gIT0gTlVMTCkgeworICAgICAgZ19zdHJkZWxpbWl0IChjb21wb25lbnRzWzFdLCAiL1xcIiwgR19ESVJfU0VQQVJBVE9SKTsKKyAgICB9CisKKyAgICBpZiAoZSAhPSBOVUxMICYmICplICE9ICdcMCcpIHsKKyAgICAgIGdjaGFyICoqYXJyOworICAgICAgZ3VpbnQgaTsKKworICAgICAgYXJyID0gZ19zdHJzcGxpdCAoZSwgR19TRUFSQ0hQQVRIX1NFUEFSQVRPUl9TLCAtMSk7CisKKyAgICAgIGZvciAoaSA9IDA7IGFyciAhPSBOVUxMICYmIGFycltpXSAhPSBOVUxMOyArK2kpIHsKKyAgICAgICAgZ2NoYXIgKmZ1bGxfcGF0aDsKKworICAgICAgICBpZiAoIWdfcGF0aF9pc19hYnNvbHV0ZSAoYXJyW2ldKSkgeworICAgICAgICAgIEdTVF9JTkZPX09CSkVDVCAocGx1Z2luLCAiaWdub3JpbmcgZW52aXJvbm1lbnQgdmFyaWFibGUgY29udGVudCAnJXMnIgorICAgICAgICAgICAgICAiOiBlaXRoZXIgbm90IGFuIGFic29sdXRlIHBhdGggb3Igbm90IGEgcGF0aCBhdCBhbGwiLCBhcnJbaV0pOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbXBvbmVudHNbMV0gIT0gTlVMTCkgeworICAgICAgICAgIGZ1bGxfcGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUgKGFycltpXSwgY29tcG9uZW50c1sxXSwgTlVMTCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgZnVsbF9wYXRoID0gZ19zdHJkdXAgKGFycltpXSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWdfbGlzdF9maW5kX2N1c3RvbSAocGF0aHMsIGZ1bGxfcGF0aCwgKEdDb21wYXJlRnVuYykgc3RyY21wKSkgeworICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChwbHVnaW4sICJwYXRoOiAnJXMnIiwgZnVsbF9wYXRoKTsKKyAgICAgICAgICBwYXRocyA9IGdfbGlzdF9wcmVwZW5kIChwYXRocywgZnVsbF9wYXRoKTsKKyAgICAgICAgICBmdWxsX3BhdGggPSBOVUxMOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChwbHVnaW4sICJwYXRoOiAnJXMnIChkdXBsaWNhdGUsaWdub3JpbmcpIiwgZnVsbF9wYXRoKTsKKyAgICAgICAgICBnX2ZyZWUgKGZ1bGxfcGF0aCk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgZ19zdHJmcmVldiAoYXJyKTsKKyAgICB9CisKKyAgICBnX3N0cmZyZWV2IChjb21wb25lbnRzKTsKKyAgfQorCisgIEdTVF9MT0dfT0JKRUNUIChwbHVnaW4sICJFeHRyYWN0ZWQgJWQgcGF0aHMgZnJvbSBlbnZpcm9ubWVudCIsCisgICAgICBnX2xpc3RfbGVuZ3RoIChwYXRocykpOworCisgIHJldHVybiBwYXRoczsKK30KKworc3RhdGljIGd1aW50Citnc3RfcGx1Z2luX2V4dF9kZXBfZ2V0X2hhc2hfZnJvbV9zdGF0X2VudHJ5IChHU3RhdEJ1ZiAqIHMpCit7CisgIGlmICghKHMtPnN0X21vZGUgJiAoU19JRkRJUiB8IFNfSUZSRUcpKSkKKyAgICByZXR1cm4gKGd1aW50KSAtIDE7CisKKyAgLyogY29tcGxldGVseSByYW5kb20gZm9ybXVsYSAqLworICByZXR1cm4gKChzLT5zdF9zaXplIDw8IDMpICsgKHMtPnN0X210aW1lIDw8IDUpKSBeIHMtPnN0X2N0aW1lOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9wbHVnaW5fZXh0X2RlcF9kaXJlbnRyeV9tYXRjaGVzIChHc3RQbHVnaW4gKiBwbHVnaW4sIGNvbnN0IGdjaGFyICogZW50cnksCisgICAgY29uc3QgZ2NoYXIgKiogZmlsZW5hbWVzLCBHc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3MgZmxhZ3MpCit7CisgIC8qIG5vIGZpbGVuYW1lcyBzcGVjaWZpZWQsIG1hdGNoIGFsbCBlbnRyaWVzIGZvciBub3cgKGNvdWxkIHByb2JhYmx5CisgICAqIG9wdGltaXNlIGJ5IGp1c3QgdGFraW5nIHRoZSBkaXIgc3RhdCBoYXNoIG9yIHNvKSAqLworICBpZiAoZmlsZW5hbWVzID09IE5VTEwgfHwgKmZpbGVuYW1lcyA9PSBOVUxMIHx8ICoqZmlsZW5hbWVzID09ICdcMCcpCisgICAgcmV0dXJuIFRSVUU7CisKKyAgd2hpbGUgKCpmaWxlbmFtZXMgIT0gTlVMTCkgeworICAgIC8qIHN1ZmZpeCBtYXRjaD8gKi8KKyAgICBpZiAoKChmbGFncyAmIEdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX0ZJTEVfTkFNRV9JU19TVUZGSVgpKSAmJgorICAgICAgICBnX3N0cl9oYXNfc3VmZml4IChlbnRyeSwgKmZpbGVuYW1lcykpIHsKKyAgICAgIHJldHVybiBUUlVFOworICAgICAgLyogZWxzZSBpdCdzIGFuIGV4YWN0IG1hdGNoIHRoYXQncyBuZWVkZWQgKi8KKyAgICB9IGVsc2UgaWYgKHN0cmNtcCAoZW50cnksICpmaWxlbmFtZXMpID09IDApIHsKKyAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBHU1RfTE9HICgiJXMgZG9lcyBub3QgbWF0Y2ggJXMsIGZsYWdzPTB4JTA0eCIsIGVudHJ5LCAqZmlsZW5hbWVzLCBmbGFncyk7CisgICAgKytmaWxlbmFtZXM7CisgIH0KKyAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ3VpbnQKK2dzdF9wbHVnaW5fZXh0X2RlcF9zY2FuX2Rpcl9hbmRfbWF0Y2hfbmFtZXMgKEdzdFBsdWdpbiAqIHBsdWdpbiwKKyAgICBjb25zdCBnY2hhciAqIHBhdGgsIGNvbnN0IGdjaGFyICoqIGZpbGVuYW1lcywKKyAgICBHc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3MgZmxhZ3MsIGludCBkZXB0aCkKK3sKKyAgY29uc3QgZ2NoYXIgKmVudHJ5OworICBnYm9vbGVhbiByZWN1cnNlX2RpcnM7CisgIEdFcnJvciAqZXJyID0gTlVMTDsKKyAgR0RpciAqZGlyOworICBndWludCBoYXNoID0gMDsKKworICByZWN1cnNlX2RpcnMgPSAhICEoZmxhZ3MgJiBHU1RfUExVR0lOX0RFUEVOREVOQ1lfRkxBR19SRUNVUlNFKTsKKworICBkaXIgPSBnX2Rpcl9vcGVuIChwYXRoLCAwLCAmZXJyKTsKKyAgaWYgKGRpciA9PSBOVUxMKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGx1Z2luLCAiZ19kaXJfb3BlbiglcykgZmFpbGVkOiAlcyIsIHBhdGgsIGVyci0+bWVzc2FnZSk7CisgICAgZ19lcnJvcl9mcmVlIChlcnIpOworICAgIHJldHVybiAoZ3VpbnQpIC0gMTsKKyAgfQorCisgIC8qIEZJWE1FOiB3ZSdyZSBhc3N1bWluZyBoZXJlIHRoYXQgd2UgYWx3YXlzIGdldCB0aGUgZGlyZWN0b3J5IGVudHJpZXMgaW4KKyAgICogdGhlIHNhbWUgb3JkZXIsIGFuZCBub3QgaW4gYSByYW5kb20gb3JkZXIgKi8KKyAgd2hpbGUgKChlbnRyeSA9IGdfZGlyX3JlYWRfbmFtZSAoZGlyKSkpIHsKKyAgICBnYm9vbGVhbiBoYXZlX21hdGNoOworICAgIEdTdGF0QnVmIHM7CisgICAgZ2NoYXIgKmZ1bGxfcGF0aDsKKyAgICBndWludCBmaGFzaDsKKworICAgIGhhdmVfbWF0Y2ggPQorICAgICAgICBnc3RfcGx1Z2luX2V4dF9kZXBfZGlyZW50cnlfbWF0Y2hlcyAocGx1Z2luLCBlbnRyeSwgZmlsZW5hbWVzLCBmbGFncyk7CisKKyAgICAvKiBhdm9pZCB0aGUgc3RhdCBpZiBwb3NzaWJsZSAqLworICAgIGlmICghaGF2ZV9tYXRjaCAmJiAhcmVjdXJzZV9kaXJzKQorICAgICAgY29udGludWU7CisKKyAgICBmdWxsX3BhdGggPSBnX2J1aWxkX2ZpbGVuYW1lIChwYXRoLCBlbnRyeSwgTlVMTCk7CisgICAgaWYgKGdfc3RhdCAoZnVsbF9wYXRoLCAmcykgPCAwKSB7CisgICAgICBmaGFzaCA9IChndWludCkgLSAxOworICAgICAgR1NUX0xPR19PQkpFQ1QgKHBsdWdpbiwgInN0YXQ6ICVzIChlcnJvcjogJXMpIiwgZnVsbF9wYXRoLAorICAgICAgICAgIGdfc3RyZXJyb3IgKGVycm5vKSk7CisgICAgfSBlbHNlIGlmIChoYXZlX21hdGNoKSB7CisgICAgICBmaGFzaCA9IGdzdF9wbHVnaW5fZXh0X2RlcF9nZXRfaGFzaF9mcm9tX3N0YXRfZW50cnkgKCZzKTsKKyAgICAgIEdTVF9MT0dfT0JKRUNUIChwbHVnaW4sICJzdGF0OiAlcyAocmVzdWx0OiAldSkiLCBmdWxsX3BhdGgsIGZoYXNoKTsKKyAgICB9IGVsc2UgaWYgKChzLnN0X21vZGUgJiAoU19JRkRJUikpKSB7CisgICAgICBmaGFzaCA9IGdzdF9wbHVnaW5fZXh0X2RlcF9zY2FuX2Rpcl9hbmRfbWF0Y2hfbmFtZXMgKHBsdWdpbiwgZnVsbF9wYXRoLAorICAgICAgICAgIGZpbGVuYW1lcywgZmxhZ3MsIGRlcHRoICsgMSk7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIGl0J3Mgbm90IGEgbmFtZSBtYXRjaCwgd2Ugd2FudCB0byByZWN1cnNlLCBidXQgaXQncyBub3QgYSBkaXJlY3RvcnkgKi8KKyAgICAgIGdfZnJlZSAoZnVsbF9wYXRoKTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIGhhc2ggPSAoaGFzaCArIGZoYXNoKSA8PCAxOworICAgIGdfZnJlZSAoZnVsbF9wYXRoKTsKKyAgfQorCisgIGdfZGlyX2Nsb3NlIChkaXIpOworICByZXR1cm4gaGFzaDsKK30KKworc3RhdGljIGd1aW50Citnc3RfcGx1Z2luX2V4dF9kZXBfc2Nhbl9wYXRoX3dpdGhfZmlsZW5hbWVzIChHc3RQbHVnaW4gKiBwbHVnaW4sCisgICAgY29uc3QgZ2NoYXIgKiBwYXRoLCBjb25zdCBnY2hhciAqKiBmaWxlbmFtZXMsCisgICAgR3N0UGx1Z2luRGVwZW5kZW5jeUZsYWdzIGZsYWdzKQoreworICBjb25zdCBnY2hhciAqZW1wdHlfZmlsZW5hbWVzW10gPSB7ICIiLCBOVUxMIH07CisgIGdib29sZWFuIHJlY3Vyc2VfaW50b19kaXJzLCBwYXJ0aWFsX25hbWVzOworICBndWludCBpLCBoYXNoID0gMDsKKworICAvKiB0byBhdm9pZCBzcGVjaWFsLWNhc2luZyBiZWxvdyAoRklYTUU/KSAqLworICBpZiAoZmlsZW5hbWVzID09IE5VTEwgfHwgKmZpbGVuYW1lcyA9PSBOVUxMKQorICAgIGZpbGVuYW1lcyA9IGVtcHR5X2ZpbGVuYW1lczsKKworICByZWN1cnNlX2ludG9fZGlycyA9ICEgIShmbGFncyAmIEdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX1JFQ1VSU0UpOworICBwYXJ0aWFsX25hbWVzID0gISAhKGZsYWdzICYgR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfRklMRV9OQU1FX0lTX1NVRkZJWCk7CisKKyAgLyogaWYgd2UgY2FuIGNvbnN0cnVjdCB0aGUgZXhhY3QgcGF0aHMgdG8gY2hlY2sgd2l0aCB0aGUgZGF0YSB3ZSBoYXZlLCBqdXN0CisgICAqIHN0YXQgdGhlbSBvbmUgYnkgb25lOyB0aGlzIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gb3BlbmluZyB0aGUgZGlyZWN0b3J5CisgICAqIGFuZCBnb2luZyB0aHJvdWdoIGVhY2ggZW50cnkgdG8gc2VlIGlmIGl0IG1hdGNoZXMgb25lIG9mIG91ciBmaWxlbmFtZXMuICovCisgIGlmICghcmVjdXJzZV9pbnRvX2RpcnMgJiYgIXBhcnRpYWxfbmFtZXMpIHsKKyAgICBmb3IgKGkgPSAwOyBmaWxlbmFtZXNbaV0gIT0gTlVMTDsgKytpKSB7CisgICAgICBHU3RhdEJ1ZiBzOworICAgICAgZ2NoYXIgKmZ1bGxfcGF0aDsKKyAgICAgIGd1aW50IGZoYXNoOworCisgICAgICBmdWxsX3BhdGggPSBnX2J1aWxkX2ZpbGVuYW1lIChwYXRoLCBmaWxlbmFtZXNbaV0sIE5VTEwpOworICAgICAgaWYgKGdfc3RhdCAoZnVsbF9wYXRoLCAmcykgPCAwKSB7CisgICAgICAgIGZoYXNoID0gKGd1aW50KSAtIDE7CisgICAgICAgIEdTVF9MT0dfT0JKRUNUIChwbHVnaW4sICJzdGF0OiAlcyAoZXJyb3I6ICVzKSIsIGZ1bGxfcGF0aCwKKyAgICAgICAgICAgIGdfc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBmaGFzaCA9IGdzdF9wbHVnaW5fZXh0X2RlcF9nZXRfaGFzaF9mcm9tX3N0YXRfZW50cnkgKCZzKTsKKyAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBsdWdpbiwgInN0YXQ6ICVzIChyZXN1bHQ6ICUwOHgpIiwgZnVsbF9wYXRoLCBmaGFzaCk7CisgICAgICB9CisgICAgICBoYXNoID0gKGhhc2ggKyBmaGFzaCkgPDwgMTsKKyAgICAgIGdfZnJlZSAoZnVsbF9wYXRoKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgaGFzaCA9IGdzdF9wbHVnaW5fZXh0X2RlcF9zY2FuX2Rpcl9hbmRfbWF0Y2hfbmFtZXMgKHBsdWdpbiwgcGF0aCwKKyAgICAgICAgZmlsZW5hbWVzLCBmbGFncywgMCk7CisgIH0KKworICByZXR1cm4gaGFzaDsKK30KKworc3RhdGljIGd1aW50Citnc3RfcGx1Z2luX2V4dF9kZXBfZ2V0X3N0YXRfaGFzaCAoR3N0UGx1Z2luICogcGx1Z2luLCBHc3RQbHVnaW5EZXAgKiBkZXApCit7CisgIGdib29sZWFuIHBhdGhzX2FyZV9kZWZhdWx0X29ubHk7CisgIEdMaXN0ICpzY2FuX3BhdGhzOworICBndWludCBzY2FuX2hhc2ggPSAwOworCisgIEdTVF9MT0dfT0JKRUNUIChwbHVnaW4sICJzdGFydCIpOworCisgIHBhdGhzX2FyZV9kZWZhdWx0X29ubHkgPQorICAgICAgZGVwLT5mbGFncyAmIEdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX1BBVEhTX0FSRV9ERUZBVUxUX09OTFk7CisKKyAgc2Nhbl9wYXRocyA9IGdzdF9wbHVnaW5fZXh0X2RlcF9leHRyYWN0X2Vudl92YXJzX3BhdGhzIChwbHVnaW4sIGRlcCk7CisKKyAgaWYgKHNjYW5fcGF0aHMgPT0gTlVMTCB8fCAhcGF0aHNfYXJlX2RlZmF1bHRfb25seSkgeworICAgIGdjaGFyICoqcGF0aHM7CisKKyAgICBmb3IgKHBhdGhzID0gZGVwLT5wYXRoczsgcGF0aHMgIT0gTlVMTCAmJiAqcGF0aHMgIT0gTlVMTDsgKytwYXRocykgeworICAgICAgY29uc3QgZ2NoYXIgKnBhdGggPSAqcGF0aHM7CisKKyAgICAgIGlmICghZ19saXN0X2ZpbmRfY3VzdG9tIChzY2FuX3BhdGhzLCBwYXRoLCAoR0NvbXBhcmVGdW5jKSBzdHJjbXApKSB7CisgICAgICAgIEdTVF9MT0dfT0JKRUNUIChwbHVnaW4sICJwYXRoOiAnJXMnIiwgcGF0aCk7CisgICAgICAgIHNjYW5fcGF0aHMgPSBnX2xpc3RfcHJlcGVuZCAoc2Nhbl9wYXRocywgZ19zdHJkdXAgKHBhdGgpKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIEdTVF9MT0dfT0JKRUNUIChwbHVnaW4sICJwYXRoOiAnJXMnIChkdXBsaWNhdGUsIGlnbm9yaW5nKSIsIHBhdGgpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIC8qIG5vdCB0aGF0IHRoZSBvcmRlciByZWFsbHkgbWF0dGVycywgYnV0IGl0IG1ha2VzIGRlYnVnZ2luZyBlYXNpZXIgKi8KKyAgc2Nhbl9wYXRocyA9IGdfbGlzdF9yZXZlcnNlIChzY2FuX3BhdGhzKTsKKworICB3aGlsZSAoc2Nhbl9wYXRocyAhPSBOVUxMKSB7CisgICAgY29uc3QgZ2NoYXIgKnBhdGggPSBzY2FuX3BhdGhzLT5kYXRhOworCisgICAgc2Nhbl9oYXNoICs9IGdzdF9wbHVnaW5fZXh0X2RlcF9zY2FuX3BhdGhfd2l0aF9maWxlbmFtZXMgKHBsdWdpbiwgcGF0aCwKKyAgICAgICAgKGNvbnN0IGdjaGFyICoqKSBkZXAtPm5hbWVzLCBkZXAtPmZsYWdzKTsKKyAgICBzY2FuX2hhc2ggPSBzY2FuX2hhc2ggPDwgMTsKKworICAgIGdfZnJlZSAoc2Nhbl9wYXRocy0+ZGF0YSk7CisgICAgc2Nhbl9wYXRocyA9IGdfbGlzdF9kZWxldGVfbGluayAoc2Nhbl9wYXRocywgc2Nhbl9wYXRocyk7CisgIH0KKworICBHU1RfTE9HX09CSkVDVCAocGx1Z2luLCAiZG9uZSwgc2Nhbl9oYXNoOiAlMDh4Iiwgc2Nhbl9oYXNoKTsKKyAgcmV0dXJuIHNjYW5faGFzaDsKK30KKworZ2Jvb2xlYW4KK19wcml2X3BsdWdpbl9kZXBzX2ZpbGVzX2NoYW5nZWQgKEdzdFBsdWdpbiAqIHBsdWdpbikKK3sKKyAgR0xpc3QgKmw7CisKKyAgZm9yIChsID0gcGx1Z2luLT5wcml2LT5kZXBzOyBsICE9IE5VTEw7IGwgPSBsLT5uZXh0KSB7CisgICAgR3N0UGx1Z2luRGVwICpkZXAgPSBsLT5kYXRhOworCisgICAgaWYgKGRlcC0+c3RhdF9oYXNoICE9IGdzdF9wbHVnaW5fZXh0X2RlcF9nZXRfc3RhdF9oYXNoIChwbHVnaW4sIGRlcCkpCisgICAgICByZXR1cm4gVFJVRTsKKyAgfQorCisgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9wbHVnaW5fZXh0X2RlcF9mcmVlIChHc3RQbHVnaW5EZXAgKiBkZXApCit7CisgIGdfc3RyZnJlZXYgKGRlcC0+ZW52X3ZhcnMpOworICBnX3N0cmZyZWV2IChkZXAtPnBhdGhzKTsKKyAgZ19zdHJmcmVldiAoZGVwLT5uYW1lcyk7CisgIGdfc2xpY2VfZnJlZSAoR3N0UGx1Z2luRGVwLCBkZXApOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9wbHVnaW5fZXh0X2RlcF9zdHJ2X2VxdWFsIChnY2hhciAqKiBhcnIxLCBnY2hhciAqKiBhcnIyKQoreworICBpZiAoYXJyMSA9PSBhcnIyKQorICAgIHJldHVybiBUUlVFOworICBpZiAoYXJyMSA9PSBOVUxMIHx8IGFycjIgPT0gTlVMTCkKKyAgICByZXR1cm4gRkFMU0U7CisgIGZvciAoOyAqYXJyMSAhPSBOVUxMICYmICphcnIyICE9IE5VTEw7ICsrYXJyMSwgKythcnIyKSB7CisgICAgaWYgKHN0cmNtcCAoKmFycjEsICphcnIyKSAhPSAwKQorICAgICAgcmV0dXJuIEZBTFNFOworICB9CisgIHJldHVybiAoKmFycjEgPT0gKmFycjIpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9wbHVnaW5fZXh0X2RlcF9lcXVhbHMgKEdzdFBsdWdpbkRlcCAqIGRlcCwgY29uc3QgZ2NoYXIgKiogZW52X3ZhcnMsCisgICAgY29uc3QgZ2NoYXIgKiogcGF0aHMsIGNvbnN0IGdjaGFyICoqIG5hbWVzLCBHc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3MgZmxhZ3MpCit7CisgIGlmIChkZXAtPmZsYWdzICE9IGZsYWdzKQorICAgIHJldHVybiBGQUxTRTsKKworICByZXR1cm4gZ3N0X3BsdWdpbl9leHRfZGVwX3N0cnZfZXF1YWwgKGRlcC0+ZW52X3ZhcnMsIChnY2hhciAqKikgZW52X3ZhcnMpICYmCisgICAgICBnc3RfcGx1Z2luX2V4dF9kZXBfc3Rydl9lcXVhbCAoZGVwLT5wYXRocywgKGdjaGFyICoqKSBwYXRocykgJiYKKyAgICAgIGdzdF9wbHVnaW5fZXh0X2RlcF9zdHJ2X2VxdWFsIChkZXAtPm5hbWVzLCAoZ2NoYXIgKiopIG5hbWVzKTsKK30KKworLyoqCisgKiBnc3RfcGx1Z2luX2FkZF9kZXBlbmRlbmN5OgorICogQHBsdWdpbjogYSAjR3N0UGx1Z2luCisgKiBAZW52X3ZhcnM6IE5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYWZmZWN0aW5nIHRoZQorICogICAgIGZlYXR1cmUgc2V0IG9mIHRoZSBwbHVnaW4gKGUuZy4gYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgY29udGFpbmluZworICogICAgIHBhdGhzIHdoZXJlIHRvIGxvb2sgZm9yIGFkZGl0aW9uYWwgbW9kdWxlcy9wbHVnaW5zIG9mIGEgbGlicmFyeSksCisgKiAgICAgb3IgTlVMTC4gRW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZXMgbWF5IGJlIGZvbGxvd2VkIGJ5IGEgcGF0aCBjb21wb25lbnQKKyAqICAgICAgd2hpY2ggd2lsbCBiZSBhZGRlZCB0byB0aGUgY29udGVudCBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUsIGUuZy4KKyAqICAgICAgIkhPTUUvLm15c3R1ZmYvcGx1Z2lucyIuCisgKiBAcGF0aHM6IE5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBkaXJlY3Rvcmllcy9wYXRocyB3aGVyZSBkZXBlbmRlbnQgZmlsZXMKKyAqICAgICBtYXkgYmUuCisgKiBAbmFtZXM6IE5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBmaWxlIG5hbWVzIChvciBmaWxlIG5hbWUgc3VmZml4ZXMsCisgKiAgICAgZGVwZW5kaW5nIG9uIEBmbGFncykgdG8gYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBwYXRocyBmcm9tCisgKiAgICAgQHBhdGhzIGFuZC9vciB0aGUgcGF0aHMgZXh0cmFjdGVkIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbgorICogICAgIEBlbnZfdmFycywgb3IgTlVMTC4KKyAqIEBmbGFnczogb3B0aW9uYWwgZmxhZ3MsIG9yICNHU1RfUExVR0lOX0RFUEVOREVOQ1lfRkxBR19OT05FCisgKgorICogTWFrZSBHU3RyZWFtZXIgYXdhcmUgb2YgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIHdoaWNoIGFmZmVjdCB0aGUgZmVhdHVyZQorICogc2V0IG9mIHRoaXMgcGx1Z2luIChpZS4gdGhlIGVsZW1lbnRzIG9yIHR5cGVmaW5kZXJzIGFzc29jaWF0ZWQgd2l0aCBpdCkuCisgKgorICogR1N0cmVhbWVyIHdpbGwgcmUtaW5zcGVjdCBwbHVnaW5zIHdpdGggZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIHdoZW5ldmVyIGFueQorICogb2YgdGhlIGV4dGVybmFsIGRlcGVuZGVuY2llcyBjaGFuZ2UuIFRoaXMgaXMgdXNlZnVsIGZvciBwbHVnaW5zIHdoaWNoIHdyYXAKKyAqIG90aGVyIHBsdWdpbiBzeXN0ZW1zLCBlLmcuIGEgcGx1Z2luIHdoaWNoIHdyYXBzIGEgcGx1Z2luLWJhc2VkIHZpc3VhbGlzYXRpb24KKyAqIGxpYnJhcnkgYW5kIG1ha2VzIHZpc3VhbGlzYXRpb25zIGF2YWlsYWJsZSBhcyBHU3RyZWFtZXIgZWxlbWVudHMsIG9yIGEKKyAqIGNvZGVjIGxvYWRlciB3aGljaCBleHBvc2VzIGVsZW1lbnRzIGFuZC9vciBjYXBzIGRlcGVuZGVudCBvbiB3aGF0IGV4dGVybmFsCisgKiBjb2RlYyBsaWJyYXJpZXMgYXJlIGN1cnJlbnRseSBpbnN0YWxsZWQuCisgKgorICogU2luY2U6IDAuMTAuMjIKKyAqLwordm9pZAorZ3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jeSAoR3N0UGx1Z2luICogcGx1Z2luLCBjb25zdCBnY2hhciAqKiBlbnZfdmFycywKKyAgICBjb25zdCBnY2hhciAqKiBwYXRocywgY29uc3QgZ2NoYXIgKiogbmFtZXMsIEdzdFBsdWdpbkRlcGVuZGVuY3lGbGFncyBmbGFncykKK3sKKyAgR3N0UGx1Z2luRGVwICpkZXA7CisgIEdMaXN0ICpsOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19QTFVHSU4gKHBsdWdpbikpOworCisgIGlmICgoZW52X3ZhcnMgPT0gTlVMTCB8fCBlbnZfdmFyc1swXSA9PSBOVUxMKSAmJgorICAgICAgKHBhdGhzID09IE5VTEwgfHwgcGF0aHNbMF0gPT0gTlVMTCkpIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChwbHVnaW4sCisgICAgICAgICJwbHVnaW4gcmVnaXN0ZXJlZCBlbXB0eSBkZXBlbmRlbmN5IHNldC4gSWdub3JpbmciKTsKKyAgICByZXR1cm47CisgIH0KKworICBmb3IgKGwgPSBwbHVnaW4tPnByaXYtPmRlcHM7IGwgIT0gTlVMTDsgbCA9IGwtPm5leHQpIHsKKyAgICBpZiAoZ3N0X3BsdWdpbl9leHRfZGVwX2VxdWFscyAobC0+ZGF0YSwgZW52X3ZhcnMsIHBhdGhzLCBuYW1lcywgZmxhZ3MpKSB7CisgICAgICBHU1RfTE9HX09CSkVDVCAocGx1Z2luLCAiZGVwZW5kZW5jeSBhbHJlYWR5IHJlZ2lzdGVyZWQiKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIH0KKworICBkZXAgPSBnX3NsaWNlX25ldyAoR3N0UGx1Z2luRGVwKTsKKworICBkZXAtPmVudl92YXJzID0gZ19zdHJkdXB2ICgoZ2NoYXIgKiopIGVudl92YXJzKTsKKyAgZGVwLT5wYXRocyA9IGdfc3RyZHVwdiAoKGdjaGFyICoqKSBwYXRocyk7CisgIGRlcC0+bmFtZXMgPSBnX3N0cmR1cHYgKChnY2hhciAqKikgbmFtZXMpOworICBkZXAtPmZsYWdzID0gZmxhZ3M7CisKKyAgZGVwLT5lbnZfaGFzaCA9IGdzdF9wbHVnaW5fZXh0X2RlcF9nZXRfZW52X3ZhcnNfaGFzaCAocGx1Z2luLCBkZXApOworICBkZXAtPnN0YXRfaGFzaCA9IGdzdF9wbHVnaW5fZXh0X2RlcF9nZXRfc3RhdF9oYXNoIChwbHVnaW4sIGRlcCk7CisKKyAgcGx1Z2luLT5wcml2LT5kZXBzID0gZ19saXN0X2FwcGVuZCAocGx1Z2luLT5wcml2LT5kZXBzLCBkZXApOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHBsdWdpbiwgImFkZGVkIGRlcGVuZGVuY3k6Iik7CisgIGZvciAoOyBlbnZfdmFycyAhPSBOVUxMICYmICplbnZfdmFycyAhPSBOVUxMOyArK2Vudl92YXJzKQorICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBsdWdpbiwgIiBldmFyOiAlcyIsICplbnZfdmFycyk7CisgIGZvciAoOyBwYXRocyAhPSBOVUxMICYmICpwYXRocyAhPSBOVUxMOyArK3BhdGhzKQorICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBsdWdpbiwgIiBwYXRoOiAlcyIsICpwYXRocyk7CisgIGZvciAoOyBuYW1lcyAhPSBOVUxMICYmICpuYW1lcyAhPSBOVUxMOyArK25hbWVzKQorICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBsdWdpbiwgIiBuYW1lOiAlcyIsICpuYW1lcyk7Cit9CisKKy8qKgorICogZ3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jeV9zaW1wbGU6CisgKiBAcGx1Z2luOiB0aGUgI0dzdFBsdWdpbgorICogQGVudl92YXJzOiBvbmUgb3IgbW9yZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKHNlcGFyYXRlZCBieSAnOicsICc7JyBvciAnLCcpLAorICogICAgICBvciBOVUxMLiBFbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcyBtYXkgYmUgZm9sbG93ZWQgYnkgYSBwYXRoIGNvbXBvbmVudAorICogICAgICB3aGljaCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBjb250ZW50IG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgZS5nLgorICogICAgICAiSE9NRS8ubXlzdHVmZi9wbHVnaW5zOk1ZU1RVRkZfUExVR0lOU19QQVRIIgorICogQHBhdGhzOiBvbmUgb3JlIG1vcmUgZGlyZWN0b3J5IHBhdGhzIChzZXBhcmF0ZWQgYnkgJzonIG9yICc7JyBvciAnLCcpLAorICogICAgICBvciBOVUxMLiBFeGFtcGxlOiAiL3Vzci9saWIvbXlzdHVmZi9wbHVnaW5zIgorICogQG5hbWVzOiBvbmUgb3IgbW9yZSBmaWxlIG5hbWVzIG9yIGZpbGUgbmFtZSBzdWZmaXhlcyAoc2VwYXJhdGVkIGJ5IGNvbW1hcyksCisgKiAgIG9yIE5VTEwKKyAqIEBmbGFnczogb3B0aW9uYWwgZmxhZ3MsIG9yICNHU1RfUExVR0lOX0RFUEVOREVOQ1lfRkxBR19OT05FCisgKgorICogTWFrZSBHU3RyZWFtZXIgYXdhcmUgb2YgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIHdoaWNoIGFmZmVjdCB0aGUgZmVhdHVyZQorICogc2V0IG9mIHRoaXMgcGx1Z2luIChpZS4gdGhlIGVsZW1lbnRzIG9yIHR5cGVmaW5kZXJzIGFzc29jaWF0ZWQgd2l0aCBpdCkuCisgKgorICogR1N0cmVhbWVyIHdpbGwgcmUtaW5zcGVjdCBwbHVnaW5zIHdpdGggZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIHdoZW5ldmVyIGFueQorICogb2YgdGhlIGV4dGVybmFsIGRlcGVuZGVuY2llcyBjaGFuZ2UuIFRoaXMgaXMgdXNlZnVsIGZvciBwbHVnaW5zIHdoaWNoIHdyYXAKKyAqIG90aGVyIHBsdWdpbiBzeXN0ZW1zLCBlLmcuIGEgcGx1Z2luIHdoaWNoIHdyYXBzIGEgcGx1Z2luLWJhc2VkIHZpc3VhbGlzYXRpb24KKyAqIGxpYnJhcnkgYW5kIG1ha2VzIHZpc3VhbGlzYXRpb25zIGF2YWlsYWJsZSBhcyBHU3RyZWFtZXIgZWxlbWVudHMsIG9yIGEKKyAqIGNvZGVjIGxvYWRlciB3aGljaCBleHBvc2VzIGVsZW1lbnRzIGFuZC9vciBjYXBzIGRlcGVuZGVudCBvbiB3aGF0IGV4dGVybmFsCisgKiBjb2RlYyBsaWJyYXJpZXMgYXJlIGN1cnJlbnRseSBpbnN0YWxsZWQuCisgKgorICogQ29udmVuaWVuY2Ugd3JhcHBlciBmdW5jdGlvbiBmb3IgZ3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jeSgpIHdoaWNoCisgKiB0YWtlcyBzaW1wbGUgc3RyaW5ncyBhcyBhcmd1bWVudHMgaW5zdGVhZCBvZiBzdHJpbmcgYXJyYXlzLCB3aXRoIG11bHRpcGxlCisgKiBhcmd1bWVudHMgc2VwYXJhdGVkIGJ5IHByZWRlZmluZWQgZGVsaW1pdGVycyAoc2VlIGFib3ZlKS4KKyAqCisgKiBTaW5jZTogMC4xMC4yMgorICovCit2b2lkCitnc3RfcGx1Z2luX2FkZF9kZXBlbmRlbmN5X3NpbXBsZSAoR3N0UGx1Z2luICogcGx1Z2luLAorICAgIGNvbnN0IGdjaGFyICogZW52X3ZhcnMsIGNvbnN0IGdjaGFyICogcGF0aHMsIGNvbnN0IGdjaGFyICogbmFtZXMsCisgICAgR3N0UGx1Z2luRGVwZW5kZW5jeUZsYWdzIGZsYWdzKQoreworICBnY2hhciAqKmFfZXZhcnMgPSBOVUxMOworICBnY2hhciAqKmFfcGF0aHMgPSBOVUxMOworICBnY2hhciAqKmFfbmFtZXMgPSBOVUxMOworCisgIGlmIChlbnZfdmFycykKKyAgICBhX2V2YXJzID0gZ19zdHJzcGxpdF9zZXQgKGVudl92YXJzLCAiOjssIiwgLTEpOworICBpZiAocGF0aHMpCisgICAgYV9wYXRocyA9IGdfc3Ryc3BsaXRfc2V0IChwYXRocywgIjo7LCIsIC0xKTsKKyAgaWYgKG5hbWVzKQorICAgIGFfbmFtZXMgPSBnX3N0cnNwbGl0X3NldCAobmFtZXMsICIsIiwgLTEpOworCisgIGdzdF9wbHVnaW5fYWRkX2RlcGVuZGVuY3kgKHBsdWdpbiwgKGNvbnN0IGdjaGFyICoqKSBhX2V2YXJzLAorICAgICAgKGNvbnN0IGdjaGFyICoqKSBhX3BhdGhzLCAoY29uc3QgZ2NoYXIgKiopIGFfbmFtZXMsIGZsYWdzKTsKKworICBpZiAoYV9ldmFycykKKyAgICBnX3N0cmZyZWV2IChhX2V2YXJzKTsKKyAgaWYgKGFfcGF0aHMpCisgICAgZ19zdHJmcmVldiAoYV9wYXRocyk7CisgIGlmIChhX25hbWVzKQorICAgIGdfc3RyZnJlZXYgKGFfbmFtZXMpOworfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHBsdWdpbi5oIGIvZ3N0L2dzdHBsdWdpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYmVjMGQKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0cGx1Z2luLmgKQEAgLTAsMCArMSwzNjAgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KKyAqCisgKiBnc3RwbHVnaW4uaDogSGVhZGVyIGZvciBwbHVnaW4gc3Vic3lzdGVtCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworCisjaWZuZGVmIF9fR1NUX1BMVUdJTl9IX18KKyNkZWZpbmUgX19HU1RfUExVR0lOX0hfXworCisjaW5jbHVkZSA8Z3N0L2dzdGNvbmZpZy5oPgorCisjaW5jbHVkZSA8dGltZS5oPiAvKiB0aW1lX3QgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gLyogb2ZmX3QgKi8KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPiAvKiBvZmZfdCAqLworI2luY2x1ZGUgPGdtb2R1bGUuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0b2JqZWN0Lmg+CisjaW5jbHVkZSA8Z3N0L2dzdG1hY3Jvcy5oPgorI2luY2x1ZGUgPGdzdC9nc3RzdHJ1Y3R1cmUuaD4KKworR19CRUdJTl9ERUNMUworCit0eXBlZGVmIHN0cnVjdCBfR3N0UGx1Z2luIEdzdFBsdWdpbjsKK3R5cGVkZWYgc3RydWN0IF9Hc3RQbHVnaW5DbGFzcyBHc3RQbHVnaW5DbGFzczsKK3R5cGVkZWYgc3RydWN0IF9Hc3RQbHVnaW5Qcml2YXRlIEdzdFBsdWdpblByaXZhdGU7Cit0eXBlZGVmIHN0cnVjdCBfR3N0UGx1Z2luRGVzYyBHc3RQbHVnaW5EZXNjOworCisvKioKKyAqIGdzdF9wbHVnaW5fZXJyb3JfcXVhcms6CisgKgorICogR2V0IHRoZSBlcnJvciBxdWFyay4KKyAqCisgKiBSZXR1cm5zOiBUaGUgZXJyb3IgcXVhcmsgdXNlZCBpbiBHRXJyb3IgbWVzc2FnZXMKKyAqLworR1F1YXJrIGdzdF9wbHVnaW5fZXJyb3JfcXVhcmsgKHZvaWQpOworLyoqCisgKiBHU1RfUExVR0lOX0VSUk9SOgorICoKKyAqIFRoZSBlcnJvciBtZXNzYWdlIGNhdGVnb3J5IHF1YXJrCisgKi8KKyNkZWZpbmUgR1NUX1BMVUdJTl9FUlJPUiBnc3RfcGx1Z2luX2Vycm9yX3F1YXJrICgpCisKKy8qKgorICogR3N0UGx1Z2luRXJyb3I6CisgKiBAR1NUX1BMVUdJTl9FUlJPUl9NT0RVTEU6IFRoZSBwbHVnaW4gY291bGQgbm90IGJlIGxvYWRlZAorICogQEdTVF9QTFVHSU5fRVJST1JfREVQRU5ERU5DSUVTOiBUaGUgcGx1Z2luIGhhcyB1bnJlc29sdmVkIGRlcGVuZGVuY2llcworICogQEdTVF9QTFVHSU5fRVJST1JfTkFNRV9NSVNNQVRDSDogVGhlIHBsdWdpbiBoYXMgYWxyZWFkeSBiZSBsb2FkZWQgZnJvbSBhIGRpZmZlcmVudCBmaWxlCisgKgorICogVGhlIHBsdWdpbiBsb2FkaW5nIGVycm9ycworICovCit0eXBlZGVmIGVudW0KK3sKKyAgR1NUX1BMVUdJTl9FUlJPUl9NT0RVTEUsCisgIEdTVF9QTFVHSU5fRVJST1JfREVQRU5ERU5DSUVTLAorICBHU1RfUExVR0lOX0VSUk9SX05BTUVfTUlTTUFUQ0gKK30gR3N0UGx1Z2luRXJyb3I7CisKKy8qKgorICogR3N0UGx1Z2luRmxhZ3M6CisgKiBAR1NUX1BMVUdJTl9GTEFHX0NBQ0hFRDogVGVtcG9yYXJpbHkgbG9hZGVkIHBsdWdpbnMKKyAqIEBHU1RfUExVR0lOX0ZMQUdfQkxBQ0tMSVNURUQ6IFRoZSBwbHVnaW4gd29uJ3QgYmUgc2Nhbm5lZCAoYWdhaW4pCisgKgorICogVGhlIHBsdWdpbiBsb2FkaW5nIHN0YXRlCisgKi8KK3R5cGVkZWYgZW51bQoreworICBHU1RfUExVR0lOX0ZMQUdfQ0FDSEVEID0gKDE8PDApLAorICBHU1RfUExVR0lOX0ZMQUdfQkxBQ0tMSVNURUQgPSAoMTw8MSkKK30gR3N0UGx1Z2luRmxhZ3M7CisKKy8qKgorICogR3N0UGx1Z2luRGVwZW5kZW5jeUZsYWdzOgorICogQEdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX05PTkUgOiBubyBzcGVjaWFsIGZsYWdzCisgKiBAR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfUkVDVVJTRSA6IHJlY3Vyc2UgaW50byBzdWJkaXJlY3RvcmllcworICogQEdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX1BBVEhTX0FSRV9ERUZBVUxUX09OTFkgOiB1c2UgcGF0aHMKKyAqICAgICAgICAgYXJndW1lbnQgb25seSBpZiBub25lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaXMgc2V0CisgKiBAR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfRklMRV9OQU1FX0lTX1NVRkZJWCA6IGludGVycHJldAorICogICAgICAgICBmaWxlbmFtZSBhcmd1bWVudCBhcyBmaWx0ZXIgc3VmZml4IGFuZCBjaGVjayBhbGwgbWF0Y2hpbmcgZmlsZXMgaW4KKyAqICAgICAgICAgdGhlIGRpcmVjdG9yeQorICoKKyAqIEZsYWdzIHVzZWQgaW4gY29ubmVjdGlvbiB3aXRoIGdzdF9wbHVnaW5fYWRkX2RlcGVuZGVuY3koKS4KKyAqCisgKiBTaW5jZTogMC4xMC4yMgorICovCit0eXBlZGVmIGVudW0geworICBHU1RfUExVR0lOX0RFUEVOREVOQ1lfRkxBR19OT05FID0gMCwKKyAgR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfUkVDVVJTRSA9ICgxIDw8IDApLAorICBHU1RfUExVR0lOX0RFUEVOREVOQ1lfRkxBR19QQVRIU19BUkVfREVGQVVMVF9PTkxZID0gKDEgPDwgMSksCisgIEdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX0ZJTEVfTkFNRV9JU19TVUZGSVggPSAoMSA8PCAyKQorfSBHc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3M7CisKKy8qKgorICogR3N0UGx1Z2luSW5pdEZ1bmM6CisgKiBAcGx1Z2luOiBUaGUgcGx1Z2luIG9iamVjdAorICoKKyAqIEEgcGx1Z2luIHNob3VsZCBwcm92aWRlIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIG9mIHRoaXMgdHlwZSBpbiB0aGUKKyAqIHBsdWdpbl9kZXNjIHN0cnVjdC4KKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgdGhlIGxvYWRlciBhdCBzdGFydHVwLiBPbmUgd291bGQgdGhlbgorICogcmVnaXN0ZXIgZWFjaCAjR3N0UGx1Z2luRmVhdHVyZS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBwbHVnaW4gaW5pdGlhbGlzZWQgc3VjY2Vzc2Z1bGx5CisgKi8KKy8qIEZJWE1FIDAuMTE6IE1ha2UgcmV0dXJuIHZvaWQgKi8KK3R5cGVkZWYgZ2Jvb2xlYW4gKCpHc3RQbHVnaW5Jbml0RnVuYykgKEdzdFBsdWdpbiAqcGx1Z2luKTsKKworLyoqCisgKiBHc3RQbHVnaW5Jbml0RnVsbEZ1bmM6CisgKiBAcGx1Z2luOiBUaGUgcGx1Z2luIG9iamVjdAorICogQHVzZXJfZGF0YTogZXh0cmEgZGF0YQorICoKKyAqIEEgcGx1Z2luIHNob3VsZCBwcm92aWRlIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIG9mIGVpdGhlciAjR3N0UGx1Z2luSW5pdEZ1bmMKKyAqIG9yIHRoaXMgdHlwZSBpbiB0aGUgcGx1Z2luX2Rlc2Mgc3RydWN0LgorICogVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBsb2FkZXIgYXQgc3RhcnR1cC4gT25lIHdvdWxkIHRoZW4KKyAqIHJlZ2lzdGVyIGVhY2ggI0dzdFBsdWdpbkZlYXR1cmUuIFRoaXMgdmVyc2lvbiBhbGxvd3MKKyAqIHVzZXIgZGF0YSB0byBiZSBwYXNzZWQgdG8gaW5pdCBmdW5jdGlvbiAodXNlZnVsIGZvciBiaW5kaW5ncykuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgcGx1Z2luIGluaXRpYWxpc2VkIHN1Y2Nlc3NmdWxseQorICoKKyAqIFNpbmNlOiAwLjEwLjI0CisgKgorICovCisvKiBGSVhNRSAwLjExOiBNZXJnZSB3aXRoIEdzdFBsdWdpbkluaXRGdW5jICovCit0eXBlZGVmIGdib29sZWFuICgqR3N0UGx1Z2luSW5pdEZ1bGxGdW5jKSAoR3N0UGx1Z2luICpwbHVnaW4sIGdwb2ludGVyIHVzZXJfZGF0YSk7CisKKy8qKgorICogR3N0UGx1Z2luRGVzYzoKKyAqIEBtYWpvcl92ZXJzaW9uOiB0aGUgbWFqb3IgdmVyc2lvbiBudW1iZXIgb2YgY29yZSB0aGF0IHBsdWdpbiB3YXMgY29tcGlsZWQgZm9yCisgKiBAbWlub3JfdmVyc2lvbjogdGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyIG9mIGNvcmUgdGhhdCBwbHVnaW4gd2FzIGNvbXBpbGVkIGZvcgorICogQG5hbWU6IGEgdW5pcXVlIG5hbWUgb2YgdGhlIHBsdWdpbgorICogQGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiBvZiBwbHVnaW4KKyAqIEBwbHVnaW5faW5pdDogcG9pbnRlciB0byB0aGUgaW5pdCBmdW5jdGlvbiBvZiB0aGlzIHBsdWdpbi4KKyAqIEB2ZXJzaW9uOiB2ZXJzaW9uIG9mIHRoZSBwbHVnaW4KKyAqIEBsaWNlbnNlOiBlZmZlY3RpdmUgbGljZW5zZSBvZiBwbHVnaW4KKyAqIEBzb3VyY2U6IHNvdXJjZSBtb2R1bGUgcGx1Z2luIGJlbG9uZ3MgdG8KKyAqIEBwYWNrYWdlOiBzaGlwcGVkIHBhY2thZ2UgcGx1Z2luIGJlbG9uZ3MgdG8KKyAqIEBvcmlnaW46IFVSTCB0byBwcm92aWRlciBvZiBwbHVnaW4KKyAqIEByZWxlYXNlX2RhdGV0aW1lOiBkYXRlIHRpbWUgc3RyaW5nIGluIElTTyA4NjAxIGZvcm1hdCAob3IgcmF0aGVyLCBhCisgKiAgICAgc3Vic2V0IHRoZXJlb2YpLCBvciBOVUxMLiBBbGxvd2VkIGFyZSB0aGUgZm9sbG93aW5nIGZvcm1hdHM6CisgKiAgICAgIllZWVktTU0tREQiIGFuZCAiWVlZLU1NLUREVEhIOk1NWiIgKHdpdGggJ1QnIGEgc2VwYXJhdG9yIGFuZCAnWicKKyAqICAgICBpbmRpY2F0aW5nIFVUQy9adWx1IHRpbWUpLiBUaGlzIGZpZWxkIHNob3VsZCBiZSBzZXQgdmlhIHRoZQorICogICAgIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUgcHJlcHJvY2Vzc29yIG1hY3JvIChTaW5jZTogMC4xMC4zMSkKKyAqCisgKiBBIHBsdWdpbiBzaG91bGQgZXhwb3J0IGEgdmFyaWFibGUgb2YgdGhpcyB0eXBlIGNhbGxlZCBwbHVnaW5fZGVzYy4gVGhlIHBsdWdpbgorICogbG9hZGVyIHdpbGwgdXNlIHRoZSBkYXRhIHByb3ZpZGVkIHRoZXJlIHRvIGluaXRpYWxpemUgdGhlIHBsdWdpbi4KKyAqCisgKiBUaGUgQGxpY2VuY2UgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mOiBMR1BMLCBHUEwsIFFQTCwgR1BML1FQTCwgTVBMLAorICogQlNELCBNSVQvWDExLCBQcm9wcmlldGFyeSwgdW5rbm93bi4KKyAqLworc3RydWN0IF9Hc3RQbHVnaW5EZXNjIHsKKyAgZ2ludCBtYWpvcl92ZXJzaW9uOworICBnaW50IG1pbm9yX3ZlcnNpb247CisgIGNvbnN0IGdjaGFyICpuYW1lOworICBjb25zdCBnY2hhciAqZGVzY3JpcHRpb247CisgIEdzdFBsdWdpbkluaXRGdW5jIHBsdWdpbl9pbml0OworICBjb25zdCBnY2hhciAqdmVyc2lvbjsKKyAgY29uc3QgZ2NoYXIgKmxpY2Vuc2U7CisgIGNvbnN0IGdjaGFyICpzb3VyY2U7CisgIGNvbnN0IGdjaGFyICpwYWNrYWdlOworICBjb25zdCBnY2hhciAqb3JpZ2luOworICBjb25zdCBnY2hhciAqcmVsZWFzZV9kYXRldGltZTsKKyAgLyo8IHByaXZhdGUgPiovCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOworfTsKKworCisjZGVmaW5lIEdTVF9UWVBFX1BMVUdJTiAgIChnc3RfcGx1Z2luX2dldF90eXBlKCkpCisjZGVmaW5lIEdTVF9JU19QTFVHSU4ob2JqKSAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9QTFVHSU4pKQorI2RlZmluZSBHU1RfSVNfUExVR0lOX0NMQVNTKGtsYXNzKSAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9QTFVHSU4pKQorI2RlZmluZSBHU1RfUExVR0lOX0dFVF9DTEFTUyhvYmopICAgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9QTFVHSU4sIEdzdFBsdWdpbkNsYXNzKSkKKyNkZWZpbmUgR1NUX1BMVUdJTihvYmopICAgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX1BMVUdJTiwgR3N0UGx1Z2luKSkKKyNkZWZpbmUgR1NUX1BMVUdJTl9DTEFTUyhrbGFzcykgICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfUExVR0lOLCBHc3RQbHVnaW5DbGFzcykpCisjZGVmaW5lIEdTVF9QTFVHSU5fQ0FTVChvYmopICAgICAgICAgICAoKEdzdFBsdWdpbiopKG9iaikpCisKKy8qKgorICogR3N0UGx1Z2luOgorICoKKyAqIFRoZSBwbHVnaW4gb2JqZWN0CisgKi8KK3N0cnVjdCBfR3N0UGx1Z2luIHsKKyAgR3N0T2JqZWN0ICAgICAgIG9iamVjdDsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgR3N0UGx1Z2luRGVzYwlkZXNjOworCisgIEdzdFBsdWdpbkRlc2MgKm9yaWdfZGVzYzsKKworICB1bnNpZ25lZCBpbnQgIGZsYWdzOworCisgIGdjaGFyICoJZmlsZW5hbWU7CisgIGdjaGFyICoJYmFzZW5hbWU7ICAgICAgIC8qIGJhc2UgbmFtZSAobm9uLWRpciBwYXJ0KSBvZiBwbHVnaW4gcGF0aCAqLworCisgIEdNb2R1bGUgKgltb2R1bGU7CQkvKiBjb250YWlucyB0aGUgbW9kdWxlIGlmIHBsdWdpbiBpcyBsb2FkZWQgKi8KKworICBvZmZfdCAgICAgICAgIGZpbGVfc2l6ZTsKKyAgdGltZV90ICAgICAgICBmaWxlX210aW1lOworICBnYm9vbGVhbiAgICAgIHJlZ2lzdGVyZWQ7ICAgICAvKiBUUlVFIHdoZW4gdGhlIHJlZ2lzdHJ5IGhhcyBzZWVuIGEgZmlsZW5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhhdCBtYXRjaGVzIHRoZSBwbHVnaW4ncyBiYXNlbmFtZSAqLworCisgIEdzdFBsdWdpblByaXZhdGUgKnByaXY7CisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOworfTsKKworc3RydWN0IF9Hc3RQbHVnaW5DbGFzcyB7CisgIEdzdE9iamVjdENsYXNzICBvYmplY3RfY2xhc3M7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOworfTsKKworI2lmZGVmIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUKKyNkZWZpbmUgX19HU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUKKyNlbHNlCisjZGVmaW5lIF9fR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRSBOVUxMCisjZW5kaWYKKworLyoqCisgKiBHU1RfUExVR0lOX0RFRklORToKKyAqIEBtYWpvcjogbWFqb3IgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGdzdHJlYW1lci1jb3JlIHRoYXQgcGx1Z2luIHdhcyBjb21waWxlZCBmb3IKKyAqIEBtaW5vcjogbWlub3IgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGdzdHJlYW1lci1jb3JlIHRoYXQgcGx1Z2luIHdhcyBjb21waWxlZCBmb3IKKyAqIEBuYW1lOiBzaG9ydCwgYnV0IHVuaXF1ZSBuYW1lIG9mIHRoZSBwbHVnaW4KKyAqIEBkZXNjcmlwdGlvbjogaW5mb3JtYXRpb24gYWJvdXQgdGhlIHB1cnBvc2Ugb2YgdGhlIHBsdWdpbgorICogQGluaXQ6IGZ1bmN0aW9uIHBvaW50ZXIgdG8gdGhlIHBsdWdpbl9pbml0IG1ldGhvZCB3aXRoIHRoZSBzaWduYXR1cmUgb2YgPGNvZGU+c3RhdGljIGdib29sZWFuIHBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pPC9jb2RlPi4KKyAqIEB2ZXJzaW9uOiBmdWxsIHZlcnNpb24gc3RyaW5nIChlLmcuIFZFUlNJT04gZnJvbSBjb25maWcuaCkKKyAqIEBsaWNlbnNlOiB1bmRlciB3aGljaCBsaWNlbmNlIHRoZSBwYWNrYWdlIGhhcyBiZWVuIHJlbGVhc2VkLCBlLmcuIEdQTCwgTEdQTC4KKyAqIEBwYWNrYWdlOiB0aGUgcGFja2FnZS1uYW1lIChlLmcuIFBBQ0tBR0VfTkFNRSBmcm9tIGNvbmZpZy5oKQorICogQG9yaWdpbjogYSBkZXNjcmlwdGlvbiBmcm9tIHdoZXJlIHRoZSBwYWNrYWdlIGNvbWVzIGZyb20gKGUuZy4gdGhlIGhvbWVwYWdlIFVSTCkKKyAqCisgKiBUaGlzIG1hY3JvIG5lZWRzIHRvIGJlIHVzZWQgdG8gZGVmaW5lIHRoZSBlbnRyeSBwb2ludCBhbmQgbWV0YSBkYXRhIG9mIGEKKyAqIHBsdWdpbi4gT25lIHdvdWxkIHVzZSB0aGlzIG1hY3JvIHRvIGV4cG9ydCBhIHBsdWdpbiwgc28gdGhhdCBpdCBjYW4gYmUgdXNlZAorICogYnkgb3RoZXIgYXBwbGljYXRpb25zLgorICoKKyAqIFRoZSBtYWNybyB1c2VzIGEgZGVmaW5lIG5hbWVkIFBBQ0tBR0UgZm9yIHRoZSAjR3N0UGx1Z2luRGVzYyxzb3VyY2UgZmllbGQuCisgKiBXaGVuIHVzaW5nIGF1dG9jb25mLCB0aGlzIGlzIHVzdWFsbHkgc2V0IGF1dG9tYXRpY2FsbHkgdmlhIHRoZSBBQ19JTklUCisgKiBtYWNybywgYW5kIHNldCBpbiBjb25maWcuaC4gSWYgeW91IGFyZSBub3QgdXNpbmcgYXV0b2NvbmYsIHlvdSB3aWxsIG5lZWQgdG8KKyAqIGRlZmluZSBQQUNLQUdFIHlvdXJzZWxmIGFuZCBzZXQgaXQgdG8gYSBzaG9ydCBtbmVtb25pYyBzdHJpbmcgaWRlbnRpZnlpbmcKKyAqIHlvdXIgYXBwbGljYXRpb24vcGFja2FnZSwgZS5nLiAnc29tZWFwcCcgb3IgJ215LXBsdWdpbnMtZm9vLgorICoKKyAqIElmIGRlZmluZWQsIHRoZSBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FIHdpbGwgYWxzbyBiZSB1c2VkIGZvciB0aGUKKyAqICNHc3RQbHVnaW5EZXNjLHJlbGVhc2VfZGF0ZXRpbWUgZmllbGQuCisgKi8KKyNkZWZpbmUgR1NUX1BMVUdJTl9ERUZJTkUobWFqb3IsbWlub3IsbmFtZSxkZXNjcmlwdGlvbixpbml0LHZlcnNpb24sbGljZW5zZSxwYWNrYWdlLG9yaWdpbikJXAorR19CRUdJTl9ERUNMUyBcCitHU1RfUExVR0lOX0VYUE9SVCBHc3RQbHVnaW5EZXNjIGdzdF9wbHVnaW5fZGVzYyA9IHsJXAorICBtYWpvciwJCQkJCQlcCisgIG1pbm9yLAkJCQkJCVwKKyAgbmFtZSwJCQkJCQkJXAorICAoZ2NoYXIgKikgZGVzY3JpcHRpb24sCQkJCVwKKyAgaW5pdCwJCQkJCQkJXAorICB2ZXJzaW9uLAkJCQkJCVwKKyAgbGljZW5zZSwJCQkJCQlcCisgIFBBQ0tBR0UsCQkJCQkJXAorICBwYWNrYWdlLAkJCQkJCVwKKyAgb3JpZ2luLAkJCQkJCVwKKyAgX19HU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FLCAgICAgICAgICAgICAgICAgICAgICAgXAorICBHU1RfUEFERElOR19JTklUCQkJCSAgICAgICAgXAorfTsgXAorR19FTkRfREVDTFMKKworLyoqCisgKiBHU1RfTElDRU5TRV9VTktOT1dOOgorICoKKyAqIFRvIGJlIHVzZWQgaW4gR1NUX1BMVUdJTl9ERUZJTkUgb3IgR1NUX1BMVUdJTl9ERUZJTkVfU1RBVElDIGlmIHVzdXJlIGFib3V0CisgKiB0aGUgbGljZW5jZS4KKyAqLworI2RlZmluZSBHU1RfTElDRU5TRV9VTktOT1dOICJ1bmtub3duIgorCisKKy8qIGZ1bmN0aW9uIGZvciBmaWx0ZXJzICovCisvKioKKyAqIEdzdFBsdWdpbkZpbHRlcjoKKyAqIEBwbHVnaW46IHRoZSBwbHVnaW4gdG8gY2hlY2sKKyAqIEB1c2VyX2RhdGE6IHRoZSB1c2VyX2RhdGEgdGhhdCBoYXMgYmVlbiBwYXNzZWQgb24gZS5nLiBnc3RfcmVnaXN0cnlfcGx1Z2luX2ZpbHRlcigpCisgKgorICogQSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHdpdGggZS5nLiBnc3RfcmVnaXN0cnlfcGx1Z2luX2ZpbHRlcigpCisgKiB0byBnZXQgYSBsaXN0IG9mIHBsdWdpbnMgdGhhdCBtYXRjaCBjZXJ0YWluIGNyaXRlcmlhLgorICoKKyAqIFJldHVybnM6IFRSVUUgZm9yIGEgcG9zaXRpdmUgbWF0Y2gsIEZBTFNFIG90aGVyd2lzZQorICovCit0eXBlZGVmIGdib29sZWFuICAgICAgICAoKkdzdFBsdWdpbkZpbHRlcikgICAgICAgICAgICAgIChHc3RQbHVnaW4gKnBsdWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7CisKK0dUeXBlICAgICAgICAgICAgICAgICAgIGdzdF9wbHVnaW5fZ2V0X3R5cGUgICAgICAgICAgICAgKHZvaWQpOworCitnYm9vbGVhbgkJZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWMJKGdpbnQgbWFqb3JfdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgbWlub3JfdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKmRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UGx1Z2luSW5pdEZ1bmMgaW5pdF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqbGljZW5zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqcGFja2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpvcmlnaW4pOworCitnYm9vbGVhbgkJZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWNfZnVsbAkoZ2ludCBtYWpvcl92ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBtaW5vcl92ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RQbHVnaW5Jbml0RnVsbEZ1bmMgaW5pdF9mdWxsX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpsaWNlbnNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpwYWNrYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7CisKK2NvbnN0IGdjaGFyKgkJZ3N0X3BsdWdpbl9nZXRfbmFtZQkJKEdzdFBsdWdpbiAqcGx1Z2luKTsKK2NvbnN0IGdjaGFyKgkJZ3N0X3BsdWdpbl9nZXRfZGVzY3JpcHRpb24JKEdzdFBsdWdpbiAqcGx1Z2luKTsKK2NvbnN0IGdjaGFyKgkJZ3N0X3BsdWdpbl9nZXRfZmlsZW5hbWUJCShHc3RQbHVnaW4gKnBsdWdpbik7Citjb25zdCBnY2hhcioJCWdzdF9wbHVnaW5fZ2V0X3ZlcnNpb24JCShHc3RQbHVnaW4gKnBsdWdpbik7Citjb25zdCBnY2hhcioJCWdzdF9wbHVnaW5fZ2V0X2xpY2Vuc2UJCShHc3RQbHVnaW4gKnBsdWdpbik7Citjb25zdCBnY2hhcioJCWdzdF9wbHVnaW5fZ2V0X3NvdXJjZQkJKEdzdFBsdWdpbiAqcGx1Z2luKTsKK2NvbnN0IGdjaGFyKgkJZ3N0X3BsdWdpbl9nZXRfcGFja2FnZQkJKEdzdFBsdWdpbiAqcGx1Z2luKTsKK2NvbnN0IGdjaGFyKgkJZ3N0X3BsdWdpbl9nZXRfb3JpZ2luCQkoR3N0UGx1Z2luICpwbHVnaW4pOworY29uc3QgR3N0U3RydWN0dXJlKglnc3RfcGx1Z2luX2dldF9jYWNoZV9kYXRhCShHc3RQbHVnaW4gKiBwbHVnaW4pOwordm9pZAkJCWdzdF9wbHVnaW5fc2V0X2NhY2hlX2RhdGEJKEdzdFBsdWdpbiAqIHBsdWdpbiwgR3N0U3RydWN0dXJlICpjYWNoZV9kYXRhKTsKKworR01vZHVsZSAqCQlnc3RfcGx1Z2luX2dldF9tb2R1bGUJCShHc3RQbHVnaW4gKnBsdWdpbik7CitnYm9vbGVhbgkJZ3N0X3BsdWdpbl9pc19sb2FkZWQJCShHc3RQbHVnaW4gKnBsdWdpbik7CisKK2dib29sZWFuCQlnc3RfcGx1Z2luX25hbWVfZmlsdGVyCQkoR3N0UGx1Z2luICpwbHVnaW4sIGNvbnN0IGdjaGFyICpuYW1lKTsKKworR3N0UGx1Z2luICoJCWdzdF9wbHVnaW5fbG9hZF9maWxlCQkoY29uc3QgZ2NoYXIgKmZpbGVuYW1lLCBHRXJyb3IqKiBlcnJvcik7CisKK0dzdFBsdWdpbiAqICAgICAgICAgICAgIGdzdF9wbHVnaW5fbG9hZCAgICAgICAgICAgICAgICAgKEdzdFBsdWdpbiAqcGx1Z2luKTsKK0dzdFBsdWdpbiAqICAgICAgICAgICAgIGdzdF9wbHVnaW5fbG9hZF9ieV9uYW1lICAgICAgICAgKGNvbnN0IGdjaGFyICpuYW1lKTsKKwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jeSAoR3N0UGx1Z2luICAgICogcGx1Z2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiogZW52X3ZhcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqKiBwYXRocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICoqIG5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UGx1Z2luRGVwZW5kZW5jeUZsYWdzIGZsYWdzKTsKKwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jeV9zaW1wbGUgKEdzdFBsdWdpbiAgICogcGx1Z2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogZW52X3ZhcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBwYXRocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIG5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFBsdWdpbkRlcGVuZGVuY3lGbGFncyBmbGFncyk7CisKK3ZvaWQgZ3N0X3BsdWdpbl9saXN0X2ZyZWUgKEdMaXN0ICpsaXN0KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fR1NUX1BMVUdJTl9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RwbHVnaW5mZWF0dXJlLmMgYi9nc3QvZ3N0cGx1Z2luZmVhdHVyZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5OTI1YTYKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0cGx1Z2luZmVhdHVyZS5jCkBAIC0wLDAgKzEsMzg3IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+CisgKgorICogZ3N0cGx1Z2luZmVhdHVyZS5jOiBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBhbGwgcGx1Z2luIGZlYXR1cmVzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoqCisgKiBTRUNUSU9OOmdzdHBsdWdpbmZlYXR1cmUKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogQmFzZSBjbGFzcyBmb3IgY29udGVudHMgb2YgYSBHc3RQbHVnaW4KKyAqIEBzZWVfYWxzbzogI0dzdFBsdWdpbgorICoKKyAqIFRoaXMgaXMgYSBiYXNlIGNsYXNzIGZvciBhbnl0aGluZyB0aGF0IGNhbiBiZSBhZGRlZCB0byBhICNHc3RQbHVnaW4uCisgKi8KKworI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCisKKyNpbmNsdWRlICJnc3RwbHVnaW5mZWF0dXJlLmgiCisjaW5jbHVkZSAiZ3N0cGx1Z2luLmgiCisjaW5jbHVkZSAiZ3N0cmVnaXN0cnkuaCIKKyNpbmNsdWRlICJnc3RpbmZvLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBHU1RfQ0FUX1BMVUdJTl9MT0FESU5HCisKK3N0YXRpYyB2b2lkIGdzdF9wbHVnaW5fZmVhdHVyZV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7CisKKy8qIHN0YXRpYyBndWludCBnc3RfcGx1Z2luX2ZlYXR1cmVfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsgKi8KKworR19ERUZJTkVfQUJTVFJBQ1RfVFlQRSAoR3N0UGx1Z2luRmVhdHVyZSwgZ3N0X3BsdWdpbl9mZWF0dXJlLCBHU1RfVFlQRV9PQkpFQ1QpOworCitzdGF0aWMgdm9pZAorZ3N0X3BsdWdpbl9mZWF0dXJlX2NsYXNzX2luaXQgKEdzdFBsdWdpbkZlYXR1cmVDbGFzcyAqIGtsYXNzKQoreworICBHX09CSkVDVF9DTEFTUyAoa2xhc3MpLT5maW5hbGl6ZSA9IGdzdF9wbHVnaW5fZmVhdHVyZV9maW5hbGl6ZTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9wbHVnaW5fZmVhdHVyZV9pbml0IChHc3RQbHVnaW5GZWF0dXJlICogZmVhdHVyZSkKK3sKKyAgLyogZG8gbm90aGluZywgbmVlZGVkIGJlY2F1c2Ugb2YgR19ERUZJTkVfVFlQRSAqLworfQorCitzdGF0aWMgdm9pZAorZ3N0X3BsdWdpbl9mZWF0dXJlX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQoreworICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlID0gR1NUX1BMVUdJTl9GRUFUVVJFX0NBU1QgKG9iamVjdCk7CisKKyAgR1NUX0RFQlVHICgiZmluYWxpemluZyBmZWF0dXJlICVwOiAnJXMnIiwgZmVhdHVyZSwgR1NUX09CSkVDVF9OQU1FIChmZWF0dXJlKSk7CisKKyAgaWYgKGZlYXR1cmUtPnBsdWdpbiAhPSBOVUxMKSB7CisgICAgZ19vYmplY3RfcmVtb3ZlX3dlYWtfcG9pbnRlciAoKEdPYmplY3QgKikgZmVhdHVyZS0+cGx1Z2luLAorICAgICAgICAoZ3BvaW50ZXIgKikgJiBmZWF0dXJlLT5wbHVnaW4pOworICB9CisKKyAgR19PQkpFQ1RfQ0xBU1MgKGdzdF9wbHVnaW5fZmVhdHVyZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworLyoqCisgKiBnc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZDoKKyAqIEBmZWF0dXJlOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBwbHVnaW4gZmVhdHVyZSB0byBjaGVjaworICoKKyAqIExvYWRzIHRoZSBwbHVnaW4gY29udGFpbmluZyBAZmVhdHVyZSBpZiBpdCdzIG5vdCBhbHJlYWR5IGxvYWRlZC4gQGZlYXR1cmUgaXMKKyAqIHVuYWZmZWN0ZWQ7IHVzZSB0aGUgcmV0dXJuIHZhbHVlIGluc3RlYWQuCisgKgorICogTm9ybWFsbHkgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGxpa2UgdGhpczoKKyAqIHxbCisgKiBHc3RQbHVnaW5GZWF0dXJlICpsb2FkZWRfZmVhdHVyZTsKKyAqCisgKiBsb2FkZWRfZmVhdHVyZSA9IGdzdF9wbHVnaW5fZmVhdHVyZV9sb2FkIChmZWF0dXJlKTsKKyAqIC8vIHByZXN1bWFibHksIHdlJ3JlIG5vIGxvbmdlciBpbnRlcmVzdGVkIGluIHRoZSBwb3RlbnRpYWxseS11bmxvYWRlZCBmZWF0dXJlCisgKiBnc3Rfb2JqZWN0X3VucmVmIChmZWF0dXJlKTsKKyAqIGZlYXR1cmUgPSBsb2FkZWRfZmVhdHVyZTsKKyAqIF18CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIHJlZmVyZW5jZSB0byB0aGUgbG9hZGVkIGZlYXR1cmUsIG9yIE5VTEwgb24gZXJyb3IKKyAqLworR3N0UGx1Z2luRmVhdHVyZSAqCitnc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZCAoR3N0UGx1Z2luRmVhdHVyZSAqIGZlYXR1cmUpCit7CisgIEdzdFBsdWdpbiAqcGx1Z2luOworICBHc3RQbHVnaW5GZWF0dXJlICpyZWFsX2ZlYXR1cmU7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZlYXR1cmUgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BMVUdJTl9GRUFUVVJFIChmZWF0dXJlKSwgRkFMU0UpOworCisgIEdTVF9ERUJVRyAoImxvYWRpbmcgcGx1Z2luIGZvciBmZWF0dXJlICVwOyAnJXMnIiwgZmVhdHVyZSwKKyAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoZmVhdHVyZSkpOworICBpZiAoZmVhdHVyZS0+bG9hZGVkKQorICAgIHJldHVybiBnc3Rfb2JqZWN0X3JlZiAoZmVhdHVyZSk7CisKKyAgR1NUX0RFQlVHICgibG9hZGluZyBwbHVnaW4gJXMiLCBmZWF0dXJlLT5wbHVnaW5fbmFtZSk7CisgIHBsdWdpbiA9IGdzdF9wbHVnaW5fbG9hZF9ieV9uYW1lIChmZWF0dXJlLT5wbHVnaW5fbmFtZSk7CisgIGlmICghcGx1Z2luKQorICAgIGdvdG8gbG9hZF9mYWlsZWQ7CisKKyAgR1NUX0RFQlVHICgibG9hZGVkIHBsdWdpbiAlcyIsIGZlYXR1cmUtPnBsdWdpbl9uYW1lKTsKKyAgZ3N0X29iamVjdF91bnJlZiAocGx1Z2luKTsKKworICByZWFsX2ZlYXR1cmUgPQorICAgICAgZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9mZWF0dXJlIChnc3RfcmVnaXN0cnlfZ2V0X2RlZmF1bHQgKCksCisgICAgICBHU1RfT0JKRUNUX05BTUUgKGZlYXR1cmUpKTsKKworICBpZiAocmVhbF9mZWF0dXJlID09IE5VTEwpCisgICAgZ290byBkaXNhcHBlYXJlZDsKKyAgZWxzZSBpZiAoIXJlYWxfZmVhdHVyZS0+bG9hZGVkKQorICAgIGdvdG8gbm90X2ZvdW5kOworCisgIHJldHVybiByZWFsX2ZlYXR1cmU7CisKKyAgLyogRVJST1JTICovCitsb2FkX2ZhaWxlZDoKKyAgeworICAgIEdTVF9XQVJOSU5HICgiRmFpbGVkIHRvIGxvYWQgcGx1Z2luIGNvbnRhaW5pbmcgZmVhdHVyZSAnJXMnLiIsCisgICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoZmVhdHVyZSkpOworICAgIHJldHVybiBOVUxMOworICB9CitkaXNhcHBlYXJlZDoKKyAgeworICAgIEdTVF9JTkZPCisgICAgICAgICgiTG9hZGVkIHBsdWdpbiBjb250YWluaW5nIGZlYXR1cmUgJyVzJywgYnV0IGZlYXR1cmUgZGlzYXBwZWFyZWQuIiwKKyAgICAgICAgR1NUX09CSkVDVF9OQU1FIChmZWF0dXJlKSk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KK25vdF9mb3VuZDoKKyAgeworICAgIEdTVF9JTkZPICgiVHJpZWQgdG8gbG9hZCBwbHVnaW4gY29udGFpbmluZyBmZWF0dXJlICclcycsIGJ1dCBmZWF0dXJlIHdhcyAiCisgICAgICAgICJub3QgZm91bmQuIiwgR1NUX09CSkVDVF9OQU1FIChyZWFsX2ZlYXR1cmUpKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorfQorCisvKioKKyAqIGdzdF9wbHVnaW5fZmVhdHVyZV90eXBlX25hbWVfZmlsdGVyOgorICogQGZlYXR1cmU6IHRoZSAjR3N0UGx1Z2luRmVhdHVyZQorICogQGRhdGE6IChpbik6IHRoZSB0eXBlIGFuZCBuYW1lIHRvIGNoZWNrIGFnYWluc3QKKyAqCisgKiBDb21wYXJlcyB0eXBlIGFuZCBuYW1lIG9mIHBsdWdpbiBmZWF0dXJlLiBDYW4gYmUgdXNlZCB3aXRoIGdzdF9maWx0ZXJfcnVuKCkuCisgKgorICogUmV0dXJuczogVFJVRSBpZiBlcXVhbC4KKyAqLworZ2Jvb2xlYW4KK2dzdF9wbHVnaW5fZmVhdHVyZV90eXBlX25hbWVfZmlsdGVyIChHc3RQbHVnaW5GZWF0dXJlICogZmVhdHVyZSwKKyAgICBHc3RUeXBlTmFtZURhdGEgKiBkYXRhKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BMVUdJTl9GRUFUVVJFIChmZWF0dXJlKSwgRkFMU0UpOworCisgIHJldHVybiAoKGRhdGEtPnR5cGUgPT0gMCB8fCBkYXRhLT50eXBlID09IEdfT0JKRUNUX1RZUEUgKGZlYXR1cmUpKSAmJgorICAgICAgKGRhdGEtPm5hbWUgPT0gTlVMTCB8fCAhc3RyY21wIChkYXRhLT5uYW1lLCBHU1RfT0JKRUNUX05BTUUgKGZlYXR1cmUpKSkpOworfQorCisvKioKKyAqIGdzdF9wbHVnaW5fZmVhdHVyZV9zZXRfcmFuazoKKyAqIEBmZWF0dXJlOiBmZWF0dXJlIHRvIHJhbmsKKyAqIEByYW5rOiByYW5rIHZhbHVlIC0gaGlnaGVyIG51bWJlciBtZWFucyBtb3JlIHByaW9yaXR5IHJhbmsKKyAqCisgKiBTcGVjaWZpZXMgYSByYW5rIGZvciBhIHBsdWdpbiBmZWF0dXJlLCBzbyB0aGF0IGF1dG9wbHVnZ2luZyB1c2VzCisgKiB0aGUgbW9zdCBhcHByb3ByaWF0ZSBmZWF0dXJlLgorICovCit2b2lkCitnc3RfcGx1Z2luX2ZlYXR1cmVfc2V0X3JhbmsgKEdzdFBsdWdpbkZlYXR1cmUgKiBmZWF0dXJlLCBndWludCByYW5rKQoreworICBnX3JldHVybl9pZl9mYWlsIChmZWF0dXJlICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUExVR0lOX0ZFQVRVUkUgKGZlYXR1cmUpKTsKKworICBmZWF0dXJlLT5yYW5rID0gcmFuazsKK30KKworLyoqCisgKiBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3Jhbms6CisgKiBAZmVhdHVyZTogYSBmZWF0dXJlCisgKgorICogR2V0cyB0aGUgcmFuayBvZiBhIHBsdWdpbiBmZWF0dXJlLgorICoKKyAqIFJldHVybnM6IFRoZSByYW5rIG9mIHRoZSBmZWF0dXJlCisgKi8KK2d1aW50Citnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3JhbmsgKEdzdFBsdWdpbkZlYXR1cmUgKiBmZWF0dXJlKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BMVUdJTl9GRUFUVVJFIChmZWF0dXJlKSwgR1NUX1JBTktfTk9ORSk7CisKKyAgcmV0dXJuIGZlYXR1cmUtPnJhbms7Cit9CisKKy8qKgorICogZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZToKKyAqIEBsaXN0OiAodHJhbnNmZXIgZnVsbCkgKGVsZW1lbnQtdHlwZSBHc3QuUGx1Z2luRmVhdHVyZSk6IGxpc3QKKyAqICAgICBvZiAjR3N0UGx1Z2luRmVhdHVyZQorICoKKyAqIFVucmVmcyBlYWNoIG1lbWJlciBvZiBAbGlzdCwgdGhlbiBmcmVlcyB0aGUgbGlzdC4KKyAqLwordm9pZAorZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSAoR0xpc3QgKiBsaXN0KQoreworICBHTGlzdCAqZzsKKworICBmb3IgKGcgPSBsaXN0OyBnOyBnID0gZy0+bmV4dCkgeworICAgIEdzdFBsdWdpbkZlYXR1cmUgKmZlYXR1cmUgPSBHU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVCAoZy0+ZGF0YSk7CisKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChmZWF0dXJlKTsKKyAgfQorICBnX2xpc3RfZnJlZSAobGlzdCk7Cit9CisKKy8qKgorICogZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfY29weToKKyAqIEBsaXN0OiAodHJhbnNmZXIgbm9uZSkgKGVsZW1lbnQtdHlwZSBHc3QuUGx1Z2luRmVhdHVyZSk6IGxpc3QKKyAqICAgICBvZiAjR3N0UGx1Z2luRmVhdHVyZQorICoKKyAqIENvcGllcyB0aGUgbGlzdCBvZiBmZWF0dXJlcy4gQ2FsbGVyIHNob3VsZCBjYWxsIEBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlCisgKiB3aGVuIGRvbmUgd2l0aCB0aGUgbGlzdC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKGVsZW1lbnQtdHlwZSBHc3QuUGx1Z2luRmVhdHVyZSk6IGEgY29weSBvZiBAbGlzdCwKKyAqICAgICB3aXRoIGVhY2ggZmVhdHVyZSdzIHJlZmVyZW5jZSBjb3VudCBpbmNyZW1lbnRlZC4KKyAqCisgKiBTaW5jZTogMC4xMC4yNgorICovCitHTGlzdCAqCitnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9jb3B5IChHTGlzdCAqIGxpc3QpCit7CisgIEdMaXN0ICpuZXdfbGlzdCA9IE5VTEw7CisKKyAgaWYgKEdfTElLRUxZIChsaXN0KSkgeworICAgIEdMaXN0ICpsYXN0OworCisgICAgbmV3X2xpc3QgPSBnX2xpc3RfYWxsb2MgKCk7CisgICAgbmV3X2xpc3QtPmRhdGEgPSBnX29iamVjdF9yZWYgKChHT2JqZWN0ICopIGxpc3QtPmRhdGEpOworICAgIG5ld19saXN0LT5wcmV2ID0gTlVMTDsKKyAgICBsYXN0ID0gbmV3X2xpc3Q7CisgICAgbGlzdCA9IGxpc3QtPm5leHQ7CisgICAgd2hpbGUgKGxpc3QpIHsKKyAgICAgIGxhc3QtPm5leHQgPSBnX2xpc3RfYWxsb2MgKCk7CisgICAgICBsYXN0LT5uZXh0LT5wcmV2ID0gbGFzdDsKKyAgICAgIGxhc3QgPSBsYXN0LT5uZXh0OworICAgICAgbGFzdC0+ZGF0YSA9IGdfb2JqZWN0X3JlZiAoKEdPYmplY3QgKikgbGlzdC0+ZGF0YSk7CisgICAgICBsaXN0ID0gbGlzdC0+bmV4dDsKKyAgICB9CisgICAgbGFzdC0+bmV4dCA9IE5VTEw7CisgIH0KKworICByZXR1cm4gbmV3X2xpc3Q7Cit9CisKKy8qKgorICogZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZGVidWc6CisgKiBAbGlzdDogKHRyYW5zZmVyIG5vbmUpIChlbGVtZW50LXR5cGUgR3N0LlBsdWdpbkZlYXR1cmUpOiBhICNHTGlzdCBvZgorICogICAgIHBsdWdpbiBmZWF0dXJlcworICoKKyAqIERlYnVnIHRoZSBwbHVnaW4gZmVhdHVyZSBuYW1lcyBpbiBAbGlzdC4KKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCit2b2lkCitnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9kZWJ1ZyAoR0xpc3QgKiBsaXN0KQoreworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKyAgd2hpbGUgKGxpc3QpIHsKKyAgICBHU1RfREVCVUcgKCIlcyIsCisgICAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfbmFtZSAoKEdzdFBsdWdpbkZlYXR1cmUgKikgbGlzdC0+ZGF0YSkpOworICAgIGxpc3QgPSBsaXN0LT5uZXh0OworICB9CisjZW5kaWYKK30KKworLyoqCisgKiBnc3RfcGx1Z2luX2ZlYXR1cmVfY2hlY2tfdmVyc2lvbjoKKyAqIEBmZWF0dXJlOiBhIGZlYXR1cmUKKyAqIEBtaW5fbWFqb3I6IG1pbmltdW0gcmVxdWlyZWQgbWFqb3IgdmVyc2lvbgorICogQG1pbl9taW5vcjogbWluaW11bSByZXF1aXJlZCBtaW5vciB2ZXJzaW9uCisgKiBAbWluX21pY3JvOiBtaW5pbXVtIHJlcXVpcmVkIG1pY3JvIHZlcnNpb24KKyAqCisgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gcGx1Z2luIGZlYXR1cmUgaXMgYXQgbGVhc3QKKyAqICB0aGUgcmVxdWlyZWQgdmVyc2lvbgorICoKKyAqIFJldHVybnM6ICNUUlVFIGlmIHRoZSBwbHVnaW4gZmVhdHVyZSBoYXMgYXQgbGVhc3QKKyAqICB0aGUgcmVxdWlyZWQgdmVyc2lvbiwgb3RoZXJ3aXNlICNGQUxTRS4KKyAqLworZ2Jvb2xlYW4KK2dzdF9wbHVnaW5fZmVhdHVyZV9jaGVja192ZXJzaW9uIChHc3RQbHVnaW5GZWF0dXJlICogZmVhdHVyZSwKKyAgICBndWludCBtaW5fbWFqb3IsIGd1aW50IG1pbl9taW5vciwgZ3VpbnQgbWluX21pY3JvKQoreworICBHc3RSZWdpc3RyeSAqcmVnaXN0cnk7CisgIEdzdFBsdWdpbiAqcGx1Z2luOworICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmVhdHVyZSAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUExVR0lOX0ZFQVRVUkUgKGZlYXR1cmUpLCBGQUxTRSk7CisKKyAgR1NUX0RFQlVHICgiTG9va2luZyB1cCBwbHVnaW4gJyVzJyBjb250YWluaW5nIHBsdWdpbiBmZWF0dXJlICclcyciLAorICAgICAgZmVhdHVyZS0+cGx1Z2luX25hbWUsIEdTVF9PQkpFQ1RfTkFNRSAoZmVhdHVyZSkpOworCisgIHJlZ2lzdHJ5ID0gZ3N0X3JlZ2lzdHJ5X2dldF9kZWZhdWx0ICgpOworICBwbHVnaW4gPSBnc3RfcmVnaXN0cnlfZmluZF9wbHVnaW4gKHJlZ2lzdHJ5LCBmZWF0dXJlLT5wbHVnaW5fbmFtZSk7CisKKyAgaWYgKHBsdWdpbikgeworICAgIGNvbnN0IGdjaGFyICp2ZXJfc3RyOworICAgIGd1aW50IG1ham9yLCBtaW5vciwgbWljcm8sIG5hbm87CisgICAgZ2ludCBuc2NhbjsKKworICAgIHZlcl9zdHIgPSBnc3RfcGx1Z2luX2dldF92ZXJzaW9uIChwbHVnaW4pOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh2ZXJfc3RyICE9IE5VTEwsIEZBTFNFKTsKKworICAgIG5zY2FuID0gc3NjYW5mICh2ZXJfc3RyLCAiJXUuJXUuJXUuJXUiLCAmbWFqb3IsICZtaW5vciwgJm1pY3JvLCAmbmFubyk7CisgICAgR1NUX0RFQlVHICgidmVyc2lvbiBzdHJpbmcgJyVzJyBwYXJzZWQgdG8gJWQgdmFsdWVzIiwgdmVyX3N0ciwgbnNjYW4pOworCisgICAgaWYgKG5zY2FuID49IDMpIHsKKyAgICAgIGlmIChtYWpvciA+IG1pbl9tYWpvcikKKyAgICAgICAgcmV0ID0gVFJVRTsKKyAgICAgIGVsc2UgaWYgKG1ham9yIDwgbWluX21ham9yKQorICAgICAgICByZXQgPSBGQUxTRTsKKyAgICAgIGVsc2UgaWYgKG1pbm9yID4gbWluX21pbm9yKQorICAgICAgICByZXQgPSBUUlVFOworICAgICAgZWxzZSBpZiAobWlub3IgPCBtaW5fbWlub3IpCisgICAgICAgIHJldCA9IEZBTFNFOworICAgICAgZWxzZSBpZiAobWljcm8gPiBtaW5fbWljcm8pCisgICAgICAgIHJldCA9IFRSVUU7CisgICAgICAvKiBtaWNybyBpcyAxIHNtYWxsZXIgYnV0IHdlIGhhdmUgYSBuYW5vIHZlcnNpb24sIHRoaXMgaXMgdGhlIHVwY29taW5nCisgICAgICAgKiByZWxlYXNlIG9mIHRoZSByZXF1ZXN0ZWQgdmVyc2lvbiBhbmQgd2UncmUgb2sgdGhlbiAqLworICAgICAgZWxzZSBpZiAobnNjYW4gPT0gNCAmJiBuYW5vID4gMCAmJiAobWljcm8gKyAxID09IG1pbl9taWNybykpCisgICAgICAgIHJldCA9IFRSVUU7CisgICAgICBlbHNlCisgICAgICAgIHJldCA9IChtaWNybyA9PSBtaW5fbWljcm8pOworCisgICAgICBHU1RfREVCVUcgKCJDaGVja2luZyB3aGV0aGVyICV1LiV1LiV1ID49ICV1LiV1LiV1PyAlcyIsIG1ham9yLCBtaW5vciwKKyAgICAgICAgICBtaWNybywgbWluX21ham9yLCBtaW5fbWlub3IsIG1pbl9taWNybywgKHJldCkgPyAieWVzIiA6ICJubyIpOworICAgIH0gZWxzZSB7CisgICAgICBHU1RfV0FSTklORyAoIkNvdWxkIG5vdCBwYXJzZSB2ZXJzaW9uIHN0cmluZyAnJXMnIG9mIHBsdWdpbiAnJXMnIiwKKyAgICAgICAgICB2ZXJfc3RyLCBmZWF0dXJlLT5wbHVnaW5fbmFtZSk7CisgICAgfQorCisgICAgZ3N0X29iamVjdF91bnJlZiAocGx1Z2luKTsKKyAgfSBlbHNlIHsKKyAgICBHU1RfREVCVUcgKCJDb3VsZCBub3QgZmluZCBwbHVnaW4gJyVzJyIsIGZlYXR1cmUtPnBsdWdpbl9uYW1lKTsKKyAgfQorCisgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICogZ3N0X3BsdWdpbl9mZWF0dXJlX3JhbmtfY29tcGFyZV9mdW5jOgorICogQHAxOiBhICNHc3RQbHVnaW5GZWF0dXJlCisgKiBAcDI6IGEgI0dzdFBsdWdpbkZlYXR1cmUKKyAqCisgKiBDb21wYXJlcyB0aGUgdHdvIGdpdmVuICNHc3RQbHVnaW5GZWF0dXJlIGluc3RhbmNlcy4gVGhpcyBmdW5jdGlvbiBjYW4gYmUKKyAqIHVzZWQgYXMgYSAjR0NvbXBhcmVGdW5jIHdoZW4gc29ydGluZyBieSByYW5rIGFuZCB0aGVuIGJ5IG5hbWUuCisgKgorICogUmV0dXJuczogbmVnYXRpdmUgdmFsdWUgaWYgdGhlIHJhbmsgb2YgcDEgPiB0aGUgcmFuayBvZiBwMiBvciB0aGUgcmFua3MgYXJlCisgKiBlcXVhbCBidXQgdGhlIG5hbWUgb2YgcDEgY29tZXMgYmVmb3JlIHRoZSBuYW1lIG9mIHAyOyB6ZXJvIGlmIHRoZSByYW5rCisgKiBhbmQgbmFtZXMgYXJlIGVxdWFsOyBwb3NpdGl2ZSB2YWx1ZSBpZiB0aGUgcmFuayBvZiBwMSA8IHRoZSByYW5rIG9mIHAyIG9yIHRoZQorICogcmFua3MgYXJlIGVxdWFsIGJ1dCB0aGUgbmFtZSBvZiBwMiBjb21lcyBhZnRlciB0aGUgbmFtZSBvZiBwMQorICoKKyAqIFNpbmNlOiAwLjEwLjMxCisgKi8KK2dpbnQKK2dzdF9wbHVnaW5fZmVhdHVyZV9yYW5rX2NvbXBhcmVfZnVuYyAoZ2NvbnN0cG9pbnRlciBwMSwgZ2NvbnN0cG9pbnRlciBwMikKK3sKKyAgR3N0UGx1Z2luRmVhdHVyZSAqZjEsICpmMjsKKyAgZ2ludCBkaWZmOworCisgIGYxID0gKEdzdFBsdWdpbkZlYXR1cmUgKikgcDE7CisgIGYyID0gKEdzdFBsdWdpbkZlYXR1cmUgKikgcDI7CisKKyAgZGlmZiA9IGYyLT5yYW5rIC0gZjEtPnJhbms7CisgIGlmIChkaWZmICE9IDApCisgICAgcmV0dXJuIGRpZmY7CisKKyAgZGlmZiA9IHN0cmNtcCAoR1NUX09CSkVDVF9OQU1FIChmMiksIEdTVF9PQkpFQ1RfTkFNRSAoZjEpKTsKKworICByZXR1cm4gZGlmZjsKK30KZGlmZiAtLWdpdCBhL2dzdC9nc3RwbHVnaW5mZWF0dXJlLmggYi9nc3QvZ3N0cGx1Z2luZmVhdHVyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZGIwZjQKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0cGx1Z2luZmVhdHVyZS5oCkBAIC0wLDAgKzEsMTgzIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+CisgKgorICogZ3N0cGx1Z2luZmVhdHVyZS5oOiBIZWFkZXIgZm9yIGJhc2UgR3N0UGx1Z2luRmVhdHVyZQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworI2lmbmRlZiBfX0dTVF9QTFVHSU5fRkVBVFVSRV9IX18KKyNkZWZpbmUgX19HU1RfUExVR0lOX0ZFQVRVUkVfSF9fCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPGdzdC9nc3RvYmplY3QuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0cGx1Z2luLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBHU1RfVFlQRV9QTFVHSU5fRkVBVFVSRSAgICAgICAgICAgICAgICAgKGdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfdHlwZSgpKQorI2RlZmluZSBHU1RfUExVR0lOX0ZFQVRVUkUob2JqKSAgICAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfUExVR0lOX0ZFQVRVUkUsIEdzdFBsdWdpbkZlYXR1cmUpKQorI2RlZmluZSBHU1RfSVNfUExVR0lOX0ZFQVRVUkUob2JqKSAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfUExVR0lOX0ZFQVRVUkUpKQorI2RlZmluZSBHU1RfUExVR0lOX0ZFQVRVUkVfQ0xBU1Moa2xhc3MpICAgICAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9QTFVHSU5fRkVBVFVSRSwgR3N0UGx1Z2luRmVhdHVyZUNsYXNzKSkKKyNkZWZpbmUgR1NUX0lTX1BMVUdJTl9GRUFUVVJFX0NMQVNTKGtsYXNzKSAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfUExVR0lOX0ZFQVRVUkUpKQorI2RlZmluZSBHU1RfUExVR0lOX0ZFQVRVUkVfR0VUX0NMQVNTKG9iaikgICAgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9QTFVHSU5fRkVBVFVSRSwgR3N0UGx1Z2luRmVhdHVyZUNsYXNzKSkKKyNkZWZpbmUgR1NUX1BMVUdJTl9GRUFUVVJFX0NBU1Qob2JqKSAgICAgICAgICAgICgoR3N0UGx1Z2luRmVhdHVyZSopKG9iaikpCisKK3R5cGVkZWYgc3RydWN0IF9Hc3RQbHVnaW5GZWF0dXJlIEdzdFBsdWdpbkZlYXR1cmU7Cit0eXBlZGVmIHN0cnVjdCBfR3N0UGx1Z2luRmVhdHVyZUNsYXNzIEdzdFBsdWdpbkZlYXR1cmVDbGFzczsKKworLyoqCisgKiBHc3RSYW5rOgorICogQEdTVF9SQU5LX05PTkU6IHdpbGwgYmUgY2hvc2VuIGxhc3Qgb3Igbm90IGF0IGFsbAorICogQEdTVF9SQU5LX01BUkdJTkFMOiB1bmxpa2VseSB0byBiZSBjaG9zZW4KKyAqIEBHU1RfUkFOS19TRUNPTkRBUlk6IGxpa2VseSB0byBiZSBjaG9zZW4KKyAqIEBHU1RfUkFOS19QUklNQVJZOiB3aWxsIGJlIGNob3NlbiBmaXJzdAorICoKKyAqIEVsZW1lbnQgcHJpb3JpdHkgcmFua3MuIERlZmluZXMgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBhdXRvcGx1Z2dlciAob3IKKyAqIHNpbWlsYXIgcmFuay1waWNraW5nIG1lY2hhbmlzbXMsIHN1Y2ggYXMgZS5nLiBnc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpKCkpCisgKiB3aWxsIGNob29zZSB0aGlzIGVsZW1lbnQgb3ZlciBhbiBhbHRlcm5hdGl2ZSBvbmUgd2l0aCB0aGUgc2FtZSBmdW5jdGlvbi4KKyAqCisgKiBUaGVzZSBjb25zdGFudHMgc2VydmUgYXMgYSByb3VnaCBndWlkYW5jZSBmb3IgZGVmaW5pbmcgdGhlIHJhbmsgb2YgYQorICogI0dzdFBsdWdpbkZlYXR1cmUuIEFueSB2YWx1ZSBpcyB2YWxpZCwgaW5jbHVkaW5nIHZhbHVlcyBiaWdnZXIgdGhhbgorICogQEdTVF9SQU5LX1BSSU1BUlkuCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIEdTVF9SQU5LX05PTkUgICAgICAgICAgICAgICAgID0gMCwKKyAgR1NUX1JBTktfTUFSR0lOQUwgICAgICAgICAgICAgPSA2NCwKKyAgR1NUX1JBTktfU0VDT05EQVJZICAgICAgICAgICAgPSAxMjgsCisgIEdTVF9SQU5LX1BSSU1BUlkgICAgICAgICAgICAgID0gMjU2Cit9IEdzdFJhbms7CisKKy8qKgorICogZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9uYW1lOgorICogQGZlYXR1cmU6IGEgI0dzdFBsdWdpbkZlYXR1cmUgdG8gZ2V0IHRoZSBuYW1lIG9mIEBmZWF0dXJlLgorICoKKyAqIFJldHVybnMgYSBjb3B5IG9mIHRoZSBuYW1lIG9mIEBmZWF0dXJlLgorICogQ2FsbGVyIHNob3VsZCBnX2ZyZWUoKSB0aGUgcmV0dXJuIHZhbHVlIGFmdGVyIHVzYWdlLgorICogRm9yIGEgbmFtZWxlc3MgcGx1Z2luIGZlYXR1cmUsIHRoaXMgcmV0dXJucyBOVUxMLCB3aGljaCB5b3UgY2FuIHNhZmVseSBnX2ZyZWUoKQorICogYXMgd2VsbC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuYW1lIG9mIEBmZWF0dXJlLiBnX2ZyZWUoKSBhZnRlciB1c2FnZS4gTVQgc2FmZS4KKyAqCisgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfbmFtZShmZWF0dXJlKSAgICAgIGdzdF9vYmplY3RfZ2V0X25hbWUoR1NUX09CSkVDVF9DQVNUKGZlYXR1cmUpKQorCisvKioKKyAqIGdzdF9wbHVnaW5fZmVhdHVyZV9zZXRfbmFtZToKKyAqIEBmZWF0dXJlOiBhICNHc3RQbHVnaW5GZWF0dXJlIHRvIHNldCB0aGUgbmFtZSBvZi4KKyAqIEBuYW1lOiB0aGUgbmV3IG5hbWUKKyAqCisgKiBTZXRzIHRoZSBuYW1lIG9mIHRoZSBwbHVnaW4gZmVhdHVyZSwgZ2V0dGluZyByaWQgb2YgdGhlIG9sZCBuYW1lIGlmIHRoZXJlIHdhcyBvbmUuCisgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9zZXRfbmFtZShmZWF0dXJlLG5hbWUpIGdzdF9vYmplY3Rfc2V0X25hbWUoR1NUX09CSkVDVF9DQVNUKGZlYXR1cmUpLG5hbWUpCisKKy8qKgorICogR3N0UGx1Z2luRmVhdHVyZToKKyAqCisgKiBPcGFxdWUgI0dzdFBsdWdpbkZlYXR1cmUgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgX0dzdFBsdWdpbkZlYXR1cmUgeworICBHc3RPYmplY3QgICAgICBvYmplY3Q7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdib29sZWFuICAgICAgIGxvYWRlZDsKKyAgZ3VpbnQgICAgICAgICAgcmFuazsKKworICBjb25zdCBnY2hhciAgICpwbHVnaW5fbmFtZTsKKyAgR3N0UGx1Z2luICAgICAqcGx1Z2luOyAgICAgIC8qIHdlYWsgcmVmICovCisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkcgLSAxXTsKK307CisKK3N0cnVjdCBfR3N0UGx1Z2luRmVhdHVyZUNsYXNzIHsKKyAgR3N0T2JqZWN0Q2xhc3MgICAgICAgIHBhcmVudF9jbGFzczsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Cit9OworCisvKioKKyAqIEdzdFR5cGVOYW1lRGF0YToKKyAqIEBuYW1lOiBhIG5hbWUKKyAqIEB0eXBlOiBhIEdUeXBlCisgKgorICogU3RydWN0dXJlIHVzZWQgZm9yIGZpbHRlcmluZyBiYXNlZCBvbiBAbmFtZSBhbmQgQHR5cGUuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgZ2NoYXIgICAqbmFtZTsKKyAgR1R5cGUgICAgICAgICAgdHlwZTsKK30gR3N0VHlwZU5hbWVEYXRhOworCisvKioKKyAqIEdzdFBsdWdpbkZlYXR1cmVGaWx0ZXI6CisgKiBAZmVhdHVyZTogdGhlIHBsdWdpbmZlYXR1cmUgdG8gY2hlY2sKKyAqIEB1c2VyX2RhdGE6IHRoZSB1c2VyX2RhdGEgdGhhdCBoYXMgYmVlbiBwYXNzZWQgb24gZS5nLgorICogIGdzdF9yZWdpc3RyeV9mZWF0dXJlX2ZpbHRlcigpCisgKgorICogQSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHdpdGggZS5nLiBnc3RfcmVnaXN0cnlfZmVhdHVyZV9maWx0ZXIoKQorICogdG8gZ2V0IGEgbGlzdCBvZiBwbHVnaW5mZWF0dXJlIHRoYXQgbWF0Y2ggY2VydGFpbiBjcml0ZXJpYS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBmb3IgYSBwb3NpdGl2ZSBtYXRjaCwgJUZBTFNFIG90aGVyd2lzZQorICovCit0eXBlZGVmIGdib29sZWFuICAgICAgICAoKkdzdFBsdWdpbkZlYXR1cmVGaWx0ZXIpICAgICAgIChHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKKworLyogbm9ybWFsIEdPYmplY3Qgc3R1ZmYgKi8KK0dUeXBlICAgICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3R5cGUgICAgICAgICAgICAgKHZvaWQpOworCitHc3RQbHVnaW5GZWF0dXJlICoKKyAgICAgICAgICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZCAgICAgICAgICAgICAgICAgKEdzdFBsdWdpbkZlYXR1cmUgKmZlYXR1cmUpOworCitnYm9vbGVhbiAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX3R5cGVfbmFtZV9maWx0ZXIgICAgIChHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0VHlwZU5hbWVEYXRhICpkYXRhKTsKKwordm9pZCAgICAgICAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9zZXRfcmFuayAgICAgICAgICAgICAoR3N0UGx1Z2luRmVhdHVyZSAqZmVhdHVyZSwgZ3VpbnQgcmFuayk7CitndWludCAgICAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9yYW5rICAgICAgICAgICAgIChHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlKTsKKwordm9pZCAgICAgICAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUgICAgICAgICAgICAoR0xpc3QgKmxpc3QpOworR0xpc3QgICAgICAgICAgKmdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2NvcHkgICAgICAgICAgICAoR0xpc3QgKmxpc3QpOwordm9pZCAgICAgICAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2RlYnVnICAgICAgICAgICAoR0xpc3QgKmxpc3QpOworCisvKioKKyAqIEdTVF9QTFVHSU5fRkVBVFVSRV9MSVNUX0RFQlVHOgorICogQGxpc3Q6ICh0cmFuc2ZlciBub25lKSAoZWxlbWVudC10eXBlIEdzdC5QbHVnaW5GZWF0dXJlKTogYSAjR0xpc3Qgb2YKKyAqICAgICBwbHVnaW4gZmVhdHVyZXMKKyAqCisgKiBEZWJ1ZyB0aGUgcGx1Z2luIGZlYXR1cmUgbmFtZXMgaW4gQGxpc3QuCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKyNkZWZpbmUgR1NUX1BMVUdJTl9GRUFUVVJFX0xJU1RfREVCVUcobGlzdCkgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZGVidWcobGlzdCkKKyNlbHNlCisjZGVmaW5lIEdTVF9QTFVHSU5fRkVBVFVSRV9MSVNUX0RFQlVHKGxpc3QpCisjZW5kaWYKKworZ2Jvb2xlYW4gICAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9jaGVja192ZXJzaW9uICAgICAgICAoR3N0UGx1Z2luRmVhdHVyZSAqZmVhdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgIG1pbl9tYWpvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgIG1pbl9taW5vciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgIG1pbl9taWNybyk7CitnaW50ICAgICAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX3JhbmtfY29tcGFyZV9mdW5jICAgIChnY29uc3Rwb2ludGVyIHAxLAorCQkJCQkJCSBnY29uc3Rwb2ludGVyIHAyKTsKKworR19FTkRfREVDTFMKKworCisjZW5kaWYgLyogX19HU1RfUExVR0lOX0ZFQVRVUkVfSF9fICovCisKZGlmZiAtLWdpdCBhL2dzdC9nc3RwbHVnaW5sb2FkZXIuYyBiL2dzdC9nc3RwbHVnaW5sb2FkZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmIyZGY4Ci0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdHBsdWdpbmxvYWRlci5jCkBAIC0wLDAgKzEsMTAyNiBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSmFuIFNjaG1pZHQgPGphbi5zY2htaWR0QHN1bi5jb20+CisgKgorICogZ3N0cGx1Z2lubG9hZGVyLmM6IEdzdFBsdWdpbkxvYWRlciBoZWxwZXIgZm9yIGxvYWRpbmcgcGx1Z2luIGZpbGVzCisgKiBvdXQgb2YgcHJvY2Vzcy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPGdzdC9nc3RfcHJpdmF0ZS5oPgorCisjaWZuZGVmIEdfT1NfV0lOMzIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlCisjZGVmaW5lIGZzeW5jKGZkKSBfY29tbWl0KGZkKQorI2luY2x1ZGUgPGlvLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfU1lTX1VUU05BTUVfSAorI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlIDxnc3QvZ3N0Y29uZmlnLmg+CisKKyNpbmNsdWRlIDxnc3QvZ3N0cG9sbC5oPgorI2luY2x1ZGUgPGdzdC9nc3R1dGlscy5oPgorCisjaW5jbHVkZSA8Z3N0L2dzdHBsdWdpbmxvYWRlci5oPgorI2luY2x1ZGUgPGdzdC9nc3RyZWdpc3RyeWNodW5rcy5oPgorI2luY2x1ZGUgPGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5oPgorCisvKiBJTVBPUlRBTlQ6IEJ1bXAgdGhlIHZlcnNpb24gbnVtYmVyIGlmIHRoZSBwbHVnaW4gbG9hZGVyIHBhY2tldCBwcm90b2NvbAorICogY2hhbmdlcy4gQ2hhbmdlcyBpbiB0aGUgYmluYXJ5IHJlZ2lzdHJ5IGZvcm1hdCBpdHNlbGYgYXJlIGhhbmRsZWQgYnkKKyAqIGJ1bXBpbmcgdGhlIEdTVF9NQUdJQ19CSU5BUllfVkVSU0lPTl9TVFIKKyAqLworc3RhdGljIGNvbnN0IGd1aW50MzIgbG9hZGVyX3Byb3RvY29sX3ZlcnNpb24gPSAzOworCisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBHU1RfQ0FUX1BMVUdJTl9MT0FESU5HCisKK3N0YXRpYyBHc3RQbHVnaW5Mb2FkZXIgKnBsdWdpbl9sb2FkZXJfbmV3IChHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5KTsKK3N0YXRpYyBnYm9vbGVhbiBwbHVnaW5fbG9hZGVyX2ZyZWUgKEdzdFBsdWdpbkxvYWRlciAqIGxvYWRlcik7CitzdGF0aWMgZ2Jvb2xlYW4gcGx1Z2luX2xvYWRlcl9sb2FkIChHc3RQbHVnaW5Mb2FkZXIgKiBsb2FkZXIsCisgICAgY29uc3QgZ2NoYXIgKiBmaWxlbmFtZSwgb2ZmX3QgZmlsZV9zaXplLCB0aW1lX3QgZmlsZV9tdGltZSk7CisKKy8qIGZ1bmN0aW9ucyB1c2VkIGluIEdzdFJlZ2lzdHJ5IHNjYW5uaW5nICovCitjb25zdCBHc3RQbHVnaW5Mb2FkZXJGdW5jcyBfcHJpdl9nc3RfcGx1Z2luX2xvYWRlcl9mdW5jcyA9IHsKKyAgcGx1Z2luX2xvYWRlcl9uZXcsIHBsdWdpbl9sb2FkZXJfZnJlZSwgcGx1Z2luX2xvYWRlcl9sb2FkCit9OworCit0eXBlZGVmIHN0cnVjdCBfUGVuZGluZ1BsdWdpbkVudHJ5Cit7CisgIC8qIHNlcXVlbmNlIG51bWJlciAqLworICBndWludDMyIHRhZzsKKyAgZ2NoYXIgKmZpbGVuYW1lOworICBvZmZfdCBmaWxlX3NpemU7CisgIHRpbWVfdCBmaWxlX210aW1lOworfSBQZW5kaW5nUGx1Z2luRW50cnk7CisKK3N0cnVjdCBfR3N0UGx1Z2luTG9hZGVyCit7CisgIEdzdFJlZ2lzdHJ5ICpyZWdpc3RyeTsKKyAgR3N0UG9sbCAqZmRzZXQ7CisKKyAgZ2Jvb2xlYW4gY2hpbGRfcnVubmluZzsKKyAgR1BpZCBjaGlsZF9waWQ7CisgIEdzdFBvbGxGRCBmZF93OworICBHc3RQb2xsRkQgZmRfcjsKKworICBnYm9vbGVhbiBpc19jaGlsZDsKKyAgZ2Jvb2xlYW4gZ290X3BsdWdpbl9kZXRhaWxzOworCisgIC8qIFRyYW5zbWl0IGJ1ZmZlciAqLworICBndWludDggKnR4X2J1ZjsKKyAgZ3VpbnQgdHhfYnVmX3NpemU7CisgIGd1aW50IHR4X2J1Zl93cml0ZTsKKyAgZ3VpbnQgdHhfYnVmX3JlYWQ7CisKKyAgLyogbmV4dCBzZXF1ZW5jZSBudW1iZXIgKGZvciBQZW5kaW5nUGx1Z2luRW50cnkpICovCisgIGd1aW50MzIgbmV4dF90YWc7CisKKyAgZ3VpbnQ4ICpyeF9idWY7CisgIGd1aW50IHJ4X2J1Zl9zaXplOworICBnYm9vbGVhbiByeF9kb25lOworICBnYm9vbGVhbiByeF9nb3Rfc3luYzsKKworICAvKiBIZWFkIGFuZCB0YWlsIG9mIHRoZSBwZW5kaW5nIHBsdWdpbnMgbGlzdC4gTGlzdCBvZgorICAgICBQZW5kaW5nUGx1Z2luRW50cnkgc3RydWN0cyAqLworICBHTGlzdCAqcGVuZGluZ19wbHVnaW5zOworICBHTGlzdCAqcGVuZGluZ19wbHVnaW5zX3RhaWw7Cit9OworCisjZGVmaW5lIFBBQ0tFVF9FWElUIDEKKyNkZWZpbmUgUEFDS0VUX0xPQURfUExVR0lOIDIKKyNkZWZpbmUgUEFDS0VUX1NZTkMgMworI2RlZmluZSBQQUNLRVRfUExVR0lOX0RFVEFJTFMgNAorI2RlZmluZSBQQUNLRVRfVkVSU0lPTiA1CisKKyNkZWZpbmUgQlVGX0lOSVRfU0laRSA1MTIKKyNkZWZpbmUgQlVGX0dST1dfRVhUUkEgNTEyCisjZGVmaW5lIEJVRl9NQVhfU0laRSAoMzIgKiAxMDI0ICogMTAyNCkKKworI2RlZmluZSBIRUFERVJfU0laRSAxMgorLyogNCBtYWdpYyBoZXggYnl0ZXMgdG8gbWFyayBlYWNoIHBhY2tldCAqLworI2RlZmluZSBIRUFERVJfTUFHSUMgMHhiZWZlYzBhZQorI2RlZmluZSBBTElHTk1FTlQgICAoc2l6ZW9mICh2b2lkICopKQorCitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X3BsdWdpbl9sb2FkZXJfc3Bhd24gKEdzdFBsdWdpbkxvYWRlciAqIGxvYWRlcik7CitzdGF0aWMgdm9pZCBwdXRfcGFja2V0IChHc3RQbHVnaW5Mb2FkZXIgKiBsb2FkZXIsIGd1aW50IHR5cGUsIGd1aW50MzIgdGFnLAorICAgIGNvbnN0IGd1aW50OCAqIHBheWxvYWQsIGd1aW50MzIgcGF5bG9hZF9sZW4pOworc3RhdGljIGdib29sZWFuIGV4Y2hhbmdlX3BhY2tldHMgKEdzdFBsdWdpbkxvYWRlciAqIGwpOworc3RhdGljIGdib29sZWFuIHBsdWdpbl9sb2FkZXJfcmVwbGF5X3BlbmRpbmcgKEdzdFBsdWdpbkxvYWRlciAqIGwpOworc3RhdGljIGdib29sZWFuIHBsdWdpbl9sb2FkZXJfbG9hZF9hbmRfc3luYyAoR3N0UGx1Z2luTG9hZGVyICogbCwKKyAgICBQZW5kaW5nUGx1Z2luRW50cnkgKiBlbnRyeSk7CitzdGF0aWMgdm9pZCBwbHVnaW5fbG9hZGVyX2NyZWF0ZV9ibGFja2xpc3RfcGx1Z2luIChHc3RQbHVnaW5Mb2FkZXIgKiBsLAorICAgIFBlbmRpbmdQbHVnaW5FbnRyeSAqIGVudHJ5KTsKK3N0YXRpYyB2b2lkIHBsdWdpbl9sb2FkZXJfY2xlYW51cF9jaGlsZCAoR3N0UGx1Z2luTG9hZGVyICogbG9hZGVyKTsKK3N0YXRpYyBnYm9vbGVhbiBwbHVnaW5fbG9hZGVyX3N5bmNfd2l0aF9jaGlsZCAoR3N0UGx1Z2luTG9hZGVyICogbCk7CisKK3N0YXRpYyBHc3RQbHVnaW5Mb2FkZXIgKgorcGx1Z2luX2xvYWRlcl9uZXcgKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnkpCit7CisgIEdzdFBsdWdpbkxvYWRlciAqbCA9IGdfc2xpY2VfbmV3MCAoR3N0UGx1Z2luTG9hZGVyKTsKKworICBpZiAocmVnaXN0cnkpCisgICAgbC0+cmVnaXN0cnkgPSBnc3Rfb2JqZWN0X3JlZiAocmVnaXN0cnkpOworICBsLT5mZHNldCA9IGdzdF9wb2xsX25ldyAoRkFMU0UpOworICBnc3RfcG9sbF9mZF9pbml0ICgmbC0+ZmRfdyk7CisgIGdzdF9wb2xsX2ZkX2luaXQgKCZsLT5mZF9yKTsKKworICBsLT50eF9idWZfc2l6ZSA9IEJVRl9JTklUX1NJWkU7CisgIGwtPnR4X2J1ZiA9IGdfbWFsbG9jIChCVUZfSU5JVF9TSVpFKTsKKworICBsLT5uZXh0X3RhZyA9IDA7CisKKyAgbC0+cnhfYnVmX3NpemUgPSBCVUZfSU5JVF9TSVpFOworICBsLT5yeF9idWYgPSBnX21hbGxvYyAoQlVGX0lOSVRfU0laRSk7CisKKyAgcmV0dXJuIGw7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorcGx1Z2luX2xvYWRlcl9mcmVlIChHc3RQbHVnaW5Mb2FkZXIgKiBsb2FkZXIpCit7CisgIEdMaXN0ICpjdXI7CisgIGdib29sZWFuIGdvdF9wbHVnaW5fZGV0YWlsczsKKworICBmc3luYyAobG9hZGVyLT5mZF93LmZkKTsKKworICBpZiAobG9hZGVyLT5jaGlsZF9ydW5uaW5nKSB7CisgICAgcHV0X3BhY2tldCAobG9hZGVyLCBQQUNLRVRfRVhJVCwgMCwgTlVMTCwgMCk7CisKKyAgICAvKiBTd2FwIHBhY2tldHMgd2l0aCB0aGUgY2hpbGQgdW50aWwgaXQgZXhpdHMgY2xlYW5seSAqLworICAgIHdoaWxlICghbG9hZGVyLT5yeF9kb25lKSB7CisgICAgICBpZiAoZXhjaGFuZ2VfcGFja2V0cyAobG9hZGVyKSB8fCBsb2FkZXItPnJ4X2RvbmUpCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBpZiAoIXBsdWdpbl9sb2FkZXJfcmVwbGF5X3BlbmRpbmcgKGxvYWRlcikpCisgICAgICAgIGJyZWFrOworICAgICAgcHV0X3BhY2tldCAobG9hZGVyLCBQQUNLRVRfRVhJVCwgMCwgTlVMTCwgMCk7CisgICAgfQorCisgICAgcGx1Z2luX2xvYWRlcl9jbGVhbnVwX2NoaWxkIChsb2FkZXIpOworICB9IGVsc2UgeworICAgIGNsb3NlIChsb2FkZXItPmZkX3cuZmQpOworICAgIGNsb3NlIChsb2FkZXItPmZkX3IuZmQpOworICB9CisKKyAgZ3N0X3BvbGxfZnJlZSAobG9hZGVyLT5mZHNldCk7CisKKyAgZ19mcmVlIChsb2FkZXItPnJ4X2J1Zik7CisgIGdfZnJlZSAobG9hZGVyLT50eF9idWYpOworCisgIGlmIChsb2FkZXItPnJlZ2lzdHJ5KQorICAgIGdzdF9vYmplY3RfdW5yZWYgKGxvYWRlci0+cmVnaXN0cnkpOworCisgIGdvdF9wbHVnaW5fZGV0YWlscyA9IGxvYWRlci0+Z290X3BsdWdpbl9kZXRhaWxzOworCisgIC8qIEZyZWUgYW55IHBlbmRpbmcgcGx1Z2luIGVudHJpZXMgKi8KKyAgY3VyID0gbG9hZGVyLT5wZW5kaW5nX3BsdWdpbnM7CisgIHdoaWxlIChjdXIpIHsKKyAgICBQZW5kaW5nUGx1Z2luRW50cnkgKmVudHJ5ID0gKFBlbmRpbmdQbHVnaW5FbnRyeSAqKSAoY3VyLT5kYXRhKTsKKyAgICBnX2ZyZWUgKGVudHJ5LT5maWxlbmFtZSk7CisgICAgZ19zbGljZV9mcmVlIChQZW5kaW5nUGx1Z2luRW50cnksIGVudHJ5KTsKKworICAgIGN1ciA9IGdfbGlzdF9kZWxldGVfbGluayAoY3VyLCBjdXIpOworICB9CisKKyAgZ19zbGljZV9mcmVlIChHc3RQbHVnaW5Mb2FkZXIsIGxvYWRlcik7CisKKyAgcmV0dXJuIGdvdF9wbHVnaW5fZGV0YWlsczsKK30KKworc3RhdGljIGdib29sZWFuCitwbHVnaW5fbG9hZGVyX2xvYWQgKEdzdFBsdWdpbkxvYWRlciAqIGxvYWRlciwgY29uc3QgZ2NoYXIgKiBmaWxlbmFtZSwKKyAgICBvZmZfdCBmaWxlX3NpemUsIHRpbWVfdCBmaWxlX210aW1lKQoreworICBnaW50IGxlbjsKKyAgUGVuZGluZ1BsdWdpbkVudHJ5ICplbnRyeTsKKworICBpZiAoIWdzdF9wbHVnaW5fbG9hZGVyX3NwYXduIChsb2FkZXIpKQorICAgIHJldHVybiBGQUxTRTsKKworICAvKiBTZW5kIGEgcGFja2V0IHRvIHRoZSBjaGlsZCByZXF1ZXN0aW5nIHRoYXQgaXQgbG9hZCB0aGUgZ2l2ZW4gZmlsZSAqLworICBHU1RfTE9HX09CSkVDVCAobG9hZGVyLT5yZWdpc3RyeSwKKyAgICAgICJTZW5kaW5nIGZpbGUgJXMgdG8gY2hpbGQuIHRhZyAldSIsIGZpbGVuYW1lLCBsb2FkZXItPm5leHRfdGFnKTsKKworICBlbnRyeSA9IGdfc2xpY2VfbmV3IChQZW5kaW5nUGx1Z2luRW50cnkpOworICBlbnRyeS0+dGFnID0gbG9hZGVyLT5uZXh0X3RhZysrOworICBlbnRyeS0+ZmlsZW5hbWUgPSBnX3N0cmR1cCAoZmlsZW5hbWUpOworICBlbnRyeS0+ZmlsZV9zaXplID0gZmlsZV9zaXplOworICBlbnRyeS0+ZmlsZV9tdGltZSA9IGZpbGVfbXRpbWU7CisgIGxvYWRlci0+cGVuZGluZ19wbHVnaW5zX3RhaWwgPQorICAgICAgZ19saXN0X2FwcGVuZCAobG9hZGVyLT5wZW5kaW5nX3BsdWdpbnNfdGFpbCwgZW50cnkpOworCisgIGlmIChsb2FkZXItPnBlbmRpbmdfcGx1Z2lucyA9PSBOVUxMKQorICAgIGxvYWRlci0+cGVuZGluZ19wbHVnaW5zID0gbG9hZGVyLT5wZW5kaW5nX3BsdWdpbnNfdGFpbDsKKyAgZWxzZQorICAgIGxvYWRlci0+cGVuZGluZ19wbHVnaW5zX3RhaWwgPSBnX2xpc3RfbmV4dCAobG9hZGVyLT5wZW5kaW5nX3BsdWdpbnNfdGFpbCk7CisKKyAgbGVuID0gc3RybGVuIChmaWxlbmFtZSk7CisgIHB1dF9wYWNrZXQgKGxvYWRlciwgUEFDS0VUX0xPQURfUExVR0lOLCBlbnRyeS0+dGFnLAorICAgICAgKGd1aW50OCAqKSBmaWxlbmFtZSwgbGVuICsgMSk7CisKKyAgaWYgKCFleGNoYW5nZV9wYWNrZXRzIChsb2FkZXIpKSB7CisgICAgaWYgKCFwbHVnaW5fbG9hZGVyX3JlcGxheV9wZW5kaW5nIChsb2FkZXIpKQorICAgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorcGx1Z2luX2xvYWRlcl9yZXBsYXlfcGVuZGluZyAoR3N0UGx1Z2luTG9hZGVyICogbCkKK3sKKyAgR0xpc3QgKmN1ciwgKm5leHQ7CisKK3Jlc3RhcnQ6CisgIGlmICghZ3N0X3BsdWdpbl9sb2FkZXJfc3Bhd24gKGwpKQorICAgIHJldHVybiBGQUxTRTsKKworICAvKiBMb2FkIGVhY2ggcGx1Z2luIG9uZSBieSBvbmUgc3luY2hyb25vdXNseSB1bnRpbCB3ZSBmaW5kIHRoZQorICAgKiBjcmFzaGluZyBvbmUgKi8KKyAgd2hpbGUgKChjdXIgPSBsLT5wZW5kaW5nX3BsdWdpbnMpKSB7CisgICAgUGVuZGluZ1BsdWdpbkVudHJ5ICplbnRyeSA9IChQZW5kaW5nUGx1Z2luRW50cnkgKikgKGN1ci0+ZGF0YSk7CisKKyAgICBpZiAoIXBsdWdpbl9sb2FkZXJfbG9hZF9hbmRfc3luYyAobCwgZW50cnkpKSB7CisgICAgICAvKiBDcmVhdGUgZHVtbXkgcGx1Z2luIGVudHJ5IHRvIGJsb2NrIHJlLXNjYW5uaW5nIHRoaXMgZmlsZSAqLworICAgICAgR1NUX0VSUk9SICgiUGx1Z2luIGZpbGUgJXMgZmFpbGVkIHRvIGxvYWQuIEJsYWNrbGlzdGluZyIsCisgICAgICAgICAgZW50cnktPmZpbGVuYW1lKTsKKyAgICAgIHBsdWdpbl9sb2FkZXJfY3JlYXRlX2JsYWNrbGlzdF9wbHVnaW4gKGwsIGVudHJ5KTsKKyAgICAgIGwtPmdvdF9wbHVnaW5fZGV0YWlscyA9IFRSVUU7CisgICAgICAvKiBOb3cgcmVtb3ZlIHRoaXMgY3Jhc2h5IHBsdWdpbiBmcm9tIHRoZSBoZWFkIG9mIHRoZSBsaXN0ICovCisgICAgICBsLT5wZW5kaW5nX3BsdWdpbnMgPSBnX2xpc3RfZGVsZXRlX2xpbmsgKGN1ciwgY3VyKTsKKyAgICAgIGdfZnJlZSAoZW50cnktPmZpbGVuYW1lKTsKKyAgICAgIGdfc2xpY2VfZnJlZSAoUGVuZGluZ1BsdWdpbkVudHJ5LCBlbnRyeSk7CisgICAgICBpZiAobC0+cGVuZGluZ19wbHVnaW5zID09IE5VTEwpCisgICAgICAgIGwtPnBlbmRpbmdfcGx1Z2luc190YWlsID0gTlVMTDsKKyAgICAgIGlmICghZ3N0X3BsdWdpbl9sb2FkZXJfc3Bhd24gKGwpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICAvKiBXZSBleGl0ZWQgYWZ0ZXIgZmluZGluZyB0aGUgY3Jhc2hpbmcgb25lLiBJZiB0aGVyZSdzIGFueSBtb3JlIHBlbmRpbmcsCisgICAqIGRpc3BhdGNoIHRoZW0gcG9zdC1oYXN0ZSwgYnV0IGRvbid0IHdhaXQgKi8KKyAgZm9yIChjdXIgPSBsLT5wZW5kaW5nX3BsdWdpbnM7IGN1ciAhPSBOVUxMOyBjdXIgPSBuZXh0KSB7CisgICAgUGVuZGluZ1BsdWdpbkVudHJ5ICplbnRyeSA9IChQZW5kaW5nUGx1Z2luRW50cnkgKikgKGN1ci0+ZGF0YSk7CisKKyAgICBuZXh0ID0gZ19saXN0X25leHQgKGN1cik7CisKKyAgICBwdXRfcGFja2V0IChsLCBQQUNLRVRfTE9BRF9QTFVHSU4sIGVudHJ5LT50YWcsCisgICAgICAgIChndWludDggKikgZW50cnktPmZpbGVuYW1lLCBzdHJsZW4gKGVudHJ5LT5maWxlbmFtZSkgKyAxKTsKKworICAgIC8qIFRoaXMgbWlnaHQgaW52YWxpZGF0ZSBjdXIsIHdoaWNoIGlzIHdoeSB3ZSBncmFiYmVkICduZXh0JyBhYm92ZSAqLworICAgIGlmICghZXhjaGFuZ2VfcGFja2V0cyAobCkpCisgICAgICBnb3RvIHJlc3RhcnQ7CisgIH0KKworICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuCitwbHVnaW5fbG9hZGVyX3N5bmNfd2l0aF9jaGlsZCAoR3N0UGx1Z2luTG9hZGVyICogbCkKK3sKKyAgcHV0X3BhY2tldCAobCwgUEFDS0VUX1NZTkMsIDAsIE5VTEwsIDApOworCisgIGwtPnJ4X2dvdF9zeW5jID0gRkFMU0U7CisgIHdoaWxlICghbC0+cnhfZ290X3N5bmMpIHsKKyAgICBpZiAoIWV4Y2hhbmdlX3BhY2tldHMgKGwpKQorICAgICAgcmV0dXJuIEZBTFNFOworICB9CisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3BsdWdpbl9sb2FkZXJfbG9hZF9hbmRfc3luYyAoR3N0UGx1Z2luTG9hZGVyICogbCwgUGVuZGluZ1BsdWdpbkVudHJ5ICogZW50cnkpCit7CisgIGdpbnQgbGVuOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKGwtPnJlZ2lzdHJ5LCAiU3luY2hyb25vdXNseSBsb2FkaW5nIHBsdWdpbiBmaWxlICVzIiwKKyAgICAgIGVudHJ5LT5maWxlbmFtZSk7CisKKyAgbGVuID0gc3RybGVuIChlbnRyeS0+ZmlsZW5hbWUpOworICBwdXRfcGFja2V0IChsLCBQQUNLRVRfTE9BRF9QTFVHSU4sIGVudHJ5LT50YWcsCisgICAgICAoZ3VpbnQ4ICopIGVudHJ5LT5maWxlbmFtZSwgbGVuICsgMSk7CisKKyAgcmV0dXJuIHBsdWdpbl9sb2FkZXJfc3luY193aXRoX2NoaWxkIChsKTsKK30KKworc3RhdGljIHZvaWQKK3BsdWdpbl9sb2FkZXJfY3JlYXRlX2JsYWNrbGlzdF9wbHVnaW4gKEdzdFBsdWdpbkxvYWRlciAqIGwsCisgICAgUGVuZGluZ1BsdWdpbkVudHJ5ICogZW50cnkpCit7CisgIEdzdFBsdWdpbiAqcGx1Z2luID0gZ19vYmplY3RfbmV3diAoR1NUX1RZUEVfUExVR0lOLCAwLCBOVUxMKTsKKworICBwbHVnaW4tPmZpbGVuYW1lID0gZ19zdHJkdXAgKGVudHJ5LT5maWxlbmFtZSk7CisgIHBsdWdpbi0+ZmlsZV9tdGltZSA9IGVudHJ5LT5maWxlX210aW1lOworICBwbHVnaW4tPmZpbGVfc2l6ZSA9IGVudHJ5LT5maWxlX3NpemU7CisgIHBsdWdpbi0+ZmxhZ3MgfD0gR1NUX1BMVUdJTl9GTEFHX0JMQUNLTElTVEVEOworCisgIHBsdWdpbi0+YmFzZW5hbWUgPSBnX3BhdGhfZ2V0X2Jhc2VuYW1lIChwbHVnaW4tPmZpbGVuYW1lKTsKKyAgcGx1Z2luLT5kZXNjLm5hbWUgPSBnX2ludGVybl9zdHJpbmcgKHBsdWdpbi0+YmFzZW5hbWUpOworICBwbHVnaW4tPmRlc2MuZGVzY3JpcHRpb24gPSAiUGx1Z2luIGZvciBibGFja2xpc3RlZCBmaWxlIjsKKyAgcGx1Z2luLT5kZXNjLnZlcnNpb24gPSAiMC4wLjAiOworICBwbHVnaW4tPmRlc2MubGljZW5zZSA9ICJCTEFDS0xJU1QiOworICBwbHVnaW4tPmRlc2Muc291cmNlID0gcGx1Z2luLT5kZXNjLmxpY2Vuc2U7CisgIHBsdWdpbi0+ZGVzYy5wYWNrYWdlID0gcGx1Z2luLT5kZXNjLmxpY2Vuc2U7CisgIHBsdWdpbi0+ZGVzYy5vcmlnaW4gPSBwbHVnaW4tPmRlc2MubGljZW5zZTsKKworICBHU1RfREVCVUcgKCJBZGRpbmcgYmxhY2tsaXN0IHBsdWdpbiAnJXMnIiwgcGx1Z2luLT5kZXNjLm5hbWUpOworICBnc3RfcmVnaXN0cnlfYWRkX3BsdWdpbiAobC0+cmVnaXN0cnksIHBsdWdpbik7Cit9CisKKyNpZmRlZiBfX0FQUExFX18KKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pCisjZGVmaW5lIFVTUl9CSU5fQVJDSF9TV0lUQ0ggIi14ODZfNjQiCisjZWxpZiBkZWZpbmVkKF9faTM4Nl9fKQorI2RlZmluZSBVU1JfQklOX0FSQ0hfU1dJVENIICItaTM4NiIKKyNlbGlmIGRlZmluZWQoX19wcGNfXykKKyNkZWZpbmUgVVNSX0JJTl9BUkNIX1NXSVRDSCAiLXBwYyIKKyNlbGlmIGRlZmluZWQoX19wcGM2NF9fKQorI2RlZmluZSBVU1JfQklOX0FSQ0hfU1dJVENIICItcHBjNjQiCisjZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIFlFU19NVUxUSUFSQ0ggMQorI2RlZmluZSBOT19NVUxUSUFSQ0ggIDIKKworI2lmIGRlZmluZWQgKF9fQVBQTEVfXykgJiYgZGVmaW5lZCAoVVNSX0JJTl9BUkNIX1NXSVRDSCkKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3BsdWdpbl9sb2FkZXJfdXNlX3Vzcl9iaW5fYXJjaCAodm9pZCkKK3sKKyAgc3RhdGljIHZvbGF0aWxlIGdzaXplIG11bHRpYXJjaCA9IDA7CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmbXVsdGlhcmNoKSkgeworICAgIGdzaXplIHJlcyA9IE5PX01VTFRJQVJDSDsKKworI2lmZGVmIEhBVkVfU1lTX1VUU05BTUVfSAorICAgIHsKKyAgICAgIHN0cnVjdCB1dHNuYW1lIHVuYW1lX2RhdGE7CisKKyAgICAgIGlmICh1bmFtZSAoJnVuYW1lX2RhdGEpID09IDApIHsKKyAgICAgICAgLyogQ2hlY2sgZm9yIE9TIFggPj0gMTAuNSAoZGFyd2luIGtlcm5lbCA5LjApICovCisgICAgICAgIEdTVF9MT0cgKCIlcyAlcyIsIHVuYW1lX2RhdGEuc3lzbmFtZSwgdW5hbWVfZGF0YS5yZWxlYXNlKTsKKyAgICAgICAgaWYgKGdfYXNjaWlfc3RyY2FzZWNtcCAodW5hbWVfZGF0YS5zeXNuYW1lLCAiRGFyd2luIikgPT0gMCAmJgorICAgICAgICAgICAgZ19zdHJ0b2QgKHVuYW1lX2RhdGEucmVsZWFzZSwgTlVMTCkgPj0gOS4wKSB7CisgICAgICAgICAgcmVzID0gWUVTX01VTFRJQVJDSDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgR1NUX0lORk8gKCJtdWx0aWFyY2g6ICVzIiwgKHJlcyA9PSBZRVNfTVVMVElBUkNIKSA/ICJ5ZXMiIDogIm5vIik7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZtdWx0aWFyY2gsIHJlcyk7CisgIH0KKyAgcmV0dXJuIChtdWx0aWFyY2ggPT0gWUVTX01VTFRJQVJDSCk7Cit9CisjZW5kaWYgLyogX19BUFBMRV9fICYmIFVTUl9CSU5fQVJDSF9TV0lUQ0ggKi8KKworc3RhdGljIGdib29sZWFuCitnc3RfcGx1Z2luX2xvYWRlcl90cnlfaGVscGVyIChHc3RQbHVnaW5Mb2FkZXIgKiBsb2FkZXIsIGdjaGFyICogbG9jYXRpb24pCit7CisgIGNoYXIgKmFyZ3ZbNV0gPSB7IE5VTEwsIH07CisgIGludCBjID0gMDsKKworI2lmIGRlZmluZWQgKF9fQVBQTEVfXykgJiYgZGVmaW5lZCAoVVNSX0JJTl9BUkNIX1NXSVRDSCkKKyAgaWYgKGdzdF9wbHVnaW5fbG9hZGVyX3VzZV91c3JfYmluX2FyY2ggKCkpIHsKKyAgICBhcmd2W2MrK10gPSAoY2hhciAqKSAiL3Vzci9iaW4vYXJjaCI7CisgICAgYXJndltjKytdID0gKGNoYXIgKikgVVNSX0JJTl9BUkNIX1NXSVRDSDsKKyAgfQorI2VuZGlmCisgIGFyZ3ZbYysrXSA9IGxvY2F0aW9uOworICBhcmd2W2MrK10gPSAoY2hhciAqKSAiLWwiOworICBhcmd2W2MrK10gPSBOVUxMOworCisgIGlmIChjID4gMykgeworICAgIEdTVF9MT0cgKCJUcnlpbmcgdG8gc3Bhd24gZ3N0LXBsdWdpbi1zY2FubmVyIGhlbHBlciBhdCAlcyB3aXRoIGFyY2ggJXMiLAorICAgICAgICBsb2NhdGlvbiwgYXJndlsxXSk7CisgIH0gZWxzZSB7CisgICAgR1NUX0xPRyAoIlRyeWluZyB0byBzcGF3biBnc3QtcGx1Z2luLXNjYW5uZXIgaGVscGVyIGF0ICVzIiwgbG9jYXRpb24pOworICB9CisKKyAgaWYgKCFnX3NwYXduX2FzeW5jX3dpdGhfcGlwZXMgKE5VTEwsIGFyZ3YsIE5VTEwsCisgICAgICAgICAgR19TUEFXTl9ET19OT1RfUkVBUF9DSElMRCAvKiB8IEdfU1BBV05fU1RERVJSX1RPX0RFVl9OVUxMICovICwKKyAgICAgICAgICBOVUxMLCBOVUxMLCAmbG9hZGVyLT5jaGlsZF9waWQsICZsb2FkZXItPmZkX3cuZmQsICZsb2FkZXItPmZkX3IuZmQsCisgICAgICAgICAgTlVMTCwgTlVMTCkpCisgICAgcmV0dXJuIEZBTFNFOworCisgIGdzdF9wb2xsX2FkZF9mZCAobG9hZGVyLT5mZHNldCwgJmxvYWRlci0+ZmRfdyk7CisgIGdzdF9wb2xsX2FkZF9mZCAobG9hZGVyLT5mZHNldCwgJmxvYWRlci0+ZmRfcik7CisKKyAgZ3N0X3BvbGxfZmRfY3RsX3JlYWQgKGxvYWRlci0+ZmRzZXQsICZsb2FkZXItPmZkX3IsIFRSVUUpOworCisgIGxvYWRlci0+dHhfYnVmX3dyaXRlID0gbG9hZGVyLT50eF9idWZfcmVhZCA9IDA7CisKKyAgcHV0X3BhY2tldCAobG9hZGVyLCBQQUNLRVRfVkVSU0lPTiwgMCwgTlVMTCwgMCk7CisgIGlmICghcGx1Z2luX2xvYWRlcl9zeW5jX3dpdGhfY2hpbGQgKGxvYWRlcikpCisgICAgcmV0dXJuIEZBTFNFOworCisgIGxvYWRlci0+Y2hpbGRfcnVubmluZyA9IFRSVUU7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3BsdWdpbl9sb2FkZXJfc3Bhd24gKEdzdFBsdWdpbkxvYWRlciAqIGxvYWRlcikKK3sKKyAgY29uc3QgZ2NoYXIgKmVudjsKKyAgY2hhciAqaGVscGVyX2JpbjsKKyAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7CisKKyAgaWYgKGxvYWRlci0+Y2hpbGRfcnVubmluZykKKyAgICByZXR1cm4gVFJVRTsKKworICAvKiBGaW5kIHRoZSBnc3QtcGx1Z2luLXNjYW5uZXI6IGZpcnN0IHRyeSB0aGUgZW52LXZhciBpZiBpdCBpcyBzZXQsCisgICAqIG90aGVyd2lzZSB1c2UgdGhlIGluc3RhbGxlZCB2ZXJzaW9uICovCisgIGVudiA9IGdfZ2V0ZW52ICgiR1NUX1BMVUdJTl9TQ0FOTkVSIik7CisKKyAgaWYgKGVudiAhPSBOVUxMICYmICplbnYgIT0gJ1wwJykgeworICAgIEdTVF9MT0cgKCJUcnlpbmcgR1NUX1BMVUdJTl9TQ0FOTkVSIGVudiB2YXI6ICVzIiwgZW52KTsKKyAgICBoZWxwZXJfYmluID0gZ19zdHJkdXAgKGVudik7CisgICAgcmVzID0gZ3N0X3BsdWdpbl9sb2FkZXJfdHJ5X2hlbHBlciAobG9hZGVyLCBoZWxwZXJfYmluKTsKKyAgICBnX2ZyZWUgKGhlbHBlcl9iaW4pOworICB9CisKKyAgaWYgKCFyZXMpIHsKKyAgICBHU1RfTE9HICgiVHJ5aW5nIGluc3RhbGxlZCBwbHVnaW4gc2Nhbm5lciIpOworICAgIGhlbHBlcl9iaW4gPSBnX3N0cmR1cCAoR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCk7CisgICAgcmVzID0gZ3N0X3BsdWdpbl9sb2FkZXJfdHJ5X2hlbHBlciAobG9hZGVyLCBoZWxwZXJfYmluKTsKKyAgICBnX2ZyZWUgKGhlbHBlcl9iaW4pOworCisgICAgaWYgKCFyZXMpIHsKKyAgICAgIEdTVF9JTkZPICgiTm8gZ3N0LXBsdWdpbi1zY2FubmVyIGF2YWlsYWJsZSwgb3Igbm90IHdvcmtpbmciKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gbG9hZGVyLT5jaGlsZF9ydW5uaW5nOworfQorCitzdGF0aWMgdm9pZAorcGx1Z2luX2xvYWRlcl9jbGVhbnVwX2NoaWxkIChHc3RQbHVnaW5Mb2FkZXIgKiBsKQoreworICBpZiAoIWwtPmNoaWxkX3J1bm5pbmcgfHwgbC0+aXNfY2hpbGQpCisgICAgcmV0dXJuOworCisgIGdzdF9wb2xsX3JlbW92ZV9mZCAobC0+ZmRzZXQsICZsLT5mZF93KTsKKyAgZ3N0X3BvbGxfcmVtb3ZlX2ZkIChsLT5mZHNldCwgJmwtPmZkX3IpOworCisgIGNsb3NlIChsLT5mZF93LmZkKTsKKyAgY2xvc2UgKGwtPmZkX3IuZmQpOworCisjaWZuZGVmIEdfT1NfV0lOMzIKKyAgR1NUX0xPRyAoIndhaXRpbmcgZm9yIGNoaWxkIHByb2Nlc3MgdG8gZXhpdCIpOworICB3YWl0cGlkIChsLT5jaGlsZF9waWQsIE5VTEwsIDApOworI2Vsc2UKKyAgZ193YXJuaW5nICgiRklYTUU6IEltcGxlbWVudCBjaGlsZCBwcm9jZXNzIHNodXRkb3duIGZvciBXaW4zMiIpOworI2VuZGlmCisgIGdfc3Bhd25fY2xvc2VfcGlkIChsLT5jaGlsZF9waWQpOworCisgIGwtPmNoaWxkX3J1bm5pbmcgPSBGQUxTRTsKK30KKworZ2Jvb2xlYW4KK19nc3RfcGx1Z2luX2xvYWRlcl9jbGllbnRfcnVuICh2b2lkKQoreworICBHc3RQbHVnaW5Mb2FkZXIgKmw7CisKKyAgbCA9IHBsdWdpbl9sb2FkZXJfbmV3IChOVUxMKTsKKyAgaWYgKGwgPT0gTlVMTCkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgLyogT24gZW50cnksIHRoZSBpbndhcmQgcGlwZSBpcyBTVERJTiwgYW5kIG91dHdhcmQgaXMgU1RET1VULgorICAgKiBEdXAgdGhvc2Ugc29tZXdoZXJlIGJldHRlciBzbyB0aGF0IHBsdWdpbnMgcHJpbnRpbmcgdGhpbmdzCisgICAqIHdvbid0IGludGVyZmVyZSB3aXRoIGFueXRoaW5nICovCisjaWZuZGVmIEdfT1NfV0lOMzIKKyAgeworICAgIGludCBkdXBfZmQ7CisKKyAgICBkdXBfZmQgPSBkdXAgKDApOyAgICAgICAgICAgLyogU1RESU4gKi8KKyAgICBpZiAoZHVwX2ZkID09IC0xKSB7CisgICAgICBHU1RfRVJST1IgKCJGYWlsZWQgdG8gc3RhcnQuIENvdWxkIG5vIGR1cCBTVERJTiwgZXJybm8gJWQiLCBlcnJubyk7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGwtPmZkX3IuZmQgPSBkdXBfZmQ7CisgICAgY2xvc2UgKDApOworCisgICAgZHVwX2ZkID0gZHVwICgxKTsgICAgICAgICAgIC8qIFNURE9VVCAqLworICAgIGlmIChkdXBfZmQgPT0gLTEpIHsKKyAgICAgIEdTVF9FUlJPUiAoIkZhaWxlZCB0byBzdGFydC4gQ291bGQgbm8gZHVwIFNURE9VVCwgZXJybm8gJWQiLCBlcnJubyk7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGwtPmZkX3cuZmQgPSBkdXBfZmQ7CisgICAgY2xvc2UgKDEpOworCisgICAgLyogRHVwIHN0ZGVyciBkb3duIHRvIHN0ZG91dCBzbyB0aGluZ3MgdGhhdCBwbHVnaW5zIHByaW50IGFyZSB2aXNpYmxlLAorICAgICAqIGJ1dCBkb24ndCBjYXJlIGlmIGl0IGZhaWxzICovCisgICAgZHVwMiAoMiwgMSk7CisgIH0KKyNlbHNlCisgIC8qIEZJWE1FOiBVc2UgRHVwbGljYXRlSGFuZGxlIGFuZCBmcmllbmRzIG9uIHdpbjMyICovCisgIGwtPmZkX3cuZmQgPSAxOyAgICAgICAgICAgICAgIC8qIFNURE9VVCAqLworICBsLT5mZF9yLmZkID0gMDsgICAgICAgICAgICAgICAvKiBTVERJTiAqLworI2VuZGlmCisKKyAgZ3N0X3BvbGxfYWRkX2ZkIChsLT5mZHNldCwgJmwtPmZkX3cpOworICBnc3RfcG9sbF9hZGRfZmQgKGwtPmZkc2V0LCAmbC0+ZmRfcik7CisgIGdzdF9wb2xsX2ZkX2N0bF9yZWFkIChsLT5mZHNldCwgJmwtPmZkX3IsIFRSVUUpOworCisgIGwtPmlzX2NoaWxkID0gVFJVRTsKKworICBHU1RfREVCVUcgKCJQbHVnaW4gc2Nhbm5lciBjaGlsZCBydW5uaW5nLiBXYWl0aW5nIGZvciBpbnN0cnVjdGlvbnMiKTsKKworICAvKiBMb29wLCBsaXN0ZW5pbmcgZm9yIGluY29taW5nIHBhY2tldHMgb24gdGhlIGZkIGFuZCB3cml0aW5nIHJlc3BvbnNlcyAqLworICB3aGlsZSAoIWwtPnJ4X2RvbmUgJiYgZXhjaGFuZ2VfcGFja2V0cyAobCkpOworCisgIHBsdWdpbl9sb2FkZXJfZnJlZSAobCk7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkCitwdXRfcGFja2V0IChHc3RQbHVnaW5Mb2FkZXIgKiBsLCBndWludCB0eXBlLCBndWludDMyIHRhZywKKyAgICBjb25zdCBndWludDggKiBwYXlsb2FkLCBndWludDMyIHBheWxvYWRfbGVuKQoreworICBndWludDggKm91dDsKKyAgZ3VpbnQgbGVuID0gcGF5bG9hZF9sZW4gKyBIRUFERVJfU0laRTsKKworICBpZiAobC0+dHhfYnVmX3dyaXRlICsgbGVuID49IGwtPnR4X2J1Zl9zaXplKSB7CisgICAgR1NUX0xPRyAoIkV4cGFuZGluZyB0eCBidWYgZnJvbSAlZCB0byAlZCBmb3IgcGFja2V0IG9mIHNpemUgJWQiLAorICAgICAgICBsLT50eF9idWZfc2l6ZSwgbC0+dHhfYnVmX3dyaXRlICsgbGVuICsgQlVGX0dST1dfRVhUUkEsIGxlbik7CisgICAgbC0+dHhfYnVmX3NpemUgPSBsLT50eF9idWZfd3JpdGUgKyBsZW4gKyBCVUZfR1JPV19FWFRSQTsKKyAgICBsLT50eF9idWYgPSBnX3JlYWxsb2MgKGwtPnR4X2J1ZiwgbC0+dHhfYnVmX3NpemUpOworICB9CisKKyAgb3V0ID0gbC0+dHhfYnVmICsgbC0+dHhfYnVmX3dyaXRlOworCisgIC8qIG9uZSBieXRlIHBhY2tldCB0eXBlICovCisgIG91dFswXSA9IHR5cGU7CisgIC8qIDMgYnl0ZSBwYWNrZXQgdGFnIG51bWJlciAqLworICBHU1RfV1JJVEVfVUlOVDI0X0JFIChvdXQgKyAxLCB0YWcpOworICAvKiA0IGJ5dGVzIHBhY2tldCBsZW5ndGggKi8KKyAgR1NUX1dSSVRFX1VJTlQzMl9CRSAob3V0ICsgNCwgcGF5bG9hZF9sZW4pOworICAvKiBwYXlsb2FkICovCisgIG1lbWNweSAob3V0ICsgSEVBREVSX1NJWkUsIHBheWxvYWQsIHBheWxvYWRfbGVuKTsKKyAgLyogV3JpdGUgbWFnaWMgaW50byB0aGUgaGVhZGVyICovCisgIEdTVF9XUklURV9VSU5UMzJfQkUgKG91dCArIDgsIEhFQURFUl9NQUdJQyk7CisKKyAgbC0+dHhfYnVmX3dyaXRlICs9IGxlbjsKKyAgZ3N0X3BvbGxfZmRfY3RsX3dyaXRlIChsLT5mZHNldCwgJmwtPmZkX3csIFRSVUUpOworfQorCitzdGF0aWMgdm9pZAorcHV0X2NodW5rIChHc3RQbHVnaW5Mb2FkZXIgKiBsLCBHc3RSZWdpc3RyeUNodW5rICogY2h1bmssIGd1aW50ICogcG9zKQoreworICBndWludCBwYWRzaXplID0gMDsKKyAgZ3VpbnQgbGVuOworICBndWludDggKm91dDsKKworICAvKiBNaWdodCBuZWVkIHRvIGFsaWduIHRoZSBjaHVuayAqLworICBpZiAoY2h1bmstPmFsaWduICYmICgoKnBvcykgJSBBTElHTk1FTlQpICE9IDApCisgICAgcGFkc2l6ZSA9IEFMSUdOTUVOVCAtICgoKnBvcykgJSBBTElHTk1FTlQpOworCisgIGxlbiA9IHBhZHNpemUgKyBjaHVuay0+c2l6ZTsKKworICBpZiAoR19VTkxJS0VMWSAobC0+dHhfYnVmX3dyaXRlICsgbGVuID49IGwtPnR4X2J1Zl9zaXplKSkgeworICAgIGd1aW50IG5ld19zaXplID0gTUFYIChsLT50eF9idWZfd3JpdGUgKyBsZW4sCisgICAgICAgIGwtPnR4X2J1Zl9zaXplICsgbC0+dHhfYnVmX3NpemUgLyA0KSArIEJVRl9HUk9XX0VYVFJBOworICAgIEdTVF9MT0cgKCJFeHBhbmRpbmcgdHggYnVmIGZyb20gJWQgdG8gJWQgZm9yIGNodW5rIG9mIHNpemUgJWQiLAorICAgICAgICBsLT50eF9idWZfc2l6ZSwgbmV3X3NpemUsIGNodW5rLT5zaXplKTsKKyAgICBsLT50eF9idWZfc2l6ZSA9IG5ld19zaXplOworICAgIGwtPnR4X2J1ZiA9IGdfcmVhbGxvYyAobC0+dHhfYnVmLCBsLT50eF9idWZfc2l6ZSk7CisgIH0KKworICBvdXQgPSBsLT50eF9idWYgKyBsLT50eF9idWZfd3JpdGU7CisgIC8qIENsZWFyIHRoZSBwYWRkaW5nICovCisgIGlmIChwYWRzaXplKQorICAgIG1lbXNldCAob3V0LCAwLCBwYWRzaXplKTsKKyAgbWVtY3B5IChvdXQgKyBwYWRzaXplLCBjaHVuay0+ZGF0YSwgY2h1bmstPnNpemUpOworCisgIGwtPnR4X2J1Zl93cml0ZSArPSBsZW47CisgICpwb3MgKz0gbGVuOworCisgIGdzdF9wb2xsX2ZkX2N0bF93cml0ZSAobC0+ZmRzZXQsICZsLT5mZF93LCBUUlVFKTsKK307CisKK3N0YXRpYyBnYm9vbGVhbgord3JpdGVfb25lIChHc3RQbHVnaW5Mb2FkZXIgKiBsKQoreworICBndWludDggKm91dDsKKyAgZ3VpbnQzMiB0b193cml0ZSwgbWFnaWM7CisgIGludCByZXM7CisKKyAgaWYgKGwtPnR4X2J1Zl9yZWFkICsgSEVBREVSX1NJWkUgPiBsLT50eF9idWZfd3JpdGUpCisgICAgcmV0dXJuIEZBTFNFOworCisgIG91dCA9IGwtPnR4X2J1ZiArIGwtPnR4X2J1Zl9yZWFkOworCisgIG1hZ2ljID0gR1NUX1JFQURfVUlOVDMyX0JFIChvdXQgKyA4KTsKKyAgaWYgKG1hZ2ljICE9IEhFQURFUl9NQUdJQykgeworICAgIEdTVF9FUlJPUiAoIlBhY2tldCBtYWdpYyBudW1iZXIgaXMgbWlzc2luZy4gTWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0ZWQiKTsKKyAgICBnb3RvIGZhaWxfYW5kX2NsZWFudXA7CisgIH0KKworICB0b193cml0ZSA9IEdTVF9SRUFEX1VJTlQzMl9CRSAob3V0ICsgNCkgKyBIRUFERVJfU0laRTsKKyAgLyogQ2hlY2sgdGhhdCB0aGUgbWFnaWMgaXMgaW50YWN0LCBhbmQgdGhlIHNpemUgaXMgc2Vuc2libGUgKi8KKyAgaWYgKHRvX3dyaXRlID4gbC0+dHhfYnVmX3NpemUpIHsKKyAgICBHU1RfRVJST1IgKCJJbmRpY2F0ZWQgcGFja2V0IHNpemUgaXMgdG9vIGxhcmdlLiBDb3JydXB0aW9uIGRldGVjdGVkIik7CisgICAgZ290byBmYWlsX2FuZF9jbGVhbnVwOworICB9CisKKyAgbC0+dHhfYnVmX3JlYWQgKz0gdG9fd3JpdGU7CisKKyAgR1NUX0xPRyAoIldyaXRpbmcgcGFja2V0IG9mIHNpemUgJWQgYnl0ZXMgdG8gZmQgJWQiLCB0b193cml0ZSwgbC0+ZmRfdy5mZCk7CisKKyAgZG8geworICAgIHJlcyA9IHdyaXRlIChsLT5mZF93LmZkLCBvdXQsIHRvX3dyaXRlKTsKKyAgICBpZiAoR19VTkxJS0VMWSAocmVzIDwgMCkpIHsKKyAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRUlOVFIpCisgICAgICAgIGNvbnRpbnVlOworICAgICAgLyogRmFpbGVkIHRvIHdyaXRlIC0+IGNoaWxkIGRpZWQgKi8KKyAgICAgIGdvdG8gZmFpbF9hbmRfY2xlYW51cDsKKyAgICB9CisgICAgdG9fd3JpdGUgLT0gcmVzOworICAgIG91dCArPSByZXM7CisgIH0gd2hpbGUgKHRvX3dyaXRlID4gMCk7CisKKyAgaWYgKGwtPnR4X2J1Zl9yZWFkID09IGwtPnR4X2J1Zl93cml0ZSkgeworICAgIGdzdF9wb2xsX2ZkX2N0bF93cml0ZSAobC0+ZmRzZXQsICZsLT5mZF93LCBGQUxTRSk7CisgICAgbC0+dHhfYnVmX3JlYWQgPSBsLT50eF9idWZfd3JpdGUgPSAwOworICB9CisKKyAgcmV0dXJuIFRSVUU7CisKK2ZhaWxfYW5kX2NsZWFudXA6CisgIHBsdWdpbl9sb2FkZXJfY2xlYW51cF9jaGlsZCAobCk7CisgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFuCitkb19wbHVnaW5fbG9hZCAoR3N0UGx1Z2luTG9hZGVyICogbCwgY29uc3QgZ2NoYXIgKiBmaWxlbmFtZSwgZ3VpbnQgdGFnKQoreworICBHc3RQbHVnaW4gKm5ld3BsdWdpbjsKKyAgR0xpc3QgKmNodW5rcyA9IE5VTEw7CisKKyAgR1NUX0RFQlVHICgiUGx1Z2luIHNjYW5uZXIgbG9hZGluZyBmaWxlICVzLiB0YWcgJXUiLCBmaWxlbmFtZSwgdGFnKTsKKworI2lmIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXN0IGNvZGUgLSBjcmFzaCBiYXNlZCBvbiBmaWxlbmFtZSAqLworICBpZiAoc3Ryc3RyIChmaWxlbmFtZSwgImNvcmVlbGVtZW50cyIpID09IE5VTEwpIHsKKyAgICBnX3ByaW50ZXJyICgiQ3Jhc2hpbmcgb24gZmlsZSAlc1xuIiwgZmlsZW5hbWUpOworICAgIGdfcHJpbnRlcnIgKCIlZCIsICooZ2ludCAqKSAoTlVMTCkpOworICB9CisjZW5kaWYKKworICBuZXdwbHVnaW4gPSBnc3RfcGx1Z2luX2xvYWRfZmlsZSAoKGdjaGFyICopIGZpbGVuYW1lLCBOVUxMKTsKKyAgaWYgKG5ld3BsdWdpbikgeworICAgIGd1aW50IGhkcl9wb3M7CisgICAgZ3VpbnQgb2Zmc2V0OworCisgICAgLyogTm93IHNlcmlhbGlzZSB0aGUgcGx1Z2luIGRldGFpbHMgYW5kIHNlbmQgKi8KKyAgICBpZiAoIV9wcml2X2dzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9wbHVnaW4gKCZjaHVua3MsCisgICAgICAgICAgICBnc3RfcmVnaXN0cnlfZ2V0X2RlZmF1bHQgKCksIG5ld3BsdWdpbikpCisgICAgICBnb3RvIGZhaWw7CisKKyAgICAvKiBTdG9yZSB3aGVyZSB0aGUgaGVhZGVyIGlzLCB3cml0ZSBhbiBlbXB0eSBvbmUsIHRoZW4gd3JpdGUKKyAgICAgKiBhbGwgdGhlIHBheWxvYWQgY2h1bmtzLCB0aGVuIGZpeCB1cCB0aGUgaGVhZGVyIHNpemUgKi8KKyAgICBoZHJfcG9zID0gbC0+dHhfYnVmX3dyaXRlOworICAgIG9mZnNldCA9IEhFQURFUl9TSVpFOworICAgIHB1dF9wYWNrZXQgKGwsIFBBQ0tFVF9QTFVHSU5fREVUQUlMUywgdGFnLCBOVUxMLCAwKTsKKworICAgIGlmIChjaHVua3MpIHsKKyAgICAgIEdMaXN0ICp3YWxrOworICAgICAgZm9yICh3YWxrID0gY2h1bmtzOyB3YWxrOyB3YWxrID0gZ19saXN0X25leHQgKHdhbGspKSB7CisgICAgICAgIEdzdFJlZ2lzdHJ5Q2h1bmsgKmN1ciA9IHdhbGstPmRhdGE7CisgICAgICAgIHB1dF9jaHVuayAobCwgY3VyLCAmb2Zmc2V0KTsKKworICAgICAgICBfcHJpdl9nc3RfcmVnaXN0cnlfY2h1bmtfZnJlZSAoY3VyKTsKKyAgICAgIH0KKworICAgICAgZ19saXN0X2ZyZWUgKGNodW5rcyk7CisKKyAgICAgIC8qIFN0b3JlIHRoZSBzaXplIG9mIHRoZSB3cml0dGVuIHBheWxvYWQgKi8KKyAgICAgIEdTVF9XUklURV9VSU5UMzJfQkUgKGwtPnR4X2J1ZiArIGhkcl9wb3MgKyA0LCBvZmZzZXQgLSBIRUFERVJfU0laRSk7CisgICAgfQorI2lmIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXN0IGNvZGUgLSBjb3JydXB0IHRoZSB0eCBidWZmZXIgYmFzZWQgb24gZmlsZW5hbWUgKi8KKyAgICBpZiAoc3Ryc3RyIChmaWxlbmFtZSwgInNpbmsiKSAhPSBOVUxMKSB7CisgICAgICBpbnQgZmQsIHJlczsKKyAgICAgIGdfcHJpbnRlcnIgKCJDb3JydXB0aW5nIHR4IGJ1ZiBvbiBmaWxlICVzXG4iLCBmaWxlbmFtZSk7CisgICAgICBmZCA9IG9wZW4gKCIvZGV2L3VyYW5kb20iLCBPX1JET05MWSk7CisgICAgICByZXMgPSByZWFkIChmZCwgbC0+dHhfYnVmLCBsLT50eF9idWZfc2l6ZSk7CisgICAgICBjbG9zZSAoZmQpOworICAgIH0KKyNlbmRpZgorCisgICAgZ3N0X29iamVjdF91bnJlZiAobmV3cGx1Z2luKTsKKyAgfSBlbHNlIHsKKyAgICBwdXRfcGFja2V0IChsLCBQQUNLRVRfUExVR0lOX0RFVEFJTFMsIHRhZywgTlVMTCwgMCk7CisgIH0KKworICByZXR1cm4gVFJVRTsKK2ZhaWw6CisgIHB1dF9wYWNrZXQgKGwsIFBBQ0tFVF9QTFVHSU5fREVUQUlMUywgdGFnLCBOVUxMLCAwKTsKKyAgaWYgKGNodW5rcykgeworICAgIEdMaXN0ICp3YWxrOworICAgIGZvciAod2FsayA9IGNodW5rczsgd2Fsazsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgeworICAgICAgR3N0UmVnaXN0cnlDaHVuayAqY3VyID0gd2Fsay0+ZGF0YTsKKworICAgICAgX3ByaXZfZ3N0X3JlZ2lzdHJ5X2NodW5rX2ZyZWUgKGN1cik7CisgICAgfQorCisgICAgZ19saXN0X2ZyZWUgKGNodW5rcyk7CisgIH0KKworICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorY2hlY2tfcHJvdG9jb2xfdmVyc2lvbiAoR3N0UGx1Z2luTG9hZGVyICogbCwgZ3VpbnQ4ICogcGF5bG9hZCwKKyAgICBndWludCBwYXlsb2FkX2xlbikKK3sKKyAgZ3VpbnQzMiBnb3RfdmVyc2lvbjsKKyAgZ3VpbnQ4ICpiaW5hcnlfcmVnX3ZlcjsKKworICBpZiAocGF5bG9hZF9sZW4gPCBzaXplb2YgKGd1aW50MzIpICsgR1NUX01BR0lDX0JJTkFSWV9WRVJTSU9OX0xFTikKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgZ290X3ZlcnNpb24gPSBHU1RfUkVBRF9VSU5UMzJfQkUgKHBheWxvYWQpOworICBHU1RfTE9HICgiR290IFZFUlNJT04gJXUgZnJvbSBjaGlsZC4gT3VycyBpcyAldSIsIGdvdF92ZXJzaW9uLAorICAgICAgbG9hZGVyX3Byb3RvY29sX3ZlcnNpb24pOworICBpZiAoZ290X3ZlcnNpb24gIT0gbG9hZGVyX3Byb3RvY29sX3ZlcnNpb24pCisgICAgcmV0dXJuIEZBTFNFOworCisgIGJpbmFyeV9yZWdfdmVyID0gcGF5bG9hZCArIHNpemVvZiAoZ3VpbnQzMik7CisgIGlmIChzdHJjbXAgKChnY2hhciAqKSBiaW5hcnlfcmVnX3ZlciwgR1NUX01BR0lDX0JJTkFSWV9WRVJTSU9OX1NUUikpIHsKKyAgICBHU1RfTE9HICgiQmluYXJ5IGNodW5rIGZvcm1hdCBvZiBjaGlsZCBpcyBkaWZmZXJlbnQuIE91cnM6ICVzLCBjaGlsZCAlc1xuIiwKKyAgICAgICAgR1NUX01BR0lDX0JJTkFSWV9WRVJTSU9OX1NUUiwgYmluYXJ5X3JlZ192ZXIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorCisgIHJldHVybiBUUlVFOworfTsKKworc3RhdGljIGdib29sZWFuCitoYW5kbGVfcnhfcGFja2V0IChHc3RQbHVnaW5Mb2FkZXIgKiBsLAorICAgIGd1aW50IHBhY2tfdHlwZSwgZ3VpbnQzMiB0YWcsIGd1aW50OCAqIHBheWxvYWQsIGd1aW50IHBheWxvYWRfbGVuKQoreworICBnYm9vbGVhbiByZXMgPSBUUlVFOworCisgIHN3aXRjaCAocGFja190eXBlKSB7CisgICAgY2FzZSBQQUNLRVRfRVhJVDoKKyAgICAgIGdzdF9wb2xsX2ZkX2N0bF9yZWFkIChsLT5mZHNldCwgJmwtPmZkX3IsIEZBTFNFKTsKKyAgICAgIGlmIChsLT5pc19jaGlsZCkgeworICAgICAgICAvKiBSZXNwb25kICovCisgICAgICAgIHB1dF9wYWNrZXQgKGwsIFBBQ0tFVF9FWElULCAwLCBOVUxMLCAwKTsKKyAgICAgIH0KKyAgICAgIGwtPnJ4X2RvbmUgPSBUUlVFOworICAgICAgcmV0dXJuIFRSVUU7CisgICAgY2FzZSBQQUNLRVRfTE9BRF9QTFVHSU46eworICAgICAgaWYgKCFsLT5pc19jaGlsZCkKKyAgICAgICAgcmV0dXJuIFRSVUU7CisKKyAgICAgIC8qIFBheWxvYWQgaXMgdGhlIGZpbGVuYW1lIHRvIGxvYWQgKi8KKyAgICAgIHJlcyA9IGRvX3BsdWdpbl9sb2FkIChsLCAoZ2NoYXIgKikgcGF5bG9hZCwgdGFnKTsKKworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUEFDS0VUX1BMVUdJTl9ERVRBSUxTOnsKKyAgICAgIGdjaGFyICp0bXAgPSAoZ2NoYXIgKikgcGF5bG9hZDsKKyAgICAgIFBlbmRpbmdQbHVnaW5FbnRyeSAqZW50cnkgPSBOVUxMOworICAgICAgR0xpc3QgKmN1cjsKKworICAgICAgR1NUX0RFQlVHX09CSkVDVCAobC0+cmVnaXN0cnksCisgICAgICAgICAgIlJlY2VpdmVkIHBsdWdpbiBkZXRhaWxzIGZyb20gY2hpbGQgdy8gdGFnICV1LiAlZCBieXRlcyBpbmZvIiwKKyAgICAgICAgICB0YWcsIHBheWxvYWRfbGVuKTsKKworICAgICAgLyogQXNzdW1lIHRoYXQgdGFnZ2VkIGRldGFpbHMgY29tZSBiYWNrIGluIHRoZSBvcmRlcgorICAgICAgICogd2UgcmVxdWVzdGVkLCBhbmQgZGVsZXRlIGFueXRoaW5nIGJlZm9yZSAoYnV0IG5vdAorICAgICAgICogaW5jbHVkaW5nKSB0aGlzIG9uZSAqLworICAgICAgY3VyID0gbC0+cGVuZGluZ19wbHVnaW5zOworICAgICAgd2hpbGUgKGN1cikgeworICAgICAgICBQZW5kaW5nUGx1Z2luRW50cnkgKmUgPSAoUGVuZGluZ1BsdWdpbkVudHJ5ICopIChjdXItPmRhdGEpOworCisgICAgICAgIGlmIChlLT50YWcgPiB0YWcpCisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGUtPnRhZyA9PSB0YWcpIHsKKyAgICAgICAgICBlbnRyeSA9IGU7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgY3VyID0gZ19saXN0X2RlbGV0ZV9saW5rIChjdXIsIGN1cik7CisgICAgICAgICAgZ19mcmVlIChlLT5maWxlbmFtZSk7CisgICAgICAgICAgZ19zbGljZV9mcmVlIChQZW5kaW5nUGx1Z2luRW50cnksIGUpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGwtPnBlbmRpbmdfcGx1Z2lucyA9IGN1cjsKKyAgICAgIGlmIChjdXIgPT0gTlVMTCkKKyAgICAgICAgbC0+cGVuZGluZ19wbHVnaW5zX3RhaWwgPSBOVUxMOworCisgICAgICBpZiAocGF5bG9hZF9sZW4gPiAwKSB7CisgICAgICAgIEdzdFBsdWdpbiAqbmV3cGx1Z2luID0gTlVMTDsKKyAgICAgICAgaWYgKCFfcHJpdl9nc3RfcmVnaXN0cnlfY2h1bmtzX2xvYWRfcGx1Z2luIChsLT5yZWdpc3RyeSwgJnRtcCwKKyAgICAgICAgICAgICAgICB0bXAgKyBwYXlsb2FkX2xlbiwgJm5ld3BsdWdpbikpIHsKKyAgICAgICAgICAvKiBHb3QgZ2FyYmFnZSBmcm9tIHRoZSBjaGlsZCwgc28gZmFpbCBhbmQgdHJpZ2dlciByZXBsYXkgb2YgcGx1Z2lucyAqLworICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGwtPnJlZ2lzdHJ5LAorICAgICAgICAgICAgICAiUHJvYmxlbXMgbG9hZGluZyBwbHVnaW4gZGV0YWlscyB3aXRoIHRhZyAldSBmcm9tIHNjYW5uZXIiLCB0YWcpOworICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIG5ld3BsdWdpbi0+ZmxhZ3MgJj0gfkdTVF9QTFVHSU5fRkxBR19DQUNIRUQ7CisgICAgICAgIEdTVF9MT0dfT0JKRUNUIChsLT5yZWdpc3RyeSwKKyAgICAgICAgICAgICJtYXJraW5nIHBsdWdpbiAlcCBhcyByZWdpc3RlcmVkIGFzICVzIiwgbmV3cGx1Z2luLAorICAgICAgICAgICAgbmV3cGx1Z2luLT5maWxlbmFtZSk7CisgICAgICAgIG5ld3BsdWdpbi0+cmVnaXN0ZXJlZCA9IFRSVUU7CisKKyAgICAgICAgLyogV2UgZ290IGEgc2V0IG9mIHBsdWdpbiBkZXRhaWxzIC0gcmVtZW1iZXIgaXQgZm9yIGxhdGVyICovCisgICAgICAgIGwtPmdvdF9wbHVnaW5fZGV0YWlscyA9IFRSVUU7CisgICAgICB9IGVsc2UgaWYgKGVudHJ5ICE9IE5VTEwpIHsKKyAgICAgICAgLyogQ3JlYXRlIGEgYmxhY2tsaXN0IGVudHJ5IGZvciB0aGlzIGZpbGUgdG8gcHJldmVudCBzY2FubmluZyBldmVyeSB0aW1lICovCisgICAgICAgIHBsdWdpbl9sb2FkZXJfY3JlYXRlX2JsYWNrbGlzdF9wbHVnaW4gKGwsIGVudHJ5KTsKKyAgICAgICAgbC0+Z290X3BsdWdpbl9kZXRhaWxzID0gVFJVRTsKKyAgICAgIH0KKworICAgICAgaWYgKGVudHJ5ICE9IE5VTEwpIHsKKyAgICAgICAgZ19mcmVlIChlbnRyeS0+ZmlsZW5hbWUpOworICAgICAgICBnX3NsaWNlX2ZyZWUgKFBlbmRpbmdQbHVnaW5FbnRyeSwgZW50cnkpOworICAgICAgfQorCisgICAgICAvKiBSZW1vdmUgdGhlIHBsdWdpbiBlbnRyeSB3ZSBqdXN0IGxvYWRlZCAqLworICAgICAgY3VyID0gbC0+cGVuZGluZ19wbHVnaW5zOworICAgICAgaWYgKGN1ciAhPSBOVUxMKQorICAgICAgICBjdXIgPSBnX2xpc3RfZGVsZXRlX2xpbmsgKGN1ciwgY3VyKTsKKyAgICAgIGwtPnBlbmRpbmdfcGx1Z2lucyA9IGN1cjsKKyAgICAgIGlmIChjdXIgPT0gTlVMTCkKKyAgICAgICAgbC0+cGVuZGluZ19wbHVnaW5zX3RhaWwgPSBOVUxMOworCisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQQUNLRVRfU1lOQzoKKyAgICAgIGlmIChsLT5pc19jaGlsZCkgeworICAgICAgICAvKiBSZXNwb25kIHdpdGggb3VyIHJlcGx5IC0gYWxzbyBhIHN5bmMgKi8KKyAgICAgICAgcHV0X3BhY2tldCAobCwgUEFDS0VUX1NZTkMsIHRhZywgTlVMTCwgMCk7CisgICAgICAgIEdTVF9MT0cgKCJHb3QgU1lOQyBpbiBjaGlsZCAtIHJlcGx5aW5nIik7CisgICAgICB9IGVsc2UKKyAgICAgICAgbC0+cnhfZ290X3N5bmMgPSBUUlVFOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQQUNLRVRfVkVSU0lPTjoKKyAgICAgIGlmIChsLT5pc19jaGlsZCkgeworICAgICAgICAvKiBSZXNwb25kIHdpdGggb3VyIHJlcGx5IC0gYSB2ZXJzaW9uIHBhY2tldCwgd2l0aCB0aGUgdmVyc2lvbiAqLworICAgICAgICBjb25zdCBnaW50IHZlcnNpb25fbGVuID0KKyAgICAgICAgICAgIHNpemVvZiAoZ3VpbnQzMikgKyBHU1RfTUFHSUNfQklOQVJZX1ZFUlNJT05fTEVOOworICAgICAgICBndWludDggdmVyc2lvbl9pbmZvW3NpemVvZiAoZ3VpbnQzMikgKyBHU1RfTUFHSUNfQklOQVJZX1ZFUlNJT05fTEVOXTsKKyAgICAgICAgbWVtc2V0ICh2ZXJzaW9uX2luZm8sIDAsIHZlcnNpb25fbGVuKTsKKyAgICAgICAgR1NUX1dSSVRFX1VJTlQzMl9CRSAodmVyc2lvbl9pbmZvLCBsb2FkZXJfcHJvdG9jb2xfdmVyc2lvbik7CisgICAgICAgIG1lbWNweSAodmVyc2lvbl9pbmZvICsgc2l6ZW9mIChndWludDMyKSwgR1NUX01BR0lDX0JJTkFSWV9WRVJTSU9OX1NUUiwKKyAgICAgICAgICAgIHN0cmxlbiAoR1NUX01BR0lDX0JJTkFSWV9WRVJTSU9OX1NUUikpOworICAgICAgICBwdXRfcGFja2V0IChsLCBQQUNLRVRfVkVSU0lPTiwgdGFnLCB2ZXJzaW9uX2luZm8sIHZlcnNpb25fbGVuKTsKKyAgICAgICAgR1NUX0xPRyAoIkdvdCBWRVJTSU9OIGluIGNoaWxkIC0gcmVwbHlpbmcgJXUiLCBsb2FkZXJfcHJvdG9jb2xfdmVyc2lvbik7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXMgPSBjaGVja19wcm90b2NvbF92ZXJzaW9uIChsLCBwYXlsb2FkLCBwYXlsb2FkX2xlbik7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIEZBTFNFOyAgICAgICAgICAgICAvKiBJbnZhbGlkIHBhY2tldCAtPiBzb21ldGhpbmcgaXMgd3JvbmcgKi8KKyAgfQorCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorcmVhZF9vbmUgKEdzdFBsdWdpbkxvYWRlciAqIGwpCit7CisgIGd1aW50NjQgbWFnaWM7CisgIGd1aW50MzIgdG9fcmVhZCwgcGFja2V0X2xlbiwgdGFnOworICBndWludDggKmluOworICBnaW50IHJlczsKKworICB0b19yZWFkID0gSEVBREVSX1NJWkU7CisgIGluID0gbC0+cnhfYnVmOworICBkbyB7CisgICAgcmVzID0gcmVhZCAobC0+ZmRfci5mZCwgaW4sIHRvX3JlYWQpOworICAgIGlmIChHX1VOTElLRUxZIChyZXMgPCAwKSkgeworICAgICAgaWYgKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFSU5UUikKKyAgICAgICAgY29udGludWU7CisgICAgICBHU1RfTE9HICgiRmFpbGVkIHJlYWRpbmcgcGFja2V0IGhlYWRlciIpOworICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICB0b19yZWFkIC09IHJlczsKKyAgICBpbiArPSByZXM7CisgIH0gd2hpbGUgKHRvX3JlYWQgPiAwKTsKKworICBtYWdpYyA9IEdTVF9SRUFEX1VJTlQzMl9CRSAobC0+cnhfYnVmICsgOCk7CisgIGlmIChtYWdpYyAhPSBIRUFERVJfTUFHSUMpIHsKKyAgICBHU1RfV0FSTklORworICAgICAgICAoIkludmFsaWQgcGFja2V0IChiYWQgbWFnaWMgbnVtYmVyKSByZWNlaXZlZCBmcm9tIHBsdWdpbiBzY2FubmVyIHN1YnByb2Nlc3MiKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKworICBwYWNrZXRfbGVuID0gR1NUX1JFQURfVUlOVDMyX0JFIChsLT5yeF9idWYgKyA0KTsKKyAgaWYgKHBhY2tldF9sZW4gKyBIRUFERVJfU0laRSA+IEJVRl9NQVhfU0laRSkgeworICAgIEdTVF9XQVJOSU5HCisgICAgICAgICgiUmVjZWl2ZWQgZXhjZXNzaXZlbHkgbGFyZ2UgcGFja2V0IGZvciBwbHVnaW4gc2Nhbm5lciBzdWJwcm9jZXNzIik7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisgIHRhZyA9IEdTVF9SRUFEX1VJTlQyNF9CRSAobC0+cnhfYnVmICsgMSk7CisKKyAgaWYgKHBhY2tldF9sZW4gPiAwKSB7CisgICAgaWYgKHBhY2tldF9sZW4gKyBIRUFERVJfU0laRSA+PSBsLT5yeF9idWZfc2l6ZSkgeworICAgICAgR1NUX0xPRyAoIkV4cGFuZGluZyByeCBidWYgZnJvbSAlZCB0byAlZCIsCisgICAgICAgICAgbC0+cnhfYnVmX3NpemUsIHBhY2tldF9sZW4gKyBIRUFERVJfU0laRSArIEJVRl9HUk9XX0VYVFJBKTsKKyAgICAgIGwtPnJ4X2J1Zl9zaXplID0gcGFja2V0X2xlbiArIEhFQURFUl9TSVpFICsgQlVGX0dST1dfRVhUUkE7CisgICAgICBsLT5yeF9idWYgPSBnX3JlYWxsb2MgKGwtPnJ4X2J1ZiwgbC0+cnhfYnVmX3NpemUpOworICAgIH0KKworICAgIGluID0gbC0+cnhfYnVmICsgSEVBREVSX1NJWkU7CisgICAgdG9fcmVhZCA9IHBhY2tldF9sZW47CisgICAgZG8geworICAgICAgcmVzID0gcmVhZCAobC0+ZmRfci5mZCwgaW4sIHRvX3JlYWQpOworICAgICAgaWYgKEdfVU5MSUtFTFkgKHJlcyA8IDApKSB7CisgICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRUlOVFIpCisgICAgICAgICAgY29udGludWU7CisgICAgICAgIEdTVF9FUlJPUiAoIlBhY2tldCBwYXlsb2FkIHJlYWQgZmFpbGVkIik7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgIH0KKyAgICAgIHRvX3JlYWQgLT0gcmVzOworICAgICAgaW4gKz0gcmVzOworICAgIH0gd2hpbGUgKHRvX3JlYWQgPiAwKTsKKyAgfSBlbHNlIHsKKyAgICBHU1RfTE9HICgiTm8gcGF5bG9hZCB0byByZWFkIGZvciAwIGxlbmd0aCBwYWNrZXQgdHlwZSAlZCB0YWcgJXUiLAorICAgICAgICBsLT5yeF9idWZbMF0sIHRhZyk7CisgIH0KKworICByZXR1cm4gaGFuZGxlX3J4X3BhY2tldCAobCwgbC0+cnhfYnVmWzBdLCB0YWcsCisgICAgICBsLT5yeF9idWYgKyBIRUFERVJfU0laRSwgcGFja2V0X2xlbik7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZXhjaGFuZ2VfcGFja2V0cyAoR3N0UGx1Z2luTG9hZGVyICogbCkKK3sKKyAgZ2ludCByZXM7CisKKyAgLyogV2FpdCBmb3IgYWN0aXZpdHkgb24gb3VyIEZEcyAqLworICBkbyB7CisgICAgZG8geworICAgICAgcmVzID0gZ3N0X3BvbGxfd2FpdCAobC0+ZmRzZXQsIEdTVF9TRUNPTkQpOworICAgIH0gd2hpbGUgKHJlcyA9PSAtMSAmJiAoZXJybm8gPT0gRUlOVFIgfHwgZXJybm8gPT0gRUFHQUlOKSk7CisKKyAgICBpZiAocmVzIDwgMCkKKyAgICAgIHJldHVybiBGQUxTRTsKKworICAgIEdTVF9MT0cgKCJQb2xsIHJlcyA9ICVkLiAlZCBieXRlcyBwZW5kaW5nIGZvciB3cml0ZSIsIHJlcywKKyAgICAgICAgbC0+dHhfYnVmX3dyaXRlIC0gbC0+dHhfYnVmX3JlYWQpOworCisgICAgaWYgKCFsLT5yeF9kb25lKSB7CisgICAgICBpZiAoZ3N0X3BvbGxfZmRfaGFzX2Vycm9yIChsLT5mZHNldCwgJmwtPmZkX3IpIHx8CisgICAgICAgICAgZ3N0X3BvbGxfZmRfaGFzX2Nsb3NlZCAobC0+ZmRzZXQsICZsLT5mZF9yKSkgeworICAgICAgICBHU1RfTE9HICgicmVhZCBmZCAlZCBjbG9zZWQvZXJyb3JlZCIsIGwtPmZkX3IuZmQpOworICAgICAgICBnb3RvIGZhaWxfYW5kX2NsZWFudXA7CisgICAgICB9CisKKyAgICAgIGlmIChnc3RfcG9sbF9mZF9jYW5fcmVhZCAobC0+ZmRzZXQsICZsLT5mZF9yKSkgeworICAgICAgICBpZiAoIXJlYWRfb25lIChsKSkKKyAgICAgICAgICBnb3RvIGZhaWxfYW5kX2NsZWFudXA7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGwtPnR4X2J1Zl9yZWFkIDwgbC0+dHhfYnVmX3dyaXRlKSB7CisgICAgICBpZiAoZ3N0X3BvbGxfZmRfaGFzX2Vycm9yIChsLT5mZHNldCwgJmwtPmZkX3cpIHx8CisgICAgICAgICAgZ3N0X3BvbGxfZmRfaGFzX2Nsb3NlZCAobC0+ZmRzZXQsICZsLT5mZF9yKSkgeworICAgICAgICBHU1RfRVJST1IgKCJ3cml0ZSBmZCAlZCBjbG9zZWQvZXJyb3JlZCIsIGwtPmZkX3cuZmQpOworICAgICAgICBnb3RvIGZhaWxfYW5kX2NsZWFudXA7CisgICAgICB9CisgICAgICBpZiAoZ3N0X3BvbGxfZmRfY2FuX3dyaXRlIChsLT5mZHNldCwgJmwtPmZkX3cpKSB7CisgICAgICAgIGlmICghd3JpdGVfb25lIChsKSkKKyAgICAgICAgICBnb3RvIGZhaWxfYW5kX2NsZWFudXA7CisgICAgICB9CisgICAgfQorICB9IHdoaWxlIChsLT50eF9idWZfcmVhZCA8IGwtPnR4X2J1Zl93cml0ZSk7CisKKyAgcmV0dXJuIFRSVUU7CitmYWlsX2FuZF9jbGVhbnVwOgorICBwbHVnaW5fbG9hZGVyX2NsZWFudXBfY2hpbGQgKGwpOworICByZXR1cm4gRkFMU0U7Cit9CmRpZmYgLS1naXQgYS9nc3QvZ3N0cGx1Z2lubG9hZGVyLmggYi9nc3QvZ3N0cGx1Z2lubG9hZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJkYmFiZAotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RwbHVnaW5sb2FkZXIuaApAQCAtMCwwICsxLDM5IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBKYW4gU2NobWlkdCA8amFuLnNjaG1pZHRAc3VuLmNvbT4KKyAqCisgKiBnc3RwbHVnaW5sb2FkZXIuaDogSGVscGVyIGZvciBvdXQtb2YtcHJvY2VzcyBwbHVnaW4gbG9hZGluZy4gUHJpdmF0ZSBoZWFkZXIuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKyNpZm5kZWYgX19HU1RfUExVR0lOTE9BREVSX0hfXworI2RlZmluZSBfX0dTVF9QTFVHSU5MT0FERVJfSF9fCisKK0dfQkVHSU5fREVDTFMKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdFBsdWdpbkxvYWRlciBHc3RQbHVnaW5Mb2FkZXI7CisKK3R5cGVkZWYgc3RydWN0IF9Hc3RQbHVnaW5Mb2FkZXJGdW5jcyB7CisgIEdzdFBsdWdpbkxvYWRlciAqICgqY3JlYXRlKShHc3RSZWdpc3RyeSAqcmVnaXN0cnkpOworICBnYm9vbGVhbiAoKmRlc3Ryb3kpKEdzdFBsdWdpbkxvYWRlciAqbG9hZGVyKTsKKyAgZ2Jvb2xlYW4gKCpsb2FkKShHc3RQbHVnaW5Mb2FkZXIgKmxvYWRlciwgY29uc3QgZ2NoYXIgKmZpbGVuYW1lLAorICAgICAgb2ZmX3QgZmlsZV9zaXplLCB0aW1lX3QgZmlsZV9tdGltZSk7Cit9IEdzdFBsdWdpbkxvYWRlckZ1bmNzOworCitleHRlcm4gY29uc3QgR3N0UGx1Z2luTG9hZGVyRnVuY3MgX3ByaXZfZ3N0X3BsdWdpbl9sb2FkZXJfZnVuY3M7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9QTFVHSU5MT0FERVJfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0cG9sbC5jIGIvZ3N0L2dzdHBvbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2M4NDk3Ci0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdHBvbGwuYwpAQCAtMCwwICsxLDE1OTIgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBQZXRlciBLamVsbGVyc3RlZHQgPHBrakBheGlzLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBPbGUgQW5kcukgVmFkbGEgUmF2buVzIDxvbGUuYW5kcmUucmF2bmFzQHRhbmRiZXJnLmNvbT4KKyAqCisgKiBnc3Rwb2xsLmM6IEZpbGUgZGVzY3JpcHRvciBzZXQKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworLyoqCisgKiBTRUNUSU9OOmdzdHBvbGwKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogS2VlcCB0cmFjayBvZiBmaWxlIGRlc2NyaXB0b3JzIGFuZCBtYWtlIGl0IHBvc3NpYmxlCisgKiAgICAgICAgICAgICAgICAgICAgIHRvIHdhaXQgb24gdGhlbSBpbiBhIGNhbmNlbGFibGUgd2F5CisgKgorICogQSAjR3N0UG9sbCBrZWVwcyB0cmFjayBvZiBmaWxlIGRlc2NyaXB0b3JzIG11Y2ggbGlrZSBmZF9zZXQgKHVzZWQgd2l0aAorICogc2VsZWN0KCkpIG9yIGEgc3RydWN0IHBvbGxmZCBhcnJheSAodXNlZCB3aXRoIHBvbGwoKSkuIE9uY2UgY3JlYXRlZCB3aXRoCisgKiBnc3RfcG9sbF9uZXcoKSwgdGhlIHNldCBjYW4gYmUgdXNlZCB0byB3YWl0IGZvciBmaWxlIGRlc2NyaXB0b3JzIHRvIGJlCisgKiByZWFkYWJsZSBhbmQvb3Igd3JpdGVhYmxlLiBJdCBpcyBwb3NzaWJsZSB0byBtYWtlIHRoaXMgd2FpdCBiZSBjb250cm9sbGVkCisgKiBieSBzcGVjaWZ5aW5nICVUUlVFIGZvciB0aGUgQGNvbnRyb2xsYWJsZSBmbGFnIHdoZW4gY3JlYXRpbmcgdGhlIHNldCAob3IKKyAqIGxhdGVyIGNhbGxpbmcgZ3N0X3BvbGxfc2V0X2NvbnRyb2xsYWJsZSgpKS4KKyAqCisgKiBOZXcgZmlsZSBkZXNjcmlwdG9ycyBhcmUgYWRkZWQgdG8gdGhlIHNldCB1c2luZyBnc3RfcG9sbF9hZGRfZmQoKSwgYW5kCisgKiByZW1vdmVkIHVzaW5nIGdzdF9wb2xsX3JlbW92ZV9mZCgpLiBDb250cm9sbGluZyB3aGljaCBmaWxlIGRlc2NyaXB0b3JzCisgKiBzaG91bGQgYmUgd2FpdGVkIGZvciB0byBiZWNvbWUgcmVhZGFibGUgYW5kL29yIHdyaXRlYWJsZSBhcmUgZG9uZSB1c2luZworICogZ3N0X3BvbGxfZmRfY3RsX3JlYWQoKSBhbmQgZ3N0X3BvbGxfZmRfY3RsX3dyaXRlKCkuCisgKgorICogVXNlIGdzdF9wb2xsX3dhaXQoKSB0byB3YWl0IGZvciB0aGUgZmlsZSBkZXNjcmlwdG9ycyB0byBhY3R1YWxseSBiZWNvbWUKKyAqIHJlYWRhYmxlIGFuZC9vciB3cml0ZWFibGUsIG9yIHRvIHRpbWVvdXQgaWYgbm8gZmlsZSBkZXNjcmlwdG9yIGlzIGF2YWlsYWJsZQorICogaW4gdGltZS4gVGhlIHdhaXQgY2FuIGJlIGNvbnRyb2xsZWQgYnkgY2FsbGluZyBnc3RfcG9sbF9yZXN0YXJ0KCkgYW5kCisgKiBnc3RfcG9sbF9zZXRfZmx1c2hpbmcoKS4KKyAqCisgKiBPbmNlIHRoZSBmaWxlIGRlc2NyaXB0b3Igc2V0IGhhcyBiZWVuIHdhaXRlZCBmb3IsIG9uZSBjYW4gdXNlCisgKiBnc3RfcG9sbF9mZF9oYXNfY2xvc2VkKCkgdG8gc2VlIGlmIHRoZSBmaWxlIGRlc2NyaXB0b3IgaGFzIGJlZW4gY2xvc2VkLAorICogZ3N0X3BvbGxfZmRfaGFzX2Vycm9yKCkgdG8gc2VlIGlmIGl0IGhhcyBnZW5lcmF0ZWQgYW4gZXJyb3IsCisgKiBnc3RfcG9sbF9mZF9jYW5fcmVhZCgpIHRvIHNlZSBpZiBpdCBpcyBwb3NzaWJsZSB0byByZWFkIGZyb20gdGhlIGZpbGUKKyAqIGRlc2NyaXB0b3IsIGFuZCBnc3RfcG9sbF9mZF9jYW5fd3JpdGUoKSB0byBzZWUgaWYgaXQgaXMgcG9zc2libGUgdG8KKyAqIHdyaXRlIHRvIGl0LgorICoKKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImdsaWItY29tcGF0LXByaXZhdGUuaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlIDxnbGliLmg+CisKKyNpZmRlZiBHX09TX1dJTjMyCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNkZWZpbmUgRUlOUFJPR1JFU1MgV1NBRUlOUFJPR1JFU1MKKyNlbHNlCisjZGVmaW5lIF9HTlVfU09VUkNFIDEKKyNpbmNsdWRlIDxzeXMvcG9sbC5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisKKy8qIE9TL1ggbmVlZHMgdGhpcyBiZWNhdXNlIG9mIGJhZCBoZWFkZXJzICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qIFRoZSBwb2xsKCkgZW11bGF0aW9uIG9uIE9TL1ggZG9lc24ndCBoYW5kbGUgZmRzPU5VTEwsIG5mZHM9MCwKKyAqIHNvIHdlIHByZWZlciBvdXIgb3duIHBvbGwgZW11bGF0aW9uLgorICovCisjaWYgZGVmaW5lZChCUk9LRU5fUE9MTCkKKyN1bmRlZiBIQVZFX1BPTEwKKyNlbmRpZgorCisjaW5jbHVkZSAiZ3N0cG9sbC5oIgorCisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBHU1RfQ0FUX1BPTEwKKworI2lmZGVmIEdfT1NfV0lOMzIKK3R5cGVkZWYgc3RydWN0IF9XaW5zb2NrRmQgV2luc29ja0ZkOworCitzdHJ1Y3QgX1dpbnNvY2tGZAoreworICBnaW50IGZkOworICBnbG9uZyBldmVudF9tYXNrOworICBXU0FORVRXT1JLRVZFTlRTIGV2ZW50czsKKyAgZ2xvbmcgaWdub3JlZF9ldmVudF9tYXNrOworfTsKKyNlbmRpZgorCit0eXBlZGVmIGVudW0KK3sKKyAgR1NUX1BPTExfTU9ERV9BVVRPLAorICBHU1RfUE9MTF9NT0RFX1NFTEVDVCwKKyAgR1NUX1BPTExfTU9ERV9QU0VMRUNULAorICBHU1RfUE9MTF9NT0RFX1BPTEwsCisgIEdTVF9QT0xMX01PREVfUFBPTEwsCisgIEdTVF9QT0xMX01PREVfV0lORE9XUworfSBHc3RQb2xsTW9kZTsKKworc3RydWN0IF9Hc3RQb2xsCit7CisgIEdzdFBvbGxNb2RlIG1vZGU7CisKKyAgR011dGV4ICpsb2NrOworICAvKiBhcnJheSBvZiBmZHMsIGFsd2F5cyB3cml0dGVuIHRvIGFuZCByZWFkIGZyb20gd2l0aCBsb2NrICovCisgIEdBcnJheSAqZmRzOworICAvKiBhcnJheSBvZiBhY3RpdmUgZmRzLCBvbmx5IHdyaXR0ZW4gdG8gZnJvbSB0aGUgd2FpdGluZyB0aHJlYWQgd2l0aCB0aGUKKyAgICogbG9jayBhbmQgcmVhZCBmcm9tIHdpdGggdGhlIGxvY2sgb3Igd2l0aG91dCB0aGUgbG9jayBmcm9tIHRoZSB3YWl0aW5nCisgICAqIHRocmVhZCAqLworICBHQXJyYXkgKmFjdGl2ZV9mZHM7CisKKyNpZm5kZWYgR19PU19XSU4zMgorICBnY2hhciBidWZbMV07CisgIEdzdFBvbGxGRCBjb250cm9sX3JlYWRfZmQ7CisgIEdzdFBvbGxGRCBjb250cm9sX3dyaXRlX2ZkOworI2Vsc2UKKyAgR0FycmF5ICphY3RpdmVfZmRzX2lnbm9yZWQ7CisgIEdBcnJheSAqZXZlbnRzOworICBHQXJyYXkgKmFjdGl2ZV9ldmVudHM7CisKKyAgSEFORExFIHdha2V1cF9ldmVudDsKKyNlbmRpZgorCisgIGdib29sZWFuIGNvbnRyb2xsYWJsZTsKKyAgdm9sYXRpbGUgZ2ludCB3YWl0aW5nOworICB2b2xhdGlsZSBnaW50IGNvbnRyb2xfcGVuZGluZzsKKyAgdm9sYXRpbGUgZ2ludCBmbHVzaGluZzsKKyAgZ2Jvb2xlYW4gdGltZXI7CisgIHZvbGF0aWxlIGdpbnQgcmVidWlsZDsKK307CisKK3N0YXRpYyBnYm9vbGVhbiBnc3RfcG9sbF9mZF9jdGxfcmVhZF91bmxvY2tlZCAoR3N0UG9sbCAqIHNldCwgR3N0UG9sbEZEICogZmQsCisgICAgZ2Jvb2xlYW4gYWN0aXZlKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfcG9sbF9hZGRfZmRfdW5sb2NrZWQgKEdzdFBvbGwgKiBzZXQsIEdzdFBvbGxGRCAqIGZkKTsKKworI2RlZmluZSBJU19GTFVTSElORyhzKSAgICAgIChnX2F0b21pY19pbnRfZ2V0KCYocyktPmZsdXNoaW5nKSkKKyNkZWZpbmUgU0VUX0ZMVVNISU5HKHMsdmFsKSAoZ19hdG9taWNfaW50X3NldCgmKHMpLT5mbHVzaGluZywgKHZhbCkpKQorCisjZGVmaW5lIElOQ19XQUlUSU5HKHMpICAgICAgKEdfQVRPTUlDX0lOVF9BREQoJihzKS0+d2FpdGluZywgMSkpCisjZGVmaW5lIERFQ19XQUlUSU5HKHMpICAgICAgKEdfQVRPTUlDX0lOVF9BREQoJihzKS0+d2FpdGluZywgLTEpKQorI2RlZmluZSBHRVRfV0FJVElORyhzKSAgICAgIChnX2F0b21pY19pbnRfZ2V0KCYocyktPndhaXRpbmcpKQorCisjZGVmaW5lIFRFU1RfUkVCVUlMRChzKSAgICAgKGdfYXRvbWljX2ludF9jb21wYXJlX2FuZF9leGNoYW5nZSgmKHMpLT5yZWJ1aWxkLCAxLCAwKSkKKyNkZWZpbmUgTUFSS19SRUJVSUxEKHMpICAgICAoZ19hdG9taWNfaW50X3NldCgmKHMpLT5yZWJ1aWxkLCAxKSkKKworI2lmbmRlZiBHX09TX1dJTjMyCisjZGVmaW5lIFdBS0VfRVZFTlQocykgICAgICAgKHdyaXRlICgocyktPmNvbnRyb2xfd3JpdGVfZmQuZmQsICJXIiwgMSkgPT0gMSkKKyNkZWZpbmUgUkVMRUFTRV9FVkVOVChzKSAgICAocmVhZCAoKHMpLT5jb250cm9sX3JlYWRfZmQuZmQsIChzKS0+YnVmLCAxKSA9PSAxKQorI2Vsc2UKKyNkZWZpbmUgV0FLRV9FVkVOVChzKSAgICAgICAoU2V0RXZlbnQgKChzKS0+d2FrZXVwX2V2ZW50KSwgZXJybm8gPSBHZXRMYXN0RXJyb3IgKCkgPT0gTk9fRVJST1IgPyAwIDogRUFDQ0VTLCBlcnJubyA9PSAwID8gMSA6IDApCisjZGVmaW5lIFJFTEVBU0VfRVZFTlQocykgICAgKFJlc2V0RXZlbnQgKChzKS0+d2FrZXVwX2V2ZW50KSkKKyNlbmRpZgorCisvKiB0aGUgcG9sbC9zZWxlY3QgY2FsbCBpcyBhbHNvIHBlcmZvcm1lZCBvbiBhIGNvbnRyb2wgc29ja2V0LCB0aGF0IHdheQorICogd2UgY2FuIHNlbmQgc3BlY2lhbCBjb21tYW5kcyB0byBjb250cm9sIGl0ICovCitzdGF0aWMgaW5saW5lIGdib29sZWFuCityYWlzZV93YWtldXAgKEdzdFBvbGwgKiBzZXQpCit7CisgIGdib29sZWFuIHJlc3VsdCA9IFRSVUU7CisKKyAgaWYgKEdfQVRPTUlDX0lOVF9BREQgKCZzZXQtPmNvbnRyb2xfcGVuZGluZywgMSkgPT0gMCkgeworICAgIC8qIHJhaXNlIHdoZW4gbm90aGluZyBwZW5kaW5nICovCisgICAgR1NUX0xPRyAoIiVwOiByYWlzZSIsIHNldCk7CisgICAgcmVzdWx0ID0gV0FLRV9FVkVOVCAoc2V0KTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisvKiBub3RlIGhvdyBiYWQgdGhpbmdzIGNhbiBoYXBwZW4gd2hlbiB0aGUgMiB0aHJlYWRzIGJvdGggcmFpc2UgYW5kIHJlbGVhc2UgdGhlCisgKiB3YWtldXAuIFRoaXMgaXMgaG93ZXZlciBub3QgYSBwcm9ibGVtIGJlY2F1c2UgeW91IG11c3QgYWx3YXlzIHBhaXIgYSByYWlzZQorICogd2l0aCBhIHJlbGVhc2UgKi8KK3N0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KK3JlbGVhc2Vfd2FrZXVwIChHc3RQb2xsICogc2V0KQoreworICBnYm9vbGVhbiByZXN1bHQgPSBUUlVFOworCisgIGlmIChnX2F0b21pY19pbnRfZGVjX2FuZF90ZXN0ICgmc2V0LT5jb250cm9sX3BlbmRpbmcpKSB7CisgICAgR1NUX0xPRyAoIiVwOiByZWxlYXNlIiwgc2V0KTsKKyAgICByZXN1bHQgPSBSRUxFQVNFX0VWRU5UIChzZXQpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgZ2ludAorcmVsZWFzZV9hbGxfd2FrZXVwIChHc3RQb2xsICogc2V0KQoreworICBnaW50IG9sZDsKKworICB3aGlsZSAoVFJVRSkgeworICAgIGlmICghKG9sZCA9IGdfYXRvbWljX2ludF9nZXQgKCZzZXQtPmNvbnRyb2xfcGVuZGluZykpKQorICAgICAgLyogbm90aGluZyBwZW5kaW5nLCBqdXN0IGV4aXQgKi8KKyAgICAgIGJyZWFrOworCisgICAgLyogdHJ5IHRvIHJlbW92ZSBhbGwgcGVuZGluZyBjb250cm9sIG1lc3NhZ2VzICovCisgICAgaWYgKGdfYXRvbWljX2ludF9jb21wYXJlX2FuZF9leGNoYW5nZSAoJnNldC0+Y29udHJvbF9wZW5kaW5nLCBvbGQsIDApKSB7CisgICAgICAvKiB3ZSBtYW5hZ2VkIHRvIHJlbW92ZSBhbGwgbWVzc2FnZXMsIHJlYWQgdGhlIGNvbnRyb2wgc29ja2V0ICovCisgICAgICBpZiAoUkVMRUFTRV9FVkVOVCAoc2V0KSkKKyAgICAgICAgYnJlYWs7CisgICAgICBlbHNlCisgICAgICAgIC8qIHJldHJ5IGFnYWluIHVudGlsIHdlIHJlYWQgaXQgc3VjY2Vzc2Z1bGx5ICovCisgICAgICAgIEdfQVRPTUlDX0lOVF9BREQgKCZzZXQtPmNvbnRyb2xfcGVuZGluZywgMSk7CisgICAgfQorICB9CisgIHJldHVybiBvbGQ7Cit9CisKK3N0YXRpYyBnaW50CitmaW5kX2luZGV4IChHQXJyYXkgKiBhcnJheSwgR3N0UG9sbEZEICogZmQpCit7CisjaWZuZGVmIEdfT1NfV0lOMzIKKyAgc3RydWN0IHBvbGxmZCAqaWZkOworI2Vsc2UKKyAgV2luc29ja0ZkICppZmQ7CisjZW5kaWYKKyAgZ3VpbnQgaTsKKworICAvKiBzdGFydCBieSBhc3N1bWluZyB0aGUgaW5kZXggZm91bmQgaW4gdGhlIGZkIGlzIHN0aWxsIHZhbGlkICovCisgIGlmIChmZC0+aWR4ID49IDAgJiYgZmQtPmlkeCA8IGFycmF5LT5sZW4pIHsKKyNpZm5kZWYgR19PU19XSU4zMgorICAgIGlmZCA9ICZnX2FycmF5X2luZGV4IChhcnJheSwgc3RydWN0IHBvbGxmZCwgZmQtPmlkeCk7CisjZWxzZQorICAgIGlmZCA9ICZnX2FycmF5X2luZGV4IChhcnJheSwgV2luc29ja0ZkLCBmZC0+aWR4KTsKKyNlbmRpZgorCisgICAgaWYgKGlmZC0+ZmQgPT0gZmQtPmZkKSB7CisgICAgICByZXR1cm4gZmQtPmlkeDsKKyAgICB9CisgIH0KKworICAvKiB0aGUgcG9sbGZkIGFycmF5IGhhcyBjaGFuZ2VkIGFuZCB3ZSBuZWVkIHRvIGxvb2t1cCB0aGUgZmQgYWdhaW4gKi8KKyAgZm9yIChpID0gMDsgaSA8IGFycmF5LT5sZW47IGkrKykgeworI2lmbmRlZiBHX09TX1dJTjMyCisgICAgaWZkID0gJmdfYXJyYXlfaW5kZXggKGFycmF5LCBzdHJ1Y3QgcG9sbGZkLCBpKTsKKyNlbHNlCisgICAgaWZkID0gJmdfYXJyYXlfaW5kZXggKGFycmF5LCBXaW5zb2NrRmQsIGkpOworI2VuZGlmCisKKyAgICBpZiAoaWZkLT5mZCA9PSBmZC0+ZmQpIHsKKyAgICAgIGZkLT5pZHggPSAoZ2ludCkgaTsKKyAgICAgIHJldHVybiBmZC0+aWR4OworICAgIH0KKyAgfQorCisgIGZkLT5pZHggPSAtMTsKKyAgcmV0dXJuIGZkLT5pZHg7Cit9CisKKyNpZiAhZGVmaW5lZChIQVZFX1BQT0xMKSAmJiBkZWZpbmVkKEhBVkVfUE9MTCkKKy8qIGNoZWNrIGlmIGFsbCBmaWxlIGRlc2NyaXB0b3JzIHdpbGwgZml0IGluIGFuIGZkX3NldCAqLworc3RhdGljIGdib29sZWFuCitzZWxlY3RhYmxlX2ZkcyAoY29uc3QgR3N0UG9sbCAqIHNldCkKK3sKKyAgZ3VpbnQgaTsKKworICBnX211dGV4X2xvY2sgKHNldC0+bG9jayk7CisgIGZvciAoaSA9IDA7IGkgPCBzZXQtPmZkcy0+bGVuOyBpKyspIHsKKyAgICBzdHJ1Y3QgcG9sbGZkICpwZmQgPSAmZ19hcnJheV9pbmRleCAoc2V0LT5mZHMsIHN0cnVjdCBwb2xsZmQsIGkpOworCisgICAgaWYgKHBmZC0+ZmQgPj0gRkRfU0VUU0laRSkKKyAgICAgIGdvdG8gdG9vX21hbnk7CisgIH0KKyAgZ19tdXRleF91bmxvY2sgKHNldC0+bG9jayk7CisKKyAgcmV0dXJuIFRSVUU7CisKK3Rvb19tYW55OgorICB7CisgICAgZ19tdXRleF91bmxvY2sgKHNldC0+bG9jayk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKKy8qIGNoZWNrIGlmIHRoZSB0aW1lb3V0IHdpbGwgY29udmVydCB0byBhIHRpbWVvdXQgdmFsdWUgdXNlZCBmb3IgcG9sbCgpCisgKiB3aXRob3V0IGEgbG9zcyBvZiBwcmVjaXNpb24KKyAqLworc3RhdGljIGdib29sZWFuCitwb2xsYWJsZV90aW1lb3V0IChHc3RDbG9ja1RpbWUgdGltZW91dCkKK3sKKyAgaWYgKHRpbWVvdXQgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKKyAgICByZXR1cm4gVFJVRTsKKworICAvKiBub3QgYSBuaWNlIG11bHRpcGxlIG9mIG1pbGxpc2Vjb25kcyAqLworICBpZiAodGltZW91dCAlIDEwMDAwMDApCisgICAgcmV0dXJuIEZBTFNFOworCisgIHJldHVybiBUUlVFOworfQorI2VuZGlmCisKK3N0YXRpYyBHc3RQb2xsTW9kZQorY2hvb3NlX21vZGUgKGNvbnN0IEdzdFBvbGwgKiBzZXQsIEdzdENsb2NrVGltZSB0aW1lb3V0KQoreworICBHc3RQb2xsTW9kZSBtb2RlOworCisgIGlmIChzZXQtPm1vZGUgPT0gR1NUX1BPTExfTU9ERV9BVVRPKSB7CisjaWZkZWYgSEFWRV9QUE9MTAorICAgIG1vZGUgPSBHU1RfUE9MTF9NT0RFX1BQT0xMOworI2VsaWYgZGVmaW5lZChIQVZFX1BPTEwpCisgICAgaWYgKCFzZWxlY3RhYmxlX2ZkcyAoc2V0KSB8fCBwb2xsYWJsZV90aW1lb3V0ICh0aW1lb3V0KSkgeworICAgICAgbW9kZSA9IEdTVF9QT0xMX01PREVfUE9MTDsKKyAgICB9IGVsc2UgeworI2lmZGVmIEhBVkVfUFNFTEVDVAorICAgICAgbW9kZSA9IEdTVF9QT0xMX01PREVfUFNFTEVDVDsKKyNlbHNlCisgICAgICBtb2RlID0gR1NUX1BPTExfTU9ERV9TRUxFQ1Q7CisjZW5kaWYKKyAgICB9CisjZWxpZiBkZWZpbmVkKEhBVkVfUFNFTEVDVCkKKyAgICBtb2RlID0gR1NUX1BPTExfTU9ERV9QU0VMRUNUOworI2Vsc2UKKyAgICBtb2RlID0gR1NUX1BPTExfTU9ERV9TRUxFQ1Q7CisjZW5kaWYKKyAgfSBlbHNlIHsKKyAgICBtb2RlID0gc2V0LT5tb2RlOworICB9CisgIHJldHVybiBtb2RlOworfQorCisjaWZuZGVmIEdfT1NfV0lOMzIKK3N0YXRpYyBnaW50Citwb2xsZmRfdG9fZmRfc2V0IChHc3RQb2xsICogc2V0LCBmZF9zZXQgKiByZWFkZmRzLCBmZF9zZXQgKiB3cml0ZWZkcywKKyAgICBmZF9zZXQgKiBlcnJvcmZkcykKK3sKKyAgZ2ludCBtYXhfZmQgPSAtMTsKKyAgZ3VpbnQgaTsKKworICBGRF9aRVJPIChyZWFkZmRzKTsKKyAgRkRfWkVSTyAod3JpdGVmZHMpOworICBGRF9aRVJPIChlcnJvcmZkcyk7CisKKyAgZ19tdXRleF9sb2NrIChzZXQtPmxvY2spOworCisgIGZvciAoaSA9IDA7IGkgPCBzZXQtPmFjdGl2ZV9mZHMtPmxlbjsgaSsrKSB7CisgICAgc3RydWN0IHBvbGxmZCAqcGZkID0gJmdfYXJyYXlfaW5kZXggKHNldC0+ZmRzLCBzdHJ1Y3QgcG9sbGZkLCBpKTsKKworICAgIGlmIChwZmQtPmZkIDwgRkRfU0VUU0laRSkgeworICAgICAgaWYgKHBmZC0+ZXZlbnRzICYgUE9MTElOKQorICAgICAgICBGRF9TRVQgKHBmZC0+ZmQsIHJlYWRmZHMpOworICAgICAgaWYgKHBmZC0+ZXZlbnRzICYgUE9MTE9VVCkKKyAgICAgICAgRkRfU0VUIChwZmQtPmZkLCB3cml0ZWZkcyk7CisgICAgICBpZiAocGZkLT5ldmVudHMpCisgICAgICAgIEZEX1NFVCAocGZkLT5mZCwgZXJyb3JmZHMpOworICAgICAgaWYgKHBmZC0+ZmQgPiBtYXhfZmQgJiYgKHBmZC0+ZXZlbnRzICYgKFBPTExJTiB8IFBPTExPVVQpKSkKKyAgICAgICAgbWF4X2ZkID0gcGZkLT5mZDsKKyAgICB9CisgIH0KKworICBnX211dGV4X3VubG9jayAoc2V0LT5sb2NrKTsKKworICByZXR1cm4gbWF4X2ZkOworfQorCitzdGF0aWMgdm9pZAorZmRfc2V0X3RvX3BvbGxmZCAoR3N0UG9sbCAqIHNldCwgZmRfc2V0ICogcmVhZGZkcywgZmRfc2V0ICogd3JpdGVmZHMsCisgICAgZmRfc2V0ICogZXJyb3JmZHMpCit7CisgIGd1aW50IGk7CisKKyAgZ19tdXRleF9sb2NrIChzZXQtPmxvY2spOworCisgIGZvciAoaSA9IDA7IGkgPCBzZXQtPmFjdGl2ZV9mZHMtPmxlbjsgaSsrKSB7CisgICAgc3RydWN0IHBvbGxmZCAqcGZkID0gJmdfYXJyYXlfaW5kZXggKHNldC0+YWN0aXZlX2Zkcywgc3RydWN0IHBvbGxmZCwgaSk7CisKKyAgICBpZiAocGZkLT5mZCA8IEZEX1NFVFNJWkUpIHsKKyAgICAgIHBmZC0+cmV2ZW50cyA9IDA7CisgICAgICBpZiAoRkRfSVNTRVQgKHBmZC0+ZmQsIHJlYWRmZHMpKQorICAgICAgICBwZmQtPnJldmVudHMgfD0gUE9MTElOOworICAgICAgaWYgKEZEX0lTU0VUIChwZmQtPmZkLCB3cml0ZWZkcykpCisgICAgICAgIHBmZC0+cmV2ZW50cyB8PSBQT0xMT1VUOworICAgICAgaWYgKEZEX0lTU0VUIChwZmQtPmZkLCBlcnJvcmZkcykpCisgICAgICAgIHBmZC0+cmV2ZW50cyB8PSBQT0xMRVJSOworICAgIH0KKyAgfQorCisgIGdfbXV0ZXhfdW5sb2NrIChzZXQtPmxvY2spOworfQorI2Vsc2UgLyogR19PU19XSU4zMiAqLworLyoKKyAqIFRyYW5zbGF0ZSBlcnJvcnMgdGhyb3duIGJ5IHRoZSBXaW5zb2NrIEFQSSB1c2VkIGJ5IEdzdFBvbGw6CisgKiAgIFdTQUV2ZW50U2VsZWN0LCBXU0FXYWl0Rm9yTXVsdGlwbGVFdmVudHMgYW5kIFdTQUVudW1OZXR3b3JrRXZlbnRzCisgKi8KK3N0YXRpYyBnaW50Citnc3RfcG9sbF93aW5zb2NrX2Vycm9yX3RvX2Vycm5vIChEV09SRCBsYXN0X2Vycm9yKQoreworICBzd2l0Y2ggKGxhc3RfZXJyb3IpIHsKKyAgICBjYXNlIFdTQV9JTlZBTElEX0hBTkRMRToKKyAgICBjYXNlIFdTQUVJTlZBTDoKKyAgICBjYXNlIFdTQUVOT1RTT0NLOgorICAgICAgcmV0dXJuIEVCQURGOworCisgICAgY2FzZSBXU0FfTk9UX0VOT1VHSF9NRU1PUlk6CisgICAgICByZXR1cm4gRU5PTUVNOworCisgICAgICAvKgorICAgICAgICogQW55dGhpbmcgZWxzZSwgaW5jbHVkaW5nOgorICAgICAgICogICBXU0FfSU5WQUxJRF9QQVJBTUVURVIsIFdTQUVGQVVMVCwgV1NBRUlOUFJPR1JFU1MsIFdTQUVORVRET1dOLAorICAgICAgICogICBXU0FOT1RJTklUSUFMSVNFRAorICAgICAgICovCisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBFSU5WQUw7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9wb2xsX2ZyZWVfd2luc29ja19ldmVudCAoR3N0UG9sbCAqIHNldCwgZ2ludCBpZHgpCit7CisgIFdpbnNvY2tGZCAqd2ZkID0gJmdfYXJyYXlfaW5kZXggKHNldC0+ZmRzLCBXaW5zb2NrRmQsIGlkeCk7CisgIEhBTkRMRSBldmVudCA9IGdfYXJyYXlfaW5kZXggKHNldC0+ZXZlbnRzLCBIQU5ETEUsIGlkeCk7CisKKyAgV1NBRXZlbnRTZWxlY3QgKHdmZC0+ZmQsIGV2ZW50LCAwKTsKKyAgQ2xvc2VIYW5kbGUgKGV2ZW50KTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9wb2xsX3VwZGF0ZV93aW5zb2NrX2V2ZW50X21hc2sgKEdzdFBvbGwgKiBzZXQsIGdpbnQgaWR4LCBnbG9uZyBmbGFncywKKyAgICBnYm9vbGVhbiBhY3RpdmUpCit7CisgIFdpbnNvY2tGZCAqd2ZkOworCisgIHdmZCA9ICZnX2FycmF5X2luZGV4IChzZXQtPmZkcywgV2luc29ja0ZkLCBpZHgpOworCisgIGlmIChhY3RpdmUpCisgICAgd2ZkLT5ldmVudF9tYXNrIHw9IGZsYWdzOworICBlbHNlCisgICAgd2ZkLT5ldmVudF9tYXNrICY9IH5mbGFnczsKKworICAvKiByZXNldCBpZ25vcmVkIHN0YXRlIGlmIHRoZSBuZXcgbWFzayBkb2Vzbid0IG92ZXJsYXAgYXQgYWxsICovCisgIGlmICgod2ZkLT5pZ25vcmVkX2V2ZW50X21hc2sgJiB3ZmQtPmV2ZW50X21hc2spID09IDApCisgICAgd2ZkLT5pZ25vcmVkX2V2ZW50X21hc2sgPSAwOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9wb2xsX3ByZXBhcmVfd2luc29ja19hY3RpdmVfc2V0cyAoR3N0UG9sbCAqIHNldCkKK3sKKyAgZ3VpbnQgaTsKKworICBnX2FycmF5X3NldF9zaXplIChzZXQtPmFjdGl2ZV9mZHMsIDApOworICBnX2FycmF5X3NldF9zaXplIChzZXQtPmFjdGl2ZV9mZHNfaWdub3JlZCwgMCk7CisgIGdfYXJyYXlfc2V0X3NpemUgKHNldC0+YWN0aXZlX2V2ZW50cywgMCk7CisgIGdfYXJyYXlfYXBwZW5kX3ZhbCAoc2V0LT5hY3RpdmVfZXZlbnRzLCBzZXQtPndha2V1cF9ldmVudCk7CisKKyAgZm9yIChpID0gMDsgaSA8IHNldC0+ZmRzLT5sZW47IGkrKykgeworICAgIFdpbnNvY2tGZCAqd2ZkID0gJmdfYXJyYXlfaW5kZXggKHNldC0+ZmRzLCBXaW5zb2NrRmQsIGkpOworICAgIEhBTkRMRSBldmVudCA9IGdfYXJyYXlfaW5kZXggKHNldC0+ZXZlbnRzLCBIQU5ETEUsIGkpOworCisgICAgaWYgKHdmZC0+aWdub3JlZF9ldmVudF9tYXNrID09IDApIHsKKyAgICAgIGdpbnQgcmV0OworCisgICAgICBnX2FycmF5X2FwcGVuZF92YWwgKHNldC0+YWN0aXZlX2ZkcywgKndmZCk7CisgICAgICBnX2FycmF5X2FwcGVuZF92YWwgKHNldC0+YWN0aXZlX2V2ZW50cywgZXZlbnQpOworCisgICAgICByZXQgPSBXU0FFdmVudFNlbGVjdCAod2ZkLT5mZCwgZXZlbnQsIHdmZC0+ZXZlbnRfbWFzayk7CisgICAgICBpZiAoR19VTkxJS0VMWSAocmV0ICE9IDApKSB7CisgICAgICAgIGVycm5vID0gZ3N0X3BvbGxfd2luc29ja19lcnJvcl90b19lcnJubyAoV1NBR2V0TGFzdEVycm9yICgpKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBnX2FycmF5X2FwcGVuZF92YWwgKHNldC0+YWN0aXZlX2Zkc19pZ25vcmVkLCB3ZmQpOworICAgIH0KKyAgfQorCisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2ludAorZ3N0X3BvbGxfY29sbGVjdF93aW5zb2NrX2V2ZW50cyAoR3N0UG9sbCAqIHNldCkKK3sKKyAgZ2ludCByZXMsIGk7CisKKyAgLyoKKyAgICogV2UgbmVlZCB0byBjaGVjayB3aGljaCBldmVudHMgYXJlIHNpZ25hbGVkLCBhbmQgY2FsbAorICAgKiBXU0FFbnVtTmV0d29ya0V2ZW50cyBmb3IgdGhvc2UgdGhhdCBhcmUsIHdoaWNoIHJlc2V0cworICAgKiB0aGUgZXZlbnQgYW5kIGNsZWFycyB0aGUgaW50ZXJuYWwgbmV0d29yayBldmVudCByZWNvcmRzLgorICAgKi8KKyAgcmVzID0gMDsKKyAgZm9yIChpID0gMDsgaSA8IHNldC0+YWN0aXZlX2Zkcy0+bGVuOyBpKyspIHsKKyAgICBXaW5zb2NrRmQgKndmZCA9ICZnX2FycmF5X2luZGV4IChzZXQtPmFjdGl2ZV9mZHMsIFdpbnNvY2tGZCwgaSk7CisgICAgSEFORExFIGV2ZW50ID0gZ19hcnJheV9pbmRleCAoc2V0LT5hY3RpdmVfZXZlbnRzLCBIQU5ETEUsIGkgKyAxKTsKKyAgICBEV09SRCB3YWl0X3JldDsKKworICAgIHdhaXRfcmV0ID0gV2FpdEZvclNpbmdsZU9iamVjdCAoZXZlbnQsIDApOworICAgIGlmICh3YWl0X3JldCA9PSBXQUlUX09CSkVDVF8wKSB7CisgICAgICBnaW50IGVudW1fcmV0ID0gV1NBRW51bU5ldHdvcmtFdmVudHMgKHdmZC0+ZmQsIGV2ZW50LCAmd2ZkLT5ldmVudHMpOworCisgICAgICBpZiAoR19VTkxJS0VMWSAoZW51bV9yZXQgIT0gMCkpIHsKKyAgICAgICAgcmVzID0gLTE7CisgICAgICAgIGVycm5vID0gZ3N0X3BvbGxfd2luc29ja19lcnJvcl90b19lcnJubyAoV1NBR2V0TGFzdEVycm9yICgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIHJlcysrOworICAgIH0gZWxzZSB7CisgICAgICAvKiBjbGVhciBhbnkgcHJldmlvdXNseSBzdG9yZWQgcmVzdWx0ICovCisgICAgICBtZW1zZXQgKCZ3ZmQtPmV2ZW50cywgMCwgc2l6ZW9mICh3ZmQtPmV2ZW50cykpOworICAgIH0KKyAgfQorCisgIC8qIElmIGFsbCB3ZW50IHdlbGwgd2UgYWxzbyBuZWVkIHRvIHJlc2V0IHRoZSBpZ25vcmVkIGZkcy4gKi8KKyAgaWYgKHJlcyA+PSAwKSB7CisgICAgcmVzICs9IHNldC0+YWN0aXZlX2Zkc19pZ25vcmVkLT5sZW47CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2V0LT5hY3RpdmVfZmRzX2lnbm9yZWQtPmxlbjsgaSsrKSB7CisgICAgICBXaW5zb2NrRmQgKndmZCA9IGdfYXJyYXlfaW5kZXggKHNldC0+YWN0aXZlX2Zkc19pZ25vcmVkLCBXaW5zb2NrRmQgKiwgaSk7CisKKyAgICAgIHdmZC0+aWdub3JlZF9ldmVudF9tYXNrID0gMDsKKyAgICB9CisKKyAgICBnX2FycmF5X3NldF9zaXplIChzZXQtPmFjdGl2ZV9mZHNfaWdub3JlZCwgMCk7CisgIH0KKworICByZXR1cm4gcmVzOworfQorI2VuZGlmCisKKy8qKgorICogZ3N0X3BvbGxfbmV3OgorICogQGNvbnRyb2xsYWJsZTogd2hldGhlciBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gY29udHJvbCBhIHdhaXQuCisgKgorICogQ3JlYXRlIGEgbmV3IGZpbGUgZGVzY3JpcHRvciBzZXQuIElmIEBjb250cm9sbGFibGUsIGl0CisgKiBpcyBwb3NzaWJsZSB0byByZXN0YXJ0IG9yIGZsdXNoIGEgY2FsbCB0byBnc3RfcG9sbF93YWl0KCkgd2l0aAorICogZ3N0X3BvbGxfcmVzdGFydCgpIGFuZCBnc3RfcG9sbF9zZXRfZmx1c2hpbmcoKSByZXNwZWN0aXZlbHkuCisgKgorICogRnJlZS1mdW5jdGlvbjogZ3N0X3BvbGxfZnJlZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdFBvbGwsIG9yICVOVUxMIGluIGNhc2Ugb2YgYW4gZXJyb3IuCisgKiAgICAgRnJlZSB3aXRoIGdzdF9wb2xsX2ZyZWUoKS4KKyAqCisgKiBTaW5jZTogMC4xMC4xOAorICovCitHc3RQb2xsICoKK2dzdF9wb2xsX25ldyAoZ2Jvb2xlYW4gY29udHJvbGxhYmxlKQoreworICBHc3RQb2xsICpuc2V0OworCisgIEdTVF9ERUJVRyAoImNvbnRyb2xsYWJsZSA6ICVkIiwgY29udHJvbGxhYmxlKTsKKworICBuc2V0ID0gZ19zbGljZV9uZXcwIChHc3RQb2xsKTsKKyAgbnNldC0+bG9jayA9IGdfbXV0ZXhfbmV3ICgpOworI2lmbmRlZiBHX09TX1dJTjMyCisgIG5zZXQtPm1vZGUgPSBHU1RfUE9MTF9NT0RFX0FVVE87CisgIG5zZXQtPmZkcyA9IGdfYXJyYXlfbmV3IChGQUxTRSwgRkFMU0UsIHNpemVvZiAoc3RydWN0IHBvbGxmZCkpOworICBuc2V0LT5hY3RpdmVfZmRzID0gZ19hcnJheV9uZXcgKEZBTFNFLCBGQUxTRSwgc2l6ZW9mIChzdHJ1Y3QgcG9sbGZkKSk7CisgIG5zZXQtPmNvbnRyb2xfcmVhZF9mZC5mZCA9IC0xOworICBuc2V0LT5jb250cm9sX3dyaXRlX2ZkLmZkID0gLTE7CisgIHsKKyAgICBnaW50IGNvbnRyb2xfc29ja1syXTsKKworICAgIGlmIChzb2NrZXRwYWlyIChQRl9VTklYLCBTT0NLX1NUUkVBTSwgMCwgY29udHJvbF9zb2NrKSA8IDApCisgICAgICBnb3RvIG5vX3NvY2tldF9wYWlyOworCisgICAgZmNudGwgKGNvbnRyb2xfc29ja1swXSwgRl9TRVRGTCwgT19OT05CTE9DSyk7CisgICAgZmNudGwgKGNvbnRyb2xfc29ja1sxXSwgRl9TRVRGTCwgT19OT05CTE9DSyk7CisKKyAgICBuc2V0LT5jb250cm9sX3JlYWRfZmQuZmQgPSBjb250cm9sX3NvY2tbMF07CisgICAgbnNldC0+Y29udHJvbF93cml0ZV9mZC5mZCA9IGNvbnRyb2xfc29ja1sxXTsKKworICAgIGdzdF9wb2xsX2FkZF9mZF91bmxvY2tlZCAobnNldCwgJm5zZXQtPmNvbnRyb2xfcmVhZF9mZCk7CisgICAgZ3N0X3BvbGxfZmRfY3RsX3JlYWRfdW5sb2NrZWQgKG5zZXQsICZuc2V0LT5jb250cm9sX3JlYWRfZmQsIFRSVUUpOworICB9CisjZWxzZQorICBuc2V0LT5tb2RlID0gR1NUX1BPTExfTU9ERV9XSU5ET1dTOworICBuc2V0LT5mZHMgPSBnX2FycmF5X25ldyAoRkFMU0UsIEZBTFNFLCBzaXplb2YgKFdpbnNvY2tGZCkpOworICBuc2V0LT5hY3RpdmVfZmRzID0gZ19hcnJheV9uZXcgKEZBTFNFLCBGQUxTRSwgc2l6ZW9mIChXaW5zb2NrRmQpKTsKKyAgbnNldC0+YWN0aXZlX2Zkc19pZ25vcmVkID0gZ19hcnJheV9uZXcgKEZBTFNFLCBGQUxTRSwgc2l6ZW9mIChXaW5zb2NrRmQgKikpOworICBuc2V0LT5ldmVudHMgPSBnX2FycmF5X25ldyAoRkFMU0UsIEZBTFNFLCBzaXplb2YgKEhBTkRMRSkpOworICBuc2V0LT5hY3RpdmVfZXZlbnRzID0gZ19hcnJheV9uZXcgKEZBTFNFLCBGQUxTRSwgc2l6ZW9mIChIQU5ETEUpKTsKKworICBuc2V0LT53YWtldXBfZXZlbnQgPSBDcmVhdGVFdmVudCAoTlVMTCwgVFJVRSwgRkFMU0UsIE5VTEwpOworI2VuZGlmCisKKyAgLyogZW5zdXJlIChyZSlidWlsZCwgdGhvdWdoIGFscmVhZHkgc25lYWtpbHkgc2V0IGluIG5vbi13aW5kb3dzIGNhc2UgKi8KKyAgTUFSS19SRUJVSUxEIChuc2V0KTsKKworICBuc2V0LT5jb250cm9sbGFibGUgPSBjb250cm9sbGFibGU7CisKKyAgcmV0dXJuIG5zZXQ7CisKKyAgLyogRVJST1JTICovCisjaWZuZGVmIEdfT1NfV0lOMzIKK25vX3NvY2tldF9wYWlyOgorICB7CisgICAgR1NUX1dBUk5JTkcgKCIlcDogY2FuJ3QgY3JlYXRlIHNvY2tldCBwYWlyICEiLCBuc2V0KTsKKyAgICBnc3RfcG9sbF9mcmVlIChuc2V0KTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorI2VuZGlmCit9CisKKy8qKgorICogZ3N0X3BvbGxfbmV3X3RpbWVyOgorICoKKyAqIENyZWF0ZSBhIG5ldyBwb2xsIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGZvciBzY2hlZHVsaW5nIGNhbmNlbGxhYmxlCisgKiB0aW1lb3V0cy4KKyAqCisgKiBBIHRpbWVvdXQgaXMgcGVyZm9ybWVkIHdpdGggZ3N0X3BvbGxfd2FpdCgpLiBNdWx0aXBsZSB0aW1lb3V0cyBjYW4gYmUKKyAqIHBlcmZvcm1lZCBmcm9tIGRpZmZlcmVudCB0aHJlYWRzLiAKKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnc3RfcG9sbF9mcmVlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0UG9sbCwgb3IgJU5VTEwgaW4gY2FzZSBvZiBhbiBlcnJvci4KKyAqICAgICBGcmVlIHdpdGggZ3N0X3BvbGxfZnJlZSgpLgorICoKKyAqIFNpbmNlOiAwLjEwLjIzCisgKi8KK0dzdFBvbGwgKgorZ3N0X3BvbGxfbmV3X3RpbWVyICh2b2lkKQoreworICBHc3RQb2xsICpwb2xsOworCisgIC8qIG1ha2UgYSBuZXcgY29udHJvbGxhYmxlIHBvbGwgc2V0ICovCisgIGlmICghKHBvbGwgPSBnc3RfcG9sbF9uZXcgKFRSVUUpKSkKKyAgICBnb3RvIGRvbmU7CisKKyAgLyogd2UgYXJlIGEgdGltZXIgKi8KKyAgcG9sbC0+dGltZXIgPSBUUlVFOworCitkb25lOgorICByZXR1cm4gcG9sbDsKK30KKworLyoqCisgKiBnc3RfcG9sbF9mcmVlOgorICogQHNldDogKHRyYW5zZmVyIGZ1bGwpOiBhIGZpbGUgZGVzY3JpcHRvciBzZXQuCisgKgorICogRnJlZSBhIGZpbGUgZGVzY3JpcHRvciBzZXQuCisgKgorICogU2luY2U6IDAuMTAuMTgKKyAqLwordm9pZAorZ3N0X3BvbGxfZnJlZSAoR3N0UG9sbCAqIHNldCkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoc2V0ICE9IE5VTEwpOworCisgIEdTVF9ERUJVRyAoIiVwOiBmcmVlaW5nIiwgc2V0KTsKKworI2lmbmRlZiBHX09TX1dJTjMyCisgIGlmIChzZXQtPmNvbnRyb2xfd3JpdGVfZmQuZmQgPj0gMCkKKyAgICBjbG9zZSAoc2V0LT5jb250cm9sX3dyaXRlX2ZkLmZkKTsKKyAgaWYgKHNldC0+Y29udHJvbF9yZWFkX2ZkLmZkID49IDApCisgICAgY2xvc2UgKHNldC0+Y29udHJvbF9yZWFkX2ZkLmZkKTsKKyNlbHNlCisgIENsb3NlSGFuZGxlIChzZXQtPndha2V1cF9ldmVudCk7CisKKyAgeworICAgIGd1aW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2V0LT5ldmVudHMtPmxlbjsgaSsrKQorICAgICAgZ3N0X3BvbGxfZnJlZV93aW5zb2NrX2V2ZW50IChzZXQsIGkpOworICB9CisKKyAgZ19hcnJheV9mcmVlIChzZXQtPmFjdGl2ZV9ldmVudHMsIFRSVUUpOworICBnX2FycmF5X2ZyZWUgKHNldC0+ZXZlbnRzLCBUUlVFKTsKKyAgZ19hcnJheV9mcmVlIChzZXQtPmFjdGl2ZV9mZHNfaWdub3JlZCwgVFJVRSk7CisjZW5kaWYKKworICBnX2FycmF5X2ZyZWUgKHNldC0+YWN0aXZlX2ZkcywgVFJVRSk7CisgIGdfYXJyYXlfZnJlZSAoc2V0LT5mZHMsIFRSVUUpOworICBnX211dGV4X2ZyZWUgKHNldC0+bG9jayk7CisgIGdfc2xpY2VfZnJlZSAoR3N0UG9sbCwgc2V0KTsKK30KKworLyoqCisgKiBnc3RfcG9sbF9nZXRfcmVhZF9ncG9sbGZkOgorICogQHNldDogYSAjR3N0UG9sbAorICogQGZkOiBhICNHUG9sbEZECisgKgorICogR2V0IGEgR1BvbGxGRCBmb3IgdGhlIHJlYWRpbmcgcGFydCBvZiB0aGUgY29udHJvbCBzb2NrZXQuIFRoaXMgaXMgdXNlZnVsIHdoZW4KKyAqIGludGVncmF0aW5nIHdpdGggYSBHU291cmNlIGFuZCBHTWFpbkxvb3AuCisgKgorICogU2luY2U6IDAuMTAuMzIKKyAqLwordm9pZAorZ3N0X3BvbGxfZ2V0X3JlYWRfZ3BvbGxmZCAoR3N0UG9sbCAqIHNldCwgR1BvbGxGRCAqIGZkKQoreworICBnX3JldHVybl9pZl9mYWlsIChzZXQgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKGZkICE9IE5VTEwpOworCisjaWZuZGVmIEdfT1NfV0lOMzIKKyAgZmQtPmZkID0gc2V0LT5jb250cm9sX3JlYWRfZmQuZmQ7CisjZWxzZQorI2lmIEdMSUJfU0laRU9GX1ZPSURfUCA9PSA4CisgIGZkLT5mZCA9IChnaW50NjQpIHNldC0+d2FrZXVwX2V2ZW50OworI2Vsc2UKKyAgZmQtPmZkID0gKGdpbnQpIHNldC0+d2FrZXVwX2V2ZW50OworI2VuZGlmCisjZW5kaWYKKyAgZmQtPmV2ZW50cyA9IEdfSU9fSU4gfCBHX0lPX0hVUCB8IEdfSU9fRVJSOworICBmZC0+cmV2ZW50cyA9IDA7Cit9CisKKy8qKgorICogZ3N0X3BvbGxfZmRfaW5pdDoKKyAqIEBmZDogYSAjR3N0UG9sbEZECisgKgorICogSW5pdGlhbGl6ZXMgQGZkLiBBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gaW5pdGlhbGl6ZSBpdCB3aXRoCisgKiAjR1NUX1BPTExfRkRfSU5JVC4KKyAqCisgKiBTaW5jZTogMC4xMC4xOAorICovCit2b2lkCitnc3RfcG9sbF9mZF9pbml0IChHc3RQb2xsRkQgKiBmZCkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoZmQgIT0gTlVMTCk7CisKKyAgZmQtPmZkID0gLTE7CisgIGZkLT5pZHggPSAtMTsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfcG9sbF9hZGRfZmRfdW5sb2NrZWQgKEdzdFBvbGwgKiBzZXQsIEdzdFBvbGxGRCAqIGZkKQoreworICBnaW50IGlkeDsKKworICBHU1RfREVCVUcgKCIlcDogZmQgKGZkOiVkLCBpZHg6JWQpIiwgc2V0LCBmZC0+ZmQsIGZkLT5pZHgpOworCisgIGlkeCA9IGZpbmRfaW5kZXggKHNldC0+ZmRzLCBmZCk7CisgIGlmIChpZHggPCAwKSB7CisjaWZuZGVmIEdfT1NfV0lOMzIKKyAgICBzdHJ1Y3QgcG9sbGZkIG5mZDsKKworICAgIG5mZC5mZCA9IGZkLT5mZDsKKyAgICBuZmQuZXZlbnRzID0gUE9MTEVSUiB8IFBPTExOVkFMIHwgUE9MTEhVUDsKKyAgICBuZmQucmV2ZW50cyA9IDA7CisKKyAgICBnX2FycmF5X2FwcGVuZF92YWwgKHNldC0+ZmRzLCBuZmQpOworCisgICAgZmQtPmlkeCA9IHNldC0+ZmRzLT5sZW4gLSAxOworI2Vsc2UKKyAgICBXaW5zb2NrRmQgd2ZkOworICAgIEhBTkRMRSBldmVudDsKKworICAgIHdmZC5mZCA9IGZkLT5mZDsKKyAgICB3ZmQuZXZlbnRfbWFzayA9IEZEX0NMT1NFOworICAgIG1lbXNldCAoJndmZC5ldmVudHMsIDAsIHNpemVvZiAod2ZkLmV2ZW50cykpOworICAgIHdmZC5pZ25vcmVkX2V2ZW50X21hc2sgPSAwOworICAgIGV2ZW50ID0gV1NBQ3JlYXRlRXZlbnQgKCk7CisKKyAgICBnX2FycmF5X2FwcGVuZF92YWwgKHNldC0+ZmRzLCB3ZmQpOworICAgIGdfYXJyYXlfYXBwZW5kX3ZhbCAoc2V0LT5ldmVudHMsIGV2ZW50KTsKKworICAgIGZkLT5pZHggPSBzZXQtPmZkcy0+bGVuIC0gMTsKKyNlbmRpZgorICAgIE1BUktfUkVCVUlMRCAoc2V0KTsKKyAgfSBlbHNlIHsKKyAgICBHU1RfV0FSTklORyAoIiVwOiBjb3VsZG4ndCBmaW5kIGZkICEiLCBzZXQpOworICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qKgorICogZ3N0X3BvbGxfYWRkX2ZkOgorICogQHNldDogYSBmaWxlIGRlc2NyaXB0b3Igc2V0LgorICogQGZkOiBhIGZpbGUgZGVzY3JpcHRvci4KKyAqCisgKiBBZGQgYSBmaWxlIGRlc2NyaXB0b3IgdG8gdGhlIGZpbGUgZGVzY3JpcHRvciBzZXQuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGZpbGUgZGVzY3JpcHRvciB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIHRoZSBzZXQuCisgKgorICogU2luY2U6IDAuMTAuMTgKKyAqLworZ2Jvb2xlYW4KK2dzdF9wb2xsX2FkZF9mZCAoR3N0UG9sbCAqIHNldCwgR3N0UG9sbEZEICogZmQpCit7CisgIGdib29sZWFuIHJldDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2V0ICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZkICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZkLT5mZCA+PSAwLCBGQUxTRSk7CisKKyAgZ19tdXRleF9sb2NrIChzZXQtPmxvY2spOworCisgIHJldCA9IGdzdF9wb2xsX2FkZF9mZF91bmxvY2tlZCAoc2V0LCBmZCk7CisKKyAgZ19tdXRleF91bmxvY2sgKHNldC0+bG9jayk7CisKKyAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBnc3RfcG9sbF9yZW1vdmVfZmQ6CisgKiBAc2V0OiBhIGZpbGUgZGVzY3JpcHRvciBzZXQuCisgKiBAZmQ6IGEgZmlsZSBkZXNjcmlwdG9yLgorICoKKyAqIFJlbW92ZSBhIGZpbGUgZGVzY3JpcHRvciBmcm9tIHRoZSBmaWxlIGRlc2NyaXB0b3Igc2V0LgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBmaWxlIGRlc2NyaXB0b3Igd2FzIHN1Y2Nlc3NmdWxseSByZW1vdmVkIGZyb20gdGhlIHNldC4KKyAqCisgKiBTaW5jZTogMC4xMC4xOAorICovCitnYm9vbGVhbgorZ3N0X3BvbGxfcmVtb3ZlX2ZkIChHc3RQb2xsICogc2V0LCBHc3RQb2xsRkQgKiBmZCkKK3sKKyAgZ2ludCBpZHg7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNldCAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmZCAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmZC0+ZmQgPj0gMCwgRkFMU0UpOworCisKKyAgR1NUX0RFQlVHICgiJXA6IGZkIChmZDolZCwgaWR4OiVkKSIsIHNldCwgZmQtPmZkLCBmZC0+aWR4KTsKKworICBnX211dGV4X2xvY2sgKHNldC0+bG9jayk7CisKKyAgLyogZ2V0IHRoZSBpbmRleCwgLTEgaXMgYW4gZmQgdGhhdCBpcyBub3QgYWRkZWQgKi8KKyAgaWR4ID0gZmluZF9pbmRleCAoc2V0LT5mZHMsIGZkKTsKKyAgaWYgKGlkeCA+PSAwKSB7CisjaWZkZWYgR19PU19XSU4zMgorICAgIGdzdF9wb2xsX2ZyZWVfd2luc29ja19ldmVudCAoc2V0LCBpZHgpOworICAgIGdfYXJyYXlfcmVtb3ZlX2luZGV4X2Zhc3QgKHNldC0+ZXZlbnRzLCBpZHgpOworI2VuZGlmCisKKyAgICAvKiByZW1vdmUgdGhlIGZkIGF0IGluZGV4LCB3ZSB1c2UgX3JlbW92ZV9pbmRleF9mYXN0LCB3aGljaCBjb3BpZXMgdGhlIGxhc3QKKyAgICAgKiBlbGVtZW50IG9mIHRoZSBhcnJheSB0byB0aGUgZnJlZWQgaW5kZXggKi8KKyAgICBnX2FycmF5X3JlbW92ZV9pbmRleF9mYXN0IChzZXQtPmZkcywgaWR4KTsKKworICAgIC8qIG1hcmsgZmQgYXMgcmVtb3ZlZCBieSBzZXR0aW5nIHRoZSBpbmRleCB0byAtMSAqLworICAgIGZkLT5pZHggPSAtMTsKKyAgICBNQVJLX1JFQlVJTEQgKHNldCk7CisgIH0gZWxzZSB7CisgICAgR1NUX1dBUk5JTkcgKCIlcDogY291bGRuJ3QgZmluZCBmZCAhIiwgc2V0KTsKKyAgfQorCisgIGdfbXV0ZXhfdW5sb2NrIChzZXQtPmxvY2spOworCisgIHJldHVybiBpZHggPj0gMDsKK30KKworLyoqCisgKiBnc3RfcG9sbF9mZF9jdGxfd3JpdGU6CisgKiBAc2V0OiBhIGZpbGUgZGVzY3JpcHRvciBzZXQuCisgKiBAZmQ6IGEgZmlsZSBkZXNjcmlwdG9yLgorICogQGFjdGl2ZTogYSBuZXcgc3RhdHVzLgorICoKKyAqIENvbnRyb2wgd2hldGhlciB0aGUgZGVzY3JpcHRvciBAZmQgaW4gQHNldCB3aWxsIGJlIG1vbml0b3JlZCBmb3IKKyAqIHdyaXRhYmlsaXR5LgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBkZXNjcmlwdG9yIHdhcyBzdWNjZXNzZnVsbHkgdXBkYXRlZC4KKyAqCisgKiBTaW5jZTogMC4xMC4xOAorICovCitnYm9vbGVhbgorZ3N0X3BvbGxfZmRfY3RsX3dyaXRlIChHc3RQb2xsICogc2V0LCBHc3RQb2xsRkQgKiBmZCwgZ2Jvb2xlYW4gYWN0aXZlKQoreworICBnaW50IGlkeDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2V0ICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZkICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZkLT5mZCA+PSAwLCBGQUxTRSk7CisKKyAgR1NUX0RFQlVHICgiJXA6IGZkIChmZDolZCwgaWR4OiVkKSwgYWN0aXZlIDogJWQiLCBzZXQsCisgICAgICBmZC0+ZmQsIGZkLT5pZHgsIGFjdGl2ZSk7CisKKyAgZ19tdXRleF9sb2NrIChzZXQtPmxvY2spOworCisgIGlkeCA9IGZpbmRfaW5kZXggKHNldC0+ZmRzLCBmZCk7CisgIGlmIChpZHggPj0gMCkgeworI2lmbmRlZiBHX09TX1dJTjMyCisgICAgc3RydWN0IHBvbGxmZCAqcGZkID0gJmdfYXJyYXlfaW5kZXggKHNldC0+ZmRzLCBzdHJ1Y3QgcG9sbGZkLCBpZHgpOworCisgICAgaWYgKGFjdGl2ZSkKKyAgICAgIHBmZC0+ZXZlbnRzIHw9IFBPTExPVVQ7CisgICAgZWxzZQorICAgICAgcGZkLT5ldmVudHMgJj0gflBPTExPVVQ7CisKKyAgICBHU1RfTE9HICgicGZkLT5ldmVudHMgbm93ICVkIChQT0xMT1VUOiVkKSIsIHBmZC0+ZXZlbnRzLCBQT0xMT1VUKTsKKyNlbHNlCisgICAgZ3N0X3BvbGxfdXBkYXRlX3dpbnNvY2tfZXZlbnRfbWFzayAoc2V0LCBpZHgsIEZEX1dSSVRFIHwgRkRfQ09OTkVDVCwKKyAgICAgICAgYWN0aXZlKTsKKyNlbmRpZgorICAgIE1BUktfUkVCVUlMRCAoc2V0KTsKKyAgfSBlbHNlIHsKKyAgICBHU1RfV0FSTklORyAoIiVwOiBjb3VsZG4ndCBmaW5kIGZkICEiLCBzZXQpOworICB9CisKKyAgZ19tdXRleF91bmxvY2sgKHNldC0+bG9jayk7CisKKyAgcmV0dXJuIGlkeCA+PSAwOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9wb2xsX2ZkX2N0bF9yZWFkX3VubG9ja2VkIChHc3RQb2xsICogc2V0LCBHc3RQb2xsRkQgKiBmZCwgZ2Jvb2xlYW4gYWN0aXZlKQoreworICBnaW50IGlkeDsKKworICBHU1RfREVCVUcgKCIlcDogZmQgKGZkOiVkLCBpZHg6JWQpLCBhY3RpdmUgOiAlZCIsIHNldCwKKyAgICAgIGZkLT5mZCwgZmQtPmlkeCwgYWN0aXZlKTsKKworICBpZHggPSBmaW5kX2luZGV4IChzZXQtPmZkcywgZmQpOworCisgIGlmIChpZHggPj0gMCkgeworI2lmbmRlZiBHX09TX1dJTjMyCisgICAgc3RydWN0IHBvbGxmZCAqcGZkID0gJmdfYXJyYXlfaW5kZXggKHNldC0+ZmRzLCBzdHJ1Y3QgcG9sbGZkLCBpZHgpOworCisgICAgaWYgKGFjdGl2ZSkKKyAgICAgIHBmZC0+ZXZlbnRzIHw9IChQT0xMSU4gfCBQT0xMUFJJKTsKKyAgICBlbHNlCisgICAgICBwZmQtPmV2ZW50cyAmPSB+KFBPTExJTiB8IFBPTExQUkkpOworI2Vsc2UKKyAgICBnc3RfcG9sbF91cGRhdGVfd2luc29ja19ldmVudF9tYXNrIChzZXQsIGlkeCwgRkRfUkVBRCB8IEZEX0FDQ0VQVCwgYWN0aXZlKTsKKyNlbmRpZgorICAgIE1BUktfUkVCVUlMRCAoc2V0KTsKKyAgfSBlbHNlIHsKKyAgICBHU1RfV0FSTklORyAoIiVwOiBjb3VsZG4ndCBmaW5kIGZkICEiLCBzZXQpOworICB9CisKKyAgcmV0dXJuIGlkeCA+PSAwOworfQorCisvKioKKyAqIGdzdF9wb2xsX2ZkX2N0bF9yZWFkOgorICogQHNldDogYSBmaWxlIGRlc2NyaXB0b3Igc2V0LgorICogQGZkOiBhIGZpbGUgZGVzY3JpcHRvci4KKyAqIEBhY3RpdmU6IGEgbmV3IHN0YXR1cy4KKyAqCisgKiBDb250cm9sIHdoZXRoZXIgdGhlIGRlc2NyaXB0b3IgQGZkIGluIEBzZXQgd2lsbCBiZSBtb25pdG9yZWQgZm9yCisgKiByZWFkYWJpbGl0eS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgZGVzY3JpcHRvciB3YXMgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQuCisgKgorICogU2luY2U6IDAuMTAuMTgKKyAqLworZ2Jvb2xlYW4KK2dzdF9wb2xsX2ZkX2N0bF9yZWFkIChHc3RQb2xsICogc2V0LCBHc3RQb2xsRkQgKiBmZCwgZ2Jvb2xlYW4gYWN0aXZlKQoreworICBnYm9vbGVhbiByZXQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNldCAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmZCAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmZC0+ZmQgPj0gMCwgRkFMU0UpOworCisgIGdfbXV0ZXhfbG9jayAoc2V0LT5sb2NrKTsKKworICByZXQgPSBnc3RfcG9sbF9mZF9jdGxfcmVhZF91bmxvY2tlZCAoc2V0LCBmZCwgYWN0aXZlKTsKKworICBnX211dGV4X3VubG9jayAoc2V0LT5sb2NrKTsKKworICByZXR1cm4gcmV0OworfQorCisvKioKKyAqIGdzdF9wb2xsX2ZkX2lnbm9yZWQ6CisgKiBAc2V0OiBhIGZpbGUgZGVzY3JpcHRvciBzZXQuCisgKiBAZmQ6IGEgZmlsZSBkZXNjcmlwdG9yLgorICoKKyAqIE1hcmsgQGZkIGFzIGlnbm9yZWQgc28gdGhhdCB0aGUgbmV4dCBjYWxsIHRvIGdzdF9wb2xsX3dhaXQoKSB3aWxsIHlpZWxkCisgKiB0aGUgc2FtZSByZXN1bHQgZm9yIEBmZCBhcyBsYXN0IHRpbWUuIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaWYgbm8KKyAqIG9wZXJhdGlvbiAocmVhZC93cml0ZS9yZWN2L3NlbmQvZXRjLikgd2lsbCBiZSBwZXJmb3JtZWQgb24gQGZkIGJlZm9yZQorICogdGhlIG5leHQgY2FsbCB0byBnc3RfcG9sbF93YWl0KCkuCisgKgorICogVGhlIHJlYXNvbiB3aHkgdGhpcyBpcyBuZWVkZWQgaXMgYmVjYXVzZSB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbgorICogbWlnaHQgbm90IGFsbG93IHF1ZXJ5aW5nIHRoZSBmZCBtb3JlIHRoYW4gb25jZSBiZXR3ZWVuIGNhbGxzIHRvIG9uZSBvZgorICogdGhlIHJlLWVuYWJsaW5nIG9wZXJhdGlvbnMuCisgKgorICogU2luY2U6IDAuMTAuMTgKKyAqLwordm9pZAorZ3N0X3BvbGxfZmRfaWdub3JlZCAoR3N0UG9sbCAqIHNldCwgR3N0UG9sbEZEICogZmQpCit7CisjaWZkZWYgR19PU19XSU4zMgorICBnaW50IGlkeDsKKworICBnX3JldHVybl9pZl9mYWlsIChzZXQgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKGZkICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsIChmZC0+ZmQgPj0gMCk7CisKKyAgZ19tdXRleF9sb2NrIChzZXQtPmxvY2spOworCisgIGlkeCA9IGZpbmRfaW5kZXggKHNldC0+ZmRzLCBmZCk7CisgIGlmIChpZHggPj0gMCkgeworICAgIFdpbnNvY2tGZCAqd2ZkID0gJmdfYXJyYXlfaW5kZXggKHNldC0+ZmRzLCBXaW5zb2NrRmQsIGlkeCk7CisKKyAgICB3ZmQtPmlnbm9yZWRfZXZlbnRfbWFzayA9IHdmZC0+ZXZlbnRfbWFzayAmIChGRF9SRUFEIHwgRkRfV1JJVEUpOworICAgIE1BUktfUkVCVUlMRCAoc2V0KTsKKyAgfQorCisgIGdfbXV0ZXhfdW5sb2NrIChzZXQtPmxvY2spOworI2VuZGlmCit9CisKKy8qKgorICogZ3N0X3BvbGxfZmRfaGFzX2Nsb3NlZDoKKyAqIEBzZXQ6IGEgZmlsZSBkZXNjcmlwdG9yIHNldC4KKyAqIEBmZDogYSBmaWxlIGRlc2NyaXB0b3IuCisgKgorICogQ2hlY2sgaWYgQGZkIGluIEBzZXQgaGFzIGNsb3NlZCB0aGUgY29ubmVjdGlvbi4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgY29ubmVjdGlvbiB3YXMgY2xvc2VkLgorICoKKyAqIFNpbmNlOiAwLjEwLjE4CisgKi8KK2dib29sZWFuCitnc3RfcG9sbF9mZF9oYXNfY2xvc2VkIChjb25zdCBHc3RQb2xsICogc2V0LCBHc3RQb2xsRkQgKiBmZCkKK3sKKyAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7CisgIGdpbnQgaWR4OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZXQgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmQgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmQtPmZkID49IDAsIEZBTFNFKTsKKworICBHU1RfREVCVUcgKCIlcDogZmQgKGZkOiVkLCBpZHg6JWQpIiwgc2V0LCBmZC0+ZmQsIGZkLT5pZHgpOworCisgIGdfbXV0ZXhfbG9jayAoc2V0LT5sb2NrKTsKKworICBpZHggPSBmaW5kX2luZGV4IChzZXQtPmFjdGl2ZV9mZHMsIGZkKTsKKyAgaWYgKGlkeCA+PSAwKSB7CisjaWZuZGVmIEdfT1NfV0lOMzIKKyAgICBzdHJ1Y3QgcG9sbGZkICpwZmQgPSAmZ19hcnJheV9pbmRleCAoc2V0LT5hY3RpdmVfZmRzLCBzdHJ1Y3QgcG9sbGZkLCBpZHgpOworCisgICAgcmVzID0gKHBmZC0+cmV2ZW50cyAmIFBPTExIVVApICE9IDA7CisjZWxzZQorICAgIFdpbnNvY2tGZCAqd2ZkID0gJmdfYXJyYXlfaW5kZXggKHNldC0+YWN0aXZlX2ZkcywgV2luc29ja0ZkLCBpZHgpOworCisgICAgcmVzID0gKHdmZC0+ZXZlbnRzLmxOZXR3b3JrRXZlbnRzICYgRkRfQ0xPU0UpICE9IDA7CisjZW5kaWYKKyAgfSBlbHNlIHsKKyAgICBHU1RfV0FSTklORyAoIiVwOiBjb3VsZG4ndCBmaW5kIGZkICEiLCBzZXQpOworICB9CisKKyAgZ19tdXRleF91bmxvY2sgKHNldC0+bG9jayk7CisKKyAgcmV0dXJuIHJlczsKK30KKworLyoqCisgKiBnc3RfcG9sbF9mZF9oYXNfZXJyb3I6CisgKiBAc2V0OiBhIGZpbGUgZGVzY3JpcHRvciBzZXQuCisgKiBAZmQ6IGEgZmlsZSBkZXNjcmlwdG9yLgorICoKKyAqIENoZWNrIGlmIEBmZCBpbiBAc2V0IGhhcyBhbiBlcnJvci4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgZGVzY3JpcHRvciBoYXMgYW4gZXJyb3IuCisgKgorICogU2luY2U6IDAuMTAuMTgKKyAqLworZ2Jvb2xlYW4KK2dzdF9wb2xsX2ZkX2hhc19lcnJvciAoY29uc3QgR3N0UG9sbCAqIHNldCwgR3N0UG9sbEZEICogZmQpCit7CisgIGdib29sZWFuIHJlcyA9IEZBTFNFOworICBnaW50IGlkeDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2V0ICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZkICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZkLT5mZCA+PSAwLCBGQUxTRSk7CisKKyAgR1NUX0RFQlVHICgiJXA6IGZkIChmZDolZCwgaWR4OiVkKSIsIHNldCwgZmQtPmZkLCBmZC0+aWR4KTsKKworICBnX211dGV4X2xvY2sgKHNldC0+bG9jayk7CisKKyAgaWR4ID0gZmluZF9pbmRleCAoc2V0LT5hY3RpdmVfZmRzLCBmZCk7CisgIGlmIChpZHggPj0gMCkgeworI2lmbmRlZiBHX09TX1dJTjMyCisgICAgc3RydWN0IHBvbGxmZCAqcGZkID0gJmdfYXJyYXlfaW5kZXggKHNldC0+YWN0aXZlX2Zkcywgc3RydWN0IHBvbGxmZCwgaWR4KTsKKworICAgIHJlcyA9IChwZmQtPnJldmVudHMgJiAoUE9MTEVSUiB8IFBPTExOVkFMKSkgIT0gMDsKKyNlbHNlCisgICAgV2luc29ja0ZkICp3ZmQgPSAmZ19hcnJheV9pbmRleCAoc2V0LT5hY3RpdmVfZmRzLCBXaW5zb2NrRmQsIGlkeCk7CisKKyAgICByZXMgPSAod2ZkLT5ldmVudHMuaUVycm9yQ29kZVtGRF9DTE9TRV9CSVRdICE9IDApIHx8CisgICAgICAgICh3ZmQtPmV2ZW50cy5pRXJyb3JDb2RlW0ZEX1JFQURfQklUXSAhPSAwKSB8fAorICAgICAgICAod2ZkLT5ldmVudHMuaUVycm9yQ29kZVtGRF9XUklURV9CSVRdICE9IDApIHx8CisgICAgICAgICh3ZmQtPmV2ZW50cy5pRXJyb3JDb2RlW0ZEX0FDQ0VQVF9CSVRdICE9IDApIHx8CisgICAgICAgICh3ZmQtPmV2ZW50cy5pRXJyb3JDb2RlW0ZEX0NPTk5FQ1RfQklUXSAhPSAwKTsKKyNlbmRpZgorICB9IGVsc2UgeworICAgIEdTVF9XQVJOSU5HICgiJXA6IGNvdWxkbid0IGZpbmQgZmQgISIsIHNldCk7CisgIH0KKworICBnX211dGV4X3VubG9jayAoc2V0LT5sb2NrKTsKKworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9wb2xsX2ZkX2Nhbl9yZWFkX3VubG9ja2VkIChjb25zdCBHc3RQb2xsICogc2V0LCBHc3RQb2xsRkQgKiBmZCkKK3sKKyAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7CisgIGdpbnQgaWR4OworCisgIEdTVF9ERUJVRyAoIiVwOiBmZCAoZmQ6JWQsIGlkeDolZCkiLCBzZXQsIGZkLT5mZCwgZmQtPmlkeCk7CisKKyAgaWR4ID0gZmluZF9pbmRleCAoc2V0LT5hY3RpdmVfZmRzLCBmZCk7CisgIGlmIChpZHggPj0gMCkgeworI2lmbmRlZiBHX09TX1dJTjMyCisgICAgc3RydWN0IHBvbGxmZCAqcGZkID0gJmdfYXJyYXlfaW5kZXggKHNldC0+YWN0aXZlX2Zkcywgc3RydWN0IHBvbGxmZCwgaWR4KTsKKworICAgIHJlcyA9IChwZmQtPnJldmVudHMgJiAoUE9MTElOIHwgUE9MTFBSSSkpICE9IDA7CisjZWxzZQorICAgIFdpbnNvY2tGZCAqd2ZkID0gJmdfYXJyYXlfaW5kZXggKHNldC0+YWN0aXZlX2ZkcywgV2luc29ja0ZkLCBpZHgpOworCisgICAgcmVzID0gKHdmZC0+ZXZlbnRzLmxOZXR3b3JrRXZlbnRzICYgKEZEX1JFQUQgfCBGRF9BQ0NFUFQpKSAhPSAwOworI2VuZGlmCisgIH0gZWxzZSB7CisgICAgR1NUX1dBUk5JTkcgKCIlcDogY291bGRuJ3QgZmluZCBmZCAhIiwgc2V0KTsKKyAgfQorCisgIHJldHVybiByZXM7Cit9CisKKy8qKgorICogZ3N0X3BvbGxfZmRfY2FuX3JlYWQ6CisgKiBAc2V0OiBhIGZpbGUgZGVzY3JpcHRvciBzZXQuCisgKiBAZmQ6IGEgZmlsZSBkZXNjcmlwdG9yLgorICoKKyAqIENoZWNrIGlmIEBmZCBpbiBAc2V0IGhhcyBkYXRhIHRvIGJlIHJlYWQuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGRlc2NyaXB0b3IgaGFzIGRhdGEgdG8gYmUgcmVhZC4KKyAqCisgKiBTaW5jZTogMC4xMC4xOAorICovCitnYm9vbGVhbgorZ3N0X3BvbGxfZmRfY2FuX3JlYWQgKGNvbnN0IEdzdFBvbGwgKiBzZXQsIEdzdFBvbGxGRCAqIGZkKQoreworICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2V0ICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZkICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZkLT5mZCA+PSAwLCBGQUxTRSk7CisKKyAgZ19tdXRleF9sb2NrIChzZXQtPmxvY2spOworCisgIHJlcyA9IGdzdF9wb2xsX2ZkX2Nhbl9yZWFkX3VubG9ja2VkIChzZXQsIGZkKTsKKworICBnX211dGV4X3VubG9jayAoc2V0LT5sb2NrKTsKKworICByZXR1cm4gcmVzOworfQorCisvKioKKyAqIGdzdF9wb2xsX2ZkX2Nhbl93cml0ZToKKyAqIEBzZXQ6IGEgZmlsZSBkZXNjcmlwdG9yIHNldC4KKyAqIEBmZDogYSBmaWxlIGRlc2NyaXB0b3IuCisgKgorICogQ2hlY2sgaWYgQGZkIGluIEBzZXQgY2FuIGJlIHVzZWQgZm9yIHdyaXRpbmcuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGRlc2NyaXB0b3IgY2FuIGJlIHVzZWQgZm9yIHdyaXRpbmcuCisgKgorICogU2luY2U6IDAuMTAuMTgKKyAqLworZ2Jvb2xlYW4KK2dzdF9wb2xsX2ZkX2Nhbl93cml0ZSAoY29uc3QgR3N0UG9sbCAqIHNldCwgR3N0UG9sbEZEICogZmQpCit7CisgIGdib29sZWFuIHJlcyA9IEZBTFNFOworICBnaW50IGlkeDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2V0ICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZkICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZkLT5mZCA+PSAwLCBGQUxTRSk7CisKKyAgR1NUX0RFQlVHICgiJXA6IGZkIChmZDolZCwgaWR4OiVkKSIsIHNldCwgZmQtPmZkLCBmZC0+aWR4KTsKKworICBnX211dGV4X2xvY2sgKHNldC0+bG9jayk7CisKKyAgaWR4ID0gZmluZF9pbmRleCAoc2V0LT5hY3RpdmVfZmRzLCBmZCk7CisgIGlmIChpZHggPj0gMCkgeworI2lmbmRlZiBHX09TX1dJTjMyCisgICAgc3RydWN0IHBvbGxmZCAqcGZkID0gJmdfYXJyYXlfaW5kZXggKHNldC0+YWN0aXZlX2Zkcywgc3RydWN0IHBvbGxmZCwgaWR4KTsKKworICAgIHJlcyA9IChwZmQtPnJldmVudHMgJiBQT0xMT1VUKSAhPSAwOworI2Vsc2UKKyAgICBXaW5zb2NrRmQgKndmZCA9ICZnX2FycmF5X2luZGV4IChzZXQtPmFjdGl2ZV9mZHMsIFdpbnNvY2tGZCwgaWR4KTsKKworICAgIHJlcyA9ICh3ZmQtPmV2ZW50cy5sTmV0d29ya0V2ZW50cyAmIEZEX1dSSVRFKSAhPSAwOworI2VuZGlmCisgIH0gZWxzZSB7CisgICAgR1NUX1dBUk5JTkcgKCIlcDogY291bGRuJ3QgZmluZCBmZCAhIiwgc2V0KTsKKyAgfQorCisgIGdfbXV0ZXhfdW5sb2NrIChzZXQtPmxvY2spOworCisgIHJldHVybiByZXM7Cit9CisKKy8qKgorICogZ3N0X3BvbGxfd2FpdDoKKyAqIEBzZXQ6IGEgI0dzdFBvbGwuCisgKiBAdGltZW91dDogYSB0aW1lb3V0IGluIG5hbm9zZWNvbmRzLgorICoKKyAqIFdhaXQgZm9yIGFjdGl2aXR5IG9uIHRoZSBmaWxlIGRlc2NyaXB0b3JzIGluIEBzZXQuIFRoaXMgZnVuY3Rpb24gd2FpdHMgdXAgdG8KKyAqIHRoZSBzcGVjaWZpZWQgQHRpbWVvdXQuICBBIHRpbWVvdXQgb2YgI0dTVF9DTE9DS19USU1FX05PTkUgd2FpdHMgZm9yZXZlci4KKyAqCisgKiBGb3IgI0dzdFBvbGwgb2JqZWN0cyBjcmVhdGVkIHdpdGggZ3N0X3BvbGxfbmV3KCksIHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgYmUKKyAqIGNhbGxlZCBmcm9tIGEgc2luZ2xlIHRocmVhZCBhdCBhIHRpbWUuICBJZiBjYWxsZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLAorICogLTEgd2lsbCBiZSByZXR1cm5lZCB3aXRoIGVycm5vIHNldCB0byBFUEVSTS4KKyAqCisgKiBUaGlzIGlzIG5vdCB0cnVlIGZvciB0aW1lciAjR3N0UG9sbCBvYmplY3RzIGNyZWF0ZWQgd2l0aAorICogZ3N0X3BvbGxfbmV3X3RpbWVyKCksIHdoZXJlIGl0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtdWx0aXBsZSB0aHJlYWRzIHdhaXRpbmcKKyAqIHNpbXVsdGFuZW91c2x5LgorICoKKyAqIFJldHVybnM6IFRoZSBudW1iZXIgb2YgI0dzdFBvbGxGRCBpbiBAc2V0IHRoYXQgaGF2ZSBhY3Rpdml0eSBvciAwIHdoZW4gbm8KKyAqIGFjdGl2aXR5IHdhcyBkZXRlY3RlZCBhZnRlciBAdGltZW91dC4gSWYgYW4gZXJyb3Igb2NjdXJzLCAtMSBpcyByZXR1cm5lZAorICogYW5kIGVycm5vIGlzIHNldC4KKyAqCisgKiBTaW5jZTogMC4xMC4xOAorICovCitnaW50Citnc3RfcG9sbF93YWl0IChHc3RQb2xsICogc2V0LCBHc3RDbG9ja1RpbWUgdGltZW91dCkKK3sKKyAgZ2Jvb2xlYW4gcmVzdGFydGluZzsKKyAgZ2Jvb2xlYW4gaXNfdGltZXI7CisgIGludCByZXM7CisgIGdpbnQgb2xkX3dhaXRpbmc7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNldCAhPSBOVUxMLCAtMSk7CisKKyAgR1NUX0RFQlVHICgidGltZW91dCA6JSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTICh0aW1lb3V0KSk7CisKKyAgaXNfdGltZXIgPSBzZXQtPnRpbWVyOworCisgIC8qIGFkZCBvbmUgbW9yZSB3YWl0ZXIgKi8KKyAgb2xkX3dhaXRpbmcgPSBJTkNfV0FJVElORyAoc2V0KTsKKworICAvKiB3ZSBjYW5ub3Qgd2FpdCBmcm9tIG11bHRpcGxlIHRocmVhZHMgdW5sZXNzIHdlIGFyZSBhIHRpbWVyICovCisgIGlmIChHX1VOTElLRUxZIChvbGRfd2FpdGluZyA+IDAgJiYgIWlzX3RpbWVyKSkKKyAgICBnb3RvIGFscmVhZHlfd2FpdGluZzsKKworICAvKiBmbHVzaGluZywgZXhpdCBpbW1lZGlhdGVseSAqLworICBpZiAoR19VTkxJS0VMWSAoSVNfRkxVU0hJTkcgKHNldCkpKQorICAgIGdvdG8gZmx1c2hpbmc7CisKKyAgZG8geworICAgIEdzdFBvbGxNb2RlIG1vZGU7CisKKyAgICByZXMgPSAtMTsKKyAgICByZXN0YXJ0aW5nID0gRkFMU0U7CisKKyAgICBtb2RlID0gY2hvb3NlX21vZGUgKHNldCwgdGltZW91dCk7CisKKyAgICBpZiAoVEVTVF9SRUJVSUxEIChzZXQpKSB7CisgICAgICBnX211dGV4X2xvY2sgKHNldC0+bG9jayk7CisjaWZuZGVmIEdfT1NfV0lOMzIKKyAgICAgIGdfYXJyYXlfc2V0X3NpemUgKHNldC0+YWN0aXZlX2Zkcywgc2V0LT5mZHMtPmxlbik7CisgICAgICBtZW1jcHkgKHNldC0+YWN0aXZlX2Zkcy0+ZGF0YSwgc2V0LT5mZHMtPmRhdGEsCisgICAgICAgICAgc2V0LT5mZHMtPmxlbiAqIHNpemVvZiAoc3RydWN0IHBvbGxmZCkpOworI2Vsc2UKKyAgICAgIGlmICghZ3N0X3BvbGxfcHJlcGFyZV93aW5zb2NrX2FjdGl2ZV9zZXRzIChzZXQpKQorICAgICAgICBnb3RvIHdpbnNvY2tfZXJyb3I7CisjZW5kaWYKKyAgICAgIGdfbXV0ZXhfdW5sb2NrIChzZXQtPmxvY2spOworICAgIH0KKworICAgIHN3aXRjaCAobW9kZSkgeworICAgICAgY2FzZSBHU1RfUE9MTF9NT0RFX0FVVE86CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR1NUX1BPTExfTU9ERV9QUE9MTDoKKyAgICAgIHsKKyNpZmRlZiBIQVZFX1BQT0xMCisgICAgICAgIHN0cnVjdCB0aW1lc3BlYyB0czsKKyAgICAgICAgc3RydWN0IHRpbWVzcGVjICp0c3B0cjsKKworICAgICAgICBpZiAodGltZW91dCAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7CisgICAgICAgICAgR1NUX1RJTUVfVE9fVElNRVNQRUMgKHRpbWVvdXQsIHRzKTsKKyAgICAgICAgICB0c3B0ciA9ICZ0czsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0c3B0ciA9IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICByZXMgPQorICAgICAgICAgICAgcHBvbGwgKChzdHJ1Y3QgcG9sbGZkICopIHNldC0+YWN0aXZlX2Zkcy0+ZGF0YSwKKyAgICAgICAgICAgIHNldC0+YWN0aXZlX2Zkcy0+bGVuLCB0c3B0ciwgTlVMTCk7CisjZWxzZQorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKKyAgICAgICAgZXJybm8gPSBFTk9TWVM7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIEdTVF9QT0xMX01PREVfUE9MTDoKKyAgICAgIHsKKyNpZmRlZiBIQVZFX1BPTEwKKyAgICAgICAgZ2ludCB0OworCisgICAgICAgIGlmICh0aW1lb3V0ICE9IEdTVF9DTE9DS19USU1FX05PTkUpIHsKKyAgICAgICAgICB0ID0gR1NUX1RJTUVfQVNfTVNFQ09ORFMgKHRpbWVvdXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHQgPSAtMTsKKyAgICAgICAgfQorCisgICAgICAgIHJlcyA9CisgICAgICAgICAgICBwb2xsICgoc3RydWN0IHBvbGxmZCAqKSBzZXQtPmFjdGl2ZV9mZHMtPmRhdGEsCisgICAgICAgICAgICBzZXQtPmFjdGl2ZV9mZHMtPmxlbiwgdCk7CisjZWxzZQorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKKyAgICAgICAgZXJybm8gPSBFTk9TWVM7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIEdTVF9QT0xMX01PREVfUFNFTEVDVDoKKyNpZm5kZWYgSEFWRV9QU0VMRUNUCisgICAgICB7CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOworICAgICAgICBlcnJubyA9IEVOT1NZUzsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisjZW5kaWYKKyAgICAgIGNhc2UgR1NUX1BPTExfTU9ERV9TRUxFQ1Q6CisgICAgICB7CisjaWZuZGVmIEdfT1NfV0lOMzIKKyAgICAgICAgZmRfc2V0IHJlYWRmZHM7CisgICAgICAgIGZkX3NldCB3cml0ZWZkczsKKyAgICAgICAgZmRfc2V0IGVycm9yZmRzOworICAgICAgICBnaW50IG1heF9mZDsKKworICAgICAgICBtYXhfZmQgPSBwb2xsZmRfdG9fZmRfc2V0IChzZXQsICZyZWFkZmRzLCAmd3JpdGVmZHMsICZlcnJvcmZkcyk7CisKKyAgICAgICAgaWYgKG1vZGUgPT0gR1NUX1BPTExfTU9ERV9TRUxFQ1QpIHsKKyAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKyAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqdHZwdHI7CisKKyAgICAgICAgICBpZiAodGltZW91dCAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7CisgICAgICAgICAgICBHU1RfVElNRV9UT19USU1FVkFMICh0aW1lb3V0LCB0dik7CisgICAgICAgICAgICB0dnB0ciA9ICZ0djsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdHZwdHIgPSBOVUxMOworICAgICAgICAgIH0KKworICAgICAgICAgIEdTVF9ERUJVRyAoIkNhbGxpbmcgc2VsZWN0Iik7CisgICAgICAgICAgcmVzID0gc2VsZWN0IChtYXhfZmQgKyAxLCAmcmVhZGZkcywgJndyaXRlZmRzLCAmZXJyb3JmZHMsIHR2cHRyKTsKKyAgICAgICAgICBHU1RfREVCVUcgKCJBZnRlciBzZWxlY3QsIHJlczolZCIsIHJlcyk7CisgICAgICAgIH0gZWxzZSB7CisjaWZkZWYgSEFWRV9QU0VMRUNUCisgICAgICAgICAgc3RydWN0IHRpbWVzcGVjIHRzOworICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqdHNwdHI7CisKKyAgICAgICAgICBpZiAodGltZW91dCAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7CisgICAgICAgICAgICBHU1RfVElNRV9UT19USU1FU1BFQyAodGltZW91dCwgdHMpOworICAgICAgICAgICAgdHNwdHIgPSAmdHM7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRzcHRyID0gTlVMTDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBHU1RfREVCVUcgKCJDYWxsaW5nIHBzZWxlY3QiKTsKKyAgICAgICAgICByZXMgPQorICAgICAgICAgICAgICBwc2VsZWN0IChtYXhfZmQgKyAxLCAmcmVhZGZkcywgJndyaXRlZmRzLCAmZXJyb3JmZHMsIHRzcHRyLCBOVUxMKTsKKyAgICAgICAgICBHU1RfREVCVUcgKCJBZnRlciBwc2VsZWN0LCByZXM6JWQiLCByZXMpOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBpZiAocmVzID49IDApIHsKKyAgICAgICAgICBmZF9zZXRfdG9fcG9sbGZkIChzZXQsICZyZWFkZmRzLCAmd3JpdGVmZHMsICZlcnJvcmZkcyk7CisgICAgICAgIH0KKyNlbHNlIC8qIEdfT1NfV0lOMzIgKi8KKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7CisgICAgICAgIGVycm5vID0gRU5PU1lTOworI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBHU1RfUE9MTF9NT0RFX1dJTkRPV1M6CisgICAgICB7CisjaWZkZWYgR19PU19XSU4zMgorICAgICAgICBnaW50IGlnbm9yZV9jb3VudCA9IHNldC0+YWN0aXZlX2Zkc19pZ25vcmVkLT5sZW47CisgICAgICAgIERXT1JEIHQsIHdhaXRfcmV0OworCisgICAgICAgIGlmIChHX0xJS0VMWSAoaWdub3JlX2NvdW50ID09IDApKSB7CisgICAgICAgICAgaWYgKHRpbWVvdXQgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKKyAgICAgICAgICAgIHQgPSBHU1RfVElNRV9BU19NU0VDT05EUyAodGltZW91dCk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgdCA9IElORklOSVRFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8qIGFscmVhZHkgb25lIG9yIG1vcmUgaWdub3JlZCBmZHMsIHNvIHdlIHF1aWNrbHkgc3dlZXAgdGhlIG90aGVycyAqLworICAgICAgICAgIHQgPSAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNldC0+YWN0aXZlX2V2ZW50cy0+bGVuICE9IDApIHsKKyAgICAgICAgICB3YWl0X3JldCA9IFdTQVdhaXRGb3JNdWx0aXBsZUV2ZW50cyAoc2V0LT5hY3RpdmVfZXZlbnRzLT5sZW4sCisgICAgICAgICAgICAgIChIQU5ETEUgKikgc2V0LT5hY3RpdmVfZXZlbnRzLT5kYXRhLCBGQUxTRSwgdCwgRkFMU0UpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHdhaXRfcmV0ID0gV1NBX1dBSVRfRkFJTEVEOworICAgICAgICAgIFdTQVNldExhc3RFcnJvciAoV1NBX0lOVkFMSURfUEFSQU1FVEVSKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpZ25vcmVfY291bnQgPT0gMCAmJiB3YWl0X3JldCA9PSBXU0FfV0FJVF9USU1FT1VUKSB7CisgICAgICAgICAgcmVzID0gMDsKKyAgICAgICAgfSBlbHNlIGlmICh3YWl0X3JldCA9PSBXU0FfV0FJVF9GQUlMRUQpIHsKKyAgICAgICAgICByZXMgPSAtMTsKKyAgICAgICAgICBlcnJubyA9IGdzdF9wb2xsX3dpbnNvY2tfZXJyb3JfdG9fZXJybm8gKFdTQUdldExhc3RFcnJvciAoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgLyogdGhlIGZpcnN0IGVudHJ5IGlzIHRoZSB3YWtldXAgZXZlbnQgKi8KKyAgICAgICAgICBpZiAod2FpdF9yZXQgLSBXU0FfV0FJVF9FVkVOVF8wID49IDEpIHsKKyAgICAgICAgICAgIHJlcyA9IGdzdF9wb2xsX2NvbGxlY3Rfd2luc29ja19ldmVudHMgKHNldCk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJlcyA9IDE7ICAgICAgICAgICAgLyogd2FrZXVwIGV2ZW50ICovCisgICAgICAgICAgfQorICAgICAgICB9CisjZWxzZQorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKKyAgICAgICAgZXJybm8gPSBFTk9TWVM7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCFpc190aW1lcikgeworICAgICAgLyogQXBwbGljYXRpb25zIG5lZWRzIHRvIGNsZWFyIHRoZSBjb250cm9sIHNvY2tldCB0aGVtc2VsdmVzIGZvciB0aW1lcgorICAgICAgICogcG9sbHMuCisgICAgICAgKiBGb3Igb3RoZXIgcG9sbHMsIHdlIG5lZWQgdG8gY2xlYXIgdGhlIGNvbnRyb2wgc29ja2V0LiBJZiB0aGVyZSB3YXMgb25seQorICAgICAgICogb25lIHNvY2tldCB3aXRoIGFjdGl2aXR5IGFuZCBpdCB3YXMgdGhlIGNvbnRyb2wgc29ja2V0LCB3ZSBuZWVkIHRvCisgICAgICAgKiByZXN0YXJ0ICovCisgICAgICBpZiAocmVsZWFzZV9hbGxfd2FrZXVwIChzZXQpID4gMCAmJiByZXMgPT0gMSkKKyAgICAgICAgcmVzdGFydGluZyA9IFRSVUU7CisgICAgfQorCisgICAgLyogd2UgZ290IHdva2VuIHVwIGFuZCB3ZSBhcmUgZmx1c2hpbmcsIHdlIG5lZWQgdG8gc3RvcCAqLworICAgIGlmIChHX1VOTElLRUxZIChJU19GTFVTSElORyAoc2V0KSkpCisgICAgICBnb3RvIGZsdXNoaW5nOworCisgIH0gd2hpbGUgKEdfVU5MSUtFTFkgKHJlc3RhcnRpbmcpKTsKKworICBERUNfV0FJVElORyAoc2V0KTsKKworICByZXR1cm4gcmVzOworCisgIC8qIEVSUk9SUyAqLworYWxyZWFkeV93YWl0aW5nOgorICB7CisgICAgR1NUX0xPRyAoIiVwOiB3ZSBhcmUgYWxyZWFkeSB3YWl0aW5nIiwgc2V0KTsKKyAgICBERUNfV0FJVElORyAoc2V0KTsKKyAgICBlcnJubyA9IEVQRVJNOworICAgIHJldHVybiAtMTsKKyAgfQorZmx1c2hpbmc6CisgIHsKKyAgICBHU1RfTE9HICgiJXA6IHdlIGFyZSBmbHVzaGluZyIsIHNldCk7CisgICAgREVDX1dBSVRJTkcgKHNldCk7CisgICAgZXJybm8gPSBFQlVTWTsKKyAgICByZXR1cm4gLTE7CisgIH0KKyNpZmRlZiBHX09TX1dJTjMyCit3aW5zb2NrX2Vycm9yOgorICB7CisgICAgR1NUX0xPRyAoIiVwOiB3aW5zb2NrIGVycm9yIiwgc2V0KTsKKyAgICBnX211dGV4X3VubG9jayAoc2V0LT5sb2NrKTsKKyAgICBERUNfV0FJVElORyAoc2V0KTsKKyAgICByZXR1cm4gLTE7CisgIH0KKyNlbmRpZgorfQorCisvKioKKyAqIGdzdF9wb2xsX3NldF9jb250cm9sbGFibGU6CisgKiBAc2V0OiBhICNHc3RQb2xsLgorICogQGNvbnRyb2xsYWJsZTogbmV3IGNvbnRyb2xsYWJsZSBzdGF0ZS4KKyAqCisgKiBXaGVuIEBjb250cm9sbGFibGUgaXMgJVRSVUUsIHRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IGZ1dHVyZSBjYWxscyB0bworICogZ3N0X3BvbGxfd2FpdCgpIHdpbGwgYmUgYWZmZWN0ZWQgYnkgZ3N0X3BvbGxfcmVzdGFydCgpIGFuZAorICogZ3N0X3BvbGxfc2V0X2ZsdXNoaW5nKCkuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGNvbnRyb2xsYWJpbGl0eSBvZiBAc2V0IGNvdWxkIGJlIHVwZGF0ZWQuCisgKgorICogU2luY2U6IDAuMTAuMTgKKyAqLworZ2Jvb2xlYW4KK2dzdF9wb2xsX3NldF9jb250cm9sbGFibGUgKEdzdFBvbGwgKiBzZXQsIGdib29sZWFuIGNvbnRyb2xsYWJsZSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNldCAhPSBOVUxMLCBGQUxTRSk7CisKKyAgR1NUX0xPRyAoIiVwOiBjb250cm9sbGFibGUgOiAlZCIsIHNldCwgY29udHJvbGxhYmxlKTsKKworICBzZXQtPmNvbnRyb2xsYWJsZSA9IGNvbnRyb2xsYWJsZTsKKworICByZXR1cm4gVFJVRTsKK30KKworLyoqCisgKiBnc3RfcG9sbF9yZXN0YXJ0OgorICogQHNldDogYSAjR3N0UG9sbC4KKyAqCisgKiBSZXN0YXJ0IGFueSBnc3RfcG9sbF93YWl0KCkgdGhhdCBpcyBpbiBwcm9ncmVzcy4gVGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkKKyAqIHVzZWQgYWZ0ZXIgYWRkaW5nIG9yIHJlbW92aW5nIGRlc2NyaXB0b3JzIHRvIEBzZXQuCisgKgorICogSWYgQHNldCBpcyBub3QgY29udHJvbGxhYmxlLCB0aGVuIHRoaXMgY2FsbCB3aWxsIGhhdmUgbm8gZWZmZWN0LgorICoKKyAqIFNpbmNlOiAwLjEwLjE4CisgKi8KK3ZvaWQKK2dzdF9wb2xsX3Jlc3RhcnQgKEdzdFBvbGwgKiBzZXQpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKHNldCAhPSBOVUxMKTsKKworICBpZiAoc2V0LT5jb250cm9sbGFibGUgJiYgR0VUX1dBSVRJTkcgKHNldCkgPiAwKSB7CisgICAgLyogd2UgYXJlIGNvbnRyb2xsYWJsZSBhbmQgd2FpdGluZywgd2FrZSB1cCB0aGUgd2FpdGVyLiBUaGUgc29ja2V0IHdpbGwgYmUKKyAgICAgKiBjbGVhcmVkIGJ5IHRoZSBfd2FpdCgpIHRocmVhZCBhbmQgdGhlIHBvbGwgd2lsbCBiZSByZXN0YXJ0ZWQgKi8KKyAgICByYWlzZV93YWtldXAgKHNldCk7CisgIH0KK30KKworLyoqCisgKiBnc3RfcG9sbF9zZXRfZmx1c2hpbmc6CisgKiBAc2V0OiBhICNHc3RQb2xsLgorICogQGZsdXNoaW5nOiBuZXcgZmx1c2hpbmcgc3RhdGUuCisgKgorICogV2hlbiBAZmx1c2hpbmcgaXMgJVRSVUUsIHRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IGN1cnJlbnQgYW5kIGZ1dHVyZSBjYWxscworICogdG8gZ3N0X3BvbGxfd2FpdCgpIHdpbGwgcmV0dXJuIC0xLCB3aXRoIGVycm5vIHNldCB0byBFQlVTWS4KKyAqCisgKiBVbnNldHRpbmcgdGhlIGZsdXNoaW5nIHN0YXRlIHdpbGwgcmVzdG9yZSBub3JtYWwgb3BlcmF0aW9uIG9mIEBzZXQuCisgKgorICogU2luY2U6IDAuMTAuMTgKKyAqLwordm9pZAorZ3N0X3BvbGxfc2V0X2ZsdXNoaW5nIChHc3RQb2xsICogc2V0LCBnYm9vbGVhbiBmbHVzaGluZykKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoc2V0ICE9IE5VTEwpOworCisgIEdTVF9MT0cgKCIlcDogZmx1c2hpbmc6ICVkIiwgc2V0LCBmbHVzaGluZyk7CisKKyAgLyogdXBkYXRlIHRoZSBuZXcgc3RhdGUgZmlyc3QgKi8KKyAgU0VUX0ZMVVNISU5HIChzZXQsIGZsdXNoaW5nKTsKKworICBpZiAoZmx1c2hpbmcgJiYgc2V0LT5jb250cm9sbGFibGUgJiYgR0VUX1dBSVRJTkcgKHNldCkgPiAwKSB7CisgICAgLyogd2UgYXJlIGZsdXNoaW5nLCBjb250cm9sbGFibGUgYW5kIHdhaXRpbmcsIHdha2UgdXAgdGhlIHdhaXRlci4gV2hlbiB3ZQorICAgICAqIHN0b3AgdGhlIGZsdXNoaW5nIG9wZXJhdGlvbiB3ZSBkb24ndCBjbGVhciB0aGUgd2FrZXVwIGZkIGhlcmUsIHRoaXMgd2lsbAorICAgICAqIGhhcHBlbiBpbiB0aGUgX3dhaXQoKSB0aHJlYWQuICovCisgICAgcmFpc2Vfd2FrZXVwIChzZXQpOworICB9Cit9CisKKy8qKgorICogZ3N0X3BvbGxfd3JpdGVfY29udHJvbDoKKyAqIEBzZXQ6IGEgI0dzdFBvbGwuCisgKgorICogV3JpdGUgYSBieXRlIHRvIHRoZSBjb250cm9sIHNvY2tldCBvZiB0aGUgY29udHJvbGxhYmxlIEBzZXQuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG1vc3RseSB1c2VmdWwgZm9yIHRpbWVyICNHc3RQb2xsIG9iamVjdHMgY3JlYXRlZCB3aXRoCisgKiBnc3RfcG9sbF9uZXdfdGltZXIoKS4gCisgKgorICogSXQgd2lsbCBtYWtlIGFueSBjdXJyZW50IGFuZCBmdXR1cmUgZ3N0X3BvbGxfd2FpdCgpIGZ1bmN0aW9uIHJldHVybiB3aXRoCisgKiAxLCBtZWFuaW5nIHRoZSBjb250cm9sIHNvY2tldCBpcyBzZXQuIEFmdGVyIGFuIGVxdWFsIGFtb3VudCBvZiBjYWxscyB0bworICogZ3N0X3BvbGxfcmVhZF9jb250cm9sKCkgaGF2ZSBiZWVuIHBlcmZvcm1lZCwgY2FsbHMgdG8gZ3N0X3BvbGxfd2FpdCgpIHdpbGwKKyAqIGJsb2NrIGFnYWluIHVudGlsIHRoZWlyIHRpbWVvdXQgZXhwaXJlZC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBvbiBzdWNjZXNzLiAlRkFMU0Ugd2hlbiBAc2V0IGlzIG5vdCBjb250cm9sbGFibGUgb3Igd2hlbiB0aGUKKyAqIGJ5dGUgY291bGQgbm90IGJlIHdyaXR0ZW4uCisgKgorICogU2luY2U6IDAuMTAuMjMKKyAqLworZ2Jvb2xlYW4KK2dzdF9wb2xsX3dyaXRlX2NvbnRyb2wgKEdzdFBvbGwgKiBzZXQpCit7CisgIGdib29sZWFuIHJlczsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2V0ICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNldC0+dGltZXIsIEZBTFNFKTsKKworICByZXMgPSByYWlzZV93YWtldXAgKHNldCk7CisKKyAgcmV0dXJuIHJlczsKK30KKworLyoqCisgKiBnc3RfcG9sbF9yZWFkX2NvbnRyb2w6CisgKiBAc2V0OiBhICNHc3RQb2xsLgorICoKKyAqIFJlYWQgYSBieXRlIGZyb20gdGhlIGNvbnRyb2wgc29ja2V0IG9mIHRoZSBjb250cm9sbGFibGUgQHNldC4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgbW9zdGx5IHVzZWZ1bCBmb3IgdGltZXIgI0dzdFBvbGwgb2JqZWN0cyBjcmVhdGVkIHdpdGgKKyAqIGdzdF9wb2xsX25ld190aW1lcigpLiAKKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBvbiBzdWNjZXNzLiAlRkFMU0Ugd2hlbiBAc2V0IGlzIG5vdCBjb250cm9sbGFibGUgb3Igd2hlbiB0aGVyZQorICogd2FzIG5vIGJ5dGUgdG8gcmVhZC4KKyAqCisgKiBTaW5jZTogMC4xMC4yMworICovCitnYm9vbGVhbgorZ3N0X3BvbGxfcmVhZF9jb250cm9sIChHc3RQb2xsICogc2V0KQoreworICBnYm9vbGVhbiByZXM7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNldCAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZXQtPnRpbWVyLCBGQUxTRSk7CisKKyAgcmVzID0gcmVsZWFzZV93YWtldXAgKHNldCk7CisKKyAgcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL2dzdC9nc3Rwb2xsLmggYi9nc3QvZ3N0cG9sbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MWE3OWIKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0cG9sbC5oCkBAIC0wLDAgKzEsOTcgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBQZXRlciBLamVsbGVyc3RlZHQgPHBrakBheGlzLmNvbT4KKyAqCisgKiBnc3Rwb2xsLmg6IEZpbGUgZGVzY3JpcHRvciBzZXQKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fR1NUX1BPTExfSF9fCisjZGVmaW5lIF9fR1NUX1BPTExfSF9fCisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKworI2luY2x1ZGUgPGdzdC9nc3RjbG9jay5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICogR3N0UG9sbDoKKyAqCisgKiBBIHNldCBvZiBmaWxlL25ldHdvcmsgZGVzY3JpcHRvcnMuCisgKi8KK3R5cGVkZWYgc3RydWN0IF9Hc3RQb2xsIEdzdFBvbGw7CisKKy8qKgorICogR3N0UG9sbEZEOgorICogQGZkOiBhIGZpbGUgZGVzY3JpcHRvcgorICoKKyAqIEEgZmlsZSBkZXNjcmlwdG9yIG9iamVjdC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBpbnQgZmQ7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdpbnQgaWR4OworfSBHc3RQb2xsRkQ7CisKKy8qKgorICogR1NUX1BPTExfRkRfSU5JVDoKKyAqCisgKiBBICNHc3RQb2xsRkQgbXVzdCBiZSBpbml0aWFsaXplZCB3aXRoIHRoaXMgbWFjcm8sIGJlZm9yZSBpdCBjYW4gYmUKKyAqIHVzZWQuIFRoaXMgbWFjcm8gY2FuIHVzZWQgYmUgdG8gaW5pdGlhbGl6ZSBhIHZhcmlhYmxlLCBidXQgaXQgY2Fubm90CisgKiBiZSBhc3NpZ25lZCB0byBhIHZhcmlhYmxlLiBJbiB0aGF0IGNhc2UgeW91IGhhdmUgdG8gdXNlCisgKiBnc3RfcG9sbF9mZF9pbml0KCkuCisgKgorICogU2luY2U6IDAuMTAuMTgKKyAqLworI2RlZmluZSBHU1RfUE9MTF9GRF9JTklUICB7IC0xLCAtMSB9CisKK0dzdFBvbGwqICAgICAgICBnc3RfcG9sbF9uZXcgICAgICAgICAgICAgIChnYm9vbGVhbiBjb250cm9sbGFibGUpOworR3N0UG9sbCogICAgICAgIGdzdF9wb2xsX25ld190aW1lciAgICAgICAgKHZvaWQpOwordm9pZCAgICAgICAgICAgIGdzdF9wb2xsX2ZyZWUgICAgICAgICAgICAgKEdzdFBvbGwgKnNldCk7CisKK3ZvaWQgICAgICAgICAgICBnc3RfcG9sbF9nZXRfcmVhZF9ncG9sbGZkIChHc3RQb2xsICpzZXQsIEdQb2xsRkQgKmZkKTsKKwordm9pZCAgICAgICAgICAgIGdzdF9wb2xsX2ZkX2luaXQgICAgICAgICAgKEdzdFBvbGxGRCAqZmQpOworCitnYm9vbGVhbiAgICAgICAgZ3N0X3BvbGxfYWRkX2ZkICAgICAgICAgICAoR3N0UG9sbCAqc2V0LCBHc3RQb2xsRkQgKmZkKTsKK2dib29sZWFuICAgICAgICBnc3RfcG9sbF9yZW1vdmVfZmQgICAgICAgIChHc3RQb2xsICpzZXQsIEdzdFBvbGxGRCAqZmQpOworCitnYm9vbGVhbiAgICAgICAgZ3N0X3BvbGxfZmRfY3RsX3dyaXRlICAgICAoR3N0UG9sbCAqc2V0LCBHc3RQb2xsRkQgKmZkLCBnYm9vbGVhbiBhY3RpdmUpOworZ2Jvb2xlYW4gICAgICAgIGdzdF9wb2xsX2ZkX2N0bF9yZWFkICAgICAgKEdzdFBvbGwgKnNldCwgR3N0UG9sbEZEICpmZCwgZ2Jvb2xlYW4gYWN0aXZlKTsKK3ZvaWQgICAgICAgICAgICBnc3RfcG9sbF9mZF9pZ25vcmVkICAgICAgIChHc3RQb2xsICpzZXQsIEdzdFBvbGxGRCAqZmQpOworCitnYm9vbGVhbiAgICAgICAgZ3N0X3BvbGxfZmRfaGFzX2Nsb3NlZCAgICAoY29uc3QgR3N0UG9sbCAqc2V0LCBHc3RQb2xsRkQgKmZkKTsKK2dib29sZWFuICAgICAgICBnc3RfcG9sbF9mZF9oYXNfZXJyb3IgICAgIChjb25zdCBHc3RQb2xsICpzZXQsIEdzdFBvbGxGRCAqZmQpOworZ2Jvb2xlYW4gICAgICAgIGdzdF9wb2xsX2ZkX2Nhbl9yZWFkICAgICAgKGNvbnN0IEdzdFBvbGwgKnNldCwgR3N0UG9sbEZEICpmZCk7CitnYm9vbGVhbiAgICAgICAgZ3N0X3BvbGxfZmRfY2FuX3dyaXRlICAgICAoY29uc3QgR3N0UG9sbCAqc2V0LCBHc3RQb2xsRkQgKmZkKTsKKworZ2ludCAgICAgICAgICAgIGdzdF9wb2xsX3dhaXQgICAgICAgICAgICAgKEdzdFBvbGwgKnNldCwgR3N0Q2xvY2tUaW1lIHRpbWVvdXQpOworCitnYm9vbGVhbiAgICAgICAgZ3N0X3BvbGxfc2V0X2NvbnRyb2xsYWJsZSAoR3N0UG9sbCAqc2V0LCBnYm9vbGVhbiBjb250cm9sbGFibGUpOwordm9pZCAgICAgICAgICAgIGdzdF9wb2xsX3Jlc3RhcnQgICAgICAgICAgKEdzdFBvbGwgKnNldCk7Cit2b2lkICAgICAgICAgICAgZ3N0X3BvbGxfc2V0X2ZsdXNoaW5nICAgICAoR3N0UG9sbCAqc2V0LCBnYm9vbGVhbiBmbHVzaGluZyk7CisKK2dib29sZWFuICAgICAgICBnc3RfcG9sbF93cml0ZV9jb250cm9sICAgIChHc3RQb2xsICpzZXQpOworZ2Jvb2xlYW4gICAgICAgIGdzdF9wb2xsX3JlYWRfY29udHJvbCAgICAgKEdzdFBvbGwgKnNldCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9QT0xMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHByZXNldC5jIGIvZ3N0L2dzdHByZXNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyODA4OTYKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0cHJlc2V0LmMKQEAgLTAsMCArMSwxMTIyIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNiBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisgKgorICogZ3N0cHJlc2V0LmM6IGhlbHBlciBpbnRlcmZhY2UgZm9yIGVsZW1lbnQgcHJlc2V0cworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisvKioKKyAqIFNFQ1RJT046Z3N0cHJlc2V0CisgKiBAc2hvcnRfZGVzY3JpcHRpb246IGhlbHBlciBpbnRlcmZhY2UgZm9yIGVsZW1lbnQgcHJlc2V0cworICoKKyAqIFRoaXMgaW50ZXJmYWNlIG9mZmVycyBtZXRob2RzIHRvIHF1ZXJ5IGFuZCBtYW5pcHVsYXRlIHBhcmFtZXRlciBwcmVzZXQgc2V0cy4KKyAqIEEgcHJlc2V0IGlzIGEgYnVuY2ggb2YgcHJvcGVydHkgc2V0dGluZ3MsIHRvZ2V0aGVyIHdpdGggbWV0YSBkYXRhIGFuZCBhIG5hbWUuCisgKiBUaGUgbmFtZSBvZiBhIHByZXNldCBzZXJ2ZXMgYXMga2V5IGZvciBzdWJzZXF1ZW50IG1ldGhvZCBjYWxscyB0byBtYW5pcHVsYXRlCisgKiBzaW5nbGUgcHJlc2V0cy4KKyAqIEFsbCBpbnN0YW5jZXMgb2Ygb25lIHR5cGUgd2lsbCBzaGFyZSB0aGUgbGlzdCBvZiBwcmVzZXRzLiBUaGUgbGlzdCBpcyBjcmVhdGVkCisgKiBvbiBkZW1hbmQsIGlmIHByZXNldHMgYXJlIG5vdCB1c2VkLCB0aGUgbGlzdCBpcyBub3QgY3JlYXRlZC4KKyAqCisgKiBUaGUgaW50ZXJmYWNlIGNvbWVzIHdpdGggYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHRoYXQgc2VydmVzIG1vc3QgcGx1Z2lucy4KKyAqIFdyYXBwZXIgcGx1Z2lucyB3aWxsIG92ZXJyaWRlIG1vc3QgbWV0aG9kcyB0byBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgdGhlCisgKiBuYXRpdmUgcHJlc2V0IGZvcm1hdCBvZiB0aG9zZSB3cmFwcGVkIHBsdWdpbnMuCisgKiBPbmUgbWV0aG9kIHRoYXQgaXMgdXNlZnVsIHRvIGJlIG92ZXJyaWRkZW4gaXMgZ3N0X3ByZXNldF9nZXRfcHJvcGVydHlfbmFtZXMoKS4KKyAqIFdpdGggdGhhdCBvbmUgY2FuIGNvbnRyb2wgd2hpY2ggcHJvcGVydGllcyBhcmUgc2F2ZWQgYW5kIGluIHdoaWNoIG9yZGVyLgorICovCisvKiBGSVhNRToKKyAqIC0gbm9uIHJhY3luZXNzCisgKiAgIC0gd2UgbmVlZCB0byBhdm9pZCB0d28gaW5zdGFuY2VzIHdyaXRpbmcgdGhlIHByZXNldCBmaWxlCisgKiAgICAgLT4gZmxvY2soZmlsZW5vKCkpLCBodHRwOi8vd3d3LmVjc3QuY3N1Y2hpY28uZWR1L35iZWVqL2d1aWRlL2lwYy9mbG9jay5odG1sCisgKiAgICAgLT4gb3BlbiBleGNsdXNpdmUKKyAqICAgICAtPiBiZXR0ZXIgc2F2ZSB0aGUgbmV3IGZpbGUgdG8gYSB0ZW1wZmlsZSBhbmQgdGhlbiByZW5hbWU/CisgKiAgIC0gd2UgbGlrZSB0byBrbm93IHdoZW4gYW55IG90aGVyIGluc3RhbmNlIG1ha2VzIGNoYW5nZXMgdG8gdGhlIGtleWZpbGUKKyAqICAgICAtIHRoZW4gdWkgY2FuIGJlIHVwZGF0ZWQKKyAqICAgICAtIGFuZCB3ZSBtYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCBsb3NlIGVkaXRzCisgKiAgIC0+IGl0cyB0aGUgc2FtZSBwcm9ibGVtIGFjdHVhbGx5LCBvbmNlIGZvciBpbnNpZGUgYSBwcm9jZXNzLCBvbmNlIHN5c3RlbS0KKyAqICAgICAgd2lkZQorICogICAgIC0gY2FuIHdlIHVzZSBhIGxvY2sgaW5zaWRlIGEgbmFtZXMgc2hhcmVkIG1lbW9yeSBzZWdtZW50PworICoKKyAqIC0gbmVlZCB0byBhZGQgc3VwcG9ydCBmb3IgR3N0Q2hpbGRQcm94eQorICogICB3ZSBjYW4gZG8gdGhpcyBpbiBhIG5leHQgaXRlcmF0aW9uLCB0aGUgZm9ybWF0IGlzIGZsZXhpYmxlIGVub3VnaAorICogICBodHRwOi8vd3d3LmJ1enp0YXJkLm9yZy9pbmRleC5waHAvUHJlc2V0X2hhbmRsaW5nX2ludGVyZmFjZQorICoKKyAqIC0gc2hvdWxkIHRoZXJlIGJlIGEgJ3ByZXNldC1saXN0JyBwcm9wZXJ0eSB0byBnZXQgdGhlIHByZXNldCBsaXN0CisgKiAgIChhbmQgdG8gY29ubmVjdCBhIG5vdGlmeTo6IHRvIHRvIGxpc3RlbiBmb3IgY2hhbmdlcykKKyAqICAgd2UgY291bGQgdXNlIGdub21lX3Zmc19tb25pdG9yX2FkZCgpIHRvIG1vbml0b3IgdGhlIHVzZXIgcHJlc2V0X2ZpbGUuCisgKgorICogLSBzaG91bGQgdGhlcmUgYmUgYSAncHJlc2V0LW5hbWUnIHByb3BlcnR5IHNvIHRoYXQgd2UgY2FuIHNldCBhIHByZXNldCB2aWEKKyAqICAgZ3N0LWxhdW5jaCwgb3Igc2hvdWxkIHdlIGhhbmRsZSB0aGlzIHdpdGggc3BlY2lhbCBzeW50YXggaW4gZ3N0LWxhdW5jaDoKKyAqICAgZ3N0LWxhdW5jaCBlbGVtZW50IHByZXNldDo8cHJlc2V0LW5hbWU+IHByb3BlcnR5PXZhbHVlIC4uLgorICogICAtIHRoaXMgd291bGQgYWxsb293IHRvIGhhbnZlIHByZXNldC1idW5kbGVzIHRvbyAoYSBwcmVzZXQgb24gYmlucyB0aGF0CisgKiAgICAgc3BlY2lmaWVzIHByZXNldHMgZm9yIGNoaWxkcmVuCisgKgorICogLSBHc3RDaGlsZFByb3h5IHN1cG9ydAorICogICAtIGlmIHdlIHN0aWNrIHdpdGggR1BhcmFtU3BlYyAqKl9saXN0X3Byb3BlcnRpZXMoKQorICogICAgIHdlIG5lZWQgdG8gdXNlIGdfcGFyYW1fc3BlY19zZXRfcWRhdGEoKSB0byBzcGVjaWZ5IHRoZSBpbnN0YW5jZSBvbiBlYWNoIEdQYXJhbVNwZWMKKyAqICAgICBPQkpFQ1RfTE9DSyhvYmopOyAgLy8gQ2hpbGRQcm94eSBuZWVkcyBHc3RJdGVyYXRvciBzdXBwb3J0CisgKiAgICAgbnVtPWdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRyZW5fY291bnQob2JqKTsKKyAqICAgICBmb3IoaT0wO2k8bnVtO2krKykgeworICogICAgICAgY2hpbGQ9Z3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9pbmRleChvYmosaSk7CisgKiAgICAgICAvLyB2MSAtLS0tCisgKiAgICAgICBnX29iamVjdF9jbGFzc19saXN0X3Byb3BlcnRpZXMoY2hpbGQsJm51bSk7CisgKiAgICAgICAvLyBmb3JlYWNoIHByb3AKKyAqICAgICAgIC8vICAgZ19wYXJhbV9zcGVjX3NldF9xZGF0YShwcm9wLCBxdWFyaywgKGdwb2ludGVyKWNoaWxkKTsKKyAqICAgICAgIC8vICAgYWRkIHRvIHJlc3VsdAorICogICAgICAgLy8gdjIgLS0tLQorICogICAgICAgLy8gY2hpbGRyZW4gaGF2ZSB0byBpbXBsZW1lbnQgcHJlc2V0LWlmYWNlIHRvbyB0YWcgdGhlIHJldHVybmVkIEdQYXJhbVNwZWMqIHdpdGggdGhlIG93bmVyCisgKiAgICAgICBwcm9wcz1nc3RfcHJlc2V0X2xpc3RfcHJvcGVydGllcyhjaGlsZCk7CisgKiAgICAgICAvLyBhZGQgcHJvcHMgdG8gcmVzdWx0CisgKiAgICAgfQorICogICAgIE9CSkVDVF9VTkxPQ0sob2JqKTsKKyAqCisgKi8KKworI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCisKKyNpbmNsdWRlICJnc3RwcmVzZXQuaCIKKyNpbmNsdWRlICJnc3RpbmZvLmgiCisjaW5jbHVkZSAiZ3N0dmFsdWUuaCIKKworI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHByZXNldF9kZWJ1ZworR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoR1NUX0NBVF9ERUZBVUxUKTsKKworLyogZGVmaW5lcyBmb3Iga2V5ZmlsZSB1c2FnZSwgdGhpcyBncm91cCBjb250YWlucyB0aGUgZWxlbWVudCB0eXBlIG5hbWUgYW5kCisgKiB2ZXJzaW9uIHRoZXNlIHByZXNldHMgYmVsb25nIHRvLiAqLworI2RlZmluZSBQUkVTRVRfSEVBREVSICJfcHJlc2V0c18iCisKKy8qIGtleXMgb2YgdGhlIHByZXNldCBoZWFkZXIgc2VjdGlvbiAqLworI2RlZmluZSBQUkVTRVRfSEVBREVSX0VMRU1FTlRfTkFNRSAiZWxlbWVudC1uYW1lIgorI2RlZmluZSBQUkVTRVRfSEVBREVSX1ZFUlNJT04gInZlcnNpb24iCisKK3N0YXRpYyBHUXVhcmsgcHJlc2V0X3VzZXJfcGF0aF9xdWFyayA9IDA7CitzdGF0aWMgR1F1YXJrIHByZXNldF9zeXN0ZW1fcGF0aF9xdWFyayA9IDA7CitzdGF0aWMgR1F1YXJrIHByZXNldF9xdWFyayA9IDA7CisKKy8qc3RhdGljIEdRdWFyayBwcm9wZXJ0eV9saXN0X3F1YXJrID0gMDsqLworCisvKiBkZWZhdWx0IGlmYWNlIGltcGxlbWVudGF0aW9uICovCisKK3N0YXRpYyBnYm9vbGVhbiBnc3RfcHJlc2V0X2RlZmF1bHRfc2F2ZV9wcmVzZXRzX2ZpbGUgKEdzdFByZXNldCAqIHByZXNldCk7CisKKy8qCisgKiBwcmVzZXRfZ2V0X3BhdGhzOgorICogQHByZXNldDogYSAjR09iamVjdCB0aGF0IGltcGxlbWVudHMgI0dzdFByZXNldAorICogQHByZXNldF91c2VyX3BhdGg6IGxvY2F0aW9uIGZvciBwYXRoIG9yICVOVUxMCisgKiBAcHJlc2V0X3N5c3RlbV9wYXRoOiBsb2NhdGlvbiBmb3IgcGF0aCBvciAlTlVMTAorICoKKyAqIEZldGNoIHRoZSBwcmVzZXRfcGF0aCBmb3IgdXNlciBsb2NhbCBhbmQgc3lzdGVtIHdpZGUgc2V0dGluZ3MuIERvbid0IGZyZWUKKyAqIGFmdGVyIHVzZS4KKyAqCisgKiBSZXR1cm5zOiAlRkFMU0UgaWYgbm8gcGF0aHMgY291bGQgYmUgZm91bmQuCisgKi8KK3N0YXRpYyBnYm9vbGVhbgorcHJlc2V0X2dldF9wYXRocyAoR3N0UHJlc2V0ICogcHJlc2V0LCBjb25zdCBnY2hhciAqKiBwcmVzZXRfdXNlcl9wYXRoLAorICAgIGNvbnN0IGdjaGFyICoqIHByZXNldF9zeXN0ZW1fcGF0aCkKK3sKKyAgR1R5cGUgdHlwZSA9IEdfVFlQRV9GUk9NX0lOU1RBTkNFIChwcmVzZXQpOworICBnY2hhciAqcHJlc2V0X3BhdGg7CisgIGNvbnN0IGdjaGFyICplbGVtZW50X25hbWU7CisKKyAgLyogd2UgdXNlIHRoZSBlbGVtZW50IG5hbWUgd2hlbiB3ZSBtdXN0IGNvbnRydWN0IHRoZSBwYXRocyAqLworICBlbGVtZW50X25hbWUgPSBHX09CSkVDVF9UWVBFX05BTUUgKHByZXNldCk7CisgIEdTVF9JTkZPX09CSkVDVCAocHJlc2V0LCAiZWxlbWVudF9uYW1lOiAnJXMnIiwgZWxlbWVudF9uYW1lKTsKKworICBpZiAocHJlc2V0X3VzZXJfcGF0aCkgeworICAgIC8qIHByZXNldCB1c2VyIHBhdGggcmVxdWVzdGVkLCBzZWUgaWYgd2UgaGF2ZSBpdCBjYWNoZWQgaW4gdGhlIHFkYXRhICovCisgICAgaWYgKCEocHJlc2V0X3BhdGggPSBnX3R5cGVfZ2V0X3FkYXRhICh0eXBlLCBwcmVzZXRfdXNlcl9wYXRoX3F1YXJrKSkpIHsKKyAgICAgIGdjaGFyICpwcmVzZXRfZGlyOworCisgICAgICAvKiB1c2VyIHByZXNldHMgZ28gaW4gIHVzZXIncyBYREcgZGF0YSBkaXJlY3RvcnkuICovCisgICAgICBwcmVzZXRfZGlyID0gZ19idWlsZF9maWxlbmFtZSAoZ19nZXRfdXNlcl9kYXRhX2RpciAoKSwKKyAgICAgICAgICAiZ3N0cmVhbWVyLSIgR1NUX01BSk9STUlOT1IsICJwcmVzZXRzIiwgTlVMTCk7CisgICAgICBHU1RfSU5GT19PQkpFQ1QgKHByZXNldCwgInVzZXJfcHJlc2V0X2RpcjogJyVzJyIsIHByZXNldF9kaXIpOworICAgICAgcHJlc2V0X3BhdGggPQorICAgICAgICAgIGdfc3RyZHVwX3ByaW50ZiAoIiVzIiBHX0RJUl9TRVBBUkFUT1JfUyAiJXMucHJzIiwgcHJlc2V0X2RpciwKKyAgICAgICAgICBlbGVtZW50X25hbWUpOworICAgICAgR1NUX0lORk9fT0JKRUNUIChwcmVzZXQsICJ1c2VyX3ByZXNldF9wYXRoOiAnJXMnIiwgcHJlc2V0X3BhdGgpOworICAgICAgLyogY3JlYXRlIGRpcnMgKi8KKyAgICAgIGdfbWtkaXJfd2l0aF9wYXJlbnRzIChwcmVzZXRfZGlyLCAwNzU1KTsKKyAgICAgIGdfZnJlZSAocHJlc2V0X2Rpcik7CisKKyAgICAgIC8qIGNhY2hlIHRoZSBwcmVzZXQgcGF0aCB0byB0aGUgdHlwZSAqLworICAgICAgZ190eXBlX3NldF9xZGF0YSAodHlwZSwgcHJlc2V0X3VzZXJfcGF0aF9xdWFyaywgcHJlc2V0X3BhdGgpOworICAgIH0KKyAgICAqcHJlc2V0X3VzZXJfcGF0aCA9IHByZXNldF9wYXRoOworICB9CisKKyAgaWYgKHByZXNldF9zeXN0ZW1fcGF0aCkgeworICAgIC8qIHByZXNldCBzeXN0ZW0gcGF0aCByZXF1ZXN0ZWQsIHNlZSBpZiB3ZSBoYXZlIGl0IGNhY2hlZCBpbiB0aGUgcWRhdGEgKi8KKyAgICBpZiAoIShwcmVzZXRfcGF0aCA9IGdfdHlwZV9nZXRfcWRhdGEgKHR5cGUsIHByZXNldF9zeXN0ZW1fcGF0aF9xdWFyaykpKSB7CisgICAgICBnY2hhciAqcHJlc2V0X2RpcjsKKworICAgICAgLyogc3lzdGVtIHByZXNldHMgaW4gJyRHU1RfREFUQURJUi9nc3RyZWFtZXItMC4xMC9wcmVzZXRzL0dzdEF1ZGlvUGFub3JhbWEucHJzJyAqLworICAgICAgcHJlc2V0X2RpciA9IGdfYnVpbGRfZmlsZW5hbWUgKEdTVF9EQVRBRElSLCAiZ3N0cmVhbWVyLSIgR1NUX01BSk9STUlOT1IsCisgICAgICAgICAgInByZXNldHMiLCBOVUxMKTsKKyAgICAgIEdTVF9JTkZPX09CSkVDVCAocHJlc2V0LCAic3lzdGVtX3ByZXNldF9kaXI6ICclcyciLCBwcmVzZXRfZGlyKTsKKyAgICAgIHByZXNldF9wYXRoID0gZ19zdHJkdXBfcHJpbnRmICgiJXMiIEdfRElSX1NFUEFSQVRPUl9TICIlcy5wcnMiLAorICAgICAgICAgIHByZXNldF9kaXIsIGVsZW1lbnRfbmFtZSk7CisgICAgICBHU1RfSU5GT19PQkpFQ1QgKHByZXNldCwgInN5c3RlbV9wcmVzZXRfcGF0aDogJyVzJyIsIHByZXNldF9wYXRoKTsKKyAgICAgIC8qIGNyZWF0ZSBkaXJzICovCisgICAgICBnX21rZGlyX3dpdGhfcGFyZW50cyAocHJlc2V0X2RpciwgMDc1NSk7CisgICAgICBnX2ZyZWUgKHByZXNldF9kaXIpOworCisgICAgICAvKiBjYWNoZSB0aGUgcHJlc2V0IHBhdGggdG8gdGhlIHR5cGUgKi8KKyAgICAgIGdfdHlwZV9zZXRfcWRhdGEgKHR5cGUsIHByZXNldF9zeXN0ZW1fcGF0aF9xdWFyaywgcHJlc2V0X3BhdGgpOworICAgIH0KKyAgICAqcHJlc2V0X3N5c3RlbV9wYXRoID0gcHJlc2V0X3BhdGg7CisgIH0KKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorcHJlc2V0X3NraXBfcHJvcGVydHkgKEdQYXJhbVNwZWMgKiBwcm9wZXJ0eSkKK3sKKyAgaWYgKCgocHJvcGVydHktPmZsYWdzICYgR19QQVJBTV9SRUFEV1JJVEUpICE9IEdfUEFSQU1fUkVBRFdSSVRFKSB8fAorICAgICAgKHByb3BlcnR5LT5mbGFncyAmIEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKQorICAgIHJldHVybiBUUlVFOworICAvKiBGSVhNRTogc2tpcCBHU1RfUEFSQU1fTk9UX1BSRVNFVEFCTEUsIHNlZSAjNTIyMjA1ICovCisgIHJldHVybiBGQUxTRTsKK30KKworLyogY2FsbGVyIG11c3QgZnJlZSBAcHJlc2V0X3ZlcnNpb24gYWZ0ZXIgdXNlICovCitzdGF0aWMgR0tleUZpbGUgKgorcHJlc2V0X29wZW5fYW5kX3BhcnNlX2hlYWRlciAoR3N0UHJlc2V0ICogcHJlc2V0LCBjb25zdCBnY2hhciAqIHByZXNldF9wYXRoLAorICAgIGdjaGFyICoqIHByZXNldF92ZXJzaW9uKQoreworICBHS2V5RmlsZSAqaW47CisgIEdFcnJvciAqZXJyb3IgPSBOVUxMOworICBnYm9vbGVhbiByZXM7CisgIGNvbnN0IGdjaGFyICplbGVtZW50X25hbWU7CisgIGdjaGFyICpuYW1lOworCisgIGluID0gZ19rZXlfZmlsZV9uZXcgKCk7CisKKyAgcmVzID0gZ19rZXlfZmlsZV9sb2FkX2Zyb21fZmlsZSAoaW4sIHByZXNldF9wYXRoLAorICAgICAgR19LRVlfRklMRV9LRUVQX0NPTU1FTlRTIHwgR19LRVlfRklMRV9LRUVQX1RSQU5TTEFUSU9OUywgJmVycm9yKTsKKyAgaWYgKCFyZXMgfHwgZXJyb3IgIT0gTlVMTCkKKyAgICBnb3RvIGxvYWRfZXJyb3I7CisKKyAgLyogZWxlbWVudCB0eXBlIG5hbWUgYW5kIHByZXNldCBuYW1lIG11c3QgbWF0Y2ggb3Igd2UgYXJlIGRlYWxpbmcgd2l0aCBhIHdyb25nCisgICAqIHByZXNldCBmaWxlICovCisgIGVsZW1lbnRfbmFtZSA9IEdfT0JKRUNUX1RZUEVfTkFNRSAocHJlc2V0KTsKKyAgbmFtZSA9CisgICAgICBnX2tleV9maWxlX2dldF92YWx1ZSAoaW4sIFBSRVNFVF9IRUFERVIsIFBSRVNFVF9IRUFERVJfRUxFTUVOVF9OQU1FLAorICAgICAgTlVMTCk7CisKKyAgaWYgKCFuYW1lIHx8IHN0cmNtcCAobmFtZSwgZWxlbWVudF9uYW1lKSkKKyAgICBnb3RvIHdyb25nX25hbWU7CisKKyAgZ19mcmVlIChuYW1lKTsKKworICAvKiBnZXQgdGhlIHZlcnNpb24gbm93IHNvIHRoYXQgdGhlIGNhbGxlciBjYW4gY2hlY2sgaXQgKi8KKyAgaWYgKHByZXNldF92ZXJzaW9uKQorICAgICpwcmVzZXRfdmVyc2lvbiA9CisgICAgICAgIGdfa2V5X2ZpbGVfZ2V0X3ZhbHVlIChpbiwgUFJFU0VUX0hFQURFUiwgUFJFU0VUX0hFQURFUl9WRVJTSU9OLCBOVUxMKTsKKworICByZXR1cm4gaW47CisKKyAgLyogRVJST1JTICovCitsb2FkX2Vycm9yOgorICB7CisgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwcmVzZXQsICJVbmFibGUgdG8gcmVhZCBwcmVzZXQgZmlsZSAlczogJXMiLAorICAgICAgICBwcmVzZXRfcGF0aCwgZXJyb3ItPm1lc3NhZ2UpOworICAgIGdfZXJyb3JfZnJlZSAoZXJyb3IpOworICAgIGdfa2V5X2ZpbGVfZnJlZSAoaW4pOworICAgIHJldHVybiBOVUxMOworICB9Cit3cm9uZ19uYW1lOgorICB7CisgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwcmVzZXQsCisgICAgICAgICJXcm9uZyBlbGVtZW50IG5hbWUgaW4gcHJlc2V0IGZpbGUgJXMuIEV4cGVjdGVkICVzLCBnb3QgJXMiLAorICAgICAgICBwcmVzZXRfcGF0aCwgZWxlbWVudF9uYW1lLCBHU1RfU1RSX05VTEwgKG5hbWUpKTsKKyAgICBnX2ZyZWUgKG5hbWUpOworICAgIGdfa2V5X2ZpbGVfZnJlZSAoaW4pOworICAgIHJldHVybiBOVUxMOworICB9Cit9CisKK3N0YXRpYyBndWludDY0CitwcmVzZXRfcGFyc2VfdmVyc2lvbiAoY29uc3QgZ2NoYXIgKiBzdHJfdmVyc2lvbikKK3sKKyAgZ3VpbnQgbWFqb3IsIG1pbm9yLCBtaWNybywgbmFubzsKKyAgZ2ludCBudW07CisKKyAgbWFqb3IgPSBtaW5vciA9IG1pY3JvID0gbmFubyA9IDA7CisKKyAgLyogcGFyc2UgdmVyc2lvbiAoZS5nLiAwLjEwLjE1LjEpIHRvIGd1aW50NjQgKi8KKyAgbnVtID0gc3NjYW5mIChzdHJfdmVyc2lvbiwgIiV1LiV1LiV1LiV1IiwgJm1ham9yLCAmbWlub3IsICZtaWNybywgJm5hbm8pOworICAvKiBtYWtlIHN1cmUgd2UgaGF2ZSBhdGxlYXN0ICJtYWpvci5taW5vciIgKi8KKyAgaWYgKG51bSA+IDEpIHsKKyAgICBndWludDY0IHZlcnNpb247CisKKyAgICB2ZXJzaW9uID0gKCgoKG1ham9yIDw8IDggfCBtaW5vcikgPDwgOCkgfCBtaWNybykgPDwgOCkgfCBuYW5vOworICAgIEdTVF9ERUJVRyAoInZlcnNpb24gJXMgLT4gJSIgR19HVUlOVDY0X0ZPUk1BVCwgc3RyX3ZlcnNpb24sIHZlcnNpb24pOworICAgIHJldHVybiB2ZXJzaW9uOworICB9CisgIHJldHVybiBHX0dVSU5UNjRfQ09OU1RBTlQgKDApOworfQorCitzdGF0aWMgdm9pZAorcHJlc2V0X21lcmdlIChHS2V5RmlsZSAqIHN5c3RlbSwgR0tleUZpbGUgKiB1c2VyKQoreworICBnY2hhciAqc3RyOworICBnY2hhciAqKmdyb3VwcywgKiprZXlzOworICBnc2l6ZSBpLCBqLCBudW1fZ3JvdXBzLCBudW1fa2V5czsKKworICAvKiBjb3B5IGZpbGUgY29tbWVudCBpZiB0aGVyZSBpcyBhbnkgKi8KKyAgaWYgKChzdHIgPSBnX2tleV9maWxlX2dldF9jb21tZW50ICh1c2VyLCBOVUxMLCBOVUxMLCBOVUxMKSkpIHsKKyAgICBnX2tleV9maWxlX3NldF9jb21tZW50IChzeXN0ZW0sIE5VTEwsIE5VTEwsIHN0ciwgTlVMTCk7CisgICAgZ19mcmVlIChzdHIpOworICB9CisKKyAgLyogZ2V0IGdyb3VwcyBpbiB1c2VyIGFuZCBjb3B5IGludG8gc3lzdGVtICovCisgIGdyb3VwcyA9IGdfa2V5X2ZpbGVfZ2V0X2dyb3VwcyAodXNlciwgJm51bV9ncm91cHMpOworICBmb3IgKGkgPSAwOyBpIDwgbnVtX2dyb3VwczsgaSsrKSB7CisgICAgLyogY29weSBncm91cCBjb21tZW50IGlmIHRoZXJlIGlzIGFueSAqLworICAgIGlmICgoc3RyID0gZ19rZXlfZmlsZV9nZXRfY29tbWVudCAodXNlciwgZ3JvdXBzW2ldLCBOVUxMLCBOVUxMKSkpIHsKKyAgICAgIGdfa2V5X2ZpbGVfc2V0X2NvbW1lbnQgKHN5c3RlbSwgZ3JvdXBzW2ldLCBOVUxMLCBzdHIsIE5VTEwpOworICAgICAgZ19mcmVlIChzdHIpOworICAgIH0KKworICAgIC8qIGlnbm9yZSBwcml2YXRlIGdyb3VwcyAqLworICAgIGlmIChncm91cHNbaV1bMF0gPT0gJ18nKQorICAgICAgY29udGludWU7CisKKyAgICAvKiBpZiBncm91cCBhbHJlYWR5IGV4aXN0cyBpbiBzeXN0ZW0sIHJlbW92ZSBhbmQgcmUtYWRkIGtleXMgZnJvbSB1c2VyICovCisgICAgaWYgKGdfa2V5X2ZpbGVfaGFzX2dyb3VwIChzeXN0ZW0sIGdyb3Vwc1tpXSkpIHsKKyAgICAgIGdfa2V5X2ZpbGVfcmVtb3ZlX2dyb3VwIChzeXN0ZW0sIGdyb3Vwc1tpXSwgTlVMTCk7CisgICAgfQorCisgICAga2V5cyA9IGdfa2V5X2ZpbGVfZ2V0X2tleXMgKHVzZXIsIGdyb3Vwc1tpXSwgJm51bV9rZXlzLCBOVUxMKTsKKyAgICBmb3IgKGogPSAwOyBqIDwgbnVtX2tleXM7IGorKykgeworICAgICAgLyogY29weSBrZXkgY29tbWVudCBpZiB0aGVyZSBpcyBhbnkgKi8KKyAgICAgIGlmICgoc3RyID0gZ19rZXlfZmlsZV9nZXRfY29tbWVudCAodXNlciwgZ3JvdXBzW2ldLCBrZXlzW2pdLCBOVUxMKSkpIHsKKyAgICAgICAgZ19rZXlfZmlsZV9zZXRfY29tbWVudCAoc3lzdGVtLCBncm91cHNbaV0sIGtleXNbal0sIHN0ciwgTlVMTCk7CisgICAgICAgIGdfZnJlZSAoc3RyKTsKKyAgICAgIH0KKyAgICAgIHN0ciA9IGdfa2V5X2ZpbGVfZ2V0X3ZhbHVlICh1c2VyLCBncm91cHNbaV0sIGtleXNbal0sIE5VTEwpOworICAgICAgZ19rZXlfZmlsZV9zZXRfdmFsdWUgKHN5c3RlbSwgZ3JvdXBzW2ldLCBrZXlzW2pdLCBzdHIpOworICAgICAgZ19mcmVlIChzdHIpOworICAgIH0KKyAgICBnX3N0cmZyZWV2IChrZXlzKTsKKyAgfQorICBnX3N0cmZyZWV2IChncm91cHMpOworfQorCisvKiByZWFkcyB0aGUgdXNlciBhbmQgc3lzdGVtIHByZXNldHMgZmlsZXMgYW5kIG1lcmdlcyB0aGVtIHRvZ2V0aGVyLiBUaGlzCisgKiBmdW5jdGlvbiBjYWNoZXMgdGhlIEdLZXlGaWxlIG9uIHRoZSBlbGVtZW50IHR5cGUuIElmIHRoZXJlIGlzIG5vIGV4aXN0aW5nCisgKiBwcmVzZXQgZmlsZSwgYSBuZXcgaW4tbWVtb3J5IEdLZXlGaWxlIHdpbGwgYmUgY3JlYXRlZC4gKi8KK3N0YXRpYyBHS2V5RmlsZSAqCitwcmVzZXRfZ2V0X2tleWZpbGUgKEdzdFByZXNldCAqIHByZXNldCkKK3sKKyAgR0tleUZpbGUgKnByZXNldHM7CisgIEdUeXBlIHR5cGUgPSBHX1RZUEVfRlJPTV9JTlNUQU5DRSAocHJlc2V0KTsKKworICAvKiBmaXJzdCBzZWUgaWYgdGhlIGhhdmUgYSBjYWNoZWQgdmVyc2lvbiBmb3IgdGhlIHR5cGUgKi8KKyAgaWYgKCEocHJlc2V0cyA9IGdfdHlwZV9nZXRfcWRhdGEgKHR5cGUsIHByZXNldF9xdWFyaykpKSB7CisgICAgY29uc3QgZ2NoYXIgKnByZXNldF91c2VyX3BhdGgsICpwcmVzZXRfc3lzdGVtX3BhdGg7CisgICAgZ2NoYXIgKnN0cl92ZXJzaW9uX3VzZXIgPSBOVUxMLCAqc3RyX3ZlcnNpb25fc3lzdGVtID0gTlVMTDsKKyAgICBnYm9vbGVhbiB1cGRhdGVkX2Zyb21fc3lzdGVtID0gRkFMU0U7CisgICAgR0tleUZpbGUgKmluX3VzZXIsICppbl9zeXN0ZW07CisKKyAgICBwcmVzZXRfZ2V0X3BhdGhzIChwcmVzZXQsICZwcmVzZXRfdXNlcl9wYXRoLCAmcHJlc2V0X3N5c3RlbV9wYXRoKTsKKworICAgIC8qIHRyeSB0byBsb2FkIHRoZSB1c2VyIGFuZCBzeXN0ZW0gcHJlc2V0cywgd2UgZG8gdGhpcyB0byBnZXQgdGhlIHZlcnNpb25zCisgICAgICogb2YgYm90aCBmaWxlcy4gKi8KKyAgICBpbl91c2VyID0gcHJlc2V0X29wZW5fYW5kX3BhcnNlX2hlYWRlciAocHJlc2V0LCBwcmVzZXRfdXNlcl9wYXRoLAorICAgICAgICAmc3RyX3ZlcnNpb25fdXNlcik7CisgICAgaW5fc3lzdGVtID0gcHJlc2V0X29wZW5fYW5kX3BhcnNlX2hlYWRlciAocHJlc2V0LCBwcmVzZXRfc3lzdGVtX3BhdGgsCisgICAgICAgICZzdHJfdmVyc2lvbl9zeXN0ZW0pOworCisgICAgLyogY29tcGFyZSB2ZXJzaW9uIHRvIGNoZWNrIGZvciBtZXJnZSAqLworICAgIGlmIChpbl9zeXN0ZW0pIHsKKyAgICAgIC8qIGtlZXAgc3lzdGVtIHByZXNldHMgaWYgdGhlcmUgaXMgbm8gdXNlciBwcmVzZXQgb3Igd2hlbiB0aGUgc3lzdGVtCisgICAgICAgKiB2ZXJzaW9uIGlzIGhpZ2hlciB0aGFuIHRoZSB1c2VyIHZlcnNpb24uICovCisgICAgICBpZiAoIWluX3VzZXIpIHsKKyAgICAgICAgcHJlc2V0cyA9IGluX3N5c3RlbTsKKyAgICAgIH0gZWxzZSBpZiAocHJlc2V0X3BhcnNlX3ZlcnNpb24gKHN0cl92ZXJzaW9uX3N5c3RlbSkgPgorICAgICAgICAgIHByZXNldF9wYXJzZV92ZXJzaW9uIChzdHJfdmVyc2lvbl91c2VyKSkgeworICAgICAgICBwcmVzZXRzID0gaW5fc3lzdGVtOworICAgICAgICB1cGRhdGVkX2Zyb21fc3lzdGVtID0gVFJVRTsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKGluX3VzZXIpIHsKKyAgICAgIGlmICh1cGRhdGVkX2Zyb21fc3lzdGVtKSB7CisgICAgICAgIC8qIG1lcmdlIHVzZXIgb24gdG9wIG9mIHN5c3RlbSBwcmVzZXRzICovCisgICAgICAgIHByZXNldF9tZXJnZSAocHJlc2V0cywgaW5fdXNlcik7CisgICAgICAgIGdfa2V5X2ZpbGVfZnJlZSAoaW5fdXNlcik7CisgICAgICB9IGVsc2UgeworICAgICAgICAvKiBrZWVwIHVzZXIgcHJlc2V0cyAqLworICAgICAgICBwcmVzZXRzID0gaW5fdXNlcjsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKCFpbl91c2VyICYmICFpbl9zeXN0ZW0pIHsKKyAgICAgIC8qIHdlIGRpZCBub3QgbG9hZCBhIHVzZXIgb3Igc3lzdGVtIHByZXNldHMgZmlsZSwgY3JlYXRlIGEgbmV3IG9uZSAqLworICAgICAgcHJlc2V0cyA9IGdfa2V5X2ZpbGVfbmV3ICgpOworICAgICAgZ19rZXlfZmlsZV9zZXRfc3RyaW5nIChwcmVzZXRzLCBQUkVTRVRfSEVBREVSLCBQUkVTRVRfSEVBREVSX0VMRU1FTlRfTkFNRSwKKyAgICAgICAgICBHX09CSkVDVF9UWVBFX05BTUUgKHByZXNldCkpOworICAgIH0KKworICAgIGdfZnJlZSAoc3RyX3ZlcnNpb25fdXNlcik7CisgICAgZ19mcmVlIChzdHJfdmVyc2lvbl9zeXN0ZW0pOworCisgICAgLyogYXR0YWNoIHRoZSBwcmVzZXQgdG8gdGhlIHR5cGUgKi8KKyAgICBnX3R5cGVfc2V0X3FkYXRhICh0eXBlLCBwcmVzZXRfcXVhcmssIChncG9pbnRlcikgcHJlc2V0cyk7CisKKyAgICBpZiAodXBkYXRlZF9mcm9tX3N5c3RlbSkgeworICAgICAgZ3N0X3ByZXNldF9kZWZhdWx0X3NhdmVfcHJlc2V0c19maWxlIChwcmVzZXQpOworICAgIH0KKyAgfQorICByZXR1cm4gcHJlc2V0czsKK30KKworLyogZ2V0IGEgbGlzdCBvZiBhbGwgc3VwcG9ydGVkIHByZXNldCBuYW1lcyBmb3IgYW4gZWxlbWVudCAqLworc3RhdGljIGdjaGFyICoqCitnc3RfcHJlc2V0X2RlZmF1bHRfZ2V0X3ByZXNldF9uYW1lcyAoR3N0UHJlc2V0ICogcHJlc2V0KQoreworICBHS2V5RmlsZSAqcHJlc2V0czsKKyAgZ3NpemUgaSwgbnVtX2dyb3VwczsKKyAgZ2NoYXIgKipncm91cHM7CisKKyAgLyogZ2V0IHRoZSBwcmVzZXRzIGZyb20gdGhlIHR5cGUgKi8KKyAgaWYgKCEocHJlc2V0cyA9IHByZXNldF9nZXRfa2V5ZmlsZSAocHJlc2V0KSkpCisgICAgZ290byBub19wcmVzZXRzOworCisgIC8qIGdldCB0aGUgZ3JvdXBzLCB3aGljaCBhcmUgYWxzbyB0aGUgcHJlc2V0IG5hbWVzICovCisgIGlmICghKGdyb3VwcyA9IGdfa2V5X2ZpbGVfZ2V0X2dyb3VwcyAocHJlc2V0cywgJm51bV9ncm91cHMpKSkKKyAgICBnb3RvIG5vX2dyb3VwczsKKworICAvKiByZW1vdmUgYWxsIHByaXZhdGUgZ3JvdXAgbmFtZXMgc3RhcnRpbmcgd2l0aCAnXycgZnJvbSB0aGUgYXJyYXkgKi8KKyAgZm9yIChpID0gMDsgaSA8IG51bV9ncm91cHM7IGkrKykgeworICAgIGlmIChncm91cHNbaV1bMF0gPT0gJ18nKSB7CisgICAgICAvKiBmcmVlIHByaXZhdGUgZ3JvdXAgKi8KKyAgICAgIGdfZnJlZSAoZ3JvdXBzW2ldKTsKKyAgICAgIC8qIG1vdmUgbGFzdCBlbGVtZW50IG9mIGxpc3QgZG93biAqLworICAgICAgbnVtX2dyb3Vwcy0tOworICAgICAgLyogbW92ZSBsYXN0IGVsZW1lbnQgaW50byByZW1vdmVkIGVsZW1lbnQgKi8KKyAgICAgIGdyb3Vwc1tpXSA9IGdyb3Vwc1tudW1fZ3JvdXBzXTsKKyAgICAgIGdyb3Vwc1tudW1fZ3JvdXBzXSA9IE5VTEw7CisgICAgfQorICB9CisgIC8qIHNvcnQgdGhlIGFycmF5IG5vdyAqLworICBnX3Fzb3J0X3dpdGhfZGF0YSAoZ3JvdXBzLCBudW1fZ3JvdXBzLCBzaXplb2YgKGdjaGFyICopLAorICAgICAgKEdDb21wYXJlRGF0YUZ1bmMpIHN0cmNtcCwgTlVMTCk7CisKKyAgcmV0dXJuIGdyb3VwczsKKworICAvKiBFUlJPUlMgKi8KK25vX3ByZXNldHM6CisgIHsKKyAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHByZXNldCwgIkNvdWxkIG5vdCBsb2FkIHByZXNldHMiKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorbm9fZ3JvdXBzOgorICB7CisgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwcmVzZXQsICJDb3VsZCBub3QgZmluZCBwcmVzZXQgZ3JvdXBzIik7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KK30KKworLyogZ2V0IGEgbGlzdCBvZiBhbGwgcHJvcGVydHkgbmFtZXMgdGhhdCBhcmUgdXNlZCBmb3IgcHJlc2V0cyAqLworc3RhdGljIGdjaGFyICoqCitnc3RfcHJlc2V0X2RlZmF1bHRfZ2V0X3Byb3BlcnR5X25hbWVzIChHc3RQcmVzZXQgKiBwcmVzZXQpCit7CisgIEdQYXJhbVNwZWMgKipwcm9wczsKKyAgZ3VpbnQgaSwgaiwgbl9wcm9wczsKKyAgR09iamVjdENsYXNzICpnY2xhc3M7CisgIGdjaGFyICoqcmVzdWx0OworCisgIGdjbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKHByZXNldCkpOworCisgIC8qIGdldCBhIGxpc3Qgb2Ygbm9ybWFsIHByb3BlcnRpZXMuIAorICAgKiBGSVhNRSwgY2hhbmdlIHRoaXMgZm9yIGNoaWxkcHJveHkgc3VwcG9ydC4gKi8KKyAgcHJvcHMgPSBnX29iamVjdF9jbGFzc19saXN0X3Byb3BlcnRpZXMgKGdjbGFzcywgJm5fcHJvcHMpOworICBpZiAoIXByb3BzKQorICAgIGdvdG8gbm9fcHJvcGVydGllczsKKworICAvKiBhbGxvY2F0ZSBhcnJheSBiaWcgZW5vdWdoIHRvIGhvbGQgdGhlIHdvcnN0IGNhc2UsIGluY2x1ZGluZyBhIHRlcm1pbmF0aW5nCisgICAqIE5VTEwgcG9pbnRlci4gKi8KKyAgcmVzdWx0ID0gZ19uZXcgKGdjaGFyICosIG5fcHJvcHMgKyAxKTsKKworICAvKiBub3cgZmlsdGVyIG91dCB0aGUgcHJvcGVydGllcyB0aGF0IHdlIGNhbiB1c2UgZm9yIHByZXNldHMgKi8KKyAgR1NUX0RFQlVHX09CSkVDVCAocHJlc2V0LCAiICBmaWx0ZXJpbmcgcHJvcGVydGllczogJXUiLCBuX3Byb3BzKTsKKyAgZm9yIChpID0gaiA9IDA7IGkgPCBuX3Byb3BzOyBpKyspIHsKKyAgICBpZiAocHJlc2V0X3NraXBfcHJvcGVydHkgKHByb3BzW2ldKSkKKyAgICAgIGNvbnRpbnVlOworCisgICAgLyogY29weSBhbmQgaW5jcmVtZW50IG91dCBwb2ludGVyICovCisgICAgcmVzdWx0W2orK10gPSBnX3N0cmR1cCAocHJvcHNbaV0tPm5hbWUpOworICB9CisgIHJlc3VsdFtqXSA9IE5VTEw7CisgIGdfZnJlZSAocHJvcHMpOworCisgIHJldHVybiByZXN1bHQ7CisKKyAgLyogRVJST1JTICovCitub19wcm9wZXJ0aWVzOgorICB7CisgICAgR1NUX0lORk9fT0JKRUNUIChwcmVzZXQsICJvYmplY3QgaGFzIG5vIHByb3BlcnRpZXMiKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorfQorCisvKiBsb2FkIHRoZSBwcmVzZXRzIG9mIEBuYW1lIGZvciB0aGUgaW5zdGFuY2UgQHByZXNldC4gUmV0dXJucyAlRkFMU0UgaWYgc29tZXRoaW5nCisgKiBmYWlsZWQuICovCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9wcmVzZXRfZGVmYXVsdF9sb2FkX3ByZXNldCAoR3N0UHJlc2V0ICogcHJlc2V0LCBjb25zdCBnY2hhciAqIG5hbWUpCit7CisgIEdLZXlGaWxlICpwcmVzZXRzOworICBnY2hhciAqKnByb3BzOworICBndWludCBpOworICBHT2JqZWN0Q2xhc3MgKmdjbGFzczsKKworICAvKiBnZXQgdGhlIHByZXNldHMgZnJvbSB0aGUgdHlwZSAqLworICBpZiAoIShwcmVzZXRzID0gcHJlc2V0X2dldF9rZXlmaWxlIChwcmVzZXQpKSkKKyAgICBnb3RvIG5vX3ByZXNldHM7CisKKyAgLyogZ2V0IHRoZSBwcmVzZXQgbmFtZSAqLworICBpZiAoIWdfa2V5X2ZpbGVfaGFzX2dyb3VwIChwcmVzZXRzLCBuYW1lKSkKKyAgICBnb3RvIG5vX2dyb3VwOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHByZXNldCwgImxvYWRpbmcgcHJlc2V0IDogJyVzJyIsIG5hbWUpOworCisgIC8qIGdldCB0aGUgcHJvcGVydGllcyB0aGF0IHdlIGNhbiBjb25maWd1cmUgaW4gdGhpcyBlbGVtZW50ICovCisgIGlmICghKHByb3BzID0gZ3N0X3ByZXNldF9nZXRfcHJvcGVydHlfbmFtZXMgKHByZXNldCkpKQorICAgIGdvdG8gbm9fcHJvcGVydGllczsKKworICBnY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChwcmVzZXQpKTsKKworICAvKiBmb3IgZWFjaCBvZiB0aGUgcHJvcGVydHkgbmFtZXMsIGZpbmQgdGhlIHByZXNldCBwYXJhbWV0ZXIgYW5kIHRyeSB0bworICAgKiBjb25maWd1cmUgdGhlIHByb3BlcnR5IHdpdGggaXRzIHZhbHVlICovCisgIGZvciAoaSA9IDA7IHByb3BzW2ldOyBpKyspIHsKKyAgICBnY2hhciAqc3RyOworICAgIEdWYWx1ZSBndmFsdWUgPSB7IDAsIH07CisgICAgR1BhcmFtU3BlYyAqcHJvcGVydHk7CisKKyAgICAvKiBjaGVjayBpZiB3ZSBoYXZlIGEgc2V0dGluZ3MgZm9yIHRoaXMgZWxlbWVudCBwcm9wZXJ0eSAqLworICAgIGlmICghKHN0ciA9IGdfa2V5X2ZpbGVfZ2V0X3ZhbHVlIChwcmVzZXRzLCBuYW1lLCBwcm9wc1tpXSwgTlVMTCkpKSB7CisgICAgICAvKiB0aGUgZWxlbWVudCBoYXMgYSBwcm9wZXJ0eSBidXQgdGhlIHBhcmFtZXRlciBpcyBub3QgaW4gdGhlIGtleWZpbGUgKi8KKyAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocHJlc2V0LCAicGFyYW1ldGVyICclcycgbm90IGluIHByZXNldCIsIHByb3BzW2ldKTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHByZXNldCwgInNldHRpbmcgdmFsdWUgJyVzJyBmb3IgcHJvcGVydHkgJyVzJyIsIHN0ciwKKyAgICAgICAgcHJvcHNbaV0pOworCisgICAgLyogRklYTUUsIGNoYW5nZSBmb3IgY2hpbGRwcm94eSB0byBnZXQgdGhlIHByb3BlcnR5IGFuZCBlbGVtZW50LiAgKi8KKyAgICBpZiAoIShwcm9wZXJ0eSA9IGdfb2JqZWN0X2NsYXNzX2ZpbmRfcHJvcGVydHkgKGdjbGFzcywgcHJvcHNbaV0pKSkgeworICAgICAgLyogdGhlIHBhcmFtZXRlciB3YXMgaW4gdGhlIGtleWZpbGUsIHRoZSBlbGVtZW50IHNhaWQgaXQgc3VwcG9ydGVkIGl0IGJ1dAorICAgICAgICogdGhlbiB0aGUgcHJvcGVydHkgd2FzIG5vdCBmb3VuZCBpbiB0aGUgZWxlbWVudC4gVGhpcyBzaG91bGQgbm90IGhhcHBlbi4gKi8KKyAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocHJlc2V0LCAicHJvcGVydHkgJyVzJyBub3QgaW4gb2JqZWN0IiwgcHJvcHNbaV0pOworICAgICAgZ19mcmVlIChzdHIpOworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgLyogdHJ5IHRvIGRlc2VyaWFsaXplIHRoZSBwcm9wZXJ0eSB2YWx1ZSBmcm9tIHRoZSBrZXlmaWxlIGFuZCBzZXQgaXQgYXMKKyAgICAgKiB0aGUgb2JqZWN0IHByb3BlcnR5ICovCisgICAgZ192YWx1ZV9pbml0ICgmZ3ZhbHVlLCBwcm9wZXJ0eS0+dmFsdWVfdHlwZSk7CisgICAgaWYgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZSAoJmd2YWx1ZSwgc3RyKSkgeworICAgICAgLyogRklYTUUsIGNoYW5nZSBmb3IgY2hpbGRwcm94eSBzdXBwb3J0ICovCisgICAgICBnX29iamVjdF9zZXRfcHJvcGVydHkgKEdfT0JKRUNUIChwcmVzZXQpLCBwcm9wc1tpXSwgJmd2YWx1ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocHJlc2V0LAorICAgICAgICAgICJkZXNlcmlhbGl6YXRpb24gb2YgdmFsdWUgJyVzJyBmb3IgcHJvcGVydHkgJyVzJyBmYWlsZWQiLCBzdHIsCisgICAgICAgICAgcHJvcHNbaV0pOworICAgIH0KKyAgICBnX3ZhbHVlX3Vuc2V0ICgmZ3ZhbHVlKTsKKyAgICBnX2ZyZWUgKHN0cik7CisgIH0KKyAgZ19zdHJmcmVldiAocHJvcHMpOworCisgIHJldHVybiBUUlVFOworCisgIC8qIEVSUk9SUyAqLworbm9fcHJlc2V0czoKKyAgeworICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocHJlc2V0LCAibm8gcHJlc2V0cyIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorbm9fZ3JvdXA6CisgIHsKKyAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHByZXNldCwgIm5vIHByZXNldCBuYW1lZCAnJXMnIiwgbmFtZSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Citub19wcm9wZXJ0aWVzOgorICB7CisgICAgR1NUX0lORk9fT0JKRUNUIChwcmVzZXQsICJubyBwcm9wZXJ0aWVzIik7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKKy8qIHNhdmUgdGhlIHByZXNldHMgZmlsZS4gQSBjb3B5IG9mIHRoZSBleGlzdGluZyBwcmVzZXRzIGZpbGUgaXMgc3RvcmVkIGluIGEKKyAqIC5iYWsgZmlsZSAqLworc3RhdGljIGdib29sZWFuCitnc3RfcHJlc2V0X2RlZmF1bHRfc2F2ZV9wcmVzZXRzX2ZpbGUgKEdzdFByZXNldCAqIHByZXNldCkKK3sKKyAgR0tleUZpbGUgKnByZXNldHM7CisgIGNvbnN0IGdjaGFyICpwcmVzZXRfcGF0aDsKKyAgR0Vycm9yICplcnJvciA9IE5VTEw7CisgIGdjaGFyICpiYWtfZmlsZV9uYW1lOworICBnYm9vbGVhbiBiYWNrdXAgPSBUUlVFOworICBnY2hhciAqZGF0YTsKKyAgZ3NpemUgZGF0YV9zaXplOworCisgIHByZXNldF9nZXRfcGF0aHMgKHByZXNldCwgJnByZXNldF9wYXRoLCBOVUxMKTsKKworICAvKiBnZXQgdGhlIHByZXNldHMgZnJvbSB0aGUgdHlwZSAqLworICBpZiAoIShwcmVzZXRzID0gcHJlc2V0X2dldF9rZXlmaWxlIChwcmVzZXQpKSkKKyAgICBnb3RvIG5vX3ByZXNldHM7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocHJlc2V0LCAic2F2aW5nIHByZXNldCBmaWxlOiAnJXMnIiwgcHJlc2V0X3BhdGgpOworCisgIC8qIGNyZWF0ZSBiYWNrdXAgaWYgcG9zc2libGUgKi8KKyAgYmFrX2ZpbGVfbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzLmJhayIsIHByZXNldF9wYXRoKTsKKyAgaWYgKGdfZmlsZV90ZXN0IChiYWtfZmlsZV9uYW1lLCBHX0ZJTEVfVEVTVF9FWElTVFMpKSB7CisgICAgaWYgKGdfdW5saW5rIChiYWtfZmlsZV9uYW1lKSkgeworICAgICAgYmFja3VwID0gRkFMU0U7CisgICAgICBHU1RfSU5GT19PQkpFQ1QgKHByZXNldCwgImNhbm5vdCByZW1vdmUgb2xkIGJhY2t1cCBmaWxlIDogJXMiLAorICAgICAgICAgIGJha19maWxlX25hbWUpOworICAgIH0KKyAgfQorICBpZiAoYmFja3VwKSB7CisgICAgaWYgKGdfcmVuYW1lIChwcmVzZXRfcGF0aCwgYmFrX2ZpbGVfbmFtZSkpIHsKKyAgICAgIEdTVF9JTkZPX09CSkVDVCAocHJlc2V0LCAiY2Fubm90IGJhY2t1cCBmaWxlIDogJXMgLT4gJXMiLCBwcmVzZXRfcGF0aCwKKyAgICAgICAgICBiYWtfZmlsZV9uYW1lKTsKKyAgICB9CisgIH0KKyAgZ19mcmVlIChiYWtfZmlsZV9uYW1lKTsKKworICAvKiB1cGRhdGUgZ3N0cmVhbWVyIHZlcnNpb24gKi8KKyAgZ19rZXlfZmlsZV9zZXRfc3RyaW5nIChwcmVzZXRzLCBQUkVTRVRfSEVBREVSLCBQUkVTRVRfSEVBREVSX1ZFUlNJT04sCisgICAgICBQQUNLQUdFX1ZFUlNJT04pOworCisgIC8qIGdldCBuZXcgY29udGVudHMsIHdlZSBuZWVkIHRoaXMgdG8gc2F2ZSBpdCAqLworICBpZiAoIShkYXRhID0gZ19rZXlfZmlsZV90b19kYXRhIChwcmVzZXRzLCAmZGF0YV9zaXplLCAmZXJyb3IpKSkKKyAgICBnb3RvIGNvbnZlcnRfZmFpbGVkOworCisgIC8qIHdyaXRlIHByZXNldHMgKi8KKyAgaWYgKCFnX2ZpbGVfc2V0X2NvbnRlbnRzIChwcmVzZXRfcGF0aCwgZGF0YSwgZGF0YV9zaXplLCAmZXJyb3IpKQorICAgIGdvdG8gd3JpdGVfZmFpbGVkOworCisgIGdfZnJlZSAoZGF0YSk7CisKKyAgcmV0dXJuIFRSVUU7CisKKyAgLyogRVJST1JTICovCitub19wcmVzZXRzOgorICB7CisgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwcmVzZXQsCisgICAgICAgICJubyBwcmVzZXRzLCB0cnlpbmcgdG8gdW5saW5rIHBvc3NpYmx5IGV4aXN0aW5nIHByZXNldCBmaWxlOiAnJXMnIiwKKyAgICAgICAgcHJlc2V0X3BhdGgpOworICAgIGdfdW5saW5rIChwcmVzZXRfcGF0aCk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Citjb252ZXJ0X2ZhaWxlZDoKKyAgeworICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocHJlc2V0LCAiY2FuIG5vdCBnZXQgdGhlIGtleWZpbGUgY29udGVudHM6ICVzIiwKKyAgICAgICAgZXJyb3ItPm1lc3NhZ2UpOworICAgIGdfZXJyb3JfZnJlZSAoZXJyb3IpOworICAgIGdfZnJlZSAoZGF0YSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit3cml0ZV9mYWlsZWQ6CisgIHsKKyAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHByZXNldCwgIlVuYWJsZSB0byBzdG9yZSBwcmVzZXQgZmlsZSAlczogJXMiLAorICAgICAgICBwcmVzZXRfcGF0aCwgZXJyb3ItPm1lc3NhZ2UpOworICAgIGdfZXJyb3JfZnJlZSAoZXJyb3IpOworICAgIGdfZnJlZSAoZGF0YSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKKy8qIHNhdmUgdGhlIHByZXNldCB3aXRoIHRoZSBnaXZlbiBuYW1lICovCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9wcmVzZXRfZGVmYXVsdF9zYXZlX3ByZXNldCAoR3N0UHJlc2V0ICogcHJlc2V0LCBjb25zdCBnY2hhciAqIG5hbWUpCit7CisgIEdLZXlGaWxlICpwcmVzZXRzOworICBnY2hhciAqKnByb3BzOworICBndWludCBpOworICBHT2JqZWN0Q2xhc3MgKmdjbGFzczsKKworICBHU1RfSU5GT19PQkpFQ1QgKHByZXNldCwgInNhdmluZyBuZXcgcHJlc2V0OiAlcyIsIG5hbWUpOworCisgIC8qIGdldCB0aGUgcHJlc2V0cyBmcm9tIHRoZSB0eXBlICovCisgIGlmICghKHByZXNldHMgPSBwcmVzZXRfZ2V0X2tleWZpbGUgKHByZXNldCkpKQorICAgIGdvdG8gbm9fcHJlc2V0czsKKworICAvKiB0YWtlIGNvcGllcyBvZiBjdXJyZW50IGdvYmplY3QgcHJvcGVydGllcyBmcm9tIHByZXNldCAqLworICBpZiAoIShwcm9wcyA9IGdzdF9wcmVzZXRfZ2V0X3Byb3BlcnR5X25hbWVzIChwcmVzZXQpKSkKKyAgICBnb3RvIG5vX3Byb3BlcnRpZXM7CisKKyAgZ2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAocHJlc2V0KSk7CisKKyAgLyogbG9vcCBvdmVyIHRoZSBvYmplY3QgcHJvcGVydGllcyBhbmQgc3RvcmUgdGhlIHByb3BlcnR5IHZhbHVlIGluIHRoZQorICAgKiBrZXlmaWxlICovCisgIGZvciAoaSA9IDA7IHByb3BzW2ldOyBpKyspIHsKKyAgICBHVmFsdWUgZ3ZhbHVlID0geyAwLCB9OworICAgIGdjaGFyICpzdHI7CisgICAgR1BhcmFtU3BlYyAqcHJvcGVydHk7CisKKyAgICAvKiBGSVhNRSwgY2hhbmdlIGZvciBjaGlsZHByb3h5IHRvIGdldCB0aGUgcHJvcGVydHkgYW5kIGVsZW1lbnQuICAqLworICAgIGlmICghKHByb3BlcnR5ID0gZ19vYmplY3RfY2xhc3NfZmluZF9wcm9wZXJ0eSAoZ2NsYXNzLCBwcm9wc1tpXSkpKSB7CisgICAgICAvKiB0aGUgZWxlbWVudCBzYWlkIGl0IHN1cHBvcnRlZCB0aGUgcHJvcGVydHkgYnV0IHRoZW4gaXQgZG9lcyBub3QgaGF2ZQorICAgICAgICogdGhhdCBwcm9wZXJ0eS4gVGhpcyBzaG91bGQgbm90IGhhcHBlbi4gKi8KKyAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocHJlc2V0LCAicHJvcGVydHkgJyVzJyBub3QgaW4gb2JqZWN0IiwgcHJvcHNbaV0pOworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgZ192YWx1ZV9pbml0ICgmZ3ZhbHVlLCBwcm9wZXJ0eS0+dmFsdWVfdHlwZSk7CisgICAgLyogRklYTUUsIGNoYW5nZSBmb3IgY2hpbGRwcm94eSAqLworICAgIGdfb2JqZWN0X2dldF9wcm9wZXJ0eSAoR19PQkpFQ1QgKHByZXNldCksIHByb3BzW2ldLCAmZ3ZhbHVlKTsKKworICAgIGlmICgoc3RyID0gZ3N0X3ZhbHVlX3NlcmlhbGl6ZSAoJmd2YWx1ZSkpKSB7CisgICAgICBnX2tleV9maWxlX3NldF9zdHJpbmcgKHByZXNldHMsIG5hbWUsIHByb3BzW2ldLCAoZ3BvaW50ZXIpIHN0cik7CisgICAgICBnX2ZyZWUgKHN0cik7CisgICAgfSBlbHNlIHsKKyAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocHJlc2V0LCAic2VyaWFsaXphdGlvbiBmb3IgcHJvcGVydHkgJyVzJyBmYWlsZWQiLAorICAgICAgICAgIHByb3BzW2ldKTsKKyAgICB9CisgICAgZ192YWx1ZV91bnNldCAoJmd2YWx1ZSk7CisgIH0KKyAgR1NUX0lORk9fT0JKRUNUIChwcmVzZXQsICIgIHNhdmVkIik7CisgIGdfc3RyZnJlZXYgKHByb3BzKTsKKworICAvKiBzYXZlIHVwZGF0ZWQgdmVyc2lvbiAqLworICByZXR1cm4gZ3N0X3ByZXNldF9kZWZhdWx0X3NhdmVfcHJlc2V0c19maWxlIChwcmVzZXQpOworCisgIC8qIEVSUk9SUyAqLworbm9fcHJlc2V0czoKKyAgeworICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocHJlc2V0LCAibm8gcHJlc2V0cyIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorbm9fcHJvcGVydGllczoKKyAgeworICAgIEdTVF9JTkZPX09CSkVDVCAocHJlc2V0LCAibm8gcHJvcGVydGllcyIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCisvKiBjb3BpZXMgYWxsIGtleXMgYW5kIGNvbW1lbnRzIGZyb20gb25lIGdyb3VwIHRvIGFub3RoZXIsIGRlbGV0aW5nIHRoZSBvbGQKKyAqIGdyb3VwLiAqLworc3RhdGljIGdib29sZWFuCitnc3RfcHJlc2V0X2RlZmF1bHRfcmVuYW1lX3ByZXNldCAoR3N0UHJlc2V0ICogcHJlc2V0LCBjb25zdCBnY2hhciAqIG9sZF9uYW1lLAorICAgIGNvbnN0IGdjaGFyICogbmV3X25hbWUpCit7CisgIEdLZXlGaWxlICpwcmVzZXRzOworICBnY2hhciAqc3RyOworICBnY2hhciAqKmtleXM7CisgIGdzaXplIGksIG51bV9rZXlzOworCisgIC8qIGdldCB0aGUgcHJlc2V0cyBmcm9tIHRoZSB0eXBlICovCisgIGlmICghKHByZXNldHMgPSBwcmVzZXRfZ2V0X2tleWZpbGUgKHByZXNldCkpKQorICAgIGdvdG8gbm9fcHJlc2V0czsKKworICBpZiAoIWdfa2V5X2ZpbGVfaGFzX2dyb3VwIChwcmVzZXRzLCBvbGRfbmFtZSkpCisgICAgZ290byBub19ncm91cDsKKworICAvKiBjb3B5IGdyb3VwIGNvbW1lbnQgaWYgdGhlcmUgaXMgYW55ICovCisgIGlmICgoc3RyID0gZ19rZXlfZmlsZV9nZXRfY29tbWVudCAocHJlc2V0cywgb2xkX25hbWUsIE5VTEwsIE5VTEwpKSkgeworICAgIGdfa2V5X2ZpbGVfc2V0X2NvbW1lbnQgKHByZXNldHMsIG5ld19uYW1lLCBOVUxMLCBzdHIsIE5VTEwpOworICAgIGdfZnJlZSAoc3RyKTsKKyAgfQorCisgIC8qIGdldCBhbGwga2V5cyBmcm9tIHRoZSBvbGQgZ3JvdXAgYW5kIGNvcHkgdGhlbSBpbiB0aGUgbmV3IGdyb3VwICovCisgIGtleXMgPSBnX2tleV9maWxlX2dldF9rZXlzIChwcmVzZXRzLCBvbGRfbmFtZSwgJm51bV9rZXlzLCBOVUxMKTsKKyAgZm9yIChpID0gMDsgaSA8IG51bV9rZXlzOyBpKyspIHsKKyAgICAvKiBjb3B5IGtleSBjb21tZW50IGlmIHRoZXJlIGlzIGFueSAqLworICAgIGlmICgoc3RyID0gZ19rZXlfZmlsZV9nZXRfY29tbWVudCAocHJlc2V0cywgb2xkX25hbWUsIGtleXNbaV0sIE5VTEwpKSkgeworICAgICAgZ19rZXlfZmlsZV9zZXRfY29tbWVudCAocHJlc2V0cywgbmV3X25hbWUsIGtleXNbaV0sIHN0ciwgTlVMTCk7CisgICAgICBnX2ZyZWUgKHN0cik7CisgICAgfQorICAgIC8qIGNvcHkga2V5IHZhbHVlICovCisgICAgc3RyID0gZ19rZXlfZmlsZV9nZXRfdmFsdWUgKHByZXNldHMsIG9sZF9uYW1lLCBrZXlzW2ldLCBOVUxMKTsKKyAgICBnX2tleV9maWxlX3NldF92YWx1ZSAocHJlc2V0cywgbmV3X25hbWUsIGtleXNbaV0sIHN0cik7CisgICAgZ19mcmVlIChzdHIpOworICB9CisgIGdfc3RyZnJlZXYgKGtleXMpOworCisgIC8qIHJlbW92ZSBvbGQgZ3JvdXAgKi8KKyAgZ19rZXlfZmlsZV9yZW1vdmVfZ3JvdXAgKHByZXNldHMsIG9sZF9uYW1lLCBOVUxMKTsKKworICAvKiBzYXZlIHVwZGF0ZWQgdmVyc2lvbiAqLworICByZXR1cm4gZ3N0X3ByZXNldF9kZWZhdWx0X3NhdmVfcHJlc2V0c19maWxlIChwcmVzZXQpOworCisgIC8qIEVSUk9SUyAqLworbm9fcHJlc2V0czoKKyAgeworICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocHJlc2V0LCAibm8gcHJlc2V0cyIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorbm9fZ3JvdXA6CisgIHsKKyAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHByZXNldCwgIm5vIHByZXNldCBuYW1lZCAlcyIsIG9sZF9uYW1lKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworLyogZGVsZXRlIGEgZ3JvdXAgZnJvbSB0aGUga2V5ZmlsZSAqLworc3RhdGljIGdib29sZWFuCitnc3RfcHJlc2V0X2RlZmF1bHRfZGVsZXRlX3ByZXNldCAoR3N0UHJlc2V0ICogcHJlc2V0LCBjb25zdCBnY2hhciAqIG5hbWUpCit7CisgIEdLZXlGaWxlICpwcmVzZXRzOworCisgIC8qIGdldCB0aGUgcHJlc2V0cyBmcm9tIHRoZSB0eXBlICovCisgIGlmICghKHByZXNldHMgPSBwcmVzZXRfZ2V0X2tleWZpbGUgKHByZXNldCkpKQorICAgIGdvdG8gbm9fcHJlc2V0czsKKworICAvKiBnZXQgdGhlIGdyb3VwICovCisgIGlmICghZ19rZXlfZmlsZV9oYXNfZ3JvdXAgKHByZXNldHMsIG5hbWUpKQorICAgIGdvdG8gbm9fZ3JvdXA7CisKKyAgLyogcmVtb3ZlIHRoZSBncm91cCAqLworICBnX2tleV9maWxlX3JlbW92ZV9ncm91cCAocHJlc2V0cywgbmFtZSwgTlVMTCk7CisKKyAgLyogc2F2ZSB1cGRhdGVkIHZlcnNpb24gKi8KKyAgcmV0dXJuIGdzdF9wcmVzZXRfZGVmYXVsdF9zYXZlX3ByZXNldHNfZmlsZSAocHJlc2V0KTsKKworICAvKiBFUlJPUlMgKi8KK25vX3ByZXNldHM6CisgIHsKKyAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHByZXNldCwgIm5vIHByZXNldHMiKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK25vX2dyb3VwOgorICB7CisgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwcmVzZXQsICJubyBwcmVzZXQgbmFtZWQgJXMiLCBuYW1lKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworc3RhdGljIGdib29sZWFuCitnc3RfcHJlc2V0X2RlZmF1bHRfc2V0X21ldGEgKEdzdFByZXNldCAqIHByZXNldCwgY29uc3QgZ2NoYXIgKiBuYW1lLAorICAgIGNvbnN0IGdjaGFyICogdGFnLCBjb25zdCBnY2hhciAqIHZhbHVlKQoreworICBHS2V5RmlsZSAqcHJlc2V0czsKKyAgZ2NoYXIgKmtleTsKKworICAvKiBnZXQgdGhlIHByZXNldHMgZnJvbSB0aGUgdHlwZSAqLworICBpZiAoIShwcmVzZXRzID0gcHJlc2V0X2dldF9rZXlmaWxlIChwcmVzZXQpKSkKKyAgICBnb3RvIG5vX3ByZXNldHM7CisKKyAga2V5ID0gZ19zdHJkdXBfcHJpbnRmICgiX21ldGEvJXMiLCB0YWcpOworICBpZiAodmFsdWUgJiYgKnZhbHVlKSB7CisgICAgZ19rZXlfZmlsZV9zZXRfdmFsdWUgKHByZXNldHMsIG5hbWUsIGtleSwgdmFsdWUpOworICB9IGVsc2UgeworICAgIGdfa2V5X2ZpbGVfcmVtb3ZlX2tleSAocHJlc2V0cywgbmFtZSwga2V5LCBOVUxMKTsKKyAgfQorICBnX2ZyZWUgKGtleSk7CisKKyAgLyogc2F2ZSB1cGRhdGVkIGtleWZpbGUgKi8KKyAgcmV0dXJuIGdzdF9wcmVzZXRfZGVmYXVsdF9zYXZlX3ByZXNldHNfZmlsZSAocHJlc2V0KTsKKworICAvKiBFUlJPUlMgKi8KK25vX3ByZXNldHM6CisgIHsKKyAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHByZXNldCwgIm5vIHByZXNldHMiKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworLyogdGhlIGNhbGxlciBtdXN0IGZyZWUgQHZhbHVlIGFmdGVyIHVzYWdlICovCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9wcmVzZXRfZGVmYXVsdF9nZXRfbWV0YSAoR3N0UHJlc2V0ICogcHJlc2V0LCBjb25zdCBnY2hhciAqIG5hbWUsCisgICAgY29uc3QgZ2NoYXIgKiB0YWcsIGdjaGFyICoqIHZhbHVlKQoreworICBHS2V5RmlsZSAqcHJlc2V0czsKKyAgZ2NoYXIgKmtleTsKKworICAvKiBnZXQgdGhlIHByZXNldHMgZnJvbSB0aGUgdHlwZSAqLworICBpZiAoIShwcmVzZXRzID0gcHJlc2V0X2dldF9rZXlmaWxlIChwcmVzZXQpKSkKKyAgICBnb3RvIG5vX3ByZXNldHM7CisKKyAga2V5ID0gZ19zdHJkdXBfcHJpbnRmICgiX21ldGEvJXMiLCB0YWcpOworICAqdmFsdWUgPSBnX2tleV9maWxlX2dldF92YWx1ZSAocHJlc2V0cywgbmFtZSwga2V5LCBOVUxMKTsKKyAgZ19mcmVlIChrZXkpOworCisgIHJldHVybiBUUlVFOworCisgIC8qIEVSUk9SUyAqLworbm9fcHJlc2V0czoKKyAgeworICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocHJlc2V0LCAibm8gcHJlc2V0cyIpOworICAgICp2YWx1ZSA9IE5VTEw7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKKy8qIHdyYXBwZXIgKi8KKworLyoqCisgKiBnc3RfcHJlc2V0X2dldF9wcmVzZXRfbmFtZXM6CisgKiBAcHJlc2V0OiBhICNHT2JqZWN0IHRoYXQgaW1wbGVtZW50cyAjR3N0UHJlc2V0CisgKgorICogR2V0IGEgY29weSBvZiBwcmVzZXQgbmFtZXMgYXMgYSBOVUxMIHRlcm1pbmF0ZWQgc3RyaW5nIGFycmF5LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpIChlbGVtZW50LXR5cGUgZ2NoYXIqKToKKyAqICAgICBsaXN0IHdpdGggbmFtZXMsIHVlIGdfc3RyZnJlZXYoKSBhZnRlciB1c2FnZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yMAorICovCitnY2hhciAqKgorZ3N0X3ByZXNldF9nZXRfcHJlc2V0X25hbWVzIChHc3RQcmVzZXQgKiBwcmVzZXQpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUFJFU0VUIChwcmVzZXQpLCBOVUxMKTsKKworICByZXR1cm4gKEdTVF9QUkVTRVRfR0VUX0lOVEVSRkFDRSAocHJlc2V0KS0+Z2V0X3ByZXNldF9uYW1lcyAocHJlc2V0KSk7Cit9CisKKy8qKgorICogZ3N0X3ByZXNldF9nZXRfcHJvcGVydHlfbmFtZXM6CisgKiBAcHJlc2V0OiBhICNHT2JqZWN0IHRoYXQgaW1wbGVtZW50cyAjR3N0UHJlc2V0CisgKgorICogR2V0IGEgdGhlIG5hbWVzIG9mIHRoZSBHT2JqZWN0IHByb3BlcnRpZXMgdGhhdCBjYW4gYmUgdXNlZCBmb3IgcHJlc2V0cy4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKGFycmF5IHplcm8tdGVybWluYXRlZD0xKSAoZWxlbWVudC10eXBlIGdjaGFyKik6IGFuCisgKiAgIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIHdoaWNoIHNob3VsZCBiZSBmcmVlZCB3aXRoIGdfc3RyZnJlZXYoKSBhZnRlciB1c2UuCisgKgorICogU2luY2U6IDAuMTAuMjAKKyAqLworZ2NoYXIgKioKK2dzdF9wcmVzZXRfZ2V0X3Byb3BlcnR5X25hbWVzIChHc3RQcmVzZXQgKiBwcmVzZXQpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUFJFU0VUIChwcmVzZXQpLCBOVUxMKTsKKworICByZXR1cm4gKEdTVF9QUkVTRVRfR0VUX0lOVEVSRkFDRSAocHJlc2V0KS0+Z2V0X3Byb3BlcnR5X25hbWVzIChwcmVzZXQpKTsKK30KKworLyoqCisgKiBnc3RfcHJlc2V0X2xvYWRfcHJlc2V0OgorICogQHByZXNldDogYSAjR09iamVjdCB0aGF0IGltcGxlbWVudHMgI0dzdFByZXNldAorICogQG5hbWU6IHByZXNldCBuYW1lIHRvIGxvYWQKKyAqCisgKiBMb2FkIHRoZSBnaXZlbiBwcmVzZXQuCisgKgorICogUmV0dXJuczogJVRSVUUgZm9yIHN1Y2Nlc3MsICVGQUxTRSBpZiBlLmcuIHRoZXJlIGlzIG5vIHByZXNldCB3aXRoIHRoYXQgQG5hbWUKKyAqCisgKiBTaW5jZTogMC4xMC4yMAorICovCitnYm9vbGVhbgorZ3N0X3ByZXNldF9sb2FkX3ByZXNldCAoR3N0UHJlc2V0ICogcHJlc2V0LCBjb25zdCBnY2hhciAqIG5hbWUpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUFJFU0VUIChwcmVzZXQpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYW1lLCBGQUxTRSk7CisKKyAgcmV0dXJuIChHU1RfUFJFU0VUX0dFVF9JTlRFUkZBQ0UgKHByZXNldCktPmxvYWRfcHJlc2V0IChwcmVzZXQsIG5hbWUpKTsKK30KKworLyoqCisgKiBnc3RfcHJlc2V0X3NhdmVfcHJlc2V0OgorICogQHByZXNldDogYSAjR09iamVjdCB0aGF0IGltcGxlbWVudHMgI0dzdFByZXNldAorICogQG5hbWU6IHByZXNldCBuYW1lIHRvIHNhdmUKKyAqCisgKiBTYXZlIHRoZSBjdXJyZW50IG9iamVjdCBzZXR0aW5ncyBhcyBhIHByZXNldCB1bmRlciB0aGUgZ2l2ZW4gbmFtZS4gSWYgdGhlcmUKKyAqIGlzIGFscmVhZHkgYSBwcmVzZXQgYnkgdGhpcyBAbmFtZSBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGZvciBzdWNjZXNzLCAlRkFMU0UKKyAqCisgKiBTaW5jZTogMC4xMC4yMAorICovCitnYm9vbGVhbgorZ3N0X3ByZXNldF9zYXZlX3ByZXNldCAoR3N0UHJlc2V0ICogcHJlc2V0LCBjb25zdCBnY2hhciAqIG5hbWUpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUFJFU0VUIChwcmVzZXQpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYW1lLCBGQUxTRSk7CisKKyAgcmV0dXJuIChHU1RfUFJFU0VUX0dFVF9JTlRFUkZBQ0UgKHByZXNldCktPnNhdmVfcHJlc2V0IChwcmVzZXQsIG5hbWUpKTsKK30KKworLyoqCisgKiBnc3RfcHJlc2V0X3JlbmFtZV9wcmVzZXQ6CisgKiBAcHJlc2V0OiBhICNHT2JqZWN0IHRoYXQgaW1wbGVtZW50cyAjR3N0UHJlc2V0CisgKiBAb2xkX25hbWU6IGN1cnJlbnQgcHJlc2V0IG5hbWUKKyAqIEBuZXdfbmFtZTogbmV3IHByZXNldCBuYW1lCisgKgorICogUmVuYW1lcyBhIHByZXNldC4gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHByZXNldCBieSB0aGUgQG5ld19uYW1lIGl0IHdpbGwgYmUKKyAqIG92ZXJ3cml0dGVuLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGZvciBzdWNjZXNzLCAlRkFMU0UgaWYgZS5nLiB0aGVyZSBpcyBubyBwcmVzZXQgd2l0aCBAb2xkX25hbWUKKyAqCisgKiBTaW5jZTogMC4xMC4yMAorICovCitnYm9vbGVhbgorZ3N0X3ByZXNldF9yZW5hbWVfcHJlc2V0IChHc3RQcmVzZXQgKiBwcmVzZXQsIGNvbnN0IGdjaGFyICogb2xkX25hbWUsCisgICAgY29uc3QgZ2NoYXIgKiBuZXdfbmFtZSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QUkVTRVQgKHByZXNldCksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG9sZF9uYW1lLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuZXdfbmFtZSwgRkFMU0UpOworCisgIHJldHVybiAoR1NUX1BSRVNFVF9HRVRfSU5URVJGQUNFIChwcmVzZXQpLT5yZW5hbWVfcHJlc2V0IChwcmVzZXQsIG9sZF9uYW1lLAorICAgICAgICAgIG5ld19uYW1lKSk7Cit9CisKKy8qKgorICogZ3N0X3ByZXNldF9kZWxldGVfcHJlc2V0OgorICogQHByZXNldDogYSAjR09iamVjdCB0aGF0IGltcGxlbWVudHMgI0dzdFByZXNldAorICogQG5hbWU6IHByZXNldCBuYW1lIHRvIHJlbW92ZQorICoKKyAqIERlbGV0ZSB0aGUgZ2l2ZW4gcHJlc2V0LgorICoKKyAqIFJldHVybnM6ICVUUlVFIGZvciBzdWNjZXNzLCAlRkFMU0UgaWYgZS5nLiB0aGVyZSBpcyBubyBwcmVzZXQgd2l0aCB0aGF0IEBuYW1lCisgKgorICogU2luY2U6IDAuMTAuMjAKKyAqLworZ2Jvb2xlYW4KK2dzdF9wcmVzZXRfZGVsZXRlX3ByZXNldCAoR3N0UHJlc2V0ICogcHJlc2V0LCBjb25zdCBnY2hhciAqIG5hbWUpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUFJFU0VUIChwcmVzZXQpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYW1lLCBGQUxTRSk7CisKKyAgcmV0dXJuIChHU1RfUFJFU0VUX0dFVF9JTlRFUkZBQ0UgKHByZXNldCktPmRlbGV0ZV9wcmVzZXQgKHByZXNldCwgbmFtZSkpOworfQorCisvKioKKyAqIGdzdF9wcmVzZXRfc2V0X21ldGE6CisgKiBAcHJlc2V0OiBhICNHT2JqZWN0IHRoYXQgaW1wbGVtZW50cyAjR3N0UHJlc2V0CisgKiBAbmFtZTogcHJlc2V0IG5hbWUKKyAqIEB0YWc6IG1ldGEgZGF0YSBpdGVtIG5hbWUKKyAqIEB2YWx1ZTogbmV3IHZhbHVlCisgKgorICogU2V0cyBhIG5ldyBAdmFsdWUgZm9yIGFuIGV4aXN0aW5nIG1ldGEgZGF0YSBpdGVtIG9yIGFkZHMgYSBuZXcgaXRlbS4gTWV0YQorICogZGF0YSBAdGFnIG5hbWVzIGNhbiBiZSBzb21ldGhpbmcgbGlrZSBlLmcuICJjb21tZW50Ii4gU3VwcGx5aW5nICVOVUxMIGZvciB0aGUKKyAqIEB2YWx1ZSB3aWxsIHVuc2V0IGFuIGV4aXN0aW5nIHZhbHVlLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGZvciBzdWNjZXNzLCAlRkFMU0UgaWYgZS5nLiB0aGVyZSBpcyBubyBwcmVzZXQgd2l0aCB0aGF0IEBuYW1lCisgKgorICogU2luY2U6IDAuMTAuMjAKKyAqLworZ2Jvb2xlYW4KK2dzdF9wcmVzZXRfc2V0X21ldGEgKEdzdFByZXNldCAqIHByZXNldCwgY29uc3QgZ2NoYXIgKiBuYW1lLCBjb25zdCBnY2hhciAqIHRhZywKKyAgICBjb25zdCBnY2hhciAqIHZhbHVlKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BSRVNFVCAocHJlc2V0KSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAobmFtZSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAodGFnLCBGQUxTRSk7CisKKyAgcmV0dXJuIEdTVF9QUkVTRVRfR0VUX0lOVEVSRkFDRSAocHJlc2V0KS0+c2V0X21ldGEgKHByZXNldCwgbmFtZSwgdGFnLCB2YWx1ZSk7Cit9CisKKy8qKgorICogZ3N0X3ByZXNldF9nZXRfbWV0YToKKyAqIEBwcmVzZXQ6IGEgI0dPYmplY3QgdGhhdCBpbXBsZW1lbnRzICNHc3RQcmVzZXQKKyAqIEBuYW1lOiBwcmVzZXQgbmFtZQorICogQHRhZzogbWV0YSBkYXRhIGl0ZW0gbmFtZQorICogQHZhbHVlOiAob3V0IGNhbGxlZS1hbGxvY2F0ZXMpOiB2YWx1ZQorICoKKyAqIEdldHMgdGhlIEB2YWx1ZSBmb3IgYW4gZXhpc3RpbmcgbWV0YSBkYXRhIEB0YWcuIE1ldGEgZGF0YSBAdGFnIG5hbWVzIGNhbiBiZQorICogc29tZXRoaW5nIGxpa2UgZS5nLiAiY29tbWVudCIuIFJldHVybmVkIHZhbHVlcyBuZWVkIHRvIGJlIHJlbGVhc2VkIHdoZW4gZG9uZS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBmb3Igc3VjY2VzcywgJUZBTFNFIGlmIGUuZy4gdGhlcmUgaXMgbm8gcHJlc2V0IHdpdGggdGhhdCBAbmFtZQorICogb3Igbm8gdmFsdWUgZm9yIHRoZSBnaXZlbiBAdGFnCisgKgorICogU2luY2U6IDAuMTAuMjAKKyAqLworZ2Jvb2xlYW4KK2dzdF9wcmVzZXRfZ2V0X21ldGEgKEdzdFByZXNldCAqIHByZXNldCwgY29uc3QgZ2NoYXIgKiBuYW1lLCBjb25zdCBnY2hhciAqIHRhZywKKyAgICBnY2hhciAqKiB2YWx1ZSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QUkVTRVQgKHByZXNldCksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG5hbWUsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRhZywgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAodmFsdWUsIEZBTFNFKTsKKworICByZXR1cm4gR1NUX1BSRVNFVF9HRVRfSU5URVJGQUNFIChwcmVzZXQpLT5nZXRfbWV0YSAocHJlc2V0LCBuYW1lLCB0YWcsIHZhbHVlKTsKK30KKworLyogY2xhc3MgaW50ZXJuYWxzICovCisKK3N0YXRpYyB2b2lkCitnc3RfcHJlc2V0X2NsYXNzX2luaXQgKEdzdFByZXNldEludGVyZmFjZSAqIGlmYWNlKQoreworICBpZmFjZS0+Z2V0X3ByZXNldF9uYW1lcyA9IGdzdF9wcmVzZXRfZGVmYXVsdF9nZXRfcHJlc2V0X25hbWVzOworICBpZmFjZS0+Z2V0X3Byb3BlcnR5X25hbWVzID0gZ3N0X3ByZXNldF9kZWZhdWx0X2dldF9wcm9wZXJ0eV9uYW1lczsKKworICBpZmFjZS0+bG9hZF9wcmVzZXQgPSBnc3RfcHJlc2V0X2RlZmF1bHRfbG9hZF9wcmVzZXQ7CisgIGlmYWNlLT5zYXZlX3ByZXNldCA9IGdzdF9wcmVzZXRfZGVmYXVsdF9zYXZlX3ByZXNldDsKKyAgaWZhY2UtPnJlbmFtZV9wcmVzZXQgPSBnc3RfcHJlc2V0X2RlZmF1bHRfcmVuYW1lX3ByZXNldDsKKyAgaWZhY2UtPmRlbGV0ZV9wcmVzZXQgPSBnc3RfcHJlc2V0X2RlZmF1bHRfZGVsZXRlX3ByZXNldDsKKworICBpZmFjZS0+c2V0X21ldGEgPSBnc3RfcHJlc2V0X2RlZmF1bHRfc2V0X21ldGE7CisgIGlmYWNlLT5nZXRfbWV0YSA9IGdzdF9wcmVzZXRfZGVmYXVsdF9nZXRfbWV0YTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9wcmVzZXRfYmFzZV9pbml0IChncG9pbnRlciBnX2NsYXNzKQoreworICBzdGF0aWMgZ2Jvb2xlYW4gaW5pdGlhbGl6ZWQgPSBGQUxTRTsKKworICBpZiAoIWluaXRpYWxpemVkKSB7CisgICAgLyogaW5pdCBkZWZhdWx0IGltcGxlbWVudGF0aW9uICovCisgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKEdTVF9DQVRfREVGQVVMVCwgInByZXNldCIsCisgICAgICAgIEdTVF9ERUJVR19GR19XSElURSB8IEdTVF9ERUJVR19CR19CTEFDSywgInByZXNldCBpbnRlcmZhY2UiKTsKKworICAgIC8qIGNyZWF0ZSBxdWFya3MgZm9yIHVzZSB3aXRoIGdfdHlwZV97ZyxzfWV0X3FkYXRhKCkgKi8KKyAgICBwcmVzZXRfcXVhcmsgPSBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoIkdzdFByZXNldDo6cHJlc2V0cyIpOworICAgIHByZXNldF91c2VyX3BhdGhfcXVhcmsgPQorICAgICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoIkdzdFByZXNldDo6dXNlcl9wYXRoIik7CisgICAgcHJlc2V0X3N5c3RlbV9wYXRoX3F1YXJrID0KKyAgICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJHc3RQcmVzZXQ6OnN5c3RlbV9wYXRoIik7CisKKyNpZiAwCisgICAgcHJvcGVydHlfbGlzdF9xdWFyayA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgiR3N0UHJlc2V0Ojpwcm9wZXJ0aWVzIik7CisKKyAgICAvKiBjcmVhdGUgaW50ZXJmYWNlIHByb3BlcnRpZXMsIGVhY2ggZWxlbWVudCB3b3VsZCBuZWVkIHRvIG92ZXJyaWRlIHRoaXMKKyAgICAgKiAgIGdfb2JqZWN0X2NsYXNzX292ZXJyaWRlX3Byb3BlcnR5KGdvYmplY3RfY2xhc3MsIFBST1BfUFJFU0VUX05BTUUsICJwcmVzZXQtbmFtZSIpOworICAgICAqIGFuZCBpbiBfc2V0X3Byb3BlcnR5KCkgZG8KKyAgICAgKiAgIGNhc2UgUFJPUF9QUkVTRVRfTkFNRTogeworICAgICAqICAgICBnY2hhciAqbmFtZSA9IGdfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpOworICAgICAqICAgICBpZiAobmFtZSkKKyAgICAgKiAgICAgICBnc3RfcHJlc2V0X2xvYWRfcHJlc2V0KHByZXNldCwgbmFtZSk7CisgICAgICogICB9IGJyZWFrOworICAgICAqLworICAgIGdfb2JqZWN0X2ludGVyZmFjZV9pbnN0YWxsX3Byb3BlcnR5IChnX2NsYXNzLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgicHJlc2V0LW5hbWUiLAorICAgICAgICAgICAgInByZXNldC1uYW1lIHByb3BlcnR5IiwKKyAgICAgICAgICAgICJsb2FkIGdpdmVuIHByZXNldCIsIE5VTEwsIEdfUEFSQU1fV1JJVEFCTEUpKTsKKyNlbmRpZgorCisgICAgaW5pdGlhbGl6ZWQgPSBUUlVFOworICB9Cit9CisKK0dUeXBlCitnc3RfcHJlc2V0X2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgdm9sYXRpbGUgZ3NpemUgdHlwZSA9IDA7CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmdHlwZSkpIHsKKyAgICBHVHlwZSBfdHlwZTsKKyAgICBjb25zdCBHVHlwZUluZm8gaW5mbyA9IHsKKyAgICAgIHNpemVvZiAoR3N0UHJlc2V0SW50ZXJmYWNlKSwKKyAgICAgIChHQmFzZUluaXRGdW5jKSBnc3RfcHJlc2V0X2Jhc2VfaW5pdCwgICAgIC8qIGJhc2VfaW5pdCAqLworICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBiYXNlX2ZpbmFsaXplICovCisgICAgICAoR0NsYXNzSW5pdEZ1bmMpIGdzdF9wcmVzZXRfY2xhc3NfaW5pdCwgICAvKiBjbGFzc19pbml0ICovCisgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGNsYXNzX2ZpbmFsaXplICovCisgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGNsYXNzX2RhdGEgKi8KKyAgICAgIDAsCisgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5fcHJlYWxsb2NzICovCisgICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgIC8qIGluc3RhbmNlX2luaXQgKi8KKyAgICB9OworICAgIF90eXBlID0gZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyAoR19UWVBFX0lOVEVSRkFDRSwgIkdzdFByZXNldCIsICZpbmZvLCAwKTsKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJnR5cGUsIF90eXBlKTsKKyAgfQorICByZXR1cm4gdHlwZTsKK30KZGlmZiAtLWdpdCBhL2dzdC9nc3RwcmVzZXQuaCBiL2dzdC9nc3RwcmVzZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2YxMzY2Ci0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdHByZXNldC5oCkBAIC0wLDAgKzEsOTggQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA2IFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKyAqCisgKiBnc3RwcmVzZXQuaDogaGVscGVyIGludGVyZmFjZSBoZWFkZXIgZm9yIGVsZW1lbnQgcHJlc2V0cworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19HU1RfUFJFU0VUX0hfXworI2RlZmluZSBfX0dTVF9QUkVTRVRfSF9fCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgR1NUX1RZUEVfUFJFU0VUICAgICAgICAgICAgICAgKGdzdF9wcmVzZXRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgR1NUX1BSRVNFVChvYmopICAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfUFJFU0VULCBHc3RQcmVzZXQpKQorI2RlZmluZSBHU1RfSVNfUFJFU0VUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9QUkVTRVQpKQorI2RlZmluZSBHU1RfUFJFU0VUX0dFVF9JTlRFUkZBQ0Uob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9JTlRFUkZBQ0UgKChvYmopLCBHU1RfVFlQRV9QUkVTRVQsIEdzdFByZXNldEludGVyZmFjZSkpCisKKy8qKgorICogR3N0UHJlc2V0OgorICoKKyAqIE9wYXF1ZSAjR3N0UHJlc2V0IGRhdGEgc3RydWN0dXJlLgorICovCit0eXBlZGVmIHN0cnVjdCBfR3N0UHJlc2V0IEdzdFByZXNldDsgLyogZHVtbXkgb2JqZWN0ICovCit0eXBlZGVmIHN0cnVjdCBfR3N0UHJlc2V0SW50ZXJmYWNlIEdzdFByZXNldEludGVyZmFjZTsKKworLyoqCisgKiBHc3RQcmVzZXRJbnRlcmZhY2U6CisgKiBAcGFyZW50OiBwYXJlbnQgaW50ZXJmYWNlIHR5cGUuCisgKiBAZ2V0X3ByZXNldF9uYW1lczogdmlydHVhbCBtZXRob2QgdG8gZ2V0IGxpc3Qgb2YgcHJlc2V0cworICogQGdldF9wcm9wZXJ0eV9uYW1lczogdmlydHVhbCBtZXRob2RzIHRvIGdldCBwcm9wZXJ0aWVzIHRoYXQgYXJlIHBlcnNpc3RlbnQKKyAqIEBsb2FkX3ByZXNldDogdmlydHVhbCBtZXRob2RzIHRvIGxvYWQgYSBwcmVzZXQgaW50byBwcm9wZXJ0aWVzCisgKiBAc2F2ZV9wcmVzZXQ6IHZpcnR1YWwgbWV0aG9kcyB0byBzYXZlIHByb3BlcnRpZXMgaW50byBhIHByZXNldAorICogQHJlbmFtZV9wcmVzZXQ6IHZpcnR1YWwgbWV0aG9kcyB0byByZW5hbWUgYSBwcmVzZXQKKyAqIEBkZWxldGVfcHJlc2V0OiB2aXJ0dWFsIG1ldGhvZHMgdG8gcmVtb3ZlIGEgcHJlc2V0CisgKiBAc2V0X21ldGE6IHZpcnR1YWwgbWV0aG9kcyB0byBzZXQgdGV4dHVhbCBtZXRhIGRhdGEgdG8gYSBwcmVzZXQKKyAqIEBnZXRfbWV0YTogdmlydHVhbCBtZXRob2RzIHRvIGdldCB0ZXh0dWFsIG1ldGEgZGF0YSBmcm9tIGEgcHJlc2V0CisgKgorICogI0dzdFByZXNldCBpbnRlcmZhY2UuCisgKi8KK3N0cnVjdCBfR3N0UHJlc2V0SW50ZXJmYWNlCit7CisgIEdUeXBlSW50ZXJmYWNlIHBhcmVudDsKKworICAvKiBtZXRob2RzICovCisgIGdjaGFyKiogICAgICAoKmdldF9wcmVzZXRfbmFtZXMpICAgIChHc3RQcmVzZXQgKnByZXNldCk7CisKKyAgZ2NoYXIqKiAgICAgICgqZ2V0X3Byb3BlcnR5X25hbWVzKSAgKEdzdFByZXNldCAqcHJlc2V0KTsKKworICBnYm9vbGVhbiAgICAgKCpsb2FkX3ByZXNldCkgICAgICAgICAoR3N0UHJlc2V0ICpwcmVzZXQsIGNvbnN0IGdjaGFyICpuYW1lKTsKKyAgZ2Jvb2xlYW4gICAgICgqc2F2ZV9wcmVzZXQpICAgICAgICAgKEdzdFByZXNldCAqcHJlc2V0LCBjb25zdCBnY2hhciAqbmFtZSk7CisgIGdib29sZWFuICAgICAoKnJlbmFtZV9wcmVzZXQpICAgICAgIChHc3RQcmVzZXQgKnByZXNldCwgY29uc3QgZ2NoYXIgKm9sZF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKm5ld19uYW1lKTsKKyAgZ2Jvb2xlYW4gICAgICgqZGVsZXRlX3ByZXNldCkgICAgICAgKEdzdFByZXNldCAqcHJlc2V0LCBjb25zdCBnY2hhciAqbmFtZSk7CisgIAorICBnYm9vbGVhbiAgICAgKCpzZXRfbWV0YSkgICAgICAgICAgICAoR3N0UHJlc2V0ICpwcmVzZXQsIGNvbnN0IGdjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnRhZywgY29uc3QgZ2NoYXIgKnZhbHVlKTsKKyAgZ2Jvb2xlYW4gICAgICgqZ2V0X21ldGEpICAgICAgICAgICAgKEdzdFByZXNldCAqcHJlc2V0LCBjb25zdCBnY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICp0YWcsIGdjaGFyICoqdmFsdWUpOworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Cit9OworCitHVHlwZSBnc3RfcHJlc2V0X2dldF90eXBlKHZvaWQpOworCitnY2hhcioqICAgICAgZ3N0X3ByZXNldF9nZXRfcHJlc2V0X25hbWVzICAgKEdzdFByZXNldCAqcHJlc2V0KTsKKworZ2NoYXIqKiAgICAgIGdzdF9wcmVzZXRfZ2V0X3Byb3BlcnR5X25hbWVzIChHc3RQcmVzZXQgKnByZXNldCk7CisKK2dib29sZWFuICAgICBnc3RfcHJlc2V0X2xvYWRfcHJlc2V0ICAgICAgICAoR3N0UHJlc2V0ICpwcmVzZXQsIGNvbnN0IGdjaGFyICpuYW1lKTsKK2dib29sZWFuICAgICBnc3RfcHJlc2V0X3NhdmVfcHJlc2V0ICAgICAgICAoR3N0UHJlc2V0ICpwcmVzZXQsIGNvbnN0IGdjaGFyICpuYW1lKTsKK2dib29sZWFuICAgICBnc3RfcHJlc2V0X3JlbmFtZV9wcmVzZXQgICAgICAoR3N0UHJlc2V0ICpwcmVzZXQsIGNvbnN0IGdjaGFyICpvbGRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKm5ld19uYW1lKTsKK2dib29sZWFuICAgICBnc3RfcHJlc2V0X2RlbGV0ZV9wcmVzZXQgICAgICAoR3N0UHJlc2V0ICpwcmVzZXQsIGNvbnN0IGdjaGFyICpuYW1lKTsKKworZ2Jvb2xlYW4gICAgIGdzdF9wcmVzZXRfc2V0X21ldGEgICAgICAgICAgIChHc3RQcmVzZXQgKnByZXNldCwgY29uc3QgZ2NoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICp0YWcsIGNvbnN0IGdjaGFyICp2YWx1ZSk7CitnYm9vbGVhbiAgICAgZ3N0X3ByZXNldF9nZXRfbWV0YSAgICAgICAgICAgKEdzdFByZXNldCAqcHJlc2V0LCBjb25zdCBnY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnRhZywgZ2NoYXIgKip2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9QUkVTRVRfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0cXVhcmsuYyBiL2dzdC9nc3RxdWFyay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YjNmMTYKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0cXVhcmsuYwpAQCAtMCwwICsxLDc0IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNiBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisgKgorICogZ3N0cXVhcmsuYzogUmVnaXN0ZXJlZCBxdWFya3MgZm9yIHRoZSBfcHJpdl9nc3RfcXVhcmtfdGFibGUsIHByaXZhdGUgdG8gCisgKiAgIEdTdHJlYW1lcgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImdzdHF1YXJrLmgiCisKKy8qIFRoZXNlIHN0cmluZ3MgbXVzdCBtYXRjaCBvcmRlciBhbmQgbnVtYmVyIGRlY2xhcmVkIGluIHRoZSBHc3RRdWFya0lkCisgKiBlbnVtIGluIGdzdHF1YXJrLmghICovCitzdGF0aWMgY29uc3QgZ2NoYXIgKl9xdWFya19zdHJpbmdzW10gPSB7CisgICJmb3JtYXQiLCAiY3VycmVudCIsICJkdXJhdGlvbiIsICJyYXRlIiwKKyAgInNlZWthYmxlIiwgInNlZ21lbnQtc3RhcnQiLCAic2VnbWVudC1lbmQiLAorICAic3JjX2Zvcm1hdCIsICJzcmNfdmFsdWUiLCAiZGVzdF9mb3JtYXQiLCAiZGVzdF92YWx1ZSIsCisgICJzdGFydF9mb3JtYXQiLCAic3RhcnRfdmFsdWUiLCAic3RvcF9mb3JtYXQiLCAic3RvcF92YWx1ZSIsCisgICJnZXJyb3IiLCAiZGVidWciLCAiYnVmZmVyLXBlcmNlbnQiLCAiYnVmZmVyaW5nLW1vZGUiLAorICAiYXZnLWluLXJhdGUiLCAiYXZnLW91dC1yYXRlIiwgImJ1ZmZlcmluZy1sZWZ0IiwKKyAgImVzdGltYXRlZC10b3RhbCIsICJvbGQtc3RhdGUiLCAibmV3LXN0YXRlIiwgInBlbmRpbmctc3RhdGUiLAorICAiY2xvY2siLCAicmVhZHkiLCAicG9zaXRpb24iLCAicmVzZXQtdGltZSIsICJsaXZlIiwgIm1pbi1sYXRlbmN5IiwKKyAgIm1heC1sYXRlbmN5IiwgImJ1c3kiLCAidHlwZSIsICJvd25lciIsICJ1cGRhdGUiLCAiYXBwbGllZC1yYXRlIiwKKyAgInN0YXJ0IiwgInN0b3AiLCAibWluc2l6ZSIsICJtYXhzaXplIiwgImFzeW5jIiwgInByb3BvcnRpb24iLAorICAiZGlmZiIsICJ0aW1lc3RhbXAiLCAiZmxhZ3MiLCAiY3VyLXR5cGUiLCAiY3VyIiwgInN0b3AtdHlwZSIsCisgICJsYXRlbmN5IiwgInVyaSIsICJvYmplY3QiLCAidGFnbGlzdCIsICJHc3RFdmVudFNlZ21lbnQiLAorICAiR3N0RXZlbnRCdWZmZXJTaXplIiwgIkdzdEV2ZW50UU9TIiwgIkdzdEV2ZW50U2VlayIsICJHc3RFdmVudExhdGVuY3kiLAorICAiR3N0TWVzc2FnZUVycm9yIiwgIkdzdE1lc3NhZ2VXYXJuaW5nIiwgIkdzdE1lc3NhZ2VJbmZvIiwKKyAgIkdzdE1lc3NhZ2VCdWZmZXJpbmciLCAiR3N0TWVzc2FnZVN0YXRlIiwgIkdzdE1lc3NhZ2VDbG9ja1Byb3ZpZGUiLAorICAiR3N0TWVzc2FnZUNsb2NrTG9zdCIsICJHc3RNZXNzYWdlTmV3Q2xvY2siLCAiR3N0TWVzc2FnZVN0cnVjdHVyZUNoYW5nZSIsCisgICJHc3RNZXNzYWdlU2VnbWVudFN0YXJ0IiwgIkdzdE1lc3NhZ2VTZWdtZW50RG9uZSIsICJHc3RNZXNzYWdlRHVyYXRpb24iLAorICAiR3N0TWVzc2FnZUFzeW5jRG9uZSIsICJHc3RNZXNzYWdlUmVxdWVzdFN0YXRlIiwgIkdzdE1lc3NhZ2VTdHJlYW1TdGF0dXMiLAorICAiR3N0UXVlcnlQb3NpdGlvbiIsICJHc3RRdWVyeUR1cmF0aW9uIiwgIkdzdFF1ZXJ5TGF0ZW5jeSIsICJHc3RRdWVyeUNvbnZlcnQiLAorICAiR3N0UXVlcnlTZWdtZW50IiwgIkdzdFF1ZXJ5U2Vla2luZyIsICJHc3RRdWVyeUZvcm1hdHMiLCAiR3N0UXVlcnlCdWZmZXJpbmciLAorICAiR3N0UXVlcnlVUkkiLCAiR3N0RXZlbnRTdGVwIiwgIkdzdE1lc3NhZ2VTdGVwRG9uZSIsICJhbW91bnQiLCAiZmx1c2giLAorICAiaW50ZXJtZWRpYXRlIiwgIkdzdE1lc3NhZ2VTdGVwU3RhcnQiLCAiYWN0aXZlIiwgImVvcyIsICJzaW5rLW1lc3NhZ2UiLAorICAibWVzc2FnZSIsICJHc3RNZXNzYWdlUU9TIiwgInJ1bm5pbmctdGltZSIsICJzdHJlYW0tdGltZSIsICJqaXR0ZXIiLAorICAicXVhbGl0eSIsICJwcm9jZXNzZWQiLCAiZHJvcHBlZCIsICJidWZmZXJpbmctcmFuZ2VzIiwgIkdzdE1lc3NhZ2VQcm9ncmVzcyIsCisgICJjb2RlIiwgInRleHQiLCAicGVyY2VudCIsICJ0aW1lb3V0IiwgIkdzdEJ1ZmZlclBvb2xDb25maWciLCAiY2FwcyIsICJzaXplIiwKKyAgIm1pbi1idWZmZXJzIiwgIm1heC1idWZmZXJzIiwgInByZWZpeCIsICJwb3N0Zml4IiwgImFsaWduIiwgInRpbWUiLAorICAiR3N0UXVlcnlBbGxvY2F0aW9uIiwgIm5lZWQtcG9vbCIsICJtZXRhIiwgInBvb2wiLCAiR3N0RXZlbnRDYXBzIiwKKyAgIkdzdEV2ZW50UmVjb25maWd1cmUiLCAic2VnbWVudCIsICJHc3RRdWVyeVNjaGVkdWxpbmciLCAicHVsbC1tb2RlIiwKKyAgInJhbmRvbS1hY2Nlc3MiLCAic2VxdWVudGlhbCIsICJhbGxvY2F0b3IiLCAiR3N0RXZlbnRGbHVzaFN0b3AiLCAib3B0aW9ucyIKK307CisKK0dRdWFyayBfcHJpdl9nc3RfcXVhcmtfdGFibGVbR1NUX1FVQVJLX01BWF07CisKK3ZvaWQKK19wcml2X2dzdF9xdWFya3NfaW5pdGlhbGl6ZSAodm9pZCkKK3sKKyAgZ2ludCBpOworCisgIGlmIChHX05fRUxFTUVOVFMgKF9xdWFya19zdHJpbmdzKSAhPSBHU1RfUVVBUktfTUFYKQorICAgIGdfd2FybmluZyAoInRoZSBxdWFyayB0YWJsZSBpcyBub3QgY29uc2lzdGVudCEgJWQgIT0gJWQiLAorICAgICAgICAoaW50KSBHX05fRUxFTUVOVFMgKF9xdWFya19zdHJpbmdzKSwgR1NUX1FVQVJLX01BWCk7CisKKyAgZm9yIChpID0gMDsgaSA8IEdTVF9RVUFSS19NQVg7IGkrKykgeworICAgIF9wcml2X2dzdF9xdWFya190YWJsZVtpXSA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChfcXVhcmtfc3RyaW5nc1tpXSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2dzdC9nc3RxdWFyay5oIGIvZ3N0L2dzdHF1YXJrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZlYjcwOQotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RxdWFyay5oCkBAIC0wLDAgKzEsMTY2IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNiBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+CisgKgorICogZ3N0cXVhcmsuaDogUHJpdmF0ZSBoZWFkZXIgZm9yIHN0b3JpbmcgcXVhcmsgaW5mbyAKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fR1NUX1FVQVJLX0hfXworI2RlZmluZSBfX0dTVF9RVUFSS19IX18KKworLyogVGhlc2UgZW51bXMgbmVlZCB0byBtYXRjaCB0aGUgbnVtYmVyIGFuZCBvcmRlcgorICogb2Ygc3RyaW5ncyBkZWNsYXJlZCBpbiBfcXVhcmtfdGFibGUsIGluIGdzdHF1YXJrLmMgKi8KK3R5cGVkZWYgZW51bSBfR3N0UXVhcmtJZAoreworICBHU1RfUVVBUktfRk9STUFUID0gMCwKKyAgR1NUX1FVQVJLX0NVUlJFTlQgPSAxLAorICBHU1RfUVVBUktfRFVSQVRJT04gPSAyLAorICBHU1RfUVVBUktfUkFURSA9IDMsCisgIEdTVF9RVUFSS19TRUVLQUJMRSA9IDQsCisgIEdTVF9RVUFSS19TRUdNRU5UX1NUQVJUID0gNSwKKyAgR1NUX1FVQVJLX1NFR01FTlRfRU5EID0gNiwKKyAgR1NUX1FVQVJLX1NSQ19GT1JNQVQgPSA3LAorICBHU1RfUVVBUktfU1JDX1ZBTFVFID0gOCwKKyAgR1NUX1FVQVJLX0RFU1RfRk9STUFUID0gOSwKKyAgR1NUX1FVQVJLX0RFU1RfVkFMVUUgPSAxMCwKKyAgR1NUX1FVQVJLX1NUQVJUX0ZPUk1BVCA9IDExLAorICBHU1RfUVVBUktfU1RBUlRfVkFMVUUgPSAxMiwKKyAgR1NUX1FVQVJLX1NUT1BfRk9STUFUID0gMTMsCisgIEdTVF9RVUFSS19TVE9QX1ZBTFVFID0gMTQsCisgIEdTVF9RVUFSS19HRVJST1IgPSAxNSwKKyAgR1NUX1FVQVJLX0RFQlVHID0gMTYsCisgIEdTVF9RVUFSS19CVUZGRVJfUEVSQ0VOVCA9IDE3LAorICBHU1RfUVVBUktfQlVGRkVSSU5HX01PREUgPSAxOCwKKyAgR1NUX1FVQVJLX0FWR19JTl9SQVRFID0gMTksCisgIEdTVF9RVUFSS19BVkdfT1VUX1JBVEUgPSAyMCwKKyAgR1NUX1FVQVJLX0JVRkZFUklOR19MRUZUID0gMjEsCisgIEdTVF9RVUFSS19FU1RJTUFURURfVE9UQUwgPSAyMiwKKyAgR1NUX1FVQVJLX09MRF9TVEFURSA9IDIzLAorICBHU1RfUVVBUktfTkVXX1NUQVRFID0gMjQsCisgIEdTVF9RVUFSS19QRU5ESU5HX1NUQVRFID0gMjUsCisgIEdTVF9RVUFSS19DTE9DSyA9IDI2LAorICBHU1RfUVVBUktfUkVBRFkgPSAyNywKKyAgR1NUX1FVQVJLX1BPU0lUSU9OID0gMjgsCisgIEdTVF9RVUFSS19SRVNFVF9USU1FID0gMjksCisgIEdTVF9RVUFSS19MSVZFID0gMzAsCisgIEdTVF9RVUFSS19NSU5fTEFURU5DWSA9IDMxLAorICBHU1RfUVVBUktfTUFYX0xBVEVOQ1kgPSAzMiwKKyAgR1NUX1FVQVJLX0JVU1kgPSAzMywKKyAgR1NUX1FVQVJLX1RZUEUgPSAzNCwKKyAgR1NUX1FVQVJLX09XTkVSID0gMzUsCisgIEdTVF9RVUFSS19VUERBVEUgPSAzNiwKKyAgR1NUX1FVQVJLX0FQUExJRURfUkFURSA9IDM3LAorICBHU1RfUVVBUktfU1RBUlQgPSAzOCwKKyAgR1NUX1FVQVJLX1NUT1AgPSAzOSwKKyAgR1NUX1FVQVJLX01JTlNJWkUgPSA0MCwKKyAgR1NUX1FVQVJLX01BWFNJWkUgPSA0MSwKKyAgR1NUX1FVQVJLX0FTWU5DID0gNDIsCisgIEdTVF9RVUFSS19QUk9QT1JUSU9OID0gNDMsCisgIEdTVF9RVUFSS19ESUZGID0gNDQsCisgIEdTVF9RVUFSS19USU1FU1RBTVAgPSA0NSwKKyAgR1NUX1FVQVJLX0ZMQUdTID0gNDYsCisgIEdTVF9RVUFSS19DVVJfVFlQRSA9IDQ3LAorICBHU1RfUVVBUktfQ1VSID0gNDgsCisgIEdTVF9RVUFSS19TVE9QX1RZUEUgPSA0OSwKKyAgR1NUX1FVQVJLX0xBVEVOQ1kgPSA1MCwKKyAgR1NUX1FVQVJLX1VSSSA9IDUxLAorICBHU1RfUVVBUktfT0JKRUNUID0gNTIsCisgIEdTVF9RVUFSS19UQUdMSVNUID0gNTMsCisgIEdTVF9RVUFSS19FVkVOVF9TRUdNRU5UID0gNTQsCisgIEdTVF9RVUFSS19FVkVOVF9CVUZGRVJfU0laRSA9IDU1LAorICBHU1RfUVVBUktfRVZFTlRfUU9TID0gNTYsCisgIEdTVF9RVUFSS19FVkVOVF9TRUVLID0gNTcsCisgIEdTVF9RVUFSS19FVkVOVF9MQVRFTkNZID0gNTgsCisgIEdTVF9RVUFSS19NRVNTQUdFX0VSUk9SID0gNTksCisgIEdTVF9RVUFSS19NRVNTQUdFX1dBUk5JTkcgPSA2MCwKKyAgR1NUX1FVQVJLX01FU1NBR0VfSU5GTyA9IDYxLAorICBHU1RfUVVBUktfTUVTU0FHRV9CVUZGRVJJTkcgPSA2MiwKKyAgR1NUX1FVQVJLX01FU1NBR0VfU1RBVEUgPSA2MywKKyAgR1NUX1FVQVJLX01FU1NBR0VfQ0xPQ0tfUFJPVklERSA9IDY0LAorICBHU1RfUVVBUktfTUVTU0FHRV9DTE9DS19MT1NUID0gNjUsCisgIEdTVF9RVUFSS19NRVNTQUdFX05FV19DTE9DSyA9IDY2LAorICBHU1RfUVVBUktfTUVTU0FHRV9TVFJVQ1RVUkVfQ0hBTkdFID0gNjcsCisgIEdTVF9RVUFSS19NRVNTQUdFX1NFR01FTlRfU1RBUlQgPSA2OCwKKyAgR1NUX1FVQVJLX01FU1NBR0VfU0VHTUVOVF9ET05FID0gNjksCisgIEdTVF9RVUFSS19NRVNTQUdFX0RVUkFUSU9OID0gNzAsCisgIEdTVF9RVUFSS19NRVNTQUdFX0FTWU5DX0RPTkUgPSA3MSwKKyAgR1NUX1FVQVJLX01FU1NBR0VfUkVRVUVTVF9TVEFURSA9IDcyLAorICBHU1RfUVVBUktfTUVTU0FHRV9TVFJFQU1fU1RBVFVTID0gNzMsCisgIEdTVF9RVUFSS19RVUVSWV9QT1NJVElPTiA9IDc0LAorICBHU1RfUVVBUktfUVVFUllfRFVSQVRJT04gPSA3NSwKKyAgR1NUX1FVQVJLX1FVRVJZX0xBVEVOQ1kgPSA3NiwKKyAgR1NUX1FVQVJLX1FVRVJZX0NPTlZFUlQgPSA3NywKKyAgR1NUX1FVQVJLX1FVRVJZX1NFR01FTlQgPSA3OCwKKyAgR1NUX1FVQVJLX1FVRVJZX1NFRUtJTkcgPSA3OSwKKyAgR1NUX1FVQVJLX1FVRVJZX0ZPUk1BVFMgPSA4MCwKKyAgR1NUX1FVQVJLX1FVRVJZX0JVRkZFUklORyA9IDgxLAorICBHU1RfUVVBUktfUVVFUllfVVJJID0gODIsCisgIEdTVF9RVUFSS19FVkVOVF9TVEVQID0gODMsCisgIEdTVF9RVUFSS19NRVNTQUdFX1NURVBfRE9ORSA9IDg0LAorICBHU1RfUVVBUktfQU1PVU5UID0gODUsCisgIEdTVF9RVUFSS19GTFVTSCA9IDg2LAorICBHU1RfUVVBUktfSU5URVJNRURJQVRFID0gODcsCisgIEdTVF9RVUFSS19NRVNTQUdFX1NURVBfU1RBUlQgPSA4OCwKKyAgR1NUX1FVQVJLX0FDVElWRSA9IDg5LAorICBHU1RfUVVBUktfRU9TID0gOTAsCisgIEdTVF9RVUFSS19FVkVOVF9TSU5LX01FU1NBR0UgPSA5MSwKKyAgR1NUX1FVQVJLX01FU1NBR0UgPSA5MiwKKyAgR1NUX1FVQVJLX01FU1NBR0VfUU9TID0gOTMsCisgIEdTVF9RVUFSS19SVU5OSU5HX1RJTUUgPSA5NCwKKyAgR1NUX1FVQVJLX1NUUkVBTV9USU1FID0gOTUsCisgIEdTVF9RVUFSS19KSVRURVIgPSA5NiwKKyAgR1NUX1FVQVJLX1FVQUxJVFkgPSA5NywKKyAgR1NUX1FVQVJLX1BST0NFU1NFRCA9IDk4LAorICBHU1RfUVVBUktfRFJPUFBFRCA9IDk5LAorICBHU1RfUVVBUktfQlVGRkVSSU5HX1JBTkdFUyA9IDEwMCwKKyAgR1NUX1FVQVJLX01FU1NBR0VfUFJPR1JFU1MgPSAxMDEsCisgIEdTVF9RVUFSS19DT0RFID0gMTAyLAorICBHU1RfUVVBUktfVEVYVCA9IDEwMywKKyAgR1NUX1FVQVJLX1BFUkNFTlQgPSAxMDQsCisgIEdTVF9RVUFSS19USU1FT1VUID0gMTA1LAorICBHU1RfUVVBUktfQlVGRkVSX1BPT0xfQ09ORklHID0gMTA2LAorICBHU1RfUVVBUktfQ0FQUyA9IDEwNywKKyAgR1NUX1FVQVJLX1NJWkUgPSAxMDgsCisgIEdTVF9RVUFSS19NSU5fQlVGRkVSUyA9IDEwOSwKKyAgR1NUX1FVQVJLX01BWF9CVUZGRVJTID0gMTEwLAorICBHU1RfUVVBUktfUFJFRklYID0gMTExLAorICBHU1RfUVVBUktfUE9TVEZJWCA9IDExMiwKKyAgR1NUX1FVQVJLX0FMSUdOID0gMTEzLAorICBHU1RfUVVBUktfVElNRSA9IDExNCwKKyAgR1NUX1FVQVJLX1FVRVJZX0FMTE9DQVRJT04gPSAxMTUsCisgIEdTVF9RVUFSS19ORUVEX1BPT0wgPSAxMTYsCisgIEdTVF9RVUFSS19NRVRBID0gMTE3LAorICBHU1RfUVVBUktfUE9PTCA9IDExOCwKKyAgR1NUX1FVQVJLX0VWRU5UX0NBUFMgPSAxMTksCisgIEdTVF9RVUFSS19FVkVOVF9SRUNPTkZJR1VSRSA9IDEyMCwKKyAgR1NUX1FVQVJLX1NFR01FTlQgPSAxMjEsCisgIEdTVF9RVUFSS19RVUVSWV9TQ0hFRFVMSU5HID0gMTIyLAorICBHU1RfUVVBUktfUFVMTF9NT0RFID0gMTIzLAorICBHU1RfUVVBUktfUkFORE9NX0FDQ0VTUyA9IDEyNCwKKyAgR1NUX1FVQVJLX1NFUVVFTlRJQUwgPSAxMjUsCisgIEdTVF9RVUFSS19BTExPQ0FUT1IgPSAxMjYsCisgIEdTVF9RVUFSS19FVkVOVF9GTFVTSF9TVE9QID0gMTI3LAorICBHU1RfUVVBUktfT1BUSU9OUyA9IDEyOCwKKworICBHU1RfUVVBUktfTUFYID0gMTI5Cit9IEdzdFF1YXJrSWQ7CisKK2V4dGVybiBHUXVhcmsgX3ByaXZfZ3N0X3F1YXJrX3RhYmxlW0dTVF9RVUFSS19NQVhdOworCisjZGVmaW5lIEdTVF9RVUFSSyhxKSBfcHJpdl9nc3RfcXVhcmtfdGFibGVbR1NUX1FVQVJLXyMjcV0KKworI2VuZGlmCmRpZmYgLS1naXQgYS9nc3QvZ3N0cXVlcnkuYyBiL2dzdC9nc3RxdWVyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMjgwMTkKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0cXVlcnkuYwpAQCAtMCwwICsxLDIwMDQgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BjaGVsbG8uYmU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgorICoKKyAqIGdzdHF1ZXJ5LmM6IEdzdFF1ZXJ5VHlwZSByZWdpc3RyYXRpb24gYW5kIFF1ZXJ5IHBhcnNpbmcvY3JlYXRpb24KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKioKKyAqIFNFQ1RJT046Z3N0cXVlcnkKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogRHluYW1pY2FsbHkgcmVnaXN0ZXIgbmV3IHF1ZXJ5IHR5cGVzLiBQcm92aWRlIGZ1bmN0aW9ucworICogICAgICAgICAgICAgICAgICAgICB0byBjcmVhdGUgcXVlcmllcywgYW5kIHRvIHNldCBhbmQgcGFyc2UgdmFsdWVzIGluIHRoZW0uCisgKiBAc2VlX2Fsc286ICNHc3RQYWQsICNHc3RFbGVtZW50CisgKgorICogR3N0UXVlcnkgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIHJlZ2lzdGVyIG5ldyBxdWVyeSB0eXBlcyB0byB0aGUgZ3N0cmVhbWVyCisgKiBjb3JlIGFuZCB1c2UgdGhlbS4KKyAqIFF1ZXJpZXMgY2FuIGJlIHBlcmZvcm1lZCBvbiBwYWRzIChnc3RfcGFkX3F1ZXJ5KCkpIGFuZCBlbGVtZW50cworICogKGdzdF9lbGVtZW50X3F1ZXJ5KCkpLiBQbGVhc2Ugbm90ZSB0aGF0IHNvbWUgcXVlcmllcyBtaWdodCBuZWVkIGEgcnVubmluZworICogcGlwZWxpbmUgdG8gd29yay4KKyAqCisgKiBRdWVyaWVzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHRoZSBnc3RfcXVlcnlfbmV3XyooKSBmdW5jdGlvbnMuCisgKiBRdWVyeSB2YWx1ZXMgY2FuIGJlIHNldCB1c2luZyBnc3RfcXVlcnlfc2V0XyooKSwgYW5kIHBhcnNlZCB1c2luZworICogZ3N0X3F1ZXJ5X3BhcnNlXyooKSBoZWxwZXJzLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gcXVlcnkgdGhlIGR1cmF0aW9uIG9mIGEgcGlwZWxpbmU6CisgKgorICogPGV4YW1wbGU+CisgKiAgPHRpdGxlPlF1ZXJ5IGR1cmF0aW9uIG9uIGEgcGlwZWxpbmU8L3RpdGxlPgorICogIDxwcm9ncmFtbGlzdGluZz4KKyAqICBHc3RRdWVyeSAqcXVlcnk7CisgKiAgZ2Jvb2xlYW4gcmVzOworICogIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19kdXJhdGlvbiAoR1NUX0ZPUk1BVF9USU1FKTsKKyAqICByZXMgPSBnc3RfZWxlbWVudF9xdWVyeSAocGlwZWxpbmUsIHF1ZXJ5KTsKKyAqICBpZiAocmVzKSB7CisgKiAgICBnaW50NjQgZHVyYXRpb247CisgKiAgICBnc3RfcXVlcnlfcGFyc2VfZHVyYXRpb24gKHF1ZXJ5LCBOVUxMLCAmYW1wO2R1cmF0aW9uKTsKKyAqICAgIGdfcHJpbnQgKCJkdXJhdGlvbiA9ICUiR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChkdXJhdGlvbikpOworICogIH0KKyAqICBlbHNlIHsKKyAqICAgIGdfcHJpbnQgKCJkdXJhdGlvbiBxdWVyeSBmYWlsZWQuLi4iKTsKKyAqICB9CisgKiAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7CisgKiAgPC9wcm9ncmFtbGlzdGluZz4KKyAqIDwvZXhhbXBsZT4KKyAqCisgKiBMYXN0IHJldmlld2VkIG9uIDIwMDYtMDItMTQgKDAuMTAuNCkKKyAqLworCisjaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJnc3RpbmZvLmgiCisjaW5jbHVkZSAiZ3N0cXVlcnkuaCIKKyNpbmNsdWRlICJnc3R2YWx1ZS5oIgorI2luY2x1ZGUgImdzdGVudW10eXBlcy5oIgorI2luY2x1ZGUgImdzdHF1YXJrLmgiCisjaW5jbHVkZSAiZ3N0dXJpLmgiCisjaW5jbHVkZSAiZ3N0YnVmZmVycG9vbC5oIgorCitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfcXVlcnlfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X3F1ZXJ5X2RlYnVnCisKK3N0YXRpYyBHVHlwZSBfZ3N0X3F1ZXJ5X3R5cGUgPSAwOworCit0eXBlZGVmIHN0cnVjdAoreworICBHc3RRdWVyeSBxdWVyeTsKKworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKK30gR3N0UXVlcnlJbXBsOworCisjZGVmaW5lIEdTVF9RVUVSWV9TVFJVQ1RVUkUocSkgICgoKEdzdFF1ZXJ5SW1wbCAqKShxKSktPnN0cnVjdHVyZSkKKworc3RhdGljIEdTdGF0aWNNdXRleCBtdXRleCA9IEdfU1RBVElDX01VVEVYX0lOSVQ7CitzdGF0aWMgR0xpc3QgKl9nc3RfcXVlcmllcyA9IE5VTEw7CitzdGF0aWMgR0hhc2hUYWJsZSAqX25pY2tfdG9fcXVlcnkgPSBOVUxMOworc3RhdGljIEdIYXNoVGFibGUgKl9xdWVyeV90eXBlX3RvX25pY2sgPSBOVUxMOworc3RhdGljIGd1aW50MzIgX25fdmFsdWVzID0gMTsgICAvKiB3ZSBzdGFydCBmcm9tIDEgYmVjYXVzZSAwIHJlc2VydmVkIGZvciBOT05FICovCisKK3N0YXRpYyBHc3RRdWVyeVR5cGVEZWZpbml0aW9uIHN0YW5kYXJkX2RlZmluaXRpb25zW10gPSB7CisgIHtHU1RfUVVFUllfUE9TSVRJT04sICJwb3NpdGlvbiIsICJDdXJyZW50IHBvc2l0aW9uIiwgMH0sCisgIHtHU1RfUVVFUllfRFVSQVRJT04sICJkdXJhdGlvbiIsICJUb3RhbCBkdXJhdGlvbiIsIDB9LAorICB7R1NUX1FVRVJZX0xBVEVOQ1ksICJsYXRlbmN5IiwgIkxhdGVuY3kiLCAwfSwKKyAge0dTVF9RVUVSWV9KSVRURVIsICJqaXR0ZXIiLCAiSml0dGVyIiwgMH0sCisgIHtHU1RfUVVFUllfUkFURSwgInJhdGUiLCAiQ29uZmlndXJlZCByYXRlIDEwMDAwMDAgPSAxIiwgMH0sCisgIHtHU1RfUVVFUllfU0VFS0lORywgInNlZWtpbmciLCAiU2Vla2luZyBjYXBhYmlsaXRpZXMgYW5kIHBhcmFtZXRlcnMiLCAwfSwKKyAge0dTVF9RVUVSWV9TRUdNRU5ULCAic2VnbWVudCIsICJjdXJyZW50bHkgY29uZmlndXJlZCBzZWdtZW50IiwgMH0sCisgIHtHU1RfUVVFUllfQ09OVkVSVCwgImNvbnZlcnQiLCAiQ29udmVydGluZyBiZXR3ZWVuIGZvcm1hdHMiLCAwfSwKKyAge0dTVF9RVUVSWV9GT1JNQVRTLCAiZm9ybWF0cyIsICJTdXBwb3J0ZWQgZm9ybWF0cyBmb3IgY29udmVyc2lvbiIsIDB9LAorICB7R1NUX1FVRVJZX0JVRkZFUklORywgImJ1ZmZlcmluZyIsICJCdWZmZXJpbmcgc3RhdHVzIiwgMH0sCisgIHtHU1RfUVVFUllfQ1VTVE9NLCAiY3VzdG9tIiwgIkN1c3RvbSBxdWVyeSIsIDB9LAorICB7R1NUX1FVRVJZX1VSSSwgInVyaSIsICJVUkkgb2YgdGhlIHNvdXJjZSBvciBzaW5rIiwgMH0sCisgIHtHU1RfUVVFUllfQUxMT0NBVElPTiwgImFsbG9jYXRpb24iLCAiQWxsb2NhdGlvbiBwcm9wZXJ0aWVzIiwgMH0sCisgIHtHU1RfUVVFUllfU0NIRURVTElORywgInNjaGVkdWxpbmciLCAiU2NoZWR1bGluZyBwcm9wZXJ0aWVzIiwgMH0sCisgIHtHU1RfUVVFUllfTk9ORSwgTlVMTCwgTlVMTCwgMH0KK307CisKK0dTVF9ERUZJTkVfTUlOSV9PQkpFQ1RfVFlQRSAoR3N0UXVlcnksIGdzdF9xdWVyeSk7CisKK3ZvaWQKK19wcml2X2dzdF9xdWVyeV9pbml0aWFsaXplICh2b2lkKQoreworICBHc3RRdWVyeVR5cGVEZWZpbml0aW9uICpzdGFuZGFyZHMgPSBzdGFuZGFyZF9kZWZpbml0aW9uczsKKworICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfR1NUX0lOSVQsICJpbml0IHF1ZXJpZXMiKTsKKworICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X3F1ZXJ5X2RlYnVnLCAicXVlcnkiLCAwLCAicXVlcnkgc3lzdGVtIik7CisKKyAgZ19zdGF0aWNfbXV0ZXhfbG9jayAoJm11dGV4KTsKKyAgaWYgKF9uaWNrX3RvX3F1ZXJ5ID09IE5VTEwpIHsKKyAgICBfbmlja190b19xdWVyeSA9IGdfaGFzaF90YWJsZV9uZXcgKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsKTsKKyAgICBfcXVlcnlfdHlwZV90b19uaWNrID0gZ19oYXNoX3RhYmxlX25ldyAoTlVMTCwgTlVMTCk7CisgIH0KKworICB3aGlsZSAoc3RhbmRhcmRzLT5uaWNrKSB7CisgICAgc3RhbmRhcmRzLT5xdWFyayA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChzdGFuZGFyZHMtPm5pY2spOworICAgIGdfaGFzaF90YWJsZV9pbnNlcnQgKF9uaWNrX3RvX3F1ZXJ5LCAoZ3BvaW50ZXIpIHN0YW5kYXJkcy0+bmljaywgc3RhbmRhcmRzKTsKKyAgICBnX2hhc2hfdGFibGVfaW5zZXJ0IChfcXVlcnlfdHlwZV90b19uaWNrLAorICAgICAgICBHSU5UX1RPX1BPSU5URVIgKHN0YW5kYXJkcy0+dmFsdWUpLCBzdGFuZGFyZHMpOworCisgICAgX2dzdF9xdWVyaWVzID0gZ19saXN0X2FwcGVuZCAoX2dzdF9xdWVyaWVzLCBzdGFuZGFyZHMpOworICAgIHN0YW5kYXJkcysrOworICAgIF9uX3ZhbHVlcysrOworICB9CisgIGdfc3RhdGljX211dGV4X3VubG9jayAoJm11dGV4KTsKKworICBfZ3N0X3F1ZXJ5X3R5cGUgPSBnc3RfcXVlcnlfZ2V0X3R5cGUgKCk7Cit9CisKKy8qKgorICogZ3N0X3F1ZXJ5X3R5cGVfZ2V0X25hbWU6CisgKiBAcXVlcnk6IHRoZSBxdWVyeSB0eXBlCisgKgorICogR2V0IGEgcHJpbnRhYmxlIG5hbWUgZm9yIHRoZSBnaXZlbiBxdWVyeSB0eXBlLiBEbyBub3QgbW9kaWZ5IG9yIGZyZWUuCisgKgorICogUmV0dXJuczogYSByZWZlcmVuY2UgdG8gdGhlIHN0YXRpYyBuYW1lIG9mIHRoZSBxdWVyeS4KKyAqLworY29uc3QgZ2NoYXIgKgorZ3N0X3F1ZXJ5X3R5cGVfZ2V0X25hbWUgKEdzdFF1ZXJ5VHlwZSBxdWVyeSkKK3sKKyAgY29uc3QgR3N0UXVlcnlUeXBlRGVmaW5pdGlvbiAqZGVmOworCisgIGRlZiA9IGdzdF9xdWVyeV90eXBlX2dldF9kZXRhaWxzIChxdWVyeSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkZWYgIT0gTlVMTCwgTlVMTCk7CisKKyAgcmV0dXJuIGRlZi0+bmljazsKK30KKworLyoqCisgKiBnc3RfcXVlcnlfdHlwZV90b19xdWFyazoKKyAqIEBxdWVyeTogdGhlIHF1ZXJ5IHR5cGUKKyAqCisgKiBHZXQgdGhlIHVuaXF1ZSBxdWFyayBmb3IgdGhlIGdpdmVuIHF1ZXJ5IHR5cGUuCisgKgorICogUmV0dXJuczogdGhlIHF1YXJrIGFzc29jaWF0ZWQgd2l0aCB0aGUgcXVlcnkgdHlwZQorICovCitHUXVhcmsKK2dzdF9xdWVyeV90eXBlX3RvX3F1YXJrIChHc3RRdWVyeVR5cGUgcXVlcnkpCit7CisgIGNvbnN0IEdzdFF1ZXJ5VHlwZURlZmluaXRpb24gKmRlZjsKKworICBkZWYgPSBnc3RfcXVlcnlfdHlwZV9nZXRfZGV0YWlscyAocXVlcnkpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGVmICE9IE5VTEwsIDApOworCisgIHJldHVybiBkZWYtPnF1YXJrOworfQorCisvKioKKyAqIGdzdF9xdWVyeV90eXBlX3JlZ2lzdGVyOgorICogQG5pY2s6IFRoZSBuaWNrIG9mIHRoZSBuZXcgcXVlcnkKKyAqIEBkZXNjcmlwdGlvbjogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBuZXcgcXVlcnkKKyAqCisgKiBDcmVhdGUgYSBuZXcgR3N0UXVlcnlUeXBlIGJhc2VkIG9uIHRoZSBuaWNrIG9yIHJldHVybiBhbgorICogYWxyZWFkeSByZWdpc3RlcmVkIHF1ZXJ5IHdpdGggdGhhdCBuaWNrCisgKgorICogUmV0dXJuczogQSBuZXcgR3N0UXVlcnlUeXBlIG9yIGFuIGFscmVhZHkgcmVnaXN0ZXJlZCBxdWVyeQorICogd2l0aCB0aGUgc2FtZSBuaWNrLgorICovCitHc3RRdWVyeVR5cGUKK2dzdF9xdWVyeV90eXBlX3JlZ2lzdGVyIChjb25zdCBnY2hhciAqIG5pY2ssIGNvbnN0IGdjaGFyICogZGVzY3JpcHRpb24pCit7CisgIEdzdFF1ZXJ5VHlwZURlZmluaXRpb24gKnF1ZXJ5OworICBHc3RRdWVyeVR5cGUgbG9va3VwOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuaWNrICE9IE5VTEwsIEdTVF9RVUVSWV9OT05FKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRlc2NyaXB0aW9uICE9IE5VTEwsIEdTVF9RVUVSWV9OT05FKTsKKworICBsb29rdXAgPSBnc3RfcXVlcnlfdHlwZV9nZXRfYnlfbmljayAobmljayk7CisgIGlmIChsb29rdXAgIT0gR1NUX1FVRVJZX05PTkUpCisgICAgcmV0dXJuIGxvb2t1cDsKKworICBxdWVyeSA9IGdfc2xpY2VfbmV3IChHc3RRdWVyeVR5cGVEZWZpbml0aW9uKTsKKyAgcXVlcnktPnZhbHVlID0gKEdzdFF1ZXJ5VHlwZSkgX25fdmFsdWVzOworICBxdWVyeS0+bmljayA9IGdfc3RyZHVwIChuaWNrKTsKKyAgcXVlcnktPmRlc2NyaXB0aW9uID0gZ19zdHJkdXAgKGRlc2NyaXB0aW9uKTsKKyAgcXVlcnktPnF1YXJrID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKHF1ZXJ5LT5uaWNrKTsKKworICBnX3N0YXRpY19tdXRleF9sb2NrICgmbXV0ZXgpOworICBnX2hhc2hfdGFibGVfaW5zZXJ0IChfbmlja190b19xdWVyeSwgKGdwb2ludGVyKSBxdWVyeS0+bmljaywgcXVlcnkpOworICBnX2hhc2hfdGFibGVfaW5zZXJ0IChfcXVlcnlfdHlwZV90b19uaWNrLCBHSU5UX1RPX1BPSU5URVIgKHF1ZXJ5LT52YWx1ZSksCisgICAgICBxdWVyeSk7CisgIF9nc3RfcXVlcmllcyA9IGdfbGlzdF9hcHBlbmQgKF9nc3RfcXVlcmllcywgcXVlcnkpOworICBfbl92YWx1ZXMrKzsKKyAgZ19zdGF0aWNfbXV0ZXhfdW5sb2NrICgmbXV0ZXgpOworCisgIHJldHVybiBxdWVyeS0+dmFsdWU7Cit9CisKKy8qKgorICogZ3N0X3F1ZXJ5X3R5cGVfZ2V0X2J5X25pY2s6CisgKiBAbmljazogVGhlIG5pY2sgb2YgdGhlIHF1ZXJ5CisgKgorICogR2V0IHRoZSBxdWVyeSB0eXBlIHJlZ2lzdGVyZWQgd2l0aCBAbmljay4KKyAqCisgKiBSZXR1cm5zOiBUaGUgcXVlcnkgcmVnaXN0ZXJlZCB3aXRoIEBuaWNrIG9yICNHU1RfUVVFUllfTk9ORQorICogaWYgdGhlIHF1ZXJ5IHdhcyBub3QgcmVnaXN0ZXJlZC4KKyAqLworR3N0UXVlcnlUeXBlCitnc3RfcXVlcnlfdHlwZV9nZXRfYnlfbmljayAoY29uc3QgZ2NoYXIgKiBuaWNrKQoreworICBHc3RRdWVyeVR5cGVEZWZpbml0aW9uICpxdWVyeTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAobmljayAhPSBOVUxMLCBHU1RfUVVFUllfTk9ORSk7CisKKyAgZ19zdGF0aWNfbXV0ZXhfbG9jayAoJm11dGV4KTsKKyAgcXVlcnkgPSBnX2hhc2hfdGFibGVfbG9va3VwIChfbmlja190b19xdWVyeSwgbmljayk7CisgIGdfc3RhdGljX211dGV4X3VubG9jayAoJm11dGV4KTsKKworICBpZiAocXVlcnkgIT0gTlVMTCkKKyAgICByZXR1cm4gcXVlcnktPnZhbHVlOworICBlbHNlCisgICAgcmV0dXJuIEdTVF9RVUVSWV9OT05FOworfQorCisvKioKKyAqIGdzdF9xdWVyeV90eXBlc19jb250YWluczoKKyAqIEB0eXBlczogVGhlIHF1ZXJ5IGFycmF5IHRvIHNlYXJjaAorICogQHR5cGU6IHRoZSAjR3N0UXVlcnlUeXBlIHRvIGZpbmQKKyAqCisgKiBTZWUgaWYgdGhlIGdpdmVuICNHc3RRdWVyeVR5cGUgaXMgaW5zaWRlIHRoZSBAdHlwZXMgcXVlcnkgdHlwZXMgYXJyYXkuCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgdHlwZSBpcyBmb3VuZCBpbnNpZGUgdGhlIGFycmF5CisgKi8KK2dib29sZWFuCitnc3RfcXVlcnlfdHlwZXNfY29udGFpbnMgKGNvbnN0IEdzdFF1ZXJ5VHlwZSAqIHR5cGVzLCBHc3RRdWVyeVR5cGUgdHlwZSkKK3sKKyAgaWYgKCF0eXBlcykKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgd2hpbGUgKCp0eXBlcykgeworICAgIGlmICgqdHlwZXMgPT0gdHlwZSkKKyAgICAgIHJldHVybiBUUlVFOworCisgICAgdHlwZXMrKzsKKyAgfQorICByZXR1cm4gRkFMU0U7Cit9CisKKworLyoqCisgKiBnc3RfcXVlcnlfdHlwZV9nZXRfZGV0YWlsczoKKyAqIEB0eXBlOiBhICNHc3RRdWVyeVR5cGUKKyAqCisgKiBHZXQgZGV0YWlscyBhYm91dCB0aGUgZ2l2ZW4gI0dzdFF1ZXJ5VHlwZS4KKyAqCisgKiBSZXR1cm5zOiBUaGUgI0dzdFF1ZXJ5VHlwZURlZmluaXRpb24gZm9yIEB0eXBlIG9yIE5VTEwgb24gZmFpbHVyZS4KKyAqLworY29uc3QgR3N0UXVlcnlUeXBlRGVmaW5pdGlvbiAqCitnc3RfcXVlcnlfdHlwZV9nZXRfZGV0YWlscyAoR3N0UXVlcnlUeXBlIHR5cGUpCit7CisgIGNvbnN0IEdzdFF1ZXJ5VHlwZURlZmluaXRpb24gKnJlc3VsdDsKKworICBnX3N0YXRpY19tdXRleF9sb2NrICgmbXV0ZXgpOworICByZXN1bHQgPSBnX2hhc2hfdGFibGVfbG9va3VwIChfcXVlcnlfdHlwZV90b19uaWNrLCBHSU5UX1RPX1BPSU5URVIgKHR5cGUpKTsKKyAgZ19zdGF0aWNfbXV0ZXhfdW5sb2NrICgmbXV0ZXgpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZ3N0X3F1ZXJ5X3R5cGVfaXRlcmF0ZV9kZWZpbml0aW9uczoKKyAqCisgKiBHZXQgYSAjR3N0SXRlcmF0b3Igb2YgYWxsIHRoZSByZWdpc3RlcmVkIHF1ZXJ5IHR5cGVzLiBUaGUgZGVmaW5pdGlvbnMKKyAqIGl0ZXJhdGVkIG92ZXIgYXJlIHJlYWQgb25seS4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnc3RfaXRlcmF0b3JfZnJlZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0SXRlcmF0b3Igb2YgI0dzdFF1ZXJ5VHlwZURlZmluaXRpb24uCisgKi8KK0dzdEl0ZXJhdG9yICoKK2dzdF9xdWVyeV90eXBlX2l0ZXJhdGVfZGVmaW5pdGlvbnMgKHZvaWQpCit7CisgIEdzdEl0ZXJhdG9yICpyZXN1bHQ7CisKKyAgZ19zdGF0aWNfbXV0ZXhfbG9jayAoJm11dGV4KTsKKyAgLyogRklYTUU6IHJlZ2lzdGVyIGEgYm94ZWQgdHlwZSBmb3IgR3N0UXVlcnlUeXBlRGVmaW5pdGlvbiAqLworICByZXN1bHQgPSBnc3RfaXRlcmF0b3JfbmV3X2xpc3QgKEdfVFlQRV9QT0lOVEVSLAorICAgICAgZ19zdGF0aWNfbXV0ZXhfZ2V0X211dGV4ICgmbXV0ZXgpLCAmX25fdmFsdWVzLCAmX2dzdF9xdWVyaWVzLCBOVUxMLCBOVUxMKTsKKyAgZ19zdGF0aWNfbXV0ZXhfdW5sb2NrICgmbXV0ZXgpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitfZ3N0X3F1ZXJ5X2ZyZWUgKEdzdFF1ZXJ5ICogcXVlcnkpCit7CisgIEdzdFN0cnVjdHVyZSAqczsKKworICBnX3JldHVybl9pZl9mYWlsIChxdWVyeSAhPSBOVUxMKTsKKworICBzID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOworICBpZiAocykgeworICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X3BhcmVudF9yZWZjb3VudCAocywgTlVMTCk7CisgICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzKTsKKyAgfQorCisgIGdfc2xpY2VfZnJlZTEgKEdTVF9NSU5JX09CSkVDVF9TSVpFIChxdWVyeSksIHF1ZXJ5KTsKK30KKworc3RhdGljIEdzdFF1ZXJ5ICpnc3RfcXVlcnlfbmV3IChHc3RRdWVyeVR5cGUgdHlwZSwgR3N0U3RydWN0dXJlICogc3RydWN0dXJlKTsKKworc3RhdGljIEdzdFF1ZXJ5ICoKK19nc3RfcXVlcnlfY29weSAoR3N0UXVlcnkgKiBxdWVyeSkKK3sKKyAgR3N0UXVlcnkgKmNvcHk7CisKKyAgY29weSA9IGdzdF9xdWVyeV9uZXcgKHF1ZXJ5LT50eXBlLCBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSkpOworCisgIHJldHVybiBjb3B5OworfQorCitzdGF0aWMgR3N0UXVlcnkgKgorZ3N0X3F1ZXJ5X25ldyAoR3N0UXVlcnlUeXBlIHR5cGUsIEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSkKK3sKKyAgR3N0UXVlcnlJbXBsICpxdWVyeTsKKworICBxdWVyeSA9IGdfc2xpY2VfbmV3MCAoR3N0UXVlcnlJbXBsKTsKKworICBnc3RfbWluaV9vYmplY3RfaW5pdCAoR1NUX01JTklfT0JKRUNUX0NBU1QgKHF1ZXJ5KSwKKyAgICAgIF9nc3RfcXVlcnlfdHlwZSwgc2l6ZW9mIChHc3RRdWVyeUltcGwpKTsKKworICBxdWVyeS0+cXVlcnkubWluaV9vYmplY3QuY29weSA9IChHc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uKSBfZ3N0X3F1ZXJ5X2NvcHk7CisgIHF1ZXJ5LT5xdWVyeS5taW5pX29iamVjdC5mcmVlID0gKEdzdE1pbmlPYmplY3RGcmVlRnVuY3Rpb24pIF9nc3RfcXVlcnlfZnJlZTsKKworICBHU1RfREVCVUcgKCJjcmVhdGluZyBuZXcgcXVlcnkgJXAgJWQiLCBxdWVyeSwgdHlwZSk7CisKKyAgR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9IHR5cGU7CisgIHF1ZXJ5LT5zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisKKyAgaWYgKHN0cnVjdHVyZSkKKyAgICBnc3Rfc3RydWN0dXJlX3NldF9wYXJlbnRfcmVmY291bnQgKHN0cnVjdHVyZSwKKyAgICAgICAgJnF1ZXJ5LT5xdWVyeS5taW5pX29iamVjdC5yZWZjb3VudCk7CisKKyAgcmV0dXJuIEdTVF9RVUVSWV9DQVNUIChxdWVyeSk7Cit9CisKKy8qKgorICogZ3N0X3F1ZXJ5X25ld19wb3NpdGlvbjoKKyAqIEBmb3JtYXQ6IHRoZSBkZWZhdWx0ICNHc3RGb3JtYXQgZm9yIHRoZSBuZXcgcXVlcnkKKyAqCisgKiBDb25zdHJ1Y3RzIGEgbmV3IHF1ZXJ5IHN0cmVhbSBwb3NpdGlvbiBxdWVyeSBvYmplY3QuIFVzZSBnc3RfcXVlcnlfdW5yZWYoKQorICogd2hlbiBkb25lIHdpdGggaXQuIEEgcG9zaXRpb24gcXVlcnkgaXMgdXNlZCB0byBxdWVyeSB0aGUgY3VycmVudCBwb3NpdGlvbgorICogb2YgcGxheWJhY2sgaW4gdGhlIHN0cmVhbXMsIGluIHNvbWUgZm9ybWF0LgorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdzdF9xdWVyeV91bnJlZgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdFF1ZXJ5CisgKi8KK0dzdFF1ZXJ5ICoKK2dzdF9xdWVyeV9uZXdfcG9zaXRpb24gKEdzdEZvcm1hdCBmb3JtYXQpCit7CisgIEdzdFF1ZXJ5ICpxdWVyeTsKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9pZF9uZXcgKEdTVF9RVUFSSyAoUVVFUllfUE9TSVRJT04pLAorICAgICAgR1NUX1FVQVJLIChGT1JNQVQpLCBHU1RfVFlQRV9GT1JNQVQsIGZvcm1hdCwKKyAgICAgIEdTVF9RVUFSSyAoQ1VSUkVOVCksIEdfVFlQRV9JTlQ2NCwgR19HSU5UNjRfQ09OU1RBTlQgKC0xKSwgTlVMTCk7CisKKyAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3IChHU1RfUVVFUllfUE9TSVRJT04sIHN0cnVjdHVyZSk7CisKKyAgcmV0dXJuIHF1ZXJ5OworfQorCisvKioKKyAqIGdzdF9xdWVyeV9zZXRfcG9zaXRpb246CisgKiBAcXVlcnk6IGEgI0dzdFF1ZXJ5IHdpdGggcXVlcnkgdHlwZSBHU1RfUVVFUllfUE9TSVRJT04KKyAqIEBmb3JtYXQ6IHRoZSByZXF1ZXN0ZWQgI0dzdEZvcm1hdAorICogQGN1cjogdGhlIHBvc2l0aW9uIHRvIHNldAorICoKKyAqIEFuc3dlciBhIHBvc2l0aW9uIHF1ZXJ5IGJ5IHNldHRpbmcgdGhlIHJlcXVlc3RlZCB2YWx1ZSBpbiB0aGUgZ2l2ZW4gZm9ybWF0LgorICovCit2b2lkCitnc3RfcXVlcnlfc2V0X3Bvc2l0aW9uIChHc3RRdWVyeSAqIHF1ZXJ5LCBHc3RGb3JtYXQgZm9ybWF0LCBnaW50NjQgY3VyKQoreworICBHc3RTdHJ1Y3R1cmUgKnM7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfUE9TSVRJT04pOworCisgIHMgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKGZvcm1hdCA9PSBnX3ZhbHVlX2dldF9lbnVtIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAocywKKyAgICAgICAgICAgICAgR1NUX1FVQVJLIChGT1JNQVQpKSkpOworCisgIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0IChzLAorICAgICAgR1NUX1FVQVJLIChGT1JNQVQpLCBHU1RfVFlQRV9GT1JNQVQsIGZvcm1hdCwKKyAgICAgIEdTVF9RVUFSSyAoQ1VSUkVOVCksIEdfVFlQRV9JTlQ2NCwgY3VyLCBOVUxMKTsKK30KKworLyoqCisgKiBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb246CisgKiBAcXVlcnk6IGEgI0dzdFF1ZXJ5CisgKiBAZm9ybWF0OiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBzdG9yYWdlIGZvciB0aGUgI0dzdEZvcm1hdCBvZiB0aGUKKyAqICAgICBwb3NpdGlvbiB2YWx1ZXMgKG1heSBiZSBOVUxMKQorICogQGN1cjogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgc3RvcmFnZSBmb3IgdGhlIGN1cnJlbnQgcG9zaXRpb24gKG1heSBiZSBOVUxMKQorICoKKyAqIFBhcnNlIGEgcG9zaXRpb24gcXVlcnksIHdyaXRpbmcgdGhlIGZvcm1hdCBpbnRvIEBmb3JtYXQsIGFuZCB0aGUgcG9zaXRpb24KKyAqIGludG8gQGN1ciwgaWYgdGhlIHJlc3BlY3RpdmUgcGFyYW1ldGVycyBhcmUgbm9uLU5VTEwuCisgKi8KK3ZvaWQKK2dzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbiAoR3N0UXVlcnkgKiBxdWVyeSwgR3N0Rm9ybWF0ICogZm9ybWF0LCBnaW50NjQgKiBjdXIpCit7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX1BPU0lUSU9OKTsKKworICBzdHJ1Y3R1cmUgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7CisgIGlmIChmb3JtYXQpCisgICAgKmZvcm1hdCA9CisgICAgICAgIChHc3RGb3JtYXQpIGdfdmFsdWVfZ2V0X2VudW0gKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCisgICAgICAgICAgICBHU1RfUVVBUksgKEZPUk1BVCkpKTsKKyAgaWYgKGN1cikKKyAgICAqY3VyID0gZ192YWx1ZV9nZXRfaW50NjQgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCisgICAgICAgICAgICBHU1RfUVVBUksgKENVUlJFTlQpKSk7Cit9CisKKworLyoqCisgKiBnc3RfcXVlcnlfbmV3X2R1cmF0aW9uOgorICogQGZvcm1hdDogdGhlICNHc3RGb3JtYXQgZm9yIHRoaXMgZHVyYXRpb24gcXVlcnkKKyAqCisgKiBDb25zdHJ1Y3RzIGEgbmV3IHN0cmVhbSBkdXJhdGlvbiBxdWVyeSBvYmplY3QgdG8gcXVlcnkgaW4gdGhlIGdpdmVuIGZvcm1hdC4KKyAqIFVzZSBnc3RfcXVlcnlfdW5yZWYoKSB3aGVuIGRvbmUgd2l0aCBpdC4gQSBkdXJhdGlvbiBxdWVyeSB3aWxsIGdpdmUgdGhlCisgKiB0b3RhbCBsZW5ndGggb2YgdGhlIHN0cmVhbS4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnc3RfcXVlcnlfdW5yZWYKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RRdWVyeQorICovCitHc3RRdWVyeSAqCitnc3RfcXVlcnlfbmV3X2R1cmF0aW9uIChHc3RGb3JtYXQgZm9ybWF0KQoreworICBHc3RRdWVyeSAqcXVlcnk7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfbmV3IChHU1RfUVVBUksgKFFVRVJZX0RVUkFUSU9OKSwKKyAgICAgIEdTVF9RVUFSSyAoRk9STUFUKSwgR1NUX1RZUEVfRk9STUFULCBmb3JtYXQsCisgICAgICBHU1RfUVVBUksgKERVUkFUSU9OKSwgR19UWVBFX0lOVDY0LCBHX0dJTlQ2NF9DT05TVEFOVCAoLTEpLCBOVUxMKTsKKworICBxdWVyeSA9IGdzdF9xdWVyeV9uZXcgKEdTVF9RVUVSWV9EVVJBVElPTiwgc3RydWN0dXJlKTsKKworICByZXR1cm4gcXVlcnk7Cit9CisKKy8qKgorICogZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbjoKKyAqIEBxdWVyeTogYSAjR3N0UXVlcnkKKyAqIEBmb3JtYXQ6IHRoZSAjR3N0Rm9ybWF0IGZvciB0aGUgZHVyYXRpb24KKyAqIEBkdXJhdGlvbjogdGhlIGR1cmF0aW9uIG9mIHRoZSBzdHJlYW0KKyAqCisgKiBBbnN3ZXIgYSBkdXJhdGlvbiBxdWVyeSBieSBzZXR0aW5nIHRoZSByZXF1ZXN0ZWQgdmFsdWUgaW4gdGhlIGdpdmVuIGZvcm1hdC4KKyAqLwordm9pZAorZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbiAoR3N0UXVlcnkgKiBxdWVyeSwgR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0IGR1cmF0aW9uKQoreworICBHc3RTdHJ1Y3R1cmUgKnM7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfRFVSQVRJT04pOworCisgIHMgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKGZvcm1hdCA9PSBnX3ZhbHVlX2dldF9lbnVtIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAocywKKyAgICAgICAgICAgICAgR1NUX1FVQVJLIChGT1JNQVQpKSkpOworICBnc3Rfc3RydWN0dXJlX2lkX3NldCAocywgR1NUX1FVQVJLIChGT1JNQVQpLCBHU1RfVFlQRV9GT1JNQVQsIGZvcm1hdCwKKyAgICAgIEdTVF9RVUFSSyAoRFVSQVRJT04pLCBHX1RZUEVfSU5UNjQsIGR1cmF0aW9uLCBOVUxMKTsKK30KKworLyoqCisgKiBnc3RfcXVlcnlfcGFyc2VfZHVyYXRpb246CisgKiBAcXVlcnk6IGEgI0dzdFF1ZXJ5CisgKiBAZm9ybWF0OiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBzdG9yYWdlIGZvciB0aGUgI0dzdEZvcm1hdCBvZiB0aGUgZHVyYXRpb24KKyAqICAgICB2YWx1ZSwgb3IgTlVMTC4KKyAqIEBkdXJhdGlvbjogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgc3RvcmFnZSBmb3IgdGhlIHRvdGFsIGR1cmF0aW9uLCBvciBOVUxMLgorICoKKyAqIFBhcnNlIGEgZHVyYXRpb24gcXVlcnkgYW5zd2VyLiBXcml0ZSB0aGUgZm9ybWF0IG9mIHRoZSBkdXJhdGlvbiBpbnRvIEBmb3JtYXQsCisgKiBhbmQgdGhlIHZhbHVlIGludG8gQGR1cmF0aW9uLCBpZiB0aGUgcmVzcGVjdGl2ZSB2YXJpYWJsZXMgYXJlIG5vbi1OVUxMLgorICovCit2b2lkCitnc3RfcXVlcnlfcGFyc2VfZHVyYXRpb24gKEdzdFF1ZXJ5ICogcXVlcnksIEdzdEZvcm1hdCAqIGZvcm1hdCwKKyAgICBnaW50NjQgKiBkdXJhdGlvbikKK3sKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfRFVSQVRJT04pOworCisgIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKKyAgaWYgKGZvcm1hdCkKKyAgICAqZm9ybWF0ID0KKyAgICAgICAgKEdzdEZvcm1hdCkgZ192YWx1ZV9nZXRfZW51bSAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgIEdTVF9RVUFSSyAoRk9STUFUKSkpOworICBpZiAoZHVyYXRpb24pCisgICAgKmR1cmF0aW9uID0gZ192YWx1ZV9nZXRfaW50NjQgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCisgICAgICAgICAgICBHU1RfUVVBUksgKERVUkFUSU9OKSkpOworfQorCisvKioKKyAqIGdzdF9xdWVyeV9uZXdfbGF0ZW5jeToKKyAqCisgKiBDb25zdHJ1Y3RzIGEgbmV3IGxhdGVuY3kgcXVlcnkgb2JqZWN0LgorICogVXNlIGdzdF9xdWVyeV91bnJlZigpIHdoZW4gZG9uZSB3aXRoIGl0LiBBIGxhdGVuY3kgcXVlcnkgaXMgdXN1YWxseSBwZXJmb3JtZWQKKyAqIGJ5IHNpbmtzIHRvIGNvbXBlbnNhdGUgZm9yIGFkZGl0aW9uYWwgbGF0ZW5jeSBpbnRyb2R1Y2VkIGJ5IGVsZW1lbnRzIGluIHRoZQorICogcGlwZWxpbmUuCisgKgorICogRnJlZS1mdW5jdGlvbjogZ3N0X3F1ZXJ5X3VucmVmCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RRdWVyeQorICoKKyAqIFNpbmNlOiAwLjEwLjEyCisgKi8KK0dzdFF1ZXJ5ICoKK2dzdF9xdWVyeV9uZXdfbGF0ZW5jeSAodm9pZCkKK3sKKyAgR3N0UXVlcnkgKnF1ZXJ5OworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX2lkX25ldyAoR1NUX1FVQVJLIChRVUVSWV9MQVRFTkNZKSwKKyAgICAgIEdTVF9RVUFSSyAoTElWRSksIEdfVFlQRV9CT09MRUFOLCBGQUxTRSwKKyAgICAgIEdTVF9RVUFSSyAoTUlOX0xBVEVOQ1kpLCBHX1RZUEVfVUlOVDY0LCBHX0dVSU5UNjRfQ09OU1RBTlQgKDApLAorICAgICAgR1NUX1FVQVJLIChNQVhfTEFURU5DWSksIEdfVFlQRV9VSU5UNjQsIEdfR1VJTlQ2NF9DT05TVEFOVCAoLTEpLCBOVUxMKTsKKworICBxdWVyeSA9IGdzdF9xdWVyeV9uZXcgKEdTVF9RVUVSWV9MQVRFTkNZLCBzdHJ1Y3R1cmUpOworCisgIHJldHVybiBxdWVyeTsKK30KKworLyoqCisgKiBnc3RfcXVlcnlfc2V0X2xhdGVuY3k6CisgKiBAcXVlcnk6IGEgI0dzdFF1ZXJ5CisgKiBAbGl2ZTogaWYgdGhlcmUgaXMgYSBsaXZlIGVsZW1lbnQgdXBzdHJlYW0KKyAqIEBtaW5fbGF0ZW5jeTogdGhlIG1pbmltYWwgbGF0ZW5jeSBvZiB0aGUgbGl2ZSBlbGVtZW50CisgKiBAbWF4X2xhdGVuY3k6IHRoZSBtYXhpbWFsIGxhdGVuY3kgb2YgdGhlIGxpdmUgZWxlbWVudAorICoKKyAqIEFuc3dlciBhIGxhdGVuY3kgcXVlcnkgYnkgc2V0dGluZyB0aGUgcmVxdWVzdGVkIHZhbHVlcyBpbiB0aGUgZ2l2ZW4gZm9ybWF0LgorICoKKyAqIFNpbmNlOiAwLjEwLjEyCisgKi8KK3ZvaWQKK2dzdF9xdWVyeV9zZXRfbGF0ZW5jeSAoR3N0UXVlcnkgKiBxdWVyeSwgZ2Jvb2xlYW4gbGl2ZSwKKyAgICBHc3RDbG9ja1RpbWUgbWluX2xhdGVuY3ksIEdzdENsb2NrVGltZSBtYXhfbGF0ZW5jeSkKK3sKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfTEFURU5DWSk7CisKKyAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOworICBnc3Rfc3RydWN0dXJlX2lkX3NldCAoc3RydWN0dXJlLAorICAgICAgR1NUX1FVQVJLIChMSVZFKSwgR19UWVBFX0JPT0xFQU4sIGxpdmUsCisgICAgICBHU1RfUVVBUksgKE1JTl9MQVRFTkNZKSwgR19UWVBFX1VJTlQ2NCwgbWluX2xhdGVuY3ksCisgICAgICBHU1RfUVVBUksgKE1BWF9MQVRFTkNZKSwgR19UWVBFX1VJTlQ2NCwgbWF4X2xhdGVuY3ksIE5VTEwpOworfQorCisvKioKKyAqIGdzdF9xdWVyeV9wYXJzZV9sYXRlbmN5OgorICogQHF1ZXJ5OiBhICNHc3RRdWVyeQorICogQGxpdmU6IChvdXQpIChhbGxvdy1ub25lKTogc3RvcmFnZSBmb3IgbGl2ZSBvciBOVUxMCisgKiBAbWluX2xhdGVuY3k6IChvdXQpIChhbGxvdy1ub25lKTogdGhlIHN0b3JhZ2UgZm9yIHRoZSBtaW4gbGF0ZW5jeSBvciBOVUxMCisgKiBAbWF4X2xhdGVuY3k6IChvdXQpIChhbGxvdy1ub25lKTogdGhlIHN0b3JhZ2UgZm9yIHRoZSBtYXggbGF0ZW5jeSBvciBOVUxMCisgKgorICogUGFyc2UgYSBsYXRlbmN5IHF1ZXJ5IGFuc3dlci4KKyAqCisgKiBTaW5jZTogMC4xMC4xMgorICovCit2b2lkCitnc3RfcXVlcnlfcGFyc2VfbGF0ZW5jeSAoR3N0UXVlcnkgKiBxdWVyeSwgZ2Jvb2xlYW4gKiBsaXZlLAorICAgIEdzdENsb2NrVGltZSAqIG1pbl9sYXRlbmN5LCBHc3RDbG9ja1RpbWUgKiBtYXhfbGF0ZW5jeSkKK3sKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfTEFURU5DWSk7CisKKyAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOworICBpZiAobGl2ZSkKKyAgICAqbGl2ZSA9CisgICAgICAgIGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCisgICAgICAgICAgICBHU1RfUVVBUksgKExJVkUpKSk7CisgIGlmIChtaW5fbGF0ZW5jeSkKKyAgICAqbWluX2xhdGVuY3kgPSBnX3ZhbHVlX2dldF91aW50NjQgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCisgICAgICAgICAgICBHU1RfUVVBUksgKE1JTl9MQVRFTkNZKSkpOworICBpZiAobWF4X2xhdGVuY3kpCisgICAgKm1heF9sYXRlbmN5ID0gZ192YWx1ZV9nZXRfdWludDY0IChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAorICAgICAgICAgICAgR1NUX1FVQVJLIChNQVhfTEFURU5DWSkpKTsKK30KKworLyoqCisgKiBnc3RfcXVlcnlfbmV3X2NvbnZlcnQ6CisgKiBAc3JjX2Zvcm1hdDogdGhlIHNvdXJjZSAjR3N0Rm9ybWF0IGZvciB0aGUgbmV3IHF1ZXJ5CisgKiBAdmFsdWU6IHRoZSB2YWx1ZSB0byBjb252ZXJ0CisgKiBAZGVzdF9mb3JtYXQ6IHRoZSB0YXJnZXQgI0dzdEZvcm1hdAorICoKKyAqIENvbnN0cnVjdHMgYSBuZXcgY29udmVydCBxdWVyeSBvYmplY3QuIFVzZSBnc3RfcXVlcnlfdW5yZWYoKQorICogd2hlbiBkb25lIHdpdGggaXQuIEEgY29udmVydCBxdWVyeSBpcyB1c2VkIHRvIGFzayBmb3IgYSBjb252ZXJzaW9uIGJldHdlZW4KKyAqIG9uZSBmb3JtYXQgYW5kIGFub3RoZXIuCisgKgorICogRnJlZS1mdW5jdGlvbjogZ3N0X3F1ZXJ5X3VucmVmCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RRdWVyeQorICovCitHc3RRdWVyeSAqCitnc3RfcXVlcnlfbmV3X2NvbnZlcnQgKEdzdEZvcm1hdCBzcmNfZm9ybWF0LCBnaW50NjQgdmFsdWUsCisgICAgR3N0Rm9ybWF0IGRlc3RfZm9ybWF0KQoreworICBHc3RRdWVyeSAqcXVlcnk7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfbmV3IChHU1RfUVVBUksgKFFVRVJZX0NPTlZFUlQpLAorICAgICAgR1NUX1FVQVJLIChTUkNfRk9STUFUKSwgR1NUX1RZUEVfRk9STUFULCBzcmNfZm9ybWF0LAorICAgICAgR1NUX1FVQVJLIChTUkNfVkFMVUUpLCBHX1RZUEVfSU5UNjQsIHZhbHVlLAorICAgICAgR1NUX1FVQVJLIChERVNUX0ZPUk1BVCksIEdTVF9UWVBFX0ZPUk1BVCwgZGVzdF9mb3JtYXQsCisgICAgICBHU1RfUVVBUksgKERFU1RfVkFMVUUpLCBHX1RZUEVfSU5UNjQsIEdfR0lOVDY0X0NPTlNUQU5UICgtMSksIE5VTEwpOworCisgIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ldyAoR1NUX1FVRVJZX0NPTlZFUlQsIHN0cnVjdHVyZSk7CisKKyAgcmV0dXJuIHF1ZXJ5OworfQorCisvKioKKyAqIGdzdF9xdWVyeV9zZXRfY29udmVydDoKKyAqIEBxdWVyeTogYSAjR3N0UXVlcnkKKyAqIEBzcmNfZm9ybWF0OiB0aGUgc291cmNlICNHc3RGb3JtYXQKKyAqIEBzcmNfdmFsdWU6IHRoZSBzb3VyY2UgdmFsdWUKKyAqIEBkZXN0X2Zvcm1hdDogdGhlIGRlc3RpbmF0aW9uICNHc3RGb3JtYXQKKyAqIEBkZXN0X3ZhbHVlOiB0aGUgZGVzdGluYXRpb24gdmFsdWUKKyAqCisgKiBBbnN3ZXIgYSBjb252ZXJ0IHF1ZXJ5IGJ5IHNldHRpbmcgdGhlIHJlcXVlc3RlZCB2YWx1ZXMuCisgKi8KK3ZvaWQKK2dzdF9xdWVyeV9zZXRfY29udmVydCAoR3N0UXVlcnkgKiBxdWVyeSwgR3N0Rm9ybWF0IHNyY19mb3JtYXQsIGdpbnQ2NCBzcmNfdmFsdWUsCisgICAgR3N0Rm9ybWF0IGRlc3RfZm9ybWF0LCBnaW50NjQgZGVzdF92YWx1ZSkKK3sKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfQ09OVkVSVCk7CisKKyAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOworICBnc3Rfc3RydWN0dXJlX2lkX3NldCAoc3RydWN0dXJlLAorICAgICAgR1NUX1FVQVJLIChTUkNfRk9STUFUKSwgR1NUX1RZUEVfRk9STUFULCBzcmNfZm9ybWF0LAorICAgICAgR1NUX1FVQVJLIChTUkNfVkFMVUUpLCBHX1RZUEVfSU5UNjQsIHNyY192YWx1ZSwKKyAgICAgIEdTVF9RVUFSSyAoREVTVF9GT1JNQVQpLCBHU1RfVFlQRV9GT1JNQVQsIGRlc3RfZm9ybWF0LAorICAgICAgR1NUX1FVQVJLIChERVNUX1ZBTFVFKSwgR19UWVBFX0lOVDY0LCBkZXN0X3ZhbHVlLCBOVUxMKTsKK30KKworLyoqCisgKiBnc3RfcXVlcnlfcGFyc2VfY29udmVydDoKKyAqIEBxdWVyeTogYSAjR3N0UXVlcnkKKyAqIEBzcmNfZm9ybWF0OiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBzdG9yYWdlIGZvciB0aGUgI0dzdEZvcm1hdCBvZiB0aGUKKyAqICAgICBzb3VyY2UgdmFsdWUsIG9yIE5VTEwKKyAqIEBzcmNfdmFsdWU6IChvdXQpIChhbGxvdy1ub25lKTogdGhlIHN0b3JhZ2UgZm9yIHRoZSBzb3VyY2UgdmFsdWUsIG9yIE5VTEwKKyAqIEBkZXN0X2Zvcm1hdDogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgc3RvcmFnZSBmb3IgdGhlICNHc3RGb3JtYXQgb2YgdGhlCisgKiAgICAgZGVzdGluYXRpb24gdmFsdWUsIG9yIE5VTEwKKyAqIEBkZXN0X3ZhbHVlOiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBzdG9yYWdlIGZvciB0aGUgZGVzdGluYXRpb24gdmFsdWUsCisgKiAgICAgb3IgTlVMTAorICoKKyAqIFBhcnNlIGEgY29udmVydCBxdWVyeSBhbnN3ZXIuIEFueSBvZiBAc3JjX2Zvcm1hdCwgQHNyY192YWx1ZSwgQGRlc3RfZm9ybWF0LAorICogYW5kIEBkZXN0X3ZhbHVlIG1heSBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIHRoYXQgdmFsdWUgaXMgb21pdHRlZC4KKyAqLwordm9pZAorZ3N0X3F1ZXJ5X3BhcnNlX2NvbnZlcnQgKEdzdFF1ZXJ5ICogcXVlcnksIEdzdEZvcm1hdCAqIHNyY19mb3JtYXQsCisgICAgZ2ludDY0ICogc3JjX3ZhbHVlLCBHc3RGb3JtYXQgKiBkZXN0X2Zvcm1hdCwgZ2ludDY0ICogZGVzdF92YWx1ZSkKK3sKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfQ09OVkVSVCk7CisKKyAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOworICBpZiAoc3JjX2Zvcm1hdCkKKyAgICAqc3JjX2Zvcm1hdCA9CisgICAgICAgIChHc3RGb3JtYXQpIGdfdmFsdWVfZ2V0X2VudW0gKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCisgICAgICAgICAgICBHU1RfUVVBUksgKFNSQ19GT1JNQVQpKSk7CisgIGlmIChzcmNfdmFsdWUpCisgICAgKnNyY192YWx1ZSA9IGdfdmFsdWVfZ2V0X2ludDY0IChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAorICAgICAgICAgICAgR1NUX1FVQVJLIChTUkNfVkFMVUUpKSk7CisgIGlmIChkZXN0X2Zvcm1hdCkKKyAgICAqZGVzdF9mb3JtYXQgPQorICAgICAgICAoR3N0Rm9ybWF0KSBnX3ZhbHVlX2dldF9lbnVtIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAorICAgICAgICAgICAgR1NUX1FVQVJLIChERVNUX0ZPUk1BVCkpKTsKKyAgaWYgKGRlc3RfdmFsdWUpCisgICAgKmRlc3RfdmFsdWUgPSBnX3ZhbHVlX2dldF9pbnQ2NCAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgIEdTVF9RVUFSSyAoREVTVF9WQUxVRSkpKTsKK30KKworLyoqCisgKiBnc3RfcXVlcnlfbmV3X3NlZ21lbnQ6CisgKiBAZm9ybWF0OiB0aGUgI0dzdEZvcm1hdCBmb3IgdGhlIG5ldyBxdWVyeQorICoKKyAqIENvbnN0cnVjdHMgYSBuZXcgc2VnbWVudCBxdWVyeSBvYmplY3QuIFVzZSBnc3RfcXVlcnlfdW5yZWYoKQorICogd2hlbiBkb25lIHdpdGggaXQuIEEgc2VnbWVudCBxdWVyeSBpcyB1c2VkIHRvIGRpc2NvdmVyIGluZm9ybWF0aW9uIGFib3V0IHRoZQorICogY3VycmVudGx5IGNvbmZpZ3VyZWQgc2VnbWVudCBmb3IgcGxheWJhY2suCisgKgorICogRnJlZS1mdW5jdGlvbjogZ3N0X3F1ZXJ5X3VucmVmCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0UXVlcnkKKyAqLworR3N0UXVlcnkgKgorZ3N0X3F1ZXJ5X25ld19zZWdtZW50IChHc3RGb3JtYXQgZm9ybWF0KQoreworICBHc3RRdWVyeSAqcXVlcnk7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfbmV3IChHU1RfUVVBUksgKFFVRVJZX1NFR01FTlQpLAorICAgICAgR1NUX1FVQVJLIChSQVRFKSwgR19UWVBFX0RPVUJMRSwgKGdkb3VibGUpIDAuMCwKKyAgICAgIEdTVF9RVUFSSyAoRk9STUFUKSwgR1NUX1RZUEVfRk9STUFULCBmb3JtYXQsCisgICAgICBHU1RfUVVBUksgKFNUQVJUX1ZBTFVFKSwgR19UWVBFX0lOVDY0LCBHX0dJTlQ2NF9DT05TVEFOVCAoLTEpLAorICAgICAgR1NUX1FVQVJLIChTVE9QX1ZBTFVFKSwgR19UWVBFX0lOVDY0LCBHX0dJTlQ2NF9DT05TVEFOVCAoLTEpLCBOVUxMKTsKKworICBxdWVyeSA9IGdzdF9xdWVyeV9uZXcgKEdTVF9RVUVSWV9TRUdNRU5ULCBzdHJ1Y3R1cmUpOworCisgIHJldHVybiBxdWVyeTsKK30KKworLyoqCisgKiBnc3RfcXVlcnlfc2V0X3NlZ21lbnQ6CisgKiBAcXVlcnk6IGEgI0dzdFF1ZXJ5CisgKiBAcmF0ZTogdGhlIHJhdGUgb2YgdGhlIHNlZ21lbnQKKyAqIEBmb3JtYXQ6IHRoZSAjR3N0Rm9ybWF0IG9mIHRoZSBzZWdtZW50IHZhbHVlcyAoQHN0YXJ0X3ZhbHVlIGFuZCBAc3RvcF92YWx1ZSkKKyAqIEBzdGFydF92YWx1ZTogdGhlIHN0YXJ0IHZhbHVlCisgKiBAc3RvcF92YWx1ZTogdGhlIHN0b3AgdmFsdWUKKyAqCisgKiBBbnN3ZXIgYSBzZWdtZW50IHF1ZXJ5IGJ5IHNldHRpbmcgdGhlIHJlcXVlc3RlZCB2YWx1ZXMuIFRoZSBub3JtYWwKKyAqIHBsYXliYWNrIHNlZ21lbnQgb2YgYSBwaXBlbGluZSBpcyAwIHRvIGR1cmF0aW9uIGF0IHRoZSBkZWZhdWx0IHJhdGUgb2YKKyAqIDEuMC4gSWYgYSBzZWVrIHdhcyBwZXJmb3JtZWQgb24gdGhlIHBpcGVsaW5lIHRvIHBsYXkgYSBkaWZmZXJlbnQKKyAqIHNlZ21lbnQsIHRoaXMgcXVlcnkgd2lsbCByZXR1cm4gdGhlIHJhbmdlIHNwZWNpZmllZCBpbiB0aGUgbGFzdCBzZWVrLgorICoKKyAqIEBzdGFydF92YWx1ZSBhbmQgQHN0b3BfdmFsdWUgd2lsbCByZXNwZWN0aXZlbHkgY29udGFpbiB0aGUgY29uZmlndXJlZAorICogcGxheWJhY2sgcmFuZ2Ugc3RhcnQgYW5kIHN0b3AgdmFsdWVzIGV4cHJlc3NlZCBpbiBAZm9ybWF0LgorICogVGhlIHZhbHVlcyBhcmUgYWx3YXlzIGJldHdlZW4gMCBhbmQgdGhlIGR1cmF0aW9uIG9mIHRoZSBtZWRpYSBhbmQKKyAqIEBzdGFydF92YWx1ZSA8PSBAc3RvcF92YWx1ZS4gQHJhdGUgd2lsbCBjb250YWluIHRoZSBwbGF5YmFjayByYXRlLiBGb3IKKyAqIG5lZ2F0aXZlIHJhdGVzLCBwbGF5YmFjayB3aWxsIGFjdHVhbGx5IGhhcHBlbiBmcm9tIEBzdG9wX3ZhbHVlIHRvCisgKiBAc3RhcnRfdmFsdWUuCisgKi8KK3ZvaWQKK2dzdF9xdWVyeV9zZXRfc2VnbWVudCAoR3N0UXVlcnkgKiBxdWVyeSwgZ2RvdWJsZSByYXRlLCBHc3RGb3JtYXQgZm9ybWF0LAorICAgIGdpbnQ2NCBzdGFydF92YWx1ZSwgZ2ludDY0IHN0b3BfdmFsdWUpCit7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX1NFR01FTlQpOworCisgIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKKyAgZ3N0X3N0cnVjdHVyZV9pZF9zZXQgKHN0cnVjdHVyZSwKKyAgICAgIEdTVF9RVUFSSyAoUkFURSksIEdfVFlQRV9ET1VCTEUsIHJhdGUsCisgICAgICBHU1RfUVVBUksgKEZPUk1BVCksIEdTVF9UWVBFX0ZPUk1BVCwgZm9ybWF0LAorICAgICAgR1NUX1FVQVJLIChTVEFSVF9WQUxVRSksIEdfVFlQRV9JTlQ2NCwgc3RhcnRfdmFsdWUsCisgICAgICBHU1RfUVVBUksgKFNUT1BfVkFMVUUpLCBHX1RZUEVfSU5UNjQsIHN0b3BfdmFsdWUsIE5VTEwpOworfQorCisvKioKKyAqIGdzdF9xdWVyeV9wYXJzZV9zZWdtZW50OgorICogQHF1ZXJ5OiBhICNHc3RRdWVyeQorICogQHJhdGU6IChvdXQpIChhbGxvdy1ub25lKTogdGhlIHN0b3JhZ2UgZm9yIHRoZSByYXRlIG9mIHRoZSBzZWdtZW50LCBvciBOVUxMCisgKiBAZm9ybWF0OiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBzdG9yYWdlIGZvciB0aGUgI0dzdEZvcm1hdCBvZiB0aGUgdmFsdWVzLAorICogICAgIG9yIE5VTEwKKyAqIEBzdGFydF92YWx1ZTogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgc3RvcmFnZSBmb3IgdGhlIHN0YXJ0IHZhbHVlLCBvciBOVUxMCisgKiBAc3RvcF92YWx1ZTogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgc3RvcmFnZSBmb3IgdGhlIHN0b3AgdmFsdWUsIG9yIE5VTEwKKyAqCisgKiBQYXJzZSBhIHNlZ21lbnQgcXVlcnkgYW5zd2VyLiBBbnkgb2YgQHJhdGUsIEBmb3JtYXQsIEBzdGFydF92YWx1ZSwgYW5kCisgKiBAc3RvcF92YWx1ZSBtYXkgYmUgTlVMTCwgd2hpY2ggd2lsbCBjYXVzZSB0aGlzIHZhbHVlIHRvIGJlIG9taXR0ZWQuCisgKgorICogU2VlIGdzdF9xdWVyeV9zZXRfc2VnbWVudCgpIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgZnVuY3Rpb24gYXJndW1lbnRzLgorICovCit2b2lkCitnc3RfcXVlcnlfcGFyc2Vfc2VnbWVudCAoR3N0UXVlcnkgKiBxdWVyeSwgZ2RvdWJsZSAqIHJhdGUsIEdzdEZvcm1hdCAqIGZvcm1hdCwKKyAgICBnaW50NjQgKiBzdGFydF92YWx1ZSwgZ2ludDY0ICogc3RvcF92YWx1ZSkKK3sKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfU0VHTUVOVCk7CisKKyAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOworICBpZiAocmF0ZSkKKyAgICAqcmF0ZSA9IGdfdmFsdWVfZ2V0X2RvdWJsZSAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgIEdTVF9RVUFSSyAoUkFURSkpKTsKKyAgaWYgKGZvcm1hdCkKKyAgICAqZm9ybWF0ID0KKyAgICAgICAgKEdzdEZvcm1hdCkgZ192YWx1ZV9nZXRfZW51bSAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgIEdTVF9RVUFSSyAoRk9STUFUKSkpOworICBpZiAoc3RhcnRfdmFsdWUpCisgICAgKnN0YXJ0X3ZhbHVlID0gZ192YWx1ZV9nZXRfaW50NjQgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCisgICAgICAgICAgICBHU1RfUVVBUksgKFNUQVJUX1ZBTFVFKSkpOworICBpZiAoc3RvcF92YWx1ZSkKKyAgICAqc3RvcF92YWx1ZSA9IGdfdmFsdWVfZ2V0X2ludDY0IChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAorICAgICAgICAgICAgR1NUX1FVQVJLIChTVE9QX1ZBTFVFKSkpOworfQorCisvKioKKyAqIGdzdF9xdWVyeV9uZXdfY3VzdG9tOgorICogQHR5cGU6IHRoZSBxdWVyeSB0eXBlCisgKiBAc3RydWN0dXJlOiBhIHN0cnVjdHVyZSBmb3IgdGhlIHF1ZXJ5CisgKgorICogQ29uc3RydWN0cyBhIG5ldyBjdXN0b20gcXVlcnkgb2JqZWN0LiBVc2UgZ3N0X3F1ZXJ5X3VucmVmKCkKKyAqIHdoZW4gZG9uZSB3aXRoIGl0LgorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdzdF9xdWVyeV91bnJlZgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdFF1ZXJ5CisgKi8KK0dzdFF1ZXJ5ICoKK2dzdF9xdWVyeV9uZXdfY3VzdG9tIChHc3RRdWVyeVR5cGUgdHlwZSwgR3N0U3RydWN0dXJlICogc3RydWN0dXJlKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X3F1ZXJ5X3R5cGVfZ2V0X2RldGFpbHMgKHR5cGUpICE9IE5VTEwsIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwsIE5VTEwpOworCisgIHJldHVybiBnc3RfcXVlcnlfbmV3ICh0eXBlLCBzdHJ1Y3R1cmUpOworfQorCisvKioKKyAqIGdzdF9xdWVyeV9nZXRfc3RydWN0dXJlOgorICogQHF1ZXJ5OiBhICNHc3RRdWVyeQorICoKKyAqIEdldCB0aGUgc3RydWN0dXJlIG9mIGEgcXVlcnkuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI0dzdFN0cnVjdHVyZSBvZiB0aGUgcXVlcnkuIFRoZSBzdHJ1Y3R1cmUgaXMKKyAqICAgICBzdGlsbCBvd25lZCBieSB0aGUgcXVlcnkgYW5kIHdpbGwgdGhlcmVmb3JlIGJlIGZyZWVkIHdoZW4gdGhlIHF1ZXJ5CisgKiAgICAgaXMgdW5yZWZmZWQuCisgKi8KK2NvbnN0IEdzdFN0cnVjdHVyZSAqCitnc3RfcXVlcnlfZ2V0X3N0cnVjdHVyZSAoR3N0UXVlcnkgKiBxdWVyeSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19RVUVSWSAocXVlcnkpLCBOVUxMKTsKKworICByZXR1cm4gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOworfQorCisvKioKKyAqIGdzdF9xdWVyeV93cml0YWJsZV9zdHJ1Y3R1cmU6CisgKiBAcXVlcnk6IGEgI0dzdFF1ZXJ5CisgKgorICogR2V0IHRoZSBzdHJ1Y3R1cmUgb2YgYSBxdWVyeS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjR3N0U3RydWN0dXJlIG9mIHRoZSBxdWVyeS4gVGhlIHN0cnVjdHVyZSBpcworICogICAgIHN0aWxsIG93bmVkIGJ5IHRoZSBxdWVyeSBhbmQgd2lsbCB0aGVyZWZvcmUgYmUgZnJlZWQgd2hlbiB0aGUgcXVlcnkKKyAqICAgICBpcyB1bnJlZmZlZC4KKyAqLworR3N0U3RydWN0dXJlICoKK2dzdF9xdWVyeV93cml0YWJsZV9zdHJ1Y3R1cmUgKEdzdFF1ZXJ5ICogcXVlcnkpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUVVFUlkgKHF1ZXJ5KSwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3RfcXVlcnlfaXNfd3JpdGFibGUgKHF1ZXJ5KSwgTlVMTCk7CisKKyAgcmV0dXJuIEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKK30KKworLyoqCisgKiBnc3RfcXVlcnlfbmV3X3NlZWtpbmc6CisgKiBAZm9ybWF0OiB0aGUgZGVmYXVsdCAjR3N0Rm9ybWF0IGZvciB0aGUgbmV3IHF1ZXJ5CisgKgorICogQ29uc3RydWN0cyBhIG5ldyBxdWVyeSBvYmplY3QgZm9yIHF1ZXJ5aW5nIHNlZWtpbmcgcHJvcGVydGllcyBvZgorICogdGhlIHN0cmVhbS4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnc3RfcXVlcnlfdW5yZWYKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RRdWVyeQorICovCitHc3RRdWVyeSAqCitnc3RfcXVlcnlfbmV3X3NlZWtpbmcgKEdzdEZvcm1hdCBmb3JtYXQpCit7CisgIEdzdFF1ZXJ5ICpxdWVyeTsKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9pZF9uZXcgKEdTVF9RVUFSSyAoUVVFUllfU0VFS0lORyksCisgICAgICBHU1RfUVVBUksgKEZPUk1BVCksIEdTVF9UWVBFX0ZPUk1BVCwgZm9ybWF0LAorICAgICAgR1NUX1FVQVJLIChTRUVLQUJMRSksIEdfVFlQRV9CT09MRUFOLCBGQUxTRSwKKyAgICAgIEdTVF9RVUFSSyAoU0VHTUVOVF9TVEFSVCksIEdfVFlQRV9JTlQ2NCwgR19HSU5UNjRfQ09OU1RBTlQgKC0xKSwKKyAgICAgIEdTVF9RVUFSSyAoU0VHTUVOVF9FTkQpLCBHX1RZUEVfSU5UNjQsIEdfR0lOVDY0X0NPTlNUQU5UICgtMSksIE5VTEwpOworCisgIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ldyAoR1NUX1FVRVJZX1NFRUtJTkcsIHN0cnVjdHVyZSk7CisKKyAgcmV0dXJuIHF1ZXJ5OworfQorCisvKioKKyAqIGdzdF9xdWVyeV9zZXRfc2Vla2luZzoKKyAqIEBxdWVyeTogYSAjR3N0UXVlcnkKKyAqIEBmb3JtYXQ6IHRoZSBmb3JtYXQgdG8gc2V0IGZvciB0aGUgQHNlZ21lbnRfc3RhcnQgYW5kIEBzZWdtZW50X2VuZCB2YWx1ZXMKKyAqIEBzZWVrYWJsZTogdGhlIHNlZWthYmxlIGZsYWcgdG8gc2V0CisgKiBAc2VnbWVudF9zdGFydDogdGhlIHNlZ21lbnRfc3RhcnQgdG8gc2V0CisgKiBAc2VnbWVudF9lbmQ6IHRoZSBzZWdtZW50X2VuZCB0byBzZXQKKyAqCisgKiBTZXQgdGhlIHNlZWtpbmcgcXVlcnkgcmVzdWx0IGZpZWxkcyBpbiBAcXVlcnkuCisgKi8KK3ZvaWQKK2dzdF9xdWVyeV9zZXRfc2Vla2luZyAoR3N0UXVlcnkgKiBxdWVyeSwgR3N0Rm9ybWF0IGZvcm1hdCwKKyAgICBnYm9vbGVhbiBzZWVrYWJsZSwgZ2ludDY0IHNlZ21lbnRfc3RhcnQsIGdpbnQ2NCBzZWdtZW50X2VuZCkKK3sKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfU0VFS0lORyk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKGdzdF9xdWVyeV9pc193cml0YWJsZSAocXVlcnkpKTsKKworICBzdHJ1Y3R1cmUgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7CisgIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0IChzdHJ1Y3R1cmUsCisgICAgICBHU1RfUVVBUksgKEZPUk1BVCksIEdTVF9UWVBFX0ZPUk1BVCwgZm9ybWF0LAorICAgICAgR1NUX1FVQVJLIChTRUVLQUJMRSksIEdfVFlQRV9CT09MRUFOLCBzZWVrYWJsZSwKKyAgICAgIEdTVF9RVUFSSyAoU0VHTUVOVF9TVEFSVCksIEdfVFlQRV9JTlQ2NCwgc2VnbWVudF9zdGFydCwKKyAgICAgIEdTVF9RVUFSSyAoU0VHTUVOVF9FTkQpLCBHX1RZUEVfSU5UNjQsIHNlZ21lbnRfZW5kLCBOVUxMKTsKK30KKworLyoqCisgKiBnc3RfcXVlcnlfcGFyc2Vfc2Vla2luZzoKKyAqIEBxdWVyeTogYSBHU1RfUVVFUllfU0VFS0lORyB0eXBlIHF1ZXJ5ICNHc3RRdWVyeQorICogQGZvcm1hdDogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgZm9ybWF0IHRvIHNldCBmb3IgdGhlIEBzZWdtZW50X3N0YXJ0CisgKiAgICAgYW5kIEBzZWdtZW50X2VuZCB2YWx1ZXMsIG9yIE5VTEwKKyAqIEBzZWVrYWJsZTogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgc2Vla2FibGUgZmxhZyB0byBzZXQsIG9yIE5VTEwKKyAqIEBzZWdtZW50X3N0YXJ0OiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBzZWdtZW50X3N0YXJ0IHRvIHNldCwgb3IgTlVMTAorICogQHNlZ21lbnRfZW5kOiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBzZWdtZW50X2VuZCB0byBzZXQsIG9yIE5VTEwKKyAqCisgKiBQYXJzZSBhIHNlZWtpbmcgcXVlcnksIHdyaXRpbmcgdGhlIGZvcm1hdCBpbnRvIEBmb3JtYXQsIGFuZAorICogb3RoZXIgcmVzdWx0cyBpbnRvIHRoZSBwYXNzZWQgcGFyYW1ldGVycywgaWYgdGhlIHJlc3BlY3RpdmUgcGFyYW1ldGVycworICogYXJlIG5vbi1OVUxMCisgKi8KK3ZvaWQKK2dzdF9xdWVyeV9wYXJzZV9zZWVraW5nIChHc3RRdWVyeSAqIHF1ZXJ5LCBHc3RGb3JtYXQgKiBmb3JtYXQsCisgICAgZ2Jvb2xlYW4gKiBzZWVrYWJsZSwgZ2ludDY0ICogc2VnbWVudF9zdGFydCwgZ2ludDY0ICogc2VnbWVudF9lbmQpCit7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX1NFRUtJTkcpOworCisgIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKKyAgaWYgKGZvcm1hdCkKKyAgICAqZm9ybWF0ID0KKyAgICAgICAgKEdzdEZvcm1hdCkgZ192YWx1ZV9nZXRfZW51bSAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgIEdTVF9RVUFSSyAoRk9STUFUKSkpOworICBpZiAoc2Vla2FibGUpCisgICAgKnNlZWthYmxlID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgIEdTVF9RVUFSSyAoU0VFS0FCTEUpKSk7CisgIGlmIChzZWdtZW50X3N0YXJ0KQorICAgICpzZWdtZW50X3N0YXJ0ID0gZ192YWx1ZV9nZXRfaW50NjQgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCisgICAgICAgICAgICBHU1RfUVVBUksgKFNFR01FTlRfU1RBUlQpKSk7CisgIGlmIChzZWdtZW50X2VuZCkKKyAgICAqc2VnbWVudF9lbmQgPSBnX3ZhbHVlX2dldF9pbnQ2NCAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgIEdTVF9RVUFSSyAoU0VHTUVOVF9FTkQpKSk7Cit9CisKKy8qKgorICogZ3N0X3F1ZXJ5X25ld19mb3JtYXRzOgorICoKKyAqIENvbnN0cnVjdHMgYSBuZXcgcXVlcnkgb2JqZWN0IGZvciBxdWVyeWluZyBmb3JtYXRzIG9mCisgKiB0aGUgc3RyZWFtLgorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdzdF9xdWVyeV91bnJlZgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdFF1ZXJ5CisgKgorICogU2luY2U6IDAuMTAuNAorICovCitHc3RRdWVyeSAqCitnc3RfcXVlcnlfbmV3X2Zvcm1hdHMgKHZvaWQpCit7CisgIEdzdFF1ZXJ5ICpxdWVyeTsKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9pZF9lbXB0eV9uZXcgKEdTVF9RVUFSSyAoUVVFUllfRk9STUFUUykpOworICBxdWVyeSA9IGdzdF9xdWVyeV9uZXcgKEdTVF9RVUVSWV9GT1JNQVRTLCBzdHJ1Y3R1cmUpOworCisgIHJldHVybiBxdWVyeTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9xdWVyeV9saXN0X2FkZF9mb3JtYXQgKEdWYWx1ZSAqIGxpc3QsIEdzdEZvcm1hdCBmb3JtYXQpCit7CisgIEdWYWx1ZSBpdGVtID0geyAwLCB9OworCisgIGdfdmFsdWVfaW5pdCAoJml0ZW0sIEdTVF9UWVBFX0ZPUk1BVCk7CisgIGdfdmFsdWVfc2V0X2VudW0gKCZpdGVtLCBmb3JtYXQpOworICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKGxpc3QsICZpdGVtKTsKKyAgZ192YWx1ZV91bnNldCAoJml0ZW0pOworfQorCisvKioKKyAqIGdzdF9xdWVyeV9zZXRfZm9ybWF0czoKKyAqIEBxdWVyeTogYSAjR3N0UXVlcnkKKyAqIEBuX2Zvcm1hdHM6IHRoZSBudW1iZXIgb2YgZm9ybWF0cyB0byBzZXQuCisgKiBALi4uOiBBIG51bWJlciBvZiBAR3N0Rm9ybWF0cyBlcXVhbCB0byBAbl9mb3JtYXRzLgorICoKKyAqIFNldCB0aGUgZm9ybWF0cyBxdWVyeSByZXN1bHQgZmllbGRzIGluIEBxdWVyeS4gVGhlIG51bWJlciBvZiBmb3JtYXRzIHBhc3NlZAorICogbXVzdCBiZSBlcXVhbCB0byBAbl9mb3JtYXRzLgorICovCit2b2lkCitnc3RfcXVlcnlfc2V0X2Zvcm1hdHMgKEdzdFF1ZXJ5ICogcXVlcnksIGdpbnQgbl9mb3JtYXRzLCAuLi4pCit7CisgIHZhX2xpc3QgYXA7CisgIEdWYWx1ZSBsaXN0ID0geyAwLCB9OworICBnaW50IGk7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX0ZPUk1BVFMpOworICBnX3JldHVybl9pZl9mYWlsIChnc3RfcXVlcnlfaXNfd3JpdGFibGUgKHF1ZXJ5KSk7CisKKyAgZ192YWx1ZV9pbml0ICgmbGlzdCwgR1NUX1RZUEVfTElTVCk7CisKKyAgdmFfc3RhcnQgKGFwLCBuX2Zvcm1hdHMpOworICBmb3IgKGkgPSAwOyBpIDwgbl9mb3JtYXRzOyBpKyspIHsKKyAgICBnc3RfcXVlcnlfbGlzdF9hZGRfZm9ybWF0ICgmbGlzdCwgdmFfYXJnIChhcCwgR3N0Rm9ybWF0KSk7CisgIH0KKyAgdmFfZW5kIChhcCk7CisKKyAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOworICBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAoc3RydWN0dXJlLCAiZm9ybWF0cyIsICZsaXN0KTsKKworICBnX3ZhbHVlX3Vuc2V0ICgmbGlzdCk7CisKK30KKworLyoqCisgKiBnc3RfcXVlcnlfc2V0X2Zvcm1hdHN2OgorICogQHF1ZXJ5OiBhICNHc3RRdWVyeQorICogQG5fZm9ybWF0czogdGhlIG51bWJlciBvZiBmb3JtYXRzIHRvIHNldC4KKyAqIEBmb3JtYXRzOiAoaW4pIChhcnJheSBsZW5ndGg9bl9mb3JtYXRzKTogYW4gYXJyYXkgY29udGFpbmluZyBAbl9mb3JtYXRzCisgKiAgICAgQEdzdEZvcm1hdCB2YWx1ZXMuCisgKgorICogU2V0IHRoZSBmb3JtYXRzIHF1ZXJ5IHJlc3VsdCBmaWVsZHMgaW4gQHF1ZXJ5LiBUaGUgbnVtYmVyIG9mIGZvcm1hdHMgcGFzc2VkCisgKiBpbiB0aGUgQGZvcm1hdHMgYXJyYXkgbXVzdCBiZSBlcXVhbCB0byBAbl9mb3JtYXRzLgorICoKKyAqIFNpbmNlOiAwLjEwLjQKKyAqLwordm9pZAorZ3N0X3F1ZXJ5X3NldF9mb3JtYXRzdiAoR3N0UXVlcnkgKiBxdWVyeSwgZ2ludCBuX2Zvcm1hdHMsCisgICAgY29uc3QgR3N0Rm9ybWF0ICogZm9ybWF0cykKK3sKKyAgR1ZhbHVlIGxpc3QgPSB7IDAsIH07CisgIGdpbnQgaTsKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfRk9STUFUUyk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKGdzdF9xdWVyeV9pc193cml0YWJsZSAocXVlcnkpKTsKKworICBnX3ZhbHVlX2luaXQgKCZsaXN0LCBHU1RfVFlQRV9MSVNUKTsKKyAgZm9yIChpID0gMDsgaSA8IG5fZm9ybWF0czsgaSsrKSB7CisgICAgZ3N0X3F1ZXJ5X2xpc3RfYWRkX2Zvcm1hdCAoJmxpc3QsIGZvcm1hdHNbaV0pOworICB9CisgIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKKyAgZ3N0X3N0cnVjdHVyZV9zZXRfdmFsdWUgKHN0cnVjdHVyZSwgImZvcm1hdHMiLCAmbGlzdCk7CisKKyAgZ192YWx1ZV91bnNldCAoJmxpc3QpOworfQorCisvKioKKyAqIGdzdF9xdWVyeV9wYXJzZV9uX2Zvcm1hdHM6CisgKiBAcXVlcnk6IGEgI0dzdFF1ZXJ5CisgKiBAbl9mb3JtYXRzOiAob3V0KTogdGhlIG51bWJlciBvZiBmb3JtYXRzIGluIHRoaXMgcXVlcnkuCisgKgorICogUGFyc2UgdGhlIG51bWJlciBvZiBmb3JtYXRzIGluIHRoZSBmb3JtYXRzIEBxdWVyeS4KKyAqCisgKiBTaW5jZTogMC4xMC40CisgKi8KK3ZvaWQKK2dzdF9xdWVyeV9wYXJzZV9uX2Zvcm1hdHMgKEdzdFF1ZXJ5ICogcXVlcnksIGd1aW50ICogbl9mb3JtYXRzKQoreworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9GT1JNQVRTKTsKKworICBpZiAobl9mb3JtYXRzKSB7CisgICAgY29uc3QgR1ZhbHVlICpsaXN0OworCisgICAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOworICAgIGxpc3QgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoc3RydWN0dXJlLCAiZm9ybWF0cyIpOworICAgIGlmIChsaXN0ID09IE5VTEwpCisgICAgICAqbl9mb3JtYXRzID0gMDsKKyAgICBlbHNlCisgICAgICAqbl9mb3JtYXRzID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUgKGxpc3QpOworICB9Cit9CisKKy8qKgorICogZ3N0X3F1ZXJ5X3BhcnNlX250aF9mb3JtYXQ6CisgKiBAcXVlcnk6IGEgI0dzdFF1ZXJ5CisgKiBAbnRoOiAob3V0KTogdGhlIG50aCBmb3JtYXQgdG8gcmV0cmlldmUuCisgKiBAZm9ybWF0OiAob3V0KTogYSBwb2ludGVyIHRvIHN0b3JlIHRoZSBudGggZm9ybWF0CisgKgorICogUGFyc2UgdGhlIGZvcm1hdCBxdWVyeSBhbmQgcmV0cmlldmUgdGhlIEBudGggZm9ybWF0IGZyb20gaXQgaW50bworICogQGZvcm1hdC4gSWYgdGhlIGxpc3QgY29udGFpbnMgbGVzcyBlbGVtZW50cyB0aGFuIEBudGgsIEBmb3JtYXQgd2lsbCBiZQorICogc2V0IHRvIEdTVF9GT1JNQVRfVU5ERUZJTkVELgorICovCit2b2lkCitnc3RfcXVlcnlfcGFyc2VfbnRoX2Zvcm1hdCAoR3N0UXVlcnkgKiBxdWVyeSwgZ3VpbnQgbnRoLCBHc3RGb3JtYXQgKiBmb3JtYXQpCit7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX0ZPUk1BVFMpOworCisgIGlmIChmb3JtYXQpIHsKKyAgICBjb25zdCBHVmFsdWUgKmxpc3Q7CisKKyAgICBzdHJ1Y3R1cmUgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7CisgICAgbGlzdCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsICJmb3JtYXRzIik7CisgICAgaWYgKGxpc3QgPT0gTlVMTCkgeworICAgICAgKmZvcm1hdCA9IEdTVF9GT1JNQVRfVU5ERUZJTkVEOworICAgIH0gZWxzZSB7CisgICAgICBpZiAobnRoIDwgZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUgKGxpc3QpKSB7CisgICAgICAgICpmb3JtYXQgPQorICAgICAgICAgICAgKEdzdEZvcm1hdCkgZ192YWx1ZV9nZXRfZW51bSAoZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlIChsaXN0LCBudGgpKTsKKyAgICAgIH0gZWxzZQorICAgICAgICAqZm9ybWF0ID0gR1NUX0ZPUk1BVF9VTkRFRklORUQ7CisgICAgfQorICB9Cit9CisKKy8qKgorICogZ3N0X3F1ZXJ5X25ld19idWZmZXJpbmcKKyAqIEBmb3JtYXQ6IHRoZSBkZWZhdWx0ICNHc3RGb3JtYXQgZm9yIHRoZSBuZXcgcXVlcnkKKyAqCisgKiBDb25zdHJ1Y3RzIGEgbmV3IHF1ZXJ5IG9iamVjdCBmb3IgcXVlcnlpbmcgdGhlIGJ1ZmZlcmluZyBzdGF0dXMgb2YKKyAqIGEgc3RyZWFtLgorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdzdF9xdWVyeV91bnJlZgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdFF1ZXJ5CisgKgorICogU2luY2U6IDAuMTAuMjAKKyAqLworR3N0UXVlcnkgKgorZ3N0X3F1ZXJ5X25ld19idWZmZXJpbmcgKEdzdEZvcm1hdCBmb3JtYXQpCit7CisgIEdzdFF1ZXJ5ICpxdWVyeTsKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgLyogYnkgZGVmYXVsdCwgd2UgY29uZmlndXJlIHRoZSBhbnN3ZXIgYXMgbm8gYnVmZmVyaW5nIHdpdGggYSAxMDAlIGJ1ZmZlcmluZworICAgKiBwcm9ncmVzcyAqLworICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX2lkX25ldyAoR1NUX1FVQVJLIChRVUVSWV9CVUZGRVJJTkcpLAorICAgICAgR1NUX1FVQVJLIChCVVNZKSwgR19UWVBFX0JPT0xFQU4sIEZBTFNFLAorICAgICAgR1NUX1FVQVJLIChCVUZGRVJfUEVSQ0VOVCksIEdfVFlQRV9JTlQsIDEwMCwKKyAgICAgIEdTVF9RVUFSSyAoQlVGRkVSSU5HX01PREUpLCBHU1RfVFlQRV9CVUZGRVJJTkdfTU9ERSwgR1NUX0JVRkZFUklOR19TVFJFQU0sCisgICAgICBHU1RfUVVBUksgKEFWR19JTl9SQVRFKSwgR19UWVBFX0lOVCwgLTEsCisgICAgICBHU1RfUVVBUksgKEFWR19PVVRfUkFURSksIEdfVFlQRV9JTlQsIC0xLAorICAgICAgR1NUX1FVQVJLIChCVUZGRVJJTkdfTEVGVCksIEdfVFlQRV9JTlQ2NCwgR19HSU5UNjRfQ09OU1RBTlQgKDApLAorICAgICAgR1NUX1FVQVJLIChFU1RJTUFURURfVE9UQUwpLCBHX1RZUEVfSU5UNjQsIEdfR0lOVDY0X0NPTlNUQU5UICgtMSksCisgICAgICBHU1RfUVVBUksgKEZPUk1BVCksIEdTVF9UWVBFX0ZPUk1BVCwgZm9ybWF0LAorICAgICAgR1NUX1FVQVJLIChTVEFSVF9WQUxVRSksIEdfVFlQRV9JTlQ2NCwgR19HSU5UNjRfQ09OU1RBTlQgKC0xKSwKKyAgICAgIEdTVF9RVUFSSyAoU1RPUF9WQUxVRSksIEdfVFlQRV9JTlQ2NCwgR19HSU5UNjRfQ09OU1RBTlQgKC0xKSwgTlVMTCk7CisKKyAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3IChHU1RfUVVFUllfQlVGRkVSSU5HLCBzdHJ1Y3R1cmUpOworCisgIHJldHVybiBxdWVyeTsKK30KKworLyoqCisgKiBnc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19wZXJjZW50CisgKiBAcXVlcnk6IEEgdmFsaWQgI0dzdFF1ZXJ5IG9mIHR5cGUgR1NUX1FVRVJZX0JVRkZFUklORy4KKyAqIEBidXN5OiBpZiBidWZmZXJpbmcgaXMgYnVzeQorICogQHBlcmNlbnQ6IGEgYnVmZmVyaW5nIHBlcmNlbnQKKyAqCisgKiBTZXQgdGhlIHBlcmNlbnRhZ2Ugb2YgYnVmZmVyZWQgZGF0YS4gVGhpcyBpcyBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMTAwLgorICogVGhlIEBidXN5IGluZGljYXRvciBpcyAlVFJVRSB3aGVuIHRoZSBidWZmZXJpbmcgaXMgaW4gcHJvZ3Jlc3MuCisgKgorICogU2luY2U6IDAuMTAuMjAKKyAqLwordm9pZAorZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfcGVyY2VudCAoR3N0UXVlcnkgKiBxdWVyeSwgZ2Jvb2xlYW4gYnVzeSwgZ2ludCBwZXJjZW50KQoreworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9CVUZGRVJJTkcpOworICBnX3JldHVybl9pZl9mYWlsIChnc3RfcXVlcnlfaXNfd3JpdGFibGUgKHF1ZXJ5KSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKHBlcmNlbnQgPj0gMCAmJiBwZXJjZW50IDw9IDEwMCk7CisKKyAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOworICBnc3Rfc3RydWN0dXJlX2lkX3NldCAoc3RydWN0dXJlLAorICAgICAgR1NUX1FVQVJLIChCVVNZKSwgR19UWVBFX0JPT0xFQU4sIGJ1c3ksCisgICAgICBHU1RfUVVBUksgKEJVRkZFUl9QRVJDRU5UKSwgR19UWVBFX0lOVCwgcGVyY2VudCwgTlVMTCk7Cit9CisKKy8qKgorICogZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19wZXJjZW50CisgKiBAcXVlcnk6IEEgdmFsaWQgI0dzdFF1ZXJ5IG9mIHR5cGUgR1NUX1FVRVJZX0JVRkZFUklORy4KKyAqIEBidXN5OiAob3V0KSAoYWxsb3ctbm9uZSk6IGlmIGJ1ZmZlcmluZyBpcyBidXN5LCBvciBOVUxMCisgKiBAcGVyY2VudDogKG91dCkgKGFsbG93LW5vbmUpOiBhIGJ1ZmZlcmluZyBwZXJjZW50LCBvciBOVUxMCisgKgorICogR2V0IHRoZSBwZXJjZW50YWdlIG9mIGJ1ZmZlcmVkIGRhdGEuIFRoaXMgaXMgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEwMC4KKyAqIFRoZSBAYnVzeSBpbmRpY2F0b3IgaXMgJVRSVUUgd2hlbiB0aGUgYnVmZmVyaW5nIGlzIGluIHByb2dyZXNzLgorICoKKyAqIFNpbmNlOiAwLjEwLjIwCisgKi8KK3ZvaWQKK2dzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcGVyY2VudCAoR3N0UXVlcnkgKiBxdWVyeSwgZ2Jvb2xlYW4gKiBidXN5LAorICAgIGdpbnQgKiBwZXJjZW50KQoreworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9CVUZGRVJJTkcpOworCisgIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKKyAgaWYgKGJ1c3kpCisgICAgKmJ1c3kgPSBnX3ZhbHVlX2dldF9ib29sZWFuIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAorICAgICAgICAgICAgR1NUX1FVQVJLIChCVVNZKSkpOworICBpZiAocGVyY2VudCkKKyAgICAqcGVyY2VudCA9IGdfdmFsdWVfZ2V0X2ludCAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgIEdTVF9RVUFSSyAoQlVGRkVSX1BFUkNFTlQpKSk7Cit9CisKKy8qKgorICogZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfc3RhdHM6CisgKiBAcXVlcnk6IEEgdmFsaWQgI0dzdFF1ZXJ5IG9mIHR5cGUgR1NUX1FVRVJZX0JVRkZFUklORy4KKyAqIEBtb2RlOiBhIGJ1ZmZlcmluZyBtb2RlCisgKiBAYXZnX2luOiB0aGUgYXZlcmFnZSBpbnB1dCByYXRlCisgKiBAYXZnX291dDogdGhlIGF2ZXJhZ2Ugb3V0cHV0IHJhdGUKKyAqIEBidWZmZXJpbmdfbGVmdDogYW1vdW50IG9mIGJ1ZmZlcmluZyB0aW1lIGxlZnQKKyAqCisgKiBDb25maWd1cmVzIHRoZSBidWZmZXJpbmcgc3RhdHMgdmFsdWVzIGluIEBxdWVyeS4KKyAqCisgKiBTaW5jZTogMC4xMC4yMAorICovCit2b2lkCitnc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19zdGF0cyAoR3N0UXVlcnkgKiBxdWVyeSwgR3N0QnVmZmVyaW5nTW9kZSBtb2RlLAorICAgIGdpbnQgYXZnX2luLCBnaW50IGF2Z19vdXQsIGdpbnQ2NCBidWZmZXJpbmdfbGVmdCkKK3sKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfQlVGRkVSSU5HKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X3F1ZXJ5X2lzX3dyaXRhYmxlIChxdWVyeSkpOworCisgIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKKyAgZ3N0X3N0cnVjdHVyZV9pZF9zZXQgKHN0cnVjdHVyZSwKKyAgICAgIEdTVF9RVUFSSyAoQlVGRkVSSU5HX01PREUpLCBHU1RfVFlQRV9CVUZGRVJJTkdfTU9ERSwgbW9kZSwKKyAgICAgIEdTVF9RVUFSSyAoQVZHX0lOX1JBVEUpLCBHX1RZUEVfSU5ULCBhdmdfaW4sCisgICAgICBHU1RfUVVBUksgKEFWR19PVVRfUkFURSksIEdfVFlQRV9JTlQsIGF2Z19vdXQsCisgICAgICBHU1RfUVVBUksgKEJVRkZFUklOR19MRUZUKSwgR19UWVBFX0lOVDY0LCBidWZmZXJpbmdfbGVmdCwgTlVMTCk7Cit9CisKKy8qKgorICogZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19zdGF0czoKKyAqIEBxdWVyeTogQSB2YWxpZCAjR3N0UXVlcnkgb2YgdHlwZSBHU1RfUVVFUllfQlVGRkVSSU5HLgorICogQG1vZGU6IChvdXQpIChhbGxvdy1ub25lKTogYSBidWZmZXJpbmcgbW9kZSwgb3IgTlVMTAorICogQGF2Z19pbjogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgYXZlcmFnZSBpbnB1dCByYXRlLCBvciBOVUxMCisgKiBAYXZnX291dDogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgYXZlcmFnZSBvdXRwdXQgcmF0LCBvciBOVUxMZQorICogQGJ1ZmZlcmluZ19sZWZ0OiAob3V0KSAoYWxsb3ctbm9uZSk6IGFtb3VudCBvZiBidWZmZXJpbmcgdGltZSBsZWZ0LCBvciBOVUxMCisgKgorICogRXh0cmFjdHMgdGhlIGJ1ZmZlcmluZyBzdGF0cyB2YWx1ZXMgZnJvbSBAcXVlcnkuCisgKgorICogU2luY2U6IDAuMTAuMjAKKyAqLwordm9pZAorZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19zdGF0cyAoR3N0UXVlcnkgKiBxdWVyeSwKKyAgICBHc3RCdWZmZXJpbmdNb2RlICogbW9kZSwgZ2ludCAqIGF2Z19pbiwgZ2ludCAqIGF2Z19vdXQsCisgICAgZ2ludDY0ICogYnVmZmVyaW5nX2xlZnQpCit7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX0JVRkZFUklORyk7CisKKyAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOworICBpZiAobW9kZSkKKyAgICAqbW9kZSA9IChHc3RCdWZmZXJpbmdNb2RlKQorICAgICAgICBnX3ZhbHVlX2dldF9lbnVtIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAorICAgICAgICAgICAgR1NUX1FVQVJLIChCVUZGRVJJTkdfTU9ERSkpKTsKKyAgaWYgKGF2Z19pbikKKyAgICAqYXZnX2luID0gZ192YWx1ZV9nZXRfaW50IChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAorICAgICAgICAgICAgR1NUX1FVQVJLIChBVkdfSU5fUkFURSkpKTsKKyAgaWYgKGF2Z19vdXQpCisgICAgKmF2Z19vdXQgPSBnX3ZhbHVlX2dldF9pbnQgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCisgICAgICAgICAgICBHU1RfUVVBUksgKEFWR19PVVRfUkFURSkpKTsKKyAgaWYgKGJ1ZmZlcmluZ19sZWZ0KQorICAgICpidWZmZXJpbmdfbGVmdCA9CisgICAgICAgIGdfdmFsdWVfZ2V0X2ludDY0IChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAorICAgICAgICAgICAgR1NUX1FVQVJLIChCVUZGRVJJTkdfTEVGVCkpKTsKK30KKworCisvKioKKyAqIGdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3JhbmdlOgorICogQHF1ZXJ5OiBhICNHc3RRdWVyeQorICogQGZvcm1hdDogdGhlIGZvcm1hdCB0byBzZXQgZm9yIHRoZSBAc3RhcnQgYW5kIEBzdG9wIHZhbHVlcworICogQHN0YXJ0OiB0aGUgc3RhcnQgdG8gc2V0CisgKiBAc3RvcDogdGhlIHN0b3AgdG8gc2V0CisgKiBAZXN0aW1hdGVkX3RvdGFsOiBlc3RpbWF0ZWQgdG90YWwgYW1vdW50IG9mIGRvd25sb2FkIHRpbWUKKyAqCisgKiBTZXQgdGhlIGF2YWlsYWJsZSBxdWVyeSByZXN1bHQgZmllbGRzIGluIEBxdWVyeS4KKyAqCisgKiBTaW5jZTogMC4xMC4yMAorICovCit2b2lkCitnc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19yYW5nZSAoR3N0UXVlcnkgKiBxdWVyeSwgR3N0Rm9ybWF0IGZvcm1hdCwKKyAgICBnaW50NjQgc3RhcnQsIGdpbnQ2NCBzdG9wLCBnaW50NjQgZXN0aW1hdGVkX3RvdGFsKQoreworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9CVUZGRVJJTkcpOworICBnX3JldHVybl9pZl9mYWlsIChnc3RfcXVlcnlfaXNfd3JpdGFibGUgKHF1ZXJ5KSk7CisKKyAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOworICBnc3Rfc3RydWN0dXJlX2lkX3NldCAoc3RydWN0dXJlLAorICAgICAgR1NUX1FVQVJLIChGT1JNQVQpLCBHU1RfVFlQRV9GT1JNQVQsIGZvcm1hdCwKKyAgICAgIEdTVF9RVUFSSyAoU1RBUlRfVkFMVUUpLCBHX1RZUEVfSU5UNjQsIHN0YXJ0LAorICAgICAgR1NUX1FVQVJLIChTVE9QX1ZBTFVFKSwgR19UWVBFX0lOVDY0LCBzdG9wLAorICAgICAgR1NUX1FVQVJLIChFU1RJTUFURURfVE9UQUwpLCBHX1RZUEVfSU5UNjQsIGVzdGltYXRlZF90b3RhbCwgTlVMTCk7Cit9CisKKy8qKgorICogZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19yYW5nZToKKyAqIEBxdWVyeTogYSBHU1RfUVVFUllfQlVGRkVSSU5HIHR5cGUgcXVlcnkgI0dzdFF1ZXJ5CisgKiBAZm9ybWF0OiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBmb3JtYXQgdG8gc2V0IGZvciB0aGUgQHNlZ21lbnRfc3RhcnQKKyAqICAgICBhbmQgQHNlZ21lbnRfZW5kIHZhbHVlcywgb3IgTlVMTAorICogQHN0YXJ0OiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBzdGFydCB0byBzZXQsIG9yIE5VTEwKKyAqIEBzdG9wOiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBzdG9wIHRvIHNldCwgb3IgTlVMTAorICogQGVzdGltYXRlZF90b3RhbDogKG91dCkgKGFsbG93LW5vbmUpOiBlc3RpbWF0ZWQgdG90YWwgYW1vdW50IG9mIGRvd25sb2FkCisgKiAgICAgdGltZSwgb3IgTlVMTAorICoKKyAqIFBhcnNlIGFuIGF2YWlsYWJsZSBxdWVyeSwgd3JpdGluZyB0aGUgZm9ybWF0IGludG8gQGZvcm1hdCwgYW5kCisgKiBvdGhlciByZXN1bHRzIGludG8gdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLCBpZiB0aGUgcmVzcGVjdGl2ZSBwYXJhbWV0ZXJzCisgKiBhcmUgbm9uLU5VTEwKKyAqCisgKiBTaW5jZTogMC4xMC4yMAorICovCit2b2lkCitnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3JhbmdlIChHc3RRdWVyeSAqIHF1ZXJ5LCBHc3RGb3JtYXQgKiBmb3JtYXQsCisgICAgZ2ludDY0ICogc3RhcnQsIGdpbnQ2NCAqIHN0b3AsIGdpbnQ2NCAqIGVzdGltYXRlZF90b3RhbCkKK3sKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfQlVGRkVSSU5HKTsKKworICBzdHJ1Y3R1cmUgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7CisgIGlmIChmb3JtYXQpCisgICAgKmZvcm1hdCA9CisgICAgICAgIChHc3RGb3JtYXQpIGdfdmFsdWVfZ2V0X2VudW0gKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCisgICAgICAgICAgICBHU1RfUVVBUksgKEZPUk1BVCkpKTsKKyAgaWYgKHN0YXJ0KQorICAgICpzdGFydCA9IGdfdmFsdWVfZ2V0X2ludDY0IChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAorICAgICAgICAgICAgR1NUX1FVQVJLIChTVEFSVF9WQUxVRSkpKTsKKyAgaWYgKHN0b3ApCisgICAgKnN0b3AgPSBnX3ZhbHVlX2dldF9pbnQ2NCAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgIEdTVF9RVUFSSyAoU1RPUF9WQUxVRSkpKTsKKyAgaWYgKGVzdGltYXRlZF90b3RhbCkKKyAgICAqZXN0aW1hdGVkX3RvdGFsID0KKyAgICAgICAgZ192YWx1ZV9nZXRfaW50NjQgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCisgICAgICAgICAgICBHU1RfUVVBUksgKEVTVElNQVRFRF9UT1RBTCkpKTsKK30KKworLyoqCisgKiBnc3RfcXVlcnlfYWRkX2J1ZmZlcmluZ19yYW5nZQorICogQHF1ZXJ5OiBhIEdTVF9RVUVSWV9CVUZGRVJJTkcgdHlwZSBxdWVyeSAjR3N0UXVlcnkKKyAqIEBzdGFydDogc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJhbmdlCisgKiBAc3RvcDogc3RvcCBwb3NpdGlvbiBvZiB0aGUgcmFuZ2UKKyAqCisgKiBTZXQgdGhlIGJ1ZmZlcmluZy1yYW5nZXMgYXJyYXkgZmllbGQgaW4gQHF1ZXJ5LiBUaGUgY3VycmVudCBsYXN0CisgKiBzdGFydCBwb3NpdGlvbiBvZiB0aGUgYXJyYXkgc2hvdWxkIGJlIGluZmVyaW9yIHRvIEBzdGFydC4KKyAqCisgKiBSZXR1cm5zOiBhICNnYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSByYW5nZSB3YXMgYWRkZWQgb3Igbm90LgorICoKKyAqIFNpbmNlOiAwLjEwLjMxCisgKi8KK2dib29sZWFuCitnc3RfcXVlcnlfYWRkX2J1ZmZlcmluZ19yYW5nZSAoR3N0UXVlcnkgKiBxdWVyeSwgZ2ludDY0IHN0YXJ0LCBnaW50NjQgc3RvcCkKK3sKKyAgR1ZhbHVlQXJyYXkgKmFycmF5OworICBHVmFsdWUgKmxhc3RfYXJyYXlfdmFsdWU7CisgIGNvbnN0IEdWYWx1ZSAqdmFsdWU7CisgIEdWYWx1ZSByYW5nZV92YWx1ZSA9IHsgMCB9OworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfQlVGRkVSSU5HLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3RfcXVlcnlfaXNfd3JpdGFibGUgKHF1ZXJ5KSwgRkFMU0UpOworCisgIGlmIChHX1VOTElLRUxZIChzdGFydCA+PSBzdG9wKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOworICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsIEdTVF9RVUFSSyAoQlVGRkVSSU5HX1JBTkdFUykpOworICBpZiAodmFsdWUpIHsKKyAgICBhcnJheSA9IChHVmFsdWVBcnJheSAqKSBnX3ZhbHVlX2dldF9ib3hlZCAodmFsdWUpOworICAgIGxhc3RfYXJyYXlfdmFsdWUgPSBnX3ZhbHVlX2FycmF5X2dldF9udGggKGFycmF5LCBhcnJheS0+bl92YWx1ZXMgLSAxKTsKKyAgICBpZiAoR19VTkxJS0VMWSAoc3RhcnQgPD0gZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9taW4gKGxhc3RfYXJyYXlfdmFsdWUpKSkKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgfSBlbHNlIHsKKyAgICBHVmFsdWUgbmV3X2FycmF5X3ZhbCA9IHsgMCwgfTsKKworICAgIGFycmF5ID0gZ192YWx1ZV9hcnJheV9uZXcgKDApOworCisgICAgZ192YWx1ZV9pbml0ICgmbmV3X2FycmF5X3ZhbCwgR19UWVBFX1ZBTFVFX0FSUkFZKTsKKyAgICBnX3ZhbHVlX3Rha2VfYm94ZWQgKCZuZXdfYXJyYXlfdmFsLCBhcnJheSk7CisKKyAgICAvKiBzZXQgdGhlIHZhbHVlIGFycmF5IG9ubHkgb25jZSwgc28gd2UgdGhlbiBtb2RpZnkgKGFwcGVuZCB0bykgdGhlCisgICAgICogZXhpc3RpbmcgdmFsdWUgYXJyYXkgb3duZWQgYnkgdGhlIEdzdFN0cnVjdHVyZSAvIHRoZSBmaWVsZCdzIEdWYWx1ZSAqLworICAgIGdzdF9zdHJ1Y3R1cmVfaWRfdGFrZV92YWx1ZSAoc3RydWN0dXJlLCBHU1RfUVVBUksgKEJVRkZFUklOR19SQU5HRVMpLAorICAgICAgICAmbmV3X2FycmF5X3ZhbCk7CisgIH0KKworICBnX3ZhbHVlX2luaXQgKCZyYW5nZV92YWx1ZSwgR1NUX1RZUEVfSU5UNjRfUkFOR0UpOworICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlICgmcmFuZ2VfdmFsdWUsIHN0YXJ0LCBzdG9wKTsKKyAgZ192YWx1ZV9hcnJheV9hcHBlbmQgKGFycmF5LCAmcmFuZ2VfdmFsdWUpOworICAvKiBza2lwIHRoZSBnX3ZhbHVlX3Vuc2V0KCZyYW5nZV92YWx1ZSkgaGVyZSwgd2Uga25vdyBpdCdzIG5vdCBuZWVkZWQgKi8KKworICByZXR1cm4gVFJVRTsKK30KKworLyoqCisgKiBnc3RfcXVlcnlfZ2V0X25fYnVmZmVyaW5nX3JhbmdlcworICogQHF1ZXJ5OiBhIEdTVF9RVUVSWV9CVUZGRVJJTkcgdHlwZSBxdWVyeSAjR3N0UXVlcnkKKyAqCisgKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIHZhbHVlcyBjdXJyZW50bHkgc3RvcmVkIGluIHRoZQorICogYnVmZmVyZWQtcmFuZ2VzIGFycmF5IG9mIHRoZSBxdWVyeSdzIHN0cnVjdHVyZS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgcmFuZ2UgYXJyYXkgc2l6ZSBhcyBhICNndWludC4KKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCitndWludAorZ3N0X3F1ZXJ5X2dldF9uX2J1ZmZlcmluZ19yYW5nZXMgKEdzdFF1ZXJ5ICogcXVlcnkpCit7CisgIEdWYWx1ZUFycmF5ICphcnJheTsKKyAgY29uc3QgR1ZhbHVlICp2YWx1ZTsKKyAgZ3VpbnQgc2l6ZSA9IDA7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9CVUZGRVJJTkcsIDApOworCisgIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKKyAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLCBHU1RfUVVBUksgKEJVRkZFUklOR19SQU5HRVMpKTsKKyAgaWYgKHZhbHVlKSB7CisgICAgYXJyYXkgPSAoR1ZhbHVlQXJyYXkgKikgZ192YWx1ZV9nZXRfYm94ZWQgKHZhbHVlKTsKKyAgICBzaXplID0gYXJyYXktPm5fdmFsdWVzOworICB9CisgIHJldHVybiBzaXplOworfQorCisKKy8qKgorICogZ3N0X3F1ZXJ5X3BhcnNlX250aF9idWZmZXJpbmdfcmFuZ2UKKyAqIEBxdWVyeTogYSBHU1RfUVVFUllfQlVGRkVSSU5HIHR5cGUgcXVlcnkgI0dzdFF1ZXJ5CisgKiBAaW5kZXg6IHBvc2l0aW9uIGluIHRoZSBidWZmZXJlZC1yYW5nZXMgYXJyYXkgdG8gcmVhZAorICogQHN0YXJ0OiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBzdGFydCBwb3NpdGlvbiB0byBzZXQsIG9yIE5VTEwKKyAqIEBzdG9wOiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBzdG9wIHBvc2l0aW9uIHRvIHNldCwgb3IgTlVMTAorICoKKyAqIFBhcnNlIGFuIGF2YWlsYWJsZSBxdWVyeSBhbmQgZ2V0IHRoZSBzdGFydCBhbmQgc3RvcCB2YWx1ZXMgc3RvcmVkCisgKiBhdCB0aGUgQGluZGV4IG9mIHRoZSBidWZmZXJlZCByYW5nZXMgYXJyYXkuCisgKgorICogUmV0dXJuczogYSAjZ2Jvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgcGFyc2luZyBzdWNjZWVkZWQuCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLworZ2Jvb2xlYW4KK2dzdF9xdWVyeV9wYXJzZV9udGhfYnVmZmVyaW5nX3JhbmdlIChHc3RRdWVyeSAqIHF1ZXJ5LCBndWludCBpbmRleCwKKyAgICBnaW50NjQgKiBzdGFydCwgZ2ludDY0ICogc3RvcCkKK3sKKyAgY29uc3QgR1ZhbHVlICp2YWx1ZTsKKyAgR1ZhbHVlQXJyYXkgKnJhbmdlczsKKyAgR1ZhbHVlICpyYW5nZV92YWx1ZTsKKyAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9CVUZGRVJJTkcsIHJldCk7CisKKyAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOworICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsIEdTVF9RVUFSSyAoQlVGRkVSSU5HX1JBTkdFUykpOworICByYW5nZXMgPSAoR1ZhbHVlQXJyYXkgKikgZ192YWx1ZV9nZXRfYm94ZWQgKHZhbHVlKTsKKyAgcmFuZ2VfdmFsdWUgPSBnX3ZhbHVlX2FycmF5X2dldF9udGggKHJhbmdlcywgaW5kZXgpOworICBpZiAocmFuZ2VfdmFsdWUpIHsKKyAgICBpZiAoc3RhcnQpCisgICAgICAqc3RhcnQgPSBnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21pbiAocmFuZ2VfdmFsdWUpOworICAgIGlmIChzdG9wKQorICAgICAgKnN0b3AgPSBnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21heCAocmFuZ2VfdmFsdWUpOworICAgIHJldCA9IFRSVUU7CisgIH0KKworICByZXR1cm4gcmV0OworfQorCisKKy8qKgorICogZ3N0X3F1ZXJ5X25ld191cmk6CisgKgorICogQ29uc3RydWN0cyBhIG5ldyBxdWVyeSBVUkkgcXVlcnkgb2JqZWN0LiBVc2UgZ3N0X3F1ZXJ5X3VucmVmKCkKKyAqIHdoZW4gZG9uZSB3aXRoIGl0LiBBbiBVUkkgcXVlcnkgaXMgdXNlZCB0byBxdWVyeSB0aGUgY3VycmVudCBVUkkKKyAqIHRoYXQgaXMgdXNlZCBieSB0aGUgc291cmNlIG9yIHNpbmsuCisgKgorICogRnJlZS1mdW5jdGlvbjogZ3N0X3F1ZXJ5X3VucmVmCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0UXVlcnkKKyAqCisgKiBTaW5jZTogMC4xMC4yMgorICovCitHc3RRdWVyeSAqCitnc3RfcXVlcnlfbmV3X3VyaSAodm9pZCkKK3sKKyAgR3N0UXVlcnkgKnF1ZXJ5OworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX2lkX25ldyAoR1NUX1FVQVJLIChRVUVSWV9VUkkpLAorICAgICAgR1NUX1FVQVJLIChVUkkpLCBHX1RZUEVfU1RSSU5HLCBOVUxMLCBOVUxMKTsKKworICBxdWVyeSA9IGdzdF9xdWVyeV9uZXcgKEdTVF9RVUVSWV9VUkksIHN0cnVjdHVyZSk7CisKKyAgcmV0dXJuIHF1ZXJ5OworfQorCisvKioKKyAqIGdzdF9xdWVyeV9zZXRfdXJpOgorICogQHF1ZXJ5OiBhICNHc3RRdWVyeSB3aXRoIHF1ZXJ5IHR5cGUgR1NUX1FVRVJZX1VSSQorICogQHVyaTogdGhlIFVSSSB0byBzZXQKKyAqCisgKiBBbnN3ZXIgYSBVUkkgcXVlcnkgYnkgc2V0dGluZyB0aGUgcmVxdWVzdGVkIFVSSS4KKyAqCisgKiBTaW5jZTogMC4xMC4yMgorICovCit2b2lkCitnc3RfcXVlcnlfc2V0X3VyaSAoR3N0UXVlcnkgKiBxdWVyeSwgY29uc3QgZ2NoYXIgKiB1cmkpCit7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX1VSSSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKGdzdF9xdWVyeV9pc193cml0YWJsZSAocXVlcnkpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X3VyaV9pc192YWxpZCAodXJpKSk7CisKKyAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOworICBnc3Rfc3RydWN0dXJlX2lkX3NldCAoc3RydWN0dXJlLCBHU1RfUVVBUksgKFVSSSksIEdfVFlQRV9TVFJJTkcsIHVyaSwgTlVMTCk7Cit9CisKKy8qKgorICogZ3N0X3F1ZXJ5X3BhcnNlX3VyaToKKyAqIEBxdWVyeTogYSAjR3N0UXVlcnkKKyAqIEB1cmk6IChvdXQgY2FsbGVlLWFsbG9jYXRlcykgKGFsbG93LW5vbmUpOiB0aGUgc3RvcmFnZSBmb3IgdGhlIGN1cnJlbnQgVVJJCisgKiAgICAgKG1heSBiZSBOVUxMKQorICoKKyAqIFBhcnNlIGFuIFVSSSBxdWVyeSwgd3JpdGluZyB0aGUgVVJJIGludG8gQHVyaSBhcyBhIG5ld2x5CisgKiBhbGxvY2F0ZWQgc3RyaW5nLCBpZiB0aGUgcmVzcGVjdGl2ZSBwYXJhbWV0ZXJzIGFyZSBub24tTlVMTC4KKyAqIEZyZWUgdGhlIHN0cmluZyB3aXRoIGdfZnJlZSgpIGFmdGVyIHVzYWdlLgorICoKKyAqIFNpbmNlOiAwLjEwLjIyCisgKi8KK3ZvaWQKK2dzdF9xdWVyeV9wYXJzZV91cmkgKEdzdFF1ZXJ5ICogcXVlcnksIGdjaGFyICoqIHVyaSkKK3sKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfVVJJKTsKKworICBzdHJ1Y3R1cmUgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7CisgIGlmICh1cmkpCisgICAgKnVyaSA9IGdfdmFsdWVfZHVwX3N0cmluZyAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKKyAgICAgICAgICAgIEdTVF9RVUFSSyAoVVJJKSkpOworfQorCisvKioKKyAqIGdzdF9xdWVyeV9uZXdfYWxsb2NhdGlvbgorICogQGNhcHM6IHRoZSBuZWdvdGlhdGVkIGNhcHMKKyAqIEBuZWVkX3Bvb2w6IHJldHVybiBhIHBvb2wKKyAqCisgKiBDb25zdHJ1Y3RzIGEgbmV3IHF1ZXJ5IG9iamVjdCBmb3IgcXVlcnlpbmcgdGhlIGFsbG9jYXRpb24gcHJvcGVydGllcy4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnc3RfcXVlcnlfdW5yZWYKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RRdWVyeQorICovCitHc3RRdWVyeSAqCitnc3RfcXVlcnlfbmV3X2FsbG9jYXRpb24gKEdzdENhcHMgKiBjYXBzLCBnYm9vbGVhbiBuZWVkX3Bvb2wpCit7CisgIEdzdFF1ZXJ5ICpxdWVyeTsKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9pZF9uZXcgKEdTVF9RVUFSSyAoUVVFUllfQUxMT0NBVElPTiksCisgICAgICBHU1RfUVVBUksgKENBUFMpLCBHU1RfVFlQRV9DQVBTLCBjYXBzLAorICAgICAgR1NUX1FVQVJLIChORUVEX1BPT0wpLCBHX1RZUEVfQk9PTEVBTiwgbmVlZF9wb29sLAorICAgICAgR1NUX1FVQVJLIChTSVpFKSwgR19UWVBFX1VJTlQsIDAsCisgICAgICBHU1RfUVVBUksgKE1JTl9CVUZGRVJTKSwgR19UWVBFX1VJTlQsIDAsCisgICAgICBHU1RfUVVBUksgKE1BWF9CVUZGRVJTKSwgR19UWVBFX1VJTlQsIDAsCisgICAgICBHU1RfUVVBUksgKFBSRUZJWCksIEdfVFlQRV9VSU5ULCAwLAorICAgICAgR1NUX1FVQVJLIChBTElHTiksIEdfVFlQRV9VSU5ULCAwLAorICAgICAgR1NUX1FVQVJLIChQT09MKSwgR1NUX1RZUEVfQlVGRkVSX1BPT0wsIE5VTEwsIE5VTEwpOworCisgIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ldyAoR1NUX1FVRVJZX0FMTE9DQVRJT04sIHN0cnVjdHVyZSk7CisKKyAgcmV0dXJuIHF1ZXJ5OworfQorCit2b2lkCitnc3RfcXVlcnlfcGFyc2VfYWxsb2NhdGlvbiAoR3N0UXVlcnkgKiBxdWVyeSwgR3N0Q2FwcyAqKiBjYXBzLAorICAgIGdib29sZWFuICogbmVlZF9wb29sKQoreworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9BTExPQ0FUSU9OKTsKKworICBzdHJ1Y3R1cmUgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7CisgIGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0IChzdHJ1Y3R1cmUsCisgICAgICBHU1RfUVVBUksgKENBUFMpLCBHU1RfVFlQRV9DQVBTLCBjYXBzLAorICAgICAgR1NUX1FVQVJLIChORUVEX1BPT0wpLCBHX1RZUEVfQk9PTEVBTiwgbmVlZF9wb29sLCBOVUxMKTsKK30KKworLyoqCisgKiBnc3RfcXVlcnlfc2V0X2FsbG9jYXRpb25fcGFyYW1zCisgKiBAcXVlcnk6IEEgdmFsaWQgI0dzdFF1ZXJ5IG9mIHR5cGUgR1NUX1FVRVJZX0FMTE9DQVRJT04uCisgKiBAc2l6ZTogdGhlIHNpemUKKyAqIEBtaW5fYnVmZmVyczogdGhlIG1pbiBidWZmZXJzCisgKiBAbWF4X2J1ZmZlcnM6IHRoZSBtYXggYnVmZmVycworICogQHByZWZpeDogdGhlIHByZWZpeAorICogQGFsaWdubWVudDogdGhlIGFsaWdubWVudAorICogQHBvb2w6IHRoZSAjR3N0QnVmZmVyUG9vbAorICoKKyAqIFNldCB0aGUgYWxsb2NhdGlvbiBwYXJhbWV0ZXJzIGluIEBxdWVyeS4KKyAqLwordm9pZAorZ3N0X3F1ZXJ5X3NldF9hbGxvY2F0aW9uX3BhcmFtcyAoR3N0UXVlcnkgKiBxdWVyeSwgZ3VpbnQgc2l6ZSwKKyAgICBndWludCBtaW5fYnVmZmVycywgZ3VpbnQgbWF4X2J1ZmZlcnMsIGd1aW50IHByZWZpeCwKKyAgICBndWludCBhbGlnbm1lbnQsIEdzdEJ1ZmZlclBvb2wgKiBwb29sKQoreworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9BTExPQ0FUSU9OKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X3F1ZXJ5X2lzX3dyaXRhYmxlIChxdWVyeSkpOworICBnX3JldHVybl9pZl9mYWlsICgoKGFsaWdubWVudCArIDEpICYgYWxpZ25tZW50KSA9PSAwKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoc2l6ZSAhPSAwIHx8IHBvb2wgPT0gTlVMTCk7CisKKyAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOworICBnc3Rfc3RydWN0dXJlX2lkX3NldCAoc3RydWN0dXJlLAorICAgICAgR1NUX1FVQVJLIChTSVpFKSwgR19UWVBFX1VJTlQsIHNpemUsCisgICAgICBHU1RfUVVBUksgKE1JTl9CVUZGRVJTKSwgR19UWVBFX1VJTlQsIG1pbl9idWZmZXJzLAorICAgICAgR1NUX1FVQVJLIChNQVhfQlVGRkVSUyksIEdfVFlQRV9VSU5ULCBtYXhfYnVmZmVycywKKyAgICAgIEdTVF9RVUFSSyAoUFJFRklYKSwgR19UWVBFX1VJTlQsIHByZWZpeCwKKyAgICAgIEdTVF9RVUFSSyAoQUxJR04pLCBHX1RZUEVfVUlOVCwgYWxpZ25tZW50LAorICAgICAgR1NUX1FVQVJLIChQT09MKSwgR1NUX1RZUEVfQlVGRkVSX1BPT0wsIHBvb2wsIE5VTEwpOworfQorCisvKioKKyAqIGdzdF9xdWVyeV9wYXJzZV9hbGxvY2F0aW9uX3BhcmFtcworICogQHF1ZXJ5OiBBIHZhbGlkICNHc3RRdWVyeSBvZiB0eXBlIEdTVF9RVUVSWV9BTExPQ0FUSU9OLgorICogQHNpemU6IHRoZSBzaXplCisgKiBAbWluX2J1ZmZlcnM6IHRoZSBtaW4gYnVmZmVycworICogQG1heF9idWZmZXJzOiB0aGUgbWF4IGJ1ZmZlcnMKKyAqIEBwcmVmaXg6IHRoZSBwcmVmaXgKKyAqIEBhbGlnbm1lbnQ6IHRoZSBhbGlnbm1lbnQKKyAqIEBwb29sOiB0aGUgI0dzdEJ1ZmZlclBvb2wKKyAqCisgKiBHZXQgdGhlIGFsbG9jYXRpb24gcGFyYW1ldGVycyBpbiBAcXVlcnkuCisgKi8KK3ZvaWQKK2dzdF9xdWVyeV9wYXJzZV9hbGxvY2F0aW9uX3BhcmFtcyAoR3N0UXVlcnkgKiBxdWVyeSwgZ3VpbnQgKiBzaXplLAorICAgIGd1aW50ICogbWluX2J1ZmZlcnMsIGd1aW50ICogbWF4X2J1ZmZlcnMsIGd1aW50ICogcHJlZml4LAorICAgIGd1aW50ICogYWxpZ25tZW50LCBHc3RCdWZmZXJQb29sICoqIHBvb2wpCit7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX0FMTE9DQVRJT04pOworCisgIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKKyAgZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKHN0cnVjdHVyZSwKKyAgICAgIEdTVF9RVUFSSyAoU0laRSksIEdfVFlQRV9VSU5ULCBzaXplLAorICAgICAgR1NUX1FVQVJLIChNSU5fQlVGRkVSUyksIEdfVFlQRV9VSU5ULCBtaW5fYnVmZmVycywKKyAgICAgIEdTVF9RVUFSSyAoTUFYX0JVRkZFUlMpLCBHX1RZUEVfVUlOVCwgbWF4X2J1ZmZlcnMsCisgICAgICBHU1RfUVVBUksgKFBSRUZJWCksIEdfVFlQRV9VSU5ULCBwcmVmaXgsCisgICAgICBHU1RfUVVBUksgKEFMSUdOKSwgR19UWVBFX1VJTlQsIGFsaWdubWVudCwKKyAgICAgIEdTVF9RVUFSSyAoUE9PTCksIEdTVF9UWVBFX0JVRkZFUl9QT09MLCBwb29sLCBOVUxMKTsKK30KKworLyoqCisgKiBnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fbWV0YQorICogQHF1ZXJ5OiBhIEdTVF9RVUVSWV9BTExPQ0FUSU9OIHR5cGUgcXVlcnkgI0dzdFF1ZXJ5CisgKiBAYXBpOiB0aGUgbWV0YWRhdGEgQVBJCisgKgorICogQWRkIEBhcGkgYXMgYW9uZSBvZiB0aGUgc3VwcG9ydGVkIG1ldGFkYXRhIEFQSSB0byBAcXVlcnkuCisgKi8KK3ZvaWQKK2dzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9tZXRhIChHc3RRdWVyeSAqIHF1ZXJ5LCBjb25zdCBnY2hhciAqIGFwaSkKK3sKKyAgR1ZhbHVlQXJyYXkgKmFycmF5OworICBjb25zdCBHVmFsdWUgKnZhbHVlOworICBHVmFsdWUgYXBpX3ZhbHVlID0geyAwIH07CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX0FMTE9DQVRJT04pOworICBnX3JldHVybl9pZl9mYWlsIChhcGkgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKGdzdF9xdWVyeV9pc193cml0YWJsZSAocXVlcnkpKTsKKworICBzdHJ1Y3R1cmUgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7CisgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgR1NUX1FVQVJLIChNRVRBKSk7CisgIGlmICh2YWx1ZSkgeworICAgIGFycmF5ID0gKEdWYWx1ZUFycmF5ICopIGdfdmFsdWVfZ2V0X2JveGVkICh2YWx1ZSk7CisgIH0gZWxzZSB7CisgICAgR1ZhbHVlIG5ld19hcnJheV92YWwgPSB7IDAsIH07CisKKyAgICBhcnJheSA9IGdfdmFsdWVfYXJyYXlfbmV3ICgwKTsKKworICAgIGdfdmFsdWVfaW5pdCAoJm5ld19hcnJheV92YWwsIEdfVFlQRV9WQUxVRV9BUlJBWSk7CisgICAgZ192YWx1ZV90YWtlX2JveGVkICgmbmV3X2FycmF5X3ZhbCwgYXJyYXkpOworCisgICAgZ3N0X3N0cnVjdHVyZV9pZF90YWtlX3ZhbHVlIChzdHJ1Y3R1cmUsIEdTVF9RVUFSSyAoTUVUQSksICZuZXdfYXJyYXlfdmFsKTsKKyAgfQorCisgIGdfdmFsdWVfaW5pdCAoJmFwaV92YWx1ZSwgR19UWVBFX1NUUklORyk7CisgIGdfdmFsdWVfc2V0X3N0cmluZyAoJmFwaV92YWx1ZSwgYXBpKTsKKyAgZ192YWx1ZV9hcnJheV9hcHBlbmQgKGFycmF5LCAmYXBpX3ZhbHVlKTsKKyAgZ192YWx1ZV91bnNldCAoJmFwaV92YWx1ZSk7Cit9CisKKy8qKgorICogZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fbWV0YXM6CisgKiBAcXVlcnk6IGEgR1NUX1FVRVJZX0FMTE9DQVRJT04gdHlwZSBxdWVyeSAjR3N0UXVlcnkKKyAqCisgKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIHZhbHVlcyBjdXJyZW50bHkgc3RvcmVkIGluIHRoZQorICogbWV0YSBBUEkgYXJyYXkgb2YgdGhlIHF1ZXJ5J3Mgc3RydWN0dXJlLgorICoKKyAqIFJldHVybnM6IHRoZSBtZXRhZGF0YSBBUEkgYXJyYXkgc2l6ZSBhcyBhICNndWludC4KKyAqLworZ3VpbnQKK2dzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX21ldGFzIChHc3RRdWVyeSAqIHF1ZXJ5KQoreworICBHVmFsdWVBcnJheSAqYXJyYXk7CisgIGNvbnN0IEdWYWx1ZSAqdmFsdWU7CisgIGd1aW50IHNpemUgPSAwOworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfQUxMT0NBVElPTiwgMCk7CisKKyAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOworICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsIEdTVF9RVUFSSyAoTUVUQSkpOworICBpZiAodmFsdWUpIHsKKyAgICBhcnJheSA9IChHVmFsdWVBcnJheSAqKSBnX3ZhbHVlX2dldF9ib3hlZCAodmFsdWUpOworICAgIHNpemUgPSBhcnJheS0+bl92YWx1ZXM7CisgIH0KKyAgcmV0dXJuIHNpemU7Cit9CisKKy8qKgorICogZ3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX21ldGEKKyAqIEBxdWVyeTogYSBHU1RfUVVFUllfQUxMT0NBVElPTiB0eXBlIHF1ZXJ5ICNHc3RRdWVyeQorICogQGluZGV4OiBwb3NpdGlvbiBpbiB0aGUgbWV0YWRhdGEgQVBJIGFycmF5IHRvIHJlYWQKKyAqCisgKiBQYXJzZSBhbiBhdmFpbGFibGUgcXVlcnkgYW5kIGdldCB0aGUgbWV0YWRhdGEgQVBJCisgKiBhdCBAaW5kZXggb2YgdGhlIG1ldGFkYXRhIEFQSSBhcnJheS4KKyAqCisgKiBSZXR1cm5zOiBhICNnY2hhciBvZiB0aGUgbWV0YWRhdGEgQVBJIGF0IEBpbmRleC4KKyAqLworY29uc3QgZ2NoYXIgKgorZ3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX21ldGEgKEdzdFF1ZXJ5ICogcXVlcnksIGd1aW50IGluZGV4KQoreworICBjb25zdCBHVmFsdWUgKnZhbHVlOworICBjb25zdCBnY2hhciAqcmV0ID0gTlVMTDsKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX0FMTE9DQVRJT04sIE5VTEwpOworCisgIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKKyAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLCBHU1RfUVVBUksgKE1FVEEpKTsKKyAgaWYgKHZhbHVlKSB7CisgICAgR1ZhbHVlQXJyYXkgKm1ldGE7CisgICAgR1ZhbHVlICphcGlfdmFsdWU7CisKKyAgICBtZXRhID0gKEdWYWx1ZUFycmF5ICopIGdfdmFsdWVfZ2V0X2JveGVkICh2YWx1ZSk7CisgICAgYXBpX3ZhbHVlID0gZ192YWx1ZV9hcnJheV9nZXRfbnRoIChtZXRhLCBpbmRleCk7CisKKyAgICBpZiAoYXBpX3ZhbHVlKQorICAgICAgcmV0ID0gZ192YWx1ZV9nZXRfc3RyaW5nIChhcGlfdmFsdWUpOworICB9CisgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICogZ3N0X3F1ZXJ5X2hhc19hbGxvY2F0aW9uX21ldGEKKyAqIEBxdWVyeTogYSBHU1RfUVVFUllfQUxMT0NBVElPTiB0eXBlIHF1ZXJ5ICNHc3RRdWVyeQorICogQGFwaTogdGhlIG1ldGFkYXRhIEFQSQorICoKKyAqIENoZWNrIGlmIEBxdWVyeSBoYXMgbWV0YWRhdGEgQGFwaSBzZXQuCisgKgorICogUmV0dXJuczogVFJVRSB3aGVuIEBhcGkgaXMgaW4gdGhlIGxpc3Qgb2YgbWV0YWRhdGEuCisgKi8KK2dib29sZWFuCitnc3RfcXVlcnlfaGFzX2FsbG9jYXRpb25fbWV0YSAoR3N0UXVlcnkgKiBxdWVyeSwgY29uc3QgZ2NoYXIgKiBhcGkpCit7CisgIGNvbnN0IEdWYWx1ZSAqdmFsdWU7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9BTExPQ0FUSU9OLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChhcGkgIT0gTlVMTCwgRkFMU0UpOworCisgIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKKyAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLCBHU1RfUVVBUksgKE1FVEEpKTsKKyAgaWYgKHZhbHVlKSB7CisgICAgR1ZhbHVlQXJyYXkgKmFycmF5OworICAgIEdWYWx1ZSAqYXBpX3ZhbHVlOworICAgIGd1aW50IGk7CisKKyAgICBhcnJheSA9IChHVmFsdWVBcnJheSAqKSBnX3ZhbHVlX2dldF9ib3hlZCAodmFsdWUpOworICAgIGZvciAoaSA9IDA7IGkgPCBhcnJheS0+bl92YWx1ZXM7IGkrKykgeworICAgICAgYXBpX3ZhbHVlID0gZ192YWx1ZV9hcnJheV9nZXRfbnRoIChhcnJheSwgaSk7CisgICAgICBpZiAoIXN0cmNtcCAoYXBpLCBnX3ZhbHVlX2dldF9zdHJpbmcgKGFwaV92YWx1ZSkpKQorICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIEZBTFNFOworfQorCisvKioKKyAqIGdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9tZW1vcnkKKyAqIEBxdWVyeTogYSBHU1RfUVVFUllfQUxMT0NBVElPTiB0eXBlIHF1ZXJ5ICNHc3RRdWVyeQorICogQGFsbG9jOiB0aGUgbWVtb3J5IGFsbG9jYXRvcgorICoKKyAqIEFkZCBAYWxsb2MgYXMgYSBzdXBwb3J0ZWQgbWVtb3J5IGFsbG9jYXRvci4KKyAqLwordm9pZAorZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21lbW9yeSAoR3N0UXVlcnkgKiBxdWVyeSwgY29uc3QgZ2NoYXIgKiBhbGxvYykKK3sKKyAgR1ZhbHVlQXJyYXkgKmFycmF5OworICBjb25zdCBHVmFsdWUgKnZhbHVlOworICBHVmFsdWUgYWxsb2NfdmFsdWUgPSB7IDAgfTsKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfQUxMT0NBVElPTik7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKGdzdF9xdWVyeV9pc193cml0YWJsZSAocXVlcnkpKTsKKworICBzdHJ1Y3R1cmUgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7CisgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgR1NUX1FVQVJLIChBTExPQ0FUT1IpKTsKKyAgaWYgKHZhbHVlKSB7CisgICAgYXJyYXkgPSAoR1ZhbHVlQXJyYXkgKikgZ192YWx1ZV9nZXRfYm94ZWQgKHZhbHVlKTsKKyAgfSBlbHNlIHsKKyAgICBHVmFsdWUgbmV3X2FycmF5X3ZhbCA9IHsgMCwgfTsKKworICAgIGFycmF5ID0gZ192YWx1ZV9hcnJheV9uZXcgKDApOworCisgICAgZ192YWx1ZV9pbml0ICgmbmV3X2FycmF5X3ZhbCwgR19UWVBFX1ZBTFVFX0FSUkFZKTsKKyAgICBnX3ZhbHVlX3Rha2VfYm94ZWQgKCZuZXdfYXJyYXlfdmFsLCBhcnJheSk7CisKKyAgICBnc3Rfc3RydWN0dXJlX2lkX3Rha2VfdmFsdWUgKHN0cnVjdHVyZSwgR1NUX1FVQVJLIChBTExPQ0FUT1IpLAorICAgICAgICAmbmV3X2FycmF5X3ZhbCk7CisgIH0KKworICBnX3ZhbHVlX2luaXQgKCZhbGxvY192YWx1ZSwgR19UWVBFX1NUUklORyk7CisgIGdfdmFsdWVfc2V0X3N0cmluZyAoJmFsbG9jX3ZhbHVlLCBhbGxvYyk7CisgIGdfdmFsdWVfYXJyYXlfYXBwZW5kIChhcnJheSwgJmFsbG9jX3ZhbHVlKTsKKyAgZ192YWx1ZV91bnNldCAoJmFsbG9jX3ZhbHVlKTsKK30KKworLyoqCisgKiBnc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9tZW1vcmllczoKKyAqIEBxdWVyeTogYSBHU1RfUVVFUllfQUxMT0NBVElPTiB0eXBlIHF1ZXJ5ICNHc3RRdWVyeQorICoKKyAqIFJldHJpZXZlIHRoZSBudW1iZXIgb2YgdmFsdWVzIGN1cnJlbnRseSBzdG9yZWQgaW4gdGhlCisgKiBhbGxvY2F0b3IgYXJyYXkgb2YgdGhlIHF1ZXJ5J3Mgc3RydWN0dXJlLgorICoKKyAqIElmIG5vIG1lbW9yeSBhbGxvY2F0b3IgaXMgc3BlY2lmaWVkLCB0aGUgZG93bnN0cmVhbSBlbGVtZW50IGNhbiBoYW5kbGUKKyAqIHRoZSBkZWZhdWx0IG1lbW9yeSBhbGxvY2F0b3IuCisgKgorICogUmV0dXJuczogdGhlIGFsbG9jYXRvciBhcnJheSBzaXplIGFzIGEgI2d1aW50LgorICovCitndWludAorZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fbWVtb3JpZXMgKEdzdFF1ZXJ5ICogcXVlcnkpCit7CisgIEdWYWx1ZUFycmF5ICphcnJheTsKKyAgY29uc3QgR1ZhbHVlICp2YWx1ZTsKKyAgZ3VpbnQgc2l6ZSA9IDA7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9BTExPQ0FUSU9OLCAwKTsKKworICBzdHJ1Y3R1cmUgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7CisgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgR1NUX1FVQVJLIChBTExPQ0FUT1IpKTsKKyAgaWYgKHZhbHVlKSB7CisgICAgYXJyYXkgPSAoR1ZhbHVlQXJyYXkgKikgZ192YWx1ZV9nZXRfYm94ZWQgKHZhbHVlKTsKKyAgICBzaXplID0gYXJyYXktPm5fdmFsdWVzOworICB9CisgIHJldHVybiBzaXplOworfQorCisvKioKKyAqIGdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9tZW1vcnkKKyAqIEBxdWVyeTogYSBHU1RfUVVFUllfQUxMT0NBVElPTiB0eXBlIHF1ZXJ5ICNHc3RRdWVyeQorICogQGluZGV4OiBwb3NpdGlvbiBpbiB0aGUgYWxsb2NhdG9yIGFycmF5IHRvIHJlYWQKKyAqCisgKiBQYXJzZSBhbiBhdmFpbGFibGUgcXVlcnkgYW5kIGdldCB0aGUgYWxsb2N0b3IKKyAqIGF0IEBpbmRleCBvZiB0aGUgYWxsb2NhdG9yIGFycmF5LgorICoKKyAqIFJldHVybnM6IHRoZSBuYW1lIG9mIHRoZSBhbGxvY2F0b3IgYXQgQGluZGV4LgorICovCitjb25zdCBnY2hhciAqCitnc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fbWVtb3J5IChHc3RRdWVyeSAqIHF1ZXJ5LCBndWludCBpbmRleCkKK3sKKyAgY29uc3QgR1ZhbHVlICp2YWx1ZTsKKyAgY29uc3QgZ2NoYXIgKnJldCA9IE5VTEw7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9BTExPQ0FUSU9OLCBOVUxMKTsKKworICBzdHJ1Y3R1cmUgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7CisgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgR1NUX1FVQVJLIChBTExPQ0FUT1IpKTsKKyAgaWYgKHZhbHVlKSB7CisgICAgR1ZhbHVlQXJyYXkgKm1lbW9yeTsKKyAgICBHVmFsdWUgKmFsbG9jX3ZhbHVlOworCisgICAgbWVtb3J5ID0gKEdWYWx1ZUFycmF5ICopIGdfdmFsdWVfZ2V0X2JveGVkICh2YWx1ZSk7CisgICAgYWxsb2NfdmFsdWUgPSBnX3ZhbHVlX2FycmF5X2dldF9udGggKG1lbW9yeSwgaW5kZXgpOworCisgICAgaWYgKGFsbG9jX3ZhbHVlKQorICAgICAgcmV0ID0gZ192YWx1ZV9nZXRfc3RyaW5nIChhbGxvY192YWx1ZSk7CisgIH0KKyAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBnc3RfcXVlcnlfbmV3X3NjaGVkdWxpbmcKKyAqCisgKiBDb25zdHJ1Y3RzIGEgbmV3IHF1ZXJ5IG9iamVjdCBmb3IgcXVlcnlpbmcgdGhlIHNjaGVkdWxpbmcgcHJvcGVydGllcy4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnc3RfcXVlcnlfdW5yZWYKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RRdWVyeQorICovCitHc3RRdWVyeSAqCitnc3RfcXVlcnlfbmV3X3NjaGVkdWxpbmcgKHZvaWQpCit7CisgIEdzdFF1ZXJ5ICpxdWVyeTsKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisKKyAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9pZF9uZXcgKEdTVF9RVUFSSyAoUVVFUllfU0NIRURVTElORyksCisgICAgICBHU1RfUVVBUksgKFBVTExfTU9ERSksIEdfVFlQRV9CT09MRUFOLCBGQUxTRSwKKyAgICAgIEdTVF9RVUFSSyAoUkFORE9NX0FDQ0VTUyksIEdfVFlQRV9CT09MRUFOLCBGQUxTRSwKKyAgICAgIEdTVF9RVUFSSyAoU0VRVUVOVElBTCksIEdfVFlQRV9CT09MRUFOLCBUUlVFLAorICAgICAgR1NUX1FVQVJLIChNSU5TSVpFKSwgR19UWVBFX0lOVCwgMSwKKyAgICAgIEdTVF9RVUFSSyAoTUFYU0laRSksIEdfVFlQRV9JTlQsIC0xLAorICAgICAgR1NUX1FVQVJLIChBTElHTiksIEdfVFlQRV9JTlQsIDEsIE5VTEwpOworICBxdWVyeSA9IGdzdF9xdWVyeV9uZXcgKEdTVF9RVUVSWV9TQ0hFRFVMSU5HLCBzdHJ1Y3R1cmUpOworCisgIHJldHVybiBxdWVyeTsKK30KKworLyoqCisgKiBnc3RfcXVlcnlfc2V0X3NjaGVkdWxpbmcKKyAqIEBxdWVyeTogQSB2YWxpZCAjR3N0UXVlcnkgb2YgdHlwZSBHU1RfUVVFUllfU0NIRURVTElORy4KKyAqIEBwdWxsX21vZGU6IGlmIHB1bGwgbW9kZSBzY2hlZHVsaW5nIGlzIHN1cHBvcnRlZAorICogQHJhbmRvbV9hY2Nlc3M6IGlmIHJhbmRvbSBhY2Nlc3MgaXMgcG9zc2libGUKKyAqIEBzZXF1ZW50aWFsOiBpZiBzZXF1ZW50aWFsIGFjY2VzcyBpcyByZWNvbW1lbmRlZAorICogQG1pbnNpemU6IHRoZSBzdWdnZXN0ZWQgbWluaW11bSBzaXplIG9mIHB1bGwgcmVxdWVzdHMKKyAqIEBtYXhzaXplOiB0aGUgc3VnZ2VzdGVkIG1heGltdW0gc2l6ZSBvZiBwdWxsIHJlcXVlc3RzOgorICogQGFsaWduOiB0aGUgc3VnZ2VzdGVkIGFsaWdubWVudCBvZiBwdWxsIHJlcXVlc3RzCisgKgorICogU2V0IHRoZSBzY2hlZHVsaW5nIHByb3BlcnRpZXMuCisgKi8KK3ZvaWQKK2dzdF9xdWVyeV9zZXRfc2NoZWR1bGluZyAoR3N0UXVlcnkgKiBxdWVyeSwgZ2Jvb2xlYW4gcHVsbF9tb2RlLAorICAgIGdib29sZWFuIHJhbmRvbV9hY2Nlc3MsIGdib29sZWFuIHNlcXVlbnRpYWwsCisgICAgZ2ludCBtaW5zaXplLCBnaW50IG1heHNpemUsIGdpbnQgYWxpZ24pCit7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX1NDSEVEVUxJTkcpOworICBnX3JldHVybl9pZl9mYWlsIChnc3RfcXVlcnlfaXNfd3JpdGFibGUgKHF1ZXJ5KSk7CisKKyAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOworICBnc3Rfc3RydWN0dXJlX2lkX3NldCAoc3RydWN0dXJlLAorICAgICAgR1NUX1FVQVJLIChQVUxMX01PREUpLCBHX1RZUEVfQk9PTEVBTiwgcHVsbF9tb2RlLAorICAgICAgR1NUX1FVQVJLIChSQU5ET01fQUNDRVNTKSwgR19UWVBFX0JPT0xFQU4sIHJhbmRvbV9hY2Nlc3MsCisgICAgICBHU1RfUVVBUksgKFNFUVVFTlRJQUwpLCBHX1RZUEVfQk9PTEVBTiwgc2VxdWVudGlhbCwKKyAgICAgIEdTVF9RVUFSSyAoTUlOU0laRSksIEdfVFlQRV9JTlQsIG1pbnNpemUsCisgICAgICBHU1RfUVVBUksgKE1BWFNJWkUpLCBHX1RZUEVfSU5ULCBtYXhzaXplLAorICAgICAgR1NUX1FVQVJLIChBTElHTiksIEdfVFlQRV9JTlQsIGFsaWduLCBOVUxMKTsKK30KKworLyoqCisgKiBnc3RfcXVlcnlfcGFyc2Vfc2NoZWR1bGluZworICogQHF1ZXJ5OiBBIHZhbGlkICNHc3RRdWVyeSBvZiB0eXBlIEdTVF9RVUVSWV9TQ0hFRFVMSU5HLgorICogQHB1bGxfbW9kZTogaWYgcHVsbCBtb2RlIHNjaGVkdWxpbmcgaXMgc3VwcG9ydGVkCisgKiBAcmFuZG9tX2FjY2VzczogaWYgcmFuZG9tIGFjY2VzcyBpcyBwb3NzaWJsZQorICogQHNlcXVlbnRpYWw6IGlmIHNlcXVlbnRpYWwgYWNjZXNzIGlzIHJlY29tbWVuZGVkCisgKiBAbWluc2l6ZTogdGhlIHN1Z2dlc3RlZCBtaW5pbXVtIHNpemUgb2YgcHVsbCByZXF1ZXN0cworICogQG1heHNpemU6IHRoZSBzdWdnZXN0ZWQgbWF4aW11bSBzaXplIG9mIHB1bGwgcmVxdWVzdHM6CisgKiBAYWxpZ246IHRoZSBzdWdnZXN0ZWQgYWxpZ25tZW50IG9mIHB1bGwgcmVxdWVzdHMKKyAqCisgKiBTZXQgdGhlIHNjaGVkdWxpbmcgcHJvcGVydGllcy4KKyAqLwordm9pZAorZ3N0X3F1ZXJ5X3BhcnNlX3NjaGVkdWxpbmcgKEdzdFF1ZXJ5ICogcXVlcnksIGdib29sZWFuICogcHVsbF9tb2RlLAorICAgIGdib29sZWFuICogcmFuZG9tX2FjY2VzcywgZ2Jvb2xlYW4gKiBzZXF1ZW50aWFsLAorICAgIGdpbnQgKiBtaW5zaXplLCBnaW50ICogbWF4c2l6ZSwgZ2ludCAqIGFsaWduKQoreworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9TQ0hFRFVMSU5HKTsKKworICBzdHJ1Y3R1cmUgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7CisgIGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0IChzdHJ1Y3R1cmUsCisgICAgICBHU1RfUVVBUksgKFBVTExfTU9ERSksIEdfVFlQRV9CT09MRUFOLCBwdWxsX21vZGUsCisgICAgICBHU1RfUVVBUksgKFJBTkRPTV9BQ0NFU1MpLCBHX1RZUEVfQk9PTEVBTiwgcmFuZG9tX2FjY2VzcywKKyAgICAgIEdTVF9RVUFSSyAoU0VRVUVOVElBTCksIEdfVFlQRV9CT09MRUFOLCBzZXF1ZW50aWFsLAorICAgICAgR1NUX1FVQVJLIChNSU5TSVpFKSwgR19UWVBFX0lOVCwgbWluc2l6ZSwKKyAgICAgIEdTVF9RVUFSSyAoTUFYU0laRSksIEdfVFlQRV9JTlQsIG1heHNpemUsCisgICAgICBHU1RfUVVBUksgKEFMSUdOKSwgR19UWVBFX0lOVCwgYWxpZ24sIE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHF1ZXJ5LmggYi9nc3QvZ3N0cXVlcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjgzY2JjCi0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdHF1ZXJ5LmgKQEAgLTAsMCArMSwzODUgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BjaGVsbG8uYmU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgorICogICAgICAgICAgICAgICAgICAgIDIwMTEgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKyAqCisgKiBnc3RxdWVyeS5oOiBHc3RRdWVyeSBBUEkgZGVjbGFyYXRpb24KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKKyNpZm5kZWYgX19HU1RfUVVFUllfSF9fCisjZGVmaW5lIF9fR1NUX1FVRVJZX0hfXworCisjaW5jbHVkZSA8Z2xpYi5oPgorCisjaW5jbHVkZSA8Z3N0L2dzdGl0ZXJhdG9yLmg+CisjaW5jbHVkZSA8Z3N0L2dzdG1pbmlvYmplY3QuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0c3RydWN0dXJlLmg+CisjaW5jbHVkZSA8Z3N0L2dzdGZvcm1hdC5oPgorI2luY2x1ZGUgPGdzdC9nc3RwYWQuaD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAqIEdzdFF1ZXJ5VHlwZToKKyAqIEBHU1RfUVVFUllfTk9ORTogaW52YWxpZCBxdWVyeSB0eXBlCisgKiBAR1NUX1FVRVJZX1BPU0lUSU9OOiBjdXJyZW50IHBvc2l0aW9uIGluIHN0cmVhbQorICogQEdTVF9RVUVSWV9EVVJBVElPTjogdG90YWwgZHVyYXRpb24gb2YgdGhlIHN0cmVhbQorICogQEdTVF9RVUVSWV9MQVRFTkNZOiBsYXRlbmN5IG9mIHN0cmVhbQorICogQEdTVF9RVUVSWV9KSVRURVI6IGN1cnJlbnQgaml0dGVyIG9mIHN0cmVhbQorICogQEdTVF9RVUVSWV9SQVRFOiBjdXJyZW50IHJhdGUgb2YgdGhlIHN0cmVhbQorICogQEdTVF9RVUVSWV9TRUVLSU5HOiBzZWVraW5nIGNhcGFiaWxpdGllcworICogQEdTVF9RVUVSWV9TRUdNRU5UOiBzZWdtZW50IHN0YXJ0L3N0b3AgcG9zaXRpb25zCisgKiBAR1NUX1FVRVJZX0NPTlZFUlQ6IGNvbnZlcnQgdmFsdWVzIGJldHdlZW4gZm9ybWF0cworICogQEdTVF9RVUVSWV9GT1JNQVRTOiBxdWVyeSBzdXBwb3J0ZWQgZm9ybWF0cyBmb3IgY29udmVydAorICogQEdTVF9RVUVSWV9CVUZGRVJJTkc6IHF1ZXJ5IGF2YWlsYWJsZSBtZWRpYSBmb3IgZWZmaWNpZW50IHNlZWtpbmcuIFNpbmNlCisgKiAwLjEwLjIwLgorICogQEdTVF9RVUVSWV9DVVNUT006IGEgY3VzdG9tIGFwcGxpY2F0aW9uIG9yIGVsZW1lbnQgZGVmaW5lZCBxdWVyeS4gU2luY2UKKyAqIDAuMTAuMjIuCisgKiBAR1NUX1FVRVJZX1VSSTogcXVlcnkgdGhlIFVSSSBvZiB0aGUgc291cmNlIG9yIHNpbmsuIFNpbmNlIDAuMTAuMjIuCisgKiBAR1NUX1FVRVJZX0FMTE9DQVRJT046IHRoZSBidWZmZXIgYWxsb2NhdGlvbiBwcm9wZXJ0aWVzCisgKiBAR1NUX1FVRVJZX1NDSEVEVUxJTkc6IHRoZSBzY2hlZHVsaW5nIHByb3BlcnRpZXMKKyAqCisgKiBTdGFuZGFyZCBwcmVkZWZpbmVkIFF1ZXJ5IHR5cGVzCisgKi8KKy8qIE5PVEU6IGRvbid0IGZvcmdldCB0byB1cGRhdGUgdGhlIHRhYmxlIGluIGdzdHF1ZXJ5LmMgd2hlbiBjaGFuZ2luZworICogdGhpcyBlbnVtICovCit0eXBlZGVmIGVudW0geworICBHU1RfUVVFUllfTk9ORSA9IDAsCisgIEdTVF9RVUVSWV9QT1NJVElPTiwKKyAgR1NUX1FVRVJZX0RVUkFUSU9OLAorICBHU1RfUVVFUllfTEFURU5DWSwKKyAgR1NUX1FVRVJZX0pJVFRFUiwgICAgIC8qIG5vdCBpbiBkcmFmdC1xdWVyeSwgbmVjZXNzYXJ5PyAqLworICBHU1RfUVVFUllfUkFURSwKKyAgR1NUX1FVRVJZX1NFRUtJTkcsCisgIEdTVF9RVUVSWV9TRUdNRU5ULAorICBHU1RfUVVFUllfQ09OVkVSVCwKKyAgR1NUX1FVRVJZX0ZPUk1BVFMsCisgIEdTVF9RVUVSWV9CVUZGRVJJTkcsCisgIEdTVF9RVUVSWV9DVVNUT00sCisgIEdTVF9RVUVSWV9VUkksCisgIEdTVF9RVUVSWV9BTExPQ0FUSU9OLAorICBHU1RfUVVFUllfU0NIRURVTElORworfSBHc3RRdWVyeVR5cGU7CisKKy8qKgorICogR3N0QnVmZmVyaW5nTW9kZToKKyAqIEBHU1RfQlVGRkVSSU5HX1NUUkVBTTogYSBzbWFsbCBhbW91bnQgb2YgZGF0YSBpcyBidWZmZXJlZAorICogQEdTVF9CVUZGRVJJTkdfRE9XTkxPQUQ6IHRoZSBzdHJlYW0gaXMgYmVpbmcgZG93bmxvYWRlZAorICogQEdTVF9CVUZGRVJJTkdfVElNRVNISUZUOiB0aGUgc3RyZWFtIGlzIGJlaW5nIGRvd25sb2FkZWQgaW4gYSByaW5nYnVmZmVyCisgKiBAR1NUX0JVRkZFUklOR19MSVZFOiB0aGUgc3RyZWFtIGlzIGEgbGl2ZSBzdHJlYW0KKyAqCisgKiBUaGUgZGlmZmVyZW50IHR5cGVzIG9mIGJ1ZmZlcmluZyBtZXRob2RzLgorICovCit0eXBlZGVmIGVudW0geworICBHU1RfQlVGRkVSSU5HX1NUUkVBTSwKKyAgR1NUX0JVRkZFUklOR19ET1dOTE9BRCwKKyAgR1NUX0JVRkZFUklOR19USU1FU0hJRlQsCisgIEdTVF9CVUZGRVJJTkdfTElWRQorfSBHc3RCdWZmZXJpbmdNb2RlOworCit0eXBlZGVmIHN0cnVjdCBfR3N0UXVlcnlUeXBlRGVmaW5pdGlvbiBHc3RRdWVyeVR5cGVEZWZpbml0aW9uOwordHlwZWRlZiBzdHJ1Y3QgX0dzdFF1ZXJ5IEdzdFF1ZXJ5OworCisvKioKKyAqIEdzdFF1ZXJ5VHlwZURlZmluaXRpb246CisgKiBAdmFsdWU6IHRoZSB1bmlxdWUgaWQgb2YgdGhlIFF1ZXJ5IHR5cGUKKyAqIEBuaWNrOiBhIHNob3J0IG5pY2sKKyAqIEBkZXNjcmlwdGlvbjogYSBsb25nZXIgZGVzY3JpcHRpb24gb2YgdGhlIHF1ZXJ5IHR5cGUKKyAqIEBxdWFyazogdGhlIHF1YXJrIGZvciB0aGUgbmljaworICoKKyAqIEEgUXVlcnkgVHlwZSBkZWZpbml0aW9uCisgKi8KK3N0cnVjdCBfR3N0UXVlcnlUeXBlRGVmaW5pdGlvbgoreworICBHc3RRdWVyeVR5cGUgICB2YWx1ZTsKKyAgY29uc3QgZ2NoYXIgICAqbmljazsKKyAgY29uc3QgZ2NoYXIgICAqZGVzY3JpcHRpb247CisgIEdRdWFyayAgICAgICAgIHF1YXJrOworfTsKKworI2RlZmluZSBHU1RfVFlQRV9RVUVSWSAgICAgICAgICAgICAgICAgICAgICAgICAoZ3N0X3F1ZXJ5X2dldF90eXBlKCkpCisjZGVmaW5lIEdTVF9JU19RVUVSWShvYmopICAgICAgICAgICAgICAgICAgICAgIChHU1RfSVNfTUlOSV9PQkpFQ1RfVFlQRSAob2JqLCBHU1RfVFlQRV9RVUVSWSkpCisjZGVmaW5lIEdTVF9RVUVSWV9DQVNUKG9iaikgICAgICAgICAgICAgICAgICAgICgoR3N0UXVlcnkqKShvYmopKQorI2RlZmluZSBHU1RfUVVFUlkob2JqKSAgICAgICAgICAgICAgICAgICAgICAgICAoR1NUX1FVRVJZX0NBU1Qob2JqKSkKKworCisvKioKKyAqIEdTVF9RVUVSWV9UWVBFOgorICogQHF1ZXJ5OiB0aGUgcXVlcnkgdG8gcXVlcnkKKyAqCisgKiBHZXQgdGhlICNHc3RRdWVyeVR5cGUgb2YgdGhlIHF1ZXJ5LgorICovCisjZGVmaW5lIEdTVF9RVUVSWV9UWVBFKHF1ZXJ5KSAgKCgoR3N0UXVlcnkqKShxdWVyeSkpLT50eXBlKQorCisvKioKKyAqIEdTVF9RVUVSWV9UWVBFX05BTUU6CisgKiBAcXVlcnk6IHRoZSBxdWVyeSB0byBxdWVyeQorICoKKyAqIEdldCBhIGNvbnN0YW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgI0dzdFF1ZXJ5VHlwZSBvZiB0aGUgcXVlcnkuCisgKgorICogU2luY2U6IDAuMTAuNAorICovCisjZGVmaW5lIEdTVF9RVUVSWV9UWVBFX05BTUUocXVlcnkpIChnc3RfcXVlcnlfdHlwZV9nZXRfbmFtZShHU1RfUVVFUllfVFlQRShxdWVyeSkpKQorCisKKy8qKgorICogR3N0UXVlcnk6CisgKiBAbWluaV9vYmplY3Q6IFRoZSBwYXJlbnQgI0dzdE1pbmlPYmplY3QgdHlwZQorICogQHR5cGU6IHRoZSAjR3N0UXVlcnlUeXBlCisgKgorICogVGhlICNHc3RRdWVyeSBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBfR3N0UXVlcnkKK3sKKyAgR3N0TWluaU9iamVjdCBtaW5pX29iamVjdDsKKworICAvKjwgcHVibGljID4gKi8vKiB3aXRoIENPVyAqLworICBHc3RRdWVyeVR5cGUgdHlwZTsKK307CisKK2NvbnN0IGdjaGFyKiAgICBnc3RfcXVlcnlfdHlwZV9nZXRfbmFtZSAgICAgICAgKEdzdFF1ZXJ5VHlwZSBxdWVyeSk7CitHUXVhcmsgICAgICAgICAgZ3N0X3F1ZXJ5X3R5cGVfdG9fcXVhcmsgICAgICAgIChHc3RRdWVyeVR5cGUgcXVlcnkpOworCitHVHlwZSAgICAgICAgICAgZ3N0X3F1ZXJ5X2dldF90eXBlICAgICAgICAgICAgICh2b2lkKTsKKworLyogcmVnaXN0ZXIgYSBuZXcgcXVlcnkgKi8KK0dzdFF1ZXJ5VHlwZSAgICBnc3RfcXVlcnlfdHlwZV9yZWdpc3RlciAgICAgICAgKGNvbnN0IGdjaGFyICpuaWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKmRlc2NyaXB0aW9uKTsKK0dzdFF1ZXJ5VHlwZSAgICBnc3RfcXVlcnlfdHlwZV9nZXRfYnlfbmljayAgICAgKGNvbnN0IGdjaGFyICpuaWNrKTsKKworLyogY2hlY2sgaWYgYSBxdWVyeSBpcyBpbiBhbiBhcnJheSBvZiBxdWVyeXMgKi8KK2dib29sZWFuICAgICAgICBnc3RfcXVlcnlfdHlwZXNfY29udGFpbnMgICAgICAgKGNvbnN0IEdzdFF1ZXJ5VHlwZSAqdHlwZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RRdWVyeVR5cGUgdHlwZSk7CisKKy8qIHF1ZXJ5IGZvciBxdWVyeSBkZXRhaWxzICovCisKK2NvbnN0IEdzdFF1ZXJ5VHlwZURlZmluaXRpb24qCisgICAgICAgICAgICAgICAgZ3N0X3F1ZXJ5X3R5cGVfZ2V0X2RldGFpbHMgICAgICAgICAoR3N0UXVlcnlUeXBlIHR5cGUpOworR3N0SXRlcmF0b3IqICAgIGdzdF9xdWVyeV90eXBlX2l0ZXJhdGVfZGVmaW5pdGlvbnMgKHZvaWQpOworCisvKiByZWZjb3VudGluZyAqLworLyoqCisgKiBnc3RfcXVlcnlfcmVmOgorICogQHE6IGEgI0dzdFF1ZXJ5IHRvIGluY3JlYXNlIHRoZSByZWZjb3VudCBvZi4KKyAqCisgKiBJbmNyZWFzZXMgdGhlIHJlZmNvdW50IG9mIHRoZSBnaXZlbiBxdWVyeSBieSBvbmUuCisgKgorICogUmV0dXJuczogQHEKKyAqLworI2lmZGVmIF9GT09MX0dUS19ET0NfCitHX0lOTElORV9GVU5DIEdzdFF1ZXJ5ICogZ3N0X3F1ZXJ5X3JlZiAoR3N0UXVlcnkgKiBxKTsKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIEdzdFF1ZXJ5ICoKK2dzdF9xdWVyeV9yZWYgKEdzdFF1ZXJ5ICogcSkKK3sKKyAgcmV0dXJuIEdTVF9RVUVSWV9DQVNUIChnc3RfbWluaV9vYmplY3RfcmVmIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAocSkpKTsKK30KKworLyoqCisgKiBnc3RfcXVlcnlfdW5yZWY6CisgKiBAcTogYSAjR3N0UXVlcnkgdG8gZGVjcmVhc2UgdGhlIHJlZmNvdW50IG9mLgorICoKKyAqIERlY3JlYXNlcyB0aGUgcmVmY291bnQgb2YgdGhlIHF1ZXJ5LiBJZiB0aGUgcmVmY291bnQgcmVhY2hlcyAwLCB0aGUgcXVlcnkKKyAqIHdpbGwgYmUgZnJlZWQuCisgKi8KKyNpZmRlZiBfRk9PTF9HVEtfRE9DXworR19JTkxJTkVfRlVOQyB2b2lkIGdzdF9xdWVyeV91bnJlZiAoR3N0UXVlcnkgKiBxKTsKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQKK2dzdF9xdWVyeV91bnJlZiAoR3N0UXVlcnkgKiBxKQoreworICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChxKSk7Cit9CisKKy8qIGNvcHkgcXVlcnkgKi8KKy8qKgorICogZ3N0X3F1ZXJ5X2NvcHk6CisgKiBAcTogYSAjR3N0UXVlcnkgdG8gY29weS4KKyAqCisgKiBDb3BpZXMgdGhlIGdpdmVuIHF1ZXJ5IHVzaW5nIHRoZSBjb3B5IGZ1bmN0aW9uIG9mIHRoZSBwYXJlbnQgI0dzdFN0cnVjdHVyZS4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnc3RfcXVlcnlfdW5yZWYKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IGNvcHkgb2YgQHEuCisgKi8KKyNpZmRlZiBfRk9PTF9HVEtfRE9DXworR19JTkxJTkVfRlVOQyBHc3RRdWVyeSAqIGdzdF9xdWVyeV9jb3B5IChjb25zdCBHc3RRdWVyeSAqIHEpOworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgR3N0UXVlcnkgKgorZ3N0X3F1ZXJ5X2NvcHkgKGNvbnN0IEdzdFF1ZXJ5ICogcSkKK3sKKyAgcmV0dXJuIEdTVF9RVUVSWV9DQVNUIChnc3RfbWluaV9vYmplY3RfY29weSAoR1NUX01JTklfT0JKRUNUX0NPTlNUX0NBU1QgKHEpKSk7Cit9CisKKy8qKgorICogZ3N0X3F1ZXJ5X2lzX3dyaXRhYmxlOgorICogQHE6IGEgI0dzdFF1ZXJ5CisgKgorICogVGVzdHMgaWYgeW91IGNhbiBzYWZlbHkgd3JpdGUgZGF0YSBpbnRvIGEgcXVlcnkncyBzdHJ1Y3R1cmUuCisgKi8KKyNkZWZpbmUgICAgICAgICBnc3RfcXVlcnlfaXNfd3JpdGFibGUocSkgICAgIGdzdF9taW5pX29iamVjdF9pc193cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKHEpKQorLyoqCisgKiBnc3RfcXVlcnlfbWFrZV93cml0YWJsZToKKyAqIEBxOiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdFF1ZXJ5IHRvIG1ha2Ugd3JpdGFibGUKKyAqCisgKiBNYWtlcyBhIHdyaXRhYmxlIHF1ZXJ5IGZyb20gdGhlIGdpdmVuIHF1ZXJ5LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgd3JpdGFibGUgcXVlcnkgKHBvc3NpYmx5IHNhbWUgYXMgQHEpCisgKi8KKyNkZWZpbmUgICAgICAgICBnc3RfcXVlcnlfbWFrZV93cml0YWJsZShxKSAgICAgIEdTVF9RVUVSWV9DQVNUIChnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKHEpKSkKKy8qKgorICogZ3N0X3F1ZXJ5X3JlcGxhY2U6CisgKiBAb2xkX3F1ZXJ5OiAoaW5vdXQpICh0cmFuc2ZlciBmdWxsKTogcG9pbnRlciB0byBhIHBvaW50ZXIgdG8gYSAjR3N0UXVlcnkKKyAqICAgICB0byBiZSByZXBsYWNlZC4KKyAqIEBuZXdfcXVlcnk6IChhbGxvdy1ub25lKSAodHJhbnNmZXIgbm9uZSk6IHBvaW50ZXIgdG8gYSAjR3N0UXVlcnkgdGhhdCB3aWxsCisgKiAgICAgcmVwbGFjZSB0aGUgcXVlcnkgcG9pbnRlZCB0byBieSBAb2xkX3F1ZXJ5LgorICoKKyAqIE1vZGlmaWVzIGEgcG9pbnRlciB0byBhICNHc3RRdWVyeSB0byBwb2ludCB0byBhIGRpZmZlcmVudCAjR3N0UXVlcnkuIFRoZQorICogbW9kaWZpY2F0aW9uIGlzIGRvbmUgYXRvbWljYWxseSAoc28gdGhpcyBpcyB1c2VmdWwgZm9yIGVuc3VyaW5nIHRocmVhZCBzYWZldHkKKyAqIGluIHNvbWUgY2FzZXMpLCBhbmQgdGhlIHJlZmVyZW5jZSBjb3VudHMgYXJlIHVwZGF0ZWQgYXBwcm9wcmlhdGVseSAodGhlIG9sZAorICogcXVlcnkgaXMgdW5yZWZmZWQsIHRoZSBuZXcgb25lIGlzIHJlZmZlZCkuCisgKgorICogRWl0aGVyIEBuZXdfcXVlcnkgb3IgdGhlICNHc3RRdWVyeSBwb2ludGVkIHRvIGJ5IEBvbGRfcXVlcnkgbWF5IGJlIE5VTEwuCisgKi8KKyNkZWZpbmUgICAgICAgICBnc3RfcXVlcnlfcmVwbGFjZShvbGRfcXVlcnksbmV3X3F1ZXJ5KSBcCisgICAgZ3N0X21pbmlfb2JqZWN0X3JlcGxhY2UgKChHc3RNaW5pT2JqZWN0ICoqKShvbGRfcXVlcnkpLCBHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAobmV3X3F1ZXJ5KSkKKworCisvKiBhcHBsaWNhdGlvbiBzcGVjaWZpYyBxdWVyeSAqLworR3N0UXVlcnkgKiAgICAgIGdzdF9xdWVyeV9uZXdfY3VzdG9tICAgICAgICAgICAgKEdzdFF1ZXJ5VHlwZSB0eXBlLCBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSk7Citjb25zdCBHc3RTdHJ1Y3R1cmUgKgorICAgICAgICAgICAgICAgIGdzdF9xdWVyeV9nZXRfc3RydWN0dXJlICAgICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSk7CitHc3RTdHJ1Y3R1cmUgKiAgZ3N0X3F1ZXJ5X3dyaXRhYmxlX3N0cnVjdHVyZSAgICAoR3N0UXVlcnkgKnF1ZXJ5KTsKKworLyogcG9zaXRpb24gcXVlcnkgKi8KK0dzdFF1ZXJ5KiAgICAgICBnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uICAgICAgICAgIChHc3RGb3JtYXQgZm9ybWF0KTsKK3ZvaWQgICAgICAgICAgICBnc3RfcXVlcnlfc2V0X3Bvc2l0aW9uICAgICAgICAgIChHc3RRdWVyeSAqcXVlcnksIEdzdEZvcm1hdCBmb3JtYXQsIGdpbnQ2NCBjdXIpOwordm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbiAgICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSwgR3N0Rm9ybWF0ICpmb3JtYXQsIGdpbnQ2NCAqY3VyKTsKKworLyogZHVyYXRpb24gcXVlcnkgKi8KK0dzdFF1ZXJ5KiAgICAgICBnc3RfcXVlcnlfbmV3X2R1cmF0aW9uICAgICAgICAgIChHc3RGb3JtYXQgZm9ybWF0KTsKK3ZvaWQgICAgICAgICAgICBnc3RfcXVlcnlfc2V0X2R1cmF0aW9uICAgICAgICAgIChHc3RRdWVyeSAqcXVlcnksIEdzdEZvcm1hdCBmb3JtYXQsIGdpbnQ2NCBkdXJhdGlvbik7Cit2b2lkICAgICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uICAgICAgICAoR3N0UXVlcnkgKnF1ZXJ5LCBHc3RGb3JtYXQgKmZvcm1hdCwgZ2ludDY0ICpkdXJhdGlvbik7CisKKy8qIGxhdGVuY3kgcXVlcnkgKi8KK0dzdFF1ZXJ5KiAgICAgICBnc3RfcXVlcnlfbmV3X2xhdGVuY3kgICAgICAgICAgICh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBnc3RfcXVlcnlfc2V0X2xhdGVuY3kgICAgICAgICAgIChHc3RRdWVyeSAqcXVlcnksIGdib29sZWFuIGxpdmUsIEdzdENsb2NrVGltZSBtaW5fbGF0ZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgbWF4X2xhdGVuY3kpOwordm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9sYXRlbmN5ICAgICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSwgZ2Jvb2xlYW4gKmxpdmUsIEdzdENsb2NrVGltZSAqbWluX2xhdGVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lICptYXhfbGF0ZW5jeSk7CisKKy8qIGNvbnZlcnQgcXVlcnkgKi8KK0dzdFF1ZXJ5KiAgICAgICBnc3RfcXVlcnlfbmV3X2NvbnZlcnQgICAgICAgICAgIChHc3RGb3JtYXQgc3JjX2Zvcm1hdCwgZ2ludDY0IHZhbHVlLCBHc3RGb3JtYXQgZGVzdF9mb3JtYXQpOwordm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfY29udmVydCAgICAgICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSwgR3N0Rm9ybWF0IHNyY19mb3JtYXQsIGdpbnQ2NCBzcmNfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Rm9ybWF0IGRlc3RfZm9ybWF0LCBnaW50NjQgZGVzdF92YWx1ZSk7Cit2b2lkICAgICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2NvbnZlcnQgICAgICAgICAoR3N0UXVlcnkgKnF1ZXJ5LCBHc3RGb3JtYXQgKnNyY19mb3JtYXQsIGdpbnQ2NCAqc3JjX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEZvcm1hdCAqZGVzdF9mb3JtYXQsIGdpbnQ2NCAqZGVzdF92YWx1ZSk7CisvKiBzZWdtZW50IHF1ZXJ5ICovCitHc3RRdWVyeSogICAgICAgZ3N0X3F1ZXJ5X25ld19zZWdtZW50ICAgICAgICAgICAoR3N0Rm9ybWF0IGZvcm1hdCk7Cit2b2lkICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9zZWdtZW50ICAgICAgICAgICAoR3N0UXVlcnkgKnF1ZXJ5LCBnZG91YmxlIHJhdGUsIEdzdEZvcm1hdCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0IHN0YXJ0X3ZhbHVlLCBnaW50NjQgc3RvcF92YWx1ZSk7Cit2b2lkICAgICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3NlZ21lbnQgICAgICAgICAoR3N0UXVlcnkgKnF1ZXJ5LCBnZG91YmxlICpyYXRlLCBHc3RGb3JtYXQgKmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50NjQgKnN0YXJ0X3ZhbHVlLCBnaW50NjQgKnN0b3BfdmFsdWUpOworCisvKiBzZWVraW5nIHF1ZXJ5ICovCitHc3RRdWVyeSogICAgICAgZ3N0X3F1ZXJ5X25ld19zZWVraW5nICAgICAgICAgICAoR3N0Rm9ybWF0IGZvcm1hdCk7Cit2b2lkICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9zZWVraW5nICAgICAgICAgICAoR3N0UXVlcnkgKnF1ZXJ5LCBHc3RGb3JtYXQgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuIHNlZWthYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQ2NCBzZWdtZW50X3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQ2NCBzZWdtZW50X2VuZCk7Cit2b2lkICAgICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmcgICAgICAgICAoR3N0UXVlcnkgKnF1ZXJ5LCBHc3RGb3JtYXQgKmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAqc2Vla2FibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0ICpzZWdtZW50X3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQ2NCAqc2VnbWVudF9lbmQpOworLyogZm9ybWF0cyBxdWVyeSAqLworR3N0UXVlcnkqICAgICAgIGdzdF9xdWVyeV9uZXdfZm9ybWF0cyAgICAgICAgICAgKHZvaWQpOwordm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfZm9ybWF0cyAgICAgICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSwgZ2ludCBuX2Zvcm1hdHMsIC4uLik7Cit2b2lkICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9mb3JtYXRzdiAgICAgICAgICAoR3N0UXVlcnkgKnF1ZXJ5LCBnaW50IG5fZm9ybWF0cywgY29uc3QgR3N0Rm9ybWF0ICpmb3JtYXRzKTsKK3ZvaWQgICAgICAgICAgICBnc3RfcXVlcnlfcGFyc2Vfbl9mb3JtYXRzICAgICAgIChHc3RRdWVyeSAqcXVlcnksIGd1aW50ICpuX2Zvcm1hdHMpOwordm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9udGhfZm9ybWF0ICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSwgZ3VpbnQgbnRoLCBHc3RGb3JtYXQgKmZvcm1hdCk7CisKKy8qIGJ1ZmZlcmluZyBxdWVyeSAqLworR3N0UXVlcnkqICAgICAgIGdzdF9xdWVyeV9uZXdfYnVmZmVyaW5nICAgICAgICAgICAoR3N0Rm9ybWF0IGZvcm1hdCk7Cit2b2lkICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfcGVyY2VudCAgIChHc3RRdWVyeSAqcXVlcnksIGdib29sZWFuIGJ1c3ksIGdpbnQgcGVyY2VudCk7Cit2b2lkICAgICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19wZXJjZW50IChHc3RRdWVyeSAqcXVlcnksIGdib29sZWFuICpidXN5LCBnaW50ICpwZXJjZW50KTsKKwordm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3N0YXRzICAgICAoR3N0UXVlcnkgKnF1ZXJ5LCBHc3RCdWZmZXJpbmdNb2RlIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IGF2Z19pbiwgZ2ludCBhdmdfb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0IGJ1ZmZlcmluZ19sZWZ0KTsKK3ZvaWQgICAgICAgICAgICBnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3N0YXRzICAgIChHc3RRdWVyeSAqcXVlcnksIEdzdEJ1ZmZlcmluZ01vZGUgKm1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICphdmdfaW4sIGdpbnQgKmF2Z19vdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50NjQgKmJ1ZmZlcmluZ19sZWZ0KTsKKwordm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3JhbmdlICAgICAoR3N0UXVlcnkgKnF1ZXJ5LCBHc3RGb3JtYXQgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0IHN0YXJ0LCBnaW50NjQgc3RvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQ2NCBlc3RpbWF0ZWRfdG90YWwpOwordm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcmFuZ2UgICAoR3N0UXVlcnkgKnF1ZXJ5LCBHc3RGb3JtYXQgKmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQ2NCAqc3RhcnQsIGdpbnQ2NCAqc3RvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQ2NCAqZXN0aW1hdGVkX3RvdGFsKTsKKworZ2Jvb2xlYW4gICAgICAgIGdzdF9xdWVyeV9hZGRfYnVmZmVyaW5nX3JhbmdlICAgICAgIChHc3RRdWVyeSAqcXVlcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQ2NCBzdGFydCwgZ2ludDY0IHN0b3ApOworZ3VpbnQgICAgICAgICAgIGdzdF9xdWVyeV9nZXRfbl9idWZmZXJpbmdfcmFuZ2VzICAgIChHc3RRdWVyeSAqcXVlcnkpOworZ2Jvb2xlYW4gICAgICAgIGdzdF9xdWVyeV9wYXJzZV9udGhfYnVmZmVyaW5nX3JhbmdlIChHc3RRdWVyeSAqcXVlcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IGluZGV4LCBnaW50NjQgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50NjQgKnN0b3ApOworCisvKiBVUkkgcXVlcnkgKi8KK0dzdFF1ZXJ5ICogICAgICBnc3RfcXVlcnlfbmV3X3VyaSAgICAgICAgICAgICAgICAgKHZvaWQpOwordm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV91cmkgICAgICAgICAgICAgICAoR3N0UXVlcnkgKnF1ZXJ5LCBnY2hhciAqKnVyaSk7Cit2b2lkICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF91cmkgICAgICAgICAgICAgICAgIChHc3RRdWVyeSAqcXVlcnksIGNvbnN0IGdjaGFyICp1cmkpOworCisvKiBhbGxvY2F0aW9uIHF1ZXJ5ICovCitHc3RRdWVyeSAqICAgICAgZ3N0X3F1ZXJ5X25ld19hbGxvY2F0aW9uICAgICAgICAgIChHc3RDYXBzICpjYXBzLCBnYm9vbGVhbiBuZWVkX3Bvb2wpOwordm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9hbGxvY2F0aW9uICAgICAgICAoR3N0UXVlcnkgKnF1ZXJ5LCBHc3RDYXBzICoqY2FwcywgZ2Jvb2xlYW4gKm5lZWRfcG9vbCk7CisKK3ZvaWQgICAgICAgICAgICBnc3RfcXVlcnlfc2V0X2FsbG9jYXRpb25fcGFyYW1zICAgKEdzdFF1ZXJ5ICpxdWVyeSwgZ3VpbnQgc2l6ZSwgZ3VpbnQgbWluX2J1ZmZlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBtYXhfYnVmZmVycywgZ3VpbnQgcHJlZml4LCBndWludCBhbGlnbm1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCdWZmZXJQb29sICpwb29sKTsKK3ZvaWQgICAgICAgICAgICBnc3RfcXVlcnlfcGFyc2VfYWxsb2NhdGlvbl9wYXJhbXMgKEdzdFF1ZXJ5ICpxdWVyeSwgZ3VpbnQgKnNpemUsIGd1aW50ICptaW5fYnVmZmVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICptYXhfYnVmZmVycywgZ3VpbnQgKnByZWZpeCwgZ3VpbnQgKmFsaWdubWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEJ1ZmZlclBvb2wgKipwb29sKTsKKwordm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9tZXRhICAgICAgIChHc3RRdWVyeSAqcXVlcnksIGNvbnN0IGdjaGFyICphcGkpOworZ3VpbnQgICAgICAgICAgIGdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX21ldGFzICAgIChHc3RRdWVyeSAqcXVlcnkpOworY29uc3QgZ2NoYXIgKiAgIGdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9tZXRhIChHc3RRdWVyeSAqcXVlcnksIGd1aW50IGluZGV4KTsKK2dib29sZWFuICAgICAgICBnc3RfcXVlcnlfaGFzX2FsbG9jYXRpb25fbWV0YSAgICAgICAoR3N0UXVlcnkgKnF1ZXJ5LCBjb25zdCBnY2hhciAqYXBpKTsKKwordm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9tZW1vcnkgICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSwgY29uc3QgZ2NoYXIgKmFsbG9jKTsKK2d1aW50ICAgICAgICAgICBnc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9tZW1vcmllcyAgIChHc3RRdWVyeSAqcXVlcnkpOworY29uc3QgZ2NoYXIgKiAgIGdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9tZW1vcnkgKEdzdFF1ZXJ5ICpxdWVyeSwgZ3VpbnQgaW5kZXgpOworCisvKiBzY2hlZHVsaW5nIHF1ZXJ5ICovCitHc3RRdWVyeSAqICAgICAgZ3N0X3F1ZXJ5X25ld19zY2hlZHVsaW5nICAgICAgICAgICh2b2lkKTsKKwordm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfc2NoZWR1bGluZyAgICAgICAgICAoR3N0UXVlcnkgKnF1ZXJ5LCBnYm9vbGVhbiBwdWxsX21vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiByYW5kb21fYWNjZXNzLCBnYm9vbGVhbiBzZXF1ZW50aWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBtaW5zaXplLCBnaW50IG1heHNpemUsIGdpbnQgYWxpZ24pOwordm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9zY2hlZHVsaW5nICAgICAgICAoR3N0UXVlcnkgKnF1ZXJ5LCBnYm9vbGVhbiAqcHVsbF9tb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gKnJhbmRvbV9hY2Nlc3MsIGdib29sZWFuICpzZXF1ZW50aWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAqbWluc2l6ZSwgZ2ludCAqbWF4c2l6ZSwgZ2ludCAqYWxpZ24pOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HU1RfUVVFUllfSF9fICovCisKZGlmZiAtLWdpdCBhL2dzdC9nc3RyZWdpc3RyeS5jIGIvZ3N0L2dzdHJlZ2lzdHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ1MDY4ZQotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RyZWdpc3RyeS5jCkBAIC0wLDAgKzEsMTc0NSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgorICogICAgICAgICAgICAgICAgICAgIDIwMDUgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisgKgorICogZ3N0cmVnaXN0cnkuYzogaGFuZGxlIHJlZ2lzdHJ5CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoqCisgKiBTRUNUSU9OOmdzdHJlZ2lzdHJ5CisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIG1hbmFnZW1lbnQgb2YgI0dzdFBsdWdpbiBvYmplY3RzCisgKiBAc2VlX2Fsc286ICNHc3RQbHVnaW4sICNHc3RQbHVnaW5GZWF0dXJlCisgKgorICogT25lIHJlZ2lzdHJ5IGhvbGRzIHRoZSBtZXRhZGF0YSBvZiBhIHNldCBvZiBwbHVnaW5zLgorICoKKyAqIDxlbXBoYXNpcyByb2xlPSJib2xkIj5EZXNpZ246PC9lbXBoYXNpcz4KKyAqCisgKiBUaGUgI0dzdFJlZ2lzdHJ5IG9iamVjdCBpcyBhIGxpc3Qgb2YgcGx1Z2lucyBhbmQgc29tZSBmdW5jdGlvbnMgZm9yIGRlYWxpbmcKKyAqIHdpdGggdGhlbS4gRWFjaCAjR3N0UGx1Z2luIGlzIG1hdGNoZWQgMS0xIHdpdGggYSBmaWxlIG9uIGRpc2ssIGFuZCBtYXkgb3IgbWF5CisgKiBub3QgYmUgbG9hZGVkIGF0IGEgZ2l2ZW4gdGltZS4gVGhlcmUgbWF5IGJlIG11bHRpcGxlICNHc3RSZWdpc3RyeSBvYmplY3RzLAorICogYnV0IHRoZSAiZGVmYXVsdCByZWdpc3RyeSIgaXMgdGhlIG9ubHkgb2JqZWN0IHRoYXQgaGFzIGFueSBtZWFuaW5nIHRvIHRoZQorICogY29yZS4KKyAqCisgKiBUaGUgcmVnaXN0cnkgZmlsZSBpcyBhY3R1YWxseSBhIGNhY2hlIG9mIHBsdWdpbiBpbmZvcm1hdGlvbi4gVGhpcyBpcworICogdW5saWtlIHZlcnNpb25zIHByaW9yIHRvIDAuMTAsIHdoZXJlIHRoZSByZWdpc3RyeSBmaWxlIHdhcyB0aGUgcHJpbWFyeSBzb3VyY2UKKyAqIG9mIHBsdWdpbiBpbmZvcm1hdGlvbiwgYW5kIHdhcyBjcmVhdGVkIGJ5IHRoZSBnc3QtcmVnaXN0ZXIgY29tbWFuZC4KKyAqCisgKiBUaGUgcHJpbWFyeSBzb3VyY2UsIGF0IGFsbCB0aW1lcywgb2YgcGx1Z2luIGluZm9ybWF0aW9uIGlzIGVhY2ggcGx1Z2luIGZpbGUKKyAqIGl0c2VsZi4gVGh1cywgaWYgYW4gYXBwbGljYXRpb24gd2FudHMgaW5mb3JtYXRpb24gYWJvdXQgYSBwYXJ0aWN1bGFyIHBsdWdpbiwKKyAqIG9yIHdhbnRzIHRvIHNlYXJjaCBmb3IgYSBmZWF0dXJlIHRoYXQgc2F0aXNmaWVzIGdpdmVuIGNyaXRlcmlhLCB0aGUgcHJpbWFyeQorICogbWVhbnMgb2YgZG9pbmcgc28gaXMgdG8gbG9hZCBldmVyeSBwbHVnaW4gYW5kIGxvb2sgYXQgdGhlIHJlc3VsdGluZworICogaW5mb3JtYXRpb24gdGhhdCBpcyBnYXRoZXJlZCBpbiB0aGUgZGVmYXVsdCByZWdpc3RyeS4gQ2xlYXJseSwgdGhpcyBpcyBhIHRpbWUKKyAqIGNvbnN1bWluZyBwcm9jZXNzLCBzbyB3ZSBjYWNoZSBpbmZvcm1hdGlvbiBpbiB0aGUgcmVnaXN0cnkgZmlsZS4gVGhlIGZvcm1hdAorICogYW5kIGxvY2F0aW9uIG9mIHRoZSBjYWNoZSBmaWxlIGlzIGludGVybmFsIHRvIGdzdHJlYW1lci4KKyAqCisgKiBPbiBzdGFydHVwLCBwbHVnaW5zIGFyZSBzZWFyY2hlZCBmb3IgaW4gdGhlIHBsdWdpbiBzZWFyY2ggcGF0aC4gVGhlIGZvbGxvd2luZworICogbG9jYXRpb25zIGFyZSBjaGVja2VkIGluIHRoaXMgb3JkZXI6CisgKiA8aXRlbWl6ZWRsaXN0PgorICogICA8bGlzdGl0ZW0+CisgKiAgICAgPHBhcmE+bG9jYXRpb24gZnJvbSAtLWdzdC1wbHVnaW4tcGF0aCBjb21tYW5kbGluZSBvcHRpb24uPC9wYXJhPgorICogICA8L2xpc3RpdGVtPgorICogICA8bGlzdGl0ZW0+CisgKiAgICAgPHBhcmE+dGhlIEdTVF9QTFVHSU5fUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZS48L3BhcmE+CisgKiAgIDwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT4KKyAqICAgICA8cGFyYT50aGUgR1NUX1BMVUdJTl9TWVNURU1fUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZS48L3BhcmE+CisgKiAgIDwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT4KKyAqICAgICA8cGFyYT5kZWZhdWx0IGxvY2F0aW9ucyAoaWYgR1NUX1BMVUdJTl9TWVNURU1fUEFUSCBpcyBub3Qgc2V0KS4gVGhvc2UKKyAqICAgICAgIGRlZmF1bHQgbG9jYXRpb25zIGFyZToKKyAqICAgICAgIDxmaWxlbmFtZT5+Ly5nc3RyZWFtZXItJEdTVF9NQUpPUk1JTk9SL3BsdWdpbnMvPC9maWxlbmFtZT4KKyAqICAgICAgIGFuZCA8ZmlsZW5hbWU+JHByZWZpeC9saWJzL2dzdHJlYW1lci0kR1NUX01BSk9STUlOT1IvPC9maWxlbmFtZT4uCisgKiAgICAgPC9wYXJhPgorICogICA8L2xpc3RpdGVtPgorICogPC9pdGVtaXplZGxpc3Q+CisgKiBUaGUgcmVnaXN0cnkgY2FjaGUgZmlsZSBpcyBsb2FkZWQgZnJvbQorICogPGZpbGVuYW1lPn4vLmdzdHJlYW1lci0kR1NUX01BSk9STUlOT1IvcmVnaXN0cnktJEFSQ0guYmluPC9maWxlbmFtZT4gb3IgdGhlCisgKiBmaWxlIGxpc3RlZCBpbiB0aGUgR1NUX1JFR0lTVFJZIGVudiB2YXIuIE9uZSByZWFzb24gdG8gY2hhbmdlIHRoZSByZWdpc3RyeQorICogbG9jYXRpb24gaXMgZm9yIHRlc3RpbmcuCisgKgorICogRm9yIGVhY2ggcGx1Z2luIHRoYXQgaXMgZm91bmQgaW4gdGhlIHBsdWdpbiBzZWFyY2ggcGF0aCwgdGhlcmUgY291bGQgYmUgMworICogcG9zc2liaWxpdGllcyBmb3IgY2FjaGVkIGluZm9ybWF0aW9uOgorICogPGl0ZW1pemVkbGlzdD4KKyAqICAgPGxpc3RpdGVtPgorICogICAgIDxwYXJhPnRoZSBjYWNoZSBtYXkgbm90IGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgYSBnaXZlbiBmaWxlLjwvcGFyYT4KKyAqICAgPC9saXN0aXRlbT4KKyAqICAgPGxpc3RpdGVtPgorICogICAgIDxwYXJhPnRoZSBjYWNoZSBtYXkgaGF2ZSBzdGFsZSBpbmZvcm1hdGlvbi48L3BhcmE+CisgKiAgIDwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT4KKyAqICAgICA8cGFyYT50aGUgY2FjaGUgbWF5IGhhdmUgY3VycmVudCBpbmZvcm1hdGlvbi48L3BhcmE+CisgKiAgIDwvbGlzdGl0ZW0+CisgKiA8L2l0ZW1pemVkbGlzdD4KKyAqCisgKiBJbiB0aGUgZmlyc3QgdHdvIGNhc2VzLCB0aGUgcGx1Z2luIGlzIGxvYWRlZCBhbmQgdGhlIGNhY2hlIHVwZGF0ZWQuIEluCisgKiBhZGRpdGlvbiB0byB0aGVzZSBjYXNlcywgdGhlIGNhY2hlIG1heSBoYXZlIGVudHJpZXMgZm9yIHBsdWdpbnMgdGhhdCBhcmUgbm90CisgKiByZWxldmFudCB0byB0aGUgY3VycmVudCBwcm9jZXNzLiBUaGVzZSBhcmUgbWFya2VkIGFzIG5vdCBhdmFpbGFibGUgdG8gdGhlCisgKiBjdXJyZW50IHByb2Nlc3MuIElmIHRoZSBjYWNoZSBpcyB1cGRhdGVkIGZvciB3aGF0ZXZlciByZWFzb24sIGl0IGlzIG1hcmtlZAorICogZGlydHkuCisgKgorICogQSBkaXJ0eSBjYWNoZSBpcyB3cml0dGVuIG91dCBhdCB0aGUgZW5kIG9mIGluaXRpYWxpemF0aW9uLiBFYWNoIGVudHJ5IGlzCisgKiBjaGVja2VkIHRvIG1ha2Ugc3VyZSB0aGUgaW5mb3JtYXRpb24gaXMgbWluaW1hbGx5IHZhbGlkLiBJZiBub3QsIHRoZSBlbnRyeSBpcworICogc2ltcGx5IGRyb3BwZWQuCisgKgorICogPGVtcGhhc2lzIHJvbGU9ImJvbGQiPkltcGxlbWVudGF0aW9uIG5vdGVzOjwvZW1waGFzaXM+CisgKgorICogVGhlICJjYWNoZSIgYW5kICJkZWZhdWx0IHJlZ2lzdHJ5IiBhcmUgZGlmZmVyZW50IGNvbmNlcHRzIGFuZCBjYW4gcmVwcmVzZW50CisgKiBkaWZmZXJlbnQgc2V0cyBvZiBwbHVnaW5zLiBGb3IgdmFyaW91cyByZWFzb25zLCBhdCBpbml0IHRpbWUsIHRoZSBjYWNoZSBpcworICogc3RvcmVkIGluIHRoZSBkZWZhdWx0IHJlZ2lzdHJ5LCBhbmQgcGx1Z2lucyBub3QgcmVsZXZhbnQgdG8gdGhlIGN1cnJlbnQKKyAqIHByb2Nlc3MgYXJlIG1hcmtlZCB3aXRoIHRoZSAlR1NUX1BMVUdJTl9GTEFHX0NBQ0hFRCBiaXQuIFRoZXNlIHBsdWdpbnMgYXJlCisgKiByZW1vdmVkIGF0IHRoZSBlbmQgb2YgaW5pdGlhbGl6YXRpb24uCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorI2luY2x1ZGUgImdzdGNvbmZpZy5oIgorI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKiBGb3IgZ19zdGF0ICgpICovCisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KKworI2luY2x1ZGUgImdzdGluZm8uaCIKKyNpbmNsdWRlICJnc3RlcnJvci5oIgorI2luY2x1ZGUgImdzdHJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiZ3N0bWFyc2hhbC5oIgorI2luY2x1ZGUgImdzdGZpbHRlci5oIgorCisjaW5jbHVkZSAiZ3N0cGx1Z2lubG9hZGVyLmgiCisKKyNpbmNsdWRlICJnc3QtaTE4bi1saWIuaCIKKworI2luY2x1ZGUgImdzdC5oIgorI2luY2x1ZGUgImdsaWItY29tcGF0LXByaXZhdGUuaCIKKworI2lmZGVmIEdfT1NfV0lOMzIKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CitleHRlcm4gSE1PRFVMRSBfcHJpdl9nc3RfZGxsX2hhbmRsZTsKKyNlbmRpZgorCisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBHU1RfQ0FUX1JFR0lTVFJZCisKK3N0cnVjdCBfR3N0UmVnaXN0cnlQcml2YXRlCit7CisgIC8qIHVwZGF0ZWQgd2hlbmV2ZXIgdGhlIGZlYXR1cmUgbGlzdCBjaGFuZ2VzICovCisgIGd1aW50MzIgY29va2llOworICAvKiBzcGVlZHVwIGZvciBzZWFyY2hpbmcgZmVhdHVyZXMgKi8KKyAgR0xpc3QgKmVsZW1lbnRfZmFjdG9yeV9saXN0OworICBndWludDMyIGVmbF9jb29raWU7CisgIEdMaXN0ICp0eXBlZmluZF9mYWN0b3J5X2xpc3Q7CisgIGd1aW50MzIgdGZsX2Nvb2tpZTsKK307CisKKy8qIHRoZSBvbmUgaW5zdGFuY2Ugb2YgdGhlIGRlZmF1bHQgcmVnaXN0cnkgYW5kIHRoZSBtdXRleCBwcm90ZWN0aW5nIHRoZQorICogdmFyaWFibGUuICovCitzdGF0aWMgR1N0YXRpY011dGV4IF9nc3RfcmVnaXN0cnlfbXV0ZXggPSBHX1NUQVRJQ19NVVRFWF9JTklUOworc3RhdGljIEdzdFJlZ2lzdHJ5ICpfZ3N0X3JlZ2lzdHJ5X2RlZmF1bHQgPSBOVUxMOworCisvKiBkZWZhdWx0cyAqLworI2RlZmluZSBERUZBVUxUX0ZPUksgVFJVRQorCisvKiBjb250cm9sIHRoZSBiZWhhdmlvdXIgb2YgcmVnaXN0cnkgcmVidWlsZCAqLworc3RhdGljIGdib29sZWFuIF9nc3RfZW5hYmxlX3JlZ2lzdHJ5X2ZvcmsgPSBERUZBVUxUX0ZPUks7CisvKiBMaXN0IG9mIHBsdWdpbnMgdGhhdCBuZWVkIHByZWxvYWRpbmcvcmVsb2FkaW5nIGFmdGVyIHNjYW5uaW5nIHJlZ2lzdHJ5ICovCitleHRlcm4gR1NMaXN0ICpfcHJpdl9nc3RfcHJlbG9hZF9wbHVnaW5zOworCisjaWZuZGVmIEdTVF9ESVNBQkxFX1JFR0lTVFJZCisvKnNldCB0byBUUlVFIHdoZW4gcmVnaXN0cnkgbmVlZG4ndCB0byBiZSB1cGRhdGVkICovCitnYm9vbGVhbiBfcHJpdl9nc3RfZGlzYWJsZV9yZWdpc3RyeV91cGRhdGUgPSBGQUxTRTsKK2V4dGVybiBHTGlzdCAqX3ByaXZfZ3N0X3BsdWdpbl9wYXRoczsKKworLyogU2V0IHRvIFRSVUUgd2hlbiB0aGUgcmVnaXN0cnkgY2FjaGUgc2hvdWxkIGJlIGRpc2FibGVkICovCitnYm9vbGVhbiBfZ3N0X2Rpc2FibGVfcmVnaXN0cnlfY2FjaGUgPSBGQUxTRTsKKyNlbmRpZgorCisvKiBFbGVtZW50IHNpZ25hbHMgYW5kIGFyZ3MgKi8KK2VudW0KK3sKKyAgUExVR0lOX0FEREVELAorICBGRUFUVVJFX0FEREVELAorICBMQVNUX1NJR05BTAorfTsKKworc3RhdGljIHZvaWQgZ3N0X3JlZ2lzdHJ5X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKKworc3RhdGljIGd1aW50IGdzdF9yZWdpc3RyeV9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OworCitzdGF0aWMgR3N0UGx1Z2luRmVhdHVyZSAqZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9mZWF0dXJlX2xvY2tlZCAoR3N0UmVnaXN0cnkgKgorICAgIHJlZ2lzdHJ5LCBjb25zdCBjaGFyICpuYW1lKTsKK3N0YXRpYyBHc3RQbHVnaW4gKmdzdF9yZWdpc3RyeV9sb29rdXBfYm5fbG9ja2VkIChHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5LAorICAgIGNvbnN0IGNoYXIgKmJhc2VuYW1lKTsKKworR19ERUZJTkVfVFlQRSAoR3N0UmVnaXN0cnksIGdzdF9yZWdpc3RyeSwgR1NUX1RZUEVfT0JKRUNUKTsKK3N0YXRpYyBHc3RPYmplY3RDbGFzcyAqcGFyZW50X2NsYXNzID0gTlVMTDsKKworc3RhdGljIHZvaWQKK2dzdF9yZWdpc3RyeV9jbGFzc19pbml0IChHc3RSZWdpc3RyeUNsYXNzICoga2xhc3MpCit7CisgIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKKworICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKKworICBwYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQgKGtsYXNzKTsKKyAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChrbGFzcywgc2l6ZW9mIChHc3RSZWdpc3RyeVByaXZhdGUpKTsKKworICAvKioKKyAgICogR3N0UmVnaXN0cnk6OnBsdWdpbi1hZGRlZDoKKyAgICogQHJlZ2lzdHJ5OiB0aGUgcmVnaXN0cnkgdGhhdCBlbWl0dGVkIHRoZSBzaWduYWwKKyAgICogQHBsdWdpbjogdGhlIHBsdWdpbiB0aGF0IGhhcyBiZWVuIGFkZGVkCisgICAqCisgICAqIFNpZ25hbHMgdGhhdCBhIHBsdWdpbiBoYXMgYmVlbiBhZGRlZCB0byB0aGUgcmVnaXN0cnkgKHBvc3NpYmx5CisgICAqIHJlcGxhY2luZyBhIHByZXZpb3VzbHktYWRkZWQgb25lIGJ5IHRoZSBzYW1lIG5hbWUpCisgICAqLworICBnc3RfcmVnaXN0cnlfc2lnbmFsc1tQTFVHSU5fQURERURdID0KKyAgICAgIGdfc2lnbmFsX25ldyAoInBsdWdpbi1hZGRlZCIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCisgICAgICBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChHc3RSZWdpc3RyeUNsYXNzLCBwbHVnaW5fYWRkZWQpLCBOVUxMLAorICAgICAgTlVMTCwgZ3N0X21hcnNoYWxfVk9JRF9fUE9JTlRFUiwgR19UWVBFX05PTkUsIDEsIEdfVFlQRV9QT0lOVEVSKTsKKworICAvKioKKyAgICogR3N0UmVnaXN0cnk6OmZlYXR1cmUtYWRkZWQ6CisgICAqIEByZWdpc3RyeTogdGhlIHJlZ2lzdHJ5IHRoYXQgZW1pdHRlZCB0aGUgc2lnbmFsCisgICAqIEBmZWF0dXJlOiB0aGUgZmVhdHVyZSB0aGF0IGhhcyBiZWVuIGFkZGVkCisgICAqCisgICAqIFNpZ25hbHMgdGhhdCBhIGZlYXR1cmUgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIHJlZ2lzdHJ5IChwb3NzaWJseQorICAgKiByZXBsYWNpbmcgYSBwcmV2aW91c2x5LWFkZGVkIG9uZSBieSB0aGUgc2FtZSBuYW1lKQorICAgKi8KKyAgZ3N0X3JlZ2lzdHJ5X3NpZ25hbHNbRkVBVFVSRV9BRERFRF0gPQorICAgICAgZ19zaWduYWxfbmV3ICgiZmVhdHVyZS1hZGRlZCIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCisgICAgICBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChHc3RSZWdpc3RyeUNsYXNzLCBmZWF0dXJlX2FkZGVkKSwKKyAgICAgIE5VTEwsIE5VTEwsIGdzdF9tYXJzaGFsX1ZPSURfX1BPSU5URVIsIEdfVFlQRV9OT05FLCAxLCBHX1RZUEVfUE9JTlRFUik7CisKKyAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfcmVnaXN0cnlfZmluYWxpemU7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfcmVnaXN0cnlfaW5pdCAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSkKK3sKKyAgcmVnaXN0cnktPmZlYXR1cmVfaGFzaCA9IGdfaGFzaF90YWJsZV9uZXcgKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsKTsKKyAgcmVnaXN0cnktPmJhc2VuYW1lX2hhc2ggPSBnX2hhc2hfdGFibGVfbmV3IChnX3N0cl9oYXNoLCBnX3N0cl9lcXVhbCk7CisgIHJlZ2lzdHJ5LT5wcml2ID0KKyAgICAgIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAocmVnaXN0cnksIEdTVF9UWVBFX1JFR0lTVFJZLAorICAgICAgR3N0UmVnaXN0cnlQcml2YXRlKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9yZWdpc3RyeV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKK3sKKyAgR3N0UmVnaXN0cnkgKnJlZ2lzdHJ5ID0gR1NUX1JFR0lTVFJZIChvYmplY3QpOworICBHTGlzdCAqcGx1Z2lucywgKnA7CisgIEdMaXN0ICpmZWF0dXJlcywgKmY7CisKKyAgcGx1Z2lucyA9IHJlZ2lzdHJ5LT5wbHVnaW5zOworICByZWdpc3RyeS0+cGx1Z2lucyA9IE5VTEw7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocmVnaXN0cnksICJyZWdpc3RyeSBmaW5hbGl6ZSIpOworICBwID0gcGx1Z2luczsKKyAgd2hpbGUgKHApIHsKKyAgICBHc3RQbHVnaW4gKnBsdWdpbiA9IHAtPmRhdGE7CisKKyAgICBpZiAocGx1Z2luKSB7CisgICAgICBHU1RfTE9HX09CSkVDVCAocmVnaXN0cnksICJyZW1vdmluZyBwbHVnaW4gJXMiLAorICAgICAgICAgIGdzdF9wbHVnaW5fZ2V0X25hbWUgKHBsdWdpbikpOworICAgICAgZ3N0X29iamVjdF91bnJlZiAocGx1Z2luKTsKKyAgICB9CisgICAgcCA9IGdfbGlzdF9uZXh0IChwKTsKKyAgfQorICBnX2xpc3RfZnJlZSAocGx1Z2lucyk7CisKKyAgZmVhdHVyZXMgPSByZWdpc3RyeS0+ZmVhdHVyZXM7CisgIHJlZ2lzdHJ5LT5mZWF0dXJlcyA9IE5VTEw7CisKKyAgZiA9IGZlYXR1cmVzOworICB3aGlsZSAoZikgeworICAgIEdzdFBsdWdpbkZlYXR1cmUgKmZlYXR1cmUgPSBmLT5kYXRhOworCisgICAgaWYgKGZlYXR1cmUpIHsKKyAgICAgIEdTVF9MT0dfT0JKRUNUIChyZWdpc3RyeSwgInJlbW92aW5nIGZlYXR1cmUgJXAgKCVzKSIsCisgICAgICAgICAgZmVhdHVyZSwgZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9uYW1lIChmZWF0dXJlKSk7CisgICAgICBnc3Rfb2JqZWN0X3VucGFyZW50IChHU1RfT0JKRUNUX0NBU1QgKGZlYXR1cmUpKTsKKyAgICB9CisgICAgZiA9IGdfbGlzdF9uZXh0IChmKTsKKyAgfQorICBnX2xpc3RfZnJlZSAoZmVhdHVyZXMpOworCisgIGdfaGFzaF90YWJsZV9kZXN0cm95IChyZWdpc3RyeS0+ZmVhdHVyZV9oYXNoKTsKKyAgcmVnaXN0cnktPmZlYXR1cmVfaGFzaCA9IE5VTEw7CisgIGdfaGFzaF90YWJsZV9kZXN0cm95IChyZWdpc3RyeS0+YmFzZW5hbWVfaGFzaCk7CisgIHJlZ2lzdHJ5LT5iYXNlbmFtZV9oYXNoID0gTlVMTDsKKworICBpZiAocmVnaXN0cnktPnByaXYtPmVsZW1lbnRfZmFjdG9yeV9saXN0KSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocmVnaXN0cnksICJDbGVhbmluZyB1cCBjYWNoZWQgZWxlbWVudCBmYWN0b3J5IGxpc3QiKTsKKyAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlIChyZWdpc3RyeS0+cHJpdi0+ZWxlbWVudF9mYWN0b3J5X2xpc3QpOworICB9CisKKyAgaWYgKHJlZ2lzdHJ5LT5wcml2LT50eXBlZmluZF9mYWN0b3J5X2xpc3QpIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChyZWdpc3RyeSwgIkNsZWFuaW5nIHVwIGNhY2hlZCB0eXBlZmluZCBmYWN0b3J5IGxpc3QiKTsKKyAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlIChyZWdpc3RyeS0+cHJpdi0+dHlwZWZpbmRfZmFjdG9yeV9saXN0KTsKKyAgfQorCisgIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworLyoqCisgKiBnc3RfcmVnaXN0cnlfZ2V0X2RlZmF1bHQ6CisgKgorICogUmV0cmlldmVzIHRoZSBkZWZhdWx0IHJlZ2lzdHJ5LiBUaGUgY2FsbGVyIGRvZXMgbm90IG93biBhIHJlZmVyZW5jZSBvbiB0aGUKKyAqIHJlZ2lzdHJ5LCBhcyBpdCBpcyBhbGl2ZSBhcyBsb25nIGFzIEdTdHJlYW1lciBpcyBpbml0aWFsaXplZC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IFRoZSBkZWZhdWx0ICNHc3RSZWdpc3RyeS4KKyAqLworR3N0UmVnaXN0cnkgKgorZ3N0X3JlZ2lzdHJ5X2dldF9kZWZhdWx0ICh2b2lkKQoreworICBHc3RSZWdpc3RyeSAqcmVnaXN0cnk7CisKKyAgZ19zdGF0aWNfbXV0ZXhfbG9jayAoJl9nc3RfcmVnaXN0cnlfbXV0ZXgpOworICBpZiAoR19VTkxJS0VMWSAoIV9nc3RfcmVnaXN0cnlfZGVmYXVsdCkpIHsKKyAgICBfZ3N0X3JlZ2lzdHJ5X2RlZmF1bHQgPSBnX29iamVjdF9uZXd2IChHU1RfVFlQRV9SRUdJU1RSWSwgMCwgTlVMTCk7CisgICAgZ3N0X29iamVjdF9yZWZfc2luayAoR1NUX09CSkVDVF9DQVNUIChfZ3N0X3JlZ2lzdHJ5X2RlZmF1bHQpKTsKKyAgfQorICByZWdpc3RyeSA9IF9nc3RfcmVnaXN0cnlfZGVmYXVsdDsKKyAgZ19zdGF0aWNfbXV0ZXhfdW5sb2NrICgmX2dzdF9yZWdpc3RyeV9tdXRleCk7CisKKyAgcmV0dXJuIHJlZ2lzdHJ5OworfQorCisvKioKKyAqIGdzdF9yZWdpc3RyeV9hZGRfcGF0aDoKKyAqIEByZWdpc3RyeTogdGhlIHJlZ2lzdHJ5IHRvIGFkZCB0aGUgcGF0aCB0bworICogQHBhdGg6IHRoZSBwYXRoIHRvIGFkZCB0byB0aGUgcmVnaXN0cnkKKyAqCisgKiBBZGQgdGhlIGdpdmVuIHBhdGggdG8gdGhlIHJlZ2lzdHJ5LiBUaGUgc3ludGF4IG9mIHRoZQorICogcGF0aCBpcyBzcGVjaWZpYyB0byB0aGUgcmVnaXN0cnkuIElmIHRoZSBwYXRoIGhhcyBhbHJlYWR5IGJlZW4KKyAqIGFkZGVkLCBkbyBub3RoaW5nLgorICovCit2b2lkCitnc3RfcmVnaXN0cnlfYWRkX3BhdGggKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksIGNvbnN0IGdjaGFyICogcGF0aCkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1JFR0lTVFJZIChyZWdpc3RyeSkpOworICBnX3JldHVybl9pZl9mYWlsIChwYXRoICE9IE5VTEwpOworCisgIGlmIChzdHJsZW4gKHBhdGgpID09IDApCisgICAgZ290byBlbXB0eV9wYXRoOworCisgIEdTVF9PQkpFQ1RfTE9DSyAocmVnaXN0cnkpOworICBpZiAoZ19saXN0X2ZpbmRfY3VzdG9tIChyZWdpc3RyeS0+cGF0aHMsIHBhdGgsIChHQ29tcGFyZUZ1bmMpIHN0cmNtcCkpCisgICAgZ290byB3YXNfYWRkZWQ7CisKKyAgR1NUX0lORk8gKCJBZGRpbmcgcGx1Z2luIHBhdGg6IFwiJXNcIiIsIHBhdGgpOworICByZWdpc3RyeS0+cGF0aHMgPSBnX2xpc3RfYXBwZW5kIChyZWdpc3RyeS0+cGF0aHMsIGdfc3RyZHVwIChwYXRoKSk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChyZWdpc3RyeSk7CisKKyAgcmV0dXJuOworCitlbXB0eV9wYXRoOgorICB7CisgICAgR1NUX0lORk8gKCJJZ25vcmluZyBlbXB0eSBwbHVnaW4gcGF0aCIpOworICAgIHJldHVybjsKKyAgfQord2FzX2FkZGVkOgorICB7CisgICAgZ193YXJuaW5nICgicGF0aCAlcyBhbHJlYWR5IGFkZGVkIHRvIHJlZ2lzdHJ5IiwgcGF0aCk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHJlZ2lzdHJ5KTsKKyAgICByZXR1cm47CisgIH0KK30KKworLyoqCisgKiBnc3RfcmVnaXN0cnlfZ2V0X3BhdGhfbGlzdDoKKyAqIEByZWdpc3RyeTogdGhlIHJlZ2lzdHJ5IHRvIGdldCB0aGUgcGF0aGxpc3Qgb2YKKyAqCisgKiBHZXQgdGhlIGxpc3Qgb2YgcGF0aHMgZm9yIHRoZSBnaXZlbiByZWdpc3RyeS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgY29udGFpbmVyKSAoZWxlbWVudC10eXBlIGNoYXIqKTogQSAjR0xpc3Qgb2YgcGF0aHMgYXMKKyAqICAgICBzdHJpbmdzLiBnX2xpc3RfZnJlZSBhZnRlciB1c2UuCisgKgorICogTVQgc2FmZS4KKyAqLworR0xpc3QgKgorZ3N0X3JlZ2lzdHJ5X2dldF9wYXRoX2xpc3QgKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnkpCit7CisgIEdMaXN0ICpsaXN0OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUkVHSVNUUlkgKHJlZ2lzdHJ5KSwgTlVMTCk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChyZWdpc3RyeSk7CisgIC8qIFdlIGRvbid0IG5lZWQgdG8gY29weSB0aGUgc3RyaW5ncywgYmVjYXVzZSB0aGV5IHdvbid0IGJlIGRlbGV0ZWQKKyAgICogYXMgbG9uZyBhcyB0aGUgR3N0UmVnaXN0cnkgaXMgYXJvdW5kICovCisgIGxpc3QgPSBnX2xpc3RfY29weSAocmVnaXN0cnktPnBhdGhzKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHJlZ2lzdHJ5KTsKKworICByZXR1cm4gbGlzdDsKK30KKworCisvKioKKyAqIGdzdF9yZWdpc3RyeV9hZGRfcGx1Z2luOgorICogQHJlZ2lzdHJ5OiB0aGUgcmVnaXN0cnkgdG8gYWRkIHRoZSBwbHVnaW4gdG8KKyAqIEBwbHVnaW46ICh0cmFuc2ZlciBmdWxsKTogdGhlIHBsdWdpbiB0byBhZGQKKyAqCisgKiBBZGQgdGhlIHBsdWdpbiB0byB0aGUgcmVnaXN0cnkuIFRoZSBwbHVnaW4tYWRkZWQgc2lnbmFsIHdpbGwgYmUgZW1pdHRlZC4KKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzaW5rIEBwbHVnaW4uCisgKgorICogUmV0dXJuczogVFJVRSBvbiBzdWNjZXNzLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK2dib29sZWFuCitnc3RfcmVnaXN0cnlfYWRkX3BsdWdpbiAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwgR3N0UGx1Z2luICogcGx1Z2luKQoreworICBHc3RQbHVnaW4gKmV4aXN0aW5nX3BsdWdpbjsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1JFR0lTVFJZIChyZWdpc3RyeSksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QTFVHSU4gKHBsdWdpbiksIEZBTFNFKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHJlZ2lzdHJ5KTsKKyAgaWYgKEdfTElLRUxZIChwbHVnaW4tPmJhc2VuYW1lKSkgeworICAgIC8qIHdlIGhhdmUgYSBiYXNlbmFtZSwgc2VlIGlmIHdlIGZpbmQgdGhlIHBsdWdpbiAqLworICAgIGV4aXN0aW5nX3BsdWdpbiA9CisgICAgICAgIGdzdF9yZWdpc3RyeV9sb29rdXBfYm5fbG9ja2VkIChyZWdpc3RyeSwgcGx1Z2luLT5iYXNlbmFtZSk7CisgICAgaWYgKGV4aXN0aW5nX3BsdWdpbikgeworICAgICAgR1NUX0RFQlVHX09CSkVDVCAocmVnaXN0cnksCisgICAgICAgICAgIlJlcGxhY2luZyBleGlzdGluZyBwbHVnaW4gXCIlc1wiICVwIHdpdGggbmV3IHBsdWdpbiAlcCBmb3IgZmlsZW5hbWUgXCIlc1wiIiwKKyAgICAgICAgICBHU1RfU1RSX05VTEwgKGV4aXN0aW5nX3BsdWdpbi0+ZmlsZW5hbWUpLCBleGlzdGluZ19wbHVnaW4sIHBsdWdpbiwKKyAgICAgICAgICBHU1RfU1RSX05VTEwgKHBsdWdpbi0+ZmlsZW5hbWUpKTsKKyAgICAgIC8qIElmIHRoZSBuZXcgcGx1Z2luIGlzIGJsYWNrbGlzdGVkIGFuZCB0aGUgZXhpc3Rpbmcgb25lIGlzbid0IGNhY2hlZCwgZG8gbm90CisgICAgICAgKiBhY2NlcHQgaWYgaXQncyBmcm9tIGEgZGlmZmVyZW50IGxvY2F0aW9uIHRoYW4gdGhlIGV4aXN0aW5nIG9uZSAqLworICAgICAgaWYgKChwbHVnaW4tPmZsYWdzICYgR1NUX1BMVUdJTl9GTEFHX0JMQUNLTElTVEVEKSAmJgorICAgICAgICAgIHN0cmNtcCAocGx1Z2luLT5maWxlbmFtZSwgZXhpc3RpbmdfcGx1Z2luLT5maWxlbmFtZSkpIHsKKyAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChyZWdpc3RyeSwKKyAgICAgICAgICAgICJOb3QgcmVwbGFjaW5nIHBsdWdpbiBiZWNhdXNlIG5ldyBvbmUgKCVzKSBpcyBibGFja2xpc3RlZCBidXQgZm9yIGEgZGlmZmVyZW50IGxvY2F0aW9uIHRoYW4gZXhpc3Rpbmcgb25lICglcykiLAorICAgICAgICAgICAgcGx1Z2luLT5maWxlbmFtZSwgZXhpc3RpbmdfcGx1Z2luLT5maWxlbmFtZSk7CisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBsdWdpbik7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChyZWdpc3RyeSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgIH0KKyAgICAgIHJlZ2lzdHJ5LT5wbHVnaW5zID0gZ19saXN0X3JlbW92ZSAocmVnaXN0cnktPnBsdWdpbnMsIGV4aXN0aW5nX3BsdWdpbik7CisgICAgICBpZiAoR19MSUtFTFkgKGV4aXN0aW5nX3BsdWdpbi0+YmFzZW5hbWUpKQorICAgICAgICBnX2hhc2hfdGFibGVfcmVtb3ZlIChyZWdpc3RyeS0+YmFzZW5hbWVfaGFzaCwKKyAgICAgICAgICAgIGV4aXN0aW5nX3BsdWdpbi0+YmFzZW5hbWUpOworICAgICAgZ3N0X29iamVjdF91bnJlZiAoZXhpc3RpbmdfcGx1Z2luKTsKKyAgICB9CisgIH0KKworICBHU1RfREVCVUdfT0JKRUNUIChyZWdpc3RyeSwgImFkZGluZyBwbHVnaW4gJXAgZm9yIGZpbGVuYW1lIFwiJXNcIiIsCisgICAgICBwbHVnaW4sIEdTVF9TVFJfTlVMTCAocGx1Z2luLT5maWxlbmFtZSkpOworCisgIHJlZ2lzdHJ5LT5wbHVnaW5zID0gZ19saXN0X3ByZXBlbmQgKHJlZ2lzdHJ5LT5wbHVnaW5zLCBwbHVnaW4pOworICBpZiAoR19MSUtFTFkgKHBsdWdpbi0+YmFzZW5hbWUpKQorICAgIGdfaGFzaF90YWJsZV9yZXBsYWNlIChyZWdpc3RyeS0+YmFzZW5hbWVfaGFzaCwgcGx1Z2luLT5iYXNlbmFtZSwgcGx1Z2luKTsKKworICBnc3Rfb2JqZWN0X3JlZl9zaW5rIChwbHVnaW4pOworICBHU1RfT0JKRUNUX1VOTE9DSyAocmVnaXN0cnkpOworCisgIEdTVF9MT0dfT0JKRUNUIChyZWdpc3RyeSwgImVtaXR0aW5nIHBsdWdpbi1hZGRlZCBmb3IgZmlsZW5hbWUgXCIlc1wiIiwKKyAgICAgIEdTVF9TVFJfTlVMTCAocGx1Z2luLT5maWxlbmFtZSkpOworICBnX3NpZ25hbF9lbWl0IChyZWdpc3RyeSwgZ3N0X3JlZ2lzdHJ5X3NpZ25hbHNbUExVR0lOX0FEREVEXSwgMCwgcGx1Z2luKTsKKworICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9yZWdpc3RyeV9yZW1vdmVfZmVhdHVyZXNfZm9yX3BsdWdpbl91bmxvY2tlZCAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwKKyAgICBHc3RQbHVnaW4gKiBwbHVnaW4pCit7CisgIEdMaXN0ICpmOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19SRUdJU1RSWSAocmVnaXN0cnkpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1BMVUdJTiAocGx1Z2luKSk7CisKKyAgLyogUmVtb3ZlIGFsbCBmZWF0dXJlcyBmb3IgdGhpcyBwbHVnaW4gKi8KKyAgZiA9IHJlZ2lzdHJ5LT5mZWF0dXJlczsKKyAgd2hpbGUgKGYgIT0gTlVMTCkgeworICAgIEdMaXN0ICpuZXh0ID0gZ19saXN0X25leHQgKGYpOworICAgIEdzdFBsdWdpbkZlYXR1cmUgKmZlYXR1cmUgPSBmLT5kYXRhOworCisgICAgaWYgKEdfVU5MSUtFTFkgKGZlYXR1cmUgJiYgZmVhdHVyZS0+cGx1Z2luID09IHBsdWdpbikpIHsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJlZ2lzdHJ5LCAicmVtb3ZpbmcgZmVhdHVyZSAlcCAoJXMpIGZvciBwbHVnaW4gJXAgKCVzKSIsCisgICAgICAgICAgZmVhdHVyZSwgZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9uYW1lIChmZWF0dXJlKSwgcGx1Z2luLAorICAgICAgICAgIHBsdWdpbi0+ZGVzYy5uYW1lKTsKKworICAgICAgcmVnaXN0cnktPmZlYXR1cmVzID0gZ19saXN0X2RlbGV0ZV9saW5rIChyZWdpc3RyeS0+ZmVhdHVyZXMsIGYpOworICAgICAgZ19oYXNoX3RhYmxlX3JlbW92ZSAocmVnaXN0cnktPmZlYXR1cmVfaGFzaCwgR1NUX09CSkVDVF9OQU1FIChmZWF0dXJlKSk7CisgICAgICBnc3Rfb2JqZWN0X3VucGFyZW50IChHU1RfT0JKRUNUX0NBU1QgKGZlYXR1cmUpKTsKKyAgICB9CisgICAgZiA9IG5leHQ7CisgIH0KKyAgcmVnaXN0cnktPnByaXYtPmNvb2tpZSsrOworfQorCisvKioKKyAqIGdzdF9yZWdpc3RyeV9yZW1vdmVfcGx1Z2luOgorICogQHJlZ2lzdHJ5OiB0aGUgcmVnaXN0cnkgdG8gcmVtb3ZlIHRoZSBwbHVnaW4gZnJvbQorICogQHBsdWdpbjogKHRyYW5zZmVyIG5vbmUpOiB0aGUgcGx1Z2luIHRvIHJlbW92ZQorICoKKyAqIFJlbW92ZSB0aGUgcGx1Z2luIGZyb20gdGhlIHJlZ2lzdHJ5LgorICoKKyAqIE1UIHNhZmUuCisgKi8KK3ZvaWQKK2dzdF9yZWdpc3RyeV9yZW1vdmVfcGx1Z2luIChHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5LCBHc3RQbHVnaW4gKiBwbHVnaW4pCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19SRUdJU1RSWSAocmVnaXN0cnkpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1BMVUdJTiAocGx1Z2luKSk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocmVnaXN0cnksICJyZW1vdmluZyBwbHVnaW4gJXAgKCVzKSIsCisgICAgICBwbHVnaW4sIGdzdF9wbHVnaW5fZ2V0X25hbWUgKHBsdWdpbikpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAocmVnaXN0cnkpOworICByZWdpc3RyeS0+cGx1Z2lucyA9IGdfbGlzdF9yZW1vdmUgKHJlZ2lzdHJ5LT5wbHVnaW5zLCBwbHVnaW4pOworICBpZiAoR19MSUtFTFkgKHBsdWdpbi0+YmFzZW5hbWUpKQorICAgIGdfaGFzaF90YWJsZV9yZW1vdmUgKHJlZ2lzdHJ5LT5iYXNlbmFtZV9oYXNoLCBwbHVnaW4tPmJhc2VuYW1lKTsKKyAgZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9mZWF0dXJlc19mb3JfcGx1Z2luX3VubG9ja2VkIChyZWdpc3RyeSwgcGx1Z2luKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHJlZ2lzdHJ5KTsKKyAgZ3N0X29iamVjdF91bnJlZiAocGx1Z2luKTsKK30KKworLyoqCisgKiBnc3RfcmVnaXN0cnlfYWRkX2ZlYXR1cmU6CisgKiBAcmVnaXN0cnk6IHRoZSByZWdpc3RyeSB0byBhZGQgdGhlIHBsdWdpbiB0bworICogQGZlYXR1cmU6ICh0cmFuc2ZlciBmdWxsKTogdGhlIGZlYXR1cmUgdG8gYWRkCisgKgorICogQWRkIHRoZSBmZWF0dXJlIHRvIHRoZSByZWdpc3RyeS4gVGhlIGZlYXR1cmUtYWRkZWQgc2lnbmFsIHdpbGwgYmUgZW1pdHRlZC4KKyAqIFRoaXMgZnVuY3Rpb24gc2lua3MgQGZlYXR1cmUuCisgKgorICogUmV0dXJuczogVFJVRSBvbiBzdWNjZXNzLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK2dib29sZWFuCitnc3RfcmVnaXN0cnlfYWRkX2ZlYXR1cmUgKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksIEdzdFBsdWdpbkZlYXR1cmUgKiBmZWF0dXJlKQoreworICBHc3RQbHVnaW5GZWF0dXJlICpleGlzdGluZ19mZWF0dXJlOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUkVHSVNUUlkgKHJlZ2lzdHJ5KSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BMVUdJTl9GRUFUVVJFIChmZWF0dXJlKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX09CSkVDVF9OQU1FIChmZWF0dXJlKSAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmZWF0dXJlLT5wbHVnaW5fbmFtZSAhPSBOVUxMLCBGQUxTRSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChyZWdpc3RyeSk7CisgIGV4aXN0aW5nX2ZlYXR1cmUgPSBnc3RfcmVnaXN0cnlfbG9va3VwX2ZlYXR1cmVfbG9ja2VkIChyZWdpc3RyeSwKKyAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoZmVhdHVyZSkpOworICBpZiAoR19VTkxJS0VMWSAoZXhpc3RpbmdfZmVhdHVyZSkpIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChyZWdpc3RyeSwgInJlcGxhY2luZyBleGlzdGluZyBmZWF0dXJlICVwICglcykiLAorICAgICAgICBleGlzdGluZ19mZWF0dXJlLCBHU1RfT0JKRUNUX05BTUUgKGZlYXR1cmUpKTsKKyAgICAvKiBSZW1vdmUgdGhlIGV4aXN0aW5nIGZlYXR1cmUgZnJvbSB0aGUgbGlzdCBub3csIGJlZm9yZSB3ZSBpbnNlcnQgdGhlIG5ldworICAgICAqIG9uZSwgYnV0IGRvbid0IHVucmVmIHlldCBiZWNhdXNlIHRoZSBoYXNoIGlzIHN0aWxsIHN0b3JpbmcgYSByZWZlcmVuY2UgdG8KKyAgICAgKiBpdC4gKi8KKyAgICByZWdpc3RyeS0+ZmVhdHVyZXMgPSBnX2xpc3RfcmVtb3ZlIChyZWdpc3RyeS0+ZmVhdHVyZXMsIGV4aXN0aW5nX2ZlYXR1cmUpOworICB9CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocmVnaXN0cnksICJhZGRpbmcgZmVhdHVyZSAlcCAoJXMpIiwgZmVhdHVyZSwKKyAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoZmVhdHVyZSkpOworCisgIHJlZ2lzdHJ5LT5mZWF0dXJlcyA9IGdfbGlzdF9wcmVwZW5kIChyZWdpc3RyeS0+ZmVhdHVyZXMsIGZlYXR1cmUpOworICBnX2hhc2hfdGFibGVfcmVwbGFjZSAocmVnaXN0cnktPmZlYXR1cmVfaGFzaCwgR1NUX09CSkVDVF9OQU1FIChmZWF0dXJlKSwKKyAgICAgIGZlYXR1cmUpOworCisgIGlmIChHX1VOTElLRUxZIChleGlzdGluZ19mZWF0dXJlKSkgeworICAgIC8qIFdlIHVucmVmIG5vdy4gTm8gbmVlZCB0byByZW1vdmUgdGhlIGZlYXR1cmUgbmFtZSBmcm9tIHRoZSBoYXNoIHRhYmxlLCBpdAorICAgICAqIGdvdCByZXBsYWNlZCBieSB0aGUgbmV3IGZlYXR1cmUgKi8KKyAgICBnc3Rfb2JqZWN0X3VucGFyZW50IChHU1RfT0JKRUNUX0NBU1QgKGV4aXN0aW5nX2ZlYXR1cmUpKTsKKyAgfQorCisgIGdzdF9vYmplY3Rfc2V0X3BhcmVudCAoR1NUX09CSkVDVF9DQVNUIChmZWF0dXJlKSwgR1NUX09CSkVDVF9DQVNUIChyZWdpc3RyeSkpOworCisgIHJlZ2lzdHJ5LT5wcml2LT5jb29raWUrKzsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHJlZ2lzdHJ5KTsKKworICBHU1RfTE9HX09CSkVDVCAocmVnaXN0cnksICJlbWl0dGluZyBmZWF0dXJlLWFkZGVkIGZvciAlcyIsCisgICAgICBHU1RfT0JKRUNUX05BTUUgKGZlYXR1cmUpKTsKKyAgZ19zaWduYWxfZW1pdCAocmVnaXN0cnksIGdzdF9yZWdpc3RyeV9zaWduYWxzW0ZFQVRVUkVfQURERURdLCAwLCBmZWF0dXJlKTsKKworICByZXR1cm4gVFJVRTsKK30KKworLyoqCisgKiBnc3RfcmVnaXN0cnlfcmVtb3ZlX2ZlYXR1cmU6CisgKiBAcmVnaXN0cnk6IHRoZSByZWdpc3RyeSB0byByZW1vdmUgdGhlIGZlYXR1cmUgZnJvbQorICogQGZlYXR1cmU6ICh0cmFuc2ZlciBub25lKTogdGhlIGZlYXR1cmUgdG8gcmVtb3ZlCisgKgorICogUmVtb3ZlIHRoZSBmZWF0dXJlIGZyb20gdGhlIHJlZ2lzdHJ5LgorICoKKyAqIE1UIHNhZmUuCisgKi8KK3ZvaWQKK2dzdF9yZWdpc3RyeV9yZW1vdmVfZmVhdHVyZSAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwgR3N0UGx1Z2luRmVhdHVyZSAqIGZlYXR1cmUpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19SRUdJU1RSWSAocmVnaXN0cnkpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1BMVUdJTl9GRUFUVVJFIChmZWF0dXJlKSk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocmVnaXN0cnksICJyZW1vdmluZyBmZWF0dXJlICVwICglcykiLAorICAgICAgZmVhdHVyZSwgZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9uYW1lIChmZWF0dXJlKSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChyZWdpc3RyeSk7CisgIHJlZ2lzdHJ5LT5mZWF0dXJlcyA9IGdfbGlzdF9yZW1vdmUgKHJlZ2lzdHJ5LT5mZWF0dXJlcywgZmVhdHVyZSk7CisgIGdfaGFzaF90YWJsZV9yZW1vdmUgKHJlZ2lzdHJ5LT5mZWF0dXJlX2hhc2gsIEdTVF9PQkpFQ1RfTkFNRSAoZmVhdHVyZSkpOworICByZWdpc3RyeS0+cHJpdi0+Y29va2llKys7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChyZWdpc3RyeSk7CisKKyAgZ3N0X29iamVjdF91bnBhcmVudCAoKEdzdE9iamVjdCAqKSBmZWF0dXJlKTsKK30KKworLyoqCisgKiBnc3RfcmVnaXN0cnlfcGx1Z2luX2ZpbHRlcjoKKyAqIEByZWdpc3RyeTogcmVnaXN0cnkgdG8gcXVlcnkKKyAqIEBmaWx0ZXI6IChzY29wZSBjYWxsKTogdGhlIGZpbHRlciB0byB1c2UKKyAqIEBmaXJzdDogb25seSByZXR1cm4gZmlyc3QgbWF0Y2gKKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogdXNlciBkYXRhIHBhc3NlZCB0byB0aGUgZmlsdGVyIGZ1bmN0aW9uCisgKgorICogUnVucyBhIGZpbHRlciBhZ2FpbnN0IGFsbCBwbHVnaW5zIGluIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJucyBhICNHTGlzdCB3aXRoCisgKiB0aGUgcmVzdWx0cy4gSWYgdGhlIGZpcnN0IGZsYWcgaXMgc2V0LCBvbmx5IHRoZSBmaXJzdCBtYXRjaCBpcworICogcmV0dXJuZWQgKGFzIGEgbGlzdCB3aXRoIGEgc2luZ2xlIG9iamVjdCkuCisgKiBFdmVyeSBwbHVnaW4gaXMgcmVmZmVkOyB1c2UgZ3N0X3BsdWdpbl9saXN0X2ZyZWUoKSBhZnRlciB1c2UsIHdoaWNoCisgKiB3aWxsIHVucmVmIGFnYWluLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAoZWxlbWVudC10eXBlIEdzdC5QbHVnaW4pOiBhICNHTGlzdCBvZiAjR3N0UGx1Z2luLgorICogICAgIFVzZSBnc3RfcGx1Z2luX2xpc3RfZnJlZSgpIGFmdGVyIHVzYWdlLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK0dMaXN0ICoKK2dzdF9yZWdpc3RyeV9wbHVnaW5fZmlsdGVyIChHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5LAorICAgIEdzdFBsdWdpbkZpbHRlciBmaWx0ZXIsIGdib29sZWFuIGZpcnN0LCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIEdMaXN0ICpsaXN0OworICBHTGlzdCAqZzsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1JFR0lTVFJZIChyZWdpc3RyeSksIE5VTEwpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAocmVnaXN0cnkpOworICBsaXN0ID0gZ3N0X2ZpbHRlcl9ydW4gKHJlZ2lzdHJ5LT5wbHVnaW5zLCAoR3N0RmlsdGVyRnVuYykgZmlsdGVyLCBmaXJzdCwKKyAgICAgIHVzZXJfZGF0YSk7CisgIGZvciAoZyA9IGxpc3Q7IGc7IGcgPSBnLT5uZXh0KSB7CisgICAgZ3N0X29iamVjdF9yZWYgKEdTVF9QTFVHSU5fQ0FTVCAoZy0+ZGF0YSkpOworICB9CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChyZWdpc3RyeSk7CisKKyAgcmV0dXJuIGxpc3Q7Cit9CisKKy8qIHJldHVybnMgVFJVRSBpZiB0aGUgbGlzdCB3YXMgY2hhbmdlZAorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG9iamVjdCBsb2NrIHRha2VuICovCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X29yX2NyZWF0ZSAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwKKyAgICBHTGlzdCAqKiBwcmV2aW91cywgZ3VpbnQzMiAqIGNvb2tpZSwgR1R5cGUgdHlwZSkKK3sKKyAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7CisgIEdzdFJlZ2lzdHJ5UHJpdmF0ZSAqcHJpdiA9IHJlZ2lzdHJ5LT5wcml2OworCisgIGlmIChHX1VOTElLRUxZICghKnByZXZpb3VzIHx8IHByaXYtPmNvb2tpZSAhPSAqY29va2llKSkgeworICAgIEdzdFR5cGVOYW1lRGF0YSBkYXRhOworCisgICAgaWYgKCpwcmV2aW91cykKKyAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUgKCpwcmV2aW91cyk7CisKKyAgICBkYXRhLnR5cGUgPSB0eXBlOworICAgIGRhdGEubmFtZSA9IE5VTEw7CisgICAgKnByZXZpb3VzID0KKyAgICAgICAgZ3N0X2ZpbHRlcl9ydW4gKHJlZ2lzdHJ5LT5mZWF0dXJlcywKKyAgICAgICAgKEdzdEZpbHRlckZ1bmMpIGdzdF9wbHVnaW5fZmVhdHVyZV90eXBlX25hbWVfZmlsdGVyLCBGQUxTRSwgJmRhdGEpOworICAgIGdfbGlzdF9mb3JlYWNoICgqcHJldmlvdXMsIChHRnVuYykgZ3N0X29iamVjdF9yZWYsIE5VTEwpOworICAgICpjb29raWUgPSBwcml2LT5jb29raWU7CisgICAgcmVzID0gVFJVRTsKKyAgfQorCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBnaW50Cit0eXBlX2ZpbmRfZmFjdG9yeV9yYW5rX2NtcCAoY29uc3QgR3N0UGx1Z2luRmVhdHVyZSAqIGZhYzEsCisgICAgY29uc3QgR3N0UGx1Z2luRmVhdHVyZSAqIGZhYzIpCit7CisgIGlmIChHX0xJS0VMWSAoZmFjMS0+cmFuayAhPSBmYWMyLT5yYW5rKSkKKyAgICByZXR1cm4gZmFjMi0+cmFuayAtIGZhYzEtPnJhbms7CisKKyAgLyogdG8gbWFrZSB0aGUgb3JkZXIgaW4gd2hpY2ggdGhpbmdzIGhhcHBlbiBtb3JlIGRldGVybWluaXN0aWMsCisgICAqIHNvcnQgYnkgbmFtZSB3aGVuIHRoZSByYW5rcyBhcmUgdGhlIHNhbWUuICovCisgIHJldHVybiBzdHJjbXAgKEdTVF9PQkpFQ1RfTkFNRSAoZmFjMSksIEdTVF9PQkpFQ1RfTkFNRSAoZmFjMikpOworfQorCitzdGF0aWMgR0xpc3QgKgorZ3N0X3JlZ2lzdHJ5X2dldF9lbGVtZW50X2ZhY3RvcnlfbGlzdCAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSkKK3sKKyAgR0xpc3QgKmxpc3Q7CisKKyAgR1NUX09CSkVDVF9MT0NLIChyZWdpc3RyeSk7CisKKyAgZ3N0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3Rfb3JfY3JlYXRlIChyZWdpc3RyeSwKKyAgICAgICZyZWdpc3RyeS0+cHJpdi0+ZWxlbWVudF9mYWN0b3J5X2xpc3QsICZyZWdpc3RyeS0+cHJpdi0+ZWZsX2Nvb2tpZSwKKyAgICAgIEdTVF9UWVBFX0VMRU1FTlRfRkFDVE9SWSk7CisKKyAgLyogUmV0dXJuIHJlZmZlZCBjb3B5ICovCisgIGxpc3QgPSBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9jb3B5IChyZWdpc3RyeS0+cHJpdi0+ZWxlbWVudF9mYWN0b3J5X2xpc3QpOworCisgIEdTVF9PQkpFQ1RfVU5MT0NLIChyZWdpc3RyeSk7CisKKyAgcmV0dXJuIGxpc3Q7Cit9CisKK3N0YXRpYyBHTGlzdCAqCitnc3RfcmVnaXN0cnlfZ2V0X3R5cGVmaW5kX2ZhY3RvcnlfbGlzdCAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSkKK3sKKyAgR0xpc3QgKmxpc3Q7CisKKyAgR1NUX09CSkVDVF9MT0NLIChyZWdpc3RyeSk7CisKKyAgaWYgKEdfVU5MSUtFTFkgKGdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X29yX2NyZWF0ZSAocmVnaXN0cnksCisgICAgICAgICAgICAgICZyZWdpc3RyeS0+cHJpdi0+dHlwZWZpbmRfZmFjdG9yeV9saXN0LAorICAgICAgICAgICAgICAmcmVnaXN0cnktPnByaXYtPnRmbF9jb29raWUsIEdTVF9UWVBFX1RZUEVfRklORF9GQUNUT1JZKSkpCisgICAgcmVnaXN0cnktPnByaXYtPnR5cGVmaW5kX2ZhY3RvcnlfbGlzdCA9CisgICAgICAgIGdfbGlzdF9zb3J0IChyZWdpc3RyeS0+cHJpdi0+dHlwZWZpbmRfZmFjdG9yeV9saXN0LAorICAgICAgICAoR0NvbXBhcmVGdW5jKSB0eXBlX2ZpbmRfZmFjdG9yeV9yYW5rX2NtcCk7CisKKyAgLyogUmV0dXJuIHJlZmZlZCBjb3B5ICovCisgIGxpc3QgPSBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9jb3B5IChyZWdpc3RyeS0+cHJpdi0+dHlwZWZpbmRfZmFjdG9yeV9saXN0KTsKKworICBHU1RfT0JKRUNUX1VOTE9DSyAocmVnaXN0cnkpOworCisgIHJldHVybiBsaXN0OworfQorCisvKioKKyAqIGdzdF9yZWdpc3RyeV9mZWF0dXJlX2ZpbHRlcjoKKyAqIEByZWdpc3RyeTogcmVnaXN0cnkgdG8gcXVlcnkKKyAqIEBmaWx0ZXI6IChzY29wZSBjYWxsKTogdGhlIGZpbHRlciB0byB1c2UKKyAqIEBmaXJzdDogb25seSByZXR1cm4gZmlyc3QgbWF0Y2gKKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogdXNlciBkYXRhIHBhc3NlZCB0byB0aGUgZmlsdGVyIGZ1bmN0aW9uCisgKgorICogUnVucyBhIGZpbHRlciBhZ2FpbnN0IGFsbCBmZWF0dXJlcyBvZiB0aGUgcGx1Z2lucyBpbiB0aGUgcmVnaXN0cnkKKyAqIGFuZCByZXR1cm5zIGEgR0xpc3Qgd2l0aCB0aGUgcmVzdWx0cy4KKyAqIElmIHRoZSBmaXJzdCBmbGFnIGlzIHNldCwgb25seSB0aGUgZmlyc3QgbWF0Y2ggaXMKKyAqIHJldHVybmVkIChhcyBhIGxpc3Qgd2l0aCBhIHNpbmdsZSBvYmplY3QpLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAoZWxlbWVudC10eXBlIEdzdC5QbHVnaW5GZWF0dXJlKTogYSAjR0xpc3Qgb2YKKyAqICAgICAjR3N0UGx1Z2luRmVhdHVyZS4gVXNlIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUoKSBhZnRlciB1c2FnZS4KKyAqCisgKiBNVCBzYWZlLgorICovCitHTGlzdCAqCitnc3RfcmVnaXN0cnlfZmVhdHVyZV9maWx0ZXIgKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksCisgICAgR3N0UGx1Z2luRmVhdHVyZUZpbHRlciBmaWx0ZXIsIGdib29sZWFuIGZpcnN0LCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIEdMaXN0ICpsaXN0OworICBHTGlzdCAqZzsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1JFR0lTVFJZIChyZWdpc3RyeSksIE5VTEwpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAocmVnaXN0cnkpOworICBsaXN0ID0gZ3N0X2ZpbHRlcl9ydW4gKHJlZ2lzdHJ5LT5mZWF0dXJlcywgKEdzdEZpbHRlckZ1bmMpIGZpbHRlciwgZmlyc3QsCisgICAgICB1c2VyX2RhdGEpOworICBmb3IgKGcgPSBsaXN0OyBnOyBnID0gZy0+bmV4dCkgeworICAgIGdzdF9vYmplY3RfcmVmIChHU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVCAoZy0+ZGF0YSkpOworICB9CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChyZWdpc3RyeSk7CisKKyAgcmV0dXJuIGxpc3Q7Cit9CisKKy8qKgorICogZ3N0X3JlZ2lzdHJ5X2ZpbmRfcGx1Z2luOgorICogQHJlZ2lzdHJ5OiB0aGUgcmVnaXN0cnkgdG8gc2VhcmNoCisgKiBAbmFtZTogdGhlIHBsdWdpbiBuYW1lIHRvIGZpbmQKKyAqCisgKiBGaW5kIHRoZSBwbHVnaW4gd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpbiB0aGUgcmVnaXN0cnkuCisgKiBUaGUgcGx1Z2luIHdpbGwgYmUgcmVmZmVkOyBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHVucmVmZmluZy4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBwbHVnaW4gd2l0aCB0aGUgZ2l2ZW4gbmFtZSBvciBOVUxMIGlmIHRoZQorICogICAgIHBsdWdpbiB3YXMgbm90IGZvdW5kLiBnc3Rfb2JqZWN0X3VucmVmKCkgYWZ0ZXIgdXNhZ2UuCisgKgorICogTVQgc2FmZS4KKyAqLworR3N0UGx1Z2luICoKK2dzdF9yZWdpc3RyeV9maW5kX3BsdWdpbiAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwgY29uc3QgZ2NoYXIgKiBuYW1lKQoreworICBHTGlzdCAqd2FsazsKKyAgR3N0UGx1Z2luICpyZXN1bHQgPSBOVUxMOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUkVHSVNUUlkgKHJlZ2lzdHJ5KSwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYW1lICE9IE5VTEwsIE5VTEwpOworCisgIHdhbGsgPSBnc3RfcmVnaXN0cnlfcGx1Z2luX2ZpbHRlciAocmVnaXN0cnksCisgICAgICAoR3N0UGx1Z2luRmlsdGVyKSBnc3RfcGx1Z2luX25hbWVfZmlsdGVyLCBUUlVFLCAoZ3BvaW50ZXIpIG5hbWUpOworICBpZiAod2FsaykgeworICAgIHJlc3VsdCA9IEdTVF9QTFVHSU5fQ0FTVCAod2Fsay0+ZGF0YSk7CisKKyAgICBnc3Rfb2JqZWN0X3JlZiAocmVzdWx0KTsKKyAgICBnc3RfcGx1Z2luX2xpc3RfZnJlZSAod2Fsayk7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGdzdF9yZWdpc3RyeV9maW5kX2ZlYXR1cmU6CisgKiBAcmVnaXN0cnk6IHRoZSByZWdpc3RyeSB0byBzZWFyY2gKKyAqIEBuYW1lOiB0aGUgcGx1Z2luZmVhdHVyZSBuYW1lIHRvIGZpbmQKKyAqIEB0eXBlOiB0aGUgcGx1Z2luZmVhdHVyZSB0eXBlIHRvIGZpbmQKKyAqCisgKiBGaW5kIHRoZSBwbHVnaW5mZWF0dXJlIHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIHR5cGUgaW4gdGhlIHJlZ2lzdHJ5LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIHBsdWdpbmZlYXR1cmUgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgdHlwZQorICogICAgIG9yIE5VTEwgaWYgdGhlIHBsdWdpbiB3YXMgbm90IGZvdW5kLiBnc3Rfb2JqZWN0X3VucmVmKCkgYWZ0ZXIgdXNhZ2UuCisgKgorICogTVQgc2FmZS4KKyAqLworR3N0UGx1Z2luRmVhdHVyZSAqCitnc3RfcmVnaXN0cnlfZmluZF9mZWF0dXJlIChHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5LCBjb25zdCBnY2hhciAqIG5hbWUsCisgICAgR1R5cGUgdHlwZSkKK3sKKyAgR3N0UGx1Z2luRmVhdHVyZSAqZmVhdHVyZSA9IE5VTEw7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19SRUdJU1RSWSAocmVnaXN0cnkpLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG5hbWUgIT0gTlVMTCwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnX3R5cGVfaXNfYSAodHlwZSwgR1NUX1RZUEVfUExVR0lOX0ZFQVRVUkUpLCBOVUxMKTsKKworICBmZWF0dXJlID0gZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9mZWF0dXJlIChyZWdpc3RyeSwgbmFtZSk7CisgIGlmIChmZWF0dXJlICYmICFnX3R5cGVfaXNfYSAoR19UWVBFX0ZST01fSU5TVEFOQ0UgKGZlYXR1cmUpLCB0eXBlKSkgeworICAgIGdzdF9vYmplY3RfdW5yZWYgKGZlYXR1cmUpOworICAgIGZlYXR1cmUgPSBOVUxMOworICB9CisKKyAgcmV0dXJuIGZlYXR1cmU7Cit9CisKKy8qKgorICogZ3N0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3Q6CisgKiBAcmVnaXN0cnk6IGEgI0dzdFJlZ2lzdHJ5CisgKiBAdHlwZTogYSAjR1R5cGUuCisgKgorICogUmV0cmlldmVzIGEgI0dMaXN0IG9mICNHc3RQbHVnaW5GZWF0dXJlIG9mIEB0eXBlLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAoZWxlbWVudC10eXBlIEdzdC5QbHVnaW5GZWF0dXJlKTogYSAjR0xpc3Qgb2YKKyAqICAgICAjR3N0UGx1Z2luRmVhdHVyZSBvZiBAdHlwZS4gVXNlIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUoKSBhZnRlciB1c2UKKyAqCisgKiBNVCBzYWZlLgorICovCitHTGlzdCAqCitnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdCAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwgR1R5cGUgdHlwZSkKK3sKKyAgR3N0VHlwZU5hbWVEYXRhIGRhdGE7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19SRUdJU1RSWSAocmVnaXN0cnkpLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdfdHlwZV9pc19hICh0eXBlLCBHU1RfVFlQRV9QTFVHSU5fRkVBVFVSRSksIE5VTEwpOworCisgIC8qIFNwZWVkIHVwICovCisgIGlmICh0eXBlID09IEdTVF9UWVBFX0VMRU1FTlRfRkFDVE9SWSkKKyAgICByZXR1cm4gZ3N0X3JlZ2lzdHJ5X2dldF9lbGVtZW50X2ZhY3RvcnlfbGlzdCAocmVnaXN0cnkpOworICBlbHNlIGlmICh0eXBlID09IEdTVF9UWVBFX1RZUEVfRklORF9GQUNUT1JZKQorICAgIHJldHVybiBnc3RfcmVnaXN0cnlfZ2V0X3R5cGVmaW5kX2ZhY3RvcnlfbGlzdCAocmVnaXN0cnkpOworCisgIGRhdGEudHlwZSA9IHR5cGU7CisgIGRhdGEubmFtZSA9IE5VTEw7CisKKyAgcmV0dXJuIGdzdF9yZWdpc3RyeV9mZWF0dXJlX2ZpbHRlciAocmVnaXN0cnksCisgICAgICAoR3N0UGx1Z2luRmVhdHVyZUZpbHRlcikgZ3N0X3BsdWdpbl9mZWF0dXJlX3R5cGVfbmFtZV9maWx0ZXIsCisgICAgICBGQUxTRSwgJmRhdGEpOworfQorCisvKioKKyAqIGdzdF9yZWdpc3RyeV9nZXRfcGx1Z2luX2xpc3Q6CisgKiBAcmVnaXN0cnk6IHRoZSByZWdpc3RyeSB0byBzZWFyY2gKKyAqCisgKiBHZXQgYSBjb3B5IG9mIGFsbCBwbHVnaW5zIHJlZ2lzdGVyZWQgaW4gdGhlIGdpdmVuIHJlZ2lzdHJ5LiBUaGUgcmVmY291bnQKKyAqIG9mIGVhY2ggZWxlbWVudCBpbiB0aGUgbGlzdCBpbiBpbmNyZW1lbnRlZC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKGVsZW1lbnQtdHlwZSBHc3QuUGx1Z2luKTogYSAjR0xpc3Qgb2YgI0dzdFBsdWdpbi4KKyAqICAgICBVc2UgZ3N0X3BsdWdpbl9saXN0X2ZyZWUoKSBhZnRlciB1c2FnZS4KKyAqCisgKiBNVCBzYWZlLgorICovCitHTGlzdCAqCitnc3RfcmVnaXN0cnlfZ2V0X3BsdWdpbl9saXN0IChHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5KQoreworICBHTGlzdCAqbGlzdDsKKyAgR0xpc3QgKmc7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19SRUdJU1RSWSAocmVnaXN0cnkpLCBOVUxMKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHJlZ2lzdHJ5KTsKKyAgbGlzdCA9IGdfbGlzdF9jb3B5IChyZWdpc3RyeS0+cGx1Z2lucyk7CisgIGZvciAoZyA9IGxpc3Q7IGc7IGcgPSBnLT5uZXh0KSB7CisgICAgZ3N0X29iamVjdF9yZWYgKEdTVF9QTFVHSU5fQ0FTVCAoZy0+ZGF0YSkpOworICB9CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChyZWdpc3RyeSk7CisKKyAgcmV0dXJuIGxpc3Q7Cit9CisKK3N0YXRpYyBHc3RQbHVnaW5GZWF0dXJlICoKK2dzdF9yZWdpc3RyeV9sb29rdXBfZmVhdHVyZV9sb2NrZWQgKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIHJldHVybiBnX2hhc2hfdGFibGVfbG9va3VwIChyZWdpc3RyeS0+ZmVhdHVyZV9oYXNoLCBuYW1lKTsKK30KKworLyoqCisgKiBnc3RfcmVnaXN0cnlfbG9va3VwX2ZlYXR1cmU6CisgKiBAcmVnaXN0cnk6IGEgI0dzdFJlZ2lzdHJ5CisgKiBAbmFtZTogYSAjR3N0UGx1Z2luRmVhdHVyZSBuYW1lCisgKgorICogRmluZCBhICNHc3RQbHVnaW5GZWF0dXJlIHdpdGggQG5hbWUgaW4gQHJlZ2lzdHJ5LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0UGx1Z2luRmVhdHVyZSB3aXRoIGl0cyByZWZjb3VudCBpbmNyZW1lbnRlZCwKKyAqICAgICB1c2UgZ3N0X29iamVjdF91bnJlZigpIGFmdGVyIHVzYWdlLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK0dzdFBsdWdpbkZlYXR1cmUgKgorZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9mZWF0dXJlIChHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5LCBjb25zdCBjaGFyICpuYW1lKQoreworICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUkVHSVNUUlkgKHJlZ2lzdHJ5KSwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYW1lICE9IE5VTEwsIE5VTEwpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAocmVnaXN0cnkpOworICBmZWF0dXJlID0gZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9mZWF0dXJlX2xvY2tlZCAocmVnaXN0cnksIG5hbWUpOworICBpZiAoZmVhdHVyZSkKKyAgICBnc3Rfb2JqZWN0X3JlZiAoZmVhdHVyZSk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChyZWdpc3RyeSk7CisKKyAgcmV0dXJuIGZlYXR1cmU7Cit9CisKK3N0YXRpYyBHc3RQbHVnaW4gKgorZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9ibl9sb2NrZWQgKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksIGNvbnN0IGNoYXIgKmJhc2VuYW1lKQoreworICByZXR1cm4gZ19oYXNoX3RhYmxlX2xvb2t1cCAocmVnaXN0cnktPmJhc2VuYW1lX2hhc2gsIGJhc2VuYW1lKTsKK30KKworc3RhdGljIEdzdFBsdWdpbiAqCitnc3RfcmVnaXN0cnlfbG9va3VwX2JuIChHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5LCBjb25zdCBjaGFyICpiYXNlbmFtZSkKK3sKKyAgR3N0UGx1Z2luICpwbHVnaW47CisKKyAgR1NUX09CSkVDVF9MT0NLIChyZWdpc3RyeSk7CisgIHBsdWdpbiA9IGdzdF9yZWdpc3RyeV9sb29rdXBfYm5fbG9ja2VkIChyZWdpc3RyeSwgYmFzZW5hbWUpOworICBpZiAocGx1Z2luKQorICAgIGdzdF9vYmplY3RfcmVmIChwbHVnaW4pOworICBHU1RfT0JKRUNUX1VOTE9DSyAocmVnaXN0cnkpOworCisgIHJldHVybiBwbHVnaW47Cit9CisKKy8qKgorICogZ3N0X3JlZ2lzdHJ5X2xvb2t1cDoKKyAqIEByZWdpc3RyeTogdGhlIHJlZ2lzdHJ5IHRvIGxvb2sgdXAgaW4KKyAqIEBmaWxlbmFtZTogdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gbG9vayB1cAorICoKKyAqIExvb2sgdXAgYSBwbHVnaW4gaW4gdGhlIGdpdmVuIHJlZ2lzdHJ5IHdpdGggdGhlIGdpdmVuIGZpbGVuYW1lLgorICogSWYgZm91bmQsIHBsdWdpbiBpcyByZWZmZWQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdFBsdWdpbiBpZiBmb3VuZCwgb3IgTlVMTCBpZiBub3QuCisgKiAgICAgZ3N0X29iamVjdF91bnJlZigpIGFmdGVyIHVzYWdlLgorICovCitHc3RQbHVnaW4gKgorZ3N0X3JlZ2lzdHJ5X2xvb2t1cCAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisgIEdzdFBsdWdpbiAqcGx1Z2luOworICBnY2hhciAqYmFzZW5hbWU7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19SRUdJU1RSWSAocmVnaXN0cnkpLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpbGVuYW1lICE9IE5VTEwsIE5VTEwpOworCisgIGJhc2VuYW1lID0gZ19wYXRoX2dldF9iYXNlbmFtZSAoZmlsZW5hbWUpOworICBpZiAoR19VTkxJS0VMWSAoYmFzZW5hbWUgPT0gTlVMTCkpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgcGx1Z2luID0gZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9ibiAocmVnaXN0cnksIGJhc2VuYW1lKTsKKworICBnX2ZyZWUgKGJhc2VuYW1lKTsKKworICByZXR1cm4gcGx1Z2luOworfQorCit0eXBlZGVmIGVudW0KK3sKKyAgUkVHSVNUUllfU0NBTl9IRUxQRVJfTk9UX1NUQVJURUQgPSAwLAorICBSRUdJU1RSWV9TQ0FOX0hFTFBFUl9ESVNBQkxFRCwKKyAgUkVHSVNUUllfU0NBTl9IRUxQRVJfUlVOTklORworfSBHc3RSZWdpc3RyeVNjYW5IZWxwZXJTdGF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgR3N0UmVnaXN0cnkgKnJlZ2lzdHJ5OworICBHc3RSZWdpc3RyeVNjYW5IZWxwZXJTdGF0ZSBoZWxwZXJfc3RhdGU7CisgIEdzdFBsdWdpbkxvYWRlciAqaGVscGVyOworICBnYm9vbGVhbiBjaGFuZ2VkOworfSBHc3RSZWdpc3RyeVNjYW5Db250ZXh0OworCitzdGF0aWMgdm9pZAoraW5pdF9zY2FuX2NvbnRleHQgKEdzdFJlZ2lzdHJ5U2NhbkNvbnRleHQgKiBjb250ZXh0LCBHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5KQoreworICBnYm9vbGVhbiBkb19mb3JrOworCisgIGNvbnRleHQtPnJlZ2lzdHJ5ID0gcmVnaXN0cnk7CisKKyAgLyogc2VlIGlmIGZvcmtpbmcgaXMgZW5hYmxlZCBhbmQgc2V0IHVwIHRoZSBzY2FuIGhlbHBlciBzdGF0ZSBhY2NvcmRpbmdseSAqLworICBkb19mb3JrID0gX2dzdF9lbmFibGVfcmVnaXN0cnlfZm9yazsKKyAgaWYgKGRvX2ZvcmspIHsKKyAgICBjb25zdCBnY2hhciAqZm9ya19lbnY7CisKKyAgICAvKiBmb3JraW5nIGVuYWJsZWQsIHNlZSBpZiBpdCBpcyBkaXNhYmxlZCB3aXRoIGFuIGVudiB2YXIgKi8KKyAgICBpZiAoKGZvcmtfZW52ID0gZ19nZXRlbnYgKCJHU1RfUkVHSVNUUllfRk9SSyIpKSkgeworICAgICAgLyogZm9yayBlbmFibGVkIGZvciBhbnkgdmFsdWUgZGlmZmVyZW50IGZyb20gIm5vIiAqLworICAgICAgZG9fZm9yayA9IHN0cmNtcCAoZm9ya19lbnYsICJubyIpICE9IDA7CisgICAgfQorICB9CisKKyAgaWYgKGRvX2ZvcmspCisgICAgY29udGV4dC0+aGVscGVyX3N0YXRlID0gUkVHSVNUUllfU0NBTl9IRUxQRVJfTk9UX1NUQVJURUQ7CisgIGVsc2UKKyAgICBjb250ZXh0LT5oZWxwZXJfc3RhdGUgPSBSRUdJU1RSWV9TQ0FOX0hFTFBFUl9ESVNBQkxFRDsKKworICBjb250ZXh0LT5oZWxwZXIgPSBOVUxMOworICBjb250ZXh0LT5jaGFuZ2VkID0gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkCitjbGVhcl9zY2FuX2NvbnRleHQgKEdzdFJlZ2lzdHJ5U2NhbkNvbnRleHQgKiBjb250ZXh0KQoreworICBpZiAoY29udGV4dC0+aGVscGVyKSB7CisgICAgY29udGV4dC0+Y2hhbmdlZCB8PSBfcHJpdl9nc3RfcGx1Z2luX2xvYWRlcl9mdW5jcy5kZXN0cm95IChjb250ZXh0LT5oZWxwZXIpOworICAgIGNvbnRleHQtPmhlbHBlciA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIGdib29sZWFuCitnc3RfcmVnaXN0cnlfc2Nhbl9wbHVnaW5fZmlsZSAoR3N0UmVnaXN0cnlTY2FuQ29udGV4dCAqIGNvbnRleHQsCisgICAgY29uc3QgZ2NoYXIgKiBmaWxlbmFtZSwgb2ZmX3QgZmlsZV9zaXplLCB0aW1lX3QgZmlsZV9tdGltZSkKK3sKKyAgZ2Jvb2xlYW4gY2hhbmdlZCA9IEZBTFNFOworICBHc3RQbHVnaW4gKm5ld3BsdWdpbiA9IE5VTEw7CisKKyNpZmRlZiBHX09TX1dJTjMyCisgIC8qIERpc2FibGUgZXh0ZXJuYWwgcGx1Z2luIGxvYWRlciBvbiBXaW5kb3dzIHVudGlsIGl0IGlzIHBvcnRlZCBwcm9wZXJseS4gKi8KKyAgY29udGV4dC0+aGVscGVyX3N0YXRlID0gUkVHSVNUUllfU0NBTl9IRUxQRVJfRElTQUJMRUQ7CisjZW5kaWYKKworCisgIC8qIEhhdmUgYSBwbHVnaW4gdG8gbG9hZCAtIHNlZSBpZiB0aGUgc2Nhbi1oZWxwZXIgbmVlZHMgc3RhcnRpbmcgKi8KKyAgaWYgKGNvbnRleHQtPmhlbHBlcl9zdGF0ZSA9PSBSRUdJU1RSWV9TQ0FOX0hFTFBFUl9OT1RfU1RBUlRFRCkgeworICAgIEdTVF9ERUJVRyAoIlN0YXJ0aW5nIHBsdWdpbiBzY2FubmVyIGZvciBmaWxlICVzIiwgZmlsZW5hbWUpOworICAgIGNvbnRleHQtPmhlbHBlciA9IF9wcml2X2dzdF9wbHVnaW5fbG9hZGVyX2Z1bmNzLmNyZWF0ZSAoY29udGV4dC0+cmVnaXN0cnkpOworICAgIGlmIChjb250ZXh0LT5oZWxwZXIgIT0gTlVMTCkKKyAgICAgIGNvbnRleHQtPmhlbHBlcl9zdGF0ZSA9IFJFR0lTVFJZX1NDQU5fSEVMUEVSX1JVTk5JTkc7CisgICAgZWxzZSB7CisgICAgICBHU1RfV0FSTklORyAoIkZhaWxlZCBzdGFydGluZyBwbHVnaW4gc2Nhbm5lci4gU2Nhbm5pbmcgaW4tcHJvY2VzcyIpOworICAgICAgY29udGV4dC0+aGVscGVyX3N0YXRlID0gUkVHSVNUUllfU0NBTl9IRUxQRVJfRElTQUJMRUQ7CisgICAgfQorICB9CisKKyAgaWYgKGNvbnRleHQtPmhlbHBlcl9zdGF0ZSA9PSBSRUdJU1RSWV9TQ0FOX0hFTFBFUl9SVU5OSU5HKSB7CisgICAgR1NUX0RFQlVHICgiVXNpbmcgc2Nhbi1oZWxwZXIgdG8gbG9hZCBwbHVnaW4gJXMiLCBmaWxlbmFtZSk7CisgICAgaWYgKCFfcHJpdl9nc3RfcGx1Z2luX2xvYWRlcl9mdW5jcy5sb2FkIChjb250ZXh0LT5oZWxwZXIsCisgICAgICAgICAgICBmaWxlbmFtZSwgZmlsZV9zaXplLCBmaWxlX210aW1lKSkgeworICAgICAgZ193YXJuaW5nICgiRXh0ZXJuYWwgcGx1Z2luIGxvYWRlciBmYWlsZWQuIFRoaXMgbW9zdCBsaWtlbHkgbWVhbnMgdGhhdCAiCisgICAgICAgICAgInRoZSBwbHVnaW4gbG9hZGVyIGhlbHBlciBiaW5hcnkgd2FzIG5vdCBmb3VuZCBvciBjb3VsZCBub3QgYmUgcnVuLiAiCisgICAgICAgICAgIiVzIiwgKGdfZ2V0ZW52ICgiR1NUX1BMVUdJTl9QQVRIIikgIT0gTlVMTCkgPworICAgICAgICAgICJJZiB5b3UgYXJlIHJ1bm5pbmcgYW4gdW5pbnN0YWxsZWQgR1N0cmVhbWVyIHNldHVwLCB5b3UgbWlnaHQgbmVlZCAiCisgICAgICAgICAgInRvIHVwZGF0ZSB5b3VyIGdzdC11bmluc3RhbGxlZCBzY3JpcHQgc28gdGhhdCB0aGUgIgorICAgICAgICAgICJHU1RfUExVR0lOX1NDQU5ORVIgZW52aXJvbm1lbnQgdmFyaWFibGUgZ2V0cyBzZXQuIiA6ICIiKTsKKyAgICAgIGNvbnRleHQtPmhlbHBlcl9zdGF0ZSA9IFJFR0lTVFJZX1NDQU5fSEVMUEVSX0RJU0FCTEVEOworICAgIH0KKyAgfQorCisgIC8qIENoZWNrIGlmIHRoZSBoZWxwZXIgaXMgZGlzYWJsZWQgKG9yIGp1c3QgZ290IGRpc2FibGVkIGFib3ZlKSAqLworICBpZiAoY29udGV4dC0+aGVscGVyX3N0YXRlID09IFJFR0lTVFJZX1NDQU5fSEVMUEVSX0RJU0FCTEVEKSB7CisgICAgLyogTG9hZCBwbHVnaW4gdGhlIG9sZCBmYXNoaW9uZWQgd2F5Li4uICovCisKKyAgICAvKiBXZSBkb24ndCB1c2UgYSBHRXJyb3IgaGVyZSBiZWNhdXNlIGEgZmFpbHVyZSB0byBsb2FkIHNvbWUgc2hhcmVkCisgICAgICogb2JqZWN0cyBhcyBwbHVnaW5zIGlzIG5vcm1hbCAocGFydGljdWxhcmx5IGluIHRoZSB1bmluc3RhbGxlZCBjYXNlKQorICAgICAqLworICAgIG5ld3BsdWdpbiA9IGdzdF9wbHVnaW5fbG9hZF9maWxlIChmaWxlbmFtZSwgTlVMTCk7CisgIH0KKworICBpZiAobmV3cGx1Z2luKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoY29udGV4dC0+cmVnaXN0cnksICJtYXJraW5nIG5ldyBwbHVnaW4gJXAgYXMgcmVnaXN0ZXJlZCIsCisgICAgICAgIG5ld3BsdWdpbik7CisgICAgbmV3cGx1Z2luLT5yZWdpc3RlcmVkID0gVFJVRTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChuZXdwbHVnaW4pOworICAgIGNoYW5nZWQgPSBUUlVFOworICB9CisKKyAgcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgoraXNfYmxhY2tsaXN0ZWRfaGlkZGVuX2RpcmVjdG9yeSAoY29uc3QgZ2NoYXIgKiBkaXJlbnQpCit7CisgIGlmIChHX0xJS0VMWSAoZGlyZW50WzBdICE9ICcuJykpCisgICAgcmV0dXJuIEZBTFNFOworCisgIC8qIHNraXAgdGhlIC5kZWJ1ZyBkaXJlY3RvcnksIHRoZXNlIGNvbnRhaW4gZWxmIGZpbGVzIHRoYXQgYXJlIG5vdAorICAgKiB1c2VmdWwgb3Igd29yc2UsIGNhbiBjcmFzaCBkbG9wZW4gKCkgKi8KKyAgaWYgKHN0cmNtcCAoZGlyZW50LCAiLmRlYnVnIikgPT0gMCkKKyAgICByZXR1cm4gVFJVRTsKKworICAvKiBjYW4gYWxzbyBza2lwIC5naXQgYW5kIC5kZXBzIGRpcnMsIHRob3NlIHdvbid0IGNvbnRhaW4gdXNlZnVsIGZpbGVzLgorICAgKiBUaGlzIHNwZWVkcyB1cCBzY2FubmluZyBhIGJpdCBpbiB1bmluc3RhbGxlZCBzZXR1cHMuICovCisgIGlmIChzdHJjbXAgKGRpcmVudCwgIi5naXQiKSA9PSAwIHx8IHN0cmNtcCAoZGlyZW50LCAiLmRlcHMiKSA9PSAwKQorICAgIHJldHVybiBUUlVFOworCisgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2xldmVsIChHc3RSZWdpc3RyeVNjYW5Db250ZXh0ICogY29udGV4dCwKKyAgICBjb25zdCBnY2hhciAqIHBhdGgsIGludCBsZXZlbCkKK3sKKyAgR0RpciAqZGlyOworICBjb25zdCBnY2hhciAqZGlyZW50OworICBnY2hhciAqZmlsZW5hbWU7CisgIEdzdFBsdWdpbiAqcGx1Z2luOworICBnYm9vbGVhbiBjaGFuZ2VkID0gRkFMU0U7CisKKyAgZGlyID0gZ19kaXJfb3BlbiAocGF0aCwgMCwgTlVMTCk7CisgIGlmICghZGlyKQorICAgIHJldHVybiBGQUxTRTsKKworICB3aGlsZSAoKGRpcmVudCA9IGdfZGlyX3JlYWRfbmFtZSAoZGlyKSkpIHsKKyAgICBHU3RhdEJ1ZiBmaWxlX3N0YXR1czsKKworICAgIGZpbGVuYW1lID0gZ19idWlsZF9maWxlbmFtZSAocGF0aCwgZGlyZW50LCBOVUxMKTsKKyAgICBpZiAoZ19zdGF0IChmaWxlbmFtZSwgJmZpbGVfc3RhdHVzKSA8IDApIHsKKyAgICAgIC8qIFBsdWdpbiB3aWxsIGJlIHJlbW92ZWQgZnJvbSBjYWNoZSBhZnRlciB0aGUgc2NhbiBjb21wbGV0ZXMgaWYgaXQKKyAgICAgICAqIGlzIHN0aWxsIG1hcmtlZCAnY2FjaGVkJyAqLworICAgICAgZ19mcmVlIChmaWxlbmFtZSk7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBpZiAoZmlsZV9zdGF0dXMuc3RfbW9kZSAmIFNfSUZESVIpIHsKKyAgICAgIGlmIChHX1VOTElLRUxZIChpc19ibGFja2xpc3RlZF9oaWRkZW5fZGlyZWN0b3J5IChkaXJlbnQpKSkgeworICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUIChjb250ZXh0LT5yZWdpc3RyeSwgImlnbm9yaW5nICVzIGRpcmVjdG9yeSIsIGRpcmVudCk7CisgICAgICAgIGdfZnJlZSAoZmlsZW5hbWUpOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIC8qIEZJWE1FIDAuMTE6IERvbid0IHJlY3Vyc2UgaW50byBkaXJlY3RvcmllcywgdGhpcyBiZWhhdmlvdXIKKyAgICAgICAqIGlzIGluY29uc2lzdGVudCB3aXRoIG90aGVyIFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICAgICAgKi8KKyAgICAgIGlmIChsZXZlbCA+IDApIHsKKyAgICAgICAgR1NUX0xPR19PQkpFQ1QgKGNvbnRleHQtPnJlZ2lzdHJ5LCAicmVjdXJzaW5nIGludG8gZGlyZWN0b3J5ICVzIiwKKyAgICAgICAgICAgIGZpbGVuYW1lKTsKKyAgICAgICAgY2hhbmdlZCB8PSBnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2xldmVsIChjb250ZXh0LCBmaWxlbmFtZSwgbGV2ZWwgLSAxKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIEdTVF9MT0dfT0JKRUNUIChjb250ZXh0LT5yZWdpc3RyeSwgIm5vdCByZWN1cnNpbmcgaW50byBkaXJlY3RvcnkgJXMsICIKKyAgICAgICAgICAgICJyZWN1cnNpb24gbGV2ZWwgdG9vIGRlZXAiLCBmaWxlbmFtZSk7CisgICAgICB9CisgICAgICBnX2ZyZWUgKGZpbGVuYW1lKTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBpZiAoIShmaWxlX3N0YXR1cy5zdF9tb2RlICYgU19JRlJFRykpIHsKKyAgICAgIEdTVF9UUkFDRV9PQkpFQ1QgKGNvbnRleHQtPnJlZ2lzdHJ5LCAiJXMgaXMgbm90IGEgcmVndWxhciBmaWxlLCBpZ25vcmluZyIsCisgICAgICAgICAgZmlsZW5hbWUpOworICAgICAgZ19mcmVlIChmaWxlbmFtZSk7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgaWYgKCFnX3N0cl9oYXNfc3VmZml4IChkaXJlbnQsIEdfTU9EVUxFX1NVRkZJWCkKKyNpZmRlZiBHU1RfRVhUUkFfTU9EVUxFX1NVRkZJWAorICAgICAgICAmJiAhZ19zdHJfaGFzX3N1ZmZpeCAoZGlyZW50LCBHU1RfRVhUUkFfTU9EVUxFX1NVRkZJWCkKKyNlbmRpZgorICAgICAgICApIHsKKyAgICAgIEdTVF9UUkFDRV9PQkpFQ1QgKGNvbnRleHQtPnJlZ2lzdHJ5LAorICAgICAgICAgICJleHRlbnNpb24gaXMgbm90IHJlY29nbml6ZWQgYXMgbW9kdWxlIGZpbGUsIGlnbm9yaW5nIGZpbGUgJXMiLAorICAgICAgICAgIGZpbGVuYW1lKTsKKyAgICAgIGdfZnJlZSAoZmlsZW5hbWUpOworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgR1NUX0xPR19PQkpFQ1QgKGNvbnRleHQtPnJlZ2lzdHJ5LCAiZmlsZSAlcyBsb29rcyBsaWtlIGEgcG9zc2libGUgbW9kdWxlIiwKKyAgICAgICAgZmlsZW5hbWUpOworCisgICAgLyogdHJ5IHRvIGF2b2lkIHVubmVjZXNzYXJ5IHBsdWdpbi1tb3ZlIHBhaW4gKi8KKyAgICBpZiAoZ19zdHJfaGFzX3ByZWZpeCAoZGlyZW50LCAibGliZ3N0dmFsdmUiKSB8fAorICAgICAgICBnX3N0cl9oYXNfcHJlZml4IChkaXJlbnQsICJsaWJnc3RzZWxlY3RvciIpKSB7CisgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGNvbnRleHQtPnJlZ2lzdHJ5LCAiaWdub3Jpbmcgb2xkIHBsdWdpbiAlcyB3aGljaCAiCisgICAgICAgICAgImhhcyBiZWVuIG1lcmdlZCBpbnRvIHRoZSBjb3JlbGVtZW50cyBwbHVnaW4iLCBmaWxlbmFtZSk7CisgICAgICAvKiBQbHVnaW4gd2lsbCBiZSByZW1vdmVkIGZyb20gY2FjaGUgYWZ0ZXIgdGhlIHNjYW4gY29tcGxldGVzIGlmIGl0CisgICAgICAgKiBpcyBzdGlsbCBtYXJrZWQgJ2NhY2hlZCcgKi8KKyAgICAgIGdfZnJlZSAoZmlsZW5hbWUpOworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgLyogcGx1Zy1pbnMgYXJlIGNvbnNpZGVyZWQgdW5pcXVlIGJ5IGJhc2VuYW1lOyBpZiB0aGUgZ2l2ZW4gbmFtZQorICAgICAqIHdhcyBhbHJlYWR5IHNlZW4gYnkgdGhlIHJlZ2lzdHJ5LCB3ZSBpZ25vcmUgaXQgKi8KKyAgICBwbHVnaW4gPSBnc3RfcmVnaXN0cnlfbG9va3VwX2JuIChjb250ZXh0LT5yZWdpc3RyeSwgZGlyZW50KTsKKyAgICBpZiAocGx1Z2luKSB7CisgICAgICBnYm9vbGVhbiBlbnZfdmFyc19jaGFuZ2VkLCBkZXBzX2NoYW5nZWQgPSBGQUxTRTsKKworICAgICAgaWYgKHBsdWdpbi0+cmVnaXN0ZXJlZCkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChjb250ZXh0LT5yZWdpc3RyeSwKKyAgICAgICAgICAgICJwbHVnaW4gYWxyZWFkeSByZWdpc3RlcmVkIGZyb20gcGF0aCBcIiVzXCIiLAorICAgICAgICAgICAgR1NUX1NUUl9OVUxMIChwbHVnaW4tPmZpbGVuYW1lKSk7CisgICAgICAgIGdfZnJlZSAoZmlsZW5hbWUpOworICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwbHVnaW4pOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgZW52X3ZhcnNfY2hhbmdlZCA9IF9wcml2X3BsdWdpbl9kZXBzX2Vudl92YXJzX2NoYW5nZWQgKHBsdWdpbik7CisKKyAgICAgIC8qIElmIGEgZmlsZSB3aXRoIGEgY2VydGFpbiBiYXNlbmFtZSBpcyBzZWVuIG9uIGEgZGlmZmVyZW50IHBhdGgsCisgICAgICAgKiB1cGRhdGUgdGhlIHBsdWdpbiB0byBlbnN1cmUgdGhlIHJlZ2lzdHJ5IGNhY2hlIHdpbGwgcmVmbGVjdCB1cAorICAgICAgICogdG8gZGF0ZSBpbmZvcm1hdGlvbiAqLworCisgICAgICBpZiAocGx1Z2luLT5maWxlX210aW1lID09IGZpbGVfc3RhdHVzLnN0X210aW1lICYmCisgICAgICAgICAgcGx1Z2luLT5maWxlX3NpemUgPT0gZmlsZV9zdGF0dXMuc3Rfc2l6ZSAmJiAhZW52X3ZhcnNfY2hhbmdlZCAmJgorICAgICAgICAgICEoZGVwc19jaGFuZ2VkID0gX3ByaXZfcGx1Z2luX2RlcHNfZmlsZXNfY2hhbmdlZCAocGx1Z2luKSkgJiYKKyAgICAgICAgICAhc3RyY21wIChwbHVnaW4tPmZpbGVuYW1lLCBmaWxlbmFtZSkpIHsKKyAgICAgICAgR1NUX0xPR19PQkpFQ1QgKGNvbnRleHQtPnJlZ2lzdHJ5LCAiZmlsZSAlcyBjYWNoZWQiLCBmaWxlbmFtZSk7CisgICAgICAgIHBsdWdpbi0+ZmxhZ3MgJj0gfkdTVF9QTFVHSU5fRkxBR19DQUNIRUQ7CisgICAgICAgIEdTVF9MT0dfT0JKRUNUIChjb250ZXh0LT5yZWdpc3RyeSwKKyAgICAgICAgICAgICJtYXJraW5nIHBsdWdpbiAlcCBhcyByZWdpc3RlcmVkIGFzICVzIiwgcGx1Z2luLCBmaWxlbmFtZSk7CisgICAgICAgIHBsdWdpbi0+cmVnaXN0ZXJlZCA9IFRSVUU7CisgICAgICB9IGVsc2UgeworICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKGNvbnRleHQtPnJlZ2lzdHJ5LCAiY2FjaGVkIGluZm8gZm9yICVzIGlzIHN0YWxlIiwKKyAgICAgICAgICAgIGZpbGVuYW1lKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoY29udGV4dC0+cmVnaXN0cnksICJtdGltZSAlIiBHX0dJTlQ2NF9GT1JNQVQgIiAhPSAlIgorICAgICAgICAgICAgR19HSU5UNjRfRk9STUFUICIgb3Igc2l6ZSAlIiBHX0dJTlQ2NF9GT1JNQVQgIiAhPSAlIgorICAgICAgICAgICAgR19HSU5UNjRfRk9STUFUICIgb3IgZXh0ZXJuYWwgZGVwZW5kZW5jeSBlbnZfdmFycyBjaGFuZ2VkOiAlZCBvciIKKyAgICAgICAgICAgICIgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIGNoYW5nZWQ6ICVkIG9yIG9sZCBwYXRoICVzICE9IG5ldyBwYXRoICVzIiwKKyAgICAgICAgICAgIChnaW50NjQpIHBsdWdpbi0+ZmlsZV9tdGltZSwgKGdpbnQ2NCkgZmlsZV9zdGF0dXMuc3RfbXRpbWUsCisgICAgICAgICAgICAoZ2ludDY0KSBwbHVnaW4tPmZpbGVfc2l6ZSwgKGdpbnQ2NCkgZmlsZV9zdGF0dXMuc3Rfc2l6ZSwKKyAgICAgICAgICAgIGVudl92YXJzX2NoYW5nZWQsIGRlcHNfY2hhbmdlZCwgcGx1Z2luLT5maWxlbmFtZSwgZmlsZW5hbWUpOworICAgICAgICBnc3RfcmVnaXN0cnlfcmVtb3ZlX3BsdWdpbiAoY29udGV4dC0+cmVnaXN0cnksIHBsdWdpbik7CisgICAgICAgIGNoYW5nZWQgfD0gZ3N0X3JlZ2lzdHJ5X3NjYW5fcGx1Z2luX2ZpbGUgKGNvbnRleHQsIGZpbGVuYW1lLAorICAgICAgICAgICAgZmlsZV9zdGF0dXMuc3Rfc2l6ZSwgZmlsZV9zdGF0dXMuc3RfbXRpbWUpOworICAgICAgfQorICAgICAgZ3N0X29iamVjdF91bnJlZiAocGx1Z2luKTsKKworICAgIH0gZWxzZSB7CisgICAgICBHU1RfREVCVUdfT0JKRUNUIChjb250ZXh0LT5yZWdpc3RyeSwgImZpbGUgJXMgbm90IHlldCBpbiByZWdpc3RyeSIsCisgICAgICAgICAgZmlsZW5hbWUpOworICAgICAgY2hhbmdlZCB8PSBnc3RfcmVnaXN0cnlfc2Nhbl9wbHVnaW5fZmlsZSAoY29udGV4dCwgZmlsZW5hbWUsCisgICAgICAgICAgZmlsZV9zdGF0dXMuc3Rfc2l6ZSwgZmlsZV9zdGF0dXMuc3RfbXRpbWUpOworICAgIH0KKworICAgIGdfZnJlZSAoZmlsZW5hbWUpOworICB9CisKKyAgZ19kaXJfY2xvc2UgKGRpcik7CisKKyAgcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9pbnRlcm5hbCAoR3N0UmVnaXN0cnlTY2FuQ29udGV4dCAqIGNvbnRleHQsCisgICAgY29uc3QgZ2NoYXIgKiBwYXRoKQoreworICBnYm9vbGVhbiBjaGFuZ2VkOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKGNvbnRleHQtPnJlZ2lzdHJ5LCAic2Nhbm5pbmcgcGF0aCAlcyIsIHBhdGgpOworICBjaGFuZ2VkID0gZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9sZXZlbCAoY29udGV4dCwgcGF0aCwgMTApOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKGNvbnRleHQtPnJlZ2lzdHJ5LCAicmVnaXN0cnkgY2hhbmdlZCBpbiBwYXRoICVzOiAlZCIsIHBhdGgsCisgICAgICBjaGFuZ2VkKTsKKyAgcmV0dXJuIGNoYW5nZWQ7Cit9CisKKy8qKgorICogZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aDoKKyAqIEByZWdpc3RyeTogdGhlIHJlZ2lzdHJ5IHRvIGFkZCBmb3VuZCBwbHVnaW5zIHRvCisgKiBAcGF0aDogdGhlIHBhdGggdG8gc2NhbgorICoKKyAqIFNjYW4gdGhlIGdpdmVuIHBhdGggZm9yIHBsdWdpbnMgdG8gYWRkIHRvIHRoZSByZWdpc3RyeS4gVGhlIHN5bnRheCBvZiB0aGUKKyAqIHBhdGggaXMgc3BlY2lmaWMgdG8gdGhlIHJlZ2lzdHJ5LgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHJlZ2lzdHJ5IGNoYW5nZWQKKyAqLworZ2Jvb2xlYW4KK2dzdF9yZWdpc3RyeV9zY2FuX3BhdGggKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksIGNvbnN0IGdjaGFyICogcGF0aCkKK3sKKyAgR3N0UmVnaXN0cnlTY2FuQ29udGV4dCBjb250ZXh0OworICBnYm9vbGVhbiByZXN1bHQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19SRUdJU1RSWSAocmVnaXN0cnkpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwYXRoICE9IE5VTEwsIEZBTFNFKTsKKworICBpbml0X3NjYW5fY29udGV4dCAoJmNvbnRleHQsIHJlZ2lzdHJ5KTsKKworICByZXN1bHQgPSBnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2ludGVybmFsICgmY29udGV4dCwgcGF0aCk7CisKKyAgY2xlYXJfc2Nhbl9jb250ZXh0ICgmY29udGV4dCk7CisgIHJlc3VsdCB8PSBjb250ZXh0LmNoYW5nZWQ7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuCitfZ3N0X3BsdWdpbl9mZWF0dXJlX2ZpbHRlcl9wbHVnaW5fbmFtZSAoR3N0UGx1Z2luRmVhdHVyZSAqIGZlYXR1cmUsCisgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICByZXR1cm4gKHN0cmNtcCAoZmVhdHVyZS0+cGx1Z2luX25hbWUsIChnY2hhciAqKSB1c2VyX2RhdGEpID09IDApOworfQorCisvKioKKyAqIGdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2J5X3BsdWdpbjoKKyAqIEByZWdpc3RyeTogYSAjR3N0UmVnaXN0cnkuCisgKiBAbmFtZTogYSBwbHVnaW4gbmFtZS4KKyAqCisgKiBSZXRyaWV2ZXMgYSAjR0xpc3Qgb2YgZmVhdHVyZXMgb2YgdGhlIHBsdWdpbiB3aXRoIG5hbWUgQG5hbWUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChlbGVtZW50LXR5cGUgR3N0LlBsdWdpbkZlYXR1cmUpOiBhICNHTGlzdCBvZgorICogICAgICNHc3RQbHVnaW5GZWF0dXJlLiBVc2UgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSgpIGFmdGVyIHVzYWdlLgorICovCitHTGlzdCAqCitnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9ieV9wbHVnaW4gKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksCisgICAgY29uc3QgZ2NoYXIgKiBuYW1lKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1JFR0lTVFJZIChyZWdpc3RyeSksIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAobmFtZSAhPSBOVUxMLCBOVUxMKTsKKworICByZXR1cm4gZ3N0X3JlZ2lzdHJ5X2ZlYXR1cmVfZmlsdGVyIChyZWdpc3RyeSwKKyAgICAgIF9nc3RfcGx1Z2luX2ZlYXR1cmVfZmlsdGVyX3BsdWdpbl9uYW1lLCBGQUxTRSwgKGdwb2ludGVyKSBuYW1lKTsKK30KKworLyogVW5yZWYgYW5kIGRlbGV0ZSB0aGUgZGVmYXVsdCByZWdpc3RyeSAqLwordm9pZAorX3ByaXZfZ3N0X3JlZ2lzdHJ5X2NsZWFudXAgKHZvaWQpCit7CisgIEdzdFJlZ2lzdHJ5ICpyZWdpc3RyeTsKKworICBnX3N0YXRpY19tdXRleF9sb2NrICgmX2dzdF9yZWdpc3RyeV9tdXRleCk7CisgIGlmICgocmVnaXN0cnkgPSBfZ3N0X3JlZ2lzdHJ5X2RlZmF1bHQpICE9IE5VTEwpIHsKKyAgICBfZ3N0X3JlZ2lzdHJ5X2RlZmF1bHQgPSBOVUxMOworICB9CisgIGdfc3RhdGljX211dGV4X3VubG9jayAoJl9nc3RfcmVnaXN0cnlfbXV0ZXgpOworCisgIC8qIHVucmVmIG91dHNpZGUgb2YgdGhlIGxvY2sgYmVjYXVzZSB3ZSBjYW4uICovCisgIGlmIChyZWdpc3RyeSkKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChyZWdpc3RyeSk7Cit9CisKKy8qKgorICogZ3N0X2RlZmF1bHRfcmVnaXN0cnlfY2hlY2tfZmVhdHVyZV92ZXJzaW9uOgorICogQGZlYXR1cmVfbmFtZTogdGhlIG5hbWUgb2YgdGhlIGZlYXR1cmUgKGUuZy4gIm9nZ2RlbXV4IikKKyAqIEBtaW5fbWFqb3I6IHRoZSBtaW5pbXVtIG1ham9yIHZlcnNpb24gbnVtYmVyCisgKiBAbWluX21pbm9yOiB0aGUgbWluaW11bSBtaW5vciB2ZXJzaW9uIG51bWJlcgorICogQG1pbl9taWNybzogdGhlIG1pbmltdW0gbWljcm8gdmVyc2lvbiBudW1iZXIKKyAqCisgKiBDaGVja3Mgd2hldGhlciBhIHBsdWdpbiBmZWF0dXJlIGJ5IHRoZSBnaXZlbiBuYW1lIGV4aXN0cyBpbiB0aGUKKyAqIGRlZmF1bHQgcmVnaXN0cnkgYW5kIHdoZXRoZXIgaXRzIHZlcnNpb24gaXMgYXQgbGVhc3QgdGhlCisgKiB2ZXJzaW9uIHJlcXVpcmVkLgorICoKKyAqIFJldHVybnM6ICNUUlVFIGlmIHRoZSBmZWF0dXJlIGNvdWxkIGJlIGZvdW5kIGFuZCB0aGUgdmVyc2lvbiBpcworICogdGhlIHNhbWUgYXMgdGhlIHJlcXVpcmVkIHZlcnNpb24gb3IgbmV3ZXIsIGFuZCAjRkFMU0Ugb3RoZXJ3aXNlLgorICovCitnYm9vbGVhbgorZ3N0X2RlZmF1bHRfcmVnaXN0cnlfY2hlY2tfZmVhdHVyZV92ZXJzaW9uIChjb25zdCBnY2hhciAqIGZlYXR1cmVfbmFtZSwKKyAgICBndWludCBtaW5fbWFqb3IsIGd1aW50IG1pbl9taW5vciwgZ3VpbnQgbWluX21pY3JvKQoreworICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlOworICBHc3RSZWdpc3RyeSAqcmVnaXN0cnk7CisgIGdib29sZWFuIHJldCA9IEZBTFNFOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmZWF0dXJlX25hbWUgIT0gTlVMTCwgRkFMU0UpOworCisgIEdTVF9ERUJVRyAoIkxvb2tpbmcgdXAgcGx1Z2luIGZlYXR1cmUgJyVzJyIsIGZlYXR1cmVfbmFtZSk7CisKKyAgcmVnaXN0cnkgPSBnc3RfcmVnaXN0cnlfZ2V0X2RlZmF1bHQgKCk7CisgIGZlYXR1cmUgPSBnc3RfcmVnaXN0cnlfbG9va3VwX2ZlYXR1cmUgKHJlZ2lzdHJ5LCBmZWF0dXJlX25hbWUpOworICBpZiAoZmVhdHVyZSkgeworICAgIHJldCA9IGdzdF9wbHVnaW5fZmVhdHVyZV9jaGVja192ZXJzaW9uIChmZWF0dXJlLCBtaW5fbWFqb3IsIG1pbl9taW5vciwKKyAgICAgICAgbWluX21pY3JvKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChmZWF0dXJlKTsKKyAgfSBlbHNlIHsKKyAgICBHU1RfREVCVUcgKCJDb3VsZCBub3QgZmluZCBwbHVnaW4gZmVhdHVyZSAnJXMnIiwgZmVhdHVyZV9uYW1lKTsKKyAgfQorCisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCitsb2FkX3BsdWdpbl9mdW5jIChncG9pbnRlciBkYXRhLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIEdzdFBsdWdpbiAqcGx1Z2luOworICBjb25zdCBnY2hhciAqZmlsZW5hbWU7CisgIEdFcnJvciAqZXJyID0gTlVMTDsKKworICBmaWxlbmFtZSA9IChjb25zdCBnY2hhciAqKSBkYXRhOworICBHU1RfREVCVUcgKCJQcmUtbG9hZGluZyBwbHVnaW4gJXMiLCBmaWxlbmFtZSk7CisKKyAgcGx1Z2luID0gZ3N0X3BsdWdpbl9sb2FkX2ZpbGUgKGZpbGVuYW1lLCAmZXJyKTsKKworICBpZiAocGx1Z2luKSB7CisgICAgR1NUX0lORk8gKCJMb2FkZWQgcGx1Z2luOiBcIiVzXCIiLCBmaWxlbmFtZSk7CisKKyAgICBnc3RfZGVmYXVsdF9yZWdpc3RyeV9hZGRfcGx1Z2luIChwbHVnaW4pOworICB9IGVsc2UgeworICAgIGlmIChlcnIpIHsKKyAgICAgIC8qIFJlcG9ydCBlcnJvciB0byB1c2VyLCBhbmQgZnJlZSBlcnJvciAqLworICAgICAgR1NUX0VSUk9SICgiRmFpbGVkIHRvIGxvYWQgcGx1Z2luOiAlcyIsIGVyci0+bWVzc2FnZSk7CisgICAgICBnX2Vycm9yX2ZyZWUgKGVycik7CisgICAgfSBlbHNlIHsKKyAgICAgIEdTVF9XQVJOSU5HICgiRmFpbGVkIHRvIGxvYWQgcGx1Z2luOiBcIiVzXCIiLCBmaWxlbmFtZSk7CisgICAgfQorICB9Cit9CisKKyNpZm5kZWYgR1NUX0RJU0FCTEVfUkVHSVNUUlkKKy8qIFVucmVmIGFsbCBwbHVnaW5zIG1hcmtlZCAnY2FjaGVkJywgdG8gY2xlYXIgb2xkIHBsdWdpbnMgdGhhdCBubworICogbG9uZ2VyIGV4aXN0LiBSZXR1cm5zIFRSVUUgaWYgYW55IHBsdWdpbnMgd2VyZSByZW1vdmVkICovCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9yZWdpc3RyeV9yZW1vdmVfY2FjaGVfcGx1Z2lucyAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSkKK3sKKyAgR0xpc3QgKmc7CisgIEdMaXN0ICpnX25leHQ7CisgIEdzdFBsdWdpbiAqcGx1Z2luOworICBnYm9vbGVhbiBjaGFuZ2VkID0gRkFMU0U7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19SRUdJU1RSWSAocmVnaXN0cnkpLCBGQUxTRSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChyZWdpc3RyeSk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocmVnaXN0cnksICJyZW1vdmluZyBjYWNoZWQgcGx1Z2lucyIpOworICBnID0gcmVnaXN0cnktPnBsdWdpbnM7CisgIHdoaWxlIChnKSB7CisgICAgZ19uZXh0ID0gZy0+bmV4dDsKKyAgICBwbHVnaW4gPSBnLT5kYXRhOworICAgIGlmIChwbHVnaW4tPmZsYWdzICYgR1NUX1BMVUdJTl9GTEFHX0NBQ0hFRCkgeworICAgICAgR1NUX0RFQlVHX09CSkVDVCAocmVnaXN0cnksICJyZW1vdmluZyBjYWNoZWQgcGx1Z2luIFwiJXNcIiIsCisgICAgICAgICAgR1NUX1NUUl9OVUxMIChwbHVnaW4tPmZpbGVuYW1lKSk7CisgICAgICByZWdpc3RyeS0+cGx1Z2lucyA9IGdfbGlzdF9kZWxldGVfbGluayAocmVnaXN0cnktPnBsdWdpbnMsIGcpOworICAgICAgaWYgKEdfTElLRUxZIChwbHVnaW4tPmJhc2VuYW1lKSkKKyAgICAgICAgZ19oYXNoX3RhYmxlX3JlbW92ZSAocmVnaXN0cnktPmJhc2VuYW1lX2hhc2gsIHBsdWdpbi0+YmFzZW5hbWUpOworICAgICAgZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9mZWF0dXJlc19mb3JfcGx1Z2luX3VubG9ja2VkIChyZWdpc3RyeSwgcGx1Z2luKTsKKyAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBsdWdpbik7CisgICAgICBjaGFuZ2VkID0gVFJVRTsKKyAgICB9CisgICAgZyA9IGdfbmV4dDsKKyAgfQorCisgIEdTVF9PQkpFQ1RfVU5MT0NLIChyZWdpc3RyeSk7CisKKyAgcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3R5cGVkZWYgZW51bQoreworICBSRUdJU1RSWV9TQ0FOX0FORF9VUERBVEVfRkFJTFVSRSA9IDAsCisgIFJFR0lTVFJZX1NDQU5fQU5EX1VQREFURV9TVUNDRVNTX05PVF9DSEFOR0VELAorICBSRUdJU1RSWV9TQ0FOX0FORF9VUERBVEVfU1VDQ0VTU19VUERBVEVECit9IEdzdFJlZ2lzdHJ5U2NhbkFuZFVwZGF0ZVJlc3VsdDsKKworLyoKKyAqIHNjYW5fYW5kX3VwZGF0ZV9yZWdpc3RyeToKKyAqIEBkZWZhdWx0X3JlZ2lzdHJ5OiB0aGUgI0dzdFJlZ2lzdHJ5CisgKiBAcmVnaXN0cnlfZmlsZTogcmVnaXN0cnkgZmlsZW5hbWUKKyAqIEB3cml0ZV9jaGFuZ2VzOiB3cml0ZSByZWdpc3RyeSBpZiBpdCBoYXMgY2hhbmdlZD8KKyAqCisgKiBTY2FucyBmb3IgcmVnaXN0cnkgY2hhbmdlcyBhbmQgZXZlbnR1YWxseSB1cGRhdGVzIHRoZSByZWdpc3RyeSBjYWNoZS4KKyAqCisgKiBSZXR1cm46ICVSRUdJU1RSWV9TQ0FOX0FORF9VUERBVEVfRkFJTFVSRSBpZiB0aGUgcmVnaXN0cnkgY291bGQgbm90IHNjYW5uZWQKKyAqICAgICAgICAgb3IgdXBkYXRlZCwgJVJFR0lTVFJZX1NDQU5fQU5EX1VQREFURV9TVUNDRVNTX05PVF9DSEFOR0VEIGlmIHRoZQorICogICAgICAgICByZWdpc3RyeSBpcyBjbGVhbiBhbmQgJVJFR0lTVFJZX1NDQU5fQU5EX1VQREFURV9TVUNDRVNTX1VQREFURUQgaWYKKyAqICAgICAgICAgaXQgaGFzIGJlZW4gdXBkYXRlZCBhbmQgdGhlIGNhY2hlIG5lZWRzIHRvIGJlIHJlLXJlYWQuCisgKi8KK3N0YXRpYyBHc3RSZWdpc3RyeVNjYW5BbmRVcGRhdGVSZXN1bHQKK3NjYW5fYW5kX3VwZGF0ZV9yZWdpc3RyeSAoR3N0UmVnaXN0cnkgKiBkZWZhdWx0X3JlZ2lzdHJ5LAorICAgIGNvbnN0IGdjaGFyICogcmVnaXN0cnlfZmlsZSwgZ2Jvb2xlYW4gd3JpdGVfY2hhbmdlcywgR0Vycm9yICoqIGVycm9yKQoreworICBjb25zdCBnY2hhciAqcGx1Z2luX3BhdGg7CisgIGdib29sZWFuIGNoYW5nZWQgPSBGQUxTRTsKKyAgR0xpc3QgKmw7CisgIEdzdFJlZ2lzdHJ5U2NhbkNvbnRleHQgY29udGV4dDsKKworICBHU1RfSU5GTyAoIlZhbGlkYXRpbmcgcGx1Z2lucyBmcm9tIHJlZ2lzdHJ5IGNhY2hlOiAlcyIsIHJlZ2lzdHJ5X2ZpbGUpOworCisgIGluaXRfc2Nhbl9jb250ZXh0ICgmY29udGV4dCwgZGVmYXVsdF9yZWdpc3RyeSk7CisKKyAgLyogSXQgc291bmRzIHRlbXB0aW5nIHRvIGp1c3QgY29tcGFyZSB0aGUgbXRpbWUgb2YgZGlyZWN0b3JpZXMgd2l0aCB0aGUgbXRpbWUKKyAgICogb2YgdGhlIHJlZ2lzdHJ5IGNhY2hlLCBidXQgaXQgZG9lcyBub3Qgd29yay4gSXQgd291bGQgbm90IGNhdGNoIHVwZGF0ZWQKKyAgICogcGx1Z2lucywgd2hpY2ggbWlnaHQgYnJpbmcgbW9yZSBvciBsZXNzIGZlYXR1cmVzLgorICAgKi8KKworICAvKiBzY2FuIHBhdGhzIHNwZWNpZmllZCB2aWEgLS1nc3QtcGx1Z2luLXBhdGggKi8KKyAgR1NUX0RFQlVHICgic2Nhbm5pbmcgcGF0aHMgYWRkZWQgdmlhIC0tZ3N0LXBsdWdpbi1wYXRoIik7CisgIGZvciAobCA9IF9wcml2X2dzdF9wbHVnaW5fcGF0aHM7IGwgIT0gTlVMTDsgbCA9IGwtPm5leHQpIHsKKyAgICBHU1RfSU5GTyAoIlNjYW5uaW5nIHBsdWdpbiBwYXRoOiBcIiVzXCIiLCAoZ2NoYXIgKikgbC0+ZGF0YSk7CisgICAgY2hhbmdlZCB8PSBnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2ludGVybmFsICgmY29udGV4dCwgKGdjaGFyICopIGwtPmRhdGEpOworICB9CisgIC8qIGtlZXAgcGx1Z2luX3BhdGhzIGFyb3VuZCBpbiBjYXNlIGEgcmUtc2NhbiBpcyBmb3JjZWQgbGF0ZXIgb24gKi8KKworICAvKiBHU1RfUExVR0lOX1BBVEggc3BlY2lmaWVzIGEgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzY2FuIGZvcgorICAgKiBhZGRpdGlvbmFsIHBsdWdpbnMuICBUaGVzZSB0YWtlIHByZWNlZGVuY2Ugb3ZlciB0aGUgc3lzdGVtIHBsdWdpbnMgKi8KKyAgcGx1Z2luX3BhdGggPSBnX2dldGVudiAoIkdTVF9QTFVHSU5fUEFUSCIpOworICBpZiAocGx1Z2luX3BhdGgpIHsKKyAgICBjaGFyICoqbGlzdDsKKyAgICBpbnQgaTsKKworICAgIEdTVF9ERUJVRyAoIkdTVF9QTFVHSU5fUEFUSCBzZXQgdG8gJXMiLCBwbHVnaW5fcGF0aCk7CisgICAgbGlzdCA9IGdfc3Ryc3BsaXQgKHBsdWdpbl9wYXRoLCBHX1NFQVJDSFBBVEhfU0VQQVJBVE9SX1MsIDApOworICAgIGZvciAoaSA9IDA7IGxpc3RbaV07IGkrKykgeworICAgICAgY2hhbmdlZCB8PSBnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2ludGVybmFsICgmY29udGV4dCwgbGlzdFtpXSk7CisgICAgfQorICAgIGdfc3RyZnJlZXYgKGxpc3QpOworICB9IGVsc2UgeworICAgIEdTVF9ERUJVRyAoIkdTVF9QTFVHSU5fUEFUSCBub3Qgc2V0Iik7CisgIH0KKworICAvKiBHU1RfUExVR0lOX1NZU1RFTV9QQVRIIHNwZWNpZmllcyBhIGxpc3Qgb2YgcGx1Z2lucyB0aGF0IGFyZSBhbHdheXMKKyAgICogbG9hZGVkIGJ5IGRlZmF1bHQuICBJZiBub3Qgc2V0LCB0aGlzIGRlZmF1bHRzIHRvIHRoZSBzeXN0ZW0taW5zdGFsbGVkCisgICAqIHBhdGgsIGFuZCB0aGUgcGx1Z2lucyBpbnN0YWxsZWQgaW4gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSAqLworICBwbHVnaW5fcGF0aCA9IGdfZ2V0ZW52ICgiR1NUX1BMVUdJTl9TWVNURU1fUEFUSCIpOworICBpZiAocGx1Z2luX3BhdGggPT0gTlVMTCkgeworICAgIGNoYXIgKmhvbWVfcGx1Z2luczsKKworICAgIEdTVF9ERUJVRyAoIkdTVF9QTFVHSU5fU1lTVEVNX1BBVEggbm90IHNldCIpOworCisgICAgLyogcGx1Z2lucyBpbiB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IHRha2UgcHJlY2VkZW5jZSBvdmVyCisgICAgICogc3lzdGVtLWluc3RhbGxlZCBvbmVzICovCisgICAgaG9tZV9wbHVnaW5zID0gZ19idWlsZF9maWxlbmFtZSAoZ19nZXRfdXNlcl9kYXRhX2RpciAoKSwKKyAgICAgICAgImdzdHJlYW1lci0iIEdTVF9NQUpPUk1JTk9SLCAicGx1Z2lucyIsIE5VTEwpOworCisgICAgR1NUX0RFQlVHICgic2Nhbm5pbmcgaG9tZSBwbHVnaW5zICVzIiwgaG9tZV9wbHVnaW5zKTsKKyAgICBjaGFuZ2VkIHw9IGdzdF9yZWdpc3RyeV9zY2FuX3BhdGhfaW50ZXJuYWwgKCZjb250ZXh0LCBob21lX3BsdWdpbnMpOworICAgIGdfZnJlZSAoaG9tZV9wbHVnaW5zKTsKKworICAgIC8qIGFkZCB0aGUgbWFpbiAoaW5zdGFsbGVkKSBsaWJyYXJ5IHBhdGggKi8KKyAgICBHU1RfREVCVUcgKCJzY2FubmluZyBtYWluIHBsdWdpbnMgJXMiLCBQTFVHSU5ESVIpOworICAgIGNoYW5nZWQgfD0gZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9pbnRlcm5hbCAoJmNvbnRleHQsIFBMVUdJTkRJUik7CisKKyNpZmRlZiBHX09TX1dJTjMyCisgICAgeworICAgICAgY2hhciAqYmFzZV9kaXI7CisgICAgICBjaGFyICpkaXI7CisKKyAgICAgIGJhc2VfZGlyID0KKyAgICAgICAgICBnX3dpbjMyX2dldF9wYWNrYWdlX2luc3RhbGxhdGlvbl9kaXJlY3Rvcnlfb2ZfbW9kdWxlCisgICAgICAgICAgKF9wcml2X2dzdF9kbGxfaGFuZGxlKTsKKworICAgICAgZGlyID0gZ19idWlsZF9maWxlbmFtZSAoYmFzZV9kaXIsICJsaWIiLCAiZ3N0cmVhbWVyLTAuMTAiLCBOVUxMKTsKKyAgICAgIEdTVF9ERUJVRyAoInNjYW5uaW5nIERMTCBkaXIgJXMiLCBkaXIpOworCisgICAgICBjaGFuZ2VkIHw9IGdzdF9yZWdpc3RyeV9zY2FuX3BhdGhfaW50ZXJuYWwgKCZjb250ZXh0LCBkaXIpOworCisgICAgICBnX2ZyZWUgKGRpcik7CisgICAgICBnX2ZyZWUgKGJhc2VfZGlyKTsKKyAgICB9CisjZW5kaWYKKyAgfSBlbHNlIHsKKyAgICBnY2hhciAqKmxpc3Q7CisgICAgZ2ludCBpOworCisgICAgR1NUX0RFQlVHICgiR1NUX1BMVUdJTl9TWVNURU1fUEFUSCBzZXQgdG8gJXMiLCBwbHVnaW5fcGF0aCk7CisgICAgbGlzdCA9IGdfc3Ryc3BsaXQgKHBsdWdpbl9wYXRoLCBHX1NFQVJDSFBBVEhfU0VQQVJBVE9SX1MsIDApOworICAgIGZvciAoaSA9IDA7IGxpc3RbaV07IGkrKykgeworICAgICAgY2hhbmdlZCB8PSBnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2ludGVybmFsICgmY29udGV4dCwgbGlzdFtpXSk7CisgICAgfQorICAgIGdfc3RyZnJlZXYgKGxpc3QpOworICB9CisKKyAgY2xlYXJfc2Nhbl9jb250ZXh0ICgmY29udGV4dCk7CisgIGNoYW5nZWQgfD0gY29udGV4dC5jaGFuZ2VkOworCisgIC8qIFJlbW92ZSBjYWNoZWQgcGx1Z2lucyBzbyBzdGFsZSBpbmZvIGlzIGNsZWFyZWQuICovCisgIGNoYW5nZWQgfD0gZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9jYWNoZV9wbHVnaW5zIChkZWZhdWx0X3JlZ2lzdHJ5KTsKKworICBpZiAoIWNoYW5nZWQpIHsKKyAgICBHU1RfSU5GTyAoIlJlZ2lzdHJ5IGNhY2hlIGhhcyBub3QgY2hhbmdlZCIpOworICAgIHJldHVybiBSRUdJU1RSWV9TQ0FOX0FORF9VUERBVEVfU1VDQ0VTU19OT1RfQ0hBTkdFRDsKKyAgfQorCisgIGlmICghd3JpdGVfY2hhbmdlcykgeworICAgIEdTVF9JTkZPICgiUmVnaXN0cnkgY2FjaGUgY2hhbmdlZCwgYnV0IHdyaXRpbmcgaXMgZGlzYWJsZWQuIE5vdCB3cml0aW5nLiIpOworICAgIHJldHVybiBSRUdJU1RSWV9TQ0FOX0FORF9VUERBVEVfRkFJTFVSRTsKKyAgfQorCisgIEdTVF9JTkZPICgiUmVnaXN0cnkgY2FjaGUgY2hhbmdlZC4gV3JpdGluZyBuZXcgcmVnaXN0cnkgY2FjaGUiKTsKKyAgaWYgKCFwcml2X2dzdF9yZWdpc3RyeV9iaW5hcnlfd3JpdGVfY2FjaGUgKGRlZmF1bHRfcmVnaXN0cnksIHJlZ2lzdHJ5X2ZpbGUpKSB7CisgICAgZ19zZXRfZXJyb3IgKGVycm9yLCBHU1RfQ09SRV9FUlJPUiwgR1NUX0NPUkVfRVJST1JfRkFJTEVELAorICAgICAgICBfKCJFcnJvciB3cml0aW5nIHJlZ2lzdHJ5IGNhY2hlIHRvICVzOiAlcyIpLAorICAgICAgICByZWdpc3RyeV9maWxlLCBnX3N0cmVycm9yIChlcnJubykpOworICAgIHJldHVybiBSRUdJU1RSWV9TQ0FOX0FORF9VUERBVEVfRkFJTFVSRTsKKyAgfQorCisgIEdTVF9JTkZPICgiUmVnaXN0cnkgY2FjaGUgd3JpdHRlbiBzdWNjZXNzZnVsbHkiKTsKKyAgcmV0dXJuIFJFR0lTVFJZX1NDQU5fQU5EX1VQREFURV9TVUNDRVNTX1VQREFURUQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZW5zdXJlX2N1cnJlbnRfcmVnaXN0cnkgKEdFcnJvciAqKiBlcnJvcikKK3sKKyAgZ2NoYXIgKnJlZ2lzdHJ5X2ZpbGU7CisgIEdzdFJlZ2lzdHJ5ICpkZWZhdWx0X3JlZ2lzdHJ5OworICBnYm9vbGVhbiByZXQgPSBUUlVFOworICBnYm9vbGVhbiBkb191cGRhdGUgPSBUUlVFOworICBnYm9vbGVhbiBoYXZlX2NhY2hlID0gVFJVRTsKKworICBkZWZhdWx0X3JlZ2lzdHJ5ID0gZ3N0X3JlZ2lzdHJ5X2dldF9kZWZhdWx0ICgpOworICByZWdpc3RyeV9maWxlID0gZ19zdHJkdXAgKGdfZ2V0ZW52ICgiR1NUX1JFR0lTVFJZIikpOworICBpZiAocmVnaXN0cnlfZmlsZSA9PSBOVUxMKSB7CisgICAgcmVnaXN0cnlfZmlsZSA9IGdfYnVpbGRfZmlsZW5hbWUgKGdfZ2V0X3VzZXJfY2FjaGVfZGlyICgpLAorICAgICAgICAiZ3N0cmVhbWVyLSIgR1NUX01BSk9STUlOT1IsICJyZWdpc3RyeS4iIEhPU1RfQ1BVICIuYmluIiwgTlVMTCk7CisgIH0KKworICBpZiAoIV9nc3RfZGlzYWJsZV9yZWdpc3RyeV9jYWNoZSkgeworICAgIEdTVF9JTkZPICgicmVhZGluZyByZWdpc3RyeSBjYWNoZTogJXMiLCByZWdpc3RyeV9maWxlKTsKKyAgICBoYXZlX2NhY2hlID0gcHJpdl9nc3RfcmVnaXN0cnlfYmluYXJ5X3JlYWRfY2FjaGUgKGRlZmF1bHRfcmVnaXN0cnksCisgICAgICAgIHJlZ2lzdHJ5X2ZpbGUpOworICAgIC8qIE9ubHkgZXZlciByZWFkIHRoZSByZWdpc3RyeSBjYWNoZSBvbmNlLCB0aGVuIGRpc2FibGUgaXQgZm9yCisgICAgICogc3Vic2VxdWVudCB1cGRhdGVzIGR1cmluZyB0aGUgcHJvZ3JhbSBsaWZldGltZSAqLworICAgIF9nc3RfZGlzYWJsZV9yZWdpc3RyeV9jYWNoZSA9IFRSVUU7CisgIH0KKworICBpZiAoaGF2ZV9jYWNoZSkgeworICAgIGRvX3VwZGF0ZSA9ICFfcHJpdl9nc3RfZGlzYWJsZV9yZWdpc3RyeV91cGRhdGU7CisgICAgaWYgKGRvX3VwZGF0ZSkgeworICAgICAgY29uc3QgZ2NoYXIgKnVwZGF0ZV9lbnY7CisKKyAgICAgIGlmICgodXBkYXRlX2VudiA9IGdfZ2V0ZW52ICgiR1NUX1JFR0lTVFJZX1VQREFURSIpKSkgeworICAgICAgICAvKiBkbyB1cGRhdGUgZm9yIGFueSB2YWx1ZSBkaWZmZXJlbnQgZnJvbSAibm8iICovCisgICAgICAgIGRvX3VwZGF0ZSA9IChzdHJjbXAgKHVwZGF0ZV9lbnYsICJubyIpICE9IDApOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChkb191cGRhdGUpIHsKKyAgICAvKiBub3cgY2hlY2sgcmVnaXN0cnkgKi8KKyAgICBHU1RfREVCVUcgKCJVcGRhdGluZyByZWdpc3RyeSBjYWNoZSIpOworICAgIHNjYW5fYW5kX3VwZGF0ZV9yZWdpc3RyeSAoZGVmYXVsdF9yZWdpc3RyeSwgcmVnaXN0cnlfZmlsZSwgVFJVRSwgZXJyb3IpOworICB9IGVsc2UgeworICAgIEdTVF9ERUJVRyAoIk5vdCB1cGRhdGluZyByZWdpc3RyeSBjYWNoZSAoZGlzYWJsZWQpIik7CisgIH0KKworICBnX2ZyZWUgKHJlZ2lzdHJ5X2ZpbGUpOworICBHU1RfSU5GTyAoInJlZ2lzdHJ5IHJlYWRpbmcgYW5kIHVwZGF0aW5nIGRvbmUsIHJlc3VsdCA9ICVkIiwgcmV0KTsKKworICByZXR1cm4gcmV0OworfQorI2VuZGlmIC8qIEdTVF9ESVNBQkxFX1JFR0lTVFJZICovCisKKy8qKgorICogZ3N0X3JlZ2lzdHJ5X2ZvcmtfaXNfZW5hYmxlZDoKKyAqCisgKiBCeSBkZWZhdWx0IEdTdHJlYW1lciB3aWxsIHBlcmZvcm0gc2Nhbm5pbmcgYW5kIHJlYnVpbGRpbmcgb2YgdGhlCisgKiByZWdpc3RyeSBmaWxlIHVzaW5nIGEgaGVscGVyIGNoaWxkIHByb2Nlc3MuCisgKgorICogQXBwbGljYXRpb25zIG1pZ2h0IHdhbnQgdG8gZGlzYWJsZSB0aGlzIGJlaGF2aW91ciB3aXRoIHRoZQorICogZ3N0X3JlZ2lzdHJ5X2Zvcmtfc2V0X2VuYWJsZWQoKSBmdW5jdGlvbiwgaW4gd2hpY2ggY2FzZSBuZXcgcGx1Z2lucworICogYXJlIHNjYW5uZWQgKGFuZCBsb2FkZWQpIGludG8gdGhlIGFwcGxpY2F0aW9uIHByb2Nlc3MuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgR1N0cmVhbWVyIHdpbGwgdXNlIHRoZSBjaGlsZCBoZWxwZXIgcHJvY2VzcyB3aGVuCisgKiByZWJ1aWxkaW5nIHRoZSByZWdpc3RyeS4KKyAqCisgKiBTaW5jZTogMC4xMC4xMAorICovCitnYm9vbGVhbgorZ3N0X3JlZ2lzdHJ5X2ZvcmtfaXNfZW5hYmxlZCAodm9pZCkKK3sKKyAgcmV0dXJuIF9nc3RfZW5hYmxlX3JlZ2lzdHJ5X2Zvcms7Cit9CisKKy8qKgorICogZ3N0X3JlZ2lzdHJ5X2Zvcmtfc2V0X2VuYWJsZWQ6CisgKiBAZW5hYmxlZDogd2hldGhlciByZWJ1aWxkaW5nIHRoZSByZWdpc3RyeSBjYW4gdXNlIGEgdGVtcG9yYXJ5IGNoaWxkIGhlbHBlciBwcm9jZXNzLgorICoKKyAqIEFwcGxpY2F0aW9ucyBtaWdodCB3YW50IHRvIGRpc2FibGUvZW5hYmxlIHNwYXduaW5nIG9mIGEgY2hpbGQgaGVscGVyIHByb2Nlc3MKKyAqIHdoZW4gcmVidWlsZGluZyB0aGUgcmVnaXN0cnkuIFNlZSBnc3RfcmVnaXN0cnlfZm9ya19pc19lbmFibGVkKCkgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uLgorICoKKyAqIFNpbmNlOiAwLjEwLjEwCisgKi8KK3ZvaWQKK2dzdF9yZWdpc3RyeV9mb3JrX3NldF9lbmFibGVkIChnYm9vbGVhbiBlbmFibGVkKQoreworICBfZ3N0X2VuYWJsZV9yZWdpc3RyeV9mb3JrID0gZW5hYmxlZDsKK30KKworLyoqCisgKiBnc3RfdXBkYXRlX3JlZ2lzdHJ5OgorICoKKyAqIEZvcmNlcyBHU3RyZWFtZXIgdG8gcmUtc2NhbiBpdHMgcGx1Z2luIHBhdGhzIGFuZCB1cGRhdGUgdGhlIGRlZmF1bHQKKyAqIHBsdWdpbiByZWdpc3RyeS4KKyAqCisgKiBBcHBsaWNhdGlvbnMgd2lsbCBhbG1vc3QgbmV2ZXIgbmVlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24sIGl0IGlzIG9ubHkKKyAqIHVzZWZ1bCBpZiB0aGUgYXBwbGljYXRpb24ga25vd3MgbmV3IHBsdWdpbnMgaGF2ZSBiZWVuIGluc3RhbGxlZCAob3Igb2xkCisgKiBvbmVzIHJlbW92ZWQpIHNpbmNlIHRoZSBzdGFydCBvZiB0aGUgYXBwbGljYXRpb24gKG9yLCB0byBiZSBwcmVjaXNlLCB0aGUKKyAqIGZpcnN0IGNhbGwgdG8gZ3N0X2luaXQoKSkgYW5kIHRoZSBhcHBsaWNhdGlvbiB3YW50cyB0byBtYWtlIHVzZSBvZiBhbnkKKyAqIG5ld2x5LWluc3RhbGxlZCBwbHVnaW5zIHdpdGhvdXQgcmVzdGFydGluZyB0aGUgYXBwbGljYXRpb24uCisgKgorICogQXBwbGljYXRpb25zIHNob3VsZCBhc3N1bWUgdGhhdCB0aGUgcmVnaXN0cnkgdXBkYXRlIGlzIG5laXRoZXIgYXRvbWljIG5vcgorICogdGhyZWFkLXNhZmUgYW5kIHNob3VsZCB0aGVyZWZvcmUgbm90IGhhdmUgYW55IGR5bmFtaWMgcGlwZWxpbmVzIHJ1bm5pbmcKKyAqIChpbmNsdWRpbmcgdGhlIHBsYXliaW4gYW5kIGRlY29kZWJpbiBlbGVtZW50cykgYW5kIHNob3VsZCBhbHNvIG5vdCBjcmVhdGUKKyAqIGFueSBlbGVtZW50cyBvciBhY2Nlc3MgdGhlIEdTdHJlYW1lciByZWdpc3RyeSB3aGlsZSB0aGUgdXBkYXRlIGlzIGluCisgKiBwcm9ncmVzcy4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBtYXkgYmxvY2sgZm9yIGEgc2lnbmlmaWNhbnQgYW1vdW50IG9mIHRpbWUuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHJlZ2lzdHJ5IGhhcyBiZWVuIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IChkb2VzIG5vdAorICogICAgICAgICAgaW1wbHkgdGhhdCB0aGVyZSB3ZXJlIGNoYW5nZXMpLCBvdGhlcndpc2UgJUZBTFNFLgorICoKKyAqIFNpbmNlOiAwLjEwLjEyCisgKi8KK2dib29sZWFuCitnc3RfdXBkYXRlX3JlZ2lzdHJ5ICh2b2lkKQoreworICBnYm9vbGVhbiByZXM7CisKKyNpZm5kZWYgR1NUX0RJU0FCTEVfUkVHSVNUUlkKKyAgR0Vycm9yICplcnIgPSBOVUxMOworCisgIHJlcyA9IGVuc3VyZV9jdXJyZW50X3JlZ2lzdHJ5ICgmZXJyKTsKKyAgaWYgKGVycikgeworICAgIEdTVF9XQVJOSU5HICgicmVnaXN0cnkgdXBkYXRlIGZhaWxlZDogJXMiLCBlcnItPm1lc3NhZ2UpOworICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKKyAgfSBlbHNlIHsKKyAgICBHU1RfTE9HICgicmVnaXN0cnkgdXBkYXRlIHN1Y2NlZWRlZCIpOworICB9CisKKyNlbHNlCisgIEdTVF9XQVJOSU5HICgicmVnaXN0cnkgdXBkYXRlIGZhaWxlZDogJXMiLCAicmVnaXN0cnkgZGlzYWJsZWQiKTsKKyAgcmVzID0gVFJVRTsKKyNlbmRpZiAvKiBHU1RfRElTQUJMRV9SRUdJU1RSWSAqLworCisgIGlmIChfcHJpdl9nc3RfcHJlbG9hZF9wbHVnaW5zKSB7CisgICAgR1NUX0RFQlVHICgiUHJlbG9hZGluZyBpbmRpY2F0ZWQgcGx1Z2lucy4uLiIpOworICAgIGdfc2xpc3RfZm9yZWFjaCAoX3ByaXZfZ3N0X3ByZWxvYWRfcGx1Z2lucywgbG9hZF9wbHVnaW5fZnVuYywgTlVMTCk7CisgIH0KKworICByZXR1cm4gcmVzOworfQorCisvKioKKyAqIGdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2Nvb2tpZToKKyAqIEByZWdpc3RyeTogdGhlIHJlZ2lzdHJ5CisgKgorICogUmV0dXJucyB0aGUgcmVnaXN0cnlzIGZlYXR1cmUgbGlzdCBjb29raWUuIFRoaXMgY2hhbmdlcworICogZXZlcnkgdGltZSBhIGZlYXR1cmUgaXMgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIHRoZSByZWdpc3RyeS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgZmVhdHVyZSBsaXN0IGNvb2tpZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yNgorICovCitndWludDMyCitnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9jb29raWUgKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnkpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUkVHSVNUUlkgKHJlZ2lzdHJ5KSwgMCk7CisKKyAgcmV0dXJuIHJlZ2lzdHJ5LT5wcml2LT5jb29raWU7Cit9CmRpZmYgLS1naXQgYS9nc3QvZ3N0cmVnaXN0cnkuaCBiL2dzdC9nc3RyZWdpc3RyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZDA3YzEKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0cmVnaXN0cnkuaApAQCAtMCwwICsxLDIyOSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNoZWxsby5iZT4KKyAqCisgKiBnc3RyZWdpc3RyeS5oOiBIZWFkZXIgZm9yIHJlZ2lzdHJ5IGhhbmRsaW5nCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworCisjaWZuZGVmIF9fR1NUX1JFR0lTVFJZX0hfXworI2RlZmluZSBfX0dTVF9SRUdJU1RSWV9IX18KKworI2luY2x1ZGUgPGdzdC9nc3Rjb25maWcuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0cGx1Z2luLmg+CisjaW5jbHVkZSA8Z3N0L2dzdHBsdWdpbmZlYXR1cmUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEdTVF9UWVBFX1JFR0lTVFJZIAkJKGdzdF9yZWdpc3RyeV9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgR1NUX1JFR0lTVFJZKG9iaikgCQkoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9SRUdJU1RSWSwgR3N0UmVnaXN0cnkpKQorI2RlZmluZSBHU1RfSVNfUkVHSVNUUlkob2JqKSAJCShHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX1JFR0lTVFJZKSkKKyNkZWZpbmUgR1NUX1JFR0lTVFJZX0NMQVNTKGtsYXNzKSAJKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9SRUdJU1RSWSwgR3N0UmVnaXN0cnlDbGFzcykpCisjZGVmaW5lIEdTVF9JU19SRUdJU1RSWV9DTEFTUyhrbGFzcykgCShHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfUkVHSVNUUlkpKQorI2RlZmluZSBHU1RfUkVHSVNUUllfR0VUX0NMQVNTKG9iaikgCShHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfUkVHSVNUUlksIEdzdFJlZ2lzdHJ5Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfR3N0UmVnaXN0cnkgR3N0UmVnaXN0cnk7Cit0eXBlZGVmIHN0cnVjdCBfR3N0UmVnaXN0cnlDbGFzcyBHc3RSZWdpc3RyeUNsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX0dzdFJlZ2lzdHJ5UHJpdmF0ZSBHc3RSZWdpc3RyeVByaXZhdGU7CisKKy8qKgorICogR3N0UmVnaXN0cnk6CisgKgorICogT3BhcXVlICNHc3RSZWdpc3RyeSBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBfR3N0UmVnaXN0cnkgeworICBHc3RPYmplY3QgCSBvYmplY3Q7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIEdMaXN0ICpwbHVnaW5zOworICBHTGlzdCAqZmVhdHVyZXM7CisKKyAgR0xpc3QgCSpwYXRoczsKKworICAvKiBGSVhNRSBtb3ZlIHRoZXNlIGVsc2V3aGVyZSAqLworICBpbnQgICAgICAgICAgICBjYWNoZV9maWxlOworCisgIC8qIGhhc2ggdG8gc3BlZWR1cCBfbG9va3VwX2ZlYXR1cmVfbG9ja2VkKCkgKi8KKyAgR0hhc2hUYWJsZSAqZmVhdHVyZV9oYXNoOworICAvKiBoYXNoIHRvIHNwZWVkdXAgX2xvb2t1cCAqLworICBHSGFzaFRhYmxlICpiYXNlbmFtZV9oYXNoOworCisgIEdzdFJlZ2lzdHJ5UHJpdmF0ZSAqcHJpdjsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Cit9OworCitzdHJ1Y3QgX0dzdFJlZ2lzdHJ5Q2xhc3MgeworICBHc3RPYmplY3RDbGFzcwlwYXJlbnRfY2xhc3M7CisKKyAgLyogc2lnbmFscyAqLworICB2b2lkIAkJCSgqcGx1Z2luX2FkZGVkKQkJKEdzdFJlZ2lzdHJ5ICpyZWdpc3RyeSwgR3N0UGx1Z2luICpwbHVnaW4pOworICB2b2lkIAkJCSgqZmVhdHVyZV9hZGRlZCkJKEdzdFJlZ2lzdHJ5ICpyZWdpc3RyeSwgR3N0UGx1Z2luRmVhdHVyZSAqZmVhdHVyZSk7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOworfTsKKworCisvKiBub3JtYWwgR09iamVjdCBzdHVmZiAqLworR1R5cGUJCQlnc3RfcmVnaXN0cnlfZ2V0X3R5cGUJCSh2b2lkKTsKKworR3N0UmVnaXN0cnkgKiAgICAgICAgICAgZ3N0X3JlZ2lzdHJ5X2dldF9kZWZhdWx0ICAgICAgICAodm9pZCk7CisKK2dib29sZWFuCQkJZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aAkJKEdzdFJlZ2lzdHJ5ICpyZWdpc3RyeSwgY29uc3QgZ2NoYXIgKnBhdGgpOwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X3JlZ2lzdHJ5X2FkZF9wYXRoICAgICAgICAgICAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwgY29uc3QgZ2NoYXIgKiBwYXRoKTsKK0dMaXN0KgkJCWdzdF9yZWdpc3RyeV9nZXRfcGF0aF9saXN0CShHc3RSZWdpc3RyeSAqcmVnaXN0cnkpOworCitnYm9vbGVhbgkJZ3N0X3JlZ2lzdHJ5X2FkZF9wbHVnaW4JCShHc3RSZWdpc3RyeSAqcmVnaXN0cnksIEdzdFBsdWdpbiAqcGx1Z2luKTsKK3ZvaWQJCQlnc3RfcmVnaXN0cnlfcmVtb3ZlX3BsdWdpbgkoR3N0UmVnaXN0cnkgKnJlZ2lzdHJ5LCBHc3RQbHVnaW4gKnBsdWdpbik7CitnYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfcmVnaXN0cnlfYWRkX2ZlYXR1cmUgICAgICAgIChHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5LCBHc3RQbHVnaW5GZWF0dXJlICogZmVhdHVyZSk7Cit2b2lkICAgICAgICAgICAgICAgICAgICBnc3RfcmVnaXN0cnlfcmVtb3ZlX2ZlYXR1cmUgICAgIChHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5LCBHc3RQbHVnaW5GZWF0dXJlICogZmVhdHVyZSk7CisKK0dMaXN0KiAgICAgICAgICAgICAgICAgIGdzdF9yZWdpc3RyeV9nZXRfcGx1Z2luX2xpc3QgICAgKEdzdFJlZ2lzdHJ5ICpyZWdpc3RyeSk7CitHTGlzdCoJCQlnc3RfcmVnaXN0cnlfcGx1Z2luX2ZpbHRlcgkoR3N0UmVnaXN0cnkgKnJlZ2lzdHJ5LAorCQkJCQkJCSBHc3RQbHVnaW5GaWx0ZXIgZmlsdGVyLAorCQkJCQkJCSBnYm9vbGVhbiBmaXJzdCwKKwkJCQkJCQkgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKK0dMaXN0KgkJCWdzdF9yZWdpc3RyeV9mZWF0dXJlX2ZpbHRlcgkoR3N0UmVnaXN0cnkgKnJlZ2lzdHJ5LAorCQkJCQkJCSBHc3RQbHVnaW5GZWF0dXJlRmlsdGVyIGZpbHRlciwKKwkJCQkJCQkgZ2Jvb2xlYW4gZmlyc3QsCisJCQkJCQkJIGdwb2ludGVyIHVzZXJfZGF0YSk7CitHTGlzdCAqICAgICAgICAgICAgICAgICBnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdCAgIChHc3RSZWdpc3RyeSAqcmVnaXN0cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVHlwZSB0eXBlKTsKK0dMaXN0ICogICAgICAgICAgICAgICAgIGdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2J5X3BsdWdpbiAoR3N0UmVnaXN0cnkgKnJlZ2lzdHJ5LCBjb25zdCBnY2hhciAqbmFtZSk7CitndWludDMyICAgICAgICAgICAgICAgICBnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9jb29raWUgKEdzdFJlZ2lzdHJ5ICpyZWdpc3RyeSk7CisKK0dzdFBsdWdpbioJCWdzdF9yZWdpc3RyeV9maW5kX3BsdWdpbgkoR3N0UmVnaXN0cnkgKnJlZ2lzdHJ5LCBjb25zdCBnY2hhciAqbmFtZSk7CitHc3RQbHVnaW5GZWF0dXJlKglnc3RfcmVnaXN0cnlfZmluZF9mZWF0dXJlCShHc3RSZWdpc3RyeSAqcmVnaXN0cnksIGNvbnN0IGdjaGFyICpuYW1lLCBHVHlwZSB0eXBlKTsKKworR3N0UGx1Z2luICogCQlnc3RfcmVnaXN0cnlfbG9va3VwIAkJKEdzdFJlZ2lzdHJ5ICpyZWdpc3RyeSwgY29uc3QgY2hhciAqZmlsZW5hbWUpOworR3N0UGx1Z2luRmVhdHVyZSAqIAlnc3RfcmVnaXN0cnlfbG9va3VwX2ZlYXR1cmUgCShHc3RSZWdpc3RyeSAqcmVnaXN0cnksIGNvbnN0IGNoYXIgKm5hbWUpOworCisvKiBjb252aW5pZW5jZSBkZWZpbmVzIGZvciB0aGUgZGVmYXVsdCByZWdpc3RyeSAqLworCisvKioKKyAqIGdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2FkZF9wbHVnaW46CisgKiBAcGx1Z2luOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBwbHVnaW4gdG8gYWRkCisgKgorICogQWRkIHRoZSBwbHVnaW4gdG8gdGhlIGRlZmF1bHQgcmVnaXN0cnkuCisgKiBUaGUgcGx1Z2luLWFkZGVkIHNpZ25hbCB3aWxsIGJlIGVtaXR0ZWQuCisgKgorICogUmV0dXJuczogVFJVRSBvbiBzdWNjZXNzLgorICovCisjZGVmaW5lIGdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2FkZF9wbHVnaW4ocGx1Z2luKSBcCisgIGdzdF9yZWdpc3RyeV9hZGRfcGx1Z2luIChnc3RfcmVnaXN0cnlfZ2V0X2RlZmF1bHQoKSwgcGx1Z2luKQorCisvKioKKyAqIGdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2FkZF9wYXRoOgorICogQHBhdGg6IHRoZSBwYXRoIHRvIGFkZCB0byB0aGUgcmVnaXN0cnkKKyAqCisgKiBBZGQgdGhlIGdpdmVuIHBhdGggdG8gdGhlIGRlZmF1bHQgcmVnaXN0cnkuIFRoZSBzeW50YXggb2YgdGhlCisgKiBwYXRoIGlzIHNwZWNpZmljIHRvIHRoZSByZWdpc3RyeS4gSWYgdGhlIHBhdGggaGFzIGFscmVhZHkgYmVlbgorICogYWRkZWQsIGRvIG5vdGhpbmcuCisgKi8KKyNkZWZpbmUgZ3N0X2RlZmF1bHRfcmVnaXN0cnlfYWRkX3BhdGgocGF0aCkgXAorICBnc3RfcmVnaXN0cnlfYWRkX3BhdGggKGdzdF9yZWdpc3RyeV9nZXRfZGVmYXVsdCgpLCBwYXRoKQorCisvKioKKyAqIGdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2dldF9wYXRoX2xpc3Q6CisgKgorICogR2V0IHRoZSBsaXN0IG9mIHBhdGhzIGZvciB0aGUgZGVmYXVsdCByZWdpc3RyeS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgY29udGFpbmVyKSAoZWxlbWVudC10eXBlIGNoYXIqKTogYSAjR0xpc3Qgb2YgcGF0aHMgYXMKKyAqICAgICBzdHJpbmdzLiBnX2xpc3RfZnJlZSgpIGFmdGVyIHVzZS4KKyAqLworI2RlZmluZSBnc3RfZGVmYXVsdF9yZWdpc3RyeV9nZXRfcGF0aF9saXN0KCkgXAorICBnc3RfcmVnaXN0cnlfZ2V0X3BhdGhfbGlzdCAoZ3N0X3JlZ2lzdHJ5X2dldF9kZWZhdWx0KCkpCisgIAorLyoqCisgKiBnc3RfZGVmYXVsdF9yZWdpc3RyeV9nZXRfcGx1Z2luX2xpc3Q6CisgKgorICogR2V0IGEgY29weSBvZiBhbGwgcGx1Z2lucyByZWdpc3RlcmVkIGluIHRoZSBkZWZhdWx0IHJlZ2lzdHJ5LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAoZWxlbWVudC10eXBlIEdzdC5QbHVnaW4pOiBhIGNvcHkgb2YgdGhlIGxpc3QuCisgKiAgICAgRnJlZSBhZnRlciB1c2UuCisgKi8KKyNkZWZpbmUgZ3N0X2RlZmF1bHRfcmVnaXN0cnlfZ2V0X3BsdWdpbl9saXN0KCkgXAorICBnc3RfcmVnaXN0cnlfZ2V0X3BsdWdpbl9saXN0IChnc3RfcmVnaXN0cnlfZ2V0X2RlZmF1bHQoKSkKKworLyoqCisgKiBnc3RfZGVmYXVsdF9yZWdpc3RyeV9maW5kX2ZlYXR1cmU6CisgKiBAbmFtZTogdGhlIHBsdWdpbmZlYXR1cmUgbmFtZSB0byBmaW5kCisgKiBAdHlwZTogdGhlIHBsdWdpbmZlYXR1cmUgdHlwZSB0byBmaW5kCisgKgorICogRmluZCB0aGUgcGx1Z2luZmVhdHVyZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCB0eXBlIGluIHRoZSBkZWZhdWx0IHJlZ2lzdHJ5LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIHBsdWdpbmZlYXR1cmUgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgdHlwZSBvcgorICogICAgTlVMTCBpZiB0aGUgcGx1Z2luIHdhcyBub3QgZm91bmQuCisgKi8KKyNkZWZpbmUgZ3N0X2RlZmF1bHRfcmVnaXN0cnlfZmluZF9mZWF0dXJlKG5hbWUsdHlwZSkgXAorICBnc3RfcmVnaXN0cnlfZmluZF9mZWF0dXJlIChnc3RfcmVnaXN0cnlfZ2V0X2RlZmF1bHQoKSxuYW1lLHR5cGUpCisKKy8qKgorICogZ3N0X2RlZmF1bHRfcmVnaXN0cnlfZmluZF9wbHVnaW46CisgKiBAbmFtZTogdGhlIHBsdWdpbiBuYW1lIHRvIGZpbmQKKyAqCisgKiBGaW5kIHRoZSBwbHVnaW4gd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpbiB0aGUgZGVmYXVsdCByZWdpc3RyeS4KKyAqIFRoZSBwbHVnaW4gd2lsbCBiZSByZWZmZWQ7IGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgdW5yZWZmaW5nLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogVGhlIHBsdWdpbiB3aXRoIHRoZSBnaXZlbiBuYW1lIG9yIE5VTEwgaWYgdGhlCisgKiAgICAgcGx1Z2luIHdhcyBub3QgZm91bmQuCisgKi8KKyNkZWZpbmUgZ3N0X2RlZmF1bHRfcmVnaXN0cnlfZmluZF9wbHVnaW4obmFtZSkgXAorICBnc3RfcmVnaXN0cnlfZmluZF9wbHVnaW4gKGdzdF9yZWdpc3RyeV9nZXRfZGVmYXVsdCgpLG5hbWUpCisKKy8qKgorICogZ3N0X2RlZmF1bHRfcmVnaXN0cnlfZmVhdHVyZV9maWx0ZXI6CisgKiBAZmlsdGVyOiB0aGUgZmlsdGVyIHRvIHVzZQorICogQGZpcnN0OiBvbmx5IHJldHVybiBmaXJzdCBtYXRjaAorICogQHVzZXJfZGF0YTogdXNlciBkYXRhIHBhc3NlZCB0byB0aGUgZmlsdGVyIGZ1bmN0aW9uCisgKgorICogUnVucyBhIGZpbHRlciBhZ2FpbnN0IGFsbCBmZWF0dXJlcyBvZiB0aGUgcGx1Z2lucyBpbiB0aGUgZGVmYXVsdCByZWdpc3RyeQorICogYW5kIHJldHVybnMgYSBHTGlzdCB3aXRoIHRoZSByZXN1bHRzLgorICogSWYgdGhlIGZpcnN0IGZsYWcgaXMgc2V0LCBvbmx5IHRoZSBmaXJzdCBtYXRjaCBpcworICogcmV0dXJuZWQgKGFzIGEgbGlzdCB3aXRoIGEgc2luZ2xlIG9iamVjdCkuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChlbGVtZW50LXR5cGUgR3N0LlBsdWdpbkZlYXR1cmUpOiBhICNHTGlzdCBvZgorICogICAgIHBsdWdpbiBmZWF0dXJlcywgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSBhZnRlciB1c2UuCisgKi8KKyNkZWZpbmUgZ3N0X2RlZmF1bHRfcmVnaXN0cnlfZmVhdHVyZV9maWx0ZXIoZmlsdGVyLGZpcnN0LHVzZXJfZGF0YSkgXAorICBnc3RfcmVnaXN0cnlfZmVhdHVyZV9maWx0ZXIgKGdzdF9yZWdpc3RyeV9nZXRfZGVmYXVsdCgpLGZpbHRlcixmaXJzdCx1c2VyX2RhdGEpCisKKy8qKgorICogZ3N0X2RlZmF1bHRfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9jb29raWU6CisgKgorICogUmV0dXJucyB0aGUgZGVmYXVsdCByZWdpc3RyeXMgZmVhdHVyZSBsaXN0IGNvb2tpZS4gVGhpcyBjaGFuZ2VzCisgKiBldmVyeSB0aW1lIGEgZmVhdHVyZSBpcyBhZGRlZCBvciByZW1vdmVkIGZyb20gdGhlIHJlZ2lzdHJ5LgorICoKKyAqIFJldHVybnM6IHRoZSBmZWF0dXJlIGxpc3QgY29va2llLgorICoKKyAqIFNpbmNlOiAwLjEwLjI2CisgKi8KKyNkZWZpbmUgZ3N0X2RlZmF1bHRfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9jb29raWUoKSBcCisgIGdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2Nvb2tpZSAoZ3N0X3JlZ2lzdHJ5X2dldF9kZWZhdWx0KCkpCisKK2dib29sZWFuICAgICAgICAgICAgICAgIGdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2NoZWNrX2ZlYXR1cmVfdmVyc2lvbiAoY29uc3QgZ2NoYXIgKmZlYXR1cmVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgIG1pbl9tYWpvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgIG1pbl9taW5vciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgIG1pbl9taWNybyk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9SRUdJU1RSWV9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmMgYi9nc3QvZ3N0cmVnaXN0cnliaW5hcnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTY0OGJlCi0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmMKQEAgLTAsMCArMSw2MzEgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA2IEpvc2VwIFRvcnJhIDxqb3NlcEBmbHVlbmRvLmNvbT4KKyAqICAgICAgICAgICAgICAgMjAwNiBNYXRoaWV1IEdhcmNpYSA8bWF0dGhpZXVAZmx1ZW5kby5jb20+CisgKiAgICAgICAgICAgICAgIDIwMDYsMjAwNyBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisgKiAgICAgICAgICAgICAgIDIwMDggU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorICoKKyAqIGdzdHJlZ2lzdHJ5YmluYXJ5LmM6IEdzdFJlZ2lzdHJ5QmluYXJ5IG9iamVjdCwgc3VwcG9ydCByb3V0aW5lcworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qIEZJWE1FOgorICogLSBrZWVwIHJlZ2lzdHJ5IGJpbmFyeSBibG9iIGFuZCByZWZlcmVuY2Ugc3RyaW5ncworICogICAtIGRvbid0IGZyZWUvdW5tbWFwIGNvbnRlbnRzIHdoZW4gbGVhdmluZyBnc3RfcmVnaXN0cnlfYmluYXJ5X3JlYWRfY2FjaGUoKQorICogICAgIC0gZnJlZSBhdCBnc3RfZGVpbml0KCkgLyBfcHJpdl9nc3RfcmVnaXN0cnlfY2xlYW51cCgpID8KKyAqICAgLSBHc3RQbHVnaW46CisgKiAgICAgLSBHU1RfUExVR0lOX0ZMQUdfQ09OU1QKKyAqICAgLSBHc3RQbHVnaW5GZWF0dXJlLCBHc3RJbmRleEZhY3RvcnksIEdzdEVsZW1lbnRGYWN0b3J5CisgKiAgICAgLSBuZWVkcyBGbGFncyAoR1NUX1BMVUdJTl9GRUFUVVJFX0ZMQUdfQ09OU1QpCisgKiAgICAgLSBjYW4gd2UgdHVybiBsb2FkZWQgaW50byBmbGFnPworICogLSB3aHkgZG8gd2UgY29sbGVjdCBhIGxpc3Qgb2YgYmluYXJ5IGNodW5rcyBhbmQgbm90IHdyaXRlIGltbWVkaWF0ZWx5CisgKiAgIC0gYmVjYXVzZSB3ZSBuZWVkIHRvIHByb2Nlc3Mgc3ViY2h1bmtzLCBiZWZvcmUgd2UgY2FuIHNldCBlLmcuIG5yX29mX2l0ZW1zCisgKiAgICAgaW4gcGFyZW50IGNodW5rCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmIGRlZmluZWQgKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA+PSAxNDAwCisjaW5jbHVkZSA8aW8uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Z3N0L2dzdF9wcml2YXRlLmg+CisjaW5jbHVkZSA8Z3N0L2dzdGNvbmZpZy5oPgorI2luY2x1ZGUgPGdzdC9nc3RlbGVtZW50Lmg+CisjaW5jbHVkZSA8Z3N0L2dzdHR5cGVmaW5kLmg+CisjaW5jbHVkZSA8Z3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5oPgorI2luY2x1ZGUgPGdzdC9nc3R1cmkuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0aW5mby5oPgorI2luY2x1ZGUgPGdzdC9nc3RlbnVtdHlwZXMuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0cGFkdGVtcGxhdGUuaD4KKworI2luY2x1ZGUgPGdzdC9nc3RyZWdpc3RyeWNodW5rcy5oPgorI2luY2x1ZGUgPGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5oPgorCisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4gICAgICAgIC8qIGZvciBnX3N0YXQoKSwgZ19tYXBwZWRfZmlsZSgpLCAuLi4gKi8KKworI2luY2x1ZGUgImdsaWItY29tcGF0LXByaXZhdGUuaCIKKworCisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBHU1RfQ0FUX1JFR0lTVFJZCisKKy8qIHJlYWRpbmcgbWFjcm9zICovCisjZGVmaW5lIHVucGFja19lbGVtZW50KGlucHRyLCBvdXRwdHIsIGVsZW1lbnQsIGVuZHB0ciwgZXJyb3JfbGFiZWwpIEdfU1RNVF9TVEFSVHsgXAorICBpZiAoaW5wdHIgKyBzaXplb2YoZWxlbWVudCkgPj0gZW5kcHRyKSBcCisgICAgZ290byBlcnJvcl9sYWJlbDsgXAorICBvdXRwdHIgPSAoZWxlbWVudCAqKSBpbnB0cjsgXAorICBpbnB0ciArPSBzaXplb2YgKGVsZW1lbnQpOyBcCit9R19TVE1UX0VORAorCisjZGVmaW5lIEFMSUdOTUVOVCAgICAgICAgICAgIChzaXplb2YgKHZvaWQgKikpCisjZGVmaW5lIGFsaWdubWVudChfYWRkcmVzcykgIChnc2l6ZSlfYWRkcmVzcyVBTElHTk1FTlQKKyNkZWZpbmUgYWxpZ24oX3B0cikgICAgICAgICAgX3B0ciArPSAoKCBhbGlnbm1lbnQoX3B0cikgPT0gMCkgPyAwIDogQUxJR05NRU5ULWFsaWdubWVudChfcHRyKSkKKworLyogUmVnaXN0cnkgc2F2aW5nICovCisKKyNpZmRlZiBHX09TX1dJTjMyCisvKiBPbiB3aW4zMiwgd2UgY2FuJ3QgdXNlIGdfbWtzdG1wKCksIGJlY2F1c2Ugb2YgY3Jvc3MtRExMIGZpbGUgSS9PIHByb2JsZW1zLgorICogU28sIHdlIGp1c3QgY3JlYXRlIHRoZSBlbnRpcmUgYmluYXJ5IHJlZ2lzdHJ5IGluIG1lbW9yeSwgdGhlbiB3cml0ZSBpdCBvdXQKKyAqIHdpdGggZ19maWxlX3NldF9jb250ZW50cygpLCB3aGljaCBjcmVhdGVzIGEgdGVtcG9yYXJ5IGZpbGUgaW50ZXJuYWxseQorICovCisKK3R5cGVkZWYgc3RydWN0IEJpbmFyeVJlZ2lzdHJ5Q2FjaGUKK3sKKyAgY29uc3QgY2hhciAqbG9jYXRpb247CisgIGd1aW50OCAqbWVtOworICBnc3NpemUgbGVuOworfSBCaW5hcnlSZWdpc3RyeUNhY2hlOworCitzdGF0aWMgQmluYXJ5UmVnaXN0cnlDYWNoZSAqCitnc3RfcmVnaXN0cnlfYmluYXJ5X2NhY2hlX2luaXQgKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksIGNvbnN0IGNoYXIgKmxvY2F0aW9uKQoreworICBCaW5hcnlSZWdpc3RyeUNhY2hlICpjYWNoZSA9IGdfc2xpY2VfbmV3MCAoQmluYXJ5UmVnaXN0cnlDYWNoZSk7CisgIGNhY2hlLT5sb2NhdGlvbiA9IGxvY2F0aW9uOworICByZXR1cm4gY2FjaGU7Cit9CisKK3N0YXRpYyBpbnQKK2dzdF9yZWdpc3RyeV9iaW5hcnlfY2FjaGVfd3JpdGUgKEJpbmFyeVJlZ2lzdHJ5Q2FjaGUgKiBjYWNoZSwKKyAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgY2FjaGUtPmxlbiA9IE1BWCAob2Zmc2V0ICsgbGVuZ3RoLCBjYWNoZS0+bGVuKTsKKyAgY2FjaGUtPm1lbSA9IGdfcmVhbGxvYyAoY2FjaGUtPm1lbSwgY2FjaGUtPmxlbik7CisKKyAgbWVtY3B5IChjYWNoZS0+bWVtICsgb2Zmc2V0LCBkYXRhLCBsZW5ndGgpOworCisgIHJldHVybiBsZW5ndGg7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9jYWNoZV9maW5pc2ggKEJpbmFyeVJlZ2lzdHJ5Q2FjaGUgKiBjYWNoZSwgZ2Jvb2xlYW4gc3VjY2VzcykKK3sKKyAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKKyAgR0Vycm9yICplcnJvciA9IE5VTEw7CisgIGlmICghZ19maWxlX3NldF9jb250ZW50cyAoY2FjaGUtPmxvY2F0aW9uLCAoY29uc3QgZ2NoYXIgKikgY2FjaGUtPm1lbSwKKyAgICAgICAgICBjYWNoZS0+bGVuLCAmZXJyb3IpKSB7CisgICAgLyogUHJvYmFibHkgdGhlIGRpcmVjdG9yeSBkaWRuJ3QgZXhpc3Q7IGNyZWF0ZSBpdCAqLworICAgIGdjaGFyICpkaXI7CisgICAgZGlyID0gZ19wYXRoX2dldF9kaXJuYW1lIChjYWNoZS0+bG9jYXRpb24pOworICAgIGdfbWtkaXJfd2l0aF9wYXJlbnRzIChkaXIsIDA3NzcpOworICAgIGdfZnJlZSAoZGlyKTsKKworICAgIGdfZXJyb3JfZnJlZSAoZXJyb3IpOworICAgIGVycm9yID0gTlVMTDsKKworICAgIGlmICghZ19maWxlX3NldF9jb250ZW50cyAoY2FjaGUtPmxvY2F0aW9uLCAoY29uc3QgZ2NoYXIgKikgY2FjaGUtPm1lbSwKKyAgICAgICAgICAgIGNhY2hlLT5sZW4sICZlcnJvcikpIHsKKyAgICAgIC8qIFByb2JhYmx5IHRoZSBkaXJlY3RvcnkgZGlkbid0IGV4aXN0OyBjcmVhdGUgaXQgKi8KKyAgICAgIGdjaGFyICpkaXI7CisgICAgICBkaXIgPSBnX3BhdGhfZ2V0X2Rpcm5hbWUgKGNhY2hlLT5sb2NhdGlvbik7CisgICAgICBnX21rZGlyX3dpdGhfcGFyZW50cyAoZGlyLCAwNzc3KTsKKyAgICAgIGdfZnJlZSAoZGlyKTsKKworICAgICAgZ19lcnJvcl9mcmVlIChlcnJvcik7CisgICAgICBlcnJvciA9IE5VTEw7CisKKyAgICAgIGlmICghZ19maWxlX3NldF9jb250ZW50cyAoY2FjaGUtPmxvY2F0aW9uLCAoY29uc3QgZ2NoYXIgKikgY2FjaGUtPm1lbSwKKyAgICAgICAgICAgICAgY2FjaGUtPmxlbiwgJmVycm9yKSkgeworICAgICAgICBHU1RfRVJST1IgKCJGYWlsZWQgdG8gd3JpdGUgdG8gY2FjaGUgZmlsZTogJXMiLCBlcnJvci0+bWVzc2FnZSk7CisgICAgICAgIGdfZXJyb3JfZnJlZSAoZXJyb3IpOworICAgICAgICByZXQgPSBGQUxTRTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBnX2ZyZWUgKGNhY2hlLT5tZW0pOworICBnX3NsaWNlX2ZyZWUgKEJpbmFyeVJlZ2lzdHJ5Q2FjaGUsIGNhY2hlKTsKKyAgcmV0dXJuIHJldDsKK30KKworI2Vsc2UKK3R5cGVkZWYgc3RydWN0IEJpbmFyeVJlZ2lzdHJ5Q2FjaGUKK3sKKyAgY29uc3QgY2hhciAqbG9jYXRpb247CisgIGNoYXIgKnRtcF9sb2NhdGlvbjsKKyAgdW5zaWduZWQgbG9uZyBjdXJyZW50b2Zmc2V0OworICBpbnQgY2FjaGVfZmQ7Cit9IEJpbmFyeVJlZ2lzdHJ5Q2FjaGU7CisKK3N0YXRpYyBCaW5hcnlSZWdpc3RyeUNhY2hlICoKK2dzdF9yZWdpc3RyeV9iaW5hcnlfY2FjaGVfaW5pdCAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwgY29uc3QgY2hhciAqbG9jYXRpb24pCit7CisgIEJpbmFyeVJlZ2lzdHJ5Q2FjaGUgKmNhY2hlID0gZ19zbGljZV9uZXcwIChCaW5hcnlSZWdpc3RyeUNhY2hlKTsKKworICBjYWNoZS0+bG9jYXRpb24gPSBsb2NhdGlvbjsKKyAgY2FjaGUtPnRtcF9sb2NhdGlvbiA9IGdfc3RyY29uY2F0IChsb2NhdGlvbiwgIi50bXBYWFhYWFgiLCBOVUxMKTsKKyAgY2FjaGUtPmNhY2hlX2ZkID0gZ19ta3N0ZW1wIChjYWNoZS0+dG1wX2xvY2F0aW9uKTsKKyAgaWYgKGNhY2hlLT5jYWNoZV9mZCA9PSAtMSkgeworICAgIGludCByZXQ7CisgICAgR1N0YXRCdWYgc3RhdGJ1ZjsKKyAgICBnY2hhciAqZGlyOworCisgICAgLyogb29wcywgSSBiZXQgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0ICovCisgICAgZGlyID0gZ19wYXRoX2dldF9kaXJuYW1lIChsb2NhdGlvbik7CisgICAgZ19ta2Rpcl93aXRoX3BhcmVudHMgKGRpciwgMDc3Nyk7CisKKyAgICByZXQgPSBnX3N0YXQgKGRpciwgJnN0YXRidWYpOworICAgIGlmIChyZXQgIT0gLTEgJiYgKHN0YXRidWYuc3RfbW9kZSAmIDA3MDApICE9IDA3MDApIHsKKyAgICAgIGdfY2htb2QgKGRpciwgMDcwMCk7CisgICAgfQorCisgICAgZ19mcmVlIChkaXIpOworCisgICAgLyogdGhlIHByZXZpb3VzIGdfbWtzdGVtcCBjYWxsIG92ZXJ3cm90ZSB0aGUgWFhYWFhYIHBsYWNlaG9sZGVyIC4uLiAqLworICAgIGdfZnJlZSAoY2FjaGUtPnRtcF9sb2NhdGlvbik7CisgICAgY2FjaGUtPnRtcF9sb2NhdGlvbiA9IGdfc3RyY29uY2F0IChsb2NhdGlvbiwgIi50bXBYWFhYWFgiLCBOVUxMKTsKKyAgICBjYWNoZS0+Y2FjaGVfZmQgPSBnX21rc3RlbXAgKGNhY2hlLT50bXBfbG9jYXRpb24pOworCisgICAgaWYgKGNhY2hlLT5jYWNoZV9mZCA9PSAtMSkgeworICAgICAgR1NUX0RFQlVHICgiZ19ta3N0ZW1wKCkgZmFpbGVkOiAlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICBnX2ZyZWUgKGNhY2hlLT50bXBfbG9jYXRpb24pOworICAgICAgZ19zbGljZV9mcmVlIChCaW5hcnlSZWdpc3RyeUNhY2hlLCBjYWNoZSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXQgPSBnX3N0YXQgKGNhY2hlLT50bXBfbG9jYXRpb24sICZzdGF0YnVmKTsKKyAgICBpZiAocmV0ICE9IC0xICYmIChzdGF0YnVmLnN0X21vZGUgJiAwNjAwKSAhPSAwNjAwKSB7CisgICAgICBnX2NobW9kIChjYWNoZS0+dG1wX2xvY2F0aW9uLCAwNjAwKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gY2FjaGU7Cit9CisKK3N0YXRpYyBpbnQKK2dzdF9yZWdpc3RyeV9iaW5hcnlfY2FjaGVfd3JpdGUgKEJpbmFyeVJlZ2lzdHJ5Q2FjaGUgKiBjYWNoZSwKKyAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgbG9uZyB3cml0dGVuOworICBpZiAob2Zmc2V0ICE9IGNhY2hlLT5jdXJyZW50b2Zmc2V0KSB7CisgICAgaWYgKGxzZWVrIChjYWNoZS0+Y2FjaGVfZmQsIG9mZnNldCwgU0VFS19TRVQpICE9IDApIHsKKyAgICAgIEdTVF9FUlJPUiAoIlNlZWtpbmcgdG8gbmV3IG9mZnNldCBmYWlsZWQiKTsKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgY2FjaGUtPmN1cnJlbnRvZmZzZXQgPSBvZmZzZXQ7CisgIH0KKworICB3cml0dGVuID0gd3JpdGUgKGNhY2hlLT5jYWNoZV9mZCwgZGF0YSwgbGVuZ3RoKTsKKyAgaWYgKHdyaXR0ZW4gIT0gbGVuZ3RoKSB7CisgICAgR1NUX0VSUk9SICgiRmFpbGVkIHRvIHdyaXRlIHRvIGNhY2hlIGZpbGUiKTsKKyAgfQorICBjYWNoZS0+Y3VycmVudG9mZnNldCArPSB3cml0dGVuOworCisgIHJldHVybiB3cml0dGVuOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9yZWdpc3RyeV9iaW5hcnlfY2FjaGVfZmluaXNoIChCaW5hcnlSZWdpc3RyeUNhY2hlICogY2FjaGUsIGdib29sZWFuIHN1Y2Nlc3MpCit7CisgIC8qIG9ubHkgZnN5bmMgaWYgd2UncmUgYWN0dWFsbHkgZ29pbmcgdG8gdXNlIGFuZCByZW5hbWUgdGhlIGZpbGUgYmVsb3cgKi8KKyAgaWYgKHN1Y2Nlc3MgJiYgZnN5bmMgKGNhY2hlLT5jYWNoZV9mZCkgPCAwKQorICAgIGdvdG8gZnN5bmNfZmFpbGVkOworCisgIGlmIChjbG9zZSAoY2FjaGUtPmNhY2hlX2ZkKSA8IDApCisgICAgZ290byBjbG9zZV9mYWlsZWQ7CisKKyAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAvKiBPbmx5IGRvIHRoZSByZW5hbWUgaWYgd2Ugd3JvdGUgdGhlIGVudGlyZSBmaWxlIHN1Y2Nlc3NmdWxseSAqLworICAgIGlmIChnX3JlbmFtZSAoY2FjaGUtPnRtcF9sb2NhdGlvbiwgY2FjaGUtPmxvY2F0aW9uKSA8IDApIHsKKyAgICAgIEdTVF9FUlJPUiAoImdfcmVuYW1lKCkgZmFpbGVkOiAlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICBnb3RvIHJlbmFtZV9mYWlsZWQ7CisgICAgfQorICB9CisKKyAgZ19mcmVlIChjYWNoZS0+dG1wX2xvY2F0aW9uKTsKKyAgZ19zbGljZV9mcmVlIChCaW5hcnlSZWdpc3RyeUNhY2hlLCBjYWNoZSk7CisgIEdTVF9JTkZPICgiV3JvdGUgYmluYXJ5IHJlZ2lzdHJ5IGNhY2hlIik7CisgIHJldHVybiBUUlVFOworCisvKiBFUlJPUlMgKi8KK2ZhaWxfYWZ0ZXJfY2xvc2U6CisgIHsKKyAgICBnX3VubGluayAoY2FjaGUtPnRtcF9sb2NhdGlvbik7CisgICAgZ19mcmVlIChjYWNoZS0+dG1wX2xvY2F0aW9uKTsKKyAgICBnX3NsaWNlX2ZyZWUgKEJpbmFyeVJlZ2lzdHJ5Q2FjaGUsIGNhY2hlKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK2ZzeW5jX2ZhaWxlZDoKKyAgeworICAgIEdTVF9FUlJPUiAoImZzeW5jKCkgZmFpbGVkOiAlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSk7CisgICAgZ290byBmYWlsX2FmdGVyX2Nsb3NlOworICB9CitjbG9zZV9mYWlsZWQ6CisgIHsKKyAgICBHU1RfRVJST1IgKCJjbG9zZSgpIGZhaWxlZDogJXMiLCBnX3N0cmVycm9yIChlcnJubykpOworICAgIGdvdG8gZmFpbF9hZnRlcl9jbG9zZTsKKyAgfQorcmVuYW1lX2ZhaWxlZDoKKyAgeworICAgIEdTVF9FUlJPUiAoImdfcmVuYW1lKCkgZmFpbGVkOiAlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSk7CisgICAgZ290byBmYWlsX2FmdGVyX2Nsb3NlOworICB9Cit9CisjZW5kaWYKKworLyoKKyAqIGdzdF9yZWdpc3RyeV9iaW5hcnlfd3JpdGVfY2h1bms6CisgKgorICogV3JpdGUgZnJvbSBhIG1lbW9yeSBsb2NhdGlvbiB0byB0aGUgcmVnaXN0cnkgY2FjaGUgZmlsZQorICoKKyAqIFJldHVybnM6ICVUUlVFIGZvciBzdWNjZXNzCisgKi8KK2lubGluZSBzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9yZWdpc3RyeV9iaW5hcnlfd3JpdGVfY2h1bmsgKEJpbmFyeVJlZ2lzdHJ5Q2FjaGUgKiBjYWNoZSwKKyAgICBHc3RSZWdpc3RyeUNodW5rICogY2h1bmssIHVuc2lnbmVkIGxvbmcgKmZpbGVfcG9zaXRpb24pCit7CisgIGdjaGFyIHBhZGRlcltBTElHTk1FTlRdID0geyAwLCB9OworICBpbnQgcGFkc2l6ZSA9IDA7CisKKyAgLyogUGFkZGluZyB0byBpbnNlcnQgdGhlIHN0cnVjdCB0aGF0IHJlcXVpZXJlIHdvcmQgYWxpZ25tZW50ICovCisgIGlmICgoY2h1bmstPmFsaWduKSAmJiAoYWxpZ25tZW50ICgqZmlsZV9wb3NpdGlvbikgIT0gMCkpIHsKKyAgICBwYWRzaXplID0gQUxJR05NRU5UIC0gYWxpZ25tZW50ICgqZmlsZV9wb3NpdGlvbik7CisgICAgaWYgKGdzdF9yZWdpc3RyeV9iaW5hcnlfY2FjaGVfd3JpdGUgKGNhY2hlLCAqZmlsZV9wb3NpdGlvbiwKKyAgICAgICAgICAgIHBhZGRlciwgcGFkc2l6ZSkgIT0gcGFkc2l6ZSkgeworICAgICAgR1NUX0VSUk9SICgiRmFpbGVkIHRvIHdyaXRlIGJpbmFyeSByZWdpc3RyeSBwYWRkZXIiKTsKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgKmZpbGVfcG9zaXRpb24gKz0gcGFkc2l6ZTsKKyAgfQorCisgIGlmIChnc3RfcmVnaXN0cnlfYmluYXJ5X2NhY2hlX3dyaXRlIChjYWNoZSwgKmZpbGVfcG9zaXRpb24sCisgICAgICAgICAgY2h1bmstPmRhdGEsIGNodW5rLT5zaXplKSAhPSBjaHVuay0+c2l6ZSkgeworICAgIEdTVF9FUlJPUiAoIkZhaWxlZCB0byB3cml0ZSBiaW5hcnkgcmVnaXN0cnkgZWxlbWVudCIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorCisgICpmaWxlX3Bvc2l0aW9uICs9IGNodW5rLT5zaXplOworCisgIHJldHVybiBUUlVFOworfQorCisKKy8qCisgKiBnc3RfcmVnaXN0cnlfYmluYXJ5X2luaXRpYWxpemVfbWFnaWM6CisgKgorICogSW5pdGlhbGl6ZSB0aGUgR3N0QmluYXJ5UmVnaXN0cnlNYWdpYywgc2V0dGluZyBib3RoIG91ciBtYWdpYyBudW1iZXIgYW5kCisgKiBnc3RyZWFtZXIgbWFqb3IvbWlub3IgdmVyc2lvbgorICovCitpbmxpbmUgc3RhdGljIGdib29sZWFuCitnc3RfcmVnaXN0cnlfYmluYXJ5X2luaXRpYWxpemVfbWFnaWMgKEdzdEJpbmFyeVJlZ2lzdHJ5TWFnaWMgKiBtKQoreworICBtZW1zZXQgKG0sIDAsIHNpemVvZiAoR3N0QmluYXJ5UmVnaXN0cnlNYWdpYykpOworCisgIGlmICghc3RybmNweSAobS0+bWFnaWMsIEdTVF9NQUdJQ19CSU5BUllfUkVHSVNUUllfU1RSLAorICAgICAgICAgIEdTVF9NQUdJQ19CSU5BUllfUkVHSVNUUllfTEVOKQorICAgICAgfHwgIXN0cm5jcHkgKG0tPnZlcnNpb24sIEdTVF9NQUdJQ19CSU5BUllfVkVSU0lPTl9TVFIsCisgICAgICAgICAgR1NUX01BR0lDX0JJTkFSWV9WRVJTSU9OX0xFTikpIHsKKyAgICBHU1RfRVJST1IgKCJGYWlsZWQgdG8gd3JpdGUgbWFnaWMgdG8gdGhlIHJlZ2lzdHJ5IG1hZ2ljIHN0cnVjdHVyZSIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorCisgIHJldHVybiBUUlVFOworfQorCisvKioKKyAqIGdzdF9yZWdpc3RyeV9iaW5hcnlfd3JpdGVfY2FjaGU6CisgKiBAcmVnaXN0cnk6IGEgI0dzdFJlZ2lzdHJ5CisgKiBAbG9jYXRpb246IGEgZmlsZW5hbWUKKyAqCisgKiBXcml0ZSB0aGUgQHJlZ2lzdHJ5IHRvIGEgY2FjaGUgdG8gZmlsZSBhdCBnaXZlbiBAbG9jYXRpb24uCisgKgorICogUmV0dXJuczogJVRSVUUgb24gc3VjY2Vzcy4KKyAqLworZ2Jvb2xlYW4KK3ByaXZfZ3N0X3JlZ2lzdHJ5X2JpbmFyeV93cml0ZV9jYWNoZSAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwKKyAgICBjb25zdCBjaGFyICpsb2NhdGlvbikKK3sKKyAgR0xpc3QgKndhbGs7CisgIEdzdEJpbmFyeVJlZ2lzdHJ5TWFnaWMgbWFnaWM7CisgIEdMaXN0ICp0b193cml0ZSA9IE5VTEw7CisgIHVuc2lnbmVkIGxvbmcgZmlsZV9wb3NpdGlvbiA9IDA7CisgIEJpbmFyeVJlZ2lzdHJ5Q2FjaGUgKmNhY2hlOworCisgIEdTVF9JTkZPICgiQnVpbGRpbmcgYmluYXJ5IHJlZ2lzdHJ5IGNhY2hlIGltYWdlIik7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19SRUdJU1RSWSAocmVnaXN0cnkpLCBGQUxTRSk7CisKKyAgaWYgKCFnc3RfcmVnaXN0cnlfYmluYXJ5X2luaXRpYWxpemVfbWFnaWMgKCZtYWdpYykpCisgICAgZ290byBmYWlsOworCisgIC8qIGl0ZXJhdGUgdHJvdWdoIHRoZSBsaXN0IG9mIHBsdWdpbnMgYW5kIGZpdCB0aGVtIGludG8gYmluYXJ5IHN0cnVjdHVyZXMgKi8KKyAgZm9yICh3YWxrID0gcmVnaXN0cnktPnBsdWdpbnM7IHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsaykpIHsKKyAgICBHc3RQbHVnaW4gKnBsdWdpbiA9IEdTVF9QTFVHSU4gKHdhbGstPmRhdGEpOworCisgICAgaWYgKCFwbHVnaW4tPmZpbGVuYW1lKQorICAgICAgY29udGludWU7CisKKyAgICBpZiAocGx1Z2luLT5mbGFncyAmIEdTVF9QTFVHSU5fRkxBR19DQUNIRUQpIHsKKyAgICAgIEdTdGF0QnVmIHN0YXRidWY7CisKKyAgICAgIGlmIChnX3N0YXQgKHBsdWdpbi0+ZmlsZW5hbWUsICZzdGF0YnVmKSA8IDAgfHwKKyAgICAgICAgICBwbHVnaW4tPmZpbGVfbXRpbWUgIT0gc3RhdGJ1Zi5zdF9tdGltZSB8fAorICAgICAgICAgIHBsdWdpbi0+ZmlsZV9zaXplICE9IHN0YXRidWYuc3Rfc2l6ZSkKKyAgICAgICAgY29udGludWU7CisgICAgfQorCisgICAgaWYgKCFfcHJpdl9nc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfcGx1Z2luICgmdG9fd3JpdGUsIHJlZ2lzdHJ5LCBwbHVnaW4pKSB7CisgICAgICBHU1RfRVJST1IgKCJDYW4ndCB3cml0ZSBiaW5hcnkgcGx1Z2luIGluZm9ybWF0aW9uIGZvciBcIiVzXCIiLAorICAgICAgICAgIHBsdWdpbi0+ZmlsZW5hbWUpOworICAgIH0KKyAgfQorCisgIF9wcml2X2dzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9nbG9iYWxfaGVhZGVyICgmdG9fd3JpdGUsIHJlZ2lzdHJ5LAorICAgICAgcHJpdl9nc3RfcGx1Z2luX2xvYWRpbmdfZ2V0X3doaXRlbGlzdF9oYXNoICgpKTsKKworICBHU1RfSU5GTyAoIldyaXRpbmcgYmluYXJ5IHJlZ2lzdHJ5IGNhY2hlIik7CisKKyAgY2FjaGUgPSBnc3RfcmVnaXN0cnlfYmluYXJ5X2NhY2hlX2luaXQgKHJlZ2lzdHJ5LCBsb2NhdGlvbik7CisgIGlmICghY2FjaGUpCisgICAgZ290byBmYWlsX2ZyZWVfbGlzdDsKKworICAvKiB3cml0ZSBtYWdpYyAqLworICBpZiAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9jYWNoZV93cml0ZSAoY2FjaGUsIGZpbGVfcG9zaXRpb24sCisgICAgICAgICAgJm1hZ2ljLCBzaXplb2YgKEdzdEJpbmFyeVJlZ2lzdHJ5TWFnaWMpKSAhPQorICAgICAgc2l6ZW9mIChHc3RCaW5hcnlSZWdpc3RyeU1hZ2ljKSkgeworICAgIEdTVF9FUlJPUiAoIkZhaWxlZCB0byB3cml0ZSBiaW5hcnkgcmVnaXN0cnkgbWFnaWMiKTsKKyAgICBnb3RvIGZhaWxfZnJlZV9saXN0OworICB9CisgIGZpbGVfcG9zaXRpb24gKz0gc2l6ZW9mIChHc3RCaW5hcnlSZWdpc3RyeU1hZ2ljKTsKKworICAvKiB3cml0ZSBvdXQgZGF0YSBjaHVua3MgKi8KKyAgZm9yICh3YWxrID0gdG9fd3JpdGU7IHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsaykpIHsKKyAgICBHc3RSZWdpc3RyeUNodW5rICpjdXIgPSB3YWxrLT5kYXRhOworICAgIGdib29sZWFuIHJlczsKKworICAgIHJlcyA9IGdzdF9yZWdpc3RyeV9iaW5hcnlfd3JpdGVfY2h1bmsgKGNhY2hlLCBjdXIsICZmaWxlX3Bvc2l0aW9uKTsKKworICAgIF9wcml2X2dzdF9yZWdpc3RyeV9jaHVua19mcmVlIChjdXIpOworICAgIHdhbGstPmRhdGEgPSBOVUxMOworICAgIGlmICghcmVzKQorICAgICAgZ290byBmYWlsX2ZyZWVfbGlzdDsKKyAgfQorICBnX2xpc3RfZnJlZSAodG9fd3JpdGUpOworCisgIGlmICghZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9jYWNoZV9maW5pc2ggKGNhY2hlLCBUUlVFKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgcmV0dXJuIFRSVUU7CisKKyAgLyogRXJyb3JzICovCitmYWlsX2ZyZWVfbGlzdDoKKyAgeworICAgIGZvciAod2FsayA9IHRvX3dyaXRlOyB3YWxrOyB3YWxrID0gZ19saXN0X25leHQgKHdhbGspKSB7CisgICAgICBHc3RSZWdpc3RyeUNodW5rICpjdXIgPSB3YWxrLT5kYXRhOworCisgICAgICBpZiAoY3VyKQorICAgICAgICBfcHJpdl9nc3RfcmVnaXN0cnlfY2h1bmtfZnJlZSAoY3VyKTsKKyAgICB9CisgICAgZ19saXN0X2ZyZWUgKHRvX3dyaXRlKTsKKworICAgIGlmIChjYWNoZSkKKyAgICAgICh2b2lkKSBnc3RfcmVnaXN0cnlfYmluYXJ5X2NhY2hlX2ZpbmlzaCAoY2FjaGUsIEZBTFNFKTsKKyAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgfQorZmFpbDoKKyAgeworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCisKKy8qIFJlZ2lzdHJ5IGxvYWRpbmcgKi8KKworLyoKKyAqIGdzdF9yZWdpc3RyeV9iaW5hcnlfY2hlY2tfbWFnaWM6CisgKgorICogQ2hlY2sgR3N0QmluYXJ5UmVnaXN0cnlNYWdpYyB2YWxpZGl0eS4KKyAqIFJldHVybiA8IDAgaWYgc29tZXRoaW5nIGlzIHdyb25nLCAtMiBtZWFucworICogdGhhdCBqdXN0IHRoZSB2ZXJzaW9uIG9mIHRoZSByZWdpc3RyeSBpcyBvdXQgb2YKKyAqIGRhdGUsIC0xIGlzIGEgZ2VuZXJhbCBmYWlsdXJlLgorICovCitzdGF0aWMgZ2ludAorZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9jaGVja19tYWdpYyAoZ2NoYXIgKiogaW4sIGdzaXplIHNpemUpCit7CisgIEdzdEJpbmFyeVJlZ2lzdHJ5TWFnaWMgKm07CisKKyAgYWxpZ24gKCppbik7CisgIEdTVF9ERUJVRyAoIlJlYWRpbmcvY2FzdGluZyBmb3IgR3N0QmluYXJ5UmVnaXN0cnlNYWdpYyBhdCBhZGRyZXNzICVwIiwgKmluKTsKKyAgdW5wYWNrX2VsZW1lbnQgKCppbiwgbSwgR3N0QmluYXJ5UmVnaXN0cnlNYWdpYywgKCppbiArIHNpemUpLCBmYWlsKTsKKworICBpZiAoc3RybmNtcCAobS0+bWFnaWMsIEdTVF9NQUdJQ19CSU5BUllfUkVHSVNUUllfU1RSLAorICAgICAgICAgIEdTVF9NQUdJQ19CSU5BUllfUkVHSVNUUllfTEVOKSAhPSAwKSB7CisgICAgR1NUX1dBUk5JTkcKKyAgICAgICAgKCJCaW5hcnkgcmVnaXN0cnkgbWFnaWMgaXMgZGlmZmVyZW50IDogJTAyeCUwMnglMDJ4JTAyeCAhPSAlMDJ4JTAyeCUwMnglMDJ4IiwKKyAgICAgICAgR1NUX01BR0lDX0JJTkFSWV9SRUdJU1RSWV9TVFJbMF0gJiAweGZmLAorICAgICAgICBHU1RfTUFHSUNfQklOQVJZX1JFR0lTVFJZX1NUUlsxXSAmIDB4ZmYsCisgICAgICAgIEdTVF9NQUdJQ19CSU5BUllfUkVHSVNUUllfU1RSWzJdICYgMHhmZiwKKyAgICAgICAgR1NUX01BR0lDX0JJTkFSWV9SRUdJU1RSWV9TVFJbM10gJiAweGZmLCBtLT5tYWdpY1swXSAmIDB4ZmYsCisgICAgICAgIG0tPm1hZ2ljWzFdICYgMHhmZiwgbS0+bWFnaWNbMl0gJiAweGZmLCBtLT5tYWdpY1szXSAmIDB4ZmYpOworICAgIHJldHVybiAtMTsKKyAgfQorICBpZiAoc3RybmNtcCAobS0+dmVyc2lvbiwgR1NUX01BR0lDX0JJTkFSWV9WRVJTSU9OX1NUUiwKKyAgICAgICAgICBHU1RfTUFHSUNfQklOQVJZX1ZFUlNJT05fTEVOKSkgeworICAgIEdTVF9XQVJOSU5HICgiQmluYXJ5IHJlZ2lzdHJ5IG1hZ2ljIHZlcnNpb24gaXMgZGlmZmVyZW50IDogJXMgIT0gJXMiLAorICAgICAgICBHU1RfTUFHSUNfQklOQVJZX1ZFUlNJT05fU1RSLCBtLT52ZXJzaW9uKTsKKyAgICByZXR1cm4gLTI7CisgIH0KKworICByZXR1cm4gMDsKKworZmFpbDoKKyAgR1NUX1dBUk5JTkcgKCJOb3QgZW5vdWdoIGRhdGEgZm9yIGJpbmFyeSByZWdpc3RyeSBtYWdpYyBzdHJ1Y3R1cmUiKTsKKyAgcmV0dXJuIC0xOworfQorCisvKioKKyAqIGdzdF9yZWdpc3RyeV9iaW5hcnlfcmVhZF9jYWNoZToKKyAqIEByZWdpc3RyeTogYSAjR3N0UmVnaXN0cnkKKyAqIEBsb2NhdGlvbjogYSBmaWxlbmFtZQorICoKKyAqIFJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBiaW5hcnkgY2FjaGUgZmlsZSBhdCBAbG9jYXRpb24gaW50byBAcmVnaXN0cnkuCisgKgorICogUmV0dXJuczogJVRSVUUgb24gc3VjY2Vzcy4KKyAqLworZ2Jvb2xlYW4KK3ByaXZfZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9yZWFkX2NhY2hlIChHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5LAorICAgIGNvbnN0IGNoYXIgKmxvY2F0aW9uKQoreworICBHTWFwcGVkRmlsZSAqbWFwcGVkID0gTlVMTDsKKyAgZ2NoYXIgKmNvbnRlbnRzID0gTlVMTDsKKyAgZ2NoYXIgKmluID0gTlVMTDsKKyAgZ3NpemUgc2l6ZTsKKyAgR0Vycm9yICplcnIgPSBOVUxMOworICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKKyAgZ3VpbnQzMiBmaWx0ZXJfZW52X2hhc2ggPSAwOworICBnaW50IGNoZWNrX21hZ2ljX3Jlc3VsdDsKKyNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCisgIEdUaW1lciAqdGltZXIgPSBOVUxMOworICBnZG91YmxlIHNlY29uZHM7CisjZW5kaWYKKworICAvKiBtYWtlIHN1cmUgdGhlc2UgdHlwZXMgZXhpc3QgKi8KKyAgR1NUX1RZUEVfRUxFTUVOVF9GQUNUT1JZOworICBHU1RfVFlQRV9UWVBFX0ZJTkRfRkFDVE9SWTsKKyAgR1NUX1RZUEVfSU5ERVhfRkFDVE9SWTsKKworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKyAgdGltZXIgPSBnX3RpbWVyX25ldyAoKTsKKyNlbmRpZgorCisgIG1hcHBlZCA9IGdfbWFwcGVkX2ZpbGVfbmV3IChsb2NhdGlvbiwgRkFMU0UsICZlcnIpOworICBpZiAoR19VTkxJS0VMWSAoZXJyICE9IE5VTEwpKSB7CisgICAgR1NUX0lORk8gKCJVbmFibGUgdG8gbW1hcCBmaWxlICVzIDogJXMiLCBsb2NhdGlvbiwgZXJyLT5tZXNzYWdlKTsKKyAgICBnX2Vycm9yX2ZyZWUgKGVycik7CisgICAgZXJyID0gTlVMTDsKKyAgfQorCisgIGlmIChtYXBwZWQgPT0gTlVMTCkgeworICAgIC8qIEVycm9yIG1tYXAtaW5nIHRoZSBjYWNoZSwgdHJ5IGEgcGxhaW4gbWVtb3J5IHJlYWQgKi8KKworICAgIGdfZmlsZV9nZXRfY29udGVudHMgKGxvY2F0aW9uLCAmY29udGVudHMsICZzaXplLCAmZXJyKTsKKyAgICBpZiAoZXJyICE9IE5VTEwpIHsKKyAgICAgIEdTVF9JTkZPICgiVW5hYmxlIHRvIHJlYWQgZmlsZSAlcyA6ICVzIiwgbG9jYXRpb24sIGVyci0+bWVzc2FnZSk7CisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICAgICAgZ190aW1lcl9kZXN0cm95ICh0aW1lcik7CisjZW5kaWYKKyAgICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgLyogVGhpcyBjYW4ndCBmYWlsIGlmIGdfbWFwcGVkX2ZpbGVfbmV3KCkgc3VjY2VlZGVkICovCisgICAgY29udGVudHMgPSBnX21hcHBlZF9maWxlX2dldF9jb250ZW50cyAobWFwcGVkKTsKKyAgICBzaXplID0gZ19tYXBwZWRfZmlsZV9nZXRfbGVuZ3RoIChtYXBwZWQpOworICB9CisKKyAgLyogaW4gaXMgYSBjdXJzb3IgcG9pbnRlciwgd2UgaW5pdGlhbGl6ZSBpdCB3aXRoIHRoZSBiZWdpbiBvZiByZWdpc3RyeSBhbmQgaXMgdXBkYXRlZCBvbiBlYWNoIHJlYWQgKi8KKyAgaW4gPSBjb250ZW50czsKKyAgR1NUX0RFQlVHICgiRmlsZSBkYXRhIGF0IGFkZHJlc3MgJXAiLCBpbik7CisgIGlmIChHX1VOTElLRUxZIChzaXplIDwgc2l6ZW9mIChHc3RCaW5hcnlSZWdpc3RyeU1hZ2ljKSkpIHsKKyAgICBHU1RfRVJST1IgKCJObyBvciBicm9rZW4gcmVnaXN0cnkgaGVhZGVyIGZvciBmaWxlIGF0ICVzIiwgbG9jYXRpb24pOworICAgIGdvdG8gRXJyb3I7CisgIH0KKworICAvKiBjaGVjayBpZiBoZWFkZXIgaXMgdmFsaWQgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKChjaGVja19tYWdpY19yZXN1bHQgPQorICAgICAgICAgICAgICBnc3RfcmVnaXN0cnlfYmluYXJ5X2NoZWNrX21hZ2ljICgmaW4sIHNpemUpKSA8IDApKSB7CisKKyAgICBpZiAoY2hlY2tfbWFnaWNfcmVzdWx0ID09IC0xKQorICAgICAgR1NUX0VSUk9SCisgICAgICAgICAgKCJCaW5hcnkgcmVnaXN0cnkgdHlwZSBub3QgcmVjb2duaXplZCAoaW52YWxpZCBtYWdpYykgZm9yIGZpbGUgYXQgJXMiLAorICAgICAgICAgIGxvY2F0aW9uKTsKKyAgICBnb3RvIEVycm9yOworICB9CisKKyAgaWYgKCFfcHJpdl9nc3RfcmVnaXN0cnlfY2h1bmtzX2xvYWRfZ2xvYmFsX2hlYWRlciAocmVnaXN0cnksICZpbiwKKyAgICAgICAgICBjb250ZW50cyArIHNpemUsICZmaWx0ZXJfZW52X2hhc2gpKSB7CisgICAgR1NUX0VSUk9SICgiQ291bGRuJ3QgcmVhZCBnbG9iYWwgaGVhZGVyIGNodW5rIik7CisgICAgZ290byBFcnJvcjsKKyAgfQorCisgIGlmIChmaWx0ZXJfZW52X2hhc2ggIT0gcHJpdl9nc3RfcGx1Z2luX2xvYWRpbmdfZ2V0X3doaXRlbGlzdF9oYXNoICgpKSB7CisgICAgR1NUX0lORk9fT0JKRUNUIChyZWdpc3RyeSwgIlBsdWdpbiBsb2FkaW5nIGZpbHRlciBlbnZpcm9ubWVudCBjaGFuZ2VkLCAiCisgICAgICAgICJpZ25vcmluZyBwbHVnaW4gY2FjaGUgdG8gZm9yY2UgdXBkYXRlIHdpdGggbmV3IGZpbHRlciBlbnZpcm9ubWVudCIpOworICAgIGdvdG8gZG9uZTsKKyAgfQorCisgIC8qIGNoZWNrIGlmIHRoZXJlIGFyZSBwbHVnaW5zIGluIHRoZSBmaWxlICovCisgIGlmIChHX1VOTElLRUxZICghKCgoZ3NpemUpIGluICsgc2l6ZW9mIChHc3RSZWdpc3RyeUNodW5rUGx1Z2luRWxlbWVudCkpIDwKKyAgICAgICAgICAgICAgKGdzaXplKSBjb250ZW50cyArIHNpemUpKSkgeworICAgIEdTVF9JTkZPICgiTm8gYmluYXJ5IHBsdWdpbnMgc3RydWN0dXJlIHRvIHJlYWQiKTsKKyAgICAvKiBlbXB0eSBmaWxlLCB0aGlzIGlzIG5vdCBhbiBlcnJvciAqLworICB9IGVsc2UgeworICAgIGdjaGFyICplbmQgPSBjb250ZW50cyArIHNpemU7CisgICAgLyogcmVhZCBhcyBsb25nIGFzIHdlIHN0aWxsIGhhdmUgc3BhY2UgZm9yIGEgR3N0UmVnaXN0cnlDaHVua1BsdWdpbkVsZW1lbnQgKi8KKyAgICBmb3IgKDsKKyAgICAgICAgKChnc2l6ZSkgaW4gKyBzaXplb2YgKEdzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5FbGVtZW50KSkgPAorICAgICAgICAoZ3NpemUpIGNvbnRlbnRzICsgc2l6ZTspIHsKKyAgICAgIEdTVF9ERUJVRyAoInJlYWRpbmcgYmluYXJ5IHJlZ2lzdHJ5ICUiIEdfR1NJWkVfRk9STUFUICIoJXgpLyUiCisgICAgICAgICAgR19HU0laRV9GT1JNQVQsIChnc2l6ZSkgaW4gLSAoZ3NpemUpIGNvbnRlbnRzLAorICAgICAgICAgIChndWludCkgKChnc2l6ZSkgaW4gLSAoZ3NpemUpIGNvbnRlbnRzKSwgc2l6ZSk7CisgICAgICBpZiAoIV9wcml2X2dzdF9yZWdpc3RyeV9jaHVua3NfbG9hZF9wbHVnaW4gKHJlZ2lzdHJ5LCAmaW4sIGVuZCwgTlVMTCkpIHsKKyAgICAgICAgR1NUX0VSUk9SICgiUHJvYmxlbSB3aGlsZSByZWFkaW5nIGJpbmFyeSByZWdpc3RyeSAlcyIsIGxvY2F0aW9uKTsKKyAgICAgICAgZ290byBFcnJvcjsKKyAgICAgIH0KKyAgICB9CisgIH0KKworZG9uZToKKworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKyAgZ190aW1lcl9zdG9wICh0aW1lcik7CisgIHNlY29uZHMgPSBnX3RpbWVyX2VsYXBzZWQgKHRpbWVyLCBOVUxMKTsKKyNlbmRpZgorCisgIEdTVF9JTkZPICgibG9hZGVkICVzIGluICVsZiBzZWNvbmRzIiwgbG9jYXRpb24sIHNlY29uZHMpOworCisgIHJlcyA9IFRSVUU7CisgIC8qIFRPRE86IG9uY2Ugd2UgcmUtdXNlIHRoZSBwb2ludGVycyB0byByZWdpc3RyeSBjb250ZW50cywgcmV0dXJuIGhlcmUgKi8KKworRXJyb3I6CisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICBnX3RpbWVyX2Rlc3Ryb3kgKHRpbWVyKTsKKyNlbmRpZgorICBpZiAobWFwcGVkKSB7CisgICAgZ19tYXBwZWRfZmlsZV91bnJlZiAobWFwcGVkKTsKKyAgfSBlbHNlIHsKKyAgICBnX2ZyZWUgKGNvbnRlbnRzKTsKKyAgfQorICByZXR1cm4gcmVzOworfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmggYi9nc3QvZ3N0cmVnaXN0cnliaW5hcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTJjNmQzCi0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmgKQEAgLTAsMCArMSw3NiBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSm9zZXAgVG9ycmEgPGpvc2VwQGZsdWVuZG8uY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1hdGhpZXUgR2FyY2lhICA8bWF0dGhpZXVAZmx1ZW5kby5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU3RlZmFuIEtvc3QgPGVuc29uaWNAc29uaWNwdWxzZS5kZT4KKyAqCisgKiBnc3RyZWdpc3RyeWJpbmFyeS5oOiBIZWFkZXIgZm9yIHJlZ2lzdHJ5IGhhbmRsaW5nCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyogU1VHR0VTVElPTlMgQU5EIFRPRE8gOgorKiogPT09PT09PT09PT09PT09PT09PT0KKyoqIC0gVXNlIGEgY29tcHJlc3NlZCByZWdpc3RyeSwgYnV0IHdvdWxkIGluZHVjZSBwZXJmb3JtYW5jZSBsb3NzCisqKiAtIEVuY3J5cHQgdGhlIHJlZ2lzdHJ5LCBmb3Igc2VjdXJpdHkgcHVycG9zZSwgYnV0IHdvdWxkIGFsc28gcmVkdWNlIHBlcmZvcm1hbmNlcworKi8KKworI2lmbmRlZiBfX0dTVF9SRUdJU1RSWUJJTkFSWV9IX18KKyNkZWZpbmUgX19HU1RfUkVHSVNUUllCSU5BUllfSF9fCisKKyNpbmNsdWRlIDxnc3QvZ3N0cGFkLmg+CisjaW5jbHVkZSA8Z3N0L2dzdHJlZ2lzdHJ5Lmg+CisKK0dfQkVHSU5fREVDTFMKKworLyoKKyAqIEdTVF9NQUdJQ19CSU5BUllfUkVHSVNUUllfU1RSOgorICoKKyAqIEEgdGFnLCB3cml0dGVuIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUKKyAqLworI2RlZmluZSBHU1RfTUFHSUNfQklOQVJZX1JFR0lTVFJZX1NUUiAiXHhjMFx4ZGVceGYwXHgwZCIKKy8qCisgKiBHU1RfTUFHSUNfQklOQVJZX1JFR0lTVFJZX0xFTjoKKyAqCisgKiBsZW5ndGggb2YgdGhlIGhlYWRlciB0YWcuCisgKi8KKyNkZWZpbmUgR1NUX01BR0lDX0JJTkFSWV9SRUdJU1RSWV9MRU4gKDQpCisKKy8qCisgKiBHU1RfTUFHSUNfQklOQVJZX1ZFUlNJT05fU1RSOgorICoKKyAqIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIGJpbmFyeSByZWdpc3RyeSBmb3JtYXQuCisgKiBUaGlzIF9tdXN0XyBiZSB1cGRhdGVkIHdoZW5ldmVyIHRoZSByZWdpc3RyeSBmb3JtYXQgY2hhbmdlcywKKyAqIHdlIGN1cnJlbnRseSB1c2UgdGhlIGNvcmUgdmVyc2lvbiB3aGVyZSB0aGlzIGNoYW5nZSBoYXBwZW5lZC4KKyAqLworI2RlZmluZSBHU1RfTUFHSUNfQklOQVJZX1ZFUlNJT05fU1RSICIwLjEwLjMwLjEiCisKKy8qCisgKiBHU1RfTUFHSUNfQklOQVJZX1ZFUlNJT05fTEVOOgorICoKKyAqIE1heGltdW0gbGVuZ3RoIG9mIHRoZSB2ZXJzaW9uIHN0cmluZyBpbiB0aGUgaGVhZGVyLgorICovCisjZGVmaW5lIEdTVF9NQUdJQ19CSU5BUllfVkVSU0lPTl9MRU4gKDY0KQorCit0eXBlZGVmIHN0cnVjdCBfR3N0QmluYXJ5UmVnaXN0cnlNYWdpYworeworICBnY2hhciBtYWdpY1tHU1RfTUFHSUNfQklOQVJZX1JFR0lTVFJZX0xFTl07CisgIGdjaGFyIHZlcnNpb25bR1NUX01BR0lDX0JJTkFSWV9WRVJTSU9OX0xFTl07Cit9IEdzdEJpbmFyeVJlZ2lzdHJ5TWFnaWM7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiAhX19HU1RfUkVHSVNUUllCSU5BUllfSF9fICovCisKZGlmZiAtLWdpdCBhL2dzdC9nc3RyZWdpc3RyeWNodW5rcy5jIGIvZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMxY2E2YgotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RyZWdpc3RyeWNodW5rcy5jCkBAIC0wLDAgKzEsOTA0IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNiBKb3NlcCBUb3JyYSA8am9zZXBAZmx1ZW5kby5jb20+CisgKiAgICAgICAgICAgICAgIDIwMDYgTWF0aGlldSBHYXJjaWEgPG1hdHRoaWV1QGZsdWVuZG8uY29tPgorICogICAgICAgICAgICAgICAyMDA2LDIwMDcgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgorICogICAgICAgICAgICAgICAyMDA4IFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKyAqICAgICAgICAgICAgICAgMjAwOCBKYW4gU2NobWlkdCA8amFuLnNjaG1pZHRAc3VuLmNvbT4KKyAqCisgKiBnc3RyZWdpc3RyeWNodW5rcy5jOiBHc3RSZWdpc3RyeUNodW5rIGhlbHBlciBmb3Igc2VyaWFsaXNpbmcvZGVzZXJpYWxpc2luZworICogcGx1Z2luIGVudHJpZXMgYW5kIGZlYXR1cmVzLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8Z3N0L2dzdF9wcml2YXRlLmg+CisjaW5jbHVkZSA8Z3N0L2dzdGNvbmZpZy5oPgorI2luY2x1ZGUgPGdzdC9nc3RlbGVtZW50Lmg+CisjaW5jbHVkZSA8Z3N0L2dzdHR5cGVmaW5kLmg+CisjaW5jbHVkZSA8Z3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5oPgorI2luY2x1ZGUgPGdzdC9nc3R1cmkuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0aW5mby5oPgorI2luY2x1ZGUgPGdzdC9nc3RlbnVtdHlwZXMuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0cGFkdGVtcGxhdGUuaD4KKworI2luY2x1ZGUgPGdzdC9nc3RyZWdpc3RyeWNodW5rcy5oPgorCisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBHU1RfQ0FUX1JFR0lTVFJZCisKKy8qIGNvdW50IHN0cmluZyBsZW5ndGgsIGJ1dCByZXR1cm4gLTEgaWYgd2UgaGl0IHRoZSBlb2YgKi8KK3N0YXRpYyBnaW50Citfc3RybmxlbiAoY29uc3QgZ2NoYXIgKiBzdHIsIGdpbnQgbWF4bGVuKQoreworICBnaW50IGxlbiA9IDA7CisKKyAgd2hpbGUgKEdfTElLRUxZIChsZW4gPCBtYXhsZW4pKSB7CisgICAgaWYgKEdfVU5MSUtFTFkgKHN0cltsZW5dID09ICdcMCcpKQorICAgICAgcmV0dXJuIGxlbjsKKyAgICBsZW4rKzsKKyAgfQorICByZXR1cm4gLTE7Cit9CisKKy8qIE1hY3JvcyAqLworI2RlZmluZSB1bnBhY2tfZWxlbWVudChpbnB0ciwgb3V0cHRyLCBlbGVtZW50LCBlbmRwdHIsIGVycm9yX2xhYmVsKSBHX1NUTVRfU1RBUlR7IFwKKyAgaWYgKGlucHRyICsgc2l6ZW9mKGVsZW1lbnQpID4gZW5kcHRyKSB7IFwKKyAgICBHU1RfRVJST1IgKCJGYWlsZWQgcmVhZGluZyBlbGVtZW50ICIgR19TVFJJTkdJRlkgKGVsZW1lbnQpICBcCisgICAgICAgICIuIEhhdmUgJWQgYnl0ZXMgbmVlZCAlIiBHX0dTU0laRV9GT1JNQVQsIFwKKyAgICAgICAgKGludCkgKGVuZHB0ciAtIGlucHRyKSwgc2l6ZW9mKGVsZW1lbnQpKTsgXAorICAgIGdvdG8gZXJyb3JfbGFiZWw7IFwKKyAgfSBcCisgIG91dHB0ciA9IChlbGVtZW50ICopIGlucHRyOyBcCisgIGlucHRyICs9IHNpemVvZiAoZWxlbWVudCk7IFwKK31HX1NUTVRfRU5ECisKKyNkZWZpbmUgdW5wYWNrX2NvbnN0X3N0cmluZyhpbnB0ciwgb3V0cHRyLCBlbmRwdHIsIGVycm9yX2xhYmVsKSBHX1NUTVRfU1RBUlR7XAorICBnaW50IF9sZW4gPSBfc3RybmxlbiAoaW5wdHIsIChlbmRwdHItaW5wdHIpKTsgXAorICBpZiAoX2xlbiA9PSAtMSkgXAorICAgIGdvdG8gZXJyb3JfbGFiZWw7IFwKKyAgb3V0cHRyID0gZ19pbnRlcm5fc3RyaW5nICgoY29uc3QgZ2NoYXIgKilpbnB0cik7IFwKKyAgaW5wdHIgKz0gX2xlbiArIDE7IFwKK31HX1NUTVRfRU5ECisKKyNkZWZpbmUgdW5wYWNrX3N0cmluZyhpbnB0ciwgb3V0cHRyLCBlbmRwdHIsIGVycm9yX2xhYmVsKSAgR19TVE1UX1NUQVJUe1wKKyAgZ2ludCBfbGVuID0gX3N0cm5sZW4gKGlucHRyLCAoZW5kcHRyLWlucHRyKSk7IFwKKyAgaWYgKF9sZW4gPT0gLTEpIFwKKyAgICBnb3RvIGVycm9yX2xhYmVsOyBcCisgIG91dHB0ciA9IGdfbWVtZHVwICgoZ2NvbnN0cG9pbnRlcilpbnB0ciwgX2xlbiArIDEpOyBcCisgIGlucHRyICs9IF9sZW4gKyAxOyBcCit9R19TVE1UX0VORAorCisjZGVmaW5lIHVucGFja19zdHJpbmdfbm9jb3B5KGlucHRyLCBvdXRwdHIsIGVuZHB0ciwgZXJyb3JfbGFiZWwpICBHX1NUTVRfU1RBUlR7XAorICBnaW50IF9sZW4gPSBfc3RybmxlbiAoaW5wdHIsIChlbmRwdHItaW5wdHIpKTsgXAorICBpZiAoX2xlbiA9PSAtMSkgXAorICAgIGdvdG8gZXJyb3JfbGFiZWw7IFwKKyAgb3V0cHRyID0gKGNvbnN0IGdjaGFyICopaW5wdHI7IFwKKyAgaW5wdHIgKz0gX2xlbiArIDE7IFwKK31HX1NUTVRfRU5ECisKKyNkZWZpbmUgQUxJR05NRU5UICAgICAgICAgICAgKHNpemVvZiAodm9pZCAqKSkKKyNkZWZpbmUgYWxpZ25tZW50KF9hZGRyZXNzKSAgKGdzaXplKV9hZGRyZXNzJUFMSUdOTUVOVAorI2RlZmluZSBhbGlnbihfcHRyKSAgICAgICAgICBfcHRyICs9ICgoIGFsaWdubWVudChfcHRyKSA9PSAwKSA/IDAgOiBBTElHTk1FTlQtYWxpZ25tZW50KF9wdHIpKQorCit2b2lkCitfcHJpdl9nc3RfcmVnaXN0cnlfY2h1bmtfZnJlZSAoR3N0UmVnaXN0cnlDaHVuayAqIGNodW5rKQoreworICBpZiAoIShjaHVuay0+ZmxhZ3MgJiBHU1RfUkVHSVNUUllfQ0hVTktfRkxBR19DT05TVCkpIHsKKyAgICBpZiAoKGNodW5rLT5mbGFncyAmIEdTVF9SRUdJU1RSWV9DSFVOS19GTEFHX01BTExPQykpCisgICAgICBnX2ZyZWUgKGNodW5rLT5kYXRhKTsKKyAgICBlbHNlCisgICAgICBnX3NsaWNlX2ZyZWUxIChjaHVuay0+c2l6ZSwgY2h1bmstPmRhdGEpOworICB9CisgIGdfc2xpY2VfZnJlZSAoR3N0UmVnaXN0cnlDaHVuaywgY2h1bmspOworfQorCisvKgorICogZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX2NvbnN0X3N0cmluZzoKKyAqCisgKiBTdG9yZSBhIGNvbnN0IHN0cmluZyBpbiBhIGJpbmFyeSBjaHVuay4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBmb3Igc3VjY2VzcworICovCitpbmxpbmUgc3RhdGljIGdib29sZWFuCitnc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfY29uc3Rfc3RyaW5nIChHTGlzdCAqKiBsaXN0LCBjb25zdCBnY2hhciAqIHN0cikKK3sKKyAgR3N0UmVnaXN0cnlDaHVuayAqY2h1bms7CisKKyAgaWYgKEdfVU5MSUtFTFkgKHN0ciA9PSBOVUxMKSkgeworICAgIEdTVF9FUlJPUiAoInVuZXhwZWN0ZWQgTlVMTCBzdHJpbmcgaW4gcGx1Z2luIG9yIHBsdWdpbiBmZWF0dXJlIGRhdGEiKTsKKyAgICBzdHIgPSAiIjsKKyAgfQorCisgIGNodW5rID0gZ19zbGljZV9uZXcgKEdzdFJlZ2lzdHJ5Q2h1bmspOworICBjaHVuay0+ZGF0YSA9IChncG9pbnRlcikgc3RyOworICBjaHVuay0+c2l6ZSA9IHN0cmxlbiAoKGdjaGFyICopIGNodW5rLT5kYXRhKSArIDE7CisgIGNodW5rLT5mbGFncyA9IEdTVF9SRUdJU1RSWV9DSFVOS19GTEFHX0NPTlNUOworICBjaHVuay0+YWxpZ24gPSBGQUxTRTsKKyAgKmxpc3QgPSBnX2xpc3RfcHJlcGVuZCAoKmxpc3QsIGNodW5rKTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgKiBnc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfc3RyaW5nOgorICoKKyAqIFN0b3JlIGEgc3RyaW5nIGluIGEgYmluYXJ5IGNodW5rLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGZvciBzdWNjZXNzCisgKi8KK2lubGluZSBzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9zdHJpbmcgKEdMaXN0ICoqIGxpc3QsIGdjaGFyICogc3RyKQoreworICBHc3RSZWdpc3RyeUNodW5rICpjaHVuazsKKworICBjaHVuayA9IGdfc2xpY2VfbmV3IChHc3RSZWdpc3RyeUNodW5rKTsKKyAgY2h1bmstPmRhdGEgPSBzdHI7CisgIGNodW5rLT5zaXplID0gc3RybGVuICgoZ2NoYXIgKikgY2h1bmstPmRhdGEpICsgMTsKKyAgY2h1bmstPmZsYWdzID0gR1NUX1JFR0lTVFJZX0NIVU5LX0ZMQUdfTUFMTE9DOworICBjaHVuay0+YWxpZ24gPSBGQUxTRTsKKyAgKmxpc3QgPSBnX2xpc3RfcHJlcGVuZCAoKmxpc3QsIGNodW5rKTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgKiBnc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfZGF0YToKKyAqCisgKiBTdG9yZSBzb21lIGRhdGEgaW4gYSBiaW5hcnkgY2h1bmsuCisgKgorICogUmV0dXJuczogdGhlIGluaXRpYWxpemVkIGNodW5rCisgKi8KK2lubGluZSBzdGF0aWMgR3N0UmVnaXN0cnlDaHVuayAqCitnc3RfcmVnaXN0cnlfY2h1bmtzX21ha2VfZGF0YSAoZ3BvaW50ZXIgZGF0YSwgZ3Vsb25nIHNpemUpCit7CisgIEdzdFJlZ2lzdHJ5Q2h1bmsgKmNodW5rOworCisgIGNodW5rID0gZ19zbGljZV9uZXcgKEdzdFJlZ2lzdHJ5Q2h1bmspOworICBjaHVuay0+ZGF0YSA9IGRhdGE7CisgIGNodW5rLT5zaXplID0gc2l6ZTsKKyAgY2h1bmstPmZsYWdzID0gR1NUX1JFR0lTVFJZX0NIVU5LX0ZMQUdfTk9ORTsKKyAgY2h1bmstPmFsaWduID0gVFJVRTsKKyAgcmV0dXJuIGNodW5rOworfQorCisKKy8qCisgKiBnc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfcGFkX3RlbXBsYXRlOgorICoKKyAqIFN0b3JlIHBhZF90ZW1wbGF0ZXMgaW4gYmluYXJ5IGNodW5rcy4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBmb3Igc3VjY2VzcworICovCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9wYWRfdGVtcGxhdGUgKEdMaXN0ICoqIGxpc3QsCisgICAgR3N0U3RhdGljUGFkVGVtcGxhdGUgKiB0ZW1wbGF0ZSkKK3sKKyAgR3N0UmVnaXN0cnlDaHVua1BhZFRlbXBsYXRlICpwdDsKKyAgR3N0UmVnaXN0cnlDaHVuayAqY2hrOworCisgIHB0ID0gZ19zbGljZV9uZXcgKEdzdFJlZ2lzdHJ5Q2h1bmtQYWRUZW1wbGF0ZSk7CisgIGNoayA9CisgICAgICBnc3RfcmVnaXN0cnlfY2h1bmtzX21ha2VfZGF0YSAocHQsIHNpemVvZiAoR3N0UmVnaXN0cnlDaHVua1BhZFRlbXBsYXRlKSk7CisKKyAgcHQtPnByZXNlbmNlID0gdGVtcGxhdGUtPnByZXNlbmNlOworICBwdC0+ZGlyZWN0aW9uID0gdGVtcGxhdGUtPmRpcmVjdGlvbjsKKworICAvKiBwYWNrIHBhZCB0ZW1wbGF0ZSBzdHJpbmdzICovCisgIGdzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9jb25zdF9zdHJpbmcgKGxpc3QsCisgICAgICAoZ2NoYXIgKikgKHRlbXBsYXRlLT5zdGF0aWNfY2Fwcy5zdHJpbmcpKTsKKyAgZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX2NvbnN0X3N0cmluZyAobGlzdCwgdGVtcGxhdGUtPm5hbWVfdGVtcGxhdGUpOworCisgICpsaXN0ID0gZ19saXN0X3ByZXBlbmQgKCpsaXN0LCBjaGspOworCisgIHJldHVybiBUUlVFOworfQorCisjZGVmaW5lIFZBTElEQVRFX1VURjgoX19kZXRhaWxzLCBfX2VudHJ5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYgKCFnX3V0ZjhfdmFsaWRhdGUgKF9fZGV0YWlscy0+X19lbnRyeSwgLTEsIE5VTEwpKSB7ICAgICAgICAgICAgICAgICAgICBcCisgICAgZ193YXJuaW5nICgiSW52YWxpZCBVVEYtOCBpbiAiIEdfU1RSSU5HSUZZIChfX2VudHJ5KSAiOiAlcyIsICAgICAgICAgICAgXAorICAgICAgICBfX2RldGFpbHMtPl9fZW50cnkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnX2ZyZWUgKF9fZGV0YWlscy0+X19lbnRyeSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX19kZXRhaWxzLT5fX2VudHJ5ID0gZ19zdHJkdXAgKCJbRVJST1I6IGludmFsaWQgVVRGLThdIik7ICAgICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gR19TVE1UX0VORAorCisvKgorICogZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX2ZlYXR1cmU6CisgKgorICogU3RvcmUgZmVhdHVyZXMgaW4gYmluYXJ5IGNodW5rcy4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBmb3Igc3VjY2VzcworICovCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9mZWF0dXJlIChHTGlzdCAqKiBsaXN0LCBHc3RQbHVnaW5GZWF0dXJlICogZmVhdHVyZSkKK3sKKyAgY29uc3QgZ2NoYXIgKnR5cGVfbmFtZSA9IGdfdHlwZV9uYW1lIChHX09CSkVDVF9UWVBFIChmZWF0dXJlKSk7CisgIEdzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5GZWF0dXJlICpwZiA9IE5VTEw7CisgIEdzdFJlZ2lzdHJ5Q2h1bmsgKmNoayA9IE5VTEw7CisgIEdMaXN0ICp3YWxrOworCisgIGlmICghdHlwZV9uYW1lKSB7CisgICAgR1NUX0VSUk9SICgiTlVMTCBmZWF0dXJlIHR5cGVfbmFtZSwgYWJvcnRpbmcuIik7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgaWYgKEdTVF9JU19FTEVNRU5UX0ZBQ1RPUlkgKGZlYXR1cmUpKSB7CisgICAgR3N0UmVnaXN0cnlDaHVua0VsZW1lbnRGYWN0b3J5ICplZjsKKyAgICBHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeSA9IEdTVF9FTEVNRU5UX0ZBQ1RPUlkgKGZlYXR1cmUpOworCisgICAgLyogSW5pdGlhbGl6ZSB3aXRoIHplcm9lcyBiZWNhdXNlIG9mIHN0cnVjdCBwYWRkaW5nIGFuZAorICAgICAqIHZhbGdyaW5kIGNvbXBsYWluaW5nIGFib3V0IGNvcHlpbmcgdW5pdGlhbGl6ZWQgbWVtb3J5CisgICAgICovCisgICAgZWYgPSBnX3NsaWNlX25ldzAgKEdzdFJlZ2lzdHJ5Q2h1bmtFbGVtZW50RmFjdG9yeSk7CisgICAgY2hrID0KKyAgICAgICAgZ3N0X3JlZ2lzdHJ5X2NodW5rc19tYWtlX2RhdGEgKGVmLAorICAgICAgICBzaXplb2YgKEdzdFJlZ2lzdHJ5Q2h1bmtFbGVtZW50RmFjdG9yeSkpOworICAgIGVmLT5ucGFkdGVtcGxhdGVzID0gZWYtPm5pbnRlcmZhY2VzID0gZWYtPm51cmlwcm90b2NvbHMgPSAwOworICAgIHBmID0gKEdzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5GZWF0dXJlICopIGVmOworCisgICAgLyogc2F2ZSBpbnRlcmZhY2VzICovCisgICAgZm9yICh3YWxrID0gZmFjdG9yeS0+aW50ZXJmYWNlczsgd2FsazsKKyAgICAgICAgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSwgZWYtPm5pbnRlcmZhY2VzKyspIHsKKyAgICAgIGdzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9jb25zdF9zdHJpbmcgKGxpc3QsIChnY2hhciAqKSB3YWxrLT5kYXRhKTsKKyAgICB9CisgICAgR1NUX0RFQlVHICgiRmVhdHVyZSAlczogc2F2ZWQgJWQgaW50ZXJmYWNlcyAlZCBwYWQgdGVtcGxhdGVzIiwKKyAgICAgICAgR1NUX09CSkVDVF9OQU1FIChmZWF0dXJlKSwgZWYtPm5pbnRlcmZhY2VzLCBlZi0+bnBhZHRlbXBsYXRlcyk7CisKKyAgICAvKiBzYXZlIHVyaXR5cGVzICovCisgICAgaWYgKEdTVF9VUklfVFlQRV9JU19WQUxJRCAoZmFjdG9yeS0+dXJpX3R5cGUpKSB7CisgICAgICBpZiAoZmFjdG9yeS0+dXJpX3Byb3RvY29scyAmJiAqZmFjdG9yeS0+dXJpX3Byb3RvY29scykgeworICAgICAgICBHc3RSZWdpc3RyeUNodW5rICpzdWJjaGs7CisgICAgICAgIGdjaGFyICoqcHJvdG9jb2w7CisKKyAgICAgICAgc3ViY2hrID0KKyAgICAgICAgICAgIGdzdF9yZWdpc3RyeV9jaHVua3NfbWFrZV9kYXRhICgmZmFjdG9yeS0+dXJpX3R5cGUsCisgICAgICAgICAgICBzaXplb2YgKGZhY3RvcnktPnVyaV90eXBlKSk7CisgICAgICAgIHN1YmNoay0+ZmxhZ3MgPSBHU1RfUkVHSVNUUllfQ0hVTktfRkxBR19DT05TVDsKKworICAgICAgICBwcm90b2NvbCA9IGZhY3RvcnktPnVyaV9wcm90b2NvbHM7CisgICAgICAgIHdoaWxlICgqcHJvdG9jb2wpIHsKKyAgICAgICAgICBnc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfY29uc3Rfc3RyaW5nIChsaXN0LCAqcHJvdG9jb2wrKyk7CisgICAgICAgICAgZWYtPm51cmlwcm90b2NvbHMrKzsKKyAgICAgICAgfQorICAgICAgICAqbGlzdCA9IGdfbGlzdF9wcmVwZW5kICgqbGlzdCwgc3ViY2hrKTsKKyAgICAgICAgR1NUX0RFQlVHICgiU2F2ZWQgJWQgVXJpVHlwZXMiLCBlZi0+bnVyaXByb3RvY29scyk7CisgICAgICB9IGVsc2UgeworICAgICAgICBnX3dhcm5pbmcgKCJHU3RyZWFtZXIgZmVhdHVyZSAnJXMnIGlzIFVSSSBoYW5kbGVyIGJ1dCBkb2VzIG5vdCBwcm92aWRlIgorICAgICAgICAgICAgIiBhbnkgcHJvdG9jb2xzIGl0IGNhbiBoYW5kbGUiLCBHU1RfT0JKRUNUX05BTUUgKGZlYXR1cmUpKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBzYXZlIHBhZC10ZW1wbGF0ZXMgKi8KKyAgICBmb3IgKHdhbGsgPSBmYWN0b3J5LT5zdGF0aWNwYWR0ZW1wbGF0ZXM7IHdhbGs7CisgICAgICAgIHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsayksIGVmLT5ucGFkdGVtcGxhdGVzKyspIHsKKyAgICAgIEdzdFN0YXRpY1BhZFRlbXBsYXRlICp0ZW1wbGF0ZSA9IHdhbGstPmRhdGE7CisKKyAgICAgIGlmICghZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX3BhZF90ZW1wbGF0ZSAobGlzdCwgdGVtcGxhdGUpKSB7CisgICAgICAgIEdTVF9FUlJPUiAoIkNhbid0IGZpbGwgcGFkIHRlbXBsYXRlLCBhYm9ydGluZy4iKTsKKyAgICAgICAgZ290byBmYWlsOworICAgICAgfQorICAgIH0KKworICAgIC8qIHBhY2sgZWxlbWVudCBtZXRhZGF0YSBzdHJpbmdzICovCisgICAgZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX3N0cmluZyAobGlzdCwKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKGZhY3RvcnktPm1ldGFkYXRhKSk7CisgIH0gZWxzZSBpZiAoR1NUX0lTX1RZUEVfRklORF9GQUNUT1JZIChmZWF0dXJlKSkgeworICAgIEdzdFJlZ2lzdHJ5Q2h1bmtUeXBlRmluZEZhY3RvcnkgKnRmZjsKKyAgICBHc3RUeXBlRmluZEZhY3RvcnkgKmZhY3RvcnkgPSBHU1RfVFlQRV9GSU5EX0ZBQ1RPUlkgKGZlYXR1cmUpOworICAgIGdjaGFyICpzdHI7CisKKyAgICAvKiBJbml0aWFsaXplIHdpdGggemVyb2VzIGJlY2F1c2Ugb2Ygc3RydWN0IHBhZGRpbmcgYW5kCisgICAgICogdmFsZ3JpbmQgY29tcGxhaW5pbmcgYWJvdXQgY29weWluZyB1bml0aWFsaXplZCBtZW1vcnkKKyAgICAgKi8KKyAgICB0ZmYgPSBnX3NsaWNlX25ldzAgKEdzdFJlZ2lzdHJ5Q2h1bmtUeXBlRmluZEZhY3RvcnkpOworICAgIGNoayA9CisgICAgICAgIGdzdF9yZWdpc3RyeV9jaHVua3NfbWFrZV9kYXRhICh0ZmYsCisgICAgICAgIHNpemVvZiAoR3N0UmVnaXN0cnlDaHVua1R5cGVGaW5kRmFjdG9yeSkpOworICAgIHRmZi0+bmV4dGVuc2lvbnMgPSAwOworICAgIHBmID0gKEdzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5GZWF0dXJlICopIHRmZjsKKworICAgIC8qIHNhdmUgZXh0ZW5zaW9ucyAqLworICAgIGlmIChmYWN0b3J5LT5leHRlbnNpb25zKSB7CisgICAgICB3aGlsZSAoZmFjdG9yeS0+ZXh0ZW5zaW9uc1t0ZmYtPm5leHRlbnNpb25zXSkgeworICAgICAgICBnc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfY29uc3Rfc3RyaW5nIChsaXN0LAorICAgICAgICAgICAgZmFjdG9yeS0+ZXh0ZW5zaW9uc1t0ZmYtPm5leHRlbnNpb25zKytdKTsKKyAgICAgIH0KKyAgICB9CisgICAgLyogc2F2ZSBjYXBzICovCisgICAgaWYgKGZhY3RvcnktPmNhcHMpIHsKKyAgICAgIC8qIHdlIGNvcHkgdGhlIGNhcHMgaGVyZSBzbyB3ZSBjYW4gc2ltcGxpZnkgdGhlbSBiZWZvcmUgc2F2aW5nLiBUaGlzCisgICAgICAgKiBpcyBhIGxvdCBmYXN0ZXIgd2hlbiBsb2FkaW5nIHRoZW0gbGF0ZXIgb24gKi8KKyAgICAgIEdzdENhcHMgKmNvcHkgPSBnc3RfY2Fwc19jb3B5IChmYWN0b3J5LT5jYXBzKTsKKworICAgICAgZ3N0X2NhcHNfZG9fc2ltcGxpZnkgKGNvcHkpOworICAgICAgc3RyID0gZ3N0X2NhcHNfdG9fc3RyaW5nIChjb3B5KTsKKyAgICAgIGdzdF9jYXBzX3VucmVmIChjb3B5KTsKKyAgICAgIGdzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9zdHJpbmcgKGxpc3QsIHN0cik7CisgICAgfSBlbHNlIHsKKyAgICAgIGdzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9jb25zdF9zdHJpbmcgKGxpc3QsICIiKTsKKyAgICB9CisgIH0gZWxzZSBpZiAoR1NUX0lTX0lOREVYX0ZBQ1RPUlkgKGZlYXR1cmUpKSB7CisgICAgR3N0SW5kZXhGYWN0b3J5ICpmYWN0b3J5ID0gR1NUX0lOREVYX0ZBQ1RPUlkgKGZlYXR1cmUpOworCisgICAgcGYgPSBnX3NsaWNlX25ldyAoR3N0UmVnaXN0cnlDaHVua1BsdWdpbkZlYXR1cmUpOworICAgIGNoayA9CisgICAgICAgIGdzdF9yZWdpc3RyeV9jaHVua3NfbWFrZV9kYXRhIChwZiwKKyAgICAgICAgc2l6ZW9mIChHc3RSZWdpc3RyeUNodW5rUGx1Z2luRmVhdHVyZSkpOworCisgICAgLyogcGFjayBlbGVtZW50IGZhY3Rvcnkgc3RyaW5ncyAqLworICAgIGdzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9jb25zdF9zdHJpbmcgKGxpc3QsIGZhY3RvcnktPmxvbmdkZXNjKTsKKyAgfSBlbHNlIHsKKyAgICBHU1RfV0FSTklORyAoInVuaGFuZGxlZCBmZWF0dXJlIHR5cGUgJyVzJyIsIHR5cGVfbmFtZSk7CisgIH0KKworICBpZiAocGYpIHsKKyAgICBwZi0+cmFuayA9IGZlYXR1cmUtPnJhbms7CisgICAgKmxpc3QgPSBnX2xpc3RfcHJlcGVuZCAoKmxpc3QsIGNoayk7CisKKyAgICAvKiBwYWNrIHBsdWdpbiBmZWF0dXJlIHN0cmluZ3MgKi8KKyAgICBnc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfY29uc3Rfc3RyaW5nIChsaXN0LCBHU1RfT0JKRUNUX05BTUUgKGZlYXR1cmUpKTsKKyAgICBnc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfY29uc3Rfc3RyaW5nIChsaXN0LCAoZ2NoYXIgKikgdHlwZV9uYW1lKTsKKworICAgIHJldHVybiBUUlVFOworICB9CisKKyAgLyogRXJyb3JzICovCitmYWlsOgorICBnX2ZyZWUgKGNoayk7CisgIGdfZnJlZSAocGYpOworICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX3BsdWdpbl9kZXAgKEdMaXN0ICoqIGxpc3QsIEdzdFBsdWdpbkRlcCAqIGRlcCkKK3sKKyAgR3N0UmVnaXN0cnlDaHVua0RlcCAqZWQ7CisgIEdzdFJlZ2lzdHJ5Q2h1bmsgKmNoazsKKyAgZ2NoYXIgKipzOworCisgIGVkID0gZ19zbGljZV9uZXcgKEdzdFJlZ2lzdHJ5Q2h1bmtEZXApOworICBjaGsgPSBnc3RfcmVnaXN0cnlfY2h1bmtzX21ha2VfZGF0YSAoZWQsIHNpemVvZiAoR3N0UmVnaXN0cnlDaHVua0RlcCkpOworCisgIGVkLT5mbGFncyA9IGRlcC0+ZmxhZ3M7CisgIGVkLT5uX2Vudl92YXJzID0gMDsKKyAgZWQtPm5fcGF0aHMgPSAwOworICBlZC0+bl9uYW1lcyA9IDA7CisKKyAgZWQtPmVudl9oYXNoID0gZGVwLT5lbnZfaGFzaDsKKyAgZWQtPnN0YXRfaGFzaCA9IGRlcC0+c3RhdF9oYXNoOworCisgIGZvciAocyA9IGRlcC0+ZW52X3ZhcnM7IHMgIT0gTlVMTCAmJiAqcyAhPSBOVUxMOyArK3MsICsrZWQtPm5fZW52X3ZhcnMpCisgICAgZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX3N0cmluZyAobGlzdCwgZ19zdHJkdXAgKCpzKSk7CisKKyAgZm9yIChzID0gZGVwLT5wYXRoczsgcyAhPSBOVUxMICYmICpzICE9IE5VTEw7ICsrcywgKytlZC0+bl9wYXRocykKKyAgICBnc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfc3RyaW5nIChsaXN0LCBnX3N0cmR1cCAoKnMpKTsKKworICBmb3IgKHMgPSBkZXAtPm5hbWVzOyBzICE9IE5VTEwgJiYgKnMgIT0gTlVMTDsgKytzLCArK2VkLT5uX25hbWVzKQorICAgIGdzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9zdHJpbmcgKGxpc3QsIGdfc3RyZHVwICgqcykpOworCisgICpsaXN0ID0gZ19saXN0X3ByZXBlbmQgKCpsaXN0LCBjaGspOworCisgIEdTVF9MT0cgKCJTYXZlZCBleHRlcm5hbCBwbHVnaW4gZGVwZW5kZW5jeSIpOworICByZXR1cm4gVFJVRTsKK30KKworLyoKKyAqIF9wcml2X2dzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9wbHVnaW46CisgKgorICogQWRhcHQgYSBHc3RQbHVnaW4gdG8gb3VyIEdzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5FbGVtZW50IHN0cnVjdHVyZSwgYW5kCisgKiBwcmVwZW5kIGl0IGFzIGEgR3N0UmVnaXN0cnlDaHVuayBpbiB0aGUgcHJvdmlkZWQgbGlzdC4KKyAqCisgKi8KK2dib29sZWFuCitfcHJpdl9nc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfcGx1Z2luIChHTGlzdCAqKiBsaXN0LCBHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5LAorICAgIEdzdFBsdWdpbiAqIHBsdWdpbikKK3sKKyAgR3N0UmVnaXN0cnlDaHVua1BsdWdpbkVsZW1lbnQgKnBlOworICBHc3RSZWdpc3RyeUNodW5rICpjaGs7CisgIEdMaXN0ICpwbHVnaW5fZmVhdHVyZXMgPSBOVUxMOworICBHTGlzdCAqd2FsazsKKworICBwZSA9IGdfc2xpY2VfbmV3IChHc3RSZWdpc3RyeUNodW5rUGx1Z2luRWxlbWVudCk7CisgIGNoayA9CisgICAgICBnc3RfcmVnaXN0cnlfY2h1bmtzX21ha2VfZGF0YSAocGUsCisgICAgICBzaXplb2YgKEdzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5FbGVtZW50KSk7CisKKyAgcGUtPmZpbGVfc2l6ZSA9IHBsdWdpbi0+ZmlsZV9zaXplOworICBwZS0+ZmlsZV9tdGltZSA9IHBsdWdpbi0+ZmlsZV9tdGltZTsKKyAgcGUtPm5mZWF0dXJlcyA9IDA7CisgIHBlLT5uX2RlcHMgPSAwOworCisgIC8qIHBhY2sgZXh0ZXJuYWwgZGVwcyAqLworICBmb3IgKHdhbGsgPSBwbHVnaW4tPnByaXYtPmRlcHM7IHdhbGsgIT0gTlVMTDsgd2FsayA9IHdhbGstPm5leHQpIHsKKyAgICBpZiAoIWdzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9wbHVnaW5fZGVwIChsaXN0LCB3YWxrLT5kYXRhKSkgeworICAgICAgR1NUX0VSUk9SICgiQ291bGQgbm90IHNhdmUgZXh0ZXJuYWwgcGx1Z2luIGRlcGVuZGVuY3ksIGFib3J0aW5nLiIpOworICAgICAgZ290byBmYWlsOworICAgIH0KKyAgICArK3BlLT5uX2RlcHM7CisgIH0KKworICAvKiBwYWNrIHBsdWdpbiBmZWF0dXJlcyAqLworICBwbHVnaW5fZmVhdHVyZXMgPQorICAgICAgZ3N0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3RfYnlfcGx1Z2luIChyZWdpc3RyeSwgcGx1Z2luLT5kZXNjLm5hbWUpOworICBmb3IgKHdhbGsgPSBwbHVnaW5fZmVhdHVyZXM7IHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsayksIHBlLT5uZmVhdHVyZXMrKykgeworICAgIEdzdFBsdWdpbkZlYXR1cmUgKmZlYXR1cmUgPSBHU1RfUExVR0lOX0ZFQVRVUkUgKHdhbGstPmRhdGEpOworCisgICAgaWYgKCFnc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfZmVhdHVyZSAobGlzdCwgZmVhdHVyZSkpIHsKKyAgICAgIEdTVF9FUlJPUiAoIkNhbid0IGZpbGwgcGx1Z2luIGZlYXR1cmUsIGFib3J0aW5nLiIpOworICAgICAgZ290byBmYWlsOworICAgIH0KKyAgfQorCisgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUgKHBsdWdpbl9mZWF0dXJlcyk7CisKKyAgLyogcGFjayBjYWNoZSBkYXRhICovCisgIGlmIChwbHVnaW4tPnByaXYtPmNhY2hlX2RhdGEpIHsKKyAgICBnY2hhciAqY2FjaGVfc3RyID0gZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKHBsdWdpbi0+cHJpdi0+Y2FjaGVfZGF0YSk7CisgICAgZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX3N0cmluZyAobGlzdCwgY2FjaGVfc3RyKTsKKyAgfSBlbHNlIHsKKyAgICBnc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfY29uc3Rfc3RyaW5nIChsaXN0LCAiIik7CisgIH0KKworICAvKiBwYWNrIHBsdWdpbiBlbGVtZW50IHN0cmluZ3MgKi8KKyAgZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX2NvbnN0X3N0cmluZyAobGlzdCwKKyAgICAgIChwbHVnaW4tPmRlc2MucmVsZWFzZV9kYXRldGltZSkgPyBwbHVnaW4tPmRlc2MucmVsZWFzZV9kYXRldGltZSA6ICIiKTsKKyAgZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX2NvbnN0X3N0cmluZyAobGlzdCwgcGx1Z2luLT5kZXNjLm9yaWdpbik7CisgIGdzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9jb25zdF9zdHJpbmcgKGxpc3QsIHBsdWdpbi0+ZGVzYy5wYWNrYWdlKTsKKyAgZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX2NvbnN0X3N0cmluZyAobGlzdCwgcGx1Z2luLT5kZXNjLnNvdXJjZSk7CisgIGdzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9jb25zdF9zdHJpbmcgKGxpc3QsIHBsdWdpbi0+ZGVzYy5saWNlbnNlKTsKKyAgZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX2NvbnN0X3N0cmluZyAobGlzdCwgcGx1Z2luLT5kZXNjLnZlcnNpb24pOworICBnc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfY29uc3Rfc3RyaW5nIChsaXN0LCBwbHVnaW4tPmZpbGVuYW1lKTsKKyAgZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX2NvbnN0X3N0cmluZyAobGlzdCwgcGx1Z2luLT5kZXNjLmRlc2NyaXB0aW9uKTsKKyAgZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX2NvbnN0X3N0cmluZyAobGlzdCwgcGx1Z2luLT5kZXNjLm5hbWUpOworCisgICpsaXN0ID0gZ19saXN0X3ByZXBlbmQgKCpsaXN0LCBjaGspOworCisgIEdTVF9ERUJVRyAoIkZvdW5kICVkIGZlYXR1cmVzIGluIHBsdWdpbiBcIiVzXCIiLCBwZS0+bmZlYXR1cmVzLAorICAgICAgcGx1Z2luLT5kZXNjLm5hbWUpOworICByZXR1cm4gVFJVRTsKKworICAvKiBFcnJvcnMgKi8KK2ZhaWw6CisgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUgKHBsdWdpbl9mZWF0dXJlcyk7CisgIGdfZnJlZSAoY2hrKTsKKyAgZ19mcmVlIChwZSk7CisgIHJldHVybiBGQUxTRTsKK30KKworLyoKKyAqIGdzdF9yZWdpc3RyeV9jaHVua3NfbG9hZF9wYWRfdGVtcGxhdGU6CisgKgorICogTWFrZSBhIG5ldyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBmcm9tIGN1cnJlbnQgR3N0UmVnaXN0cnlDaHVua1BhZFRlbXBsYXRlCisgKiBzdHJ1Y3R1cmUuCisgKgorICogUmV0dXJuczogbmV3IEdzdFN0YXRpY1BhZFRlbXBsYXRlCisgKi8KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3JlZ2lzdHJ5X2NodW5rc19sb2FkX3BhZF90ZW1wbGF0ZSAoR3N0RWxlbWVudEZhY3RvcnkgKiBmYWN0b3J5LCBnY2hhciAqKiBpbiwKKyAgICBnY2hhciAqIGVuZCkKK3sKKyAgR3N0UmVnaXN0cnlDaHVua1BhZFRlbXBsYXRlICpwdDsKKyAgR3N0U3RhdGljUGFkVGVtcGxhdGUgKnRlbXBsYXRlID0gTlVMTDsKKworICBhbGlnbiAoKmluKTsKKyAgR1NUX0RFQlVHICgiUmVhZGluZy9jYXN0aW5nIGZvciBHc3RSZWdpc3RyeUNodW5rUGFkVGVtcGxhdGUgYXQgYWRkcmVzcyAlcCIsCisgICAgICAqaW4pOworICB1bnBhY2tfZWxlbWVudCAoKmluLCBwdCwgR3N0UmVnaXN0cnlDaHVua1BhZFRlbXBsYXRlLCBlbmQsIGZhaWwpOworCisgIHRlbXBsYXRlID0gZ19zbGljZV9uZXcgKEdzdFN0YXRpY1BhZFRlbXBsYXRlKTsKKyAgdGVtcGxhdGUtPnByZXNlbmNlID0gcHQtPnByZXNlbmNlOworICB0ZW1wbGF0ZS0+ZGlyZWN0aW9uID0gKEdzdFBhZERpcmVjdGlvbikgcHQtPmRpcmVjdGlvbjsKKyAgdGVtcGxhdGUtPnN0YXRpY19jYXBzLmNhcHMubWluaV9vYmplY3QucmVmY291bnQgPSAwOworCisgIC8qIHVucGFjayBwYWQgdGVtcGxhdGUgc3RyaW5ncyAqLworICB1bnBhY2tfY29uc3Rfc3RyaW5nICgqaW4sIHRlbXBsYXRlLT5uYW1lX3RlbXBsYXRlLCBlbmQsIGZhaWwpOworICB1bnBhY2tfY29uc3Rfc3RyaW5nICgqaW4sIHRlbXBsYXRlLT5zdGF0aWNfY2Fwcy5zdHJpbmcsIGVuZCwgZmFpbCk7CisKKyAgX19nc3RfZWxlbWVudF9mYWN0b3J5X2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChmYWN0b3J5LCB0ZW1wbGF0ZSk7CisgIEdTVF9ERUJVRyAoIkFkZGVkIHBhZF90ZW1wbGF0ZSAlcyIsIHRlbXBsYXRlLT5uYW1lX3RlbXBsYXRlKTsKKworICByZXR1cm4gVFJVRTsKK2ZhaWw6CisgIEdTVF9JTkZPICgiUmVhZGluZyBwYWQgdGVtcGxhdGUgZmFpbGVkIik7CisgIGlmICh0ZW1wbGF0ZSkKKyAgICBnX3NsaWNlX2ZyZWUgKEdzdFN0YXRpY1BhZFRlbXBsYXRlLCB0ZW1wbGF0ZSk7CisgIHJldHVybiBGQUxTRTsKK30KKworLyoKKyAqIGdzdF9yZWdpc3RyeV9jaHVua3NfbG9hZF9mZWF0dXJlOgorICoKKyAqIE1ha2UgYSBuZXcgR3N0UGx1Z2luRmVhdHVyZSBmcm9tIGN1cnJlbnQgYmluYXJ5IHBsdWdpbiBmZWF0dXJlIHN0cnVjdHVyZQorICoKKyAqIFJldHVybnM6IG5ldyBHc3RQbHVnaW5GZWF0dXJlCisgKi8KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3JlZ2lzdHJ5X2NodW5rc19sb2FkX2ZlYXR1cmUgKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksIGdjaGFyICoqIGluLAorICAgIGdjaGFyICogZW5kLCBHc3RQbHVnaW4gKiBwbHVnaW4pCit7CisgIEdzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5GZWF0dXJlICpwZiA9IE5VTEw7CisgIEdzdFBsdWdpbkZlYXR1cmUgKmZlYXR1cmUgPSBOVUxMOworICBjb25zdCBnY2hhciAqY29uc3Rfc3RyLCAqdHlwZV9uYW1lOworICBjb25zdCBnY2hhciAqZmVhdHVyZV9uYW1lOworICBjb25zdCBnY2hhciAqcGx1Z2luX25hbWU7CisgIGdjaGFyICpzdHI7CisgIEdUeXBlIHR5cGU7CisgIGd1aW50IGk7CisKKyAgcGx1Z2luX25hbWUgPSBwbHVnaW4tPmRlc2MubmFtZTsKKworICAvKiB1bnBhY2sgcGx1Z2luIGZlYXR1cmUgc3RyaW5ncyAqLworICB1bnBhY2tfc3RyaW5nX25vY29weSAoKmluLCB0eXBlX25hbWUsIGVuZCwgZmFpbCk7CisKKyAgaWYgKEdfVU5MSUtFTFkgKCF0eXBlX25hbWUpKSB7CisgICAgR1NUX0VSUk9SICgiTm8gZmVhdHVyZSB0eXBlIG5hbWUiKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKworICAvKiB1bnBhY2sgbW9yZSBwbHVnaW4gZmVhdHVyZSBzdHJpbmdzICovCisgIHVucGFja19zdHJpbmdfbm9jb3B5ICgqaW4sIGZlYXR1cmVfbmFtZSwgZW5kLCBmYWlsKTsKKworICBHU1RfREVCVUcgKCJQbHVnaW4gJyVzJyBmZWF0dXJlICclcycgdHlwZW5hbWUgOiAnJXMnIiwgcGx1Z2luX25hbWUsCisgICAgICBmZWF0dXJlX25hbWUsIHR5cGVfbmFtZSk7CisKKyAgaWYgKEdfVU5MSUtFTFkgKCEodHlwZSA9IGdfdHlwZV9mcm9tX25hbWUgKHR5cGVfbmFtZSkpKSkgeworICAgIEdTVF9FUlJPUiAoIlVua25vd24gdHlwZSBmcm9tIHR5cGVuYW1lICclcycgZm9yIHBsdWdpbiAnJXMnIiwgdHlwZV9uYW1lLAorICAgICAgICBwbHVnaW5fbmFtZSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisgIGlmIChHX1VOTElLRUxZICgoZmVhdHVyZSA9IGdfb2JqZWN0X25ld3YgKHR5cGUsIDAsIE5VTEwpKSA9PSBOVUxMKSkgeworICAgIEdTVF9FUlJPUiAoIkNhbid0IGNyZWF0ZSBmZWF0dXJlIGZyb20gdHlwZSIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorICBnc3RfcGx1Z2luX2ZlYXR1cmVfc2V0X25hbWUgKGZlYXR1cmUsIGZlYXR1cmVfbmFtZSk7CisKKyAgaWYgKEdfVU5MSUtFTFkgKCFHU1RfSVNfUExVR0lOX0ZFQVRVUkUgKGZlYXR1cmUpKSkgeworICAgIEdTVF9FUlJPUiAoInR5cGVuYW1lIDogJyVzJyBpcyBub3QgYSBwbHVnaW4gZmVhdHVyZSIsIHR5cGVfbmFtZSk7CisgICAgZ290byBmYWlsOworICB9CisKKyAgaWYgKEdTVF9JU19FTEVNRU5UX0ZBQ1RPUlkgKGZlYXR1cmUpKSB7CisgICAgR3N0UmVnaXN0cnlDaHVua0VsZW1lbnRGYWN0b3J5ICplZjsKKyAgICBndWludCBuOworICAgIEdzdEVsZW1lbnRGYWN0b3J5ICpmYWN0b3J5ID0gR1NUX0VMRU1FTlRfRkFDVE9SWV9DQVNUIChmZWF0dXJlKTsKKyAgICBnY2hhciAqc3RyOworICAgIGNvbnN0IGdjaGFyICptZXRhX2RhdGFfc3RyOworCisgICAgYWxpZ24gKCppbik7CisgICAgR1NUX0xPRyAoIlJlYWRpbmcvY2FzdGluZyBmb3IgR3N0UmVnaXN0cnlDaHVua0VsZW1lbnRGYWN0b3J5IGF0IGFkZHJlc3MgJXAiLAorICAgICAgICAqaW4pOworICAgIHVucGFja19lbGVtZW50ICgqaW4sIGVmLCBHc3RSZWdpc3RyeUNodW5rRWxlbWVudEZhY3RvcnksIGVuZCwgZmFpbCk7CisgICAgcGYgPSAoR3N0UmVnaXN0cnlDaHVua1BsdWdpbkZlYXR1cmUgKikgZWY7CisKKyAgICAvKiB1bnBhY2sgZWxlbWVudCBmYWN0b3J5IHN0cmluZ3MgKi8KKyAgICB1bnBhY2tfc3RyaW5nX25vY29weSAoKmluLCBtZXRhX2RhdGFfc3RyLCBlbmQsIGZhaWwpOworICAgIGlmIChtZXRhX2RhdGFfc3RyICYmICptZXRhX2RhdGFfc3RyKSB7CisgICAgICBmYWN0b3J5LT5tZXRhZGF0YSA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKG1ldGFfZGF0YV9zdHIsIE5VTEwpOworICAgICAgaWYgKCFmYWN0b3J5LT5tZXRhZGF0YSkgeworICAgICAgICBHU1RfRVJST1IKKyAgICAgICAgICAgICgiRXJyb3Igd2hlbiB0cnlpbmcgdG8gZGVzZXJpYWxpemUgc3RydWN0dXJlIGZvciBtZXRhZGF0YSAnJXMnIiwKKyAgICAgICAgICAgIG1ldGFfZGF0YV9zdHIpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgICB9CisgICAgfQorICAgIG4gPSBlZi0+bnBhZHRlbXBsYXRlczsKKyAgICBHU1RfREVCVUcgKCJFbGVtZW50IGZhY3RvcnkgOiBucGFkdGVtcGxhdGVzPSVkIiwgbik7CisKKyAgICAvKiBsb2FkIHBhZCB0ZW1wbGF0ZXMgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICBpZiAoR19VTkxJS0VMWSAoIWdzdF9yZWdpc3RyeV9jaHVua3NfbG9hZF9wYWRfdGVtcGxhdGUgKGZhY3RvcnksIGluLAorICAgICAgICAgICAgICAgICAgZW5kKSkpIHsKKyAgICAgICAgR1NUX0VSUk9SICgiRXJyb3Igd2hpbGUgbG9hZGluZyBiaW5hcnkgcGFkIHRlbXBsYXRlIik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBsb2FkIHVyaXR5cGVzICovCisgICAgaWYgKEdfVU5MSUtFTFkgKChuID0gZWYtPm51cmlwcm90b2NvbHMpKSkgeworICAgICAgR1NUX0RFQlVHICgiUmVhZGluZyAlZCBVcmlUeXBlcyBhdCBhZGRyZXNzICVwIiwgbiwgKmluKTsKKworICAgICAgYWxpZ24gKCppbik7CisgICAgICBmYWN0b3J5LT51cmlfdHlwZSA9ICooKGd1aW50ICopICogaW4pOworICAgICAgKmluICs9IHNpemVvZiAoZmFjdG9yeS0+dXJpX3R5cGUpOworICAgICAgLyp1bnBhY2tfZWxlbWVudCgqaW4sICZmYWN0b3J5LT51cmlfdHlwZSwgZmFjdG9yeS0+dXJpX3R5cGUsIGVuZCwgZmFpbCk7ICovCisKKyAgICAgIGZhY3RvcnktPnVyaV9wcm90b2NvbHMgPSBnX25ldzAgKGdjaGFyICosIG4gKyAxKTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgdW5wYWNrX3N0cmluZyAoKmluLCBzdHIsIGVuZCwgZmFpbCk7CisgICAgICAgIGZhY3RvcnktPnVyaV9wcm90b2NvbHNbaV0gPSBzdHI7CisgICAgICB9CisgICAgfQorICAgIC8qIGxvYWQgaW50ZXJmYWNlcyAqLworICAgIGlmIChHX1VOTElLRUxZICgobiA9IGVmLT5uaW50ZXJmYWNlcykpKSB7CisgICAgICBHU1RfREVCVUcgKCJSZWFkaW5nICVkIEludGVyZmFjZXMgYXQgYWRkcmVzcyAlcCIsIG4sICppbik7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgIHVucGFja19zdHJpbmdfbm9jb3B5ICgqaW4sIGNvbnN0X3N0ciwgZW5kLCBmYWlsKTsKKyAgICAgICAgX19nc3RfZWxlbWVudF9mYWN0b3J5X2FkZF9pbnRlcmZhY2UgKGZhY3RvcnksIGNvbnN0X3N0cik7CisgICAgICB9CisgICAgfQorICB9IGVsc2UgaWYgKEdTVF9JU19UWVBFX0ZJTkRfRkFDVE9SWSAoZmVhdHVyZSkpIHsKKyAgICBHc3RSZWdpc3RyeUNodW5rVHlwZUZpbmRGYWN0b3J5ICp0ZmY7CisgICAgR3N0VHlwZUZpbmRGYWN0b3J5ICpmYWN0b3J5ID0gR1NUX1RZUEVfRklORF9GQUNUT1JZIChmZWF0dXJlKTsKKworICAgIGFsaWduICgqaW4pOworICAgIEdTVF9ERUJVRworICAgICAgICAoIlJlYWRpbmcvY2FzdGluZyBmb3IgR3N0UmVnaXN0cnlDaHVua1BsdWdpbkZlYXR1cmUgYXQgYWRkcmVzcyAlcCIsCisgICAgICAgICppbik7CisgICAgdW5wYWNrX2VsZW1lbnQgKCppbiwgdGZmLCBHc3RSZWdpc3RyeUNodW5rVHlwZUZpbmRGYWN0b3J5LCBlbmQsIGZhaWwpOworICAgIHBmID0gKEdzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5GZWF0dXJlICopIHRmZjsKKworICAgIC8qIGxvYWQgdHlwZWZpbmRlciBjYXBzICovCisgICAgdW5wYWNrX3N0cmluZ19ub2NvcHkgKCppbiwgY29uc3Rfc3RyLCBlbmQsIGZhaWwpOworICAgIGlmIChjb25zdF9zdHIgIT0gTlVMTCAmJiAqY29uc3Rfc3RyICE9ICdcMCcpCisgICAgICBmYWN0b3J5LT5jYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKGNvbnN0X3N0cik7CisgICAgZWxzZQorICAgICAgZmFjdG9yeS0+Y2FwcyA9IE5VTEw7CisKKyAgICAvKiBsb2FkIGV4dGVuc2lvbnMgKi8KKyAgICBpZiAodGZmLT5uZXh0ZW5zaW9ucykgeworICAgICAgR1NUX0RFQlVHICgiUmVhZGluZyAlZCBUeXBlZmluZCBleHRlbnNpb25zIGF0IGFkZHJlc3MgJXAiLAorICAgICAgICAgIHRmZi0+bmV4dGVuc2lvbnMsICppbik7CisgICAgICBmYWN0b3J5LT5leHRlbnNpb25zID0gZ19uZXcwIChnY2hhciAqLCB0ZmYtPm5leHRlbnNpb25zICsgMSk7CisgICAgICAvKiB1bnBhY2sgaW4gcmV2ZXJzZSBvcmRlciB0byBtYWludGFpbiB0aGUgY29ycmVjdCBvcmRlciAqLworICAgICAgZm9yIChpID0gdGZmLT5uZXh0ZW5zaW9uczsgaSA+IDA7IGktLSkgeworICAgICAgICB1bnBhY2tfc3RyaW5nICgqaW4sIHN0ciwgZW5kLCBmYWlsKTsKKyAgICAgICAgZmFjdG9yeS0+ZXh0ZW5zaW9uc1tpIC0gMV0gPSBzdHI7CisgICAgICB9CisgICAgfQorICB9IGVsc2UgaWYgKEdTVF9JU19JTkRFWF9GQUNUT1JZIChmZWF0dXJlKSkgeworICAgIEdzdEluZGV4RmFjdG9yeSAqZmFjdG9yeSA9IEdTVF9JTkRFWF9GQUNUT1JZIChmZWF0dXJlKTsKKworICAgIGFsaWduICgqaW4pOworICAgIEdTVF9ERUJVRworICAgICAgICAoIlJlYWRpbmcvY2FzdGluZyBmb3IgR3N0UmVnaXN0cnlDaHVua1BsdWdpbkZlYXR1cmUgYXQgYWRkcmVzcyAlcCIsCisgICAgICAgICppbik7CisgICAgdW5wYWNrX2VsZW1lbnQgKCppbiwgcGYsIEdzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5GZWF0dXJlLCBlbmQsIGZhaWwpOworCisgICAgLyogdW5wYWNrIGluZGV4IGZhY3Rvcnkgc3RyaW5ncyAqLworICAgIHVucGFja19zdHJpbmcgKCppbiwgZmFjdG9yeS0+bG9uZ2Rlc2MsIGVuZCwgZmFpbCk7CisgIH0gZWxzZSB7CisgICAgR1NUX1dBUk5JTkcgKCJ1bmhhbmRsZWQgZmFjdG9yeSB0eXBlIDogJXMiLCBHX09CSkVDVF9UWVBFX05BTUUgKGZlYXR1cmUpKTsKKyAgICBnb3RvIGZhaWw7CisgIH0KKworICBmZWF0dXJlLT5yYW5rID0gcGYtPnJhbms7CisKKyAgZmVhdHVyZS0+cGx1Z2luX25hbWUgPSBwbHVnaW5fbmFtZTsKKyAgZmVhdHVyZS0+cGx1Z2luID0gcGx1Z2luOworICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyICgoR09iamVjdCAqKSBwbHVnaW4sCisgICAgICAoZ3BvaW50ZXIgKikgJiBmZWF0dXJlLT5wbHVnaW4pOworCisgIGdzdF9yZWdpc3RyeV9hZGRfZmVhdHVyZSAocmVnaXN0cnksIGZlYXR1cmUpOworICBHU1RfREVCVUcgKCJBZGRlZCBmZWF0dXJlICVzLCBwbHVnaW4gJXAgJXMiLCBHU1RfT0JKRUNUX05BTUUgKGZlYXR1cmUpLAorICAgICAgcGx1Z2luLCBwbHVnaW5fbmFtZSk7CisKKyAgcmV0dXJuIFRSVUU7CisKKyAgLyogRXJyb3JzICovCitmYWlsOgorICBHU1RfSU5GTyAoIlJlYWRpbmcgcGx1Z2luIGZlYXR1cmUgZmFpbGVkIik7CisgIGlmIChmZWF0dXJlKSB7CisgICAgaWYgKEdTVF9JU19PQkpFQ1QgKGZlYXR1cmUpKQorICAgICAgZ3N0X29iamVjdF91bnJlZiAoZmVhdHVyZSk7CisgICAgZWxzZQorICAgICAgZ19vYmplY3RfdW5yZWYgKGZlYXR1cmUpOworICB9CisgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdjaGFyICoqCitnc3RfcmVnaXN0cnlfY2h1bmtzX2xvYWRfcGx1Z2luX2RlcF9zdHJ2IChnY2hhciAqKiBpbiwgZ2NoYXIgKiBlbmQsIGd1aW50IG4pCit7CisgIGdjaGFyICoqYXJyOworCisgIGlmIChuID09IDApCisgICAgcmV0dXJuIE5VTEw7CisKKyAgYXJyID0gZ19uZXcwIChnY2hhciAqLCBuICsgMSk7CisgIHdoaWxlIChuID4gMCkgeworICAgIHVucGFja19zdHJpbmcgKCppbiwgYXJyW24gLSAxXSwgZW5kLCBmYWlsKTsKKyAgICAtLW47CisgIH0KKyAgcmV0dXJuIGFycjsKK2ZhaWw6CisgIEdTVF9JTkZPICgiUmVhZGluZyBwbHVnaW4gZGVwZW5kZW5jeSBzdHJpbmdzIGZhaWxlZCIpOworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfcmVnaXN0cnlfY2h1bmtzX2xvYWRfcGx1Z2luX2RlcCAoR3N0UGx1Z2luICogcGx1Z2luLCBnY2hhciAqKiBpbiwKKyAgICBnY2hhciAqIGVuZCkKK3sKKyAgR3N0UGx1Z2luRGVwICpkZXA7CisgIEdzdFJlZ2lzdHJ5Q2h1bmtEZXAgKmQ7CisgIGdjaGFyICoqczsKKworICBhbGlnbiAoKmluKTsKKyAgR1NUX0xPR19PQkpFQ1QgKHBsdWdpbiwgIlVucGFja2luZyBHc3RSZWdpc3RyeUNodW5rRGVwIGZyb20gJXAiLCAqaW4pOworICB1bnBhY2tfZWxlbWVudCAoKmluLCBkLCBHc3RSZWdpc3RyeUNodW5rRGVwLCBlbmQsIGZhaWwpOworCisgIGRlcCA9IGdfc2xpY2VfbmV3IChHc3RQbHVnaW5EZXApOworCisgIGRlcC0+ZW52X2hhc2ggPSBkLT5lbnZfaGFzaDsKKyAgZGVwLT5zdGF0X2hhc2ggPSBkLT5zdGF0X2hhc2g7CisKKyAgZGVwLT5mbGFncyA9IChHc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3MpIGQtPmZsYWdzOworCisgIGRlcC0+bmFtZXMgPSBnc3RfcmVnaXN0cnlfY2h1bmtzX2xvYWRfcGx1Z2luX2RlcF9zdHJ2IChpbiwgZW5kLCBkLT5uX25hbWVzKTsKKyAgZGVwLT5wYXRocyA9IGdzdF9yZWdpc3RyeV9jaHVua3NfbG9hZF9wbHVnaW5fZGVwX3N0cnYgKGluLCBlbmQsIGQtPm5fcGF0aHMpOworICBkZXAtPmVudl92YXJzID0KKyAgICAgIGdzdF9yZWdpc3RyeV9jaHVua3NfbG9hZF9wbHVnaW5fZGVwX3N0cnYgKGluLCBlbmQsIGQtPm5fZW52X3ZhcnMpOworCisgIHBsdWdpbi0+cHJpdi0+ZGVwcyA9IGdfbGlzdF9hcHBlbmQgKHBsdWdpbi0+cHJpdi0+ZGVwcywgZGVwKTsKKworICBHU1RfREVCVUdfT0JKRUNUIChwbHVnaW4sICJMb2FkZWQgZXh0ZXJuYWwgcGx1Z2luIGRlcGVuZGVuY3kgZnJvbSByZWdpc3RyeTogIgorICAgICAgImVudl9oYXNoOiAlMDh4LCBzdGF0X2hhc2g6ICUwOHgiLCBkZXAtPmVudl9oYXNoLCBkZXAtPnN0YXRfaGFzaCk7CisgIGZvciAocyA9IGRlcC0+ZW52X3ZhcnM7IHMgIT0gTlVMTCAmJiAqcyAhPSBOVUxMOyArK3MpCisgICAgR1NUX0xPR19PQkpFQ1QgKHBsdWdpbiwgIiBldmFyOiAlcyIsICpzKTsKKyAgZm9yIChzID0gZGVwLT5wYXRoczsgcyAhPSBOVUxMICYmICpzICE9IE5VTEw7ICsrcykKKyAgICBHU1RfTE9HX09CSkVDVCAocGx1Z2luLCAiIHBhdGg6ICVzIiwgKnMpOworICBmb3IgKHMgPSBkZXAtPm5hbWVzOyBzICE9IE5VTEwgJiYgKnMgIT0gTlVMTDsgKytzKQorICAgIEdTVF9MT0dfT0JKRUNUIChwbHVnaW4sICIgbmFtZTogJXMiLCAqcyk7CisKKyAgcmV0dXJuIFRSVUU7CitmYWlsOgorICBHU1RfSU5GTyAoIlJlYWRpbmcgcGx1Z2luIGRlcGVuZGVuY3kgZmFpbGVkIik7CisgIHJldHVybiBGQUxTRTsKK30KKworCisvKgorICogX3ByaXZfZ3N0X3JlZ2lzdHJ5X2NodW5rc19sb2FkX3BsdWdpbjoKKyAqCisgKiBNYWtlIGEgbmV3IEdzdFBsdWdpbiBmcm9tIGN1cnJlbnQgR3N0UmVnaXN0cnlDaHVua1BsdWdpbkVsZW1lbnQgc3RydWN0dXJlCisgKiBhbmQgYWRkIGl0IHRvIHRoZSBHc3RSZWdpc3RyeS4gUmV0dXJuIGFuIG9mZnNldCB0byB0aGUgbmV4dAorICogR3N0UmVnaXN0cnlDaHVua1BsdWdpbkVsZW1lbnQgc3RydWN0dXJlLgorICovCitnYm9vbGVhbgorX3ByaXZfZ3N0X3JlZ2lzdHJ5X2NodW5rc19sb2FkX3BsdWdpbiAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwgZ2NoYXIgKiogaW4sCisgICAgZ2NoYXIgKiBlbmQsIEdzdFBsdWdpbiAqKiBvdXRfcGx1Z2luKQoreworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKyAgZ2NoYXIgKnN0YXJ0ID0gKmluOworI2VuZGlmCisgIEdzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5FbGVtZW50ICpwZTsKKyAgY29uc3QgZ2NoYXIgKmNhY2hlX3N0ciA9IE5VTEw7CisgIEdzdFBsdWdpbiAqcGx1Z2luID0gTlVMTDsKKyAgZ3VpbnQgaSwgbjsKKworICBhbGlnbiAoKmluKTsKKyAgR1NUX0xPRyAoIlJlYWRpbmcvY2FzdGluZyBmb3IgR3N0UmVnaXN0cnlDaHVua1BsdWdpbkVsZW1lbnQgYXQgYWRkcmVzcyAlcCIsCisgICAgICAqaW4pOworICB1bnBhY2tfZWxlbWVudCAoKmluLCBwZSwgR3N0UmVnaXN0cnlDaHVua1BsdWdpbkVsZW1lbnQsIGVuZCwgZmFpbCk7CisKKyAgcGx1Z2luID0gZ19vYmplY3RfbmV3diAoR1NUX1RZUEVfUExVR0lOLCAwLCBOVUxMKTsKKworICAvKiBUT0RPOiBhbHNvIHNldCBHU1RfUExVR0lOX0ZMQUdfQ09OU1QgKi8KKyAgcGx1Z2luLT5mbGFncyB8PSBHU1RfUExVR0lOX0ZMQUdfQ0FDSEVEOworICBwbHVnaW4tPmZpbGVfbXRpbWUgPSBwZS0+ZmlsZV9tdGltZTsKKyAgcGx1Z2luLT5maWxlX3NpemUgPSBwZS0+ZmlsZV9zaXplOworCisgIC8qIHVucGFjayBwbHVnaW4gZWxlbWVudCBzdHJpbmdzICovCisgIHVucGFja19jb25zdF9zdHJpbmcgKCppbiwgcGx1Z2luLT5kZXNjLm5hbWUsIGVuZCwgZmFpbCk7CisgIHVucGFja19jb25zdF9zdHJpbmcgKCppbiwgcGx1Z2luLT5kZXNjLmRlc2NyaXB0aW9uLCBlbmQsIGZhaWwpOworICB1bnBhY2tfc3RyaW5nICgqaW4sIHBsdWdpbi0+ZmlsZW5hbWUsIGVuZCwgZmFpbCk7CisgIHVucGFja19jb25zdF9zdHJpbmcgKCppbiwgcGx1Z2luLT5kZXNjLnZlcnNpb24sIGVuZCwgZmFpbCk7CisgIHVucGFja19jb25zdF9zdHJpbmcgKCppbiwgcGx1Z2luLT5kZXNjLmxpY2Vuc2UsIGVuZCwgZmFpbCk7CisgIHVucGFja19jb25zdF9zdHJpbmcgKCppbiwgcGx1Z2luLT5kZXNjLnNvdXJjZSwgZW5kLCBmYWlsKTsKKyAgdW5wYWNrX2NvbnN0X3N0cmluZyAoKmluLCBwbHVnaW4tPmRlc2MucGFja2FnZSwgZW5kLCBmYWlsKTsKKyAgdW5wYWNrX2NvbnN0X3N0cmluZyAoKmluLCBwbHVnaW4tPmRlc2Mub3JpZ2luLCBlbmQsIGZhaWwpOworICB1bnBhY2tfY29uc3Rfc3RyaW5nICgqaW4sIHBsdWdpbi0+ZGVzYy5yZWxlYXNlX2RhdGV0aW1lLCBlbmQsIGZhaWwpOworCisgIEdTVF9MT0cgKCJyZWFkIHN0cmluZ3MgZm9yIG5hbWU9JyVzJyIsIHBsdWdpbi0+ZGVzYy5uYW1lKTsKKyAgR1NUX0xPRyAoIiAgZGVzYy5kZXNjcmlwdGlvbj0nJXMnIiwgcGx1Z2luLT5kZXNjLmRlc2NyaXB0aW9uKTsKKyAgR1NUX0xPRyAoIiAgZmlsZW5hbWU9JyVzJyIsIHBsdWdpbi0+ZmlsZW5hbWUpOworICBHU1RfTE9HICgiICBkZXNjLnZlcnNpb249JyVzJyIsIHBsdWdpbi0+ZGVzYy52ZXJzaW9uKTsKKyAgR1NUX0xPRyAoIiAgZGVzYy5saWNlbnNlPSclcyciLCBwbHVnaW4tPmRlc2MubGljZW5zZSk7CisgIEdTVF9MT0cgKCIgIGRlc2Muc291cmNlPSclcyciLCBwbHVnaW4tPmRlc2Muc291cmNlKTsKKyAgR1NUX0xPRyAoIiAgZGVzYy5wYWNrYWdlPSclcyciLCBwbHVnaW4tPmRlc2MucGFja2FnZSk7CisgIEdTVF9MT0cgKCIgIGRlc2Mub3JpZ2luPSclcyciLCBwbHVnaW4tPmRlc2Mub3JpZ2luKTsKKyAgR1NUX0xPRyAoIiAgZGVzYy5kYXRldGltZT0lcyIsIHBsdWdpbi0+ZGVzYy5yZWxlYXNlX2RhdGV0aW1lKTsKKworICBpZiAocGx1Z2luLT5kZXNjLnJlbGVhc2VfZGF0ZXRpbWVbMF0gPT0gJ1wwJykKKyAgICBwbHVnaW4tPmRlc2MucmVsZWFzZV9kYXRldGltZSA9IE5VTEw7CisKKyAgLyogdW5wYWNrIGNhY2hlIGRhdGEgKi8KKyAgdW5wYWNrX3N0cmluZ19ub2NvcHkgKCppbiwgY2FjaGVfc3RyLCBlbmQsIGZhaWwpOworICBpZiAoY2FjaGVfc3RyICE9IE5VTEwgJiYgKmNhY2hlX3N0ciAhPSAnXDAnKQorICAgIHBsdWdpbi0+cHJpdi0+Y2FjaGVfZGF0YSA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKGNhY2hlX3N0ciwgTlVMTCk7CisKKyAgLyogSWYgdGhlIGxpY2Vuc2Ugc3RyaW5nIGlzICdCTEFDS0xJU1QnLCBtYXJrIHRoaXMgYXMgYSBibGFja2xpc3RlZAorICAgKiBwbHVnaW4gKi8KKyAgaWYgKHN0cmNtcCAocGx1Z2luLT5kZXNjLmxpY2Vuc2UsICJCTEFDS0xJU1QiKSA9PSAwKQorICAgIHBsdWdpbi0+ZmxhZ3MgfD0gR1NUX1BMVUdJTl9GTEFHX0JMQUNLTElTVEVEOworCisgIHBsdWdpbi0+YmFzZW5hbWUgPSBnX3BhdGhfZ2V0X2Jhc2VuYW1lIChwbHVnaW4tPmZpbGVuYW1lKTsKKworICAvKiBUYWtlcyBvd25lcnNoaXAgb2YgcGx1Z2luICovCisgIGdzdF9yZWdpc3RyeV9hZGRfcGx1Z2luIChyZWdpc3RyeSwgcGx1Z2luKTsKKyAgbiA9IHBlLT5uZmVhdHVyZXM7CisgIEdTVF9ERUJVRyAoIkFkZGVkIHBsdWdpbiAnJXMnIHBsdWdpbiB3aXRoICVkIGZlYXR1cmVzIGZyb20gYmluYXJ5IHJlZ2lzdHJ5IiwKKyAgICAgIHBsdWdpbi0+ZGVzYy5uYW1lLCBuKTsKKworICAvKiBMb2FkIHBsdWdpbiBmZWF0dXJlcyAqLworICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgaWYgKEdfVU5MSUtFTFkgKCFnc3RfcmVnaXN0cnlfY2h1bmtzX2xvYWRfZmVhdHVyZSAocmVnaXN0cnksIGluLCBlbmQsCisgICAgICAgICAgICAgICAgcGx1Z2luKSkpIHsKKyAgICAgIEdTVF9FUlJPUiAoIkVycm9yIHdoaWxlIGxvYWRpbmcgYmluYXJ5IGZlYXR1cmUgZm9yIHBsdWdpbiAnJXMnIiwKKyAgICAgICAgICBHU1RfU1RSX05VTEwgKHBsdWdpbi0+ZGVzYy5uYW1lKSk7CisgICAgICBnc3RfcmVnaXN0cnlfcmVtb3ZlX3BsdWdpbiAocmVnaXN0cnksIHBsdWdpbik7CisgICAgICBnb3RvIGZhaWw7CisgICAgfQorICB9CisKKyAgLyogTG9hZCBleHRlcm5hbCBwbHVnaW4gZGVwZW5kZW5jaWVzICovCisgIGZvciAoaSA9IDA7IGkgPCBwZS0+bl9kZXBzOyArK2kpIHsKKyAgICBpZiAoR19VTkxJS0VMWSAoIWdzdF9yZWdpc3RyeV9jaHVua3NfbG9hZF9wbHVnaW5fZGVwIChwbHVnaW4sIGluLCBlbmQpKSkgeworICAgICAgR1NUX0VSUk9SX09CSkVDVCAocGx1Z2luLCAiQ291bGQgbm90IHJlYWQgZXh0ZXJuYWwgcGx1Z2luIGRlcGVuZGVuY3kgIgorICAgICAgICAgICJmb3IgcGx1Z2luICclcyciLCBHU1RfU1RSX05VTEwgKHBsdWdpbi0+ZGVzYy5uYW1lKSk7CisgICAgICBnc3RfcmVnaXN0cnlfcmVtb3ZlX3BsdWdpbiAocmVnaXN0cnksIHBsdWdpbik7CisgICAgICBnb3RvIGZhaWw7CisgICAgfQorICB9CisKKyAgaWYgKG91dF9wbHVnaW4pCisgICAgKm91dF9wbHVnaW4gPSBwbHVnaW47CisKKyAgcmV0dXJuIFRSVUU7CisKKyAgLyogRXJyb3JzICovCitmYWlsOgorICBHU1RfSU5GTyAoIlJlYWRpbmcgcGx1Z2luIGZhaWxlZCBhZnRlciAldSBieXRlcyIsIChndWludCkgKGVuZCAtIHN0YXJ0KSk7CisgIHJldHVybiBGQUxTRTsKK30KKwordm9pZAorX3ByaXZfZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX2dsb2JhbF9oZWFkZXIgKEdMaXN0ICoqIGxpc3QsCisgICAgR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwgZ3VpbnQzMiBmaWx0ZXJfZW52X2hhc2gpCit7CisgIEdzdFJlZ2lzdHJ5Q2h1bmtHbG9iYWxIZWFkZXIgKmhkcjsKKyAgR3N0UmVnaXN0cnlDaHVuayAqY2hrOworCisgIGhkciA9IGdfc2xpY2VfbmV3IChHc3RSZWdpc3RyeUNodW5rR2xvYmFsSGVhZGVyKTsKKyAgY2hrID0gZ3N0X3JlZ2lzdHJ5X2NodW5rc19tYWtlX2RhdGEgKGhkciwKKyAgICAgIHNpemVvZiAoR3N0UmVnaXN0cnlDaHVua0dsb2JhbEhlYWRlcikpOworCisgIGhkci0+ZmlsdGVyX2Vudl9oYXNoID0gZmlsdGVyX2Vudl9oYXNoOworCisgICpsaXN0ID0gZ19saXN0X3ByZXBlbmQgKCpsaXN0LCBjaGspOworCisgIEdTVF9MT0cgKCJTYXZlZCBnbG9iYWwgaGVhZGVyIChmaWx0ZXJfZW52X2hhc2g9MHglMDh4KSIsIGZpbHRlcl9lbnZfaGFzaCk7Cit9CisKK2dib29sZWFuCitfcHJpdl9nc3RfcmVnaXN0cnlfY2h1bmtzX2xvYWRfZ2xvYmFsX2hlYWRlciAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwKKyAgICBnY2hhciAqKiBpbiwgZ2NoYXIgKiBlbmQsIGd1aW50MzIgKiBmaWx0ZXJfZW52X2hhc2gpCit7CisgIEdzdFJlZ2lzdHJ5Q2h1bmtHbG9iYWxIZWFkZXIgKmhkcjsKKworICBhbGlnbiAoKmluKTsKKyAgR1NUX0xPRyAoIlJlYWRpbmcvY2FzdGluZyBmb3IgR3N0UmVnaXN0cnlDaHVua0dsb2JhbEhlYWRlciBhdCAlcCIsICppbik7CisgIHVucGFja19lbGVtZW50ICgqaW4sIGhkciwgR3N0UmVnaXN0cnlDaHVua0dsb2JhbEhlYWRlciwgZW5kLCBmYWlsKTsKKyAgKmZpbHRlcl9lbnZfaGFzaCA9IGhkci0+ZmlsdGVyX2Vudl9oYXNoOworICByZXR1cm4gVFJVRTsKKworICAvKiBFcnJvcnMgKi8KK2ZhaWw6CisgIEdTVF9XQVJOSU5HICgiUmVhZGluZyBnbG9iYWwgaGVhZGVyIGZhaWxlZCIpOworICByZXR1cm4gRkFMU0U7Cit9CmRpZmYgLS1naXQgYS9nc3QvZ3N0cmVnaXN0cnljaHVua3MuaCBiL2dzdC9nc3RyZWdpc3RyeWNodW5rcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYmFjNWUKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0cmVnaXN0cnljaHVua3MuaApAQCAtMCwwICsxLDE2OCBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSm9zZXAgVG9ycmEgPGpvc2VwQGZsdWVuZG8uY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1hdGhpZXUgR2FyY2lhICA8bWF0dGhpZXVAZmx1ZW5kby5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU3RlZmFuIEtvc3QgPGVuc29uaWNAc29uaWNwdWxzZS5kZT4KKyAqCisgKiBnc3RyZWdpc3RyeWJpbmFyeS5oOiBIZWFkZXIgZm9yIHJlZ2lzdHJ5IGhhbmRsaW5nCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKyNpZm5kZWYgX19HU1RfUkVHSVNUUllDSFVOS1NfSF9fCisjZGVmaW5lIF9fR1NUX1JFR0lTVFJZQ0hVTktTX0hfXworCisjaW5jbHVkZSA8Z3N0L2dzdHBhZC5oPgorI2luY2x1ZGUgPGdzdC9nc3RyZWdpc3RyeS5oPgorCisvKgorICogd2UgcmVmZXJlbmNlIHN0cmluZ3MgZGlyZWN0bHkgZnJvbSB0aGUgcGx1Z2lucyBhbmQgaW4gdGhpcyBjYXNlIHNldCBDT05TVCB0bworICogYXZvaWQgZnJlZWluZyB0aGVtLiBJZiBnX2ZyZWUoKSBzaG91bGQgYmUgdXNlZCwgdGhlIE1BTExPQyBmbGFnIGlzIHNldCwKKyAqIG90aGVyd2lzZSBnX3NsaWNlX2ZyZWUxKCkgd2lsbCBiZSB1c2VkIQorICovCitlbnVtIHsKKyAgR1NUX1JFR0lTVFJZX0NIVU5LX0ZMQUdfTk9ORSA9IDAsCisgIEdTVF9SRUdJU1RSWV9DSFVOS19GTEFHX0NPTlNUID0gMSwKKyAgR1NUX1JFR0lTVFJZX0NIVU5LX0ZMQUdfTUFMTE9DID0gMiwKK307CisKKy8qCisgKiBHc3RSZWdpc3RyeUNodW5rOgorICoKKyAqIEhlYWRlciBmb3IgYmluYXJ5IGJsb2JzCisgKi8KK3R5cGVkZWYgc3RydWN0IF9Hc3RSZWdpc3RyeUNodW5rCit7CisgIGdwb2ludGVyIGRhdGE7CisgIGd1aW50IHNpemU7CisgIGd1aW50IGZsYWdzOworICBnYm9vbGVhbiBhbGlnbjsKK30gR3N0UmVnaXN0cnlDaHVuazsKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdFJlZ2lzdHJ5Q2h1bmtHbG9iYWxIZWFkZXIKK3sKKyAgZ3VpbnQzMiAgZmlsdGVyX2Vudl9oYXNoOworfSBHc3RSZWdpc3RyeUNodW5rR2xvYmFsSGVhZGVyOworCisvKgorICogR3N0UmVnaXN0cnlDaHVua1BsdWdpbkVsZW1lbnQ6CisgKgorICogQG5fZGVwczogU2F5cyBob3cgbWFueSBkZXBlbmRlbmN5IHN0cnVjdHVyZXMgZm9sbG93cy4KKyAqCisgKiBAbmZlYXR1cmVzOiBzYXlzIGhvdyBtYW55IGJpbmFyeSBwbHVnaW4gZmVhdHVyZSBzdHJ1Y3R1cmVzIHdlIHdpbGwgaGF2ZQorICogcmlnaHQgYWZ0ZXIgdGhlIHN0cnVjdHVyZSBpdHNlbGYuCisgKgorICogQSBzdHJ1Y3R1cmUgY29udGFpbmluZyAoc3RhdGljZWx5KSBldmVyeSBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIGEgcGx1Z2luCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX0dzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5FbGVtZW50Cit7CisgIGd1bG9uZyBmaWxlX3NpemU7CisgIGd1bG9uZyBmaWxlX210aW1lOworCisgIGd1aW50IG5fZGVwczsKKworICBndWludCBuZmVhdHVyZXM7Cit9IEdzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5FbGVtZW50OworCisvKiBHc3RSZWdpc3RyeUNodW5rRGVwOgorICovCit0eXBlZGVmIHN0cnVjdCBfR3N0UmVnaXN0cnlDaHVua0RlcAoreworICBndWludCBmbGFnczsKKyAgZ3VpbnQgbl9lbnZfdmFyczsKKyAgZ3VpbnQgbl9wYXRoczsKKyAgZ3VpbnQgbl9uYW1lczsKKworICBndWludCBlbnZfaGFzaDsKKyAgZ3VpbnQgc3RhdF9oYXNoOworfSBHc3RSZWdpc3RyeUNodW5rRGVwOworCisvKgorICogR3N0UmVnaXN0cnlDaHVua1BsdWdpbkZlYXR1cmU6CisgKiBAcmFuazogcmFuayBvZiB0aGUgZmVhdHVyZQorICoKKyAqIEEgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIHBsdWdpbiBmZWF0dXJlcworICovCit0eXBlZGVmIHN0cnVjdCBfR3N0UmVnaXN0cnlDaHVua1BsdWdpbkZlYXR1cmUKK3sKKyAgZ3Vsb25nIHJhbms7Cit9IEdzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5GZWF0dXJlOworCisvKgorICogR3N0UmVnaXN0cnlDaHVua0VsZW1lbnRGYWN0b3J5OgorICogQG5wYWR0ZW1wbGF0ZXM6IHN0b3JlcyB0aGUgbnVtYmVyIG9mIEdzdFJlZ2lzdHJ5Q2h1bmtQYWRUZW1wbGF0ZSBzdHJ1Y3R1cmVzCisgKiBmb2xsb3dpbmcgdGhlIHN0cnVjdHVyZQorICogQG5pbnRlcmZhY2VzOiBzdG9yZXMgdGhlIG51bWJlciBvZiBpbnRlcmZhY2UgbmFtZXMgZm9sbG93aW5nIHRoZSBzdHJ1Y3R1cmUKKyAqIEBudXJpcHJvdG9jb2xzOiBzdG9yZXMgdGhlIG51bWJlciBvZiBwcm90b2NvbCBzdHJpbmdzIGZvbGxvd2luZyB0aGUgc3RydWN0dXJlCisgKgorICogQSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgZWxlbWVudCBmYWN0b3J5IGZpZWxkcworICovCit0eXBlZGVmIHN0cnVjdCBfR3N0UmVnaXN0cnlDaHVua0VsZW1lbnRGYWN0b3J5Cit7CisgIEdzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5GZWF0dXJlIHBsdWdpbl9mZWF0dXJlOworCisgIGd1aW50IG5wYWR0ZW1wbGF0ZXM7CisgIGd1aW50IG5pbnRlcmZhY2VzOworICBndWludCBudXJpcHJvdG9jb2xzOworfSBHc3RSZWdpc3RyeUNodW5rRWxlbWVudEZhY3Rvcnk7CisKKy8qCisgKiBHc3RSZWdpc3RyeUNodW5rVHlwZUZpbmRGYWN0b3J5OgorICogQG5leHRlbnNpb25zOiBzdG9yZXMgdGhlIG51bWJlciBvZiB0eXBlZmluZCBleHRlbnNpb25zCisgKgorICogQSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgZWxlbWVudCBmYWN0b3J5IGZpZWxkcworICovCit0eXBlZGVmIHN0cnVjdCBfR3N0UmVnaXN0cnlDaHVua1R5cGVGaW5kRmFjdG9yeQoreworICBHc3RSZWdpc3RyeUNodW5rUGx1Z2luRmVhdHVyZSBwbHVnaW5fZmVhdHVyZTsKKworICBndWludCBuZXh0ZW5zaW9uczsKK30gR3N0UmVnaXN0cnlDaHVua1R5cGVGaW5kRmFjdG9yeTsKKworLyoKKyAqIEdzdFJlZ2lzdHJ5Q2h1bmtQYWRUZW1wbGF0ZToKKyAqCisgKiBBIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBzdGF0aWMgcGFkIHRlbXBsYXRlcyBvZiBhIHBsdWdpbiBmZWF0dXJlCisgKi8KK3R5cGVkZWYgc3RydWN0IF9Hc3RSZWdpc3RyeUNodW5rUGFkVGVtcGxhdGUKK3sKKyAgZ3VpbnQgZGlyZWN0aW9uOwkgICAgICAgICAgICAgICAvKiBFaXRoZXIgMDoic2luayIgb3IgMToic3JjIiAqLworICBHc3RQYWRQcmVzZW5jZSBwcmVzZW5jZTsKK30gR3N0UmVnaXN0cnlDaHVua1BhZFRlbXBsYXRlOworCitHX0JFR0lOX0RFQ0xTCisKK2dib29sZWFuCitfcHJpdl9nc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfcGx1Z2luIChHTGlzdCAqKiBsaXN0LCBHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5LAorICAgIEdzdFBsdWdpbiAqIHBsdWdpbik7CisKK2dib29sZWFuCitfcHJpdl9nc3RfcmVnaXN0cnlfY2h1bmtzX2xvYWRfcGx1Z2luIChHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5LCBnY2hhciAqKiBpbiwKKyAgICBnY2hhciAqZW5kLCBHc3RQbHVnaW4gKipvdXRfcGx1Z2luKTsKKwordm9pZAorX3ByaXZfZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX2dsb2JhbF9oZWFkZXIgKEdMaXN0ICoqIGxpc3QsCisgICAgR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwgZ3VpbnQzMiBmaWx0ZXJfZW52X2hhc2gpOworCitnYm9vbGVhbgorX3ByaXZfZ3N0X3JlZ2lzdHJ5X2NodW5rc19sb2FkX2dsb2JhbF9oZWFkZXIgKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksCisgICAgZ2NoYXIgKiogaW4sIGdjaGFyICplbmQsIGd1aW50MzIgKiBmaWx0ZXJfZW52X2hhc2gpOworCit2b2lkCitfcHJpdl9nc3RfcmVnaXN0cnlfY2h1bmtfZnJlZSAoR3N0UmVnaXN0cnlDaHVuayAqY2h1bmspOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HU1RfUkVHSVNUUllDSFVOS1NfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0c2VnbWVudC5jIGIvZ3N0L2dzdHNlZ21lbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTZiZWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdHNlZ21lbnQuYwpAQCAtMCwwICsxLDcyMCBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KKyAqCisgKiBnc3RzZWdtZW50LmM6IEdzdFNlZ21lbnQgc3Vic3lzdGVtCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJnc3R1dGlscy5oIgorI2luY2x1ZGUgImdzdHNlZ21lbnQuaCIKKworLyoqCisgKiBTRUNUSU9OOmdzdHNlZ21lbnQKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogU3RydWN0dXJlIGRlc2NyaWJpbmcgdGhlIGNvbmZpZ3VyZWQgcmVnaW9uIG9mIGludGVyZXN0CisgKiAgICAgICAgICAgICAgICAgICAgIGluIGEgbWVkaWEgZmlsZS4KKyAqIEBzZWVfYWxzbzogI0dzdEV2ZW50CisgKgorICogVGhpcyBoZWxwZXIgc3RydWN0dXJlIGhvbGRzIHRoZSByZWxldmFudCB2YWx1ZXMgZm9yIHRyYWNraW5nIHRoZSByZWdpb24gb2YKKyAqIGludGVyZXN0IGluIGEgbWVkaWEgZmlsZSwgY2FsbGVkIGEgc2VnbWVudC4KKyAqCisgKiBUaGUgc3RydWN0dXJlIGNhbiBiZSB1c2VkIGZvciB0d28gcHVycG9zZXM6CisgKiA8aXRlbWl6ZWRsaXN0PgorICogICA8bGlzdGl0ZW0+PHBhcmE+cGVyZm9ybWluZyBzZWVrcyAoaGFuZGxpbmcgc2VlayBldmVudHMpPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT50cmFja2luZyBwbGF5YmFjayByZWdpb25zIChoYW5kbGluZyBuZXdzZWdtZW50IGV2ZW50cyk8L3BhcmE+PC9saXN0aXRlbT4KKyAqIDwvaXRlbWl6ZWRsaXN0PgorICoKKyAqIFRoZSBzZWdtZW50IGlzIHVzdWFsbHkgY29uZmlndXJlZCBieSB0aGUgYXBwbGljYXRpb24gd2l0aCBhIHNlZWsgZXZlbnQgd2hpY2gKKyAqIGlzIHByb3BhZ2F0ZWQgdXBzdHJlYW0gYW5kIGV2ZW50dWFsbHkgaGFuZGxlZCBieSBhbiBlbGVtZW50IHRoYXQgcGVyZm9ybXMgdGhlIHNlZWsuCisgKgorICogVGhlIGNvbmZpZ3VyZWQgc2VnbWVudCBpcyB0aGVuIHByb3BhZ2F0ZWQgYmFjayBkb3duc3RyZWFtIHdpdGggYSBuZXdzZWdtZW50IGV2ZW50LgorICogVGhpcyBpbmZvcm1hdGlvbiBpcyB0aGVuIHVzZWQgdG8gY2xpcCBtZWRpYSB0byB0aGUgc2VnbWVudCBib3VuZGFyaWVzLgorICoKKyAqIEEgc2VnbWVudCBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQgd2l0aCBnc3Rfc2VnbWVudF9pbml0KCksIHdoaWNoIHRha2VzIGEgI0dzdEZvcm1hdAorICogdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGZvcm1hdCBvZiB0aGUgc2VnbWVudCB2YWx1ZXMuIFRoZSBzZWdtZW50IHdpbGwgYmUgY29uZmlndXJlZAorICogd2l0aCBhIHN0YXJ0IHZhbHVlIG9mIDAgYW5kIGEgc3RvcC9kdXJhdGlvbiBvZiAtMSwgd2hpY2ggaXMgdW5kZWZpbmVkLiBUaGUgZGVmYXVsdAorICogcmF0ZSBhbmQgYXBwbGllZF9yYXRlIGlzIDEuMC4KKyAqCisgKiBJZiB0aGUgc2VnbWVudCBpcyB1c2VkIGZvciBtYW5hZ2luZyBzZWVrcywgdGhlIHNlZ21lbnQgZHVyYXRpb24gc2hvdWxkIGJlIHNldCB3aXRoCisgKiBnc3Rfc2VnbWVudF9zZXRfZHVyYXRpb24oKS4gVGhlIHB1YmxpYyBkdXJhdGlvbiBmaWVsZCBjb250YWlucyB0aGUgZHVyYXRpb24gb2YgdGhlCisgKiBzZWdtZW50LiBXaGVuIHVzaW5nIHRoZSBzZWdtZW50IGZvciBzZWVraW5nLCB0aGUgc3RhcnQgYW5kIHRpbWUgbWVtYmVycyBzaG91bGQKKyAqIG5vcm1hbGx5IGJlIGxlZnQgdG8gdGhlaXIgZGVmYXVsdCAwIHZhbHVlLiBUaGUgc3RvcCBwb3NpdGlvbiBpcyBsZWZ0IHRvIC0xIHVubGVzcworICogZXhwbGljaXRseSBjb25maWd1cmVkIHRvIGEgZGlmZmVyZW50IHZhbHVlIGFmdGVyIGEgc2VlayBldmVudC4KKyAqCisgKiBUaGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgc2VnbWVudCBzaG91bGQgYmUgc2V0IHdpdGggdGhlIGdzdF9zZWdtZW50X3NldF9sYXN0X3N0b3AoKS4KKyAqIFRoZSBwdWJsaWMgbGFzdF9zdG9wIGZpZWxkIGNvbnRhaW5zIHRoZSBsYXN0IHNldCBzdG9wIHBvc2l0aW9uIGluIHRoZSBzZWdtZW50LgorICoKKyAqIEZvciBlbGVtZW50cyB0aGF0IHBlcmZvcm0gc2Vla3MsIHRoZSBjdXJyZW50IHNlZ21lbnQgc2hvdWxkIGJlIHVwZGF0ZWQgd2l0aCB0aGUKKyAqIGdzdF9zZWdtZW50X3NldF9zZWVrKCkgYW5kIHRoZSB2YWx1ZXMgZnJvbSB0aGUgc2VlayBldmVudC4gVGhpcyBtZXRob2Qgd2lsbCB1cGRhdGUKKyAqIGFsbCB0aGUgc2VnbWVudCBmaWVsZHMuIFRoZSBsYXN0X3N0b3AgZmllbGQgd2lsbCBjb250YWluIHRoZSBuZXcgcGxheWJhY2sgcG9zaXRpb24uCisgKiBJZiB0aGUgY3VyX3R5cGUgd2FzIGRpZmZlcmVudCBmcm9tIEdTVF9TRUVLX1RZUEVfTk9ORSwgcGxheWJhY2sgY29udGludWVzIGZyb20KKyAqIHRoZSBsYXN0X3N0b3AgcG9zaXRpb24sIHBvc3NpYmx5IHdpdGggdXBkYXRlZCBmbGFncyBvciByYXRlLgorICoKKyAqIEZvciBlbGVtZW50cyB0aGF0IHdhbnQgdG8gdXNlICNHc3RTZWdtZW50IHRvIHRyYWNrIHRoZSBwbGF5YmFjayByZWdpb24sIHVzZQorICogZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnQoKSB0byB1cGRhdGUgdGhlIHNlZ21lbnQgZmllbGRzIHdpdGggdGhlIGluZm9ybWF0aW9uIGZyb20KKyAqIHRoZSBuZXdzZWdtZW50IGV2ZW50LiBUaGUgZ3N0X3NlZ21lbnRfY2xpcCgpIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBjaGVjayBhbmQgY2xpcAorICogdGhlIG1lZGlhIGRhdGEgdG8gdGhlIHNlZ21lbnQgYm91bmRhcmllcy4KKyAqCisgKiBGb3IgZWxlbWVudHMgdGhhdCB3YW50IHRvIHN5bmNocm9uaXplIHRvIHRoZSBwaXBlbGluZSBjbG9jaywgZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lKCkKKyAqIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgYSB0aW1lc3RhbXAgdG8gYSB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHN5bmNocm9uaXplCisgKiB0byB0aGUgY2xvY2suIFRoaXMgZnVuY3Rpb24gdGFrZXMgaW50byBhY2NvdW50IGFsbCBhY2N1bXVsYXRlZCBzZWdtZW50cyBhcyB3ZWxsIGFzCisgKiBhbnkgcmF0ZSBvciBhcHBsaWVkX3JhdGUgY29udmVyc2lvbnMuCisgKgorICogRm9yIGVsZW1lbnRzIHRoYXQgbmVlZCB0byBwZXJmb3JtIG9wZXJhdGlvbnMgb24gbWVkaWEgZGF0YSBpbiBzdHJlYW1fdGltZSwKKyAqIGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lKCkgY2FuIGJlIHVzZWQgdG8gY29udmVydCBhIHRpbWVzdGFtcCBhbmQgdGhlIHNlZ21lbnQKKyAqIGluZm8gdG8gc3RyZWFtIHRpbWUgKHdoaWNoIGlzIGFsd2F5cyBiZXR3ZWVuIDAgYW5kIHRoZSBkdXJhdGlvbiBvZiB0aGUgc3RyZWFtKS4KKyAqCisgKiBMYXN0IHJldmlld2VkIG9uIDIwMDctMDUtMTcgKDAuMTAuMTMpCisgKi8KKworLyoqCisgKiBnc3Rfc2VnbWVudF9jb3B5OgorICogQHNlZ21lbnQ6ICh0cmFuc2ZlciBub25lKTogYSAjR3N0U2VnbWVudAorICoKKyAqIENyZWF0ZSBhIGNvcHkgb2YgZ2l2ZW4gQHNlZ21lbnQuCisgKgorICogRnJlZS1mdW5jdGlvbjogZ3N0X3NlZ21lbnRfZnJlZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdFNlZ21lbnQsIGZyZWUgd2l0aCBnc3Rfc2VnbWVudF9mcmVlKCkuCisgKgorICogU2luY2U6IDAuMTAuMjAKKyAqLworR3N0U2VnbWVudCAqCitnc3Rfc2VnbWVudF9jb3B5IChjb25zdCBHc3RTZWdtZW50ICogc2VnbWVudCkKK3sKKyAgR3N0U2VnbWVudCAqcmVzdWx0ID0gTlVMTDsKKworICBpZiAoc2VnbWVudCkgeworICAgIHJlc3VsdCA9IChHc3RTZWdtZW50ICopIGdfc2xpY2VfY29weSAoc2l6ZW9mIChHc3RTZWdtZW50KSwgc2VnbWVudCk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZAorZ3N0X3NlZ21lbnRfY29weV9pbnRvIChjb25zdCBHc3RTZWdtZW50ICogc3JjLCBHc3RTZWdtZW50ICogZGVzdCkKK3sKKyAgbWVtY3B5IChkZXN0LCBzcmMsIHNpemVvZiAoR3N0U2VnbWVudCkpOworfQorCitHVHlwZQorZ3N0X3NlZ21lbnRfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBHVHlwZSBnc3Rfc2VnbWVudF90eXBlID0gMDsKKworICBpZiAoR19VTkxJS0VMWSAoZ3N0X3NlZ21lbnRfdHlwZSA9PSAwKSkgeworICAgIGdzdF9zZWdtZW50X3R5cGUgPSBnX2JveGVkX3R5cGVfcmVnaXN0ZXJfc3RhdGljICgiR3N0U2VnbWVudCIsCisgICAgICAgIChHQm94ZWRDb3B5RnVuYykgZ3N0X3NlZ21lbnRfY29weSwgKEdCb3hlZEZyZWVGdW5jKSBnc3Rfc2VnbWVudF9mcmVlKTsKKyAgfQorCisgIHJldHVybiBnc3Rfc2VnbWVudF90eXBlOworfQorCisvKioKKyAqIGdzdF9zZWdtZW50X25ldzoKKyAqCisgKiBBbGxvY2F0ZSBhIG5ldyAjR3N0U2VnbWVudCBzdHJ1Y3R1cmUgYW5kIGluaXRpYWxpemUgaXQgdXNpbmcKKyAqIGdzdF9zZWdtZW50X2luaXQoKS4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnc3Rfc2VnbWVudF9mcmVlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0U2VnbWVudCwgZnJlZSB3aXRoIGdzdF9zZWdtZW50X2ZyZWUoKS4KKyAqLworR3N0U2VnbWVudCAqCitnc3Rfc2VnbWVudF9uZXcgKHZvaWQpCit7CisgIEdzdFNlZ21lbnQgKnJlc3VsdDsKKworICByZXN1bHQgPSBnX3NsaWNlX25ldzAgKEdzdFNlZ21lbnQpOworICBnc3Rfc2VnbWVudF9pbml0IChyZXN1bHQsIEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGdzdF9zZWdtZW50X2ZyZWU6CisgKiBAc2VnbWVudDogKGluKSAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdFNlZ21lbnQKKyAqCisgKiBGcmVlIHRoZSBhbGxvY2F0ZWQgc2VnbWVudCBAc2VnbWVudC4KKyAqLwordm9pZAorZ3N0X3NlZ21lbnRfZnJlZSAoR3N0U2VnbWVudCAqIHNlZ21lbnQpCit7CisgIGdfc2xpY2VfZnJlZSAoR3N0U2VnbWVudCwgc2VnbWVudCk7Cit9CisKKy8qKgorICogZ3N0X3NlZ21lbnRfaW5pdDoKKyAqIEBzZWdtZW50OiBhICNHc3RTZWdtZW50IHN0cnVjdHVyZS4KKyAqIEBmb3JtYXQ6IHRoZSBmb3JtYXQgb2YgdGhlIHNlZ21lbnQuCisgKgorICogVGhlIHN0YXJ0L2xhc3Rfc3RvcCBwb3NpdGlvbnMgYXJlIHNldCB0byAwIGFuZCB0aGUgc3RvcC9kdXJhdGlvbgorICogZmllbGRzIGFyZSBzZXQgdG8gLTEgKHVua25vd24pLiBUaGUgZGVmYXVsdCByYXRlIG9mIDEuMCBhbmQgbm8KKyAqIGZsYWdzIGFyZSBzZXQuCisgKgorICogSW5pdGlhbGl6ZSBAc2VnbWVudCB0byBpdHMgZGVmYXVsdCB2YWx1ZXMuCisgKi8KK3ZvaWQKK2dzdF9zZWdtZW50X2luaXQgKEdzdFNlZ21lbnQgKiBzZWdtZW50LCBHc3RGb3JtYXQgZm9ybWF0KQoreworICBnX3JldHVybl9pZl9mYWlsIChzZWdtZW50ICE9IE5VTEwpOworCisgIHNlZ21lbnQtPmZsYWdzID0gR1NUX1NFRUtfRkxBR19OT05FOworICBzZWdtZW50LT5yYXRlID0gMS4wOworICBzZWdtZW50LT5hcHBsaWVkX3JhdGUgPSAxLjA7CisgIHNlZ21lbnQtPmZvcm1hdCA9IGZvcm1hdDsKKyAgc2VnbWVudC0+YmFzZSA9IDA7CisgIHNlZ21lbnQtPnN0YXJ0ID0gMDsKKyAgc2VnbWVudC0+c3RvcCA9IC0xOworICBzZWdtZW50LT50aW1lID0gMDsKKyAgc2VnbWVudC0+cG9zaXRpb24gPSAwOworICBzZWdtZW50LT5kdXJhdGlvbiA9IC0xOworfQorCisvKioKKyAqIGdzdF9zZWdtZW50X2RvX3NlZWs6CisgKiBAc2VnbWVudDogYSAjR3N0U2VnbWVudCBzdHJ1Y3R1cmUuCisgKiBAcmF0ZTogdGhlIHJhdGUgb2YgdGhlIHNlZ21lbnQuCisgKiBAZm9ybWF0OiB0aGUgZm9ybWF0IG9mIHRoZSBzZWdtZW50LgorICogQGZsYWdzOiB0aGUgc2VnbWVudCBmbGFncyBmb3IgdGhlIHNlZ21lbnQKKyAqIEBzdGFydF90eXBlOiB0aGUgc2VlayBtZXRob2QKKyAqIEBzdGFydDogdGhlIHNlZWsgc3RhcnQgdmFsdWUKKyAqIEBzdG9wX3R5cGU6IHRoZSBzZWVrIG1ldGhvZAorICogQHN0b3A6IHRoZSBzZWVrIHN0b3AgdmFsdWUKKyAqIEB1cGRhdGU6IGJvb2xlYW4gaG9sZGluZyB3aGV0aGVyIHBvc2l0aW9uIHdhcyB1cGRhdGVkLgorICoKKyAqIFVwZGF0ZSB0aGUgc2VnbWVudCBzdHJ1Y3R1cmUgd2l0aCB0aGUgZmllbGQgdmFsdWVzIG9mIGEgc2VlayBldmVudCAoc2VlCisgKiBnc3RfZXZlbnRfbmV3X3NlZWsoKSkuCisgKgorICogQWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgdGhlIHNlZ21lbnQgZmllbGQgcG9zaXRpb24gYW5kIHRpbWUgd2lsbAorICogY29udGFpbiB0aGUgcmVxdWVzdGVkIG5ldyBwb3NpdGlvbiBpbiB0aGUgc2VnbWVudC4gVGhlIG5ldyByZXF1ZXN0ZWQKKyAqIHBvc2l0aW9uIGluIHRoZSBzZWdtZW50IGRlcGVuZHMgb24gQHJhdGUgYW5kIEBzdGFydF90eXBlIGFuZCBAc3RvcF90eXBlLgorICoKKyAqIEZvciBwb3NpdGl2ZSBAcmF0ZSwgdGhlIG5ldyBwb3NpdGlvbiBpbiB0aGUgc2VnbWVudCBpcyB0aGUgbmV3IEBzZWdtZW50CisgKiBzdGFydCBmaWVsZCB3aGVuIGl0IHdhcyB1cGRhdGVkIHdpdGggYSBAc3RhcnRfdHlwZSBkaWZmZXJlbnQgZnJvbQorICogI0dTVF9TRUVLX1RZUEVfTk9ORS4gSWYgbm8gdXBkYXRlIHdhcyBwZXJmb3JtZWQgb24gQHNlZ21lbnQgc3RhcnQgcG9zaXRpb24KKyAqICgjR1NUX1NFRUtfVFlQRV9OT05FKSwgQHN0YXJ0IGlzIGlnbm9yZWQgYW5kIEBzZWdtZW50IHBvc2l0aW9uIGlzCisgKiB1bm1vZGlmaWVkLgorICoKKyAqIEZvciBuZWdhdGl2ZSBAcmF0ZSwgdGhlIG5ldyBwb3NpdGlvbiBpbiB0aGUgc2VnbWVudCBpcyB0aGUgbmV3IEBzZWdtZW50CisgKiBzdG9wIGZpZWxkIHdoZW4gaXQgd2FzIHVwZGF0ZWQgd2l0aCBhIEBzdG9wX3R5cGUgZGlmZmVyZW50IGZyb20KKyAqICNHU1RfU0VFS19UWVBFX05PTkUuIElmIG5vIHN0b3Agd2FzIHByZXZpb3VzbHkgY29uZmlndXJlZCBpbiB0aGUgc2VnbWVudCwgdGhlCisgKiBkdXJhdGlvbiBvZiB0aGUgc2VnbWVudCB3aWxsIGJlIHVzZWQgdG8gdXBkYXRlIHRoZSBzdG9wIHBvc2l0aW9uLgorICogSWYgbm8gdXBkYXRlIHdhcyBwZXJmb3JtZWQgb24gQHNlZ21lbnQgc3RvcCBwb3NpdGlvbiAoI0dTVF9TRUVLX1RZUEVfTk9ORSksCisgKiBAc3RvcCBpcyBpZ25vcmVkIGFuZCBAc2VnbWVudCBwb3NpdGlvbiBpcyB1bm1vZGlmaWVkLgorICoKKyAqIFRoZSBhcHBsaWVkIHJhdGUgb2YgdGhlIHNlZ21lbnQgd2lsbCBiZSBzZXQgdG8gMS4wIGJ5IGRlZmF1bHQuCisgKiBJZiB0aGUgY2FsbGVyIGNhbiBhcHBseSBhIHJhdGUgY2hhbmdlLCBpdCBzaG91bGQgdXBkYXRlIEBzZWdtZW50CisgKiByYXRlIGFuZCBhcHBsaWVkX3JhdGUgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIEB1cGRhdGUgd2lsbCBiZSBzZXQgdG8gVFJVRSBpZiBhIHNlZWsgc2hvdWxkIGJlIHBlcmZvcm1lZCB0byB0aGUgc2VnbWVudAorICogcG9zaXRpb24gZmllbGQuIFRoaXMgZmllbGQgY2FuIGJlIEZBTFNFIGlmLCBmb3IgZXhhbXBsZSwgb25seSB0aGUgQHJhdGUKKyAqIGhhcyBiZWVuIGNoYW5nZWQgYnV0IG5vdCB0aGUgcGxheWJhY2sgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHNlZWsgY291bGQgYmUgcGVyZm9ybWVkLgorICovCitnYm9vbGVhbgorZ3N0X3NlZ21lbnRfZG9fc2VlayAoR3N0U2VnbWVudCAqIHNlZ21lbnQsIGdkb3VibGUgcmF0ZSwKKyAgICBHc3RGb3JtYXQgZm9ybWF0LCBHc3RTZWVrRmxhZ3MgZmxhZ3MsCisgICAgR3N0U2Vla1R5cGUgc3RhcnRfdHlwZSwgZ3VpbnQ2NCBzdGFydCwKKyAgICBHc3RTZWVrVHlwZSBzdG9wX3R5cGUsIGd1aW50NjQgc3RvcCwgZ2Jvb2xlYW4gKiB1cGRhdGUpCit7CisgIGdib29sZWFuIHVwZGF0ZV9zdG9wLCB1cGRhdGVfc3RhcnQ7CisgIGd1aW50NjQgcG9zaXRpb24sIGJhc2U7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHJhdGUgIT0gMC4wLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWdtZW50ICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNlZ21lbnQtPmZvcm1hdCA9PSBmb3JtYXQsIEZBTFNFKTsKKworICB1cGRhdGVfc3RhcnQgPSB1cGRhdGVfc3RvcCA9IFRSVUU7CisKKyAgcG9zaXRpb24gPSBzZWdtZW50LT5wb3NpdGlvbjsKKworICBpZiAoZmxhZ3MgJiBHU1RfU0VFS19GTEFHX0ZMVVNIKSB7CisgICAgLyogZmx1c2ggcmVzZXRzIHRoZSBydW5uaW5nX3RpbWUgKi8KKyAgICBiYXNlID0gMDsKKyAgfSBlbHNlIHsKKyAgICBiYXNlID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lIChzZWdtZW50LCBmb3JtYXQsIHBvc2l0aW9uKTsKKyAgfQorCisgIC8qIHNlZ21lbnQtPnN0YXJ0IGlzIG5ldmVyIGludmFsaWQgKi8KKyAgc3dpdGNoIChzdGFydF90eXBlKSB7CisgICAgY2FzZSBHU1RfU0VFS19UWVBFX05PTkU6CisgICAgICAvKiBubyB1cGRhdGUgdG8gc2VnbWVudCwgdGFrZSBwcmV2aW91cyBzdGFydCAqLworICAgICAgc3RhcnQgPSBzZWdtZW50LT5zdGFydDsKKyAgICAgIHVwZGF0ZV9zdGFydCA9IEZBTFNFOworICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfU0VFS19UWVBFX1NFVDoKKyAgICAgIC8qIHN0YXJ0IGhvbGRzIGRlc2lyZWQgcG9zaXRpb24sIG1hcCAtMSB0byB0aGUgc3RhcnQgKi8KKyAgICAgIGlmIChzdGFydCA9PSAtMSkKKyAgICAgICAgc3RhcnQgPSAwOworICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfU0VFS19UWVBFX0NVUjoKKyAgICB7CisgICAgICBnaW50NjQgc3N0YXJ0ID0gKGdpbnQ2NCkgc3RhcnQ7CisgICAgICAvKiBhZGQgc3RhcnQgdG8gY3VycmVudGx5IGNvbmZpZ3VyZWQgc2VnbWVudCAqLworICAgICAgaWYgKHNzdGFydCA+IDAgfHwgc2VnbWVudC0+c3RhcnQgPiAtc3N0YXJ0KQorICAgICAgICBzdGFydCA9IHNlZ21lbnQtPnN0YXJ0ICsgc3RhcnQ7CisgICAgICBlbHNlCisgICAgICAgIHN0YXJ0ID0gMDsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9TRUVLX1RZUEVfRU5EOgorICAgICAgaWYgKHNlZ21lbnQtPmR1cmF0aW9uICE9IC0xKSB7CisgICAgICAgIC8qIGFkZCBzdGFydCB0byB0b3RhbCBsZW5ndGggKi8KKyAgICAgICAgc3RhcnQgPSBzZWdtZW50LT5kdXJhdGlvbiArIHN0YXJ0OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgLyogbm8gdXBkYXRlIGlmIGR1cmF0aW9uIHVua25vd24gKi8KKyAgICAgICAgc3RhcnQgPSBzZWdtZW50LT5zdGFydDsKKyAgICAgICAgdXBkYXRlX3N0YXJ0ID0gRkFMU0U7CisgICAgICB9CisgICAgICBicmVhazsKKyAgfQorICAvKiBicmluZyBpbiBzYW5lIHJhbmdlICovCisgIGlmIChzZWdtZW50LT5kdXJhdGlvbiAhPSAtMSkKKyAgICBzdGFydCA9IE1JTiAoc3RhcnQsIHNlZ21lbnQtPmR1cmF0aW9uKTsKKyAgZWxzZQorICAgIHN0YXJ0ID0gTUFYIChzdGFydCwgMCk7CisKKyAgLyogc3RvcCBjYW4gYmUgLTEgaWYgd2UgaGF2ZSBub3QgY29uZmlndXJlZCBhIHN0b3AuICovCisgIHN3aXRjaCAoc3RvcF90eXBlKSB7CisgICAgY2FzZSBHU1RfU0VFS19UWVBFX05PTkU6CisgICAgICBzdG9wID0gc2VnbWVudC0+c3RvcDsKKyAgICAgIHVwZGF0ZV9zdG9wID0gRkFMU0U7CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9TRUVLX1RZUEVfU0VUOgorICAgICAgLyogc3RvcCBob2xkcyByZXF1aXJlZCB2YWx1ZSAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfU0VFS19UWVBFX0NVUjoKKyAgICAgIGlmIChzZWdtZW50LT5zdG9wICE9IC0xKSB7CisgICAgICAgIGdpbnQ2NCBzc3RvcCA9IChnaW50NjQpIHN0b3A7CisgICAgICAgIGlmIChzc3RvcCA+IDAgfHwgc2VnbWVudC0+c3RvcCA+IC1zc3RvcCkKKyAgICAgICAgICBzdG9wID0gc2VnbWVudC0+c3RvcCArIHN0b3A7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBzdG9wID0gMDsKKyAgICAgIH0gZWxzZQorICAgICAgICBzdG9wID0gLTE7CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9TRUVLX1RZUEVfRU5EOgorICAgICAgaWYgKHNlZ21lbnQtPmR1cmF0aW9uICE9IC0xKSB7CisgICAgICAgIHN0b3AgPSBzZWdtZW50LT5kdXJhdGlvbiArIHN0b3A7CisgICAgICB9IGVsc2UgeworICAgICAgICBzdG9wID0gc2VnbWVudC0+c3RvcDsKKyAgICAgICAgdXBkYXRlX3N0b3AgPSBGQUxTRTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICB9CisKKyAgLyogaWYgd2UgaGF2ZSBhIHZhbGlkIHN0b3AgdGltZSwgbWFrZSBzdXJlIGl0IGlzIGNsaXBwZWQgKi8KKyAgaWYgKHN0b3AgIT0gLTEpIHsKKyAgICBpZiAoc2VnbWVudC0+ZHVyYXRpb24gIT0gLTEpCisgICAgICBzdG9wID0gQ0xBTVAgKHN0b3AsIDAsIHNlZ21lbnQtPmR1cmF0aW9uKTsKKyAgICBlbHNlCisgICAgICBzdG9wID0gTUFYIChzdG9wLCAwKTsKKyAgfQorCisgIC8qIHdlIGNhbid0IGhhdmUgc3RvcCBiZWZvcmUgc3RhcnQgKi8KKyAgaWYgKHN0b3AgIT0gLTEpIHsKKyAgICBpZiAoc3RhcnQgPiBzdG9wKSB7CisgICAgICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RhcnQgPD0gc3RvcCwgRkFMU0UpOworICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgfQorCisgIHNlZ21lbnQtPnJhdGUgPSByYXRlOworICBzZWdtZW50LT5hcHBsaWVkX3JhdGUgPSAxLjA7CisgIHNlZ21lbnQtPmJhc2UgPSBiYXNlOworICBzZWdtZW50LT5mbGFncyA9IChHc3RTZWdtZW50RmxhZ3MpIGZsYWdzOworICBzZWdtZW50LT5zdGFydCA9IHN0YXJ0OworICBzZWdtZW50LT5zdG9wID0gc3RvcDsKKyAgc2VnbWVudC0+dGltZSA9IHN0YXJ0OworCisgIGlmICh1cGRhdGVfc3RhcnQgJiYgcmF0ZSA+IDAuMCkgeworICAgIHBvc2l0aW9uID0gc3RhcnQ7CisgIH0KKyAgaWYgKHVwZGF0ZV9zdG9wICYmIHJhdGUgPCAwLjApIHsKKyAgICBpZiAoc3RvcCAhPSAtMSkKKyAgICAgIHBvc2l0aW9uID0gc3RvcDsKKyAgICBlbHNlIHsKKyAgICAgIGlmIChzZWdtZW50LT5kdXJhdGlvbiAhPSAtMSkKKyAgICAgICAgcG9zaXRpb24gPSBzZWdtZW50LT5kdXJhdGlvbjsKKyAgICAgIGVsc2UKKyAgICAgICAgcG9zaXRpb24gPSAwOworICAgIH0KKyAgfQorICAvKiBzZXQgdXBkYXRlIGFyZyB0byByZWZsZWN0IHVwZGF0ZSBvZiBwb3NpdGlvbiAqLworICBpZiAodXBkYXRlKQorICAgICp1cGRhdGUgPSBwb3NpdGlvbiAhPSBzZWdtZW50LT5wb3NpdGlvbjsKKworICAvKiB1cGRhdGUgbmV3IHBvc2l0aW9uICovCisgIHNlZ21lbnQtPnBvc2l0aW9uID0gcG9zaXRpb247CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qKgorICogZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWU6CisgKiBAc2VnbWVudDogYSAjR3N0U2VnbWVudCBzdHJ1Y3R1cmUuCisgKiBAZm9ybWF0OiB0aGUgZm9ybWF0IG9mIHRoZSBzZWdtZW50LgorICogQHBvc2l0aW9uOiB0aGUgcG9zaXRpb24gaW4gdGhlIHNlZ21lbnQKKyAqCisgKiBUcmFuc2xhdGUgQHBvc2l0aW9uIHRvIHN0cmVhbSB0aW1lIHVzaW5nIHRoZSBjdXJyZW50bHkgY29uZmlndXJlZAorICogc2VnbWVudC4gVGhlIEBwb3NpdGlvbiB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gQHNlZ21lbnQgc3RhcnQgYW5kCisgKiBzdG9wIHZhbHVlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IHVzZWQgYnkgZWxlbWVudHMgdGhhdCBuZWVkIHRvIG9wZXJhdGUgb24KKyAqIHRoZSBzdHJlYW0gdGltZSBvZiB0aGUgYnVmZmVycyBpdCByZWNlaXZlcywgc3VjaCBhcyBlZmZlY3QgcGx1Z2lucy4KKyAqIEluIHRob3NlIHVzZSBjYXNlcywgQHBvc2l0aW9uIGlzIHR5cGljYWxseSB0aGUgYnVmZmVyIHRpbWVzdGFtcCBvcgorICogY2xvY2sgdGltZSB0aGF0IG9uZSB3YW50cyB0byBjb252ZXJ0IHRvIHRoZSBzdHJlYW0gdGltZS4KKyAqIFRoZSBzdHJlYW0gdGltZSBpcyBhbHdheXMgYmV0d2VlbiAwIGFuZCB0aGUgdG90YWwgZHVyYXRpb24gb2YgdGhlCisgKiBtZWRpYSBzdHJlYW0uCisgKgorICogUmV0dXJuczogdGhlIHBvc2l0aW9uIGluIHN0cmVhbV90aW1lIG9yIC0xIHdoZW4gYW4gaW52YWxpZCBwb3NpdGlvbgorICogd2FzIGdpdmVuLgorICovCitndWludDY0Citnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoY29uc3QgR3N0U2VnbWVudCAqIHNlZ21lbnQsIEdzdEZvcm1hdCBmb3JtYXQsCisgICAgZ3VpbnQ2NCBwb3NpdGlvbikKK3sKKyAgZ3VpbnQ2NCByZXN1bHQsIHN0YXJ0LCBzdG9wLCB0aW1lOworICBnZG91YmxlIGFic19hcHBsaWVkX3JhdGU7CisKKyAgLyogZm9ybWF0IGRvZXMgbm90IG1hdHRlciBmb3IgLTEgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKHBvc2l0aW9uID09IC0xKSkKKyAgICByZXR1cm4gLTE7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNlZ21lbnQgIT0gTlVMTCwgLTEpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2VnbWVudC0+Zm9ybWF0ID09IGZvcm1hdCwgLTEpOworCisgIC8qIGlmIHdlIGhhdmUgdGhlIHBvc2l0aW9uIGZvciB0aGUgc2FtZSBmb3JtYXQgYXMgdGhlIHNlZ21lbnQsIHdlIGNhbiBjb21wYXJlCisgICAqIHRoZSBzdGFydCBhbmQgc3RvcCB2YWx1ZXMsIG90aGVyd2lzZSB3ZSBhc3N1bWUgMCBhbmQgLTEgKi8KKyAgaWYgKEdfTElLRUxZIChzZWdtZW50LT5mb3JtYXQgPT0gZm9ybWF0KSkgeworICAgIHN0YXJ0ID0gc2VnbWVudC0+c3RhcnQ7CisgICAgc3RvcCA9IHNlZ21lbnQtPnN0b3A7CisgICAgdGltZSA9IHNlZ21lbnQtPnRpbWU7CisgIH0gZWxzZSB7CisgICAgc3RhcnQgPSAwOworICAgIHN0b3AgPSAtMTsKKyAgICB0aW1lID0gMDsKKyAgfQorCisgIC8qIG91dHNpZGUgb2YgdGhlIHNlZ21lbnQgYm91bmRhcnkgc3RvcCAqLworICBpZiAoR19VTkxJS0VMWSAoc3RvcCAhPSAtMSAmJiBwb3NpdGlvbiA+IHN0b3ApKQorICAgIHJldHVybiAtMTsKKworICAvKiBiZWZvcmUgdGhlIHNlZ21lbnQgYm91bmRhcnkgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKHBvc2l0aW9uIDwgc3RhcnQpKQorICAgIHJldHVybiAtMTsKKworICAvKiB0aW1lIG11c3QgYmUga25vd24gKi8KKyAgaWYgKEdfVU5MSUtFTFkgKHRpbWUgPT0gLTEpKQorICAgIHJldHVybiAtMTsKKworICAvKiBicmluZyB0byB1bmNvcnJlY3RlZCBwb3NpdGlvbiBpbiBzZWdtZW50ICovCisgIHJlc3VsdCA9IHBvc2l0aW9uIC0gc3RhcnQ7CisKKyAgYWJzX2FwcGxpZWRfcmF0ZSA9IEFCUyAoc2VnbWVudC0+YXBwbGllZF9yYXRlKTsKKworICAvKiBjb3JyZWN0IGZvciBhcHBsaWVkIHJhdGUgaWYgbmVlZGVkICovCisgIGlmIChHX1VOTElLRUxZIChhYnNfYXBwbGllZF9yYXRlICE9IDEuMCkpCisgICAgcmVzdWx0ICo9IGFic19hcHBsaWVkX3JhdGU7CisKKyAgLyogYWRkIG9yIHN1YnRyYWN0IGZyb20gc2VnbWVudCB0aW1lIGJhc2VkIG9uIGFwcGxpZWQgcmF0ZSAqLworICBpZiAoR19MSUtFTFkgKHNlZ21lbnQtPmFwcGxpZWRfcmF0ZSA+IDAuMCkpIHsKKyAgICAvKiBjb3JyZWN0IGZvciBzZWdtZW50IHRpbWUgKi8KKyAgICByZXN1bHQgKz0gdGltZTsKKyAgfSBlbHNlIHsKKyAgICAvKiBjb3JyZWN0IGZvciBzZWdtZW50IHRpbWUsIGNsYW1wIGF0IDAuIFN0cmVhbXMgd2l0aCBhIG5lZ2F0aXZlCisgICAgICogYXBwbGllZF9yYXRlIGhhdmUgdGltZXN0YW1wcyBiZXR3ZWVuIHN0YXJ0IGFuZCBzdG9wLCBhcyB1c3VhbCwgYnV0IGhhdmUKKyAgICAgKiB0aGUgdGltZSBtZW1iZXIgc3RhcnRpbmcgaGlnaCBhbmQgZ29pbmcgYmFja3dhcmRzLiAgKi8KKyAgICBpZiAoR19MSUtFTFkgKHRpbWUgPiByZXN1bHQpKQorICAgICAgcmVzdWx0ID0gdGltZSAtIHJlc3VsdDsKKyAgICBlbHNlCisgICAgICByZXN1bHQgPSAwOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWU6CisgKiBAc2VnbWVudDogYSAjR3N0U2VnbWVudCBzdHJ1Y3R1cmUuCisgKiBAZm9ybWF0OiB0aGUgZm9ybWF0IG9mIHRoZSBzZWdtZW50LgorICogQHBvc2l0aW9uOiB0aGUgcG9zaXRpb24gaW4gdGhlIHNlZ21lbnQKKyAqCisgKiBUcmFuc2xhdGUgQHBvc2l0aW9uIHRvIHRoZSB0b3RhbCBydW5uaW5nIHRpbWUgdXNpbmcgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkCisgKiBhbmQgcHJldmlvdXNseSBhY2N1bXVsYXRlZCBzZWdtZW50cy4gUG9zaXRpb24gaXMgYSB2YWx1ZSBiZXR3ZWVuIEBzZWdtZW50CisgKiBzdGFydCBhbmQgc3RvcCB0aW1lLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IHVzZWQgYnkgZWxlbWVudHMgdGhhdCBuZWVkIHRvIHN5bmNocm9uaXplIHRvIHRoZQorICogZ2xvYmFsIGNsb2NrIGluIGEgcGlwZWxpbmUuIFRoZSBydW5ubmluZyB0aW1lIGlzIGEgY29uc3RhbnRseSBpbmNyZWFzaW5nIHZhbHVlCisgKiBzdGFydGluZyBmcm9tIDAuIFdoZW4gZ3N0X3NlZ21lbnRfaW5pdCgpIGlzIGNhbGxlZCwgdGhpcyB2YWx1ZSB3aWxsIHJlc2V0IHRvCisgKiAwLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAtMSBpZiB0aGUgcG9zaXRpb24gaXMgb3V0c2lkZSBvZiBAc2VnbWVudCBzdGFydCBhbmQgc3RvcC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgcG9zaXRpb24gYXMgdGhlIHRvdGFsIHJ1bm5pbmcgdGltZSBvciAtMSB3aGVuIGFuIGludmFsaWQgcG9zaXRpb24KKyAqIHdhcyBnaXZlbi4KKyAqLworZ3VpbnQ2NAorZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lIChjb25zdCBHc3RTZWdtZW50ICogc2VnbWVudCwgR3N0Rm9ybWF0IGZvcm1hdCwKKyAgICBndWludDY0IHBvc2l0aW9uKQoreworICBndWludDY0IHJlc3VsdDsKKyAgZ3VpbnQ2NCBzdGFydCwgc3RvcCwgYmFzZTsKKyAgZ2RvdWJsZSBhYnNfcmF0ZTsKKworICBpZiAoR19VTkxJS0VMWSAocG9zaXRpb24gPT0gLTEpKQorICAgIHJldHVybiAtMTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2VnbWVudCAhPSBOVUxMLCAtMSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWdtZW50LT5mb3JtYXQgPT0gZm9ybWF0LCAtMSk7CisKKyAgLyogaWYgd2UgaGF2ZSB0aGUgcG9zaXRpb24gZm9yIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUgc2VnbWVudCwgd2UgY2FuIGNvbXBhcmUKKyAgICogdGhlIHN0YXJ0IGFuZCBzdG9wIHZhbHVlcywgb3RoZXJ3aXNlIHdlIGFzc3VtZSAwIGFuZCAtMSAqLworICBpZiAoR19MSUtFTFkgKHNlZ21lbnQtPmZvcm1hdCA9PSBmb3JtYXQpKSB7CisgICAgc3RhcnQgPSBzZWdtZW50LT5zdGFydDsKKyAgICBzdG9wID0gc2VnbWVudC0+c3RvcDsKKyAgICBiYXNlID0gc2VnbWVudC0+YmFzZTsKKyAgfSBlbHNlIHsKKyAgICBzdGFydCA9IDA7CisgICAgc3RvcCA9IC0xOworICAgIGJhc2UgPSAwOworICB9CisKKyAgLyogYmVmb3JlIHRoZSBzZWdtZW50IGJvdW5kYXJ5ICovCisgIGlmIChHX1VOTElLRUxZIChwb3NpdGlvbiA8IHN0YXJ0KSkKKyAgICByZXR1cm4gLTE7CisKKyAgaWYgKEdfTElLRUxZIChzZWdtZW50LT5yYXRlID4gMC4wKSkgeworICAgIC8qIG91dHNpZGUgb2YgdGhlIHNlZ21lbnQgYm91bmRhcnkgc3RvcCAqLworICAgIGlmIChHX1VOTElLRUxZIChzdG9wICE9IC0xICYmIHBvc2l0aW9uID4gc3RvcCkpCisgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiBicmluZyB0byB1bmNvcnJlY3RlZCBwb3NpdGlvbiBpbiBzZWdtZW50ICovCisgICAgcmVzdWx0ID0gcG9zaXRpb24gLSBzdGFydDsKKyAgfSBlbHNlIHsKKyAgICAvKiBjYW5ub3QgY29udGludWUgaWYgbm8gc3RvcCBwb3NpdGlvbiBzZXQgb3Igb3V0c2lkZSBvZgorICAgICAqIHRoZSBzZWdtZW50LiAqLworICAgIGlmIChHX1VOTElLRUxZIChzdG9wID09IC0xIHx8IHBvc2l0aW9uID4gc3RvcCkpCisgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiBicmluZyB0byB1bmNvcnJlY3RlZCBwb3NpdGlvbiBpbiBzZWdtZW50ICovCisgICAgcmVzdWx0ID0gc3RvcCAtIHBvc2l0aW9uOworICB9CisKKyAgLyogc2NhbGUgYmFzZWQgb24gdGhlIHJhdGUsIGF2b2lkIGRpdmlzaW9uIGJ5IGFuZCBjb252ZXJzaW9uIHRvCisgICAqIGZsb2F0IHdoZW4gbm90IG5lZWRlZCAqLworICBhYnNfcmF0ZSA9IEFCUyAoc2VnbWVudC0+cmF0ZSk7CisgIGlmIChHX1VOTElLRUxZIChhYnNfcmF0ZSAhPSAxLjApKQorICAgIHJlc3VsdCAvPSBhYnNfcmF0ZTsKKworICAvKiBjb3JyZWN0IGZvciBiYXNlIG9mIHRoZSBzZWdtZW50ICovCisgIHJlc3VsdCArPSBiYXNlOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZ3N0X3NlZ21lbnRfY2xpcDoKKyAqIEBzZWdtZW50OiBhICNHc3RTZWdtZW50IHN0cnVjdHVyZS4KKyAqIEBmb3JtYXQ6IHRoZSBmb3JtYXQgb2YgdGhlIHNlZ21lbnQuCisgKiBAc3RhcnQ6IHRoZSBzdGFydCBwb3NpdGlvbiBpbiB0aGUgc2VnbWVudAorICogQHN0b3A6IHRoZSBzdG9wIHBvc2l0aW9uIGluIHRoZSBzZWdtZW50CisgKiBAY2xpcF9zdGFydDogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgY2xpcHBlZCBzdGFydCBwb3NpdGlvbiBpbiB0aGUgc2VnbWVudAorICogQGNsaXBfc3RvcDogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgY2xpcHBlZCBzdG9wIHBvc2l0aW9uIGluIHRoZSBzZWdtZW50CisgKgorICogQ2xpcCB0aGUgZ2l2ZW4gQHN0YXJ0IGFuZCBAc3RvcCB2YWx1ZXMgdG8gdGhlIHNlZ21lbnQgYm91bmRhcmllcyBnaXZlbgorICogaW4gQHNlZ21lbnQuIEBzdGFydCBhbmQgQHN0b3AgYXJlIGNvbXBhcmVkIGFuZCBjbGlwcGVkIHRvIEBzZWdtZW50CisgKiBzdGFydCBhbmQgc3RvcCB2YWx1ZXMuCisgKgorICogSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgRkFMU0UsIEBzdGFydCBhbmQgQHN0b3AgYXJlIGtub3duIHRvIGZhbGwKKyAqIG91dHNpZGUgb2YgQHNlZ21lbnQgYW5kIEBjbGlwX3N0YXJ0IGFuZCBAY2xpcF9zdG9wIGFyZSBub3QgdXBkYXRlZC4KKyAqCisgKiBXaGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIFRSVUUsIEBjbGlwX3N0YXJ0IGFuZCBAY2xpcF9zdG9wIHdpbGwgYmUKKyAqIHVwZGF0ZWQuIElmIEBjbGlwX3N0YXJ0IG9yIEBjbGlwX3N0b3AgYXJlIGRpZmZlcmVudCBmcm9tIEBzdGFydCBvciBAc3RvcAorICogcmVzcGVjdGl2ZWx5LCB0aGUgcmVnaW9uIGZlbGwgcGFydGlhbGx5IGluIHRoZSBzZWdtZW50LgorICoKKyAqIE5vdGUgdGhhdCB3aGVuIEBzdG9wIGlzIC0xLCBAY2xpcF9zdG9wIHdpbGwgYmUgc2V0IHRvIHRoZSBlbmQgb2YgdGhlCisgKiBzZWdtZW50LiBEZXBlbmRpbmcgb24gdGhlIHVzZSBjYXNlLCB0aGlzIG1heSBvciBtYXkgbm90IGJlIHdoYXQgeW91IHdhbnQuCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgZ2l2ZW4gQHN0YXJ0IGFuZCBAc3RvcCB0aW1lcyBmYWxsIHBhcnRpYWxseSBvcgorICogICAgIGNvbXBsZXRlbHkgaW4gQHNlZ21lbnQsIEZBTFNFIGlmIHRoZSB2YWx1ZXMgYXJlIGNvbXBsZXRlbHkgb3V0c2lkZQorICogICAgIG9mIHRoZSBzZWdtZW50LgorICovCitnYm9vbGVhbgorZ3N0X3NlZ21lbnRfY2xpcCAoY29uc3QgR3N0U2VnbWVudCAqIHNlZ21lbnQsIEdzdEZvcm1hdCBmb3JtYXQsIGd1aW50NjQgc3RhcnQsCisgICAgZ3VpbnQ2NCBzdG9wLCBndWludDY0ICogY2xpcF9zdGFydCwgZ3VpbnQ2NCAqIGNsaXBfc3RvcCkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNlZ21lbnQgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2VnbWVudC0+Zm9ybWF0ID09IGZvcm1hdCwgRkFMU0UpOworCisgIC8qIGlmIHdlIGhhdmUgYSBzdG9wIHBvc2l0aW9uIGFuZCBhIHZhbGlkIHN0YXJ0IGFuZCBzdGFydCBpcyBiaWdnZXIsCisgICAqIHdlJ3JlIG91dHNpZGUgb2YgdGhlIHNlZ21lbnQgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKHNlZ21lbnQtPnN0b3AgIT0gLTEgJiYgc3RhcnQgIT0gLTEgJiYgc3RhcnQgPj0gc2VnbWVudC0+c3RvcCkpCisgICAgcmV0dXJuIEZBTFNFOworCisgIC8qIGlmIGEgc3RvcCBwb3NpdGlvbiBpcyBnaXZlbiBhbmQgaXMgYmVmb3JlIHRoZSBzZWdtZW50IHN0YXJ0LAorICAgKiB3ZSdyZSBvdXRzaWRlIG9mIHRoZSBzZWdtZW50LiBTcGVjaWFsIGNhc2UgaXMgd2VyZSBzdGFydAorICAgKiBhbmQgc3RvcCBhcmUgZXF1YWwgdG8gdGhlIHNlZ21lbnQgc3RhcnQuIEluIHRoYXQgY2FzZSB3ZQorICAgKiBhcmUgaW5zaWRlIHRoZSBzZWdtZW50LiAqLworICBpZiAoR19VTkxJS0VMWSAoc3RvcCAhPSAtMSAmJiAoc3RvcCA8IHNlZ21lbnQtPnN0YXJ0IHx8IChzdGFydCAhPSBzdG9wCisgICAgICAgICAgICAgICAgICAmJiBzdG9wID09IHNlZ21lbnQtPnN0YXJ0KSkpKQorICAgIHJldHVybiBGQUxTRTsKKworICBpZiAoY2xpcF9zdGFydCkgeworICAgIGlmIChzdGFydCA9PSAtMSkKKyAgICAgICpjbGlwX3N0YXJ0ID0gLTE7CisgICAgZWxzZQorICAgICAgKmNsaXBfc3RhcnQgPSBNQVggKHN0YXJ0LCBzZWdtZW50LT5zdGFydCk7CisgIH0KKworICBpZiAoY2xpcF9zdG9wKSB7CisgICAgaWYgKHN0b3AgPT0gLTEpCisgICAgICAqY2xpcF9zdG9wID0gc2VnbWVudC0+c3RvcDsKKyAgICBlbHNlIGlmIChzZWdtZW50LT5zdG9wID09IC0xKQorICAgICAgKmNsaXBfc3RvcCA9IHN0b3A7CisgICAgZWxzZQorICAgICAgKmNsaXBfc3RvcCA9IE1JTiAoc3RvcCwgc2VnbWVudC0+c3RvcCk7CisKKyAgICBpZiAoc2VnbWVudC0+ZHVyYXRpb24gIT0gLTEgJiYgKmNsaXBfc3RvcCAhPSAtMSkKKyAgICAgICpjbGlwX3N0b3AgPSBNSU4gKCpjbGlwX3N0b3AsIHNlZ21lbnQtPmR1cmF0aW9uKTsKKyAgfQorCisgIHJldHVybiBUUlVFOworfQorCisvKioKKyAqIGdzdF9zZWdtZW50X3RvX3Bvc2l0aW9uOgorICogQHNlZ21lbnQ6IGEgI0dzdFNlZ21lbnQgc3RydWN0dXJlLgorICogQGZvcm1hdDogdGhlIGZvcm1hdCBvZiB0aGUgc2VnbWVudC4KKyAqIEBydW5uaW5nX3RpbWU6IHRoZSBydW5uaW5nX3RpbWUgaW4gdGhlIHNlZ21lbnQKKyAqCisgKiBDb252ZXJ0IEBydW5uaW5nX3RpbWUgaW50byBhIHBvc2l0aW9uIGluIHRoZSBzZWdtZW50IHNvIHRoYXQKKyAqIGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSgpIHdpdGggdGhhdCBwb3NpdGlvbiByZXR1cm5zIEBydW5uaW5nX3RpbWUuCisgKgorICogUmV0dXJuczogdGhlIHBvc2l0aW9uIGluIHRoZSBzZWdtZW50IGZvciBAcnVubmluZ190aW1lLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMKKyAqIC0xIHdoZW4gQHJ1bm5pbmdfdGltZSBpcyAtMSBvciB3aGVuIGl0IGlzIG5vdCBpbnNpZGUgQHNlZ21lbnQuCisgKgorICogU2luY2U6IDAuMTAuMjQKKyAqLworZ3VpbnQ2NAorZ3N0X3NlZ21lbnRfdG9fcG9zaXRpb24gKGNvbnN0IEdzdFNlZ21lbnQgKiBzZWdtZW50LCBHc3RGb3JtYXQgZm9ybWF0LAorICAgIGd1aW50NjQgcnVubmluZ190aW1lKQoreworICBndWludDY0IHJlc3VsdDsKKyAgZ3VpbnQ2NCBzdGFydCwgc3RvcCwgYmFzZTsKKyAgZ2RvdWJsZSBhYnNfcmF0ZTsKKworICBpZiAoR19VTkxJS0VMWSAocnVubmluZ190aW1lID09IC0xKSkKKyAgICByZXR1cm4gLTE7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNlZ21lbnQgIT0gTlVMTCwgLTEpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2VnbWVudC0+Zm9ybWF0ID09IGZvcm1hdCwgRkFMU0UpOworCisgIC8qIGlmIHdlIGhhdmUgdGhlIHBvc2l0aW9uIGZvciB0aGUgc2FtZSBmb3JtYXQgYXMgdGhlIHNlZ21lbnQsIHdlIGNhbiBjb21wYXJlCisgICAqIHRoZSBzdGFydCBhbmQgc3RvcCB2YWx1ZXMsIG90aGVyd2lzZSB3ZSBhc3N1bWUgMCBhbmQgLTEgKi8KKyAgaWYgKEdfTElLRUxZIChzZWdtZW50LT5mb3JtYXQgPT0gZm9ybWF0KSkgeworICAgIHN0YXJ0ID0gc2VnbWVudC0+c3RhcnQ7CisgICAgc3RvcCA9IHNlZ21lbnQtPnN0b3A7CisgICAgYmFzZSA9IHNlZ21lbnQtPmJhc2U7CisgIH0gZWxzZSB7CisgICAgc3RhcnQgPSAwOworICAgIHN0b3AgPSAtMTsKKyAgICBiYXNlID0gMDsKKyAgfQorCisgIC8qIHRoaXMgcnVubmluZ190aW1lIHdhcyBmb3IgYSBwcmV2aW91cyBzZWdtZW50ICovCisgIGlmIChydW5uaW5nX3RpbWUgPCBiYXNlKQorICAgIHJldHVybiAtMTsKKworICAvKiBzdGFydCBieSBzdWJ0cmFjdGluZyB0aGUgYmFzZSB0aW1lICovCisgIHJlc3VsdCA9IHJ1bm5pbmdfdGltZSAtIGJhc2U7CisKKyAgLyogbW92ZSBpbnRvIHRoZSBzZWdtZW50IGF0IHRoZSByaWdodCByYXRlICovCisgIGFic19yYXRlID0gQUJTIChzZWdtZW50LT5yYXRlKTsKKyAgaWYgKEdfVU5MSUtFTFkgKGFic19yYXRlICE9IDEuMCkpCisgICAgcmVzdWx0ID0gY2VpbCAocmVzdWx0ICogYWJzX3JhdGUpOworCisgIGlmIChHX0xJS0VMWSAoc2VnbWVudC0+cmF0ZSA+IDAuMCkpIHsKKyAgICAvKiBicmluZyB0byBjb3JyZWN0ZWQgcG9zaXRpb24gaW4gc2VnbWVudCAqLworICAgIHJlc3VsdCArPSBzdGFydDsKKworICAgIC8qIG91dHNpZGUgb2YgdGhlIHNlZ21lbnQgYm91bmRhcnkgc3RvcCAqLworICAgIGlmIChHX1VOTElLRUxZIChzdG9wICE9IC0xICYmIHJlc3VsdCA+IHN0b3ApKQorICAgICAgcmV0dXJuIC0xOworICB9IGVsc2UgeworICAgIC8qIGNhbm5vdCBjb250aW51ZSBpZiBubyBzdG9wIHBvc2l0aW9uIHNldCBvciBvdXRzaWRlIG9mCisgICAgICogdGhlIHNlZ21lbnQuICovCisgICAgaWYgKEdfVU5MSUtFTFkgKHN0b3AgPT0gLTEgfHwgcmVzdWx0ICsgc3RhcnQgPiBzdG9wKSkKKyAgICAgIHJldHVybiAtMTsKKworICAgIC8qIGJyaW5nIHRvIGNvcnJlY3RlZCBwb3NpdGlvbiBpbiBzZWdtZW50ICovCisgICAgcmVzdWx0ID0gc3RvcCAtIHJlc3VsdDsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisKKy8qKgorICogZ3N0X3NlZ21lbnRfc2V0X3J1bm5pbmdfdGltZToKKyAqIEBzZWdtZW50OiBhICNHc3RTZWdtZW50IHN0cnVjdHVyZS4KKyAqIEBmb3JtYXQ6IHRoZSBmb3JtYXQgb2YgdGhlIHNlZ21lbnQuCisgKiBAcnVubmluZ190aW1lOiB0aGUgcnVubmluZ190aW1lIGluIHRoZSBzZWdtZW50CisgKgorICogQWRqdXN0IHRoZSBzdGFydC9zdG9wIGFuZCBiYXNlIHZhbHVlcyBvZiBAc2VnbWVudCBzdWNoIHRoYXQgdGhlIG5leHQgdmFsaWQKKyAqIGJ1ZmZlciB3aWxsIGJlIG9uZSB3aXRoIEBydW5uaW5nX3RpbWUuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHNlZ21lbnQgY291bGQgYmUgdXBkYXRlZCBzdWNjZXNzZnVsbHkuIElmICVGQUxTRSBpcworICogcmV0dXJuZWQsIEBydW5uaW5nX3RpbWUgaXMgLTEgb3Igbm90IGluIEBzZWdtZW50LgorICoKKyAqIFNpbmNlOiAwLjEwLjI0CisgKi8KK2dib29sZWFuCitnc3Rfc2VnbWVudF9zZXRfcnVubmluZ190aW1lIChHc3RTZWdtZW50ICogc2VnbWVudCwgR3N0Rm9ybWF0IGZvcm1hdCwKKyAgICBndWludDY0IHJ1bm5pbmdfdGltZSkKK3sKKyAgZ3VpbnQ2NCBwb3NpdGlvbjsKKyAgZ3VpbnQ2NCBzdGFydCwgc3RvcDsKKworICAvKiBzdGFydCBieSBicmluZ2luZyB0aGUgcnVubmluZ190aW1lIGludG8gdGhlIHNlZ21lbnQgcG9zaXRpb24gKi8KKyAgcG9zaXRpb24gPSBnc3Rfc2VnbWVudF90b19wb3NpdGlvbiAoc2VnbWVudCwgZm9ybWF0LCBydW5uaW5nX3RpbWUpOworCisgIC8qIHdlIG11c3QgaGF2ZSBhIHZhbGlkIHBvc2l0aW9uIG5vdyAqLworICBpZiAoR19VTkxJS0VMWSAocG9zaXRpb24gPT0gLTEpKQorICAgIHJldHVybiBGQUxTRTsKKworICBzdGFydCA9IHNlZ21lbnQtPnN0YXJ0OworICBzdG9wID0gc2VnbWVudC0+c3RvcDsKKworICBpZiAoR19MSUtFTFkgKHNlZ21lbnQtPnJhdGUgPiAwLjApKSB7CisgICAgLyogdXBkYXRlIHRoZSBzdGFydCBhbmQgdGltZSB2YWx1ZXMgKi8KKyAgICBzdGFydCA9IHBvc2l0aW9uOworICB9IGVsc2UgeworICAgIC8qIHJldmVyc2UsIHVwZGF0ZSBzdG9wICovCisgICAgc3RvcCA9IHBvc2l0aW9uOworICB9CisgIC8qIGFuZCBiYXNlIHRpbWUgaXMgZXhhY3RseSB0aGUgcnVubmluZyB0aW1lICovCisgIHNlZ21lbnQtPnRpbWUgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoc2VnbWVudCwgZm9ybWF0LCBzdGFydCk7CisgIHNlZ21lbnQtPnN0YXJ0ID0gc3RhcnQ7CisgIHNlZ21lbnQtPnN0b3AgPSBzdG9wOworICBzZWdtZW50LT5iYXNlID0gcnVubmluZ190aW1lOworCisgIHJldHVybiBUUlVFOworfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHNlZ21lbnQuaCBiL2dzdC9nc3RzZWdtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI1ZTFhZAotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3RzZWdtZW50LmgKQEAgLTAsMCArMSwxNzggQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+CisgKgorICogZ3N0c2VnbWVudC5oOiBIZWFkZXIgZm9yIEdzdFNlZ21lbnQgc3Vic3lzdGVtCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworCisjaWZuZGVmIF9fR1NUX1NFR01FTlRfSF9fCisjZGVmaW5lIF9fR1NUX1NFR01FTlRfSF9fCisKKyNpbmNsdWRlIDxnc3QvZ3N0Zm9ybWF0Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBHU1RfVFlQRV9TRUdNRU5UICAgICAgICAgICAgIChnc3Rfc2VnbWVudF9nZXRfdHlwZSgpKQorCit0eXBlZGVmIHN0cnVjdCBfR3N0U2VnbWVudCBHc3RTZWdtZW50OworCisvKioKKyAqIEdzdFNlZWtUeXBlOgorICogQEdTVF9TRUVLX1RZUEVfTk9ORTogbm8gY2hhbmdlIGluIHBvc2l0aW9uIGlzIHJlcXVpcmVkCisgKiBAR1NUX1NFRUtfVFlQRV9DVVI6IGNoYW5nZSByZWxhdGl2ZSB0byBjdXJyZW50bHkgY29uZmlndXJlZCBzZWdtZW50LiBUaGlzCisgKiAgICBjYW4ndCBiZSB1c2VkIHRvIHNlZWsgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgcGxheWJhY2sgcG9zaXRpb24gLSBkbyBhCisgKiAgICBwb3NpdGlvbiBxdWVyeSwgY2FsY3VsYXRlIHRoZSBkZXNpcmVkIHBvc2l0aW9uIGFuZCB0aGVuIGRvIGFuIGFic29sdXRlCisgKiAgICBwb3NpdGlvbiBzZWVrIGluc3RlYWQgaWYgdGhhdCdzIHdoYXQgeW91IHdhbnQgdG8gZG8uCisgKiBAR1NUX1NFRUtfVFlQRV9TRVQ6IGFic29sdXRlIHBvc2l0aW9uIGlzIHJlcXVlc3RlZAorICogQEdTVF9TRUVLX1RZUEVfRU5EOiByZWxhdGl2ZSBwb3NpdGlvbiB0byBkdXJhdGlvbiBpcyByZXF1ZXN0ZWQKKyAqCisgKiBUaGUgZGlmZmVyZW50IHR5cGVzIG9mIHNlZWsgZXZlbnRzLiBXaGVuIGNvbnN0cnVjdGluZyBhIHNlZWsgZXZlbnQgd2l0aAorICogZ3N0X2V2ZW50X25ld19zZWVrKCkgb3Igd2hlbiBkb2luZyBnc3Rfc2VnbWVudF9kb19zZWVrICgpLgorICovCit0eXBlZGVmIGVudW0geworICAvKiBvbmUgb2YgdGhlc2UgKi8KKyAgR1NUX1NFRUtfVFlQRV9OT05FICAgICAgICAgICAgPSAwLAorICBHU1RfU0VFS19UWVBFX0NVUiAgICAgICAgICAgICA9IDEsCisgIEdTVF9TRUVLX1RZUEVfU0VUICAgICAgICAgICAgID0gMiwKKyAgR1NUX1NFRUtfVFlQRV9FTkQgICAgICAgICAgICAgPSAzCit9IEdzdFNlZWtUeXBlOworCisvKioKKyAqIEdzdFNlZWtGbGFnczoKKyAqIEBHU1RfU0VFS19GTEFHX05PTkU6IG5vIGZsYWcKKyAqIEBHU1RfU0VFS19GTEFHX0ZMVVNIOiBmbHVzaCBwaXBlbGluZQorICogQEdTVF9TRUVLX0ZMQUdfQUNDVVJBVEU6IGFjY3VyYXRlIHBvc2l0aW9uIGlzIHJlcXVlc3RlZCwgdGhpcyBtaWdodAorICogICAgICAgICAgICAgICAgICAgICBiZSBjb25zaWRlcmFibHkgc2xvd2VyIGZvciBzb21lIGZvcm1hdHMuCisgKiBAR1NUX1NFRUtfRkxBR19LRVlfVU5JVDogc2VlayB0byB0aGUgbmVhcmVzdCBrZXlmcmFtZS4gVGhpcyBtaWdodCBiZQorICogICAgICAgICAgICAgICAgICAgICBmYXN0ZXIgYnV0IGxlc3MgYWNjdXJhdGUuCisgKiBAR1NUX1NFRUtfRkxBR19TRUdNRU5UOiBwZXJmb3JtIGEgc2VnbWVudCBzZWVrLgorICogQEdTVF9TRUVLX0ZMQUdfU0tJUDogd2hlbiBkb2luZyBmYXN0IGZvd2FyZCBvciBmYXN0IHJldmVyc2UgcGxheWJhY2ssIGFsbG93CisgKiAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzIHRvIHNraXAgZnJhbWVzIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhbGwKKyAqICAgICAgICAgICAgICAgICAgICAgZnJhbWVzLiBTaW5jZSAwLjEwLjIyLgorICoKKyAqIEZsYWdzIHRvIGJlIHVzZWQgd2l0aCBnc3RfZWxlbWVudF9zZWVrKCkgb3IgZ3N0X2V2ZW50X25ld19zZWVrKCkuIEFsbCBmbGFncworICogY2FuIGJlIHVzZWQgdG9nZXRoZXIuCisgKgorICogQSBub24gZmx1c2hpbmcgc2VlayBtaWdodCB0YWtlIHNvbWUgdGltZSB0byBwZXJmb3JtIGFzIHRoZSBjdXJyZW50bHkKKyAqIHBsYXlpbmcgZGF0YSBpbiB0aGUgcGlwZWxpbmUgd2lsbCBub3QgYmUgY2xlYXJlZC4KKyAqCisgKiBBbiBhY2N1cmF0ZSBzZWVrIG1pZ2h0IGJlIHNsb3dlciBmb3IgZm9ybWF0cyB0aGF0IGRvbid0IGhhdmUgYW55IGluZGV4ZXMKKyAqIG9yIHRpbWVzdGFtcCBtYXJrZXJzIGluIHRoZSBzdHJlYW0uIFNwZWNpZnlpbmcgdGhpcyBmbGFnIG1pZ2h0IHJlcXVpcmUgYQorICogY29tcGxldGUgc2NhbiBvZiB0aGUgZmlsZSBpbiB0aG9zZSBjYXNlcy4KKyAqCisgKiBXaGVuIHBlcmZvcm1pbmcgYSBzZWdtZW50IHNlZWs6IGFmdGVyIHRoZSBwbGF5YmFjayBvZiB0aGUgc2VnbWVudCBjb21wbGV0ZXMsCisgKiBubyBFT1Mgd2lsbCBiZSBlbW1pdGVkIGJ5IHRoZSBlbGVtZW50IHRoYXQgcGVyZm9ybWVkIHRoZSBzZWVrLCBidXQgYQorICogI0dTVF9NRVNTQUdFX1NFR01FTlRfRE9ORSBtZXNzYWdlIHdpbGwgYmUgcG9zdGVkIG9uIHRoZSBidXMgYnkgdGhlIGVsZW1lbnQuCisgKiBXaGVuIHRoaXMgbWVzc2FnZSBpcyBwb3N0ZWQsIGl0IGlzIHBvc3NpYmxlIHRvIHNlbmQgYSBuZXcgc2VlayBldmVudCB0bworICogY29udGludWUgcGxheWJhY2suIFdpdGggdGhpcyBzZWVrIG1ldGhvZCBpdCBpcyBwb3NzaWJsZSB0byBwZXJmb3JtIHNlYW1sZXNzCisgKiBsb29waW5nIG9yIHNpbXBsZSBsaW5lYXIgZWRpdGluZy4KKyAqCisgKiBXaGVuIGRvaW5nIGZhc3QgZm9yd2FyZCAocmF0ZSA+IDEuMCkgb3IgZmFzdCByZXZlcnNlIChyYXRlIDwgLTEuMCkgdHJpY2ttb2RlCisgKiBwbGF5YmFjaywgdGhlIEBHU1RfU0VFS19GTEFHX1NLSVAgZmxhZyBjYW4gYmUgdXNlZCB0byBpbnN0cnVjdCBkZWNvZGVycworICogYW5kIGRlbXV4ZXJzIHRvIGFkanVzdCB0aGUgcGxheWJhY2sgcmF0ZSBieSBza2lwcGluZyBmcmFtZXMuIFRoaXMgY2FuIGltcHJvdmUKKyAqIHBlcmZvcm1hbmNlIGFuZCBkZWNyZWFzZSBDUFUgdXNhZ2UgYmVjYXVzZSBub3QgYWxsIGZyYW1lcyBuZWVkIHRvIGJlIGRlY29kZWQuCisgKgorICogQWxzbyBzZWUgcGFydC1zZWVraW5nLnR4dCBpbiB0aGUgR1N0cmVhbWVyIGRlc2lnbiBkb2N1bWVudGF0aW9uIGZvciBtb3JlCisgKiBkZXRhaWxzIG9uIHRoZSBtZWFuaW5nIG9mIHRoZXNlIGZsYWdzIGFuZCB0aGUgYmVoYXZpb3VyIGV4cGVjdGVkIG9mCisgKiBlbGVtZW50cyB0aGF0IGhhbmRsZSB0aGVtLgorICovCit0eXBlZGVmIGVudW0geworICBHU1RfU0VFS19GTEFHX05PTkUgICAgICAgICAgICA9IDAsCisgIEdTVF9TRUVLX0ZMQUdfRkxVU0ggICAgICAgICAgID0gKDEgPDwgMCksCisgIEdTVF9TRUVLX0ZMQUdfQUNDVVJBVEUgICAgICAgID0gKDEgPDwgMSksCisgIEdTVF9TRUVLX0ZMQUdfS0VZX1VOSVQgICAgICAgID0gKDEgPDwgMiksCisgIEdTVF9TRUVLX0ZMQUdfU0VHTUVOVCAgICAgICAgID0gKDEgPDwgMyksCisgIEdTVF9TRUVLX0ZMQUdfU0tJUCAgICAgICAgICAgID0gKDEgPDwgNCkKK30gR3N0U2Vla0ZsYWdzOworCisvKioKKyAqIEdzdFNlZ21lbnRGbGFnczoKKyAqIEBHU1RfU0VHTUVOVF9GTEFHX05PTkU6IG5vIGZsYWdzCisgKiBAR1NUX1NFR01FTlRfRkxBR19SRVNFVDogcmVzZXQgdGhlIHBpcGVsaW5lIHJ1bm5pbmdfdGltZSB0byB0aGUgc2VnbWVudAorICogICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdfdGltZQorICogQEdTVF9TRUdNRU5UX0ZMQUdfU0tJUDogcGVyZm9ybSBza2lwIHBsYXliYWNrCisgKgorICogRmxhZ3MgZm9yIHRoZSBHc3RTZWdtZW50IHN0cnVjdHVyZS4gQ3VycmVudGx5IG1hcHBlZCB0byB0aGUgY29ycmVzcG9uZGluZworICogdmFsdWVzIG9mIHRoZSBzZWVrIGZsYWdzLgorICovCit0eXBlZGVmIGVudW0geworICBHU1RfU0VHTUVOVF9GTEFHX05PTkUgICAgICAgICAgICA9IEdTVF9TRUVLX0ZMQUdfTk9ORSwKKyAgR1NUX1NFR01FTlRfRkxBR19SRVNFVCAgICAgICAgICAgPSBHU1RfU0VFS19GTEFHX0ZMVVNILAorICBHU1RfU0VHTUVOVF9GTEFHX1NLSVAgICAgICAgICAgICA9IEdTVF9TRUVLX0ZMQUdfU0tJUAorfSBHc3RTZWdtZW50RmxhZ3M7CisKKy8qKgorICogR3N0U2VnbWVudDoKKyAqIEBmbGFnczogZmxhZ3MgZm9yIHRoaXMgc2VnbWVudAorICogQHJhdGU6IHRoZSByYXRlIG9mIHRoZSBzZWdtZW50CisgKiBAYXBwbGllZF9yYXRlOiB0aGUgYWxyZWFkeSBhcHBsaWVkIHJhdGUgdG8gdGhlIHNlZ21lbnQKKyAqIEBmb3JtYXQ6IHRoZSBmb3JtYXQgb2YgdGhlIHNlZ21lbnQgdmFsdWVzCisgKiBAYmFzZTogdGhlIGJhc2UgdGltZSBvZiB0aGUgc2VnbWVudAorICogQHN0YXJ0OiB0aGUgc3RhcnQgb2YgdGhlIHNlZ21lbnQKKyAqIEBzdG9wOiB0aGUgc3RvcCBvZiB0aGUgc2VnbWVudAorICogQHRpbWU6IHRoZSBzdHJlYW0gdGltZSBvZiB0aGUgc2VnbWVudAorICogQHBvc2l0aW9uOiB0aGUgcG9zaXRpb24gaW4gdGhlIHNlZ21lbnQKKyAqIEBkdXJhdGlvbjogdGhlIGR1cmF0aW9uIG9mIHRoZSBzZWdtZW50CisgKgorICogQSBoZWxwZXIgc3RydWN0dXJlIHRoYXQgaG9sZHMgdGhlIGNvbmZpZ3VyZWQgcmVnaW9uIG9mCisgKiBpbnRlcmVzdCBpbiBhIG1lZGlhIGZpbGUuCisgKi8KK3N0cnVjdCBfR3N0U2VnbWVudCB7CisgIC8qPCBwdWJsaWMgPiovCisgIEdzdFNlZ21lbnRGbGFncyBmbGFnczsKKworICBnZG91YmxlICAgICAgICAgcmF0ZTsKKyAgZ2RvdWJsZSAgICAgICAgIGFwcGxpZWRfcmF0ZTsKKworICBHc3RGb3JtYXQgICAgICAgZm9ybWF0OworICBndWludDY0ICAgICAgICAgYmFzZTsKKyAgZ3VpbnQ2NCAgICAgICAgIHN0YXJ0OworICBndWludDY0ICAgICAgICAgc3RvcDsKKyAgZ3VpbnQ2NCAgICAgICAgIHRpbWU7CisKKyAgZ3VpbnQ2NCAgICAgICAgIHBvc2l0aW9uOworICBndWludDY0ICAgICAgICAgZHVyYXRpb247Cit9OworCitHVHlwZSAgICAgICAgZ3N0X3NlZ21lbnRfZ2V0X3R5cGUgICAgICAgICAgICAodm9pZCk7CisKK0dzdFNlZ21lbnQgKiBnc3Rfc2VnbWVudF9uZXcgICAgICAgICAgICAgICAgICh2b2lkKTsKK0dzdFNlZ21lbnQgKiBnc3Rfc2VnbWVudF9jb3B5ICAgICAgICAgICAgICAgIChjb25zdCBHc3RTZWdtZW50ICpzZWdtZW50KTsKK3ZvaWQgICAgICAgICBnc3Rfc2VnbWVudF9jb3B5X2ludG8gICAgICAgICAgIChjb25zdCBHc3RTZWdtZW50ICpzcmMsIEdzdFNlZ21lbnQgKmRlc3QpOwordm9pZCAgICAgICAgIGdzdF9zZWdtZW50X2ZyZWUgICAgICAgICAgICAgICAgKEdzdFNlZ21lbnQgKnNlZ21lbnQpOworCit2b2lkICAgICAgICAgZ3N0X3NlZ21lbnRfaW5pdCAgICAgICAgICAgICAgICAoR3N0U2VnbWVudCAqc2VnbWVudCwgR3N0Rm9ybWF0IGZvcm1hdCk7CisKK2d1aW50NjQgICAgICBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAgICAgIChjb25zdCBHc3RTZWdtZW50ICpzZWdtZW50LCBHc3RGb3JtYXQgZm9ybWF0LCBndWludDY0IHBvc2l0aW9uKTsKK2d1aW50NjQgICAgICBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgICAgIChjb25zdCBHc3RTZWdtZW50ICpzZWdtZW50LCBHc3RGb3JtYXQgZm9ybWF0LCBndWludDY0IHBvc2l0aW9uKTsKK2d1aW50NjQgICAgICBnc3Rfc2VnbWVudF90b19wb3NpdGlvbiAgICAgICAgIChjb25zdCBHc3RTZWdtZW50ICpzZWdtZW50LCBHc3RGb3JtYXQgZm9ybWF0LCBndWludDY0IHJ1bm5pbmdfdGltZSk7CisKK2dib29sZWFuICAgICBnc3Rfc2VnbWVudF9zZXRfcnVubmluZ190aW1lICAgIChHc3RTZWdtZW50ICpzZWdtZW50LCBHc3RGb3JtYXQgZm9ybWF0LCBndWludDY0IHJ1bm5pbmdfdGltZSk7CisKK2dib29sZWFuICAgICBnc3Rfc2VnbWVudF9jbGlwICAgICAgICAgICAgICAgIChjb25zdCBHc3RTZWdtZW50ICpzZWdtZW50LCBHc3RGb3JtYXQgZm9ybWF0LCBndWludDY0IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgc3RvcCwgZ3VpbnQ2NCAqY2xpcF9zdGFydCwgZ3VpbnQ2NCAqY2xpcF9zdG9wKTsKKworCitnYm9vbGVhbiAgICAgZ3N0X3NlZ21lbnRfZG9fc2VlayAgICAgICAgICAgICAoR3N0U2VnbWVudCAqIHNlZ21lbnQsIGdkb3VibGUgcmF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RGb3JtYXQgZm9ybWF0LCBHc3RTZWVrRmxhZ3MgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U2Vla1R5cGUgc3RhcnRfdHlwZSwgZ3VpbnQ2NCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RTZWVrVHlwZSBzdG9wX3R5cGUsIGd1aW50NjQgc3RvcCwgZ2Jvb2xlYW4gKiB1cGRhdGUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HU1RfU0VHTUVOVF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RzdHJ1Y3R1cmUuYyBiL2dzdC9nc3RzdHJ1Y3R1cmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTE2NjIyCi0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdHN0cnVjdHVyZS5jCkBAIC0wLDAgKzEsMzIwNSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisgKgorICogZ3N0c3RydWN0dXJlLmM6IGxpc3RzIG9mIHsgR1F1YXJrLCBHVmFsdWUgfSB0dXBsZXMKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKioKKyAqIFNFQ1RJT046Z3N0c3RydWN0dXJlCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEdlbmVyaWMgc3RydWN0dXJlIGNvbnRhaW5pbmcgZmllbGRzIG9mIG5hbWVzIGFuZCB2YWx1ZXMKKyAqIEBzZWVfYWxzbzogI0dzdENhcHMsICNHc3RNZXNzYWdlLCAjR3N0RXZlbnQsICNHc3RRdWVyeQorICoKKyAqIEEgI0dzdFN0cnVjdHVyZSBpcyBhIGNvbGxlY3Rpb24gb2Yga2V5L3ZhbHVlIHBhaXJzLiBUaGUga2V5cyBhcmUgZXhwcmVzc2VkCisgKiBhcyBHUXVhcmtzIGFuZCB0aGUgdmFsdWVzIGNhbiBiZSBvZiBhbnkgR1R5cGUuCisgKgorICogSW4gYWRkaXRpb24gdG8gdGhlIGtleS92YWx1ZSBwYWlycywgYSAjR3N0U3RydWN0dXJlIGFsc28gaGFzIGEgbmFtZS4gVGhlIG5hbWUKKyAqIHN0YXJ0cyB3aXRoIGEgbGV0dGVyIGFuZCBjYW4gYmUgZm9sbGVkIGJ5IGxldHRlcnMsIG51bWJlcnMgYW5kIGFueSBvZiAiLy1fLjoiLgorICoKKyAqICNHc3RTdHJ1Y3R1cmUgaXMgdXNlZCBieSB2YXJpb3VzIEdTdHJlYW1lciBzdWJzeXN0ZW1zIHRvIHN0b3JlIGluZm9ybWF0aW9uCisgKiBpbiBhIGZsZXhpYmxlIGFuZCBleHRlbnNpYmxlIHdheS4gQSAjR3N0U3RydWN0dXJlIGRvZXMgbm90IGhhdmUgYSByZWZjb3VudAorICogYmVjYXVzZSBpdCB1c3VhbGx5IGlzIHBhcnQgb2YgYSBoaWdoZXIgbGV2ZWwgb2JqZWN0IHN1Y2ggYXMgI0dzdENhcHMuIEl0CisgKiBwcm92aWRlcyBhIG1lYW5zIHRvIGVuZm9yY2UgbXV0YWJpbGl0eSB1c2luZyB0aGUgcmVmY291bnQgb2YgdGhlIHBhcmVudAorICogd2l0aCB0aGUgZ3N0X3N0cnVjdHVyZV9zZXRfcGFyZW50X3JlZmNvdW50KCkgbWV0aG9kLgorICoKKyAqIEEgI0dzdFN0cnVjdHVyZSBjYW4gYmUgY3JlYXRlZCB3aXRoIGdzdF9zdHJ1Y3R1cmVfZW1wdHlfbmV3KCkgb3IKKyAqIGdzdF9zdHJ1Y3R1cmVfbmV3KCksIHdoaWNoIGJvdGggdGFrZSBhIG5hbWUgYW5kIGFuIG9wdGlvbmFsIHNldCBvZgorICoga2V5L3ZhbHVlIHBhaXJzIGFsb25nIHdpdGggdGhlIHR5cGVzIG9mIHRoZSB2YWx1ZXMuCisgKgorICogRmllbGQgdmFsdWVzIGNhbiBiZSBjaGFuZ2VkIHdpdGggZ3N0X3N0cnVjdHVyZV9zZXRfdmFsdWUoKSBvcgorICogZ3N0X3N0cnVjdHVyZV9zZXQoKS4KKyAqCisgKiBGaWVsZCB2YWx1ZXMgY2FuIGJlIHJldHJpZXZlZCB3aXRoIGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKCkgb3IgdGhlIG1vcmUKKyAqIGNvbnZlbmllbnQgZ3N0X3N0cnVjdHVyZV9nZXRfKigpIGZ1bmN0aW9ucy4KKyAqCisgKiBGaWVsZHMgY2FuIGJlIHJlbW92ZWQgd2l0aCBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCgpIG9yCisgKiBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZHMoKS4KKyAqCisgKiBTdHJpbmdzIGluIHN0cnVjdHVyZXMgbXVzdCBiZSBBU0NJSSBvciBVVEYtOCBlbmNvZGVkLiBPdGhlciBlbmNvZGluZ3MgYXJlCisgKiBub3QgYWxsb3dlZC4gU3RyaW5ncyBtdXN0IG5vdCBiZSBlbXB0eSBlaXRoZXIsIGJ1dCBtYXkgYmUgTlVMTC4KKyAqCisgKiBMYXN0IHJldmlld2VkIG9uIDIwMDktMDYtMDggKDAuMTAuMjMpCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImdzdHF1YXJrLmgiCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdvYmplY3QvZ3ZhbHVlY29sbGVjdG9yLmg+CisKK3R5cGVkZWYgc3RydWN0IF9Hc3RTdHJ1Y3R1cmVGaWVsZCBHc3RTdHJ1Y3R1cmVGaWVsZDsKKworc3RydWN0IF9Hc3RTdHJ1Y3R1cmVGaWVsZAoreworICBHUXVhcmsgbmFtZTsKKyAgR1ZhbHVlIHZhbHVlOworfTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgR3N0U3RydWN0dXJlIHM7CisKKyAgLyogb3duZWQgYnkgcGFyZW50IHN0cnVjdHVyZSwgTlVMTCBpZiBubyBwYXJlbnQgKi8KKyAgZ2ludCAqcGFyZW50X3JlZmNvdW50OworCisgIEdBcnJheSAqZmllbGRzOworfSBHc3RTdHJ1Y3R1cmVJbXBsOworCisjZGVmaW5lIEdTVF9TVFJVQ1RVUkVfUkVGQ09VTlQocykgKCgoR3N0U3RydWN0dXJlSW1wbCopKHMpKS0+cGFyZW50X3JlZmNvdW50KQorI2RlZmluZSBHU1RfU1RSVUNUVVJFX0ZJRUxEUyhzKSAoKChHc3RTdHJ1Y3R1cmVJbXBsKikocykpLT5maWVsZHMpCisKKyNkZWZpbmUgR1NUX1NUUlVDVFVSRV9GSUVMRChzdHJ1Y3R1cmUsIGluZGV4KSBcCisgICAgJmdfYXJyYXlfaW5kZXgoR1NUX1NUUlVDVFVSRV9GSUVMRFMoc3RydWN0dXJlKSwgR3N0U3RydWN0dXJlRmllbGQsIChpbmRleCkpCisKKyNkZWZpbmUgSVNfTVVUQUJMRShzdHJ1Y3R1cmUpIFwKKyAgICAoIUdTVF9TVFJVQ1RVUkVfUkVGQ09VTlQoc3RydWN0dXJlKSB8fCBcCisgICAgIGdfYXRvbWljX2ludF9nZXQgKEdTVF9TVFJVQ1RVUkVfUkVGQ09VTlQoc3RydWN0dXJlKSkgPT0gMSkKKworI2RlZmluZSBJU19UQUdMSVNUKHN0cnVjdHVyZSkgXAorICAgIChzdHJ1Y3R1cmUtPm5hbWUgPT0gR1NUX1FVQVJLIChUQUdMSVNUKSkKKworc3RhdGljIHZvaWQgZ3N0X3N0cnVjdHVyZV9zZXRfZmllbGQgKEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwKKyAgICBHc3RTdHJ1Y3R1cmVGaWVsZCAqIGZpZWxkKTsKK3N0YXRpYyBHc3RTdHJ1Y3R1cmVGaWVsZCAqZ3N0X3N0cnVjdHVyZV9nZXRfZmllbGQgKGNvbnN0IEdzdFN0cnVjdHVyZSAqCisgICAgc3RydWN0dXJlLCBjb25zdCBnY2hhciAqIGZpZWxkbmFtZSk7CitzdGF0aWMgR3N0U3RydWN0dXJlRmllbGQgKmdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X2ZpZWxkIChjb25zdCBHc3RTdHJ1Y3R1cmUgKgorICAgIHN0cnVjdHVyZSwgR1F1YXJrIGZpZWxkKTsKK3N0YXRpYyB2b2lkIGdzdF9zdHJ1Y3R1cmVfdHJhbnNmb3JtX3RvX3N0cmluZyAoY29uc3QgR1ZhbHVlICogc3JjX3ZhbHVlLAorICAgIEdWYWx1ZSAqIGRlc3RfdmFsdWUpOworc3RhdGljIEdzdFN0cnVjdHVyZSAqZ3N0X3N0cnVjdHVyZV9jb3B5X2NvbmRpdGlvbmFsIChjb25zdCBHc3RTdHJ1Y3R1cmUgKgorICAgIHN0cnVjdHVyZSk7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X3N0cnVjdHVyZV9wYXJzZV92YWx1ZSAoZ2NoYXIgKiBzdHIsIGdjaGFyICoqIGFmdGVyLAorICAgIEdWYWx1ZSAqIHZhbHVlLCBHVHlwZSBkZWZhdWx0X3R5cGUpOworc3RhdGljIGdib29sZWFuIGdzdF9zdHJ1Y3R1cmVfcGFyc2Vfc2ltcGxlX3N0cmluZyAoZ2NoYXIgKiBzLCBnY2hhciAqKiBlbmQpOworCitHVHlwZSBfZ3N0X3N0cnVjdHVyZV90eXBlID0gMDsKKwordm9pZAorX3ByaXZfZ3N0X3N0cnVjdHVyZV9pbml0aWFsaXplICh2b2lkKQoreworICBfZ3N0X3N0cnVjdHVyZV90eXBlID0gZ19ib3hlZF90eXBlX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFN0cnVjdHVyZSIsCisgICAgICAoR0JveGVkQ29weUZ1bmMpIGdzdF9zdHJ1Y3R1cmVfY29weV9jb25kaXRpb25hbCwKKyAgICAgIChHQm94ZWRGcmVlRnVuYykgZ3N0X3N0cnVjdHVyZV9mcmVlKTsKKworICBnX3ZhbHVlX3JlZ2lzdGVyX3RyYW5zZm9ybV9mdW5jIChfZ3N0X3N0cnVjdHVyZV90eXBlLCBHX1RZUEVfU1RSSU5HLAorICAgICAgZ3N0X3N0cnVjdHVyZV90cmFuc2Zvcm1fdG9fc3RyaW5nKTsKK30KKworc3RhdGljIEdzdFN0cnVjdHVyZSAqCitnc3Rfc3RydWN0dXJlX2lkX2VtcHR5X25ld193aXRoX3NpemUgKEdRdWFyayBxdWFyaywgZ3VpbnQgcHJlYWxsb2MpCit7CisgIEdzdFN0cnVjdHVyZUltcGwgKnN0cnVjdHVyZTsKKworICBzdHJ1Y3R1cmUgPSBnX3NsaWNlX25ldyAoR3N0U3RydWN0dXJlSW1wbCk7CisgICgoR3N0U3RydWN0dXJlICopIHN0cnVjdHVyZSktPnR5cGUgPSBfZ3N0X3N0cnVjdHVyZV90eXBlOworICAoKEdzdFN0cnVjdHVyZSAqKSBzdHJ1Y3R1cmUpLT5uYW1lID0gcXVhcms7CisgIEdTVF9TVFJVQ1RVUkVfUkVGQ09VTlQgKHN0cnVjdHVyZSkgPSBOVUxMOworICBHU1RfU1RSVUNUVVJFX0ZJRUxEUyAoc3RydWN0dXJlKSA9CisgICAgICBnX2FycmF5X3NpemVkX25ldyAoRkFMU0UsIEZBTFNFLCBzaXplb2YgKEdzdFN0cnVjdHVyZUZpZWxkKSwgcHJlYWxsb2MpOworCisgIHJldHVybiBHU1RfU1RSVUNUVVJFX0NBU1QgKHN0cnVjdHVyZSk7Cit9CisKKy8qKgorICogZ3N0X3N0cnVjdHVyZV9pZF9lbXB0eV9uZXc6CisgKiBAcXVhcms6IG5hbWUgb2YgbmV3IHN0cnVjdHVyZQorICoKKyAqIENyZWF0ZXMgYSBuZXcsIGVtcHR5ICNHc3RTdHJ1Y3R1cmUgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhcyBhIEdRdWFyay4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnc3Rfc3RydWN0dXJlX2ZyZWUKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3LCBlbXB0eSAjR3N0U3RydWN0dXJlCisgKi8KK0dzdFN0cnVjdHVyZSAqCitnc3Rfc3RydWN0dXJlX2lkX2VtcHR5X25ldyAoR1F1YXJrIHF1YXJrKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAocXVhcmsgIT0gMCwgTlVMTCk7CisKKyAgcmV0dXJuIGdzdF9zdHJ1Y3R1cmVfaWRfZW1wdHlfbmV3X3dpdGhfc2l6ZSAocXVhcmssIDApOworfQorCisjaWZuZGVmIEdfRElTQUJMRV9DSEVDS1MKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3N0cnVjdHVyZV92YWxpZGF0ZV9uYW1lIChjb25zdCBnY2hhciAqIG5hbWUpCit7CisgIGNvbnN0IGdjaGFyICpzOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYW1lICE9IE5VTEwsIEZBTFNFKTsKKworICBpZiAoR19VTkxJS0VMWSAoIWdfYXNjaWlfaXNhbHBoYSAoKm5hbWUpKSkgeworICAgIEdTVF9XQVJOSU5HICgiSW52YWxpZCBjaGFyYWN0ZXIgJyVjJyBhdCBvZmZzZXQgMCBpbiBzdHJ1Y3R1cmUgbmFtZTogJXMiLAorICAgICAgICAqbmFtZSwgbmFtZSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgLyogRklYTUU6IHRlc3QgbmFtZSBzdHJpbmcgbW9yZSAqLworICBzID0gJm5hbWVbMV07CisgIHdoaWxlICgqcyAmJiAoZ19hc2NpaV9pc2FsbnVtICgqcykgfHwgc3RyY2hyICgiLy1fLjorIiwgKnMpICE9IE5VTEwpKQorICAgIHMrKzsKKyAgaWYgKEdfVU5MSUtFTFkgKCpzICE9ICdcMCcpKSB7CisgICAgR1NUX1dBUk5JTkcgKCJJbnZhbGlkIGNoYXJhY3RlciAnJWMnIGF0IG9mZnNldCAlIiBHX0dVSU5UUFRSX0ZPUk1BVCAiIGluIgorICAgICAgICAiIHN0cnVjdHVyZSBuYW1lOiAlcyIsICpzLCAoKGd1aW50cHRyKSBzIC0gKGd1aW50cHRyKSBuYW1lKSwgbmFtZSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CisjZW5kaWYKKworLyoqCisgKiBnc3Rfc3RydWN0dXJlX2VtcHR5X25ldzoKKyAqIEBuYW1lOiBuYW1lIG9mIG5ldyBzdHJ1Y3R1cmUKKyAqCisgKiBDcmVhdGVzIGEgbmV3LCBlbXB0eSAjR3N0U3RydWN0dXJlIHdpdGggdGhlIGdpdmVuIEBuYW1lLgorICoKKyAqIFNlZSBnc3Rfc3RydWN0dXJlX3NldF9uYW1lKCkgZm9yIGNvbnN0cmFpbnRzIG9uIHRoZSBAbmFtZSBwYXJhbWV0ZXIuCisgKgorICogRnJlZS1mdW5jdGlvbjogZ3N0X3N0cnVjdHVyZV9mcmVlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldywgZW1wdHkgI0dzdFN0cnVjdHVyZQorICovCitHc3RTdHJ1Y3R1cmUgKgorZ3N0X3N0cnVjdHVyZV9lbXB0eV9uZXcgKGNvbnN0IGdjaGFyICogbmFtZSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF9zdHJ1Y3R1cmVfdmFsaWRhdGVfbmFtZSAobmFtZSksIE5VTEwpOworCisgIHJldHVybiBnc3Rfc3RydWN0dXJlX2lkX2VtcHR5X25ld193aXRoX3NpemUgKGdfcXVhcmtfZnJvbV9zdHJpbmcgKG5hbWUpLCAwKTsKK30KKworLyoqCisgKiBnc3Rfc3RydWN0dXJlX25ldzoKKyAqIEBuYW1lOiBuYW1lIG9mIG5ldyBzdHJ1Y3R1cmUKKyAqIEBmaXJzdGZpZWxkOiBuYW1lIG9mIGZpcnN0IGZpZWxkIHRvIHNldAorICogQC4uLjogYWRkaXRpb25hbCBhcmd1bWVudHMKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNHc3RTdHJ1Y3R1cmUgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gIFBhcnNlcyB0aGUKKyAqIGxpc3Qgb2YgdmFyaWFibGUgYXJndW1lbnRzIGFuZCBzZXRzIGZpZWxkcyB0byB0aGUgdmFsdWVzIGxpc3RlZC4KKyAqIFZhcmlhYmxlIGFyZ3VtZW50cyBzaG91bGQgYmUgcGFzc2VkIGFzIGZpZWxkIG5hbWUsIGZpZWxkIHR5cGUsCisgKiBhbmQgdmFsdWUuICBMYXN0IHZhcmlhYmxlIGFyZ3VtZW50IHNob3VsZCBiZSBOVUxMLgorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdzdF9zdHJ1Y3R1cmVfZnJlZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdFN0cnVjdHVyZQorICovCitHc3RTdHJ1Y3R1cmUgKgorZ3N0X3N0cnVjdHVyZV9uZXcgKGNvbnN0IGdjaGFyICogbmFtZSwgY29uc3QgZ2NoYXIgKiBmaXJzdGZpZWxkLCAuLi4pCit7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworICB2YV9saXN0IHZhcmFyZ3M7CisKKyAgdmFfc3RhcnQgKHZhcmFyZ3MsIGZpcnN0ZmllbGQpOworICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld192YWxpc3QgKG5hbWUsIGZpcnN0ZmllbGQsIHZhcmFyZ3MpOworICB2YV9lbmQgKHZhcmFyZ3MpOworCisgIHJldHVybiBzdHJ1Y3R1cmU7Cit9CisKKy8qKgorICogZ3N0X3N0cnVjdHVyZV9uZXdfdmFsaXN0OgorICogQG5hbWU6IG5hbWUgb2YgbmV3IHN0cnVjdHVyZQorICogQGZpcnN0ZmllbGQ6IG5hbWUgb2YgZmlyc3QgZmllbGQgdG8gc2V0CisgKiBAdmFyYXJnczogdmFyaWFibGUgYXJndW1lbnQgbGlzdAorICoKKyAqIENyZWF0ZXMgYSBuZXcgI0dzdFN0cnVjdHVyZSB3aXRoIHRoZSBnaXZlbiBAbmFtZS4gIFN0cnVjdHVyZSBmaWVsZHMKKyAqIGFyZSBzZXQgYWNjb3JkaW5nIHRvIHRoZSB2YXJhcmdzIGluIGEgbWFubmVyIHNpbWlsYXIgdG8KKyAqIGdzdF9zdHJ1Y3R1cmVfbmV3KCkuCisgKgorICogU2VlIGdzdF9zdHJ1Y3R1cmVfc2V0X25hbWUoKSBmb3IgY29uc3RyYWludHMgb24gdGhlIEBuYW1lIHBhcmFtZXRlci4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnc3Rfc3RydWN0dXJlX2ZyZWUKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RTdHJ1Y3R1cmUKKyAqLworR3N0U3RydWN0dXJlICoKK2dzdF9zdHJ1Y3R1cmVfbmV3X3ZhbGlzdCAoY29uc3QgZ2NoYXIgKiBuYW1lLAorICAgIGNvbnN0IGdjaGFyICogZmlyc3RmaWVsZCwgdmFfbGlzdCB2YXJhcmdzKQoreworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX2VtcHR5X25ldyAobmFtZSk7CisKKyAgaWYgKHN0cnVjdHVyZSkKKyAgICBnc3Rfc3RydWN0dXJlX3NldF92YWxpc3QgKHN0cnVjdHVyZSwgZmlyc3RmaWVsZCwgdmFyYXJncyk7CisKKyAgcmV0dXJuIHN0cnVjdHVyZTsKK30KKworLyoqCisgKiBnc3Rfc3RydWN0dXJlX3NldF9wYXJlbnRfcmVmY291bnQ6CisgKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKKyAqIEByZWZjb3VudDogKGluKTogYSBwb2ludGVyIHRvIHRoZSBwYXJlbnQncyByZWZjb3VudAorICoKKyAqIFNldHMgdGhlIHBhcmVudF9yZWZjb3VudCBmaWVsZCBvZiAjR3N0U3RydWN0dXJlLiBUaGlzIGZpZWxkIGlzIHVzZWQgdG8KKyAqIGRldGVybWluZSB3aGV0aGVyIGEgc3RydWN0dXJlIGlzIG11dGFibGUgb3Igbm90LiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlCisgKiBjYWxsZWQgYnkgY29kZSBpbXBsZW1lbnRpbmcgcGFyZW50IG9iamVjdHMgb2YgI0dzdFN0cnVjdHVyZSwgYXMgZGVzY3JpYmVkIGluCisgKiB0aGUgTVQgUmVmY291bnRpbmcgc2VjdGlvbiBvZiB0aGUgZGVzaWduIGRvY3VtZW50cy4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgcGFyZW50IHJlZmNvdW50IGNvdWxkIGJlIHNldC4KKyAqLworZ2Jvb2xlYW4KK2dzdF9zdHJ1Y3R1cmVfc2V0X3BhcmVudF9yZWZjb3VudCAoR3N0U3RydWN0dXJlICogc3RydWN0dXJlLCBnaW50ICogcmVmY291bnQpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCwgRkFMU0UpOworCisgIC8qIGlmIHdlIGhhdmUgYSBwYXJlbnRfcmVmY291bnQgYWxyZWFkeSwgd2UgY2FuIG9ubHkgY2xlYXIKKyAgICogaWYgd2l0aCBhIE5VTEwgcmVmY291bnQgKi8KKyAgaWYgKEdTVF9TVFJVQ1RVUkVfUkVGQ09VTlQgKHN0cnVjdHVyZSkpIHsKKyAgICBpZiAocmVmY291bnQgIT0gTlVMTCkgeworICAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHJlZmNvdW50ID09IE5VTEwsIEZBTFNFKTsKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgaWYgKHJlZmNvdW50ID09IE5VTEwpIHsKKyAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZWZjb3VudCAhPSBOVUxMLCBGQUxTRSk7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICB9CisKKyAgR1NUX1NUUlVDVFVSRV9SRUZDT1VOVCAoc3RydWN0dXJlKSA9IHJlZmNvdW50OworCisgIHJldHVybiBUUlVFOworfQorCisvKioKKyAqIGdzdF9zdHJ1Y3R1cmVfY29weToKKyAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZSB0byBkdXBsaWNhdGUKKyAqCisgKiBEdXBsaWNhdGVzIGEgI0dzdFN0cnVjdHVyZSBhbmQgYWxsIGl0cyBmaWVsZHMgYW5kIHZhbHVlcy4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnc3Rfc3RydWN0dXJlX2ZyZWUKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IGEgbmV3ICNHc3RTdHJ1Y3R1cmUuCisgKi8KK0dzdFN0cnVjdHVyZSAqCitnc3Rfc3RydWN0dXJlX2NvcHkgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSkKK3sKKyAgR3N0U3RydWN0dXJlICpuZXdfc3RydWN0dXJlOworICBHc3RTdHJ1Y3R1cmVGaWVsZCAqZmllbGQ7CisgIGd1aW50IGksIGxlbjsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwsIE5VTEwpOworCisgIGxlbiA9IEdTVF9TVFJVQ1RVUkVfRklFTERTIChzdHJ1Y3R1cmUpLT5sZW47CisgIG5ld19zdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX2lkX2VtcHR5X25ld193aXRoX3NpemUgKHN0cnVjdHVyZS0+bmFtZSwgbGVuKTsKKworICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICBHc3RTdHJ1Y3R1cmVGaWVsZCBuZXdfZmllbGQgPSB7IDAgfTsKKworICAgIGZpZWxkID0gR1NUX1NUUlVDVFVSRV9GSUVMRCAoc3RydWN0dXJlLCBpKTsKKworICAgIG5ld19maWVsZC5uYW1lID0gZmllbGQtPm5hbWU7CisgICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKCZuZXdfZmllbGQudmFsdWUsICZmaWVsZC0+dmFsdWUpOworICAgIGdfYXJyYXlfYXBwZW5kX3ZhbCAoR1NUX1NUUlVDVFVSRV9GSUVMRFMgKG5ld19zdHJ1Y3R1cmUpLCBuZXdfZmllbGQpOworICB9CisKKyAgcmV0dXJuIG5ld19zdHJ1Y3R1cmU7Cit9CisKKy8qKgorICogZ3N0X3N0cnVjdHVyZV9mcmVlOgorICogQHN0cnVjdHVyZTogKGluKSAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0U3RydWN0dXJlIHRvIGZyZWUKKyAqCisgKiBGcmVlcyBhICNHc3RTdHJ1Y3R1cmUgYW5kIGFsbCBpdHMgZmllbGRzIGFuZCB2YWx1ZXMuIFRoZSBzdHJ1Y3R1cmUgbXVzdCBub3QKKyAqIGhhdmUgYSBwYXJlbnQgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqLwordm9pZAorZ3N0X3N0cnVjdHVyZV9mcmVlIChHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUpCit7CisgIEdzdFN0cnVjdHVyZUZpZWxkICpmaWVsZDsKKyAgZ3VpbnQgaSwgbGVuOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1NUUlVDVFVSRV9SRUZDT1VOVCAoc3RydWN0dXJlKSA9PSBOVUxMKTsKKworICBsZW4gPSBHU1RfU1RSVUNUVVJFX0ZJRUxEUyAoc3RydWN0dXJlKS0+bGVuOworICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICBmaWVsZCA9IEdTVF9TVFJVQ1RVUkVfRklFTEQgKHN0cnVjdHVyZSwgaSk7CisKKyAgICBpZiAoR19JU19WQUxVRSAoJmZpZWxkLT52YWx1ZSkpIHsKKyAgICAgIGdfdmFsdWVfdW5zZXQgKCZmaWVsZC0+dmFsdWUpOworICAgIH0KKyAgfQorICBnX2FycmF5X2ZyZWUgKEdTVF9TVFJVQ1RVUkVfRklFTERTIChzdHJ1Y3R1cmUpLCBUUlVFKTsKKyNpZmRlZiBVU0VfUE9JU09OSU5HCisgIG1lbXNldCAoc3RydWN0dXJlLCAweGZmLCBzaXplb2YgKEdzdFN0cnVjdHVyZSkpOworI2VuZGlmCisgIGdfc2xpY2VfZnJlZTEgKHNpemVvZiAoR3N0U3RydWN0dXJlSW1wbCksIHN0cnVjdHVyZSk7Cit9CisKKy8qKgorICogZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZToKKyAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQorICoKKyAqIEdldCB0aGUgbmFtZSBvZiBAc3RydWN0dXJlIGFzIGEgc3RyaW5nLgorICoKKyAqIFJldHVybnM6IHRoZSBuYW1lIG9mIHRoZSBzdHJ1Y3R1cmUuCisgKi8KK2NvbnN0IGdjaGFyICoKK2dzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMLCBOVUxMKTsKKworICByZXR1cm4gZ19xdWFya190b19zdHJpbmcgKHN0cnVjdHVyZS0+bmFtZSk7Cit9CisKKy8qKgorICogZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZToKKyAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQorICogQG5hbWU6IHN0cnVjdHVyZSBuYW1lIHRvIGNoZWNrIGZvcgorICoKKyAqIENoZWNrcyBpZiB0aGUgc3RydWN0dXJlIGhhcyB0aGUgZ2l2ZW4gbmFtZQorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgQG5hbWUgbWF0Y2hlcyB0aGUgbmFtZSBvZiB0aGUgc3RydWN0dXJlLgorICovCitnYm9vbGVhbgorZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAoY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlLCBjb25zdCBnY2hhciAqIG5hbWUpCit7CisgIGNvbnN0IGdjaGFyICpzdHJ1Y3R1cmVfbmFtZTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG5hbWUgIT0gTlVMTCwgRkFMU0UpOworCisgIC8qIGdldHRpbmcgdGhlIHN0cmluZyBpcyBjaGVhcCBhbmQgY29tcGFyaW5nIHNob3J0IHN0cmluZ3MgaXMgdG9vCisgICAqIHNob3VsZCBiZSBmYXN0ZXIgdGhhbiBnZXR0aW5nIHRoZSBxdWFyayBmb3IgbmFtZSBhbmQgY29tcGFyaW5nIHRoZSBxdWFya3MKKyAgICovCisgIHN0cnVjdHVyZV9uYW1lID0gZ19xdWFya190b19zdHJpbmcgKHN0cnVjdHVyZS0+bmFtZSk7CisKKyAgcmV0dXJuIChzdHJ1Y3R1cmVfbmFtZSAmJiBzdHJjbXAgKHN0cnVjdHVyZV9uYW1lLCBuYW1lKSA9PSAwKTsKK30KKworLyoqCisgKiBnc3Rfc3RydWN0dXJlX2dldF9uYW1lX2lkOgorICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCisgKgorICogR2V0IHRoZSBuYW1lIG9mIEBzdHJ1Y3R1cmUgYXMgYSBHUXVhcmsuCisgKgorICogUmV0dXJuczogdGhlIHF1YXJrIHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgc3RydWN0dXJlLgorICovCitHUXVhcmsKK2dzdF9zdHJ1Y3R1cmVfZ2V0X25hbWVfaWQgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMLCAwKTsKKworICByZXR1cm4gc3RydWN0dXJlLT5uYW1lOworfQorCisvKioKKyAqIGdzdF9zdHJ1Y3R1cmVfc2V0X25hbWU6CisgKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKKyAqIEBuYW1lOiB0aGUgbmV3IG5hbWUgb2YgdGhlIHN0cnVjdHVyZQorICoKKyAqIFNldHMgdGhlIG5hbWUgb2YgdGhlIHN0cnVjdHVyZSB0byB0aGUgZ2l2ZW4gQG5hbWUuICBUaGUgc3RyaW5nCisgKiBwcm92aWRlZCBpcyBjb3BpZWQgYmVmb3JlIGJlaW5nIHVzZWQuIEl0IG11c3Qgbm90IGJlIGVtcHR5LCBzdGFydCB3aXRoIGEKKyAqIGxldHRlciBhbmQgY2FuIGJlIGZvbGxvd2VkIGJ5IGxldHRlcnMsIG51bWJlcnMgYW5kIGFueSBvZiAiLy1fLjoiLgorICovCit2b2lkCitnc3Rfc3RydWN0dXJlX3NldF9uYW1lIChHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsIGNvbnN0IGdjaGFyICogbmFtZSkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsIChJU19NVVRBQkxFIChzdHJ1Y3R1cmUpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X3N0cnVjdHVyZV92YWxpZGF0ZV9uYW1lIChuYW1lKSk7CisKKyAgc3RydWN0dXJlLT5uYW1lID0gZ19xdWFya19mcm9tX3N0cmluZyAobmFtZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsdWVfaW50ZXJuYWwgKEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwgR1F1YXJrIGZpZWxkLAorICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQoreworICBHc3RTdHJ1Y3R1cmVGaWVsZCBnc2ZpZWxkID0geyAwLCB7MCx9IH07CisKKyAgZ3NmaWVsZC5uYW1lID0gZmllbGQ7CisgIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5ICgmZ3NmaWVsZC52YWx1ZSwgdmFsdWUpOworCisgIGdzdF9zdHJ1Y3R1cmVfc2V0X2ZpZWxkIChzdHJ1Y3R1cmUsICZnc2ZpZWxkKTsKK30KKworLyoqCisgKiBnc3Rfc3RydWN0dXJlX2lkX3NldF92YWx1ZToKKyAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQorICogQGZpZWxkOiBhICNHUXVhcmsgcmVwcmVzZW50aW5nIGEgZmllbGQKKyAqIEB2YWx1ZTogdGhlIG5ldyB2YWx1ZSBvZiB0aGUgZmllbGQKKyAqCisgKiBTZXRzIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBHUXVhcmsgQGZpZWxkIHRvIEB2YWx1ZS4gIElmIHRoZSBmaWVsZAorICogZG9lcyBub3QgZXhpc3QsIGl0IGlzIGNyZWF0ZWQuICBJZiB0aGUgZmllbGQgZXhpc3RzLCB0aGUgcHJldmlvdXMKKyAqIHZhbHVlIGlzIHJlcGxhY2VkIGFuZCBmcmVlZC4KKyAqLwordm9pZAorZ3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsdWUgKEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwKKyAgICBHUXVhcmsgZmllbGQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQoreworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR19JU19WQUxVRSAodmFsdWUpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoSVNfTVVUQUJMRSAoc3RydWN0dXJlKSk7CisKKyAgZ3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsdWVfaW50ZXJuYWwgKHN0cnVjdHVyZSwgZmllbGQsIHZhbHVlKTsKK30KKworLyoqCisgKiBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZToKKyAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQorICogQGZpZWxkbmFtZTogdGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIHNldAorICogQHZhbHVlOiB0aGUgbmV3IHZhbHVlIG9mIHRoZSBmaWVsZAorICoKKyAqIFNldHMgdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUgQGZpZWxkIHRvIEB2YWx1ZS4gIElmIHRoZSBmaWVsZAorICogZG9lcyBub3QgZXhpc3QsIGl0IGlzIGNyZWF0ZWQuICBJZiB0aGUgZmllbGQgZXhpc3RzLCB0aGUgcHJldmlvdXMKKyAqIHZhbHVlIGlzIHJlcGxhY2VkIGFuZCBmcmVlZC4KKyAqLwordm9pZAorZ3N0X3N0cnVjdHVyZV9zZXRfdmFsdWUgKEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwKKyAgICBjb25zdCBnY2hhciAqIGZpZWxkbmFtZSwgY29uc3QgR1ZhbHVlICogdmFsdWUpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoZmllbGRuYW1lICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsIChHX0lTX1ZBTFVFICh2YWx1ZSkpOworICBnX3JldHVybl9pZl9mYWlsIChJU19NVVRBQkxFIChzdHJ1Y3R1cmUpKTsKKworICBnc3Rfc3RydWN0dXJlX2lkX3NldF92YWx1ZV9pbnRlcm5hbCAoc3RydWN0dXJlLAorICAgICAgZ19xdWFya19mcm9tX3N0cmluZyAoZmllbGRuYW1lKSwgdmFsdWUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2dzdF9zdHJ1Y3R1cmVfaWRfdGFrZV92YWx1ZV9pbnRlcm5hbCAoR3N0U3RydWN0dXJlICogc3RydWN0dXJlLCBHUXVhcmsgZmllbGQsCisgICAgR1ZhbHVlICogdmFsdWUpCit7CisgIEdzdFN0cnVjdHVyZUZpZWxkIGdzZmllbGQgPSB7IDAsIHswLH0gfTsKKworICBnc2ZpZWxkLm5hbWUgPSBmaWVsZDsKKyAgZ3NmaWVsZC52YWx1ZSA9ICp2YWx1ZTsKKworICBnc3Rfc3RydWN0dXJlX3NldF9maWVsZCAoc3RydWN0dXJlLCAmZ3NmaWVsZCk7CisKKyAgLyogd2UgdG9vayBvd25lcnNoaXAgKi8KKyNpZmRlZiBVU0VfUE9JU09OSU5HCisgIG1lbXNldCAodmFsdWUsIDAsIHNpemVvZiAoR1ZhbHVlKSk7CisjZWxzZQorICB2YWx1ZS0+Z190eXBlID0gR19UWVBFX0lOVkFMSUQ7CisjZW5kaWYKK30KKworLyoqCisgKiBnc3Rfc3RydWN0dXJlX2lkX3Rha2VfdmFsdWU6CisgKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKKyAqIEBmaWVsZDogYSAjR1F1YXJrIHJlcHJlc2VudGluZyBhIGZpZWxkCisgKiBAdmFsdWU6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ldyB2YWx1ZSBvZiB0aGUgZmllbGQKKyAqCisgKiBTZXRzIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBHUXVhcmsgQGZpZWxkIHRvIEB2YWx1ZS4gIElmIHRoZSBmaWVsZAorICogZG9lcyBub3QgZXhpc3QsIGl0IGlzIGNyZWF0ZWQuICBJZiB0aGUgZmllbGQgZXhpc3RzLCB0aGUgcHJldmlvdXMKKyAqIHZhbHVlIGlzIHJlcGxhY2VkIGFuZCBmcmVlZC4KKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCit2b2lkCitnc3Rfc3RydWN0dXJlX2lkX3Rha2VfdmFsdWUgKEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwgR1F1YXJrIGZpZWxkLAorICAgIEdWYWx1ZSAqIHZhbHVlKQoreworICBnX3JldHVybl9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHZhbHVlKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKElTX01VVEFCTEUgKHN0cnVjdHVyZSkpOworCisgIGdzdF9zdHJ1Y3R1cmVfaWRfdGFrZV92YWx1ZV9pbnRlcm5hbCAoc3RydWN0dXJlLCBmaWVsZCwgdmFsdWUpOworfQorCisvKioKKyAqIGdzdF9zdHJ1Y3R1cmVfdGFrZV92YWx1ZToKKyAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQorICogQGZpZWxkbmFtZTogdGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIHNldAorICogQHZhbHVlOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXcgdmFsdWUgb2YgdGhlIGZpZWxkCisgKgorICogU2V0cyB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBAZmllbGQgdG8gQHZhbHVlLiAgSWYgdGhlIGZpZWxkCisgKiBkb2VzIG5vdCBleGlzdCwgaXQgaXMgY3JlYXRlZC4gIElmIHRoZSBmaWVsZCBleGlzdHMsIHRoZSBwcmV2aW91cworICogdmFsdWUgaXMgcmVwbGFjZWQgYW5kIGZyZWVkLiBUaGUgZnVuY3Rpb24gd2lsbCB0YWtlIG93bmVyc2hpcCBvZiBAdmFsdWUuCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLwordm9pZAorZ3N0X3N0cnVjdHVyZV90YWtlX3ZhbHVlIChHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsIGNvbnN0IGdjaGFyICogZmllbGRuYW1lLAorICAgIEdWYWx1ZSAqIHZhbHVlKQoreworICBnX3JldHVybl9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKGZpZWxkbmFtZSAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR19JU19WQUxVRSAodmFsdWUpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoSVNfTVVUQUJMRSAoc3RydWN0dXJlKSk7CisKKyAgZ3N0X3N0cnVjdHVyZV9pZF90YWtlX3ZhbHVlX2ludGVybmFsIChzdHJ1Y3R1cmUsCisgICAgICBnX3F1YXJrX2Zyb21fc3RyaW5nIChmaWVsZG5hbWUpLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3Rfc3RydWN0dXJlX3NldF92YWxpc3RfaW50ZXJuYWwgKEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwKKyAgICBjb25zdCBnY2hhciAqIGZpZWxkbmFtZSwgdmFfbGlzdCB2YXJhcmdzKQoreworICBnY2hhciAqZXJyID0gTlVMTDsKKyAgR1R5cGUgdHlwZTsKKworICB3aGlsZSAoZmllbGRuYW1lKSB7CisgICAgR3N0U3RydWN0dXJlRmllbGQgZmllbGQgPSB7IDAgfTsKKworICAgIGZpZWxkLm5hbWUgPSBnX3F1YXJrX2Zyb21fc3RyaW5nIChmaWVsZG5hbWUpOworCisgICAgdHlwZSA9IHZhX2FyZyAodmFyYXJncywgR1R5cGUpOworCisgICAgaWYgKEdfVU5MSUtFTFkgKHR5cGUgPT0gR19UWVBFX0RBVEUpKSB7CisgICAgICBnX3dhcm5pbmcgKCJEb24ndCB1c2UgR19UWVBFX0RBVEUsIHVzZSBHU1RfVFlQRV9EQVRFIGluc3RlYWRcbiIpOworICAgICAgdHlwZSA9IEdTVF9UWVBFX0RBVEU7CisgICAgfQorICAgIEdfVkFMVUVfQ09MTEVDVF9JTklUICgmZmllbGQudmFsdWUsIHR5cGUsIHZhcmFyZ3MsIDAsICZlcnIpOworICAgIGlmIChHX1VOTElLRUxZIChlcnIpKSB7CisgICAgICBnX2NyaXRpY2FsICgiJXMiLCBlcnIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBnc3Rfc3RydWN0dXJlX3NldF9maWVsZCAoc3RydWN0dXJlLCAmZmllbGQpOworCisgICAgZmllbGRuYW1lID0gdmFfYXJnICh2YXJhcmdzLCBnY2hhciAqKTsKKyAgfQorfQorCisvKioKKyAqIGdzdF9zdHJ1Y3R1cmVfc2V0OgorICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCisgKiBAZmllbGRuYW1lOiB0aGUgbmFtZSBvZiB0aGUgZmllbGQgdG8gc2V0CisgKiBALi4uOiB2YXJpYWJsZSBhcmd1bWVudHMKKyAqCisgKiBQYXJzZXMgdGhlIHZhcmlhYmxlIGFyZ3VtZW50cyBhbmQgc2V0cyBmaWVsZHMgYWNjb3JkaW5nbHkuCisgKiBWYXJpYWJsZSBhcmd1bWVudHMgc2hvdWxkIGJlIGluIHRoZSBmb3JtIGZpZWxkIG5hbWUsIGZpZWxkIHR5cGUKKyAqIChhcyBhIEdUeXBlKSwgdmFsdWUocykuICBUaGUgbGFzdCB2YXJpYWJsZSBhcmd1bWVudCBzaG91bGQgYmUgTlVMTC4KKyAqLwordm9pZAorZ3N0X3N0cnVjdHVyZV9zZXQgKEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwgY29uc3QgZ2NoYXIgKiBmaWVsZCwgLi4uKQoreworICB2YV9saXN0IHZhcmFyZ3M7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsIChJU19NVVRBQkxFIChzdHJ1Y3R1cmUpIHx8IGZpZWxkID09IE5VTEwpOworCisgIHZhX3N0YXJ0ICh2YXJhcmdzLCBmaWVsZCk7CisgIGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbGlzdF9pbnRlcm5hbCAoc3RydWN0dXJlLCBmaWVsZCwgdmFyYXJncyk7CisgIHZhX2VuZCAodmFyYXJncyk7Cit9CisKKy8qKgorICogZ3N0X3N0cnVjdHVyZV9zZXRfdmFsaXN0OgorICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCisgKiBAZmllbGRuYW1lOiB0aGUgbmFtZSBvZiB0aGUgZmllbGQgdG8gc2V0CisgKiBAdmFyYXJnczogdmFyaWFibGUgYXJndW1lbnRzCisgKgorICogdmFfbGlzdCBmb3JtIG9mIGdzdF9zdHJ1Y3R1cmVfc2V0KCkuCisgKi8KK3ZvaWQKK2dzdF9zdHJ1Y3R1cmVfc2V0X3ZhbGlzdCAoR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAorICAgIGNvbnN0IGdjaGFyICogZmllbGRuYW1lLCB2YV9saXN0IHZhcmFyZ3MpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoSVNfTVVUQUJMRSAoc3RydWN0dXJlKSk7CisKKyAgZ3N0X3N0cnVjdHVyZV9zZXRfdmFsaXN0X2ludGVybmFsIChzdHJ1Y3R1cmUsIGZpZWxkbmFtZSwgdmFyYXJncyk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3Rfc3RydWN0dXJlX2lkX3NldF92YWxpc3RfaW50ZXJuYWwgKEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwKKyAgICBHUXVhcmsgZmllbGRuYW1lLCB2YV9saXN0IHZhcmFyZ3MpCit7CisgIGdjaGFyICplcnIgPSBOVUxMOworICBHVHlwZSB0eXBlOworCisgIHdoaWxlIChmaWVsZG5hbWUpIHsKKyAgICBHc3RTdHJ1Y3R1cmVGaWVsZCBmaWVsZCA9IHsgMCB9OworCisgICAgZmllbGQubmFtZSA9IGZpZWxkbmFtZTsKKworICAgIHR5cGUgPSB2YV9hcmcgKHZhcmFyZ3MsIEdUeXBlKTsKKworICAgIGlmIChHX1VOTElLRUxZICh0eXBlID09IEdfVFlQRV9EQVRFKSkgeworICAgICAgZ193YXJuaW5nICgiRG9uJ3QgdXNlIEdfVFlQRV9EQVRFLCB1c2UgR1NUX1RZUEVfREFURSBpbnN0ZWFkXG4iKTsKKyAgICAgIHR5cGUgPSBHU1RfVFlQRV9EQVRFOworICAgIH0KKyNpZm5kZWYgR19WQUxVRV9DT0xMRUNUX0lOSVQKKyAgICBnX3ZhbHVlX2luaXQgKCZmaWVsZC52YWx1ZSwgdHlwZSk7CisgICAgR19WQUxVRV9DT0xMRUNUICgmZmllbGQudmFsdWUsIHZhcmFyZ3MsIDAsICZlcnIpOworI2Vsc2UKKyAgICBHX1ZBTFVFX0NPTExFQ1RfSU5JVCAoJmZpZWxkLnZhbHVlLCB0eXBlLCB2YXJhcmdzLCAwLCAmZXJyKTsKKyNlbmRpZgorICAgIGlmIChHX1VOTElLRUxZIChlcnIpKSB7CisgICAgICBnX2NyaXRpY2FsICgiJXMiLCBlcnIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBnc3Rfc3RydWN0dXJlX3NldF9maWVsZCAoc3RydWN0dXJlLCAmZmllbGQpOworCisgICAgZmllbGRuYW1lID0gdmFfYXJnICh2YXJhcmdzLCBHUXVhcmspOworICB9Cit9CisKKy8qKgorICogZ3N0X3N0cnVjdHVyZV9pZF9zZXQ6CisgKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKKyAqIEBmaWVsZG5hbWU6IHRoZSBHUXVhcmsgZm9yIHRoZSBuYW1lIG9mIHRoZSBmaWVsZCB0byBzZXQKKyAqIEAuLi46IHZhcmlhYmxlIGFyZ3VtZW50cworICoKKyAqIElkZW50aWNhbCB0byBnc3Rfc3RydWN0dXJlX3NldCwgZXhjZXB0IHRoYXQgZmllbGQgbmFtZXMgYXJlCisgKiBwYXNzZWQgdXNpbmcgdGhlIEdRdWFyayBmb3IgdGhlIGZpZWxkIG5hbWUuIFRoaXMgYWxsb3dzIG1vcmUgZWZmaWNpZW50CisgKiBzZXR0aW5nIG9mIHRoZSBzdHJ1Y3R1cmUgaWYgdGhlIGNhbGxlciBhbHJlYWR5IGtub3dzIHRoZSBhc3NvY2lhdGVkCisgKiBxdWFyayB2YWx1ZXMuCisgKiBUaGUgbGFzdCB2YXJpYWJsZSBhcmd1bWVudCBtdXN0IGJlIE5VTEwuCisgKgorICogU2luY2U6IDAuMTAuMTAKKyAqLwordm9pZAorZ3N0X3N0cnVjdHVyZV9pZF9zZXQgKEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwgR1F1YXJrIGZpZWxkLCAuLi4pCit7CisgIHZhX2xpc3QgdmFyYXJnczsKKworICBnX3JldHVybl9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCk7CisKKyAgdmFfc3RhcnQgKHZhcmFyZ3MsIGZpZWxkKTsKKyAgZ3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsaXN0X2ludGVybmFsIChzdHJ1Y3R1cmUsIGZpZWxkLCB2YXJhcmdzKTsKKyAgdmFfZW5kICh2YXJhcmdzKTsKK30KKworLyoqCisgKiBnc3Rfc3RydWN0dXJlX2lkX3NldF92YWxpc3Q6CisgKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKKyAqIEBmaWVsZG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBmaWVsZCB0byBzZXQKKyAqIEB2YXJhcmdzOiB2YXJpYWJsZSBhcmd1bWVudHMKKyAqCisgKiB2YV9saXN0IGZvcm0gb2YgZ3N0X3N0cnVjdHVyZV9pZF9zZXQoKS4KKyAqCisgKiBTaW5jZTogMC4xMC4xMAorICovCit2b2lkCitnc3Rfc3RydWN0dXJlX2lkX3NldF92YWxpc3QgKEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwKKyAgICBHUXVhcmsgZmllbGRuYW1lLCB2YV9saXN0IHZhcmFyZ3MpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoSVNfTVVUQUJMRSAoc3RydWN0dXJlKSk7CisKKyAgZ3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsaXN0X2ludGVybmFsIChzdHJ1Y3R1cmUsIGZpZWxkbmFtZSwgdmFyYXJncyk7Cit9CisKKy8qKgorICogZ3N0X3N0cnVjdHVyZV9pZF9uZXc6CisgKiBAbmFtZV9xdWFyazogbmFtZSBvZiBuZXcgc3RydWN0dXJlCisgKiBAZmllbGRfcXVhcms6IHRoZSBHUXVhcmsgZm9yIHRoZSBuYW1lIG9mIHRoZSBmaWVsZCB0byBzZXQKKyAqIEAuLi46IHZhcmlhYmxlIGFyZ3VtZW50cworICoKKyAqIENyZWF0ZXMgYSBuZXcgI0dzdFN0cnVjdHVyZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGFzIGEgR1F1YXJrLCBmb2xsb3dlZCBieQorICogZmllbGRuYW1lIHF1YXJrLCBHVHlwZSwgYXJndW1lbnQocykgInRyaXBsZXRzIiBpbiB0aGUgc2FtZSBmb3JtYXQgYXMKKyAqIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0KCkuIEJhc2ljYWxseSBhIGNvbnZlbmllbmNlIHdyYXBwZXIgYXJvdW5kCisgKiBnc3Rfc3RydWN0dXJlX2lkX2VtcHR5X25ldygpIGFuZCBnc3Rfc3RydWN0dXJlX2lkX3NldCgpLgorICoKKyAqIFRoZSBsYXN0IHZhcmlhYmxlIGFyZ3VtZW50IG11c3QgYmUgTlVMTCAob3IgMCkuCisgKgorICogRnJlZS1mdW5jdGlvbjogZ3N0X3N0cnVjdHVyZV9mcmVlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0U3RydWN0dXJlCisgKgorICogU2luY2U6IDAuMTAuMjQKKyAqLworR3N0U3RydWN0dXJlICoKK2dzdF9zdHJ1Y3R1cmVfaWRfbmV3IChHUXVhcmsgbmFtZV9xdWFyaywgR1F1YXJrIGZpZWxkX3F1YXJrLCAuLi4pCit7CisgIEdzdFN0cnVjdHVyZSAqczsKKyAgdmFfbGlzdCB2YXJhcmdzOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYW1lX3F1YXJrICE9IDAsIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmllbGRfcXVhcmsgIT0gMCwgTlVMTCk7CisKKyAgcyA9IGdzdF9zdHJ1Y3R1cmVfaWRfZW1wdHlfbmV3IChuYW1lX3F1YXJrKTsKKworICB2YV9zdGFydCAodmFyYXJncywgZmllbGRfcXVhcmspOworICBnc3Rfc3RydWN0dXJlX2lkX3NldF92YWxpc3RfaW50ZXJuYWwgKHMsIGZpZWxkX3F1YXJrLCB2YXJhcmdzKTsKKyAgdmFfZW5kICh2YXJhcmdzKTsKKworICByZXR1cm4gczsKK30KKworI2lmIEdTVF9WRVJTSU9OX05BTk8gPT0gMQorI2RlZmluZSBHSVRfR19XQVJOSU5HIGdfd2FybmluZworI2Vsc2UKKyNkZWZpbmUgR0lUX0dfV0FSTklORyBHU1RfV0FSTklORworI2VuZGlmCisKKy8qIElmIHRoZSBzdHJ1Y3R1cmUgY3VycmVudGx5IGNvbnRhaW5zIGEgZmllbGQgd2l0aCB0aGUgc2FtZSBuYW1lLCBpdCBpcworICogcmVwbGFjZWQgd2l0aCB0aGUgcHJvdmlkZWQgZmllbGQuIE90aGVyd2lzZSwgdGhlIGZpZWxkIGlzIGFkZGVkIHRvIHRoZQorICogc3RydWN0dXJlLiBUaGUgZmllbGQncyB2YWx1ZSBpcyBub3QgZGVlcGx5IGNvcGllZC4KKyAqLworc3RhdGljIHZvaWQKK2dzdF9zdHJ1Y3R1cmVfc2V0X2ZpZWxkIChHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsIEdzdFN0cnVjdHVyZUZpZWxkICogZmllbGQpCit7CisgIEdzdFN0cnVjdHVyZUZpZWxkICpmOworICBndWludCBpLCBsZW4gPSBHU1RfU1RSVUNUVVJFX0ZJRUxEUyAoc3RydWN0dXJlKS0+bGVuOworCisgIGlmIChHX1VOTElLRUxZIChHX1ZBTFVFX0hPTERTX1NUUklORyAoJmZpZWxkLT52YWx1ZSkpKSB7CisgICAgY29uc3QgZ2NoYXIgKnM7CisKKyAgICBzID0gZ192YWx1ZV9nZXRfc3RyaW5nICgmZmllbGQtPnZhbHVlKTsKKyAgICAvKiBvbmx5IGNoZWNrIGZvciBOVUxMIHN0cmluZ3MgaW4gdGFnbGlzdHMsIGFzIHRoZXkgYXJlIGFsbG93ZWQgaW4gbWVzc2FnZQorICAgICAqIHN0cnVjdHMsIGUuZy4gZXJyb3IgbWVzc2FnZSBkZWJ1ZyBzdHJpbmdzICovCisgICAgaWYgKEdfVU5MSUtFTFkgKElTX1RBR0xJU1QgKHN0cnVjdHVyZSkgJiYgKHMgPT0gTlVMTCB8fCAqcyA9PSAnXDAnKSkpIHsKKyAgICAgIGlmIChzID09IE5VTEwpIHsKKyAgICAgICAgR0lUX0dfV0FSTklORyAoIlRyeWluZyB0byBzZXQgTlVMTCBzdHJpbmcgb24gZmllbGQgJyVzJyBvbiB0YWdsaXN0LiAiCisgICAgICAgICAgICAiUGxlYXNlIGZpbGUgYSBidWcuIiwgZ19xdWFya190b19zdHJpbmcgKGZpZWxkLT5uYW1lKSk7CisgICAgICAgIGdfdmFsdWVfdW5zZXQgKCZmaWVsZC0+dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgICB9IGVsc2UgeworICAgICAgICAvKiBlbXB0eSBzdHJpbmdzIG5ldmVyIG1ha2Ugc2Vuc2UgKi8KKyAgICAgICAgR0lUX0dfV0FSTklORyAoIlRyeWluZyB0byBzZXQgZW1wdHkgc3RyaW5nIG9uIHRhZ2xpc3QgZmllbGQgJyVzJy4gIgorICAgICAgICAgICAgIlBsZWFzZSBmaWxlIGEgYnVnLiIsIGdfcXVhcmtfdG9fc3RyaW5nIChmaWVsZC0+bmFtZSkpOworICAgICAgICBnX3ZhbHVlX3Vuc2V0ICgmZmllbGQtPnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0gZWxzZSBpZiAoR19VTkxJS0VMWSAocyAhPSBOVUxMICYmICFnX3V0ZjhfdmFsaWRhdGUgKHMsIC0xLCBOVUxMKSkpIHsKKyAgICAgIGdfd2FybmluZyAoIlRyeWluZyB0byBzZXQgc3RyaW5nIG9uICVzIGZpZWxkICclcycsIGJ1dCBzdHJpbmcgaXMgbm90ICIKKyAgICAgICAgICAidmFsaWQgVVRGLTguIFBsZWFzZSBmaWxlIGEgYnVnLiIsCisgICAgICAgICAgSVNfVEFHTElTVCAoc3RydWN0dXJlKSA/ICJ0YWdsaXN0IiA6ICJzdHJ1Y3R1cmUiLAorICAgICAgICAgIGdfcXVhcmtfdG9fc3RyaW5nIChmaWVsZC0+bmFtZSkpOworICAgICAgZ192YWx1ZV91bnNldCAoJmZpZWxkLT52YWx1ZSk7CisgICAgICByZXR1cm47CisgICAgfQorICB9IGVsc2UgaWYgKEdfVU5MSUtFTFkgKEdTVF9WQUxVRV9IT0xEU19EQVRFICgmZmllbGQtPnZhbHVlKSkpIHsKKyAgICBjb25zdCBHRGF0ZSAqZDsKKworICAgIGQgPSBnc3RfdmFsdWVfZ2V0X2RhdGUgKCZmaWVsZC0+dmFsdWUpOworICAgIC8qIG9ubHkgY2hlY2sgZm9yIE5VTEwgR0RhdGVzIGluIHRhZ2xpc3RzLCBhcyB0aGV5IG1pZ2h0IG1ha2Ugc2Vuc2UKKyAgICAgKiBpbiBvdGhlciwgZ2VuZXJpYyBzdHJ1Y3RzICovCisgICAgaWYgKEdfVU5MSUtFTFkgKChJU19UQUdMSVNUIChzdHJ1Y3R1cmUpICYmIGQgPT0gTlVMTCkpKSB7CisgICAgICBHSVRfR19XQVJOSU5HICgiVHJ5aW5nIHRvIHNldCBOVUxMIEdEYXRlIG9uIGZpZWxkICclcycgb24gdGFnbGlzdC4gIgorICAgICAgICAgICJQbGVhc2UgZmlsZSBhIGJ1Zy4iLCBnX3F1YXJrX3RvX3N0cmluZyAoZmllbGQtPm5hbWUpKTsKKyAgICAgIGdfdmFsdWVfdW5zZXQgKCZmaWVsZC0+dmFsdWUpOworICAgICAgcmV0dXJuOworICAgIH0gZWxzZSBpZiAoR19VTkxJS0VMWSAoZCAhPSBOVUxMICYmICFnX2RhdGVfdmFsaWQgKGQpKSkgeworICAgICAgZ193YXJuaW5nCisgICAgICAgICAgKCJUcnlpbmcgdG8gc2V0IGludmFsaWQgR0RhdGUgb24gJXMgZmllbGQgJyVzJy4gUGxlYXNlIGZpbGUgYSBidWcuIiwKKyAgICAgICAgICBJU19UQUdMSVNUIChzdHJ1Y3R1cmUpID8gInRhZ2xpc3QiIDogInN0cnVjdHVyZSIsCisgICAgICAgICAgZ19xdWFya190b19zdHJpbmcgKGZpZWxkLT5uYW1lKSk7CisgICAgICBnX3ZhbHVlX3Vuc2V0ICgmZmllbGQtPnZhbHVlKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIH0KKworICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICBmID0gR1NUX1NUUlVDVFVSRV9GSUVMRCAoc3RydWN0dXJlLCBpKTsKKworICAgIGlmIChHX1VOTElLRUxZIChmLT5uYW1lID09IGZpZWxkLT5uYW1lKSkgeworICAgICAgZ192YWx1ZV91bnNldCAoJmYtPnZhbHVlKTsKKyAgICAgIG1lbWNweSAoZiwgZmllbGQsIHNpemVvZiAoR3N0U3RydWN0dXJlRmllbGQpKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIH0KKworICBnX2FycmF5X2FwcGVuZF92YWwgKEdTVF9TVFJVQ1RVUkVfRklFTERTIChzdHJ1Y3R1cmUpLCAqZmllbGQpOworfQorCisvKiBJZiB0aGVyZSBpcyBubyBmaWVsZCB3aXRoIHRoZSBnaXZlbiBJRCwgTlVMTCBpcyByZXR1cm5lZC4KKyAqLworc3RhdGljIEdzdFN0cnVjdHVyZUZpZWxkICoKK2dzdF9zdHJ1Y3R1cmVfaWRfZ2V0X2ZpZWxkIChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsIEdRdWFyayBmaWVsZF9pZCkKK3sKKyAgR3N0U3RydWN0dXJlRmllbGQgKmZpZWxkOworICBndWludCBpLCBsZW47CisKKyAgbGVuID0gR1NUX1NUUlVDVFVSRV9GSUVMRFMgKHN0cnVjdHVyZSktPmxlbjsKKworICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICBmaWVsZCA9IEdTVF9TVFJVQ1RVUkVfRklFTEQgKHN0cnVjdHVyZSwgaSk7CisKKyAgICBpZiAoR19VTkxJS0VMWSAoZmllbGQtPm5hbWUgPT0gZmllbGRfaWQpKQorICAgICAgcmV0dXJuIGZpZWxkOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIElmIHRoZXJlIGlzIG5vIGZpZWxkIHdpdGggdGhlIGdpdmVuIElELCBOVUxMIGlzIHJldHVybmVkLgorICovCitzdGF0aWMgR3N0U3RydWN0dXJlRmllbGQgKgorZ3N0X3N0cnVjdHVyZV9nZXRfZmllbGQgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwKKyAgICBjb25zdCBnY2hhciAqIGZpZWxkbmFtZSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpZWxkbmFtZSAhPSBOVUxMLCBOVUxMKTsKKworICByZXR1cm4gZ3N0X3N0cnVjdHVyZV9pZF9nZXRfZmllbGQgKHN0cnVjdHVyZSwKKyAgICAgIGdfcXVhcmtfZnJvbV9zdHJpbmcgKGZpZWxkbmFtZSkpOworfQorCisvKioKKyAqIGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlOgorICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCisgKiBAZmllbGRuYW1lOiB0aGUgbmFtZSBvZiB0aGUgZmllbGQgdG8gZ2V0CisgKgorICogR2V0IHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgd2l0aCBuYW1lIEBmaWVsZG5hbWUuCisgKgorICogUmV0dXJuczogdGhlICNHVmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKyAqLworY29uc3QgR1ZhbHVlICoKK2dzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCisgICAgY29uc3QgZ2NoYXIgKiBmaWVsZG5hbWUpCit7CisgIEdzdFN0cnVjdHVyZUZpZWxkICpmaWVsZDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwsIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmllbGRuYW1lICE9IE5VTEwsIE5VTEwpOworCisgIGZpZWxkID0gZ3N0X3N0cnVjdHVyZV9nZXRfZmllbGQgKHN0cnVjdHVyZSwgZmllbGRuYW1lKTsKKyAgaWYgKGZpZWxkID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgcmV0dXJuICZmaWVsZC0+dmFsdWU7Cit9CisKKy8qKgorICogZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWU6CisgKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKKyAqIEBmaWVsZDogdGhlICNHUXVhcmsgb2YgdGhlIGZpZWxkIHRvIGdldAorICoKKyAqIEdldCB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIHdpdGggR1F1YXJrIEBmaWVsZC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgI0dWYWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lCisgKiAgICAgICAgICBpZGVudGlmaWVyLgorICovCitjb25zdCBHVmFsdWUgKgorZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwgR1F1YXJrIGZpZWxkKQoreworICBHc3RTdHJ1Y3R1cmVGaWVsZCAqZ3NmaWVsZDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwsIE5VTEwpOworCisgIGdzZmllbGQgPSBnc3Rfc3RydWN0dXJlX2lkX2dldF9maWVsZCAoc3RydWN0dXJlLCBmaWVsZCk7CisgIGlmIChnc2ZpZWxkID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgcmV0dXJuICZnc2ZpZWxkLT52YWx1ZTsKK30KKworLyoqCisgKiBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZDoKKyAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQorICogQGZpZWxkbmFtZTogdGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIHJlbW92ZQorICoKKyAqIFJlbW92ZXMgdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUuICBJZiB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4KKyAqIG5hbWUgZG9lcyBub3QgZXhpc3QsIHRoZSBzdHJ1Y3R1cmUgaXMgdW5jaGFuZ2VkLgorICovCit2b2lkCitnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCAoR3N0U3RydWN0dXJlICogc3RydWN0dXJlLCBjb25zdCBnY2hhciAqIGZpZWxkbmFtZSkKK3sKKyAgR3N0U3RydWN0dXJlRmllbGQgKmZpZWxkOworICBHUXVhcmsgaWQ7CisgIGd1aW50IGksIGxlbjsKKworICBnX3JldHVybl9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKGZpZWxkbmFtZSAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoSVNfTVVUQUJMRSAoc3RydWN0dXJlKSk7CisKKyAgaWQgPSBnX3F1YXJrX2Zyb21fc3RyaW5nIChmaWVsZG5hbWUpOworICBsZW4gPSBHU1RfU1RSVUNUVVJFX0ZJRUxEUyAoc3RydWN0dXJlKS0+bGVuOworCisgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgIGZpZWxkID0gR1NUX1NUUlVDVFVSRV9GSUVMRCAoc3RydWN0dXJlLCBpKTsKKworICAgIGlmIChmaWVsZC0+bmFtZSA9PSBpZCkgeworICAgICAgaWYgKEdfSVNfVkFMVUUgKCZmaWVsZC0+dmFsdWUpKSB7CisgICAgICAgIGdfdmFsdWVfdW5zZXQgKCZmaWVsZC0+dmFsdWUpOworICAgICAgfQorICAgICAgR1NUX1NUUlVDVFVSRV9GSUVMRFMgKHN0cnVjdHVyZSkgPQorICAgICAgICAgIGdfYXJyYXlfcmVtb3ZlX2luZGV4IChHU1RfU1RSVUNUVVJFX0ZJRUxEUyAoc3RydWN0dXJlKSwgaSk7CisgICAgICByZXR1cm47CisgICAgfQorICB9Cit9CisKKy8qKgorICogZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzOgorICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCisgKiBAZmllbGRuYW1lOiB0aGUgbmFtZSBvZiB0aGUgZmllbGQgdG8gcmVtb3ZlCisgKiBALi4uOiBOVUxMLXRlcm1pbmF0ZWQgbGlzdCBvZiBtb3JlIGZpZWxkbmFtZXMgdG8gcmVtb3ZlCisgKgorICogUmVtb3ZlcyB0aGUgZmllbGRzIHdpdGggdGhlIGdpdmVuIG5hbWVzLiBJZiBhIGZpZWxkIGRvZXMgbm90IGV4aXN0LCB0aGUKKyAqIGFyZ3VtZW50IGlzIGlnbm9yZWQuCisgKi8KK3ZvaWQKK2dzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkcyAoR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAorICAgIGNvbnN0IGdjaGFyICogZmllbGRuYW1lLCAuLi4pCit7CisgIHZhX2xpc3QgdmFyYXJnczsKKworICBnX3JldHVybl9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKGZpZWxkbmFtZSAhPSBOVUxMKTsKKyAgLyogbXV0YWJpbGl0eSBjaGVja2VkIGluIHJlbW92ZV9maWVsZCAqLworCisgIHZhX3N0YXJ0ICh2YXJhcmdzLCBmaWVsZG5hbWUpOworICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZHNfdmFsaXN0IChzdHJ1Y3R1cmUsIGZpZWxkbmFtZSwgdmFyYXJncyk7CisgIHZhX2VuZCAodmFyYXJncyk7Cit9CisKKy8qKgorICogZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzX3ZhbGlzdDoKKyAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQorICogQGZpZWxkbmFtZTogdGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIHJlbW92ZQorICogQHZhcmFyZ3M6IE5VTEwtdGVybWluYXRlZCBsaXN0IG9mIG1vcmUgZmllbGRuYW1lcyB0byByZW1vdmUKKyAqCisgKiB2YV9saXN0IGZvcm0gb2YgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzKCkuCisgKi8KK3ZvaWQKK2dzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkc192YWxpc3QgKEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwKKyAgICBjb25zdCBnY2hhciAqIGZpZWxkbmFtZSwgdmFfbGlzdCB2YXJhcmdzKQoreworICBnY2hhciAqZmllbGQgPSAoZ2NoYXIgKikgZmllbGRuYW1lOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoZmllbGRuYW1lICE9IE5VTEwpOworICAvKiBtdXRhYmlsaXR5IGNoZWNrZWQgaW4gcmVtb3ZlX2ZpZWxkICovCisKKyAgd2hpbGUgKGZpZWxkKSB7CisgICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKHN0cnVjdHVyZSwgZmllbGQpOworICAgIGZpZWxkID0gdmFfYXJnICh2YXJhcmdzLCBjaGFyICopOworICB9Cit9CisKKy8qKgorICogZ3N0X3N0cnVjdHVyZV9yZW1vdmVfYWxsX2ZpZWxkczoKKyAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQorICoKKyAqIFJlbW92ZXMgYWxsIGZpZWxkcyBpbiBhIEdzdFN0cnVjdHVyZS4KKyAqLwordm9pZAorZ3N0X3N0cnVjdHVyZV9yZW1vdmVfYWxsX2ZpZWxkcyAoR3N0U3RydWN0dXJlICogc3RydWN0dXJlKQoreworICBHc3RTdHJ1Y3R1cmVGaWVsZCAqZmllbGQ7CisgIGludCBpOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoSVNfTVVUQUJMRSAoc3RydWN0dXJlKSk7CisKKyAgZm9yIChpID0gR1NUX1NUUlVDVFVSRV9GSUVMRFMgKHN0cnVjdHVyZSktPmxlbiAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgZmllbGQgPSBHU1RfU1RSVUNUVVJFX0ZJRUxEIChzdHJ1Y3R1cmUsIGkpOworCisgICAgaWYgKEdfSVNfVkFMVUUgKCZmaWVsZC0+dmFsdWUpKSB7CisgICAgICBnX3ZhbHVlX3Vuc2V0ICgmZmllbGQtPnZhbHVlKTsKKyAgICB9CisgICAgR1NUX1NUUlVDVFVSRV9GSUVMRFMgKHN0cnVjdHVyZSkgPQorICAgICAgICBnX2FycmF5X3JlbW92ZV9pbmRleCAoR1NUX1NUUlVDVFVSRV9GSUVMRFMgKHN0cnVjdHVyZSksIGkpOworICB9Cit9CisKKy8qKgorICogZ3N0X3N0cnVjdHVyZV9nZXRfZmllbGRfdHlwZToKKyAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQorICogQGZpZWxkbmFtZTogdGhlIG5hbWUgb2YgdGhlIGZpZWxkCisgKgorICogRmluZHMgdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUsIGFuZCByZXR1cm5zIHRoZSB0eXBlIG9mIHRoZQorICogdmFsdWUgaXQgY29udGFpbnMuICBJZiB0aGUgZmllbGQgaXMgbm90IGZvdW5kLCBHX1RZUEVfSU5WQUxJRCBpcworICogcmV0dXJuZWQuCisgKgorICogUmV0dXJuczogdGhlICNHVmFsdWUgb2YgdGhlIGZpZWxkCisgKi8KK0dUeXBlCitnc3Rfc3RydWN0dXJlX2dldF9maWVsZF90eXBlIChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCisgICAgY29uc3QgZ2NoYXIgKiBmaWVsZG5hbWUpCit7CisgIEdzdFN0cnVjdHVyZUZpZWxkICpmaWVsZDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwsIEdfVFlQRV9JTlZBTElEKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpZWxkbmFtZSAhPSBOVUxMLCBHX1RZUEVfSU5WQUxJRCk7CisKKyAgZmllbGQgPSBnc3Rfc3RydWN0dXJlX2dldF9maWVsZCAoc3RydWN0dXJlLCBmaWVsZG5hbWUpOworICBpZiAoZmllbGQgPT0gTlVMTCkKKyAgICByZXR1cm4gR19UWVBFX0lOVkFMSUQ7CisKKyAgcmV0dXJuIEdfVkFMVUVfVFlQRSAoJmZpZWxkLT52YWx1ZSk7Cit9CisKKy8qKgorICogZ3N0X3N0cnVjdHVyZV9uX2ZpZWxkczoKKyAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQorICoKKyAqIEdldCB0aGUgbnVtYmVyIG9mIGZpZWxkcyBpbiB0aGUgc3RydWN0dXJlLgorICoKKyAqIFJldHVybnM6IHRoZSBudW1iZXIgb2YgZmllbGRzIGluIHRoZSBzdHJ1Y3R1cmUKKyAqLworZ2ludAorZ3N0X3N0cnVjdHVyZV9uX2ZpZWxkcyAoY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwsIDApOworCisgIHJldHVybiBHU1RfU1RSVUNUVVJFX0ZJRUxEUyAoc3RydWN0dXJlKS0+bGVuOworfQorCisvKioKKyAqIGdzdF9zdHJ1Y3R1cmVfbnRoX2ZpZWxkX25hbWU6CisgKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKKyAqIEBpbmRleDogdGhlIGluZGV4IHRvIGdldCB0aGUgbmFtZSBvZgorICoKKyAqIEdldCB0aGUgbmFtZSBvZiB0aGUgZ2l2ZW4gZmllbGQgbnVtYmVyLCBjb3VudGluZyBmcm9tIDAgb253YXJkcy4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbmFtZSBvZiB0aGUgZ2l2ZW4gZmllbGQgbnVtYmVyCisgKi8KK2NvbnN0IGdjaGFyICoKK2dzdF9zdHJ1Y3R1cmVfbnRoX2ZpZWxkX25hbWUgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwgZ3VpbnQgaW5kZXgpCit7CisgIEdzdFN0cnVjdHVyZUZpZWxkICpmaWVsZDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwsIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoaW5kZXggPCBHU1RfU1RSVUNUVVJFX0ZJRUxEUyAoc3RydWN0dXJlKS0+bGVuLCBOVUxMKTsKKworICBmaWVsZCA9IEdTVF9TVFJVQ1RVUkVfRklFTEQgKHN0cnVjdHVyZSwgaW5kZXgpOworCisgIHJldHVybiBnX3F1YXJrX3RvX3N0cmluZyAoZmllbGQtPm5hbWUpOworfQorCisvKioKKyAqIGdzdF9zdHJ1Y3R1cmVfZm9yZWFjaDoKKyAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQorICogQGZ1bmM6IChzY29wZSBjYWxsKTogYSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGZpZWxkCisgKiBAdXNlcl9kYXRhOiAoY2xvc3VyZSk6IHByaXZhdGUgZGF0YQorICoKKyAqIENhbGxzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBvbmNlIGZvciBlYWNoIGZpZWxkIGluIHRoZSAjR3N0U3RydWN0dXJlLiBUaGUKKyAqIGZ1bmN0aW9uIG11c3Qgbm90IG1vZGlmeSB0aGUgZmllbGRzLiBBbHNvIHNlZSBnc3Rfc3RydWN0dXJlX21hcF9pbl9wbGFjZSgpLgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIHN1cHBsaWVkIGZ1bmN0aW9uIHJldHVybnMgVFJVRSBGb3IgZWFjaCBvZiB0aGUgZmllbGRzLAorICogRkFMU0Ugb3RoZXJ3aXNlLgorICovCitnYm9vbGVhbgorZ3N0X3N0cnVjdHVyZV9mb3JlYWNoIChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCisgICAgR3N0U3RydWN0dXJlRm9yZWFjaEZ1bmMgZnVuYywgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBndWludCBpLCBsZW47CisgIEdzdFN0cnVjdHVyZUZpZWxkICpmaWVsZDsKKyAgZ2Jvb2xlYW4gcmV0OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZnVuYyAhPSBOVUxMLCBGQUxTRSk7CisKKyAgbGVuID0gR1NUX1NUUlVDVFVSRV9GSUVMRFMgKHN0cnVjdHVyZSktPmxlbjsKKworICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICBmaWVsZCA9IEdTVF9TVFJVQ1RVUkVfRklFTEQgKHN0cnVjdHVyZSwgaSk7CisKKyAgICByZXQgPSBmdW5jIChmaWVsZC0+bmFtZSwgJmZpZWxkLT52YWx1ZSwgdXNlcl9kYXRhKTsKKyAgICBpZiAoR19VTkxJS0VMWSAoIXJldCkpCisgICAgICByZXR1cm4gRkFMU0U7CisgIH0KKworICByZXR1cm4gVFJVRTsKK30KKworLyoqCisgKiBnc3Rfc3RydWN0dXJlX21hcF9pbl9wbGFjZToKKyAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQorICogQGZ1bmM6IChzY29wZSBjYWxsKTogYSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGZpZWxkCisgKiBAdXNlcl9kYXRhOiAoY2xvc3VyZSk6IHByaXZhdGUgZGF0YQorICoKKyAqIENhbGxzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBvbmNlIGZvciBlYWNoIGZpZWxkIGluIHRoZSAjR3N0U3RydWN0dXJlLiBJbgorICogY29udHJhc3QgdG8gZ3N0X3N0cnVjdHVyZV9mb3JlYWNoKCksIHRoZSBmdW5jdGlvbiBtYXkgbW9kaWZ5IGJ1dCBub3QgZGVsZXRlIHRoZQorICogZmllbGRzLiBUaGUgc3RydWN0dXJlIG11c3QgYmUgbXV0YWJsZS4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBzdXBwbGllZCBmdW5jdGlvbiByZXR1cm5zIFRSVUUgRm9yIGVhY2ggb2YgdGhlIGZpZWxkcywKKyAqIEZBTFNFIG90aGVyd2lzZS4KKyAqLworZ2Jvb2xlYW4KK2dzdF9zdHJ1Y3R1cmVfbWFwX2luX3BsYWNlIChHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCisgICAgR3N0U3RydWN0dXJlTWFwRnVuYyBmdW5jLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIGd1aW50IGksIGxlbjsKKyAgR3N0U3RydWN0dXJlRmllbGQgKmZpZWxkOworICBnYm9vbGVhbiByZXQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChJU19NVVRBQkxFIChzdHJ1Y3R1cmUpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmdW5jICE9IE5VTEwsIEZBTFNFKTsKKyAgbGVuID0gR1NUX1NUUlVDVFVSRV9GSUVMRFMgKHN0cnVjdHVyZSktPmxlbjsKKworICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICBmaWVsZCA9IEdTVF9TVFJVQ1RVUkVfRklFTEQgKHN0cnVjdHVyZSwgaSk7CisKKyAgICByZXQgPSBmdW5jIChmaWVsZC0+bmFtZSwgJmZpZWxkLT52YWx1ZSwgdXNlcl9kYXRhKTsKKyAgICBpZiAoIXJldCkKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgfQorCisgIHJldHVybiBUUlVFOworfQorCisvKioKKyAqIGdzdF9zdHJ1Y3R1cmVfaWRfaGFzX2ZpZWxkOgorICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCisgKiBAZmllbGQ6ICNHUXVhcmsgb2YgdGhlIGZpZWxkIG5hbWUKKyAqCisgKiBDaGVjayBpZiBAc3RydWN0dXJlIGNvbnRhaW5zIGEgZmllbGQgbmFtZWQgQGZpZWxkLgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIHN0cnVjdHVyZSBjb250YWlucyBhIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUKKyAqCisgKiBTaW5jZTogMC4xMC4yNgorICovCitnYm9vbGVhbgorZ3N0X3N0cnVjdHVyZV9pZF9oYXNfZmllbGQgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwgR1F1YXJrIGZpZWxkKQoreworICBHc3RTdHJ1Y3R1cmVGaWVsZCAqZjsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpZWxkICE9IDAsIEZBTFNFKTsKKworICBmID0gZ3N0X3N0cnVjdHVyZV9pZF9nZXRfZmllbGQgKHN0cnVjdHVyZSwgZmllbGQpOworCisgIHJldHVybiAoZiAhPSBOVUxMKTsKK30KKworLyoqCisgKiBnc3Rfc3RydWN0dXJlX2hhc19maWVsZDoKKyAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQorICogQGZpZWxkbmFtZTogdGhlIG5hbWUgb2YgYSBmaWVsZAorICoKKyAqIENoZWNrIGlmIEBzdHJ1Y3R1cmUgY29udGFpbnMgYSBmaWVsZCBuYW1lZCBAZmllbGRuYW1lLgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIHN0cnVjdHVyZSBjb250YWlucyBhIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUKKyAqLworZ2Jvb2xlYW4KK2dzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkIChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCisgICAgY29uc3QgZ2NoYXIgKiBmaWVsZG5hbWUpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmllbGRuYW1lICE9IE5VTEwsIEZBTFNFKTsKKworICByZXR1cm4gZ3N0X3N0cnVjdHVyZV9pZF9oYXNfZmllbGQgKHN0cnVjdHVyZSwKKyAgICAgIGdfcXVhcmtfZnJvbV9zdHJpbmcgKGZpZWxkbmFtZSkpOworfQorCisvKioKKyAqIGdzdF9zdHJ1Y3R1cmVfaWRfaGFzX2ZpZWxkX3R5cGVkOgorICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCisgKiBAZmllbGQ6ICNHUXVhcmsgb2YgdGhlIGZpZWxkIG5hbWUKKyAqIEB0eXBlOiB0aGUgdHlwZSBvZiBhIHZhbHVlCisgKgorICogQ2hlY2sgaWYgQHN0cnVjdHVyZSBjb250YWlucyBhIGZpZWxkIG5hbWVkIEBmaWVsZCBhbmQgd2l0aCBHVHlwZSBAdHlwZS4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBzdHJ1Y3R1cmUgY29udGFpbnMgYSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCB0eXBlCisgKgorICogU2luY2U6IDAuMTAuMjYKKyAqLworZ2Jvb2xlYW4KK2dzdF9zdHJ1Y3R1cmVfaWRfaGFzX2ZpZWxkX3R5cGVkIChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCisgICAgR1F1YXJrIGZpZWxkLCBHVHlwZSB0eXBlKQoreworICBHc3RTdHJ1Y3R1cmVGaWVsZCAqZjsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpZWxkICE9IDAsIEZBTFNFKTsKKworICBmID0gZ3N0X3N0cnVjdHVyZV9pZF9nZXRfZmllbGQgKHN0cnVjdHVyZSwgZmllbGQpOworICBpZiAoZiA9PSBOVUxMKQorICAgIHJldHVybiBGQUxTRTsKKworICByZXR1cm4gKEdfVkFMVUVfVFlQRSAoJmYtPnZhbHVlKSA9PSB0eXBlKTsKK30KKworLyoqCisgKiBnc3Rfc3RydWN0dXJlX2hhc19maWVsZF90eXBlZDoKKyAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQorICogQGZpZWxkbmFtZTogdGhlIG5hbWUgb2YgYSBmaWVsZAorICogQHR5cGU6IHRoZSB0eXBlIG9mIGEgdmFsdWUKKyAqCisgKiBDaGVjayBpZiBAc3RydWN0dXJlIGNvbnRhaW5zIGEgZmllbGQgbmFtZWQgQGZpZWxkbmFtZSBhbmQgd2l0aCBHVHlwZSBAdHlwZS4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBzdHJ1Y3R1cmUgY29udGFpbnMgYSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCB0eXBlCisgKi8KK2dib29sZWFuCitnc3Rfc3RydWN0dXJlX2hhc19maWVsZF90eXBlZCAoY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAorICAgIGNvbnN0IGdjaGFyICogZmllbGRuYW1lLCBHVHlwZSB0eXBlKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpZWxkbmFtZSAhPSBOVUxMLCBGQUxTRSk7CisKKyAgcmV0dXJuIGdzdF9zdHJ1Y3R1cmVfaWRfaGFzX2ZpZWxkX3R5cGVkIChzdHJ1Y3R1cmUsCisgICAgICBnX3F1YXJrX2Zyb21fc3RyaW5nIChmaWVsZG5hbWUpLCB0eXBlKTsKK30KKworLyogdXRpbGl0eSBmdW5jdGlvbnMgKi8KKworLyoqCisgKiBnc3Rfc3RydWN0dXJlX2dldF9ib29sZWFuOgorICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCisgKiBAZmllbGRuYW1lOiB0aGUgbmFtZSBvZiBhIGZpZWxkCisgKiBAdmFsdWU6IChvdXQpOiBhIHBvaW50ZXIgdG8gYSAjZ2Jvb2xlYW4gdG8gc2V0CisgKgorICogU2V0cyB0aGUgYm9vbGVhbiBwb2ludGVkIHRvIGJ5IEB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSB2YWx1ZSBvZiB0aGUKKyAqIGdpdmVuIGZpZWxkLiAgQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZSB0aGUgZmllbGQgZXhpc3RzCisgKiBhbmQgaGFzIHRoZSBjb3JyZWN0IHR5cGUuCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgdmFsdWUgY291bGQgYmUgc2V0IGNvcnJlY3RseS4gSWYgdGhlcmUgd2FzIG5vIGZpZWxkCisgKiB3aXRoIEBmaWVsZG5hbWUgb3IgdGhlIGV4aXN0aW5nIGZpZWxkIGRpZCBub3QgY29udGFpbiBhIGJvb2xlYW4sIHRoaXMKKyAqIGZ1bmN0aW9uIHJldHVybnMgRkFMU0UuCisgKi8KK2dib29sZWFuCitnc3Rfc3RydWN0dXJlX2dldF9ib29sZWFuIChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCisgICAgY29uc3QgZ2NoYXIgKiBmaWVsZG5hbWUsIGdib29sZWFuICogdmFsdWUpCit7CisgIEdzdFN0cnVjdHVyZUZpZWxkICpmaWVsZDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpZWxkbmFtZSAhPSBOVUxMLCBGQUxTRSk7CisKKyAgZmllbGQgPSBnc3Rfc3RydWN0dXJlX2dldF9maWVsZCAoc3RydWN0dXJlLCBmaWVsZG5hbWUpOworCisgIGlmIChmaWVsZCA9PSBOVUxMKQorICAgIHJldHVybiBGQUxTRTsKKyAgaWYgKCFHX1ZBTFVFX0hPTERTX0JPT0xFQU4gKCZmaWVsZC0+dmFsdWUpKQorICAgIHJldHVybiBGQUxTRTsKKworICAqdmFsdWUgPSBnc3RfZ192YWx1ZV9nZXRfYm9vbGVhbl91bmNoZWNrZWQgKCZmaWVsZC0+dmFsdWUpOworCisgIHJldHVybiBUUlVFOworfQorCisvKioKKyAqIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludDoKKyAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQorICogQGZpZWxkbmFtZTogdGhlIG5hbWUgb2YgYSBmaWVsZAorICogQHZhbHVlOiAob3V0KTogYSBwb2ludGVyIHRvIGFuIGludCB0byBzZXQKKyAqCisgKiBTZXRzIHRoZSBpbnQgcG9pbnRlZCB0byBieSBAdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgdmFsdWUgb2YgdGhlCisgKiBnaXZlbiBmaWVsZC4gIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgdGhlIGZpZWxkIGV4aXN0cworICogYW5kIGhhcyB0aGUgY29ycmVjdCB0eXBlLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSBzZXQgY29ycmVjdGx5LiBJZiB0aGVyZSB3YXMgbm8gZmllbGQKKyAqIHdpdGggQGZpZWxkbmFtZSBvciB0aGUgZXhpc3RpbmcgZmllbGQgZGlkIG5vdCBjb250YWluIGFuIGludCwgdGhpcyBmdW5jdGlvbgorICogcmV0dXJucyAlRkFMU0UuCisgKi8KK2dib29sZWFuCitnc3Rfc3RydWN0dXJlX2dldF9pbnQgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwKKyAgICBjb25zdCBnY2hhciAqIGZpZWxkbmFtZSwgZ2ludCAqIHZhbHVlKQoreworICBHc3RTdHJ1Y3R1cmVGaWVsZCAqZmllbGQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmaWVsZG5hbWUgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAodmFsdWUgIT0gTlVMTCwgRkFMU0UpOworCisgIGZpZWxkID0gZ3N0X3N0cnVjdHVyZV9nZXRfZmllbGQgKHN0cnVjdHVyZSwgZmllbGRuYW1lKTsKKworICBpZiAoZmllbGQgPT0gTlVMTCkKKyAgICByZXR1cm4gRkFMU0U7CisgIGlmICghR19WQUxVRV9IT0xEU19JTlQgKCZmaWVsZC0+dmFsdWUpKQorICAgIHJldHVybiBGQUxTRTsKKworICAqdmFsdWUgPSBnc3RfZ192YWx1ZV9nZXRfaW50X3VuY2hlY2tlZCAoJmZpZWxkLT52YWx1ZSk7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qKgorICogZ3N0X3N0cnVjdHVyZV9nZXRfdWludDoKKyAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQorICogQGZpZWxkbmFtZTogdGhlIG5hbWUgb2YgYSBmaWVsZAorICogQHZhbHVlOiAob3V0KTogYSBwb2ludGVyIHRvIGEgdWludCB0byBzZXQKKyAqCisgKiBTZXRzIHRoZSB1aW50IHBvaW50ZWQgdG8gYnkgQHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHZhbHVlIG9mIHRoZQorICogZ2l2ZW4gZmllbGQuICBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRoZSBmaWVsZCBleGlzdHMKKyAqIGFuZCBoYXMgdGhlIGNvcnJlY3QgdHlwZS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdmFsdWUgY291bGQgYmUgc2V0IGNvcnJlY3RseS4gSWYgdGhlcmUgd2FzIG5vIGZpZWxkCisgKiB3aXRoIEBmaWVsZG5hbWUgb3IgdGhlIGV4aXN0aW5nIGZpZWxkIGRpZCBub3QgY29udGFpbiBhIHVpbnQsIHRoaXMgZnVuY3Rpb24KKyAqIHJldHVybnMgJUZBTFNFLgorICoKKyAqIFNpbmNlOiAwLjEwLjE1CisgKi8KK2dib29sZWFuCitnc3Rfc3RydWN0dXJlX2dldF91aW50IChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCisgICAgY29uc3QgZ2NoYXIgKiBmaWVsZG5hbWUsIGd1aW50ICogdmFsdWUpCit7CisgIEdzdFN0cnVjdHVyZUZpZWxkICpmaWVsZDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpZWxkbmFtZSAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh2YWx1ZSAhPSBOVUxMLCBGQUxTRSk7CisKKyAgZmllbGQgPSBnc3Rfc3RydWN0dXJlX2dldF9maWVsZCAoc3RydWN0dXJlLCBmaWVsZG5hbWUpOworCisgIGlmIChmaWVsZCA9PSBOVUxMKQorICAgIHJldHVybiBGQUxTRTsKKyAgaWYgKCFHX1ZBTFVFX0hPTERTX1VJTlQgKCZmaWVsZC0+dmFsdWUpKQorICAgIHJldHVybiBGQUxTRTsKKworICAqdmFsdWUgPSBnc3RfZ192YWx1ZV9nZXRfdWludF91bmNoZWNrZWQgKCZmaWVsZC0+dmFsdWUpOworCisgIHJldHVybiBUUlVFOworfQorCisvKioKKyAqIGdzdF9zdHJ1Y3R1cmVfZ2V0X2RhdGU6CisgKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKKyAqIEBmaWVsZG5hbWU6IHRoZSBuYW1lIG9mIGEgZmllbGQKKyAqIEB2YWx1ZTogKG91dCBjYWxsZWUtYWxsb2NhdGVzKTogYSBwb2ludGVyIHRvIGEgI0dEYXRlIHRvIHNldAorICoKKyAqIFNldHMgdGhlIGRhdGUgcG9pbnRlZCB0byBieSBAdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgZGF0ZSBvZiB0aGUKKyAqIGdpdmVuIGZpZWxkLiAgQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZSB0aGUgZmllbGQgZXhpc3RzCisgKiBhbmQgaGFzIHRoZSBjb3JyZWN0IHR5cGUuCisgKgorICogT24gc3VjY2VzcyBAdmFsdWUgd2lsbCBwb2ludCB0byBhIG5ld2x5LWFsbG9jYXRlZCBjb3B5IG9mIHRoZSBkYXRlIHdoaWNoCisgKiBzaG91bGQgYmUgZnJlZWQgd2l0aCBnX2RhdGVfZnJlZSgpIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZCAobm90ZTogdGhpcyBpcworICogaW5jb25zaXN0ZW50IHdpdGggZS5nLiBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoKSB3aGljaCBkb2Vzbid0IHJldHVybiBhCisgKiBjb3B5IG9mIHRoZSBzdHJpbmcpLgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHNldCBjb3JyZWN0bHkuIElmIHRoZXJlIHdhcyBubyBmaWVsZAorICogd2l0aCBAZmllbGRuYW1lIG9yIHRoZSBleGlzdGluZyBmaWVsZCBkaWQgbm90IGNvbnRhaW4gYSBkYXRhLCB0aGlzIGZ1bmN0aW9uCisgKiByZXR1cm5zIEZBTFNFLgorICovCitnYm9vbGVhbgorZ3N0X3N0cnVjdHVyZV9nZXRfZGF0ZSAoY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlLCBjb25zdCBnY2hhciAqIGZpZWxkbmFtZSwKKyAgICBHRGF0ZSAqKiB2YWx1ZSkKK3sKKyAgR3N0U3RydWN0dXJlRmllbGQgKmZpZWxkOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmllbGRuYW1lICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZhbHVlICE9IE5VTEwsIEZBTFNFKTsKKworICBmaWVsZCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X2ZpZWxkIChzdHJ1Y3R1cmUsIGZpZWxkbmFtZSk7CisKKyAgaWYgKGZpZWxkID09IE5VTEwpCisgICAgcmV0dXJuIEZBTFNFOworICBpZiAoIUdTVF9WQUxVRV9IT0xEU19EQVRFICgmZmllbGQtPnZhbHVlKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgLyogRklYTUU6IDAuMTEgZ192YWx1ZV9kdXBfYm94ZWQoKSAtPiBnX3ZhbHVlX2dldF9ib3hlZCgpICovCisgICp2YWx1ZSA9IGdfdmFsdWVfZHVwX2JveGVkICgmZmllbGQtPnZhbHVlKTsKKworICByZXR1cm4gVFJVRTsKK30KKworLyoqCisgKiBnc3Rfc3RydWN0dXJlX2dldF9kYXRlX3RpbWU6CisgKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKKyAqIEBmaWVsZG5hbWU6IHRoZSBuYW1lIG9mIGEgZmllbGQKKyAqIEB2YWx1ZTogKG91dCBjYWxsZWUtYWxsb2NhdGVzKTogYSBwb2ludGVyIHRvIGEgI0dzdERhdGVUaW1lIHRvIHNldAorICoKKyAqIFNldHMgdGhlIGRhdGV0aW1lIHBvaW50ZWQgdG8gYnkgQHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRhdGV0aW1lIG9mIHRoZQorICogZ2l2ZW4gZmllbGQuIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgdGhlIGZpZWxkIGV4aXN0cworICogYW5kIGhhcyB0aGUgY29ycmVjdCB0eXBlLgorICoKKyAqIE9uIHN1Y2Nlc3MgQHZhbHVlIHdpbGwgcG9pbnQgdG8gYSByZWZlcmVuY2Ugb2YgdGhlIGRhdGV0aW1lIHdoaWNoCisgKiBzaG91bGQgYmUgdW5yZWZmZWQgd2l0aCBnc3RfZGF0ZV90aW1lX3VucmVmKCkgd2hlbiBubyBsb25nZXIgbmVlZGVkCisgKiAobm90ZTogdGhpcyBpcyBpbmNvbnNpc3RlbnQgd2l0aCBlLmcuIGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZygpCisgKiB3aGljaCBkb2Vzbid0IHJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZykuCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgdmFsdWUgY291bGQgYmUgc2V0IGNvcnJlY3RseS4gSWYgdGhlcmUgd2FzIG5vIGZpZWxkCisgKiB3aXRoIEBmaWVsZG5hbWUgb3IgdGhlIGV4aXN0aW5nIGZpZWxkIGRpZCBub3QgY29udGFpbiBhIGRhdGEsIHRoaXMgZnVuY3Rpb24KKyAqIHJldHVybnMgRkFMU0UuCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLworZ2Jvb2xlYW4KK2dzdF9zdHJ1Y3R1cmVfZ2V0X2RhdGVfdGltZSAoY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAorICAgIGNvbnN0IGdjaGFyICogZmllbGRuYW1lLCBHc3REYXRlVGltZSAqKiB2YWx1ZSkKK3sKKyAgR3N0U3RydWN0dXJlRmllbGQgKmZpZWxkOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmllbGRuYW1lICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZhbHVlICE9IE5VTEwsIEZBTFNFKTsKKworICBmaWVsZCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X2ZpZWxkIChzdHJ1Y3R1cmUsIGZpZWxkbmFtZSk7CisKKyAgaWYgKGZpZWxkID09IE5VTEwpCisgICAgcmV0dXJuIEZBTFNFOworICBpZiAoIUdTVF9WQUxVRV9IT0xEU19EQVRFX1RJTUUgKCZmaWVsZC0+dmFsdWUpKQorICAgIHJldHVybiBGQUxTRTsKKworICAvKiBGSVhNRTogMC4xMSBnX3ZhbHVlX2R1cF9ib3hlZCgpIC0+IGdfdmFsdWVfZ2V0X2JveGVkKCkgKi8KKyAgKnZhbHVlID0gZ192YWx1ZV9kdXBfYm94ZWQgKCZmaWVsZC0+dmFsdWUpOworCisgIHJldHVybiBUUlVFOworfQorCisvKioKKyAqIGdzdF9zdHJ1Y3R1cmVfZ2V0X2Nsb2NrX3RpbWU6CisgKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKKyAqIEBmaWVsZG5hbWU6IHRoZSBuYW1lIG9mIGEgZmllbGQKKyAqIEB2YWx1ZTogKG91dCk6IGEgcG9pbnRlciB0byBhICNHc3RDbG9ja1RpbWUgdG8gc2V0CisgKgorICogU2V0cyB0aGUgY2xvY2sgdGltZSBwb2ludGVkIHRvIGJ5IEB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBjbG9jayB0aW1lCisgKiBvZiB0aGUgZ2l2ZW4gZmllbGQuICBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRoZSBmaWVsZCBleGlzdHMKKyAqIGFuZCBoYXMgdGhlIGNvcnJlY3QgdHlwZS4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSBzZXQgY29ycmVjdGx5LiBJZiB0aGVyZSB3YXMgbm8gZmllbGQKKyAqIHdpdGggQGZpZWxkbmFtZSBvciB0aGUgZXhpc3RpbmcgZmllbGQgZGlkIG5vdCBjb250YWluIGEgI0dzdENsb2NrVGltZSwgdGhpcworICogZnVuY3Rpb24gcmV0dXJucyBGQUxTRS4KKyAqLworZ2Jvb2xlYW4KK2dzdF9zdHJ1Y3R1cmVfZ2V0X2Nsb2NrX3RpbWUgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwKKyAgICBjb25zdCBnY2hhciAqIGZpZWxkbmFtZSwgR3N0Q2xvY2tUaW1lICogdmFsdWUpCit7CisgIEdzdFN0cnVjdHVyZUZpZWxkICpmaWVsZDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpZWxkbmFtZSAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh2YWx1ZSAhPSBOVUxMLCBGQUxTRSk7CisKKyAgZmllbGQgPSBnc3Rfc3RydWN0dXJlX2dldF9maWVsZCAoc3RydWN0dXJlLCBmaWVsZG5hbWUpOworCisgIGlmIChmaWVsZCA9PSBOVUxMKQorICAgIHJldHVybiBGQUxTRTsKKyAgaWYgKCFHX1ZBTFVFX0hPTERTX1VJTlQ2NCAoJmZpZWxkLT52YWx1ZSkpCisgICAgcmV0dXJuIEZBTFNFOworCisgICp2YWx1ZSA9IGdzdF9nX3ZhbHVlX2dldF91aW50NjRfdW5jaGVja2VkICgmZmllbGQtPnZhbHVlKTsKKworICByZXR1cm4gVFJVRTsKK30KKworLyoqCisgKiBnc3Rfc3RydWN0dXJlX2dldF9kb3VibGU6CisgKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKKyAqIEBmaWVsZG5hbWU6IHRoZSBuYW1lIG9mIGEgZmllbGQKKyAqIEB2YWx1ZTogKG91dCk6IGEgcG9pbnRlciB0byBhIGdkb3VibGUgdG8gc2V0CisgKgorICogU2V0cyB0aGUgZG91YmxlIHBvaW50ZWQgdG8gYnkgQHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHZhbHVlIG9mIHRoZQorICogZ2l2ZW4gZmllbGQuICBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRoZSBmaWVsZCBleGlzdHMKKyAqIGFuZCBoYXMgdGhlIGNvcnJlY3QgdHlwZS4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSBzZXQgY29ycmVjdGx5LiBJZiB0aGVyZSB3YXMgbm8gZmllbGQKKyAqIHdpdGggQGZpZWxkbmFtZSBvciB0aGUgZXhpc3RpbmcgZmllbGQgZGlkIG5vdCBjb250YWluIGEgZG91YmxlLCB0aGlzCisgKiBmdW5jdGlvbiByZXR1cm5zIEZBTFNFLgorICovCitnYm9vbGVhbgorZ3N0X3N0cnVjdHVyZV9nZXRfZG91YmxlIChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCisgICAgY29uc3QgZ2NoYXIgKiBmaWVsZG5hbWUsIGdkb3VibGUgKiB2YWx1ZSkKK3sKKyAgR3N0U3RydWN0dXJlRmllbGQgKmZpZWxkOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmllbGRuYW1lICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZhbHVlICE9IE5VTEwsIEZBTFNFKTsKKworICBmaWVsZCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X2ZpZWxkIChzdHJ1Y3R1cmUsIGZpZWxkbmFtZSk7CisKKyAgaWYgKGZpZWxkID09IE5VTEwpCisgICAgcmV0dXJuIEZBTFNFOworICBpZiAoIUdfVkFMVUVfSE9MRFNfRE9VQkxFICgmZmllbGQtPnZhbHVlKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgKnZhbHVlID0gZ3N0X2dfdmFsdWVfZ2V0X2RvdWJsZV91bmNoZWNrZWQgKCZmaWVsZC0+dmFsdWUpOworCisgIHJldHVybiBUUlVFOworfQorCisvKioKKyAqIGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZzoKKyAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQorICogQGZpZWxkbmFtZTogdGhlIG5hbWUgb2YgYSBmaWVsZAorICoKKyAqIEZpbmRzIHRoZSBmaWVsZCBjb3JyZXNwb25kaW5nIHRvIEBmaWVsZG5hbWUsIGFuZCByZXR1cm5zIHRoZSBzdHJpbmcKKyAqIGNvbnRhaW5lZCBpbiB0aGUgZmllbGQncyB2YWx1ZS4gIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nCisgKiBzdXJlIHRoZSBmaWVsZCBleGlzdHMgYW5kIGhhcyB0aGUgY29ycmVjdCB0eXBlLgorICoKKyAqIFRoZSBzdHJpbmcgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgYW5kIHJlbWFpbnMgdmFsaWQgdW50aWwgdGhlIG5leHQKKyAqIGNhbGwgdG8gYSBnc3Rfc3RydWN0dXJlXyooKSBmdW5jdGlvbiB3aXRoIHRoZSBnaXZlbiBzdHJ1Y3R1cmUuCisgKgorICogUmV0dXJuczogYSBwb2ludGVyIHRvIHRoZSBzdHJpbmcgb3IgTlVMTCB3aGVuIHRoZSBmaWVsZCBkaWQgbm90IGV4aXN0CisgKiBvciBkaWQgbm90IGNvbnRhaW4gYSBzdHJpbmcuCisgKi8KK2NvbnN0IGdjaGFyICoKK2dzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAorICAgIGNvbnN0IGdjaGFyICogZmllbGRuYW1lKQoreworICBHc3RTdHJ1Y3R1cmVGaWVsZCAqZmllbGQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpZWxkbmFtZSAhPSBOVUxMLCBOVUxMKTsKKworICBmaWVsZCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X2ZpZWxkIChzdHJ1Y3R1cmUsIGZpZWxkbmFtZSk7CisKKyAgaWYgKGZpZWxkID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisgIGlmICghR19WQUxVRV9IT0xEU19TVFJJTkcgKCZmaWVsZC0+dmFsdWUpKQorICAgIHJldHVybiBOVUxMOworCisgIHJldHVybiBnc3RfZ192YWx1ZV9nZXRfc3RyaW5nX3VuY2hlY2tlZCAoJmZpZWxkLT52YWx1ZSk7Cit9CisKKy8qKgorICogZ3N0X3N0cnVjdHVyZV9nZXRfZW51bToKKyAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQorICogQGZpZWxkbmFtZTogdGhlIG5hbWUgb2YgYSBmaWVsZAorICogQGVudW10eXBlOiB0aGUgZW51bSB0eXBlIG9mIGEgZmllbGQKKyAqIEB2YWx1ZTogKG91dCk6IGEgcG9pbnRlciB0byBhbiBpbnQgdG8gc2V0CisgKgorICogU2V0cyB0aGUgaW50IHBvaW50ZWQgdG8gYnkgQHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHZhbHVlIG9mIHRoZQorICogZ2l2ZW4gZmllbGQuICBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRoZSBmaWVsZCBleGlzdHMsCisgKiBoYXMgdGhlIGNvcnJlY3QgdHlwZSBhbmQgdGhhdCB0aGUgZW51bXR5cGUgaXMgY29ycmVjdC4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSBzZXQgY29ycmVjdGx5LiBJZiB0aGVyZSB3YXMgbm8gZmllbGQKKyAqIHdpdGggQGZpZWxkbmFtZSBvciB0aGUgZXhpc3RpbmcgZmllbGQgZGlkIG5vdCBjb250YWluIGFuIGVudW0gb2YgdGhlIGdpdmVuCisgKiB0eXBlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgRkFMU0UuCisgKi8KK2dib29sZWFuCitnc3Rfc3RydWN0dXJlX2dldF9lbnVtIChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCisgICAgY29uc3QgZ2NoYXIgKiBmaWVsZG5hbWUsIEdUeXBlIGVudW10eXBlLCBnaW50ICogdmFsdWUpCit7CisgIEdzdFN0cnVjdHVyZUZpZWxkICpmaWVsZDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpZWxkbmFtZSAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlbnVtdHlwZSAhPSBHX1RZUEVfSU5WQUxJRCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAodmFsdWUgIT0gTlVMTCwgRkFMU0UpOworCisgIGZpZWxkID0gZ3N0X3N0cnVjdHVyZV9nZXRfZmllbGQgKHN0cnVjdHVyZSwgZmllbGRuYW1lKTsKKworICBpZiAoZmllbGQgPT0gTlVMTCkKKyAgICByZXR1cm4gRkFMU0U7CisgIGlmICghR19UWVBFX0NIRUNLX1ZBTFVFX1RZUEUgKCZmaWVsZC0+dmFsdWUsIGVudW10eXBlKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgKnZhbHVlID0gZ192YWx1ZV9nZXRfZW51bSAoJmZpZWxkLT52YWx1ZSk7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qKgorICogZ3N0X3N0cnVjdHVyZV9nZXRfZnJhY3Rpb246CisgKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKKyAqIEBmaWVsZG5hbWU6IHRoZSBuYW1lIG9mIGEgZmllbGQKKyAqIEB2YWx1ZV9udW1lcmF0b3I6IChvdXQpOiBhIHBvaW50ZXIgdG8gYW4gaW50IHRvIHNldAorICogQHZhbHVlX2Rlbm9taW5hdG9yOiAob3V0KTogYSBwb2ludGVyIHRvIGFuIGludCB0byBzZXQKKyAqCisgKiBTZXRzIHRoZSBpbnRlZ2VycyBwb2ludGVkIHRvIGJ5IEB2YWx1ZV9udW1lcmF0b3IgYW5kIEB2YWx1ZV9kZW5vbWluYXRvcgorICogY29ycmVzcG9uZGluZyB0byB0aGUgdmFsdWUgb2YgdGhlIGdpdmVuIGZpZWxkLiAgQ2FsbGVyIGlzIHJlc3BvbnNpYmxlCisgKiBmb3IgbWFraW5nIHN1cmUgdGhlIGZpZWxkIGV4aXN0cyBhbmQgaGFzIHRoZSBjb3JyZWN0IHR5cGUuCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgdmFsdWVzIGNvdWxkIGJlIHNldCBjb3JyZWN0bHkuIElmIHRoZXJlIHdhcyBubyBmaWVsZAorICogd2l0aCBAZmllbGRuYW1lIG9yIHRoZSBleGlzdGluZyBmaWVsZCBkaWQgbm90IGNvbnRhaW4gYSBHc3RGcmFjdGlvbiwgdGhpcworICogZnVuY3Rpb24gcmV0dXJucyBGQUxTRS4KKyAqLworZ2Jvb2xlYW4KK2dzdF9zdHJ1Y3R1cmVfZ2V0X2ZyYWN0aW9uIChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCisgICAgY29uc3QgZ2NoYXIgKiBmaWVsZG5hbWUsIGdpbnQgKiB2YWx1ZV9udW1lcmF0b3IsIGdpbnQgKiB2YWx1ZV9kZW5vbWluYXRvcikKK3sKKyAgR3N0U3RydWN0dXJlRmllbGQgKmZpZWxkOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmllbGRuYW1lICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZhbHVlX251bWVyYXRvciAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh2YWx1ZV9kZW5vbWluYXRvciAhPSBOVUxMLCBGQUxTRSk7CisKKyAgZmllbGQgPSBnc3Rfc3RydWN0dXJlX2dldF9maWVsZCAoc3RydWN0dXJlLCBmaWVsZG5hbWUpOworCisgIGlmIChmaWVsZCA9PSBOVUxMKQorICAgIHJldHVybiBGQUxTRTsKKyAgaWYgKCFHU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT04gKCZmaWVsZC0+dmFsdWUpKQorICAgIHJldHVybiBGQUxTRTsKKworICAqdmFsdWVfbnVtZXJhdG9yID0gZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9udW1lcmF0b3IgKCZmaWVsZC0+dmFsdWUpOworICAqdmFsdWVfZGVub21pbmF0b3IgPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX2Rlbm9taW5hdG9yICgmZmllbGQtPnZhbHVlKTsKKworICByZXR1cm4gVFJVRTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgX0dzdFN0cnVjdHVyZUFiYnJldmlhdGlvbgoreworICBjb25zdCBnY2hhciAqdHlwZV9uYW1lOworICBHVHlwZSB0eXBlOworfQorR3N0U3RydWN0dXJlQWJicmV2aWF0aW9uOworCisvKiByZXR1cm4gYSBjb3B5IG9mIGFuIGFycmF5IG9mIEdzdFN0cnVjdHVyZUFiYnJldmlhdGlvbiBjb250YWluaW5nIGFsbCB0aGUKKyAqIGtub3duIHR5cGVfc3RyaW5nLCBHVHlwZSBtYXBzLCBpbmNsdWRpbmcgYWJicmV2aWF0aW9ucyBmb3IgY29tbW9uIHR5cGVzICovCitzdGF0aWMgR3N0U3RydWN0dXJlQWJicmV2aWF0aW9uICoKK2dzdF9zdHJ1Y3R1cmVfZ2V0X2FiYnJzIChnaW50ICogbl9hYmJycykKK3sKKyAgc3RhdGljIEdzdFN0cnVjdHVyZUFiYnJldmlhdGlvbiAqYWJicnMgPSBOVUxMOworICBzdGF0aWMgdm9sYXRpbGUgZ3NpemUgbnVtID0gMDsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZudW0pKSB7CisgICAgLyogZHluYW1pY2FsbHkgZ2VuZXJhdGUgdGhlIGFycmF5ICovCisgICAgZ3NpemUgX251bTsKKyAgICBHc3RTdHJ1Y3R1cmVBYmJyZXZpYXRpb24gZHluX2FiYnJzW10gPSB7CisgICAgICB7ImludCIsIEdfVFlQRV9JTlR9CisgICAgICAsCisgICAgICB7ImkiLCBHX1RZUEVfSU5UfQorICAgICAgLAorICAgICAgeyJ1aW50IiwgR19UWVBFX1VJTlR9CisgICAgICAsCisgICAgICB7InUiLCBHX1RZUEVfVUlOVH0KKyAgICAgICwKKyAgICAgIHsiZmxvYXQiLCBHX1RZUEVfRkxPQVR9CisgICAgICAsCisgICAgICB7ImYiLCBHX1RZUEVfRkxPQVR9CisgICAgICAsCisgICAgICB7ImRvdWJsZSIsIEdfVFlQRV9ET1VCTEV9CisgICAgICAsCisgICAgICB7ImQiLCBHX1RZUEVfRE9VQkxFfQorICAgICAgLAorICAgICAgeyJidWZmZXIiLCBHU1RfVFlQRV9CVUZGRVJ9CisgICAgICAsCisgICAgICB7ImZyYWN0aW9uIiwgR1NUX1RZUEVfRlJBQ1RJT059CisgICAgICAsCisgICAgICB7ImJvb2xlYW4iLCBHX1RZUEVfQk9PTEVBTn0KKyAgICAgICwKKyAgICAgIHsiYm9vbCIsIEdfVFlQRV9CT09MRUFOfQorICAgICAgLAorICAgICAgeyJiIiwgR19UWVBFX0JPT0xFQU59CisgICAgICAsCisgICAgICB7InN0cmluZyIsIEdfVFlQRV9TVFJJTkd9CisgICAgICAsCisgICAgICB7InN0ciIsIEdfVFlQRV9TVFJJTkd9CisgICAgICAsCisgICAgICB7InMiLCBHX1RZUEVfU1RSSU5HfQorICAgICAgLAorICAgICAgeyJzdHJ1Y3R1cmUiLCBHU1RfVFlQRV9TVFJVQ1RVUkV9CisgICAgICAsCisgICAgICB7ImRhdGUiLCBHU1RfVFlQRV9EQVRFfQorICAgICAgLAorICAgICAgeyJkYXRldGltZSIsIEdTVF9UWVBFX0RBVEVfVElNRX0KKyAgICB9OworICAgIF9udW0gPSBHX05fRUxFTUVOVFMgKGR5bl9hYmJycyk7CisgICAgLyogcGVybWFuZW50bHkgYWxsb2NhdGUgYW5kIGNvcHkgdGhlIGFycmF5IG5vdyAqLworICAgIGFiYnJzID0gZ19uZXcwIChHc3RTdHJ1Y3R1cmVBYmJyZXZpYXRpb24sIF9udW0pOworICAgIG1lbWNweSAoYWJicnMsIGR5bl9hYmJycywgc2l6ZW9mIChHc3RTdHJ1Y3R1cmVBYmJyZXZpYXRpb24pICogX251bSk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZudW0sIF9udW0pOworICB9CisgICpuX2FiYnJzID0gbnVtOworCisgIHJldHVybiBhYmJyczsKK30KKworLyogZ2l2ZW4gYSB0eXBlX25hbWUgdGhhdCBjb3VsZCBiZSBhIHR5cGUgYWJicmV2aWF0aW9uIG9yIGEgcmVnaXN0ZXJlZCBHVHlwZSwKKyAqIHJldHVybiBhIG1hdGNoaW5nIEdUeXBlICovCitzdGF0aWMgR1R5cGUKK2dzdF9zdHJ1Y3R1cmVfZ3R5cGVfZnJvbV9hYmJyIChjb25zdCBjaGFyICp0eXBlX25hbWUpCit7CisgIGludCBpOworICBHc3RTdHJ1Y3R1cmVBYmJyZXZpYXRpb24gKmFiYnJzOworICBnaW50IG5fYWJicnM7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHR5cGVfbmFtZSAhPSBOVUxMLCBHX1RZUEVfSU5WQUxJRCk7CisKKyAgYWJicnMgPSBnc3Rfc3RydWN0dXJlX2dldF9hYmJycyAoJm5fYWJicnMpOworCisgIGZvciAoaSA9IDA7IGkgPCBuX2FiYnJzOyBpKyspIHsKKyAgICBpZiAoc3RyY21wICh0eXBlX25hbWUsIGFiYnJzW2ldLnR5cGVfbmFtZSkgPT0gMCkgeworICAgICAgcmV0dXJuIGFiYnJzW2ldLnR5cGU7CisgICAgfQorICB9CisKKyAgLyogdGhpcyBpcyB0aGUgZmFsbGJhY2sgKi8KKyAgcmV0dXJuIGdfdHlwZV9mcm9tX25hbWUgKHR5cGVfbmFtZSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2dzdF9zdHJ1Y3R1cmVfdG9fYWJiciAoR1R5cGUgdHlwZSkKK3sKKyAgaW50IGk7CisgIEdzdFN0cnVjdHVyZUFiYnJldmlhdGlvbiAqYWJicnM7CisgIGdpbnQgbl9hYmJyczsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAodHlwZSAhPSBHX1RZUEVfSU5WQUxJRCwgTlVMTCk7CisKKyAgYWJicnMgPSBnc3Rfc3RydWN0dXJlX2dldF9hYmJycyAoJm5fYWJicnMpOworCisgIGZvciAoaSA9IDA7IGkgPCBuX2FiYnJzOyBpKyspIHsKKyAgICBpZiAodHlwZSA9PSBhYmJyc1tpXS50eXBlKSB7CisgICAgICByZXR1cm4gYWJicnNbaV0udHlwZV9uYW1lOworICAgIH0KKyAgfQorCisgIHJldHVybiBnX3R5cGVfbmFtZSAodHlwZSk7Cit9CisKK3N0YXRpYyBHVHlwZQorZ3N0X3N0cnVjdHVyZV92YWx1ZV9nZXRfZ2VuZXJpY190eXBlIChHVmFsdWUgKiB2YWwpCit7CisgIGlmIChHX1ZBTFVFX1RZUEUgKHZhbCkgPT0gR1NUX1RZUEVfTElTVAorICAgICAgfHwgR19WQUxVRV9UWVBFICh2YWwpID09IEdTVF9UWVBFX0FSUkFZKSB7CisgICAgR0FycmF5ICphcnJheSA9IGdfdmFsdWVfcGVla19wb2ludGVyICh2YWwpOworCisgICAgaWYgKGFycmF5LT5sZW4gPiAwKSB7CisgICAgICBHVmFsdWUgKnZhbHVlID0gJmdfYXJyYXlfaW5kZXggKGFycmF5LCBHVmFsdWUsIDApOworCisgICAgICByZXR1cm4gZ3N0X3N0cnVjdHVyZV92YWx1ZV9nZXRfZ2VuZXJpY190eXBlICh2YWx1ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBHX1RZUEVfSU5UOworICAgIH0KKyAgfSBlbHNlIGlmIChHX1ZBTFVFX1RZUEUgKHZhbCkgPT0gR1NUX1RZUEVfSU5UX1JBTkdFKSB7CisgICAgcmV0dXJuIEdfVFlQRV9JTlQ7CisgIH0gZWxzZSBpZiAoR19WQUxVRV9UWVBFICh2YWwpID09IEdTVF9UWVBFX0lOVDY0X1JBTkdFKSB7CisgICAgcmV0dXJuIEdfVFlQRV9JTlQ2NDsKKyAgfSBlbHNlIGlmIChHX1ZBTFVFX1RZUEUgKHZhbCkgPT0gR1NUX1RZUEVfRE9VQkxFX1JBTkdFKSB7CisgICAgcmV0dXJuIEdfVFlQRV9ET1VCTEU7CisgIH0gZWxzZSBpZiAoR19WQUxVRV9UWVBFICh2YWwpID09IEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFKSB7CisgICAgcmV0dXJuIEdTVF9UWVBFX0ZSQUNUSU9OOworICB9CisgIHJldHVybiBHX1ZBTFVFX1RZUEUgKHZhbCk7Cit9CisKK2dib29sZWFuCitwcml2X2dzdF9zdHJ1Y3R1cmVfYXBwZW5kX3RvX2dzdHJpbmcgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwKKyAgICBHU3RyaW5nICogcykKK3sKKyAgR3N0U3RydWN0dXJlRmllbGQgKmZpZWxkOworICBndWludCBpLCBsZW47CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHMgIT0gTlVMTCwgRkFMU0UpOworCisgIGdfc3RyaW5nX2FwcGVuZCAocywgZ19xdWFya190b19zdHJpbmcgKHN0cnVjdHVyZS0+bmFtZSkpOworICBsZW4gPSBHU1RfU1RSVUNUVVJFX0ZJRUxEUyAoc3RydWN0dXJlKS0+bGVuOworICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICBjaGFyICp0OworICAgIEdUeXBlIHR5cGU7CisKKyAgICBmaWVsZCA9IEdTVF9TVFJVQ1RVUkVfRklFTEQgKHN0cnVjdHVyZSwgaSk7CisKKyAgICB0ID0gZ3N0X3ZhbHVlX3NlcmlhbGl6ZSAoJmZpZWxkLT52YWx1ZSk7CisgICAgdHlwZSA9IGdzdF9zdHJ1Y3R1cmVfdmFsdWVfZ2V0X2dlbmVyaWNfdHlwZSAoJmZpZWxkLT52YWx1ZSk7CisKKyAgICBnX3N0cmluZ19hcHBlbmRfbGVuIChzLCAiLCAiLCAyKTsKKyAgICAvKiBGSVhNRTogZG8gd2UgbmVlZCB0byBlc2NhcGUgZmllbGRuYW1lcz8gKi8KKyAgICBnX3N0cmluZ19hcHBlbmQgKHMsIGdfcXVhcmtfdG9fc3RyaW5nIChmaWVsZC0+bmFtZSkpOworICAgIGdfc3RyaW5nX2FwcGVuZF9sZW4gKHMsICI9KCIsIDIpOworICAgIGdfc3RyaW5nX2FwcGVuZCAocywgZ3N0X3N0cnVjdHVyZV90b19hYmJyICh0eXBlKSk7CisgICAgZ19zdHJpbmdfYXBwZW5kX2MgKHMsICcpJyk7CisgICAgZ19zdHJpbmdfYXBwZW5kIChzLCB0ID09IE5VTEwgPyAiTlVMTCIgOiB0KTsKKyAgICBnX2ZyZWUgKHQpOworICB9CisKKyAgZ19zdHJpbmdfYXBwZW5kX2MgKHMsICc7Jyk7CisgIHJldHVybiBUUlVFOworfQorCisvKioKKyAqIGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nOgorICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCisgKgorICogQ29udmVydHMgQHN0cnVjdHVyZSB0byBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZyByZXByZXNlbnRhdGlvbi4KKyAqCisgKiBGb3IgZGVidWdnaW5nIHB1cnBvc2VzIGl0cyBlYXNpZXIgdG8gZG8gc29tZXRoaW5nIGxpa2UgdGhpczoKKyAqIHxbCisgKiBHU1RfTE9HICgic3RydWN0dXJlIGlzICUiIEdTVF9QVFJfRk9STUFULCBzdHJ1Y3R1cmUpOworICogXXwKKyAqIFRoaXMgcHJpbnRzIHRoZSBzdHJ1Y3R1cmUgaW4gaHVtYW4gcmVhZGJsZSBmb3JtLgorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdfZnJlZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKUwgYSBwb2ludGVyIHRvIHN0cmluZyBhbGxvY2F0ZWQgYnkgZ19tYWxsb2MoKS4KKyAqICAgICBnX2ZyZWUoKSBhZnRlciB1c2FnZS4KKyAqLworZ2NoYXIgKgorZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSkKK3sKKyAgR1N0cmluZyAqczsKKworICAvKiBOT1RFOiAgVGhpcyBmdW5jdGlvbiBpcyBwb3RlbnRpYWxseSBjYWxsZWQgYnkgdGhlIGRlYnVnIHN5c3RlbSwKKyAgICogc28gYW55IGNhbGxzIHRvIGdzdF9sb2coKSAoYW5kIEdTVF9ERUJVRygpLCBHU1RfTE9HKCksIGV0Yy4pCisgICAqIHNob3VsZCBiZSBjYXJlZnVsIHRvIGF2b2lkIHJlY3Vyc2lvbi4gIFRoaXMgaW5jbHVkZXMgYW55IGZ1bmN0aW9ucworICAgKiBjYWxsZWQgYnkgZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcuICBJbiBwYXJ0aWN1bGFyLCBjYWxscyBzaG91bGQKKyAgICogbm90IHVzZSB0aGUgR1NUX1BUUl9GT1JNQVQgZXh0ZW5zaW9uLiAgKi8KKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwsIE5VTEwpOworCisgIC8qIHdlIGVzdGltYXRlIGEgbWluaW11bSBzaXplIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgZmllbGRzIGluIG9yZGVyIHRvCisgICAqIGF2b2lkIHVubmVjZXNzYXJ5IHJlYWxsb2NzIHdpdGhpbiBHU3RyaW5nICovCisgIHMgPSBnX3N0cmluZ19zaXplZF9uZXcgKFNUUlVDVFVSRV9FU1RJTUFURURfU1RSSU5HX0xFTiAoc3RydWN0dXJlKSk7CisgIHByaXZfZ3N0X3N0cnVjdHVyZV9hcHBlbmRfdG9fZ3N0cmluZyAoc3RydWN0dXJlLCBzKTsKKyAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUgKHMsIEZBTFNFKTsKK30KKworLyoKKyAqIHIgd2lsbCBzdGlsbCBwb2ludCB0byB0aGUgc3RyaW5nLiBpZiBlbmQgPT0gbmV4dCwgdGhlIHN0cmluZyB3aWxsIG5vdCBiZQorICogbnVsbC10ZXJtaW5hdGVkLiBJbiBhbGwgb3RoZXIgY2FzZXMgaXQgd2lsbCBiZS4KKyAqIGVuZCA9IHBvaW50ZXIgdG8gY2hhciBiZWhpbmQgZW5kIG9mIHN0cmluZywgbmV4dCA9IHBvaW50ZXIgdG8gc3RhcnQgb2YKKyAqIHVucmVhZCBkYXRhLgorICogVEhJUyBGVU5DVElPTiBNT0RJRklFUyBUSEUgU1RSSU5HIEFORCBERVRFQ1RTIElOU0lERSBBIE5PTlRFUk1JTkFURUQgU1RSSU5HCisgKi8KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3N0cnVjdHVyZV9wYXJzZV9zdHJpbmcgKGdjaGFyICogcywgZ2NoYXIgKiogZW5kLCBnY2hhciAqKiBuZXh0LAorICAgIGdib29sZWFuIHVuZXNjYXBlKQoreworICBnY2hhciAqdzsKKworICBpZiAoKnMgPT0gMCkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgaWYgKCpzICE9ICciJykgeworICAgIGludCByZXQ7CisKKyAgICByZXQgPSBnc3Rfc3RydWN0dXJlX3BhcnNlX3NpbXBsZV9zdHJpbmcgKHMsIGVuZCk7CisgICAgKm5leHQgPSAqZW5kOworCisgICAgcmV0dXJuIHJldDsKKyAgfQorCisgIGlmICh1bmVzY2FwZSkgeworICAgIHcgPSBzOworICAgIHMrKzsKKyAgICB3aGlsZSAoKnMgIT0gJyInKSB7CisgICAgICBpZiAoR19VTkxJS0VMWSAoKnMgPT0gMCkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgIGlmIChHX1VOTElLRUxZICgqcyA9PSAnXFwnKSkKKyAgICAgICAgcysrOworICAgICAgKncgPSAqczsKKyAgICAgIHcrKzsKKyAgICAgIHMrKzsKKyAgICB9CisgICAgcysrOworICB9IGVsc2UgeworICAgIC8qIEZpbmQgdGhlIGNsb3NpbmcgcXVvdGVzICovCisgICAgcysrOworICAgIHdoaWxlICgqcyAhPSAnIicpIHsKKyAgICAgIGlmIChHX1VOTElLRUxZICgqcyA9PSAwKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgaWYgKEdfVU5MSUtFTFkgKCpzID09ICdcXCcpKQorICAgICAgICBzKys7CisgICAgICBzKys7CisgICAgfQorICAgIHMrKzsKKyAgICB3ID0gczsKKyAgfQorCisgICplbmQgPSB3OworICAqbmV4dCA9IHM7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3N0cnVjdHVyZV9wYXJzZV9yYW5nZSAoZ2NoYXIgKiBzLCBnY2hhciAqKiBhZnRlciwgR1ZhbHVlICogdmFsdWUsCisgICAgR1R5cGUgdHlwZSkKK3sKKyAgR1ZhbHVlIHZhbHVlMSA9IHsgMCB9OworICBHVmFsdWUgdmFsdWUyID0geyAwIH07CisgIEdUeXBlIHJhbmdlX3R5cGU7CisgIGdib29sZWFuIHJldDsKKworICBpZiAoKnMgIT0gJ1snKQorICAgIHJldHVybiBGQUxTRTsKKyAgcysrOworCisgIHJldCA9IGdzdF9zdHJ1Y3R1cmVfcGFyc2VfdmFsdWUgKHMsICZzLCAmdmFsdWUxLCB0eXBlKTsKKyAgaWYgKHJldCA9PSBGQUxTRSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgd2hpbGUgKGdfYXNjaWlfaXNzcGFjZSAoKnMpKQorICAgIHMrKzsKKworICBpZiAoKnMgIT0gJywnKQorICAgIHJldHVybiBGQUxTRTsKKyAgcysrOworCisgIHdoaWxlIChnX2FzY2lpX2lzc3BhY2UgKCpzKSkKKyAgICBzKys7CisKKyAgcmV0ID0gZ3N0X3N0cnVjdHVyZV9wYXJzZV92YWx1ZSAocywgJnMsICZ2YWx1ZTIsIHR5cGUpOworICBpZiAocmV0ID09IEZBTFNFKQorICAgIHJldHVybiBGQUxTRTsKKworICB3aGlsZSAoZ19hc2NpaV9pc3NwYWNlICgqcykpCisgICAgcysrOworCisgIGlmICgqcyAhPSAnXScpCisgICAgcmV0dXJuIEZBTFNFOworICBzKys7CisKKyAgaWYgKEdfVkFMVUVfVFlQRSAoJnZhbHVlMSkgIT0gR19WQUxVRV9UWVBFICgmdmFsdWUyKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgaWYgKEdfVkFMVUVfVFlQRSAoJnZhbHVlMSkgPT0gR19UWVBFX0RPVUJMRSkgeworICAgIHJhbmdlX3R5cGUgPSBHU1RfVFlQRV9ET1VCTEVfUkFOR0U7CisgICAgZ192YWx1ZV9pbml0ICh2YWx1ZSwgcmFuZ2VfdHlwZSk7CisgICAgZ3N0X3ZhbHVlX3NldF9kb3VibGVfcmFuZ2UgKHZhbHVlLAorICAgICAgICBnc3RfZ192YWx1ZV9nZXRfZG91YmxlX3VuY2hlY2tlZCAoJnZhbHVlMSksCisgICAgICAgIGdzdF9nX3ZhbHVlX2dldF9kb3VibGVfdW5jaGVja2VkICgmdmFsdWUyKSk7CisgIH0gZWxzZSBpZiAoR19WQUxVRV9UWVBFICgmdmFsdWUxKSA9PSBHX1RZUEVfSU5UKSB7CisgICAgcmFuZ2VfdHlwZSA9IEdTVF9UWVBFX0lOVF9SQU5HRTsKKyAgICBnX3ZhbHVlX2luaXQgKHZhbHVlLCByYW5nZV90eXBlKTsKKyAgICBnc3RfdmFsdWVfc2V0X2ludF9yYW5nZSAodmFsdWUsIGdzdF9nX3ZhbHVlX2dldF9pbnRfdW5jaGVja2VkICgmdmFsdWUxKSwKKyAgICAgICAgZ3N0X2dfdmFsdWVfZ2V0X2ludF91bmNoZWNrZWQgKCZ2YWx1ZTIpKTsKKyAgfSBlbHNlIGlmIChHX1ZBTFVFX1RZUEUgKCZ2YWx1ZTEpID09IEdfVFlQRV9JTlQ2NCkgeworICAgIHJhbmdlX3R5cGUgPSBHU1RfVFlQRV9JTlQ2NF9SQU5HRTsKKyAgICBnX3ZhbHVlX2luaXQgKHZhbHVlLCByYW5nZV90eXBlKTsKKyAgICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlICh2YWx1ZSwgZ3N0X2dfdmFsdWVfZ2V0X2ludDY0X3VuY2hlY2tlZCAoJnZhbHVlMSksCisgICAgICAgIGdzdF9nX3ZhbHVlX2dldF9pbnQ2NF91bmNoZWNrZWQgKCZ2YWx1ZTIpKTsKKyAgfSBlbHNlIGlmIChHX1ZBTFVFX1RZUEUgKCZ2YWx1ZTEpID09IEdTVF9UWVBFX0ZSQUNUSU9OKSB7CisgICAgcmFuZ2VfdHlwZSA9IEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFOworICAgIGdfdmFsdWVfaW5pdCAodmFsdWUsIHJhbmdlX3R5cGUpOworICAgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2UgKHZhbHVlLCAmdmFsdWUxLCAmdmFsdWUyKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKworICAqYWZ0ZXIgPSBzOworICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuCitnc3Rfc3RydWN0dXJlX3BhcnNlX2FueV9saXN0IChnY2hhciAqIHMsIGdjaGFyICoqIGFmdGVyLCBHVmFsdWUgKiB2YWx1ZSwKKyAgICBHVHlwZSB0eXBlLCBHVHlwZSBsaXN0X3R5cGUsIGNoYXIgYmVnaW4sIGNoYXIgZW5kKQoreworICBHVmFsdWUgbGlzdF92YWx1ZSA9IHsgMCB9OworICBnYm9vbGVhbiByZXQ7CisgIEdBcnJheSAqYXJyYXk7CisKKyAgZ192YWx1ZV9pbml0ICh2YWx1ZSwgbGlzdF90eXBlKTsKKyAgYXJyYXkgPSBnX3ZhbHVlX3BlZWtfcG9pbnRlciAodmFsdWUpOworCisgIGlmICgqcyAhPSBiZWdpbikKKyAgICByZXR1cm4gRkFMU0U7CisgIHMrKzsKKworICB3aGlsZSAoZ19hc2NpaV9pc3NwYWNlICgqcykpCisgICAgcysrOworICBpZiAoKnMgPT0gZW5kKSB7CisgICAgcysrOworICAgICphZnRlciA9IHM7CisgICAgcmV0dXJuIFRSVUU7CisgIH0KKworICByZXQgPSBnc3Rfc3RydWN0dXJlX3BhcnNlX3ZhbHVlIChzLCAmcywgJmxpc3RfdmFsdWUsIHR5cGUpOworICBpZiAocmV0ID09IEZBTFNFKQorICAgIHJldHVybiBGQUxTRTsKKworICBnX2FycmF5X2FwcGVuZF92YWwgKGFycmF5LCBsaXN0X3ZhbHVlKTsKKworICB3aGlsZSAoZ19hc2NpaV9pc3NwYWNlICgqcykpCisgICAgcysrOworCisgIHdoaWxlICgqcyAhPSBlbmQpIHsKKyAgICBpZiAoKnMgIT0gJywnKQorICAgICAgcmV0dXJuIEZBTFNFOworICAgIHMrKzsKKworICAgIHdoaWxlIChnX2FzY2lpX2lzc3BhY2UgKCpzKSkKKyAgICAgIHMrKzsKKworICAgIG1lbXNldCAoJmxpc3RfdmFsdWUsIDAsIHNpemVvZiAobGlzdF92YWx1ZSkpOworICAgIHJldCA9IGdzdF9zdHJ1Y3R1cmVfcGFyc2VfdmFsdWUgKHMsICZzLCAmbGlzdF92YWx1ZSwgdHlwZSk7CisgICAgaWYgKHJldCA9PSBGQUxTRSkKKyAgICAgIHJldHVybiBGQUxTRTsKKworICAgIGdfYXJyYXlfYXBwZW5kX3ZhbCAoYXJyYXksIGxpc3RfdmFsdWUpOworICAgIHdoaWxlIChnX2FzY2lpX2lzc3BhY2UgKCpzKSkKKyAgICAgIHMrKzsKKyAgfQorCisgIHMrKzsKKworICAqYWZ0ZXIgPSBzOworICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuCitnc3Rfc3RydWN0dXJlX3BhcnNlX2xpc3QgKGdjaGFyICogcywgZ2NoYXIgKiogYWZ0ZXIsIEdWYWx1ZSAqIHZhbHVlLCBHVHlwZSB0eXBlKQoreworICByZXR1cm4gZ3N0X3N0cnVjdHVyZV9wYXJzZV9hbnlfbGlzdCAocywgYWZ0ZXIsIHZhbHVlLCB0eXBlLCBHU1RfVFlQRV9MSVNULAorICAgICAgJ3snLCAnfScpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9zdHJ1Y3R1cmVfcGFyc2VfYXJyYXkgKGdjaGFyICogcywgZ2NoYXIgKiogYWZ0ZXIsIEdWYWx1ZSAqIHZhbHVlLAorICAgIEdUeXBlIHR5cGUpCit7CisgIHJldHVybiBnc3Rfc3RydWN0dXJlX3BhcnNlX2FueV9saXN0IChzLCBhZnRlciwgdmFsdWUsIHR5cGUsCisgICAgICBHU1RfVFlQRV9BUlJBWSwgJzwnLCAnPicpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9zdHJ1Y3R1cmVfcGFyc2Vfc2ltcGxlX3N0cmluZyAoZ2NoYXIgKiBzdHIsIGdjaGFyICoqIGVuZCkKK3sKKyAgY2hhciAqcyA9IHN0cjsKKworICB3aGlsZSAoR19MSUtFTFkgKEdTVF9BU0NJSV9JU19TVFJJTkcgKCpzKSkpIHsKKyAgICBzKys7CisgIH0KKworICAqZW5kID0gczsKKworICByZXR1cm4gKHMgIT0gc3RyKTsKK30KKworc3RhdGljIGdib29sZWFuCitnc3Rfc3RydWN0dXJlX3BhcnNlX2ZpZWxkIChnY2hhciAqIHN0ciwKKyAgICBnY2hhciAqKiBhZnRlciwgR3N0U3RydWN0dXJlRmllbGQgKiBmaWVsZCkKK3sKKyAgZ2NoYXIgKm5hbWU7CisgIGdjaGFyICpuYW1lX2VuZDsKKyAgZ2NoYXIgKnM7CisgIGdjaGFyIGM7CisKKyAgcyA9IHN0cjsKKworICB3aGlsZSAoZ19hc2NpaV9pc3NwYWNlICgqcykgfHwgKHNbMF0gPT0gJ1xcJyAmJiBnX2FzY2lpX2lzc3BhY2UgKHNbMV0pKSkKKyAgICBzKys7CisgIG5hbWUgPSBzOworICBpZiAoR19VTkxJS0VMWSAoIWdzdF9zdHJ1Y3R1cmVfcGFyc2Vfc2ltcGxlX3N0cmluZyAocywgJm5hbWVfZW5kKSkpIHsKKyAgICBHU1RfV0FSTklORyAoImZhaWxlZCB0byBwYXJzZSBzaW1wbGUgc3RyaW5nLCBzdHI9JXMiLCBzdHIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorCisgIHMgPSBuYW1lX2VuZDsKKyAgd2hpbGUgKGdfYXNjaWlfaXNzcGFjZSAoKnMpIHx8IChzWzBdID09ICdcXCcgJiYgZ19hc2NpaV9pc3NwYWNlIChzWzFdKSkpCisgICAgcysrOworCisgIGlmIChHX1VOTElLRUxZICgqcyAhPSAnPScpKSB7CisgICAgR1NUX1dBUk5JTkcgKCJtaXNzaW5nIGFzc2lnbm1lbnQgb3BlcmF0b3IgaW4gdGhlIGZpZWxkLCBzdHI9JXMiLCBzdHIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorICBzKys7CisKKyAgYyA9ICpuYW1lX2VuZDsKKyAgKm5hbWVfZW5kID0gJ1wwJzsKKyAgZmllbGQtPm5hbWUgPSBnX3F1YXJrX2Zyb21fc3RyaW5nIChuYW1lKTsKKyAgR1NUX0RFQlVHICgidHJ5aW5nIGZpZWxkIG5hbWUgJyVzJyIsIG5hbWUpOworICAqbmFtZV9lbmQgPSBjOworCisgIGlmIChHX1VOTElLRUxZICghZ3N0X3N0cnVjdHVyZV9wYXJzZV92YWx1ZSAocywgJnMsICZmaWVsZC0+dmFsdWUsCisgICAgICAgICAgICAgIEdfVFlQRV9JTlZBTElEKSkpIHsKKyAgICBHU1RfV0FSTklORyAoImZhaWxlZCB0byBwYXJzZSB2YWx1ZSAlcyIsIHN0cik7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgKmFmdGVyID0gczsKKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3N0cnVjdHVyZV9wYXJzZV92YWx1ZSAoZ2NoYXIgKiBzdHIsCisgICAgZ2NoYXIgKiogYWZ0ZXIsIEdWYWx1ZSAqIHZhbHVlLCBHVHlwZSBkZWZhdWx0X3R5cGUpCit7CisgIGdjaGFyICp0eXBlX25hbWU7CisgIGdjaGFyICp0eXBlX2VuZDsKKyAgZ2NoYXIgKnZhbHVlX3M7CisgIGdjaGFyICp2YWx1ZV9lbmQ7CisgIGdjaGFyICpzOworICBnY2hhciBjOworICBpbnQgcmV0ID0gMDsKKyAgR1R5cGUgdHlwZSA9IGRlZmF1bHRfdHlwZTsKKworICBzID0gc3RyOworICB3aGlsZSAoZ19hc2NpaV9pc3NwYWNlICgqcykpCisgICAgcysrOworCisgIC8qIGNoZWNrIGlmIHRoZXJlJ3MgYSAodHlwZV9uYW1lKSAnY2FzdCcgKi8KKyAgdHlwZV9uYW1lID0gTlVMTDsKKyAgaWYgKCpzID09ICcoJykgeworICAgIHMrKzsKKyAgICB3aGlsZSAoZ19hc2NpaV9pc3NwYWNlICgqcykpCisgICAgICBzKys7CisgICAgdHlwZV9uYW1lID0gczsKKyAgICBpZiAoR19VTkxJS0VMWSAoIWdzdF9zdHJ1Y3R1cmVfcGFyc2Vfc2ltcGxlX3N0cmluZyAocywgJnR5cGVfZW5kKSkpCisgICAgICByZXR1cm4gRkFMU0U7CisgICAgcyA9IHR5cGVfZW5kOworICAgIHdoaWxlIChnX2FzY2lpX2lzc3BhY2UgKCpzKSkKKyAgICAgIHMrKzsKKyAgICBpZiAoR19VTkxJS0VMWSAoKnMgIT0gJyknKSkKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICBzKys7CisgICAgd2hpbGUgKGdfYXNjaWlfaXNzcGFjZSAoKnMpKQorICAgICAgcysrOworCisgICAgYyA9ICp0eXBlX2VuZDsKKyAgICAqdHlwZV9lbmQgPSAwOworICAgIHR5cGUgPSBnc3Rfc3RydWN0dXJlX2d0eXBlX2Zyb21fYWJiciAodHlwZV9uYW1lKTsKKyAgICBHU1RfREVCVUcgKCJ0cnlpbmcgdHlwZSBuYW1lICclcyciLCB0eXBlX25hbWUpOworICAgICp0eXBlX2VuZCA9IGM7CisKKyAgICBpZiAoR19VTkxJS0VMWSAodHlwZSA9PSBHX1RZUEVfSU5WQUxJRCkpIHsKKyAgICAgIEdTVF9XQVJOSU5HICgiaW52YWxpZCB0eXBlIik7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICB9CisKKyAgd2hpbGUgKGdfYXNjaWlfaXNzcGFjZSAoKnMpKQorICAgIHMrKzsKKyAgaWYgKCpzID09ICdbJykgeworICAgIHJldCA9IGdzdF9zdHJ1Y3R1cmVfcGFyc2VfcmFuZ2UgKHMsICZzLCB2YWx1ZSwgdHlwZSk7CisgIH0gZWxzZSBpZiAoKnMgPT0gJ3snKSB7CisgICAgcmV0ID0gZ3N0X3N0cnVjdHVyZV9wYXJzZV9saXN0IChzLCAmcywgdmFsdWUsIHR5cGUpOworICB9IGVsc2UgaWYgKCpzID09ICc8JykgeworICAgIHJldCA9IGdzdF9zdHJ1Y3R1cmVfcGFyc2VfYXJyYXkgKHMsICZzLCB2YWx1ZSwgdHlwZSk7CisgIH0gZWxzZSB7CisgICAgdmFsdWVfcyA9IHM7CisKKyAgICBpZiAoR19VTkxJS0VMWSAodHlwZSA9PSBHX1RZUEVfSU5WQUxJRCkpIHsKKyAgICAgIEdUeXBlIHRyeV90eXBlc1tdID0KKyAgICAgICAgICB7IEdfVFlQRV9JTlQsIEdfVFlQRV9ET1VCTEUsIEdTVF9UWVBFX0ZSQUNUSU9OLCBHX1RZUEVfQk9PTEVBTiwKKyAgICAgICAgR19UWVBFX1NUUklORworICAgICAgfTsKKyAgICAgIGludCBpOworCisgICAgICBpZiAoR19VTkxJS0VMWSAoIWdzdF9zdHJ1Y3R1cmVfcGFyc2Vfc3RyaW5nIChzLCAmdmFsdWVfZW5kLCAmcywgVFJVRSkpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAvKiBTZXQgTlVMTCB0ZXJtaW5hdG9yIGZvciBkZXNlcmlhbGl6YXRpb24gKi8KKyAgICAgIGMgPSAqdmFsdWVfZW5kOworICAgICAgKnZhbHVlX2VuZCA9ICdcMCc7CisKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKHRyeV90eXBlcyk7IGkrKykgeworICAgICAgICBnX3ZhbHVlX2luaXQgKHZhbHVlLCB0cnlfdHlwZXNbaV0pOworICAgICAgICByZXQgPSBnc3RfdmFsdWVfZGVzZXJpYWxpemUgKHZhbHVlLCB2YWx1ZV9zKTsKKyAgICAgICAgaWYgKHJldCkKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZ192YWx1ZV91bnNldCAodmFsdWUpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBnX3ZhbHVlX2luaXQgKHZhbHVlLCB0eXBlKTsKKworICAgICAgaWYgKEdfVU5MSUtFTFkgKCFnc3Rfc3RydWN0dXJlX3BhcnNlX3N0cmluZyAocywgJnZhbHVlX2VuZCwgJnMsCisgICAgICAgICAgICAgICAgICAodHlwZSAhPSBHX1RZUEVfU1RSSU5HKSkpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAvKiBTZXQgTlVMTCB0ZXJtaW5hdG9yIGZvciBkZXNlcmlhbGl6YXRpb24gKi8KKyAgICAgIGMgPSAqdmFsdWVfZW5kOworICAgICAgKnZhbHVlX2VuZCA9ICdcMCc7CisKKyAgICAgIHJldCA9IGdzdF92YWx1ZV9kZXNlcmlhbGl6ZSAodmFsdWUsIHZhbHVlX3MpOworICAgICAgaWYgKEdfVU5MSUtFTFkgKCFyZXQpKQorICAgICAgICBnX3ZhbHVlX3Vuc2V0ICh2YWx1ZSk7CisgICAgfQorICAgICp2YWx1ZV9lbmQgPSBjOworICB9CisKKyAgKmFmdGVyID0gczsKKworICByZXR1cm4gcmV0OworfQorCisvKioKKyAqIGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmc6CisgKiBAc3RyaW5nOiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhICNHc3RTdHJ1Y3R1cmUuCisgKiBAZW5kOiAob3V0KSAoYWxsb3ctbm9uZSk6IHBvaW50ZXIgdG8gc3RvcmUgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIGluLgorICoKKyAqIENyZWF0ZXMgYSAjR3N0U3RydWN0dXJlIGZyb20gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uCisgKiBJZiBlbmQgaXMgbm90IE5VTEwsIGEgcG9pbnRlciB0byB0aGUgcGxhY2UgaW5zaWRlIHRoZSBnaXZlbiBzdHJpbmcKKyAqIHdoZXJlIHBhcnNpbmcgZW5kZWQgd2lsbCBiZSByZXR1cm5lZC4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnc3Rfc3RydWN0dXJlX2ZyZWUKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RTdHJ1Y3R1cmUgb3IgTlVMTCB3aGVuIHRoZSBzdHJpbmcgY291bGQKKyAqICAgICBub3QgYmUgcGFyc2VkLiBGcmVlIHdpdGggZ3N0X3N0cnVjdHVyZV9mcmVlKCkgYWZ0ZXIgdXNlLgorICovCitHc3RTdHJ1Y3R1cmUgKgorZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAoY29uc3QgZ2NoYXIgKiBzdHJpbmcsIGdjaGFyICoqIGVuZCkKK3sKKyAgY2hhciAqbmFtZTsKKyAgY2hhciAqY29weTsKKyAgY2hhciAqdzsKKyAgY2hhciAqcjsKKyAgY2hhciBzYXZlOworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IE5VTEw7CisgIEdzdFN0cnVjdHVyZUZpZWxkIGZpZWxkOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJpbmcgIT0gTlVMTCwgTlVMTCk7CisKKyAgY29weSA9IGdfc3RyZHVwIChzdHJpbmcpOworICByID0gY29weTsKKworICAvKiBza2lwIHNwYWNlcyAoRklYTUU6IF9pc3NwYWNlIHRyZWF0cyB0YWJzIGFuZCBuZXdsaW5lcyBhcyBzcGFjZSEpICovCisgIHdoaWxlICgqciAmJiAoZ19hc2NpaV9pc3NwYWNlICgqcikgfHwgKHJbMF0gPT0gJ1xcJworICAgICAgICAgICAgICAmJiBnX2FzY2lpX2lzc3BhY2UgKHJbMV0pKSkpCisgICAgcisrOworCisgIG5hbWUgPSByOworICBpZiAoR19VTkxJS0VMWSAoIWdzdF9zdHJ1Y3R1cmVfcGFyc2Vfc3RyaW5nIChyLCAmdywgJnIsIFRSVUUpKSkgeworICAgIEdTVF9XQVJOSU5HICgiRmFpbGVkIHRvIHBhcnNlIHN0cnVjdHVyZSBzdHJpbmcgJyVzJyIsIHN0cmluZyk7CisgICAgZ290byBlcnJvcjsKKyAgfQorCisgIHNhdmUgPSAqdzsKKyAgKncgPSAnXDAnOworICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX2VtcHR5X25ldyAobmFtZSk7CisgICp3ID0gc2F2ZTsKKworICBpZiAoR19VTkxJS0VMWSAoc3RydWN0dXJlID09IE5VTEwpKQorICAgIGdvdG8gZXJyb3I7CisKKyAgZG8geworICAgIHdoaWxlICgqciAmJiAoZ19hc2NpaV9pc3NwYWNlICgqcikgfHwgKHJbMF0gPT0gJ1xcJworICAgICAgICAgICAgICAgICYmIGdfYXNjaWlfaXNzcGFjZSAoclsxXSkpKSkKKyAgICAgIHIrKzsKKyAgICBpZiAoKnIgPT0gJzsnKSB7CisgICAgICAvKiBlbmQgb2Ygc3RydWN0dXJlLCBnZXQgdGhlIG5leHQgY2hhciBhbmQgZmluaXNoICovCisgICAgICByKys7CisgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKCpyID09ICdcMCcpIHsKKyAgICAgIC8qIGFjY2VwdCBcMCBhcyBlbmQgZGVsaW1pdGVyICovCisgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKEdfVU5MSUtFTFkgKCpyICE9ICcsJykpIHsKKyAgICAgIEdTVF9XQVJOSU5HICgiRmFpbGVkIHRvIGZpbmQgZGVsaW1pdGVyLCByPSVzIiwgcik7CisgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICByKys7CisgICAgd2hpbGUgKCpyICYmIChnX2FzY2lpX2lzc3BhY2UgKCpyKSB8fCAoclswXSA9PSAnXFwnCisgICAgICAgICAgICAgICAgJiYgZ19hc2NpaV9pc3NwYWNlIChyWzFdKSkpKQorICAgICAgcisrOworCisgICAgbWVtc2V0ICgmZmllbGQsIDAsIHNpemVvZiAoZmllbGQpKTsKKyAgICBpZiAoR19VTkxJS0VMWSAoIWdzdF9zdHJ1Y3R1cmVfcGFyc2VfZmllbGQgKHIsICZyLCAmZmllbGQpKSkgeworICAgICAgR1NUX1dBUk5JTkcgKCJGYWlsZWQgdG8gcGFyc2UgZmllbGQsIHI9JXMiLCByKTsKKyAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X2ZpZWxkIChzdHJ1Y3R1cmUsICZmaWVsZCk7CisgIH0gd2hpbGUgKFRSVUUpOworCisgIGlmIChlbmQpCisgICAgKmVuZCA9IChjaGFyICopIHN0cmluZyArIChyIC0gY29weSk7CisgIGVsc2UgaWYgKCpyKQorICAgIGdfd2FybmluZyAoImdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgZGlkIG5vdCBjb25zdW1lIHdob2xlIHN0cmluZywiCisgICAgICAgICIgYnV0IGNhbGxlciBkaWQgbm90IHByb3ZpZGUgZW5kIHBvaW50ZXIgKFwiJXNcIikiLCBzdHJpbmcpOworCisgIGdfZnJlZSAoY29weSk7CisgIHJldHVybiBzdHJ1Y3R1cmU7CisKK2Vycm9yOgorICBpZiAoc3RydWN0dXJlKQorICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoc3RydWN0dXJlKTsKKyAgZ19mcmVlIChjb3B5KTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitnc3Rfc3RydWN0dXJlX3RyYW5zZm9ybV90b19zdHJpbmcgKGNvbnN0IEdWYWx1ZSAqIHNyY192YWx1ZSwKKyAgICBHVmFsdWUgKiBkZXN0X3ZhbHVlKQoreworICBnX3JldHVybl9pZl9mYWlsIChzcmNfdmFsdWUgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKGRlc3RfdmFsdWUgIT0gTlVMTCk7CisKKyAgZGVzdF92YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIgPQorICAgICAgZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKHNyY192YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIpOworfQorCitzdGF0aWMgR3N0U3RydWN0dXJlICoKK2dzdF9zdHJ1Y3R1cmVfY29weV9jb25kaXRpb25hbCAoY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlKQoreworICBpZiAoc3RydWN0dXJlKQorICAgIHJldHVybiBnc3Rfc3RydWN0dXJlX2NvcHkgKHN0cnVjdHVyZSk7CisgIHJldHVybiBOVUxMOworfQorCisvKiBmaXhhdGUgdXRpbGl0eSBmdW5jdGlvbnMgKi8KKworLyoqCisgKiBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ludDoKKyAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQorICogQGZpZWxkX25hbWU6IGEgZmllbGQgaW4gQHN0cnVjdHVyZQorICogQHRhcmdldDogdGhlIHRhcmdldCB2YWx1ZSBvZiB0aGUgZml4YXRpb24KKyAqCisgKiBGaXhhdGVzIGEgI0dzdFN0cnVjdHVyZSBieSBjaGFuZ2luZyB0aGUgZ2l2ZW4gZmllbGQgdG8gdGhlIG5lYXJlc3QKKyAqIGludGVnZXIgdG8gQHRhcmdldCB0aGF0IGlzIGEgc3Vic2V0IG9mIHRoZSBleGlzdGluZyBmaWVsZC4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBzdHJ1Y3R1cmUgY291bGQgYmUgZml4YXRlZAorICovCitnYm9vbGVhbgorZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9pbnQgKEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwKKyAgICBjb25zdCBjaGFyICpmaWVsZF9uYW1lLCBpbnQgdGFyZ2V0KQoreworICBjb25zdCBHVmFsdWUgKnZhbHVlOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZCAoc3RydWN0dXJlLCBmaWVsZF9uYW1lKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoSVNfTVVUQUJMRSAoc3RydWN0dXJlKSwgRkFMU0UpOworCisgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgZmllbGRfbmFtZSk7CisKKyAgaWYgKEdfVkFMVUVfVFlQRSAodmFsdWUpID09IEdfVFlQRV9JTlQpIHsKKyAgICAvKiBhbHJlYWR5IGZpeGVkICovCisgICAgcmV0dXJuIEZBTFNFOworICB9IGVsc2UgaWYgKEdfVkFMVUVfVFlQRSAodmFsdWUpID09IEdTVF9UWVBFX0lOVF9SQU5HRSkgeworICAgIGludCB4OworCisgICAgeCA9IGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAodmFsdWUpOworICAgIGlmICh0YXJnZXQgPCB4KQorICAgICAgdGFyZ2V0ID0geDsKKyAgICB4ID0gZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWF4ICh2YWx1ZSk7CisgICAgaWYgKHRhcmdldCA+IHgpCisgICAgICB0YXJnZXQgPSB4OworICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzdHJ1Y3R1cmUsIGZpZWxkX25hbWUsIEdfVFlQRV9JTlQsIHRhcmdldCwgTlVMTCk7CisgICAgcmV0dXJuIFRSVUU7CisgIH0gZWxzZSBpZiAoR19WQUxVRV9UWVBFICh2YWx1ZSkgPT0gR1NUX1RZUEVfTElTVCkgeworICAgIGNvbnN0IEdWYWx1ZSAqbGlzdF92YWx1ZTsKKyAgICBpbnQgaSwgbjsKKyAgICBpbnQgYmVzdCA9IDA7CisgICAgaW50IGJlc3RfaW5kZXggPSAtMTsKKworICAgIG4gPSBnc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZSAodmFsdWUpOworICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgIGxpc3RfdmFsdWUgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKHZhbHVlLCBpKTsKKyAgICAgIGlmIChHX1ZBTFVFX1RZUEUgKGxpc3RfdmFsdWUpID09IEdfVFlQRV9JTlQpIHsKKyAgICAgICAgaW50IHggPSBnc3RfZ192YWx1ZV9nZXRfaW50X3VuY2hlY2tlZCAobGlzdF92YWx1ZSk7CisKKyAgICAgICAgaWYgKGJlc3RfaW5kZXggPT0gLTEgfHwgKEFCUyAodGFyZ2V0IC0geCkgPCBBQlMgKHRhcmdldCAtIGJlc3QpKSkgeworICAgICAgICAgIGJlc3RfaW5kZXggPSBpOworICAgICAgICAgIGJlc3QgPSB4OworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGlmIChiZXN0X2luZGV4ICE9IC0xKSB7CisgICAgICBnc3Rfc3RydWN0dXJlX3NldCAoc3RydWN0dXJlLCBmaWVsZF9uYW1lLCBHX1RZUEVfSU5ULCBiZXN0LCBOVUxMKTsKKyAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKworICByZXR1cm4gRkFMU0U7Cit9CisKKy8qKgorICogZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9kb3VibGU6CisgKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKKyAqIEBmaWVsZF9uYW1lOiBhIGZpZWxkIGluIEBzdHJ1Y3R1cmUKKyAqIEB0YXJnZXQ6IHRoZSB0YXJnZXQgdmFsdWUgb2YgdGhlIGZpeGF0aW9uCisgKgorICogRml4YXRlcyBhICNHc3RTdHJ1Y3R1cmUgYnkgY2hhbmdpbmcgdGhlIGdpdmVuIGZpZWxkIHRvIHRoZSBuZWFyZXN0CisgKiBkb3VibGUgdG8gQHRhcmdldCB0aGF0IGlzIGEgc3Vic2V0IG9mIHRoZSBleGlzdGluZyBmaWVsZC4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBzdHJ1Y3R1cmUgY291bGQgYmUgZml4YXRlZAorICovCitnYm9vbGVhbgorZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9kb3VibGUgKEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwKKyAgICBjb25zdCBjaGFyICpmaWVsZF9uYW1lLCBkb3VibGUgdGFyZ2V0KQoreworICBjb25zdCBHVmFsdWUgKnZhbHVlOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZCAoc3RydWN0dXJlLCBmaWVsZF9uYW1lKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoSVNfTVVUQUJMRSAoc3RydWN0dXJlKSwgRkFMU0UpOworCisgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgZmllbGRfbmFtZSk7CisKKyAgaWYgKEdfVkFMVUVfVFlQRSAodmFsdWUpID09IEdfVFlQRV9ET1VCTEUpIHsKKyAgICAvKiBhbHJlYWR5IGZpeGVkICovCisgICAgcmV0dXJuIEZBTFNFOworICB9IGVsc2UgaWYgKEdfVkFMVUVfVFlQRSAodmFsdWUpID09IEdTVF9UWVBFX0RPVUJMRV9SQU5HRSkgeworICAgIGRvdWJsZSB4OworCisgICAgeCA9IGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21pbiAodmFsdWUpOworICAgIGlmICh0YXJnZXQgPCB4KQorICAgICAgdGFyZ2V0ID0geDsKKyAgICB4ID0gZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWF4ICh2YWx1ZSk7CisgICAgaWYgKHRhcmdldCA+IHgpCisgICAgICB0YXJnZXQgPSB4OworICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzdHJ1Y3R1cmUsIGZpZWxkX25hbWUsIEdfVFlQRV9ET1VCTEUsIHRhcmdldCwgTlVMTCk7CisgICAgcmV0dXJuIFRSVUU7CisgIH0gZWxzZSBpZiAoR19WQUxVRV9UWVBFICh2YWx1ZSkgPT0gR1NUX1RZUEVfTElTVCkgeworICAgIGNvbnN0IEdWYWx1ZSAqbGlzdF92YWx1ZTsKKyAgICBpbnQgaSwgbjsKKyAgICBkb3VibGUgYmVzdCA9IDA7CisgICAgaW50IGJlc3RfaW5kZXggPSAtMTsKKworICAgIG4gPSBnc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZSAodmFsdWUpOworICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgIGxpc3RfdmFsdWUgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKHZhbHVlLCBpKTsKKyAgICAgIGlmIChHX1ZBTFVFX1RZUEUgKGxpc3RfdmFsdWUpID09IEdfVFlQRV9ET1VCTEUpIHsKKyAgICAgICAgZG91YmxlIHggPSBnc3RfZ192YWx1ZV9nZXRfZG91YmxlX3VuY2hlY2tlZCAobGlzdF92YWx1ZSk7CisKKyAgICAgICAgaWYgKGJlc3RfaW5kZXggPT0gLTEgfHwgKEFCUyAodGFyZ2V0IC0geCkgPCBBQlMgKHRhcmdldCAtIGJlc3QpKSkgeworICAgICAgICAgIGJlc3RfaW5kZXggPSBpOworICAgICAgICAgIGJlc3QgPSB4OworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGlmIChiZXN0X2luZGV4ICE9IC0xKSB7CisgICAgICBnc3Rfc3RydWN0dXJlX3NldCAoc3RydWN0dXJlLCBmaWVsZF9uYW1lLCBHX1RZUEVfRE9VQkxFLCBiZXN0LCBOVUxMKTsKKyAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKworICByZXR1cm4gRkFMU0U7CisKK30KKworLyoqCisgKiBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9ib29sZWFuOgorICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCisgKiBAZmllbGRfbmFtZTogYSBmaWVsZCBpbiBAc3RydWN0dXJlCisgKiBAdGFyZ2V0OiB0aGUgdGFyZ2V0IHZhbHVlIG9mIHRoZSBmaXhhdGlvbgorICoKKyAqIEZpeGF0ZXMgYSAjR3N0U3RydWN0dXJlIGJ5IGNoYW5naW5nIHRoZSBnaXZlbiBAZmllbGRfbmFtZSBmaWVsZCB0byB0aGUgZ2l2ZW4KKyAqIEB0YXJnZXQgYm9vbGVhbiBpZiB0aGF0IGZpZWxkIGlzIG5vdCBmaXhlZCB5ZXQuCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgc3RydWN0dXJlIGNvdWxkIGJlIGZpeGF0ZWQKKyAqLworZ2Jvb2xlYW4KK2dzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX2Jvb2xlYW4gKEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwKKyAgICBjb25zdCBjaGFyICpmaWVsZF9uYW1lLCBnYm9vbGVhbiB0YXJnZXQpCit7CisgIGNvbnN0IEdWYWx1ZSAqdmFsdWU7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkIChzdHJ1Y3R1cmUsIGZpZWxkX25hbWUpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChJU19NVVRBQkxFIChzdHJ1Y3R1cmUpLCBGQUxTRSk7CisKKyAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoc3RydWN0dXJlLCBmaWVsZF9uYW1lKTsKKworICBpZiAoR19WQUxVRV9UWVBFICh2YWx1ZSkgPT0gR19UWVBFX0JPT0xFQU4pIHsKKyAgICAvKiBhbHJlYWR5IGZpeGVkICovCisgICAgcmV0dXJuIEZBTFNFOworICB9IGVsc2UgaWYgKEdfVkFMVUVfVFlQRSAodmFsdWUpID09IEdTVF9UWVBFX0xJU1QpIHsKKyAgICBjb25zdCBHVmFsdWUgKmxpc3RfdmFsdWU7CisgICAgaW50IGksIG47CisgICAgaW50IGJlc3QgPSAwOworICAgIGludCBiZXN0X2luZGV4ID0gLTE7CisKKyAgICBuID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUgKHZhbHVlKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICBsaXN0X3ZhbHVlID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlICh2YWx1ZSwgaSk7CisgICAgICBpZiAoR19WQUxVRV9UWVBFIChsaXN0X3ZhbHVlKSA9PSBHX1RZUEVfQk9PTEVBTikgeworICAgICAgICBnYm9vbGVhbiB4ID0gZ3N0X2dfdmFsdWVfZ2V0X2Jvb2xlYW5fdW5jaGVja2VkIChsaXN0X3ZhbHVlKTsKKworICAgICAgICBpZiAoYmVzdF9pbmRleCA9PSAtMSB8fCB4ID09IHRhcmdldCkgeworICAgICAgICAgIGJlc3RfaW5kZXggPSBpOworICAgICAgICAgIGJlc3QgPSB4OworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGlmIChiZXN0X2luZGV4ICE9IC0xKSB7CisgICAgICBnc3Rfc3RydWN0dXJlX3NldCAoc3RydWN0dXJlLCBmaWVsZF9uYW1lLCBHX1RZUEVfQk9PTEVBTiwgYmVzdCwgTlVMTCk7CisgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgcmV0dXJuIEZBTFNFOworfQorCisvKioKKyAqIGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX3N0cmluZzoKKyAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQorICogQGZpZWxkX25hbWU6IGEgZmllbGQgaW4gQHN0cnVjdHVyZQorICogQHRhcmdldDogdGhlIHRhcmdldCB2YWx1ZSBvZiB0aGUgZml4YXRpb24KKyAqCisgKiBGaXhhdGVzIGEgI0dzdFN0cnVjdHVyZSBieSBjaGFuZ2luZyB0aGUgZ2l2ZW4gQGZpZWxkX25hbWUgZmllbGQgdG8gdGhlIGdpdmVuCisgKiBAdGFyZ2V0IHN0cmluZyBpZiB0aGF0IGZpZWxkIGlzIG5vdCBmaXhlZCB5ZXQuCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgc3RydWN0dXJlIGNvdWxkIGJlIGZpeGF0ZWQKKyAqCisgKiBTaW5jZTogMC4xMC4zMAorICovCitnYm9vbGVhbgorZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfc3RyaW5nIChHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCisgICAgY29uc3QgZ2NoYXIgKiBmaWVsZF9uYW1lLCBjb25zdCBnY2hhciAqIHRhcmdldCkKK3sKKyAgY29uc3QgR1ZhbHVlICp2YWx1ZTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQgKHN0cnVjdHVyZSwgZmllbGRfbmFtZSksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKElTX01VVEFCTEUgKHN0cnVjdHVyZSksIEZBTFNFKTsKKworICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsIGZpZWxkX25hbWUpOworCisgIGlmIChHX1ZBTFVFX1RZUEUgKHZhbHVlKSA9PSBHX1RZUEVfU1RSSU5HKSB7CisgICAgLyogYWxyZWFkeSBmaXhlZCAqLworICAgIHJldHVybiBGQUxTRTsKKyAgfSBlbHNlIGlmIChHX1ZBTFVFX1RZUEUgKHZhbHVlKSA9PSBHU1RfVFlQRV9MSVNUKSB7CisgICAgY29uc3QgR1ZhbHVlICpsaXN0X3ZhbHVlOworICAgIGludCBpLCBuOworICAgIGNvbnN0IGdjaGFyICpiZXN0ID0gTlVMTDsKKyAgICBpbnQgYmVzdF9pbmRleCA9IC0xOworCisgICAgbiA9IGdzdF92YWx1ZV9saXN0X2dldF9zaXplICh2YWx1ZSk7CisgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgbGlzdF92YWx1ZSA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAodmFsdWUsIGkpOworICAgICAgaWYgKEdfVkFMVUVfVFlQRSAobGlzdF92YWx1ZSkgPT0gR19UWVBFX1NUUklORykgeworICAgICAgICBjb25zdCBnY2hhciAqeCA9IGdfdmFsdWVfZ2V0X3N0cmluZyAobGlzdF92YWx1ZSk7CisKKyAgICAgICAgaWYgKGJlc3RfaW5kZXggPT0gLTEgfHwgZ19zdHJfZXF1YWwgKHgsIHRhcmdldCkpIHsKKyAgICAgICAgICBiZXN0X2luZGV4ID0gaTsKKyAgICAgICAgICBiZXN0ID0geDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBpZiAoYmVzdF9pbmRleCAhPSAtMSkgeworICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHN0cnVjdHVyZSwgZmllbGRfbmFtZSwgR19UWVBFX1NUUklORywgYmVzdCwgTlVMTCk7CisgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgcmV0dXJuIEZBTFNFOworfQorCisvKioKKyAqIGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfZnJhY3Rpb246CisgKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKKyAqIEBmaWVsZF9uYW1lOiBhIGZpZWxkIGluIEBzdHJ1Y3R1cmUKKyAqIEB0YXJnZXRfbnVtZXJhdG9yOiBUaGUgbnVtZXJhdG9yIG9mIHRoZSB0YXJnZXQgdmFsdWUgb2YgdGhlIGZpeGF0aW9uCisgKiBAdGFyZ2V0X2Rlbm9taW5hdG9yOiBUaGUgZGVub21pbmF0b3Igb2YgdGhlIHRhcmdldCB2YWx1ZSBvZiB0aGUgZml4YXRpb24KKyAqCisgKiBGaXhhdGVzIGEgI0dzdFN0cnVjdHVyZSBieSBjaGFuZ2luZyB0aGUgZ2l2ZW4gZmllbGQgdG8gdGhlIG5lYXJlc3QKKyAqIGZyYWN0aW9uIHRvIEB0YXJnZXRfbnVtZXJhdG9yL0B0YXJnZXRfZGVub21pbmF0b3IgdGhhdCBpcyBhIHN1YnNldAorICogb2YgdGhlIGV4aXN0aW5nIGZpZWxkLgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIHN0cnVjdHVyZSBjb3VsZCBiZSBmaXhhdGVkCisgKi8KK2dib29sZWFuCitnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ZyYWN0aW9uIChHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCisgICAgY29uc3QgY2hhciAqZmllbGRfbmFtZSwgY29uc3QgZ2ludCB0YXJnZXRfbnVtZXJhdG9yLAorICAgIGNvbnN0IGdpbnQgdGFyZ2V0X2Rlbm9taW5hdG9yKQoreworICBjb25zdCBHVmFsdWUgKnZhbHVlOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZCAoc3RydWN0dXJlLCBmaWVsZF9uYW1lKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoSVNfTVVUQUJMRSAoc3RydWN0dXJlKSwgRkFMU0UpOworCisgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgZmllbGRfbmFtZSk7CisKKyAgaWYgKEdfVkFMVUVfVFlQRSAodmFsdWUpID09IEdTVF9UWVBFX0ZSQUNUSU9OKSB7CisgICAgLyogYWxyZWFkeSBmaXhlZCAqLworICAgIHJldHVybiBGQUxTRTsKKyAgfSBlbHNlIGlmIChHX1ZBTFVFX1RZUEUgKHZhbHVlKSA9PSBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSkgeworICAgIGNvbnN0IEdWYWx1ZSAqeCwgKm5ld192YWx1ZTsKKyAgICBHVmFsdWUgdGFyZ2V0ID0geyAwIH07CisgICAgZ192YWx1ZV9pbml0ICgmdGFyZ2V0LCBHU1RfVFlQRV9GUkFDVElPTik7CisgICAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJnRhcmdldCwgdGFyZ2V0X251bWVyYXRvciwgdGFyZ2V0X2Rlbm9taW5hdG9yKTsKKworICAgIG5ld192YWx1ZSA9ICZ0YXJnZXQ7CisgICAgeCA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWluICh2YWx1ZSk7CisgICAgaWYgKGdzdF92YWx1ZV9jb21wYXJlICgmdGFyZ2V0LCB4KSA9PSBHU1RfVkFMVUVfTEVTU19USEFOKQorICAgICAgbmV3X3ZhbHVlID0geDsKKyAgICB4ID0gZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9tYXggKHZhbHVlKTsKKyAgICBpZiAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZ0YXJnZXQsIHgpID09IEdTVF9WQUxVRV9HUkVBVEVSX1RIQU4pCisgICAgICBuZXdfdmFsdWUgPSB4OworCisgICAgZ3N0X3N0cnVjdHVyZV9zZXRfdmFsdWUgKHN0cnVjdHVyZSwgZmllbGRfbmFtZSwgbmV3X3ZhbHVlKTsKKyAgICBnX3ZhbHVlX3Vuc2V0ICgmdGFyZ2V0KTsKKyAgICByZXR1cm4gVFJVRTsKKyAgfSBlbHNlIGlmIChHX1ZBTFVFX1RZUEUgKHZhbHVlKSA9PSBHU1RfVFlQRV9MSVNUKSB7CisgICAgY29uc3QgR1ZhbHVlICpsaXN0X3ZhbHVlOworICAgIGludCBpLCBuOworICAgIGNvbnN0IEdWYWx1ZSAqYmVzdCA9IE5VTEw7CisgICAgZ2RvdWJsZSB0YXJnZXQ7CisgICAgZ2RvdWJsZSBjdXJfZGlmZjsKKyAgICBnZG91YmxlIGJlc3RfZGlmZiA9IEdfTUFYRE9VQkxFOworCisgICAgdGFyZ2V0ID0gKGdkb3VibGUpIHRhcmdldF9udW1lcmF0b3IgLyAoZ2RvdWJsZSkgdGFyZ2V0X2Rlbm9taW5hdG9yOworCisgICAgR1NUX0RFQlVHICgidGFyZ2V0ICVnLCBiZXN0ICVnIiwgdGFyZ2V0LCBiZXN0X2RpZmYpOworCisgICAgYmVzdCA9IE5VTEw7CisKKyAgICBuID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUgKHZhbHVlKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICBsaXN0X3ZhbHVlID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlICh2YWx1ZSwgaSk7CisgICAgICBpZiAoR19WQUxVRV9UWVBFIChsaXN0X3ZhbHVlKSA9PSBHU1RfVFlQRV9GUkFDVElPTikgeworICAgICAgICBnaW50IG51bSwgZGVub207CisgICAgICAgIGdkb3VibGUgbGlzdF9kb3VibGU7CisKKyAgICAgICAgbnVtID0gZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9udW1lcmF0b3IgKGxpc3RfdmFsdWUpOworICAgICAgICBkZW5vbSA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3IgKGxpc3RfdmFsdWUpOworCisgICAgICAgIGxpc3RfZG91YmxlID0gKChnZG91YmxlKSBudW0gLyAoZ2RvdWJsZSkgZGVub20pOworICAgICAgICBjdXJfZGlmZiA9IHRhcmdldCAtIGxpc3RfZG91YmxlOworCisgICAgICAgIEdTVF9ERUJVRyAoImN1cnIgZGlmZiAlZywgbGlzdCAlZyIsIGN1cl9kaWZmLCBsaXN0X2RvdWJsZSk7CisKKyAgICAgICAgaWYgKGN1cl9kaWZmIDwgMCkKKyAgICAgICAgICBjdXJfZGlmZiA9IC1jdXJfZGlmZjsKKworICAgICAgICBpZiAoIWJlc3QgfHwgY3VyX2RpZmYgPCBiZXN0X2RpZmYpIHsKKyAgICAgICAgICBHU1RfREVCVUcgKCJuZXcgYmVzdCAlZyIsIGxpc3RfZG91YmxlKTsKKyAgICAgICAgICBiZXN0ID0gbGlzdF92YWx1ZTsKKyAgICAgICAgICBiZXN0X2RpZmYgPSBjdXJfZGlmZjsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBpZiAoYmVzdCAhPSBOVUxMKSB7CisgICAgICBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAoc3RydWN0dXJlLCBmaWVsZF9uYW1lLCBiZXN0KTsKKyAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgfQorCisgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFuCitkZWZhdWx0X2ZpeGF0ZSAoR1F1YXJrIGZpZWxkX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgR3N0U3RydWN0dXJlICpzID0gZGF0YTsKKyAgR1ZhbHVlIHYgPSB7IDAgfTsKKworICBpZiAoZ3N0X3ZhbHVlX2ZpeGF0ZSAoJnYsIHZhbHVlKSkgeworICAgIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlIChzLCBmaWVsZF9pZCwgJnYpOworICAgIGdfdmFsdWVfdW5zZXQgKCZ2KTsKKyAgfQorICByZXR1cm4gVFJVRTsKK30KKworLyoqCisgKiBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZDoKKyAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQorICogQGZpZWxkX25hbWU6IGEgZmllbGQgaW4gQHN0cnVjdHVyZQorICoKKyAqIEZpeGF0ZXMgYSAjR3N0U3RydWN0dXJlIGJ5IGNoYW5naW5nIHRoZSBnaXZlbiBmaWVsZCB3aXRoIGl0cyBmaXhhdGVkIHZhbHVlLgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIHN0cnVjdHVyZSBmaWVsZCBjb3VsZCBiZSBmaXhhdGVkCisgKi8KK2dib29sZWFuCitnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZCAoR3N0U3RydWN0dXJlICogc3RydWN0dXJlLCBjb25zdCBjaGFyICpmaWVsZF9uYW1lKQoreworICBHc3RTdHJ1Y3R1cmVGaWVsZCAqZmllbGQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChJU19NVVRBQkxFIChzdHJ1Y3R1cmUpLCBGQUxTRSk7CisKKyAgaWYgKCEoZmllbGQgPSBnc3Rfc3RydWN0dXJlX2dldF9maWVsZCAoc3RydWN0dXJlLCBmaWVsZF9uYW1lKSkpCisgICAgcmV0dXJuIEZBTFNFOworCisgIHJldHVybiBkZWZhdWx0X2ZpeGF0ZSAoZmllbGQtPm5hbWUsICZmaWVsZC0+dmFsdWUsIHN0cnVjdHVyZSk7Cit9CisKKy8qIG91ciB2ZXJ5IG93biB2ZXJzaW9uIG9mIEdfVkFMVUVfTENPUFkgdGhhdCBhbGxvd3MgTlVMTCByZXR1cm4gbG9jYXRpb25zCisgKiAodXNlZnVsIGZvciBtZXNzYWdlIHBhcnNpbmcgZnVuY3Rpb25zIHdoZXJlIHRoZSByZXR1cm4gbG9jYXRpb24gaXMgdXNlcgorICogc3VwcGxpZWQgYW5kIHRoZSB1c2VyIG1heSBwYXNzIE5VTEwgaWYgdGhlIHZhbHVlIGlzbid0IG9mIGludGVyZXN0KSAqLworI2RlZmluZSBHU1RfVkFMVUVfTENPUFkodmFsdWUsIHZhcl9hcmdzLCBmbGFncywgX19lcnJvciwgZmllbGRuYW1lKSAgICAgICAgICAgXAorR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBjb25zdCBHVmFsdWUgKl92YWx1ZSA9ICh2YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBndWludCBfZmxhZ3MgPSAoZmxhZ3MpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBHVHlwZSBfdmFsdWVfdHlwZSA9IEdfVkFMVUVfVFlQRSAoX3ZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBHVHlwZVZhbHVlVGFibGUgKl92dGFibGUgPSBnX3R5cGVfdmFsdWVfdGFibGVfcGVlayAoX3ZhbHVlX3R5cGUpOyAgICAgICAgICAgXAorICBnY2hhciAqX2xjb3B5X2Zvcm1hdCA9IF92dGFibGUtPmxjb3B5X2Zvcm1hdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBHVHlwZUNWYWx1ZSBfY3ZhbHVlc1tHX1ZBTFVFX0NPTExFQ1RfRk9STUFUX01BWF9MRU5HVEhdID0geyB7IDAsIH0sIH07ICAgICAgXAorICBndWludCBfbl92YWx1ZXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB3aGlsZSAoKl9sY29weV9mb3JtYXQgIT0gJ1wwJykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdfYXNzZXJ0ICgqX2xjb3B5X2Zvcm1hdCA9PSBHX1ZBTFVFX0NPTExFQ1RfUE9JTlRFUik7ICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9jdmFsdWVzW19uX3ZhbHVlcysrXS52X3BvaW50ZXIgPSB2YV9hcmcgKCh2YXJfYXJncyksIGdwb2ludGVyKTsgICAgICAgICAgXAorICAgIF9sY29weV9mb3JtYXQrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAoX25fdmFsdWVzID09IDIgJiYgISFfY3ZhbHVlc1swXS52X3BvaW50ZXIgIT0gISFfY3ZhbHVlc1sxXS52X3BvaW50ZXIpIHsgXAorICAgICooX19lcnJvcikgPSBnX3N0cmR1cF9wcmludGYgKCJlaXRoZXIgYWxsIG9yIG5vbmUgb2YgdGhlIHJldHVybiAiICAgICAgICAgXAorICAgICAgICAibG9jYXRpb25zIGZvciBmaWVsZCAnJXMnIG5lZWQgdG8gYmUgTlVMTCIsIGZpZWxkbmFtZSk7ICAgICAgICAgICAgICAgXAorICB9IGVsc2UgaWYgKF9jdmFsdWVzWzBdLnZfcG9pbnRlciAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICooX19lcnJvcikgPSBfdnRhYmxlLT5sY29weV92YWx1ZSAoX3ZhbHVlLCBfbl92YWx1ZXMsIF9jdmFsdWVzLCBfZmxhZ3MpOyAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSBHX1NUTVRfRU5ECisKKy8qKgorICogZ3N0X3N0cnVjdHVyZV9nZXRfdmFsaXN0OgorICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCisgKiBAZmlyc3RfZmllbGRuYW1lOiB0aGUgbmFtZSBvZiB0aGUgZmlyc3QgZmllbGQgdG8gcmVhZAorICogQGFyZ3M6IHZhcmlhYmxlIGFyZ3VtZW50cworICoKKyAqIFBhcnNlcyB0aGUgdmFyaWFibGUgYXJndW1lbnRzIGFuZCByZWFkcyBmaWVsZHMgZnJvbSBAc3RydWN0dXJlIGFjY29yZGluZ2x5LgorICogdmFsaXN0LXZhcmlhbnQgb2YgZ3N0X3N0cnVjdHVyZV9nZXQoKS4gTG9vayBhdCB0aGUgZG9jdW1lbnRhdGlvbiBvZgorICogZ3N0X3N0cnVjdHVyZV9nZXQoKSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFJldHVybnM6IFRSVUUsIG9yIEZBTFNFIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gcmVhZGluZyBhbnkgb2YgdGhlIGZpZWxkcworICoKKyAqIFNpbmNlOiAwLjEwLjI0CisgKi8KK2dib29sZWFuCitnc3Rfc3RydWN0dXJlX2dldF92YWxpc3QgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwKKyAgICBjb25zdCBjaGFyICpmaXJzdF9maWVsZG5hbWUsIHZhX2xpc3QgYXJncykKK3sKKyAgY29uc3QgY2hhciAqZmllbGRfbmFtZTsKKyAgR1R5cGUgZXhwZWN0ZWRfdHlwZSA9IEdfVFlQRV9JTlZBTElEOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfU1RSVUNUVVJFIChzdHJ1Y3R1cmUpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmaXJzdF9maWVsZG5hbWUgIT0gTlVMTCwgRkFMU0UpOworCisgIGZpZWxkX25hbWUgPSBmaXJzdF9maWVsZG5hbWU7CisgIHdoaWxlIChmaWVsZF9uYW1lKSB7CisgICAgY29uc3QgR1ZhbHVlICp2YWwgPSBOVUxMOworICAgIGdjaGFyICplcnIgPSBOVUxMOworCisgICAgZXhwZWN0ZWRfdHlwZSA9IHZhX2FyZyAoYXJncywgR1R5cGUpOworCisgICAgdmFsID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgZmllbGRfbmFtZSk7CisKKyAgICBpZiAodmFsID09IE5VTEwpCisgICAgICBnb3RvIG5vX3N1Y2hfZmllbGQ7CisKKyAgICBpZiAoR19WQUxVRV9UWVBFICh2YWwpICE9IGV4cGVjdGVkX3R5cGUpCisgICAgICBnb3RvIHdyb25nX3R5cGU7CisKKyAgICBHU1RfVkFMVUVfTENPUFkgKHZhbCwgYXJncywgMCwgJmVyciwgZmllbGRfbmFtZSk7CisgICAgaWYgKGVycikgeworICAgICAgZ193YXJuaW5nICgiJXM6ICVzIiwgR19TVFJGVU5DLCBlcnIpOworICAgICAgZ19mcmVlIChlcnIpOworICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIGZpZWxkX25hbWUgPSB2YV9hcmcgKGFyZ3MsIGNvbnN0IGdjaGFyICopOworICB9CisKKyAgcmV0dXJuIFRSVUU7CisKKy8qIEVSUk9SUyAqLworbm9fc3VjaF9maWVsZDoKKyAgeworICAgIEdTVF9XQVJOSU5HICgiRXhwZWN0ZWQgZmllbGQgJyVzJyBpbiBzdHJ1Y3R1cmU6ICUiIEdTVF9QVFJfRk9STUFULAorICAgICAgICBmaWVsZF9uYW1lLCBzdHJ1Y3R1cmUpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQord3JvbmdfdHlwZToKKyAgeworICAgIEdTVF9XQVJOSU5HICgiRXhwZWN0ZWQgZmllbGQgJyVzJyBpbiBzdHJ1Y3R1cmUgdG8gYmUgb2YgdHlwZSAnJXMnLCBidXQgIgorICAgICAgICAiZmllbGQgd2FzIG9mIHR5cGUgJyVzJzogJSIgR1NUX1BUUl9GT1JNQVQsIGZpZWxkX25hbWUsCisgICAgICAgIEdTVF9TVFJfTlVMTCAoZ190eXBlX25hbWUgKGV4cGVjdGVkX3R5cGUpKSwKKyAgICAgICAgR19WQUxVRV9UWVBFX05BTUUgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsIGZpZWxkX25hbWUpKSwKKyAgICAgICAgc3RydWN0dXJlKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworLyoqCisgKiBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWxpc3Q6CisgKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKKyAqIEBmaXJzdF9maWVsZF9pZDogdGhlIHF1YXJrIG9mIHRoZSBmaXJzdCBmaWVsZCB0byByZWFkCisgKiBAYXJnczogdmFyaWFibGUgYXJndW1lbnRzCisgKgorICogUGFyc2VzIHRoZSB2YXJpYWJsZSBhcmd1bWVudHMgYW5kIHJlYWRzIGZpZWxkcyBmcm9tIEBzdHJ1Y3R1cmUgYWNjb3JkaW5nbHkuCisgKiB2YWxpc3QtdmFyaWFudCBvZiBnc3Rfc3RydWN0dXJlX2lkX2dldCgpLiBMb29rIGF0IHRoZSBkb2N1bWVudGF0aW9uIG9mCisgKiBnc3Rfc3RydWN0dXJlX2lkX2dldCgpIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogUmV0dXJuczogVFJVRSwgb3IgRkFMU0UgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSByZWFkaW5nIGFueSBvZiB0aGUgZmllbGRzCisgKgorICogU2luY2U6IDAuMTAuMjQKKyAqLworZ2Jvb2xlYW4KK2dzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbGlzdCAoY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAorICAgIEdRdWFyayBmaXJzdF9maWVsZF9pZCwgdmFfbGlzdCBhcmdzKQoreworICBHUXVhcmsgZmllbGRfaWQ7CisgIEdUeXBlIGV4cGVjdGVkX3R5cGUgPSBHX1RZUEVfSU5WQUxJRDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1NUUlVDVFVSRSAoc3RydWN0dXJlKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmlyc3RfZmllbGRfaWQgIT0gMCwgRkFMU0UpOworCisgIGZpZWxkX2lkID0gZmlyc3RfZmllbGRfaWQ7CisgIHdoaWxlIChmaWVsZF9pZCkgeworICAgIGNvbnN0IEdWYWx1ZSAqdmFsID0gTlVMTDsKKyAgICBnY2hhciAqZXJyID0gTlVMTDsKKworICAgIGV4cGVjdGVkX3R5cGUgPSB2YV9hcmcgKGFyZ3MsIEdUeXBlKTsKKworICAgIHZhbCA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsIGZpZWxkX2lkKTsKKworICAgIGlmICh2YWwgPT0gTlVMTCkKKyAgICAgIGdvdG8gbm9fc3VjaF9maWVsZDsKKworICAgIGlmIChHX1ZBTFVFX1RZUEUgKHZhbCkgIT0gZXhwZWN0ZWRfdHlwZSkKKyAgICAgIGdvdG8gd3JvbmdfdHlwZTsKKworICAgIEdTVF9WQUxVRV9MQ09QWSAodmFsLCBhcmdzLCAwLCAmZXJyLCBnX3F1YXJrX3RvX3N0cmluZyAoZmllbGRfaWQpKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICBnX3dhcm5pbmcgKCIlczogJXMiLCBHX1NUUkZVTkMsIGVycik7CisgICAgICBnX2ZyZWUgKGVycik7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgZmllbGRfaWQgPSB2YV9hcmcgKGFyZ3MsIEdRdWFyayk7CisgIH0KKworICByZXR1cm4gVFJVRTsKKworLyogRVJST1JTICovCitub19zdWNoX2ZpZWxkOgorICB7CisgICAgR1NUX1dBUk5JTkcgKCJFeHBlY3RlZCBmaWVsZCAnJXMnIGluIHN0cnVjdHVyZTogJSIgR1NUX1BUUl9GT1JNQVQsCisgICAgICAgIEdTVF9TVFJfTlVMTCAoZ19xdWFya190b19zdHJpbmcgKGZpZWxkX2lkKSksIHN0cnVjdHVyZSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit3cm9uZ190eXBlOgorICB7CisgICAgR1NUX1dBUk5JTkcgKCJFeHBlY3RlZCBmaWVsZCAnJXMnIGluIHN0cnVjdHVyZSB0byBiZSBvZiB0eXBlICclcycsIGJ1dCAiCisgICAgICAgICJmaWVsZCB3YXMgb2YgdHlwZSAnJXMnOiAlIiBHU1RfUFRSX0ZPUk1BVCwKKyAgICAgICAgZ19xdWFya190b19zdHJpbmcgKGZpZWxkX2lkKSwKKyAgICAgICAgR1NUX1NUUl9OVUxMIChnX3R5cGVfbmFtZSAoZXhwZWN0ZWRfdHlwZSkpLAorICAgICAgICBHX1ZBTFVFX1RZUEVfTkFNRSAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgZmllbGRfaWQpKSwKKyAgICAgICAgc3RydWN0dXJlKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworLyoqCisgKiBnc3Rfc3RydWN0dXJlX2dldDoKKyAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQorICogQGZpcnN0X2ZpZWxkbmFtZTogdGhlIG5hbWUgb2YgdGhlIGZpcnN0IGZpZWxkIHRvIHJlYWQKKyAqIEAuLi46IHZhcmlhYmxlIGFyZ3VtZW50cworICoKKyAqIFBhcnNlcyB0aGUgdmFyaWFibGUgYXJndW1lbnRzIGFuZCByZWFkcyBmaWVsZHMgZnJvbSBAc3RydWN0dXJlIGFjY29yZGluZ2x5LgorICogVmFyaWFibGUgYXJndW1lbnRzIHNob3VsZCBiZSBpbiB0aGUgZm9ybSBmaWVsZCBuYW1lLCBmaWVsZCB0eXBlCisgKiAoYXMgYSBHVHlwZSksIHBvaW50ZXIocykgdG8gYSB2YXJpYWJsZShzKSB0byBob2xkIHRoZSByZXR1cm4gdmFsdWUocykuCisgKiBUaGUgbGFzdCB2YXJpYWJsZSBhcmd1bWVudCBzaG91bGQgYmUgTlVMTC4KKyAqCisgKiBGb3IgcmVmY291bnRlZCAobWluaSlvYmplY3RzIHlvdSB3aWxsIGFjcXVpcmUgeW91ciBvd24gcmVmZXJlbmNlIHdoaWNoCisgKiB5b3UgbXVzdCByZWxlYXNlIHdpdGggYSBzdWl0YWJsZSBfdW5yZWYoKSB3aGVuIG5vIGxvbmdlciBuZWVkZWQuIEZvcgorICogc3RyaW5ncyBhbmQgYm94ZWQgdHlwZXMgeW91IHdpbGwgYWNxdWlyZSBhIGNvcHkgd2hpY2ggeW91IHdpbGwgbmVlZCB0bworICogcmVsZWFzZSB3aXRoIGVpdGhlciBnX2ZyZWUoKSBvciB0aGUgc3VpdGFibGUgZnVuY3Rpb24gZm9yIHRoZSBib3hlZCB0eXBlLgorICoKKyAqIFJldHVybnM6IEZBTFNFIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gcmVhZGluZyBhbnkgb2YgdGhlIGZpZWxkcyAoZS5nLgorICogICAgIGJlY2F1c2UgdGhlIGZpZWxkIHJlcXVlc3RlZCBkaWQgbm90IGV4aXN0LCBvciB3YXMgb2YgYSB0eXBlIG90aGVyCisgKiAgICAgdGhhbiB0aGUgdHlwZSBzcGVjaWZpZWQpLCBvdGhlcndpc2UgVFJVRS4KKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICovCitnYm9vbGVhbgorZ3N0X3N0cnVjdHVyZV9nZXQgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwgY29uc3QgY2hhciAqZmlyc3RfZmllbGRuYW1lLAorICAgIC4uLikKK3sKKyAgZ2Jvb2xlYW4gcmV0OworICB2YV9saXN0IGFyZ3M7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19TVFJVQ1RVUkUgKHN0cnVjdHVyZSksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpcnN0X2ZpZWxkbmFtZSAhPSBOVUxMLCBGQUxTRSk7CisKKyAgdmFfc3RhcnQgKGFyZ3MsIGZpcnN0X2ZpZWxkbmFtZSk7CisgIHJldCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbGlzdCAoc3RydWN0dXJlLCBmaXJzdF9maWVsZG5hbWUsIGFyZ3MpOworICB2YV9lbmQgKGFyZ3MpOworCisgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICogZ3N0X3N0cnVjdHVyZV9pZF9nZXQ6CisgKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKKyAqIEBmaXJzdF9maWVsZF9pZDogdGhlIHF1YXJrIG9mIHRoZSBmaXJzdCBmaWVsZCB0byByZWFkCisgKiBALi4uOiB2YXJpYWJsZSBhcmd1bWVudHMKKyAqCisgKiBQYXJzZXMgdGhlIHZhcmlhYmxlIGFyZ3VtZW50cyBhbmQgcmVhZHMgZmllbGRzIGZyb20gQHN0cnVjdHVyZSBhY2NvcmRpbmdseS4KKyAqIFZhcmlhYmxlIGFyZ3VtZW50cyBzaG91bGQgYmUgaW4gdGhlIGZvcm0gZmllbGQgaWQgcXVhcmssIGZpZWxkIHR5cGUKKyAqIChhcyBhIEdUeXBlKSwgcG9pbnRlcihzKSB0byBhIHZhcmlhYmxlKHMpIHRvIGhvbGQgdGhlIHJldHVybiB2YWx1ZShzKS4KKyAqIFRoZSBsYXN0IHZhcmlhYmxlIGFyZ3VtZW50IHNob3VsZCBiZSBOVUxMICh0ZWNobmljYWxseSBpdCBzaG91bGQgYmUgYQorICogMCBxdWFyaywgYnV0IHdlIHJlcXVpcmUgTlVMTCBzbyBjb21waWxlcnMgdGhhdCBzdXBwb3J0IGl0IGNhbiBjaGVjayBmb3IKKyAqIHRoZSBOVUxMIHRlcm1pbmF0b3IgYW5kIHdhcm4gaWYgaXQncyBub3QgdGhlcmUpLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMganVzdCBsaWtlIGdzdF9zdHJ1Y3R1cmVfZ2V0KCkgb25seSB0aGF0IGl0IGlzIHNsaWdodGx5CisgKiBtb3JlIGVmZmljaWVudCBzaW5jZSBpdCBzYXZlcyB0aGUgc3RyaW5nLXRvLXF1YXJrIGxvb2t1cCBpbiB0aGUgZ2xvYmFsCisgKiBxdWFyayBoYXNodGFibGUuCisgKgorICogRm9yIHJlZmNvdW50ZWQgKG1pbmkpb2JqZWN0cyB5b3Ugd2lsbCBhY3F1aXJlIHlvdXIgb3duIHJlZmVyZW5jZSB3aGljaAorICogeW91IG11c3QgcmVsZWFzZSB3aXRoIGEgc3VpdGFibGUgX3VucmVmKCkgd2hlbiBubyBsb25nZXIgbmVlZGVkLiBGb3IKKyAqIHN0cmluZ3MgYW5kIGJveGVkIHR5cGVzIHlvdSB3aWxsIGFjcXVpcmUgYSBjb3B5IHdoaWNoIHlvdSB3aWxsIG5lZWQgdG8KKyAqIHJlbGVhc2Ugd2l0aCBlaXRoZXIgZ19mcmVlKCkgb3IgdGhlIHN1aXRhYmxlIGZ1bmN0aW9uIGZvciB0aGUgYm94ZWQgdHlwZS4KKyAqCisgKiBSZXR1cm5zOiBGQUxTRSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtIHJlYWRpbmcgYW55IG9mIHRoZSBmaWVsZHMgKGUuZy4KKyAqICAgICBiZWNhdXNlIHRoZSBmaWVsZCByZXF1ZXN0ZWQgZGlkIG5vdCBleGlzdCwgb3Igd2FzIG9mIGEgdHlwZSBvdGhlcgorICogICAgIHRoYW4gdGhlIHR5cGUgc3BlY2lmaWVkKSwgb3RoZXJ3aXNlIFRSVUUuCisgKgorICogU2luY2U6IDAuMTAuMjQKKyAqLworZ2Jvb2xlYW4KK2dzdF9zdHJ1Y3R1cmVfaWRfZ2V0IChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsIEdRdWFyayBmaXJzdF9maWVsZF9pZCwKKyAgICAuLi4pCit7CisgIGdib29sZWFuIHJldDsKKyAgdmFfbGlzdCBhcmdzOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfU1RSVUNUVVJFIChzdHJ1Y3R1cmUpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmaXJzdF9maWVsZF9pZCAhPSAwLCBGQUxTRSk7CisKKyAgdmFfc3RhcnQgKGFyZ3MsIGZpcnN0X2ZpZWxkX2lkKTsKKyAgcmV0ID0gZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsaXN0IChzdHJ1Y3R1cmUsIGZpcnN0X2ZpZWxkX2lkLCBhcmdzKTsKKyAgdmFfZW5kIChhcmdzKTsKKworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9zdHJ1Y3R1cmVfaXNfZXF1YWxfZm9yZWFjaCAoR1F1YXJrIGZpZWxkX2lkLCBjb25zdCBHVmFsdWUgKiB2YWwyLAorICAgIGdwb2ludGVyIGRhdGEpCit7CisgIGNvbnN0IEdzdFN0cnVjdHVyZSAqc3RydWN0MSA9IChjb25zdCBHc3RTdHJ1Y3R1cmUgKikgZGF0YTsKKyAgY29uc3QgR1ZhbHVlICp2YWwxID0gZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdDEsIGZpZWxkX2lkKTsKKworICBpZiAoR19VTkxJS0VMWSAodmFsMSA9PSBOVUxMKSkKKyAgICByZXR1cm4gRkFMU0U7CisgIGlmIChnc3RfdmFsdWVfY29tcGFyZSAodmFsMSwgdmFsMikgPT0gR1NUX1ZBTFVFX0VRVUFMKSB7CisgICAgcmV0dXJuIFRSVUU7CisgIH0KKworICByZXR1cm4gRkFMU0U7Cit9CisKKy8qKgorICogZ3N0X3N0cnVjdHVyZV9pc19lcXVhbDoKKyAqIEBzdHJ1Y3R1cmUxOiBhICNHc3RTdHJ1Y3R1cmUuCisgKiBAc3RydWN0dXJlMjogYSAjR3N0U3RydWN0dXJlLgorICoKKyAqIFRlc3RzIGlmIHRoZSB0d28gI0dzdFN0cnVjdHVyZSBhcmUgZXF1YWwuCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgdHdvIHN0cnVjdHVyZXMgaGF2ZSB0aGUgc2FtZSBuYW1lIGFuZCBmaWVsZC4KKyAqCisgKiBTaW5jZTogMC4xMC4zNQorICoqLworZ2Jvb2xlYW4KK2dzdF9zdHJ1Y3R1cmVfaXNfZXF1YWwgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZTEsCisgICAgY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlMikKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19TVFJVQ1RVUkUgKHN0cnVjdHVyZTEpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfU1RSVUNUVVJFIChzdHJ1Y3R1cmUyKSwgRkFMU0UpOworCisgIGlmIChzdHJ1Y3R1cmUxLT5uYW1lICE9IHN0cnVjdHVyZTItPm5hbWUpIHsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKyAgaWYgKEdTVF9TVFJVQ1RVUkVfRklFTERTIChzdHJ1Y3R1cmUxKS0+bGVuICE9CisgICAgICBHU1RfU1RSVUNUVVJFX0ZJRUxEUyAoc3RydWN0dXJlMiktPmxlbikgeworICAgIHJldHVybiBGQUxTRTsKKyAgfQorCisgIHJldHVybiBnc3Rfc3RydWN0dXJlX2ZvcmVhY2ggKHN0cnVjdHVyZTEsIGdzdF9zdHJ1Y3R1cmVfaXNfZXF1YWxfZm9yZWFjaCwKKyAgICAgIChncG9pbnRlcikgc3RydWN0dXJlMik7Cit9CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgR3N0U3RydWN0dXJlICpkZXN0OworICBjb25zdCBHc3RTdHJ1Y3R1cmUgKmludGVyc2VjdDsKK30KK0ludGVyc2VjdERhdGE7CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3N0cnVjdHVyZV9pbnRlcnNlY3RfZmllbGQxIChHUXVhcmsgaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbDEsIGdwb2ludGVyIGRhdGEpCit7CisgIEludGVyc2VjdERhdGEgKmlkYXRhID0gKEludGVyc2VjdERhdGEgKikgZGF0YTsKKyAgY29uc3QgR1ZhbHVlICp2YWwyID0gZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKGlkYXRhLT5pbnRlcnNlY3QsIGlkKTsKKworICBpZiAoR19VTkxJS0VMWSAodmFsMiA9PSBOVUxMKSkgeworICAgIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlIChpZGF0YS0+ZGVzdCwgaWQsIHZhbDEpOworICB9IGVsc2UgeworICAgIEdWYWx1ZSBkZXN0X3ZhbHVlID0geyAwIH07CisgICAgaWYgKGdzdF92YWx1ZV9pbnRlcnNlY3QgKCZkZXN0X3ZhbHVlLCB2YWwxLCB2YWwyKSkgeworICAgICAgZ3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsdWUgKGlkYXRhLT5kZXN0LCBpZCwgJmRlc3RfdmFsdWUpOworICAgICAgZ192YWx1ZV91bnNldCAoJmRlc3RfdmFsdWUpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICB9CisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9zdHJ1Y3R1cmVfaW50ZXJzZWN0X2ZpZWxkMiAoR1F1YXJrIGlkLCBjb25zdCBHVmFsdWUgKiB2YWwxLCBncG9pbnRlciBkYXRhKQoreworICBJbnRlcnNlY3REYXRhICppZGF0YSA9IChJbnRlcnNlY3REYXRhICopIGRhdGE7CisgIGNvbnN0IEdWYWx1ZSAqdmFsMiA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChpZGF0YS0+aW50ZXJzZWN0LCBpZCk7CisKKyAgaWYgKEdfVU5MSUtFTFkgKHZhbDIgPT0gTlVMTCkpIHsKKyAgICBnc3Rfc3RydWN0dXJlX2lkX3NldF92YWx1ZSAoaWRhdGEtPmRlc3QsIGlkLCB2YWwxKTsKKyAgfQorICByZXR1cm4gVFJVRTsKK30KKworLyoqCisgKiBnc3Rfc3RydWN0dXJlX2ludGVyc2VjdDoKKyAqIEBzdHJ1Y3QxOiBhICNHc3RTdHJ1Y3R1cmUKKyAqIEBzdHJ1Y3QyOiBhICNHc3RTdHJ1Y3R1cmUKKyAqCisgKiBJbnRlcmVzZWN0cyBAc3RydWN0MSBhbmQgQHN0cnVjdDIgYW5kIHJldHVybnMgdGhlIGludGVyc2VjdGlvbi4KKyAqCisgKiBSZXR1cm5zOiBJbnRlcnNlY3Rpb24gb2YgQHN0cnVjdDEgYW5kIEBzdHJ1Y3QyCisgKgorICogU2luY2U6IDAuMTAuMzUKKyAqLworR3N0U3RydWN0dXJlICoKK2dzdF9zdHJ1Y3R1cmVfaW50ZXJzZWN0IChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3QxLAorICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdDIpCit7CisgIEludGVyc2VjdERhdGEgZGF0YTsKKworICBnX2Fzc2VydCAoc3RydWN0MSAhPSBOVUxMKTsKKyAgZ19hc3NlcnQgKHN0cnVjdDIgIT0gTlVMTCk7CisKKyAgaWYgKEdfVU5MSUtFTFkgKHN0cnVjdDEtPm5hbWUgIT0gc3RydWN0Mi0+bmFtZSkpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgLyogY29weSBmaWVsZHMgZnJvbSBzdHJ1Y3QxIHdoaWNoIHdlIGhhdmUgbm90IGluIHN0cnVjdDIgdG8gdGFyZ2V0CisgICAqIGludGVyc2VjdCBpZiB3ZSBoYXZlIHRoZSBmaWVsZCBpbiBib3RoICovCisgIGRhdGEuZGVzdCA9IGdzdF9zdHJ1Y3R1cmVfaWRfZW1wdHlfbmV3IChzdHJ1Y3QxLT5uYW1lKTsKKyAgZGF0YS5pbnRlcnNlY3QgPSBzdHJ1Y3QyOworICBpZiAoR19VTkxJS0VMWSAoIWdzdF9zdHJ1Y3R1cmVfZm9yZWFjaCAoKEdzdFN0cnVjdHVyZSAqKSBzdHJ1Y3QxLAorICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2ludGVyc2VjdF9maWVsZDEsICZkYXRhKSkpCisgICAgZ290byBlcnJvcjsKKworICAvKiBjb3B5IGZpZWxkcyBmcm9tIHN0cnVjdDIgd2hpY2ggd2UgaGF2ZSBub3QgaW4gc3RydWN0MSB0byB0YXJnZXQgKi8KKyAgZGF0YS5pbnRlcnNlY3QgPSBzdHJ1Y3QxOworICBpZiAoR19VTkxJS0VMWSAoIWdzdF9zdHJ1Y3R1cmVfZm9yZWFjaCAoKEdzdFN0cnVjdHVyZSAqKSBzdHJ1Y3QyLAorICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2ludGVyc2VjdF9maWVsZDIsICZkYXRhKSkpCisgICAgZ290byBlcnJvcjsKKworICByZXR1cm4gZGF0YS5kZXN0OworCitlcnJvcjoKKyAgZ3N0X3N0cnVjdHVyZV9mcmVlIChkYXRhLmRlc3QpOworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfY2Fwc19zdHJ1Y3R1cmVfY2FuX2ludGVyc2VjdF9maWVsZCAoR1F1YXJrIGlkLCBjb25zdCBHVmFsdWUgKiB2YWwxLAorICAgIGdwb2ludGVyIGRhdGEpCit7CisgIEdzdFN0cnVjdHVyZSAqb3RoZXIgPSAoR3N0U3RydWN0dXJlICopIGRhdGE7CisgIGNvbnN0IEdWYWx1ZSAqdmFsMiA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChvdGhlciwgaWQpOworCisgIGlmIChHX0xJS0VMWSAodmFsMikpIHsKKyAgICBpZiAoIWdzdF92YWx1ZV9jYW5faW50ZXJzZWN0ICh2YWwxLCB2YWwyKSkgeworICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0gZWxzZSB7CisgICAgICBnaW50IGVxID0gZ3N0X3ZhbHVlX2NvbXBhcmUgKHZhbDEsIHZhbDIpOworCisgICAgICBpZiAoZXEgPT0gR1NUX1ZBTFVFX1VOT1JERVJFRCkgeworICAgICAgICAvKiB3ZSBuZWVkIHRvIHRyeSBpbnRlcnNldGluZyAqLworICAgICAgICBHVmFsdWUgZGVzdF92YWx1ZSA9IHsgMCB9OworICAgICAgICBpZiAoZ3N0X3ZhbHVlX2ludGVyc2VjdCAoJmRlc3RfdmFsdWUsIHZhbDEsIHZhbDIpKSB7CisgICAgICAgICAgZ192YWx1ZV91bnNldCAoJmRlc3RfdmFsdWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIGlmIChlcSAhPSBHU1RfVkFMVUVfRVFVQUwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gVFJVRTsKK30KKworLyoqCisgKiBnc3Rfc3RydWN0dXJlX2Nhbl9pbnRlcnNlY3Q6CisgKiBAc3RydWN0MTogYSAjR3N0U3RydWN0dXJlCisgKiBAc3RydWN0MjogYSAjR3N0U3RydWN0dXJlCisgKgorICogVHJpZXMgaW50ZXJzZWN0aW5nIEBzdHJ1Y3QxIGFuZCBAc3RydWN0MiBhbmQgcmVwb3J0cyB3aGV0aGVyIHRoZSByZXN1bHQKKyAqIHdvdWxkIG5vdCBiZSBlbXB0eS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBpbnRlcnNlY3Rpb24gd291bGQgbm90IGJlIGVtcHR5CisgKgorICogU2luY2U6IDAuMTAuMzUKKyAqLworZ2Jvb2xlYW4KK2dzdF9zdHJ1Y3R1cmVfY2FuX2ludGVyc2VjdCAoY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0MSwKKyAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3QyKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1NUUlVDVFVSRSAoc3RydWN0MSksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19TVFJVQ1RVUkUgKHN0cnVjdDIpLCBGQUxTRSk7CisKKyAgaWYgKEdfVU5MSUtFTFkgKHN0cnVjdDEtPm5hbWUgIT0gc3RydWN0Mi0+bmFtZSkpCisgICAgcmV0dXJuIEZBTFNFOworCisgIC8qIHRyaWVzIHRvIGludGVyc2VjdCBpZiB3ZSBoYXZlIHRoZSBmaWVsZCBpbiBib3RoICovCisgIGlmIChHX1VOTElLRUxZICghZ3N0X3N0cnVjdHVyZV9mb3JlYWNoICgoR3N0U3RydWN0dXJlICopIHN0cnVjdDEsCisgICAgICAgICAgICAgIGdzdF9jYXBzX3N0cnVjdHVyZV9jYW5faW50ZXJzZWN0X2ZpZWxkLCAoZ3BvaW50ZXIpIHN0cnVjdDIpKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2NhcHNfc3RydWN0dXJlX2lzX3N1YnNldF9maWVsZCAoR1F1YXJrIGZpZWxkX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwKKyAgICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIEdzdFN0cnVjdHVyZSAqc3VwZXJzZXQgPSB1c2VyX2RhdGE7CisgIEdWYWx1ZSBzdWJ0cmFjdGlvbiA9IHsgMCwgfTsKKyAgY29uc3QgR1ZhbHVlICpvdGhlcjsKKworICBpZiAoIShvdGhlciA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdXBlcnNldCwgZmllbGRfaWQpKSkKKyAgICAvKiBmaWVsZCBpcyBtaXNzaW5nIGluIHRoZSBzdXBlcnNldCA9PiBpcyBzdWJzZXQgKi8KKyAgICByZXR1cm4gVFJVRTsKKworICAvKiBlcXVhbCB2YWx1ZXMgYXJlIHN1YnNldCAqLworICBpZiAoZ3N0X3ZhbHVlX2NvbXBhcmUgKG90aGVyLCB2YWx1ZSkgPT0gR1NUX1ZBTFVFX0VRVUFMKQorICAgIHJldHVybiBUUlVFOworCisgIC8qCisgICAqIDEgLSBbMSwyXSA9IGVtcHR5CisgICAqIC0+ICFzdWJzZXQKKyAgICoKKyAgICogWzEsMl0gLSAxID0gMgorICAgKiAgLT4gMSAtIFsxLDJdID0gZW1wdHkKKyAgICogIC0+IHN1YnNldAorICAgKgorICAgKiBbMSwzXSAtIFsxLDJdID0gMworICAgKiAtPiBbMSwyXSAtIFsxLDNdID0gZW1wdHkKKyAgICogLT4gc3Vic2V0CisgICAqCisgICAqIHsxLDJ9IC0gezEsM30gPSAyCisgICAqIC0+IHsxLDN9IC0gezEsMn0gPSAzCisgICAqIC0+ICFzdWJzZXQKKyAgICoKKyAgICogIEZpcnN0IGNhcHMgc3VidHJhY3Rpb24gbmVlZHMgdG8gcmV0dXJuIGEgbm9uLWVtcHR5IHNldCwgc2Vjb25kCisgICAqICBzdWJ0cmFjdGlvbnMgbmVlZHMgdG8gZ2l2ZSBlbiBlbXB0eSBzZXQuCisgICAqLworICBpZiAoZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmc3VidHJhY3Rpb24sIG90aGVyLCB2YWx1ZSkpIHsKKyAgICBnX3ZhbHVlX3Vuc2V0ICgmc3VidHJhY3Rpb24pOworICAgIC8qICFlbXB0eSByZXN1bHQsIHN3YXBwaW5nIG11c3QgYmUgZW1wdHkgKi8KKyAgICBpZiAoIWdzdF92YWx1ZV9zdWJ0cmFjdCAoJnN1YnRyYWN0aW9uLCB2YWx1ZSwgb3RoZXIpKQorICAgICAgcmV0dXJuIFRSVUU7CisKKyAgICBnX3ZhbHVlX3Vuc2V0ICgmc3VidHJhY3Rpb24pOworICB9CisgIHJldHVybiBGQUxTRTsKK30KKworLyoqCisgKiBnc3Rfc3RydWN0dXJlX2lzX3N1YnNldDoKKyAqIEBzdWJzZXQ6IGEgI0dzdFN0cnVjdHVyZQorICogQHN1cGVyc2V0OiBhIHBvdGVudGlhbGx5IGdyZWF0ZXIgI0dzdFN0cnVjdHVyZQorICoKKyAqIENoZWNrcyBpZiBAc3Vic2V0IGlzIGEgc3Vic2V0IG9mIEBzdXBlcnNldCwgaS5lLiBoYXMgdGhlIHNhbWUKKyAqIHN0cnVjdHVyZSBuYW1lIGFuZCBmb3IgYWxsIGZpZWxkcyB0aGF0IGFyZSBleGlzdGluZyBpbiBAc3VwZXJzZXQsCisgKiBAc3Vic2V0IGhhcyBhIHZhbHVlIHRoYXQgaXMgYSBzdWJzZXQgb2YgdGhlIHZhbHVlIGluIEBzdXBlcnNldC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBAc3Vic2V0IGlzIGEgc3Vic2V0IG9mIEBzdXBlcnNldAorICoKKyAqIFNpbmNlOiAwLjEwLjM1CisgKi8KK2dib29sZWFuCitnc3Rfc3RydWN0dXJlX2lzX3N1YnNldCAoY29uc3QgR3N0U3RydWN0dXJlICogc3Vic2V0LAorICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN1cGVyc2V0KQoreworICBpZiAoKHN1cGVyc2V0LT5uYW1lICE9IHN1YnNldC0+bmFtZSkgfHwKKyAgICAgIChnc3Rfc3RydWN0dXJlX25fZmllbGRzIChzdXBlcnNldCkgPiBnc3Rfc3RydWN0dXJlX25fZmllbGRzIChzdWJzZXQpKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgcmV0dXJuIGdzdF9zdHJ1Y3R1cmVfZm9yZWFjaCAoKEdzdFN0cnVjdHVyZSAqKSBzdWJzZXQsCisgICAgICBnc3RfY2Fwc19zdHJ1Y3R1cmVfaXNfc3Vic2V0X2ZpZWxkLCAoZ3BvaW50ZXIpIHN1cGVyc2V0KTsKK30KKworCisvKioKKyAqIGdzdF9zdHJ1Y3R1cmVfZml4YXRlOgorICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCisgKgorICogRml4YXRlIGFsbCB2YWx1ZXMgaW4gQHN0cnVjdHVyZSB1c2luZyBnc3RfdmFsdWVfZml4YXRlKCkuCisgKiBAc3RydWN0dXJlIHdpbGwgYmUgbW9kaWZpZWQgaW4tcGxhY2UgYW5kIHNob3VsZCBiZSB3cml0YWJsZS4KKyAqLwordm9pZAorZ3N0X3N0cnVjdHVyZV9maXhhdGUgKEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1NUUlVDVFVSRSAoc3RydWN0dXJlKSk7CisKKyAgZ3N0X3N0cnVjdHVyZV9mb3JlYWNoIChzdHJ1Y3R1cmUsIGRlZmF1bHRfZml4YXRlLCBzdHJ1Y3R1cmUpOworfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHN0cnVjdHVyZS5oIGIvZ3N0L2dzdHN0cnVjdHVyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZTQyNTMKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0c3RydWN0dXJlLmgKQEAgLTAsMCArMSwyNTggQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDAzIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19HU1RfU1RSVUNUVVJFX0hfXworI2RlZmluZSBfX0dTVF9TVFJVQ1RVUkVfSF9fCisKKyNpbmNsdWRlIDxnc3QvZ3N0Y29uZmlnLmg+CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Y2xvY2suaD4KKyNpbmNsdWRlIDxnc3QvZ3N0ZGF0ZXRpbWUuaD4KKyNpbmNsdWRlIDxnc3QvZ2xpYi1jb21wYXQuaD4KKworR19CRUdJTl9ERUNMUworCitleHRlcm4gR1R5cGUgX2dzdF9zdHJ1Y3R1cmVfdHlwZTsKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdFN0cnVjdHVyZSBHc3RTdHJ1Y3R1cmU7CisKKyNkZWZpbmUgR1NUX1RZUEVfU1RSVUNUVVJFICAgICAgICAgICAgIChfZ3N0X3N0cnVjdHVyZV90eXBlKQorI2RlZmluZSBHU1RfSVNfU1RSVUNUVVJFKG9iamVjdCkgICAgICAgKChvYmplY3QpICYmIChHU1RfU1RSVUNUVVJFKG9iamVjdCktPnR5cGUgPT0gR1NUX1RZUEVfU1RSVUNUVVJFKSkKKyNkZWZpbmUgR1NUX1NUUlVDVFVSRV9DQVNUKG9iamVjdCkgICAgICgoR3N0U3RydWN0dXJlICopKG9iamVjdCkpCisjZGVmaW5lIEdTVF9TVFJVQ1RVUkUob2JqZWN0KSAgICAgICAgICAoR1NUX1NUUlVDVFVSRV9DQVNUKG9iamVjdCkpCisKKworLyoqCisgKiBHc3RTdHJ1Y3R1cmVGb3JlYWNoRnVuYzoKKyAqIEBmaWVsZF9pZDogdGhlICNHUXVhcmsgb2YgdGhlIGZpZWxkIG5hbWUKKyAqIEB2YWx1ZTogdGhlICNHVmFsdWUgb2YgdGhlIGZpZWxkCisgKiBAdXNlcl9kYXRhOiB1c2VyIGRhdGEKKyAqCisgKiBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgaW4gZ3N0X3N0cnVjdHVyZV9mb3JlYWNoKCkuIFRoZSBmdW5jdGlvbiBtYXkKKyAqIG5vdCBtb2RpZnkgQHZhbHVlLgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIGZvcmVhY2ggb3BlcmF0aW9uIHNob3VsZCBjb250aW51ZSwgRkFMU0UgaWYKKyAqIHRoZSBmb3JlYWNoIG9wZXJhdGlvbiBzaG91bGQgc3RvcCB3aXRoIEZBTFNFLgorICovCit0eXBlZGVmIGdib29sZWFuICgqR3N0U3RydWN0dXJlRm9yZWFjaEZ1bmMpIChHUXVhcmsgICBmaWVsZF9pZCwKKwkJCQkJICAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwKKwkJCQkJICAgICBncG9pbnRlciB1c2VyX2RhdGEpOworCisvKioKKyAqIEdzdFN0cnVjdHVyZU1hcEZ1bmM6CisgKiBAZmllbGRfaWQ6IHRoZSAjR1F1YXJrIG9mIHRoZSBmaWVsZCBuYW1lCisgKiBAdmFsdWU6IHRoZSAjR1ZhbHVlIG9mIHRoZSBmaWVsZAorICogQHVzZXJfZGF0YTogdXNlciBkYXRhCisgKgorICogQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGluIGdzdF9zdHJ1Y3R1cmVfbWFwX2luX3BsYWNlKCkuIFRoZSBmdW5jdGlvbgorICogbWF5IG1vZGlmeSBAdmFsdWUuCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgbWFwIG9wZXJhdGlvbiBzaG91bGQgY29udGludWUsIEZBTFNFIGlmCisgKiB0aGUgbWFwIG9wZXJhdGlvbiBzaG91bGQgc3RvcCB3aXRoIEZBTFNFLgorICovCit0eXBlZGVmIGdib29sZWFuICgqR3N0U3RydWN0dXJlTWFwRnVuYykgICAgIChHUXVhcmsgICBmaWVsZF9pZCwKKwkJCQkJICAgICBHVmFsdWUgKiB2YWx1ZSwKKwkJCQkJICAgICBncG9pbnRlciB1c2VyX2RhdGEpOworCisvKioKKyAqIEdzdFN0cnVjdHVyZToKKyAqIEB0eXBlOiB0aGUgR1R5cGUgb2YgYSBzdHJ1Y3R1cmUKKyAqCisgKiBUaGUgR3N0U3RydWN0dXJlIG9iamVjdC4gTW9zdCBmaWVsZHMgYXJlIHByaXZhdGUuCisgKi8KK3N0cnVjdCBfR3N0U3RydWN0dXJlIHsKKyAgR1R5cGUgdHlwZTsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgR1F1YXJrIG5hbWU7Cit9OworCitHc3RTdHJ1Y3R1cmUgKiAgICAgICAgICBnc3Rfc3RydWN0dXJlX2VtcHR5X25ldyAgICAgICAgICAgIChjb25zdCBnY2hhciAqICAgICAgICAgICAgbmFtZSk7CitHc3RTdHJ1Y3R1cmUgKiAgICAgICAgICBnc3Rfc3RydWN0dXJlX2lkX2VtcHR5X25ldyAgICAgICAgIChHUXVhcmsgICAgICAgICAgICAgICAgICAgcXVhcmspOworR3N0U3RydWN0dXJlICogICAgICAgICAgZ3N0X3N0cnVjdHVyZV9uZXcgICAgICAgICAgICAgICAgICAoY29uc3QgZ2NoYXIgKiAgICAgICAgICAgIG5hbWUsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiAgICAgICAgICAgIGZpcnN0ZmllbGQsCisJCQkJCQkJICAgIC4uLik7CitHc3RTdHJ1Y3R1cmUgKiAgICAgICAgICBnc3Rfc3RydWN0dXJlX25ld192YWxpc3QgICAgICAgICAgIChjb25zdCBnY2hhciAqICAgICAgICAgICAgbmFtZSwKKwkJCQkJCSAgICAgICAgICAgIGNvbnN0IGdjaGFyICogICAgICAgICAgICBmaXJzdGZpZWxkLAorCQkJCQkJCSAgICB2YV9saXN0ICAgICAgICAgICAgICAgICAgdmFyYXJncyk7CitHc3RTdHJ1Y3R1cmUgKiAgICAgICAgICBnc3Rfc3RydWN0dXJlX2lkX25ldyAgICAgICAgICAgICAgIChHUXVhcmsgICAgICAgICAgICAgICAgICAgbmFtZV9xdWFyaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdRdWFyayAgICAgICAgICAgICAgICAgICBmaWVsZF9xdWFyaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CitHc3RTdHJ1Y3R1cmUgKiAgICAgICAgICBnc3Rfc3RydWN0dXJlX2NvcHkgICAgICAgICAgICAgICAgIChjb25zdCBHc3RTdHJ1Y3R1cmUgICAgICAqc3RydWN0dXJlKTsKK2dib29sZWFuCQlnc3Rfc3RydWN0dXJlX3NldF9wYXJlbnRfcmVmY291bnQgIChHc3RTdHJ1Y3R1cmUgICAgICAgICAgICAqc3RydWN0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgICAgICAgICAgKnJlZmNvdW50KTsKK3ZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAgICAgICAgICAgICAgICAgKEdzdFN0cnVjdHVyZSAgICAgICAgICAgICpzdHJ1Y3R1cmUpOworCitjb25zdCBnY2hhciAqCQlnc3Rfc3RydWN0dXJlX2dldF9uYW1lICAgICAgICAgICAgIChjb25zdCBHc3RTdHJ1Y3R1cmUgICAgICAqc3RydWN0dXJlKTsKK0dRdWFyawkJCWdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWVfaWQgICAgICAgICAgKGNvbnN0IEdzdFN0cnVjdHVyZSAgICAgICpzdHJ1Y3R1cmUpOworZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAgICAgICAgICAgICAoY29uc3QgR3N0U3RydWN0dXJlICAgICAgKnN0cnVjdHVyZSwKKwkJCQkJCQkgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgKm5hbWUpOwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXRfbmFtZSAgICAgICAgICAgICAoR3N0U3RydWN0dXJlICAgICAgICAgICAgKnN0cnVjdHVyZSwKKwkJCQkJCQkgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgKm5hbWUpOworCit2b2lkICAgICAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2lkX3NldF92YWx1ZSAgICAgICAgIChHc3RTdHJ1Y3R1cmUgICAgICAgICAgICAqc3RydWN0dXJlLAorCQkJCQkJCSAgICBHUXVhcmsgICAgICAgICAgICAgICAgICAgZmllbGQsCisJCQkJCQkJICAgIGNvbnN0IEdWYWx1ZSAgICAgICAgICAgICp2YWx1ZSk7Cit2b2lkICAgICAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAgICAgICAgICAgIChHc3RTdHJ1Y3R1cmUgICAgICAgICAgICAqc3RydWN0dXJlLAorCQkJCQkJCSAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAqZmllbGRuYW1lLAorCQkJCQkJCSAgICBjb25zdCBHVmFsdWUgICAgICAgICAgICAqdmFsdWUpOwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9pZF90YWtlX3ZhbHVlICAgICAgICAgKEdzdFN0cnVjdHVyZSAgICAgICAgICAgICpzdHJ1Y3R1cmUsCisJCQkJCQkJICAgIEdRdWFyayAgICAgICAgICAgICAgICAgICBmaWVsZCwKKwkJCQkJCQkgICAgR1ZhbHVlICAgICAgICAgICAgICAgICAgKnZhbHVlKTsKK3ZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfdGFrZV92YWx1ZSAgICAgICAgICAgIChHc3RTdHJ1Y3R1cmUgICAgICAgICAgICAqc3RydWN0dXJlLAorCQkJCQkJCSAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAqZmllbGRuYW1lLAorCQkJCQkJCSAgICBHVmFsdWUgICAgICAgICAgICAgICAgICAqdmFsdWUpOwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgICAgICAgICAgICAgICAgICAoR3N0U3RydWN0dXJlICAgICAgICAgICAgKnN0cnVjdHVyZSwKKwkJCQkJCQkgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgKmZpZWxkbmFtZSwKKwkJCQkJCQkgICAgLi4uKSBHX0dOVUNfTlVMTF9URVJNSU5BVEVEOworCit2b2lkICAgICAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF92YWxpc3QgICAgICAgICAgIChHc3RTdHJ1Y3R1cmUgICAgICAgICAgICAqc3RydWN0dXJlLAorCQkJCQkJCSAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAqZmllbGRuYW1lLAorCQkJCQkJCSAgICB2YV9saXN0IHZhcmFyZ3MpOworCit2b2lkICAgICAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2lkX3NldCAgICAgICAgICAgICAgICAoR3N0U3RydWN0dXJlICAgICAgICAgICAgKnN0cnVjdHVyZSwKKwkJCQkJCQkgICAgR1F1YXJrICAgICAgICAgICAgICAgICAgIGZpZWxkbmFtZSwKKwkJCQkJCQkgICAgLi4uKSBHX0dOVUNfTlVMTF9URVJNSU5BVEVEOworCit2b2lkICAgICAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2lkX3NldF92YWxpc3QgICAgICAgICAoR3N0U3RydWN0dXJlICAgICAgICAgICAgKnN0cnVjdHVyZSwKKwkJCQkJCQkgICAgR1F1YXJrICAgICAgICAgICAgICAgICAgIGZpZWxkbmFtZSwKKwkJCQkJCQkgICAgdmFfbGlzdCB2YXJhcmdzKTsKKworZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfdmFsaXN0ICAgICAgICAgICAoY29uc3QgR3N0U3RydWN0dXJlICAgICAgKnN0cnVjdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAgICpmaXJzdF9maWVsZG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0ICAgICAgICAgICAgICAgICAgYXJncyk7CisKK2dib29sZWFuICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0ICAgICAgICAgICAgICAgICAgKGNvbnN0IEdzdFN0cnVjdHVyZSAgICAgICpzdHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAqZmlyc3RfZmllbGRuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSBHX0dOVUNfTlVMTF9URVJNSU5BVEVEOworCitnYm9vbGVhbiAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWxpc3QgICAgICAgIChjb25zdCBHc3RTdHJ1Y3R1cmUgICAgICAqc3RydWN0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1F1YXJrICAgICAgICAgICAgICAgICAgIGZpcnN0X2ZpZWxkX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCAgICAgICAgICAgICAgICAgIGFyZ3MpOworCitnYm9vbGVhbiAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2lkX2dldCAgICAgICAgICAgICAgIChjb25zdCBHc3RTdHJ1Y3R1cmUgICAgICAqc3RydWN0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1F1YXJrICAgICAgICAgICAgICAgICAgIGZpcnN0X2ZpZWxkX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSBHX0dOVUNfTlVMTF9URVJNSU5BVEVEOworCitjb25zdCBHVmFsdWUgKgkJZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgICAgICAgICAoY29uc3QgR3N0U3RydWN0dXJlICAgICAgKnN0cnVjdHVyZSwKKwkJCQkJCQkgICAgR1F1YXJrICAgICAgICAgICAgICAgICAgIGZpZWxkKTsKK2NvbnN0IEdWYWx1ZSAqCQlnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAgICAgICAgICAgIChjb25zdCBHc3RTdHJ1Y3R1cmUgICAgICAqc3RydWN0dXJlLAorCQkJCQkJCSAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAqZmllbGRuYW1lKTsKK3ZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkICAgICAgICAgKEdzdFN0cnVjdHVyZSAgICAgICAgICAgICpzdHJ1Y3R1cmUsCisJCQkJCQkJICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICpmaWVsZG5hbWUpOwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzICAgICAgICAoR3N0U3RydWN0dXJlICAgICAgICAgICAgKnN0cnVjdHVyZSwKKwkJCQkJCQkgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgKmZpZWxkbmFtZSwKKwkJCQkJCQkgICAgLi4uKSBHX0dOVUNfTlVMTF9URVJNSU5BVEVEOwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzX3ZhbGlzdCAoR3N0U3RydWN0dXJlICAgICAgICAgICAgICpzdHJ1Y3R1cmUsCisJCQkJCQkJICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICpmaWVsZG5hbWUsCisJCQkJCQkJICAgIHZhX2xpc3QgICAgICAgICAgICAgICAgICB2YXJhcmdzKTsKK3ZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2FsbF9maWVsZHMgICAgKEdzdFN0cnVjdHVyZSAgICAgICAgICAgICpzdHJ1Y3R1cmUpOworCitHVHlwZSAgICAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9maWVsZF90eXBlICAgICAgIChjb25zdCBHc3RTdHJ1Y3R1cmUgICAgICAqc3RydWN0dXJlLAorCQkJCQkJCSAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAqZmllbGRuYW1lKTsKK2dib29sZWFuICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZm9yZWFjaCAgICAgICAgICAgICAgKGNvbnN0IEdzdFN0cnVjdHVyZSAgICAgICpzdHJ1Y3R1cmUsCisJCQkJCQkJICAgIEdzdFN0cnVjdHVyZUZvcmVhY2hGdW5jICBmdW5jLAorCQkJCQkJCSAgICBncG9pbnRlciAgICAgICAgICAgICAgICAgdXNlcl9kYXRhKTsKK2dib29sZWFuICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfbWFwX2luX3BsYWNlICAgICAgICAgKEdzdFN0cnVjdHVyZSAgICAgICAgICAgICpzdHJ1Y3R1cmUsCisJCQkJCQkJICAgIEdzdFN0cnVjdHVyZU1hcEZ1bmMgICAgICBmdW5jLAorCQkJCQkJCSAgICBncG9pbnRlciAgICAgICAgICAgICAgICAgdXNlcl9kYXRhKTsKK2dpbnQgICAgICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfbl9maWVsZHMgICAgICAgICAgICAgKGNvbnN0IEdzdFN0cnVjdHVyZSAgICAgICpzdHJ1Y3R1cmUpOworY29uc3QgZ2NoYXIgKiAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9udGhfZmllbGRfbmFtZSAgICAgICAoY29uc3QgR3N0U3RydWN0dXJlICAgICAgKnN0cnVjdHVyZSwgZ3VpbnQgaW5kZXgpOworZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9pZF9oYXNfZmllbGQgICAgICAgICAoY29uc3QgR3N0U3RydWN0dXJlICAgICAgKnN0cnVjdHVyZSwKKwkJCQkJCQkgICAgR1F1YXJrICAgICAgICAgICAgICAgICAgIGZpZWxkKTsKK2dib29sZWFuICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfaWRfaGFzX2ZpZWxkX3R5cGVkICAgKGNvbnN0IEdzdFN0cnVjdHVyZSAgICAgICpzdHJ1Y3R1cmUsCisJCQkJCQkJICAgIEdRdWFyayAgICAgICAgICAgICAgICAgICBmaWVsZCwKKwkJCQkJCQkgICAgR1R5cGUgICAgICAgICAgICAgICAgICAgIHR5cGUpOworZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQgICAgICAgICAgICAoY29uc3QgR3N0U3RydWN0dXJlICAgICAgKnN0cnVjdHVyZSwKKwkJCQkJCQkgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgKmZpZWxkbmFtZSk7CitnYm9vbGVhbiAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2hhc19maWVsZF90eXBlZCAgICAgIChjb25zdCBHc3RTdHJ1Y3R1cmUgICAgICAqc3RydWN0dXJlLAorCQkJCQkJCSAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAqZmllbGRuYW1lLAorCQkJCQkJCSAgICBHVHlwZSAgICAgICAgICAgICAgICAgICAgdHlwZSk7CisKKy8qIHV0aWxpdHkgZnVuY3Rpb25zICovCitnYm9vbGVhbiAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9ib29sZWFuICAgICAgICAgIChjb25zdCBHc3RTdHJ1Y3R1cmUgICAgICAqc3RydWN0dXJlLAorCQkJCQkJCSAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAqZmllbGRuYW1lLAorCQkJCQkJCSAgICBnYm9vbGVhbiAgICAgICAgICAgICAgICAqdmFsdWUpOworZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfaW50ICAgICAgICAgICAgICAoY29uc3QgR3N0U3RydWN0dXJlICAgICAgKnN0cnVjdHVyZSwKKwkJCQkJCQkgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgKmZpZWxkbmFtZSwKKwkJCQkJCQkgICAgZ2ludCAgICAgICAgICAgICAgICAgICAgKnZhbHVlKTsKK2dib29sZWFuICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQgICAgICAgICAgICAgKGNvbnN0IEdzdFN0cnVjdHVyZSAgICAgICpzdHJ1Y3R1cmUsCisJCQkJCQkJICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICpmaWVsZG5hbWUsCisJCQkJCQkJICAgIGd1aW50ICAgICAgICAgICAgICAgICAgICp2YWx1ZSk7CitnYm9vbGVhbiAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9kb3VibGUgICAgICAgICAgIChjb25zdCBHc3RTdHJ1Y3R1cmUgICAgICAqc3RydWN0dXJlLAorCQkJCQkJCSAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAqZmllbGRuYW1lLAorCQkJCQkJCSAgICBnZG91YmxlICAgICAgICAgICAgICAgICAqdmFsdWUpOworZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfZGF0ZSAgICAgICAgICAgICAoY29uc3QgR3N0U3RydWN0dXJlICAgICAgKnN0cnVjdHVyZSwKKwkJCQkJCQkgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgKmZpZWxkbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEYXRlICAgICAgICAgICAgICAgICAgKip2YWx1ZSk7CitnYm9vbGVhbiAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9kYXRlX3RpbWUgICAgICAgIChjb25zdCBHc3RTdHJ1Y3R1cmUgICAgICAqc3RydWN0dXJlLAorCQkJCQkJCSAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAqZmllbGRuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0RGF0ZVRpbWUgICAgICAgICAgICAgICoqdmFsdWUpOworZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfY2xvY2tfdGltZSAgICAgICAoY29uc3QgR3N0U3RydWN0dXJlICAgICAgKnN0cnVjdHVyZSwKKwkJCQkJCQkgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgKmZpZWxkbmFtZSwKKwkJCQkJCQkgICAgR3N0Q2xvY2tUaW1lICAgICAgICAgICAgKnZhbHVlKTsKK2NvbnN0IGdjaGFyICoJCWdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAgICAgICAgICAgKGNvbnN0IEdzdFN0cnVjdHVyZSAgICAgICpzdHJ1Y3R1cmUsCisJCQkJCQkJICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICpmaWVsZG5hbWUpOworZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfZW51bSAgICAgICAgICAgICAoY29uc3QgR3N0U3RydWN0dXJlICAgICAgKnN0cnVjdHVyZSwKKwkJCQkJCQkgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgKmZpZWxkbmFtZSwKKwkJCQkJCQkgICAgR1R5cGUgICAgICAgICAgICAgICAgICAgIGVudW10eXBlLAorCQkJCQkJCSAgICBnaW50ICAgICAgICAgICAgICAgICAgICAqdmFsdWUpOworZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfZnJhY3Rpb24gICAgICAgICAoY29uc3QgR3N0U3RydWN0dXJlICAgICAgKnN0cnVjdHVyZSwKKwkJCQkJCQkgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgKmZpZWxkbmFtZSwKKwkJCQkJCQkgICAgZ2ludCAqdmFsdWVfbnVtZXJhdG9yLAorCQkJCQkJCSAgICBnaW50ICp2YWx1ZV9kZW5vbWluYXRvcik7CisKK2djaGFyICogICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nICAgICAgICAgICAgKGNvbnN0IEdzdFN0cnVjdHVyZSAgICAgICpzdHJ1Y3R1cmUpOworR3N0U3RydWN0dXJlICogICAgICAgICAgZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAgICAgICAgICAoY29uc3QgZ2NoYXIgICAgICAgICAgICAgKnN0cmluZywKKwkJCQkJCQkgICAgZ2NoYXIgICAgICAgICAgICAgICAgICAqKmVuZCk7CisKK2dib29sZWFuICAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ludCAgICAoR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmUsCisJCQkJCQkJCQkgY29uc3QgY2hhciAgICpmaWVsZF9uYW1lLAorCQkJCQkJCQkJIGludCAgICAgICAgICAgdGFyZ2V0KTsKK2dib29sZWFuICAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2RvdWJsZSAoR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmUsCisJCQkJCQkJCQkgY29uc3QgY2hhciAgICpmaWVsZF9uYW1lLAorCQkJCQkJCQkJIGRvdWJsZSAgICAgICAgdGFyZ2V0KTsKKworZ2Jvb2xlYW4gICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX2Jvb2xlYW4gKEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlLAorCQkJCQkJCQkJIGNvbnN0IGNoYXIgICAqZmllbGRfbmFtZSwKKwkJCQkJCQkJCSBnYm9vbGVhbiAgICAgICAgdGFyZ2V0KTsKK2dib29sZWFuICAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9zdHJpbmcgKEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlLAorCQkJCQkJCQkJIGNvbnN0IGNoYXIgICAqZmllbGRfbmFtZSwKKwkJCQkJCQkJCSBjb25zdCBnY2hhciAgKnRhcmdldCk7CitnYm9vbGVhbiAgICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9mcmFjdGlvbiAoR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmUsCisJCQkJCQkJCQkgY29uc3QgY2hhciAgICpmaWVsZF9uYW1lLAorCQkJCQkJCQkJIGNvbnN0IGdpbnQgdGFyZ2V0X251bWVyYXRvciwKKwkJCQkJCQkJCSBjb25zdCBnaW50IHRhcmdldF9kZW5vbWluYXRvcik7CitnYm9vbGVhbiAgICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGQgIChHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSwKKwkJCQkJCSAgICAgIGNvbnN0IGNoYXIgICAqZmllbGRfbmFtZSk7CisKK2dib29sZWFuICAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2lzX2VxdWFsKGNvbnN0IEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlMSwKKwkJCQkJCWNvbnN0IEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlMik7CitnYm9vbGVhbiAgICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9pc19zdWJzZXQoY29uc3QgR3N0U3RydWN0dXJlICpzdWJzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3N0U3RydWN0dXJlICpzdXBlcnNldCk7CitnYm9vbGVhbiAgICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9jYW5faW50ZXJzZWN0KGNvbnN0IEdzdFN0cnVjdHVyZSAqc3RydWN0MSwKKwkJCQkJCSAgICAgY29uc3QgR3N0U3RydWN0dXJlICpzdHJ1Y3QyKTsKK0dzdFN0cnVjdHVyZSogICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2ludGVyc2VjdCAoY29uc3QgR3N0U3RydWN0dXJlICpzdHJ1Y3QxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnN0cnVjdDIpOwordm9pZCAgICAgICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZml4YXRlICAgIChHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9nc3QvZ3N0c3lzdGVtY2xvY2suYyBiL2dzdC9nc3RzeXN0ZW1jbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1OTI4MTMKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0c3lzdGVtY2xvY2suYwpAQCAtMCwwICsxLDg3NSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAgICAgIDIwMDQgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KKyAqCisgKiBnc3RzeXN0ZW1jbG9jay5jOiBEZWZhdWx0IGNsb2NrLCB1c2VzIHRoZSBzeXN0ZW0gY2xvY2sKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKioKKyAqIFNFQ1RJT046Z3N0c3lzdGVtY2xvY2sKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogRGVmYXVsdCBjbG9jayB0aGF0IHVzZXMgdGhlIGN1cnJlbnQgc3lzdGVtIHRpbWUKKyAqIEBzZWVfYWxzbzogI0dzdENsb2NrCisgKgorICogVGhlIEdTdHJlYW1lciBjb3JlIHByb3ZpZGVzIGEgR3N0U3lzdGVtQ2xvY2sgYmFzZWQgb24gdGhlIHN5c3RlbSB0aW1lLgorICogQXN5bmNocm9ub3VzIGNhbGxiYWNrcyBhcmUgc2NoZWR1bGVkIGZyb20gYW4gaW50ZXJuYWwgdGhyZWFkLgorICoKKyAqIENsb2NrIGltcGxlbWVudG9ycyBhcmUgZW5jb3VyYWdlZCB0byBzdWJjbGFzcyB0aGlzIHN5c3RlbWNsb2NrIGFzIGl0CisgKiBpbXBsZW1lbnRzIHRoZSBhc3luYyBub3RpZmljYXRpb24uCisgKgorICogU3ViY2xhc3NlcyBjYW4gaG93ZXZlciBvdmVycmlkZSBhbGwgb2YgdGhlIGltcG9ydGFudCBtZXRob2RzIGZvciBzeW5jIGFuZAorICogYXN5bmMgbm90aWZpY2F0aW9ucyB0byBpbXBsZW1lbnQgdGhlaXIgb3duIGNhbGxiYWNrIG1ldGhvZHMgb3IgYmxvY2tpbmcKKyAqIHdhaXQgb3BlcmF0aW9ucy4KKyAqCisgKiBMYXN0IHJldmlld2VkIG9uIDIwMDYtMDMtMDggKDAuMTAuNCkKKyAqLworCisjaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJnc3RpbmZvLmgiCisjaW5jbHVkZSAiZ3N0c3lzdGVtY2xvY2suaCIKKyNpbmNsdWRlICJnc3RlbnVtdHlwZXMuaCIKKyNpbmNsdWRlICJnc3Rwb2xsLmgiCisjaW5jbHVkZSAiZ3N0dXRpbHMuaCIKKyNpbmNsdWRlICJnbGliLWNvbXBhdC1wcml2YXRlLmgiCisKKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaWZkZWYgR19PU19XSU4zMgorIyAgZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4gICAvKiBwcmV2ZW50cyBmcm9tIGluY2x1ZGluZyB0b28gbWFueSB0aGluZ3MgKi8KKyMgIGluY2x1ZGUgPHdpbmRvd3MuaD4gICAgICAgICAgLyogUXVlcnlQZXJmb3JtYW5jZSogc3R1ZmYgKi8KKyMgIHVuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyMgIGRlZmluZSBFV09VTERCTE9DSyBFQUdBSU4gICAgLyogVGhpcyBpcyBqdXN0IHRvIHBsYWNhdGUgZ2NjICovCisjZW5kaWYgLyogR19PU19XSU4zMiAqLworCisjZGVmaW5lIEdFVF9FTlRSWV9TVEFUVVMoZSkgICAgICAgICAgKChHc3RDbG9ja1JldHVybikgZ19hdG9taWNfaW50X2dldCgmR1NUX0NMT0NLX0VOVFJZX1NUQVRVUyhlKSkpCisjZGVmaW5lIFNFVF9FTlRSWV9TVEFUVVMoZSx2YWwpICAgICAgKGdfYXRvbWljX2ludF9zZXQoJkdTVF9DTE9DS19FTlRSWV9TVEFUVVMoZSksKHZhbCkpKQorI2RlZmluZSBDQVNfRU5UUllfU1RBVFVTKGUsb2xkLHZhbCkgIChHX0FUT01JQ19JTlRfQ09NUEFSRV9BTkRfRVhDSEFOR0UoXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCZHU1RfQ0xPQ0tfRU5UUllfU1RBVFVTKGUpKSwgKG9sZCksICh2YWwpKSkKKworLyogRGVmaW5lIHRoaXMgdG8gZ2V0IHNvbWUgZXh0cmEgZGVidWcgYWJvdXQgaml0dGVyIGZyb20gZWFjaCBjbG9ja193YWl0ICovCisjdW5kZWYgV0FJVF9ERUJVR0dJTkcKKworc3RydWN0IF9Hc3RTeXN0ZW1DbG9ja1ByaXZhdGUKK3sKKyAgR3N0Q2xvY2tUeXBlIGNsb2NrX3R5cGU7CisgIEdzdFBvbGwgKnRpbWVyOworICBnaW50IHdha2V1cF9jb3VudDsgICAgICAgICAgICAvKiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgd2l0aCBhIHBlbmRpbmcgd2FrZXVwICovCisgIGdib29sZWFuIGFzeW5jX3dha2V1cDsgICAgICAgIC8qIGlmIHRoZSB3YWtldXAgd2FzIGJlY2F1c2Ugb2YgYSBhc3luYyBsaXN0IGNoYW5nZSAqLworCisjaWZkZWYgR19PU19XSU4zMgorICBMQVJHRV9JTlRFR0VSIHN0YXJ0OworICBMQVJHRV9JTlRFR0VSIGZyZXF1ZW5jeTsKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR19PU19XSU4zMiAqLworfTsKKworI2RlZmluZSBHU1RfU1lTVEVNX0NMT0NLX0dFVF9QUklWQVRFKG9iaikgIFwKKyAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKChvYmopLCBHU1RfVFlQRV9TWVNURU1fQ0xPQ0ssIFwKKyAgICAgICAgR3N0U3lzdGVtQ2xvY2tQcml2YXRlKSkKKworI2lmZGVmIEhBVkVfUE9TSVhfVElNRVJTCisjIGlmZGVmIEhBVkVfTU9OT1RPTklDX0NMT0NLCisjICBkZWZpbmUgREVGQVVMVF9DTE9DS19UWVBFIEdTVF9DTE9DS19UWVBFX01PTk9UT05JQworIyBlbHNlCisjICBkZWZpbmUgREVGQVVMVF9DTE9DS19UWVBFIEdTVF9DTE9DS19UWVBFX1JFQUxUSU1FCisjIGVuZGlmCisjZWxzZQorI2RlZmluZSBERUZBVUxUX0NMT0NLX1RZUEUgR1NUX0NMT0NLX1RZUEVfUkVBTFRJTUUKKyNlbmRpZgorCitlbnVtCit7CisgIFBST1BfMCwKKyAgUFJPUF9DTE9DS19UWVBFLAorICAvKiBGSUxMIE1FICovCit9OworCisvKiB0aGUgb25lIGluc3RhbmNlIG9mIHRoZSBzeXN0ZW1jbG9jayAqLworc3RhdGljIEdzdENsb2NrICpfdGhlX3N5c3RlbV9jbG9jayA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIGdzdF9zeXN0ZW1fY2xvY2tfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7CitzdGF0aWMgdm9pZCBnc3Rfc3lzdGVtX2Nsb2NrX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKK3N0YXRpYyB2b2lkIGdzdF9zeXN0ZW1fY2xvY2tfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOworCitzdGF0aWMgR3N0Q2xvY2tUaW1lIGdzdF9zeXN0ZW1fY2xvY2tfZ2V0X2ludGVybmFsX3RpbWUgKEdzdENsb2NrICogY2xvY2spOworc3RhdGljIGd1aW50NjQgZ3N0X3N5c3RlbV9jbG9ja19nZXRfcmVzb2x1dGlvbiAoR3N0Q2xvY2sgKiBjbG9jayk7CitzdGF0aWMgR3N0Q2xvY2tSZXR1cm4gZ3N0X3N5c3RlbV9jbG9ja19pZF93YWl0X2ppdHRlciAoR3N0Q2xvY2sgKiBjbG9jaywKKyAgICBHc3RDbG9ja0VudHJ5ICogZW50cnksIEdzdENsb2NrVGltZURpZmYgKiBqaXR0ZXIpOworc3RhdGljIEdzdENsb2NrUmV0dXJuIGdzdF9zeXN0ZW1fY2xvY2tfaWRfd2FpdF9qaXR0ZXJfdW5sb2NrZWQKKyAgICAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0Q2xvY2tFbnRyeSAqIGVudHJ5LCBHc3RDbG9ja1RpbWVEaWZmICogaml0dGVyLAorICAgIGdib29sZWFuIHJlc3RhcnQpOworc3RhdGljIEdzdENsb2NrUmV0dXJuIGdzdF9zeXN0ZW1fY2xvY2tfaWRfd2FpdF9hc3luYyAoR3N0Q2xvY2sgKiBjbG9jaywKKyAgICBHc3RDbG9ja0VudHJ5ICogZW50cnkpOworc3RhdGljIHZvaWQgZ3N0X3N5c3RlbV9jbG9ja19pZF91bnNjaGVkdWxlIChHc3RDbG9jayAqIGNsb2NrLAorICAgIEdzdENsb2NrRW50cnkgKiBlbnRyeSk7CitzdGF0aWMgdm9pZCBnc3Rfc3lzdGVtX2Nsb2NrX2FzeW5jX3RocmVhZCAoR3N0Q2xvY2sgKiBjbG9jayk7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X3N5c3RlbV9jbG9ja19zdGFydF9hc3luYyAoR3N0U3lzdGVtQ2xvY2sgKiBjbG9jayk7CitzdGF0aWMgdm9pZCBnc3Rfc3lzdGVtX2Nsb2NrX2FkZF93YWtldXAgKEdzdFN5c3RlbUNsb2NrICogc3lzY2xvY2spOworCitzdGF0aWMgR1N0YXRpY011dGV4IF9nc3Rfc3lzY2xvY2tfbXV0ZXggPSBHX1NUQVRJQ19NVVRFWF9JTklUOworCitzdGF0aWMgR3N0Q2xvY2tDbGFzcyAqcGFyZW50X2NsYXNzID0gTlVMTDsKKworLyogc3RhdGljIGd1aW50IGdzdF9zeXN0ZW1fY2xvY2tfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsgKi8KKworR19ERUZJTkVfVFlQRSAoR3N0U3lzdGVtQ2xvY2ssIGdzdF9zeXN0ZW1fY2xvY2ssIEdTVF9UWVBFX0NMT0NLKTsKKworc3RhdGljIHZvaWQKK2dzdF9zeXN0ZW1fY2xvY2tfY2xhc3NfaW5pdCAoR3N0U3lzdGVtQ2xvY2tDbGFzcyAqIGtsYXNzKQoreworICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7CisgIEdzdENsb2NrQ2xhc3MgKmdzdGNsb2NrX2NsYXNzOworCisgIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOworICBnc3RjbG9ja19jbGFzcyA9IChHc3RDbG9ja0NsYXNzICopIGtsYXNzOworCisgIHBhcmVudF9jbGFzcyA9IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCAoa2xhc3MpOworCisgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAoa2xhc3MsIHNpemVvZiAoR3N0U3lzdGVtQ2xvY2tQcml2YXRlKSk7CisKKyAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF9zeXN0ZW1fY2xvY2tfZGlzcG9zZTsKKyAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3N5c3RlbV9jbG9ja19zZXRfcHJvcGVydHk7CisgIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9zeXN0ZW1fY2xvY2tfZ2V0X3Byb3BlcnR5OworCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ0xPQ0tfVFlQRSwKKyAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgiY2xvY2stdHlwZSIsICJDbG9jayB0eXBlIiwKKyAgICAgICAgICAiVGhlIHR5cGUgb2YgdW5kZXJseWluZyBjbG9jayBpbXBsZW1lbnRhdGlvbiB1c2VkIiwKKyAgICAgICAgICBHU1RfVFlQRV9DTE9DS19UWVBFLCBERUZBVUxUX0NMT0NLX1RZUEUsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisKKyAgZ3N0Y2xvY2tfY2xhc3MtPmdldF9pbnRlcm5hbF90aW1lID0gZ3N0X3N5c3RlbV9jbG9ja19nZXRfaW50ZXJuYWxfdGltZTsKKyAgZ3N0Y2xvY2tfY2xhc3MtPmdldF9yZXNvbHV0aW9uID0gZ3N0X3N5c3RlbV9jbG9ja19nZXRfcmVzb2x1dGlvbjsKKyAgZ3N0Y2xvY2tfY2xhc3MtPndhaXQgPSBnc3Rfc3lzdGVtX2Nsb2NrX2lkX3dhaXRfaml0dGVyOworICBnc3RjbG9ja19jbGFzcy0+d2FpdF9hc3luYyA9IGdzdF9zeXN0ZW1fY2xvY2tfaWRfd2FpdF9hc3luYzsKKyAgZ3N0Y2xvY2tfY2xhc3MtPnVuc2NoZWR1bGUgPSBnc3Rfc3lzdGVtX2Nsb2NrX2lkX3Vuc2NoZWR1bGU7Cit9CisKK3N0YXRpYyB2b2lkCitnc3Rfc3lzdGVtX2Nsb2NrX2luaXQgKEdzdFN5c3RlbUNsb2NrICogY2xvY2spCit7CisgIEdTVF9PQkpFQ1RfRkxBR19TRVQgKGNsb2NrLAorICAgICAgR1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1NJTkdMRV9TWU5DIHwKKyAgICAgIEdTVF9DTE9DS19GTEFHX0NBTl9ET19TSU5HTEVfQVNZTkMgfAorICAgICAgR1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1BFUklPRElDX1NZTkMgfAorICAgICAgR1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1BFUklPRElDX0FTWU5DKTsKKworICBjbG9jay0+cHJpdiA9IEdTVF9TWVNURU1fQ0xPQ0tfR0VUX1BSSVZBVEUgKGNsb2NrKTsKKworICBjbG9jay0+cHJpdi0+Y2xvY2tfdHlwZSA9IERFRkFVTFRfQ0xPQ0tfVFlQRTsKKyAgY2xvY2stPnByaXYtPnRpbWVyID0gZ3N0X3BvbGxfbmV3X3RpbWVyICgpOworCisjaWZkZWYgR19PU19XSU4zMgorICBRdWVyeVBlcmZvcm1hbmNlRnJlcXVlbmN5ICgmY2xvY2stPnByaXYtPmZyZXF1ZW5jeSk7CisgIC8qIGNhbiBiZSAwIGlmIHRoZSBoYXJkd2FyZSBkb2VzIG5vdCBoYXZlIGhhcmR3YXJlIHN1cHBvcnQgKi8KKyAgaWYgKGNsb2NrLT5wcml2LT5mcmVxdWVuY3kuUXVhZFBhcnQgIT0gMCkKKyAgICAvKiB3ZSB0YWtlIGEgYmFzZSB0aW1lIHNvIHRoYXQgdGltZSBzdGFydHMgZnJvbSAwIHRvIGVhc2UgZGVidWdnaW5nICovCisgICAgUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIgKCZjbG9jay0+cHJpdi0+c3RhcnQpOworI2VuZGlmIC8qIEdfT1NfV0lOMzIgKi8KKworI2lmIDAKKyAgLyogVW5jb21tZW50IHRoaXMgdG8gc3RhcnQgdGhlIGFzeW5jIGNsb2NrIHRocmVhZCBzdHJhaWdodCBhd2F5ICovCisgIEdTVF9PQkpFQ1RfTE9DSyAoY2xvY2spOworICBnc3Rfc3lzdGVtX2Nsb2NrX3N0YXJ0X2FzeW5jIChjbG9jayk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChjbG9jayk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQKK2dzdF9zeXN0ZW1fY2xvY2tfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCkKK3sKKyAgR3N0Q2xvY2sgKmNsb2NrID0gKEdzdENsb2NrICopIG9iamVjdDsKKyAgR3N0U3lzdGVtQ2xvY2sgKnN5c2Nsb2NrID0gR1NUX1NZU1RFTV9DTE9DS19DQVNUIChjbG9jayk7CisgIEdMaXN0ICplbnRyaWVzOworCisgIC8qIGVsc2Ugd2UgaGF2ZSB0byBzdG9wIHRoZSB0aHJlYWQgKi8KKyAgR1NUX09CSkVDVF9MT0NLIChjbG9jayk7CisgIHN5c2Nsb2NrLT5zdG9wcGluZyA9IFRSVUU7CisgIC8qIHVuc2NoZWR1bGUgYWxsIGVudHJpZXMgKi8KKyAgZm9yIChlbnRyaWVzID0gY2xvY2stPmVudHJpZXM7IGVudHJpZXM7IGVudHJpZXMgPSBnX2xpc3RfbmV4dCAoZW50cmllcykpIHsKKyAgICBHc3RDbG9ja0VudHJ5ICplbnRyeSA9IChHc3RDbG9ja0VudHJ5ICopIGVudHJpZXMtPmRhdGE7CisKKyAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAidW5zY2hlZHVsaW5nIGVudHJ5ICVwIiwgZW50cnkpOworICAgIFNFVF9FTlRSWV9TVEFUVVMgKGVudHJ5LCBHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQpOworICB9CisgIEdTVF9DTE9DS19CUk9BRENBU1QgKGNsb2NrKTsKKyAgZ3N0X3N5c3RlbV9jbG9ja19hZGRfd2FrZXVwIChzeXNjbG9jayk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChjbG9jayk7CisKKyAgaWYgKHN5c2Nsb2NrLT50aHJlYWQpCisgICAgZ190aHJlYWRfam9pbiAoc3lzY2xvY2stPnRocmVhZCk7CisgIHN5c2Nsb2NrLT50aHJlYWQgPSBOVUxMOworICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAiam9pbmVkIHRocmVhZCIpOworCisgIGdfbGlzdF9mb3JlYWNoIChjbG9jay0+ZW50cmllcywgKEdGdW5jKSBnc3RfY2xvY2tfaWRfdW5yZWYsIE5VTEwpOworICBnX2xpc3RfZnJlZSAoY2xvY2stPmVudHJpZXMpOworICBjbG9jay0+ZW50cmllcyA9IE5VTEw7CisKKyAgZ3N0X3BvbGxfZnJlZSAoc3lzY2xvY2stPnByaXYtPnRpbWVyKTsKKworICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKKworICBpZiAoX3RoZV9zeXN0ZW1fY2xvY2sgPT0gY2xvY2spIHsKKyAgICBfdGhlX3N5c3RlbV9jbG9jayA9IE5VTEw7CisgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgImRpc3Bvc2VkIHN5c3RlbSBjbG9jayIpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3Rfc3lzdGVtX2Nsb2NrX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQoreworICBHc3RTeXN0ZW1DbG9jayAqc3lzY2xvY2sgPSBHU1RfU1lTVEVNX0NMT0NLIChvYmplY3QpOworCisgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9DTE9DS19UWVBFOgorICAgICAgc3lzY2xvY2stPnByaXYtPmNsb2NrX3R5cGUgPSAoR3N0Q2xvY2tUeXBlKSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7CisgICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAiY2xvY2stdHlwZSBzZXQgdG8gJWQiLAorICAgICAgICAgIHN5c2Nsb2NrLT5wcml2LT5jbG9ja190eXBlKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9zeXN0ZW1fY2xvY2tfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKKyAgICBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIEdzdFN5c3RlbUNsb2NrICpzeXNjbG9jayA9IEdTVF9TWVNURU1fQ0xPQ0sgKG9iamVjdCk7CisKKyAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX0NMT0NLX1RZUEU6CisgICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgc3lzY2xvY2stPnByaXYtPmNsb2NrX3R5cGUpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICBicmVhazsKKyAgfQorfQorCisvKioKKyAqIGdzdF9zeXN0ZW1fY2xvY2tfb2J0YWluOgorICoKKyAqIEdldCBhIGhhbmRsZSB0byB0aGUgZGVmYXVsdCBzeXN0ZW0gY2xvY2suIFRoZSByZWZjb3VudCBvZiB0aGUKKyAqIGNsb2NrIHdpbGwgYmUgaW5jcmVhc2VkIHNvIHlvdSBuZWVkIHRvIHVucmVmIHRoZSBjbG9jayBhZnRlcgorICogdXNhZ2UuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgZGVmYXVsdCBjbG9jay4KKyAqCisgKiBNVCBzYWZlLgorICovCitHc3RDbG9jayAqCitnc3Rfc3lzdGVtX2Nsb2NrX29idGFpbiAodm9pZCkKK3sKKyAgR3N0Q2xvY2sgKmNsb2NrOworCisgIGdfc3RhdGljX211dGV4X2xvY2sgKCZfZ3N0X3N5c2Nsb2NrX211dGV4KTsKKyAgY2xvY2sgPSBfdGhlX3N5c3RlbV9jbG9jazsKKworICBpZiAoY2xvY2sgPT0gTlVMTCkgeworICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssICJjcmVhdGluZyBuZXcgc3RhdGljIHN5c3RlbSBjbG9jayIpOworICAgIGNsb2NrID0gZ19vYmplY3RfbmV3IChHU1RfVFlQRV9TWVNURU1fQ0xPQ0ssCisgICAgICAgICJuYW1lIiwgIkdzdFN5c3RlbUNsb2NrIiwgTlVMTCk7CisKKyAgICAvKiB3ZSBjcmVhdGVkIHRoZSBnbG9iYWwgY2xvY2s7IHRha2Ugb3duZXJzaGlwIHNvCisgICAgICogd2UgY2FuIGhhbmQgb3V0IGluc3RhbmNlcyBsYXRlciAqLworICAgIGdzdF9vYmplY3RfcmVmX3NpbmsgKGNsb2NrKTsKKworICAgIF90aGVfc3lzdGVtX2Nsb2NrID0gY2xvY2s7CisgICAgZ19zdGF0aWNfbXV0ZXhfdW5sb2NrICgmX2dzdF9zeXNjbG9ja19tdXRleCk7CisgIH0gZWxzZSB7CisgICAgZ19zdGF0aWNfbXV0ZXhfdW5sb2NrICgmX2dzdF9zeXNjbG9ja19tdXRleCk7CisgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgInJldHVybmluZyBzdGF0aWMgc3lzdGVtIGNsb2NrIik7CisgIH0KKworICAvKiB3ZSByZWYgaXQgc2luY2Ugd2UgYXJlIGEgY2xvY2sgZmFjdG9yeS4gKi8KKyAgZ3N0X29iamVjdF9yZWYgKGNsb2NrKTsKKyAgcmV0dXJuIGNsb2NrOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3N5c3RlbV9jbG9ja19yZW1vdmVfd2FrZXVwIChHc3RTeXN0ZW1DbG9jayAqIHN5c2Nsb2NrKQoreworICBnX3JldHVybl9pZl9mYWlsIChzeXNjbG9jay0+cHJpdi0+d2FrZXVwX2NvdW50ID4gMCk7CisKKyAgc3lzY2xvY2stPnByaXYtPndha2V1cF9jb3VudC0tOworICBpZiAoc3lzY2xvY2stPnByaXYtPndha2V1cF9jb3VudCA9PSAwKSB7CisgICAgLyogcmVhZCB0aGUgY29udHJvbCBzb2NrZXQgYnl0ZSB3aGVuIHdlIHJlbW92ZWQgdGhlIGxhc3Qgd2FrZXVwIGNvdW50ICovCisgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgInJlYWRpbmcgY29udHJvbCIpOworICAgIHdoaWxlICghZ3N0X3BvbGxfcmVhZF9jb250cm9sIChzeXNjbG9jay0+cHJpdi0+dGltZXIpKSB7CisgICAgICBnX3dhcm5pbmcgKCJnc3RzeXN0ZW1jbG9jazogcmVhZCBjb250cm9sIGZhaWxlZCwgdHJ5aW5nIGFnYWluXG4iKTsKKyAgICB9CisgICAgR1NUX0NMT0NLX0JST0FEQ0FTVCAoc3lzY2xvY2spOworICB9CisgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssICJ3YWtldXAgY291bnQgJWQiLAorICAgICAgc3lzY2xvY2stPnByaXYtPndha2V1cF9jb3VudCk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3Rfc3lzdGVtX2Nsb2NrX2FkZF93YWtldXAgKEdzdFN5c3RlbUNsb2NrICogc3lzY2xvY2spCit7CisgIC8qIG9ubHkgd3JpdGUgdGhlIGNvbnRyb2wgc29ja2V0IGZvciB0aGUgZmlyc3Qgd2FrZXVwICovCisgIGlmIChzeXNjbG9jay0+cHJpdi0+d2FrZXVwX2NvdW50ID09IDApIHsKKyAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAid3JpdGluZyBjb250cm9sIik7CisgICAgd2hpbGUgKCFnc3RfcG9sbF93cml0ZV9jb250cm9sIChzeXNjbG9jay0+cHJpdi0+dGltZXIpKSB7CisgICAgICBpZiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVXT1VMREJMT0NLIHx8IGVycm5vID09IEVJTlRSKSB7CisgICAgICAgIGdfd2FybmluZworICAgICAgICAgICAgKCJnc3RzeXN0ZW1jbG9jazogd3JpdGUgY29udHJvbCBmYWlsZWQgaW4gd2FrZXVwX2FzeW5jLCB0cnlpbmcgYWdhaW46ICVkOiVzXG4iLAorICAgICAgICAgICAgZXJybm8sIGdfc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBnX2NyaXRpY2FsCisgICAgICAgICAgICAoImdzdHN5c3RlbWNsb2NrOiB3cml0ZSBjb250cm9sIGZhaWxlZCBpbiB3YWtldXBfYXN5bmM6ICVkOiVzXG4iLAorICAgICAgICAgICAgZXJybm8sIGdfc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgc3lzY2xvY2stPnByaXYtPndha2V1cF9jb3VudCsrOworICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAid2FrZXVwIGNvdW50ICVkIiwKKyAgICAgIHN5c2Nsb2NrLT5wcml2LT53YWtldXBfY291bnQpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3N5c3RlbV9jbG9ja193YWl0X3dha2V1cCAoR3N0U3lzdGVtQ2xvY2sgKiBzeXNjbG9jaykKK3sKKyAgd2hpbGUgKHN5c2Nsb2NrLT5wcml2LT53YWtldXBfY291bnQgPiAwKSB7CisgICAgR1NUX0NMT0NLX1dBSVQgKHN5c2Nsb2NrKTsKKyAgfQorfQorCisvKiB0aGlzIHRocmVhZCByZWFkcyB0aGUgc29ydGVkIGNsb2NrIGVudHJpZXMgZnJvbSB0aGUgcXVldWUuCisgKgorICogSXQgd2FpdHMgb24gZWFjaCBvZiB0aGVtIGFuZCBmaXJlcyB0aGUgY2FsbGJhY2sgd2hlbiB0aGUgdGltZW91dCBvY2N1cnMuCisgKgorICogV2hlbiBhbiBlbnRyeSBpbiB0aGUgcXVldWUgd2FzIGNhbmNlbGVkIGJlZm9yZSB3ZSB3YWl0IGZvciBpdCwgaXQgaXMKKyAqIHNpbXBseSBza2lwcGVkLgorICoKKyAqIFdoZW4gd2FpdGluZyBmb3IgYW4gZW50cnksIGl0IGNhbiBiZWNvbWUgY2FuY2VsZWQsIGluIHRoYXQgY2FzZSB3ZSBkb24ndAorICogY2FsbCB0aGUgY2FsbGJhY2sgYnV0IG1vdmUgdG8gdGhlIG5leHQgaXRlbSBpbiB0aGUgcXVldWUuCisgKgorICogTVQgc2FmZS4KKyAqLworc3RhdGljIHZvaWQKK2dzdF9zeXN0ZW1fY2xvY2tfYXN5bmNfdGhyZWFkIChHc3RDbG9jayAqIGNsb2NrKQoreworICBHc3RTeXN0ZW1DbG9jayAqc3lzY2xvY2sgPSBHU1RfU1lTVEVNX0NMT0NLX0NBU1QgKGNsb2NrKTsKKworICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAiZW50ZXIgc3lzdGVtIGNsb2NrIHRocmVhZCIpOworICBHU1RfT0JKRUNUX0xPQ0sgKGNsb2NrKTsKKyAgLyogc2lnbmFsIHNwaW51cCAqLworICBHU1RfQ0xPQ0tfQlJPQURDQVNUIChjbG9jayk7CisgIC8qIG5vdyBlbnRlciBvdXIgKGFsbW9zdCkgaW5maW5pdGUgbG9vcCAqLworICB3aGlsZSAoIXN5c2Nsb2NrLT5zdG9wcGluZykgeworICAgIEdzdENsb2NrRW50cnkgKmVudHJ5OworICAgIEdzdENsb2NrVGltZSByZXF1ZXN0ZWQ7CisgICAgR3N0Q2xvY2tSZXR1cm4gcmVzOworCisgICAgLyogY2hlY2sgaWYgc29tZXRoaW5nIHRvIGJlIGRvbmUgKi8KKyAgICB3aGlsZSAoY2xvY2stPmVudHJpZXMgPT0gTlVMTCkgeworICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgIm5vIGNsb2NrIGVudHJpZXMsIHdhaXRpbmcuLiIpOworICAgICAgLyogd2FpdCBmb3Igd29yayB0byBkbyAqLworICAgICAgR1NUX0NMT0NLX1dBSVQgKGNsb2NrKTsKKyAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssICJnb3Qgc2lnbmFsIik7CisgICAgICAvKiBjbG9jayB3YXMgc3RvcHBpbmcsIGV4aXQgKi8KKyAgICAgIGlmIChzeXNjbG9jay0+c3RvcHBpbmcpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvKiBzZWUgaWYgd2UgaGF2ZSBhIHBlbmRpbmcgd2FrZXVwIGJlY2F1c2UgdGhlIG9yZGVyIG9mIHRoZSBsaXN0CisgICAgICogY2hhbmdlZC4gKi8KKyAgICBpZiAoc3lzY2xvY2stPnByaXYtPmFzeW5jX3dha2V1cCkgeworICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgImNsZWFyIGFzeW5jIHdha2V1cCIpOworICAgICAgZ3N0X3N5c3RlbV9jbG9ja19yZW1vdmVfd2FrZXVwIChzeXNjbG9jayk7CisgICAgICBzeXNjbG9jay0+cHJpdi0+YXN5bmNfd2FrZXVwID0gRkFMU0U7CisgICAgfQorCisgICAgLyogcGljayB0aGUgbmV4dCBlbnRyeSAqLworICAgIGVudHJ5ID0gY2xvY2stPmVudHJpZXMtPmRhdGE7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGNsb2NrKTsKKworICAgIHJlcXVlc3RlZCA9IGVudHJ5LT50aW1lOworCisgICAgLyogbm93IHdhaXQgZm9yIHRoZSBlbnRyeSwgd2UgYWxyZWFkeSBob2xkIHRoZSBsb2NrICovCisgICAgcmVzID0KKyAgICAgICAgZ3N0X3N5c3RlbV9jbG9ja19pZF93YWl0X2ppdHRlcl91bmxvY2tlZCAoY2xvY2ssIChHc3RDbG9ja0lEKSBlbnRyeSwKKyAgICAgICAgTlVMTCwgRkFMU0UpOworCisgICAgR1NUX09CSkVDVF9MT0NLIChjbG9jayk7CisKKyAgICBzd2l0Y2ggKHJlcykgeworICAgICAgY2FzZSBHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQ6CisgICAgICAgIC8qIGVudHJ5IHdhcyB1bnNjaGVkdWxlZCwgbW92ZSB0byB0aGUgbmV4dCAqLworICAgICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAiYXN5bmMgZW50cnkgJXAgdW5zY2hlZHVsZWQiLCBlbnRyeSk7CisgICAgICAgIGdvdG8gbmV4dF9lbnRyeTsKKyAgICAgIGNhc2UgR1NUX0NMT0NLX09LOgorICAgICAgY2FzZSBHU1RfQ0xPQ0tfRUFSTFk6CisgICAgICB7CisgICAgICAgIC8qIGVudHJ5IHRpbWVkIG91dCBub3JtYWxseSwgZmlyZSB0aGUgY2FsbGJhY2sgYW5kIG1vdmUgdG8gdGhlIG5leHQKKyAgICAgICAgICogZW50cnkgKi8KKyAgICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgImFzeW5jIGVudHJ5ICVwIHRpbWVkIG91dCIsIGVudHJ5KTsKKyAgICAgICAgaWYgKGVudHJ5LT5mdW5jKSB7CisgICAgICAgICAgLyogdW5sb2NrIGJlZm9yZSBmaXJpbmcgdGhlIGNhbGxiYWNrICovCisgICAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGNsb2NrKTsKKyAgICAgICAgICBlbnRyeS0+ZnVuYyAoY2xvY2ssIGVudHJ5LT50aW1lLCAoR3N0Q2xvY2tJRCkgZW50cnksCisgICAgICAgICAgICAgIGVudHJ5LT51c2VyX2RhdGEpOworICAgICAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoY2xvY2spOworICAgICAgICB9CisgICAgICAgIGlmIChlbnRyeS0+dHlwZSA9PSBHU1RfQ0xPQ0tfRU5UUllfUEVSSU9ESUMpIHsKKyAgICAgICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAidXBkYXRpbmcgcGVyaW9kaWMgZW50cnkgJXAiLCBlbnRyeSk7CisgICAgICAgICAgLyogYWRqdXN0IHRpbWUgbm93ICovCisgICAgICAgICAgZW50cnktPnRpbWUgPSByZXF1ZXN0ZWQgKyBlbnRyeS0+aW50ZXJ2YWw7CisgICAgICAgICAgLyogYW5kIHJlc29ydCB0aGUgbGlzdCBub3cgKi8KKyAgICAgICAgICBjbG9jay0+ZW50cmllcyA9CisgICAgICAgICAgICAgIGdfbGlzdF9zb3J0IChjbG9jay0+ZW50cmllcywgZ3N0X2Nsb2NrX2lkX2NvbXBhcmVfZnVuYyk7CisgICAgICAgICAgLyogYW5kIHJlc3RhcnQgKi8KKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAibW92aW5nIHRvIG5leHQgZW50cnkiKTsKKyAgICAgICAgICBnb3RvIG5leHRfZW50cnk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGNhc2UgR1NUX0NMT0NLX0JVU1k6CisgICAgICAgIC8qIHNvbWVib2R5IHVubG9ja2VkIHRoZSBlbnRyeSBidXQgaXMgd2FzIG5vdCBjYW5jZWxlZCwgVGhpcyBtZWFucyB0aGF0CisgICAgICAgICAqIGVpdGhlciBhIG5ldyBlbnRyeSB3YXMgYWRkZWQgaW4gZnJvbnQgb2YgdGhlIHF1ZXVlIG9yIHNvbWUgb3RoZXIgZW50cnkKKyAgICAgICAgICogd2FzIGNhbmNlbGVkLiBXaGF0ZXZlciBpdCBpcywgcGljayB0aGUgaGVhZCBlbnRyeSBvZiB0aGUgbGlzdCBhbmQKKyAgICAgICAgICogY29udGludWUgd2FpdGluZy4gKi8KKyAgICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgImFzeW5jIGVudHJ5ICVwIG5lZWRzIHJlc3RhcnQiLCBlbnRyeSk7CisKKyAgICAgICAgLyogd2Ugc2V0IHRoZSBlbnRyeSBiYWNrIHRvIHRoZSBPSyBzdGF0ZS4gVGhpcyBpcyBuZWVkZWQgc28gdGhhdCB0aGUKKyAgICAgICAgICogX3Vuc2NoZWR1bGUoKSBjb2RlIGNhbiBzZWUgaWYgYW4gZW50cnkgaXMgY3VycmVudGx5IGJlaW5nIHdhaXRlZAorICAgICAgICAgKiBvbiAod2hlbiBpdHMgc3RhdGUgaXMgQlVTWSkuICovCisgICAgICAgIFNFVF9FTlRSWV9TVEFUVVMgKGVudHJ5LCBHU1RfQ0xPQ0tfT0spOworICAgICAgICBjb250aW51ZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssCisgICAgICAgICAgICAic3RyYW5nZSByZXN1bHQgJWQgd2FpdGluZyBmb3IgJXAsIHNraXBwaW5nIiwgcmVzLCBlbnRyeSk7CisgICAgICAgIGdfd2FybmluZyAoIiVzOiBzdHJhbmdlIHJlc3VsdCAlZCB3YWl0aW5nIGZvciAlcCwgc2tpcHBpbmciLAorICAgICAgICAgICAgR1NUX09CSkVDVF9OQU1FIChjbG9jayksIHJlcywgZW50cnkpOworICAgICAgICBnb3RvIG5leHRfZW50cnk7CisgICAgfQorICBuZXh0X2VudHJ5OgorICAgIC8qIHdlIHJlbW92ZSB0aGUgY3VycmVudCBlbnRyeSBhbmQgdW5yZWYgaXQgKi8KKyAgICBjbG9jay0+ZW50cmllcyA9IGdfbGlzdF9yZW1vdmUgKGNsb2NrLT5lbnRyaWVzLCBlbnRyeSk7CisgICAgZ3N0X2Nsb2NrX2lkX3VucmVmICgoR3N0Q2xvY2tJRCkgZW50cnkpOworICB9CitleGl0OgorICAvKiBzaWduYWwgZXhpdCAqLworICBHU1RfQ0xPQ0tfQlJPQURDQVNUIChjbG9jayk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChjbG9jayk7CisgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssICJleGl0IHN5c3RlbSBjbG9jayB0aHJlYWQiKTsKK30KKworI2lmZGVmIEhBVkVfUE9TSVhfVElNRVJTCitzdGF0aWMgaW5saW5lIGNsb2NraWRfdAorY2xvY2tfdHlwZV90b19wb3NpeF9pZCAoR3N0Q2xvY2tUeXBlIGNsb2NrX3R5cGUpCit7CisjaWZkZWYgSEFWRV9NT05PVE9OSUNfQ0xPQ0sKKyAgaWYgKGNsb2NrX3R5cGUgPT0gR1NUX0NMT0NLX1RZUEVfTU9OT1RPTklDKQorICAgIHJldHVybiBDTE9DS19NT05PVE9OSUM7CisgIGVsc2UKKyNlbmRpZgorICAgIHJldHVybiBDTE9DS19SRUFMVElNRTsKK30KKyNlbmRpZgorCisvKiBNVCBzYWZlICovCitzdGF0aWMgR3N0Q2xvY2tUaW1lCitnc3Rfc3lzdGVtX2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lIChHc3RDbG9jayAqIGNsb2NrKQoreworI2lmZGVmIEdfT1NfV0lOMzIKKyAgR3N0U3lzdGVtQ2xvY2sgKnN5c2Nsb2NrID0gR1NUX1NZU1RFTV9DTE9DS19DQVNUIChjbG9jayk7CisKKyAgaWYgKHN5c2Nsb2NrLT5wcml2LT5mcmVxdWVuY3kuUXVhZFBhcnQgIT0gMCkgeworICAgIExBUkdFX0lOVEVHRVIgbm93OworCisgICAgLyogd2UgcHJlZmVyIHRoZSBoaWdobHkgYWNjdXJhdGUgcGVyZm9ybWFuY2UgY291bnRlcnMgb24gd2luZG93cyAqLworICAgIFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyICgmbm93KTsKKworICAgIHJldHVybiBnc3RfdXRpbF91aW50NjRfc2NhbGUgKG5vdy5RdWFkUGFydCAtIHN5c2Nsb2NrLT5wcml2LT5zdGFydC5RdWFkUGFydCwKKyAgICAgICAgR1NUX1NFQ09ORCwgc3lzY2xvY2stPnByaXYtPmZyZXF1ZW5jeS5RdWFkUGFydCk7CisgIH0gZWxzZQorI2VuZGlmIC8qIEdfT1NfV0lOMzIgKi8KKyNpZiAhZGVmaW5lZCBIQVZFX1BPU0lYX1RJTUVSUworICB7CisgICAgR1RpbWVWYWwgdGltZXZhbDsKKworICAgIGdfZ2V0X2N1cnJlbnRfdGltZSAoJnRpbWV2YWwpOworCisgICAgcmV0dXJuIEdTVF9USU1FVkFMX1RPX1RJTUUgKHRpbWV2YWwpOworICB9CisjZWxzZQorICB7CisgICAgR3N0U3lzdGVtQ2xvY2sgKnN5c2Nsb2NrID0gR1NUX1NZU1RFTV9DTE9DS19DQVNUIChjbG9jayk7CisgICAgY2xvY2tpZF90IHB0eXBlOworICAgIHN0cnVjdCB0aW1lc3BlYyB0czsKKworICAgIHB0eXBlID0gY2xvY2tfdHlwZV90b19wb3NpeF9pZCAoc3lzY2xvY2stPnByaXYtPmNsb2NrX3R5cGUpOworCisgICAgaWYgKEdfVU5MSUtFTFkgKGNsb2NrX2dldHRpbWUgKHB0eXBlLCAmdHMpKSkKKyAgICAgIHJldHVybiBHU1RfQ0xPQ0tfVElNRV9OT05FOworCisgICAgcmV0dXJuIEdTVF9USU1FU1BFQ19UT19USU1FICh0cyk7CisgIH0KKyNlbmRpZgorfQorCitzdGF0aWMgZ3VpbnQ2NAorZ3N0X3N5c3RlbV9jbG9ja19nZXRfcmVzb2x1dGlvbiAoR3N0Q2xvY2sgKiBjbG9jaykKK3sKKyNpZmRlZiBHX09TX1dJTjMyCisgIEdzdFN5c3RlbUNsb2NrICpzeXNjbG9jayA9IEdTVF9TWVNURU1fQ0xPQ0tfQ0FTVCAoY2xvY2spOworCisgIGlmIChzeXNjbG9jay0+cHJpdi0+ZnJlcXVlbmN5LlF1YWRQYXJ0ICE9IDApIHsKKyAgICByZXR1cm4gR1NUX1NFQ09ORCAvIHN5c2Nsb2NrLT5wcml2LT5mcmVxdWVuY3kuUXVhZFBhcnQ7CisgIH0gZWxzZQorI2VuZGlmIC8qIEdfT1NfV0lOMzIgKi8KKyNpZmRlZiBIQVZFX1BPU0lYX1RJTUVSUworICB7CisgICAgR3N0U3lzdGVtQ2xvY2sgKnN5c2Nsb2NrID0gR1NUX1NZU1RFTV9DTE9DS19DQVNUIChjbG9jayk7CisgICAgY2xvY2tpZF90IHB0eXBlOworICAgIHN0cnVjdCB0aW1lc3BlYyB0czsKKworICAgIHB0eXBlID0gY2xvY2tfdHlwZV90b19wb3NpeF9pZCAoc3lzY2xvY2stPnByaXYtPmNsb2NrX3R5cGUpOworCisgICAgaWYgKEdfVU5MSUtFTFkgKGNsb2NrX2dldHJlcyAocHR5cGUsICZ0cykpKQorICAgICAgcmV0dXJuIEdTVF9DTE9DS19USU1FX05PTkU7CisKKyAgICByZXR1cm4gR1NUX1RJTUVTUEVDX1RPX1RJTUUgKHRzKTsKKyAgfQorI2Vsc2UKKyAgeworICAgIHJldHVybiAxICogR1NUX1VTRUNPTkQ7CisgIH0KKyNlbmRpZgorfQorCisvKiBzeW5jaHJvbm91c2x5IHdhaXQgb24gdGhlIGdpdmVuIEdzdENsb2NrRW50cnkuCisgKgorICogV2UgZG8gdGhpcyBieSBibG9ja2luZyBvbiB0aGUgZ2xvYmFsIEdzdFBvbGwgdGltZXIgd2l0aAorICogdGhlIHJlcXVlc3RlZCB0aW1lb3V0LiBUaGlzIGFsbG93cyB1cyB0byB1bmJsb2NrIHRoZQorICogZW50cnkgYnkgd3JpdGluZyBvbiB0aGUgY29udHJvbCBmZC4KKyAqCisgKiBOb3RlIHRoYXQgd3JpdGluZyB0aGUgZ2xvYmFsIEdzdFBvbGwgdW5sb2NrcyBhbGwgd2FpdGluZyBlbnRyaWVzLiBTbworICogd2UgbmVlZCB0byBjaGVjayBpZiBhbiB1bmxvY2tlZCBlbnRyeSBoYXMgY2hhbmdlZCB3aGVuIGl0IHVubG9ja3MuCisgKgorICogRW50cmllcyB0aGF0IGFycml2ZSB0b28gbGF0ZSBhcmUgc2ltcGx5IG5vdCB3YWl0ZWQgb24gYW5kIGEKKyAqIEdTVF9DTE9DS19FQVJMWSByZXN1bHQgaXMgcmV0dXJuZWQuCisgKgorICogTVQgc2FmZS4KKyAqLworc3RhdGljIEdzdENsb2NrUmV0dXJuCitnc3Rfc3lzdGVtX2Nsb2NrX2lkX3dhaXRfaml0dGVyX3VubG9ja2VkIChHc3RDbG9jayAqIGNsb2NrLAorICAgIEdzdENsb2NrRW50cnkgKiBlbnRyeSwgR3N0Q2xvY2tUaW1lRGlmZiAqIGppdHRlciwgZ2Jvb2xlYW4gcmVzdGFydCkKK3sKKyAgR3N0U3lzdGVtQ2xvY2sgKnN5c2Nsb2NrID0gR1NUX1NZU1RFTV9DTE9DS19DQVNUIChjbG9jayk7CisgIEdzdENsb2NrVGltZSBlbnRyeXQsIG5vdzsKKyAgR3N0Q2xvY2tUaW1lRGlmZiBkaWZmOworICBHc3RDbG9ja1JldHVybiBzdGF0dXM7CisKKyAgaWYgKEdfVU5MSUtFTFkgKEdFVF9FTlRSWV9TVEFUVVMgKGVudHJ5KSA9PSBHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQpKQorICAgIHJldHVybiBHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQ7CisKKyAgLyogbmVlZCB0byBjYWxsIHRoZSBvdmVycmlkZGVuIG1ldGhvZCBiZWNhdXNlIHdlIHdhbnQgdG8gc3luYyBhZ2FpbnN0IHRoZSB0aW1lCisgICAqIG9mIHRoZSBjbG9jaywgd2hhdGV2ZXIgdGhlIHN1YmNsYXNzIHVzZXMgYXMgYSBjbG9jay4gKi8KKyAgbm93ID0gZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jayk7CisKKyAgLyogZ2V0IHRoZSB0aW1lIG9mIHRoZSBlbnRyeSAqLworICBlbnRyeXQgPSBHU1RfQ0xPQ0tfRU5UUllfVElNRSAoZW50cnkpOworCisgIC8qIHRoZSBkaWZmIG9mIHRoZSBlbnRyeSB3aXRoIHRoZSBjbG9jayBpcyB0aGUgYW1vdW50IG9mIHRpbWUgd2UgaGF2ZSB0bworICAgKiB3YWl0ICovCisgIGRpZmYgPSBHU1RfQ0xPQ0tfRElGRiAobm93LCBlbnRyeXQpOworICBpZiAoR19MSUtFTFkgKGppdHRlcikpCisgICAgKmppdHRlciA9IC1kaWZmOworCisgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssICJlbnRyeSAlcCIKKyAgICAgICIgdGltZSAlIiBHU1RfVElNRV9GT1JNQVQKKyAgICAgICIgbm93ICUiIEdTVF9USU1FX0ZPUk1BVAorICAgICAgIiBkaWZmICh0aW1lLW5vdykgJSIgR19HSU5UNjRfRk9STUFULAorICAgICAgZW50cnksIEdTVF9USU1FX0FSR1MgKGVudHJ5dCksIEdTVF9USU1FX0FSR1MgKG5vdyksIGRpZmYpOworCisgIGlmIChHX0xJS0VMWSAoZGlmZiA+IDApKSB7CisjaWZkZWYgV0FJVF9ERUJVR0dJTkcKKyAgICBHc3RDbG9ja1RpbWUgZmluYWw7CisjZW5kaWYKKworICAgIHdoaWxlIChUUlVFKSB7CisgICAgICBnaW50IHBvbGxyZXQ7CisKKyAgICAgIGRvIHsKKyAgICAgICAgc3RhdHVzID0gR0VUX0VOVFJZX1NUQVRVUyAoZW50cnkpOworCisgICAgICAgIC8qIHN0b3Agd2hlbiB3ZSBhcmUgdW5zY2hlZHVsZWQgKi8KKyAgICAgICAgaWYgKEdfVU5MSUtFTFkgKHN0YXR1cyA9PSBHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQpKQorICAgICAgICAgIGdvdG8gZG9uZTsKKworICAgICAgICAvKiBtYXJrIHRoZSBlbnRyeSBhcyBidXN5IGJ1dCB3YXRjaCBvdXQgZm9yIGludGVybWVkaWF0ZSB1bnNjaGVkdWxlZAorICAgICAgICAgKiBzdGF0dXNlcyAqLworICAgICAgfSB3aGlsZSAoR19VTkxJS0VMWSAoIUNBU19FTlRSWV9TVEFUVVMgKGVudHJ5LCBzdGF0dXMsIEdTVF9DTE9DS19CVVNZKSkpOworCisgICAgICAvKiBub3cgd2FpdCBvbiB0aGUgZW50cnksIGl0IGVpdGhlciB0aW1lcyBvdXQgb3IgdGhlIGZkIGlzIHdyaXR0ZW4uIFRoZQorICAgICAgICogc3RhdHVzIG9mIHRoZSBlbnRyeSBpcyBvbmx5IEJVU1kgYXJvdW5kIHRoZSBwb2xsLiAqLworICAgICAgcG9sbHJldCA9IGdzdF9wb2xsX3dhaXQgKHN5c2Nsb2NrLT5wcml2LT50aW1lciwgZGlmZik7CisKKyAgICAgIC8qIGdldCB0aGUgbmV3IHN0YXR1cywgbWFyayBhcyBET05FLiBXZSBkbyB0aGlzIHNvIHRoYXQgdGhlIHVuc2NoZWR1bGUKKyAgICAgICAqIGZ1bmN0aW9uIGtub3dzIHdoZW4gd2UgbGVmdCB0aGUgcG9sbCBhbmQgZG9lc24ndCBuZWVkIHRvIHdha2V1cCB0aGUKKyAgICAgICAqIHBvbGwgYW55bW9yZS4gKi8KKyAgICAgIGRvIHsKKyAgICAgICAgc3RhdHVzID0gR0VUX0VOVFJZX1NUQVRVUyAoZW50cnkpOworICAgICAgICAvKiB3ZSB3ZXJlIHVuc2NoZWR1bGVkLCBleGl0IGltbWVkaWF0ZWx5ICovCisgICAgICAgIGlmIChHX1VOTElLRUxZIChzdGF0dXMgPT0gR1NUX0NMT0NLX1VOU0NIRURVTEVEKSkKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0gd2hpbGUgKEdfVU5MSUtFTFkgKCFDQVNfRU5UUllfU1RBVFVTIChlbnRyeSwgc3RhdHVzLCBHU1RfQ0xPQ0tfRE9ORSkpKTsKKworICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgImVudHJ5ICVwIHVubG9ja2VkLCBzdGF0dXMgJWQsIHJldCAlZCIsCisgICAgICAgICAgZW50cnksIHN0YXR1cywgcG9sbHJldCk7CisKKyAgICAgIGlmIChHX1VOTElLRUxZIChzdGF0dXMgPT0gR1NUX0NMT0NLX1VOU0NIRURVTEVEKSkgeworICAgICAgICAvKiB0cnkgdG8gY2xlYW4gdXAgVGhlIHVuc2NoZWR1bGUgZnVuY3Rpb24gbWFuYWdlZCB0byBzZXQgdGhlIHN0YXR1cyB0bworICAgICAgICAgKiB1bnNjaGVkdWxlZC4gV2Ugbm93IHRha2UgdGhlIGxvY2sgYW5kIG1hcmsgdGhlIGVudHJ5IGFzIHVuc2NoZWR1bGVkLgorICAgICAgICAgKiBUaGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgdW5zY2hlZHVsZSBmdW5jdGlvbiBkb2Vzbid0IHBlcmZvcm0gYQorICAgICAgICAgKiB3YWtldXAgYW55bW9yZS4gSWYgdGhlIHVuc2NoZWR1bGUgZnVuY3Rpb24gaGFzIGEgY2hhbmdlIHRvIHBlcmZvcm0KKyAgICAgICAgICogdGhlIHdha2V1cCBiZWZvcmUgdXMsIHdlIGNsZWFuIHVwIGhlcmUgKi8KKyAgICAgICAgR1NUX09CSkVDVF9MT0NLIChzeXNjbG9jayk7CisgICAgICAgIGVudHJ5LT51bnNjaGVkdWxlZCA9IFRSVUU7CisgICAgICAgIGlmIChlbnRyeS0+d29rZW5fdXApIHsKKyAgICAgICAgICBnc3Rfc3lzdGVtX2Nsb2NrX3JlbW92ZV93YWtldXAgKHN5c2Nsb2NrKTsKKyAgICAgICAgfQorICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3lzY2xvY2spOworICAgICAgICBnb3RvIGRvbmU7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoR19VTkxJS0VMWSAocG9sbHJldCAhPSAwKSkgeworICAgICAgICAgIC8qIHNvbWUgb3RoZXIgaWQgZ290IHVubG9ja2VkICovCisgICAgICAgICAgaWYgKCFyZXN0YXJ0KSB7CisgICAgICAgICAgICAvKiB0aGlzIGNhbiBoYXBwZW4gaWYgdGhlIGVudHJ5IGdvdCB1bmxvY2tlZCBiZWNhdXNlIG9mIGFuIGFzeW5jCisgICAgICAgICAgICAgKiBlbnRyeSB3YXMgYWRkZWQgdG8gdGhlIGhlYWQgb2YgdGhlIGFzeW5jIHF1ZXVlLiAqLworICAgICAgICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgIndha2V1cCB3YWl0aW5nIGZvciBlbnRyeSAlcCIsIGVudHJ5KTsKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAvKiB3YWl0IHRpbGwgYWxsIHRoZSBlbnRyaWVzIGdvdCB3b2tlbiB1cCAqLworICAgICAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3lzY2xvY2spOworICAgICAgICAgIGdzdF9zeXN0ZW1fY2xvY2tfd2FpdF93YWtldXAgKHN5c2Nsb2NrKTsKKyAgICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3lzY2xvY2spOworCisgICAgICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgImVudHJ5ICVwIG5lZWRzIHRvIGJlIHJlc3RhcnRlZCIsCisgICAgICAgICAgICAgIGVudHJ5KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAiZW50cnkgJXAgdW5sb2NrZWQgYWZ0ZXIgdGltZW91dCIsCisgICAgICAgICAgICAgIGVudHJ5KTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHJlc2NoZWR1bGUgaWYgZ3N0X3BvbGxfd2FpdCByZXR1cm5lZCBlYXJseSBvciB3ZSBoYXZlIHRvIHJlc2NoZWR1bGUgYWZ0ZXIKKyAgICAgICAgICogYW4gdW5sb2NrKi8KKyAgICAgICAgbm93ID0gZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jayk7CisgICAgICAgIGRpZmYgPSBHU1RfQ0xPQ0tfRElGRiAobm93LCBlbnRyeXQpOworCisgICAgICAgIGlmIChkaWZmIDw9IDApIHsKKyAgICAgICAgICAvKiB0aW1lb3V0LCB0aGlzIGlzIGZpbmUsIHdlIGNhbiByZXBvcnQgc3VjY2VzcyBub3cgKi8KKyAgICAgICAgICBzdGF0dXMgPSBHU1RfQ0xPQ0tfT0s7CisgICAgICAgICAgU0VUX0VOVFJZX1NUQVRVUyAoZW50cnksIHN0YXR1cyk7CisKKyAgICAgICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLAorICAgICAgICAgICAgICAiZW50cnkgJXAgZmluaXNoZWQsIGRpZmYgJSIgR19HSU5UNjRfRk9STUFULCBlbnRyeSwgZGlmZik7CisKKyNpZmRlZiBXQUlUX0RFQlVHR0lORworICAgICAgICAgIGZpbmFsID0gZ3N0X3N5c3RlbV9jbG9ja19nZXRfaW50ZXJuYWxfdGltZSAoY2xvY2spOworICAgICAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssICJXYWl0ZWQgZm9yICUiIEdfR0lOVDY0X0ZPUk1BVAorICAgICAgICAgICAgICAiIGdvdCAlIiBHX0dJTlQ2NF9GT1JNQVQgIiBkaWZmICUiIEdfR0lOVDY0X0ZPUk1BVAorICAgICAgICAgICAgICAiICVnIHRhcmdldC1vZmZzZXQgJSIgR19HSU5UNjRfRk9STUFUICIgJWciLCBlbnRyeXQsIG5vdywKKyAgICAgICAgICAgICAgbm93IC0gZW50cnl0LAorICAgICAgICAgICAgICAoZG91YmxlKSAoR3N0Q2xvY2tUaW1lRGlmZikgKG5vdyAtIGVudHJ5dCkgLyBHU1RfU0VDT05ELAorICAgICAgICAgICAgICAoZmluYWwgLSB0YXJnZXQpLAorICAgICAgICAgICAgICAoKGRvdWJsZSkgKEdzdENsb2NrVGltZURpZmYpIChmaW5hbCAtIHRhcmdldCkpIC8gR1NUX1NFQ09ORCk7CisjZW5kaWYKKyAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywKKyAgICAgICAgICAgICAgImVudHJ5ICVwIHJlc3RhcnQsIGRpZmYgJSIgR19HSU5UNjRfRk9STUFULCBlbnRyeSwgZGlmZik7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0gZWxzZSB7CisgICAgLyogd2UgYXJlIHJpZ2h0IG9uIHRpbWUgb3IgdG9vIGxhdGUgKi8KKyAgICBpZiAoR19VTkxJS0VMWSAoZGlmZiA9PSAwKSkKKyAgICAgIHN0YXR1cyA9IEdTVF9DTE9DS19PSzsKKyAgICBlbHNlCisgICAgICBzdGF0dXMgPSBHU1RfQ0xPQ0tfRUFSTFk7CisKKyAgICBTRVRfRU5UUllfU1RBVFVTIChlbnRyeSwgc3RhdHVzKTsKKyAgfQorZG9uZToKKyAgcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIEdzdENsb2NrUmV0dXJuCitnc3Rfc3lzdGVtX2Nsb2NrX2lkX3dhaXRfaml0dGVyIChHc3RDbG9jayAqIGNsb2NrLCBHc3RDbG9ja0VudHJ5ICogZW50cnksCisgICAgR3N0Q2xvY2tUaW1lRGlmZiAqIGppdHRlcikKK3sKKyAgcmV0dXJuIGdzdF9zeXN0ZW1fY2xvY2tfaWRfd2FpdF9qaXR0ZXJfdW5sb2NrZWQgKGNsb2NrLCBlbnRyeSwgaml0dGVyLCBUUlVFKTsKK30KKworLyogU3RhcnQgdGhlIGFzeW5jIGNsb2NrIHRocmVhZC4gTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgb2JqZWN0IGxvY2sKKyAqIGhlbGQgKi8KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3N5c3RlbV9jbG9ja19zdGFydF9hc3luYyAoR3N0U3lzdGVtQ2xvY2sgKiBjbG9jaykKK3sKKyAgR0Vycm9yICplcnJvciA9IE5VTEw7CisKKyAgaWYgKEdfTElLRUxZIChjbG9jay0+dGhyZWFkICE9IE5VTEwpKQorICAgIHJldHVybiBUUlVFOyAgICAgICAgICAgICAgICAvKiBUaHJlYWQgYWxyZWFkeSBydW5uaW5nLiBOb3RoaW5nIHRvIGRvICovCisKKyAgY2xvY2stPnRocmVhZCA9IGdfdGhyZWFkX2NyZWF0ZSAoKEdUaHJlYWRGdW5jKSBnc3Rfc3lzdGVtX2Nsb2NrX2FzeW5jX3RocmVhZCwKKyAgICAgIGNsb2NrLCBUUlVFLCAmZXJyb3IpOworICBpZiAoR19VTkxJS0VMWSAoZXJyb3IpKQorICAgIGdvdG8gbm9fdGhyZWFkOworCisgIC8qIHdhaXQgZm9yIGl0IHRvIHNwaW4gdXAgKi8KKyAgR1NUX0NMT0NLX1dBSVQgKGNsb2NrKTsKKworICByZXR1cm4gVFJVRTsKKworICAvKiBFUlJPUlMgKi8KK25vX3RocmVhZDoKKyAgeworICAgIGdfd2FybmluZyAoImNvdWxkIG5vdCBjcmVhdGUgYXN5bmMgY2xvY2sgdGhyZWFkOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKyAgICBnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKyAgfQorICByZXR1cm4gRkFMU0U7Cit9CisKKy8qIEFkZCBhbiBlbnRyeSB0byB0aGUgbGlzdCBvZiBwZW5kaW5nIGFzeW5jIHdhaXRzLiBUaGUgZW50cnkgaXMgaW5zZXJ0ZWQKKyAqIGluIHNvcnRlZCBvcmRlci4gSWYgd2UgaW5zZXJ0ZWQgdGhlIGVudHJ5IGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0LCB3ZQorICogbmVlZCB0byBzaWduYWwgdGhlIHRocmVhZCBhcyBpdCBtaWdodCBlaXRoZXIgYmUgd2FpdGluZyBvbiBpdCBvciB3YWl0aW5nCisgKiBmb3IgYSBuZXcgZW50cnkuCisgKgorICogTVQgc2FmZS4KKyAqLworc3RhdGljIEdzdENsb2NrUmV0dXJuCitnc3Rfc3lzdGVtX2Nsb2NrX2lkX3dhaXRfYXN5bmMgKEdzdENsb2NrICogY2xvY2ssIEdzdENsb2NrRW50cnkgKiBlbnRyeSkKK3sKKyAgR3N0U3lzdGVtQ2xvY2sgKnN5c2Nsb2NrOworICBHc3RDbG9ja0VudHJ5ICpoZWFkOworCisgIHN5c2Nsb2NrID0gR1NUX1NZU1RFTV9DTE9DS19DQVNUIChjbG9jayk7CisKKyAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgImFkZGluZyBhc3luYyBlbnRyeSAlcCIsIGVudHJ5KTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKGNsb2NrKTsKKyAgLyogU3RhcnQgdGhlIGNsb2NrIGFzeW5jIHRocmVhZCBpZiBuZWVkZWQgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKCFnc3Rfc3lzdGVtX2Nsb2NrX3N0YXJ0X2FzeW5jIChzeXNjbG9jaykpKQorICAgIGdvdG8gdGhyZWFkX2Vycm9yOworCisgIGlmIChHX1VOTElLRUxZIChHRVRfRU5UUllfU1RBVFVTIChlbnRyeSkgPT0gR1NUX0NMT0NLX1VOU0NIRURVTEVEKSkKKyAgICBnb3RvIHdhc191bnNjaGVkdWxlZDsKKworICBpZiAoY2xvY2stPmVudHJpZXMpCisgICAgaGVhZCA9IGNsb2NrLT5lbnRyaWVzLT5kYXRhOworICBlbHNlCisgICAgaGVhZCA9IE5VTEw7CisKKyAgLyogbmVlZCB0byB0YWtlIGEgcmVmICovCisgIGdzdF9jbG9ja19pZF9yZWYgKChHc3RDbG9ja0lEKSBlbnRyeSk7CisgIC8qIGluc2VydCB0aGUgZW50cnkgaW4gc29ydGVkIG9yZGVyICovCisgIGNsb2NrLT5lbnRyaWVzID0gZ19saXN0X2luc2VydF9zb3J0ZWQgKGNsb2NrLT5lbnRyaWVzLCBlbnRyeSwKKyAgICAgIGdzdF9jbG9ja19pZF9jb21wYXJlX2Z1bmMpOworCisgIC8qIG9ubHkgbmVlZCB0byBzZW5kIHRoZSBzaWduYWwgaWYgdGhlIGVudHJ5IHdhcyBhZGRlZCB0byB0aGUKKyAgICogZnJvbnQsIGVsc2UgdGhlIHRocmVhZCBpcyBqdXN0IHdhaXRpbmcgZm9yIGFub3RoZXIgZW50cnkgYW5kCisgICAqIHdpbGwgZ2V0IHRvIHRoaXMgZW50cnkgYXV0b21hdGljYWxseS4gKi8KKyAgaWYgKGNsb2NrLT5lbnRyaWVzLT5kYXRhID09IGVudHJ5KSB7CisgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgImFzeW5jIGVudHJ5IGFkZGVkIHRvIGhlYWQgJXAiLCBoZWFkKTsKKyAgICBpZiAoaGVhZCA9PSBOVUxMKSB7CisgICAgICAvKiB0aGUgbGlzdCB3YXMgZW1wdHkgYmVmb3JlLCBzaWduYWwgdGhlIGNvbmQgc28gdGhhdCB0aGUgYXN5bmMgdGhyZWFkIGNhbgorICAgICAgICogc3RhcnQgdGFraW5nIGEgbG9vayBhdCB0aGUgcXVldWUgKi8KKyAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssICJmaXJzdCBlbnRyeSwgc2VuZGluZyBzaWduYWwiKTsKKyAgICAgIEdTVF9DTE9DS19CUk9BRENBU1QgKGNsb2NrKTsKKyAgICB9IGVsc2UgeworICAgICAgR3N0Q2xvY2tSZXR1cm4gc3RhdHVzOworCisgICAgICBzdGF0dXMgPSBHRVRfRU5UUllfU1RBVFVTIChoZWFkKTsKKyAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssICJoZWFkIGVudHJ5ICVwIHN0YXR1cyAlZCIsIGhlYWQsIHN0YXR1cyk7CisKKyAgICAgIGlmIChzdGF0dXMgPT0gR1NUX0NMT0NLX0JVU1kpIHsKKyAgICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgImhlYWQgZW50cnkgaXMgYnVzeSIpOworICAgICAgICAvKiB0aGUgYXN5bmMgdGhyZWFkIHdhcyB3YWl0aW5nIGZvciBhbiBlbnRyeSwgdW5sb2NrIHRoZSB3YWl0IHNvIHRoYXQgaXQKKyAgICAgICAgICogbG9va3MgYXQgdGhlIG5ldyBoZWFkIGVudHJ5IGluc3RlYWQsIHdlIG9ubHkgbmVlZCB0byBkbyB0aGlzIG9uY2UgKi8KKyAgICAgICAgaWYgKCFzeXNjbG9jay0+cHJpdi0+YXN5bmNfd2FrZXVwKSB7CisgICAgICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgIndha2V1cCBhc3luYyB0aHJlYWQiKTsKKyAgICAgICAgICBzeXNjbG9jay0+cHJpdi0+YXN5bmNfd2FrZXVwID0gVFJVRTsKKyAgICAgICAgICBnc3Rfc3lzdGVtX2Nsb2NrX2FkZF93YWtldXAgKHN5c2Nsb2NrKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICBHU1RfT0JKRUNUX1VOTE9DSyAoY2xvY2spOworCisgIHJldHVybiBHU1RfQ0xPQ0tfT0s7CisKKyAgLyogRVJST1JTICovCit0aHJlYWRfZXJyb3I6CisgIHsKKyAgICAvKiBDb3VsZCBub3Qgc3RhcnQgdGhlIGFzeW5jIGNsb2NrIHRocmVhZCAqLworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChjbG9jayk7CisgICAgcmV0dXJuIEdTVF9DTE9DS19FUlJPUjsKKyAgfQord2FzX3Vuc2NoZWR1bGVkOgorICB7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGNsb2NrKTsKKyAgICByZXR1cm4gR1NUX0NMT0NLX1VOU0NIRURVTEVEOworICB9Cit9CisKKy8qIHVuc2NoZWR1bGUgYW4gZW50cnkuIFRoaXMgd2lsbCBzZXQgdGhlIHN0YXRlIG9mIHRoZSBlbnRyeSB0byBHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQKKyAqIGFuZCB3aWxsIHNpZ25hbCBhbnkgdGhyZWFkIHdhaXRpbmcgZm9yIGVudHJpZXMgdG8gcmVjaGVjayB0aGVpciBlbnRyeS4KKyAqIFdlIGNhbm5vdCByZWFsbHkgZGVjaWRlIGlmIHRoZSBzaWduYWwgaXMgbmVlZGVkIG9yIG5vdCBiZWNhdXNlIHRoZSBlbnRyeQorICogY291bGQgYmUgd2FpdGVkIG9uIGluIGFzeW5jIG9yIHN5bmMgbW9kZS4KKyAqCisgKiBNVCBzYWZlLgorICovCitzdGF0aWMgdm9pZAorZ3N0X3N5c3RlbV9jbG9ja19pZF91bnNjaGVkdWxlIChHc3RDbG9jayAqIGNsb2NrLCBHc3RDbG9ja0VudHJ5ICogZW50cnkpCit7CisgIEdzdFN5c3RlbUNsb2NrICpzeXNjbG9jazsKKyAgR3N0Q2xvY2tSZXR1cm4gc3RhdHVzOworCisgIHN5c2Nsb2NrID0gR1NUX1NZU1RFTV9DTE9DS19DQVNUIChjbG9jayk7CisKKyAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgInVuc2NoZWR1bGluZyBlbnRyeSAlcCIsIGVudHJ5KTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKGNsb2NrKTsKKyAgLyogY2hhbmdlIHRoZSBlbnRyeSBzdGF0dXMgdG8gdW5zY2hlZHVsZWQgKi8KKyAgZG8geworICAgIHN0YXR1cyA9IEdFVF9FTlRSWV9TVEFUVVMgKGVudHJ5KTsKKyAgfSB3aGlsZSAoR19VTkxJS0VMWSAoIUNBU19FTlRSWV9TVEFUVVMgKGVudHJ5LCBzdGF0dXMsCisgICAgICAgICAgICAgIEdTVF9DTE9DS19VTlNDSEVEVUxFRCkpKTsKKworICBpZiAoR19MSUtFTFkgKHN0YXR1cyA9PSBHU1RfQ0xPQ0tfQlVTWSkpIHsKKyAgICAvKiB0aGUgZW50cnkgd2FzIGJlaW5nIGJ1c3ksIHdha2UgdXAgYWxsIGVudHJpZXMgc28gdGhhdCB0aGV5IHJlY2hlY2sgdGhlaXIKKyAgICAgKiBzdGF0dXMuIFdlIGNhbm5vdCB3YWtlIHVwIGp1c3Qgb25lIGVudHJ5IGJlY2F1c2UgYWxsb2NhdGluZyBzdWNoIGEKKyAgICAgKiBkYXRhc3RydWN0dXJlIGZvciBlYWNoIGVudHJ5IHdvdWxkIGJlIHRvbyBoZWF2eSBhbmQgdW5sb2NraW5nIGFuIGVudHJ5CisgICAgICogaXMgdXN1YWxseSBkb25lIHdoZW4gc2h1dHRpbmcgZG93biBvciBzb21lIG90aGVyIGV4Y2VwdGlvbmFsIGNhc2UuICovCisgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgImVudHJ5IHdhcyBCVVNZLCBkb2luZyB3YWtldXAiKTsKKyAgICBpZiAoIWVudHJ5LT51bnNjaGVkdWxlZCAmJiAhZW50cnktPndva2VuX3VwKSB7CisgICAgICBnc3Rfc3lzdGVtX2Nsb2NrX2FkZF93YWtldXAgKHN5c2Nsb2NrKTsKKyAgICAgIGVudHJ5LT53b2tlbl91cCA9IFRSVUU7CisgICAgfQorICB9CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChjbG9jayk7Cit9CmRpZmYgLS1naXQgYS9nc3QvZ3N0c3lzdGVtY2xvY2suaCBiL2dzdC9nc3RzeXN0ZW1jbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MGY3MDAKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0c3lzdGVtY2xvY2suaApAQCAtMCwwICsxLDg5IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgorICoKKyAqIGdzdHN5c3RlbWNsb2NrLmg6IEEgY2xvY2sgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gc3lzdGVtIHRpbWUKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKKyNpZm5kZWYgX19HU1RfU1lTVEVNX0NMT0NLX0hfXworI2RlZmluZSBfX0dTVF9TWVNURU1fQ0xPQ0tfSF9fCisKKyNpbmNsdWRlIDxnc3QvZ3N0Y2xvY2suaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEdTVF9UWVBFX1NZU1RFTV9DTE9DSyAgICAgICAgICAgICAgICAgICAoZ3N0X3N5c3RlbV9jbG9ja19nZXRfdHlwZSAoKSkKKyNkZWZpbmUgR1NUX1NZU1RFTV9DTE9DSyhvYmopICAgICAgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX1NZU1RFTV9DTE9DSywgR3N0U3lzdGVtQ2xvY2spKQorI2RlZmluZSBHU1RfU1lTVEVNX0NMT0NLX0NBU1Qob2JqKSAgICAgICAgICAgICAgKChHc3RTeXN0ZW1DbG9jayAqKShvYmopKQorI2RlZmluZSBHU1RfSVNfU1lTVEVNX0NMT0NLKG9iaikgICAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfU1lTVEVNX0NMT0NLKSkKKyNkZWZpbmUgR1NUX1NZU1RFTV9DTE9DS19DTEFTUyhrbGFzcykgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfU1lTVEVNX0NMT0NLLCBHc3RTeXN0ZW1DbG9ja0NsYXNzKSkKKyNkZWZpbmUgR1NUX0lTX1NZU1RFTV9DTE9DS19DTEFTUyhrbGFzcykgICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfU1lTVEVNX0NMT0NLKSkKKyNkZWZpbmUgR1NUX1NZU1RFTV9DTE9DS19HRVRfQ0xBU1Mob2JqKSAgICAgICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfU1lTVEVNX0NMT0NLLCBHc3RTeXN0ZW1DbG9ja0NsYXNzKSkKKworCit0eXBlZGVmIHN0cnVjdCBfR3N0U3lzdGVtQ2xvY2sgR3N0U3lzdGVtQ2xvY2s7Cit0eXBlZGVmIHN0cnVjdCBfR3N0U3lzdGVtQ2xvY2tDbGFzcyBHc3RTeXN0ZW1DbG9ja0NsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX0dzdFN5c3RlbUNsb2NrUHJpdmF0ZSBHc3RTeXN0ZW1DbG9ja1ByaXZhdGU7CisKKy8qKgorICogR3N0Q2xvY2tUeXBlOgorICogQEdTVF9DTE9DS19UWVBFX1JFQUxUSU1FOiB0aW1lIHNpbmNlIEVwb2NoCisgKiBAR1NUX0NMT0NLX1RZUEVfTU9OT1RPTklDOiBtb25vdG9uaWMgdGltZSBzaW5jZSBzb21lIHVuc3BlY2lmaWVkIHN0YXJ0aW5nCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludAorICoKKyAqIFRoZSBkaWZmZXJlbnQga2luZCBvZiBjbG9ja3MuCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIEdTVF9DTE9DS19UWVBFX1JFQUxUSU1FICAgICAgID0gMCwKKyAgR1NUX0NMT0NLX1RZUEVfTU9OT1RPTklDICAgICAgPSAxCit9IEdzdENsb2NrVHlwZTsKKworLyoqCisgKiBHc3RTeXN0ZW1DbG9jazoKKyAqCisgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBhICNHc3RDbG9jayB0aGF0IHVzZXMgdGhlIHN5c3RlbSB0aW1lLgorICovCitzdHJ1Y3QgX0dzdFN5c3RlbUNsb2NrIHsKKyAgR3N0Q2xvY2sgICAgICAgY2xvY2s7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIEdUaHJlYWQgICAgICAgKnRocmVhZDsgICAgICAgIC8qIHRocmVhZCBmb3IgYXN5bmMgbm90aWZ5ICovCisgIGdib29sZWFuICAgICAgIHN0b3BwaW5nOworCisgIC8qIEFCSSBhZGRlZCAqLworICBHc3RTeXN0ZW1DbG9ja1ByaXZhdGUgKnByaXY7CisKKyAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Cit9OworCitzdHJ1Y3QgX0dzdFN5c3RlbUNsb2NrQ2xhc3MgeworICBHc3RDbG9ja0NsYXNzICBwYXJlbnRfY2xhc3M7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOworfTsKKworR1R5cGUgICAgICAgICAgICAgICAgICAgZ3N0X3N5c3RlbV9jbG9ja19nZXRfdHlwZSAgICAgICAodm9pZCk7CisKK0dzdENsb2NrKiAgICAgICAgICAgICAgIGdzdF9zeXN0ZW1fY2xvY2tfb2J0YWluICAgICAgICAgKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HU1RfU1lTVEVNX0NMT0NLX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHRhZ2xpc3QuYyBiL2dzdC9nc3R0YWdsaXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYyZmJjNwotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3R0YWdsaXN0LmMKQEAgLTAsMCArMSwxODg1IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwMyBCZW5qYW1pbiBPdHRlIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KKyAqCisgKiBnc3R0YWdsaXN0LmM6IHRhZyBzdXBwb3J0IChha2EgbWV0YWRhdGEpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoqCisgKiBTRUNUSU9OOmdzdHRhZ2xpc3QKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogTGlzdCBvZiB0YWdzIGFuZCB2YWx1ZXMgdXNlZCB0byBkZXNjcmliZSBtZWRpYSBtZXRhZGF0YQorICoKKyAqIExpc3Qgb2YgdGFncyBhbmQgdmFsdWVzIHVzZWQgdG8gZGVzY3JpYmUgbWVkaWEgbWV0YWRhdGEuCisgKgorICogU3RyaW5ncyBtdXN0IGJlIGluIEFTQ0lJIG9yIFVURi04IGVuY29kaW5nLiBObyBvdGhlciBlbmNvZGluZ3MgYXJlIGFsbG93ZWQuCisgKgorICogTGFzdCByZXZpZXdlZCBvbiAyMDA5LTA2LTA5ICgwLjEwLjIzKQorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJnc3QtaTE4bi1saWIuaCIKKyNpbmNsdWRlICJnc3R0YWdsaXN0LmgiCisjaW5jbHVkZSAiZ3N0aW5mby5oIgorI2luY2x1ZGUgImdzdHZhbHVlLmgiCisjaW5jbHVkZSAiZ3N0YnVmZmVyLmgiCisjaW5jbHVkZSAiZ3N0cXVhcmsuaCIKKworI2luY2x1ZGUgPGdvYmplY3QvZ3ZhbHVlY29sbGVjdG9yLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgR1NUX1RBR19JU19WQUxJRCh0YWcpICAgICAgICAgICAoZ3N0X3RhZ19nZXRfaW5mbyAodGFnKSAhPSBOVUxMKQorCisvKiBGSVhNRSAwLjExOiB1c2UgR1BhcmFtU3BlY3Mgb3Igc29tZXRoaW5nIHNpbWlsYXIgZm9yIHRhZyByZWdpc3RyYXRpb25zLAorICogcG9zc2libHkgZXZlbiBnc3RfdGFnX3JlZ2lzdGVyKCkuIEVzcGVjaWFsbHkgdmFsdWUgcmFuZ2VzIG1pZ2h0IGJlCisgKiB1c2VmdWwgZm9yIHNvbWUgdGFncy4gKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgR1R5cGUgdHlwZTsgICAgICAgICAgICAgICAgICAgLyogdHlwZSB0aGUgZGF0YSBpcyBpbiAqLworCisgIGdjaGFyICpuaWNrOyAgICAgICAgICAgICAgICAgIC8qIHRyYW5zbGF0ZWQgbmFtZSAqLworICBnY2hhciAqYmx1cmI7ICAgICAgICAgICAgICAgICAvKiB0cmFuc2xhdGVkIGRlc2NyaXB0aW9uIG9mIHR5cGUgKi8KKworICBHc3RUYWdNZXJnZUZ1bmMgbWVyZ2VfZnVuYzsgICAvKiBmdW5jdGlvbnMgdG8gbWVyZ2UgdGhlIHZhbHVlcyAqLworICBHc3RUYWdGbGFnIGZsYWc7ICAgICAgICAgICAgICAvKiB0eXBlIG9mIHRhZyAqLworfQorR3N0VGFnSW5mbzsKKworc3RhdGljIEdNdXRleCAqX190YWdfbXV0ZXg7CisKK3N0YXRpYyBHSGFzaFRhYmxlICpfX3RhZ3M7CisKKyNkZWZpbmUgVEFHX0xPQ0sgZ19tdXRleF9sb2NrIChfX3RhZ19tdXRleCkKKyNkZWZpbmUgVEFHX1VOTE9DSyBnX211dGV4X3VubG9jayAoX190YWdfbXV0ZXgpCisKK0dUeXBlCitnc3RfdGFnX2xpc3RfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBHVHlwZSBfZ3N0X3RhZ19saXN0X3R5cGUgPSAwOworCisgIGlmIChHX1VOTElLRUxZIChfZ3N0X3RhZ19saXN0X3R5cGUgPT0gMCkpIHsKKyAgICBfZ3N0X3RhZ19saXN0X3R5cGUgPSBnX2JveGVkX3R5cGVfcmVnaXN0ZXJfc3RhdGljICgiR3N0VGFnTGlzdCIsCisgICAgICAgIChHQm94ZWRDb3B5RnVuYykgZ3N0X3RhZ19saXN0X2NvcHksIChHQm94ZWRGcmVlRnVuYykgZ3N0X3RhZ19saXN0X2ZyZWUpOworCisjaWYgMAorICAgIGdfdmFsdWVfcmVnaXN0ZXJfdHJhbnNmb3JtX2Z1bmMgKF9nc3RfdGFnX2xpc3RfdHlwZSwgR19UWVBFX1NUUklORywKKyAgICAgICAgX2dzdF9zdHJ1Y3R1cmVfdHJhbnNmb3JtX3RvX3N0cmluZyk7CisjZW5kaWYKKyAgfQorCisgIHJldHVybiBfZ3N0X3RhZ19saXN0X3R5cGU7Cit9CisKK3ZvaWQKK19wcml2X2dzdF90YWdfaW5pdGlhbGl6ZSAodm9pZCkKK3sKKyAgX190YWdfbXV0ZXggPSBnX211dGV4X25ldyAoKTsKKyAgX190YWdzID0gZ19oYXNoX3RhYmxlX25ldyAoZ19kaXJlY3RfaGFzaCwgZ19kaXJlY3RfZXF1YWwpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX1RJVExFLCBHU1RfVEFHX0ZMQUdfTUVUQSwKKyAgICAgIEdfVFlQRV9TVFJJTkcsCisgICAgICBfKCJ0aXRsZSIpLCBfKCJjb21tb25seSB1c2VkIHRpdGxlIiksIGdzdF90YWdfbWVyZ2Vfc3RyaW5nc193aXRoX2NvbW1hKTsKKyAgZ3N0X3RhZ19yZWdpc3RlciAoR1NUX1RBR19USVRMRV9TT1JUTkFNRSwgR1NUX1RBR19GTEFHX01FVEEsCisgICAgICBHX1RZUEVfU1RSSU5HLAorICAgICAgXygidGl0bGUgc29ydG5hbWUiKSwgXygiY29tbW9ubHkgdXNlZCB0aXRsZSBmb3Igc29ydGluZyBwdXJwb3NlcyIpLCBOVUxMKTsKKyAgZ3N0X3RhZ19yZWdpc3RlciAoR1NUX1RBR19BUlRJU1QsIEdTVF9UQUdfRkxBR19NRVRBLAorICAgICAgR19UWVBFX1NUUklORywKKyAgICAgIF8oImFydGlzdCIpLAorICAgICAgXygicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIiksCisgICAgICBnc3RfdGFnX21lcmdlX3N0cmluZ3Nfd2l0aF9jb21tYSk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfQVJUSVNUX1NPUlROQU1FLCBHU1RfVEFHX0ZMQUdfTUVUQSwKKyAgICAgIEdfVFlQRV9TVFJJTkcsCisgICAgICBfKCJhcnRpc3Qgc29ydG5hbWUiKSwKKyAgICAgIF8oInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIpLCBOVUxMKTsKKyAgZ3N0X3RhZ19yZWdpc3RlciAoR1NUX1RBR19BTEJVTSwgR1NUX1RBR19GTEFHX01FVEEsCisgICAgICBHX1RZUEVfU1RSSU5HLAorICAgICAgXygiYWxidW0iKSwKKyAgICAgIF8oImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIiksIGdzdF90YWdfbWVyZ2Vfc3RyaW5nc193aXRoX2NvbW1hKTsKKyAgZ3N0X3RhZ19yZWdpc3RlciAoR1NUX1RBR19BTEJVTV9TT1JUTkFNRSwgR1NUX1RBR19GTEFHX01FVEEsCisgICAgICBHX1RZUEVfU1RSSU5HLAorICAgICAgXygiYWxidW0gc29ydG5hbWUiKSwKKyAgICAgIF8oImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIGZvciBzb3J0aW5nIHB1cnBvc2VzIiksIE5VTEwpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX0FMQlVNX0FSVElTVCwgR1NUX1RBR19GTEFHX01FVEEsCisgICAgICBHX1RZUEVfU1RSSU5HLAorICAgICAgXygiYWxidW0gYXJ0aXN0IiksCisgICAgICBfKCJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQiKSwKKyAgICAgIGdzdF90YWdfbWVyZ2Vfc3RyaW5nc193aXRoX2NvbW1hKTsKKyAgZ3N0X3RhZ19yZWdpc3RlciAoR1NUX1RBR19BTEJVTV9BUlRJU1RfU09SVE5BTUUsIEdTVF9UQUdfRkxBR19NRVRBLAorICAgICAgR19UWVBFX1NUUklORywKKyAgICAgIF8oImFsYnVtIGFydGlzdCBzb3J0bmFtZSIpLAorICAgICAgXygiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkIiksIE5VTEwpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX0RBVEUsIEdTVF9UQUdfRkxBR19NRVRBLCBHU1RfVFlQRV9EQVRFLAorICAgICAgXygiZGF0ZSIpLCBfKCJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiKSwgTlVMTCk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfREFURV9USU1FLCBHU1RfVEFHX0ZMQUdfTUVUQSwgR1NUX1RZUEVfREFURV9USU1FLAorICAgICAgXygiZGF0ZXRpbWUiKSwKKyAgICAgIF8oImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIpLAorICAgICAgTlVMTCk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfR0VOUkUsIEdTVF9UQUdfRkxBR19NRVRBLAorICAgICAgR19UWVBFX1NUUklORywKKyAgICAgIF8oImdlbnJlIiksCisgICAgICBfKCJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIpLCBnc3RfdGFnX21lcmdlX3N0cmluZ3Nfd2l0aF9jb21tYSk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfQ09NTUVOVCwgR1NUX1RBR19GTEFHX01FVEEsCisgICAgICBHX1RZUEVfU1RSSU5HLAorICAgICAgXygiY29tbWVudCIpLAorICAgICAgXygiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiKSwgZ3N0X3RhZ19tZXJnZV91c2VfZmlyc3QpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX0VYVEVOREVEX0NPTU1FTlQsIEdTVF9UQUdfRkxBR19NRVRBLAorICAgICAgR19UWVBFX1NUUklORywKKyAgICAgIF8oImV4dGVuZGVkIGNvbW1lbnQiKSwKKyAgICAgIF8oImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIGluIGtleT12YWx1ZSBvciBrZXlbZW5dPWNvbW1lbnQgZm9ybSIpLAorICAgICAgZ3N0X3RhZ19tZXJnZV91c2VfZmlyc3QpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX1RSQUNLX05VTUJFUiwgR1NUX1RBR19GTEFHX01FVEEsCisgICAgICBHX1RZUEVfVUlOVCwKKyAgICAgIF8oInRyYWNrIG51bWJlciIpLAorICAgICAgXygidHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iKSwgZ3N0X3RhZ19tZXJnZV91c2VfZmlyc3QpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX1RSQUNLX0NPVU5ULCBHU1RfVEFHX0ZMQUdfTUVUQSwKKyAgICAgIEdfVFlQRV9VSU5ULAorICAgICAgXygidHJhY2sgY291bnQiKSwKKyAgICAgIF8oImNvdW50IG9mIHRyYWNrcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIHRyYWNrIGJlbG9uZ3MgdG8iKSwKKyAgICAgIGdzdF90YWdfbWVyZ2VfdXNlX2ZpcnN0KTsKKyAgZ3N0X3RhZ19yZWdpc3RlciAoR1NUX1RBR19BTEJVTV9WT0xVTUVfTlVNQkVSLCBHU1RfVEFHX0ZMQUdfTUVUQSwKKyAgICAgIEdfVFlQRV9VSU5ULAorICAgICAgXygiZGlzYyBudW1iZXIiKSwKKyAgICAgIF8oImRpc2MgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iKSwgZ3N0X3RhZ19tZXJnZV91c2VfZmlyc3QpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX0FMQlVNX1ZPTFVNRV9DT1VOVCwgR1NUX1RBR19GTEFHX01FVEEsCisgICAgICBHX1RZUEVfVUlOVCwKKyAgICAgIF8oImRpc2MgY291bnQiKSwKKyAgICAgIF8oImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIiksCisgICAgICBnc3RfdGFnX21lcmdlX3VzZV9maXJzdCk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfTE9DQVRJT04sIEdTVF9UQUdfRkxBR19NRVRBLAorICAgICAgR19UWVBFX1NUUklORywKKyAgICAgIF8oImxvY2F0aW9uIiksIF8oIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSAiCisgICAgICAgICAgIm9yaWdpbmFsIG9mIHRoZSBmaWxlIG9yIHN0cmVhbSBpcyBob3N0ZWQpIiksCisgICAgICBnc3RfdGFnX21lcmdlX3N0cmluZ3Nfd2l0aF9jb21tYSk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfSE9NRVBBR0UsIEdTVF9UQUdfRkxBR19NRVRBLAorICAgICAgR19UWVBFX1NUUklORywKKyAgICAgIF8oImhvbWVwYWdlIiksCisgICAgICBfKCJIb21lcGFnZSBmb3IgdGhpcyBtZWRpYSAoaS5lLiBhcnRpc3Qgb3IgbW92aWUgaG9tZXBhZ2UpIiksCisgICAgICBnc3RfdGFnX21lcmdlX3N0cmluZ3Nfd2l0aF9jb21tYSk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfREVTQ1JJUFRJT04sIEdTVF9UQUdfRkxBR19NRVRBLCBHX1RZUEVfU1RSSU5HLAorICAgICAgXygiZGVzY3JpcHRpb24iKSwgXygic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIiksCisgICAgICBnc3RfdGFnX21lcmdlX3N0cmluZ3Nfd2l0aF9jb21tYSk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfVkVSU0lPTiwgR1NUX1RBR19GTEFHX01FVEEsIEdfVFlQRV9TVFJJTkcsCisgICAgICBfKCJ2ZXJzaW9uIiksIF8oInZlcnNpb24gb2YgdGhpcyBkYXRhIiksIE5VTEwpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX0lTUkMsIEdTVF9UQUdfRkxBR19NRVRBLCBHX1RZUEVfU1RSSU5HLCBfKCJJU1JDIiksCisgICAgICBfCisgICAgICAoIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIpLAorICAgICAgTlVMTCk7CisgIC8qIEZJWE1FOiBvcmdhbml6YXRpb24gKGZpeCB3aGF0PyB0cG0pICovCisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfT1JHQU5JWkFUSU9OLCBHU1RfVEFHX0ZMQUdfTUVUQSwgR19UWVBFX1NUUklORywKKyAgICAgIF8oIm9yZ2FuaXphdGlvbiIpLCBfKCJvcmdhbml6YXRpb24iKSwgZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX0NPUFlSSUdIVCwgR1NUX1RBR19GTEFHX01FVEEsCisgICAgICBHX1RZUEVfU1RSSU5HLCBfKCJjb3B5cmlnaHQiKSwgXygiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIpLCBOVUxMKTsKKyAgZ3N0X3RhZ19yZWdpc3RlciAoR1NUX1RBR19DT1BZUklHSFRfVVJJLCBHU1RfVEFHX0ZMQUdfTUVUQSwKKyAgICAgIEdfVFlQRV9TVFJJTkcsIF8oImNvcHlyaWdodCB1cmkiKSwKKyAgICAgIF8oIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIpLCBOVUxMKTsKKyAgZ3N0X3RhZ19yZWdpc3RlciAoR1NUX1RBR19FTkNPREVEX0JZLCBHU1RfVEFHX0ZMQUdfTUVUQSwgR19UWVBFX1NUUklORywKKyAgICAgIF8oImVuY29kZWQgYnkiKSwgXygibmFtZSBvZiB0aGUgZW5jb2RpbmcgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiIpLAorICAgICAgZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX0NPTlRBQ1QsIEdTVF9UQUdfRkxBR19NRVRBLAorICAgICAgR19UWVBFX1NUUklORywKKyAgICAgIF8oImNvbnRhY3QiKSwgXygiY29udGFjdCBpbmZvcm1hdGlvbiIpLCBnc3RfdGFnX21lcmdlX3N0cmluZ3Nfd2l0aF9jb21tYSk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfTElDRU5TRSwgR1NUX1RBR19GTEFHX01FVEEsCisgICAgICBHX1RZUEVfU1RSSU5HLCBfKCJsaWNlbnNlIiksIF8oImxpY2Vuc2Ugb2YgZGF0YSIpLCBOVUxMKTsKKyAgZ3N0X3RhZ19yZWdpc3RlciAoR1NUX1RBR19MSUNFTlNFX1VSSSwgR1NUX1RBR19GTEFHX01FVEEsCisgICAgICBHX1RZUEVfU1RSSU5HLCBfKCJsaWNlbnNlIHVyaSIpLAorICAgICAgXygiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIiksIE5VTEwpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX1BFUkZPUk1FUiwgR1NUX1RBR19GTEFHX01FVEEsCisgICAgICBHX1RZUEVfU1RSSU5HLAorICAgICAgXygicGVyZm9ybWVyIiksCisgICAgICBfKCJwZXJzb24ocykgcGVyZm9ybWluZyIpLCBnc3RfdGFnX21lcmdlX3N0cmluZ3Nfd2l0aF9jb21tYSk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfQ09NUE9TRVIsIEdTVF9UQUdfRkxBR19NRVRBLAorICAgICAgR19UWVBFX1NUUklORywKKyAgICAgIF8oImNvbXBvc2VyIiksCisgICAgICBfKCJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciKSwKKyAgICAgIGdzdF90YWdfbWVyZ2Vfc3RyaW5nc193aXRoX2NvbW1hKTsKKyAgZ3N0X3RhZ19yZWdpc3RlciAoR1NUX1RBR19EVVJBVElPTiwgR1NUX1RBR19GTEFHX0RFQ09ERUQsCisgICAgICBHX1RZUEVfVUlOVDY0LAorICAgICAgXygiZHVyYXRpb24iKSwgXygibGVuZ3RoIGluIEdTdHJlYW1lciB0aW1lIHVuaXRzIChuYW5vc2Vjb25kcykiKSwgTlVMTCk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfQ09ERUMsIEdTVF9UQUdfRkxBR19FTkNPREVELAorICAgICAgR19UWVBFX1NUUklORywKKyAgICAgIF8oImNvZGVjIiksCisgICAgICBfKCJjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iKSwgZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX1ZJREVPX0NPREVDLCBHU1RfVEFHX0ZMQUdfRU5DT0RFRCwKKyAgICAgIEdfVFlQRV9TVFJJTkcsCisgICAgICBfKCJ2aWRlbyBjb2RlYyIpLCBfKCJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iKSwgTlVMTCk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfQVVESU9fQ09ERUMsIEdTVF9UQUdfRkxBR19FTkNPREVELAorICAgICAgR19UWVBFX1NUUklORywKKyAgICAgIF8oImF1ZGlvIGNvZGVjIiksIF8oImNvZGVjIHRoZSBhdWRpbyBkYXRhIGlzIHN0b3JlZCBpbiIpLCBOVUxMKTsKKyAgZ3N0X3RhZ19yZWdpc3RlciAoR1NUX1RBR19TVUJUSVRMRV9DT0RFQywgR1NUX1RBR19GTEFHX0VOQ09ERUQsCisgICAgICBHX1RZUEVfU1RSSU5HLAorICAgICAgXygic3VidGl0bGUgY29kZWMiKSwgXygiY29kZWMgdGhlIHN1YnRpdGxlIGRhdGEgaXMgc3RvcmVkIGluIiksIE5VTEwpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX0NPTlRBSU5FUl9GT1JNQVQsIEdTVF9UQUdfRkxBR19FTkNPREVELAorICAgICAgR19UWVBFX1NUUklORywgXygiY29udGFpbmVyIGZvcm1hdCIpLAorICAgICAgXygiY29udGFpbmVyIGZvcm1hdCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iKSwgTlVMTCk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfQklUUkFURSwgR1NUX1RBR19GTEFHX0VOQ09ERUQsCisgICAgICBHX1RZUEVfVUlOVCwgXygiYml0cmF0ZSIpLCBfKCJleGFjdCBvciBhdmVyYWdlIGJpdHJhdGUgaW4gYml0cy9zIiksIE5VTEwpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX05PTUlOQUxfQklUUkFURSwgR1NUX1RBR19GTEFHX0VOQ09ERUQsCisgICAgICBHX1RZUEVfVUlOVCwgXygibm9taW5hbCBiaXRyYXRlIiksIF8oIm5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MiKSwgTlVMTCk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfTUlOSU1VTV9CSVRSQVRFLCBHU1RfVEFHX0ZMQUdfRU5DT0RFRCwKKyAgICAgIEdfVFlQRV9VSU5ULCBfKCJtaW5pbXVtIGJpdHJhdGUiKSwgXygibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIpLCBOVUxMKTsKKyAgZ3N0X3RhZ19yZWdpc3RlciAoR1NUX1RBR19NQVhJTVVNX0JJVFJBVEUsIEdTVF9UQUdfRkxBR19FTkNPREVELAorICAgICAgR19UWVBFX1VJTlQsIF8oIm1heGltdW0gYml0cmF0ZSIpLCBfKCJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIiksIE5VTEwpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX0VOQ09ERVIsIEdTVF9UQUdfRkxBR19FTkNPREVELAorICAgICAgR19UWVBFX1NUUklORywKKyAgICAgIF8oImVuY29kZXIiKSwgXygiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIpLCBOVUxMKTsKKyAgZ3N0X3RhZ19yZWdpc3RlciAoR1NUX1RBR19FTkNPREVSX1ZFUlNJT04sIEdTVF9UQUdfRkxBR19FTkNPREVELAorICAgICAgR19UWVBFX1VJTlQsCisgICAgICBfKCJlbmNvZGVyIHZlcnNpb24iKSwKKyAgICAgIF8oInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iKSwgTlVMTCk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfU0VSSUFMLCBHU1RfVEFHX0ZMQUdfRU5DT0RFRCwKKyAgICAgIEdfVFlQRV9VSU5ULCBfKCJzZXJpYWwiKSwgXygic2VyaWFsIG51bWJlciBvZiB0cmFjayIpLCBOVUxMKTsKKyAgZ3N0X3RhZ19yZWdpc3RlciAoR1NUX1RBR19UUkFDS19HQUlOLCBHU1RfVEFHX0ZMQUdfTUVUQSwKKyAgICAgIEdfVFlQRV9ET1VCTEUsIF8oInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIpLCBfKCJ0cmFjayBnYWluIGluIGRiIiksIE5VTEwpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX1RSQUNLX1BFQUssIEdTVF9UQUdfRkxBR19NRVRBLAorICAgICAgR19UWVBFX0RPVUJMRSwgXygicmVwbGF5Z2FpbiB0cmFjayBwZWFrIiksIF8oInBlYWsgb2YgdGhlIHRyYWNrIiksIE5VTEwpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX0FMQlVNX0dBSU4sIEdTVF9UQUdfRkxBR19NRVRBLAorICAgICAgR19UWVBFX0RPVUJMRSwgXygicmVwbGF5Z2FpbiBhbGJ1bSBnYWluIiksIF8oImFsYnVtIGdhaW4gaW4gZGIiKSwgTlVMTCk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfQUxCVU1fUEVBSywgR1NUX1RBR19GTEFHX01FVEEsCisgICAgICBHX1RZUEVfRE9VQkxFLCBfKCJyZXBsYXlnYWluIGFsYnVtIHBlYWsiKSwgXygicGVhayBvZiB0aGUgYWxidW0iKSwgTlVMTCk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfUkVGRVJFTkNFX0xFVkVMLCBHU1RfVEFHX0ZMQUdfTUVUQSwKKyAgICAgIEdfVFlQRV9ET1VCTEUsIF8oInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIiksCisgICAgICBfKCJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIiksIE5VTEwpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX0xBTkdVQUdFX0NPREUsIEdTVF9UQUdfRkxBR19NRVRBLCBHX1RZUEVfU1RSSU5HLAorICAgICAgXygibGFuZ3VhZ2UgY29kZSIpLAorICAgICAgXygibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIiksIE5VTEwpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX0lNQUdFLCBHU1RfVEFHX0ZMQUdfTUVUQSwgR1NUX1RZUEVfQlVGRkVSLAorICAgICAgXygiaW1hZ2UiKSwgXygiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIpLCBnc3RfdGFnX21lcmdlX3VzZV9maXJzdCk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfUFJFVklFV19JTUFHRSwgR1NUX1RBR19GTEFHX01FVEEsIEdTVF9UWVBFX0JVRkZFUiwKKyAgICAgIC8qIFRSQU5TTEFUT1JTOiAncHJldmlldyBpbWFnZScgPSBpbWFnZSB0aGF0IHNob3dzIGEgcHJldmlldyBvZiB0aGUgZnVsbCBpbWFnZSAqLworICAgICAgXygicHJldmlldyBpbWFnZSIpLCBfKCJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iKSwgTlVMTCk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfQVRUQUNITUVOVCwgR1NUX1RBR19GTEFHX01FVEEsIEdTVF9UWVBFX0JVRkZFUiwKKyAgICAgIF8oImF0dGFjaG1lbnQiKSwgXygiZmlsZSBhdHRhY2hlZCB0byB0aGlzIHN0cmVhbSIpLAorICAgICAgZ3N0X3RhZ19tZXJnZV91c2VfZmlyc3QpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX0JFQVRTX1BFUl9NSU5VVEUsIEdTVF9UQUdfRkxBR19NRVRBLCBHX1RZUEVfRE9VQkxFLAorICAgICAgXygiYmVhdHMgcGVyIG1pbnV0ZSIpLCBfKCJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIpLCBOVUxMKTsKKyAgZ3N0X3RhZ19yZWdpc3RlciAoR1NUX1RBR19LRVlXT1JEUywgR1NUX1RBR19GTEFHX01FVEEsIEdfVFlQRV9TVFJJTkcsCisgICAgICBfKCJrZXl3b3JkcyIpLCBfKCJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIpLAorICAgICAgZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX0dFT19MT0NBVElPTl9OQU1FLCBHU1RfVEFHX0ZMQUdfTUVUQSwgR19UWVBFX1NUUklORywKKyAgICAgIF8oImdlbyBsb2NhdGlvbiBuYW1lIiksIF8oImh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aXZlIGxvY2F0aW9uIG9mIHdoZXJlICIKKyAgICAgICAgICAidGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIiksIE5VTEwpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX0dFT19MT0NBVElPTl9MQVRJVFVERSwgR1NUX1RBR19GTEFHX01FVEEsCisgICAgICBHX1RZUEVfRE9VQkxFLCBfKCJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiKSwKKyAgICAgIF8oImdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgorICAgICAgICAgICJwcm9kdWNlZCBpbiBkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgIgorICAgICAgICAgICJuZWdhdGl2ZSB2YWx1ZXMgZm9yIHNvdXRoZXJuIGxhdGl0dWRlcykiKSwgTlVMTCk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfR0VPX0xPQ0FUSU9OX0xPTkdJVFVERSwgR1NUX1RBR19GTEFHX01FVEEsCisgICAgICBHX1RZUEVfRE9VQkxFLCBfKCJnZW8gbG9jYXRpb24gbG9uZ2l0dWRlIiksCisgICAgICBfKCJnZW8gbG9uZ2l0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciAiCisgICAgICAgICAgInByb2R1Y2VkIGluIGRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiAiCisgICAgICAgICAgImluIEdyZWVud2ljaC9VSywgIG5lZ2F0aXZlIHZhbHVlcyBmb3Igd2VzdGVybiBsb25naXR1ZGVzKSIpLCBOVUxMKTsKKyAgZ3N0X3RhZ19yZWdpc3RlciAoR1NUX1RBR19HRU9fTE9DQVRJT05fRUxFVkFUSU9OLCBHU1RfVEFHX0ZMQUdfTUVUQSwKKyAgICAgIEdfVFlQRV9ET1VCTEUsIF8oImdlbyBsb2NhdGlvbiBlbGV2YXRpb24iKSwKKyAgICAgIF8oImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyAgICAgICAgICAibWV0ZXJzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBpcyBhdmVyYWdlIHNlYSBsZXZlbCkiKSwgTlVMTCk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfR0VPX0xPQ0FUSU9OX0NPVU5UUlksIEdTVF9UQUdfRkxBR19NRVRBLAorICAgICAgR19UWVBFX1NUUklORywgXygiZ2VvIGxvY2F0aW9uIGNvdW50cnkiKSwKKyAgICAgIF8oImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkICIKKyAgICAgICAgICAib3IgcHJvZHVjZWQiKSwgTlVMTCk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfR0VPX0xPQ0FUSU9OX0NJVFksIEdTVF9UQUdfRkxBR19NRVRBLAorICAgICAgR19UWVBFX1NUUklORywgXygiZ2VvIGxvY2F0aW9uIGNpdHkiKSwKKyAgICAgIF8oImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkICIKKyAgICAgICAgICAib3IgcHJvZHVjZWQiKSwgTlVMTCk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfR0VPX0xPQ0FUSU9OX1NVQkxPQ0FUSU9OLCBHU1RfVEFHX0ZMQUdfTUVUQSwKKyAgICAgIEdfVFlQRV9TVFJJTkcsIF8oImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIpLAorICAgICAgXygiYSBsb2NhdGlvbiB3aGl0aGluIGEgY2l0eSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgIgorICAgICAgICAgICJvciBjcmVhdGVkIChlLmcuIHRoZSBuZWlnaGJvcmhvb2QpIiksIE5VTEwpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX0dFT19MT0NBVElPTl9IT1JJWk9OVEFMX0VSUk9SLCBHU1RfVEFHX0ZMQUdfTUVUQSwKKyAgICAgIEdfVFlQRV9ET1VCTEUsIF8oImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIiksCisgICAgICBfKCJleHBlY3RlZCBlcnJvciBvZiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbmluZyBtZWFzdXJlcyAoaW4gbWV0ZXJzKSIpLAorICAgICAgTlVMTCk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfR0VPX0xPQ0FUSU9OX01PVkVNRU5UX1NQRUVELCBHU1RfVEFHX0ZMQUdfTUVUQSwKKyAgICAgIEdfVFlQRV9ET1VCTEUsIF8oImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIpLAorICAgICAgXygibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSAiCisgICAgICAgICAgImluIG0vcyIpLCBOVUxMKTsKKyAgZ3N0X3RhZ19yZWdpc3RlciAoR1NUX1RBR19HRU9fTE9DQVRJT05fTU9WRU1FTlRfRElSRUNUSU9OLCBHU1RfVEFHX0ZMQUdfTUVUQSwKKyAgICAgIEdfVFlQRV9ET1VCTEUsIF8oImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBkaXJlY3Rpb24iKSwKKyAgICAgIF8oImluZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSIKKyAgICAgICAgICAiIG9mIGEgbWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIgorICAgICAgICAgICJyZXByZXNlbnRhdGlvbiwgMCBtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyAiCisgICAgICAgICAgImNsb2Nrd2lzZSIpLCBOVUxMKTsKKyAgZ3N0X3RhZ19yZWdpc3RlciAoR1NUX1RBR19HRU9fTE9DQVRJT05fQ0FQVFVSRV9ESVJFQ1RJT04sIEdTVF9UQUdfRkxBR19NRVRBLAorICAgICAgR19UWVBFX0RPVUJMRSwgXygiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIiksCisgICAgICBfKCJpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nICIKKyAgICAgICAgICAiIGEgbWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIgorICAgICAgICAgICIgcmVwcmVzZW50YXRpb24sIDAgbWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgIgorICAgICAgICAgICJjbG9ja3dpc2UiKSwgTlVMTCk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfU0hPV19OQU1FLCBHU1RfVEFHX0ZMQUdfTUVUQSwgR19UWVBFX1NUUklORywKKyAgICAgIC8qIFRSQU5TTEFUT1JTOiAnc2hvdyBuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZScgaGVyZSAqLworICAgICAgXygic2hvdyBuYW1lIiksCisgICAgICBfKCJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIiksCisgICAgICBnc3RfdGFnX21lcmdlX3N0cmluZ3Nfd2l0aF9jb21tYSk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfU0hPV19TT1JUTkFNRSwgR1NUX1RBR19GTEFHX01FVEEsIEdfVFlQRV9TVFJJTkcsCisgICAgICAvKiBUUkFOU0xBVE9SUzogJ3Nob3cgc29ydG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lIGFzIHVzZWQgZm9yIHNvcnRpbmcgcHVycG9zZXMnIGhlcmUgKi8KKyAgICAgIF8oInNob3cgc29ydG5hbWUiKSwKKyAgICAgIF8oIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20sIGZvciBzb3J0aW5nICIKKyAgICAgICAgICAicHVycG9zZXMiKSwgTlVMTCk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfU0hPV19FUElTT0RFX05VTUJFUiwgR1NUX1RBR19GTEFHX01FVEEsIEdfVFlQRV9VSU5ULAorICAgICAgXygiZXBpc29kZSBudW1iZXIiKSwKKyAgICAgIF8oIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIiksCisgICAgICBnc3RfdGFnX21lcmdlX3VzZV9maXJzdCk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfU0hPV19TRUFTT05fTlVNQkVSLCBHU1RfVEFHX0ZMQUdfTUVUQSwgR19UWVBFX1VJTlQsCisgICAgICBfKCJzZWFzb24gbnVtYmVyIiksCisgICAgICBfKCJUaGUgc2Vhc29uIG51bWJlciBvZiB0aGUgc2hvdyB0aGUgbWVkaWEgaXMgcGFydCBvZiIpLAorICAgICAgZ3N0X3RhZ19tZXJnZV91c2VfZmlyc3QpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX0xZUklDUywgR1NUX1RBR19GTEFHX01FVEEsIEdfVFlQRV9TVFJJTkcsCisgICAgICBfKCJseXJpY3MiKSwgXygiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIiksCisgICAgICBnc3RfdGFnX21lcmdlX3N0cmluZ3Nfd2l0aF9jb21tYSk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfQ09NUE9TRVJfU09SVE5BTUUsIEdTVF9UQUdfRkxBR19NRVRBLCBHX1RZUEVfU1RSSU5HLAorICAgICAgXygiY29tcG9zZXIgc29ydG5hbWUiKSwKKyAgICAgIF8oInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZywgZm9yIHNvcnRpbmcgcHVycG9zZXMiKSwgTlVMTCk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfR1JPVVBJTkcsIEdTVF9UQUdfRkxBR19NRVRBLCBHX1RZUEVfU1RSSU5HLAorICAgICAgXygiZ3JvdXBpbmciKSwKKyAgICAgIF8oIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgIgorICAgICAgICAgICJwaWVjZXMgb2YgYSBjb25jZXJ0by4gSXQgaXMgYSBoaWdoZXIgbGV2ZWwgdGhhbiBhIHRyYWNrLCAiCisgICAgICAgICAgImJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIiksIE5VTEwpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX1VTRVJfUkFUSU5HLCBHU1RfVEFHX0ZMQUdfTUVUQSwgR19UWVBFX1VJTlQsCisgICAgICBfKCJ1c2VyIHJhdGluZyIpLAorICAgICAgXygiUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCAiCisgICAgICAgICAgInRoZSBtb3JlIHRoZSB1c2VyIGxpa2VzIHRoaXMgbWVkaWEiKSwgTlVMTCk7CisgIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfREVWSUNFX01BTlVGQUNUVVJFUiwgR1NUX1RBR19GTEFHX01FVEEsCisgICAgICBHX1RZUEVfU1RSSU5HLCBfKCJkZXZpY2UgbWFudWZhY3R1cmVyIiksCisgICAgICBfKCJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIiksIE5VTEwpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX0RFVklDRV9NT0RFTCwgR1NUX1RBR19GTEFHX01FVEEsIEdfVFlQRV9TVFJJTkcsCisgICAgICBfKCJkZXZpY2UgbW9kZWwiKSwKKyAgICAgIF8oIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIpLCBOVUxMKTsKKyAgZ3N0X3RhZ19yZWdpc3RlciAoR1NUX1RBR19BUFBMSUNBVElPTl9OQU1FLCBHU1RfVEFHX0ZMQUdfTUVUQSwgR19UWVBFX1NUUklORywKKyAgICAgIF8oImFwcGxpY2F0aW9uIG5hbWUiKSwgXygiQXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIiksIE5VTEwpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX0FQUExJQ0FUSU9OX0RBVEEsIEdTVF9UQUdfRkxBR19NRVRBLAorICAgICAgR1NUX1RZUEVfQlVGRkVSLCBfKCJhcHBsaWNhdGlvbiBkYXRhIiksCisgICAgICBfKCJBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIG1lZGlhIiksIE5VTEwpOworICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX0lNQUdFX09SSUVOVEFUSU9OLCBHU1RfVEFHX0ZMQUdfTUVUQSwgR19UWVBFX1NUUklORywKKyAgICAgIF8oImltYWdlIG9yaWVudGF0aW9uIiksCisgICAgICBfKCJIb3cgdGhlIGltYWdlIHNob3VsZCBiZSByb3RhdGVkIG9yIGZsaXBwZWQgYmVmb3JlIGRpc3BsYXkiKSwgTlVMTCk7Cit9CisKKy8qKgorICogZ3N0X3RhZ19tZXJnZV91c2VfZmlyc3Q6CisgKiBAZGVzdDogKG91dCBjYWxsZXItYWxsb2NhdGVzKTogdW5pbml0aWFsaXplZCBHVmFsdWUgdG8gc3RvcmUgcmVzdWx0IGluCisgKiBAc3JjOiBHVmFsdWUgdG8gY29weSBmcm9tCisgKgorICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciB0aGUgZnVuYyBhcmd1bWVudCBvZiBnc3RfdGFnX3JlZ2lzdGVyKCkuCisgKiBJdCBjcmVhdGVzIGEgY29weSBvZiB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgbGlzdC4KKyAqLwordm9pZAorZ3N0X3RhZ19tZXJnZV91c2VfZmlyc3QgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IEdWYWx1ZSAqIHNyYykKK3sKKyAgY29uc3QgR1ZhbHVlICpyZXQgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKHNyYywgMCk7CisKKyAgZ192YWx1ZV9pbml0IChkZXN0LCBHX1ZBTFVFX1RZUEUgKHJldCkpOworICBnX3ZhbHVlX2NvcHkgKHJldCwgZGVzdCk7Cit9CisKKy8qKgorICogZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWE6CisgKiBAZGVzdDogKG91dCBjYWxsZXItYWxsb2NhdGVzKTogdW5pbml0aWFsaXplZCBHVmFsdWUgdG8gc3RvcmUgcmVzdWx0IGluCisgKiBAc3JjOiBHVmFsdWUgdG8gY29weSBmcm9tCisgKgorICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciB0aGUgZnVuYyBhcmd1bWVudCBvZiBnc3RfdGFnX3JlZ2lzdGVyKCkuCisgKiBJdCBjb25jYXRlbmF0ZXMgYWxsIGdpdmVuIHN0cmluZ3MgdXNpbmcgYSBjb21tYS4gVGhlIHRhZyBtdXN0IGJlIHJlZ2lzdGVyZWQKKyAqIGFzIGEgR19UWVBFX1NUUklORyBvciB0aGlzIGZ1bmN0aW9uIHdpbGwgZmFpbC4KKyAqLwordm9pZAorZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IEdWYWx1ZSAqIHNyYykKK3sKKyAgR1N0cmluZyAqc3RyOworICBnaW50IGksIGNvdW50OworCisgIGNvdW50ID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUgKHNyYyk7CisgIHN0ciA9IGdfc3RyaW5nX25ldyAoZ192YWx1ZV9nZXRfc3RyaW5nIChnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKHNyYywgMCkpKTsKKyAgZm9yIChpID0gMTsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAvKiBzZXBhcmF0b3IgYmV0d2VlbiB0d28gc3RyaW5ncyAqLworICAgIGdfc3RyaW5nX2FwcGVuZCAoc3RyLCBfKCIsICIpKTsKKyAgICBnX3N0cmluZ19hcHBlbmQgKHN0ciwKKyAgICAgICAgZ192YWx1ZV9nZXRfc3RyaW5nIChnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKHNyYywgaSkpKTsKKyAgfQorCisgIGdfdmFsdWVfaW5pdCAoZGVzdCwgR19UWVBFX1NUUklORyk7CisgIGdfdmFsdWVfdGFrZV9zdHJpbmcgKGRlc3QsIHN0ci0+c3RyKTsKKyAgZ19zdHJpbmdfZnJlZSAoc3RyLCBGQUxTRSk7Cit9CisKK3N0YXRpYyBHc3RUYWdJbmZvICoKK2dzdF90YWdfbG9va3VwIChHUXVhcmsgZW50cnkpCit7CisgIEdzdFRhZ0luZm8gKnJldDsKKworICBUQUdfTE9DSzsKKyAgcmV0ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoX190YWdzLCBHVUlOVF9UT19QT0lOVEVSIChlbnRyeSkpOworICBUQUdfVU5MT0NLOworCisgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICogZ3N0X3RhZ19yZWdpc3RlcjoKKyAqIEBuYW1lOiB0aGUgbmFtZSBvciBpZGVudGlmaWVyIHN0cmluZworICogQGZsYWc6IGEgZmxhZyBkZXNjcmliaW5nIHRoZSB0eXBlIG9mIHRhZyBpbmZvCisgKiBAdHlwZTogdGhlIHR5cGUgdGhpcyBkYXRhIGlzIGluCisgKiBAbmljazogaHVtYW4tcmVhZGFibGUgbmFtZQorICogQGJsdXJiOiBhIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIGFib3V0IHRoaXMgdGFnCisgKiBAZnVuYzogZnVuY3Rpb24gZm9yIG1lcmdpbmcgbXVsdGlwbGUgdmFsdWVzIG9mIHRoaXMgdGFnLCBvciBOVUxMCisgKgorICogUmVnaXN0ZXJzIGEgbmV3IHRhZyB0eXBlIGZvciB0aGUgdXNlIHdpdGggR1N0cmVhbWVyJ3MgdHlwZSBzeXN0ZW0uIElmIGEgdHlwZQorICogd2l0aCB0aGF0IG5hbWUgaXMgYWxyZWFkeSByZWdpc3RlcmVkLCB0aGF0IG9uZSBpcyB1c2VkLgorICogVGhlIG9sZCByZWdpc3RyYXRpb24gbWF5IGhhdmUgdXNlZCBhIGRpZmZlcmVudCB0eXBlIGhvd2V2ZXIuIFNvIGRvbid0IHJlbHkKKyAqIG9uIHlvdXIgc3VwcGxpZWQgdmFsdWVzLgorICoKKyAqIEltcG9ydGFudDogaWYgeW91IGRvIG5vdCBzdXBwbHkgYSBtZXJnZSBmdW5jdGlvbiB0aGUgaW1wbGljYXRpb24gd2lsbCBiZQorICogdGhhdCB0aGVyZSBjYW4gb25seSBiZSBvbmUgc2luZ2xlIHZhbHVlIGZvciB0aGlzIHRhZyBpbiBhIHRhZyBsaXN0IGFuZAorICogYW55IGFkZGl0aW9uYWwgdmFsdWVzIHdpbGwgc2lsZW50eSBiZSBkaXNjYXJkZWQgd2hlbiBiZWluZyBhZGRlZCAodW5sZXNzCisgKiAjR1NUX1RBR19NRVJHRV9SRVBMQUNFLCAjR1NUX1RBR19NRVJHRV9SRVBMQUNFX0FMTCwgb3IKKyAqICNHU1RfVEFHX01FUkdFX1BSRVBFTkQgaXMgdXNlZCBhcyBtZXJnZSBtb2RlLCBpbiB3aGljaCBjYXNlIHRoZSBuZXcKKyAqIHZhbHVlIHdpbGwgcmVwbGFjZSB0aGUgb2xkIG9uZSBpbiB0aGUgbGlzdCkuCisgKgorICogVGhlIG1lcmdlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGZyb20gZ3N0X3RhZ19saXN0X2NvcHlfdmFsdWUoKSB3aGVuCisgKiBpdCBpcyByZXF1aXJlZCB0aGF0IG9uZSBvciBtb3JlIHZhbHVlcyBmb3IgYSB0YWcgYmUgY29uZGVuc2VkIGludG8KKyAqIG9uZSBzaW5nbGUgdmFsdWUuIFRoaXMgbWF5IGhhcHBlbiBmcm9tIGdzdF90YWdfbGlzdF9nZXRfc3RyaW5nKCksCisgKiBnc3RfdGFnX2xpc3RfZ2V0X2ludCgpLCBnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZSgpIGV0Yy4gV2hhdCB3aWxsIGhhcHBlbgorICogZXhhY3RseSBpbiB0aGF0IGNhc2UgZGVwZW5kcyBvbiBob3cgdGhlIHRhZyB3YXMgcmVnaXN0ZXJlZCBhbmQgaWYgYQorICogbWVyZ2UgZnVuY3Rpb24gd2FzIHN1cHBsaWVkIGFuZCBpZiBzbyB3aGljaCBvbmUuCisgKgorICogVHdvIGRlZmF1bHQgbWVyZ2UgZnVuY3Rpb25zIGFyZSBwcm92aWRlZDogZ3N0X3RhZ19tZXJnZV91c2VfZmlyc3QoKSBhbmQKKyAqIGdzdF90YWdfbWVyZ2Vfc3RyaW5nc193aXRoX2NvbW1hKCkuCisgKi8KK3ZvaWQKK2dzdF90YWdfcmVnaXN0ZXIgKGNvbnN0IGdjaGFyICogbmFtZSwgR3N0VGFnRmxhZyBmbGFnLCBHVHlwZSB0eXBlLAorICAgIGNvbnN0IGdjaGFyICogbmljaywgY29uc3QgZ2NoYXIgKiBibHVyYiwgR3N0VGFnTWVyZ2VGdW5jIGZ1bmMpCit7CisgIEdRdWFyayBrZXk7CisgIEdzdFRhZ0luZm8gKmluZm87CisKKyAgZ19yZXR1cm5faWZfZmFpbCAobmFtZSAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAobmljayAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoYmx1cmIgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKHR5cGUgIT0gMCAmJiB0eXBlICE9IEdTVF9UWVBFX0xJU1QpOworCisgIGtleSA9IGdfcXVhcmtfZnJvbV9zdHJpbmcgKG5hbWUpOworICBpbmZvID0gZ3N0X3RhZ19sb29rdXAgKGtleSk7CisKKyAgaWYgKGluZm8pIHsKKyAgICBnX3JldHVybl9pZl9mYWlsIChpbmZvLT50eXBlID09IHR5cGUpOworICAgIHJldHVybjsKKyAgfQorCisgIGluZm8gPSBnX3NsaWNlX25ldyAoR3N0VGFnSW5mbyk7CisgIGluZm8tPmZsYWcgPSBmbGFnOworICBpbmZvLT50eXBlID0gdHlwZTsKKyAgaW5mby0+bmljayA9IGdfc3RyZHVwIChuaWNrKTsKKyAgaW5mby0+Ymx1cmIgPSBnX3N0cmR1cCAoYmx1cmIpOworICBpbmZvLT5tZXJnZV9mdW5jID0gZnVuYzsKKworICBUQUdfTE9DSzsKKyAgZ19oYXNoX3RhYmxlX2luc2VydCAoX190YWdzLCBHVUlOVF9UT19QT0lOVEVSIChrZXkpLCBpbmZvKTsKKyAgVEFHX1VOTE9DSzsKK30KKworLyoqCisgKiBnc3RfdGFnX2V4aXN0czoKKyAqIEB0YWc6IG5hbWUgb2YgdGhlIHRhZworICoKKyAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gdHlwZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgdHlwZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQKKyAqLworZ2Jvb2xlYW4KK2dzdF90YWdfZXhpc3RzIChjb25zdCBnY2hhciAqIHRhZykKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRhZyAhPSBOVUxMLCBGQUxTRSk7CisKKyAgcmV0dXJuIGdzdF90YWdfbG9va3VwIChnX3F1YXJrX2Zyb21fc3RyaW5nICh0YWcpKSAhPSBOVUxMOworfQorCisvKioKKyAqIGdzdF90YWdfZ2V0X3R5cGU6CisgKiBAdGFnOiB0aGUgdGFnCisgKgorICogR2V0cyB0aGUgI0dUeXBlIHVzZWQgZm9yIHRoaXMgdGFnLgorICoKKyAqIFJldHVybnM6IHRoZSAjR1R5cGUgb2YgdGhpcyB0YWcKKyAqLworR1R5cGUKK2dzdF90YWdfZ2V0X3R5cGUgKGNvbnN0IGdjaGFyICogdGFnKQoreworICBHc3RUYWdJbmZvICppbmZvOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0YWcgIT0gTlVMTCwgMCk7CisgIGluZm8gPSBnc3RfdGFnX2xvb2t1cCAoZ19xdWFya19mcm9tX3N0cmluZyAodGFnKSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpbmZvICE9IE5VTEwsIDApOworCisgIHJldHVybiBpbmZvLT50eXBlOworfQorCisvKioKKyAqIGdzdF90YWdfZ2V0X25pY2sKKyAqIEB0YWc6IHRoZSB0YWcKKyAqCisgKiBSZXR1cm5zIHRoZSBodW1hbi1yZWFkYWJsZSBuYW1lIG9mIHRoaXMgdGFnLCBZb3UgbXVzdCBub3QgY2hhbmdlIG9yIGZyZWUKKyAqIHRoaXMgc3RyaW5nLgorICoKKyAqIFJldHVybnM6IHRoZSBodW1hbi1yZWFkYWJsZSBuYW1lIG9mIHRoaXMgdGFnCisgKi8KK2NvbnN0IGdjaGFyICoKK2dzdF90YWdfZ2V0X25pY2sgKGNvbnN0IGdjaGFyICogdGFnKQoreworICBHc3RUYWdJbmZvICppbmZvOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0YWcgIT0gTlVMTCwgTlVMTCk7CisgIGluZm8gPSBnc3RfdGFnX2xvb2t1cCAoZ19xdWFya19mcm9tX3N0cmluZyAodGFnKSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpbmZvICE9IE5VTEwsIE5VTEwpOworCisgIHJldHVybiBpbmZvLT5uaWNrOworfQorCisvKioKKyAqIGdzdF90YWdfZ2V0X2Rlc2NyaXB0aW9uOgorICogQHRhZzogdGhlIHRhZworICoKKyAqIFJldHVybnMgdGhlIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoaXMgdGFnLCBZb3UgbXVzdCBub3QgY2hhbmdlIG9yCisgKiBmcmVlIHRoaXMgc3RyaW5nLgorICoKKyAqIFJldHVybnM6IHRoZSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGlzIHRhZworICovCitjb25zdCBnY2hhciAqCitnc3RfdGFnX2dldF9kZXNjcmlwdGlvbiAoY29uc3QgZ2NoYXIgKiB0YWcpCit7CisgIEdzdFRhZ0luZm8gKmluZm87CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRhZyAhPSBOVUxMLCBOVUxMKTsKKyAgaW5mbyA9IGdzdF90YWdfbG9va3VwIChnX3F1YXJrX2Zyb21fc3RyaW5nICh0YWcpKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGluZm8gIT0gTlVMTCwgTlVMTCk7CisKKyAgcmV0dXJuIGluZm8tPmJsdXJiOworfQorCisvKioKKyAqIGdzdF90YWdfZ2V0X2ZsYWc6CisgKiBAdGFnOiB0aGUgdGFnCisgKgorICogR2V0cyB0aGUgZmxhZyBvZiBAdGFnLgorICoKKyAqIFJldHVybnM6IHRoZSBmbGFnIG9mIHRoaXMgdGFnLgorICovCitHc3RUYWdGbGFnCitnc3RfdGFnX2dldF9mbGFnIChjb25zdCBnY2hhciAqIHRhZykKK3sKKyAgR3N0VGFnSW5mbyAqaW5mbzsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAodGFnICE9IE5VTEwsIEdTVF9UQUdfRkxBR19VTkRFRklORUQpOworICBpbmZvID0gZ3N0X3RhZ19sb29rdXAgKGdfcXVhcmtfZnJvbV9zdHJpbmcgKHRhZykpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoaW5mbyAhPSBOVUxMLCBHU1RfVEFHX0ZMQUdfVU5ERUZJTkVEKTsKKworICByZXR1cm4gaW5mby0+ZmxhZzsKK30KKworLyoqCisgKiBnc3RfdGFnX2lzX2ZpeGVkOgorICogQHRhZzogdGFnIHRvIGNoZWNrCisgKgorICogQ2hlY2tzIGlmIHRoZSBnaXZlbiB0YWcgaXMgZml4ZWQuIEEgZml4ZWQgdGFnIGNhbiBvbmx5IGNvbnRhaW4gb25lIHZhbHVlLgorICogVW5maXhlZCB0YWdzIGNhbiBjb250YWluIGxpc3RzIG9mIHZhbHVlcy4KKyAqCisgKiBSZXR1cm5zOiBUUlVFLCBpZiB0aGUgZ2l2ZW4gdGFnIGlzIGZpeGVkLgorICovCitnYm9vbGVhbgorZ3N0X3RhZ19pc19maXhlZCAoY29uc3QgZ2NoYXIgKiB0YWcpCit7CisgIEdzdFRhZ0luZm8gKmluZm87CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRhZyAhPSBOVUxMLCBGQUxTRSk7CisgIGluZm8gPSBnc3RfdGFnX2xvb2t1cCAoZ19xdWFya19mcm9tX3N0cmluZyAodGFnKSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpbmZvICE9IE5VTEwsIEZBTFNFKTsKKworICByZXR1cm4gaW5mby0+bWVyZ2VfZnVuYyA9PSBOVUxMOworfQorCisvKioKKyAqIGdzdF90YWdfbGlzdF9uZXc6CisgKgorICogQ3JlYXRlcyBhIG5ldyBlbXB0eSBHc3RUYWdMaXN0LgorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdzdF90YWdfbGlzdF9mcmVlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBbiBlbXB0eSB0YWcgbGlzdAorICovCitHc3RUYWdMaXN0ICoKK2dzdF90YWdfbGlzdF9uZXcgKHZvaWQpCit7CisgIHJldHVybiBHU1RfVEFHX0xJU1QgKGdzdF9zdHJ1Y3R1cmVfaWRfZW1wdHlfbmV3IChHU1RfUVVBUksgKFRBR0xJU1QpKSk7Cit9CisKKy8qKgorICogZ3N0X3RhZ19saXN0X25ld19mdWxsOgorICogQHRhZzogdGFnCisgKiBALi4uOiBOVUxMLXRlcm1pbmF0ZWQgbGlzdCBvZiB2YWx1ZXMgdG8gc2V0CisgKgorICogQ3JlYXRlcyBhIG5ldyB0YWdsaXN0IGFuZCBhcHBlbmRzIHRoZSB2YWx1ZXMgZm9yIHRoZSBnaXZlbiB0YWdzLiBJdCBleHBlY3RzCisgKiB0YWctdmFsdWUgcGFpcnMgbGlrZSBnc3RfdGFnX2xpc3RfYWRkKCksIGFuZCBhIE5VTEwgdGVybWluYXRvciBhZnRlciB0aGUKKyAqIGxhc3QgcGFpci4gVGhlIHR5cGUgb2YgdGhlIHZhbHVlcyBpcyBpbXBsaWNpdCBhbmQgaXMgZG9jdW1lbnRlZCBpbiB0aGUgQVBJCisgKiByZWZlcmVuY2UsIGJ1dCBjYW4gYWxzbyBiZSBxdWVyaWVkIGF0IHJ1bnRpbWUgd2l0aCBnc3RfdGFnX2dldF90eXBlKCkuIEl0CisgKiBpcyBhbiBlcnJvciB0byBwYXNzIGEgdmFsdWUgb2YgYSB0eXBlIG5vdCBtYXRjaGluZyB0aGUgdGFnIHR5cGUgaW50byB0aGlzCisgKiBmdW5jdGlvbi4gVGhlIHRhZyBsaXN0IHdpbGwgbWFrZSBjb3BpZXMgb2YgYW55IGFyZ3VtZW50cyBwYXNzZWQKKyAqIChlLmcuIHN0cmluZ3MsIGJ1ZmZlcnMpLgorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdzdF90YWdfbGlzdF9mcmVlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0VGFnTGlzdC4gRnJlZSB3aXRoIGdzdF90YWdfbGlzdF9mcmVlKCkKKyAqICAgICB3aGVuIG5vIGxvbmdlciBuZWVkZWQuCisgKgorICogU2luY2U6IDAuMTAuMjQKKyAqLworLyogRklYTUUgMC4xMTogcmVuYW1lIGdzdF90YWdfbGlzdF9uZXdfZnVsbCB0byBfbmV3IGFuZCBfbmV3IHRvIF9uZXdfZW1wdHkgKi8KK0dzdFRhZ0xpc3QgKgorZ3N0X3RhZ19saXN0X25ld19mdWxsIChjb25zdCBnY2hhciAqIHRhZywgLi4uKQoreworICBHc3RUYWdMaXN0ICpsaXN0OworICB2YV9saXN0IGFyZ3M7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRhZyAhPSBOVUxMLCBOVUxMKTsKKworICBsaXN0ID0gZ3N0X3RhZ19saXN0X25ldyAoKTsKKyAgdmFfc3RhcnQgKGFyZ3MsIHRhZyk7CisgIGdzdF90YWdfbGlzdF9hZGRfdmFsaXN0IChsaXN0LCBHU1RfVEFHX01FUkdFX0FQUEVORCwgdGFnLCBhcmdzKTsKKyAgdmFfZW5kIChhcmdzKTsKKworICByZXR1cm4gbGlzdDsKK30KKworLyoqCisgKiBnc3RfdGFnX2xpc3RfbmV3X2Z1bGxfdmFsaXN0OgorICogQHZhcl9hcmdzOiB0YWcgLyB2YWx1ZSBwYWlycyB0byBzZXQKKyAqCisgKiBKdXN0IGxpa2UgZ3N0X3RhZ19saXN0X25ld19mdWxsKCksIG9ubHkgdGhhdCBpdCB0YWtlcyBhIHZhX2xpc3QgYXJndW1lbnQuCisgKiBVc2VmdWwgbW9zdGx5IGZvciBsYW5ndWFnZSBiaW5kaW5ncy4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnc3RfdGFnX2xpc3RfZnJlZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdFRhZ0xpc3QuIEZyZWUgd2l0aCBnc3RfdGFnX2xpc3RfZnJlZSgpCisgKiAgICAgd2hlbiBubyBsb25nZXIgbmVlZGVkLgorICoKKyAqIFNpbmNlOiAwLjEwLjI0CisgKi8KK0dzdFRhZ0xpc3QgKgorZ3N0X3RhZ19saXN0X25ld19mdWxsX3ZhbGlzdCAodmFfbGlzdCB2YXJfYXJncykKK3sKKyAgR3N0VGFnTGlzdCAqbGlzdDsKKyAgY29uc3QgZ2NoYXIgKnRhZzsKKworICBsaXN0ID0gZ3N0X3RhZ19saXN0X25ldyAoKTsKKworICB0YWcgPSB2YV9hcmcgKHZhcl9hcmdzLCBnY2hhciAqKTsKKyAgZ3N0X3RhZ19saXN0X2FkZF92YWxpc3QgKGxpc3QsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCB0YWcsIHZhcl9hcmdzKTsKKworICByZXR1cm4gbGlzdDsKK30KKworLyoqCisgKiBnc3RfdGFnX2xpc3RfaXNfZW1wdHk6CisgKiBAbGlzdDogQSAjR3N0VGFnTGlzdC4KKyAqCisgKiBDaGVja3MgaWYgdGhlIGdpdmVuIHRhZ2xpc3QgaXMgZW1wdHkuCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgdGFnbGlzdCBpcyBlbXB0eSwgb3RoZXJ3aXNlIEZBTFNFLgorICoKKyAqIFNpbmNlOiAwLjEwLjExCisgKi8KK2dib29sZWFuCitnc3RfdGFnX2xpc3RfaXNfZW1wdHkgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0KQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAobGlzdCAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVEFHX0xJU1QgKGxpc3QpLCBGQUxTRSk7CisKKyAgcmV0dXJuIChnc3Rfc3RydWN0dXJlX25fZmllbGRzICgoR3N0U3RydWN0dXJlICopIGxpc3QpID09IDApOworfQorCisvKioKKyAqIGdzdF9pc190YWdfbGlzdDoKKyAqIEBwOiBPYmplY3QgdGhhdCBtaWdodCBiZSBhIHRhZ2xpc3QKKyAqCisgKiBDaGVja3MgaWYgdGhlIGdpdmVuIHBvaW50ZXIgaXMgYSB0YWdsaXN0LgorICoKKyAqIFJldHVybnM6IFRSVUUsIGlmIHRoZSBnaXZlbiBwb2ludGVyIGlzIGEgdGFnbGlzdAorICovCitnYm9vbGVhbgorZ3N0X2lzX3RhZ19saXN0IChnY29uc3Rwb2ludGVyIHApCit7CisgIEdzdFN0cnVjdHVyZSAqcyA9IChHc3RTdHJ1Y3R1cmUgKikgcDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAocCAhPSBOVUxMLCBGQUxTRSk7CisKKyAgcmV0dXJuIChHU1RfSVNfU1RSVUNUVVJFIChzKSAmJiBzLT5uYW1lID09IEdTVF9RVUFSSyAoVEFHTElTVCkpOworfQorCit0eXBlZGVmIHN0cnVjdAoreworICBHc3RTdHJ1Y3R1cmUgKmxpc3Q7CisgIEdzdFRhZ01lcmdlTW9kZSBtb2RlOworfQorR3N0VGFnQ29weURhdGE7CisKK3N0YXRpYyB2b2lkCitnc3RfdGFnX2xpc3RfYWRkX3ZhbHVlX2ludGVybmFsIChHc3RTdHJ1Y3R1cmUgKiBsaXN0LCBHc3RUYWdNZXJnZU1vZGUgbW9kZSwKKyAgICBHUXVhcmsgdGFnLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR3N0VGFnSW5mbyAqIGluZm8pCit7CisgIGNvbnN0IEdWYWx1ZSAqdmFsdWUyOworCisgIGlmIChpbmZvID09IE5VTEwpIHsKKyAgICBpbmZvID0gZ3N0X3RhZ19sb29rdXAgKHRhZyk7CisgICAgaWYgKEdfVU5MSUtFTFkgKGluZm8gPT0gTlVMTCkpIHsKKyAgICAgIGdfd2FybmluZyAoInVua25vd24gdGFnICclcyciLCBnX3F1YXJrX3RvX3N0cmluZyAodGFnKSk7CisgICAgICByZXR1cm47CisgICAgfQorICB9CisKKyAgaWYgKGluZm8tPm1lcmdlX2Z1bmMKKyAgICAgICYmICh2YWx1ZTIgPSBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAobGlzdCwgdGFnKSkgIT0gTlVMTCkgeworICAgIEdWYWx1ZSBkZXN0ID0geyAwLCB9OworCisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICBjYXNlIEdTVF9UQUdfTUVSR0VfUkVQTEFDRV9BTEw6CisgICAgICBjYXNlIEdTVF9UQUdfTUVSR0VfUkVQTEFDRToKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsdWUgKGxpc3QsIHRhZywgdmFsdWUpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR1NUX1RBR19NRVJHRV9QUkVQRU5EOgorICAgICAgICBnc3RfdmFsdWVfbGlzdF9tZXJnZSAoJmRlc3QsIHZhbHVlLCB2YWx1ZTIpOworICAgICAgICBnc3Rfc3RydWN0dXJlX2lkX3NldF92YWx1ZSAobGlzdCwgdGFnLCAmZGVzdCk7CisgICAgICAgIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9UQUdfTUVSR0VfQVBQRU5EOgorICAgICAgICBnc3RfdmFsdWVfbGlzdF9tZXJnZSAoJmRlc3QsIHZhbHVlMiwgdmFsdWUpOworICAgICAgICBnc3Rfc3RydWN0dXJlX2lkX3NldF92YWx1ZSAobGlzdCwgdGFnLCAmZGVzdCk7CisgICAgICAgIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9UQUdfTUVSR0VfS0VFUDoKKyAgICAgIGNhc2UgR1NUX1RBR19NRVJHRV9LRUVQX0FMTDoKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9IGVsc2UgeworICAgIHN3aXRjaCAobW9kZSkgeworICAgICAgY2FzZSBHU1RfVEFHX01FUkdFX0FQUEVORDoKKyAgICAgIGNhc2UgR1NUX1RBR19NRVJHRV9LRUVQOgorICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKGxpc3QsIHRhZykgIT0gTlVMTCkKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgICBjYXNlIEdTVF9UQUdfTUVSR0VfUkVQTEFDRV9BTEw6CisgICAgICBjYXNlIEdTVF9UQUdfTUVSR0VfUkVQTEFDRToKKyAgICAgIGNhc2UgR1NUX1RBR19NRVJHRV9QUkVQRU5EOgorICAgICAgICBnc3Rfc3RydWN0dXJlX2lkX3NldF92YWx1ZSAobGlzdCwgdGFnLCB2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHU1RfVEFHX01FUkdFX0tFRVBfQUxMOgorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOworICAgICAgICBicmVhazsKKyAgICB9CisgIH0KK30KKworc3RhdGljIGdib29sZWFuCitnc3RfdGFnX2xpc3RfY29weV9mb3JlYWNoIChHUXVhcmsgdGFnLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBHc3RUYWdDb3B5RGF0YSAqY29weSA9IChHc3RUYWdDb3B5RGF0YSAqKSB1c2VyX2RhdGE7CisKKyAgZ3N0X3RhZ19saXN0X2FkZF92YWx1ZV9pbnRlcm5hbCAoY29weS0+bGlzdCwgY29weS0+bW9kZSwgdGFnLCB2YWx1ZSwgTlVMTCk7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qKgorICogZ3N0X3RhZ19saXN0X2luc2VydDoKKyAqIEBpbnRvOiBsaXN0IHRvIG1lcmdlIGludG8KKyAqIEBmcm9tOiBsaXN0IHRvIG1lcmdlIGZyb20KKyAqIEBtb2RlOiB0aGUgbW9kZSB0byB1c2UKKyAqCisgKiBJbnNlcnRzIHRoZSB0YWdzIG9mIHRoZSBAZnJvbSBsaXN0IGludG8gdGhlIGZpcnN0IGxpc3QgdXNpbmcgdGhlIGdpdmVuIG1vZGUuCisgKi8KK3ZvaWQKK2dzdF90YWdfbGlzdF9pbnNlcnQgKEdzdFRhZ0xpc3QgKiBpbnRvLCBjb25zdCBHc3RUYWdMaXN0ICogZnJvbSwKKyAgICBHc3RUYWdNZXJnZU1vZGUgbW9kZSkKK3sKKyAgR3N0VGFnQ29weURhdGEgZGF0YTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVEFHX0xJU1QgKGludG8pKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1RBR19MSVNUIChmcm9tKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9UQUdfTU9ERV9JU19WQUxJRCAobW9kZSkpOworCisgIGRhdGEubGlzdCA9IChHc3RTdHJ1Y3R1cmUgKikgaW50bzsKKyAgZGF0YS5tb2RlID0gbW9kZTsKKyAgaWYgKG1vZGUgPT0gR1NUX1RBR19NRVJHRV9SRVBMQUNFX0FMTCkgeworICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2FsbF9maWVsZHMgKGRhdGEubGlzdCk7CisgIH0KKyAgZ3N0X3N0cnVjdHVyZV9mb3JlYWNoICgoR3N0U3RydWN0dXJlICopIGZyb20sIGdzdF90YWdfbGlzdF9jb3B5X2ZvcmVhY2gsCisgICAgICAmZGF0YSk7Cit9CisKKy8qKgorICogZ3N0X3RhZ19saXN0X2NvcHk6CisgKiBAbGlzdDogbGlzdCB0byBjb3B5CisgKgorICogQ29waWVzIGEgZ2l2ZW4gI0dzdFRhZ0xpc3QuCisgKgorICogRnJlZS1mdW5jdGlvbjogZ3N0X3RhZ19saXN0X2ZyZWUKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGNvcHkgb2YgdGhlIGdpdmVuIGxpc3QKKyAqLworR3N0VGFnTGlzdCAqCitnc3RfdGFnX2xpc3RfY29weSAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVEFHX0xJU1QgKGxpc3QpLCBOVUxMKTsKKworICByZXR1cm4gR1NUX1RBR19MSVNUIChnc3Rfc3RydWN0dXJlX2NvcHkgKChHc3RTdHJ1Y3R1cmUgKikgbGlzdCkpOworfQorCisvKioKKyAqIGdzdF90YWdfbGlzdF9tZXJnZToKKyAqIEBsaXN0MTogZmlyc3QgbGlzdCB0byBtZXJnZQorICogQGxpc3QyOiBzZWNvbmQgbGlzdCB0byBtZXJnZQorICogQG1vZGU6IHRoZSBtb2RlIHRvIHVzZQorICoKKyAqIE1lcmdlcyB0aGUgdHdvIGdpdmVuIGxpc3RzIGludG8gYSBuZXcgbGlzdC4gSWYgb25lIG9mIHRoZSBsaXN0cyBpcyBOVUxMLCBhCisgKiBjb3B5IG9mIHRoZSBvdGhlciBpcyByZXR1cm5lZC4gSWYgYm90aCBsaXN0cyBhcmUgTlVMTCwgTlVMTCBpcyByZXR1cm5lZC4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnc3RfdGFnX2xpc3RfZnJlZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ldyBsaXN0CisgKi8KK0dzdFRhZ0xpc3QgKgorZ3N0X3RhZ19saXN0X21lcmdlIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdDEsIGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0MiwKKyAgICBHc3RUYWdNZXJnZU1vZGUgbW9kZSkKK3sKKyAgR3N0VGFnTGlzdCAqbGlzdDFfY3A7CisgIGNvbnN0IEdzdFRhZ0xpc3QgKmxpc3QyX2NwOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChsaXN0MSA9PSBOVUxMIHx8IEdTVF9JU19UQUdfTElTVCAobGlzdDEpLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGxpc3QyID09IE5VTEwgfHwgR1NUX0lTX1RBR19MSVNUIChsaXN0MiksIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1RBR19NT0RFX0lTX1ZBTElEIChtb2RlKSwgTlVMTCk7CisKKyAgLyogbm90aGluZyB0byBtZXJnZSAqLworICBpZiAoIWxpc3QxICYmICFsaXN0MikgeworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgLyogY3JlYXRlIGVtcHR5IGxpc3QsIHdlIG5lZWQgdG8gZG8gdGhpcyB0byBjb3JyZWN0bHkgaGFuZGxpbmcgbWVyZ2UgbW9kZXMgKi8KKyAgbGlzdDFfY3AgPSAobGlzdDEpID8gZ3N0X3RhZ19saXN0X2NvcHkgKGxpc3QxKSA6IGdzdF90YWdfbGlzdF9uZXcgKCk7CisgIGxpc3QyX2NwID0gKGxpc3QyKSA/IGxpc3QyIDogZ3N0X3RhZ19saXN0X25ldyAoKTsKKworICBnc3RfdGFnX2xpc3RfaW5zZXJ0IChsaXN0MV9jcCwgbGlzdDJfY3AsIG1vZGUpOworCisgIGlmICghbGlzdDIpCisgICAgZ3N0X3RhZ19saXN0X2ZyZWUgKChHc3RUYWdMaXN0ICopIGxpc3QyX2NwKTsKKworICByZXR1cm4gbGlzdDFfY3A7Cit9CisKKy8qKgorICogZ3N0X3RhZ19saXN0X2ZyZWU6CisgKiBAbGlzdDogKGluKSAodHJhbnNmZXIgZnVsbCk6IHRoZSBsaXN0IHRvIGZyZWUKKyAqCisgKiBGcmVlcyB0aGUgZ2l2ZW4gbGlzdCBhbmQgYWxsIGFzc29jaWF0ZWQgdmFsdWVzLgorICovCit2b2lkCitnc3RfdGFnX2xpc3RfZnJlZSAoR3N0VGFnTGlzdCAqIGxpc3QpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19UQUdfTElTVCAobGlzdCkpOworICBnc3Rfc3RydWN0dXJlX2ZyZWUgKChHc3RTdHJ1Y3R1cmUgKikgbGlzdCk7Cit9CisKKy8qKgorICogZ3N0X3RhZ19saXN0X2dldF90YWdfc2l6ZToKKyAqIEBsaXN0OiBhIHRhZ2xpc3QKKyAqIEB0YWc6IHRoZSB0YWcgdG8gcXVlcnkKKyAqCisgKiBDaGVja3MgaG93IG1hbnkgdmFsdWUgYXJlIHN0b3JlZCBpbiB0aGlzIHRhZyBsaXN0IGZvciB0aGUgZ2l2ZW4gdGFnLgorICoKKyAqIFJldHVybnM6IFRoZSBudW1iZXIgb2YgdGFncyBzdG9yZWQKKyAqLworZ3VpbnQKK2dzdF90YWdfbGlzdF9nZXRfdGFnX3NpemUgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LCBjb25zdCBnY2hhciAqIHRhZykKK3sKKyAgY29uc3QgR1ZhbHVlICp2YWx1ZTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1RBR19MSVNUIChsaXN0KSwgMCk7CisKKyAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoKEdzdFN0cnVjdHVyZSAqKSBsaXN0LCB0YWcpOworICBpZiAodmFsdWUgPT0gTlVMTCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKEdfVkFMVUVfVFlQRSAodmFsdWUpICE9IEdTVF9UWVBFX0xJU1QpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIGdzdF92YWx1ZV9saXN0X2dldF9zaXplICh2YWx1ZSk7Cit9CisKKy8qKgorICogZ3N0X3RhZ19saXN0X2FkZDoKKyAqIEBsaXN0OiBsaXN0IHRvIHNldCB0YWdzIGluCisgKiBAbW9kZTogdGhlIG1vZGUgdG8gdXNlCisgKiBAdGFnOiB0YWcKKyAqIEAuLi46IE5VTEwtdGVybWluYXRlZCBsaXN0IG9mIHZhbHVlcyB0byBzZXQKKyAqCisgKiBTZXRzIHRoZSB2YWx1ZXMgZm9yIHRoZSBnaXZlbiB0YWdzIHVzaW5nIHRoZSBzcGVjaWZpZWQgbW9kZS4KKyAqLwordm9pZAorZ3N0X3RhZ19saXN0X2FkZCAoR3N0VGFnTGlzdCAqIGxpc3QsIEdzdFRhZ01lcmdlTW9kZSBtb2RlLCBjb25zdCBnY2hhciAqIHRhZywKKyAgICAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVEFHX0xJU1QgKGxpc3QpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1RBR19NT0RFX0lTX1ZBTElEIChtb2RlKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKHRhZyAhPSBOVUxMKTsKKworICB2YV9zdGFydCAoYXJncywgdGFnKTsKKyAgZ3N0X3RhZ19saXN0X2FkZF92YWxpc3QgKGxpc3QsIG1vZGUsIHRhZywgYXJncyk7CisgIHZhX2VuZCAoYXJncyk7Cit9CisKKy8qKgorICogZ3N0X3RhZ19saXN0X2FkZF92YWx1ZXM6CisgKiBAbGlzdDogbGlzdCB0byBzZXQgdGFncyBpbgorICogQG1vZGU6IHRoZSBtb2RlIHRvIHVzZQorICogQHRhZzogdGFnCisgKiBALi4uOiBHVmFsdWVzIHRvIHNldAorICoKKyAqIFNldHMgdGhlIEdWYWx1ZXMgZm9yIHRoZSBnaXZlbiB0YWdzIHVzaW5nIHRoZSBzcGVjaWZpZWQgbW9kZS4KKyAqLwordm9pZAorZ3N0X3RhZ19saXN0X2FkZF92YWx1ZXMgKEdzdFRhZ0xpc3QgKiBsaXN0LCBHc3RUYWdNZXJnZU1vZGUgbW9kZSwKKyAgICBjb25zdCBnY2hhciAqIHRhZywgLi4uKQoreworICB2YV9saXN0IGFyZ3M7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1RBR19MSVNUIChsaXN0KSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9UQUdfTU9ERV9JU19WQUxJRCAobW9kZSkpOworICBnX3JldHVybl9pZl9mYWlsICh0YWcgIT0gTlVMTCk7CisKKyAgdmFfc3RhcnQgKGFyZ3MsIHRhZyk7CisgIGdzdF90YWdfbGlzdF9hZGRfdmFsaXN0X3ZhbHVlcyAobGlzdCwgbW9kZSwgdGFnLCBhcmdzKTsKKyAgdmFfZW5kIChhcmdzKTsKK30KKworLyoqCisgKiBnc3RfdGFnX2xpc3RfYWRkX3ZhbGlzdDoKKyAqIEBsaXN0OiBsaXN0IHRvIHNldCB0YWdzIGluCisgKiBAbW9kZTogdGhlIG1vZGUgdG8gdXNlCisgKiBAdGFnOiB0YWcKKyAqIEB2YXJfYXJnczogdGFnIC8gdmFsdWUgcGFpcnMgdG8gc2V0CisgKgorICogU2V0cyB0aGUgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gdGFncyB1c2luZyB0aGUgc3BlY2lmaWVkIG1vZGUuCisgKi8KK3ZvaWQKK2dzdF90YWdfbGlzdF9hZGRfdmFsaXN0IChHc3RUYWdMaXN0ICogbGlzdCwgR3N0VGFnTWVyZ2VNb2RlIG1vZGUsCisgICAgY29uc3QgZ2NoYXIgKiB0YWcsIHZhX2xpc3QgdmFyX2FyZ3MpCit7CisgIEdzdFRhZ0luZm8gKmluZm87CisgIEdRdWFyayBxdWFyazsKKyAgZ2NoYXIgKmVycm9yID0gTlVMTDsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVEFHX0xJU1QgKGxpc3QpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1RBR19NT0RFX0lTX1ZBTElEIChtb2RlKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKHRhZyAhPSBOVUxMKTsKKworICBpZiAobW9kZSA9PSBHU1RfVEFHX01FUkdFX1JFUExBQ0VfQUxMKSB7CisgICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfYWxsX2ZpZWxkcyAobGlzdCk7CisgIH0KKworICB3aGlsZSAodGFnICE9IE5VTEwpIHsKKyAgICBHVmFsdWUgdmFsdWUgPSB7IDAsIH07CisKKyAgICBxdWFyayA9IGdfcXVhcmtfZnJvbV9zdHJpbmcgKHRhZyk7CisgICAgaW5mbyA9IGdzdF90YWdfbG9va3VwIChxdWFyayk7CisgICAgaWYgKEdfVU5MSUtFTFkgKGluZm8gPT0gTlVMTCkpIHsKKyAgICAgIGdfd2FybmluZyAoInVua25vd24gdGFnICclcyciLCB0YWcpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBHX1ZBTFVFX0NPTExFQ1RfSU5JVCAoJnZhbHVlLCBpbmZvLT50eXBlLCB2YXJfYXJncywgMCwgJmVycm9yKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgIGdfd2FybmluZyAoIiVzOiAlcyIsIEdfU1RSTE9DLCBlcnJvcik7CisgICAgICBnX2ZyZWUgKGVycm9yKTsKKyAgICAgIC8qIHdlIHB1cnBvc2VseSBsZWFrIHRoZSB2YWx1ZSBoZXJlLCBpdCBtaWdodCBub3QgYmUKKyAgICAgICAqIGluIGEgc2FuZSBzdGF0ZSBpZiBhbiBlcnJvciBjb25kaXRpb24gb2Njb3VyZWQKKyAgICAgICAqLworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBnc3RfdGFnX2xpc3RfYWRkX3ZhbHVlX2ludGVybmFsIChsaXN0LCBtb2RlLCBxdWFyaywgJnZhbHVlLCBpbmZvKTsKKyAgICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUpOworICAgIHRhZyA9IHZhX2FyZyAodmFyX2FyZ3MsIGdjaGFyICopOworICB9Cit9CisKKy8qKgorICogZ3N0X3RhZ19saXN0X2FkZF92YWxpc3RfdmFsdWVzOgorICogQGxpc3Q6IGxpc3QgdG8gc2V0IHRhZ3MgaW4KKyAqIEBtb2RlOiB0aGUgbW9kZSB0byB1c2UKKyAqIEB0YWc6IHRhZworICogQHZhcl9hcmdzOiB0YWcgLyBHVmFsdWUgcGFpcnMgdG8gc2V0CisgKgorICogU2V0cyB0aGUgR1ZhbHVlcyBmb3IgdGhlIGdpdmVuIHRhZ3MgdXNpbmcgdGhlIHNwZWNpZmllZCBtb2RlLgorICovCit2b2lkCitnc3RfdGFnX2xpc3RfYWRkX3ZhbGlzdF92YWx1ZXMgKEdzdFRhZ0xpc3QgKiBsaXN0LCBHc3RUYWdNZXJnZU1vZGUgbW9kZSwKKyAgICBjb25zdCBnY2hhciAqIHRhZywgdmFfbGlzdCB2YXJfYXJncykKK3sKKyAgR1F1YXJrIHF1YXJrOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19UQUdfTElTVCAobGlzdCkpOworICBnX3JldHVybl9pZl9mYWlsIChHU1RfVEFHX01PREVfSVNfVkFMSUQgKG1vZGUpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAodGFnICE9IE5VTEwpOworCisgIGlmIChtb2RlID09IEdTVF9UQUdfTUVSR0VfUkVQTEFDRV9BTEwpIHsKKyAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9hbGxfZmllbGRzIChsaXN0KTsKKyAgfQorCisgIHdoaWxlICh0YWcgIT0gTlVMTCkgeworICAgIHF1YXJrID0gZ19xdWFya19mcm9tX3N0cmluZyAodGFnKTsKKyAgICBnX3JldHVybl9pZl9mYWlsIChnc3RfdGFnX2xvb2t1cCAocXVhcmspICE9IE5VTEwpOworICAgIGdzdF90YWdfbGlzdF9hZGRfdmFsdWVfaW50ZXJuYWwgKGxpc3QsIG1vZGUsIHF1YXJrLCB2YV9hcmcgKHZhcl9hcmdzLAorICAgICAgICAgICAgR1ZhbHVlICopLCBOVUxMKTsKKyAgICB0YWcgPSB2YV9hcmcgKHZhcl9hcmdzLCBnY2hhciAqKTsKKyAgfQorfQorCisvKioKKyAqIGdzdF90YWdfbGlzdF9hZGRfdmFsdWU6CisgKiBAbGlzdDogbGlzdCB0byBzZXQgdGFncyBpbgorICogQG1vZGU6IHRoZSBtb2RlIHRvIHVzZQorICogQHRhZzogdGFnCisgKiBAdmFsdWU6IEdWYWx1ZSBmb3IgdGhpcyB0YWcKKyAqCisgKiBTZXRzIHRoZSBHVmFsdWUgZm9yIGEgZ2l2ZW4gdGFnIHVzaW5nIHRoZSBzcGVjaWZpZWQgbW9kZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICovCit2b2lkCitnc3RfdGFnX2xpc3RfYWRkX3ZhbHVlIChHc3RUYWdMaXN0ICogbGlzdCwgR3N0VGFnTWVyZ2VNb2RlIG1vZGUsCisgICAgY29uc3QgZ2NoYXIgKiB0YWcsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQoreworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVEFHX0xJU1QgKGxpc3QpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1RBR19NT0RFX0lTX1ZBTElEIChtb2RlKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKHRhZyAhPSBOVUxMKTsKKworICBnc3RfdGFnX2xpc3RfYWRkX3ZhbHVlX2ludGVybmFsIChsaXN0LCBtb2RlLCBnX3F1YXJrX2Zyb21fc3RyaW5nICh0YWcpLAorICAgICAgdmFsdWUsIE5VTEwpOworfQorCisvKioKKyAqIGdzdF90YWdfbGlzdF9yZW1vdmVfdGFnOgorICogQGxpc3Q6IGxpc3QgdG8gcmVtb3ZlIHRhZyBmcm9tCisgKiBAdGFnOiB0YWcgdG8gcmVtb3ZlCisgKgorICogUmVtb3ZlcyB0aGUgZ2l2ZW4gdGFnIGZyb20gdGhlIHRhZ2xpc3QuCisgKi8KK3ZvaWQKK2dzdF90YWdfbGlzdF9yZW1vdmVfdGFnIChHc3RUYWdMaXN0ICogbGlzdCwgY29uc3QgZ2NoYXIgKiB0YWcpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19UQUdfTElTVCAobGlzdCkpOworICBnX3JldHVybl9pZl9mYWlsICh0YWcgIT0gTlVMTCk7CisKKyAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKChHc3RTdHJ1Y3R1cmUgKikgbGlzdCwgdGFnKTsKK30KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgR3N0VGFnRm9yZWFjaEZ1bmMgZnVuYzsKKyAgY29uc3QgR3N0VGFnTGlzdCAqdGFnX2xpc3Q7CisgIGdwb2ludGVyIGRhdGE7Cit9CitUYWdGb3JlYWNoRGF0YTsKKworc3RhdGljIGludAorc3RydWN0dXJlX2ZvcmVhY2hfd3JhcHBlciAoR1F1YXJrIGZpZWxkX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwKKyAgICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIFRhZ0ZvcmVhY2hEYXRhICpkYXRhID0gKFRhZ0ZvcmVhY2hEYXRhICopIHVzZXJfZGF0YTsKKworICBkYXRhLT5mdW5jIChkYXRhLT50YWdfbGlzdCwgZ19xdWFya190b19zdHJpbmcgKGZpZWxkX2lkKSwgZGF0YS0+ZGF0YSk7CisgIHJldHVybiBUUlVFOworfQorCisvKioKKyAqIGdzdF90YWdfbGlzdF9mb3JlYWNoOgorICogQGxpc3Q6IGxpc3QgdG8gaXRlcmF0ZSBvdmVyCisgKiBAZnVuYzogKHNjb3BlIGNhbGwpOiBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZm9yIGVhY2ggdGFnCisgKiBAdXNlcl9kYXRhOiAoY2xvc3VyZSk6IHVzZXIgc3BlY2lmaWVkIGRhdGEKKyAqCisgKiBDYWxscyB0aGUgZ2l2ZW4gZnVuY3Rpb24gZm9yIGVhY2ggdGFnIGluc2lkZSB0aGUgdGFnIGxpc3QuIE5vdGUgdGhhdCBpZiB0aGVyZQorICogaXMgbm8gdGFnLCB0aGUgZnVuY3Rpb24gd29uJ3QgYmUgY2FsbGVkIGF0IGFsbC4KKyAqLwordm9pZAorZ3N0X3RhZ19saXN0X2ZvcmVhY2ggKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LCBHc3RUYWdGb3JlYWNoRnVuYyBmdW5jLAorICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgVGFnRm9yZWFjaERhdGEgZGF0YTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVEFHX0xJU1QgKGxpc3QpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoZnVuYyAhPSBOVUxMKTsKKworICBkYXRhLmZ1bmMgPSBmdW5jOworICBkYXRhLnRhZ19saXN0ID0gbGlzdDsKKyAgZGF0YS5kYXRhID0gdXNlcl9kYXRhOworICBnc3Rfc3RydWN0dXJlX2ZvcmVhY2ggKChHc3RTdHJ1Y3R1cmUgKikgbGlzdCwgc3RydWN0dXJlX2ZvcmVhY2hfd3JhcHBlciwKKyAgICAgICZkYXRhKTsKK30KKworLyoqCisgKiBnc3RfdGFnX2xpc3RfZ2V0X3ZhbHVlX2luZGV4OgorICogQGxpc3Q6IGEgI0dzdFRhZ0xpc3QKKyAqIEB0YWc6IHRhZyB0byByZWFkIG91dAorICogQGluZGV4OiBudW1iZXIgb2YgZW50cnkgdG8gcmVhZCBvdXQKKyAqCisgKiBHZXRzIHRoZSB2YWx1ZSB0aGF0IGlzIGF0IHRoZSBnaXZlbiBpbmRleCBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgZ2l2ZW4KKyAqIGxpc3QuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBUaGUgR1ZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIGVudHJ5IG9yIE5VTEwgaWYgdGhlCisgKiAgICAgICAgICB0YWcgd2Fzbid0IGF2YWlsYWJsZSBvciB0aGUgdGFnIGRvZXNuJ3QgaGF2ZSBhcyBtYW55IGVudHJpZXMKKyAqLworY29uc3QgR1ZhbHVlICoKK2dzdF90YWdfbGlzdF9nZXRfdmFsdWVfaW5kZXggKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LCBjb25zdCBnY2hhciAqIHRhZywKKyAgICBndWludCBpbmRleCkKK3sKKyAgY29uc3QgR1ZhbHVlICp2YWx1ZTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1RBR19MSVNUIChsaXN0KSwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0YWcgIT0gTlVMTCwgTlVMTCk7CisKKyAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoKEdzdFN0cnVjdHVyZSAqKSBsaXN0LCB0YWcpOworICBpZiAodmFsdWUgPT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsKKworICBpZiAoR1NUX1ZBTFVFX0hPTERTX0xJU1QgKHZhbHVlKSkgeworICAgIGlmIChpbmRleCA+PSBnc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZSAodmFsdWUpKQorICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAodmFsdWUsIGluZGV4KTsKKyAgfSBlbHNlIHsKKyAgICBpZiAoaW5kZXggPiAwKQorICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIHZhbHVlOworICB9Cit9CisKKy8qKgorICogZ3N0X3RhZ19saXN0X2NvcHlfdmFsdWU6CisgKiBAZGVzdDogKG91dCBjYWxsZXItYWxsb2NhdGVzKTogdW5pbml0aWFsaXplZCAjR1ZhbHVlIHRvIGNvcHkgaW50bworICogQGxpc3Q6IGxpc3QgdG8gZ2V0IHRoZSB0YWcgZnJvbQorICogQHRhZzogdGFnIHRvIHJlYWQgb3V0CisgKgorICogQ29waWVzIHRoZSBjb250ZW50cyBmb3IgdGhlIGdpdmVuIHRhZyBpbnRvIHRoZSB2YWx1ZSwKKyAqIG1lcmdpbmcgbXVsdGlwbGUgdmFsdWVzIGludG8gb25lIGlmIG11bHRpcGxlIHZhbHVlcyBhcmUgYXNzb2NpYXRlZAorICogd2l0aCB0aGUgdGFnLgorICogWW91IG11c3QgZ192YWx1ZV91bnNldCgpIHRoZSB2YWx1ZSBhZnRlciB1c2UuCisgKgorICogUmV0dXJuczogVFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCBGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKKyAqICAgICAgICAgIGdpdmVuIGxpc3QuCisgKi8KK2dib29sZWFuCitnc3RfdGFnX2xpc3RfY29weV92YWx1ZSAoR1ZhbHVlICogZGVzdCwgY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCisgICAgY29uc3QgZ2NoYXIgKiB0YWcpCit7CisgIGNvbnN0IEdWYWx1ZSAqc3JjOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVEFHX0xJU1QgKGxpc3QpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0YWcgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGVzdCAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX1ZBTFVFX1RZUEUgKGRlc3QpID09IDAsIEZBTFNFKTsKKworICBzcmMgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoKEdzdFN0cnVjdHVyZSAqKSBsaXN0LCB0YWcpOworICBpZiAoIXNyYykKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgaWYgKEdfVkFMVUVfVFlQRSAoc3JjKSA9PSBHU1RfVFlQRV9MSVNUKSB7CisgICAgR3N0VGFnSW5mbyAqaW5mbyA9IGdzdF90YWdfbG9va3VwIChnX3F1YXJrX2Zyb21fc3RyaW5nICh0YWcpKTsKKworICAgIGlmICghaW5mbykKKyAgICAgIHJldHVybiBGQUxTRTsKKworICAgIC8qIG11c3QgYmUgdGhlcmUgb3IgbGlzdHMgYXJlbid0IGFsbG93ZWQgKi8KKyAgICBnX2Fzc2VydCAoaW5mby0+bWVyZ2VfZnVuYyk7CisgICAgaW5mby0+bWVyZ2VfZnVuYyAoZGVzdCwgc3JjKTsKKyAgfSBlbHNlIHsKKyAgICBnX3ZhbHVlX2luaXQgKGRlc3QsIEdfVkFMVUVfVFlQRSAoc3JjKSk7CisgICAgZ192YWx1ZV9jb3B5IChzcmMsIGRlc3QpOworICB9CisgIHJldHVybiBUUlVFOworfQorCisvKiBGSVhNRSAwLjExOiB0aGlzIHdob2xlIG1lcmdlIGZ1bmN0aW9uIGJ1c2luZXNzIGlzIG92ZXJkZXNpZ25lZCwgYW5kIHRoZQorICogX2dldF9mb28oKSBBUEkgaXMgbWlzbGVhZGluZyBhcyB3ZWxsIC0gaG93IG1hbnkgYXBwbGljYXRpb24gZGV2ZWxvcGVycyB3aWxsCisgKiBleHBlY3QgZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcgKGxpc3QsIEdTVF9UQUdfQVJUSVNULCAmdmFsKSBtaWdodCByZXR1cm4gYQorICogc3RyaW5nIHdpdGggbXVsdGlwbGUgY29tbWEtc2VwYXJhdGVkIGFydGlzdHM/IF9nZXRfZm9vKCkgc2hvdWxkIGp1c3QgYmUKKyAqIGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgX2dldF9mb29faW5kZXggKGxpc3QsIHRhZywgMCwgJnZhbCksCisgKiBzdXBwbGVtZW50ZWQgYnkgYSBzcGVjaWFsIF90YWdfbGlzdF9nZXRfc3RyaW5nX21lcmdlZCgpIGZ1bmN0aW9uIGlmIG5lZWRlZAorICogKHVubGVzcyBzb21lb25lIGNhbiBhY3R1YWxseSB0aGluayBvZiByZWFsIHVzZSBjYXNlcyB3aGVyZSB0aGUgbWVyZ2UKKyAqIGZ1bmN0aW9uIGlzIG5vdCAndXNlIGZpcnN0JyBmb3Igbm9uLXN0cmluZ3MgYW5kIG1lcmdlIGZvciBzdHJpbmdzKSAqLworCisvKioqKiogZXZpbCBtYWNyb3MgdG8gZ2V0IGFsbCB0aGUgZ3N0X3RhZ19saXN0X2dldF8qKCkgZnVuY3Rpb25zIHJpZ2h0ICoqKioqLworCisjZGVmaW5lIFRBR19NRVJHRV9GVU5DUyhuYW1lLHR5cGUscmV0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitnYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitnc3RfdGFnX2xpc3RfZ2V0XyAjIyBuYW1lIChjb25zdCBHc3RUYWdMaXN0ICpsaXN0LCBjb25zdCBnY2hhciAqdGFnLCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlICp2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEdWYWx1ZSB2ID0geyAwLCB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVEFHX0xJU1QgKGxpc3QpLCBGQUxTRSk7ICAgICAgICAgICAgICAgICBcCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0YWcgIT0gTlVMTCwgRkFMU0UpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh2YWx1ZSAhPSBOVUxMLCBGQUxTRSk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmICghZ3N0X3RhZ19saXN0X2NvcHlfdmFsdWUgKCZ2LCBsaXN0LCB0YWcpKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICp2YWx1ZSA9IENPUFlfRlVOQyAoZ192YWx1ZV9nZXRfICMjIG5hbWUgKCZ2KSk7ICAgICAgICAgICAgICAgICAgICAgICBcCisgIGdfdmFsdWVfdW5zZXQgKCZ2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHJldHVybiByZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitnYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitnc3RfdGFnX2xpc3RfZ2V0XyAjIyBuYW1lICMjIF9pbmRleCAoY29uc3QgR3N0VGFnTGlzdCAqbGlzdCwgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnRhZywgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgaW5kZXgsIHR5cGUgKnZhbHVlKSAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGNvbnN0IEdWYWx1ZSAqdjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVEFHX0xJU1QgKGxpc3QpLCBGQUxTRSk7ICAgICAgICAgICAgICAgICBcCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0YWcgIT0gTlVMTCwgRkFMU0UpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh2YWx1ZSAhPSBOVUxMLCBGQUxTRSk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmICgodiA9IGdzdF90YWdfbGlzdF9nZXRfdmFsdWVfaW5kZXggKGxpc3QsIHRhZywgaW5kZXgpKSA9PSBOVUxMKSAgICBcCisgICAgICByZXR1cm4gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICp2YWx1ZSA9IENPUFlfRlVOQyAoZ192YWx1ZV9nZXRfICMjIG5hbWUgKHYpKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHJldHVybiByZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKy8qIEZJWE1FIDAuMTE6IG1heWJlIGdldCByaWQgb2YgX2dldF9jaGFyKigpLCBfZ2V0X3VjaGFyKigpLCBfZ2V0X2xvbmcqKCksCisgKiBfZ2V0X3Vsb25nKigpIGFuZCBfZ2V0X3BvaW50ZXIqKCk/IC0gdGhleSBhcmUgbm90IHJlYWxseSB1c2VmdWwvY29tbW9uCisgKiBlbm91Z2ggdG8gd2FycmFudCBjb252ZW5pZW5jZSBhY2Nlc3NvciBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBDT1BZX0ZVTkMgLyoqLworLyoqCisgKiBnc3RfdGFnX2xpc3RfZ2V0X2NoYXI6CisgKiBAbGlzdDogYSAjR3N0VGFnTGlzdCB0byBnZXQgdGhlIHRhZyBmcm9tCisgKiBAdGFnOiB0YWcgdG8gcmVhZCBvdXQKKyAqIEB2YWx1ZTogKG91dCk6IGxvY2F0aW9uIGZvciB0aGUgcmVzdWx0CisgKgorICogQ29waWVzIHRoZSBjb250ZW50cyBmb3IgdGhlIGdpdmVuIHRhZyBpbnRvIHRoZSB2YWx1ZSwgbWVyZ2luZyBtdWx0aXBsZSB2YWx1ZXMKKyAqIGludG8gb25lIGlmIG11bHRpcGxlIHZhbHVlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWcuCisgKgorICogUmV0dXJuczogVFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCBGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKKyAqICAgICAgICAgICAgICBnaXZlbiBsaXN0LgorICovCisvKioKKyAqIGdzdF90YWdfbGlzdF9nZXRfY2hhcl9pbmRleDoKKyAqIEBsaXN0OiBhICNHc3RUYWdMaXN0IHRvIGdldCB0aGUgdGFnIGZyb20KKyAqIEB0YWc6IHRhZyB0byByZWFkIG91dAorICogQGluZGV4OiBudW1iZXIgb2YgZW50cnkgdG8gcmVhZCBvdXQKKyAqIEB2YWx1ZTogKG91dCk6IGxvY2F0aW9uIGZvciB0aGUgcmVzdWx0CisgKgorICogR2V0cyB0aGUgdmFsdWUgdGhhdCBpcyBhdCB0aGUgZ2l2ZW4gaW5kZXggZm9yIHRoZSBnaXZlbiB0YWcgaW4gdGhlIGdpdmVuCisgKiBsaXN0LgorICoKKyAqIFJldHVybnM6IFRSVUUsIGlmIGEgdmFsdWUgd2FzIGNvcGllZCwgRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCisgKiAgICAgICAgICAgICAgZ2l2ZW4gbGlzdC4KKyAqLworVEFHX01FUkdFX0ZVTkNTIChjaGFyLCBnY2hhciwgVFJVRSk7CisvKioKKyAqIGdzdF90YWdfbGlzdF9nZXRfdWNoYXI6CisgKiBAbGlzdDogYSAjR3N0VGFnTGlzdCB0byBnZXQgdGhlIHRhZyBmcm9tCisgKiBAdGFnOiB0YWcgdG8gcmVhZCBvdXQKKyAqIEB2YWx1ZTogKG91dCk6IGxvY2F0aW9uIGZvciB0aGUgcmVzdWx0CisgKgorICogQ29waWVzIHRoZSBjb250ZW50cyBmb3IgdGhlIGdpdmVuIHRhZyBpbnRvIHRoZSB2YWx1ZSwgbWVyZ2luZyBtdWx0aXBsZSB2YWx1ZXMKKyAqIGludG8gb25lIGlmIG11bHRpcGxlIHZhbHVlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWcuCisgKgorICogUmV0dXJuczogVFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCBGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKKyAqICAgICAgICAgICAgICBnaXZlbiBsaXN0LgorICovCisvKioKKyAqIGdzdF90YWdfbGlzdF9nZXRfdWNoYXJfaW5kZXg6CisgKiBAbGlzdDogYSAjR3N0VGFnTGlzdCB0byBnZXQgdGhlIHRhZyBmcm9tCisgKiBAdGFnOiB0YWcgdG8gcmVhZCBvdXQKKyAqIEBpbmRleDogbnVtYmVyIG9mIGVudHJ5IHRvIHJlYWQgb3V0CisgKiBAdmFsdWU6IChvdXQpOiBsb2NhdGlvbiBmb3IgdGhlIHJlc3VsdAorICoKKyAqIEdldHMgdGhlIHZhbHVlIHRoYXQgaXMgYXQgdGhlIGdpdmVuIGluZGV4IGZvciB0aGUgZ2l2ZW4gdGFnIGluIHRoZSBnaXZlbgorICogbGlzdC4KKyAqCisgKiBSZXR1cm5zOiBUUlVFLCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIEZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQorICogICAgICAgICAgICAgIGdpdmVuIGxpc3QuCisgKi8KK1RBR19NRVJHRV9GVU5DUyAodWNoYXIsIGd1Y2hhciwgVFJVRSk7CisvKioKKyAqIGdzdF90YWdfbGlzdF9nZXRfYm9vbGVhbjoKKyAqIEBsaXN0OiBhICNHc3RUYWdMaXN0IHRvIGdldCB0aGUgdGFnIGZyb20KKyAqIEB0YWc6IHRhZyB0byByZWFkIG91dAorICogQHZhbHVlOiAob3V0KTogbG9jYXRpb24gZm9yIHRoZSByZXN1bHQKKyAqCisgKiBDb3BpZXMgdGhlIGNvbnRlbnRzIGZvciB0aGUgZ2l2ZW4gdGFnIGludG8gdGhlIHZhbHVlLCBtZXJnaW5nIG11bHRpcGxlIHZhbHVlcworICogaW50byBvbmUgaWYgbXVsdGlwbGUgdmFsdWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHRhZy4KKyAqCisgKiBSZXR1cm5zOiBUUlVFLCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIEZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQorICogICAgICAgICAgICAgIGdpdmVuIGxpc3QuCisgKi8KKy8qKgorICogZ3N0X3RhZ19saXN0X2dldF9ib29sZWFuX2luZGV4OgorICogQGxpc3Q6IGEgI0dzdFRhZ0xpc3QgdG8gZ2V0IHRoZSB0YWcgZnJvbQorICogQHRhZzogdGFnIHRvIHJlYWQgb3V0CisgKiBAaW5kZXg6IG51bWJlciBvZiBlbnRyeSB0byByZWFkIG91dAorICogQHZhbHVlOiAob3V0KTogbG9jYXRpb24gZm9yIHRoZSByZXN1bHQKKyAqCisgKiBHZXRzIHRoZSB2YWx1ZSB0aGF0IGlzIGF0IHRoZSBnaXZlbiBpbmRleCBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgZ2l2ZW4KKyAqIGxpc3QuCisgKgorICogUmV0dXJuczogVFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCBGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKKyAqICAgICAgICAgICAgICBnaXZlbiBsaXN0LgorICovCitUQUdfTUVSR0VfRlVOQ1MgKGJvb2xlYW4sIGdib29sZWFuLCBUUlVFKTsKKy8qKgorICogZ3N0X3RhZ19saXN0X2dldF9pbnQ6CisgKiBAbGlzdDogYSAjR3N0VGFnTGlzdCB0byBnZXQgdGhlIHRhZyBmcm9tCisgKiBAdGFnOiB0YWcgdG8gcmVhZCBvdXQKKyAqIEB2YWx1ZTogKG91dCk6IGxvY2F0aW9uIGZvciB0aGUgcmVzdWx0CisgKgorICogQ29waWVzIHRoZSBjb250ZW50cyBmb3IgdGhlIGdpdmVuIHRhZyBpbnRvIHRoZSB2YWx1ZSwgbWVyZ2luZyBtdWx0aXBsZSB2YWx1ZXMKKyAqIGludG8gb25lIGlmIG11bHRpcGxlIHZhbHVlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWcuCisgKgorICogUmV0dXJuczogVFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCBGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKKyAqICAgICAgICAgICAgICBnaXZlbiBsaXN0LgorICovCisvKioKKyAqIGdzdF90YWdfbGlzdF9nZXRfaW50X2luZGV4OgorICogQGxpc3Q6IGEgI0dzdFRhZ0xpc3QgdG8gZ2V0IHRoZSB0YWcgZnJvbQorICogQHRhZzogdGFnIHRvIHJlYWQgb3V0CisgKiBAaW5kZXg6IG51bWJlciBvZiBlbnRyeSB0byByZWFkIG91dAorICogQHZhbHVlOiAob3V0KTogbG9jYXRpb24gZm9yIHRoZSByZXN1bHQKKyAqCisgKiBHZXRzIHRoZSB2YWx1ZSB0aGF0IGlzIGF0IHRoZSBnaXZlbiBpbmRleCBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgZ2l2ZW4KKyAqIGxpc3QuCisgKgorICogUmV0dXJuczogVFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCBGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKKyAqICAgICAgICAgICAgICBnaXZlbiBsaXN0LgorICovCitUQUdfTUVSR0VfRlVOQ1MgKGludCwgZ2ludCwgVFJVRSk7CisvKioKKyAqIGdzdF90YWdfbGlzdF9nZXRfdWludDoKKyAqIEBsaXN0OiBhICNHc3RUYWdMaXN0IHRvIGdldCB0aGUgdGFnIGZyb20KKyAqIEB0YWc6IHRhZyB0byByZWFkIG91dAorICogQHZhbHVlOiAob3V0KTogbG9jYXRpb24gZm9yIHRoZSByZXN1bHQKKyAqCisgKiBDb3BpZXMgdGhlIGNvbnRlbnRzIGZvciB0aGUgZ2l2ZW4gdGFnIGludG8gdGhlIHZhbHVlLCBtZXJnaW5nIG11bHRpcGxlIHZhbHVlcworICogaW50byBvbmUgaWYgbXVsdGlwbGUgdmFsdWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHRhZy4KKyAqCisgKiBSZXR1cm5zOiBUUlVFLCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIEZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQorICogICAgICAgICAgICAgIGdpdmVuIGxpc3QuCisgKi8KKy8qKgorICogZ3N0X3RhZ19saXN0X2dldF91aW50X2luZGV4OgorICogQGxpc3Q6IGEgI0dzdFRhZ0xpc3QgdG8gZ2V0IHRoZSB0YWcgZnJvbQorICogQHRhZzogdGFnIHRvIHJlYWQgb3V0CisgKiBAaW5kZXg6IG51bWJlciBvZiBlbnRyeSB0byByZWFkIG91dAorICogQHZhbHVlOiAob3V0KTogbG9jYXRpb24gZm9yIHRoZSByZXN1bHQKKyAqCisgKiBHZXRzIHRoZSB2YWx1ZSB0aGF0IGlzIGF0IHRoZSBnaXZlbiBpbmRleCBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgZ2l2ZW4KKyAqIGxpc3QuCisgKgorICogUmV0dXJuczogVFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCBGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKKyAqICAgICAgICAgICAgICBnaXZlbiBsaXN0LgorICovCitUQUdfTUVSR0VfRlVOQ1MgKHVpbnQsIGd1aW50LCBUUlVFKTsKKy8qKgorICogZ3N0X3RhZ19saXN0X2dldF9sb25nOgorICogQGxpc3Q6IGEgI0dzdFRhZ0xpc3QgdG8gZ2V0IHRoZSB0YWcgZnJvbQorICogQHRhZzogdGFnIHRvIHJlYWQgb3V0CisgKiBAdmFsdWU6IChvdXQpOiBsb2NhdGlvbiBmb3IgdGhlIHJlc3VsdAorICoKKyAqIENvcGllcyB0aGUgY29udGVudHMgZm9yIHRoZSBnaXZlbiB0YWcgaW50byB0aGUgdmFsdWUsIG1lcmdpbmcgbXVsdGlwbGUgdmFsdWVzCisgKiBpbnRvIG9uZSBpZiBtdWx0aXBsZSB2YWx1ZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFnLgorICoKKyAqIFJldHVybnM6IFRSVUUsIGlmIGEgdmFsdWUgd2FzIGNvcGllZCwgRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCisgKiAgICAgICAgICAgICAgZ2l2ZW4gbGlzdC4KKyAqLworLyoqCisgKiBnc3RfdGFnX2xpc3RfZ2V0X2xvbmdfaW5kZXg6CisgKiBAbGlzdDogYSAjR3N0VGFnTGlzdCB0byBnZXQgdGhlIHRhZyBmcm9tCisgKiBAdGFnOiB0YWcgdG8gcmVhZCBvdXQKKyAqIEBpbmRleDogbnVtYmVyIG9mIGVudHJ5IHRvIHJlYWQgb3V0CisgKiBAdmFsdWU6IChvdXQpOiBsb2NhdGlvbiBmb3IgdGhlIHJlc3VsdAorICoKKyAqIEdldHMgdGhlIHZhbHVlIHRoYXQgaXMgYXQgdGhlIGdpdmVuIGluZGV4IGZvciB0aGUgZ2l2ZW4gdGFnIGluIHRoZSBnaXZlbgorICogbGlzdC4KKyAqCisgKiBSZXR1cm5zOiBUUlVFLCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIEZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQorICogICAgICAgICAgICAgIGdpdmVuIGxpc3QuCisgKi8KK1RBR19NRVJHRV9GVU5DUyAobG9uZywgZ2xvbmcsIFRSVUUpOworLyoqCisgKiBnc3RfdGFnX2xpc3RfZ2V0X3Vsb25nOgorICogQGxpc3Q6IGEgI0dzdFRhZ0xpc3QgdG8gZ2V0IHRoZSB0YWcgZnJvbQorICogQHRhZzogdGFnIHRvIHJlYWQgb3V0CisgKiBAdmFsdWU6IChvdXQpOiBsb2NhdGlvbiBmb3IgdGhlIHJlc3VsdAorICoKKyAqIENvcGllcyB0aGUgY29udGVudHMgZm9yIHRoZSBnaXZlbiB0YWcgaW50byB0aGUgdmFsdWUsIG1lcmdpbmcgbXVsdGlwbGUgdmFsdWVzCisgKiBpbnRvIG9uZSBpZiBtdWx0aXBsZSB2YWx1ZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFnLgorICoKKyAqIFJldHVybnM6IFRSVUUsIGlmIGEgdmFsdWUgd2FzIGNvcGllZCwgRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCisgKiAgICAgICAgICAgICAgZ2l2ZW4gbGlzdC4KKyAqLworLyoqCisgKiBnc3RfdGFnX2xpc3RfZ2V0X3Vsb25nX2luZGV4OgorICogQGxpc3Q6IGEgI0dzdFRhZ0xpc3QgdG8gZ2V0IHRoZSB0YWcgZnJvbQorICogQHRhZzogdGFnIHRvIHJlYWQgb3V0CisgKiBAaW5kZXg6IG51bWJlciBvZiBlbnRyeSB0byByZWFkIG91dAorICogQHZhbHVlOiAob3V0KTogbG9jYXRpb24gZm9yIHRoZSByZXN1bHQKKyAqCisgKiBHZXRzIHRoZSB2YWx1ZSB0aGF0IGlzIGF0IHRoZSBnaXZlbiBpbmRleCBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgZ2l2ZW4KKyAqIGxpc3QuCisgKgorICogUmV0dXJuczogVFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCBGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKKyAqICAgICAgICAgICAgICBnaXZlbiBsaXN0LgorICovCitUQUdfTUVSR0VfRlVOQ1MgKHVsb25nLCBndWxvbmcsIFRSVUUpOworLyoqCisgKiBnc3RfdGFnX2xpc3RfZ2V0X2ludDY0OgorICogQGxpc3Q6IGEgI0dzdFRhZ0xpc3QgdG8gZ2V0IHRoZSB0YWcgZnJvbQorICogQHRhZzogdGFnIHRvIHJlYWQgb3V0CisgKiBAdmFsdWU6IChvdXQpOiBsb2NhdGlvbiBmb3IgdGhlIHJlc3VsdAorICoKKyAqIENvcGllcyB0aGUgY29udGVudHMgZm9yIHRoZSBnaXZlbiB0YWcgaW50byB0aGUgdmFsdWUsIG1lcmdpbmcgbXVsdGlwbGUgdmFsdWVzCisgKiBpbnRvIG9uZSBpZiBtdWx0aXBsZSB2YWx1ZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFnLgorICoKKyAqIFJldHVybnM6IFRSVUUsIGlmIGEgdmFsdWUgd2FzIGNvcGllZCwgRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCisgKiAgICAgICAgICAgICAgZ2l2ZW4gbGlzdC4KKyAqLworLyoqCisgKiBnc3RfdGFnX2xpc3RfZ2V0X2ludDY0X2luZGV4OgorICogQGxpc3Q6IGEgI0dzdFRhZ0xpc3QgdG8gZ2V0IHRoZSB0YWcgZnJvbQorICogQHRhZzogdGFnIHRvIHJlYWQgb3V0CisgKiBAaW5kZXg6IG51bWJlciBvZiBlbnRyeSB0byByZWFkIG91dAorICogQHZhbHVlOiAob3V0KTogbG9jYXRpb24gZm9yIHRoZSByZXN1bHQKKyAqCisgKiBHZXRzIHRoZSB2YWx1ZSB0aGF0IGlzIGF0IHRoZSBnaXZlbiBpbmRleCBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgZ2l2ZW4KKyAqIGxpc3QuCisgKgorICogUmV0dXJuczogVFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCBGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKKyAqICAgICAgICAgICAgICBnaXZlbiBsaXN0LgorICovCitUQUdfTUVSR0VfRlVOQ1MgKGludDY0LCBnaW50NjQsIFRSVUUpOworLyoqCisgKiBnc3RfdGFnX2xpc3RfZ2V0X3VpbnQ2NDoKKyAqIEBsaXN0OiBhICNHc3RUYWdMaXN0IHRvIGdldCB0aGUgdGFnIGZyb20KKyAqIEB0YWc6IHRhZyB0byByZWFkIG91dAorICogQHZhbHVlOiAob3V0KTogbG9jYXRpb24gZm9yIHRoZSByZXN1bHQKKyAqCisgKiBDb3BpZXMgdGhlIGNvbnRlbnRzIGZvciB0aGUgZ2l2ZW4gdGFnIGludG8gdGhlIHZhbHVlLCBtZXJnaW5nIG11bHRpcGxlIHZhbHVlcworICogaW50byBvbmUgaWYgbXVsdGlwbGUgdmFsdWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHRhZy4KKyAqCisgKiBSZXR1cm5zOiBUUlVFLCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIEZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQorICogICAgICAgICAgICAgIGdpdmVuIGxpc3QuCisgKi8KKy8qKgorICogZ3N0X3RhZ19saXN0X2dldF91aW50NjRfaW5kZXg6CisgKiBAbGlzdDogYSAjR3N0VGFnTGlzdCB0byBnZXQgdGhlIHRhZyBmcm9tCisgKiBAdGFnOiB0YWcgdG8gcmVhZCBvdXQKKyAqIEBpbmRleDogbnVtYmVyIG9mIGVudHJ5IHRvIHJlYWQgb3V0CisgKiBAdmFsdWU6IChvdXQpOiBsb2NhdGlvbiBmb3IgdGhlIHJlc3VsdAorICoKKyAqIEdldHMgdGhlIHZhbHVlIHRoYXQgaXMgYXQgdGhlIGdpdmVuIGluZGV4IGZvciB0aGUgZ2l2ZW4gdGFnIGluIHRoZSBnaXZlbgorICogbGlzdC4KKyAqCisgKiBSZXR1cm5zOiBUUlVFLCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIEZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQorICogICAgICAgICAgICAgIGdpdmVuIGxpc3QuCisgKi8KK1RBR19NRVJHRV9GVU5DUyAodWludDY0LCBndWludDY0LCBUUlVFKTsKKy8qKgorICogZ3N0X3RhZ19saXN0X2dldF9mbG9hdDoKKyAqIEBsaXN0OiBhICNHc3RUYWdMaXN0IHRvIGdldCB0aGUgdGFnIGZyb20KKyAqIEB0YWc6IHRhZyB0byByZWFkIG91dAorICogQHZhbHVlOiAob3V0KTogbG9jYXRpb24gZm9yIHRoZSByZXN1bHQKKyAqCisgKiBDb3BpZXMgdGhlIGNvbnRlbnRzIGZvciB0aGUgZ2l2ZW4gdGFnIGludG8gdGhlIHZhbHVlLCBtZXJnaW5nIG11bHRpcGxlIHZhbHVlcworICogaW50byBvbmUgaWYgbXVsdGlwbGUgdmFsdWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHRhZy4KKyAqCisgKiBSZXR1cm5zOiBUUlVFLCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIEZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQorICogICAgICAgICAgICAgIGdpdmVuIGxpc3QuCisgKi8KKy8qKgorICogZ3N0X3RhZ19saXN0X2dldF9mbG9hdF9pbmRleDoKKyAqIEBsaXN0OiBhICNHc3RUYWdMaXN0IHRvIGdldCB0aGUgdGFnIGZyb20KKyAqIEB0YWc6IHRhZyB0byByZWFkIG91dAorICogQGluZGV4OiBudW1iZXIgb2YgZW50cnkgdG8gcmVhZCBvdXQKKyAqIEB2YWx1ZTogKG91dCk6IGxvY2F0aW9uIGZvciB0aGUgcmVzdWx0CisgKgorICogR2V0cyB0aGUgdmFsdWUgdGhhdCBpcyBhdCB0aGUgZ2l2ZW4gaW5kZXggZm9yIHRoZSBnaXZlbiB0YWcgaW4gdGhlIGdpdmVuCisgKiBsaXN0LgorICoKKyAqIFJldHVybnM6IFRSVUUsIGlmIGEgdmFsdWUgd2FzIGNvcGllZCwgRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCisgKiAgICAgICAgICAgICAgZ2l2ZW4gbGlzdC4KKyAqLworVEFHX01FUkdFX0ZVTkNTIChmbG9hdCwgZ2Zsb2F0LCBUUlVFKTsKKy8qKgorICogZ3N0X3RhZ19saXN0X2dldF9kb3VibGU6CisgKiBAbGlzdDogYSAjR3N0VGFnTGlzdCB0byBnZXQgdGhlIHRhZyBmcm9tCisgKiBAdGFnOiB0YWcgdG8gcmVhZCBvdXQKKyAqIEB2YWx1ZTogKG91dCk6IGxvY2F0aW9uIGZvciB0aGUgcmVzdWx0CisgKgorICogQ29waWVzIHRoZSBjb250ZW50cyBmb3IgdGhlIGdpdmVuIHRhZyBpbnRvIHRoZSB2YWx1ZSwgbWVyZ2luZyBtdWx0aXBsZSB2YWx1ZXMKKyAqIGludG8gb25lIGlmIG11bHRpcGxlIHZhbHVlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWcuCisgKgorICogUmV0dXJuczogVFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCBGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKKyAqICAgICAgICAgICAgICBnaXZlbiBsaXN0LgorICovCisvKioKKyAqIGdzdF90YWdfbGlzdF9nZXRfZG91YmxlX2luZGV4OgorICogQGxpc3Q6IGEgI0dzdFRhZ0xpc3QgdG8gZ2V0IHRoZSB0YWcgZnJvbQorICogQHRhZzogdGFnIHRvIHJlYWQgb3V0CisgKiBAaW5kZXg6IG51bWJlciBvZiBlbnRyeSB0byByZWFkIG91dAorICogQHZhbHVlOiAob3V0KTogbG9jYXRpb24gZm9yIHRoZSByZXN1bHQKKyAqCisgKiBHZXRzIHRoZSB2YWx1ZSB0aGF0IGlzIGF0IHRoZSBnaXZlbiBpbmRleCBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgZ2l2ZW4KKyAqIGxpc3QuCisgKgorICogUmV0dXJuczogVFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCBGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKKyAqICAgICAgICAgICAgICBnaXZlbiBsaXN0LgorICovCitUQUdfTUVSR0VfRlVOQ1MgKGRvdWJsZSwgZ2RvdWJsZSwgVFJVRSk7CisvKioKKyAqIGdzdF90YWdfbGlzdF9nZXRfcG9pbnRlcjoKKyAqIEBsaXN0OiBhICNHc3RUYWdMaXN0IHRvIGdldCB0aGUgdGFnIGZyb20KKyAqIEB0YWc6IHRhZyB0byByZWFkIG91dAorICogQHZhbHVlOiAob3V0KSAodHJhbnNmZXIgbm9uZSk6IGxvY2F0aW9uIGZvciB0aGUgcmVzdWx0CisgKgorICogQ29waWVzIHRoZSBjb250ZW50cyBmb3IgdGhlIGdpdmVuIHRhZyBpbnRvIHRoZSB2YWx1ZSwgbWVyZ2luZyBtdWx0aXBsZSB2YWx1ZXMKKyAqIGludG8gb25lIGlmIG11bHRpcGxlIHZhbHVlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWcuCisgKgorICogUmV0dXJuczogVFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCBGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKKyAqICAgICAgICAgICAgICBnaXZlbiBsaXN0LgorICovCisvKioKKyAqIGdzdF90YWdfbGlzdF9nZXRfcG9pbnRlcl9pbmRleDoKKyAqIEBsaXN0OiBhICNHc3RUYWdMaXN0IHRvIGdldCB0aGUgdGFnIGZyb20KKyAqIEB0YWc6IHRhZyB0byByZWFkIG91dAorICogQGluZGV4OiBudW1iZXIgb2YgZW50cnkgdG8gcmVhZCBvdXQKKyAqIEB2YWx1ZTogKG91dCkgKHRyYW5zZmVyIG5vbmUpOiBsb2NhdGlvbiBmb3IgdGhlIHJlc3VsdAorICoKKyAqIEdldHMgdGhlIHZhbHVlIHRoYXQgaXMgYXQgdGhlIGdpdmVuIGluZGV4IGZvciB0aGUgZ2l2ZW4gdGFnIGluIHRoZSBnaXZlbgorICogbGlzdC4KKyAqCisgKiBSZXR1cm5zOiBUUlVFLCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIEZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQorICogICAgICAgICAgICAgIGdpdmVuIGxpc3QuCisgKi8KK1RBR19NRVJHRV9GVU5DUyAocG9pbnRlciwgZ3BvaW50ZXIsICgqdmFsdWUgIT0gTlVMTCkpOworCitzdGF0aWMgaW5saW5lIGdjaGFyICoKK19nc3Rfc3RyZHVwMCAoY29uc3QgZ2NoYXIgKiBzKQoreworICBpZiAocyA9PSBOVUxMIHx8ICpzID09ICdcMCcpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgcmV0dXJuIGdfc3RyZHVwIChzKTsKK30KKworI3VuZGVmIENPUFlfRlVOQworI2RlZmluZSBDT1BZX0ZVTkMgX2dzdF9zdHJkdXAwCisKKy8qKgorICogZ3N0X3RhZ19saXN0X2dldF9zdHJpbmc6CisgKiBAbGlzdDogYSAjR3N0VGFnTGlzdCB0byBnZXQgdGhlIHRhZyBmcm9tCisgKiBAdGFnOiB0YWcgdG8gcmVhZCBvdXQKKyAqIEB2YWx1ZTogKG91dCBjYWxsZWUtYWxsb2NhdGVzKSAodHJhbnNmZXIgZnVsbCk6IGxvY2F0aW9uIGZvciB0aGUgcmVzdWx0CisgKgorICogQ29waWVzIHRoZSBjb250ZW50cyBmb3IgdGhlIGdpdmVuIHRhZyBpbnRvIHRoZSB2YWx1ZSwgcG9zc2libHkgbWVyZ2luZworICogbXVsdGlwbGUgdmFsdWVzIGludG8gb25lIGlmIG11bHRpcGxlIHZhbHVlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWcuCisgKgorICogVXNlIGdzdF90YWdfbGlzdF9nZXRfc3RyaW5nX2luZGV4IChsaXN0LCB0YWcsIDAsIHZhbHVlKSBpZiB5b3Ugd2FudAorICogdG8gcmV0cmlldmUgdGhlIGZpcnN0IHN0cmluZyBhc3NvY2lhdGVkIHdpdGggdGhpcyB0YWcgdW5tb2RpZmllZC4KKyAqCisgKiBUaGUgcmVzdWx0aW5nIHN0cmluZyBpbiBAdmFsdWUgd2lsbCBiZSBpbiBVVEYtOCBlbmNvZGluZyBhbmQgc2hvdWxkIGJlCisgKiBmcmVlZCBieSB0aGUgY2FsbGVyIHVzaW5nIGdfZnJlZSB3aGVuIG5vIGxvbmdlciBuZWVkZWQuIFNpbmNlIDAuMTAuMjQgdGhlCisgKiByZXR1cm5lZCBzdHJpbmcgaXMgYWxzbyBndWFyYW50ZWVkIHRvIGJlIG5vbi1OVUxMIGFuZCBub24tZW1wdHkuCisgKgorICogRnJlZS1mdW5jdGlvbjogZ19mcmVlCisgKgorICogUmV0dXJuczogVFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCBGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKKyAqICAgICAgICAgICAgICBnaXZlbiBsaXN0LgorICovCisvKioKKyAqIGdzdF90YWdfbGlzdF9nZXRfc3RyaW5nX2luZGV4OgorICogQGxpc3Q6IGEgI0dzdFRhZ0xpc3QgdG8gZ2V0IHRoZSB0YWcgZnJvbQorICogQHRhZzogdGFnIHRvIHJlYWQgb3V0CisgKiBAaW5kZXg6IG51bWJlciBvZiBlbnRyeSB0byByZWFkIG91dAorICogQHZhbHVlOiAob3V0IGNhbGxlZS1hbGxvY2F0ZXMpICh0cmFuc2ZlciBmdWxsKTogbG9jYXRpb24gZm9yIHRoZSByZXN1bHQKKyAqCisgKiBHZXRzIHRoZSB2YWx1ZSB0aGF0IGlzIGF0IHRoZSBnaXZlbiBpbmRleCBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgZ2l2ZW4KKyAqIGxpc3QuCisgKgorICogVGhlIHJlc3VsdGluZyBzdHJpbmcgaW4gQHZhbHVlIHdpbGwgYmUgaW4gVVRGLTggZW5jb2RpbmcgYW5kIHNob3VsZCBiZQorICogZnJlZWQgYnkgdGhlIGNhbGxlciB1c2luZyBnX2ZyZWUgd2hlbiBubyBsb25nZXIgbmVlZGVkLiBTaW5jZSAwLjEwLjI0IHRoZQorICogcmV0dXJuZWQgc3RyaW5nIGlzIGFsc28gZ3VhcmFudGVlZCB0byBiZSBub24tTlVMTCBhbmQgbm9uLWVtcHR5LgorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdfZnJlZQorICoKKyAqIFJldHVybnM6IFRSVUUsIGlmIGEgdmFsdWUgd2FzIGNvcGllZCwgRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCisgKiAgICAgICAgICAgICAgZ2l2ZW4gbGlzdC4KKyAqLworVEFHX01FUkdFX0ZVTkNTIChzdHJpbmcsIGdjaGFyICosICgqdmFsdWUgIT0gTlVMTCkpOworCisvKgorICpGSVhNRSAwLjExOiBJbnN0ZWFkIG9mIF9wZWVrIChub24tY29weSkgYW5kIF9nZXQgKGNvcHkpLCB3ZSBjb3VsZCBoYXZlCisgKiAgICAgICAgICAgIF9nZXQgKG5vbi1jb3B5KSBhbmQgX2R1cCAoY29weSkgZm9yIHN0cmluZ3MsIHNlZW1zIG1vcmUKKyAqICAgICAgICAgICAgd2lkZWx5IHVzZWQKKyAqLworLyoqCisgKiBnc3RfdGFnX2xpc3RfcGVla19zdHJpbmdfaW5kZXg6CisgKiBAbGlzdDogYSAjR3N0VGFnTGlzdCB0byBnZXQgdGhlIHRhZyBmcm9tCisgKiBAdGFnOiB0YWcgdG8gcmVhZCBvdXQKKyAqIEBpbmRleDogbnVtYmVyIG9mIGVudHJ5IHRvIHJlYWQgb3V0CisgKiBAdmFsdWU6IChvdXQpICh0cmFuc2ZlciBub25lKTogbG9jYXRpb24gZm9yIHRoZSByZXN1bHQKKyAqCisgKiBQZWVrcyBhdCB0aGUgdmFsdWUgdGhhdCBpcyBhdCB0aGUgZ2l2ZW4gaW5kZXggZm9yIHRoZSBnaXZlbiB0YWcgaW4gdGhlIGdpdmVuCisgKiBsaXN0LgorICoKKyAqIFRoZSByZXN1bHRpbmcgc3RyaW5nIGluIEB2YWx1ZSB3aWxsIGJlIGluIFVURi04IGVuY29kaW5nIGFuZCBkb2Vzbid0IG5lZWQKKyAqIHRvIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuIFRoZSByZXR1cm5lZCBzdHJpbmcgaXMgYWxzbyBndWFyYW50ZWVkIHRvCisgKiBiZSBub24tTlVMTCBhbmQgbm9uLWVtcHR5LgorICoKKyAqIFJldHVybnM6IFRSVUUsIGlmIGEgdmFsdWUgd2FzIHNldCwgRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCisgKiAgICAgICAgICAgICAgZ2l2ZW4gbGlzdC4KKyAqLworZ2Jvb2xlYW4KK2dzdF90YWdfbGlzdF9wZWVrX3N0cmluZ19pbmRleCAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCisgICAgY29uc3QgZ2NoYXIgKiB0YWcsIGd1aW50IGluZGV4LCBjb25zdCBnY2hhciAqKiB2YWx1ZSkKK3sKKyAgY29uc3QgR1ZhbHVlICp2OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVEFHX0xJU1QgKGxpc3QpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0YWcgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAodmFsdWUgIT0gTlVMTCwgRkFMU0UpOworCisgIGlmICgodiA9IGdzdF90YWdfbGlzdF9nZXRfdmFsdWVfaW5kZXggKGxpc3QsIHRhZywgaW5kZXgpKSA9PSBOVUxMKQorICAgIHJldHVybiBGQUxTRTsKKyAgKnZhbHVlID0gZ192YWx1ZV9nZXRfc3RyaW5nICh2KTsKKyAgcmV0dXJuICp2YWx1ZSAhPSBOVUxMICYmICoqdmFsdWUgIT0gJ1wwJzsKK30KKworLyoqCisgKiBnc3RfdGFnX2xpc3RfZ2V0X2RhdGU6CisgKiBAbGlzdDogYSAjR3N0VGFnTGlzdCB0byBnZXQgdGhlIHRhZyBmcm9tCisgKiBAdGFnOiB0YWcgdG8gcmVhZCBvdXQKKyAqIEB2YWx1ZTogKG91dCBjYWxsZWUtYWxsb2NhdGVzKSAodHJhbnNmZXIgZnVsbCk6IGFkZHJlc3Mgb2YgYSBHRGF0ZSBwb2ludGVyCisgKiAgICAgdmFyaWFibGUgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbnRvCisgKgorICogQ29waWVzIHRoZSBmaXJzdCBkYXRlIGZvciB0aGUgZ2l2ZW4gdGFnIGluIHRoZSB0YWdsaXN0IGludG8gdGhlIHZhcmlhYmxlCisgKiBwb2ludGVkIHRvIGJ5IEB2YWx1ZS4gRnJlZSB0aGUgZGF0ZSB3aXRoIGdfZGF0ZV9mcmVlKCkgd2hlbiBpdCBpcyBubyBsb25nZXIKKyAqIG5lZWRlZC4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnX2RhdGVfZnJlZQorICoKKyAqIFJldHVybnM6IFRSVUUsIGlmIGEgZGF0ZSB3YXMgY29waWVkLCBGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKKyAqICAgICAgICAgICAgICBnaXZlbiBsaXN0IG9yIGlmIGl0IHdhcyAjTlVMTC4KKyAqLworZ2Jvb2xlYW4KK2dzdF90YWdfbGlzdF9nZXRfZGF0ZSAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsIGNvbnN0IGdjaGFyICogdGFnLAorICAgIEdEYXRlICoqIHZhbHVlKQoreworICBHVmFsdWUgdiA9IHsgMCwgfTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1RBR19MSVNUIChsaXN0KSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAodGFnICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZhbHVlICE9IE5VTEwsIEZBTFNFKTsKKworICBpZiAoIWdzdF90YWdfbGlzdF9jb3B5X3ZhbHVlICgmdiwgbGlzdCwgdGFnKSkKKyAgICByZXR1cm4gRkFMU0U7CisgICp2YWx1ZSA9IChHRGF0ZSAqKSBnX3ZhbHVlX2R1cF9ib3hlZCAoJnYpOworICBnX3ZhbHVlX3Vuc2V0ICgmdik7CisgIHJldHVybiAoKnZhbHVlICE9IE5VTEwpOworfQorCisvKioKKyAqIGdzdF90YWdfbGlzdF9nZXRfZGF0ZV9pbmRleDoKKyAqIEBsaXN0OiBhICNHc3RUYWdMaXN0IHRvIGdldCB0aGUgdGFnIGZyb20KKyAqIEB0YWc6IHRhZyB0byByZWFkIG91dAorICogQGluZGV4OiBudW1iZXIgb2YgZW50cnkgdG8gcmVhZCBvdXQKKyAqIEB2YWx1ZTogKG91dCBjYWxsZWUtYWxsb2NhdGVzKSAodHJhbnNmZXIgZnVsbCk6IGxvY2F0aW9uIGZvciB0aGUgcmVzdWx0CisgKgorICogR2V0cyB0aGUgZGF0ZSB0aGF0IGlzIGF0IHRoZSBnaXZlbiBpbmRleCBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgZ2l2ZW4KKyAqIGxpc3QgYW5kIGNvcGllcyBpdCBpbnRvIHRoZSB2YXJpYWJsZSBwb2ludGVkIHRvIGJ5IEB2YWx1ZS4gRnJlZSB0aGUgZGF0ZQorICogd2l0aCBnX2RhdGVfZnJlZSgpIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnX2RhdGVfZnJlZQorICoKKyAqIFJldHVybnM6IFRSVUUsIGlmIGEgdmFsdWUgd2FzIGNvcGllZCwgRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCisgKiAgICAgICAgICAgICAgZ2l2ZW4gbGlzdCBvciBpZiBpdCB3YXMgI05VTEwuCisgKi8KK2dib29sZWFuCitnc3RfdGFnX2xpc3RfZ2V0X2RhdGVfaW5kZXggKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAorICAgIGNvbnN0IGdjaGFyICogdGFnLCBndWludCBpbmRleCwgR0RhdGUgKiogdmFsdWUpCit7CisgIGNvbnN0IEdWYWx1ZSAqdjsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1RBR19MSVNUIChsaXN0KSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAodGFnICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZhbHVlICE9IE5VTEwsIEZBTFNFKTsKKworICBpZiAoKHYgPSBnc3RfdGFnX2xpc3RfZ2V0X3ZhbHVlX2luZGV4IChsaXN0LCB0YWcsIGluZGV4KSkgPT0gTlVMTCkKKyAgICByZXR1cm4gRkFMU0U7CisgICp2YWx1ZSA9IChHRGF0ZSAqKSBnX3ZhbHVlX2R1cF9ib3hlZCAodik7CisgIHJldHVybiAoKnZhbHVlICE9IE5VTEwpOworfQorCisvKioKKyAqIGdzdF90YWdfbGlzdF9nZXRfZGF0ZV90aW1lOgorICogQGxpc3Q6IGEgI0dzdFRhZ0xpc3QgdG8gZ2V0IHRoZSB0YWcgZnJvbQorICogQHRhZzogdGFnIHRvIHJlYWQgb3V0CisgKiBAdmFsdWU6IChvdXQgY2FsbGVlLWFsbG9jYXRlcykgKHRyYW5zZmVyIGZ1bGwpOiBhZGRyZXNzIG9mIGEgI0dzdERhdGVUaW1lCisgKiAgICAgcG9pbnRlciB2YXJpYWJsZSB0byBzdG9yZSB0aGUgcmVzdWx0IGludG8KKyAqCisgKiBDb3BpZXMgdGhlIGZpcnN0IGRhdGV0aW1lIGZvciB0aGUgZ2l2ZW4gdGFnIGluIHRoZSB0YWdsaXN0IGludG8gdGhlIHZhcmlhYmxlCisgKiBwb2ludGVkIHRvIGJ5IEB2YWx1ZS4gVW5yZWYgdGhlIGRhdGUgd2l0aCBnc3RfZGF0ZV90aW1lX3VucmVmKCkgd2hlbgorICogaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnc3RfZGF0ZV90aW1lX3VucmVmCisgKgorICogUmV0dXJuczogVFJVRSwgaWYgYSBkYXRldGltZSB3YXMgY29waWVkLCBGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbgorICogICAgICAgICAgICAgIHRoZWdpdmVuIGxpc3Qgb3IgaWYgaXQgd2FzICNOVUxMLgorICoKKyAqIFNpbmNlOiAwLjEwLjMxCisgKi8KK2dib29sZWFuCitnc3RfdGFnX2xpc3RfZ2V0X2RhdGVfdGltZSAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsIGNvbnN0IGdjaGFyICogdGFnLAorICAgIEdzdERhdGVUaW1lICoqIHZhbHVlKQoreworICBHVmFsdWUgdiA9IHsgMCwgfTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1RBR19MSVNUIChsaXN0KSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAodGFnICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZhbHVlICE9IE5VTEwsIEZBTFNFKTsKKworICBpZiAoIWdzdF90YWdfbGlzdF9jb3B5X3ZhbHVlICgmdiwgbGlzdCwgdGFnKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19EQVRFX1RJTUUgKCZ2KSwgRkFMU0UpOworCisgICp2YWx1ZSA9IChHc3REYXRlVGltZSAqKSBnX3ZhbHVlX2R1cF9ib3hlZCAoJnYpOworICBnX3ZhbHVlX3Vuc2V0ICgmdik7CisgIHJldHVybiAoKnZhbHVlICE9IE5VTEwpOworfQorCisvKioKKyAqIGdzdF90YWdfbGlzdF9nZXRfZGF0ZV90aW1lX2luZGV4OgorICogQGxpc3Q6IGEgI0dzdFRhZ0xpc3QgdG8gZ2V0IHRoZSB0YWcgZnJvbQorICogQHRhZzogdGFnIHRvIHJlYWQgb3V0CisgKiBAaW5kZXg6IG51bWJlciBvZiBlbnRyeSB0byByZWFkIG91dAorICogQHZhbHVlOiAob3V0IGNhbGxlZS1hbGxvY2F0ZXMpICh0cmFuc2ZlciBmdWxsKTogbG9jYXRpb24gZm9yIHRoZSByZXN1bHQKKyAqCisgKiBHZXRzIHRoZSBkYXRldGltZSB0aGF0IGlzIGF0IHRoZSBnaXZlbiBpbmRleCBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgZ2l2ZW4KKyAqIGxpc3QgYW5kIGNvcGllcyBpdCBpbnRvIHRoZSB2YXJpYWJsZSBwb2ludGVkIHRvIGJ5IEB2YWx1ZS4gVW5yZWYgdGhlIGRhdGV0aW1lCisgKiB3aXRoIGdzdF9kYXRlX3RpbWVfdW5yZWYoKSB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuCisgKgorICogRnJlZS1mdW5jdGlvbjogZ3N0X2RhdGVfdGltZV91bnJlZgorICoKKyAqIFJldHVybnM6IFRSVUUsIGlmIGEgdmFsdWUgd2FzIGNvcGllZCwgRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCisgKiAgICAgICAgICAgICAgZ2l2ZW4gbGlzdCBvciBpZiBpdCB3YXMgI05VTEwuCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLworZ2Jvb2xlYW4KK2dzdF90YWdfbGlzdF9nZXRfZGF0ZV90aW1lX2luZGV4IChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKKyAgICBjb25zdCBnY2hhciAqIHRhZywgZ3VpbnQgaW5kZXgsIEdzdERhdGVUaW1lICoqIHZhbHVlKQoreworICBjb25zdCBHVmFsdWUgKnY7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19UQUdfTElTVCAobGlzdCksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRhZyAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh2YWx1ZSAhPSBOVUxMLCBGQUxTRSk7CisKKyAgaWYgKCh2ID0gZ3N0X3RhZ19saXN0X2dldF92YWx1ZV9pbmRleCAobGlzdCwgdGFnLCBpbmRleCkpID09IE5VTEwpCisgICAgcmV0dXJuIEZBTFNFOworICAqdmFsdWUgPSAoR3N0RGF0ZVRpbWUgKikgZ192YWx1ZV9kdXBfYm94ZWQgKHYpOworICByZXR1cm4gKCp2YWx1ZSAhPSBOVUxMKTsKK30KKworLyoqCisgKiBnc3RfdGFnX2xpc3RfZ2V0X2J1ZmZlcjoKKyAqIEBsaXN0OiBhICNHc3RUYWdMaXN0IHRvIGdldCB0aGUgdGFnIGZyb20KKyAqIEB0YWc6IHRhZyB0byByZWFkIG91dAorICogQHZhbHVlOiAob3V0IGNhbGxlZS1hbGxvY2F0ZXMpICh0cmFuc2ZlciBmdWxsKTogYWRkcmVzcyBvZiBhIEdzdEJ1ZmZlcgorICogICAgIHBvaW50ZXIgdmFyaWFibGUgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbnRvCisgKgorICogQ29waWVzIHRoZSBmaXJzdCBidWZmZXIgZm9yIHRoZSBnaXZlbiB0YWcgaW4gdGhlIHRhZ2xpc3QgaW50byB0aGUgdmFyaWFibGUKKyAqIHBvaW50ZWQgdG8gYnkgQHZhbHVlLiBGcmVlIHRoZSBidWZmZXIgd2l0aCBnc3RfYnVmZmVyX3VucmVmKCkgd2hlbiBpdCBpcworICogbm8gbG9uZ2VyIG5lZWRlZC4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnc3RfYnVmZmVyX3VucmVmCisgKgorICogUmV0dXJuczogVFJVRSwgaWYgYSBidWZmZXIgd2FzIGNvcGllZCwgRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCisgKiAgICAgICAgICAgICAgZ2l2ZW4gbGlzdCBvciBpZiBpdCB3YXMgI05VTEwuCisgKgorICogU2luY2U6IDAuMTAuMjMKKyAqLworZ2Jvb2xlYW4KK2dzdF90YWdfbGlzdF9nZXRfYnVmZmVyIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwgY29uc3QgZ2NoYXIgKiB0YWcsCisgICAgR3N0QnVmZmVyICoqIHZhbHVlKQoreworICBHVmFsdWUgdiA9IHsgMCwgfTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1RBR19MSVNUIChsaXN0KSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAodGFnICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZhbHVlICE9IE5VTEwsIEZBTFNFKTsKKworICBpZiAoIWdzdF90YWdfbGlzdF9jb3B5X3ZhbHVlICgmdiwgbGlzdCwgdGFnKSkKKyAgICByZXR1cm4gRkFMU0U7CisgICp2YWx1ZSA9IGdfdmFsdWVfZHVwX2JveGVkICgmdik7CisgIGdfdmFsdWVfdW5zZXQgKCZ2KTsKKyAgcmV0dXJuICgqdmFsdWUgIT0gTlVMTCk7Cit9CisKKy8qKgorICogZ3N0X3RhZ19saXN0X2dldF9idWZmZXJfaW5kZXg6CisgKiBAbGlzdDogYSAjR3N0VGFnTGlzdCB0byBnZXQgdGhlIHRhZyBmcm9tCisgKiBAdGFnOiB0YWcgdG8gcmVhZCBvdXQKKyAqIEBpbmRleDogbnVtYmVyIG9mIGVudHJ5IHRvIHJlYWQgb3V0CisgKiBAdmFsdWU6IChvdXQgY2FsbGVlLWFsbG9jYXRlcykgKHRyYW5zZmVyIGZ1bGwpOiBhZGRyZXNzIG9mIGEgR3N0QnVmZmVyCisgKiAgICAgcG9pbnRlciB2YXJpYWJsZSB0byBzdG9yZSB0aGUgcmVzdWx0IGludG8KKyAqCisgKiBHZXRzIHRoZSBidWZmZXIgdGhhdCBpcyBhdCB0aGUgZ2l2ZW4gaW5kZXggZm9yIHRoZSBnaXZlbiB0YWcgaW4gdGhlIGdpdmVuCisgKiBsaXN0IGFuZCBjb3BpZXMgaXQgaW50byB0aGUgdmFyaWFibGUgcG9pbnRlZCB0byBieSBAdmFsdWUuIEZyZWUgdGhlIGJ1ZmZlcgorICogd2l0aCBnc3RfYnVmZmVyX3VucmVmKCkgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLgorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdzdF9idWZmZXJfdW5yZWYKKyAqCisgKiBSZXR1cm5zOiBUUlVFLCBpZiBhIGJ1ZmZlciB3YXMgY29waWVkLCBGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKKyAqICAgICAgICAgICAgICBnaXZlbiBsaXN0IG9yIGlmIGl0IHdhcyAjTlVMTC4KKyAqCisgKiBTaW5jZTogMC4xMC4yMworICovCitnYm9vbGVhbgorZ3N0X3RhZ19saXN0X2dldF9idWZmZXJfaW5kZXggKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAorICAgIGNvbnN0IGdjaGFyICogdGFnLCBndWludCBpbmRleCwgR3N0QnVmZmVyICoqIHZhbHVlKQoreworICBjb25zdCBHVmFsdWUgKnY7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19UQUdfTElTVCAobGlzdCksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRhZyAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh2YWx1ZSAhPSBOVUxMLCBGQUxTRSk7CisKKyAgaWYgKCh2ID0gZ3N0X3RhZ19saXN0X2dldF92YWx1ZV9pbmRleCAobGlzdCwgdGFnLCBpbmRleCkpID09IE5VTEwpCisgICAgcmV0dXJuIEZBTFNFOworICAqdmFsdWUgPSBnX3ZhbHVlX2R1cF9ib3hlZCAodik7CisgIHJldHVybiAoKnZhbHVlICE9IE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHRhZ2xpc3QuaCBiL2dzdC9nc3R0YWdsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQwZDUyYQotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3R0YWdsaXN0LmgKQEAgLTAsMCArMSwxMDM0IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwMyBCZW5qYW1pbiBPdHRlIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KKyAqCisgKiBnc3R0YWdsaXN0Lmg6IEhlYWRlciBmb3IgdGFnIHN1cHBvcnQKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKKyNpZm5kZWYgX19HU1RfVEFHTElTVF9IX18KKyNkZWZpbmUgX19HU1RfVEFHTElTVF9IX18KKworI2luY2x1ZGUgPGdzdC9nc3RkYXRldGltZS5oPgorI2luY2x1ZGUgPGdzdC9nc3RidWZmZXIuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0c3RydWN0dXJlLmg+CisjaW5jbHVkZSA8Z3N0L2dsaWItY29tcGF0Lmg+CisKK0dfQkVHSU5fREVDTFMKKworLyoqCisgKiBHc3RUYWdNZXJnZU1vZGU6CisgKiBAR1NUX1RBR19NRVJHRV9VTkRFRklORUQ6IHVuZGVmaW5lZCBtZXJnZSBtb2RlCisgKiBAR1NUX1RBR19NRVJHRV9SRVBMQUNFX0FMTDogcmVwbGFjZSBhbGwgdGFncyAoY2xlYXIgbGlzdCBhbmQgYXBwZW5kKQorICogQEdTVF9UQUdfTUVSR0VfUkVQTEFDRTogcmVwbGFjZSB0YWdzCisgKiBAR1NUX1RBR19NRVJHRV9BUFBFTkQ6IGFwcGVuZCB0YWdzCisgKiBAR1NUX1RBR19NRVJHRV9QUkVQRU5EOiBwcmVwZW5kIHRhZ3MKKyAqIEBHU1RfVEFHX01FUkdFX0tFRVA6IGtlZXAgZXhpc3RpbmcgdGFncworICogQEdTVF9UQUdfTUVSR0VfS0VFUF9BTEw6IGtlZXAgYWxsIGV4aXN0aW5nIHRhZ3MKKyAqIEBHU1RfVEFHX01FUkdFX0NPVU5UOiB0aGUgbnVtYmVyIG9mIG1lcmdlIG1vZGVzCisgKgorICogVGhlIGRpZmZlcmVudCB0YWcgbWVyZ2luZyBtb2RlcyBhcmUgYmFzaWNhbGx5IHJlcGxhY2UsIG92ZXJ3cml0ZSBhbmQgYXBwZW5kLAorICogYnV0IHRoZXkgY2FuIGJlIHNlZW4gZnJvbSB0d28gZGlyZWN0aW9ucy4gR2l2ZW4gdHdvIHRhZ2xpc3RzOiAoQSkgdGhlIHRhZ3MKKyAqIGFscmVhZHkgaW4gdGhlIGVsZW1lbnQgYW5kIChCKSB0aGUgb25lcyB0aGF0IGFyZSBzdXBwbGllZCB0byB0aGUgZWxlbWVudCAoCisgKiBlLmcuIHZpYSBnc3RfdGFnX3NldHRlcl9tZXJnZV90YWdzKCkgLyBnc3RfdGFnX3NldHRlcl9hZGRfdGFncygpIG9yIGEKKyAqICVHU1RfRVZFTlRfVEFHKSwgaG93IGFyZSB0aGVzZSB0YWdzIG1lcmdlZD8KKyAqIEluIHRoZSB0YWJsZSBiZWxvdyB0aGlzIGlzIHNob3duIGZvciB0aGUgY2FzZXMgdGhhdCBhIHRhZyBleGlzdHMgaW4gdGhlIGxpc3QKKyAqIChBKSBvciBkb2VzIG5vdCBleGlzdHMgKCFBKSBhbmQgY29tYmluYXRpb25zIHRoZXJlb2YuCisgKgorICogPHRhYmxlIGZyYW1lPSJhbGwiIGNvbHNlcD0iMSIgcm93c2VwPSIxIj4KKyAqICAgPHRpdGxlPm1lcmdlIG1vZGU8L3RpdGxlPgorICogICA8dGdyb3VwIGNvbHM9JzUnIGFsaWduPSdsZWZ0Jz4KKyAqICAgICA8dGhlYWQ+CisgKiAgICAgICA8cm93PgorICogICAgICAgICA8ZW50cnk+bWVyZ2UgbW9kZTwvZW50cnk+CisgKiAgICAgICAgIDxlbnRyeT5BICsgQjwvZW50cnk+CisgKiAgICAgICAgIDxlbnRyeT5BICsgIUI8L2VudHJ5PgorICogICAgICAgICA8ZW50cnk+IUEgKyBCPC9lbnRyeT4KKyAqICAgICAgICAgPGVudHJ5PiFBICsgIUI8L2VudHJ5PgorICogICAgICAgPC9yb3c+CisgKiAgICAgPC90aGVhZD4KKyAqICAgICA8dGJvZHk+CisgKiAgICAgICA8cm93PgorICogICAgICAgICA8ZW50cnk+UkVQTEFDRV9BTEw8L2VudHJ5PgorICogICAgICAgICA8ZW50cnk+QjwvZW50cnk+CisgKiAgICAgICAgIDxlbnRyeT4tPC9lbnRyeT4KKyAqICAgICAgICAgPGVudHJ5PkI8L2VudHJ5PgorICogICAgICAgICA8ZW50cnk+LTwvZW50cnk+CisgKiAgICAgICA8L3Jvdz4KKyAqICAgICAgIDxyb3c+CisgKiAgICAgICAgIDxlbnRyeT5SRVBMQUNFPC9lbnRyeT4KKyAqICAgICAgICAgPGVudHJ5PkI8L2VudHJ5PgorICogICAgICAgICA8ZW50cnk+QTwvZW50cnk+CisgKiAgICAgICAgIDxlbnRyeT5CPC9lbnRyeT4KKyAqICAgICAgICAgPGVudHJ5Pi08L2VudHJ5PgorICogICAgICAgPC9yb3c+CisgKiAgICAgICA8cm93PgorICogICAgICAgICA8ZW50cnk+QVBQRU5EPC9lbnRyeT4KKyAqICAgICAgICAgPGVudHJ5PkEsIEI8L2VudHJ5PgorICogICAgICAgICA8ZW50cnk+QTwvZW50cnk+CisgKiAgICAgICAgIDxlbnRyeT5CPC9lbnRyeT4KKyAqICAgICAgICAgPGVudHJ5Pi08L2VudHJ5PgorICogICAgICAgPC9yb3c+CisgKiAgICAgICA8cm93PgorICogICAgICAgICA8ZW50cnk+UFJFUEVORDwvZW50cnk+CisgKiAgICAgICAgIDxlbnRyeT5CLCBBPC9lbnRyeT4KKyAqICAgICAgICAgPGVudHJ5PkE8L2VudHJ5PgorICogICAgICAgICA8ZW50cnk+QjwvZW50cnk+CisgKiAgICAgICAgIDxlbnRyeT4tPC9lbnRyeT4KKyAqICAgICAgIDwvcm93PgorICogICAgICAgPHJvdz4KKyAqICAgICAgICAgPGVudHJ5PktFRVA8L2VudHJ5PgorICogICAgICAgICA8ZW50cnk+QTwvZW50cnk+CisgKiAgICAgICAgIDxlbnRyeT5BPC9lbnRyeT4KKyAqICAgICAgICAgPGVudHJ5PkI8L2VudHJ5PgorICogICAgICAgICA8ZW50cnk+LTwvZW50cnk+CisgKiAgICAgICA8L3Jvdz4KKyAqICAgICAgIDxyb3c+CisgKiAgICAgICAgIDxlbnRyeT5LRUVQX0FMTDwvZW50cnk+CisgKiAgICAgICAgIDxlbnRyeT5BPC9lbnRyeT4KKyAqICAgICAgICAgPGVudHJ5PkE8L2VudHJ5PgorICogICAgICAgICA8ZW50cnk+LTwvZW50cnk+CisgKiAgICAgICAgIDxlbnRyeT4tPC9lbnRyeT4KKyAqICAgICAgIDwvcm93PgorICogICAgIDwvdGJvZHk+CisgKiAgIDwvdGdyb3VwPgorICogPC90YWJsZT4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgR1NUX1RBR19NRVJHRV9VTkRFRklORUQsCisgIEdTVF9UQUdfTUVSR0VfUkVQTEFDRV9BTEwsCisgIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwKKyAgR1NUX1RBR19NRVJHRV9BUFBFTkQsCisgIEdTVF9UQUdfTUVSR0VfUFJFUEVORCwKKyAgR1NUX1RBR19NRVJHRV9LRUVQLAorICBHU1RfVEFHX01FUkdFX0tFRVBfQUxMLAorICAvKiBhZGQgbW9yZSAqLworICBHU1RfVEFHX01FUkdFX0NPVU5UCit9IEdzdFRhZ01lcmdlTW9kZTsKKworI2RlZmluZSBHU1RfVEFHX01PREVfSVNfVkFMSUQobW9kZSkgICAgICgoKG1vZGUpID4gR1NUX1RBR19NRVJHRV9VTkRFRklORUQpICYmICgobW9kZSkgPCBHU1RfVEFHX01FUkdFX0NPVU5UKSkKKworLyoqCisgKiBHc3RUYWdGbGFnOgorICogQEdTVF9UQUdfRkxBR19VTkRFRklORUQ6IHVuZGVmaW5lZCBmbGFnCisgKiBAR1NUX1RBR19GTEFHX01FVEE6IHRhZyBpcyBtZXRhIGRhdGEKKyAqIEBHU1RfVEFHX0ZMQUdfRU5DT0RFRDogdGFnIGlzIGVuY29kZWQKKyAqIEBHU1RfVEFHX0ZMQUdfREVDT0RFRDogdGFnIGlzIGRlY29kZWQKKyAqIEBHU1RfVEFHX0ZMQUdfQ09VTlQ6IG51bWJlciBvZiB0YWcgZmxhZ3MKKyAqCisgKiBFeHRyYSB0YWcgZmxhZ3MgdXNlZCB3aGVuIHJlZ2lzdGVyaW5nIHRhZ3MuCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIEdTVF9UQUdfRkxBR19VTkRFRklORUQsCisgIEdTVF9UQUdfRkxBR19NRVRBLAorICBHU1RfVEFHX0ZMQUdfRU5DT0RFRCwKKyAgR1NUX1RBR19GTEFHX0RFQ09ERUQsCisgIEdTVF9UQUdfRkxBR19DT1VOVAorfSBHc3RUYWdGbGFnOworCisjZGVmaW5lIEdTVF9UQUdfRkxBR19JU19WQUxJRChmbGFnKSAgICAgKCgoZmxhZykgPiBHU1RfVEFHX0ZMQUdfVU5ERUZJTkVEKSAmJiAoKGZsYWcpIDwgR1NUX1RBR19GTEFHX0NPVU5UKSkKKworLyogRklYTUUgMC4xMTogRG9uJ3QgdHlwZWRlZiBHc3RUYWdMaXN0IHRvIGJlIGEgR3N0U3RydWN0dXJlLCB0aGV5J3JlCisgKiAgICAgICAgICAgICBpbnRlcm5hbGx5IHRoZSBzYW1lIGJ1dCBub3QgZnJvbSBhbiBBUEkgcG9pbnQgb2Ygdmlldy4KKyAqICAgICAgICAgICAgIFNlZSBidWcgIzUxODkzNC4KKyAqLworLyoqCisgKiBHc3RUYWdMaXN0OgorICoKKyAqIE9wYXF1ZSAjR3N0VGFnTGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqLworI2lmZGVmIF9GT09MX0dUS19ET0NfCit0eXBlZGVmIHN0cnVjdCBfR3N0VGFnTGlzdCBHc3RUYWdMaXN0OworI2Vsc2UKKyNpZmRlZiBJTl9HT0JKRUNUX0lOVFJPU1BFQ1RJT04KK3R5cGVkZWYgc3RydWN0IF9Hc3RUYWdMaXN0IEdzdFRhZ0xpc3Q7CisjZWxzZQordHlwZWRlZiBHc3RTdHJ1Y3R1cmUgR3N0VGFnTGlzdDsKKyNlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgR1NUX1RBR19MSVNUKHgpICAgICAgICgoR3N0VGFnTGlzdCAqKSAoeCkpCisjZGVmaW5lIEdTVF9JU19UQUdfTElTVCh4KSAgICAoKHgpICE9IE5VTEwgJiYgZ3N0X2lzX3RhZ19saXN0IChHU1RfVEFHX0xJU1QgKHgpKSkKKyNkZWZpbmUgR1NUX1RZUEVfVEFHX0xJU1QgICAgIChnc3RfdGFnX2xpc3RfZ2V0X3R5cGUgKCkpCisKKy8qKgorICogR3N0VGFnRm9yZWFjaEZ1bmM6CisgKiBAbGlzdDogdGhlICNHc3RUYWdMaXN0CisgKiBAdGFnOiBhIG5hbWUgb2YgYSB0YWcgaW4gQGxpc3QKKyAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YQorICoKKyAqIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBpbiBnc3RfdGFnX2xpc3RfZm9yZWFjaCgpLiBUaGUgZnVuY3Rpb24gbWF5CisgKiBub3QgbW9kaWZ5IHRoZSB0YWcgbGlzdC4KKyAqLwordHlwZWRlZiB2b2lkICgqR3N0VGFnRm9yZWFjaEZ1bmMpIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIHRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgIHVzZXJfZGF0YSk7CisKKy8qKgorICogR3N0VGFnTWVyZ2VGdW5jOgorICogQGRlc3Q6IHRoZSBkZXN0aW5hdGlvbiAjR1ZhbHVlCisgKiBAc3JjOiB0aGUgc291cmNlICNHVmFsdWUKKyAqCisgKiBBIGZ1bmN0aW9uIGZvciBtZXJnaW5nIG11bHRpcGxlIHZhbHVlcyBvZiBhIHRhZyB1c2VkIHdoZW4gcmVnaXN0ZXJpbmcKKyAqIHRhZ3MuCisgKi8KK3R5cGVkZWYgdm9pZCAoKiBHc3RUYWdNZXJnZUZ1bmMpIChHVmFsdWUgKmRlc3QsIGNvbnN0IEdWYWx1ZSAqc3JjKTsKKworR1R5cGUgICAgICAgIGdzdF90YWdfbGlzdF9nZXRfdHlwZSAodm9pZCk7CisKKy8qIHRhZyByZWdpc3RyYXRpb24gKi8KK3ZvaWQgICAgICAgICBnc3RfdGFnX3JlZ2lzdGVyICAgICAgKGNvbnN0IGdjaGFyICAgICAqIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUYWdGbGFnICAgICAgICBmbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1R5cGUgICAgICAgICAgICAgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAqIG5pY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgKiBibHVyYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFRhZ01lcmdlRnVuYyAgIGZ1bmMpOworCisvKiBzb21lIGRlZmF1bHQgbWVyZ2luZyBmdW5jdGlvbnMgKi8KK3ZvaWQgICAgICBnc3RfdGFnX21lcmdlX3VzZV9maXJzdCAgICAgICAgICAoR1ZhbHVlICogZGVzdCwgY29uc3QgR1ZhbHVlICogc3JjKTsKK3ZvaWQgICAgICBnc3RfdGFnX21lcmdlX3N0cmluZ3Nfd2l0aF9jb21tYSAoR1ZhbHVlICogZGVzdCwgY29uc3QgR1ZhbHVlICogc3JjKTsKKworLyogYmFzaWMgdGFnIHN1cHBvcnQgKi8KK2dib29sZWFuICAgICAgICAgICAgICAgZ3N0X3RhZ19leGlzdHMgICAgICAgICAgKGNvbnN0IGdjaGFyICogdGFnKTsKK0dUeXBlICAgICAgICAgICAgICAgICAgZ3N0X3RhZ19nZXRfdHlwZSAgICAgICAgKGNvbnN0IGdjaGFyICogdGFnKTsKK2NvbnN0IGdjaGFyICogICAgICAgICAgZ3N0X3RhZ19nZXRfbmljayAgICAgICAgKGNvbnN0IGdjaGFyICogdGFnKTsKK2NvbnN0IGdjaGFyICogICAgICAgICAgZ3N0X3RhZ19nZXRfZGVzY3JpcHRpb24gKGNvbnN0IGdjaGFyICogdGFnKTsKK0dzdFRhZ0ZsYWcgICAgICAgICAgICAgZ3N0X3RhZ19nZXRfZmxhZyAgICAgICAgKGNvbnN0IGdjaGFyICogdGFnKTsKK2dib29sZWFuICAgICAgICAgICAgICAgZ3N0X3RhZ19pc19maXhlZCAgICAgICAgKGNvbnN0IGdjaGFyICogdGFnKTsKKworLyogdGFnIGxpc3RzICovCitHc3RUYWdMaXN0ICogZ3N0X3RhZ19saXN0X25ldyAgICAgICAgICAgICAgICh2b2lkKTsKK0dzdFRhZ0xpc3QgKiBnc3RfdGFnX2xpc3RfbmV3X2Z1bGwgICAgICAgICAgKGNvbnN0IGdjaGFyICogdGFnLCAuLi4pOworR3N0VGFnTGlzdCAqIGdzdF90YWdfbGlzdF9uZXdfZnVsbF92YWxpc3QgICAodmFfbGlzdCB2YXJfYXJncyk7CisKK2dib29sZWFuICAgICBnc3RfaXNfdGFnX2xpc3QgICAgICAgICAgICAgICAgKGdjb25zdHBvaW50ZXIgcCk7CitHc3RUYWdMaXN0ICogZ3N0X3RhZ19saXN0X2NvcHkgICAgICAgICAgICAgIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCk7CitnYm9vbGVhbiAgICAgZ3N0X3RhZ19saXN0X2lzX2VtcHR5ICAgICAgICAgIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCk7Cit2b2lkICAgICAgICAgZ3N0X3RhZ19saXN0X2luc2VydCAgICAgICAgICAgIChHc3RUYWdMaXN0ICAgICAgICogaW50bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdzdFRhZ0xpc3QgKiBmcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0VGFnTWVyZ2VNb2RlICAgIG1vZGUpOworR3N0VGFnTGlzdCAqIGdzdF90YWdfbGlzdF9tZXJnZSAgICAgICAgICAgICAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0VGFnTWVyZ2VNb2RlICAgIG1vZGUpOwordm9pZCAgICAgICAgIGdzdF90YWdfbGlzdF9mcmVlICAgICAgICAgICAgICAoR3N0VGFnTGlzdCAgICAgICAqIGxpc3QpOworZ3VpbnQgICAgICAgIGdzdF90YWdfbGlzdF9nZXRfdGFnX3NpemUgICAgICAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogdGFnKTsKK3ZvaWQgICAgICAgICBnc3RfdGFnX2xpc3RfYWRkICAgICAgICAgICAgICAgKEdzdFRhZ0xpc3QgICAgICAgKiBsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0VGFnTWVyZ2VNb2RlICAgIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSBHX0dOVUNfTlVMTF9URVJNSU5BVEVEOwordm9pZCAgICAgICAgIGdzdF90YWdfbGlzdF9hZGRfdmFsdWVzICAgICAgICAoR3N0VGFnTGlzdCAgICAgICAqIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUYWdNZXJnZU1vZGUgICAgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pIEdfR05VQ19OVUxMX1RFUk1JTkFURUQ7Cit2b2lkICAgICAgICAgZ3N0X3RhZ19saXN0X2FkZF92YWxpc3QgICAgICAgIChHc3RUYWdMaXN0ICAgICAgICogbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFRhZ01lcmdlTW9kZSAgICBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIHRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgICAgICAgIHZhcl9hcmdzKTsKK3ZvaWQgICAgICAgICBnc3RfdGFnX2xpc3RfYWRkX3ZhbGlzdF92YWx1ZXMgKEdzdFRhZ0xpc3QgICAgICAgKiBsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0VGFnTWVyZ2VNb2RlICAgIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCAgICAgICAgICAgIHZhcl9hcmdzKTsKK3ZvaWQgICAgICAgICBnc3RfdGFnX2xpc3RfYWRkX3ZhbHVlICAgICAgICAgKEdzdFRhZ0xpc3QgICAgICAgKiBsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0VGFnTWVyZ2VNb2RlICAgIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICAgICAqIHZhbHVlKTsKK3ZvaWQgICAgICAgICBnc3RfdGFnX2xpc3RfcmVtb3ZlX3RhZyAgICAgICAgKEdzdFRhZ0xpc3QgICAgICAgKiBsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIHRhZyk7Cit2b2lkICAgICAgICAgZ3N0X3RhZ19saXN0X2ZvcmVhY2ggICAgICAgICAgIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFRhZ0ZvcmVhY2hGdW5jICBmdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgIHVzZXJfZGF0YSk7CisKK2NvbnN0IEdWYWx1ZSAqCisgICAgICAgICAgICAgZ3N0X3RhZ19saXN0X2dldF92YWx1ZV9pbmRleCAgIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgaW5kZXgpOworZ2Jvb2xlYW4gICAgIGdzdF90YWdfbGlzdF9jb3B5X3ZhbHVlICAgICAgICAoR1ZhbHVlICAgICAgICAgICAqIGRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcpOworCisvKiBzaW1wbGlmaWNhdGlvbnMgKEZJWE1FOiBkbyB3ZSB3YW50IHRoZW0/KSAqLworZ2Jvb2xlYW4gICAgIGdzdF90YWdfbGlzdF9nZXRfY2hhciAgICAgICAgICAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIgICAgICAgICAgICAqIHZhbHVlKTsKK2dib29sZWFuICAgICBnc3RfdGFnX2xpc3RfZ2V0X2NoYXJfaW5kZXggICAgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIHRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyICAgICAgICAgICAgKiB2YWx1ZSk7CitnYm9vbGVhbiAgICAgZ3N0X3RhZ19saXN0X2dldF91Y2hhciAgICAgICAgIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWNoYXIgICAgICAgICAgICogdmFsdWUpOworZ2Jvb2xlYW4gICAgIGdzdF90YWdfbGlzdF9nZXRfdWNoYXJfaW5kZXggICAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgIGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VjaGFyICAgICAgICAgICAqIHZhbHVlKTsKK2dib29sZWFuICAgICBnc3RfdGFnX2xpc3RfZ2V0X2Jvb2xlYW4gICAgICAgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIHRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICAgKiB2YWx1ZSk7CitnYm9vbGVhbiAgICAgZ3N0X3RhZ19saXN0X2dldF9ib29sZWFuX2luZGV4IChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgICogdmFsdWUpOworZ2Jvb2xlYW4gICAgIGdzdF90YWdfbGlzdF9nZXRfaW50ICAgICAgICAgICAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgICAqIHZhbHVlKTsKK2dib29sZWFuICAgICBnc3RfdGFnX2xpc3RfZ2V0X2ludF9pbmRleCAgICAgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIHRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgICAgKiB2YWx1ZSk7CitnYm9vbGVhbiAgICAgZ3N0X3RhZ19saXN0X2dldF91aW50ICAgICAgICAgIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICogdmFsdWUpOworZ2Jvb2xlYW4gICAgIGdzdF90YWdfbGlzdF9nZXRfdWludF9pbmRleCAgICAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgIGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAqIHZhbHVlKTsKK2dib29sZWFuICAgICBnc3RfdGFnX2xpc3RfZ2V0X2xvbmcgICAgICAgICAgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIHRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb25nICAgICAgICAgICAgKiB2YWx1ZSk7CitnYm9vbGVhbiAgICAgZ3N0X3RhZ19saXN0X2dldF9sb25nX2luZGV4ICAgIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9uZyAgICAgICAgICAgICogdmFsdWUpOworZ2Jvb2xlYW4gICAgIGdzdF90YWdfbGlzdF9nZXRfdWxvbmcgICAgICAgICAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vsb25nICAgICAgICAgICAqIHZhbHVlKTsKK2dib29sZWFuICAgICBnc3RfdGFnX2xpc3RfZ2V0X3Vsb25nX2luZGV4ICAgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIHRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1bG9uZyAgICAgICAgICAgKiB2YWx1ZSk7CitnYm9vbGVhbiAgICAgZ3N0X3RhZ19saXN0X2dldF9pbnQ2NCAgICAgICAgIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50NjQgICAgICAgICAgICogdmFsdWUpOworZ2Jvb2xlYW4gICAgIGdzdF90YWdfbGlzdF9nZXRfaW50NjRfaW5kZXggICAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgIGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0ICAgICAgICAgICAqIHZhbHVlKTsKK2dib29sZWFuICAgICBnc3RfdGFnX2xpc3RfZ2V0X3VpbnQ2NCAgICAgICAgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIHRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgICAgICAgICAgKiB2YWx1ZSk7CitnYm9vbGVhbiAgICAgZ3N0X3RhZ19saXN0X2dldF91aW50NjRfaW5kZXggIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDY0ICAgICAgICAgICogdmFsdWUpOworZ2Jvb2xlYW4gICAgIGdzdF90YWdfbGlzdF9nZXRfZmxvYXQgICAgICAgICAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Zsb2F0ICAgICAgICAgICAqIHZhbHVlKTsKK2dib29sZWFuICAgICBnc3RfdGFnX2xpc3RfZ2V0X2Zsb2F0X2luZGV4ICAgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIHRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdmbG9hdCAgICAgICAgICAgKiB2YWx1ZSk7CitnYm9vbGVhbiAgICAgZ3N0X3RhZ19saXN0X2dldF9kb3VibGUgICAgICAgIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZG91YmxlICAgICAgICAgICogdmFsdWUpOworZ2Jvb2xlYW4gICAgIGdzdF90YWdfbGlzdF9nZXRfZG91YmxlX2luZGV4ICAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgIGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSAgICAgICAgICAqIHZhbHVlKTsKK2dib29sZWFuICAgICBnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZyAgICAgICAgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIHRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyICAgICAgICAgICAqKiB2YWx1ZSk7CitnYm9vbGVhbiAgICAgZ3N0X3RhZ19saXN0X2dldF9zdHJpbmdfaW5kZXggIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY2hhciAgICAgICAgICAgKiogdmFsdWUpOworZ2Jvb2xlYW4gICAgIGdzdF90YWdfbGlzdF9wZWVrX3N0cmluZ19pbmRleCAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgIGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICoqIHZhbHVlKTsKK2dib29sZWFuICAgICBnc3RfdGFnX2xpc3RfZ2V0X3BvaW50ZXIgICAgICAgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIHRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgKiB2YWx1ZSk7CitnYm9vbGVhbiAgICAgZ3N0X3RhZ19saXN0X2dldF9wb2ludGVyX2luZGV4IChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICogdmFsdWUpOworZ2Jvb2xlYW4gICAgIGdzdF90YWdfbGlzdF9nZXRfZGF0ZSAgICAgICAgICAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RhdGUgICAgICAgICAgICoqIHZhbHVlKTsKK2dib29sZWFuICAgICBnc3RfdGFnX2xpc3RfZ2V0X2RhdGVfaW5kZXggICAgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIHRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEYXRlICAgICAgICAgICAqKiB2YWx1ZSk7CitnYm9vbGVhbiAgICAgZ3N0X3RhZ19saXN0X2dldF9kYXRlX3RpbWUgICAgIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3REYXRlVGltZSAgICAgKiogdmFsdWUpOworZ2Jvb2xlYW4gICAgIGdzdF90YWdfbGlzdF9nZXRfZGF0ZV90aW1lX2luZGV4IChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3REYXRlVGltZSAgICAgKiogdmFsdWUpOworZ2Jvb2xlYW4gICAgIGdzdF90YWdfbGlzdF9nZXRfYnVmZmVyICAgICAgICAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyICAgICAgICoqIHZhbHVlKTsKK2dib29sZWFuICAgICBnc3RfdGFnX2xpc3RfZ2V0X2J1ZmZlcl9pbmRleCAgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIHRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEJ1ZmZlciAgICAgICAqKiB2YWx1ZSk7CisKKy8qIEdTdHJlYW1lciBjb3JlIHRhZ3MgKi8KKy8qKgorICogR1NUX1RBR19USVRMRToKKyAqCisgKiBjb21tb25seSB1c2VkIHRpdGxlIChzdHJpbmcpCisgKgorICogVGhlIHRpdGxlIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQsIGUuZy4gJ1RoZSBEb2xsIEhvdXNlJworICovCisjZGVmaW5lIEdTVF9UQUdfVElUTEUgICAgICAgICAgICAgICAgICAidGl0bGUiCisvKioKKyAqIEdTVF9UQUdfVElUTEVfU09SVE5BTUU6CisgKgorICogY29tbW9ubHkgdXNlZCB0aXRsZSwgYXMgdXNlZCBmb3Igc29ydGluZyAoc3RyaW5nKQorICoKKyAqIFRoZSB0aXRsZSBhcyBpdCBzaG91bGQgYmUgc29ydGVkLCBlLmcuICdEb2xsIEhvdXNlLCBUaGUnCisgKgorICogU2luY2U6IDAuMTAuMTUKKyAqLworI2RlZmluZSBHU1RfVEFHX1RJVExFX1NPUlROQU1FICAgICAgICAgInRpdGxlLXNvcnRuYW1lIgorLyoqCisgKiBHU1RfVEFHX0FSVElTVDoKKyAqCisgKiBwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgKHN0cmluZykKKyAqCisgKiBUaGUgYXJ0aXN0IG5hbWUgYXMgaXQgc2hvdWxkIGJlIGRpc3BsYXllZCwgZS5nLiAnSmltaSBIZW5kcml4JyBvcgorICogJ1RoZSBHdWl0YXIgSGVyb2VzJworICovCisjZGVmaW5lIEdTVF9UQUdfQVJUSVNUICAgICAgICAgICAgICAgICAiYXJ0aXN0IgorLyoqCisgKiBHU1RfVEFHX0FSVElTVF9TT1JUTkFNRToKKyAqCisgKiBwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcsIGFzIHVzZWQgZm9yIHNvcnRpbmcgKHN0cmluZykKKyAqCisgKiBUaGUgYXJ0aXN0IG5hbWUgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCwgZS5nLiAnSGVuZHJpeCwgSmltaScgb3IKKyAqICdHdWl0YXIgSGVyb2VzLCBUaGUnCisgKgorICogU2luY2U6IDAuMTAuMTUKKyAqLworLyogRklYTUUgMC4xMTogY2hhbmdlIHRvICJhcnRpc3Qtc29ydG5hbWUiICovCisjZGVmaW5lIEdTVF9UQUdfQVJUSVNUX1NPUlROQU1FICAgICAgICAibXVzaWNicmFpbnotc29ydG5hbWUiCisvKioKKyAqIEdTVF9UQUdfQUxCVU06CisgKgorICogYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgKHN0cmluZykKKyAqCisgKiBUaGUgYWxidW0gbmFtZSBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkLCBlLmcuICdUaGUgSmF6eiBHdWl0YXInCisgKi8KKyNkZWZpbmUgR1NUX1RBR19BTEJVTSAgICAgICAgICAgICAgICAgICJhbGJ1bSIKKy8qKgorICogR1NUX1RBR19BTEJVTV9TT1JUTkFNRToKKyAqCisgKiBhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSwgYXMgdXNlZCBmb3Igc29ydGluZyAoc3RyaW5nKQorICoKKyAqIFRoZSBhbGJ1bSBuYW1lIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQsIGUuZy4gJ0phenogR3VpdGFyLCBUaGUnCisgKgorICogU2luY2U6IDAuMTAuMTUKKyAqLworI2RlZmluZSBHU1RfVEFHX0FMQlVNX1NPUlROQU1FICAgICAgICAgImFsYnVtLXNvcnRuYW1lIgorLyoqCisgKiBHU1RfVEFHX0FMQlVNX0FSVElTVDoKKyAqCisgKiBUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQuCisgKgorICogU2luY2U6IDAuMTAuMjUKKyAqLworI2RlZmluZSBHU1RfVEFHX0FMQlVNX0FSVElTVCAgICAgICAgICAgImFsYnVtLWFydGlzdCIKKy8qKgorICogR1NUX1RBR19BTEJVTV9BUlRJU1RfU09SVE5BTUU6CisgKgorICogVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkLgorICoKKyAqIFNpbmNlOiAwLjEwLjI1CisgKi8KKyNkZWZpbmUgR1NUX1RBR19BTEJVTV9BUlRJU1RfU09SVE5BTUUgICJhbGJ1bS1hcnRpc3Qtc29ydG5hbWUiCisvKioKKyAqIEdTVF9UQUdfQ09NUE9TRVI6CisgKgorICogcGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nIChzdHJpbmcpCisgKgorICogU2luY2U6IDAuMTAuMTUKKyAqLworI2RlZmluZSBHU1RfVEFHX0NPTVBPU0VSICAgICAgICAgICAgICAgImNvbXBvc2VyIgorLyoqCisgKiBHU1RfVEFHX0RBVEU6CisgKgorICogZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoI0dEYXRlIHN0cnVjdHVyZSkKKyAqLworI2RlZmluZSBHU1RfVEFHX0RBVEUgICAgICAgICAgICAgICAgICAgImRhdGUiCisvKioKKyAqIEdTVF9UQUdfREFURV9USU1FOgorICoKKyAqIGRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKCNHc3REYXRlVGltZSBzdHJ1Y3R1cmUpCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLworI2RlZmluZSBHU1RfVEFHX0RBVEVfVElNRSAgICAgICAgICAgICAgImRhdGV0aW1lIgorLyoqCisgKiBHU1RfVEFHX0dFTlJFOgorICoKKyAqIGdlbnJlIHRoaXMgZGF0YSBiZWxvbmdzIHRvIChzdHJpbmcpCisgKi8KKyNkZWZpbmUgR1NUX1RBR19HRU5SRSAgICAgICAgICAgICAgICAgICJnZW5yZSIKKy8qKgorICogR1NUX1RBR19DT01NRU5UOgorICoKKyAqIGZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIChzdHJpbmcpCisgKi8KKyNkZWZpbmUgR1NUX1RBR19DT01NRU5UICAgICAgICAgICAgICAgICJjb21tZW50IgorLyoqCisgKiBHU1RfVEFHX0VYVEVOREVEX0NPTU1FTlQ6CisgKgorICoga2V5L3ZhbHVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSAoc3RyaW5nKQorICoKKyAqIE11c3QgYmUgaW4gdGhlIGZvcm0gb2YgJ2tleT1jb21tZW50JyBvcgorICogJ2tleVtsY109Y29tbWVudCcgd2hlcmUgJ2xjJyBpcyBhbiBJU08tNjM5CisgKiBsYW5ndWFnZSBjb2RlLgorICoKKyAqIFRoaXMgdGFnIGlzIHVzZWQgZm9yIHVua25vd24gVm9yYmlzIGNvbW1lbnQgdGFncywKKyAqIHVua25vd24gQVBFIHRhZ3MgYW5kIGNlcnRhaW4gSUQzdjIgY29tbWVudCBmaWVsZHMuCisgKgorICogU2luY2U6IDAuMTAuMTAKKyAqLworI2RlZmluZSBHU1RfVEFHX0VYVEVOREVEX0NPTU1FTlQgICAgICAgImV4dGVuZGVkLWNvbW1lbnQiCisvKioKKyAqIEdTVF9UQUdfVFJBQ0tfTlVNQkVSOgorICoKKyAqIHRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uICh1bnNpZ25lZCBpbnRlZ2VyKQorICovCisjZGVmaW5lIEdTVF9UQUdfVFJBQ0tfTlVNQkVSICAgICAgICAgICAidHJhY2stbnVtYmVyIgorLyoqCisgKiBHU1RfVEFHX1RSQUNLX0NPVU5UOgorICoKKyAqIGNvdW50IG9mIHRyYWNrcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIHRyYWNrIGJlbG9uZ3MgdG8gKHVuc2lnbmVkIGludGVnZXIpCisgKi8KKyNkZWZpbmUgR1NUX1RBR19UUkFDS19DT1VOVCAgICAgICAgICAgICJ0cmFjay1jb3VudCIKKy8qKgorICogR1NUX1RBR19BTEJVTV9WT0xVTUVfTlVNQkVSOgorICoKKyAqIGRpc2MgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24gKHVuc2lnbmVkIGludGVnZXIpCisgKi8KKyNkZWZpbmUgR1NUX1RBR19BTEJVTV9WT0xVTUVfTlVNQkVSICAgICJhbGJ1bS1kaXNjLW51bWJlciIKKy8qKgorICogR1NUX1RBR19BTEJVTV9WT0xVTUVfQ09VTlQ6CisgKgorICogY291bnQgb2YgZGlzY3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyBkaXNjIGJlbG9uZ3MgdG8gKHVuc2lnbmVkIGludGVnZXIpCisgKi8KKyNkZWZpbmUgR1NUX1RBR19BTEJVTV9WT0xVTUVfQ09VTlQgICAgImFsYnVtLWRpc2MtY291bnQiCisvKioKKyAqIEdTVF9UQUdfTE9DQVRJT046CisgKgorICogT3JpZ2luIG9mIG1lZGlhIGFzIGEgVVJJIChsb2NhdGlvbiwgd2hlcmUgdGhlIG9yaWdpbmFsIG9mIHRoZSBmaWxlIG9yIHN0cmVhbQorICogaXMgaG9zdGVkKSAoc3RyaW5nKQorICovCisjZGVmaW5lIEdTVF9UQUdfTE9DQVRJT04gICAgICAgICAgICAgICAibG9jYXRpb24iCisvKioKKyAqIEdTVF9UQUdfSE9NRVBBR0U6CisgKgorICogSG9tZXBhZ2UgZm9yIHRoaXMgbWVkaWEgKGkuZS4gYXJ0aXN0IG9yIG1vdmllIGhvbWVwYWdlKSAoc3RyaW5nKQorICoKKyAqIFNpbmNlOiAwLjEwLjIzCisgKi8KKyNkZWZpbmUgR1NUX1RBR19IT01FUEFHRSAgICAgICAgICAgICAgICJob21lcGFnZSIKKy8qKgorICogR1NUX1RBR19ERVNDUklQVElPTjoKKyAqCisgKiBzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEgKHN0cmluZykKKyAqLworI2RlZmluZSBHU1RfVEFHX0RFU0NSSVBUSU9OICAgICAgICAgICAgImRlc2NyaXB0aW9uIgorLyoqCisgKiBHU1RfVEFHX1ZFUlNJT046CisgKgorICogdmVyc2lvbiBvZiB0aGlzIGRhdGEgKHN0cmluZykKKyAqLworI2RlZmluZSBHU1RfVEFHX1ZFUlNJT04gICAgICAgICAgICAgICAgInZlcnNpb24iCisvKioKKyAqIEdTVF9UQUdfSVNSQzoKKyAqCisgKiBJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8gKHN0cmluZykKKyAqLworI2RlZmluZSBHU1RfVEFHX0lTUkMgICAgICAgICAgICAgICAgICAgImlzcmMiCisvKioKKyAqIEdTVF9UQUdfT1JHQU5JWkFUSU9OOgorICoKKyAqIG9yZ2FuaXphdGlvbiAoc3RyaW5nKQorICovCisjZGVmaW5lIEdTVF9UQUdfT1JHQU5JWkFUSU9OICAgICAgICAgICAib3JnYW5pemF0aW9uIgorLyoqCisgKiBHU1RfVEFHX0NPUFlSSUdIVDoKKyAqCisgKiBjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIChzdHJpbmcpCisgKi8KKyNkZWZpbmUgR1NUX1RBR19DT1BZUklHSFQgICAgICAgICAgICAgICJjb3B5cmlnaHQiCisvKioKKyAqIEdTVF9UQUdfQ09QWVJJR0hUX1VSSToKKyAqCisgKiBVUkkgdG8gbG9jYXRpb24gd2hlcmUgY29weXJpZ2h0IGRldGFpbHMgY2FuIGJlIGZvdW5kIChzdHJpbmcpCisgKgorICogU2luY2U6IDAuMTAuMTQKKyAqLworI2RlZmluZSBHU1RfVEFHX0NPUFlSSUdIVF9VUkkgICAgICAgICAgImNvcHlyaWdodC11cmkiCisvKioKKyAqIEdTVF9UQUdfRU5DT0RFRF9CWToKKyAqCisgKiBuYW1lIG9mIHRoZSBwZXJzb24gb3Igb3JnYW5pc2F0aW9uIHRoYXQgZW5jb2RlZCB0aGUgZmlsZS4gTWF5IGNvbnRhaW4gYQorICogY29weXJpZ2h0IG1lc3NhZ2UgaWYgdGhlIHBlcnNvbiBvciBvcmdhbmlzYXRpb24gYWxzbyBob2xkcyB0aGUgY29weXJpZ2h0CisgKiAoc3RyaW5nKQorICoKKyAqIE5vdGU6IGRvIG5vdCB1c2UgdGhpcyBmaWVsZCB0byBkZXNjcmliZSB0aGUgZW5jb2RpbmcgYXBwbGljYXRpb24uIFVzZQorICogI0dTVF9UQUdfQVBQTElDQVRJT05fTkFNRSBvciAjR1NUX1RBR19DT01NRU5UIGZvciB0aGF0LgorICoKKyAqIFNpbmNlOiAwLjEwLjMzCisgKi8KKyNkZWZpbmUgR1NUX1RBR19FTkNPREVEX0JZICAgICAgICAgICAgICJlbmNvZGVkLWJ5IgorLyoqCisgKiBHU1RfVEFHX0NPTlRBQ1Q6CisgKgorICogY29udGFjdCBpbmZvcm1hdGlvbiAoc3RyaW5nKQorICovCisjZGVmaW5lIEdTVF9UQUdfQ09OVEFDVCAgICAgICAgICAgICAgICAiY29udGFjdCIKKy8qKgorICogR1NUX1RBR19MSUNFTlNFOgorICoKKyAqIGxpY2Vuc2Ugb2YgZGF0YSAoc3RyaW5nKQorICovCisjZGVmaW5lIEdTVF9UQUdfTElDRU5TRSAgICAgICAgICAgICAgICAibGljZW5zZSIKKy8qKgorICogR1NUX1RBR19MSUNFTlNFX1VSSToKKyAqCisgKiBVUkkgdG8gbG9jYXRpb24gd2hlcmUgbGljZW5zZSBkZXRhaWxzIGNhbiBiZSBmb3VuZCAoc3RyaW5nKQorICoKKyAqIFNpbmNlOiAwLjEwLjE0CisgKi8KKyNkZWZpbmUgR1NUX1RBR19MSUNFTlNFX1VSSSAgICAgICAgICAgICJsaWNlbnNlLXVyaSIKKy8qKgorICogR1NUX1RBR19QRVJGT1JNRVI6CisgKgorICogcGVyc29uKHMpIHBlcmZvcm1pbmcgKHN0cmluZykKKyAqLworI2RlZmluZSBHU1RfVEFHX1BFUkZPUk1FUiAgICAgICAgICAgICAgInBlcmZvcm1lciIKKy8qKgorICogR1NUX1RBR19EVVJBVElPTjoKKyAqCisgKiBsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSAodW5zaWduZWQgNjQtYml0IGludGVnZXIpCisgKi8KKyNkZWZpbmUgR1NUX1RBR19EVVJBVElPTiAgICAgICAgICAgICAgICJkdXJhdGlvbiIKKy8qKgorICogR1NUX1RBR19DT0RFQzoKKyAqCisgKiBjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4gKHN0cmluZykKKyAqLworI2RlZmluZSBHU1RfVEFHX0NPREVDICAgICAgICAgICAgICAgICAgImNvZGVjIgorLyoqCisgKiBHU1RfVEFHX1ZJREVPX0NPREVDOgorICoKKyAqIGNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiAoc3RyaW5nKQorICovCisjZGVmaW5lIEdTVF9UQUdfVklERU9fQ09ERUMgICAgICAgICAgICAidmlkZW8tY29kZWMiCisvKioKKyAqIEdTVF9UQUdfQVVESU9fQ09ERUM6CisgKgorICogY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIChzdHJpbmcpCisgKi8KKyNkZWZpbmUgR1NUX1RBR19BVURJT19DT0RFQyAgICAgICAgICAgICJhdWRpby1jb2RlYyIKKy8qKgorICogR1NUX1RBR19TVUJUSVRMRV9DT0RFQzoKKyAqCisgKiBjb2RlYy9mb3JtYXQgdGhlIHN1YnRpdGxlIGRhdGEgaXMgc3RvcmVkIGluIChzdHJpbmcpCisgKgorICogU2luY2U6IDAuMTAuMjMKKyAqLworI2RlZmluZSBHU1RfVEFHX1NVQlRJVExFX0NPREVDICAgICAgICAgInN1YnRpdGxlLWNvZGVjIgorLyoqCisgKiBHU1RfVEFHX0NPTlRBSU5FUl9GT1JNQVQ6CisgKgorICogY29udGFpbmVyIGZvcm1hdCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4gKHN0cmluZykKKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICovCisjZGVmaW5lIEdTVF9UQUdfQ09OVEFJTkVSX0ZPUk1BVCAgICAgICAiY29udGFpbmVyLWZvcm1hdCIKKy8qKgorICogR1NUX1RBR19CSVRSQVRFOgorICoKKyAqIGV4YWN0IG9yIGF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3MgKHVuc2lnbmVkIGludGVnZXIpCisgKi8KKyNkZWZpbmUgR1NUX1RBR19CSVRSQVRFICAgICAgICAgICAgICAgICJiaXRyYXRlIgorLyoqCisgKiBHU1RfVEFHX05PTUlOQUxfQklUUkFURToKKyAqCisgKiBub21pbmFsIGJpdHJhdGUgaW4gYml0cy9zICh1bnNpZ25lZCBpbnRlZ2VyKS4gVGhlIGFjdHVhbCBiaXRyYXRlIG1pZ2h0IGJlCisgKiBkaWZmZXJlbnQgZnJvbSB0aGlzIHRhcmdldCBiaXRyYXRlLgorICovCisjZGVmaW5lIEdTVF9UQUdfTk9NSU5BTF9CSVRSQVRFICAgICAgICAibm9taW5hbC1iaXRyYXRlIgorLyoqCisgKiBHU1RfVEFHX01JTklNVU1fQklUUkFURToKKyAqCisgKiBtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zICh1bnNpZ25lZCBpbnRlZ2VyKQorICovCisjZGVmaW5lIEdTVF9UQUdfTUlOSU1VTV9CSVRSQVRFICAgICAgICAibWluaW11bS1iaXRyYXRlIgorLyoqCisgKiBHU1RfVEFHX01BWElNVU1fQklUUkFURToKKyAqCisgKiBtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zICh1bnNpZ25lZCBpbnRlZ2VyKQorICovCisjZGVmaW5lIEdTVF9UQUdfTUFYSU1VTV9CSVRSQVRFICAgICAgICAibWF4aW11bS1iaXRyYXRlIgorLyoqCisgKiBHU1RfVEFHX1NFUklBTDoKKyAqCisgKiBzZXJpYWwgbnVtYmVyIG9mIHRyYWNrICh1bnNpZ25lZCBpbnRlZ2VyKQorICovCisjZGVmaW5lIEdTVF9UQUdfU0VSSUFMICAgICAgICAgICAgICAgICAic2VyaWFsIgorLyoqCisgKiBHU1RfVEFHX0VOQ09ERVI6CisgKgorICogZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSAoc3RyaW5nKQorICovCisjZGVmaW5lIEdTVF9UQUdfRU5DT0RFUiAgICAgICAgICAgICAgICAiZW5jb2RlciIKKy8qKgorICogR1NUX1RBR19FTkNPREVSX1ZFUlNJT046CisgKgorICogdmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSAodW5zaWduZWQgaW50ZWdlcikKKyAqLworI2RlZmluZSBHU1RfVEFHX0VOQ09ERVJfVkVSU0lPTiAgICAgICAgImVuY29kZXItdmVyc2lvbiIKKy8qKgorICogR1NUX1RBR19UUkFDS19HQUlOOgorICoKKyAqIHRyYWNrIGdhaW4gaW4gZGIgKGRvdWJsZSkKKyAqLworI2RlZmluZSBHU1RfVEFHX1RSQUNLX0dBSU4gICAgICAgICAgICAgInJlcGxheWdhaW4tdHJhY2stZ2FpbiIKKy8qKgorICogR1NUX1RBR19UUkFDS19QRUFLOgorICoKKyAqIHBlYWsgb2YgdGhlIHRyYWNrIChkb3VibGUpCisgKi8KKyNkZWZpbmUgR1NUX1RBR19UUkFDS19QRUFLICAgICAgICAgICAgICJyZXBsYXlnYWluLXRyYWNrLXBlYWsiCisvKioKKyAqIEdTVF9UQUdfQUxCVU1fR0FJTjoKKyAqCisgKiBhbGJ1bSBnYWluIGluIGRiIChkb3VibGUpCisgKi8KKyNkZWZpbmUgR1NUX1RBR19BTEJVTV9HQUlOICAgICAgICAgICAgICJyZXBsYXlnYWluLWFsYnVtLWdhaW4iCisvKioKKyAqIEdTVF9UQUdfQUxCVU1fUEVBSzoKKyAqCisgKiBwZWFrIG9mIHRoZSBhbGJ1bSAoZG91YmxlKQorICovCisjZGVmaW5lIEdTVF9UQUdfQUxCVU1fUEVBSyAgICAgICAgICAgICAicmVwbGF5Z2Fpbi1hbGJ1bS1wZWFrIgorLyoqCisgKiBHU1RfVEFHX1JFRkVSRU5DRV9MRVZFTDoKKyAqCisgKiByZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIChkb3VibGUpCisgKgorICogU2luY2U6IDAuMTAuMTIKKyAqLworI2RlZmluZSBHU1RfVEFHX1JFRkVSRU5DRV9MRVZFTCAgICAgICAgInJlcGxheWdhaW4tcmVmZXJlbmNlLWxldmVsIgorLyoqCisgKiBHU1RfVEFHX0xBTkdVQUdFX0NPREU6CisgKgorICogTGFuZ3VhZ2UgY29kZSAoSVNPLTYzOS0xKSAoc3RyaW5nKSBvZiB0aGUgY29udGVudAorICovCisjZGVmaW5lIEdTVF9UQUdfTEFOR1VBR0VfQ09ERSAgICAgICAgICAibGFuZ3VhZ2UtY29kZSIKKy8qKgorICogR1NUX1RBR19JTUFHRToKKyAqCisgKiBpbWFnZSAoYnVmZmVyKSAoYnVmZmVyIGNhcHMgc2hvdWxkIHNwZWNpZnkgdGhlIGNvbnRlbnQgdHlwZSBhbmQgcHJlZmVyYWJseQorICogYWxzbyBzZXQgImltYWdlLXR5cGUiIGZpZWxkIGFzICNHc3RUYWdJbWFnZVR5cGUpCisgKgorICogU2luY2U6IDAuMTAuNgorICovCisjZGVmaW5lIEdTVF9UQUdfSU1BR0UgICAgICAgICAgICAgICAgICAiaW1hZ2UiCisvKioKKyAqIEdTVF9UQUdfUFJFVklFV19JTUFHRToKKyAqCisgKiBpbWFnZSB0aGF0IGlzIG1lYW50IGZvciBwcmV2aWV3IHB1cnBvc2VzLCBlLmcuIHNtYWxsIGljb24tc2l6ZWQgdmVyc2lvbgorICogKGJ1ZmZlcikgKGJ1ZmZlciBjYXBzIHNob3VsZCBzcGVjaWZ5IHRoZSBjb250ZW50IHR5cGUpCisgKgorICogU2luY2U6IDAuMTAuNworICovCisjZGVmaW5lIEdTVF9UQUdfUFJFVklFV19JTUFHRSAgICAgICAgICAicHJldmlldy1pbWFnZSIKKworLyoqCisgKiBHU1RfVEFHX0FUVEFDSE1FTlQ6CisgKgorICogZ2VuZXJpYyBmaWxlIGF0dGFjaG1lbnQgKGJ1ZmZlcikgKGJ1ZmZlciBjYXBzIHNob3VsZCBzcGVjaWZ5IHRoZSBjb250ZW50CisgKiB0eXBlIGFuZCBpZiBwb3NzaWJsZSBzZXQgImZpbGVuYW1lIiB0byB0aGUgZmlsZSBuYW1lIG9mIHRoZQorICogYXR0YWNobWVudCkKKyAqCisgKiBTaW5jZTogMC4xMC4yMQorICovCisjZGVmaW5lIEdTVF9UQUdfQVRUQUNITUVOVCAgICAgICAgICAgICAiYXR0YWNobWVudCIKKworLyoqCisgKiBHU1RfVEFHX0JFQVRTX1BFUl9NSU5VVEU6CisgKgorICogbnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8gKGRvdWJsZSkKKyAqCisgKiBTaW5jZTogMC4xMC4xMgorICovCisjZGVmaW5lIEdTVF9UQUdfQkVBVFNfUEVSX01JTlVURSAgICAgICAiYmVhdHMtcGVyLW1pbnV0ZSIKKworLyoqCisgKiBHU1RfVEFHX0tFWVdPUkRTOgorICoKKyAqIGNvbW1hIHNlcGFyYXRlZCBrZXl3b3JkcyBkZXNjcmliaW5nIHRoZSBjb250ZW50IChzdHJpbmcpLgorICoKKyAqIFNpbmNlOiAwLjEwLjIxCisgKi8KKyNkZWZpbmUgR1NUX1RBR19LRVlXT1JEUyAgICAgICAgICAgICAgICJrZXl3b3JkcyIKKworLyoqCisgKiBHU1RfVEFHX0dFT19MT0NBVElPTl9OQU1FOgorICoKKyAqIGh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aXZlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvcgorICogcHJvZHVjZWQuIChzdHJpbmcpLgorICoKKyAqIFNpbmNlOiAwLjEwLjIxCisgKi8KKyNkZWZpbmUgR1NUX1RBR19HRU9fTE9DQVRJT05fTkFNRSAgICAgICAgICAgICAgICJnZW8tbG9jYXRpb24tbmFtZSIKKworLyoqCisgKiBHU1RfVEFHX0dFT19MT0NBVElPTl9MQVRJVFVERToKKyAqCisgKiBnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluCisgKiBkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciBzb3V0aGVybgorICogbGF0aXR1ZGVzKSAoZG91YmxlKS4KKyAqCisgKiBTaW5jZTogMC4xMC4yMQorICovCisjZGVmaW5lIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX0xBVElUVURFICAgICAgICAgICAgICAgImdlby1sb2NhdGlvbi1sYXRpdHVkZSIKKworLyoqCisgKiBHU1RfVEFHX0dFT19MT0NBVElPTl9MT05HSVRVREU6CisgKgorICogZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4KKyAqIGRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssCisgKiBuZWdhdGl2ZSB2YWx1ZXMgZm9yIHdlc3Rlcm4gbG9uZ2l0dWRlcykuIChkb3VibGUpLgorICoKKyAqIFNpbmNlOiAwLjEwLjIxCisgKi8KKyNkZWZpbmUgR1NUX1RBR19HRU9fTE9DQVRJT05fTE9OR0lUVURFICAgICAgICAgICAgICAgImdlby1sb2NhdGlvbi1sb25naXR1ZGUiCisKKy8qKgorICogR1NUX1RBR19HRU9fTE9DQVRJT05fRUxFVkFUSU9OOgorICoKKyAqIGdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycworICogYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSAoZG91YmxlKS4KKyAqCisgKiBTaW5jZTogMC4xMC4yMQorICovCisjZGVmaW5lIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX0VMRVZBVElPTiAgICAgICAgICAgICAgICJnZW8tbG9jYXRpb24tZWxldmF0aW9uIgorLyoqCisgKiBHU1RfVEFHX0dFT19MT0NBVElPTl9DT1VOVFJZOgorICoKKyAqIFRoZSBjb3VudHJ5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZCAoc3RyaW5nKS4KKyAqCisgKiBTaW5jZTogMC4xMC4yOQorICovCisjZGVmaW5lIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX0NPVU5UUlkgICAgICAgICAgICAgICAgICJnZW8tbG9jYXRpb24tY291bnRyeSIKKy8qKgorICogR1NUX1RBR19HRU9fTE9DQVRJT05fQ0lUWToKKyAqCisgKiBUaGUgY2l0eSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgKHN0cmluZykuCisgKgorICogU2luY2U6IDAuMTAuMjkKKyAqLworI2RlZmluZSBHU1RfVEFHX0dFT19MT0NBVElPTl9DSVRZICAgICAgICAgICAgICAgICAgICAiZ2VvLWxvY2F0aW9uLWNpdHkiCisvKioKKyAqIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX1NVQkxPQ0FUSU9OOgorICoKKyAqIEEgbG9jYXRpb24gJ3NtYWxsZXInIHRoYW4gR1NUX1RBR19HRU9fTE9DQVRJT05fQ0lUWSB0aGF0IHNwZWNpZmllcyBiZXR0ZXIKKyAqIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZC4gKGUuZy4gdGhlIG5laWdoYm9yaG9vZCkgKHN0cmluZykuCisgKgorICogVGhpcyB0YWcgaGFzIGJlZW4gYWRkZWQgYXMgdGhpcyBpcyBob3cgaXQgaXMgaGFuZGxlZC9uYW1lZCBpbiBYTVAncworICogSXB0YzR4bXBjb3JlIHNjaGVtYS4KKyAqCisgKiBTaW5jZTogMC4xMC4yOQorICovCisjZGVmaW5lIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX1NVQkxPQ0FUSU9OICAgICAgICAgICAgICJnZW8tbG9jYXRpb24tc3VibG9jYXRpb24iCisvKioKKyAqIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX0hPUklaT05UQUxfRVJST1I6CisgKgorICogUmVwcmVzZW50cyB0aGUgZXhwZWN0ZWQgZXJyb3Igb24gdGhlIGhvcml6b250YWwgcG9zaXRpb25pbmcgaW4KKyAqIG1ldGVycyAoZG91YmxlKS4KKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCisjZGVmaW5lIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX0hPUklaT05UQUxfRVJST1IgICAiZ2VvLWxvY2F0aW9uLWhvcml6b250YWwtZXJyb3IiCisvKioKKyAqIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX01PVkVNRU5UX1NQRUVEOgorICoKKyAqIFNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoZW4gcGVyZm9ybWluZyB0aGUgY2FwdHVyZS4KKyAqIFJlcHJlc2VudGVkIGluIG0vcy4gKGRvdWJsZSkKKyAqCisgKiBTZWUgYWxzbyAjR1NUX1RBR19HRU9fTE9DQVRJT05fTU9WRU1FTlRfRElSRUNUSU9OCisgKgorICogU2luY2UgMC4xMC4zMAorICovCisjZGVmaW5lIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX01PVkVNRU5UX1NQRUVEICAgICAgICJnZW8tbG9jYXRpb24tbW92ZW1lbnQtc3BlZWQiCisvKioKKyAqIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX01PVkVNRU5UX0RJUkVDVElPTjoKKyAqCisgKiBJbmRpY2F0ZXMgdGhlIG1vdmVtZW50IGRpcmVjdGlvbiBvZiB0aGUgZGV2aWNlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUKKyAqIG9mIGEgbWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sCisgKiAwIG1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSAoZG91YmxlIGZyb20gMCB0byAzNjApCisgKgorICogU2VlIGFsc28gI0dTVF9UQUdfR0VPX0xPQ0FUSU9OX0NBUFRVUkVfRElSRUNUSU9OCisgKgorICogU2luY2U6IDAuMTAuMzAKKyAqLworI2RlZmluZSBHU1RfVEFHX0dFT19MT0NBVElPTl9NT1ZFTUVOVF9ESVJFQ1RJT04gImdlby1sb2NhdGlvbi1tb3ZlbWVudC1kaXJlY3Rpb24iCisvKioKKyAqIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX0NBUFRVUkVfRElSRUNUSU9OOgorICoKKyAqIEluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcKKyAqIGEgbWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sCisgKiAwIG1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSAoZG91YmxlIGZyb20gMCB0byAzNjApCisgKgorICogU2VlIGFsc28gI0dTVF9UQUdfR0VPX0xPQ0FUSU9OX01PVkVNRU5UX0RJUkVDVElPTgorICoKKyAqIFNpbmNlOiAwLjEwLjMwCisgKi8KKyNkZWZpbmUgR1NUX1RBR19HRU9fTE9DQVRJT05fQ0FQVFVSRV9ESVJFQ1RJT04gICJnZW8tbG9jYXRpb24tY2FwdHVyZS1kaXJlY3Rpb24iCisvKioKKyAqIEdTVF9UQUdfU0hPV19OQU1FOgorICoKKyAqIE5hbWUgb2YgdGhlIHNob3csIHVzZWQgZm9yIGRpc3BsYXlpbmcgKHN0cmluZykKKyAqCisgKiBTaW5jZTogMC4xMC4yNgorICovCisjZGVmaW5lIEdTVF9UQUdfU0hPV19OQU1FICAgICAgICAgICAgICAgICAgICAgICAgICJzaG93LW5hbWUiCisvKioKKyAqIEdTVF9UQUdfU0hPV19TT1JUTkFNRToKKyAqCisgKiBOYW1lIG9mIHRoZSBzaG93LCB1c2VkIGZvciBzb3J0aW5nIChzdHJpbmcpCisgKgorICogU2luY2U6IDAuMTAuMjYKKyAqLworI2RlZmluZSBHU1RfVEFHX1NIT1dfU09SVE5BTUUgICAgICAgICAgICAgICAgICAgICAic2hvdy1zb3J0bmFtZSIKKy8qKgorICogR1NUX1RBR19TSE9XX0VQSVNPREVfTlVNQkVSOgorICoKKyAqIE51bWJlciBvZiB0aGUgZXBpc29kZSB3aXRoaW4gYSBzZWFzb24vc2hvdyAodW5zaWduZWQgaW50ZWdlcikKKyAqCisgKiBTaW5jZTogMC4xMC4yNgorICovCisjZGVmaW5lIEdTVF9UQUdfU0hPV19FUElTT0RFX05VTUJFUiAgICAgICAgICAgICAgICJzaG93LWVwaXNvZGUtbnVtYmVyIgorLyoqCisgKiBHU1RfVEFHX1NIT1dfU0VBU09OX05VTUJFUjoKKyAqCisgKiBOdW1iZXIgb2YgdGhlIHNlYXNvbiBvZiBhIHNob3cvc2VyaWVzICh1bnNpZ25lZCBpbnRlZ2VyKQorICoKKyAqIFNpbmNlOiAwLjEwLjI2CisgKi8KKyNkZWZpbmUgR1NUX1RBR19TSE9XX1NFQVNPTl9OVU1CRVIgICAgICAgICAgICAgICAgInNob3ctc2Vhc29uLW51bWJlciIKKy8qKgorICogR1NUX1RBR19MWVJJQ1M6CisgKgorICogVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEgKHN0cmluZykKKyAqCisgKiBTaW5jZTogMC4xMC4yNgorICovCisjZGVmaW5lIEdTVF9UQUdfTFlSSUNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICJseXJpY3MiCisvKioKKyAqIEdTVF9UQUdfQ09NUE9TRVJfU09SVE5BTUU6CisgKgorICogVGhlIGNvbXBvc2VyJ3MgbmFtZSwgdXNlZCBmb3Igc29ydGluZyAoc3RyaW5nKQorICoKKyAqIFNpbmNlOiAwLjEwLjI2CisgKi8KKyNkZWZpbmUgR1NUX1RBR19DT01QT1NFUl9TT1JUTkFNRSAgICAgICAgICAgICAgICAgImNvbXBvc2VyLXNvcnRuYW1lIgorLyoqCisgKiBHU1RfVEFHX0dST1VQSU5HOgorICoKKyAqIEdyb3VwcyB0b2dldGhlciBtZWRpYSB0aGF0IGFyZSByZWxhdGVkIGFuZCBzcGFucyBtdWx0aXBsZSB0cmFja3MuIEFuCisgKiBleGFtcGxlIGFyZSBtdWx0aXBsZSBwaWVjZXMgb2YgYSBjb25jZXJ0by4gKHN0cmluZykKKyAqCisgKiBTaW5jZTogMC4xMC4yNgorICovCisjZGVmaW5lIEdTVF9UQUdfR1JPVVBJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICJncm91cGluZyIKKy8qKgorICogR1NUX1RBR19VU0VSX1JBVElORzoKKyAqCisgKiBSYXRpbmcgYXR0cmlidXRlZCBieSBhIHBlcnNvbiAobGlrZWx5IHRoZSBhcHBsaWNhdGlvbiB1c2VyKS4KKyAqIFRoZSBoaWdoZXIgdGhlIHZhbHVlLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyB0aGlzIG1lZGlhCisgKiAodW5zaWduZWQgaW50IGZyb20gMCB0byAxMDApCisgKgorICogU2luY2U6IDAuMTAuMjkKKyAqLworI2RlZmluZSBHU1RfVEFHX1VTRVJfUkFUSU5HICAgICAgICAgICAgICAgICAgICAgICAidXNlci1yYXRpbmciCisvKioKKyAqIEdTVF9UQUdfREVWSUNFX01BTlVGQUNUVVJFUjoKKyAqCisgKiBNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEgKHN0cmluZykKKyAqCisgKiBTaW5jZTogMC4xMC4zMAorICovCisjZGVmaW5lIEdTVF9UQUdfREVWSUNFX01BTlVGQUNUVVJFUiAgICAgICAgICAgICAgICJkZXZpY2UtbWFudWZhY3R1cmVyIgorLyoqCisgKiBHU1RfVEFHX0RFVklDRV9NT0RFTDoKKyAqCisgKiBNb2RlbCBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSAoc3RyaW5nKQorICoKKyAqIFNpbmNlOiAwLjEwLjMwCisgKi8KKyNkZWZpbmUgR1NUX1RBR19ERVZJQ0VfTU9ERUwgICAgICAgICAgICAgICAgICAgICAgImRldmljZS1tb2RlbCIKKy8qKgorICogR1NUX1RBR19BUFBMSUNBVElPTl9OQU1FOgorICoKKyAqIE5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSAoc3RyaW5nKQorICoKKyAqIFNpbmNlOiAwLjEwLjMxCisgKi8KKyNkZWZpbmUgR1NUX1RBR19BUFBMSUNBVElPTl9OQU1FICAgICAgICAgICAgICAgICAgImFwcGxpY2F0aW9uLW5hbWUiCisvKioKKyAqIEdTVF9UQUdfQVBQTElDQVRJT05fREFUQToKKyAqCisgKiBBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSAoYnVmZmVyKQorICoKKyAqIFNvbWUgZm9ybWF0cyBhbGxvdyBhcHBsaWNhdGlvbidzIHRvIGFkZCB0aGVpciBvd24gYXJiaXRyYXJ5IGRhdGEKKyAqIGludG8gZmlsZXMuIFRoaXMgZGF0YSBpcyBhcHBsaWNhdGlvbidzIGRlcGVuZGVudC4KKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCisjZGVmaW5lIEdTVF9UQUdfQVBQTElDQVRJT05fREFUQSAgICAgICAgICAiYXBwbGljYXRpb24tZGF0YSIKKy8qKgorICogR1NUX1RBR19JTUFHRV9PUklFTlRBVElPTjoKKyAqCisgKiBSZXByZXNlbnRzIHRoZSAnT3JpZW50YXRpb24nIHRhZyBmcm9tIEVYSUYuIERlZmluZXMgaG93IHRoZSBpbWFnZQorICogc2hvdWxkIGJlIHJvdGF0ZWQgYW5kIG1pcnJvcmVkIGZvciBkaXNwbGF5LiAoc3RyaW5nKQorICoKKyAqIFRoaXMgdGFnIGhhcyBhIHByZWRlZmluZWQgc2V0IG9mIGFsbG93ZWQgdmFsdWVzOgorICogICAicm90YXRlLTAiCisgKiAgICJyb3RhdGUtOTAiCisgKiAgICJyb3RhdGUtMTgwIgorICogICAicm90YXRlLTI3MCIKKyAqICAgImZsaXAtcm90YXRlLTAiCisgKiAgICJmbGlwLXJvdGF0ZS05MCIKKyAqICAgImZsaXAtcm90YXRlLTE4MCIKKyAqICAgImZsaXAtcm90YXRlLTI3MCIKKyAqCisgKiBUaGUgbmFtaW5nIGlzIGFkb3B0ZWQgYWNjb3JkaW5nIHRvIGEgcG9zc2libGUgdHJhbnNmb3JtYXRpb24gdG8gcGVyZm9ybQorICogb24gdGhlIGltYWdlIHRvIGZpeCBpdHMgb3JpZW50YXRpb24sIG9idmlvdXNseSBlcXVpdmFsZW50IG9wZXJhdGlvbnMgd2lsbAorICogeWllbGQgdGhlIHNhbWUgcmVzdWx0LgorICoKKyAqIFJvdGF0aW9ucyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlcyBhcmUgaW4gY2xvY2t3aXNlIGRpcmVjdGlvbiBhbmQKKyAqICdmbGlwJyBtZWFucyBhbiBob3Jpem9udGFsIG1pcnJvcmluZy4KKyAqCisgKiBTaW5jZTogMC4xMC4zMAorICovCisjZGVmaW5lIEdTVF9UQUdfSU1BR0VfT1JJRU5UQVRJT04gICAgICAgICAgICAiaW1hZ2Utb3JpZW50YXRpb24iCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9UQUdMSVNUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHRhZ3NldHRlci5jIGIvZ3N0L2dzdHRhZ3NldHRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwOGQ3ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0dGFnc2V0dGVyLmMKQEAgLTAsMCArMSw0MjQgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDAzIEJlbmphbWluIE90dGUgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgorICoKKyAqIGdzdHRhZ3NldHRlci5jOiBpbnRlcmZhY2UgZm9yIHRhZyBzZXR0aW5nIG9uIGVsZW1lbnRzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoqCisgKiBTRUNUSU9OOmdzdHRhZ3NldHRlcgorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBFbGVtZW50IGludGVyZmFjZSB0aGF0IGFsbG93cyBzZXR0aW5nIGFuZCByZXRyaWV2YWwKKyAqICAgICAgICAgICAgICAgICAgICAgb2YgbWVkaWEgbWV0YWRhdGEKKyAqCisgKiBFbGVtZW50IGludGVyZmFjZSB0aGF0IGFsbG93cyBzZXR0aW5nIG9mIG1lZGlhIG1ldGFkYXRhLgorICoKKyAqIEVsZW1lbnRzIHRoYXQgc3VwcG9ydCBjaGFuZ2luZyBhIHN0cmVhbSdzIG1ldGFkYXRhIHdpbGwgaW1wbGVtZW50IHRoaXMKKyAqIGludGVyZmFjZS4gRXhhbXBsZXMgb2Ygc3VjaCBlbGVtZW50cyBhcmUgJ3ZvcmJpc2VuYycsICd0aGVvcmFlbmMnIGFuZAorICogJ2lkM3YybXV4Jy4KKyAqIAorICogSWYgeW91IGp1c3Qgd2FudCB0byByZXRyaWV2ZSBtZXRhZGF0YSBpbiB5b3VyIGFwcGxpY2F0aW9uIHRoZW4gYWxsIHlvdQorICogbmVlZCB0byBkbyBpcyB3YXRjaCBmb3IgdGFnIG1lc3NhZ2VzIG9uIHlvdXIgcGlwZWxpbmUncyBidXMuIFRoaXMKKyAqIGludGVyZmFjZSBpcyBvbmx5IGZvciBzZXR0aW5nIG1ldGFkYXRhLCBub3QgZm9yIGV4dHJhY3RpbmcgaXQuIFRvIHNldCB0YWdzCisgKiBmcm9tIHRoZSBhcHBsaWNhdGlvbiwgZmluZCB0YWdzZXR0ZXIgZWxlbWVudHMgYW5kIHNldCB0YWdzIHVzaW5nIGUuZy4KKyAqIGdzdF90YWdfc2V0dGVyX21lcmdlX3RhZ3MoKSBvciBnc3RfdGFnX3NldHRlcl9hZGRfdGFncygpLiBBbHNvIGNvbnNpZGVyCisgKiBzZXR0aW5nIHRoZSAjR3N0VGFnTWVyZ2VNb2RlIHRoYXQgaXMgdXNlZCBmb3IgdGFnIGV2ZW50cyB0aGF0IGFycml2ZSBhdCB0aGUKKyAqIHRhZ3NldHRlciBlbGVtZW50IChkZWZhdWx0IG1vZGUgaXMgdG8ga2VlcCBleGlzdGluZyB0YWdzKS4KKyAqIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQgZG8gdGhhdCBiZWZvcmUgdGhlIGVsZW1lbnQgZ29lcyB0byAlR1NUX1NUQVRFX1BBVVNFRC4KKyAqIAorICogRWxlbWVudHMgaW1wbGVtZW50aW5nIHRoZSAjR3N0VGFnU2V0dGVyIGludGVyZmFjZSBvZnRlbiBoYXZlIHRvIG1lcmdlCisgKiBhbnkgdGFncyByZWNlaXZlZCBmcm9tIHVwc3RyZWFtIGFuZCB0aGUgdGFncyBzZXQgYnkgdGhlIGFwcGxpY2F0aW9uIHZpYQorICogdGhlIGludGVyZmFjZS4gVGhpcyBjYW4gYmUgZG9uZSBsaWtlIHRoaXM6CisgKgorICogfFsKKyAqIEdzdFRhZ01lcmdlTW9kZSBtZXJnZV9tb2RlOworICogY29uc3QgR3N0VGFnTGlzdCAqYXBwbGljYXRpb25fdGFnczsKKyAqIGNvbnN0IEdzdFRhZ0xpc3QgKmV2ZW50X3RhZ3M7CisgKiBHc3RUYWdTZXR0ZXIgKnRhZ3NldHRlcjsKKyAqIEdzdFRhZ0xpc3QgKnJlc3VsdDsKKyAqICAKKyAqIHRhZ3NldHRlciA9IEdTVF9UQUdfU0VUVEVSIChlbGVtZW50KTsKKyAqICAKKyAqIG1lcmdlX21vZGUgPSBnc3RfdGFnX3NldHRlcl9nZXRfdGFnX21lcmdlX21vZGUgKHRhZ3NldHRlcik7CisgKiBhcHBsaWNhdGlvbl90YWdzID0gZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19saXN0ICh0YWdzZXR0ZXIpOworICogZXZlbnRfdGFncyA9IChjb25zdCBHc3RUYWdMaXN0ICopIGVsZW1lbnQtPmV2ZW50X3RhZ3M7CisgKiAgCisgKiBHU1RfTE9HX09CSkVDVCAodGFnc2V0dGVyLCAibWVyZ2luZyB0YWdzLCBtZXJnZSBtb2RlID0gJWQiLCBtZXJnZV9tb2RlKTsKKyAqIEdTVF9MT0dfT0JKRUNUICh0YWdzZXR0ZXIsICJldmVudCB0YWdzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgZXZlbnRfdGFncyk7CisgKiBHU1RfTE9HX09CSkVDVCAodGFnc2V0dGVyLCAic2V0ICAgdGFnczogJSIgR1NUX1BUUl9GT1JNQVQsIGFwcGxpY2F0aW9uX3RhZ3MpOworICogIAorICogcmVzdWx0ID0gZ3N0X3RhZ19saXN0X21lcmdlIChhcHBsaWNhdGlvbl90YWdzLCBldmVudF90YWdzLCBtZXJnZV9tb2RlKTsKKyAqICAKKyAqIEdTVF9MT0dfT0JKRUNUICh0YWdzZXR0ZXIsICJmaW5hbCB0YWdzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgcmVzdWx0KTsKKyAqIF18CisgKiAKKyAqIExhc3QgcmV2aWV3ZWQgb24gMjAwNi0wNS0xOCAoMC4xMC42KQorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJnc3R0YWdzZXR0ZXIuaCIKKyNpbmNsdWRlIDxnb2JqZWN0L2d2YWx1ZWNvbGxlY3Rvci5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitzdGF0aWMgR1F1YXJrIGdzdF90YWdfa2V5OworCit0eXBlZGVmIHN0cnVjdAoreworICBHc3RUYWdNZXJnZU1vZGUgbW9kZTsKKyAgR3N0VGFnTGlzdCAqbGlzdDsKKyAgR1N0YXRpY011dGV4IGxvY2s7Cit9IEdzdFRhZ0RhdGE7CisKK0dUeXBlCitnc3RfdGFnX3NldHRlcl9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIHZvbGF0aWxlIGdzaXplIHRhZ19zZXR0ZXJfdHlwZSA9IDA7CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmdGFnX3NldHRlcl90eXBlKSkgeworICAgIEdUeXBlIF90eXBlOworICAgIHN0YXRpYyBjb25zdCBHVHlwZUluZm8gdGFnX3NldHRlcl9pbmZvID0geworICAgICAgc2l6ZW9mIChHc3RUYWdTZXR0ZXJJRmFjZSksICAgICAgIC8qIGNsYXNzX3NpemUgKi8KKyAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogYmFzZV9pbml0ICovCisgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGJhc2VfZmluYWxpemUgKi8KKyAgICAgIE5VTEwsCisgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGNsYXNzX2ZpbmFsaXplICovCisgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGNsYXNzX2RhdGEgKi8KKyAgICAgIDAsCisgICAgICAwLAorICAgICAgTlVMTAorICAgIH07CisKKyAgICBfdHlwZSA9IGdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMgKEdfVFlQRV9JTlRFUkZBQ0UsICJHc3RUYWdTZXR0ZXIiLAorICAgICAgICAmdGFnX3NldHRlcl9pbmZvLCAwKTsKKworICAgIGdfdHlwZV9pbnRlcmZhY2VfYWRkX3ByZXJlcXVpc2l0ZSAoX3R5cGUsIEdTVF9UWVBFX0VMRU1FTlQpOworCisgICAgZ3N0X3RhZ19rZXkgPSBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoIkdTVF9UQUdfU0VUVEVSIik7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZ0YWdfc2V0dGVyX3R5cGUsIF90eXBlKTsKKyAgfQorCisgIHJldHVybiB0YWdfc2V0dGVyX3R5cGU7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfdGFnX2RhdGFfZnJlZSAoZ3BvaW50ZXIgcCkKK3sKKyAgR3N0VGFnRGF0YSAqZGF0YSA9IChHc3RUYWdEYXRhICopIHA7CisKKyAgaWYgKGRhdGEtPmxpc3QpCisgICAgZ3N0X3RhZ19saXN0X2ZyZWUgKGRhdGEtPmxpc3QpOworCisgIGdfc3RhdGljX211dGV4X2ZyZWUgKCZkYXRhLT5sb2NrKTsKKworICBnX3NsaWNlX2ZyZWUgKEdzdFRhZ0RhdGEsIGRhdGEpOworfQorCitzdGF0aWMgR3N0VGFnRGF0YSAqCitnc3RfdGFnX3NldHRlcl9nZXRfZGF0YSAoR3N0VGFnU2V0dGVyICogc2V0dGVyKQoreworICBHc3RUYWdEYXRhICpkYXRhOworCisgIGRhdGEgPSBnX29iamVjdF9nZXRfcWRhdGEgKEdfT0JKRUNUIChzZXR0ZXIpLCBnc3RfdGFnX2tleSk7CisgIGlmICghZGF0YSkgeworICAgIHN0YXRpYyBHU3RhdGljTXV0ZXggY3JlYXRlX211dGV4ID0gR19TVEFUSUNfTVVURVhfSU5JVDsKKworICAgIC8qIG1ha2Ugc3VyZSBubyBvdGhlciB0aHJlYWQgaXMgY3JlYXRpbmcgYSBHc3RUYWdEYXRhIGF0IHRoZSBzYW1lIHRpbWUgKi8KKyAgICBnX3N0YXRpY19tdXRleF9sb2NrICgmY3JlYXRlX211dGV4KTsKKyAgICBkYXRhID0gZ19vYmplY3RfZ2V0X3FkYXRhIChHX09CSkVDVCAoc2V0dGVyKSwgZ3N0X3RhZ19rZXkpOworICAgIGlmICghZGF0YSkgeworICAgICAgZGF0YSA9IGdfc2xpY2VfbmV3IChHc3RUYWdEYXRhKTsKKyAgICAgIGdfc3RhdGljX211dGV4X2luaXQgKCZkYXRhLT5sb2NrKTsKKyAgICAgIGRhdGEtPmxpc3QgPSBOVUxMOworICAgICAgZGF0YS0+bW9kZSA9IEdTVF9UQUdfTUVSR0VfS0VFUDsKKyAgICAgIGdfb2JqZWN0X3NldF9xZGF0YV9mdWxsIChHX09CSkVDVCAoc2V0dGVyKSwgZ3N0X3RhZ19rZXksIGRhdGEsCisgICAgICAgICAgZ3N0X3RhZ19kYXRhX2ZyZWUpOworICAgIH0KKyAgICBnX3N0YXRpY19tdXRleF91bmxvY2sgKCZjcmVhdGVfbXV0ZXgpOworICB9CisKKyAgcmV0dXJuIGRhdGE7Cit9CisKKy8qKgorICogZ3N0X3RhZ19zZXR0ZXJfcmVzZXRfdGFnczoKKyAqIEBzZXR0ZXI6IGEgI0dzdFRhZ1NldHRlcgorICoKKyAqIFJlc2V0IHRoZSBpbnRlcm5hbCB0YWdsaXN0LiBFbGVtZW50cyBzaG91bGQgY2FsbCB0aGlzIGZyb20gd2l0aGluIHRoZQorICogc3RhdGUtY2hhbmdlIGhhbmRsZXIuCisgKgorICogU2luY2U6IDAuMTAuMjIKKyAqLwordm9pZAorZ3N0X3RhZ19zZXR0ZXJfcmVzZXRfdGFncyAoR3N0VGFnU2V0dGVyICogc2V0dGVyKQoreworICBHc3RUYWdEYXRhICpkYXRhOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19UQUdfU0VUVEVSIChzZXR0ZXIpKTsKKworICBkYXRhID0gZ3N0X3RhZ19zZXR0ZXJfZ2V0X2RhdGEgKHNldHRlcik7CisKKyAgZ19zdGF0aWNfbXV0ZXhfbG9jayAoJmRhdGEtPmxvY2spOworICBpZiAoZGF0YS0+bGlzdCkgeworICAgIGdzdF90YWdfbGlzdF9mcmVlIChkYXRhLT5saXN0KTsKKyAgICBkYXRhLT5saXN0ID0gTlVMTDsKKyAgfQorICBnX3N0YXRpY19tdXRleF91bmxvY2sgKCZkYXRhLT5sb2NrKTsKK30KKworLyoqCisgKiBnc3RfdGFnX3NldHRlcl9tZXJnZV90YWdzOgorICogQHNldHRlcjogYSAjR3N0VGFnU2V0dGVyCisgKiBAbGlzdDogYSB0YWcgbGlzdCB0byBtZXJnZSBmcm9tCisgKiBAbW9kZTogdGhlIG1vZGUgdG8gbWVyZ2Ugd2l0aAorICoKKyAqIE1lcmdlcyB0aGUgZ2l2ZW4gbGlzdCBpbnRvIHRoZSBzZXR0ZXIncyBsaXN0IHVzaW5nIHRoZSBnaXZlbiBtb2RlLgorICovCit2b2lkCitnc3RfdGFnX3NldHRlcl9tZXJnZV90YWdzIChHc3RUYWdTZXR0ZXIgKiBzZXR0ZXIsIGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAorICAgIEdzdFRhZ01lcmdlTW9kZSBtb2RlKQoreworICBHc3RUYWdEYXRhICpkYXRhOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19UQUdfU0VUVEVSIChzZXR0ZXIpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1RBR19NT0RFX0lTX1ZBTElEIChtb2RlKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19UQUdfTElTVCAobGlzdCkpOworCisgIGRhdGEgPSBnc3RfdGFnX3NldHRlcl9nZXRfZGF0YSAoc2V0dGVyKTsKKworICBnX3N0YXRpY19tdXRleF9sb2NrICgmZGF0YS0+bG9jayk7CisgIGlmIChkYXRhLT5saXN0ID09IE5VTEwpIHsKKyAgICBpZiAobW9kZSAhPSBHU1RfVEFHX01FUkdFX0tFRVBfQUxMKQorICAgICAgZGF0YS0+bGlzdCA9IGdzdF90YWdfbGlzdF9jb3B5IChsaXN0KTsKKyAgfSBlbHNlIHsKKyAgICBnc3RfdGFnX2xpc3RfaW5zZXJ0IChkYXRhLT5saXN0LCBsaXN0LCBtb2RlKTsKKyAgfQorICBnX3N0YXRpY19tdXRleF91bmxvY2sgKCZkYXRhLT5sb2NrKTsKK30KKworLyoqCisgKiBnc3RfdGFnX3NldHRlcl9hZGRfdGFnczoKKyAqIEBzZXR0ZXI6IGEgI0dzdFRhZ1NldHRlcgorICogQG1vZGU6IHRoZSBtb2RlIHRvIHVzZQorICogQHRhZzogdGFnIHRvIHNldAorICogQC4uLjogbW9yZSB0YWcgLyB2YWx1ZSBwYWlycyB0byBzZXQKKyAqCisgKiBBZGRzIHRoZSBnaXZlbiB0YWcgLyB2YWx1ZSBwYWlycyBvbiB0aGUgc2V0dGVyIHVzaW5nIHRoZSBnaXZlbiBtZXJnZSBtb2RlLgorICogVGhlIGxpc3QgbXVzdCBiZSB0ZXJtaW5hdGVkIHdpdGggTlVMTC4KKyAqLwordm9pZAorZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ3MgKEdzdFRhZ1NldHRlciAqIHNldHRlciwgR3N0VGFnTWVyZ2VNb2RlIG1vZGUsCisgICAgY29uc3QgZ2NoYXIgKiB0YWcsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdzOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19UQUdfU0VUVEVSIChzZXR0ZXIpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1RBR19NT0RFX0lTX1ZBTElEIChtb2RlKSk7CisKKyAgdmFfc3RhcnQgKGFyZ3MsIHRhZyk7CisgIGdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsaXN0IChzZXR0ZXIsIG1vZGUsIHRhZywgYXJncyk7CisgIHZhX2VuZCAoYXJncyk7Cit9CisKKy8qKgorICogZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWx1ZXM6CisgKiBAc2V0dGVyOiBhICNHc3RUYWdTZXR0ZXIKKyAqIEBtb2RlOiB0aGUgbW9kZSB0byB1c2UKKyAqIEB0YWc6IHRhZyB0byBzZXQKKyAqIEAuLi46IG1vcmUgdGFnIC8gR1ZhbHVlIHBhaXJzIHRvIHNldAorICoKKyAqIEFkZHMgdGhlIGdpdmVuIHRhZyAvIEdWYWx1ZSBwYWlycyBvbiB0aGUgc2V0dGVyIHVzaW5nIHRoZSBnaXZlbiBtZXJnZSBtb2RlLgorICogVGhlIGxpc3QgbXVzdCBiZSB0ZXJtaW5hdGVkIHdpdGggTlVMTC4KKyAqLwordm9pZAorZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWx1ZXMgKEdzdFRhZ1NldHRlciAqIHNldHRlciwgR3N0VGFnTWVyZ2VNb2RlIG1vZGUsCisgICAgY29uc3QgZ2NoYXIgKiB0YWcsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdzOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19UQUdfU0VUVEVSIChzZXR0ZXIpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1RBR19NT0RFX0lTX1ZBTElEIChtb2RlKSk7CisKKyAgdmFfc3RhcnQgKGFyZ3MsIHRhZyk7CisgIGdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsaXN0X3ZhbHVlcyAoc2V0dGVyLCBtb2RlLCB0YWcsIGFyZ3MpOworICB2YV9lbmQgKGFyZ3MpOworfQorCisvKioKKyAqIGdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsaXN0OgorICogQHNldHRlcjogYSAjR3N0VGFnU2V0dGVyCisgKiBAbW9kZTogdGhlIG1vZGUgdG8gdXNlCisgKiBAdGFnOiB0YWcgdG8gc2V0CisgKiBAdmFyX2FyZ3M6IHRhZyAvIHZhbHVlIHBhaXJzIHRvIHNldAorICoKKyAqIEFkZHMgdGhlIGdpdmVuIHRhZyAvIHZhbHVlIHBhaXJzIG9uIHRoZSBzZXR0ZXIgdXNpbmcgdGhlIGdpdmVuIG1lcmdlIG1vZGUuCisgKiBUaGUgbGlzdCBtdXN0IGJlIHRlcm1pbmF0ZWQgd2l0aCBOVUxMLgorICovCit2b2lkCitnc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbGlzdCAoR3N0VGFnU2V0dGVyICogc2V0dGVyLCBHc3RUYWdNZXJnZU1vZGUgbW9kZSwKKyAgICBjb25zdCBnY2hhciAqIHRhZywgdmFfbGlzdCB2YXJfYXJncykKK3sKKyAgR3N0VGFnRGF0YSAqZGF0YTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVEFHX1NFVFRFUiAoc2V0dGVyKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9UQUdfTU9ERV9JU19WQUxJRCAobW9kZSkpOworCisgIGRhdGEgPSBnc3RfdGFnX3NldHRlcl9nZXRfZGF0YSAoc2V0dGVyKTsKKworICBnX3N0YXRpY19tdXRleF9sb2NrICgmZGF0YS0+bG9jayk7CisgIGlmICghZGF0YS0+bGlzdCkKKyAgICBkYXRhLT5saXN0ID0gZ3N0X3RhZ19saXN0X25ldyAoKTsKKworICBnc3RfdGFnX2xpc3RfYWRkX3ZhbGlzdCAoZGF0YS0+bGlzdCwgbW9kZSwgdGFnLCB2YXJfYXJncyk7CisKKyAgZ19zdGF0aWNfbXV0ZXhfdW5sb2NrICgmZGF0YS0+bG9jayk7Cit9CisKKy8qKgorICogZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWxpc3RfdmFsdWVzOgorICogQHNldHRlcjogYSAjR3N0VGFnU2V0dGVyCisgKiBAbW9kZTogdGhlIG1vZGUgdG8gdXNlCisgKiBAdGFnOiB0YWcgdG8gc2V0CisgKiBAdmFyX2FyZ3M6IHRhZyAvIEdWYWx1ZSBwYWlycyB0byBzZXQKKyAqCisgKiBBZGRzIHRoZSBnaXZlbiB0YWcgLyBHVmFsdWUgcGFpcnMgb24gdGhlIHNldHRlciB1c2luZyB0aGUgZ2l2ZW4gbWVyZ2UgbW9kZS4KKyAqIFRoZSBsaXN0IG11c3QgYmUgdGVybWluYXRlZCB3aXRoIE5VTEwuCisgKi8KK3ZvaWQKK2dzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsaXN0X3ZhbHVlcyAoR3N0VGFnU2V0dGVyICogc2V0dGVyLAorICAgIEdzdFRhZ01lcmdlTW9kZSBtb2RlLCBjb25zdCBnY2hhciAqIHRhZywgdmFfbGlzdCB2YXJfYXJncykKK3sKKyAgR3N0VGFnRGF0YSAqZGF0YTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVEFHX1NFVFRFUiAoc2V0dGVyKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9UQUdfTU9ERV9JU19WQUxJRCAobW9kZSkpOworCisgIGRhdGEgPSBnc3RfdGFnX3NldHRlcl9nZXRfZGF0YSAoc2V0dGVyKTsKKworICBnX3N0YXRpY19tdXRleF9sb2NrICgmZGF0YS0+bG9jayk7CisKKyAgaWYgKCFkYXRhLT5saXN0KQorICAgIGRhdGEtPmxpc3QgPSBnc3RfdGFnX2xpc3RfbmV3ICgpOworCisgIGdzdF90YWdfbGlzdF9hZGRfdmFsaXN0X3ZhbHVlcyAoZGF0YS0+bGlzdCwgbW9kZSwgdGFnLCB2YXJfYXJncyk7CisKKyAgZ19zdGF0aWNfbXV0ZXhfdW5sb2NrICgmZGF0YS0+bG9jayk7Cit9CisKKy8qKgorICogZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWx1ZToKKyAqIEBzZXR0ZXI6IGEgI0dzdFRhZ1NldHRlcgorICogQG1vZGU6IHRoZSBtb2RlIHRvIHVzZQorICogQHRhZzogdGFnIHRvIHNldAorICogQHZhbHVlOiBHVmFsdWUgdG8gc2V0IGZvciB0aGUgdGFnCisgKgorICogQWRkcyB0aGUgZ2l2ZW4gdGFnIC8gR1ZhbHVlIHBhaXIgb24gdGhlIHNldHRlciB1c2luZyB0aGUgZ2l2ZW4gbWVyZ2UgbW9kZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICovCit2b2lkCitnc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbHVlIChHc3RUYWdTZXR0ZXIgKiBzZXR0ZXIsCisgICAgR3N0VGFnTWVyZ2VNb2RlIG1vZGUsIGNvbnN0IGdjaGFyICogdGFnLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSkKK3sKKyAgR3N0VGFnRGF0YSAqZGF0YTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVEFHX1NFVFRFUiAoc2V0dGVyKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9UQUdfTU9ERV9JU19WQUxJRCAobW9kZSkpOworCisgIGRhdGEgPSBnc3RfdGFnX3NldHRlcl9nZXRfZGF0YSAoc2V0dGVyKTsKKworICBnX3N0YXRpY19tdXRleF9sb2NrICgmZGF0YS0+bG9jayk7CisKKyAgaWYgKCFkYXRhLT5saXN0KQorICAgIGRhdGEtPmxpc3QgPSBnc3RfdGFnX2xpc3RfbmV3ICgpOworCisgIGdzdF90YWdfbGlzdF9hZGRfdmFsdWUgKGRhdGEtPmxpc3QsIG1vZGUsIHRhZywgdmFsdWUpOworCisgIGdfc3RhdGljX211dGV4X3VubG9jayAoJmRhdGEtPmxvY2spOworfQorCisvKioKKyAqIGdzdF90YWdfc2V0dGVyX2dldF90YWdfbGlzdDoKKyAqIEBzZXR0ZXI6IGEgI0dzdFRhZ1NldHRlcgorICoKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgbGlzdCBvZiB0YWdzIHRoZSBzZXR0ZXIgdXNlcy4gIFRoZSBsaXN0IHNob3VsZCBub3QgYmUKKyAqIG1vZGlmaWVkIG9yIGZyZWVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgbm90IHRocmVhZC1zYWZlLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogYSBjdXJyZW50IHNuYXBzaG90IG9mIHRoZSB0YWdsaXN0IHVzZWQgaW4gdGhlCisgKiAgICAgICAgICBzZXR0ZXIgb3IgTlVMTCBpZiBub25lIGlzIHVzZWQuCisgKi8KK2NvbnN0IEdzdFRhZ0xpc3QgKgorZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19saXN0IChHc3RUYWdTZXR0ZXIgKiBzZXR0ZXIpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVEFHX1NFVFRFUiAoc2V0dGVyKSwgTlVMTCk7CisKKyAgcmV0dXJuIGdzdF90YWdfc2V0dGVyX2dldF9kYXRhIChzZXR0ZXIpLT5saXN0OworfQorCisvKioKKyAqIGdzdF90YWdfc2V0dGVyX3NldF90YWdfbWVyZ2VfbW9kZToKKyAqIEBzZXR0ZXI6IGEgI0dzdFRhZ1NldHRlcgorICogQG1vZGU6IFRoZSBtb2RlIHdpdGggd2hpY2ggdGFncyBhcmUgYWRkZWQKKyAqCisgKiBTZXRzIHRoZSBnaXZlbiBtZXJnZSBtb2RlIHRoYXQgaXMgdXNlZCBmb3IgYWRkaW5nIHRhZ3MgZnJvbSBldmVudHMgdG8gdGFncworICogc3BlY2lmaWVkIGJ5IHRoaXMgaW50ZXJmYWNlLiBUaGUgZGVmYXVsdCBpcyAjR1NUX1RBR19NRVJHRV9LRUVQLCB3aGljaCBrZWVwcworICogdGhlIHRhZ3Mgc2V0IHdpdGggdGhpcyBpbnRlcmZhY2UgYW5kIGRpc2NhcmRzIHRhZ3MgZnJvbSBldmVudHMuCisgKi8KK3ZvaWQKK2dzdF90YWdfc2V0dGVyX3NldF90YWdfbWVyZ2VfbW9kZSAoR3N0VGFnU2V0dGVyICogc2V0dGVyLCBHc3RUYWdNZXJnZU1vZGUgbW9kZSkKK3sKKyAgR3N0VGFnRGF0YSAqZGF0YTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVEFHX1NFVFRFUiAoc2V0dGVyKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9UQUdfTU9ERV9JU19WQUxJRCAobW9kZSkpOworCisgIGRhdGEgPSBnc3RfdGFnX3NldHRlcl9nZXRfZGF0YSAoc2V0dGVyKTsKKworICBnX3N0YXRpY19tdXRleF9sb2NrICgmZGF0YS0+bG9jayk7CisgIGRhdGEtPm1vZGUgPSBtb2RlOworICBnX3N0YXRpY19tdXRleF91bmxvY2sgKCZkYXRhLT5sb2NrKTsKK30KKworLyoqCisgKiBnc3RfdGFnX3NldHRlcl9nZXRfdGFnX21lcmdlX21vZGU6CisgKiBAc2V0dGVyOiBhICNHc3RUYWdTZXR0ZXIKKyAqCisgKiBRdWVyaWVzIHRoZSBtb2RlIGJ5IHdoaWNoIHRhZ3MgaW5zaWRlIHRoZSBzZXR0ZXIgYXJlIG92ZXJ3cml0dGVuIGJ5IHRhZ3MKKyAqIGZyb20gZXZlbnRzCisgKgorICogUmV0dXJuczogdGhlIG1lcmdlIG1vZGUgdXNlZCBpbnNpZGUgdGhlIGVsZW1lbnQuCisgKi8KK0dzdFRhZ01lcmdlTW9kZQorZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19tZXJnZV9tb2RlIChHc3RUYWdTZXR0ZXIgKiBzZXR0ZXIpCit7CisgIEdzdFRhZ01lcmdlTW9kZSBtb2RlOworICBHc3RUYWdEYXRhICpkYXRhOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVEFHX1NFVFRFUiAoc2V0dGVyKSwgR1NUX1RBR19NRVJHRV9VTkRFRklORUQpOworCisgIGRhdGEgPSBnc3RfdGFnX3NldHRlcl9nZXRfZGF0YSAoc2V0dGVyKTsKKworICBnX3N0YXRpY19tdXRleF9sb2NrICgmZGF0YS0+bG9jayk7CisgIG1vZGUgPSBkYXRhLT5tb2RlOworICBnX3N0YXRpY19tdXRleF91bmxvY2sgKCZkYXRhLT5sb2NrKTsKKworICByZXR1cm4gbW9kZTsKK30KZGlmZiAtLWdpdCBhL2dzdC9nc3R0YWdzZXR0ZXIuaCBiL2dzdC9nc3R0YWdzZXR0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM3OTRiCi0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdHRhZ3NldHRlci5oCkBAIC0wLDAgKzEsMTAwIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwMyBCZW5qYW1pbiBPdHRlIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KKyAqCisgKiBnc3R0YWdzZXR0ZXIuaDogSW50ZXJmYWNlcyBmb3IgdGFnZ2luZworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19HU1RfVEFHX1NFVFRFUl9IX18KKyNkZWZpbmUgX19HU1RfVEFHX1NFVFRFUl9IX18KKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEdTVF9UWVBFX1RBR19TRVRURVIJCShnc3RfdGFnX3NldHRlcl9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgR1NUX1RBR19TRVRURVIob2JqKQkJKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfVEFHX1NFVFRFUiwgR3N0VGFnU2V0dGVyKSkKKyNkZWZpbmUgR1NUX0lTX1RBR19TRVRURVIob2JqKQkJKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfVEFHX1NFVFRFUikpCisjZGVmaW5lIEdTVF9UQUdfU0VUVEVSX0dFVF9JRkFDRShvYmopCShHX1RZUEVfSU5TVEFOQ0VfR0VUX0lOVEVSRkFDRSAoKG9iaiksIEdTVF9UWVBFX1RBR19TRVRURVIsIEdzdFRhZ1NldHRlcklGYWNlKSkKKworLyoqCisgKiBHc3RUYWdTZXR0ZXI6CisgKgorICogT3BhcXVlICNHc3RUYWdTZXR0ZXIgZGF0YSBzdHJ1Y3R1cmUuCisgKi8KK3R5cGVkZWYgc3RydWN0IF9Hc3RUYWdTZXR0ZXIJCQlHc3RUYWdTZXR0ZXI7IC8qIER1bW15IHR5cGVkZWYgKi8KK3R5cGVkZWYgc3RydWN0IF9Hc3RUYWdTZXR0ZXJJRmFjZQkJR3N0VGFnU2V0dGVySUZhY2U7CisKKy8qKgorICogR3N0VGFnU2V0dGVySUZhY2U6CisgKiBAZ19pZmFjZTogcGFyZW50IGludGVyZmFjZSB0eXBlLgorICoKKyAqICNHc3RUYWdTZXR0ZXJJRmFjZSBpbnRlcmZhY2UuCisgKi8KKy8qIHVzZSBhbiBlbXB0eSBpbnRlcmZhY2UgaGVyZSB0byBhbGxvdyBkZXRlY3Rpb24gb2YgZWxlbWVudHMgdXNpbmcgdXNlci1zZXQKKyAgIHRhZ3MgKi8KK3N0cnVjdCBfR3N0VGFnU2V0dGVySUZhY2UKK3sKKyAgR1R5cGVJbnRlcmZhY2UgZ19pZmFjZTsKKworICAvKiBzaWduYWxzICovCisKKyAgLyogdmlydHVhbCB0YWJsZSAqLworfTsKKworR1R5cGUJCWdzdF90YWdfc2V0dGVyX2dldF90eXBlCQkgICAgKHZvaWQpOworCit2b2lkCQlnc3RfdGFnX3NldHRlcl9yZXNldF90YWdzICAgICAgICAgICAgIChHc3RUYWdTZXR0ZXIgKiBzZXR0ZXIpOworCit2b2lkCQlnc3RfdGFnX3NldHRlcl9tZXJnZV90YWdzCSAgICAoR3N0VGFnU2V0dGVyICoJc2V0dGVyLAorCQkJCQkJICAgICBjb25zdCBHc3RUYWdMaXN0ICoJbGlzdCwKKwkJCQkJCSAgICAgR3N0VGFnTWVyZ2VNb2RlCW1vZGUpOwordm9pZAkJZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ3MJCSAgICAoR3N0VGFnU2V0dGVyICoJc2V0dGVyLAorCQkJCQkJICAgICBHc3RUYWdNZXJnZU1vZGUJbW9kZSwKKwkJCQkJCSAgICAgY29uc3QgZ2NoYXIgKgl0YWcsCisJCQkJCQkgICAgIC4uLikgR19HTlVDX05VTExfVEVSTUlOQVRFRDsKKwordm9pZAkJZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWx1ZXMJICAgIChHc3RUYWdTZXR0ZXIgKglzZXR0ZXIsCisJCQkJCQkgICAgIEdzdFRhZ01lcmdlTW9kZQltb2RlLAorCQkJCQkJICAgICBjb25zdCBnY2hhciAqCXRhZywKKwkJCQkJCSAgICAgLi4uKSBHX0dOVUNfTlVMTF9URVJNSU5BVEVEOworCit2b2lkICAgICAgICAgICAgZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWxpc3QgIAkgICAgKEdzdFRhZ1NldHRlciAqCXNldHRlciwKKwkJCQkJCSAgICAgR3N0VGFnTWVyZ2VNb2RlCW1vZGUsCisJCQkJCQkgICAgIGNvbnN0IGdjaGFyICoJdGFnLAorCQkJCQkJICAgICB2YV9saXN0CQl2YXJfYXJncyk7CisKK3ZvaWQgICAgICAgICAgICBnc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbGlzdF92YWx1ZXMoR3N0VGFnU2V0dGVyICoJc2V0dGVyLAorCQkJCQkJICAgICBHc3RUYWdNZXJnZU1vZGUJbW9kZSwKKwkJCQkJCSAgICAgY29uc3QgZ2NoYXIgKgl0YWcsCisJCQkJCQkgICAgIHZhX2xpc3QJCXZhcl9hcmdzKTsKKwordm9pZAkJZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWx1ZQkgICAgKEdzdFRhZ1NldHRlciAqCXNldHRlciwKKwkJCQkJCSAgICAgR3N0VGFnTWVyZ2VNb2RlCW1vZGUsCisJCQkJCQkgICAgIGNvbnN0IGdjaGFyICoJdGFnLAorCQkJCQkJICAgICBjb25zdCBHVmFsdWUgKiAgICAgdmFsdWUpOworCitjb25zdCBHc3RUYWdMaXN0ICoKKwkJZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19saXN0CSAgICAgKEdzdFRhZ1NldHRlciAqCXNldHRlcik7CisKK3ZvaWQJCWdzdF90YWdfc2V0dGVyX3NldF90YWdfbWVyZ2VfbW9kZSAgICAoR3N0VGFnU2V0dGVyICoJc2V0dGVyLAorCQkJCQkJICAgICAgR3N0VGFnTWVyZ2VNb2RlCW1vZGUpOworR3N0VGFnTWVyZ2VNb2RlCWdzdF90YWdfc2V0dGVyX2dldF90YWdfbWVyZ2VfbW9kZSAgICAoR3N0VGFnU2V0dGVyICoJc2V0dGVyKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fR1NUX1RBR19TRVRURVJfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0dGFzay5jIGIvZ3N0L2dzdHRhc2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWM2YjdhCi0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdHRhc2suYwpAQCAtMCwwICsxLDg1NSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAgICAgIDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KKyAqCisgKiBnc3R0YXNrLmM6IFN0cmVhbWluZyB0YXNrcworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qKgorICogU0VDVElPTjpnc3R0YXNrCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEFic3RyYWN0aW9uIG9mIEdTdHJlYW1lciBzdHJlYW1pbmcgdGhyZWFkcy4KKyAqIEBzZWVfYWxzbzogI0dzdEVsZW1lbnQsICNHc3RQYWQKKyAqCisgKiAjR3N0VGFzayBpcyB1c2VkIGJ5ICNHc3RFbGVtZW50IGFuZCAjR3N0UGFkIHRvIHByb3ZpZGUgdGhlIGRhdGEgcGFzc2luZworICogdGhyZWFkcyBpbiBhICNHc3RQaXBlbGluZS4KKyAqCisgKiBBICNHc3RQYWQgd2lsbCB0eXBpY2FsbHkgc3RhcnQgYSAjR3N0VGFzayB0byBwdXNoIG9yIHB1bGwgZGF0YSB0by9mcm9tIHRoZQorICogcGVlciBwYWRzLiBNb3N0IHNvdXJjZSBlbGVtZW50cyBzdGFydCBhICNHc3RUYXNrIHRvIHB1c2ggZGF0YS4gSW4gc29tZSBjYXNlcworICogYSBkZW11eGVyIGVsZW1lbnQgY2FuIHN0YXJ0IGEgI0dzdFRhc2sgdG8gcHVsbCBkYXRhIGZyb20gYSBwZWVyIGVsZW1lbnQuIFRoaXMKKyAqIGlzIHR5cGljYWxseSBkb25lIHdoZW4gdGhlIGRlbXV4ZXIgY2FuIHBlcmZvcm0gcmFuZG9tIGFjY2VzcyBvbiB0aGUgdXBzdHJlYW0KKyAqIHBlZXIgZWxlbWVudCBmb3IgaW1wcm92ZWQgcGVyZm9ybWFuY2UuCisgKgorICogQWx0aG91Z2ggY29udmVuaWVuY2UgZnVuY3Rpb25zIGV4aXN0IG9uICNHc3RQYWQgdG8gc3RhcnQvcGF1c2Uvc3RvcCB0YXNrcywgaXQKKyAqIG1pZ2h0IHNvbWV0aW1lcyBiZSBuZWVkZWQgdG8gY3JlYXRlIGEgI0dzdFRhc2sgbWFudWFsbHkgaWYgaXQgaXMgbm90IHJlbGF0ZWQgdG8KKyAqIGEgI0dzdFBhZC4KKyAqCisgKiBCZWZvcmUgdGhlICNHc3RUYXNrIGNhbiBiZSBydW4sIGl0IG5lZWRzIGEgI0dTdGF0aWNSZWNNdXRleCB0aGF0IGNhbiBiZSBzZXQgd2l0aAorICogZ3N0X3Rhc2tfc2V0X2xvY2soKS4KKyAqCisgKiBUaGUgdGFzayBjYW4gYmUgc3RhcnRlZCwgcGF1c2VkIGFuZCBzdG9wcGVkIHdpdGggZ3N0X3Rhc2tfc3RhcnQoKSwgZ3N0X3Rhc2tfcGF1c2UoKQorICogYW5kIGdzdF90YXNrX3N0b3AoKSByZXNwZWN0aXZlbHkgb3Igd2l0aCB0aGUgZ3N0X3Rhc2tfc2V0X3N0YXRlKCkgZnVuY3Rpb24uCisgKgorICogQSAjR3N0VGFzayB3aWxsIHJlcGVhdGVkbHkgY2FsbCB0aGUgI0dzdFRhc2tGdW5jdGlvbiB3aXRoIHRoZSB1c2VyIGRhdGEKKyAqIHRoYXQgd2FzIHByb3ZpZGVkIHdoZW4gY3JlYXRpbmcgdGhlIHRhc2sgd2l0aCBnc3RfdGFza19jcmVhdGUoKS4gV2hpbGUgY2FsbGluZworICogdGhlIGZ1bmN0aW9uIGl0IHdpbGwgYWNxdWlyZSB0aGUgcHJvdmlkZWQgbG9jay4gVGhlIHByb3ZpZGVkIGxvY2sgaXMgcmVsZWFzZWQKKyAqIHdoZW4gdGhlIHRhc2sgcGF1c2VzIG9yIHN0b3BzLgorICoKKyAqIFN0b3BwaW5nIGEgdGFzayB3aXRoIGdzdF90YXNrX3N0b3AoKSB3aWxsIG5vdCBpbW1lZGlhdGVseSBtYWtlIHN1cmUgdGhlIHRhc2sgaXMKKyAqIG5vdCBydW5uaW5nIGFueW1vcmUuIFVzZSBnc3RfdGFza19qb2luKCkgdG8gbWFrZSBzdXJlIHRoZSB0YXNrIGlzIGNvbXBsZXRlbHkKKyAqIHN0b3BwZWQgYW5kIHRoZSB0aHJlYWQgaXMgc3RvcHBlZC4KKyAqCisgKiBBZnRlciBjcmVhdGluZyBhICNHc3RUYXNrLCB1c2UgZ3N0X29iamVjdF91bnJlZigpIHRvIGZyZWUgaXRzIHJlc291cmNlcy4gVGhpcyBjYW4KKyAqIG9ubHkgYmUgZG9uZSBpdCB0aGUgdGFzayBpcyBub3QgcnVubmluZyBhbnltb3JlLgorICoKKyAqIFRhc2sgZnVuY3Rpb25zIGNhbiBzZW5kIGEgI0dzdE1lc3NhZ2UgdG8gc2VuZCBvdXQtb2YtYmFuZCBkYXRhIHRvIHRoZQorICogYXBwbGljYXRpb24uIFRoZSBhcHBsaWNhdGlvbiBjYW4gcmVjZWl2ZSBtZXNzYWdlcyBmcm9tIHRoZSAjR3N0QnVzIGluIGl0cworICogbWFpbmxvb3AuCisgKgorICogRm9yIGRlYnVnZ2luZyBwZXJwb3NlcywgdGhlIHRhc2sgd2lsbCBjb25maWd1cmUgaXRzIG9iamVjdCBuYW1lIGFzIHRoZSB0aHJlYWQKKyAqIG5hbWUgb24gTGludXguIFBsZWFzZSBub3RlIHRoYXQgdGhlIG9iamVjdCBuYW1lIHNob3VsZCBiZSBjb25maWd1cmVkIGJlZm9yZSB0aGUKKyAqIHRhc2sgaXMgc3RhcnRlZDsgY2hhbmdpbmcgdGhlIG9iamVjdCBuYW1lIGFmdGVyIHRoZSB0YXNrIGhhcyBiZWVuIHN0YXJ0ZWQsIGhhcworICogbm8gZWZmZWN0IG9uIHRoZSB0aHJlYWQgbmFtZS4KKyAqCisgKiBMYXN0IHJldmlld2VkIG9uIDIwMTAtMDMtMTUgKDAuMTAuMjkpCisgKi8KKworI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCisKKyNpbmNsdWRlICJnc3RpbmZvLmgiCisjaW5jbHVkZSAiZ3N0dGFzay5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIEhBVkVfU1lTX1BSQ1RMX0gKKyNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KKyNlbmRpZgorCitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDICh0YXNrX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUICh0YXNrX2RlYnVnKQorCisjZGVmaW5lIFNFVF9UQVNLX1NUQVRFKHQscykgKGdfYXRvbWljX2ludF9zZXQgKCZHU1RfVEFTS19TVEFURSh0KSwgKHMpKSkKKyNkZWZpbmUgR0VUX1RBU0tfU1RBVEUodCkgICAoKEdzdFRhc2tTdGF0ZSkgZ19hdG9taWNfaW50X2dldCAoJkdTVF9UQVNLX1NUQVRFKHQpKSkKKworI2RlZmluZSBHU1RfVEFTS19HRVRfUFJJVkFURShvYmopICBcCisgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgob2JqKSwgR1NUX1RZUEVfVEFTSywgR3N0VGFza1ByaXZhdGUpKQorCitzdHJ1Y3QgX0dzdFRhc2tQcml2YXRlCit7CisgIC8qIGNhbGxiYWNrcyBmb3IgbWFuYWdpbmcgdGhlIHRocmVhZCBvZiB0aGlzIHRhc2sgKi8KKyAgR3N0VGFza1RocmVhZENhbGxiYWNrcyB0aHJfY2FsbGJhY2tzOworICBncG9pbnRlciB0aHJfdXNlcl9kYXRhOworICBHRGVzdHJveU5vdGlmeSB0aHJfbm90aWZ5OworCisgIGdib29sZWFuIHByaW9fc2V0OworICBHVGhyZWFkUHJpb3JpdHkgcHJpb3JpdHk7CisKKyAgLyogY29uZmlndXJlZCBwb29sICovCisgIEdzdFRhc2tQb29sICpwb29sOworCisgIC8qIHJlbWVtYmVyIHRoZSBwb29sIGFuZCBpZCB0aGF0IGlzIGN1cnJlbnRseSBydW5uaW5nLiAqLworICBncG9pbnRlciBpZDsKKyAgR3N0VGFza1Bvb2wgKnBvb2xfaWQ7Cit9OworCisjaWZkZWYgX01TQ19WRVIKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK3N0cnVjdCBfVEhSRUFETkFNRV9JTkZPCit7CisgIERXT1JEIGR3VHlwZTsgICAgICAgICAgICAgICAgIC8vIG11c3QgYmUgMHgxMDAwCisgIExQQ1NUUiBzek5hbWU7ICAgICAgICAgICAgICAgIC8vIHBvaW50ZXIgdG8gbmFtZSAoaW4gdXNlciBhZGRyIHNwYWNlKQorICBEV09SRCBkd1RocmVhZElEOyAgICAgICAgICAgICAvLyB0aHJlYWQgSUQgKC0xPWNhbGxlciB0aHJlYWQpCisgIERXT1JEIGR3RmxhZ3M7ICAgICAgICAgICAgICAgIC8vIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLCBtdXN0IGJlIHplcm8KK307Cit0eXBlZGVmIHN0cnVjdCBfVEhSRUFETkFNRV9JTkZPIFRIUkVBRE5BTUVfSU5GTzsKKwordm9pZAorU2V0VGhyZWFkTmFtZSAoRFdPUkQgZHdUaHJlYWRJRCwgTFBDU1RSIHN6VGhyZWFkTmFtZSkKK3sKKyAgVEhSRUFETkFNRV9JTkZPIGluZm87CisgIGluZm8uZHdUeXBlID0gMHgxMDAwOworICBpbmZvLnN6TmFtZSA9IHN6VGhyZWFkTmFtZTsKKyAgaW5mby5kd1RocmVhZElEID0gZHdUaHJlYWRJRDsKKyAgaW5mby5kd0ZsYWdzID0gMDsKKworICBfX3RyeSB7CisgICAgUmFpc2VFeGNlcHRpb24gKDB4NDA2RDEzODgsIDAsIHNpemVvZiAoaW5mbykgLyBzaXplb2YgKERXT1JEKSwKKyAgICAgICAgKERXT1JEICopICYgaW5mbyk7CisgIH0KKyAgX19leGNlcHQgKEVYQ0VQVElPTl9DT05USU5VRV9FWEVDVVRJT04pIHsKKyAgfQorfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGdzdF90YXNrX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKKworc3RhdGljIHZvaWQgZ3N0X3Rhc2tfZnVuYyAoR3N0VGFzayAqIHRhc2spOworCitzdGF0aWMgR1N0YXRpY011dGV4IHBvb2xfbG9jayA9IEdfU1RBVElDX01VVEVYX0lOSVQ7CisKKyNkZWZpbmUgX2RvX2luaXQgXAoreyBcCisgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUICh0YXNrX2RlYnVnLCAidGFzayIsIDAsICJQcm9jZXNzaW5nIHRhc2tzIik7IFwKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdFRhc2ssIGdzdF90YXNrLCBHU1RfVFlQRV9PQkpFQ1QsIF9kb19pbml0KTsKKworc3RhdGljIHZvaWQKK2luaXRfa2xhc3NfcG9vbCAoR3N0VGFza0NsYXNzICoga2xhc3MpCit7CisgIGdfc3RhdGljX211dGV4X2xvY2sgKCZwb29sX2xvY2spOworICBpZiAoa2xhc3MtPnBvb2wpIHsKKyAgICBnc3RfdGFza19wb29sX2NsZWFudXAgKGtsYXNzLT5wb29sKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChrbGFzcy0+cG9vbCk7CisgIH0KKyAga2xhc3MtPnBvb2wgPSBnc3RfdGFza19wb29sX25ldyAoKTsKKyAgZ3N0X3Rhc2tfcG9vbF9wcmVwYXJlIChrbGFzcy0+cG9vbCwgTlVMTCk7CisgIGdfc3RhdGljX211dGV4X3VubG9jayAoJnBvb2xfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfdGFza19jbGFzc19pbml0IChHc3RUYXNrQ2xhc3MgKiBrbGFzcykKK3sKKyAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOworCisgIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOworCisgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAoa2xhc3MsIHNpemVvZiAoR3N0VGFza1ByaXZhdGUpKTsKKworICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF90YXNrX2ZpbmFsaXplOworCisgIGluaXRfa2xhc3NfcG9vbCAoa2xhc3MpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3Rhc2tfaW5pdCAoR3N0VGFzayAqIHRhc2spCit7CisgIEdzdFRhc2tDbGFzcyAqa2xhc3M7CisKKyAga2xhc3MgPSBHU1RfVEFTS19HRVRfQ0xBU1MgKHRhc2spOworCisgIHRhc2stPnByaXYgPSBHU1RfVEFTS19HRVRfUFJJVkFURSAodGFzayk7CisgIHRhc2stPnJ1bm5pbmcgPSBGQUxTRTsKKyAgdGFzay0+dGhyZWFkID0gTlVMTDsKKyAgdGFzay0+bG9jayA9IE5VTEw7CisgIHRhc2stPmNvbmQgPSBnX2NvbmRfbmV3ICgpOworICBTRVRfVEFTS19TVEFURSAodGFzaywgR1NUX1RBU0tfU1RPUFBFRCk7CisgIHRhc2stPnByaXYtPnByaW9fc2V0ID0gRkFMU0U7CisKKyAgLyogdXNlIHRoZSBkZWZhdWx0IGtsYXNzIHBvb2wgZm9yIHRoaXMgdGFzaywgdXNlcnMgY2FuCisgICAqIG92ZXJyaWRlIHRoaXMgbGF0ZXIgKi8KKyAgZ19zdGF0aWNfbXV0ZXhfbG9jayAoJnBvb2xfbG9jayk7CisgIHRhc2stPnByaXYtPnBvb2wgPSBnc3Rfb2JqZWN0X3JlZiAoa2xhc3MtPnBvb2wpOworICBnX3N0YXRpY19tdXRleF91bmxvY2sgKCZwb29sX2xvY2spOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3Rhc2tfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCit7CisgIEdzdFRhc2sgKnRhc2sgPSBHU1RfVEFTSyAob2JqZWN0KTsKKyAgR3N0VGFza1ByaXZhdGUgKnByaXYgPSB0YXNrLT5wcml2OworCisgIEdTVF9ERUJVRyAoInRhc2sgJXAgZmluYWxpemUiLCB0YXNrKTsKKworICBpZiAocHJpdi0+dGhyX25vdGlmeSkKKyAgICBwcml2LT50aHJfbm90aWZ5IChwcml2LT50aHJfdXNlcl9kYXRhKTsKKyAgcHJpdi0+dGhyX25vdGlmeSA9IE5VTEw7CisgIHByaXYtPnRocl91c2VyX2RhdGEgPSBOVUxMOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHByaXYtPnBvb2wpOworCisgIC8qIHRhc2sgdGhyZWFkIGNhbm5vdCBiZSBydW5uaW5nIGhlcmUgc2luY2UgaXQgaG9sZHMgYSByZWYKKyAgICogdG8gdGhlIHRhc2sgc28gdGhhdCB0aGUgZmluYWxpemUgY291bGQgbm90IGhhdmUgaGFwcGVuZWQgKi8KKyAgZ19jb25kX2ZyZWUgKHRhc2stPmNvbmQpOworICB0YXNrLT5jb25kID0gTlVMTDsKKworICBHX09CSkVDVF9DTEFTUyAoZ3N0X3Rhc2tfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Cit9CisKKy8qIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUgb2JqZWN0IExPQ0sgKi8KK3N0YXRpYyB2b2lkCitnc3RfdGFza19jb25maWd1cmVfbmFtZSAoR3N0VGFzayAqIHRhc2spCit7CisjaWYgZGVmaW5lZChIQVZFX1NZU19QUkNUTF9IKSAmJiBkZWZpbmVkKFBSX1NFVF9OQU1FKQorICBjb25zdCBnY2hhciAqbmFtZTsKKyAgZ2NoYXIgdGhyZWFkX25hbWVbMTddID0geyAwLCB9OworCisgIEdTVF9PQkpFQ1RfTE9DSyAodGFzayk7CisgIG5hbWUgPSBHU1RfT0JKRUNUX05BTUUgKHRhc2spOworCisgIC8qIHNldCB0aGUgdGhyZWFkIG5hbWUgdG8gc29tZXRoaW5nIGVhc2lseSBpZGVudGlmaWFibGUgKi8KKyAgaWYgKCFzbnByaW50ZiAodGhyZWFkX25hbWUsIDE3LCAiJXMiLCBHU1RfU1RSX05VTEwgKG5hbWUpKSkgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRhc2ssICJDb3VsZCBub3QgY3JlYXRlIHRocmVhZCBuYW1lIGZvciAnJXMnIiwgbmFtZSk7CisgIH0gZWxzZSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAodGFzaywgIlNldHRpbmcgdGhyZWFkIG5hbWUgdG8gJyVzJyIsIHRocmVhZF9uYW1lKTsKKyAgICBpZiAocHJjdGwgKFBSX1NFVF9OQU1FLCAodW5zaWduZWQgbG9uZyBpbnQpIHRocmVhZF9uYW1lLCAwLCAwLCAwKSkKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRhc2ssICJGYWlsZWQgdG8gc2V0IHRocmVhZCBuYW1lIik7CisgIH0KKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHRhc2spOworI2VuZGlmCisjaWZkZWYgX01TQ19WRVIKKyAgY29uc3QgZ2NoYXIgKm5hbWU7CisgIG5hbWUgPSBHU1RfT0JKRUNUX05BTUUgKHRhc2spOworCisgIC8qIHNldCB0aGUgdGhyZWFkIG5hbWUgdG8gc29tZXRoaW5nIGVhc2lseSBpZGVudGlmaWFibGUgKi8KKyAgR1NUX0RFQlVHX09CSkVDVCAodGFzaywgIlNldHRpbmcgdGhyZWFkIG5hbWUgdG8gJyVzJyIsIG5hbWUpOworICBTZXRUaHJlYWROYW1lICgtMSwgbmFtZSk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQKK2dzdF90YXNrX2Z1bmMgKEdzdFRhc2sgKiB0YXNrKQoreworICBHU3RhdGljUmVjTXV0ZXggKmxvY2s7CisgIEdUaHJlYWQgKnRzZWxmOworICBHc3RUYXNrUHJpdmF0ZSAqcHJpdjsKKworICBwcml2ID0gdGFzay0+cHJpdjsKKworICB0c2VsZiA9IGdfdGhyZWFkX3NlbGYgKCk7CisKKyAgR1NUX0RFQlVHICgiRW50ZXJpbmcgdGFzayAlcCwgdGhyZWFkICVwIiwgdGFzaywgdHNlbGYpOworCisgIC8qIHdlIGhhdmUgdG8gZ3JhYiB0aGUgbG9jayB0byBnZXQgdGhlIG11dGV4LiBXZSBhbHNvCisgICAqIG1hcmsgb3VyIHN0YXRlIHJ1bm5pbmcgc28gdGhhdCBub2JvZHkgY2FuIG1lc3Mgd2l0aAorICAgKiB0aGUgbXV0ZXguICovCisgIEdTVF9PQkpFQ1RfTE9DSyAodGFzayk7CisgIGlmIChHRVRfVEFTS19TVEFURSAodGFzaykgPT0gR1NUX1RBU0tfU1RPUFBFRCkKKyAgICBnb3RvIGV4aXQ7CisgIGxvY2sgPSBHU1RfVEFTS19HRVRfTE9DSyAodGFzayk7CisgIGlmIChHX1VOTElLRUxZIChsb2NrID09IE5VTEwpKQorICAgIGdvdG8gbm9fbG9jazsKKyAgdGFzay0+dGhyZWFkID0gdHNlbGY7CisgIC8qIG9ubHkgdXBkYXRlIHRoZSBwcmlvcml0eSB3aGVuIGl0IHdhcyBjaGFuZ2VkICovCisgIGlmIChwcml2LT5wcmlvX3NldCkKKyAgICBnX3RocmVhZF9zZXRfcHJpb3JpdHkgKHRzZWxmLCBwcml2LT5wcmlvcml0eSk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLICh0YXNrKTsKKworICAvKiBmaXJlIHRoZSBlbnRlcl90aHJlYWQgY2FsbGJhY2sgd2hlbiB3ZSBuZWVkIHRvICovCisgIGlmIChwcml2LT50aHJfY2FsbGJhY2tzLmVudGVyX3RocmVhZCkKKyAgICBwcml2LT50aHJfY2FsbGJhY2tzLmVudGVyX3RocmVhZCAodGFzaywgdHNlbGYsIHByaXYtPnRocl91c2VyX2RhdGEpOworCisgIC8qIGxvY2tpbmcgb3JkZXIgaXMgVEFTS19MT0NLLCBMT0NLICovCisgIGdfc3RhdGljX3JlY19tdXRleF9sb2NrIChsb2NrKTsKKyAgLyogY29uZmlndXJlIHRoZSB0aHJlYWQgbmFtZSBub3cgKi8KKyAgZ3N0X3Rhc2tfY29uZmlndXJlX25hbWUgKHRhc2spOworCisgIHdoaWxlIChHX0xJS0VMWSAoR0VUX1RBU0tfU1RBVEUgKHRhc2spICE9IEdTVF9UQVNLX1NUT1BQRUQpKSB7CisgICAgaWYgKEdfVU5MSUtFTFkgKEdFVF9UQVNLX1NUQVRFICh0YXNrKSA9PSBHU1RfVEFTS19QQVVTRUQpKSB7CisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHRhc2spOworICAgICAgd2hpbGUgKEdfVU5MSUtFTFkgKEdTVF9UQVNLX1NUQVRFICh0YXNrKSA9PSBHU1RfVEFTS19QQVVTRUQpKSB7CisgICAgICAgIGdpbnQgdDsKKworICAgICAgICB0ID0gZ19zdGF0aWNfcmVjX211dGV4X3VubG9ja19mdWxsIChsb2NrKTsKKyAgICAgICAgaWYgKHQgPD0gMCkgeworICAgICAgICAgIGdfd2FybmluZyAoIndyb25nIFNUUkVBTV9MT0NLIGNvdW50ICVkIiwgdCk7CisgICAgICAgIH0KKyAgICAgICAgR1NUX1RBU0tfU0lHTkFMICh0YXNrKTsKKyAgICAgICAgR1NUX1RBU0tfV0FJVCAodGFzayk7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh0YXNrKTsKKyAgICAgICAgLyogbG9ja2luZyBvcmRlci4uICovCisgICAgICAgIGlmICh0ID4gMCkKKyAgICAgICAgICBnX3N0YXRpY19yZWNfbXV0ZXhfbG9ja19mdWxsIChsb2NrLCB0KTsKKworICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHRhc2spOworICAgICAgICBpZiAoR19VTkxJS0VMWSAoR0VUX1RBU0tfU1RBVEUgKHRhc2spID09IEdTVF9UQVNLX1NUT1BQRUQpKSB7CisgICAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHRhc2spOworICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHRhc2spOworICAgIH0KKworICAgIHRhc2stPmZ1bmMgKHRhc2stPmRhdGEpOworICB9Citkb25lOgorICBnX3N0YXRpY19yZWNfbXV0ZXhfdW5sb2NrIChsb2NrKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHRhc2spOworICB0YXNrLT50aHJlYWQgPSBOVUxMOworCitleGl0OgorICBpZiAocHJpdi0+dGhyX2NhbGxiYWNrcy5sZWF2ZV90aHJlYWQpIHsKKyAgICAvKiBmaXJlIHRoZSBsZWF2ZV90aHJlYWQgY2FsbGJhY2sgd2hlbiB3ZSBuZWVkIHRvLiBXZSBuZWVkIHRvIGRvIHRoaXMgYmVmb3JlCisgICAgICogd2Ugc2lnbmFsIHRoZSB0YXNrIGFuZCB3aXRoIHRoZSB0YXNrIGxvY2sgcmVsZWFzZWQuICovCisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHRhc2spOworICAgIHByaXYtPnRocl9jYWxsYmFja3MubGVhdmVfdGhyZWFkICh0YXNrLCB0c2VsZiwgcHJpdi0+dGhyX3VzZXJfZGF0YSk7CisgICAgR1NUX09CSkVDVF9MT0NLICh0YXNrKTsKKyAgfSBlbHNlIHsKKyAgICAvKiByZXN0b3JlIG5vcm1hbCBwcmlvcml0eSB3aGVuIHJlbGVhc2luZyBiYWNrIGludG8gdGhlIHBvb2wsIHdlIHdpbGwgbm90CisgICAgICogdG91Y2ggdGhlIHByaW9yaXR5IHdoZW4gYSBjdXN0b20gY2FsbGJhY2sgaGFzIGJlZW4gaW5zdGFsbGVkLiAqLworICAgIGdfdGhyZWFkX3NldF9wcmlvcml0eSAodHNlbGYsIEdfVEhSRUFEX1BSSU9SSVRZX05PUk1BTCk7CisgIH0KKyAgLyogbm93IHdlIGFsbG93IG1lc3Npbmcgd2l0aCB0aGUgbG9jayBhZ2FpbiBieSBzZXR0aW5nIHRoZSBydW5uaW5nIGZsYWcgdG8KKyAgICogRkFMU0UuIFRvZ2V0aGVyIHdpdGggdGhlIFNJR05BTCB0aGlzIGlzIHRoZSBzaWduIGZvciB0aGUgX2pvaW4oKSB0bworICAgKiBjb21wbGV0ZS4KKyAgICogTm90ZSB0aGF0IHdlIHN0aWxsIGhhdmUgbm90IGRyb3BwZWQgdGhlIGZpbmFsIHJlZiBvbiB0aGUgdGFzay4gV2UgY291bGQKKyAgICogY2hlY2sgaGVyZSBpZiB0aGVyZSBpcyBhIHBlbmRpbmcgam9pbigpIGdvaW5nIG9uIGFuZCBkcm9wIHRoZSBsYXN0IHJlZgorICAgKiBiZWZvcmUgcmVsZWFzaW5nIHRoZSBsb2NrIGFzIHdlIGNhbiBiZSBzdXJlIHRoYXQgYSByZWYgaXMgaGVsZCBieSB0aGUKKyAgICogY2FsbGVyIG9mIHRoZSBqb2luKCkuICovCisgIHRhc2stPnJ1bm5pbmcgPSBGQUxTRTsKKyAgR1NUX1RBU0tfU0lHTkFMICh0YXNrKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHRhc2spOworCisgIEdTVF9ERUJVRyAoIkV4aXQgdGFzayAlcCwgdGhyZWFkICVwIiwgdGFzaywgZ190aHJlYWRfc2VsZiAoKSk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAodGFzayk7CisgIHJldHVybjsKKworbm9fbG9jazoKKyAgeworICAgIGdfd2FybmluZyAoInN0YXJ0aW5nIHRhc2sgd2l0aG91dCBhIGxvY2siKTsKKyAgICBnb3RvIGV4aXQ7CisgIH0KK30KKworLyoqCisgKiBnc3RfdGFza19jbGVhbnVwX2FsbDoKKyAqCisgKiBXYWl0IGZvciBhbGwgdGFza3MgdG8gYmUgc3RvcHBlZC4gVGhpcyBpcyBtYWlubHkgdXNlZCBpbnRlcm5hbGx5CisgKiB0byBlbnN1cmUgcHJvcGVyIGNsZWFudXAgb2YgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGluIHRlc3Qgc3VpdGVzLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK3ZvaWQKK2dzdF90YXNrX2NsZWFudXBfYWxsICh2b2lkKQoreworICBHc3RUYXNrQ2xhc3MgKmtsYXNzOworCisgIGlmICgoa2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVlayAoR1NUX1RZUEVfVEFTSykpKSB7CisgICAgaW5pdF9rbGFzc19wb29sIChrbGFzcyk7CisgIH0KK30KKworLyoqCisgKiBnc3RfdGFza19jcmVhdGU6CisgKiBAZnVuYzogVGhlICNHc3RUYXNrRnVuY3Rpb24gdG8gdXNlCisgKiBAZGF0YTogKGNsb3N1cmUpOiBVc2VyIGRhdGEgdG8gcGFzcyB0byBAZnVuYworICoKKyAqIENyZWF0ZSBhIG5ldyBUYXNrIHRoYXQgd2lsbCByZXBlYXRlZGx5IGNhbGwgdGhlIHByb3ZpZGVkIEBmdW5jCisgKiB3aXRoIEBkYXRhIGFzIGEgcGFyYW1ldGVyLiBUeXBpY2FsbHkgdGhlIHRhc2sgd2lsbCBydW4gaW4KKyAqIGEgbmV3IHRocmVhZC4KKyAqCisgKiBUaGUgZnVuY3Rpb24gY2Fubm90IGJlIGNoYW5nZWQgYWZ0ZXIgdGhlIHRhc2sgaGFzIGJlZW4gY3JlYXRlZC4gWW91CisgKiBtdXN0IGNyZWF0ZSBhIG5ldyAjR3N0VGFzayB0byBjaGFuZ2UgdGhlIGZ1bmN0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBub3QgeWV0IGNyZWF0ZSBhbmQgc3RhcnQgYSB0aHJlYWQuIFVzZSBnc3RfdGFza19zdGFydCgpIG9yCisgKiBnc3RfdGFza19wYXVzZSgpIHRvIGNyZWF0ZSBhbmQgc3RhcnQgdGhlIEdUaHJlYWQuCisgKgorICogQmVmb3JlIHRoZSB0YXNrIGNhbiBiZSB1c2VkLCBhICNHU3RhdGljUmVjTXV0ZXggbXVzdCBiZSBjb25maWd1cmVkIHVzaW5nIHRoZQorICogZ3N0X3Rhc2tfc2V0X2xvY2soKSBmdW5jdGlvbi4gVGhpcyBsb2NrIHdpbGwgYWx3YXlzIGJlIGFjcXVpcmVkIHdoaWxlCisgKiBAZnVuYyBpcyBjYWxsZWQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBIG5ldyAjR3N0VGFzay4KKyAqCisgKiBNVCBzYWZlLgorICovCitHc3RUYXNrICoKK2dzdF90YXNrX2NyZWF0ZSAoR3N0VGFza0Z1bmN0aW9uIGZ1bmMsIGdwb2ludGVyIGRhdGEpCit7CisgIEdzdFRhc2sgKnRhc2s7CisKKyAgdGFzayA9IGdfb2JqZWN0X25ld3YgKEdTVF9UWVBFX1RBU0ssIDAsIE5VTEwpOworICB0YXNrLT5mdW5jID0gZnVuYzsKKyAgdGFzay0+ZGF0YSA9IGRhdGE7CisKKyAgR1NUX0RFQlVHICgiQ3JlYXRlZCB0YXNrICVwIiwgdGFzayk7CisKKyAgcmV0dXJuIHRhc2s7Cit9CisKKy8qKgorICogZ3N0X3Rhc2tfc2V0X2xvY2s6CisgKiBAdGFzazogVGhlICNHc3RUYXNrIHRvIHVzZQorICogQG11dGV4OiBUaGUgI0dNdXRleCB0byB1c2UKKyAqCisgKiBTZXQgdGhlIG11dGV4IHVzZWQgYnkgdGhlIHRhc2suIFRoZSBtdXRleCB3aWxsIGJlIGFjcXVpcmVkIGJlZm9yZQorICogY2FsbGluZyB0aGUgI0dzdFRhc2tGdW5jdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGhhcyB0byBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgZ3N0X3Rhc2tfcGF1c2UoKSBvcgorICogZ3N0X3Rhc2tfc3RhcnQoKS4KKyAqCisgKiBNVCBzYWZlLgorICovCit2b2lkCitnc3RfdGFza19zZXRfbG9jayAoR3N0VGFzayAqIHRhc2ssIEdTdGF0aWNSZWNNdXRleCAqIG11dGV4KQoreworICBHU1RfT0JKRUNUX0xPQ0sgKHRhc2spOworICBpZiAoR19VTkxJS0VMWSAodGFzay0+cnVubmluZykpCisgICAgZ290byBpc19ydW5uaW5nOworICBHU1RfVEFTS19HRVRfTE9DSyAodGFzaykgPSBtdXRleDsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHRhc2spOworCisgIHJldHVybjsKKworICAvKiBFUlJPUlMgKi8KK2lzX3J1bm5pbmc6CisgIHsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAodGFzayk7CisgICAgZ193YXJuaW5nICgiY2Fubm90IGNhbGwgc2V0X2xvY2sgb24gYSBydW5uaW5nIHRhc2siKTsKKyAgfQorfQorCisvKioKKyAqIGdzdF90YXNrX3NldF9wcmlvcml0eToKKyAqIEB0YXNrOiBhICNHc3RUYXNrCisgKiBAcHJpb3JpdHk6IGEgbmV3IHByaW9yaXR5IGZvciBAdGFzaworICoKKyAqIENoYW5nZXMgdGhlIHByaW9yaXR5IG9mIEB0YXNrIHRvIEBwcmlvcml0eS4KKyAqCisgKiBOb3RlOiB0cnkgbm90IHRvIGRlcGVuZCBvbiB0YXNrIHByaW9yaXRpZXMuCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICovCit2b2lkCitnc3RfdGFza19zZXRfcHJpb3JpdHkgKEdzdFRhc2sgKiB0YXNrLCBHVGhyZWFkUHJpb3JpdHkgcHJpb3JpdHkpCit7CisgIEdzdFRhc2tQcml2YXRlICpwcml2OworICBHVGhyZWFkICp0aHJlYWQ7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1RBU0sgKHRhc2spKTsKKworICBwcml2ID0gdGFzay0+cHJpdjsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHRhc2spOworICBwcml2LT5wcmlvX3NldCA9IFRSVUU7CisgIHByaXYtPnByaW9yaXR5ID0gcHJpb3JpdHk7CisgIHRocmVhZCA9IHRhc2stPnRocmVhZDsKKyAgaWYgKHRocmVhZCAhPSBOVUxMKSB7CisgICAgLyogaWYgdGhpcyB0YXNrIGFscmVhZHkgaGFzIGEgdGhyZWFkLCB3ZSBjYW4gY29uZmlndXJlIHRoZSBwcmlvcml0eSByaWdodAorICAgICAqIGF3YXksIGVsc2Ugd2UgZG8gdGhhdCB3aGVuIHdlIGFzc2lnbiBhIHRocmVhZCB0byB0aGUgdGFzay4gKi8KKyAgICBnX3RocmVhZF9zZXRfcHJpb3JpdHkgKHRocmVhZCwgcHJpb3JpdHkpOworICB9CisgIEdTVF9PQkpFQ1RfVU5MT0NLICh0YXNrKTsKK30KKworLyoqCisgKiBnc3RfdGFza19nZXRfcG9vbDoKKyAqIEB0YXNrOiBhICNHc3RUYXNrCisgKgorICogR2V0IHRoZSAjR3N0VGFza1Bvb2wgdGhhdCB0aGlzIHRhc2sgd2lsbCB1c2UgZm9yIGl0cyBzdHJlYW1pbmcKKyAqIHRocmVhZHMuCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0VGFza1Bvb2wgdXNlZCBieSBAdGFzay4gZ3N0X29iamVjdF91bnJlZigpCisgKiBhZnRlciB1c2FnZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICovCitHc3RUYXNrUG9vbCAqCitnc3RfdGFza19nZXRfcG9vbCAoR3N0VGFzayAqIHRhc2spCit7CisgIEdzdFRhc2tQb29sICpyZXN1bHQ7CisgIEdzdFRhc2tQcml2YXRlICpwcml2OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVEFTSyAodGFzayksIE5VTEwpOworCisgIHByaXYgPSB0YXNrLT5wcml2OworCisgIEdTVF9PQkpFQ1RfTE9DSyAodGFzayk7CisgIHJlc3VsdCA9IGdzdF9vYmplY3RfcmVmIChwcml2LT5wb29sKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHRhc2spOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZ3N0X3Rhc2tfc2V0X3Bvb2w6CisgKiBAdGFzazogYSAjR3N0VGFzaworICogQHBvb2w6ICh0cmFuc2ZlciBub25lKTogYSAjR3N0VGFza1Bvb2wKKyAqCisgKiBTZXQgQHBvb2wgYXMgdGhlIG5ldyBHc3RUYXNrUG9vbCBmb3IgQHRhc2suIEFueSBuZXcgc3RyZWFtaW5nIHRocmVhZHMgdGhhdAorICogd2lsbCBiZSBjcmVhdGVkIGJ5IEB0YXNrIHdpbGwgbm93IHVzZSBAcG9vbC4KKyAqCisgKiBNVCBzYWZlLgorICoKKyAqIFNpbmNlOiAwLjEwLjI0CisgKi8KK3ZvaWQKK2dzdF90YXNrX3NldF9wb29sIChHc3RUYXNrICogdGFzaywgR3N0VGFza1Bvb2wgKiBwb29sKQoreworICBHc3RUYXNrUG9vbCAqb2xkOworICBHc3RUYXNrUHJpdmF0ZSAqcHJpdjsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVEFTSyAodGFzaykpOworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVEFTS19QT09MIChwb29sKSk7CisKKyAgcHJpdiA9IHRhc2stPnByaXY7CisKKyAgR1NUX09CSkVDVF9MT0NLICh0YXNrKTsKKyAgaWYgKHByaXYtPnBvb2wgIT0gcG9vbCkgeworICAgIG9sZCA9IHByaXYtPnBvb2w7CisgICAgcHJpdi0+cG9vbCA9IGdzdF9vYmplY3RfcmVmIChwb29sKTsKKyAgfSBlbHNlCisgICAgb2xkID0gTlVMTDsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHRhc2spOworCisgIGlmIChvbGQpCisgICAgZ3N0X29iamVjdF91bnJlZiAob2xkKTsKK30KKworCisvKioKKyAqIGdzdF90YXNrX3NldF90aHJlYWRfY2FsbGJhY2tzOgorICogQHRhc2s6IFRoZSAjR3N0VGFzayB0byB1c2UKKyAqIEBjYWxsYmFja3M6IChpbik6IGEgI0dzdFRhc2tUaHJlYWRDYWxsYmFja3MgcG9pbnRlcgorICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiB1c2VyIGRhdGEgcGFzc2VkIHRvIHRoZSBjYWxsYmFja3MKKyAqIEBub3RpZnk6IGNhbGxlZCB3aGVuIEB1c2VyX2RhdGEgaXMgbm8gbG9uZ2VyIHJlZmVyZW5jZWQKKyAqCisgKiBTZXQgY2FsbGJhY2tzIHdoaWNoIHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBhIG5ldyB0aHJlYWQgaXMgbmVlZGVkLCB0aGUgdGhyZWFkCisgKiBmdW5jdGlvbiBpcyBlbnRlcmVkIGFuZCBsZWZ0IGFuZCB3aGVuIHRoZSB0aHJlYWQgaXMgam9pbmVkLgorICoKKyAqIEJ5IGRlZmF1bHQgYSB0aHJlYWQgZm9yIEB0YXNrIHdpbGwgYmUgY3JlYXRlZCBmcm9tIGEgZGVmYXVsdCB0aHJlYWQgcG9vbC4KKyAqCisgKiBPYmplY3RzIGNhbiB1c2UgY3VzdG9tIEdUaHJlYWRzIG9yIGNhbiBwZXJmb3JtIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBvZgorICogdGhlIHRocmVhZHMgKHN1Y2ggYXMgY2hhbmdpbmcgdGhlIHRocmVhZCBwcmlvcml0eSkgYnkgaW5zdGFsbGluZyBjYWxsYmFja3MuCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICovCit2b2lkCitnc3RfdGFza19zZXRfdGhyZWFkX2NhbGxiYWNrcyAoR3N0VGFzayAqIHRhc2ssCisgICAgR3N0VGFza1RocmVhZENhbGxiYWNrcyAqIGNhbGxiYWNrcywgZ3BvaW50ZXIgdXNlcl9kYXRhLAorICAgIEdEZXN0cm95Tm90aWZ5IG5vdGlmeSkKK3sKKyAgR0Rlc3Ryb3lOb3RpZnkgb2xkX25vdGlmeTsKKworICBnX3JldHVybl9pZl9mYWlsICh0YXNrICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVEFTSyAodGFzaykpOworICBnX3JldHVybl9pZl9mYWlsIChjYWxsYmFja3MgIT0gTlVMTCk7CisKKyAgR1NUX09CSkVDVF9MT0NLICh0YXNrKTsKKyAgb2xkX25vdGlmeSA9IHRhc2stPnByaXYtPnRocl9ub3RpZnk7CisKKyAgaWYgKG9sZF9ub3RpZnkpIHsKKyAgICBncG9pbnRlciBvbGRfZGF0YTsKKworICAgIG9sZF9kYXRhID0gdGFzay0+cHJpdi0+dGhyX3VzZXJfZGF0YTsKKworICAgIHRhc2stPnByaXYtPnRocl91c2VyX2RhdGEgPSBOVUxMOworICAgIHRhc2stPnByaXYtPnRocl9ub3RpZnkgPSBOVUxMOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh0YXNrKTsKKworICAgIG9sZF9ub3RpZnkgKG9sZF9kYXRhKTsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyAodGFzayk7CisgIH0KKyAgdGFzay0+cHJpdi0+dGhyX2NhbGxiYWNrcyA9ICpjYWxsYmFja3M7CisgIHRhc2stPnByaXYtPnRocl91c2VyX2RhdGEgPSB1c2VyX2RhdGE7CisgIHRhc2stPnByaXYtPnRocl9ub3RpZnkgPSBub3RpZnk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLICh0YXNrKTsKK30KKworLyoqCisgKiBnc3RfdGFza19nZXRfc3RhdGU6CisgKiBAdGFzazogVGhlICNHc3RUYXNrIHRvIHF1ZXJ5CisgKgorICogR2V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSB0YXNrLgorICoKKyAqIFJldHVybnM6IFRoZSAjR3N0VGFza1N0YXRlIG9mIHRoZSB0YXNrCisgKgorICogTVQgc2FmZS4KKyAqLworR3N0VGFza1N0YXRlCitnc3RfdGFza19nZXRfc3RhdGUgKEdzdFRhc2sgKiB0YXNrKQoreworICBHc3RUYXNrU3RhdGUgcmVzdWx0OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVEFTSyAodGFzayksIEdTVF9UQVNLX1NUT1BQRUQpOworCisgIHJlc3VsdCA9IEdFVF9UQVNLX1NUQVRFICh0YXNrKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBtYWtlIHN1cmUgdGhlIHRhc2sgaXMgcnVubmluZyBhbmQgc3RhcnQgYSB0aHJlYWQgaWYgaXQncyBub3QuCisgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHRhc2sgTE9DSy4gKi8KK3N0YXRpYyBnYm9vbGVhbgorc3RhcnRfdGFzayAoR3N0VGFzayAqIHRhc2spCit7CisgIGdib29sZWFuIHJlcyA9IFRSVUU7CisgIEdFcnJvciAqZXJyb3IgPSBOVUxMOworICBHc3RUYXNrUHJpdmF0ZSAqcHJpdjsKKworICBwcml2ID0gdGFzay0+cHJpdjsKKworICAvKiBuZXcgdGFzaywgV2UgcmVmIGJlZm9yZSBzbyB0aGF0IGl0IHJlbWFpbnMgYWxpdmUgd2hpbGUKKyAgICogdGhlIHRocmVhZCBpcyBydW5uaW5nLiAqLworICBnc3Rfb2JqZWN0X3JlZiAodGFzayk7CisgIC8qIG1hcmsgdGFzayBhcyBydW5uaW5nIHNvIHRoYXQgYSBqb2luIHdpbGwgd2FpdCB1bnRpbCB3ZSBzY2hlZHVsZQorICAgKiBhbmQgZXhpdCB0aGUgdGFzayBmdW5jdGlvbi4gKi8KKyAgdGFzay0+cnVubmluZyA9IFRSVUU7CisKKyAgLyogcHVzaCBvbiB0aGUgdGhyZWFkIHBvb2wsIHdlIHJlbWVtYmVyIHRoZSBvcmlnaW5hbCBwb29sIGJlY2F1c2UgdGhlIHVzZXIKKyAgICogY291bGQgY2hhbmdlIGl0IGxhdGVyIG9uIGFuZCB0aGVuIHdlIGpvaW4gdG8gdGhlIHdyb25nIHBvb2wuICovCisgIHByaXYtPnBvb2xfaWQgPSBnc3Rfb2JqZWN0X3JlZiAocHJpdi0+cG9vbCk7CisgIHByaXYtPmlkID0KKyAgICAgIGdzdF90YXNrX3Bvb2xfcHVzaCAocHJpdi0+cG9vbF9pZCwgKEdzdFRhc2tQb29sRnVuY3Rpb24pIGdzdF90YXNrX2Z1bmMsCisgICAgICB0YXNrLCAmZXJyb3IpOworCisgIGlmIChlcnJvciAhPSBOVUxMKSB7CisgICAgZ193YXJuaW5nICgiZmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgIGdfZXJyb3JfZnJlZSAoZXJyb3IpOworICAgIHJlcyA9IEZBTFNFOworICB9CisgIHJldHVybiByZXM7Cit9CisKKworLyoqCisgKiBnc3RfdGFza19zZXRfc3RhdGU6CisgKiBAdGFzazogYSAjR3N0VGFzaworICogQHN0YXRlOiB0aGUgbmV3IHRhc2sgc3RhdGUKKyAqCisgKiBTZXRzIHRoZSBzdGF0ZSBvZiBAdGFzayB0byBAc3RhdGUuCisgKgorICogVGhlIEB0YXNrIG11c3QgaGF2ZSBhIGxvY2sgYXNzb2NpYXRlZCB3aXRoIGl0IHVzaW5nCisgKiBnc3RfdGFza19zZXRfbG9jaygpIHdoZW4gZ29pbmcgdG8gR1NUX1RBU0tfU1RBUlRFRCBvciBHU1RfVEFTS19QQVVTRUQgb3IKKyAqIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gJUZBTFNFLgorICoKKyAqIE1UIHNhZmUuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHN0YXRlIGNvdWxkIGJlIGNoYW5nZWQuCisgKgorICogU2luY2U6IDAuMTAuMjQKKyAqLworZ2Jvb2xlYW4KK2dzdF90YXNrX3NldF9zdGF0ZSAoR3N0VGFzayAqIHRhc2ssIEdzdFRhc2tTdGF0ZSBzdGF0ZSkKK3sKKyAgR3N0VGFza1N0YXRlIG9sZDsKKyAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1RBU0sgKHRhc2spLCBGQUxTRSk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAodGFzaywgIkNoYW5naW5nIHRhc2sgJXAgdG8gc3RhdGUgJWQiLCB0YXNrLCBzdGF0ZSk7CisKKyAgR1NUX09CSkVDVF9MT0NLICh0YXNrKTsKKyAgaWYgKHN0YXRlICE9IEdTVF9UQVNLX1NUT1BQRUQpCisgICAgaWYgKEdfVU5MSUtFTFkgKEdTVF9UQVNLX0dFVF9MT0NLICh0YXNrKSA9PSBOVUxMKSkKKyAgICAgIGdvdG8gbm9fbG9jazsKKworICAvKiBpZiB0aGUgc3RhdGUgY2hhbmdlZCwgZG8gb3VyIHRoaW5nICovCisgIG9sZCA9IEdFVF9UQVNLX1NUQVRFICh0YXNrKTsKKyAgaWYgKG9sZCAhPSBzdGF0ZSkgeworICAgIFNFVF9UQVNLX1NUQVRFICh0YXNrLCBzdGF0ZSk7CisgICAgc3dpdGNoIChvbGQpIHsKKyAgICAgIGNhc2UgR1NUX1RBU0tfU1RPUFBFRDoKKyAgICAgICAgLyogSWYgdGhlIHRhc2sgYWxyZWFkeSBoYXMgYSB0aHJlYWQgc2NoZWR1bGVkIHdlIGRvbid0IGhhdmUgdG8gZG8KKyAgICAgICAgICogYW55dGhpbmcuICovCisgICAgICAgIGlmIChHX1VOTElLRUxZICghdGFzay0+cnVubmluZykpCisgICAgICAgICAgcmVzID0gc3RhcnRfdGFzayAodGFzayk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHU1RfVEFTS19QQVVTRUQ6CisgICAgICAgIC8qIHdoZW4gd2UgYXJlIHBhdXNlZCwgc2lnbmFsIHRvIGdvIHRvIHRoZSBuZXcgc3RhdGUgKi8KKyAgICAgICAgR1NUX1RBU0tfU0lHTkFMICh0YXNrKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9UQVNLX1NUQVJURUQ6CisgICAgICAgIC8qIGlmIHdlIHdlcmUgc3RhcnRlZCwgd2UnbGwgZ28gdG8gdGhlIG5ldyBzdGF0ZSBhZnRlciB0aGUgbmV4dAorICAgICAgICAgKiBpdGVyYXRpb24uICovCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBHU1RfT0JKRUNUX1VOTE9DSyAodGFzayk7CisKKyAgcmV0dXJuIHJlczsKKworICAvKiBFUlJPUlMgKi8KK25vX2xvY2s6CisgIHsKKyAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHRhc2ssICJzdGF0ZSAlZCBzZXQgb24gdGFzayB3aXRob3V0IGEgbG9jayIsIHN0YXRlKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAodGFzayk7CisgICAgZ193YXJuaW5nICgidGFzayB3aXRob3V0IGEgbG9jayBjYW4ndCBiZSBzZXQgdG8gc3RhdGUgJWQiLCBzdGF0ZSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKKy8qKgorICogZ3N0X3Rhc2tfc3RhcnQ6CisgKiBAdGFzazogVGhlICNHc3RUYXNrIHRvIHN0YXJ0CisgKgorICogU3RhcnRzIEB0YXNrLiBUaGUgQHRhc2sgbXVzdCBoYXZlIGEgbG9jayBhc3NvY2lhdGVkIHdpdGggaXQgdXNpbmcKKyAqIGdzdF90YXNrX3NldF9sb2NrKCkgb3IgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiAlRkFMU0UuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHRhc2sgY291bGQgYmUgc3RhcnRlZC4KKyAqCisgKiBNVCBzYWZlLgorICovCitnYm9vbGVhbgorZ3N0X3Rhc2tfc3RhcnQgKEdzdFRhc2sgKiB0YXNrKQoreworICByZXR1cm4gZ3N0X3Rhc2tfc2V0X3N0YXRlICh0YXNrLCBHU1RfVEFTS19TVEFSVEVEKTsKK30KKworLyoqCisgKiBnc3RfdGFza19zdG9wOgorICogQHRhc2s6IFRoZSAjR3N0VGFzayB0byBzdG9wCisgKgorICogU3RvcHMgQHRhc2suIFRoaXMgbWV0aG9kIG1lcmVseSBzY2hlZHVsZXMgdGhlIHRhc2sgdG8gc3RvcCBhbmQKKyAqIHdpbGwgbm90IHdhaXQgZm9yIHRoZSB0YXNrIHRvIGhhdmUgY29tcGxldGVseSBzdG9wcGVkLiBVc2UKKyAqIGdzdF90YXNrX2pvaW4oKSB0byBzdG9wIGFuZCB3YWl0IGZvciBjb21wbGV0aW9uLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSB0YXNrIGNvdWxkIGJlIHN0b3BwZWQuCisgKgorICogTVQgc2FmZS4KKyAqLworZ2Jvb2xlYW4KK2dzdF90YXNrX3N0b3AgKEdzdFRhc2sgKiB0YXNrKQoreworICByZXR1cm4gZ3N0X3Rhc2tfc2V0X3N0YXRlICh0YXNrLCBHU1RfVEFTS19TVE9QUEVEKTsKK30KKworLyoqCisgKiBnc3RfdGFza19wYXVzZToKKyAqIEB0YXNrOiBUaGUgI0dzdFRhc2sgdG8gcGF1c2UKKyAqCisgKiBQYXVzZXMgQHRhc2suIFRoaXMgbWV0aG9kIGNhbiBhbHNvIGJlIGNhbGxlZCBvbiBhIHRhc2sgaW4gdGhlCisgKiBzdG9wcGVkIHN0YXRlLCBpbiB3aGljaCBjYXNlIGEgdGhyZWFkIHdpbGwgYmUgc3RhcnRlZCBhbmQgd2lsbCByZW1haW4KKyAqIGluIHRoZSBwYXVzZWQgc3RhdGUuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgd2FpdCBmb3IgdGhlIHRhc2sgdG8gY29tcGxldGUKKyAqIHRoZSBwYXVzZWQgc3RhdGUuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHRhc2sgY291bGQgYmUgcGF1c2VkLgorICoKKyAqIE1UIHNhZmUuCisgKi8KK2dib29sZWFuCitnc3RfdGFza19wYXVzZSAoR3N0VGFzayAqIHRhc2spCit7CisgIHJldHVybiBnc3RfdGFza19zZXRfc3RhdGUgKHRhc2ssIEdTVF9UQVNLX1BBVVNFRCk7Cit9CisKKy8qKgorICogZ3N0X3Rhc2tfam9pbjoKKyAqIEB0YXNrOiBUaGUgI0dzdFRhc2sgdG8gam9pbgorICoKKyAqIEpvaW5zIEB0YXNrLiBBZnRlciB0aGlzIGNhbGwsIGl0IGlzIHNhZmUgdG8gdW5yZWYgdGhlIHRhc2sKKyAqIGFuZCBjbGVhbiB1cCB0aGUgbG9jayBzZXQgd2l0aCBnc3RfdGFza19zZXRfbG9jaygpLgorICoKKyAqIFRoZSB0YXNrIHdpbGwgYXV0b21hdGljYWxseSBiZSBzdG9wcGVkIHdpdGggdGhpcyBjYWxsLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2Fubm90IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhIHRhc2sgZnVuY3Rpb24gYXMgdGhpcworICogd291bGQgY2F1c2UgYSBkZWFkbG9jay4gVGhlIGZ1bmN0aW9uIHdpbGwgZGV0ZWN0IHRoaXMgYW5kIHByaW50IGEKKyAqIGdfd2FybmluZy4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdGFzayBjb3VsZCBiZSBqb2luZWQuCisgKgorICogTVQgc2FmZS4KKyAqLworZ2Jvb2xlYW4KK2dzdF90YXNrX2pvaW4gKEdzdFRhc2sgKiB0YXNrKQoreworICBHVGhyZWFkICp0c2VsZjsKKyAgR3N0VGFza1ByaXZhdGUgKnByaXY7CisgIGdwb2ludGVyIGlkOworICBHc3RUYXNrUG9vbCAqcG9vbCA9IE5VTEw7CisKKyAgcHJpdiA9IHRhc2stPnByaXY7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19UQVNLICh0YXNrKSwgRkFMU0UpOworCisgIHRzZWxmID0gZ190aHJlYWRfc2VsZiAoKTsKKworICBHU1RfREVCVUdfT0JKRUNUICh0YXNrLCAiSm9pbmluZyB0YXNrICVwLCB0aHJlYWQgJXAiLCB0YXNrLCB0c2VsZik7CisKKyAgLyogd2UgZG9uJ3QgdXNlIGEgcmVhbCB0aHJlYWQgam9pbiBoZXJlIGJlY2F1c2Ugd2UgYXJlIHVzaW5nCisgICAqIHRocmVhZCBwb29scyAqLworICBHU1RfT0JKRUNUX0xPQ0sgKHRhc2spOworICBpZiAoR19VTkxJS0VMWSAodHNlbGYgPT0gdGFzay0+dGhyZWFkKSkKKyAgICBnb3RvIGpvaW5pbmdfc2VsZjsKKyAgU0VUX1RBU0tfU1RBVEUgKHRhc2ssIEdTVF9UQVNLX1NUT1BQRUQpOworICAvKiBzaWduYWwgdGhlIHN0YXRlIGNoYW5nZSBmb3Igd2hlbiBpdCB3YXMgYmxvY2tlZCBpbiBQQVVTRUQuICovCisgIEdTVF9UQVNLX1NJR05BTCAodGFzayk7CisgIC8qIHdlIHNldCB0aGUgcnVubmluZyBmbGFnIHdoZW4gcHVzaGluZyB0aGUgdGFzayBvbiB0aGUgdGhyZWFkIHBvb2wuCisgICAqIFRoaXMgbWVhbnMgdGhhdCB0aGUgdGFzayBmdW5jdGlvbiBtaWdodCBub3QgYmUgY2FsbGVkIHdoZW4gd2UgdHJ5CisgICAqIHRvIGpvaW4gaXQgaGVyZS4gKi8KKyAgd2hpbGUgKEdfTElLRUxZICh0YXNrLT5ydW5uaW5nKSkKKyAgICBHU1RfVEFTS19XQUlUICh0YXNrKTsKKyAgLyogY2xlYW4gdGhlIHRocmVhZCAqLworICB0YXNrLT50aHJlYWQgPSBOVUxMOworICAvKiBnZXQgdGhlIGlkIGFuZCBwb29sIHRvIGpvaW4gKi8KKyAgcG9vbCA9IHByaXYtPnBvb2xfaWQ7CisgIGlkID0gcHJpdi0+aWQ7CisgIHByaXYtPnBvb2xfaWQgPSBOVUxMOworICBwcml2LT5pZCA9IE5VTEw7CisgIEdTVF9PQkpFQ1RfVU5MT0NLICh0YXNrKTsKKworICBpZiAocG9vbCkgeworICAgIGlmIChpZCkKKyAgICAgIGdzdF90YXNrX3Bvb2xfam9pbiAocG9vbCwgaWQpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKHBvb2wpOworICB9CisKKyAgR1NUX0RFQlVHX09CSkVDVCAodGFzaywgIkpvaW5lZCB0YXNrICVwIiwgdGFzayk7CisKKyAgcmV0dXJuIFRSVUU7CisKKyAgLyogRVJST1JTICovCitqb2luaW5nX3NlbGY6CisgIHsKKyAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHRhc2ssICJ0cnlpbmcgdG8gam9pbiB0YXNrIGZyb20gaXRzIHRocmVhZCIpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh0YXNrKTsKKyAgICBnX3dhcm5pbmcgKCJcblRyeWluZyB0byBqb2luIHRhc2sgJXAgZnJvbSBpdHMgdGhyZWFkIHdvdWxkIGRlYWRsb2NrLlxuIgorICAgICAgICAiWW91IGNhbm5vdCBjaGFuZ2UgdGhlIHN0YXRlIG9mIGFuIGVsZW1lbnQgZnJvbSBpdHMgc3RyZWFtaW5nXG4iCisgICAgICAgICJ0aHJlYWQuIFVzZSBnX2lkbGVfYWRkKCkgb3IgcG9zdCBhIEdzdE1lc3NhZ2Ugb24gdGhlIGJ1cyB0b1xuIgorICAgICAgICAic2NoZWR1bGUgdGhlIHN0YXRlIGNoYW5nZSBmcm9tIHRoZSBtYWluIHRocmVhZC5cbiIsIHRhc2spOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHRhc2suaCBiL2dzdC9nc3R0YXNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE3ODRiNwotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3R0YXNrLmgKQEAgLTAsMCArMSwyMDEgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgPDIwMDU+IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+CisgKgorICogZ3N0dGFzay5oOiBTdHJlYW1pbmcgdGFza3MKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fR1NUX1RBU0tfSF9fCisjZGVmaW5lIF9fR1NUX1RBU0tfSF9fCisKKyNpbmNsdWRlIDxnc3QvZ3N0b2JqZWN0Lmg+CisjaW5jbHVkZSA8Z3N0L2dzdHRhc2twb29sLmg+CisKK0dfQkVHSU5fREVDTFMKKworLyoqCisgKiBHc3RUYXNrRnVuY3Rpb246CisgKiBAZGF0YTogdXNlciBkYXRhIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24KKyAqCisgKiBBIGZ1bmN0aW9uIHRoYXQgd2lsbCByZXBlYXRlZGx5IGJlIGNhbGxlZCBpbiB0aGUgdGhyZWFkIGNyZWF0ZWQgYnkKKyAqIGEgI0dzdFRhc2suCisgKi8KK3R5cGVkZWYgdm9pZCAgICAgICAgICgqR3N0VGFza0Z1bmN0aW9uKSAgICAgICAgICAodm9pZCAqZGF0YSk7CisKKy8qIC0tLSBzdGFuZGFyZCB0eXBlIG1hY3JvcyAtLS0gKi8KKyNkZWZpbmUgR1NUX1RZUEVfVEFTSyAgICAgICAgICAgICAgICAgICAoZ3N0X3Rhc2tfZ2V0X3R5cGUgKCkpCisjZGVmaW5lIEdTVF9UQVNLKHRhc2spICAgICAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgodGFzayksIEdTVF9UWVBFX1RBU0ssIEdzdFRhc2spKQorI2RlZmluZSBHU1RfSVNfVEFTSyh0YXNrKSAgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKHRhc2spLCBHU1RfVFlQRV9UQVNLKSkKKyNkZWZpbmUgR1NUX1RBU0tfQ0xBU1ModGNsYXNzKSAgICAgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKCh0Y2xhc3MpLCBHU1RfVFlQRV9UQVNLLCBHc3RUYXNrQ2xhc3MpKQorI2RlZmluZSBHU1RfSVNfVEFTS19DTEFTUyh0Y2xhc3MpICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKHRjbGFzcyksIEdTVF9UWVBFX1RBU0spKQorI2RlZmluZSBHU1RfVEFTS19HRVRfQ0xBU1ModGFzaykgICAgICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgodGFzayksIEdTVF9UWVBFX1RBU0ssIEdzdFRhc2tDbGFzcykpCisjZGVmaW5lIEdTVF9UQVNLX0NBU1QodGFzaykgICAgICAgICAgICAgKChHc3RUYXNrKikodGFzaykpCisKK3R5cGVkZWYgc3RydWN0IF9Hc3RUYXNrIEdzdFRhc2s7Cit0eXBlZGVmIHN0cnVjdCBfR3N0VGFza0NsYXNzIEdzdFRhc2tDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9Hc3RUYXNrUHJpdmF0ZSBHc3RUYXNrUHJpdmF0ZTsKKworLyoqCisgKiBHc3RUYXNrU3RhdGU6CisgKiBAR1NUX1RBU0tfU1RBUlRFRDogdGhlIHRhc2sgaXMgc3RhcnRlZCBhbmQgcnVubmluZworICogQEdTVF9UQVNLX1NUT1BQRUQ6IHRoZSB0YXNrIGlzIHN0b3BwZWQKKyAqIEBHU1RfVEFTS19QQVVTRUQ6IHRoZSB0YXNrIGlzIHBhdXNlZAorICoKKyAqIFRoZSBkaWZmZXJlbnQgc3RhdGVzIGEgdGFzayBjYW4gYmUgaW4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgR1NUX1RBU0tfU1RBUlRFRCwKKyAgR1NUX1RBU0tfU1RPUFBFRCwKKyAgR1NUX1RBU0tfUEFVU0VECit9IEdzdFRhc2tTdGF0ZTsKKworLyoqCisgKiBHU1RfVEFTS19TVEFURToKKyAqIEB0YXNrOiBUYXNrIHRvIGdldCB0aGUgc3RhdGUgb2YKKyAqCisgKiBHZXQgYWNjZXNzIHRvIHRoZSBzdGF0ZSBvZiB0aGUgdGFzay4KKyAqLworI2RlZmluZSBHU1RfVEFTS19TVEFURSh0YXNrKSAgICAgICAgICAgIChHU1RfVEFTS19DQVNUKHRhc2spLT5zdGF0ZSkKKworLyoqCisgKiBHU1RfVEFTS19HRVRfQ09ORDoKKyAqIEB0YXNrOiBUYXNrIHRvIGdldCB0aGUgY29uZCBvZgorICoKKyAqIEdldCBhY2Nlc3MgdG8gdGhlIGNvbmQgb2YgdGhlIHRhc2suCisgKi8KKyNkZWZpbmUgR1NUX1RBU0tfR0VUX0NPTkQodGFzaykgICAgICAgICAoR1NUX1RBU0tfQ0FTVCh0YXNrKS0+Y29uZCkKKy8qKgorICogR1NUX1RBU0tfV0FJVDoKKyAqIEB0YXNrOiBUYXNrIHRvIHdhaXQgZm9yCisgKgorICogV2FpdCBmb3IgdGhlIHRhc2sgY29uZCB0byBiZSBzaWduYWxsZWQKKyAqLworI2RlZmluZSBHU1RfVEFTS19XQUlUKHRhc2spICAgICAgICAgICAgIGdfY29uZF93YWl0KEdTVF9UQVNLX0dFVF9DT05EICh0YXNrKSwgR1NUX09CSkVDVF9HRVRfTE9DSyAodGFzaykpCisvKioKKyAqIEdTVF9UQVNLX1NJR05BTDoKKyAqIEB0YXNrOiBUYXNrIHRvIHNpZ25hbAorICoKKyAqIFNpZ25hbCB0aGUgdGFzayBjb25kCisgKi8KKyNkZWZpbmUgR1NUX1RBU0tfU0lHTkFMKHRhc2spICAgICAgICAgICBnX2NvbmRfc2lnbmFsKEdTVF9UQVNLX0dFVF9DT05EICh0YXNrKSkKKy8qKgorICogR1NUX1RBU0tfQlJPQURDQVNUOgorICogQHRhc2s6IFRhc2sgdG8gYnJvYWRjYXN0CisgKgorICogU2VuZCBhIGJyb2FkY2FzdCBzaWduYWwgdG8gYWxsIHdhaXRpbmcgdGFzayBjb25kcworICovCisjZGVmaW5lIEdTVF9UQVNLX0JST0FEQ0FTVCh0YXNrKSAgICAgICAgZ19jb25kX2Jyb2FkY2FzdChHU1RfVEFTS19HRVRfQ09ORCAodGFzaykpCisKKy8qKgorICogR1NUX1RBU0tfR0VUX0xPQ0s6CisgKiBAdGFzazogVGFzayB0byBnZXQgdGhlIGxvY2sgb2YKKyAqCisgKiBHZXQgYWNjZXNzIHRvIHRoZSB0YXNrIGxvY2suCisgKi8KKyNkZWZpbmUgR1NUX1RBU0tfR0VUX0xPQ0sodGFzaykgICAgICAgICAoR1NUX1RBU0tfQ0FTVCh0YXNrKS0+bG9jaykKKworLyoqCisgKiBHc3RUYXNrVGhyZWFkQ2FsbGJhY2tzOgorICogQGVudGVyX3RocmVhZDogYSB0aHJlYWQgaXMgZW50ZXJlZCwgdGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgbmV3CisgKiAgIHRocmVhZCBlbnRlcnMgaXRzIGZ1bmN0aW9uLgorICogQGxlYXZlX3RocmVhZDogYSB0aHJlYWQgaXMgZXhpdGluZywgdGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgdGhyZWFkIGlzIGFib3V0CisgKiAgIHRvIGxlYXZlIGl0cyBmdW5jdGlvbgorICoKKyAqIEN1c3RvbSBHc3RUYXNrIHRocmVhZCBjYWxsYmFjayBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgaW5zdGFsbGVkLiAKKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICovCit0eXBlZGVmIHN0cnVjdCB7CisgIC8qIG1hbmFnZSB0aGUgbGlmZXRpbWUgb2YgdGhlIHRocmVhZCAqLworICB2b2lkICAgICAgKCplbnRlcl90aHJlYWQpICAgICAoR3N0VGFzayAqdGFzaywgR1RocmVhZCAqdGhyZWFkLCBncG9pbnRlciB1c2VyX2RhdGEpOworICB2b2lkICAgICAgKCpsZWF2ZV90aHJlYWQpICAgICAoR3N0VGFzayAqdGFzaywgR1RocmVhZCAqdGhyZWFkLCBncG9pbnRlciB1c2VyX2RhdGEpOworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgZ3BvaW50ZXIgICAgIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOworfSBHc3RUYXNrVGhyZWFkQ2FsbGJhY2tzOworCisvKioKKyAqIEdzdFRhc2s6CisgKiBAc3RhdGU6IHRoZSBzdGF0ZSBvZiB0aGUgdGFzaworICogQGNvbmQ6IHVzZWQgdG8gcGF1c2UvcmVzdW1lIHRoZSB0YXNrCisgKiBAbG9jazogVGhlIGxvY2sgdGFrZW4gd2hlbiBpdGVyYXRpbmcgdGhlIHRhc2sgZnVuY3Rpb24KKyAqIEBmdW5jOiB0aGUgZnVuY3Rpb24gZXhlY3V0ZWQgYnkgdGhpcyB0YXNrCisgKiBAZGF0YTogZGF0YSBwYXNzZWQgdG8gdGhlIHRhc2sgZnVuY3Rpb24KKyAqIEBydW5uaW5nOiBhIGZsYWcgaW5kaWNhdGluZyB0aGF0IHRoZSB0YXNrIGlzIHJ1bm5pbmcKKyAqCisgKiBUaGUgI0dzdFRhc2sgb2JqZWN0LgorICovCitzdHJ1Y3QgX0dzdFRhc2sgeworICBHc3RPYmplY3QgICAgICBvYmplY3Q7CisKKyAgLyo8IHB1YmxpYyA+Ki8gLyogd2l0aCBMT0NLICovCisgIEdzdFRhc2tTdGF0ZSAgICAgc3RhdGU7CisgIEdDb25kICAgICAgICAgICAqY29uZDsKKworICBHU3RhdGljUmVjTXV0ZXggKmxvY2s7CisKKyAgR3N0VGFza0Z1bmN0aW9uICBmdW5jOworICBncG9pbnRlciAgICAgICAgIGRhdGE7CisKKyAgZ2Jvb2xlYW4gICAgICAgICBydW5uaW5nOworCisgIC8qPCBwcml2YXRlID4qLworICBHVGhyZWFkICAgICAgICAgKnRocmVhZDsKKworICBHc3RUYXNrUHJpdmF0ZSAgKnByaXY7CisKKyAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Cit9OworCitzdHJ1Y3QgX0dzdFRhc2tDbGFzcyB7CisgIEdzdE9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgR3N0VGFza1Bvb2wgKnBvb2w7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOworfTsKKwordm9pZCAgICAgICAgICAgIGdzdF90YXNrX2NsZWFudXBfYWxsICAgICh2b2lkKTsKKworR1R5cGUgICAgICAgICAgIGdzdF90YXNrX2dldF90eXBlICAgICAgICh2b2lkKTsKKworR3N0VGFzayogICAgICAgIGdzdF90YXNrX2NyZWF0ZSAgICAgICAgIChHc3RUYXNrRnVuY3Rpb24gZnVuYywgZ3BvaW50ZXIgZGF0YSk7Cit2b2lkICAgICAgICAgICAgZ3N0X3Rhc2tfc2V0X2xvY2sgICAgICAgKEdzdFRhc2sgKnRhc2ssIEdTdGF0aWNSZWNNdXRleCAqbXV0ZXgpOwordm9pZCAgICAgICAgICAgIGdzdF90YXNrX3NldF9wcmlvcml0eSAgIChHc3RUYXNrICp0YXNrLCBHVGhyZWFkUHJpb3JpdHkgcHJpb3JpdHkpOworCitHc3RUYXNrUG9vbCAqICAgZ3N0X3Rhc2tfZ2V0X3Bvb2wgICAgICAgKEdzdFRhc2sgKnRhc2spOwordm9pZCAgICAgICAgICAgIGdzdF90YXNrX3NldF9wb29sICAgICAgIChHc3RUYXNrICp0YXNrLCBHc3RUYXNrUG9vbCAqcG9vbCk7CisKK3ZvaWQgICAgICAgICAgICBnc3RfdGFza19zZXRfdGhyZWFkX2NhbGxiYWNrcyAgKEdzdFRhc2sgKnRhc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUYXNrVGhyZWFkQ2FsbGJhY2tzICpjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSBub3RpZnkpOworCitHc3RUYXNrU3RhdGUgICAgZ3N0X3Rhc2tfZ2V0X3N0YXRlICAgICAgKEdzdFRhc2sgKnRhc2spOworZ2Jvb2xlYW4gICAgICAgIGdzdF90YXNrX3NldF9zdGF0ZSAgICAgIChHc3RUYXNrICp0YXNrLCBHc3RUYXNrU3RhdGUgc3RhdGUpOworCitnYm9vbGVhbiAgICAgICAgZ3N0X3Rhc2tfc3RhcnQgICAgICAgICAgKEdzdFRhc2sgKnRhc2spOworZ2Jvb2xlYW4gICAgICAgIGdzdF90YXNrX3N0b3AgICAgICAgICAgIChHc3RUYXNrICp0YXNrKTsKK2dib29sZWFuICAgICAgICBnc3RfdGFza19wYXVzZSAgICAgICAgICAoR3N0VGFzayAqdGFzayk7CisKK2dib29sZWFuICAgICAgICBnc3RfdGFza19qb2luICAgICAgICAgICAoR3N0VGFzayAqdGFzayk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9UQVNLX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHRhc2twb29sLmMgYi9nc3QvZ3N0dGFza3Bvb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTk4MWU2Ci0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdHRhc2twb29sLmMKQEAgLTAsMCArMSwyODIgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA5IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisgKgorICogZ3N0dGFza3Bvb2wuYzogUG9vbCBmb3Igc3RyZWFtaW5nIHRocmVhZHMKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKioKKyAqIFNFQ1RJT046Z3N0dGFza3Bvb2wKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogUG9vbCBvZiBHU3RyZWFtZXIgc3RyZWFtaW5nIHRocmVhZHMKKyAqIEBzZWVfYWxzbzogI0dzdFRhc2ssICNHc3RQYWQKKyAqCisgKiBUaGlzIG9iamVjdCBwcm92aWRlcyBhbiBhYnN0cmFjdGlvbiBmb3IgY3JlYXRpbmcgdGhyZWFkcy4gVGhlIGRlZmF1bHQKKyAqIGltcGxlbWVudGF0aW9uIHVzZXMgYSByZWd1bGFyIEdUaHJlYWRQb29sIHRvIHN0YXJ0IHRhc2tzLgorICoKKyAqIFN1YmNsYXNzZXMgY2FuIGJlIG1hZGUgdG8gY3JlYXRlIGN1c3RvbSB0aHJlYWRzLgorICoKKyAqIExhc3QgcmV2aWV3ZWQgb24gMjAwOS0wNC0yMyAoMC4xMC4yNCkKKyAqLworCisjaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKKworI2luY2x1ZGUgImdzdGluZm8uaCIKKyNpbmNsdWRlICJnc3R0YXNrcG9vbC5oIgorCitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDICh0YXNrcG9vbF9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAodGFza3Bvb2xfZGVidWcpCisKKyNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCitzdGF0aWMgdm9pZCBnc3RfdGFza19wb29sX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKKyNlbmRpZgorCisjZGVmaW5lIF9kb19pbml0IFwKK3sgXAorICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAodGFza3Bvb2xfZGVidWcsICJ0YXNrcG9vbCIsIDAsICJUaHJlYWQgcG9vbCIpOyBcCit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RUYXNrUG9vbCwgZ3N0X3Rhc2tfcG9vbCwgR1NUX1RZUEVfT0JKRUNULCBfZG9faW5pdCk7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIEdzdFRhc2tQb29sRnVuY3Rpb24gZnVuYzsKKyAgZ3BvaW50ZXIgdXNlcl9kYXRhOworfSBUYXNrRGF0YTsKKworc3RhdGljIHZvaWQKK2RlZmF1bHRfZnVuYyAoVGFza0RhdGEgKiB0ZGF0YSwgR3N0VGFza1Bvb2wgKiBwb29sKQoreworICBHc3RUYXNrUG9vbEZ1bmN0aW9uIGZ1bmM7CisgIGdwb2ludGVyIHVzZXJfZGF0YTsKKworICBmdW5jID0gdGRhdGEtPmZ1bmM7CisgIHVzZXJfZGF0YSA9IHRkYXRhLT51c2VyX2RhdGE7CisgIGdfc2xpY2VfZnJlZSAoVGFza0RhdGEsIHRkYXRhKTsKKworICBmdW5jICh1c2VyX2RhdGEpOworfQorCitzdGF0aWMgdm9pZAorZGVmYXVsdF9wcmVwYXJlIChHc3RUYXNrUG9vbCAqIHBvb2wsIEdFcnJvciAqKiBlcnJvcikKK3sKKyAgR1NUX09CSkVDVF9MT0NLIChwb29sKTsKKyAgcG9vbC0+cG9vbCA9IGdfdGhyZWFkX3Bvb2xfbmV3ICgoR0Z1bmMpIGRlZmF1bHRfZnVuYywgcG9vbCwgLTEsIEZBTFNFLCBOVUxMKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHBvb2wpOworfQorCitzdGF0aWMgdm9pZAorZGVmYXVsdF9jbGVhbnVwIChHc3RUYXNrUG9vbCAqIHBvb2wpCit7CisgIEdTVF9PQkpFQ1RfTE9DSyAocG9vbCk7CisgIGlmIChwb29sLT5wb29sKSB7CisgICAgLyogU2h1dCBkb3duIGFsbCB0aGUgdGhyZWFkcywgd2Ugc3RpbGwgcHJvY2VzcyB0aGUgb25lcyBzY2hlZHVsZWQKKyAgICAgKiBiZWNhdXNlIHRoZSB1bnJlZiBoYXBwZW5zIGluIHRoZSB0aHJlYWQgZnVuY3Rpb24uCisgICAgICogQWxzbyB3YWl0IGZvciBjdXJyZW50bHkgcnVubmluZyBvbmVzIHRvIGZpbmlzaC4gKi8KKyAgICBnX3RocmVhZF9wb29sX2ZyZWUgKHBvb2wtPnBvb2wsIEZBTFNFLCBUUlVFKTsKKyAgICBwb29sLT5wb29sID0gTlVMTDsKKyAgfQorICBHU1RfT0JKRUNUX1VOTE9DSyAocG9vbCk7Cit9CisKK3N0YXRpYyBncG9pbnRlcgorZGVmYXVsdF9wdXNoIChHc3RUYXNrUG9vbCAqIHBvb2wsIEdzdFRhc2tQb29sRnVuY3Rpb24gZnVuYywKKyAgICBncG9pbnRlciB1c2VyX2RhdGEsIEdFcnJvciAqKiBlcnJvcikKK3sKKyAgVGFza0RhdGEgKnRkYXRhOworCisgIHRkYXRhID0gZ19zbGljZV9uZXcgKFRhc2tEYXRhKTsKKyAgdGRhdGEtPmZ1bmMgPSBmdW5jOworICB0ZGF0YS0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOworCisgIEdTVF9PQkpFQ1RfTE9DSyAocG9vbCk7CisgIGlmIChwb29sLT5wb29sKQorICAgIGdfdGhyZWFkX3Bvb2xfcHVzaCAocG9vbC0+cG9vbCwgdGRhdGEsIGVycm9yKTsKKyAgZWxzZSB7CisgICAgZ19zbGljZV9mcmVlIChUYXNrRGF0YSwgdGRhdGEpOworICB9CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChwb29sKTsKKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK2RlZmF1bHRfam9pbiAoR3N0VGFza1Bvb2wgKiBwb29sLCBncG9pbnRlciBpZCkKK3sKKyAgLyogd2UgZG8gbm90aGluZyBoZXJlLCB3ZSBjYW4ndCBqb2luIGZyb20gdGhlIHBvb2xzICovCit9CisKK3N0YXRpYyB2b2lkCitnc3RfdGFza19wb29sX2NsYXNzX2luaXQgKEdzdFRhc2tQb29sQ2xhc3MgKiBrbGFzcykKK3sKKyAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOworICBHc3RUYXNrUG9vbENsYXNzICpnc3R0YXNrcG9vbF9jbGFzczsKKworICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKKyAgZ3N0dGFza3Bvb2xfY2xhc3MgPSAoR3N0VGFza1Bvb2xDbGFzcyAqKSBrbGFzczsKKworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKyAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfdGFza19wb29sX2ZpbmFsaXplOworI2VuZGlmCisKKyAgZ3N0dGFza3Bvb2xfY2xhc3MtPnByZXBhcmUgPSBkZWZhdWx0X3ByZXBhcmU7CisgIGdzdHRhc2twb29sX2NsYXNzLT5jbGVhbnVwID0gZGVmYXVsdF9jbGVhbnVwOworICBnc3R0YXNrcG9vbF9jbGFzcy0+cHVzaCA9IGRlZmF1bHRfcHVzaDsKKyAgZ3N0dGFza3Bvb2xfY2xhc3MtPmpvaW4gPSBkZWZhdWx0X2pvaW47Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfdGFza19wb29sX2luaXQgKEdzdFRhc2tQb29sICogcG9vbCkKK3sKK30KKworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKK3N0YXRpYyB2b2lkCitnc3RfdGFza19wb29sX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQoreworICBHU1RfREVCVUcgKCJ0YXNrcG9vbCAlcCBmaW5hbGl6ZSIsIG9iamVjdCk7CisKKyAgR19PQkpFQ1RfQ0xBU1MgKGdzdF90YXNrX3Bvb2xfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Cit9CisjZW5kaWYKKy8qKgorICogZ3N0X3Rhc2tfcG9vbF9uZXc6CisgKgorICogQ3JlYXRlIGEgbmV3IGRlZmF1bHQgdGFzayBwb29sLiBUaGUgZGVmYXVsdCB0YXNrIHBvb2wgd2lsbCB1c2UgYSByZWd1bGFyCisgKiBHVGhyZWFkUG9vbCBmb3IgdGhyZWFkcy4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RUYXNrUG9vbC4gZ3N0X29iamVjdF91bnJlZigpIGFmdGVyIHVzYWdlLgorICoKKyAqIFNpbmNlOiAwLjEwLjI0CisgKi8KK0dzdFRhc2tQb29sICoKK2dzdF90YXNrX3Bvb2xfbmV3ICh2b2lkKQoreworICBHc3RUYXNrUG9vbCAqcG9vbDsKKworICBwb29sID0gZ19vYmplY3RfbmV3diAoR1NUX1RZUEVfVEFTS19QT09MLCAwLCBOVUxMKTsKKworICByZXR1cm4gcG9vbDsKK30KKworLyoqCisgKiBnc3RfdGFza19wb29sX3ByZXBhcmU6CisgKiBAcG9vbDogYSAjR3N0VGFza1Bvb2wKKyAqIEBlcnJvcjogYW4gZXJyb3IgcmV0dXJuIGxvY2F0aW9uCisgKgorICogUHJlcGFyZSB0aGUgdGFza3Bvb2wgZm9yIGFjY2VwdGluZyBnc3RfdGFza19wb29sX3B1c2goKSBvcGVyYXRpb25zLgorICoKKyAqIE1UIHNhZmUuCisgKgorICogU2luY2U6IDAuMTAuMjQKKyAqLwordm9pZAorZ3N0X3Rhc2tfcG9vbF9wcmVwYXJlIChHc3RUYXNrUG9vbCAqIHBvb2wsIEdFcnJvciAqKiBlcnJvcikKK3sKKyAgR3N0VGFza1Bvb2xDbGFzcyAqa2xhc3M7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1RBU0tfUE9PTCAocG9vbCkpOworCisgIGtsYXNzID0gR1NUX1RBU0tfUE9PTF9HRVRfQ0xBU1MgKHBvb2wpOworCisgIGlmIChrbGFzcy0+cHJlcGFyZSkKKyAgICBrbGFzcy0+cHJlcGFyZSAocG9vbCwgZXJyb3IpOworfQorCisvKioKKyAqIGdzdF90YXNrX3Bvb2xfY2xlYW51cDoKKyAqIEBwb29sOiBhICNHc3RUYXNrUG9vbAorICoKKyAqIFdhaXQgZm9yIGFsbCB0YXNrcyB0byBiZSBzdG9wcGVkLiBUaGlzIGlzIG1haW5seSB1c2VkIGludGVybmFsbHkKKyAqIHRvIGVuc3VyZSBwcm9wZXIgY2xlYW51cCBvZiBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgaW4gdGVzdCBzdWl0ZXMuCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICovCit2b2lkCitnc3RfdGFza19wb29sX2NsZWFudXAgKEdzdFRhc2tQb29sICogcG9vbCkKK3sKKyAgR3N0VGFza1Bvb2xDbGFzcyAqa2xhc3M7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1RBU0tfUE9PTCAocG9vbCkpOworCisgIGtsYXNzID0gR1NUX1RBU0tfUE9PTF9HRVRfQ0xBU1MgKHBvb2wpOworCisgIGlmIChrbGFzcy0+Y2xlYW51cCkKKyAgICBrbGFzcy0+Y2xlYW51cCAocG9vbCk7Cit9CisKKy8qKgorICogZ3N0X3Rhc2tfcG9vbF9wdXNoOgorICogQHBvb2w6IGEgI0dzdFRhc2tQb29sCisgKiBAZnVuYzogdGhlIGZ1bmN0aW9uIHRvIGNhbGwKKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogZGF0YSB0byBwYXNzIHRvIEBmdW5jCisgKiBAZXJyb3I6IHJldHVybiBsb2NhdGlvbiBmb3IgYW4gZXJyb3IKKyAqCisgKiBTdGFydCB0aGUgZXhlY3V0aW9uIG9mIGEgbmV3IHRocmVhZCBmcm9tIEBwb29sLgorICoKKyAqIFJldHVybnM6IGEgcG9pbnRlciB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciB0aGUgZ3N0X3Rhc2tfcG9vbF9qb2luCisgKiBmdW5jdGlvbi4gVGhpcyBwb2ludGVyIGNhbiBiZSBOVUxMLCB5b3UgbXVzdCBjaGVjayBAZXJyb3IgdG8gZGV0ZWN0CisgKiBlcnJvcnMuCisgKgorICogU2luY2U6IDAuMTAuMjQKKyAqLworZ3BvaW50ZXIKK2dzdF90YXNrX3Bvb2xfcHVzaCAoR3N0VGFza1Bvb2wgKiBwb29sLCBHc3RUYXNrUG9vbEZ1bmN0aW9uIGZ1bmMsCisgICAgZ3BvaW50ZXIgdXNlcl9kYXRhLCBHRXJyb3IgKiogZXJyb3IpCit7CisgIEdzdFRhc2tQb29sQ2xhc3MgKmtsYXNzOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVEFTS19QT09MIChwb29sKSwgTlVMTCk7CisKKyAga2xhc3MgPSBHU1RfVEFTS19QT09MX0dFVF9DTEFTUyAocG9vbCk7CisKKyAgaWYgKGtsYXNzLT5wdXNoID09IE5VTEwpCisgICAgZ290byBub3Rfc3VwcG9ydGVkOworCisgIHJldHVybiBrbGFzcy0+cHVzaCAocG9vbCwgZnVuYywgdXNlcl9kYXRhLCBlcnJvcik7CisKKyAgLyogRVJST1JTICovCitub3Rfc3VwcG9ydGVkOgorICB7CisgICAgZ193YXJuaW5nICgicHVzaGluZyB0YXNrcyBvbiBwb29sICVwIGlzIG5vdCBzdXBwb3J0ZWQiLCBwb29sKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorfQorCisvKioKKyAqIGdzdF90YXNrX3Bvb2xfam9pbjoKKyAqIEBwb29sOiBhICNHc3RUYXNrUG9vbAorICogQGlkOiB0aGUgaWQKKyAqCisgKiBKb2luIGEgdGFzayBhbmQvb3IgcmV0dXJuIGl0IHRvIHRoZSBwb29sLiBAaWQgaXMgdGhlIGlkIG9idGFpbmVkIGZyb20gCisgKiBnc3RfdGFza19wb29sX3B1c2goKS4KKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICovCit2b2lkCitnc3RfdGFza19wb29sX2pvaW4gKEdzdFRhc2tQb29sICogcG9vbCwgZ3BvaW50ZXIgaWQpCit7CisgIEdzdFRhc2tQb29sQ2xhc3MgKmtsYXNzOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19UQVNLX1BPT0wgKHBvb2wpKTsKKworICBrbGFzcyA9IEdTVF9UQVNLX1BPT0xfR0VUX0NMQVNTIChwb29sKTsKKworICBpZiAoa2xhc3MtPmpvaW4pCisgICAga2xhc3MtPmpvaW4gKHBvb2wsIGlkKTsKK30KZGlmZiAtLWdpdCBhL2dzdC9nc3R0YXNrcG9vbC5oIGIvZ3N0L2dzdHRhc2twb29sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEyMDE1ZQotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3R0YXNrcG9vbC5oCkBAIC0wLDAgKzEsMTAzIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgPDIwMDk+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisgKgorICogZ3N0dGFza3Bvb2wuaDogUG9vbCBmb3IgY3JlYXRpbmcgc3RyZWFtaW5nIHRocmVhZHMKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fR1NUX1RBU0tfUE9PTF9IX18KKyNkZWZpbmUgX19HU1RfVEFTS19QT09MX0hfXworCisjaW5jbHVkZSA8Z3N0L2dzdG9iamVjdC5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qIC0tLSBzdGFuZGFyZCB0eXBlIG1hY3JvcyAtLS0gKi8KKyNkZWZpbmUgR1NUX1RZUEVfVEFTS19QT09MICAgICAgICAgICAgIChnc3RfdGFza19wb29sX2dldF90eXBlICgpKQorI2RlZmluZSBHU1RfVEFTS19QT09MKHBvb2wpICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgocG9vbCksIEdTVF9UWVBFX1RBU0tfUE9PTCwgR3N0VGFza1Bvb2wpKQorI2RlZmluZSBHU1RfSVNfVEFTS19QT09MKHBvb2wpICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgocG9vbCksIEdTVF9UWVBFX1RBU0tfUE9PTCkpCisjZGVmaW5lIEdTVF9UQVNLX1BPT0xfQ0xBU1MocGNsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChwY2xhc3MpLCBHU1RfVFlQRV9UQVNLX1BPT0wsIEdzdFRhc2tQb29sQ2xhc3MpKQorI2RlZmluZSBHU1RfSVNfVEFTS19QT09MX0NMQVNTKHBjbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgocGNsYXNzKSwgR1NUX1RZUEVfVEFTS19QT09MKSkKKyNkZWZpbmUgR1NUX1RBU0tfUE9PTF9HRVRfQ0xBU1MocG9vbCkgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgocG9vbCksIEdTVF9UWVBFX1RBU0tfUE9PTCwgR3N0VGFza1Bvb2xDbGFzcykpCisjZGVmaW5lIEdTVF9UQVNLX1BPT0xfQ0FTVChwb29sKSAgICAgICAoKEdzdFRhc2tQb29sKikocG9vbCkpCisKK3R5cGVkZWYgc3RydWN0IF9Hc3RUYXNrUG9vbCBHc3RUYXNrUG9vbDsKK3R5cGVkZWYgc3RydWN0IF9Hc3RUYXNrUG9vbENsYXNzIEdzdFRhc2tQb29sQ2xhc3M7CisKKy8qKgorICogR3N0VGFza1Bvb2xGdW5jdGlvbjoKKyAqIEBkYXRhOiB1c2VyIGRhdGEgZm9yIHRoZSB0YXNrIGZ1bmN0aW9uCisgKgorICogVGFzayBmdW5jdGlvbiwgc2VlIGdzdF90YXNrX3Bvb2xfcHVzaCgpLgorICoKKyAqIFNpbmNlOiAwLjEwLjI0CisgKi8KK3R5cGVkZWYgdm9pZCAgICgqR3N0VGFza1Bvb2xGdW5jdGlvbikgICAgICAgICAgKHZvaWQgKmRhdGEpOworCisvKioKKyAqIEdzdFRhc2tQb29sOgorICoKKyAqIFRoZSAjR3N0VGFza1Bvb2wgb2JqZWN0LgorICovCitzdHJ1Y3QgX0dzdFRhc2tQb29sIHsKKyAgR3N0T2JqZWN0ICAgICAgb2JqZWN0OworCisgIC8qPCBwcml2YXRlID4qLworICBHVGhyZWFkUG9vbCAgICpwb29sOworCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOworfTsKKworLyoqCisgKiBHc3RUYXNrUG9vbENsYXNzOgorICogQHBhcmVudF9jbGFzczogdGhlIHBhcmVudCBjbGFzcyBzdHJ1Y3R1cmUKKyAqIEBwcmVwYXJlOiBwcmVwYXJlIHRoZSB0aHJlYWRwb29sCisgKiBAY2xlYW51cDogbWFrZSBzdXJlIGFsbCB0aHJlYWRzIGFyZSBzdG9wcGVkCisgKiBAcHVzaDogc3RhcnQgYSBuZXcgdGhyZWFkCisgKiBAam9pbjogam9pbiBhIHRocmVhZAorICoKKyAqIFRoZSAjR3N0VGFza1Bvb2xDbGFzcyBvYmplY3QuCisgKi8KK3N0cnVjdCBfR3N0VGFza1Bvb2xDbGFzcyB7CisgIEdzdE9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICAvKjwgcHVibGljID4qLworICB2b2lkICAgICAgKCpwcmVwYXJlKSAgKEdzdFRhc2tQb29sICpwb29sLCBHRXJyb3IgKiplcnJvcik7CisgIHZvaWQgICAgICAoKmNsZWFudXApICAoR3N0VGFza1Bvb2wgKnBvb2wpOworCisgIGdwb2ludGVyICAoKnB1c2gpICAgICAoR3N0VGFza1Bvb2wgKnBvb2wsIEdzdFRhc2tQb29sRnVuY3Rpb24gZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEsIEdFcnJvciAqKmVycm9yKTsKKyAgdm9pZCAgICAgICgqam9pbikgICAgIChHc3RUYXNrUG9vbCAqcG9vbCwgZ3BvaW50ZXIgaWQpOworCisgIC8qPCBwcml2YXRlID4qLworICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKK307CisKK0dUeXBlICAgICAgICAgICBnc3RfdGFza19wb29sX2dldF90eXBlICAgICh2b2lkKTsKKworR3N0VGFza1Bvb2wgKiAgIGdzdF90YXNrX3Bvb2xfbmV3ICAgICAgICAgKHZvaWQpOwordm9pZCAgICAgICAgICAgIGdzdF90YXNrX3Bvb2xfcHJlcGFyZSAgICAgKEdzdFRhc2tQb29sICpwb29sLCBHRXJyb3IgKiplcnJvcik7CisKK2dwb2ludGVyICAgICAgICBnc3RfdGFza19wb29sX3B1c2ggICAgICAgIChHc3RUYXNrUG9vbCAqcG9vbCwgR3N0VGFza1Bvb2xGdW5jdGlvbiBmdW5jLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEsIEdFcnJvciAqKmVycm9yKTsKK3ZvaWQgICAgICAgICAgICBnc3RfdGFza19wb29sX2pvaW4gICAgICAgIChHc3RUYXNrUG9vbCAqcG9vbCwgZ3BvaW50ZXIgaWQpOworCit2b2lkCQlnc3RfdGFza19wb29sX2NsZWFudXAgICAgIChHc3RUYXNrUG9vbCAqcG9vbCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9UQVNLX1BPT0xfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0dHJhY2UuYyBiL2dzdC9nc3R0cmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NTc0NTgKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0dHJhY2UuYwpAQCAtMCwwICsxLDUxNSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgorICoKKyAqIGdzdHRyYWNlLmM6IFRyYWNpbmcgZnVuY3Rpb25zIChkZXByZWNhdGVkKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qKgorICogU0VDVElPTjpnc3R0cmFjZQorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBUcmFjaW5nIGZ1bmN0aW9uYWxpdHkKKyAqCisgKiBUcmFjZXMgYWxsb3dzIHRvIHRyYWNrIG9iamVjdCBhbGxvY2F0aW9uLiBUaGV5IHByb3ZpZGUgYSBpbnN0YW5jZSBjb3VudGVyIHBlcgorICogI0dUeXBlLiBUaGUgY291bnRlciBpcyBpbmNyZW1lbnRlZCBmb3IgZWFjaCBvYmplY3QgYWxsb2NhdGVkIGFuZCBkZWNyZW1lbnRlZAorICogaXQgd2hlbiBpdCdzIGZyZWVkLgorICoKKyAqIDxleGFtcGxlPgorICogPHRpdGxlPlRyYWNpbmcgb2JqZWN0IGluc3RhbmNlczwvdGl0bGU+CisgKiAgIDxwcm9ncmFtbGlzdGluZz4KKyAqICAgICAvLyB0cmFjZSB1bi1mcmVlZCBvYmplY3QgaW5zdGFuY2VzCisgKiAgICAgZ3N0X2FsbG9jX3RyYWNlX3NldF9mbGFnc19hbGwgKEdTVF9BTExPQ19UUkFDRV9MSVZFKTsKKyAqICAgICBpZiAoIWdzdF9hbGxvY190cmFjZV9hdmFpbGFibGUgKCkpIHsKKyAqICAgICAgIGdfd2FybmluZyAoIlRyYWNlIG5vdCBhdmFpbGFibGUgKHJlY29tcGlsZSB3aXRoIHRyYWNlIGVuYWJsZWQpLiIpOworICogICAgIH0KKyAqICAgICBnc3RfYWxsb2NfdHJhY2VfcHJpbnRfbGl2ZSAoKTsKKyAqICAgICAvLyBkbyBzb21ldGhpbmcgaGVyZQorICogICAgIGdzdF9hbGxvY190cmFjZV9wcmludF9saXZlICgpOworICogICA8L3Byb2dyYW1saXN0aW5nPgorICogPC9leGFtcGxlPgorICoKKyAqIExhc3QgcmV2aWV3ZWQgb24gMjAwNS0xMS0yMSAoMC45LjUpCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpZiBkZWZpbmVkIChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPj0gMTQwMAorIyBpbmNsdWRlIDxpby5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImdzdGluZm8uaCIKKworI2luY2x1ZGUgImdzdHRyYWNlLmgiCisKK0dTdGF0aWNNdXRleCBfZ3N0X3RyYWNlX211dGV4ID0gR19TVEFUSUNfTVVURVhfSU5JVDsKKworc3RhdGljCisjaWZkZWYgX19pbmxpbmVfXworICBfX2lubGluZV9fCisjZW5kaWYKKyAgICB2b2lkCityZWFkX3RzYyAoZ2ludDY0ICogZHN0KQoreworI2lmIGRlZmluZWQoSEFWRV9SRFRTQykgJiYgZGVmaW5lZChfX0dOVUNfXykKKyAgZ3VpbnQ2NCB0c2M7CisgIF9fYXNtX18gX192b2xhdGlsZV9fICgicmR0c2MiOiI9QSIgKHRzYykpOworCisgICpkc3QgPSB0c2M7CisjZWxzZQorICAqZHN0ID0gMDsKKyNlbmRpZgorfQorCisvKioKKyAqIGdzdF90cmFjZV9yZWFkX3RzYzoKKyAqIEBkc3Q6IChvdXQpIHBvaW50ZXIgdG8gaG9sZCB0aGUgcmVzdWx0LgorICoKKyAqIFJlYWQgYSBwbGF0Zm9ybSBpbmRlcGVuZGVudCB0aW1lciB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIGluCisgKiBiZW5jaG1hcmtzLgorICovCit2b2lkCitnc3RfdHJhY2VfcmVhZF90c2MgKGdpbnQ2NCAqIGRzdCkKK3sKKyAgcmVhZF90c2MgKGRzdCk7Cit9CisKK3N0YXRpYyBHc3RUcmFjZSAqX2dzdF90cmFjZV9kZWZhdWx0ID0gTlVMTDsKK2dpbnQgX2dzdF90cmFjZV9vbiA9IDE7CisKKy8qKgorICogZ3N0X3RyYWNlX25ldzoKKyAqIEBmaWxlbmFtZTogYSBmaWxlbmFtZQorICogQHNpemU6IHRoZSBtYXggc2l6ZSBvZiB0aGUgZmlsZQorICoKKyAqIENyZWF0ZSBhIHJpbmdidWZmZXIgb2YgQHNpemUgaW4gdGhlIGZpbGUgd2l0aCBAZmlsZW5hbWUgdG8KKyAqIHN0b3JlIHRyYWNlIHJlc3VsdHMgaW4uCisgKgorICogRnJlZS1mdW5jdGlvbjogZ3N0X3RyYWNlX2Rlc3Ryb3kKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RUcmFjZS4KKyAqLworR3N0VHJhY2UgKgorZ3N0X3RyYWNlX25ldyAoY29uc3QgZ2NoYXIgKiBmaWxlbmFtZSwgZ2ludCBzaXplKQoreworICBHc3RUcmFjZSAqdHJhY2UgPSBnX3NsaWNlX25ldyAoR3N0VHJhY2UpOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0cmFjZSAhPSBOVUxMLCBOVUxMKTsKKyAgdHJhY2UtPmZpbGVuYW1lID0gZ19zdHJkdXAgKGZpbGVuYW1lKTsKKyAgR1NUX0RFQlVHICgib3BlbmluZyAnJXMnIiwgdHJhY2UtPmZpbGVuYW1lKTsKKyNpZm5kZWYgU19JV1VTUgorI2RlZmluZSBTX0lXVVNSIFNfSVdSSVRFCisjZW5kaWYKKyNpZm5kZWYgU19JUlVTUgorI2RlZmluZSBTX0lSVVNSIFNfSVJFQUQKKyNlbmRpZgorICB0cmFjZS0+ZmQgPQorICAgICAgb3BlbiAodHJhY2UtPmZpbGVuYW1lLCBPX1JEV1IgfCBPX0NSRUFUIHwgT19UUlVOQywgU19JUlVTUiB8IFNfSVdVU1IpOworICBwZXJyb3IgKCJvcGVuaW5nIHRyYWNlIGZpbGUiKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRyYWNlLT5mZCA+IDAsIE5VTEwpOworICB0cmFjZS0+YnVmID0gZ19tYWxsb2MgKHNpemUgKiBzaXplb2YgKEdzdFRyYWNlRW50cnkpKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRyYWNlLT5idWYgIT0gTlVMTCwgTlVMTCk7CisgIHRyYWNlLT5idWZzaXplID0gc2l6ZTsKKyAgdHJhY2UtPmJ1Zm9mZnNldCA9IDA7CisKKyAgcmV0dXJuIHRyYWNlOworfQorCisvKioKKyAqIGdzdF90cmFjZV9kZXN0cm95OgorICogQHRyYWNlOiAoaW4pICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RUcmFjZSB0byBkZXN0cm95CisgKgorICogRmx1c2ggYW4gY2xvc2UgdGhlIHByZXZpb3VzbHkgYWxsb2NhdGVkIEB0cmFjZS4KKyAqLwordm9pZAorZ3N0X3RyYWNlX2Rlc3Ryb3kgKEdzdFRyYWNlICogdHJhY2UpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKHRyYWNlICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsICh0cmFjZS0+YnVmICE9IE5VTEwpOworCisgIGlmIChnc3RfdHJhY2VfZ2V0X3JlbWFpbmluZyAodHJhY2UpID4gMCkKKyAgICBnc3RfdHJhY2VfZmx1c2ggKHRyYWNlKTsKKyAgY2xvc2UgKHRyYWNlLT5mZCk7CisgIGdfZnJlZSAodHJhY2UtPmJ1Zik7CisgIGdfc2xpY2VfZnJlZSAoR3N0VHJhY2UsIHRyYWNlKTsKK30KKworLyoqCisgKiBnc3RfdHJhY2VfZmx1c2g6CisgKiBAdHJhY2U6IHRoZSAjR3N0VHJhY2UgdG8gZmx1c2guCisgKgorICogRmx1c2ggYW55IHBlbmRpbmcgdHJhY2UgZW50cmllcyBpbiBAdHJhY2UgdG8gdGhlIHRyYWNlIGZpbGUuCisgKiBAdHJhY2UgY2FuIGJlIE5VTEwgaW4gd2hpY2ggY2FzZSB0aGUgZGVmYXVsdCAjR3N0VHJhY2Ugd2lsbCBiZQorICogZmx1c2hlZC4KKyAqLwordm9pZAorZ3N0X3RyYWNlX2ZsdXNoIChHc3RUcmFjZSAqIHRyYWNlKQoreworICBpbnQgcmVzLCBidWZfbGVuOworCisgIGlmICghdHJhY2UpIHsKKyAgICB0cmFjZSA9IF9nc3RfdHJhY2VfZGVmYXVsdDsKKyAgICBpZiAoIXRyYWNlKQorICAgICAgcmV0dXJuOworICB9CisKKyAgYnVmX2xlbiA9IHRyYWNlLT5idWZvZmZzZXQgKiBzaXplb2YgKEdzdFRyYWNlRW50cnkpOworICByZXMgPSB3cml0ZSAodHJhY2UtPmZkLCB0cmFjZS0+YnVmLCBidWZfbGVuKTsKKyAgaWYgKHJlcyA8IDApIHsKKyAgICBnX3dhcm5pbmcgKCJGYWlsZWQgdG8gd3JpdGUgdHJhY2U6ICVzIiwgZ19zdHJlcnJvciAoZXJybm8pKTsKKyAgICByZXR1cm47CisgIH0gZWxzZSBpZiAocmVzIDwgYnVmX2xlbikgeworICAgIGdfd2FybmluZyAoIkZhaWxlZCB0byB3cml0ZSB0cmFjZTogb25seSB3cm90ZSAlZC8lZCBieXRlcyIsIHJlcywgYnVmX2xlbik7CisgICAgcmV0dXJuOworICB9CisgIHRyYWNlLT5idWZvZmZzZXQgPSAwOworfQorCisvKioKKyAqIGdzdF90cmFjZV90ZXh0X2ZsdXNoOgorICogQHRyYWNlOiB0aGUgI0dzdFRyYWNlIHRvIGZsdXNoLgorICoKKyAqIEZsdXNoIGFueSBwZW5kaW5nIHRyYWNlIGVudHJpZXMgaW4gQHRyYWNlIHRvIHRoZSB0cmFjZSBmaWxlLAorICogZm9ybWF0dGVkIGFzIGEgdGV4dCBsaW5lIHdpdGggdGltZXN0YW1wIGFuZCBzZXF1ZW5jZSBudW1iZXJzLgorICogQHRyYWNlIGNhbiBiZSBOVUxMIGluIHdoaWNoIGNhc2UgdGhlIGRlZmF1bHQgI0dzdFRyYWNlIHdpbGwgYmUKKyAqIGZsdXNoZWQuCisgKi8KK3ZvaWQKK2dzdF90cmFjZV90ZXh0X2ZsdXNoIChHc3RUcmFjZSAqIHRyYWNlKQoreworICBpbnQgaTsKKworI2RlZmluZSBTVFJTSVpFICgyMCArIDEgKyAxMCArIDEgKyAxMCArIDEgKyAxMTIgKyAxICsgMSkKKyAgY2hhciBzdHJbU1RSU0laRV07CisKKyAgaWYgKCF0cmFjZSkgeworICAgIHRyYWNlID0gX2dzdF90cmFjZV9kZWZhdWx0OworICAgIGlmICghdHJhY2UpCisgICAgICByZXR1cm47CisgIH0KKworICBmb3IgKGkgPSAwOyBpIDwgdHJhY2UtPmJ1Zm9mZnNldDsgaSsrKSB7CisgICAgZ19zbnByaW50ZiAoc3RyLCBTVFJTSVpFLCAiJTIwIiBHX0dJTlQ2NF9GT1JNQVQgIiAlMTBkICUxMGQgJXNcbiIsCisgICAgICAgIHRyYWNlLT5idWZbaV0udGltZXN0YW1wLAorICAgICAgICB0cmFjZS0+YnVmW2ldLnNlcXVlbmNlLCB0cmFjZS0+YnVmW2ldLmRhdGEsIHRyYWNlLT5idWZbaV0ubWVzc2FnZSk7CisgICAgaWYgKHdyaXRlICh0cmFjZS0+ZmQsIHN0ciwgc3RybGVuIChzdHIpKSA8IDApIHsKKyAgICAgIGdfd2FybmluZyAoIkZhaWxlZCB0byB3cml0ZSB0cmFjZSAlZDogJXMiLCBpLCBnX3N0cmVycm9yIChlcnJubykpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorICB0cmFjZS0+YnVmb2Zmc2V0ID0gMDsKKyN1bmRlZiBTVFJTSVpFCit9CisKKy8qKgorICogZ3N0X3RyYWNlX3NldF9kZWZhdWx0OgorICogQHRyYWNlOiB0aGUgI0dzdFRyYWNlIHRvIHNldCBhcyB0aGUgZGVmYXVsdC4KKyAqCisgKiBTZXQgdGhlIGRlZmF1bHQgI0dzdFRyYWNlIHRvIEB0cmFjZS4KKyAqLwordm9pZAorZ3N0X3RyYWNlX3NldF9kZWZhdWx0IChHc3RUcmFjZSAqIHRyYWNlKQoreworICBnX3JldHVybl9pZl9mYWlsICh0cmFjZSAhPSBOVUxMKTsKKyAgX2dzdF90cmFjZV9kZWZhdWx0ID0gdHJhY2U7Cit9CisKK3ZvaWQKK19nc3RfdHJhY2VfYWRkX2VudHJ5IChHc3RUcmFjZSAqIHRyYWNlLCBndWludDMyIHNlcSwgZ3VpbnQzMiBkYXRhLCBnY2hhciAqIG1zZykKK3sKKyAgR3N0VHJhY2VFbnRyeSAqZW50cnk7CisKKyAgaWYgKCF0cmFjZSkgeworICAgIHRyYWNlID0gX2dzdF90cmFjZV9kZWZhdWx0OworICAgIGlmICghdHJhY2UpCisgICAgICByZXR1cm47CisgIH0KKworICBlbnRyeSA9IHRyYWNlLT5idWYgKyB0cmFjZS0+YnVmb2Zmc2V0OworICByZWFkX3RzYyAoJihlbnRyeS0+dGltZXN0YW1wKSk7CisgIGVudHJ5LT5zZXF1ZW5jZSA9IHNlcTsKKyAgZW50cnktPmRhdGEgPSBkYXRhOworICBzdHJuY3B5IChlbnRyeS0+bWVzc2FnZSwgbXNnLCAxMTIpOworICBlbnRyeS0+bWVzc2FnZVsxMTFdID0gJ1wwJzsKKyAgdHJhY2UtPmJ1Zm9mZnNldCsrOworCisgIGdzdF90cmFjZV9mbHVzaCAodHJhY2UpOworfQorCisKKy8qIGdsb2JhbCBmbGFncyAqLworc3RhdGljIEdzdEFsbG9jVHJhY2VGbGFncyBfZ3N0X3RyYWNlX2ZsYWdzID0gR1NUX0FMTE9DX1RSQUNFX05PTkU7CisKKy8qIGxpc3Qgb2YgcmVnaXN0ZXJlZCB0cmFjZXJzICovCitzdGF0aWMgR0xpc3QgKl9nc3RfYWxsb2NfdHJhY2VycyA9IE5VTEw7CisKKy8qKgorICogZ3N0X2FsbG9jX3RyYWNlX2F2YWlsYWJsZToKKyAqCisgKiBDaGVjayBpZiBhbGxvYyB0cmFjaW5nIHdhcyBjb21waWxlZCBpbnRvIHRoZSBjb3JlCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgY29yZSB3YXMgY29tcGlsZWQgd2l0aCBhbGxvYworICogdHJhY2luZyBlbmFibGVkLgorICovCitnYm9vbGVhbgorZ3N0X2FsbG9jX3RyYWNlX2F2YWlsYWJsZSAodm9pZCkKK3sKKyNpZmRlZiBHU1RfRElTQUJMRV9BTExPQ19UUkFDRQorICByZXR1cm4gRkFMU0U7CisjZWxzZQorICByZXR1cm4gVFJVRTsKKyNlbmRpZgorfQorCisvKioKKyAqIF9nc3RfYWxsb2NfdHJhY2VfcmVnaXN0ZXI6CisgKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIG5ldyBhbGxvYyB0cmFjZSBvYmplY3QuCisgKgorICogUmVnaXN0ZXIgYW4gZ2V0IGEgaGFuZGxlIHRvIGEgR3N0QWxsb2NUcmFjZSBvYmplY3QgdGhhdAorICogY2FuIGJlIHVzZWQgdG8gdHJhY2UgbWVtb3J5IGFsbG9jYXRpb25zLgorICoKKyAqIFJldHVybnM6IEEgaGFuZGxlIHRvIGEgR3N0QWxsb2NUcmFjZS4KKyAqLworR3N0QWxsb2NUcmFjZSAqCitfZ3N0X2FsbG9jX3RyYWNlX3JlZ2lzdGVyIChjb25zdCBnY2hhciAqIG5hbWUpCit7CisgIEdzdEFsbG9jVHJhY2UgKnRyYWNlOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYW1lLCBOVUxMKTsKKworICB0cmFjZSA9IGdfc2xpY2VfbmV3IChHc3RBbGxvY1RyYWNlKTsKKyAgdHJhY2UtPm5hbWUgPSBnX3N0cmR1cCAobmFtZSk7CisgIHRyYWNlLT5saXZlID0gMDsKKyAgdHJhY2UtPm1lbV9saXZlID0gTlVMTDsKKyAgdHJhY2UtPmZsYWdzID0gX2dzdF90cmFjZV9mbGFnczsKKworICBfZ3N0X2FsbG9jX3RyYWNlcnMgPSBnX2xpc3RfcHJlcGVuZCAoX2dzdF9hbGxvY190cmFjZXJzLCB0cmFjZSk7CisKKyAgcmV0dXJuIHRyYWNlOworfQorCisvKioKKyAqIGdzdF9hbGxvY190cmFjZV9saXN0OgorICoKKyAqIEdldCBhIGxpc3Qgb2YgYWxsIHJlZ2lzdGVyZWQgYWxsb2MgdHJhY2Ugb2JqZWN0cy4KKyAqCisgKiBSZXR1cm5zOiBhIEdMaXN0IG9mIEdzdEFsbG9jVHJhY2Ugb2JqZWN0cy4KKyAqLworY29uc3QgR0xpc3QgKgorZ3N0X2FsbG9jX3RyYWNlX2xpc3QgKHZvaWQpCit7CisgIHJldHVybiBfZ3N0X2FsbG9jX3RyYWNlcnM7Cit9CisKKy8qKgorICogZ3N0X2FsbG9jX3RyYWNlX2xpdmVfYWxsOgorICoKKyAqIEdldCB0aGUgdG90YWwgbnVtYmVyIG9mIGxpdmUgcmVnaXN0ZXJlZCBhbGxvYyB0cmFjZSBvYmplY3RzLgorICoKKyAqIFJldHVybnM6IHRoZSB0b3RhbCBudW1iZXIgb2YgbGl2ZSByZWdpc3RlcmVkIGFsbG9jIHRyYWNlIG9iamVjdHMuCisgKi8KK2ludAorZ3N0X2FsbG9jX3RyYWNlX2xpdmVfYWxsICh2b2lkKQoreworICBHTGlzdCAqd2FsayA9IF9nc3RfYWxsb2NfdHJhY2VyczsKKyAgaW50IG51bSA9IDA7CisKKyAgd2hpbGUgKHdhbGspIHsKKyAgICBHc3RBbGxvY1RyYWNlICp0cmFjZSA9IChHc3RBbGxvY1RyYWNlICopIHdhbGstPmRhdGE7CisKKyAgICBudW0gKz0gdHJhY2UtPmxpdmU7CisKKyAgICB3YWxrID0gZ19saXN0X25leHQgKHdhbGspOworICB9CisKKyAgcmV0dXJuIG51bTsKK30KKworc3RhdGljIGdpbnQKK2NvbXBhcmVfZnVuYyAoR3N0QWxsb2NUcmFjZSAqIGEsIEdzdEFsbG9jVHJhY2UgKiBiKQoreworICByZXR1cm4gc3RyY21wIChhLT5uYW1lLCBiLT5uYW1lKTsKK30KKworc3RhdGljIEdMaXN0ICoKK2dzdF9hbGxvY190cmFjZV9saXN0X3NvcnRlZCAodm9pZCkKK3sKKyAgR0xpc3QgKnJldDsKKworICByZXQgPSBnX2xpc3Rfc29ydCAoZ19saXN0X2NvcHkgKF9nc3RfYWxsb2NfdHJhY2VycyksCisgICAgICAoR0NvbXBhcmVGdW5jKSBjb21wYXJlX2Z1bmMpOworCisgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICogZ3N0X2FsbG9jX3RyYWNlX3ByaW50X2FsbDoKKyAqCisgKiBQcmludCB0aGUgc3RhdHVzIG9mIGFsbCByZWdpc3RlcmVkIGFsbG9jIHRyYWNlIG9iamVjdHMuCisgKi8KK3ZvaWQKK2dzdF9hbGxvY190cmFjZV9wcmludF9hbGwgKHZvaWQpCit7CisgIEdMaXN0ICpvcmlnLCAqd2FsazsKKworICBvcmlnID0gd2FsayA9IGdzdF9hbGxvY190cmFjZV9saXN0X3NvcnRlZCAoKTsKKworICB3aGlsZSAod2FsaykgeworICAgIEdzdEFsbG9jVHJhY2UgKnRyYWNlID0gKEdzdEFsbG9jVHJhY2UgKikgd2Fsay0+ZGF0YTsKKworICAgIGdzdF9hbGxvY190cmFjZV9wcmludCAodHJhY2UpOworCisgICAgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKTsKKyAgfQorCisgIGdfbGlzdF9mcmVlIChvcmlnKTsKK30KKworLyoqCisgKiBnc3RfYWxsb2NfdHJhY2VfcHJpbnRfbGl2ZToKKyAqCisgKiBQcmludCB0aGUgc3RhdHVzIG9mIGFsbCByZWdpc3RlcmVkIGFsbG9jIHRyYWNlIG9iamVjdHMsIGlnbm9yaW5nIHRob3NlCisgKiB3aXRob3V0IGxpdmUgb2JqZWN0cy4KKyAqLwordm9pZAorZ3N0X2FsbG9jX3RyYWNlX3ByaW50X2xpdmUgKHZvaWQpCit7CisgIEdMaXN0ICpvcmlnLCAqd2FsazsKKworICBvcmlnID0gd2FsayA9IGdzdF9hbGxvY190cmFjZV9saXN0X3NvcnRlZCAoKTsKKworICB3aGlsZSAod2FsaykgeworICAgIEdzdEFsbG9jVHJhY2UgKnRyYWNlID0gKEdzdEFsbG9jVHJhY2UgKikgd2Fsay0+ZGF0YTsKKworICAgIGlmICh0cmFjZS0+bGl2ZSkKKyAgICAgIGdzdF9hbGxvY190cmFjZV9wcmludCAodHJhY2UpOworCisgICAgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKTsKKyAgfQorCisgIGdfbGlzdF9mcmVlIChvcmlnKTsKK30KKworLyoqCisgKiBnc3RfYWxsb2NfdHJhY2Vfc2V0X2ZsYWdzX2FsbDoKKyAqIEBmbGFnczogdGhlIG9wdGlvbnMgdG8gZW5hYmxlCisgKgorICogRW5hYmxlIHRoZSBzcGVjaWZpZWQgb3B0aW9ucyBvbiBhbGwgcmVnaXN0ZXJlZCBhbGxvYyB0cmFjZQorICogb2JqZWN0cy4KKyAqLwordm9pZAorZ3N0X2FsbG9jX3RyYWNlX3NldF9mbGFnc19hbGwgKEdzdEFsbG9jVHJhY2VGbGFncyBmbGFncykKK3sKKyAgR0xpc3QgKndhbGsgPSBfZ3N0X2FsbG9jX3RyYWNlcnM7CisKKyAgd2hpbGUgKHdhbGspIHsKKyAgICBHc3RBbGxvY1RyYWNlICp0cmFjZSA9IChHc3RBbGxvY1RyYWNlICopIHdhbGstPmRhdGE7CisKKyAgICBHU1RfREVCVUcgKCJzZXR0aW5nIGZsYWdzICVkIG9uICVwIiwgKGdpbnQpIGZsYWdzLCB0cmFjZSk7CisgICAgZ3N0X2FsbG9jX3RyYWNlX3NldF9mbGFncyAodHJhY2UsIGZsYWdzKTsKKworICAgIHdhbGsgPSBnX2xpc3RfbmV4dCAod2Fsayk7CisgIH0KKyAgX2dzdF90cmFjZV9mbGFncyA9IGZsYWdzOworfQorCisvKioKKyAqIGdzdF9hbGxvY190cmFjZV9nZXQ6CisgKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIGFsbG9jIHRyYWNlIG9iamVjdAorICoKKyAqIEdldCB0aGUgbmFtZWQgYWxsb2MgdHJhY2Ugb2JqZWN0LgorICoKKyAqIFJldHVybnM6IGEgR3N0QWxsb2NUcmFjZSB3aXRoIHRoZSBnaXZlbiBuYW1lIG9yIE5VTEwgd2hlbgorICogbm8gYWxsb2MgdHJhY2VyIHdhcyByZWdpc3RlcmVkIHdpdGggdGhhdCBuYW1lLgorICovCitHc3RBbGxvY1RyYWNlICoKK2dzdF9hbGxvY190cmFjZV9nZXQgKGNvbnN0IGdjaGFyICogbmFtZSkKK3sKKyAgR0xpc3QgKndhbGsgPSBfZ3N0X2FsbG9jX3RyYWNlcnM7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG5hbWUsIE5VTEwpOworCisgIHdoaWxlICh3YWxrKSB7CisgICAgR3N0QWxsb2NUcmFjZSAqdHJhY2UgPSAoR3N0QWxsb2NUcmFjZSAqKSB3YWxrLT5kYXRhOworCisgICAgaWYgKCFzdHJjbXAgKHRyYWNlLT5uYW1lLCBuYW1lKSkKKyAgICAgIHJldHVybiB0cmFjZTsKKworICAgIHdhbGsgPSBnX2xpc3RfbmV4dCAod2Fsayk7CisgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogZ3N0X2FsbG9jX3RyYWNlX3ByaW50OgorICogQHRyYWNlOiB0aGUgR3N0QWxsb2NUcmFjZSB0byBwcmludAorICoKKyAqIFByaW50IHRoZSBzdGF0dXMgb2YgdGhlIGdpdmVuIEdzdEFsbG9jVHJhY2UuCisgKi8KK3ZvaWQKK2dzdF9hbGxvY190cmFjZV9wcmludCAoY29uc3QgR3N0QWxsb2NUcmFjZSAqIHRyYWNlKQoreworICBHU0xpc3QgKm1lbV9saXZlOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKHRyYWNlICE9IE5VTEwpOworCisgIGlmICh0cmFjZS0+ZmxhZ3MgJiBHU1RfQUxMT0NfVFJBQ0VfTElWRSkgeworICAgIGdfcHJpbnQgKCIlLTIyLjIycyA6ICVkXG4iLCB0cmFjZS0+bmFtZSwgdHJhY2UtPmxpdmUpOworICB9IGVsc2UgeworICAgIGdfcHJpbnQgKCIlLTIyLjIycyA6IChubyBsaXZlIGNvdW50KVxuIiwgdHJhY2UtPm5hbWUpOworICB9CisKKyAgaWYgKHRyYWNlLT5mbGFncyAmIEdTVF9BTExPQ19UUkFDRV9NRU1fTElWRSkgeworICAgIG1lbV9saXZlID0gdHJhY2UtPm1lbV9saXZlOworCisgICAgd2hpbGUgKG1lbV9saXZlKSB7CisgICAgICBncG9pbnRlciBkYXRhID0gbWVtX2xpdmUtPmRhdGE7CisKKyAgICAgIGlmIChHX0lTX09CSkVDVCAoZGF0YSkpIHsKKyAgICAgICAgZ19wcmludCAoIiUtMjIuMjJzIDogJXBcbiIsIGdfdHlwZV9uYW1lIChHX09CSkVDVF9UWVBFIChkYXRhKSksIGRhdGEpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZ19wcmludCAoIiUtMjIuMjJzIDogJXBcbiIsICIiLCBkYXRhKTsKKyAgICAgIH0KKyAgICAgIG1lbV9saXZlID0gbWVtX2xpdmUtPm5leHQ7CisgICAgfQorICB9Cit9CisKKy8qKgorICogZ3N0X2FsbG9jX3RyYWNlX3NldF9mbGFnczoKKyAqIEB0cmFjZTogdGhlIEdzdEFsbG9jVHJhY2UKKyAqIEBmbGFnczogZmxhZ3MgdG8gc2V0CisgKgorICogRW5hYmxlIHRoZSBnaXZlbiBmZWF0dXJlcyBvbiB0aGUgZ2l2ZW4gR3N0QWxsb2NUcmFjZSBvYmplY3QuCisgKi8KK3ZvaWQKK2dzdF9hbGxvY190cmFjZV9zZXRfZmxhZ3MgKEdzdEFsbG9jVHJhY2UgKiB0cmFjZSwgR3N0QWxsb2NUcmFjZUZsYWdzIGZsYWdzKQoreworICBnX3JldHVybl9pZl9mYWlsICh0cmFjZSAhPSBOVUxMKTsKKworICB0cmFjZS0+ZmxhZ3MgPSBmbGFnczsKK30KZGlmZiAtLWdpdCBhL2dzdC9nc3R0cmFjZS5oIGIvZ3N0L2dzdHRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE3YWUxZgotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3R0cmFjZS5oCkBAIC0wLDAgKzEsMjUzIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+CisgKgorICogZ3N0dHJhY2UuaDogSGVhZGVyIGZvciB0cmFjaW5nIGZ1bmN0aW9ucyAoZGVwcmVjYXRlZCkKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKKyNpZm5kZWYgX19HU1RfVFJBQ0VfSF9fCisjZGVmaW5lIF9fR1NUX1RSQUNFX0hfXworCisjaW5jbHVkZSA8Z2xpYi5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICogR3N0QWxsb2NUcmFjZUZsYWdzOgorICogQEdTVF9BTExPQ19UUkFDRV9OT05FOiBObyB0cmFjaW5nIHNwZWNpZmllZCBvciBkZXNpcmVkLiBTaW5jZSAwLjEwLjM2LgorICogQEdTVF9BTExPQ19UUkFDRV9MSVZFOiBUcmFjZSBudW1iZXIgb2Ygbm9uLWZyZWVkIG1lbW9yeS4KKyAqIEBHU1RfQUxMT0NfVFJBQ0VfTUVNX0xJVkU6IFRyYWNlIHBvaW50ZXJzIG9mIHVuZnJlZWQgbWVtb3J5LgorICoKKyAqIEZsYWdzIGluZGljYXRpbmcgd2hpY2ggdHJhY2luZyBmZWF0dXJlIHRvIGVuYWJsZS4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgR1NUX0FMTE9DX1RSQUNFX05PTkUgICAgICA9IDAsCisgIEdTVF9BTExPQ19UUkFDRV9MSVZFICAgICAgPSAoMSA8PCAwKSwKKyAgR1NUX0FMTE9DX1RSQUNFX01FTV9MSVZFCT0gKDEgPDwgMSkKK30gR3N0QWxsb2NUcmFjZUZsYWdzOworCit0eXBlZGVmIHN0cnVjdCBfR3N0QWxsb2NUcmFjZSAJR3N0QWxsb2NUcmFjZTsKKworLyoqCisgKiBHc3RBbGxvY1RyYWNlOgorICogQG5hbWU6IFRoZSBuYW1lIG9mIHRoZSB0cmFjaW5nIG9iamVjdAorICogQGZsYWdzOiBGbGFncyBmb3IgdGhpcyBvYmplY3QKKyAqIEBsaXZlOiBjb3VudGVyIGZvciBsaXZlIG1lbW9yeQorICogQG1lbV9saXZlOiBsaXN0IHdpdGggcG9pbnRlcnMgdG8gdW5mcmVlZCBtZW1vcnkKKyAqCisgKiBUaGUgbWFpbiB0cmFjaW5nIG9iamVjdAorICovCitzdHJ1Y3QgX0dzdEFsbG9jVHJhY2UgeworICBnY2hhcgkJKm5hbWU7CisgIGdpbnQJCSBmbGFnczsKKworICBnaW50CQkgbGl2ZTsKKyAgR1NMaXN0CSptZW1fbGl2ZTsKK307CisKKyNpZm5kZWYgR1NUX0RJU0FCTEVfVFJBQ0UKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdFRyYWNlIAlHc3RUcmFjZTsKK3R5cGVkZWYgc3RydWN0IF9Hc3RUcmFjZUVudHJ5IAlHc3RUcmFjZUVudHJ5OworCisvKioKKyAqIEdzdFRyYWNlOgorICoKKyAqIE9wYXF1ZSAjR3N0VHJhY2Ugc3RydWN0dXJlLgorICovCitzdHJ1Y3QgX0dzdFRyYWNlIHsKKyAgLyo8IHByaXZhdGUgPiovCisgIC8qIHdoZXJlIHRoaXMgdHJhY2UgaXMgZ29pbmcgKi8KKyAgZ2NoYXIgKmZpbGVuYW1lOworICBpbnQgZmQ7CisKKyAgLyogY3VycmVudCBidWZmZXIsIHNpemUsIGhlYWQgb2Zmc2V0ICovCisgIEdzdFRyYWNlRW50cnkgKmJ1ZjsKKyAgZ2ludCBidWZzaXplOworICBnaW50IGJ1Zm9mZnNldDsKK307CisKK3N0cnVjdCBfR3N0VHJhY2VFbnRyeSB7CisgIGdpbnQ2NCB0aW1lc3RhbXA7CisgIGd1aW50MzIgc2VxdWVuY2U7CisgIGd1aW50MzIgZGF0YTsKKyAgZ2NoYXIgbWVzc2FnZVsxMTJdOworfTsKKworR3N0VHJhY2UqCWdzdF90cmFjZV9uZXcJCQkoY29uc3QgZ2NoYXIgKmZpbGVuYW1lLCBnaW50IHNpemUpOworCit2b2lkIAkJZ3N0X3RyYWNlX2Rlc3Ryb3kJCShHc3RUcmFjZSAqdHJhY2UpOwordm9pZCAJCWdzdF90cmFjZV9mbHVzaAkJCShHc3RUcmFjZSAqdHJhY2UpOwordm9pZCAJCWdzdF90cmFjZV90ZXh0X2ZsdXNoCQkoR3N0VHJhY2UgKnRyYWNlKTsKKy8qKgorICogZ3N0X3RyYWNlX2dldF9zaXplOgorICogQHRyYWNlOiBhICNHc3RUcmFjZQorICoKKyAqIFJldHJpZXZlIHRoZSBidWZmZXIgc2l6ZSBvZiBAdHJhY2UuCisgKi8KKyNkZWZpbmUgCWdzdF90cmFjZV9nZXRfc2l6ZSh0cmFjZSkgCSgodHJhY2UpLT5idWZzaXplKQorLyoqCisgKiBnc3RfdHJhY2VfZ2V0X29mZnNldDoKKyAqIEB0cmFjZTogYSAjR3N0VHJhY2UKKyAqCisgKiBSZXRyaWV2ZSB0aGUgY3VycmVudCBidWZmZXIgb2Zmc2V0IG9mIEB0cmFjZS4KKyAqLworI2RlZmluZSAJZ3N0X3RyYWNlX2dldF9vZmZzZXQodHJhY2UpIAkoKHRyYWNlKS0+YnVmb2Zmc2V0KQorLyoqCisgKiBnc3RfdHJhY2VfZ2V0X3JlbWFpbmluZzoKKyAqIEB0cmFjZTogYSAjR3N0VHJhY2UKKyAqCisgKiBSZXRyaWV2ZSB0aGUgcmVtYWluaW5nIHNpemUgaW4gdGhlIEB0cmFjZSBidWZmZXIuCisgKi8KKyNkZWZpbmUgCWdzdF90cmFjZV9nZXRfcmVtYWluaW5nKHRyYWNlKSAJKCh0cmFjZSktPmJ1ZnNpemUgLSAodHJhY2UpLT5idWZvZmZzZXQpCit2b2lkIAkJZ3N0X3RyYWNlX3NldF9kZWZhdWx0CQkoR3N0VHJhY2UgKnRyYWNlKTsKKwordm9pZCAJCV9nc3RfdHJhY2VfYWRkX2VudHJ5CQkoR3N0VHJhY2UgKnRyYWNlLCBndWludDMyIHNlcSwKKwkJCQkJCSBndWludDMyIGRhdGEsIGdjaGFyICptc2cpOworCit2b2lkIAkJZ3N0X3RyYWNlX3JlYWRfdHNjCQkoZ2ludDY0ICpkc3QpOworCisKK2V4dGVybiBHU3RhdGljTXV0ZXggICAgIF9nc3RfdHJhY2VfbXV0ZXg7CisKK2dib29sZWFuCQlnc3RfYWxsb2NfdHJhY2VfYXZhaWxhYmxlCSh2b2lkKTsKK2NvbnN0IEdMaXN0KgkJZ3N0X2FsbG9jX3RyYWNlX2xpc3QJCSh2b2lkKTsKK0dzdEFsbG9jVHJhY2UqCQlfZ3N0X2FsbG9jX3RyYWNlX3JlZ2lzdGVyCShjb25zdCBnY2hhciAqbmFtZSk7CisKK2ludAkJCWdzdF9hbGxvY190cmFjZV9saXZlX2FsbAkodm9pZCk7Cit2b2lkCQkJZ3N0X2FsbG9jX3RyYWNlX3ByaW50X2FsbAkodm9pZCk7Cit2b2lkCQkJZ3N0X2FsbG9jX3RyYWNlX3ByaW50X2xpdmUJKHZvaWQpOwordm9pZAkJCWdzdF9hbGxvY190cmFjZV9zZXRfZmxhZ3NfYWxsCShHc3RBbGxvY1RyYWNlRmxhZ3MgZmxhZ3MpOworCitHc3RBbGxvY1RyYWNlKgkJZ3N0X2FsbG9jX3RyYWNlX2dldAkJKGNvbnN0IGdjaGFyICpuYW1lKTsKK3ZvaWQJCQlnc3RfYWxsb2NfdHJhY2VfcHJpbnQJCShjb25zdCBHc3RBbGxvY1RyYWNlICp0cmFjZSk7Cit2b2lkCQkJZ3N0X2FsbG9jX3RyYWNlX3NldF9mbGFncwkoR3N0QWxsb2NUcmFjZSAqdHJhY2UsIEdzdEFsbG9jVHJhY2VGbGFncyBmbGFncyk7CisKKworI2lmbmRlZiBHU1RfRElTQUJMRV9BTExPQ19UUkFDRQorLyoqCisgKiBnc3RfYWxsb2NfdHJhY2VfcmVnaXN0ZXI6CisgKiBAbmFtZTogVGhlIG5hbWUgb2YgdGhlIHRyYWNlciBvYmplY3QKKyAqCisgKiBSZWdpc3RlciBhIG5ldyBhbGxvYyB0cmFjZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZQorICovCisjZGVmaW5lCWdzdF9hbGxvY190cmFjZV9yZWdpc3RlcihuYW1lKSBfZ3N0X2FsbG9jX3RyYWNlX3JlZ2lzdGVyIChuYW1lKTsKKworLyoqCisgKiBnc3RfYWxsb2NfdHJhY2VfbmV3OgorICogQHRyYWNlOiBUaGUgdHJhY2VyIHRvIHVzZQorICogQG1lbTogVGhlIG1lbW9yeSBhbGxvY2F0ZWQKKyAqCisgKiBVc2UgdGhlIHRyYWNlciB0byB0cmFjZSBhIG5ldyBtZW1vcnkgYWxsb2NhdGlvbgorICovCisjZGVmaW5lCWdzdF9hbGxvY190cmFjZV9uZXcodHJhY2UsIG1lbSkgCQlcCitHX1NUTVRfU1RBUlQgewkJCQkJCVwKKyAgaWYgKEdfVU5MSUtFTFkgKCh0cmFjZSktPmZsYWdzKSkgeyAgICAgICAgICAgICAgICAgICAgXAorICAgIGdfc3RhdGljX211dGV4X2xvY2sgKCZfZ3N0X3RyYWNlX211dGV4KTsgICAgICAgICAgICBcCisgICAgaWYgKCh0cmFjZSktPmZsYWdzICYgR1NUX0FMTE9DX1RSQUNFX0xJVkUpIAkJXAorICAgICAgKHRyYWNlKS0+bGl2ZSsrOwkJCQkJXAorICAgIGlmICgodHJhY2UpLT5mbGFncyAmIEdTVF9BTExPQ19UUkFDRV9NRU1fTElWRSkgCVwKKyAgICAgICh0cmFjZSktPm1lbV9saXZlID0gCQkJCVwKKyAgICAgICAgZ19zbGlzdF9wcmVwZW5kICgodHJhY2UpLT5tZW1fbGl2ZSwgbWVtKTsJXAorICAgIGdfc3RhdGljX211dGV4X3VubG9jayAoJl9nc3RfdHJhY2VfbXV0ZXgpOyAgICAgICAgICBcCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gR19TVE1UX0VORAorCisvKioKKyAqIGdzdF9hbGxvY190cmFjZV9mcmVlOgorICogQHRyYWNlOiBUaGUgdHJhY2VyIHRvIHVzZQorICogQG1lbTogVGhlIG1lbW9yeSB0aGF0IGlzIGZyZWVkCisgKgorICogVHJhY2UgYSBtZW1vcnkgZnJlZSBvcGVyYXRpb24KKyAqLworI2RlZmluZQlnc3RfYWxsb2NfdHJhY2VfZnJlZSh0cmFjZSwgbWVtKSAJCVwKK0dfU1RNVF9TVEFSVCB7CQkJCQkJXAorICBpZiAoR19VTkxJS0VMWSAoKHRyYWNlKS0+ZmxhZ3MpKSB7ICAgICAgICAgICAgICAgICAgICBcCisgICAgZ19zdGF0aWNfbXV0ZXhfbG9jayAoJl9nc3RfdHJhY2VfbXV0ZXgpOyAgICAgICAgICAgIFwKKyAgICBpZiAoKHRyYWNlKS0+ZmxhZ3MgJiBHU1RfQUxMT0NfVFJBQ0VfTElWRSkgCQlcCisgICAgICAodHJhY2UpLT5saXZlLS07CQkJCQlcCisgICAgaWYgKCh0cmFjZSktPmZsYWdzICYgR1NUX0FMTE9DX1RSQUNFX01FTV9MSVZFKSAJXAorICAgICAgKHRyYWNlKS0+bWVtX2xpdmUgPSAJCQkJXAorICAgICAgICBnX3NsaXN0X3JlbW92ZSAoKHRyYWNlKS0+bWVtX2xpdmUsIG1lbSk7IAlcCisgICAgZ19zdGF0aWNfbXV0ZXhfdW5sb2NrICgmX2dzdF90cmFjZV9tdXRleCk7ICAgICAgICAgIFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSBHX1NUTVRfRU5ECisKKyNlbHNlCisjZGVmaW5lCWdzdF9hbGxvY190cmFjZV9yZWdpc3RlcihuYW1lKSAoTlVMTCkKKyNkZWZpbmUJZ3N0X2FsbG9jX3RyYWNlX25ldyh0cmFjZSwgbWVtKQorI2RlZmluZQlnc3RfYWxsb2NfdHJhY2VfZnJlZSh0cmFjZSwgbWVtKQorI2VuZGlmCisKKworZXh0ZXJuIGdpbnQgX2dzdF90cmFjZV9vbjsKKy8qKgorICogZ3N0X3RyYWNlX2FkZF9lbnRyeToKKyAqIEB0cmFjZTogYSAjR3N0VHJhY2UKKyAqIEBzZXE6IGEgc2VxdWVuY2UgbnVtYmVyCisgKiBAZGF0YTogdGhlIGRhdGEgdG8gdHJhY2UKKyAqIEBtc2c6IHRoZSB0cmFjZSBtZXNzYWdlCisgKgorICogQWRkIGFuIGVudHJ5IHRvIEB0cmFjZSB3aXRoIHNlcXVlbmNlIG51bWJlciBAc2VxLCBAZGF0YSBhbmQgQG1zZy4KKyAqIElmIEB0cmFjZSBpcyBOVUxMLCB0aGUgZW50cnkgd2lsbCBiZSBhZGRlZCB0byB0aGUgZGVmYXVsdCAjR3N0VHJhY2UuCisgKi8KKyNkZWZpbmUgZ3N0X3RyYWNlX2FkZF9lbnRyeSh0cmFjZSxzZXEsZGF0YSxtc2cpIFwKKyAgaWYgKF9nc3RfdHJhY2Vfb24pIHsgXAorICAgIF9nc3RfdHJhY2VfYWRkX2VudHJ5KHRyYWNlLChndWludDMyKXNlcSwoZ3VpbnQzMilkYXRhLG1zZyk7IFwKKyAgfQorCisjZWxzZSAvKiBHU1RfRElTQUJMRV9UUkFDRSAqLworCisjaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiBfX0dOVUNfXyA+PSAzCisjcHJhZ21hIEdDQyBwb2lzb24gCWdzdF90cmFjZV9uZXcKKyNwcmFnbWEgR0NDIHBvaXNvbglnc3RfdHJhY2VfZGVzdHJveQorI3ByYWdtYSBHQ0MgcG9pc29uIAlnc3RfdHJhY2VfZmx1c2gKKyNwcmFnbWEgR0NDIHBvaXNvbglnc3RfdHJhY2VfdGV4dF9mbHVzaAorI3ByYWdtYSBHQ0MgcG9pc29uIAlnc3RfdHJhY2VfZ2V0X3NpemUKKyNwcmFnbWEgR0NDIHBvaXNvbiAJZ3N0X3RyYWNlX2dldF9vZmZzZXQKKyNwcmFnbWEgR0NDIHBvaXNvbiAJZ3N0X3RyYWNlX2dldF9yZW1haW5pbmcKKyNwcmFnbWEgR0NDIHBvaXNvbiAJZ3N0X3RyYWNlX3NldF9kZWZhdWx0CisjcHJhZ21hIEdDQyBwb2lzb24gCV9nc3RfdHJhY2VfYWRkX2VudHJ5CisjcHJhZ21hIEdDQyBwb2lzb24gCWdzdF90cmFjZV9yZWFkX3RzYworI2VuZGlmCisKKyNkZWZpbmUJCWdzdF9hbGxvY190cmFjZV9yZWdpc3RlcihuYW1lKQkoTlVMTCkKKyNkZWZpbmUJCWdzdF9hbGxvY190cmFjZV9uZXcodHJhY2UsIG1lbSkKKyNkZWZpbmUJCWdzdF9hbGxvY190cmFjZV9mcmVlKHRyYWNlLCBtZW0pCisKKyNkZWZpbmUJCWdzdF9hbGxvY190cmFjZV9hdmFpbGFibGUoKQkoRkFMU0UpCisjZGVmaW5lCQlnc3RfYWxsb2NfdHJhY2VfbGlzdCgpCQkoTlVMTCkKKyNkZWZpbmUJCV9nc3RfYWxsb2NfdHJhY2VfcmVnaXN0ZXIobmFtZSkJKE5VTEwpCisKKyNkZWZpbmUJCWdzdF9hbGxvY190cmFjZV9saXZlX2FsbCgpCSgwKQorI2RlZmluZQkJZ3N0X2FsbG9jX3RyYWNlX3ByaW50X2FsbCgpCisjZGVmaW5lCQlnc3RfYWxsb2NfdHJhY2VfcHJpbnRfbGl2ZSgpCisjZGVmaW5lCQlnc3RfYWxsb2NfdHJhY2Vfc2V0X2ZsYWdzX2FsbChmbGFncykKKworI2RlZmluZQkJZ3N0X2FsbG9jX3RyYWNlX2dldChuYW1lKQkoTlVMTCkKKyNkZWZpbmUJCWdzdF9hbGxvY190cmFjZV9wcmludCh0cmFjZSkKKyNkZWZpbmUJCWdzdF9hbGxvY190cmFjZV9zZXRfZmxhZ3ModHJhY2UsZmxhZ3MpCisKKyNkZWZpbmUgICAgICAgICBnc3RfdHJhY2VfYWRkX2VudHJ5KHRyYWNlLHNlcSxkYXRhLG1zZykKKworI2VuZGlmIC8qIEdTVF9ESVNBQkxFX1RSQUNFICovCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9UUkFDRV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3R0eXBlZmluZC5jIGIvZ3N0L2dzdHR5cGVmaW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYwYjE2ZAotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3R0eXBlZmluZC5jCkBAIC0wLDAgKzEsMjMxIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwMyBCZW5qYW1pbiBPdHRlIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KKyAqCisgKiBnc3R0eXBlZmluZC5jOiB0eXBlZmluZGluZyBzdWJzeXN0ZW0KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKioKKyAqIFNFQ1RJT046Z3N0dHlwZWZpbmQKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogU3RyZWFtIHR5cGUgZGV0ZWN0aW9uCisgKgorICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYWxsb3cgeW91IHRvIGRldGVjdCB0aGUgbWVkaWEgdHlwZSBvZiBhbiB1bmtub3duCisgKiBzdHJlYW0uCisgKgorICogTGFzdCByZXZpZXdlZCBvbiAyMDA1LTExLTA5ICgwLjkuNCkKKyAqLworCisjaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJnc3RpbmZvLmgiCisjaW5jbHVkZSAiZ3N0dHlwZWZpbmQuaCIKKyNpbmNsdWRlICJnc3RyZWdpc3RyeS5oIgorI2luY2x1ZGUgImdzdHR5cGVmaW5kZmFjdG9yeS5oIgorCitHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOICh0eXBlX2ZpbmRfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgdHlwZV9maW5kX2RlYnVnCisKK0dUeXBlCitnc3RfdHlwZV9maW5kX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgR1R5cGUgdHlwZWZpbmRfdHlwZSA9IDA7CisKKyAgaWYgKEdfVU5MSUtFTFkgKHR5cGVmaW5kX3R5cGUgPT0gMCkpIHsKKyAgICB0eXBlZmluZF90eXBlID0gZ19wb2ludGVyX3R5cGVfcmVnaXN0ZXJfc3RhdGljICgiR3N0VHlwZUZpbmQiKTsKKyAgfQorICByZXR1cm4gdHlwZWZpbmRfdHlwZTsKK30KKworLyoqCisgKiBnc3RfdHlwZV9maW5kX3JlZ2lzdGVyOgorICogQHBsdWdpbjogQSAjR3N0UGx1Z2luLCBvciBOVUxMIGZvciBhIHN0YXRpYyB0eXBlZmluZCBmdW5jdGlvbiAobm90ZSB0aGF0CisgKiAgICBwYXNzaW5nIE5VTEwgb25seSB3b3JrcyBpbiBHU3RyZWFtZXIgMC4xMC4xNiBhbmQgbGF0ZXIpCisgKiBAbmFtZTogVGhlIG5hbWUgZm9yIHJlZ2lzdGVyaW5nCisgKiBAcmFuazogVGhlIHJhbmsgKG9yIGltcG9ydGFuY2UpIG9mIHRoaXMgdHlwZWZpbmQgZnVuY3Rpb24KKyAqIEBmdW5jOiBUaGUgI0dzdFR5cGVGaW5kRnVuY3Rpb24gdG8gdXNlCisgKiBAZXh0ZW5zaW9uczogKHRyYW5zZmVyIG5vbmUpIChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSkgKGVsZW1lbnQtdHlwZSB1dGY4KToKKyAqICAgICBPcHRpb25hbCBleHRlbnNpb25zIHRoYXQgY291bGQgYmVsb25nIHRvIHRoaXMgdHlwZQorICogQHBvc3NpYmxlX2NhcHM6IE9wdGlvbmFsbHkgdGhlIGNhcHMgdGhhdCBjb3VsZCBiZSByZXR1cm5lZCB3aGVuIHR5cGVmaW5kaW5nCisgKiAgICAgICAgICAgICAgICAgc3VjY2VlZHMKKyAqIEBkYXRhOiBPcHRpb25hbCB1c2VyIGRhdGEuIFRoaXMgdXNlciBkYXRhIG11c3QgYmUgYXZhaWxhYmxlIHVudGlsIHRoZSBwbHVnaW4KKyAqICAgICAgICBpcyB1bmxvYWRlZC4KKyAqIEBkYXRhX25vdGlmeTogYSAjR0Rlc3Ryb3lOb3RpZnkgdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBAZGF0YSB3aGVuIHRoZSBwbHVnaW4KKyAqICAgICAgICBpcyB1bmxvYWRlZC4KKyAqCisgKiBSZWdpc3RlcnMgYSBuZXcgdHlwZWZpbmQgZnVuY3Rpb24gdG8gYmUgdXNlZCBmb3IgdHlwZWZpbmRpbmcuIEFmdGVyCisgKiByZWdpc3RlcmluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgYXZhaWxhYmxlIGZvciB0eXBlZmluZGluZy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IGNhbGxlZCBkdXJpbmcgYW4gZWxlbWVudCdzIHBsdWdpbiBpbml0aWFsaXphdGlvbi4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIG9uIHN1Y2Nlc3MsIEZBTFNFIG90aGVyd2lzZQorICovCitnYm9vbGVhbgorZ3N0X3R5cGVfZmluZF9yZWdpc3RlciAoR3N0UGx1Z2luICogcGx1Z2luLCBjb25zdCBnY2hhciAqIG5hbWUsIGd1aW50IHJhbmssCisgICAgR3N0VHlwZUZpbmRGdW5jdGlvbiBmdW5jLCBnY2hhciAqKiBleHRlbnNpb25zLAorICAgIGNvbnN0IEdzdENhcHMgKiBwb3NzaWJsZV9jYXBzLCBncG9pbnRlciBkYXRhLCBHRGVzdHJveU5vdGlmeSBkYXRhX25vdGlmeSkKK3sKKyAgR3N0VHlwZUZpbmRGYWN0b3J5ICpmYWN0b3J5OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYW1lICE9IE5VTEwsIEZBTFNFKTsKKworICBHU1RfSU5GTyAoInJlZ2lzdGVyaW5nIHR5cGVmaW5kIGZ1bmN0aW9uIGZvciAlcyIsIG5hbWUpOworCisgIGZhY3RvcnkgPSBnX29iamVjdF9uZXd2IChHU1RfVFlQRV9UWVBFX0ZJTkRfRkFDVE9SWSwgMCwgTlVMTCk7CisgIEdTVF9ERUJVR19PQkpFQ1QgKGZhY3RvcnksICJ1c2luZyBuZXcgdHlwZWZpbmQgZmFjdG9yeSBmb3IgJXMiLCBuYW1lKTsKKyAgZ19hc3NlcnQgKEdTVF9JU19UWVBFX0ZJTkRfRkFDVE9SWSAoZmFjdG9yeSkpOworCisgIGdzdF9wbHVnaW5fZmVhdHVyZV9zZXRfbmFtZSAoR1NUX1BMVUdJTl9GRUFUVVJFX0NBU1QgKGZhY3RvcnkpLCBuYW1lKTsKKyAgZ3N0X3BsdWdpbl9mZWF0dXJlX3NldF9yYW5rIChHU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVCAoZmFjdG9yeSksIHJhbmspOworCisgIGlmIChmYWN0b3J5LT5leHRlbnNpb25zKQorICAgIGdfc3RyZnJlZXYgKGZhY3RvcnktPmV4dGVuc2lvbnMpOworICBmYWN0b3J5LT5leHRlbnNpb25zID0gZ19zdHJkdXB2IChleHRlbnNpb25zKTsKKworICBnc3RfY2Fwc19yZXBsYWNlICgmZmFjdG9yeS0+Y2FwcywgKEdzdENhcHMgKikgcG9zc2libGVfY2Fwcyk7CisgIGZhY3RvcnktPmZ1bmN0aW9uID0gZnVuYzsKKyAgZmFjdG9yeS0+dXNlcl9kYXRhID0gZGF0YTsKKyAgZmFjdG9yeS0+dXNlcl9kYXRhX25vdGlmeSA9IGRhdGFfbm90aWZ5OworICBpZiAocGx1Z2luICYmIHBsdWdpbi0+ZGVzYy5uYW1lKSB7CisgICAgR1NUX1BMVUdJTl9GRUFUVVJFX0NBU1QgKGZhY3RvcnkpLT5wbHVnaW5fbmFtZSA9IHBsdWdpbi0+ZGVzYy5uYW1lOyAvKiBpbnRlcm5lZCBzdHJpbmcgKi8KKyAgICBHU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVCAoZmFjdG9yeSktPnBsdWdpbiA9IHBsdWdpbjsKKyAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyICgoR09iamVjdCAqKSBwbHVnaW4sCisgICAgICAgIChncG9pbnRlciAqKSAmIEdTVF9QTFVHSU5fRkVBVFVSRV9DQVNUIChmYWN0b3J5KS0+cGx1Z2luKTsKKyAgfSBlbHNlIHsKKyAgICBHU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVCAoZmFjdG9yeSktPnBsdWdpbl9uYW1lID0gIk5VTEwiOworICAgIEdTVF9QTFVHSU5fRkVBVFVSRV9DQVNUIChmYWN0b3J5KS0+cGx1Z2luID0gTlVMTDsKKyAgfQorICBHU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVCAoZmFjdG9yeSktPmxvYWRlZCA9IFRSVUU7CisKKyAgZ3N0X3JlZ2lzdHJ5X2FkZF9mZWF0dXJlIChnc3RfcmVnaXN0cnlfZ2V0X2RlZmF1bHQgKCksCisgICAgICBHU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVCAoZmFjdG9yeSkpOworCisgIHJldHVybiBUUlVFOworfQorCisvKioqIHR5cGVmaW5kIGZ1bmN0aW9uIGludGVyZmFjZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIGdzdF90eXBlX2ZpbmRfcGVlazoKKyAqIEBmaW5kOiBUaGUgI0dzdFR5cGVGaW5kIG9iamVjdCB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZCB3aXRoCisgKiBAb2Zmc2V0OiBUaGUgb2Zmc2V0CisgKiBAc2l6ZTogVGhlIG51bWJlciBvZiBieXRlcyB0byByZXR1cm4KKyAqCisgKiBSZXR1cm5zIHRoZSBAc2l6ZSBieXRlcyBvZiB0aGUgc3RyZWFtIHRvIGlkZW50aWZ5IGJlZ2lubmluZyBhdCBvZmZzZXQuIElmCisgKiBvZmZzZXQgaXMgYSBwb3NpdGl2ZSBudW1iZXIsIHRoZSBvZmZzZXQgaXMgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUKKyAqIHN0cmVhbSwgaWYgb2Zmc2V0IGlzIGEgbmVnYXRpdmUgbnVtYmVyIHRoZSBvZmZzZXQgaXMgcmVsYXRpdmUgdG8gdGhlIGVuZCBvZgorICogdGhlIHN0cmVhbS4gVGhlIHJldHVybmVkIG1lbW9yeSBpcyB2YWxpZCB1bnRpbCB0aGUgdHlwZWZpbmRpbmcgZnVuY3Rpb24KKyAqIHJldHVybnMgYW5kIG11c3Qgbm90IGJlIGZyZWVkLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKSAoYXJyYXkgbGVuZ3RoPXNpemUpOiB0aGUgcmVxdWVzdGVkIGRhdGEsIG9yIE5VTEwKKyAqICAgICBpZiB0aGF0IGRhdGEgaXMgbm90IGF2YWlsYWJsZS4KKyAqLworY29uc3QgZ3VpbnQ4ICoKK2dzdF90eXBlX2ZpbmRfcGVlayAoR3N0VHlwZUZpbmQgKiBmaW5kLCBnaW50NjQgb2Zmc2V0LCBndWludCBzaXplKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmluZC0+cGVlayAhPSBOVUxMLCBOVUxMKTsKKworICByZXR1cm4gZmluZC0+cGVlayAoZmluZC0+ZGF0YSwgb2Zmc2V0LCBzaXplKTsKK30KKworLyoqCisgKiBnc3RfdHlwZV9maW5kX3N1Z2dlc3Q6CisgKiBAZmluZDogVGhlICNHc3RUeXBlRmluZCBvYmplY3QgdGhlIGZ1bmN0aW9uIHdhcyBjYWxsZWQgd2l0aAorICogQHByb2JhYmlsaXR5OiBUaGUgcHJvYmFiaWxpdHkgaW4gcGVyY2VudCB0aGF0IHRoZSBzdWdnZXN0aW9uIGlzIHJpZ2h0CisgKiBAY2FwczogVGhlIGZpeGVkICNHc3RDYXBzIHRvIHN1Z2dlc3QKKyAqCisgKiBJZiBhICNHc3RUeXBlRmluZEZ1bmN0aW9uIGNhbGxzIHRoaXMgZnVuY3Rpb24gaXQgc3VnZ2VzdHMgdGhlIGNhcHMgd2l0aCB0aGUKKyAqIGdpdmVuIHByb2JhYmlsaXR5LiBBICNHc3RUeXBlRmluZEZ1bmN0aW9uIG1heSBzdXBwbHkgZGlmZmVyZW50IHN1Z2dlc3Rpb25zCisgKiBpbiBvbmUgY2FsbC4KKyAqIEl0IGlzIHVwIHRvIHRoZSBjYWxsZXIgb2YgdGhlICNHc3RUeXBlRmluZEZ1bmN0aW9uIHRvIGludGVycHJldCB0aGVzZSB2YWx1ZXMuCisgKi8KK3ZvaWQKK2dzdF90eXBlX2ZpbmRfc3VnZ2VzdCAoR3N0VHlwZUZpbmQgKiBmaW5kLCBndWludCBwcm9iYWJpbGl0eSwKKyAgICBjb25zdCBHc3RDYXBzICogY2FwcykKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoZmluZC0+c3VnZ2VzdCAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAocHJvYmFiaWxpdHkgPD0gMTAwKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoY2FwcyAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X2NhcHNfaXNfZml4ZWQgKGNhcHMpKTsKKworICBmaW5kLT5zdWdnZXN0IChmaW5kLT5kYXRhLCBwcm9iYWJpbGl0eSwgY2Fwcyk7Cit9CisKKy8qKgorICogZ3N0X3R5cGVfZmluZF9zdWdnZXN0X3NpbXBsZToKKyAqIEBmaW5kOiBUaGUgI0dzdFR5cGVGaW5kIG9iamVjdCB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZCB3aXRoCisgKiBAcHJvYmFiaWxpdHk6IFRoZSBwcm9iYWJpbGl0eSBpbiBwZXJjZW50IHRoYXQgdGhlIHN1Z2dlc3Rpb24gaXMgcmlnaHQKKyAqIEBtZWRpYV90eXBlOiB0aGUgbWVkaWEgdHlwZSBvZiB0aGUgc3VnZ2VzdGVkIGNhcHMKKyAqIEBmaWVsZG5hbWU6IGZpcnN0IGZpZWxkIG9mIHRoZSBzdWdnZXN0ZWQgY2Fwcywgb3IgTlVMTAorICogQC4uLjogYWRkaXRpb25hbCBhcmd1bWVudHMgdG8gdGhlIHN1Z2dlc3RlZCBjYXBzIGluIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUKKyAqICAgICBhcmd1bWVudHMgcGFzc2VkIHRvIGdzdF9zdHJ1Y3R1cmVfbmV3KCkgKGllLiB0cmlwbGV0cyBvZiBmaWVsZCBuYW1lLAorICogICAgIGZpZWxkIEdUeXBlIGFuZCBmaWVsZCB2YWx1ZSkKKyAqCisgKiBJZiBhICNHc3RUeXBlRmluZEZ1bmN0aW9uIGNhbGxzIHRoaXMgZnVuY3Rpb24gaXQgc3VnZ2VzdHMgdGhlIGNhcHMgd2l0aCB0aGUKKyAqIGdpdmVuIHByb2JhYmlsaXR5LiBBICNHc3RUeXBlRmluZEZ1bmN0aW9uIG1heSBzdXBwbHkgZGlmZmVyZW50IHN1Z2dlc3Rpb25zCisgKiBpbiBvbmUgY2FsbC4gSXQgaXMgdXAgdG8gdGhlIGNhbGxlciBvZiB0aGUgI0dzdFR5cGVGaW5kRnVuY3Rpb24gdG8gaW50ZXJwcmV0CisgKiB0aGVzZSB2YWx1ZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIGdzdF90eXBlX2ZpbmRfc3VnZ2VzdCgpLCBvbmx5IHRoYXQgaW5zdGVhZCBvZgorICogcGFzc2luZyBhICNHc3RDYXBzIGFyZ3VtZW50IHlvdSBjYW4gY3JlYXRlIHRoZSBjYXBzIG9uIHRoZSBmbHkgaW4gdGhlIHNhbWUKKyAqIHdheSBhcyB5b3UgY2FuIHdpdGggZ3N0X2NhcHNfbmV3X3NpbXBsZSgpLgorICoKKyAqIE1ha2Ugc3VyZSB5b3UgdGVybWluYXRlIHRoZSBsaXN0IG9mIGFyZ3VtZW50cyB3aXRoIGEgTlVMTCBhcmd1bWVudCBhbmQgdGhhdAorICogdGhlIHZhbHVlcyBwYXNzZWQgaGF2ZSB0aGUgY29ycmVjdCB0eXBlIChpbiB0ZXJtcyBvZiB3aWR0aCBpbiBieXRlcyB3aGVuCisgKiBwYXNzZWQgdG8gdGhlIHZhcmFyZyBmdW5jdGlvbiAtIHRoaXMgYXBwbGllcyBwYXJ0aWN1bGFybHkgdG8gZ2RvdWJsZSBhbmQKKyAqIGd1aW50NjQgYXJndW1lbnRzKS4KKyAqCisgKiBTaW5jZTogMC4xMC4yMAorICovCit2b2lkCitnc3RfdHlwZV9maW5kX3N1Z2dlc3Rfc2ltcGxlIChHc3RUeXBlRmluZCAqIGZpbmQsIGd1aW50IHByb2JhYmlsaXR5LAorICAgIGNvbnN0IGNoYXIgKm1lZGlhX3R5cGUsIGNvbnN0IGNoYXIgKmZpZWxkbmFtZSwgLi4uKQoreworICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKyAgdmFfbGlzdCB2YXJfYXJnczsKKyAgR3N0Q2FwcyAqY2FwczsKKworICBnX3JldHVybl9pZl9mYWlsIChmaW5kLT5zdWdnZXN0ICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsIChwcm9iYWJpbGl0eSA8PSAxMDApOworICBnX3JldHVybl9pZl9mYWlsIChtZWRpYV90eXBlICE9IE5VTEwpOworCisgIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7CisKKyAgdmFfc3RhcnQgKHZhcl9hcmdzLCBmaWVsZG5hbWUpOworICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld192YWxpc3QgKG1lZGlhX3R5cGUsIGZpZWxkbmFtZSwgdmFyX2FyZ3MpOworICB2YV9lbmQgKHZhcl9hcmdzKTsKKworICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlIChjYXBzLCBzdHJ1Y3R1cmUpOworICBnX3JldHVybl9pZl9mYWlsIChnc3RfY2Fwc19pc19maXhlZCAoY2FwcykpOworCisgIGZpbmQtPnN1Z2dlc3QgKGZpbmQtPmRhdGEsIHByb2JhYmlsaXR5LCBjYXBzKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOworfQorCisvKioKKyAqIGdzdF90eXBlX2ZpbmRfZ2V0X2xlbmd0aDoKKyAqIEBmaW5kOiBUaGUgI0dzdFR5cGVGaW5kIHRoZSBmdW5jdGlvbiB3YXMgY2FsbGVkIHdpdGgKKyAqCisgKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBzdHJlYW0uCisgKgorICogUmV0dXJuczogVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBzdHJlYW0sIG9yIDAgaWYgaXQgaXMgbm90IGF2YWlsYWJsZS4KKyAqLworZ3VpbnQ2NAorZ3N0X3R5cGVfZmluZF9nZXRfbGVuZ3RoIChHc3RUeXBlRmluZCAqIGZpbmQpCit7CisgIGlmIChmaW5kLT5nZXRfbGVuZ3RoID09IE5VTEwpCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIGZpbmQtPmdldF9sZW5ndGggKGZpbmQtPmRhdGEpOworfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHR5cGVmaW5kLmggYi9nc3QvZ3N0dHlwZWZpbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2M3ZTMyCi0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdHR5cGVmaW5kLmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDAzIEJlbmphbWluIE90dGUgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgorICoKKyAqIGdzdHR5cGVmaW5kLmg6IHR5cGVmaW5kaW5nIHN1YnN5c3RlbQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworI2lmbmRlZiBfX0dTVF9UWVBFX0ZJTkRfSF9fCisjZGVmaW5lIF9fR1NUX1RZUEVfRklORF9IX18KKworI2luY2x1ZGUgPGdzdC9nc3RjYXBzLmg+CisjaW5jbHVkZSA8Z3N0L2dzdHBsdWdpbi5oPgorI2luY2x1ZGUgPGdzdC9nc3RwbHVnaW5mZWF0dXJlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBHU1RfVFlQRV9UWVBFX0ZJTkQgIChnc3RfdHlwZV9maW5kX2dldF90eXBlKCkpCisKK3R5cGVkZWYgc3RydWN0IF9Hc3RUeXBlRmluZCBHc3RUeXBlRmluZDsKKworLyoqCisgKiBHc3RUeXBlRmluZEZ1bmN0aW9uOgorICogQGZpbmQ6IEEgI0dzdFR5cGVGaW5kIHN0cnVjdHVyZQorICogQGRhdGE6IG9wdGlvbm5hbCBkYXRhIHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9uCisgKgorICogQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGJ5IHR5cGVmaW5kaW5nLgorICovCit0eXBlZGVmIHZvaWQgKCogR3N0VHlwZUZpbmRGdW5jdGlvbikgKEdzdFR5cGVGaW5kICpmaW5kLCBncG9pbnRlciBkYXRhKTsKKworLyoqCisgKiBHc3RUeXBlRmluZFByb2JhYmlsaXR5OgorICogQEdTVF9UWVBFX0ZJTkRfTk9ORTogdHlwZSB1bmRldGVjdGVkLiBTaW5jZSAwLjEwLjM2LgorICogQEdTVF9UWVBFX0ZJTkRfTUlOSU1VTTogdW5saWtlbHkgdHlwZWZpbmQuCisgKiBAR1NUX1RZUEVfRklORF9QT1NTSUJMRTogcG9zc2libGUgdHlwZSBkZXRlY3RlZC4KKyAqIEBHU1RfVFlQRV9GSU5EX0xJS0VMWTogbGlrZWx5IGEgdHlwZSB3YXMgZGV0ZWN0ZWQuCisgKiBAR1NUX1RZUEVfRklORF9ORUFSTFlfQ0VSVEFJTjogbmVhcmx5IGNlcnRhaW4gdGhhdCBhIHR5cGUgd2FzIGRldGVjdGVkLgorICogQEdTVF9UWVBFX0ZJTkRfTUFYSU1VTTogdmVyeSBjZXJ0YWluIGEgdHlwZSB3YXMgZGV0ZWN0ZWQuCisgKgorICogVGhlIHByb2JhYmlsaXR5IG9mIHRoZSB0eXBlZmluZCBmdW5jdGlvbi4gSGlnaGVyIHZhbHVlcyBoYXZlIG1vcmUgY2VydGFpbnR5CisgKiBpbiBkb2luZyBhIHJlbGlhYmxlIHR5cGVmaW5kLgorICovCit0eXBlZGVmIGVudW0geworICBHU1RfVFlQRV9GSU5EX05PTkUgPSAwLAorICBHU1RfVFlQRV9GSU5EX01JTklNVU0gPSAxLAorICBHU1RfVFlQRV9GSU5EX1BPU1NJQkxFID0gNTAsCisgIEdTVF9UWVBFX0ZJTkRfTElLRUxZID0gODAsCisgIEdTVF9UWVBFX0ZJTkRfTkVBUkxZX0NFUlRBSU4gPSA5OSwKKyAgR1NUX1RZUEVfRklORF9NQVhJTVVNID0gMTAwCit9IEdzdFR5cGVGaW5kUHJvYmFiaWxpdHk7CisKKy8qKgorICogR3N0VHlwZUZpbmQ6CisgKiBAcGVlazogTWV0aG9kIHRvIHBlZWsgZGF0YS4KKyAqIEBzdWdnZXN0OiBNZXRob2QgdG8gc3VnZ2VzdCAjR3N0Q2FwcyB3aXRoIGEgZ2l2ZW4gcHJvYmFiaWxpdHkuCisgKiBAZGF0YTogVGhlIGRhdGEgdXNlZCBieSB0aGUgY2FsbGVyIG9mIHRoZSB0eXBlZmluZGluZyBmdW5jdGlvbi4KKyAqIEBnZXRfbGVuZ3RoOiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgY3VycmVudCBkYXRhLgorICoKKyAqIE9iamVjdCB0aGF0IHN0b3JlcyB0eXBlZmluZCBjYWxsYmFja3MuIFRvIHVzZSB3aXRoICNHc3RUeXBlRmluZEZhY3RvcnkuCisgKi8KK3N0cnVjdCBfR3N0VHlwZUZpbmQgeworICAvKiBwcml2YXRlIHRvIHRoZSBjYWxsZXIgb2YgdGhlIHR5cGVmaW5kIGZ1bmN0aW9uICovCisgIGNvbnN0IGd1aW50OCAqICAoKiBwZWVrKSAgICAgICAoZ3BvaW50ZXIgICAgICAgICBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQ2NCAgICAgICAgICAgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgc2l6ZSk7CisKKyAgdm9pZCAgICAgICAgICAgICgqIHN1Z2dlc3QpICAgIChncG9pbnRlciAgICAgICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICBwcm9iYWJpbGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHc3RDYXBzICogIGNhcHMpOworCisgIGdwb2ludGVyICAgICAgICAgZGF0YTsKKworICAvKiBvcHRpb25hbCAqLworICBndWludDY0ICAgICAgICAgKCogZ2V0X2xlbmd0aCkgKGdwb2ludGVyIGRhdGEpOworCisgIC8qIDxwcml2YXRlPiAqLworICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKK307CisKK0dUeXBlICAgICBnc3RfdHlwZV9maW5kX2dldF90eXBlICAgKHZvaWQpOworCisvKiB0eXBlZmluZCBmdW5jdGlvbiBpbnRlcmZhY2UgKi8KK2NvbnN0IGd1aW50OCAqICBnc3RfdHlwZV9maW5kX3BlZWsgICAgICAgKEdzdFR5cGVGaW5kICAgKiBmaW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0ICAgICAgICAgIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICBzaXplKTsKKwordm9pZCAgICAgICAgICAgIGdzdF90eXBlX2ZpbmRfc3VnZ2VzdCAgICAoR3N0VHlwZUZpbmQgICAqIGZpbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgcHJvYmFiaWxpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHc3RDYXBzICogY2Fwcyk7CisKK3ZvaWQgICAgICAgICAgICBnc3RfdHlwZV9maW5kX3N1Z2dlc3Rfc2ltcGxlIChHc3RUeXBlRmluZCAqIGZpbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICBwcm9iYWJpbGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAqIG1lZGlhX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgKiBmaWVsZG5hbWUsIC4uLik7CisKK2d1aW50NjQgICBnc3RfdHlwZV9maW5kX2dldF9sZW5ndGggKEdzdFR5cGVGaW5kICAgKiBmaW5kKTsKKworLyogcmVnaXN0cmF0aW9uIGludGVyZmFjZSAqLworZ2Jvb2xlYW4gIGdzdF90eXBlX2ZpbmRfcmVnaXN0ZXIgICAoR3N0UGx1Z2luICAgICAgICAgICAgKiBwbHVnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAqIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAgIHJhbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUeXBlRmluZEZ1bmN0aW9uICAgIGZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY2hhciAgICAgICAgICAgICAgICoqIGV4dGVuc2lvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHc3RDYXBzICAgICAgICAqIHBvc3NpYmxlX2NhcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSAgICAgICAgIGRhdGFfbm90aWZ5KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fR1NUX1RZUEVfRklORF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3R0eXBlZmluZGZhY3RvcnkuYyBiL2dzdC9nc3R0eXBlZmluZGZhY3RvcnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmNiZmI1Ci0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5jCkBAIC0wLDAgKzEsMjI3IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwMyBCZW5qYW1pbiBPdHRlIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KKyAqCisgKiBnc3R0eXBlZmluZGZhY3RvcnkuYzogdHlwZWZpbmRpbmcgc3Vic3lzdGVtCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoqCisgKiBTRUNUSU9OOmdzdHR5cGVmaW5kZmFjdG9yeQorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBJbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlcmVkIHR5cGVmaW5kIGZ1bmN0aW9ucworICoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBhbGxvdyBxdWVyeWluZyBpbmZvcm1hdGlvbnMgYWJvdXQgcmVnaXN0ZXJlZCB0eXBlZmluZAorICogZnVuY3Rpb25zLiBIb3cgdG8gY3JlYXRlIGFuZCByZWdpc3RlciB0aGVzZSBmdW5jdGlvbnMgaXMgZGVzY3JpYmVkIGluCisgKiB0aGUgc2VjdGlvbiA8bGluayBsaW5rZW5kPSJnc3RyZWFtZXItV3JpdGluZy10eXBlZmluZC1mdW5jdGlvbnMiPgorICogIldyaXRpbmcgdHlwZWZpbmQgZnVuY3Rpb25zIjwvbGluaz4uCisgKgorICogPGV4YW1wbGU+CisgKiAgIDx0aXRsZT5ob3cgdG8gd3JpdGUgYSBzaW1wbGUgdHlwZWZpbmRlcjwvdGl0bGU+CisgKiAgIDxwcm9ncmFtbGlzdGluZz4KKyAqICAgdHlwZWRlZiBzdHJ1Y3QgeworICogICAgIGd1aW50OCAqZGF0YTsKKyAqICAgICBndWludCBzaXplOworICogICAgIGd1aW50IHByb2JhYmlsaXR5OworICogICAgIEdzdENhcHMgKmRhdGE7CisgKiAgIH0gTXlUeXBlRmluZDsKKyAqICAgc3RhdGljIHZvaWQKKyAqICAgbXlfcGVlayAoZ3BvaW50ZXIgZGF0YSwgZ2ludDY0IG9mZnNldCwgZ3VpbnQgc2l6ZSkKKyAqICAgeworICogICAgIE15VHlwZUZpbmQgKmZpbmQgPSAoTXlUeXBlRmluZCAqKSBkYXRhOworICogICAgIGlmIChvZmZzZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IG9mZnNldCArIHNpemUgJmx0Oz0gZmluZC0+c2l6ZSkgeworICogICAgICAgcmV0dXJuIGZpbmQtPmRhdGEgKyBvZmZzZXQ7CisgKiAgICAgfQorICogICAgIHJldHVybiBOVUxMOworICogICB9CisgKiAgIHN0YXRpYyB2b2lkCisgKiAgIG15X3N1Z2dlc3QgKGdwb2ludGVyIGRhdGEsIGd1aW50IHByb2JhYmlsaXR5LCBHc3RDYXBzICpjYXBzKQorICogICB7CisgKiAgICAgTXlUeXBlRmluZCAqZmluZCA9IChNeVR5cGVGaW5kICopIGRhdGE7CisgKiAgICAgaWYgKHByb2JhYmlsaXR5ICZndDsgZmluZC0+cHJvYmFiaWxpdHkpIHsKKyAqICAgICAgIGZpbmQtPnByb2JhYmlsaXR5ID0gcHJvYmFiaWxpdHk7CisgKiAgICAgICBnc3RfY2Fwc19yZXBsYWNlICgmYW1wO2ZpbmQtPmNhcHMsIGNhcHMpOworICogICAgIH0KKyAqICAgfQorICogICBzdGF0aWMgR3N0Q2FwcyAqCisgKiAgIGZpbmRfdHlwZSAoZ3VpbnQ4ICpkYXRhLCBndWludCBzaXplKQorICogICB7CisgKiAgICAgR0xpc3QgKndhbGssICp0eXBlX2xpc3Q7CisgKiAgICAgTXlUeXBlRmluZCBmaW5kID0ge2RhdGEsIHNpemUsIDAsIE5VTEx9OworICogICAgIEdzdFR5cGVGaW5kIGdzdF9maW5kID0ge215X3BlZWssIG15X3N1Z2dlc3QsICZhbXA7ZmluZCwgfTsKKyAqICAgICB3YWxrID0gdHlwZV9saXN0ID0gZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9saXN0ICgpOworICogICAgIHdoaWxlICh3YWxrKSB7CisgKiAgICAgICBHc3RUeXBlRmluZEZhY3RvcnkgKmZhY3RvcnkgPSBHU1RfVFlQRV9GSU5EX0ZBQ1RPUlkgKHdhbGstPmRhdGEpOworICogICAgICAgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKQorICogICAgICAgZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2NhbGxfZnVuY3Rpb24gKGZhY3RvcnksICZhbXA7Z3N0X2ZpbmQpOworICogICAgIH0KKyAqICAgICBnX2xpc3RfZnJlZSAodHlwZV9saXN0KTsKKyAqICAgICByZXR1cm4gZmluZC5jYXBzOworICogICB9OworICogICA8L3Byb2dyYW1saXN0aW5nPgorICogPC9leGFtcGxlPgorICoKKyAqIFRoZSBhYm92ZSBleGFtcGxlIHNob3dzIGhvdyB0byB3cml0ZSBhIHZlcnkgc2ltcGxlIHR5cGVmaW5kZXIgdGhhdAorICogaWRlbnRpZmllcyB0aGUgZ2l2ZW4gZGF0YS4gWW91IGNhbiBnZXQgcXVpdGUgYSBiaXQgbW9yZSBjb21wbGljYXRlZCB0aGFuCisgKiB0aGF0IHRob3VnaC4KKyAqCisgKiBMYXN0IHJldmlld2VkIG9uIDIwMDUtMTEtMDkgKDAuOS40KQorICovCisKKyNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImdzdGluZm8uaCIKKyNpbmNsdWRlICJnc3R0eXBlZmluZC5oIgorI2luY2x1ZGUgImdzdHR5cGVmaW5kZmFjdG9yeS5oIgorI2luY2x1ZGUgImdzdHJlZ2lzdHJ5LmgiCisKK0dTVF9ERUJVR19DQVRFR09SWSAodHlwZV9maW5kX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHR5cGVfZmluZF9kZWJ1ZworCitzdGF0aWMgdm9pZCBnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7CisKK3N0YXRpYyBHc3RQbHVnaW5GZWF0dXJlQ2xhc3MgKnBhcmVudF9jbGFzcyA9IE5VTEw7CisKKyNkZWZpbmUgX2RvX2luaXQgXAoreyBcCisgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUICh0eXBlX2ZpbmRfZGVidWcsICJHU1RfVFlQRUZJTkQiLCBcCisgICAgICBHU1RfREVCVUdfRkdfR1JFRU4sICJ0eXBlZmluZGluZyBzdWJzeXN0ZW0iKTsgXAorfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0VHlwZUZpbmRGYWN0b3J5LCBnc3RfdHlwZV9maW5kX2ZhY3RvcnksCisgICAgR1NUX1RZUEVfUExVR0lOX0ZFQVRVUkUsIF9kb19pbml0KTsKKworc3RhdGljIHZvaWQKK2dzdF90eXBlX2ZpbmRfZmFjdG9yeV9jbGFzc19pbml0IChHc3RUeXBlRmluZEZhY3RvcnlDbGFzcyAqIGtsYXNzKQoreworICBHT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7CisKKyAgcGFyZW50X2NsYXNzID0gZ190eXBlX2NsYXNzX3BlZWtfcGFyZW50IChrbGFzcyk7CisKKyAgb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2Rpc3Bvc2U7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfdHlwZV9maW5kX2ZhY3RvcnlfaW5pdCAoR3N0VHlwZUZpbmRGYWN0b3J5ICogZmFjdG9yeSkKK3sKKyAgZmFjdG9yeS0+dXNlcl9kYXRhID0gZmFjdG9yeTsKKyAgZmFjdG9yeS0+dXNlcl9kYXRhX25vdGlmeSA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCkKK3sKKyAgR3N0VHlwZUZpbmRGYWN0b3J5ICpmYWN0b3J5ID0gR1NUX1RZUEVfRklORF9GQUNUT1JZIChvYmplY3QpOworCisgIGlmIChmYWN0b3J5LT5jYXBzKSB7CisgICAgZ3N0X2NhcHNfdW5yZWYgKGZhY3RvcnktPmNhcHMpOworICAgIGZhY3RvcnktPmNhcHMgPSBOVUxMOworICB9CisgIGlmIChmYWN0b3J5LT5leHRlbnNpb25zKSB7CisgICAgZ19zdHJmcmVldiAoZmFjdG9yeS0+ZXh0ZW5zaW9ucyk7CisgICAgZmFjdG9yeS0+ZXh0ZW5zaW9ucyA9IE5VTEw7CisgIH0KKyAgaWYgKGZhY3RvcnktPnVzZXJfZGF0YV9ub3RpZnkgJiYgZmFjdG9yeS0+dXNlcl9kYXRhKSB7CisgICAgZmFjdG9yeS0+dXNlcl9kYXRhX25vdGlmeSAoZmFjdG9yeS0+dXNlcl9kYXRhKTsKKyAgICBmYWN0b3J5LT51c2VyX2RhdGEgPSBOVUxMOworICB9CisKKyAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iamVjdCk7Cit9CisKKy8qKgorICogZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9saXN0OgorICoKKyAqIEdldHMgdGhlIGxpc3Qgb2YgYWxsIHJlZ2lzdGVyZWQgdHlwZWZpbmQgZmFjdG9yaWVzLiBZb3UgbXVzdCBmcmVlIHRoZQorICogbGlzdCB1c2luZyBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlKCkuCisgKgorICogVGhlIHJldHVybmVkIGZhY3RvcmllcyBhcmUgc29ydGVkIGJ5IGhpZ2hlc3QgcmFuayBmaXJzdCwgYW5kIHRoZW4gYnkKKyAqIGZhY3RvcnkgbmFtZS4gKGJlaGF2aW91ciBjaGFuZ2Ugc2luY2UgMC4xMC4yNikKKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChlbGVtZW50LXR5cGUgR3N0LlR5cGVGaW5kRmFjdG9yeSk6IHRoZSBsaXN0IG9mIGFsbAorICogICAgIHJlZ2lzdGVyZWQgI0dzdFR5cGVGaW5kRmFjdG9yeS4KKyAqLworR0xpc3QgKgorZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9saXN0ICh2b2lkKQoreworICByZXR1cm4gZ3N0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3QgKGdzdF9yZWdpc3RyeV9nZXRfZGVmYXVsdCAoKSwKKyAgICAgIEdTVF9UWVBFX1RZUEVfRklORF9GQUNUT1JZKTsKK30KKworLyoqCisgKiBnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2NhcHM6CisgKiBAZmFjdG9yeTogQSAjR3N0VHlwZUZpbmRGYWN0b3J5CisgKgorICogR2V0cyB0aGUgI0dzdENhcHMgYXNzb2NpYXRlZCB3aXRoIGEgdHlwZWZpbmQgZmFjdG9yeS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjR3N0Q2FwcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBmYWN0b3J5CisgKi8KK0dzdENhcHMgKgorZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9jYXBzIChHc3RUeXBlRmluZEZhY3RvcnkgKiBmYWN0b3J5KQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1RZUEVfRklORF9GQUNUT1JZIChmYWN0b3J5KSwgTlVMTCk7CisKKyAgcmV0dXJuIGZhY3RvcnktPmNhcHM7Cit9CisKKy8qKgorICogZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9leHRlbnNpb25zOgorICogQGZhY3Rvcnk6IEEgI0dzdFR5cGVGaW5kRmFjdG9yeQorICoKKyAqIEdldHMgdGhlIGV4dGVuc2lvbnMgYXNzb2NpYXRlZCB3aXRoIGEgI0dzdFR5cGVGaW5kRmFjdG9yeS4gVGhlIHJldHVybmVkCisgKiBhcnJheSBzaG91bGQgbm90IGJlIGNoYW5nZWQuIElmIHlvdSBuZWVkIHRvIGNoYW5nZSBzdHVmZiBpbiBpdCwgeW91IHNob3VsZAorICogY29weSBpdCB1c2luZyBnX3N0cmR1cHYoKS4gIFRoaXMgZnVuY3Rpb24gbWF5IHJldHVybiBOVUxMIHRvIGluZGljYXRlCisgKiBhIDAtbGVuZ3RoIGxpc3QuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpIChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSkgKGVsZW1lbnQtdHlwZSB1dGY4KTogYQorICogICAgIE5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBleHRlbnNpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZhY3RvcnkKKyAqLworZ2NoYXIgKioKK2dzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfZXh0ZW5zaW9ucyAoR3N0VHlwZUZpbmRGYWN0b3J5ICogZmFjdG9yeSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19UWVBFX0ZJTkRfRkFDVE9SWSAoZmFjdG9yeSksIE5VTEwpOworCisgIHJldHVybiBmYWN0b3J5LT5leHRlbnNpb25zOworfQorCisvKioKKyAqIGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9jYWxsX2Z1bmN0aW9uOgorICogQGZhY3Rvcnk6IEEgI0dzdFR5cGVGaW5kRmFjdG9yeQorICogQGZpbmQ6ICh0cmFuc2ZlciBub25lKTogYSBwcm9wZXJseSBzZXR1cCAjR3N0VHlwZUZpbmQgZW50cnkuIFRoZSBnZXRfZGF0YQorICogICAgIGFuZCBzdWdnZXN0X3R5cGUgbWVtYmVycyBtdXN0IGJlIHNldC4KKyAqCisgKiBDYWxscyB0aGUgI0dzdFR5cGVGaW5kRnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoaXMgZmFjdG9yeS4KKyAqLwordm9pZAorZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2NhbGxfZnVuY3Rpb24gKEdzdFR5cGVGaW5kRmFjdG9yeSAqIGZhY3RvcnksCisgICAgR3N0VHlwZUZpbmQgKiBmaW5kKQoreworICBHc3RUeXBlRmluZEZhY3RvcnkgKm5ld19mYWN0b3J5OworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19UWVBFX0ZJTkRfRkFDVE9SWSAoZmFjdG9yeSkpOworICBnX3JldHVybl9pZl9mYWlsIChmaW5kICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsIChmaW5kLT5wZWVrICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsIChmaW5kLT5zdWdnZXN0ICE9IE5VTEwpOworCisgIG5ld19mYWN0b3J5ID0KKyAgICAgIEdTVF9UWVBFX0ZJTkRfRkFDVE9SWSAoZ3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQgKEdTVF9QTFVHSU5fRkVBVFVSRQorICAgICAgICAgIChmYWN0b3J5KSkpOworICBpZiAobmV3X2ZhY3RvcnkpIHsKKyAgICBpZiAobmV3X2ZhY3RvcnktPmZ1bmN0aW9uKQorICAgICAgbmV3X2ZhY3RvcnktPmZ1bmN0aW9uIChmaW5kLCBuZXdfZmFjdG9yeS0+dXNlcl9kYXRhKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChuZXdfZmFjdG9yeSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2dzdC9nc3R0eXBlZmluZGZhY3RvcnkuaCBiL2dzdC9nc3R0eXBlZmluZGZhY3RvcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTc5MmVlCi0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5oCkBAIC0wLDAgKzEsODEgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDAzIEJlbmphbWluIE90dGUgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgorICoKKyAqIGdzdHR5cGVmaW5kZmFjdG9yeS5oOiB0eXBlZmluZGluZyBzdWJzeXN0ZW0KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fR1NUX1RZUEVfRklORF9GQUNUT1JZX0hfXworI2RlZmluZSBfX0dTVF9UWVBFX0ZJTkRfRkFDVE9SWV9IX18KKworI2luY2x1ZGUgPGdzdC9nc3RjYXBzLmg+CisjaW5jbHVkZSA8Z3N0L2dzdHBsdWdpbi5oPgorI2luY2x1ZGUgPGdzdC9nc3RwbHVnaW5mZWF0dXJlLmg+CisjaW5jbHVkZSA8Z3N0L2dzdHR5cGVmaW5kLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBHU1RfVFlQRV9UWVBFX0ZJTkRfRkFDVE9SWSAgICAgICAgICAgICAgICAgKGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfdHlwZSgpKQorI2RlZmluZSBHU1RfVFlQRV9GSU5EX0ZBQ1RPUlkob2JqKSAgICAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfVFlQRV9GSU5EX0ZBQ1RPUlksIEdzdFR5cGVGaW5kRmFjdG9yeSkpCisjZGVmaW5lIEdTVF9JU19UWVBFX0ZJTkRfRkFDVE9SWShvYmopICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9UWVBFX0ZJTkRfRkFDVE9SWSkpCisjZGVmaW5lIEdTVF9UWVBFX0ZJTkRfRkFDVE9SWV9DTEFTUyhrbGFzcykgICAgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX1RZUEVfRklORF9GQUNUT1JZLCBHc3RUeXBlRmluZEZhY3RvcnlDbGFzcykpCisjZGVmaW5lIEdTVF9JU19UWVBFX0ZJTkRfRkFDVE9SWV9DTEFTUyhrbGFzcykgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX1RZUEVfRklORF9GQUNUT1JZKSkKKyNkZWZpbmUgR1NUX1RZUEVfRklORF9GQUNUT1JZX0dFVF9DTEFTUyhvYmopICAgICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfVFlQRV9GSU5EX0ZBQ1RPUlksIEdzdFR5cGVGaW5kRmFjdG9yeUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdFR5cGVGaW5kRmFjdG9yeSBHc3RUeXBlRmluZEZhY3Rvcnk7Cit0eXBlZGVmIHN0cnVjdCBfR3N0VHlwZUZpbmRGYWN0b3J5Q2xhc3MgR3N0VHlwZUZpbmRGYWN0b3J5Q2xhc3M7CisKKy8qKgorICogR3N0VHlwZUZpbmRGYWN0b3J5OgorICoKKyAqIE9iamVjdCB0aGF0IHN0b3JlcyBpbmZvcm1hdGlvbiBhYm91dCBhIHR5cGVmaW5kIGZ1bmN0aW9uLgorICovCitzdHJ1Y3QgX0dzdFR5cGVGaW5kRmFjdG9yeSB7CisgIEdzdFBsdWdpbkZlYXR1cmUJCWZlYXR1cmU7CisgIC8qIDxwcml2YXRlPiAqLworCisgIEdzdFR5cGVGaW5kRnVuY3Rpb24JCWZ1bmN0aW9uOworICBnY2hhciAqKgkJCWV4dGVuc2lvbnM7CisgIEdzdENhcHMgKgkJCWNhcHM7IC8qIEZJWE1FOiBub3QgeWV0IHNhdmVkIGluIHJlZ2lzdHJ5ICovCisKKyAgZ3BvaW50ZXIJCQl1c2VyX2RhdGE7CisgIEdEZXN0cm95Tm90aWZ5CQl1c2VyX2RhdGFfbm90aWZ5OworCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOworfTsKKworc3RydWN0IF9Hc3RUeXBlRmluZEZhY3RvcnlDbGFzcyB7CisgIEdzdFBsdWdpbkZlYXR1cmVDbGFzcwkJcGFyZW50OworICAvKiA8cHJpdmF0ZT4gKi8KKworICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKK307CisKKy8qIHR5cGVmaW5kaW5nIGludGVyZmFjZSAqLworCitHVHlwZSAgICAgICAgICAgZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF90eXBlCQkodm9pZCk7CisKK0dMaXN0ICoJCWdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfbGlzdAkJKHZvaWQpOworCitnY2hhciAqKglnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2V4dGVuc2lvbnMJKEdzdFR5cGVGaW5kRmFjdG9yeSAqZmFjdG9yeSk7CitHc3RDYXBzICoJZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9jYXBzCSAgCShHc3RUeXBlRmluZEZhY3RvcnkgKmZhY3RvcnkpOwordm9pZAkJZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2NhbGxfZnVuY3Rpb24JKEdzdFR5cGVGaW5kRmFjdG9yeSAqZmFjdG9yeSwKKwkJCQkJCQkgR3N0VHlwZUZpbmQgKmZpbmQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HU1RfVFlQRV9GSU5EX0ZBQ1RPUllfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0dXJpLmMgYi9nc3QvZ3N0dXJpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZhYjQwYwotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3R1cmkuYwpAQCAtMCwwICsxLDg4OCBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgorICogQ29weXJpZ2h0IChDKSAyMDExIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+CisgKgorICogZ3N0dXJpLmM6IHJlZ2lzdGVyIFVSSSBoYW5kbGVycworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qKgorICogU0VDVElPTjpnc3R1cmloYW5kbGVyCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEludGVyZmFjZSB0byBlYXNlIFVSSSBoYW5kbGluZyBpbiBwbHVnaW5zLgorICoKKyAqIFRoZSBVUklIYW5kbGVyIGlzIGFuIGludGVyZmFjZSB0aGF0IGlzIGltcGxlbWVudGVkIGJ5IFNvdXJjZSBhbmQgU2luayAKKyAqICNHc3RFbGVtZW50IHRvIHNpbXBsaWZ5IHRoZW4gaGFuZGxpbmcgb2YgVVJJLgorICoKKyAqIEFuIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgdG8gcXVpY2tseSBnZXQgYW4gZWxlbWVudAorICogdGhhdCBoYW5kbGVzIHRoZSBnaXZlbiBVUkkgZm9yIHJlYWRpbmcgb3Igd3JpdGluZworICogKGdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkoKSkuCisgKgorICogU291cmNlIGFuZCBTaW5rIHBsdWdpbnMgc2hvdWxkIGltcGxlbWVudCB0aGlzIGludGVyZmFjZSB3aGVuIHBvc3NpYmxlLgorICoKKyAqIExhc3QgcmV2aWV3ZWQgb24gMjAwNS0xMS0wOSAoMC45LjQpCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImdzdHVyaS5oIgorI2luY2x1ZGUgImdzdGluZm8uaCIKKyNpbmNsdWRlICJnc3RtYXJzaGFsLmgiCisjaW5jbHVkZSAiZ3N0cmVnaXN0cnkuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfdXJpX2hhbmRsZXJfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X3VyaV9oYW5kbGVyX2RlYnVnCisKK2VudW0KK3sKKyAgTkVXX1VSSSwKKyAgTEFTVF9TSUdOQUwKK307CisKK3N0YXRpYyBndWludCBnc3RfdXJpX2hhbmRsZXJfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKKworc3RhdGljIHZvaWQgZ3N0X3VyaV9oYW5kbGVyX2Jhc2VfaW5pdCAoZ3BvaW50ZXIgZ19jbGFzcyk7CisKK0dUeXBlCitnc3RfdXJpX2hhbmRsZXJfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyB2b2xhdGlsZSBnc2l6ZSB1cmloYW5kbGVyX3R5cGUgPSAwOworCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJnVyaWhhbmRsZXJfdHlwZSkpIHsKKyAgICBHVHlwZSBfdHlwZTsKKyAgICBzdGF0aWMgY29uc3QgR1R5cGVJbmZvIHVyaWhhbmRsZXJfaW5mbyA9IHsKKyAgICAgIHNpemVvZiAoR3N0VVJJSGFuZGxlckludGVyZmFjZSksCisgICAgICBnc3RfdXJpX2hhbmRsZXJfYmFzZV9pbml0LAorICAgICAgTlVMTCwKKyAgICAgIE5VTEwsCisgICAgICBOVUxMLAorICAgICAgTlVMTCwKKyAgICAgIDAsCisgICAgICAwLAorICAgICAgTlVMTCwKKyAgICAgIE5VTEwKKyAgICB9OworCisgICAgX3R5cGUgPSBnX3R5cGVfcmVnaXN0ZXJfc3RhdGljIChHX1RZUEVfSU5URVJGQUNFLAorICAgICAgICAiR3N0VVJJSGFuZGxlciIsICZ1cmloYW5kbGVyX2luZm8sIDApOworCisgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF91cmlfaGFuZGxlcl9kZWJ1ZywgIkdTVF9VUkkiLCBHU1RfREVCVUdfQk9MRCwKKyAgICAgICAgImhhbmRsaW5nIG9mIFVSSXMiKTsKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJnVyaWhhbmRsZXJfdHlwZSwgX3R5cGUpOworICB9CisgIHJldHVybiB1cmloYW5kbGVyX3R5cGU7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfdXJpX2hhbmRsZXJfYmFzZV9pbml0IChncG9pbnRlciBnX2NsYXNzKQoreworICBzdGF0aWMgZ2Jvb2xlYW4gaW5pdGlhbGl6ZWQgPSBGQUxTRTsKKworICBpZiAoR19VTkxJS0VMWSAoIWluaXRpYWxpemVkKSkgeworCisgICAgLyoqCisgICAgICogR3N0VVJJSGFuZGxlcjo6bmV3LXVyaToKKyAgICAgKiBAaGFuZGxlcjogVGhlICNHc3RVUklIYW5kbGVyIHdoaWNoIGVtaXR0ZWQgdGhlIHNpZ25hbAorICAgICAqIEB1cmk6ICh0cmFuc2ZlciBub25lKTogVGhlIG5ldyBVUkksIG9yIE5VTEwgaWYgdGhlIFVSSSB3YXMgcmVtb3ZlZAorICAgICAqCisgICAgICogVGhlIFVSSSBvZiB0aGUgZ2l2ZW4gQGhhbmRsZXIgaGFzIGNoYW5nZWQuCisgICAgICovCisKKyAgICBnc3RfdXJpX2hhbmRsZXJfc2lnbmFsc1tORVdfVVJJXSA9CisgICAgICAgIGdfc2lnbmFsX25ldyAoIm5ldy11cmkiLCBHU1RfVFlQRV9VUklfSEFORExFUiwgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgIEdfU1RSVUNUX09GRlNFVCAoR3N0VVJJSGFuZGxlckludGVyZmFjZSwgbmV3X3VyaSksIE5VTEwsIE5VTEwsCisgICAgICAgIGdzdF9tYXJzaGFsX1ZPSURfX1NUUklORywgR19UWVBFX05PTkUsIDEsIEdfVFlQRV9TVFJJTkcpOworICAgIGluaXRpYWxpemVkID0gVFJVRTsKKyAgfQorfQorCitzdGF0aWMgY29uc3QgZ3VjaGFyIGFjY2VwdGFibGVbOTZdID0geyAgLyogWDAgICBYMSAgIFgyICAgWDMgICBYNCAgIFg1ICAgWDYgICBYNyAgIFg4ICAgWDkgICBYQSAgIFhCICAgWEMgICBYRCAgIFhFICAgWEYgKi8KKyAgMHgwMCwgMHgzRiwgMHgyMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHgyQywgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgyMiwgMHgyMCwgMHgzRiwgMHgzRiwgMHgxQywgICAgICAgLyogMlggICEiIyQlJicoKSorLC0uLyAgICovCisgIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4MzgsIDB4MjAsIDB4MjAsIDB4MkMsIDB4MjAsIDB4MkMsICAgICAgIC8qIDNYIDAxMjM0NTY3ODk6Ozw9Pj8gICAqLworICAweDMwLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAgICAgICAvKiA0WCBAQUJDREVGR0hJSktMTU5PICAgKi8KKyAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgzRiwgICAgICAgLyogNVggUFFSU1RVVldYWVpbXF1eXyAgICovCisgIDB4MjAsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsICAgICAgIC8qIDZYIGBhYmNkZWZnaGlqa2xtbm8gICAqLworICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDIwLCAweDIwLCAweDIwLCAweDNGLCAweDIwICAgICAgICAvKiA3WCBwcXJzdHV2d3h5ent8fX5ERUwgKi8KK307CisKK3R5cGVkZWYgZW51bQoreworICBVTlNBRkVfQUxMID0gMHgxLCAgICAgICAgICAgICAvKiBFc2NhcGUgYWxsIHVuc2FmZSBjaGFyYWN0ZXJzICAgKi8KKyAgVU5TQUZFX0FMTE9XX1BMVVMgPSAweDIsICAgICAgLyogQWxsb3dzICcrJyAgKi8KKyAgVU5TQUZFX1BBVEggPSAweDQsICAgICAgICAgICAgLyogQWxsb3dzICcvJyBhbmQgJz8nIGFuZCAnJicgYW5kICc9JyAgKi8KKyAgVU5TQUZFX0RPU19QQVRIID0gMHg4LCAgICAgICAgLyogQWxsb3dzICcvJyBhbmQgJz8nIGFuZCAnJicgYW5kICc9JyBhbmQgJzonICovCisgIFVOU0FGRV9IT1NUID0gMHgxMCwgICAgICAgICAgIC8qIEFsbG93cyAnLycgYW5kICc6JyBhbmQgJ0AnICovCisgIFVOU0FGRV9TTEFTSEVTID0gMHgyMCAgICAgICAgIC8qIEFsbG93cyBhbGwgY2hhcmFjdGVycyBleGNlcHQgZm9yICcvJyBhbmQgJyUnICovCit9IFVuc2FmZUNoYXJhY3RlclNldDsKKworI2RlZmluZSBIRVhfRVNDQVBFICclJworCisvKiAgRXNjYXBlIHVuZGVzaXJhYmxlIGNoYXJhY3RlcnMgdXNpbmcgJQorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgcG9pbnRlciB0byBhIHN0cmluZyBpbiB3aGljaAorICogc29tZSBjaGFyYWN0ZXJzIG1heSBiZSB1bmFjY2VwdGFibGUgdW5lc2NhcGVkLgorICogSXQgcmV0dXJucyBhIHN0cmluZyB3aGljaCBoYXMgdGhlc2UgY2hhcmFjdGVycworICogcmVwcmVzZW50ZWQgYnkgYSAnJScgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5IHR3byBoZXggZGlnaXRzLgorICoKKyAqIFRoaXMgcm91dGluZSByZXR1cm5zIGEgZ19tYWxsb2NlZCBzdHJpbmcuCisgKi8KKworc3RhdGljIGNvbnN0IGdjaGFyIGhleFsxNl0gPSAiMDEyMzQ1Njc4OUFCQ0RFRiI7CisKK3N0YXRpYyBnY2hhciAqCitlc2NhcGVfc3RyaW5nX2ludGVybmFsIChjb25zdCBnY2hhciAqIHN0cmluZywgVW5zYWZlQ2hhcmFjdGVyU2V0IG1hc2spCit7CisjZGVmaW5lIEFDQ0VQVEFCTEVfQ0hBUihhKSAoKGEpPj0zMiAmJiAoYSk8MTI4ICYmIChhY2NlcHRhYmxlWyhhKS0zMl0gJiB1c2VfbWFzaykpCisKKyAgY29uc3QgZ2NoYXIgKnA7CisgIGdjaGFyICpxOworICBnY2hhciAqcmVzdWx0OworICBndWNoYXIgYzsKKyAgZ2ludCB1bmFjY2VwdGFibGU7CisgIFVuc2FmZUNoYXJhY3RlclNldCB1c2VfbWFzazsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAobWFzayA9PSBVTlNBRkVfQUxMCisgICAgICB8fCBtYXNrID09IFVOU0FGRV9BTExPV19QTFVTCisgICAgICB8fCBtYXNrID09IFVOU0FGRV9QQVRICisgICAgICB8fCBtYXNrID09IFVOU0FGRV9ET1NfUEFUSAorICAgICAgfHwgbWFzayA9PSBVTlNBRkVfSE9TVCB8fCBtYXNrID09IFVOU0FGRV9TTEFTSEVTLCBOVUxMKTsKKworICBpZiAoc3RyaW5nID09IE5VTEwpIHsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIHVuYWNjZXB0YWJsZSA9IDA7CisgIHVzZV9tYXNrID0gbWFzazsKKyAgZm9yIChwID0gc3RyaW5nOyAqcCAhPSAnXDAnOyBwKyspIHsKKyAgICBjID0gKnA7CisgICAgaWYgKCFBQ0NFUFRBQkxFX0NIQVIgKGMpKSB7CisgICAgICB1bmFjY2VwdGFibGUrKzsKKyAgICB9CisgICAgaWYgKCh1c2VfbWFzayA9PSBVTlNBRkVfSE9TVCkgJiYgKHVuYWNjZXB0YWJsZSB8fCAoYyA9PSAnLycpKSkgeworICAgICAgLyogd2hlbiBlc2NhcGluZyBhIGhvc3QsIGlmIHdlIGhpdCBzb21ldGhpbmcgdGhhdCBuZWVkcyB0byBiZSBlc2NhcGVkLCBvciB3ZSBmaW5hbGx5CisgICAgICAgKiBoaXQgYSBwYXRoIHNlcGFyYXRvciwgcmV2ZXJ0IHRvIHBhdGggbW9kZSAodGhlIGhvc3Qgc2VnbWVudCBvZiB0aGUgdXJsIGlzIG92ZXIpLgorICAgICAgICovCisgICAgICB1c2VfbWFzayA9IFVOU0FGRV9QQVRIOworICAgIH0KKyAgfQorCisgIHJlc3VsdCA9IGdfbWFsbG9jIChwIC0gc3RyaW5nICsgdW5hY2NlcHRhYmxlICogMiArIDEpOworCisgIHVzZV9tYXNrID0gbWFzazsKKyAgZm9yIChxID0gcmVzdWx0LCBwID0gc3RyaW5nOyAqcCAhPSAnXDAnOyBwKyspIHsKKyAgICBjID0gKnA7CisKKyAgICBpZiAoIUFDQ0VQVEFCTEVfQ0hBUiAoYykpIHsKKyAgICAgICpxKysgPSBIRVhfRVNDQVBFOyAgICAgICAgLyogbWVhbnMgaGV4IGNvbWluZyAqLworICAgICAgKnErKyA9IGhleFtjID4+IDRdOworICAgICAgKnErKyA9IGhleFtjICYgMTVdOworICAgIH0gZWxzZSB7CisgICAgICAqcSsrID0gYzsKKyAgICB9CisgICAgaWYgKCh1c2VfbWFzayA9PSBVTlNBRkVfSE9TVCkgJiYgKCFBQ0NFUFRBQkxFX0NIQVIgKGMpIHx8IChjID09ICcvJykpKSB7CisgICAgICB1c2VfbWFzayA9IFVOU0FGRV9QQVRIOworICAgIH0KKyAgfQorCisgICpxID0gJ1wwJzsKKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBlc2NhcGVfc3RyaW5nOgorICogQHN0cmluZzogc3RyaW5nIHRvIGJlIGVzY2FwZWQKKyAqCisgKiBFc2NhcGVzIEBzdHJpbmcsIHJlcGxhY2luZyBhbnkgYW5kIGFsbCBzcGVjaWFsIGNoYXJhY3RlcnMKKyAqIHdpdGggZXF1aXZhbGVudCBlc2NhcGUgc2VxdWVuY2VzLgorICoKKyAqIFJldHVybiB2YWx1ZTogYSBuZXdseSBhbGxvY2F0ZWQgc3RyaW5nIGVxdWl2YWxlbnQgdG8gQHN0cmluZworICogYnV0IHdpdGggYWxsIHNwZWNpYWwgY2hhcmFjdGVycyBlc2NhcGVkCisgKiovCitzdGF0aWMgZ2NoYXIgKgorZXNjYXBlX3N0cmluZyAoY29uc3QgZ2NoYXIgKiBzdHJpbmcpCit7CisgIHJldHVybiBlc2NhcGVfc3RyaW5nX2ludGVybmFsIChzdHJpbmcsIFVOU0FGRV9BTEwpOworfQorCitzdGF0aWMgaW50CitoZXhfdG9faW50IChnY2hhciBjKQoreworICByZXR1cm4gYyA+PSAnMCcgJiYgYyA8PSAnOScgPyBjIC0gJzAnCisgICAgICA6IGMgPj0gJ0EnICYmIGMgPD0gJ0YnID8gYyAtICdBJyArIDEwCisgICAgICA6IGMgPj0gJ2EnICYmIGMgPD0gJ2YnID8gYyAtICdhJyArIDEwIDogLTE7Cit9CisKK3N0YXRpYyBpbnQKK3VuZXNjYXBlX2NoYXJhY3RlciAoY29uc3QgY2hhciAqc2Nhbm5lcikKK3sKKyAgaW50IGZpcnN0X2RpZ2l0OworICBpbnQgc2Vjb25kX2RpZ2l0OworCisgIGZpcnN0X2RpZ2l0ID0gaGV4X3RvX2ludCAoKnNjYW5uZXIrKyk7CisgIGlmIChmaXJzdF9kaWdpdCA8IDApIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBzZWNvbmRfZGlnaXQgPSBoZXhfdG9faW50ICgqc2Nhbm5lcik7CisgIGlmIChzZWNvbmRfZGlnaXQgPCAwKSB7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgcmV0dXJuIChmaXJzdF9kaWdpdCA8PCA0KSB8IHNlY29uZF9kaWdpdDsKK30KKworLyogdW5lc2NhcGVfc3RyaW5nOgorICogQGVzY2FwZWRfc3RyaW5nOiBhbiBlc2NhcGVkIFVSSSwgcGF0aCwgb3Igb3RoZXIgc3RyaW5nCisgKiBAaWxsZWdhbF9jaGFyYWN0ZXJzOiBhIHN0cmluZyBjb250YWluaW5nIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycworICogY29uc2lkZXJlZCAiaWxsZWdhbCIsICdcMCcgaXMgYXV0b21hdGljYWxseSBpbiB0aGlzIGxpc3QuCisgKgorICogRGVjb2RlcyBlc2NhcGVkIGNoYXJhY3RlcnMgKGkuZS4gUEVSQ0VOVHh4IHNlcXVlbmNlcykgaW4gQGVzY2FwZWRfc3RyaW5nLgorICogQ2hhcmFjdGVycyBhcmUgZW5jb2RlZCBpbiBQRVJDRU5UeHkgZm9ybSwgd2hlcmUgeHkgaXMgdGhlIEFTQ0lJIGhleCBjb2RlCisgKiBmb3IgY2hhcmFjdGVyIDE2eCt5LgorICoKKyAqIFJldHVybiB2YWx1ZTogYSBuZXdseSBhbGxvY2F0ZWQgc3RyaW5nIHdpdGggdGhlIHVuZXNjYXBlZCBlcXVpdmFsZW50cywKKyAqIG9yICVOVUxMIGlmIEBlc2NhcGVkX3N0cmluZyBjb250YWluZWQgb25lIG9mIHRoZSBjaGFyYWN0ZXJzCisgKiBpbiBAaWxsZWdhbF9jaGFyYWN0ZXJzLgorICoqLworc3RhdGljIGNoYXIgKgordW5lc2NhcGVfc3RyaW5nIChjb25zdCBnY2hhciAqIGVzY2FwZWRfc3RyaW5nLCBjb25zdCBnY2hhciAqIGlsbGVnYWxfY2hhcmFjdGVycykKK3sKKyAgY29uc3QgZ2NoYXIgKmluOworICBnY2hhciAqb3V0LCAqcmVzdWx0OworICBnaW50IGNoYXJhY3RlcjsKKworICBpZiAoZXNjYXBlZF9zdHJpbmcgPT0gTlVMTCkgeworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgcmVzdWx0ID0gZ19tYWxsb2MgKHN0cmxlbiAoZXNjYXBlZF9zdHJpbmcpICsgMSk7CisKKyAgb3V0ID0gcmVzdWx0OworICBmb3IgKGluID0gZXNjYXBlZF9zdHJpbmc7ICppbiAhPSAnXDAnOyBpbisrKSB7CisgICAgY2hhcmFjdGVyID0gKmluOworICAgIGlmICgqaW4gPT0gSEVYX0VTQ0FQRSkgeworICAgICAgY2hhcmFjdGVyID0gdW5lc2NhcGVfY2hhcmFjdGVyIChpbiArIDEpOworCisgICAgICAvKiBDaGVjayBmb3IgYW4gaWxsZWdhbCBjaGFyYWN0ZXIuIFdlIGNvbnNpZGVyICdcMCcgaWxsZWdhbCBoZXJlLiAqLworICAgICAgaWYgKGNoYXJhY3RlciA8PSAwCisgICAgICAgICAgfHwgKGlsbGVnYWxfY2hhcmFjdGVycyAhPSBOVUxMCisgICAgICAgICAgICAgICYmIHN0cmNociAoaWxsZWdhbF9jaGFyYWN0ZXJzLCAoY2hhcikgY2hhcmFjdGVyKSAhPSBOVUxMKSkgeworICAgICAgICBnX2ZyZWUgKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgICAgfQorICAgICAgaW4gKz0gMjsKKyAgICB9CisgICAgKm91dCsrID0gKGNoYXIpIGNoYXJhY3RlcjsKKyAgfQorCisgICpvdXQgPSAnXDAnOworICBnX2Fzc2VydCAoKGdzaXplKSAob3V0IC0gcmVzdWx0KSA8PSBzdHJsZW4gKGVzY2FwZWRfc3RyaW5nKSk7CisgIHJldHVybiByZXN1bHQ7CisKK30KKworCitzdGF0aWMgdm9pZAorZ3N0X3VyaV9wcm90b2NvbF9jaGVja19pbnRlcm5hbCAoY29uc3QgZ2NoYXIgKiB1cmksIGdjaGFyICoqIGVuZHB0cikKK3sKKyAgZ2NoYXIgKmNoZWNrID0gKGdjaGFyICopIHVyaTsKKworICBnX2Fzc2VydCAodXJpICE9IE5VTEwpOworICBnX2Fzc2VydCAoZW5kcHRyICE9IE5VTEwpOworCisgIGlmIChnX2FzY2lpX2lzYWxwaGEgKCpjaGVjaykpIHsKKyAgICBjaGVjaysrOworICAgIHdoaWxlIChnX2FzY2lpX2lzYWxudW0gKCpjaGVjaykgfHwgKmNoZWNrID09ICcrJworICAgICAgICB8fCAqY2hlY2sgPT0gJy0nIHx8ICpjaGVjayA9PSAnLicpCisgICAgICBjaGVjaysrOworICB9CisKKyAgKmVuZHB0ciA9IGNoZWNrOworfQorCisvKioKKyAqIGdzdF91cmlfcHJvdG9jb2xfaXNfdmFsaWQ6CisgKiBAcHJvdG9jb2w6IEEgc3RyaW5nCisgKgorICogVGVzdHMgaWYgdGhlIGdpdmVuIHN0cmluZyBpcyBhIHZhbGlkIHByb3RvY29sIGlkZW50aWZpZXIuIFByb3RvY29scworICogbXVzdCBjb25zaXN0IG9mIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCAnKycsICctJyBhbmQgJy4nIGFuZCBtdXN0CisgKiBzdGFydCB3aXRoIGEgYWxwaGFiZXRpYyBjaGFyYWN0ZXIuIFNlZSBSRkMgMzk4NiBTZWN0aW9uIDMuMS4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBwcm90b2NvbCBpZGVudGlmaWVyLCBGQUxTRSBvdGhlcndpc2UuCisgKi8KK2dib29sZWFuCitnc3RfdXJpX3Byb3RvY29sX2lzX3ZhbGlkIChjb25zdCBnY2hhciAqIHByb3RvY29sKQoreworICBnY2hhciAqZW5kcHRyOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwcm90b2NvbCAhPSBOVUxMLCBGQUxTRSk7CisKKyAgZ3N0X3VyaV9wcm90b2NvbF9jaGVja19pbnRlcm5hbCAocHJvdG9jb2wsICZlbmRwdHIpOworCisgIHJldHVybiAqZW5kcHRyID09ICdcMCcgJiYgZW5kcHRyICE9IHByb3RvY29sOworfQorCisvKioKKyAqIGdzdF91cmlfaXNfdmFsaWQ6CisgKiBAdXJpOiBBIFVSSSBzdHJpbmcKKyAqCisgKiBUZXN0cyBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgdmFsaWQgVVJJIGlkZW50aWZpZXIuIFVSSXMgc3RhcnQgd2l0aCBhIHZhbGlkCisgKiBzY2hlbWUgZm9sbG93ZWQgYnkgIjoiIGFuZCBtYXliZSBhIHN0cmluZyBpZGVudGlmeWluZyB0aGUgbG9jYXRpb24uCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgVVJJCisgKi8KK2dib29sZWFuCitnc3RfdXJpX2lzX3ZhbGlkIChjb25zdCBnY2hhciAqIHVyaSkKK3sKKyAgZ2NoYXIgKmVuZHB0cjsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAodXJpICE9IE5VTEwsIEZBTFNFKTsKKworICBnc3RfdXJpX3Byb3RvY29sX2NoZWNrX2ludGVybmFsICh1cmksICZlbmRwdHIpOworCisgIHJldHVybiAqZW5kcHRyID09ICc6JzsKK30KKworLyoqCisgKiBnc3RfdXJpX2dldF9wcm90b2NvbDoKKyAqIEB1cmk6IEEgVVJJIHN0cmluZworICoKKyAqIEV4dHJhY3RzIHRoZSBwcm90b2NvbCBvdXQgb2YgYSBnaXZlbiB2YWxpZCBVUkkuIFRoZSByZXR1cm5lZCBzdHJpbmcgbXVzdCBiZQorICogZnJlZWQgdXNpbmcgZ19mcmVlKCkuCisgKgorICogUmV0dXJuczogVGhlIHByb3RvY29sIGZvciB0aGlzIFVSSS4KKyAqLworZ2NoYXIgKgorZ3N0X3VyaV9nZXRfcHJvdG9jb2wgKGNvbnN0IGdjaGFyICogdXJpKQoreworICBnY2hhciAqY29sb247CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHVyaSAhPSBOVUxMLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF91cmlfaXNfdmFsaWQgKHVyaSksIE5VTEwpOworCisgIGNvbG9uID0gc3Ryc3RyICh1cmksICI6Iik7CisKKyAgcmV0dXJuIGdfYXNjaWlfc3RyZG93biAodXJpLCBjb2xvbiAtIHVyaSk7Cit9CisKKy8qKgorICogZ3N0X3VyaV9oYXNfcHJvdG9jb2w6CisgKiBAdXJpOiBhIFVSSSBzdHJpbmcKKyAqIEBwcm90b2NvbDogYSBwcm90b2NvbCBzdHJpbmcgKGUuZy4gImh0dHAiKQorICoKKyAqIENoZWNrcyBpZiB0aGUgcHJvdG9jb2wgb2YgYSBnaXZlbiB2YWxpZCBVUkkgbWF0Y2hlcyBAcHJvdG9jb2wuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHByb3RvY29sIG1hdGNoZXMuCisgKgorICogU2luY2U6IDAuMTAuNAorICovCitnYm9vbGVhbgorZ3N0X3VyaV9oYXNfcHJvdG9jb2wgKGNvbnN0IGdjaGFyICogdXJpLCBjb25zdCBnY2hhciAqIHByb3RvY29sKQoreworICBnY2hhciAqY29sb247CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHVyaSAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwcm90b2NvbCAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3RfdXJpX2lzX3ZhbGlkICh1cmkpLCBGQUxTRSk7CisKKyAgY29sb24gPSBzdHJzdHIgKHVyaSwgIjoiKTsKKworICBpZiAoY29sb24gPT0gTlVMTCkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgcmV0dXJuIChnX2FzY2lpX3N0cm5jYXNlY21wICh1cmksIHByb3RvY29sLCAoZ3NpemUpIChjb2xvbiAtIHVyaSkpID09IDApOworfQorCisvKioKKyAqIGdzdF91cmlfZ2V0X2xvY2F0aW9uOgorICogQHVyaTogQSBVUkkgc3RyaW5nCisgKgorICogRXh0cmFjdHMgdGhlIGxvY2F0aW9uIG91dCBvZiBhIGdpdmVuIHZhbGlkIFVSSSwgaWUuIHRoZSBwcm90b2NvbCBhbmQgIjovLyIKKyAqIGFyZSBzdHJpcHBlZCBmcm9tIHRoZSBVUkksIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGxvY2F0aW9uIHJldHVybmVkIGluY2x1ZGVzCisgKiB0aGUgaG9zdG5hbWUgaWYgb25lIGlzIHNwZWNpZmllZC4gVGhlIHJldHVybmVkIHN0cmluZyBtdXN0IGJlIGZyZWVkIHVzaW5nCisgKiBnX2ZyZWUoKS4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnX2ZyZWUKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKGFycmF5IHplcm8tdGVybWluYXRlZD0xKTogdGhlIGxvY2F0aW9uIGZvciB0aGlzCisgKiAgICAgVVJJLiBSZXR1cm5zIE5VTEwgaWYgdGhlIFVSSSBpc24ndCB2YWxpZC4gSWYgdGhlIFVSSSBkb2VzIG5vdCBjb250YWluCisgKiAgICAgYSBsb2NhdGlvbiwgYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLgorICovCitnY2hhciAqCitnc3RfdXJpX2dldF9sb2NhdGlvbiAoY29uc3QgZ2NoYXIgKiB1cmkpCit7CisgIGNvbnN0IGdjaGFyICpjb2xvbjsKKyAgZ2NoYXIgKnVuZXNjYXBlZCA9IE5VTEw7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHVyaSAhPSBOVUxMLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF91cmlfaXNfdmFsaWQgKHVyaSksIE5VTEwpOworCisgIGNvbG9uID0gc3Ryc3RyICh1cmksICI6Ly8iKTsKKyAgaWYgKCFjb2xvbikKKyAgICByZXR1cm4gTlVMTDsKKworICB1bmVzY2FwZWQgPSB1bmVzY2FwZV9zdHJpbmcgKGNvbG9uICsgMywgIi8iKTsKKworICAvKiBPbiBXaW5kb3dzIGFuIFVSSSBtaWdodCBsb29rIGxpa2UgZmlsZTovLy9jOi9mb28vYmFyLnR4dCBvcgorICAgKiBmaWxlOi8vL2N8L2Zvby9iYXIudHh0IChzb21lIE5ldHNjYXBlIHZlcnNpb25zKSBhbmQgd2Ugd2FudCB0bworICAgKiByZXR1cm4gYzovZm9vL2Jhci50eHQgYXMgbG9jYXRpb24gcmF0aGVyIHRoYW4gL2M6L2Zvby9iYXIudHh0LgorICAgKiBDYW4ndCB1c2UgZ19maWxlbmFtZV9mcm9tX3VyaSgpIGhlcmUgYmVjYXVzZSBpdCB3aWxsIG9ubHkgaGFuZGxlIHRoZQorICAgKiBmaWxlOi8vIHByb3RvY29sICovCisjaWZkZWYgR19PU19XSU4zMgorICBpZiAodW5lc2NhcGVkICE9IE5VTEwgJiYgdW5lc2NhcGVkWzBdID09ICcvJyAmJgorICAgICAgZ19hc2NpaV9pc2FscGhhICh1bmVzY2FwZWRbMV0pICYmCisgICAgICAodW5lc2NhcGVkWzJdID09ICc6JyB8fCB1bmVzY2FwZWRbMl0gPT0gJ3wnKSkgeworICAgIHVuZXNjYXBlZFsyXSA9ICc6JzsKKyAgICBnX21lbW1vdmUgKHVuZXNjYXBlZCwgdW5lc2NhcGVkICsgMSwgc3RybGVuICh1bmVzY2FwZWQgKyAxKSArIDEpOworICB9CisjZW5kaWYKKworICBHU1RfTE9HICgiZXh0cmFjdGVkIGxvY2F0aW9uICclcycgZnJvbSBVUkkgJyVzJyIsIEdTVF9TVFJfTlVMTCAodW5lc2NhcGVkKSwKKyAgICAgIHVyaSk7CisgIHJldHVybiB1bmVzY2FwZWQ7Cit9CisKKy8qKgorICogZ3N0X3VyaV9jb25zdHJ1Y3Q6CisgKiBAcHJvdG9jb2w6IFByb3RvY29sIGZvciBVUkkKKyAqIEBsb2NhdGlvbjogKGFycmF5IHplcm8tdGVybWluYXRlZD0xKSAodHJhbnNmZXIgbm9uZSk6IExvY2F0aW9uIGZvciBVUkkKKyAqCisgKiBDb25zdHJ1Y3RzIGEgVVJJIGZvciBhIGdpdmVuIHZhbGlkIHByb3RvY29sIGFuZCBsb2NhdGlvbi4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnX2ZyZWUKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKGFycmF5IHplcm8tdGVybWluYXRlZD0xKTogYSBuZXcgc3RyaW5nIGZvciB0aGlzCisgKiAgICAgVVJJLiBSZXR1cm5zIE5VTEwgaWYgdGhlIGdpdmVuIFVSSSBwcm90b2NvbCBpcyBub3QgdmFsaWQsIG9yIHRoZSBnaXZlbgorICogICAgIGxvY2F0aW9uIGlzIE5VTEwuCisgKi8KK2djaGFyICoKK2dzdF91cmlfY29uc3RydWN0IChjb25zdCBnY2hhciAqIHByb3RvY29sLCBjb25zdCBnY2hhciAqIGxvY2F0aW9uKQoreworICBjaGFyICplc2NhcGVkLCAqcHJvdG9fbG93ZXJjYXNlOworICBjaGFyICpyZXR2YWw7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF91cmlfcHJvdG9jb2xfaXNfdmFsaWQgKHByb3RvY29sKSwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChsb2NhdGlvbiAhPSBOVUxMLCBOVUxMKTsKKworICBwcm90b19sb3dlcmNhc2UgPSBnX2FzY2lpX3N0cmRvd24gKHByb3RvY29sLCAtMSk7CisgIGVzY2FwZWQgPSBlc2NhcGVfc3RyaW5nIChsb2NhdGlvbik7CisgIHJldHZhbCA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzOi8vJXMiLCBwcm90b19sb3dlcmNhc2UsIGVzY2FwZWQpOworICBnX2ZyZWUgKGVzY2FwZWQpOworICBnX2ZyZWUgKHByb3RvX2xvd2VyY2FzZSk7CisKKyAgcmV0dXJuIHJldHZhbDsKK30KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgR3N0VVJJVHlwZSB0eXBlOworICBjb25zdCBnY2hhciAqcHJvdG9jb2w7Cit9CitTZWFyY2hFbnRyeTsKKworc3RhdGljIGdib29sZWFuCitzZWFyY2hfYnlfZW50cnkgKEdzdFBsdWdpbkZlYXR1cmUgKiBmZWF0dXJlLCBncG9pbnRlciBzZWFyY2hfZW50cnkpCit7CisgIGdjaGFyICoqcHJvdG9jb2xzOworICBHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeTsKKyAgU2VhcmNoRW50cnkgKmVudHJ5ID0gKFNlYXJjaEVudHJ5ICopIHNlYXJjaF9lbnRyeTsKKworICBpZiAoIUdTVF9JU19FTEVNRU5UX0ZBQ1RPUlkgKGZlYXR1cmUpKQorICAgIHJldHVybiBGQUxTRTsKKyAgZmFjdG9yeSA9IEdTVF9FTEVNRU5UX0ZBQ1RPUllfQ0FTVCAoZmVhdHVyZSk7CisKKyAgaWYgKGZhY3RvcnktPnVyaV90eXBlICE9IGVudHJ5LT50eXBlKQorICAgIHJldHVybiBGQUxTRTsKKworICBwcm90b2NvbHMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF91cmlfcHJvdG9jb2xzIChmYWN0b3J5KTsKKworICBpZiAocHJvdG9jb2xzID09IE5VTEwpIHsKKyAgICBnX3dhcm5pbmcgKCJGYWN0b3J5ICclcycgaW1wbGVtZW50cyBHc3RVcmlIYW5kbGVyIGludGVyZmFjZSBidXQgcmV0dXJuZWQgIgorICAgICAgICAibm8gc3VwcG9ydGVkIHByb3RvY29scyEiLCBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X25hbWUgKGZlYXR1cmUpKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKworICB3aGlsZSAoKnByb3RvY29scyAhPSBOVUxMKSB7CisgICAgaWYgKGdfYXNjaWlfc3RyY2FzZWNtcCAoKnByb3RvY29scywgZW50cnktPnByb3RvY29sKSA9PSAwKQorICAgICAgcmV0dXJuIFRSVUU7CisgICAgcHJvdG9jb2xzKys7CisgIH0KKyAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2ludAorc29ydF9ieV9yYW5rIChHc3RQbHVnaW5GZWF0dXJlICogZmlyc3QsIEdzdFBsdWdpbkZlYXR1cmUgKiBzZWNvbmQpCit7CisgIHJldHVybiBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3JhbmsgKHNlY29uZCkgLQorICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9yYW5rIChmaXJzdCk7Cit9CisKK3N0YXRpYyBHTGlzdCAqCitnZXRfZWxlbWVudF9mYWN0b3JpZXNfZnJvbV91cmlfcHJvdG9jb2wgKGNvbnN0IEdzdFVSSVR5cGUgdHlwZSwKKyAgICBjb25zdCBnY2hhciAqIHByb3RvY29sKQoreworICBHTGlzdCAqcG9zc2liaWxpdGllczsKKyAgU2VhcmNoRW50cnkgZW50cnk7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHByb3RvY29sLCBOVUxMKTsKKworICBlbnRyeS50eXBlID0gdHlwZTsKKyAgZW50cnkucHJvdG9jb2wgPSBwcm90b2NvbDsKKyAgcG9zc2liaWxpdGllcyA9IGdzdF9yZWdpc3RyeV9mZWF0dXJlX2ZpbHRlciAoZ3N0X3JlZ2lzdHJ5X2dldF9kZWZhdWx0ICgpLAorICAgICAgc2VhcmNoX2J5X2VudHJ5LCBGQUxTRSwgJmVudHJ5KTsKKworICByZXR1cm4gcG9zc2liaWxpdGllczsKK30KKworLyoqCisgKiBnc3RfdXJpX3Byb3RvY29sX2lzX3N1cHBvcnRlZDoKKyAqIEB0eXBlOiBXaGV0aGVyIHRvIGNoZWNrIGZvciBhIHNvdXJjZSBvciBhIHNpbmsKKyAqIEBwcm90b2NvbDogUHJvdG9jb2wgdGhhdCBzaG91bGQgYmUgY2hlY2tlZCBmb3IgKGUuZy4gImh0dHAiIG9yICJzbWIiKQorICoKKyAqIENoZWNrcyBpZiBhbiBlbGVtZW50IGV4aXN0cyB0aGF0IHN1cHBvcnRzIHRoZSBnaXZlbiBVUkkgcHJvdG9jb2wuIE5vdGUKKyAqIHRoYXQgYSBwb3NpdGl2ZSByZXR1cm4gdmFsdWUgZG9lcyBub3QgaW1wbHkgdGhhdCBhIHN1YnNlcXVlbnQgY2FsbCB0bworICogZ3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaSgpIGlzIGd1YXJhbnRlZWQgdG8gd29yay4KKyAqCisgKiBSZXR1cm5zOiBUUlVFCisgKgorICogU2luY2U6IDAuMTAuMTMKKyovCitnYm9vbGVhbgorZ3N0X3VyaV9wcm90b2NvbF9pc19zdXBwb3J0ZWQgKGNvbnN0IEdzdFVSSVR5cGUgdHlwZSwgY29uc3QgZ2NoYXIgKiBwcm90b2NvbCkKK3sKKyAgR0xpc3QgKnBvc3NpYmlsaXRpZXM7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHByb3RvY29sLCBGQUxTRSk7CisKKyAgcG9zc2liaWxpdGllcyA9IGdldF9lbGVtZW50X2ZhY3Rvcmllc19mcm9tX3VyaV9wcm90b2NvbCAodHlwZSwgcHJvdG9jb2wpOworCisgIGlmIChwb3NzaWJpbGl0aWVzKSB7CisgICAgZ19saXN0X2ZyZWUgKHBvc3NpYmlsaXRpZXMpOworICAgIHJldHVybiBUUlVFOworICB9IGVsc2UKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaToKKyAqIEB0eXBlOiBXaGV0aGVyIHRvIGNyZWF0ZSBhIHNvdXJjZSBvciBhIHNpbmsKKyAqIEB1cmk6IFVSSSB0byBjcmVhdGUgYW4gZWxlbWVudCBmb3IKKyAqIEBlbGVtZW50bmFtZTogKGFsbG93LW5vbmUpOiBOYW1lIG9mIGNyZWF0ZWQgZWxlbWVudCwgY2FuIGJlIE5VTEwuCisgKgorICogQ3JlYXRlcyBhbiBlbGVtZW50IGZvciBoYW5kbGluZyB0aGUgZ2l2ZW4gVVJJLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgZWxlbWVudCBvciBOVUxMIGlmIG5vbmUgY291bGQgYmUgY3JlYXRlZAorICovCitHc3RFbGVtZW50ICoKK2dzdF9lbGVtZW50X21ha2VfZnJvbV91cmkgKGNvbnN0IEdzdFVSSVR5cGUgdHlwZSwgY29uc3QgZ2NoYXIgKiB1cmksCisgICAgY29uc3QgZ2NoYXIgKiBlbGVtZW50bmFtZSkKK3sKKyAgR0xpc3QgKnBvc3NpYmlsaXRpZXMsICp3YWxrOworICBnY2hhciAqcHJvdG9jb2w7CisgIEdzdEVsZW1lbnQgKnJldCA9IE5VTEw7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9VUklfVFlQRV9JU19WQUxJRCAodHlwZSksIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X3VyaV9pc192YWxpZCAodXJpKSwgTlVMTCk7CisKKyAgcHJvdG9jb2wgPSBnc3RfdXJpX2dldF9wcm90b2NvbCAodXJpKTsKKyAgcG9zc2liaWxpdGllcyA9IGdldF9lbGVtZW50X2ZhY3Rvcmllc19mcm9tX3VyaV9wcm90b2NvbCAodHlwZSwgcHJvdG9jb2wpOworICBnX2ZyZWUgKHByb3RvY29sKTsKKworICBpZiAoIXBvc3NpYmlsaXRpZXMpIHsKKyAgICBHU1RfREVCVUcgKCJObyAlcyBmb3IgVVJJICclcyciLCB0eXBlID09IEdTVF9VUklfU0lOSyA/ICJzaW5rIiA6ICJzb3VyY2UiLAorICAgICAgICB1cmkpOworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgcG9zc2liaWxpdGllcyA9IGdfbGlzdF9zb3J0IChwb3NzaWJpbGl0aWVzLCAoR0NvbXBhcmVGdW5jKSBzb3J0X2J5X3JhbmspOworICB3YWxrID0gcG9zc2liaWxpdGllczsKKyAgd2hpbGUgKHdhbGspIHsKKyAgICBpZiAoKHJldCA9CisgICAgICAgICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X2NyZWF0ZSAoR1NUX0VMRU1FTlRfRkFDVE9SWV9DQVNUICh3YWxrLT5kYXRhKSwKKyAgICAgICAgICAgICAgICBlbGVtZW50bmFtZSkpICE9IE5VTEwpIHsKKyAgICAgIEdzdFVSSUhhbmRsZXIgKmhhbmRsZXIgPSBHU1RfVVJJX0hBTkRMRVIgKHJldCk7CisKKyAgICAgIGlmIChnc3RfdXJpX2hhbmRsZXJfc2V0X3VyaSAoaGFuZGxlciwgdXJpKSkKKyAgICAgICAgYnJlYWs7CisgICAgICBnc3Rfb2JqZWN0X3VucmVmIChyZXQpOworICAgICAgcmV0ID0gTlVMTDsKKyAgICB9CisgICAgd2FsayA9IHdhbGstPm5leHQ7CisgIH0KKyAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSAocG9zc2liaWxpdGllcyk7CisKKyAgR1NUX0xPR19PQkpFQ1QgKHJldCwgImNyZWF0ZWQgJXMgZm9yIFVSTCAnJXMnIiwKKyAgICAgIHR5cGUgPT0gR1NUX1VSSV9TSU5LID8gInNpbmsiIDogInNvdXJjZSIsIHVyaSk7CisgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICogZ3N0X3VyaV9oYW5kbGVyX2dldF91cmlfdHlwZToKKyAqIEBoYW5kbGVyOiBBICNHc3RVUklIYW5kbGVyLgorICoKKyAqIEdldHMgdGhlIHR5cGUgb2YgdGhlIGdpdmVuIFVSSSBoYW5kbGVyCisgKgorICogUmV0dXJuczogdGhlICNHc3RVUklUeXBlIG9mIHRoZSBVUkkgaGFuZGxlci4KKyAqIFJldHVybnMgI0dTVF9VUklfVU5LTk9XTiBpZiB0aGUgQGhhbmRsZXIgaXNuJ3QgaW1wbGVtZW50ZWQgY29ycmVjdGx5LgorICovCitndWludAorZ3N0X3VyaV9oYW5kbGVyX2dldF91cmlfdHlwZSAoR3N0VVJJSGFuZGxlciAqIGhhbmRsZXIpCit7CisgIEdzdFVSSUhhbmRsZXJJbnRlcmZhY2UgKmlmYWNlOworICBndWludCByZXQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19VUklfSEFORExFUiAoaGFuZGxlciksIEdTVF9VUklfVU5LTk9XTik7CisKKyAgaWZhY2UgPSBHU1RfVVJJX0hBTkRMRVJfR0VUX0lOVEVSRkFDRSAoaGFuZGxlcik7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpZmFjZSAhPSBOVUxMLCBHU1RfVVJJX1VOS05PV04pOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoaWZhY2UtPmdldF90eXBlICE9IE5VTEwsIEdTVF9VUklfVU5LTk9XTik7CisKKyAgcmV0ID0gaWZhY2UtPmdldF90eXBlIChHX09CSkVDVF9UWVBFIChoYW5kbGVyKSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfVVJJX1RZUEVfSVNfVkFMSUQgKHJldCksIEdTVF9VUklfVU5LTk9XTik7CisKKyAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBnc3RfdXJpX2hhbmRsZXJfZ2V0X3Byb3RvY29sczoKKyAqIEBoYW5kbGVyOiBBICNHc3RVUklIYW5kbGVyLgorICoKKyAqIEdldHMgdGhlIGxpc3Qgb2YgcHJvdG9jb2xzIHN1cHBvcnRlZCBieSBAaGFuZGxlci4gVGhpcyBsaXN0IG1heSBub3QgYmUKKyAqIG1vZGlmaWVkLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKSAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpIChlbGVtZW50LXR5cGUgdXRmOCk6IHRoZQorICogICAgIHN1cHBvcnRlZCBwcm90b2NvbHMuIFJldHVybnMgTlVMTCBpZiB0aGUgQGhhbmRsZXIgaXNuJ3QgaW1wbGVtZW50ZWQKKyAqICAgICBwcm9wZXJseSwgb3IgdGhlIEBoYW5kbGVyIGRvZXNuJ3Qgc3VwcG9ydCBhbnkgcHJvdG9jb2xzLgorICovCitnY2hhciAqKgorZ3N0X3VyaV9oYW5kbGVyX2dldF9wcm90b2NvbHMgKEdzdFVSSUhhbmRsZXIgKiBoYW5kbGVyKQoreworICBHc3RVUklIYW5kbGVySW50ZXJmYWNlICppZmFjZTsKKyAgZ2NoYXIgKipyZXQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19VUklfSEFORExFUiAoaGFuZGxlciksIE5VTEwpOworCisgIGlmYWNlID0gR1NUX1VSSV9IQU5ETEVSX0dFVF9JTlRFUkZBQ0UgKGhhbmRsZXIpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoaWZhY2UgIT0gTlVMTCwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpZmFjZS0+Z2V0X3Byb3RvY29scyAhPSBOVUxMLCBOVUxMKTsKKworICByZXQgPSBpZmFjZS0+Z2V0X3Byb3RvY29scyAoR19PQkpFQ1RfVFlQRSAoaGFuZGxlcikpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAocmV0ICE9IE5VTEwsIE5VTEwpOworCisgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICogZ3N0X3VyaV9oYW5kbGVyX2dldF91cmk6CisgKiBAaGFuZGxlcjogQSAjR3N0VVJJSGFuZGxlcgorICoKKyAqIEdldHMgdGhlIGN1cnJlbnRseSBoYW5kbGVkIFVSSS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBVUkkgY3VycmVudGx5IGhhbmRsZWQgYnkgdGhlIEBoYW5kbGVyLgorICogICBSZXR1cm5zIE5VTEwgaWYgdGhlcmUgYXJlIG5vIFVSSSBjdXJyZW50bHkgaGFuZGxlZC4gVGhlCisgKiAgIHJldHVybmVkIHN0cmluZyBtdXN0IG5vdCBiZSBtb2RpZmllZCBvciBmcmVlZC4KKyAqLworY29uc3QgZ2NoYXIgKgorZ3N0X3VyaV9oYW5kbGVyX2dldF91cmkgKEdzdFVSSUhhbmRsZXIgKiBoYW5kbGVyKQoreworICBHc3RVUklIYW5kbGVySW50ZXJmYWNlICppZmFjZTsKKyAgY29uc3QgZ2NoYXIgKnJldDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1VSSV9IQU5ETEVSIChoYW5kbGVyKSwgTlVMTCk7CisKKyAgaWZhY2UgPSBHU1RfVVJJX0hBTkRMRVJfR0VUX0lOVEVSRkFDRSAoaGFuZGxlcik7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpZmFjZSAhPSBOVUxMLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGlmYWNlLT5nZXRfdXJpICE9IE5VTEwsIE5VTEwpOworICByZXQgPSBpZmFjZS0+Z2V0X3VyaSAoaGFuZGxlcik7CisgIGlmIChyZXQgIT0gTlVMTCkKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X3VyaV9pc192YWxpZCAocmV0KSwgTlVMTCk7CisKKyAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBnc3RfdXJpX2hhbmRsZXJfc2V0X3VyaToKKyAqIEBoYW5kbGVyOiBBICNHc3RVUklIYW5kbGVyCisgKiBAdXJpOiBVUkkgdG8gc2V0CisgKgorICogVHJpZXMgdG8gc2V0IHRoZSBVUkkgb2YgdGhlIGdpdmVuIGhhbmRsZXIuCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgVVJJIHdhcyBzZXQgc3VjY2Vzc2Z1bGx5LCBlbHNlIEZBTFNFLgorICovCitnYm9vbGVhbgorZ3N0X3VyaV9oYW5kbGVyX3NldF91cmkgKEdzdFVSSUhhbmRsZXIgKiBoYW5kbGVyLCBjb25zdCBnY2hhciAqIHVyaSkKK3sKKyAgR3N0VVJJSGFuZGxlckludGVyZmFjZSAqaWZhY2U7CisgIGdib29sZWFuIHJldDsKKyAgZ2NoYXIgKm5ld191cmksICpwcm90b2NvbCwgKmxvY2F0aW9uLCAqY29sb247CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19VUklfSEFORExFUiAoaGFuZGxlciksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF91cmlfaXNfdmFsaWQgKHVyaSksIEZBTFNFKTsKKworICBpZmFjZSA9IEdTVF9VUklfSEFORExFUl9HRVRfSU5URVJGQUNFIChoYW5kbGVyKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGlmYWNlICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGlmYWNlLT5zZXRfdXJpICE9IE5VTEwsIEZBTFNFKTsKKworICBwcm90b2NvbCA9IGdzdF91cmlfZ2V0X3Byb3RvY29sICh1cmkpOworCisgIGNvbG9uID0gc3Ryc3RyICh1cmksICI6Iik7CisgIGxvY2F0aW9uID0gZ19zdHJkdXAgKGNvbG9uKTsKKworICBuZXdfdXJpID0gZ19zdHJkdXBfcHJpbnRmICgiJXMlcyIsIHByb3RvY29sLCBsb2NhdGlvbik7CisKKyAgcmV0ID0gaWZhY2UtPnNldF91cmkgKGhhbmRsZXIsIHVyaSk7CisKKyAgZ19mcmVlIChuZXdfdXJpKTsKKyAgZ19mcmVlIChsb2NhdGlvbik7CisgIGdfZnJlZSAocHJvdG9jb2wpOworCisgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICogZ3N0X3VyaV9oYW5kbGVyX25ld191cmk6CisgKiBAaGFuZGxlcjogQSAjR3N0VVJJSGFuZGxlcgorICogQHVyaTogbmV3IFVSSSBvciBOVUxMIGlmIGl0IHdhcyB1bnNldAorICoKKyAqIEVtaXRzIHRoZSBuZXctdXJpIHNpZ25hbCBmb3IgYSBnaXZlbiBoYW5kbGVyLCB3aGVuIHRoYXQgaGFuZGxlciBoYXMgYSBuZXcgVVJJLgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgVVJJIGhhbmRsZXJzIHRoZW1zZWx2ZXMuCisgKi8KK3ZvaWQKK2dzdF91cmlfaGFuZGxlcl9uZXdfdXJpIChHc3RVUklIYW5kbGVyICogaGFuZGxlciwgY29uc3QgZ2NoYXIgKiB1cmkpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19VUklfSEFORExFUiAoaGFuZGxlcikpOworCisgIGdfc2lnbmFsX2VtaXQgKGhhbmRsZXIsIGdzdF91cmlfaGFuZGxlcl9zaWduYWxzW05FV19VUkldLCAwLCB1cmkpOworfQorCitzdGF0aWMgZ2NoYXIgKgorZ3N0X2ZpbGVfdXRpbHNfY2Fub25pY2FsaXNlX3BhdGggKGNvbnN0IGdjaGFyICogcGF0aCkKK3sKKyAgZ2NoYXIgKipwYXJ0cywgKipwLCAqY2xlYW5fcGF0aDsKKworI2lmZGVmIEdfT1NfV0lOMzIKKyAgeworICAgIEdTVF9XQVJOSU5HICgiRklYTUU6IGNhbm9uaWNhbGlzZSB3aW4zMiBwYXRoIik7CisgICAgcmV0dXJuIGdfc3RyZHVwIChwYXRoKTsKKyAgfQorI2VuZGlmCisKKyAgcGFydHMgPSBnX3N0cnNwbGl0IChwYXRoLCAiLyIsIC0xKTsKKworICBwID0gcGFydHM7CisgIHdoaWxlICgqcCAhPSBOVUxMKSB7CisgICAgaWYgKHN0cmNtcCAoKnAsICIuIikgPT0gMCkgeworICAgICAgLyoganVzdCBtb3ZlIGFsbCBmb2xsb3dpbmcgcGFydHMgb24gdG9wIG9mIHRoaXMsIGluY2wuIE5VTCB0ZXJtaW5hdG9yICovCisgICAgICBnX2ZyZWUgKCpwKTsKKyAgICAgIGdfbWVtbW92ZSAocCwgcCArIDEsIChnX3N0cnZfbGVuZ3RoIChwICsgMSkgKyAxKSAqIHNpemVvZiAoZ2NoYXIgKikpOworICAgICAgLyogcmUtY2hlY2sgdGhlIG5ldyBjdXJyZW50IHBhcnQgYWdhaW4gaW4gdGhlIG5leHQgaXRlcmF0aW9uICovCisgICAgICBjb250aW51ZTsKKyAgICB9IGVsc2UgaWYgKHN0cmNtcCAoKnAsICIuLiIpID09IDAgJiYgcCA+IHBhcnRzKSB7CisgICAgICAvKiBqdXN0IG1vdmUgYWxsIGZvbGxvd2luZyBwYXJ0cyBvbiB0b3Agb2YgdGhlIHByZXZpb3VzIHBhcnQsIGluY2wuCisgICAgICAgKiBOVUwgdGVybWluYXRvciAqLworICAgICAgZ19mcmVlICgqKHAgLSAxKSk7CisgICAgICBnX2ZyZWUgKCpwKTsKKyAgICAgIGdfbWVtbW92ZSAocCAtIDEsIHAgKyAxLCAoZ19zdHJ2X2xlbmd0aCAocCArIDEpICsgMSkgKiBzaXplb2YgKGdjaGFyICopKTsKKyAgICAgIC8qIHJlLWNoZWNrIHRoZSBuZXcgY3VycmVudCBwYXJ0IGFnYWluIGluIHRoZSBuZXh0IGl0ZXJhdGlvbiAqLworICAgICAgLS1wOworICAgICAgY29udGludWU7CisgICAgfQorICAgICsrcDsKKyAgfQorICBpZiAoKnBhdGggPT0gJy8nKSB7CisgICAgZ3VpbnQgbnVtX3BhcnRzOworCisgICAgbnVtX3BhcnRzID0gZ19zdHJ2X2xlbmd0aCAocGFydHMpICsgMTsgICAgICAvKiBpbmNsLiB0ZXJtaW5hdG9yICovCisgICAgcGFydHMgPSBnX3JlbmV3IChnY2hhciAqLCBwYXJ0cywgbnVtX3BhcnRzICsgMSk7CisgICAgZ19tZW1tb3ZlIChwYXJ0cyArIDEsIHBhcnRzLCBudW1fcGFydHMgKiBzaXplb2YgKGdjaGFyICopKTsKKyAgICBwYXJ0c1swXSA9IGdfc3RyZHVwICgiLyIpOworICB9CisKKyAgY2xlYW5fcGF0aCA9IGdfYnVpbGRfZmlsZW5hbWV2IChwYXJ0cyk7CisgIGdfc3RyZnJlZXYgKHBhcnRzKTsKKyAgcmV0dXJuIGNsZWFuX3BhdGg7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZmlsZV9wYXRoX2NvbnRhaW5zX3JlbGF0aXZlcyAoY29uc3QgZ2NoYXIgKiBwYXRoKQoreworICByZXR1cm4gKHN0cnN0ciAocGF0aCwgIi8uLyIpICE9IE5VTEwgfHwgc3Ryc3RyIChwYXRoLCAiLy4uLyIpICE9IE5VTEwgfHwKKyAgICAgIHN0cnN0ciAocGF0aCwgR19ESVJfU0VQQVJBVE9SX1MgIi4iIEdfRElSX1NFUEFSQVRPUl9TKSAhPSBOVUxMIHx8CisgICAgICBzdHJzdHIgKHBhdGgsIEdfRElSX1NFUEFSQVRPUl9TICIuLiIgR19ESVJfU0VQQVJBVE9SX1MpICE9IE5VTEwpOworfQorCisvKioKKyAqIGdzdF9maWxlbmFtZV90b191cmk6CisgKiBAZmlsZW5hbWU6IGFic29sdXRlIG9yIHJlbGF0aXZlIGZpbGUgbmFtZSBwYXRoCisgKiBAZXJyb3I6IHBvaW50ZXIgdG8gZXJyb3IsIG9yIE5VTEwKKyAqCisgKiBTaW1pbGFyIHRvIGdfZmlsZW5hbWVfdG9fdXJpKCksIGJ1dCBhdHRlbXB0cyB0byBoYW5kbGUgcmVsYXRpdmUgZmlsZSBwYXRocworICogYXMgd2VsbC4gQmVmb3JlIGNvbnZlcnRpbmcgQGZpbGVuYW1lIGludG8gYW4gVVJJLCBpdCB3aWxsIGJlIHByZWZpeGVkIGJ5CisgKiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpZiBpdCBpcyBhIHJlbGF0aXZlIHBhdGgsIGFuZCB0aGVuIHRoZSBwYXRoCisgKiB3aWxsIGJlIGNhbm9uaWNhbGlzZWQgc28gdGhhdCBpdCBkb2Vzbid0IGNvbnRhaW4gYW55ICcuLycgb3IgJy4uLycgc2VnbWVudHMuCisgKgorICogT24gV2luZG93cyAjZmlsZW5hbWUgc2hvdWxkIGJlIGluIFVURi04IGVuY29kaW5nLgorICoKKyAqIFNpbmNlOiAwLjEwLjMzCisgKi8KK2djaGFyICoKK2dzdF9maWxlbmFtZV90b191cmkgKGNvbnN0IGdjaGFyICogZmlsZW5hbWUsIEdFcnJvciAqKiBlcnJvcikKK3sKKyAgZ2NoYXIgKmFic19sb2NhdGlvbiA9IE5VTEw7CisgIGdjaGFyICp1cmksICphYnNfY2xlYW47CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpbGVuYW1lICE9IE5VTEwsIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZXJyb3IgPT0gTlVMTCB8fCAqZXJyb3IgPT0gTlVMTCwgTlVMTCk7CisKKyAgaWYgKGdfcGF0aF9pc19hYnNvbHV0ZSAoZmlsZW5hbWUpKSB7CisgICAgaWYgKCFmaWxlX3BhdGhfY29udGFpbnNfcmVsYXRpdmVzIChmaWxlbmFtZSkpIHsKKyAgICAgIHVyaSA9IGdfZmlsZW5hbWVfdG9fdXJpIChmaWxlbmFtZSwgTlVMTCwgZXJyb3IpOworICAgICAgZ290byBiZWFjaDsKKyAgICB9CisKKyAgICBhYnNfbG9jYXRpb24gPSBnX3N0cmR1cCAoZmlsZW5hbWUpOworICB9IGVsc2UgeworICAgIGdjaGFyICpjd2Q7CisKKyAgICBjd2QgPSBnX2dldF9jdXJyZW50X2RpciAoKTsKKyAgICBhYnNfbG9jYXRpb24gPSBnX2J1aWxkX2ZpbGVuYW1lIChjd2QsIGZpbGVuYW1lLCBOVUxMKTsKKyAgICBnX2ZyZWUgKGN3ZCk7CisKKyAgICBpZiAoIWZpbGVfcGF0aF9jb250YWluc19yZWxhdGl2ZXMgKGFic19sb2NhdGlvbikpIHsKKyAgICAgIHVyaSA9IGdfZmlsZW5hbWVfdG9fdXJpIChhYnNfbG9jYXRpb24sIE5VTEwsIGVycm9yKTsKKyAgICAgIGdvdG8gYmVhY2g7CisgICAgfQorICB9CisKKyAgLyogcGF0aCBpcyBub3cgYWJzb2x1dGUsIGJ1dCBjb250YWlucyAnLicgb3IgJy4uJyAqLworICBhYnNfY2xlYW4gPSBnc3RfZmlsZV91dGlsc19jYW5vbmljYWxpc2VfcGF0aCAoYWJzX2xvY2F0aW9uKTsKKyAgR1NUX0xPRyAoIiclcycgLT4gJyVzJyAtPiAnJXMnIiwgZmlsZW5hbWUsIGFic19sb2NhdGlvbiwgYWJzX2NsZWFuKTsKKyAgdXJpID0gZ19maWxlbmFtZV90b191cmkgKGFic19jbGVhbiwgTlVMTCwgZXJyb3IpOworICBnX2ZyZWUgKGFic19jbGVhbik7CisKK2JlYWNoOgorCisgIGdfZnJlZSAoYWJzX2xvY2F0aW9uKTsKKyAgR1NUX0RFQlVHICgiJyVzJyAtPiAnJXMnIiwgZmlsZW5hbWUsIHVyaSk7CisgIHJldHVybiB1cmk7Cit9CmRpZmYgLS1naXQgYS9nc3QvZ3N0dXJpLmggYi9nc3QvZ3N0dXJpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc2ZDcwZQotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3R1cmkuaApAQCAtMCwwICsxLDE0NSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgorICoKKyAqIGdzdHVyaS5oOiBIZWFkZXIgZm9yIHVyaSB0byBlbGVtZW50IG1hcHBpbmdzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworCisjaWZuZGVmIF9fR1NUX1VSSV9IX18KKyNkZWZpbmUgX19HU1RfVVJJX0hfXworCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdzdC9nc3RlbGVtZW50Lmg+CisjaW5jbHVkZSA8Z3N0L2dzdHBsdWdpbmZlYXR1cmUuaD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAqIEdzdFVSSVR5cGU6CisgKiBAR1NUX1VSSV9VTktOT1dOCTogVGhlIFVSSSBkaXJlY3Rpb24gaXMgdW5rbm93bgorICogQEdTVF9VUklfU0lOSwk6IFRoZSBVUkkgaXMgYSBjb25zdW1lci4KKyAqIEBHU1RfVVJJX1NSQwkJOiBUaGUgVVJJIGlzIGEgcHJvZHVjZXIuCisgKgorICogVGhlIGRpZmZlcmVudCB0eXBlcyBvZiBVUkkgZGlyZWN0aW9uLgorICovCisKK3R5cGVkZWYgZW51bSB7CisgIEdTVF9VUklfVU5LTk9XTiwKKyAgR1NUX1VSSV9TSU5LLAorICBHU1RfVVJJX1NSQworfSBHc3RVUklUeXBlOworCisvKioKKyAqIEdTVF9VUklfVFlQRV9JU19WQUxJRDoKKyAqIEB0eXBlOiBBICNHc3RVUklUeXBlCisgKgorICogVGVzdHMgaWYgdGhlIHR5cGUgZGlyZWN0aW9uIGlzIHZhbGlkLgorICovCisjZGVmaW5lIEdTVF9VUklfVFlQRV9JU19WQUxJRCh0eXBlKSAoKHR5cGUpID09IEdTVF9VUklfU1JDIHx8ICh0eXBlKSA9PSBHU1RfVVJJX1NJTkspCisKKy8qIHVyaSBoYW5kbGVyIGZ1bmN0aW9ucyAqLworI2RlZmluZSBHU1RfVFlQRV9VUklfSEFORExFUgkJKGdzdF91cmlfaGFuZGxlcl9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgR1NUX1VSSV9IQU5ETEVSKG9iaikJCShHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX1VSSV9IQU5ETEVSLCBHc3RVUklIYW5kbGVyKSkKKyNkZWZpbmUgR1NUX0lTX1VSSV9IQU5ETEVSKG9iaikJCShHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX1VSSV9IQU5ETEVSKSkKKyNkZWZpbmUgR1NUX1VSSV9IQU5ETEVSX0dFVF9JTlRFUkZBQ0Uob2JqKQkoR19UWVBFX0lOU1RBTkNFX0dFVF9JTlRFUkZBQ0UgKChvYmopLCBHU1RfVFlQRV9VUklfSEFORExFUiwgR3N0VVJJSGFuZGxlckludGVyZmFjZSkpCisKKy8qKgorICogR3N0VVJJSGFuZGxlcjoKKyAqCisgKiBPcGFxdWUgI0dzdFVSSUhhbmRsZXIgc3RydWN0dXJlLgorICovCit0eXBlZGVmIHN0cnVjdCBfR3N0VVJJSGFuZGxlciBHc3RVUklIYW5kbGVyOwordHlwZWRlZiBzdHJ1Y3QgX0dzdFVSSUhhbmRsZXJJbnRlcmZhY2UgR3N0VVJJSGFuZGxlckludGVyZmFjZTsKKworLyoqCisgKiBHc3RVUklIYW5kbGVySW50ZXJmYWNlOgorICogQHBhcmVudDogVGhlIHBhcmVudCBpbnRlcmZhY2UgdHlwZQorICogQGdldF90eXBlOiBNZXRob2QgdG8gdGVsbCB3aGV0aGVyIHRoZSBlbGVtZW50IGhhbmRsZXMgc291cmNlIG9yIHNpbmsgVVJJLgorICogQGdldF9wcm90b2NvbHM6IE1ldGhvZCB0byByZXR1cm4gdGhlIGxpc3Qgb2YgcHJvdG9jb2xzIGhhbmRsZWQgYnkgdGhlIGVsZW1lbnQuCisgKiBAZ2V0X3VyaTogTWV0aG9kIHRvIHJldHVybiB0aGUgVVJJIGN1cnJlbnRseSBoYW5kbGVkIGJ5IHRoZSBlbGVtZW50LgorICogQHNldF91cmk6IE1ldGhvZCB0byBzZXQgYSBuZXcgVVJJLgorICoKKyAqIEFueSAjR3N0RWxlbWVudCB1c2luZyB0aGlzIGludGVyZmFjZSBzaG91bGQgaW1wbGVtZW50IHRoZXNlIG1ldGhvZHMuCisgKi8KK3N0cnVjdCBfR3N0VVJJSGFuZGxlckludGVyZmFjZSB7CisgIEdUeXBlSW50ZXJmYWNlCXBhcmVudDsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgLyogc2lnbmFscyAqLworICB2b2lkCQkoKiBuZXdfdXJpKQkJCShHc3RVUklIYW5kbGVyICogaGFuZGxlciwKKwkJCQkJCSBjb25zdCBnY2hhciAqICAgdXJpKTsKKyAgLyogaWRlYSBmb3IgdGhlIGZ1dHVyZSA/CisgIGdib29sZWFuCSgqIHJlcXVpcmVfcGFzc3dvcmQpCQkoR3N0VVJJSGFuZGxlciAqIGhhbmRsZXIsCisJCQkJCQkgZ2NoYXIgKioJIHVzZXJuYW1lLAorCQkJCQkJIGdjaGFyICoqCSBwYXNzd29yZCk7CisgICAqLworCisgIC8qIHZ0YWJsZSAqLworCisgIC8qPCBwdWJsaWMgPiovCisgIC8qIHF1ZXJ5aW5nIGNhcGFiaWxpdGllcyAqLworICBHc3RVUklUeXBlCQkoKiBnZXRfdHlwZSkJCShHVHlwZSB0eXBlKTsKKyAgZ2NoYXIgKioJCSgqIGdldF9wcm90b2NvbHMpCShHVHlwZSB0eXBlKTsKKworICAvKiB1c2luZyB0aGUgaW50ZXJmYWNlICovCisgIGNvbnN0IGdjaGFyICoJCSgqIGdldF91cmkpCQkoR3N0VVJJSGFuZGxlciAqIGhhbmRsZXIpOworICBnYm9vbGVhbgkJKCogc2V0X3VyaSkJCShHc3RVUklIYW5kbGVyICogaGFuZGxlciwKKwkJCQkJCSBjb25zdCBnY2hhciAqCSB1cmkpOworCisgIC8qPCBwcml2YXRlID4qLworICAvKiB3ZSBtaWdodCB3YW50IHRvIGFkZCBmdW5jdGlvbnMgaGVyZSB0byBxdWVyeSBmZWF0dXJlcywKKyAgICogc29tZW9uZSB3aXRoIGdub21lLXZmcyBrbm93bGVkZ2UgZ28gYWhlYWQgKi8KKworICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKK307CisKKy8qIGdlbmVyYWwgVVJJIGZ1bmN0aW9ucyAqLworCitnYm9vbGVhbglnc3RfdXJpX3Byb3RvY29sX2lzX3ZhbGlkCShjb25zdCBnY2hhciAqIHByb3RvY29sKTsKK2dib29sZWFuCWdzdF91cmlfcHJvdG9jb2xfaXNfc3VwcG9ydGVkCShjb25zdCBHc3RVUklUeXBlIHR5cGUsCisJCQkJCQkgY29uc3QgZ2NoYXIgKnByb3RvY29sKTsKK2dib29sZWFuCWdzdF91cmlfaXNfdmFsaWQJCShjb25zdCBnY2hhciAqIHVyaSk7CitnY2hhciAqCQlnc3RfdXJpX2dldF9wcm90b2NvbAkJKGNvbnN0IGdjaGFyICogdXJpKTsKK2dib29sZWFuICAgICAgICBnc3RfdXJpX2hhc19wcm90b2NvbCAgICAgICAgICAgIChjb25zdCBnY2hhciAqIHVyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIHByb3RvY29sKTsKK2djaGFyICoJCWdzdF91cmlfZ2V0X2xvY2F0aW9uCQkoY29uc3QgZ2NoYXIgKiB1cmkpOworZ2NoYXIgKgkJZ3N0X3VyaV9jb25zdHJ1Y3QJCShjb25zdCBnY2hhciAqIHByb3RvY29sLAorCQkJCQkJIGNvbnN0IGdjaGFyICogbG9jYXRpb24pOworCitnY2hhciAqICAgICAgICAgZ3N0X2ZpbGVuYW1lX3RvX3VyaSAgICAgICAgICAgICAoY29uc3QgZ2NoYXIgKiBmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICoqIGVycm9yKTsKKworR3N0RWxlbWVudCAqCWdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkJKGNvbnN0IEdzdFVSSVR5cGUgdHlwZSwKKwkJCQkJCSBjb25zdCBnY2hhciAqICAgIHVyaSwKKwkJCQkJCSBjb25zdCBnY2hhciAqICAgIGVsZW1lbnRuYW1lKTsKKworLyogYWNjZXNzaW5nIHRoZSBpbnRlcmZhY2UgKi8KK0dUeXBlCQlnc3RfdXJpX2hhbmRsZXJfZ2V0X3R5cGUJKHZvaWQpOworCitndWludAkJZ3N0X3VyaV9oYW5kbGVyX2dldF91cmlfdHlwZQkoR3N0VVJJSGFuZGxlciAqIGhhbmRsZXIpOworZ2NoYXIgKioJZ3N0X3VyaV9oYW5kbGVyX2dldF9wcm90b2NvbHMJKEdzdFVSSUhhbmRsZXIgKiBoYW5kbGVyKTsKK2NvbnN0IGdjaGFyICoJZ3N0X3VyaV9oYW5kbGVyX2dldF91cmkJCShHc3RVUklIYW5kbGVyICogaGFuZGxlcik7CitnYm9vbGVhbglnc3RfdXJpX2hhbmRsZXJfc2V0X3VyaQkJKEdzdFVSSUhhbmRsZXIgKiBoYW5kbGVyLAorCQkJCQkJIGNvbnN0IGdjaGFyICoJIHVyaSk7Cit2b2lkCQlnc3RfdXJpX2hhbmRsZXJfbmV3X3VyaQkJKEdzdFVSSUhhbmRsZXIgKiBoYW5kbGVyLAorCQkJCQkJIGNvbnN0IGdjaGFyICoJIHVyaSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9VUklfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0dXRpbHMuYyBiL2dzdC9nc3R1dGlscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZWFjNmIKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0dXRpbHMuYwpAQCAtMCwwICsxLDM4MTMgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAyIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorICoKKyAqIGdzdHV0aWxzLmM6IFV0aWxpdHkgZnVuY3Rpb25zCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoqCisgKiBTRUNUSU9OOmdzdHV0aWxzCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IFZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMKKyAqCisgKi8KKworI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImdzdGdob3N0cGFkLmgiCisjaW5jbHVkZSAiZ3N0dXRpbHMuaCIKKyNpbmNsdWRlICJnc3RlcnJvci5oIgorI2luY2x1ZGUgImdzdGluZm8uaCIKKyNpbmNsdWRlICJnc3RwYXJzZS5oIgorI2luY2x1ZGUgImdzdHZhbHVlLmgiCisjaW5jbHVkZSAiZ3N0LWkxOG4tbGliLmgiCisjaW5jbHVkZSAiZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIgorI2luY2x1ZGUgPG1hdGguaD4KKworLyoqCisgKiBnc3RfdXRpbF9kdW1wX21lbToKKyAqIEBtZW06IGEgcG9pbnRlciB0byB0aGUgbWVtb3J5IHRvIGR1bXAKKyAqIEBzaXplOiB0aGUgc2l6ZSBvZiB0aGUgbWVtb3J5IGJsb2NrIHRvIGR1bXAKKyAqCisgKiBEdW1wcyB0aGUgbWVtb3J5IGJsb2NrIGludG8gYSBoZXggcmVwcmVzZW50YXRpb24uIFVzZWZ1bCBmb3IgZGVidWdnaW5nLgorICovCit2b2lkCitnc3RfdXRpbF9kdW1wX21lbSAoY29uc3QgZ3VjaGFyICogbWVtLCBndWludCBzaXplKQoreworICBndWludCBpLCBqOworICBHU3RyaW5nICpzdHJpbmcgPSBnX3N0cmluZ19zaXplZF9uZXcgKDUwKTsKKyAgR1N0cmluZyAqY2hhcnMgPSBnX3N0cmluZ19zaXplZF9uZXcgKDE4KTsKKworICBpID0gaiA9IDA7CisgIHdoaWxlIChpIDwgc2l6ZSkgeworICAgIGlmIChnX2FzY2lpX2lzcHJpbnQgKG1lbVtpXSkpCisgICAgICBnX3N0cmluZ19hcHBlbmRfYyAoY2hhcnMsIG1lbVtpXSk7CisgICAgZWxzZQorICAgICAgZ19zdHJpbmdfYXBwZW5kX2MgKGNoYXJzLCAnLicpOworCisgICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAoc3RyaW5nLCAiJTAyeCAiLCBtZW1baV0pOworCisgICAgaisrOworICAgIGkrKzsKKworICAgIGlmIChqID09IDE2IHx8IGkgPT0gc2l6ZSkgeworICAgICAgZ19wcmludCAoIiUwOHggKCVwKTogJS00OC40OHMgJS0xNi4xNnNcbiIsIGkgLSBqLCBtZW0gKyBpIC0gaiwKKyAgICAgICAgICBzdHJpbmctPnN0ciwgY2hhcnMtPnN0cik7CisgICAgICBnX3N0cmluZ19zZXRfc2l6ZSAoc3RyaW5nLCAwKTsKKyAgICAgIGdfc3RyaW5nX3NldF9zaXplIChjaGFycywgMCk7CisgICAgICBqID0gMDsKKyAgICB9CisgIH0KKyAgZ19zdHJpbmdfZnJlZSAoc3RyaW5nLCBUUlVFKTsKKyAgZ19zdHJpbmdfZnJlZSAoY2hhcnMsIFRSVUUpOworfQorCisKKy8qKgorICogZ3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nOgorICogQHZhbHVlOiAob3V0IGNhbGxlci1hbGxvY2F0ZXMpOiB0aGUgdmFsdWUgdG8gc2V0CisgKiBAdmFsdWVfc3RyOiB0aGUgc3RyaW5nIHRvIGdldCB0aGUgdmFsdWUgZnJvbQorICoKKyAqIENvbnZlcnRzIHRoZSBzdHJpbmcgdG8gdGhlIHR5cGUgb2YgdGhlIHZhbHVlIGFuZAorICogc2V0cyB0aGUgdmFsdWUgd2l0aCBpdC4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBkYW5nZXJvdXMgYXMgaXQgZG9lcyBub3QgcmV0dXJuIGFueSBpbmRpY2F0aW9uCisgKiBpZiB0aGUgY29udmVyc2lvbiB3b3JrZWQgb3Igbm90LgorICovCit2b2lkCitnc3RfdXRpbF9zZXRfdmFsdWVfZnJvbV9zdHJpbmcgKEdWYWx1ZSAqIHZhbHVlLCBjb25zdCBnY2hhciAqIHZhbHVlX3N0cikKK3sKKyAgZ2Jvb2xlYW4gcmVzOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKHZhbHVlICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsICh2YWx1ZV9zdHIgIT0gTlVMTCk7CisKKyAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9QQVJBTVMsICJwYXJzaW5nICclcycgdG8gdHlwZSAlcyIsIHZhbHVlX3N0ciwKKyAgICAgIGdfdHlwZV9uYW1lIChHX1ZBTFVFX1RZUEUgKHZhbHVlKSkpOworCisgIHJlcyA9IGdzdF92YWx1ZV9kZXNlcmlhbGl6ZSAodmFsdWUsIHZhbHVlX3N0cik7CisgIGlmICghcmVzICYmIEdfVkFMVUVfVFlQRSAodmFsdWUpID09IEdfVFlQRV9CT09MRUFOKSB7CisgICAgLyogYmFja3dhcmRzIGNvbXBhdCwgYWxsIGJvb2xlYW5zIHRoYXQgZmFpbCB0byBwYXJzZSBhcmUgZmFsc2UgKi8KKyAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgRkFMU0UpOworICAgIHJlcyA9IFRSVUU7CisgIH0KKyAgZ19yZXR1cm5faWZfZmFpbCAocmVzKTsKK30KKworLyoqCisgKiBnc3RfdXRpbF9zZXRfb2JqZWN0X2FyZzoKKyAqIEBvYmplY3Q6IHRoZSBvYmplY3QgdG8gc2V0IHRoZSBhcmd1bWVudCBvZgorICogQG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBhcmd1bWVudCB0byBzZXQKKyAqIEB2YWx1ZTogdGhlIHN0cmluZyB2YWx1ZSB0byBzZXQKKyAqCisgKiBDb252ZXJ0ZXMgdGhlIHN0cmluZyB2YWx1ZSB0byB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0cyBhcmd1bWVudCBhbmQKKyAqIHNldHMgdGhlIGFyZ3VtZW50IHdpdGggaXQuCisgKgorICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2lsZW50bHkgcmV0dXJucyBpZiBAb2JqZWN0IGhhcyBubyBwcm9wZXJ0eSBuYW1lZAorICogQG5hbWUgb3Igd2hlbiBAdmFsdWUgY2Fubm90IGJlIGNvbnZlcnRlZCB0byB0aGUgdHlwZSBvZiB0aGUgcHJvcGVydHkuCisgKi8KK3ZvaWQKK2dzdF91dGlsX3NldF9vYmplY3RfYXJnIChHT2JqZWN0ICogb2JqZWN0LCBjb25zdCBnY2hhciAqIG5hbWUsCisgICAgY29uc3QgZ2NoYXIgKiB2YWx1ZSkKK3sKKyAgR1BhcmFtU3BlYyAqcHNwZWM7CisgIEdUeXBlIHZhbHVlX3R5cGU7CisgIEdWYWx1ZSB2ID0geyAwLCB9OworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdfSVNfT0JKRUNUIChvYmplY3QpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAobmFtZSAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAodmFsdWUgIT0gTlVMTCk7CisKKyAgcHNwZWMgPSBnX29iamVjdF9jbGFzc19maW5kX3Byb3BlcnR5IChHX09CSkVDVF9HRVRfQ0xBU1MgKG9iamVjdCksIG5hbWUpOworICBpZiAoIXBzcGVjKQorICAgIHJldHVybjsKKworICB2YWx1ZV90eXBlID0gcHNwZWMtPnZhbHVlX3R5cGU7CisKKyAgR1NUX0RFQlVHICgicHNwZWMtPmZsYWdzIGlzICVkLCBwc3BlYy0+dmFsdWVfdHlwZSBpcyAlcyIsCisgICAgICBwc3BlYy0+ZmxhZ3MsIGdfdHlwZV9uYW1lICh2YWx1ZV90eXBlKSk7CisKKyAgaWYgKCEocHNwZWMtPmZsYWdzICYgR19QQVJBTV9XUklUQUJMRSkpCisgICAgcmV0dXJuOworCisgIGdfdmFsdWVfaW5pdCAoJnYsIHZhbHVlX3R5cGUpOworCisgIC8qIHNwZWNpYWwgY2FzZSBmb3IgZWxlbWVudCA8LT4geG1sIChkZSlzZXJpYWxpc2F0aW9uICovCisgIGlmIChHU1RfVkFMVUVfSE9MRFNfU1RSVUNUVVJFICgmdikgJiYgc3RyY21wICh2YWx1ZSwgIk5VTEwiKSA9PSAwKSB7CisgICAgZ192YWx1ZV9zZXRfYm94ZWQgKCZ2LCBOVUxMKTsKKyAgICBnb3RvIGRvbmU7CisgIH0KKworICBpZiAoIWdzdF92YWx1ZV9kZXNlcmlhbGl6ZSAoJnYsIHZhbHVlKSkKKyAgICByZXR1cm47CisKK2RvbmU6CisKKyAgZ19vYmplY3Rfc2V0X3Byb3BlcnR5IChvYmplY3QsIHBzcGVjLT5uYW1lLCAmdik7CisgIGdfdmFsdWVfdW5zZXQgKCZ2KTsKK30KKworLyogd29yayBhcm91bmQgZXJyb3IgQzI1MjA6IGNvbnZlcnNpb24gZnJvbSB1bnNpZ25lZCBfX2ludDY0IHRvIGRvdWJsZQorICogbm90IGltcGxlbWVudGVkLCB1c2Ugc2lnbmVkIF9faW50NjQKKyAqCisgKiBUaGVzZSBhcmUgaW1wbGVtZW50ZWQgYXMgZnVuY3Rpb25zIGJlY2F1c2Ugb24gc29tZSBwbGF0Zm9ybXMgYSA2NGJpdCBpbnQgdG8KKyAqIGRvdWJsZSBjb252ZXJzaW9uIGlzIG5vdCBkZWZpbmVkL2ltcGxlbWVudGVkLgorICovCisKK2dkb3VibGUKK2dzdF91dGlsX2d1aW50NjRfdG9fZ2RvdWJsZSAoZ3VpbnQ2NCB2YWx1ZSkKK3sKKyAgaWYgKHZhbHVlICYgR19HSU5UNjRfQ09OU1RBTlQgKDB4ODAwMDAwMDAwMDAwMDAwMCkpCisgICAgcmV0dXJuIChnZG91YmxlKSAoKGdpbnQ2NCkgdmFsdWUpICsgKGdkb3VibGUpIDE4NDQ2NzQ0MDczNzA5NTUxNjE2LjsKKyAgZWxzZQorICAgIHJldHVybiAoZ2RvdWJsZSkgKChnaW50NjQpIHZhbHVlKTsKK30KKworZ3VpbnQ2NAorZ3N0X3V0aWxfZ2RvdWJsZV90b19ndWludDY0IChnZG91YmxlIHZhbHVlKQoreworICBpZiAodmFsdWUgPCAoZ2RvdWJsZSkgOTIyMzM3MjAzNjg1NDc3NTgwOC4pICAgLyogMSA8PCA2MyAqLworICAgIHJldHVybiAoKGd1aW50NjQpICgoZ2ludDY0KSB2YWx1ZSkpOworCisgIHZhbHVlIC09IChnZG91YmxlKSAxODQ0Njc0NDA3MzcwOTU1MTYxNi47CisgIHJldHVybiAoKGd1aW50NjQpICgoZ2ludDY0KSB2YWx1ZSkpOworfQorCisjaWZuZGVmIEhBVkVfVUlOVDEyOF9UCisvKiBjb252ZW5pZW5jZSBzdHJ1Y3QgZm9yIGdldHRpbmcgaGlnaCBhbmQgbG93IHVpbnQzMiBwYXJ0cyBvZgorICogYSBndWludDY0ICovCit0eXBlZGVmIHVuaW9uCit7CisgIGd1aW50NjQgbGw7CisgIHN0cnVjdAorICB7CisjaWYgR19CWVRFX09SREVSID09IEdfQklHX0VORElBTgorICAgIGd1aW50MzIgaGlnaCwgbG93OworI2Vsc2UKKyAgICBndWludDMyIGxvdywgaGlnaDsKKyNlbmRpZgorICB9IGw7Cit9IEdzdFVJbnQ2NDsKKworI2lmIGRlZmluZWQgKF9feDg2XzY0X18pICYmIGRlZmluZWQgKF9fR05VQ19fKQorc3RhdGljIGlubGluZSB2b2lkCitnc3RfdXRpbF91aW50NjRfbXVsX3VpbnQ2NCAoR3N0VUludDY0ICogYzEsIEdzdFVJbnQ2NCAqIGMwLCBndWludDY0IGFyZzEsCisgICAgZ3VpbnQ2NCBhcmcyKQoreworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm11bHEgJTMiOiI9YSIgKGMwLT5sbCksICI9ZCIgKGMxLT5sbCkKKyAgICAgIDoiYSIgKGFyZzEpLCAiZyIgKGFyZzIpCisgICAgICApOworfQorI2Vsc2UgLyogZGVmaW5lZCAoX194ODZfNjRfXykgKi8KKy8qIG11bHRpcGx5IHR3byA2NC1iaXQgdW5zaWduZWQgaW50cyBpbnRvIGEgMTI4LWJpdCB1bnNpZ25lZCBpbnQuICB0aGUgaGlnaAorICogYW5kIGxvdyA2NCBiaXRzIG9mIHRoZSBwcm9kdWN0IGFyZSBwbGFjZWQgaW4gYzEgYW5kIGMwIHJlc3BlY3RpdmVseS4KKyAqIHRoaXMgb3BlcmF0aW9uIGNhbm5vdCBvdmVyZmxvdy4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZ3N0X3V0aWxfdWludDY0X211bF91aW50NjQgKEdzdFVJbnQ2NCAqIGMxLCBHc3RVSW50NjQgKiBjMCwgZ3VpbnQ2NCBhcmcxLAorICAgIGd1aW50NjQgYXJnMikKK3sKKyAgR3N0VUludDY0IGExLCBiMDsKKyAgR3N0VUludDY0IHYsIG47CisKKyAgLyogcHJlcGFyZSBpbnB1dCAqLworICB2LmxsID0gYXJnMTsKKyAgbi5sbCA9IGFyZzI7CisKKyAgLyogZG8gMTI4IGJpdHMgbXVsdGlwbHkKKyAgICogICAgICAgICAgICAgICAgICAgbmggICBubAorICAgKiAgICAgICAgICAgICAgICAqICB2aCAgIHZsCisgICAqICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0KKyAgICogYTAgPSAgICAgICAgICAgICAgdmwgKiBubAorICAgKiBhMSA9ICAgICAgICAgdmwgKiBuaAorICAgKiBiMCA9ICAgICAgICAgdmggKiBubAorICAgKiBiMSA9ICArIHZoICogbmgKKyAgICogICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgKiAgICAgICAgYzFoICBjMWwgIGMwaCAgYzBsCisgICAqCisgICAqICJhMCIgaXMgb3B0aW1pemVkIGF3YXksIHJlc3VsdCBpcyBzdG9yZWQgZGlyZWN0bHkgaW4gYzAuICAiYjEiIGlzCisgICAqIG9wdGltaXplZCBhd2F5LCByZXN1bHQgaXMgc3RvcmVkIGRpcmVjdGx5IGluIGMxLgorICAgKi8KKyAgYzAtPmxsID0gKGd1aW50NjQpIHYubC5sb3cgKiBuLmwubG93OworICBhMS5sbCA9IChndWludDY0KSB2LmwubG93ICogbi5sLmhpZ2g7CisgIGIwLmxsID0gKGd1aW50NjQpIHYubC5oaWdoICogbi5sLmxvdzsKKworICAvKiBhZGQgdGhlIGhpZ2ggd29yZCBvZiBhMCB0byB0aGUgbG93IHdvcmRzIG9mIGExIGFuZCBiMCB1c2luZyBjMSBhcworICAgKiBzY3JhY2ggc3BhY2UgdG8gY2FwdHVyZSB0aGUgY2FycnkuICB0aGUgbG93IHdvcmQgb2YgdGhlIHJlc3VsdCBiZWNvbWVzCisgICAqIHRoZSBmaW5hbCBoaWdoIHdvcmQgb2YgYzAgKi8KKyAgYzEtPmxsID0gKGd1aW50NjQpIGMwLT5sLmhpZ2ggKyBhMS5sLmxvdyArIGIwLmwubG93OworICBjMC0+bC5oaWdoID0gYzEtPmwubG93OworCisgIC8qIGFkZCB0aGUgY2FycnkgZnJvbSB0aGUgcmVzdWx0IGFib3ZlIChmb3VuZCBpbiB0aGUgaGlnaCB3b3JkIG9mIGMxKSBhbmQKKyAgICogdGhlIGhpZ2ggd29yZHMgb2YgYTEgYW5kIGIwIHRvIGIxLCB0aGUgcmVzdWx0IGlzIGMxLiAqLworICBjMS0+bGwgPSAoZ3VpbnQ2NCkgdi5sLmhpZ2ggKiBuLmwuaGlnaCArIGMxLT5sLmhpZ2ggKyBhMS5sLmhpZ2ggKyBiMC5sLmhpZ2g7Cit9CisjZW5kaWYgLyogZGVmaW5lZCAoX194ODZfNjRfXykgKi8KKworI2lmIGRlZmluZWQgKF9feDg2XzY0X18pICYmIGRlZmluZWQgKF9fR05VQ19fKQorc3RhdGljIGlubGluZSBndWludDY0Citnc3RfdXRpbF9kaXYxMjhfNjQgKEdzdFVJbnQ2NCBjMSwgR3N0VUludDY0IGMwLCBndWludDY0IGRlbm9tKQoreworICBndWludDY0IHJlczsKKworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImRpdnEgJTMiOiI9YSIgKHJlcykKKyAgICAgIDoiZCIgKGMxLmxsKSwgImEiIChjMC5sbCksICJnIiAoZGVub20pCisgICAgICApOworCisgIHJldHVybiByZXM7Cit9CisjZWxzZQorLyogY291bnQgbGVhZGluZyB6ZXJvcyAqLworc3RhdGljIGlubGluZSBndWludAorZ3N0X3V0aWxfY2x6IChndWludDMyIHZhbCkKK3sKKyAgZ3VpbnQgczsKKworICBzID0gdmFsIHwgKHZhbCA+PiAxKTsKKyAgcyB8PSAocyA+PiAyKTsKKyAgcyB8PSAocyA+PiA0KTsKKyAgcyB8PSAocyA+PiA4KTsKKyAgcyA9IH4ocyB8IChzID4+IDE2KSk7CisgIHMgPSBzIC0gKChzID4+IDEpICYgMHg1NTU1NTU1NSk7CisgIHMgPSAocyAmIDB4MzMzMzMzMzMpICsgKChzID4+IDIpICYgMHgzMzMzMzMzMyk7CisgIHMgPSAocyArIChzID4+IDQpKSAmIDB4MGYwZjBmMGY7CisgIHMgKz0gKHMgPj4gOCk7CisgIHMgPSAocyArIChzID4+IDE2KSkgJiAweDNmOworCisgIHJldHVybiBzOworfQorCisvKiBiYXNlZCBvbiBIYWNrZXIncyBEZWxpZ2h0IHAxNTIgKi8KK3N0YXRpYyBpbmxpbmUgZ3VpbnQ2NAorZ3N0X3V0aWxfZGl2MTI4XzY0IChHc3RVSW50NjQgYzEsIEdzdFVJbnQ2NCBjMCwgZ3VpbnQ2NCBkZW5vbSkKK3sKKyAgR3N0VUludDY0IHExLCBxMCwgcmhhdDsKKyAgR3N0VUludDY0IHYsIGNtcDEsIGNtcDI7CisgIGd1aW50IHM7CisKKyAgdi5sbCA9IGRlbm9tOworCisgIC8qIGNvdW50IG51bWJlciBvZiBsZWFkaW5nIHplcm9lcywgd2Uga25vdyB0aGV5IG11c3QgYmUgaW4gdGhlIGhpZ2gKKyAgICogcGFydCBvZiBkZW5vbSBzaW5jZSBkZW5vbSA+IEdfTUFYVUlOVDMyLiAqLworICBzID0gZ3N0X3V0aWxfY2x6ICh2LmwuaGlnaCk7CisKKyAgaWYgKHMgPiAwKSB7CisgICAgLyogbm9ybWFsaXplIGRpdmlzb3IgYW5kIGRpdmlkZW5kICovCisgICAgdi5sbCA8PD0gczsKKyAgICBjMS5sbCA9IChjMS5sbCA8PCBzKSB8IChjMC5sLmhpZ2ggPj4gKDMyIC0gcykpOworICAgIGMwLmxsIDw8PSBzOworICB9CisKKyAgcTEubGwgPSBjMS5sbCAvIHYubC5oaWdoOworICByaGF0LmxsID0gYzEubGwgLSBxMS5sbCAqIHYubC5oaWdoOworCisgIGNtcDEubC5oaWdoID0gcmhhdC5sLmxvdzsKKyAgY21wMS5sLmxvdyA9IGMwLmwuaGlnaDsKKyAgY21wMi5sbCA9IHExLmxsICogdi5sLmxvdzsKKworICB3aGlsZSAocTEubC5oaWdoIHx8IGNtcDIubGwgPiBjbXAxLmxsKSB7CisgICAgcTEubGwtLTsKKyAgICByaGF0LmxsICs9IHYubC5oaWdoOworICAgIGlmIChyaGF0LmwuaGlnaCkKKyAgICAgIGJyZWFrOworICAgIGNtcDEubC5oaWdoID0gcmhhdC5sLmxvdzsKKyAgICBjbXAyLmxsIC09IHYubC5sb3c7CisgIH0KKyAgYzEubC5oaWdoID0gYzEubC5sb3c7CisgIGMxLmwubG93ID0gYzAubC5oaWdoOworICBjMS5sbCAtPSBxMS5sbCAqIHYubGw7CisgIHEwLmxsID0gYzEubGwgLyB2LmwuaGlnaDsKKyAgcmhhdC5sbCA9IGMxLmxsIC0gcTAubGwgKiB2LmwuaGlnaDsKKworICBjbXAxLmwuaGlnaCA9IHJoYXQubC5sb3c7CisgIGNtcDEubC5sb3cgPSBjMC5sLmxvdzsKKyAgY21wMi5sbCA9IHEwLmxsICogdi5sLmxvdzsKKworICB3aGlsZSAocTAubC5oaWdoIHx8IGNtcDIubGwgPiBjbXAxLmxsKSB7CisgICAgcTAubGwtLTsKKyAgICByaGF0LmxsICs9IHYubC5oaWdoOworICAgIGlmIChyaGF0LmwuaGlnaCkKKyAgICAgIGJyZWFrOworICAgIGNtcDEubC5oaWdoID0gcmhhdC5sLmxvdzsKKyAgICBjbXAyLmxsIC09IHYubC5sb3c7CisgIH0KKyAgcTAubC5oaWdoICs9IHExLmwubG93OworCisgIHJldHVybiBxMC5sbDsKK30KKyNlbmRpZiAvKiBkZWZpbmVkIChfX0dOVUNfXykgKi8KKworLyogVGhpcyBhbHdheXMgZ2l2ZXMgdGhlIGNvcnJlY3QgcmVzdWx0IGJlY2F1c2U6CisgKiBhKSB2YWwgPD0gR19NQVhVSU5UNjQtMQorICogYikgKGMwLGMxKSA8PSBHX01BWFVJTlQ2NCAqIChHX01BWFVJTlQ2NC0xKQorICogICAgb3IKKyAqICAgIChjMCxjMSkgPT0gR19NQVhVSU5UNjQgKiBHX01BWFVJTlQ2NCBhbmQgZGVub20gPCBHX01BWFVJTlQ2NAorICogICAgKG5vdGU6IG51bT09ZGVub20gY2FzZSBpcyBoYW5kbGVkIGJ5IHNob3J0IHBhdGgpCisgKiBUaGlzIG1lYW5zIHRoYXQgKGMwLGMxKSBlaXRoZXIgaGFzIGVub3VnaCBzcGFjZSBmb3IgdmFsCisgKiBvciB0aGF0IHRoZSBvdmVyYWxsIHJlc3VsdCB3aWxsIG92ZXJmbG93IGFueXdheS4KKyAqLworCisvKiBhZGQgY29ycmVjdGlvbiB3aXRoIGNhcnJ5ICovCisjZGVmaW5lIENPUlJFQ1QoYzAsYzEsdmFsKSAgICAgICAgICAgICAgICAgICAgXAorICBpZiAodmFsKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoR19NQVhVSU5UNjQgLSBjMC5sbCA8IHZhbCkgeyAgICAgICAgICBcCisgICAgICBpZiAoR19VTkxJS0VMWSAoYzEubGwgPT0gR19NQVhVSU5UNjQpKSAgXAorICAgICAgICAvKiBvdmVyZmxvdyAqLyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0dXJuIEdfTUFYVUlOVDY0OyAgICAgICAgICAgICAgICAgICBcCisgICAgICBjMS5sbCsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjMC5sbCArPSB2YWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0KKworc3RhdGljIGd1aW50NjQKK2dzdF91dGlsX3VpbnQ2NF9zY2FsZV91aW50NjRfdW5jaGVja2VkIChndWludDY0IHZhbCwgZ3VpbnQ2NCBudW0sCisgICAgZ3VpbnQ2NCBkZW5vbSwgZ3VpbnQ2NCBjb3JyZWN0KQoreworICBHc3RVSW50NjQgYzEsIGMwOworCisgIC8qIGNvbXB1dGUgMTI4LWJpdCBudW1lcmF0b3IgcHJvZHVjdCAqLworICBnc3RfdXRpbF91aW50NjRfbXVsX3VpbnQ2NCAoJmMxLCAmYzAsIHZhbCwgbnVtKTsKKworICAvKiBwZXJmb3JtIHJvdW5kaW5nIGNvcnJlY3Rpb24gKi8KKyAgQ09SUkVDVCAoYzAsIGMxLCBjb3JyZWN0KTsKKworICAvKiBoaWdoIHdvcmQgYXMgYmlnIGFzIG9yIGJpZ2dlciB0aGFuIGRlbm9tIC0tPiBvdmVyZmxvdyAqLworICBpZiAoR19VTkxJS0VMWSAoYzEubGwgPj0gZGVub20pKQorICAgIHJldHVybiBHX01BWFVJTlQ2NDsKKworICAvKiBjb21wdXRlIHF1b3RpZW50LCBmaXRzIGluIDY0IGJpdHMgKi8KKyAgcmV0dXJuIGdzdF91dGlsX2RpdjEyOF82NCAoYzEsIGMwLCBkZW5vbSk7Cit9CisjZWxzZQorCisjZGVmaW5lIEdTVF9NQVhVSU5UMTI4ICgoX191aW50MTI4X3QpIC0xKQorc3RhdGljIGd1aW50NjQKK2dzdF91dGlsX3VpbnQ2NF9zY2FsZV91aW50NjRfdW5jaGVja2VkIChndWludDY0IHZhbCwgZ3VpbnQ2NCBudW0sCisgICAgZ3VpbnQ2NCBkZW5vbSwgZ3VpbnQ2NCBjb3JyZWN0KQoreworICBfX3VpbnQxMjhfdCB0bXA7CisKKyAgLyogQ2FsY3VsYXRlIHZhbCAqIG51bSAqLworICB0bXAgPSAoKF9fdWludDEyOF90KSB2YWwpICogKChfX3VpbnQxMjhfdCkgbnVtKTsKKworICAvKiBvdmVyZmxvdyBjaGVja3MgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKEdTVF9NQVhVSU5UMTI4IC0gY29ycmVjdCA8IHRtcCkpCisgICAgcmV0dXJuIEdfTUFYVUlOVDY0OworCisgIC8qIHBlcmZvcm0gcm91bmRpbmcgY29ycmVjdGlvbiAqLworICB0bXAgKz0gY29ycmVjdDsKKworICAvKiBEaXZpZGUgYnkgZGVub20gKi8KKyAgdG1wIC89IGRlbm9tOworCisgIC8qIGlmIGxhcmdlciB0aGFuIEdfTUFYVUlOVDY0IC0tPiBvdmVyZmxvdyAqLworICBpZiAoR19VTkxJS0VMWSAodG1wID4gR19NQVhVSU5UNjQpKQorICAgIHJldHVybiBHX01BWFVJTlQ2NDsKKworICAvKiBjb21wdXRlIHF1b3RpZW50LCBmaXRzIGluIDY0IGJpdHMgKi8KKyAgcmV0dXJuIChndWludDY0KSB0bXA7Cit9CisKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgKF9feDg2XzY0X18pICYmICFkZWZpbmVkIChIQVZFX1VJTlQxMjhfVCkKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ3N0X3V0aWxfdWludDY0X211bF91aW50MzIgKEdzdFVJbnQ2NCAqIGMxLCBHc3RVSW50NjQgKiBjMCwgZ3VpbnQ2NCBhcmcxLAorICAgIGd1aW50MzIgYXJnMikKK3sKKyAgR3N0VUludDY0IGE7CisKKyAgYS5sbCA9IGFyZzE7CisKKyAgYzAtPmxsID0gKGd1aW50NjQpIGEubC5sb3cgKiBhcmcyOworICBjMS0+bGwgPSAoZ3VpbnQ2NCkgYS5sLmhpZ2ggKiBhcmcyICsgYzAtPmwuaGlnaDsKKyAgYzAtPmwuaGlnaCA9IDA7Cit9CisKKy8qIGRpdmlkZSBhIDk2LWJpdCB1bnNpZ25lZCBpbnQgYnkgYSAzMi1iaXQgdW5zaWduZWQgaW50IHdoZW4gd2Uga25vdyB0aGUKKyAqIHF1b3RpZW50IGZpdHMgaW50byA2NCBiaXRzLiAgdGhlIGhpZ2ggNjQgYml0cyBhbmQgbG93IDMyIGJpdHMgb2YgdGhlCisgKiBudW1lcmF0b3IgYXJlIGV4cGVjdGVkIGluIGMxIGFuZCBjMCByZXNwZWN0aXZlbHkuICovCitzdGF0aWMgaW5saW5lIGd1aW50NjQKK2dzdF91dGlsX2Rpdjk2XzMyIChndWludDY0IGMxLCBndWludDY0IGMwLCBndWludDMyIGRlbm9tKQoreworICBjMCArPSAoYzEgJSBkZW5vbSkgPDwgMzI7CisgIHJldHVybiAoKGMxIC8gZGVub20pIDw8IDMyKSArIChjMCAvIGRlbm9tKTsKK30KKworc3RhdGljIGlubGluZSBndWludDY0Citnc3RfdXRpbF91aW50NjRfc2NhbGVfdWludDMyX3VuY2hlY2tlZCAoZ3VpbnQ2NCB2YWwsIGd1aW50MzIgbnVtLAorICAgIGd1aW50MzIgZGVub20sIGd1aW50MzIgY29ycmVjdCkKK3sKKyAgR3N0VUludDY0IGMxLCBjMDsKKworICAvKiBjb21wdXRlIDk2LWJpdCBudW1lcmF0b3IgcHJvZHVjdCAqLworICBnc3RfdXRpbF91aW50NjRfbXVsX3VpbnQzMiAoJmMxLCAmYzAsIHZhbCwgbnVtKTsKKworICAvKiBjb25kaXRpb24gbnVtZXJhdG9yIGJhc2VkIG9uIHJvdW5kaW5nIG1vZGUgKi8KKyAgQ09SUkVDVCAoYzAsIGMxLCBjb3JyZWN0KTsKKworICAvKiBoaWdoIDMyIGJpdHMgYXMgYmlnIGFzIG9yIGJpZ2dlciB0aGFuIGRlbm9tIC0tPiBvdmVyZmxvdyAqLworICBpZiAoR19VTkxJS0VMWSAoYzEubC5oaWdoID49IGRlbm9tKSkKKyAgICByZXR1cm4gR19NQVhVSU5UNjQ7CisKKyAgLyogY29tcHV0ZSBxdW90aWVudCwgZml0cyBpbiA2NCBiaXRzICovCisgIHJldHVybiBnc3RfdXRpbF9kaXY5Nl8zMiAoYzEubGwsIGMwLmxsLCBkZW5vbSk7Cit9CisjZW5kaWYKKworLyogdGhlIGd1dHMgb2YgdGhlIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSgpIHZhcmlhbnRzICovCitzdGF0aWMgZ3VpbnQ2NAorX2dzdF91dGlsX3VpbnQ2NF9zY2FsZSAoZ3VpbnQ2NCB2YWwsIGd1aW50NjQgbnVtLCBndWludDY0IGRlbm9tLAorICAgIGd1aW50NjQgY29ycmVjdCkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRlbm9tICE9IDAsIEdfTUFYVUlOVDY0KTsKKworICBpZiAoR19VTkxJS0VMWSAobnVtID09IDApKQorICAgIHJldHVybiAwOworCisgIGlmIChHX1VOTElLRUxZIChudW0gPT0gZGVub20pKQorICAgIHJldHVybiB2YWw7CisKKyAgLyogb24gNjRiaXRzIHdlIGFsd2F5cyB1c2UgYSBmdWxsIDEyOGJpdHMgbXVsdGlwbHkvZGl2aXNpb24gKi8KKyNpZiAhZGVmaW5lZCAoX194ODZfNjRfXykgJiYgIWRlZmluZWQgKEhBVkVfVUlOVDEyOF9UKQorICAvKiBkZW5vbSBpcyBsb3cgLS0+IHRyeSB0byB1c2UgOTYgYml0IG11bGRpdiAqLworICBpZiAoR19MSUtFTFkgKGRlbm9tIDw9IEdfTUFYVUlOVDMyKSkgeworICAgIC8qIG51bSBpcyBsb3cgLS0+IHVzZSA5NiBiaXQgbXVsZGl2ICovCisgICAgaWYgKEdfTElLRUxZIChudW0gPD0gR19NQVhVSU5UMzIpKQorICAgICAgcmV0dXJuIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV91aW50MzJfdW5jaGVja2VkICh2YWwsIChndWludDMyKSBudW0sCisgICAgICAgICAgKGd1aW50MzIpIGRlbm9tLCBjb3JyZWN0KTsKKworICAgIC8qIG51bSBpcyBoaWdoIGJ1dCB2YWwgaXMgbG93IC0tPiBzd2FwIGFuZCB1c2UgOTYtYml0IG11bGRpdiAqLworICAgIGlmIChHX0xJS0VMWSAodmFsIDw9IEdfTUFYVUlOVDMyKSkKKyAgICAgIHJldHVybiBnc3RfdXRpbF91aW50NjRfc2NhbGVfdWludDMyX3VuY2hlY2tlZCAobnVtLCAoZ3VpbnQzMikgdmFsLAorICAgICAgICAgIChndWludDMyKSBkZW5vbSwgY29ycmVjdCk7CisgIH0KKyNlbmRpZiAvKiAhZGVmaW5lZCAoX194ODZfNjRfXykgJiYgIWRlZmluZWQgKEhBVkVfVUlOVDEyOF9UKSAqLworCisgIC8qIHZhbCBpcyBoaWdoIGFuZCBudW0gaXMgaGlnaCAtLT4gdXNlIDEyOC1iaXQgbXVsZGl2ICovCisgIHJldHVybiBnc3RfdXRpbF91aW50NjRfc2NhbGVfdWludDY0X3VuY2hlY2tlZCAodmFsLCBudW0sIGRlbm9tLCBjb3JyZWN0KTsKK30KKworLyoqCisgKiBnc3RfdXRpbF91aW50NjRfc2NhbGU6CisgKiBAdmFsOiB0aGUgbnVtYmVyIHRvIHNjYWxlCisgKiBAbnVtOiB0aGUgbnVtZXJhdG9yIG9mIHRoZSBzY2FsZSByYXRpbworICogQGRlbm9tOiB0aGUgZGVub21pbmF0b3Igb2YgdGhlIHNjYWxlIHJhdGlvCisgKgorICogU2NhbGUgQHZhbCBieSB0aGUgcmF0aW9uYWwgbnVtYmVyIEBudW0gLyBAZGVub20sIGF2b2lkaW5nIG92ZXJmbG93cyBhbmQKKyAqIHVuZGVyZmxvd3MgYW5kIHdpdGhvdXQgbG9zcyBvZiBwcmVjaXNpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBjYW4gcG90ZW50aWFsbHkgYmUgdmVyeSBzbG93IGlmIHZhbCBhbmQgbnVtIGFyZSBib3RoCisgKiBncmVhdGVyIHRoYW4gR19NQVhVSU5UMzIuCisgKgorICogUmV0dXJuczogQHZhbCAqIEBudW0gLyBAZGVub20uICBJbiB0aGUgY2FzZSBvZiBhbiBvdmVyZmxvdywgdGhpcworICogZnVuY3Rpb24gcmV0dXJucyBHX01BWFVJTlQ2NC4gIElmIHRoZSByZXN1bHQgaXMgbm90IGV4YWN0bHkKKyAqIHJlcHJlc2VudGFibGUgYXMgYW4gaW50ZWdlciBpdCBpcyB0cnVuY2F0ZWQuICBTZWUgYWxzbworICogZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kKCksIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlsKCksCisgKiBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KCksIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQoKSwKKyAqIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbCgpLgorICovCitndWludDY0Citnc3RfdXRpbF91aW50NjRfc2NhbGUgKGd1aW50NjQgdmFsLCBndWludDY0IG51bSwgZ3VpbnQ2NCBkZW5vbSkKK3sKKyAgcmV0dXJuIF9nc3RfdXRpbF91aW50NjRfc2NhbGUgKHZhbCwgbnVtLCBkZW5vbSwgMCk7Cit9CisKKy8qKgorICogZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kOgorICogQHZhbDogdGhlIG51bWJlciB0byBzY2FsZQorICogQG51bTogdGhlIG51bWVyYXRvciBvZiB0aGUgc2NhbGUgcmF0aW8KKyAqIEBkZW5vbTogdGhlIGRlbm9taW5hdG9yIG9mIHRoZSBzY2FsZSByYXRpbworICoKKyAqIFNjYWxlIEB2YWwgYnkgdGhlIHJhdGlvbmFsIG51bWJlciBAbnVtIC8gQGRlbm9tLCBhdm9pZGluZyBvdmVyZmxvd3MgYW5kCisgKiB1bmRlcmZsb3dzIGFuZCB3aXRob3V0IGxvc3Mgb2YgcHJlY2lzaW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIHBvdGVudGlhbGx5IGJlIHZlcnkgc2xvdyBpZiB2YWwgYW5kIG51bSBhcmUgYm90aAorICogZ3JlYXRlciB0aGFuIEdfTUFYVUlOVDMyLgorICoKKyAqIFJldHVybnM6IEB2YWwgKiBAbnVtIC8gQGRlbm9tLiAgSW4gdGhlIGNhc2Ugb2YgYW4gb3ZlcmZsb3csIHRoaXMKKyAqIGZ1bmN0aW9uIHJldHVybnMgR19NQVhVSU5UNjQuICBJZiB0aGUgcmVzdWx0IGlzIG5vdCBleGFjdGx5CisgKiByZXByZXNlbnRhYmxlIGFzIGFuIGludGVnZXIsIGl0IGlzIHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlcgorICogKGhhbGYtd2F5IGNhc2VzIGFyZSByb3VuZGVkIHVwKS4gIFNlZSBhbHNvIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSgpLAorICogZ3N0X3V0aWxfdWludDY0X3NjYWxlX2NlaWwoKSwgZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCgpLAorICogZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCgpLCBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWwoKS4KKyAqLworZ3VpbnQ2NAorZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kIChndWludDY0IHZhbCwgZ3VpbnQ2NCBudW0sIGd1aW50NjQgZGVub20pCit7CisgIHJldHVybiBfZ3N0X3V0aWxfdWludDY0X3NjYWxlICh2YWwsIG51bSwgZGVub20sIGRlbm9tID4+IDEpOworfQorCisvKioKKyAqIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlsOgorICogQHZhbDogdGhlIG51bWJlciB0byBzY2FsZQorICogQG51bTogdGhlIG51bWVyYXRvciBvZiB0aGUgc2NhbGUgcmF0aW8KKyAqIEBkZW5vbTogdGhlIGRlbm9taW5hdG9yIG9mIHRoZSBzY2FsZSByYXRpbworICoKKyAqIFNjYWxlIEB2YWwgYnkgdGhlIHJhdGlvbmFsIG51bWJlciBAbnVtIC8gQGRlbm9tLCBhdm9pZGluZyBvdmVyZmxvd3MgYW5kCisgKiB1bmRlcmZsb3dzIGFuZCB3aXRob3V0IGxvc3Mgb2YgcHJlY2lzaW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIHBvdGVudGlhbGx5IGJlIHZlcnkgc2xvdyBpZiB2YWwgYW5kIG51bSBhcmUgYm90aAorICogZ3JlYXRlciB0aGFuIEdfTUFYVUlOVDMyLgorICoKKyAqIFJldHVybnM6IEB2YWwgKiBAbnVtIC8gQGRlbm9tLiAgSW4gdGhlIGNhc2Ugb2YgYW4gb3ZlcmZsb3csIHRoaXMKKyAqIGZ1bmN0aW9uIHJldHVybnMgR19NQVhVSU5UNjQuICBJZiB0aGUgcmVzdWx0IGlzIG5vdCBleGFjdGx5CisgKiByZXByZXNlbnRhYmxlIGFzIGFuIGludGVnZXIsIGl0IGlzIHJvdW5kZWQgdXAuICBTZWUgYWxzbworICogZ3N0X3V0aWxfdWludDY0X3NjYWxlKCksIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCgpLAorICogZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCgpLCBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kKCksCisgKiBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWwoKS4KKyAqLworZ3VpbnQ2NAorZ3N0X3V0aWxfdWludDY0X3NjYWxlX2NlaWwgKGd1aW50NjQgdmFsLCBndWludDY0IG51bSwgZ3VpbnQ2NCBkZW5vbSkKK3sKKyAgcmV0dXJuIF9nc3RfdXRpbF91aW50NjRfc2NhbGUgKHZhbCwgbnVtLCBkZW5vbSwgZGVub20gLSAxKTsKK30KKworLyogdGhlIGd1dHMgb2YgdGhlIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQoKSB2YXJpYW50cyAqLworc3RhdGljIGd1aW50NjQKK19nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChndWludDY0IHZhbCwgZ2ludCBudW0sIGdpbnQgZGVub20sIGdpbnQgY29ycmVjdCkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRlbm9tID4gMCwgR19NQVhVSU5UNjQpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAobnVtID49IDAsIEdfTUFYVUlOVDY0KTsKKworICBpZiAoR19VTkxJS0VMWSAobnVtID09IDApKQorICAgIHJldHVybiAwOworCisgIGlmIChHX1VOTElLRUxZIChudW0gPT0gZGVub20pKQorICAgIHJldHVybiB2YWw7CisKKyAgaWYgKHZhbCA8PSBHX01BWFVJTlQzMikgeworICAgIC8qIHNpbXBsZSBjYXNlLiAgbnVtIGFuZCBkZW5vbSBhcmUgbm90IG5lZ2F0aXZlIHNvIGNhc3RzIGFyZSBPSy4gIHdoZW4KKyAgICAgKiBub3QgdHJ1bmNhdGluZywgdGhlIGFkZGl0aW9ucyB0byB0aGUgbnVtZXJhdG9yIGNhbm5vdCBvdmVyZmxvdworICAgICAqIGJlY2F1c2UgdmFsKm51bSA8PSBHX01BWFVJTlQzMiAqIEdfTUFYSU5UMzIgPCBHX01BWFVJTlQ2NCAtCisgICAgICogR19NQVhJTlQzMiwgc28gdGhlcmUncyByb29tIHRvIGFkZCBhbm90aGVyIGdpbnQzMi4gKi8KKyAgICB2YWwgKj0gKGd1aW50NjQpIG51bTsKKyAgICAvKiBhZGQgcm91bmRpbmcgY29ycmVjdGlvbiAqLworICAgIHZhbCArPSBjb3JyZWN0OworCisgICAgcmV0dXJuIHZhbCAvIChndWludDY0KSBkZW5vbTsKKyAgfQorI2lmICFkZWZpbmVkIChfX3g4Nl82NF9fKSAmJiAhZGVmaW5lZCAoSEFWRV9VSU5UMTI4X1QpCisgIC8qIG51bSBhbmQgZGVub20gYXJlIG5vdCBuZWdhdGl2ZSBzbyBjYXN0cyBhcmUgT0sgKi8KKyAgcmV0dXJuIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV91aW50MzJfdW5jaGVja2VkICh2YWwsIChndWludDMyKSBudW0sCisgICAgICAoZ3VpbnQzMikgZGVub20sIChndWludDMyKSBjb3JyZWN0KTsKKyNlbHNlCisgIC8qIGFsd2F5cyB1c2UgZnVsbCAxMjhiaXRzIHNjYWxlICovCisgIHJldHVybiBnc3RfdXRpbF91aW50NjRfc2NhbGVfdWludDY0X3VuY2hlY2tlZCAodmFsLCBudW0sIGRlbm9tLCBjb3JyZWN0KTsKKyNlbmRpZgorfQorCisvKioKKyAqIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQ6CisgKiBAdmFsOiBndWludDY0IChzdWNoIGFzIGEgI0dzdENsb2NrVGltZSkgdG8gc2NhbGUuCisgKiBAbnVtOiBudW1lcmF0b3Igb2YgdGhlIHNjYWxlIGZhY3Rvci4KKyAqIEBkZW5vbTogZGVub21pbmF0b3Igb2YgdGhlIHNjYWxlIGZhY3Rvci4KKyAqCisgKiBTY2FsZSBAdmFsIGJ5IHRoZSByYXRpb25hbCBudW1iZXIgQG51bSAvIEBkZW5vbSwgYXZvaWRpbmcgb3ZlcmZsb3dzIGFuZAorICogdW5kZXJmbG93cyBhbmQgd2l0aG91dCBsb3NzIG9mIHByZWNpc2lvbi4gIEBudW0gbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kCisgKiBAZGVub20gbXVzdCBiZSBwb3NpdGl2ZS4KKyAqCisgKiBSZXR1cm5zOiBAdmFsICogQG51bSAvIEBkZW5vbS4gIEluIHRoZSBjYXNlIG9mIGFuIG92ZXJmbG93LCB0aGlzCisgKiBmdW5jdGlvbiByZXR1cm5zIEdfTUFYVUlOVDY0LiAgSWYgdGhlIHJlc3VsdCBpcyBub3QgZXhhY3RseQorICogcmVwcmVzZW50YWJsZSBhcyBhbiBpbnRlZ2VyLCBpdCBpcyB0cnVuY2F0ZWQuICBTZWUgYWxzbworICogZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCgpLCBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWwoKSwKKyAqIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSgpLCBnc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQoKSwKKyAqIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlsKCkuCisgKi8KK2d1aW50NjQKK2dzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKGd1aW50NjQgdmFsLCBnaW50IG51bSwgZ2ludCBkZW5vbSkKK3sKKyAgcmV0dXJuIF9nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50ICh2YWwsIG51bSwgZGVub20sIDApOworfQorCisvKioKKyAqIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQ6CisgKiBAdmFsOiBndWludDY0IChzdWNoIGFzIGEgI0dzdENsb2NrVGltZSkgdG8gc2NhbGUuCisgKiBAbnVtOiBudW1lcmF0b3Igb2YgdGhlIHNjYWxlIGZhY3Rvci4KKyAqIEBkZW5vbTogZGVub21pbmF0b3Igb2YgdGhlIHNjYWxlIGZhY3Rvci4KKyAqCisgKiBTY2FsZSBAdmFsIGJ5IHRoZSByYXRpb25hbCBudW1iZXIgQG51bSAvIEBkZW5vbSwgYXZvaWRpbmcgb3ZlcmZsb3dzIGFuZAorICogdW5kZXJmbG93cyBhbmQgd2l0aG91dCBsb3NzIG9mIHByZWNpc2lvbi4gIEBudW0gbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kCisgKiBAZGVub20gbXVzdCBiZSBwb3NpdGl2ZS4KKyAqCisgKiBSZXR1cm5zOiBAdmFsICogQG51bSAvIEBkZW5vbS4gIEluIHRoZSBjYXNlIG9mIGFuIG92ZXJmbG93LCB0aGlzCisgKiBmdW5jdGlvbiByZXR1cm5zIEdfTUFYVUlOVDY0LiAgSWYgdGhlIHJlc3VsdCBpcyBub3QgZXhhY3RseQorICogcmVwcmVzZW50YWJsZSBhcyBhbiBpbnRlZ2VyLCBpdCBpcyByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IGludGVnZXIKKyAqIChoYWxmLXdheSBjYXNlcyBhcmUgcm91bmRlZCB1cCkuICBTZWUgYWxzbyBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KCksCisgKiBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWwoKSwgZ3N0X3V0aWxfdWludDY0X3NjYWxlKCksCisgKiBnc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQoKSwgZ3N0X3V0aWxfdWludDY0X3NjYWxlX2NlaWwoKS4KKyAqLworZ3VpbnQ2NAorZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCAoZ3VpbnQ2NCB2YWwsIGdpbnQgbnVtLCBnaW50IGRlbm9tKQoreworICAvKiB3ZSBjYW4gdXNlIGEgc2hpZnQgdG8gZGl2aWRlIGJ5IDIgYmVjYXVzZSBkZW5vbSBpcyByZXF1aXJlZCB0byBiZQorICAgKiBwb3NpdGl2ZS4gKi8KKyAgcmV0dXJuIF9nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50ICh2YWwsIG51bSwgZGVub20sIGRlbm9tID4+IDEpOworfQorCisvKioKKyAqIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbDoKKyAqIEB2YWw6IGd1aW50NjQgKHN1Y2ggYXMgYSAjR3N0Q2xvY2tUaW1lKSB0byBzY2FsZS4KKyAqIEBudW06IG51bWVyYXRvciBvZiB0aGUgc2NhbGUgZmFjdG9yLgorICogQGRlbm9tOiBkZW5vbWluYXRvciBvZiB0aGUgc2NhbGUgZmFjdG9yLgorICoKKyAqIFNjYWxlIEB2YWwgYnkgdGhlIHJhdGlvbmFsIG51bWJlciBAbnVtIC8gQGRlbm9tLCBhdm9pZGluZyBvdmVyZmxvd3MgYW5kCisgKiB1bmRlcmZsb3dzIGFuZCB3aXRob3V0IGxvc3Mgb2YgcHJlY2lzaW9uLiAgQG51bSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBhbmQKKyAqIEBkZW5vbSBtdXN0IGJlIHBvc2l0aXZlLgorICoKKyAqIFJldHVybnM6IEB2YWwgKiBAbnVtIC8gQGRlbm9tLiAgSW4gdGhlIGNhc2Ugb2YgYW4gb3ZlcmZsb3csIHRoaXMKKyAqIGZ1bmN0aW9uIHJldHVybnMgR19NQVhVSU5UNjQuICBJZiB0aGUgcmVzdWx0IGlzIG5vdCBleGFjdGx5CisgKiByZXByZXNlbnRhYmxlIGFzIGFuIGludGVnZXIsIGl0IGlzIHJvdW5kZWQgdXAuICBTZWUgYWxzbworICogZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCgpLCBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kKCksCisgKiBnc3RfdXRpbF91aW50NjRfc2NhbGUoKSwgZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kKCksCisgKiBnc3RfdXRpbF91aW50NjRfc2NhbGVfY2VpbCgpLgorICovCitndWludDY0Citnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWwgKGd1aW50NjQgdmFsLCBnaW50IG51bSwgZ2ludCBkZW5vbSkKK3sKKyAgcmV0dXJuIF9nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50ICh2YWwsIG51bSwgZGVub20sIGRlbm9tIC0gMSk7Cit9CisKKy8qKgorICogZ3N0X3V0aWxfc2VxbnVtX25leHQ6CisgKgorICogUmV0dXJuIGEgY29uc3RhbnRseSBpbmNyZW1lbnRpbmcgc2VxdWVuY2UgbnVtYmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbnRlcm5hbGx5IHRvIEdTdHJlYW1lciB0byBiZSBhYmxlIHRvIGRldGVybWluZSB3aGljaAorICogZXZlbnRzIGFuZCBtZXNzYWdlcyBhcmUgInRoZSBzYW1lIi4gRm9yIGV4YW1wbGUsIGVsZW1lbnRzIG1heSBzZXQgdGhlIHNlcW51bQorICogb24gYSBzZWdtZW50LWRvbmUgbWVzc2FnZSB0byBiZSB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBsYXN0IHNlZWsgZXZlbnQsIHRvCisgKiBpbmRpY2F0ZSB0aGF0IGV2ZW50IGFuZCB0aGUgbWVzc2FnZSBjb3JyZXNwb25kIHRvIHRoZSBzYW1lIHNlZ21lbnQuCisgKgorICogUmV0dXJuczogQSBjb25zdGFudGx5IGluY3JlbWVudGluZyAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciwgd2hpY2ggbWlnaHQKKyAqIG92ZXJmbG93IGJhY2sgdG8gMCBhdCBzb21lIHBvaW50LiBVc2UgZ3N0X3V0aWxfc2VxbnVtX2NvbXBhcmUoKSB0byBtYWtlIHN1cmUKKyAqIHlvdSBoYW5kbGUgd3JhcGFyb3VuZCBjb3JyZWN0bHkuCisgKgorICogU2luY2U6IDAuMTAuMjIKKyAqLworZ3VpbnQzMgorZ3N0X3V0aWxfc2VxbnVtX25leHQgKHZvaWQpCit7CisgIHN0YXRpYyBnaW50IGNvdW50ZXIgPSAwOworICByZXR1cm4gR19BVE9NSUNfSU5UX0FERCAoJmNvdW50ZXIsIDEpOworfQorCisvKioKKyAqIGdzdF91dGlsX3NlcW51bV9jb21wYXJlOgorICogQHMxOiBBIHNlcXVlbmNlIG51bWJlci4KKyAqIEBzMjogQW5vdGhlciBzZXF1ZW5jZSBudW1iZXIuCisgKgorICogQ29tcGFyZSB0d28gc2VxdWVuY2UgbnVtYmVycywgaGFuZGxpbmcgd3JhcGFyb3VuZC4KKyAqCisgKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBqdXN0IHJldHVybnMgKGdpbnQzMikoQHMxIC0gQHMyKS4KKyAqCisgKiBSZXR1cm5zOiBBIG5lZ2F0aXZlIG51bWJlciBpZiBAczEgaXMgYmVmb3JlIEBzMiwgMCBpZiB0aGV5IGFyZSBlcXVhbCwgb3IgYQorICogcG9zaXRpdmUgbnVtYmVyIGlmIEBzMSBpcyBhZnRlciBAczIuCisgKgorICogU2luY2U6IDAuMTAuMjIKKyAqLworZ2ludDMyCitnc3RfdXRpbF9zZXFudW1fY29tcGFyZSAoZ3VpbnQzMiBzMSwgZ3VpbnQzMiBzMikKK3sKKyAgcmV0dXJuIChnaW50MzIpIChzMSAtIHMyKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAgVGhlIGZvbGxvd2luZyBjb2RlIHdpbGwgYmUgbW92ZWQgb3V0IG9mIHRoZSBtYWluCisgKiBnc3RyZWFtZXIgbGlicmFyeSBzb21lZGF5LgorICovCisKKyNpbmNsdWRlICJnc3RwYWQuaCIKKworc3RhdGljIHZvaWQKK3N0cmluZ19hcHBlbmRfaW5kZW50IChHU3RyaW5nICogc3RyLCBnaW50IGNvdW50KQoreworICBnaW50IHh4OworCisgIGZvciAoeHggPSAwOyB4eCA8IGNvdW50OyB4eCsrKQorICAgIGdfc3RyaW5nX2FwcGVuZF9jIChzdHIsICcgJyk7Cit9CisKKy8qKgorICogZ3N0X3ByaW50X3BhZF9jYXBzOgorICogQGJ1ZjogdGhlIGJ1ZmZlciB0byBwcmludCB0aGUgY2FwcyBpbgorICogQGluZGVudDogaW5pdGlhbCBpbmRlbnRhdGlvbgorICogQHBhZDogKHRyYW5zZmVyIG5vbmUpOiB0aGUgcGFkIHRvIHByaW50IHRoZSBjYXBzIGZyb20KKyAqCisgKiBXcml0ZSB0aGUgcGFkIGNhcGFiaWxpdGllcyBpbiBhIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCBpbnRvCisgKiB0aGUgZ2l2ZW4gR1N0cmluZy4KKyAqLwordm9pZAorZ3N0X3ByaW50X3BhZF9jYXBzIChHU3RyaW5nICogYnVmLCBnaW50IGluZGVudCwgR3N0UGFkICogcGFkKQoreworICBHc3RDYXBzICpjYXBzOworCisgIGNhcHMgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKHBhZCk7CisKKyAgaWYgKCFjYXBzKSB7CisgICAgc3RyaW5nX2FwcGVuZF9pbmRlbnQgKGJ1ZiwgaW5kZW50KTsKKyAgICBnX3N0cmluZ19wcmludGYgKGJ1ZiwgIiVzOiVzIGhhcyBubyBjYXBhYmlsaXRpZXMiLAorICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOworICB9IGVsc2UgeworICAgIGNoYXIgKnM7CisKKyAgICBzID0gZ3N0X2NhcHNfdG9fc3RyaW5nIChjYXBzKTsKKyAgICBnX3N0cmluZ19hcHBlbmQgKGJ1Ziwgcyk7CisgICAgZ19mcmVlIChzKTsKKworICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKKyAgfQorfQorCisvKioKKyAqIGdzdF9wcmludF9lbGVtZW50X2FyZ3M6CisgKiBAYnVmOiB0aGUgYnVmZmVyIHRvIHByaW50IHRoZSBhcmdzIGluCisgKiBAaW5kZW50OiBpbml0aWFsIGluZGVudGF0aW9uCisgKiBAZWxlbWVudDogKHRyYW5zZmVyIG5vbmUpOiB0aGUgZWxlbWVudCB0byBwcmludCB0aGUgYXJncyBvZgorICoKKyAqIFByaW50IHRoZSBlbGVtZW50IGFyZ3VtZW50IGluIGEgaHVtYW4gcmVhZGFibGUgZm9ybWF0IGluIHRoZSBnaXZlbgorICogR1N0cmluZy4KKyAqLwordm9pZAorZ3N0X3ByaW50X2VsZW1lbnRfYXJncyAoR1N0cmluZyAqIGJ1ZiwgZ2ludCBpbmRlbnQsIEdzdEVsZW1lbnQgKiBlbGVtZW50KQoreworICBndWludCB3aWR0aDsKKyAgR1ZhbHVlIHZhbHVlID0geyAwLCB9OyAgICAgICAgLyogdGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGF0IHZhbHVlLnR5cGUgPSAwICovCisgIGdjaGFyICpzdHIgPSBOVUxMOworICBHUGFyYW1TcGVjICpzcGVjLCAqKnNwZWNzLCAqKndhbGs7CisKKyAgc3BlY3MgPSBnX29iamVjdF9jbGFzc19saXN0X3Byb3BlcnRpZXMgKEdfT0JKRUNUX0dFVF9DTEFTUyAoZWxlbWVudCksIE5VTEwpOworCisgIHdpZHRoID0gMDsKKyAgZm9yICh3YWxrID0gc3BlY3M7ICp3YWxrOyB3YWxrKyspIHsKKyAgICBzcGVjID0gKndhbGs7CisgICAgaWYgKHdpZHRoIDwgc3RybGVuIChzcGVjLT5uYW1lKSkKKyAgICAgIHdpZHRoID0gc3RybGVuIChzcGVjLT5uYW1lKTsKKyAgfQorCisgIGZvciAod2FsayA9IHNwZWNzOyAqd2Fsazsgd2FsaysrKSB7CisgICAgc3BlYyA9ICp3YWxrOworCisgICAgaWYgKHNwZWMtPmZsYWdzICYgR19QQVJBTV9SRUFEQUJMRSkgeworICAgICAgZ192YWx1ZV9pbml0ICgmdmFsdWUsIHNwZWMtPnZhbHVlX3R5cGUpOworICAgICAgZ19vYmplY3RfZ2V0X3Byb3BlcnR5IChHX09CSkVDVCAoZWxlbWVudCksIHNwZWMtPm5hbWUsICZ2YWx1ZSk7CisgICAgICBzdHIgPSBnX3N0cmR1cF92YWx1ZV9jb250ZW50cyAoJnZhbHVlKTsKKyAgICAgIGdfdmFsdWVfdW5zZXQgKCZ2YWx1ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHN0ciA9IGdfc3RyZHVwICgiUGFyYW1ldGVyIG5vdCByZWFkYWJsZS4iKTsKKyAgICB9CisKKyAgICBzdHJpbmdfYXBwZW5kX2luZGVudCAoYnVmLCBpbmRlbnQpOworICAgIGdfc3RyaW5nX2FwcGVuZCAoYnVmLCBzcGVjLT5uYW1lKTsKKyAgICBzdHJpbmdfYXBwZW5kX2luZGVudCAoYnVmLCAyICsgd2lkdGggLSBzdHJsZW4gKHNwZWMtPm5hbWUpKTsKKyAgICBnX3N0cmluZ19hcHBlbmQgKGJ1Ziwgc3RyKTsKKyAgICBnX3N0cmluZ19hcHBlbmRfYyAoYnVmLCAnXG4nKTsKKworICAgIGdfZnJlZSAoc3RyKTsKKyAgfQorCisgIGdfZnJlZSAoc3BlY3MpOworfQorCisvKioKKyAqIGdzdF9lbGVtZW50X2NyZWF0ZV9hbGxfcGFkczoKKyAqIEBlbGVtZW50OiAodHJhbnNmZXIgbm9uZSk6IGEgI0dzdEVsZW1lbnQgdG8gY3JlYXRlIHBhZHMgZm9yCisgKgorICogQ3JlYXRlcyBhIHBhZCBmb3IgZWFjaCBwYWQgdGVtcGxhdGUgdGhhdCBpcyBhbHdheXMgYXZhaWxhYmxlLgorICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHVzZWZ1bCBkdXJpbmcgb2JqZWN0IGluaXRpYWxpemF0aW9uIG9mCisgKiBzdWJjbGFzc2VzIG9mICNHc3RFbGVtZW50LgorICovCit2b2lkCitnc3RfZWxlbWVudF9jcmVhdGVfYWxsX3BhZHMgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQoreworICBHTGlzdCAqcGFkbGlzdDsKKworICAvKiBGSVhNRTogbG9jayBlbGVtZW50ICovCisKKyAgcGFkbGlzdCA9CisgICAgICBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlX2xpc3QgKEdTVF9FTEVNRU5UX0NMQVNTCisgICAgICAoR19PQkpFQ1RfR0VUX0NMQVNTIChlbGVtZW50KSkpOworCisgIHdoaWxlIChwYWRsaXN0KSB7CisgICAgR3N0UGFkVGVtcGxhdGUgKnBhZHRlbXBsID0gKEdzdFBhZFRlbXBsYXRlICopIHBhZGxpc3QtPmRhdGE7CisKKyAgICBpZiAocGFkdGVtcGwtPnByZXNlbmNlID09IEdTVF9QQURfQUxXQVlTKSB7CisgICAgICBHc3RQYWQgKnBhZDsKKworICAgICAgcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAocGFkdGVtcGwsIHBhZHRlbXBsLT5uYW1lX3RlbXBsYXRlKTsKKworICAgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoZWxlbWVudCwgcGFkKTsKKyAgICB9CisgICAgcGFkbGlzdCA9IHBhZGxpc3QtPm5leHQ7CisgIH0KK30KKworLyoqCisgKiBnc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWRfdGVtcGxhdGU6CisgKiBAZWxlbWVudDogKHRyYW5zZmVyIG5vbmUpOiBhICNHc3RFbGVtZW50IHRvIGdldCBhIGNvbXBhdGlibGUgcGFkIHRlbXBsYXRlIGZvcgorICogQGNvbXBhdHRlbXBsOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjR3N0UGFkVGVtcGxhdGUgdG8gZmluZCBhIGNvbXBhdGlibGUKKyAqICAgICB0ZW1wbGF0ZSBmb3IKKyAqCisgKiBSZXRyaWV2ZXMgYSBwYWQgdGVtcGxhdGUgZnJvbSBAZWxlbWVudCB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBAY29tcGF0dGVtcGwuCisgKiBQYWRzIGZyb20gY29tcGF0aWJsZSB0ZW1wbGF0ZXMgY2FuIGJlIGxpbmtlZCB0b2dldGhlci4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IGEgY29tcGF0aWJsZSAjR3N0UGFkVGVtcGxhdGUsIG9yIE5VTEwgaWYgbm9uZQorICogICAgIHdhcyBmb3VuZC4gTm8gdW5yZWZlcmVuY2luZyBpcyBuZWNlc3NhcnkuCisgKi8KK0dzdFBhZFRlbXBsYXRlICoKK2dzdF9lbGVtZW50X2dldF9jb21wYXRpYmxlX3BhZF90ZW1wbGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCisgICAgR3N0UGFkVGVtcGxhdGUgKiBjb21wYXR0ZW1wbCkKK3sKKyAgR3N0UGFkVGVtcGxhdGUgKm5ld3RlbXBsID0gTlVMTDsKKyAgR0xpc3QgKnBhZGxpc3Q7CisgIEdzdEVsZW1lbnRDbGFzcyAqY2xhc3M7CisgIGdib29sZWFuIGNvbXBhdGlibGU7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGVsZW1lbnQgIT0gTlVMTCwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCksIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoY29tcGF0dGVtcGwgIT0gTlVMTCwgTlVMTCk7CisKKyAgY2xhc3MgPSBHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKGVsZW1lbnQpOworCisgIHBhZGxpc3QgPSBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlX2xpc3QgKGNsYXNzKTsKKworICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0VMRU1FTlRfUEFEUywKKyAgICAgICJMb29raW5nIGZvciBhIHN1aXRhYmxlIHBhZCB0ZW1wbGF0ZSBpbiAlcyBvdXQgb2YgJWQgdGVtcGxhdGVzLi4uIiwKKyAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpLCBnX2xpc3RfbGVuZ3RoIChwYWRsaXN0KSk7CisKKyAgd2hpbGUgKHBhZGxpc3QpIHsKKyAgICBHc3RQYWRUZW1wbGF0ZSAqcGFkdGVtcGwgPSAoR3N0UGFkVGVtcGxhdGUgKikgcGFkbGlzdC0+ZGF0YTsKKworICAgIC8qIElnbm9yZSBuYW1lCisgICAgICogSWdub3JlIHByZXNlbmNlCisgICAgICogQ2hlY2sgZGlyZWN0aW9uIChtdXN0IGJlIG9wcG9zaXRlKQorICAgICAqIENoZWNrIGNhcHMKKyAgICAgKi8KKyAgICBHU1RfQ0FUX0xPRyAoR1NUX0NBVF9DQVBTLAorICAgICAgICAiY2hlY2tpbmcgcGFkIHRlbXBsYXRlICVzIiwgcGFkdGVtcGwtPm5hbWVfdGVtcGxhdGUpOworICAgIGlmIChwYWR0ZW1wbC0+ZGlyZWN0aW9uICE9IGNvbXBhdHRlbXBsLT5kaXJlY3Rpb24pIHsKKyAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0FQUywKKyAgICAgICAgICAiY29tcGF0aWJsZSBkaXJlY3Rpb246IGZvdW5kICVzIHBhZCB0ZW1wbGF0ZSBcIiVzXCIiLAorICAgICAgICAgIHBhZHRlbXBsLT5kaXJlY3Rpb24gPT0gR1NUX1BBRF9TUkMgPyAic3JjIiA6ICJzaW5rIiwKKyAgICAgICAgICBwYWR0ZW1wbC0+bmFtZV90ZW1wbGF0ZSk7CisKKyAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0FQUywKKyAgICAgICAgICAiaW50ZXJzZWN0aW5nICUiIEdTVF9QVFJfRk9STUFULCBHU1RfUEFEX1RFTVBMQVRFX0NBUFMgKGNvbXBhdHRlbXBsKSk7CisgICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NBUFMsCisgICAgICAgICAgIi4uYW5kICUiIEdTVF9QVFJfRk9STUFULCBHU1RfUEFEX1RFTVBMQVRFX0NBUFMgKHBhZHRlbXBsKSk7CisKKyAgICAgIGNvbXBhdGlibGUgPSBnc3RfY2Fwc19jYW5faW50ZXJzZWN0IChHU1RfUEFEX1RFTVBMQVRFX0NBUFMgKGNvbXBhdHRlbXBsKSwKKyAgICAgICAgICBHU1RfUEFEX1RFTVBMQVRFX0NBUFMgKHBhZHRlbXBsKSk7CisKKyAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0FQUywgImNhcHMgYXJlICVzY29tcGF0aWJsZSIsCisgICAgICAgICAgKGNvbXBhdGlibGUgPyAiIiA6ICJub3QgIikpOworCisgICAgICBpZiAoY29tcGF0aWJsZSkgeworICAgICAgICBuZXd0ZW1wbCA9IHBhZHRlbXBsOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICBwYWRsaXN0ID0gZ19saXN0X25leHQgKHBhZGxpc3QpOworICB9CisgIGlmIChuZXd0ZW1wbCkKKyAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0VMRU1FTlRfUEFEUywKKyAgICAgICAgIlJldHVybmluZyBuZXcgcGFkIHRlbXBsYXRlICVwIiwgbmV3dGVtcGwpOworICBlbHNlCisgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsICJObyBjb21wYXRpYmxlIHBhZCB0ZW1wbGF0ZSBmb3VuZCIpOworCisgIHJldHVybiBuZXd0ZW1wbDsKK30KKworLyoqCisgKiBnc3RfZWxlbWVudF9nZXRfcGFkX2Zyb21fdGVtcGxhdGU6CisgKiBAZWxlbWVudDogKHRyYW5zZmVyIG5vbmUpOiBhICNHc3RFbGVtZW50LgorICogQHRlbXBsOiAodHJhbnNmZXIgbm9uZSk6IGEgI0dzdFBhZFRlbXBsYXRlIGJlbG9uZ2luZyB0byBAZWxlbWVudC4KKyAqCisgKiBHZXRzIGEgcGFkIGZyb20gQGVsZW1lbnQgZGVzY3JpYmVkIGJ5IEB0ZW1wbC4gSWYgdGhlIHByZXNlbmNlIG9mIEB0ZW1wbCBpcworICogI0dTVF9QQURfUkVRVUVTVCwgcmVxdWVzdHMgYSBuZXcgcGFkLiBDYW4gcmV0dXJuICVOVUxMIGZvciAjR1NUX1BBRF9TT01FVElNRVMKKyAqIHRlbXBsYXRlcy4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0UGFkLCBvciBOVUxMIGlmIG9uZSBjb3VsZCBub3QgYmUgZm91bmQKKyAqICAgICBvciBjcmVhdGVkLgorICovCitzdGF0aWMgR3N0UGFkICoKK2dzdF9lbGVtZW50X2dldF9wYWRfZnJvbV90ZW1wbGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFBhZFRlbXBsYXRlICogdGVtcGwpCit7CisgIEdzdFBhZCAqcmV0ID0gTlVMTDsKKyAgR3N0UGFkUHJlc2VuY2UgcHJlc2VuY2U7CisKKyAgLyogSWYgdGhpcyBmdW5jdGlvbiBpcyBldmVyIGV4cG9ydGVkLCB3ZSBuZWVkIGNoZWNrIHRoZSB2YWxpZGl0eSBvZiBgZWxlbWVudCcKKyAgICogYW5kIGB0ZW1wbCcsIGFuZCB0byBtYWtlIHN1cmUgdGhlIHRlbXBsYXRlIGFjdHVhbGx5IGJlbG9uZ3MgdG8gdGhlCisgICAqIGVsZW1lbnQuICovCisKKyAgcHJlc2VuY2UgPSBHU1RfUEFEX1RFTVBMQVRFX1BSRVNFTkNFICh0ZW1wbCk7CisKKyAgc3dpdGNoIChwcmVzZW5jZSkgeworICAgIGNhc2UgR1NUX1BBRF9BTFdBWVM6CisgICAgY2FzZSBHU1RfUEFEX1NPTUVUSU1FUzoKKyAgICAgIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChlbGVtZW50LCB0ZW1wbC0+bmFtZV90ZW1wbGF0ZSk7CisgICAgICBpZiAoIXJldCAmJiBwcmVzZW5jZSA9PSBHU1RfUEFEX0FMV0FZUykKKyAgICAgICAgZ193YXJuaW5nCisgICAgICAgICAgICAoIkVsZW1lbnQgJXMgaGFzIGFuIEFMV0FZUyB0ZW1wbGF0ZSAlcywgYnV0IG5vIHBhZCBvZiB0aGUgc2FtZSBuYW1lIiwKKyAgICAgICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoZWxlbWVudCksIHRlbXBsLT5uYW1lX3RlbXBsYXRlKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHU1RfUEFEX1JFUVVFU1Q6CisgICAgICByZXQgPSBnc3RfZWxlbWVudF9yZXF1ZXN0X3BhZCAoZWxlbWVudCwgdGVtcGwsIE5VTEwsIE5VTEwpOworICAgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gcmV0OworfQorCisvKgorICogZ3N0X2VsZW1lbnRfcmVxdWVzdF9jb21wYXRpYmxlX3BhZDoKKyAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50LgorICogQHRlbXBsOiB0aGUgI0dzdFBhZFRlbXBsYXRlIHRvIHdoaWNoIHRoZSBuZXcgcGFkIHNob3VsZCBiZSBhYmxlIHRvIGxpbmsuCisgKgorICogUmVxdWVzdHMgYSBwYWQgZnJvbSBAZWxlbWVudC4gVGhlIHJldHVybmVkIHBhZCBzaG91bGQgYmUgdW5saW5rZWQgYW5kCisgKiBjb21wYXRpYmxlIHdpdGggQHRlbXBsLiBNaWdodCByZXR1cm4gYW4gZXhpc3RpbmcgcGFkLCBvciByZXF1ZXN0IGEgbmV3IG9uZS4KKyAqCisgKiBSZXR1cm5zOiBhICNHc3RQYWQsIG9yICVOVUxMIGlmIG9uZSBjb3VsZCBub3QgYmUgZm91bmQgb3IgY3JlYXRlZC4KKyAqLworc3RhdGljIEdzdFBhZCAqCitnc3RfZWxlbWVudF9yZXF1ZXN0X2NvbXBhdGlibGVfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwKKyAgICBHc3RQYWRUZW1wbGF0ZSAqIHRlbXBsKQoreworICBHc3RQYWRUZW1wbGF0ZSAqdGVtcGxfbmV3OworICBHc3RQYWQgKnBhZCA9IE5VTEw7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEX1RFTVBMQVRFICh0ZW1wbCksIE5VTEwpOworCisgIC8qIEZJWE1FOiBzaG91bGQgcmVhbGx5IGxvb3AgdGhyb3VnaCB0aGUgdGVtcGxhdGVzLCB0ZXN0aW5nIGVhY2ggZm9yCisgICAqICAgICAgY29tcGF0aWJpbGl0eSBhbmQgcGFkIGF2YWlsYWJpbGl0eS4gKi8KKyAgdGVtcGxfbmV3ID0gZ3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkX3RlbXBsYXRlIChlbGVtZW50LCB0ZW1wbCk7CisgIGlmICh0ZW1wbF9uZXcpCisgICAgcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3BhZF9mcm9tX3RlbXBsYXRlIChlbGVtZW50LCB0ZW1wbF9uZXcpOworCisgIC8qIFRoaXMgY2FuIGhhcHBlbiBmb3Igbm9uLXJlcXVlc3QgcGFkcy4gTm8gbmVlZCB0byB1bnJlZi4gKi8KKyAgaWYgKHBhZCAmJiBHU1RfUEFEX1BFRVIgKHBhZCkpCisgICAgcGFkID0gTlVMTDsKKworICByZXR1cm4gcGFkOworfQorCisvKgorICogQ2hlY2tzIGlmIHRoZSBzb3VyY2UgcGFkIGFuZCB0aGUgc2luayBwYWQgY2FuIGJlIGxpbmtlZC4KKyAqIEJvdGggQHNyY3BhZCBhbmQgQHNpbmtwYWQgbXVzdCBiZSB1bmxpbmtlZCBhbmQgaGF2ZSBhIHBhcmVudC4KKyAqLworc3RhdGljIGdib29sZWFuCitnc3RfcGFkX2NoZWNrX2xpbmsgKEdzdFBhZCAqIHNyY3BhZCwgR3N0UGFkICogc2lua3BhZCkKK3sKKyAgLyogRklYTUUgVGhpcyBmdW5jdGlvbiBpcyBncm9zcy4gIEl0J3MgYWxtb3N0IGEgZGlyZWN0IGNvcHkgb2YKKyAgICogZ3N0X3BhZF9saW5rX2ZpbHRlcmVkKCkuICBBbnkgZGVjZW50IHByb2dyYW1tZXIgd291bGQgYXR0ZW1wdAorICAgKiB0byBtZXJnZSB0aGUgdHdvIGZ1bmN0aW9ucywgd2hpY2ggSSB3aWxsIGRvIHNvbWUgZGF5LiAtLWRzCisgICAqLworCisgIC8qIGdlbmVyaWMgY2hlY2tzICovCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChzcmNwYWQpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChzaW5rcGFkKSwgRkFMU0UpOworCisgIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9QQURTLCAidHJ5aW5nIHRvIGxpbmsgJXM6JXMgYW5kICVzOiVzIiwKKyAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAoc3JjcGFkKSwgR1NUX0RFQlVHX1BBRF9OQU1FIChzaW5rcGFkKSk7CisKKyAgLyogRklYTUU6IHNob3VsZG4ndCB3ZSBjb252ZXJ0IHRoaXMgdG8gZ19yZXR1cm5fdmFsX2lmX2ZhaWw/ICovCisgIGlmIChHU1RfUEFEX1BFRVIgKHNyY3BhZCkgIT0gTlVMTCkgeworICAgIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9QQURTLCAiU291cmNlIHBhZCAlczolcyBoYXMgYSBwZWVyLCBmYWlsZWQiLAorICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHNyY3BhZCkpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorICBpZiAoR1NUX1BBRF9QRUVSIChzaW5rcGFkKSAhPSBOVUxMKSB7CisgICAgR1NUX0NBVF9JTkZPIChHU1RfQ0FUX1BBRFMsICJTaW5rIHBhZCAlczolcyBoYXMgYSBwZWVyLCBmYWlsZWQiLAorICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHNpbmtwYWQpKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKyAgaWYgKCFHU1RfUEFEX0lTX1NSQyAoc3JjcGFkKSkgeworICAgIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9QQURTLCAiU3JjIHBhZCAlczolcyBpcyBub3Qgc291cmNlIHBhZCwgZmFpbGVkIiwKKyAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChzcmNwYWQpKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKyAgaWYgKCFHU1RfUEFEX0lTX1NJTksgKHNpbmtwYWQpKSB7CisgICAgR1NUX0NBVF9JTkZPIChHU1RfQ0FUX1BBRFMsICJTaW5rIHBhZCAlczolcyBpcyBub3Qgc2luayBwYWQsIGZhaWxlZCIsCisgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAoc2lua3BhZCkpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorICBpZiAoR1NUX1BBRF9QQVJFTlQgKHNyY3BhZCkgPT0gTlVMTCkgeworICAgIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9QQURTLCAiU3JjIHBhZCAlczolcyBoYXMgbm8gcGFyZW50LCBmYWlsZWQiLAorICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHNyY3BhZCkpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorICBpZiAoR1NUX1BBRF9QQVJFTlQgKHNpbmtwYWQpID09IE5VTEwpIHsKKyAgICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfUEFEUywgIlNpbmsgcGFkICVzOiVzIGhhcyBubyBwYXJlbnQsIGZhaWxlZCIsCisgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAoc3JjcGFkKSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkOgorICogQGVsZW1lbnQ6ICh0cmFuc2ZlciBub25lKTogYSAjR3N0RWxlbWVudCBpbiB3aGljaCB0aGUgcGFkIHNob3VsZCBiZSBmb3VuZC4KKyAqIEBwYWQ6ICh0cmFuc2ZlciBub25lKTogdGhlICNHc3RQYWQgdG8gZmluZCBhIGNvbXBhdGlibGUgb25lIGZvci4KKyAqIEBjYXBzOiB0aGUgI0dzdENhcHMgdG8gdXNlIGFzIGEgZmlsdGVyLgorICoKKyAqIExvb2tzIGZvciBhbiB1bmxpbmtlZCBwYWQgdG8gd2hpY2ggdGhlIGdpdmVuIHBhZCBjYW4gbGluay4gSXQgaXMgbm90CisgKiBndWFyYW50ZWVkIHRoYXQgbGlua2luZyB0aGUgcGFkcyB3aWxsIHdvcmssIHRob3VnaCBpdCBzaG91bGQgd29yayBpbiBtb3N0CisgKiBjYXNlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZmlyc3QgYXR0ZW1wdCB0byBmaW5kIGEgY29tcGF0aWJsZSB1bmxpbmtlZCBBTFdBWVMgcGFkLAorICogYW5kIGlmIG5vbmUgY2FuIGJlIGZvdW5kLCBpdCB3aWxsIHJlcXVlc3QgYSBjb21wYXRpYmxlIFJFUVVFU1QgcGFkIGJ5IGxvb2tpbmcKKyAqIGF0IHRoZSB0ZW1wbGF0ZXMgb2YgQGVsZW1lbnQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdFBhZCB0byB3aGljaCBhIGxpbmsgY2FuIGJlIG1hZGUsIG9yICVOVUxMCisgKiAgICAgaWYgb25lIGNhbm5vdCBiZSBmb3VuZC4gZ3N0X29iamVjdF91bnJlZigpIGFmdGVyIHVzYWdlLgorICovCitHc3RQYWQgKgorZ3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkICogcGFkLAorICAgIGNvbnN0IEdzdENhcHMgKiBjYXBzKQoreworICBHc3RJdGVyYXRvciAqcGFkczsKKyAgR3N0UGFkVGVtcGxhdGUgKnRlbXBsOworICBHc3RDYXBzICp0ZW1wbGNhcHM7CisgIEdzdFBhZCAqZm91bmRwYWQgPSBOVUxMOworICBnYm9vbGVhbiBkb25lOworICBHVmFsdWUgcGFkcHRyID0geyAwLCB9OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCksIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgTlVMTCk7CisKKyAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsCisgICAgICAiZmluZGluZyBwYWQgaW4gJXMgY29tcGF0aWJsZSB3aXRoICVzOiVzIiwKKyAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpLCBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfUEFEX1BFRVIgKHBhZCkgPT0gTlVMTCwgTlVMTCk7CisKKyAgZG9uZSA9IEZBTFNFOworCisgIC8qIHRyeSB0byBnZXQgYW4gZXhpc3RpbmcgdW5saW5rZWQgcGFkICovCisgIGlmIChHU1RfUEFEX0lTX1NSQyAocGFkKSkgeworICAgIHBhZHMgPSBnc3RfZWxlbWVudF9pdGVyYXRlX3NpbmtfcGFkcyAoZWxlbWVudCk7CisgIH0gZWxzZSBpZiAoR1NUX1BBRF9JU19TSU5LIChwYWQpKSB7CisgICAgcGFkcyA9IGdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMgKGVsZW1lbnQpOworICB9IGVsc2UgeworICAgIHBhZHMgPSBnc3RfZWxlbWVudF9pdGVyYXRlX3BhZHMgKGVsZW1lbnQpOworICB9CisKKyAgd2hpbGUgKCFkb25lKSB7CisgICAgc3dpdGNoIChnc3RfaXRlcmF0b3JfbmV4dCAocGFkcywgJnBhZHB0cikpIHsKKyAgICAgIGNhc2UgR1NUX0lURVJBVE9SX09LOgorICAgICAgeworICAgICAgICBHc3RQYWQgKnBlZXI7CisgICAgICAgIEdzdFBhZCAqY3VycmVudDsKKyAgICAgICAgR3N0UGFkICpzcmNwYWQ7CisgICAgICAgIEdzdFBhZCAqc2lua3BhZDsKKworICAgICAgICBjdXJyZW50ID0gZ192YWx1ZV9nZXRfb2JqZWN0ICgmcGFkcHRyKTsKKworICAgICAgICBHU1RfQ0FUX0xPRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsICJleGFtaW5pbmcgcGFkICVzOiVzIiwKKyAgICAgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAoY3VycmVudCkpOworCisgICAgICAgIGlmIChHU1RfUEFEX0lTX1NSQyAoY3VycmVudCkpIHsKKyAgICAgICAgICBzcmNwYWQgPSBjdXJyZW50OworICAgICAgICAgIHNpbmtwYWQgPSBwYWQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgc3JjcGFkID0gcGFkOworICAgICAgICAgIHNpbmtwYWQgPSBjdXJyZW50OworICAgICAgICB9CisgICAgICAgIHBlZXIgPSBnc3RfcGFkX2dldF9wZWVyIChjdXJyZW50KTsKKworICAgICAgICBpZiAocGVlciA9PSBOVUxMICYmIGdzdF9wYWRfY2hlY2tfbGluayAoc3JjcGFkLCBzaW5rcGFkKSkgeworICAgICAgICAgIEdzdENhcHMgKnRlbXAsICppbnRlcnNlY3Rpb247CisgICAgICAgICAgZ2Jvb2xlYW4gY29tcGF0aWJsZTsKKworICAgICAgICAgIC8qIE5vdyBjaGVjayBpZiB0aGUgdHdvIHBhZHMnIGNhcHMgYXJlIGNvbXBhdGlibGUgKi8KKyAgICAgICAgICB0ZW1wID0gZ3N0X3BhZF9nZXRfY2FwcyAocGFkLCBOVUxMKTsKKyAgICAgICAgICBpZiAoY2FwcykgeworICAgICAgICAgICAgaW50ZXJzZWN0aW9uID0gZ3N0X2NhcHNfaW50ZXJzZWN0ICh0ZW1wLCBjYXBzKTsKKyAgICAgICAgICAgIGdzdF9jYXBzX3VucmVmICh0ZW1wKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50ZXJzZWN0aW9uID0gdGVtcDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICB0ZW1wID0gZ3N0X3BhZF9nZXRfY2FwcyAoY3VycmVudCwgTlVMTCk7CisgICAgICAgICAgY29tcGF0aWJsZSA9IGdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QgKHRlbXAsIGludGVyc2VjdGlvbik7CisgICAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKHRlbXApOworICAgICAgICAgIGdzdF9jYXBzX3VucmVmIChpbnRlcnNlY3Rpb24pOworCisgICAgICAgICAgaWYgKGNvbXBhdGlibGUpIHsKKyAgICAgICAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfRUxFTUVOVF9QQURTLAorICAgICAgICAgICAgICAgICJmb3VuZCBleGlzdGluZyB1bmxpbmtlZCBjb21wYXRpYmxlIHBhZCAlczolcyIsCisgICAgICAgICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChjdXJyZW50KSk7CisgICAgICAgICAgICBnc3RfaXRlcmF0b3JfZnJlZSAocGFkcyk7CisKKyAgICAgICAgICAgIGN1cnJlbnQgPSBnc3Rfb2JqZWN0X3JlZiAoY3VycmVudCk7CisgICAgICAgICAgICBnX3ZhbHVlX3Vuc2V0ICgmcGFkcHRyKTsKKworICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfRUxFTUVOVF9QQURTLCAiaW5jb21wYXRpYmxlIHBhZHMiKTsKKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsCisgICAgICAgICAgICAgICJhbHJlYWR5IGxpbmtlZCBvciBjYW5ub3QgYmUgbGlua2VkIChwZWVyID0gJXApIiwgcGVlcik7CisgICAgICAgIH0KKyAgICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsICJ1bnJlZmZpbmcgcGFkcyIpOworCisgICAgICAgIGdfdmFsdWVfcmVzZXQgKCZwYWRwdHIpOworICAgICAgICBpZiAocGVlcikKKyAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwZWVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgorICAgICAgICBkb25lID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6CisgICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKHBhZHMpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0VSUk9SOgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGdfdmFsdWVfdW5zZXQgKCZwYWRwdHIpOworICBnc3RfaXRlcmF0b3JfZnJlZSAocGFkcyk7CisKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfRUxFTUVOVF9QQURTLCBlbGVtZW50LAorICAgICAgIkNvdWxkIG5vdCBmaW5kIGEgY29tcGF0aWJsZSB1bmxpbmtlZCBhbHdheXMgcGFkIHRvIGxpbmsgdG8gJXM6JXMsIG5vdyBjaGVja2luZyByZXF1ZXN0IHBhZHMiLAorICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKKworICAvKiB0cnkgdG8gY3JlYXRlIGEgbmV3IG9uZSAqLworICAvKiByZXF1ZXN0aW5nIGlzIGEgbGl0dGxlIGNyYXp5LCB3ZSBuZWVkIGEgdGVtcGxhdGUuIExldCdzIGNyZWF0ZSBvbmUgKi8KKyAgLyogRklYTUU6IHdoeSBub3QgZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlIChwYWQpOyAqLworICB0ZW1wbGNhcHMgPSBnc3RfcGFkX2dldF9jYXBzIChwYWQsIE5VTEwpOworICB0ZW1wbCA9IGdzdF9wYWRfdGVtcGxhdGVfbmV3ICgoZ2NoYXIgKikgR1NUX1BBRF9OQU1FIChwYWQpLAorICAgICAgR1NUX1BBRF9ESVJFQ1RJT04gKHBhZCksIEdTVF9QQURfQUxXQVlTLCB0ZW1wbGNhcHMpOworICBnc3RfY2Fwc191bnJlZiAodGVtcGxjYXBzKTsKKworICBmb3VuZHBhZCA9IGdzdF9lbGVtZW50X3JlcXVlc3RfY29tcGF0aWJsZV9wYWQgKGVsZW1lbnQsIHRlbXBsKTsKKyAgZ3N0X29iamVjdF91bnJlZiAodGVtcGwpOworCisgIGlmIChmb3VuZHBhZCkgeworICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfRUxFTUVOVF9QQURTLAorICAgICAgICAiZm91bmQgZXhpc3RpbmcgcmVxdWVzdCBwYWQgJXM6JXMiLCBHU1RfREVCVUdfUEFEX05BTUUgKGZvdW5kcGFkKSk7CisgICAgcmV0dXJuIGZvdW5kcGFkOworICB9CisKKyAgR1NUX0NBVF9JTkZPX09CSkVDVCAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsIGVsZW1lbnQsCisgICAgICAiQ291bGQgbm90IGZpbmQgYSBjb21wYXRpYmxlIHBhZCB0byBsaW5rIHRvICVzOiVzIiwKKyAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7CisgIHJldHVybiBOVUxMOworfQorCisvKioKKyAqIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lOgorICogQHN0YXRlOiBhICNHc3RTdGF0ZSB0byBnZXQgdGhlIG5hbWUgb2YuCisgKgorICogR2V0cyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGdpdmVuIHN0YXRlLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogYSBzdHJpbmcgd2l0aCB0aGUgbmFtZSBvZiB0aGUgc3RhdGUuCisgKi8KK2NvbnN0IGdjaGFyICoKK2dzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChHc3RTdGF0ZSBzdGF0ZSkKK3sKKyAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgR1NUX1NUQVRFX1ZPSURfUEVORElORzoKKyAgICAgIHJldHVybiAiVk9JRF9QRU5ESU5HIjsKKyAgICBjYXNlIEdTVF9TVEFURV9OVUxMOgorICAgICAgcmV0dXJuICJOVUxMIjsKKyAgICBjYXNlIEdTVF9TVEFURV9SRUFEWToKKyAgICAgIHJldHVybiAiUkVBRFkiOworICAgIGNhc2UgR1NUX1NUQVRFX1BMQVlJTkc6CisgICAgICByZXR1cm4gIlBMQVlJTkciOworICAgIGNhc2UgR1NUX1NUQVRFX1BBVVNFRDoKKyAgICAgIHJldHVybiAiUEFVU0VEIjsKKyAgICBkZWZhdWx0OgorICAgICAgLyogVGhpcyBpcyBhIG1lbW9yeSBsZWFrICovCisgICAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgiVU5LTk9XTiEoJWQpIiwgc3RhdGUpOworICB9Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRfbmFtZToKKyAqIEBzdGF0ZV9yZXQ6IGEgI0dzdFN0YXRlQ2hhbmdlUmV0dXJuIHRvIGdldCB0aGUgbmFtZSBvZi4KKyAqCisgKiBHZXRzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZ2l2ZW4gc3RhdGUgY2hhbmdlIHJlc3VsdC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IGEgc3RyaW5nIHdpdGggdGhlIG5hbWUgb2YgdGhlIHN0YXRlCisgKiAgICByZXN1bHQuCisgKgorICogU2luY2U6IDAuMTAuMTEKKyAqLworY29uc3QgZ2NoYXIgKgorZ3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRfbmFtZSAoR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3RhdGVfcmV0KQoreworICBzd2l0Y2ggKHN0YXRlX3JldCkgeworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOgorICAgICAgcmV0dXJuICJGQUlMVVJFIjsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzoKKyAgICAgIHJldHVybiAiU1VDQ0VTUyI7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DOgorICAgICAgcmV0dXJuICJBU1lOQyI7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEw6CisgICAgICByZXR1cm4gIk5PIFBSRVJPTEwiOworICAgIGRlZmF1bHQ6CisgICAgICAvKiBUaGlzIGlzIGEgbWVtb3J5IGxlYWsgKi8KKyAgICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJVTktOT1dOISglZCkiLCBzdGF0ZV9yZXQpOworICB9Cit9CisKKworc3RhdGljIGdib29sZWFuCitnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9hY2NlcHRfYWxsX2NhcHNfaW5fZGlyZWN0aW9uIChHc3RFbGVtZW50RmFjdG9yeSAqCisgICAgZmFjdG9yeSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMsIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgIEdMaXN0ICp0ZW1wbGF0ZXM7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZhY3RvcnkgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoY2FwcyAhPSBOVUxMLCBGQUxTRSk7CisKKyAgdGVtcGxhdGVzID0gZmFjdG9yeS0+c3RhdGljcGFkdGVtcGxhdGVzOworCisgIHdoaWxlICh0ZW1wbGF0ZXMpIHsKKyAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqdGVtcGxhdGUgPSAoR3N0U3RhdGljUGFkVGVtcGxhdGUgKikgdGVtcGxhdGVzLT5kYXRhOworCisgICAgaWYgKHRlbXBsYXRlLT5kaXJlY3Rpb24gPT0gZGlyZWN0aW9uKSB7CisgICAgICBHc3RDYXBzICp0ZW1wbGNhcHMgPSBnc3Rfc3RhdGljX2NhcHNfZ2V0ICgmdGVtcGxhdGUtPnN0YXRpY19jYXBzKTsKKworICAgICAgaWYgKGdzdF9jYXBzX2lzX2Fsd2F5c19jb21wYXRpYmxlIChjYXBzLCB0ZW1wbGNhcHMpKSB7CisgICAgICAgIGdzdF9jYXBzX3VucmVmICh0ZW1wbGNhcHMpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgIH0KKyAgICAgIGdzdF9jYXBzX3VucmVmICh0ZW1wbGNhcHMpOworICAgIH0KKyAgICB0ZW1wbGF0ZXMgPSBnX2xpc3RfbmV4dCAodGVtcGxhdGVzKTsKKyAgfQorCisgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9hY2NlcHRfYW55X2NhcHNfaW5fZGlyZWN0aW9uIChHc3RFbGVtZW50RmFjdG9yeSAqCisgICAgZmFjdG9yeSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMsIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgIEdMaXN0ICp0ZW1wbGF0ZXM7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZhY3RvcnkgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoY2FwcyAhPSBOVUxMLCBGQUxTRSk7CisKKyAgdGVtcGxhdGVzID0gZmFjdG9yeS0+c3RhdGljcGFkdGVtcGxhdGVzOworCisgIHdoaWxlICh0ZW1wbGF0ZXMpIHsKKyAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqdGVtcGxhdGUgPSAoR3N0U3RhdGljUGFkVGVtcGxhdGUgKikgdGVtcGxhdGVzLT5kYXRhOworCisgICAgaWYgKHRlbXBsYXRlLT5kaXJlY3Rpb24gPT0gZGlyZWN0aW9uKSB7CisgICAgICBHc3RDYXBzICp0ZW1wbGNhcHMgPSBnc3Rfc3RhdGljX2NhcHNfZ2V0ICgmdGVtcGxhdGUtPnN0YXRpY19jYXBzKTsKKworICAgICAgaWYgKGdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QgKGNhcHMsIHRlbXBsY2FwcykpIHsKKyAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKHRlbXBsY2Fwcyk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgICAgfQorICAgICAgZ3N0X2NhcHNfdW5yZWYgKHRlbXBsY2Fwcyk7CisgICAgfQorICAgIHRlbXBsYXRlcyA9IGdfbGlzdF9uZXh0ICh0ZW1wbGF0ZXMpOworICB9CisKKyAgcmV0dXJuIEZBTFNFOworfQorCisvKioKKyAqIGdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NpbmtfYWxsX2NhcHM6CisgKiBAZmFjdG9yeTogZmFjdG9yeSB0byBxdWVyeQorICogQGNhcHM6IHRoZSBjYXBzIHRvIGNoZWNrCisgKgorICogQ2hlY2tzIGlmIHRoZSBmYWN0b3J5IGNhbiBzaW5rIGFsbCBwb3NzaWJsZSBjYXBhYmlsaXRpZXMuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGNhcHMgYXJlIGZ1bGx5IGNvbXBhdGlibGUuCisgKgorICogU2luY2U6IDAuMTAuMzMKKyAqLworZ2Jvb2xlYW4KK2dzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NpbmtfYWxsX2NhcHMgKEdzdEVsZW1lbnRGYWN0b3J5ICogZmFjdG9yeSwKKyAgICBjb25zdCBHc3RDYXBzICogY2FwcykKK3sKKyAgcmV0dXJuIGdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX2FjY2VwdF9hbGxfY2Fwc19pbl9kaXJlY3Rpb24gKGZhY3RvcnksIGNhcHMsCisgICAgICBHU1RfUEFEX1NJTkspOworfQorCisvKioKKyAqIGdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NyY19hbGxfY2FwczoKKyAqIEBmYWN0b3J5OiBmYWN0b3J5IHRvIHF1ZXJ5CisgKiBAY2FwczogdGhlIGNhcHMgdG8gY2hlY2sKKyAqCisgKiBDaGVja3MgaWYgdGhlIGZhY3RvcnkgY2FuIHNyYyBhbGwgcG9zc2libGUgY2FwYWJpbGl0aWVzLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBjYXBzIGFyZSBmdWxseSBjb21wYXRpYmxlLgorICoKKyAqIFNpbmNlOiAwLjEwLjMzCisgKi8KK2dib29sZWFuCitnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zcmNfYWxsX2NhcHMgKEdzdEVsZW1lbnRGYWN0b3J5ICogZmFjdG9yeSwKKyAgICBjb25zdCBHc3RDYXBzICogY2FwcykKK3sKKyAgcmV0dXJuIGdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX2FjY2VwdF9hbGxfY2Fwc19pbl9kaXJlY3Rpb24gKGZhY3RvcnksIGNhcHMsCisgICAgICBHU1RfUEFEX1NSQyk7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc2lua19hbnlfY2FwczoKKyAqIEBmYWN0b3J5OiBmYWN0b3J5IHRvIHF1ZXJ5CisgKiBAY2FwczogdGhlIGNhcHMgdG8gY2hlY2sKKyAqCisgKiBDaGVja3MgaWYgdGhlIGZhY3RvcnkgY2FuIHNpbmsgYW55IHBvc3NpYmxlIGNhcGFiaWxpdHkuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGNhcHMgaGF2ZSBhIGNvbW1vbiBzdWJzZXQuCisgKgorICogU2luY2U6IDAuMTAuMzMKKyAqLworZ2Jvb2xlYW4KK2dzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NpbmtfYW55X2NhcHMgKEdzdEVsZW1lbnRGYWN0b3J5ICogZmFjdG9yeSwKKyAgICBjb25zdCBHc3RDYXBzICogY2FwcykKK3sKKyAgcmV0dXJuIGdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX2FjY2VwdF9hbnlfY2Fwc19pbl9kaXJlY3Rpb24gKGZhY3RvcnksIGNhcHMsCisgICAgICBHU1RfUEFEX1NJTkspOworfQorCisvKioKKyAqIGdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NyY19hbnlfY2FwczoKKyAqIEBmYWN0b3J5OiBmYWN0b3J5IHRvIHF1ZXJ5CisgKiBAY2FwczogdGhlIGNhcHMgdG8gY2hlY2sKKyAqCisgKiBDaGVja3MgaWYgdGhlIGZhY3RvcnkgY2FuIHNyYyBhbnkgcG9zc2libGUgY2FwYWJpbGl0eS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgY2FwcyBoYXZlIGEgY29tbW9uIHN1YnNldC4KKyAqCisgKiBTaW5jZTogMC4xMC4zMworICovCitnYm9vbGVhbgorZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc3JjX2FueV9jYXBzIChHc3RFbGVtZW50RmFjdG9yeSAqIGZhY3RvcnksCisgICAgY29uc3QgR3N0Q2FwcyAqIGNhcHMpCit7CisgIHJldHVybiBnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9hY2NlcHRfYW55X2NhcHNfaW5fZGlyZWN0aW9uIChmYWN0b3J5LCBjYXBzLAorICAgICAgR1NUX1BBRF9TUkMpOworfQorCisvKiBpZiByZXR1cm4gdmFsIGlzIHRydWUsICpkaXJlY3RfY2hpbGQgaXMgYSBjYWxsZXItb3duZWQgcmVmIG9uIHRoZSBkaXJlY3QKKyAqIGNoaWxkIG9mIGFuY2VzdG9yIHRoYXQgaXMgcGFydCBvZiBvYmplY3QncyBhbmNlc3RyeSAqLworc3RhdGljIGdib29sZWFuCitvYmplY3RfaGFzX2FuY2VzdG9yIChHc3RPYmplY3QgKiBvYmplY3QsIEdzdE9iamVjdCAqIGFuY2VzdG9yLAorICAgIEdzdE9iamVjdCAqKiBkaXJlY3RfY2hpbGQpCit7CisgIEdzdE9iamVjdCAqY2hpbGQsICpwYXJlbnQ7CisKKyAgaWYgKGRpcmVjdF9jaGlsZCkKKyAgICAqZGlyZWN0X2NoaWxkID0gTlVMTDsKKworICBjaGlsZCA9IGdzdF9vYmplY3RfcmVmIChvYmplY3QpOworICBwYXJlbnQgPSBnc3Rfb2JqZWN0X2dldF9wYXJlbnQgKG9iamVjdCk7CisKKyAgd2hpbGUgKHBhcmVudCkgeworICAgIGlmIChhbmNlc3RvciA9PSBwYXJlbnQpIHsKKyAgICAgIGlmIChkaXJlY3RfY2hpbGQpCisgICAgICAgICpkaXJlY3RfY2hpbGQgPSBjaGlsZDsKKyAgICAgIGVsc2UKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZiAoY2hpbGQpOworICAgICAgZ3N0X29iamVjdF91bnJlZiAocGFyZW50KTsKKyAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIGdzdF9vYmplY3RfdW5yZWYgKGNoaWxkKTsKKyAgICBjaGlsZCA9IHBhcmVudDsKKyAgICBwYXJlbnQgPSBnc3Rfb2JqZWN0X2dldF9wYXJlbnQgKHBhcmVudCk7CisgIH0KKworICBnc3Rfb2JqZWN0X3VucmVmIChjaGlsZCk7CisKKyAgcmV0dXJuIEZBTFNFOworfQorCisvKiBjYWxsZXIgb3ducyByZXR1cm4gKi8KK3N0YXRpYyBHc3RPYmplY3QgKgorZmluZF9jb21tb25fcm9vdCAoR3N0T2JqZWN0ICogbzEsIEdzdE9iamVjdCAqIG8yKQoreworICBHc3RPYmplY3QgKnRvcCA9IG8xOworICBHc3RPYmplY3QgKmtpZDEsICpraWQyOworICBHc3RPYmplY3QgKnJvb3QgPSBOVUxMOworCisgIHdoaWxlIChHU1RfT0JKRUNUX1BBUkVOVCAodG9wKSkKKyAgICB0b3AgPSBHU1RfT0JKRUNUX1BBUkVOVCAodG9wKTsKKworICAvKiB0aGUgaXRzeS1iaXRzeSBzcGlkZXIuLi4gKi8KKworICBpZiAoIW9iamVjdF9oYXNfYW5jZXN0b3IgKG8yLCB0b3AsICZraWQyKSkKKyAgICByZXR1cm4gTlVMTDsKKworICByb290ID0gZ3N0X29iamVjdF9yZWYgKHRvcCk7CisgIHdoaWxlIChUUlVFKSB7CisgICAgaWYgKCFvYmplY3RfaGFzX2FuY2VzdG9yIChvMSwga2lkMiwgJmtpZDEpKSB7CisgICAgICBnc3Rfb2JqZWN0X3VucmVmIChraWQyKTsKKyAgICAgIHJldHVybiByb290OworICAgIH0KKyAgICByb290ID0ga2lkMjsKKyAgICBpZiAoIW9iamVjdF9oYXNfYW5jZXN0b3IgKG8yLCBraWQxLCAma2lkMikpIHsKKyAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGtpZDEpOworICAgICAgcmV0dXJuIHJvb3Q7CisgICAgfQorICAgIHJvb3QgPSBraWQxOworICB9Cit9CisKKy8qIGNhbGxlciBkb2VzIG5vdCBvd24gcmV0dXJuICovCitzdGF0aWMgR3N0UGFkICoKK2dob3N0X3VwIChHc3RFbGVtZW50ICogZSwgR3N0UGFkICogcGFkKQoreworICBzdGF0aWMgZ2ludCBnaG9zdF9wYWRfaW5kZXggPSAwOworICBHc3RQYWQgKmdwYWQ7CisgIGdjaGFyICpuYW1lOworICBHc3RTdGF0ZSBjdXJyZW50OworICBHc3RTdGF0ZSBuZXh0OworICBHc3RPYmplY3QgKnBhcmVudCA9IEdTVF9PQkpFQ1RfUEFSRU5UIChlKTsKKworICBuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgiZ2hvc3QlZCIsIGdob3N0X3BhZF9pbmRleCsrKTsKKyAgZ3BhZCA9IGdzdF9naG9zdF9wYWRfbmV3IChuYW1lLCBwYWQpOworICBnX2ZyZWUgKG5hbWUpOworCisgIEdTVF9TVEFURV9MT0NLIChlKTsKKyAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChlLCAmY3VycmVudCwgJm5leHQsIDApOworCisgIGlmIChjdXJyZW50ID4gR1NUX1NUQVRFX1JFQURZIHx8IG5leHQgPT0gR1NUX1NUQVRFX1BBVVNFRCkKKyAgICBnc3RfcGFkX3NldF9hY3RpdmUgKGdwYWQsIFRSVUUpOworCisgIGlmICghZ3N0X2VsZW1lbnRfYWRkX3BhZCAoKEdzdEVsZW1lbnQgKikgcGFyZW50LCBncGFkKSkgeworICAgIGdfd2FybmluZyAoIlBhZCBuYW1lZCAlcyBhbHJlYWR5IGV4aXN0cyBpbiBlbGVtZW50ICVzXG4iLAorICAgICAgICBHU1RfT0JKRUNUX05BTUUgKGdwYWQpLCBHU1RfT0JKRUNUX05BTUUgKHBhcmVudCkpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKChHc3RPYmplY3QgKikgZ3BhZCk7CisgICAgR1NUX1NUQVRFX1VOTE9DSyAoZSk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKyAgR1NUX1NUQVRFX1VOTE9DSyAoZSk7CisKKyAgcmV0dXJuIGdwYWQ7Cit9CisKK3N0YXRpYyB2b2lkCityZW1vdmVfcGFkIChncG9pbnRlciBwcGFkLCBncG9pbnRlciB1bnVzZWQpCit7CisgIEdzdFBhZCAqcGFkID0gcHBhZDsKKworICBpZiAoIWdzdF9lbGVtZW50X3JlbW92ZV9wYWQgKChHc3RFbGVtZW50ICopIEdTVF9PQkpFQ1RfUEFSRU5UIChwYWQpLCBwYWQpKQorICAgIGdfd2FybmluZyAoIkNvdWxkbid0IHJlbW92ZSBwYWQgJXMgZnJvbSBlbGVtZW50ICVzIiwKKyAgICAgICAgR1NUX09CSkVDVF9OQU1FIChwYWQpLCBHU1RfT0JKRUNUX05BTUUgKEdTVF9PQkpFQ1RfUEFSRU5UIChwYWQpKSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorcHJlcGFyZV9saW5rX21heWJlX2dob3N0aW5nIChHc3RQYWQgKiogc3JjLCBHc3RQYWQgKiogc2luaywKKyAgICBHU0xpc3QgKiogcGFkc19jcmVhdGVkKQoreworICBHc3RPYmplY3QgKnJvb3Q7CisgIEdzdE9iamVjdCAqZTEsICplMjsKKyAgR1NMaXN0ICpwYWRzX2NyZWF0ZWRfbG9jYWwgPSBOVUxMOworCisgIGdfYXNzZXJ0IChwYWRzX2NyZWF0ZWQpOworCisgIGUxID0gR1NUX09CSkVDVF9QQVJFTlQgKCpzcmMpOworICBlMiA9IEdTVF9PQkpFQ1RfUEFSRU5UICgqc2luayk7CisKKyAgaWYgKEdfVU5MSUtFTFkgKGUxID09IE5VTEwpKSB7CisgICAgR1NUX1dBUk5JTkcgKCJUcnlpbmcgdG8gZ2hvc3QgYSBwYWQgdGhhdCBkb2Vzbid0IGhhdmUgYSBwYXJlbnQ6ICUiCisgICAgICAgIEdTVF9QVFJfRk9STUFULCAqc3JjKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKyAgaWYgKEdfVU5MSUtFTFkgKGUyID09IE5VTEwpKSB7CisgICAgR1NUX1dBUk5JTkcgKCJUcnlpbmcgdG8gZ2hvc3QgYSBwYWQgdGhhdCBkb2Vzbid0IGhhdmUgYSBwYXJlbnQ6ICUiCisgICAgICAgIEdTVF9QVFJfRk9STUFULCAqc2luayk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgaWYgKEdTVF9PQkpFQ1RfUEFSRU5UIChlMSkgPT0gR1NUX09CSkVDVF9QQVJFTlQgKGUyKSkgeworICAgIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9QQURTLCAiJXMgYW5kICVzIGluIHNhbWUgYmluLCBubyBuZWVkIGZvciBnaG9zdCBwYWRzIiwKKyAgICAgICAgR1NUX09CSkVDVF9OQU1FIChlMSksIEdTVF9PQkpFQ1RfTkFNRSAoZTIpKTsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorCisgIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9QQURTLCAiJXMgYW5kICVzIG5vdCBpbiBzYW1lIGJpbiwgbWFraW5nIGdob3N0IHBhZHMiLAorICAgICAgR1NUX09CSkVDVF9OQU1FIChlMSksIEdTVF9PQkpFQ1RfTkFNRSAoZTIpKTsKKworICAvKiB3ZSBuZWVkIHRvIHNldHVwIHNvbWUgZ2hvc3QgcGFkcyAqLworICByb290ID0gZmluZF9jb21tb25fcm9vdCAoZTEsIGUyKTsKKyAgaWYgKCFyb290KSB7CisgICAgZ193YXJuaW5nICgiVHJ5aW5nIHRvIGNvbm5lY3QgZWxlbWVudHMgdGhhdCBkb24ndCBzaGFyZSBhIGNvbW1vbiAiCisgICAgICAgICJhbmNlc3RvcjogJXMgYW5kICVzIiwgR1NUX0VMRU1FTlRfTkFNRSAoZTEpLCBHU1RfRUxFTUVOVF9OQU1FIChlMikpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorCisgIHdoaWxlIChHU1RfT0JKRUNUX1BBUkVOVCAoZTEpICE9IHJvb3QpIHsKKyAgICAqc3JjID0gZ2hvc3RfdXAgKChHc3RFbGVtZW50ICopIGUxLCAqc3JjKTsKKyAgICBpZiAoISpzcmMpCisgICAgICBnb3RvIGNsZWFudXBfZmFpbDsKKyAgICBlMSA9IEdTVF9PQkpFQ1RfUEFSRU5UICgqc3JjKTsKKyAgICBwYWRzX2NyZWF0ZWRfbG9jYWwgPSBnX3NsaXN0X3ByZXBlbmQgKHBhZHNfY3JlYXRlZF9sb2NhbCwgKnNyYyk7CisgIH0KKyAgd2hpbGUgKEdTVF9PQkpFQ1RfUEFSRU5UIChlMikgIT0gcm9vdCkgeworICAgICpzaW5rID0gZ2hvc3RfdXAgKChHc3RFbGVtZW50ICopIGUyLCAqc2luayk7CisgICAgaWYgKCEqc2luaykKKyAgICAgIGdvdG8gY2xlYW51cF9mYWlsOworICAgIGUyID0gR1NUX09CSkVDVF9QQVJFTlQgKCpzaW5rKTsKKyAgICBwYWRzX2NyZWF0ZWRfbG9jYWwgPSBnX3NsaXN0X3ByZXBlbmQgKHBhZHNfY3JlYXRlZF9sb2NhbCwgKnNpbmspOworICB9CisKKyAgZ3N0X29iamVjdF91bnJlZiAocm9vdCk7CisgICpwYWRzX2NyZWF0ZWQgPSBnX3NsaXN0X2NvbmNhdCAoKnBhZHNfY3JlYXRlZCwgcGFkc19jcmVhdGVkX2xvY2FsKTsKKyAgcmV0dXJuIFRSVUU7CisKK2NsZWFudXBfZmFpbDoKKyAgZ3N0X29iamVjdF91bnJlZiAocm9vdCk7CisgIGdfc2xpc3RfZm9yZWFjaCAocGFkc19jcmVhdGVkX2xvY2FsLCByZW1vdmVfcGFkLCBOVUxMKTsKKyAgZ19zbGlzdF9mcmVlIChwYWRzX2NyZWF0ZWRfbG9jYWwpOworICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorcGFkX2xpbmtfbWF5YmVfZ2hvc3RpbmcgKEdzdFBhZCAqIHNyYywgR3N0UGFkICogc2luaywgR3N0UGFkTGlua0NoZWNrIGZsYWdzKQoreworICBHU0xpc3QgKnBhZHNfY3JlYXRlZCA9IE5VTEw7CisgIGdib29sZWFuIHJldDsKKworICBpZiAoIXByZXBhcmVfbGlua19tYXliZV9naG9zdGluZyAoJnNyYywgJnNpbmssICZwYWRzX2NyZWF0ZWQpKSB7CisgICAgcmV0ID0gRkFMU0U7CisgIH0gZWxzZSB7CisgICAgcmV0ID0gKGdzdF9wYWRfbGlua19mdWxsIChzcmMsIHNpbmssIGZsYWdzKSA9PSBHU1RfUEFEX0xJTktfT0spOworICB9CisKKyAgaWYgKCFyZXQpIHsKKyAgICBnX3NsaXN0X2ZvcmVhY2ggKHBhZHNfY3JlYXRlZCwgcmVtb3ZlX3BhZCwgTlVMTCk7CisgIH0KKyAgZ19zbGlzdF9mcmVlIChwYWRzX2NyZWF0ZWQpOworCisgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGw6CisgKiBAc3JjOiBhICNHc3RFbGVtZW50IGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBwYWQuCisgKiBAc3JjcGFkbmFtZTogKGFsbG93LW5vbmUpOiB0aGUgbmFtZSBvZiB0aGUgI0dzdFBhZCBpbiBzb3VyY2UgZWxlbWVudAorICogICAgIG9yIE5VTEwgZm9yIGFueSBwYWQuCisgKiBAZGVzdDogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI0dzdEVsZW1lbnQgY29udGFpbmluZyB0aGUgZGVzdGluYXRpb24gcGFkLgorICogQGRlc3RwYWRuYW1lOiAoYWxsb3ctbm9uZSk6IHRoZSBuYW1lIG9mIHRoZSAjR3N0UGFkIGluIGRlc3RpbmF0aW9uIGVsZW1lbnQsCisgKiBvciBOVUxMIGZvciBhbnkgcGFkLgorICogQGZsYWdzOiB0aGUgI0dzdFBhZExpbmtDaGVjayB0byBiZSBwZXJmb3JtZWQgd2hlbiBsaW5raW5nIHBhZHMuCisgKgorICogTGlua3MgdGhlIHR3byBuYW1lZCBwYWRzIG9mIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGVsZW1lbnRzLgorICogU2lkZSBlZmZlY3QgaXMgdGhhdCBpZiBvbmUgb2YgdGhlIHBhZHMgaGFzIG5vIHBhcmVudCwgaXQgYmVjb21lcyBhCisgKiBjaGlsZCBvZiB0aGUgcGFyZW50IG9mIHRoZSBvdGhlciBlbGVtZW50LiAgSWYgdGhleSBoYXZlIGRpZmZlcmVudAorICogcGFyZW50cywgdGhlIGxpbmsgZmFpbHMuCisgKgorICogQ2FsbGluZyBnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbCgpIHdpdGggQGZsYWdzID09ICVHU1RfUEFEX0xJTktfQ0hFQ0tfREVGQVVMVAorICogaXMgdGhlIHNhbWUgYXMgY2FsbGluZyBnc3RfZWxlbWVudF9saW5rX3BhZHMoKSBhbmQgdGhlIHJlY29tbWVuZGVkIHdheSBvZgorICogbGlua2luZyBwYWRzIHdpdGggc2FmZXR5IGNoZWNrcyBhcHBsaWVkLgorICoKKyAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgZ3N0X3BhZF9saW5rX2Z1bGwoKS4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBwYWRzIGNvdWxkIGJlIGxpbmtlZCwgRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIFNpbmNlOiAwLjEwLjMwCisgKi8KK2dib29sZWFuCitnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbCAoR3N0RWxlbWVudCAqIHNyYywgY29uc3QgZ2NoYXIgKiBzcmNwYWRuYW1lLAorICAgIEdzdEVsZW1lbnQgKiBkZXN0LCBjb25zdCBnY2hhciAqIGRlc3RwYWRuYW1lLCBHc3RQYWRMaW5rQ2hlY2sgZmxhZ3MpCit7CisgIGNvbnN0IEdMaXN0ICpzcmNwYWRzLCAqZGVzdHBhZHMsICpzcmN0ZW1wbHMsICpkZXN0dGVtcGxzLCAqbDsKKyAgR3N0UGFkICpzcmNwYWQsICpkZXN0cGFkOworICBHc3RQYWRUZW1wbGF0ZSAqc3JjdGVtcGwsICpkZXN0dGVtcGw7CisgIEdzdEVsZW1lbnRDbGFzcyAqc3JjY2xhc3MsICpkZXN0Y2xhc3M7CisKKyAgLyogY2hlY2tzICovCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoc3JjKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGRlc3QpLCBGQUxTRSk7CisKKyAgR1NUX0NBVF9JTkZPIChHU1RfQ0FUX0VMRU1FTlRfUEFEUywKKyAgICAgICJ0cnlpbmcgdG8gbGluayBlbGVtZW50ICVzOiVzIHRvIGVsZW1lbnQgJXM6JXMiLCBHU1RfRUxFTUVOVF9OQU1FIChzcmMpLAorICAgICAgc3JjcGFkbmFtZSA/IHNyY3BhZG5hbWUgOiAiKGFueSkiLCBHU1RfRUxFTUVOVF9OQU1FIChkZXN0KSwKKyAgICAgIGRlc3RwYWRuYW1lID8gZGVzdHBhZG5hbWUgOiAiKGFueSkiKTsKKworICAvKiBnZXQgYSBzcmMgcGFkICovCisgIGlmIChzcmNwYWRuYW1lKSB7CisgICAgLyogbmFtZSBzcGVjaWZpZWQsIGxvb2sgaXQgdXAgKi8KKyAgICBpZiAoIShzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCBzcmNwYWRuYW1lKSkpCisgICAgICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKHNyYywgc3JjcGFkbmFtZSk7CisgICAgaWYgKCFzcmNwYWQpIHsKKyAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfRUxFTUVOVF9QQURTLCAibm8gcGFkICVzOiVzIiwKKyAgICAgICAgICBHU1RfRUxFTUVOVF9OQU1FIChzcmMpLCBzcmNwYWRuYW1lKTsKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKCEoR1NUX1BBRF9ESVJFQ1RJT04gKHNyY3BhZCkgPT0gR1NUX1BBRF9TUkMpKSB7CisgICAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfRUxFTUVOVF9QQURTLCAicGFkICVzOiVzIGlzIG5vIHNyYyBwYWQiLAorICAgICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChzcmNwYWQpKTsKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgfQorICAgICAgaWYgKEdTVF9QQURfUEVFUiAoc3JjcGFkKSAhPSBOVUxMKSB7CisgICAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfRUxFTUVOVF9QQURTLAorICAgICAgICAgICAgInBhZCAlczolcyBpcyBhbHJlYWR5IGxpbmtlZCB0byAlczolcyIsIEdTVF9ERUJVR19QQURfTkFNRSAoc3JjcGFkKSwKKyAgICAgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAoR1NUX1BBRF9QRUVSIChzcmNwYWQpKSk7CisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgIH0KKyAgICB9CisgICAgc3JjcGFkcyA9IE5VTEw7CisgIH0gZWxzZSB7CisgICAgLyogbm8gbmFtZSBnaXZlbiwgZ2V0IHRoZSBmaXJzdCBhdmFpbGFibGUgcGFkICovCisgICAgR1NUX09CSkVDVF9MT0NLIChzcmMpOworICAgIHNyY3BhZHMgPSBHU1RfRUxFTUVOVF9QQURTIChzcmMpOworICAgIHNyY3BhZCA9IHNyY3BhZHMgPyBHU1RfUEFEX0NBU1QgKHNyY3BhZHMtPmRhdGEpIDogTlVMTDsKKyAgICBpZiAoc3JjcGFkKQorICAgICAgZ3N0X29iamVjdF9yZWYgKHNyY3BhZCk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyYyk7CisgIH0KKworICAvKiBnZXQgYSBkZXN0aW5hdGlvbiBwYWQgKi8KKyAgaWYgKGRlc3RwYWRuYW1lKSB7CisgICAgLyogbmFtZSBzcGVjaWZpZWQsIGxvb2sgaXQgdXAgKi8KKyAgICBpZiAoIShkZXN0cGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGRlc3QsIGRlc3RwYWRuYW1lKSkpCisgICAgICBkZXN0cGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChkZXN0LCBkZXN0cGFkbmFtZSk7CisgICAgaWYgKCFkZXN0cGFkKSB7CisgICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0VMRU1FTlRfUEFEUywgIm5vIHBhZCAlczolcyIsCisgICAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZGVzdCksIGRlc3RwYWRuYW1lKTsKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKCEoR1NUX1BBRF9ESVJFQ1RJT04gKGRlc3RwYWQpID09IEdTVF9QQURfU0lOSykpIHsKKyAgICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsICJwYWQgJXM6JXMgaXMgbm8gc2luayBwYWQiLAorICAgICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChkZXN0cGFkKSk7CisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGRlc3RwYWQpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICB9CisgICAgICBpZiAoR1NUX1BBRF9QRUVSIChkZXN0cGFkKSAhPSBOVUxMKSB7CisgICAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfRUxFTUVOVF9QQURTLAorICAgICAgICAgICAgInBhZCAlczolcyBpcyBhbHJlYWR5IGxpbmtlZCB0byAlczolcyIsCisgICAgICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKGRlc3RwYWQpLAorICAgICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChHU1RfUEFEX1BFRVIgKGRlc3RwYWQpKSk7CisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGRlc3RwYWQpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICB9CisgICAgfQorICAgIGRlc3RwYWRzID0gTlVMTDsKKyAgfSBlbHNlIHsKKyAgICAvKiBubyBuYW1lIGdpdmVuLCBnZXQgdGhlIGZpcnN0IGF2YWlsYWJsZSBwYWQgKi8KKyAgICBHU1RfT0JKRUNUX0xPQ0sgKGRlc3QpOworICAgIGRlc3RwYWRzID0gR1NUX0VMRU1FTlRfUEFEUyAoZGVzdCk7CisgICAgZGVzdHBhZCA9IGRlc3RwYWRzID8gR1NUX1BBRF9DQVNUIChkZXN0cGFkcy0+ZGF0YSkgOiBOVUxMOworICAgIGlmIChkZXN0cGFkKQorICAgICAgZ3N0X29iamVjdF9yZWYgKGRlc3RwYWQpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChkZXN0KTsKKyAgfQorCisgIGlmIChzcmNwYWRuYW1lICYmIGRlc3RwYWRuYW1lKSB7CisgICAgZ2Jvb2xlYW4gcmVzdWx0OworCisgICAgLyogdHdvIGV4cGxpY2l0bHkgc3BlY2lmaWVkIHBhZHMgKi8KKyAgICByZXN1bHQgPSBwYWRfbGlua19tYXliZV9naG9zdGluZyAoc3JjcGFkLCBkZXN0cGFkLCBmbGFncyk7CisKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKGRlc3RwYWQpOworCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIGlmIChzcmNwYWQpIHsKKyAgICAvKiBsb29wIHRocm91Z2ggdGhlIGFsbG93ZWQgcGFkcyBpbiB0aGUgc291cmNlLCB0cnlpbmcgdG8gZmluZCBhCisgICAgICogY29tcGF0aWJsZSBkZXN0aW5hdGlvbiBwYWQgKi8KKyAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0VMRU1FTlRfUEFEUywKKyAgICAgICAgImxvb3BpbmcgdGhyb3VnaCBhbGxvd2VkIHNyYyBhbmQgZGVzdCBwYWRzIik7CisgICAgZG8geworICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsICJ0cnlpbmcgc3JjIHBhZCAlczolcyIsCisgICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChzcmNwYWQpKTsKKyAgICAgIGlmICgoR1NUX1BBRF9ESVJFQ1RJT04gKHNyY3BhZCkgPT0gR1NUX1BBRF9TUkMpICYmCisgICAgICAgICAgKEdTVF9QQURfUEVFUiAoc3JjcGFkKSA9PSBOVUxMKSkgeworICAgICAgICBHc3RQYWQgKnRlbXA7CisKKyAgICAgICAgaWYgKGRlc3RwYWRuYW1lKSB7CisgICAgICAgICAgdGVtcCA9IGRlc3RwYWQ7CisgICAgICAgICAgZ3N0X29iamVjdF9yZWYgKHRlbXApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRlbXAgPSBnc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWQgKGRlc3QsIHNyY3BhZCwgTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodGVtcCAmJiBwYWRfbGlua19tYXliZV9naG9zdGluZyAoc3JjcGFkLCB0ZW1wLCBmbGFncykpIHsKKyAgICAgICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0VMRU1FTlRfUEFEUywgImxpbmtlZCBwYWQgJXM6JXMgdG8gcGFkICVzOiVzIiwKKyAgICAgICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChzcmNwYWQpLCBHU1RfREVCVUdfUEFEX05BTUUgKHRlbXApKTsKKyAgICAgICAgICBpZiAoZGVzdHBhZCkKKyAgICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGRlc3RwYWQpOworICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7CisgICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAodGVtcCk7CisgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKworICAgICAgICBpZiAodGVtcCkgeworICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHRlbXApOworICAgICAgICB9CisgICAgICB9CisgICAgICAvKiBmaW5kIGEgYmV0dGVyIHdheSBmb3IgdGhpcyBtZXNzICovCisgICAgICBpZiAoc3JjcGFkcykgeworICAgICAgICBzcmNwYWRzID0gZ19saXN0X25leHQgKHNyY3BhZHMpOworICAgICAgICBpZiAoc3JjcGFkcykgeworICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7CisgICAgICAgICAgc3JjcGFkID0gR1NUX1BBRF9DQVNUIChzcmNwYWRzLT5kYXRhKTsKKyAgICAgICAgICBnc3Rfb2JqZWN0X3JlZiAoc3JjcGFkKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0gd2hpbGUgKHNyY3BhZHMpOworICB9CisgIGlmIChzcmNwYWRuYW1lKSB7CisgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsICJubyBsaW5rIHBvc3NpYmxlIGZyb20gJXM6JXMgdG8gJXMiLAorICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHNyY3BhZCksIEdTVF9FTEVNRU5UX05BTUUgKGRlc3QpKTsKKyAgICBpZiAoZGVzdHBhZCkKKyAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGRlc3RwYWQpOworICAgIGRlc3RwYWQgPSBOVUxMOworICB9CisgIGlmIChzcmNwYWQpCisgICAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKKyAgc3JjcGFkID0gTlVMTDsKKworICBpZiAoZGVzdHBhZCkgeworICAgIC8qIGxvb3AgdGhyb3VnaCB0aGUgZXhpc3RpbmcgcGFkcyBpbiB0aGUgZGVzdGluYXRpb24gKi8KKyAgICBkbyB7CisgICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0VMRU1FTlRfUEFEUywgInRyeWluZyBkZXN0IHBhZCAlczolcyIsCisgICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChkZXN0cGFkKSk7CisgICAgICBpZiAoKEdTVF9QQURfRElSRUNUSU9OIChkZXN0cGFkKSA9PSBHU1RfUEFEX1NJTkspICYmCisgICAgICAgICAgKEdTVF9QQURfUEVFUiAoZGVzdHBhZCkgPT0gTlVMTCkpIHsKKyAgICAgICAgR3N0UGFkICp0ZW1wID0gZ3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkIChzcmMsIGRlc3RwYWQsIE5VTEwpOworCisgICAgICAgIGlmICh0ZW1wICYmIHBhZF9saW5rX21heWJlX2dob3N0aW5nICh0ZW1wLCBkZXN0cGFkLCBmbGFncykpIHsKKyAgICAgICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0VMRU1FTlRfUEFEUywgImxpbmtlZCBwYWQgJXM6JXMgdG8gcGFkICVzOiVzIiwKKyAgICAgICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FICh0ZW1wKSwgR1NUX0RFQlVHX1BBRF9OQU1FIChkZXN0cGFkKSk7CisgICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAodGVtcCk7CisgICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAoZGVzdHBhZCk7CisgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRlbXApIHsKKyAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmICh0ZW1wKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYgKGRlc3RwYWRzKSB7CisgICAgICAgIGRlc3RwYWRzID0gZ19saXN0X25leHQgKGRlc3RwYWRzKTsKKyAgICAgICAgaWYgKGRlc3RwYWRzKSB7CisgICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAoZGVzdHBhZCk7CisgICAgICAgICAgZGVzdHBhZCA9IEdTVF9QQURfQ0FTVCAoZGVzdHBhZHMtPmRhdGEpOworICAgICAgICAgIGdzdF9vYmplY3RfcmVmIChkZXN0cGFkKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0gd2hpbGUgKGRlc3RwYWRzKTsKKyAgfQorCisgIGlmIChkZXN0cGFkbmFtZSkgeworICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfRUxFTUVOVF9QQURTLCAibm8gbGluayBwb3NzaWJsZSBmcm9tICVzIHRvICVzOiVzIiwKKyAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoc3JjKSwgR1NUX0RFQlVHX1BBRF9OQU1FIChkZXN0cGFkKSk7CisgICAgZ3N0X29iamVjdF91bnJlZiAoZGVzdHBhZCk7CisgICAgcmV0dXJuIEZBTFNFOworICB9IGVsc2UgeworICAgIGlmIChkZXN0cGFkKQorICAgICAgZ3N0X29iamVjdF91bnJlZiAoZGVzdHBhZCk7CisgICAgZGVzdHBhZCA9IE5VTEw7CisgIH0KKworICBzcmNjbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAoc3JjKTsKKyAgZGVzdGNsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChkZXN0KTsKKworICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0VMRU1FTlRfUEFEUywKKyAgICAgICJ3ZSBtaWdodCBoYXZlIHJlcXVlc3QgcGFkcyBvbiBib3RoIHNpZGVzLCBjaGVja2luZy4uLiIpOworICBzcmN0ZW1wbHMgPSBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlX2xpc3QgKHNyY2NsYXNzKTsKKyAgZGVzdHRlbXBscyA9IGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGVfbGlzdCAoZGVzdGNsYXNzKTsKKworICBpZiAoc3JjdGVtcGxzICYmIGRlc3R0ZW1wbHMpIHsKKyAgICB3aGlsZSAoc3JjdGVtcGxzKSB7CisgICAgICBzcmN0ZW1wbCA9IChHc3RQYWRUZW1wbGF0ZSAqKSBzcmN0ZW1wbHMtPmRhdGE7CisgICAgICBpZiAoc3JjdGVtcGwtPnByZXNlbmNlID09IEdTVF9QQURfUkVRVUVTVCkgeworICAgICAgICBmb3IgKGwgPSBkZXN0dGVtcGxzOyBsOyBsID0gbC0+bmV4dCkgeworICAgICAgICAgIGRlc3R0ZW1wbCA9IChHc3RQYWRUZW1wbGF0ZSAqKSBsLT5kYXRhOworICAgICAgICAgIGlmIChkZXN0dGVtcGwtPnByZXNlbmNlID09IEdTVF9QQURfUkVRVUVTVCAmJgorICAgICAgICAgICAgICBkZXN0dGVtcGwtPmRpcmVjdGlvbiAhPSBzcmN0ZW1wbC0+ZGlyZWN0aW9uKSB7CisgICAgICAgICAgICBHc3RDYXBzICpzcmNjYXBzLCAqZGVzdGNhcHM7CisKKyAgICAgICAgICAgIHNyY2NhcHMgPSBnc3RfcGFkX3RlbXBsYXRlX2dldF9jYXBzIChzcmN0ZW1wbCk7CisgICAgICAgICAgICBkZXN0Y2FwcyA9IGdzdF9wYWRfdGVtcGxhdGVfZ2V0X2NhcHMgKGRlc3R0ZW1wbCk7CisgICAgICAgICAgICBpZiAoZ3N0X2NhcHNfaXNfYWx3YXlzX2NvbXBhdGlibGUgKHNyY2NhcHMsIGRlc3RjYXBzKSkgeworICAgICAgICAgICAgICBzcmNwYWQgPQorICAgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQgKHNyYywgc3JjdGVtcGwsCisgICAgICAgICAgICAgICAgICBzcmN0ZW1wbC0+bmFtZV90ZW1wbGF0ZSwgTlVMTCk7CisgICAgICAgICAgICAgIGRlc3RwYWQgPQorICAgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQgKGRlc3QsIGRlc3R0ZW1wbCwKKyAgICAgICAgICAgICAgICAgIGRlc3R0ZW1wbC0+bmFtZV90ZW1wbGF0ZSwgTlVMTCk7CisgICAgICAgICAgICAgIGlmIChzcmNwYWQgJiYgZGVzdHBhZAorICAgICAgICAgICAgICAgICAgJiYgcGFkX2xpbmtfbWF5YmVfZ2hvc3RpbmcgKHNyY3BhZCwgZGVzdHBhZCwgZmxhZ3MpKSB7CisgICAgICAgICAgICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsCisgICAgICAgICAgICAgICAgICAgICJsaW5rZWQgcGFkICVzOiVzIHRvIHBhZCAlczolcyIsCisgICAgICAgICAgICAgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAoc3JjcGFkKSwgR1NUX0RFQlVHX1BBRF9OQU1FIChkZXN0cGFkKSk7CisgICAgICAgICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKKyAgICAgICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChkZXN0cGFkKTsKKyAgICAgICAgICAgICAgICBnc3RfY2Fwc191bnJlZiAoc3JjY2Fwcyk7CisgICAgICAgICAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKGRlc3RjYXBzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAvKiBpdCBmYWlsZWQsIHNvIHdlIHJlbGVhc2UgdGhlIHJlcXVlc3QgcGFkcyAqLworICAgICAgICAgICAgICBpZiAoc3JjcGFkKQorICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKHNyYywgc3JjcGFkKTsKKyAgICAgICAgICAgICAgaWYgKGRlc3RwYWQpCisgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAoZGVzdCwgZGVzdHBhZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBnc3RfY2Fwc191bnJlZiAoc3JjY2Fwcyk7CisgICAgICAgICAgICBnc3RfY2Fwc191bnJlZiAoZGVzdGNhcHMpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgc3JjdGVtcGxzID0gc3JjdGVtcGxzLT5uZXh0OworICAgIH0KKyAgfQorCisgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfRUxFTUVOVF9QQURTLCAibm8gbGluayBwb3NzaWJsZSBmcm9tICVzIHRvICVzIiwKKyAgICAgIEdTVF9FTEVNRU5UX05BTUUgKHNyYyksIEdTVF9FTEVNRU5UX05BTUUgKGRlc3QpKTsKKyAgcmV0dXJuIEZBTFNFOworfQorCisvKioKKyAqIGdzdF9lbGVtZW50X2xpbmtfcGFkczoKKyAqIEBzcmM6IGEgI0dzdEVsZW1lbnQgY29udGFpbmluZyB0aGUgc291cmNlIHBhZC4KKyAqIEBzcmNwYWRuYW1lOiAoYWxsb3ctbm9uZSk6IHRoZSBuYW1lIG9mIHRoZSAjR3N0UGFkIGluIHNvdXJjZSBlbGVtZW50CisgKiAgICAgb3IgTlVMTCBmb3IgYW55IHBhZC4KKyAqIEBkZXN0OiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjR3N0RWxlbWVudCBjb250YWluaW5nIHRoZSBkZXN0aW5hdGlvbiBwYWQuCisgKiBAZGVzdHBhZG5hbWU6IChhbGxvdy1ub25lKTogdGhlIG5hbWUgb2YgdGhlICNHc3RQYWQgaW4gZGVzdGluYXRpb24gZWxlbWVudCwKKyAqIG9yIE5VTEwgZm9yIGFueSBwYWQuCisgKgorICogTGlua3MgdGhlIHR3byBuYW1lZCBwYWRzIG9mIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGVsZW1lbnRzLgorICogU2lkZSBlZmZlY3QgaXMgdGhhdCBpZiBvbmUgb2YgdGhlIHBhZHMgaGFzIG5vIHBhcmVudCwgaXQgYmVjb21lcyBhCisgKiBjaGlsZCBvZiB0aGUgcGFyZW50IG9mIHRoZSBvdGhlciBlbGVtZW50LiAgSWYgdGhleSBoYXZlIGRpZmZlcmVudAorICogcGFyZW50cywgdGhlIGxpbmsgZmFpbHMuCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgcGFkcyBjb3VsZCBiZSBsaW5rZWQsIEZBTFNFIG90aGVyd2lzZS4KKyAqLworZ2Jvb2xlYW4KK2dzdF9lbGVtZW50X2xpbmtfcGFkcyAoR3N0RWxlbWVudCAqIHNyYywgY29uc3QgZ2NoYXIgKiBzcmNwYWRuYW1lLAorICAgIEdzdEVsZW1lbnQgKiBkZXN0LCBjb25zdCBnY2hhciAqIGRlc3RwYWRuYW1lKQoreworICByZXR1cm4gZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwgKHNyYywgc3JjcGFkbmFtZSwgZGVzdCwgZGVzdHBhZG5hbWUsCisgICAgICBHU1RfUEFEX0xJTktfQ0hFQ0tfREVGQVVMVCk7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfbGlua19wYWRzX2ZpbHRlcmVkOgorICogQHNyYzogYSAjR3N0RWxlbWVudCBjb250YWluaW5nIHRoZSBzb3VyY2UgcGFkLgorICogQHNyY3BhZG5hbWU6IChhbGxvdy1ub25lKTogdGhlIG5hbWUgb2YgdGhlICNHc3RQYWQgaW4gc291cmNlIGVsZW1lbnQKKyAqICAgICBvciBOVUxMIGZvciBhbnkgcGFkLgorICogQGRlc3Q6ICh0cmFuc2ZlciBub25lKTogdGhlICNHc3RFbGVtZW50IGNvbnRhaW5pbmcgdGhlIGRlc3RpbmF0aW9uIHBhZC4KKyAqIEBkZXN0cGFkbmFtZTogKGFsbG93LW5vbmUpOiB0aGUgbmFtZSBvZiB0aGUgI0dzdFBhZCBpbiBkZXN0aW5hdGlvbiBlbGVtZW50CisgKiAgICAgb3IgTlVMTCBmb3IgYW55IHBhZC4KKyAqIEBmaWx0ZXI6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IHRoZSAjR3N0Q2FwcyB0byBmaWx0ZXIgdGhlIGxpbmssCisgKiAgICAgb3IgI05VTEwgZm9yIG5vIGZpbHRlci4KKyAqCisgKiBMaW5rcyB0aGUgdHdvIG5hbWVkIHBhZHMgb2YgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZWxlbWVudHMuIFNpZGUgZWZmZWN0CisgKiBpcyB0aGF0IGlmIG9uZSBvZiB0aGUgcGFkcyBoYXMgbm8gcGFyZW50LCBpdCBiZWNvbWVzIGEgY2hpbGQgb2YgdGhlIHBhcmVudCBvZgorICogdGhlIG90aGVyIGVsZW1lbnQuIElmIHRoZXkgaGF2ZSBkaWZmZXJlbnQgcGFyZW50cywgdGhlIGxpbmsgZmFpbHMuIElmIEBjYXBzCisgKiBpcyBub3QgI05VTEwsIG1ha2VzIHN1cmUgdGhhdCB0aGUgY2FwcyBvZiB0aGUgbGluayBpcyBhIHN1YnNldCBvZiBAY2Fwcy4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBwYWRzIGNvdWxkIGJlIGxpbmtlZCwgRkFMU0Ugb3RoZXJ3aXNlLgorICovCitnYm9vbGVhbgorZ3N0X2VsZW1lbnRfbGlua19wYWRzX2ZpbHRlcmVkIChHc3RFbGVtZW50ICogc3JjLCBjb25zdCBnY2hhciAqIHNyY3BhZG5hbWUsCisgICAgR3N0RWxlbWVudCAqIGRlc3QsIGNvbnN0IGdjaGFyICogZGVzdHBhZG5hbWUsIEdzdENhcHMgKiBmaWx0ZXIpCit7CisgIC8qIGNoZWNrcyAqLworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKHNyYyksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChkZXN0KSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmlsdGVyID09IE5VTEwgfHwgR1NUX0lTX0NBUFMgKGZpbHRlciksIEZBTFNFKTsKKworICBpZiAoZmlsdGVyKSB7CisgICAgR3N0RWxlbWVudCAqY2Fwc2ZpbHRlcjsKKyAgICBHc3RPYmplY3QgKnBhcmVudDsKKyAgICBHc3RTdGF0ZSBzdGF0ZSwgcGVuZGluZzsKKyAgICBnYm9vbGVhbiBscjEsIGxyMjsKKworICAgIGNhcHNmaWx0ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJjYXBzZmlsdGVyIiwgTlVMTCk7CisgICAgaWYgKCFjYXBzZmlsdGVyKSB7CisgICAgICBHU1RfRVJST1IgKCJDb3VsZCBub3QgbWFrZSBhIGNhcHNmaWx0ZXIiKTsKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBwYXJlbnQgPSBnc3Rfb2JqZWN0X2dldF9wYXJlbnQgKEdTVF9PQkpFQ1QgKHNyYykpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQklOIChwYXJlbnQpLCBGQUxTRSk7CisKKyAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKEdTVF9FTEVNRU5UX0NBU1QgKHBhcmVudCksICZzdGF0ZSwgJnBlbmRpbmcsIDApOworCisgICAgaWYgKCFnc3RfYmluX2FkZCAoR1NUX0JJTiAocGFyZW50KSwgY2Fwc2ZpbHRlcikpIHsKKyAgICAgIEdTVF9FUlJPUiAoIkNvdWxkIG5vdCBhZGQgY2Fwc2ZpbHRlciIpOworICAgICAgZ3N0X29iamVjdF91bnJlZiAoY2Fwc2ZpbHRlcik7CisgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwYXJlbnQpOworICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIGlmIChwZW5kaW5nICE9IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcpCisgICAgICBzdGF0ZSA9IHBlbmRpbmc7CisKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGNhcHNmaWx0ZXIsIHN0YXRlKTsKKworICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhcmVudCk7CisKKyAgICBnX29iamVjdF9zZXQgKGNhcHNmaWx0ZXIsICJjYXBzIiwgZmlsdGVyLCBOVUxMKTsKKworICAgIGxyMSA9IGdzdF9lbGVtZW50X2xpbmtfcGFkcyAoc3JjLCBzcmNwYWRuYW1lLCBjYXBzZmlsdGVyLCAic2luayIpOworICAgIGxyMiA9IGdzdF9lbGVtZW50X2xpbmtfcGFkcyAoY2Fwc2ZpbHRlciwgInNyYyIsIGRlc3QsIGRlc3RwYWRuYW1lKTsKKyAgICBpZiAobHIxICYmIGxyMikgeworICAgICAgcmV0dXJuIFRSVUU7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmICghbHIxKSB7CisgICAgICAgIEdTVF9JTkZPICgiQ291bGQgbm90IGxpbmsgcGFkczogJXM6JXMgLSBjYXBzZmlsdGVyOnNpbmsiLAorICAgICAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoc3JjKSwgc3JjcGFkbmFtZSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBHU1RfSU5GTyAoIkNvdWxkIG5vdCBsaW5rIHBhZHM6IGNhcHNmaWx0ZXI6c3JjIC0gJXM6JXMiLAorICAgICAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZGVzdCksIGRlc3RwYWRuYW1lKTsKKyAgICAgIH0KKyAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoY2Fwc2ZpbHRlciwgR1NUX1NUQVRFX05VTEwpOworICAgICAgLyogdGhpcyB3aWxsIHVubGluayBhbmQgdW5yZWYgYXMgYXBwcm9wcmlhdGUgKi8KKyAgICAgIGdzdF9iaW5fcmVtb3ZlIChHU1RfQklOIChHU1RfT0JKRUNUX1BBUkVOVCAoY2Fwc2ZpbHRlcikpLCBjYXBzZmlsdGVyKTsKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgaWYgKGdzdF9lbGVtZW50X2xpbmtfcGFkcyAoc3JjLCBzcmNwYWRuYW1lLCBkZXN0LCBkZXN0cGFkbmFtZSkpIHsKKyAgICAgIHJldHVybiBUUlVFOworICAgIH0gZWxzZSB7CisgICAgICBHU1RfSU5GTyAoIkNvdWxkIG5vdCBsaW5rIHBhZHM6ICVzOiVzIC0gJXM6JXMiLCBHU1RfRUxFTUVOVF9OQU1FIChzcmMpLAorICAgICAgICAgIHNyY3BhZG5hbWUsIEdTVF9FTEVNRU5UX05BTUUgKGRlc3QpLCBkZXN0cGFkbmFtZSk7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICB9Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfbGluazoKKyAqIEBzcmM6ICh0cmFuc2ZlciBub25lKTogYSAjR3N0RWxlbWVudCBjb250YWluaW5nIHRoZSBzb3VyY2UgcGFkLgorICogQGRlc3Q6ICh0cmFuc2ZlciBub25lKTogdGhlICNHc3RFbGVtZW50IGNvbnRhaW5pbmcgdGhlIGRlc3RpbmF0aW9uIHBhZC4KKyAqCisgKiBMaW5rcyBAc3JjIHRvIEBkZXN0LiBUaGUgbGluayBtdXN0IGJlIGZyb20gc291cmNlIHRvCisgKiBkZXN0aW5hdGlvbjsgdGhlIG90aGVyIGRpcmVjdGlvbiB3aWxsIG5vdCBiZSB0cmllZC4gVGhlIGZ1bmN0aW9uIGxvb2tzIGZvcgorICogZXhpc3RpbmcgcGFkcyB0aGF0IGFyZW4ndCBsaW5rZWQgeWV0LiBJdCB3aWxsIHJlcXVlc3QgbmV3IHBhZHMgaWYgbmVjZXNzYXJ5LgorICogU3VjaCBwYWRzIG5lZWQgdG8gYmUgcmVsZWFzZWQgbWFudWFsbHkgd2hlbiB1bmxpbmtpbmcuCisgKiBJZiBtdWx0aXBsZSBsaW5rcyBhcmUgcG9zc2libGUsIG9ubHkgb25lIGlzIGVzdGFibGlzaGVkLgorICoKKyAqIE1ha2Ugc3VyZSB5b3UgaGF2ZSBhZGRlZCB5b3VyIGVsZW1lbnRzIHRvIGEgYmluIG9yIHBpcGVsaW5lIHdpdGgKKyAqIGdzdF9iaW5fYWRkKCkgYmVmb3JlIHRyeWluZyB0byBsaW5rIHRoZW0uCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgZWxlbWVudHMgY291bGQgYmUgbGlua2VkLCBGQUxTRSBvdGhlcndpc2UuCisgKi8KK2dib29sZWFuCitnc3RfZWxlbWVudF9saW5rIChHc3RFbGVtZW50ICogc3JjLCBHc3RFbGVtZW50ICogZGVzdCkKK3sKKyAgcmV0dXJuIGdzdF9lbGVtZW50X2xpbmtfcGFkcyAoc3JjLCBOVUxMLCBkZXN0LCBOVUxMKTsKK30KKworLyoqCisgKiBnc3RfZWxlbWVudF9saW5rX21hbnk6CisgKiBAZWxlbWVudF8xOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBmaXJzdCAjR3N0RWxlbWVudCBpbiB0aGUgbGluayBjaGFpbi4KKyAqIEBlbGVtZW50XzI6ICh0cmFuc2ZlciBub25lKTogdGhlIHNlY29uZCAjR3N0RWxlbWVudCBpbiB0aGUgbGluayBjaGFpbi4KKyAqIEAuLi46IHRoZSBOVUxMLXRlcm1pbmF0ZWQgbGlzdCBvZiBlbGVtZW50cyB0byBsaW5rIGluIG9yZGVyLgorICoKKyAqIENoYWluIHRvZ2V0aGVyIGEgc2VyaWVzIG9mIGVsZW1lbnRzLiBVc2VzIGdzdF9lbGVtZW50X2xpbmsoKS4KKyAqIE1ha2Ugc3VyZSB5b3UgaGF2ZSBhZGRlZCB5b3VyIGVsZW1lbnRzIHRvIGEgYmluIG9yIHBpcGVsaW5lIHdpdGgKKyAqIGdzdF9iaW5fYWRkKCkgYmVmb3JlIHRyeWluZyB0byBsaW5rIHRoZW0uCisgKgorICogUmV0dXJuczogVFJVRSBvbiBzdWNjZXNzLCBGQUxTRSBvdGhlcndpc2UuCisgKi8KK2dib29sZWFuCitnc3RfZWxlbWVudF9saW5rX21hbnkgKEdzdEVsZW1lbnQgKiBlbGVtZW50XzEsIEdzdEVsZW1lbnQgKiBlbGVtZW50XzIsIC4uLikKK3sKKyAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKKyAgdmFfbGlzdCBhcmdzOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudF8xKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnRfMiksIEZBTFNFKTsKKworICB2YV9zdGFydCAoYXJncywgZWxlbWVudF8yKTsKKworICB3aGlsZSAoZWxlbWVudF8yKSB7CisgICAgaWYgKCFnc3RfZWxlbWVudF9saW5rIChlbGVtZW50XzEsIGVsZW1lbnRfMikpIHsKKyAgICAgIHJlcyA9IEZBTFNFOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZWxlbWVudF8xID0gZWxlbWVudF8yOworICAgIGVsZW1lbnRfMiA9IHZhX2FyZyAoYXJncywgR3N0RWxlbWVudCAqKTsKKyAgfQorCisgIHZhX2VuZCAoYXJncyk7CisKKyAgcmV0dXJuIHJlczsKK30KKworLyoqCisgKiBnc3RfZWxlbWVudF9saW5rX2ZpbHRlcmVkOgorICogQHNyYzogYSAjR3N0RWxlbWVudCBjb250YWluaW5nIHRoZSBzb3VyY2UgcGFkLgorICogQGRlc3Q6ICh0cmFuc2ZlciBub25lKTogdGhlICNHc3RFbGVtZW50IGNvbnRhaW5pbmcgdGhlIGRlc3RpbmF0aW9uIHBhZC4KKyAqIEBmaWx0ZXI6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IHRoZSAjR3N0Q2FwcyB0byBmaWx0ZXIgdGhlIGxpbmssCisgKiAgICAgb3IgI05VTEwgZm9yIG5vIGZpbHRlci4KKyAqCisgKiBMaW5rcyBAc3JjIHRvIEBkZXN0IHVzaW5nIHRoZSBnaXZlbiBjYXBzIGFzIGZpbHRlcmNhcHMuCisgKiBUaGUgbGluayBtdXN0IGJlIGZyb20gc291cmNlIHRvCisgKiBkZXN0aW5hdGlvbjsgdGhlIG90aGVyIGRpcmVjdGlvbiB3aWxsIG5vdCBiZSB0cmllZC4gVGhlIGZ1bmN0aW9uIGxvb2tzIGZvcgorICogZXhpc3RpbmcgcGFkcyB0aGF0IGFyZW4ndCBsaW5rZWQgeWV0LiBJdCB3aWxsIHJlcXVlc3QgbmV3IHBhZHMgaWYgbmVjZXNzYXJ5LgorICogSWYgbXVsdGlwbGUgbGlua3MgYXJlIHBvc3NpYmxlLCBvbmx5IG9uZSBpcyBlc3RhYmxpc2hlZC4KKyAqCisgKiBNYWtlIHN1cmUgeW91IGhhdmUgYWRkZWQgeW91ciBlbGVtZW50cyB0byBhIGJpbiBvciBwaXBlbGluZSB3aXRoCisgKiBnc3RfYmluX2FkZCgpIGJlZm9yZSB0cnlpbmcgdG8gbGluayB0aGVtLgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIHBhZHMgY291bGQgYmUgbGlua2VkLCBGQUxTRSBvdGhlcndpc2UuCisgKi8KK2dib29sZWFuCitnc3RfZWxlbWVudF9saW5rX2ZpbHRlcmVkIChHc3RFbGVtZW50ICogc3JjLCBHc3RFbGVtZW50ICogZGVzdCwKKyAgICBHc3RDYXBzICogZmlsdGVyKQoreworICByZXR1cm4gZ3N0X2VsZW1lbnRfbGlua19wYWRzX2ZpbHRlcmVkIChzcmMsIE5VTEwsIGRlc3QsIE5VTEwsIGZpbHRlcik7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfdW5saW5rX3BhZHM6CisgKiBAc3JjOiBhICh0cmFuc2ZlciBub25lKTogI0dzdEVsZW1lbnQgY29udGFpbmluZyB0aGUgc291cmNlIHBhZC4KKyAqIEBzcmNwYWRuYW1lOiB0aGUgbmFtZSBvZiB0aGUgI0dzdFBhZCBpbiBzb3VyY2UgZWxlbWVudC4KKyAqIEBkZXN0OiAodHJhbnNmZXIgbm9uZSk6IGEgI0dzdEVsZW1lbnQgY29udGFpbmluZyB0aGUgZGVzdGluYXRpb24gcGFkLgorICogQGRlc3RwYWRuYW1lOiB0aGUgbmFtZSBvZiB0aGUgI0dzdFBhZCBpbiBkZXN0aW5hdGlvbiBlbGVtZW50LgorICoKKyAqIFVubGlua3MgdGhlIHR3byBuYW1lZCBwYWRzIG9mIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGVsZW1lbnRzLgorICoKKyAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgZ3N0X3BhZF91bmxpbmsoKS4KKyAqLwordm9pZAorZ3N0X2VsZW1lbnRfdW5saW5rX3BhZHMgKEdzdEVsZW1lbnQgKiBzcmMsIGNvbnN0IGdjaGFyICogc3JjcGFkbmFtZSwKKyAgICBHc3RFbGVtZW50ICogZGVzdCwgY29uc3QgZ2NoYXIgKiBkZXN0cGFkbmFtZSkKK3sKKyAgR3N0UGFkICpzcmNwYWQsICpkZXN0cGFkOworICBnYm9vbGVhbiBzcmNyZXF1ZXN0LCBkZXN0cmVxdWVzdDsKKworICBzcmNyZXF1ZXN0ID0gZGVzdHJlcXVlc3QgPSBGQUxTRTsKKworICBnX3JldHVybl9pZl9mYWlsIChzcmMgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChzcmMpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoc3JjcGFkbmFtZSAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoZGVzdCAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGRlc3QpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoZGVzdHBhZG5hbWUgIT0gTlVMTCk7CisKKyAgLyogb2J0YWluIHRoZSBwYWRzIHJlcXVlc3RlZCAqLworICBpZiAoIShzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCBzcmNwYWRuYW1lKSkpCisgICAgaWYgKChzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKHNyYywgc3JjcGFkbmFtZSkpKQorICAgICAgc3JjcmVxdWVzdCA9IFRSVUU7CisgIGlmIChzcmNwYWQgPT0gTlVMTCkgeworICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc3JjLCAic291cmNlIGVsZW1lbnQgaGFzIG5vIHBhZCBcIiVzXCIiLCBzcmNwYWRuYW1lKTsKKyAgICByZXR1cm47CisgIH0KKyAgaWYgKCEoZGVzdHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChkZXN0LCBkZXN0cGFkbmFtZSkpKQorICAgIGlmICgoZGVzdHBhZCA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoZGVzdCwgZGVzdHBhZG5hbWUpKSkKKyAgICAgIGRlc3RyZXF1ZXN0ID0gVFJVRTsKKyAgaWYgKGRlc3RwYWQgPT0gTlVMTCkgeworICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVzdCwgImRlc3RpbmF0aW9uIGVsZW1lbnQgaGFzIG5vIHBhZCBcIiVzXCIiLAorICAgICAgICBkZXN0cGFkbmFtZSk7CisgICAgZ290byBmcmVlX3NyYzsKKyAgfQorCisgIC8qIHdlJ3JlIHNhdGlzZmllZCB0aGV5IGNhbiBiZSB1bmxpbmtlZCwgbGV0J3MgZG8gaXQgKi8KKyAgZ3N0X3BhZF91bmxpbmsgKHNyY3BhZCwgZGVzdHBhZCk7CisKKyAgaWYgKGRlc3RyZXF1ZXN0KQorICAgIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKGRlc3QsIGRlc3RwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChkZXN0cGFkKTsKKworZnJlZV9zcmM6CisgIGlmIChzcmNyZXF1ZXN0KQorICAgIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKHNyYywgc3JjcGFkKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKK30KKworLyoqCisgKiBnc3RfZWxlbWVudF91bmxpbmtfbWFueToKKyAqIEBlbGVtZW50XzE6ICh0cmFuc2ZlciBub25lKTogdGhlIGZpcnN0ICNHc3RFbGVtZW50IGluIHRoZSBsaW5rIGNoYWluLgorICogQGVsZW1lbnRfMjogKHRyYW5zZmVyIG5vbmUpOiB0aGUgc2Vjb25kICNHc3RFbGVtZW50IGluIHRoZSBsaW5rIGNoYWluLgorICogQC4uLjogdGhlIE5VTEwtdGVybWluYXRlZCBsaXN0IG9mIGVsZW1lbnRzIHRvIHVubGluayBpbiBvcmRlci4KKyAqCisgKiBVbmxpbmtzIGEgc2VyaWVzIG9mIGVsZW1lbnRzLiBVc2VzIGdzdF9lbGVtZW50X3VubGluaygpLgorICovCit2b2lkCitnc3RfZWxlbWVudF91bmxpbmtfbWFueSAoR3N0RWxlbWVudCAqIGVsZW1lbnRfMSwgR3N0RWxlbWVudCAqIGVsZW1lbnRfMiwgLi4uKQoreworICB2YV9saXN0IGFyZ3M7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoZWxlbWVudF8xICE9IE5VTEwgJiYgZWxlbWVudF8yICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudF8xKSAmJiBHU1RfSVNfRUxFTUVOVCAoZWxlbWVudF8yKSk7CisKKyAgdmFfc3RhcnQgKGFyZ3MsIGVsZW1lbnRfMik7CisKKyAgd2hpbGUgKGVsZW1lbnRfMikgeworICAgIGdzdF9lbGVtZW50X3VubGluayAoZWxlbWVudF8xLCBlbGVtZW50XzIpOworCisgICAgZWxlbWVudF8xID0gZWxlbWVudF8yOworICAgIGVsZW1lbnRfMiA9IHZhX2FyZyAoYXJncywgR3N0RWxlbWVudCAqKTsKKyAgfQorCisgIHZhX2VuZCAoYXJncyk7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfdW5saW5rOgorICogQHNyYzogKHRyYW5zZmVyIG5vbmUpOiB0aGUgc291cmNlICNHc3RFbGVtZW50IHRvIHVubGluay4KKyAqIEBkZXN0OiAodHJhbnNmZXIgbm9uZSk6IHRoZSBzaW5rICNHc3RFbGVtZW50IHRvIHVubGluay4KKyAqCisgKiBVbmxpbmtzIGFsbCBzb3VyY2UgcGFkcyBvZiB0aGUgc291cmNlIGVsZW1lbnQgd2l0aCBhbGwgc2luayBwYWRzCisgKiBvZiB0aGUgc2luayBlbGVtZW50IHRvIHdoaWNoIHRoZXkgYXJlIGxpbmtlZC4KKyAqCisgKiBJZiB0aGUgbGluayBoYXMgYmVlbiBtYWRlIHVzaW5nIGdzdF9lbGVtZW50X2xpbmsoKSwgaXQgY291bGQgaGF2ZSBjcmVhdGVkIGFuCisgKiByZXF1ZXN0cGFkLCB3aGljaCBoYXMgdG8gYmUgcmVsZWFzZWQgdXNpbmcgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCgpLgorICovCit2b2lkCitnc3RfZWxlbWVudF91bmxpbmsgKEdzdEVsZW1lbnQgKiBzcmMsIEdzdEVsZW1lbnQgKiBkZXN0KQoreworICBHc3RJdGVyYXRvciAqcGFkczsKKyAgZ2Jvb2xlYW4gZG9uZSA9IEZBTFNFOworICBHVmFsdWUgZGF0YSA9IHsgMCwgfTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoc3JjKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChkZXN0KSk7CisKKyAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsICJ1bmxpbmtpbmcgXCIlc1wiIGFuZCBcIiVzXCIiLAorICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoc3JjKSwgR1NUX0VMRU1FTlRfTkFNRSAoZGVzdCkpOworCisgIHBhZHMgPSBnc3RfZWxlbWVudF9pdGVyYXRlX3BhZHMgKHNyYyk7CisgIHdoaWxlICghZG9uZSkgeworICAgIHN3aXRjaCAoZ3N0X2l0ZXJhdG9yX25leHQgKHBhZHMsICZkYXRhKSkgeworICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfT0s6CisgICAgICB7CisgICAgICAgIEdzdFBhZCAqcGFkID0gZ192YWx1ZV9nZXRfb2JqZWN0ICgmZGF0YSk7CisKKyAgICAgICAgaWYgKEdTVF9QQURfSVNfU1JDIChwYWQpKSB7CisgICAgICAgICAgR3N0UGFkICpwZWVycGFkID0gZ3N0X3BhZF9nZXRfcGVlciAocGFkKTsKKworICAgICAgICAgIC8qIHNlZSBpZiB0aGUgcGFkIGlzIGxpbmtlZCBhbmQgaXMgcmVhbGx5IGEgcGFkIG9mIGRlc3QgKi8KKyAgICAgICAgICBpZiAocGVlcnBhZCkgeworICAgICAgICAgICAgR3N0RWxlbWVudCAqcGVlcmVsZW07CisKKyAgICAgICAgICAgIHBlZXJlbGVtID0gZ3N0X3BhZF9nZXRfcGFyZW50X2VsZW1lbnQgKHBlZXJwYWQpOworCisgICAgICAgICAgICBpZiAocGVlcmVsZW0gPT0gZGVzdCkgeworICAgICAgICAgICAgICBnc3RfcGFkX3VubGluayAocGFkLCBwZWVycGFkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwZWVyZWxlbSkKKyAgICAgICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAocGVlcmVsZW0pOworCisgICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwZWVycGFkKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZ192YWx1ZV9yZXNldCAoJmRhdGEpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2UgR1NUX0lURVJBVE9SX1JFU1lOQzoKKyAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAocGFkcyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRE9ORToKKyAgICAgICAgZG9uZSA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBnX3ZhbHVlX3Vuc2V0ICgmZGF0YSk7CisgIGdzdF9pdGVyYXRvcl9mcmVlIChwYWRzKTsKK30KKworLyoqCisgKiBnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbjoKKyAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50IHRvIGludm9rZSB0aGUgcG9zaXRpb24gcXVlcnkgb24uCisgKiBAZm9ybWF0OiB0aGUgI0dzdEZvcm1hdCByZXF1ZXN0ZWQKKyAqIEBjdXI6IChvdXQpIChhbGxvdy1ub25lKTogYSBsb2NhdGlvbiBpbiB3aGljaCB0byBzdG9yZSB0aGUgY3VycmVudAorICogICAgIHBvc2l0aW9uLCBvciBOVUxMLgorICoKKyAqIFF1ZXJpZXMgYW4gZWxlbWVudCBmb3IgdGhlIHN0cmVhbSBwb3NpdGlvbi4gSWYgb25lIHJlcGVhdGVkbHkgY2FsbHMgdGhpcworICogZnVuY3Rpb24gb25lIGNhbiBhbHNvIGNyZWF0ZSBhbmQgcmV1c2UgaXQgaW4gZ3N0X2VsZW1lbnRfcXVlcnkoKS4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBxdWVyeSBjb3VsZCBiZSBwZXJmb3JtZWQuCisgKi8KK2dib29sZWFuCitnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbiAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEZvcm1hdCBmb3JtYXQsCisgICAgZ2ludDY0ICogY3VyKQoreworICBHc3RRdWVyeSAqcXVlcnk7CisgIGdib29sZWFuIHJldDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmb3JtYXQgIT0gR1NUX0ZPUk1BVF9VTkRFRklORUQsIEZBTFNFKTsKKworICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfcG9zaXRpb24gKGZvcm1hdCk7CisgIHJldCA9IGdzdF9lbGVtZW50X3F1ZXJ5IChlbGVtZW50LCBxdWVyeSk7CisKKyAgaWYgKHJldCkKKyAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24gKHF1ZXJ5LCBOVUxMLCBjdXIpOworCisgIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOworCisgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb246CisgKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudCB0byBpbnZva2UgdGhlIGR1cmF0aW9uIHF1ZXJ5IG9uLgorICogQGZvcm1hdDogdGhlICNHc3RGb3JtYXQgcmVxdWVzdGVkCisgKiBAZHVyYXRpb246IChvdXQpOiBBIGxvY2F0aW9uIGluIHdoaWNoIHRvIHN0b3JlIHRoZSB0b3RhbCBkdXJhdGlvbiwgb3IgTlVMTC4KKyAqCisgKiBRdWVyaWVzIGFuIGVsZW1lbnQgZm9yIHRoZSB0b3RhbCBzdHJlYW0gZHVyYXRpb24uCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgcXVlcnkgY291bGQgYmUgcGVyZm9ybWVkLgorICovCitnYm9vbGVhbgorZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24gKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RGb3JtYXQgZm9ybWF0LAorICAgIGdpbnQ2NCAqIGR1cmF0aW9uKQoreworICBHc3RRdWVyeSAqcXVlcnk7CisgIGdib29sZWFuIHJldDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmb3JtYXQgIT0gR1NUX0ZPUk1BVF9VTkRFRklORUQsIEZBTFNFKTsKKworICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfZHVyYXRpb24gKGZvcm1hdCk7CisgIHJldCA9IGdzdF9lbGVtZW50X3F1ZXJ5IChlbGVtZW50LCBxdWVyeSk7CisKKyAgaWYgKHJldCkKKyAgICBnc3RfcXVlcnlfcGFyc2VfZHVyYXRpb24gKHF1ZXJ5LCBOVUxMLCBkdXJhdGlvbik7CisKKyAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7CisKKyAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBnc3RfZWxlbWVudF9xdWVyeV9jb252ZXJ0OgorICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQgdG8gaW52b2tlIHRoZSBjb252ZXJ0IHF1ZXJ5IG9uLgorICogQHNyY19mb3JtYXQ6IChpbm91dCk6IGEgI0dzdEZvcm1hdCB0byBjb252ZXJ0IGZyb20uCisgKiBAc3JjX3ZhbDogYSB2YWx1ZSB0byBjb252ZXJ0LgorICogQGRlc3RfZm9ybWF0OiB0aGUgI0dzdEZvcm1hdCB0byBjb252ZXJ0IHRvLgorICogQGRlc3RfdmFsOiAob3V0KTogYSBwb2ludGVyIHRvIHRoZSByZXN1bHQuCisgKgorICogUXVlcmllcyBhbiBlbGVtZW50IHRvIGNvbnZlcnQgQHNyY192YWwgaW4gQHNyY19mb3JtYXQgdG8gQGRlc3RfZm9ybWF0LgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIHF1ZXJ5IGNvdWxkIGJlIHBlcmZvcm1lZC4KKyAqLworZ2Jvb2xlYW4KK2dzdF9lbGVtZW50X3F1ZXJ5X2NvbnZlcnQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RGb3JtYXQgc3JjX2Zvcm1hdCwKKyAgICBnaW50NjQgc3JjX3ZhbCwgR3N0Rm9ybWF0IGRlc3RfZm9ybWF0LCBnaW50NjQgKiBkZXN0X3ZhbCkKK3sKKyAgR3N0UXVlcnkgKnF1ZXJ5OworICBnYm9vbGVhbiByZXQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGVzdF9mb3JtYXQgIT0gR1NUX0ZPUk1BVF9VTkRFRklORUQsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRlc3RfdmFsICE9IE5VTEwsIEZBTFNFKTsKKworICBpZiAoZGVzdF9mb3JtYXQgPT0gc3JjX2Zvcm1hdCB8fCBzcmNfdmFsID09IC0xKSB7CisgICAgKmRlc3RfdmFsID0gc3JjX3ZhbDsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorCisgIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19jb252ZXJ0IChzcmNfZm9ybWF0LCBzcmNfdmFsLCBkZXN0X2Zvcm1hdCk7CisgIHJldCA9IGdzdF9lbGVtZW50X3F1ZXJ5IChlbGVtZW50LCBxdWVyeSk7CisKKyAgaWYgKHJldCkKKyAgICBnc3RfcXVlcnlfcGFyc2VfY29udmVydCAocXVlcnksIE5VTEwsIE5VTEwsIE5VTEwsIGRlc3RfdmFsKTsKKworICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKKworICByZXR1cm4gcmV0OworfQorCisvKioKKyAqIGdzdF9lbGVtZW50X3NlZWtfc2ltcGxlCisgKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudCB0byBzZWVrIG9uCisgKiBAZm9ybWF0OiBhICNHc3RGb3JtYXQgdG8gZXhlY3V0ZSB0aGUgc2VlayBpbiwgc3VjaCBhcyAjR1NUX0ZPUk1BVF9USU1FCisgKiBAc2Vla19mbGFnczogc2VlayBvcHRpb25zOyBwbGF5YmFjayBhcHBsaWNhdGlvbnMgd2lsbCB1c3VhbGx5IHdhbnQgdG8gdXNlCisgKiAgICAgICAgICAgIEdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19GTEFHX0tFWV9VTklUIGhlcmUKKyAqIEBzZWVrX3BvczogcG9zaXRpb24gdG8gc2VlayB0byAocmVsYXRpdmUgdG8gdGhlIHN0YXJ0KTsgaWYgeW91IGFyZSBkb2luZworICogICAgICAgICAgICBhIHNlZWsgaW4gI0dTVF9GT1JNQVRfVElNRSB0aGlzIHZhbHVlIGlzIGluIG5hbm9zZWNvbmRzIC0KKyAqICAgICAgICAgICAgbXVsdGlwbHkgd2l0aCAjR1NUX1NFQ09ORCB0byBjb252ZXJ0IHNlY29uZHMgdG8gbmFub3NlY29uZHMgb3IKKyAqICAgICAgICAgICAgd2l0aCAjR1NUX01TRUNPTkQgdG8gY29udmVydCBtaWxsaXNlY29uZHMgdG8gbmFub3NlY29uZHMuCisgKgorICogU2ltcGxlIEFQSSB0byBwZXJmb3JtIGEgc2VlayBvbiB0aGUgZ2l2ZW4gZWxlbWVudCwgbWVhbmluZyBpdCBqdXN0IHNlZWtzCisgKiB0byB0aGUgZ2l2ZW4gcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzdHJlYW0uIEZvciBtb3JlIGNvbXBsZXgKKyAqIG9wZXJhdGlvbnMgbGlrZSBzZWdtZW50IHNlZWtzIChlLmcuIGZvciBsb29waW5nKSBvciBjaGFuZ2luZyB0aGUgcGxheWJhY2sKKyAqIHJhdGUgb3Igc2Vla2luZyByZWxhdGl2ZSB0byB0aGUgbGFzdCBjb25maWd1cmVkIHBsYXliYWNrIHNlZ21lbnQgeW91IHNob3VsZAorICogdXNlIGdzdF9lbGVtZW50X3NlZWsoKS4KKyAqCisgKiBJbiBhIGNvbXBsZXRlbHkgcHJlcm9sbGVkIFBBVVNFRCBvciBQTEFZSU5HIHBpcGVsaW5lLCBzZWVraW5nIGlzIGFsd2F5cworICogZ3VhcmFudGVlZCB0byByZXR1cm4gJVRSVUUgb24gYSBzZWVrYWJsZSBtZWRpYSB0eXBlIG9yICVGQUxTRSB3aGVuIHRoZSBtZWRpYQorICogdHlwZSBpcyBjZXJ0YWlubHkgbm90IHNlZWthYmxlIChzdWNoIGFzIGEgbGl2ZSBzdHJlYW0pLgorICoKKyAqIFNvbWUgZWxlbWVudHMgYWxsb3cgZm9yIHNlZWtpbmcgaW4gdGhlIFJFQURZIHN0YXRlLCBpbiB0aGlzCisgKiBjYXNlIHRoZXkgd2lsbCBzdG9yZSB0aGUgc2VlayBldmVudCBhbmQgZXhlY3V0ZSBpdCB3aGVuIHRoZXkgYXJlIHB1dCB0bworICogUEFVU0VELiBJZiB0aGUgZWxlbWVudCBzdXBwb3J0cyBzZWVrIGluIFJFQURZLCBpdCB3aWxsIGFsd2F5cyByZXR1cm4gJVRSVUUgd2hlbgorICogaXQgcmVjZWl2ZXMgdGhlIGV2ZW50IGluIHRoZSBSRUFEWSBzdGF0ZS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgc2VlayBvcGVyYXRpb24gc3VjY2VlZGVkICh0aGUgc2VlayBtaWdodCBub3QgYWx3YXlzIGJlCisgKiBleGVjdXRlZCBpbnN0YW50bHkgdGhvdWdoKQorICoKKyAqIFNpbmNlOiAwLjEwLjcKKyAqLworZ2Jvb2xlYW4KK2dzdF9lbGVtZW50X3NlZWtfc2ltcGxlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0Rm9ybWF0IGZvcm1hdCwKKyAgICBHc3RTZWVrRmxhZ3Mgc2Vla19mbGFncywgZ2ludDY0IHNlZWtfcG9zKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWVrX3BvcyA+PSAwLCBGQUxTRSk7CisKKyAgcmV0dXJuIGdzdF9lbGVtZW50X3NlZWsgKGVsZW1lbnQsIDEuMCwgZm9ybWF0LCBzZWVrX2ZsYWdzLAorICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIHNlZWtfcG9zLCBHU1RfU0VFS19UWVBFX05PTkUsIDApOworfQorCisvKioKKyAqIGdzdF9wYWRfdXNlX2ZpeGVkX2NhcHM6CisgKiBAcGFkOiB0aGUgcGFkIHRvIHVzZQorICoKKyAqIEEgaGVscGVyIGZ1bmN0aW9uIHlvdSBjYW4gdXNlIHRoYXQgc2V0cyB0aGUgRklYRURfQ0FQUyBmbGFnCisgKiBUaGlzIHdheSB0aGUgZGVmYXVsdCBnZXRjYXBzIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIHJldHVybiB0aGUgbmVnb3RpYXRlZCBjYXBzCisgKiBvciBpbiBjYXNlIHRoZSBwYWQgaXMgbm90IG5lZ290aWF0ZWQsIHRoZSBwYWR0ZW1wbGF0ZSBjYXBzLgorICoKKyAqIFVzZSB0aGlzIGZ1bmN0aW9uIG9uIGEgcGFkIHRoYXQsIG9uY2UgZ3N0X3BhZF9zZXRfY2FwcygpIGhhcyBiZWVuIGNhbGxlZAorICogb24gaXQsIGNhbm5vdCBiZSByZW5lZ290aWF0ZWQgdG8gc29tZXRoaW5nIGVsc2UuCisgKi8KK3ZvaWQKK2dzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKEdzdFBhZCAqIHBhZCkKK3sKKyAgR1NUX09CSkVDVF9GTEFHX1NFVCAocGFkLCBHU1RfUEFEX0ZJWEVEX0NBUFMpOworfQorCisvKioKKyAqIGdzdF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50OgorICogQHBhZDogYSBwYWQKKyAqCisgKiBHZXRzIHRoZSBwYXJlbnQgb2YgQHBhZCwgY2FzdCB0byBhICNHc3RFbGVtZW50LiBJZiBhIEBwYWQgaGFzIG5vIHBhcmVudCBvcgorICogaXRzIHBhcmVudCBpcyBub3QgYW4gZWxlbWVudCwgcmV0dXJuIE5VTEwuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgcGFyZW50IG9mIHRoZSBwYWQuIFRoZSBjYWxsZXIgaGFzIGEKKyAqIHJlZmVyZW5jZSBvbiB0aGUgcGFyZW50LCBzbyB1bnJlZiB3aGVuIHlvdSdyZSBmaW5pc2hlZCB3aXRoIGl0LgorICoKKyAqIE1UIHNhZmUuCisgKi8KK0dzdEVsZW1lbnQgKgorZ3N0X3BhZF9nZXRfcGFyZW50X2VsZW1lbnQgKEdzdFBhZCAqIHBhZCkKK3sKKyAgR3N0T2JqZWN0ICpwOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBOVUxMKTsKKworICBwID0gZ3N0X29iamVjdF9nZXRfcGFyZW50IChHU1RfT0JKRUNUX0NBU1QgKHBhZCkpOworCisgIGlmIChwICYmICFHU1RfSVNfRUxFTUVOVCAocCkpIHsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChwKTsKKyAgICBwID0gTlVMTDsKKyAgfQorICByZXR1cm4gR1NUX0VMRU1FTlRfQ0FTVCAocCk7Cit9CisKKy8qKgorICogZ3N0X29iamVjdF9kZWZhdWx0X2Vycm9yOgorICogQHNvdXJjZTogdGhlICNHc3RPYmplY3QgdGhhdCBpbml0aWF0ZWQgdGhlIGVycm9yLgorICogQGVycm9yOiAoaW4pOiB0aGUgR0Vycm9yLgorICogQGRlYnVnOiAoaW4pIChhbGxvdy1ub25lKTogYW4gYWRkaXRpb25hbCBkZWJ1ZyBpbmZvcm1hdGlvbiBzdHJpbmcsIG9yIE5VTEwKKyAqCisgKiBBIGRlZmF1bHQgZXJyb3IgZnVuY3Rpb24gdGhhdCB1c2VzIGdfcHJpbnRlcnIoKSB0byBkaXNwbGF5IHRoZSBlcnJvciBtZXNzYWdlCisgKiBhbmQgdGhlIG9wdGlvbmFsIGRlYnVnIHN0aW5nLi4KKyAqCisgKiBUaGUgZGVmYXVsdCBoYW5kbGVyIHdpbGwgc2ltcGx5IHByaW50IHRoZSBlcnJvciBzdHJpbmcgdXNpbmcgZ19wcmludC4KKyAqLwordm9pZAorZ3N0X29iamVjdF9kZWZhdWx0X2Vycm9yIChHc3RPYmplY3QgKiBzb3VyY2UsIGNvbnN0IEdFcnJvciAqIGVycm9yLAorICAgIGNvbnN0IGdjaGFyICogZGVidWcpCit7CisgIGdjaGFyICpuYW1lID0gZ3N0X29iamVjdF9nZXRfcGF0aF9zdHJpbmcgKHNvdXJjZSk7CisKKyAgZ19wcmludGVyciAoXygiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIpLCBuYW1lLCBlcnJvci0+bWVzc2FnZSk7CisgIGlmIChkZWJ1ZykKKyAgICBnX3ByaW50ZXJyIChfKCJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4lc1xuIiksIGRlYnVnKTsKKworICBnX2ZyZWUgKG5hbWUpOworfQorCisvKioKKyAqIGdzdF9iaW5fYWRkX21hbnk6CisgKiBAYmluOiBhICNHc3RCaW4KKyAqIEBlbGVtZW50XzE6ICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RFbGVtZW50IGVsZW1lbnQgdG8gYWRkIHRvIHRoZSBiaW4KKyAqIEAuLi46ICh0cmFuc2ZlciBmdWxsKTogYWRkaXRpb25hbCBlbGVtZW50cyB0byBhZGQgdG8gdGhlIGJpbgorICoKKyAqIEFkZHMgYSBOVUxMLXRlcm1pbmF0ZWQgbGlzdCBvZiBlbGVtZW50cyB0byBhIGJpbi4gIFRoaXMgZnVuY3Rpb24gaXMKKyAqIGVxdWl2YWxlbnQgdG8gY2FsbGluZyBnc3RfYmluX2FkZCgpIGZvciBlYWNoIG1lbWJlciBvZiB0aGUgbGlzdC4gVGhlIHJldHVybgorICogdmFsdWUgb2YgZWFjaCBnc3RfYmluX2FkZCgpIGlzIGlnbm9yZWQuCisgKi8KK3ZvaWQKK2dzdF9iaW5fYWRkX21hbnkgKEdzdEJpbiAqIGJpbiwgR3N0RWxlbWVudCAqIGVsZW1lbnRfMSwgLi4uKQoreworICB2YV9saXN0IGFyZ3M7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JJTiAoYmluKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50XzEpKTsKKworICB2YV9zdGFydCAoYXJncywgZWxlbWVudF8xKTsKKworICB3aGlsZSAoZWxlbWVudF8xKSB7CisgICAgZ3N0X2Jpbl9hZGQgKGJpbiwgZWxlbWVudF8xKTsKKworICAgIGVsZW1lbnRfMSA9IHZhX2FyZyAoYXJncywgR3N0RWxlbWVudCAqKTsKKyAgfQorCisgIHZhX2VuZCAoYXJncyk7Cit9CisKKy8qKgorICogZ3N0X2Jpbl9yZW1vdmVfbWFueToKKyAqIEBiaW46IGEgI0dzdEJpbgorICogQGVsZW1lbnRfMTogKHRyYW5zZmVyIG5vbmUpOiB0aGUgZmlyc3QgI0dzdEVsZW1lbnQgdG8gcmVtb3ZlIGZyb20gdGhlIGJpbgorICogQC4uLjogKHRyYW5zZmVyIG5vbmUpOiBOVUxMLXRlcm1pbmF0ZWQgbGlzdCBvZiBlbGVtZW50cyB0byByZW1vdmUgZnJvbSB0aGUgYmluCisgKgorICogUmVtb3ZlIGEgbGlzdCBvZiBlbGVtZW50cyBmcm9tIGEgYmluLiBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQKKyAqIHRvIGNhbGxpbmcgZ3N0X2Jpbl9yZW1vdmUoKSB3aXRoIGVhY2ggbWVtYmVyIG9mIHRoZSBsaXN0LgorICovCit2b2lkCitnc3RfYmluX3JlbW92ZV9tYW55IChHc3RCaW4gKiBiaW4sIEdzdEVsZW1lbnQgKiBlbGVtZW50XzEsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdzOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19CSU4gKGJpbikpOworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudF8xKSk7CisKKyAgdmFfc3RhcnQgKGFyZ3MsIGVsZW1lbnRfMSk7CisKKyAgd2hpbGUgKGVsZW1lbnRfMSkgeworICAgIGdzdF9iaW5fcmVtb3ZlIChiaW4sIGVsZW1lbnRfMSk7CisKKyAgICBlbGVtZW50XzEgPSB2YV9hcmcgKGFyZ3MsIEdzdEVsZW1lbnQgKik7CisgIH0KKworICB2YV9lbmQgKGFyZ3MpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2VsZW1lbnRfcG9wdWxhdGVfc3RkX3Byb3BzIChHT2JqZWN0Q2xhc3MgKiBrbGFzcywgY29uc3QgZ2NoYXIgKiBwcm9wX25hbWUsCisgICAgZ3VpbnQgYXJnX2lkLCBHUGFyYW1GbGFncyBmbGFncykKK3sKKyAgR1F1YXJrIHByb3BfaWQgPSBnX3F1YXJrX2Zyb21fc3RyaW5nIChwcm9wX25hbWUpOworICBHUGFyYW1TcGVjICpwc3BlYzsKKworICBzdGF0aWMgR1F1YXJrIGZkX2lkID0gMDsKKyAgc3RhdGljIEdRdWFyayBibG9ja3NpemVfaWQ7CisgIHN0YXRpYyBHUXVhcmsgYnl0ZXNwZXJyZWFkX2lkOworICBzdGF0aWMgR1F1YXJrIGR1bXBfaWQ7CisgIHN0YXRpYyBHUXVhcmsgZmlsZXNpemVfaWQ7CisgIHN0YXRpYyBHUXVhcmsgbW1hcHNpemVfaWQ7CisgIHN0YXRpYyBHUXVhcmsgbG9jYXRpb25faWQ7CisgIHN0YXRpYyBHUXVhcmsgb2Zmc2V0X2lkOworICBzdGF0aWMgR1F1YXJrIHNpbGVudF9pZDsKKyAgc3RhdGljIEdRdWFyayB0b3VjaF9pZDsKKworICBmbGFncyB8PSBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTOworCisgIGlmICghZmRfaWQpIHsKKyAgICBmZF9pZCA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgiZmQiKTsKKyAgICBibG9ja3NpemVfaWQgPSBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoImJsb2Nrc2l6ZSIpOworICAgIGJ5dGVzcGVycmVhZF9pZCA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgiYnl0ZXNwZXJyZWFkIik7CisgICAgZHVtcF9pZCA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgiZHVtcCIpOworICAgIGZpbGVzaXplX2lkID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJmaWxlc2l6ZSIpOworICAgIG1tYXBzaXplX2lkID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJtbWFwc2l6ZSIpOworICAgIGxvY2F0aW9uX2lkID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJsb2NhdGlvbiIpOworICAgIG9mZnNldF9pZCA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgib2Zmc2V0Iik7CisgICAgc2lsZW50X2lkID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJzaWxlbnQiKTsKKyAgICB0b3VjaF9pZCA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgidG91Y2giKTsKKyAgfQorCisgIGlmIChwcm9wX2lkID09IGZkX2lkKSB7CisgICAgcHNwZWMgPSBnX3BhcmFtX3NwZWNfaW50ICgiZmQiLCAiRmlsZS1kZXNjcmlwdG9yIiwKKyAgICAgICAgIkZpbGUtZGVzY3JpcHRvciBmb3IgdGhlIGZpbGUgYmVpbmcgcmVhZCIsIDAsIEdfTUFYSU5ULCAwLCBmbGFncyk7CisgIH0gZWxzZSBpZiAocHJvcF9pZCA9PSBibG9ja3NpemVfaWQpIHsKKyAgICBwc3BlYyA9IGdfcGFyYW1fc3BlY191bG9uZyAoImJsb2Nrc2l6ZSIsICJCbG9jayBTaXplIiwKKyAgICAgICAgIkJsb2NrIHNpemUgdG8gcmVhZCBwZXIgYnVmZmVyIiwgMCwgR19NQVhVTE9ORywgNDA5NiwgZmxhZ3MpOworCisgIH0gZWxzZSBpZiAocHJvcF9pZCA9PSBieXRlc3BlcnJlYWRfaWQpIHsKKyAgICBwc3BlYyA9IGdfcGFyYW1fc3BlY19pbnQgKCJieXRlc3BlcnJlYWQiLCAiQnl0ZXMgcGVyIHJlYWQiLAorICAgICAgICAiTnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQgcGVyIGJ1ZmZlciIsIEdfTUlOSU5ULCBHX01BWElOVCwgMCwgZmxhZ3MpOworCisgIH0gZWxzZSBpZiAocHJvcF9pZCA9PSBkdW1wX2lkKSB7CisgICAgcHNwZWMgPSBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImR1bXAiLCAiRHVtcCIsCisgICAgICAgICJEdW1wIGJ5dGVzIHRvIHN0ZG91dCIsIEZBTFNFLCBmbGFncyk7CisKKyAgfSBlbHNlIGlmIChwcm9wX2lkID09IGZpbGVzaXplX2lkKSB7CisgICAgcHNwZWMgPSBnX3BhcmFtX3NwZWNfaW50NjQgKCJmaWxlc2l6ZSIsICJGaWxlIFNpemUiLAorICAgICAgICAiU2l6ZSBvZiB0aGUgZmlsZSBiZWluZyByZWFkIiwgMCwgR19NQVhJTlQ2NCwgMCwgZmxhZ3MpOworCisgIH0gZWxzZSBpZiAocHJvcF9pZCA9PSBtbWFwc2l6ZV9pZCkgeworICAgIHBzcGVjID0gZ19wYXJhbV9zcGVjX3Vsb25nICgibW1hcHNpemUiLCAibW1hcCgpIEJsb2NrIFNpemUiLAorICAgICAgICAiU2l6ZSBpbiBieXRlcyBvZiBtbWFwKClkIHJlZ2lvbnMiLCAwLCBHX01BWFVMT05HLCA0ICogMTA0ODU3NiwgZmxhZ3MpOworCisgIH0gZWxzZSBpZiAocHJvcF9pZCA9PSBsb2NhdGlvbl9pZCkgeworICAgIHBzcGVjID0gZ19wYXJhbV9zcGVjX3N0cmluZyAoImxvY2F0aW9uIiwgIkZpbGUgTG9jYXRpb24iLAorICAgICAgICAiTG9jYXRpb24gb2YgdGhlIGZpbGUgdG8gcmVhZCIsIE5VTEwsIGZsYWdzKTsKKworICB9IGVsc2UgaWYgKHByb3BfaWQgPT0gb2Zmc2V0X2lkKSB7CisgICAgcHNwZWMgPSBnX3BhcmFtX3NwZWNfaW50NjQgKCJvZmZzZXQiLCAiRmlsZSBPZmZzZXQiLAorICAgICAgICAiQnl0ZSBvZmZzZXQgb2YgY3VycmVudCByZWFkIHBvaW50ZXIiLCAwLCBHX01BWElOVDY0LCAwLCBmbGFncyk7CisKKyAgfSBlbHNlIGlmIChwcm9wX2lkID09IHNpbGVudF9pZCkgeworICAgIHBzcGVjID0gZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJzaWxlbnQiLCAiU2lsZW50IiwgIkRvbid0IHByb2R1Y2UgZXZlbnRzIiwKKyAgICAgICAgRkFMU0UsIGZsYWdzKTsKKworICB9IGVsc2UgaWYgKHByb3BfaWQgPT0gdG91Y2hfaWQpIHsKKyAgICBwc3BlYyA9IGdfcGFyYW1fc3BlY19ib29sZWFuICgidG91Y2giLCAiVG91Y2ggcmVhZCBkYXRhIiwKKyAgICAgICAgIlRvdWNoIGRhdGEgdG8gZm9yY2UgZGlzayByZWFkIGJlZm9yZSAiICJwdXNoICgpIiwgVFJVRSwgZmxhZ3MpOworICB9IGVsc2UgeworICAgIGdfd2FybmluZyAoIlVua25vd24gLSAnc3RhbmRhcmQnIHByb3BlcnR5ICclcycgaWQgJWQgZnJvbSBrbGFzcyAlcyIsCisgICAgICAgIHByb3BfbmFtZSwgYXJnX2lkLCBnX3R5cGVfbmFtZSAoR19PQkpFQ1RfQ0xBU1NfVFlQRSAoa2xhc3MpKSk7CisgICAgcHNwZWMgPSBOVUxMOworICB9CisKKyAgaWYgKHBzcGVjKSB7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoa2xhc3MsIGFyZ19pZCwgcHNwZWMpOworICB9Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfY2xhc3NfaW5zdGFsbF9zdGRfcHJvcHM6CisgKiBAa2xhc3M6IHRoZSAjR3N0RWxlbWVudENsYXNzIHRvIGFkZCB0aGUgcHJvcGVydGllcyB0by4KKyAqIEBmaXJzdF9uYW1lOiB0aGUgbmFtZSBvZiB0aGUgZmlyc3QgcHJvcGVydHkuCisgKiBpbiBhIE5VTEwgdGVybWluYXRlZAorICogQC4uLjogdGhlIGlkIGFuZCBmbGFncyBvZiB0aGUgZmlyc3QgcHJvcGVydHksIGZvbGxvd2VkIGJ5CisgKiBmdXJ0aGVyICduYW1lJywgJ2lkJywgJ2ZsYWdzJyB0cmlwbGV0cyBhbmQgdGVybWluYXRlZCBieSBOVUxMLgorICoKKyAqIEFkZHMgYSBsaXN0IG9mIHN0YW5kYXJkaXplZCBwcm9wZXJ0aWVzIHdpdGggdHlwZXMgdG8gdGhlIEBrbGFzcy4KKyAqIHRoZSBpZCBpcyBmb3IgdGhlIHByb3BlcnR5IHN3aXRjaCBpbiB5b3VyIGdldF9wcm9wIG1ldGhvZCwgYW5kCisgKiB0aGUgZmxhZ3MgZGV0ZXJtaW5lIHJlYWRhYmlsaXR5IC8gd3JpdGVhYmlsaXR5LgorICoqLwordm9pZAorZ3N0X2VsZW1lbnRfY2xhc3NfaW5zdGFsbF9zdGRfcHJvcHMgKEdzdEVsZW1lbnRDbGFzcyAqIGtsYXNzLAorICAgIGNvbnN0IGdjaGFyICogZmlyc3RfbmFtZSwgLi4uKQoreworICBjb25zdCBjaGFyICpuYW1lOworCisgIHZhX2xpc3QgYXJnczsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVF9DTEFTUyAoa2xhc3MpKTsKKworICB2YV9zdGFydCAoYXJncywgZmlyc3RfbmFtZSk7CisKKyAgbmFtZSA9IGZpcnN0X25hbWU7CisKKyAgd2hpbGUgKG5hbWUpIHsKKyAgICBpbnQgYXJnX2lkID0gdmFfYXJnIChhcmdzLCBpbnQpOworICAgIEdQYXJhbUZsYWdzIGZsYWdzID0gKEdQYXJhbUZsYWdzKSB2YV9hcmcgKGFyZ3MsIGludCk7CisKKyAgICBnc3RfZWxlbWVudF9wb3B1bGF0ZV9zdGRfcHJvcHMgKChHT2JqZWN0Q2xhc3MgKikga2xhc3MsIG5hbWUsIGFyZ19pZCwKKyAgICAgICAgZmxhZ3MpOworCisgICAgbmFtZSA9IHZhX2FyZyAoYXJncywgY2hhciAqKTsKKyAgfQorCisgIHZhX2VuZCAoYXJncyk7Cit9CisKKworLyoqCisgKiBnc3RfYnVmZmVyX21lcmdlOgorICogQGJ1ZjE6ICh0cmFuc2ZlciBub25lKTogdGhlIGZpcnN0IHNvdXJjZSAjR3N0QnVmZmVyIHRvIG1lcmdlLgorICogQGJ1ZjI6ICh0cmFuc2ZlciBub25lKTogdGhlIHNlY29uZCBzb3VyY2UgI0dzdEJ1ZmZlciB0byBtZXJnZS4KKyAqCisgKiBDcmVhdGUgYSBuZXcgYnVmZmVyIHRoYXQgaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHR3byBzb3VyY2UKKyAqIGJ1ZmZlcnMuICBUaGUgb3JpZ2luYWwgc291cmNlIGJ1ZmZlcnMgd2lsbCBub3QgYmUgbW9kaWZpZWQgb3IKKyAqIHVucmVmJ2QuICBNYWtlIHN1cmUgeW91IHVucmVmIHRoZSBzb3VyY2UgYnVmZmVycyBpZiB0aGV5IGFyZSBub3QgdXNlZAorICogYW55bW9yZSBhZnRlcndhcmRzLgorICoKKyAqIElmIHRoZSBidWZmZXJzIHBvaW50IHRvIGNvbnRpZ3VvdXMgYXJlYXMgb2YgbWVtb3J5LCB0aGUgYnVmZmVyCisgKiBpcyBjcmVhdGVkIHdpdGhvdXQgY29weWluZyB0aGUgZGF0YS4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnc3RfYnVmZmVyX3VucmVmCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3ICNHc3RCdWZmZXIgd2hpY2ggaXMgdGhlIGNvbmNhdGVuYXRpb24KKyAqICAgICBvZiB0aGUgc291cmNlIGJ1ZmZlcnMuCisgKi8KK0dzdEJ1ZmZlciAqCitnc3RfYnVmZmVyX21lcmdlIChHc3RCdWZmZXIgKiBidWYxLCBHc3RCdWZmZXIgKiBidWYyKQoreworICBHc3RCdWZmZXIgKnJlc3VsdDsKKyAgZ3NpemUgc2l6ZTEsIHNpemUyOworCisgIHNpemUxID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmMSk7CisgIHNpemUyID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmMik7CisKKyAgLyogd2UncmUganVzdCBhIHNwZWNpZmljIGNhc2Ugb2YgdGhlIG1vcmUgZ2VuZXJhbCBnc3RfYnVmZmVyX3NwYW4oKSAqLworICByZXN1bHQgPSBnc3RfYnVmZmVyX3NwYW4gKGJ1ZjEsIDAsIGJ1ZjIsIHNpemUxICsgc2l6ZTIpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZ3N0X2J1ZmZlcl9qb2luOgorICogQGJ1ZjE6IHRoZSBmaXJzdCBzb3VyY2UgI0dzdEJ1ZmZlci4KKyAqIEBidWYyOiB0aGUgc2Vjb25kIHNvdXJjZSAjR3N0QnVmZmVyLgorICoKKyAqIENyZWF0ZSBhIG5ldyBidWZmZXIgdGhhdCBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgdHdvIHNvdXJjZQorICogYnVmZmVycywgYW5kIHVucmVmcyB0aGUgb3JpZ2luYWwgc291cmNlIGJ1ZmZlcnMuCisgKgorICogSWYgdGhlIGJ1ZmZlcnMgcG9pbnQgdG8gY29udGlndW91cyBhcmVhcyBvZiBtZW1vcnksIHRoZSBidWZmZXIKKyAqIGlzIGNyZWF0ZWQgd2l0aG91dCBjb3B5aW5nIHRoZSBkYXRhLgorICoKKyAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgQyBwcm9ncmFtbWVycy4gU2VlIGFsc28KKyAqIGdzdF9idWZmZXJfbWVyZ2UoKSwgd2hpY2ggZG9lcyB0aGUgc2FtZSB0aGluZyB3aXRob3V0CisgKiB1bnJlZmZpbmcgdGhlIGlucHV0IHBhcmFtZXRlcnMuIExhbmd1YWdlIGJpbmRpbmdzIHdpdGhvdXQKKyAqIGV4cGxpY2l0IHJlZmVyZW5jZSBjb3VudGluZyBzaG91bGQgbm90IHdyYXAgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXcgI0dzdEJ1ZmZlciB3aGljaCBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZgorICogdGhlIHNvdXJjZSBidWZmZXJzLgorICovCitHc3RCdWZmZXIgKgorZ3N0X2J1ZmZlcl9qb2luIChHc3RCdWZmZXIgKiBidWYxLCBHc3RCdWZmZXIgKiBidWYyKQoreworICBHc3RCdWZmZXIgKnJlc3VsdDsKKyAgZ3NpemUgc2l6ZTEsIHNpemUyOworCisgIHNpemUxID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmMSk7CisgIHNpemUyID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmMik7CisKKyAgcmVzdWx0ID0gZ3N0X2J1ZmZlcl9zcGFuIChidWYxLCAwLCBidWYyLCBzaXplMSArIHNpemUyKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmMSk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZjIpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ2V0Y2Fwc19mb2xkX2Z1bmMgKGNvbnN0IEdWYWx1ZSAqIHZwYWQsIEdWYWx1ZSAqIHJldCwgR3N0Q2FwcyAqIGZpbHRlcikKK3sKKyAgR3N0UGFkICpwYWQgPSBnX3ZhbHVlX2dldF9vYmplY3QgKHZwYWQpOworICBnYm9vbGVhbiBlbXB0eSA9IEZBTFNFOworICBHc3RDYXBzICpwZWVyY2FwcywgKmV4aXN0aW5nOworCisgIGV4aXN0aW5nID0gZ192YWx1ZV9nZXRfcG9pbnRlciAocmV0KTsKKyAgcGVlcmNhcHMgPSBnc3RfcGFkX3BlZXJfZ2V0X2NhcHMgKHBhZCwgZmlsdGVyKTsKKyAgaWYgKEdfTElLRUxZIChwZWVyY2FwcykpIHsKKyAgICBHc3RDYXBzICppbnRlcnNlY3Rpb24gPSBnc3RfY2Fwc19pbnRlcnNlY3QgKGV4aXN0aW5nLCBwZWVyY2Fwcyk7CisKKyAgICBlbXB0eSA9IGdzdF9jYXBzX2lzX2VtcHR5IChpbnRlcnNlY3Rpb24pOworCisgICAgZ192YWx1ZV9zZXRfcG9pbnRlciAocmV0LCBpbnRlcnNlY3Rpb24pOworICAgIGdzdF9jYXBzX3VucmVmIChleGlzdGluZyk7CisgICAgZ3N0X2NhcHNfdW5yZWYgKHBlZXJjYXBzKTsKKyAgfQorICByZXR1cm4gIWVtcHR5OworfQorCisvKioKKyAqIGdzdF9wYWRfcHJveHlfZ2V0Y2FwczoKKyAqIEBwYWQ6IGEgI0dzdFBhZCB0byBwcm94eS4KKyAqIEBmaWx0ZXI6IGEgI0dzdENhcHMgZmlsdGVyLgorICoKKyAqIENhbGxzIGdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwcygpIGZvciBldmVyeSBvdGhlciBwYWQgYmVsb25naW5nIHRvIHRoZQorICogc2FtZSBlbGVtZW50IGFzIEBwYWQsIGFuZCByZXR1cm5zIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHJlc3VsdHMuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgYXMgYSBkZWZhdWx0IGdldGNhcHMgZnVuY3Rpb24gZm9yIGFuIGVsZW1lbnQKKyAqIHRoYXQgY2FuIGhhbmRsZSBhbnkgc3RyZWFtIGZvcm1hdCwgYnV0IHJlcXVpcmVzIGFsbCBpdHMgcGFkcyB0byBoYXZlCisgKiB0aGUgc2FtZSBjYXBzLiAgVHdvIHN1Y2ggZWxlbWVudHMgYXJlIHRlZSBhbmQgYWRkZXIuCisgKgorICogRnJlZS1mdW5jdGlvbjogZ3N0X2NhcHNfdW5yZWYKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIG90aGVyIHBhZHMnIGFsbG93ZWQgY2Fwcy4KKyAqLworR3N0Q2FwcyAqCitnc3RfcGFkX3Byb3h5X2dldGNhcHMgKEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGZpbHRlcikKK3sKKyAgR3N0RWxlbWVudCAqZWxlbWVudDsKKyAgR3N0Q2FwcyAqY2FwcywgKmludGVyc2VjdGVkOworICBHc3RJdGVyYXRvciAqaXRlcjsKKyAgR3N0SXRlcmF0b3JSZXN1bHQgcmVzOworICBHVmFsdWUgcmV0ID0geyAwLCB9OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBOVUxMKTsKKworICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX1BBRFMsICJwcm94eWluZyBnZXRjYXBzIGZvciAlczolcyIsCisgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOworCisgIGVsZW1lbnQgPSBnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudCAocGFkKTsKKyAgaWYgKGVsZW1lbnQgPT0gTlVMTCkKKyAgICBnb3RvIG5vX3BhcmVudDsKKworICAvKiB2YWx1ZSB0byBob2xkIHRoZSByZXR1cm4sIGJ5IGRlZmF1bHQgaXQgaG9sZHMgQU5ZLCB0aGUgcmVmIGlzIHRha2VuIGJ5CisgICAqIHRoZSBHVmFsdWUuICovCisgIGdfdmFsdWVfaW5pdCAoJnJldCwgR19UWVBFX1BPSU5URVIpOworICBnX3ZhbHVlX3NldF9wb2ludGVyICgmcmV0LCBnc3RfY2Fwc19uZXdfYW55ICgpKTsKKworICAvKiBvbmx5IGl0ZXJhdGUgdGhlIHBhZHMgaW4gdGhlIG9wb3NpdGUgZGlyZWN0aW9uICovCisgIGlmIChHU1RfUEFEX0lTX1NSQyAocGFkKSkKKyAgICBpdGVyID0gZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zaW5rX3BhZHMgKGVsZW1lbnQpOworICBlbHNlCisgICAgaXRlciA9IGdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMgKGVsZW1lbnQpOworCisgIHdoaWxlICgxKSB7CisgICAgcmVzID0KKyAgICAgICAgZ3N0X2l0ZXJhdG9yX2ZvbGQgKGl0ZXIsIChHc3RJdGVyYXRvckZvbGRGdW5jdGlvbikgZ2V0Y2Fwc19mb2xkX2Z1bmMsCisgICAgICAgICZyZXQsIGZpbHRlcik7CisgICAgc3dpdGNoIChyZXMpIHsKKyAgICAgIGNhc2UgR1NUX0lURVJBVE9SX1JFU1lOQzoKKyAgICAgICAgLyogdW5yZWYgYW55IHZhbHVlIHN0b3JlZCAqLworICAgICAgICBpZiAoKGNhcHMgPSBnX3ZhbHVlX2dldF9wb2ludGVyICgmcmV0KSkpCisgICAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOworICAgICAgICAvKiBuZWVkIHRvIHJlc2V0IHRoZSByZXN1bHQgYWdhaW4gdG8gQU5ZICovCisgICAgICAgIGdfdmFsdWVfc2V0X3BvaW50ZXIgKCZyZXQsIGdzdF9jYXBzX25ld19hbnkgKCkpOworICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jIChpdGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgorICAgICAgICAvKiBhbGwgcGFkcyBpdGVyYXRlZCwgcmV0dXJuIGNvbGxlY3RlZCB2YWx1ZSAqLworICAgICAgICBnb3RvIGRvbmU7CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9PSzoKKyAgICAgICAgLyogcHJlbWF0dXJlIGV4aXQgKGhhcHBlbnMgaWYgY2FwcyBpbnRlcnNlY3Rpb24gaXMgZW1wdHkpICovCisgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIC8qIGl0ZXJhdG9yIHJldHVybmVkIF9FUlJPUiwgbWFyayBhbiBlcnJvciBhbmQgZXhpdCAqLworICAgICAgICBpZiAoKGNhcHMgPSBnX3ZhbHVlX2dldF9wb2ludGVyICgmcmV0KSkpCisgICAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOworICAgICAgICBnX3ZhbHVlX3NldF9wb2ludGVyICgmcmV0LCBOVUxMKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgIH0KK2RvbmU6CisgIGdzdF9pdGVyYXRvcl9mcmVlIChpdGVyKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtZW50KTsKKworICBjYXBzID0gZ192YWx1ZV9nZXRfcG9pbnRlciAoJnJldCk7CisgIGdfdmFsdWVfdW5zZXQgKCZyZXQpOworCisgIGlmIChjYXBzKSB7CisgICAgaW50ZXJzZWN0ZWQgPQorICAgICAgICBnc3RfY2Fwc19pbnRlcnNlY3QgKGNhcHMsIGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzIChwYWQpKTsKKyAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7CisgIH0gZWxzZSB7CisgICAgaW50ZXJzZWN0ZWQgPSBnc3RfY2Fwc19jb3B5IChnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAocGFkKSk7CisgIH0KKworICByZXR1cm4gaW50ZXJzZWN0ZWQ7CisKKyAgLyogRVJST1JTICovCitub19wYXJlbnQ6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJubyBwYXJlbnQiKTsKKyAgICByZXR1cm4gZ3N0X2NhcHNfY29weSAoZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKHBhZCkpOworICB9CitlcnJvcjoKKyAgeworICAgIGdfd2FybmluZyAoIlBhZCBsaXN0IHJldHVybmVkIGVycm9yIG9uIGVsZW1lbnQgJXMiLAorICAgICAgICBHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSk7CisgICAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0ZXIpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKGVsZW1lbnQpOworICAgIHJldHVybiBnc3RfY2Fwc19jb3B5IChnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAocGFkKSk7CisgIH0KK30KKworLyoqCisgKiBnc3RfcGFkX3F1ZXJ5X3Bvc2l0aW9uOgorICogQHBhZDogYSAjR3N0UGFkIHRvIGludm9rZSB0aGUgcG9zaXRpb24gcXVlcnkgb24uCisgKiBAZm9ybWF0OiB0aGUgI0dzdEZvcm1hdCByZXF1ZXN0ZWQKKyAqIEBjdXI6IChvdXQpOiBBIGxvY2F0aW9uIGluIHdoaWNoIHRvIHN0b3JlIHRoZSBjdXJyZW50IHBvc2l0aW9uLCBvciBOVUxMLgorICoKKyAqIFF1ZXJpZXMgYSBwYWQgZm9yIHRoZSBzdHJlYW0gcG9zaXRpb24uCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgcXVlcnkgY291bGQgYmUgcGVyZm9ybWVkLgorICovCitnYm9vbGVhbgorZ3N0X3BhZF9xdWVyeV9wb3NpdGlvbiAoR3N0UGFkICogcGFkLCBHc3RGb3JtYXQgZm9ybWF0LCBnaW50NjQgKiBjdXIpCit7CisgIEdzdFF1ZXJ5ICpxdWVyeTsKKyAgZ2Jvb2xlYW4gcmV0OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmb3JtYXQgIT0gR1NUX0ZPUk1BVF9VTkRFRklORUQsIEZBTFNFKTsKKworICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfcG9zaXRpb24gKGZvcm1hdCk7CisgIHJldCA9IGdzdF9wYWRfcXVlcnkgKHBhZCwgcXVlcnkpOworCisgIGlmIChyZXQpCisgICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uIChxdWVyeSwgTlVMTCwgY3VyKTsKKworICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKKworICByZXR1cm4gcmV0OworfQorCisvKioKKyAqIGdzdF9wYWRfcXVlcnlfcGVlcl9wb3NpdGlvbjoKKyAqIEBwYWQ6IGEgI0dzdFBhZCBvbiB3aG9zZSBwZWVyIHRvIGludm9rZSB0aGUgcG9zaXRpb24gcXVlcnkgb24uCisgKiAgICAgICBNdXN0IGJlIGEgc2luayBwYWQuCisgKiBAZm9ybWF0OiB0aGUgI0dzdEZvcm1hdCByZXF1ZXN0ZWQKKyAqIEBjdXI6IChvdXQpIChhbGxvdy1ub25lKTogYSBsb2NhdGlvbiBpbiB3aGljaCB0byBzdG9yZSB0aGUgY3VycmVudAorICogICAgIHBvc2l0aW9uLCBvciBOVUxMLgorICoKKyAqIFF1ZXJpZXMgdGhlIHBlZXIgb2YgYSBnaXZlbiBzaW5rIHBhZCBmb3IgdGhlIHN0cmVhbSBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBxdWVyeSBjb3VsZCBiZSBwZXJmb3JtZWQuCisgKi8KK2dib29sZWFuCitnc3RfcGFkX3F1ZXJ5X3BlZXJfcG9zaXRpb24gKEdzdFBhZCAqIHBhZCwgR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0ICogY3VyKQoreworICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKKyAgR3N0UGFkICpwZWVyOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfUEFEX0lTX1NJTksgKHBhZCksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZvcm1hdCAhPSBHU1RfRk9STUFUX1VOREVGSU5FRCwgRkFMU0UpOworCisgIHBlZXIgPSBnc3RfcGFkX2dldF9wZWVyIChwYWQpOworICBpZiAocGVlcikgeworICAgIHJldCA9IGdzdF9wYWRfcXVlcnlfcG9zaXRpb24gKHBlZXIsIGZvcm1hdCwgY3VyKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChwZWVyKTsKKyAgfQorCisgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICogZ3N0X3BhZF9xdWVyeV9kdXJhdGlvbjoKKyAqIEBwYWQ6IGEgI0dzdFBhZCB0byBpbnZva2UgdGhlIGR1cmF0aW9uIHF1ZXJ5IG9uLgorICogQGZvcm1hdDogdGhlICNHc3RGb3JtYXQgcmVxdWVzdGVkCisgKiBAZHVyYXRpb246IChvdXQpIChhbGxvdy1ub25lKTogYSBsb2NhdGlvbiBpbiB3aGljaCB0byBzdG9yZSB0aGUgdG90YWwKKyAqICAgICBkdXJhdGlvbiwgb3IgTlVMTC4KKyAqCisgKiBRdWVyaWVzIGEgcGFkIGZvciB0aGUgdG90YWwgc3RyZWFtIGR1cmF0aW9uLgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIHF1ZXJ5IGNvdWxkIGJlIHBlcmZvcm1lZC4KKyAqLworZ2Jvb2xlYW4KK2dzdF9wYWRfcXVlcnlfZHVyYXRpb24gKEdzdFBhZCAqIHBhZCwgR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0ICogZHVyYXRpb24pCit7CisgIEdzdFF1ZXJ5ICpxdWVyeTsKKyAgZ2Jvb2xlYW4gcmV0OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmb3JtYXQgIT0gR1NUX0ZPUk1BVF9VTkRFRklORUQsIEZBTFNFKTsKKworICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfZHVyYXRpb24gKGZvcm1hdCk7CisgIHJldCA9IGdzdF9wYWRfcXVlcnkgKHBhZCwgcXVlcnkpOworCisgIGlmIChyZXQpCisgICAgZ3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uIChxdWVyeSwgTlVMTCwgZHVyYXRpb24pOworCisgIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOworCisgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICogZ3N0X3BhZF9xdWVyeV9wZWVyX2R1cmF0aW9uOgorICogQHBhZDogYSAjR3N0UGFkIG9uIHdob3NlIHBlZXIgcGFkIHRvIGludm9rZSB0aGUgZHVyYXRpb24gcXVlcnkgb24uCisgKiAgICAgICBNdXN0IGJlIGEgc2luayBwYWQuCisgKiBAZm9ybWF0OiB0aGUgI0dzdEZvcm1hdCByZXF1ZXN0ZWQKKyAqIEBkdXJhdGlvbjogKG91dCkgKGFsbG93LW5vbmUpOiBhIGxvY2F0aW9uIGluIHdoaWNoIHRvIHN0b3JlIHRoZSB0b3RhbAorICogICAgIGR1cmF0aW9uLCBvciBOVUxMLgorICoKKyAqIFF1ZXJpZXMgdGhlIHBlZXIgcGFkIG9mIGEgZ2l2ZW4gc2luayBwYWQgZm9yIHRoZSB0b3RhbCBzdHJlYW0gZHVyYXRpb24uCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgcXVlcnkgY291bGQgYmUgcGVyZm9ybWVkLgorICovCitnYm9vbGVhbgorZ3N0X3BhZF9xdWVyeV9wZWVyX2R1cmF0aW9uIChHc3RQYWQgKiBwYWQsIEdzdEZvcm1hdCBmb3JtYXQsIGdpbnQ2NCAqIGR1cmF0aW9uKQoreworICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKKyAgR3N0UGFkICpwZWVyOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfUEFEX0lTX1NJTksgKHBhZCksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZvcm1hdCAhPSBHU1RfRk9STUFUX1VOREVGSU5FRCwgRkFMU0UpOworCisgIHBlZXIgPSBnc3RfcGFkX2dldF9wZWVyIChwYWQpOworICBpZiAocGVlcikgeworICAgIHJldCA9IGdzdF9wYWRfcXVlcnlfZHVyYXRpb24gKHBlZXIsIGZvcm1hdCwgZHVyYXRpb24pOworICAgIGdzdF9vYmplY3RfdW5yZWYgKHBlZXIpOworICB9CisKKyAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBnc3RfcGFkX3F1ZXJ5X2NvbnZlcnQ6CisgKiBAcGFkOiBhICNHc3RQYWQgdG8gaW52b2tlIHRoZSBjb252ZXJ0IHF1ZXJ5IG9uLgorICogQHNyY19mb3JtYXQ6IGEgI0dzdEZvcm1hdCB0byBjb252ZXJ0IGZyb20uCisgKiBAc3JjX3ZhbDogYSB2YWx1ZSB0byBjb252ZXJ0LgorICogQGRlc3RfZm9ybWF0OiB0aGUgI0dzdEZvcm1hdCB0byBjb252ZXJ0IHRvLgorICogQGRlc3RfdmFsOiAob3V0KTogYSBwb2ludGVyIHRvIHRoZSByZXN1bHQuCisgKgorICogUXVlcmllcyBhIHBhZCB0byBjb252ZXJ0IEBzcmNfdmFsIGluIEBzcmNfZm9ybWF0IHRvIEBkZXN0X2Zvcm1hdC4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBxdWVyeSBjb3VsZCBiZSBwZXJmb3JtZWQuCisgKi8KK2dib29sZWFuCitnc3RfcGFkX3F1ZXJ5X2NvbnZlcnQgKEdzdFBhZCAqIHBhZCwgR3N0Rm9ybWF0IHNyY19mb3JtYXQsIGdpbnQ2NCBzcmNfdmFsLAorICAgIEdzdEZvcm1hdCBkZXN0X2Zvcm1hdCwgZ2ludDY0ICogZGVzdF92YWwpCit7CisgIEdzdFF1ZXJ5ICpxdWVyeTsKKyAgZ2Jvb2xlYW4gcmV0OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkZXN0X2Zvcm1hdCAhPSBHU1RfRk9STUFUX1VOREVGSU5FRCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGVzdF92YWwgIT0gTlVMTCwgRkFMU0UpOworCisgIGlmIChkZXN0X2Zvcm1hdCA9PSBzcmNfZm9ybWF0IHx8IHNyY192YWwgPT0gLTEpIHsKKyAgICAqZGVzdF92YWwgPSBzcmNfdmFsOworICAgIHJldHVybiBUUlVFOworICB9CisKKyAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2NvbnZlcnQgKHNyY19mb3JtYXQsIHNyY192YWwsIGRlc3RfZm9ybWF0KTsKKyAgcmV0ID0gZ3N0X3BhZF9xdWVyeSAocGFkLCBxdWVyeSk7CisKKyAgaWYgKHJldCkKKyAgICBnc3RfcXVlcnlfcGFyc2VfY29udmVydCAocXVlcnksIE5VTEwsIE5VTEwsIE5VTEwsIGRlc3RfdmFsKTsKKworICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKKworICByZXR1cm4gcmV0OworfQorCisvKioKKyAqIGdzdF9wYWRfcXVlcnlfcGVlcl9jb252ZXJ0OgorICogQHBhZDogYSAjR3N0UGFkLCBvbiB3aG9zZSBwZWVyIHBhZCB0byBpbnZva2UgdGhlIGNvbnZlcnQgcXVlcnkgb24uCisgKiAgICAgICBNdXN0IGJlIGEgc2luayBwYWQuCisgKiBAc3JjX2Zvcm1hdDogYSAjR3N0Rm9ybWF0IHRvIGNvbnZlcnQgZnJvbS4KKyAqIEBzcmNfdmFsOiBhIHZhbHVlIHRvIGNvbnZlcnQuCisgKiBAZGVzdF9mb3JtYXQ6IHRoZSAjR3N0Rm9ybWF0IHRvIGNvbnZlcnQgdG8uCisgKiBAZGVzdF92YWw6IChvdXQpOiBhIHBvaW50ZXIgdG8gdGhlIHJlc3VsdC4KKyAqCisgKiBRdWVyaWVzIHRoZSBwZWVyIHBhZCBvZiBhIGdpdmVuIHNpbmsgcGFkIHRvIGNvbnZlcnQgQHNyY192YWwgaW4gQHNyY19mb3JtYXQKKyAqIHRvIEBkZXN0X2Zvcm1hdC4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBxdWVyeSBjb3VsZCBiZSBwZXJmb3JtZWQuCisgKi8KK2dib29sZWFuCitnc3RfcGFkX3F1ZXJ5X3BlZXJfY29udmVydCAoR3N0UGFkICogcGFkLCBHc3RGb3JtYXQgc3JjX2Zvcm1hdCwgZ2ludDY0IHNyY192YWwsCisgICAgR3N0Rm9ybWF0IGRlc3RfZm9ybWF0LCBnaW50NjQgKiBkZXN0X3ZhbCkKK3sKKyAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7CisgIEdzdFBhZCAqcGVlcjsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1BBRF9JU19TSU5LIChwYWQpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkZXN0X2Zvcm1hdCAhPSBHU1RfRk9STUFUX1VOREVGSU5FRCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGVzdF92YWwgIT0gTlVMTCwgRkFMU0UpOworCisgIHBlZXIgPSBnc3RfcGFkX2dldF9wZWVyIChwYWQpOworICBpZiAocGVlcikgeworICAgIHJldCA9IGdzdF9wYWRfcXVlcnlfY29udmVydCAocGVlciwgc3JjX2Zvcm1hdCwgc3JjX3ZhbCwgZGVzdF9mb3JtYXQsCisgICAgICAgIGRlc3RfdmFsKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChwZWVyKTsKKyAgfQorCisgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfZm91bmRfdGFnc19mb3JfcGFkOgorICogQGVsZW1lbnQ6IGVsZW1lbnQgZm9yIHdoaWNoIHRvIHBvc3QgdGFnbGlzdCB0byBidXMuCisgKiBAcGFkOiAodHJhbnNmZXIgbm9uZSk6IHBhZCBvbiB3aGljaCB0byBwdXNoIHRhZy1ldmVudAorICogQGxpc3Q6ICh0cmFuc2ZlciBmdWxsKTogdGhlIHRhZ2xpc3QgdG8gcG9zdCBvbiB0aGUgYnVzIGFuZCBjcmVhdGUgZXZlbnQgZnJvbQorICoKKyAqIFBvc3RzIGEgbWVzc2FnZSB0byB0aGUgYnVzIHRoYXQgbmV3IHRhZ3Mgd2VyZSBmb3VuZCBhbmQgcHVzaGVzIHRoZQorICogdGFncyBhcyBldmVudC4gVGFrZXMgb3duZXJzaGlwIG9mIHRoZSBAbGlzdC4KKyAqCisgKiBUaGlzIGlzIGEgdXRpbGl0eSBtZXRob2QgZm9yIGVsZW1lbnRzLiBBcHBsaWNhdGlvbnMgc2hvdWxkIHVzZSB0aGUKKyAqICNHc3RUYWdTZXR0ZXIgaW50ZXJmYWNlLgorICovCit2b2lkCitnc3RfZWxlbWVudF9mb3VuZF90YWdzX2Zvcl9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAorICAgIEdzdFBhZCAqIHBhZCwgR3N0VGFnTGlzdCAqIGxpc3QpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKGVsZW1lbnQgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKHBhZCAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAobGlzdCAhPSBOVUxMKTsKKworICBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZ3N0X2V2ZW50X25ld190YWcgKGdzdF90YWdfbGlzdF9jb3B5IChsaXN0KSkpOworfQorCitzdGF0aWMgdm9pZAorcHVzaF9hbmRfcmVmIChjb25zdCBHVmFsdWUgKiB2cGFkLCBHc3RFdmVudCAqIGV2ZW50KQoreworICBHc3RQYWQgKnBhZCA9IGdfdmFsdWVfZ2V0X29iamVjdCAodnBhZCk7CisKKyAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsIGdzdF9ldmVudF9yZWYgKGV2ZW50KSk7Cit9CisKKy8qKgorICogZ3N0X2VsZW1lbnRfZm91bmRfdGFnczoKKyAqIEBlbGVtZW50OiBlbGVtZW50IGZvciB3aGljaCB3ZSBmb3VuZCB0aGUgdGFncy4KKyAqIEBsaXN0OiAodHJhbnNmZXIgZnVsbCk6IGxpc3Qgb2YgdGFncy4KKyAqCisgKiBQb3N0cyBhIG1lc3NhZ2UgdG8gdGhlIGJ1cyB0aGF0IG5ldyB0YWdzIHdlcmUgZm91bmQsIGFuZCBwdXNoZXMgYW4gZXZlbnQKKyAqIHRvIGFsbCBzb3VyY2VwYWRzLiBUYWtlcyBvd25lcnNoaXAgb2YgdGhlIEBsaXN0LgorICoKKyAqIFRoaXMgaXMgYSB1dGlsaXR5IG1ldGhvZCBmb3IgZWxlbWVudHMuIEFwcGxpY2F0aW9ucyBzaG91bGQgdXNlIHRoZQorICogI0dzdFRhZ1NldHRlciBpbnRlcmZhY2UuCisgKi8KK3ZvaWQKK2dzdF9lbGVtZW50X2ZvdW5kX3RhZ3MgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RUYWdMaXN0ICogbGlzdCkKK3sKKyAgR3N0SXRlcmF0b3IgKml0ZXI7CisgIEdzdEV2ZW50ICpldmVudDsKKworICBnX3JldHVybl9pZl9mYWlsIChlbGVtZW50ICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsIChsaXN0ICE9IE5VTEwpOworCisgIGl0ZXIgPSBnc3RfZWxlbWVudF9pdGVyYXRlX3NyY19wYWRzIChlbGVtZW50KTsKKyAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3RhZyAoZ3N0X3RhZ19saXN0X2NvcHkgKGxpc3QpKTsKKyAgZ3N0X2l0ZXJhdG9yX2ZvcmVhY2ggKGl0ZXIsIChHc3RJdGVyYXRvckZvcmVhY2hGdW5jdGlvbikgcHVzaF9hbmRfcmVmLCBldmVudCk7CisgIGdzdF9pdGVyYXRvcl9mcmVlIChpdGVyKTsKKyAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Cit9CisKK3N0YXRpYyBHc3RQYWQgKgorZWxlbWVudF9maW5kX3VubGlua2VkX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgIEdzdEl0ZXJhdG9yICppdGVyOworICBHc3RQYWQgKnVubGlua2VkX3BhZCA9IE5VTEw7CisgIGdib29sZWFuIGRvbmU7CisgIEdWYWx1ZSBkYXRhID0geyAwLCB9OworCisgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBHU1RfUEFEX1NSQzoKKyAgICAgIGl0ZXIgPSBnc3RfZWxlbWVudF9pdGVyYXRlX3NyY19wYWRzIChlbGVtZW50KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1BBRF9TSU5LOgorICAgICAgaXRlciA9IGdzdF9lbGVtZW50X2l0ZXJhdGVfc2lua19wYWRzIChlbGVtZW50KTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBnX3JldHVybl92YWxfaWZfcmVhY2hlZCAoTlVMTCk7CisgIH0KKworICBkb25lID0gRkFMU0U7CisgIHdoaWxlICghZG9uZSkgeworICAgIHN3aXRjaCAoZ3N0X2l0ZXJhdG9yX25leHQgKGl0ZXIsICZkYXRhKSkgeworICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfT0s6eworICAgICAgICBHc3RQYWQgKnBlZXI7CisgICAgICAgIEdzdFBhZCAqcGFkID0gZ192YWx1ZV9nZXRfb2JqZWN0ICgmZGF0YSk7CisKKyAgICAgICAgR1NUX0NBVF9MT0cgKEdTVF9DQVRfRUxFTUVOVF9QQURTLCAiZXhhbWluaW5nIHBhZCAlczolcyIsCisgICAgICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOworCisgICAgICAgIHBlZXIgPSBnc3RfcGFkX2dldF9wZWVyIChwYWQpOworICAgICAgICBpZiAocGVlciA9PSBOVUxMKSB7CisgICAgICAgICAgdW5saW5rZWRfcGFkID0gZ3N0X29iamVjdF9yZWYgKHBhZCk7CisgICAgICAgICAgZG9uZSA9IFRSVUU7CisgICAgICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsCisgICAgICAgICAgICAgICJmb3VuZCBleGlzdGluZyB1bmxpbmtlZCBwYWQgJXM6JXMiLAorICAgICAgICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHVubGlua2VkX3BhZCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBlZXIpOworICAgICAgICB9CisgICAgICAgIGdfdmFsdWVfcmVzZXQgKCZkYXRhKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgorICAgICAgICBkb25lID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6CisgICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0ZXIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0VSUk9SOgorICAgICAgICBnX3JldHVybl92YWxfaWZfcmVhY2hlZCAoTlVMTCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBnX3ZhbHVlX3Vuc2V0ICgmZGF0YSk7CisgIGdzdF9pdGVyYXRvcl9mcmVlIChpdGVyKTsKKworICByZXR1cm4gdW5saW5rZWRfcGFkOworfQorCisvKioKKyAqIGdzdF9iaW5fZmluZF91bmxpbmtlZF9wYWQ6CisgKiBAYmluOiBiaW4gaW4gd2hpY2ggdG8gbG9vayBmb3IgZWxlbWVudHMgd2l0aCB1bmxpbmtlZCBwYWRzCisgKiBAZGlyZWN0aW9uOiB3aGV0aGVyIHRvIGxvb2sgZm9yIGFuIHVubGlua2VkIHNvdXJjZSBvciBzaW5rIHBhZAorICoKKyAqIFJlY3Vyc2l2ZWx5IGxvb2tzIGZvciBlbGVtZW50cyB3aXRoIGFuIHVubGlua2VkIHBhZCBvZiB0aGUgZ2l2ZW4KKyAqIGRpcmVjdGlvbiB3aXRoaW4gdGhlIHNwZWNpZmllZCBiaW4gYW5kIHJldHVybnMgYW4gdW5saW5rZWQgcGFkCisgKiBpZiBvbmUgaXMgZm91bmQsIG9yIE5VTEwgb3RoZXJ3aXNlLiBJZiBhIHBhZCBpcyBmb3VuZCwgdGhlIGNhbGxlcgorICogb3ducyBhIHJlZmVyZW5jZSB0byBpdCBhbmQgc2hvdWxkIHVzZSBnc3Rfb2JqZWN0X3VucmVmKCkgb24gdGhlCisgKiBwYWQgd2hlbiBpdCBpcyBub3QgbmVlZGVkIGFueSBsb25nZXIuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB1bmxpbmtlZCBwYWQgb2YgdGhlIGdpdmVuIGRpcmVjdGlvbiwgb3IgTlVMTC4KKyAqCisgKiBTaW5jZTogMC4xMC4yMAorICovCitHc3RQYWQgKgorZ3N0X2Jpbl9maW5kX3VubGlua2VkX3BhZCAoR3N0QmluICogYmluLCBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICBHc3RJdGVyYXRvciAqaXRlcjsKKyAgZ2Jvb2xlYW4gZG9uZTsKKyAgR3N0UGFkICpwYWQgPSBOVUxMOworICBHVmFsdWUgZGF0YSA9IHsgMCwgfTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JJTiAoYmluKSwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkaXJlY3Rpb24gIT0gR1NUX1BBRF9VTktOT1dOLCBOVUxMKTsKKworICBkb25lID0gRkFMU0U7CisgIGl0ZXIgPSBnc3RfYmluX2l0ZXJhdGVfcmVjdXJzZSAoYmluKTsKKyAgd2hpbGUgKCFkb25lKSB7CisgICAgc3dpdGNoIChnc3RfaXRlcmF0b3JfbmV4dCAoaXRlciwgJmRhdGEpKSB7CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9PSzp7CisgICAgICAgIEdzdEVsZW1lbnQgKmVsZW1lbnQgPSBnX3ZhbHVlX2dldF9vYmplY3QgKCZkYXRhKTsKKworICAgICAgICBwYWQgPSBlbGVtZW50X2ZpbmRfdW5saW5rZWRfcGFkIChlbGVtZW50LCBkaXJlY3Rpb24pOworICAgICAgICBpZiAocGFkICE9IE5VTEwpCisgICAgICAgICAgZG9uZSA9IFRSVUU7CisgICAgICAgIGdfdmFsdWVfcmVzZXQgKCZkYXRhKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgorICAgICAgICBkb25lID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6CisgICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0ZXIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0VSUk9SOgorICAgICAgICBnX3JldHVybl92YWxfaWZfcmVhY2hlZCAoTlVMTCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBnX3ZhbHVlX3Vuc2V0ICgmZGF0YSk7CisgIGdzdF9pdGVyYXRvcl9mcmVlIChpdGVyKTsKKworICByZXR1cm4gcGFkOworfQorCisvKioKKyAqIGdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbjoKKyAqIEBiaW5fZGVzY3JpcHRpb246IGNvbW1hbmQgbGluZSBkZXNjcmliaW5nIHRoZSBiaW4KKyAqIEBnaG9zdF91bmxpbmtlZF9wYWRzOiB3aGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGdob3N0IHBhZHMKKyAqICAgICBmb3IgdW5saW5rZWQgc291cmNlIG9yIHNpbmsgcGFkcyB3aXRoaW4gdGhlIGJpbgorICogQGVycjogd2hlcmUgdG8gc3RvcmUgdGhlIGVycm9yIG1lc3NhZ2UgaW4gY2FzZSBvZiBhbiBlcnJvciwgb3IgTlVMTAorICoKKyAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCBnc3RfcGFyc2VfbGF1bmNoKCkgdG8gY3JlYXRlIGEKKyAqICNHc3RCaW4gZnJvbSBhIGdzdC1sYXVuY2gtc3R5bGUgcGlwZWxpbmUgZGVzY3JpcHRpb24uIFNlZQorICogZ3N0X3BhcnNlX2xhdW5jaCgpIGFuZCB0aGUgZ3N0LWxhdW5jaCBtYW4gcGFnZSBmb3IgZGV0YWlscyBhYm91dCB0aGUKKyAqIHN5bnRheC4gR2hvc3QgcGFkcyBvbiB0aGUgYmluIGZvciB1bmxpbmtlZCBzb3VyY2Ugb3Igc2luayBwYWRzCisgKiB3aXRoaW4gdGhlIGJpbiBjYW4gYXV0b21hdGljYWxseSBiZSBjcmVhdGVkIChidXQgb25seSBhIG1heGltdW0gb2YKKyAqIG9uZSBnaG9zdCBwYWQgZm9yIGVhY2ggZGlyZWN0aW9uIHdpbGwgYmUgY3JlYXRlZDsgaWYgeW91IGV4cGVjdAorICogbXVsdGlwbGUgdW5saW5rZWQgc291cmNlIHBhZHMgb3IgbXVsdGlwbGUgdW5saW5rZWQgc2luayBwYWRzCisgKiBhbmQgd2FudCB0aGVtIGFsbCBnaG9zdGVkLCB5b3Ugd2lsbCBoYXZlIHRvIGNyZWF0ZSB0aGUgZ2hvc3QgcGFkcworICogeW91cnNlbGYpLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXdseS1jcmVhdGVkIGJpbiwgb3IgTlVMTCBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKyAqCisgKiBTaW5jZTogMC4xMC4zCisgKi8KK0dzdEVsZW1lbnQgKgorZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uIChjb25zdCBnY2hhciAqIGJpbl9kZXNjcmlwdGlvbiwKKyAgICBnYm9vbGVhbiBnaG9zdF91bmxpbmtlZF9wYWRzLCBHRXJyb3IgKiogZXJyKQoreworICByZXR1cm4gZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uX2Z1bGwgKGJpbl9kZXNjcmlwdGlvbiwKKyAgICAgIGdob3N0X3VubGlua2VkX3BhZHMsIE5VTEwsIEdTVF9QQVJTRV9GTEFHX05PTkUsIGVycik7Cit9CisKKy8qKgorICogZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uX2Z1bGw6CisgKiBAYmluX2Rlc2NyaXB0aW9uOiBjb21tYW5kIGxpbmUgZGVzY3JpYmluZyB0aGUgYmluCisgKiBAZ2hvc3RfdW5saW5rZWRfcGFkczogd2hldGhlciB0byBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBnaG9zdCBwYWRzCisgKiAgICAgZm9yIHVubGlua2VkIHNvdXJjZSBvciBzaW5rIHBhZHMgd2l0aGluIHRoZSBiaW4KKyAqIEBjb250ZXh0OiAodHJhbnNmZXIgbm9uZSkgKGFsbG93LW5vbmUpOiBhIHBhcnNlIGNvbnRleHQgYWxsb2NhdGVkIHdpdGgKKyAqICAgICBnc3RfcGFyc2VfY29udGV4dF9uZXcoKSwgb3IgJU5VTEwKKyAqIEBmbGFnczogcGFyc2luZyBvcHRpb25zLCBvciAjR1NUX1BBUlNFX0ZMQUdfTk9ORQorICogQGVycjogd2hlcmUgdG8gc3RvcmUgdGhlIGVycm9yIG1lc3NhZ2UgaW4gY2FzZSBvZiBhbiBlcnJvciwgb3IgTlVMTAorICoKKyAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCBnc3RfcGFyc2VfbGF1bmNoKCkgdG8gY3JlYXRlIGEKKyAqICNHc3RCaW4gZnJvbSBhIGdzdC1sYXVuY2gtc3R5bGUgcGlwZWxpbmUgZGVzY3JpcHRpb24uIFNlZQorICogZ3N0X3BhcnNlX2xhdW5jaCgpIGFuZCB0aGUgZ3N0LWxhdW5jaCBtYW4gcGFnZSBmb3IgZGV0YWlscyBhYm91dCB0aGUKKyAqIHN5bnRheC4gR2hvc3QgcGFkcyBvbiB0aGUgYmluIGZvciB1bmxpbmtlZCBzb3VyY2Ugb3Igc2luayBwYWRzCisgKiB3aXRoaW4gdGhlIGJpbiBjYW4gYXV0b21hdGljYWxseSBiZSBjcmVhdGVkIChidXQgb25seSBhIG1heGltdW0gb2YKKyAqIG9uZSBnaG9zdCBwYWQgZm9yIGVhY2ggZGlyZWN0aW9uIHdpbGwgYmUgY3JlYXRlZDsgaWYgeW91IGV4cGVjdAorICogbXVsdGlwbGUgdW5saW5rZWQgc291cmNlIHBhZHMgb3IgbXVsdGlwbGUgdW5saW5rZWQgc2luayBwYWRzCisgKiBhbmQgd2FudCB0aGVtIGFsbCBnaG9zdGVkLCB5b3Ugd2lsbCBoYXZlIHRvIGNyZWF0ZSB0aGUgZ2hvc3QgcGFkcworICogeW91cnNlbGYpLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXdseS1jcmVhdGVkIGJpbiwgb3IgTlVMTCBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKyAqCisgKiBTaW5jZTogMC4xMC4yMAorICovCitHc3RFbGVtZW50ICoKK2dzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbl9mdWxsIChjb25zdCBnY2hhciAqIGJpbl9kZXNjcmlwdGlvbiwKKyAgICBnYm9vbGVhbiBnaG9zdF91bmxpbmtlZF9wYWRzLCBHc3RQYXJzZUNvbnRleHQgKiBjb250ZXh0LAorICAgIEdzdFBhcnNlRmxhZ3MgZmxhZ3MsIEdFcnJvciAqKiBlcnIpCit7CisjaWZuZGVmIEdTVF9ESVNBQkxFX1BBUlNFCisgIEdzdFBhZCAqcGFkID0gTlVMTDsKKyAgR3N0QmluICpiaW47CisgIGdjaGFyICpkZXNjOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChiaW5fZGVzY3JpcHRpb24gIT0gTlVMTCwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlcnIgPT0gTlVMTCB8fCAqZXJyID09IE5VTEwsIE5VTEwpOworCisgIEdTVF9ERUJVRyAoIk1ha2luZyBiaW4gZnJvbSBkZXNjcmlwdGlvbiAnJXMnIiwgYmluX2Rlc2NyaXB0aW9uKTsKKworICAvKiBwYXJzZSB0aGUgcGlwZWxpbmUgdG8gYSBiaW4gKi8KKyAgZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoImJpbi4oICVzICkiLCBiaW5fZGVzY3JpcHRpb24pOworICBiaW4gPSAoR3N0QmluICopIGdzdF9wYXJzZV9sYXVuY2hfZnVsbCAoZGVzYywgY29udGV4dCwgZmxhZ3MsIGVycik7CisgIGdfZnJlZSAoZGVzYyk7CisKKyAgaWYgKGJpbiA9PSBOVUxMIHx8IChlcnIgJiYgKmVyciAhPSBOVUxMKSkgeworICAgIGlmIChiaW4pCisgICAgICBnc3Rfb2JqZWN0X3VucmVmIChiaW4pOworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgLyogZmluZCBwYWRzIGFuZCBnaG9zdCB0aGVtIGlmIG5lY2Vzc2FyeSAqLworICBpZiAoZ2hvc3RfdW5saW5rZWRfcGFkcykgeworICAgIGlmICgocGFkID0gZ3N0X2Jpbl9maW5kX3VubGlua2VkX3BhZCAoYmluLCBHU1RfUEFEX1NSQykpKSB7CisgICAgICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoYmluKSwgZ3N0X2dob3N0X3BhZF9uZXcgKCJzcmMiLCBwYWQpKTsKKyAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7CisgICAgfQorICAgIGlmICgocGFkID0gZ3N0X2Jpbl9maW5kX3VubGlua2VkX3BhZCAoYmluLCBHU1RfUEFEX1NJTkspKSkgeworICAgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKGJpbiksIGdzdF9naG9zdF9wYWRfbmV3ICgic2luayIsIHBhZCkpOworICAgICAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gR1NUX0VMRU1FTlQgKGJpbik7CisjZWxzZQorICBnY2hhciAqbXNnOworCisgIEdTVF9XQVJOSU5HICgiRGlzYWJsZWQgQVBJIGNhbGxlZCIpOworCisgIG1zZyA9IGdzdF9lcnJvcl9nZXRfbWVzc2FnZSAoR1NUX0NPUkVfRVJST1IsIEdTVF9DT1JFX0VSUk9SX0RJU0FCTEVEKTsKKyAgZ19zZXRfZXJyb3IgKGVyciwgR1NUX0NPUkVfRVJST1IsIEdTVF9DT1JFX0VSUk9SX0RJU0FCTEVELCAiJXMiLCBtc2cpOworICBnX2ZyZWUgKG1zZyk7CisKKyAgcmV0dXJuIE5VTEw7CisjZW5kaWYKK30KKworLyoqCisgKiBnc3RfdHlwZV9yZWdpc3Rlcl9zdGF0aWNfZnVsbDoKKyAqIEBwYXJlbnRfdHlwZTogVGhlIEdUeXBlIG9mIHRoZSBwYXJlbnQgdHlwZSB0aGUgbmV3bHkgcmVnaXN0ZXJlZCB0eXBlIHdpbGwKKyAqICAgZGVyaXZlIGZyb20KKyAqIEB0eXBlX25hbWU6IE5VTEwtdGVybWluYXRlZCBzdHJpbmcgdXNlZCBhcyB0aGUgbmFtZSBvZiB0aGUgbmV3IHR5cGUKKyAqIEBjbGFzc19zaXplOiBTaXplIG9mIHRoZSBjbGFzcyBzdHJ1Y3R1cmUuCisgKiBAYmFzZV9pbml0OiBMb2NhdGlvbiBvZiB0aGUgYmFzZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiAob3B0aW9uYWwpLgorICogQGJhc2VfZmluYWxpemU6IExvY2F0aW9uIG9mIHRoZSBiYXNlIGZpbmFsaXphdGlvbiBmdW5jdGlvbiAob3B0aW9uYWwpLgorICogQGNsYXNzX2luaXQ6IExvY2F0aW9uIG9mIHRoZSBjbGFzcyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgY2xhc3MgdHlwZXMKKyAqICAgTG9jYXRpb24gb2YgdGhlIGRlZmF1bHQgdnRhYmxlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciBpbnRlcmZhY2UKKyAqICAgdHlwZXMuIChvcHRpb25hbCkKKyAqIEBjbGFzc19maW5hbGl6ZTogTG9jYXRpb24gb2YgdGhlIGNsYXNzIGZpbmFsaXphdGlvbiBmdW5jdGlvbiBmb3IgY2xhc3MgdHlwZXMuCisgKiAgIExvY2F0aW9uIG9mIHRoZSBkZWZhdWx0IHZ0YWJsZSBmaW5hbGl6YXRpb24gZnVuY3Rpb24gZm9yIGludGVyZmFjZSB0eXBlcy4KKyAqICAgKG9wdGlvbmFsKQorICogQGNsYXNzX2RhdGE6IFVzZXItc3VwcGxpZWQgZGF0YSBwYXNzZWQgdG8gdGhlIGNsYXNzIGluaXQvZmluYWxpemUgZnVuY3Rpb25zLgorICogQGluc3RhbmNlX3NpemU6IFNpemUgb2YgdGhlIGluc3RhbmNlIChvYmplY3QpIHN0cnVjdHVyZSAocmVxdWlyZWQgZm9yCisgKiAgIGluc3RhbnRpYXRhYmxlIHR5cGVzIG9ubHkpLgorICogQG5fcHJlYWxsb2NzOiBUaGUgbnVtYmVyIG9mIHByZS1hbGxvY2F0ZWQgKGNhY2hlZCkgaW5zdGFuY2VzIHRvIHJlc2VydmUKKyAqICAgbWVtb3J5IGZvciAoMCBpbmRpY2F0ZXMgbm8gY2FjaGluZykuIElnbm9yZWQgb24gcmVjZW50IEdMaWIncy4KKyAqIEBpbnN0YW5jZV9pbml0OiBMb2NhdGlvbiBvZiB0aGUgaW5zdGFuY2UgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gKG9wdGlvbmFsLAorICogICBmb3IgaW5zdGFudGlhdGFibGUgdHlwZXMgb25seSkuCisgKiBAdmFsdWVfdGFibGU6IEEgR1R5cGVWYWx1ZVRhYmxlIGZ1bmN0aW9uIHRhYmxlIGZvciBnZW5lcmljIGhhbmRsaW5nIG9mCisgKiAgIEdWYWx1ZXMgb2YgdGhpcyB0eXBlICh1c3VhbGx5IG9ubHkgdXNlZnVsIGZvciBmdW5kYW1lbnRhbCB0eXBlcykuCisgKiBAZmxhZ3M6ICNHVHlwZUZsYWdzIGZvciB0aGlzIEdUeXBlLiBFLmc6IEdfVFlQRV9GTEFHX0FCU1RSQUNUCisgKgorICogSGVscGVyIGZ1bmN0aW9uIHdoaWNoIGNvbnN0cnVjdHMgYSAjR1R5cGVJbmZvIHN0cnVjdHVyZSBhbmQgcmVnaXN0ZXJzIGEKKyAqIEdUeXBlLCBidXQgd2hpY2ggZ2VuZXJhdGVzIGxlc3MgbGlua2VyIG92ZXJoZWFkIHRoYW4gYSBzdGF0aWMgY29uc3QKKyAqICNHVHlwZUluZm8gc3RydWN0dXJlLiBGb3IgZnVydGhlciBkZXRhaWxzIG9mIHRoZSBwYXJhbWV0ZXJzLCBwbGVhc2Ugc2VlCisgKiAjR1R5cGVJbmZvIGluIHRoZSBHTGliIGRvY3VtZW50YXRpb24uCisgKgorICogUmVnaXN0ZXJzIHR5cGVfbmFtZSBhcyB0aGUgbmFtZSBvZiBhIG5ldyBzdGF0aWMgdHlwZSBkZXJpdmVkIGZyb20KKyAqIHBhcmVudF90eXBlLiBUaGUgdmFsdWUgb2YgZmxhZ3MgZGV0ZXJtaW5lcyB0aGUgbmF0dXJlIChlLmcuIGFic3RyYWN0IG9yCisgKiBub3QpIG9mIHRoZSB0eXBlLiBJdCB3b3JrcyBieSBmaWxsaW5nIGEgR1R5cGVJbmZvIHN0cnVjdCBhbmQgY2FsbGluZworICogZ190eXBlX3JlZ2lzdGVyX3N0YXRpYygpLgorICoKKyAqIFJldHVybnM6IEEgI0dUeXBlIGZvciB0aGUgbmV3bHktcmVnaXN0ZXJlZCB0eXBlLgorICoKKyAqIFNpbmNlOiAwLjEwLjE0CisgKi8KK0dUeXBlCitnc3RfdHlwZV9yZWdpc3Rlcl9zdGF0aWNfZnVsbCAoR1R5cGUgcGFyZW50X3R5cGUsCisgICAgY29uc3QgZ2NoYXIgKiB0eXBlX25hbWUsCisgICAgZ3VpbnQgY2xhc3Nfc2l6ZSwKKyAgICBHQmFzZUluaXRGdW5jIGJhc2VfaW5pdCwKKyAgICBHQmFzZUZpbmFsaXplRnVuYyBiYXNlX2ZpbmFsaXplLAorICAgIEdDbGFzc0luaXRGdW5jIGNsYXNzX2luaXQsCisgICAgR0NsYXNzRmluYWxpemVGdW5jIGNsYXNzX2ZpbmFsaXplLAorICAgIGdjb25zdHBvaW50ZXIgY2xhc3NfZGF0YSwKKyAgICBndWludCBpbnN0YW5jZV9zaXplLAorICAgIGd1aW50MTYgbl9wcmVhbGxvY3MsCisgICAgR0luc3RhbmNlSW5pdEZ1bmMgaW5zdGFuY2VfaW5pdCwKKyAgICBjb25zdCBHVHlwZVZhbHVlVGFibGUgKiB2YWx1ZV90YWJsZSwgR1R5cGVGbGFncyBmbGFncykKK3sKKyAgR1R5cGVJbmZvIGluZm87CisKKyAgaW5mby5jbGFzc19zaXplID0gY2xhc3Nfc2l6ZTsKKyAgaW5mby5iYXNlX2luaXQgPSBiYXNlX2luaXQ7CisgIGluZm8uYmFzZV9maW5hbGl6ZSA9IGJhc2VfZmluYWxpemU7CisgIGluZm8uY2xhc3NfaW5pdCA9IGNsYXNzX2luaXQ7CisgIGluZm8uY2xhc3NfZmluYWxpemUgPSBjbGFzc19maW5hbGl6ZTsKKyAgaW5mby5jbGFzc19kYXRhID0gY2xhc3NfZGF0YTsKKyAgaW5mby5pbnN0YW5jZV9zaXplID0gaW5zdGFuY2Vfc2l6ZTsKKyAgaW5mby5uX3ByZWFsbG9jcyA9IG5fcHJlYWxsb2NzOworICBpbmZvLmluc3RhbmNlX2luaXQgPSBpbnN0YW5jZV9pbml0OworICBpbmZvLnZhbHVlX3RhYmxlID0gdmFsdWVfdGFibGU7CisKKyAgcmV0dXJuIGdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMgKHBhcmVudF90eXBlLCB0eXBlX25hbWUsICZpbmZvLCBmbGFncyk7Cit9CisKKworLyoqCisgKiBnc3RfdXRpbF9nZXRfdGltZXN0YW1wOgorICoKKyAqIEdldCBhIHRpbWVzdGFtcCBhcyBHc3RDbG9ja1RpbWUgdG8gYmUgdXNlZCBmb3IgaW50ZXJ2YWwgbWVhc3VyZW1lbnRzLgorICogVGhlIHRpbWVzdGFtcCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGluIGFueSBvdGhlciB3YXkuCisgKgorICogUmV0dXJuczogdGhlIHRpbWVzdGFtcAorICoKKyAqIFNpbmNlOiAwLjEwLjE2CisgKi8KK0dzdENsb2NrVGltZQorZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAodm9pZCkKK3sKKyNpZiBkZWZpbmVkIChIQVZFX1BPU0lYX1RJTUVSUykgJiYgZGVmaW5lZChIQVZFX01PTk9UT05JQ19DTE9DSykKKyAgc3RydWN0IHRpbWVzcGVjIG5vdzsKKworICBjbG9ja19nZXR0aW1lIChDTE9DS19NT05PVE9OSUMsICZub3cpOworICByZXR1cm4gR1NUX1RJTUVTUEVDX1RPX1RJTUUgKG5vdyk7CisjZWxzZQorICBHVGltZVZhbCBub3c7CisKKyAgZ19nZXRfY3VycmVudF90aW1lICgmbm93KTsKKyAgcmV0dXJuIEdTVF9USU1FVkFMX1RPX1RJTUUgKG5vdyk7CisjZW5kaWYKK30KKworLyoqCisgKiBnc3RfdXRpbF9hcnJheV9iaW5hcnlfc2VhcmNoOgorICogQGFycmF5OiB0aGUgc29ydGVkIGlucHV0IGFycmF5CisgKiBAbnVtX2VsZW1lbnRzOiBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGFycmF5CisgKiBAZWxlbWVudF9zaXplOiBzaXplIG9mIGV2ZXJ5IGVsZW1lbnQgaW4gYnl0ZXMKKyAqIEBzZWFyY2hfZnVuYzogKHNjb3BlIGNhbGwpOiBmdW5jdGlvbiB0byBjb21wYXJlIHR3byBlbGVtZW50cywgQHNlYXJjaF9kYXRhIHdpbGwgYWx3YXlzIGJlIHBhc3NlZCBhcyBzZWNvbmQgYXJndW1lbnQKKyAqIEBtb2RlOiBzZWFyY2ggbW9kZSB0aGF0IHNob3VsZCBiZSB1c2VkCisgKiBAc2VhcmNoX2RhdGE6IGVsZW1lbnQgdGhhdCBzaG91bGQgYmUgZm91bmQKKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogZGF0YSB0byBwYXNzIHRvIEBzZWFyY2hfZnVuYworICoKKyAqIFNlYXJjaGVzIGluc2lkZSBAYXJyYXkgZm9yIEBzZWFyY2hfZGF0YSBieSB1c2luZyB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbgorICogQHNlYXJjaF9mdW5jLiBAYXJyYXkgbXVzdCBiZSBzb3J0ZWQgYXNjZW5kaW5nLgorICoKKyAqIEFzIEBzZWFyY2hfZGF0YSBpcyBhbHdheXMgcGFzc2VkIGFzIHNlY29uZCBhcmd1bWVudCB0byBAc2VhcmNoX2Z1bmMgaXQncworICogbm90IHJlcXVpcmVkIHRoYXQgQHNlYXJjaF9kYXRhIGhhcyB0aGUgc2FtZSB0eXBlIGFzIHRoZSBhcnJheSBlbGVtZW50cy4KKyAqCisgKiBUaGUgY29tcGxleGl0eSBvZiB0aGlzIHNlYXJjaCBmdW5jdGlvbiBpcyBPKGxvZyAobnVtX2VsZW1lbnRzKSkuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBUaGUgYWRkcmVzcyBvZiB0aGUgZm91bmQgZWxlbWVudCBvciAlTlVMTCBpZiBub3RoaW5nIHdhcyBmb3VuZAorICoKKyAqIFNpbmNlOiAwLjEwLjIzCisgKi8KK2dwb2ludGVyCitnc3RfdXRpbF9hcnJheV9iaW5hcnlfc2VhcmNoIChncG9pbnRlciBhcnJheSwgZ3VpbnQgbnVtX2VsZW1lbnRzLAorICAgIGdzaXplIGVsZW1lbnRfc2l6ZSwgR0NvbXBhcmVEYXRhRnVuYyBzZWFyY2hfZnVuYywgR3N0U2VhcmNoTW9kZSBtb2RlLAorICAgIGdjb25zdHBvaW50ZXIgc2VhcmNoX2RhdGEsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgZ2xvbmcgbGVmdCA9IDAsIHJpZ2h0ID0gbnVtX2VsZW1lbnRzIC0gMSwgbTsKKyAgZ2ludCByZXQ7CisgIGd1aW50OCAqZGF0YSA9IChndWludDggKikgYXJyYXk7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGFycmF5ICE9IE5VTEwsIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZWxlbWVudF9zaXplID4gMCwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWFyY2hfZnVuYyAhPSBOVUxMLCBOVUxMKTsKKworICAvKiAwLiBObyBlbGVtZW50cyA9PiByZXR1cm4gTlVMTCAqLworICBpZiAobnVtX2VsZW1lbnRzID09IDApCisgICAgcmV0dXJuIE5VTEw7CisKKyAgLyogMS4gSWYgc2VhcmNoX2RhdGEgaXMgYmVmb3JlIHRoZSAwdGggZWxlbWVudCByZXR1cm4gdGhlIDB0aCBlbGVtZW50ICovCisgIHJldCA9IHNlYXJjaF9mdW5jIChkYXRhLCBzZWFyY2hfZGF0YSwgdXNlcl9kYXRhKTsKKyAgaWYgKChyZXQgPj0gMCAmJiBtb2RlID09IEdTVF9TRUFSQ0hfTU9ERV9BRlRFUikgfHwgcmV0ID09IDApCisgICAgcmV0dXJuIGRhdGE7CisgIGVsc2UgaWYgKHJldCA+IDApCisgICAgcmV0dXJuIE5VTEw7CisKKyAgLyogMi4gSWYgc2VhcmNoX2RhdGEgaXMgYWZ0ZXIgdGhlIGxhc3QgZWxlbWVudCByZXR1cm4gdGhlIGxhc3QgZWxlbWVudCAqLworICByZXQgPQorICAgICAgc2VhcmNoX2Z1bmMgKGRhdGEgKyAobnVtX2VsZW1lbnRzIC0gMSkgKiBlbGVtZW50X3NpemUsIHNlYXJjaF9kYXRhLAorICAgICAgdXNlcl9kYXRhKTsKKyAgaWYgKChyZXQgPD0gMCAmJiBtb2RlID09IEdTVF9TRUFSQ0hfTU9ERV9CRUZPUkUpIHx8IHJldCA9PSAwKQorICAgIHJldHVybiBkYXRhICsgKG51bV9lbGVtZW50cyAtIDEpICogZWxlbWVudF9zaXplOworICBlbHNlIGlmIChyZXQgPCAwKQorICAgIHJldHVybiBOVUxMOworCisgIC8qIDMuIGVsc2UgYmluYXJ5IHNlYXJjaCAqLworICB3aGlsZSAoVFJVRSkgeworICAgIG0gPSBsZWZ0ICsgKHJpZ2h0IC0gbGVmdCkgLyAyOworCisgICAgcmV0ID0gc2VhcmNoX2Z1bmMgKGRhdGEgKyBtICogZWxlbWVudF9zaXplLCBzZWFyY2hfZGF0YSwgdXNlcl9kYXRhKTsKKworICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgcmV0dXJuIGRhdGEgKyBtICogZWxlbWVudF9zaXplOworICAgIH0gZWxzZSBpZiAocmV0IDwgMCkgeworICAgICAgbGVmdCA9IG0gKyAxOworICAgIH0gZWxzZSB7CisgICAgICByaWdodCA9IG0gLSAxOworICAgIH0KKworICAgIC8qIE5vIGV4YWN0IG1hdGNoIGZvdW5kICovCisgICAgaWYgKHJpZ2h0IDwgbGVmdCkgeworICAgICAgaWYgKG1vZGUgPT0gR1NUX1NFQVJDSF9NT0RFX0VYQUNUKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgICAgfSBlbHNlIGlmIChtb2RlID09IEdTVF9TRUFSQ0hfTU9ERV9BRlRFUikgeworICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICByZXR1cm4gKG0gPCBudW1fZWxlbWVudHMpID8gZGF0YSArIChtICsgMSkgKiBlbGVtZW50X3NpemUgOiBOVUxMOworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuIGRhdGEgKyBtICogZWxlbWVudF9zaXplOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgcmV0dXJuIGRhdGEgKyBtICogZWxlbWVudF9zaXplOworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuIChtID4gMCkgPyBkYXRhICsgKG0gLSAxKSAqIGVsZW1lbnRfc2l6ZSA6IE5VTEw7CisgICAgICB9CisgICAgfQorICB9Cit9CisKKy8qIEZpbmRzIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvci4KKyAqIFJldHVybnMgMSBpZiBub25lIG90aGVyIGZvdW5kLgorICogVGhpcyBpcyBFdWNsaWQncyBhbGdvcml0aG0uICovCisKKy8qKgorICogZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3I6CisgKiBAYTogRmlyc3QgdmFsdWUgYXMgI2dpbnQKKyAqIEBiOiBTZWNvbmQgdmFsdWUgYXMgI2dpbnQKKyAqCisgKiBDYWxjdWxhdGVzIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiBAYQorICogYW5kIEBiLgorICoKKyAqIFJldHVybnM6IEdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIG9mIEBhIGFuZCBAYgorICoKKyAqIFNpbmNlOiAwLjEwLjI2CisgKi8KK2dpbnQKK2dzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yIChnaW50IGEsIGdpbnQgYikKK3sKKyAgd2hpbGUgKGIgIT0gMCkgeworICAgIGludCB0ZW1wID0gYTsKKworICAgIGEgPSBiOworICAgIGIgPSB0ZW1wICUgYjsKKyAgfQorCisgIHJldHVybiBBQlMgKGEpOworfQorCisvKioKKyAqIGdzdF91dGlsX2ZyYWN0aW9uX3RvX2RvdWJsZToKKyAqIEBzcmNfbjogRnJhY3Rpb24gbnVtZXJhdG9yIGFzICNnaW50CisgKiBAc3JjX2Q6IEZyYWN0aW9uIGRlbm9taW5hdG9yICNnaW50CisgKiBAZGVzdDogKG91dCk6IHBvaW50ZXIgdG8gYSAjZ2RvdWJsZSBmb3IgdGhlIHJlc3VsdAorICoKKyAqIFRyYW5zZm9ybXMgYSBmcmFjdGlvbiB0byBhICNnZG91YmxlLgorICoKKyAqIFNpbmNlOiAwLjEwLjI2CisgKi8KK3ZvaWQKK2dzdF91dGlsX2ZyYWN0aW9uX3RvX2RvdWJsZSAoZ2ludCBzcmNfbiwgZ2ludCBzcmNfZCwgZ2RvdWJsZSAqIGRlc3QpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKGRlc3QgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKHNyY19kICE9IDApOworCisgICpkZXN0ID0gKChnZG91YmxlKSBzcmNfbikgLyAoKGdkb3VibGUpIHNyY19kKTsKK30KKworI2RlZmluZSBNQVhfVEVSTVMgICAgICAgMzAKKyNkZWZpbmUgTUlOX0RJVklTT1IgICAgIDEuMGUtMTAKKyNkZWZpbmUgTUFYX0VSUk9SICAgICAgIDEuMGUtMjAKKworLyogdXNlIGNvbnRpbnVlZCBmcmFjdGlvbnMgdG8gdHJhbnNmb3JtIGEgZG91YmxlIGludG8gYSBmcmFjdGlvbiwKKyAqIHNlZSBodHRwOi8vbWF0aGZvcnVtLm9yZy9kci5tYXRoL2ZhcS9mYXEuZnJhY3Rpb25zLmh0bWwjZGVjZnJhYy4KKyAqIFRoaXMgYWxnb3JpdGhtIHRha2VzIGNhcmUgb2Ygb3ZlcmZsb3dzLgorICovCisKKy8qKgorICogZ3N0X3V0aWxfZG91YmxlX3RvX2ZyYWN0aW9uOgorICogQHNyYzogI2dkb3VibGUgdG8gdHJhbnNmb3JtCisgKiBAZGVzdF9uOiAob3V0KTogcG9pbnRlciB0byBhICNnaW50IHRvIGhvbGQgdGhlIHJlc3VsdCBudW1lcmF0b3IKKyAqIEBkZXN0X2Q6IChvdXQpOiBwb2ludGVyIHRvIGEgI2dpbnQgdG8gaG9sZCB0aGUgcmVzdWx0IGRlbm9taW5hdG9yCisgKgorICogVHJhbnNmb3JtcyBhICNnZG91YmxlIHRvIGEgZnJhY3Rpb24gYW5kIHNpbXBsaWZpZXMKKyAqIHRoZSByZXN1bHQuCisgKgorICogU2luY2U6IDAuMTAuMjYKKyAqLwordm9pZAorZ3N0X3V0aWxfZG91YmxlX3RvX2ZyYWN0aW9uIChnZG91YmxlIHNyYywgZ2ludCAqIGRlc3RfbiwgZ2ludCAqIGRlc3RfZCkKK3sKKworICBnZG91YmxlIFYsIEY7ICAgICAgICAgICAgICAgICAvKiBkb3VibGUgYmVpbmcgY29udmVydGVkICovCisgIGdpbnQgTiwgRDsgICAgICAgICAgICAgICAgICAgIC8qIHdpbGwgY29udGFpbiB0aGUgcmVzdWx0ICovCisgIGdpbnQgQTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGN1cnJlbnQgdGVybSBpbiBjb250aW51ZWQgZnJhY3Rpb24gKi8KKyAgZ2ludDY0IE4xLCBEMTsgICAgICAgICAgICAgICAgLyogbnVtZXJhdG9yLCBkZW5vbWluYXRvciBvZiBsYXN0IGFwcHJveCAqLworICBnaW50NjQgTjIsIEQyOyAgICAgICAgICAgICAgICAvKiBudW1lcmF0b3IsIGRlbm9taW5hdG9yIG9mIHByZXZpb3VzIGFwcHJveCAqLworICBnaW50IGk7CisgIGdpbnQgZ2NkOworICBnYm9vbGVhbiBuZWdhdGl2ZSA9IEZBTFNFOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKGRlc3RfbiAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoZGVzdF9kICE9IE5VTEwpOworCisgIC8qIGluaXRpYWxpemUgZnJhY3Rpb24gYmVpbmcgY29udmVydGVkICovCisgIEYgPSBzcmM7CisgIGlmIChGIDwgMC4wKSB7CisgICAgRiA9IC1GOworICAgIG5lZ2F0aXZlID0gVFJVRTsKKyAgfQorCisgIFYgPSBGOworICAvKiBpbml0aWFsaXplIGZyYWN0aW9ucyB3aXRoIDEvMCwgMC8xICovCisgIE4xID0gMTsKKyAgRDEgPSAwOworICBOMiA9IDA7CisgIEQyID0gMTsKKyAgTiA9IDE7CisgIEQgPSAxOworCisgIGZvciAoaSA9IDA7IGkgPCBNQVhfVEVSTVM7IGkrKykgeworICAgIC8qIGdldCBuZXh0IHRlcm0gKi8KKyAgICBBID0gKGdpbnQpIEY7ICAgICAgICAgICAgICAgLyogbm8gZmxvb3IoKSBuZWVkZWQsIEYgaXMgYWx3YXlzID49IDAgKi8KKyAgICAvKiBnZXQgbmV3IGRpdmlzb3IgKi8KKyAgICBGID0gRiAtIEE7CisKKyAgICAvKiBjYWxjdWxhdGUgbmV3IGZyYWN0aW9uIGluIHRlbXAgKi8KKyAgICBOMiA9IE4xICogQSArIE4yOworICAgIEQyID0gRDEgKiBBICsgRDI7CisKKyAgICAvKiBndWFyZCBhZ2FpbnN0IG92ZXJmbG93ICovCisgICAgaWYgKE4yID4gR19NQVhJTlQgfHwgRDIgPiBHX01BWElOVCkgeworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgTiA9IE4yOworICAgIEQgPSBEMjsKKworICAgIC8qIHNhdmUgbGFzdCB0d28gZnJhY3Rpb25zICovCisgICAgTjIgPSBOMTsKKyAgICBEMiA9IEQxOworICAgIE4xID0gTjsKKyAgICBEMSA9IEQ7CisKKyAgICAvKiBxdWl0IGlmIGRpdmlkaW5nIGJ5IHplcm8gb3IgY2xvc2UgZW5vdWdoIHRvIHRhcmdldCAqLworICAgIGlmIChGIDwgTUlOX0RJVklTT1IgfHwgZmFicyAoViAtICgoZ2RvdWJsZSkgTikgLyBEKSA8IE1BWF9FUlJPUikgeworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLyogVGFrZSByZWNpcHJvY2FsICovCisgICAgRiA9IDEgLyBGOworICB9CisgIC8qIGZpeCBmb3Igb3ZlcmZsb3cgKi8KKyAgaWYgKEQgPT0gMCkgeworICAgIE4gPSBHX01BWElOVDsKKyAgICBEID0gMTsKKyAgfQorICAvKiBmaXggZm9yIG5lZ2F0aXZlICovCisgIGlmIChuZWdhdGl2ZSkKKyAgICBOID0gLU47CisKKyAgLyogc2ltcGxpZnkgKi8KKyAgZ2NkID0gZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKE4sIEQpOworICBpZiAoZ2NkKSB7CisgICAgTiAvPSBnY2Q7CisgICAgRCAvPSBnY2Q7CisgIH0KKworICAvKiBzZXQgcmVzdWx0cyAqLworICAqZGVzdF9uID0gTjsKKyAgKmRlc3RfZCA9IEQ7Cit9CisKKy8qKgorICogZ3N0X3V0aWxfZnJhY3Rpb25fbXVsdGlwbHk6CisgKiBAYV9uOiBOdW1lcmF0b3Igb2YgZmlyc3QgdmFsdWUKKyAqIEBhX2Q6IERlbm9taW5hdG9yIG9mIGZpcnN0IHZhbHVlCisgKiBAYl9uOiBOdW1lcmF0b3Igb2Ygc2Vjb25kIHZhbHVlCisgKiBAYl9kOiBEZW5vbWluYXRvciBvZiBzZWNvbmQgdmFsdWUKKyAqIEByZXNfbjogKG91dCk6IFBvaW50ZXIgdG8gI2dpbnQgdG8gaG9sZCB0aGUgcmVzdWx0IG51bWVyYXRvcgorICogQHJlc19kOiAob3V0KTogUG9pbnRlciB0byAjZ2ludCB0byBob2xkIHRoZSByZXN1bHQgZGVub21pbmF0b3IKKyAqCisgKiBNdWx0aXBsaWVzIHRoZSBmcmFjdGlvbnMgQGFfbi9AYV9kIGFuZCBAYl9uL0BiX2QgYW5kIHN0b3JlcworICogdGhlIHJlc3VsdCBpbiBAcmVzX24gYW5kIEByZXNfZC4KKyAqCisgKiBSZXR1cm5zOiAlRkFMU0Ugb24gb3ZlcmZsb3csICVUUlVFIG90aGVyd2lzZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yNgorICovCitnYm9vbGVhbgorZ3N0X3V0aWxfZnJhY3Rpb25fbXVsdGlwbHkgKGdpbnQgYV9uLCBnaW50IGFfZCwgZ2ludCBiX24sIGdpbnQgYl9kLAorICAgIGdpbnQgKiByZXNfbiwgZ2ludCAqIHJlc19kKQoreworICBnaW50IGdjZDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVzX24gIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVzX2QgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoYV9kICE9IDAsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGJfZCAhPSAwLCBGQUxTRSk7CisKKyAgZ2NkID0gZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKGFfbiwgYV9kKTsKKyAgYV9uIC89IGdjZDsKKyAgYV9kIC89IGdjZDsKKworICBnY2QgPSBnc3RfdXRpbF9ncmVhdGVzdF9jb21tb25fZGl2aXNvciAoYl9uLCBiX2QpOworICBiX24gLz0gZ2NkOworICBiX2QgLz0gZ2NkOworCisgIGdjZCA9IGdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yIChhX24sIGJfZCk7CisgIGFfbiAvPSBnY2Q7CisgIGJfZCAvPSBnY2Q7CisKKyAgZ2NkID0gZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKGFfZCwgYl9uKTsKKyAgYV9kIC89IGdjZDsKKyAgYl9uIC89IGdjZDsKKworICAvKiBUaGlzIHdvdWxkIHJlc3VsdCBpbiBvdmVyZmxvdyAqLworICBpZiAoYV9uICE9IDAgJiYgR19NQVhJTlQgLyBBQlMgKGFfbikgPCBBQlMgKGJfbikpCisgICAgcmV0dXJuIEZBTFNFOworICBpZiAoR19NQVhJTlQgLyBBQlMgKGFfZCkgPCBBQlMgKGJfZCkpCisgICAgcmV0dXJuIEZBTFNFOworCisgICpyZXNfbiA9IGFfbiAqIGJfbjsKKyAgKnJlc19kID0gYV9kICogYl9kOworCisgIGdjZCA9IGdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yICgqcmVzX24sICpyZXNfZCk7CisgICpyZXNfbiAvPSBnY2Q7CisgICpyZXNfZCAvPSBnY2Q7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qKgorICogZ3N0X3V0aWxfZnJhY3Rpb25fYWRkOgorICogQGFfbjogTnVtZXJhdG9yIG9mIGZpcnN0IHZhbHVlCisgKiBAYV9kOiBEZW5vbWluYXRvciBvZiBmaXJzdCB2YWx1ZQorICogQGJfbjogTnVtZXJhdG9yIG9mIHNlY29uZCB2YWx1ZQorICogQGJfZDogRGVub21pbmF0b3Igb2Ygc2Vjb25kIHZhbHVlCisgKiBAcmVzX246IChvdXQpOiBQb2ludGVyIHRvICNnaW50IHRvIGhvbGQgdGhlIHJlc3VsdCBudW1lcmF0b3IKKyAqIEByZXNfZDogKG91dCk6IFBvaW50ZXIgdG8gI2dpbnQgdG8gaG9sZCB0aGUgcmVzdWx0IGRlbm9taW5hdG9yCisgKgorICogQWRkcyB0aGUgZnJhY3Rpb25zIEBhX24vQGFfZCBhbmQgQGJfbi9AYl9kIGFuZCBzdG9yZXMKKyAqIHRoZSByZXN1bHQgaW4gQHJlc19uIGFuZCBAcmVzX2QuCisgKgorICogUmV0dXJuczogJUZBTFNFIG9uIG92ZXJmbG93LCAlVFJVRSBvdGhlcndpc2UuCisgKgorICogU2luY2U6IDAuMTAuMjYKKyAqLworZ2Jvb2xlYW4KK2dzdF91dGlsX2ZyYWN0aW9uX2FkZCAoZ2ludCBhX24sIGdpbnQgYV9kLCBnaW50IGJfbiwgZ2ludCBiX2QsIGdpbnQgKiByZXNfbiwKKyAgICBnaW50ICogcmVzX2QpCit7CisgIGdpbnQgZ2NkOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZXNfbiAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZXNfZCAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChhX2QgIT0gMCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoYl9kICE9IDAsIEZBTFNFKTsKKworICBnY2QgPSBnc3RfdXRpbF9ncmVhdGVzdF9jb21tb25fZGl2aXNvciAoYV9uLCBhX2QpOworICBhX24gLz0gZ2NkOworICBhX2QgLz0gZ2NkOworCisgIGdjZCA9IGdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yIChiX24sIGJfZCk7CisgIGJfbiAvPSBnY2Q7CisgIGJfZCAvPSBnY2Q7CisKKyAgaWYgKGFfbiA9PSAwKSB7CisgICAgKnJlc19uID0gYl9uOworICAgICpyZXNfZCA9IGJfZDsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorICBpZiAoYl9uID09IDApIHsKKyAgICAqcmVzX24gPSBhX247CisgICAgKnJlc19kID0gYV9kOworICAgIHJldHVybiBUUlVFOworICB9CisKKyAgLyogVGhpcyB3b3VsZCByZXN1bHQgaW4gb3ZlcmZsb3cgKi8KKyAgaWYgKEdfTUFYSU5UIC8gQUJTIChhX24pIDwgQUJTIChiX24pKQorICAgIHJldHVybiBGQUxTRTsKKyAgaWYgKEdfTUFYSU5UIC8gQUJTIChhX2QpIDwgQUJTIChiX2QpKQorICAgIHJldHVybiBGQUxTRTsKKyAgaWYgKEdfTUFYSU5UIC8gQUJTIChhX2QpIDwgQUJTIChiX2QpKQorICAgIHJldHVybiBGQUxTRTsKKworICAqcmVzX24gPSAoYV9uICogYl9kKSArIChhX2QgKiBiX24pOworICAqcmVzX2QgPSBhX2QgKiBiX2Q7CisKKyAgZ2NkID0gZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKCpyZXNfbiwgKnJlc19kKTsKKyAgaWYgKGdjZCkgeworICAgICpyZXNfbiAvPSBnY2Q7CisgICAgKnJlc19kIC89IGdjZDsKKyAgfSBlbHNlIHsKKyAgICAvKiByZXNfbiA9PSAwICovCisgICAgKnJlc19kID0gMTsKKyAgfQorCisgIHJldHVybiBUUlVFOworfQorCisvKioKKyAqIGdzdF91dGlsX2ZyYWN0aW9uX2NvbXBhcmU6CisgKiBAYV9uOiBOdW1lcmF0b3Igb2YgZmlyc3QgdmFsdWUKKyAqIEBhX2Q6IERlbm9taW5hdG9yIG9mIGZpcnN0IHZhbHVlCisgKiBAYl9uOiBOdW1lcmF0b3Igb2Ygc2Vjb25kIHZhbHVlCisgKiBAYl9kOiBEZW5vbWluYXRvciBvZiBzZWNvbmQgdmFsdWUKKyAqCisgKiBDb21wYXJlcyB0aGUgZnJhY3Rpb25zIEBhX24vQGFfZCBhbmQgQGJfbi9AYl9kIGFuZCByZXR1cm5zCisgKiAtMSBpZiBhIDwgYiwgMCBpZiBhID0gYiBhbmQgMSBpZiBhID4gYi4KKyAqCisgKiBSZXR1cm5zOiAtMSBpZiBhIDwgYjsgMCBpZiBhID0gYjsgMSBpZiBhID4gYi4KKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCitnaW50Citnc3RfdXRpbF9mcmFjdGlvbl9jb21wYXJlIChnaW50IGFfbiwgZ2ludCBhX2QsIGdpbnQgYl9uLCBnaW50IGJfZCkKK3sKKyAgZ2ludDY0IG5ld19udW1fMTsKKyAgZ2ludDY0IG5ld19udW1fMjsKKyAgZ2ludCBnY2Q7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGFfZCAhPSAwICYmIGJfZCAhPSAwLCAwKTsKKworICAvKiBTaW1wbGlmeSAqLworICBnY2QgPSBnc3RfdXRpbF9ncmVhdGVzdF9jb21tb25fZGl2aXNvciAoYV9uLCBhX2QpOworICBhX24gLz0gZ2NkOworICBhX2QgLz0gZ2NkOworCisgIGdjZCA9IGdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yIChiX24sIGJfZCk7CisgIGJfbiAvPSBnY2Q7CisgIGJfZCAvPSBnY2Q7CisKKyAgLyogZnJhY3Rpb25zIGFyZSByZWR1Y2VkIHdoZW4gc2V0LCBzbyB3ZSBjYW4gcXVpY2tseSBzZWUgaWYgdGhleSdyZSBlcXVhbCAqLworICBpZiAoYV9uID09IGJfbiAmJiBhX2QgPT0gYl9kKQorICAgIHJldHVybiAwOworCisgIC8qIGV4dGVuZCB0byA2NCBiaXRzICovCisgIG5ld19udW1fMSA9ICgoZ2ludDY0KSBhX24pICogYl9kOworICBuZXdfbnVtXzIgPSAoKGdpbnQ2NCkgYl9uKSAqIGFfZDsKKyAgaWYgKG5ld19udW1fMSA8IG5ld19udW1fMikKKyAgICByZXR1cm4gLTE7CisgIGlmIChuZXdfbnVtXzEgPiBuZXdfbnVtXzIpCisgICAgcmV0dXJuIDE7CisKKyAgLyogU2hvdWxkIG5vdCBoYXBwZW4gYmVjYXVzZSBhX2QgYW5kIGJfZCBhcmUgbm90IDAgKi8KKyAgZ19yZXR1cm5fdmFsX2lmX3JlYWNoZWQgKDApOworfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHV0aWxzLmggYi9nc3QvZ3N0dXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjE0NDVhCi0tLSAvZGV2L251bGwKKysrIGIvZ3N0L2dzdHV0aWxzLmgKQEAgLTAsMCArMSw5ODMgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAyIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorICoKKyAqIGdzdHV0aWxzLmg6IEhlYWRlciBmb3IgdmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9ucworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworI2lmbmRlZiBfX0dTVF9VVElMU19IX18KKyNkZWZpbmUgX19HU1RfVVRJTFNfSF9fCisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3N0L2dzdGJpbi5oPgorI2luY2x1ZGUgPGdzdC9nc3RwYXJzZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKK3ZvaWQJCWdzdF91dGlsX3NldF92YWx1ZV9mcm9tX3N0cmluZwkoR1ZhbHVlICp2YWx1ZSwgY29uc3QgZ2NoYXIgKnZhbHVlX3N0cik7Cit2b2lkCQlnc3RfdXRpbF9zZXRfb2JqZWN0X2FyZwkJKEdPYmplY3QgKm9iamVjdCwgY29uc3QgZ2NoYXIgKm5hbWUsIGNvbnN0IGdjaGFyICp2YWx1ZSk7Cit2b2lkCQlnc3RfdXRpbF9kdW1wX21lbQkJKGNvbnN0IGd1Y2hhciAqbWVtLCBndWludCBzaXplKTsKKworZ3VpbnQ2NCAgICAgICAgIGdzdF91dGlsX2dkb3VibGVfdG9fZ3VpbnQ2NCAgICAgKGdkb3VibGUgdmFsdWUpICBHX0dOVUNfQ09OU1Q7CitnZG91YmxlICAgICAgICAgZ3N0X3V0aWxfZ3VpbnQ2NF90b19nZG91YmxlICAgICAoZ3VpbnQ2NCB2YWx1ZSkgIEdfR05VQ19DT05TVDsKKworLyoqCisgKiBnc3RfZ3VpbnQ2NF90b19nZG91YmxlOgorICogQHZhbHVlOiB0aGUgI2d1aW50NjQgdmFsdWUgdG8gY29udmVydAorICoKKyAqIENvbnZlcnQgQHZhbHVlIHRvIGEgZ2RvdWJsZS4KKyAqCisgKiBSZXR1cm5zOiBAdmFsdWUgY29udmVydGVkIHRvIGEgI2dkb3VibGUuCisgKi8KKworLyoqCisgKiBnc3RfZ2RvdWJsZV90b19ndWludDY0OgorICogQHZhbHVlOiB0aGUgI2dkb3VibGUgdmFsdWUgdG8gY29udmVydAorICoKKyAqIENvbnZlcnQgQHZhbHVlIHRvIGEgZ3VpbnQ2NC4KKyAqCisgKiBSZXR1cm5zOiBAdmFsdWUgY29udmVydGVkIHRvIGEgI2d1aW50NjQuCisgKi8KKyNpZmRlZiBXSU4zMgorI2RlZmluZSAgICAgICAgIGdzdF9nZG91YmxlX3RvX2d1aW50NjQodmFsdWUpICAgZ3N0X3V0aWxfZ2RvdWJsZV90b19ndWludDY0KHZhbHVlKQorI2RlZmluZSAgICAgICAgIGdzdF9ndWludDY0X3RvX2dkb3VibGUodmFsdWUpICAgZ3N0X3V0aWxfZ3VpbnQ2NF90b19nZG91YmxlKHZhbHVlKQorI2Vsc2UKKyNkZWZpbmUgICAgICAgICBnc3RfZ2RvdWJsZV90b19ndWludDY0KHZhbHVlKSAgICgoZ3VpbnQ2NCkgKHZhbHVlKSkKKyNkZWZpbmUgICAgICAgICBnc3RfZ3VpbnQ2NF90b19nZG91YmxlKHZhbHVlKSAgICgoZ2RvdWJsZSkgKHZhbHVlKSkKKyNlbmRpZgorCitndWludDY0CQlnc3RfdXRpbF91aW50NjRfc2NhbGUJCShndWludDY0IHZhbCwgZ3VpbnQ2NCBudW0sIGd1aW50NjQgZGVub20pOworZ3VpbnQ2NAkJZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kCShndWludDY0IHZhbCwgZ3VpbnQ2NCBudW0sIGd1aW50NjQgZGVub20pOworZ3VpbnQ2NAkJZ3N0X3V0aWxfdWludDY0X3NjYWxlX2NlaWwJKGd1aW50NjQgdmFsLCBndWludDY0IG51bSwgZ3VpbnQ2NCBkZW5vbSk7CisKK2d1aW50NjQgICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50ICAgICAgIChndWludDY0IHZhbCwgZ2ludCBudW0sIGdpbnQgZGVub20pOworZ3VpbnQ2NCAgICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQgKGd1aW50NjQgdmFsLCBnaW50IG51bSwgZ2ludCBkZW5vbSk7CitndWludDY0ICAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9jZWlsICAoZ3VpbnQ2NCB2YWwsIGdpbnQgbnVtLCBnaW50IGRlbm9tKTsKKworZ3VpbnQzMiAgICAgICAgIGdzdF91dGlsX3NlcW51bV9uZXh0ICAgICAgICAgICAgKHZvaWQpOworZ2ludDMyICAgICAgICAgIGdzdF91dGlsX3NlcW51bV9jb21wYXJlICAgICAgICAgKGd1aW50MzIgczEsIGd1aW50MzIgczIpOworCit2b2lkCQlnc3RfcHJpbnRfcGFkX2NhcHMJCShHU3RyaW5nICpidWYsIGdpbnQgaW5kZW50LCBHc3RQYWQgKnBhZCk7Cit2b2lkCQlnc3RfcHJpbnRfZWxlbWVudF9hcmdzCQkoR1N0cmluZyAqYnVmLCBnaW50IGluZGVudCwgR3N0RWxlbWVudCAqZWxlbWVudCk7CisKKworR1R5cGUgZ3N0X3R5cGVfcmVnaXN0ZXJfc3RhdGljX2Z1bGwgKEdUeXBlIHBhcmVudF90eXBlLAorCQkJICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICp0eXBlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgIGNsYXNzX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Jhc2VJbml0RnVuYyAgICAgIGJhc2VfaW5pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQmFzZUZpbmFsaXplRnVuYyAgYmFzZV9maW5hbGl6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2xhc3NJbml0RnVuYyAgICAgY2xhc3NfaW5pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2xhc3NGaW5hbGl6ZUZ1bmMgY2xhc3NfZmluYWxpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciAgICAgIGNsYXNzX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgIGluc3RhbmNlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQxNiAgICAgICAgICAgIG5fcHJlYWxsb2NzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdJbnN0YW5jZUluaXRGdW5jICBpbnN0YW5jZV9pbml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdUeXBlVmFsdWVUYWJsZSAqdmFsdWVfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1R5cGVGbGFncwkgZmxhZ3MpOworCisvKioKKyAqIEdTVF9DQUxMX1BBUkVOVDoKKyAqIEBwYXJlbnRfY2xhc3NfY2FzdDogdGhlIG5hbWUgb2YgdGhlIGNsYXNzIGNhc3QgbWFjcm8gZm9yIHRoZSBwYXJlbnQgdHlwZQorICogQG5hbWU6IG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGNhbGwKKyAqIEBhcmdzOiBhcmd1bWVudHMgZW5jbG9zZWQgaW4gJyggKScKKyAqCisgKiBKdXN0IGNhbGwgdGhlIHBhcmVudCBoYW5kbGVyLiAgVGhpcyBhc3N1bWVzIHRoYXQgdGhlcmUgaXMgYSB2YXJpYWJsZQorICogbmFtZWQgcGFyZW50X2NsYXNzIHRoYXQgcG9pbnRzIHRvIHRoZSAoZHVoISkgcGFyZW50IGNsYXNzLiAgTm90ZSB0aGF0CisgKiB0aGlzIG1hY3JvIGlzIG5vdCB0byBiZSB1c2VkIHdpdGggdGhpbmdzIHRoYXQgcmV0dXJuIHNvbWV0aGluZywgdXNlCisgKiB0aGUgX1dJVEhfREVGQVVMVCB2ZXJzaW9uIGZvciB0aGF0CisgKi8KKyNkZWZpbmUgR1NUX0NBTExfUEFSRU5UKHBhcmVudF9jbGFzc19jYXN0LCBuYW1lLCBhcmdzKQkJCVwKKwkoKHBhcmVudF9jbGFzc19jYXN0KHBhcmVudF9jbGFzcyktPm5hbWUgIT0gTlVMTCkgPwkJXAorCSBwYXJlbnRfY2xhc3NfY2FzdChwYXJlbnRfY2xhc3MpLT5uYW1lIGFyZ3MgOiAodm9pZCkgMCkKKworLyoqCisgKiBHU1RfQ0FMTF9QQVJFTlRfV0lUSF9ERUZBVUxUOgorICogQHBhcmVudF9jbGFzc19jYXN0OiB0aGUgbmFtZSBvZiB0aGUgY2xhc3MgY2FzdCBtYWNybyBmb3IgdGhlIHBhcmVudCB0eXBlCisgKiBAbmFtZTogbmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gY2FsbAorICogQGFyZ3M6IGFyZ3VtZW50cyBlbmNsb3NlZCBpbiAnKCApJworICogQGRlZl9yZXR1cm46IGRlZmF1bHQgcmVzdWx0CisgKgorICogU2FtZSBhcyBHU1RfQ0FMTF9QQVJFTlQoKSwgYnV0IGluIGNhc2UgdGhlcmUgaXMgbm8gaW1wbGVtZW50YXRpb24sIGl0CisgKiBldmFsdWF0ZXMgdG8gQGRlZl9yZXR1cm4uCisgKi8KKyNkZWZpbmUgR1NUX0NBTExfUEFSRU5UX1dJVEhfREVGQVVMVChwYXJlbnRfY2xhc3NfY2FzdCwgbmFtZSwgYXJncywgZGVmX3JldHVybilcCisJKChwYXJlbnRfY2xhc3NfY2FzdChwYXJlbnRfY2xhc3MpLT5uYW1lICE9IE5VTEwpID8JCVwKKwkgcGFyZW50X2NsYXNzX2Nhc3QocGFyZW50X2NsYXNzKS0+bmFtZSBhcmdzIDogZGVmX3JldHVybikKKworLyogRGVmaW5lIFBVVCBhbmQgR0VUIGZ1bmN0aW9ucyBmb3IgdW5hbGlnbmVkIG1lbW9yeSAqLworI2RlZmluZSBfR1NUX0dFVChfX2RhdGEsIF9faWR4LCBfX3NpemUsIF9fc2hpZnQpIFwKKyAgICAoKChndWludCMjX19zaXplKSAoKChjb25zdCBndWludDggKikgKF9fZGF0YSkpW19faWR4XSkpIDw8IChfX3NoaWZ0KSkKKworI2RlZmluZSBfR1NUX1BVVChfX2RhdGEsIF9faWR4LCBfX3NpemUsIF9fc2hpZnQsIF9fbnVtKSBcCisgICAgKCgoZ3VpbnQ4ICopIChfX2RhdGEpKVtfX2lkeF0gPSAoKChndWludCMjX19zaXplKSAoX19udW0pKSA+PiAoX19zaGlmdCkpICYgMHhmZikKKworLyoqCisgKiBHU1RfUkVBRF9VSU5UNjRfQkU6CisgKiBAZGF0YTogbWVtb3J5IGxvY2F0aW9uCisgKgorICogUmVhZCBhIDY0IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGJpZyBlbmRpYW4gZm9ybWF0IGZyb20gdGhlIG1lbW9yeSBidWZmZXIuCisgKi8KKyNkZWZpbmUgR1NUX1JFQURfVUlOVDY0X0JFKGRhdGEpCShfR1NUX0dFVCAoZGF0YSwgMCwgNjQsIDU2KSB8IFwKKwkJCQkJIF9HU1RfR0VUIChkYXRhLCAxLCA2NCwgNDgpIHwgXAorCQkJCQkgX0dTVF9HRVQgKGRhdGEsIDIsIDY0LCA0MCkgfCBcCisJCQkJCSBfR1NUX0dFVCAoZGF0YSwgMywgNjQsIDMyKSB8IFwKKwkJCQkJIF9HU1RfR0VUIChkYXRhLCA0LCA2NCwgMjQpIHwgXAorCQkJCQkgX0dTVF9HRVQgKGRhdGEsIDUsIDY0LCAxNikgfCBcCisJCQkJCSBfR1NUX0dFVCAoZGF0YSwgNiwgNjQsICA4KSB8IFwKKwkJCQkJIF9HU1RfR0VUIChkYXRhLCA3LCA2NCwgIDApKQorCisvKioKKyAqIEdTVF9SRUFEX1VJTlQ2NF9MRToKKyAqIEBkYXRhOiBtZW1vcnkgbG9jYXRpb24KKyAqCisgKiBSZWFkIGEgNjQgYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWUgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgZnJvbSB0aGUgbWVtb3J5IGJ1ZmZlci4KKyAqLworI2RlZmluZSBHU1RfUkVBRF9VSU5UNjRfTEUoZGF0YSkJKF9HU1RfR0VUIChkYXRhLCA3LCA2NCwgNTYpIHwgXAorCQkJCQkgX0dTVF9HRVQgKGRhdGEsIDYsIDY0LCA0OCkgfCBcCisJCQkJCSBfR1NUX0dFVCAoZGF0YSwgNSwgNjQsIDQwKSB8IFwKKwkJCQkJIF9HU1RfR0VUIChkYXRhLCA0LCA2NCwgMzIpIHwgXAorCQkJCQkgX0dTVF9HRVQgKGRhdGEsIDMsIDY0LCAyNCkgfCBcCisJCQkJCSBfR1NUX0dFVCAoZGF0YSwgMiwgNjQsIDE2KSB8IFwKKwkJCQkJIF9HU1RfR0VUIChkYXRhLCAxLCA2NCwgIDgpIHwgXAorCQkJCQkgX0dTVF9HRVQgKGRhdGEsIDAsIDY0LCAgMCkpCisKKy8qKgorICogR1NUX1JFQURfVUlOVDMyX0JFOgorICogQGRhdGE6IG1lbW9yeSBsb2NhdGlvbgorICoKKyAqIFJlYWQgYSAzMiBiaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBpbiBiaWcgZW5kaWFuIGZvcm1hdCBmcm9tIHRoZSBtZW1vcnkgYnVmZmVyLgorICovCisjZGVmaW5lIEdTVF9SRUFEX1VJTlQzMl9CRShkYXRhKQkoX0dTVF9HRVQgKGRhdGEsIDAsIDMyLCAyNCkgfCBcCisJCQkJCSBfR1NUX0dFVCAoZGF0YSwgMSwgMzIsIDE2KSB8IFwKKwkJCQkJIF9HU1RfR0VUIChkYXRhLCAyLCAzMiwgIDgpIHwgXAorCQkJCQkgX0dTVF9HRVQgKGRhdGEsIDMsIDMyLCAgMCkpCisKKy8qKgorICogR1NUX1JFQURfVUlOVDMyX0xFOgorICogQGRhdGE6IG1lbW9yeSBsb2NhdGlvbgorICoKKyAqIFJlYWQgYSAzMiBiaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCBmcm9tIHRoZSBtZW1vcnkgYnVmZmVyLgorICovCisjZGVmaW5lIEdTVF9SRUFEX1VJTlQzMl9MRShkYXRhKQkoX0dTVF9HRVQgKGRhdGEsIDMsIDMyLCAyNCkgfCBcCisJCQkJCSBfR1NUX0dFVCAoZGF0YSwgMiwgMzIsIDE2KSB8IFwKKwkJCQkJIF9HU1RfR0VUIChkYXRhLCAxLCAzMiwgIDgpIHwgXAorCQkJCQkgX0dTVF9HRVQgKGRhdGEsIDAsIDMyLCAgMCkpCisKKy8qKgorICogR1NUX1JFQURfVUlOVDI0X0JFOgorICogQGRhdGE6IG1lbW9yeSBsb2NhdGlvbgorICoKKyAqIFJlYWQgYSAyNCBiaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBpbiBiaWcgZW5kaWFuIGZvcm1hdCBmcm9tIHRoZSBtZW1vcnkgYnVmZmVyLgorICoKKyAqIFNpbmNlOiAwLjEwLjIyCisgKi8KKyNkZWZpbmUgR1NUX1JFQURfVUlOVDI0X0JFKGRhdGEpCShfR1NUX0dFVCAoZGF0YSwgMCwgMzIsIDE2KSB8IFwKKwkJCQkJIF9HU1RfR0VUIChkYXRhLCAxLCAzMiwgIDgpIHwgXAorCQkJCQkgX0dTVF9HRVQgKGRhdGEsIDIsIDMyLCAgMCkpCisKKy8qKgorICogR1NUX1JFQURfVUlOVDI0X0xFOgorICogQGRhdGE6IG1lbW9yeSBsb2NhdGlvbgorICoKKyAqIFJlYWQgYSAyNCBiaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCBmcm9tIHRoZSBtZW1vcnkgYnVmZmVyLgorICoKKyAqIFNpbmNlOiAwLjEwLjIyCisgKi8KKyNkZWZpbmUgR1NUX1JFQURfVUlOVDI0X0xFKGRhdGEpCShfR1NUX0dFVCAoZGF0YSwgMiwgMzIsIDE2KSB8IFwKKwkJCQkJIF9HU1RfR0VUIChkYXRhLCAxLCAzMiwgIDgpIHwgXAorCQkJCQkgX0dTVF9HRVQgKGRhdGEsIDAsIDMyLCAgMCkpCisKKy8qKgorICogR1NUX1JFQURfVUlOVDE2X0JFOgorICogQGRhdGE6IG1lbW9yeSBsb2NhdGlvbgorICoKKyAqIFJlYWQgYSAxNiBiaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBpbiBiaWcgZW5kaWFuIGZvcm1hdCBmcm9tIHRoZSBtZW1vcnkgYnVmZmVyLgorICovCisjZGVmaW5lIEdTVF9SRUFEX1VJTlQxNl9CRShkYXRhKQkoX0dTVF9HRVQgKGRhdGEsIDAsIDE2LCAgOCkgfCBcCisJCQkJCSBfR1NUX0dFVCAoZGF0YSwgMSwgMTYsICAwKSkKKworLyoqCisgKiBHU1RfUkVBRF9VSU5UMTZfTEU6CisgKiBAZGF0YTogbWVtb3J5IGxvY2F0aW9uCisgKgorICogUmVhZCBhIDE2IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IGZyb20gdGhlIG1lbW9yeSBidWZmZXIuCisgKi8KKyNkZWZpbmUgR1NUX1JFQURfVUlOVDE2X0xFKGRhdGEpCShfR1NUX0dFVCAoZGF0YSwgMSwgMTYsICA4KSB8IFwKKwkJCQkJIF9HU1RfR0VUIChkYXRhLCAwLCAxNiwgIDApKQorCisvKioKKyAqIEdTVF9SRUFEX1VJTlQ4OgorICogQGRhdGE6IG1lbW9yeSBsb2NhdGlvbgorICoKKyAqIFJlYWQgYW4gOCBiaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBmcm9tIHRoZSBtZW1vcnkgYnVmZmVyLgorICovCisjZGVmaW5lIEdTVF9SRUFEX1VJTlQ4KGRhdGEpCQkoX0dTVF9HRVQgKGRhdGEsIDAsICA4LCAgMCkpCisKKy8qKgorICogR1NUX1dSSVRFX1VJTlQ2NF9CRToKKyAqIEBkYXRhOiBtZW1vcnkgbG9jYXRpb24KKyAqIEBudW06IHZhbHVlIHRvIHN0b3JlCisgKgorICogU3RvcmUgYSA2NCBiaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBpbiBiaWcgZW5kaWFuIGZvcm1hdCBpbnRvIHRoZSBtZW1vcnkgYnVmZmVyLgorICovCisjZGVmaW5lIEdTVF9XUklURV9VSU5UNjRfQkUoZGF0YSwgbnVtKQlkbyB7IFwKKwkJCQkJICBfR1NUX1BVVCAoZGF0YSwgMCwgNjQsIDU2LCBudW0pOyBcCisJCQkJCSAgX0dTVF9QVVQgKGRhdGEsIDEsIDY0LCA0OCwgbnVtKTsgXAorCQkJCQkgIF9HU1RfUFVUIChkYXRhLCAyLCA2NCwgNDAsIG51bSk7IFwKKwkJCQkJICBfR1NUX1BVVCAoZGF0YSwgMywgNjQsIDMyLCBudW0pOyBcCisJCQkJCSAgX0dTVF9QVVQgKGRhdGEsIDQsIDY0LCAyNCwgbnVtKTsgXAorCQkJCQkgIF9HU1RfUFVUIChkYXRhLCA1LCA2NCwgMTYsIG51bSk7IFwKKwkJCQkJICBfR1NUX1BVVCAoZGF0YSwgNiwgNjQsICA4LCBudW0pOyBcCisJCQkJCSAgX0dTVF9QVVQgKGRhdGEsIDcsIDY0LCAgMCwgbnVtKTsgXAorCQkJCQl9IHdoaWxlICgwKQorCisvKioKKyAqIEdTVF9XUklURV9VSU5UNjRfTEU6CisgKiBAZGF0YTogbWVtb3J5IGxvY2F0aW9uCisgKiBAbnVtOiB2YWx1ZSB0byBzdG9yZQorICoKKyAqIFN0b3JlIGEgNjQgYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWUgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgaW50byB0aGUgbWVtb3J5IGJ1ZmZlci4KKyAqLworI2RlZmluZSBHU1RfV1JJVEVfVUlOVDY0X0xFKGRhdGEsIG51bSkJZG8geyBcCisJCQkJCSAgX0dTVF9QVVQgKGRhdGEsIDAsIDY0LCAgMCwgbnVtKTsgXAorCQkJCQkgIF9HU1RfUFVUIChkYXRhLCAxLCA2NCwgIDgsIG51bSk7IFwKKwkJCQkJICBfR1NUX1BVVCAoZGF0YSwgMiwgNjQsIDE2LCBudW0pOyBcCisJCQkJCSAgX0dTVF9QVVQgKGRhdGEsIDMsIDY0LCAyNCwgbnVtKTsgXAorCQkJCQkgIF9HU1RfUFVUIChkYXRhLCA0LCA2NCwgMzIsIG51bSk7IFwKKwkJCQkJICBfR1NUX1BVVCAoZGF0YSwgNSwgNjQsIDQwLCBudW0pOyBcCisJCQkJCSAgX0dTVF9QVVQgKGRhdGEsIDYsIDY0LCA0OCwgbnVtKTsgXAorCQkJCQkgIF9HU1RfUFVUIChkYXRhLCA3LCA2NCwgNTYsIG51bSk7IFwKKwkJCQkJfSB3aGlsZSAoMCkKKworLyoqCisgKiBHU1RfV1JJVEVfVUlOVDMyX0JFOgorICogQGRhdGE6IG1lbW9yeSBsb2NhdGlvbgorICogQG51bTogdmFsdWUgdG8gc3RvcmUKKyAqCisgKiBTdG9yZSBhIDMyIGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGJpZyBlbmRpYW4gZm9ybWF0IGludG8gdGhlIG1lbW9yeSBidWZmZXIuCisgKi8KKyNkZWZpbmUgR1NUX1dSSVRFX1VJTlQzMl9CRShkYXRhLCBudW0pCWRvIHsgXAorCQkJCQkgIF9HU1RfUFVUIChkYXRhLCAwLCAzMiwgMjQsIG51bSk7IFwKKwkJCQkJICBfR1NUX1BVVCAoZGF0YSwgMSwgMzIsIDE2LCBudW0pOyBcCisJCQkJCSAgX0dTVF9QVVQgKGRhdGEsIDIsIDMyLCAgOCwgbnVtKTsgXAorCQkJCQkgIF9HU1RfUFVUIChkYXRhLCAzLCAzMiwgIDAsIG51bSk7IFwKKwkJCQkJfSB3aGlsZSAoMCkKKworLyoqCisgKiBHU1RfV1JJVEVfVUlOVDMyX0xFOgorICogQGRhdGE6IG1lbW9yeSBsb2NhdGlvbgorICogQG51bTogdmFsdWUgdG8gc3RvcmUKKyAqCisgKiBTdG9yZSBhIDMyIGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IGludG8gdGhlIG1lbW9yeSBidWZmZXIuCisgKi8KKyNkZWZpbmUgR1NUX1dSSVRFX1VJTlQzMl9MRShkYXRhLCBudW0pCWRvIHsgXAorCQkJCQkgIF9HU1RfUFVUIChkYXRhLCAwLCAzMiwgIDAsIG51bSk7IFwKKwkJCQkJICBfR1NUX1BVVCAoZGF0YSwgMSwgMzIsICA4LCBudW0pOyBcCisJCQkJCSAgX0dTVF9QVVQgKGRhdGEsIDIsIDMyLCAxNiwgbnVtKTsgXAorCQkJCQkgIF9HU1RfUFVUIChkYXRhLCAzLCAzMiwgMjQsIG51bSk7IFwKKwkJCQkJfSB3aGlsZSAoMCkKKworLyoqCisgKiBHU1RfV1JJVEVfVUlOVDI0X0JFOgorICogQGRhdGE6IG1lbW9yeSBsb2NhdGlvbgorICogQG51bTogdmFsdWUgdG8gc3RvcmUKKyAqCisgKiBTdG9yZSBhIDI0IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGJpZyBlbmRpYW4gZm9ybWF0IGludG8gdGhlIG1lbW9yeSBidWZmZXIuCisgKgorICogU2luY2U6IDAuMTAuMjIKKyAqLworI2RlZmluZSBHU1RfV1JJVEVfVUlOVDI0X0JFKGRhdGEsIG51bSkJZG8geyBcCisJCQkJCSAgX0dTVF9QVVQgKGRhdGEsIDAsIDMyLCAgMTYsIG51bSk7IFwKKwkJCQkJICBfR1NUX1BVVCAoZGF0YSwgMSwgMzIsICA4LCBudW0pOyBcCisJCQkJCSAgX0dTVF9QVVQgKGRhdGEsIDIsIDMyLCAgMCwgbnVtKTsgXAorCQkJCQl9IHdoaWxlICgwKQorCisvKioKKyAqIEdTVF9XUklURV9VSU5UMjRfTEU6CisgKiBAZGF0YTogbWVtb3J5IGxvY2F0aW9uCisgKiBAbnVtOiB2YWx1ZSB0byBzdG9yZQorICoKKyAqIFN0b3JlIGEgMjQgYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWUgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgaW50byB0aGUgbWVtb3J5IGJ1ZmZlci4KKyAqCisgKiBTaW5jZTogMC4xMC4yMgorICovCisjZGVmaW5lIEdTVF9XUklURV9VSU5UMjRfTEUoZGF0YSwgbnVtKQlkbyB7IFwKKwkJCQkJICBfR1NUX1BVVCAoZGF0YSwgMCwgMzIsICAwLCBudW0pOyBcCisJCQkJCSAgX0dTVF9QVVQgKGRhdGEsIDEsIDMyLCAgOCwgbnVtKTsgXAorCQkJCQkgIF9HU1RfUFVUIChkYXRhLCAyLCAzMiwgIDE2LCBudW0pOyBcCisJCQkJCX0gd2hpbGUgKDApCisKKy8qKgorICogR1NUX1dSSVRFX1VJTlQxNl9CRToKKyAqIEBkYXRhOiBtZW1vcnkgbG9jYXRpb24KKyAqIEBudW06IHZhbHVlIHRvIHN0b3JlCisgKgorICogU3RvcmUgYSAxNiBiaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBpbiBiaWcgZW5kaWFuIGZvcm1hdCBpbnRvIHRoZSBtZW1vcnkgYnVmZmVyLgorICovCisjZGVmaW5lIEdTVF9XUklURV9VSU5UMTZfQkUoZGF0YSwgbnVtKQlkbyB7IFwKKwkJCQkJICBfR1NUX1BVVCAoZGF0YSwgMCwgMTYsICA4LCBudW0pOyBcCisJCQkJCSAgX0dTVF9QVVQgKGRhdGEsIDEsIDE2LCAgMCwgbnVtKTsgXAorCQkJCQl9IHdoaWxlICgwKQorCisvKioKKyAqIEdTVF9XUklURV9VSU5UMTZfTEU6CisgKiBAZGF0YTogbWVtb3J5IGxvY2F0aW9uCisgKiBAbnVtOiB2YWx1ZSB0byBzdG9yZQorICoKKyAqIFN0b3JlIGEgMTYgYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWUgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgaW50byB0aGUgbWVtb3J5IGJ1ZmZlci4KKyAqLworI2RlZmluZSBHU1RfV1JJVEVfVUlOVDE2X0xFKGRhdGEsIG51bSkJZG8geyBcCisJCQkJCSAgX0dTVF9QVVQgKGRhdGEsIDAsIDE2LCAgMCwgbnVtKTsgXAorCQkJCQkgIF9HU1RfUFVUIChkYXRhLCAxLCAxNiwgIDgsIG51bSk7IFwKKwkJCQkJfSB3aGlsZSAoMCkKKworLyoqCisgKiBHU1RfV1JJVEVfVUlOVDg6CisgKiBAZGF0YTogbWVtb3J5IGxvY2F0aW9uCisgKiBAbnVtOiB2YWx1ZSB0byBzdG9yZQorICoKKyAqIFN0b3JlIGFuIDggYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWUgaW50byB0aGUgbWVtb3J5IGJ1ZmZlci4KKyAqLworI2RlZmluZSBHU1RfV1JJVEVfVUlOVDgoZGF0YSwgbnVtKQlkbyB7IFwKKwkJCQkJICBfR1NUX1BVVCAoZGF0YSwgMCwgIDgsICAwLCBudW0pOyBcCisJCQkJCX0gd2hpbGUgKDApCisKKy8qIEZsb2F0IGVuZGlhbm5lc3MgY29udmVyc2lvbiBtYWNyb3MgKi8KKworLyogRklYTUU6IFJlbW92ZSB0aGlzIG9uY2Ugd2UgZGVwZW5kIG9uIGEgR0xpYiB2ZXJzaW9uIHdpdGggdGhpcyAqLworI2lmbmRlZiBHRkxPQVRfRlJPTV9MRQorLyoqCisgKiBHRkxPQVRfU1dBUF9MRV9CRToKKyAqIEBpbjogaW5wdXQgdmFsdWUKKyAqCisgKiBTd2FwIGJ5dGUgb3JkZXIgb2YgYSAzMi1iaXQgZmxvYXRpbmcgcG9pbnQgdmFsdWUgKGZsb2F0KS4KKyAqCisgKiBSZXR1cm5zOiBAaW4gYnl0ZS1zd2FwcGVkLgorICoKKyAqIFNpbmNlOiAwLjEwLjIyCisgKgorICovCisjaWZkZWYgX0ZPT0xfR1RLX0RPQ18KK0dfSU5MSU5FX0ZVTkMgZ2Zsb2F0IEdGTE9BVF9TV0FQX0xFX0JFIChnZmxvYXQgaW4pOworI2VuZGlmCisKK2lubGluZSBzdGF0aWMgZ2Zsb2F0CitHRkxPQVRfU1dBUF9MRV9CRShnZmxvYXQgaW4pCit7CisgIHVuaW9uCisgIHsKKyAgICBndWludDMyIGk7CisgICAgZ2Zsb2F0IGY7CisgIH0gdTsKKworICB1LmYgPSBpbjsKKyAgdS5pID0gR1VJTlQzMl9TV0FQX0xFX0JFICh1LmkpOworICByZXR1cm4gdS5mOworfQorCisvKioKKyAqIEdET1VCTEVfU1dBUF9MRV9CRToKKyAqIEBpbjogaW5wdXQgdmFsdWUKKyAqCisgKiBTd2FwIGJ5dGUgb3JkZXIgb2YgYSA2NC1iaXQgZmxvYXRpbmcgcG9pbnQgdmFsdWUgKGRvdWJsZSkuCisgKgorICogUmV0dXJuczogQGluIGJ5dGUtc3dhcHBlZC4KKyAqCisgKiBTaW5jZTogMC4xMC4yMgorICoKKyAqLworI2lmZGVmIF9GT09MX0dUS19ET0NfCitHX0lOTElORV9GVU5DIGdkb3VibGUgR0RPVUJMRV9TV0FQX0xFX0JFIChnZG91YmxlIGluKTsKKyNlbmRpZgorCitpbmxpbmUgc3RhdGljIGdkb3VibGUKK0dET1VCTEVfU1dBUF9MRV9CRShnZG91YmxlIGluKQoreworICB1bmlvbgorICB7CisgICAgZ3VpbnQ2NCBpOworICAgIGdkb3VibGUgZDsKKyAgfSB1OworCisgIHUuZCA9IGluOworICB1LmkgPSBHVUlOVDY0X1NXQVBfTEVfQkUgKHUuaSk7CisgIHJldHVybiB1LmQ7Cit9CisKKy8qKgorICogR0RPVUJMRV9UT19MRToKKyAqIEB2YWw6IHZhbHVlCisgKgorICogQ29udmVydCA2NC1iaXQgZmxvYXRpbmcgcG9pbnQgdmFsdWUgKGRvdWJsZSkgZnJvbSBuYXRpdmUgYnl0ZSBvcmRlciBpbnRvCisgKiBsaXR0bGUgZW5kaWFuIGJ5dGUgb3JkZXIuCisgKgorICogU2luY2U6IDAuMTAuMjIKKyAqCisgKi8KKy8qKgorICogR0RPVUJMRV9UT19CRToKKyAqIEB2YWw6IHZhbHVlCisgKgorICogQ29udmVydCA2NC1iaXQgZmxvYXRpbmcgcG9pbnQgdmFsdWUgKGRvdWJsZSkgZnJvbSBuYXRpdmUgYnl0ZSBvcmRlciBpbnRvCisgKiBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIuCisgKgorICogU2luY2U6IDAuMTAuMjIKKyAqCisgKi8KKy8qKgorICogR0RPVUJMRV9GUk9NX0xFOgorICogQHZhbDogdmFsdWUKKyAqCisgKiBDb252ZXJ0IDY0LWJpdCBmbG9hdGluZyBwb2ludCB2YWx1ZSAoZG91YmxlKSBmcm9tIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlcgorICogaW50byBuYXRpdmUgYnl0ZSBvcmRlci4KKyAqCisgKiBTaW5jZTogMC4xMC4yMgorICoKKyAqLworLyoqCisgKiBHRE9VQkxFX0ZST01fQkU6CisgKiBAdmFsOiB2YWx1ZQorICoKKyAqIENvbnZlcnQgNjQtYml0IGZsb2F0aW5nIHBvaW50IHZhbHVlIChkb3VibGUpIGZyb20gYmlnIGVuZGlhbiBieXRlIG9yZGVyCisgKiBpbnRvIG5hdGl2ZSBieXRlIG9yZGVyLgorICoKKyAqIFNpbmNlOiAwLjEwLjIyCisgKgorICovCisKKy8qKgorICogR0ZMT0FUX1RPX0xFOgorICogQHZhbDogdmFsdWUKKyAqCisgKiBDb252ZXJ0IDMyLWJpdCBmbG9hdGluZyBwb2ludCB2YWx1ZSAoZmxvYXQpIGZyb20gbmF0aXZlIGJ5dGUgb3JkZXIgaW50bworICogbGl0dGxlIGVuZGlhbiBieXRlIG9yZGVyLgorICoKKyAqIFNpbmNlOiAwLjEwLjIyCisgKgorICovCisvKioKKyAqIEdGTE9BVF9UT19CRToKKyAqIEB2YWw6IHZhbHVlCisgKgorICogQ29udmVydCAzMi1iaXQgZmxvYXRpbmcgcG9pbnQgdmFsdWUgKGZsb2F0KSBmcm9tIG5hdGl2ZSBieXRlIG9yZGVyIGludG8KKyAqIGJpZyBlbmRpYW4gYnl0ZSBvcmRlci4KKyAqCisgKiBTaW5jZTogMC4xMC4yMgorICoKKyAqLworLyoqCisgKiBHRkxPQVRfRlJPTV9MRToKKyAqIEB2YWw6IHZhbHVlCisgKgorICogQ29udmVydCAzMi1iaXQgZmxvYXRpbmcgcG9pbnQgdmFsdWUgKGZsb2F0KSBmcm9tIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlcgorICogaW50byBuYXRpdmUgYnl0ZSBvcmRlci4KKyAqCisgKiBTaW5jZTogMC4xMC4yMgorICoKKyAqLworLyoqCisgKiBHRkxPQVRfRlJPTV9CRToKKyAqIEB2YWw6IHZhbHVlCisgKgorICogQ29udmVydCAzMi1iaXQgZmxvYXRpbmcgcG9pbnQgdmFsdWUgKGZsb2F0KSBmcm9tIGJpZyBlbmRpYW4gYnl0ZSBvcmRlcgorICogaW50byBuYXRpdmUgYnl0ZSBvcmRlci4KKyAqCisgKiBTaW5jZTogMC4xMC4yMgorICoKKyAqLworCisjaWYgR19CWVRFX09SREVSID09IEdfTElUVExFX0VORElBTgorI2RlZmluZSBHRkxPQVRfVE9fTEUodmFsKSAgICAoKGdmbG9hdCkgKHZhbCkpCisjZGVmaW5lIEdGTE9BVF9UT19CRSh2YWwpICAgIChHRkxPQVRfU1dBUF9MRV9CRSAodmFsKSkKKyNkZWZpbmUgR0RPVUJMRV9UT19MRSh2YWwpICAgKChnZG91YmxlKSAodmFsKSkKKyNkZWZpbmUgR0RPVUJMRV9UT19CRSh2YWwpICAgKEdET1VCTEVfU1dBUF9MRV9CRSAodmFsKSkKKworI2VsaWYgR19CWVRFX09SREVSID09IEdfQklHX0VORElBTgorI2RlZmluZSBHRkxPQVRfVE9fTEUodmFsKSAgICAoR0ZMT0FUX1NXQVBfTEVfQkUgKHZhbCkpCisjZGVmaW5lIEdGTE9BVF9UT19CRSh2YWwpICAgICgoZ2Zsb2F0KSAodmFsKSkKKyNkZWZpbmUgR0RPVUJMRV9UT19MRSh2YWwpICAgKEdET1VCTEVfU1dBUF9MRV9CRSAodmFsKSkKKyNkZWZpbmUgR0RPVUJMRV9UT19CRSh2YWwpICAgKChnZG91YmxlKSAodmFsKSkKKworI2Vsc2UgLyogIUdfTElUVExFX0VORElBTiAmJiAhR19CSUdfRU5ESUFOICovCisjZXJyb3IgdW5rbm93biBFTkRJQU4gdHlwZQorI2VuZGlmIC8qICFHX0xJVFRMRV9FTkRJQU4gJiYgIUdfQklHX0VORElBTiAqLworCisjZGVmaW5lIEdGTE9BVF9GUk9NX0xFKHZhbCkgIChHRkxPQVRfVE9fTEUgKHZhbCkpCisjZGVmaW5lIEdGTE9BVF9GUk9NX0JFKHZhbCkgIChHRkxPQVRfVE9fQkUgKHZhbCkpCisjZGVmaW5lIEdET1VCTEVfRlJPTV9MRSh2YWwpIChHRE9VQkxFX1RPX0xFICh2YWwpKQorI2RlZmluZSBHRE9VQkxFX0ZST01fQkUodmFsKSAoR0RPVUJMRV9UT19CRSAodmFsKSkKKworI2VuZGlmIC8qICFkZWZpbmVkKEdGTE9BVF9GUk9NX0xFKSAqLworCisvKioKKyAqIEdTVF9SRUFEX0ZMT0FUX0xFOgorICogQGRhdGE6IG1lbW9yeSBsb2NhdGlvbgorICoKKyAqIFJlYWQgYSAzMiBiaXQgZmxvYXQgdmFsdWUgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgZnJvbSB0aGUgbWVtb3J5IGJ1ZmZlci4KKyAqCisgKiBSZXR1cm5zOiBUaGUgZmxvYXRpbmcgcG9pbnQgdmFsdWUgcmVhZCBmcm9tIEBkYXRhCisgKgorICogU2luY2U6IDAuMTAuMjIKKyAqCisgKi8KKyNpZmRlZiBfRk9PTF9HVEtfRE9DXworR19JTkxJTkVfRlVOQyBnZmxvYXQgR1NUX1JFQURfRkxPQVRfTEUgKGNvbnN0IGd1aW50OCAqZGF0YSk7CisjZW5kaWYKKworaW5saW5lIHN0YXRpYyBnZmxvYXQKK0dTVF9SRUFEX0ZMT0FUX0xFKGNvbnN0IGd1aW50OCAqZGF0YSkKK3sKKyAgdW5pb24KKyAgeworICAgIGd1aW50MzIgaTsKKyAgICBnZmxvYXQgZjsKKyAgfSB1OworCisgIHUuaSA9IEdTVF9SRUFEX1VJTlQzMl9MRSAoZGF0YSk7CisgIHJldHVybiB1LmY7Cit9CisKKy8qKgorICogR1NUX1JFQURfRkxPQVRfQkU6CisgKiBAZGF0YTogbWVtb3J5IGxvY2F0aW9uCisgKgorICogUmVhZCBhIDMyIGJpdCBmbG9hdCB2YWx1ZSBpbiBiaWcgZW5kaWFuIGZvcm1hdCBmcm9tIHRoZSBtZW1vcnkgYnVmZmVyLgorICoKKyAqIFJldHVybnM6IFRoZSBmbG9hdGluZyBwb2ludCB2YWx1ZSByZWFkIGZyb20gQGRhdGEKKyAqCisgKiBTaW5jZTogMC4xMC4yMgorICoKKyAqLworI2lmZGVmIF9GT09MX0dUS19ET0NfCitHX0lOTElORV9GVU5DIGdmbG9hdCBHU1RfUkVBRF9GTE9BVF9CRSAoY29uc3QgZ3VpbnQ4ICpkYXRhKTsKKyNlbmRpZgorCitpbmxpbmUgc3RhdGljIGdmbG9hdAorR1NUX1JFQURfRkxPQVRfQkUoY29uc3QgZ3VpbnQ4ICpkYXRhKQoreworICB1bmlvbgorICB7CisgICAgZ3VpbnQzMiBpOworICAgIGdmbG9hdCBmOworICB9IHU7CisKKyAgdS5pID0gR1NUX1JFQURfVUlOVDMyX0JFIChkYXRhKTsKKyAgcmV0dXJuIHUuZjsKK30KKworLyoqCisgKiBHU1RfUkVBRF9ET1VCTEVfTEU6CisgKiBAZGF0YTogbWVtb3J5IGxvY2F0aW9uCisgKgorICogUmVhZCBhIDY0IGJpdCBkb3VibGUgdmFsdWUgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgZnJvbSB0aGUgbWVtb3J5IGJ1ZmZlci4KKyAqCisgKiBSZXR1cm5zOiBUaGUgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCB2YWx1ZSByZWFkIGZyb20gQGRhdGEKKyAqCisgKiBTaW5jZTogMC4xMC4yMgorICoKKyAqLworI2lmZGVmIF9GT09MX0dUS19ET0NfCitHX0lOTElORV9GVU5DIGdkb3VibGUgR1NUX1JFQURfRE9VQkxFX0xFIChjb25zdCBndWludDggKmRhdGEpOworI2VuZGlmCisKK2lubGluZSBzdGF0aWMgZ2RvdWJsZQorR1NUX1JFQURfRE9VQkxFX0xFKGNvbnN0IGd1aW50OCAqZGF0YSkKK3sKKyAgdW5pb24KKyAgeworICAgIGd1aW50NjQgaTsKKyAgICBnZG91YmxlIGQ7CisgIH0gdTsKKworICB1LmkgPSBHU1RfUkVBRF9VSU5UNjRfTEUgKGRhdGEpOworICByZXR1cm4gdS5kOworfQorCisvKioKKyAqIEdTVF9SRUFEX0RPVUJMRV9CRToKKyAqIEBkYXRhOiBtZW1vcnkgbG9jYXRpb24KKyAqCisgKiBSZWFkIGEgNjQgYml0IGRvdWJsZSB2YWx1ZSBpbiBiaWcgZW5kaWFuIGZvcm1hdCBmcm9tIHRoZSBtZW1vcnkgYnVmZmVyLgorICoKKyAqIFJldHVybnM6IFRoZSBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHZhbHVlIHJlYWQgZnJvbSBAZGF0YQorICoKKyAqIFNpbmNlOiAwLjEwLjIyCisgKgorICovCisjaWZkZWYgX0ZPT0xfR1RLX0RPQ18KK0dfSU5MSU5FX0ZVTkMgZ2RvdWJsZSBHU1RfUkVBRF9ET1VCTEVfQkUgKGNvbnN0IGd1aW50OCAqZGF0YSk7CisjZW5kaWYKKworaW5saW5lIHN0YXRpYyBnZG91YmxlCitHU1RfUkVBRF9ET1VCTEVfQkUoY29uc3QgZ3VpbnQ4ICpkYXRhKQoreworICB1bmlvbgorICB7CisgICAgZ3VpbnQ2NCBpOworICAgIGdkb3VibGUgZDsKKyAgfSB1OworCisgIHUuaSA9IEdTVF9SRUFEX1VJTlQ2NF9CRSAoZGF0YSk7CisgIHJldHVybiB1LmQ7Cit9CisKKy8qKgorICogR1NUX1dSSVRFX0ZMT0FUX0xFOgorICogQGRhdGE6IG1lbW9yeSBsb2NhdGlvbgorICogQG51bTogdmFsdWUgdG8gc3RvcmUKKyAqCisgKiBTdG9yZSBhIDMyIGJpdCBmbG9hdCB2YWx1ZSBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCBpbnRvIHRoZSBtZW1vcnkgYnVmZmVyLgorICoKKyAqIFNpbmNlOiAwLjEwLjIyCisgKgorICovCisjaWZkZWYgX0ZPT0xfR1RLX0RPQ18KK0dfSU5MSU5FX0ZVTkMgdm9pZCBHU1RfV1JJVEVfRkxPQVRfTEUgKGd1aW50OCAqZGF0YSwgZ2Zsb2F0IG51bSk7CisjZW5kaWYKKworaW5saW5lIHN0YXRpYyB2b2lkCitHU1RfV1JJVEVfRkxPQVRfTEUoZ3VpbnQ4ICpkYXRhLCBnZmxvYXQgbnVtKQoreworICB1bmlvbgorICB7CisgICAgZ3VpbnQzMiBpOworICAgIGdmbG9hdCBmOworICB9IHU7CisKKyAgdS5mID0gbnVtOworICBHU1RfV1JJVEVfVUlOVDMyX0xFIChkYXRhLCB1LmkpOworfQorCisvKioKKyAqIEdTVF9XUklURV9GTE9BVF9CRToKKyAqIEBkYXRhOiBtZW1vcnkgbG9jYXRpb24KKyAqIEBudW06IHZhbHVlIHRvIHN0b3JlCisgKgorICogU3RvcmUgYSAzMiBiaXQgZmxvYXQgdmFsdWUgaW4gYmlnIGVuZGlhbiBmb3JtYXQgaW50byB0aGUgbWVtb3J5IGJ1ZmZlci4KKyAqCisgKiBTaW5jZTogMC4xMC4yMgorICoKKyAqLworI2lmZGVmIF9GT09MX0dUS19ET0NfCitHX0lOTElORV9GVU5DIHZvaWQgR1NUX1dSSVRFX0ZMT0FUX0JFIChndWludDggKmRhdGEsIGdmbG9hdCBudW0pOworI2VuZGlmCisKK2lubGluZSBzdGF0aWMgdm9pZAorR1NUX1dSSVRFX0ZMT0FUX0JFKGd1aW50OCAqZGF0YSwgZ2Zsb2F0IG51bSkKK3sKKyAgdW5pb24KKyAgeworICAgIGd1aW50MzIgaTsKKyAgICBnZmxvYXQgZjsKKyAgfSB1OworCisgIHUuZiA9IG51bTsKKyAgR1NUX1dSSVRFX1VJTlQzMl9CRSAoZGF0YSwgdS5pKTsKK30KKworLyoqCisgKiBHU1RfV1JJVEVfRE9VQkxFX0xFOgorICogQGRhdGE6IG1lbW9yeSBsb2NhdGlvbgorICogQG51bTogdmFsdWUgdG8gc3RvcmUKKyAqCisgKiBTdG9yZSBhIDY0IGJpdCBkb3VibGUgdmFsdWUgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgaW50byB0aGUgbWVtb3J5IGJ1ZmZlci4KKyAqCisgKiBTaW5jZTogMC4xMC4yMgorICoKKyAqLworI2lmZGVmIF9GT09MX0dUS19ET0NfCitHX0lOTElORV9GVU5DIHZvaWQgR1NUX1dSSVRFX0RPVUJMRV9MRSAoZ3VpbnQ4ICpkYXRhLCBnZG91YmxlIG51bSk7CisjZW5kaWYKKworaW5saW5lIHN0YXRpYyB2b2lkCitHU1RfV1JJVEVfRE9VQkxFX0xFKGd1aW50OCAqZGF0YSwgZ2RvdWJsZSBudW0pCit7CisgIHVuaW9uCisgIHsKKyAgICBndWludDY0IGk7CisgICAgZ2RvdWJsZSBkOworICB9IHU7CisKKyAgdS5kID0gbnVtOworICBHU1RfV1JJVEVfVUlOVDY0X0xFIChkYXRhLCB1LmkpOworfQorCisvKioKKyAqIEdTVF9XUklURV9ET1VCTEVfQkU6CisgKiBAZGF0YTogbWVtb3J5IGxvY2F0aW9uCisgKiBAbnVtOiB2YWx1ZSB0byBzdG9yZQorICoKKyAqIFN0b3JlIGEgNjQgYml0IGRvdWJsZSB2YWx1ZSBpbiBiaWcgZW5kaWFuIGZvcm1hdCBpbnRvIHRoZSBtZW1vcnkgYnVmZmVyLgorICoKKyAqIFNpbmNlOiAwLjEwLjIyCisgKgorICovCisjaWZkZWYgX0ZPT0xfR1RLX0RPQ18KK0dfSU5MSU5FX0ZVTkMgdm9pZCBHU1RfV1JJVEVfRE9VQkxFX0JFIChndWludDggKmRhdGEsIGdkb3VibGUgbnVtKTsKKyNlbmRpZgorCitpbmxpbmUgc3RhdGljIHZvaWQKK0dTVF9XUklURV9ET1VCTEVfQkUoZ3VpbnQ4ICpkYXRhLCBnZG91YmxlIG51bSkKK3sKKyAgdW5pb24KKyAgeworICAgIGd1aW50NjQgaTsKKyAgICBnZG91YmxlIGQ7CisgIH0gdTsKKworICB1LmQgPSBudW07CisgIEdTVF9XUklURV9VSU5UNjRfQkUgKGRhdGEsIHUuaSk7Cit9CisKKy8qIE1pc2NlbGxhbmVvdXMgdXRpbGl0eSBtYWNyb3MgKi8KKworLyoqCisgKiBHU1RfUk9VTkRfVVBfMjoKKyAqIEBudW06IGludGVnZXIgdmFsdWUgdG8gcm91bmQgdXAKKyAqCisgKiBSb3VuZHMgYW4gaW50ZWdlciB2YWx1ZSB1cCB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiAyLgorICovCisjZGVmaW5lIEdTVF9ST1VORF9VUF8yKG51bSkgICgoKG51bSkrMSkmfjEpCisvKioKKyAqIEdTVF9ST1VORF9VUF80OgorICogQG51bTogaW50ZWdlciB2YWx1ZSB0byByb3VuZCB1cAorICoKKyAqIFJvdW5kcyBhbiBpbnRlZ2VyIHZhbHVlIHVwIHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIDQuCisgKi8KKyNkZWZpbmUgR1NUX1JPVU5EX1VQXzQobnVtKSAgKCgobnVtKSszKSZ+MykKKy8qKgorICogR1NUX1JPVU5EX1VQXzg6CisgKiBAbnVtOiBpbnRlZ2VyIHZhbHVlIHRvIHJvdW5kIHVwCisgKgorICogUm91bmRzIGFuIGludGVnZXIgdmFsdWUgdXAgdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgOC4KKyAqLworI2RlZmluZSBHU1RfUk9VTkRfVVBfOChudW0pICAoKChudW0pKzcpJn43KQorLyoqCisgKiBHU1RfUk9VTkRfVVBfMTY6CisgKiBAbnVtOiBpbnRlZ2VyIHZhbHVlIHRvIHJvdW5kIHVwCisgKgorICogUm91bmRzIGFuIGludGVnZXIgdmFsdWUgdXAgdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgMTYuCisgKi8KKyNkZWZpbmUgR1NUX1JPVU5EX1VQXzE2KG51bSkgKCgobnVtKSsxNSkmfjE1KQorLyoqCisgKiBHU1RfUk9VTkRfVVBfMzI6CisgKiBAbnVtOiBpbnRlZ2VyIHZhbHVlIHRvIHJvdW5kIHVwCisgKgorICogUm91bmRzIGFuIGludGVnZXIgdmFsdWUgdXAgdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgMzIuCisgKi8KKyNkZWZpbmUgR1NUX1JPVU5EX1VQXzMyKG51bSkgKCgobnVtKSszMSkmfjMxKQorLyoqCisgKiBHU1RfUk9VTkRfVVBfNjQ6CisgKiBAbnVtOiBpbnRlZ2VyIHZhbHVlIHRvIHJvdW5kIHVwCisgKgorICogUm91bmRzIGFuIGludGVnZXIgdmFsdWUgdXAgdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgNjQuCisgKi8KKyNkZWZpbmUgR1NUX1JPVU5EX1VQXzY0KG51bSkgKCgobnVtKSs2MykmfjYzKQorCisvKioKKyAqIEdTVF9ST1VORF9ET1dOXzI6CisgKiBAbnVtOiBpbnRlZ2VyIHZhbHVlIHRvIHJvdW5kIGRvd24KKyAqCisgKiBSb3VuZHMgYW4gaW50ZWdlciB2YWx1ZSBkb3duIHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIDIuCisgKgorICogU2luY2U6IDAuMTAuMTIKKyAqLworI2RlZmluZSBHU1RfUk9VTkRfRE9XTl8yKG51bSkgICgobnVtKSYofjEpKQorLyoqCisgKiBHU1RfUk9VTkRfRE9XTl80OgorICogQG51bTogaW50ZWdlciB2YWx1ZSB0byByb3VuZCBkb3duCisgKgorICogUm91bmRzIGFuIGludGVnZXIgdmFsdWUgZG93biB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiA0LgorICoKKyAqIFNpbmNlOiAwLjEwLjEyCisgKi8KKyNkZWZpbmUgR1NUX1JPVU5EX0RPV05fNChudW0pICAoKG51bSkmKH4zKSkKKy8qKgorICogR1NUX1JPVU5EX0RPV05fODoKKyAqIEBudW06IGludGVnZXIgdmFsdWUgdG8gcm91bmQgZG93bgorICoKKyAqIFJvdW5kcyBhbiBpbnRlZ2VyIHZhbHVlIGRvd24gdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgOC4KKyAqCisgKiBTaW5jZTogMC4xMC4xMgorICovCisjZGVmaW5lIEdTVF9ST1VORF9ET1dOXzgobnVtKSAgKChudW0pJih+NykpCisvKioKKyAqIEdTVF9ST1VORF9ET1dOXzE2OgorICogQG51bTogaW50ZWdlciB2YWx1ZSB0byByb3VuZCBkb3duCisgKgorICogUm91bmRzIGFuIGludGVnZXIgdmFsdWUgZG93biB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiAxNi4KKyAqCisgKiBTaW5jZTogMC4xMC4xMgorICovCisjZGVmaW5lIEdTVF9ST1VORF9ET1dOXzE2KG51bSkgKChudW0pJih+MTUpKQorLyoqCisgKiBHU1RfUk9VTkRfRE9XTl8zMjoKKyAqIEBudW06IGludGVnZXIgdmFsdWUgdG8gcm91bmQgZG93bgorICoKKyAqIFJvdW5kcyBhbiBpbnRlZ2VyIHZhbHVlIGRvd24gdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgMzIuCisgKgorICogU2luY2U6IDAuMTAuMTIKKyAqLworI2RlZmluZSBHU1RfUk9VTkRfRE9XTl8zMihudW0pICgobnVtKSYofjMxKSkKKy8qKgorICogR1NUX1JPVU5EX0RPV05fNjQ6CisgKiBAbnVtOiBpbnRlZ2VyIHZhbHVlIHRvIHJvdW5kIGRvd24KKyAqCisgKiBSb3VuZHMgYW4gaW50ZWdlciB2YWx1ZSBkb3duIHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIDY0LgorICoKKyAqIFNpbmNlOiAwLjEwLjEyCisgKi8KKyNkZWZpbmUgR1NUX1JPVU5EX0RPV05fNjQobnVtKSAoKG51bSkmKH42MykpCisKK3ZvaWQJCQlnc3Rfb2JqZWN0X2RlZmF1bHRfZXJyb3IJKEdzdE9iamVjdCAgICAqIHNvdXJjZSwKKwkJCQkJCQkgY29uc3QgR0Vycm9yICogZXJyb3IsCisJCQkJCQkJIGNvbnN0IGdjaGFyICAqIGRlYnVnKTsKKworLyogZWxlbWVudCBmdW5jdGlvbnMgKi8KK3ZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2NyZWF0ZV9hbGxfcGFkcyAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQpOworR3N0UGFkKiAgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkICAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0UGFkICpwYWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3N0Q2FwcyAqY2Fwcyk7CisKK0dzdFBhZFRlbXBsYXRlKiAgICAgICAgIGdzdF9lbGVtZW50X2dldF9jb21wYXRpYmxlX3BhZF90ZW1wbGF0ZSAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0UGFkVGVtcGxhdGUgKmNvbXBhdHRlbXBsKTsKKworY29uc3QgZ2NoYXIqICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgICAgICAoR3N0U3RhdGUgc3RhdGUpOworY29uc3QgZ2NoYXIgKiAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRfbmFtZSAoR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3RhdGVfcmV0KTsKKworZ2Jvb2xlYW4JCWdzdF9lbGVtZW50X2xpbmsgICAgICAgICAgICAgICAgKEdzdEVsZW1lbnQgKnNyYywgR3N0RWxlbWVudCAqZGVzdCk7CitnYm9vbGVhbgkJZ3N0X2VsZW1lbnRfbGlua19tYW55ICAgICAgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudF8xLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEVsZW1lbnQgKmVsZW1lbnRfMiwgLi4uKSBHX0dOVUNfTlVMTF9URVJNSU5BVEVEOworZ2Jvb2xlYW4JCWdzdF9lbGVtZW50X2xpbmtfZmlsdGVyZWQJKEdzdEVsZW1lbnQgKiBzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RFbGVtZW50ICogZGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENhcHMgKmZpbHRlcik7Cit2b2lkICAgICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF91bmxpbmsgICAgICAgICAgICAgIChHc3RFbGVtZW50ICpzcmMsIEdzdEVsZW1lbnQgKmRlc3QpOwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfdW5saW5rX21hbnkgICAgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudF8xLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEVsZW1lbnQgKmVsZW1lbnRfMiwgLi4uKSBHX0dOVUNfTlVMTF9URVJNSU5BVEVEOworCitnYm9vbGVhbgkJZ3N0X2VsZW1lbnRfbGlua19wYWRzICAgICAgICAgICAoR3N0RWxlbWVudCAqc3JjLCBjb25zdCBnY2hhciAqc3JjcGFkbmFtZSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RFbGVtZW50ICpkZXN0LCBjb25zdCBnY2hhciAqZGVzdHBhZG5hbWUpOworZ2Jvb2xlYW4JCWdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsICAgICAgKEdzdEVsZW1lbnQgKnNyYywgY29uc3QgZ2NoYXIgKnNyY3BhZG5hbWUsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0RWxlbWVudCAqZGVzdCwgY29uc3QgZ2NoYXIgKmRlc3RwYWRuYW1lLAorCQkJCQkJCSBHc3RQYWRMaW5rQ2hlY2sgZmxhZ3MpOwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfdW5saW5rX3BhZHMgICAgICAgICAoR3N0RWxlbWVudCAqc3JjLCBjb25zdCBnY2hhciAqc3JjcGFkbmFtZSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RFbGVtZW50ICpkZXN0LCBjb25zdCBnY2hhciAqZGVzdHBhZG5hbWUpOworCitnYm9vbGVhbgkJZ3N0X2VsZW1lbnRfbGlua19wYWRzX2ZpbHRlcmVkCShHc3RFbGVtZW50ICogc3JjLCBjb25zdCBnY2hhciAqIHNyY3BhZG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RFbGVtZW50ICogZGVzdCwgY29uc3QgZ2NoYXIgKiBkZXN0cGFkbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENhcHMgKmZpbHRlcik7CisKK2dib29sZWFuICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3NlZWtfc2ltcGxlICAgICAgICAgKEdzdEVsZW1lbnQgICAqZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEZvcm1hdCAgICAgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U2Vla0ZsYWdzICBzZWVrX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0ICAgICAgICBzZWVrX3Bvcyk7CisKKy8qIHV0aWwgZWxlbWVudGZhY3RvcnkgZnVuY3Rpb25zICovCitnYm9vbGVhbiBnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zaW5rX2FsbF9jYXBzIChHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeSwgY29uc3QgR3N0Q2FwcyAqY2Fwcyk7CitnYm9vbGVhbiBnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zcmNfYWxsX2NhcHMgIChHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeSwgY29uc3QgR3N0Q2FwcyAqY2Fwcyk7CitnYm9vbGVhbiBnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zaW5rX2FueV9jYXBzIChHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeSwgY29uc3QgR3N0Q2FwcyAqY2Fwcyk7CitnYm9vbGVhbiBnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zcmNfYW55X2NhcHMgIChHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeSwgY29uc3QgR3N0Q2FwcyAqY2Fwcyk7CisKKy8qIHV0aWwgcXVlcnkgZnVuY3Rpb25zICovCitnYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbiAgICAgIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RGb3JtYXQgZm9ybWF0LCBnaW50NjQgKmN1cik7CitnYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9xdWVyeV9kdXJhdGlvbiAgICAgIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RGb3JtYXQgZm9ybWF0LCBnaW50NjQgKmR1cmF0aW9uKTsKK2dib29sZWFuICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3F1ZXJ5X2NvbnZlcnQgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdEZvcm1hdCBzcmNfZm9ybWF0LCBnaW50NjQgc3JjX3ZhbCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RGb3JtYXQgZGVzdF9mb3JtYXQsIGdpbnQ2NCAqZGVzdF92YWwpOworCisvKiBlbGVtZW50IGNsYXNzIGZ1bmN0aW9ucyAqLwordm9pZAkJCWdzdF9lbGVtZW50X2NsYXNzX2luc3RhbGxfc3RkX3Byb3BzIChHc3RFbGVtZW50Q2xhc3MgKiBrbGFzcywKKwkJCQkJCQkgY29uc3QgZ2NoYXIgKiBmaXJzdF9uYW1lLCAuLi4pIEdfR05VQ19OVUxMX1RFUk1JTkFURUQ7CisKKy8qIHBhZCBmdW5jdGlvbnMgKi8KK3ZvaWQJCQlnc3RfcGFkX3VzZV9maXhlZF9jYXBzCQkoR3N0UGFkICpwYWQpOworR3N0Q2FwcyoJCWdzdF9wYWRfcHJveHlfZ2V0Y2FwcwkJKEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGZpbHRlcik7CisKK0dzdEVsZW1lbnQqCQlnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudAkoR3N0UGFkICpwYWQpOworCisvKiB1dGlsIHF1ZXJ5IGZ1bmN0aW9ucyAqLworZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X3BhZF9xdWVyeV9wb3NpdGlvbiAgICAgICAgICAoR3N0UGFkICpwYWQsIEdzdEZvcm1hdCBmb3JtYXQsIGdpbnQ2NCAqY3VyKTsKK2dib29sZWFuICAgICAgICAgICAgICAgIGdzdF9wYWRfcXVlcnlfZHVyYXRpb24gICAgICAgICAgKEdzdFBhZCAqcGFkLCBHc3RGb3JtYXQgZm9ybWF0LCBnaW50NjQgKmR1cmF0aW9uKTsKK2dib29sZWFuICAgICAgICAgICAgICAgIGdzdF9wYWRfcXVlcnlfY29udmVydCAgICAgICAgICAgKEdzdFBhZCAqcGFkLCBHc3RGb3JtYXQgc3JjX2Zvcm1hdCwgZ2ludDY0IHNyY192YWwsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Rm9ybWF0IGRlc3RfZm9ybWF0LCBnaW50NjQgKmRlc3RfdmFsKTsKKworZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X3BhZF9xdWVyeV9wZWVyX3Bvc2l0aW9uICAgICAoR3N0UGFkICpwYWQsIEdzdEZvcm1hdCBmb3JtYXQsIGdpbnQ2NCAqY3VyKTsKK2dib29sZWFuICAgICAgICAgICAgICAgIGdzdF9wYWRfcXVlcnlfcGVlcl9kdXJhdGlvbiAgICAgKEdzdFBhZCAqcGFkLCBHc3RGb3JtYXQgZm9ybWF0LCBnaW50NjQgKmR1cmF0aW9uKTsKK2dib29sZWFuICAgICAgICAgICAgICAgIGdzdF9wYWRfcXVlcnlfcGVlcl9jb252ZXJ0ICAgICAgKEdzdFBhZCAqcGFkLCBHc3RGb3JtYXQgc3JjX2Zvcm1hdCwgZ2ludDY0IHNyY192YWwsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Rm9ybWF0IGRlc3RfZm9ybWF0LCBnaW50NjQgKmRlc3RfdmFsKTsKKworLyogYmluIGZ1bmN0aW9ucyAqLwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2Jpbl9hZGRfbWFueSAgICAgICAgICAgICAgICAoR3N0QmluICpiaW4sIEdzdEVsZW1lbnQgKmVsZW1lbnRfMSwgLi4uKSBHX0dOVUNfTlVMTF9URVJNSU5BVEVEOwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2Jpbl9yZW1vdmVfbWFueSAgICAgICAgICAgICAoR3N0QmluICpiaW4sIEdzdEVsZW1lbnQgKmVsZW1lbnRfMSwgLi4uKSBHX0dOVUNfTlVMTF9URVJNSU5BVEVEOworR3N0UGFkICogICAgICAgICAgICAgICAgZ3N0X2Jpbl9maW5kX3VubGlua2VkX3BhZCAgICAgICAoR3N0QmluICpiaW4sIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24pOworCisvKiBidWZmZXIgZnVuY3Rpb25zICovCitHc3RCdWZmZXIgKgkJZ3N0X2J1ZmZlcl9tZXJnZQkJKEdzdEJ1ZmZlciAqIGJ1ZjEsIEdzdEJ1ZmZlciAqIGJ1ZjIpOworR3N0QnVmZmVyICoJCWdzdF9idWZmZXJfam9pbgkJCShHc3RCdWZmZXIgKiBidWYxLCBHc3RCdWZmZXIgKiBidWYyKTsKKworLyogdGFnIGVtaXNzaW9uIHV0aWxpdHkgZnVuY3Rpb25zICovCit2b2lkCQkJZ3N0X2VsZW1lbnRfZm91bmRfdGFnc19mb3JfcGFkCShHc3RFbGVtZW50ICogZWxlbWVudCwKKwkJCQkJCQkgR3N0UGFkICogcGFkLAorCQkJCQkJCSBHc3RUYWdMaXN0ICogbGlzdCk7Cit2b2lkCQkJZ3N0X2VsZW1lbnRfZm91bmRfdGFncwkJKEdzdEVsZW1lbnQgKiBlbGVtZW50LAorCQkJCQkJCSBHc3RUYWdMaXN0ICogbGlzdCk7CisKKy8qIHBhcnNlIHV0aWxpdHkgZnVuY3Rpb25zICovCitHc3RFbGVtZW50ICogICAgICAgICAgICBnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb24gICAgICAoY29uc3QgZ2NoYXIgICAgICogYmluX2Rlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICAgIGdob3N0X3VubGlua2VkX3BhZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgKiogZXJyKTsKKworR3N0RWxlbWVudCAqICAgICAgICAgICAgZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uX2Z1bGwgKGNvbnN0IGdjaGFyICAgICAqIGJpbl9kZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgICBnaG9zdF91bmxpbmtlZF9wYWRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFBhcnNlQ29udGV4dCAqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UGFyc2VGbGFncyAgICAgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgKiogZXJyKTsKKworR3N0Q2xvY2tUaW1lICAgICAgICAgICAgZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAgICAgICAgICAodm9pZCk7CisKKy8qKgorICogR3N0U2VhcmNoTW9kZToKKyAqIEBHU1RfU0VBUkNIX01PREVfRVhBQ1QgOiBPbmx5IHNlYXJjaCBmb3IgZXhhY3QgbWF0Y2hlcy4KKyAqIEBHU1RfU0VBUkNIX01PREVfQkVGT1JFOiBTZWFyY2ggZm9yIGFuIGV4YWN0IG1hdGNoIG9yIHRoZSBlbGVtZW50IGp1c3QgYmVmb3JlLgorICogQEdTVF9TRUFSQ0hfTU9ERV9BRlRFUiA6IFNlYXJjaCBmb3IgYW4gZXhhY3QgbWF0Y2ggb3IgdGhlIGVsZW1lbnQganVzdCBhZnRlci4KKyAqCisgKiBUaGUgZGlmZmVyZW50IHNlYXJjaCBtb2Rlcy4KKyAqCisgKiBTaW5jZTogMC4xMC4yMworICovCit0eXBlZGVmIGVudW0geworICBHU1RfU0VBUkNIX01PREVfRVhBQ1QgPSAwLAorICBHU1RfU0VBUkNIX01PREVfQkVGT1JFLAorICBHU1RfU0VBUkNIX01PREVfQUZURVIKK30gR3N0U2VhcmNoTW9kZTsKKworZ3BvaW50ZXIgICAgICAgICAgICAgICAgZ3N0X3V0aWxfYXJyYXlfYmluYXJ5X3NlYXJjaCAgICAgIChncG9pbnRlciBhcnJheSwgZ3VpbnQgbnVtX2VsZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSBlbGVtZW50X3NpemUsIEdDb21wYXJlRGF0YUZ1bmMgc2VhcmNoX2Z1bmMsCisJCQkJCQkJICAgR3N0U2VhcmNoTW9kZSBtb2RlLCBnY29uc3Rwb2ludGVyIHNlYXJjaF9kYXRhLAorCQkJCQkJCSAgIGdwb2ludGVyIHVzZXJfZGF0YSk7CisKK2dpbnQgZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKGdpbnQgYSwgZ2ludCBiKTsKK3ZvaWQgZ3N0X3V0aWxfZnJhY3Rpb25fdG9fZG91YmxlIChnaW50IHNyY19uLCBnaW50IHNyY19kLCBnZG91YmxlICpkZXN0KTsKK3ZvaWQgZ3N0X3V0aWxfZG91YmxlX3RvX2ZyYWN0aW9uIChnZG91YmxlIHNyYywgZ2ludCAqZGVzdF9uLCBnaW50ICpkZXN0X2QpOworZ2Jvb2xlYW4gZ3N0X3V0aWxfZnJhY3Rpb25fbXVsdGlwbHkgKGdpbnQgYV9uLCBnaW50IGFfZCwgZ2ludCBiX24sIGdpbnQgYl9kLCBnaW50ICpyZXNfbiwgZ2ludCAqcmVzX2QpOworZ2Jvb2xlYW4gZ3N0X3V0aWxfZnJhY3Rpb25fYWRkIChnaW50IGFfbiwgZ2ludCBhX2QsIGdpbnQgYl9uLCBnaW50IGJfZCwgZ2ludCAqcmVzX24sIGdpbnQgKnJlc19kKTsKK2dpbnQgZ3N0X3V0aWxfZnJhY3Rpb25fY29tcGFyZSAoZ2ludCBhX24sIGdpbnQgYV9kLCBnaW50IGJfbiwgZ2ludCBiX2QpOworCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9VVElMU19IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3R2YWx1ZS5jIGIvZ3N0L2dzdHZhbHVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNiZWQ1OQotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3R2YWx1ZS5jCkBAIC0wLDAgKzEsNDk3MSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDwyMDAzPiBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKioKKyAqIFNFQ1RJT046Z3N0dmFsdWUKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogR1ZhbHVlIGltcGxlbWVudGF0aW9ucyBzcGVjaWZpYworICogdG8gR1N0cmVhbWVyCisgKgorICogR1ZhbHVlIGltcGxlbWVudGF0aW9ucyBzcGVjaWZpYyB0byBHU3RyZWFtZXIuCisgKgorICogTm90ZSB0aGF0IG9wZXJhdGlvbnMgb24gdGhlIHNhbWUgI0dWYWx1ZSBmcm9tIG11bHRpcGxlIHRocmVhZHMgbWF5IGxlYWQgdG8KKyAqIHVuZGVmaW5lZCBiZWhhdmlvdXIuCisgKgorICogTGFzdCByZXZpZXdlZCBvbiAyMDA4LTAzLTExICgwLjEwLjE4KQorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJnbGliLWNvbXBhdC1wcml2YXRlLmgiCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdvYmplY3QvZ3ZhbHVlY29sbGVjdG9yLmg+CisjaW5jbHVkZSAiZ3N0dXRpbHMuaCIKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdFZhbHVlVW5pb25JbmZvIEdzdFZhbHVlVW5pb25JbmZvOworc3RydWN0IF9Hc3RWYWx1ZVVuaW9uSW5mbworeworICBHVHlwZSB0eXBlMTsKKyAgR1R5cGUgdHlwZTI7CisgIEdzdFZhbHVlVW5pb25GdW5jIGZ1bmM7Cit9OworCit0eXBlZGVmIHN0cnVjdCBfR3N0VmFsdWVJbnRlcnNlY3RJbmZvIEdzdFZhbHVlSW50ZXJzZWN0SW5mbzsKK3N0cnVjdCBfR3N0VmFsdWVJbnRlcnNlY3RJbmZvCit7CisgIEdUeXBlIHR5cGUxOworICBHVHlwZSB0eXBlMjsKKyAgR3N0VmFsdWVJbnRlcnNlY3RGdW5jIGZ1bmM7Cit9OworCit0eXBlZGVmIHN0cnVjdCBfR3N0VmFsdWVTdWJ0cmFjdEluZm8gR3N0VmFsdWVTdWJ0cmFjdEluZm87CitzdHJ1Y3QgX0dzdFZhbHVlU3VidHJhY3RJbmZvCit7CisgIEdUeXBlIG1pbnVlbmQ7CisgIEdUeXBlIHN1YnRyYWhlbmQ7CisgIEdzdFZhbHVlU3VidHJhY3RGdW5jIGZ1bmM7Cit9OworCisjZGVmaW5lIEZVTkRBTUVOVEFMX1RZUEVfSURfTUFYIFwKKyAgICAoR19UWVBFX0ZVTkRBTUVOVEFMX01BWCA+PiBHX1RZUEVfRlVOREFNRU5UQUxfU0hJRlQpCisjZGVmaW5lIEZVTkRBTUVOVEFMX1RZUEVfSUQodHlwZSkgXAorICAgICgodHlwZSkgPj4gR19UWVBFX0ZVTkRBTUVOVEFMX1NISUZUKQorCisjZGVmaW5lIFZBTFVFX0xJU1RfU0laRSh2KSAoKChHQXJyYXkgKikgKHYpLT5kYXRhWzBdLnZfcG9pbnRlciktPmxlbikKKyNkZWZpbmUgVkFMVUVfTElTVF9HRVRfVkFMVUUodiwgaW5kZXgpICgoY29uc3QgR1ZhbHVlICopICZnX2FycmF5X2luZGV4ICgoR0FycmF5ICopICh2KS0+ZGF0YVswXS52X3BvaW50ZXIsIEdWYWx1ZSwgKGluZGV4KSkpCisKK3N0YXRpYyBHQXJyYXkgKmdzdF92YWx1ZV90YWJsZTsKK3N0YXRpYyBHSGFzaFRhYmxlICpnc3RfdmFsdWVfaGFzaDsKK3N0YXRpYyBHc3RWYWx1ZVRhYmxlICpnc3RfdmFsdWVfdGFibGVzX2Z1bmRhbWVudGFsW0ZVTkRBTUVOVEFMX1RZUEVfSURfTUFYICsgMV07CitzdGF0aWMgR0FycmF5ICpnc3RfdmFsdWVfdW5pb25fZnVuY3M7CitzdGF0aWMgR0FycmF5ICpnc3RfdmFsdWVfaW50ZXJzZWN0X2Z1bmNzOworc3RhdGljIEdBcnJheSAqZ3N0X3ZhbHVlX3N1YnRyYWN0X2Z1bmNzOworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworc3RhdGljIGdjaGFyICpnc3RfdmFsdWVfc2VyaWFsaXplX2ZyYWN0aW9uIChjb25zdCBHVmFsdWUgKiB2YWx1ZSk7CisKK3N0YXRpYyBHc3RWYWx1ZUNvbXBhcmVGdW5jIGdzdF92YWx1ZV9nZXRfY29tcGFyZV9mdW5jIChjb25zdCBHVmFsdWUgKiB2YWx1ZTEpOworc3RhdGljIGdpbnQgZ3N0X3ZhbHVlX2NvbXBhcmVfd2l0aF9mdW5jIChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsCisgICAgY29uc3QgR1ZhbHVlICogdmFsdWUyLCBHc3RWYWx1ZUNvbXBhcmVGdW5jIGNvbXBhcmUpOworCitzdGF0aWMgZ2NoYXIgKmdzdF9zdHJpbmdfd3JhcCAoY29uc3QgZ2NoYXIgKiBzKTsKK3N0YXRpYyBnY2hhciAqZ3N0X3N0cmluZ190YWtlX2FuZF93cmFwIChnY2hhciAqIHMpOworc3RhdGljIGdjaGFyICpnc3Rfc3RyaW5nX3Vud3JhcCAoY29uc3QgZ2NoYXIgKiBzKTsKKworc3RhdGljIGlubGluZSBHc3RWYWx1ZVRhYmxlICoKK2dzdF92YWx1ZV9oYXNoX2xvb2t1cF90eXBlIChHVHlwZSB0eXBlKQoreworICBpZiAoR19MSUtFTFkgKEdfVFlQRV9JU19GVU5EQU1FTlRBTCAodHlwZSkpKQorICAgIHJldHVybiBnc3RfdmFsdWVfdGFibGVzX2Z1bmRhbWVudGFsW0ZVTkRBTUVOVEFMX1RZUEVfSUQgKHR5cGUpXTsKKyAgZWxzZQorICAgIHJldHVybiBnX2hhc2hfdGFibGVfbG9va3VwIChnc3RfdmFsdWVfaGFzaCwgKGdwb2ludGVyKSB0eXBlKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF92YWx1ZV9oYXNoX2FkZF90eXBlIChHVHlwZSB0eXBlLCBjb25zdCBHc3RWYWx1ZVRhYmxlICogdGFibGUpCit7CisgIGlmIChHX1RZUEVfSVNfRlVOREFNRU5UQUwgKHR5cGUpKQorICAgIGdzdF92YWx1ZV90YWJsZXNfZnVuZGFtZW50YWxbRlVOREFNRU5UQUxfVFlQRV9JRCAodHlwZSldID0gKGdwb2ludGVyKSB0YWJsZTsKKworICBnX2hhc2hfdGFibGVfaW5zZXJ0IChnc3RfdmFsdWVfaGFzaCwgKGdwb2ludGVyKSB0eXBlLCAoZ3BvaW50ZXIpIHRhYmxlKTsKK30KKworLyoqKioqKioqCisgKiBsaXN0ICoKKyAqKioqKioqKi8KKworLyogdHdvIGhlbHBlciBmdW5jdGlvbnMgdG8gc2VyaWFsaXplL3N0cmluZ2lmeSBhbnkgdHlwZSBvZiBsaXN0CisgKiByZWd1bGFyIGxpc3RzIGFyZSBkb25lIHdpdGggeyB9LCBhcnJheXMgd2l0aCA8ID4KKyAqLworc3RhdGljIGdjaGFyICoKK2dzdF92YWx1ZV9zZXJpYWxpemVfYW55X2xpc3QgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBjb25zdCBnY2hhciAqIGJlZ2luLAorICAgIGNvbnN0IGdjaGFyICogZW5kKQoreworICBndWludCBpOworICBHQXJyYXkgKmFycmF5ID0gdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyOworICBHU3RyaW5nICpzOworICBHVmFsdWUgKnY7CisgIGdjaGFyICpzX3ZhbDsKKyAgZ3VpbnQgYWxlbiA9IGFycmF5LT5sZW47CisKKyAgLyogZXN0aW1hdGUgbWluaW11bSBzdHJpbmcgbGVuZ3RoIHRvIG1pbmltaXNlIHJlLWFsbG9jcyBpbiBHU3RyaW5nICovCisgIHMgPSBnX3N0cmluZ19zaXplZF9uZXcgKDIgKyAoNiAqIGFsZW4pICsgMik7CisgIGdfc3RyaW5nX2FwcGVuZCAocywgYmVnaW4pOworICBmb3IgKGkgPSAwOyBpIDwgYWxlbjsgaSsrKSB7CisgICAgdiA9ICZnX2FycmF5X2luZGV4IChhcnJheSwgR1ZhbHVlLCBpKTsKKyAgICBzX3ZhbCA9IGdzdF92YWx1ZV9zZXJpYWxpemUgKHYpOworICAgIGdfc3RyaW5nX2FwcGVuZCAocywgc192YWwpOworICAgIGdfZnJlZSAoc192YWwpOworICAgIGlmIChpIDwgYWxlbiAtIDEpIHsKKyAgICAgIGdfc3RyaW5nX2FwcGVuZF9sZW4gKHMsICIsICIsIDIpOworICAgIH0KKyAgfQorICBnX3N0cmluZ19hcHBlbmQgKHMsIGVuZCk7CisgIHJldHVybiBnX3N0cmluZ19mcmVlIChzLCBGQUxTRSk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfdmFsdWVfdHJhbnNmb3JtX2FueV9saXN0X3N0cmluZyAoY29uc3QgR1ZhbHVlICogc3JjX3ZhbHVlLAorICAgIEdWYWx1ZSAqIGRlc3RfdmFsdWUsIGNvbnN0IGdjaGFyICogYmVnaW4sIGNvbnN0IGdjaGFyICogZW5kKQoreworICBHVmFsdWUgKmxpc3RfdmFsdWU7CisgIEdBcnJheSAqYXJyYXk7CisgIEdTdHJpbmcgKnM7CisgIGd1aW50IGk7CisgIGdjaGFyICpsaXN0X3M7CisgIGd1aW50IGFsZW47CisKKyAgYXJyYXkgPSBzcmNfdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyOworICBhbGVuID0gYXJyYXktPmxlbjsKKworICAvKiBlc3RpbWF0ZSBtaW5pbXVtIHN0cmluZyBsZW5ndGggdG8gbWluaW1pc2UgcmUtYWxsb2NzIGluIEdTdHJpbmcgKi8KKyAgcyA9IGdfc3RyaW5nX3NpemVkX25ldyAoMiArICgxMCAqIGFsZW4pICsgMik7CisgIGdfc3RyaW5nX2FwcGVuZCAocywgYmVnaW4pOworICBmb3IgKGkgPSAwOyBpIDwgYWxlbjsgaSsrKSB7CisgICAgbGlzdF92YWx1ZSA9ICZnX2FycmF5X2luZGV4IChhcnJheSwgR1ZhbHVlLCBpKTsKKworICAgIGlmIChpICE9IDApIHsKKyAgICAgIGdfc3RyaW5nX2FwcGVuZF9sZW4gKHMsICIsICIsIDIpOworICAgIH0KKyAgICBsaXN0X3MgPSBnX3N0cmR1cF92YWx1ZV9jb250ZW50cyAobGlzdF92YWx1ZSk7CisgICAgZ19zdHJpbmdfYXBwZW5kIChzLCBsaXN0X3MpOworICAgIGdfZnJlZSAobGlzdF9zKTsKKyAgfQorICBnX3N0cmluZ19hcHBlbmQgKHMsIGVuZCk7CisKKyAgZGVzdF92YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIgPSBnX3N0cmluZ19mcmVlIChzLCBGQUxTRSk7Cit9CisKKy8qCisgKiBoZWxwZXIgZnVuY3Rpb24gdG8gc2VlIGlmIGEgdHlwZSBpcyBmaXhlZC4gSXMgdXNlZCBpbnRlcm5hbGx5IGhlcmUgYW5kCisgKiB0aGVyZS4gRG8gbm90IGV4cG9ydCwgc2luY2UgaXQgZG9lc24ndCB3b3JrIGZvciB0eXBlcyB3aGVyZSB0aGUgY29udGVudAorICogZGVjaWRlcyB0aGUgZml4ZWRuZXNzIChlLmcuIEdTVF9UWVBFX0FSUkFZKS4KKyAqLworc3RhdGljIGdib29sZWFuCitnc3RfdHlwZV9pc19maXhlZCAoR1R5cGUgdHlwZSkKK3sKKyAgLyogdGhlIGJhc2ljIGludCwgc3RyaW5nLCBkb3VibGUgdHlwZXMgKi8KKyAgaWYgKHR5cGUgPD0gR19UWVBFX01BS0VfRlVOREFNRU5UQUwgKEdfVFlQRV9SRVNFUlZFRF9HTElCX0xBU1QpKSB7CisgICAgcmV0dXJuIFRSVUU7CisgIH0KKyAgLyogb3VyIGZ1bmRhbWVudGFsIHR5cGVzIHRoYXQgYXJlIGNlcnRhaW5seSBub3QgZml4ZWQgKi8KKyAgaWYgKHR5cGUgPT0gR1NUX1RZUEVfSU5UX1JBTkdFIHx8IHR5cGUgPT0gR1NUX1RZUEVfRE9VQkxFX1JBTkdFIHx8CisgICAgICB0eXBlID09IEdTVF9UWVBFX0lOVDY0X1JBTkdFIHx8CisgICAgICB0eXBlID09IEdTVF9UWVBFX0xJU1QgfHwgdHlwZSA9PSBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSkgeworICAgIHJldHVybiBGQUxTRTsKKyAgfQorICAvKiBvdGhlciAoYm94ZWQpIHR5cGVzIHRoYXQgYXJlIGZpeGVkICovCisgIGlmICh0eXBlID09IEdTVF9UWVBFX0JVRkZFUikgeworICAgIHJldHVybiBUUlVFOworICB9CisgIC8qIGhlYXZ5IGNoZWNrcyAqLworICBpZiAoR19UWVBFX0lTX0ZVTkRBTUVOVEFMICh0eXBlKSB8fCBHX1RZUEVfRlVOREFNRU5UQUwgKHR5cGUpIDw9CisgICAgICBHX1RZUEVfTUFLRV9GVU5EQU1FTlRBTCAoR19UWVBFX1JFU0VSVkVEX0dMSUJfTEFTVCkpIHsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorCisgIHJldHVybiBGQUxTRTsKK30KKworLyogR1ZhbHVlIGZ1bmN0aW9ucyB1c2FibGUgZm9yIGJvdGggcmVndWxhciBsaXN0cyBhbmQgYXJyYXlzICovCitzdGF0aWMgdm9pZAorZ3N0X3ZhbHVlX2luaXRfbGlzdF9vcl9hcnJheSAoR1ZhbHVlICogdmFsdWUpCit7CisgIHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlciA9IGdfYXJyYXlfbmV3IChGQUxTRSwgVFJVRSwgc2l6ZW9mIChHVmFsdWUpKTsKK30KKworc3RhdGljIEdBcnJheSAqCitjb3B5X2dhcnJheV9vZl9nc3R2YWx1ZSAoY29uc3QgR0FycmF5ICogc3JjKQoreworICBHQXJyYXkgKmRlc3Q7CisgIGd1aW50IGksIGxlbjsKKworICBsZW4gPSBzcmMtPmxlbjsKKyAgZGVzdCA9IGdfYXJyYXlfc2l6ZWRfbmV3IChGQUxTRSwgVFJVRSwgc2l6ZW9mIChHVmFsdWUpLCBsZW4pOworICBnX2FycmF5X3NldF9zaXplIChkZXN0LCBsZW4pOworICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICBnc3RfdmFsdWVfaW5pdF9hbmRfY29weSAoJmdfYXJyYXlfaW5kZXggKGRlc3QsIEdWYWx1ZSwgaSksCisgICAgICAgICZnX2FycmF5X2luZGV4IChzcmMsIEdWYWx1ZSwgaSkpOworICB9CisKKyAgcmV0dXJuIGRlc3Q7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfdmFsdWVfY29weV9saXN0X29yX2FycmF5IChjb25zdCBHVmFsdWUgKiBzcmNfdmFsdWUsIEdWYWx1ZSAqIGRlc3RfdmFsdWUpCit7CisgIGRlc3RfdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyID0KKyAgICAgIGNvcHlfZ2FycmF5X29mX2dzdHZhbHVlICgoR0FycmF5ICopIHNyY192YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3ZhbHVlX2ZyZWVfbGlzdF9vcl9hcnJheSAoR1ZhbHVlICogdmFsdWUpCit7CisgIGd1aW50IGksIGxlbjsKKyAgR0FycmF5ICpzcmMgPSAoR0FycmF5ICopIHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcjsKKyAgbGVuID0gc3JjLT5sZW47CisKKyAgaWYgKCh2YWx1ZS0+ZGF0YVsxXS52X3VpbnQgJiBHX1ZBTFVFX05PQ09QWV9DT05URU5UUykgPT0gMCkgeworICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgZ192YWx1ZV91bnNldCAoJmdfYXJyYXlfaW5kZXggKHNyYywgR1ZhbHVlLCBpKSk7CisgICAgfQorICAgIGdfYXJyYXlfZnJlZSAoc3JjLCBUUlVFKTsKKyAgfQorfQorCitzdGF0aWMgZ3BvaW50ZXIKK2dzdF92YWx1ZV9saXN0X29yX2FycmF5X3BlZWtfcG9pbnRlciAoY29uc3QgR1ZhbHVlICogdmFsdWUpCit7CisgIHJldHVybiB2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXI7Cit9CisKK3N0YXRpYyBnY2hhciAqCitnc3RfdmFsdWVfY29sbGVjdF9saXN0X29yX2FycmF5IChHVmFsdWUgKiB2YWx1ZSwgZ3VpbnQgbl9jb2xsZWN0X3ZhbHVlcywKKyAgICBHVHlwZUNWYWx1ZSAqIGNvbGxlY3RfdmFsdWVzLCBndWludCBjb2xsZWN0X2ZsYWdzKQoreworICBpZiAoY29sbGVjdF9mbGFncyAmIEdfVkFMVUVfTk9DT1BZX0NPTlRFTlRTKSB7CisgICAgdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyID0gY29sbGVjdF92YWx1ZXNbMF0udl9wb2ludGVyOworICAgIHZhbHVlLT5kYXRhWzFdLnZfdWludCA9IEdfVkFMVUVfTk9DT1BZX0NPTlRFTlRTOworICB9IGVsc2UgeworICAgIHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlciA9CisgICAgICAgIGNvcHlfZ2FycmF5X29mX2dzdHZhbHVlICgoR0FycmF5ICopIGNvbGxlY3RfdmFsdWVzWzBdLnZfcG9pbnRlcik7CisgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBnY2hhciAqCitnc3RfdmFsdWVfbGNvcHlfbGlzdF9vcl9hcnJheSAoY29uc3QgR1ZhbHVlICogdmFsdWUsIGd1aW50IG5fY29sbGVjdF92YWx1ZXMsCisgICAgR1R5cGVDVmFsdWUgKiBjb2xsZWN0X3ZhbHVlcywgZ3VpbnQgY29sbGVjdF9mbGFncykKK3sKKyAgR0FycmF5ICoqZGVzdCA9IGNvbGxlY3RfdmFsdWVzWzBdLnZfcG9pbnRlcjsKKworICBpZiAoIWRlc3QpCisgICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoInZhbHVlIGxvY2F0aW9uIGZvciBgJXMnIHBhc3NlZCBhcyBOVUxMIiwKKyAgICAgICAgR19WQUxVRV9UWVBFX05BTUUgKHZhbHVlKSk7CisgIGlmICghdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyKQorICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJpbnZhbGlkIHZhbHVlIGdpdmVuIGZvciBgJXMnIiwKKyAgICAgICAgR19WQUxVRV9UWVBFX05BTUUgKHZhbHVlKSk7CisgIGlmIChjb2xsZWN0X2ZsYWdzICYgR19WQUxVRV9OT0NPUFlfQ09OVEVOVFMpIHsKKyAgICAqZGVzdCA9IChHQXJyYXkgKikgdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyOworICB9IGVsc2UgeworICAgICpkZXN0ID0gY29weV9nYXJyYXlfb2ZfZ3N0dmFsdWUgKChHQXJyYXkgKikgdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyKTsKKyAgfQorICByZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWU6CisgKiBAdmFsdWU6IGEgI0dWYWx1ZSBvZiB0eXBlICNHU1RfVFlQRV9MSVNUCisgKiBAYXBwZW5kX3ZhbHVlOiB0aGUgdmFsdWUgdG8gYXBwZW5kCisgKgorICogQXBwZW5kcyBAYXBwZW5kX3ZhbHVlIHRvIHRoZSBHc3RWYWx1ZUxpc3QgaW4gQHZhbHVlLgorICovCit2b2lkCitnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKEdWYWx1ZSAqIHZhbHVlLCBjb25zdCBHVmFsdWUgKiBhcHBlbmRfdmFsdWUpCit7CisgIEdWYWx1ZSB2YWwgPSB7IDAsIH07CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0xJU1QgKHZhbHVlKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKGFwcGVuZF92YWx1ZSkpOworCisgIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5ICgmdmFsLCBhcHBlbmRfdmFsdWUpOworICBnX2FycmF5X2FwcGVuZF92YWxzICgoR0FycmF5ICopIHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlciwgJnZhbCwgMSk7Cit9CisKKy8qKgorICogZ3N0X3ZhbHVlX2xpc3RfcHJlcGVuZF92YWx1ZToKKyAqIEB2YWx1ZTogYSAjR1ZhbHVlIG9mIHR5cGUgI0dTVF9UWVBFX0xJU1QKKyAqIEBwcmVwZW5kX3ZhbHVlOiB0aGUgdmFsdWUgdG8gcHJlcGVuZAorICoKKyAqIFByZXBlbmRzIEBwcmVwZW5kX3ZhbHVlIHRvIHRoZSBHc3RWYWx1ZUxpc3QgaW4gQHZhbHVlLgorICovCit2b2lkCitnc3RfdmFsdWVfbGlzdF9wcmVwZW5kX3ZhbHVlIChHVmFsdWUgKiB2YWx1ZSwgY29uc3QgR1ZhbHVlICogcHJlcGVuZF92YWx1ZSkKK3sKKyAgR1ZhbHVlIHZhbCA9IHsgMCwgfTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfVkFMVUVfSE9MRFNfTElTVCAodmFsdWUpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR19JU19WQUxVRSAocHJlcGVuZF92YWx1ZSkpOworCisgIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5ICgmdmFsLCBwcmVwZW5kX3ZhbHVlKTsKKyAgZ19hcnJheV9wcmVwZW5kX3ZhbHMgKChHQXJyYXkgKikgdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyLCAmdmFsLCAxKTsKK30KKworLyoqCisgKiBnc3RfdmFsdWVfbGlzdF9jb25jYXQ6CisgKiBAZGVzdDogKG91dCBjYWxsZXItYWxsb2NhdGVzKTogYW4gdW5pbml0aWFsaXplZCAjR1ZhbHVlIHRvIHRha2UgdGhlIHJlc3VsdAorICogQHZhbHVlMTogYSAjR1ZhbHVlCisgKiBAdmFsdWUyOiBhICNHVmFsdWUKKyAqCisgKiBDb25jYXRlbmF0ZXMgY29waWVzIG9mIEB2YWx1ZTEgYW5kIEB2YWx1ZTIgaW50byBhIGxpc3QuICBWYWx1ZXMgdGhhdCBhcmUgbm90CisgKiBvZiB0eXBlICNHU1RfVFlQRV9MSVNUIGFyZSB0cmVhdGVkIGFzIGlmIHRoZXkgd2VyZSBsaXN0cyBvZiBsZW5ndGggMS4KKyAqIEBkZXN0IHdpbGwgYmUgaW5pdGlhbGl6ZWQgdG8gdGhlIHR5cGUgI0dTVF9UWVBFX0xJU1QuCisgKi8KK3ZvaWQKK2dzdF92YWx1ZV9saXN0X2NvbmNhdCAoR1ZhbHVlICogZGVzdCwgY29uc3QgR1ZhbHVlICogdmFsdWUxLAorICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKK3sKKyAgZ3VpbnQgaSwgdmFsdWUxX2xlbmd0aCwgdmFsdWUyX2xlbmd0aDsKKyAgR0FycmF5ICphcnJheTsKKworICBnX3JldHVybl9pZl9mYWlsIChkZXN0ICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsIChHX1ZBTFVFX1RZUEUgKGRlc3QpID09IDApOworICBnX3JldHVybl9pZl9mYWlsIChHX0lTX1ZBTFVFICh2YWx1ZTEpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR19JU19WQUxVRSAodmFsdWUyKSk7CisKKyAgdmFsdWUxX2xlbmd0aCA9CisgICAgICAoR1NUX1ZBTFVFX0hPTERTX0xJU1QgKHZhbHVlMSkgPyBWQUxVRV9MSVNUX1NJWkUgKHZhbHVlMSkgOiAxKTsKKyAgdmFsdWUyX2xlbmd0aCA9CisgICAgICAoR1NUX1ZBTFVFX0hPTERTX0xJU1QgKHZhbHVlMikgPyBWQUxVRV9MSVNUX1NJWkUgKHZhbHVlMikgOiAxKTsKKyAgZ192YWx1ZV9pbml0IChkZXN0LCBHU1RfVFlQRV9MSVNUKTsKKyAgYXJyYXkgPSAoR0FycmF5ICopIGRlc3QtPmRhdGFbMF0udl9wb2ludGVyOworICBnX2FycmF5X3NldF9zaXplIChhcnJheSwgdmFsdWUxX2xlbmd0aCArIHZhbHVlMl9sZW5ndGgpOworCisgIGlmIChHU1RfVkFMVUVfSE9MRFNfTElTVCAodmFsdWUxKSkgeworICAgIGZvciAoaSA9IDA7IGkgPCB2YWx1ZTFfbGVuZ3RoOyBpKyspIHsKKyAgICAgIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5ICgmZ19hcnJheV9pbmRleCAoYXJyYXksIEdWYWx1ZSwgaSksCisgICAgICAgICAgVkFMVUVfTElTVF9HRVRfVkFMVUUgKHZhbHVlMSwgaSkpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBnc3RfdmFsdWVfaW5pdF9hbmRfY29weSAoJmdfYXJyYXlfaW5kZXggKGFycmF5LCBHVmFsdWUsIDApLCB2YWx1ZTEpOworICB9CisKKyAgaWYgKEdTVF9WQUxVRV9IT0xEU19MSVNUICh2YWx1ZTIpKSB7CisgICAgZm9yIChpID0gMDsgaSA8IHZhbHVlMl9sZW5ndGg7IGkrKykgeworICAgICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKCZnX2FycmF5X2luZGV4IChhcnJheSwgR1ZhbHVlLAorICAgICAgICAgICAgICBpICsgdmFsdWUxX2xlbmd0aCksIFZBTFVFX0xJU1RfR0VUX1ZBTFVFICh2YWx1ZTIsIGkpKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKCZnX2FycmF5X2luZGV4IChhcnJheSwgR1ZhbHVlLCB2YWx1ZTFfbGVuZ3RoKSwKKyAgICAgICAgdmFsdWUyKTsKKyAgfQorfQorCisvKioKKyAqIGdzdF92YWx1ZV9saXN0X21lcmdlOgorICogQGRlc3Q6IChvdXQgY2FsbGVyLWFsbG9jYXRlcyk6IGFuIHVuaW5pdGlhbGl6ZWQgI0dWYWx1ZSB0byB0YWtlIHRoZSByZXN1bHQKKyAqIEB2YWx1ZTE6IGEgI0dWYWx1ZQorICogQHZhbHVlMjogYSAjR1ZhbHVlCisgKgorICogTWVyZ2VzIGNvcGllcyBvZiBAdmFsdWUxIGFuZCBAdmFsdWUyLiAgVmFsdWVzIHRoYXQgYXJlIG5vdAorICogb2YgdHlwZSAjR1NUX1RZUEVfTElTVCBhcmUgdHJlYXRlZCBhcyBpZiB0aGV5IHdlcmUgbGlzdHMgb2YgbGVuZ3RoIDEuCisgKgorICogVGhlIHJlc3VsdCB3aWxsIGJlIHB1dCBpbnRvIEBkZXN0IGFuZCB3aWxsIGVpdGhlciBiZSBhIGxpc3QgdGhhdCB3aWxsIG5vdAorICogY29udGFpbiBhbnkgZHVwbGljYXRlcywgb3IgYSBub24tbGlzdCB0eXBlIChpZiBAdmFsdWUxIGFuZCBAdmFsdWUyCisgKiB3ZXJlIGVxdWFsKS4KKyAqCisgKiBTaW5jZTogMC4xMC4zMgorICovCit2b2lkCitnc3RfdmFsdWVfbGlzdF9tZXJnZSAoR1ZhbHVlICogZGVzdCwgY29uc3QgR1ZhbHVlICogdmFsdWUxLAorICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKK3sKKyAgZ3VpbnQgaSwgaiwgaywgdmFsdWUxX2xlbmd0aCwgdmFsdWUyX2xlbmd0aCwgc2tpcHBlZDsKKyAgY29uc3QgR1ZhbHVlICpzcmM7CisgIGdib29sZWFuIHNraXA7CisgIEdBcnJheSAqYXJyYXk7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoZGVzdCAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR19WQUxVRV9UWVBFIChkZXN0KSA9PSAwKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR19JU19WQUxVRSAodmFsdWUxKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHZhbHVlMikpOworCisgIHZhbHVlMV9sZW5ndGggPQorICAgICAgKEdTVF9WQUxVRV9IT0xEU19MSVNUICh2YWx1ZTEpID8gVkFMVUVfTElTVF9TSVpFICh2YWx1ZTEpIDogMSk7CisgIHZhbHVlMl9sZW5ndGggPQorICAgICAgKEdTVF9WQUxVRV9IT0xEU19MSVNUICh2YWx1ZTIpID8gVkFMVUVfTElTVF9TSVpFICh2YWx1ZTIpIDogMSk7CisgIGdfdmFsdWVfaW5pdCAoZGVzdCwgR1NUX1RZUEVfTElTVCk7CisgIGFycmF5ID0gKEdBcnJheSAqKSBkZXN0LT5kYXRhWzBdLnZfcG9pbnRlcjsKKyAgZ19hcnJheV9zZXRfc2l6ZSAoYXJyYXksIHZhbHVlMV9sZW5ndGggKyB2YWx1ZTJfbGVuZ3RoKTsKKworICBpZiAoR1NUX1ZBTFVFX0hPTERTX0xJU1QgKHZhbHVlMSkpIHsKKyAgICBmb3IgKGkgPSAwOyBpIDwgdmFsdWUxX2xlbmd0aDsgaSsrKSB7CisgICAgICBnc3RfdmFsdWVfaW5pdF9hbmRfY29weSAoJmdfYXJyYXlfaW5kZXggKGFycmF5LCBHVmFsdWUsIGkpLAorICAgICAgICAgIFZBTFVFX0xJU1RfR0VUX1ZBTFVFICh2YWx1ZTEsIGkpKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKCZnX2FycmF5X2luZGV4IChhcnJheSwgR1ZhbHVlLCAwKSwgdmFsdWUxKTsKKyAgfQorCisgIGogPSB2YWx1ZTFfbGVuZ3RoOworICBza2lwcGVkID0gMDsKKyAgaWYgKEdTVF9WQUxVRV9IT0xEU19MSVNUICh2YWx1ZTIpKSB7CisgICAgZm9yIChpID0gMDsgaSA8IHZhbHVlMl9sZW5ndGg7IGkrKykgeworICAgICAgc2tpcCA9IEZBTFNFOworICAgICAgc3JjID0gVkFMVUVfTElTVF9HRVRfVkFMVUUgKHZhbHVlMiwgaSk7CisgICAgICBmb3IgKGsgPSAwOyBrIDwgdmFsdWUxX2xlbmd0aDsgaysrKSB7CisgICAgICAgIGlmIChnc3RfdmFsdWVfY29tcGFyZSAoJmdfYXJyYXlfaW5kZXggKGFycmF5LCBHVmFsdWUsIGspLAorICAgICAgICAgICAgICAgIHNyYykgPT0gR1NUX1ZBTFVFX0VRVUFMKSB7CisgICAgICAgICAgc2tpcCA9IFRSVUU7CisgICAgICAgICAgc2tpcHBlZCsrOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAoIXNraXApIHsKKyAgICAgICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKCZnX2FycmF5X2luZGV4IChhcnJheSwgR1ZhbHVlLCBqKSwgc3JjKTsKKyAgICAgICAgaisrOworICAgICAgfQorICAgIH0KKyAgfSBlbHNlIHsKKyAgICBza2lwID0gRkFMU0U7CisgICAgZm9yIChrID0gMDsgayA8IHZhbHVlMV9sZW5ndGg7IGsrKykgeworICAgICAgaWYgKGdzdF92YWx1ZV9jb21wYXJlICgmZ19hcnJheV9pbmRleCAoYXJyYXksIEdWYWx1ZSwgayksCisgICAgICAgICAgICAgIHZhbHVlMikgPT0gR1NUX1ZBTFVFX0VRVUFMKSB7CisgICAgICAgIHNraXAgPSBUUlVFOworICAgICAgICBza2lwcGVkKys7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICBpZiAoIXNraXApIHsKKyAgICAgIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5ICgmZ19hcnJheV9pbmRleCAoYXJyYXksIEdWYWx1ZSwgaiksIHZhbHVlMik7CisgICAgfQorICB9CisgIGlmIChza2lwcGVkKSB7CisgICAgZ3VpbnQgbmV3X3NpemUgPSB2YWx1ZTFfbGVuZ3RoICsgKHZhbHVlMl9sZW5ndGggLSBza2lwcGVkKTsKKworICAgIGlmIChuZXdfc2l6ZSA+IDEpIHsKKyAgICAgIC8qIHNocmluayBsaXN0ICovCisgICAgICBnX2FycmF5X3NldF9zaXplIChhcnJheSwgbmV3X3NpemUpOworICAgIH0gZWxzZSB7CisgICAgICBHVmFsdWUgc2luZ2xlX2Rlc3Q7CisKKyAgICAgIC8qIHNpemUgaXMgMSwgdGFrZSBzaW5nbGUgdmFsdWUgaW4gbGlzdCBhbmQgbWFrZSBpdCBuZXcgZGVzdCAqLworICAgICAgc2luZ2xlX2Rlc3QgPSBnX2FycmF5X2luZGV4IChhcnJheSwgR1ZhbHVlLCAwKTsKKworICAgICAgLyogY2xlYW4gdXAgb2xkIHZhbHVlIGFsbG9jYXRpb25zOiBtdXN0IHNldCBhcnJheSBzaXplIHRvIDAsIGJlY2F1c2UKKyAgICAgICAqIGFsbG9jYXRlZCB2YWx1ZXMgYXJlIG5vdCBpbml0ZWQgbWVhbmluZyBnX3ZhbHVlX3Vuc2V0KCkgd2lsbCBub3QKKyAgICAgICAqIHdvcmsgb24gdGhlbSAqLworICAgICAgZ19hcnJheV9zZXRfc2l6ZSAoYXJyYXksIDApOworICAgICAgZ192YWx1ZV91bnNldCAoZGVzdCk7CisKKyAgICAgIC8qIHRoZSBzaW5nbGUgdmFsdWUgaXMgb3VyIG5ldyByZXN1bHQgKi8KKyAgICAgICpkZXN0ID0gc2luZ2xlX2Rlc3Q7CisgICAgfQorICB9Cit9CisKKy8qKgorICogZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemU6CisgKiBAdmFsdWU6IGEgI0dWYWx1ZSBvZiB0eXBlICNHU1RfVFlQRV9MSVNUCisgKgorICogR2V0cyB0aGUgbnVtYmVyIG9mIHZhbHVlcyBjb250YWluZWQgaW4gQHZhbHVlLgorICoKKyAqIFJldHVybnM6IHRoZSBudW1iZXIgb2YgdmFsdWVzCisgKi8KK2d1aW50Citnc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZSAoY29uc3QgR1ZhbHVlICogdmFsdWUpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfVkFMVUVfSE9MRFNfTElTVCAodmFsdWUpLCAwKTsKKworICByZXR1cm4gKChHQXJyYXkgKikgdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyKS0+bGVuOworfQorCisvKioKKyAqIGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZToKKyAqIEB2YWx1ZTogYSAjR1ZhbHVlIG9mIHR5cGUgI0dTVF9UWVBFX0xJU1QKKyAqIEBpbmRleDogaW5kZXggb2YgdmFsdWUgdG8gZ2V0IGZyb20gdGhlIGxpc3QKKyAqCisgKiBHZXRzIHRoZSB2YWx1ZSB0aGF0IGlzIGEgbWVtYmVyIG9mIHRoZSBsaXN0IGNvbnRhaW5lZCBpbiBAdmFsdWUgYW5kCisgKiBoYXMgdGhlIGluZGV4IEBpbmRleC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4gaW5kZXgKKyAqLworY29uc3QgR1ZhbHVlICoKK2dzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoY29uc3QgR1ZhbHVlICogdmFsdWUsIGd1aW50IGluZGV4KQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0xJU1QgKHZhbHVlKSwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpbmRleCA8IFZBTFVFX0xJU1RfU0laRSAodmFsdWUpLCBOVUxMKTsKKworICByZXR1cm4gKGNvbnN0IEdWYWx1ZSAqKSAmZ19hcnJheV9pbmRleCAoKEdBcnJheSAqKSB2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIsCisgICAgICBHVmFsdWUsIGluZGV4KTsKK30KKworLyoqCisgKiBnc3RfdmFsdWVfYXJyYXlfYXBwZW5kX3ZhbHVlOgorICogQHZhbHVlOiBhICNHVmFsdWUgb2YgdHlwZSAjR1NUX1RZUEVfQVJSQVkKKyAqIEBhcHBlbmRfdmFsdWU6IHRoZSB2YWx1ZSB0byBhcHBlbmQKKyAqCisgKiBBcHBlbmRzIEBhcHBlbmRfdmFsdWUgdG8gdGhlIEdzdFZhbHVlQXJyYXkgaW4gQHZhbHVlLgorICovCit2b2lkCitnc3RfdmFsdWVfYXJyYXlfYXBwZW5kX3ZhbHVlIChHVmFsdWUgKiB2YWx1ZSwgY29uc3QgR1ZhbHVlICogYXBwZW5kX3ZhbHVlKQoreworICBHVmFsdWUgdmFsID0geyAwLCB9OworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19BUlJBWSAodmFsdWUpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR19JU19WQUxVRSAoYXBwZW5kX3ZhbHVlKSk7CisKKyAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKCZ2YWwsIGFwcGVuZF92YWx1ZSk7CisgIGdfYXJyYXlfYXBwZW5kX3ZhbHMgKChHQXJyYXkgKikgdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyLCAmdmFsLCAxKTsKK30KKworLyoqCisgKiBnc3RfdmFsdWVfYXJyYXlfcHJlcGVuZF92YWx1ZToKKyAqIEB2YWx1ZTogYSAjR1ZhbHVlIG9mIHR5cGUgI0dTVF9UWVBFX0FSUkFZCisgKiBAcHJlcGVuZF92YWx1ZTogdGhlIHZhbHVlIHRvIHByZXBlbmQKKyAqCisgKiBQcmVwZW5kcyBAcHJlcGVuZF92YWx1ZSB0byB0aGUgR3N0VmFsdWVBcnJheSBpbiBAdmFsdWUuCisgKi8KK3ZvaWQKK2dzdF92YWx1ZV9hcnJheV9wcmVwZW5kX3ZhbHVlIChHVmFsdWUgKiB2YWx1ZSwgY29uc3QgR1ZhbHVlICogcHJlcGVuZF92YWx1ZSkKK3sKKyAgR1ZhbHVlIHZhbCA9IHsgMCwgfTsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfVkFMVUVfSE9MRFNfQVJSQVkgKHZhbHVlKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHByZXBlbmRfdmFsdWUpKTsKKworICBnc3RfdmFsdWVfaW5pdF9hbmRfY29weSAoJnZhbCwgcHJlcGVuZF92YWx1ZSk7CisgIGdfYXJyYXlfcHJlcGVuZF92YWxzICgoR0FycmF5ICopIHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlciwgJnZhbCwgMSk7Cit9CisKKy8qKgorICogZ3N0X3ZhbHVlX2FycmF5X2dldF9zaXplOgorICogQHZhbHVlOiBhICNHVmFsdWUgb2YgdHlwZSAjR1NUX1RZUEVfQVJSQVkKKyAqCisgKiBHZXRzIHRoZSBudW1iZXIgb2YgdmFsdWVzIGNvbnRhaW5lZCBpbiBAdmFsdWUuCisgKgorICogUmV0dXJuczogdGhlIG51bWJlciBvZiB2YWx1ZXMKKyAqLworZ3VpbnQKK2dzdF92YWx1ZV9hcnJheV9nZXRfc2l6ZSAoY29uc3QgR1ZhbHVlICogdmFsdWUpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfVkFMVUVfSE9MRFNfQVJSQVkgKHZhbHVlKSwgMCk7CisKKyAgcmV0dXJuICgoR0FycmF5ICopIHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlciktPmxlbjsKK30KKworLyoqCisgKiBnc3RfdmFsdWVfYXJyYXlfZ2V0X3ZhbHVlOgorICogQHZhbHVlOiBhICNHVmFsdWUgb2YgdHlwZSAjR1NUX1RZUEVfQVJSQVkKKyAqIEBpbmRleDogaW5kZXggb2YgdmFsdWUgdG8gZ2V0IGZyb20gdGhlIGFycmF5CisgKgorICogR2V0cyB0aGUgdmFsdWUgdGhhdCBpcyBhIG1lbWJlciBvZiB0aGUgYXJyYXkgY29udGFpbmVkIGluIEB2YWx1ZSBhbmQKKyAqIGhhcyB0aGUgaW5kZXggQGluZGV4LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogdGhlIHZhbHVlIGF0IHRoZSBnaXZlbiBpbmRleAorICovCitjb25zdCBHVmFsdWUgKgorZ3N0X3ZhbHVlX2FycmF5X2dldF92YWx1ZSAoY29uc3QgR1ZhbHVlICogdmFsdWUsIGd1aW50IGluZGV4KQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0FSUkFZICh2YWx1ZSksIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoaW5kZXggPCBnc3RfdmFsdWVfYXJyYXlfZ2V0X3NpemUgKHZhbHVlKSwgTlVMTCk7CisKKyAgcmV0dXJuIChjb25zdCBHVmFsdWUgKikgJmdfYXJyYXlfaW5kZXggKChHQXJyYXkgKikgdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyLAorICAgICAgR1ZhbHVlLCBpbmRleCk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfdmFsdWVfdHJhbnNmb3JtX2xpc3Rfc3RyaW5nIChjb25zdCBHVmFsdWUgKiBzcmNfdmFsdWUsIEdWYWx1ZSAqIGRlc3RfdmFsdWUpCit7CisgIGdzdF92YWx1ZV90cmFuc2Zvcm1fYW55X2xpc3Rfc3RyaW5nIChzcmNfdmFsdWUsIGRlc3RfdmFsdWUsICJ7ICIsICIgfSIpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3ZhbHVlX3RyYW5zZm9ybV9hcnJheV9zdHJpbmcgKGNvbnN0IEdWYWx1ZSAqIHNyY192YWx1ZSwgR1ZhbHVlICogZGVzdF92YWx1ZSkKK3sKKyAgZ3N0X3ZhbHVlX3RyYW5zZm9ybV9hbnlfbGlzdF9zdHJpbmcgKHNyY192YWx1ZSwgZGVzdF92YWx1ZSwgIjwgIiwgIiA+Iik7Cit9CisKKy8qIERvIGFuIHVub3JkZXJlZCBjb21wYXJlIG9mIHRoZSBjb250ZW50cyBvZiBhIGxpc3QgKi8KK3N0YXRpYyBnaW50Citnc3RfdmFsdWVfY29tcGFyZV9saXN0IChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKK3sKKyAgZ3VpbnQgaSwgajsKKyAgR0FycmF5ICphcnJheTEgPSB2YWx1ZTEtPmRhdGFbMF0udl9wb2ludGVyOworICBHQXJyYXkgKmFycmF5MiA9IHZhbHVlMi0+ZGF0YVswXS52X3BvaW50ZXI7CisgIEdWYWx1ZSAqdjE7CisgIEdWYWx1ZSAqdjI7CisgIGdpbnQgbGVuLCB0b19yZW1vdmU7CisgIGd1aW50OCAqcmVtb3ZlZDsKKyAgR3N0VmFsdWVDb21wYXJlRnVuYyBjb21wYXJlOworCisgIC8qIGdldCBsZW5ndGggYW5kIGRvIGluaXRpYWwgbGVuZ3RoIGNoZWNrLiAqLworICBsZW4gPSBhcnJheTEtPmxlbjsKKyAgaWYgKGxlbiAhPSBhcnJheTItPmxlbikKKyAgICByZXR1cm4gR1NUX1ZBTFVFX1VOT1JERVJFRDsKKworICAvKiBwbGFjZSB0byBtYXJrIHJlbW92ZWQgdmFsdWUgaW5kaWNlcyBvZiBhcnJheTIgKi8KKyAgcmVtb3ZlZCA9IGdfbmV3YSAoZ3VpbnQ4LCBsZW4pOworICBtZW1zZXQgKHJlbW92ZWQsIDAsIGxlbik7CisgIHRvX3JlbW92ZSA9IGxlbjsKKworICAvKiBsb29wIG92ZXIgYXJyYXkxLCBhbGwgaXRlbXMgc2hvdWxkIGJlIGluIGFycmF5Mi4gV2hlbiB3ZSBmaW5kIGFuCisgICAqIGl0ZW0gaW4gYXJyYXkyLCByZW1vdmUgaXQgZnJvbSBhcnJheTIgYnkgbWFya2luZyBpdCBhcyByZW1vdmVkICovCisgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgIHYxID0gJmdfYXJyYXlfaW5kZXggKGFycmF5MSwgR1ZhbHVlLCBpKTsKKyAgICBpZiAoKGNvbXBhcmUgPSBnc3RfdmFsdWVfZ2V0X2NvbXBhcmVfZnVuYyAodjEpKSkgeworICAgICAgZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKSB7CisgICAgICAgIC8qIGl0ZW0gaXMgcmVtb3ZlZCwgd2UgY2FuIHNraXAgaXQgKi8KKyAgICAgICAgaWYgKHJlbW92ZWRbal0pCisgICAgICAgICAgY29udGludWU7CisgICAgICAgIHYyID0gJmdfYXJyYXlfaW5kZXggKGFycmF5MiwgR1ZhbHVlLCBqKTsKKyAgICAgICAgaWYgKGdzdF92YWx1ZV9jb21wYXJlX3dpdGhfZnVuYyAodjEsIHYyLCBjb21wYXJlKSA9PSBHU1RfVkFMVUVfRVFVQUwpIHsKKyAgICAgICAgICAvKiBtYXJrIGl0ZW0gYXMgcmVtb3ZlZCBub3cgdGhhdCB3ZSBmb3VuZCBpdCBpbiBhcnJheTIgYW5kIAorICAgICAgICAgICAqIGRlY3JlbWVudCB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyBpdGVtcyBpbiBhcnJheTIuICovCisgICAgICAgICAgcmVtb3ZlZFtqXSA9IDE7CisgICAgICAgICAgdG9fcmVtb3ZlLS07CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIC8qIGl0ZW0gaW4gYXJyYXkxIGFuZCBub3QgaW4gYXJyYXkyLCBVTk9SREVSRUQgKi8KKyAgICAgIGlmIChqID09IGxlbikKKyAgICAgICAgcmV0dXJuIEdTVF9WQUxVRV9VTk9SREVSRUQ7CisgICAgfSBlbHNlCisgICAgICByZXR1cm4gR1NUX1ZBTFVFX1VOT1JERVJFRDsKKyAgfQorICAvKiBpZiBub3QgYWxsIGl0ZW1zIHdlcmUgcmVtb3ZlZCwgYXJyYXkyIGNvbnRhaW5lZCBzb21ldGhpbmcgbm90IGluIGFycmF5MSAqLworICBpZiAodG9fcmVtb3ZlICE9IDApCisgICAgcmV0dXJuIEdTVF9WQUxVRV9VTk9SREVSRUQ7CisKKyAgLyogYXJyYXlzIGFyZSBlcXVhbCAqLworICByZXR1cm4gR1NUX1ZBTFVFX0VRVUFMOworfQorCisvKiBQZXJmb3JtIGFuIG9yZGVyZWQgY29tcGFyaXNvbiBvZiB0aGUgY29udGVudHMgb2YgYW4gYXJyYXkgKi8KK3N0YXRpYyBnaW50Citnc3RfdmFsdWVfY29tcGFyZV9hcnJheSAoY29uc3QgR1ZhbHVlICogdmFsdWUxLCBjb25zdCBHVmFsdWUgKiB2YWx1ZTIpCit7CisgIGd1aW50IGk7CisgIEdBcnJheSAqYXJyYXkxID0gdmFsdWUxLT5kYXRhWzBdLnZfcG9pbnRlcjsKKyAgR0FycmF5ICphcnJheTIgPSB2YWx1ZTItPmRhdGFbMF0udl9wb2ludGVyOworICBndWludCBsZW4gPSBhcnJheTEtPmxlbjsKKyAgR1ZhbHVlICp2MTsKKyAgR1ZhbHVlICp2MjsKKworICBpZiAobGVuICE9IGFycmF5Mi0+bGVuKQorICAgIHJldHVybiBHU1RfVkFMVUVfVU5PUkRFUkVEOworCisgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgIHYxID0gJmdfYXJyYXlfaW5kZXggKGFycmF5MSwgR1ZhbHVlLCBpKTsKKyAgICB2MiA9ICZnX2FycmF5X2luZGV4IChhcnJheTIsIEdWYWx1ZSwgaSk7CisgICAgaWYgKGdzdF92YWx1ZV9jb21wYXJlICh2MSwgdjIpICE9IEdTVF9WQUxVRV9FUVVBTCkKKyAgICAgIHJldHVybiBHU1RfVkFMVUVfVU5PUkRFUkVEOworICB9CisKKyAgcmV0dXJuIEdTVF9WQUxVRV9FUVVBTDsKK30KKworc3RhdGljIGdjaGFyICoKK2dzdF92YWx1ZV9zZXJpYWxpemVfbGlzdCAoY29uc3QgR1ZhbHVlICogdmFsdWUpCit7CisgIHJldHVybiBnc3RfdmFsdWVfc2VyaWFsaXplX2FueV9saXN0ICh2YWx1ZSwgInsgIiwgIiB9Iik7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2xpc3QgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IGdjaGFyICogcykKK3sKKyAgZ193YXJuaW5nICgiZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2xpc3Q6IHVuaW1wbGVtZW50ZWQiKTsKKyAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2NoYXIgKgorZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9hcnJheSAoY29uc3QgR1ZhbHVlICogdmFsdWUpCit7CisgIHJldHVybiBnc3RfdmFsdWVfc2VyaWFsaXplX2FueV9saXN0ICh2YWx1ZSwgIjwgIiwgIiA+Iik7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2FycmF5IChHVmFsdWUgKiBkZXN0LCBjb25zdCBnY2hhciAqIHMpCit7CisgIGdfd2FybmluZyAoImdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9hcnJheTogdW5pbXBsZW1lbnRlZCIpOworICByZXR1cm4gRkFMU0U7Cit9CisKKy8qKioqKioqKioqKioqCisgKiBpbnQgcmFuZ2UgKgorICoqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkCitnc3RfdmFsdWVfaW5pdF9pbnRfcmFuZ2UgKEdWYWx1ZSAqIHZhbHVlKQoreworICB2YWx1ZS0+ZGF0YVswXS52X2ludCA9IDA7CisgIHZhbHVlLT5kYXRhWzFdLnZfaW50ID0gMDsKK30KKworc3RhdGljIHZvaWQKK2dzdF92YWx1ZV9jb3B5X2ludF9yYW5nZSAoY29uc3QgR1ZhbHVlICogc3JjX3ZhbHVlLCBHVmFsdWUgKiBkZXN0X3ZhbHVlKQoreworICBkZXN0X3ZhbHVlLT5kYXRhWzBdLnZfaW50ID0gc3JjX3ZhbHVlLT5kYXRhWzBdLnZfaW50OworICBkZXN0X3ZhbHVlLT5kYXRhWzFdLnZfaW50ID0gc3JjX3ZhbHVlLT5kYXRhWzFdLnZfaW50OworfQorCitzdGF0aWMgZ2NoYXIgKgorZ3N0X3ZhbHVlX2NvbGxlY3RfaW50X3JhbmdlIChHVmFsdWUgKiB2YWx1ZSwgZ3VpbnQgbl9jb2xsZWN0X3ZhbHVlcywKKyAgICBHVHlwZUNWYWx1ZSAqIGNvbGxlY3RfdmFsdWVzLCBndWludCBjb2xsZWN0X2ZsYWdzKQoreworICBpZiAobl9jb2xsZWN0X3ZhbHVlcyAhPSAyKQorICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJub3QgZW5vdWdoIHZhbHVlIGxvY2F0aW9ucyBmb3IgYCVzJyBwYXNzZWQiLAorICAgICAgICBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsdWUpKTsKKyAgaWYgKGNvbGxlY3RfdmFsdWVzWzBdLnZfaW50ID49IGNvbGxlY3RfdmFsdWVzWzFdLnZfaW50KQorICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJyYW5nZSBzdGFydCBpcyBub3Qgc21hbGxlciB0aGFuIGVuZCBmb3IgYCVzJyIsCisgICAgICAgIEdfVkFMVUVfVFlQRV9OQU1FICh2YWx1ZSkpOworCisgIHZhbHVlLT5kYXRhWzBdLnZfaW50ID0gY29sbGVjdF92YWx1ZXNbMF0udl9pbnQ7CisgIHZhbHVlLT5kYXRhWzFdLnZfaW50ID0gY29sbGVjdF92YWx1ZXNbMV0udl9pbnQ7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBnY2hhciAqCitnc3RfdmFsdWVfbGNvcHlfaW50X3JhbmdlIChjb25zdCBHVmFsdWUgKiB2YWx1ZSwgZ3VpbnQgbl9jb2xsZWN0X3ZhbHVlcywKKyAgICBHVHlwZUNWYWx1ZSAqIGNvbGxlY3RfdmFsdWVzLCBndWludCBjb2xsZWN0X2ZsYWdzKQoreworICBndWludDMyICppbnRfcmFuZ2Vfc3RhcnQgPSBjb2xsZWN0X3ZhbHVlc1swXS52X3BvaW50ZXI7CisgIGd1aW50MzIgKmludF9yYW5nZV9lbmQgPSBjb2xsZWN0X3ZhbHVlc1sxXS52X3BvaW50ZXI7CisKKyAgaWYgKCFpbnRfcmFuZ2Vfc3RhcnQpCisgICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoInN0YXJ0IHZhbHVlIGxvY2F0aW9uIGZvciBgJXMnIHBhc3NlZCBhcyBOVUxMIiwKKyAgICAgICAgR19WQUxVRV9UWVBFX05BTUUgKHZhbHVlKSk7CisgIGlmICghaW50X3JhbmdlX2VuZCkKKyAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgiZW5kIHZhbHVlIGxvY2F0aW9uIGZvciBgJXMnIHBhc3NlZCBhcyBOVUxMIiwKKyAgICAgICAgR19WQUxVRV9UWVBFX05BTUUgKHZhbHVlKSk7CisKKyAgKmludF9yYW5nZV9zdGFydCA9IHZhbHVlLT5kYXRhWzBdLnZfaW50OworICAqaW50X3JhbmdlX2VuZCA9IHZhbHVlLT5kYXRhWzFdLnZfaW50OworCisgIHJldHVybiBOVUxMOworfQorCisvKioKKyAqIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlOgorICogQHZhbHVlOiBhIEdWYWx1ZSBpbml0aWFsaXplZCB0byBHU1RfVFlQRV9JTlRfUkFOR0UKKyAqIEBzdGFydDogdGhlIHN0YXJ0IG9mIHRoZSByYW5nZQorICogQGVuZDogdGhlIGVuZCBvZiB0aGUgcmFuZ2UKKyAqCisgKiBTZXRzIEB2YWx1ZSB0byB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IEBzdGFydCBhbmQgQGVuZC4KKyAqLwordm9pZAorZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2UgKEdWYWx1ZSAqIHZhbHVlLCBnaW50IHN0YXJ0LCBnaW50IGVuZCkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRSAodmFsdWUpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoc3RhcnQgPCBlbmQpOworCisgIHZhbHVlLT5kYXRhWzBdLnZfaW50ID0gc3RhcnQ7CisgIHZhbHVlLT5kYXRhWzFdLnZfaW50ID0gZW5kOworfQorCisvKioKKyAqIGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbjoKKyAqIEB2YWx1ZTogYSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfSU5UX1JBTkdFCisgKgorICogR2V0cyB0aGUgbWluaW11bSBvZiB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IEB2YWx1ZS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbWluaW11bSBvZiB0aGUgcmFuZ2UKKyAqLworZ2ludAorZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWluIChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19JTlRfUkFOR0UgKHZhbHVlKSwgMCk7CisKKyAgcmV0dXJuIHZhbHVlLT5kYXRhWzBdLnZfaW50OworfQorCisvKioKKyAqIGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heDoKKyAqIEB2YWx1ZTogYSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfSU5UX1JBTkdFCisgKgorICogR2V0cyB0aGUgbWF4aW11bSBvZiB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IEB2YWx1ZS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbWF4dW11bSBvZiB0aGUgcmFuZ2UKKyAqLworZ2ludAorZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWF4IChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19JTlRfUkFOR0UgKHZhbHVlKSwgMCk7CisKKyAgcmV0dXJuIHZhbHVlLT5kYXRhWzFdLnZfaW50OworfQorCitzdGF0aWMgdm9pZAorZ3N0X3ZhbHVlX3RyYW5zZm9ybV9pbnRfcmFuZ2Vfc3RyaW5nIChjb25zdCBHVmFsdWUgKiBzcmNfdmFsdWUsCisgICAgR1ZhbHVlICogZGVzdF92YWx1ZSkKK3sKKyAgZGVzdF92YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIgPSBnX3N0cmR1cF9wcmludGYgKCJbJWQsJWRdIiwKKyAgICAgIChpbnQpIHNyY192YWx1ZS0+ZGF0YVswXS52X2ludCwgKGludCkgc3JjX3ZhbHVlLT5kYXRhWzFdLnZfaW50KTsKK30KKworc3RhdGljIGdpbnQKK2dzdF92YWx1ZV9jb21wYXJlX2ludF9yYW5nZSAoY29uc3QgR1ZhbHVlICogdmFsdWUxLCBjb25zdCBHVmFsdWUgKiB2YWx1ZTIpCit7CisgIGlmICh2YWx1ZTItPmRhdGFbMF0udl9pbnQgPT0gdmFsdWUxLT5kYXRhWzBdLnZfaW50ICYmCisgICAgICB2YWx1ZTItPmRhdGFbMV0udl9pbnQgPT0gdmFsdWUxLT5kYXRhWzFdLnZfaW50KQorICAgIHJldHVybiBHU1RfVkFMVUVfRVFVQUw7CisgIHJldHVybiBHU1RfVkFMVUVfVU5PUkRFUkVEOworfQorCitzdGF0aWMgZ2NoYXIgKgorZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9pbnRfcmFuZ2UgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQoreworICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgiWyAlZCwgJWQgXSIsIHZhbHVlLT5kYXRhWzBdLnZfaW50LAorICAgICAgdmFsdWUtPmRhdGFbMV0udl9pbnQpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF92YWx1ZV9kZXNlcmlhbGl6ZV9pbnRfcmFuZ2UgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IGdjaGFyICogcykKK3sKKyAgZ193YXJuaW5nICgidW5pbXBsZW1lbnRlZCIpOworICByZXR1cm4gRkFMU0U7Cit9CisKKy8qKioqKioqKioqKioqKioKKyAqIGludDY0IHJhbmdlICoKKyAqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkCitnc3RfdmFsdWVfaW5pdF9pbnQ2NF9yYW5nZSAoR1ZhbHVlICogdmFsdWUpCit7CisgIHZhbHVlLT5kYXRhWzBdLnZfaW50NjQgPSAwOworICB2YWx1ZS0+ZGF0YVsxXS52X2ludDY0ID0gMDsKK30KKworc3RhdGljIHZvaWQKK2dzdF92YWx1ZV9jb3B5X2ludDY0X3JhbmdlIChjb25zdCBHVmFsdWUgKiBzcmNfdmFsdWUsIEdWYWx1ZSAqIGRlc3RfdmFsdWUpCit7CisgIGRlc3RfdmFsdWUtPmRhdGFbMF0udl9pbnQ2NCA9IHNyY192YWx1ZS0+ZGF0YVswXS52X2ludDY0OworICBkZXN0X3ZhbHVlLT5kYXRhWzFdLnZfaW50NjQgPSBzcmNfdmFsdWUtPmRhdGFbMV0udl9pbnQ2NDsKK30KKworc3RhdGljIGdjaGFyICoKK2dzdF92YWx1ZV9jb2xsZWN0X2ludDY0X3JhbmdlIChHVmFsdWUgKiB2YWx1ZSwgZ3VpbnQgbl9jb2xsZWN0X3ZhbHVlcywKKyAgICBHVHlwZUNWYWx1ZSAqIGNvbGxlY3RfdmFsdWVzLCBndWludCBjb2xsZWN0X2ZsYWdzKQoreworICBpZiAobl9jb2xsZWN0X3ZhbHVlcyAhPSAyKQorICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJub3QgZW5vdWdoIHZhbHVlIGxvY2F0aW9ucyBmb3IgYCVzJyBwYXNzZWQiLAorICAgICAgICBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsdWUpKTsKKyAgaWYgKGNvbGxlY3RfdmFsdWVzWzBdLnZfaW50NjQgPj0gY29sbGVjdF92YWx1ZXNbMV0udl9pbnQ2NCkKKyAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgicmFuZ2Ugc3RhcnQgaXMgbm90IHNtYWxsZXIgdGhhbiBlbmQgZm9yIGAlcyciLAorICAgICAgICBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsdWUpKTsKKworICB2YWx1ZS0+ZGF0YVswXS52X2ludDY0ID0gY29sbGVjdF92YWx1ZXNbMF0udl9pbnQ2NDsKKyAgdmFsdWUtPmRhdGFbMV0udl9pbnQ2NCA9IGNvbGxlY3RfdmFsdWVzWzFdLnZfaW50NjQ7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBnY2hhciAqCitnc3RfdmFsdWVfbGNvcHlfaW50NjRfcmFuZ2UgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBndWludCBuX2NvbGxlY3RfdmFsdWVzLAorICAgIEdUeXBlQ1ZhbHVlICogY29sbGVjdF92YWx1ZXMsIGd1aW50IGNvbGxlY3RfZmxhZ3MpCit7CisgIGd1aW50NjQgKmludF9yYW5nZV9zdGFydCA9IGNvbGxlY3RfdmFsdWVzWzBdLnZfcG9pbnRlcjsKKyAgZ3VpbnQ2NCAqaW50X3JhbmdlX2VuZCA9IGNvbGxlY3RfdmFsdWVzWzFdLnZfcG9pbnRlcjsKKworICBpZiAoIWludF9yYW5nZV9zdGFydCkKKyAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgic3RhcnQgdmFsdWUgbG9jYXRpb24gZm9yIGAlcycgcGFzc2VkIGFzIE5VTEwiLAorICAgICAgICBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsdWUpKTsKKyAgaWYgKCFpbnRfcmFuZ2VfZW5kKQorICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJlbmQgdmFsdWUgbG9jYXRpb24gZm9yIGAlcycgcGFzc2VkIGFzIE5VTEwiLAorICAgICAgICBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsdWUpKTsKKworICAqaW50X3JhbmdlX3N0YXJ0ID0gdmFsdWUtPmRhdGFbMF0udl9pbnQ2NDsKKyAgKmludF9yYW5nZV9lbmQgPSB2YWx1ZS0+ZGF0YVsxXS52X2ludDY0OworCisgIHJldHVybiBOVUxMOworfQorCisvKioKKyAqIGdzdF92YWx1ZV9zZXRfaW50NjRfcmFuZ2U6CisgKiBAdmFsdWU6IGEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX0lOVDY0X1JBTkdFCisgKiBAc3RhcnQ6IHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UKKyAqIEBlbmQ6IHRoZSBlbmQgb2YgdGhlIHJhbmdlCisgKgorICogU2V0cyBAdmFsdWUgdG8gdGhlIHJhbmdlIHNwZWNpZmllZCBieSBAc3RhcnQgYW5kIEBlbmQuCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLwordm9pZAorZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZSAoR1ZhbHVlICogdmFsdWUsIGdpbnQ2NCBzdGFydCwgZ2ludDY0IGVuZCkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0lOVDY0X1JBTkdFICh2YWx1ZSkpOworICBnX3JldHVybl9pZl9mYWlsIChzdGFydCA8IGVuZCk7CisKKyAgdmFsdWUtPmRhdGFbMF0udl9pbnQ2NCA9IHN0YXJ0OworICB2YWx1ZS0+ZGF0YVsxXS52X2ludDY0ID0gZW5kOworfQorCisvKioKKyAqIGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWluOgorICogQHZhbHVlOiBhIEdWYWx1ZSBpbml0aWFsaXplZCB0byBHU1RfVFlQRV9JTlQ2NF9SQU5HRQorICoKKyAqIEdldHMgdGhlIG1pbmltdW0gb2YgdGhlIHJhbmdlIHNwZWNpZmllZCBieSBAdmFsdWUuCisgKgorICogUmV0dXJuczogdGhlIG1pbmltdW0gb2YgdGhlIHJhbmdlCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLworZ2ludDY0Citnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21pbiAoY29uc3QgR1ZhbHVlICogdmFsdWUpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfVkFMVUVfSE9MRFNfSU5UNjRfUkFOR0UgKHZhbHVlKSwgMCk7CisKKyAgcmV0dXJuIHZhbHVlLT5kYXRhWzBdLnZfaW50NjQ7Cit9CisKKy8qKgorICogZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9tYXg6CisgKiBAdmFsdWU6IGEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX0lOVDY0X1JBTkdFCisgKgorICogR2V0cyB0aGUgbWF4aW11bSBvZiB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IEB2YWx1ZS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbWF4dW11bSBvZiB0aGUgcmFuZ2UKKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCitnaW50NjQKK2dzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWF4IChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19JTlQ2NF9SQU5HRSAodmFsdWUpLCAwKTsKKworICByZXR1cm4gdmFsdWUtPmRhdGFbMV0udl9pbnQ2NDsKK30KKworc3RhdGljIHZvaWQKK2dzdF92YWx1ZV90cmFuc2Zvcm1faW50NjRfcmFuZ2Vfc3RyaW5nIChjb25zdCBHVmFsdWUgKiBzcmNfdmFsdWUsCisgICAgR1ZhbHVlICogZGVzdF92YWx1ZSkKK3sKKyAgZGVzdF92YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIgPQorICAgICAgZ19zdHJkdXBfcHJpbnRmICgiKGdpbnQ2NClbJSIgR19HSU5UNjRfRk9STUFUICIsJSIgR19HSU5UNjRfRk9STUFUICJdIiwKKyAgICAgIHNyY192YWx1ZS0+ZGF0YVswXS52X2ludDY0LCBzcmNfdmFsdWUtPmRhdGFbMV0udl9pbnQ2NCk7Cit9CisKK3N0YXRpYyBnaW50Citnc3RfdmFsdWVfY29tcGFyZV9pbnQ2NF9yYW5nZSAoY29uc3QgR1ZhbHVlICogdmFsdWUxLCBjb25zdCBHVmFsdWUgKiB2YWx1ZTIpCit7CisgIGlmICh2YWx1ZTItPmRhdGFbMF0udl9pbnQ2NCA9PSB2YWx1ZTEtPmRhdGFbMF0udl9pbnQ2NCAmJgorICAgICAgdmFsdWUyLT5kYXRhWzFdLnZfaW50NjQgPT0gdmFsdWUxLT5kYXRhWzFdLnZfaW50NjQpCisgICAgcmV0dXJuIEdTVF9WQUxVRV9FUVVBTDsKKyAgcmV0dXJuIEdTVF9WQUxVRV9VTk9SREVSRUQ7Cit9CisKK3N0YXRpYyBnY2hhciAqCitnc3RfdmFsdWVfc2VyaWFsaXplX2ludDY0X3JhbmdlIChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKK3sKKyAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoIlsgJSIgR19HSU5UNjRfRk9STUFUICIsICUiIEdfR0lOVDY0X0ZPUk1BVCAiIF0iLAorICAgICAgdmFsdWUtPmRhdGFbMF0udl9pbnQ2NCwgdmFsdWUtPmRhdGFbMV0udl9pbnQ2NCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2ludDY0X3JhbmdlIChHVmFsdWUgKiBkZXN0LCBjb25zdCBnY2hhciAqIHMpCit7CisgIGdfd2FybmluZyAoInVuaW1wbGVtZW50ZWQiKTsKKyAgcmV0dXJuIEZBTFNFOworfQorCisvKioqKioqKioqKioqKioqKgorICogZG91YmxlIHJhbmdlICoKKyAqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZAorZ3N0X3ZhbHVlX2luaXRfZG91YmxlX3JhbmdlIChHVmFsdWUgKiB2YWx1ZSkKK3sKKyAgdmFsdWUtPmRhdGFbMF0udl9kb3VibGUgPSAwOworICB2YWx1ZS0+ZGF0YVsxXS52X2RvdWJsZSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfdmFsdWVfY29weV9kb3VibGVfcmFuZ2UgKGNvbnN0IEdWYWx1ZSAqIHNyY192YWx1ZSwgR1ZhbHVlICogZGVzdF92YWx1ZSkKK3sKKyAgZGVzdF92YWx1ZS0+ZGF0YVswXS52X2RvdWJsZSA9IHNyY192YWx1ZS0+ZGF0YVswXS52X2RvdWJsZTsKKyAgZGVzdF92YWx1ZS0+ZGF0YVsxXS52X2RvdWJsZSA9IHNyY192YWx1ZS0+ZGF0YVsxXS52X2RvdWJsZTsKK30KKworc3RhdGljIGdjaGFyICoKK2dzdF92YWx1ZV9jb2xsZWN0X2RvdWJsZV9yYW5nZSAoR1ZhbHVlICogdmFsdWUsIGd1aW50IG5fY29sbGVjdF92YWx1ZXMsCisgICAgR1R5cGVDVmFsdWUgKiBjb2xsZWN0X3ZhbHVlcywgZ3VpbnQgY29sbGVjdF9mbGFncykKK3sKKyAgaWYgKG5fY29sbGVjdF92YWx1ZXMgIT0gMikKKyAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgibm90IGVub3VnaCB2YWx1ZSBsb2NhdGlvbnMgZm9yIGAlcycgcGFzc2VkIiwKKyAgICAgICAgR19WQUxVRV9UWVBFX05BTUUgKHZhbHVlKSk7CisgIGlmIChjb2xsZWN0X3ZhbHVlc1swXS52X2RvdWJsZSA+PSBjb2xsZWN0X3ZhbHVlc1sxXS52X2RvdWJsZSkKKyAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgicmFuZ2Ugc3RhcnQgaXMgbm90IHNtYWxsZXIgdGhhbiBlbmQgZm9yIGAlcyciLAorICAgICAgICBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsdWUpKTsKKworICB2YWx1ZS0+ZGF0YVswXS52X2RvdWJsZSA9IGNvbGxlY3RfdmFsdWVzWzBdLnZfZG91YmxlOworICB2YWx1ZS0+ZGF0YVsxXS52X2RvdWJsZSA9IGNvbGxlY3RfdmFsdWVzWzFdLnZfZG91YmxlOworCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgZ2NoYXIgKgorZ3N0X3ZhbHVlX2xjb3B5X2RvdWJsZV9yYW5nZSAoY29uc3QgR1ZhbHVlICogdmFsdWUsIGd1aW50IG5fY29sbGVjdF92YWx1ZXMsCisgICAgR1R5cGVDVmFsdWUgKiBjb2xsZWN0X3ZhbHVlcywgZ3VpbnQgY29sbGVjdF9mbGFncykKK3sKKyAgZ2RvdWJsZSAqZG91YmxlX3JhbmdlX3N0YXJ0ID0gY29sbGVjdF92YWx1ZXNbMF0udl9wb2ludGVyOworICBnZG91YmxlICpkb3VibGVfcmFuZ2VfZW5kID0gY29sbGVjdF92YWx1ZXNbMV0udl9wb2ludGVyOworCisgIGlmICghZG91YmxlX3JhbmdlX3N0YXJ0KQorICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJzdGFydCB2YWx1ZSBsb2NhdGlvbiBmb3IgYCVzJyBwYXNzZWQgYXMgTlVMTCIsCisgICAgICAgIEdfVkFMVUVfVFlQRV9OQU1FICh2YWx1ZSkpOworICBpZiAoIWRvdWJsZV9yYW5nZV9lbmQpCisgICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoImVuZCB2YWx1ZSBsb2NhdGlvbiBmb3IgYCVzJyBwYXNzZWQgYXMgTlVMTCIsCisgICAgICAgIEdfVkFMVUVfVFlQRV9OQU1FICh2YWx1ZSkpOworCisgICpkb3VibGVfcmFuZ2Vfc3RhcnQgPSB2YWx1ZS0+ZGF0YVswXS52X2RvdWJsZTsKKyAgKmRvdWJsZV9yYW5nZV9lbmQgPSB2YWx1ZS0+ZGF0YVsxXS52X2RvdWJsZTsKKworICByZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBnc3RfdmFsdWVfc2V0X2RvdWJsZV9yYW5nZToKKyAqIEB2YWx1ZTogYSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfRE9VQkxFX1JBTkdFCisgKiBAc3RhcnQ6IHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UKKyAqIEBlbmQ6IHRoZSBlbmQgb2YgdGhlIHJhbmdlCisgKgorICogU2V0cyBAdmFsdWUgdG8gdGhlIHJhbmdlIHNwZWNpZmllZCBieSBAc3RhcnQgYW5kIEBlbmQuCisgKi8KK3ZvaWQKK2dzdF92YWx1ZV9zZXRfZG91YmxlX3JhbmdlIChHVmFsdWUgKiB2YWx1ZSwgZ2RvdWJsZSBzdGFydCwgZ2RvdWJsZSBlbmQpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19ET1VCTEVfUkFOR0UgKHZhbHVlKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKHN0YXJ0IDwgZW5kKTsKKworICB2YWx1ZS0+ZGF0YVswXS52X2RvdWJsZSA9IHN0YXJ0OworICB2YWx1ZS0+ZGF0YVsxXS52X2RvdWJsZSA9IGVuZDsKK30KKworLyoqCisgKiBnc3RfdmFsdWVfZ2V0X2RvdWJsZV9yYW5nZV9taW46CisgKiBAdmFsdWU6IGEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX0RPVUJMRV9SQU5HRQorICoKKyAqIEdldHMgdGhlIG1pbmltdW0gb2YgdGhlIHJhbmdlIHNwZWNpZmllZCBieSBAdmFsdWUuCisgKgorICogUmV0dXJuczogdGhlIG1pbmltdW0gb2YgdGhlIHJhbmdlCisgKi8KK2dkb3VibGUKK2dzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21pbiAoY29uc3QgR1ZhbHVlICogdmFsdWUpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfVkFMVUVfSE9MRFNfRE9VQkxFX1JBTkdFICh2YWx1ZSksIDApOworCisgIHJldHVybiB2YWx1ZS0+ZGF0YVswXS52X2RvdWJsZTsKK30KKworLyoqCisgKiBnc3RfdmFsdWVfZ2V0X2RvdWJsZV9yYW5nZV9tYXg6CisgKiBAdmFsdWU6IGEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX0RPVUJMRV9SQU5HRQorICoKKyAqIEdldHMgdGhlIG1heGltdW0gb2YgdGhlIHJhbmdlIHNwZWNpZmllZCBieSBAdmFsdWUuCisgKgorICogUmV0dXJuczogdGhlIG1heHVtdW0gb2YgdGhlIHJhbmdlCisgKi8KK2dkb3VibGUKK2dzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21heCAoY29uc3QgR1ZhbHVlICogdmFsdWUpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfVkFMVUVfSE9MRFNfRE9VQkxFX1JBTkdFICh2YWx1ZSksIDApOworCisgIHJldHVybiB2YWx1ZS0+ZGF0YVsxXS52X2RvdWJsZTsKK30KKworc3RhdGljIHZvaWQKK2dzdF92YWx1ZV90cmFuc2Zvcm1fZG91YmxlX3JhbmdlX3N0cmluZyAoY29uc3QgR1ZhbHVlICogc3JjX3ZhbHVlLAorICAgIEdWYWx1ZSAqIGRlc3RfdmFsdWUpCit7CisgIGdjaGFyIHMxW0dfQVNDSUlfRFRPU1RSX0JVRl9TSVpFXSwgczJbR19BU0NJSV9EVE9TVFJfQlVGX1NJWkVdOworCisgIGRlc3RfdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyID0gZ19zdHJkdXBfcHJpbnRmICgiWyVzLCVzXSIsCisgICAgICBnX2FzY2lpX2R0b3N0ciAoczEsIEdfQVNDSUlfRFRPU1RSX0JVRl9TSVpFLAorICAgICAgICAgIHNyY192YWx1ZS0+ZGF0YVswXS52X2RvdWJsZSksCisgICAgICBnX2FzY2lpX2R0b3N0ciAoczIsIEdfQVNDSUlfRFRPU1RSX0JVRl9TSVpFLAorICAgICAgICAgIHNyY192YWx1ZS0+ZGF0YVsxXS52X2RvdWJsZSkpOworfQorCitzdGF0aWMgZ2ludAorZ3N0X3ZhbHVlX2NvbXBhcmVfZG91YmxlX3JhbmdlIChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKK3sKKyAgaWYgKHZhbHVlMi0+ZGF0YVswXS52X2RvdWJsZSA9PSB2YWx1ZTEtPmRhdGFbMF0udl9kb3VibGUgJiYKKyAgICAgIHZhbHVlMi0+ZGF0YVswXS52X2RvdWJsZSA9PSB2YWx1ZTEtPmRhdGFbMF0udl9kb3VibGUpCisgICAgcmV0dXJuIEdTVF9WQUxVRV9FUVVBTDsKKyAgcmV0dXJuIEdTVF9WQUxVRV9VTk9SREVSRUQ7Cit9CisKK3N0YXRpYyBnY2hhciAqCitnc3RfdmFsdWVfc2VyaWFsaXplX2RvdWJsZV9yYW5nZSAoY29uc3QgR1ZhbHVlICogdmFsdWUpCit7CisgIGdjaGFyIGQxW0dfQVNDSUlfRFRPU1RSX0JVRl9TSVpFXTsKKyAgZ2NoYXIgZDJbR19BU0NJSV9EVE9TVFJfQlVGX1NJWkVdOworCisgIGdfYXNjaWlfZHRvc3RyIChkMSwgR19BU0NJSV9EVE9TVFJfQlVGX1NJWkUsIHZhbHVlLT5kYXRhWzBdLnZfZG91YmxlKTsKKyAgZ19hc2NpaV9kdG9zdHIgKGQyLCBHX0FTQ0lJX0RUT1NUUl9CVUZfU0laRSwgdmFsdWUtPmRhdGFbMV0udl9kb3VibGUpOworICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgiWyAlcywgJXMgXSIsIGQxLCBkMik7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2RvdWJsZV9yYW5nZSAoR1ZhbHVlICogZGVzdCwgY29uc3QgZ2NoYXIgKiBzKQoreworICBnX3dhcm5pbmcgKCJ1bmltcGxlbWVudGVkIik7CisgIHJldHVybiBGQUxTRTsKK30KKworLyoqKioqKioqKioqKioqKioKKyAqIGZyYWN0aW9uIHJhbmdlICoKKyAqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZAorZ3N0X3ZhbHVlX2luaXRfZnJhY3Rpb25fcmFuZ2UgKEdWYWx1ZSAqIHZhbHVlKQoreworICBHVmFsdWUgKnZhbHM7CisgIEdUeXBlIGZ0eXBlOworCisgIGZ0eXBlID0gR1NUX1RZUEVfRlJBQ1RJT047CisKKyAgdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyID0gdmFscyA9IGdfc2xpY2VfYWxsb2MwICgyICogc2l6ZW9mIChHVmFsdWUpKTsKKyAgZ192YWx1ZV9pbml0ICgmdmFsc1swXSwgZnR5cGUpOworICBnX3ZhbHVlX2luaXQgKCZ2YWxzWzFdLCBmdHlwZSk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfdmFsdWVfZnJlZV9mcmFjdGlvbl9yYW5nZSAoR1ZhbHVlICogdmFsdWUpCit7CisgIEdWYWx1ZSAqdmFscyA9IChHVmFsdWUgKikgdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyOworCisgIGlmICh2YWxzICE9IE5VTEwpIHsKKyAgICBnX3ZhbHVlX3Vuc2V0ICgmdmFsc1swXSk7CisgICAgZ192YWx1ZV91bnNldCAoJnZhbHNbMV0pOworICAgIGdfc2xpY2VfZnJlZTEgKDIgKiBzaXplb2YgKEdWYWx1ZSksIHZhbHMpOworICAgIHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlciA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF92YWx1ZV9jb3B5X2ZyYWN0aW9uX3JhbmdlIChjb25zdCBHVmFsdWUgKiBzcmNfdmFsdWUsIEdWYWx1ZSAqIGRlc3RfdmFsdWUpCit7CisgIEdWYWx1ZSAqdmFscyA9IChHVmFsdWUgKikgZGVzdF92YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXI7CisgIEdWYWx1ZSAqc3JjX3ZhbHMgPSAoR1ZhbHVlICopIHNyY192YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXI7CisKKyAgaWYgKHZhbHMgPT0gTlVMTCkgeworICAgIGdzdF92YWx1ZV9pbml0X2ZyYWN0aW9uX3JhbmdlIChkZXN0X3ZhbHVlKTsKKyAgICB2YWxzID0gZGVzdF92YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXI7CisgIH0KKyAgaWYgKHNyY192YWxzICE9IE5VTEwpIHsKKyAgICBnX3ZhbHVlX2NvcHkgKCZzcmNfdmFsc1swXSwgJnZhbHNbMF0pOworICAgIGdfdmFsdWVfY29weSAoJnNyY192YWxzWzFdLCAmdmFsc1sxXSk7CisgIH0KK30KKworc3RhdGljIGdjaGFyICoKK2dzdF92YWx1ZV9jb2xsZWN0X2ZyYWN0aW9uX3JhbmdlIChHVmFsdWUgKiB2YWx1ZSwgZ3VpbnQgbl9jb2xsZWN0X3ZhbHVlcywKKyAgICBHVHlwZUNWYWx1ZSAqIGNvbGxlY3RfdmFsdWVzLCBndWludCBjb2xsZWN0X2ZsYWdzKQoreworICBHVmFsdWUgKnZhbHMgPSAoR1ZhbHVlICopIHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcjsKKworICBpZiAobl9jb2xsZWN0X3ZhbHVlcyAhPSA0KQorICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJub3QgZW5vdWdoIHZhbHVlIGxvY2F0aW9ucyBmb3IgYCVzJyBwYXNzZWQiLAorICAgICAgICBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsdWUpKTsKKyAgaWYgKGNvbGxlY3RfdmFsdWVzWzFdLnZfaW50ID09IDApCisgICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoInBhc3NlZCAnMCcgYXMgZmlyc3QgZGVub21pbmF0b3IgZm9yIGAlcyciLAorICAgICAgICBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsdWUpKTsKKyAgaWYgKGNvbGxlY3RfdmFsdWVzWzNdLnZfaW50ID09IDApCisgICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoInBhc3NlZCAnMCcgYXMgc2Vjb25kIGRlbm9taW5hdG9yIGZvciBgJXMnIiwKKyAgICAgICAgR19WQUxVRV9UWVBFX05BTUUgKHZhbHVlKSk7CisgIGlmIChnc3RfdXRpbF9mcmFjdGlvbl9jb21wYXJlIChjb2xsZWN0X3ZhbHVlc1swXS52X2ludCwKKyAgICAgICAgICBjb2xsZWN0X3ZhbHVlc1sxXS52X2ludCwgY29sbGVjdF92YWx1ZXNbMl0udl9pbnQsCisgICAgICAgICAgY29sbGVjdF92YWx1ZXNbM10udl9pbnQpID49IDApCisgICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoInJhbmdlIHN0YXJ0IGlzIG5vdCBzbWFsbGVyIHRoYW4gZW5kIGZvciBgJXMnIiwKKyAgICAgICAgR19WQUxVRV9UWVBFX05BTUUgKHZhbHVlKSk7CisKKyAgaWYgKHZhbHMgPT0gTlVMTCkgeworICAgIGdzdF92YWx1ZV9pbml0X2ZyYWN0aW9uX3JhbmdlICh2YWx1ZSk7CisgICAgdmFscyA9IHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcjsKKyAgfQorCisgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZ2YWxzWzBdLCBjb2xsZWN0X3ZhbHVlc1swXS52X2ludCwKKyAgICAgIGNvbGxlY3RfdmFsdWVzWzFdLnZfaW50KTsKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJnZhbHNbMV0sIGNvbGxlY3RfdmFsdWVzWzJdLnZfaW50LAorICAgICAgY29sbGVjdF92YWx1ZXNbM10udl9pbnQpOworCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgZ2NoYXIgKgorZ3N0X3ZhbHVlX2xjb3B5X2ZyYWN0aW9uX3JhbmdlIChjb25zdCBHVmFsdWUgKiB2YWx1ZSwgZ3VpbnQgbl9jb2xsZWN0X3ZhbHVlcywKKyAgICBHVHlwZUNWYWx1ZSAqIGNvbGxlY3RfdmFsdWVzLCBndWludCBjb2xsZWN0X2ZsYWdzKQoreworICBnaW50IGk7CisgIGdpbnQgKmRlc3RfdmFsdWVzWzRdOworICBHVmFsdWUgKnZhbHMgPSAoR1ZhbHVlICopIHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcjsKKworICBpZiAoR19VTkxJS0VMWSAobl9jb2xsZWN0X3ZhbHVlcyAhPSA0KSkKKyAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgibm90IGVub3VnaCB2YWx1ZSBsb2NhdGlvbnMgZm9yIGAlcycgcGFzc2VkIiwKKyAgICAgICAgR19WQUxVRV9UWVBFX05BTUUgKHZhbHVlKSk7CisKKyAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworICAgIGlmIChHX1VOTElLRUxZIChjb2xsZWN0X3ZhbHVlc1tpXS52X3BvaW50ZXIgPT0gTlVMTCkpIHsKKyAgICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJ2YWx1ZSBsb2NhdGlvbiBmb3IgYCVzJyBwYXNzZWQgYXMgTlVMTCIsCisgICAgICAgICAgR19WQUxVRV9UWVBFX05BTUUgKHZhbHVlKSk7CisgICAgfQorICAgIGRlc3RfdmFsdWVzW2ldID0gY29sbGVjdF92YWx1ZXNbaV0udl9wb2ludGVyOworICB9CisKKyAgaWYgKEdfVU5MSUtFTFkgKHZhbHMgPT0gTlVMTCkpIHsKKyAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgiVW5pbml0aWFsaXNlZCBgJXMnIHBhc3NlZCIsCisgICAgICAgIEdfVkFMVUVfVFlQRV9OQU1FICh2YWx1ZSkpOworICB9CisKKyAgZGVzdF92YWx1ZXNbMF1bMF0gPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvciAoJnZhbHNbMF0pOworICBkZXN0X3ZhbHVlc1sxXVswXSA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3IgKCZ2YWxzWzBdKTsKKyAgZGVzdF92YWx1ZXNbMl1bMF0gPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvciAoJnZhbHNbMV0pOworICBkZXN0X3ZhbHVlc1szXVswXSA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3IgKCZ2YWxzWzFdKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZToKKyAqIEB2YWx1ZTogYSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UKKyAqIEBzdGFydDogdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSAoYSBHU1RfVFlQRV9GUkFDVElPTiBHVmFsdWUpCisgKiBAZW5kOiB0aGUgZW5kIG9mIHRoZSByYW5nZSAoYSBHU1RfVFlQRV9GUkFDVElPTiBHVmFsdWUpCisgKgorICogU2V0cyBAdmFsdWUgdG8gdGhlIHJhbmdlIHNwZWNpZmllZCBieSBAc3RhcnQgYW5kIEBlbmQuCisgKi8KK3ZvaWQKK2dzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2UgKEdWYWx1ZSAqIHZhbHVlLCBjb25zdCBHVmFsdWUgKiBzdGFydCwKKyAgICBjb25zdCBHVmFsdWUgKiBlbmQpCit7CisgIEdWYWx1ZSAqdmFsczsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT05fUkFOR0UgKHZhbHVlKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19GUkFDVElPTiAoc3RhcnQpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OIChlbmQpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X3V0aWxfZnJhY3Rpb25fY29tcGFyZSAoc3RhcnQtPmRhdGFbMF0udl9pbnQsCisgICAgICAgICAgc3RhcnQtPmRhdGFbMV0udl9pbnQsIGVuZC0+ZGF0YVswXS52X2ludCwgZW5kLT5kYXRhWzFdLnZfaW50KSA8IDApOworCisgIHZhbHMgPSAoR1ZhbHVlICopIHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcjsKKyAgaWYgKHZhbHMgPT0gTlVMTCkgeworICAgIGdzdF92YWx1ZV9pbml0X2ZyYWN0aW9uX3JhbmdlICh2YWx1ZSk7CisgICAgdmFscyA9IHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcjsKKyAgfQorICBnX3ZhbHVlX2NvcHkgKHN0YXJ0LCAmdmFsc1swXSk7CisgIGdfdmFsdWVfY29weSAoZW5kLCAmdmFsc1sxXSk7Cit9CisKKy8qKgorICogZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZV9mdWxsOgorICogQHZhbHVlOiBhIEdWYWx1ZSBpbml0aWFsaXplZCB0byBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRQorICogQG51bWVyYXRvcl9zdGFydDogdGhlIG51bWVyYXRvciBzdGFydCBvZiB0aGUgcmFuZ2UKKyAqIEBkZW5vbWluYXRvcl9zdGFydDogdGhlIGRlbm9taW5hdG9yIHN0YXJ0IG9mIHRoZSByYW5nZQorICogQG51bWVyYXRvcl9lbmQ6IHRoZSBudW1lcmF0b3IgZW5kIG9mIHRoZSByYW5nZQorICogQGRlbm9taW5hdG9yX2VuZDogdGhlIGRlbm9taW5hdG9yIGVuZCBvZiB0aGUgcmFuZ2UKKyAqCisgKiBTZXRzIEB2YWx1ZSB0byB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IEBudW1lcmF0b3Jfc3RhcnQvQGRlbm9taW5hdG9yX3N0YXJ0CisgKiBhbmQgQG51bWVyYXRvcl9lbmQvQGRlbm9taW5hdG9yX2VuZC4KKyAqLwordm9pZAorZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZV9mdWxsIChHVmFsdWUgKiB2YWx1ZSwKKyAgICBnaW50IG51bWVyYXRvcl9zdGFydCwgZ2ludCBkZW5vbWluYXRvcl9zdGFydCwKKyAgICBnaW50IG51bWVyYXRvcl9lbmQsIGdpbnQgZGVub21pbmF0b3JfZW5kKQoreworICBHVmFsdWUgc3RhcnQgPSB7IDAgfTsKKyAgR1ZhbHVlIGVuZCA9IHsgMCB9OworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKHZhbHVlICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsIChkZW5vbWluYXRvcl9zdGFydCAhPSAwKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoZGVub21pbmF0b3JfZW5kICE9IDApOworICBnX3JldHVybl9pZl9mYWlsIChnc3RfdXRpbF9mcmFjdGlvbl9jb21wYXJlIChudW1lcmF0b3Jfc3RhcnQsCisgICAgICAgICAgZGVub21pbmF0b3Jfc3RhcnQsIG51bWVyYXRvcl9lbmQsIGRlbm9taW5hdG9yX2VuZCkgPCAwKTsKKworICBnX3ZhbHVlX2luaXQgKCZzdGFydCwgR1NUX1RZUEVfRlJBQ1RJT04pOworICBnX3ZhbHVlX2luaXQgKCZlbmQsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKKworICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmc3RhcnQsIG51bWVyYXRvcl9zdGFydCwgZGVub21pbmF0b3Jfc3RhcnQpOworICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmZW5kLCBudW1lcmF0b3JfZW5kLCBkZW5vbWluYXRvcl9lbmQpOworICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlICh2YWx1ZSwgJnN0YXJ0LCAmZW5kKTsKKworICBnX3ZhbHVlX3Vuc2V0ICgmc3RhcnQpOworICBnX3ZhbHVlX3Vuc2V0ICgmZW5kKTsKK30KKworLyoqCisgKiBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21pbjoKKyAqIEB2YWx1ZTogYSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UKKyAqCisgKiBHZXRzIHRoZSBtaW5pbXVtIG9mIHRoZSByYW5nZSBzcGVjaWZpZWQgYnkgQHZhbHVlLgorICoKKyAqIFJldHVybnM6IHRoZSBtaW5pbXVtIG9mIHRoZSByYW5nZQorICovCitjb25zdCBHVmFsdWUgKgorZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9taW4gKGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQoreworICBHVmFsdWUgKnZhbHM7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19GUkFDVElPTl9SQU5HRSAodmFsdWUpLCBOVUxMKTsKKworICB2YWxzID0gKEdWYWx1ZSAqKSB2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXI7CisgIGlmICh2YWxzICE9IE5VTEwpIHsKKyAgICByZXR1cm4gJnZhbHNbMF07CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21heDoKKyAqIEB2YWx1ZTogYSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UKKyAqCisgKiBHZXRzIHRoZSBtYXhpbXVtIG9mIHRoZSByYW5nZSBzcGVjaWZpZWQgYnkgQHZhbHVlLgorICoKKyAqIFJldHVybnM6IHRoZSBtYXhpbXVtIG9mIHRoZSByYW5nZQorICovCitjb25zdCBHVmFsdWUgKgorZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9tYXggKGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQoreworICBHVmFsdWUgKnZhbHM7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19GUkFDVElPTl9SQU5HRSAodmFsdWUpLCBOVUxMKTsKKworICB2YWxzID0gKEdWYWx1ZSAqKSB2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXI7CisgIGlmICh2YWxzICE9IE5VTEwpIHsKKyAgICByZXR1cm4gJnZhbHNbMV07CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGdjaGFyICoKK2dzdF92YWx1ZV9zZXJpYWxpemVfZnJhY3Rpb25fcmFuZ2UgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQoreworICBHVmFsdWUgKnZhbHMgPSAoR1ZhbHVlICopIHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcjsKKyAgZ2NoYXIgKnJldHZhbDsKKworICBpZiAodmFscyA9PSBOVUxMKSB7CisgICAgcmV0dmFsID0gZ19zdHJkdXAgKCJbIDAvMSwgMC8xIF0iKTsKKyAgfSBlbHNlIHsKKyAgICBnY2hhciAqc3RhcnQsICplbmQ7CisKKyAgICBzdGFydCA9IGdzdF92YWx1ZV9zZXJpYWxpemVfZnJhY3Rpb24gKCZ2YWxzWzBdKTsKKyAgICBlbmQgPSBnc3RfdmFsdWVfc2VyaWFsaXplX2ZyYWN0aW9uICgmdmFsc1sxXSk7CisKKyAgICByZXR2YWwgPSBnX3N0cmR1cF9wcmludGYgKCJbICVzLCAlcyBdIiwgc3RhcnQsIGVuZCk7CisgICAgZ19mcmVlIChzdGFydCk7CisgICAgZ19mcmVlIChlbmQpOworICB9CisKKyAgcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQKK2dzdF92YWx1ZV90cmFuc2Zvcm1fZnJhY3Rpb25fcmFuZ2Vfc3RyaW5nIChjb25zdCBHVmFsdWUgKiBzcmNfdmFsdWUsCisgICAgR1ZhbHVlICogZGVzdF92YWx1ZSkKK3sKKyAgZGVzdF92YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIgPQorICAgICAgZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9mcmFjdGlvbl9yYW5nZSAoc3JjX3ZhbHVlKTsKK30KKworc3RhdGljIGdpbnQKK2dzdF92YWx1ZV9jb21wYXJlX2ZyYWN0aW9uX3JhbmdlIChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKK3sKKyAgR1ZhbHVlICp2YWxzMSwgKnZhbHMyOworICBHc3RWYWx1ZUNvbXBhcmVGdW5jIGNvbXBhcmU7CisKKyAgaWYgKHZhbHVlMi0+ZGF0YVswXS52X3BvaW50ZXIgPT0gdmFsdWUxLT5kYXRhWzBdLnZfcG9pbnRlcikKKyAgICByZXR1cm4gR1NUX1ZBTFVFX0VRVUFMOyAgICAgLyogT25seSBwb3NzaWJsZSBpZiBib3RoIGFyZSBOVUxMICovCisKKyAgaWYgKHZhbHVlMi0+ZGF0YVswXS52X3BvaW50ZXIgPT0gTlVMTCB8fCB2YWx1ZTEtPmRhdGFbMF0udl9wb2ludGVyID09IE5VTEwpCisgICAgcmV0dXJuIEdTVF9WQUxVRV9VTk9SREVSRUQ7CisKKyAgdmFsczEgPSAoR1ZhbHVlICopIHZhbHVlMS0+ZGF0YVswXS52X3BvaW50ZXI7CisgIHZhbHMyID0gKEdWYWx1ZSAqKSB2YWx1ZTItPmRhdGFbMF0udl9wb2ludGVyOworICBpZiAoKGNvbXBhcmUgPSBnc3RfdmFsdWVfZ2V0X2NvbXBhcmVfZnVuYyAoJnZhbHMxWzBdKSkpIHsKKyAgICBpZiAoZ3N0X3ZhbHVlX2NvbXBhcmVfd2l0aF9mdW5jICgmdmFsczFbMF0sICZ2YWxzMlswXSwgY29tcGFyZSkgPT0KKyAgICAgICAgR1NUX1ZBTFVFX0VRVUFMICYmCisgICAgICAgIGdzdF92YWx1ZV9jb21wYXJlX3dpdGhfZnVuYyAoJnZhbHMxWzFdLCAmdmFsczJbMV0sIGNvbXBhcmUpID09CisgICAgICAgIEdTVF9WQUxVRV9FUVVBTCkKKyAgICAgIHJldHVybiBHU1RfVkFMVUVfRVFVQUw7CisgIH0KKyAgcmV0dXJuIEdTVF9WQUxVRV9VTk9SREVSRUQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2ZyYWN0aW9uX3JhbmdlIChHVmFsdWUgKiBkZXN0LCBjb25zdCBnY2hhciAqIHMpCit7CisgIGdfd2FybmluZyAoInVuaW1wbGVtZW50ZWQiKTsKKyAgcmV0dXJuIEZBTFNFOworfQorCisvKioqKioqKioqKioKKyAqIEdzdENhcHMgKgorICoqKioqKioqKioqLworCisvKioKKyAqIGdzdF92YWx1ZV9zZXRfY2FwczoKKyAqIEB2YWx1ZTogYSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfQ0FQUworICogQGNhcHM6ICh0cmFuc2ZlciBub25lKTogdGhlIGNhcHMgdG8gc2V0IHRoZSB2YWx1ZSB0bworICoKKyAqIFNldHMgdGhlIGNvbnRlbnRzIG9mIEB2YWx1ZSB0byBAY2Fwcy4gQSByZWZlcmVuY2UgdG8gdGhlCisgKiBwcm92aWRlZCBAY2FwcyB3aWxsIGJlIHRha2VuIGJ5IHRoZSBAdmFsdWUuCisgKi8KK3ZvaWQKK2dzdF92YWx1ZV9zZXRfY2FwcyAoR1ZhbHVlICogdmFsdWUsIGNvbnN0IEdzdENhcHMgKiBjYXBzKQoreworICBnX3JldHVybl9pZl9mYWlsIChHX0lTX1ZBTFVFICh2YWx1ZSkpOworICBnX3JldHVybl9pZl9mYWlsIChHX1ZBTFVFX1RZUEUgKHZhbHVlKSA9PSBHU1RfVFlQRV9DQVBTKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoY2FwcyA9PSBOVUxMIHx8IEdTVF9JU19DQVBTIChjYXBzKSk7CisKKyAgZ192YWx1ZV9zZXRfYm94ZWQgKHZhbHVlLCBjYXBzKTsKK30KKworLyoqCisgKiBnc3RfdmFsdWVfZ2V0X2NhcHM6CisgKiBAdmFsdWU6IGEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX0NBUFMKKyAqCisgKiBHZXRzIHRoZSBjb250ZW50cyBvZiBAdmFsdWUuIFRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIHJldHVybmVkCisgKiAjR3N0Q2FwcyB3aWxsIG5vdCBiZSBtb2RpZmllZCwgdGhlcmVmb3JlIHRoZSBjYWxsZXIgbXVzdCB0YWtlIG9uZQorICogYmVmb3JlIGdldHRpbmcgcmlkIG9mIHRoZSBAdmFsdWUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgY29udGVudHMgb2YgQHZhbHVlCisgKi8KK2NvbnN0IEdzdENhcHMgKgorZ3N0X3ZhbHVlX2dldF9jYXBzIChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHZhbHVlKSwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX1ZBTFVFX1RZUEUgKHZhbHVlKSA9PSBHU1RfVFlQRV9DQVBTLCBOVUxMKTsKKworICByZXR1cm4gKEdzdENhcHMgKikgZ192YWx1ZV9nZXRfYm94ZWQgKHZhbHVlKTsKK30KKworc3RhdGljIGdjaGFyICoKK2dzdF92YWx1ZV9zZXJpYWxpemVfY2FwcyAoY29uc3QgR1ZhbHVlICogdmFsdWUpCit7CisgIEdzdENhcHMgKmNhcHMgPSBnX3ZhbHVlX2dldF9ib3hlZCAodmFsdWUpOworCisgIHJldHVybiBnc3RfY2Fwc190b19zdHJpbmcgKGNhcHMpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF92YWx1ZV9kZXNlcmlhbGl6ZV9jYXBzIChHVmFsdWUgKiBkZXN0LCBjb25zdCBnY2hhciAqIHMpCit7CisgIEdzdENhcHMgKmNhcHM7CisKKyAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChzKTsKKworICBpZiAoY2FwcykgeworICAgIGdfdmFsdWVfdGFrZV9ib3hlZCAoZGVzdCwgY2Fwcyk7CisgICAgcmV0dXJuIFRSVUU7CisgIH0KKyAgcmV0dXJuIEZBTFNFOworfQorCisvKioqKioqKioqKioqKioqKgorICogR3N0U3RydWN0dXJlICoKKyAqKioqKioqKioqKioqKioqLworCisvKioKKyAqIGdzdF92YWx1ZV9zZXRfc3RydWN0dXJlOgorICogQHZhbHVlOiBhIEdWYWx1ZSBpbml0aWFsaXplZCB0byBHU1RfVFlQRV9TVFJVQ1RVUkUKKyAqIEBzdHJ1Y3R1cmU6IHRoZSBzdHJ1Y3R1cmUgdG8gc2V0IHRoZSB2YWx1ZSB0bworICoKKyAqIFNldHMgdGhlIGNvbnRlbnRzIG9mIEB2YWx1ZSB0byBAc3RydWN0dXJlLiAgVGhlIGFjdHVhbAorICoKKyAqIFNpbmNlOiAwLjEwLjE1CisgKi8KK3ZvaWQKK2dzdF92YWx1ZV9zZXRfc3RydWN0dXJlIChHVmFsdWUgKiB2YWx1ZSwgY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlKQoreworICBnX3JldHVybl9pZl9mYWlsIChHX0lTX1ZBTFVFICh2YWx1ZSkpOworICBnX3JldHVybl9pZl9mYWlsIChHX1ZBTFVFX1RZUEUgKHZhbHVlKSA9PSBHU1RfVFlQRV9TVFJVQ1RVUkUpOworICBnX3JldHVybl9pZl9mYWlsIChzdHJ1Y3R1cmUgPT0gTlVMTCB8fCBHU1RfSVNfU1RSVUNUVVJFIChzdHJ1Y3R1cmUpKTsKKworICBnX3ZhbHVlX3NldF9ib3hlZCAodmFsdWUsIHN0cnVjdHVyZSk7Cit9CisKKy8qKgorICogZ3N0X3ZhbHVlX2dldF9zdHJ1Y3R1cmU6CisgKiBAdmFsdWU6IGEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX1NUUlVDVFVSRQorICoKKyAqIEdldHMgdGhlIGNvbnRlbnRzIG9mIEB2YWx1ZS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBjb250ZW50cyBvZiBAdmFsdWUKKyAqCisgKiBTaW5jZTogMC4xMC4xNQorICovCitjb25zdCBHc3RTdHJ1Y3R1cmUgKgorZ3N0X3ZhbHVlX2dldF9zdHJ1Y3R1cmUgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19WQUxVRSAodmFsdWUpLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfVkFMVUVfVFlQRSAodmFsdWUpID09IEdTVF9UWVBFX1NUUlVDVFVSRSwgTlVMTCk7CisKKyAgcmV0dXJuIChHc3RTdHJ1Y3R1cmUgKikgZ192YWx1ZV9nZXRfYm94ZWQgKHZhbHVlKTsKK30KKworc3RhdGljIGdjaGFyICoKK2dzdF92YWx1ZV9zZXJpYWxpemVfc3RydWN0dXJlIChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKK3sKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmUgPSBnX3ZhbHVlX2dldF9ib3hlZCAodmFsdWUpOworCisgIHJldHVybiBnc3Rfc3RyaW5nX3Rha2VfYW5kX3dyYXAgKGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChzdHJ1Y3R1cmUpKTsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfdmFsdWVfZGVzZXJpYWxpemVfc3RydWN0dXJlIChHVmFsdWUgKiBkZXN0LCBjb25zdCBnY2hhciAqIHMpCit7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGlmICgqcyAhPSAnIicpIHsKKyAgICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChzLCBOVUxMKTsKKyAgfSBlbHNlIHsKKyAgICBnY2hhciAqc3RyID0gZ3N0X3N0cmluZ191bndyYXAgKHMpOworCisgICAgaWYgKEdfVU5MSUtFTFkgKCFzdHIpKQorICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAoc3RyLCBOVUxMKTsKKyAgICBnX2ZyZWUgKHN0cik7CisgIH0KKworICBpZiAoR19MSUtFTFkgKHN0cnVjdHVyZSkpIHsKKyAgICBnX3ZhbHVlX3Rha2VfYm94ZWQgKGRlc3QsIHN0cnVjdHVyZSk7CisgICAgcmV0dXJuIFRSVUU7CisgIH0KKyAgcmV0dXJuIEZBTFNFOworfQorCisvKioqKioqKioqKioqKgorICogR3N0QnVmZmVyICoKKyAqKioqKioqKioqKioqLworCitzdGF0aWMgZ2ludAorZ3N0X3ZhbHVlX2NvbXBhcmVfYnVmZmVyIChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKK3sKKyAgR3N0QnVmZmVyICpidWYxID0gZ3N0X3ZhbHVlX2dldF9idWZmZXIgKHZhbHVlMSk7CisgIEdzdEJ1ZmZlciAqYnVmMiA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyICh2YWx1ZTIpOworICBnc2l6ZSBzaXplMSwgc2l6ZTI7CisgIGdwb2ludGVyIGRhdGExLCBkYXRhMjsKKyAgZ2ludCByZXN1bHQgPSBHU1RfVkFMVUVfVU5PUkRFUkVEOworCisgIHNpemUxID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmMSk7CisgIHNpemUyID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmMik7CisKKyAgaWYgKHNpemUxICE9IHNpemUyKQorICAgIHJldHVybiBHU1RfVkFMVUVfVU5PUkRFUkVEOworCisgIGlmIChzaXplMSA9PSAwKQorICAgIHJldHVybiBHU1RfVkFMVUVfRVFVQUw7CisKKyAgZGF0YTEgPSBnc3RfYnVmZmVyX21hcCAoYnVmMSwgJnNpemUxLCBOVUxMLCBHU1RfTUFQX1JFQUQpOworICBkYXRhMiA9IGdzdF9idWZmZXJfbWFwIChidWYyLCAmc2l6ZTIsIE5VTEwsIEdTVF9NQVBfUkVBRCk7CisgIGdfYXNzZXJ0IChkYXRhMSk7CisgIGdfYXNzZXJ0IChkYXRhMik7CisKKyAgaWYgKG1lbWNtcCAoZGF0YTEsIGRhdGEyLCBzaXplMSkgPT0gMCkKKyAgICByZXN1bHQgPSBHU1RfVkFMVUVfRVFVQUw7CisKKyAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmMiwgZGF0YTIsIHNpemUyKTsKKyAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmMSwgZGF0YTEsIHNpemUxKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2NoYXIgKgorZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9idWZmZXIgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQoreworICBndWludDggKmRhdGE7CisgIGdpbnQgaTsKKyAgZ3NpemUgc2l6ZTsKKyAgZ2NoYXIgKnN0cmluZzsKKyAgR3N0QnVmZmVyICpidWZmZXI7CisKKyAgYnVmZmVyID0gZ3N0X3ZhbHVlX2dldF9idWZmZXIgKHZhbHVlKTsKKyAgaWYgKGJ1ZmZlciA9PSBOVUxMKQorICAgIHJldHVybiBOVUxMOworCisgIGRhdGEgPSBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmc2l6ZSwgTlVMTCwgR1NUX01BUF9SRUFEKTsKKworICBzdHJpbmcgPSBnX21hbGxvYyAoc2l6ZSAqIDIgKyAxKTsKKyAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgIHNwcmludGYgKHN0cmluZyArIGkgKiAyLCAiJTAyeCIsIGRhdGFbaV0pOworICB9CisgIHN0cmluZ1tzaXplICogMl0gPSAwOworCisgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgZGF0YSwgc2l6ZSk7CisKKyAgcmV0dXJuIHN0cmluZzsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfdmFsdWVfZGVzZXJpYWxpemVfYnVmZmVyIChHVmFsdWUgKiBkZXN0LCBjb25zdCBnY2hhciAqIHMpCit7CisgIEdzdEJ1ZmZlciAqYnVmZmVyOworICBnaW50IGxlbjsKKyAgZ2NoYXIgdHNbM107CisgIGd1aW50OCAqZGF0YTsKKyAgZ2ludCBpOworICBnc2l6ZSBzaXplOworCisgIGxlbiA9IHN0cmxlbiAocyk7CisgIGlmIChsZW4gJiAxKQorICAgIGdvdG8gd3JvbmdfbGVuZ3RoOworCisgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCBsZW4gLyAyLCAwKTsKKyAgZGF0YSA9IGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZzaXplLCBOVUxMLCBHU1RfTUFQX1dSSVRFKTsKKworICBmb3IgKGkgPSAwOyBpIDwgbGVuIC8gMjsgaSsrKSB7CisgICAgaWYgKCFpc3hkaWdpdCAoKGludCkgc1tpICogMl0pIHx8ICFpc3hkaWdpdCAoKGludCkgc1tpICogMiArIDFdKSkKKyAgICAgIGdvdG8gd3JvbmdfY2hhcjsKKworICAgIHRzWzBdID0gc1tpICogMiArIDBdOworICAgIHRzWzFdID0gc1tpICogMiArIDFdOworICAgIHRzWzJdID0gMDsKKworICAgIGRhdGFbaV0gPSAoZ3VpbnQ4KSBzdHJ0b3VsICh0cywgTlVMTCwgMTYpOworICB9CisgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgZGF0YSwgc2l6ZSk7CisKKyAgZ3N0X3ZhbHVlX3Rha2VfYnVmZmVyIChkZXN0LCBidWZmZXIpOworCisgIHJldHVybiBUUlVFOworCisgIC8qIEVSUk9SUyAqLword3JvbmdfbGVuZ3RoOgorICB7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit3cm9uZ19jaGFyOgorICB7CisgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKyAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsIGRhdGEsIHNpemUpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCisKKy8qKioqKioqKioqKgorICogYm9vbGVhbiAqCisgKioqKioqKioqKiovCisKK3N0YXRpYyBnaW50Citnc3RfdmFsdWVfY29tcGFyZV9ib29sZWFuIChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKK3sKKyAgaWYgKCh2YWx1ZTEtPmRhdGFbMF0udl9pbnQgIT0gMCkgPT0gKHZhbHVlMi0+ZGF0YVswXS52X2ludCAhPSAwKSkKKyAgICByZXR1cm4gR1NUX1ZBTFVFX0VRVUFMOworICByZXR1cm4gR1NUX1ZBTFVFX1VOT1JERVJFRDsKK30KKworc3RhdGljIGdjaGFyICoKK2dzdF92YWx1ZV9zZXJpYWxpemVfYm9vbGVhbiAoY29uc3QgR1ZhbHVlICogdmFsdWUpCit7CisgIGlmICh2YWx1ZS0+ZGF0YVswXS52X2ludCkgeworICAgIHJldHVybiBnX3N0cmR1cCAoInRydWUiKTsKKyAgfQorICByZXR1cm4gZ19zdHJkdXAgKCJmYWxzZSIpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF92YWx1ZV9kZXNlcmlhbGl6ZV9ib29sZWFuIChHVmFsdWUgKiBkZXN0LCBjb25zdCBnY2hhciAqIHMpCit7CisgIGdib29sZWFuIHJldCA9IEZBTFNFOworCisgIGlmIChnX2FzY2lpX3N0cmNhc2VjbXAgKHMsICJ0cnVlIikgPT0gMCB8fAorICAgICAgZ19hc2NpaV9zdHJjYXNlY21wIChzLCAieWVzIikgPT0gMCB8fAorICAgICAgZ19hc2NpaV9zdHJjYXNlY21wIChzLCAidCIpID09IDAgfHwgc3RyY21wIChzLCAiMSIpID09IDApIHsKKyAgICBnX3ZhbHVlX3NldF9ib29sZWFuIChkZXN0LCBUUlVFKTsKKyAgICByZXQgPSBUUlVFOworICB9IGVsc2UgaWYgKGdfYXNjaWlfc3RyY2FzZWNtcCAocywgImZhbHNlIikgPT0gMCB8fAorICAgICAgZ19hc2NpaV9zdHJjYXNlY21wIChzLCAibm8iKSA9PSAwIHx8CisgICAgICBnX2FzY2lpX3N0cmNhc2VjbXAgKHMsICJmIikgPT0gMCB8fCBzdHJjbXAgKHMsICIwIikgPT0gMCkgeworICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKGRlc3QsIEZBTFNFKTsKKyAgICByZXQgPSBUUlVFOworICB9CisKKyAgcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBDUkVBVEVfU0VSSUFMSVpBVElPTl9TVEFSVChfdHlwZSxfbWFjcm8pICAgICAgICAgICAgICAgICAgICAgICAgXAorc3RhdGljIGdpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZ3N0X3ZhbHVlX2NvbXBhcmVfICMjIF90eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKGNvbnN0IEdWYWx1ZSAqIHZhbHVlMSwgY29uc3QgR1ZhbHVlICogdmFsdWUyKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBnICMjIF90eXBlIHZhbDEgPSBnX3ZhbHVlX2dldF8gIyMgX3R5cGUgKHZhbHVlMSk7ICAgICAgICAgICAgICAgICAgICAgXAorICBnICMjIF90eXBlIHZhbDIgPSBnX3ZhbHVlX2dldF8gIyMgX3R5cGUgKHZhbHVlMik7ICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAodmFsMSA+IHZhbDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJldHVybiBHU1RfVkFMVUVfR1JFQVRFUl9USEFOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAodmFsMSA8IHZhbDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJldHVybiBHU1RfVkFMVUVfTEVTU19USEFOOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICByZXR1cm4gR1NUX1ZBTFVFX0VRVUFMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3RhdGljIGdjaGFyICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZ3N0X3ZhbHVlX3NlcmlhbGl6ZV8gIyMgX3R5cGUgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBHVmFsdWUgdmFsID0geyAwLCB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdfVFlQRV9TVFJJTkcpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAoIWdfdmFsdWVfdHJhbnNmb3JtICh2YWx1ZSwgJnZhbCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAvKiBOT19DT1BZX01BRE5FU1MhISEgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICByZXR1cm4gKGNoYXIgKikgZ192YWx1ZV9nZXRfc3RyaW5nICgmdmFsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisvKiBkZXNlcmlhbGl6ZSB0aGUgZ2l2ZW4gcyBpbnRvIHRvIGFzIGEgZ2ludDY0LgorICogY2hlY2sgaWYgdGhlIHJlc3VsdCBpcyBhY3R1YWxseSBzdG9yZWFibGUgaW4gdGhlIGdpdmVuIHNpemUgbnVtYmVyIG9mCisgKiBieXRlcy4KKyAqLworc3RhdGljIGdib29sZWFuCitnc3RfdmFsdWVfZGVzZXJpYWxpemVfaW50X2hlbHBlciAoZ2ludDY0ICogdG8sIGNvbnN0IGdjaGFyICogcywKKyAgICBnaW50NjQgbWluLCBnaW50NjQgbWF4LCBnaW50IHNpemUpCit7CisgIGdib29sZWFuIHJldCA9IEZBTFNFOworICBnY2hhciAqZW5kOworICBnaW50NjQgbWFzayA9IC0xOworCisgIGVycm5vID0gMDsKKyAgKnRvID0gZ19hc2NpaV9zdHJ0b3VsbCAocywgJmVuZCwgMCk7CisgIC8qIGEgcmFuZ2UgZXJyb3IgaXMgYSBkZWZpbml0aXZlIG5vLW5vICovCisgIGlmIChlcnJubyA9PSBFUkFOR0UpIHsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKworICBpZiAoKmVuZCA9PSAwKSB7CisgICAgcmV0ID0gVFJVRTsKKyAgfSBlbHNlIHsKKyAgICBpZiAoZ19hc2NpaV9zdHJjYXNlY21wIChzLCAibGl0dGxlX2VuZGlhbiIpID09IDApIHsKKyAgICAgICp0byA9IEdfTElUVExFX0VORElBTjsKKyAgICAgIHJldCA9IFRSVUU7CisgICAgfSBlbHNlIGlmIChnX2FzY2lpX3N0cmNhc2VjbXAgKHMsICJiaWdfZW5kaWFuIikgPT0gMCkgeworICAgICAgKnRvID0gR19CSUdfRU5ESUFOOworICAgICAgcmV0ID0gVFJVRTsKKyAgICB9IGVsc2UgaWYgKGdfYXNjaWlfc3RyY2FzZWNtcCAocywgImJ5dGVfb3JkZXIiKSA9PSAwKSB7CisgICAgICAqdG8gPSBHX0JZVEVfT1JERVI7CisgICAgICByZXQgPSBUUlVFOworICAgIH0gZWxzZSBpZiAoZ19hc2NpaV9zdHJjYXNlY21wIChzLCAibWluIikgPT0gMCkgeworICAgICAgKnRvID0gbWluOworICAgICAgcmV0ID0gVFJVRTsKKyAgICB9IGVsc2UgaWYgKGdfYXNjaWlfc3RyY2FzZWNtcCAocywgIm1heCIpID09IDApIHsKKyAgICAgICp0byA9IG1heDsKKyAgICAgIHJldCA9IFRSVUU7CisgICAgfQorICB9CisgIGlmIChyZXQpIHsKKyAgICAvKiBieSBkZWZpbml0aW9uLCBhIGdpbnQ2NCBmaXRzIGludG8gYSBnaW50NjQ7IHNvIGlnbm9yZSB0aG9zZSAqLworICAgIGlmIChzaXplICE9IHNpemVvZiAobWFzaykpIHsKKyAgICAgIGlmICgqdG8gPj0gMCkgeworICAgICAgICAvKiBmb3IgcG9zaXRpdmUgbnVtYmVycywgd2UgY3JlYXRlIGEgbWFzayBvZiAxJ3Mgb3V0c2lkZSBvZiB0aGUgcmFuZ2UKKyAgICAgICAgICogYW5kIDAncyBpbnNpZGUgdGhlIHJhbmdlLiAgQW4gYW5kIHdpbGwgdGh1cyBrZWVwIG9ubHkgMSBiaXRzCisgICAgICAgICAqIG91dHNpZGUgb2YgdGhlIHJhbmdlICovCisgICAgICAgIG1hc2sgPDw9IChzaXplICogOCk7CisgICAgICAgIGlmICgobWFzayAmICp0bykgIT0gMCkgeworICAgICAgICAgIHJldCA9IEZBTFNFOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICAvKiBmb3IgbmVnYXRpdmUgbnVtYmVycywgd2UgZG8gYSAyJ3MgY29tcGxlbWVudCB2ZXJzaW9uICovCisgICAgICAgIG1hc2sgPDw9ICgoc2l6ZSAqIDgpIC0gMSk7CisgICAgICAgIGlmICgobWFzayAmICp0bykgIT0gbWFzaykgeworICAgICAgICAgIHJldCA9IEZBTFNFOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgQ1JFQVRFX1NFUklBTElaQVRJT04oX3R5cGUsX21hY3JvKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK0NSRUFURV9TRVJJQUxJWkFUSU9OX1NUQVJUKF90eXBlLF9tYWNybykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3N0YXRpYyBnYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2dzdF92YWx1ZV9kZXNlcmlhbGl6ZV8gIyMgX3R5cGUgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IGdjaGFyICpzKSAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZ2ludDY0IHg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9pbnRfaGVscGVyICgmeCwgcywgR19NSU4gIyMgX21hY3JvLCAgICAgICAgIFwKKyAgICAgIEdfTUFYICMjIF9tYWNybywgc2l6ZW9mIChnICMjIF90eXBlKSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnX3ZhbHVlX3NldF8gIyMgX3R5cGUgKGRlc3QsIC8qKGcgIyMgX3R5cGUpKi8geCk7ICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXR1cm4gVFJVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXR1cm4gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBDUkVBVEVfVVNFUklBTElaQVRJT04oX3R5cGUsX21hY3JvKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorQ1JFQVRFX1NFUklBTElaQVRJT05fU1RBUlQoX3R5cGUsX21hY3JvKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3RhdGljIGdib29sZWFuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplXyAjIyBfdHlwZSAoR1ZhbHVlICogZGVzdCwgY29uc3QgZ2NoYXIgKnMpICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBnaW50NjQgeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBnY2hhciAqZW5kOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBnYm9vbGVhbiByZXQgPSBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBlcnJubyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB4ID0gZ19hc2NpaV9zdHJ0b3VsbCAocywgJmVuZCwgMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAvKiBhIHJhbmdlIGVycm9yIGlzIGEgZGVmaW5pdGl2ZSBuby1ubyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAoZXJybm8gPT0gRVJBTkdFKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJldHVybiBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAvKiB0aGUgY2FzdCBlbnN1cmVzIHRoZSByYW5nZSBjaGVjayBsYXRlciBvbiBtYWtlcyBzZW5zZSAqLyAgICAgICAgICAgXAorICB4ID0gKGcgIyMgX3R5cGUpIHg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAoKmVuZCA9PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJldCA9IFRSVUU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChnX2FzY2lpX3N0cmNhc2VjbXAgKHMsICJsaXR0bGVfZW5kaWFuIikgPT0gMCkgeyAgICAgICAgICAgICAgICAgXAorICAgICAgeCA9IEdfTElUVExFX0VORElBTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0ID0gVFJVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoZ19hc2NpaV9zdHJjYXNlY21wIChzLCAiYmlnX2VuZGlhbiIpID09IDApIHsgICAgICAgICAgICAgXAorICAgICAgeCA9IEdfQklHX0VORElBTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0ID0gVFJVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoZ19hc2NpaV9zdHJjYXNlY21wIChzLCAiYnl0ZV9vcmRlciIpID09IDApIHsgICAgICAgICAgICAgXAorICAgICAgeCA9IEdfQllURV9PUkRFUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0ID0gVFJVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoZ19hc2NpaV9zdHJjYXNlY21wIChzLCAibWluIikgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgeCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0ID0gVFJVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoZ19hc2NpaV9zdHJjYXNlY21wIChzLCAibWF4IikgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgeCA9IEdfTUFYICMjIF9tYWNybzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0ID0gVFJVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAocmV0KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICh4ID4gR19NQVggIyMgX21hY3JvKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0ID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgZ192YWx1ZV9zZXRfICMjIF90eXBlIChkZXN0LCB4KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICByZXR1cm4gcmV0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIFJFR0lTVEVSX1NFUklBTElaQVRJT04oX2d0eXBlLCBfdHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitHX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHN0YXRpYyBjb25zdCBHc3RWYWx1ZVRhYmxlIGdzdF92YWx1ZSA9IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX2d0eXBlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ3N0X3ZhbHVlX2NvbXBhcmVfICMjIF90eXBlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ3N0X3ZhbHVlX3NlcmlhbGl6ZV8gIyMgX3R5cGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplXyAjIyBfdHlwZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGdzdF92YWx1ZV9yZWdpc3RlciAoJmdzdF92YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IEdfU1RNVF9FTkQKKworQ1JFQVRFX1NFUklBTElaQVRJT04gKGludCwgSU5UKTsKK0NSRUFURV9TRVJJQUxJWkFUSU9OIChpbnQ2NCwgSU5UNjQpOworQ1JFQVRFX1NFUklBTElaQVRJT04gKGxvbmcsIExPTkcpOworCitDUkVBVEVfVVNFUklBTElaQVRJT04gKHVpbnQsIFVJTlQpOworQ1JFQVRFX1VTRVJJQUxJWkFUSU9OICh1aW50NjQsIFVJTlQ2NCk7CitDUkVBVEVfVVNFUklBTElaQVRJT04gKHVsb25nLCBVTE9ORyk7CisKKy8qIEZJWE1FIDAuMTE6IHJlbW92ZSB0aGlzIGFnYWluLCBwbHVnaW5zIHNob3VsZG4ndCBoYXZlIHVjaGFyIHByb3BlcnRpZXMgKi8KKyNpZm5kZWYgR19NQVhVQ0hBUgorI2RlZmluZSBHX01BWFVDSEFSIDI1NQorI2VuZGlmCitDUkVBVEVfVVNFUklBTElaQVRJT04gKHVjaGFyLCBVQ0hBUik7CisKKy8qKioqKioqKioqCisgKiBkb3VibGUgKgorICoqKioqKioqKiovCitzdGF0aWMgZ2ludAorZ3N0X3ZhbHVlX2NvbXBhcmVfZG91YmxlIChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKK3sKKyAgaWYgKHZhbHVlMS0+ZGF0YVswXS52X2RvdWJsZSA+IHZhbHVlMi0+ZGF0YVswXS52X2RvdWJsZSkKKyAgICByZXR1cm4gR1NUX1ZBTFVFX0dSRUFURVJfVEhBTjsKKyAgaWYgKHZhbHVlMS0+ZGF0YVswXS52X2RvdWJsZSA8IHZhbHVlMi0+ZGF0YVswXS52X2RvdWJsZSkKKyAgICByZXR1cm4gR1NUX1ZBTFVFX0xFU1NfVEhBTjsKKyAgaWYgKHZhbHVlMS0+ZGF0YVswXS52X2RvdWJsZSA9PSB2YWx1ZTItPmRhdGFbMF0udl9kb3VibGUpCisgICAgcmV0dXJuIEdTVF9WQUxVRV9FUVVBTDsKKyAgcmV0dXJuIEdTVF9WQUxVRV9VTk9SREVSRUQ7Cit9CisKK3N0YXRpYyBnY2hhciAqCitnc3RfdmFsdWVfc2VyaWFsaXplX2RvdWJsZSAoY29uc3QgR1ZhbHVlICogdmFsdWUpCit7CisgIGdjaGFyIGRbR19BU0NJSV9EVE9TVFJfQlVGX1NJWkVdOworCisgIGdfYXNjaWlfZHRvc3RyIChkLCBHX0FTQ0lJX0RUT1NUUl9CVUZfU0laRSwgdmFsdWUtPmRhdGFbMF0udl9kb3VibGUpOworICByZXR1cm4gZ19zdHJkdXAgKGQpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF92YWx1ZV9kZXNlcmlhbGl6ZV9kb3VibGUgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IGdjaGFyICogcykKK3sKKyAgZ2RvdWJsZSB4OworICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKKyAgZ2NoYXIgKmVuZDsKKworICB4ID0gZ19hc2NpaV9zdHJ0b2QgKHMsICZlbmQpOworICBpZiAoKmVuZCA9PSAwKSB7CisgICAgcmV0ID0gVFJVRTsKKyAgfSBlbHNlIHsKKyAgICBpZiAoZ19hc2NpaV9zdHJjYXNlY21wIChzLCAibWluIikgPT0gMCkgeworICAgICAgeCA9IC1HX01BWERPVUJMRTsKKyAgICAgIHJldCA9IFRSVUU7CisgICAgfSBlbHNlIGlmIChnX2FzY2lpX3N0cmNhc2VjbXAgKHMsICJtYXgiKSA9PSAwKSB7CisgICAgICB4ID0gR19NQVhET1VCTEU7CisgICAgICByZXQgPSBUUlVFOworICAgIH0KKyAgfQorICBpZiAocmV0KSB7CisgICAgZ192YWx1ZV9zZXRfZG91YmxlIChkZXN0LCB4KTsKKyAgfQorICByZXR1cm4gcmV0OworfQorCisvKioqKioqKioqCisgKiBmbG9hdCAqCisgKioqKioqKioqLworCitzdGF0aWMgZ2ludAorZ3N0X3ZhbHVlX2NvbXBhcmVfZmxvYXQgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlMSwgY29uc3QgR1ZhbHVlICogdmFsdWUyKQoreworICBpZiAodmFsdWUxLT5kYXRhWzBdLnZfZmxvYXQgPiB2YWx1ZTItPmRhdGFbMF0udl9mbG9hdCkKKyAgICByZXR1cm4gR1NUX1ZBTFVFX0dSRUFURVJfVEhBTjsKKyAgaWYgKHZhbHVlMS0+ZGF0YVswXS52X2Zsb2F0IDwgdmFsdWUyLT5kYXRhWzBdLnZfZmxvYXQpCisgICAgcmV0dXJuIEdTVF9WQUxVRV9MRVNTX1RIQU47CisgIGlmICh2YWx1ZTEtPmRhdGFbMF0udl9mbG9hdCA9PSB2YWx1ZTItPmRhdGFbMF0udl9mbG9hdCkKKyAgICByZXR1cm4gR1NUX1ZBTFVFX0VRVUFMOworICByZXR1cm4gR1NUX1ZBTFVFX1VOT1JERVJFRDsKK30KKworc3RhdGljIGdjaGFyICoKK2dzdF92YWx1ZV9zZXJpYWxpemVfZmxvYXQgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQoreworICBnY2hhciBkW0dfQVNDSUlfRFRPU1RSX0JVRl9TSVpFXTsKKworICBnX2FzY2lpX2R0b3N0ciAoZCwgR19BU0NJSV9EVE9TVFJfQlVGX1NJWkUsIHZhbHVlLT5kYXRhWzBdLnZfZmxvYXQpOworICByZXR1cm4gZ19zdHJkdXAgKGQpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF92YWx1ZV9kZXNlcmlhbGl6ZV9mbG9hdCAoR1ZhbHVlICogZGVzdCwgY29uc3QgZ2NoYXIgKiBzKQoreworICBnZG91YmxlIHg7CisgIGdib29sZWFuIHJldCA9IEZBTFNFOworICBnY2hhciAqZW5kOworCisgIHggPSBnX2FzY2lpX3N0cnRvZCAocywgJmVuZCk7CisgIGlmICgqZW5kID09IDApIHsKKyAgICByZXQgPSBUUlVFOworICB9IGVsc2UgeworICAgIGlmIChnX2FzY2lpX3N0cmNhc2VjbXAgKHMsICJtaW4iKSA9PSAwKSB7CisgICAgICB4ID0gLUdfTUFYRkxPQVQ7CisgICAgICByZXQgPSBUUlVFOworICAgIH0gZWxzZSBpZiAoZ19hc2NpaV9zdHJjYXNlY21wIChzLCAibWF4IikgPT0gMCkgeworICAgICAgeCA9IEdfTUFYRkxPQVQ7CisgICAgICByZXQgPSBUUlVFOworICAgIH0KKyAgfQorICBpZiAoeCA+IEdfTUFYRkxPQVQgfHwgeCA8IC1HX01BWEZMT0FUKQorICAgIHJldCA9IEZBTFNFOworICBpZiAocmV0KSB7CisgICAgZ192YWx1ZV9zZXRfZmxvYXQgKGRlc3QsIChmbG9hdCkgeCk7CisgIH0KKyAgcmV0dXJuIHJldDsKK30KKworLyoqKioqKioqKioKKyAqIHN0cmluZyAqCisgKioqKioqKioqKi8KKworc3RhdGljIGdpbnQKK2dzdF92YWx1ZV9jb21wYXJlX3N0cmluZyAoY29uc3QgR1ZhbHVlICogdmFsdWUxLCBjb25zdCBHVmFsdWUgKiB2YWx1ZTIpCit7CisgIGlmIChHX1VOTElLRUxZICghdmFsdWUxLT5kYXRhWzBdLnZfcG9pbnRlciB8fCAhdmFsdWUyLT5kYXRhWzBdLnZfcG9pbnRlcikpIHsKKyAgICAvKiBpZiBvbmx5IG9uZSBpcyBOVUxMLCBubyBtYXRjaCAtIG90aGVyd2lzZSBib3RoIE5VTEwgPT0gRVFVQUwgKi8KKyAgICBpZiAodmFsdWUxLT5kYXRhWzBdLnZfcG9pbnRlciAhPSB2YWx1ZTItPmRhdGFbMF0udl9wb2ludGVyKQorICAgICAgcmV0dXJuIEdTVF9WQUxVRV9VTk9SREVSRUQ7CisgIH0gZWxzZSB7CisgICAgZ2ludCB4ID0gc3RyY21wICh2YWx1ZTEtPmRhdGFbMF0udl9wb2ludGVyLCB2YWx1ZTItPmRhdGFbMF0udl9wb2ludGVyKTsKKworICAgIGlmICh4IDwgMCkKKyAgICAgIHJldHVybiBHU1RfVkFMVUVfTEVTU19USEFOOworICAgIGlmICh4ID4gMCkKKyAgICAgIHJldHVybiBHU1RfVkFMVUVfR1JFQVRFUl9USEFOOworICB9CisKKyAgcmV0dXJuIEdTVF9WQUxVRV9FUVVBTDsKK30KKworc3RhdGljIGdpbnQKK2dzdF9zdHJpbmdfbWVhc3VyZV93cmFwcGluZyAoY29uc3QgZ2NoYXIgKiBzKQoreworICBnaW50IGxlbjsKKyAgZ2Jvb2xlYW4gd3JhcCA9IEZBTFNFOworCisgIGlmIChHX1VOTElLRUxZIChzID09IE5VTEwpKQorICAgIHJldHVybiAtMTsKKworICAvKiBTcGVjaWFsIGNhc2U6IHRoZSBhY3R1YWwgc3RyaW5nIE5VTEwgbmVlZHMgd3JhcHBpbmcgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKHN0cmNtcCAocywgIk5VTEwiKSA9PSAwKSkKKyAgICByZXR1cm4gNDsKKworICBsZW4gPSAwOworICB3aGlsZSAoKnMpIHsKKyAgICBpZiAoR1NUX0FTQ0lJX0lTX1NUUklORyAoKnMpKSB7CisgICAgICBsZW4rKzsKKyAgICB9IGVsc2UgaWYgKCpzIDwgMHgyMCB8fCAqcyA+PSAweDdmKSB7CisgICAgICB3cmFwID0gVFJVRTsKKyAgICAgIGxlbiArPSA0OworICAgIH0gZWxzZSB7CisgICAgICB3cmFwID0gVFJVRTsKKyAgICAgIGxlbiArPSAyOworICAgIH0KKyAgICBzKys7CisgIH0KKworICAvKiBXcmFwIHRoZSBzdHJpbmcgaWYgd2UgZm91bmQgc29tZXRoaW5nIHRoYXQgbmVlZHMKKyAgICogd3JhcHBpbmcsIG9yIHRoZSBlbXB0eSBzdHJpbmcgKGxlbiA9PSAwKSAqLworICByZXR1cm4gKHdyYXAgfHwgbGVuID09IDApID8gbGVuIDogLTE7Cit9CisKK3N0YXRpYyBnY2hhciAqCitnc3Rfc3RyaW5nX3dyYXBfaW5uZXIgKGNvbnN0IGdjaGFyICogcywgZ2ludCBsZW4pCit7CisgIGdjaGFyICpkLCAqZTsKKworICBlID0gZCA9IGdfbWFsbG9jIChsZW4gKyAzKTsKKworICAqZSsrID0gJ1wiJzsKKyAgd2hpbGUgKCpzKSB7CisgICAgaWYgKEdTVF9BU0NJSV9JU19TVFJJTkcgKCpzKSkgeworICAgICAgKmUrKyA9ICpzKys7CisgICAgfSBlbHNlIGlmICgqcyA8IDB4MjAgfHwgKnMgPj0gMHg3ZikgeworICAgICAgKmUrKyA9ICdcXCc7CisgICAgICAqZSsrID0gJzAnICsgKCgqKGd1Y2hhciAqKSBzKSA+PiA2KTsKKyAgICAgICplKysgPSAnMCcgKyAoKCgqcykgPj4gMykgJiAweDcpOworICAgICAgKmUrKyA9ICcwJyArICgoKnMrKykgJiAweDcpOworICAgIH0gZWxzZSB7CisgICAgICAqZSsrID0gJ1xcJzsKKyAgICAgICplKysgPSAqcysrOworICAgIH0KKyAgfQorICAqZSsrID0gJ1wiJzsKKyAgKmUgPSAwOworCisgIGdfYXNzZXJ0IChlIC0gZCA8PSBsZW4gKyAzKTsKKyAgcmV0dXJuIGQ7Cit9CisKKy8qIERvIHN0cmluZyB3cmFwcGluZy9lc2NhcGluZyAqLworc3RhdGljIGdjaGFyICoKK2dzdF9zdHJpbmdfd3JhcCAoY29uc3QgZ2NoYXIgKiBzKQoreworICBnaW50IGxlbiA9IGdzdF9zdHJpbmdfbWVhc3VyZV93cmFwcGluZyAocyk7CisKKyAgaWYgKEdfTElLRUxZIChsZW4gPCAwKSkKKyAgICByZXR1cm4gZ19zdHJkdXAgKHMpOworCisgIHJldHVybiBnc3Rfc3RyaW5nX3dyYXBfaW5uZXIgKHMsIGxlbik7Cit9CisKKy8qIFNhbWUgYXMgYWJvdmUsIGJ1dCB0YWtlIG93bmVyc2hpcCBvZiB0aGUgc3RyaW5nICovCitzdGF0aWMgZ2NoYXIgKgorZ3N0X3N0cmluZ190YWtlX2FuZF93cmFwIChnY2hhciAqIHMpCit7CisgIGdjaGFyICpvdXQ7CisgIGdpbnQgbGVuID0gZ3N0X3N0cmluZ19tZWFzdXJlX3dyYXBwaW5nIChzKTsKKworICBpZiAoR19MSUtFTFkgKGxlbiA8IDApKQorICAgIHJldHVybiBzOworCisgIG91dCA9IGdzdF9zdHJpbmdfd3JhcF9pbm5lciAocywgbGVuKTsKKyAgZ19mcmVlIChzKTsKKworICByZXR1cm4gb3V0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHN0cmluZyBkZWxpbWl0ZWQgd2l0aCBkb3VibGUgcXVvdGVzICgiKQorICogYW5kIHVuZXNjYXBlcyBhbnkgXHh4eCBvY3RhbCBudW1iZXJzLgorICoKKyAqIElmIHNlcXVlbmNlcyBvZiBceSBhcmUgZm91bmQgd2hlcmUgeSBpcyBub3QgaW4gdGhlIHJhbmdlIG9mCisgKiAwLT4zLCB5IGlzIGNvcGllZCB1bmVzY2FwZWQuCisgKgorICogSWYgXHh5eSBpcyBmb3VuZCB3aGVyZSB4IGlzIGFuIG9jdGFsIG51bWJlciBidXQgeSBpcyBub3QsIGFuCisgKiBlcnJvciBpcyBlbmNvdW50ZXJlZCBhbmQgTlVMTCBpcyByZXR1cm5lZC4KKyAqCisgKiB0aGUgaW5wdXQgc3RyaW5nIG11c3QgYmUgXDAgdGVybWluYXRlZC4KKyAqLworc3RhdGljIGdjaGFyICoKK2dzdF9zdHJpbmdfdW53cmFwIChjb25zdCBnY2hhciAqIHMpCit7CisgIGdjaGFyICpyZXQ7CisgIGdjaGFyICpyZWFkLCAqd3JpdGU7CisKKyAgLyogTlVMTCBzdHJpbmcgcmV0dXJucyBOVUxMICovCisgIGlmIChzID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgLyogc3RyaW5ncyBub3Qgc3RhcnRpbmcgd2l0aCAiIGFyZSBpbnZhbGlkICovCisgIGlmICgqcyAhPSAnIicpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgLyogbWFrZSBjb3B5IG9mIG9yaWdpbmFsIHN0cmluZyB0byBob2xkIHRoZSByZXN1bHQuIFRoaXMKKyAgICogc3RyaW5nIHdpbGwgYWx3YXlzIGJlIHNtYWxsZXIgdGhhbiB0aGUgb3JpZ2luYWwgKi8KKyAgcmV0ID0gZ19zdHJkdXAgKHMpOworICByZWFkID0gcmV0OworICB3cml0ZSA9IHJldDsKKworICAvKiBuZWVkIHRvIG1vdmUgdG8gdGhlIG5leHQgcG9zaXRpb24gYXMgd2UgcGFyc2VkIHRoZSAiICovCisgIHJlYWQrKzsKKworICB3aGlsZSAoKnJlYWQpIHsKKyAgICBpZiAoR1NUX0FTQ0lJX0lTX1NUUklORyAoKnJlYWQpKSB7CisgICAgICAvKiBub3JtYWwgY2hhcnMgYXJlIGp1c3QgY29waWVkICovCisgICAgICAqd3JpdGUrKyA9ICpyZWFkKys7CisgICAgfSBlbHNlIGlmICgqcmVhZCA9PSAnIicpIHsKKyAgICAgIC8qIHF1b3RlIG1hcmtzIGVuZCBvZiBzdHJpbmcgKi8KKyAgICAgIGJyZWFrOworICAgIH0gZWxzZSBpZiAoKnJlYWQgPT0gJ1xcJykgeworICAgICAgLyogZ290IGFuIGVzY2FwZSBjaGFyLCBtb3ZlIHRvIG5leHQgcG9zaXRpb24gdG8gcmVhZCBhIHRyaXBwbGV0CisgICAgICAgKiBvZiBvY3RhbCBudW1iZXJzICovCisgICAgICByZWFkKys7CisgICAgICAvKiBpcyB0aGUgbmV4dCBjaGFyIGEgcG9zc2libGUgZmlyc3Qgb2N0YWwgbnVtYmVyPyAqLworICAgICAgaWYgKCpyZWFkID49ICcwJyAmJiAqcmVhZCA8PSAnMycpIHsKKyAgICAgICAgLyogcGFyc2Ugb3RoZXIgMiBudW1iZXJzLCBpZiBvbmUgb2YgdGhlbSBpcyBub3QgaW4gdGhlIHJhbmdlIG9mCisgICAgICAgICAqIGFuIG9jdGFsIG51bWJlciwgd2UgZXJyb3IuIFdlIGFsc28gY2F0Y2ggdGhlIGNhc2Ugd2hlcmUgYSB6ZXJvCisgICAgICAgICAqIGJ5dGUgaXMgZm91bmQgaGVyZS4gKi8KKyAgICAgICAgaWYgKHJlYWRbMV0gPCAnMCcgfHwgcmVhZFsxXSA+ICc3JyB8fCByZWFkWzJdIDwgJzAnIHx8IHJlYWRbMl0gPiAnNycpCisgICAgICAgICAgZ290byBiZWFjaDsKKworICAgICAgICAvKiBub3cgY29udmVydCB0aGUgb2N0YWwgbnVtYmVyIHRvIGEgYnl0ZSBhZ2Fpbi4gKi8KKyAgICAgICAgKndyaXRlKysgPSAoKHJlYWRbMF0gLSAnMCcpIDw8IDYpICsKKyAgICAgICAgICAgICgocmVhZFsxXSAtICcwJykgPDwgMykgKyAocmVhZFsyXSAtICcwJyk7CisKKyAgICAgICAgcmVhZCArPSAzOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgLyogaWYgd2UgcnVuIGludG8gYSBcMCBoZXJlLCB3ZSBkZWZpbml0ZWx5IHdvbid0IGdldCBhIHF1b3RlIGxhdGVyICovCisgICAgICAgIGlmICgqcmVhZCA9PSAwKQorICAgICAgICAgIGdvdG8gYmVhY2g7CisKKyAgICAgICAgLyogZWxzZSBjb3B5IFxYIHNlcXVlbmNlICovCisgICAgICAgICp3cml0ZSsrID0gKnJlYWQrKzsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgLyogd2VpcmQgY2hhcmFjdGVyLCBlcnJvciAqLworICAgICAgZ290byBiZWFjaDsKKyAgICB9CisgIH0KKyAgLyogaWYgdGhlIHN0cmluZyBpcyBub3QgZW5kaW5nIGluICIgYW5kIHplcm8gdGVybWluYXRlZCwgd2UgZXJyb3IgKi8KKyAgaWYgKCpyZWFkICE9ICciJyB8fCByZWFkWzFdICE9ICdcMCcpCisgICAgZ290byBiZWFjaDsKKworICAvKiBudWxsIHRlcm1pbmF0ZSByZXN1bHQgc3RyaW5nIGFuZCByZXR1cm4gKi8KKyAgKndyaXRlID0gJ1wwJzsKKyAgcmV0dXJuIHJldDsKKworYmVhY2g6CisgIGdfZnJlZSAocmV0KTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBnY2hhciAqCitnc3RfdmFsdWVfc2VyaWFsaXplX3N0cmluZyAoY29uc3QgR1ZhbHVlICogdmFsdWUpCit7CisgIHJldHVybiBnc3Rfc3RyaW5nX3dyYXAgKHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcik7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX3N0cmluZyAoR1ZhbHVlICogZGVzdCwgY29uc3QgZ2NoYXIgKiBzKQoreworICBpZiAoR19VTkxJS0VMWSAoc3RyY21wIChzLCAiTlVMTCIpID09IDApKSB7CisgICAgZ192YWx1ZV9zZXRfc3RyaW5nIChkZXN0LCBOVUxMKTsKKyAgICByZXR1cm4gVFJVRTsKKyAgfSBlbHNlIGlmIChHX0xJS0VMWSAoKnMgIT0gJyInKSkgeworICAgIGlmICghZ191dGY4X3ZhbGlkYXRlIChzLCAtMSwgTlVMTCkpCisgICAgICByZXR1cm4gRkFMU0U7CisgICAgZ192YWx1ZV9zZXRfc3RyaW5nIChkZXN0LCBzKTsKKyAgICByZXR1cm4gVFJVRTsKKyAgfSBlbHNlIHsKKyAgICBnY2hhciAqc3RyID0gZ3N0X3N0cmluZ191bndyYXAgKHMpOworICAgIGlmIChHX1VOTElLRUxZICghc3RyKSkKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nIChkZXN0LCBzdHIpOworICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qKioqKioqKgorICogZW51bSAqCisgKioqKioqKiovCisKK3N0YXRpYyBnaW50Citnc3RfdmFsdWVfY29tcGFyZV9lbnVtIChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKK3sKKyAgR0VudW1WYWx1ZSAqZW4xLCAqZW4yOworICBHRW51bUNsYXNzICprbGFzczEgPSAoR0VudW1DbGFzcyAqKSBnX3R5cGVfY2xhc3NfcmVmIChHX1ZBTFVFX1RZUEUgKHZhbHVlMSkpOworICBHRW51bUNsYXNzICprbGFzczIgPSAoR0VudW1DbGFzcyAqKSBnX3R5cGVfY2xhc3NfcmVmIChHX1ZBTFVFX1RZUEUgKHZhbHVlMikpOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChrbGFzczEsIEdTVF9WQUxVRV9VTk9SREVSRUQpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoa2xhc3MyLCBHU1RfVkFMVUVfVU5PUkRFUkVEKTsKKyAgZW4xID0gZ19lbnVtX2dldF92YWx1ZSAoa2xhc3MxLCBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZTEpKTsKKyAgZW4yID0gZ19lbnVtX2dldF92YWx1ZSAoa2xhc3MyLCBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZTIpKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChrbGFzczEpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGtsYXNzMik7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlbjEsIEdTVF9WQUxVRV9VTk9SREVSRUQpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZW4yLCBHU1RfVkFMVUVfVU5PUkRFUkVEKTsKKyAgaWYgKGVuMS0+dmFsdWUgPCBlbjItPnZhbHVlKQorICAgIHJldHVybiBHU1RfVkFMVUVfTEVTU19USEFOOworICBpZiAoZW4xLT52YWx1ZSA+IGVuMi0+dmFsdWUpCisgICAgcmV0dXJuIEdTVF9WQUxVRV9HUkVBVEVSX1RIQU47CisKKyAgcmV0dXJuIEdTVF9WQUxVRV9FUVVBTDsKK30KKworc3RhdGljIGdjaGFyICoKK2dzdF92YWx1ZV9zZXJpYWxpemVfZW51bSAoY29uc3QgR1ZhbHVlICogdmFsdWUpCit7CisgIEdFbnVtVmFsdWUgKmVuOworICBHRW51bUNsYXNzICprbGFzcyA9IChHRW51bUNsYXNzICopIGdfdHlwZV9jbGFzc19yZWYgKEdfVkFMVUVfVFlQRSAodmFsdWUpKTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoa2xhc3MsIE5VTEwpOworICBlbiA9IGdfZW51bV9nZXRfdmFsdWUgKGtsYXNzLCBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSkpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGtsYXNzKTsKKworICAvKiBtaWdodCBiZSBvbmUgb2YgdGhlIGN1c3RvbSBmb3JtYXRzIHJlZ2lzdGVyZWQgbGF0ZXIgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKGVuID09IE5VTEwgJiYgR19WQUxVRV9UWVBFICh2YWx1ZSkgPT0gR1NUX1RZUEVfRk9STUFUKSkgeworICAgIGNvbnN0IEdzdEZvcm1hdERlZmluaXRpb24gKmZvcm1hdF9kZWY7CisKKyAgICBmb3JtYXRfZGVmID0gZ3N0X2Zvcm1hdF9nZXRfZGV0YWlscyAoKEdzdEZvcm1hdCkgZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCAoZm9ybWF0X2RlZiAhPSBOVUxMLCBOVUxMKTsKKyAgICByZXR1cm4gZ19zdHJkdXAgKGZvcm1hdF9kZWYtPmRlc2NyaXB0aW9uKTsKKyAgfQorCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlbiwgTlVMTCk7CisgIHJldHVybiBnX3N0cmR1cCAoZW4tPnZhbHVlX25hbWUpOworfQorCitzdGF0aWMgZ2ludAorZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2VudW1faXRlcl9jbXAgKGNvbnN0IEdWYWx1ZSAqIGZvcm1hdF9kZWZfdmFsdWUsCisgICAgY29uc3QgZ2NoYXIgKiBzKQoreworICBjb25zdCBHc3RGb3JtYXREZWZpbml0aW9uICpmb3JtYXRfZGVmID0KKyAgICAgIGdfdmFsdWVfZ2V0X3BvaW50ZXIgKGZvcm1hdF9kZWZfdmFsdWUpOworCisgIGlmIChnX2FzY2lpX3N0cmNhc2VjbXAgKHMsIGZvcm1hdF9kZWYtPm5pY2spID09IDApCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIGdfYXNjaWlfc3RyY2FzZWNtcCAocywgZm9ybWF0X2RlZi0+ZGVzY3JpcHRpb24pOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF92YWx1ZV9kZXNlcmlhbGl6ZV9lbnVtIChHVmFsdWUgKiBkZXN0LCBjb25zdCBnY2hhciAqIHMpCit7CisgIEdFbnVtVmFsdWUgKmVuOworICBnY2hhciAqZW5kcHRyID0gTlVMTDsKKyAgR0VudW1DbGFzcyAqa2xhc3MgPSAoR0VudW1DbGFzcyAqKSBnX3R5cGVfY2xhc3NfcmVmIChHX1ZBTFVFX1RZUEUgKGRlc3QpKTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoa2xhc3MsIEZBTFNFKTsKKyAgaWYgKCEoZW4gPSBnX2VudW1fZ2V0X3ZhbHVlX2J5X25hbWUgKGtsYXNzLCBzKSkpIHsKKyAgICBpZiAoIShlbiA9IGdfZW51bV9nZXRfdmFsdWVfYnlfbmljayAoa2xhc3MsIHMpKSkgeworICAgICAgZ2ludCBpID0gc3RydG9sIChzLCAmZW5kcHRyLCAwKTsKKworICAgICAgaWYgKGVuZHB0ciAmJiAqZW5kcHRyID09ICdcMCcpIHsKKyAgICAgICAgZW4gPSBnX2VudW1fZ2V0X3ZhbHVlIChrbGFzcywgaSk7CisgICAgICB9CisgICAgfQorICB9CisgIGdfdHlwZV9jbGFzc191bnJlZiAoa2xhc3MpOworCisgIC8qIG1pZ2h0IGJlIG9uZSBvZiB0aGUgY3VzdG9tIGZvcm1hdHMgcmVnaXN0ZXJlZCBsYXRlciAqLworICBpZiAoR19VTkxJS0VMWSAoZW4gPT0gTlVMTCAmJiBHX1ZBTFVFX1RZUEUgKGRlc3QpID09IEdTVF9UWVBFX0ZPUk1BVCkpIHsKKyAgICBHVmFsdWUgcmVzID0geyAwLCB9OworICAgIGNvbnN0IEdzdEZvcm1hdERlZmluaXRpb24gKmZvcm1hdF9kZWY7CisgICAgR3N0SXRlcmF0b3IgKml0ZXI7CisgICAgZ2Jvb2xlYW4gZm91bmQ7CisKKyAgICBpdGVyID0gZ3N0X2Zvcm1hdF9pdGVyYXRlX2RlZmluaXRpb25zICgpOworCisgICAgZm91bmQgPSBnc3RfaXRlcmF0b3JfZmluZF9jdXN0b20gKGl0ZXIsCisgICAgICAgIChHQ29tcGFyZUZ1bmMpIGdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9lbnVtX2l0ZXJfY21wLCAmcmVzLCAoZ3BvaW50ZXIpIHMpOworCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZvdW5kLCBGQUxTRSk7CisgICAgZm9ybWF0X2RlZiA9IGdfdmFsdWVfZ2V0X3BvaW50ZXIgKCZyZXMpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmb3JtYXRfZGVmICE9IE5VTEwsIEZBTFNFKTsKKyAgICBnX3ZhbHVlX3NldF9lbnVtIChkZXN0LCAoZ2ludCkgZm9ybWF0X2RlZi0+dmFsdWUpOworICAgIGdfdmFsdWVfdW5zZXQgKCZyZXMpOworICAgIGdzdF9pdGVyYXRvcl9mcmVlIChpdGVyKTsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlbiwgRkFMU0UpOworICBnX3ZhbHVlX3NldF9lbnVtIChkZXN0LCBlbi0+dmFsdWUpOworICByZXR1cm4gVFJVRTsKK30KKworLyoqKioqKioqCisgKiBmbGFncyAqCisgKioqKioqKiovCisKKy8qIHdlIGp1c3QgY29tcGFyZSB0aGUgdmFsdWUgaGVyZSAqLworc3RhdGljIGdpbnQKK2dzdF92YWx1ZV9jb21wYXJlX2ZsYWdzIChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKK3sKKyAgZ3VpbnQgZmwxLCBmbDI7CisgIEdGbGFnc0NsYXNzICprbGFzczEgPQorICAgICAgKEdGbGFnc0NsYXNzICopIGdfdHlwZV9jbGFzc19yZWYgKEdfVkFMVUVfVFlQRSAodmFsdWUxKSk7CisgIEdGbGFnc0NsYXNzICprbGFzczIgPQorICAgICAgKEdGbGFnc0NsYXNzICopIGdfdHlwZV9jbGFzc19yZWYgKEdfVkFMVUVfVFlQRSAodmFsdWUyKSk7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGtsYXNzMSwgR1NUX1ZBTFVFX1VOT1JERVJFRCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChrbGFzczIsIEdTVF9WQUxVRV9VTk9SREVSRUQpOworICBmbDEgPSBnX3ZhbHVlX2dldF9mbGFncyAodmFsdWUxKTsKKyAgZmwyID0gZ192YWx1ZV9nZXRfZmxhZ3MgKHZhbHVlMik7CisgIGdfdHlwZV9jbGFzc191bnJlZiAoa2xhc3MxKTsKKyAgZ190eXBlX2NsYXNzX3VucmVmIChrbGFzczIpOworICBpZiAoZmwxIDwgZmwyKQorICAgIHJldHVybiBHU1RfVkFMVUVfTEVTU19USEFOOworICBpZiAoZmwxID4gZmwyKQorICAgIHJldHVybiBHU1RfVkFMVUVfR1JFQVRFUl9USEFOOworCisgIHJldHVybiBHU1RfVkFMVUVfRVFVQUw7Cit9CisKKy8qIHRoZSBkaWZmZXJlbnQgZmxhZ3MgYXJlIHNlcmlhbGl6ZWQgc2VwYXJhdGVkIHdpdGggYSArICovCitzdGF0aWMgZ2NoYXIgKgorZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9mbGFncyAoY29uc3QgR1ZhbHVlICogdmFsdWUpCit7CisgIGd1aW50IGZsYWdzOworICBHRmxhZ3NWYWx1ZSAqZmw7CisgIEdGbGFnc0NsYXNzICprbGFzcyA9IChHRmxhZ3NDbGFzcyAqKSBnX3R5cGVfY2xhc3NfcmVmIChHX1ZBTFVFX1RZUEUgKHZhbHVlKSk7CisgIGdjaGFyICpyZXN1bHQsICp0bXA7CisgIGdib29sZWFuIGZpcnN0ID0gVFJVRTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoa2xhc3MsIE5VTEwpOworCisgIGZsYWdzID0gZ192YWx1ZV9nZXRfZmxhZ3MgKHZhbHVlKTsKKworICAvKiBpZiBubyBmbGFncyBhcmUgc2V0LCB0cnkgdG8gc2VyaWFsaXplIHRvIHRoZSBfTk9ORSBzdHJpbmcgKi8KKyAgaWYgKCFmbGFncykgeworICAgIGZsID0gZ19mbGFnc19nZXRfZmlyc3RfdmFsdWUgKGtsYXNzLCBmbGFncyk7CisgICAgcmV0dXJuIGdfc3RyZHVwIChmbC0+dmFsdWVfbmFtZSk7CisgIH0KKworICAvKiBzb21lIGZsYWdzIGFyZSBzZXQsIHNvIHNlcmlhbGl6ZSBvbmUgYnkgb25lICovCisgIHJlc3VsdCA9IGdfc3RyZHVwICgiIik7CisgIHdoaWxlIChmbGFncykgeworICAgIGZsID0gZ19mbGFnc19nZXRfZmlyc3RfdmFsdWUgKGtsYXNzLCBmbGFncyk7CisgICAgaWYgKGZsICE9IE5VTEwpIHsKKyAgICAgIHRtcCA9IGdfc3RyY29uY2F0IChyZXN1bHQsIChmaXJzdCA/ICIiIDogIisiKSwgZmwtPnZhbHVlX25hbWUsIE5VTEwpOworICAgICAgZ19mcmVlIChyZXN1bHQpOworICAgICAgcmVzdWx0ID0gdG1wOworICAgICAgZmlyc3QgPSBGQUxTRTsKKworICAgICAgLyogY2xlYXIgZmxhZyAqLworICAgICAgZmxhZ3MgJj0gfmZsLT52YWx1ZTsKKyAgICB9CisgIH0KKyAgZ190eXBlX2NsYXNzX3VucmVmIChrbGFzcyk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfdmFsdWVfZGVzZXJpYWxpemVfZmxhZ3MgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IGdjaGFyICogcykKK3sKKyAgR0ZsYWdzVmFsdWUgKmZsOworICBnY2hhciAqZW5kcHRyID0gTlVMTDsKKyAgR0ZsYWdzQ2xhc3MgKmtsYXNzID0gKEdGbGFnc0NsYXNzICopIGdfdHlwZV9jbGFzc19yZWYgKEdfVkFMVUVfVFlQRSAoZGVzdCkpOworICBnY2hhciAqKnNwbGl0OworICBndWludCBmbGFnczsKKyAgZ2ludCBpOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChrbGFzcywgRkFMU0UpOworCisgIC8qIHNwbGl0IGludG8gcGFydHMgZGVsaW1pdGVkIHdpdGggKyAqLworICBzcGxpdCA9IGdfc3Ryc3BsaXQgKHMsICIrIiwgMCk7CisKKyAgZmxhZ3MgPSAwOworICBpID0gMDsKKyAgLyogbG9vcCBvdmVyIGVhY2ggcGFydCAqLworICB3aGlsZSAoc3BsaXRbaV0pIHsKKyAgICBpZiAoIShmbCA9IGdfZmxhZ3NfZ2V0X3ZhbHVlX2J5X25hbWUgKGtsYXNzLCBzcGxpdFtpXSkpKSB7CisgICAgICBpZiAoIShmbCA9IGdfZmxhZ3NfZ2V0X3ZhbHVlX2J5X25pY2sgKGtsYXNzLCBzcGxpdFtpXSkpKSB7CisgICAgICAgIGdpbnQgdmFsID0gc3RydG9sIChzcGxpdFtpXSwgJmVuZHB0ciwgMCk7CisKKyAgICAgICAgLyoganVzdCBvciBudW1lcmljIHZhbHVlICovCisgICAgICAgIGlmIChlbmRwdHIgJiYgKmVuZHB0ciA9PSAnXDAnKSB7CisgICAgICAgICAgZmxhZ3MgfD0gdmFsOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGlmIChmbCkgeworICAgICAgZmxhZ3MgfD0gZmwtPnZhbHVlOworICAgIH0KKyAgICBpKys7CisgIH0KKyAgZ19zdHJmcmVldiAoc3BsaXQpOworICBnX3R5cGVfY2xhc3NfdW5yZWYgKGtsYXNzKTsKKyAgZ192YWx1ZV9zZXRfZmxhZ3MgKGRlc3QsIGZsYWdzKTsKKworICByZXR1cm4gVFJVRTsKK30KKworLyoqKioqKioqKgorICogdW5pb24gKgorICoqKioqKioqKi8KKworc3RhdGljIGdib29sZWFuCitnc3RfdmFsdWVfdW5pb25faW50X2ludF9yYW5nZSAoR1ZhbHVlICogZGVzdCwgY29uc3QgR1ZhbHVlICogc3JjMSwKKyAgICBjb25zdCBHVmFsdWUgKiBzcmMyKQoreworICBpZiAoc3JjMi0+ZGF0YVswXS52X2ludCA8PSBzcmMxLT5kYXRhWzBdLnZfaW50ICYmCisgICAgICBzcmMyLT5kYXRhWzFdLnZfaW50ID49IHNyYzEtPmRhdGFbMF0udl9pbnQpIHsKKyAgICBnc3RfdmFsdWVfaW5pdF9hbmRfY29weSAoZGVzdCwgc3JjMik7CisgICAgcmV0dXJuIFRSVUU7CisgIH0KKyAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF92YWx1ZV91bmlvbl9pbnRfcmFuZ2VfaW50X3JhbmdlIChHVmFsdWUgKiBkZXN0LCBjb25zdCBHVmFsdWUgKiBzcmMxLAorICAgIGNvbnN0IEdWYWx1ZSAqIHNyYzIpCit7CisgIGdpbnQgbWluOworICBnaW50IG1heDsKKworICBtaW4gPSBNQVggKHNyYzEtPmRhdGFbMF0udl9pbnQsIHNyYzItPmRhdGFbMF0udl9pbnQpOworICBtYXggPSBNSU4gKHNyYzEtPmRhdGFbMV0udl9pbnQsIHNyYzItPmRhdGFbMV0udl9pbnQpOworCisgIGlmIChtaW4gPD0gbWF4KSB7CisgICAgZ192YWx1ZV9pbml0IChkZXN0LCBHU1RfVFlQRV9JTlRfUkFOR0UpOworICAgIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlIChkZXN0LAorICAgICAgICBNSU4gKHNyYzEtPmRhdGFbMF0udl9pbnQsIHNyYzItPmRhdGFbMF0udl9pbnQpLAorICAgICAgICBNQVggKHNyYzEtPmRhdGFbMV0udl9pbnQsIHNyYzItPmRhdGFbMV0udl9pbnQpKTsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorCisgIHJldHVybiBGQUxTRTsKK30KKworLyoqKioqKioqKioqKioqKioKKyAqIGludGVyc2VjdGlvbiAqCisgKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGdib29sZWFuCitnc3RfdmFsdWVfaW50ZXJzZWN0X2ludF9pbnRfcmFuZ2UgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IEdWYWx1ZSAqIHNyYzEsCisgICAgY29uc3QgR1ZhbHVlICogc3JjMikKK3sKKyAgaWYgKHNyYzItPmRhdGFbMF0udl9pbnQgPD0gc3JjMS0+ZGF0YVswXS52X2ludCAmJgorICAgICAgc3JjMi0+ZGF0YVsxXS52X2ludCA+PSBzcmMxLT5kYXRhWzBdLnZfaW50KSB7CisgICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKGRlc3QsIHNyYzEpOworICAgIHJldHVybiBUUlVFOworICB9CisKKyAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF92YWx1ZV9pbnRlcnNlY3RfaW50X3JhbmdlX2ludF9yYW5nZSAoR1ZhbHVlICogZGVzdCwgY29uc3QgR1ZhbHVlICogc3JjMSwKKyAgICBjb25zdCBHVmFsdWUgKiBzcmMyKQoreworICBnaW50IG1pbjsKKyAgZ2ludCBtYXg7CisKKyAgbWluID0gTUFYIChzcmMxLT5kYXRhWzBdLnZfaW50LCBzcmMyLT5kYXRhWzBdLnZfaW50KTsKKyAgbWF4ID0gTUlOIChzcmMxLT5kYXRhWzFdLnZfaW50LCBzcmMyLT5kYXRhWzFdLnZfaW50KTsKKworICBpZiAobWluIDwgbWF4KSB7CisgICAgZ192YWx1ZV9pbml0IChkZXN0LCBHU1RfVFlQRV9JTlRfUkFOR0UpOworICAgIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlIChkZXN0LCBtaW4sIG1heCk7CisgICAgcmV0dXJuIFRSVUU7CisgIH0KKyAgaWYgKG1pbiA9PSBtYXgpIHsKKyAgICBnX3ZhbHVlX2luaXQgKGRlc3QsIEdfVFlQRV9JTlQpOworICAgIGdfdmFsdWVfc2V0X2ludCAoZGVzdCwgbWluKTsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorCisgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfdmFsdWVfaW50ZXJzZWN0X2ludDY0X2ludDY0X3JhbmdlIChHVmFsdWUgKiBkZXN0LCBjb25zdCBHVmFsdWUgKiBzcmMxLAorICAgIGNvbnN0IEdWYWx1ZSAqIHNyYzIpCit7CisgIGlmIChzcmMyLT5kYXRhWzBdLnZfaW50NjQgPD0gc3JjMS0+ZGF0YVswXS52X2ludDY0ICYmCisgICAgICBzcmMyLT5kYXRhWzFdLnZfaW50NjQgPj0gc3JjMS0+ZGF0YVswXS52X2ludDY0KSB7CisgICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKGRlc3QsIHNyYzEpOworICAgIHJldHVybiBUUlVFOworICB9CisKKyAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF92YWx1ZV9pbnRlcnNlY3RfaW50NjRfcmFuZ2VfaW50NjRfcmFuZ2UgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IEdWYWx1ZSAqIHNyYzEsCisgICAgY29uc3QgR1ZhbHVlICogc3JjMikKK3sKKyAgZ2ludDY0IG1pbjsKKyAgZ2ludDY0IG1heDsKKworICBtaW4gPSBNQVggKHNyYzEtPmRhdGFbMF0udl9pbnQ2NCwgc3JjMi0+ZGF0YVswXS52X2ludDY0KTsKKyAgbWF4ID0gTUlOIChzcmMxLT5kYXRhWzFdLnZfaW50NjQsIHNyYzItPmRhdGFbMV0udl9pbnQ2NCk7CisKKyAgaWYgKG1pbiA8IG1heCkgeworICAgIGdfdmFsdWVfaW5pdCAoZGVzdCwgR1NUX1RZUEVfSU5UNjRfUkFOR0UpOworICAgIGdzdF92YWx1ZV9zZXRfaW50NjRfcmFuZ2UgKGRlc3QsIG1pbiwgbWF4KTsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorICBpZiAobWluID09IG1heCkgeworICAgIGdfdmFsdWVfaW5pdCAoZGVzdCwgR19UWVBFX0lOVDY0KTsKKyAgICBnX3ZhbHVlX3NldF9pbnQ2NCAoZGVzdCwgbWluKTsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorCisgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfdmFsdWVfaW50ZXJzZWN0X2RvdWJsZV9kb3VibGVfcmFuZ2UgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IEdWYWx1ZSAqIHNyYzEsCisgICAgY29uc3QgR1ZhbHVlICogc3JjMikKK3sKKyAgaWYgKHNyYzItPmRhdGFbMF0udl9kb3VibGUgPD0gc3JjMS0+ZGF0YVswXS52X2RvdWJsZSAmJgorICAgICAgc3JjMi0+ZGF0YVsxXS52X2RvdWJsZSA+PSBzcmMxLT5kYXRhWzBdLnZfZG91YmxlKSB7CisgICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKGRlc3QsIHNyYzEpOworICAgIHJldHVybiBUUlVFOworICB9CisKKyAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF92YWx1ZV9pbnRlcnNlY3RfZG91YmxlX3JhbmdlX2RvdWJsZV9yYW5nZSAoR1ZhbHVlICogZGVzdCwKKyAgICBjb25zdCBHVmFsdWUgKiBzcmMxLCBjb25zdCBHVmFsdWUgKiBzcmMyKQoreworICBnZG91YmxlIG1pbjsKKyAgZ2RvdWJsZSBtYXg7CisKKyAgbWluID0gTUFYIChzcmMxLT5kYXRhWzBdLnZfZG91YmxlLCBzcmMyLT5kYXRhWzBdLnZfZG91YmxlKTsKKyAgbWF4ID0gTUlOIChzcmMxLT5kYXRhWzFdLnZfZG91YmxlLCBzcmMyLT5kYXRhWzFdLnZfZG91YmxlKTsKKworICBpZiAobWluIDwgbWF4KSB7CisgICAgZ192YWx1ZV9pbml0IChkZXN0LCBHU1RfVFlQRV9ET1VCTEVfUkFOR0UpOworICAgIGdzdF92YWx1ZV9zZXRfZG91YmxlX3JhbmdlIChkZXN0LCBtaW4sIG1heCk7CisgICAgcmV0dXJuIFRSVUU7CisgIH0KKyAgaWYgKG1pbiA9PSBtYXgpIHsKKyAgICBnX3ZhbHVlX2luaXQgKGRlc3QsIEdfVFlQRV9ET1VCTEUpOworICAgIGdfdmFsdWVfc2V0X2ludCAoZGVzdCwgKGludCkgbWluKTsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorCisgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfdmFsdWVfaW50ZXJzZWN0X2xpc3QgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMSwKKyAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZTIpCit7CisgIGd1aW50IGksIHNpemU7CisgIEdWYWx1ZSBpbnRlcnNlY3Rpb24gPSB7IDAsIH07CisgIGdib29sZWFuIHJldCA9IEZBTFNFOworCisgIHNpemUgPSBWQUxVRV9MSVNUX1NJWkUgKHZhbHVlMSk7CisgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICBjb25zdCBHVmFsdWUgKmN1ciA9IFZBTFVFX0xJU1RfR0VUX1ZBTFVFICh2YWx1ZTEsIGkpOworCisgICAgaWYgKGdzdF92YWx1ZV9pbnRlcnNlY3QgKCZpbnRlcnNlY3Rpb24sIGN1ciwgdmFsdWUyKSkgeworICAgICAgLyogYXBwZW5kIHZhbHVlICovCisgICAgICBpZiAoIXJldCkgeworICAgICAgICBnc3RfdmFsdWVfaW5pdF9hbmRfY29weSAoZGVzdCwgJmludGVyc2VjdGlvbik7CisgICAgICAgIHJldCA9IFRSVUU7CisgICAgICB9IGVsc2UgaWYgKEdTVF9WQUxVRV9IT0xEU19MSVNUIChkZXN0KSkgeworICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKGRlc3QsICZpbnRlcnNlY3Rpb24pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgR1ZhbHVlIHRlbXAgPSB7IDAsIH07CisKKyAgICAgICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKCZ0ZW1wLCBkZXN0KTsKKyAgICAgICAgZ192YWx1ZV91bnNldCAoZGVzdCk7CisgICAgICAgIGdzdF92YWx1ZV9saXN0X2NvbmNhdCAoZGVzdCwgJnRlbXAsICZpbnRlcnNlY3Rpb24pOworICAgICAgICBnX3ZhbHVlX3Vuc2V0ICgmdGVtcCk7CisgICAgICB9CisgICAgICBnX3ZhbHVlX3Vuc2V0ICgmaW50ZXJzZWN0aW9uKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF92YWx1ZV9pbnRlcnNlY3RfYXJyYXkgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IEdWYWx1ZSAqIHNyYzEsCisgICAgY29uc3QgR1ZhbHVlICogc3JjMikKK3sKKyAgZ3VpbnQgc2l6ZTsKKyAgZ3VpbnQgbjsKKyAgR1ZhbHVlIHZhbCA9IHsgMCB9OworCisgIC8qIG9ubHkgd29ya3Mgb24gc2ltaWxhci1zaXplZCBhcnJheXMgKi8KKyAgc2l6ZSA9IGdzdF92YWx1ZV9hcnJheV9nZXRfc2l6ZSAoc3JjMSk7CisgIGlmIChzaXplICE9IGdzdF92YWx1ZV9hcnJheV9nZXRfc2l6ZSAoc3JjMikpCisgICAgcmV0dXJuIEZBTFNFOworICBnX3ZhbHVlX2luaXQgKGRlc3QsIEdTVF9UWVBFX0FSUkFZKTsKKworICBmb3IgKG4gPSAwOyBuIDwgc2l6ZTsgbisrKSB7CisgICAgaWYgKCFnc3RfdmFsdWVfaW50ZXJzZWN0ICgmdmFsLCBnc3RfdmFsdWVfYXJyYXlfZ2V0X3ZhbHVlIChzcmMxLCBuKSwKKyAgICAgICAgICAgIGdzdF92YWx1ZV9hcnJheV9nZXRfdmFsdWUgKHNyYzIsIG4pKSkgeworICAgICAgZ192YWx1ZV91bnNldCAoZGVzdCk7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGdzdF92YWx1ZV9hcnJheV9hcHBlbmRfdmFsdWUgKGRlc3QsICZ2YWwpOworICAgIGdfdmFsdWVfdW5zZXQgKCZ2YWwpOworICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3ZhbHVlX2ludGVyc2VjdF9mcmFjdGlvbl9mcmFjdGlvbl9yYW5nZSAoR1ZhbHVlICogZGVzdCwgY29uc3QgR1ZhbHVlICogc3JjMSwKKyAgICBjb25zdCBHVmFsdWUgKiBzcmMyKQoreworICBnaW50IHJlczEsIHJlczI7CisgIEdWYWx1ZSAqdmFsczsKKyAgR3N0VmFsdWVDb21wYXJlRnVuYyBjb21wYXJlOworCisgIHZhbHMgPSBzcmMyLT5kYXRhWzBdLnZfcG9pbnRlcjsKKworICBpZiAodmFscyA9PSBOVUxMKQorICAgIHJldHVybiBGQUxTRTsKKworICBpZiAoKGNvbXBhcmUgPSBnc3RfdmFsdWVfZ2V0X2NvbXBhcmVfZnVuYyAoc3JjMSkpKSB7CisgICAgcmVzMSA9IGdzdF92YWx1ZV9jb21wYXJlX3dpdGhfZnVuYyAoJnZhbHNbMF0sIHNyYzEsIGNvbXBhcmUpOworICAgIHJlczIgPSBnc3RfdmFsdWVfY29tcGFyZV93aXRoX2Z1bmMgKCZ2YWxzWzFdLCBzcmMxLCBjb21wYXJlKTsKKworICAgIGlmICgocmVzMSA9PSBHU1RfVkFMVUVfRVFVQUwgfHwgcmVzMSA9PSBHU1RfVkFMVUVfTEVTU19USEFOKSAmJgorICAgICAgICAocmVzMiA9PSBHU1RfVkFMVUVfRVFVQUwgfHwgcmVzMiA9PSBHU1RfVkFMVUVfR1JFQVRFUl9USEFOKSkgeworICAgICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKGRlc3QsIHNyYzEpOworICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICB9CisKKyAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF92YWx1ZV9pbnRlcnNlY3RfZnJhY3Rpb25fcmFuZ2VfZnJhY3Rpb25fcmFuZ2UgKEdWYWx1ZSAqIGRlc3QsCisgICAgY29uc3QgR1ZhbHVlICogc3JjMSwgY29uc3QgR1ZhbHVlICogc3JjMikKK3sKKyAgR1ZhbHVlICptaW47CisgIEdWYWx1ZSAqbWF4OworICBnaW50IHJlczsKKyAgR1ZhbHVlICp2YWxzMSwgKnZhbHMyOworICBHc3RWYWx1ZUNvbXBhcmVGdW5jIGNvbXBhcmU7CisKKyAgdmFsczEgPSBzcmMxLT5kYXRhWzBdLnZfcG9pbnRlcjsKKyAgdmFsczIgPSBzcmMyLT5kYXRhWzBdLnZfcG9pbnRlcjsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZhbHMxICE9IE5VTEwgJiYgdmFsczIgIT0gTlVMTCwgRkFMU0UpOworCisgIGlmICgoY29tcGFyZSA9IGdzdF92YWx1ZV9nZXRfY29tcGFyZV9mdW5jICgmdmFsczFbMF0pKSkgeworICAgIC8qIG1pbiA9IE1BWCAoc3JjMS5zdGFydCwgc3JjMi5zdGFydCkgKi8KKyAgICByZXMgPSBnc3RfdmFsdWVfY29tcGFyZV93aXRoX2Z1bmMgKCZ2YWxzMVswXSwgJnZhbHMyWzBdLCBjb21wYXJlKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVzICE9IEdTVF9WQUxVRV9VTk9SREVSRUQsIEZBTFNFKTsKKyAgICBpZiAocmVzID09IEdTVF9WQUxVRV9MRVNTX1RIQU4pCisgICAgICBtaW4gPSAmdmFsczJbMF07ICAgICAgICAgIC8qIFRha2UgdGhlIG1heCBvZiB0aGUgMiAqLworICAgIGVsc2UKKyAgICAgIG1pbiA9ICZ2YWxzMVswXTsKKworICAgIC8qIG1heCA9IE1JTiAoc3JjMS5lbmQsIHNyYzIuZW5kKSAqLworICAgIHJlcyA9IGdzdF92YWx1ZV9jb21wYXJlX3dpdGhfZnVuYyAoJnZhbHMxWzFdLCAmdmFsczJbMV0sIGNvbXBhcmUpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZXMgIT0gR1NUX1ZBTFVFX1VOT1JERVJFRCwgRkFMU0UpOworICAgIGlmIChyZXMgPT0gR1NUX1ZBTFVFX0dSRUFURVJfVEhBTikKKyAgICAgIG1heCA9ICZ2YWxzMlsxXTsgICAgICAgICAgLyogVGFrZSB0aGUgbWluIG9mIHRoZSAyICovCisgICAgZWxzZQorICAgICAgbWF4ID0gJnZhbHMxWzFdOworCisgICAgcmVzID0gZ3N0X3ZhbHVlX2NvbXBhcmVfd2l0aF9mdW5jIChtaW4sIG1heCwgY29tcGFyZSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHJlcyAhPSBHU1RfVkFMVUVfVU5PUkRFUkVELCBGQUxTRSk7CisgICAgaWYgKHJlcyA9PSBHU1RfVkFMVUVfTEVTU19USEFOKSB7CisgICAgICBnX3ZhbHVlX2luaXQgKGRlc3QsIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFKTsKKyAgICAgIHZhbHMxID0gZGVzdC0+ZGF0YVswXS52X3BvaW50ZXI7CisgICAgICBnX3ZhbHVlX2NvcHkgKG1pbiwgJnZhbHMxWzBdKTsKKyAgICAgIGdfdmFsdWVfY29weSAobWF4LCAmdmFsczFbMV0pOworICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGlmIChyZXMgPT0gR1NUX1ZBTFVFX0VRVUFMKSB7CisgICAgICBnc3RfdmFsdWVfaW5pdF9hbmRfY29weSAoZGVzdCwgbWluKTsKKyAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgfQorCisgIHJldHVybiBGQUxTRTsKK30KKworLyoqKioqKioqKioqKioqKgorICogc3VidHJhY3Rpb24gKgorICoqKioqKioqKioqKioqKi8KKworc3RhdGljIGdib29sZWFuCitnc3RfdmFsdWVfc3VidHJhY3RfaW50X2ludF9yYW5nZSAoR1ZhbHVlICogZGVzdCwgY29uc3QgR1ZhbHVlICogbWludWVuZCwKKyAgICBjb25zdCBHVmFsdWUgKiBzdWJ0cmFoZW5kKQoreworICBnaW50IG1pbiA9IGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAoc3VidHJhaGVuZCk7CisgIGdpbnQgbWF4ID0gZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWF4IChzdWJ0cmFoZW5kKTsKKyAgZ2ludCB2YWwgPSBnX3ZhbHVlX2dldF9pbnQgKG1pbnVlbmQpOworCisgIC8qIHN1YnRyYWN0aW5nIGEgcmFuZ2UgZnJvbSBhbiBpbnQgb25seSB3b3JrcyBpZiB0aGUgaW50IGlzIG5vdCBpbiB0aGUKKyAgICogcmFuZ2UgKi8KKyAgaWYgKHZhbCA8IG1pbiB8fCB2YWwgPiBtYXgpIHsKKyAgICAvKiBhbmQgdGhlIHJlc3VsdCBpcyB0aGUgaW50ICovCisgICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKGRlc3QsIG1pbnVlbmQpOworICAgIHJldHVybiBUUlVFOworICB9CisgIHJldHVybiBGQUxTRTsKK30KKworLyogY3JlYXRlcyBhIG5ldyBpbnQgcmFuZ2UgYmFzZWQgb24gaW5wdXQgdmFsdWVzLgorICovCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF92YWx1ZV9jcmVhdGVfbmV3X3JhbmdlIChHVmFsdWUgKiBkZXN0LCBnaW50IG1pbjEsIGdpbnQgbWF4MSwgZ2ludCBtaW4yLAorICAgIGdpbnQgbWF4MikKK3sKKyAgR1ZhbHVlIHYxID0geyAwLCB9OworICBHVmFsdWUgdjIgPSB7IDAsIH07CisgIEdWYWx1ZSAqcHYxLCAqcHYyOyAgICAgICAgICAgIC8qIHllYWgsIGh1bmdhcmlhbiEgKi8KKworICBpZiAobWluMSA8PSBtYXgxICYmIG1pbjIgPD0gbWF4MikgeworICAgIHB2MSA9ICZ2MTsKKyAgICBwdjIgPSAmdjI7CisgIH0gZWxzZSBpZiAobWluMSA8PSBtYXgxKSB7CisgICAgcHYxID0gZGVzdDsKKyAgICBwdjIgPSBOVUxMOworICB9IGVsc2UgaWYgKG1pbjIgPD0gbWF4MikgeworICAgIHB2MSA9IE5VTEw7CisgICAgcHYyID0gZGVzdDsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKworICBpZiAobWluMSA8IG1heDEpIHsKKyAgICBnX3ZhbHVlX2luaXQgKHB2MSwgR1NUX1RZUEVfSU5UX1JBTkdFKTsKKyAgICBnc3RfdmFsdWVfc2V0X2ludF9yYW5nZSAocHYxLCBtaW4xLCBtYXgxKTsKKyAgfSBlbHNlIGlmIChtaW4xID09IG1heDEpIHsKKyAgICBnX3ZhbHVlX2luaXQgKHB2MSwgR19UWVBFX0lOVCk7CisgICAgZ192YWx1ZV9zZXRfaW50IChwdjEsIG1pbjEpOworICB9CisgIGlmIChtaW4yIDwgbWF4MikgeworICAgIGdfdmFsdWVfaW5pdCAocHYyLCBHU1RfVFlQRV9JTlRfUkFOR0UpOworICAgIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlIChwdjIsIG1pbjIsIG1heDIpOworICB9IGVsc2UgaWYgKG1pbjIgPT0gbWF4MikgeworICAgIGdfdmFsdWVfaW5pdCAocHYyLCBHX1RZUEVfSU5UKTsKKyAgICBnX3ZhbHVlX3NldF9pbnQgKHB2MiwgbWluMik7CisgIH0KKworICBpZiAobWluMSA8PSBtYXgxICYmIG1pbjIgPD0gbWF4MikgeworICAgIGdzdF92YWx1ZV9saXN0X2NvbmNhdCAoZGVzdCwgcHYxLCBwdjIpOworICAgIGdfdmFsdWVfdW5zZXQgKHB2MSk7CisgICAgZ192YWx1ZV91bnNldCAocHYyKTsKKyAgfQorICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfdmFsdWVfc3VidHJhY3RfaW50X3JhbmdlX2ludCAoR1ZhbHVlICogZGVzdCwgY29uc3QgR1ZhbHVlICogbWludWVuZCwKKyAgICBjb25zdCBHVmFsdWUgKiBzdWJ0cmFoZW5kKQoreworICBnaW50IG1pbiA9IGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAobWludWVuZCk7CisgIGdpbnQgbWF4ID0gZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWF4IChtaW51ZW5kKTsKKyAgZ2ludCB2YWwgPSBnX3ZhbHVlX2dldF9pbnQgKHN1YnRyYWhlbmQpOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtaW4gPCBtYXgsIEZBTFNFKTsKKworICAvKiB2YWx1ZSBpcyBvdXRzaWRlIG9mIHRoZSByYW5nZSwgcmV0dXJuIHJhbmdlIHVuY2hhbmdlZCAqLworICBpZiAodmFsIDwgbWluIHx8IHZhbCA+IG1heCkgeworICAgIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5IChkZXN0LCBtaW51ZW5kKTsKKyAgICByZXR1cm4gVFJVRTsKKyAgfSBlbHNlIHsKKyAgICAvKiBtYXggbXVzdCBiZSBNQVhJTlQgdG9vIGFzIHZhbCA8PSBtYXggKi8KKyAgICBpZiAodmFsID09IEdfTUFYSU5UKSB7CisgICAgICBtYXgtLTsKKyAgICAgIHZhbC0tOworICAgIH0KKyAgICAvKiBtaW4gbXVzdCBiZSBNSU5JTlQgdG9vIGFzIHZhbCA+PSBtYXggKi8KKyAgICBpZiAodmFsID09IEdfTUlOSU5UKSB7CisgICAgICBtaW4rKzsKKyAgICAgIHZhbCsrOworICAgIH0KKyAgICBnc3RfdmFsdWVfY3JlYXRlX25ld19yYW5nZSAoZGVzdCwgbWluLCB2YWwgLSAxLCB2YWwgKyAxLCBtYXgpOworICB9CisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF92YWx1ZV9zdWJ0cmFjdF9pbnRfcmFuZ2VfaW50X3JhbmdlIChHVmFsdWUgKiBkZXN0LCBjb25zdCBHVmFsdWUgKiBtaW51ZW5kLAorICAgIGNvbnN0IEdWYWx1ZSAqIHN1YnRyYWhlbmQpCit7CisgIGdpbnQgbWluMSA9IGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAobWludWVuZCk7CisgIGdpbnQgbWF4MSA9IGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heCAobWludWVuZCk7CisgIGdpbnQgbWluMiA9IGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAoc3VidHJhaGVuZCk7CisgIGdpbnQgbWF4MiA9IGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heCAoc3VidHJhaGVuZCk7CisKKyAgaWYgKG1heDIgPT0gR19NQVhJTlQgJiYgbWluMiA9PSBHX01JTklOVCkgeworICAgIHJldHVybiBGQUxTRTsKKyAgfSBlbHNlIGlmIChtYXgyID09IEdfTUFYSU5UKSB7CisgICAgcmV0dXJuIGdzdF92YWx1ZV9jcmVhdGVfbmV3X3JhbmdlIChkZXN0LCBtaW4xLCBNSU4gKG1pbjIgLSAxLCBtYXgxKSwgMSwgMCk7CisgIH0gZWxzZSBpZiAobWluMiA9PSBHX01JTklOVCkgeworICAgIHJldHVybiBnc3RfdmFsdWVfY3JlYXRlX25ld19yYW5nZSAoZGVzdCwgTUFYIChtYXgyICsgMSwgbWluMSksIG1heDEsIDEsIDApOworICB9IGVsc2UgeworICAgIHJldHVybiBnc3RfdmFsdWVfY3JlYXRlX25ld19yYW5nZSAoZGVzdCwgbWluMSwgTUlOIChtaW4yIC0gMSwgbWF4MSksCisgICAgICAgIE1BWCAobWF4MiArIDEsIG1pbjEpLCBtYXgxKTsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF92YWx1ZV9zdWJ0cmFjdF9pbnQ2NF9pbnQ2NF9yYW5nZSAoR1ZhbHVlICogZGVzdCwgY29uc3QgR1ZhbHVlICogbWludWVuZCwKKyAgICBjb25zdCBHVmFsdWUgKiBzdWJ0cmFoZW5kKQoreworICBnaW50NjQgbWluID0gZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9taW4gKHN1YnRyYWhlbmQpOworICBnaW50NjQgbWF4ID0gZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9tYXggKHN1YnRyYWhlbmQpOworICBnaW50NjQgdmFsID0gZ192YWx1ZV9nZXRfaW50NjQgKG1pbnVlbmQpOworCisgIC8qIHN1YnRyYWN0aW5nIGEgcmFuZ2UgZnJvbSBhbiBpbnQ2NCBvbmx5IHdvcmtzIGlmIHRoZSBpbnQ2NCBpcyBub3QgaW4gdGhlCisgICAqIHJhbmdlICovCisgIGlmICh2YWwgPCBtaW4gfHwgdmFsID4gbWF4KSB7CisgICAgLyogYW5kIHRoZSByZXN1bHQgaXMgdGhlIGludDY0ICovCisgICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKGRlc3QsIG1pbnVlbmQpOworICAgIHJldHVybiBUUlVFOworICB9CisgIHJldHVybiBGQUxTRTsKK30KKworLyogY3JlYXRlcyBhIG5ldyBpbnQ2NCByYW5nZSBiYXNlZCBvbiBpbnB1dCB2YWx1ZXMuCisgKi8KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3ZhbHVlX2NyZWF0ZV9uZXdfaW50NjRfcmFuZ2UgKEdWYWx1ZSAqIGRlc3QsIGdpbnQ2NCBtaW4xLCBnaW50NjQgbWF4MSwKKyAgICBnaW50NjQgbWluMiwgZ2ludDY0IG1heDIpCit7CisgIEdWYWx1ZSB2MSA9IHsgMCwgfTsKKyAgR1ZhbHVlIHYyID0geyAwLCB9OworICBHVmFsdWUgKnB2MSwgKnB2MjsgICAgICAgICAgICAvKiB5ZWFoLCBodW5nYXJpYW4hICovCisKKyAgaWYgKG1pbjEgPD0gbWF4MSAmJiBtaW4yIDw9IG1heDIpIHsKKyAgICBwdjEgPSAmdjE7CisgICAgcHYyID0gJnYyOworICB9IGVsc2UgaWYgKG1pbjEgPD0gbWF4MSkgeworICAgIHB2MSA9IGRlc3Q7CisgICAgcHYyID0gTlVMTDsKKyAgfSBlbHNlIGlmIChtaW4yIDw9IG1heDIpIHsKKyAgICBwdjEgPSBOVUxMOworICAgIHB2MiA9IGRlc3Q7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgaWYgKG1pbjEgPCBtYXgxKSB7CisgICAgZ192YWx1ZV9pbml0IChwdjEsIEdTVF9UWVBFX0lOVDY0X1JBTkdFKTsKKyAgICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlIChwdjEsIG1pbjEsIG1heDEpOworICB9IGVsc2UgaWYgKG1pbjEgPT0gbWF4MSkgeworICAgIGdfdmFsdWVfaW5pdCAocHYxLCBHX1RZUEVfSU5UNjQpOworICAgIGdfdmFsdWVfc2V0X2ludDY0IChwdjEsIG1pbjEpOworICB9CisgIGlmIChtaW4yIDwgbWF4MikgeworICAgIGdfdmFsdWVfaW5pdCAocHYyLCBHU1RfVFlQRV9JTlQ2NF9SQU5HRSk7CisgICAgZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZSAocHYyLCBtaW4yLCBtYXgyKTsKKyAgfSBlbHNlIGlmIChtaW4yID09IG1heDIpIHsKKyAgICBnX3ZhbHVlX2luaXQgKHB2MiwgR19UWVBFX0lOVDY0KTsKKyAgICBnX3ZhbHVlX3NldF9pbnQ2NCAocHYyLCBtaW4yKTsKKyAgfQorCisgIGlmIChtaW4xIDw9IG1heDEgJiYgbWluMiA8PSBtYXgyKSB7CisgICAgZ3N0X3ZhbHVlX2xpc3RfY29uY2F0IChkZXN0LCBwdjEsIHB2Mik7CisgICAgZ192YWx1ZV91bnNldCAocHYxKTsKKyAgICBnX3ZhbHVlX3Vuc2V0IChwdjIpOworICB9CisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF92YWx1ZV9zdWJ0cmFjdF9pbnQ2NF9yYW5nZV9pbnQ2NCAoR1ZhbHVlICogZGVzdCwgY29uc3QgR1ZhbHVlICogbWludWVuZCwKKyAgICBjb25zdCBHVmFsdWUgKiBzdWJ0cmFoZW5kKQoreworICBnaW50NjQgbWluID0gZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9taW4gKG1pbnVlbmQpOworICBnaW50NjQgbWF4ID0gZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9tYXggKG1pbnVlbmQpOworICBnaW50NjQgdmFsID0gZ192YWx1ZV9nZXRfaW50NjQgKHN1YnRyYWhlbmQpOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtaW4gPCBtYXgsIEZBTFNFKTsKKworICAvKiB2YWx1ZSBpcyBvdXRzaWRlIG9mIHRoZSByYW5nZSwgcmV0dXJuIHJhbmdlIHVuY2hhbmdlZCAqLworICBpZiAodmFsIDwgbWluIHx8IHZhbCA+IG1heCkgeworICAgIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5IChkZXN0LCBtaW51ZW5kKTsKKyAgICByZXR1cm4gVFJVRTsKKyAgfSBlbHNlIHsKKyAgICAvKiBtYXggbXVzdCBiZSBNQVhJTlQ2NCB0b28gYXMgdmFsIDw9IG1heCAqLworICAgIGlmICh2YWwgPT0gR19NQVhJTlQ2NCkgeworICAgICAgbWF4LS07CisgICAgICB2YWwtLTsKKyAgICB9CisgICAgLyogbWluIG11c3QgYmUgTUlOSU5UNjQgdG9vIGFzIHZhbCA+PSBtYXggKi8KKyAgICBpZiAodmFsID09IEdfTUlOSU5UNjQpIHsKKyAgICAgIG1pbisrOworICAgICAgdmFsKys7CisgICAgfQorICAgIGdzdF92YWx1ZV9jcmVhdGVfbmV3X2ludDY0X3JhbmdlIChkZXN0LCBtaW4sIHZhbCAtIDEsIHZhbCArIDEsIG1heCk7CisgIH0KKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3ZhbHVlX3N1YnRyYWN0X2ludDY0X3JhbmdlX2ludDY0X3JhbmdlIChHVmFsdWUgKiBkZXN0LAorICAgIGNvbnN0IEdWYWx1ZSAqIG1pbnVlbmQsIGNvbnN0IEdWYWx1ZSAqIHN1YnRyYWhlbmQpCit7CisgIGdpbnQ2NCBtaW4xID0gZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9taW4gKG1pbnVlbmQpOworICBnaW50NjQgbWF4MSA9IGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWF4IChtaW51ZW5kKTsKKyAgZ2ludDY0IG1pbjIgPSBnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21pbiAoc3VidHJhaGVuZCk7CisgIGdpbnQ2NCBtYXgyID0gZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9tYXggKHN1YnRyYWhlbmQpOworCisgIGlmIChtYXgyID09IEdfTUFYSU5UNjQgJiYgbWluMiA9PSBHX01JTklOVDY0KSB7CisgICAgcmV0dXJuIEZBTFNFOworICB9IGVsc2UgaWYgKG1heDIgPT0gR19NQVhJTlQ2NCkgeworICAgIHJldHVybiBnc3RfdmFsdWVfY3JlYXRlX25ld19pbnQ2NF9yYW5nZSAoZGVzdCwgbWluMSwgTUlOIChtaW4yIC0gMSwgbWF4MSksCisgICAgICAgIDEsIDApOworICB9IGVsc2UgaWYgKG1pbjIgPT0gR19NSU5JTlQ2NCkgeworICAgIHJldHVybiBnc3RfdmFsdWVfY3JlYXRlX25ld19pbnQ2NF9yYW5nZSAoZGVzdCwgTUFYIChtYXgyICsgMSwgbWluMSksIG1heDEsCisgICAgICAgIDEsIDApOworICB9IGVsc2UgeworICAgIHJldHVybiBnc3RfdmFsdWVfY3JlYXRlX25ld19pbnQ2NF9yYW5nZSAoZGVzdCwgbWluMSwgTUlOIChtaW4yIC0gMSwgbWF4MSksCisgICAgICAgIE1BWCAobWF4MiArIDEsIG1pbjEpLCBtYXgxKTsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF92YWx1ZV9zdWJ0cmFjdF9kb3VibGVfZG91YmxlX3JhbmdlIChHVmFsdWUgKiBkZXN0LCBjb25zdCBHVmFsdWUgKiBtaW51ZW5kLAorICAgIGNvbnN0IEdWYWx1ZSAqIHN1YnRyYWhlbmQpCit7CisgIGdkb3VibGUgbWluID0gZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWluIChzdWJ0cmFoZW5kKTsKKyAgZ2RvdWJsZSBtYXggPSBnc3RfdmFsdWVfZ2V0X2RvdWJsZV9yYW5nZV9tYXggKHN1YnRyYWhlbmQpOworICBnZG91YmxlIHZhbCA9IGdfdmFsdWVfZ2V0X2RvdWJsZSAobWludWVuZCk7CisKKyAgaWYgKHZhbCA8IG1pbiB8fCB2YWwgPiBtYXgpIHsKKyAgICBnc3RfdmFsdWVfaW5pdF9hbmRfY29weSAoZGVzdCwgbWludWVuZCk7CisgICAgcmV0dXJuIFRSVUU7CisgIH0KKyAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF92YWx1ZV9zdWJ0cmFjdF9kb3VibGVfcmFuZ2VfZG91YmxlIChHVmFsdWUgKiBkZXN0LCBjb25zdCBHVmFsdWUgKiBtaW51ZW5kLAorICAgIGNvbnN0IEdWYWx1ZSAqIHN1YnRyYWhlbmQpCit7CisgIC8qIHNpbmNlIHdlIGRvbid0IGhhdmUgb3BlbiByYW5nZXMsIHdlIGNhbm5vdCBjcmVhdGUgYSBob2xlIGluCisgICAqIGEgZG91YmxlIHJhbmdlLiBXZSByZXR1cm4gdGhlIG9yaWdpbmFsIHJhbmdlICovCisgIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5IChkZXN0LCBtaW51ZW5kKTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3ZhbHVlX3N1YnRyYWN0X2RvdWJsZV9yYW5nZV9kb3VibGVfcmFuZ2UgKEdWYWx1ZSAqIGRlc3QsCisgICAgY29uc3QgR1ZhbHVlICogbWludWVuZCwgY29uc3QgR1ZhbHVlICogc3VidHJhaGVuZCkKK3sKKyAgLyogc2luY2Ugd2UgZG9uJ3QgaGF2ZSBvcGVuIHJhbmdlcywgd2UgaGF2ZSB0byBhcHByb3hpbWF0ZSAqLworICAvKiBkb25lIGxpa2Ugd2l0aCBpbnRzICovCisgIGdkb3VibGUgbWluMSA9IGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21pbiAobWludWVuZCk7CisgIGdkb3VibGUgbWF4MiA9IGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21heCAobWludWVuZCk7CisgIGdkb3VibGUgbWF4MSA9IE1JTiAoZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWluIChzdWJ0cmFoZW5kKSwgbWF4Mik7CisgIGdkb3VibGUgbWluMiA9IE1BWCAoZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWF4IChzdWJ0cmFoZW5kKSwgbWluMSk7CisgIEdWYWx1ZSB2MSA9IHsgMCwgfTsKKyAgR1ZhbHVlIHYyID0geyAwLCB9OworICBHVmFsdWUgKnB2MSwgKnB2MjsgICAgICAgICAgICAvKiB5ZWFoLCBodW5nYXJpYW4hICovCisKKyAgaWYgKG1pbjEgPCBtYXgxICYmIG1pbjIgPCBtYXgyKSB7CisgICAgcHYxID0gJnYxOworICAgIHB2MiA9ICZ2MjsKKyAgfSBlbHNlIGlmIChtaW4xIDwgbWF4MSkgeworICAgIHB2MSA9IGRlc3Q7CisgICAgcHYyID0gTlVMTDsKKyAgfSBlbHNlIGlmIChtaW4yIDwgbWF4MikgeworICAgIHB2MSA9IE5VTEw7CisgICAgcHYyID0gZGVzdDsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKworICBpZiAobWluMSA8IG1heDEpIHsKKyAgICBnX3ZhbHVlX2luaXQgKHB2MSwgR1NUX1RZUEVfRE9VQkxFX1JBTkdFKTsKKyAgICBnc3RfdmFsdWVfc2V0X2RvdWJsZV9yYW5nZSAocHYxLCBtaW4xLCBtYXgxKTsKKyAgfQorICBpZiAobWluMiA8IG1heDIpIHsKKyAgICBnX3ZhbHVlX2luaXQgKHB2MiwgR1NUX1RZUEVfRE9VQkxFX1JBTkdFKTsKKyAgICBnc3RfdmFsdWVfc2V0X2RvdWJsZV9yYW5nZSAocHYyLCBtaW4yLCBtYXgyKTsKKyAgfQorCisgIGlmIChtaW4xIDwgbWF4MSAmJiBtaW4yIDwgbWF4MikgeworICAgIGdzdF92YWx1ZV9saXN0X2NvbmNhdCAoZGVzdCwgcHYxLCBwdjIpOworICAgIGdfdmFsdWVfdW5zZXQgKHB2MSk7CisgICAgZ192YWx1ZV91bnNldCAocHYyKTsKKyAgfQorICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfdmFsdWVfc3VidHJhY3RfZnJvbV9saXN0IChHVmFsdWUgKiBkZXN0LCBjb25zdCBHVmFsdWUgKiBtaW51ZW5kLAorICAgIGNvbnN0IEdWYWx1ZSAqIHN1YnRyYWhlbmQpCit7CisgIGd1aW50IGksIHNpemU7CisgIEdWYWx1ZSBzdWJ0cmFjdGlvbiA9IHsgMCwgfTsKKyAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7CisgIEdUeXBlIGx0eXBlOworCisgIGx0eXBlID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3R5cGUgKCk7CisKKyAgc2l6ZSA9IFZBTFVFX0xJU1RfU0laRSAobWludWVuZCk7CisgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICBjb25zdCBHVmFsdWUgKmN1ciA9IFZBTFVFX0xJU1RfR0VUX1ZBTFVFIChtaW51ZW5kLCBpKTsKKworICAgIGlmIChnc3RfdmFsdWVfc3VidHJhY3QgKCZzdWJ0cmFjdGlvbiwgY3VyLCBzdWJ0cmFoZW5kKSkgeworICAgICAgaWYgKCFyZXQpIHsKKyAgICAgICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKGRlc3QsICZzdWJ0cmFjdGlvbik7CisgICAgICAgIHJldCA9IFRSVUU7CisgICAgICB9IGVsc2UgaWYgKEdfVkFMVUVfSE9MRFMgKGRlc3QsIGx0eXBlKQorICAgICAgICAgICYmICFHX1ZBTFVFX0hPTERTICgmc3VidHJhY3Rpb24sIGx0eXBlKSkgeworICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKGRlc3QsICZzdWJ0cmFjdGlvbik7CisgICAgICB9IGVsc2UgeworICAgICAgICBHVmFsdWUgdGVtcCA9IHsgMCwgfTsKKworICAgICAgICBnc3RfdmFsdWVfaW5pdF9hbmRfY29weSAoJnRlbXAsIGRlc3QpOworICAgICAgICBnX3ZhbHVlX3Vuc2V0IChkZXN0KTsKKyAgICAgICAgZ3N0X3ZhbHVlX2xpc3RfY29uY2F0IChkZXN0LCAmdGVtcCwgJnN1YnRyYWN0aW9uKTsKKyAgICAgICAgZ192YWx1ZV91bnNldCAoJnRlbXApOworICAgICAgfQorICAgICAgZ192YWx1ZV91bnNldCAoJnN1YnRyYWN0aW9uKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfdmFsdWVfc3VidHJhY3RfbGlzdCAoR1ZhbHVlICogZGVzdCwgY29uc3QgR1ZhbHVlICogbWludWVuZCwKKyAgICBjb25zdCBHVmFsdWUgKiBzdWJ0cmFoZW5kKQoreworICBndWludCBpLCBzaXplOworICBHVmFsdWUgZGF0YVsyXSA9IHsgezAsfSwgezAsfSB9OworICBHVmFsdWUgKnN1YnRyYWN0aW9uID0gJmRhdGFbMF0sICpyZXN1bHQgPSAmZGF0YVsxXTsKKworICBnc3RfdmFsdWVfaW5pdF9hbmRfY29weSAocmVzdWx0LCBtaW51ZW5kKTsKKyAgc2l6ZSA9IFZBTFVFX0xJU1RfU0laRSAoc3VidHJhaGVuZCk7CisgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICBjb25zdCBHVmFsdWUgKmN1ciA9IFZBTFVFX0xJU1RfR0VUX1ZBTFVFIChzdWJ0cmFoZW5kLCBpKTsKKworICAgIGlmIChnc3RfdmFsdWVfc3VidHJhY3QgKHN1YnRyYWN0aW9uLCByZXN1bHQsIGN1cikpIHsKKyAgICAgIEdWYWx1ZSAqdGVtcCA9IHJlc3VsdDsKKworICAgICAgcmVzdWx0ID0gc3VidHJhY3Rpb247CisgICAgICBzdWJ0cmFjdGlvbiA9IHRlbXA7CisgICAgICBnX3ZhbHVlX3Vuc2V0IChzdWJ0cmFjdGlvbik7CisgICAgfSBlbHNlIHsKKyAgICAgIGdfdmFsdWVfdW5zZXQgKHJlc3VsdCk7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICB9CisgIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5IChkZXN0LCByZXN1bHQpOworICBnX3ZhbHVlX3Vuc2V0IChyZXN1bHQpOworICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfdmFsdWVfc3VidHJhY3RfZnJhY3Rpb25fZnJhY3Rpb25fcmFuZ2UgKEdWYWx1ZSAqIGRlc3QsCisgICAgY29uc3QgR1ZhbHVlICogbWludWVuZCwgY29uc3QgR1ZhbHVlICogc3VidHJhaGVuZCkKK3sKKyAgY29uc3QgR1ZhbHVlICptaW4gPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21pbiAoc3VidHJhaGVuZCk7CisgIGNvbnN0IEdWYWx1ZSAqbWF4ID0gZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9tYXggKHN1YnRyYWhlbmQpOworICBHc3RWYWx1ZUNvbXBhcmVGdW5jIGNvbXBhcmU7CisKKyAgaWYgKChjb21wYXJlID0gZ3N0X3ZhbHVlX2dldF9jb21wYXJlX2Z1bmMgKG1pbnVlbmQpKSkgeworICAgIC8qIHN1YnRyYWN0aW5nIGEgcmFuZ2UgZnJvbSBhbiBmcmFjdGlvbiBvbmx5IHdvcmtzIGlmIHRoZSBmcmFjdGlvbgorICAgICAqIGlzIG5vdCBpbiB0aGUgcmFuZ2UgKi8KKyAgICBpZiAoZ3N0X3ZhbHVlX2NvbXBhcmVfd2l0aF9mdW5jIChtaW51ZW5kLCBtaW4sIGNvbXBhcmUpID09CisgICAgICAgIEdTVF9WQUxVRV9MRVNTX1RIQU4gfHwKKyAgICAgICAgZ3N0X3ZhbHVlX2NvbXBhcmVfd2l0aF9mdW5jIChtaW51ZW5kLCBtYXgsIGNvbXBhcmUpID09CisgICAgICAgIEdTVF9WQUxVRV9HUkVBVEVSX1RIQU4pIHsKKyAgICAgIC8qIGFuZCB0aGUgcmVzdWx0IGlzIHRoZSB2YWx1ZSAqLworICAgICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKGRlc3QsIG1pbnVlbmQpOworICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICB9CisgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfdmFsdWVfc3VidHJhY3RfZnJhY3Rpb25fcmFuZ2VfZnJhY3Rpb24gKEdWYWx1ZSAqIGRlc3QsCisgICAgY29uc3QgR1ZhbHVlICogbWludWVuZCwgY29uc3QgR1ZhbHVlICogc3VidHJhaGVuZCkKK3sKKyAgLyogc2luY2Ugd2UgZG9uJ3QgaGF2ZSBvcGVuIHJhbmdlcywgd2UgY2Fubm90IGNyZWF0ZSBhIGhvbGUgaW4KKyAgICogYSByYW5nZS4gV2UgcmV0dXJuIHRoZSBvcmlnaW5hbCByYW5nZSAqLworICBnc3RfdmFsdWVfaW5pdF9hbmRfY29weSAoZGVzdCwgbWludWVuZCk7CisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF92YWx1ZV9zdWJ0cmFjdF9mcmFjdGlvbl9yYW5nZV9mcmFjdGlvbl9yYW5nZSAoR1ZhbHVlICogZGVzdCwKKyAgICBjb25zdCBHVmFsdWUgKiBtaW51ZW5kLCBjb25zdCBHVmFsdWUgKiBzdWJ0cmFoZW5kKQoreworICAvKiBzaW5jZSB3ZSBkb24ndCBoYXZlIG9wZW4gcmFuZ2VzLCB3ZSBoYXZlIHRvIGFwcHJveGltYXRlICovCisgIC8qIGRvbmUgbGlrZSB3aXRoIGludHMgYW5kIGRvdWJsZXMuIENyZWF0ZXMgYSBsaXN0IG9mIDIgZnJhY3Rpb24gcmFuZ2VzICovCisgIGNvbnN0IEdWYWx1ZSAqbWluMSA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWluIChtaW51ZW5kKTsKKyAgY29uc3QgR1ZhbHVlICptYXgyID0gZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9tYXggKG1pbnVlbmQpOworICBjb25zdCBHVmFsdWUgKm1heDEgPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21pbiAoc3VidHJhaGVuZCk7CisgIGNvbnN0IEdWYWx1ZSAqbWluMiA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWF4IChzdWJ0cmFoZW5kKTsKKyAgZ2ludCBjbXAxLCBjbXAyOworICBHVmFsdWUgdjEgPSB7IDAsIH07CisgIEdWYWx1ZSB2MiA9IHsgMCwgfTsKKyAgR1ZhbHVlICpwdjEsICpwdjI7ICAgICAgICAgICAgLyogeWVhaCwgaHVuZ2FyaWFuISAqLworICBHc3RWYWx1ZUNvbXBhcmVGdW5jIGNvbXBhcmU7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG1pbjEgIT0gTlVMTCAmJiBtYXgxICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG1pbjIgIT0gTlVMTCAmJiBtYXgyICE9IE5VTEwsIEZBTFNFKTsKKworICBjb21wYXJlID0gZ3N0X3ZhbHVlX2dldF9jb21wYXJlX2Z1bmMgKG1pbjEpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoY29tcGFyZSwgRkFMU0UpOworCisgIGNtcDEgPSBnc3RfdmFsdWVfY29tcGFyZV93aXRoX2Z1bmMgKG1heDIsIG1heDEsIGNvbXBhcmUpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoY21wMSAhPSBHU1RfVkFMVUVfVU5PUkRFUkVELCBGQUxTRSk7CisgIGlmIChjbXAxID09IEdTVF9WQUxVRV9MRVNTX1RIQU4pCisgICAgbWF4MSA9IG1heDI7CisgIGNtcDEgPSBnc3RfdmFsdWVfY29tcGFyZV93aXRoX2Z1bmMgKG1pbjEsIG1pbjIsIGNvbXBhcmUpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoY21wMSAhPSBHU1RfVkFMVUVfVU5PUkRFUkVELCBGQUxTRSk7CisgIGlmIChjbXAxID09IEdTVF9WQUxVRV9HUkVBVEVSX1RIQU4pCisgICAgbWluMiA9IG1pbjE7CisKKyAgY21wMSA9IGdzdF92YWx1ZV9jb21wYXJlX3dpdGhfZnVuYyAobWluMSwgbWF4MSwgY29tcGFyZSk7CisgIGNtcDIgPSBnc3RfdmFsdWVfY29tcGFyZV93aXRoX2Z1bmMgKG1pbjIsIG1heDIsIGNvbXBhcmUpOworCisgIGlmIChjbXAxID09IEdTVF9WQUxVRV9MRVNTX1RIQU4gJiYgY21wMiA9PSBHU1RfVkFMVUVfTEVTU19USEFOKSB7CisgICAgcHYxID0gJnYxOworICAgIHB2MiA9ICZ2MjsKKyAgfSBlbHNlIGlmIChjbXAxID09IEdTVF9WQUxVRV9MRVNTX1RIQU4pIHsKKyAgICBwdjEgPSBkZXN0OworICAgIHB2MiA9IE5VTEw7CisgIH0gZWxzZSBpZiAoY21wMiA9PSBHU1RfVkFMVUVfTEVTU19USEFOKSB7CisgICAgcHYxID0gTlVMTDsKKyAgICBwdjIgPSBkZXN0OworICB9IGVsc2UgeworICAgIHJldHVybiBGQUxTRTsKKyAgfQorCisgIGlmIChjbXAxID09IEdTVF9WQUxVRV9MRVNTX1RIQU4pIHsKKyAgICBnX3ZhbHVlX2luaXQgKHB2MSwgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UpOworICAgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2UgKHB2MSwgbWluMSwgbWF4MSk7CisgIH0KKyAgaWYgKGNtcDIgPT0gR1NUX1ZBTFVFX0xFU1NfVEhBTikgeworICAgIGdfdmFsdWVfaW5pdCAocHYyLCBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSk7CisgICAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZSAocHYyLCBtaW4yLCBtYXgyKTsKKyAgfQorCisgIGlmIChjbXAxID09IEdTVF9WQUxVRV9MRVNTX1RIQU4gJiYgY21wMiA9PSBHU1RfVkFMVUVfTEVTU19USEFOKSB7CisgICAgZ3N0X3ZhbHVlX2xpc3RfY29uY2F0IChkZXN0LCBwdjEsIHB2Mik7CisgICAgZ192YWx1ZV91bnNldCAocHYxKTsKKyAgICBnX3ZhbHVlX3Vuc2V0IChwdjIpOworICB9CisgIHJldHVybiBUUlVFOworfQorCisKKy8qKioqKioqKioqKioqKgorICogY29tcGFyaXNvbiAqCisgKioqKioqKioqKioqKiovCisKKy8qCisgKiBnc3RfdmFsdWVfZ2V0X2NvbXBhcmVfZnVuYzoKKyAqIEB2YWx1ZTE6IGEgdmFsdWUgdG8gZ2V0IHRoZSBjb21wYXJlIGZ1bmN0aW9uIGZvcgorICoKKyAqIERldGVybWluZXMgdGhlIGNvbXBhcmUgZnVuY3Rpb24gdG8gYmUgdXNlZCB3aXRoIHZhbHVlcyBvZiB0aGUgc2FtZSB0eXBlIGFzCisgKiBAdmFsdWUxLiBUaGUgZnVuY3Rpb24gY2FuIGJlIGdpdmVuIHRvIGdzdF92YWx1ZV9jb21wYXJlX3dpdGhfZnVuYygpLgorICoKKyAqIFJldHVybnM6IEEgI0dzdFZhbHVlQ29tcGFyZUZ1bmMgdmFsdWUKKyAqLworc3RhdGljIEdzdFZhbHVlQ29tcGFyZUZ1bmMKK2dzdF92YWx1ZV9nZXRfY29tcGFyZV9mdW5jIChjb25zdCBHVmFsdWUgKiB2YWx1ZTEpCit7CisgIEdzdFZhbHVlVGFibGUgKnRhYmxlLCAqYmVzdCA9IE5VTEw7CisgIGd1aW50IGk7CisgIEdUeXBlIHR5cGUxOworCisgIHR5cGUxID0gR19WQUxVRV9UWVBFICh2YWx1ZTEpOworCisgIC8qIHRoaXMgaXMgYSBmYXN0IGNoZWNrICovCisgIGJlc3QgPSBnc3RfdmFsdWVfaGFzaF9sb29rdXBfdHlwZSAodHlwZTEpOworCisgIC8qIHNsb3dlciBjaGVja3MgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKCFiZXN0IHx8ICFiZXN0LT5jb21wYXJlKSkgeworICAgIGd1aW50IGxlbiA9IGdzdF92YWx1ZV90YWJsZS0+bGVuOworCisgICAgYmVzdCA9IE5VTEw7CisgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICB0YWJsZSA9ICZnX2FycmF5X2luZGV4IChnc3RfdmFsdWVfdGFibGUsIEdzdFZhbHVlVGFibGUsIGkpOworICAgICAgaWYgKHRhYmxlLT5jb21wYXJlICYmIGdfdHlwZV9pc19hICh0eXBlMSwgdGFibGUtPnR5cGUpKSB7CisgICAgICAgIGlmICghYmVzdCB8fCBnX3R5cGVfaXNfYSAodGFibGUtPnR5cGUsIGJlc3QtPnR5cGUpKQorICAgICAgICAgIGJlc3QgPSB0YWJsZTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgaWYgKEdfTElLRUxZIChiZXN0KSkKKyAgICByZXR1cm4gYmVzdC0+Y29tcGFyZTsKKworICByZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBnc3RfdmFsdWVfY2FuX2NvbXBhcmU6CisgKiBAdmFsdWUxOiBhIHZhbHVlIHRvIGNvbXBhcmUKKyAqIEB2YWx1ZTI6IGFub3RoZXIgdmFsdWUgdG8gY29tcGFyZQorICoKKyAqIERldGVybWluZXMgaWYgQHZhbHVlMSBhbmQgQHZhbHVlMiBjYW4gYmUgY29tcGFyZWQuCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgdmFsdWVzIGNhbiBiZSBjb21wYXJlZAorICovCitnYm9vbGVhbgorZ3N0X3ZhbHVlX2Nhbl9jb21wYXJlIChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHZhbHVlMSksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHZhbHVlMiksIEZBTFNFKTsKKworICBpZiAoR19WQUxVRV9UWVBFICh2YWx1ZTEpICE9IEdfVkFMVUVfVFlQRSAodmFsdWUyKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgcmV0dXJuIGdzdF92YWx1ZV9nZXRfY29tcGFyZV9mdW5jICh2YWx1ZTEpICE9IE5VTEw7Cit9CisKKy8qKgorICogZ3N0X3ZhbHVlX2NvbXBhcmU6CisgKiBAdmFsdWUxOiBhIHZhbHVlIHRvIGNvbXBhcmUKKyAqIEB2YWx1ZTI6IGFub3RoZXIgdmFsdWUgdG8gY29tcGFyZQorICoKKyAqIENvbXBhcmVzIEB2YWx1ZTEgYW5kIEB2YWx1ZTIuICBJZiBAdmFsdWUxIGFuZCBAdmFsdWUyIGNhbm5vdCBiZQorICogY29tcGFyZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEdTVF9WQUxVRV9VTk9SREVSRUQuICBPdGhlcndpc2UsCisgKiBpZiBAdmFsdWUxIGlzIGdyZWF0ZXIgdGhhbiBAdmFsdWUyLCBHU1RfVkFMVUVfR1JFQVRFUl9USEFOIGlzIHJldHVybmVkLgorICogSWYgQHZhbHVlMSBpcyBsZXNzIHRoYW4gQHZhbHVlMiwgR1NUX1ZBTFVFX0xFU1NfVEhBTiBpcyByZXR1cm5lZC4KKyAqIElmIHRoZSB2YWx1ZXMgYXJlIGVxdWFsLCBHU1RfVkFMVUVfRVFVQUwgaXMgcmV0dXJuZWQuCisgKgorICogUmV0dXJuczogY29tcGFyaXNvbiByZXN1bHQKKyAqLworZ2ludAorZ3N0X3ZhbHVlX2NvbXBhcmUgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlMSwgY29uc3QgR1ZhbHVlICogdmFsdWUyKQoreworICBHc3RWYWx1ZUNvbXBhcmVGdW5jIGNvbXBhcmU7CisgIEdUeXBlIGx0eXBlOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX0lTX1ZBTFVFICh2YWx1ZTEpLCBHU1RfVkFMVUVfTEVTU19USEFOKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHZhbHVlMiksIEdTVF9WQUxVRV9HUkVBVEVSX1RIQU4pOworCisgIC8qIFNwZWNpYWwgY2FzZTogbGlzdHMgYW5kIHNjYWxhciB2YWx1ZXMgCisgICAqICJ7IDEgfSIgYW5kICIxIiBhcmUgZXF1YWwgKi8KKyAgbHR5cGUgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdHlwZSAoKTsKKyAgaWYgKEdfVkFMVUVfSE9MRFMgKHZhbHVlMSwgbHR5cGUpICYmICFHX1ZBTFVFX0hPTERTICh2YWx1ZTIsIGx0eXBlKQorICAgICAgJiYgZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUgKHZhbHVlMSkgPT0gMSkgeworICAgIGNvbnN0IEdWYWx1ZSAqZWx0OworCisgICAgZWx0ID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlICh2YWx1ZTEsIDApOworICAgIHJldHVybiBnc3RfdmFsdWVfY29tcGFyZSAoZWx0LCB2YWx1ZTIpOworICB9IGVsc2UgaWYgKEdfVkFMVUVfSE9MRFMgKHZhbHVlMiwgbHR5cGUpICYmICFHX1ZBTFVFX0hPTERTICh2YWx1ZTEsIGx0eXBlKQorICAgICAgJiYgZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUgKHZhbHVlMikgPT0gMSkgeworICAgIGNvbnN0IEdWYWx1ZSAqZWx0OworCisgICAgZWx0ID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlICh2YWx1ZTIsIDApOworICAgIHJldHVybiBnc3RfdmFsdWVfY29tcGFyZSAoZWx0LCB2YWx1ZTEpOworICB9CisKKyAgaWYgKEdfVkFMVUVfVFlQRSAodmFsdWUxKSAhPSBHX1ZBTFVFX1RZUEUgKHZhbHVlMikpCisgICAgcmV0dXJuIEdTVF9WQUxVRV9VTk9SREVSRUQ7CisKKyAgY29tcGFyZSA9IGdzdF92YWx1ZV9nZXRfY29tcGFyZV9mdW5jICh2YWx1ZTEpOworICBpZiAoY29tcGFyZSkgeworICAgIHJldHVybiBjb21wYXJlICh2YWx1ZTEsIHZhbHVlMik7CisgIH0KKworICBnX2NyaXRpY2FsICgidW5hYmxlIHRvIGNvbXBhcmUgdmFsdWVzIG9mIHR5cGUgJXNcbiIsCisgICAgICBnX3R5cGVfbmFtZSAoR19WQUxVRV9UWVBFICh2YWx1ZTEpKSk7CisgIHJldHVybiBHU1RfVkFMVUVfVU5PUkRFUkVEOworfQorCisvKgorICogZ3N0X3ZhbHVlX2NvbXBhcmVfd2l0aF9mdW5jOgorICogQHZhbHVlMTogYSB2YWx1ZSB0byBjb21wYXJlCisgKiBAdmFsdWUyOiBhbm90aGVyIHZhbHVlIHRvIGNvbXBhcmUKKyAqIEBjb21wYXJlOiBjb21wYXJlIGZ1bmN0aW9uCisgKgorICogQ29tcGFyZXMgQHZhbHVlMSBhbmQgQHZhbHVlMiB1c2luZyB0aGUgQGNvbXBhcmUgZnVuY3Rpb24uIFdvcmtzIGxpa2UKKyAqIGdzdF92YWx1ZV9jb21wYXJlKCkgYnV0IGFsbG93cyB0byBzYXZlIHRpbWUgZGV0ZXJtaW5pbmcgdGhlIGNvbXBhcmUgZnVuY3Rpb24KKyAqIGEgbXVsdGlwbGUgdGltZXMuIAorICoKKyAqIFJldHVybnM6IGNvbXBhcmlzb24gcmVzdWx0CisgKi8KK3N0YXRpYyBnaW50Citnc3RfdmFsdWVfY29tcGFyZV93aXRoX2Z1bmMgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlMSwgY29uc3QgR1ZhbHVlICogdmFsdWUyLAorICAgIEdzdFZhbHVlQ29tcGFyZUZ1bmMgY29tcGFyZSkKK3sKKyAgZ19hc3NlcnQgKGNvbXBhcmUpOworCisgIGlmIChHX1ZBTFVFX1RZUEUgKHZhbHVlMSkgIT0gR19WQUxVRV9UWVBFICh2YWx1ZTIpKQorICAgIHJldHVybiBHU1RfVkFMVUVfVU5PUkRFUkVEOworCisgIHJldHVybiBjb21wYXJlICh2YWx1ZTEsIHZhbHVlMik7Cit9CisKKy8qIHVuaW9uICovCisKKy8qKgorICogZ3N0X3ZhbHVlX2Nhbl91bmlvbjoKKyAqIEB2YWx1ZTE6IGEgdmFsdWUgdG8gdW5pb24KKyAqIEB2YWx1ZTI6IGFub3RoZXIgdmFsdWUgdG8gdW5pb24KKyAqCisgKiBEZXRlcm1pbmVzIGlmIEB2YWx1ZTEgYW5kIEB2YWx1ZTIgY2FuIGJlIG5vbi10cml2aWFsbHkgdW5pb25lZC4KKyAqIEFueSB0d28gdmFsdWVzIGNhbiBiZSB0cml2aWFsbHkgdW5pb25lZCBieSBhZGRpbmcgYm90aCBvZiB0aGVtCisgKiB0byBhIEdzdFZhbHVlTGlzdC4gIEhvd2V2ZXIsIGNlcnRhaW4gdHlwZXMgaGF2ZSB0aGUgcG9zc2liaWxpdHkKKyAqIHRvIGJlIHVuaW9uZWQgaW4gYSBzaW1wbGVyIHdheS4gIEZvciBleGFtcGxlLCBhbiBpbnRlZ2VyIHJhbmdlCisgKiBhbmQgYW4gaW50ZWdlciBjYW4gYmUgdW5pb25lZCBpZiB0aGUgaW50ZWdlciBpcyBhIHN1YnNldCBvZiB0aGUKKyAqIGludGVnZXIgcmFuZ2UuICBJZiB0aGVyZSBpcyB0aGUgcG9zc2liaWxpdHkgdGhhdCB0d28gdmFsdWVzIGNhbgorICogYmUgdW5pb25lZCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIFRSVUUuCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGVyZSBpcyBhIGZ1bmN0aW9uIGFsbG93aW5nIHRoZSB0d28gdmFsdWVzIHRvCisgKiBiZSB1bmlvbmVkLgorICovCitnYm9vbGVhbgorZ3N0X3ZhbHVlX2Nhbl91bmlvbiAoY29uc3QgR1ZhbHVlICogdmFsdWUxLCBjb25zdCBHVmFsdWUgKiB2YWx1ZTIpCit7CisgIEdzdFZhbHVlVW5pb25JbmZvICp1bmlvbl9pbmZvOworICBndWludCBpLCBsZW47CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHZhbHVlMSksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHZhbHVlMiksIEZBTFNFKTsKKworICBsZW4gPSBnc3RfdmFsdWVfdW5pb25fZnVuY3MtPmxlbjsKKworICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICB1bmlvbl9pbmZvID0gJmdfYXJyYXlfaW5kZXggKGdzdF92YWx1ZV91bmlvbl9mdW5jcywgR3N0VmFsdWVVbmlvbkluZm8sIGkpOworICAgIGlmICh1bmlvbl9pbmZvLT50eXBlMSA9PSBHX1ZBTFVFX1RZUEUgKHZhbHVlMSkgJiYKKyAgICAgICAgdW5pb25faW5mby0+dHlwZTIgPT0gR19WQUxVRV9UWVBFICh2YWx1ZTIpKQorICAgICAgcmV0dXJuIFRSVUU7CisgICAgaWYgKHVuaW9uX2luZm8tPnR5cGUxID09IEdfVkFMVUVfVFlQRSAodmFsdWUyKSAmJgorICAgICAgICB1bmlvbl9pbmZvLT50eXBlMiA9PSBHX1ZBTFVFX1RZUEUgKHZhbHVlMSkpCisgICAgICByZXR1cm4gVFJVRTsKKyAgfQorCisgIHJldHVybiBGQUxTRTsKK30KKworLyoqCisgKiBnc3RfdmFsdWVfdW5pb246CisgKiBAZGVzdDogKG91dCBjYWxsZXItYWxsb2NhdGVzKTogdGhlIGRlc3RpbmF0aW9uIHZhbHVlCisgKiBAdmFsdWUxOiBhIHZhbHVlIHRvIHVuaW9uCisgKiBAdmFsdWUyOiBhbm90aGVyIHZhbHVlIHRvIHVuaW9uCisgKgorICogQ3JlYXRlcyBhIEdWYWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSB1bmlvbiBvZiBAdmFsdWUxIGFuZCBAdmFsdWUyLgorICoKKyAqIFJldHVybnM6IGFsd2F5cyByZXR1cm5zICVUUlVFCisgKi8KKy8qIEZJWE1FOiBjaGFuZ2UgcmV0dXJuIHR5cGUgdG8gJ3ZvaWQnPyAqLworZ2Jvb2xlYW4KK2dzdF92YWx1ZV91bmlvbiAoR1ZhbHVlICogZGVzdCwgY29uc3QgR1ZhbHVlICogdmFsdWUxLCBjb25zdCBHVmFsdWUgKiB2YWx1ZTIpCit7CisgIEdzdFZhbHVlVW5pb25JbmZvICp1bmlvbl9pbmZvOworICBndWludCBpLCBsZW47CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRlc3QgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19WQUxVRSAodmFsdWUxKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19WQUxVRSAodmFsdWUyKSwgRkFMU0UpOworCisgIGxlbiA9IGdzdF92YWx1ZV91bmlvbl9mdW5jcy0+bGVuOworCisgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgIHVuaW9uX2luZm8gPSAmZ19hcnJheV9pbmRleCAoZ3N0X3ZhbHVlX3VuaW9uX2Z1bmNzLCBHc3RWYWx1ZVVuaW9uSW5mbywgaSk7CisgICAgaWYgKHVuaW9uX2luZm8tPnR5cGUxID09IEdfVkFMVUVfVFlQRSAodmFsdWUxKSAmJgorICAgICAgICB1bmlvbl9pbmZvLT50eXBlMiA9PSBHX1ZBTFVFX1RZUEUgKHZhbHVlMikpIHsKKyAgICAgIGlmICh1bmlvbl9pbmZvLT5mdW5jIChkZXN0LCB2YWx1ZTEsIHZhbHVlMikpIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICB9CisgICAgfQorICAgIGlmICh1bmlvbl9pbmZvLT50eXBlMSA9PSBHX1ZBTFVFX1RZUEUgKHZhbHVlMikgJiYKKyAgICAgICAgdW5pb25faW5mby0+dHlwZTIgPT0gR19WQUxVRV9UWVBFICh2YWx1ZTEpKSB7CisgICAgICBpZiAodW5pb25faW5mby0+ZnVuYyAoZGVzdCwgdmFsdWUyLCB2YWx1ZTEpKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGdzdF92YWx1ZV9saXN0X2NvbmNhdCAoZGVzdCwgdmFsdWUxLCB2YWx1ZTIpOworICByZXR1cm4gVFJVRTsKK30KKworLyoqCisgKiBnc3RfdmFsdWVfcmVnaXN0ZXJfdW5pb25fZnVuYzoKKyAqIEB0eXBlMTogYSB0eXBlIHRvIHVuaW9uCisgKiBAdHlwZTI6IGFub3RoZXIgdHlwZSB0byB1bmlvbgorICogQGZ1bmM6IGEgZnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIGNyZWF0aW5nIGEgdW5pb24gYmV0d2VlbiB0aGUgdHdvIHR5cGVzCisgKgorICogUmVnaXN0ZXJzIGEgdW5pb24gZnVuY3Rpb24gdGhhdCBjYW4gY3JlYXRlIGEgdW5pb24gYmV0d2VlbiAjR1ZhbHVlIGl0ZW1zCisgKiBvZiB0aGUgdHlwZSBAdHlwZTEgYW5kIEB0eXBlMi4KKyAqCisgKiBVbmlvbiBmdW5jdGlvbnMgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgYXQgc3RhcnR1cCBiZWZvcmUgYW55IHBpcGVsaW5lcyBhcmUKKyAqIHN0YXJ0ZWQsIGFzIGdzdF92YWx1ZV9yZWdpc3Rlcl91bmlvbl9mdW5jKCkgaXMgbm90IHRocmVhZC1zYWZlIGFuZCBjYW5ub3QKKyAqIGJlIHVzZWQgYXQgdGhlIHNhbWUgdGltZSBhcyBnc3RfdmFsdWVfdW5pb24oKSBvciBnc3RfdmFsdWVfY2FuX3VuaW9uKCkuCisgKi8KK3ZvaWQKK2dzdF92YWx1ZV9yZWdpc3Rlcl91bmlvbl9mdW5jIChHVHlwZSB0eXBlMSwgR1R5cGUgdHlwZTIsIEdzdFZhbHVlVW5pb25GdW5jIGZ1bmMpCit7CisgIEdzdFZhbHVlVW5pb25JbmZvIHVuaW9uX2luZm87CisKKyAgdW5pb25faW5mby50eXBlMSA9IHR5cGUxOworICB1bmlvbl9pbmZvLnR5cGUyID0gdHlwZTI7CisgIHVuaW9uX2luZm8uZnVuYyA9IGZ1bmM7CisKKyAgZ19hcnJheV9hcHBlbmRfdmFsIChnc3RfdmFsdWVfdW5pb25fZnVuY3MsIHVuaW9uX2luZm8pOworfQorCisvKiBpbnRlcnNlY3Rpb24gKi8KKworLyoqCisgKiBnc3RfdmFsdWVfY2FuX2ludGVyc2VjdDoKKyAqIEB2YWx1ZTE6IGEgdmFsdWUgdG8gaW50ZXJzZWN0CisgKiBAdmFsdWUyOiBhbm90aGVyIHZhbHVlIHRvIGludGVyc2VjdAorICoKKyAqIERldGVybWluZXMgaWYgaW50ZXJzZWN0aW5nIHR3byB2YWx1ZXMgd2lsbCBwcm9kdWNlIGEgdmFsaWQgcmVzdWx0LgorICogVHdvIHZhbHVlcyB3aWxsIHByb2R1Y2UgYSB2YWxpZCBpbnRlcnNlY3Rpb24gaWYgdGhleSBoYXZlIHRoZSBzYW1lCisgKiB0eXBlLCBvciBpZiB0aGVyZSBpcyBhIG1ldGhvZCAocmVnaXN0ZXJlZCBieQorICogZ3N0X3ZhbHVlX3JlZ2lzdGVyX2ludGVyc2VjdF9mdW5jKCkpIHRvIGNhbGN1bGF0ZSB0aGUgaW50ZXJzZWN0aW9uLgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIHZhbHVlcyBjYW4gaW50ZXJzZWN0CisgKi8KK2dib29sZWFuCitnc3RfdmFsdWVfY2FuX2ludGVyc2VjdCAoY29uc3QgR1ZhbHVlICogdmFsdWUxLCBjb25zdCBHVmFsdWUgKiB2YWx1ZTIpCit7CisgIEdzdFZhbHVlSW50ZXJzZWN0SW5mbyAqaW50ZXJzZWN0X2luZm87CisgIGd1aW50IGksIGxlbjsKKyAgR1R5cGUgbHR5cGUsIHR5cGUxLCB0eXBlMjsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19WQUxVRSAodmFsdWUxKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19WQUxVRSAodmFsdWUyKSwgRkFMU0UpOworCisgIGx0eXBlID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3R5cGUgKCk7CisKKyAgLyogc3BlY2lhbCBjYXNlcyAqLworICBpZiAoR19WQUxVRV9IT0xEUyAodmFsdWUxLCBsdHlwZSkgfHwgR19WQUxVRV9IT0xEUyAodmFsdWUyLCBsdHlwZSkpCisgICAgcmV0dXJuIFRSVUU7CisKKyAgdHlwZTEgPSBHX1ZBTFVFX1RZUEUgKHZhbHVlMSk7CisgIHR5cGUyID0gR19WQUxVRV9UWVBFICh2YWx1ZTIpOworCisgIC8qIHByYWN0aWNhbGx5IGFsbCBHc3RWYWx1ZSB0eXBlcyBoYXZlIGEgY29tcGFyZSBmdW5jdGlvbiAoX2Nhbl9jb21wYXJlPVRSVUUpCisgICAqIEdzdFN0cnVjdHVyZSBhbmQgR3N0Q2FwcyBoYXZlIG5wb3QsIGJ1dCBhcmUgaW50ZXJzZWN0YWJsZSAqLworICBpZiAodHlwZTEgPT0gdHlwZTIpCisgICAgcmV0dXJuIFRSVUU7CisKKyAgLyogY2hlY2sgcmVnaXN0ZXJlZCBpbnRlcnNlY3QgZnVuY3Rpb25zICovCisgIGxlbiA9IGdzdF92YWx1ZV9pbnRlcnNlY3RfZnVuY3MtPmxlbjsKKyAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgaW50ZXJzZWN0X2luZm8gPSAmZ19hcnJheV9pbmRleCAoZ3N0X3ZhbHVlX2ludGVyc2VjdF9mdW5jcywKKyAgICAgICAgR3N0VmFsdWVJbnRlcnNlY3RJbmZvLCBpKTsKKyAgICBpZiAoKGludGVyc2VjdF9pbmZvLT50eXBlMSA9PSB0eXBlMSAmJiBpbnRlcnNlY3RfaW5mby0+dHlwZTIgPT0gdHlwZTIpIHx8CisgICAgICAgIChpbnRlcnNlY3RfaW5mby0+dHlwZTEgPT0gdHlwZTIgJiYgaW50ZXJzZWN0X2luZm8tPnR5cGUyID09IHR5cGUxKSkKKyAgICAgIHJldHVybiBUUlVFOworICB9CisKKyAgcmV0dXJuIGdzdF92YWx1ZV9jYW5fY29tcGFyZSAodmFsdWUxLCB2YWx1ZTIpOworfQorCisvKioKKyAqIGdzdF92YWx1ZV9pbnRlcnNlY3Q6CisgKiBAZGVzdDogKG91dCBjYWxsZXItYWxsb2NhdGVzKTogYSB1bmluaXRpYWxpemVkICNHVmFsdWUgdGhhdCB3aWxsIGhvbGQgdGhlIGNhbGN1bGF0ZWQKKyAqIGludGVyc2VjdGlvbiB2YWx1ZQorICogQHZhbHVlMTogYSB2YWx1ZSB0byBpbnRlcnNlY3QKKyAqIEB2YWx1ZTI6IGFub3RoZXIgdmFsdWUgdG8gaW50ZXJzZWN0CisgKgorICogQ2FsY3VsYXRlcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHR3byB2YWx1ZXMuICBJZiB0aGUgdmFsdWVzIGhhdmUKKyAqIGEgbm9uLWVtcHR5IGludGVyc2VjdGlvbiwgdGhlIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgaW50ZXJzZWN0aW9uCisgKiBpcyBwbGFjZWQgaW4gQGRlc3QuICBJZiB0aGUgaW50ZXJzZWN0aW9uIGlzIG5vbi1lbXB0eSwgQGRlc3QgaXMKKyAqIG5vdCBtb2RpZmllZC4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBpbnRlcnNlY3Rpb24gaXMgbm9uLWVtcHR5CisgKi8KK2dib29sZWFuCitnc3RfdmFsdWVfaW50ZXJzZWN0IChHVmFsdWUgKiBkZXN0LCBjb25zdCBHVmFsdWUgKiB2YWx1ZTEsCisgICAgY29uc3QgR1ZhbHVlICogdmFsdWUyKQoreworICBHc3RWYWx1ZUludGVyc2VjdEluZm8gKmludGVyc2VjdF9pbmZvOworICBndWludCBpLCBsZW47CisgIEdUeXBlIGx0eXBlLCB0eXBlMSwgdHlwZTI7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRlc3QgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19WQUxVRSAodmFsdWUxKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19WQUxVRSAodmFsdWUyKSwgRkFMU0UpOworCisgIGx0eXBlID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3R5cGUgKCk7CisKKyAgLyogc3BlY2lhbCBjYXNlcyBmaXJzdCAqLworICBpZiAoR19WQUxVRV9IT0xEUyAodmFsdWUxLCBsdHlwZSkpCisgICAgcmV0dXJuIGdzdF92YWx1ZV9pbnRlcnNlY3RfbGlzdCAoZGVzdCwgdmFsdWUxLCB2YWx1ZTIpOworICBpZiAoR19WQUxVRV9IT0xEUyAodmFsdWUyLCBsdHlwZSkpCisgICAgcmV0dXJuIGdzdF92YWx1ZV9pbnRlcnNlY3RfbGlzdCAoZGVzdCwgdmFsdWUyLCB2YWx1ZTEpOworCisgIGlmIChnc3RfdmFsdWVfY29tcGFyZSAodmFsdWUxLCB2YWx1ZTIpID09IEdTVF9WQUxVRV9FUVVBTCkgeworICAgIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5IChkZXN0LCB2YWx1ZTEpOworICAgIHJldHVybiBUUlVFOworICB9CisKKyAgdHlwZTEgPSBHX1ZBTFVFX1RZUEUgKHZhbHVlMSk7CisgIHR5cGUyID0gR19WQUxVRV9UWVBFICh2YWx1ZTIpOworCisgIGxlbiA9IGdzdF92YWx1ZV9pbnRlcnNlY3RfZnVuY3MtPmxlbjsKKyAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgaW50ZXJzZWN0X2luZm8gPSAmZ19hcnJheV9pbmRleCAoZ3N0X3ZhbHVlX2ludGVyc2VjdF9mdW5jcywKKyAgICAgICAgR3N0VmFsdWVJbnRlcnNlY3RJbmZvLCBpKTsKKyAgICBpZiAoaW50ZXJzZWN0X2luZm8tPnR5cGUxID09IHR5cGUxICYmIGludGVyc2VjdF9pbmZvLT50eXBlMiA9PSB0eXBlMikgeworICAgICAgcmV0dXJuIGludGVyc2VjdF9pbmZvLT5mdW5jIChkZXN0LCB2YWx1ZTEsIHZhbHVlMik7CisgICAgfQorICAgIGlmIChpbnRlcnNlY3RfaW5mby0+dHlwZTEgPT0gdHlwZTIgJiYgaW50ZXJzZWN0X2luZm8tPnR5cGUyID09IHR5cGUxKSB7CisgICAgICByZXR1cm4gaW50ZXJzZWN0X2luZm8tPmZ1bmMgKGRlc3QsIHZhbHVlMiwgdmFsdWUxKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIEZBTFNFOworfQorCisvKioKKyAqIGdzdF92YWx1ZV9yZWdpc3Rlcl9pbnRlcnNlY3RfZnVuYzoKKyAqIEB0eXBlMTogdGhlIGZpcnN0IHR5cGUgdG8gaW50ZXJzZWN0CisgKiBAdHlwZTI6IHRoZSBzZWNvbmQgdHlwZSB0byBpbnRlcnNlY3QKKyAqIEBmdW5jOiB0aGUgaW50ZXJzZWN0aW9uIGZ1bmN0aW9uCisgKgorICogUmVnaXN0ZXJzIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgdG8gY2FsY3VsYXRlIHRoZSBpbnRlcnNlY3Rpb24KKyAqIG9mIHRoZSB2YWx1ZXMgaGF2aW5nIHRoZSB0eXBlcyBAdHlwZTEgYW5kIEB0eXBlMi4KKyAqCisgKiBJbnRlcnNlY3QgZnVuY3Rpb25zIHNob3VsZCBiZSByZWdpc3RlcmVkIGF0IHN0YXJ0dXAgYmVmb3JlIGFueSBwaXBlbGluZXMgYXJlCisgKiBzdGFydGVkLCBhcyBnc3RfdmFsdWVfcmVnaXN0ZXJfaW50ZXJzZWN0X2Z1bmMoKSBpcyBub3QgdGhyZWFkLXNhZmUgYW5kCisgKiBjYW5ub3QgYmUgdXNlZCBhdCB0aGUgc2FtZSB0aW1lIGFzIGdzdF92YWx1ZV9pbnRlcnNlY3QoKSBvcgorICogZ3N0X3ZhbHVlX2Nhbl9pbnRlcnNlY3QoKS4KKyAqLwordm9pZAorZ3N0X3ZhbHVlX3JlZ2lzdGVyX2ludGVyc2VjdF9mdW5jIChHVHlwZSB0eXBlMSwgR1R5cGUgdHlwZTIsCisgICAgR3N0VmFsdWVJbnRlcnNlY3RGdW5jIGZ1bmMpCit7CisgIEdzdFZhbHVlSW50ZXJzZWN0SW5mbyBpbnRlcnNlY3RfaW5mbzsKKworICBpbnRlcnNlY3RfaW5mby50eXBlMSA9IHR5cGUxOworICBpbnRlcnNlY3RfaW5mby50eXBlMiA9IHR5cGUyOworICBpbnRlcnNlY3RfaW5mby5mdW5jID0gZnVuYzsKKworICBnX2FycmF5X2FwcGVuZF92YWwgKGdzdF92YWx1ZV9pbnRlcnNlY3RfZnVuY3MsIGludGVyc2VjdF9pbmZvKTsKK30KKworCisvKiBzdWJ0cmFjdGlvbiAqLworCisvKioKKyAqIGdzdF92YWx1ZV9zdWJ0cmFjdDoKKyAqIEBkZXN0OiAob3V0IGNhbGxlci1hbGxvY2F0ZXMpOiB0aGUgZGVzdGluYXRpb24gdmFsdWUgZm9yIHRoZSByZXN1bHQgaWYgdGhlCisgKiAgICAgc3VidHJhY3Rpb24gaXMgbm90IGVtcHR5CisgKiBAbWludWVuZDogdGhlIHZhbHVlIHRvIHN1YnRyYWN0IGZyb20KKyAqIEBzdWJ0cmFoZW5kOiB0aGUgdmFsdWUgdG8gc3VidHJhY3QKKyAqCisgKiBTdWJ0cmFjdHMgQHN1YnRyYWhlbmQgZnJvbSBAbWludWVuZCBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gQGRlc3QuCisgKiBOb3RlIHRoYXQgdGhpcyBtZWFucyBzdWJ0cmFjdGlvbiBhcyBpbiBzZXRzLCBub3QgYXMgaW4gbWF0aGVtYXRpY3MuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHN1YnRyYWN0aW9uIGlzIG5vdCBlbXB0eQorICovCitnYm9vbGVhbgorZ3N0X3ZhbHVlX3N1YnRyYWN0IChHVmFsdWUgKiBkZXN0LCBjb25zdCBHVmFsdWUgKiBtaW51ZW5kLAorICAgIGNvbnN0IEdWYWx1ZSAqIHN1YnRyYWhlbmQpCit7CisgIEdzdFZhbHVlU3VidHJhY3RJbmZvICppbmZvOworICBndWludCBpLCBsZW47CisgIEdUeXBlIGx0eXBlLCBtdHlwZSwgc3R5cGU7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRlc3QgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19WQUxVRSAobWludWVuZCksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHN1YnRyYWhlbmQpLCBGQUxTRSk7CisKKyAgbHR5cGUgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdHlwZSAoKTsKKworICAvKiBzcGVjaWFsIGNhc2VzIGZpcnN0ICovCisgIGlmIChHX1ZBTFVFX0hPTERTIChtaW51ZW5kLCBsdHlwZSkpCisgICAgcmV0dXJuIGdzdF92YWx1ZV9zdWJ0cmFjdF9mcm9tX2xpc3QgKGRlc3QsIG1pbnVlbmQsIHN1YnRyYWhlbmQpOworICBpZiAoR19WQUxVRV9IT0xEUyAoc3VidHJhaGVuZCwgbHR5cGUpKQorICAgIHJldHVybiBnc3RfdmFsdWVfc3VidHJhY3RfbGlzdCAoZGVzdCwgbWludWVuZCwgc3VidHJhaGVuZCk7CisKKyAgbXR5cGUgPSBHX1ZBTFVFX1RZUEUgKG1pbnVlbmQpOworICBzdHlwZSA9IEdfVkFMVUVfVFlQRSAoc3VidHJhaGVuZCk7CisKKyAgbGVuID0gZ3N0X3ZhbHVlX3N1YnRyYWN0X2Z1bmNzLT5sZW47CisgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgIGluZm8gPSAmZ19hcnJheV9pbmRleCAoZ3N0X3ZhbHVlX3N1YnRyYWN0X2Z1bmNzLCBHc3RWYWx1ZVN1YnRyYWN0SW5mbywgaSk7CisgICAgaWYgKGluZm8tPm1pbnVlbmQgPT0gbXR5cGUgJiYgaW5mby0+c3VidHJhaGVuZCA9PSBzdHlwZSkgeworICAgICAgcmV0dXJuIGluZm8tPmZ1bmMgKGRlc3QsIG1pbnVlbmQsIHN1YnRyYWhlbmQpOworICAgIH0KKyAgfQorCisgIGlmIChnc3RfdmFsdWVfY29tcGFyZSAobWludWVuZCwgc3VidHJhaGVuZCkgIT0gR1NUX1ZBTFVFX0VRVUFMKSB7CisgICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKGRlc3QsIG1pbnVlbmQpOworICAgIHJldHVybiBUUlVFOworICB9CisKKyAgcmV0dXJuIEZBTFNFOworfQorCisjaWYgMAorZ2Jvb2xlYW4KK2dzdF92YWx1ZV9zdWJ0cmFjdCAoR1ZhbHVlICogZGVzdCwgY29uc3QgR1ZhbHVlICogbWludWVuZCwKKyAgICBjb25zdCBHVmFsdWUgKiBzdWJ0cmFoZW5kKQoreworICBnYm9vbGVhbiByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QyIChkZXN0LCBtaW51ZW5kLCBzdWJ0cmFoZW5kKTsKKworICBnX3ByaW50ZXJyICgiXCIlc1wiICAtICBcIiVzXCIgID0gIFwiJXNcIlxuIiwgZ3N0X3ZhbHVlX3NlcmlhbGl6ZSAobWludWVuZCksCisgICAgICBnc3RfdmFsdWVfc2VyaWFsaXplIChzdWJ0cmFoZW5kKSwKKyAgICAgIHJldCA/IGdzdF92YWx1ZV9zZXJpYWxpemUgKGRlc3QpIDogIi0tLSIpOworICByZXR1cm4gcmV0OworfQorI2VuZGlmCisKKy8qKgorICogZ3N0X3ZhbHVlX2Nhbl9zdWJ0cmFjdDoKKyAqIEBtaW51ZW5kOiB0aGUgdmFsdWUgdG8gc3VidHJhY3QgZnJvbQorICogQHN1YnRyYWhlbmQ6IHRoZSB2YWx1ZSB0byBzdWJ0cmFjdAorICoKKyAqIENoZWNrcyBpZiBpdCdzIHBvc3NpYmxlIHRvIHN1YnRyYWN0IEBzdWJ0cmFoZW5kIGZyb20gQG1pbnVlbmQuCisgKgorICogUmV0dXJuczogVFJVRSBpZiBhIHN1YnRyYWN0aW9uIGlzIHBvc3NpYmxlCisgKi8KK2dib29sZWFuCitnc3RfdmFsdWVfY2FuX3N1YnRyYWN0IChjb25zdCBHVmFsdWUgKiBtaW51ZW5kLCBjb25zdCBHVmFsdWUgKiBzdWJ0cmFoZW5kKQoreworICBHc3RWYWx1ZVN1YnRyYWN0SW5mbyAqaW5mbzsKKyAgZ3VpbnQgaSwgbGVuOworICBHVHlwZSBsdHlwZSwgbXR5cGUsIHN0eXBlOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX0lTX1ZBTFVFIChtaW51ZW5kKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19WQUxVRSAoc3VidHJhaGVuZCksIEZBTFNFKTsKKworICBsdHlwZSA9IGdzdF92YWx1ZV9saXN0X2dldF90eXBlICgpOworCisgIC8qIHNwZWNpYWwgY2FzZXMgKi8KKyAgaWYgKEdfVkFMVUVfSE9MRFMgKG1pbnVlbmQsIGx0eXBlKSB8fCBHX1ZBTFVFX0hPTERTIChzdWJ0cmFoZW5kLCBsdHlwZSkpCisgICAgcmV0dXJuIFRSVUU7CisKKyAgbXR5cGUgPSBHX1ZBTFVFX1RZUEUgKG1pbnVlbmQpOworICBzdHlwZSA9IEdfVkFMVUVfVFlQRSAoc3VidHJhaGVuZCk7CisKKyAgbGVuID0gZ3N0X3ZhbHVlX3N1YnRyYWN0X2Z1bmNzLT5sZW47CisgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgIGluZm8gPSAmZ19hcnJheV9pbmRleCAoZ3N0X3ZhbHVlX3N1YnRyYWN0X2Z1bmNzLCBHc3RWYWx1ZVN1YnRyYWN0SW5mbywgaSk7CisgICAgaWYgKGluZm8tPm1pbnVlbmQgPT0gbXR5cGUgJiYgaW5mby0+c3VidHJhaGVuZCA9PSBzdHlwZSkKKyAgICAgIHJldHVybiBUUlVFOworICB9CisKKyAgcmV0dXJuIGdzdF92YWx1ZV9jYW5fY29tcGFyZSAobWludWVuZCwgc3VidHJhaGVuZCk7Cit9CisKKy8qKgorICogZ3N0X3ZhbHVlX3JlZ2lzdGVyX3N1YnRyYWN0X2Z1bmM6CisgKiBAbWludWVuZF90eXBlOiB0eXBlIG9mIHRoZSBtaW51ZW5kCisgKiBAc3VidHJhaGVuZF90eXBlOiB0eXBlIG9mIHRoZSBzdWJ0cmFoZW5kCisgKiBAZnVuYzogZnVuY3Rpb24gdG8gdXNlCisgKgorICogUmVnaXN0ZXJzIEBmdW5jIGFzIGEgZnVuY3Rpb24gY2FwYWJsZSBvZiBzdWJ0cmFjdGluZyB0aGUgdmFsdWVzIG9mCisgKiBAc3VidHJhaGVuZF90eXBlIGZyb20gdmFsdWVzIG9mIEBtaW51ZW5kX3R5cGUuCisgKgorICogU3VidHJhY3QgZnVuY3Rpb25zIHNob3VsZCBiZSByZWdpc3RlcmVkIGF0IHN0YXJ0dXAgYmVmb3JlIGFueSBwaXBlbGluZXMgYXJlCisgKiBzdGFydGVkLCBhcyBnc3RfdmFsdWVfcmVnaXN0ZXJfc3VidHJhY3RfZnVuYygpIGlzIG5vdCB0aHJlYWQtc2FmZSBhbmQKKyAqIGNhbm5vdCBiZSB1c2VkIGF0IHRoZSBzYW1lIHRpbWUgYXMgZ3N0X3ZhbHVlX3N1YnRyYWN0KCkuCisgKi8KK3ZvaWQKK2dzdF92YWx1ZV9yZWdpc3Rlcl9zdWJ0cmFjdF9mdW5jIChHVHlwZSBtaW51ZW5kX3R5cGUsIEdUeXBlIHN1YnRyYWhlbmRfdHlwZSwKKyAgICBHc3RWYWx1ZVN1YnRyYWN0RnVuYyBmdW5jKQoreworICBHc3RWYWx1ZVN1YnRyYWN0SW5mbyBpbmZvOworCisgIC8qIG9uZSB0eXBlIG11c3QgYmUgdW5maXhlZCwgb3RoZXIgc3VidHJhY3Rpb25zIGNhbiBiZSBkb25lIGFzIGNvbXBhcmlzb25zICovCisgIGdfcmV0dXJuX2lmX2ZhaWwgKCFnc3RfdHlwZV9pc19maXhlZCAobWludWVuZF90eXBlKQorICAgICAgfHwgIWdzdF90eXBlX2lzX2ZpeGVkIChzdWJ0cmFoZW5kX3R5cGUpKTsKKworICBpbmZvLm1pbnVlbmQgPSBtaW51ZW5kX3R5cGU7CisgIGluZm8uc3VidHJhaGVuZCA9IHN1YnRyYWhlbmRfdHlwZTsKKyAgaW5mby5mdW5jID0gZnVuYzsKKworICBnX2FycmF5X2FwcGVuZF92YWwgKGdzdF92YWx1ZV9zdWJ0cmFjdF9mdW5jcywgaW5mbyk7Cit9CisKKy8qKgorICogZ3N0X3ZhbHVlX3JlZ2lzdGVyOgorICogQHRhYmxlOiBzdHJ1Y3R1cmUgY29udGFpbmluZyBmdW5jdGlvbnMgdG8gcmVnaXN0ZXIKKyAqCisgKiBSZWdpc3RlcnMgZnVuY3Rpb25zIHRvIHBlcmZvcm0gY2FsY3VsYXRpb25zIG9uICNHVmFsdWUgaXRlbXMgb2YgYSBnaXZlbgorICogdHlwZS4gRWFjaCB0eXBlIGNhbiBvbmx5IGJlIGFkZGVkIG9uY2UuCisgKi8KK3ZvaWQKK2dzdF92YWx1ZV9yZWdpc3RlciAoY29uc3QgR3N0VmFsdWVUYWJsZSAqIHRhYmxlKQoreworICBHc3RWYWx1ZVRhYmxlICpmb3VuZDsKKworICBnX3JldHVybl9pZl9mYWlsICh0YWJsZSAhPSBOVUxMKTsKKworICBnX2FycmF5X2FwcGVuZF92YWwgKGdzdF92YWx1ZV90YWJsZSwgKnRhYmxlKTsKKworICBmb3VuZCA9IGdzdF92YWx1ZV9oYXNoX2xvb2t1cF90eXBlICh0YWJsZS0+dHlwZSk7CisgIGlmIChmb3VuZCkKKyAgICBnX3dhcm5pbmcgKCJhZGRpbmcgdHlwZSAlcyBtdWx0aXBsZSB0aW1lcyIsIGdfdHlwZV9uYW1lICh0YWJsZS0+dHlwZSkpOworCisgIC8qIEZJWE1FOiB3ZSdyZSBub3QgcmVhbGx5IGRvaW5nIHRoZSBjb25zdCBqdXN0aWNlLCB3ZSBhc3N1bWUgdGhlIHRhYmxlIGlzCisgICAqIHN0YXRpYyAqLworICBnc3RfdmFsdWVfaGFzaF9hZGRfdHlwZSAodGFibGUtPnR5cGUsIHRhYmxlKTsKK30KKworLyoqCisgKiBnc3RfdmFsdWVfaW5pdF9hbmRfY29weToKKyAqIEBkZXN0OiAob3V0IGNhbGxlci1hbGxvY2F0ZXMpOiB0aGUgdGFyZ2V0IHZhbHVlCisgKiBAc3JjOiB0aGUgc291cmNlIHZhbHVlCisgKgorICogSW5pdGlhbGlzZXMgdGhlIHRhcmdldCB2YWx1ZSB0byBiZSBvZiB0aGUgc2FtZSB0eXBlIGFzIHNvdXJjZSBhbmQgdGhlbiBjb3BpZXMKKyAqIHRoZSBjb250ZW50cyBmcm9tIHNvdXJjZSB0byB0YXJnZXQuCisgKi8KK3ZvaWQKK2dzdF92YWx1ZV9pbml0X2FuZF9jb3B5IChHVmFsdWUgKiBkZXN0LCBjb25zdCBHVmFsdWUgKiBzcmMpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHNyYykpOworICBnX3JldHVybl9pZl9mYWlsIChkZXN0ICE9IE5VTEwpOworCisgIGdfdmFsdWVfaW5pdCAoZGVzdCwgR19WQUxVRV9UWVBFIChzcmMpKTsKKyAgZ192YWx1ZV9jb3B5IChzcmMsIGRlc3QpOworfQorCisvKioKKyAqIGdzdF92YWx1ZV9zZXJpYWxpemU6CisgKiBAdmFsdWU6IGEgI0dWYWx1ZSB0byBzZXJpYWxpemUKKyAqCisgKiB0cmllcyB0byB0cmFuc2Zvcm0gdGhlIGdpdmVuIEB2YWx1ZSBpbnRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHRoYXQgYWxsb3dzCisgKiBnZXR0aW5nIGJhY2sgdGhpcyBzdHJpbmcgbGF0ZXIgb24gdXNpbmcgZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplKCkuCisgKgorICogRnJlZS1mdW5jdGlvbjogZ19mcmVlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgc2VyaWFsaXphdGlvbiBmb3IgQHZhbHVlIG9yIE5VTEwgaWYgbm9uZSBleGlzdHMKKyAqLworZ2NoYXIgKgorZ3N0X3ZhbHVlX3NlcmlhbGl6ZSAoY29uc3QgR1ZhbHVlICogdmFsdWUpCit7CisgIGd1aW50IGksIGxlbjsKKyAgR1ZhbHVlIHNfdmFsID0geyAwIH07CisgIEdzdFZhbHVlVGFibGUgKnRhYmxlLCAqYmVzdDsKKyAgZ2NoYXIgKnM7CisgIEdUeXBlIHR5cGU7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHZhbHVlKSwgTlVMTCk7CisKKyAgdHlwZSA9IEdfVkFMVUVfVFlQRSAodmFsdWUpOworCisgIGJlc3QgPSBnc3RfdmFsdWVfaGFzaF9sb29rdXBfdHlwZSAodHlwZSk7CisKKyAgaWYgKEdfVU5MSUtFTFkgKCFiZXN0IHx8ICFiZXN0LT5zZXJpYWxpemUpKSB7CisgICAgbGVuID0gZ3N0X3ZhbHVlX3RhYmxlLT5sZW47CisgICAgYmVzdCA9IE5VTEw7CisgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICB0YWJsZSA9ICZnX2FycmF5X2luZGV4IChnc3RfdmFsdWVfdGFibGUsIEdzdFZhbHVlVGFibGUsIGkpOworICAgICAgaWYgKHRhYmxlLT5zZXJpYWxpemUgJiYgZ190eXBlX2lzX2EgKHR5cGUsIHRhYmxlLT50eXBlKSkgeworICAgICAgICBpZiAoIWJlc3QgfHwgZ190eXBlX2lzX2EgKHRhYmxlLT50eXBlLCBiZXN0LT50eXBlKSkKKyAgICAgICAgICBiZXN0ID0gdGFibGU7CisgICAgICB9CisgICAgfQorICB9CisgIGlmIChHX0xJS0VMWSAoYmVzdCkpCisgICAgcmV0dXJuIGJlc3QtPnNlcmlhbGl6ZSAodmFsdWUpOworCisgIGdfdmFsdWVfaW5pdCAoJnNfdmFsLCBHX1RZUEVfU1RSSU5HKTsKKyAgaWYgKGdfdmFsdWVfdHJhbnNmb3JtICh2YWx1ZSwgJnNfdmFsKSkgeworICAgIHMgPSBnc3Rfc3RyaW5nX3dyYXAgKGdfdmFsdWVfZ2V0X3N0cmluZyAoJnNfdmFsKSk7CisgIH0gZWxzZSB7CisgICAgcyA9IE5VTEw7CisgIH0KKyAgZ192YWx1ZV91bnNldCAoJnNfdmFsKTsKKworICByZXR1cm4gczsKK30KKworLyoqCisgKiBnc3RfdmFsdWVfZGVzZXJpYWxpemU6CisgKiBAZGVzdDogKG91dCBjYWxsZXItYWxsb2NhdGVzKTogI0dWYWx1ZSB0byBmaWxsIHdpdGggY29udGVudHMgb2YKKyAqICAgICBkZXNlcmlhbGl6YXRpb24KKyAqIEBzcmM6IHN0cmluZyB0byBkZXNlcmlhbGl6ZQorICoKKyAqIFRyaWVzIHRvIGRlc2VyaWFsaXplIGEgc3RyaW5nIGludG8gdGhlIHR5cGUgc3BlY2lmaWVkIGJ5IHRoZSBnaXZlbiBHVmFsdWUuCisgKiBJZiB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRzLCBUUlVFIGlzIHJldHVybmVkLCBGQUxTRSBvdGhlcndpc2UuCisgKgorICogUmV0dXJuczogVFJVRSBvbiBzdWNjZXNzCisgKi8KK2dib29sZWFuCitnc3RfdmFsdWVfZGVzZXJpYWxpemUgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IGdjaGFyICogc3JjKQoreworICBHc3RWYWx1ZVRhYmxlICp0YWJsZSwgKmJlc3Q7CisgIGd1aW50IGksIGxlbjsKKyAgR1R5cGUgdHlwZTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3JjICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKGRlc3QpLCBGQUxTRSk7CisKKyAgdHlwZSA9IEdfVkFMVUVfVFlQRSAoZGVzdCk7CisKKyAgYmVzdCA9IGdzdF92YWx1ZV9oYXNoX2xvb2t1cF90eXBlICh0eXBlKTsKKyAgaWYgKEdfVU5MSUtFTFkgKCFiZXN0IHx8ICFiZXN0LT5kZXNlcmlhbGl6ZSkpIHsKKyAgICBsZW4gPSBnc3RfdmFsdWVfdGFibGUtPmxlbjsKKyAgICBiZXN0ID0gTlVMTDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgIHRhYmxlID0gJmdfYXJyYXlfaW5kZXggKGdzdF92YWx1ZV90YWJsZSwgR3N0VmFsdWVUYWJsZSwgaSk7CisgICAgICBpZiAodGFibGUtPmRlc2VyaWFsaXplICYmIGdfdHlwZV9pc19hICh0eXBlLCB0YWJsZS0+dHlwZSkpIHsKKyAgICAgICAgaWYgKCFiZXN0IHx8IGdfdHlwZV9pc19hICh0YWJsZS0+dHlwZSwgYmVzdC0+dHlwZSkpCisgICAgICAgICAgYmVzdCA9IHRhYmxlOworICAgICAgfQorICAgIH0KKyAgfQorICBpZiAoR19MSUtFTFkgKGJlc3QpKQorICAgIHJldHVybiBiZXN0LT5kZXNlcmlhbGl6ZSAoZGVzdCwgc3JjKTsKKworICByZXR1cm4gRkFMU0U7Cit9CisKKy8qKgorICogZ3N0X3ZhbHVlX2lzX2ZpeGVkOgorICogQHZhbHVlOiB0aGUgI0dWYWx1ZSB0byBjaGVjaworICoKKyAqIFRlc3RzIGlmIHRoZSBnaXZlbiBHVmFsdWUsIGlmIGF2YWlsYWJsZSBpbiBhIEdzdFN0cnVjdHVyZSAob3IgYW55IG90aGVyCisgKiBjb250YWluZXIpIGNvbnRhaW5zIGEgImZpeGVkIiAod2hpY2ggbWVhbnM6IG9uZSB2YWx1ZSkgb3IgYW4gInVuZml4ZWQiCisgKiAod2hpY2ggbWVhbnM6IG11bHRpcGxlIHBvc3NpYmxlIHZhbHVlcywgc3VjaCBhcyBkYXRhIGxpc3RzIG9yIGRhdGEKKyAqIHJhbmdlcykgdmFsdWUuCisgKgorICogUmV0dXJuczogdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgImZpeGVkIi4KKyAqLworCitnYm9vbGVhbgorZ3N0X3ZhbHVlX2lzX2ZpeGVkIChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKK3sKKyAgR1R5cGUgdHlwZTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19WQUxVRSAodmFsdWUpLCBGQUxTRSk7CisKKyAgdHlwZSA9IEdfVkFMVUVfVFlQRSAodmFsdWUpOworCisgIC8qIHRoZSBtb3N0IGNvbW1vbiB0eXBlcyBhcmUganVzdCBiYXNpYyBwbGFpbiBnbGliIHR5cGVzICovCisgIGlmICh0eXBlIDw9IEdfVFlQRV9NQUtFX0ZVTkRBTUVOVEFMIChHX1RZUEVfUkVTRVJWRURfR0xJQl9MQVNUKSkgeworICAgIHJldHVybiBUUlVFOworICB9CisKKyAgaWYgKHR5cGUgPT0gR1NUX1RZUEVfQVJSQVkpIHsKKyAgICBnaW50IHNpemUsIG47CisgICAgY29uc3QgR1ZhbHVlICpraWQ7CisKKyAgICAvKiBjaGVjayByZWN1cnNpdmVseSAqLworICAgIHNpemUgPSBnc3RfdmFsdWVfYXJyYXlfZ2V0X3NpemUgKHZhbHVlKTsKKyAgICBmb3IgKG4gPSAwOyBuIDwgc2l6ZTsgbisrKSB7CisgICAgICBraWQgPSBnc3RfdmFsdWVfYXJyYXlfZ2V0X3ZhbHVlICh2YWx1ZSwgbik7CisgICAgICBpZiAoIWdzdF92YWx1ZV9pc19maXhlZCAoa2lkKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKKyAgfQorICByZXR1cm4gZ3N0X3R5cGVfaXNfZml4ZWQgKHR5cGUpOworfQorCisvKioKKyAqIGdzdF92YWx1ZV9maXhhdGU6CisgKiBAZGVzdDogdGhlICNHVmFsdWUgZGVzdGluYXRpb24KKyAqIEBzcmM6IHRoZSAjR1ZhbHVlIHRvIGZpeGF0ZQorICoKKyAqIEZpeGF0ZSBAc3JjIGludG8gYSBuZXcgdmFsdWUgQGRlc3QuCisgKiBGb3IgcmFuZ2VzLCB0aGUgZmlyc3QgZWxlbWVudCBpcyB0YWtlbi4gRm9yIGxpc3RzIGFuZCBhcnJheXMsIHRoZQorICogZmlyc3QgaXRlbSBpcyBmaXhhdGVkIGFuZCByZXR1cm5lZC4KKyAqIElmIEBzcmMgaXMgYWxyZWFkeSBmaXhlZCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIEZBTFNFLgorICoKKyAqIFJldHVybnM6IHRydWUgaWYgQGRlc3QgY29udGFpbnMgYSBmaXhhdGVkIHZlcnNpb24gb2YgQHNyYy4KKyAqLworZ2Jvb2xlYW4KK2dzdF92YWx1ZV9maXhhdGUgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IEdWYWx1ZSAqIHNyYykKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHNyYyksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRlc3QgIT0gTlVMTCwgRkFMU0UpOworCisgIGlmIChHX1ZBTFVFX1RZUEUgKHNyYykgPT0gR1NUX1RZUEVfSU5UX1JBTkdFKSB7CisgICAgZ192YWx1ZV9pbml0IChkZXN0LCBHX1RZUEVfSU5UKTsKKyAgICBnX3ZhbHVlX3NldF9pbnQgKGRlc3QsIGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAoc3JjKSk7CisgIH0gZWxzZSBpZiAoR19WQUxVRV9UWVBFIChzcmMpID09IEdTVF9UWVBFX0RPVUJMRV9SQU5HRSkgeworICAgIGdfdmFsdWVfaW5pdCAoZGVzdCwgR19UWVBFX0RPVUJMRSk7CisgICAgZ192YWx1ZV9zZXRfZG91YmxlIChkZXN0LCBnc3RfdmFsdWVfZ2V0X2RvdWJsZV9yYW5nZV9taW4gKHNyYykpOworICB9IGVsc2UgaWYgKEdfVkFMVUVfVFlQRSAoc3JjKSA9PSBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSkgeworICAgIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5IChkZXN0LCBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21pbiAoc3JjKSk7CisgIH0gZWxzZSBpZiAoR19WQUxVRV9UWVBFIChzcmMpID09IEdTVF9UWVBFX0xJU1QpIHsKKyAgICBHVmFsdWUgdGVtcCA9IHsgMCB9OworCisgICAgLyogbGlzdCBjb3VsZCBiZSBlbXB0eSAqLworICAgIGlmIChnc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZSAoc3JjKSA8PSAwKQorICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKCZ0ZW1wLCBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKHNyYywgMCkpOworCisgICAgaWYgKCFnc3RfdmFsdWVfZml4YXRlIChkZXN0LCAmdGVtcCkpCisgICAgICBnc3RfdmFsdWVfaW5pdF9hbmRfY29weSAoZGVzdCwgJnRlbXApOworICAgIGdfdmFsdWVfdW5zZXQgKCZ0ZW1wKTsKKyAgfSBlbHNlIGlmIChHX1ZBTFVFX1RZUEUgKHNyYykgPT0gR1NUX1RZUEVfQVJSQVkpIHsKKyAgICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKKyAgICBndWludCBuLCBsZW47CisKKyAgICBsZW4gPSBnc3RfdmFsdWVfYXJyYXlfZ2V0X3NpemUgKHNyYyk7CisgICAgZ192YWx1ZV9pbml0IChkZXN0LCBHU1RfVFlQRV9BUlJBWSk7CisgICAgZm9yIChuID0gMDsgbiA8IGxlbjsgbisrKSB7CisgICAgICBHVmFsdWUga2lkID0geyAwIH07CisgICAgICBjb25zdCBHVmFsdWUgKm9yaWdfa2lkID0gZ3N0X3ZhbHVlX2FycmF5X2dldF92YWx1ZSAoc3JjLCBuKTsKKworICAgICAgaWYgKCFnc3RfdmFsdWVfZml4YXRlICgma2lkLCBvcmlnX2tpZCkpCisgICAgICAgIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5ICgma2lkLCBvcmlnX2tpZCk7CisgICAgICBlbHNlCisgICAgICAgIHJlcyA9IFRSVUU7CisgICAgICBnc3RfdmFsdWVfYXJyYXlfYXBwZW5kX3ZhbHVlIChkZXN0LCAma2lkKTsKKyAgICAgIGdfdmFsdWVfdW5zZXQgKCZraWQpOworICAgIH0KKworICAgIGlmICghcmVzKQorICAgICAgZ192YWx1ZV91bnNldCAoZGVzdCk7CisKKyAgICByZXR1cm4gcmVzOworICB9IGVsc2UgeworICAgIHJldHVybiBGQUxTRTsKKyAgfQorICByZXR1cm4gVFJVRTsKK30KKworCisvKioqKioqKioqKioqCisgKiBmcmFjdGlvbiAqCisgKioqKioqKioqKioqLworCisvKiBoZWxwZXIgZnVuY3Rpb25zICovCitzdGF0aWMgdm9pZAorZ3N0X3ZhbHVlX2luaXRfZnJhY3Rpb24gKEdWYWx1ZSAqIHZhbHVlKQoreworICB2YWx1ZS0+ZGF0YVswXS52X2ludCA9IDA7CisgIHZhbHVlLT5kYXRhWzFdLnZfaW50ID0gMTsKK30KKworc3RhdGljIHZvaWQKK2dzdF92YWx1ZV9jb3B5X2ZyYWN0aW9uIChjb25zdCBHVmFsdWUgKiBzcmNfdmFsdWUsIEdWYWx1ZSAqIGRlc3RfdmFsdWUpCit7CisgIGRlc3RfdmFsdWUtPmRhdGFbMF0udl9pbnQgPSBzcmNfdmFsdWUtPmRhdGFbMF0udl9pbnQ7CisgIGRlc3RfdmFsdWUtPmRhdGFbMV0udl9pbnQgPSBzcmNfdmFsdWUtPmRhdGFbMV0udl9pbnQ7Cit9CisKK3N0YXRpYyBnY2hhciAqCitnc3RfdmFsdWVfY29sbGVjdF9mcmFjdGlvbiAoR1ZhbHVlICogdmFsdWUsIGd1aW50IG5fY29sbGVjdF92YWx1ZXMsCisgICAgR1R5cGVDVmFsdWUgKiBjb2xsZWN0X3ZhbHVlcywgZ3VpbnQgY29sbGVjdF9mbGFncykKK3sKKyAgaWYgKG5fY29sbGVjdF92YWx1ZXMgIT0gMikKKyAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgibm90IGVub3VnaCB2YWx1ZSBsb2NhdGlvbnMgZm9yIGAlcycgcGFzc2VkIiwKKyAgICAgICAgR19WQUxVRV9UWVBFX05BTUUgKHZhbHVlKSk7CisgIGlmIChjb2xsZWN0X3ZhbHVlc1sxXS52X2ludCA9PSAwKQorICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJwYXNzZWQgJzAnIGFzIGRlbm9taW5hdG9yIGZvciBgJXMnIiwKKyAgICAgICAgR19WQUxVRV9UWVBFX05BTUUgKHZhbHVlKSk7CisgIGlmIChjb2xsZWN0X3ZhbHVlc1swXS52X2ludCA8IC1HX01BWElOVCkKKyAgICByZXR1cm4KKyAgICAgICAgZ19zdHJkdXBfcHJpbnRmCisgICAgICAgICgicGFzc2VkIHZhbHVlIHNtYWxsZXIgdGhhbiAtR19NQVhJTlQgYXMgbnVtZXJhdG9yIGZvciBgJXMnIiwKKyAgICAgICAgR19WQUxVRV9UWVBFX05BTUUgKHZhbHVlKSk7CisgIGlmIChjb2xsZWN0X3ZhbHVlc1sxXS52X2ludCA8IC1HX01BWElOVCkKKyAgICByZXR1cm4KKyAgICAgICAgZ19zdHJkdXBfcHJpbnRmCisgICAgICAgICgicGFzc2VkIHZhbHVlIHNtYWxsZXIgdGhhbiAtR19NQVhJTlQgYXMgZGVub21pbmF0b3IgZm9yIGAlcyciLAorICAgICAgICBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsdWUpKTsKKworICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICh2YWx1ZSwKKyAgICAgIGNvbGxlY3RfdmFsdWVzWzBdLnZfaW50LCBjb2xsZWN0X3ZhbHVlc1sxXS52X2ludCk7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBnY2hhciAqCitnc3RfdmFsdWVfbGNvcHlfZnJhY3Rpb24gKGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBndWludCBuX2NvbGxlY3RfdmFsdWVzLAorICAgIEdUeXBlQ1ZhbHVlICogY29sbGVjdF92YWx1ZXMsIGd1aW50IGNvbGxlY3RfZmxhZ3MpCit7CisgIGdpbnQgKm51bWVyYXRvciA9IGNvbGxlY3RfdmFsdWVzWzBdLnZfcG9pbnRlcjsKKyAgZ2ludCAqZGVub21pbmF0b3IgPSBjb2xsZWN0X3ZhbHVlc1sxXS52X3BvaW50ZXI7CisKKyAgaWYgKCFudW1lcmF0b3IpCisgICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoIm51bWVyYXRvciBmb3IgYCVzJyBwYXNzZWQgYXMgTlVMTCIsCisgICAgICAgIEdfVkFMVUVfVFlQRV9OQU1FICh2YWx1ZSkpOworICBpZiAoIWRlbm9taW5hdG9yKQorICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJkZW5vbWluYXRvciBmb3IgYCVzJyBwYXNzZWQgYXMgTlVMTCIsCisgICAgICAgIEdfVkFMVUVfVFlQRV9OQU1FICh2YWx1ZSkpOworCisgICpudW1lcmF0b3IgPSB2YWx1ZS0+ZGF0YVswXS52X2ludDsKKyAgKmRlbm9taW5hdG9yID0gdmFsdWUtPmRhdGFbMV0udl9pbnQ7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbjoKKyAqIEB2YWx1ZTogYSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gI0dTVF9UWVBFX0ZSQUNUSU9OCisgKiBAbnVtZXJhdG9yOiB0aGUgbnVtZXJhdG9yIG9mIHRoZSBmcmFjdGlvbgorICogQGRlbm9taW5hdG9yOiB0aGUgZGVub21pbmF0b3Igb2YgdGhlIGZyYWN0aW9uCisgKgorICogU2V0cyBAdmFsdWUgdG8gdGhlIGZyYWN0aW9uIHNwZWNpZmllZCBieSBAbnVtZXJhdG9yIG92ZXIgQGRlbm9taW5hdG9yLgorICogVGhlIGZyYWN0aW9uIGdldHMgcmVkdWNlZCB0byB0aGUgc21hbGxlc3QgbnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvciwKKyAqIGFuZCBpZiBuZWNlc3NhcnkgdGhlIHNpZ24gaXMgbW92ZWQgdG8gdGhlIG51bWVyYXRvci4KKyAqLwordm9pZAorZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoR1ZhbHVlICogdmFsdWUsIGdpbnQgbnVtZXJhdG9yLCBnaW50IGRlbm9taW5hdG9yKQoreworICBnaW50IGdjZCA9IDA7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OICh2YWx1ZSkpOworICBnX3JldHVybl9pZl9mYWlsIChkZW5vbWluYXRvciAhPSAwKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoZGVub21pbmF0b3IgPj0gLUdfTUFYSU5UKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAobnVtZXJhdG9yID49IC1HX01BWElOVCk7CisKKyAgLyogbm9ybWFsaXplIHNpZ24gKi8KKyAgaWYgKGRlbm9taW5hdG9yIDwgMCkgeworICAgIG51bWVyYXRvciA9IC1udW1lcmF0b3I7CisgICAgZGVub21pbmF0b3IgPSAtZGVub21pbmF0b3I7CisgIH0KKworICAvKiBjaGVjayBmb3IgcmVkdWN0aW9uICovCisgIGdjZCA9IGdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yIChudW1lcmF0b3IsIGRlbm9taW5hdG9yKTsKKyAgaWYgKGdjZCkgeworICAgIG51bWVyYXRvciAvPSBnY2Q7CisgICAgZGVub21pbmF0b3IgLz0gZ2NkOworICB9CisKKyAgZ19hc3NlcnQgKGRlbm9taW5hdG9yID4gMCk7CisKKyAgdmFsdWUtPmRhdGFbMF0udl9pbnQgPSBudW1lcmF0b3I7CisgIHZhbHVlLT5kYXRhWzFdLnZfaW50ID0gZGVub21pbmF0b3I7Cit9CisKKy8qKgorICogZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9udW1lcmF0b3I6CisgKiBAdmFsdWU6IGEgR1ZhbHVlIGluaXRpYWxpemVkIHRvICNHU1RfVFlQRV9GUkFDVElPTgorICoKKyAqIEdldHMgdGhlIG51bWVyYXRvciBvZiB0aGUgZnJhY3Rpb24gc3BlY2lmaWVkIGJ5IEB2YWx1ZS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbnVtZXJhdG9yIG9mIHRoZSBmcmFjdGlvbi4KKyAqLworZ2ludAorZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9udW1lcmF0b3IgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OICh2YWx1ZSksIDApOworCisgIHJldHVybiB2YWx1ZS0+ZGF0YVswXS52X2ludDsKK30KKworLyoqCisgKiBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX2Rlbm9taW5hdG9yOgorICogQHZhbHVlOiBhIEdWYWx1ZSBpbml0aWFsaXplZCB0byAjR1NUX1RZUEVfRlJBQ1RJT04KKyAqCisgKiBHZXRzIHRoZSBkZW5vbWluYXRvciBvZiB0aGUgZnJhY3Rpb24gc3BlY2lmaWVkIGJ5IEB2YWx1ZS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgZGVub21pbmF0b3Igb2YgdGhlIGZyYWN0aW9uLgorICovCitnaW50Citnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX2Rlbm9taW5hdG9yIChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19GUkFDVElPTiAodmFsdWUpLCAxKTsKKworICByZXR1cm4gdmFsdWUtPmRhdGFbMV0udl9pbnQ7Cit9CisKKy8qKgorICogZ3N0X3ZhbHVlX2ZyYWN0aW9uX211bHRpcGx5OgorICogQHByb2R1Y3Q6IGEgR1ZhbHVlIGluaXRpYWxpemVkIHRvICNHU1RfVFlQRV9GUkFDVElPTgorICogQGZhY3RvcjE6IGEgR1ZhbHVlIGluaXRpYWxpemVkIHRvICNHU1RfVFlQRV9GUkFDVElPTgorICogQGZhY3RvcjI6IGEgR1ZhbHVlIGluaXRpYWxpemVkIHRvICNHU1RfVFlQRV9GUkFDVElPTgorICoKKyAqIE11bHRpcGxpZXMgdGhlIHR3byAjR1ZhbHVlIGl0ZW1zIGNvbnRhaW5pbmcgYSAjR1NUX1RZUEVfRlJBQ1RJT04gYW5kIHNldHMKKyAqIEBwcm9kdWN0IHRvIHRoZSBwcm9kdWN0IG9mIHRoZSB0d28gZnJhY3Rpb25zLgorICoKKyAqIFJldHVybnM6IEZBTFNFIGluIGNhc2Ugb2YgYW4gZXJyb3IgKGxpa2UgaW50ZWdlciBvdmVyZmxvdyksIFRSVUUgb3RoZXJ3aXNlLgorICovCitnYm9vbGVhbgorZ3N0X3ZhbHVlX2ZyYWN0aW9uX211bHRpcGx5IChHVmFsdWUgKiBwcm9kdWN0LCBjb25zdCBHVmFsdWUgKiBmYWN0b3IxLAorICAgIGNvbnN0IEdWYWx1ZSAqIGZhY3RvcjIpCit7CisgIGdpbnQgbjEsIG4yLCBkMSwgZDI7CisgIGdpbnQgcmVzX24sIHJlc19kOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwcm9kdWN0ICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19GUkFDVElPTiAoZmFjdG9yMSksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19GUkFDVElPTiAoZmFjdG9yMiksIEZBTFNFKTsKKworICBuMSA9IGZhY3RvcjEtPmRhdGFbMF0udl9pbnQ7CisgIG4yID0gZmFjdG9yMi0+ZGF0YVswXS52X2ludDsKKyAgZDEgPSBmYWN0b3IxLT5kYXRhWzFdLnZfaW50OworICBkMiA9IGZhY3RvcjItPmRhdGFbMV0udl9pbnQ7CisKKyAgaWYgKCFnc3RfdXRpbF9mcmFjdGlvbl9tdWx0aXBseSAobjEsIGQxLCBuMiwgZDIsICZyZXNfbiwgJnJlc19kKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAocHJvZHVjdCwgcmVzX24sIHJlc19kKTsKKworICByZXR1cm4gVFJVRTsKK30KKworLyoqCisgKiBnc3RfdmFsdWVfZnJhY3Rpb25fc3VidHJhY3Q6CisgKiBAZGVzdDogYSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gI0dTVF9UWVBFX0ZSQUNUSU9OCisgKiBAbWludWVuZDogYSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gI0dTVF9UWVBFX0ZSQUNUSU9OCisgKiBAc3VidHJhaGVuZDogYSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gI0dTVF9UWVBFX0ZSQUNUSU9OCisgKgorICogU3VidHJhY3RzIHRoZSBAc3VidHJhaGVuZCBmcm9tIHRoZSBAbWludWVuZCBhbmQgc2V0cyBAZGVzdCB0byB0aGUgcmVzdWx0LgorICoKKyAqIFJldHVybnM6IEZBTFNFIGluIGNhc2Ugb2YgYW4gZXJyb3IgKGxpa2UgaW50ZWdlciBvdmVyZmxvdyksIFRSVUUgb3RoZXJ3aXNlLgorICovCitnYm9vbGVhbgorZ3N0X3ZhbHVlX2ZyYWN0aW9uX3N1YnRyYWN0IChHVmFsdWUgKiBkZXN0LAorICAgIGNvbnN0IEdWYWx1ZSAqIG1pbnVlbmQsIGNvbnN0IEdWYWx1ZSAqIHN1YnRyYWhlbmQpCit7CisgIGdpbnQgbjEsIG4yLCBkMSwgZDI7CisgIGdpbnQgcmVzX24sIHJlc19kOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkZXN0ICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19GUkFDVElPTiAobWludWVuZCksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19GUkFDVElPTiAoc3VidHJhaGVuZCksIEZBTFNFKTsKKworICBuMSA9IG1pbnVlbmQtPmRhdGFbMF0udl9pbnQ7CisgIG4yID0gc3VidHJhaGVuZC0+ZGF0YVswXS52X2ludDsKKyAgZDEgPSBtaW51ZW5kLT5kYXRhWzFdLnZfaW50OworICBkMiA9IHN1YnRyYWhlbmQtPmRhdGFbMV0udl9pbnQ7CisKKyAgaWYgKCFnc3RfdXRpbF9mcmFjdGlvbl9hZGQgKG4xLCBkMSwgLW4yLCBkMiwgJnJlc19uLCAmcmVzX2QpKQorICAgIHJldHVybiBGQUxTRTsKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoZGVzdCwgcmVzX24sIHJlc19kKTsKKworICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdjaGFyICoKK2dzdF92YWx1ZV9zZXJpYWxpemVfZnJhY3Rpb24gKGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQoreworICBnaW50MzIgbnVtZXJhdG9yID0gdmFsdWUtPmRhdGFbMF0udl9pbnQ7CisgIGdpbnQzMiBkZW5vbWluYXRvciA9IHZhbHVlLT5kYXRhWzFdLnZfaW50OworICBnYm9vbGVhbiBwb3NpdGl2ZSA9IFRSVUU7CisKKyAgLyogZ2V0IHRoZSBzaWduIGFuZCBtYWtlIGNvbXBvbmVudHMgYWJzb2x1dGUgKi8KKyAgaWYgKG51bWVyYXRvciA8IDApIHsKKyAgICBudW1lcmF0b3IgPSAtbnVtZXJhdG9yOworICAgIHBvc2l0aXZlID0gIXBvc2l0aXZlOworICB9CisgIGlmIChkZW5vbWluYXRvciA8IDApIHsKKyAgICBkZW5vbWluYXRvciA9IC1kZW5vbWluYXRvcjsKKyAgICBwb3NpdGl2ZSA9ICFwb3NpdGl2ZTsKKyAgfQorCisgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCIlcyVkLyVkIiwKKyAgICAgIHBvc2l0aXZlID8gIiIgOiAiLSIsIG51bWVyYXRvciwgZGVub21pbmF0b3IpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF92YWx1ZV9kZXNlcmlhbGl6ZV9mcmFjdGlvbiAoR1ZhbHVlICogZGVzdCwgY29uc3QgZ2NoYXIgKiBzKQoreworICBnaW50IG51bSwgZGVuOworICBnaW50IG51bV9jaGFyczsKKworICBpZiAoR19VTkxJS0VMWSAocyA9PSBOVUxMKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgaWYgKEdfVU5MSUtFTFkgKGRlc3QgPT0gTlVMTCB8fCAhR1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OIChkZXN0KSkpCisgICAgcmV0dXJuIEZBTFNFOworCisgIGlmIChzc2NhbmYgKHMsICIlZC8lZCVuIiwgJm51bSwgJmRlbiwgJm51bV9jaGFycykgPj0gMikgeworICAgIGlmIChzW251bV9jaGFyc10gIT0gMCkKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICBpZiAoZGVuID09IDApCisgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uIChkZXN0LCBudW0sIGRlbik7CisgICAgcmV0dXJuIFRSVUU7CisgIH0gZWxzZSBpZiAoZ19hc2NpaV9zdHJjYXNlY21wIChzLCAiMS9tYXgiKSA9PSAwKSB7CisgICAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoZGVzdCwgMSwgR19NQVhJTlQpOworICAgIHJldHVybiBUUlVFOworICB9IGVsc2UgaWYgKHNzY2FuZiAocywgIiVkJW4iLCAmbnVtLCAmbnVtX2NoYXJzKSA+PSAxKSB7CisgICAgaWYgKHNbbnVtX2NoYXJzXSAhPSAwKQorICAgICAgcmV0dXJuIEZBTFNFOworICAgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKGRlc3QsIG51bSwgMSk7CisgICAgcmV0dXJuIFRSVUU7CisgIH0gZWxzZSBpZiAoZ19hc2NpaV9zdHJjYXNlY21wIChzLCAibWluIikgPT0gMCkgeworICAgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKGRlc3QsIC1HX01BWElOVCwgMSk7CisgICAgcmV0dXJuIFRSVUU7CisgIH0gZWxzZSBpZiAoZ19hc2NpaV9zdHJjYXNlY21wIChzLCAibWF4IikgPT0gMCkgeworICAgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKGRlc3QsIEdfTUFYSU5ULCAxKTsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorCisgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQKK2dzdF92YWx1ZV90cmFuc2Zvcm1fZnJhY3Rpb25fc3RyaW5nIChjb25zdCBHVmFsdWUgKiBzcmNfdmFsdWUsCisgICAgR1ZhbHVlICogZGVzdF92YWx1ZSkKK3sKKyAgZGVzdF92YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIgPSBnc3RfdmFsdWVfc2VyaWFsaXplX2ZyYWN0aW9uIChzcmNfdmFsdWUpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3ZhbHVlX3RyYW5zZm9ybV9zdHJpbmdfZnJhY3Rpb24gKGNvbnN0IEdWYWx1ZSAqIHNyY192YWx1ZSwKKyAgICBHVmFsdWUgKiBkZXN0X3ZhbHVlKQoreworICBpZiAoIWdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9mcmFjdGlvbiAoZGVzdF92YWx1ZSwKKyAgICAgICAgICBzcmNfdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyKSkKKyAgICAvKiBJZiB0aGUgZGVzZXJpYWxpemUgZmFpbHMsIGVuc3VyZSB3ZSBsZWF2ZSB0aGUgZnJhY3Rpb24gaW4gYQorICAgICAqIHZhbGlkLCBpZiBpbmNvcnJlY3QsIHN0YXRlICovCisgICAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoZGVzdF92YWx1ZSwgMCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfdmFsdWVfdHJhbnNmb3JtX2RvdWJsZV9mcmFjdGlvbiAoY29uc3QgR1ZhbHVlICogc3JjX3ZhbHVlLAorICAgIEdWYWx1ZSAqIGRlc3RfdmFsdWUpCit7CisgIGdkb3VibGUgc3JjID0gZ192YWx1ZV9nZXRfZG91YmxlIChzcmNfdmFsdWUpOworICBnaW50IG4sIGQ7CisKKyAgZ3N0X3V0aWxfZG91YmxlX3RvX2ZyYWN0aW9uIChzcmMsICZuLCAmZCk7CisgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKGRlc3RfdmFsdWUsIG4sIGQpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3ZhbHVlX3RyYW5zZm9ybV9mbG9hdF9mcmFjdGlvbiAoY29uc3QgR1ZhbHVlICogc3JjX3ZhbHVlLAorICAgIEdWYWx1ZSAqIGRlc3RfdmFsdWUpCit7CisgIGdmbG9hdCBzcmMgPSBnX3ZhbHVlX2dldF9mbG9hdCAoc3JjX3ZhbHVlKTsKKyAgZ2ludCBuLCBkOworCisgIGdzdF91dGlsX2RvdWJsZV90b19mcmFjdGlvbiAoc3JjLCAmbiwgJmQpOworICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uIChkZXN0X3ZhbHVlLCBuLCBkKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF92YWx1ZV90cmFuc2Zvcm1fZnJhY3Rpb25fZG91YmxlIChjb25zdCBHVmFsdWUgKiBzcmNfdmFsdWUsCisgICAgR1ZhbHVlICogZGVzdF92YWx1ZSkKK3sKKyAgZGVzdF92YWx1ZS0+ZGF0YVswXS52X2RvdWJsZSA9ICgoZG91YmxlKSBzcmNfdmFsdWUtPmRhdGFbMF0udl9pbnQpIC8KKyAgICAgICgoZG91YmxlKSBzcmNfdmFsdWUtPmRhdGFbMV0udl9pbnQpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3ZhbHVlX3RyYW5zZm9ybV9mcmFjdGlvbl9mbG9hdCAoY29uc3QgR1ZhbHVlICogc3JjX3ZhbHVlLAorICAgIEdWYWx1ZSAqIGRlc3RfdmFsdWUpCit7CisgIGRlc3RfdmFsdWUtPmRhdGFbMF0udl9mbG9hdCA9ICgoZmxvYXQpIHNyY192YWx1ZS0+ZGF0YVswXS52X2ludCkgLworICAgICAgKChmbG9hdCkgc3JjX3ZhbHVlLT5kYXRhWzFdLnZfaW50KTsKK30KKworc3RhdGljIGdpbnQKK2dzdF92YWx1ZV9jb21wYXJlX2ZyYWN0aW9uIChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKK3sKKyAgZ2ludCBuMSwgbjI7CisgIGdpbnQgZDEsIGQyOworICBnaW50IHJldDsKKworICBuMSA9IHZhbHVlMS0+ZGF0YVswXS52X2ludDsKKyAgbjIgPSB2YWx1ZTItPmRhdGFbMF0udl9pbnQ7CisgIGQxID0gdmFsdWUxLT5kYXRhWzFdLnZfaW50OworICBkMiA9IHZhbHVlMi0+ZGF0YVsxXS52X2ludDsKKworICAvKiBmcmFjdGlvbnMgYXJlIHJlZHVjZWQgd2hlbiBzZXQsIHNvIHdlIGNhbiBxdWlja2x5IHNlZSBpZiB0aGV5J3JlIGVxdWFsICovCisgIGlmIChuMSA9PSBuMiAmJiBkMSA9PSBkMikKKyAgICByZXR1cm4gR1NUX1ZBTFVFX0VRVUFMOworCisgIGlmIChkMSA9PSAwICYmIGQyID09IDApCisgICAgcmV0dXJuIEdTVF9WQUxVRV9VTk9SREVSRUQ7CisgIGVsc2UgaWYgKGQxID09IDApCisgICAgcmV0dXJuIEdTVF9WQUxVRV9HUkVBVEVSX1RIQU47CisgIGVsc2UgaWYgKGQyID09IDApCisgICAgcmV0dXJuIEdTVF9WQUxVRV9MRVNTX1RIQU47CisKKyAgcmV0ID0gZ3N0X3V0aWxfZnJhY3Rpb25fY29tcGFyZSAobjEsIGQxLCBuMiwgZDIpOworICBpZiAocmV0ID09IC0xKQorICAgIHJldHVybiBHU1RfVkFMVUVfTEVTU19USEFOOworICBlbHNlIGlmIChyZXQgPT0gMSkKKyAgICByZXR1cm4gR1NUX1ZBTFVFX0dSRUFURVJfVEhBTjsKKworICAvKiBFcXVhbGl0eSBjYW4ndCBoYXBwZW4gaGVyZSBiZWNhdXNlIHdlIGNoZWNrIGZvciB0aGF0CisgICAqIGZpcnN0IGFscmVhZHkgKi8KKyAgZ19yZXR1cm5fdmFsX2lmX3JlYWNoZWQgKEdTVF9WQUxVRV9VTk9SREVSRUQpOworfQorCisvKioqKioqKioqCisgKiBHRGF0ZSAqCisgKioqKioqKioqLworCisvKioKKyAqIGdzdF92YWx1ZV9zZXRfZGF0ZToKKyAqIEB2YWx1ZTogYSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfREFURQorICogQGRhdGU6IHRoZSBkYXRlIHRvIHNldCB0aGUgdmFsdWUgdG8KKyAqCisgKiBTZXRzIHRoZSBjb250ZW50cyBvZiBAdmFsdWUgdG8gY29ycmVzcG9uZCB0byBAZGF0ZS4gIFRoZSBhY3R1YWwKKyAqICNHRGF0ZSBzdHJ1Y3R1cmUgaXMgY29waWVkIGJlZm9yZSBpdCBpcyB1c2VkLgorICovCit2b2lkCitnc3RfdmFsdWVfc2V0X2RhdGUgKEdWYWx1ZSAqIHZhbHVlLCBjb25zdCBHRGF0ZSAqIGRhdGUpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdfVkFMVUVfVFlQRSAodmFsdWUpID09IEdTVF9UWVBFX0RBVEUpOworICBnX3JldHVybl9pZl9mYWlsIChnX2RhdGVfdmFsaWQgKGRhdGUpKTsKKworICBnX3ZhbHVlX3NldF9ib3hlZCAodmFsdWUsIGRhdGUpOworfQorCisvKioKKyAqIGdzdF92YWx1ZV9nZXRfZGF0ZToKKyAqIEB2YWx1ZTogYSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfREFURQorICoKKyAqIEdldHMgdGhlIGNvbnRlbnRzIG9mIEB2YWx1ZS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBjb250ZW50cyBvZiBAdmFsdWUKKyAqLworY29uc3QgR0RhdGUgKgorZ3N0X3ZhbHVlX2dldF9kYXRlIChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfVkFMVUVfVFlQRSAodmFsdWUpID09IEdTVF9UWVBFX0RBVEUsIE5VTEwpOworCisgIHJldHVybiAoY29uc3QgR0RhdGUgKikgZ192YWx1ZV9nZXRfYm94ZWQgKHZhbHVlKTsKK30KKworc3RhdGljIGdwb2ludGVyCitnc3RfZGF0ZV9jb3B5IChncG9pbnRlciBib3hlZCkKK3sKKyAgY29uc3QgR0RhdGUgKmRhdGUgPSAoY29uc3QgR0RhdGUgKikgYm94ZWQ7CisKKyAgaWYgKCFnX2RhdGVfdmFsaWQgKGRhdGUpKSB7CisgICAgR1NUX1dBUk5JTkcgKCJpbnZhbGlkIEdEYXRlIik7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICByZXR1cm4gZ19kYXRlX25ld19qdWxpYW4gKGdfZGF0ZV9nZXRfanVsaWFuIChkYXRlKSk7Cit9CisKK3N0YXRpYyBnaW50Citnc3RfdmFsdWVfY29tcGFyZV9kYXRlIChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKK3sKKyAgY29uc3QgR0RhdGUgKmRhdGUxID0gKGNvbnN0IEdEYXRlICopIGdfdmFsdWVfZ2V0X2JveGVkICh2YWx1ZTEpOworICBjb25zdCBHRGF0ZSAqZGF0ZTIgPSAoY29uc3QgR0RhdGUgKikgZ192YWx1ZV9nZXRfYm94ZWQgKHZhbHVlMik7CisgIGd1aW50MzIgajEsIGoyOworCisgIGlmIChkYXRlMSA9PSBkYXRlMikKKyAgICByZXR1cm4gR1NUX1ZBTFVFX0VRVUFMOworCisgIGlmICgoZGF0ZTEgPT0gTlVMTCB8fCAhZ19kYXRlX3ZhbGlkIChkYXRlMSkpCisgICAgICAmJiAoZGF0ZTIgIT0gTlVMTCAmJiBnX2RhdGVfdmFsaWQgKGRhdGUyKSkpIHsKKyAgICByZXR1cm4gR1NUX1ZBTFVFX0xFU1NfVEhBTjsKKyAgfQorCisgIGlmICgoZGF0ZTIgPT0gTlVMTCB8fCAhZ19kYXRlX3ZhbGlkIChkYXRlMikpCisgICAgICAmJiAoZGF0ZTEgIT0gTlVMTCAmJiBnX2RhdGVfdmFsaWQgKGRhdGUxKSkpIHsKKyAgICByZXR1cm4gR1NUX1ZBTFVFX0dSRUFURVJfVEhBTjsKKyAgfQorCisgIGlmIChkYXRlMSA9PSBOVUxMIHx8IGRhdGUyID09IE5VTEwgfHwgIWdfZGF0ZV92YWxpZCAoZGF0ZTEpCisgICAgICB8fCAhZ19kYXRlX3ZhbGlkIChkYXRlMikpIHsKKyAgICByZXR1cm4gR1NUX1ZBTFVFX1VOT1JERVJFRDsKKyAgfQorCisgIGoxID0gZ19kYXRlX2dldF9qdWxpYW4gKGRhdGUxKTsKKyAgajIgPSBnX2RhdGVfZ2V0X2p1bGlhbiAoZGF0ZTIpOworCisgIGlmIChqMSA9PSBqMikKKyAgICByZXR1cm4gR1NUX1ZBTFVFX0VRVUFMOworICBlbHNlIGlmIChqMSA8IGoyKQorICAgIHJldHVybiBHU1RfVkFMVUVfTEVTU19USEFOOworICBlbHNlCisgICAgcmV0dXJuIEdTVF9WQUxVRV9HUkVBVEVSX1RIQU47Cit9CisKK3N0YXRpYyBnY2hhciAqCitnc3RfdmFsdWVfc2VyaWFsaXplX2RhdGUgKGNvbnN0IEdWYWx1ZSAqIHZhbCkKK3sKKyAgY29uc3QgR0RhdGUgKmRhdGUgPSAoY29uc3QgR0RhdGUgKikgZ192YWx1ZV9nZXRfYm94ZWQgKHZhbCk7CisKKyAgaWYgKGRhdGUgPT0gTlVMTCB8fCAhZ19kYXRlX3ZhbGlkIChkYXRlKSkKKyAgICByZXR1cm4gZ19zdHJkdXAgKCI5OTk5LTk5LTk5Iik7CisKKyAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoIiUwNHUtJTAydS0lMDJ1IiwgZ19kYXRlX2dldF95ZWFyIChkYXRlKSwKKyAgICAgIGdfZGF0ZV9nZXRfbW9udGggKGRhdGUpLCBnX2RhdGVfZ2V0X2RheSAoZGF0ZSkpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF92YWx1ZV9kZXNlcmlhbGl6ZV9kYXRlIChHVmFsdWUgKiBkZXN0LCBjb25zdCBnY2hhciAqIHMpCit7CisgIGd1aW50IHllYXIsIG1vbnRoLCBkYXk7CisKKyAgaWYgKCFzIHx8IHNzY2FuZiAocywgIiUwNHUtJTAydS0lMDJ1IiwgJnllYXIsICZtb250aCwgJmRheSkgIT0gMykKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgaWYgKCFnX2RhdGVfdmFsaWRfZG15IChkYXksIG1vbnRoLCB5ZWFyKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgZ192YWx1ZV90YWtlX2JveGVkIChkZXN0LCBnX2RhdGVfbmV3X2RteSAoZGF5LCBtb250aCwgeWVhcikpOworICByZXR1cm4gVFJVRTsKK30KKworLyoqKioqKioqKioqKioKKyAqIEdzdERhdGVUaW1lICoKKyAqKioqKioqKioqKioqLworCitzdGF0aWMgZ2ludAorZ3N0X3ZhbHVlX2NvbXBhcmVfZGF0ZV90aW1lIChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKK3sKKyAgY29uc3QgR3N0RGF0ZVRpbWUgKmRhdGUxID0gKGNvbnN0IEdzdERhdGVUaW1lICopIGdfdmFsdWVfZ2V0X2JveGVkICh2YWx1ZTEpOworICBjb25zdCBHc3REYXRlVGltZSAqZGF0ZTIgPSAoY29uc3QgR3N0RGF0ZVRpbWUgKikgZ192YWx1ZV9nZXRfYm94ZWQgKHZhbHVlMik7CisgIGdpbnQgcmV0OworCisgIGlmIChkYXRlMSA9PSBkYXRlMikKKyAgICByZXR1cm4gR1NUX1ZBTFVFX0VRVUFMOworCisgIGlmICgoZGF0ZTEgPT0gTlVMTCkgJiYgKGRhdGUyICE9IE5VTEwpKSB7CisgICAgcmV0dXJuIEdTVF9WQUxVRV9MRVNTX1RIQU47CisgIH0KKyAgaWYgKChkYXRlMiA9PSBOVUxMKSAmJiAoZGF0ZTEgIT0gTlVMTCkpIHsKKyAgICByZXR1cm4gR1NUX1ZBTFVFX0xFU1NfVEhBTjsKKyAgfQorCisgIHJldCA9IHByaXZfZ3N0X2RhdGVfdGltZV9jb21wYXJlIChkYXRlMSwgZGF0ZTIpOworCisgIGlmIChyZXQgPT0gMCkKKyAgICByZXR1cm4gR1NUX1ZBTFVFX0VRVUFMOworICBlbHNlIGlmIChyZXQgPCAwKQorICAgIHJldHVybiBHU1RfVkFMVUVfTEVTU19USEFOOworICBlbHNlCisgICAgcmV0dXJuIEdTVF9WQUxVRV9HUkVBVEVSX1RIQU47Cit9CisKK3N0YXRpYyBnY2hhciAqCitnc3RfdmFsdWVfc2VyaWFsaXplX2RhdGVfdGltZSAoY29uc3QgR1ZhbHVlICogdmFsKQoreworICBHc3REYXRlVGltZSAqZGF0ZSA9IChHc3REYXRlVGltZSAqKSBnX3ZhbHVlX2dldF9ib3hlZCAodmFsKTsKKyAgZ2Zsb2F0IG9mZnNldDsKKyAgZ2ludCB0emhvdXIsIHR6bWludXRlOworCisgIGlmIChkYXRlID09IE5VTEwpCisgICAgcmV0dXJuIGdfc3RyZHVwICgibnVsbCIpOworCisgIG9mZnNldCA9IGdzdF9kYXRlX3RpbWVfZ2V0X3RpbWVfem9uZV9vZmZzZXQgKGRhdGUpOworCisgIHR6aG91ciA9IChnaW50KSBBQlMgKG9mZnNldCk7CisgIHR6bWludXRlID0gKGdpbnQpICgoQUJTIChvZmZzZXQpIC0gdHpob3VyKSAqIDYwKTsKKworICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgiXCIlMDRkLSUwMmQtJTAyZFQlMDJkOiUwMmQ6JTAyZC4lMDZkIgorICAgICAgIiVjJTAyZCUwMmRcIiIsIGdzdF9kYXRlX3RpbWVfZ2V0X3llYXIgKGRhdGUpLAorICAgICAgZ3N0X2RhdGVfdGltZV9nZXRfbW9udGggKGRhdGUpLCBnc3RfZGF0ZV90aW1lX2dldF9kYXkgKGRhdGUpLAorICAgICAgZ3N0X2RhdGVfdGltZV9nZXRfaG91ciAoZGF0ZSksIGdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZSAoZGF0ZSksCisgICAgICBnc3RfZGF0ZV90aW1lX2dldF9zZWNvbmQgKGRhdGUpLCBnc3RfZGF0ZV90aW1lX2dldF9taWNyb3NlY29uZCAoZGF0ZSksCisgICAgICBvZmZzZXQgPj0gMCA/ICcrJyA6ICctJywgdHpob3VyLCB0em1pbnV0ZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2RhdGVfdGltZSAoR1ZhbHVlICogZGVzdCwgY29uc3QgZ2NoYXIgKiBzKQoreworICBnaW50IHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCB1c2Vjb25kOworICBnY2hhciBzaWduYWw7CisgIGdpbnQgb2Zmc2V0ID0gMDsKKyAgZ2Zsb2F0IHR6b2Zmc2V0ID0gMDsKKyAgZ2ludCByZXQ7CisKKyAgaWYgKCFzIHx8IHN0cmNtcCAocywgIm51bGwiKSA9PSAwKSB7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgcmV0ID0gc3NjYW5mIChzLCAiJTA0ZC0lMDJkLSUwMmRUJTAyZDolMDJkOiUwMmQuJTA2ZCVjJTA0ZCIsCisgICAgICAmeWVhciwgJm1vbnRoLCAmZGF5LCAmaG91ciwgJm1pbnV0ZSwgJnNlY29uZCwgJnVzZWNvbmQsICZzaWduYWwsICZvZmZzZXQpOworICBpZiAocmV0ID49IDkpIHsKKyAgICB0em9mZnNldCA9IChvZmZzZXQgLyAxMDApICsgKChvZmZzZXQgJSAxMDApIC8gNjAuMCk7CisgICAgaWYgKHNpZ25hbCA9PSAnLScpCisgICAgICB0em9mZnNldCA9IC10em9mZnNldDsKKyAgfSBlbHNlCisgICAgcmV0dXJuIEZBTFNFOworCisgIGdfdmFsdWVfdGFrZV9ib3hlZCAoZGVzdCwgZ3N0X2RhdGVfdGltZV9uZXcgKHR6b2Zmc2V0LCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLAorICAgICAgICAgIG1pbnV0ZSwgc2Vjb25kICsgKHVzZWNvbmQgLyAxMDAwMDAwLjApKSk7CisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3ZhbHVlX3RyYW5zZm9ybV9kYXRlX3N0cmluZyAoY29uc3QgR1ZhbHVlICogc3JjX3ZhbHVlLCBHVmFsdWUgKiBkZXN0X3ZhbHVlKQoreworICBkZXN0X3ZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlciA9IGdzdF92YWx1ZV9zZXJpYWxpemVfZGF0ZSAoc3JjX3ZhbHVlKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF92YWx1ZV90cmFuc2Zvcm1fc3RyaW5nX2RhdGUgKGNvbnN0IEdWYWx1ZSAqIHNyY192YWx1ZSwgR1ZhbHVlICogZGVzdF92YWx1ZSkKK3sKKyAgZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2RhdGUgKGRlc3RfdmFsdWUsIHNyY192YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3ZhbHVlX3RyYW5zZm9ybV9vYmplY3Rfc3RyaW5nIChjb25zdCBHVmFsdWUgKiBzcmNfdmFsdWUsCisgICAgR1ZhbHVlICogZGVzdF92YWx1ZSkKK3sKKyAgR3N0T2JqZWN0ICpvYmo7CisgIGdjaGFyICpzdHI7CisKKyAgb2JqID0gZ192YWx1ZV9nZXRfb2JqZWN0IChzcmNfdmFsdWUpOworICBpZiAob2JqKSB7CisgICAgc3RyID0KKyAgICAgICAgZ19zdHJkdXBfcHJpbnRmICgiKCVzKSAlcyIsIEdfT0JKRUNUX1RZUEVfTkFNRSAob2JqKSwKKyAgICAgICAgR1NUX09CSkVDVF9OQU1FIChvYmopKTsKKyAgfSBlbHNlIHsKKyAgICBzdHIgPSBnX3N0cmR1cCAoIk5VTEwiKTsKKyAgfQorCisgIGRlc3RfdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyID0gc3RyOworfQorCitzdGF0aWMgR1R5cGVJbmZvIF9pbmZvID0geworICAwLAorICBOVUxMLAorICBOVUxMLAorICBOVUxMLAorICBOVUxMLAorICBOVUxMLAorICAwLAorICAwLAorICBOVUxMLAorICBOVUxMLAorfTsKKworc3RhdGljIEdUeXBlRnVuZGFtZW50YWxJbmZvIF9maW5mbyA9IHsKKyAgMAorfTsKKworI2RlZmluZSBGVU5DX1ZBTFVFX0dFVF9UWVBFKHR5cGUsIG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgIFwKK0dUeXBlIGdzdF8gIyMgdHlwZSAjIyBfZ2V0X3R5cGUgKHZvaWQpICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBzdGF0aWMgdm9sYXRpbGUgR1R5cGUgZ3N0XyAjIyB0eXBlICMjIF90eXBlID0gMDsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmdzdF8gIyMgdHlwZSAjIyBfdHlwZSkpIHsJCVwKKyAgICBHVHlwZSBfdHlwZTsJCQkJCVwKKyAgICBfaW5mby52YWx1ZV90YWJsZSA9ICYgX2dzdF8gIyMgdHlwZSAjIyBfdmFsdWVfdGFibGU7ICAgICAgICBcCisgICAgX3R5cGUgPSBnX3R5cGVfcmVnaXN0ZXJfZnVuZGFtZW50YWwgKCAgICAgICBcCisgICAgICAgIGdfdHlwZV9mdW5kYW1lbnRhbF9uZXh0ICgpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBuYW1lLCAmX2luZm8sICZfZmluZm8sIDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSgmZ3N0XyAjIyB0eXBlICMjIF90eXBlLCBfdHlwZSk7CVwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICByZXR1cm4gZ3N0XyAjIyB0eXBlICMjIF90eXBlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworc3RhdGljIGNvbnN0IEdUeXBlVmFsdWVUYWJsZSBfZ3N0X2ludF9yYW5nZV92YWx1ZV90YWJsZSA9IHsKKyAgZ3N0X3ZhbHVlX2luaXRfaW50X3JhbmdlLAorICBOVUxMLAorICBnc3RfdmFsdWVfY29weV9pbnRfcmFuZ2UsCisgIE5VTEwsCisgIChjaGFyICopICJpaSIsCisgIGdzdF92YWx1ZV9jb2xsZWN0X2ludF9yYW5nZSwKKyAgKGNoYXIgKikgInBwIiwKKyAgZ3N0X3ZhbHVlX2xjb3B5X2ludF9yYW5nZQorfTsKKworRlVOQ19WQUxVRV9HRVRfVFlQRSAoaW50X3JhbmdlLCAiR3N0SW50UmFuZ2UiKTsKKworc3RhdGljIGNvbnN0IEdUeXBlVmFsdWVUYWJsZSBfZ3N0X2ludDY0X3JhbmdlX3ZhbHVlX3RhYmxlID0geworICBnc3RfdmFsdWVfaW5pdF9pbnQ2NF9yYW5nZSwKKyAgTlVMTCwKKyAgZ3N0X3ZhbHVlX2NvcHlfaW50NjRfcmFuZ2UsCisgIE5VTEwsCisgIChjaGFyICopICJxcSIsCisgIGdzdF92YWx1ZV9jb2xsZWN0X2ludDY0X3JhbmdlLAorICAoY2hhciAqKSAicHAiLAorICBnc3RfdmFsdWVfbGNvcHlfaW50NjRfcmFuZ2UKK307CisKK0ZVTkNfVkFMVUVfR0VUX1RZUEUgKGludDY0X3JhbmdlLCAiR3N0SW50NjRSYW5nZSIpOworCitzdGF0aWMgY29uc3QgR1R5cGVWYWx1ZVRhYmxlIF9nc3RfZG91YmxlX3JhbmdlX3ZhbHVlX3RhYmxlID0geworICBnc3RfdmFsdWVfaW5pdF9kb3VibGVfcmFuZ2UsCisgIE5VTEwsCisgIGdzdF92YWx1ZV9jb3B5X2RvdWJsZV9yYW5nZSwKKyAgTlVMTCwKKyAgKGNoYXIgKikgImRkIiwKKyAgZ3N0X3ZhbHVlX2NvbGxlY3RfZG91YmxlX3JhbmdlLAorICAoY2hhciAqKSAicHAiLAorICBnc3RfdmFsdWVfbGNvcHlfZG91YmxlX3JhbmdlCit9OworCitGVU5DX1ZBTFVFX0dFVF9UWVBFIChkb3VibGVfcmFuZ2UsICJHc3REb3VibGVSYW5nZSIpOworCitzdGF0aWMgY29uc3QgR1R5cGVWYWx1ZVRhYmxlIF9nc3RfZnJhY3Rpb25fcmFuZ2VfdmFsdWVfdGFibGUgPSB7CisgIGdzdF92YWx1ZV9pbml0X2ZyYWN0aW9uX3JhbmdlLAorICBnc3RfdmFsdWVfZnJlZV9mcmFjdGlvbl9yYW5nZSwKKyAgZ3N0X3ZhbHVlX2NvcHlfZnJhY3Rpb25fcmFuZ2UsCisgIE5VTEwsCisgIChjaGFyICopICJpaWlpIiwKKyAgZ3N0X3ZhbHVlX2NvbGxlY3RfZnJhY3Rpb25fcmFuZ2UsCisgIChjaGFyICopICJwcHBwIiwKKyAgZ3N0X3ZhbHVlX2xjb3B5X2ZyYWN0aW9uX3JhbmdlCit9OworCitGVU5DX1ZBTFVFX0dFVF9UWVBFIChmcmFjdGlvbl9yYW5nZSwgIkdzdEZyYWN0aW9uUmFuZ2UiKTsKKworc3RhdGljIGNvbnN0IEdUeXBlVmFsdWVUYWJsZSBfZ3N0X3ZhbHVlX2xpc3RfdmFsdWVfdGFibGUgPSB7CisgIGdzdF92YWx1ZV9pbml0X2xpc3Rfb3JfYXJyYXksCisgIGdzdF92YWx1ZV9mcmVlX2xpc3Rfb3JfYXJyYXksCisgIGdzdF92YWx1ZV9jb3B5X2xpc3Rfb3JfYXJyYXksCisgIGdzdF92YWx1ZV9saXN0X29yX2FycmF5X3BlZWtfcG9pbnRlciwKKyAgKGNoYXIgKikgInAiLAorICBnc3RfdmFsdWVfY29sbGVjdF9saXN0X29yX2FycmF5LAorICAoY2hhciAqKSAicCIsCisgIGdzdF92YWx1ZV9sY29weV9saXN0X29yX2FycmF5Cit9OworCitGVU5DX1ZBTFVFX0dFVF9UWVBFICh2YWx1ZV9saXN0LCAiR3N0VmFsdWVMaXN0Iik7CisKK3N0YXRpYyBjb25zdCBHVHlwZVZhbHVlVGFibGUgX2dzdF92YWx1ZV9hcnJheV92YWx1ZV90YWJsZSA9IHsKKyAgZ3N0X3ZhbHVlX2luaXRfbGlzdF9vcl9hcnJheSwKKyAgZ3N0X3ZhbHVlX2ZyZWVfbGlzdF9vcl9hcnJheSwKKyAgZ3N0X3ZhbHVlX2NvcHlfbGlzdF9vcl9hcnJheSwKKyAgZ3N0X3ZhbHVlX2xpc3Rfb3JfYXJyYXlfcGVla19wb2ludGVyLAorICAoY2hhciAqKSAicCIsCisgIGdzdF92YWx1ZV9jb2xsZWN0X2xpc3Rfb3JfYXJyYXksCisgIChjaGFyICopICJwIiwKKyAgZ3N0X3ZhbHVlX2xjb3B5X2xpc3Rfb3JfYXJyYXkKK307CisKK0ZVTkNfVkFMVUVfR0VUX1RZUEUgKHZhbHVlX2FycmF5LCAiR3N0VmFsdWVBcnJheSIpOworCitzdGF0aWMgY29uc3QgR1R5cGVWYWx1ZVRhYmxlIF9nc3RfZnJhY3Rpb25fdmFsdWVfdGFibGUgPSB7CisgIGdzdF92YWx1ZV9pbml0X2ZyYWN0aW9uLAorICBOVUxMLAorICBnc3RfdmFsdWVfY29weV9mcmFjdGlvbiwKKyAgTlVMTCwKKyAgKGNoYXIgKikgImlpIiwKKyAgZ3N0X3ZhbHVlX2NvbGxlY3RfZnJhY3Rpb24sCisgIChjaGFyICopICJwcCIsCisgIGdzdF92YWx1ZV9sY29weV9mcmFjdGlvbgorfTsKKworRlVOQ19WQUxVRV9HRVRfVFlQRSAoZnJhY3Rpb24sICJHc3RGcmFjdGlvbiIpOworCisKK0dUeXBlCitnc3RfZGF0ZV9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIEdUeXBlIGdzdF9kYXRlX3R5cGUgPSAwOworCisgIGlmIChHX1VOTElLRUxZIChnc3RfZGF0ZV90eXBlID09IDApKSB7CisgICAgLyogRklYTUUgMC4xMTogd2UgcmVxdWlyZSBHTGliIDIuOCBhbHJlYWR5CisgICAgICogTm90IHVzaW5nIEdfVFlQRV9EQVRFIGhlcmUgb24gcHVycG9zZSwgZXZlbiBpZiB3ZSBjb3VsZAorICAgICAqIGlmIEdMSUJfQ0hFQ0tfVkVSU0lPTigyLDgsMCkgd2FzIHRydWU6IHdlIGRvbid0IHdhbnQgdGhlCisgICAgICogc2VyaWFsaXNlZCBzdHJpbmdzIHRvIGhhdmUgZGlmZmVyZW50IHR5cGUgc3RyaW5ncyBkZXBlbmRpbmcKKyAgICAgKiBvbiB3aGF0IHZlcnNpb24gaXMgdXNlZCwgc28gRklYTUUgd2hlbiB3ZSByZXF1aXJlIEdMaWItMi44ICovCisgICAgZ3N0X2RhdGVfdHlwZSA9IGdfYm94ZWRfdHlwZV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3REYXRlIiwKKyAgICAgICAgKEdCb3hlZENvcHlGdW5jKSBnc3RfZGF0ZV9jb3B5LCAoR0JveGVkRnJlZUZ1bmMpIGdfZGF0ZV9mcmVlKTsKKyAgfQorCisgIHJldHVybiBnc3RfZGF0ZV90eXBlOworfQorCitHVHlwZQorZ3N0X2RhdGVfdGltZV9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIEdUeXBlIGdzdF9kYXRlX3RpbWVfdHlwZSA9IDA7CisKKyAgaWYgKEdfVU5MSUtFTFkgKGdzdF9kYXRlX3RpbWVfdHlwZSA9PSAwKSkgeworICAgIGdzdF9kYXRlX3RpbWVfdHlwZSA9IGdfYm94ZWRfdHlwZV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3REYXRlVGltZSIsCisgICAgICAgIChHQm94ZWRDb3B5RnVuYykgZ3N0X2RhdGVfdGltZV9yZWYsCisgICAgICAgIChHQm94ZWRGcmVlRnVuYykgZ3N0X2RhdGVfdGltZV91bnJlZik7CisgIH0KKworICByZXR1cm4gZ3N0X2RhdGVfdGltZV90eXBlOworfQorCisKK3ZvaWQKK19wcml2X2dzdF92YWx1ZV9pbml0aWFsaXplICh2b2lkKQoreworICBnc3RfdmFsdWVfdGFibGUgPSBnX2FycmF5X25ldyAoRkFMU0UsIEZBTFNFLCBzaXplb2YgKEdzdFZhbHVlVGFibGUpKTsKKyAgZ3N0X3ZhbHVlX2hhc2ggPSBnX2hhc2hfdGFibGVfbmV3IChOVUxMLCBOVUxMKTsKKyAgZ3N0X3ZhbHVlX3VuaW9uX2Z1bmNzID0gZ19hcnJheV9uZXcgKEZBTFNFLCBGQUxTRSwKKyAgICAgIHNpemVvZiAoR3N0VmFsdWVVbmlvbkluZm8pKTsKKyAgZ3N0X3ZhbHVlX2ludGVyc2VjdF9mdW5jcyA9IGdfYXJyYXlfbmV3IChGQUxTRSwgRkFMU0UsCisgICAgICBzaXplb2YgKEdzdFZhbHVlSW50ZXJzZWN0SW5mbykpOworICBnc3RfdmFsdWVfc3VidHJhY3RfZnVuY3MgPSBnX2FycmF5X25ldyAoRkFMU0UsIEZBTFNFLAorICAgICAgc2l6ZW9mIChHc3RWYWx1ZVN1YnRyYWN0SW5mbykpOworCisgIHsKKyAgICBzdGF0aWMgR3N0VmFsdWVUYWJsZSBnc3RfdmFsdWUgPSB7CisgICAgICAwLAorICAgICAgZ3N0X3ZhbHVlX2NvbXBhcmVfaW50X3JhbmdlLAorICAgICAgZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9pbnRfcmFuZ2UsCisgICAgICBnc3RfdmFsdWVfZGVzZXJpYWxpemVfaW50X3JhbmdlLAorICAgIH07CisKKyAgICBnc3RfdmFsdWUudHlwZSA9IGdzdF9pbnRfcmFuZ2VfZ2V0X3R5cGUgKCk7CisgICAgZ3N0X3ZhbHVlX3JlZ2lzdGVyICgmZ3N0X3ZhbHVlKTsKKyAgfQorCisgIHsKKyAgICBzdGF0aWMgR3N0VmFsdWVUYWJsZSBnc3RfdmFsdWUgPSB7CisgICAgICAwLAorICAgICAgZ3N0X3ZhbHVlX2NvbXBhcmVfaW50NjRfcmFuZ2UsCisgICAgICBnc3RfdmFsdWVfc2VyaWFsaXplX2ludDY0X3JhbmdlLAorICAgICAgZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2ludDY0X3JhbmdlLAorICAgIH07CisKKyAgICBnc3RfdmFsdWUudHlwZSA9IGdzdF9pbnQ2NF9yYW5nZV9nZXRfdHlwZSAoKTsKKyAgICBnc3RfdmFsdWVfcmVnaXN0ZXIgKCZnc3RfdmFsdWUpOworICB9CisKKyAgeworICAgIHN0YXRpYyBHc3RWYWx1ZVRhYmxlIGdzdF92YWx1ZSA9IHsKKyAgICAgIDAsCisgICAgICBnc3RfdmFsdWVfY29tcGFyZV9kb3VibGVfcmFuZ2UsCisgICAgICBnc3RfdmFsdWVfc2VyaWFsaXplX2RvdWJsZV9yYW5nZSwKKyAgICAgIGdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9kb3VibGVfcmFuZ2UsCisgICAgfTsKKworICAgIGdzdF92YWx1ZS50eXBlID0gZ3N0X2RvdWJsZV9yYW5nZV9nZXRfdHlwZSAoKTsKKyAgICBnc3RfdmFsdWVfcmVnaXN0ZXIgKCZnc3RfdmFsdWUpOworICB9CisKKyAgeworICAgIHN0YXRpYyBHc3RWYWx1ZVRhYmxlIGdzdF92YWx1ZSA9IHsKKyAgICAgIDAsCisgICAgICBnc3RfdmFsdWVfY29tcGFyZV9mcmFjdGlvbl9yYW5nZSwKKyAgICAgIGdzdF92YWx1ZV9zZXJpYWxpemVfZnJhY3Rpb25fcmFuZ2UsCisgICAgICBnc3RfdmFsdWVfZGVzZXJpYWxpemVfZnJhY3Rpb25fcmFuZ2UsCisgICAgfTsKKworICAgIGdzdF92YWx1ZS50eXBlID0gZ3N0X2ZyYWN0aW9uX3JhbmdlX2dldF90eXBlICgpOworICAgIGdzdF92YWx1ZV9yZWdpc3RlciAoJmdzdF92YWx1ZSk7CisgIH0KKworICB7CisgICAgc3RhdGljIEdzdFZhbHVlVGFibGUgZ3N0X3ZhbHVlID0geworICAgICAgMCwKKyAgICAgIGdzdF92YWx1ZV9jb21wYXJlX2xpc3QsCisgICAgICBnc3RfdmFsdWVfc2VyaWFsaXplX2xpc3QsCisgICAgICBnc3RfdmFsdWVfZGVzZXJpYWxpemVfbGlzdCwKKyAgICB9OworCisgICAgZ3N0X3ZhbHVlLnR5cGUgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdHlwZSAoKTsKKyAgICBnc3RfdmFsdWVfcmVnaXN0ZXIgKCZnc3RfdmFsdWUpOworICB9CisKKyAgeworICAgIHN0YXRpYyBHc3RWYWx1ZVRhYmxlIGdzdF92YWx1ZSA9IHsKKyAgICAgIDAsCisgICAgICBnc3RfdmFsdWVfY29tcGFyZV9hcnJheSwKKyAgICAgIGdzdF92YWx1ZV9zZXJpYWxpemVfYXJyYXksCisgICAgICBnc3RfdmFsdWVfZGVzZXJpYWxpemVfYXJyYXksCisgICAgfTsKKworICAgIGdzdF92YWx1ZS50eXBlID0gZ3N0X3ZhbHVlX2FycmF5X2dldF90eXBlICgpOworICAgIGdzdF92YWx1ZV9yZWdpc3RlciAoJmdzdF92YWx1ZSk7CisgIH0KKworICB7CisjaWYgMAorICAgIHN0YXRpYyBjb25zdCBHVHlwZVZhbHVlVGFibGUgdmFsdWVfdGFibGUgPSB7CisgICAgICBnc3RfdmFsdWVfaW5pdF9idWZmZXIsCisgICAgICBOVUxMLAorICAgICAgZ3N0X3ZhbHVlX2NvcHlfYnVmZmVyLAorICAgICAgTlVMTCwKKyAgICAgICJpIiwKKyAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLypnc3RfdmFsdWVfY29sbGVjdF9idWZmZXIsICovCisgICAgICAicCIsCisgICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgIC8qZ3N0X3ZhbHVlX2xjb3B5X2J1ZmZlciAqLworICAgIH07CisjZW5kaWYKKyAgICBzdGF0aWMgR3N0VmFsdWVUYWJsZSBnc3RfdmFsdWUgPSB7CisgICAgICAwLAorICAgICAgZ3N0X3ZhbHVlX2NvbXBhcmVfYnVmZmVyLAorICAgICAgZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9idWZmZXIsCisgICAgICBnc3RfdmFsdWVfZGVzZXJpYWxpemVfYnVmZmVyLAorICAgIH07CisKKyAgICBnc3RfdmFsdWUudHlwZSA9IEdTVF9UWVBFX0JVRkZFUjsKKyAgICBnc3RfdmFsdWVfcmVnaXN0ZXIgKCZnc3RfdmFsdWUpOworICB9CisgIHsKKyAgICBzdGF0aWMgR3N0VmFsdWVUYWJsZSBnc3RfdmFsdWUgPSB7CisgICAgICAwLAorICAgICAgZ3N0X3ZhbHVlX2NvbXBhcmVfZnJhY3Rpb24sCisgICAgICBnc3RfdmFsdWVfc2VyaWFsaXplX2ZyYWN0aW9uLAorICAgICAgZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2ZyYWN0aW9uLAorICAgIH07CisKKyAgICBnc3RfdmFsdWUudHlwZSA9IGdzdF9mcmFjdGlvbl9nZXRfdHlwZSAoKTsKKyAgICBnc3RfdmFsdWVfcmVnaXN0ZXIgKCZnc3RfdmFsdWUpOworICB9CisgIHsKKyAgICBzdGF0aWMgR3N0VmFsdWVUYWJsZSBnc3RfdmFsdWUgPSB7CisgICAgICAwLAorICAgICAgTlVMTCwKKyAgICAgIGdzdF92YWx1ZV9zZXJpYWxpemVfY2FwcywKKyAgICAgIGdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9jYXBzLAorICAgIH07CisKKyAgICBnc3RfdmFsdWUudHlwZSA9IEdTVF9UWVBFX0NBUFM7CisgICAgZ3N0X3ZhbHVlX3JlZ2lzdGVyICgmZ3N0X3ZhbHVlKTsKKyAgfQorICB7CisgICAgc3RhdGljIEdzdFZhbHVlVGFibGUgZ3N0X3ZhbHVlID0geworICAgICAgMCwKKyAgICAgIE5VTEwsCisgICAgICBnc3RfdmFsdWVfc2VyaWFsaXplX3N0cnVjdHVyZSwKKyAgICAgIGdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9zdHJ1Y3R1cmUsCisgICAgfTsKKworICAgIGdzdF92YWx1ZS50eXBlID0gR1NUX1RZUEVfU1RSVUNUVVJFOworICAgIGdzdF92YWx1ZV9yZWdpc3RlciAoJmdzdF92YWx1ZSk7CisgIH0KKyAgeworICAgIHN0YXRpYyBHc3RWYWx1ZVRhYmxlIGdzdF92YWx1ZSA9IHsKKyAgICAgIDAsCisgICAgICBnc3RfdmFsdWVfY29tcGFyZV9kYXRlLAorICAgICAgZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9kYXRlLAorICAgICAgZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2RhdGUsCisgICAgfTsKKworICAgIGdzdF92YWx1ZS50eXBlID0gZ3N0X2RhdGVfZ2V0X3R5cGUgKCk7CisgICAgZ3N0X3ZhbHVlX3JlZ2lzdGVyICgmZ3N0X3ZhbHVlKTsKKyAgfQorICB7CisgICAgc3RhdGljIEdzdFZhbHVlVGFibGUgZ3N0X3ZhbHVlID0geworICAgICAgMCwKKyAgICAgIGdzdF92YWx1ZV9jb21wYXJlX2RhdGVfdGltZSwKKyAgICAgIGdzdF92YWx1ZV9zZXJpYWxpemVfZGF0ZV90aW1lLAorICAgICAgZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2RhdGVfdGltZSwKKyAgICB9OworCisgICAgZ3N0X3ZhbHVlLnR5cGUgPSBnc3RfZGF0ZV90aW1lX2dldF90eXBlICgpOworICAgIGdzdF92YWx1ZV9yZWdpc3RlciAoJmdzdF92YWx1ZSk7CisgIH0KKworICBSRUdJU1RFUl9TRVJJQUxJWkFUSU9OIChHX1RZUEVfRE9VQkxFLCBkb3VibGUpOworICBSRUdJU1RFUl9TRVJJQUxJWkFUSU9OIChHX1RZUEVfRkxPQVQsIGZsb2F0KTsKKworICBSRUdJU1RFUl9TRVJJQUxJWkFUSU9OIChHX1RZUEVfU1RSSU5HLCBzdHJpbmcpOworICBSRUdJU1RFUl9TRVJJQUxJWkFUSU9OIChHX1RZUEVfQk9PTEVBTiwgYm9vbGVhbik7CisgIFJFR0lTVEVSX1NFUklBTElaQVRJT04gKEdfVFlQRV9FTlVNLCBlbnVtKTsKKworICBSRUdJU1RFUl9TRVJJQUxJWkFUSU9OIChHX1RZUEVfRkxBR1MsIGZsYWdzKTsKKworICBSRUdJU1RFUl9TRVJJQUxJWkFUSU9OIChHX1RZUEVfSU5ULCBpbnQpOworCisgIFJFR0lTVEVSX1NFUklBTElaQVRJT04gKEdfVFlQRV9JTlQ2NCwgaW50NjQpOworICBSRUdJU1RFUl9TRVJJQUxJWkFUSU9OIChHX1RZUEVfTE9ORywgbG9uZyk7CisKKyAgUkVHSVNURVJfU0VSSUFMSVpBVElPTiAoR19UWVBFX1VJTlQsIHVpbnQpOworICBSRUdJU1RFUl9TRVJJQUxJWkFUSU9OIChHX1RZUEVfVUlOVDY0LCB1aW50NjQpOworICBSRUdJU1RFUl9TRVJJQUxJWkFUSU9OIChHX1RZUEVfVUxPTkcsIHVsb25nKTsKKworICBSRUdJU1RFUl9TRVJJQUxJWkFUSU9OIChHX1RZUEVfVUNIQVIsIHVjaGFyKTsKKworICBnX3ZhbHVlX3JlZ2lzdGVyX3RyYW5zZm9ybV9mdW5jIChHU1RfVFlQRV9JTlRfUkFOR0UsIEdfVFlQRV9TVFJJTkcsCisgICAgICBnc3RfdmFsdWVfdHJhbnNmb3JtX2ludF9yYW5nZV9zdHJpbmcpOworICBnX3ZhbHVlX3JlZ2lzdGVyX3RyYW5zZm9ybV9mdW5jIChHU1RfVFlQRV9JTlQ2NF9SQU5HRSwgR19UWVBFX1NUUklORywKKyAgICAgIGdzdF92YWx1ZV90cmFuc2Zvcm1faW50NjRfcmFuZ2Vfc3RyaW5nKTsKKyAgZ192YWx1ZV9yZWdpc3Rlcl90cmFuc2Zvcm1fZnVuYyAoR1NUX1RZUEVfRE9VQkxFX1JBTkdFLCBHX1RZUEVfU1RSSU5HLAorICAgICAgZ3N0X3ZhbHVlX3RyYW5zZm9ybV9kb3VibGVfcmFuZ2Vfc3RyaW5nKTsKKyAgZ192YWx1ZV9yZWdpc3Rlcl90cmFuc2Zvcm1fZnVuYyAoR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UsIEdfVFlQRV9TVFJJTkcsCisgICAgICBnc3RfdmFsdWVfdHJhbnNmb3JtX2ZyYWN0aW9uX3JhbmdlX3N0cmluZyk7CisgIGdfdmFsdWVfcmVnaXN0ZXJfdHJhbnNmb3JtX2Z1bmMgKEdTVF9UWVBFX0xJU1QsIEdfVFlQRV9TVFJJTkcsCisgICAgICBnc3RfdmFsdWVfdHJhbnNmb3JtX2xpc3Rfc3RyaW5nKTsKKyAgZ192YWx1ZV9yZWdpc3Rlcl90cmFuc2Zvcm1fZnVuYyAoR1NUX1RZUEVfQVJSQVksIEdfVFlQRV9TVFJJTkcsCisgICAgICBnc3RfdmFsdWVfdHJhbnNmb3JtX2FycmF5X3N0cmluZyk7CisgIGdfdmFsdWVfcmVnaXN0ZXJfdHJhbnNmb3JtX2Z1bmMgKEdTVF9UWVBFX0ZSQUNUSU9OLCBHX1RZUEVfU1RSSU5HLAorICAgICAgZ3N0X3ZhbHVlX3RyYW5zZm9ybV9mcmFjdGlvbl9zdHJpbmcpOworICBnX3ZhbHVlX3JlZ2lzdGVyX3RyYW5zZm9ybV9mdW5jIChHX1RZUEVfU1RSSU5HLCBHU1RfVFlQRV9GUkFDVElPTiwKKyAgICAgIGdzdF92YWx1ZV90cmFuc2Zvcm1fc3RyaW5nX2ZyYWN0aW9uKTsKKyAgZ192YWx1ZV9yZWdpc3Rlcl90cmFuc2Zvcm1fZnVuYyAoR1NUX1RZUEVfRlJBQ1RJT04sIEdfVFlQRV9ET1VCTEUsCisgICAgICBnc3RfdmFsdWVfdHJhbnNmb3JtX2ZyYWN0aW9uX2RvdWJsZSk7CisgIGdfdmFsdWVfcmVnaXN0ZXJfdHJhbnNmb3JtX2Z1bmMgKEdTVF9UWVBFX0ZSQUNUSU9OLCBHX1RZUEVfRkxPQVQsCisgICAgICBnc3RfdmFsdWVfdHJhbnNmb3JtX2ZyYWN0aW9uX2Zsb2F0KTsKKyAgZ192YWx1ZV9yZWdpc3Rlcl90cmFuc2Zvcm1fZnVuYyAoR19UWVBFX0RPVUJMRSwgR1NUX1RZUEVfRlJBQ1RJT04sCisgICAgICBnc3RfdmFsdWVfdHJhbnNmb3JtX2RvdWJsZV9mcmFjdGlvbik7CisgIGdfdmFsdWVfcmVnaXN0ZXJfdHJhbnNmb3JtX2Z1bmMgKEdfVFlQRV9GTE9BVCwgR1NUX1RZUEVfRlJBQ1RJT04sCisgICAgICBnc3RfdmFsdWVfdHJhbnNmb3JtX2Zsb2F0X2ZyYWN0aW9uKTsKKyAgZ192YWx1ZV9yZWdpc3Rlcl90cmFuc2Zvcm1fZnVuYyAoR1NUX1RZUEVfREFURSwgR19UWVBFX1NUUklORywKKyAgICAgIGdzdF92YWx1ZV90cmFuc2Zvcm1fZGF0ZV9zdHJpbmcpOworICBnX3ZhbHVlX3JlZ2lzdGVyX3RyYW5zZm9ybV9mdW5jIChHX1RZUEVfU1RSSU5HLCBHU1RfVFlQRV9EQVRFLAorICAgICAgZ3N0X3ZhbHVlX3RyYW5zZm9ybV9zdHJpbmdfZGF0ZSk7CisgIGdfdmFsdWVfcmVnaXN0ZXJfdHJhbnNmb3JtX2Z1bmMgKEdTVF9UWVBFX09CSkVDVCwgR19UWVBFX1NUUklORywKKyAgICAgIGdzdF92YWx1ZV90cmFuc2Zvcm1fb2JqZWN0X3N0cmluZyk7CisKKyAgZ3N0X3ZhbHVlX3JlZ2lzdGVyX2ludGVyc2VjdF9mdW5jIChHX1RZUEVfSU5ULCBHU1RfVFlQRV9JTlRfUkFOR0UsCisgICAgICBnc3RfdmFsdWVfaW50ZXJzZWN0X2ludF9pbnRfcmFuZ2UpOworICBnc3RfdmFsdWVfcmVnaXN0ZXJfaW50ZXJzZWN0X2Z1bmMgKEdTVF9UWVBFX0lOVF9SQU5HRSwgR1NUX1RZUEVfSU5UX1JBTkdFLAorICAgICAgZ3N0X3ZhbHVlX2ludGVyc2VjdF9pbnRfcmFuZ2VfaW50X3JhbmdlKTsKKyAgZ3N0X3ZhbHVlX3JlZ2lzdGVyX2ludGVyc2VjdF9mdW5jIChHX1RZUEVfSU5UNjQsIEdTVF9UWVBFX0lOVDY0X1JBTkdFLAorICAgICAgZ3N0X3ZhbHVlX2ludGVyc2VjdF9pbnQ2NF9pbnQ2NF9yYW5nZSk7CisgIGdzdF92YWx1ZV9yZWdpc3Rlcl9pbnRlcnNlY3RfZnVuYyAoR1NUX1RZUEVfSU5UNjRfUkFOR0UsIEdTVF9UWVBFX0lOVDY0X1JBTkdFLAorICAgICAgZ3N0X3ZhbHVlX2ludGVyc2VjdF9pbnQ2NF9yYW5nZV9pbnQ2NF9yYW5nZSk7CisgIGdzdF92YWx1ZV9yZWdpc3Rlcl9pbnRlcnNlY3RfZnVuYyAoR19UWVBFX0RPVUJMRSwgR1NUX1RZUEVfRE9VQkxFX1JBTkdFLAorICAgICAgZ3N0X3ZhbHVlX2ludGVyc2VjdF9kb3VibGVfZG91YmxlX3JhbmdlKTsKKyAgZ3N0X3ZhbHVlX3JlZ2lzdGVyX2ludGVyc2VjdF9mdW5jIChHU1RfVFlQRV9ET1VCTEVfUkFOR0UsCisgICAgICBHU1RfVFlQRV9ET1VCTEVfUkFOR0UsIGdzdF92YWx1ZV9pbnRlcnNlY3RfZG91YmxlX3JhbmdlX2RvdWJsZV9yYW5nZSk7CisgIGdzdF92YWx1ZV9yZWdpc3Rlcl9pbnRlcnNlY3RfZnVuYyAoR1NUX1RZUEVfQVJSQVksCisgICAgICBHU1RfVFlQRV9BUlJBWSwgZ3N0X3ZhbHVlX2ludGVyc2VjdF9hcnJheSk7CisgIGdzdF92YWx1ZV9yZWdpc3Rlcl9pbnRlcnNlY3RfZnVuYyAoR1NUX1RZUEVfRlJBQ1RJT04sIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFLAorICAgICAgZ3N0X3ZhbHVlX2ludGVyc2VjdF9mcmFjdGlvbl9mcmFjdGlvbl9yYW5nZSk7CisgIGdzdF92YWx1ZV9yZWdpc3Rlcl9pbnRlcnNlY3RfZnVuYyAoR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UsCisgICAgICBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSwKKyAgICAgIGdzdF92YWx1ZV9pbnRlcnNlY3RfZnJhY3Rpb25fcmFuZ2VfZnJhY3Rpb25fcmFuZ2UpOworCisgIGdzdF92YWx1ZV9yZWdpc3Rlcl9zdWJ0cmFjdF9mdW5jIChHX1RZUEVfSU5ULCBHU1RfVFlQRV9JTlRfUkFOR0UsCisgICAgICBnc3RfdmFsdWVfc3VidHJhY3RfaW50X2ludF9yYW5nZSk7CisgIGdzdF92YWx1ZV9yZWdpc3Rlcl9zdWJ0cmFjdF9mdW5jIChHU1RfVFlQRV9JTlRfUkFOR0UsIEdfVFlQRV9JTlQsCisgICAgICBnc3RfdmFsdWVfc3VidHJhY3RfaW50X3JhbmdlX2ludCk7CisgIGdzdF92YWx1ZV9yZWdpc3Rlcl9zdWJ0cmFjdF9mdW5jIChHU1RfVFlQRV9JTlRfUkFOR0UsIEdTVF9UWVBFX0lOVF9SQU5HRSwKKyAgICAgIGdzdF92YWx1ZV9zdWJ0cmFjdF9pbnRfcmFuZ2VfaW50X3JhbmdlKTsKKyAgZ3N0X3ZhbHVlX3JlZ2lzdGVyX3N1YnRyYWN0X2Z1bmMgKEdfVFlQRV9JTlQ2NCwgR1NUX1RZUEVfSU5UNjRfUkFOR0UsCisgICAgICBnc3RfdmFsdWVfc3VidHJhY3RfaW50NjRfaW50NjRfcmFuZ2UpOworICBnc3RfdmFsdWVfcmVnaXN0ZXJfc3VidHJhY3RfZnVuYyAoR1NUX1RZUEVfSU5UNjRfUkFOR0UsIEdfVFlQRV9JTlQ2NCwKKyAgICAgIGdzdF92YWx1ZV9zdWJ0cmFjdF9pbnQ2NF9yYW5nZV9pbnQ2NCk7CisgIGdzdF92YWx1ZV9yZWdpc3Rlcl9zdWJ0cmFjdF9mdW5jIChHU1RfVFlQRV9JTlQ2NF9SQU5HRSwgR1NUX1RZUEVfSU5UNjRfUkFOR0UsCisgICAgICBnc3RfdmFsdWVfc3VidHJhY3RfaW50NjRfcmFuZ2VfaW50NjRfcmFuZ2UpOworICBnc3RfdmFsdWVfcmVnaXN0ZXJfc3VidHJhY3RfZnVuYyAoR19UWVBFX0RPVUJMRSwgR1NUX1RZUEVfRE9VQkxFX1JBTkdFLAorICAgICAgZ3N0X3ZhbHVlX3N1YnRyYWN0X2RvdWJsZV9kb3VibGVfcmFuZ2UpOworICBnc3RfdmFsdWVfcmVnaXN0ZXJfc3VidHJhY3RfZnVuYyAoR1NUX1RZUEVfRE9VQkxFX1JBTkdFLCBHX1RZUEVfRE9VQkxFLAorICAgICAgZ3N0X3ZhbHVlX3N1YnRyYWN0X2RvdWJsZV9yYW5nZV9kb3VibGUpOworICBnc3RfdmFsdWVfcmVnaXN0ZXJfc3VidHJhY3RfZnVuYyAoR1NUX1RZUEVfRE9VQkxFX1JBTkdFLAorICAgICAgR1NUX1RZUEVfRE9VQkxFX1JBTkdFLCBnc3RfdmFsdWVfc3VidHJhY3RfZG91YmxlX3JhbmdlX2RvdWJsZV9yYW5nZSk7CisKKyAgZ3N0X3ZhbHVlX3JlZ2lzdGVyX3N1YnRyYWN0X2Z1bmMgKEdTVF9UWVBFX0ZSQUNUSU9OLCBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSwKKyAgICAgIGdzdF92YWx1ZV9zdWJ0cmFjdF9mcmFjdGlvbl9mcmFjdGlvbl9yYW5nZSk7CisgIGdzdF92YWx1ZV9yZWdpc3Rlcl9zdWJ0cmFjdF9mdW5jIChHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSwgR1NUX1RZUEVfRlJBQ1RJT04sCisgICAgICBnc3RfdmFsdWVfc3VidHJhY3RfZnJhY3Rpb25fcmFuZ2VfZnJhY3Rpb24pOworICBnc3RfdmFsdWVfcmVnaXN0ZXJfc3VidHJhY3RfZnVuYyAoR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UsCisgICAgICBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSwKKyAgICAgIGdzdF92YWx1ZV9zdWJ0cmFjdF9mcmFjdGlvbl9yYW5nZV9mcmFjdGlvbl9yYW5nZSk7CisKKyAgLyogc2VlIGJ1ZyAjMzE3MjQ2LCAjNjQ5OTQsICM2NTA0MSAqLworICB7CisgICAgdm9sYXRpbGUgR1R5cGUgZGF0ZV90eXBlID0gR19UWVBFX0RBVEU7CisKKyAgICBnX3R5cGVfbmFtZSAoZGF0ZV90eXBlKTsKKyAgfQorCisgIGdzdF92YWx1ZV9yZWdpc3Rlcl91bmlvbl9mdW5jIChHX1RZUEVfSU5ULCBHU1RfVFlQRV9JTlRfUkFOR0UsCisgICAgICBnc3RfdmFsdWVfdW5pb25faW50X2ludF9yYW5nZSk7CisgIGdzdF92YWx1ZV9yZWdpc3Rlcl91bmlvbl9mdW5jIChHU1RfVFlQRV9JTlRfUkFOR0UsIEdTVF9UWVBFX0lOVF9SQU5HRSwKKyAgICAgIGdzdF92YWx1ZV91bmlvbl9pbnRfcmFuZ2VfaW50X3JhbmdlKTsKKworI2lmIDAKKyAgLyogSW1wbGVtZW50IHRoZXNlIGlmIG5lZWRlZCAqLworICBnc3RfdmFsdWVfcmVnaXN0ZXJfdW5pb25fZnVuYyAoR1NUX1RZUEVfRlJBQ1RJT04sIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFLAorICAgICAgZ3N0X3ZhbHVlX3VuaW9uX2ZyYWN0aW9uX2ZyYWN0aW9uX3JhbmdlKTsKKyAgZ3N0X3ZhbHVlX3JlZ2lzdGVyX3VuaW9uX2Z1bmMgKEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFLAorICAgICAgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UsIGdzdF92YWx1ZV91bmlvbl9mcmFjdGlvbl9yYW5nZV9mcmFjdGlvbl9yYW5nZSk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2dzdC9nc3R2YWx1ZS5oIGIvZ3N0L2dzdHZhbHVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JmOTIyMgotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9nc3R2YWx1ZS5oCkBAIC0wLDAgKzEsNTczIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgPDIwMDM+IERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19HU1RfVkFMVUVfSF9fCisjZGVmaW5lIF9fR1NUX1ZBTFVFX0hfXworCisjaW5jbHVkZSA8Z3N0L2dzdGNvbmZpZy5oPgorI2luY2x1ZGUgPGdzdC9nc3RjYXBzLmg+CisjaW5jbHVkZSA8Z3N0L2dzdHN0cnVjdHVyZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICogR1NUX01BS0VfRk9VUkNDOgorICogQGE6IHRoZSBmaXJzdCBjaGFyYWN0ZXIKKyAqIEBiOiB0aGUgc2Vjb25kIGNoYXJhY3RlcgorICogQGM6IHRoZSB0aGlyZCBjaGFyYWN0ZXIKKyAqIEBkOiB0aGUgZm91cnRoIGNoYXJhY3RlcgorICoKKyAqIFRyYW5zZm9ybSBmb3VyIGNoYXJhY3RlcnMgaW50byBhICNndWludDMyIGZvdXJjYyB2YWx1ZSB3aXRoIGhvc3QKKyAqIGVuZGlhbm5lc3MuCisgKiA8aW5mb3JtYWxleGFtcGxlPgorICogPHByb2dyYW1saXN0aW5nPgorICogZ3VpbnQzMiBmb3VyY2MgPSBHU1RfTUFLRV9GT1VSQ0MgKCdNJywgJ0onLCAnUCcsICdHJyk7CisgKiA8L3Byb2dyYW1saXN0aW5nPgorICogPC9pbmZvcm1hbGV4YW1wbGU+CisgKi8KKyNkZWZpbmUgR1NUX01BS0VfRk9VUkNDKGEsYixjLGQpICAgICAgICAoKGd1aW50MzIpKChhKXwoYik8PDh8KGMpPDwxNnwoZCk8PDI0KSkKKworLyoqCisgKiBHU1RfU1RSX0ZPVVJDQzoKKyAqIEBmOiBhIHN0cmluZyB3aXRoIGF0IGxlYXN0IGZvdXIgY2hhcmFjdGVycworICoKKyAqIFRyYW5zZm9ybSBhbiBpbnB1dCBzdHJpbmcgaW50byBhICNndWludDMyIGZvdXJjYyB2YWx1ZSB3aXRoIGhvc3QKKyAqIGVuZGlhbm5lc3MuCisgKiBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoZSBpbnB1dCBzdHJpbmcgY29uc2lzdHMgb2YgYXQgbGVhc3QKKyAqIGZvdXIgY2hhcmFjdGVycy4KKyAqIDxpbmZvcm1hbGV4YW1wbGU+CisgKiA8cHJvZ3JhbWxpc3Rpbmc+CisgKiBndWludDMyIGZvdXJjYyA9IEdTVF9TVFJfRk9VUkNDICgiTUpQRyIpOworICogPC9wcm9ncmFtbGlzdGluZz4KKyAqIDwvaW5mb3JtYWxleGFtcGxlPgorICovCisjZGVmaW5lIEdTVF9TVFJfRk9VUkNDKGYpICAgICAgICAgICAgICAgKChndWludDMyKSgoKGYpWzBdKXwoKGYpWzFdPDw4KXwoKGYpWzJdPDwxNil8KChmKVszXTw8MjQpKSkKKworLyoqCisgKiBHU1RfRk9VUkNDX0ZPUk1BVDoKKyAqCisgKiBDYW4gYmUgdXNlZCB0b2dldGhlciB3aXRoICNHU1RfRk9VUkNDX0FSR1MgdG8gcHJvcGVybHkgb3V0cHV0IGEKKyAqICNndWludDMyIGZvdXJjYyB2YWx1ZSBpbiBhIHByaW50ZigpLXN0eWxlIHRleHQgbWVzc2FnZS4KKyAqIDxpbmZvcm1hbGV4YW1wbGU+CisgKiA8cHJvZ3JhbWxpc3Rpbmc+CisgKiBwcmludGYgKCJmb3VyY2M6ICUiIEdTVF9GT1VSQ0NfRk9STUFUICJcbiIsIEdTVF9GT1VSQ0NfQVJHUyAoZmNjKSk7CisgKiA8L3Byb2dyYW1saXN0aW5nPgorICogPC9pbmZvcm1hbGV4YW1wbGU+CisgKi8KKyNkZWZpbmUgR1NUX0ZPVVJDQ19GT1JNQVQgImMlYyVjJWMiCisKKy8qKgorICogR1NUX0ZPVVJDQ19BUkdTOgorICogQGZvdXJjYzogYSAjZ3VpbnQzMiBmb3VyY2MgdmFsdWUgdG8gb3V0cHV0CisgKgorICogQ2FuIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAjR1NUX0ZPVVJDQ19GT1JNQVQgdG8gcHJvcGVybHkgb3V0cHV0IGEKKyAqICNndWludDMyIGZvdXJjYyB2YWx1ZSBpbiBhIHByaW50ZigpLXN0eWxlIHRleHQgbWVzc2FnZS4KKyAqLworI2RlZmluZSBHU1RfRk9VUkNDX0FSR1MoZm91cmNjKSBcCisgICAgICAgICgoZ2NoYXIpICgoZm91cmNjKSAgICAgJjB4ZmYpKSwgXAorICAgICAgICAoKGdjaGFyKSAoKChmb3VyY2MpPj44ICkmMHhmZikpLCBcCisgICAgICAgICgoZ2NoYXIpICgoKGZvdXJjYyk+PjE2KSYweGZmKSksIFwKKyAgICAgICAgKChnY2hhcikgKCgoZm91cmNjKT4+MjQpJjB4ZmYpKQorCisvKioKKyAqIEdTVF9WQUxVRV9IT0xEU19JTlRfUkFOR0U6CisgKiBAeDogdGhlICNHVmFsdWUgdG8gY2hlY2sKKyAqCisgKiBDaGVja3MgaWYgdGhlIGdpdmVuICNHVmFsdWUgY29udGFpbnMgYSAjR1NUX1RZUEVfSU5UX1JBTkdFIHZhbHVlLgorICovCisjZGVmaW5lIEdTVF9WQUxVRV9IT0xEU19JTlRfUkFOR0UoeCkgICAgKEdfVkFMVUVfSE9MRFMoKHgpLCBnc3RfaW50X3JhbmdlX2dldF90eXBlICgpKSkKKworLyoqCisgKiBHU1RfVkFMVUVfSE9MRFNfSU5UNjRfUkFOR0U6CisgKiBAeDogdGhlICNHVmFsdWUgdG8gY2hlY2sKKyAqCisgKiBDaGVja3MgaWYgdGhlIGdpdmVuICNHVmFsdWUgY29udGFpbnMgYSAjR1NUX1RZUEVfSU5UNjRfUkFOR0UgdmFsdWUuCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLworI2RlZmluZSBHU1RfVkFMVUVfSE9MRFNfSU5UNjRfUkFOR0UoeCkgICAgKEdfVkFMVUVfSE9MRFMoKHgpLCBnc3RfaW50NjRfcmFuZ2VfZ2V0X3R5cGUgKCkpKQorCisvKioKKyAqIEdTVF9WQUxVRV9IT0xEU19ET1VCTEVfUkFOR0U6CisgKiBAeDogdGhlICNHVmFsdWUgdG8gY2hlY2sKKyAqCisgKiBDaGVja3MgaWYgdGhlIGdpdmVuICNHVmFsdWUgY29udGFpbnMgYSAjR1NUX1RZUEVfRE9VQkxFX1JBTkdFIHZhbHVlLgorICovCisjZGVmaW5lIEdTVF9WQUxVRV9IT0xEU19ET1VCTEVfUkFOR0UoeCkgKEdfVkFMVUVfSE9MRFMoKHgpLCBnc3RfZG91YmxlX3JhbmdlX2dldF90eXBlICgpKSkKKworLyoqCisgKiBHU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT05fUkFOR0U6CisgKiBAeDogdGhlICNHVmFsdWUgdG8gY2hlY2sKKyAqCisgKiBDaGVja3MgaWYgdGhlIGdpdmVuICNHVmFsdWUgY29udGFpbnMgYSAjR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UgdmFsdWUuCisgKi8KKyNkZWZpbmUgR1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OX1JBTkdFKHgpICAgIChHX1ZBTFVFX0hPTERTKCh4KSwgZ3N0X2ZyYWN0aW9uX3JhbmdlX2dldF90eXBlICgpKSkKKworLyoqCisgKiBHU1RfVkFMVUVfSE9MRFNfTElTVDoKKyAqIEB4OiB0aGUgI0dWYWx1ZSB0byBjaGVjaworICoKKyAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gI0dWYWx1ZSBjb250YWlucyBhICNHU1RfVFlQRV9MSVNUIHZhbHVlLgorICovCisjZGVmaW5lIEdTVF9WQUxVRV9IT0xEU19MSVNUKHgpCQkoR19WQUxVRV9IT0xEUygoeCksIGdzdF92YWx1ZV9saXN0X2dldF90eXBlICgpKSkKKworLyoqCisgKiBHU1RfVkFMVUVfSE9MRFNfQVJSQVk6CisgKiBAeDogdGhlICNHVmFsdWUgdG8gY2hlY2sKKyAqCisgKiBDaGVja3MgaWYgdGhlIGdpdmVuICNHVmFsdWUgY29udGFpbnMgYSAjR1NUX1RZUEVfQVJSQVkgdmFsdWUuCisgKi8KKyNkZWZpbmUgR1NUX1ZBTFVFX0hPTERTX0FSUkFZKHgpCShHX1ZBTFVFX0hPTERTKCh4KSwgZ3N0X3ZhbHVlX2FycmF5X2dldF90eXBlICgpKSkKKworLyoqCisgKiBHU1RfVkFMVUVfSE9MRFNfQ0FQUzoKKyAqIEB4OiB0aGUgI0dWYWx1ZSB0byBjaGVjaworICoKKyAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gI0dWYWx1ZSBjb250YWlucyBhICNHU1RfVFlQRV9DQVBTIHZhbHVlLgorICovCisjZGVmaW5lIEdTVF9WQUxVRV9IT0xEU19DQVBTKHgpCQkoR19WQUxVRV9IT0xEUygoeCksIEdTVF9UWVBFX0NBUFMpKQorCisvKioKKyAqIEdTVF9WQUxVRV9IT0xEU19TVFJVQ1RVUkU6CisgKiBAeDogdGhlICNHVmFsdWUgdG8gY2hlY2sKKyAqCisgKiBDaGVja3MgaWYgdGhlIGdpdmVuICNHVmFsdWUgY29udGFpbnMgYSAjR1NUX1RZUEVfU1RSVUNUVVJFIHZhbHVlLgorICoKKyAqIFNpbmNlOiAwLjEwLjE1CisgKi8KKyNkZWZpbmUgR1NUX1ZBTFVFX0hPTERTX1NUUlVDVFVSRSh4KQkJKEdfVkFMVUVfSE9MRFMoKHgpLCBHU1RfVFlQRV9TVFJVQ1RVUkUpKQorCisvKioKKyAqIEdTVF9WQUxVRV9IT0xEU19CVUZGRVI6CisgKiBAeDogdGhlICNHVmFsdWUgdG8gY2hlY2sKKyAqCisgKiBDaGVja3MgaWYgdGhlIGdpdmVuICNHVmFsdWUgY29udGFpbnMgYSAjR1NUX1RZUEVfQlVGRkVSIHZhbHVlLgorICovCisjZGVmaW5lIEdTVF9WQUxVRV9IT0xEU19CVUZGRVIoeCkgICAgICAgKEdfVkFMVUVfSE9MRFMoKHgpLCBHU1RfVFlQRV9CVUZGRVIpKQorCisvKioKKyAqIEdTVF9WQUxVRV9IT0xEU19GUkFDVElPTjoKKyAqIEB4OiB0aGUgI0dWYWx1ZSB0byBjaGVjaworICoKKyAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gI0dWYWx1ZSBjb250YWlucyBhICNHU1RfVFlQRV9GUkFDVElPTiB2YWx1ZS4KKyAqLworI2RlZmluZSBHU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT04oeCkJKEdfVkFMVUVfSE9MRFMoKHgpLCBnc3RfZnJhY3Rpb25fZ2V0X3R5cGUgKCkpKQorCisvKioKKyAqIEdTVF9WQUxVRV9IT0xEU19EQVRFOgorICogQHg6IHRoZSAjR1ZhbHVlIHRvIGNoZWNrCisgKgorICogQ2hlY2tzIGlmIHRoZSBnaXZlbiAjR1ZhbHVlIGNvbnRhaW5zIGEgI0dTVF9UWVBFX0RBVEUgdmFsdWUuCisgKi8KKyNkZWZpbmUgR1NUX1ZBTFVFX0hPTERTX0RBVEUoeCkgICAgICAgICAoR19WQUxVRV9IT0xEUygoeCksIGdzdF9kYXRlX2dldF90eXBlICgpKSkKKworLyoqCisgKiBHU1RfVkFMVUVfSE9MRFNfREFURV9USU1FOgorICogQHg6IHRoZSAjR1ZhbHVlIHRvIGNoZWNrCisgKgorICogQ2hlY2tzIGlmIHRoZSBnaXZlbiAjR1ZhbHVlIGNvbnRhaW5zIGEgI0dTVF9UWVBFX0RBVEVfVElNRSB2YWx1ZS4KKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCisjZGVmaW5lIEdTVF9WQUxVRV9IT0xEU19EQVRFX1RJTUUoeCkgICAgKEdfVkFMVUVfSE9MRFMoKHgpLCBnc3RfZGF0ZV90aW1lX2dldF90eXBlICgpKSkKKworLyoqCisgKiBHU1RfVFlQRV9JTlRfUkFOR0U6CisgKgorICogYSAjR1ZhbHVlIHR5cGUgdGhhdCByZXByZXNlbnRzIGFuIGludGVnZXIgcmFuZ2UKKyAqCisgKiBSZXR1cm5zOiB0aGUgI0dUeXBlIG9mIEdzdEludFJhbmdlCisgKi8KKyNkZWZpbmUgR1NUX1RZUEVfSU5UX1JBTkdFICAgICAgICAgICAgICAgZ3N0X2ludF9yYW5nZV9nZXRfdHlwZSAoKQorCisvKioKKyAqIEdTVF9UWVBFX0lOVDY0X1JBTkdFOgorICoKKyAqIGEgI0dWYWx1ZSB0eXBlIHRoYXQgcmVwcmVzZW50cyBhbiAjZ2ludDY0IHJhbmdlCisgKgorICogUmV0dXJuczogdGhlICNHVHlwZSBvZiBHc3RJbnQ2NFJhbmdlCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLworI2RlZmluZSBHU1RfVFlQRV9JTlQ2NF9SQU5HRSAgICAgICAgICAgICBnc3RfaW50NjRfcmFuZ2VfZ2V0X3R5cGUgKCkKKworLyoqCisgKiBHU1RfVFlQRV9ET1VCTEVfUkFOR0U6CisgKgorICogYSAjR1ZhbHVlIHR5cGUgdGhhdCByZXByZXNlbnRzIGEgZmxvYXRpbmcgcG9pbnQgcmFuZ2Ugd2l0aCBkb3VibGUgcHJlY2lzc2lvbgorICoKKyAqIFJldHVybnM6IHRoZSAjR1R5cGUgb2YgR3N0SW50UmFuZ2UKKyAqLworI2RlZmluZSBHU1RfVFlQRV9ET1VCTEVfUkFOR0UgICAgICAgICAgICBnc3RfZG91YmxlX3JhbmdlX2dldF90eXBlICgpCisKKy8qKgorICogR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0U6CisgKgorICogYSAjR1ZhbHVlIHR5cGUgdGhhdCByZXByZXNlbnRzIGEgR3N0RnJhY3Rpb24gcmFuZ2UKKyAqCisgKiBSZXR1cm5zOiB0aGUgI0dUeXBlIG9mIEdzdEZyYWN0aW9uUmFuZ2UKKyAqLworI2RlZmluZSBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSAgICAgICAgICAgIGdzdF9mcmFjdGlvbl9yYW5nZV9nZXRfdHlwZSAoKQorCisvKioKKyAqIEdTVF9UWVBFX0xJU1Q6CisgKgorICogYSAjR1ZhbHVlIHR5cGUgdGhhdCByZXByZXNlbnRzIGFuIHVub3JkZXJlZCBsaXN0IG9mICNHVmFsdWUgdmFsdWVzLiBUaGlzCisgKiBpcyB1c2VkIGZvciBleGFtcGxlIHRvIGV4cHJlc3MgYSBsaXN0IG9mIHBvc3NpYmxlIHZhbHVlcyBmb3IgYSBmaWVsZCBpbgorICogYSBjYXBzIHN0cnVjdHVyZSwgbGlrZSBhIGxpc3Qgb2YgcG9zc2libGUgc2FtcGxlIHJhdGVzLCBvZiB3aGljaCBvbmx5IG9uZQorICogd2lsbCBiZSBjaG9zZW4gaW4gdGhlIGVuZC4gVGhpcyBtZWFucyB0aGF0IGFsbCB2YWx1ZXMgaW4gdGhlIGxpc3QgYXJlCisgKiBtZWFuaW5nZnVsIG9uIHRoZWlyIG93bi4KKyAqCisgKiBSZXR1cm5zOiB0aGUgI0dUeXBlIG9mIEdzdFZhbHVlTGlzdCAod2hpY2ggaXMgbm90IGV4cGxpY2l0bHkgdHlwZWQpCisgKi8KKyNkZWZpbmUgR1NUX1RZUEVfTElTVCAgICAgICAgICAgICAgICAgICAgZ3N0X3ZhbHVlX2xpc3RfZ2V0X3R5cGUgKCkKKworLyoqCisgKiBHU1RfVFlQRV9BUlJBWToKKyAqCisgKiBhICNHVmFsdWUgdHlwZSB0aGF0IHJlcHJlc2VudHMgYW4gb3JkZXJlZCBsaXN0IG9mICNHVmFsdWUgdmFsdWVzLiBUaGlzIGlzCisgKiB1c2VkIHRvIGV4cHJlc3MgYSBzZXQgb2YgdmFsdWVzIHRoYXQgaXMgbWVhbmluZ2Z1bCBvbmx5IGluIHRoZWlyIHNwZWNpZmljCisgKiBjb21iaW5hdGlvbiBhbmQgb3JkZXIgb2YgdmFsdWVzLiBFYWNoIHZhbHVlIG9uIGl0cyBvd24gaXMgbm90IHBhcnRpY3VsYXJseQorICogbWVhbmluZ2Z1bCwgb25seSB0aGUgb3JkZXJlZCBhcnJheSBpbiBpdHMgZW50aXJldHkgaXMgbWVhbmluZ2Z1bC4gVGhpcyBpcworICogdXNlZCBmb3IgZXhhbXBsZSB0byBleHByZXNzIGNoYW5uZWwgbGF5b3V0cyBmb3IgbXVsdGljaGFubmVsIGF1ZGlvIHdoZXJlCisgKiBlYWNoIGNoYW5uZWwgbmVlZHMgdG8gYmUgbWFwcGVkIHRvIGEgcG9zaXRpb24gaW4gdGhlIHJvb20uCisgKgorICogUmV0dXJuczogdGhlICNHVHlwZSBvZiBHc3RBcnJheUxpc3QgKHdoaWNoIGlzIG5vdCBleHBsaWNpdGx5IHR5cGVkKQorICovCisjZGVmaW5lIEdTVF9UWVBFX0FSUkFZCQkJIGdzdF92YWx1ZV9hcnJheV9nZXRfdHlwZSAoKQorCisvKioKKyAqIEdTVF9UWVBFX0ZSQUNUSU9OOgorICoKKyAqIGEgI0dWYWx1ZSB0eXBlIHRoYXQgcmVwcmVzZW50cyBhIGZyYWN0aW9uIG9mIGFuIGludGVnZXIgbnVtZXJhdG9yIG92ZXIKKyAqIGFuIGludGVnZXIgZGVub21pbmF0b3IKKyAqCisgKiBSZXR1cm5zOiB0aGUgI0dUeXBlIG9mIEdzdEZyYWN0aW9uICh3aGljaCBpcyBub3QgZXhwbGljaXRseSB0eXBlZCkKKyAqLworCisjZGVmaW5lIEdTVF9UWVBFX0ZSQUNUSU9OICAgICAgICAgICAgICAgIGdzdF9mcmFjdGlvbl9nZXRfdHlwZSAoKQorCisvKioKKyAqIEdTVF9UWVBFX0RBVEU6CisgKgorICogYSBib3hlZCAjR1ZhbHVlIHR5cGUgZm9yICNHRGF0ZSB0aGF0IHJlcHJlc2VudHMgYSBkYXRlLgorICoKKyAqIFJldHVybnM6IHRoZSAjR1R5cGUgb2YgR3N0RGF0ZQorICovCisKKyNkZWZpbmUgR1NUX1RZUEVfREFURSAgICAgICAgICAgICAgICAgICAgZ3N0X2RhdGVfZ2V0X3R5cGUgKCkKKworLyoqCisgKiBHU1RfVFlQRV9EQVRFX1RJTUU6CisgKgorICogYSBib3hlZCAjR1ZhbHVlIHR5cGUgZm9yICNHc3REYXRlVGltZSB0aGF0IHJlcHJlc2VudHMgYSBkYXRlIGFuZCB0aW1lLgorICoKKyAqIFJldHVybnM6IHRoZSAjR1R5cGUgb2YgR3N0RGF0ZVRpbWUKKyAqIFNpbmNlOiAwLjEwLjMxCisgKi8KKworI2RlZmluZSBHU1RfVFlQRV9EQVRFX1RJTUUgICAgICAgICAgICAgICBnc3RfZGF0ZV90aW1lX2dldF90eXBlICgpCisKKy8qKgorICogR1NUX1ZBTFVFX0xFU1NfVEhBTjoKKyAqCisgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZmlyc3QgdmFsdWUgcHJvdmlkZWQgdG8gYSBjb21wYXJpc29uIGZ1bmN0aW9uCisgKiAoZ3N0X3ZhbHVlX2NvbXBhcmUoKSkgaXMgbGVzc2VyIHRoYW4gdGhlIHNlY29uZCBvbmUuCisgKi8KKyNkZWZpbmUgR1NUX1ZBTFVFX0xFU1NfVEhBTiAgICAgICAgICAgICAgKC0xKQorCisvKioKKyAqIEdTVF9WQUxVRV9FUVVBTDoKKyAqCisgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZmlyc3QgdmFsdWUgcHJvdmlkZWQgdG8gYSBjb21wYXJpc29uIGZ1bmN0aW9uCisgKiAoZ3N0X3ZhbHVlX2NvbXBhcmUoKSkgaXMgZXF1YWwgdG8gdGhlIHNlY29uZCBvbmUuCisgKi8KKyNkZWZpbmUgR1NUX1ZBTFVFX0VRVUFMICAgICAgICAgICAgICAgICAgIDAKKworLyoqCisgKiBHU1RfVkFMVUVfR1JFQVRFUl9USEFOOgorICoKKyAqIEluZGljYXRlcyB0aGF0IHRoZSBmaXJzdCB2YWx1ZSBwcm92aWRlZCB0byBhIGNvbXBhcmlzb24gZnVuY3Rpb24KKyAqIChnc3RfdmFsdWVfY29tcGFyZSgpKSBpcyBncmVhdGVyIHRoYW4gdGhlIHNlY29uZCBvbmUuCisgKi8KKyNkZWZpbmUgR1NUX1ZBTFVFX0dSRUFURVJfVEhBTiAgICAgICAgICAgIDEKKworLyoqCisgKiBHU1RfVkFMVUVfVU5PUkRFUkVEOgorICoKKyAqIEluZGljYXRlcyB0aGF0IHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIChnc3RfdmFsdWVfY29tcGFyZSgpKSBjYW4gbm90CisgKiBkZXRlcm1pbmUgYSBvcmRlciBmb3IgdGhlIHR3byBwcm92aWRlZCB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgR1NUX1ZBTFVFX1VOT1JERVJFRCAgICAgICAgICAgICAgIDIKKworLyoqCisgKiBHc3RWYWx1ZUNvbXBhcmVGdW5jOgorICogQHZhbHVlMTogZmlyc3QgdmFsdWUgZm9yIGNvbXBhcmlzb24KKyAqIEB2YWx1ZTI6IHNlY29uZCB2YWx1ZSBmb3IgY29tcGFyaXNvbgorICoKKyAqIFVzZWQgdG9nZXRoZXIgd2l0aCBnc3RfdmFsdWVfY29tcGFyZSgpIHRvIGNvbXBhcmUgI0dWYWx1ZSBpdGVtcy4KKyAqCisgKiBSZXR1cm5zOiBvbmUgb2YgR1NUX1ZBTFVFX0xFU1NfVEhBTiwgR1NUX1ZBTFVFX0VRVUFMLCBHU1RfVkFMVUVfR1JFQVRFUl9USEFOCisgKiBvciBHU1RfVkFMVUVfVU5PUkRFUkVECisgKi8KK3R5cGVkZWYgZ2ludCAgICAgKCogR3N0VmFsdWVDb21wYXJlRnVuYykgICAgIChjb25zdCBHVmFsdWUgKnZhbHVlMSwKKwkJCQkJICAgICAgY29uc3QgR1ZhbHVlICp2YWx1ZTIpOworCisvKioKKyAqIEdzdFZhbHVlU2VyaWFsaXplRnVuYzoKKyAqIEB2YWx1ZTE6IGEgI0dWYWx1ZQorICoKKyAqIFVzZWQgYnkgZ3N0X3ZhbHVlX3NlcmlhbGl6ZSgpIHRvIG9idGFpbiBhIG5vbi1iaW5hcnkgZm9ybSBvZiB0aGUgI0dWYWx1ZS4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnX2ZyZWUKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlCisgKi8KK3R5cGVkZWYgZ2NoYXIgKiAgKCogR3N0VmFsdWVTZXJpYWxpemVGdW5jKSAgIChjb25zdCBHVmFsdWUgKnZhbHVlMSk7CisKKy8qKgorICogR3N0VmFsdWVEZXNlcmlhbGl6ZUZ1bmM6CisgKiBAZGVzdDogYSAjR1ZhbHVlCisgKiBAczogYSBzdHJpbmcKKyAqCisgKiBVc2VkIGJ5IGdzdF92YWx1ZV9kZXNlcmlhbGl6ZSgpIHRvIHBhcnNlIGEgbm9uLWJpbmFyeSBmb3JtIGludG8gdGhlICNHVmFsdWUuCisgKgorICogUmV0dXJuczogJVRSVUUgZm9yIHN1Y2Nlc3MKKyAqLwordHlwZWRlZiBnYm9vbGVhbiAoKiBHc3RWYWx1ZURlc2VyaWFsaXplRnVuYykgKEdWYWx1ZSAgICAgICAqZGVzdCwKKwkJCQkJICAgICAgY29uc3QgZ2NoYXIgICpzKTsKKworLyoqCisgKiBHc3RWYWx1ZVVuaW9uRnVuYzoKKyAqIEBkZXN0OiBhICNHVmFsdWUgZm9yIHRoZSByZXN1bHQKKyAqIEB2YWx1ZTE6IGEgI0dWYWx1ZSBvcGVyYW5kCisgKiBAdmFsdWUyOiBhICNHVmFsdWUgb3BlcmFuZAorICoKKyAqIFVzZWQgYnkgZ3N0X3ZhbHVlX3VuaW9uKCkgdG8gcGVyZm9ybSB1bmlmaWNhdGlvbiBmb3IgYSBzcGVjaWZpYyAjR1ZhbHVlCisgKiB0eXBlLiBSZWdpc3RlciBhIG5ldyBpbXBsZW1lbnRhdGlvbiB3aXRoIGdzdF92YWx1ZV9yZWdpc3Rlcl91bmlvbl9mdW5jKCkuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgYSB1bmlvbiB3YXMgc3VjY2Vzc2Z1bAorICovCit0eXBlZGVmIGdib29sZWFuICgqIEdzdFZhbHVlVW5pb25GdW5jKSAgICAgICAoR1ZhbHVlICAgICAgICpkZXN0LAorCQkJCQkgICAgICBjb25zdCBHVmFsdWUgKnZhbHVlMSwKKwkJCQkJICAgICAgY29uc3QgR1ZhbHVlICp2YWx1ZTIpOworCisvKioKKyAqIEdzdFZhbHVlSW50ZXJzZWN0RnVuYzoKKyAqIEBkZXN0OiAob3V0IGNhbGxlci1hbGxvY2F0ZXMpOiBhICNHVmFsdWUgZm9yIHRoZSByZXN1bHQKKyAqIEB2YWx1ZTE6IGEgI0dWYWx1ZSBvcGVyYW5kCisgKiBAdmFsdWUyOiBhICNHVmFsdWUgb3BlcmFuZAorICoKKyAqIFVzZWQgYnkgZ3N0X3ZhbHVlX2ludGVyc2VjdCgpIHRvIHBlcmZvcm0gaW50ZXJzZWN0aW9uIGZvciBhIHNwZWNpZmljICNHVmFsdWUKKyAqIHR5cGUuIElmIHRoZSBpbnRlcnNlY3Rpb24gaXMgbm9uLWVtcHR5LCB0aGUgcmVzdWx0IGlzCisgKiBwbGFjZWQgaW4gQGRlc3QgYW5kIFRSVUUgaXMgcmV0dXJuZWQuICBJZiB0aGUgaW50ZXJzZWN0aW9uIGlzCisgKiBlbXB0eSwgQGRlc3QgaXMgdW5tb2RpZmllZCBhbmQgRkFMU0UgaXMgcmV0dXJuZWQuCisgKiBSZWdpc3RlciBhIG5ldyBpbXBsZW1lbnRhdGlvbiB3aXRoIGdzdF92YWx1ZV9yZWdpc3Rlcl9pbnRlcnNlY3RfZnVuYygpLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSB2YWx1ZXMgY2FuIGludGVyc2VjdAorICovCit0eXBlZGVmIGdib29sZWFuICgqIEdzdFZhbHVlSW50ZXJzZWN0RnVuYykgICAoR1ZhbHVlICAgICAgICpkZXN0LAorCQkJCQkgICAgICBjb25zdCBHVmFsdWUgKnZhbHVlMSwKKwkJCQkJICAgICAgY29uc3QgR1ZhbHVlICp2YWx1ZTIpOworCisvKioKKyAqIEdzdFZhbHVlU3VidHJhY3RGdW5jOgorICogQGRlc3Q6IChvdXQgY2FsbGVyLWFsbG9jYXRlcyk6IGEgI0dWYWx1ZSBmb3IgdGhlIHJlc3VsdAorICogQG1pbnVlbmQ6IGEgI0dWYWx1ZSBvcGVyYW5kCisgKiBAc3VidHJhaGVuZDogYSAjR1ZhbHVlIG9wZXJhbmQKKyAqCisgKiBVc2VkIGJ5IGdzdF92YWx1ZV9zdWJ0cmFjdCgpIHRvIHBlcmZvcm0gc3VidHJhY3Rpb24gZm9yIGEgc3BlY2lmaWMgI0dWYWx1ZQorICogdHlwZS4gUmVnaXN0ZXIgYSBuZXcgaW1wbGVtZW50YXRpb24gd2l0aCBnc3RfdmFsdWVfcmVnaXN0ZXJfc3VidHJhY3RfZnVuYygpLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBzdWJ0cmFjdGlvbiBpcyBub3QgZW1wdHkKKyAqLwordHlwZWRlZiBnYm9vbGVhbiAoKiBHc3RWYWx1ZVN1YnRyYWN0RnVuYykgICAgKEdWYWx1ZSAgICAgICAqZGVzdCwKKwkJCQkJICAgICAgY29uc3QgR1ZhbHVlICptaW51ZW5kLAorCQkJCQkgICAgICBjb25zdCBHVmFsdWUgKnN1YnRyYWhlbmQpOworCit0eXBlZGVmIHN0cnVjdCBfR3N0VmFsdWVUYWJsZSBHc3RWYWx1ZVRhYmxlOworLyoqCisgKiBHc3RWYWx1ZVRhYmxlOgorICogQHR5cGU6IGEgI0dUeXBlCisgKiBAY29tcGFyZTogYSAjR3N0VmFsdWVDb21wYXJlRnVuYworICogQHNlcmlhbGl6ZTogYSAjR3N0VmFsdWVTZXJpYWxpemVGdW5jCisgKiBAZGVzZXJpYWxpemU6IGEgI0dzdFZhbHVlRGVzZXJpYWxpemVGdW5jCisgKgorICogVlRhYmxlIGZvciB0aGUgI0dWYWx1ZSBAdHlwZS4KKyAqLworc3RydWN0IF9Hc3RWYWx1ZVRhYmxlIHsKKyAgR1R5cGUgdHlwZTsKKyAgR3N0VmFsdWVDb21wYXJlRnVuYyBjb21wYXJlOworICBHc3RWYWx1ZVNlcmlhbGl6ZUZ1bmMgc2VyaWFsaXplOworICBHc3RWYWx1ZURlc2VyaWFsaXplRnVuYyBkZXNlcmlhbGl6ZTsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgdm9pZCAqX2dzdF9yZXNlcnZlZCBbR1NUX1BBRERJTkddOworfTsKKworR1R5cGUgZ3N0X2ludF9yYW5nZV9nZXRfdHlwZSAodm9pZCk7CitHVHlwZSBnc3RfaW50NjRfcmFuZ2VfZ2V0X3R5cGUgKHZvaWQpOworR1R5cGUgZ3N0X2RvdWJsZV9yYW5nZV9nZXRfdHlwZSAodm9pZCk7CitHVHlwZSBnc3RfZnJhY3Rpb25fcmFuZ2VfZ2V0X3R5cGUgKHZvaWQpOworR1R5cGUgZ3N0X2ZyYWN0aW9uX2dldF90eXBlICh2b2lkKTsKK0dUeXBlIGdzdF92YWx1ZV9saXN0X2dldF90eXBlICh2b2lkKTsKK0dUeXBlIGdzdF92YWx1ZV9hcnJheV9nZXRfdHlwZSAodm9pZCk7CisKK0dUeXBlIGdzdF9kYXRlX2dldF90eXBlICh2b2lkKTsKK0dUeXBlIGdzdF9kYXRlX3RpbWVfZ2V0X3R5cGUgKHZvaWQpOworCit2b2lkCQlnc3RfdmFsdWVfcmVnaXN0ZXIJCShjb25zdCBHc3RWYWx1ZVRhYmxlICAgKnRhYmxlKTsKK3ZvaWQJCWdzdF92YWx1ZV9pbml0X2FuZF9jb3B5CQkoR1ZhbHVlICAgICAgICAgICAgICAgICpkZXN0LAorCQkJCQkJIGNvbnN0IEdWYWx1ZSAgICAgICAgICAqc3JjKTsKKworZ2NoYXIgKgkJZ3N0X3ZhbHVlX3NlcmlhbGl6ZQkJKGNvbnN0IEdWYWx1ZSAgICAgICAgICAqdmFsdWUpOworZ2Jvb2xlYW4JZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplCQkoR1ZhbHVlICAgICAgICAgICAgICAgICpkZXN0LAorCQkJCQkJIGNvbnN0IGdjaGFyICAgICAgICAgICAqc3JjKTsKKworLyogbGlzdCAqLwordm9pZAkJZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlCShHVmFsdWUJCSp2YWx1ZSwKKwkJCQkJCSBjb25zdCBHVmFsdWUJKmFwcGVuZF92YWx1ZSk7Cit2b2lkCQlnc3RfdmFsdWVfbGlzdF9wcmVwZW5kX3ZhbHVlCShHVmFsdWUJCSp2YWx1ZSwKKwkJCQkJCSBjb25zdCBHVmFsdWUJKnByZXBlbmRfdmFsdWUpOwordm9pZAkJZ3N0X3ZhbHVlX2xpc3RfY29uY2F0CQkoR1ZhbHVlCQkqZGVzdCwKKwkJCQkJCSBjb25zdCBHVmFsdWUgICAqdmFsdWUxLAorCQkJCQkJIGNvbnN0IEdWYWx1ZQkqdmFsdWUyKTsKK3ZvaWQJCWdzdF92YWx1ZV9saXN0X21lcmdlCQkoR1ZhbHVlCQkqZGVzdCwKKwkJCQkJCSBjb25zdCBHVmFsdWUgICAqdmFsdWUxLAorCQkJCQkJIGNvbnN0IEdWYWx1ZQkqdmFsdWUyKTsKK2d1aW50CQlnc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZQkJKGNvbnN0IEdWYWx1ZQkqdmFsdWUpOworY29uc3QgR1ZhbHVlICoJZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlCShjb25zdCBHVmFsdWUJKnZhbHVlLAorCQkJCQkJIGd1aW50CQlpbmRleCk7CisKKy8qIGFycmF5ICovCit2b2lkCQlnc3RfdmFsdWVfYXJyYXlfYXBwZW5kX3ZhbHVlCShHVmFsdWUJCSp2YWx1ZSwKKwkJCQkJCSBjb25zdCBHVmFsdWUJKmFwcGVuZF92YWx1ZSk7Cit2b2lkCQlnc3RfdmFsdWVfYXJyYXlfcHJlcGVuZF92YWx1ZQkoR1ZhbHVlCQkqdmFsdWUsCisJCQkJCQkgY29uc3QgR1ZhbHVlCSpwcmVwZW5kX3ZhbHVlKTsKK2d1aW50CQlnc3RfdmFsdWVfYXJyYXlfZ2V0X3NpemUJKGNvbnN0IEdWYWx1ZQkqdmFsdWUpOworY29uc3QgR1ZhbHVlICoJZ3N0X3ZhbHVlX2FycmF5X2dldF92YWx1ZQkoY29uc3QgR1ZhbHVlCSp2YWx1ZSwKKwkJCQkJCSBndWludAkJaW5kZXgpOworCisvKiBpbnQgcmFuZ2UgKi8KK3ZvaWQJCWdzdF92YWx1ZV9zZXRfaW50X3JhbmdlCQkoR1ZhbHVlCQkqdmFsdWUsCisJCQkJCQkgZ2ludAkJc3RhcnQsCisJCQkJCQkgZ2ludAkJZW5kKTsKK2dpbnQJCWdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbgkoY29uc3QgR1ZhbHVlCSp2YWx1ZSk7CitnaW50CQlnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXgJKGNvbnN0IEdWYWx1ZQkqdmFsdWUpOworCisvKiBpbnQ2NCByYW5nZSAqLwordm9pZAkJZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZSAgICAgIAkoR1ZhbHVlCQkqdmFsdWUsCisJCQkJCQkgZ2ludDY0CQlzdGFydCwKKwkJCQkJCSBnaW50NjQJCWVuZCk7CitnaW50NjQJCWdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWluCShjb25zdCBHVmFsdWUJKnZhbHVlKTsKK2dpbnQ2NAkJZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9tYXgJKGNvbnN0IEdWYWx1ZQkqdmFsdWUpOworCisvKiBkb3VibGUgcmFuZ2UgKi8KK3ZvaWQJCWdzdF92YWx1ZV9zZXRfZG91YmxlX3JhbmdlCShHVmFsdWUJCSp2YWx1ZSwKKwkJCQkJCSBnZG91YmxlCXN0YXJ0LAorCQkJCQkJIGdkb3VibGUJZW5kKTsKK2dkb3VibGUJCWdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21pbgkoY29uc3QgR1ZhbHVlCSp2YWx1ZSk7CitnZG91YmxlCQlnc3RfdmFsdWVfZ2V0X2RvdWJsZV9yYW5nZV9tYXgJKGNvbnN0IEdWYWx1ZQkqdmFsdWUpOworCisvKiBjYXBzICovCitjb25zdCBHc3RDYXBzICoJZ3N0X3ZhbHVlX2dldF9jYXBzCQkoY29uc3QgR1ZhbHVlCSp2YWx1ZSk7Cit2b2lkCQlnc3RfdmFsdWVfc2V0X2NhcHMJCShHVmFsdWUJCSp2YWx1ZSwKKwkJCQkJCSBjb25zdCBHc3RDYXBzICAqY2Fwcyk7CisKKy8qIHN0cnVjdHVyZSAqLworY29uc3QgR3N0U3RydWN0dXJlICoKKwkJZ3N0X3ZhbHVlX2dldF9zdHJ1Y3R1cmUJCShjb25zdCBHVmFsdWUJKnZhbHVlKTsKK3ZvaWQJCWdzdF92YWx1ZV9zZXRfc3RydWN0dXJlCQkoR1ZhbHVlCQkqdmFsdWUsCisJCQkJCQkgY29uc3QgR3N0U3RydWN0dXJlICAqc3RydWN0dXJlKTsKKworLyogZnJhY3Rpb24gKi8KK3ZvaWQJCWdzdF92YWx1ZV9zZXRfZnJhY3Rpb24JCShHVmFsdWUJCSp2YWx1ZSwKKwkJCQkJCSBnaW50CQludW1lcmF0b3IsCisJCQkJCQkgZ2ludAkJZGVub21pbmF0b3IpOworZ2ludAkJZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9udW1lcmF0b3IgKGNvbnN0IEdWYWx1ZQkqdmFsdWUpOworZ2ludAkJZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9kZW5vbWluYXRvcihjb25zdCBHVmFsdWUJKnZhbHVlKTsKK2dib29sZWFuCWdzdF92YWx1ZV9mcmFjdGlvbl9tdWx0aXBseQkoR1ZhbHVlCQkqcHJvZHVjdCwKKwkJCQkJCSBjb25zdCBHVmFsdWUJKmZhY3RvcjEsCisJCQkJCQkgY29uc3QgR1ZhbHVlCSpmYWN0b3IyKTsKK2dib29sZWFuIAlnc3RfdmFsdWVfZnJhY3Rpb25fc3VidHJhY3QgKEdWYWx1ZSAqIGRlc3QsCisJCQkJCSAgICAgY29uc3QgR1ZhbHVlICogbWludWVuZCwgCisJCQkJCSAgICAgY29uc3QgR1ZhbHVlICogc3VidHJhaGVuZCk7CisKKy8qIGZyYWN0aW9uIHJhbmdlICovCit2b2lkCQlnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlCShHVmFsdWUJCSp2YWx1ZSwKKwkJCQkJCSBjb25zdCBHVmFsdWUgCSpzdGFydCwKKwkJCQkJCSBjb25zdCBHVmFsdWUJKmVuZCk7Cit2b2lkCQlnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlX2Z1bGwgKEdWYWx1ZQkqdmFsdWUsCisJCQkJCQkgZ2ludCBudW1lcmF0b3Jfc3RhcnQsIAorCQkJCQkJIGdpbnQgZGVub21pbmF0b3Jfc3RhcnQsCisJCQkJCQkgZ2ludCBudW1lcmF0b3JfZW5kLCAKKwkJCQkJCSBnaW50IGRlbm9taW5hdG9yX2VuZCk7Citjb25zdCBHVmFsdWUgCSpnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21pbiAoY29uc3QgR1ZhbHVlCSp2YWx1ZSk7Citjb25zdCBHVmFsdWUgCSpnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21heCAoY29uc3QgR1ZhbHVlCSp2YWx1ZSk7CisKKy8qIGRhdGUgKi8KK2NvbnN0IEdEYXRlICoJZ3N0X3ZhbHVlX2dldF9kYXRlCQkoY29uc3QgR1ZhbHVlCSp2YWx1ZSk7Cit2b2lkCQlnc3RfdmFsdWVfc2V0X2RhdGUJCShHVmFsdWUJCSp2YWx1ZSwKKwkJCQkJCSBjb25zdCBHRGF0ZSAgICAqZGF0ZSk7CisKKy8qIGNvbXBhcmUgKi8KK2dpbnQJCWdzdF92YWx1ZV9jb21wYXJlCQkoY29uc3QgR1ZhbHVlCSp2YWx1ZTEsCisJCQkJCQkgY29uc3QgR1ZhbHVlCSp2YWx1ZTIpOworZ2Jvb2xlYW4JZ3N0X3ZhbHVlX2Nhbl9jb21wYXJlCQkoY29uc3QgR1ZhbHVlCSp2YWx1ZTEsCisJCQkJCQkgY29uc3QgR1ZhbHVlCSp2YWx1ZTIpOworLyogdW5pb24gKi8KK2dib29sZWFuCWdzdF92YWx1ZV91bmlvbgkJCShHVmFsdWUJCSpkZXN0LAorCQkJCQkJIGNvbnN0IEdWYWx1ZQkqdmFsdWUxLAorCQkJCQkJIGNvbnN0IEdWYWx1ZQkqdmFsdWUyKTsKK2dib29sZWFuCWdzdF92YWx1ZV9jYW5fdW5pb24JCShjb25zdCBHVmFsdWUJKnZhbHVlMSwKKwkJCQkJCSBjb25zdCBHVmFsdWUgICAqdmFsdWUyKTsKK3ZvaWQJCWdzdF92YWx1ZV9yZWdpc3Rlcl91bmlvbl9mdW5jCShHVHlwZQkJdHlwZTEsCisJCQkJCQkgR1R5cGUJCXR5cGUyLAorCQkJCQkJIEdzdFZhbHVlVW5pb25GdW5jIGZ1bmMpOworCisvKiBpbnRlcnNlY3Rpb24gKi8KK2dib29sZWFuCWdzdF92YWx1ZV9pbnRlcnNlY3QJCShHVmFsdWUJCSpkZXN0LAorCQkJCQkJIGNvbnN0IEdWYWx1ZQkqdmFsdWUxLAorCQkJCQkJIGNvbnN0IEdWYWx1ZQkqdmFsdWUyKTsKK2dib29sZWFuCWdzdF92YWx1ZV9jYW5faW50ZXJzZWN0CQkoY29uc3QgR1ZhbHVlCSp2YWx1ZTEsCisJCQkJCQkgY29uc3QgR1ZhbHVlCSp2YWx1ZTIpOwordm9pZAkJZ3N0X3ZhbHVlX3JlZ2lzdGVyX2ludGVyc2VjdF9mdW5jIChHVHlwZQl0eXBlMSwKKwkJCQkJCUdUeXBlCQl0eXBlMiwKKwkJCQkJCUdzdFZhbHVlSW50ZXJzZWN0RnVuYyBmdW5jKTsKKworLyogc3VidHJhY3Rpb24gKi8KK2dib29sZWFuCWdzdF92YWx1ZV9zdWJ0cmFjdAkJKEdWYWx1ZQkJKmRlc3QsCisJCQkJCQkgY29uc3QgR1ZhbHVlCSptaW51ZW5kLAorCQkJCQkJIGNvbnN0IEdWYWx1ZQkqc3VidHJhaGVuZCk7CitnYm9vbGVhbglnc3RfdmFsdWVfY2FuX3N1YnRyYWN0CQkoY29uc3QgR1ZhbHVlCSptaW51ZW5kLAorCQkJCQkJIGNvbnN0IEdWYWx1ZQkqc3VidHJhaGVuZCk7Cit2b2lkCQlnc3RfdmFsdWVfcmVnaXN0ZXJfc3VidHJhY3RfZnVuYyAoR1R5cGUJCW1pbnVlbmRfdHlwZSwKKwkJCQkJCUdUeXBlCQlzdWJ0cmFoZW5kX3R5cGUsCisJCQkJCQlHc3RWYWx1ZVN1YnRyYWN0RnVuYyBmdW5jKTsKKworLyogZml4YXRpb24gKi8KK2dib29sZWFuCWdzdF92YWx1ZV9pc19maXhlZAkJKGNvbnN0IEdWYWx1ZSAgICp2YWx1ZSk7CitnYm9vbGVhbiAgICAgICAgZ3N0X3ZhbHVlX2ZpeGF0ZSAgICAgICAgICAgICAgICAoR1ZhbHVlICAgICAgICAgKmRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICAgKnNyYyk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL2dzdC9nc3R2ZXJzaW9uLmguaW4gYi9nc3QvZ3N0dmVyc2lvbi5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YTY2MDkKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvZ3N0dmVyc2lvbi5oLmluCkBAIC0wLDAgKzEsOTAgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KKyAqCisgKiBnc3R2ZXJzaW9uLmg6IFZlcnNpb24gaW5mb3JtYXRpb24gZm9yIEdTdHJlYW1lcgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisvKioKKyAqIFNFQ1RJT046Z3N0dmVyc2lvbgorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBHU3RyZWFtZXIgdmVyc2lvbiBtYWNyb3MuCisgKgorICogVXNlIHRoZSBHU1RfVkVSU0lPTl8qIG1hY3JvcyBlLmcuIHdoZW4gZGVmaW5pbmcgb3duIHBsdWdpbnMuIFRoZSBHU3RyZWFtZXIKKyAqIHJ1bnRpbWUgY2hlY2tzIGlmIHRoZXNlIHBsdWdpbiBhbmQgY29yZSB2ZXJzaW9uIG1hdGNoIGFuZCByZWZ1c2VzIHRvIHVzZSBhCisgKiBwbHVnaW4gY29tcGlsZWQgYWdhaW5zdCBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIEdTdHJlYW1lci4KKyAqIFlvdSBjYW4gYWxzbyB1c2UgdGhlIG1hY3JvcyB0byBrZWVwIHRoZSBHU3RyZWFtZXIgdmVyc2lvbiBpbmZvcm1hdGlvbiBpbgorICogeW91ciBhcHBsaWNhdGlvbi4KKyAqCisgKiBVc2UgdGhlIGdzdF92ZXJzaW9uKCkgZnVuY3Rpb24gaWYgeW91IHdhbnQgdG8ga25vdyB3aGljaCB2ZXJzaW9uIG9mCisgKiBHU3RyZWFtZXIgeW91IGFyZSBjdXJyZW50bHkgbGlua2VkIGFnYWluc3QuCisgKgorICogVGhlIHZlcnNpb24gbWFjcm9zIGdldCBkZWZpbmVkIGJ5IGluY2x1ZGluZyAiZ3N0L2dzdC5oIi4KKyAqLworCisjaWZuZGVmIF9fR1NUX1ZFUlNJT05fSF9fCisjZGVmaW5lIF9fR1NUX1ZFUlNJT05fSF9fCisKK0dfQkVHSU5fREVDTFMKKworLyoqCisgKiBHU1RfVkVSU0lPTl9NQUpPUjoKKyAqCisgKiBUaGUgbWFqb3IgdmVyc2lvbiBvZiBHU3RyZWFtZXIgYXQgY29tcGlsZSB0aW1lOgorICovCisjZGVmaW5lIEdTVF9WRVJTSU9OX01BSk9SIChAUEFDS0FHRV9WRVJTSU9OX01BSk9SQCkKKy8qKgorICogR1NUX1ZFUlNJT05fTUlOT1I6CisgKgorICogVGhlIG1pbm9yIHZlcnNpb24gb2YgR1N0cmVhbWVyIGF0IGNvbXBpbGUgdGltZToKKyAqLworI2RlZmluZSBHU1RfVkVSU0lPTl9NSU5PUiAoQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkApCisvKioKKyAqIEdTVF9WRVJTSU9OX01JQ1JPOgorICoKKyAqIFRoZSBtaWNybyB2ZXJzaW9uIG9mIEdTdHJlYW1lciBhdCBjb21waWxlIHRpbWU6CisgKi8KKyNkZWZpbmUgR1NUX1ZFUlNJT05fTUlDUk8gKEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9AKQorLyoqCisgKiBHU1RfVkVSU0lPTl9OQU5POgorICoKKyAqIFRoZSBuYW5vIHZlcnNpb24gb2YgR1N0cmVhbWVyIGF0IGNvbXBpbGUgdGltZToKKyAqIEFjdHVhbCByZWxlYXNlcyBoYXZlIDAsIEdJVCB2ZXJzaW9ucyBoYXZlIDEsIHByZXJlbGVhc2UgdmVyc2lvbnMgaGF2ZSAyLS4uLgorICovCisjZGVmaW5lIEdTVF9WRVJTSU9OX05BTk8gKEBQQUNLQUdFX1ZFUlNJT05fTkFOT0ApCisKKy8qKgorICogR1NUX0NIRUNLX1ZFUlNJT046CisgKiBAbWFqb3I6IGEgbnVtYmVyIGluZGljYXRpbmcgdGhlIG1ham9yIHZlcnNpb24KKyAqIEBtaW5vcjogYSBudW1iZXIgaW5kaWNhdGluZyB0aGUgbWlub3IgdmVyc2lvbgorICogQG1pY3JvOiBhIG51bWJlciBpbmRpY2F0aW5nIHRoZSBtaWNybyB2ZXJzaW9uCisgKgorICogQ2hlY2sgd2hldGhlciBhIEdTdHJlYW1lciB2ZXJzaW9uIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbgorICogbWFqb3IubWlub3IubWljcm8gaXMgcHJlc2VudC4KKyAqCisgKiBTaW5jZTogMC4xMC4xOAorICovCisjZGVmaW5lCUdTVF9DSEVDS19WRVJTSU9OKG1ham9yLG1pbm9yLG1pY3JvKQlcCisgICAgKEdTVF9WRVJTSU9OX01BSk9SID4gKG1ham9yKSB8fCBcCisgICAgIChHU1RfVkVSU0lPTl9NQUpPUiA9PSAobWFqb3IpICYmIEdTVF9WRVJTSU9OX01JTk9SID4gKG1pbm9yKSkgfHwgXAorICAgICAoR1NUX1ZFUlNJT05fTUFKT1IgPT0gKG1ham9yKSAmJiBHU1RfVkVSU0lPTl9NSU5PUiA9PSAobWlub3IpICYmIFwKKyAgICAgIEdTVF9WRVJTSU9OX01JQ1JPID49IChtaWNybykpIHx8IFwKKyAgICAgKEdTVF9WRVJTSU9OX01BSk9SID09IChtYWpvcikgJiYgR1NUX1ZFUlNJT05fTUlOT1IgPT0gKG1pbm9yKSAmJiBcCisgICAgICBHU1RfVkVSU0lPTl9NSUNSTyArIDEgPT0gKG1pY3JvKSAmJiBHU1RfVkVSU0lPTl9OQU5PID4gMCkpCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9WRVJTSU9OX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L21hdGgtY29tcGF0LmggYi9nc3QvbWF0aC1jb21wYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWIzNjhjCi0tLSAvZGV2L251bGwKKysrIGIvZ3N0L21hdGgtY29tcGF0LmgKQEAgLTAsMCArMSw4NCBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fR1NUX01BVEhfQ09NUEFUX0hfXworI2RlZmluZSBfX0dTVF9NQVRIX0NPTVBBVF9IX18KKworLyogVGhpcyBoZWFkZXIgaXMgbm90IGluY2x1ZGVkIGF1dG9tYXRpY2FsbHkgdmlhIGdzdC9nc3QuaCwgeW91IG5lZWQgdG8KKyAqIGluY2x1ZGUgaXQgZXhwbGljaXRseSBpZiB5b3UgbmVlZCBpdC4gKi8KKworI2lmbmRlZiBfVVNFX01BVEhfREVGSU5FUworI2RlZmluZSBfVVNFX01BVEhfREVGSU5FUyAvKiBzbyBNU1ZDIGRlZmluZXMgTV9QSSBldGMuICovCisjZW5kaWYKKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlIDxnbGliLmg+CisKK0dfQkVHSU5fREVDTFMKKworLyogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NYXRoLmggKi8KKworI2RlZmluZSBfX0dTVF9NQVRIX0NPTVBBVF9ORUVEX1JJTlQKKyNkZWZpbmUgX19HU1RfTUFUSF9DT01QQVRfTkVFRF9SSU5URgorCisjaWYgZGVmaW5lZChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKyN1bmRlZiBfX0dTVF9NQVRIX0NPTVBBVF9ORUVEX1JJTlQKKyN1bmRlZiBfX0dTVF9NQVRIX0NPTVBBVF9ORUVEX1JJTlRGCisjZW5kaWYKKworI2lmIGRlZmluZWQoX1BPU0lYX1ZFUlNJT04pICYmIF9QT1NJWF9WRVJTSU9OID49IDIwMDExMkwKKyN1bmRlZiBfX0dTVF9NQVRIX0NPTVBBVF9ORUVEX1JJTlQKKyN1bmRlZiBfX0dTVF9NQVRIX0NPTVBBVF9ORUVEX1JJTlRGCisjZW5kaWYKKworI2lmbmRlZiBNX1BJCisjZGVmaW5lIE1fUEkgR19QSQorI2VuZGlmCisKKyNpZm5kZWYgTV9QSV8yCisjZGVmaW5lIE1fUElfMiBHX1BJXzIKKyNlbmRpZgorCisjaWZuZGVmIE1fUElfNAorI2RlZmluZSBNX1BJXzQgR19QSV80CisjZW5kaWYKKworc3RhdGljIGlubGluZSBkb3VibGUKK19fZ3N0X21hdGhfY29tcGF0X3JpbnQgKGRvdWJsZSB4KQoreworICByZXR1cm4gZmxvb3IgKHggKyAwLjUpOworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0CitfX2dzdF9tYXRoX2NvbXBhdF9yaW50ZiAoZmxvYXQgeCkKK3sKKyAgcmV0dXJuIGZsb29yZiAoeCArIDAuNSk7Cit9CisKKyNpZiBkZWZpbmVkIChfX0dTVF9NQVRIX0NPTVBBVF9ORUVEX1JJTlQpICYmICFkZWZpbmVkIChyaW50KQorI2RlZmluZSByaW50KHgpIF9fZ3N0X21hdGhfY29tcGF0X3JpbnQoeCkKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX19HU1RfTUFUSF9DT01QQVRfTkVFRF9SSU5URikgJiYgIWRlZmluZWQgKHJpbnRmKQorI2RlZmluZSByaW50Zih4KSBfX2dzdF9tYXRoX2NvbXBhdF9yaW50Zih4KQorI2VuZGlmCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9NQVRIX0NPTVBBVF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9wYXJzZS9NYWtlZmlsZS5hbSBiL2dzdC9wYXJzZS9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODM3ZWMyCi0tLSAvZGV2L251bGwKKysrIGIvZ3N0L3BhcnNlL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNTUgQEAKKyMgbGliZ3N0cGFyc2UubGEgaXMgYW4gb3B0aW9uYWxseSBidWlsdCBoZWxwZXIgbGlicmFyeSBsaW5rZWQgaW50byBjb3JlCitub2luc3RfTFRMSUJSQVJJRVMgPSBsaWJnc3RwYXJzZS5sYQorCitDTEVBTkZJTEVTID0gZ3JhbW1hci50YWIuaCBncmFtbWFyLm91dHB1dAorRVhUUkFfRElTVCA9IFwKKwlncmFtbWFyLnkgXAorCXBhcnNlLmwKKworIyB1bmNvbW1lbnQgdGhlc2UgbGluZXMgdG8gZGlzdCB0aGUgZ2VuZXJhdGVkIHNvdXJjZXMKKyNCVUlMVF9TT1VSQ0VTID0gZ3JhbW1hci50YWIuaCBncmFtbWFyLnRhYi5jIGxleC5fZ3N0X3BhcnNlX3l5LmMKKyNsaWJnc3RwYXJzZV9sYV9TT1VSQ0VTID0gbGV4Ll9nc3RfcGFyc2VfeXkuYyBncmFtbWFyLnRhYi5jCisKKyMgdW5jb21tZW50IHRoZXNlIGxpbmVzIHRvIF9OT1RfIGRpc3QgdGhlIGdlbmVyYXRlZCBzb3VyY2VzCitub2Rpc3RfbGliZ3N0cGFyc2VfbGFfU09VUkNFUyA9IGxleC5fZ3N0X3BhcnNlX3l5LmMgZ3JhbW1hci50YWIuYworQ0xFQU5GSUxFUyArPSBncmFtbWFyLnRhYi5jIGxleC5fZ3N0X3BhcnNlX3l5LmMKKworIyBjYW4ndCB1c2UgR1NUX0FMTF9DRkxBR1MgaGVyZSBiZWNhdXNlIHRoYXQnZCBwdWxsIGluIC1XZXJyb3IKK2xpYmdzdHBhcnNlX2xhX0NGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKSAtSSQodG9wX2J1aWxkZGlyKSBcCisJJChHTElCX0NGTEFHUykgJChHU1RfT1BUSU9OX0NGTEFHUykKK2xpYmdzdHBhcnNlX2xhX0xJQkFERCA9ICQoR1NUX0FMTF9MSUJTKQorCitub2luc3RfSEVBREVSUyA9IGdyYW1tYXIudGFiLmggdHlwZXMuaAorCitBbmRyb2lkLm1rOiBNYWtlZmlsZS5hbQorCWFuZHJvZ2VuaXplciAtOlBST0pFQ1QgZ3N0cmVhbWVyIC06U1RBVElDIGxpYmdzdHBhcnNlIC06VEFHUyBlbmcgZGVidWcgXAorCSAtOlJFTF9UT1AgJCh0b3Bfc3JjZGlyKSAtOkFCU19UT1AgJChhYnNfdG9wX3NyY2RpcikgXAorCSAtOlNPVVJDRVMgJChsaWJnc3RwYXJzZV9sYV9TT1VSQ0VTKSAkKG5vZGlzdF9saWJnc3RwYXJzZV9sYV9TT1VSQ0VTKSBcCisJIC06Q0ZMQUdTICQoREVGUykgJChsaWJnc3RwYXJzZV9sYV9DRkxBR1MpIFwKKwkgLTpMREZMQUdTICQobGliZ3N0cGFyc2VfbGFfTElCQUREKSBcCisJPiAkQAorCitncmFtbWFyLnRhYi5jIGdyYW1tYXIudGFiLmg6IGdyYW1tYXIueQorCSQoQU1fVl9HRU4pJChCSVNPTl9QQVRIKSAtZCAtdiAtcF9nc3RfcGFyc2VfeXkgJChzcmNkaXIpL2dyYW1tYXIueSAtbyBncmFtbWFyLnRhYi5jICYmIFwKKwltdiBncmFtbWFyLnRhYi5jIGdyYW1tYXIudGFiX3RtcC5jICYmIFwKKwllY2hvICcjaWZkZWYgSEFWRV9DT05GSUdfSCcgPiBncmFtbWFyLnRhYl90bXAyLmMgJiYgXAorCWVjaG8gJyNpbmNsdWRlIDxjb25maWcuaD4nID4+IGdyYW1tYXIudGFiX3RtcDIuYyAmJiBcCisJZWNobyAnI2VuZGlmJyA+PiBncmFtbWFyLnRhYl90bXAyLmMgJiYgXAorCWNhdCBncmFtbWFyLnRhYl90bXAuYyA+PiBncmFtbWFyLnRhYl90bXAyLmMgJiYgXAorCXJtIGdyYW1tYXIudGFiX3RtcC5jICYmIFwKKwltdiBncmFtbWFyLnRhYl90bXAyLmMgZ3JhbW1hci50YWIuYworCitsZXguX2dzdF9wYXJzZV95eS5jOiBwYXJzZS5sIGdyYW1tYXIudGFiLmgKKwkkKEFNX1ZfR0VOKSQoRkxFWF9QQVRIKSAtUF9nc3RfcGFyc2VfeXkgJF4gJiYgXAorCW12IGxleC5fZ3N0X3BhcnNlX3l5LmMgbGV4Ll9nc3RfcGFyc2VfeXlfdG1wLmMgJiYgXAorCWVjaG8gJyNpZmRlZiBIQVZFX0NPTkZJR19IJyA+IGxleC5fZ3N0X3BhcnNlX3l5X3RtcDIuYyAmJiBcCisJZWNobyAnI2luY2x1ZGUgPGNvbmZpZy5oPicgPj4gbGV4Ll9nc3RfcGFyc2VfeXlfdG1wMi5jICYmIFwKKwllY2hvICcjZW5kaWYnID4+IGxleC5fZ3N0X3BhcnNlX3l5X3RtcDIuYyAmJiBcCisJZWNobyAnc3RhdGljIGlubGluZSBpbnQgX2dzdF9wYXJzZV95eWdldF9jb2x1bW4gICh2b2lkICogeXlzY2FubmVyKTsnID4+IGxleC5fZ3N0X3BhcnNlX3l5X3RtcDIuYyAmJiBcCisJZWNobyAnc3RhdGljIGlubGluZSB2b2lkIF9nc3RfcGFyc2VfeXlzZXRfY29sdW1uIChpbnQgIGNvbHVtbl9ubyAsIHZvaWQgKiB5eXNjYW5uZXIpOycgPj4gbGV4Ll9nc3RfcGFyc2VfeXlfdG1wMi5jICYmIFwKKwljYXQgbGV4Ll9nc3RfcGFyc2VfeXlfdG1wLmMgPj4gbGV4Ll9nc3RfcGFyc2VfeXlfdG1wMi5jICYmIFwKKwlybSBsZXguX2dzdF9wYXJzZV95eV90bXAuYyAmJiBcCisJbXYgbGV4Ll9nc3RfcGFyc2VfeXlfdG1wMi5jIGxleC5fZ3N0X3BhcnNlX3l5LmMKKworLk5PVFBBUkFMTEVMOgorCmRpZmYgLS1naXQgYS9nc3QvcGFyc2UvTWFrZWZpbGUuaW4gYi9nc3QvcGFyc2UvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUzNGI4YgotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9wYXJzZS9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDc0NSBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4xIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSBnc3QvcGFyc2UKK0RJU1RfQ09NTU9OID0gJChub2luc3RfSEVBREVSUykgJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKKwkkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1weXRob24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXNjcnViLWluY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorTFRMSUJSQVJJRVMgPSAkKG5vaW5zdF9MVExJQlJBUklFUykKK2FtX19ERVBFTkRFTkNJRVNfMSA9CitsaWJnc3RwYXJzZV9sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKK25vZGlzdF9saWJnc3RwYXJzZV9sYV9PQkpFQ1RTID0gbGliZ3N0cGFyc2VfbGEtbGV4Ll9nc3RfcGFyc2VfeXkubG8gXAorCWxpYmdzdHBhcnNlX2xhLWdyYW1tYXIudGFiLmxvCitsaWJnc3RwYXJzZV9sYV9PQkpFQ1RTID0gJChub2Rpc3RfbGliZ3N0cGFyc2VfbGFfT0JKRUNUUykKK0FNX1ZfbHQgPSAkKGFtX192X2x0XyQoVikpCithbV9fdl9sdF8gPSAkKGFtX192X2x0XyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfbHRfMCA9IC0tc2lsZW50CitsaWJnc3RwYXJzZV9sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKKwkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAorCSQobGliZ3N0cGFyc2VfbGFfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vIFwKKwkkQAorREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCithbV9fbXYgPSBtdiAtZgorQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0FNX1ZfQ0MgPSAkKGFtX192X0NDXyQoVikpCithbV9fdl9DQ18gPSAkKGFtX192X0NDXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF8kKFYpKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X2F0XzAgPSBACitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0FNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF8kKFYpKQorYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAiICRAOworQU1fVl9HRU4gPSAkKGFtX192X0dFTl8kKFYpKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworU09VUkNFUyA9ICQobm9kaXN0X2xpYmdzdHBhcnNlX2xhX1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPQorSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKK0NDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKK0NIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKK0NIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKK0NIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUiA9IEBEQVRBRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAorRExMVE9PTCA9IEBETExUT09MQAorRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKK0VSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACitFWEVFWFQgPSBARVhFRVhUQAorRkZMQUdTID0gQEZGTEFHU0AKK0ZHUkVQID0gQEZHUkVQQAorRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKK0dDT1YgPSBAR0NPVkAKK0dDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAorR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACitHTElCX0xJQlMgPSBAR0xJQl9MSUJTQAorR0xJQl9PTkxZX0NGTEFHUyA9IEBHTElCX09OTFlfQ0ZMQUdTQAorR0xJQl9PTkxZX0xJQlMgPSBAR0xJQl9PTkxZX0xJQlNACitHTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKK0dMSUJfUkVRID0gQEdMSUJfUkVRQAorR01QX0xJQlMgPSBAR01QX0xJQlNACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dSRVAgPSBAR1JFUEAKK0dTTF9MSUJTID0gQEdTTF9MSUJTQAorR1NUX0FHRSA9IEBHU1RfQUdFQAorR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACitHU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACitHU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAorR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKK0dTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAorR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORUAKK0dTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKK0dTVF9ESVNBQkxFX05FVF9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfTkVUX0RFRklORUAKK0dTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACitHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAorR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAorR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKK0dTVF9ESVNBQkxFX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkVACitHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACitHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACitHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORSA9IEBHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORUAKK0dTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAorR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACitHU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAorR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACitHU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKK0dTVF9NQUpPUk1JTk9SID0gQEdTVF9NQUpPUk1JTk9SQAorR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACitHU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACitHU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAorR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACitHU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACitHU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACitHU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAorR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAorR1NUX1BLR19ERVBTID0gQEdTVF9QS0dfREVQU0AKK0dTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACitHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FQAorR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORUAKK0dTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKK0dTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACitHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkUgPSBAR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FQAorR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKK0hBVkVfRE9DQk9PSzJIVE1MID0gQEhBVkVfRE9DQk9PSzJIVE1MQAorSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKK0hBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKK0hBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKK0hBVkVfRklHMkRFViA9IEBIQVZFX0ZJRzJERVZACitIQVZFX0dNUCA9IEBIQVZFX0dNUEAKK0hBVkVfR1NMID0gQEhBVkVfR1NMQAorSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKK0hBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKK0hBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACitIQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKK0hBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACitIT1NUX0NQVSA9IEBIT1NUX0NQVUAKK0hUTUxfRElSID0gQEhUTUxfRElSQAorSU5FVF9BVE9OX0xJQlMgPSBASU5FVF9BVE9OX0xJQlNACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCRElSID0gQExJQkRJUkAKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCTSA9IEBMSUJNQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTE9DQUxFRElSID0gQExPQ0FMRURJUkAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACitQQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAorUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKK1BBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAorUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BFUkxfUEFUSCA9IEBQRVJMX1BBVEhACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQTFVHSU5ESVIgPSBAUExVR0lORElSQAorUE9TVUIgPSBAUE9TVUJACitQUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAorVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAorVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACitXSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACitYTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKK1hTTFRQUk9DID0gQFhTTFRQUk9DQAorWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3BsdWdpbmRpciA9IEBwbHVnaW5kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorCisjIGxpYmdzdHBhcnNlLmxhIGlzIGFuIG9wdGlvbmFsbHkgYnVpbHQgaGVscGVyIGxpYnJhcnkgbGlua2VkIGludG8gY29yZQorbm9pbnN0X0xUTElCUkFSSUVTID0gbGliZ3N0cGFyc2UubGEKK0NMRUFORklMRVMgPSBncmFtbWFyLnRhYi5oIGdyYW1tYXIub3V0cHV0IGdyYW1tYXIudGFiLmMgXAorCWxleC5fZ3N0X3BhcnNlX3l5LmMKK0VYVFJBX0RJU1QgPSBcCisJZ3JhbW1hci55IFwKKwlwYXJzZS5sCisKKworIyB1bmNvbW1lbnQgdGhlc2UgbGluZXMgdG8gZGlzdCB0aGUgZ2VuZXJhdGVkIHNvdXJjZXMKKyNCVUlMVF9TT1VSQ0VTID0gZ3JhbW1hci50YWIuaCBncmFtbWFyLnRhYi5jIGxleC5fZ3N0X3BhcnNlX3l5LmMKKyNsaWJnc3RwYXJzZV9sYV9TT1VSQ0VTID0gbGV4Ll9nc3RfcGFyc2VfeXkuYyBncmFtbWFyLnRhYi5jCisKKyMgdW5jb21tZW50IHRoZXNlIGxpbmVzIHRvIF9OT1RfIGRpc3QgdGhlIGdlbmVyYXRlZCBzb3VyY2VzCitub2Rpc3RfbGliZ3N0cGFyc2VfbGFfU09VUkNFUyA9IGxleC5fZ3N0X3BhcnNlX3l5LmMgZ3JhbW1hci50YWIuYworCisjIGNhbid0IHVzZSBHU1RfQUxMX0NGTEFHUyBoZXJlIGJlY2F1c2UgdGhhdCdkIHB1bGwgaW4gLVdlcnJvcgorbGliZ3N0cGFyc2VfbGFfQ0ZMQUdTID0gLUkkKHRvcF9zcmNkaXIpIC1JJCh0b3BfYnVpbGRkaXIpIFwKKwkkKEdMSUJfQ0ZMQUdTKSAkKEdTVF9PUFRJT05fQ0ZMQUdTKQorCitsaWJnc3RwYXJzZV9sYV9MSUJBREQgPSAkKEdTVF9BTExfTElCUykKK25vaW5zdF9IRUFERVJTID0gZ3JhbW1hci50YWIuaCB0eXBlcy5oCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBnc3QvcGFyc2UvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L3BhcnNlL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorCitjbGVhbi1ub2luc3RMVExJQlJBUklFUzoKKwktdGVzdCAteiAiJChub2luc3RfTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKG5vaW5zdF9MVExJQlJBUklFUykKKwlAbGlzdD0nJChub2luc3RfTFRMSUJSQVJJRVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBkaXI9ImBlY2hvICQkcCB8IHNlZCAtZSAnc3wvW14vXSokJHx8J2AiOyBcCisJICB0ZXN0ICIkJGRpciIgIT0gIiQkcCIgfHwgZGlyPS47IFwKKwkgIGVjaG8gInJtIC1mIFwiJCR7ZGlyfS9zb19sb2NhdGlvbnNcIiI7IFwKKwkgIHJtIC1mICIkJHtkaXJ9L3NvX2xvY2F0aW9ucyI7IFwKKwlkb25lCitsaWJnc3RwYXJzZS5sYTogJChsaWJnc3RwYXJzZV9sYV9PQkpFQ1RTKSAkKGxpYmdzdHBhcnNlX2xhX0RFUEVOREVOQ0lFUykgCisJJChBTV9WX0NDTEQpJChsaWJnc3RwYXJzZV9sYV9MSU5LKSAgJChsaWJnc3RwYXJzZV9sYV9PQkpFQ1RTKSAkKGxpYmdzdHBhcnNlX2xhX0xJQkFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cGFyc2VfbGEtZ3JhbW1hci50YWIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RwYXJzZV9sYS1sZXguX2dzdF9wYXJzZV95eS5QbG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbGliZ3N0cGFyc2VfbGEtbGV4Ll9nc3RfcGFyc2VfeXkubG86IGxleC5fZ3N0X3BhcnNlX3l5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RwYXJzZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cGFyc2VfbGEtbGV4Ll9nc3RfcGFyc2VfeXkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHBhcnNlX2xhLWxleC5fZ3N0X3BhcnNlX3l5LlRwbyAtYyAtbyBsaWJnc3RwYXJzZV9sYS1sZXguX2dzdF9wYXJzZV95eS5sbyBgdGVzdCAtZiAnbGV4Ll9nc3RfcGFyc2VfeXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbGV4Ll9nc3RfcGFyc2VfeXkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cGFyc2VfbGEtbGV4Ll9nc3RfcGFyc2VfeXkuVHBvICQoREVQRElSKS9saWJnc3RwYXJzZV9sYS1sZXguX2dzdF9wYXJzZV95eS5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsZXguX2dzdF9wYXJzZV95eS5jJyBvYmplY3Q9J2xpYmdzdHBhcnNlX2xhLWxleC5fZ3N0X3BhcnNlX3l5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cGFyc2VfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cGFyc2VfbGEtbGV4Ll9nc3RfcGFyc2VfeXkubG8gYHRlc3QgLWYgJ2xleC5fZ3N0X3BhcnNlX3l5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGxleC5fZ3N0X3BhcnNlX3l5LmMKKworbGliZ3N0cGFyc2VfbGEtZ3JhbW1hci50YWIubG86IGdyYW1tYXIudGFiLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RwYXJzZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cGFyc2VfbGEtZ3JhbW1hci50YWIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHBhcnNlX2xhLWdyYW1tYXIudGFiLlRwbyAtYyAtbyBsaWJnc3RwYXJzZV9sYS1ncmFtbWFyLnRhYi5sbyBgdGVzdCAtZiAnZ3JhbW1hci50YWIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3JhbW1hci50YWIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cGFyc2VfbGEtZ3JhbW1hci50YWIuVHBvICQoREVQRElSKS9saWJnc3RwYXJzZV9sYS1ncmFtbWFyLnRhYi5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdncmFtbWFyLnRhYi5jJyBvYmplY3Q9J2xpYmdzdHBhcnNlX2xhLWdyYW1tYXIudGFiLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cGFyc2VfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cGFyc2VfbGEtZ3JhbW1hci50YWIubG8gYHRlc3QgLWYgJ2dyYW1tYXIudGFiLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdyYW1tYXIudGFiLmMKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChIRUFERVJTKQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChDTEVBTkZJTEVTKQorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RMVExJQlJBUklFUyBcCisJbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVMgY3RhZ3MgZGlzdGNsZWFuIFwKKwlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCisJaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCisJaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKKwltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCisJbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAorCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisKKworQW5kcm9pZC5tazogTWFrZWZpbGUuYW0KKwlhbmRyb2dlbml6ZXIgLTpQUk9KRUNUIGdzdHJlYW1lciAtOlNUQVRJQyBsaWJnc3RwYXJzZSAtOlRBR1MgZW5nIGRlYnVnIFwKKwkgLTpSRUxfVE9QICQodG9wX3NyY2RpcikgLTpBQlNfVE9QICQoYWJzX3RvcF9zcmNkaXIpIFwKKwkgLTpTT1VSQ0VTICQobGliZ3N0cGFyc2VfbGFfU09VUkNFUykgJChub2Rpc3RfbGliZ3N0cGFyc2VfbGFfU09VUkNFUykgXAorCSAtOkNGTEFHUyAkKERFRlMpICQobGliZ3N0cGFyc2VfbGFfQ0ZMQUdTKSBcCisJIC06TERGTEFHUyAkKGxpYmdzdHBhcnNlX2xhX0xJQkFERCkgXAorCT4gJEAKKworZ3JhbW1hci50YWIuYyBncmFtbWFyLnRhYi5oOiBncmFtbWFyLnkKKwkkKEFNX1ZfR0VOKSQoQklTT05fUEFUSCkgLWQgLXYgLXBfZ3N0X3BhcnNlX3l5ICQoc3JjZGlyKS9ncmFtbWFyLnkgLW8gZ3JhbW1hci50YWIuYyAmJiBcCisJbXYgZ3JhbW1hci50YWIuYyBncmFtbWFyLnRhYl90bXAuYyAmJiBcCisJZWNobyAnI2lmZGVmIEhBVkVfQ09ORklHX0gnID4gZ3JhbW1hci50YWJfdG1wMi5jICYmIFwKKwllY2hvICcjaW5jbHVkZSA8Y29uZmlnLmg+JyA+PiBncmFtbWFyLnRhYl90bXAyLmMgJiYgXAorCWVjaG8gJyNlbmRpZicgPj4gZ3JhbW1hci50YWJfdG1wMi5jICYmIFwKKwljYXQgZ3JhbW1hci50YWJfdG1wLmMgPj4gZ3JhbW1hci50YWJfdG1wMi5jICYmIFwKKwlybSBncmFtbWFyLnRhYl90bXAuYyAmJiBcCisJbXYgZ3JhbW1hci50YWJfdG1wMi5jIGdyYW1tYXIudGFiLmMKKworbGV4Ll9nc3RfcGFyc2VfeXkuYzogcGFyc2UubCBncmFtbWFyLnRhYi5oCisJJChBTV9WX0dFTikkKEZMRVhfUEFUSCkgLVBfZ3N0X3BhcnNlX3l5ICReICYmIFwKKwltdiBsZXguX2dzdF9wYXJzZV95eS5jIGxleC5fZ3N0X3BhcnNlX3l5X3RtcC5jICYmIFwKKwllY2hvICcjaWZkZWYgSEFWRV9DT05GSUdfSCcgPiBsZXguX2dzdF9wYXJzZV95eV90bXAyLmMgJiYgXAorCWVjaG8gJyNpbmNsdWRlIDxjb25maWcuaD4nID4+IGxleC5fZ3N0X3BhcnNlX3l5X3RtcDIuYyAmJiBcCisJZWNobyAnI2VuZGlmJyA+PiBsZXguX2dzdF9wYXJzZV95eV90bXAyLmMgJiYgXAorCWVjaG8gJ3N0YXRpYyBpbmxpbmUgaW50IF9nc3RfcGFyc2VfeXlnZXRfY29sdW1uICAodm9pZCAqIHl5c2Nhbm5lcik7JyA+PiBsZXguX2dzdF9wYXJzZV95eV90bXAyLmMgJiYgXAorCWVjaG8gJ3N0YXRpYyBpbmxpbmUgdm9pZCBfZ3N0X3BhcnNlX3l5c2V0X2NvbHVtbiAoaW50ICBjb2x1bW5fbm8gLCB2b2lkICogeXlzY2FubmVyKTsnID4+IGxleC5fZ3N0X3BhcnNlX3l5X3RtcDIuYyAmJiBcCisJY2F0IGxleC5fZ3N0X3BhcnNlX3l5X3RtcC5jID4+IGxleC5fZ3N0X3BhcnNlX3l5X3RtcDIuYyAmJiBcCisJcm0gbGV4Ll9nc3RfcGFyc2VfeXlfdG1wLmMgJiYgXAorCW12IGxleC5fZ3N0X3BhcnNlX3l5X3RtcDIuYyBsZXguX2dzdF9wYXJzZV95eS5jCisKKy5OT1RQQVJBTExFTDoKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZ3N0L3BhcnNlL2dyYW1tYXIudGFiLmggYi9nc3QvcGFyc2UvZ3JhbW1hci50YWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWZhMmI2Ci0tLSAvZGV2L251bGwKKysrIGIvZ3N0L3BhcnNlL2dyYW1tYXIudGFiLmgKQEAgLTAsMCArMSw4MCBAQAorCisvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi40LjEuICAqLworCisvKiBTa2VsZXRvbiBpbnRlcmZhY2UgZm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMgaW4gQworICAgCisgICAgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKKyAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCisgICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKKyAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mCisgICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCisgICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCisgICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKKyAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KKyAgIAorICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgorICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLworCisKKy8qIFRva2Vucy4gICovCisjaWZuZGVmIFlZVE9LRU5UWVBFCisjIGRlZmluZSBZWVRPS0VOVFlQRQorICAgLyogUHV0IHRoZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdnZXJzCisgICAgICBrbm93IGFib3V0IHRoZW0uICAqLworICAgZW51bSB5eXRva2VudHlwZSB7CisgICAgIFBBUlNFX1VSTCA9IDI1OCwKKyAgICAgSURFTlRJRklFUiA9IDI1OSwKKyAgICAgQklOUkVGID0gMjYwLAorICAgICBQQURSRUYgPSAyNjEsCisgICAgIFJFRiA9IDI2MiwKKyAgICAgQVNTSUdOTUVOVCA9IDI2MywKKyAgICAgTElOSyA9IDI2NAorICAgfTsKKyNlbmRpZgorCisKKworI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECit0eXBlZGVmIHVuaW9uIFlZU1RZUEUKK3sKKworLyogTGluZSAxNjc2IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDYyMyAiLi9ncmFtbWFyLnkiCisKKyAgICBnY2hhciAqczsKKyAgICBjaGFpbl90ICpjOworICAgIGxpbmtfdCAqbDsKKyAgICBHc3RFbGVtZW50ICplOworICAgIEdTTGlzdCAqcDsKKyAgICBncmFwaF90ICpnOworCisKKworLyogTGluZSAxNjc2IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDcyICJncmFtbWFyLnRhYi5oIgorfSBZWVNUWVBFOworIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKKyMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KKyMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQorI2VuZGlmCisKKworCisKZGlmZiAtLWdpdCBhL2dzdC9wYXJzZS9ncmFtbWFyLnkgYi9nc3QvcGFyc2UvZ3JhbW1hci55Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNzU1Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvcGFyc2UvZ3JhbW1hci55CkBAIC0wLDAgKzEsMTA0NCBAQAorJXsKKyNpbmNsdWRlICIuLi9nc3RfcHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgIi4uL2dzdC1pMThuLWxpYi5oIgorCisjaW5jbHVkZSAiLi4vZ3N0Y29uZmlnLmgiCisjaW5jbHVkZSAiLi4vZ3N0cGFyc2UuaCIKKyNpbmNsdWRlICIuLi9nc3RpbmZvLmgiCisjaW5jbHVkZSAiLi4vZ3N0ZXJyb3IuaCIKKyNpbmNsdWRlICIuLi9nc3RzdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlICIuLi9nc3R1cmkuaCIKKyNpbmNsdWRlICIuLi9nc3R1dGlscy5oIgorI2luY2x1ZGUgIi4uL2dzdHZhbHVlLmgiCisjaW5jbHVkZSAiLi4vZ3N0Y2hpbGRwcm94eS5oIgorI2luY2x1ZGUgInR5cGVzLmgiCisKKy8qIEFsbCBlcnJvciBtZXNzYWdlcyBpbiB0aGlzIGZpbGUgYXJlIHVzZXItdmlzaWJsZSBhbmQgbmVlZCB0byBiZSB0cmFuc2xhdGVkLgorICogRG9uJ3Qgc3RhcnQgdGhlIG1lc3NhZ2Ugd2l0aCBhIGNhcGl0YWwsIGFuZCBkb24ndCBlbmQgdGhlbSB3aXRoIGEgcGVyaW9kLAorICogYXMgdGhleSB3aWxsIGJlIHByZXNlbnRlZCBpbnNpZGUgYSBzZW50ZW5jZS9lcnJvci4KKyAqLworCisjZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAxCisjZGVmaW5lIFlZTEVYX1BBUkFNIHNjYW5uZXIKKworI2RlZmluZSBZWUVOQUJMRV9OTFMgMAorCisjaWZuZGVmIFlZTFRZUEVfSVNfVFJJVklBTAorI2RlZmluZSBZWUxUWVBFX0lTX1RSSVZJQUwgMAorI2VuZGlmCisKK3R5cGVkZWYgdm9pZCogeXlzY2FuX3Q7CisKK2ludCBfZ3N0X3BhcnNlX3l5bGV4ICh2b2lkICogeXlsdmFsX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKTsKK2ludCBfZ3N0X3BhcnNlX3l5bGV4X2luaXQgKHl5c2Nhbl90IHNjYW5uZXIpOworaW50IF9nc3RfcGFyc2VfeXlsZXhfZGVzdHJveSAoeXlzY2FuX3Qgc2Nhbm5lcik7CitzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICogX2dzdF9wYXJzZV95eV9zY2FuX3N0cmluZyAoY2hhciogLCB5eXNjYW5fdCk7Cit2b2lkIF9nc3RfcGFyc2VfeXlwdXNoX2J1ZmZlcl9zdGF0ZSAodm9pZCAqIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCBfZ3N0X3BhcnNlX3l5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKKyNpZmRlZiBfX0dTVF9QQVJTRV9UUkFDRQorc3RhdGljIGd1aW50IF9fc3RyaW5nczsKK3N0YXRpYyBndWludCBfX2xpbmtzOworc3RhdGljIGd1aW50IF9fY2hhaW5zOworZ2NoYXIgKgorX19nc3RfcGFyc2Vfc3RyZHVwIChnY2hhciAqb3JnKQoreworICBnY2hhciAqcmV0OworICBfX3N0cmluZ3MrKzsKKyAgcmV0ID0gZ19zdHJkdXAgKG9yZyk7CisgIC8qIGdfcHJpbnQgKCJBTExPQ0FURUQgU1RSICAgKCUzdSk6ICVwICVzXG4iLCBfX3N0cmluZ3MsIHJldCwgcmV0KTsgKi8KKyAgcmV0dXJuIHJldDsKK30KK3ZvaWQKK19fZ3N0X3BhcnNlX3N0cmZyZWUgKGdjaGFyICpzdHIpCit7CisgIGlmIChzdHIpIHsKKyAgICAvKiBnX3ByaW50ICgiRlJFRUlORyBTVFIgICAgICglM3UpOiAlcCAlc1xuIiwgX19zdHJpbmdzIC0gMSwgc3RyLCBzdHIpOyAqLworICAgIGdfZnJlZSAoc3RyKTsKKyAgICBnX3JldHVybl9pZl9mYWlsIChfX3N0cmluZ3MgPiAwKTsKKyAgICBfX3N0cmluZ3MtLTsKKyAgfQorfQorbGlua190ICpfX2dzdF9wYXJzZV9saW5rX25ldyAoKQoreworICBsaW5rX3QgKnJldDsKKyAgX19saW5rcysrOworICByZXQgPSBnX3NsaWNlX25ldzAgKGxpbmtfdCk7CisgIC8qIGdfcHJpbnQgKCJBTExPQ0FURUQgTElOSyAgKCUzdSk6ICVwXG4iLCBfX2xpbmtzLCByZXQpOyAqLworICByZXR1cm4gcmV0OworfQordm9pZAorX19nc3RfcGFyc2VfbGlua19mcmVlIChsaW5rX3QgKmRhdGEpCit7CisgIGlmIChkYXRhKSB7CisgICAgLyogZ19wcmludCAoIkZSRUVJTkcgTElOSyAgICAoJTN1KTogJXBcbiIsIF9fbGlua3MgLSAxLCBkYXRhKTsgKi8KKyAgICBnX3NsaWNlX2ZyZWUgKGxpbmtfdCwgZGF0YSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCAoX19saW5rcyA+IDApOworICAgIF9fbGlua3MtLTsKKyAgfQorfQorY2hhaW5fdCAqCitfX2dzdF9wYXJzZV9jaGFpbl9uZXcgKCkKK3sKKyAgY2hhaW5fdCAqcmV0OworICBfX2NoYWlucysrOworICByZXQgPSBnX3NsaWNlX25ldzAgKGNoYWluX3QpOworICAvKiBnX3ByaW50ICgiQUxMT0NBVEVEIENIQUlOICglM3UpOiAlcFxuIiwgX19jaGFpbnMsIHJldCk7ICovCisgIHJldHVybiByZXQ7Cit9Cit2b2lkCitfX2dzdF9wYXJzZV9jaGFpbl9mcmVlIChjaGFpbl90ICpkYXRhKQoreworICAvKiBnX3ByaW50ICgiRlJFRUlORyBDSEFJTiAgICglM3UpOiAlcFxuIiwgX19jaGFpbnMgLSAxLCBkYXRhKTsgKi8KKyAgZ19zbGljZV9mcmVlIChjaGFpbl90LCBkYXRhKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoX19jaGFpbnMgPiAwKTsKKyAgX19jaGFpbnMtLTsKK30KKworI2VuZGlmIC8qIF9fR1NUX1BBUlNFX1RSQUNFICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgZ2NoYXIgKnNyY19wYWQ7CisgIGdjaGFyICpzaW5rX3BhZDsKKyAgR3N0RWxlbWVudCAqc2luazsKKyAgR3N0Q2FwcyAqY2FwczsKKyAgZ3Vsb25nIHNpZ25hbF9pZDsKK30gRGVsYXllZExpbms7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgZ2NoYXIgKm5hbWU7CisgIGdjaGFyICp2YWx1ZV9zdHI7CisgIGd1bG9uZyBzaWduYWxfaWQ7Cit9IERlbGF5ZWRTZXQ7CisKKy8qKiogZGVmaW5lIFNFVF9FUlJPUiBtYWNyby9mdW5jdGlvbiAqLworCisjaWZkZWYgR19IQVZFX0lTT19WQVJBUkdTCisKKyMgIGRlZmluZSBTRVRfRVJST1IoZXJyb3IsIHR5cGUsIC4uLikgXAorR19TVE1UX1NUQVJUIHsgXAorICBHU1RfQ0FUX0VSUk9SIChHU1RfQ0FUX1BJUEVMSU5FLCBfX1ZBX0FSR1NfXyk7IFwKKyAgaWYgKChlcnJvcikgJiYgISooZXJyb3IpKSB7IFwKKyAgICBnX3NldF9lcnJvciAoKGVycm9yKSwgR1NUX1BBUlNFX0VSUk9SLCAodHlwZSksIF9fVkFfQVJHU19fKTsgXAorICB9IFwKK30gR19TVE1UX0VORAorCisjZWxpZiBkZWZpbmVkKEdfSEFWRV9HTlVDX1ZBUkFSR1MpCisKKyMgIGRlZmluZSBTRVRfRVJST1IoZXJyb3IsIHR5cGUsIGFyZ3MuLi4pIFwKK0dfU1RNVF9TVEFSVCB7IFwKKyAgR1NUX0NBVF9FUlJPUiAoR1NUX0NBVF9QSVBFTElORSwgYXJncyApOyBcCisgIGlmICgoZXJyb3IpICYmICEqKGVycm9yKSkgeyBcCisgICAgZ19zZXRfZXJyb3IgKChlcnJvciksIEdTVF9QQVJTRV9FUlJPUiwgKHR5cGUpLCBhcmdzICk7IFwKKyAgfSBcCit9IEdfU1RNVF9FTkQKKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkCitTRVRfRVJST1IgKEdFcnJvciAqKmVycm9yLCBnaW50IHR5cGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICBpZiAoZXJyb3IpIHsKKyAgICBpZiAoKmVycm9yKSB7CisgICAgICBnX3dhcm5pbmcgKCJlcnJvciB3aGlsZSBwYXJzaW5nIik7CisgICAgfSBlbHNlIHsKKyAgICAgIHZhX2xpc3QgdmFyYXJnczsKKyAgICAgIGNoYXIgKnN0cmluZzsKKworICAgICAgdmFfc3RhcnQgKHZhcmFyZ3MsIGZvcm1hdCk7CisgICAgICBzdHJpbmcgPSBnX3N0cmR1cF92cHJpbnRmIChmb3JtYXQsIHZhcmFyZ3MpOworICAgICAgdmFfZW5kICh2YXJhcmdzKTsKKworICAgICAgZ19zZXRfZXJyb3IgKGVycm9yLCBHU1RfUEFSU0VfRVJST1IsIHR5cGUsIHN0cmluZyk7CisKKyAgICAgIGdfZnJlZSAoc3RyaW5nKTsKKyAgICB9CisgIH0KK30KKworI2VuZGlmIC8qIEdfSEFWRV9JU09fVkFSQVJHUyAqLworCisvKioqIGRlZmluZSBZWVBSSU5URiBtYWNyby9mdW5jdGlvbiBpZiB3ZSdyZSBkZWJ1Z2dpbmcgKi8KKworLyogYmlzb24gMS4zNSBjYWxscyB0aGlzIG1hY3JvIHdpdGggc2lkZSBlZmZlY3RzLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUKKyAgIHNpZGUgZWZmZWN0cyB3b3JrIC0gY3JhcHB5IGJpc29uICovCisKKyNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCisjICBkZWZpbmUgWVlERUJVRyAxCisKKyMgIGlmZGVmIEdfSEFWRV9JU09fVkFSQVJHUworCisvKiAjICBkZWZpbmUgWVlGUFJJTlRGKGEsIC4uLikgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9QSVBFTElORSwgX19WQV9BUkdTX18pICovCisjICAgIGRlZmluZSBZWUZQUklOVEYoYSwgLi4uKSBcCitHX1NUTVRfU1RBUlQgeyBcCisgICAgIEdTVF9DQVRfTE9HIChHU1RfQ0FUX1BJUEVMSU5FLCBfX1ZBX0FSR1NfXyk7IFwKK30gR19TVE1UX0VORAorCisjICBlbGlmIGRlZmluZWQoR19IQVZFX0dOVUNfVkFSQVJHUykKKworIyAgICBkZWZpbmUgWVlGUFJJTlRGKGEsIGFyZ3MuLi4pIFwKK0dfU1RNVF9TVEFSVCB7IFwKKyAgICAgR1NUX0NBVF9MT0cgKEdTVF9DQVRfUElQRUxJTkUsIGFyZ3MpOyBcCit9IEdfU1RNVF9FTkQKKworIyAgZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQKK1lZUFJJTlRGKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IHZhcmFyZ3M7CisgIGdjaGFyICp0ZW1wOworCisgIHZhX3N0YXJ0ICh2YXJhcmdzLCBmb3JtYXQpOworICB0ZW1wID0gZ19zdHJkdXBfdnByaW50ZiAoZm9ybWF0LCB2YXJhcmdzKTsKKyAgR1NUX0NBVF9MT0cgKEdTVF9DQVRfUElQRUxJTkUsICIlcyIsIHRlbXApOworICBnX2ZyZWUgKHRlbXApOworICB2YV9lbmQgKHZhcmFyZ3MpOworfQorCisjICBlbmRpZiAvKiBHX0hBVkVfSVNPX1ZBUkFSR1MgKi8KKworI2VuZGlmIC8qIEdTVF9ESVNBQkxFX0dTVF9ERUJVRyAqLworCisjZGVmaW5lIEFERF9NSVNTSU5HX0VMRU1FTlQoZ3JhcGgsbmFtZSkgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgoZ3JhcGgpLT5jdHgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChncmFwaCktPmN0eC0+bWlzc2luZ19lbGVtZW50cyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZ19saXN0X2FwcGVuZCAoKGdyYXBoKS0+Y3R4LT5taXNzaW5nX2VsZW1lbnRzLCBnX3N0cmR1cCAobmFtZSkpOyAgXAorICAgIH0gfSBHX1NUTVRfRU5ECisKK3N0YXRpYyB2b2lkCitub19mcmVlIChnY29uc3Rwb2ludGVyIGZvbykKK3sKKyAgLyogZG8gbm90aGluZyAqLworfQorCisjZGVmaW5lIEdTVF9CSU5fTUFLRShyZXMsIHR5cGUsIGNoYWludmFsLCBhc3NpZ24sIHR5cGVfc3RyaW5nX2ZyZWVfZnVuYykgXAorR19TVE1UX1NUQVJUIHsgXAorICBjaGFpbl90ICpjaGFpbiA9IGNoYWludmFsOyBcCisgIEdTTGlzdCAqd2FsazsgXAorICBHc3RCaW4gKmJpbiA9IChHc3RCaW4gKikgZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICh0eXBlLCBOVUxMKTsgXAorICBpZiAoIWNoYWluKSB7IFwKKyAgICBTRVRfRVJST1IgKGdyYXBoLT5lcnJvciwgR1NUX1BBUlNFX0VSUk9SX0VNUFRZX0JJTiwgXAorICAgICAgICBfKCJzcGVjaWZpZWQgZW1wdHkgYmluIFwiJXNcIiwgbm90IGFsbG93ZWQiKSwgdHlwZSk7IFwKKyAgICBnX3NsaXN0X2ZvcmVhY2ggKGFzc2lnbiwgKEdGdW5jKSBnc3RfcGFyc2Vfc3RyZnJlZSwgTlVMTCk7IFwKKyAgICBnX3NsaXN0X2ZyZWUgKGFzc2lnbik7IFwKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChiaW4pOyBcCisgICAgdHlwZV9zdHJpbmdfZnJlZV9mdW5jICh0eXBlKTsgLyogTmVlZCB0byBjbGVhbiB1cCB0aGUgc3RyaW5nICovIFwKKyAgICBZWUVSUk9SOyBcCisgIH0gZWxzZSBpZiAoIWJpbikgeyBcCisgICAgQUREX01JU1NJTkdfRUxFTUVOVChncmFwaCwgdHlwZSk7IFwKKyAgICBTRVRfRVJST1IgKGdyYXBoLT5lcnJvciwgR1NUX1BBUlNFX0VSUk9SX05PX1NVQ0hfRUxFTUVOVCwgXAorICAgICAgICBfKCJubyBiaW4gXCIlc1wiLCBza2lwcGluZyIpLCB0eXBlKTsgXAorICAgIGdfc2xpc3RfZm9yZWFjaCAoYXNzaWduLCAoR0Z1bmMpIGdzdF9wYXJzZV9zdHJmcmVlLCBOVUxMKTsgXAorICAgIGdfc2xpc3RfZnJlZSAoYXNzaWduKTsgXAorICAgIHJlcyA9IGNoYWluOyBcCisgIH0gZWxzZSB7IFwKKyAgICBmb3IgKHdhbGsgPSBjaGFpbi0+ZWxlbWVudHM7IHdhbGs7IHdhbGsgPSB3YWxrLT5uZXh0ICkgXAorICAgICAgZ3N0X2Jpbl9hZGQgKGJpbiwgR1NUX0VMRU1FTlQgKHdhbGstPmRhdGEpKTsgXAorICAgIGdfc2xpc3RfZnJlZSAoY2hhaW4tPmVsZW1lbnRzKTsgXAorICAgIGNoYWluLT5lbGVtZW50cyA9IGdfc2xpc3RfcHJlcGVuZCAoTlVMTCwgYmluKTsgXAorICAgIHJlcyA9IGNoYWluOyBcCisgICAgLyogc2V0IHRoZSBwcm9wZXJ0aWVzIG5vdyAqLyBcCisgICAgZm9yICh3YWxrID0gYXNzaWduOyB3YWxrOyB3YWxrID0gd2Fsay0+bmV4dCkgXAorICAgICAgZ3N0X3BhcnNlX2VsZW1lbnRfc2V0ICgoZ2NoYXIgKikgd2Fsay0+ZGF0YSwgR1NUX0VMRU1FTlQgKGJpbiksIGdyYXBoKTsgXAorICAgIGdfc2xpc3RfZnJlZSAoYXNzaWduKTsgXAorICB9IFwKK30gR19TVE1UX0VORAorCisjZGVmaW5lIE1BS0VfTElOSyhsaW5rLCBfc3JjLCBfc3JjX25hbWUsIF9zcmNfcGFkcywgX3NpbmssIF9zaW5rX25hbWUsIF9zaW5rX3BhZHMpIFwKK0dfU1RNVF9TVEFSVCB7IFwKKyAgbGluayA9IGdzdF9wYXJzZV9saW5rX25ldyAoKTsgXAorICBsaW5rLT5zcmMgPSBfc3JjOyBcCisgIGxpbmstPnNpbmsgPSBfc2luazsgXAorICBsaW5rLT5zcmNfbmFtZSA9IF9zcmNfbmFtZTsgXAorICBsaW5rLT5zaW5rX25hbWUgPSBfc2lua19uYW1lOyBcCisgIGxpbmstPnNyY19wYWRzID0gX3NyY19wYWRzOyBcCisgIGxpbmstPnNpbmtfcGFkcyA9IF9zaW5rX3BhZHM7IFwKKyAgbGluay0+Y2FwcyA9IE5VTEw7IFwKK30gR19TVE1UX0VORAorCisjZGVmaW5lIE1BS0VfUkVGKGxpbmssIF9zcmMsIF9wYWRzKSBcCitHX1NUTVRfU1RBUlQgeyBcCisgIGdjaGFyICpwYWRuYW1lID0gX3NyYzsgXAorICBHU0xpc3QgKnBhZHMgPSBfcGFkczsgXAorICBpZiAocGFkbmFtZSkgeyBcCisgICAgd2hpbGUgKCpwYWRuYW1lICE9ICcuJykgcGFkbmFtZSsrOyBcCisgICAgKnBhZG5hbWUgPSAnXDAnOyBcCisgICAgcGFkbmFtZSsrOyBcCisgICAgaWYgKCpwYWRuYW1lICE9ICdcMCcpIFwKKyAgICAgIHBhZHMgPSBnX3NsaXN0X3ByZXBlbmQgKHBhZHMsIGdzdF9wYXJzZV9zdHJkdXAgKHBhZG5hbWUpKTsgXAorICB9IFwKKyAgTUFLRV9MSU5LIChsaW5rLCBOVUxMLCBfc3JjLCBwYWRzLCBOVUxMLCBOVUxMLCBOVUxMKTsgXAorfSBHX1NUTVRfRU5ECisKK3N0YXRpYyB2b2lkCitnc3RfcGFyc2VfZnJlZV9kZWxheWVkX3NldCAoRGVsYXllZFNldCAqc2V0KQoreworICBnX2ZyZWUoc2V0LT5uYW1lKTsKKyAgZ19mcmVlKHNldC0+dmFsdWVfc3RyKTsKKyAgZ19zbGljZV9mcmVlKERlbGF5ZWRTZXQsIHNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGdzdF9wYXJzZV9uZXdfY2hpbGQoR3N0Q2hpbGRQcm94eSAqY2hpbGRfcHJveHksIEdPYmplY3QgKm9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSk7CisKK3N0YXRpYyB2b2lkCitnc3RfcGFyc2VfYWRkX2RlbGF5ZWRfc2V0IChHc3RFbGVtZW50ICplbGVtZW50LCBnY2hhciAqbmFtZSwgZ2NoYXIgKnZhbHVlX3N0cikKK3sKKyAgRGVsYXllZFNldCAqZGF0YSA9IGdfc2xpY2VfbmV3MCAoRGVsYXllZFNldCk7CisKKyAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1BJUEVMSU5FLCBlbGVtZW50LCAiZGVsYXlpbmcgcHJvcGVydHkgc2V0ICVzIHRvICVzIiwKKyAgICBuYW1lLCB2YWx1ZV9zdHIpOworCisgIGRhdGEtPm5hbWUgPSBnX3N0cmR1cChuYW1lKTsKKyAgZGF0YS0+dmFsdWVfc3RyID0gZ19zdHJkdXAodmFsdWVfc3RyKTsKKyAgZGF0YS0+c2lnbmFsX2lkID0gZ19zaWduYWxfY29ubmVjdF9kYXRhKGVsZW1lbnQsICJjaGlsZC1hZGRlZCIsCisgICAgICBHX0NBTExCQUNLIChnc3RfcGFyc2VfbmV3X2NoaWxkKSwgZGF0YSwgKEdDbG9zdXJlTm90aWZ5KQorICAgICAgZ3N0X3BhcnNlX2ZyZWVfZGVsYXllZF9zZXQsIChHQ29ubmVjdEZsYWdzKSAwKTsKKworICAvKiBGSVhNRTogd2Ugd291bGQgbmVlZCB0byBsaXN0ZW4gb24gYWxsIGludGVybWVkaWF0ZSBiaW5zIHRvbyAqLworICBpZiAoR1NUX0lTX0JJTiAoZWxlbWVudCkpIHsKKyAgICBnY2hhciAqKm5hbWVzLCAqKmN1cnJlbnQ7CisgICAgR3N0RWxlbWVudCAqcGFyZW50LCAqY2hpbGQ7CisKKyAgICBjdXJyZW50ID0gbmFtZXMgPSBnX3N0cnNwbGl0IChuYW1lLCAiOjoiLCAtMSk7CisgICAgcGFyZW50ID0gZ3N0X2Jpbl9nZXRfYnlfbmFtZSAoR1NUX0JJTl9DQVNUIChlbGVtZW50KSwgY3VycmVudFswXSk7CisgICAgY3VycmVudCsrOworICAgIHdoaWxlIChwYXJlbnQgJiYgY3VycmVudFswXSkgeworICAgICAgY2hpbGQgPSBnc3RfYmluX2dldF9ieV9uYW1lIChHU1RfQklOIChwYXJlbnQpLCBjdXJyZW50WzBdKTsKKyAgICAgIGlmICghY2hpbGQgJiYgY3VycmVudFsxXSkgeworICAgICAgICBjaGFyICpzdWJfbmFtZSA9IGdfc3Ryam9pbnYgKCI6OiIsICZjdXJyZW50WzBdKTsKKworICAgICAgICBnc3RfcGFyc2VfYWRkX2RlbGF5ZWRfc2V0KHBhcmVudCwgc3ViX25hbWUsIHZhbHVlX3N0cik7CisgICAgICAgIGdfZnJlZSAoc3ViX25hbWUpOworICAgICAgfQorICAgICAgcGFyZW50ID0gY2hpbGQ7CisgICAgICBjdXJyZW50Kys7CisgICAgfQorICAgIGdfc3RyZnJlZXYgKG5hbWVzKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZCBnc3RfcGFyc2VfbmV3X2NoaWxkKEdzdENoaWxkUHJveHkgKmNoaWxkX3Byb3h5LCBHT2JqZWN0ICpvYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpCit7CisgIERlbGF5ZWRTZXQgKnNldCA9IChEZWxheWVkU2V0ICopIGRhdGE7CisgIEdQYXJhbVNwZWMgKnBzcGVjOworICBHVmFsdWUgdiA9IHsgMCwgfTsKKyAgR3N0T2JqZWN0ICp0YXJnZXQgPSBOVUxMOworICBHVHlwZSB2YWx1ZV90eXBlOworCisgIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9QSVBFTElORSwgY2hpbGRfcHJveHksICJuZXcgY2hpbGQgJXMsIGNoZWNraW5nIHByb3BlcnR5ICVzIiwKKyAgICAgIEdTVF9PQkpFQ1RfTkFNRShvYmplY3QpLCBzZXQtPm5hbWUpOworCisgIGlmIChnc3RfY2hpbGRfcHJveHlfbG9va3VwIChHU1RfT0JKRUNUIChjaGlsZF9wcm94eSksIHNldC0+bmFtZSwgJnRhcmdldCwgJnBzcGVjKSkgeworICAgIGdib29sZWFuIGdvdF92YWx1ZSA9IEZBTFNFOworCisgICAgdmFsdWVfdHlwZSA9IHBzcGVjLT52YWx1ZV90eXBlOworCisgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1BJUEVMSU5FLCBjaGlsZF9wcm94eSwgInBhcnNpbmcgZGVsYXllZCBwcm9wZXJ0eSAlcyBhcyBhICVzIGZyb20gJXMiLAorICAgICAgcHNwZWMtPm5hbWUsIGdfdHlwZV9uYW1lICh2YWx1ZV90eXBlKSwgc2V0LT52YWx1ZV9zdHIpOworICAgIGdfdmFsdWVfaW5pdCAoJnYsIHZhbHVlX3R5cGUpOworICAgIGlmIChnc3RfdmFsdWVfZGVzZXJpYWxpemUgKCZ2LCBzZXQtPnZhbHVlX3N0cikpCisgICAgICBnb3RfdmFsdWUgPSBUUlVFOworICAgIGVsc2UgaWYgKGdfdHlwZV9pc19hICh2YWx1ZV90eXBlLCBHU1RfVFlQRV9FTEVNRU5UKSkgeworICAgICAgIEdzdEVsZW1lbnQgKmJpbjsKKworICAgICAgIGJpbiA9IGdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbiAoc2V0LT52YWx1ZV9zdHIsIFRSVUUsIE5VTEwpOworICAgICAgIGlmIChiaW4pIHsKKyAgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCAoJnYsIGJpbik7CisgICAgICAgICBnb3RfdmFsdWUgPSBUUlVFOworICAgICAgIH0KKyAgICB9CisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0IChjaGlsZF9wcm94eSwgc2V0LT5zaWduYWxfaWQpOworICAgIGlmICghZ290X3ZhbHVlKQorICAgICAgZ290byBlcnJvcjsKKyAgICBnX29iamVjdF9zZXRfcHJvcGVydHkgKEdfT0JKRUNUICh0YXJnZXQpLCBwc3BlYy0+bmFtZSwgJnYpOworICB9IGVsc2UgeworICAgIGNvbnN0IGdjaGFyICpvYmpfbmFtZSA9IEdTVF9PQkpFQ1RfTkFNRShvYmplY3QpOworICAgIGdpbnQgbGVuID0gc3RybGVuIChvYmpfbmFtZSk7CisKKyAgICAvKiBkbyBhIGRlbGF5ZWQgc2V0ICovCisgICAgaWYgKChzdHJsZW4gKHNldC0+bmFtZSkgPiAobGVuICsgMikpICYmICFzdHJuY21wIChzZXQtPm5hbWUsIG9ial9uYW1lLCBsZW4pICYmICFzdHJuY21wICgmc2V0LT5uYW1lW2xlbl0sICI6OiIsIDIpKSB7CisgICAgICBnc3RfcGFyc2VfYWRkX2RlbGF5ZWRfc2V0IChHU1RfRUxFTUVOVChjaGlsZF9wcm94eSksIHNldC0+bmFtZSwgc2V0LT52YWx1ZV9zdHIpOworICAgIH0KKyAgfQorCitvdXQ6CisgIGlmIChHX0lTX1ZBTFVFICgmdikpCisgICAgZ192YWx1ZV91bnNldCAoJnYpOworICBpZiAodGFyZ2V0KQorICAgIGdzdF9vYmplY3RfdW5yZWYgKHRhcmdldCk7CisgIHJldHVybjsKKworZXJyb3I6CisgIEdTVF9DQVRfRVJST1IgKEdTVF9DQVRfUElQRUxJTkUsICJjb3VsZCBub3Qgc2V0IHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiIsCisJIHBzcGVjLT5uYW1lLCBHU1RfRUxFTUVOVF9OQU1FICh0YXJnZXQpKTsKKyAgZ290byBvdXQ7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfcGFyc2VfZWxlbWVudF9zZXQgKGdjaGFyICp2YWx1ZSwgR3N0RWxlbWVudCAqZWxlbWVudCwgZ3JhcGhfdCAqZ3JhcGgpCit7CisgIEdQYXJhbVNwZWMgKnBzcGVjOworICBnY2hhciAqcG9zID0gdmFsdWU7CisgIEdWYWx1ZSB2ID0geyAwLCB9OworICBHc3RPYmplY3QgKnRhcmdldCA9IE5VTEw7CisgIEdUeXBlIHZhbHVlX3R5cGU7CisKKyAgLyogZG8gbm90aGluZyBpZiBhc3NpZ25tZW50IGlzIGZvciBtaXNzaW5nIGVsZW1lbnQgKi8KKyAgaWYgKGVsZW1lbnQgPT0gTlVMTCkKKyAgICBnb3RvIG91dDsKKworICAvKiBwYXJzZSB0aGUgc3RyaW5nLCBzbyB0aGUgcHJvcGVydHkgbmFtZSBpcyBudWxsLXRlcm1pbmF0ZWQgYW4gcG9zIHBvaW50cworICAgICB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSB2YWx1ZSAqLworICB3aGlsZSAoIWdfYXNjaWlfaXNzcGFjZSAoKnBvcykgJiYgKCpwb3MgIT0gJz0nKSkgcG9zKys7CisgIGlmICgqcG9zID09ICc9JykgeworICAgICpwb3MgPSAnXDAnOworICB9IGVsc2UgeworICAgICpwb3MgPSAnXDAnOworICAgIHBvcysrOworICAgIHdoaWxlIChnX2FzY2lpX2lzc3BhY2UgKCpwb3MpKSBwb3MrKzsKKyAgfQorICBwb3MrKzsKKyAgd2hpbGUgKGdfYXNjaWlfaXNzcGFjZSAoKnBvcykpIHBvcysrOworICBpZiAoKnBvcyA9PSAnIicpIHsKKyAgICBwb3MrKzsKKyAgICBwb3Nbc3RybGVuIChwb3MpIC0gMV0gPSAnXDAnOworICB9CisgIGdzdF9wYXJzZV91bmVzY2FwZSAocG9zKTsKKworICBpZiAoZ3N0X2NoaWxkX3Byb3h5X2xvb2t1cCAoR1NUX09CSkVDVCAoZWxlbWVudCksIHZhbHVlLCAmdGFyZ2V0LCAmcHNwZWMpKSB7CisgICAgZ2Jvb2xlYW4gZ290X3ZhbHVlID0gRkFMU0U7CisKKyAgICB2YWx1ZV90eXBlID0gcHNwZWMtPnZhbHVlX3R5cGU7CisKKyAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKEdTVF9DQVRfUElQRUxJTkUsIGVsZW1lbnQsICJwYXJzaW5nIHByb3BlcnR5ICVzIGFzIGEgJXMiLCBwc3BlYy0+bmFtZSwKKyAgICAgIGdfdHlwZV9uYW1lICh2YWx1ZV90eXBlKSk7CisgICAgZ192YWx1ZV9pbml0ICgmdiwgdmFsdWVfdHlwZSk7CisgICAgaWYgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZSAoJnYsIHBvcykpCisgICAgICBnb3RfdmFsdWUgPSBUUlVFOworICAgIGVsc2UgaWYgKGdfdHlwZV9pc19hICh2YWx1ZV90eXBlLCBHU1RfVFlQRV9FTEVNRU5UKSkgeworICAgICAgIEdzdEVsZW1lbnQgKmJpbjsKKworICAgICAgIGJpbiA9IGdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbiAocG9zLCBUUlVFLCBOVUxMKTsKKyAgICAgICBpZiAoYmluKSB7CisgICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QgKCZ2LCBiaW4pOworICAgICAgICAgZ290X3ZhbHVlID0gVFJVRTsKKyAgICAgICB9CisgICAgfQorICAgIGlmICghZ290X3ZhbHVlKQorICAgICAgZ290byBlcnJvcjsKKyAgICBnX29iamVjdF9zZXRfcHJvcGVydHkgKEdfT0JKRUNUICh0YXJnZXQpLCBwc3BlYy0+bmFtZSwgJnYpOworICB9IGVsc2UgeworICAgIC8qIGRvIGEgZGVsYXllZCBzZXQgKi8KKyAgICBpZiAoR1NUX0lTX0NISUxEX1BST1hZIChlbGVtZW50KSkgeworICAgICAgZ3N0X3BhcnNlX2FkZF9kZWxheWVkX3NldCAoZWxlbWVudCwgdmFsdWUsIHBvcyk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgU0VUX0VSUk9SIChncmFwaC0+ZXJyb3IsIEdTVF9QQVJTRV9FUlJPUl9OT19TVUNIX1BST1BFUlRZLCBcCisgICAgICAgICAgXygibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIiksIHZhbHVlLCBcCisgICAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOworICAgIH0KKyAgfQorCitvdXQ6CisgIGdzdF9wYXJzZV9zdHJmcmVlICh2YWx1ZSk7CisgIGlmIChHX0lTX1ZBTFVFICgmdikpCisgICAgZ192YWx1ZV91bnNldCAoJnYpOworICBpZiAodGFyZ2V0KQorICAgIGdzdF9vYmplY3RfdW5yZWYgKHRhcmdldCk7CisgIHJldHVybjsKKworZXJyb3I6CisgIFNFVF9FUlJPUiAoZ3JhcGgtPmVycm9yLCBHU1RfUEFSU0VfRVJST1JfQ09VTERfTk9UX1NFVF9QUk9QRVJUWSwKKyAgICAgICAgIF8oImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIpLAorCSB2YWx1ZSwgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCksIHBvcyk7CisgIGdvdG8gb3V0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2dzdF9wYXJzZV9mcmVlX2xpbmsgKGxpbmtfdCAqbGluaykKK3sKKyAgZ3N0X3BhcnNlX3N0cmZyZWUgKGxpbmstPnNyY19uYW1lKTsKKyAgZ3N0X3BhcnNlX3N0cmZyZWUgKGxpbmstPnNpbmtfbmFtZSk7CisgIGdfc2xpc3RfZm9yZWFjaCAobGluay0+c3JjX3BhZHMsIChHRnVuYykgZ3N0X3BhcnNlX3N0cmZyZWUsIE5VTEwpOworICBnX3NsaXN0X2ZvcmVhY2ggKGxpbmstPnNpbmtfcGFkcywgKEdGdW5jKSBnc3RfcGFyc2Vfc3RyZnJlZSwgTlVMTCk7CisgIGdfc2xpc3RfZnJlZSAobGluay0+c3JjX3BhZHMpOworICBnX3NsaXN0X2ZyZWUgKGxpbmstPnNpbmtfcGFkcyk7CisgIGlmIChsaW5rLT5jYXBzKSBnc3RfY2Fwc191bnJlZiAobGluay0+Y2Fwcyk7CisgIGdzdF9wYXJzZV9saW5rX2ZyZWUgKGxpbmspOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3BhcnNlX2ZyZWVfZGVsYXllZF9saW5rIChEZWxheWVkTGluayAqbGluaykKK3sKKyAgZ19mcmVlIChsaW5rLT5zcmNfcGFkKTsKKyAgZ19mcmVlIChsaW5rLT5zaW5rX3BhZCk7CisgIGlmIChsaW5rLT5jYXBzKSBnc3RfY2Fwc191bnJlZiAobGluay0+Y2Fwcyk7CisgIGdfc2xpY2VfZnJlZSAoRGVsYXllZExpbmssIGxpbmspOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3BhcnNlX2ZvdW5kX3BhZCAoR3N0RWxlbWVudCAqc3JjLCBHc3RQYWQgKnBhZCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgRGVsYXllZExpbmsgKmxpbmsgPSBkYXRhOworCisgIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9QSVBFTElORSwgInRyeWluZyBkZWxheWVkIGxpbmtpbmcgJXM6JXMgdG8gJXM6JXMiLAorICAgICAgICAgICAgICAgIEdTVF9TVFJfTlVMTCAoR1NUX0VMRU1FTlRfTkFNRSAoc3JjKSksIEdTVF9TVFJfTlVMTCAobGluay0+c3JjX3BhZCksCisgICAgICAgICAgICAgICAgR1NUX1NUUl9OVUxMIChHU1RfRUxFTUVOVF9OQU1FIChsaW5rLT5zaW5rKSksIEdTVF9TVFJfTlVMTCAobGluay0+c2lua19wYWQpKTsKKworICBpZiAoZ3N0X2VsZW1lbnRfbGlua19wYWRzX2ZpbHRlcmVkIChzcmMsIGxpbmstPnNyY19wYWQsIGxpbmstPnNpbmssCisgICAgICBsaW5rLT5zaW5rX3BhZCwgbGluay0+Y2FwcykpIHsKKyAgICAvKiBkbyB0aGlzIGhlcmUsIHdlIGRvbid0IHdhbnQgdG8gZ2V0IGFueSBwcm9ibGVtcyBsYXRlciBvbiB3aGVuCisgICAgICogdW5sb2NraW5nIHN0YXRlcyAqLworICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfUElQRUxJTkUsICJkZWxheWVkIGxpbmtpbmcgJXM6JXMgdG8gJXM6JXMgd29ya2VkIiwKKyAgICAgICAgICAgICAgIAkgICBHU1RfU1RSX05VTEwgKEdTVF9FTEVNRU5UX05BTUUgKHNyYykpLCBHU1RfU1RSX05VTEwgKGxpbmstPnNyY19wYWQpLAorICAgICAgICAgICAgICAgCSAgIEdTVF9TVFJfTlVMTCAoR1NUX0VMRU1FTlRfTkFNRSAobGluay0+c2luaykpLCBHU1RfU1RSX05VTEwgKGxpbmstPnNpbmtfcGFkKSk7CisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0IChzcmMsIGxpbmstPnNpZ25hbF9pZCk7CisgIH0KK30KKworLyogYm90aCBwYWRuYW1lcyBhbmQgdGhlIGNhcHMgbWF5IGJlIE5VTEwgKi8KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3BhcnNlX3BlcmZvcm1fZGVsYXllZF9saW5rIChHc3RFbGVtZW50ICpzcmMsIGNvbnN0IGdjaGFyICpzcmNfcGFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RFbGVtZW50ICpzaW5rLCBjb25zdCBnY2hhciAqc2lua19wYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENhcHMgKmNhcHMpCit7CisgIEdMaXN0ICp0ZW1wbHMgPSBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlX2xpc3QgKAorICAgICAgR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChzcmMpKTsKKworICBmb3IgKDsgdGVtcGxzOyB0ZW1wbHMgPSB0ZW1wbHMtPm5leHQpIHsKKyAgICBHc3RQYWRUZW1wbGF0ZSAqdGVtcGwgPSAoR3N0UGFkVGVtcGxhdGUgKikgdGVtcGxzLT5kYXRhOworICAgIGlmICgoR1NUX1BBRF9URU1QTEFURV9ESVJFQ1RJT04gKHRlbXBsKSA9PSBHU1RfUEFEX1NSQykgJiYKKyAgICAgICAgKEdTVF9QQURfVEVNUExBVEVfUFJFU0VOQ0UodGVtcGwpID09IEdTVF9QQURfU09NRVRJTUVTKSkKKyAgICB7CisgICAgICBEZWxheWVkTGluayAqZGF0YSA9IGdfc2xpY2VfbmV3IChEZWxheWVkTGluayk7CisKKyAgICAgIC8qIFRPRE86IG1heWJlIHdlIHNob3VsZCBjaGVjayBpZiBzcmNfcGFkIG1hdGNoZXMgdGhpcyB0ZW1wbGF0ZSdzIG5hbWVzICovCisKKyAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfUElQRUxJTkUsICJ0cnlpbmcgZGVsYXllZCBsaW5rICVzOiVzIHRvICVzOiVzIiwKKyAgICAgICAgICAgICAgICAgICAgIEdTVF9TVFJfTlVMTCAoR1NUX0VMRU1FTlRfTkFNRSAoc3JjKSksIEdTVF9TVFJfTlVMTCAoc3JjX3BhZCksCisgICAgICAgICAgICAgICAgICAgICBHU1RfU1RSX05VTEwgKEdTVF9FTEVNRU5UX05BTUUgKHNpbmspKSwgR1NUX1NUUl9OVUxMIChzaW5rX3BhZCkpOworCisgICAgICBkYXRhLT5zcmNfcGFkID0gZ19zdHJkdXAgKHNyY19wYWQpOworICAgICAgZGF0YS0+c2luayA9IHNpbms7CisgICAgICBkYXRhLT5zaW5rX3BhZCA9IGdfc3RyZHVwIChzaW5rX3BhZCk7CisgICAgICBpZiAoY2FwcykgeworICAgICAgCWRhdGEtPmNhcHMgPSBnc3RfY2Fwc19jb3B5IChjYXBzKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAJZGF0YS0+Y2FwcyA9IE5VTEw7CisgICAgICB9CisgICAgICBkYXRhLT5zaWduYWxfaWQgPSBnX3NpZ25hbF9jb25uZWN0X2RhdGEgKHNyYywgInBhZC1hZGRlZCIsCisgICAgICAgICAgR19DQUxMQkFDSyAoZ3N0X3BhcnNlX2ZvdW5kX3BhZCksIGRhdGEsCisgICAgICAgICAgKEdDbG9zdXJlTm90aWZ5KSBnc3RfcGFyc2VfZnJlZV9kZWxheWVkX2xpbmssIChHQ29ubmVjdEZsYWdzKSAwKTsKKyAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgfQorICByZXR1cm4gRkFMU0U7Cit9CisKKy8qCisgKiBwZXJmb3JtcyBhIGxpbmsgYW5kIGZyZWVzIHRoZSBzdHJ1Y3QuIHNyYyBhbmQgc2luayBlbGVtZW50cyBtdXN0IGJlIGdpdmVuCisgKiByZXR1cm4gdmFsdWVzICAgMCAtIGxpbmsgcGVyZm9ybWVkCisgKiAgICAgICAgICAgICAgICAgMSAtIGxpbmsgZGVsYXllZAorICogICAgICAgICAgICAgICAgPDAgLSBlcnJvcgorICovCitzdGF0aWMgZ2ludAorZ3N0X3BhcnNlX3BlcmZvcm1fbGluayAobGlua190ICpsaW5rLCBncmFwaF90ICpncmFwaCkKK3sKKyAgR3N0RWxlbWVudCAqc3JjID0gbGluay0+c3JjOworICBHc3RFbGVtZW50ICpzaW5rID0gbGluay0+c2luazsKKyAgR1NMaXN0ICpzcmNzID0gbGluay0+c3JjX3BhZHM7CisgIEdTTGlzdCAqc2lua3MgPSBsaW5rLT5zaW5rX3BhZHM7CisgIGdfYXNzZXJ0IChHU1RfSVNfRUxFTUVOVCAoc3JjKSk7CisgIGdfYXNzZXJ0IChHU1RfSVNfRUxFTUVOVCAoc2luaykpOworCisgIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9QSVBFTElORSwKKyAgICAgICJsaW5raW5nICVzOiVzIHRvICVzOiVzICgldS8ldSkgd2l0aCBjYXBzIFwiJSIgR1NUX1BUUl9GT1JNQVQgIlwiIiwKKyAgICAgIEdTVF9FTEVNRU5UX05BTUUgKHNyYyksIGxpbmstPnNyY19uYW1lID8gbGluay0+c3JjX25hbWUgOiAiKGFueSkiLAorICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoc2luayksIGxpbmstPnNpbmtfbmFtZSA/IGxpbmstPnNpbmtfbmFtZSA6ICIoYW55KSIsCisgICAgICBnX3NsaXN0X2xlbmd0aCAoc3JjcyksIGdfc2xpc3RfbGVuZ3RoIChzaW5rcyksIGxpbmstPmNhcHMpOworCisgIGlmICghc3JjcyB8fCAhc2lua3MpIHsKKyAgICBpZiAoZ3N0X2VsZW1lbnRfbGlua19wYWRzX2ZpbHRlcmVkIChzcmMsCisgICAgICAgIHNyY3MgPyAoY29uc3QgZ2NoYXIgKikgc3Jjcy0+ZGF0YSA6IE5VTEwsIHNpbmssCisgICAgICAgIHNpbmtzID8gKGNvbnN0IGdjaGFyICopIHNpbmtzLT5kYXRhIDogTlVMTCwgbGluay0+Y2FwcykpIHsKKyAgICAgIGdvdG8gc3VjY2VzczsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKGdzdF9wYXJzZV9wZXJmb3JtX2RlbGF5ZWRfbGluayAoc3JjLAorICAgICAgICAgIHNyY3MgPyAoY29uc3QgZ2NoYXIgKikgc3Jjcy0+ZGF0YSA6IE5VTEwsCisgICAgICAgICAgc2luaywgc2lua3MgPyAoY29uc3QgZ2NoYXIgKikgc2lua3MtPmRhdGEgOiBOVUxMLCBsaW5rLT5jYXBzKSkgeworCWdvdG8gc3VjY2VzczsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICB9CisgICAgfQorICB9CisgIGlmIChnX3NsaXN0X2xlbmd0aCAobGluay0+c3JjX3BhZHMpICE9IGdfc2xpc3RfbGVuZ3RoIChsaW5rLT5zaW5rX3BhZHMpKSB7CisgICAgZ290byBlcnJvcjsKKyAgfQorICB3aGlsZSAoc3JjcyAmJiBzaW5rcykgeworICAgIGNvbnN0IGdjaGFyICpzcmNfcGFkID0gKGNvbnN0IGdjaGFyICopIHNyY3MtPmRhdGE7CisgICAgY29uc3QgZ2NoYXIgKnNpbmtfcGFkID0gKGNvbnN0IGdjaGFyICopIHNpbmtzLT5kYXRhOworICAgIHNyY3MgPSBnX3NsaXN0X25leHQgKHNyY3MpOworICAgIHNpbmtzID0gZ19zbGlzdF9uZXh0IChzaW5rcyk7CisgICAgaWYgKGdzdF9lbGVtZW50X2xpbmtfcGFkc19maWx0ZXJlZCAoc3JjLCBzcmNfcGFkLCBzaW5rLCBzaW5rX3BhZCwKKyAgICAgICAgbGluay0+Y2FwcykpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0gZWxzZSB7CisgICAgICBpZiAoZ3N0X3BhcnNlX3BlcmZvcm1fZGVsYXllZF9saW5rIChzcmMsIHNyY19wYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5rLCBzaW5rX3BhZCwKKwkJCQkJICBsaW5rLT5jYXBzKSkgeworCWNvbnRpbnVlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICAgIH0KKyAgICB9CisgIH0KKworc3VjY2VzczoKKyAgZ3N0X3BhcnNlX2ZyZWVfbGluayAobGluayk7CisgIHJldHVybiAwOworCitlcnJvcjoKKyAgU0VUX0VSUk9SIChncmFwaC0+ZXJyb3IsIEdTVF9QQVJTRV9FUlJPUl9MSU5LLAorICAgICAgXygiY291bGQgbm90IGxpbmsgJXMgdG8gJXMiKSwgR1NUX0VMRU1FTlRfTkFNRSAoc3JjKSwKKyAgICAgIEdTVF9FTEVNRU5UX05BTUUgKHNpbmspKTsKKyAgZ3N0X3BhcnNlX2ZyZWVfbGluayAobGluayk7CisgIHJldHVybiAtMTsKK30KKworCitzdGF0aWMgaW50IHl5ZXJyb3IgKHZvaWQgKnNjYW5uZXIsIGdyYXBoX3QgKmdyYXBoLCBjb25zdCBjaGFyICpzKTsKKyV9CisKKyV1bmlvbiB7CisgICAgZ2NoYXIgKnM7CisgICAgY2hhaW5fdCAqYzsKKyAgICBsaW5rX3QgKmw7CisgICAgR3N0RWxlbWVudCAqZTsKKyAgICBHU0xpc3QgKnA7CisgICAgZ3JhcGhfdCAqZzsKK30KKworJXRva2VuIDxzPiBQQVJTRV9VUkwKKyV0b2tlbiA8cz4gSURFTlRJRklFUgorJWxlZnQgPHM+IFJFRiBQQURSRUYgQklOUkVGCisldG9rZW4gPHM+IEFTU0lHTk1FTlQKKyV0b2tlbiA8cz4gTElOSworCisldHlwZSA8Zz4gZ3JhcGgKKyV0eXBlIDxjPiBjaGFpbiBiaW4KKyV0eXBlIDxsPiByZWZlcmVuY2UKKyV0eXBlIDxsPiBsaW5rcGFydCBsaW5rCisldHlwZSA8cD4gbGlua2xpc3QKKyV0eXBlIDxlPiBlbGVtZW50CisldHlwZSA8cD4gcGFkbGlzdCBwYWRzIGFzc2lnbm1lbnRzCisKKyVsZWZ0ICcoJyAnKScKKyVsZWZ0ICcsJworJXJpZ2h0ICcuJworJWxlZnQgJyEnICc9JworCislcGFyc2UtcGFyYW0geyB2b2lkICpzY2FubmVyIH0KKyVwYXJzZS1wYXJhbSB7IGdyYXBoX3QgKmdyYXBoIH0KKyVwdXJlLXBhcnNlcgorCislc3RhcnQgZ3JhcGgKKyUlCisKK2VsZW1lbnQ6CUlERU5USUZJRVIgICAgIAkJICAgICAgeyAkJCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoJDEsIE5VTEwpOworCQkJCQkJaWYgKCQkID09IE5VTEwpIHsKKwkJCQkJCSAgQUREX01JU1NJTkdfRUxFTUVOVCAoZ3JhcGgsICQxKTsKKwkJCQkJCSAgU0VUX0VSUk9SIChncmFwaC0+ZXJyb3IsIEdTVF9QQVJTRV9FUlJPUl9OT19TVUNIX0VMRU1FTlQsIF8oIm5vIGVsZW1lbnQgXCIlc1wiIiksICQxKTsKKwkJCQkJCSAgLyogaWYgRkFUQUxfRVJST1JTIGZsYWcgaXMgc2V0LCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGJhY2t3YXJkcworCQkJCQkJICAgKiBjb21wYXRpYmlsaXR5IGFuZCBjYW4gY29udGludWUgcGFyc2luZyBhbmQgY2hlY2sgZm9yIG90aGVyIG1pc3NpbmcKKwkJCQkJCSAgICogZWxlbWVudHMgKi8KKwkJCQkJCSAgaWYgKChncmFwaC0+ZmxhZ3MgJiBHU1RfUEFSU0VfRkxBR19GQVRBTF9FUlJPUlMpID09IDApIHsKKwkJCQkJCSAgICBnc3RfcGFyc2Vfc3RyZnJlZSAoJDEpOworCQkJCQkJICAgIFlZRVJST1I7CisJCQkJCQkgIH0KKwkJCQkJCX0KKwkJCQkJCWdzdF9wYXJzZV9zdHJmcmVlICgkMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCXwJZWxlbWVudCBBU1NJR05NRU5UCSAgICAgIHsgZ3N0X3BhcnNlX2VsZW1lbnRfc2V0ICgkMiwgJDEsIGdyYXBoKTsKKwkJCQkJCSQkID0gJDE7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisJOworYXNzaWdubWVudHM6CS8qIE5PUCAqLwkJICAgICAgeyAkJCA9IE5VTEw7IH0KKwl8CWFzc2lnbm1lbnRzIEFTU0lHTk1FTlQJICAgICAgeyAkJCA9IGdfc2xpc3RfcHJlcGVuZCAoJDEsICQyKTsgfQorCTsKK2JpbjoJICAgICAgICAnKCcgYXNzaWdubWVudHMgY2hhaW4gJyknIHsgR1NUX0JJTl9NQUtFICgkJCwgImJpbiIsICQzLCAkMiwgbm9fZnJlZSk7IH0KKyAgICAgICAgfCAgICAgICBCSU5SRUYgYXNzaWdubWVudHMgY2hhaW4gJyknICB7IEdTVF9CSU5fTUFLRSAoJCQsICQxLCAkMywgJDIsIGdzdF9wYXJzZV9zdHJmcmVlKTsKKwkJCQkJCWdzdF9wYXJzZV9zdHJmcmVlICgkMSk7CisJCQkJCSAgICAgIH0KKyAgICAgICAgfCAgICAgICBCSU5SRUYgYXNzaWdubWVudHMgJyknCSAgICAgIHsgR1NUX0JJTl9NQUtFICgkJCwgJDEsIE5VTEwsICQyLCBnc3RfcGFyc2Vfc3RyZnJlZSk7CisJCQkJCQlnc3RfcGFyc2Vfc3RyZnJlZSAoJDEpOworCQkJCQkgICAgICB9CisgICAgICAgIHwgICAgICAgQklOUkVGIGFzc2lnbm1lbnRzIGVycm9yICcpJyAgeyBHU1RfQklOX01BS0UgKCQkLCAkMSwgTlVMTCwgJDIsIGdzdF9wYXJzZV9zdHJmcmVlKTsKKwkJCQkJCWdzdF9wYXJzZV9zdHJmcmVlICgkMSk7CisJCQkJCSAgICAgIH0KKwk7CisKK3BhZHM6CQlQQURSRUYgCQkJICAgICAgeyAkJCA9IGdfc2xpc3RfcHJlcGVuZCAoTlVMTCwgJDEpOyB9CisJfAlQQURSRUYgcGFkbGlzdAkJICAgICAgeyAkJCA9ICQyOworCQkJCQkJJCQgPSBnX3NsaXN0X3ByZXBlbmQgKCQkLCAkMSk7CisJCQkJCSAgICAgIH0KKwk7CitwYWRsaXN0OgknLCcgSURFTlRJRklFUgkJICAgICAgeyAkJCA9IGdfc2xpc3RfcHJlcGVuZCAoTlVMTCwgJDIpOyB9CisJfAknLCcgSURFTlRJRklFUiBwYWRsaXN0CSAgICAgIHsgJCQgPSBnX3NsaXN0X3ByZXBlbmQgKCQzLCAkMik7IH0KKwk7CisKK3JlZmVyZW5jZToJUkVGIAkJCSAgICAgIHsgTUFLRV9SRUYgKCQkLCAkMSwgTlVMTCk7IH0KKwl8CVJFRiBwYWRsaXN0CQkgICAgICB7IE1BS0VfUkVGICgkJCwgJDEsICQyKTsgfQorCTsKKworbGlua3BhcnQ6CXJlZmVyZW5jZQkJICAgICAgeyAkJCA9ICQxOyB9CisJfAlwYWRzCQkJICAgICAgeyBNQUtFX1JFRiAoJCQsIE5VTEwsICQxKTsgfQorCXwJLyogTk9QICovCQkgICAgICB7IE1BS0VfUkVGICgkJCwgTlVMTCwgTlVMTCk7IH0KKwk7CisKK2xpbms6CQlsaW5rcGFydCBMSU5LIGxpbmtwYXJ0CSAgICAgIHsgJCQgPSAkMTsKKwkJCQkJCWlmICgkMikgeworCQkJCQkJICAkJC0+Y2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgkMik7CisJCQkJCQkgIGlmICgkJC0+Y2FwcyA9PSBOVUxMKQorCQkJCQkJICAgIFNFVF9FUlJPUiAoZ3JhcGgtPmVycm9yLCBHU1RfUEFSU0VfRVJST1JfTElOSywgXygiY291bGQgbm90IHBhcnNlIGNhcHMgXCIlc1wiIiksICQyKTsKKwkJCQkJCSAgZ3N0X3BhcnNlX3N0cmZyZWUgKCQyKTsKKwkJCQkJCX0KKwkJCQkJCSQkLT5zaW5rX25hbWUgPSAkMy0+c3JjX25hbWU7CisJCQkJCQkkJC0+c2lua19wYWRzID0gJDMtPnNyY19wYWRzOworCQkJCQkJZ3N0X3BhcnNlX2xpbmtfZnJlZSAoJDMpOworCQkJCQkgICAgICB9CisJOworCitsaW5rbGlzdDoJbGluawkJCSAgICAgIHsgJCQgPSBnX3NsaXN0X3ByZXBlbmQgKE5VTEwsICQxKTsgfQorCXwJbGluayBsaW5rbGlzdAkJICAgICAgeyAkJCA9IGdfc2xpc3RfcHJlcGVuZCAoJDIsICQxKTsgfQorCXwJbGlua2xpc3QgZXJyb3IJCSAgICAgIHsgJCQgPSAkMTsgfQorCTsKKworY2hhaW46ICAgCWVsZW1lbnQJCQkgICAgICB7ICQkID0gZ3N0X3BhcnNlX2NoYWluX25ldyAoKTsKKwkJCQkJCSQkLT5maXJzdCA9ICQkLT5sYXN0ID0gJDE7CisJCQkJCQkkJC0+ZnJvbnQgPSAkJC0+YmFjayA9IE5VTEw7CisJCQkJCQkkJC0+ZWxlbWVudHMgPSBnX3NsaXN0X3ByZXBlbmQgKE5VTEwsICQxKTsKKwkJCQkJICAgICAgfQorCXwJYmluCQkJICAgICAgeyAkJCA9ICQxOyB9CisJfAljaGFpbiBjaGFpbgkJICAgICAgeyBpZiAoJDEtPmJhY2sgJiYgJDItPmZyb250KSB7CisJCQkJCQkgIGlmICghJDEtPmJhY2stPnNpbmtfbmFtZSkgeworCQkJCQkJICAgIFNFVF9FUlJPUiAoZ3JhcGgtPmVycm9yLCBHU1RfUEFSU0VfRVJST1JfTElOSywgXygibGluayB3aXRob3V0IHNvdXJjZSBlbGVtZW50IikpOworCQkJCQkJICAgIGdzdF9wYXJzZV9mcmVlX2xpbmsgKCQxLT5iYWNrKTsKKwkJCQkJCSAgfSBlbHNlIHsKKwkJCQkJCSAgICBncmFwaC0+bGlua3MgPSBnX3NsaXN0X3ByZXBlbmQgKGdyYXBoLT5saW5rcywgJDEtPmJhY2spOworCQkJCQkJICB9CisJCQkJCQkgIGlmICghJDItPmZyb250LT5zcmNfbmFtZSkgeworCQkJCQkJICAgIFNFVF9FUlJPUiAoZ3JhcGgtPmVycm9yLCBHU1RfUEFSU0VfRVJST1JfTElOSywgXygibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIpKTsKKwkJCQkJCSAgICBnc3RfcGFyc2VfZnJlZV9saW5rICgkMi0+ZnJvbnQpOworCQkJCQkJICB9IGVsc2UgeworCQkJCQkJICAgIGdyYXBoLT5saW5rcyA9IGdfc2xpc3RfcHJlcGVuZCAoZ3JhcGgtPmxpbmtzLCAkMi0+ZnJvbnQpOworCQkJCQkJICB9CisJCQkJCQkgICQxLT5iYWNrID0gTlVMTDsKKwkJCQkJCX0gZWxzZSBpZiAoJDEtPmJhY2spIHsKKwkJCQkJCSAgaWYgKCEkMS0+YmFjay0+c2lua19uYW1lKSB7CisJCQkJCQkgICAgJDEtPmJhY2stPnNpbmsgPSAkMi0+Zmlyc3Q7CisJCQkJCQkgIH0KKwkJCQkJCX0gZWxzZSBpZiAoJDItPmZyb250KSB7CisJCQkJCQkgIGlmICghJDItPmZyb250LT5zcmNfbmFtZSkgeworCQkJCQkJICAgICQyLT5mcm9udC0+c3JjID0gJDEtPmxhc3Q7CisJCQkJCQkgIH0KKwkJCQkJCSAgJDEtPmJhY2sgPSAkMi0+ZnJvbnQ7CisJCQkJCQl9CisKKwkJCQkJCWlmICgkMS0+YmFjaykgeworCQkJCQkJICBncmFwaC0+bGlua3MgPSBnX3NsaXN0X3ByZXBlbmQgKGdyYXBoLT5saW5rcywgJDEtPmJhY2spOworCQkJCQkJfQorCQkJCQkJJDEtPmxhc3QgPSAkMi0+bGFzdDsKKwkJCQkJCSQxLT5iYWNrID0gJDItPmJhY2s7CisJCQkJCQkkMS0+ZWxlbWVudHMgPSBnX3NsaXN0X2NvbmNhdCAoJDEtPmVsZW1lbnRzLCAkMi0+ZWxlbWVudHMpOworCQkJCQkJaWYgKCQyKQorCQkJCQkJICBnc3RfcGFyc2VfY2hhaW5fZnJlZSAoJDIpOworCQkJCQkJJCQgPSAkMTsKKwkJCQkJICAgICAgfQorCXwJY2hhaW4gbGlua2xpc3QJCSAgICAgIHsgR1NMaXN0ICp3YWxrOworCQkJCQkJaWYgKCQxLT5iYWNrKSB7CisJCQkJCQkgICQyID0gZ19zbGlzdF9wcmVwZW5kICgkMiwgJDEtPmJhY2spOworCQkJCQkJICAkMS0+YmFjayA9IE5VTEw7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJICBpZiAoISgobGlua190ICopICQyLT5kYXRhKS0+c3JjX25hbWUpIHsKKwkJCQkJCSAgICAoKGxpbmtfdCAqKSAkMi0+ZGF0YSktPnNyYyA9ICQxLT5sYXN0OworCQkJCQkJICB9CisJCQkJCQl9CisJCQkJCQlmb3IgKHdhbGsgPSAkMjsgd2Fsazsgd2FsayA9IHdhbGstPm5leHQpIHsKKwkJCQkJCSAgbGlua190ICpsaW5rID0gKGxpbmtfdCAqKSB3YWxrLT5kYXRhOworCQkJCQkJICBpZiAoIWxpbmstPnNpbmtfbmFtZSAmJiB3YWxrLT5uZXh0KSB7CisJCQkJCQkgICAgU0VUX0VSUk9SIChncmFwaC0+ZXJyb3IsIEdTVF9QQVJTRV9FUlJPUl9MSU5LLCBfKCJsaW5rIHdpdGhvdXQgc2luayBlbGVtZW50IikpOworCQkJCQkJICAgIGdzdF9wYXJzZV9mcmVlX2xpbmsgKGxpbmspOworCQkJCQkJICB9IGVsc2UgaWYgKCFsaW5rLT5zcmNfbmFtZSAmJiAhbGluay0+c3JjKSB7CisJCQkJCQkgICAgU0VUX0VSUk9SIChncmFwaC0+ZXJyb3IsIEdTVF9QQVJTRV9FUlJPUl9MSU5LLCBfKCJsaW5rIHdpdGhvdXQgc291cmNlIGVsZW1lbnQiKSk7CisJCQkJCQkgICAgZ3N0X3BhcnNlX2ZyZWVfbGluayAobGluayk7CisJCQkJCQkgIH0gZWxzZSB7CisJCQkJCQkgICAgaWYgKHdhbGstPm5leHQpIHsKKwkJCQkJCSAgICAgIGdyYXBoLT5saW5rcyA9IGdfc2xpc3RfcHJlcGVuZCAoZ3JhcGgtPmxpbmtzLCBsaW5rKTsKKwkJCQkJCSAgICB9IGVsc2UgeworCQkJCQkJICAgICAgJDEtPmJhY2sgPSBsaW5rOworCQkJCQkJICAgIH0KKwkJCQkJCSAgfQorCQkJCQkJfQorCQkJCQkJZ19zbGlzdF9mcmVlICgkMik7CisJCQkJCQkkJCA9ICQxOworCQkJCQkgICAgICB9CisJfAljaGFpbiBlcnJvcgkJICAgICAgeyAkJCA9ICQxOyB9CisJfAlsaW5rIGNoYWluCQkgICAgICB7IGlmICgkMi0+ZnJvbnQpIHsKKwkJCQkJCSAgaWYgKCEkMi0+ZnJvbnQtPnNyY19uYW1lKSB7CisJCQkJCQkgICAgU0VUX0VSUk9SIChncmFwaC0+ZXJyb3IsIEdTVF9QQVJTRV9FUlJPUl9MSU5LLCBfKCJsaW5rIHdpdGhvdXQgc291cmNlIGVsZW1lbnQiKSk7CisJCQkJCQkgICAgZ3N0X3BhcnNlX2ZyZWVfbGluayAoJDItPmZyb250KTsKKwkJCQkJCSAgfSBlbHNlIHsKKwkJCQkJCSAgICBncmFwaC0+bGlua3MgPSBnX3NsaXN0X3ByZXBlbmQgKGdyYXBoLT5saW5rcywgJDItPmZyb250KTsKKwkJCQkJCSAgfQorCQkJCQkJfQorCQkJCQkJaWYgKCEkMS0+c2lua19uYW1lKSB7CisJCQkJCQkgICQxLT5zaW5rID0gJDItPmZpcnN0OworCQkJCQkJfQorCQkJCQkJJDItPmZyb250ID0gJDE7CisJCQkJCQkkJCA9ICQyOworCQkJCQkgICAgICB9CisJfAlQQVJTRV9VUkwgY2hhaW4JCSAgICAgIHsgJCQgPSAkMjsKKwkJCQkJCWlmICgkJC0+ZnJvbnQpIHsKKwkJCQkJCSAgR3N0RWxlbWVudCAqZWxlbWVudCA9CisJCQkJCQkJICBnc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpIChHU1RfVVJJX1NSQywgJDEsIE5VTEwpOworCQkJCQkJICBpZiAoIWVsZW1lbnQpIHsKKwkJCQkJCSAgICBTRVRfRVJST1IgKGdyYXBoLT5lcnJvciwgR1NUX1BBUlNFX0VSUk9SX05PX1NVQ0hfRUxFTUVOVCwKKwkJCQkJCQkgICAgXygibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiKSwgJDEpOworCQkJCQkJICB9IGVsc2UgeworCQkJCQkJICAgICQkLT5mcm9udC0+c3JjID0gZWxlbWVudDsKKwkJCQkJCSAgICBncmFwaC0+bGlua3MgPSBnX3NsaXN0X3ByZXBlbmQgKAorCQkJCQkJCSAgICBncmFwaC0+bGlua3MsICQkLT5mcm9udCk7CisJCQkJCQkgICAgJCQtPmZyb250ID0gTlVMTDsKKwkJCQkJCSAgICAkJC0+ZWxlbWVudHMgPSBnX3NsaXN0X3ByZXBlbmQgKCQkLT5lbGVtZW50cywgZWxlbWVudCk7CisJCQkJCQkgIH0KKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkgIFNFVF9FUlJPUiAoZ3JhcGgtPmVycm9yLCBHU1RfUEFSU0VfRVJST1JfTElOSywKKwkJCQkJCQkgIF8oIm5vIGVsZW1lbnQgdG8gbGluayBVUkkgXCIlc1wiIHRvIiksICQxKTsKKwkJCQkJCX0KKwkJCQkJCWdfZnJlZSAoJDEpOworCQkJCQkgICAgICB9CisJfAlsaW5rIFBBUlNFX1VSTAkJICAgICAgeyBHc3RFbGVtZW50ICplbGVtZW50ID0KKwkJCQkJCQkgIGdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkgKEdTVF9VUklfU0lOSywgJDIsIE5VTEwpOworCQkJCQkJaWYgKCFlbGVtZW50KSB7CisJCQkJCQkgIFNFVF9FUlJPUiAoZ3JhcGgtPmVycm9yLCBHU1RfUEFSU0VfRVJST1JfTk9fU1VDSF9FTEVNRU5ULAorCQkJCQkJCSAgXygibm8gc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIiksICQyKTsKKwkJCQkJCSAgZ3N0X3BhcnNlX2xpbmtfZnJlZSAoJDEpOworCQkJCQkJICBnX2ZyZWUgKCQyKTsKKwkJCQkJCSAgWVlFUlJPUjsKKwkJCQkJCX0gZWxzZSBpZiAoJDEtPnNpbmtfbmFtZSB8fCAkMS0+c2lua19wYWRzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGVsZW1lbnQpOworCQkJCQkJICBTRVRfRVJST1IgKGdyYXBoLT5lcnJvciwgR1NUX1BBUlNFX0VSUk9SX0xJTkssCisJCQkJCQkJICBfKCJjb3VsZCBub3QgbGluayBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiKSwgJDIpOworCQkJCQkJICBnc3RfcGFyc2VfbGlua19mcmVlICgkMSk7CisJCQkJCQkgIGdfZnJlZSAoJDIpOworCQkJCQkJICBZWUVSUk9SOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCSAgJCQgPSBnc3RfcGFyc2VfY2hhaW5fbmV3ICgpOworCQkJCQkJICAkJC0+Zmlyc3QgPSAkJC0+bGFzdCA9IGVsZW1lbnQ7CisJCQkJCQkgICQkLT5mcm9udCA9ICQxOworCQkJCQkJICAkJC0+ZnJvbnQtPnNpbmsgPSBlbGVtZW50OworCQkJCQkJICAkJC0+ZWxlbWVudHMgPSBnX3NsaXN0X3ByZXBlbmQgKE5VTEwsIGVsZW1lbnQpOworCQkJCQkJfQorCQkJCQkJZ19mcmVlICgkMik7CisJCQkJCSAgICAgIH0KKwk7CitncmFwaDoJCS8qIE5PUCAqLwkJICAgICAgeyBTRVRfRVJST1IgKGdyYXBoLT5lcnJvciwgR1NUX1BBUlNFX0VSUk9SX0VNUFRZLCBfKCJlbXB0eSBwaXBlbGluZSBub3QgYWxsb3dlZCIpKTsKKwkJCQkJCSQkID0gZ3JhcGg7CisJCQkJCSAgICAgIH0KKwl8CWNoYWluCQkJICAgICAgeyAkJCA9IGdyYXBoOworCQkJCQkJaWYgKCQxLT5mcm9udCkgeworCQkJCQkJICBpZiAoISQxLT5mcm9udC0+c3JjX25hbWUpIHsKKwkJCQkJCSAgICBTRVRfRVJST1IgKGdyYXBoLT5lcnJvciwgR1NUX1BBUlNFX0VSUk9SX0xJTkssIF8oImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIpKTsKKwkJCQkJCSAgICBnc3RfcGFyc2VfZnJlZV9saW5rICgkMS0+ZnJvbnQpOworCQkJCQkJICB9IGVsc2UgeworCQkJCQkJICAgICQkLT5saW5rcyA9IGdfc2xpc3RfcHJlcGVuZCAoJCQtPmxpbmtzLCAkMS0+ZnJvbnQpOworCQkJCQkJICB9CisJCQkJCQkgICQxLT5mcm9udCA9IE5VTEw7CisJCQkJCQl9CisJCQkJCQlpZiAoJDEtPmJhY2spIHsKKwkJCQkJCSAgaWYgKCEkMS0+YmFjay0+c2lua19uYW1lKSB7CisJCQkJCQkgICAgU0VUX0VSUk9SIChncmFwaC0+ZXJyb3IsIEdTVF9QQVJTRV9FUlJPUl9MSU5LLCBfKCJsaW5rIHdpdGhvdXQgc2luayBlbGVtZW50IikpOworCQkJCQkJICAgIGdzdF9wYXJzZV9mcmVlX2xpbmsgKCQxLT5iYWNrKTsKKwkJCQkJCSAgfSBlbHNlIHsKKwkJCQkJCSAgICAkJC0+bGlua3MgPSBnX3NsaXN0X3ByZXBlbmQgKCQkLT5saW5rcywgJDEtPmJhY2spOworCQkJCQkJICB9CisJCQkJCQkgICQxLT5iYWNrID0gTlVMTDsKKwkJCQkJCX0KKwkJCQkJCSQkLT5jaGFpbiA9ICQxOworCQkJCQkgICAgICB9CisJOworCislJQorCisKK3N0YXRpYyBpbnQKK3l5ZXJyb3IgKHZvaWQgKnNjYW5uZXIsIGdyYXBoX3QgKmdyYXBoLCBjb25zdCBjaGFyICpzKQoreworICAvKiBGSVhNRTogVGhpcyBzaG91bGQgZ28gaW50byB0aGUgR0Vycm9yIHNvbWVob3csIGJ1dCBob3c/ICovCisgIEdTVF9XQVJOSU5HICgiRXJyb3IgZHVyaW5nIHBhcnNpbmc6ICVzIiwgcyk7CisgIHJldHVybiAtMTsKK30KKworCitHc3RFbGVtZW50ICoKK19nc3RfcGFyc2VfbGF1bmNoIChjb25zdCBnY2hhciAqc3RyLCBHRXJyb3IgKiplcnJvciwgR3N0UGFyc2VDb250ZXh0ICpjdHgsCisgICAgR3N0UGFyc2VGbGFncyBmbGFncykKK3sKKyAgZ3JhcGhfdCBnOworICBnY2hhciAqZHN0cjsKKyAgR1NMaXN0ICp3YWxrOworICBHc3RCaW4gKmJpbiA9IE5VTEw7CisgIEdzdEVsZW1lbnQgKnJldDsKKyAgeXlzY2FuX3Qgc2Nhbm5lcjsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RyICE9IE5VTEwsIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZXJyb3IgPT0gTlVMTCB8fCAqZXJyb3IgPT0gTlVMTCwgTlVMTCk7CisKKyAgZy5jaGFpbiA9IE5VTEw7CisgIGcubGlua3MgPSBOVUxMOworICBnLmVycm9yID0gZXJyb3I7CisgIGcuY3R4ID0gY3R4OworICBnLmZsYWdzID0gZmxhZ3M7CisKKyNpZmRlZiBfX0dTVF9QQVJTRV9UUkFDRQorICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX1BJUEVMSU5FLCAiVFJBQ0U6IHRyYWNpbmcgZW5hYmxlZCIpOworICBfX3N0cmluZ3MgPSBfX2NoYWlucyA9IF9fbGlua3MgPSAwOworI2VuZGlmIC8qIF9fR1NUX1BBUlNFX1RSQUNFICovCisKKyAgZHN0ciA9IGdfc3RyZHVwIChzdHIpOworICBfZ3N0X3BhcnNlX3l5bGV4X2luaXQgKCZzY2FubmVyKTsKKyAgX2dzdF9wYXJzZV95eV9zY2FuX3N0cmluZyAoZHN0ciwgc2Nhbm5lcik7CisKKyNpZm5kZWYgWVlERUJVRworICB5eWRlYnVnID0gMTsKKyNlbmRpZgorCisgIGlmICh5eXBhcnNlIChzY2FubmVyLCAmZykgIT0gMCkgeworICAgIFNFVF9FUlJPUiAoZXJyb3IsIEdTVF9QQVJTRV9FUlJPUl9TWU5UQVgsCisgICAgICAgICJVbnJlY292ZXJhYmxlIHN5bnRheCBlcnJvciB3aGlsZSBwYXJzaW5nIHBpcGVsaW5lICVzIiwgc3RyKTsKKworICAgIF9nc3RfcGFyc2VfeXlsZXhfZGVzdHJveSAoc2Nhbm5lcik7CisgICAgZ19mcmVlIChkc3RyKTsKKworICAgIGdvdG8gZXJyb3IxOworICB9CisgIF9nc3RfcGFyc2VfeXlsZXhfZGVzdHJveSAoc2Nhbm5lcik7CisgIGdfZnJlZSAoZHN0cik7CisKKyAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9QSVBFTElORSwgImdvdCAldSBlbGVtZW50cyBhbmQgJXUgbGlua3MiLAorICAgICAgZy5jaGFpbiA/IGdfc2xpc3RfbGVuZ3RoIChnLmNoYWluLT5lbGVtZW50cykgOiAwLAorICAgICAgZ19zbGlzdF9sZW5ndGggKGcubGlua3MpKTsKKworICBpZiAoIWcuY2hhaW4pIHsKKyAgICByZXQgPSBOVUxMOworICB9IGVsc2UgaWYgKCFnLmNoYWluLT5lbGVtZW50cy0+bmV4dCkgeworICAgIC8qIG9ubHkgb25lIHRvcGxldmVsIGVsZW1lbnQgKi8KKyAgICByZXQgPSAoR3N0RWxlbWVudCAqKSBnLmNoYWluLT5lbGVtZW50cy0+ZGF0YTsKKyAgICBnX3NsaXN0X2ZyZWUgKGcuY2hhaW4tPmVsZW1lbnRzKTsKKyAgICBpZiAoR1NUX0lTX0JJTiAocmV0KSkKKyAgICAgIGJpbiA9IEdTVF9CSU4gKHJldCk7CisgICAgZ3N0X3BhcnNlX2NoYWluX2ZyZWUgKGcuY2hhaW4pOworICB9IGVsc2UgeworICAgIC8qIHB1dCBhbGwgZWxlbWVudHMgaW4gb3VyIGJpbiAqLworICAgIGJpbiA9IEdTVF9CSU4gKGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInBpcGVsaW5lIiwgTlVMTCkpOworICAgIGdfYXNzZXJ0IChiaW4pOworCisgICAgZm9yICh3YWxrID0gZy5jaGFpbi0+ZWxlbWVudHM7IHdhbGs7IHdhbGsgPSB3YWxrLT5uZXh0KSB7CisgICAgICBpZiAod2Fsay0+ZGF0YSAhPSBOVUxMKQorICAgICAgICBnc3RfYmluX2FkZCAoYmluLCBHU1RfRUxFTUVOVCAod2Fsay0+ZGF0YSkpOworICAgIH0KKworICAgIGdfc2xpc3RfZnJlZSAoZy5jaGFpbi0+ZWxlbWVudHMpOworICAgIHJldCA9IEdTVF9FTEVNRU5UIChiaW4pOworICAgIGdzdF9wYXJzZV9jaGFpbl9mcmVlIChnLmNoYWluKTsKKyAgfQorCisgIC8qIHJlbW92ZSBsaW5rcyAqLworICBmb3IgKHdhbGsgPSBnLmxpbmtzOyB3YWxrOyB3YWxrID0gd2Fsay0+bmV4dCkgeworICAgIGxpbmtfdCAqbCA9IChsaW5rX3QgKikgd2Fsay0+ZGF0YTsKKyAgICBpZiAoIWwtPnNyYykgeworICAgICAgaWYgKGwtPnNyY19uYW1lKSB7CisgICAgICAgIGlmIChiaW4pIHsKKyAgICAgICAgICBsLT5zcmMgPSBnc3RfYmluX2dldF9ieV9uYW1lX3JlY3Vyc2VfdXAgKGJpbiwgbC0+c3JjX25hbWUpOworICAgICAgICAgIGlmIChsLT5zcmMpCisgICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChsLT5zcmMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGwtPnNyYyA9IHN0cmNtcCAoR1NUX0VMRU1FTlRfTkFNRSAocmV0KSwgbC0+c3JjX25hbWUpID09IDAgPyByZXQgOiBOVUxMOworICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAoIWwtPnNyYykgeworICAgICAgICBpZiAobC0+c3JjX25hbWUpIHsKKyAgICAgICAgICBTRVRfRVJST1IgKGVycm9yLCBHU1RfUEFSU0VfRVJST1JfTk9fU1VDSF9FTEVNRU5ULAorICAgICAgICAgICAgICAiTm8gZWxlbWVudCBuYW1lZCBcIiVzXCIgLSBvbWl0dGluZyBsaW5rIiwgbC0+c3JjX25hbWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8qIHByb2JhYmx5IGEgbWlzc2luZyBlbGVtZW50IHdoaWNoIHdlJ3ZlIGhhbmRsZWQgYWxyZWFkeSAqLworICAgICAgICB9CisgICAgICAgIGdzdF9wYXJzZV9mcmVlX2xpbmsgKGwpOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKCFsLT5zaW5rKSB7CisgICAgICBpZiAobC0+c2lua19uYW1lKSB7CisgICAgICAgIGlmIChiaW4pIHsKKyAgICAgICAgICBsLT5zaW5rID0gZ3N0X2Jpbl9nZXRfYnlfbmFtZV9yZWN1cnNlX3VwIChiaW4sIGwtPnNpbmtfbmFtZSk7CisgICAgICAgICAgaWYgKGwtPnNpbmspCisgICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChsLT5zaW5rKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsLT5zaW5rID0gc3RyY21wIChHU1RfRUxFTUVOVF9OQU1FIChyZXQpLCBsLT5zaW5rX25hbWUpID09IDAgPyByZXQgOiBOVUxMOworICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAoIWwtPnNpbmspIHsKKyAgICAgICAgaWYgKGwtPnNpbmtfbmFtZSkgeworICAgICAgICAgIFNFVF9FUlJPUiAoZXJyb3IsIEdTVF9QQVJTRV9FUlJPUl9OT19TVUNIX0VMRU1FTlQsCisgICAgICAgICAgICAgICJObyBlbGVtZW50IG5hbWVkIFwiJXNcIiAtIG9taXR0aW5nIGxpbmsiLCBsLT5zaW5rX25hbWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8qIHByb2JhYmx5IGEgbWlzc2luZyBlbGVtZW50IHdoaWNoIHdlJ3ZlIGhhbmRsZWQgYWxyZWFkeSAqLworICAgICAgICB9CisgICAgICAgIGdzdF9wYXJzZV9mcmVlX2xpbmsgKGwpOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICB9CisgICAgZ3N0X3BhcnNlX3BlcmZvcm1fbGluayAobCwgJmcpOworICB9CisgIGdfc2xpc3RfZnJlZSAoZy5saW5rcyk7CisKK291dDoKKyNpZmRlZiBfX0dTVF9QQVJTRV9UUkFDRQorICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX1BJUEVMSU5FLAorICAgICAgIlRSQUNFOiAldSBzdHJpbmdzLCAldSBjaGFpbnMgYW5kICV1IGxpbmtzIGxlZnQiLCBfX3N0cmluZ3MsIF9fY2hhaW5zLAorICAgICAgX19saW5rcyk7CisgIGlmIChfX3N0cmluZ3MgfHwgX19jaGFpbnMgfHwgX19saW5rcykgeworICAgIGdfd2FybmluZyAoIlRSQUNFOiAldSBzdHJpbmdzLCAldSBjaGFpbnMgYW5kICV1IGxpbmtzIGxlZnQiLCBfX3N0cmluZ3MsCisgICAgICAgIF9fY2hhaW5zLCBfX2xpbmtzKTsKKyAgfQorI2VuZGlmIC8qIF9fR1NUX1BBUlNFX1RSQUNFICovCisKKyAgcmV0dXJuIHJldDsKKworZXJyb3IxOgorICBpZiAoZy5jaGFpbikgeworICAgIGdfc2xpc3RfZm9yZWFjaCAoZy5jaGFpbi0+ZWxlbWVudHMsIChHRnVuYylnc3Rfb2JqZWN0X3VucmVmLCBOVUxMKTsKKyAgICBnX3NsaXN0X2ZyZWUgKGcuY2hhaW4tPmVsZW1lbnRzKTsKKyAgICBnc3RfcGFyc2VfY2hhaW5fZnJlZSAoZy5jaGFpbik7CisgIH0KKworICBnX3NsaXN0X2ZvcmVhY2ggKGcubGlua3MsIChHRnVuYylnc3RfcGFyc2VfZnJlZV9saW5rLCBOVUxMKTsKKyAgZ19zbGlzdF9mcmVlIChnLmxpbmtzKTsKKworICBpZiAoZXJyb3IpCisgICAgZ19hc3NlcnQgKCplcnJvcik7CisgIHJldCA9IE5VTEw7CisKKyAgZ290byBvdXQ7Cit9CmRpZmYgLS1naXQgYS9nc3QvcGFyc2UvcGFyc2UubCBiL2dzdC9wYXJzZS9wYXJzZS5sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZDY1MjcKLS0tIC9kZXYvbnVsbAorKysgYi9nc3QvcGFyc2UvcGFyc2UubApAQCAtMCwwICsxLDE0OCBAQAorJXsKKyNpbmNsdWRlICIuLi9nc3RfcHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8Z2xpYi9ncHJpbnRmLmg+CisKKyNpbmNsdWRlICJ0eXBlcy5oIgorI2luY2x1ZGUgIi4uL2dzdGluZm8uaCIKKyNpbmNsdWRlICIuLi9nc3R1cmkuaCIKKyNpbmNsdWRlICJncmFtbWFyLnRhYi5oIgorCisvKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBFQ0hPIHNvIGFzIHRvIGF2b2lkIGZvcnRpZnkgd2FybmluZ3MuIElnbm9yZSB0aGUKKyAgIGVtYmVkZGVkLU5VTCBjYXNlIGZvciBub3cuIFdlIGtub3cgeXl0ZXh0IGlzIE5VTC10ZXJtaW5hdGVkLiAqLworI2RlZmluZSBFQ0hPIGdfZnByaW50Zih5eW91dCwgIiVzIiwgeXl0ZXh0KQorCisjaWZkZWYgR19IQVZFX0lTT19WQVJBUkdTCisjZGVmaW5lIFBSSU5UKC4uLikgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9QSVBFTElORSwgImZsZXg6ICIgX19WQV9BUkdTX18pCisjZWxpZiBkZWZpbmVkKEdfSEFWRV9HTlVDX1ZBUkFSR1MpCisjZGVmaW5lIFBSSU5UKGFyZ3MuLi4pIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfUElQRUxJTkUsICJmbGV4OiAiIGFyZ3MpCisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkCitQUklOVCAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgdmFyYXJnczsKKworICB2YV9zdGFydCAodmFyYXJncywgZm9ybWF0KTsKKyAgR1NUX0NBVF9MRVZFTF9MT0dfdmFsaXN0IChHU1RfQ0FUX1BJUEVMSU5FLCBHU1RfTEVWRUxfREVCVUcsIE5VTEwsCisgICAgZm9ybWF0LCB2YXJhcmdzKTsKKyAgdmFfZW5kICh2YXJhcmdzKTsKK30KKyNlbmRpZgorCislfQorCitfb3BlcmF0b3IgWygpe30uISw7PV0KK19pZGVudGlmaWVyIFtbOmFsbnVtOl1fXVtbOmFsbnVtOl1cLV8lOl0qCisKK19jaGFyICgiXFwiLil8KFteWzpzcGFjZTpdXSkKK19zdHJpbmcge19jaGFyfSt8KCJcIiIoW15cIl18IlxcXCIiKSoiXCIiKXwoIiciKFteJ118IlxcXCciKSoiJyIpCisKK19hc3NpZ24gW1s6c3BhY2U6XV0qIj0iW1s6c3BhY2U6XV0qCisKK19wcm90b2NvbCBbWzphbHBoYTpdXVtbOmFsbnVtOl0rLVwuXSoKK191cmwgKHtfcHJvdG9jb2x9IjovLyJ7X3N0cmluZ318WyIuIntfaWRlbnRpZmllcn1dPyIvIntfc3RyaW5nfSl8KHtfcHJvdG9jb2x9IjovLyIpCisKKy8qIHdlIG11c3QgZG8gdGhpcyBoZXJlLCBiZWNhdXNlIG5lYXJseSBldmVyeXRoaW5nIG1hdGNoZXMgYSB7X3N0cmluZ30gKi8gCitfYXNzaWdubWVudCB7X2lkZW50aWZpZXJ9e19hc3NpZ259e19zdHJpbmd9CisKKy8qIGdldCBwYWQvZWxlbWVudCByZWZlcmVuY2VzIGFuZCBzdHVmZiB3aXRoIGRvdHMgcmlnaHQgKi8KK19wYWRyZWYgIi4ie19pZGVudGlmaWVyfQorX3JlZiB7X2lkZW50aWZpZXJ9Ii4ie19pZGVudGlmaWVyfT8KK19iaW5yZWYge19pZGVudGlmaWVyfVtbOnNwYWNlOl1dKiIuIltbOnNwYWNlOl1dKiIoIgorCisvKiBsaW5rcyAqLworX21pbWVjaGFyIFtbOmFsbnVtOl0tXQorX21pbWV0eXBlIHtfbWltZWNoYXJ9KyIvIntfbWltZWNoYXJ9KworX2NhcHNjaGFyICgiXFwiLil8KFteXDshXSkKK19jYXBzc3RyaW5nIHtfY2Fwc2NoYXJ9KworX2NhcHMge19taW1ldHlwZX0oIiwiW14hXXx7X2NhcHNzdHJpbmd9KSoKK19saW5rICgiISJbWzpzcGFjZTpdXSp7X2NhcHN9KFtbOnNwYWNlOl1dKigiOyJbWzpzcGFjZTpdXSp7X2NhcHN9KSpbWzpzcGFjZTpdXSopKiIhIil8KCIhIikKKworJXggdmFsdWUKKyVvcHRpb24gbm95eXdyYXAKKyVvcHRpb24gbm91bnB1dAorJW9wdGlvbiByZWVudHJhbnQKKyVvcHRpb24gYmlzb24tYnJpZGdlCislb3B0aW9uIG5ldmVyLWludGVyYWN0aXZlCislb3B0aW9uIG5vaW5wdXQKKyUlCisKK3tfYXNzaWdubWVudH0geworICAgIC8qICI9IiAqLworICAgIFBSSU5UICgiQVNTSUdOTUVOVDogJXMiLCB5eXRleHQpOworICAgIHl5bHZhbC0+cyA9IGdzdF9wYXJzZV9zdHJkdXAgKHl5dGV4dCk7CisgICAgQkVHSU4gKElOSVRJQUwpOworICAgIHJldHVybiBBU1NJR05NRU5UOworfQorCit7X3BhZHJlZn0geworICAgIHl5dGV4dCsrOworICAgIFBSSU5UICgiUEFEUkVGOiAlcyIsIHl5dGV4dCk7CisgICAgeXlsdmFsLT5zID0gZ3N0X3BhcnNlX3N0cmR1cCAoeXl0ZXh0KTsKKyAgICBCRUdJTiAoSU5JVElBTCk7CisgICAgcmV0dXJuIFBBRFJFRjsKK30KKwore19yZWZ9IHsKKyAgICBQUklOVCAoIlJFRjogJXMiLCB5eXRleHQpOworICAgIHl5bHZhbC0+cyA9IGdzdF9wYXJzZV9zdHJkdXAgKHl5dGV4dCk7CisgICAgQkVHSU4gKElOSVRJQUwpOworICAgIHJldHVybiBSRUY7Cit9CisKK3tfYmlucmVmfSB7CisgICAgZ2NoYXIgKnBvcyA9IHl5dGV4dDsKKyAgICB3aGlsZSAoIWdfYXNjaWlfaXNzcGFjZSAoKnBvcykgJiYgKCpwb3MgIT0gJy4nKSkgcG9zKys7CisgICAgKnBvcyA9ICdcMCc7CisgICAgUFJJTlQgKCJCSU5SRUY6ICVzIiwgeXl0ZXh0KTsKKyAgICB5eWx2YWwtPnMgPSBnc3RfcGFyc2Vfc3RyZHVwICh5eXRleHQpOworICAgIEJFR0lOIChJTklUSUFMKTsKKyAgICByZXR1cm4gQklOUkVGOworfQorCit7X2lkZW50aWZpZXJ9IHsKKyAgICBQUklOVCAoIklERU5USUZJRVI6ICVzIiwgeXl0ZXh0KTsKKyAgICB5eWx2YWwtPnMgPSBnc3RfcGFyc2Vfc3RyZHVwICh5eXRleHQpOworICAgIEJFR0lOIChJTklUSUFMKTsKKyAgICByZXR1cm4gSURFTlRJRklFUjsKK30KKwore19saW5rfSB7CisgICAgZ2NoYXIgKmMgPSB5eXRleHQ7CisgICAgUFJJTlQgKCJMSU5LOiAlcyIsIHl5dGV4dCk7CisgICAgYysrOworICAgIGlmICgqYykgeworICAgICAgd2hpbGUgKGdfYXNjaWlfaXNzcGFjZSAoKmMpKSBjKys7CisgICAgICBjID0geXlsdmFsLT5zID0gZ3N0X3BhcnNlX3N0cmR1cCAoYyk7CisgICAgICB3aGlsZSAoKmMpIGMrKzsKKyAgICAgIGlmICgqLS1jICE9ICchJykKKwlnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKKyAgICAgIHdoaWxlIChnX2FzY2lpX2lzc3BhY2UgKCotLWMpKTsKKyAgICAgICorK2MgPSAnXDAnOworICAgIH0gZWxzZSB7CisgICAgICB5eWx2YWwtPnMgPSBOVUxMOworICAgIH0KKyAgICBCRUdJTiAoSU5JVElBTCk7CisgICAgcmV0dXJuIExJTks7Cit9Cit7X3VybH0geworICBQUklOVCAoIlVSTDogJXMiLCB5eXRleHQpOworICB5eWx2YWwtPnMgPSBnX3N0cmR1cCAoeXl0ZXh0KTsKKyAgZ3N0X3BhcnNlX3VuZXNjYXBlICh5eWx2YWwtPnMpOworICBCRUdJTiAoSU5JVElBTCk7CisgIHJldHVybiBQQVJTRV9VUkw7Cit9CisKK3tfb3BlcmF0b3J9IHsgUFJJTlQgKCJPUEVSQVRPUjogWyVzXSIsIHl5dGV4dCk7IHJldHVybiAqeXl0ZXh0OyB9CisKK1tbOnNwYWNlOl1dKyB7IFBSSU5UICgiU1BBQ0U6IFslc10iLCB5eXRleHQpOyB9CisKKy4geworICAgIFBSSU5UICgiSW52YWxpZCBMZXhlciBlbGVtZW50OiAlc1xuIiwgeXl0ZXh0KTsKKyAgICByZXR1cm4gKnl5dGV4dDsKK30KKworJSUKZGlmZiAtLWdpdCBhL2dzdC9wYXJzZS90eXBlcy5oIGIvZ3N0L3BhcnNlL3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIxZjU4NQotLS0gL2Rldi9udWxsCisrKyBiL2dzdC9wYXJzZS90eXBlcy5oCkBAIC0wLDAgKzEsMTAxIEBACisjaWZuZGVmIF9fR1NUX1BBUlNFX1RZUEVTX0hfXworI2RlZmluZSBfX0dTVF9QQVJTRV9UWVBFU19IX18KKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSAiLi4vZ3N0ZWxlbWVudC5oIgorI2luY2x1ZGUgIi4uL2dzdHBhcnNlLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgR3N0RWxlbWVudCAqc3JjOworICBHc3RFbGVtZW50ICpzaW5rOworICBnY2hhciAqc3JjX25hbWU7CisgIGdjaGFyICpzaW5rX25hbWU7CisgIEdTTGlzdCAqc3JjX3BhZHM7CisgIEdTTGlzdCAqc2lua19wYWRzOworICBHc3RDYXBzICpjYXBzOworfSBsaW5rX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgR1NMaXN0ICplbGVtZW50czsKKyAgR3N0RWxlbWVudCAqZmlyc3Q7CisgIEdzdEVsZW1lbnQgKmxhc3Q7CisgIGxpbmtfdCAqZnJvbnQ7CisgIGxpbmtfdCAqYmFjazsKK30gY2hhaW5fdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2dyYXBoX3QgZ3JhcGhfdDsKK3N0cnVjdCBfZ3JhcGhfdCB7CisgIGNoYWluX3QgKmNoYWluOyAvKiBsaW5rcyBhcmUgc3VwcG9zZWQgdG8gYmUgZG9uZSBub3cgKi8KKyAgR1NMaXN0ICpsaW5rczsKKyAgR0Vycm9yICoqZXJyb3I7CisgIEdzdFBhcnNlQ29udGV4dCAqY3R4OyAvKiBtYXkgYmUgTlVMTCAqLworICBHc3RQYXJzZUZsYWdzIGZsYWdzOworfTsKKworCisvKgorICogTWVtb3J5IGNoZWNraW5nLiBTaG91bGQgcHJvYmFibHkgYmUgZG9uZSB3aXRoIGdzdHRyYWNlIHN0dWZmLCBidXQgdGhhdAorICogZG9lc24ndCByZWFsbHkgd29yay4KKyAqIFRoaXMgaXMgbm90IHNhZmUgZnJvbSByZWVudHJhbmNlIGlzc3VlcywgYnV0IHRoYXQgZG9lc24ndCBtYXR0ZXIgYXMgbG9uZyBhcworICogd2UgbG9jayBhIG11dGV4IGJlZm9yZSBwYXJzaW5nIGFueXdheS4KKyAqLworI2lmZGVmIEdTVF9ERUJVR19FTkFCTEVECisjICBkZWZpbmUgX19HU1RfUEFSU0VfVFJBQ0UKKyNlbmRpZgorCisjaWZkZWYgX19HU1RfUEFSU0VfVFJBQ0UKK2djaGFyICAqX19nc3RfcGFyc2Vfc3RyZHVwIChnY2hhciAqb3JnKTsKK3ZvaWQJX19nc3RfcGFyc2Vfc3RyZnJlZSAoZ2NoYXIgKnN0cik7CitsaW5rX3QgKl9fZ3N0X3BhcnNlX2xpbmtfbmV3ICgpOwordm9pZAlfX2dzdF9wYXJzZV9saW5rX2ZyZWUgKGxpbmtfdCAqZGF0YSk7CitjaGFpbl90ICpfX2dzdF9wYXJzZV9jaGFpbl9uZXcgKCk7Cit2b2lkCV9fZ3N0X3BhcnNlX2NoYWluX2ZyZWUgKGNoYWluX3QgKmRhdGEpOworIyAgZGVmaW5lIGdzdF9wYXJzZV9zdHJkdXAgX19nc3RfcGFyc2Vfc3RyZHVwCisjICBkZWZpbmUgZ3N0X3BhcnNlX3N0cmZyZWUgX19nc3RfcGFyc2Vfc3RyZnJlZQorIyAgZGVmaW5lIGdzdF9wYXJzZV9saW5rX25ldyBfX2dzdF9wYXJzZV9saW5rX25ldworIyAgZGVmaW5lIGdzdF9wYXJzZV9saW5rX2ZyZWUgX19nc3RfcGFyc2VfbGlua19mcmVlCisjICBkZWZpbmUgZ3N0X3BhcnNlX2NoYWluX25ldyBfX2dzdF9wYXJzZV9jaGFpbl9uZXcKKyMgIGRlZmluZSBnc3RfcGFyc2VfY2hhaW5fZnJlZSBfX2dzdF9wYXJzZV9jaGFpbl9mcmVlCisjZWxzZSAvKiBfX0dTVF9QQVJTRV9UUkFDRSAqLworIyAgZGVmaW5lIGdzdF9wYXJzZV9zdHJkdXAgZ19zdHJkdXAKKyMgIGRlZmluZSBnc3RfcGFyc2Vfc3RyZnJlZSBnX2ZyZWUKKyMgIGRlZmluZSBnc3RfcGFyc2VfbGlua19uZXcoKSBnX25ldzAgKGxpbmtfdCwgMSkKKyMgIGRlZmluZSBnc3RfcGFyc2VfbGlua19mcmVlIGdfZnJlZQorIyAgZGVmaW5lIGdzdF9wYXJzZV9jaGFpbl9uZXcoKSBnX25ldzAgKGNoYWluX3QsIDEpCisjICBkZWZpbmUgZ3N0X3BhcnNlX2NoYWluX2ZyZWUgZ19mcmVlCisjZW5kaWYgLyogX19HU1RfUEFSU0VfVFJBQ0UgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnc3RfcGFyc2VfdW5lc2NhcGUgKGdjaGFyICpzdHIpCit7CisgIGdjaGFyICp3YWxrOworICBnYm9vbGVhbiBpbl9xdW90ZXM7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoc3RyICE9IE5VTEwpOworCisgIHdhbGsgPSBzdHI7CisgIGluX3F1b3RlcyA9IEZBTFNFOworCisgIHdoaWxlICgqd2FsaykgeworICAgIGlmICgqd2FsayA9PSAnXFwnICYmICFpbl9xdW90ZXMpIHsKKyAgICAgIHdhbGsrKzsKKyAgICAgIC8qIG1ha2Ugc3VyZSB3ZSBkb24ndCByZWFkIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgKi8KKyAgICAgIGlmICgqd2FsayA9PSAnXDAnKQorICAgICAgICBicmVhazsKKyAgICB9IGVsc2UgaWYgKCp3YWxrID09ICciJyAmJiAoIWluX3F1b3RlcyB8fCAoaW5fcXVvdGVzCisgICAgICAgICAgICAgICAgJiYgKCood2FsayAtIDEpICE9ICdcXCcpKSkpIHsKKyAgICAgIC8qIGRvbid0IHVuZXNjYXBlIGluc2lkZSBxdW90ZXMgYW5kIGRvbid0IHN3aXRjaAorICAgICAgICogc3RhdGUgd2l0aCBlc2NhcGVkIHF1b3RlZCBpbnNpZGUgcXVvdGVzICovCisgICAgICBpbl9xdW90ZXMgPSAhaW5fcXVvdGVzOworICAgIH0KKyAgICAqc3RyID0gKndhbGs7CisgICAgc3RyKys7CisgICAgd2FsaysrOworICB9CisgICpzdHIgPSAnXDAnOworfQorCitHc3RFbGVtZW50ICpfZ3N0X3BhcnNlX2xhdW5jaCAoY29uc3QgZ2NoYXIgKiwgR0Vycm9yICoqLAorICAgIEdzdFBhcnNlQ29udGV4dCAqLCBHc3RQYXJzZUZsYWdzKTsKKworI2VuZGlmIC8qIF9fR1NUX1BBUlNFX1RZUEVTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0cmVhbWVyLmRvYXAgYi9nc3RyZWFtZXIuZG9hcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTNjNDA5Ci0tLSAvZGV2L251bGwKKysrIGIvZ3N0cmVhbWVyLmRvYXAKQEAgLTAsMCArMSw0NTYgQEAKKzxQcm9qZWN0CisgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKKyAgeG1sbnM6cmRmcz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hIyIKKyAgeG1sbnM9Imh0dHA6Ly91c2VmdWxpbmMuY29tL25zL2RvYXAjIgorICB4bWxuczpmb2FmPSJodHRwOi8veG1sbnMuY29tL2ZvYWYvMC4xLyIKKyAgeG1sbnM6YWRtaW49Imh0dHA6Ly93ZWJucy5uZXQvbXZjYi8iPgorCisgPG5hbWU+R1N0cmVhbWVyPC9uYW1lPgorIDxzaG9ydG5hbWU+Z3N0cmVhbWVyPC9zaG9ydG5hbWU+CisgPGhvbWVwYWdlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvbW9kdWxlcy9nc3RyZWFtZXIuaHRtbCIgLz4KKyA8Y3JlYXRlZD4xOTk5LTEwLTMxPC9jcmVhdGVkPgorIDxzaG9ydGRlc2MgeG1sOmxhbmc9ImVuIj4KK0dTdHJlYW1lciBpcyBhIHN0cmVhbWluZyBtZWRpYSBmcmFtZXdvcmsKKzwvc2hvcnRkZXNjPgorIDxkZXNjcmlwdGlvbiB4bWw6bGFuZz0iZW4iPgorR1N0cmVhbWVyIGlzIGEgc3RyZWFtaW5nIG1lZGlhIGZyYW1ld29yayB0aGF0IGFsbG93cyB0aGUgY29uc3RydWN0aW9uIG9mCitncmFwaHMgb2YgZWxlbWVudHMgd2hpY2ggb3BlcmF0ZSBvbiBtZWRpYSBkYXRhLgorQXBwbGljYXRpb25zIHVzaW5nIHRoaXMgbGlicmFyeSBjYW4gZG8gYW55dGhpbmcgZnJvbSByZWFsLXRpbWUgc291bmQgcHJvY2Vzc2luZworb3ZlciBwbGF5aW5nIHZpZGVvIHRvIGNhcHR1cmluZyBhdWRpbywgdmlkZW8sIGFuZCBldmVuIG90aGVyIHR5cGVzIG9mIG1lZGlhCitkYXRhLgorSXRzIGFyY2hpdGVjdHVyZSBhbGxvd3MgZm9yIGFkZGluZyBuZXcgZGF0YSB0eXBlcyBvciBwcm9jZXNzaW5nIGNhcGFiaWxpdGllcworc2ltcGx5IGJ5IGluc3RhbGxpbmcgbmV3IHBsdWctaW5zLgorR1N0cmVhbWVyIGlzIHRoZSBjb3JlIG1vZHVsZSwgY29udGFpbmluZyBsaWJyYXJpZXMsIGhlYWRlcnMsIHRoZSBiYXNpYyBvYmplY3QKK2hpZXJhcmNoeSwgYW5kIGEgc2V0IG9mIG1lZGlhLWFnbm9zdGljIGNvcmUgZWxlbWVudHMuCisgPC9kZXNjcmlwdGlvbj4KKyA8Y2F0ZWdvcnk+PC9jYXRlZ29yeT4KKyA8YnVnLWRhdGFiYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9R1N0cmVhbWVyJmFtcDtjb21wb25lbnQ9Z3N0cmVhbWVyKyUyOGNvcmUlMjkiIC8+CisgPHNjcmVlbnNob3RzPjwvc2NyZWVuc2hvdHM+CisgPG1haWxpbmctbGlzdCByZGY6cmVzb3VyY2U9Imh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9nc3RyZWFtZXItZGV2ZWwiIC8+CisgPHByb2dyYW1taW5nLWxhbmd1YWdlPkM8L3Byb2dyYW1taW5nLWxhbmd1YWdlPgorIDxsaWNlbnNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3VzZWZ1bGluYy5jb20vZG9hcC9saWNlbnNlcy9sZ3BsIiAvPgorIDxkb3dubG9hZC1wYWdlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZG93bmxvYWQvIiAvPgorCisgPHJlcG9zaXRvcnk+CisgICA8R2l0UmVwb3NpdG9yeT4KKyAgICAgPGxvY2F0aW9uIHJkZjpyZXNvdXJjZT0iZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdHJlYW1lciIvPgorICAgICA8YnJvd3NlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3RyZWFtZXIiLz4KKyAgIDwvR2l0UmVwb3NpdG9yeT4KKyA8L3JlcG9zaXRvcnk+IAorCisgPHJlbGVhc2U+CisgIDxWZXJzaW9uPgorICAgPHJldmlzaW9uPjAuMTEuMTwvcmV2aXNpb24+CisgICA8YnJhbmNoPjAuMTE8L2JyYW5jaD4KKyAgIDxuYW1lPlN3ZWV0IE5ldyBCbG9zc29tPC9uYW1lPgorICAgPGNyZWF0ZWQ+MjAxMS0wOS0yOTwvY3JlYXRlZD4KKyAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjExLjEudGFyLmJ6MiIgLz4KKyAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjExLjEudGFyLmd6IiAvPgorICA8L1ZlcnNpb24+CisgPC9yZWxlYXNlPgorCisgPHJlbGVhc2U+CisgIDxWZXJzaW9uPgorICAgPHJldmlzaW9uPjAuMTEuMDwvcmV2aXNpb24+CisgICA8YnJhbmNoPjAuMTE8L2JyYW5jaD4KKyAgIDxuYW1lPkl0J3MgYSBib3k8L25hbWU+CisgICA8Y3JlYXRlZD4yMDExLTA4LTAyPC9jcmVhdGVkPgorICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTEuMC50YXIuYnoyIiAvPgorICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTEuMC50YXIuZ3oiIC8+CisgIDwvVmVyc2lvbj4KKyA8L3JlbGVhc2U+CisKKyA8cmVsZWFzZT4KKyAgPFZlcnNpb24+CisgICA8cmV2aXNpb24+MC4xMC4zNTwvcmV2aXNpb24+CisgICA8YnJhbmNoPjAuMTA8L2JyYW5jaD4KKyAgIDxuYW1lPk51Y2xlYXIgRmlzc2lvbjwvbmFtZT4KKyAgIDxjcmVhdGVkPjIwMTEtMDYtMTU8L2NyZWF0ZWQ+CisgICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4zNS50YXIuYnoyIiAvPgorICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMzUudGFyLmd6IiAvPgorICA8L1ZlcnNpb24+CisgPC9yZWxlYXNlPgorCisgPHJlbGVhc2U+CisgIDxWZXJzaW9uPgorICAgPHJldmlzaW9uPjAuMTAuMzQ8L3JldmlzaW9uPgorICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+CisgICA8bmFtZT5NaXNmaXRzPC9uYW1lPgorICAgPGNyZWF0ZWQ+MjAxMS0wNS0xMzwvY3JlYXRlZD4KKyAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjM0LnRhci5iejIiIC8+CisgICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4zNC50YXIuZ3oiIC8+CisgIDwvVmVyc2lvbj4KKyA8L3JlbGVhc2U+CisKKyA8cmVsZWFzZT4KKyAgPFZlcnNpb24+CisgICA8cmV2aXNpb24+MC4xMC4zMzwvcmV2aXNpb24+CisgICA8YnJhbmNoPjAuMTA8L2JyYW5jaD4KKyAgIDxuYW1lPlByaW9yIFNwYWNlZmxpZ2h0IEV4cGVyaWVuY2UgaXMgYW4gQWR2YW50YWdlPC9uYW1lPgorICAgPGNyZWF0ZWQ+MjAxMS0wNS0xMDwvY3JlYXRlZD4KKyAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjMzLnRhci5iejIiIC8+CisgICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4zMy50YXIuZ3oiIC8+CisgIDwvVmVyc2lvbj4KKyA8L3JlbGVhc2U+CisKKyA8cmVsZWFzZT4KKyAgPFZlcnNpb24+CisgICA8cmV2aXNpb24+MC4xMC4zMjwvcmV2aXNpb24+CisgICA8YnJhbmNoPjAuMTA8L2JyYW5jaD4KKyAgIDxuYW1lPlRha2UgTWUgdG8gdGhlIEJvbnVzIExldmVsPC9uYW1lPgorICAgPGNyZWF0ZWQ+MjAxMS0wMS0yMTwvY3JlYXRlZD4KKyAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjMyLnRhci5iejIiIC8+CisgICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4zMi50YXIuZ3oiIC8+CisgIDwvVmVyc2lvbj4KKyA8L3JlbGVhc2U+CisKKyA8cmVsZWFzZT4KKyAgPFZlcnNpb24+CisgICA8cmV2aXNpb24+MC4xMC4zMTwvcmV2aXNpb24+CisgICA8YnJhbmNoPjAuMTA8L2JyYW5jaD4KKyAgIDxuYW1lPlNhZmV0eSBQaW5zPC9uYW1lPgorICAgPGNyZWF0ZWQ+MjAxMC0xMS0zMDwvY3JlYXRlZD4KKyAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjMxLnRhci5iejIiIC8+CisgICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4zMS50YXIuZ3oiIC8+CisgIDwvVmVyc2lvbj4KKyA8L3JlbGVhc2U+CisKKyA8cmVsZWFzZT4KKyAgPFZlcnNpb24+CisgICA8cmV2aXNpb24+MC4xMC4zMDwvcmV2aXNpb24+CisgICA8YnJhbmNoPjAuMTA8L2JyYW5jaD4KKyAgIDxuYW1lPlNhZmV0eSBGaXJzdDwvbmFtZT4KKyAgIDxjcmVhdGVkPjIwMTAtMDctMTU8L2NyZWF0ZWQ+CisgICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4zMC50YXIuYnoyIiAvPgorICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMzAudGFyLmd6IiAvPgorICA8L1ZlcnNpb24+CisgPC9yZWxlYXNlPgorCisgPHJlbGVhc2U+CisgIDxWZXJzaW9uPgorICAgPHJldmlzaW9uPjAuMTAuMjk8L3JldmlzaW9uPgorICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+CisgICA8bmFtZT5JdCdzIGEgVHJhcDwvbmFtZT4KKyAgIDxjcmVhdGVkPjIwMTAtMDQtMjc8L2NyZWF0ZWQ+CisgICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4yOS50YXIuYnoyIiAvPgorICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMjkudGFyLmd6IiAvPgorICA8L1ZlcnNpb24+CisgPC9yZWxlYXNlPgorCisgPHJlbGVhc2U+CisgIDxWZXJzaW9uPgorICAgPHJldmlzaW9uPjAuMTAuMjg8L3JldmlzaW9uPgorICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+CisgICA8bmFtZT5TYW1lIE9sZCwgU2FtZSBPbGQ8L25hbWU+CisgICA8Y3JlYXRlZD4yMDEwLTAzLTA4PC9jcmVhdGVkPgorICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMjgudGFyLmJ6MiIgLz4KKyAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjI4LnRhci5neiIgLz4KKyAgPC9WZXJzaW9uPgorIDwvcmVsZWFzZT4KKworIDxyZWxlYXNlPgorICA8VmVyc2lvbj4KKyAgIDxyZXZpc2lvbj4wLjEwLjI3PC9yZXZpc2lvbj4KKyAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgorICAgPG5hbWU+WW91J3JlIFNob2NrZWQsIFdlIEtub3c8L25hbWU+CisgICA8Y3JlYXRlZD4yMDEwLTAzLTA1PC9jcmVhdGVkPgorICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMjcudGFyLmJ6MiIgLz4KKyAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjI3LnRhci5neiIgLz4KKyAgPC9WZXJzaW9uPgorIDwvcmVsZWFzZT4KKworIDxyZWxlYXNlPgorICA8VmVyc2lvbj4KKyAgIDxyZXZpc2lvbj4wLjEwLjI2PC9yZXZpc2lvbj4KKyAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgorICAgPG5hbWU+VGhpbmsgVHdpY2U8L25hbWU+CisgICA8Y3JlYXRlZD4yMDEwLTAyLTA5PC9jcmVhdGVkPgorICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMjYudGFyLmJ6MiIgLz4KKyAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjI2LnRhci5neiIgLz4KKyAgPC9WZXJzaW9uPgorIDwvcmVsZWFzZT4KKworIDxyZWxlYXNlPgorICA8VmVyc2lvbj4KKyAgIDxyZXZpc2lvbj4wLjEwLjI1PC9yZXZpc2lvbj4KKyAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgorICAgPG5hbWU+RmVlbCB0aGUgYnVybjwvbmFtZT4KKyAgIDxjcmVhdGVkPjIwMDktMTAtMDU8L2NyZWF0ZWQ+CisgICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4yNS50YXIuYnoyIiAvPgorICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMjUudGFyLmd6IiAvPgorICA8L1ZlcnNpb24+CisgPC9yZWxlYXNlPgorCisgPHJlbGVhc2U+CisgIDxWZXJzaW9uPgorICAgPHJldmlzaW9uPjAuMTAuMjQ8L3JldmlzaW9uPgorICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+CisgICA8bmFtZT5JdCBtYXR0ZXJzPC9uYW1lPgorICAgPGNyZWF0ZWQ+MjAwOS0wOC0wNDwvY3JlYXRlZD4KKyAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjI0LnRhci5iejIiIC8+CisgICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4yNC50YXIuZ3oiIC8+CisgIDwvVmVyc2lvbj4KKyA8L3JlbGVhc2U+CisKKyA8cmVsZWFzZT4KKyAgPFZlcnNpb24+CisgICA8cmV2aXNpb24+MC4xMC4yMzwvcmV2aXNpb24+CisgICA8YnJhbmNoPjAuMTA8L2JyYW5jaD4KKyAgIDxuYW1lPkFsYWJvbyBBbGFib288L25hbWU+CisgICA8Y3JlYXRlZD4yMDA5LTA1LTEwPC9jcmVhdGVkPgorICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMjMudGFyLmJ6MiIgLz4KKyAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjIzLnRhci5neiIgLz4KKyAgPC9WZXJzaW9uPgorIDwvcmVsZWFzZT4KKworIDxyZWxlYXNlPgorICA8VmVyc2lvbj4KKyAgIDxyZXZpc2lvbj4wLjEwLjIyPC9yZXZpc2lvbj4KKyAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgorICAgPG5hbWU+SSBoZWFyZCBhIGRpc3R1cmJpbmcgc291bmQ8L25hbWU+CisgICA8Y3JlYXRlZD4yMDA5LTAxLTE5PC9jcmVhdGVkPgorICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMjIudGFyLmJ6MiIgLz4KKyAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjIyLnRhci5neiIgLz4KKyAgPC9WZXJzaW9uPgorIDwvcmVsZWFzZT4KKworIDxyZWxlYXNlPgorICA8VmVyc2lvbj4KKyAgIDxyZXZpc2lvbj4wLjEwLjIxPC9yZXZpc2lvbj4KKyAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgorICAgPG5hbWU+VGFrZSBUaGVzZSBUaGluZ3MgRnJvbSBNZTwvbmFtZT4KKyAgIDxjcmVhdGVkPjIwMDgtMTAtMDI8L2NyZWF0ZWQ+CisgICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4yMS50YXIuYnoyIiAvPgorICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMjEudGFyLmd6IiAvPgorICA8L1ZlcnNpb24+CisgPC9yZWxlYXNlPgorCisgPHJlbGVhc2U+CisgIDxWZXJzaW9uPgorICAgPHJldmlzaW9uPjAuMTAuMjA8L3JldmlzaW9uPgorICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+CisgICA8bmFtZT5Zb3UgQ3JhenkgRGlhbW9uZDwvbmFtZT4KKyAgIDxjcmVhdGVkPjIwMDgtMDYtMTg8L2NyZWF0ZWQ+CisgICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4yMC50YXIuYnoyIiAvPgorICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMjAudGFyLmd6IiAvPgorICA8L1ZlcnNpb24+CisgPC9yZWxlYXNlPgorCisgPHJlbGVhc2U+CisgIDxWZXJzaW9uPgorICAgPHJldmlzaW9uPjAuMTAuMTk8L3JldmlzaW9uPgorICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+CisgICA8bmFtZT5NZSBBZ2FpbjwvbmFtZT4KKyAgIDxjcmVhdGVkPjIwMDgtMDQtMDQ8L2NyZWF0ZWQ+CisgICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4xOS50YXIuYnoyIiAvPgorICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMTkudGFyLmd6IiAvPgorICA8L1ZlcnNpb24+CisgPC9yZWxlYXNlPgorCisgPHJlbGVhc2U+CisgIDxWZXJzaW9uPiAgIDxyZXZpc2lvbj4wLjEwLjE4PC9yZXZpc2lvbj4KKyAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgorICAgPG5hbWU+U28gZmFyIGF3YXk8L25hbWU+CisgICA8Y3JlYXRlZD4yMDA4LTAzLTIxPC9jcmVhdGVkPgorICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMTgudGFyLmJ6MiIgLz4KKyAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjE4LnRhci5neiIgLz4KKyAgPC9WZXJzaW9uPgorIDwvcmVsZWFzZT4KKworIDxyZWxlYXNlPgorICA8VmVyc2lvbj4KKyAgIDxyZXZpc2lvbj4wLjEwLjE3PC9yZXZpc2lvbj4KKyAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgorICAgPG5hbWU+RHVlIE5lZ2xpZ2VuY2U8L25hbWU+CisgICA8Y3JlYXRlZD4yMDA4LTAxLTMwPC9jcmVhdGVkPgorICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMTcudGFyLmJ6MiIgLz4KKyAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjE3LnRhci5neiIgLz4KKyAgPC9WZXJzaW9uPgorIDwvcmVsZWFzZT4KKworIDxyZWxlYXNlPgorICA8VmVyc2lvbj4KKyAgIDxyZXZpc2lvbj4wLjEwLjE1PC9yZXZpc2lvbj4KKyAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgorICAgPG5hbWU+T2N0b2JlcjwvbmFtZT4KKyAgIDxjcmVhdGVkPjIwMDctMTEtMTU8L2NyZWF0ZWQ+CisgICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4xNS50YXIuYnoyIiAvPgorICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMTUudGFyLmd6IiAvPgorICA8L1ZlcnNpb24+CisgPC9yZWxlYXNlPgorCisgPHJlbGVhc2U+CisgIDxWZXJzaW9uPgorICAgPHJldmlzaW9uPjAuMTAuMTQ8L3JldmlzaW9uPgorICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+CisgICA8bmFtZT5CcmVhdGhpbmcgVmFjdXVtPC9uYW1lPgorICAgPGNyZWF0ZWQ+MjAwNy0wOC0wMzwvY3JlYXRlZD4KKyAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjE0LnRhci5iejIiIC8+CisgICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4xNC50YXIuZ3oiIC8+CisgIDwvVmVyc2lvbj4KKyA8L3JlbGVhc2U+CisKKyA8cmVsZWFzZT4KKyAgPFZlcnNpb24+CisgICA8cmV2aXNpb24+MC4xMC4xMzwvcmV2aXNpb24+CisgICA8YnJhbmNoPjAuMTA8L2JyYW5jaD4KKyAgIDxuYW1lPldpdGggb3Igd2l0aG91dCB5b3U8L25hbWU+CisgICA8Y3JlYXRlZD4yMDA3LTA2LTA1PC9jcmVhdGVkPgorICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMTMudGFyLmJ6MiIgLz4KKyAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjEzLnRhci5neiIgLz4KKyAgPC9WZXJzaW9uPgorIDwvcmVsZWFzZT4KKworIDxyZWxlYXNlPgorICA8VmVyc2lvbj4KKyAgIDxyZXZpc2lvbj4wLjEwLjEyPC9yZXZpc2lvbj4KKyAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgorICAgPG5hbWU+SW5ldml0YWJsZSBEZW1pc2U8L25hbWU+CisgICA8Y3JlYXRlZD4yMDA3LTAzLTA3PC9jcmVhdGVkPgorICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMTIudGFyLmJ6MiIgLz4KKyAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjEyLnRhci5neiIgLz4KKyAgPC9WZXJzaW9uPgorIDwvcmVsZWFzZT4KKworIDxyZWxlYXNlPgorICA8VmVyc2lvbj4KKyAgIDxyZXZpc2lvbj4wLjEwLjExPC9yZXZpc2lvbj4KKyAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgorICAgPG5hbWU+TG92ZSBuZXZlciBydW5zIG9uIHRpbWU8L25hbWU+CisgICA8Y3JlYXRlZD4yMDA2LTEyLTA2PC9jcmVhdGVkPgorICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMTEudGFyLmJ6MiIgLz4KKyAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjExLnRhci5neiIgLz4KKyAgPC9WZXJzaW9uPgorIDwvcmVsZWFzZT4KKworIDxyZWxlYXNlPgorICA8VmVyc2lvbj4KKyAgIDxyZXZpc2lvbj4wLjEwLjEwPC9yZXZpc2lvbj4KKyAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgorICAgPG5hbWU+UGFpczwvbmFtZT4KKyAgIDxjcmVhdGVkPjIwMDYtMDktMTQ8L2NyZWF0ZWQ+CisgICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4xMC50YXIuYnoyIiAvPgorICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMTAudGFyLmd6IiAvPgorICA8L1ZlcnNpb24+CisgPC9yZWxlYXNlPgorCisgPHJlbGVhc2U+CisgIDxWZXJzaW9uPgorICAgPHJldmlzaW9uPjAuMTAuOTwvcmV2aXNpb24+CisgICA8YnJhbmNoPjAuMTA8L2JyYW5jaD4KKyAgIDxuYW1lPk9uIHRoZSByb2FkIGFnYWluPC9uYW1lPgorICAgPGNyZWF0ZWQ+MjAwNi0wNy0xNDwvY3JlYXRlZD4KKyAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjkudGFyLmJ6MiIgLz4KKyAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjkudGFyLmd6IiAvPgorICA8L1ZlcnNpb24+CisgPC9yZWxlYXNlPgorCisgPHJlbGVhc2U+CisgIDxWZXJzaW9uPgorICAgPHJldmlzaW9uPjAuMTAuODwvcmV2aXNpb24+CisgICA8YnJhbmNoPjAuMTA8L2JyYW5jaD4KKyAgIDxuYW1lPlNvZXBla2UsIGlrIHppZSBvdSBub2cgYWx0aWpkIG5pZTwvbmFtZT4KKyAgIDxjcmVhdGVkPjIwMDYtMDYtMTA8L2NyZWF0ZWQ+CisgICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC44LnRhci5iejIiIC8+CisgICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC44LnRhci5neiIgLz4KKyAgPC9WZXJzaW9uPgorIDwvcmVsZWFzZT4KKworIDxyZWxlYXNlPgorICA8VmVyc2lvbj4KKyAgIDxyZXZpc2lvbj4wLjEwLjc8L3JldmlzaW9uPgorICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+CisgICA8bmFtZT5Tb2VwZWtlLCBpayB6aWUgb3U8L25hbWU+CisgICA8Y3JlYXRlZD4yMDA2LTA2LTA5PC9jcmVhdGVkPgorICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuNy50YXIuYnoyIiAvPgorICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuNy50YXIuZ3oiIC8+CisgIDwvVmVyc2lvbj4KKyA8L3JlbGVhc2U+CisKKyA8cmVsZWFzZT4KKyAgPFZlcnNpb24+CisgICA8cmV2aXNpb24+MC4xMC42PC9yZXZpc2lvbj4KKyAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgorICAgPG5hbWU+TGVhdmUgdGhlIGNhbm5vbGk8L25hbWU+CisgICA8Y3JlYXRlZD4yMDA2LTA1LTE0PC9jcmVhdGVkPgorICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuNi50YXIuYnoyIiAvPgorICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuNi50YXIuZ3oiIC8+CisgIDwvVmVyc2lvbj4KKyA8L3JlbGVhc2U+CisKKworIDxyZWxlYXNlPgorICA8VmVyc2lvbj4KKyAgIDxyZXZpc2lvbj4wLjEwLjU8L3JldmlzaW9uPgorICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+CisgICA8bmFtZT5Gb2dvPC9uYW1lPgorICAgPGNyZWF0ZWQ+MjAwNi0wNC0yODwvY3JlYXRlZD4KKyAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjUudGFyLmJ6MiIgLz4KKyAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjUudGFyLmd6IiAvPgorICA8L1ZlcnNpb24+CisgPC9yZWxlYXNlPgorCisgPHJlbGVhc2U+CisgIDxWZXJzaW9uPgorICAgPHJldmlzaW9uPjAuMTAuNDwvcmV2aXNpb24+CisgICA8YnJhbmNoPjAuMTA8L2JyYW5jaD4KKyAgIDxuYW1lPkxpZ2h0PC9uYW1lPgorICAgPGNyZWF0ZWQ+MjAwNi0wMy0xMDwvY3JlYXRlZD4KKyAgPC9WZXJzaW9uPgorIDwvcmVsZWFzZT4KKworIDxyZWxlYXNlPgorICA8VmVyc2lvbj4KKyAgIDxyZXZpc2lvbj4wLjEwLjM8L3JldmlzaW9uPgorICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+CisgICA8bmFtZT5MaWtlIGEgdmlyZ2luPC9uYW1lPgorICAgPGNyZWF0ZWQ+MjAwNi0wMi0wODwvY3JlYXRlZD4KKyAgPC9WZXJzaW9uPgorIDwvcmVsZWFzZT4KKworIDxyZWxlYXNlPgorICA8VmVyc2lvbj4KKyAgIDxyZXZpc2lvbj4wLjEwLjI8L3JldmlzaW9uPgorICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+CisgICA8bmFtZT5JZiBtYW4gaXMgZml2ZTwvbmFtZT4KKyAgIDxjcmVhdGVkPjIwMDYtMDEtMTY8L2NyZWF0ZWQ+CisgIDwvVmVyc2lvbj4KKyA8L3JlbGVhc2U+CisKKyA8cmVsZWFzZT4KKyAgPFZlcnNpb24+CisgICA8cmV2aXNpb24+MC4xMC4xPC9yZXZpc2lvbj4KKyAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgorICAgPG5hbWU+Tm9sbGFpZyBjaHJpZGhlaWw8L25hbWU+CisgICA8Y3JlYXRlZD4yMDA1LTEyLTIzPC9jcmVhdGVkPgorICA8L1ZlcnNpb24+CisgPC9yZWxlYXNlPgorCisgPHJlbGVhc2U+CisgIDxWZXJzaW9uPgorICAgPHJldmlzaW9uPjAuMTAuMDwvcmV2aXNpb24+CisgICA8YnJhbmNoPjAuMTA8L2JyYW5jaD4KKyAgIDxuYW1lPk1hcm9pbGxlczwvbmFtZT4KKyAgIDxjcmVhdGVkPjIwMDUtMTItMDU8L2NyZWF0ZWQ+CisgIDwvVmVyc2lvbj4KKyA8L3JlbGVhc2U+CisKKyA8cmVsZWFzZT4KKyAgPFZlcnNpb24+CisgICA8cmV2aXNpb24+MC44LjEyPC9yZXZpc2lvbj4KKyAgIDxicmFuY2g+MC44PC9icmFuY2g+CisgICA8bmFtZT5Db29raWVzPC9uYW1lPgorICAgPGNyZWF0ZWQ+MjAwNi0wMi0wOTwvY3JlYXRlZD4KKyAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjguMTIudGFyLmJ6MiIgLz4KKyAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjguMTIudGFyLmd6IiAvPgorICA8L1ZlcnNpb24+CisgPC9yZWxlYXNlPgorCisgPG1haW50YWluZXI+CisgIDxmb2FmOlBlcnNvbj4KKyAgICAgPGZvYWY6bmFtZT5XaW0gVGF5bWFuczwvZm9hZjpuYW1lPgorICAgICA8Zm9hZjptYm94X3NoYTFzdW0+MGQ5M2ZkZTA1MjgxMmQ1MWEwNWZkODZkZTliZGJmNjc0NDIzZGFhMjwvZm9hZjptYm94X3NoYTFzdW0+CisgIDwvZm9hZjpQZXJzb24+CisgPC9tYWludGFpbmVyPgorCis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9nc3RyZWFtZXIuc3BlYyBiL2dzdHJlYW1lci5zcGVjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZjRjMjEKLS0tIC9kZXYvbnVsbAorKysgYi9nc3RyZWFtZXIuc3BlYwpAQCAtMCwwICsxLDUyNCBAQAorJWRlZmluZQkJZ3N0cmVhbWVyCWdzdHJlYW1lcjAxMQorJWRlZmluZQkJbWFqb3JtaW5vcgkwLjExCisKKyVkZWZpbmUgCV9nbGliMgkJMi4yNgorCitOYW1lOiAJCSV7Z3N0cmVhbWVyfQorVmVyc2lvbjogCTAuMTEuMQorUmVsZWFzZTogCTEKK1N1bW1hcnk6IAlHU3RyZWFtZXIgc3RyZWFtaW5nIG1lZGlhIGZyYW1ld29yayBydW50aW1lCisKK0dyb3VwOiAJCUFwcGxpY2F0aW9ucy9NdWx0aW1lZGlhCitMaWNlbnNlOiAJTEdQTAorVVJMOgkJaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvCitTb3VyY2U6IAlodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0le3ZlcnNpb259LnRhci5iejIKK0J1aWxkUm9vdDogICAgICAle190bXBwYXRofS8le25hbWV9LSV7dmVyc2lvbn0tJXtyZWxlYXNlfS1yb290LSUoJXtfX2lkX3V9IC1uKQorCitCdWlsZFJlcXVpcmVzOiAJZ2xpYjItZGV2ZWwgPj0gJXtfZ2xpYjJ9CitCdWlsZFJlcXVpcmVzOiAJYmlzb24KK0J1aWxkUmVxdWlyZXM6IAlmbGV4CitCdWlsZFJlcXVpcmVzOiAJbTQKK0J1aWxkUmVxdWlyZXM6IAljaGVjay1kZXZlbAorQnVpbGRSZXF1aXJlczogCWd0ay1kb2MgPj0gMS4zCitCdWlsZFJlcXVpcmVzOglnZXR0ZXh0CisKKyMgYmVjYXVzZSBBTV9QUk9HX0xJQlRPT0wgd2FzIHVzZWQgaW4gY29uZmlndXJlLmFjCitCdWlsZFJlcXVpcmVzOglnY2MtYysrCisKKyMjIyBkb2N1bWVudGF0aW9uIHJlcXVpcmVtZW50cworQnVpbGRSZXF1aXJlczogIHB5dGhvbjIKK0J1aWxkUmVxdWlyZXM6ICBvcGVuamFkZQorQnVpbGRSZXF1aXJlczogIGphZGV0ZXgKK0J1aWxkUmVxdWlyZXM6CWxpYnhzbHQKK0J1aWxkUmVxdWlyZXM6ICBkb2Nib29rLXN0eWxlLWRzc3NsCitCdWlsZFJlcXVpcmVzOiAgZG9jYm9vay1zdHlsZS14c2wKK0J1aWxkUmVxdWlyZXM6ICBkb2Nib29rLXV0aWxzCitCdWlsZFJlcXVpcmVzOgl0cmFuc2ZpZworQnVpbGRSZXF1aXJlczogIHhmaWcKK0J1aWxkUmVxdWlyZXM6ICBuZXRwYm0tcHJvZ3MKK0J1aWxkUmVxdWlyZXM6ICB0ZXRleC1kdmlwcworQnVpbGRSZXF1aXJlczogIGdob3N0c2NyaXB0CitCdWlsZFJlcXVpcmVzOiAgUHlYTUwKKworJWRlc2NyaXB0aW9uCitHU3RyZWFtZXIgaXMgYSBzdHJlYW1pbmcgbWVkaWEgZnJhbWV3b3JrLCBiYXNlZCBvbiBncmFwaHMgb2YgZmlsdGVycyB3aGljaAorb3BlcmF0ZSBvbiBtZWRpYSBkYXRhLiBBcHBsaWNhdGlvbnMgdXNpbmcgdGhpcyBsaWJyYXJ5IGNhbiBkbyBhbnl0aGluZworZnJvbSByZWFsLXRpbWUgc291bmQgcHJvY2Vzc2luZyB0byBwbGF5aW5nIHZpZGVvcywgYW5kIGp1c3QgYWJvdXQgYW55dGhpbmcKK2Vsc2UgbWVkaWEtcmVsYXRlZC4gIEl0cyBwbHVnaW4tYmFzZWQgYXJjaGl0ZWN0dXJlIG1lYW5zIHRoYXQgbmV3IGRhdGEKK3R5cGVzIG9yIHByb2Nlc3NpbmcgY2FwYWJpbGl0aWVzIGNhbiBiZSBhZGRlZCBzaW1wbHkgYnkgaW5zdGFsbGluZyBuZXcgCitwbHVnaW5zLgorCislcGFja2FnZSBkZXZlbAorU3VtbWFyeTogCUxpYnJhcmllcy9pbmNsdWRlIGZpbGVzIGZvciBHU3RyZWFtZXIgc3RyZWFtaW5nIG1lZGlhIGZyYW1ld29yaworR3JvdXA6IAkJRGV2ZWxvcG1lbnQvTGlicmFyaWVzCisKK1JlcXVpcmVzOiAJJXtuYW1lfSA9ICV7dmVyc2lvbn0tJXtyZWxlYXNlfQorUmVxdWlyZXM6IAlnbGliMi1kZXZlbCA+PSAle19nbGliMn0KK1JlcXVpcmVzOgljaGVjay1kZXZlbAorCislZGVzY3JpcHRpb24gZGV2ZWwKK0dTdHJlYW1lciBpcyBhIHN0cmVhbWluZyBtZWRpYSBmcmFtZXdvcmssIGJhc2VkIG9uIGdyYXBocyBvZiBmaWx0ZXJzIHdoaWNoCitvcGVyYXRlIG9uIG1lZGlhIGRhdGEuIEFwcGxpY2F0aW9ucyB1c2luZyB0aGlzIGxpYnJhcnkgY2FuIGRvIGFueXRoaW5nCitmcm9tIHJlYWwtdGltZSBzb3VuZCBwcm9jZXNzaW5nIHRvIHBsYXlpbmcgdmlkZW9zLCBhbmQganVzdCBhYm91dCBhbnl0aGluZworZWxzZSBtZWRpYS1yZWxhdGVkLiAgSXRzIHBsdWdpbi1iYXNlZCBhcmNoaXRlY3R1cmUgbWVhbnMgdGhhdCBuZXcgZGF0YQordHlwZXMgb3IgcHJvY2Vzc2luZyBjYXBhYmlsaXRpZXMgY2FuIGJlIGFkZGVkIHNpbXBseSBieSBpbnN0YWxsaW5nIG5ldyAgIAorcGx1Z2lucy4KKworVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHRoZSBsaWJyYXJpZXMgYW5kIGluY2x1ZGVzIGZpbGVzIG5lY2Vzc2FyeSB0byBkZXZlbG9wCithcHBsaWNhdGlvbnMgYW5kIHBsdWdpbnMgZm9yIEdTdHJlYW1lciwgYXMgd2VsbCBhcyBnZW5lcmFsIGFuZCBBUEkKK2RvY3VtZW50YXRpb24uCisKKyVwcmVwCislc2V0dXAgLXEgLW4gZ3N0cmVhbWVyLSV7dmVyc2lvbn0KKworJWJ1aWxkCisjIDAuMTAuMDogbWFudWFscyBkbyBub3QgYnVpbGQgZHVlIHRvIGFuIG9wZW5qYWRlIGVycm9yOyBkaXNhYmxlIGZvciBub3cKKyVjb25maWd1cmUgXAorICAtLXdpdGgtcGFja2FnZS1uYW1lPSdnc3RyZWFtZXIgcGFja2FnZScgXAorICAtLXdpdGgtcGFja2FnZS1vcmlnaW49J2h0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnJyBcCisgIC0tZW5hYmxlLWRlYnVnIFwKKyAgLS1lbmFibGUtZ3RrLWRvYyBcCisgIC0tZW5hYmxlLWRvY2Jvb2sgXAorICAtLWVuYWJsZS1pbnRyb3NwZWN0aW9uPXllcworCisjbWFrZSAlez9fc21wX21mbGFnc30KKyMgRklYTUU6IGRvY3MgYnVpbGRpbmcgZG9lc24ndCB3b3JrIHdpdGggc21wIHlldAorbWFrZQorCislaW5zdGFsbCAgCitybSAtcmYgJFJQTV9CVUlMRF9ST09UCisKKyMgSW5zdGFsbCBkb2MgdGVtcG9yYXJpbHkgaW4gb3JkZXIgdG8gYmUgaW5jbHVkZWQgbGF0ZXIgYnkgcnBtCittYWtlIGluc3RhbGwgREVTVERJUj0kUlBNX0JVSUxEX1JPT1QKKworJWZpbmRfbGFuZyBnc3RyZWFtZXItJXttYWpvcm1pbm9yfQorIyBDbGVhbiBvdXQgZmlsZXMgdGhhdCBzaG91bGQgbm90IGJlIHBhcnQgb2YgdGhlIHJwbS4gCitta2RpciAtcCAkUlBNX0JVSUxEX1JPT1Qle19sb2NhbHN0YXRlZGlyfS9jYWNoZS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfQorcm0gLWYgJFJQTV9CVUlMRF9ST09UJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS8qLmxhCitybSAtZiAkUlBNX0JVSUxEX1JPT1Qle19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9LyouYQorcm0gLWYgJFJQTV9CVUlMRF9ST09UJXtfbGliZGlyfS8qLmEKK3JtIC1mICRSUE1fQlVJTERfUk9PVCV7X2xpYmRpcn0vKi5sYQorIyBDcmVhdGUgZW1wdHkgY2FjaGUgZGlyZWN0b3J5Citta2RpciAtcCAkUlBNX0JVSUxEX1JPT1Qle19sb2NhbHN0YXRlZGlyfS9jYWNoZS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfQorCislY2xlYW4KK3JtIC1yZiAkUlBNX0JVSUxEX1JPT1QKKworJXBvc3QgLXAgL3NiaW4vbGRjb25maWcKKworJXBvc3R1biAtcCAvc2Jpbi9sZGNvbmZpZworCislZmlsZXMgLWYgZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0ubGFuZworJWRlZmF0dHIoLSwgcm9vdCwgcm9vdCwgLSkKKyVkb2MgQVVUSE9SUyBDT1BZSU5HIE5FV1MgUkVBRE1FIFJFTEVBU0UgVE9ETworJXtfbGliZGlyfS9saWJnc3RyZWFtZXItJXttYWpvcm1pbm9yfS5zby4qCisle19saWJkaXJ9L2xpYmdzdGJhc2UtJXttYWpvcm1pbm9yfS5zby4qCisle19saWJkaXJ9L2xpYmdzdGNvbnRyb2xsZXItJXttYWpvcm1pbm9yfS5zby4qCisle19saWJkaXJ9L2xpYmdzdGRhdGFwcm90b2NvbC0le21ham9ybWlub3J9LnNvLioKKyV7X2xpYmRpcn0vbGliZ3N0bmV0LSV7bWFqb3JtaW5vcn0uc28uKgorCislZGlyICV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0KKyV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0Y29yZWVsZW1lbnRzLnNvCisle19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdGNvcmVpbmRleGVycy5zbworCisle19iaW5kaXJ9L2dzdC1pbnNwZWN0LSV7bWFqb3JtaW5vcn0KKyV7X2JpbmRpcn0vZ3N0LWxhdW5jaC0le21ham9ybWlub3J9Cisle19iaW5kaXJ9L2dzdC10eXBlZmluZC0le21ham9ybWlub3J9Cisle19saWJleGVjZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9nc3QtcGx1Z2luLXNjYW5uZXIKKyVkb2MgJXtfbWFuZGlyfS9tYW4xL2dzdC1pbnNwZWN0LSV7bWFqb3JtaW5vcn0uKgorJWRvYyAle19tYW5kaXJ9L21hbjEvZ3N0LWxhdW5jaC0le21ham9ybWlub3J9LioKKyVkb2MgJXtfbWFuZGlyfS9tYW4xL2dzdC10eXBlZmluZC0le21ham9ybWlub3J9LioKKyVkb2MgJXtfZGF0YWRpcn0vZG9jL2dzdHJlYW1lci0le21ham9ybWlub3J9L21hbnVhbAorJWRvYyAle19kYXRhZGlyfS9kb2MvZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vcHdnCislZG9jICV7X2RhdGFkaXJ9L2RvYy9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9mYXEvCisle19saWJkaXJ9L2dpcmVwb3NpdG9yeS0xLjAvR3N0LSV7bWFqb3JtaW5vcn0udHlwZWxpYgorJXtfbGliZGlyfS9naXJlcG9zaXRvcnktMS4wL0dzdEJhc2UtJXttYWpvcm1pbm9yfS50eXBlbGliCisle19saWJkaXJ9L2dpcmVwb3NpdG9yeS0xLjAvR3N0Q2hlY2stJXttYWpvcm1pbm9yfS50eXBlbGliCisle19saWJkaXJ9L2dpcmVwb3NpdG9yeS0xLjAvR3N0Q29udHJvbGxlci0le21ham9ybWlub3J9LnR5cGVsaWIKKyV7X2xpYmRpcn0vZ2lyZXBvc2l0b3J5LTEuMC9Hc3ROZXQtJXttYWpvcm1pbm9yfS50eXBlbGliCisle19kYXRhZGlyfS9naXItMS4wL0dzdC0le21ham9ybWlub3J9LmdpcgorJXtfZGF0YWRpcn0vZ2lyLTEuMC9Hc3RCYXNlLSV7bWFqb3JtaW5vcn0uZ2lyCisle19kYXRhZGlyfS9naXItMS4wL0dzdENoZWNrLSV7bWFqb3JtaW5vcn0uZ2lyCisle19kYXRhZGlyfS9naXItMS4wL0dzdENvbnRyb2xsZXItJXttYWpvcm1pbm9yfS5naXIKKyV7X2RhdGFkaXJ9L2dpci0xLjAvR3N0TmV0LSV7bWFqb3JtaW5vcn0uZ2lyCisKKyVmaWxlcyBkZXZlbAorJWRlZmF0dHIoLSwgcm9vdCwgcm9vdCwgLSkKKyVkaXIgJXtfaW5jbHVkZWRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0KKyVkaXIgJXtfaW5jbHVkZWRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vZ3N0Cisle19pbmNsdWRlZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9nc3QvKi5oCisKKyV7X2luY2x1ZGVkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2dzdC9iYXNlCisle19pbmNsdWRlZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9nc3QvY2hlY2sKKyV7X2luY2x1ZGVkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2dzdC9jb250cm9sbGVyCisle19pbmNsdWRlZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9nc3QvZGF0YXByb3RvY29sCisle19pbmNsdWRlZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9nc3QvbmV0CisKKyV7X2xpYmRpcn0vbGliZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0uc28KKyV7X2xpYmRpcn0vbGliZ3N0ZGF0YXByb3RvY29sLSV7bWFqb3JtaW5vcn0uc28KKyV7X2xpYmRpcn0vbGliZ3N0YmFzZS0le21ham9ybWlub3J9LnNvCisle19saWJkaXJ9L2xpYmdzdGNoZWNrLSV7bWFqb3JtaW5vcn0uc28qCisle19saWJkaXJ9L2xpYmdzdGNvbnRyb2xsZXItJXttYWpvcm1pbm9yfS5zbworJXtfbGliZGlyfS9saWJnc3RuZXQtJXttYWpvcm1pbm9yfS5zbworCisle19kYXRhZGlyfS9hY2xvY2FsL2dzdC1lbGVtZW50LWNoZWNrLSV7bWFqb3JtaW5vcn0ubTQKKyV7X2xpYmRpcn0vcGtnY29uZmlnL2dzdHJlYW1lci0le21ham9ybWlub3J9LnBjCisle19saWJkaXJ9L3BrZ2NvbmZpZy9nc3RyZWFtZXItYmFzZS0le21ham9ybWlub3J9LnBjCisle19saWJkaXJ9L3BrZ2NvbmZpZy9nc3RyZWFtZXItY29udHJvbGxlci0le21ham9ybWlub3J9LnBjCisle19saWJkaXJ9L3BrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2stJXttYWpvcm1pbm9yfS5wYworJXtfbGliZGlyfS9wa2djb25maWcvZ3N0cmVhbWVyLWRhdGFwcm90b2NvbC0le21ham9ybWlub3J9LnBjCisle19saWJkaXJ9L3BrZ2NvbmZpZy9nc3RyZWFtZXItbmV0LSV7bWFqb3JtaW5vcn0ucGMKKworJWRvYyAle19kYXRhZGlyfS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vKgorJWRvYyAle19kYXRhZGlyfS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtJXttYWpvcm1pbm9yfS8qCislZG9jICV7X2RhdGFkaXJ9L2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy0le21ham9ybWlub3J9LyoKKworJWNoYW5nZWxvZworKiBTYXQgQXVnIDA2IDIwMTEgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorLSBVc2UgbWFqb3JtaW5vciBjb3JyZWN0bHkgZm9yIC5naXIgZmlsZXMKKy0gUmVtb3ZlIGdzdHJlYW1lci10b29scyBjb21wbGV0ZWx5IHNpbmNlIHRoZSB1bnZlcnNpb25lZCB0b29scyBoYXZlIGJlZW4KKyAgcmVtb3ZlZAorLSBSZW5hbWUgcGFja2FnZSB0byBnc3RyZWFtZXIwMTEgdG8gYmUgcGFyYWxsZWwtaW5zdGFsbGFibGUKKworKiBUaHUgQXByIDMgMjAwOCBDaHJpc3RpYW4gU2NoYWxsZXIgPGNocmlzdGlhbi5zY2hhbGxlciBhdCBjb2xsYWJvcmEgY28gdWs+CistIFVwZGF0ZSBzcGVjIGZpbGUgdG8gbWFrZSBpbmNsdXNpb24gb2YgYWxsIGRvY3MgZXhwbGljaXQKKworKiBUdWUgRGVjIDExIDIwMDcgQ2hyaXN0aWFuIFNjaGFsbGVyIDxjaHJpc3RpYW4uc2NoYWxsZXJAY29sbGFib3JhLmNvLnVrPiAKKy0gSW1wb3J0IGZyb20gRmVkb3JhIHBhY2thZ2UKKworKiBGcmkgTm92IDE2IDIwMDcgLSBCYXN0aWVuIE5vY2VyYSA8Ym5vY2VyYUByZWRoYXQuY29tPiAtIDAuMTAuMTUtMQorLSBVcGRhdGUgdG8gMC4xMC4xNQorCisqIE1vbiBPY3QgIDEgMjAwNyBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNvbT4gLSAwLjEwLjE0LTQKKy0gQWRkIG1pc3NpbmcgUmVxdWlyZXMgKCMzMTI2NzEpCisKKyogVHVlIEF1ZyAxNCAyMDA3IE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPiAtIDAuMTAuMTQtMworLSBSZXF1aXJlIGNoZWNrLWRldmVsICgjMjUxOTU2KQorCisqIFNhdCBBdWcgMDQgMjAwNyAtIEJhc3RpZW4gTm9jZXJhIDxibm9jZXJhQHJlZGhhdC5jb20+IC0gMC4xMC4xNC0xCistIFVwZGF0ZSB0byAwLjEwLjE0CisKKyogVHVlIEp1biAwNSAyMDA3IC0gQmFzdGllbiBOb2NlcmEgPGJub2NlcmFAcmVkaGF0LmNvbT4gLSAwLjEwLjEzLTIKKy0gUmVtb3ZlIHVwc3RyZWFtZWQgZG9jcyBwYXRjaAorCisqIFR1ZSBKdW4gMDUgMjAwNyAtIEJhc3RpZW4gTm9jZXJhIDxibm9jZXJhQHJlZGhhdC5jb20+IC0gMC4xMC4xMy0xCistIFVwZGF0ZSB0byAwLjEwLjEzCisKKyogVGh1IE1hciAwOCAyMDA3IC0gQmFzdGllbiBOb2NlcmEgPGJub2NlcmFAcmVkaGF0LmNvbT4gLSAwLjEwLjEyLTEKKy0gVXBkYXRlIHRvIDAuMTAuMTIKKworKiBUdWUgRmViIDEzIDIwMDcgLSBCYXN0aWVuIE5vY2VyYSA8Ym5vY2VyYUByZWRoYXQuY29tPiAtIDAuMTAuMTEtMgorLSBSZW1vdmUgUmVxdWlyZXMgb24gcGFja2FnZXMgdGhhdCBCdWlsZFJlcXVpcmUgdXMKKworKiBUdWUgRGVjIDEyIDIwMDYgTWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+IC0gMC4xMC4xMS0xCistIFVwZGF0ZSB0byAwLjEwLjExCisKKyogRnJpIE9jdCAyNyAyMDA2IE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPiAtIDAuMTAuMTAtMgorLSBDbGVhbnVwcworLSBBdHRlbXB0IHRvIGZpeCBtdWx0aWxpYiBjb25mbGljdHMKKworKiBNb24gT2N0IDIzIDIwMDYgTWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+IC0gMC4xMC4xMC0xCistIFVwZGF0ZSB0byAwLjEwLjEwCisKKyogVGh1IEp1bCAyNyAyMDA2IE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPiAtIDAuMTAuOS0yCistIERpc2FibGUgZ3RrLWRvYyB0byBmaXggbXVsdGlsaWIgY29uZmxpY3RzCisKKyogVGh1IEp1bCAyMCAyMDA2IEpvaG4gKEo1KSBQYWxtaWVyaSA8am9obnBAcmVkaGF0LmNvbT4gLSAwLjEwLjktMQorLSBVcGRhdGUgdG8gbmV3IHVwc3RyZWFtIHZlcnNpb24KKworKiBXZWQgSnVsIDE5IDIwMDYgTWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+IC0gMC4xMC44LTQKKy0gUmUtYWRkIHRoZSBnc3RyZWFtZXItcGx1Z2lucy1nb29kIGRlcGVuZGVuY3kKKworKiBXZWQgSnVsIDE5IDIwMDYgTWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+IC0gMC4xMC44LTMuMgorLSBUZW1wb3JhcmlseSBicmVhayB0aGUgZGVwZW5kZW5jeSBjeWNsZSB3aXRoIGdzdGVhbWVyLXBsdWdpbnMtZ29vZAorCisqIFdlZCBKdWwgMTIgMjAwNiBKZXNzZSBLZWF0aW5nIDxqa2VhdGluZ0ByZWRoYXQuY29tPiAtIDAuMTAuOC0zLjEKKy0gcmVidWlsZAorCisqIFdlZCBKdW4gMjggMjAwNiBLYXJzdGVuIEhvcHAgPGthcnN0ZW5AcmVkaGF0LmRlPiAwLjEwLjgtMworLSByZW1vdmUgUlBBVEggcG9pbnRpbmcgdG8gUlBNX0JVSUxEX1JPT1QgKCMxOTY4NzApCisKKyogVHVlIEp1biAxMyAyMDA2IE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPiAtIDAuMTAuOC0yCistIFJlYnVpbGQKKworKiBUdWUgSnVuIDEzIDIwMDYgTWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+IC0gMC4xMC44LTEKKy0gVXBkYXRlIHRvIDAuMTAuOAorCisqIE1vbiBNYXkgMjIgMjAwNiBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNvbT4gLSAwLjEwLjYtMQorLSBVcGRhdGUgdG8gMC4xMC42CisKKyogVHVlIEZlYiAxNCAyMDA2IFJpayB2YW4gUmllbCA8cmllbEByZWRoYXQuY29tPiAtIDAuMTAtMy0zCistIE9ic29sZXRlIGdzdHJlYW1lci1wbHVnaW5zICgjMTgxMjk2KQorCisqIE1vbiBGZWIgMTMgMjAwNiBDaHJpc3RvcGhlciBBaWxsb24gPGNhaWxsb25AcmVkaGF0LmNvbT4gLSAwLjEwLjMtMgorLSBSZWJ1aWxkCisKKyogRnJpIEZlYiAxMCAyMDA2IENocmlzdG9waGVyIEFpbGxvbiA8Y2FpbGxvbkByZWRoYXQuY29tPiAtIDAuMTAuMy0xCistIFVwZGF0ZSB0byAwLjEwLjMKKworKiBUdWUgRmViIDA3IDIwMDYgSmVzc2UgS2VhdGluZyA8amtlYXRpbmdAcmVkaGF0LmNvbT4gLSAwLjEwLjItMS4xCistIHJlYnVpbHQgZm9yIG5ldyBnY2M0LjEgc25hcHNob3QgYW5kIGdsaWJjIGNoYW5nZXMKKworKiBXZWQgSmFuIDE4IDIwMDYgSm9obiAoSjUpIFBhbG1pZXJpIDxqb2hucEByZWRoYXQuY29tPiAtIDAuMTAuMi0xCistIFVwZ3JhZGUgdG8gMC4xMC4yCisKKyogRnJpIEphbiAwNiAyMDA2IEpvaG4gKEo1KSBQYWxtaWVyaSA8am9obnBAcmVkaGF0LmNvbT4gLSAwLjEwLjEtMQorLSBOZXcgdXBzdHJlYW0gdmVyc2lvbgorCisqIEZyaSBEZWMgMTYgMjAwNSBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIDAuMTAuMC0xCistIHJlYnVpbHQgZm9yIEZlZG9yYSBDb3JlIERldmVsb3BtZW50CisKKyogV2VkIERlYyAxNCAyMDA1IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKy0gMC4xMC4wLTAuZ3N0LjIKKy0gcmVidWlsdCBhZ2FpbnN0IG5ld2VyIEdMaWIgYW5kIGZyaWVuZHMKKworKiBNb24gRGVjIDA1IDIwMDUgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorLSAwLjEwLjAtMC5nc3QuMQorLSBuZXcgcmVsZWFzZQorCisqIFRodSBEZWMgMDEgMjAwNSBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIDAuOS43LTAuZ3N0LjEKKy0gbmV3IHJlbGVhc2UsIHdpdGggMC4xMCBtYWpvcm1pbm9yCistIHJlbW92ZWQgY29tcHByZXAgYW5kIGNvbXBsZXRlCistIGFkZGVkIHBsdWdpbnMgZG9jcworLSByZW5hbWVkIGxpYmdzdGNvcmVsZW1lbnRzLCBsaWJnc3Rjb3JlaW5kZXhlcnMKKy0gYWRkZWQgbGliZ3N0bmV0CisKKyogU2F0IE5vdiAxMiAyMDA1IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKy0gMC45LjUtMC5nc3QuMQorLSBuZXcgcmVsZWFzZQorCisqIE1vbiBPY3QgMjQgMjAwNSBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIDAuOS40LTAuZ3N0LjEKKy0gbmV3IHJlbGVhc2UKKworKiBNb24gT2N0IDAzIDIwMDUgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorLSAwLjkuMy0wLmdzdC4xCistIG5ldyByZWxlYXNlCisKKyogVGh1IFNlcCAwOCAyMDA1IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKy0gMC45LjItMC5nc3QuMQorLSBhZGRlZCBsaWJnc3RjaGVjaworLSBuZXcgcmVsZWFzZQorCisqIFRodSBKdW4gMDkgMjAwNSBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIDAuOS4xLTAuZ3N0LjEKKy0gZmlyc3QgZGV2ZWxvcG1lbnQgc2VyaWVzIHJlbGVhc2UKKworKiBUdWUgTWF5IDAzIDIwMDUgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorLSAwLjguMTAtMC5nc3QuMQorLSBuZXcgcmVsZWFzZQorLSB1cCBnbGliMiB0byAyLjQgYmVjYXVzZSBkaXN0aW5nIG9uIDIuNCBidWlsZHMgbWFyc2hhbGxpbmcgY29kZSBuZWVkaW5nIDIuNAorCisqIE1vbiBNYXkgMDIgMjAwNSBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIDAuOC45LjItMC5nc3QuMQorLSBuZXcgcHJlcmVsZWFzZQorCisqIFR1ZSBGZWIgMDggMjAwNSBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIDAuOC45LTAuZ3N0LjEKKy0gbmV3IHJlbGVhc2UKKy0gc3dpdGNoIGJhY2sgdG8gdGhlIGdzdCB0YWcgc2luY2UgZmVkb3JhLnVzIGlzIGdvbmUKKworKiBUaHUgRmViIDAzIDIwMDUgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorLSAwLjguOC4yLTAuZmRyLjEKKy0gbmV3IHByZXJlbGVhc2UKKworKiBUaHUgRGVjIDIzIDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorLSAwLjguOC0wLmZkci4xCistIG5ldyB1cHN0cmVhbSByZWxlYXNlCisKKyogRnJpIERlYyAxNyAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKy0gMC44LjcuMi0wLmZkci4xCistIG5ldyBwcmVyZWxlYXNlCistIGFkZGVkIGZhaXIgZ3RocmVhZCBzY2hlZHVsZXIKKworKiBXZWQgT2N0IDA2IDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorLSAwLjguNy0wLmZkci4xCistIHVwZGF0ZSBmb3IgbmV3IEdTdHJlYW1lciByZWxlYXNlCisKKyogVHVlIE9jdCAwNSAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKy0gMC44LjYtMC5mZHIuMQorLSB1cGRhdGUgZm9yIG5ldyBHU3RyZWFtZXIgcmVsZWFzZQorCisqIFN1biBTZXAgMjYgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIDAuOC41LjMtMC5mZHIuMQorLSB1cGRhdGUgZm9yIG5ldyBHU3RyZWFtZXIgcHJlcmVsZWFzZQorCisqIFN1biBTZXAgMTIgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIDAuOC41LjItMC5mZHIuMQorLSB1cGRhdGUgZm9yIG5ldyBHU3RyZWFtZXIgcHJlcmVsZWFzZQorCisqIE1vbiBBdWcgMTYgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIDAuOC41LTAuZmRyLjEKKy0gdXBkYXRlIGZvciBuZXcgR1N0cmVhbWVyIHJlbGVhc2UKKworKiBUaHUgQXVnIDEyIDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorLSAwLjguNC4yLTAuZmRyLjEKKy0gdXBkYXRlIGZvciBuZXcgR1N0cmVhbWVyIHByZXJlbGVhc2UKKy0gc2V0IHBhY2thZ2UgbmFtZSBhbmQgb3JpZ2luCisKKyogVHVlIEp1bCAyMCAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKy0gMC44LjQtMC5mZHIuMQorLSB1cGRhdGUgZm9yIG5ldyBHU3RyZWFtZXIgcmVsZWFzZQorLSB1bmJyZWFrIHRoZSBwb3N0dW4gc2NyaXB0IGJ5IG5vdCByZW1vdmluZyB0aGUgY2FjaGUgZGlyCisKKyogVHVlIEp1bCAyMCAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKy0gMC44LjMuMy0wLmZkci4xOiB1cGRhdGUgZm9yIG5ldyBHU3RyZWFtZXIgcHJlcmVsZWFzZQorCisqIEZyaSBKdWwgMTYgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIDAuOC4zLjItMC5mZHIuMTogdXBkYXRlIGZvciBuZXcgR1N0cmVhbWVyIHByZXJlbGVhc2UKKworKiBTYXQgSnVuIDA1IDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorLSAwLjguMy0wLmZkci4xOiB1cGRhdGUgZm9yIG5ldyBHU3RyZWFtZXIgcmVsZWFzZQorCisqIEZyaSBKdW4gMDQgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIDAuOC4yLTAuZmRyLjE6IHVwZGF0ZSBmb3IgbmV3IEdTdHJlYW1lciByZWxlYXNlCisKKyogVGh1IEFwciAxNSAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKy0gMC44LjEtMC5mZHIuMTogdXBkYXRlIGZvciBuZXcgR1N0cmVhbWVyIHJlbGVhc2UKKworKiBUaHUgQXByIDE1IDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorLSBhZGQgZW50cnkgc2NoZWR1bGVycywgY2xlYW4gdXAgc2NoZWR1bGVyIGZpbGUgc2VjdGlvbgorCisqIFR1ZSBNYXIgMTYgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIDAuOC4wLTAuZmRyLjE6IHVwZGF0ZSBmb3IgbmV3IEdTdHJlYW1lciByZWxlYXNlLCByZW5hbWVkIGJhc2UgdG8gZ3N0cmVhbWVyCisKKyogVHVlIE1hciAwOSAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKy0gMC43LjYtMC5mZHIuMTogdXBkYXRlZCBmb3IgbmV3IEdTdHJlYW1lciByZWxlYXNlLCB3aXRoIG1hai9taW4gc2V0IHRvIDAuOAorCisqIE1vbiBNYXIgMDggMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIDAuNy41LTAuZmRyLjM6IGZpeCBwb3N0dW4gc2NyaXB0CisKKyogRnJpIE1hciAwNSAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKy0gMC43LjUtMC5mZHIuMjogbmV3IHJlbGVhc2UKKworKiBXZWQgRmViIDExIDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorLSAwLjcuNC0wLmZkci4xOiBzeW5jaHJvbml6ZSB3aXRoIE1hdHRoaWFzJ3MgcGFja2FnZQorCisqIFNhdCBGZWIgMDcgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIG1ha2UgdGhlIHBhY2thZ2UgbmFtZSBnc3RyZWFtZXIwNyBzaW5jZSB0aGlzIGlzIGFuIHVuc3RhYmxlIHJlbGVhc2UKKworKiBXZWQgRmViIDA0IDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorLSBwdXQgdmVyc2lvbmVkIHRvb2xzIGluc2lkZSBiYXNlIHBhY2thZ2UsIGFuZCBwdXQgdW52ZXJzaW9uZWQgdG9vbHMgaW4gdG9vbHMKKworKiBNb24gRGVjIDAxIDIwMDMgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorLSBjaGFuZ2VkIGRvY3VtZW50YXRpb24gYnVpbGRyZXF1aXJlcworCisqIFN1biBOb3YgMDkgMjAwMyBDaHJpc3RpYW4gU2NoYWxsZXIgPFVyYWV1c0Bnbm9tZS5vcmc+CistIEZpeCBzcGVjIHRvIGhhbmRsZSBuZXcgYnl0ZXN0cmVhbSBsaWJyYXJ5IAorCisqIFN1biBBdWcgMTcgMjAwMyBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+CistIFJlbW92ZSBkb2NzIGJ1aWxkIGZyb20gUlBNIGFzIHRoZSBidWlsZCBpcyBicm9rZW4KKy0gRml4IHN0dWZmIHNpbmNlIG1vcmUgZmlsZXMgYXJlIHZlcnNpb25lZCBub3cKKy0gUmVtb3ZlIHdpbmdvIHNjaGVkdWxlcnMKKy0gUmVtb3ZlIHB1dGJpdHMgc3R1ZmYKKworKiBTdW4gTWF5IDE4IDIwMDMgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorLSBkZXZoZWxwIGZpbGVzIGFyZSBub3cgZ2VuZXJhdGVkIGJ5IGd0ay1kb2MsIGNoYW5nZWQgYWNjb3JkaW5nbHkKKworKiBTdW4gTWFyIDE2IDIwMDMgQ2hyaXN0aWFuIEYuSy4gU2NoYWxsZXIgPFVyYWV1c0Bnbm9tZS5vcmc+CistIEFkZCBndGhyZWFkIHNjaGVkdWxlcgorCisqIFNhdCBEZWMgMDcgMjAwMiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIGRlZmluZSBtYWpvcm1pbm9yIGFuZCB1c2UgaXQgZXZlcnl3aGVyZQorLSBmdWxsIHBhcmFsbGVsIGluc3RhbGxhYmlsaXR5CisKKyogVHVlIE5vdiAwNSAyMDAyIENocmlzdGlhbiBTY2hhbGxlciA8VXJhZXVzQGxpbnV4cmlzaW5nLm9yZz4KKy0gQWRkIG9wdHdpbmdvIHNjaGVkdWxlcgorKiBTYXQgT2N0IDEyIDIwMDIgQ2hyaXN0aWFuIFNjaGFsbGVyIDxVcmFldXNAbGludXhyaXNpbmcub3JnPgorLSBVcGRhdGVkIHRvIHdvcmsgYmV0dGVyIHdpdGggZGVmYXVsdCBSSDggcnBtCistIEFkZGVkIG1pc3NpbmcgdW5zcGVjZWQgZmlsZXMKKy0gUmVtb3ZlZCAuYSBhbmQgLmxhIGZpbGVzIGZyb20gYnVpbGRyb290CisKKyogU2F0IFNlcCAyMSAyMDAyIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorLSBhZGRlZCBnc3QtbWQ1c3VtCisKKyogVHVlIFNlcCAxNyAyMDAyIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorLSBhZGRpbmcgZmxleCB0byBidWlsZHJlcXVpcmVzCisKKyogRnJpIFNlcCAxMyAyMDAyIENocmlzdGlhbiBGLksuIFNjaGFsbGVyIDxVcmFldXNAbGludXhyaXNpbmcub3JnPgorLSBGaXhlZCB0aGUgc2NoZWR1bGVycyBhZnRlciB0aGUgcmVuYW1pbmcKKyogU3VuIFNlcCAwOCAyMDAyIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorLSBhZGRlZCB0cmFuc2ZpZyB0byB0aGUgQnVpbGRSZXF1aXJlczoKKworKiBTYXQgSnVuIDIyIDIwMDIgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CistIG1vdmVkIGhlYWRlciBsb2NhdGlvbgorCisqIE1vbiBKdW4gMTcgMjAwMiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKy0gYWRkZWQgcG9wdAorLSByZW1vdmVkIC5sYQorCisqIEZyaSBKdW4gMDcgMjAwMiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKy0gYWRkZWQgcmVsZWFzZSBvZiBnc3RyZWFtZXIgdG8gcmVxIG9mIGdzdHJlYW1lci1kZXZlbAorLSBjaGFuZ2VkIGxvY2F0aW9uIG9mIEFQSSBkb2NzIHRvIGJlIGluIGd0ay1kb2MgbGlrZSBvdGhlciBndGstZG9jIHN0dWZmCistIHJlb3JkZXJlZCBTUEVDIGZpbGUKKworKiBNb24gQXByIDI5IDIwMDIgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CistIG1vdmVkIGh0bWwgZG9jcyB0byBndGstZG9jIHN0YW5kYXJkIGRpcmVjdG9yeQorCisqIFR1ZSBNYXIgNSAyMDAyIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorLSBtb3ZlIHZlcnNpb24gZGVmaW5lcyBvZiBnbGliMiBhbmQgbGlieG1sMiB0byBjb25maWd1cmUuYWMKKy0gYWRkIEJ1aWxkUmVxdWlyZXMgZm9yIHRoZXNlIHR3byBsaWJzCisKKyogU3VuIE1hciAzIDIwMDIgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CistIHB1dCBodG1sIGRvY3MgaW4gY2Fub25pY2FsIHBsYWNlLCBhdm9pZGluZyAlZG9jIGVyYXN1cmUKKy0gYWRkZWQgZGV2aGVscCBzdXBwb3J0LCBjdXJyZW50IGluc3RhbGwgb2YgaXQgaXMgaGFja2lzaAorCisqIFNhdCBNYXIgMiAyMDAyIENocmlzdGlhbiBTY2hhbGxlciA8VXJhZXVzQGxpbnV4cmlzaW5nLm9yZz4KKy0gQWRkZWQgZG9jdW1lbnRhdGlvbiB0byBidWlsZAorCisqIE1vbiBGZWIgMTEgMjAwMiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKy0gYWRkZWQgbGliZ3N0YmFzaWNzY2hlZHVsZXIKKy0gcmVuYW1lZCBsaWJnc3QgdG8gbGliZ3N0cmVhbWVyCisKKyogRnJpIEphbiAwNCAyMDAyIENocmlzdGlhbiBTY2hhbGxlciA8VXJhZXVzQGxpbnV4cmlzaW5nLm9yZz4KKy0gQWRkZWQgY29uZmlnZGlyIHBhcmFtZXRlciBhcyBpdCBzZWVtcyB0aGUgY29uZmlnZGlyIGdldHMgd2VpcmQgb3RoZXJ3aXNlCisKKyogVGh1IEphbiAwMyAyMDAyIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorLSBzcGxpdCBvZmYgZ3N0cmVhbWVyLWVkaXRvciBmcm9tIGNvcmUKKy0gcmVtb3ZlZCBnc3RyZWFtZXItZ25vbWUtYXBwcworCisqIFNhdCBEZWMgMjkgMjAwMSBSb2RuZXkgRGF3ZXMgPGRvYmV5QGZyZWUuZnI+CistIENsZWFuZWQgdXAgdGhlIHNwZWMgZmlsZSBmb3IgdGhlIGdzdHJlYW1lciBjb3JlL3BsdWctaW5zIHNwbGl0CistIEltcHJvdmUgc3BlYyBmaWxlCisKKyogU2F0IERlYyAxNSAyMDAxIENocmlzdGlhbiBTY2hhbGxlciA8VXJhZXVzQGxpbnV4cmlzaW5nLm9yZz4KKy0gU3BsaXQgb2YgbW9yZSBwbHVnaW5zIGZyb20gdGhlIGNvcmUgYW5kIHB1dCB0aGVtIGludG8gdGhlaXIgb3duIG1vZHVsZXMKKy0gSW5jbHVkZXMgY29sb3JzcGFjZSwgeGZyZWUgYW5kIHdhdgorLSBJbXByb3ZlZCBwYWNrYWdlIFJlcXVpcmUgbGluZXMKKy0gQWRkZWQgbXAzZW5jb2RlIChsYW1lIGJhc2VkKSB0byB0aGUgU1BFQworCisqIFdlZCBEZWMgMTIgMjAwMSBDaHJpc3RpYW4gU2NoYWxsZXIgPFVyYWV1c0BsaW51eHJpc2luZy5vcmc+CistIFRob21hcyBtZXJnZWQgbXBlZyBwbHVnaW5zIGludG8gb25lCisqIFNhdCBEZWMgMDggMjAwMSBDaHJpc3RpYW4gU2NoYWxsZXIgPFVyYWV1c0BsaW51eHJpc2luZy5vcmc+CistIE1vcmUgbWlub3IgY2xlYW51cHMgaW5jbHVkaW5nIHNvbWUgZml4ZWQgZGVzY3JpcHRpb25zIGZyb20gQW5kcmV3IE1pdGNoZWxsCisKKyogRnJpIERlYyAwNyAyMDAxIENocmlzdGlhbiBTY2hhbGxlciA8VXJhZXVzQGxpbnV4cmlzaW5nLm9yZz4KKy0gQWRkZWQgbG9nZ2luZyB0byB0aGUgbWFrZSBzdGF0ZW1lbnQKKworKiBXZWQgRGVjIDA1IDIwMDEgQ2hyaXN0aWFuIFNjaGFsbGVyIDxVcmFldXNAbGludXhyaXNpbmcub3JnPgorLSBVcGRhdGVkIGluIHByZXBhcmF0aW9uIGZvciAwLjMuMCByZWxlYXNlCisKKyogRnJpIEp1biAyOSAyMDAxIENocmlzdGlhbiBTY2hhbGxlciA8VXJhZXVzQGxpbnV4cmlzaW5nLm9yZz4KKy0gVXBkYXRlZCBmb3IgMC4yLjEgcmVsZWFzZQorLSBTcGxpdCBvdXQgdGhlIEdVSSBwYWNrYWdlcyBpbnRvIHRoZWlyIG93biBSUE0KKy0gYWRkZWQgbmV3IHBsdWdpbnMgKEZMQUMsIGZlc3RpdmFsLCBxdWlja3RpbWUgZXRjLikKKworKiBTYXQgSnVuIDA5IDIwMDEgQ2hyaXN0aWFuIFNjaGFsbGVyIDxVcmFldXNAbGludXhyaXNpbmcub3JnPgorLSBWaXN1YWxpc2F0aW9uIHBsdWdpbnMgYnVuZGxlZCBvdXQgdG9naGV0ZXIKKy0gTW92ZWQgZmlsZXMgc2VjdGlvbnMgdXAgY2xvc2UgdG8gdGhlaXIgcmVzcGVjdGl2ZSBkZXNjcmlwdGlvbnMKKworKiBTYXQgSnVuIDAyIDIwMDEgQ2hyaXN0aWFuIFNjaGFsbGVyIDxVcmFldXNAbGludXhyaXNpbmcub3JnPgorLSBTcGxpdCB0aGUgcGFja2FnZSBpbnRvIHNlcGFyYXRlIFJQTVMsIAorICBwdXR0aW5nIG1vc3QgcGx1Z2lucyBvdXQgYnkgdGhlbXNlbHZlcy4KKworKiBGcmkgSnVuIDAxIDIwMDEgQ2hyaXN0aWFuIFNjaGFsbGVyIDxVcmFldXNAbGludXhyaXNpbmcub3JnPgorLSBVcGRhdGVkIHdpdGggY2hhbmdlIHN1Z2dlc3Rpb25zIGZyb20gRGVubmlzIEJqb3JrbHVuZAorCisqIFR1ZSBKYW4gMDkgMjAwMSBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorLSB1cGRhdGVkIHRvIGJ1aWxkIC1kZXZlbCBwYWNrYWdlIGFzIHdlbGwKKworKiBTdW4gSmFuIDMwIDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKy0gZmlyc3QgZHJhZnQgb2Ygc3BlYyBmaWxlCisKZGlmZiAtLWdpdCBhL2dzdHJlYW1lci5zcGVjLmluIGIvZ3N0cmVhbWVyLnNwZWMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBjNGQzYgotLS0gL2Rldi9udWxsCisrKyBiL2dzdHJlYW1lci5zcGVjLmluCkBAIC0wLDAgKzEsNTI0IEBACislZGVmaW5lCQlnc3RyZWFtZXIJZ3N0cmVhbWVyMDExCislZGVmaW5lCQltYWpvcm1pbm9yCUBHU1RfTUFKT1JNSU5PUkAKKworJWRlZmluZSAJX2dsaWIyCQlAR0xJQl9SRVFACisKK05hbWU6IAkJJXtnc3RyZWFtZXJ9CitWZXJzaW9uOiAJQFZFUlNJT05ACitSZWxlYXNlOiAJQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAorU3VtbWFyeTogCUdTdHJlYW1lciBzdHJlYW1pbmcgbWVkaWEgZnJhbWV3b3JrIHJ1bnRpbWUKKworR3JvdXA6IAkJQXBwbGljYXRpb25zL011bHRpbWVkaWEKK0xpY2Vuc2U6IAlMR1BMCitVUkw6CQlodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy8KK1NvdXJjZTogCWh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLSV7dmVyc2lvbn0udGFyLmJ6MgorQnVpbGRSb290OiAgICAgICV7X3RtcHBhdGh9LyV7bmFtZX0tJXt2ZXJzaW9ufS0le3JlbGVhc2V9LXJvb3QtJSgle19faWRfdX0gLW4pCisKK0J1aWxkUmVxdWlyZXM6IAlnbGliMi1kZXZlbCA+PSAle19nbGliMn0KK0J1aWxkUmVxdWlyZXM6IAliaXNvbgorQnVpbGRSZXF1aXJlczogCWZsZXgKK0J1aWxkUmVxdWlyZXM6IAltNAorQnVpbGRSZXF1aXJlczogCWNoZWNrLWRldmVsCitCdWlsZFJlcXVpcmVzOiAJZ3RrLWRvYyA+PSAxLjMKK0J1aWxkUmVxdWlyZXM6CWdldHRleHQKKworIyBiZWNhdXNlIEFNX1BST0dfTElCVE9PTCB3YXMgdXNlZCBpbiBjb25maWd1cmUuYWMKK0J1aWxkUmVxdWlyZXM6CWdjYy1jKysKKworIyMjIGRvY3VtZW50YXRpb24gcmVxdWlyZW1lbnRzCitCdWlsZFJlcXVpcmVzOiAgcHl0aG9uMgorQnVpbGRSZXF1aXJlczogIG9wZW5qYWRlCitCdWlsZFJlcXVpcmVzOiAgamFkZXRleAorQnVpbGRSZXF1aXJlczoJbGlieHNsdAorQnVpbGRSZXF1aXJlczogIGRvY2Jvb2stc3R5bGUtZHNzc2wKK0J1aWxkUmVxdWlyZXM6ICBkb2Nib29rLXN0eWxlLXhzbAorQnVpbGRSZXF1aXJlczogIGRvY2Jvb2stdXRpbHMKK0J1aWxkUmVxdWlyZXM6CXRyYW5zZmlnCitCdWlsZFJlcXVpcmVzOiAgeGZpZworQnVpbGRSZXF1aXJlczogIG5ldHBibS1wcm9ncworQnVpbGRSZXF1aXJlczogIHRldGV4LWR2aXBzCitCdWlsZFJlcXVpcmVzOiAgZ2hvc3RzY3JpcHQKK0J1aWxkUmVxdWlyZXM6ICBQeVhNTAorCislZGVzY3JpcHRpb24KK0dTdHJlYW1lciBpcyBhIHN0cmVhbWluZyBtZWRpYSBmcmFtZXdvcmssIGJhc2VkIG9uIGdyYXBocyBvZiBmaWx0ZXJzIHdoaWNoCitvcGVyYXRlIG9uIG1lZGlhIGRhdGEuIEFwcGxpY2F0aW9ucyB1c2luZyB0aGlzIGxpYnJhcnkgY2FuIGRvIGFueXRoaW5nCitmcm9tIHJlYWwtdGltZSBzb3VuZCBwcm9jZXNzaW5nIHRvIHBsYXlpbmcgdmlkZW9zLCBhbmQganVzdCBhYm91dCBhbnl0aGluZworZWxzZSBtZWRpYS1yZWxhdGVkLiAgSXRzIHBsdWdpbi1iYXNlZCBhcmNoaXRlY3R1cmUgbWVhbnMgdGhhdCBuZXcgZGF0YQordHlwZXMgb3IgcHJvY2Vzc2luZyBjYXBhYmlsaXRpZXMgY2FuIGJlIGFkZGVkIHNpbXBseSBieSBpbnN0YWxsaW5nIG5ldyAKK3BsdWdpbnMuCisKKyVwYWNrYWdlIGRldmVsCitTdW1tYXJ5OiAJTGlicmFyaWVzL2luY2x1ZGUgZmlsZXMgZm9yIEdTdHJlYW1lciBzdHJlYW1pbmcgbWVkaWEgZnJhbWV3b3JrCitHcm91cDogCQlEZXZlbG9wbWVudC9MaWJyYXJpZXMKKworUmVxdWlyZXM6IAkle25hbWV9ID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9CitSZXF1aXJlczogCWdsaWIyLWRldmVsID49ICV7X2dsaWIyfQorUmVxdWlyZXM6CWNoZWNrLWRldmVsCisKKyVkZXNjcmlwdGlvbiBkZXZlbAorR1N0cmVhbWVyIGlzIGEgc3RyZWFtaW5nIG1lZGlhIGZyYW1ld29yaywgYmFzZWQgb24gZ3JhcGhzIG9mIGZpbHRlcnMgd2hpY2gKK29wZXJhdGUgb24gbWVkaWEgZGF0YS4gQXBwbGljYXRpb25zIHVzaW5nIHRoaXMgbGlicmFyeSBjYW4gZG8gYW55dGhpbmcKK2Zyb20gcmVhbC10aW1lIHNvdW5kIHByb2Nlc3NpbmcgdG8gcGxheWluZyB2aWRlb3MsIGFuZCBqdXN0IGFib3V0IGFueXRoaW5nCitlbHNlIG1lZGlhLXJlbGF0ZWQuICBJdHMgcGx1Z2luLWJhc2VkIGFyY2hpdGVjdHVyZSBtZWFucyB0aGF0IG5ldyBkYXRhCit0eXBlcyBvciBwcm9jZXNzaW5nIGNhcGFiaWxpdGllcyBjYW4gYmUgYWRkZWQgc2ltcGx5IGJ5IGluc3RhbGxpbmcgbmV3ICAgCitwbHVnaW5zLgorCitUaGlzIHBhY2thZ2UgY29udGFpbnMgdGhlIGxpYnJhcmllcyBhbmQgaW5jbHVkZXMgZmlsZXMgbmVjZXNzYXJ5IHRvIGRldmVsb3AKK2FwcGxpY2F0aW9ucyBhbmQgcGx1Z2lucyBmb3IgR1N0cmVhbWVyLCBhcyB3ZWxsIGFzIGdlbmVyYWwgYW5kIEFQSQorZG9jdW1lbnRhdGlvbi4KKworJXByZXAKKyVzZXR1cCAtcSAtbiBnc3RyZWFtZXItJXt2ZXJzaW9ufQorCislYnVpbGQKKyMgMC4xMC4wOiBtYW51YWxzIGRvIG5vdCBidWlsZCBkdWUgdG8gYW4gb3BlbmphZGUgZXJyb3I7IGRpc2FibGUgZm9yIG5vdworJWNvbmZpZ3VyZSBcCisgIC0td2l0aC1wYWNrYWdlLW5hbWU9J2dzdHJlYW1lciBwYWNrYWdlJyBcCisgIC0td2l0aC1wYWNrYWdlLW9yaWdpbj0naHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcnIFwKKyAgLS1lbmFibGUtZGVidWcgXAorICAtLWVuYWJsZS1ndGstZG9jIFwKKyAgLS1lbmFibGUtZG9jYm9vayBcCisgIC0tZW5hYmxlLWludHJvc3BlY3Rpb249eWVzCisKKyNtYWtlICV7P19zbXBfbWZsYWdzfQorIyBGSVhNRTogZG9jcyBidWlsZGluZyBkb2Vzbid0IHdvcmsgd2l0aCBzbXAgeWV0CittYWtlCisKKyVpbnN0YWxsICAKK3JtIC1yZiAkUlBNX0JVSUxEX1JPT1QKKworIyBJbnN0YWxsIGRvYyB0ZW1wb3JhcmlseSBpbiBvcmRlciB0byBiZSBpbmNsdWRlZCBsYXRlciBieSBycG0KK21ha2UgaW5zdGFsbCBERVNURElSPSRSUE1fQlVJTERfUk9PVAorCislZmluZF9sYW5nIGdzdHJlYW1lci0le21ham9ybWlub3J9CisjIENsZWFuIG91dCBmaWxlcyB0aGF0IHNob3VsZCBub3QgYmUgcGFydCBvZiB0aGUgcnBtLiAKK21rZGlyIC1wICRSUE1fQlVJTERfUk9PVCV7X2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL2dzdHJlYW1lci0le21ham9ybWlub3J9CitybSAtZiAkUlBNX0JVSUxEX1JPT1Qle19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9LyoubGEKK3JtIC1mICRSUE1fQlVJTERfUk9PVCV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vKi5hCitybSAtZiAkUlBNX0JVSUxEX1JPT1Qle19saWJkaXJ9LyouYQorcm0gLWYgJFJQTV9CVUlMRF9ST09UJXtfbGliZGlyfS8qLmxhCisjIENyZWF0ZSBlbXB0eSBjYWNoZSBkaXJlY3RvcnkKK21rZGlyIC1wICRSUE1fQlVJTERfUk9PVCV7X2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL2dzdHJlYW1lci0le21ham9ybWlub3J9CisKKyVjbGVhbgorcm0gLXJmICRSUE1fQlVJTERfUk9PVAorCislcG9zdCAtcCAvc2Jpbi9sZGNvbmZpZworCislcG9zdHVuIC1wIC9zYmluL2xkY29uZmlnCisKKyVmaWxlcyAtZiBnc3RyZWFtZXItJXttYWpvcm1pbm9yfS5sYW5nCislZGVmYXR0cigtLCByb290LCByb290LCAtKQorJWRvYyBBVVRIT1JTIENPUFlJTkcgTkVXUyBSRUFETUUgUkVMRUFTRSBUT0RPCisle19saWJkaXJ9L2xpYmdzdHJlYW1lci0le21ham9ybWlub3J9LnNvLioKKyV7X2xpYmRpcn0vbGliZ3N0YmFzZS0le21ham9ybWlub3J9LnNvLioKKyV7X2xpYmRpcn0vbGliZ3N0Y29udHJvbGxlci0le21ham9ybWlub3J9LnNvLioKKyV7X2xpYmRpcn0vbGliZ3N0ZGF0YXByb3RvY29sLSV7bWFqb3JtaW5vcn0uc28uKgorJXtfbGliZGlyfS9saWJnc3RuZXQtJXttYWpvcm1pbm9yfS5zby4qCisKKyVkaXIgJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfQorJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3Rjb3JlZWxlbWVudHMuc28KKyV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0Y29yZWluZGV4ZXJzLnNvCisKKyV7X2JpbmRpcn0vZ3N0LWluc3BlY3QtJXttYWpvcm1pbm9yfQorJXtfYmluZGlyfS9nc3QtbGF1bmNoLSV7bWFqb3JtaW5vcn0KKyV7X2JpbmRpcn0vZ3N0LXR5cGVmaW5kLSV7bWFqb3JtaW5vcn0KKyV7X2xpYmV4ZWNkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2dzdC1wbHVnaW4tc2Nhbm5lcgorJWRvYyAle19tYW5kaXJ9L21hbjEvZ3N0LWluc3BlY3QtJXttYWpvcm1pbm9yfS4qCislZG9jICV7X21hbmRpcn0vbWFuMS9nc3QtbGF1bmNoLSV7bWFqb3JtaW5vcn0uKgorJWRvYyAle19tYW5kaXJ9L21hbjEvZ3N0LXR5cGVmaW5kLSV7bWFqb3JtaW5vcn0uKgorJWRvYyAle19kYXRhZGlyfS9kb2MvZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbWFudWFsCislZG9jICV7X2RhdGFkaXJ9L2RvYy9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9wd2cKKyVkb2MgJXtfZGF0YWRpcn0vZG9jL2dzdHJlYW1lci0le21ham9ybWlub3J9L2ZhcS8KKyV7X2xpYmRpcn0vZ2lyZXBvc2l0b3J5LTEuMC9Hc3QtJXttYWpvcm1pbm9yfS50eXBlbGliCisle19saWJkaXJ9L2dpcmVwb3NpdG9yeS0xLjAvR3N0QmFzZS0le21ham9ybWlub3J9LnR5cGVsaWIKKyV7X2xpYmRpcn0vZ2lyZXBvc2l0b3J5LTEuMC9Hc3RDaGVjay0le21ham9ybWlub3J9LnR5cGVsaWIKKyV7X2xpYmRpcn0vZ2lyZXBvc2l0b3J5LTEuMC9Hc3RDb250cm9sbGVyLSV7bWFqb3JtaW5vcn0udHlwZWxpYgorJXtfbGliZGlyfS9naXJlcG9zaXRvcnktMS4wL0dzdE5ldC0le21ham9ybWlub3J9LnR5cGVsaWIKKyV7X2RhdGFkaXJ9L2dpci0xLjAvR3N0LSV7bWFqb3JtaW5vcn0uZ2lyCisle19kYXRhZGlyfS9naXItMS4wL0dzdEJhc2UtJXttYWpvcm1pbm9yfS5naXIKKyV7X2RhdGFkaXJ9L2dpci0xLjAvR3N0Q2hlY2stJXttYWpvcm1pbm9yfS5naXIKKyV7X2RhdGFkaXJ9L2dpci0xLjAvR3N0Q29udHJvbGxlci0le21ham9ybWlub3J9LmdpcgorJXtfZGF0YWRpcn0vZ2lyLTEuMC9Hc3ROZXQtJXttYWpvcm1pbm9yfS5naXIKKworJWZpbGVzIGRldmVsCislZGVmYXR0cigtLCByb290LCByb290LCAtKQorJWRpciAle19pbmNsdWRlZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfQorJWRpciAle19pbmNsdWRlZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9nc3QKKyV7X2luY2x1ZGVkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2dzdC8qLmgKKworJXtfaW5jbHVkZWRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vZ3N0L2Jhc2UKKyV7X2luY2x1ZGVkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2dzdC9jaGVjaworJXtfaW5jbHVkZWRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vZ3N0L2NvbnRyb2xsZXIKKyV7X2luY2x1ZGVkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2dzdC9kYXRhcHJvdG9jb2wKKyV7X2luY2x1ZGVkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2dzdC9uZXQKKworJXtfbGliZGlyfS9saWJnc3RyZWFtZXItJXttYWpvcm1pbm9yfS5zbworJXtfbGliZGlyfS9saWJnc3RkYXRhcHJvdG9jb2wtJXttYWpvcm1pbm9yfS5zbworJXtfbGliZGlyfS9saWJnc3RiYXNlLSV7bWFqb3JtaW5vcn0uc28KKyV7X2xpYmRpcn0vbGliZ3N0Y2hlY2stJXttYWpvcm1pbm9yfS5zbyoKKyV7X2xpYmRpcn0vbGliZ3N0Y29udHJvbGxlci0le21ham9ybWlub3J9LnNvCisle19saWJkaXJ9L2xpYmdzdG5ldC0le21ham9ybWlub3J9LnNvCisKKyV7X2RhdGFkaXJ9L2FjbG9jYWwvZ3N0LWVsZW1lbnQtY2hlY2stJXttYWpvcm1pbm9yfS5tNAorJXtfbGliZGlyfS9wa2djb25maWcvZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0ucGMKKyV7X2xpYmRpcn0vcGtnY29uZmlnL2dzdHJlYW1lci1iYXNlLSV7bWFqb3JtaW5vcn0ucGMKKyV7X2xpYmRpcn0vcGtnY29uZmlnL2dzdHJlYW1lci1jb250cm9sbGVyLSV7bWFqb3JtaW5vcn0ucGMKKyV7X2xpYmRpcn0vcGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay0le21ham9ybWlub3J9LnBjCisle19saWJkaXJ9L3BrZ2NvbmZpZy9nc3RyZWFtZXItZGF0YXByb3RvY29sLSV7bWFqb3JtaW5vcn0ucGMKKyV7X2xpYmRpcn0vcGtnY29uZmlnL2dzdHJlYW1lci1uZXQtJXttYWpvcm1pbm9yfS5wYworCislZG9jICV7X2RhdGFkaXJ9L2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS8qCislZG9jICV7X2RhdGFkaXJ9L2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0le21ham9ybWlub3J9LyoKKyVkb2MgJXtfZGF0YWRpcn0vZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLSV7bWFqb3JtaW5vcn0vKgorCislY2hhbmdlbG9nCisqIFNhdCBBdWcgMDYgMjAxMSBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIFVzZSBtYWpvcm1pbm9yIGNvcnJlY3RseSBmb3IgLmdpciBmaWxlcworLSBSZW1vdmUgZ3N0cmVhbWVyLXRvb2xzIGNvbXBsZXRlbHkgc2luY2UgdGhlIHVudmVyc2lvbmVkIHRvb2xzIGhhdmUgYmVlbgorICByZW1vdmVkCistIFJlbmFtZSBwYWNrYWdlIHRvIGdzdHJlYW1lcjAxMSB0byBiZSBwYXJhbGxlbC1pbnN0YWxsYWJsZQorCisqIFRodSBBcHIgMyAyMDA4IENocmlzdGlhbiBTY2hhbGxlciA8Y2hyaXN0aWFuLnNjaGFsbGVyIGF0IGNvbGxhYm9yYSBjbyB1az4KKy0gVXBkYXRlIHNwZWMgZmlsZSB0byBtYWtlIGluY2x1c2lvbiBvZiBhbGwgZG9jcyBleHBsaWNpdAorCisqIFR1ZSBEZWMgMTEgMjAwNyBDaHJpc3RpYW4gU2NoYWxsZXIgPGNocmlzdGlhbi5zY2hhbGxlckBjb2xsYWJvcmEuY28udWs+IAorLSBJbXBvcnQgZnJvbSBGZWRvcmEgcGFja2FnZQorCisqIEZyaSBOb3YgMTYgMjAwNyAtIEJhc3RpZW4gTm9jZXJhIDxibm9jZXJhQHJlZGhhdC5jb20+IC0gMC4xMC4xNS0xCistIFVwZGF0ZSB0byAwLjEwLjE1CisKKyogTW9uIE9jdCAgMSAyMDA3IE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPiAtIDAuMTAuMTQtNAorLSBBZGQgbWlzc2luZyBSZXF1aXJlcyAoIzMxMjY3MSkKKworKiBUdWUgQXVnIDE0IDIwMDcgTWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+IC0gMC4xMC4xNC0zCistIFJlcXVpcmUgY2hlY2stZGV2ZWwgKCMyNTE5NTYpCisKKyogU2F0IEF1ZyAwNCAyMDA3IC0gQmFzdGllbiBOb2NlcmEgPGJub2NlcmFAcmVkaGF0LmNvbT4gLSAwLjEwLjE0LTEKKy0gVXBkYXRlIHRvIDAuMTAuMTQKKworKiBUdWUgSnVuIDA1IDIwMDcgLSBCYXN0aWVuIE5vY2VyYSA8Ym5vY2VyYUByZWRoYXQuY29tPiAtIDAuMTAuMTMtMgorLSBSZW1vdmUgdXBzdHJlYW1lZCBkb2NzIHBhdGNoCisKKyogVHVlIEp1biAwNSAyMDA3IC0gQmFzdGllbiBOb2NlcmEgPGJub2NlcmFAcmVkaGF0LmNvbT4gLSAwLjEwLjEzLTEKKy0gVXBkYXRlIHRvIDAuMTAuMTMKKworKiBUaHUgTWFyIDA4IDIwMDcgLSBCYXN0aWVuIE5vY2VyYSA8Ym5vY2VyYUByZWRoYXQuY29tPiAtIDAuMTAuMTItMQorLSBVcGRhdGUgdG8gMC4xMC4xMgorCisqIFR1ZSBGZWIgMTMgMjAwNyAtIEJhc3RpZW4gTm9jZXJhIDxibm9jZXJhQHJlZGhhdC5jb20+IC0gMC4xMC4xMS0yCistIFJlbW92ZSBSZXF1aXJlcyBvbiBwYWNrYWdlcyB0aGF0IEJ1aWxkUmVxdWlyZSB1cworCisqIFR1ZSBEZWMgMTIgMjAwNiBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNvbT4gLSAwLjEwLjExLTEKKy0gVXBkYXRlIHRvIDAuMTAuMTEKKworKiBGcmkgT2N0IDI3IDIwMDYgTWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+IC0gMC4xMC4xMC0yCistIENsZWFudXBzCistIEF0dGVtcHQgdG8gZml4IG11bHRpbGliIGNvbmZsaWN0cworCisqIE1vbiBPY3QgMjMgMjAwNiBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNvbT4gLSAwLjEwLjEwLTEKKy0gVXBkYXRlIHRvIDAuMTAuMTAKKworKiBUaHUgSnVsIDI3IDIwMDYgTWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+IC0gMC4xMC45LTIKKy0gRGlzYWJsZSBndGstZG9jIHRvIGZpeCBtdWx0aWxpYiBjb25mbGljdHMKKworKiBUaHUgSnVsIDIwIDIwMDYgSm9obiAoSjUpIFBhbG1pZXJpIDxqb2hucEByZWRoYXQuY29tPiAtIDAuMTAuOS0xCistIFVwZGF0ZSB0byBuZXcgdXBzdHJlYW0gdmVyc2lvbgorCisqIFdlZCBKdWwgMTkgMjAwNiBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNvbT4gLSAwLjEwLjgtNAorLSBSZS1hZGQgdGhlIGdzdHJlYW1lci1wbHVnaW5zLWdvb2QgZGVwZW5kZW5jeQorCisqIFdlZCBKdWwgMTkgMjAwNiBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNvbT4gLSAwLjEwLjgtMy4yCistIFRlbXBvcmFyaWx5IGJyZWFrIHRoZSBkZXBlbmRlbmN5IGN5Y2xlIHdpdGggZ3N0ZWFtZXItcGx1Z2lucy1nb29kCisKKyogV2VkIEp1bCAxMiAyMDA2IEplc3NlIEtlYXRpbmcgPGprZWF0aW5nQHJlZGhhdC5jb20+IC0gMC4xMC44LTMuMQorLSByZWJ1aWxkCisKKyogV2VkIEp1biAyOCAyMDA2IEthcnN0ZW4gSG9wcCA8a2Fyc3RlbkByZWRoYXQuZGU+IDAuMTAuOC0zCistIHJlbW92ZSBSUEFUSCBwb2ludGluZyB0byBSUE1fQlVJTERfUk9PVCAoIzE5Njg3MCkKKworKiBUdWUgSnVuIDEzIDIwMDYgTWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+IC0gMC4xMC44LTIKKy0gUmVidWlsZAorCisqIFR1ZSBKdW4gMTMgMjAwNiBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNvbT4gLSAwLjEwLjgtMQorLSBVcGRhdGUgdG8gMC4xMC44CisKKyogTW9uIE1heSAyMiAyMDA2IE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPiAtIDAuMTAuNi0xCistIFVwZGF0ZSB0byAwLjEwLjYKKworKiBUdWUgRmViIDE0IDIwMDYgUmlrIHZhbiBSaWVsIDxyaWVsQHJlZGhhdC5jb20+IC0gMC4xMC0zLTMKKy0gT2Jzb2xldGUgZ3N0cmVhbWVyLXBsdWdpbnMgKCMxODEyOTYpCisKKyogTW9uIEZlYiAxMyAyMDA2IENocmlzdG9waGVyIEFpbGxvbiA8Y2FpbGxvbkByZWRoYXQuY29tPiAtIDAuMTAuMy0yCistIFJlYnVpbGQKKworKiBGcmkgRmViIDEwIDIwMDYgQ2hyaXN0b3BoZXIgQWlsbG9uIDxjYWlsbG9uQHJlZGhhdC5jb20+IC0gMC4xMC4zLTEKKy0gVXBkYXRlIHRvIDAuMTAuMworCisqIFR1ZSBGZWIgMDcgMjAwNiBKZXNzZSBLZWF0aW5nIDxqa2VhdGluZ0ByZWRoYXQuY29tPiAtIDAuMTAuMi0xLjEKKy0gcmVidWlsdCBmb3IgbmV3IGdjYzQuMSBzbmFwc2hvdCBhbmQgZ2xpYmMgY2hhbmdlcworCisqIFdlZCBKYW4gMTggMjAwNiBKb2huIChKNSkgUGFsbWllcmkgPGpvaG5wQHJlZGhhdC5jb20+IC0gMC4xMC4yLTEKKy0gVXBncmFkZSB0byAwLjEwLjIKKworKiBGcmkgSmFuIDA2IDIwMDYgSm9obiAoSjUpIFBhbG1pZXJpIDxqb2hucEByZWRoYXQuY29tPiAtIDAuMTAuMS0xCistIE5ldyB1cHN0cmVhbSB2ZXJzaW9uCisKKyogRnJpIERlYyAxNiAyMDA1IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKy0gMC4xMC4wLTEKKy0gcmVidWlsdCBmb3IgRmVkb3JhIENvcmUgRGV2ZWxvcG1lbnQKKworKiBXZWQgRGVjIDE0IDIwMDUgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorLSAwLjEwLjAtMC5nc3QuMgorLSByZWJ1aWx0IGFnYWluc3QgbmV3ZXIgR0xpYiBhbmQgZnJpZW5kcworCisqIE1vbiBEZWMgMDUgMjAwNSBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIDAuMTAuMC0wLmdzdC4xCistIG5ldyByZWxlYXNlCisKKyogVGh1IERlYyAwMSAyMDA1IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKy0gMC45LjctMC5nc3QuMQorLSBuZXcgcmVsZWFzZSwgd2l0aCAwLjEwIG1ham9ybWlub3IKKy0gcmVtb3ZlZCBjb21wcHJlcCBhbmQgY29tcGxldGUKKy0gYWRkZWQgcGx1Z2lucyBkb2NzCistIHJlbmFtZWQgbGliZ3N0Y29yZWxlbWVudHMsIGxpYmdzdGNvcmVpbmRleGVycworLSBhZGRlZCBsaWJnc3RuZXQKKworKiBTYXQgTm92IDEyIDIwMDUgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorLSAwLjkuNS0wLmdzdC4xCistIG5ldyByZWxlYXNlCisKKyogTW9uIE9jdCAyNCAyMDA1IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKy0gMC45LjQtMC5nc3QuMQorLSBuZXcgcmVsZWFzZQorCisqIE1vbiBPY3QgMDMgMjAwNSBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIDAuOS4zLTAuZ3N0LjEKKy0gbmV3IHJlbGVhc2UKKworKiBUaHUgU2VwIDA4IDIwMDUgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorLSAwLjkuMi0wLmdzdC4xCistIGFkZGVkIGxpYmdzdGNoZWNrCistIG5ldyByZWxlYXNlCisKKyogVGh1IEp1biAwOSAyMDA1IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKy0gMC45LjEtMC5nc3QuMQorLSBmaXJzdCBkZXZlbG9wbWVudCBzZXJpZXMgcmVsZWFzZQorCisqIFR1ZSBNYXkgMDMgMjAwNSBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIDAuOC4xMC0wLmdzdC4xCistIG5ldyByZWxlYXNlCistIHVwIGdsaWIyIHRvIDIuNCBiZWNhdXNlIGRpc3Rpbmcgb24gMi40IGJ1aWxkcyBtYXJzaGFsbGluZyBjb2RlIG5lZWRpbmcgMi40CisKKyogTW9uIE1heSAwMiAyMDA1IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKy0gMC44LjkuMi0wLmdzdC4xCistIG5ldyBwcmVyZWxlYXNlCisKKyogVHVlIEZlYiAwOCAyMDA1IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKy0gMC44LjktMC5nc3QuMQorLSBuZXcgcmVsZWFzZQorLSBzd2l0Y2ggYmFjayB0byB0aGUgZ3N0IHRhZyBzaW5jZSBmZWRvcmEudXMgaXMgZ29uZQorCisqIFRodSBGZWIgMDMgMjAwNSBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIDAuOC44LjItMC5mZHIuMQorLSBuZXcgcHJlcmVsZWFzZQorCisqIFRodSBEZWMgMjMgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIDAuOC44LTAuZmRyLjEKKy0gbmV3IHVwc3RyZWFtIHJlbGVhc2UKKworKiBGcmkgRGVjIDE3IDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorLSAwLjguNy4yLTAuZmRyLjEKKy0gbmV3IHByZXJlbGVhc2UKKy0gYWRkZWQgZmFpciBndGhyZWFkIHNjaGVkdWxlcgorCisqIFdlZCBPY3QgMDYgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIDAuOC43LTAuZmRyLjEKKy0gdXBkYXRlIGZvciBuZXcgR1N0cmVhbWVyIHJlbGVhc2UKKworKiBUdWUgT2N0IDA1IDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorLSAwLjguNi0wLmZkci4xCistIHVwZGF0ZSBmb3IgbmV3IEdTdHJlYW1lciByZWxlYXNlCisKKyogU3VuIFNlcCAyNiAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKy0gMC44LjUuMy0wLmZkci4xCistIHVwZGF0ZSBmb3IgbmV3IEdTdHJlYW1lciBwcmVyZWxlYXNlCisKKyogU3VuIFNlcCAxMiAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKy0gMC44LjUuMi0wLmZkci4xCistIHVwZGF0ZSBmb3IgbmV3IEdTdHJlYW1lciBwcmVyZWxlYXNlCisKKyogTW9uIEF1ZyAxNiAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKy0gMC44LjUtMC5mZHIuMQorLSB1cGRhdGUgZm9yIG5ldyBHU3RyZWFtZXIgcmVsZWFzZQorCisqIFRodSBBdWcgMTIgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIDAuOC40LjItMC5mZHIuMQorLSB1cGRhdGUgZm9yIG5ldyBHU3RyZWFtZXIgcHJlcmVsZWFzZQorLSBzZXQgcGFja2FnZSBuYW1lIGFuZCBvcmlnaW4KKworKiBUdWUgSnVsIDIwIDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorLSAwLjguNC0wLmZkci4xCistIHVwZGF0ZSBmb3IgbmV3IEdTdHJlYW1lciByZWxlYXNlCistIHVuYnJlYWsgdGhlIHBvc3R1biBzY3JpcHQgYnkgbm90IHJlbW92aW5nIHRoZSBjYWNoZSBkaXIKKworKiBUdWUgSnVsIDIwIDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorLSAwLjguMy4zLTAuZmRyLjE6IHVwZGF0ZSBmb3IgbmV3IEdTdHJlYW1lciBwcmVyZWxlYXNlCisKKyogRnJpIEp1bCAxNiAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKy0gMC44LjMuMi0wLmZkci4xOiB1cGRhdGUgZm9yIG5ldyBHU3RyZWFtZXIgcHJlcmVsZWFzZQorCisqIFNhdCBKdW4gMDUgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIDAuOC4zLTAuZmRyLjE6IHVwZGF0ZSBmb3IgbmV3IEdTdHJlYW1lciByZWxlYXNlCisKKyogRnJpIEp1biAwNCAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKy0gMC44LjItMC5mZHIuMTogdXBkYXRlIGZvciBuZXcgR1N0cmVhbWVyIHJlbGVhc2UKKworKiBUaHUgQXByIDE1IDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorLSAwLjguMS0wLmZkci4xOiB1cGRhdGUgZm9yIG5ldyBHU3RyZWFtZXIgcmVsZWFzZQorCisqIFRodSBBcHIgMTUgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIGFkZCBlbnRyeSBzY2hlZHVsZXJzLCBjbGVhbiB1cCBzY2hlZHVsZXIgZmlsZSBzZWN0aW9uCisKKyogVHVlIE1hciAxNiAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKy0gMC44LjAtMC5mZHIuMTogdXBkYXRlIGZvciBuZXcgR1N0cmVhbWVyIHJlbGVhc2UsIHJlbmFtZWQgYmFzZSB0byBnc3RyZWFtZXIKKworKiBUdWUgTWFyIDA5IDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorLSAwLjcuNi0wLmZkci4xOiB1cGRhdGVkIGZvciBuZXcgR1N0cmVhbWVyIHJlbGVhc2UsIHdpdGggbWFqL21pbiBzZXQgdG8gMC44CisKKyogTW9uIE1hciAwOCAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKy0gMC43LjUtMC5mZHIuMzogZml4IHBvc3R1biBzY3JpcHQKKworKiBGcmkgTWFyIDA1IDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorLSAwLjcuNS0wLmZkci4yOiBuZXcgcmVsZWFzZQorCisqIFdlZCBGZWIgMTEgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIDAuNy40LTAuZmRyLjE6IHN5bmNocm9uaXplIHdpdGggTWF0dGhpYXMncyBwYWNrYWdlCisKKyogU2F0IEZlYiAwNyAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKy0gbWFrZSB0aGUgcGFja2FnZSBuYW1lIGdzdHJlYW1lcjA3IHNpbmNlIHRoaXMgaXMgYW4gdW5zdGFibGUgcmVsZWFzZQorCisqIFdlZCBGZWIgMDQgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIHB1dCB2ZXJzaW9uZWQgdG9vbHMgaW5zaWRlIGJhc2UgcGFja2FnZSwgYW5kIHB1dCB1bnZlcnNpb25lZCB0b29scyBpbiB0b29scworCisqIE1vbiBEZWMgMDEgMjAwMyBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIGNoYW5nZWQgZG9jdW1lbnRhdGlvbiBidWlsZHJlcXVpcmVzCisKKyogU3VuIE5vdiAwOSAyMDAzIENocmlzdGlhbiBTY2hhbGxlciA8VXJhZXVzQGdub21lLm9yZz4KKy0gRml4IHNwZWMgdG8gaGFuZGxlIG5ldyBieXRlc3RyZWFtIGxpYnJhcnkgCisKKyogU3VuIEF1ZyAxNyAyMDAzIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KKy0gUmVtb3ZlIGRvY3MgYnVpbGQgZnJvbSBSUE0gYXMgdGhlIGJ1aWxkIGlzIGJyb2tlbgorLSBGaXggc3R1ZmYgc2luY2UgbW9yZSBmaWxlcyBhcmUgdmVyc2lvbmVkIG5vdworLSBSZW1vdmUgd2luZ28gc2NoZWR1bGVycworLSBSZW1vdmUgcHV0Yml0cyBzdHVmZgorCisqIFN1biBNYXkgMTggMjAwMyBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CistIGRldmhlbHAgZmlsZXMgYXJlIG5vdyBnZW5lcmF0ZWQgYnkgZ3RrLWRvYywgY2hhbmdlZCBhY2NvcmRpbmdseQorCisqIFN1biBNYXIgMTYgMjAwMyBDaHJpc3RpYW4gRi5LLiBTY2hhbGxlciA8VXJhZXVzQGdub21lLm9yZz4KKy0gQWRkIGd0aHJlYWQgc2NoZWR1bGVyCisKKyogU2F0IERlYyAwNyAyMDAyIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKy0gZGVmaW5lIG1ham9ybWlub3IgYW5kIHVzZSBpdCBldmVyeXdoZXJlCistIGZ1bGwgcGFyYWxsZWwgaW5zdGFsbGFiaWxpdHkKKworKiBUdWUgTm92IDA1IDIwMDIgQ2hyaXN0aWFuIFNjaGFsbGVyIDxVcmFldXNAbGludXhyaXNpbmcub3JnPgorLSBBZGQgb3B0d2luZ28gc2NoZWR1bGVyCisqIFNhdCBPY3QgMTIgMjAwMiBDaHJpc3RpYW4gU2NoYWxsZXIgPFVyYWV1c0BsaW51eHJpc2luZy5vcmc+CistIFVwZGF0ZWQgdG8gd29yayBiZXR0ZXIgd2l0aCBkZWZhdWx0IFJIOCBycG0KKy0gQWRkZWQgbWlzc2luZyB1bnNwZWNlZCBmaWxlcworLSBSZW1vdmVkIC5hIGFuZCAubGEgZmlsZXMgZnJvbSBidWlsZHJvb3QKKworKiBTYXQgU2VwIDIxIDIwMDIgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CistIGFkZGVkIGdzdC1tZDVzdW0KKworKiBUdWUgU2VwIDE3IDIwMDIgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CistIGFkZGluZyBmbGV4IHRvIGJ1aWxkcmVxdWlyZXMKKworKiBGcmkgU2VwIDEzIDIwMDIgQ2hyaXN0aWFuIEYuSy4gU2NoYWxsZXIgPFVyYWV1c0BsaW51eHJpc2luZy5vcmc+CistIEZpeGVkIHRoZSBzY2hlZHVsZXJzIGFmdGVyIHRoZSByZW5hbWluZworKiBTdW4gU2VwIDA4IDIwMDIgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CistIGFkZGVkIHRyYW5zZmlnIHRvIHRoZSBCdWlsZFJlcXVpcmVzOgorCisqIFNhdCBKdW4gMjIgMjAwMiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKy0gbW92ZWQgaGVhZGVyIGxvY2F0aW9uCisKKyogTW9uIEp1biAxNyAyMDAyIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorLSBhZGRlZCBwb3B0CistIHJlbW92ZWQgLmxhCisKKyogRnJpIEp1biAwNyAyMDAyIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorLSBhZGRlZCByZWxlYXNlIG9mIGdzdHJlYW1lciB0byByZXEgb2YgZ3N0cmVhbWVyLWRldmVsCistIGNoYW5nZWQgbG9jYXRpb24gb2YgQVBJIGRvY3MgdG8gYmUgaW4gZ3RrLWRvYyBsaWtlIG90aGVyIGd0ay1kb2Mgc3R1ZmYKKy0gcmVvcmRlcmVkIFNQRUMgZmlsZQorCisqIE1vbiBBcHIgMjkgMjAwMiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKy0gbW92ZWQgaHRtbCBkb2NzIHRvIGd0ay1kb2Mgc3RhbmRhcmQgZGlyZWN0b3J5CisKKyogVHVlIE1hciA1IDIwMDIgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CistIG1vdmUgdmVyc2lvbiBkZWZpbmVzIG9mIGdsaWIyIGFuZCBsaWJ4bWwyIHRvIGNvbmZpZ3VyZS5hYworLSBhZGQgQnVpbGRSZXF1aXJlcyBmb3IgdGhlc2UgdHdvIGxpYnMKKworKiBTdW4gTWFyIDMgMjAwMiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKy0gcHV0IGh0bWwgZG9jcyBpbiBjYW5vbmljYWwgcGxhY2UsIGF2b2lkaW5nICVkb2MgZXJhc3VyZQorLSBhZGRlZCBkZXZoZWxwIHN1cHBvcnQsIGN1cnJlbnQgaW5zdGFsbCBvZiBpdCBpcyBoYWNraXNoCisKKyogU2F0IE1hciAyIDIwMDIgQ2hyaXN0aWFuIFNjaGFsbGVyIDxVcmFldXNAbGludXhyaXNpbmcub3JnPgorLSBBZGRlZCBkb2N1bWVudGF0aW9uIHRvIGJ1aWxkCisKKyogTW9uIEZlYiAxMSAyMDAyIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorLSBhZGRlZCBsaWJnc3RiYXNpY3NjaGVkdWxlcgorLSByZW5hbWVkIGxpYmdzdCB0byBsaWJnc3RyZWFtZXIKKworKiBGcmkgSmFuIDA0IDIwMDIgQ2hyaXN0aWFuIFNjaGFsbGVyIDxVcmFldXNAbGludXhyaXNpbmcub3JnPgorLSBBZGRlZCBjb25maWdkaXIgcGFyYW1ldGVyIGFzIGl0IHNlZW1zIHRoZSBjb25maWdkaXIgZ2V0cyB3ZWlyZCBvdGhlcndpc2UKKworKiBUaHUgSmFuIDAzIDIwMDIgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CistIHNwbGl0IG9mZiBnc3RyZWFtZXItZWRpdG9yIGZyb20gY29yZQorLSByZW1vdmVkIGdzdHJlYW1lci1nbm9tZS1hcHBzCisKKyogU2F0IERlYyAyOSAyMDAxIFJvZG5leSBEYXdlcyA8ZG9iZXlAZnJlZS5mcj4KKy0gQ2xlYW5lZCB1cCB0aGUgc3BlYyBmaWxlIGZvciB0aGUgZ3N0cmVhbWVyIGNvcmUvcGx1Zy1pbnMgc3BsaXQKKy0gSW1wcm92ZSBzcGVjIGZpbGUKKworKiBTYXQgRGVjIDE1IDIwMDEgQ2hyaXN0aWFuIFNjaGFsbGVyIDxVcmFldXNAbGludXhyaXNpbmcub3JnPgorLSBTcGxpdCBvZiBtb3JlIHBsdWdpbnMgZnJvbSB0aGUgY29yZSBhbmQgcHV0IHRoZW0gaW50byB0aGVpciBvd24gbW9kdWxlcworLSBJbmNsdWRlcyBjb2xvcnNwYWNlLCB4ZnJlZSBhbmQgd2F2CistIEltcHJvdmVkIHBhY2thZ2UgUmVxdWlyZSBsaW5lcworLSBBZGRlZCBtcDNlbmNvZGUgKGxhbWUgYmFzZWQpIHRvIHRoZSBTUEVDCisKKyogV2VkIERlYyAxMiAyMDAxIENocmlzdGlhbiBTY2hhbGxlciA8VXJhZXVzQGxpbnV4cmlzaW5nLm9yZz4KKy0gVGhvbWFzIG1lcmdlZCBtcGVnIHBsdWdpbnMgaW50byBvbmUKKyogU2F0IERlYyAwOCAyMDAxIENocmlzdGlhbiBTY2hhbGxlciA8VXJhZXVzQGxpbnV4cmlzaW5nLm9yZz4KKy0gTW9yZSBtaW5vciBjbGVhbnVwcyBpbmNsdWRpbmcgc29tZSBmaXhlZCBkZXNjcmlwdGlvbnMgZnJvbSBBbmRyZXcgTWl0Y2hlbGwKKworKiBGcmkgRGVjIDA3IDIwMDEgQ2hyaXN0aWFuIFNjaGFsbGVyIDxVcmFldXNAbGludXhyaXNpbmcub3JnPgorLSBBZGRlZCBsb2dnaW5nIHRvIHRoZSBtYWtlIHN0YXRlbWVudAorCisqIFdlZCBEZWMgMDUgMjAwMSBDaHJpc3RpYW4gU2NoYWxsZXIgPFVyYWV1c0BsaW51eHJpc2luZy5vcmc+CistIFVwZGF0ZWQgaW4gcHJlcGFyYXRpb24gZm9yIDAuMy4wIHJlbGVhc2UKKworKiBGcmkgSnVuIDI5IDIwMDEgQ2hyaXN0aWFuIFNjaGFsbGVyIDxVcmFldXNAbGludXhyaXNpbmcub3JnPgorLSBVcGRhdGVkIGZvciAwLjIuMSByZWxlYXNlCistIFNwbGl0IG91dCB0aGUgR1VJIHBhY2thZ2VzIGludG8gdGhlaXIgb3duIFJQTQorLSBhZGRlZCBuZXcgcGx1Z2lucyAoRkxBQywgZmVzdGl2YWwsIHF1aWNrdGltZSBldGMuKQorCisqIFNhdCBKdW4gMDkgMjAwMSBDaHJpc3RpYW4gU2NoYWxsZXIgPFVyYWV1c0BsaW51eHJpc2luZy5vcmc+CistIFZpc3VhbGlzYXRpb24gcGx1Z2lucyBidW5kbGVkIG91dCB0b2doZXRlcgorLSBNb3ZlZCBmaWxlcyBzZWN0aW9ucyB1cCBjbG9zZSB0byB0aGVpciByZXNwZWN0aXZlIGRlc2NyaXB0aW9ucworCisqIFNhdCBKdW4gMDIgMjAwMSBDaHJpc3RpYW4gU2NoYWxsZXIgPFVyYWV1c0BsaW51eHJpc2luZy5vcmc+CistIFNwbGl0IHRoZSBwYWNrYWdlIGludG8gc2VwYXJhdGUgUlBNUywgCisgIHB1dHRpbmcgbW9zdCBwbHVnaW5zIG91dCBieSB0aGVtc2VsdmVzLgorCisqIEZyaSBKdW4gMDEgMjAwMSBDaHJpc3RpYW4gU2NoYWxsZXIgPFVyYWV1c0BsaW51eHJpc2luZy5vcmc+CistIFVwZGF0ZWQgd2l0aCBjaGFuZ2Ugc3VnZ2VzdGlvbnMgZnJvbSBEZW5uaXMgQmpvcmtsdW5kCisKKyogVHVlIEphbiAwOSAyMDAxIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CistIHVwZGF0ZWQgdG8gYnVpbGQgLWRldmVsIHBhY2thZ2UgYXMgd2VsbAorCisqIFN1biBKYW4gMzAgMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorLSBmaXJzdCBkcmFmdCBvZiBzcGVjIGZpbGUKKwpkaWZmIC0tZ2l0IGEvaW5zdGFsbC1zaCBiL2luc3RhbGwtc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjc4MWI5OAotLS0gL2Rldi9udWxsCisrKyBiL2luc3RhbGwtc2gKQEAgLTAsMCArMSw1MjAgQEAKKyMhL2Jpbi9zaAorIyBpbnN0YWxsIC0gaW5zdGFsbCBhIHByb2dyYW0sIHNjcmlwdCwgb3IgZGF0YWZpbGUKKworc2NyaXB0dmVyc2lvbj0yMDA5LTA0LTI4LjIxOyAjIFVUQworCisjIFRoaXMgb3JpZ2luYXRlcyBmcm9tIFgxMVI1IChtaXQvdXRpbC9zY3JpcHRzL2luc3RhbGwuc2gpLCB3aGljaCB3YXMKKyMgbGF0ZXIgcmVsZWFzZWQgaW4gWDExUjYgKHhjL2NvbmZpZy91dGlsL2luc3RhbGwuc2gpIHdpdGggdGhlCisjIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UuCisjCisjIENvcHlyaWdodCAoQykgMTk5NCBYIENvbnNvcnRpdW0KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8KKyMgZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKKyMgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisjIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorIyBYIENPTlNPUlRJVU0gQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQy0KKyMgVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgdGhlIFggQ29uc29ydGl1bSBzaGFsbCBub3QKKyMgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWwtCisjIGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBmcm9tIHRoZSBYIENvbnNvci0KKyMgdGl1bS4KKyMKKyMKKyMgRlNGIGNoYW5nZXMgdG8gdGhpcyBmaWxlIGFyZSBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyMKKyMgQ2FsbGluZyB0aGlzIHNjcmlwdCBpbnN0YWxsLXNoIGlzIHByZWZlcnJlZCBvdmVyIGluc3RhbGwuc2gsIHRvIHByZXZlbnQKKyMgYG1ha2UnIGltcGxpY2l0IHJ1bGVzIGZyb20gY3JlYXRpbmcgYSBmaWxlIGNhbGxlZCBpbnN0YWxsIGZyb20gaXQKKyMgd2hlbiB0aGVyZSBpcyBubyBNYWtlZmlsZS4KKyMKKyMgVGhpcyBzY3JpcHQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBCU0QgaW5zdGFsbCBzY3JpcHQsIGJ1dCB3YXMgd3JpdHRlbgorIyBmcm9tIHNjcmF0Y2guCisKK25sPScKKycKK0lGUz0iICIiCSRubCIKKworIyBzZXQgRE9JVFBST0cgdG8gZWNobyB0byB0ZXN0IHRoaXMgc2NyaXB0CisKKyMgRG9uJ3QgdXNlIDotIHNpbmNlIDQuM0JTRCBhbmQgZWFybGllciBzaGVsbHMgZG9uJ3QgbGlrZSBpdC4KK2RvaXQ9JHtET0lUUFJPRy19CitpZiB0ZXN0IC16ICIkZG9pdCI7IHRoZW4KKyAgZG9pdF9leGVjPWV4ZWMKK2Vsc2UKKyAgZG9pdF9leGVjPSRkb2l0CitmaQorCisjIFB1dCBpbiBhYnNvbHV0ZSBmaWxlIG5hbWVzIGlmIHlvdSBkb24ndCBoYXZlIHRoZW0gaW4geW91ciBwYXRoOworIyBvciB1c2UgZW52aXJvbm1lbnQgdmFycy4KKworY2hncnBwcm9nPSR7Q0hHUlBQUk9HLWNoZ3JwfQorY2htb2Rwcm9nPSR7Q0hNT0RQUk9HLWNobW9kfQorY2hvd25wcm9nPSR7Q0hPV05QUk9HLWNob3dufQorY21wcHJvZz0ke0NNUFBST0ctY21wfQorY3Bwcm9nPSR7Q1BQUk9HLWNwfQorbWtkaXJwcm9nPSR7TUtESVJQUk9HLW1rZGlyfQorbXZwcm9nPSR7TVZQUk9HLW12fQorcm1wcm9nPSR7Uk1QUk9HLXJtfQorc3RyaXBwcm9nPSR7U1RSSVBQUk9HLXN0cmlwfQorCitwb3NpeF9nbG9iPSc/JworaW5pdGlhbGl6ZV9wb3NpeF9nbG9iPScKKyAgdGVzdCAiJHBvc2l4X2dsb2IiICE9ICI/IiB8fCB7CisgICAgaWYgKHNldCAtZikgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgIHBvc2l4X2dsb2I9CisgICAgZWxzZQorICAgICAgcG9zaXhfZ2xvYj06CisgICAgZmkKKyAgfQorJworCitwb3NpeF9ta2Rpcj0KKworIyBEZXNpcmVkIG1vZGUgb2YgaW5zdGFsbGVkIGZpbGUuCittb2RlPTA3NTUKKworY2hncnBjbWQ9CitjaG1vZGNtZD0kY2htb2Rwcm9nCitjaG93bmNtZD0KK212Y21kPSRtdnByb2cKK3JtY21kPSIkcm1wcm9nIC1mIgorc3RyaXBjbWQ9CisKK3NyYz0KK2RzdD0KK2Rpcl9hcmc9Citkc3RfYXJnPQorCitjb3B5X29uX2NoYW5nZT1mYWxzZQorbm9fdGFyZ2V0X2RpcmVjdG9yeT0KKwordXNhZ2U9IlwKK1VzYWdlOiAkMCBbT1BUSU9OXS4uLiBbLVRdIFNSQ0ZJTEUgRFNURklMRQorICAgb3I6ICQwIFtPUFRJT05dLi4uIFNSQ0ZJTEVTLi4uIERJUkVDVE9SWQorICAgb3I6ICQwIFtPUFRJT05dLi4uIC10IERJUkVDVE9SWSBTUkNGSUxFUy4uLgorICAgb3I6ICQwIFtPUFRJT05dLi4uIC1kIERJUkVDVE9SSUVTLi4uCisKK0luIHRoZSAxc3QgZm9ybSwgY29weSBTUkNGSUxFIHRvIERTVEZJTEUuCitJbiB0aGUgMm5kIGFuZCAzcmQsIGNvcHkgYWxsIFNSQ0ZJTEVTIHRvIERJUkVDVE9SWS4KK0luIHRoZSA0dGgsIGNyZWF0ZSBESVJFQ1RPUklFUy4KKworT3B0aW9uczoKKyAgICAgLS1oZWxwICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdC4KKyAgICAgLS12ZXJzaW9uICBkaXNwbGF5IHZlcnNpb24gaW5mbyBhbmQgZXhpdC4KKworICAtYyAgICAgICAgICAgIChpZ25vcmVkKQorICAtQyAgICAgICAgICAgIGluc3RhbGwgb25seSBpZiBkaWZmZXJlbnQgKHByZXNlcnZlIHRoZSBsYXN0IGRhdGEgbW9kaWZpY2F0aW9uIHRpbWUpCisgIC1kICAgICAgICAgICAgY3JlYXRlIGRpcmVjdG9yaWVzIGluc3RlYWQgb2YgaW5zdGFsbGluZyBmaWxlcy4KKyAgLWcgR1JPVVAgICAgICAkY2hncnBwcm9nIGluc3RhbGxlZCBmaWxlcyB0byBHUk9VUC4KKyAgLW0gTU9ERSAgICAgICAkY2htb2Rwcm9nIGluc3RhbGxlZCBmaWxlcyB0byBNT0RFLgorICAtbyBVU0VSICAgICAgICRjaG93bnByb2cgaW5zdGFsbGVkIGZpbGVzIHRvIFVTRVIuCisgIC1zICAgICAgICAgICAgJHN0cmlwcHJvZyBpbnN0YWxsZWQgZmlsZXMuCisgIC10IERJUkVDVE9SWSAgaW5zdGFsbCBpbnRvIERJUkVDVE9SWS4KKyAgLVQgICAgICAgICAgICByZXBvcnQgYW4gZXJyb3IgaWYgRFNURklMRSBpcyBhIGRpcmVjdG9yeS4KKworRW52aXJvbm1lbnQgdmFyaWFibGVzIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGNvbW1hbmRzOgorICBDSEdSUFBST0cgQ0hNT0RQUk9HIENIT1dOUFJPRyBDTVBQUk9HIENQUFJPRyBNS0RJUlBST0cgTVZQUk9HCisgIFJNUFJPRyBTVFJJUFBST0cKKyIKKword2hpbGUgdGVzdCAkIyAtbmUgMDsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC1jKSA7OworCisgICAgLUMpIGNvcHlfb25fY2hhbmdlPXRydWU7OworCisgICAgLWQpIGRpcl9hcmc9dHJ1ZTs7CisKKyAgICAtZykgY2hncnBjbWQ9IiRjaGdycHByb2cgJDIiCisJc2hpZnQ7OworCisgICAgLS1oZWxwKSBlY2hvICIkdXNhZ2UiOyBleGl0ICQ/OzsKKworICAgIC1tKSBtb2RlPSQyCisJY2FzZSAkbW9kZSBpbgorCSAgKicgJyogfCAqJwknKiB8IConCisnKgkgIHwgKicqJyogfCAqJz8nKiB8IConWycqKQorCSAgICBlY2hvICIkMDogaW52YWxpZCBtb2RlOiAkbW9kZSIgPiYyCisJICAgIGV4aXQgMTs7CisJZXNhYworCXNoaWZ0OzsKKworICAgIC1vKSBjaG93bmNtZD0iJGNob3ducHJvZyAkMiIKKwlzaGlmdDs7CisKKyAgICAtcykgc3RyaXBjbWQ9JHN0cmlwcHJvZzs7CisKKyAgICAtdCkgZHN0X2FyZz0kMgorCXNoaWZ0OzsKKworICAgIC1UKSBub190YXJnZXRfZGlyZWN0b3J5PXRydWU7OworCisgICAgLS12ZXJzaW9uKSBlY2hvICIkMCAkc2NyaXB0dmVyc2lvbiI7IGV4aXQgJD87OworCisgICAgLS0pCXNoaWZ0CisJYnJlYWs7OworCisgICAgLSopCWVjaG8gIiQwOiBpbnZhbGlkIG9wdGlvbjogJDEiID4mMgorCWV4aXQgMTs7CisKKyAgICAqKSAgYnJlYWs7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK2lmIHRlc3QgJCMgLW5lIDAgJiYgdGVzdCAteiAiJGRpcl9hcmckZHN0X2FyZyI7IHRoZW4KKyAgIyBXaGVuIC1kIGlzIHVzZWQsIGFsbCByZW1haW5pbmcgYXJndW1lbnRzIGFyZSBkaXJlY3RvcmllcyB0byBjcmVhdGUuCisgICMgV2hlbiAtdCBpcyB1c2VkLCB0aGUgZGVzdGluYXRpb24gaXMgYWxyZWFkeSBzcGVjaWZpZWQuCisgICMgT3RoZXJ3aXNlLCB0aGUgbGFzdCBhcmd1bWVudCBpcyB0aGUgZGVzdGluYXRpb24uICBSZW1vdmUgaXQgZnJvbSAkQC4KKyAgZm9yIGFyZworICBkbworICAgIGlmIHRlc3QgLW4gIiRkc3RfYXJnIjsgdGhlbgorICAgICAgIyAkQCBpcyBub3QgZW1wdHk6IGl0IGNvbnRhaW5zIGF0IGxlYXN0ICRhcmcuCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGRzdF9hcmciCisgICAgICBzaGlmdCAjIGZub3JkCisgICAgZmkKKyAgICBzaGlmdCAjIGFyZworICAgIGRzdF9hcmc9JGFyZworICBkb25lCitmaQorCitpZiB0ZXN0ICQjIC1lcSAwOyB0aGVuCisgIGlmIHRlc3QgLXogIiRkaXJfYXJnIjsgdGhlbgorICAgIGVjaG8gIiQwOiBubyBpbnB1dCBmaWxlIHNwZWNpZmllZC4iID4mMgorICAgIGV4aXQgMQorICBmaQorICAjIEl0J3MgT0sgdG8gY2FsbCBgaW5zdGFsbC1zaCAtZCcgd2l0aG91dCBhcmd1bWVudC4KKyAgIyBUaGlzIGNhbiBoYXBwZW4gd2hlbiBjcmVhdGluZyBjb25kaXRpb25hbCBkaXJlY3Rvcmllcy4KKyAgZXhpdCAwCitmaQorCitpZiB0ZXN0IC16ICIkZGlyX2FyZyI7IHRoZW4KKyAgdHJhcCAnKGV4aXQgJD8pOyBleGl0JyAxIDIgMTMgMTUKKworICAjIFNldCB1bWFzayBzbyBhcyBub3QgdG8gY3JlYXRlIHRlbXBzIHdpdGggdG9vLWdlbmVyb3VzIG1vZGVzLgorICAjIEhvd2V2ZXIsICdzdHJpcCcgcmVxdWlyZXMgYm90aCByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgdG8gdGVtcHMuCisgIGNhc2UgJG1vZGUgaW4KKyAgICAjIE9wdGltaXplIGNvbW1vbiBjYXNlcy4KKyAgICAqNjQ0KSBjcF91bWFzaz0xMzM7OworICAgICo3NTUpIGNwX3VtYXNrPTIyOzsKKworICAgICpbMC03XSkKKyAgICAgIGlmIHRlc3QgLXogIiRzdHJpcGNtZCI7IHRoZW4KKwl1X3BsdXNfcnc9CisgICAgICBlbHNlCisJdV9wbHVzX3J3PSclIDIwMCcKKyAgICAgIGZpCisgICAgICBjcF91bWFzaz1gZXhwciAnKCcgNzc3IC0gJG1vZGUgJSAxMDAwICcpJyAkdV9wbHVzX3J3YDs7CisgICAgKikKKyAgICAgIGlmIHRlc3QgLXogIiRzdHJpcGNtZCI7IHRoZW4KKwl1X3BsdXNfcnc9CisgICAgICBlbHNlCisJdV9wbHVzX3J3PSx1K3J3CisgICAgICBmaQorICAgICAgY3BfdW1hc2s9JG1vZGUkdV9wbHVzX3J3OzsKKyAgZXNhYworZmkKKworZm9yIHNyYworZG8KKyAgIyBQcm90ZWN0IG5hbWVzIHN0YXJ0aW5nIHdpdGggYC0nLgorICBjYXNlICRzcmMgaW4KKyAgICAtKikgc3JjPS4vJHNyYzs7CisgIGVzYWMKKworICBpZiB0ZXN0IC1uICIkZGlyX2FyZyI7IHRoZW4KKyAgICBkc3Q9JHNyYworICAgIGRzdGRpcj0kZHN0CisgICAgdGVzdCAtZCAiJGRzdGRpciIKKyAgICBkc3RkaXJfc3RhdHVzPSQ/CisgIGVsc2UKKworICAgICMgV2FpdGluZyBmb3IgdGhpcyB0byBiZSBkZXRlY3RlZCBieSB0aGUgIiRjcHByb2cgJHNyYyAkZHN0dG1wIiBjb21tYW5kCisgICAgIyBtaWdodCBjYXVzZSBkaXJlY3RvcmllcyB0byBiZSBjcmVhdGVkLCB3aGljaCB3b3VsZCBiZSBlc3BlY2lhbGx5IGJhZAorICAgICMgaWYgJHNyYyAoYW5kIHRodXMgJGRzdHRtcCkgY29udGFpbnMgJyonLgorICAgIGlmIHRlc3QgISAtZiAiJHNyYyIgJiYgdGVzdCAhIC1kICIkc3JjIjsgdGhlbgorICAgICAgZWNobyAiJDA6ICRzcmMgZG9lcyBub3QgZXhpc3QuIiA+JjIKKyAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC16ICIkZHN0X2FyZyI7IHRoZW4KKyAgICAgIGVjaG8gIiQwOiBubyBkZXN0aW5hdGlvbiBzcGVjaWZpZWQuIiA+JjIKKyAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBkc3Q9JGRzdF9hcmcKKyAgICAjIFByb3RlY3QgbmFtZXMgc3RhcnRpbmcgd2l0aCBgLScuCisgICAgY2FzZSAkZHN0IGluCisgICAgICAtKikgZHN0PS4vJGRzdDs7CisgICAgZXNhYworCisgICAgIyBJZiBkZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9yeSwgYXBwZW5kIHRoZSBpbnB1dCBmaWxlbmFtZTsgd29uJ3Qgd29yaworICAgICMgaWYgZG91YmxlIHNsYXNoZXMgYXJlbid0IGlnbm9yZWQuCisgICAgaWYgdGVzdCAtZCAiJGRzdCI7IHRoZW4KKyAgICAgIGlmIHRlc3QgLW4gIiRub190YXJnZXRfZGlyZWN0b3J5IjsgdGhlbgorCWVjaG8gIiQwOiAkZHN0X2FyZzogSXMgYSBkaXJlY3RvcnkiID4mMgorCWV4aXQgMQorICAgICAgZmkKKyAgICAgIGRzdGRpcj0kZHN0CisgICAgICBkc3Q9JGRzdGRpci9gYmFzZW5hbWUgIiRzcmMiYAorICAgICAgZHN0ZGlyX3N0YXR1cz0wCisgICAgZWxzZQorICAgICAgIyBQcmVmZXIgZGlybmFtZSwgYnV0IGZhbGwgYmFjayBvbiBhIHN1YnN0aXR1dGUgaWYgZGlybmFtZSBmYWlscy4KKyAgICAgIGRzdGRpcj1gCisJKGRpcm5hbWUgIiRkc3QiKSAyPi9kZXYvbnVsbCB8fAorCWV4cHIgWCIkZHN0IiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSAgICAgWCIkZHN0IiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSAgICAgWCIkZHN0IiA6ICdYXCgvL1wpJCcgXHwgXAorCSAgICAgWCIkZHN0IiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKwllY2hvIFgiJGRzdCIgfAorCSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCQkgICBzLy9cMS8KKwkJICAgcQorCQkgfQorCQkgL15YXChcL1wvXClbXi9dLioveworCQkgICBzLy9cMS8KKwkJICAgcQorCQkgfQorCQkgL15YXChcL1wvXCkkL3sKKwkJICAgcy8vXDEvCisJCSAgIHEKKwkJIH0KKwkJIC9eWFwoXC9cKS4qL3sKKwkJICAgcy8vXDEvCisJCSAgIHEKKwkJIH0KKwkJIHMvLiovLi87IHEnCisgICAgICBgCisKKyAgICAgIHRlc3QgLWQgIiRkc3RkaXIiCisgICAgICBkc3RkaXJfc3RhdHVzPSQ/CisgICAgZmkKKyAgZmkKKworICBvYnNvbGV0ZV9ta2Rpcl91c2VkPWZhbHNlCisKKyAgaWYgdGVzdCAkZHN0ZGlyX3N0YXR1cyAhPSAwOyB0aGVuCisgICAgY2FzZSAkcG9zaXhfbWtkaXIgaW4KKyAgICAgICcnKQorCSMgQ3JlYXRlIGludGVybWVkaWF0ZSBkaXJzIHVzaW5nIG1vZGUgNzU1IGFzIG1vZGlmaWVkIGJ5IHRoZSB1bWFzay4KKwkjIFRoaXMgaXMgbGlrZSBGcmVlQlNEICdpbnN0YWxsJyBhcyBvZiAxOTk3LTEwLTI4LgorCXVtYXNrPWB1bWFza2AKKwljYXNlICRzdHJpcGNtZC4kdW1hc2sgaW4KKwkgICMgT3B0aW1pemUgY29tbW9uIGNhc2VzLgorCSAgKlsyMzY3XVsyMzY3XSkgbWtkaXJfdW1hc2s9JHVtYXNrOzsKKwkgIC4qMFswMl1bMDJdIHwgLlswMl1bMDJdIHwgLlswMl0pIG1rZGlyX3VtYXNrPTIyOzsKKworCSAgKlswLTddKQorCSAgICBta2Rpcl91bWFzaz1gZXhwciAkdW1hc2sgKyAyMiBcCisJICAgICAgLSAkdW1hc2sgJSAxMDAgJSA0MCArICR1bWFzayAlIDIwIFwKKwkgICAgICAtICR1bWFzayAlIDEwICUgNCArICR1bWFzayAlIDIKKwkgICAgYDs7CisJICAqKSBta2Rpcl91bWFzaz0kdW1hc2ssZ28tdzs7CisJZXNhYworCisJIyBXaXRoIC1kLCBjcmVhdGUgdGhlIG5ldyBkaXJlY3Rvcnkgd2l0aCB0aGUgdXNlci1zcGVjaWZpZWQgbW9kZS4KKwkjIE90aGVyd2lzZSwgcmVseSBvbiAkbWtkaXJfdW1hc2suCisJaWYgdGVzdCAtbiAiJGRpcl9hcmciOyB0aGVuCisJICBta2Rpcl9tb2RlPS1tJG1vZGUKKwllbHNlCisJICBta2Rpcl9tb2RlPQorCWZpCisKKwlwb3NpeF9ta2Rpcj1mYWxzZQorCWNhc2UgJHVtYXNrIGluCisJICAqWzEyMzU2N11bMC03XVswLTddKQorCSAgICAjIFBPU0lYIG1rZGlyIC1wIHNldHMgdSt3eCBiaXRzIHJlZ2FyZGxlc3Mgb2YgdW1hc2ssIHdoaWNoCisJICAgICMgaXMgaW5jb21wYXRpYmxlIHdpdGggRnJlZUJTRCAnaW5zdGFsbCcgd2hlbiAodW1hc2sgJiAzMDApICE9IDAuCisJICAgIDs7CisJICAqKQorCSAgICB0bXBkaXI9JHtUTVBESVItL3RtcH0vaW5zJFJBTkRPTS0kJAorCSAgICB0cmFwICdyZXQ9JD87IHJtZGlyICIkdG1wZGlyL2QiICIkdG1wZGlyIiAyPi9kZXYvbnVsbDsgZXhpdCAkcmV0JyAwCisKKwkgICAgaWYgKHVtYXNrICRta2Rpcl91bWFzayAmJgorCQlleGVjICRta2RpcnByb2cgJG1rZGlyX21vZGUgLXAgLS0gIiR0bXBkaXIvZCIpID4vZGV2L251bGwgMj4mMQorCSAgICB0aGVuCisJICAgICAgaWYgdGVzdCAteiAiJGRpcl9hcmciIHx8IHsKKwkJICAgIyBDaGVjayBmb3IgUE9TSVggaW5jb21wYXRpYmlsaXRpZXMgd2l0aCAtbS4KKwkJICAgIyBIUC1VWCAxMS4yMyBhbmQgSVJJWCA2LjUgbWtkaXIgLW0gLXAgc2V0cyBncm91cC0gb3IKKwkJICAgIyBvdGhlci13cml0ZWFibGUgYml0IG9mIHBhcmVudCBkaXJlY3Rvcnkgd2hlbiBpdCBzaG91bGRuJ3QuCisJCSAgICMgRnJlZUJTRCA2LjEgbWtkaXIgLW0gLXAgc2V0cyBtb2RlIG9mIGV4aXN0aW5nIGRpcmVjdG9yeS4KKwkJICAgbHNfbGRfdG1wZGlyPWBscyAtbGQgIiR0bXBkaXIiYAorCQkgICBjYXNlICRsc19sZF90bXBkaXIgaW4KKwkJICAgICBkPz8/Py0/ci0qKSBkaWZmZXJlbnRfbW9kZT03MDA7OworCQkgICAgIGQ/Pz8/LT8tLSopIGRpZmZlcmVudF9tb2RlPTc1NTs7CisJCSAgICAgKikgZmFsc2U7OworCQkgICBlc2FjICYmCisJCSAgICRta2RpcnByb2cgLW0kZGlmZmVyZW50X21vZGUgLXAgLS0gIiR0bXBkaXIiICYmIHsKKwkJICAgICBsc19sZF90bXBkaXJfMT1gbHMgLWxkICIkdG1wZGlyImAKKwkJICAgICB0ZXN0ICIkbHNfbGRfdG1wZGlyIiA9ICIkbHNfbGRfdG1wZGlyXzEiCisJCSAgIH0KKwkJIH0KKwkgICAgICB0aGVuIHBvc2l4X21rZGlyPToKKwkgICAgICBmaQorCSAgICAgIHJtZGlyICIkdG1wZGlyL2QiICIkdG1wZGlyIgorCSAgICBlbHNlCisJICAgICAgIyBSZW1vdmUgYW55IGRpcnMgbGVmdCBiZWhpbmQgYnkgYW5jaWVudCBta2RpciBpbXBsZW1lbnRhdGlvbnMuCisJICAgICAgcm1kaXIgLi8kbWtkaXJfbW9kZSAuLy1wIC4vLS0gMj4vZGV2L251bGwKKwkgICAgZmkKKwkgICAgdHJhcCAnJyAwOzsKKwllc2FjOzsKKyAgICBlc2FjCisKKyAgICBpZgorICAgICAgJHBvc2l4X21rZGlyICYmICgKKwl1bWFzayAkbWtkaXJfdW1hc2sgJiYKKwkkZG9pdF9leGVjICRta2RpcnByb2cgJG1rZGlyX21vZGUgLXAgLS0gIiRkc3RkaXIiCisgICAgICApCisgICAgdGhlbiA6CisgICAgZWxzZQorCisgICAgICAjIFRoZSB1bWFzayBpcyByaWRpY3Vsb3VzLCBvciBta2RpciBkb2VzIG5vdCBjb25mb3JtIHRvIFBPU0lYLAorICAgICAgIyBvciBpdCBmYWlsZWQgcG9zc2libHkgZHVlIHRvIGEgcmFjZSBjb25kaXRpb24uICBDcmVhdGUgdGhlCisgICAgICAjIGRpcmVjdG9yeSB0aGUgc2xvdyB3YXksIHN0ZXAgYnkgc3RlcCwgY2hlY2tpbmcgZm9yIHJhY2VzIGFzIHdlIGdvLgorCisgICAgICBjYXNlICRkc3RkaXIgaW4KKwkvKikgcHJlZml4PScvJzs7CisJLSopIHByZWZpeD0nLi8nOzsKKwkqKSAgcHJlZml4PScnOzsKKyAgICAgIGVzYWMKKworICAgICAgZXZhbCAiJGluaXRpYWxpemVfcG9zaXhfZ2xvYiIKKworICAgICAgb0lGUz0kSUZTCisgICAgICBJRlM9LworICAgICAgJHBvc2l4X2dsb2Igc2V0IC1mCisgICAgICBzZXQgZm5vcmQgJGRzdGRpcgorICAgICAgc2hpZnQKKyAgICAgICRwb3NpeF9nbG9iIHNldCArZgorICAgICAgSUZTPSRvSUZTCisKKyAgICAgIHByZWZpeGVzPQorCisgICAgICBmb3IgZAorICAgICAgZG8KKwl0ZXN0IC16ICIkZCIgJiYgY29udGludWUKKworCXByZWZpeD0kcHJlZml4JGQKKwlpZiB0ZXN0IC1kICIkcHJlZml4IjsgdGhlbgorCSAgcHJlZml4ZXM9CisJZWxzZQorCSAgaWYgJHBvc2l4X21rZGlyOyB0aGVuCisJICAgICh1bWFzaz0kbWtkaXJfdW1hc2sgJiYKKwkgICAgICRkb2l0X2V4ZWMgJG1rZGlycHJvZyAkbWtkaXJfbW9kZSAtcCAtLSAiJGRzdGRpciIpICYmIGJyZWFrCisJICAgICMgRG9uJ3QgZmFpbCBpZiB0d28gaW5zdGFuY2VzIGFyZSBydW5uaW5nIGNvbmN1cnJlbnRseS4KKwkgICAgdGVzdCAtZCAiJHByZWZpeCIgfHwgZXhpdCAxCisJICBlbHNlCisJICAgIGNhc2UgJHByZWZpeCBpbgorCSAgICAgICpcJyopIHFwcmVmaXg9YGVjaG8gIiRwcmVmaXgiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsKKwkgICAgICAqKSBxcHJlZml4PSRwcmVmaXg7OworCSAgICBlc2FjCisJICAgIHByZWZpeGVzPSIkcHJlZml4ZXMgJyRxcHJlZml4JyIKKwkgIGZpCisJZmkKKwlwcmVmaXg9JHByZWZpeC8KKyAgICAgIGRvbmUKKworICAgICAgaWYgdGVzdCAtbiAiJHByZWZpeGVzIjsgdGhlbgorCSMgRG9uJ3QgZmFpbCBpZiB0d28gaW5zdGFuY2VzIGFyZSBydW5uaW5nIGNvbmN1cnJlbnRseS4KKwkodW1hc2sgJG1rZGlyX3VtYXNrICYmCisJIGV2YWwgIlwkZG9pdF9leGVjIFwkbWtkaXJwcm9nICRwcmVmaXhlcyIpIHx8CisJICB0ZXN0IC1kICIkZHN0ZGlyIiB8fCBleGl0IDEKKwlvYnNvbGV0ZV9ta2Rpcl91c2VkPXRydWUKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKKworICBpZiB0ZXN0IC1uICIkZGlyX2FyZyI7IHRoZW4KKyAgICB7IHRlc3QgLXogIiRjaG93bmNtZCIgfHwgJGRvaXQgJGNob3duY21kICIkZHN0IjsgfSAmJgorICAgIHsgdGVzdCAteiAiJGNoZ3JwY21kIiB8fCAkZG9pdCAkY2hncnBjbWQgIiRkc3QiOyB9ICYmCisgICAgeyB0ZXN0ICIkb2Jzb2xldGVfbWtkaXJfdXNlZCRjaG93bmNtZCRjaGdycGNtZCIgPSBmYWxzZSB8fAorICAgICAgdGVzdCAteiAiJGNobW9kY21kIiB8fCAkZG9pdCAkY2htb2RjbWQgJG1vZGUgIiRkc3QiOyB9IHx8IGV4aXQgMQorICBlbHNlCisKKyAgICAjIE1ha2UgYSBjb3VwbGUgb2YgdGVtcCBmaWxlIG5hbWVzIGluIHRoZSBwcm9wZXIgZGlyZWN0b3J5LgorICAgIGRzdHRtcD0kZHN0ZGlyL19pbnN0LiQkXworICAgIHJtdG1wPSRkc3RkaXIvX3JtLiQkXworCisgICAgIyBUcmFwIHRvIGNsZWFuIHVwIHRob3NlIHRlbXAgZmlsZXMgYXQgZXhpdC4KKyAgICB0cmFwICdyZXQ9JD87IHJtIC1mICIkZHN0dG1wIiAiJHJtdG1wIiAmJiBleGl0ICRyZXQnIDAKKworICAgICMgQ29weSB0aGUgZmlsZSBuYW1lIHRvIHRoZSB0ZW1wIG5hbWUuCisgICAgKHVtYXNrICRjcF91bWFzayAmJiAkZG9pdF9leGVjICRjcHByb2cgIiRzcmMiICIkZHN0dG1wIikgJiYKKworICAgICMgYW5kIHNldCBhbnkgb3B0aW9uczsgZG8gY2htb2QgbGFzdCB0byBwcmVzZXJ2ZSBzZXR1aWQgYml0cy4KKyAgICAjCisgICAgIyBJZiBhbnkgb2YgdGhlc2UgZmFpbCwgd2UgYWJvcnQgdGhlIHdob2xlIHRoaW5nLiAgSWYgd2Ugd2FudCB0bworICAgICMgaWdub3JlIGVycm9ycyBmcm9tIGFueSBvZiB0aGVzZSwganVzdCBtYWtlIHN1cmUgbm90IHRvIGlnbm9yZQorICAgICMgZXJyb3JzIGZyb20gdGhlIGFib3ZlICIkZG9pdCAkY3Bwcm9nICRzcmMgJGRzdHRtcCIgY29tbWFuZC4KKyAgICAjCisgICAgeyB0ZXN0IC16ICIkY2hvd25jbWQiIHx8ICRkb2l0ICRjaG93bmNtZCAiJGRzdHRtcCI7IH0gJiYKKyAgICB7IHRlc3QgLXogIiRjaGdycGNtZCIgfHwgJGRvaXQgJGNoZ3JwY21kICIkZHN0dG1wIjsgfSAmJgorICAgIHsgdGVzdCAteiAiJHN0cmlwY21kIiB8fCAkZG9pdCAkc3RyaXBjbWQgIiRkc3R0bXAiOyB9ICYmCisgICAgeyB0ZXN0IC16ICIkY2htb2RjbWQiIHx8ICRkb2l0ICRjaG1vZGNtZCAkbW9kZSAiJGRzdHRtcCI7IH0gJiYKKworICAgICMgSWYgLUMsIGRvbid0IGJvdGhlciB0byBjb3B5IGlmIGl0IHdvdWxkbid0IGNoYW5nZSB0aGUgZmlsZS4KKyAgICBpZiAkY29weV9vbl9jaGFuZ2UgJiYKKyAgICAgICBvbGQ9YExDX0FMTD1DIGxzIC1kbEwgIiRkc3QiCTI+L2Rldi9udWxsYCAmJgorICAgICAgIG5ldz1gTENfQUxMPUMgbHMgLWRsTCAiJGRzdHRtcCIJMj4vZGV2L251bGxgICYmCisKKyAgICAgICBldmFsICIkaW5pdGlhbGl6ZV9wb3NpeF9nbG9iIiAmJgorICAgICAgICRwb3NpeF9nbG9iIHNldCAtZiAmJgorICAgICAgIHNldCBYICRvbGQgJiYgb2xkPTokMjokNDokNTokNiAmJgorICAgICAgIHNldCBYICRuZXcgJiYgbmV3PTokMjokNDokNTokNiAmJgorICAgICAgICRwb3NpeF9nbG9iIHNldCArZiAmJgorCisgICAgICAgdGVzdCAiJG9sZCIgPSAiJG5ldyIgJiYKKyAgICAgICAkY21wcHJvZyAiJGRzdCIgIiRkc3R0bXAiID4vZGV2L251bGwgMj4mMQorICAgIHRoZW4KKyAgICAgIHJtIC1mICIkZHN0dG1wIgorICAgIGVsc2UKKyAgICAgICMgUmVuYW1lIHRoZSBmaWxlIHRvIHRoZSByZWFsIGRlc3RpbmF0aW9uLgorICAgICAgJGRvaXQgJG12Y21kIC1mICIkZHN0dG1wIiAiJGRzdCIgMj4vZGV2L251bGwgfHwKKworICAgICAgIyBUaGUgcmVuYW1lIGZhaWxlZCwgcGVyaGFwcyBiZWNhdXNlIG12IGNhbid0IHJlbmFtZSBzb21ldGhpbmcgZWxzZQorICAgICAgIyB0byBpdHNlbGYsIG9yIHBlcmhhcHMgYmVjYXVzZSBtdiBpcyBzbyBhbmNpZW50IHRoYXQgaXQgZG9lcyBub3QKKyAgICAgICMgc3VwcG9ydCAtZi4KKyAgICAgIHsKKwkjIE5vdyByZW1vdmUgb3IgbW92ZSBhc2lkZSBhbnkgb2xkIGZpbGUgYXQgZGVzdGluYXRpb24gbG9jYXRpb24uCisJIyBXZSB0cnkgdGhpcyB0d28gd2F5cyBzaW5jZSBybSBjYW4ndCB1bmxpbmsgaXRzZWxmIG9uIHNvbWUKKwkjIHN5c3RlbXMgYW5kIHRoZSBkZXN0aW5hdGlvbiBmaWxlIG1pZ2h0IGJlIGJ1c3kgZm9yIG90aGVyCisJIyByZWFzb25zLiAgSW4gdGhpcyBjYXNlLCB0aGUgZmluYWwgY2xlYW51cCBtaWdodCBmYWlsIGJ1dCB0aGUgbmV3CisJIyBmaWxlIHNob3VsZCBzdGlsbCBpbnN0YWxsIHN1Y2Nlc3NmdWxseS4KKwl7CisJICB0ZXN0ICEgLWYgIiRkc3QiIHx8CisJICAkZG9pdCAkcm1jbWQgLWYgIiRkc3QiIDI+L2Rldi9udWxsIHx8CisJICB7ICRkb2l0ICRtdmNtZCAtZiAiJGRzdCIgIiRybXRtcCIgMj4vZGV2L251bGwgJiYKKwkgICAgeyAkZG9pdCAkcm1jbWQgLWYgIiRybXRtcCIgMj4vZGV2L251bGw7IDo7IH0KKwkgIH0gfHwKKwkgIHsgZWNobyAiJDA6IGNhbm5vdCB1bmxpbmsgb3IgcmVuYW1lICRkc3QiID4mMgorCSAgICAoZXhpdCAxKTsgZXhpdCAxCisJICB9CisJfSAmJgorCisJIyBOb3cgcmVuYW1lIHRoZSBmaWxlIHRvIHRoZSByZWFsIGRlc3RpbmF0aW9uLgorCSRkb2l0ICRtdmNtZCAiJGRzdHRtcCIgIiRkc3QiCisgICAgICB9CisgICAgZmkgfHwgZXhpdCAxCisKKyAgICB0cmFwICcnIDAKKyAgZmkKK2RvbmUKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisjIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvbGlicy9NYWtlZmlsZS5hbSBiL2xpYnMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM1MWIyNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw2IEBACitTVUJESVJTID0gZ3N0CisKK0FuZHJvaWQubWs6IE1ha2VmaWxlLmFtCisJYW5kcm9nZW5pemVyIC06UFJPSkVDVCBnc3RyZWFtZXIgXAorCSAtOlNVQkRJUiBsaWJzL2dzdCBcCisJPiAkQApkaWZmIC0tZ2l0IGEvbGlicy9NYWtlZmlsZS5pbiBiL2xpYnMvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYwZTA1MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw3NDQgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSBsaWJzCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1weXRob24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXNjcnViLWluY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorQU1fVl9HRU4gPSAkKGFtX192X0dFTl8kKFYpKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworQU1fVl9hdCA9ICQoYW1fX3ZfYXRfJChWKSkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9hdF8wID0gQAorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorUkVDVVJTSVZFX1RBUkdFVFMgPSBhbGwtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIFwKKwlodG1sLXJlY3Vyc2l2ZSBpbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWR2aS1yZWN1cnNpdmUgaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZSBpbnN0YWxsLWluZm8tcmVjdXJzaXZlIFwKKwlpbnN0YWxsLXBkZi1yZWN1cnNpdmUgaW5zdGFsbC1wcy1yZWN1cnNpdmUgaW5zdGFsbC1yZWN1cnNpdmUgXAorCWluc3RhbGxjaGVjay1yZWN1cnNpdmUgaW5zdGFsbGRpcnMtcmVjdXJzaXZlIHBkZi1yZWN1cnNpdmUgXAorCXBzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtcmVjdXJzaXZlCitSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyA9IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBjbGVhbi1yZWN1cnNpdmUJXAorICBkaXN0Y2xlYW4tcmVjdXJzaXZlIG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCitBTV9SRUNVUlNJVkVfVEFSR0VUUyA9ICQoUkVDVVJTSVZFX1RBUkdFVFM6LXJlY3Vyc2l2ZT0pIFwKKwkkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTOi1yZWN1cnNpdmU9KSB0YWdzIFRBR1MgY3RhZ3MgQ1RBR1MgXAorCWRpc3RkaXIKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RfU1VCRElSUyA9ICQoU1VCRElSUykKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCithbV9fcmVsYXRpdml6ZSA9IFwKKyAgZGlyMD1gcHdkYDsgXAorICBzZWRfZmlyc3Q9J3MsXlwoW14vXSpcKS8uKiQkLFwxLCc7IFwKKyAgc2VkX3Jlc3Q9J3MsXlteL10qLyosLCc7IFwKKyAgc2VkX2xhc3Q9J3MsXi4qL1woW14vXSpcKSQkLFwxLCc7IFwKKyAgc2VkX2J1dGxhc3Q9J3MsLypbXi9dKiQkLCwnOyBcCisgIHdoaWxlIHRlc3QgLW4gIiQkZGlyMSI7IGRvIFwKKyAgICBmaXJzdD1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAorICAgIGlmIHRlc3QgIiQkZmlyc3QiICE9ICIuIjsgdGhlbiBcCisgICAgICBpZiB0ZXN0ICIkJGZpcnN0IiA9ICIuLiI7IHRoZW4gXAorICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9sYXN0ImAvIiQkZGlyMiI7IFwKKyAgICAgICAgZGlyMD1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfYnV0bGFzdCJgOyBcCisgICAgICBlbHNlIFwKKyAgICAgICAgZmlyc3QyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCisgICAgICAgIGlmIHRlc3QgIiQkZmlyc3QyIiA9ICIkJGZpcnN0IjsgdGhlbiBcCisgICAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCisgICAgICAgIGVsc2UgXAorICAgICAgICAgIGRpcjI9Ii4uLyQkZGlyMiI7IFwKKyAgICAgICAgZmk7IFwKKyAgICAgICAgZGlyMD0iJCRkaXIwIi8iJCRmaXJzdCI7IFwKKyAgICAgIGZpOyBcCisgICAgZmk7IFwKKyAgICBkaXIxPWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKKyAgZG9uZTsgXAorICByZWxkaXI9IiQkZGlyMiIKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBUyA9IEBBU0AKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAorQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAorQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKK0NDID0gQENDQAorQ0NBUyA9IEBDQ0FTQAorQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACitDQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDSEVDS19NQUpPUl9WRVJTSU9OID0gQENIRUNLX01BSk9SX1ZFUlNJT05ACitDSEVDS19NSUNST19WRVJTSU9OID0gQENIRUNLX01JQ1JPX1ZFUlNJT05ACitDSEVDS19NSU5PUl9WRVJTSU9OID0gQENIRUNLX01JTk9SX1ZFUlNJT05ACitDSEVDS19WRVJTSU9OID0gQENIRUNLX1ZFUlNJT05ACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEFESVIgPSBAREFUQURJUkAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRU5BQkxFX1NVQlVOSVQgPSBARU5BQkxFX1NVQlVOSVRACitFUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZGTEFHUyA9IEBGRkxBR1NACitGR1JFUCA9IEBGR1JFUEAKK0ZMRVhfUEFUSCA9IEBGTEVYX1BBVEhACitHQ09WID0gQEdDT1ZACitHQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKK0dDT1ZfTElCUyA9IEBHQ09WX0xJQlNACitHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAorR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKK0dMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAorR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKK0dMSUJfT05MWV9DRkxBR1MgPSBAR0xJQl9PTkxZX0NGTEFHU0AKK0dMSUJfT05MWV9MSUJTID0gQEdMSUJfT05MWV9MSUJTQAorR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACitHTElCX1JFUSA9IEBHTElCX1JFUUAKK0dNUF9MSUJTID0gQEdNUF9MSUJTQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHUkVQID0gQEdSRVBACitHU0xfTElCUyA9IEBHU0xfTElCU0AKK0dTVF9BR0UgPSBAR1NUX0FHRUAKK0dTVF9BTExfQ0ZMQUdTID0gQEdTVF9BTExfQ0ZMQUdTQAorR1NUX0FMTF9DWFhGTEFHUyA9IEBHU1RfQUxMX0NYWEZMQUdTQAorR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKK0dTVF9BTExfTElCUyA9IEBHU1RfQUxMX0xJQlNACitHU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKK0dTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9ERUZJTkVACitHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkVACitHU1RfRElTQUJMRV9ORVRfREVGSU5FID0gQEdTVF9ESVNBQkxFX05FVF9ERUZJTkVACitHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAorR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKK0dTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKK0dTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACitHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfVFJBQ0VfREVGSU5FQAorR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAorR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAorR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTU19ERUZJTkUgPSBAR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTU19ERUZJTkVACitHU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKK0dTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAorR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKK0dTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAorR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACitHU1RfTUFKT1JNSU5PUiA9IEBHU1RfTUFKT1JNSU5PUkAKK0dTVF9PQkpfQ0ZMQUdTID0gQEdTVF9PQkpfQ0ZMQUdTQAorR1NUX09CSl9DWFhGTEFHUyA9IEBHU1RfT0JKX0NYWEZMQUdTQAorR1NUX09CSl9MSUJTID0gQEdTVF9PQkpfTElCU0AKK0dTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAorR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAorR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAorR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKK0dTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKK0dTVF9QS0dfREVQUyA9IEBHU1RfUEtHX0RFUFNACitHU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAorR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAorR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1BPSU5URVJfRk9STUFUX0RFRklORUAKK0dTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORSA9IEBHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkVACitHU1RfUkVHSVNUUllfRE9DX1RZUEVTID0gQEdTVF9SRUdJU1RSWV9ET0NfVFlQRVNACitHU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAorR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FID0gQEdTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OX0RFRklORUAKK0dUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACitIQVZFX0RPQ0JPT0sySFRNTCA9IEBIQVZFX0RPQ0JPT0sySFRNTEAKK0hBVkVfRE9DQk9PSzJQUyA9IEBIQVZFX0RPQ0JPT0syUFNACitIQVZFX0RWSVBTID0gQEhBVkVfRFZJUFNACitIQVZFX0VQU1RPUERGID0gQEhBVkVfRVBTVE9QREZACitIQVZFX0ZJRzJERVYgPSBASEFWRV9GSUcyREVWQAorSEFWRV9HTVAgPSBASEFWRV9HTVBACitIQVZFX0dTTCA9IEBIQVZFX0dTTEAKK0hBVkVfSkFERVRFWCA9IEBIQVZFX0pBREVURVhACitIQVZFX1BOR1RPUE5NID0gQEhBVkVfUE5HVE9QTk1ACitIQVZFX1BOTVRPUFMgPSBASEFWRV9QTk1UT1BTQAorSEFWRV9QUzJQREYgPSBASEFWRV9QUzJQREZACitIQVZFX1hNTExJTlQgPSBASEFWRV9YTUxMSU5UQAorSE9TVF9DUFUgPSBASE9TVF9DUFVACitIVE1MX0RJUiA9IEBIVE1MX0RJUkAKK0lORVRfQVRPTl9MSUJTID0gQElORVRfQVRPTl9MSUJTQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAorSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAorSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAorSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACitJTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAorSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAorSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkRJUiA9IEBMSUJESVJACitMSUJJQ09OViA9IEBMSUJJQ09OVkAKK0xJQklOVEwgPSBATElCSU5UTEAKK0xJQk0gPSBATElCTUAKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xPQ0FMRURJUiA9IEBMT0NBTEVESVJACitMVExJQklDT05WID0gQExUTElCSUNPTlZACitMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BSU5UID0gQE1BSU5UQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAorUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKK1BBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACitQQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKK1BBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMX1BBVEggPSBAUEVSTF9QQVRIQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUExVR0lORElSID0gQFBMVUdJTkRJUkAKK1BPU1VCID0gQFBPU1VCQAorUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACitQWVRIT04gPSBAUFlUSE9OQAorUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKK1BZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACitQWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACitQWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKK1ZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKK1ZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1dBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAorV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAorWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKK1hTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK2x0X0VDSE8gPSBAbHRfRUNIT0AKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKK3BrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACitwbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKK3B5dGhvbmRpciA9IEBweXRob25kaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1NVQkRJUlMgPSBnc3QKK2FsbDogYWxsLXJlY3Vyc2l2ZQorCisuU1VGRklYRVM6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBsaWJzL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251IGxpYnMvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKKyMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCisjIGludG8gdGhlbSBhbmQgcnVuIGBtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KKyMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgYG1ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKKyMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gYGNvbmZpZy5zdGF0dXMnLCBlZGl0IGBjb25maWcuc3RhdHVzJworIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gYG1ha2UnKTsKKyMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlIGBtYWtlJyBjb21tYW5kIGxpbmUuCiskKFJFQ1VSU0lWRV9UQVJHRVRTKToKKwlAZmFpbD0gZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKwkgIGNhc2UgJCRmIGluIFwKKwkgICAgKj0qIHwgLS1bIWtdKik7OyBcCisJICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGRvdF9zZWVuPXllczsgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKKwlkb25lOyBcCisJaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCisJZmk7IHRlc3QgLXogIiQkZmFpbCIKKworJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyk6CisJQGZhaWw9IGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwljYXNlICIkQCIgaW4gXAorCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAorCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAorCWVzYWM7IFwKKwlyZXY9Jyc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gOjsgZWxzZSBcCisJICAgIHJldj0iJCRzdWJkaXIgJCRyZXYiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlyZXY9IiQkcmV2IC4iOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWZvciBzdWJkaXIgaW4gJCRyZXY7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmUgJiYgdGVzdCAteiAiJCRmYWlsIgordGFncy1yZWN1cnNpdmU6CisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8ICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdGFncyk7IFwKKwlkb25lCitjdGFncy1yZWN1cnNpdmU6CisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8ICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcCisJZG9uZQorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiB0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJc2V0IHg7IFwKKwloZXJlPWBwd2RgOyBcCisJaWYgKCQoRVRBR1MpIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD0uOyBcCisJZWxzZSBcCisJICBpbmNsdWRlX29wdGlvbj0tLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD07IFwKKwlmaTsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAhIC1mICQkc3ViZGlyL1RBR1MgfHwgXAorCSAgICAgIHNldCAiJCRAIiAiJCRpbmNsdWRlX29wdGlvbj0kJGhlcmUvJCRzdWJkaXIvVEFHUyI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogY3RhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgfHwgJChNS0RJUl9QKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJChkaXN0ZGlyKS8kJHN1YmRpciI7IFwKKwkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKKwkgICAgbmV3X2Rpc3RkaXI9JCRyZWxkaXI7IFwKKwkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJCh0b3BfZGlzdGRpcikiOyBcCisJICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCisJICAgIG5ld190b3BfZGlzdGRpcj0kJHJlbGRpcjsgXAorCSAgICBlY2hvICIgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXFwiOyBcCisJICAgIGVjaG8gIiAgICAgYW1fX3JlbW92ZV9kaXN0ZGlyPTogYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogYW1fX3NraXBfbW9kZV9maXg9OiBkaXN0ZGlyKSI7IFwKKwkgICAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiBcCisJICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBcCisJICAgICAgICBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcCisJCWFtX19yZW1vdmVfZGlzdGRpcj06IFwKKwkJYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogXAorCQlhbV9fc2tpcF9tb2RlX2ZpeD06IFwKKwkgICAgICAgIGRpc3RkaXIpIFwKKwkgICAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLXJlY3Vyc2l2ZQorYWxsLWFtOiBNYWtlZmlsZQoraW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQoraW5zdGFsbGRpcnMtYW06CitpbnN0YWxsOiBpbnN0YWxsLXJlY3Vyc2l2ZQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1yZWN1cnNpdmUKK3VuaW5zdGFsbDogdW5pbnN0YWxsLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tcmVjdXJzaXZlCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLXJlY3Vyc2l2ZQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtcmVjdXJzaXZlCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tcmVjdXJzaXZlCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1yZWN1cnNpdmUKKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLXJlY3Vyc2l2ZQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1yZWN1cnNpdmUKKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtcmVjdXJzaXZlCisKK3BkZi1hbToKKworcHM6IHBzLXJlY3Vyc2l2ZQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgY3RhZ3MtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAgdGFncy1yZWN1cnNpdmUKKworLlBIT05ZOiAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBDVEFHUyBHVEFHUyBcCisJYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgXAorCWN0YWdzIGN0YWdzLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKKwlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKKwlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKKwlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAorCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCisJaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKKwlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgaW5zdGFsbGRpcnMtYW0gbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtcmVjdXJzaXZlIFwKKwl1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisKKworQW5kcm9pZC5tazogTWFrZWZpbGUuYW0KKwlhbmRyb2dlbml6ZXIgLTpQUk9KRUNUIGdzdHJlYW1lciBcCisJIC06U1VCRElSIGxpYnMvZ3N0IFwKKwk+ICRACisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L01ha2VmaWxlLmFtIGIvbGlicy9nc3QvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVhNDQ5OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMzYgQEAKK2lmIEhBVkVfQ0hFQ0sKK1NVQkRJUlNfQ0hFQ0sgPSBjaGVjaworZWxzZQorU1VCRElSU19DSEVDSyA9CitlbmRpZgorCitpZiBHU1RfRElTQUJMRV9ORVQKK1NVQkRJUlNfTkVUID0KK2Vsc2UKK2lmIEhBVkVfU1lTX1NPQ0tFVF9ICitTVUJESVJTX05FVCA9IG5ldAorZWxzZQoraWYgSEFWRV9XSU5TT0NLMl9ICitTVUJESVJTX05FVCA9IG5ldAorZWxzZQorU1VCRElSU19ORVQgPQorZW5kaWYKK2VuZGlmCitlbmRpZgorCitpZiBHU1RfRElTQUJMRV9SRUdJU1RSWQorU1VCRElSU19IRUxQRVJTID0KK2Vsc2UKK1NVQkRJUlNfSEVMUEVSUyA9IGhlbHBlcnMKK2VuZGlmCisKK1NVQkRJUlNfQUxXQVlTID0gYmFzZSBjb250cm9sbGVyIGRhdGFwcm90b2NvbAorCitTVUJESVJTID0gJChTVUJESVJTX0FMV0FZUykgJChTVUJESVJTX0NIRUNLKSAkKFNVQkRJUlNfTkVUKSAkKFNVQkRJUlNfSEVMUEVSUykKK0RJU1RfU1VCRElSUyA9ICQoU1VCRElSU19BTFdBWVMpIGNoZWNrIG5ldCBoZWxwZXJzCisKK0FuZHJvaWQubWs6IE1ha2VmaWxlLmFtCisJZWNobyAkKFBXRCkKKwlhbmRyb2dlbml6ZXIgLTpQUk9KRUNUIGdzdHJlYW1lciBcCisJIC06U1VCRElSICQocGF0c3Vic3QgJSwgbGlicy9nc3QvJSwgJChTVUJESVJTKSkgXAorCT4gJEAKZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L01ha2VmaWxlLmluIGIvbGlicy9nc3QvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRkN2U0MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNzU0IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gbGlicy9nc3QKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXB5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtc2NydWItaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOXyQoVikpCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF8kKFYpKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X2F0XzAgPSBACitTT1VSQ0VTID0KK0RJU1RfU09VUkNFUyA9CitSRUNVUlNJVkVfVEFSR0VUUyA9IGFsbC1yZWN1cnNpdmUgY2hlY2stcmVjdXJzaXZlIGR2aS1yZWN1cnNpdmUgXAorCWh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIGluc3RhbGwtZGF0YS1yZWN1cnNpdmUgXAorCWluc3RhbGwtZHZpLXJlY3Vyc2l2ZSBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWh0bWwtcmVjdXJzaXZlIGluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAorCWluc3RhbGwtcGRmLXJlY3Vyc2l2ZSBpbnN0YWxsLXBzLXJlY3Vyc2l2ZSBpbnN0YWxsLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBpbnN0YWxsZGlycy1yZWN1cnNpdmUgcGRmLXJlY3Vyc2l2ZSBcCisJcHMtcmVjdXJzaXZlIHVuaW5zdGFsbC1yZWN1cnNpdmUKK1JFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTID0gbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZQlcCisgIGRpc3RjbGVhbi1yZWN1cnNpdmUgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKK0FNX1JFQ1VSU0lWRV9UQVJHRVRTID0gJChSRUNVUlNJVkVfVEFSR0VUUzotcmVjdXJzaXZlPSkgXAorCSQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFM6LXJlY3Vyc2l2ZT0pIHRhZ3MgVEFHUyBjdGFncyBDVEFHUyBcCisJZGlzdGRpcgorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK2FtX19yZWxhdGl2aXplID0gXAorICBkaXIwPWBwd2RgOyBcCisgIHNlZF9maXJzdD0ncyxeXChbXi9dKlwpLy4qJCQsXDEsJzsgXAorICBzZWRfcmVzdD0ncyxeW14vXSovKiwsJzsgXAorICBzZWRfbGFzdD0ncyxeLiovXChbXi9dKlwpJCQsXDEsJzsgXAorICBzZWRfYnV0bGFzdD0ncywvKlteL10qJCQsLCc7IFwKKyAgd2hpbGUgdGVzdCAtbiAiJCRkaXIxIjsgZG8gXAorICAgIGZpcnN0PWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCisgICAgaWYgdGVzdCAiJCRmaXJzdCIgIT0gIi4iOyB0aGVuIFwKKyAgICAgIGlmIHRlc3QgIiQkZmlyc3QiID0gIi4uIjsgdGhlbiBcCisgICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2xhc3QiYC8iJCRkaXIyIjsgXAorICAgICAgICBkaXIwPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9idXRsYXN0ImA7IFwKKyAgICAgIGVsc2UgXAorICAgICAgICBmaXJzdDI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKKyAgICAgICAgaWYgdGVzdCAiJCRmaXJzdDIiID0gIiQkZmlyc3QiOyB0aGVuIFwKKyAgICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKKyAgICAgICAgZWxzZSBcCisgICAgICAgICAgZGlyMj0iLi4vJCRkaXIyIjsgXAorICAgICAgICBmaTsgXAorICAgICAgICBkaXIwPSIkJGRpcjAiLyIkJGZpcnN0IjsgXAorICAgICAgZmk7IFwKKyAgICBmaTsgXAorICAgIGRpcjE9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAorICBkb25lOyBcCisgIHJlbGRpcj0iJCRkaXIyIgorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKK0NDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKK0NIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKK0NIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKK0NIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUiA9IEBEQVRBRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAorRExMVE9PTCA9IEBETExUT09MQAorRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKK0VSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACitFWEVFWFQgPSBARVhFRVhUQAorRkZMQUdTID0gQEZGTEFHU0AKK0ZHUkVQID0gQEZHUkVQQAorRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKK0dDT1YgPSBAR0NPVkAKK0dDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAorR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACitHTElCX0xJQlMgPSBAR0xJQl9MSUJTQAorR0xJQl9PTkxZX0NGTEFHUyA9IEBHTElCX09OTFlfQ0ZMQUdTQAorR0xJQl9PTkxZX0xJQlMgPSBAR0xJQl9PTkxZX0xJQlNACitHTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKK0dMSUJfUkVRID0gQEdMSUJfUkVRQAorR01QX0xJQlMgPSBAR01QX0xJQlNACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dSRVAgPSBAR1JFUEAKK0dTTF9MSUJTID0gQEdTTF9MSUJTQAorR1NUX0FHRSA9IEBHU1RfQUdFQAorR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACitHU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACitHU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAorR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKK0dTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAorR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORUAKK0dTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKK0dTVF9ESVNBQkxFX05FVF9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfTkVUX0RFRklORUAKK0dTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACitHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAorR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAorR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKK0dTVF9ESVNBQkxFX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkVACitHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACitHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACitHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORSA9IEBHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORUAKK0dTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAorR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACitHU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAorR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACitHU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKK0dTVF9NQUpPUk1JTk9SID0gQEdTVF9NQUpPUk1JTk9SQAorR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACitHU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACitHU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAorR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACitHU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACitHU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACitHU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAorR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAorR1NUX1BLR19ERVBTID0gQEdTVF9QS0dfREVQU0AKK0dTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACitHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FQAorR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORUAKK0dTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKK0dTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACitHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkUgPSBAR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FQAorR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKK0hBVkVfRE9DQk9PSzJIVE1MID0gQEhBVkVfRE9DQk9PSzJIVE1MQAorSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKK0hBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKK0hBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKK0hBVkVfRklHMkRFViA9IEBIQVZFX0ZJRzJERVZACitIQVZFX0dNUCA9IEBIQVZFX0dNUEAKK0hBVkVfR1NMID0gQEhBVkVfR1NMQAorSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKK0hBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKK0hBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACitIQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKK0hBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACitIT1NUX0NQVSA9IEBIT1NUX0NQVUAKK0hUTUxfRElSID0gQEhUTUxfRElSQAorSU5FVF9BVE9OX0xJQlMgPSBASU5FVF9BVE9OX0xJQlNACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCRElSID0gQExJQkRJUkAKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCTSA9IEBMSUJNQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTE9DQUxFRElSID0gQExPQ0FMRURJUkAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACitQQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAorUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKK1BBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAorUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BFUkxfUEFUSCA9IEBQRVJMX1BBVEhACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQTFVHSU5ESVIgPSBAUExVR0lORElSQAorUE9TVUIgPSBAUE9TVUJACitQUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAorVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAorVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACitXSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACitYTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKK1hTTFRQUk9DID0gQFhTTFRQUk9DQAorWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3BsdWdpbmRpciA9IEBwbHVnaW5kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorQEhBVkVfQ0hFQ0tfRkFMU0VAU1VCRElSU19DSEVDSyA9IAorQEhBVkVfQ0hFQ0tfVFJVRUBTVUJESVJTX0NIRUNLID0gY2hlY2sKK0BHU1RfRElTQUJMRV9ORVRfRkFMU0VAQEhBVkVfU1lTX1NPQ0tFVF9IX0ZBTFNFQEBIQVZFX1dJTlNPQ0syX0hfRkFMU0VAU1VCRElSU19ORVQgPSAKK0BHU1RfRElTQUJMRV9ORVRfRkFMU0VAQEhBVkVfU1lTX1NPQ0tFVF9IX0ZBTFNFQEBIQVZFX1dJTlNPQ0syX0hfVFJVRUBTVUJESVJTX05FVCA9IG5ldAorQEdTVF9ESVNBQkxFX05FVF9GQUxTRUBASEFWRV9TWVNfU09DS0VUX0hfVFJVRUBTVUJESVJTX05FVCA9IG5ldAorQEdTVF9ESVNBQkxFX05FVF9UUlVFQFNVQkRJUlNfTkVUID0gCitAR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VAU1VCRElSU19IRUxQRVJTID0gaGVscGVycworQEdTVF9ESVNBQkxFX1JFR0lTVFJZX1RSVUVAU1VCRElSU19IRUxQRVJTID0gCitTVUJESVJTX0FMV0FZUyA9IGJhc2UgY29udHJvbGxlciBkYXRhcHJvdG9jb2wKK1NVQkRJUlMgPSAkKFNVQkRJUlNfQUxXQVlTKSAkKFNVQkRJUlNfQ0hFQ0spICQoU1VCRElSU19ORVQpICQoU1VCRElSU19IRUxQRVJTKQorRElTVF9TVUJESVJTID0gJChTVUJESVJTX0FMV0FZUykgY2hlY2sgbmV0IGhlbHBlcnMKK2FsbDogYWxsLXJlY3Vyc2l2ZQorCisuU1VGRklYRVM6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBsaWJzL2dzdC9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSBsaWJzL2dzdC9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKKyMgaW50byB0aGVtIGFuZCBydW4gYG1ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgorIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiBgbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAorIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiBgY29uZmlnLnN0YXR1cycsIGVkaXQgYGNvbmZpZy5zdGF0dXMnCisjICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biBgbWFrZScpOworIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgYG1ha2UnIGNvbW1hbmQgbGluZS4KKyQoUkVDVVJTSVZFX1RBUkdFVFMpOgorCUBmYWlsPSBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgZG90X3NlZW49eWVzOyBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmU7IFwKKwlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKKwlmaTsgdGVzdCAteiAiJCRmYWlsIgorCiskKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKToKKwlAZmFpbD0gZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKwkgIGNhc2UgJCRmIGluIFwKKwkgICAgKj0qIHwgLS1bIWtdKik7OyBcCisJICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCWNhc2UgIiRAIiBpbiBcCisJICBkaXN0Y2xlYW4tKiB8IG1haW50YWluZXItY2xlYW4tKikgbGlzdD0nJChESVNUX1NVQkRJUlMpJyA7OyBcCisJICAqKSBsaXN0PSckKFNVQkRJUlMpJyA7OyBcCisJZXNhYzsgXAorCXJldj0nJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgcmV2PSIkJHN1YmRpciAkJHJldiI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCXJldj0iJCRyZXYgLiI7IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJZm9yIHN1YmRpciBpbiAkJHJldjsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZSAmJiB0ZXN0IC16ICIkJGZhaWwiCit0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAorCWRvbmUKK2N0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjdGFncyk7IFwKKwlkb25lCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PS47IFwKKwllbHNlIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PTsgXAorCWZpOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCisJICAgICAgc2V0ICIkJEAiICIkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiBjdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCAkKE1LRElSX1ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJQGxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKGRpc3RkaXIpLyQkc3ViZGlyIjsgXAorCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAorCSAgICBuZXdfZGlzdGRpcj0kJHJlbGRpcjsgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKHRvcF9kaXN0ZGlyKSI7IFwKKwkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKKwkgICAgbmV3X3RvcF9kaXN0ZGlyPSQkcmVsZGlyOyBcCisJICAgIGVjaG8gIiAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcXCI7IFwKKwkgICAgZWNobyAiICAgICBhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBhbV9fc2tpcF9tb2RlX2ZpeD06IGRpc3RkaXIpIjsgXAorCSAgICAoJChhbV9fY2QpICQkc3ViZGlyICYmIFwKKwkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCisJICAgICAgICB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIFwKKwkgICAgICAgIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFwKKwkJYW1fX3JlbW92ZV9kaXN0ZGlyPTogXAorCQlhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBcCisJCWFtX19za2lwX21vZGVfZml4PTogXAorCSAgICAgICAgZGlzdGRpcikgXAorCSAgICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stcmVjdXJzaXZlCithbGwtYW06IE1ha2VmaWxlCitpbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtcmVjdXJzaXZlCitpbnN0YWxsZGlycy1hbToKK2luc3RhbGw6IGluc3RhbGwtcmVjdXJzaXZlCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQordW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1yZWN1cnNpdmUKKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktcmVjdXJzaXZlCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1yZWN1cnNpdmUKKworaHRtbC1hbToKKworaW5mbzogaW5mby1yZWN1cnNpdmUKKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktcmVjdXJzaXZlCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtcmVjdXJzaXZlCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLXJlY3Vyc2l2ZQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1yZWN1cnNpdmUKKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1yZWN1cnNpdmUKKworcGRmLWFtOgorCitwczogcHMtcmVjdXJzaXZlCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBjdGFncy1yZWN1cnNpdmUgXAorCWluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcCB0YWdzLXJlY3Vyc2l2ZQorCisuUEhPTlk6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIFwKKwlhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisJY3RhZ3MgY3RhZ3MtcmVjdXJzaXZlIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAorCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAorCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAorCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCisJaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKKwlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBpbnN0YWxsZGlycy1hbSBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1yZWN1cnNpdmUgXAorCXVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworCitBbmRyb2lkLm1rOiBNYWtlZmlsZS5hbQorCWVjaG8gJChQV0QpCisJYW5kcm9nZW5pemVyIC06UFJPSkVDVCBnc3RyZWFtZXIgXAorCSAtOlNVQkRJUiAkKHBhdHN1YnN0ICUsIGxpYnMvZ3N0LyUsICQoU1VCRElSUykpIFwKKwk+ICRACisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW0gYi9saWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNWY1MGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMTA5IEBACitsaWJfTFRMSUJSQVJJRVMgPSBsaWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEKKworbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhX0RFUEVOREVOQ0lFUyA9IFwKKwkkKHRvcF9idWlsZGRpcikvZ3N0L2xpYmdzdHJlYW1lci1AR1NUX01BSk9STUlOT1JALmxhCitsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGFfU09VUkNFUyA9IFwKKwlnc3RhZGFwdGVyLmMJCVwKKwlnc3RiYXNlcGFyc2UuYwkJXAorCWdzdGJhc2VzaW5rLmMJCVwKKwlnc3RiYXNlc3JjLmMJCVwKKwlnc3RiYXNldHJhbnNmb3JtLmMJXAorCWdzdGJpdHJlYWRlci5jCQlcCisJZ3N0Ynl0ZXJlYWRlci5jCQlcCisJZ3N0Ynl0ZXdyaXRlci5jICAgICAgICAgXAorCWdzdGNvbGxlY3RwYWRzLmMJXAorCWdzdHB1c2hzcmMuYwkJXAorCWdzdHR5cGVmaW5kaGVscGVyLmMJXAorCWdzdGRhdGFxdWV1ZS5jCisKK2xpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQorbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhX0xJQkFERCA9ICQoR1NUX09CSl9MSUJTKQorbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhX0xERkxBR1MgPSAkKEdTVF9MSUJfTERGTEFHUykgJChHU1RfQUxMX0xERkxBR1MpICQoR1NUX0xUX0xERkxBR1MpCisKK2xpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVkaXIgPQkJXAorCSQoaW5jbHVkZWRpcikvZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAvZ3N0L2Jhc2UKKworbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAaW5jbHVkZV9IRUFERVJTID0JXAorCWdzdGFkYXB0ZXIuaAkJXAorCWdzdGJhc2VwYXJzZS5oCQlcCisJZ3N0YmFzZXNpbmsuaAkJXAorCWdzdGJhc2VzcmMuaAkJXAorCWdzdGJhc2V0cmFuc2Zvcm0uaAlcCisJZ3N0Yml0cmVhZGVyLmgJCVwKKwlnc3RieXRlcmVhZGVyLmgJCVwKKwlnc3RieXRld3JpdGVyLmggICAgICAgICBcCisJZ3N0Y29sbGVjdHBhZHMuaAlcCisJZ3N0cHVzaHNyYy5oCQlcCisJZ3N0dHlwZWZpbmRoZWxwZXIuaAlcCisJZ3N0ZGF0YXF1ZXVlLmgKKworbm9pbnN0X0hFQURFUlMgPSBcCisJZ3N0Ynl0ZXJlYWRlci1kb2NzLmggXAorCWdzdGJ5dGV3cml0ZXItZG9jcy5oIFwKKwlnc3RiaXRyZWFkZXItZG9jcy5oCisKK0NMRUFORklMRVMgPSAqLmdjbm8gKi5nY2RhICouZ2NvdgorCislLmMuZ2NvdjogLmxpYnMvbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLSUuZ2NkYSAlLmMKKwkkKEdDT1YpIC1iIC1mIC1vICReID4gJEAub3V0CisKK2djb3Y6ICQobGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhX1NPVVJDRVM6PS5nY292KQorCitBbmRyb2lkLm1rOiBNYWtlZmlsZS5hbQorCWFuZHJvZ2VuaXplciAtOlBST0pFQ1QgZ3N0cmVhbWVyIC06U0hBUkVEIGxpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQCAtOlRBR1MgZW5nIGRlYnVnIFwKKwkgLTpSRUxfVE9QICQodG9wX3NyY2RpcikgLTpBQlNfVE9QICQoYWJzX3RvcF9zcmNkaXIpIFwKKwkgLTpTT1VSQ0VTICQobGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhX1NPVVJDRVMpIFwKKwkgLTpDRkxBR1MgJChERUZTKSAkKGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpIFwKKwkgLTpMREZMQUdTICQobGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhX0xERkxBR1MpIFwKKwkgICAgICAgICAgICQobGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhX0xJQkFERCkgXAorCSAtOkhFQURFUl9UQVJHRVQgZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAvZ3N0L2Jhc2UgXAorCSAtOkhFQURFUlMgJChsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlX0hFQURFUlMpIFwKKwkgLTpQQVNTVEhST1VHSCBMT0NBTF9BUk1fTU9ERTo9YXJtIFwKKwk+ICRACisKK2lmIEhBVkVfSU5UUk9TUEVDVElPTgorQlVJTFRfR0lSU09VUkNFUyA9IEdzdEJhc2UtQEdTVF9NQUpPUk1JTk9SQC5naXIKKworZ2lyX2hlYWRlcnM9JChwYXRzdWJzdCAlLCQoc3JjZGlyKS8lLCAkKGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVfSEVBREVSUykpCitnaXJfc291cmNlcz0kKHBhdHN1YnN0ICUsJChzcmNkaXIpLyUsICQobGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhX1NPVVJDRVMpKQorZ2lyX2NpbmNsdWRlcz0kKHBhdHN1YnN0ICUsLS1jLWluY2x1ZGU9J2dzdC9iYXNlLyUnLCQobGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAaW5jbHVkZV9IRUFERVJTKSkKKworR3N0QmFzZS1AR1NUX01BSk9STUlOT1JALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYQorCSQoQU1fVl9HRU4pUEtHX0NPTkZJR19QQVRIPSIkKEdTVF9QS0dfQ09ORklHX1BBVEgpIiBcCisJCUdTVF9QTFVHSU5fU1lTVEVNX1BBVEg9IiIgR1NUX1BMVUdJTl9QQVRIPSIiIEdTVF9SRUdJU1RSWV9VUERBVEU9bm8gXAorCQkkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgLXYgLS1uYW1lc3BhY2UgR3N0QmFzZSBcCisJCS0tbnN2ZXJzaW9uPUBHU1RfTUFKT1JNSU5PUkAgXAorCQktLXN0cmlwLXByZWZpeD1Hc3QgXAorCQktREdTVF9VU0VfVU5TVEFCTEVfQVBJIFwKKwkJLUkkKHRvcF9zcmNkaXIpIFwKKwkJLUkkKHRvcF9zcmNkaXIpL2xpYnMgXAorCQktSSQodG9wX2J1aWxkZGlyKSBcCisJCS1JJCh0b3BfYnVpbGRkaXIpL2xpYnMgXAorCQkkKGdpcl9jaW5jbHVkZXMpIFwKKwkJLS1hZGQtaW5jbHVkZS1wYXRoPSQodG9wX2J1aWxkZGlyKS9nc3QgXAorCQktLWxpYnJhcnktcGF0aD0kKHRvcF9idWlsZGRpcikvZ3N0IFwKKwkJLS1saWJyYXJ5PSQodG9wX2J1aWxkZGlyKS9nc3QvbGliZ3N0cmVhbWVyLTAuMTEubGEgXAorCQktLWxpYnJhcnk9bGliZ3N0YmFzZS0wLjExLmxhIFwKKwkJLS1pbmNsdWRlPUdzdC0wLjExIFwKKwkJLS1saWJ0b29sPSIkKHRvcF9idWlsZGRpcikvbGlidG9vbCIgXAorCQktLXBrZyBnc3RyZWFtZXItQEdTVF9NQUpPUk1JTk9SQCBcCisJCS0tcGtnLWV4cG9ydCBnc3RyZWFtZXItYmFzZS1AR1NUX01BSk9STUlOT1JAIFwKKwkJLS1hZGQtaW5pdC1zZWN0aW9uPSJnc3RfaW5pdChOVUxMLE5VTEwpOyIgXAorCQktLW91dHB1dCAkQCBcCisJCSQoZ2lyX2hlYWRlcnMpIFwKKwkJJChnaXJfc291cmNlcykKKworIyBJTlRST1NQRUNUSU9OX0dJUkRJUi9JTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgYXJlbid0IHRoZSByaWdodCBwbGFjZSB0bworIyBpbnN0YWxsIGFueXRoaW5nIC0gd2UgbmVlZCB0byBpbnN0YWxsIGluc2lkZSBvdXIgcHJlZml4LgorZ2lyZGlyID0gJChkYXRhZGlyKS9naXItMS4wCitnaXJfREFUQSA9ICQoQlVJTFRfR0lSU09VUkNFUykKKwordHlwZWxpYnNkaXIgPSAkKGxpYmRpcikvZ2lyZXBvc2l0b3J5LTEuMC8KKwordHlwZWxpYnNfREFUQSA9ICQoQlVJTFRfR0lSU09VUkNFUzouZ2lyPS50eXBlbGliKQorCislLnR5cGVsaWI6ICUuZ2lyICQoSU5UUk9TUEVDVElPTl9DT01QSUxFUikKKwkkKEFNX1ZfR0VOKSQoSU5UUk9TUEVDVElPTl9DT01QSUxFUikgLS1pbmNsdWRlZGlyPSQoc3JjZGlyKSAtLWluY2x1ZGVkaXI9JChidWlsZGRpcikgLS1pbmNsdWRlZGlyPSQodG9wX2J1aWxkZGlyKS9nc3QgJChJTlRST1NQRUNUSU9OX0NPTVBJTEVSX09QVFMpICQ8IC1vICQoQEYpCisKK0NMRUFORklMRVMgKz0gJChCVUlMVF9HSVJTT1VSQ0VTKSAkKHR5cGVsaWJzX0RBVEEpCitlbmRpZgpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5pbiBiL2xpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY5OTczMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwxMDE0IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCisKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQGFtX19hcHBlbmRfMSA9ICQoQlVJTFRfR0lSU09VUkNFUykgJCh0eXBlbGlic19EQVRBKQorc3ViZGlyID0gbGlicy9nc3QvYmFzZQorRElTVF9DT01NT04gPSBSRUFETUUgJChsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlX0hFQURFUlMpIFwKKwkkKG5vaW5zdF9IRUFERVJTKSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtcHl0aG9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1zY3J1Yi1pbmNsdWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZnVuY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYXJzZXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2ludHJvc3BlY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jaGVjay1jaGVja3MubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ljb252Lm00ICQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00ICQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L25scy5tNCAkKHRvcF9zcmNkaXIpL200L3BvLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxfbWF4ID0gNDAKK2FtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCisgIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKK2FtX19ub2Jhc2Vfc3RyaXAgPSBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgorYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCisgICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAorICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAorICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKK2FtX19iYXNlX2xpc3QgPSBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKK2FtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChsaWJkaXIpIiAiJChERVNURElSKSQoZ2lyZGlyKSIgXAorCSIkKERFU1RESVIpJCh0eXBlbGlic2RpcikiIFwKKwkiJChERVNURElSKSQobGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAaW5jbHVkZWRpcikiCitMVExJQlJBUklFUyA9ICQobGliX0xUTElCUkFSSUVTKQorYW1fX0RFUEVOREVOQ0lFU18xID0KK2FtX2xpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYV9PQkpFQ1RTID0gIFwKKwlsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YWRhcHRlci5sbyBcCisJbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJhc2VwYXJzZS5sbyBcCisJbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJhc2VzaW5rLmxvIFwKKwlsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YmFzZXNyYy5sbyBcCisJbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJhc2V0cmFuc2Zvcm0ubG8gXAorCWxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RiaXRyZWFkZXIubG8gXAorCWxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RieXRlcmVhZGVyLmxvIFwKKwlsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Ynl0ZXdyaXRlci5sbyBcCisJbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNvbGxlY3RwYWRzLmxvIFwKKwlsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cHVzaHNyYy5sbyBcCisJbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHR5cGVmaW5kaGVscGVyLmxvIFwKKwlsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZGF0YXF1ZXVlLmxvCitsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGFfT0JKRUNUUyA9ICBcCisJJChhbV9saWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGFfT0JKRUNUUykKK0FNX1ZfbHQgPSAkKGFtX192X2x0XyQoVikpCithbV9fdl9sdF8gPSAkKGFtX192X2x0XyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfbHRfMCA9IC0tc2lsZW50CitsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCisJJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKKwkkKGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCithbV9fbXYgPSBtdiAtZgorQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0FNX1ZfQ0MgPSAkKGFtX192X0NDXyQoVikpCithbV9fdl9DQ18gPSAkKGFtX192X0NDXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF8kKFYpKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X2F0XzAgPSBACitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0FNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF8kKFYpKQorYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAiICRAOworQU1fVl9HRU4gPSAkKGFtX192X0dFTl8kKFYpKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworU09VUkNFUyA9ICQobGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhX1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYV9TT1VSQ0VTKQorREFUQSA9ICQoZ2lyX0RBVEEpICQodHlwZWxpYnNfREFUQSkKK0hFQURFUlMgPSAkKGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVfSEVBREVSUykgXAorCSQobm9pbnN0X0hFQURFUlMpCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKK0NDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKK0NIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKK0NIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKK0NIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUiA9IEBEQVRBRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAorRExMVE9PTCA9IEBETExUT09MQAorRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKK0VSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACitFWEVFWFQgPSBARVhFRVhUQAorRkZMQUdTID0gQEZGTEFHU0AKK0ZHUkVQID0gQEZHUkVQQAorRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKK0dDT1YgPSBAR0NPVkAKK0dDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAorR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACitHTElCX0xJQlMgPSBAR0xJQl9MSUJTQAorR0xJQl9PTkxZX0NGTEFHUyA9IEBHTElCX09OTFlfQ0ZMQUdTQAorR0xJQl9PTkxZX0xJQlMgPSBAR0xJQl9PTkxZX0xJQlNACitHTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKK0dMSUJfUkVRID0gQEdMSUJfUkVRQAorR01QX0xJQlMgPSBAR01QX0xJQlNACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dSRVAgPSBAR1JFUEAKK0dTTF9MSUJTID0gQEdTTF9MSUJTQAorR1NUX0FHRSA9IEBHU1RfQUdFQAorR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACitHU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACitHU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAorR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKK0dTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAorR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORUAKK0dTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKK0dTVF9ESVNBQkxFX05FVF9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfTkVUX0RFRklORUAKK0dTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACitHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAorR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAorR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKK0dTVF9ESVNBQkxFX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkVACitHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACitHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACitHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORSA9IEBHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORUAKK0dTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAorR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACitHU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAorR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACitHU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKK0dTVF9NQUpPUk1JTk9SID0gQEdTVF9NQUpPUk1JTk9SQAorR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACitHU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACitHU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAorR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACitHU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACitHU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACitHU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAorR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAorR1NUX1BLR19ERVBTID0gQEdTVF9QS0dfREVQU0AKK0dTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACitHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FQAorR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORUAKK0dTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKK0dTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACitHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkUgPSBAR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FQAorR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKK0hBVkVfRE9DQk9PSzJIVE1MID0gQEhBVkVfRE9DQk9PSzJIVE1MQAorSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKK0hBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKK0hBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKK0hBVkVfRklHMkRFViA9IEBIQVZFX0ZJRzJERVZACitIQVZFX0dNUCA9IEBIQVZFX0dNUEAKK0hBVkVfR1NMID0gQEhBVkVfR1NMQAorSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKK0hBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKK0hBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACitIQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKK0hBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACitIT1NUX0NQVSA9IEBIT1NUX0NQVUAKK0hUTUxfRElSID0gQEhUTUxfRElSQAorSU5FVF9BVE9OX0xJQlMgPSBASU5FVF9BVE9OX0xJQlNACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCRElSID0gQExJQkRJUkAKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCTSA9IEBMSUJNQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTE9DQUxFRElSID0gQExPQ0FMRURJUkAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACitQQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAorUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKK1BBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAorUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BFUkxfUEFUSCA9IEBQRVJMX1BBVEhACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQTFVHSU5ESVIgPSBAUExVR0lORElSQAorUE9TVUIgPSBAUE9TVUJACitQUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAorVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAorVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACitXSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACitYTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKK1hTTFRQUk9DID0gQFhTTFRQUk9DQAorWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3BsdWdpbmRpciA9IEBwbHVnaW5kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorbGliX0xUTElCUkFSSUVTID0gbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhCitsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGFfREVQRU5ERU5DSUVTID0gXAorCSQodG9wX2J1aWxkZGlyKS9nc3QvbGliZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAubGEKKworbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhX1NPVVJDRVMgPSBcCisJZ3N0YWRhcHRlci5jCQlcCisJZ3N0YmFzZXBhcnNlLmMJCVwKKwlnc3RiYXNlc2luay5jCQlcCisJZ3N0YmFzZXNyYy5jCQlcCisJZ3N0YmFzZXRyYW5zZm9ybS5jCVwKKwlnc3RiaXRyZWFkZXIuYwkJXAorCWdzdGJ5dGVyZWFkZXIuYwkJXAorCWdzdGJ5dGV3cml0ZXIuYyAgICAgICAgIFwKKwlnc3Rjb2xsZWN0cGFkcy5jCVwKKwlnc3RwdXNoc3JjLmMJCVwKKwlnc3R0eXBlZmluZGhlbHBlci5jCVwKKwlnc3RkYXRhcXVldWUuYworCitsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykKK2xpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYV9MSUJBREQgPSAkKEdTVF9PQkpfTElCUykKK2xpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYV9MREZMQUdTID0gJChHU1RfTElCX0xERkxBR1MpICQoR1NUX0FMTF9MREZMQUdTKSAkKEdTVF9MVF9MREZMQUdTKQorbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAaW5jbHVkZWRpciA9IFwKKwkkKGluY2x1ZGVkaXIpL2dzdHJlYW1lci1AR1NUX01BSk9STUlOT1JAL2dzdC9iYXNlCisKK2xpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVfSEVBREVSUyA9IFwKKwlnc3RhZGFwdGVyLmgJCVwKKwlnc3RiYXNlcGFyc2UuaAkJXAorCWdzdGJhc2VzaW5rLmgJCVwKKwlnc3RiYXNlc3JjLmgJCVwKKwlnc3RiYXNldHJhbnNmb3JtLmgJXAorCWdzdGJpdHJlYWRlci5oCQlcCisJZ3N0Ynl0ZXJlYWRlci5oCQlcCisJZ3N0Ynl0ZXdyaXRlci5oICAgICAgICAgXAorCWdzdGNvbGxlY3RwYWRzLmgJXAorCWdzdHB1c2hzcmMuaAkJXAorCWdzdHR5cGVmaW5kaGVscGVyLmgJXAorCWdzdGRhdGFxdWV1ZS5oCisKK25vaW5zdF9IRUFERVJTID0gXAorCWdzdGJ5dGVyZWFkZXItZG9jcy5oIFwKKwlnc3RieXRld3JpdGVyLWRvY3MuaCBcCisJZ3N0Yml0cmVhZGVyLWRvY3MuaAorCitDTEVBTkZJTEVTID0gKi5nY25vICouZ2NkYSAqLmdjb3YgJChhbV9fYXBwZW5kXzEpCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAQlVJTFRfR0lSU09VUkNFUyA9IEdzdEJhc2UtQEdTVF9NQUpPUk1JTk9SQC5naXIKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBnaXJfaGVhZGVycyA9ICQocGF0c3Vic3QgJSwkKHNyY2RpcikvJSwgJChsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlX0hFQURFUlMpKQorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQGdpcl9zb3VyY2VzID0gJChwYXRzdWJzdCAlLCQoc3JjZGlyKS8lLCAkKGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYV9TT1VSQ0VTKSkKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBnaXJfY2luY2x1ZGVzID0gJChwYXRzdWJzdCAlLC0tYy1pbmNsdWRlPSdnc3QvYmFzZS8lJywkKGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVfSEVBREVSUykpCisKKyMgSU5UUk9TUEVDVElPTl9HSVJESVIvSU5UUk9TUEVDVElPTl9UWVBFTElCRElSIGFyZW4ndCB0aGUgcmlnaHQgcGxhY2UgdG8KKyMgaW5zdGFsbCBhbnl0aGluZyAtIHdlIG5lZWQgdG8gaW5zdGFsbCBpbnNpZGUgb3VyIHByZWZpeC4KK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBnaXJkaXIgPSAkKGRhdGFkaXIpL2dpci0xLjAKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBnaXJfREFUQSA9ICQoQlVJTFRfR0lSU09VUkNFUykKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUB0eXBlbGlic2RpciA9ICQobGliZGlyKS9naXJlcG9zaXRvcnktMS4wLworQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQHR5cGVsaWJzX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVM6Lmdpcj0udHlwZWxpYikKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbnUgbGlicy9nc3QvYmFzZS9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKK2luc3RhbGwtbGliTFRMSUJSQVJJRVM6ICQobGliX0xUTElCUkFSSUVTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQobGliZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQobGliZGlyKSIKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCisJICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKKwkgIGVsc2UgOjsgZmk7IFwKKwlkb25lOyBcCisJdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKGxpYmRpciknIjsgXAorCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKGxpYmRpcikiOyBcCisJfQorCit1bmluc3RhbGwtbGliTFRMSUJSQVJJRVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgJChhbV9fc3RyaXBfZGlyKSBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKGxpYmRpcikvJCRmJyI7IFwKKwkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChsaWJkaXIpLyQkZiI7IFwKKwlkb25lCisKK2NsZWFuLWxpYkxUTElCUkFSSUVTOgorCS10ZXN0IC16ICIkKGxpYl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobGliX0xUTElCUkFSSUVTKQorCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGRpcj0iYGVjaG8gJCRwIHwgc2VkIC1lICdzfC9bXi9dKiQkfHwnYCI7IFwKKwkgIHRlc3QgIiQkZGlyIiAhPSAiJCRwIiB8fCBkaXI9LjsgXAorCSAgZWNobyAicm0gLWYgXCIkJHtkaXJ9L3NvX2xvY2F0aW9uc1wiIjsgXAorCSAgcm0gLWYgIiQke2Rpcn0vc29fbG9jYXRpb25zIjsgXAorCWRvbmUKK2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYTogJChsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGFfT0JKRUNUUykgJChsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGFfREVQRU5ERU5DSUVTKSAKKwkkKEFNX1ZfQ0NMRCkkKGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYV9MSU5LKSAtcnBhdGggJChsaWJkaXIpICQobGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhX09CSkVDVFMpICQobGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhX0xJQkFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGFkYXB0ZXIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YmFzZXBhcnNlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJhc2VzaW5rLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJhc2VzcmMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YmFzZXRyYW5zZm9ybS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RiaXRyZWFkZXIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Ynl0ZXJlYWRlci5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RieXRld3JpdGVyLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNvbGxlY3RwYWRzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGRhdGFxdWV1ZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwdXNoc3JjLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHR5cGVmaW5kaGVscGVyLlBsb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCitsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YWRhcHRlci5sbzogZ3N0YWRhcHRlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YWRhcHRlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGFkYXB0ZXIuVHBvIC1jIC1vIGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RhZGFwdGVyLmxvIGB0ZXN0IC1mICdnc3RhZGFwdGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGFkYXB0ZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGFkYXB0ZXIuVHBvICQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YWRhcHRlci5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RhZGFwdGVyLmMnIG9iamVjdD0nbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGFkYXB0ZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGFkYXB0ZXIubG8gYHRlc3QgLWYgJ2dzdGFkYXB0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YWRhcHRlci5jCisKK2xpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RiYXNlcGFyc2UubG86IGdzdGJhc2VwYXJzZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YmFzZXBhcnNlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YmFzZXBhcnNlLlRwbyAtYyAtbyBsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YmFzZXBhcnNlLmxvIGB0ZXN0IC1mICdnc3RiYXNlcGFyc2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YmFzZXBhcnNlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RiYXNlcGFyc2UuVHBvICQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YmFzZXBhcnNlLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdGJhc2VwYXJzZS5jJyBvYmplY3Q9J2xpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RiYXNlcGFyc2UubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJhc2VwYXJzZS5sbyBgdGVzdCAtZiAnZ3N0YmFzZXBhcnNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGJhc2VwYXJzZS5jCisKK2xpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RiYXNlc2luay5sbzogZ3N0YmFzZXNpbmsuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJhc2VzaW5rLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YmFzZXNpbmsuVHBvIC1jIC1vIGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RiYXNlc2luay5sbyBgdGVzdCAtZiAnZ3N0YmFzZXNpbmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YmFzZXNpbmsuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJhc2VzaW5rLlRwbyAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJhc2VzaW5rLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdGJhc2VzaW5rLmMnIG9iamVjdD0nbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJhc2VzaW5rLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RiYXNlc2luay5sbyBgdGVzdCAtZiAnZ3N0YmFzZXNpbmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YmFzZXNpbmsuYworCitsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YmFzZXNyYy5sbzogZ3N0YmFzZXNyYy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YmFzZXNyYy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJhc2VzcmMuVHBvIC1jIC1vIGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RiYXNlc3JjLmxvIGB0ZXN0IC1mICdnc3RiYXNlc3JjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGJhc2VzcmMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJhc2VzcmMuVHBvICQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YmFzZXNyYy5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RiYXNlc3JjLmMnIG9iamVjdD0nbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJhc2VzcmMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJhc2VzcmMubG8gYHRlc3QgLWYgJ2dzdGJhc2VzcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YmFzZXNyYy5jCisKK2xpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RiYXNldHJhbnNmb3JtLmxvOiBnc3RiYXNldHJhbnNmb3JtLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RiYXNldHJhbnNmb3JtLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YmFzZXRyYW5zZm9ybS5UcG8gLWMgLW8gbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJhc2V0cmFuc2Zvcm0ubG8gYHRlc3QgLWYgJ2dzdGJhc2V0cmFuc2Zvcm0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YmFzZXRyYW5zZm9ybS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YmFzZXRyYW5zZm9ybS5UcG8gJChERVBESVIpL2xpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RiYXNldHJhbnNmb3JtLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdGJhc2V0cmFuc2Zvcm0uYycgb2JqZWN0PSdsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YmFzZXRyYW5zZm9ybS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YmFzZXRyYW5zZm9ybS5sbyBgdGVzdCAtZiAnZ3N0YmFzZXRyYW5zZm9ybS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RiYXNldHJhbnNmb3JtLmMKKworbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJpdHJlYWRlci5sbzogZ3N0Yml0cmVhZGVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RiaXRyZWFkZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RiaXRyZWFkZXIuVHBvIC1jIC1vIGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RiaXRyZWFkZXIubG8gYHRlc3QgLWYgJ2dzdGJpdHJlYWRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RiaXRyZWFkZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJpdHJlYWRlci5UcG8gJChERVBESVIpL2xpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RiaXRyZWFkZXIuUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0Yml0cmVhZGVyLmMnIG9iamVjdD0nbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJpdHJlYWRlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Yml0cmVhZGVyLmxvIGB0ZXN0IC1mICdnc3RiaXRyZWFkZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Yml0cmVhZGVyLmMKKworbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJ5dGVyZWFkZXIubG86IGdzdGJ5dGVyZWFkZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJ5dGVyZWFkZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RieXRlcmVhZGVyLlRwbyAtYyAtbyBsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Ynl0ZXJlYWRlci5sbyBgdGVzdCAtZiAnZ3N0Ynl0ZXJlYWRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RieXRlcmVhZGVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RieXRlcmVhZGVyLlRwbyAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJ5dGVyZWFkZXIuUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0Ynl0ZXJlYWRlci5jJyBvYmplY3Q9J2xpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RieXRlcmVhZGVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RieXRlcmVhZGVyLmxvIGB0ZXN0IC1mICdnc3RieXRlcmVhZGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGJ5dGVyZWFkZXIuYworCitsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Ynl0ZXdyaXRlci5sbzogZ3N0Ynl0ZXdyaXRlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Ynl0ZXdyaXRlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJ5dGV3cml0ZXIuVHBvIC1jIC1vIGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RieXRld3JpdGVyLmxvIGB0ZXN0IC1mICdnc3RieXRld3JpdGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGJ5dGV3cml0ZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJ5dGV3cml0ZXIuVHBvICQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Ynl0ZXdyaXRlci5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RieXRld3JpdGVyLmMnIG9iamVjdD0nbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJ5dGV3cml0ZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJ5dGV3cml0ZXIubG8gYHRlc3QgLWYgJ2dzdGJ5dGV3cml0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Ynl0ZXdyaXRlci5jCisKK2xpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3Rjb2xsZWN0cGFkcy5sbzogZ3N0Y29sbGVjdHBhZHMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNvbGxlY3RwYWRzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Y29sbGVjdHBhZHMuVHBvIC1jIC1vIGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3Rjb2xsZWN0cGFkcy5sbyBgdGVzdCAtZiAnZ3N0Y29sbGVjdHBhZHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Y29sbGVjdHBhZHMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNvbGxlY3RwYWRzLlRwbyAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNvbGxlY3RwYWRzLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdGNvbGxlY3RwYWRzLmMnIG9iamVjdD0nbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNvbGxlY3RwYWRzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3Rjb2xsZWN0cGFkcy5sbyBgdGVzdCAtZiAnZ3N0Y29sbGVjdHBhZHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Y29sbGVjdHBhZHMuYworCitsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cHVzaHNyYy5sbzogZ3N0cHVzaHNyYy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cHVzaHNyYy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHB1c2hzcmMuVHBvIC1jIC1vIGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RwdXNoc3JjLmxvIGB0ZXN0IC1mICdnc3RwdXNoc3JjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHB1c2hzcmMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHB1c2hzcmMuVHBvICQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0cHVzaHNyYy5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RwdXNoc3JjLmMnIG9iamVjdD0nbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHB1c2hzcmMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHB1c2hzcmMubG8gYHRlc3QgLWYgJ2dzdHB1c2hzcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cHVzaHNyYy5jCisKK2xpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R0eXBlZmluZGhlbHBlci5sbzogZ3N0dHlwZWZpbmRoZWxwZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHR5cGVmaW5kaGVscGVyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0dHlwZWZpbmRoZWxwZXIuVHBvIC1jIC1vIGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R0eXBlZmluZGhlbHBlci5sbyBgdGVzdCAtZiAnZ3N0dHlwZWZpbmRoZWxwZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dHlwZWZpbmRoZWxwZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHR5cGVmaW5kaGVscGVyLlRwbyAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHR5cGVmaW5kaGVscGVyLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdHR5cGVmaW5kaGVscGVyLmMnIG9iamVjdD0nbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdHR5cGVmaW5kaGVscGVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3R0eXBlZmluZGhlbHBlci5sbyBgdGVzdCAtZiAnZ3N0dHlwZWZpbmRoZWxwZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dHlwZWZpbmRoZWxwZXIuYworCitsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZGF0YXF1ZXVlLmxvOiBnc3RkYXRhcXVldWUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGRhdGFxdWV1ZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGRhdGFxdWV1ZS5UcG8gLWMgLW8gbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGRhdGFxdWV1ZS5sbyBgdGVzdCAtZiAnZ3N0ZGF0YXF1ZXVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGRhdGFxdWV1ZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZGF0YXF1ZXVlLlRwbyAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGRhdGFxdWV1ZS5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RkYXRhcXVldWUuYycgb2JqZWN0PSdsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0ZGF0YXF1ZXVlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RkYXRhcXVldWUubG8gYHRlc3QgLWYgJ2dzdGRhdGFxdWV1ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RkYXRhcXVldWUuYworCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworaW5zdGFsbC1naXJEQVRBOiAkKGdpcl9EQVRBKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoZ2lyZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoZ2lyZGlyKSIKKwlAbGlzdD0nJChnaXJfREFUQSknOyB0ZXN0IC1uICIkKGdpcmRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQoZ2lyZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQoZ2lyZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1naXJEQVRBOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQoZ2lyX0RBVEEpJzsgdGVzdCAtbiAiJChnaXJkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJdGVzdCAtbiAiJCRmaWxlcyIgfHwgZXhpdCAwOyBcCisJZWNobyAiICggY2QgJyQoREVTVERJUikkKGdpcmRpciknICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorCWNkICIkKERFU1RESVIpJChnaXJkaXIpIiAmJiBybSAtZiAkJGZpbGVzCitpbnN0YWxsLXR5cGVsaWJzREFUQTogJCh0eXBlbGlic19EQVRBKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQodHlwZWxpYnNkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJCh0eXBlbGlic2RpcikiCisJQGxpc3Q9JyQodHlwZWxpYnNfREFUQSknOyB0ZXN0IC1uICIkKHR5cGVsaWJzZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJCh0eXBlbGlic2RpciknIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKHR5cGVsaWJzZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC10eXBlbGlic0RBVEE6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJCh0eXBlbGlic19EQVRBKSc7IHRlc3QgLW4gIiQodHlwZWxpYnNkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJdGVzdCAtbiAiJCRmaWxlcyIgfHwgZXhpdCAwOyBcCisJZWNobyAiICggY2QgJyQoREVTVERJUikkKHR5cGVsaWJzZGlyKScgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisJY2QgIiQoREVTVERJUikkKHR5cGVsaWJzZGlyKSIgJiYgcm0gLWYgJCRmaWxlcworaW5zdGFsbC1saWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlSEVBREVSUzogJChsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlX0hFQURFUlMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQobGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAaW5jbHVkZWRpcikiCisJQGxpc3Q9JyQobGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAaW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQobGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAaW5jbHVkZWRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICckKERFU1RESVIpJChsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlZGlyKSciOyBcCisJICAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICIkKERFU1RESVIpJChsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1saWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlSEVBREVSUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVfSEVBREVSUyknOyB0ZXN0IC1uICIkKGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJdGVzdCAtbiAiJCRmaWxlcyIgfHwgZXhpdCAwOyBcCisJZWNobyAiICggY2QgJyQoREVTVERJUikkKGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVkaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQobGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAaW5jbHVkZWRpcikiICYmIHJtIC1mICQkZmlsZXMKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChEQVRBKSAkKEhFQURFUlMpCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChsaWJkaXIpIiAiJChERVNURElSKSQoZ2lyZGlyKSIgIiQoREVTVERJUikkKHR5cGVsaWJzZGlyKSIgIiQoREVTVERJUikkKGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVkaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJMVExJQlJBUklFUyBjbGVhbi1saWJ0b29sIFwKKwltb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1naXJEQVRBIFwKKwlpbnN0YWxsLWxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVIRUFERVJTIFwKKwlpbnN0YWxsLXR5cGVsaWJzREFUQQorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbTogaW5zdGFsbC1saWJMVExJQlJBUklFUworCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1naXJEQVRBIHVuaW5zdGFsbC1saWJMVExJQlJBUklFUyBcCisJdW5pbnN0YWxsLWxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVIRUFERVJTIFwKKwl1bmluc3RhbGwtdHlwZWxpYnNEQVRBCisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYkxUTElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgY3RhZ3MgZGlzdGNsZWFuIFwKKwlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZ2lyREFUQSBcCisJaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIFwKKwlpbnN0YWxsLWxpYkxUTElCUkFSSUVTIFwKKwlpbnN0YWxsLWxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVIRUFERVJTIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbC10eXBlbGlic0RBVEEgaW5zdGFsbGNoZWNrIFwKKwlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWdpckRBVEEgXAorCXVuaW5zdGFsbC1saWJMVExJQlJBUklFUyBcCisJdW5pbnN0YWxsLWxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVIRUFERVJTIFwKKwl1bmluc3RhbGwtdHlwZWxpYnNEQVRBCisKKworJS5jLmdjb3Y6IC5saWJzL2xpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYS0lLmdjZGEgJS5jCisJJChHQ09WKSAtYiAtZiAtbyAkXiA+ICRALm91dAorCitnY292OiAkKGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYV9TT1VSQ0VTOj0uZ2NvdikKKworQW5kcm9pZC5tazogTWFrZWZpbGUuYW0KKwlhbmRyb2dlbml6ZXIgLTpQUk9KRUNUIGdzdHJlYW1lciAtOlNIQVJFRCBsaWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAgLTpUQUdTIGVuZyBkZWJ1ZyBcCisJIC06UkVMX1RPUCAkKHRvcF9zcmNkaXIpIC06QUJTX1RPUCAkKGFic190b3Bfc3JjZGlyKSBcCisJIC06U09VUkNFUyAkKGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYV9TT1VSQ0VTKSBcCisJIC06Q0ZMQUdTICQoREVGUykgJChsaWJnc3RiYXNlX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSBcCisJIC06TERGTEFHUyAkKGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYV9MREZMQUdTKSBcCisJICAgICAgICAgICAkKGxpYmdzdGJhc2VfQEdTVF9NQUpPUk1JTk9SQF9sYV9MSUJBREQpIFwKKwkgLTpIRUFERVJfVEFSR0VUIGdzdHJlYW1lci1AR1NUX01BSk9STUlOT1JAL2dzdC9iYXNlIFwKKwkgLTpIRUFERVJTICQobGliZ3N0YmFzZV9AR1NUX01BSk9STUlOT1JAaW5jbHVkZV9IRUFERVJTKSBcCisJIC06UEFTU1RIUk9VR0ggTE9DQUxfQVJNX01PREU6PWFybSBcCisJPiAkQAorCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAR3N0QmFzZS1AR1NUX01BSk9STUlOT1JALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYQorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkkKEFNX1ZfR0VOKVBLR19DT05GSUdfUEFUSD0iJChHU1RfUEtHX0NPTkZJR19QQVRIKSIgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJR1NUX1BMVUdJTl9TWVNURU1fUEFUSD0iIiBHU1RfUExVR0lOX1BBVEg9IiIgR1NUX1JFR0lTVFJZX1VQREFURT1ubyBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQkkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgLXYgLS1uYW1lc3BhY2UgR3N0QmFzZSBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLW5zdmVyc2lvbj1AR1NUX01BSk9STUlOT1JAIFwKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tc3RyaXAtcHJlZml4PUdzdCBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktREdTVF9VU0VfVU5TVEFCTEVfQVBJIFwKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS1JJCh0b3Bfc3JjZGlyKSBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktSSQodG9wX3NyY2RpcikvbGlicyBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktSSQodG9wX2J1aWxkZGlyKSBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktSSQodG9wX2J1aWxkZGlyKS9saWJzIFwKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCSQoZ2lyX2NpbmNsdWRlcykgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1hZGQtaW5jbHVkZS1wYXRoPSQodG9wX2J1aWxkZGlyKS9nc3QgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1saWJyYXJ5LXBhdGg9JCh0b3BfYnVpbGRkaXIpL2dzdCBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLWxpYnJhcnk9JCh0b3BfYnVpbGRkaXIpL2dzdC9saWJnc3RyZWFtZXItMC4xMS5sYSBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLWxpYnJhcnk9bGliZ3N0YmFzZS0wLjExLmxhIFwKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0taW5jbHVkZT1Hc3QtMC4xMSBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLWxpYnRvb2w9IiQodG9wX2J1aWxkZGlyKS9saWJ0b29sIiBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLXBrZyBnc3RyZWFtZXItQEdTVF9NQUpPUk1JTk9SQCBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLXBrZy1leHBvcnQgZ3N0cmVhbWVyLWJhc2UtQEdTVF9NQUpPUk1JTk9SQCBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLWFkZC1pbml0LXNlY3Rpb249ImdzdF9pbml0KE5VTEwsTlVMTCk7IiBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLW91dHB1dCAkQCBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQkkKGdpcl9oZWFkZXJzKSBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQkkKGdpcl9zb3VyY2VzKQorCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAJS50eXBlbGliOiAlLmdpciAkKElOVFJPU1BFQ1RJT05fQ09NUElMRVIpCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACSQoQU1fVl9HRU4pJChJTlRST1NQRUNUSU9OX0NPTVBJTEVSKSAtLWluY2x1ZGVkaXI9JChzcmNkaXIpIC0taW5jbHVkZWRpcj0kKGJ1aWxkZGlyKSAtLWluY2x1ZGVkaXI9JCh0b3BfYnVpbGRkaXIpL2dzdCAkKElOVFJPU1BFQ1RJT05fQ09NUElMRVJfT1BUUykgJDwgLW8gJChARikKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvYmFzZS9SRUFETUUgYi9saWJzL2dzdC9iYXNlL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjE0Y2UyCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9nc3QvYmFzZS9SRUFETUUKQEAgLTAsMCArMSw2IEBACitCYXNlIGNsYXNzZXMKKy0tLS0tLS0tLS0tLQorCitHc3RCYXNlU2luaworICBGSVhNRTogbm90IG11Y2ggcG9pbnQgbWFraW5nIGl0IG9wZXJhdGUgaW4gcHVsbCBtb2RlIGFzIGEgZ2VuZXJpYworICBiYXNlIGNsYXNzIEkgZ3Vlc3MuLi4KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jIGIvbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk3ZWFhYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jCkBAIC0wLDAgKzEsMTA1MiBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgQmVuamFtaW4gT3R0ZSA8b3R0ZUBnbm9tZS5vcmc+CisgKiAgICAgICAgICAgICAgIDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKioKKyAqIFNFQ1RJT046Z3N0YWRhcHRlcgorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBhZGFwdHMgaW5jb21pbmcgZGF0YSBvbiBhIHNpbmsgcGFkIGludG8gY2h1bmtzIG9mIE4gYnl0ZXMKKyAqCisgKiBUaGlzIGNsYXNzIGlzIGZvciBlbGVtZW50cyB0aGF0IHJlY2VpdmUgYnVmZmVycyBpbiBhbiB1bmRlc2lyZWQgc2l6ZS4KKyAqIFdoaWxlIGZvciBleGFtcGxlIHJhdyB2aWRlbyBjb250YWlucyBvbmUgaW1hZ2UgcGVyIGJ1ZmZlciwgdGhlIHNhbWUgaXMgbm90CisgKiB0cnVlIGZvciBhIGxvdCBvZiBvdGhlciBmb3JtYXRzLCBlc3BlY2lhbGx5IHRob3NlIHRoYXQgY29tZSBkaXJlY3RseSBmcm9tCisgKiBhIGZpbGUuIFNvIGlmIHlvdSBoYXZlIHVuZGVmaW5lZCBidWZmZXIgc2l6ZXMgYW5kIHJlcXVpcmUgYSBzcGVjaWZpYyBzaXplLAorICogdGhpcyBvYmplY3QgaXMgZm9yIHlvdS4KKyAqCisgKiBBbiBhZGFwdGVyIGlzIGNyZWF0ZWQgd2l0aCBnc3RfYWRhcHRlcl9uZXcoKS4gSXQgY2FuIGJlIGZyZWVkIGFnYWluIHdpdGgKKyAqIGdfb2JqZWN0X3VucmVmKCkuCisgKgorICogVGhlIHRoZW9yeSBvZiBvcGVyYXRpb24gaXMgbGlrZSB0aGlzOiBBbGwgYnVmZmVycyByZWNlaXZlZCBhcmUgcHV0CisgKiBpbnRvIHRoZSBhZGFwdGVyIHVzaW5nIGdzdF9hZGFwdGVyX3B1c2goKSBhbmQgdGhlIGRhdGEgaXMgdGhlbiByZWFkIGJhY2sKKyAqIGluIGNodW5rcyBvZiB0aGUgZGVzaXJlZCBzaXplIHVzaW5nIGdzdF9hZGFwdGVyX21hcCgpL2dzdF9hZGFwdGVyX3VubWFwKCkKKyAqIGFuZC9vciBnc3RfYWRhcHRlcl9jb3B5KCkuIEFmdGVyIHRoZSBkYXRhIGhhcyBiZWVuIHByb2Nlc3NlZCwgaXQgaXMgZnJlZWQKKyAqIHVzaW5nIGdzdF9hZGFwdGVyX3VubWFwKCkuCisgKgorICogT3RoZXIgbWV0aG9kcyBzdWNoIGFzIGdzdF9hZGFwdGVyX3Rha2UoKSBhbmQgZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIoKQorICogY29tYmluZSBnc3RfYWRhcHRlcl9tYXAoKSBhbmQgZ3N0X2FkYXB0ZXJfdW5tYXAoKSBpbiBvbmUgbWV0aG9kIGFuZCBhcmUKKyAqIHBvdGVudGlhbGx5IG1vcmUgY29udmVuaWVudCBmb3Igc29tZSB1c2UgY2FzZXMuCisgKgorICogRm9yIGV4YW1wbGUsIGEgc2luayBwYWQncyBjaGFpbiBmdW5jdGlvbiB0aGF0IG5lZWRzIHRvIHBhc3MgZGF0YSB0byBhIGxpYnJhcnkKKyAqIGluIDUxMi1ieXRlIGNodW5rcyBjb3VsZCBiZSBpbXBsZW1lbnRlZCBsaWtlIHRoaXM6CisgKiB8WworICogc3RhdGljIEdzdEZsb3dSZXR1cm4KKyAqIHNpbmtfcGFkX2NoYWluIChHc3RQYWQgKnBhZCwgR3N0QnVmZmVyICpidWZmZXIpCisgKiB7CisgKiAgIE15RWxlbWVudCAqdGhpczsKKyAqICAgR3N0QWRhcHRlciAqYWRhcHRlcjsKKyAqICAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKKyAqCisgKiAgIC8vIHdpbGwgZ2l2ZSB0aGUgZWxlbWVudCBhbiBleHRyYSByZWY7IHJlbWVtYmVyIHRvIGRyb3AgaXQKKyAqICAgdGhpcyA9IE1ZX0VMRU1FTlQgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7CisgKiAgIGFkYXB0ZXIgPSB0aGlzLT5hZGFwdGVyOworICoKKyAqICAgLy8gcHV0IGJ1ZmZlciBpbnRvIGFkYXB0ZXIKKyAqICAgZ3N0X2FkYXB0ZXJfcHVzaCAoYWRhcHRlciwgYnVmZmVyKTsKKyAqICAgLy8gd2hpbGUgd2UgY2FuIHJlYWQgb3V0IDUxMiBieXRlcywgcHJvY2VzcyB0aGVtCisgKiAgIHdoaWxlIChnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpID49IDUxMiAmJiByZXQgPT0gR1NUX0ZMT1dfT0spIHsKKyAqICAgICBjb25zdCBndWludDggKmRhdGEgPSBnc3RfYWRhcHRlcl9tYXAgKGFkYXB0ZXIsIDUxMik7CisgKiAgICAgLy8gdXNlIGZsb3dyZXR1cm4gYXMgYW4gZXJyb3IgdmFsdWUKKyAqICAgICByZXQgPSBteV9saWJyYXJ5X2ZvbyAoZGF0YSk7CisgKiAgICAgZ3N0X2FkYXB0ZXJfdW5tYXAgKGFkYXB0ZXIsIDUxMik7CisgKiAgIH0KKyAqCisgKiAgIGdzdF9vYmplY3RfdW5yZWYgKHRoaXMpOworICogICByZXR1cm4gcmV0OworICogfQorICogXXwKKyAqCisgKiBGb3IgYW5vdGhlciBleGFtcGxlLCBhIHNpbXBsZSBlbGVtZW50IGluc2lkZSBHU3RyZWFtZXIgdGhhdCB1c2VzIEdzdEFkYXB0ZXIKKyAqIGlzIHRoZSBsaWJ2aXN1YWwgZWxlbWVudC4KKyAqCisgKiBBbiBlbGVtZW50IHVzaW5nIEdzdEFkYXB0ZXIgaW4gaXRzIHNpbmsgcGFkIGNoYWluIGZ1bmN0aW9uIHNob3VsZCBlbnN1cmUgdGhhdAorICogd2hlbiB0aGUgRkxVU0hfU1RPUCBldmVudCBpcyByZWNlaXZlZCwgdGhhdCBhbnkgcXVldWVkIGRhdGEgaXMgY2xlYXJlZCB1c2luZworICogZ3N0X2FkYXB0ZXJfY2xlYXIoKS4gRGF0YSBzaG91bGQgYWxzbyBiZSBjbGVhcmVkIG9yIHByb2Nlc3NlZCBvbiBFT1MgYW5kCisgKiB3aGVuIGNoYW5naW5nIHN0YXRlIGZyb20gI0dTVF9TVEFURV9QQVVTRUQgdG8gI0dTVF9TVEFURV9SRUFEWS4KKyAqCisgKiBBbHNvIGNoZWNrIHRoZSBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCBmbGFnIG9uIHRoZSBidWZmZXIuIFNvbWUgZWxlbWVudHMgbWlnaHQKKyAqIG5lZWQgdG8gY2xlYXIgdGhlIGFkYXB0ZXIgYWZ0ZXIgYSBkaXNjb250aW51aXR5LgorICoKKyAqIFNpbmNlIDAuMTAuMjQsIHRoZSBhZGFwdGVyIHdpbGwga2VlcCB0cmFjayBvZiB0aGUgdGltZXN0YW1wcyBvZiB0aGUgYnVmZmVycworICogdGhhdCB3ZXJlIHB1c2hlZC4gVGhlIGxhc3Qgc2VlbiB0aW1lc3RhbXAgYmVmb3JlIHRoZSBjdXJyZW50IHBvc2l0aW9uCisgKiBjYW4gYmUgcXVlcmllZCB3aXRoIGdzdF9hZGFwdGVyX3ByZXZfdGltZXN0YW1wKCkuIFRoaXMgZnVuY3Rpb24gY2FuCisgKiBvcHRpb25hbGx5IHJldHVybiB0aGUgYW1vdW50IG9mIGJ5dGVzIGJldHdlZW4gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIgdGhhdAorICogY2FycmllZCB0aGUgdGltZXN0YW1wIGFuZCB0aGUgY3VycmVudCBhZGFwdGVyIHBvc2l0aW9uLiBUaGUgZGlzdGFuY2UgaXMKKyAqIHVzZWZ1bCB3aGVuIGRlYWxpbmcgd2l0aCwgZm9yIGV4YW1wbGUsIHJhdyBhdWRpbyBzYW1wbGVzIGJlY2F1c2UgaXQgYWxsb3dzCisgKiB5b3UgdG8gY2FsY3VsYXRlIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGN1cnJlbnQgYWRhcHRlciBwb3NpdGlvbiBieSB1c2luZyB0aGUKKyAqIGxhc3Qgc2VlbiB0aW1lc3RhbXAgYW5kIHRoZSBhbW91bnQgb2YgYnl0ZXMgc2luY2UuCisgKgorICogQSBsYXN0IHRoaW5nIHRvIG5vdGUgaXMgdGhhdCB3aGlsZSBHc3RBZGFwdGVyIGlzIHByZXR0eSBvcHRpbWl6ZWQsCisgKiBtZXJnaW5nIGJ1ZmZlcnMgc3RpbGwgbWlnaHQgYmUgYW4gb3BlcmF0aW9uIHRoYXQgcmVxdWlyZXMgYSBtYWxsb2MoKSBhbmQKKyAqIG1lbWNweSgpIG9wZXJhdGlvbiwgYW5kIHRoZXNlIG9wZXJhdGlvbnMgYXJlIG5vdCB0aGUgZmFzdGVzdC4gQmVjYXVzZSBvZgorICogdGhpcywgc29tZSBmdW5jdGlvbnMgbGlrZSBnc3RfYWRhcHRlcl9hdmFpbGFibGVfZmFzdCgpIGFyZSBwcm92aWRlZCB0byBoZWxwCisgKiBzcGVlZCB1cCBzdWNoIGNhc2VzIHNob3VsZCB5b3Ugd2FudCB0by4gVG8gYXZvaWQgcmVwZWF0ZWQgbWVtb3J5IGFsbG9jYXRpb25zLAorICogZ3N0X2FkYXB0ZXJfY29weSgpIGNhbiBiZSB1c2VkIHRvIGNvcHkgZGF0YSBpbnRvIGEgKHN0YXRpY2FsbHkgYWxsb2NhdGVkKQorICogdXNlciBwcm92aWRlZCBidWZmZXIuCisgKgorICogR3N0QWRhcHRlciBpcyBub3QgTVQgc2FmZS4gQWxsIG9wZXJhdGlvbnMgb24gYW4gYWRhcHRlciBtdXN0IGJlIHNlcmlhbGl6ZWQgYnkKKyAqIHRoZSBjYWxsZXIuIFRoaXMgaXMgbm90IG5vcm1hbGx5IGEgcHJvYmxlbSwgaG93ZXZlciwgYXMgdGhlIG5vcm1hbCB1c2UgY2FzZQorICogb2YgR3N0QWRhcHRlciBpcyBpbnNpZGUgb25lIHBhZCdzIGNoYWluIGZ1bmN0aW9uLCBpbiB3aGljaCBjYXNlIGFjY2VzcyBpcworICogc2VyaWFsaXplZCB2aWEgdGhlIHBhZCdzIFNUUkVBTV9MT0NLLgorICoKKyAqIE5vdGUgdGhhdCBnc3RfYWRhcHRlcl9wdXNoKCkgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBidWZmZXIgcGFzc2VkLiBVc2UKKyAqIGdzdF9idWZmZXJfcmVmKCkgYmVmb3JlIHB1c2hpbmcgaXQgaW50byB0aGUgYWRhcHRlciBpZiB5b3Ugc3RpbGwgd2FudCB0bworICogYWNjZXNzIHRoZSBidWZmZXIgbGF0ZXIuIFRoZSBhZGFwdGVyIHdpbGwgbmV2ZXIgbW9kaWZ5IHRoZSBkYXRhIGluIHRoZQorICogYnVmZmVyIHB1c2hlZCBpbiBpdC4KKyAqCisgKiBMYXN0IHJldmlld2VkIG9uIDIwMDktMDUtMTMgKDAuMTAuMjQpLgorICovCisKKyNpbmNsdWRlIDxnc3QvZ3N0X3ByaXZhdGUuaD4KKyNpbmNsdWRlICJnc3RhZGFwdGVyLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qIGRlZmF1bHQgc2l6ZSBmb3IgdGhlIGFzc2VtYmxlZCBkYXRhIGJ1ZmZlciAqLworI2RlZmluZSBERUZBVUxUX1NJWkUgNDA5NgorCitzdGF0aWMgdm9pZCBnc3RfYWRhcHRlcl9mbHVzaF91bmNoZWNrZWQgKEdzdEFkYXB0ZXIgKiBhZGFwdGVyLCBnc2l6ZSBmbHVzaCk7CisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9hZGFwdGVyX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9hZGFwdGVyX2RlYnVnCisKKyNkZWZpbmUgR1NUX0FEQVBURVJfR0VUX1BSSVZBVEUob2JqKSAgXAorICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoKG9iaiksIEdTVF9UWVBFX0FEQVBURVIsIEdzdEFkYXB0ZXJQcml2YXRlKSkKKworc3RydWN0IF9Hc3RBZGFwdGVyUHJpdmF0ZQoreworICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wOworICBndWludDY0IGRpc3RhbmNlOworCisgIGdzaXplIHNjYW5fb2Zmc2V0OworICBHU0xpc3QgKnNjYW5fZW50cnk7CisKKyAgZ3BvaW50ZXIgY2RhdGE7CisgIGdzaXplIGNzaXplOworfTsKKworI2RlZmluZSBfZG9faW5pdCBcCisgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfYWRhcHRlcl9kZWJ1ZywgImFkYXB0ZXIiLCAwLCAib2JqZWN0IHRvIHNwbGljZSBhbmQgbWVyZ2UgYnVmZmVycyB0byBkZXNpcmVkIHNpemUiKQorI2RlZmluZSBnc3RfYWRhcHRlcl9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0QWRhcHRlciwgZ3N0X2FkYXB0ZXIsIEdfVFlQRV9PQkpFQ1QsIF9kb19pbml0KTsKKworc3RhdGljIHZvaWQgZ3N0X2FkYXB0ZXJfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7CitzdGF0aWMgdm9pZCBnc3RfYWRhcHRlcl9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7CisKK3N0YXRpYyB2b2lkCitnc3RfYWRhcHRlcl9jbGFzc19pbml0IChHc3RBZGFwdGVyQ2xhc3MgKiBrbGFzcykKK3sKKyAgR09iamVjdENsYXNzICpvYmplY3QgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOworCisgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAoa2xhc3MsIHNpemVvZiAoR3N0QWRhcHRlclByaXZhdGUpKTsKKworICBvYmplY3QtPmRpc3Bvc2UgPSBnc3RfYWRhcHRlcl9kaXNwb3NlOworICBvYmplY3QtPmZpbmFsaXplID0gZ3N0X2FkYXB0ZXJfZmluYWxpemU7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfYWRhcHRlcl9pbml0IChHc3RBZGFwdGVyICogYWRhcHRlcikKK3sKKyAgYWRhcHRlci0+cHJpdiA9IEdTVF9BREFQVEVSX0dFVF9QUklWQVRFIChhZGFwdGVyKTsKKyAgYWRhcHRlci0+YXNzZW1ibGVkX2RhdGEgPSBnX21hbGxvYyAoREVGQVVMVF9TSVpFKTsKKyAgYWRhcHRlci0+YXNzZW1ibGVkX3NpemUgPSBERUZBVUxUX1NJWkU7CisgIGFkYXB0ZXItPnByaXYtPnRpbWVzdGFtcCA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgIGFkYXB0ZXItPnByaXYtPmRpc3RhbmNlID0gMDsKK30KKworc3RhdGljIHZvaWQKK2dzdF9hZGFwdGVyX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpCit7CisgIEdzdEFkYXB0ZXIgKmFkYXB0ZXIgPSBHU1RfQURBUFRFUiAob2JqZWN0KTsKKworICBnc3RfYWRhcHRlcl9jbGVhciAoYWRhcHRlcik7CisKKyAgR1NUX0NBTExfUEFSRU5UIChHX09CSkVDVF9DTEFTUywgZGlzcG9zZSwgKG9iamVjdCkpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2FkYXB0ZXJfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCit7CisgIEdzdEFkYXB0ZXIgKmFkYXB0ZXIgPSBHU1RfQURBUFRFUiAob2JqZWN0KTsKKworICBnX2ZyZWUgKGFkYXB0ZXItPmFzc2VtYmxlZF9kYXRhKTsKKworICBHU1RfQ0FMTF9QQVJFTlQgKEdfT0JKRUNUX0NMQVNTLCBmaW5hbGl6ZSwgKG9iamVjdCkpOworfQorCisvKioKKyAqIGdzdF9hZGFwdGVyX25ldzoKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNHc3RBZGFwdGVyLiBGcmVlIHdpdGggZ19vYmplY3RfdW5yZWYoKS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RBZGFwdGVyCisgKi8KK0dzdEFkYXB0ZXIgKgorZ3N0X2FkYXB0ZXJfbmV3ICh2b2lkKQoreworICByZXR1cm4gZ19vYmplY3RfbmV3diAoR1NUX1RZUEVfQURBUFRFUiwgMCwgTlVMTCk7Cit9CisKKy8qKgorICogZ3N0X2FkYXB0ZXJfY2xlYXI6CisgKiBAYWRhcHRlcjogYSAjR3N0QWRhcHRlcgorICoKKyAqIFJlbW92ZXMgYWxsIGJ1ZmZlcnMgZnJvbSBAYWRhcHRlci4KKyAqLwordm9pZAorZ3N0X2FkYXB0ZXJfY2xlYXIgKEdzdEFkYXB0ZXIgKiBhZGFwdGVyKQoreworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQURBUFRFUiAoYWRhcHRlcikpOworCisgIGdfc2xpc3RfZm9yZWFjaCAoYWRhcHRlci0+YnVmbGlzdCwgKEdGdW5jKSBnc3RfbWluaV9vYmplY3RfdW5yZWYsIE5VTEwpOworICBnX3NsaXN0X2ZyZWUgKGFkYXB0ZXItPmJ1Zmxpc3QpOworICBhZGFwdGVyLT5idWZsaXN0ID0gTlVMTDsKKyAgYWRhcHRlci0+YnVmbGlzdF9lbmQgPSBOVUxMOworICBhZGFwdGVyLT5zaXplID0gMDsKKyAgYWRhcHRlci0+c2tpcCA9IDA7CisgIGFkYXB0ZXItPmFzc2VtYmxlZF9sZW4gPSAwOworICBhZGFwdGVyLT5wcml2LT50aW1lc3RhbXAgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICBhZGFwdGVyLT5wcml2LT5kaXN0YW5jZSA9IDA7CisgIGFkYXB0ZXItPnByaXYtPnNjYW5fb2Zmc2V0ID0gMDsKKyAgYWRhcHRlci0+cHJpdi0+c2Nhbl9lbnRyeSA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordXBkYXRlX3RpbWVzdGFtcCAoR3N0QWRhcHRlciAqIGFkYXB0ZXIsIEdzdEJ1ZmZlciAqIGJ1ZikKK3sKKyAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKKworICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKTsKKyAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lc3RhbXApKSB7CisgICAgR1NUX0xPR19PQkpFQ1QgKGFkYXB0ZXIsICJuZXcgdGltZXN0YW1wICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgICAgR1NUX1RJTUVfQVJHUyAodGltZXN0YW1wKSk7CisgICAgYWRhcHRlci0+cHJpdi0+dGltZXN0YW1wID0gdGltZXN0YW1wOworICAgIGFkYXB0ZXItPnByaXYtPmRpc3RhbmNlID0gMDsKKyAgfQorfQorCisvKiBjb3B5IGRhdGEgaW50byBAZGVzdCwgc2tpcHBpbmcgQHNraXAgYnl0ZXMgZnJvbSB0aGUgaGVhZCBidWZmZXJzICovCitzdGF0aWMgdm9pZAorY29weV9pbnRvX3VuY2hlY2tlZCAoR3N0QWRhcHRlciAqIGFkYXB0ZXIsIGd1aW50OCAqIGRlc3QsIGdzaXplIHNraXAsCisgICAgZ3NpemUgc2l6ZSkKK3sKKyAgR1NMaXN0ICpnOworICBHc3RCdWZmZXIgKmJ1ZjsKKyAgZ3NpemUgYnNpemUsIGNzaXplOworCisgIC8qIGZpcnN0IHN0ZXAsIGRvIHNraXBwaW5nICovCisgIC8qIHdlIG1pZ2h0IHdlbGwgYmUgY29weWluZyB3aGVyZSB3ZSB3ZXJlIHNjYW5uaW5nICovCisgIGlmIChhZGFwdGVyLT5wcml2LT5zY2FuX2VudHJ5ICYmIChhZGFwdGVyLT5wcml2LT5zY2FuX29mZnNldCA8PSBza2lwKSkgeworICAgIGcgPSBhZGFwdGVyLT5wcml2LT5zY2FuX2VudHJ5OworICAgIHNraXAgLT0gYWRhcHRlci0+cHJpdi0+c2Nhbl9vZmZzZXQ7CisgIH0gZWxzZSB7CisgICAgZyA9IGFkYXB0ZXItPmJ1Zmxpc3Q7CisgIH0KKyAgYnVmID0gZy0+ZGF0YTsKKyAgYnNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpOworICB3aGlsZSAoR19VTkxJS0VMWSAoc2tpcCA+PSBic2l6ZSkpIHsKKyAgICBza2lwIC09IGJzaXplOworICAgIGcgPSBnX3NsaXN0X25leHQgKGcpOworICAgIGJ1ZiA9IGctPmRhdGE7CisgICAgYnNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpOworICB9CisgIC8qIGNvcHkgcGFydGlhbCBidWZmZXIgKi8KKyAgY3NpemUgPSBNSU4gKGJzaXplIC0gc2tpcCwgc2l6ZSk7CisgIEdTVF9ERUJVRyAoImJzaXplICUiIEdfR1NJWkVfRk9STUFUICIsIHNraXAgJSIgR19HU0laRV9GT1JNQVQgIiwgY3NpemUgJSIKKyAgICAgIEdfR1NJWkVfRk9STUFULCBic2l6ZSwgc2tpcCwgY3NpemUpOworICBnc3RfYnVmZmVyX2V4dHJhY3QgKGJ1Ziwgc2tpcCwgZGVzdCwgY3NpemUpOworICBzaXplIC09IGNzaXplOworICBkZXN0ICs9IGNzaXplOworCisgIC8qIHNlY29uZCBzdGVwLCBjb3B5IHJlbWFpbmRlciAqLworICB3aGlsZSAoc2l6ZSA+IDApIHsKKyAgICBnID0gZ19zbGlzdF9uZXh0IChnKTsKKyAgICBidWYgPSBnLT5kYXRhOworICAgIGJzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKTsKKyAgICBpZiAoR19MSUtFTFkgKGJzaXplID4gMCkpIHsKKyAgICAgIGNzaXplID0gTUlOIChic2l6ZSwgc2l6ZSk7CisgICAgICBnc3RfYnVmZmVyX2V4dHJhY3QgKGJ1ZiwgMCwgZGVzdCwgY3NpemUpOworICAgICAgc2l6ZSAtPSBjc2l6ZTsKKyAgICAgIGRlc3QgKz0gY3NpemU7CisgICAgfQorICB9Cit9CisKKy8qKgorICogZ3N0X2FkYXB0ZXJfcHVzaDoKKyAqIEBhZGFwdGVyOiBhICNHc3RBZGFwdGVyCisgKiBAYnVmOiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdEJ1ZmZlciB0byBhZGQgdG8gcXVldWUgaW4gdGhlIGFkYXB0ZXIKKyAqCisgKiBBZGRzIHRoZSBkYXRhIGZyb20gQGJ1ZiB0byB0aGUgZGF0YSBzdG9yZWQgaW5zaWRlIEBhZGFwdGVyIGFuZCB0YWtlcworICogb3duZXJzaGlwIG9mIHRoZSBidWZmZXIuCisgKi8KK3ZvaWQKK2dzdF9hZGFwdGVyX3B1c2ggKEdzdEFkYXB0ZXIgKiBhZGFwdGVyLCBHc3RCdWZmZXIgKiBidWYpCit7CisgIGdzaXplIHNpemU7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0FEQVBURVIgKGFkYXB0ZXIpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JVRkZFUiAoYnVmKSk7CisKKyAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1Zik7CisgIGFkYXB0ZXItPnNpemUgKz0gc2l6ZTsKKworICAvKiBOb3RlOiBtZXJnaW5nIGJ1ZmZlcnMgYXQgdGhpcyBwb2ludCBpcyBwcmVtYXR1cmUuICovCisgIGlmIChHX1VOTElLRUxZIChhZGFwdGVyLT5idWZsaXN0ID09IE5VTEwpKSB7CisgICAgR1NUX0xPR19PQkpFQ1QgKGFkYXB0ZXIsICJwdXNoaW5nIGZpcnN0ICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMiLCBzaXplKTsKKyAgICBhZGFwdGVyLT5idWZsaXN0ID0gYWRhcHRlci0+YnVmbGlzdF9lbmQgPSBnX3NsaXN0X2FwcGVuZCAoTlVMTCwgYnVmKTsKKyAgICB1cGRhdGVfdGltZXN0YW1wIChhZGFwdGVyLCBidWYpOworICB9IGVsc2UgeworICAgIC8qIE90aGVyd2lzZSBhcHBlbmQgdG8gdGhlIGVuZCwgYW5kIGFkdmFuY2Ugb3VyIGVuZCBwb2ludGVyICovCisgICAgR1NUX0xPR19PQkpFQ1QgKGFkYXB0ZXIsICJwdXNoaW5nICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMgYXQgZW5kLCAiCisgICAgICAgICJzaXplIG5vdyAlIiBHX0dTSVpFX0ZPUk1BVCwgc2l6ZSwgYWRhcHRlci0+c2l6ZSk7CisgICAgYWRhcHRlci0+YnVmbGlzdF9lbmQgPSBnX3NsaXN0X2FwcGVuZCAoYWRhcHRlci0+YnVmbGlzdF9lbmQsIGJ1Zik7CisgICAgYWRhcHRlci0+YnVmbGlzdF9lbmQgPSBnX3NsaXN0X25leHQgKGFkYXB0ZXItPmJ1Zmxpc3RfZW5kKTsKKyAgfQorfQorCisvKiBJbnRlcm5hbCBtZXRob2Qgb25seS4gVHJpZXMgdG8gbWVyZ2UgYnVmZmVycyBhdCB0aGUgaGVhZCBvZiB0aGUgcXVldWUKKyAqIHRvIGZvcm0gYSBzaW5nbGUgbGFyZ2VyIGJ1ZmZlciBvZiBzaXplICdzaXplJy4gT25seSBtZXJnZXMgYnVmZmVycyB0aGF0CisgKiB3aGVyZSAnZ3N0X2J1ZmZlcl9pc19zcGFuX2Zhc3QnIHJldHVybnMgVFJVRS4KKyAqCisgKiBSZXR1cm5zIFRSVUUgaWYgaXQgbWFuYWdlZCB0byBtZXJnZSBhbnl0aGluZy4KKyAqLworc3RhdGljIGdib29sZWFuCitnc3RfYWRhcHRlcl90cnlfdG9fbWVyZ2VfdXAgKEdzdEFkYXB0ZXIgKiBhZGFwdGVyLCBnc2l6ZSBzaXplKQoreworICBHc3RCdWZmZXIgKmN1ciwgKmhlYWQ7CisgIEdTTGlzdCAqZzsKKyAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7CisgIGdzaXplIGhzaXplOworCisgIGcgPSBhZGFwdGVyLT5idWZsaXN0OworICBpZiAoZyA9PSBOVUxMKQorICAgIHJldHVybiBGQUxTRTsKKworICBoZWFkID0gZy0+ZGF0YTsKKyAgZyA9IGdfc2xpc3RfbmV4dCAoZyk7CisKKyAgLyogSG93IGxhcmdlIGRvIHdlIHdhbnQgb3VyIGhlYWQgYnVmZmVyPyBUaGUgcmVxdWVzdGVkIHNpemUsIHBsdXMgd2hhdGV2ZXIncworICAgKiBiZWVuIHNraXBwZWQgYWxyZWFkeSAqLworICBzaXplICs9IGFkYXB0ZXItPnNraXA7CisgIGhzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoaGVhZCk7CisKKyAgd2hpbGUgKGcgIT0gTlVMTCAmJiBoc2l6ZSA8IHNpemUpIHsKKyAgICBjdXIgPSBnLT5kYXRhOworICAgIGlmICghZ3N0X2J1ZmZlcl9pc19zcGFuX2Zhc3QgKGhlYWQsIGN1cikpCisgICAgICByZXR1cm4gcmV0OworCisgICAgLyogTWVyZ2UgdGhlIGhlYWQgYnVmZmVyIGFuZCB0aGUgbmV4dCBpbiBsaW5lICovCisgICAgR1NUX0xPR19PQkpFQ1QgKGFkYXB0ZXIsICJNZXJnaW5nIGJ1ZmZlcnMgb2Ygc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCAiICYgJSIKKyAgICAgICAgR19HU0laRV9GT1JNQVQgIiBpbiBzZWFyY2ggb2YgdGFyZ2V0ICUiIEdfR1NJWkVfRk9STUFULAorICAgICAgICBoc2l6ZSwgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoY3VyKSwgc2l6ZSk7CisKKyAgICBoZWFkID0gZ3N0X2J1ZmZlcl9qb2luIChoZWFkLCBjdXIpOworICAgIGhzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoaGVhZCk7CisgICAgcmV0ID0gVFJVRTsKKworICAgIC8qIERlbGV0ZSB0aGUgZnJvbnQgbGlzdCBpdGVtLCBhbmQgc3RvcmUgb3VyIG5ldyBidWZmZXIgaW4gdGhlIDJuZCBsaXN0CisgICAgICogaXRlbSAqLworICAgIGFkYXB0ZXItPmJ1Zmxpc3QgPSBnX3NsaXN0X2RlbGV0ZV9saW5rIChhZGFwdGVyLT5idWZsaXN0LCBhZGFwdGVyLT5idWZsaXN0KTsKKyAgICBnLT5kYXRhID0gaGVhZDsKKworICAgIC8qIGludmFsaWRhdGUgc2NhbiBwb3NpdGlvbiAqLworICAgIGFkYXB0ZXItPnByaXYtPnNjYW5fb2Zmc2V0ID0gMDsKKyAgICBhZGFwdGVyLT5wcml2LT5zY2FuX2VudHJ5ID0gTlVMTDsKKworICAgIGcgPSBnX3NsaXN0X25leHQgKGcpOworICB9CisKKyAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBnc3RfYWRhcHRlcl9tYXA6CisgKiBAYWRhcHRlcjogYSAjR3N0QWRhcHRlcgorICogQHNpemU6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gbWFwL3BlZWsKKyAqCisgKiBHZXRzIHRoZSBmaXJzdCBAc2l6ZSBieXRlcyBzdG9yZWQgaW4gdGhlIEBhZGFwdGVyLiBUaGUgcmV0dXJuZWQgcG9pbnRlciBpcworICogdmFsaWQgdW50aWwgdGhlIG5leHQgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIHRoZSBhZGFwdGVyLgorICoKKyAqIE5vdGUgdGhhdCBzZXR0aW5nIHRoZSByZXR1cm5lZCBwb2ludGVyIGFzIHRoZSBkYXRhIG9mIGEgI0dzdEJ1ZmZlciBpcworICogaW5jb3JyZWN0IGZvciBnZW5lcmFsLXB1cnBvc2UgcGx1Z2lucy4gVGhlIHJlYXNvbiBpcyB0aGF0IGlmIGEgZG93bnN0cmVhbQorICogZWxlbWVudCBzdG9yZXMgdGhlIGJ1ZmZlciBzbyB0aGF0IGl0IGhhcyBhY2Nlc3MgdG8gaXQgb3V0c2lkZSBvZiB0aGUgYm91bmRzCisgKiBvZiBpdHMgY2hhaW4gZnVuY3Rpb24sIHRoZSBidWZmZXIgd2lsbCBoYXZlIGFuIGludmFsaWQgZGF0YSBwb2ludGVyIGFmdGVyCisgKiB5b3VyIGVsZW1lbnQgZmx1c2hlcyB0aGUgYnl0ZXMuIEluIHRoYXQgY2FzZSB5b3Ugc2hvdWxkIHVzZQorICogZ3N0X2FkYXB0ZXJfdGFrZSgpLCB3aGljaCByZXR1cm5zIGEgZnJlc2hseS1hbGxvY2F0ZWQgYnVmZmVyIHRoYXQgeW91IGNhbiBzZXQKKyAqIGFzICNHc3RCdWZmZXIgbWFsbG9jX2RhdGEgb3IgdGhlIHBvdGVudGlhbGx5IG1vcmUgcGVyZm9ybWFudAorICogZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIoKS4KKyAqCisgKiBSZXR1cm5zICNOVUxMIGlmIEBzaXplIGJ5dGVzIGFyZSBub3QgYXZhaWxhYmxlLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKSAoYXJyYXkgbGVuZ3RoPXNpemUpOiBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0CisgKiAgICAgQHNpemUgYnl0ZXMgb2YgZGF0YSwgb3IgTlVMTAorICovCitjb25zdCBndWludDggKgorZ3N0X2FkYXB0ZXJfbWFwIChHc3RBZGFwdGVyICogYWRhcHRlciwgZ3NpemUgc2l6ZSkKK3sKKyAgR3N0QnVmZmVyICpjdXI7CisgIGdzaXplIHNraXAsIGNzaXplOworICBnc2l6ZSB0b3JldXNlLCB0b2NvcHk7CisgIGd1aW50OCAqZGF0YTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0FEQVBURVIgKGFkYXB0ZXIpLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNpemUgPiAwLCBOVUxMKTsKKworICAvKiB3ZSBkb24ndCBoYXZlIGVub3VnaCBkYXRhLCByZXR1cm4gTlVMTC4gVGhpcyBpcyB1bmxpa2VseQorICAgKiBhcyBvbmUgdXN1YWxseSBkb2VzIGFuIF9hdmFpbGFibGUoKSBmaXJzdCBpbnN0ZWFkIG9mIHBlZWtpbmcgYQorICAgKiByYW5kb20gc2l6ZS4gKi8KKyAgaWYgKEdfVU5MSUtFTFkgKHNpemUgPiBhZGFwdGVyLT5zaXplKSkKKyAgICByZXR1cm4gTlVMTDsKKworICAvKiB3ZSBoYXZlIGVub3VnaCBhc3NlbWJsZWQgZGF0YSwgcmV0dXJuIGl0ICovCisgIGlmIChhZGFwdGVyLT5hc3NlbWJsZWRfbGVuID49IHNpemUpCisgICAgcmV0dXJuIGFkYXB0ZXItPmFzc2VtYmxlZF9kYXRhOworCisgIGRvIHsKKyAgICBjdXIgPSBhZGFwdGVyLT5idWZsaXN0LT5kYXRhOworICAgIHNraXAgPSBhZGFwdGVyLT5za2lwOworCisgICAgY3NpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChjdXIpOworICAgIGlmIChjc2l6ZSA+PSBzaXplICsgc2tpcCkgeworICAgICAgZGF0YSA9IGdzdF9idWZmZXJfbWFwIChjdXIsICZjc2l6ZSwgTlVMTCwgR1NUX01BUF9SRUFEKTsKKyAgICAgIGFkYXB0ZXItPnByaXYtPmNkYXRhID0gZGF0YTsKKyAgICAgIGFkYXB0ZXItPnByaXYtPmNzaXplID0gY3NpemU7CisgICAgICByZXR1cm4gZGF0YSArIHNraXA7CisgICAgfQorICAgIC8qIFdlIG1heSBiZSBhYmxlIHRvIGVmZmljaWVudGx5IG1lcmdlIGJ1ZmZlcnMgaW4gb3VyIHBvb2wgdG8KKyAgICAgKiBnYXRoZXIgYSBiaWcgZW5vdWdoIGNodW5rIHRvIHJldHVybiBpdCBmcm9tIHRoZSBoZWFkIGJ1ZmZlciBkaXJlY3RseSAqLworICB9IHdoaWxlIChnc3RfYWRhcHRlcl90cnlfdG9fbWVyZ2VfdXAgKGFkYXB0ZXIsIHNpemUpKTsKKworICAvKiBzZWUgaG93IG11Y2ggZGF0YSB3ZSBjYW4gcmV1c2UgZnJvbSB0aGUgYXNzZW1ibGVkIG1lbW9yeSBhbmQgaG93IG11Y2gKKyAgICogd2UgbmVlZCB0byBjb3B5ICovCisgIHRvcmV1c2UgPSBhZGFwdGVyLT5hc3NlbWJsZWRfbGVuOworICB0b2NvcHkgPSBzaXplIC0gdG9yZXVzZTsKKworICAvKiBHb25uYSBuZWVkIHRvIGNvcHkgc3R1ZmYgb3V0ICovCisgIGlmIChHX1VOTElLRUxZIChhZGFwdGVyLT5hc3NlbWJsZWRfc2l6ZSA8IHNpemUpKSB7CisgICAgYWRhcHRlci0+YXNzZW1ibGVkX3NpemUgPSAoc2l6ZSAvIERFRkFVTFRfU0laRSArIDEpICogREVGQVVMVF9TSVpFOworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGFkYXB0ZXIsICJyZXNpemluZyBpbnRlcm5hbCBidWZmZXIgdG8gJSIgR19HU0laRV9GT1JNQVQsCisgICAgICAgIGFkYXB0ZXItPmFzc2VtYmxlZF9zaXplKTsKKyAgICBpZiAodG9yZXVzZSA9PSAwKSB7CisgICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX1BFUkZPUk1BTkNFLCAiYWxsb2MgbmV3IGJ1ZmZlciIpOworICAgICAgLyogbm8gZ19yZWFsbG9jIHRvIGF2b2lkIGEgbWVtY3B5IHRoYXQgaXMgbm90IGRlc2lyZWQgaGVyZSBzaW5jZSB3ZSBhcmUKKyAgICAgICAqIG5vdCBnb2luZyB0byByZXVzZSBhbnkgZGF0YSBoZXJlICovCisgICAgICBnX2ZyZWUgKGFkYXB0ZXItPmFzc2VtYmxlZF9kYXRhKTsKKyAgICAgIGFkYXB0ZXItPmFzc2VtYmxlZF9kYXRhID0gZ19tYWxsb2MgKGFkYXB0ZXItPmFzc2VtYmxlZF9zaXplKTsKKyAgICB9IGVsc2UgeworICAgICAgLyogd2UgYXJlIGdvaW5nIHRvIHJldXNlIGFsbCBkYXRhLCByZWFsbG9jIHRoZW4gKi8KKyAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfUEVSRk9STUFOQ0UsICJyZXVzaW5nICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMiLAorICAgICAgICAgIHRvcmV1c2UpOworICAgICAgYWRhcHRlci0+YXNzZW1ibGVkX2RhdGEgPQorICAgICAgICAgIGdfcmVhbGxvYyAoYWRhcHRlci0+YXNzZW1ibGVkX2RhdGEsIGFkYXB0ZXItPmFzc2VtYmxlZF9zaXplKTsKKyAgICB9CisgIH0KKyAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9QRVJGT1JNQU5DRSwgImNvcHkgcmVtYWluaW5nICUiIEdfR1NJWkVfRk9STUFUCisgICAgICAiIGJ5dGVzIGZyb20gYWRhcHRlciIsIHRvY29weSk7CisgIGRhdGEgPSBhZGFwdGVyLT5hc3NlbWJsZWRfZGF0YTsKKyAgY29weV9pbnRvX3VuY2hlY2tlZCAoYWRhcHRlciwgZGF0YSArIHRvcmV1c2UsIHNraXAgKyB0b3JldXNlLCB0b2NvcHkpOworICBhZGFwdGVyLT5hc3NlbWJsZWRfbGVuID0gc2l6ZTsKKworICByZXR1cm4gYWRhcHRlci0+YXNzZW1ibGVkX2RhdGE7Cit9CisKKy8qKgorICogZ3N0X2FkYXB0ZXJfdW5tYXA6CisgKiBAYWRhcHRlcjogYSAjR3N0QWRhcHRlcgorICogQGZsdXNoOiB0aGUgYW1vdW50IG9mIGJ5dGVzIHRvIGZsdXNoCisgKgorICogUmVsZWFzZXMgdGhlIG1lbW9yeSBvYnRhaW5lZCB3aXRoIHRoZSBsYXN0IGdzdF9hZGFwdGVyX21hcCgpIGFuZCBmbHVzaGVzCisgKiBAc2l6ZSBieXRlcyBmcm9tIHRoZSBhZGFwdGVyLgorICovCit2b2lkCitnc3RfYWRhcHRlcl91bm1hcCAoR3N0QWRhcHRlciAqIGFkYXB0ZXIsIGdzaXplIGZsdXNoKQoreworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQURBUFRFUiAoYWRhcHRlcikpOworCisgIGlmIChhZGFwdGVyLT5wcml2LT5jZGF0YSkgeworICAgIEdzdEJ1ZmZlciAqY3VyID0gYWRhcHRlci0+YnVmbGlzdC0+ZGF0YTsKKyAgICBnc3RfYnVmZmVyX3VubWFwIChjdXIsIGFkYXB0ZXItPnByaXYtPmNkYXRhLCBhZGFwdGVyLT5wcml2LT5jc2l6ZSk7CisgICAgYWRhcHRlci0+cHJpdi0+Y2RhdGEgPSBOVUxMOworICB9CisKKyAgaWYgKGZsdXNoKQorICAgIGdzdF9hZGFwdGVyX2ZsdXNoX3VuY2hlY2tlZCAoYWRhcHRlciwgZmx1c2gpOworfQorCisvKioKKyAqIGdzdF9hZGFwdGVyX2NvcHk6CisgKiBAYWRhcHRlcjogYSAjR3N0QWRhcHRlcgorICogQGRlc3Q6IChvdXQgY2FsbGVyLWFsbG9jYXRlcykgKGFycmF5IGxlbmd0aD1zaXplKTogdGhlIG1lbW9yeSB0byBjb3B5IGludG8KKyAqIEBvZmZzZXQ6IHRoZSBieXRlcyBvZmZzZXQgaW4gdGhlIGFkYXB0ZXIgdG8gc3RhcnQgZnJvbQorICogQHNpemU6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weQorICoKKyAqIENvcGllcyBAc2l6ZSBieXRlcyBvZiBkYXRhIHN0YXJ0aW5nIGF0IEBvZmZzZXQgb3V0IG9mIHRoZSBidWZmZXJzCisgKiBjb250YWluZWQgaW4gQEdzdEFkYXB0ZXIgaW50byBhbiBhcnJheSBAZGVzdCBwcm92aWRlZCBieSB0aGUgY2FsbGVyLgorICoKKyAqIFRoZSBhcnJheSBAZGVzdCBzaG91bGQgYmUgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gQHNpemUgYnl0ZXMuCisgKiBUaGUgdXNlciBzaG91bGQgY2hlY2sgdGhhdCB0aGUgYWRhcHRlciBoYXMgKEBvZmZzZXQgKyBAc2l6ZSkgYnl0ZXMKKyAqIGF2YWlsYWJsZSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFNpbmNlOiAwLjEwLjEyCisgKi8KK3ZvaWQKK2dzdF9hZGFwdGVyX2NvcHkgKEdzdEFkYXB0ZXIgKiBhZGFwdGVyLCBndWludDggKiBkZXN0LCBnc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19BREFQVEVSIChhZGFwdGVyKSk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKHNpemUgPiAwKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAob2Zmc2V0ICsgc2l6ZSA8PSBhZGFwdGVyLT5zaXplKTsKKworICBjb3B5X2ludG9fdW5jaGVja2VkIChhZGFwdGVyLCBkZXN0LCBvZmZzZXQgKyBhZGFwdGVyLT5za2lwLCBzaXplKTsKK30KKworLyoqCisgKiBnc3RfYWRhcHRlcl9mbHVzaDoKKyAqIEBhZGFwdGVyOiBhICNHc3RBZGFwdGVyCisgKiBAZmx1c2g6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gZmx1c2gKKyAqCisgKiBGbHVzaGVzIHRoZSBmaXJzdCBAZmx1c2ggYnl0ZXMgaW4gdGhlIEBhZGFwdGVyLiBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQKKyAqIGF0IGxlYXN0IHRoaXMgbWFueSBieXRlcyBhcmUgYXZhaWxhYmxlLgorICoKKyAqIFNlZSBhbHNvOiBnc3RfYWRhcHRlcl9tYXAoKSwgZ3N0X2FkYXB0ZXJfdW5tYXAoKQorICovCitzdGF0aWMgdm9pZAorZ3N0X2FkYXB0ZXJfZmx1c2hfdW5jaGVja2VkIChHc3RBZGFwdGVyICogYWRhcHRlciwgZ3NpemUgZmx1c2gpCit7CisgIEdzdEJ1ZmZlciAqY3VyOworICBnc2l6ZSBzaXplOworICBHc3RBZGFwdGVyUHJpdmF0ZSAqcHJpdjsKKyAgR1NMaXN0ICpnOworCisgIEdTVF9MT0dfT0JKRUNUIChhZGFwdGVyLCAiZmx1c2hpbmcgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyIsIGZsdXNoKTsKKworICBwcml2ID0gYWRhcHRlci0+cHJpdjsKKworICAvKiBjbGVhciBzdGF0ZSAqLworICBhZGFwdGVyLT5zaXplIC09IGZsdXNoOworICBhZGFwdGVyLT5hc3NlbWJsZWRfbGVuID0gMDsKKworICAvKiB0YWtlIHNraXAgaW50byBhY2NvdW50ICovCisgIGZsdXNoICs9IGFkYXB0ZXItPnNraXA7CisgIC8qIGRpc3RhbmNlIGlzIGFsd2F5cyBhdCBsZWFzdCB0aGUgYW1vdW50IG9mIHNraXBwZWQgYnl0ZXMgKi8KKyAgcHJpdi0+ZGlzdGFuY2UgLT0gYWRhcHRlci0+c2tpcDsKKworICBnID0gYWRhcHRlci0+YnVmbGlzdDsKKyAgY3VyID0gZy0+ZGF0YTsKKyAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGN1cik7CisgIHdoaWxlIChmbHVzaCA+PSBzaXplKSB7CisgICAgLyogY2FuIHNraXAgd2hvbGUgYnVmZmVyICovCisgICAgR1NUX0xPR19PQkpFQ1QgKGFkYXB0ZXIsICJmbHVzaGluZyBvdXQgaGVhZCBidWZmZXIiKTsKKyAgICBwcml2LT5kaXN0YW5jZSArPSBzaXplOworICAgIGZsdXNoIC09IHNpemU7CisKKyAgICBnc3RfYnVmZmVyX3VucmVmIChjdXIpOworICAgIGcgPSBnX3NsaXN0X2RlbGV0ZV9saW5rIChnLCBnKTsKKworICAgIGlmIChHX1VOTElLRUxZIChnID09IE5VTEwpKSB7CisgICAgICBHU1RfTE9HX09CSkVDVCAoYWRhcHRlciwgImFkYXB0ZXIgZW1wdHkgbm93Iik7CisgICAgICBhZGFwdGVyLT5idWZsaXN0X2VuZCA9IE5VTEw7CisgICAgICBicmVhazsKKyAgICB9CisgICAgLyogdGhlcmUgaXMgYSBuZXcgaGVhZCBidWZmZXIsIHVwZGF0ZSB0aGUgdGltZXN0YW1wICovCisgICAgY3VyID0gZy0+ZGF0YTsKKyAgICB1cGRhdGVfdGltZXN0YW1wIChhZGFwdGVyLCBjdXIpOworICAgIHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChjdXIpOworICB9CisgIGFkYXB0ZXItPmJ1Zmxpc3QgPSBnOworICAvKiBhY2NvdW50IGZvciB0aGUgcmVtYWluaW5nIGJ5dGVzICovCisgIGFkYXB0ZXItPnNraXAgPSBmbHVzaDsKKyAgYWRhcHRlci0+cHJpdi0+ZGlzdGFuY2UgKz0gZmx1c2g7CisgIC8qIGludmFsaWRhdGUgc2NhbiBwb3NpdGlvbiAqLworICBwcml2LT5zY2FuX29mZnNldCA9IDA7CisgIHByaXYtPnNjYW5fZW50cnkgPSBOVUxMOworfQorCit2b2lkCitnc3RfYWRhcHRlcl9mbHVzaCAoR3N0QWRhcHRlciAqIGFkYXB0ZXIsIGdzaXplIGZsdXNoKQoreworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQURBUFRFUiAoYWRhcHRlcikpOworICBnX3JldHVybl9pZl9mYWlsIChmbHVzaCA8PSBhZGFwdGVyLT5zaXplKTsKKworICAvKiBmbHVzaGluZyBvdXQgMCBieXRlcyB3aWxsIGRvIG5vdGhpbmcgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKGZsdXNoID09IDApKQorICAgIHJldHVybjsKKworICBnc3RfYWRhcHRlcl9mbHVzaF91bmNoZWNrZWQgKGFkYXB0ZXIsIGZsdXNoKTsKK30KKworLyogaW50ZXJuYWwgZnVuY3Rpb24sIG5ieXRlcyBzaG91bGQgYmUgZmx1c2hlZCBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gKi8KK3N0YXRpYyBndWludDggKgorZ3N0X2FkYXB0ZXJfdGFrZV9pbnRlcm5hbCAoR3N0QWRhcHRlciAqIGFkYXB0ZXIsIGdzaXplIG5ieXRlcykKK3sKKyAgZ3VpbnQ4ICpkYXRhOworICBnc2l6ZSB0b3JldXNlLCB0b2NvcHk7CisKKyAgLyogc2VlIGhvdyBtdWNoIGRhdGEgd2UgY2FuIHJldXNlIGZyb20gdGhlIGFzc2VtYmxlZCBtZW1vcnkgYW5kIGhvdyBtdWNoCisgICAqIHdlIG5lZWQgdG8gY29weSAqLworICB0b3JldXNlID0gTUlOIChuYnl0ZXMsIGFkYXB0ZXItPmFzc2VtYmxlZF9sZW4pOworICB0b2NvcHkgPSBuYnl0ZXMgLSB0b3JldXNlOworCisgIC8qIGZpbmQgbWVtb3J5IHRvIHJldHVybiAqLworICBpZiAoYWRhcHRlci0+YXNzZW1ibGVkX3NpemUgPj0gbmJ5dGVzICYmIHRvcmV1c2UgPiAwKSB7CisgICAgLyogd2UgcmV1c2UgYWxyZWFkeSBhbGxvY2F0ZWQgbWVtb3J5IGJ1dCBvbmx5IHdoZW4gd2UncmUgZ29pbmcgdG8gcmV1c2UKKyAgICAgKiBzb21ldGhpbmcgZnJvbSBpdCBiZWNhdXNlIGVsc2Ugd2UgYXJlIHdvcnNlIHRoYW4gdGhlIG1hbGxvYyBhbmQgY29weQorICAgICAqIGNhc2UgYmVsb3cgKi8KKyAgICBHU1RfTE9HX09CSkVDVCAoYWRhcHRlciwgInJldXNpbmcgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyBvZiBhc3NlbWJsZWQiCisgICAgICAgICIgZGF0YSIsIHRvcmV1c2UpOworICAgIC8qIHdlIGhhdmUgZW5vdWdoIGZyZWUgc3BhY2UgaW4gdGhlIGFzc2VtYmxlZCBhcnJheSAqLworICAgIGRhdGEgPSBhZGFwdGVyLT5hc3NlbWJsZWRfZGF0YTsKKyAgICAvKiBmbHVzaCBhZnRlciB0aGlzIGZ1bmN0aW9uIHNob3VsZCBzZXQgdGhlIGFzc2VtYmxlZF9zaXplIHRvIDAgKi8KKyAgICBhZGFwdGVyLT5hc3NlbWJsZWRfZGF0YSA9IGdfbWFsbG9jIChhZGFwdGVyLT5hc3NlbWJsZWRfc2l6ZSk7CisgIH0gZWxzZSB7CisgICAgR1NUX0xPR19PQkpFQ1QgKGFkYXB0ZXIsICJhbGxvY2F0aW5nICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMiLCBuYnl0ZXMpOworICAgIC8qIG5vdCBlbm91Z2ggYnl0ZXMgaW4gdGhlIGFzc2VtYmxlZCBhcnJheSwganVzdCBhbGxvY2F0ZSBuZXcgc3BhY2UgKi8KKyAgICBkYXRhID0gZ19tYWxsb2MgKG5ieXRlcyk7CisgICAgLyogcmV1c2Ugd2hhdCB3ZSBjYW4gZnJvbSB0aGUgYWxyZWFkeSBhc3NlbWJsZWQgZGF0YSAqLworICAgIGlmICh0b3JldXNlKSB7CisgICAgICBHU1RfTE9HX09CSkVDVCAoYWRhcHRlciwgInJldXNpbmcgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyIsIHRvcmV1c2UpOworICAgICAgbWVtY3B5IChkYXRhLCBhZGFwdGVyLT5hc3NlbWJsZWRfZGF0YSwgdG9yZXVzZSk7CisgICAgfQorICB9CisgIGlmICh0b2NvcHkpIHsKKyAgICAvKiBjb3B5IHRoZSByZW1haW5pbmcgZGF0YSAqLworICAgIGNvcHlfaW50b191bmNoZWNrZWQgKGFkYXB0ZXIsIHRvcmV1c2UgKyBkYXRhLCB0b3JldXNlICsgYWRhcHRlci0+c2tpcCwKKyAgICAgICAgdG9jb3B5KTsKKyAgfQorICByZXR1cm4gZGF0YTsKK30KKworLyoqCisgKiBnc3RfYWRhcHRlcl90YWtlOgorICogQGFkYXB0ZXI6IGEgI0dzdEFkYXB0ZXIKKyAqIEBuYnl0ZXM6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdGFrZQorICoKKyAqIFJldHVybnMgYSBmcmVzaGx5IGFsbG9jYXRlZCBidWZmZXIgY29udGFpbmluZyB0aGUgZmlyc3QgQG5ieXRlcyBieXRlcyBvZiB0aGUKKyAqIEBhZGFwdGVyLiBUaGUgcmV0dXJuZWQgYnl0ZXMgd2lsbCBiZSBmbHVzaGVkIGZyb20gdGhlIGFkYXB0ZXIuCisgKgorICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUuIGdfZnJlZSBhZnRlciB1c2FnZS4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnX2ZyZWUKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKGFycmF5IGxlbmd0aD1uYnl0ZXMpOiBvdmVuLWZyZXNoIGhvdCBkYXRhLCBvcgorICogICAgICNOVUxMIGlmIEBuYnl0ZXMgYnl0ZXMgYXJlIG5vdCBhdmFpbGFibGUKKyAqLworZ3VpbnQ4ICoKK2dzdF9hZGFwdGVyX3Rha2UgKEdzdEFkYXB0ZXIgKiBhZGFwdGVyLCBnc2l6ZSBuYnl0ZXMpCit7CisgIGd1aW50OCAqZGF0YTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0FEQVBURVIgKGFkYXB0ZXIpLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG5ieXRlcyA+IDAsIE5VTEwpOworCisgIC8qIHdlIGRvbid0IGhhdmUgZW5vdWdoIGRhdGEsIHJldHVybiBOVUxMLiBUaGlzIGlzIHVubGlrZWx5CisgICAqIGFzIG9uZSB1c3VhbGx5IGRvZXMgYW4gX2F2YWlsYWJsZSgpIGZpcnN0IGluc3RlYWQgb2YgcGVla2luZyBhCisgICAqIHJhbmRvbSBzaXplLiAqLworICBpZiAoR19VTkxJS0VMWSAobmJ5dGVzID4gYWRhcHRlci0+c2l6ZSkpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgZGF0YSA9IGdzdF9hZGFwdGVyX3Rha2VfaW50ZXJuYWwgKGFkYXB0ZXIsIG5ieXRlcyk7CisKKyAgZ3N0X2FkYXB0ZXJfZmx1c2hfdW5jaGVja2VkIChhZGFwdGVyLCBuYnl0ZXMpOworCisgIHJldHVybiBkYXRhOworfQorCisvKioKKyAqIGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyOgorICogQGFkYXB0ZXI6IGEgI0dzdEFkYXB0ZXIKKyAqIEBuYnl0ZXM6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdGFrZQorICoKKyAqIFJldHVybnMgYSAjR3N0QnVmZmVyIGNvbnRhaW5pbmcgdGhlIGZpcnN0IEBuYnl0ZXMgYnl0ZXMgb2YgdGhlCisgKiBAYWRhcHRlci4gVGhlIHJldHVybmVkIGJ5dGVzIHdpbGwgYmUgZmx1c2hlZCBmcm9tIHRoZSBhZGFwdGVyLgorICogVGhpcyBmdW5jdGlvbiBpcyBwb3RlbnRpYWxseSBtb3JlIHBlcmZvcm1hbnQgdGhhbiBnc3RfYWRhcHRlcl90YWtlKCkKKyAqIHNpbmNlIGl0IGNhbiByZXVzZSB0aGUgbWVtb3J5IGluIHB1c2hlZCBidWZmZXJzIGJ5IHN1YmJ1ZmZlcmluZworICogb3IgbWVyZ2luZy4KKyAqCisgKiBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZS4gZ3N0X2J1ZmZlcl91bnJlZigpIGFmdGVyIHVzYWdlLgorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdzdF9idWZmZXJfdW5yZWYKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdEJ1ZmZlciBjb250YWluaW5nIHRoZSBmaXJzdCBAbmJ5dGVzIG9mCisgKiAgICAgdGhlIGFkYXB0ZXIsIG9yICNOVUxMIGlmIEBuYnl0ZXMgYnl0ZXMgYXJlIG5vdCBhdmFpbGFibGUKKyAqCisgKiBTaW5jZTogMC4xMC42CisgKi8KK0dzdEJ1ZmZlciAqCitnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAoR3N0QWRhcHRlciAqIGFkYXB0ZXIsIGdzaXplIG5ieXRlcykKK3sKKyAgR3N0QnVmZmVyICpidWZmZXI7CisgIEdzdEJ1ZmZlciAqY3VyOworICBnc2l6ZSBoc2l6ZSwgc2tpcDsKKyAgZ3VpbnQ4ICpkYXRhOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQURBUFRFUiAoYWRhcHRlciksIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAobmJ5dGVzID4gMCwgTlVMTCk7CisKKyAgR1NUX0xPR19PQkpFQ1QgKGFkYXB0ZXIsICJ0YWtpbmcgYnVmZmVyIG9mICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMiLAorICAgICAgbmJ5dGVzKTsKKworICAvKiB3ZSBkb24ndCBoYXZlIGVub3VnaCBkYXRhLCByZXR1cm4gTlVMTC4gVGhpcyBpcyB1bmxpa2VseQorICAgKiBhcyBvbmUgdXN1YWxseSBkb2VzIGFuIF9hdmFpbGFibGUoKSBmaXJzdCBpbnN0ZWFkIG9mIGdyYWJiaW5nIGEKKyAgICogcmFuZG9tIHNpemUuICovCisgIGlmIChHX1VOTElLRUxZIChuYnl0ZXMgPiBhZGFwdGVyLT5zaXplKSkKKyAgICByZXR1cm4gTlVMTDsKKworICBjdXIgPSBhZGFwdGVyLT5idWZsaXN0LT5kYXRhOworICBza2lwID0gYWRhcHRlci0+c2tpcDsKKyAgaHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChjdXIpOworCisgIC8qIG91ciBoZWFkIGJ1ZmZlciBoYXMgZW5vdWdoIGRhdGEgbGVmdCwgcmV0dXJuIGl0ICovCisgIGlmIChza2lwID09IDAgJiYgaHNpemUgPT0gbmJ5dGVzKSB7CisgICAgR1NUX0xPR19PQkpFQ1QgKGFkYXB0ZXIsICJwcm92aWRpbmcgYnVmZmVyIG9mICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMiCisgICAgICAgICIgYXMgaGVhZCBidWZmZXIiLCBuYnl0ZXMpOworICAgIGJ1ZmZlciA9IGdzdF9idWZmZXJfcmVmIChjdXIpOworICAgIGdvdG8gZG9uZTsKKyAgfSBlbHNlIGlmIChoc2l6ZSA+PSBuYnl0ZXMgKyBza2lwKSB7CisgICAgR1NUX0xPR19PQkpFQ1QgKGFkYXB0ZXIsICJwcm92aWRpbmcgYnVmZmVyIG9mICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMiCisgICAgICAgICIgdmlhIHJlZ2lvbiBjb3B5IiwgbmJ5dGVzKTsKKyAgICBidWZmZXIgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChjdXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIHNraXAsIG5ieXRlcyk7CisgICAgZ290byBkb25lOworICB9CisKKyAgaWYgKGdzdF9hZGFwdGVyX3RyeV90b19tZXJnZV91cCAoYWRhcHRlciwgbmJ5dGVzKSkgeworICAgIC8qIE1lcmdlZCBzb21ldGhpbmcsIGxldCdzIHRyeSBhZ2FpbiBmb3Igc3ViLWJ1ZmZlcmluZyAqLworICAgIGN1ciA9IGFkYXB0ZXItPmJ1Zmxpc3QtPmRhdGE7CisgICAgaWYgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGN1cikgPj0gbmJ5dGVzICsgc2tpcCkgeworICAgICAgR1NUX0xPR19PQkpFQ1QgKGFkYXB0ZXIsICJwcm92aWRpbmcgYnVmZmVyIG9mICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMiCisgICAgICAgICAgIiB2aWEgc3ViLWJ1ZmZlciIsIG5ieXRlcyk7CisgICAgICBidWZmZXIgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChjdXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIHNraXAsIG5ieXRlcyk7CisgICAgICBnb3RvIGRvbmU7CisgICAgfQorICB9CisKKyAgZGF0YSA9IGdzdF9hZGFwdGVyX3Rha2VfaW50ZXJuYWwgKGFkYXB0ZXIsIG5ieXRlcyk7CisKKyAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisgIGdzdF9idWZmZXJfdGFrZV9tZW1vcnkgKGJ1ZmZlciwgLTEsCisgICAgICBnc3RfbWVtb3J5X25ld193cmFwcGVkICgwLCBkYXRhLCBnX2ZyZWUsIG5ieXRlcywgMCwgbmJ5dGVzKSk7CisKK2RvbmU6CisgIGdzdF9hZGFwdGVyX2ZsdXNoX3VuY2hlY2tlZCAoYWRhcHRlciwgbmJ5dGVzKTsKKworICByZXR1cm4gYnVmZmVyOworfQorCisvKioKKyAqIGdzdF9hZGFwdGVyX3Rha2VfbGlzdDoKKyAqIEBhZGFwdGVyOiBhICNHc3RBZGFwdGVyCisgKiBAbmJ5dGVzOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHRha2UKKyAqCisgKiBSZXR1cm5zIGEgI0dMaXN0IG9mIGJ1ZmZlcnMgY29udGFpbmluZyB0aGUgZmlyc3QgQG5ieXRlcyBieXRlcyBvZiB0aGUKKyAqIEBhZGFwdGVyLiBUaGUgcmV0dXJuZWQgYnl0ZXMgd2lsbCBiZSBmbHVzaGVkIGZyb20gdGhlIGFkYXB0ZXIuCisgKiBXaGVuIHRoZSBjYWxsZXIgY2FuIGRlYWwgd2l0aCBpbmRpdmlkdWFsIGJ1ZmZlcnMsIHRoaXMgZnVuY3Rpb24gaXMgbW9yZQorICogcGVyZm9ybWFudCBiZWNhdXNlIG5vIG1lbW9yeSBzaG91bGQgYmUgY29waWVkLgorICoKKyAqIENhbGxlciBvd25zIHJldHVybmVkIGxpc3QgYW5kIGNvbnRhaW5lZCBidWZmZXJzLiBnc3RfYnVmZmVyX3VucmVmKCkgZWFjaAorICogYnVmZmVyIGluIHRoZSBsaXN0IGJlZm9yZSBmcmVlaW5nIHRoZSBsaXN0IGFmdGVyIHVzYWdlLgorICoKKyAqIFJldHVybnM6IChlbGVtZW50LXR5cGUgR3N0LkJ1ZmZlcikgKHRyYW5zZmVyIGZ1bGwpOiBhICNHTGlzdCBvZiBidWZmZXJzCisgKiAgICAgY29udGFpbmluZyB0aGUgZmlyc3QgQG5ieXRlcyBvZiB0aGUgYWRhcHRlciwgb3IgI05VTEwgaWYgQG5ieXRlcyBieXRlcworICogICAgIGFyZSBub3QgYXZhaWxhYmxlCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLworR0xpc3QgKgorZ3N0X2FkYXB0ZXJfdGFrZV9saXN0IChHc3RBZGFwdGVyICogYWRhcHRlciwgZ3NpemUgbmJ5dGVzKQoreworICBHTGlzdCAqcmVzdWx0ID0gTlVMTCwgKnRhaWwgPSBOVUxMOworICBHc3RCdWZmZXIgKmN1cjsKKyAgZ3NpemUgaHNpemUsIHNraXA7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19BREFQVEVSIChhZGFwdGVyKSwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYnl0ZXMgPD0gYWRhcHRlci0+c2l6ZSwgTlVMTCk7CisKKyAgR1NUX0xPR19PQkpFQ1QgKGFkYXB0ZXIsICJ0YWtpbmcgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyIsIG5ieXRlcyk7CisKKyAgd2hpbGUgKG5ieXRlcyA+IDApIHsKKyAgICBjdXIgPSBhZGFwdGVyLT5idWZsaXN0LT5kYXRhOworICAgIHNraXAgPSBhZGFwdGVyLT5za2lwOworICAgIGhzaXplID0gTUlOIChuYnl0ZXMsIGdzdF9idWZmZXJfZ2V0X3NpemUgKGN1cikgLSBza2lwKTsKKworICAgIGN1ciA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChhZGFwdGVyLCBoc2l6ZSk7CisKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgIHJlc3VsdCA9IHRhaWwgPSBnX2xpc3RfYXBwZW5kIChyZXN1bHQsIGN1cik7CisgICAgfSBlbHNlIHsKKyAgICAgIHRhaWwgPSBnX2xpc3RfYXBwZW5kICh0YWlsLCBjdXIpOworICAgICAgdGFpbCA9IGdfbGlzdF9uZXh0ICh0YWlsKTsKKyAgICB9CisgICAgbmJ5dGVzIC09IGhzaXplOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlOgorICogQGFkYXB0ZXI6IGEgI0dzdEFkYXB0ZXIKKyAqCisgKiBHZXRzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBieXRlcyBhdmFpbGFibGUsIHRoYXQgaXMgaXQgcmV0dXJucyB0aGUgbWF4aW11bQorICogdmFsdWUgdGhhdCBjYW4gYmUgc3VwcGxpZWQgdG8gZ3N0X2FkYXB0ZXJfbWFwKCkgd2l0aG91dCB0aGF0IGZ1bmN0aW9uCisgKiByZXR1cm5pbmcgTlVMTC4KKyAqCisgKiBSZXR1cm5zOiBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGluIEBhZGFwdGVyCisgKi8KK2dzaXplCitnc3RfYWRhcHRlcl9hdmFpbGFibGUgKEdzdEFkYXB0ZXIgKiBhZGFwdGVyKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0FEQVBURVIgKGFkYXB0ZXIpLCAwKTsKKworICByZXR1cm4gYWRhcHRlci0+c2l6ZTsKK30KKworLyoqCisgKiBnc3RfYWRhcHRlcl9hdmFpbGFibGVfZmFzdDoKKyAqIEBhZGFwdGVyOiBhICNHc3RBZGFwdGVyCisgKgorICogR2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBhcmUgaW1tZWRpYXRlbHkgYXZhaWxhYmxlIHdpdGhvdXQKKyAqIHJlcXVpcmluZyBhbnkgZXhwZW5zaXZlIG9wZXJhdGlvbnMgKGxpa2UgY29weWluZyB0aGUgZGF0YSBpbnRvIGEKKyAqIHRlbXBvcmFyeSBidWZmZXIpLgorICoKKyAqIFJldHVybnM6IG51bWJlciBvZiBieXRlcyB0aGF0IGFyZSBhdmFpbGFibGUgaW4gQGFkYXB0ZXIgd2l0aG91dCBleHBlbnNpdmUKKyAqIG9wZXJhdGlvbnMKKyAqLworZ3NpemUKK2dzdF9hZGFwdGVyX2F2YWlsYWJsZV9mYXN0IChHc3RBZGFwdGVyICogYWRhcHRlcikKK3sKKyAgR3N0QnVmZmVyICpjdXI7CisgIGdzaXplIHNpemU7CisgIEdTTGlzdCAqZzsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0FEQVBURVIgKGFkYXB0ZXIpLCAwKTsKKworICAvKiBubyBkYXRhICovCisgIGlmIChhZGFwdGVyLT5zaXplID09IDApCisgICAgcmV0dXJuIDA7CisKKyAgLyogc29tZSBzdHVmZiB3ZSBhbHJlYWR5IGFzc2VtYmxlZCAqLworICBpZiAoYWRhcHRlci0+YXNzZW1ibGVkX2xlbikKKyAgICByZXR1cm4gYWRhcHRlci0+YXNzZW1ibGVkX2xlbjsKKworICAvKiB0YWtlIHRoZSBmaXJzdCBub24temVybyBidWZmZXIgKi8KKyAgZyA9IGFkYXB0ZXItPmJ1Zmxpc3Q7CisgIHdoaWxlIChUUlVFKSB7CisgICAgY3VyID0gZy0+ZGF0YTsKKyAgICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoY3VyKTsKKyAgICBpZiAoc2l6ZSAhPSAwKQorICAgICAgYnJlYWs7CisgICAgZyA9IGdfc2xpc3RfbmV4dCAoZyk7CisgIH0KKworICAvKiB3ZSBjYW4gcXVpY2tseSBnZXQgdGhlIChyZW1haW5pbmcpIGRhdGEgb2YgdGhlIGZpcnN0IGJ1ZmZlciAqLworICByZXR1cm4gc2l6ZSAtIGFkYXB0ZXItPnNraXA7Cit9CisKKy8qKgorICogZ3N0X2FkYXB0ZXJfcHJldl90aW1lc3RhbXA6CisgKiBAYWRhcHRlcjogYSAjR3N0QWRhcHRlcgorICogQGRpc3RhbmNlOiAob3V0KSAoYWxsb3ctbm9uZSk6IHBvaW50ZXIgdG8gbG9jYXRpb24gZm9yIGRpc3RhbmNlLCBvciBOVUxMCisgKgorICogR2V0IHRoZSB0aW1lc3RhbXAgdGhhdCB3YXMgYmVmb3JlIHRoZSBjdXJyZW50IGJ5dGUgaW4gdGhlIGFkYXB0ZXIuIFdoZW4KKyAqIEBkaXN0YW5jZSBpcyBnaXZlbiwgdGhlIGFtb3VudCBvZiBieXRlcyBiZXR3ZWVuIHRoZSB0aW1lc3RhbXAgYW5kIHRoZSBjdXJyZW50CisgKiBwb3NpdGlvbiBpcyByZXR1cm5lZC4KKyAqCisgKiBUaGUgdGltZXN0YW1wIGlzIHJlc2V0IHRvIEdTVF9DTE9DS19USU1FX05PTkUgYW5kIHRoZSBkaXN0YW5jZSBpcyBzZXQgdG8gMCB3aGVuCisgKiB0aGUgYWRhcHRlciBpcyBmaXJzdCBjcmVhdGVkIG9yIHdoZW4gaXQgaXMgY2xlYXJlZC4gVGhpcyBhbHNvIG1lYW5zIHRoYXQgYmVmb3JlCisgKiB0aGUgZmlyc3QgYnl0ZSB3aXRoIGEgdGltZXN0YW1wIGlzIHJlbW92ZWQgZnJvbSB0aGUgYWRhcHRlciwgdGhlIHRpbWVzdGFtcAorICogYW5kIGRpc3RhbmNlIHJldHVybmVkIGFyZSBHU1RfQ0xPQ0tfVElNRV9OT05FIGFuZCAwIHJlc3BlY3RpdmVseS4KKyAqCisgKiBSZXR1cm5zOiBUaGUgcHJldmlvdXNseSBzZWVuIHRpbWVzdGFtcC4KKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICovCitHc3RDbG9ja1RpbWUKK2dzdF9hZGFwdGVyX3ByZXZfdGltZXN0YW1wIChHc3RBZGFwdGVyICogYWRhcHRlciwgZ3VpbnQ2NCAqIGRpc3RhbmNlKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0FEQVBURVIgKGFkYXB0ZXIpLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKworICBpZiAoZGlzdGFuY2UpCisgICAgKmRpc3RhbmNlID0gYWRhcHRlci0+cHJpdi0+ZGlzdGFuY2U7CisKKyAgcmV0dXJuIGFkYXB0ZXItPnByaXYtPnRpbWVzdGFtcDsKK30KKworLyoqCisgKiBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzJfcGVlazoKKyAqIEBhZGFwdGVyOiBhICNHc3RBZGFwdGVyCisgKiBAbWFzazogbWFzayB0byBhcHBseSB0byBkYXRhIGJlZm9yZSBtYXRjaGluZyBhZ2FpbnN0IEBwYXR0ZXJuCisgKiBAcGF0dGVybjogcGF0dGVybiB0byBtYXRjaCAoYWZ0ZXIgbWFzayBpcyBhcHBsaWVkKQorICogQG9mZnNldDogb2Zmc2V0IGludG8gdGhlIGFkYXB0ZXIgZGF0YSBmcm9tIHdoaWNoIHRvIHN0YXJ0IHNjYW5uaW5nLCByZXR1cm5zCisgKiAgICAgICAgICB0aGUgbGFzdCBzY2FubmVkIHBvc2l0aW9uLgorICogQHNpemU6IG51bWJlciBvZiBieXRlcyB0byBzY2FuIGZyb20gb2Zmc2V0CisgKiBAdmFsdWU6IHBvaW50ZXIgdG8gdWludDMyIHRvIHJldHVybiBtYXRjaGluZyBkYXRhCisgKgorICogU2NhbiBmb3IgcGF0dGVybiBAcGF0dGVybiB3aXRoIGFwcGxpZWQgbWFzayBAbWFzayBpbiB0aGUgYWRhcHRlciBkYXRhLAorICogc3RhcnRpbmcgZnJvbSBvZmZzZXQgQG9mZnNldC4gIElmIGEgbWF0Y2ggaXMgZm91bmQsIHRoZSB2YWx1ZSB0aGF0IG1hdGNoZWQKKyAqIGlzIHJldHVybmVkIHRocm91Z2ggQHZhbHVlLCBvdGhlcndpc2UgQHZhbHVlIGlzIGxlZnQgdW50b3VjaGVkLgorICoKKyAqIFRoZSBieXRlcyBpbiBAcGF0dGVybiBhbmQgQG1hc2sgYXJlIGludGVycHJldGVkIGxlZnQtdG8tcmlnaHQsIHJlZ2FyZGxlc3MKKyAqIG9mIGVuZGlhbm5lc3MuICBBbGwgZm91ciBieXRlcyBvZiB0aGUgcGF0dGVybiBtdXN0IGJlIHByZXNlbnQgaW4gdGhlCisgKiBhZGFwdGVyIGZvciBpdCB0byBtYXRjaCwgZXZlbiBpZiB0aGUgZmlyc3Qgb3IgbGFzdCBieXRlcyBhcmUgbWFza2VkIG91dC4KKyAqCisgKiBJdCBpcyBhbiBlcnJvciB0byBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aG91dCBtYWtpbmcgc3VyZSB0aGF0IHRoZXJlIGlzCisgKiBlbm91Z2ggZGF0YSAob2Zmc2V0K3NpemUgYnl0ZXMpIGluIHRoZSBhZGFwdGVyLgorICoKKyAqIFJldHVybnM6IG9mZnNldCBvZiB0aGUgZmlyc3QgbWF0Y2gsIG9yIC0xIGlmIG5vIG1hdGNoIHdhcyBmb3VuZC4KKyAqCisgKiBTaW5jZTogMC4xMC4zMAorICovCitnc2l6ZQorZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyX3BlZWsgKEdzdEFkYXB0ZXIgKiBhZGFwdGVyLCBndWludDMyIG1hc2ssCisgICAgZ3VpbnQzMiBwYXR0ZXJuLCBnc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUsIGd1aW50MzIgKiB2YWx1ZSkKK3sKKyAgR1NMaXN0ICpnOworICBnc2l6ZSBza2lwLCBic2l6ZSwgb3NpemUsIGk7CisgIGd1aW50MzIgc3RhdGU7CisgIGd1aW50OCAqYmRhdGEsICpvZGF0YTsKKyAgR3N0QnVmZmVyICpidWY7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNpemUgPiAwLCAtMSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChvZmZzZXQgKyBzaXplIDw9IGFkYXB0ZXItPnNpemUsIC0xKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKCgofm1hc2spICYgcGF0dGVybikgPT0gMCwgLTEpOworCisgIC8qIHdlIGNhbid0IGZpbmQgdGhlIHBhdHRlcm4gd2l0aCBsZXNzIHRoYW4gNCBieXRlcyAqLworICBpZiAoR19VTkxJS0VMWSAoc2l6ZSA8IDQpKQorICAgIHJldHVybiAtMTsKKworICBza2lwID0gb2Zmc2V0ICsgYWRhcHRlci0+c2tpcDsKKworICAvKiBmaXJzdCBzdGVwLCBkbyBza2lwcGluZyBhbmQgcG9zaXRpb24gb24gdGhlIGZpcnN0IGJ1ZmZlciAqLworICAvKiBvcHRpbWlzdGljYWxseSBhc3N1bWUgc2Nhbm5pbmcgY29udGludWVzIHNlcXVlbnRpYWxseSAqLworICBpZiAoYWRhcHRlci0+cHJpdi0+c2Nhbl9lbnRyeSAmJiAoYWRhcHRlci0+cHJpdi0+c2Nhbl9vZmZzZXQgPD0gc2tpcCkpIHsKKyAgICBnID0gYWRhcHRlci0+cHJpdi0+c2Nhbl9lbnRyeTsKKyAgICBza2lwIC09IGFkYXB0ZXItPnByaXYtPnNjYW5fb2Zmc2V0OworICB9IGVsc2UgeworICAgIGcgPSBhZGFwdGVyLT5idWZsaXN0OworICAgIGFkYXB0ZXItPnByaXYtPnNjYW5fb2Zmc2V0ID0gMDsKKyAgICBhZGFwdGVyLT5wcml2LT5zY2FuX2VudHJ5ID0gTlVMTDsKKyAgfQorICBidWYgPSBnLT5kYXRhOworICBic2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1Zik7CisgIHdoaWxlIChHX1VOTElLRUxZIChza2lwID49IGJzaXplKSkgeworICAgIHNraXAgLT0gYnNpemU7CisgICAgZyA9IGdfc2xpc3RfbmV4dCAoZyk7CisgICAgYWRhcHRlci0+cHJpdi0+c2Nhbl9vZmZzZXQgKz0gYnNpemU7CisgICAgYWRhcHRlci0+cHJpdi0+c2Nhbl9lbnRyeSA9IGc7CisgICAgYnVmID0gZy0+ZGF0YTsKKyAgICBic2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1Zik7CisgIH0KKyAgLyogZ2V0IHRoZSBkYXRhIG5vdyAqLworICBvZGF0YSA9IGdzdF9idWZmZXJfbWFwIChidWYsICZvc2l6ZSwgTlVMTCwgR1NUX01BUF9SRUFEKTsKKworICBiZGF0YSA9IG9kYXRhICsgc2tpcDsKKyAgYnNpemUgPSBvc2l6ZSAtIHNraXA7CisgIHNraXAgPSAwOworCisgIC8qIHNldCB0aGUgc3RhdGUgdG8gc29tZXRoaW5nIHRoYXQgZG9lcyBub3QgbWF0Y2ggKi8KKyAgc3RhdGUgPSB+cGF0dGVybjsKKworICAvKiBub3cgZmluZCBkYXRhICovCisgIGRvIHsKKyAgICBic2l6ZSA9IE1JTiAoYnNpemUsIHNpemUpOworICAgIGZvciAoaSA9IDA7IGkgPCBic2l6ZTsgaSsrKSB7CisgICAgICBzdGF0ZSA9ICgoc3RhdGUgPDwgOCkgfCBiZGF0YVtpXSk7CisgICAgICBpZiAoR19VTkxJS0VMWSAoKHN0YXRlICYgbWFzaykgPT0gcGF0dGVybikpIHsKKyAgICAgICAgLyogd2UgaGF2ZSBhIG1hdGNoIGJ1dCB3ZSBuZWVkIHRvIGhhdmUgc2tpcHBlZCBhdAorICAgICAgICAgKiBsZWFzdCA0IGJ5dGVzIHRvIGZpbGwgdGhlIHN0YXRlLiAqLworICAgICAgICBpZiAoR19MSUtFTFkgKHNraXAgKyBpID49IDMpKSB7CisgICAgICAgICAgaWYgKEdfTElLRUxZICh2YWx1ZSkpCisgICAgICAgICAgICAqdmFsdWUgPSBzdGF0ZTsKKyAgICAgICAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsIG9kYXRhLCBvc2l6ZSk7CisgICAgICAgICAgcmV0dXJuIG9mZnNldCArIHNraXAgKyBpIC0gMzsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBzaXplIC09IGJzaXplOworICAgIGlmIChzaXplID09IDApCisgICAgICBicmVhazsKKworICAgIC8qIG5vdGhpbmcgZm91bmQgeWV0LCBnbyB0byBuZXh0IGJ1ZmZlciAqLworICAgIHNraXAgKz0gYnNpemU7CisgICAgZyA9IGdfc2xpc3RfbmV4dCAoZyk7CisgICAgYWRhcHRlci0+cHJpdi0+c2Nhbl9vZmZzZXQgKz0gb3NpemU7CisgICAgYWRhcHRlci0+cHJpdi0+c2Nhbl9lbnRyeSA9IGc7CisgICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCBvZGF0YSwgb3NpemUpOworICAgIGJ1ZiA9IGctPmRhdGE7CisKKyAgICBvZGF0YSA9IGdzdF9idWZmZXJfbWFwIChidWYsICZvc2l6ZSwgTlVMTCwgR1NUX01BUF9SRUFEKTsKKyAgICBic2l6ZSA9IG9zaXplOworICAgIGJkYXRhID0gb2RhdGE7CisgIH0gd2hpbGUgKFRSVUUpOworCisgIGdzdF9idWZmZXJfdW5tYXAgKGJ1Ziwgb2RhdGEsIG9zaXplKTsKKworICAvKiBub3RoaW5nIGZvdW5kICovCisgIHJldHVybiAtMTsKK30KKworLyoqCisgKiBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzI6CisgKiBAYWRhcHRlcjogYSAjR3N0QWRhcHRlcgorICogQG1hc2s6IG1hc2sgdG8gYXBwbHkgdG8gZGF0YSBiZWZvcmUgbWF0Y2hpbmcgYWdhaW5zdCBAcGF0dGVybgorICogQHBhdHRlcm46IHBhdHRlcm4gdG8gbWF0Y2ggKGFmdGVyIG1hc2sgaXMgYXBwbGllZCkKKyAqIEBvZmZzZXQ6IG9mZnNldCBpbnRvIHRoZSBhZGFwdGVyIGRhdGEgZnJvbSB3aGljaCB0byBzdGFydCBzY2FubmluZywgcmV0dXJucworICogICAgICAgICAgdGhlIGxhc3Qgc2Nhbm5lZCBwb3NpdGlvbi4KKyAqIEBzaXplOiBudW1iZXIgb2YgYnl0ZXMgdG8gc2NhbiBmcm9tIG9mZnNldAorICoKKyAqIFNjYW4gZm9yIHBhdHRlcm4gQHBhdHRlcm4gd2l0aCBhcHBsaWVkIG1hc2sgQG1hc2sgaW4gdGhlIGFkYXB0ZXIgZGF0YSwKKyAqIHN0YXJ0aW5nIGZyb20gb2Zmc2V0IEBvZmZzZXQuCisgKgorICogVGhlIGJ5dGVzIGluIEBwYXR0ZXJuIGFuZCBAbWFzayBhcmUgaW50ZXJwcmV0ZWQgbGVmdC10by1yaWdodCwgcmVnYXJkbGVzcworICogb2YgZW5kaWFubmVzcy4gIEFsbCBmb3VyIGJ5dGVzIG9mIHRoZSBwYXR0ZXJuIG11c3QgYmUgcHJlc2VudCBpbiB0aGUKKyAqIGFkYXB0ZXIgZm9yIGl0IHRvIG1hdGNoLCBldmVuIGlmIHRoZSBmaXJzdCBvciBsYXN0IGJ5dGVzIGFyZSBtYXNrZWQgb3V0LgorICoKKyAqIEl0IGlzIGFuIGVycm9yIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRob3V0IG1ha2luZyBzdXJlIHRoYXQgdGhlcmUgaXMKKyAqIGVub3VnaCBkYXRhIChvZmZzZXQrc2l6ZSBieXRlcykgaW4gdGhlIGFkYXB0ZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBjYWxscyBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzJfcGVlaygpIHBhc3NpbmcgTlVMTAorICogZm9yIHZhbHVlLgorICoKKyAqIFJldHVybnM6IG9mZnNldCBvZiB0aGUgZmlyc3QgbWF0Y2gsIG9yIC0xIGlmIG5vIG1hdGNoIHdhcyBmb3VuZC4KKyAqCisgKiBFeGFtcGxlOgorICogPHByb2dyYW1saXN0aW5nPgorICogLy8gQXNzdW1lIHRoZSBhZGFwdGVyIGNvbnRhaW5zIDB4MDAgMHgwMSAweDAyIC4uLiAweGZlIDB4ZmYKKyAqCisgKiBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4MDAwMTAyMDMsIDAsIDI1Nik7CisgKiAvLyAtPiByZXR1cm5zIDAKKyAqIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmZmZmZiwgMHgwMDAxMDIwMywgMSwgMjU1KTsKKyAqIC8vIC0+IHJldHVybnMgLTEKKyAqIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmZmZmZiwgMHgwMTAyMDMwNCwgMSwgMjU1KTsKKyAqIC8vIC0+IHJldHVybnMgMQorICogZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmYsIDB4MDAwMSwgMCwgMjU2KTsKKyAqIC8vIC0+IHJldHVybnMgLTEKKyAqIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmLCAweDAyMDMsIDAsIDI1Nik7CisgKiAvLyAtPiByZXR1cm5zIDAKKyAqIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmMDAwMCwgMHgwMjAzMDAwMCwgMCwgMjU2KTsKKyAqIC8vIC0+IHJldHVybnMgMgorICogZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmYwMDAwLCAweDAyMDMwMDAwLCAwLCA0KTsKKyAqIC8vIC0+IHJldHVybnMgLTEKKyAqIDwvcHJvZ3JhbWxpc3Rpbmc+CisgKgorICogU2luY2U6IDAuMTAuMjQKKyAqLworZ3NpemUKK2dzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoR3N0QWRhcHRlciAqIGFkYXB0ZXIsIGd1aW50MzIgbWFzaywKKyAgICBndWludDMyIHBhdHRlcm4sIGdzaXplIG9mZnNldCwgZ3NpemUgc2l6ZSkKK3sKKyAgcmV0dXJuIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMl9wZWVrIChhZGFwdGVyLCBtYXNrLCBwYXR0ZXJuLCBvZmZzZXQsCisgICAgICBzaXplLCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5oIGIvbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE2NzMwYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5oCkBAIC0wLDAgKzEsMTAzIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNCBCZW5qYW1pbiBPdHRlIDxvdHRlQGdub21lLm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCisjaWZuZGVmIF9fR1NUX0FEQVBURVJfSF9fCisjZGVmaW5lIF9fR1NUX0FEQVBURVJfSF9fCisKK0dfQkVHSU5fREVDTFMKKworCisjZGVmaW5lIEdTVF9UWVBFX0FEQVBURVIgXAorICAoZ3N0X2FkYXB0ZXJfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgR1NUX0FEQVBURVIob2JqKSBcCisgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgR1NUX1RZUEVfQURBUFRFUiwgR3N0QWRhcHRlcikpCisjZGVmaW5lIEdTVF9BREFQVEVSX0NMQVNTKGtsYXNzKSBcCisgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBHU1RfVFlQRV9BREFQVEVSLCBHc3RBZGFwdGVyQ2xhc3MpKQorI2RlZmluZSBHU1RfQURBUFRFUl9HRVRfQ0xBU1Mob2JqKSBcCisgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfQURBUFRFUiwgR3N0QWRhcHRlckNsYXNzKSkKKyNkZWZpbmUgR1NUX0lTX0FEQVBURVIob2JqKSBcCisgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgR1NUX1RZUEVfQURBUFRFUikpCisjZGVmaW5lIEdTVF9JU19BREFQVEVSX0NMQVNTKGtsYXNzKSBcCisgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBHU1RfVFlQRV9BREFQVEVSKSkKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdEFkYXB0ZXIgR3N0QWRhcHRlcjsKK3R5cGVkZWYgc3RydWN0IF9Hc3RBZGFwdGVyQ2xhc3MgR3N0QWRhcHRlckNsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX0dzdEFkYXB0ZXJQcml2YXRlIEdzdEFkYXB0ZXJQcml2YXRlOworCisvKioKKyAqIEdzdEFkYXB0ZXI6CisgKgorICogVGhlIG9wYXF1ZSAjR3N0QWRhcHRlciBkYXRhIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IF9Hc3RBZGFwdGVyIHsKKyAgR09iamVjdCAgICAgICBvYmplY3Q7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIEdTTGlzdCAqICAgICAgYnVmbGlzdDsKKyAgR1NMaXN0ICogICAgICBidWZsaXN0X2VuZDsKKyAgZ3NpemUgICAgICAgICBzaXplOworICBnc2l6ZSAgICAgICAgIHNraXA7CisKKyAgLyogd2Uga2VlcCBzdGF0ZSBvZiBhc3NlbWJsZWQgcGllY2VzICovCisgIGd1aW50OCAqICAgICAgYXNzZW1ibGVkX2RhdGE7CisgIGdzaXplICAgICAgICAgYXNzZW1ibGVkX3NpemU7CisgIGdzaXplICAgICAgICAgYXNzZW1ibGVkX2xlbjsKKworICBHc3RBZGFwdGVyUHJpdmF0ZSAqcHJpdjsKKworICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKK307CisKK3N0cnVjdCBfR3N0QWRhcHRlckNsYXNzIHsKKyAgR09iamVjdENsYXNzICBwYXJlbnRfY2xhc3M7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOworfTsKKworR1R5cGUgICAgICAgICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfZ2V0X3R5cGUgICAgICAgICAgICAodm9pZCk7CisKK0dzdEFkYXB0ZXIgKiAgICAgICAgICAgIGdzdF9hZGFwdGVyX25ldyAgICAgICAgICAgICAgICAgKHZvaWQpOworCit2b2lkICAgICAgICAgICAgICAgICAgICBnc3RfYWRhcHRlcl9jbGVhciAgICAgICAgICAgICAgIChHc3RBZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9hZGFwdGVyX3B1c2ggICAgICAgICAgICAgICAgKEdzdEFkYXB0ZXIgKmFkYXB0ZXIsIEdzdEJ1ZmZlciogYnVmKTsKK2NvbnN0IGd1aW50OCAqICAgICAgICAgIGdzdF9hZGFwdGVyX21hcCAgICAgICAgICAgICAgICAgKEdzdEFkYXB0ZXIgKmFkYXB0ZXIsIGdzaXplIHNpemUpOwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfdW5tYXAgICAgICAgICAgICAgICAoR3N0QWRhcHRlciAqYWRhcHRlciwgZ3NpemUgZmx1c2gpOwordm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfY29weSAgICAgICAgICAgICAgICAoR3N0QWRhcHRlciAqYWRhcHRlciwgZ3VpbnQ4ICpkZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgb2Zmc2V0LCBnc2l6ZSBzaXplKTsKK3ZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9hZGFwdGVyX2ZsdXNoICAgICAgICAgICAgICAgKEdzdEFkYXB0ZXIgKmFkYXB0ZXIsIGdzaXplIGZsdXNoKTsKK2d1aW50OCogICAgICAgICAgICAgICAgIGdzdF9hZGFwdGVyX3Rha2UgICAgICAgICAgICAgICAgKEdzdEFkYXB0ZXIgKmFkYXB0ZXIsIGdzaXplIG5ieXRlcyk7CitHc3RCdWZmZXIqICAgICAgICAgICAgICBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAgICAgICAgIChHc3RBZGFwdGVyICphZGFwdGVyLCBnc2l6ZSBuYnl0ZXMpOworR0xpc3QqICAgICAgICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfdGFrZV9saXN0ICAgICAgICAgICAoR3N0QWRhcHRlciAqYWRhcHRlciwgZ3NpemUgbmJ5dGVzKTsKK2dzaXplICAgICAgICAgICAgICAgICAgIGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAgICAgICAgICAgKEdzdEFkYXB0ZXIgKmFkYXB0ZXIpOworZ3NpemUgICAgICAgICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlX2Zhc3QgICAgICAoR3N0QWRhcHRlciAqYWRhcHRlcik7CisKK0dzdENsb2NrVGltZSAgICAgICAgICAgIGdzdF9hZGFwdGVyX3ByZXZfdGltZXN0YW1wICAgICAgKEdzdEFkYXB0ZXIgKmFkYXB0ZXIsIGd1aW50NjQgKmRpc3RhbmNlKTsKKworZ3NpemUgICAgICAgICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyICAoR3N0QWRhcHRlciAqIGFkYXB0ZXIsIGd1aW50MzIgbWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MzIgcGF0dGVybiwgZ3NpemUgb2Zmc2V0LCBnc2l6ZSBzaXplKTsKKworZ3NpemUgICAgICAgICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyX3BlZWsgIChHc3RBZGFwdGVyICogYWRhcHRlciwgZ3VpbnQzMiBtYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiBwYXR0ZXJuLCBnc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUsIGd1aW50MzIgKiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9BREFQVEVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYyBiL2xpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0Yzg5MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmMKQEAgLTAsMCArMSwzOTA3IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgQ29udGFjdDogU3RlZmFuIEtvc3QgPHN0ZWZhbi5rb3N0QG5va2lhLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoqCisgKiBTRUNUSU9OOmdzdGJhc2VwYXJzZQorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBCYXNlIGNsYXNzIGZvciBzdHJlYW0gcGFyc2VycworICogQHNlZV9hbHNvOiAjR3N0QmFzZVRyYW5zZm9ybQorICoKKyAqIFRoaXMgYmFzZSBjbGFzcyBpcyBmb3IgcGFyc2VyIGVsZW1lbnRzIHRoYXQgcHJvY2VzcyBkYXRhIGFuZCBzcGxpdHMgaXQKKyAqIGludG8gc2VwYXJhdGUgYXVkaW8vdmlkZW8vd2hhdGV2ZXIgZnJhbWVzLgorICoKKyAqIEl0IHByb3ZpZGVzIGZvcjoKKyAqIDxpdGVtaXplZGxpc3Q+CisgKiAgIDxsaXN0aXRlbT48cGFyYT5wcm92aWRlcyBvbmUgc2luayBwYWQgYW5kIG9uZSBzb3VyY2UgcGFkPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT5oYW5kbGVzIHN0YXRlIGNoYW5nZXM8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPmNhbiBvcGVyYXRlIGluIHB1bGwgbW9kZSBvciBwdXNoIG1vZGU8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPmhhbmRsZXMgc2Vla2luZyBpbiBib3RoIG1vZGVzPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT5oYW5kbGVzIGV2ZW50cyAoTkVXU0VHTUVOVC9FT1MvRkxVU0gpPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICAgICBoYW5kbGVzIHF1ZXJpZXMgKFBPU0lUSU9OL0RVUkFUSU9OL1NFRUtJTkcvRk9STUFUL0NPTlZFUlQpCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogICA8bGlzdGl0ZW0+PHBhcmE+aGFuZGxlcyBmbHVzaGluZzwvcGFyYT48L2xpc3RpdGVtPgorICogPC9pdGVtaXplZGxpc3Q+CisgKgorICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBiYXNlIGNsYXNzIGlzIHRvIHByb3ZpZGUgdGhlIGJhc2ljIGZ1bmN0aW9uYWxpdHkgb2YKKyAqIGEgcGFyc2VyIGFuZCBzaGFyZSBhIGxvdCBvZiByYXRoZXIgY29tcGxleCBjb2RlLgorICoKKyAqIERlc2NyaXB0aW9uIG9mIHRoZSBwYXJzaW5nIG1lY2hhbmlzbToKKyAqIDxvcmRlcmVkbGlzdD4KKyAqIDxsaXN0aXRlbT4KKyAqICAgPGl0ZW1pemVkbGlzdD48dGl0bGU+U2V0LXVwIHBoYXNlPC90aXRsZT4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgIEdzdEJhc2VQYXJzZSBjbGFzcyBjYWxscyBAc2V0X3NpbmtfY2FwcyB0byBpbmZvcm0gdGhlIHN1YmNsYXNzIGFib3V0CisgKiAgICAgaW5jb21pbmcgc2lua3BhZCBjYXBzLiBTdWJjbGFzcyBzaG91bGQgc2V0IHRoZSBzcmNwYWQgY2FwcyBhY2NvcmRpbmdseS4KKyAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICBHc3RCYXNlUGFyc2UgY2FsbHMgQHN0YXJ0IHRvIGluZm9ybSBzdWJjbGFzcyB0aGF0IGRhdGEgcHJvY2Vzc2luZyBpcworICogICAgIGFib3V0IHRvIHN0YXJ0IG5vdy4KKyAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICAgQXQgbGVhc3QgYXQgdGhpcyBwb2ludCBzdWJjbGFzcyBuZWVkcyB0byB0ZWxsIHRoZSBHc3RCYXNlUGFyc2UgY2xhc3MKKyAqICAgICAgaG93IGJpZyBkYXRhIGNodW5rcyBpdCB3YW50cyB0byByZWNlaXZlIChtaW5fZnJhbWVfc2l6ZSkuIEl0IGNhbiBkbworICogICAgICB0aGlzIHdpdGggZ3N0X2Jhc2VfcGFyc2Vfc2V0X21pbl9mcmFtZV9zaXplKCkuCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgIEdzdEJhc2VQYXJzZSBjbGFzcyBzZXRzIHVwIGFwcHJvcHJpYXRlIGRhdGEgcGFzc2luZyBtb2RlIChwdWxsL3B1c2gpCisgKiAgICAgIGFuZCBzdGFydHMgdG8gcHJvY2VzcyB0aGUgZGF0YS4KKyAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDwvaXRlbWl6ZWRsaXN0PgorICogPC9saXN0aXRlbT4KKyAqIDxsaXN0aXRlbT4KKyAqICAgPGl0ZW1pemVkbGlzdD4KKyAqICAgPHRpdGxlPlBhcnNpbmcgcGhhc2U8L3RpdGxlPgorICogICAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICAgIEdzdEJhc2VQYXJzZSBnYXRoZXJzIGF0IGxlYXN0IG1pbl9mcmFtZV9zaXplIGJ5dGVzIG9mIGRhdGEgZWl0aGVyCisgKiAgICAgICBieSBwdWxsaW5nIGl0IGZyb20gdXBzdHJlYW0gb3IgY29sbGVjdGluZyBidWZmZXJzIGluIGFuIGludGVybmFsCisgKiAgICAgICAjR3N0QWRhcHRlci4KKyAqICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgICBBIGJ1ZmZlciBvZiAoYXQgbGVhc3QpIG1pbl9mcmFtZV9zaXplIGJ5dGVzIGlzIHBhc3NlZCB0byBzdWJjbGFzcyB3aXRoCisgKiAgICAgICBAY2hlY2tfdmFsaWRfZnJhbWUuIFN1YmNsYXNzIGNoZWNrcyB0aGUgY29udGVudHMgYW5kIHJldHVybnMgVFJVRQorICogICAgICAgaWYgdGhlIGJ1ZmZlciBjb250YWlucyBhIHZhbGlkIGZyYW1lLiBJdCBhbHNvIG5lZWRzIHRvIHNldCB0aGUKKyAqICAgICAgIEBmcmFtZXNpemUgYWNjb3JkaW5nIHRvIHRoZSBkZXRlY3RlZCBmcmFtZSBzaXplLiBJZiBidWZmZXIgZGlkbid0CisgKiAgICAgICBjb250YWluIGEgdmFsaWQgZnJhbWUsIHRoaXMgY2FsbCBtdXN0IHJldHVybiBGQUxTRSBhbmQgb3B0aW9uYWxseQorICogICAgICAgc2V0IHRoZSBAc2tpcHNpemUgdmFsdWUgdG8gaW5mb3JtIGJhc2UgY2xhc3MgdGhhdCBob3cgbWFueSBieXRlcworICogICAgICAgaXQgbmVlZHMgdG8gc2tpcCBpbiBvcmRlciB0byBmaW5kIGEgdmFsaWQgZnJhbWUuIEBmcmFtZXNpemUgY2FuIGFsd2F5cworICogICAgICAgaW5kaWNhdGUgYSBuZXcgbWluaW11bSBmb3IgY3VycmVudCBmcmFtZSBwYXJzaW5nLiAgSW5kaWNhdGluZyBHX01BWFVJTlQKKyAqICAgICAgIGZvciByZXF1ZXN0ZWQgYW1vdW50IG1lYW5zIHN1YmNsYXNzIHNpbXBseSBuZWVkcyBiZXN0IGF2YWlsYWJsZQorICogICAgICAgc3Vic2VxdWVudCBkYXRhLiAgSW4gcHVzaCBtb2RlIHRoaXMgYW1vdW50cyB0byBhbiBhZGRpdGlvbmFsIGlucHV0IGJ1ZmZlcgorICogICAgICAgKHRodXMgbWluaW1hbCBhZGRpdGlvbmFsIGxhdGVuY3kpLCBpbiBwdWxsIG1vZGUgdGhpcyBhbW91bnRzIHRvIHNvbWUKKyAqICAgICAgIGFyYml0cmFyeSByZWFzb25hYmxlIGJ1ZmZlciBzaXplIGluY3JlYXNlLiAgVGhlIHBhc3NlZCBidWZmZXIKKyAqICAgICAgIGlzIHJlYWQtb25seS4gIE5vdGUgdGhhdCBAY2hlY2tfdmFsaWRfZnJhbWUgbWlnaHQgcmVjZWl2ZSBhbnkgc21hbGwKKyAqICAgICAgIGFtb3VudCBvZiBpbnB1dCBkYXRhIHdoZW4gbGVmdG92ZXIgZGF0YSBpcyBiZWluZyBkcmFpbmVkIChlLmcuIGF0IEVPUykuCisgKiAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgICAgQWZ0ZXIgdmFsaWQgZnJhbWUgaXMgZm91bmQsIGl0IHdpbGwgYmUgcGFzc2VkIGFnYWluIHRvIHN1YmNsYXNzIHdpdGgKKyAqICAgICAgIEBwYXJzZV9mcmFtZSBjYWxsLiBOb3cgc3ViY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIHBhcnNpbmcgdGhlCisgKiAgICAgICBmcmFtZSBjb250ZW50cyBhbmQgc2V0dGluZyB0aGUgY2FwcywgYW5kIGJ1ZmZlciBtZXRhZGF0YSAoZS5nLgorICogICAgICAgYnVmZmVyIHRpbWVzdGFtcCBhbmQgZHVyYXRpb24sIG9yIGtleWZyYW1lIGlmIGFwcGxpY2FibGUpLgorICogICAgICAgKGFsdGhvdWdoIHRoZSBsYXR0ZXIgY2FuIGFsc28gYmUgZG9uZSBieSBHc3RCYXNlUGFyc2UgaWYgaXQgaXMKKyAqICAgICAgIGFwcHJvcHJpYXRlbHkgY29uZmlndXJlZCwgc2VlIGJlbG93KS4gIEZyYW1lIGlzIHByb3ZpZGVkIHdpdGgKKyAqICAgICAgIHRpbWVzdGFtcCBkZXJpdmVkIGZyb20gdXBzdHJlYW0gKGFzIG11Y2ggYXMgZ2VuZXJhbGx5IHBvc3NpYmxlKSwKKyAqICAgICAgIGR1cmF0aW9uIG9idGFpbmVkIGZyb20gY29uZmlndXJhdGlvbiAoc2VlIGJlbG93KSwgYW5kIG9mZnNldAorICogICAgICAgaWYgbWVhbmluZ2Z1bCAoaW4gcHVsbCBtb2RlKS4KKyAqICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgICBGaW5hbGx5IHRoZSBidWZmZXIgY2FuIGJlIHB1c2hlZCBkb3duc3RyZWFtIGFuZCB0aGUgcGFyc2luZyBsb29wIHN0YXJ0cworICogICAgICAgb3ZlciBhZ2Fpbi4gIEp1c3QgcHJpb3IgdG8gYWN0dWFsbHkgcHVzaGluZyB0aGUgYnVmZmVyIGluIHF1ZXN0aW9uLAorICogICAgICAgaXQgaXMgcGFzc2VkIHRvIEBwcmVfcHVzaF9idWZmZXIgd2hpY2ggZ2l2ZXMgc3ViY2xhc3MgeWV0IG9uZQorICogICAgICAgbGFzdCBjaGFuY2UgdG8gZXhhbWluZSBidWZmZXIgbWV0YWRhdGEsIG9yIHRvIHNlbmQgc29tZSBjdXN0b20gKHRhZykKKyAqICAgICAgIGV2ZW50cywgb3IgdG8gcGVyZm9ybSBjdXN0b20gKHNlZ21lbnQpIGZpbHRlcmluZy4KKyAqICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgICBEdXJpbmcgdGhlIHBhcnNpbmcgcHJvY2VzcyBHc3RCYXNlUGFyc2VDbGFzcyB3aWxsIGhhbmRsZSBib3RoIHNyY3BhZAorICogICAgICAgYW5kIHNpbmtwYWQgZXZlbnRzLiBUaGV5IHdpbGwgYmUgcGFzc2VkIHRvIHN1YmNsYXNzIGlmIEBldmVudCBvcgorICogICAgICAgQHNyY19ldmVudCBjYWxsYmFja3MgaGF2ZSBiZWVuIHByb3ZpZGVkLgorICogICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogICA8L2l0ZW1pemVkbGlzdD4KKyAqIDwvbGlzdGl0ZW0+CisgKiA8bGlzdGl0ZW0+CisgKiAgIDxpdGVtaXplZGxpc3Q+PHRpdGxlPlNodXRkb3duIHBoYXNlPC90aXRsZT4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgIEdzdEJhc2VQYXJzZSBjbGFzcyBjYWxscyBAc3RvcCB0byBpbmZvcm0gdGhlIHN1YmNsYXNzIHRoYXQgZGF0YQorICogICAgIHBhcnNpbmcgd2lsbCBiZSBzdG9wcGVkLgorICogICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgPC9pdGVtaXplZGxpc3Q+CisgKiA8L2xpc3RpdGVtPgorICogPC9vcmRlcmVkbGlzdD4KKyAqCisgKiBTdWJjbGFzcyBpcyByZXNwb25zaWJsZSBmb3IgcHJvdmlkaW5nIHBhZCB0ZW1wbGF0ZSBjYXBzIGZvcgorICogc291cmNlIGFuZCBzaW5rIHBhZHMuIFRoZSBwYWRzIG5lZWQgdG8gYmUgbmFtZWQgInNpbmsiIGFuZCAic3JjIi4gSXQgYWxzbworICogbmVlZHMgdG8gc2V0IHRoZSBmaXhlZCBjYXBzIG9uIHNyY3BhZCwgd2hlbiB0aGUgZm9ybWF0IGlzIGVuc3VyZWQgKGUuZy4KKyAqIHdoZW4gYmFzZSBjbGFzcyBjYWxscyBzdWJjbGFzcycgQHNldF9zaW5rX2NhcHMgZnVuY3Rpb24pLgorICoKKyAqIFRoaXMgYmFzZSBjbGFzcyB1c2VzICNHU1RfRk9STUFUX0RFRkFVTFQgYXMgYSBtZWFuaW5nIG9mIGZyYW1lcy4gU28sCisgKiBzdWJjbGFzcyBjb252ZXJzaW9uIHJvdXRpbmUgbmVlZHMgdG8ga25vdyB0aGF0IGNvbnZlcnNpb24gZnJvbQorICogI0dTVF9GT1JNQVRfVElNRSB0byAjR1NUX0ZPUk1BVF9ERUZBVUxUIG11c3QgcmV0dXJuIHRoZQorICogZnJhbWUgbnVtYmVyIHRoYXQgY2FuIGJlIGZvdW5kIGZyb20gdGhlIGdpdmVuIGJ5dGUgcG9zaXRpb24uCisgKgorICogR3N0QmFzZVBhcnNlIHVzZXMgc3ViY2xhc3NlcyBjb252ZXJzaW9uIG1ldGhvZHMgYWxzbyBmb3Igc2Vla2luZyAob3IKKyAqIG90aGVyd2lzZSB1c2VzIGl0cyBvd24gZGVmYXVsdCBvbmUsIHNlZSBhbHNvIGJlbG93KS4KKyAqCisgKiBTdWJjbGFzcyBAc3RhcnQgYW5kIEBzdG9wIGZ1bmN0aW9ucyB3aWxsIGJlIGNhbGxlZCB0byBpbmZvcm0gdGhlIGJlZ2lubmluZworICogYW5kIGVuZCBvZiBkYXRhIHByb2Nlc3NpbmcuCisgKgorICogVGhpbmdzIHRoYXQgc3ViY2xhc3MgbmVlZCB0byB0YWtlIGNhcmUgb2Y6CisgKiA8aXRlbWl6ZWRsaXN0PgorICogICA8bGlzdGl0ZW0+PHBhcmE+UHJvdmlkZSBwYWQgdGVtcGxhdGVzPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICAgRml4YXRlIHRoZSBzb3VyY2UgcGFkIGNhcHMgd2hlbiBhcHByb3ByaWF0ZQorICogICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgICBJbmZvcm0gYmFzZSBjbGFzcyBob3cgYmlnIGRhdGEgY2h1bmtzIHNob3VsZCBiZSByZXRyaWV2ZWQuIFRoaXMgaXMKKyAqICAgICAgZG9uZSB3aXRoIGdzdF9iYXNlX3BhcnNlX3NldF9taW5fZnJhbWVfc2l6ZSgpIGZ1bmN0aW9uLgorICogICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgICBFeGFtaW5lIGRhdGEgY2h1bmtzIHBhc3NlZCB0byBzdWJjbGFzcyB3aXRoIEBjaGVja192YWxpZF9mcmFtZQorICogICAgICBhbmQgdGVsbCBpZiB0aGV5IGNvbnRhaW4gYSB2YWxpZCBmcmFtZQorICogICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgICBTZXQgdGhlIGNhcHMgYW5kIHRpbWVzdGFtcCB0byBmcmFtZSB0aGF0IGlzIHBhc3NlZCB0byBzdWJjbGFzcyB3aXRoCisgKiAgICAgIEBwYXJzZV9mcmFtZSBmdW5jdGlvbi4KKyAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT5Qcm92aWRlIGNvbnZlcnNpb24gZnVuY3Rpb25zPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICAgVXBkYXRlIHRoZSBkdXJhdGlvbiBpbmZvcm1hdGlvbiB3aXRoIGdzdF9iYXNlX3BhcnNlX3NldF9kdXJhdGlvbigpCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgIE9wdGlvbmFsbHkgcGFzc3Rocm91Z2ggdXNpbmcgZ3N0X2Jhc2VfcGFyc2Vfc2V0X3Bhc3N0aHJvdWdoKCkKKyAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICAgQ29uZmlndXJlIHZhcmlvdXMgYmFzZXBhcnNlIHBhcmFtZXRlcnMgdXNpbmcKKyAqICAgICAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X2F2ZXJhZ2VfYml0cmF0ZSgpLCBnc3RfYmFzZV9wYXJzZV9zZXRfc3luY2FibGUoKQorICogICAgICBhbmQgZ3N0X2Jhc2VfcGFyc2Vfc2V0X2ZyYW1lX3JhdGUoKS4KKyAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICAgSW4gcGFydGljdWxhciwgaWYgc3ViY2xhc3MgaXMgdW5hYmxlIHRvIGRldGVybWluZSBhIGR1cmF0aW9uLCBidXQKKyAqICAgICAgcGFyc2luZyAob3Igc3BlY3MpIHlpZWxkcyBhIGZyYW1lcyBwZXIgc2Vjb25kcyByYXRlLCB0aGVuIHRoaXMgY2FuIGJlCisgKiAgICAgIHByb3ZpZGVkIHRvIEdzdEJhc2VQYXJzZSB0byBlbmFibGUgaXQgdG8gY2F0ZXIgZm9yCisgKiAgICAgIGJ1ZmZlciB0aW1lIG1ldGFkYXRhICh3aGljaCB3aWxsIGJlIHRha2VuIGZyb20gdXBzdHJlYW0gYXMgbXVjaCBhcworICogICAgICBwb3NzaWJsZSkuIEludGVybmFsbHkga2VlcGluZyB0cmFjayBvZiBmcmFtZSBkdXJhdGlvbnMgYW5kIHJlc3BlY3RpdmUKKyAqICAgICAgc2l6ZXMgdGhhdCBoYXZlIGJlZW4gcHVzaGVkIHByb3ZpZGVzIEdzdEJhc2VQYXJzZSB3aXRoIGFuIGVzdGltYXRlZAorICogICAgICBiaXRyYXRlLiBBIGRlZmF1bHQgQGNvbnZlcnQgKHVzZWQgaWYgbm90IG92ZXJyaWRlbikgd2lsbCB0aGVuIHVzZSB0aGVzZQorICogICAgICByYXRlcyB0byBwZXJmb3JtIG9idmlvdXMgY29udmVyc2lvbnMuICBUaGVzZSByYXRlcyBhcmUgYWxzbyB1c2VkIHRvCisgKiAgICAgIHVwZGF0ZSAoZXN0aW1hdGVkKSBkdXJhdGlvbiBhdCByZWd1bGFyIGZyYW1lIGludGVydmFscy4KKyAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiA8L2l0ZW1pemVkbGlzdD4KKyAqCisgKi8KKworLyogVE9ETzoKKyAqICAtIEluIHB1c2ggbW9kZSBwcm92aWRlIGEgcXVldWUgb2YgYWRhcHRlci0icXVldWVkIiBidWZmZXJzIGZvciB1cHN0cmVhbQorICogICAgYnVmZmVyIG1ldGFkYXRhCisgKiAgLSBRdWV1ZSBidWZmZXJzL2V2ZW50cyB1bnRpbCBjYXBzIGFyZSBzZXQKKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgorCisjaW5jbHVkZSAiZ3N0YmFzZXBhcnNlLmgiCisKKyNkZWZpbmUgR1NUX0JBU0VfUEFSU0VfRlJBTUVfUFJJVkFURV9GTEFHX05PQUxMT0MgICgxIDw8IDApCisKKyNkZWZpbmUgTUlOX0ZSQU1FU19UT19QT1NUX0JJVFJBVEUgMTAKKyNkZWZpbmUgVEFSR0VUX0RJRkZFUkVOQ0UgICAgICAgICAgKDIwICogR1NUX1NFQ09ORCkKKworR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X2Jhc2VfcGFyc2VfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X2Jhc2VfcGFyc2VfZGVidWcKKworLyogU3VwcG9ydGVkIGZvcm1hdHMgKi8KK3N0YXRpYyBjb25zdCBHc3RGb3JtYXQgZm10bGlzdFtdID0geworICBHU1RfRk9STUFUX0RFRkFVTFQsCisgIEdTVF9GT1JNQVRfQllURVMsCisgIEdTVF9GT1JNQVRfVElNRSwKKyAgR1NUX0ZPUk1BVF9VTkRFRklORUQKK307CisKKyNkZWZpbmUgR1NUX0JBU0VfUEFSU0VfR0VUX1BSSVZBVEUob2JqKSAgXAorICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKChvYmopLCBHU1RfVFlQRV9CQVNFX1BBUlNFLCBHc3RCYXNlUGFyc2VQcml2YXRlKSkKKworc3RydWN0IF9Hc3RCYXNlUGFyc2VQcml2YXRlCit7CisgIEdzdEFjdGl2YXRlTW9kZSBwYWRfbW9kZTsKKworICBHc3RBZGFwdGVyICphZGFwdGVyOworCisgIGdpbnQ2NCBkdXJhdGlvbjsKKyAgR3N0Rm9ybWF0IGR1cmF0aW9uX2ZtdDsKKyAgZ2ludDY0IGVzdGltYXRlZF9kdXJhdGlvbjsKKworICBndWludCBtaW5fZnJhbWVfc2l6ZTsKKyAgZ2Jvb2xlYW4gcGFzc3Rocm91Z2g7CisgIGdib29sZWFuIHN5bmNhYmxlOworICBnYm9vbGVhbiBoYXNfdGltaW5nX2luZm87CisgIGd1aW50IGZwc19udW0sIGZwc19kZW47CisgIGdpbnQgdXBkYXRlX2ludGVydmFsOworICBndWludCBiaXRyYXRlOworICBndWludCBsZWFkX2luLCBsZWFkX291dDsKKyAgR3N0Q2xvY2tUaW1lIGxlYWRfaW5fdHMsIGxlYWRfb3V0X3RzOworICBHc3RDbG9ja1RpbWUgbWluX2xhdGVuY3ksIG1heF9sYXRlbmN5OworCisgIGdib29sZWFuIGRpc2NvbnQ7CisgIGdib29sZWFuIGZsdXNoaW5nOworICBnYm9vbGVhbiBkcmFpbjsKKworICBnaW50NjQgb2Zmc2V0OworICBnaW50NjQgc3luY19vZmZzZXQ7CisgIEdzdENsb2NrVGltZSBuZXh0X3RzOworICBHc3RDbG9ja1RpbWUgcHJldl90czsKKyAgR3N0Q2xvY2tUaW1lIGZyYW1lX2R1cmF0aW9uOworICBnYm9vbGVhbiBzZWVuX2tleWZyYW1lOworICBnYm9vbGVhbiBpc192aWRlbzsKKworICBndWludDY0IGZyYW1lY291bnQ7CisgIGd1aW50NjQgYnl0ZWNvdW50OworICBndWludDY0IGRhdGFfYnl0ZWNvdW50OworICBndWludDY0IGFjY19kdXJhdGlvbjsKKyAgR3N0Q2xvY2tUaW1lIGZpcnN0X2ZyYW1lX3RzOworICBnaW50NjQgZmlyc3RfZnJhbWVfb2Zmc2V0OworCisgIGdib29sZWFuIHBvc3RfbWluX2JpdHJhdGU7CisgIGdib29sZWFuIHBvc3RfYXZnX2JpdHJhdGU7CisgIGdib29sZWFuIHBvc3RfbWF4X2JpdHJhdGU7CisgIGd1aW50IG1pbl9iaXRyYXRlOworICBndWludCBhdmdfYml0cmF0ZTsKKyAgZ3VpbnQgbWF4X2JpdHJhdGU7CisgIGd1aW50IHBvc3RlZF9hdmdfYml0cmF0ZTsKKworICBHTGlzdCAqcGVuZGluZ19ldmVudHM7CisKKyAgLyogZnJhbWVzL2J1ZmZlcnMgdGhhdCBhcmUgcXVldWVkIGFuZCByZWFkeSB0byBnbyBvbiBPSyAqLworICBHUXVldWUgcXVldWVkX2ZyYW1lczsKKworICBHc3RCdWZmZXIgKmNhY2hlOworCisgIC8qIGluZGV4IGVudHJ5IHN0b3JhZ2UsIGVpdGhlciBvdXJzIG9yIHByb3ZpZGVkICovCisgIEdzdEluZGV4ICppbmRleDsKKyAgZ2ludCBpbmRleF9pZDsKKyAgZ2Jvb2xlYW4gb3duX2luZGV4OworICBHU3RhdGljTXV0ZXggaW5kZXhfbG9jazsKKworICAvKiBzZWVrIHRhYmxlIGVudHJpZXMgb25seSBtYWludGFpbmVkIGlmIHVwc3RyZWFtIGlzIEJZVEUgc2Vla2FibGUgKi8KKyAgZ2Jvb2xlYW4gdXBzdHJlYW1fc2Vla2FibGU7CisgIGdib29sZWFuIHVwc3RyZWFtX2hhc19kdXJhdGlvbjsKKyAgZ2ludDY0IHVwc3RyZWFtX3NpemU7CisgIC8qIG1pbmltdW0gZGlzdGFuY2UgYmV0d2VlbiB0d28gaW5kZXggZW50cmllcyAqLworICBHc3RDbG9ja1RpbWVEaWZmIGlkeF9pbnRlcnZhbDsKKyAgLyogdHMgYW5kIG9mZnNldCBvZiBsYXN0IGVudHJ5IGFkZGVkICovCisgIEdzdENsb2NrVGltZSBpbmRleF9sYXN0X3RzOworICBnaW50NjQgaW5kZXhfbGFzdF9vZmZzZXQ7CisgIGdib29sZWFuIGluZGV4X2xhc3RfdmFsaWQ7CisKKyAgLyogdGltZXN0YW1wcyBjdXJyZW50bHkgcHJvZHVjZWQgYXJlIGFjY3VyYXRlLCBlLmcuIHN0YXJ0ZWQgZnJvbSAwIG9ud2FyZHMgKi8KKyAgZ2Jvb2xlYW4gZXhhY3RfcG9zaXRpb247CisgIC8qIHNlZWsgZXZlbnRzIGFyZSB0ZW1wb3JhcmlseSBrZXB0IHRvIG1hdGNoIHRoZW0gd2l0aCBuZXdzZWdtZW50cyAqLworICBHU0xpc3QgKnBlbmRpbmdfc2Vla3M7CisKKyAgLyogcmV2ZXJzZSBwbGF5YmFjayAqLworICBHU0xpc3QgKmJ1ZmZlcnNfcGVuZGluZzsKKyAgR1NMaXN0ICpidWZmZXJzX3F1ZXVlZDsKKyAgR1NMaXN0ICpidWZmZXJzX3NlbmQ7CisgIEdzdENsb2NrVGltZSBsYXN0X3RzOworICBnaW50NjQgbGFzdF9vZmZzZXQ7CisKKyAgLyogTmV3c2VnbWVudCBldmVudCB0byBiZSBzZW50IGFmdGVyIFNFRUsgKi8KKyAgR3N0RXZlbnQgKnBlbmRpbmdfc2VnbWVudDsKKworICAvKiBTZWdtZW50IGV2ZW50IHRoYXQgY2xvc2VzIHRoZSBydW5uaW5nIHNlZ21lbnQgcHJpb3IgdG8gU0VFSyAqLworICBHc3RFdmVudCAqY2xvc2Vfc2VnbWVudDsKKworICAvKiBwdXNoIG1vZGUgaGVscGVyIGZyYW1lICovCisgIEdzdEJhc2VQYXJzZUZyYW1lIGZyYW1lOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdEJhc2VQYXJzZVNlZWsKK3sKKyAgR3N0U2VnbWVudCBzZWdtZW50OworICBnYm9vbGVhbiBhY2N1cmF0ZTsKKyAgZ2ludDY0IG9mZnNldDsKKyAgR3N0Q2xvY2tUaW1lIHN0YXJ0X3RzOworfSBHc3RCYXNlUGFyc2VTZWVrOworCitzdGF0aWMgR3N0RWxlbWVudENsYXNzICpwYXJlbnRfY2xhc3MgPSBOVUxMOworCitzdGF0aWMgdm9pZCBnc3RfYmFzZV9wYXJzZV9jbGFzc19pbml0IChHc3RCYXNlUGFyc2VDbGFzcyAqIGtsYXNzKTsKK3N0YXRpYyB2b2lkIGdzdF9iYXNlX3BhcnNlX2luaXQgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAorICAgIEdzdEJhc2VQYXJzZUNsYXNzICoga2xhc3MpOworCitHVHlwZQorZ3N0X2Jhc2VfcGFyc2VfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyB2b2xhdGlsZSBnc2l6ZSBiYXNlX3BhcnNlX3R5cGUgPSAwOworCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmJhc2VfcGFyc2VfdHlwZSkpIHsKKyAgICBzdGF0aWMgY29uc3QgR1R5cGVJbmZvIGJhc2VfcGFyc2VfaW5mbyA9IHsKKyAgICAgIHNpemVvZiAoR3N0QmFzZVBhcnNlQ2xhc3MpLAorICAgICAgKEdCYXNlSW5pdEZ1bmMpIE5VTEwsCisgICAgICAoR0Jhc2VGaW5hbGl6ZUZ1bmMpIE5VTEwsCisgICAgICAoR0NsYXNzSW5pdEZ1bmMpIGdzdF9iYXNlX3BhcnNlX2NsYXNzX2luaXQsCisgICAgICBOVUxMLAorICAgICAgTlVMTCwKKyAgICAgIHNpemVvZiAoR3N0QmFzZVBhcnNlKSwKKyAgICAgIDAsCisgICAgICAoR0luc3RhbmNlSW5pdEZ1bmMpIGdzdF9iYXNlX3BhcnNlX2luaXQsCisgICAgfTsKKyAgICBHVHlwZSBfdHlwZTsKKworICAgIF90eXBlID0gZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RZUEVfRUxFTUVOVCwKKyAgICAgICAgIkdzdEJhc2VQYXJzZSIsICZiYXNlX3BhcnNlX2luZm8sIEdfVFlQRV9GTEFHX0FCU1RSQUNUKTsKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmJhc2VfcGFyc2VfdHlwZSwgX3R5cGUpOworICB9CisgIHJldHVybiAoR1R5cGUpIGJhc2VfcGFyc2VfdHlwZTsKK30KKworc3RhdGljIHZvaWQgZ3N0X2Jhc2VfcGFyc2VfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOworCitzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X2Jhc2VfcGFyc2VfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKKyAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKK3N0YXRpYyB2b2lkIGdzdF9iYXNlX3BhcnNlX3Jlc2V0IChHc3RCYXNlUGFyc2UgKiBwYXJzZSk7CisKK3N0YXRpYyB2b2lkIGdzdF9iYXNlX3BhcnNlX3NldF9pbmRleCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEluZGV4ICogaW5kZXgpOworc3RhdGljIEdzdEluZGV4ICpnc3RfYmFzZV9wYXJzZV9nZXRfaW5kZXggKEdzdEVsZW1lbnQgKiBlbGVtZW50KTsKKworc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3BhcnNlX3NpbmtfYWN0aXZhdGUgKEdzdFBhZCAqIHNpbmtwYWQpOworc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3BhcnNlX3NpbmtfYWN0aXZhdGVfcHVzaCAoR3N0UGFkICogcGFkLAorICAgIGdib29sZWFuIGFjdGl2ZSk7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2VfcGFyc2Vfc2lua19hY3RpdmF0ZV9wdWxsIChHc3RQYWQgKiBwYWQsCisgICAgZ2Jvb2xlYW4gYWN0aXZlKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9wYXJzZV9oYW5kbGVfc2VlayAoR3N0QmFzZVBhcnNlICogcGFyc2UsCisgICAgR3N0RXZlbnQgKiBldmVudCk7CitzdGF0aWMgdm9pZCBnc3RfYmFzZV9wYXJzZV9oYW5kbGVfdGFnIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgR3N0RXZlbnQgKiBldmVudCk7CisKK3N0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9wYXJzZV9zcmNfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiBldmVudCk7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2VfcGFyc2Vfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9wYXJzZV9xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RRdWVyeSAqIHF1ZXJ5KTsKK3N0YXRpYyBjb25zdCBHc3RRdWVyeVR5cGUgKmdzdF9iYXNlX3BhcnNlX2dldF9xdWVyeXR5cGVzIChHc3RQYWQgKiBwYWQpOworCitzdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfYmFzZV9wYXJzZV9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RCdWZmZXIgKiBidWZmZXIpOworc3RhdGljIHZvaWQgZ3N0X2Jhc2VfcGFyc2VfbG9vcCAoR3N0UGFkICogcGFkKTsKKworc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3BhcnNlX2NoZWNrX2ZyYW1lIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKKyAgICBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lLCBndWludCAqIGZyYW1lc2l6ZSwgZ2ludCAqIHNraXBzaXplKTsKK3N0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9iYXNlX3BhcnNlX3BhcnNlX2ZyYW1lIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKKyAgICBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lKTsKKworc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3BhcnNlX3NpbmtfZXZlbnRmdW5jIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKKyAgICBHc3RFdmVudCAqIGV2ZW50KTsKKworc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3BhcnNlX3NyY19ldmVudGZ1bmMgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAorICAgIEdzdEV2ZW50ICogZXZlbnQpOworCitzdGF0aWMgdm9pZCBnc3RfYmFzZV9wYXJzZV9kcmFpbiAoR3N0QmFzZVBhcnNlICogcGFyc2UpOworCitzdGF0aWMgdm9pZCBnc3RfYmFzZV9wYXJzZV9wb3N0X2JpdHJhdGVzIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKKyAgICBnYm9vbGVhbiBwb3N0X21pbiwgZ2Jvb2xlYW4gcG9zdF9hdmcsIGdib29sZWFuIHBvc3RfbWF4KTsKKworc3RhdGljIGdpbnQ2NCBnc3RfYmFzZV9wYXJzZV9maW5kX29mZnNldCAoR3N0QmFzZVBhcnNlICogcGFyc2UsCisgICAgR3N0Q2xvY2tUaW1lIHRpbWUsIGdib29sZWFuIGJlZm9yZSwgR3N0Q2xvY2tUaW1lICogX3RzKTsKK3N0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9iYXNlX3BhcnNlX2xvY2F0ZV90aW1lIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKKyAgICBHc3RDbG9ja1RpbWUgKiBfdGltZSwgZ2ludDY0ICogX29mZnNldCk7CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9iYXNlX3BhcnNlX3Byb2Nlc3NfZnJhZ21lbnQgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAorICAgIGdib29sZWFuIHB1c2hfb25seSk7CisKK3N0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9wYXJzZV9pc19zZWVrYWJsZSAoR3N0QmFzZVBhcnNlICogcGFyc2UpOworCitzdGF0aWMgdm9pZAorZ3N0X2Jhc2VfcGFyc2VfY2xlYXJfcXVldWVzIChHc3RCYXNlUGFyc2UgKiBwYXJzZSkKK3sKKyAgZ19zbGlzdF9mb3JlYWNoIChwYXJzZS0+cHJpdi0+YnVmZmVyc19xdWV1ZWQsIChHRnVuYykgZ3N0X2J1ZmZlcl91bnJlZiwgTlVMTCk7CisgIGdfc2xpc3RfZnJlZSAocGFyc2UtPnByaXYtPmJ1ZmZlcnNfcXVldWVkKTsKKyAgcGFyc2UtPnByaXYtPmJ1ZmZlcnNfcXVldWVkID0gTlVMTDsKKyAgZ19zbGlzdF9mb3JlYWNoIChwYXJzZS0+cHJpdi0+YnVmZmVyc19wZW5kaW5nLCAoR0Z1bmMpIGdzdF9idWZmZXJfdW5yZWYsCisgICAgICBOVUxMKTsKKyAgZ19zbGlzdF9mcmVlIChwYXJzZS0+cHJpdi0+YnVmZmVyc19wZW5kaW5nKTsKKyAgcGFyc2UtPnByaXYtPmJ1ZmZlcnNfcGVuZGluZyA9IE5VTEw7CisgIGdfc2xpc3RfZm9yZWFjaCAocGFyc2UtPnByaXYtPmJ1ZmZlcnNfc2VuZCwgKEdGdW5jKSBnc3RfYnVmZmVyX3VucmVmLCBOVUxMKTsKKyAgZ19zbGlzdF9mcmVlIChwYXJzZS0+cHJpdi0+YnVmZmVyc19zZW5kKTsKKyAgcGFyc2UtPnByaXYtPmJ1ZmZlcnNfc2VuZCA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfYmFzZV9wYXJzZV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKK3sKKyAgR3N0QmFzZVBhcnNlICpwYXJzZSA9IEdTVF9CQVNFX1BBUlNFIChvYmplY3QpOworICBHc3RFdmVudCAqKnBfZXY7CisKKyAgZ19vYmplY3RfdW5yZWYgKHBhcnNlLT5wcml2LT5hZGFwdGVyKTsKKworICBpZiAocGFyc2UtPnByaXYtPnBlbmRpbmdfc2VnbWVudCkgeworICAgIHBfZXYgPSAmcGFyc2UtPnByaXYtPnBlbmRpbmdfc2VnbWVudDsKKyAgICBnc3RfZXZlbnRfcmVwbGFjZSAocF9ldiwgTlVMTCk7CisgIH0KKyAgaWYgKHBhcnNlLT5wcml2LT5jbG9zZV9zZWdtZW50KSB7CisgICAgcF9ldiA9ICZwYXJzZS0+cHJpdi0+Y2xvc2Vfc2VnbWVudDsKKyAgICBnc3RfZXZlbnRfcmVwbGFjZSAocF9ldiwgTlVMTCk7CisgIH0KKworICBpZiAocGFyc2UtPnByaXYtPmNhY2hlKSB7CisgICAgZ3N0X2J1ZmZlcl91bnJlZiAocGFyc2UtPnByaXYtPmNhY2hlKTsKKyAgICBwYXJzZS0+cHJpdi0+Y2FjaGUgPSBOVUxMOworICB9CisKKyAgZ19saXN0X2ZvcmVhY2ggKHBhcnNlLT5wcml2LT5wZW5kaW5nX2V2ZW50cywgKEdGdW5jKSBnc3RfbWluaV9vYmplY3RfdW5yZWYsCisgICAgICBOVUxMKTsKKyAgZ19saXN0X2ZyZWUgKHBhcnNlLT5wcml2LT5wZW5kaW5nX2V2ZW50cyk7CisgIHBhcnNlLT5wcml2LT5wZW5kaW5nX2V2ZW50cyA9IE5VTEw7CisKKyAgZ19xdWV1ZV9mb3JlYWNoICgmcGFyc2UtPnByaXYtPnF1ZXVlZF9mcmFtZXMsCisgICAgICAoR0Z1bmMpIGdzdF9iYXNlX3BhcnNlX2ZyYW1lX2ZyZWUsIE5VTEwpOworICBnX3F1ZXVlX2NsZWFyICgmcGFyc2UtPnByaXYtPnF1ZXVlZF9mcmFtZXMpOworCisgIGlmIChwYXJzZS0+cHJpdi0+aW5kZXgpIHsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChwYXJzZS0+cHJpdi0+aW5kZXgpOworICAgIHBhcnNlLT5wcml2LT5pbmRleCA9IE5VTEw7CisgIH0KKworICBnX3N0YXRpY19tdXRleF9mcmVlICgmcGFyc2UtPnByaXYtPmluZGV4X2xvY2spOworCisgIGdzdF9iYXNlX3BhcnNlX2NsZWFyX3F1ZXVlcyAocGFyc2UpOworCisgIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9iYXNlX3BhcnNlX2NsYXNzX2luaXQgKEdzdEJhc2VQYXJzZUNsYXNzICoga2xhc3MpCit7CisgIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKKyAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOworCisgIGdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOworICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKGtsYXNzLCBzaXplb2YgKEdzdEJhc2VQYXJzZVByaXZhdGUpKTsKKyAgcGFyZW50X2NsYXNzID0gZ190eXBlX2NsYXNzX3BlZWtfcGFyZW50IChrbGFzcyk7CisgIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3BhcnNlX2ZpbmFsaXplKTsKKworICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKKyAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0KKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmFzZV9wYXJzZV9jaGFuZ2Vfc3RhdGUpOworICBnc3RlbGVtZW50X2NsYXNzLT5zZXRfaW5kZXggPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2VfcGFyc2Vfc2V0X2luZGV4KTsKKyAgZ3N0ZWxlbWVudF9jbGFzcy0+Z2V0X2luZGV4ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3BhcnNlX2dldF9pbmRleCk7CisKKyAgLyogRGVmYXVsdCBoYW5kbGVycyAqLworICBrbGFzcy0+Y2hlY2tfdmFsaWRfZnJhbWUgPSBnc3RfYmFzZV9wYXJzZV9jaGVja19mcmFtZTsKKyAga2xhc3MtPnBhcnNlX2ZyYW1lID0gZ3N0X2Jhc2VfcGFyc2VfcGFyc2VfZnJhbWU7CisgIGtsYXNzLT5zcmNfZXZlbnQgPSBnc3RfYmFzZV9wYXJzZV9zcmNfZXZlbnRmdW5jOworICBrbGFzcy0+Y29udmVydCA9IGdzdF9iYXNlX3BhcnNlX2NvbnZlcnRfZGVmYXVsdDsKKworICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X2Jhc2VfcGFyc2VfZGVidWcsICJiYXNlcGFyc2UiLCAwLAorICAgICAgImJhc2VwYXJzZSBlbGVtZW50Iik7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfYmFzZV9wYXJzZV9pbml0IChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgR3N0QmFzZVBhcnNlQ2xhc3MgKiBiY2xhc3MpCit7CisgIEdzdFBhZFRlbXBsYXRlICpwYWRfdGVtcGxhdGU7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJnc3RfYmFzZV9wYXJzZV9pbml0Iik7CisKKyAgcGFyc2UtPnByaXYgPSBHU1RfQkFTRV9QQVJTRV9HRVRfUFJJVkFURSAocGFyc2UpOworCisgIHBhZF90ZW1wbGF0ZSA9CisgICAgICBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChHU1RfRUxFTUVOVF9DTEFTUyAoYmNsYXNzKSwgInNpbmsiKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAocGFkX3RlbXBsYXRlICE9IE5VTEwpOworICBwYXJzZS0+c2lua3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHBhZF90ZW1wbGF0ZSwgInNpbmsiKTsKKyAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHBhcnNlLT5zaW5rcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3BhcnNlX3NpbmtfZXZlbnQpKTsKKyAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHBhcnNlLT5zaW5rcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3BhcnNlX2NoYWluKSk7CisgIGdzdF9wYWRfc2V0X2FjdGl2YXRlX2Z1bmN0aW9uIChwYXJzZS0+c2lua3BhZCwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmFzZV9wYXJzZV9zaW5rX2FjdGl2YXRlKSk7CisgIGdzdF9wYWRfc2V0X2FjdGl2YXRlcHVzaF9mdW5jdGlvbiAocGFyc2UtPnNpbmtwYWQsCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2VfcGFyc2Vfc2lua19hY3RpdmF0ZV9wdXNoKSk7CisgIGdzdF9wYWRfc2V0X2FjdGl2YXRlcHVsbF9mdW5jdGlvbiAocGFyc2UtPnNpbmtwYWQsCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2VfcGFyc2Vfc2lua19hY3RpdmF0ZV9wdWxsKSk7CisgIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChwYXJzZSksIHBhcnNlLT5zaW5rcGFkKTsKKworICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInNpbmtwYWQgY3JlYXRlZCIpOworCisgIHBhZF90ZW1wbGF0ZSA9CisgICAgICBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChHU1RfRUxFTUVOVF9DTEFTUyAoYmNsYXNzKSwgInNyYyIpOworICBnX3JldHVybl9pZl9mYWlsIChwYWRfdGVtcGxhdGUgIT0gTlVMTCk7CisgIHBhcnNlLT5zcmNwYWQgPSBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlIChwYWRfdGVtcGxhdGUsICJzcmMiKTsKKyAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHBhcnNlLT5zcmNwYWQsCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2VfcGFyc2Vfc3JjX2V2ZW50KSk7CisgIGdzdF9wYWRfc2V0X3F1ZXJ5X3R5cGVfZnVuY3Rpb24gKHBhcnNlLT5zcmNwYWQsCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2VfcGFyc2VfZ2V0X3F1ZXJ5dHlwZXMpKTsKKyAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKHBhcnNlLT5zcmNwYWQsCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2VfcGFyc2VfcXVlcnkpKTsKKyAgZ3N0X3BhZF91c2VfZml4ZWRfY2FwcyAocGFyc2UtPnNyY3BhZCk7CisgIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChwYXJzZSksIHBhcnNlLT5zcmNwYWQpOworICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInNyYyBjcmVhdGVkIik7CisKKyAgZ19xdWV1ZV9pbml0ICgmcGFyc2UtPnByaXYtPnF1ZXVlZF9mcmFtZXMpOworCisgIHBhcnNlLT5wcml2LT5hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOworCisgIHBhcnNlLT5wcml2LT5wYWRfbW9kZSA9IEdTVF9BQ1RJVkFURV9OT05FOworCisgIGdfc3RhdGljX211dGV4X2luaXQgKCZwYXJzZS0+cHJpdi0+aW5kZXhfbG9jayk7CisKKyAgLyogaW5pdCBzdGF0ZSAqLworICBnc3RfYmFzZV9wYXJzZV9yZXNldCAocGFyc2UpOworICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImluaXQgb2siKTsKK30KKworc3RhdGljIEdzdEJhc2VQYXJzZUZyYW1lICoKK2dzdF9iYXNlX3BhcnNlX2ZyYW1lX2NvcHkgKEdzdEJhc2VQYXJzZUZyYW1lICogZnJhbWUpCit7CisgIEdzdEJhc2VQYXJzZUZyYW1lICpjb3B5OworCisgIGNvcHkgPSBnX3NsaWNlX2R1cCAoR3N0QmFzZVBhcnNlRnJhbWUsIGZyYW1lKTsKKyAgY29weS0+YnVmZmVyID0gZ3N0X2J1ZmZlcl9yZWYgKGZyYW1lLT5idWZmZXIpOworICBjb3B5LT5fcHJpdmF0ZV9mbGFncyAmPSB+R1NUX0JBU0VfUEFSU0VfRlJBTUVfUFJJVkFURV9GTEFHX05PQUxMT0M7CisKKyAgR1NUX1RSQUNFICgiY29waWVkIGZyYW1lICVwIC0+ICVwIiwgZnJhbWUsIGNvcHkpOworCisgIHJldHVybiBjb3B5OworfQorCit2b2lkCitnc3RfYmFzZV9wYXJzZV9mcmFtZV9mcmVlIChHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lKQoreworICBHU1RfVFJBQ0UgKCJmcmVlaW5nIGZyYW1lICVwIiwgZnJhbWUpOworCisgIGlmIChmcmFtZS0+YnVmZmVyKSB7CisgICAgZ3N0X2J1ZmZlcl91bnJlZiAoZnJhbWUtPmJ1ZmZlcik7CisgICAgZnJhbWUtPmJ1ZmZlciA9IE5VTEw7CisgIH0KKworICBpZiAoIShmcmFtZS0+X3ByaXZhdGVfZmxhZ3MgJiBHU1RfQkFTRV9QQVJTRV9GUkFNRV9QUklWQVRFX0ZMQUdfTk9BTExPQykpIHsKKyAgICBnX3NsaWNlX2ZyZWUgKEdzdEJhc2VQYXJzZUZyYW1lLCBmcmFtZSk7CisgIH0gZWxzZSB7CisgICAgbWVtc2V0IChmcmFtZSwgMCwgc2l6ZW9mICgqZnJhbWUpKTsKKyAgfQorfQorCitHVHlwZQorZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyB2b2xhdGlsZSBnc2l6ZSBmcmFtZV90eXBlID0gMDsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZmcmFtZV90eXBlKSkgeworICAgIEdUeXBlIF90eXBlOworCisgICAgX3R5cGUgPSBnX2JveGVkX3R5cGVfcmVnaXN0ZXJfc3RhdGljICgiR3N0QmFzZVBhcnNlRnJhbWUiLAorICAgICAgICAoR0JveGVkQ29weUZ1bmMpIGdzdF9iYXNlX3BhcnNlX2ZyYW1lX2NvcHksCisgICAgICAgIChHQm94ZWRGcmVlRnVuYykgZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfZnJlZSk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZmcmFtZV90eXBlLCBfdHlwZSk7CisgIH0KKyAgcmV0dXJuIChHVHlwZSkgZnJhbWVfdHlwZTsKK30KKworLyoqCisgKiBnc3RfYmFzZV9wYXJzZV9mcmFtZV9pbml0OgorICogQGZyYW1lOiAjR3N0QmFzZVBhcnNlRnJhbWUuCisgKgorICogU2V0cyBhICNHc3RCYXNlUGFyc2VGcmFtZSB0byBpbml0aWFsIHN0YXRlLiAgQ3VycmVudGx5IHRoaXMgbWVhbnMKKyAqIGFsbCBwdWJsaWMgZmllbGRzIGFyZSB6ZXJvLWVkIGFuZCBhIHByaXZhdGUgZmxhZyBpcyBzZXQgdG8gbWFrZQorICogc3VyZSBnc3RfYmFzZV9wYXJzZV9mcmFtZV9mcmVlKCkgb25seSBmcmVlcyB0aGUgY29udGVudHMgYnV0IG5vdAorICogdGhlIGFjdHVhbCBmcmFtZS4gVXNlIHRoaXMgZnVuY3Rpb24gdG8gaW5pdGlhbGlzZSBhICNHc3RCYXNlUGFyc2VGcmFtZQorICogYWxsb2NhdGVkIG9uIHRoZSBzdGFjay4KKyAqCisgKiBTaW5jZTogMC4xMC4zMworICovCit2b2lkCitnc3RfYmFzZV9wYXJzZV9mcmFtZV9pbml0IChHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lKQoreworICBtZW1zZXQgKGZyYW1lLCAwLCBzaXplb2YgKEdzdEJhc2VQYXJzZUZyYW1lKSk7CisgIGZyYW1lLT5fcHJpdmF0ZV9mbGFncyA9IEdTVF9CQVNFX1BBUlNFX0ZSQU1FX1BSSVZBVEVfRkxBR19OT0FMTE9DOworICBHU1RfVFJBQ0UgKCJpbml0ZWQgZnJhbWUgJXAiLCBmcmFtZSk7Cit9CisKKy8qKgorICogZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfbmV3OgorICogQGJ1ZmZlcjogKHRyYW5zZmVyIG5vbmUpOiBhICNHc3RCdWZmZXIKKyAqIEBmbGFnczogdGhlIGZsYWdzCisgKiBAb3ZlcmhlYWQ6IG51bWJlciBvZiBieXRlcyBpbiB0aGlzIGZyYW1lIHdoaWNoIHNob3VsZCBiZSBjb3VudGVkIGFzCisgKiAgICAgbWV0YWRhdGEgb3ZlcmhlYWQsIGllLiBub3QgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGF2ZXJhZ2UgYml0cmF0ZS4KKyAqICAgICBTZXQgdG8gLTEgdG8gbWFyayB0aGUgZW50aXJlIGZyYW1lIGFzIG1ldGFkYXRhLiBJZiBpbiBkb3VidCwgc2V0IHRvIDAuCisgKgorICogQWxsb2NhdGVzIGEgbmV3ICNHc3RCYXNlUGFyc2VGcmFtZS4gVGhpcyBmdW5jdGlvbiBpcyBtYWlubHkgZm9yIGJpbmRpbmdzLAorICogZWxlbWVudHMgd3JpdHRlbiBpbiBDIHNob3VsZCB1c3VhbGx5IGFsbG9jYXRlIHRoZSBmcmFtZSBvbiB0aGUgc3RhY2sgYW5kCisgKiB0aGVuIHVzZSBnc3RfYmFzZV9wYXJzZV9mcmFtZV9pbml0KCkgdG8gaW5pdGlhbGlzZSBpdC4KKyAqCisgKiBSZXR1cm5zOiBhIG5ld2x5LWFsbG9jYXRlZCAjR3N0QmFzZVBhcnNlRnJhbWUuIEZyZWUgd2l0aAorICogICAgIGdzdF9iYXNlX3BhcnNlX2ZyYW1lX2ZyZWUoKSB3aGVuIG5vIGxvbmdlciBuZWVkZWQsIHVubGVzcyB5b3UgZ2F2ZQorICogICAgIGF3YXkgb3duZXJzaGlwIHRvIGdzdF9iYXNlX3BhcnNlX3B1c2hfZnJhbWUoKS4KKyAqCisgKiBTaW5jZTogMC4xMC4zMworICovCitHc3RCYXNlUGFyc2VGcmFtZSAqCitnc3RfYmFzZV9wYXJzZV9mcmFtZV9uZXcgKEdzdEJ1ZmZlciAqIGJ1ZmZlciwgR3N0QmFzZVBhcnNlRnJhbWVGbGFncyBmbGFncywKKyAgICBnaW50IG92ZXJoZWFkKQoreworICBHc3RCYXNlUGFyc2VGcmFtZSAqZnJhbWU7CisKKyAgZnJhbWUgPSBnX3NsaWNlX25ldzAgKEdzdEJhc2VQYXJzZUZyYW1lKTsKKyAgZnJhbWUtPmJ1ZmZlciA9IGdzdF9idWZmZXJfcmVmIChidWZmZXIpOworCisgIEdTVF9UUkFDRSAoImNyZWF0ZWQgZnJhbWUgJXAiLCBmcmFtZSk7CisgIHJldHVybiBmcmFtZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitnc3RfYmFzZV9wYXJzZV9mcmFtZV91cGRhdGUgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lLAorICAgIEdzdEJ1ZmZlciAqIGJ1ZikKK3sKKyAgZ3N0X2J1ZmZlcl9yZXBsYWNlICgmZnJhbWUtPmJ1ZmZlciwgYnVmKTsKKworICBwYXJzZS0+ZmxhZ3MgPSAwOworCisgIC8qIHNldCBmbGFncyBvbmUgYnkgb25lIGZvciBjbGFyaXR5ICovCisgIGlmIChHX1VOTElLRUxZIChwYXJzZS0+cHJpdi0+ZHJhaW4pKQorICAgIHBhcnNlLT5mbGFncyB8PSBHU1RfQkFTRV9QQVJTRV9GTEFHX0RSQUlOSU5HOworCisgIC8qIGxvc2luZyBzeW5jIGlzIHByZXR0eSBtdWNoIGEgZGlzY29udCAoYW5kIHZpY2UgdmVyc2EpLCBubyA/ICovCisgIGlmIChHX1VOTElLRUxZIChwYXJzZS0+cHJpdi0+ZGlzY29udCkpCisgICAgcGFyc2UtPmZsYWdzIHw9IEdTVF9CQVNFX1BBUlNFX0ZMQUdfTE9TVF9TWU5DOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2Jhc2VfcGFyc2VfcmVzZXQgKEdzdEJhc2VQYXJzZSAqIHBhcnNlKQoreworICBHU1RfT0JKRUNUX0xPQ0sgKHBhcnNlKTsKKyAgZ3N0X3NlZ21lbnRfaW5pdCAoJnBhcnNlLT5zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOworICBwYXJzZS0+cHJpdi0+ZHVyYXRpb24gPSAtMTsKKyAgcGFyc2UtPnByaXYtPm1pbl9mcmFtZV9zaXplID0gMTsKKyAgcGFyc2UtPnByaXYtPmRpc2NvbnQgPSBUUlVFOworICBwYXJzZS0+cHJpdi0+Zmx1c2hpbmcgPSBGQUxTRTsKKyAgcGFyc2UtPnByaXYtPm9mZnNldCA9IDA7CisgIHBhcnNlLT5wcml2LT5zeW5jX29mZnNldCA9IDA7CisgIHBhcnNlLT5wcml2LT51cGRhdGVfaW50ZXJ2YWwgPSAtMTsKKyAgcGFyc2UtPnByaXYtPmZwc19udW0gPSBwYXJzZS0+cHJpdi0+ZnBzX2RlbiA9IDA7CisgIHBhcnNlLT5wcml2LT5mcmFtZV9kdXJhdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgIHBhcnNlLT5wcml2LT5sZWFkX2luID0gcGFyc2UtPnByaXYtPmxlYWRfb3V0ID0gMDsKKyAgcGFyc2UtPnByaXYtPmxlYWRfaW5fdHMgPSBwYXJzZS0+cHJpdi0+bGVhZF9vdXRfdHMgPSAwOworICBwYXJzZS0+cHJpdi0+Yml0cmF0ZSA9IDA7CisgIHBhcnNlLT5wcml2LT5mcmFtZWNvdW50ID0gMDsKKyAgcGFyc2UtPnByaXYtPmJ5dGVjb3VudCA9IDA7CisgIHBhcnNlLT5wcml2LT5hY2NfZHVyYXRpb24gPSAwOworICBwYXJzZS0+cHJpdi0+Zmlyc3RfZnJhbWVfdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICBwYXJzZS0+cHJpdi0+Zmlyc3RfZnJhbWVfb2Zmc2V0ID0gLTE7CisgIHBhcnNlLT5wcml2LT5lc3RpbWF0ZWRfZHVyYXRpb24gPSAtMTsKKyAgcGFyc2UtPnByaXYtPm5leHRfdHMgPSAwOworICBwYXJzZS0+cHJpdi0+c3luY2FibGUgPSBUUlVFOworICBwYXJzZS0+cHJpdi0+cGFzc3Rocm91Z2ggPSBGQUxTRTsKKyAgcGFyc2UtPnByaXYtPmhhc190aW1pbmdfaW5mbyA9IEZBTFNFOworICBwYXJzZS0+cHJpdi0+cG9zdF9taW5fYml0cmF0ZSA9IFRSVUU7CisgIHBhcnNlLT5wcml2LT5wb3N0X2F2Z19iaXRyYXRlID0gVFJVRTsKKyAgcGFyc2UtPnByaXYtPnBvc3RfbWF4X2JpdHJhdGUgPSBUUlVFOworICBwYXJzZS0+cHJpdi0+bWluX2JpdHJhdGUgPSBHX01BWFVJTlQ7CisgIHBhcnNlLT5wcml2LT5tYXhfYml0cmF0ZSA9IDA7CisgIHBhcnNlLT5wcml2LT5hdmdfYml0cmF0ZSA9IDA7CisgIHBhcnNlLT5wcml2LT5wb3N0ZWRfYXZnX2JpdHJhdGUgPSAwOworCisgIHBhcnNlLT5wcml2LT5pbmRleF9sYXN0X3RzID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgcGFyc2UtPnByaXYtPmluZGV4X2xhc3Rfb2Zmc2V0ID0gLTE7CisgIHBhcnNlLT5wcml2LT5pbmRleF9sYXN0X3ZhbGlkID0gVFJVRTsKKyAgcGFyc2UtPnByaXYtPnVwc3RyZWFtX3NlZWthYmxlID0gRkFMU0U7CisgIHBhcnNlLT5wcml2LT51cHN0cmVhbV9zaXplID0gMDsKKyAgcGFyc2UtPnByaXYtPnVwc3RyZWFtX2hhc19kdXJhdGlvbiA9IEZBTFNFOworICBwYXJzZS0+cHJpdi0+aWR4X2ludGVydmFsID0gMDsKKyAgcGFyc2UtPnByaXYtPmV4YWN0X3Bvc2l0aW9uID0gVFJVRTsKKyAgcGFyc2UtPnByaXYtPnNlZW5fa2V5ZnJhbWUgPSBGQUxTRTsKKworICBwYXJzZS0+cHJpdi0+bGFzdF90cyA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgIHBhcnNlLT5wcml2LT5sYXN0X29mZnNldCA9IDA7CisKKyAgaWYgKHBhcnNlLT5wcml2LT5wZW5kaW5nX3NlZ21lbnQpIHsKKyAgICBnc3RfZXZlbnRfdW5yZWYgKHBhcnNlLT5wcml2LT5wZW5kaW5nX3NlZ21lbnQpOworICAgIHBhcnNlLT5wcml2LT5wZW5kaW5nX3NlZ21lbnQgPSBOVUxMOworICB9CisKKyAgZ19saXN0X2ZvcmVhY2ggKHBhcnNlLT5wcml2LT5wZW5kaW5nX2V2ZW50cywgKEdGdW5jKSBnc3RfbWluaV9vYmplY3RfdW5yZWYsCisgICAgICBOVUxMKTsKKyAgZ19saXN0X2ZyZWUgKHBhcnNlLT5wcml2LT5wZW5kaW5nX2V2ZW50cyk7CisgIHBhcnNlLT5wcml2LT5wZW5kaW5nX2V2ZW50cyA9IE5VTEw7CisKKyAgaWYgKHBhcnNlLT5wcml2LT5jYWNoZSkgeworICAgIGdzdF9idWZmZXJfdW5yZWYgKHBhcnNlLT5wcml2LT5jYWNoZSk7CisgICAgcGFyc2UtPnByaXYtPmNhY2hlID0gTlVMTDsKKyAgfQorCisgIGdfc2xpc3RfZm9yZWFjaCAocGFyc2UtPnByaXYtPnBlbmRpbmdfc2Vla3MsIChHRnVuYykgZ19mcmVlLCBOVUxMKTsKKyAgZ19zbGlzdF9mcmVlIChwYXJzZS0+cHJpdi0+cGVuZGluZ19zZWVrcyk7CisgIHBhcnNlLT5wcml2LT5wZW5kaW5nX3NlZWtzID0gTlVMTDsKKworICAvKiB3ZSBrbm93IGl0IGlzIG5vdCBhbGxvYydlZCwgYnV0IG1heWJlIG90aGVyIHN0dWZmIHRvIGZyZWUsIHNvbWUgZGF5IC4uLiAqLworICBwYXJzZS0+cHJpdi0+ZnJhbWUuX3ByaXZhdGVfZmxhZ3MgfD0KKyAgICAgIEdTVF9CQVNFX1BBUlNFX0ZSQU1FX1BSSVZBVEVfRkxBR19OT0FMTE9DOworICBnc3RfYmFzZV9wYXJzZV9mcmFtZV9mcmVlICgmcGFyc2UtPnByaXYtPmZyYW1lKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhcnNlKTsKK30KKworLyogZ3N0X2Jhc2VfcGFyc2VfY2hlY2tfZnJhbWU6CisgKiBAcGFyc2U6ICNHc3RCYXNlUGFyc2UuCisgKiBAYnVmZmVyOiBHc3RCdWZmZXIuCisgKiBAZnJhbWVzaXplOiBUaGlzIHdpbGwgYmUgc2V0IHRvIHRlbGwgdGhlIGZvdW5kIGZyYW1lIHNpemUgaW4gYnl0ZXMuCisgKiBAc2tpcHNpemU6IE91dHB1dCBwYXJhbWV0ZXIgdGhhdCB0ZWxscyBob3cgbXVjaCBkYXRhIG5lZWRzIHRvIGJlIHNraXBwZWQKKyAqICAgICAgICAgICAgaW4gb3JkZXIgdG8gZmluZCB0aGUgZm9sbG93aW5nIGZyYW1lIGhlYWRlci4KKyAqCisgKiBEZWZhdWx0IGNhbGxiYWNrIGZvciBjaGVja192YWxpZF9mcmFtZS4KKyAqCisgKiBSZXR1cm5zOiBBbHdheXMgVFJVRS4KKyAqLworc3RhdGljIGdib29sZWFuCitnc3RfYmFzZV9wYXJzZV9jaGVja19mcmFtZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsCisgICAgR3N0QmFzZVBhcnNlRnJhbWUgKiBmcmFtZSwgZ3VpbnQgKiBmcmFtZXNpemUsIGdpbnQgKiBza2lwc2l6ZSkKK3sKKyAgKmZyYW1lc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGZyYW1lLT5idWZmZXIpOworICAqc2tpcHNpemUgPSAwOworICByZXR1cm4gVFJVRTsKK30KKworCisvKiBnc3RfYmFzZV9wYXJzZV9wYXJzZV9mcmFtZToKKyAqIEBwYXJzZTogI0dzdEJhc2VQYXJzZS4KKyAqIEBidWZmZXI6ICNHc3RCdWZmZXIuCisgKgorICogRGVmYXVsdCBjYWxsYmFjayBmb3IgcGFyc2VfZnJhbWUuCisgKi8KK3N0YXRpYyBHc3RGbG93UmV0dXJuCitnc3RfYmFzZV9wYXJzZV9wYXJzZV9mcmFtZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsIEdzdEJhc2VQYXJzZUZyYW1lICogZnJhbWUpCit7CisgIEdzdEJ1ZmZlciAqYnVmZmVyID0gZnJhbWUtPmJ1ZmZlcjsKKworICBpZiAoIUdTVF9CVUZGRVJfVElNRVNUQU1QX0lTX1ZBTElEIChidWZmZXIpICYmCisgICAgICBHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocGFyc2UtPnByaXYtPm5leHRfdHMpKSB7CisgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSBwYXJzZS0+cHJpdi0+bmV4dF90czsKKyAgfQorICBpZiAoIUdTVF9CVUZGRVJfRFVSQVRJT05fSVNfVkFMSUQgKGJ1ZmZlcikgJiYKKyAgICAgIEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChwYXJzZS0+cHJpdi0+ZnJhbWVfZHVyYXRpb24pKSB7CisgICAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9IHBhcnNlLT5wcml2LT5mcmFtZV9kdXJhdGlvbjsKKyAgfQorICByZXR1cm4gR1NUX0ZMT1dfT0s7Cit9CisKKy8qIGdzdF9iYXNlX3BhcnNlX2NvbnZlcnQ6CisgKiBAcGFyc2U6ICNHc3RCYXNlUGFyc2UuCisgKiBAc3JjX2Zvcm1hdDogI0dzdEZvcm1hdCBkZXNjcmliaW5nIHRoZSBzb3VyY2UgZm9ybWF0LgorICogQHNyY192YWx1ZTogU291cmNlIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC4KKyAqIEBkZXN0X2Zvcm1hdDogI0dzdEZvcm1hdCBkZWZpbmluZyB0aGUgY29udmVydGVkIGZvcm1hdC4KKyAqIEBkZXN0X3ZhbHVlOiBQb2ludGVyIHdoZXJlIHRoZSBjb252ZXJzaW9uIHJlc3VsdCB3aWxsIGJlIHB1dC4KKyAqCisgKiBDb252ZXJ0cyB1c2luZyBjb25maWd1cmVkICJjb252ZXJ0IiB2bWV0aG9kIGluICNHc3RCYXNlUGFyc2UgY2xhc3MuCisgKgorICogUmV0dXJuczogVFJVRSBpZiBjb252ZXJzaW9uIHdhcyBzdWNjZXNzZnVsLgorICovCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iYXNlX3BhcnNlX2NvbnZlcnQgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAorICAgIEdzdEZvcm1hdCBzcmNfZm9ybWF0LAorICAgIGdpbnQ2NCBzcmNfdmFsdWUsIEdzdEZvcm1hdCBkZXN0X2Zvcm1hdCwgZ2ludDY0ICogZGVzdF92YWx1ZSkKK3sKKyAgR3N0QmFzZVBhcnNlQ2xhc3MgKmtsYXNzID0gR1NUX0JBU0VfUEFSU0VfR0VUX0NMQVNTIChwYXJzZSk7CisgIGdib29sZWFuIHJldDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGVzdF92YWx1ZSAhPSBOVUxMLCBGQUxTRSk7CisKKyAgaWYgKCFrbGFzcy0+Y29udmVydCkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgcmV0ID0ga2xhc3MtPmNvbnZlcnQgKHBhcnNlLCBzcmNfZm9ybWF0LCBzcmNfdmFsdWUsIGRlc3RfZm9ybWF0LCBkZXN0X3ZhbHVlKTsKKworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKyAgeworICAgIGlmIChyZXQpIHsKKyAgICAgIGlmIChzcmNfZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSAmJiBkZXN0X2Zvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTKSB7CisgICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwKKyAgICAgICAgICAgICJUSU1FIC0+IEJZVEVTOiAlIiBHU1RfVElNRV9GT1JNQVQgIiAtPiAlIiBHX0dJTlQ2NF9GT1JNQVQsCisgICAgICAgICAgICBHU1RfVElNRV9BUkdTIChzcmNfdmFsdWUpLCAqZGVzdF92YWx1ZSk7CisgICAgICB9IGVsc2UgaWYgKGRlc3RfZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSAmJgorICAgICAgICAgIHNyY19mb3JtYXQgPT0gR1NUX0ZPUk1BVF9CWVRFUykgeworICAgICAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsCisgICAgICAgICAgICAiQllURVMgLT4gVElNRTogJSIgR19HSU5UNjRfRk9STUFUICIgLT4gJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgICAgICAgc3JjX3ZhbHVlLCBHU1RfVElNRV9BUkdTICgqZGVzdF92YWx1ZSkpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLAorICAgICAgICAgICAgIiVzIC0+ICVzOiAlIiBHX0dJTlQ2NF9GT1JNQVQgIiAtPiAlIiBHX0dJTlQ2NF9GT1JNQVQsCisgICAgICAgICAgICBHU1RfU1RSX05VTEwgKGdzdF9mb3JtYXRfZ2V0X25hbWUgKHNyY19mb3JtYXQpKSwKKyAgICAgICAgICAgIEdTVF9TVFJfTlVMTCAoZ3N0X2Zvcm1hdF9nZXRfbmFtZSAoZGVzdF9mb3JtYXQpKSwKKyAgICAgICAgICAgIHNyY192YWx1ZSwgKmRlc3RfdmFsdWUpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImNvbnZlcnNpb24gZmFpbGVkIik7CisgICAgfQorICB9CisjZW5kaWYKKworICByZXR1cm4gcmV0OworfQorCisvKiBnc3RfYmFzZV9wYXJzZV9zaW5rX2V2ZW50OgorICogQHBhZDogI0dzdFBhZCB0aGF0IHJlY2VpdmVkIHRoZSBldmVudC4KKyAqIEBldmVudDogI0dzdEV2ZW50IHRvIGJlIGhhbmRsZWQuCisgKgorICogSGFuZGxlciBmb3Igc2luayBwYWQgZXZlbnRzLgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIGV2ZW50IHdhcyBoYW5kbGVkLgorICovCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iYXNlX3BhcnNlX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiBldmVudCkKK3sKKyAgR3N0QmFzZVBhcnNlICpwYXJzZTsKKyAgR3N0QmFzZVBhcnNlQ2xhc3MgKmJjbGFzczsKKyAgZ2Jvb2xlYW4gaGFuZGxlZCA9IEZBTFNFOworICBnYm9vbGVhbiByZXQgPSBUUlVFOworCisgIHBhcnNlID0gR1NUX0JBU0VfUEFSU0UgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7CisgIGJjbGFzcyA9IEdTVF9CQVNFX1BBUlNFX0dFVF9DTEFTUyAocGFyc2UpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiaGFuZGxpbmcgZXZlbnQgJWQsICVzIiwgR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSwKKyAgICAgIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7CisKKyAgLyogQ2FjaGUgYWxsIGV2ZW50cyBleGNlcHQgRU9TLCBTRUdNRU5UIGFuZCBGTFVTSF9TVE9QIGlmIHdlIGhhdmUgYQorICAgKiBwZW5kaW5nIHNlZ21lbnQgKi8KKyAgaWYgKHBhcnNlLT5wcml2LT5wZW5kaW5nX3NlZ21lbnQgJiYgR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSAhPSBHU1RfRVZFTlRfRU9TCisgICAgICAmJiBHU1RfRVZFTlRfVFlQRSAoZXZlbnQpICE9IEdTVF9FVkVOVF9TRUdNRU5UCisgICAgICAmJiBHU1RfRVZFTlRfVFlQRSAoZXZlbnQpICE9IEdTVF9FVkVOVF9GTFVTSF9TVEFSVAorICAgICAgJiYgR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSAhPSBHU1RfRVZFTlRfRkxVU0hfU1RPUCkgeworCisgICAgaWYgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX1RBRykKKyAgICAgIC8qIFNlZSBpZiBhbnkgYml0cmF0ZSB0YWdzIHdlcmUgcG9zdGVkICovCisgICAgICBnc3RfYmFzZV9wYXJzZV9oYW5kbGVfdGFnIChwYXJzZSwgZXZlbnQpOworCisgICAgcGFyc2UtPnByaXYtPnBlbmRpbmdfZXZlbnRzID0KKyAgICAgICAgZ19saXN0X2FwcGVuZCAocGFyc2UtPnByaXYtPnBlbmRpbmdfZXZlbnRzLCBldmVudCk7CisgICAgcmV0ID0gVFJVRTsKKyAgfSBlbHNlIHsKKworICAgIGlmIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9FT1MgJiYKKyAgICAgICAgcGFyc2UtPnByaXYtPmZyYW1lY291bnQgPCBNSU5fRlJBTUVTX1RPX1BPU1RfQklUUkFURSkKKyAgICAgIC8qIFdlJ3ZlIG5vdCBwb3N0ZWQgYml0cmF0ZSB0YWdzIHlldCAtIGRvIHNvIG5vdyAqLworICAgICAgZ3N0X2Jhc2VfcGFyc2VfcG9zdF9iaXRyYXRlcyAocGFyc2UsIFRSVUUsIFRSVUUsIFRSVUUpOworCisgICAgaWYgKGJjbGFzcy0+ZXZlbnQpCisgICAgICBoYW5kbGVkID0gYmNsYXNzLT5ldmVudCAocGFyc2UsIGV2ZW50KTsKKworICAgIGlmICghaGFuZGxlZCkKKyAgICAgIGhhbmRsZWQgPSBnc3RfYmFzZV9wYXJzZV9zaW5rX2V2ZW50ZnVuYyAocGFyc2UsIGV2ZW50KTsKKworICAgIGlmICghaGFuZGxlZCkKKyAgICAgIHJldCA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBldmVudCk7CisgIH0KKworICBnc3Rfb2JqZWN0X3VucmVmIChwYXJzZSk7CisgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiZXZlbnQgaGFuZGxlZCIpOworICByZXR1cm4gcmV0OworfQorCisKKy8qIGdzdF9iYXNlX3BhcnNlX3NpbmtfZXZlbnRmdW5jOgorICogQHBhcnNlOiAjR3N0QmFzZVBhcnNlLgorICogQGV2ZW50OiAjR3N0RXZlbnQgdG8gYmUgaGFuZGxlZC4KKyAqCisgKiBFbGVtZW50LWxldmVsIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24uCisgKgorICogVGhlIGV2ZW50IHdpbGwgYmUgdW5yZWZmZWQgb25seSBpZiBpdCBoYXMgYmVlbiBoYW5kbGVkIGFuZCB0aGlzCisgKiBmdW5jdGlvbiByZXR1cm5zICVUUlVFCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGV2ZW50IHdhcyBoYW5kbGVkIGFuZCBub3QgbmVlZCBmb3J3YXJkaW5nLgorICovCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iYXNlX3BhcnNlX3NpbmtfZXZlbnRmdW5jIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgR3N0RXZlbnQgKiBldmVudCkKK3sKKyAgZ2Jvb2xlYW4gaGFuZGxlZCA9IEZBTFNFOworICBHc3RFdmVudCAqKmV2ZW50cDsKKworICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKKyAgICBjYXNlIEdTVF9FVkVOVF9DQVBTOgorICAgIHsKKyAgICAgIEdzdENhcHMgKmNhcHM7CisgICAgICBHc3RCYXNlUGFyc2VDbGFzcyAqa2xhc3M7CisKKyAgICAgIGtsYXNzID0gR1NUX0JBU0VfUEFSU0VfR0VUX0NMQVNTIChwYXJzZSk7CisKKyAgICAgIGdzdF9ldmVudF9wYXJzZV9jYXBzIChldmVudCwgJmNhcHMpOworICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7CisKKyAgICAgIGlmIChrbGFzcy0+c2V0X3NpbmtfY2FwcykKKyAgICAgICAga2xhc3MtPnNldF9zaW5rX2NhcHMgKHBhcnNlLCBjYXBzKTsKKworICAgICAgLyogd2lsbCBzZW5kIG91ciBvd24gY2FwcyBkb3duc3RyZWFtICovCisgICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKyAgICAgIGhhbmRsZWQgPSBUUlVFOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6CisgICAgeworICAgICAgY29uc3QgR3N0U2VnbWVudCAqaW5fc2VnbWVudDsKKyAgICAgIEdzdFNlZ21lbnQgb3V0X3NlZ21lbnQ7CisgICAgICBnaW50NjQgb2Zmc2V0ID0gMCwgbmV4dF90czsKKworI2lmIDAKKyAgICAgIGdkb3VibGUgcmF0ZSwgYXBwbGllZF9yYXRlOworICAgICAgR3N0Rm9ybWF0IGZvcm1hdDsKKyAgICAgIGdpbnQ2NCBzdGFydCwgc3RvcCwgcG9zLCBuZXh0X3RzOworICAgICAgZ2Jvb2xlYW4gdXBkYXRlOworI2VuZGlmCisKKyAgICAgIGdzdF9ldmVudF9wYXJzZV9zZWdtZW50IChldmVudCwgJmluX3NlZ21lbnQpOworICAgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJm91dF9zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOworCisgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInNlZ21lbnQgJSIgR1NUX1NFR01FTlRfRk9STUFULCBpbl9zZWdtZW50KTsKKworICAgICAgaWYgKGluX3NlZ21lbnQtPmZvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTKSB7CisgICAgICAgIEdzdEJhc2VQYXJzZVNlZWsgKnNlZWsgPSBOVUxMOworICAgICAgICBHU0xpc3QgKm5vZGU7CisKKyAgICAgICAgLyogc3RvcCB0aW1lIGlzIGFsbG93ZWQgdG8gYmUgb3Blbi1lbmRlZCwgYnV0IG5vdCBzdGFydCAmIHBvcyAqLworICAgICAgICBvZmZzZXQgPSBpbl9zZWdtZW50LT50aW1lOworCisgICAgICAgIEdTVF9PQkpFQ1RfTE9DSyAocGFyc2UpOworICAgICAgICBmb3IgKG5vZGUgPSBwYXJzZS0+cHJpdi0+cGVuZGluZ19zZWVrczsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHQpIHsKKyAgICAgICAgICBHc3RCYXNlUGFyc2VTZWVrICp0bXAgPSBub2RlLT5kYXRhOworCisgICAgICAgICAgaWYgKHRtcC0+b2Zmc2V0ID09IG9mZnNldCkgeworICAgICAgICAgICAgc2VlayA9IHRtcDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwYXJzZS0+cHJpdi0+cGVuZGluZ19zZWVrcyA9CisgICAgICAgICAgICBnX3NsaXN0X3JlbW92ZSAocGFyc2UtPnByaXYtPnBlbmRpbmdfc2Vla3MsIHNlZWspOworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFyc2UpOworCisgICAgICAgIGlmIChzZWVrKSB7CisgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsCisgICAgICAgICAgICAgICJNYXRjaGVkIG5ld3NlZ21lbnQgdG8lcyBzZWVrOiAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsCisgICAgICAgICAgICAgIHNlZWstPmFjY3VyYXRlID8gIiBhY2N1cmF0ZSIgOiAiIiwgJnNlZWstPnNlZ21lbnQpOworCisgICAgICAgICAgb3V0X3NlZ21lbnQuc3RhcnQgPSBzZWVrLT5zZWdtZW50LnN0YXJ0OworICAgICAgICAgIG91dF9zZWdtZW50LnN0b3AgPSBzZWVrLT5zZWdtZW50LnN0b3A7CisgICAgICAgICAgb3V0X3NlZ21lbnQudGltZSA9IHNlZWstPnNlZ21lbnQuc3RhcnQ7CisKKyAgICAgICAgICBuZXh0X3RzID0gc2Vlay0+c3RhcnRfdHM7CisgICAgICAgICAgcGFyc2UtPnByaXYtPmV4YWN0X3Bvc2l0aW9uID0gc2Vlay0+YWNjdXJhdGU7CisgICAgICAgICAgZ19mcmVlIChzZWVrKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAvKiBiZXN0IGF0dGVtcHQgY29udmVydCAqLworICAgICAgICAgIC8qIGFzIHRoZXNlIGFyZSBvbmx5IGVzdGltYXRlcywgc3RvcCBpcyBrZXB0IG9wZW4tZW5kZWQgdG8gYXZvaWQKKyAgICAgICAgICAgKiBwcmVtYXR1cmUgY3V0dGluZyAqLworICAgICAgICAgIGdzdF9iYXNlX3BhcnNlX2NvbnZlcnQgKHBhcnNlLCBHU1RfRk9STUFUX0JZVEVTLCBpbl9zZWdtZW50LT5zdGFydCwKKyAgICAgICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCAoZ2ludDY0ICopICYgbmV4dF90cyk7CisKKyAgICAgICAgICBvdXRfc2VnbWVudC5zdGFydCA9IG5leHRfdHM7CisgICAgICAgICAgb3V0X3NlZ21lbnQuc3RvcCA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgICAgICAgICAgb3V0X3NlZ21lbnQudGltZSA9IG5leHRfdHM7CisKKyAgICAgICAgICBwYXJzZS0+cHJpdi0+ZXhhY3RfcG9zaXRpb24gPSAoaW5fc2VnbWVudC0+c3RhcnQgPT0gMCk7CisgICAgICAgIH0KKworICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKworICAgICAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJm91dF9zZWdtZW50KTsKKworICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIkNvbnZlcnRlZCBpbmNvbWluZyBzZWdtZW50IHRvIFRJTUUuICUiCisgICAgICAgICAgICBHU1RfU0VHTUVOVF9GT1JNQVQsIGluX3NlZ21lbnQpOworCisgICAgICB9IGVsc2UgaWYgKGluX3NlZ21lbnQtPmZvcm1hdCAhPSBHU1RfRk9STUFUX1RJTUUpIHsKKyAgICAgICAgLyogVW5rbm93biBpbmNvbWluZyBzZWdtZW50IGZvcm1hdC4gT3V0cHV0IGEgZGVmYXVsdCBvcGVuLWVuZGVkCisgICAgICAgICAqIFRJTUUgc2VnbWVudCAqLworICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKworICAgICAgICBvdXRfc2VnbWVudC5zdGFydCA9IDA7CisgICAgICAgIG91dF9zZWdtZW50LnN0b3AgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOzsKKyAgICAgICAgb3V0X3NlZ21lbnQudGltZSA9IDA7OworCisgICAgICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmb3V0X3NlZ21lbnQpOworCisgICAgICAgIG5leHRfdHMgPSAwOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgLyogbm90IGNvbnNpZGVyZWQgQllURSBzZWVrYWJsZSBpZiBpdCBpcyB0YWxraW5nIHRvIHVzIGluIFRJTUUsCisgICAgICAgICAqIHdoYXRldmVyIGVsc2UgaXQgbWlnaHQgY2xhaW0gKi8KKyAgICAgICAgcGFyc2UtPnByaXYtPnVwc3RyZWFtX3NlZWthYmxlID0gRkFMU0U7CisgICAgICAgIG5leHRfdHMgPSBpbl9zZWdtZW50LT5zdGFydDsKKyAgICAgIH0KKworICAgICAgbWVtY3B5ICgmcGFyc2UtPnNlZ21lbnQsICZvdXRfc2VnbWVudCwgc2l6ZW9mIChHc3RTZWdtZW50KSk7CisKKyAgICAgIC8qCisgICAgICAgICBnc3Rfc2VnbWVudF9zZXRfbmV3c2VnbWVudCAoJnBhcnNlLT5zZWdtZW50LCB1cGRhdGUsIHJhdGUsCisgICAgICAgICBhcHBsaWVkX3JhdGUsIGZvcm1hdCwgc3RhcnQsIHN0b3AsIHN0YXJ0KTsKKyAgICAgICAqLworCisgICAgICAvKiBzYXZlIHRoZSBzZWdtZW50IGZvciBsYXRlciwgcmlnaHQgYmVmb3JlIHdlIHB1c2ggYSBuZXcgYnVmZmVyIHNvIHRoYXQKKyAgICAgICAqIHRoZSBjYXBzIGFyZSBmaXhlZCBhbmQgdGhlIG5leHQgbGlua2VkIGVsZW1lbnQgY2FuIHJlY2VpdmUKKyAgICAgICAqIHRoZSBzZWdtZW50LiAqLworICAgICAgZXZlbnRwID0gJnBhcnNlLT5wcml2LT5wZW5kaW5nX3NlZ21lbnQ7CisgICAgICBnc3RfZXZlbnRfcmVwbGFjZSAoZXZlbnRwLCBldmVudCk7CisgICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKyAgICAgIGhhbmRsZWQgPSBUUlVFOworCisgICAgICAvKiBidXQgZmluaXNoIHRoZSBjdXJyZW50IHNlZ21lbnQgKi8KKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiZHJhaW5pbmcgY3VycmVudCBzZWdtZW50Iik7CisgICAgICBpZiAoaW5fc2VnbWVudC0+cmF0ZSA+IDAuMCkKKyAgICAgICAgZ3N0X2Jhc2VfcGFyc2VfZHJhaW4gKHBhcnNlKTsKKyAgICAgIGVsc2UKKyAgICAgICAgZ3N0X2Jhc2VfcGFyc2VfcHJvY2Vzc19mcmFnbWVudCAocGFyc2UsIEZBTFNFKTsKKyAgICAgIGdzdF9hZGFwdGVyX2NsZWFyIChwYXJzZS0+cHJpdi0+YWRhcHRlcik7CisKKyAgICAgIHBhcnNlLT5wcml2LT5vZmZzZXQgPSBvZmZzZXQ7CisgICAgICBwYXJzZS0+cHJpdi0+c3luY19vZmZzZXQgPSBvZmZzZXQ7CisgICAgICBwYXJzZS0+cHJpdi0+bmV4dF90cyA9IG5leHRfdHM7CisgICAgICBwYXJzZS0+cHJpdi0+bGFzdF90cyA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgICAgICBwYXJzZS0+cHJpdi0+ZGlzY29udCA9IFRSVUU7CisgICAgICBwYXJzZS0+cHJpdi0+c2Vlbl9rZXlmcmFtZSA9IEZBTFNFOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RBUlQ6CisgICAgICBwYXJzZS0+cHJpdi0+Zmx1c2hpbmcgPSBUUlVFOworICAgICAgaGFuZGxlZCA9IGdzdF9wYWRfcHVzaF9ldmVudCAocGFyc2UtPnNyY3BhZCwgZ3N0X2V2ZW50X3JlZiAoZXZlbnQpKTsKKyAgICAgIGlmIChoYW5kbGVkKQorICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKyAgICAgIC8qIFdhaXQgZm9yIF9jaGFpbigpIHRvIGV4aXQgYnkgdGFraW5nIHRoZSBzcmNwYWQgU1RSRUFNX0xPQ0sgKi8KKyAgICAgIEdTVF9QQURfU1RSRUFNX0xPQ0sgKHBhcnNlLT5zcmNwYWQpOworICAgICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChwYXJzZS0+c3JjcGFkKTsKKworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVE9QOgorICAgICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHBhcnNlLT5wcml2LT5hZGFwdGVyKTsKKyAgICAgIGdzdF9iYXNlX3BhcnNlX2NsZWFyX3F1ZXVlcyAocGFyc2UpOworICAgICAgcGFyc2UtPnByaXYtPmZsdXNoaW5nID0gRkFMU0U7CisgICAgICBwYXJzZS0+cHJpdi0+ZGlzY29udCA9IFRSVUU7CisgICAgICBwYXJzZS0+cHJpdi0+bGFzdF90cyA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgICAgICBwYXJzZS0+cHJpdi0+ZnJhbWUuX3ByaXZhdGVfZmxhZ3MgfD0KKyAgICAgICAgICBHU1RfQkFTRV9QQVJTRV9GUkFNRV9QUklWQVRFX0ZMQUdfTk9BTExPQzsKKyAgICAgIGdzdF9iYXNlX3BhcnNlX2ZyYW1lX2ZyZWUgKCZwYXJzZS0+cHJpdi0+ZnJhbWUpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdTVF9FVkVOVF9FT1M6CisgICAgICBpZiAocGFyc2UtPnNlZ21lbnQucmF0ZSA+IDAuMCkKKyAgICAgICAgZ3N0X2Jhc2VfcGFyc2VfZHJhaW4gKHBhcnNlKTsKKyAgICAgIGVsc2UKKyAgICAgICAgZ3N0X2Jhc2VfcGFyc2VfcHJvY2Vzc19mcmFnbWVudCAocGFyc2UsIEZBTFNFKTsKKworICAgICAgLyogSWYgd2UgU1RJTEwgaGF2ZSB6ZXJvIGZyYW1lcyBwcm9jZXNzZWQsIGZpcmUgYW4gZXJyb3IgKi8KKyAgICAgIGlmIChwYXJzZS0+cHJpdi0+ZnJhbWVjb3VudCA9PSAwKSB7CisgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwYXJzZSwgU1RSRUFNLCBXUk9OR19UWVBFLAorICAgICAgICAgICAgKCJObyB2YWxpZCBmcmFtZXMgZm91bmQgYmVmb3JlIGVuZCBvZiBzdHJlYW0iKSwgKE5VTEwpKTsKKyAgICAgIH0KKyAgICAgIC8qIG5ld3NlZ21lbnQgYmVmb3JlIGVvcyAqLworICAgICAgaWYgKHBhcnNlLT5wcml2LT5wZW5kaW5nX3NlZ21lbnQpIHsKKyAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYXJzZS0+c3JjcGFkLCBwYXJzZS0+cHJpdi0+cGVuZGluZ19zZWdtZW50KTsKKyAgICAgICAgcGFyc2UtPnByaXYtPnBlbmRpbmdfc2VnbWVudCA9IE5VTEw7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiBoYW5kbGVkOworfQorCisKKy8qIGdzdF9iYXNlX3BhcnNlX3NyY19ldmVudDoKKyAqIEBwYWQ6ICNHc3RQYWQgdGhhdCByZWNlaXZlZCB0aGUgZXZlbnQuCisgKiBAZXZlbnQ6ICNHc3RFdmVudCB0aGF0IHdhcyByZWNlaXZlZC4KKyAqCisgKiBIYW5kbGVyIGZvciBzb3VyY2UgcGFkIGV2ZW50cy4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBldmVudCB3YXMgaGFuZGxlZC4KKyAqLworc3RhdGljIGdib29sZWFuCitnc3RfYmFzZV9wYXJzZV9zcmNfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiBldmVudCkKK3sKKyAgR3N0QmFzZVBhcnNlICpwYXJzZTsKKyAgR3N0QmFzZVBhcnNlQ2xhc3MgKmJjbGFzczsKKyAgZ2Jvb2xlYW4gaGFuZGxlZCA9IEZBTFNFOworICBnYm9vbGVhbiByZXQgPSBUUlVFOworCisgIHBhcnNlID0gR1NUX0JBU0VfUEFSU0UgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7CisgIGJjbGFzcyA9IEdTVF9CQVNFX1BBUlNFX0dFVF9DTEFTUyAocGFyc2UpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiZXZlbnQgJWQsICVzIiwgR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSwKKyAgICAgIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7CisKKyAgaWYgKGJjbGFzcy0+c3JjX2V2ZW50KQorICAgIGhhbmRsZWQgPSBiY2xhc3MtPnNyY19ldmVudCAocGFyc2UsIGV2ZW50KTsKKworICBpZiAoIWhhbmRsZWQpCisgICAgcmV0ID0gZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChwYWQsIGV2ZW50KTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChwYXJzZSk7CisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2Jhc2VfcGFyc2VfaXNfc2Vla2FibGUgKEdzdEJhc2VQYXJzZSAqIHBhcnNlKQoreworICAvKiBGSVhNRTogY291bGQgZG8gbW9yZSBoZXJlLCBlLmcuIGNoZWNrIGluZGV4IG9yIGp1c3Qgc2VuZCBkYXRhIGZyb20gMAorICAgKiBpbiBwdWxsIG1vZGUgYW5kIGxldCBkZWNvZGVyL3NpbmsgY2xpcCAqLworICByZXR1cm4gcGFyc2UtPnByaXYtPnN5bmNhYmxlOworfQorCisvKiBnc3RfYmFzZV9wYXJzZV9zcmNfZXZlbnRmdW5jOgorICogQHBhcnNlOiAjR3N0QmFzZVBhcnNlLgorICogQGV2ZW50OiAjR3N0RXZlbnQgdGhhdCB3YXMgcmVjZWl2ZWQuCisgKgorICogRGVmYXVsdCBzcmNwYWQgZXZlbnQgaGFuZGxlci4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBldmVudCB3YXMgaGFuZGxlZCBhbmQgY2FuIGJlIGRyb3BwZWQuCisgKi8KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2Jhc2VfcGFyc2Vfc3JjX2V2ZW50ZnVuYyAoR3N0QmFzZVBhcnNlICogcGFyc2UsIEdzdEV2ZW50ICogZXZlbnQpCit7CisgIGdib29sZWFuIGhhbmRsZWQgPSBGQUxTRTsKKworICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKKyAgICBjYXNlIEdTVF9FVkVOVF9TRUVLOgorICAgIHsKKyAgICAgIGlmIChnc3RfYmFzZV9wYXJzZV9pc19zZWVrYWJsZSAocGFyc2UpKSB7CisgICAgICAgIGhhbmRsZWQgPSBnc3RfYmFzZV9wYXJzZV9oYW5kbGVfc2VlayAocGFyc2UsIGV2ZW50KTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKyAgcmV0dXJuIGhhbmRsZWQ7Cit9CisKKworLyoqCisgKiBnc3RfYmFzZV9wYXJzZV9jb252ZXJ0X2RlZmF1bHQ6CisgKiBAcGFyc2U6ICNHc3RCYXNlUGFyc2UuCisgKiBAc3JjX2Zvcm1hdDogI0dzdEZvcm1hdCBkZXNjcmliaW5nIHRoZSBzb3VyY2UgZm9ybWF0LgorICogQHNyY192YWx1ZTogU291cmNlIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC4KKyAqIEBkZXN0X2Zvcm1hdDogI0dzdEZvcm1hdCBkZWZpbmluZyB0aGUgY29udmVydGVkIGZvcm1hdC4KKyAqIEBkZXN0X3ZhbHVlOiBQb2ludGVyIHdoZXJlIHRoZSBjb252ZXJzaW9uIHJlc3VsdCB3aWxsIGJlIHB1dC4KKyAqCisgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mICJjb252ZXJ0IiB2bWV0aG9kIGluICNHc3RCYXNlUGFyc2UgY2xhc3MuCisgKgorICogUmV0dXJuczogVFJVRSBpZiBjb252ZXJzaW9uIHdhcyBzdWNjZXNzZnVsLgorICoKKyAqIFNpbmNlOiAwLjEwLjMzCisgKi8KK2dib29sZWFuCitnc3RfYmFzZV9wYXJzZV9jb252ZXJ0X2RlZmF1bHQgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAorICAgIEdzdEZvcm1hdCBzcmNfZm9ybWF0LAorICAgIGdpbnQ2NCBzcmNfdmFsdWUsIEdzdEZvcm1hdCBkZXN0X2Zvcm1hdCwgZ2ludDY0ICogZGVzdF92YWx1ZSkKK3sKKyAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7CisgIGd1aW50NjQgYnl0ZXMsIGR1cmF0aW9uOworCisgIGlmIChHX1VOTElLRUxZIChzcmNfZm9ybWF0ID09IGRlc3RfZm9ybWF0KSkgeworICAgICpkZXN0X3ZhbHVlID0gc3JjX3ZhbHVlOworICAgIHJldHVybiBUUlVFOworICB9CisKKyAgaWYgKEdfVU5MSUtFTFkgKHNyY192YWx1ZSA9PSAtMSkpIHsKKyAgICAqZGVzdF92YWx1ZSA9IC0xOworICAgIHJldHVybiBUUlVFOworICB9CisKKyAgaWYgKEdfVU5MSUtFTFkgKHNyY192YWx1ZSA9PSAwKSkgeworICAgICpkZXN0X3ZhbHVlID0gMDsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorCisgIC8qIG5lZWQgYXQgbGVhc3Qgc29tZSBmcmFtZXMgKi8KKyAgaWYgKCFwYXJzZS0+cHJpdi0+ZnJhbWVjb3VudCkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgZHVyYXRpb24gPSBwYXJzZS0+cHJpdi0+YWNjX2R1cmF0aW9uIC8gR1NUX01TRUNPTkQ7CisgIGJ5dGVzID0gcGFyc2UtPnByaXYtPmJ5dGVjb3VudDsKKworICBpZiAoR19VTkxJS0VMWSAoIWR1cmF0aW9uIHx8ICFieXRlcykpCisgICAgcmV0dXJuIEZBTFNFOworCisgIGlmIChzcmNfZm9ybWF0ID09IEdTVF9GT1JNQVRfQllURVMpIHsKKyAgICBpZiAoZGVzdF9mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKSB7CisgICAgICAvKiBCWVRFUyAtPiBUSU1FIGNvbnZlcnNpb24gKi8KKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiY29udmVydGluZyBieXRlcyAtPiB0aW1lIik7CisgICAgICAqZGVzdF92YWx1ZSA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoc3JjX3ZhbHVlLCBkdXJhdGlvbiwgYnl0ZXMpOworICAgICAgKmRlc3RfdmFsdWUgKj0gR1NUX01TRUNPTkQ7CisgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImNvbnZlcnNpb24gcmVzdWx0OiAlIiBHX0dJTlQ2NF9GT1JNQVQgIiBtcyIsCisgICAgICAgICAgKmRlc3RfdmFsdWUgLyBHU1RfTVNFQ09ORCk7CisgICAgICByZXQgPSBUUlVFOworICAgIH0KKyAgfSBlbHNlIGlmIChzcmNfZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSkgeworICAgIGlmIChkZXN0X2Zvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTKSB7CisgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImNvbnZlcnRpbmcgdGltZSAtPiBieXRlcyIpOworICAgICAgKmRlc3RfdmFsdWUgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHNyY192YWx1ZSAvIEdTVF9NU0VDT05ELCBieXRlcywKKyAgICAgICAgICBkdXJhdGlvbik7CisgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwKKyAgICAgICAgICAidGltZSAlIiBHX0dJTlQ2NF9GT1JNQVQgIiBtcyBpbiBieXRlcyA9ICUiIEdfR0lOVDY0X0ZPUk1BVCwKKyAgICAgICAgICBzcmNfdmFsdWUgLyBHU1RfTVNFQ09ORCwgKmRlc3RfdmFsdWUpOworICAgICAgcmV0ID0gVFJVRTsKKyAgICB9CisgIH0gZWxzZSBpZiAoc3JjX2Zvcm1hdCA9PSBHU1RfRk9STUFUX0RFRkFVTFQpIHsKKyAgICAvKiBERUZBVUxUID09IGZyYW1lLWJhc2VkICovCisgICAgaWYgKGRlc3RfZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSkgeworICAgICAgaWYgKHBhcnNlLT5wcml2LT5mcHNfZGVuKSB7CisgICAgICAgICpkZXN0X3ZhbHVlID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlIChzcmNfdmFsdWUsCisgICAgICAgICAgICBHU1RfU0VDT05EICogcGFyc2UtPnByaXYtPmZwc19kZW4sIHBhcnNlLT5wcml2LT5mcHNfbnVtKTsKKyAgICAgICAgcmV0ID0gVFJVRTsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGRlc3RfZm9ybWF0ID09IEdTVF9GT1JNQVRfQllURVMpIHsKKyAgICB9CisgIH0KKworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAorZ3N0X2Jhc2VfcGFyc2VfdXBkYXRlX2R1cmF0aW9uIChHc3RCYXNlUGFyc2UgKiBiYXNlcGFyc2UpCit7CisgIEdzdFBhZCAqcGVlcjsKKyAgR3N0QmFzZVBhcnNlICpwYXJzZTsKKworICBwYXJzZSA9IEdTVF9CQVNFX1BBUlNFIChiYXNlcGFyc2UpOworCisgIHBlZXIgPSBnc3RfcGFkX2dldF9wZWVyIChwYXJzZS0+c2lua3BhZCk7CisgIGlmIChwZWVyKSB7CisgICAgZ2Jvb2xlYW4gcXJlcyA9IEZBTFNFOworICAgIGdpbnQ2NCBwdG90LCBkZXN0X3ZhbHVlOworCisgICAgcXJlcyA9IGdzdF9wYWRfcXVlcnlfZHVyYXRpb24gKHBlZXIsIEdTVF9GT1JNQVRfQllURVMsICZwdG90KTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChwZWVyKSk7CisgICAgaWYgKHFyZXMpIHsKKyAgICAgIGlmIChnc3RfYmFzZV9wYXJzZV9jb252ZXJ0IChwYXJzZSwgR1NUX0ZPUk1BVF9CWVRFUywgcHRvdCwKKyAgICAgICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCAmZGVzdF92YWx1ZSkpIHsKKyAgICAgICAgcGFyc2UtPnByaXYtPmVzdGltYXRlZF9kdXJhdGlvbiA9IGRlc3RfdmFsdWU7CisgICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwKKyAgICAgICAgICAgICJ1cGRhdGVkIGVzdGltYXRlZCBkdXJhdGlvbiB0byAlIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICAgICAgICBHU1RfVElNRV9BUkdTIChkZXN0X3ZhbHVlKSk7CisgICAgICB9CisgICAgfQorICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfYmFzZV9wYXJzZV9wb3N0X2JpdHJhdGVzIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgZ2Jvb2xlYW4gcG9zdF9taW4sCisgICAgZ2Jvb2xlYW4gcG9zdF9hdmcsIGdib29sZWFuIHBvc3RfbWF4KQoreworICBHc3RUYWdMaXN0ICp0YWdsaXN0ID0gTlVMTDsKKworICBpZiAocG9zdF9taW4gJiYgcGFyc2UtPnByaXYtPnBvc3RfbWluX2JpdHJhdGUpIHsKKyAgICB0YWdsaXN0ID0gZ3N0X3RhZ19saXN0X25ldyAoKTsKKworICAgIGdzdF90YWdfbGlzdF9hZGQgKHRhZ2xpc3QsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwKKyAgICAgICAgR1NUX1RBR19NSU5JTVVNX0JJVFJBVEUsIHBhcnNlLT5wcml2LT5taW5fYml0cmF0ZSwgTlVMTCk7CisgIH0KKworICBpZiAocG9zdF9hdmcgJiYgcGFyc2UtPnByaXYtPnBvc3RfYXZnX2JpdHJhdGUpIHsKKyAgICBpZiAodGFnbGlzdCA9PSBOVUxMKQorICAgICAgdGFnbGlzdCA9IGdzdF90YWdfbGlzdF9uZXcgKCk7CisKKyAgICBwYXJzZS0+cHJpdi0+cG9zdGVkX2F2Z19iaXRyYXRlID0gcGFyc2UtPnByaXYtPmF2Z19iaXRyYXRlOworICAgIGdzdF90YWdfbGlzdF9hZGQgKHRhZ2xpc3QsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwgR1NUX1RBR19CSVRSQVRFLAorICAgICAgICBwYXJzZS0+cHJpdi0+YXZnX2JpdHJhdGUsIE5VTEwpOworICB9CisKKyAgaWYgKHBvc3RfbWF4ICYmIHBhcnNlLT5wcml2LT5wb3N0X21heF9iaXRyYXRlKSB7CisgICAgaWYgKHRhZ2xpc3QgPT0gTlVMTCkKKyAgICAgIHRhZ2xpc3QgPSBnc3RfdGFnX2xpc3RfbmV3ICgpOworCisgICAgZ3N0X3RhZ19saXN0X2FkZCAodGFnbGlzdCwgR1NUX1RBR19NRVJHRV9SRVBMQUNFLAorICAgICAgICBHU1RfVEFHX01BWElNVU1fQklUUkFURSwgcGFyc2UtPnByaXYtPm1heF9iaXRyYXRlLCBOVUxMKTsKKyAgfQorCisgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiVXBkYXRlZCBiaXRyYXRlcy4gTWluOiAldSwgQXZnOiAldSwgTWF4OiAldSIsCisgICAgICBwYXJzZS0+cHJpdi0+bWluX2JpdHJhdGUsIHBhcnNlLT5wcml2LT5hdmdfYml0cmF0ZSwKKyAgICAgIHBhcnNlLT5wcml2LT5tYXhfYml0cmF0ZSk7CisKKyAgaWYgKHRhZ2xpc3QgIT0gTlVMTCkgeworICAgIGdzdF9lbGVtZW50X2ZvdW5kX3RhZ3NfZm9yX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAocGFyc2UpLCBwYXJzZS0+c3JjcGFkLAorICAgICAgICB0YWdsaXN0KTsKKyAgfQorfQorCisvKiBnc3RfYmFzZV9wYXJzZV91cGRhdGVfYml0cmF0ZXM6CisgKiBAcGFyc2U6ICNHc3RCYXNlUGFyc2UuCisgKiBAYnVmZmVyOiBDdXJyZW50IGZyYW1lIGFzIGEgI0dzdEJ1ZmZlcgorICoKKyAqIEtlZXBzIHRyYWNrIG9mIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGJpdHJhdGVzLCBhbmQgYWxzbyBtYWludGFpbnMgYQorICogcnVubmluZyBhdmVyYWdlIGJpdHJhdGUgb2YgdGhlIHN0cmVhbSBzbyBmYXIuCisgKi8KK3N0YXRpYyB2b2lkCitnc3RfYmFzZV9wYXJzZV91cGRhdGVfYml0cmF0ZXMgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lKQoreworICAvKiBPbmx5IHVwZGF0ZSB0aGUgdGFnIG9uIGEgMTAga2JwcyBkZWx0YSAqLworICBzdGF0aWMgY29uc3QgZ2ludCB1cGRhdGVfdGhyZXNob2xkID0gMTAwMDA7CisKKyAgZ3VpbnQ2NCBkYXRhX2xlbiwgZnJhbWVfZHVyOworICBnaW50IG92ZXJoZWFkLCBmcmFtZV9iaXRyYXRlLCBvbGRfYXZnX2JpdHJhdGU7CisgIGdib29sZWFuIHVwZGF0ZV9taW4gPSBGQUxTRSwgdXBkYXRlX2F2ZyA9IEZBTFNFLCB1cGRhdGVfbWF4ID0gRkFMU0U7CisgIEdzdEJ1ZmZlciAqYnVmZmVyID0gZnJhbWUtPmJ1ZmZlcjsKKworICBvdmVyaGVhZCA9IGZyYW1lLT5vdmVyaGVhZDsKKyAgaWYgKG92ZXJoZWFkID09IC0xKQorICAgIHJldHVybjsKKworICBkYXRhX2xlbiA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikgLSBvdmVyaGVhZDsKKyAgcGFyc2UtPnByaXYtPmRhdGFfYnl0ZWNvdW50ICs9IGRhdGFfbGVuOworCisgIC8qIGR1cmF0aW9uIHNob3VsZCBiZSB2YWxpZCBieSBub3csCisgICAqIGVpdGhlciBzZXQgYnkgc3ViY2xhc3Mgb3IgbWF5YmUgYmFzZWQgb24gZnBzIHNldHRpbmdzICovCisgIGlmIChHU1RfQlVGRkVSX0RVUkFUSU9OX0lTX1ZBTElEIChidWZmZXIpICYmIHBhcnNlLT5wcml2LT5hY2NfZHVyYXRpb24gIT0gMCkgeworICAgIC8qIENhbGN1bGF0ZSBkdXJhdGlvbiBvZiBhIGZyYW1lIGZyb20gYnVmZmVyIHByb3BlcnRpZXMgKi8KKyAgICBmcmFtZV9kdXIgPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpOworICAgIHBhcnNlLT5wcml2LT5hdmdfYml0cmF0ZSA9ICg4ICogcGFyc2UtPnByaXYtPmRhdGFfYnl0ZWNvdW50ICogR1NUX1NFQ09ORCkgLworICAgICAgICBwYXJzZS0+cHJpdi0+YWNjX2R1cmF0aW9uOworCisgIH0gZWxzZSB7CisgICAgLyogTm8gd2F5IHRvIGZpZ3VyZSBvdXQgZnJhbWUgZHVyYXRpb24gKGlzIHRoaXMgZXZlbiBwb3NzaWJsZT8pICovCisgICAgcmV0dXJuOworICB9CisKKyAgLyogb3ZlcnJpZGUgaWYgc3ViY2xhc3MgcHJvdmlkZWQgYml0cmF0ZSwgZS5nLiBtZXRhZGF0YSBiYXNlZCAqLworICBpZiAocGFyc2UtPnByaXYtPmJpdHJhdGUpIHsKKyAgICBwYXJzZS0+cHJpdi0+YXZnX2JpdHJhdGUgPSBwYXJzZS0+cHJpdi0+Yml0cmF0ZTsKKyAgICAvKiBzcHJlYWQgdGhpcyAoY29uZmlybWVkKSBpbmZvIEFTQVAgKi8KKyAgICBpZiAocGFyc2UtPnByaXYtPnBvc3RlZF9hdmdfYml0cmF0ZSAhPSBwYXJzZS0+cHJpdi0+YXZnX2JpdHJhdGUpCisgICAgICBnc3RfYmFzZV9wYXJzZV9wb3N0X2JpdHJhdGVzIChwYXJzZSwgRkFMU0UsIFRSVUUsIEZBTFNFKTsKKyAgfQorCisgIGlmIChmcmFtZV9kdXIpCisgICAgZnJhbWVfYml0cmF0ZSA9ICg4ICogZGF0YV9sZW4gKiBHU1RfU0VDT05EKSAvIGZyYW1lX2R1cjsKKyAgZWxzZQorICAgIHJldHVybjsKKworICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJmcmFtZSBiaXRyYXRlICV1LCBhdmcgYml0cmF0ZSAldSIsIGZyYW1lX2JpdHJhdGUsCisgICAgICBwYXJzZS0+cHJpdi0+YXZnX2JpdHJhdGUpOworCisgIGlmIChwYXJzZS0+cHJpdi0+ZnJhbWVjb3VudCA8IE1JTl9GUkFNRVNfVE9fUE9TVF9CSVRSQVRFKSB7CisgICAgZ290byBleGl0OworICB9IGVsc2UgaWYgKHBhcnNlLT5wcml2LT5mcmFtZWNvdW50ID09IE1JTl9GUkFNRVNfVE9fUE9TVF9CSVRSQVRFKSB7CisgICAgLyogYWx3YXlzIHBvc3QgYWxsIGF0IHRocmVzaG9sZCB0aW1lICovCisgICAgdXBkYXRlX21pbiA9IHVwZGF0ZV9tYXggPSB1cGRhdGVfYXZnID0gVFJVRTsKKyAgfQorCisgIGlmIChHX0xJS0VMWSAocGFyc2UtPnByaXYtPmZyYW1lY291bnQgPj0gTUlOX0ZSQU1FU19UT19QT1NUX0JJVFJBVEUpKSB7CisgICAgaWYgKGZyYW1lX2JpdHJhdGUgPCBwYXJzZS0+cHJpdi0+bWluX2JpdHJhdGUpIHsKKyAgICAgIHBhcnNlLT5wcml2LT5taW5fYml0cmF0ZSA9IGZyYW1lX2JpdHJhdGU7CisgICAgICB1cGRhdGVfbWluID0gVFJVRTsKKyAgICB9CisKKyAgICBpZiAoZnJhbWVfYml0cmF0ZSA+IHBhcnNlLT5wcml2LT5tYXhfYml0cmF0ZSkgeworICAgICAgcGFyc2UtPnByaXYtPm1heF9iaXRyYXRlID0gZnJhbWVfYml0cmF0ZTsKKyAgICAgIHVwZGF0ZV9tYXggPSBUUlVFOworICAgIH0KKworICAgIG9sZF9hdmdfYml0cmF0ZSA9IHBhcnNlLT5wcml2LT5wb3N0ZWRfYXZnX2JpdHJhdGU7CisgICAgaWYgKChnaW50KSAob2xkX2F2Z19iaXRyYXRlIC0gcGFyc2UtPnByaXYtPmF2Z19iaXRyYXRlKSA+IHVwZGF0ZV90aHJlc2hvbGQKKyAgICAgICAgfHwgKGdpbnQpIChwYXJzZS0+cHJpdi0+YXZnX2JpdHJhdGUgLSBvbGRfYXZnX2JpdHJhdGUpID4KKyAgICAgICAgdXBkYXRlX3RocmVzaG9sZCkKKyAgICAgIHVwZGF0ZV9hdmcgPSBUUlVFOworICB9CisKKyAgaWYgKCh1cGRhdGVfbWluIHx8IHVwZGF0ZV9hdmcgfHwgdXBkYXRlX21heCkpCisgICAgZ3N0X2Jhc2VfcGFyc2VfcG9zdF9iaXRyYXRlcyAocGFyc2UsIHVwZGF0ZV9taW4sIHVwZGF0ZV9hdmcsIHVwZGF0ZV9tYXgpOworCisgIC8qIElmIGF2ZXJhZ2UgYml0cmF0ZSBjaGFuZ2VzIHRoYXQgbXVjaCBhbmQgbm8gdmFsaWQgKHRpbWUpIGR1cmF0aW9uIHByb3ZpZGVkLAorICAgKiB0aGVuIHBvc3QgYSBuZXcgZHVyYXRpb24gbWVzc2FnZSBzbyBhcHBsaWNhdGlvbnMgY2FuIHVwZGF0ZSB0aGVpciBjYWNoZWQKKyAgICogdmFsdWVzICovCisgIGlmICh1cGRhdGVfYXZnICYmICEocGFyc2UtPnByaXYtPmR1cmF0aW9uX2ZtdCA9PSBHU1RfRk9STUFUX1RJTUUgJiYKKyAgICAgICAgICBHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocGFyc2UtPnByaXYtPmR1cmF0aW9uKSkpCisgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVCAocGFyc2UpLAorICAgICAgICBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb24gKEdTVF9PQkpFQ1QgKHBhcnNlKSwgR1NUX0ZPUk1BVF9USU1FLCAtMSkpOworCitleGl0OgorICByZXR1cm47Cit9CisKKy8qKgorICogZ3N0X2Jhc2VfcGFyc2VfYWRkX2luZGV4X2VudHJ5OgorICogQHBhcnNlOiAjR3N0QmFzZVBhcnNlLgorICogQG9mZnNldDogb2Zmc2V0IG9mIGVudHJ5CisgKiBAdHM6IHRpbWVzdGFtcCBhc3NvY2lhdGVkIHdpdGggb2Zmc2V0CisgKiBAa2V5OiB3aGV0aGVyIGVudHJ5IHJlZmVycyB0byBrZXlmcmFtZQorICogQGZvcmNlOiBhZGQgZW50cnkgZGlzcmVnYXJkaW5nIHNhbml0eSBjaGVja3MKKyAqCisgKiBBZGRzIGFuIGVudHJ5IHRvIHRoZSBpbmRleCBhc3NvY2lhdGluZyBAb2Zmc2V0IHRvIEB0cy4gIEl0IGlzIHJlY29tbWVuZGVkCisgKiB0byBvbmx5IGFkZCBrZXlmcmFtZSBlbnRyaWVzLiAgQGZvcmNlIGFsbG93cyB0byBieXBhc3MgY2hlY2tzLCBzdWNoIGFzCisgKiB3aGV0aGVyIHRoZSBzdHJlYW0gaXMgKHVwc3RyZWFtKSBzZWVrYWJsZSwgYW5vdGhlciBlbnRyeSBpcyBhbHJlYWR5ICJjbG9zZSIKKyAqIHRvIHRoZSBuZXcgZW50cnksIGV0Yy4KKyAqCisgKiBSZXR1cm5zOiAjZ2Jvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGVudHJ5IHdhcyBhZGRlZAorICoKKyAqIFNpbmNlOiAwLjEwLjMzCisgKi8KK2dib29sZWFuCitnc3RfYmFzZV9wYXJzZV9hZGRfaW5kZXhfZW50cnkgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBndWludDY0IG9mZnNldCwKKyAgICBHc3RDbG9ja1RpbWUgdHMsIGdib29sZWFuIGtleSwgZ2Jvb2xlYW4gZm9yY2UpCit7CisgIGdib29sZWFuIHJldCA9IEZBTFNFOworICBHc3RJbmRleEFzc29jaWF0aW9uIGFzc29jaWF0aW9uc1syXTsKKworICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJBZGRpbmcga2V5PSVkIGluZGV4IGVudHJ5ICUiIEdTVF9USU1FX0ZPUk1BVAorICAgICAgIiBAIG9mZnNldCAweCUwOCIgR19HSU5UNjRfTU9ESUZJRVIgIngiLCBrZXksIEdTVF9USU1FX0FSR1MgKHRzKSwgb2Zmc2V0KTsKKworICBpZiAoR19MSUtFTFkgKCFmb3JjZSkpIHsKKworICAgIGlmICghcGFyc2UtPnByaXYtPnVwc3RyZWFtX3NlZWthYmxlKSB7CisgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInVwc3RyZWFtIG5vdCBzZWVrYWJsZTsgZGlzY2FyZGluZyIpOworICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qIEZJWE1FIG5lZWQgYmV0dGVyIGhlbHBlciBkYXRhIHN0cnVjdHVyZSB0aGF0IGhhbmRsZXMgdGhlc2UgaXNzdWVzCisgICAgICogcmVsYXRlZCB0byBvbmdvaW5nIGNvbGxlY3Rpbmcgb2YgaW5kZXggZW50cmllcyAqLworICAgIGlmIChwYXJzZS0+cHJpdi0+aW5kZXhfbGFzdF9vZmZzZXQgPj0gKGdpbnQ2NCkgb2Zmc2V0KSB7CisgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImFscmVhZHkgaGF2ZSBlbnRyaWVzIHVwIHRvIG9mZnNldCAiCisgICAgICAgICAgIjB4JTA4IiBHX0dJTlQ2NF9NT0RJRklFUiAieCIsIHBhcnNlLT5wcml2LT5pbmRleF9sYXN0X29mZnNldCk7CisgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChwYXJzZS0+cHJpdi0+aW5kZXhfbGFzdF90cykgJiYKKyAgICAgICAgR1NUX0NMT0NLX0RJRkYgKHBhcnNlLT5wcml2LT5pbmRleF9sYXN0X3RzLCB0cykgPAorICAgICAgICBwYXJzZS0+cHJpdi0+aWR4X2ludGVydmFsKSB7CisgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImVudHJ5IHRvbyBjbG9zZSB0byBsYXN0IHRpbWUgJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHBhcnNlLT5wcml2LT5pbmRleF9sYXN0X3RzKSk7CisgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLyogaWYgbGFzdCBpcyBub3QgcmVhbGx5IHRoZSBsYXN0IG9uZSAqLworICAgIGlmICghcGFyc2UtPnByaXYtPmluZGV4X2xhc3RfdmFsaWQpIHsKKyAgICAgIEdzdENsb2NrVGltZSBwcmV2X3RzOworCisgICAgICBnc3RfYmFzZV9wYXJzZV9maW5kX29mZnNldCAocGFyc2UsIHRzLCBUUlVFLCAmcHJldl90cyk7CisgICAgICBpZiAoR1NUX0NMT0NLX0RJRkYgKHByZXZfdHMsIHRzKSA8IHBhcnNlLT5wcml2LT5pZHhfaW50ZXJ2YWwpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsCisgICAgICAgICAgICAiZW50cnkgdG9vIGNsb3NlIHRvIGV4aXN0aW5nIGVudHJ5ICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHByZXZfdHMpKTsKKyAgICAgICAgcGFyc2UtPnByaXYtPmluZGV4X2xhc3Rfb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICBwYXJzZS0+cHJpdi0+aW5kZXhfbGFzdF90cyA9IHRzOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgICB9CisgICAgfQorICB9CisKKyAgYXNzb2NpYXRpb25zWzBdLmZvcm1hdCA9IEdTVF9GT1JNQVRfVElNRTsKKyAgYXNzb2NpYXRpb25zWzBdLnZhbHVlID0gdHM7CisgIGFzc29jaWF0aW9uc1sxXS5mb3JtYXQgPSBHU1RfRk9STUFUX0JZVEVTOworICBhc3NvY2lhdGlvbnNbMV0udmFsdWUgPSBvZmZzZXQ7CisKKyAgLyogaW5kZXggbWlnaHQgY2hhbmdlIG9uLXRoZS1mbHksIGFsdGhvdWdoIHRoYXQgd291bGQgYmUgbnV0dHkgYXBwIC4uLiAqLworICBnX3N0YXRpY19tdXRleF9sb2NrICgmcGFyc2UtPnByaXYtPmluZGV4X2xvY2spOworICBnc3RfaW5kZXhfYWRkX2Fzc29jaWF0aW9udiAocGFyc2UtPnByaXYtPmluZGV4LCBwYXJzZS0+cHJpdi0+aW5kZXhfaWQsCisgICAgICAoa2V5KSA/IEdTVF9BU1NPQ0lBVElPTl9GTEFHX0tFWV9VTklUIDogR1NUX0FTU09DSUFUSU9OX0ZMQUdfREVMVEFfVU5JVCwKKyAgICAgIDIsIChjb25zdCBHc3RJbmRleEFzc29jaWF0aW9uICopICZhc3NvY2lhdGlvbnMpOworICBnX3N0YXRpY19tdXRleF91bmxvY2sgKCZwYXJzZS0+cHJpdi0+aW5kZXhfbG9jayk7CisKKyAgaWYgKGtleSkgeworICAgIHBhcnNlLT5wcml2LT5pbmRleF9sYXN0X29mZnNldCA9IG9mZnNldDsKKyAgICBwYXJzZS0+cHJpdi0+aW5kZXhfbGFzdF90cyA9IHRzOworICB9CisKKyAgcmV0ID0gVFJVRTsKKworZXhpdDoKKyAgcmV0dXJuIHJldDsKK30KKworLyogY2hlY2sgZm9yIHNlZWthYmxlIHVwc3RyZWFtLCBhYm92ZSBhbmQgYmV5b25kIGEgbWVyZSBxdWVyeSAqLworc3RhdGljIHZvaWQKK2dzdF9iYXNlX3BhcnNlX2NoZWNrX3NlZWthYmlsaXR5IChHc3RCYXNlUGFyc2UgKiBwYXJzZSkKK3sKKyAgR3N0UXVlcnkgKnF1ZXJ5OworICBnYm9vbGVhbiBzZWVrYWJsZSA9IEZBTFNFOworICBnaW50NjQgc3RhcnQgPSAtMSwgc3RvcCA9IC0xOworICBndWludCBpZHhfaW50ZXJ2YWwgPSAwOworCisgIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19zZWVraW5nIChHU1RfRk9STUFUX0JZVEVTKTsKKyAgaWYgKCFnc3RfcGFkX3BlZXJfcXVlcnkgKHBhcnNlLT5zaW5rcGFkLCBxdWVyeSkpIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInNlZWtpbmcgcXVlcnkgZmFpbGVkIik7CisgICAgZ290byBkb25lOworICB9CisKKyAgZ3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmcgKHF1ZXJ5LCBOVUxMLCAmc2Vla2FibGUsICZzdGFydCwgJnN0b3ApOworCisgIC8qIHRyeSBoYXJkZXIgdG8gcXVlcnkgdXBzdHJlYW0gc2l6ZSBpZiB3ZSBkaWRuJ3QgZ2V0IGl0IHRoZSBmaXJzdCB0aW1lICovCisgIGlmIChzZWVrYWJsZSAmJiBzdG9wID09IC0xKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJkb2luZyBkdXJhdGlvbiBxdWVyeSB0byBmaXggdXAgdW5zZXQgc3RvcCIpOworICAgIGdzdF9wYWRfcXVlcnlfcGVlcl9kdXJhdGlvbiAocGFyc2UtPnNpbmtwYWQsIEdTVF9GT1JNQVRfQllURVMsICZzdG9wKTsKKyAgfQorCisgIC8qIGlmIHVwc3RyZWFtIGRvZXNuJ3Qga25vdyB0aGUgc2l6ZSwgaXQncyBsaWtlbHkgdGhhdCBpdCdzIG5vdCBzZWVrYWJsZSBpbgorICAgKiBwcmFjdGljZSBldmVuIGlmIGl0IHRlY2huaWNhbGx5IG1heSBiZSBzZWVrYWJsZSAqLworICBpZiAoc2Vla2FibGUgJiYgKHN0YXJ0ICE9IDAgfHwgc3RvcCA8PSBzdGFydCkpIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInNlZWthYmxlIGJ1dCB1bmtub3duIHN0YXJ0L3N0b3AgLT4gZGlzYWJsZSIpOworICAgIHNlZWthYmxlID0gRkFMU0U7CisgIH0KKworICAvKiBsZXQncyBub3QgcHV0IGV2ZXJ5IHNpbmdsZSBmcmFtZSBpbnRvIG91ciBpbmRleCAqLworICBpZiAoc2Vla2FibGUpIHsKKyAgICBpZiAoc3RvcCA8IDEwICogMTAyNCAqIDEwMjQpCisgICAgICBpZHhfaW50ZXJ2YWwgPSAxMDA7CisgICAgZWxzZSBpZiAoc3RvcCA8IDEwMCAqIDEwMjQgKiAxMDI0KQorICAgICAgaWR4X2ludGVydmFsID0gNTAwOworICAgIGVsc2UKKyAgICAgIGlkeF9pbnRlcnZhbCA9IDEwMDA7CisgIH0KKworZG9uZToKKyAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJzZWVrYWJsZTogJWQgKCUiIEdfR1VJTlQ2NF9GT1JNQVQgIiAtICUiCisgICAgICBHX0dVSU5UNjRfRk9STUFUICIpIiwgc2Vla2FibGUsIHN0YXJ0LCBzdG9wKTsKKyAgcGFyc2UtPnByaXYtPnVwc3RyZWFtX3NlZWthYmxlID0gc2Vla2FibGU7CisgIHBhcnNlLT5wcml2LT51cHN0cmVhbV9zaXplID0gc2Vla2FibGUgPyBzdG9wIDogMDsKKworICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImlkeF9pbnRlcnZhbDogJXVtcyIsIGlkeF9pbnRlcnZhbCk7CisgIHBhcnNlLT5wcml2LT5pZHhfaW50ZXJ2YWwgPSBpZHhfaW50ZXJ2YWwgKiBHU1RfTVNFQ09ORDsKK30KKworLyogc29tZSBtaXNjIGNoZWNrcyBvbiB1cHN0cmVhbSAqLworc3RhdGljIHZvaWQKK2dzdF9iYXNlX3BhcnNlX2NoZWNrX3Vwc3RyZWFtIChHc3RCYXNlUGFyc2UgKiBwYXJzZSkKK3sKKyAgZ2ludDY0IHN0b3A7CisKKyAgaWYgKGdzdF9wYWRfcXVlcnlfcGVlcl9kdXJhdGlvbiAocGFyc2UtPnNpbmtwYWQsIEdTVF9GT1JNQVRfVElNRSwgJnN0b3ApKQorICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoc3RvcCkgJiYgc3RvcCkgeworICAgICAgLyogdXBzdHJlYW0gaGFzIG9uZSwgYWNjZXB0IGl0IGFsc28sIGFuZCBubyBmdXJ0aGVyIHVwZGF0ZXMgKi8KKyAgICAgIGdzdF9iYXNlX3BhcnNlX3NldF9kdXJhdGlvbiAocGFyc2UsIEdTVF9GT1JNQVRfVElNRSwgc3RvcCwgMCk7CisgICAgICBwYXJzZS0+cHJpdi0+dXBzdHJlYW1faGFzX2R1cmF0aW9uID0gVFJVRTsKKyAgICB9CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJ1cHN0cmVhbV9oYXNfZHVyYXRpb246ICVkIiwKKyAgICAgIHBhcnNlLT5wcml2LT51cHN0cmVhbV9oYXNfZHVyYXRpb24pOworfQorCisvKiBjaGVja3Mgc3JjIGNhcHMgdG8gZGV0ZXJtaW5lIGlmIGRlYWxpbmcgd2l0aCBhdWRpbyBvciB2aWRlbyAqLworLyogVE9ETyBtYXliZSBmb3JlZ28gYXV0b21hZ2ljIHN0dWZmIGFuZCBsZXQgc3ViY2xhc3MgY29uZmlndXJlIGl0ID8gKi8KK3N0YXRpYyB2b2lkCitnc3RfYmFzZV9wYXJzZV9jaGVja19tZWRpYSAoR3N0QmFzZVBhcnNlICogcGFyc2UpCit7CisgIEdzdENhcHMgKmNhcHM7CisgIEdzdFN0cnVjdHVyZSAqczsKKworICBjYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChwYXJzZS0+c3JjcGFkKTsKKyAgaWYgKEdfTElLRUxZIChjYXBzKSAmJiAocyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApKSkgeworICAgIHBhcnNlLT5wcml2LT5pc192aWRlbyA9CisgICAgICAgIGdfc3RyX2hhc19wcmVmaXggKGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKHMpLCAidmlkZW8iKTsKKyAgfSBlbHNlIHsKKyAgICAvKiBoaXN0b3JpY2FsIGRlZmF1bHQgKi8KKyAgICBwYXJzZS0+cHJpdi0+aXNfdmlkZW8gPSBGQUxTRTsKKyAgfQorICBpZiAoY2FwcykKKyAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJtZWRpYSBpcyB2aWRlbzogJWQiLCBwYXJzZS0+cHJpdi0+aXNfdmlkZW8pOworfQorCisvKiB0YWtlcyBvd25lcnNoaXAgb2YgZnJhbWUgKi8KK3N0YXRpYyB2b2lkCitnc3RfYmFzZV9wYXJzZV9xdWV1ZV9mcmFtZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsIEdzdEJhc2VQYXJzZUZyYW1lICogZnJhbWUpCit7CisgIGlmICghKGZyYW1lLT5fcHJpdmF0ZV9mbGFncyAmIEdTVF9CQVNFX1BBUlNFX0ZSQU1FX1BSSVZBVEVfRkxBR19OT0FMTE9DKSkgeworICAgIC8qIGZyYW1lIGFsbG9jYXRlZCBvbiB0aGUgaGVhcCwgd2UgY2FuIGp1c3QgdGFrZSBvd25lcnNoaXAgKi8KKyAgICBnX3F1ZXVlX3B1c2hfdGFpbCAoJnBhcnNlLT5wcml2LT5xdWV1ZWRfZnJhbWVzLCBmcmFtZSk7CisgICAgR1NUX1RSQUNFICgicXVldWVkIGZyYW1lICVwIiwgZnJhbWUpOworICB9IGVsc2UgeworICAgIEdzdEJhc2VQYXJzZUZyYW1lICpjb3B5OworCisgICAgLyogcHJvYmFibHkgYWxsb2NhdGVkIG9uIHRoZSBzdGFjaywgbXVzdCBtYWtlIGEgcHJvcGVyIGNvcHkgKi8KKyAgICBjb3B5ID0gZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfY29weSAoZnJhbWUpOworICAgIGdfcXVldWVfcHVzaF90YWlsICgmcGFyc2UtPnByaXYtPnF1ZXVlZF9mcmFtZXMsIGNvcHkpOworICAgIEdTVF9UUkFDRSAoInF1ZXVlZCBmcmFtZSAlcCAoY29weSBvZiAlcCkiLCBjb3B5LCBmcmFtZSk7CisgICAgZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfZnJlZSAoZnJhbWUpOworICB9Cit9CisKKy8qIGdzdF9iYXNlX3BhcnNlX2hhbmRsZV9hbmRfcHVzaF9idWZmZXI6CisgKiBAcGFyc2U6ICNHc3RCYXNlUGFyc2UuCisgKiBAa2xhc3M6ICNHc3RCYXNlUGFyc2VDbGFzcy4KKyAqIEBmcmFtZTogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RCYXNlUGFyc2VGcmFtZQorICoKKyAqIFBhcnNlcyB0aGUgZnJhbWUgZnJvbSBnaXZlbiBidWZmZXIgYW5kIHB1c2hlcyBpdCBmb3J3YXJkLiBBbHNvIHBlcmZvcm1zCisgKiB0aW1lc3RhbXAgaGFuZGxpbmcgYW5kIGNoZWNrcyB0aGUgc2VnbWVudCBsaW1pdHMuCisgKgorICogVGhpcyBpcyBjYWxsZWQgd2l0aCBzcmNwYWQgU1RSRUFNX0xPQ0sgaGVsZC4KKyAqCisgKiBSZXR1cm5zOiAjR3N0Rmxvd1JldHVybgorICovCitzdGF0aWMgR3N0Rmxvd1JldHVybgorZ3N0X2Jhc2VfcGFyc2VfaGFuZGxlX2FuZF9wdXNoX2ZyYW1lIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKKyAgICBHc3RCYXNlUGFyc2VDbGFzcyAqIGtsYXNzLCBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lKQoreworICBHc3RGbG93UmV0dXJuIHJldDsKKyAgZ2ludDY0IG9mZnNldDsKKyAgR3N0QnVmZmVyICpidWZmZXI7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZyYW1lICE9IE5VTEwsIEdTVF9GTE9XX0VSUk9SKTsKKworICBidWZmZXIgPSBmcmFtZS0+YnVmZmVyOworCisgIGlmIChwYXJzZS0+cHJpdi0+ZGlzY29udCkgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAibWFya2luZyBESVNDT05UIik7CisgICAgR1NUX0JVRkZFUl9GTEFHX1NFVCAoYnVmZmVyLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCk7CisgICAgcGFyc2UtPnByaXYtPmRpc2NvbnQgPSBGQUxTRTsKKyAgfQorCisgIC8qIHNvbWUgb25lLXRpbWUgc3RhcnQtdXAgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKCFwYXJzZS0+cHJpdi0+ZnJhbWVjb3VudCkpIHsKKyAgICBnc3RfYmFzZV9wYXJzZV9jaGVja19zZWVrYWJpbGl0eSAocGFyc2UpOworICAgIGdzdF9iYXNlX3BhcnNlX2NoZWNrX3Vwc3RyZWFtIChwYXJzZSk7CisgIH0KKworICBHU1RfTE9HX09CSkVDVCAocGFyc2UsCisgICAgICAicGFyc2luZyBmcmFtZSBhdCBvZmZzZXQgJSIgR19HVUlOVDY0X0ZPUk1BVAorICAgICAgIiAoJSMiIEdfR0lOVDY0X01PRElGSUVSICJ4KSBvZiBzaXplICUiIEdfR1NJWkVfRk9STUFULAorICAgICAgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZmZlciksIEdTVF9CVUZGRVJfT0ZGU0VUIChidWZmZXIpLAorICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSk7CisKKyAgLyogdXNlIGRlZmF1bHQgaGFuZGxlciB0byBwcm92aWRlIGluaXRpYWwgKHVwc3RyZWFtKSBtZXRhZGF0YSAqLworICBnc3RfYmFzZV9wYXJzZV9wYXJzZV9mcmFtZSAocGFyc2UsIGZyYW1lKTsKKworICAvKiBzdG9yZSBvZmZzZXQgYXMgaXQgbWlnaHQgZ2V0IG92ZXJ3cml0dGVuICovCisgIG9mZnNldCA9IEdTVF9CVUZGRVJfT0ZGU0VUIChidWZmZXIpOworICByZXQgPSBrbGFzcy0+cGFyc2VfZnJhbWUgKHBhcnNlLCBmcmFtZSk7CisgIC8qIHN5bmMgKi8KKyAgYnVmZmVyID0gZnJhbWUtPmJ1ZmZlcjsKKyAgLyogc3ViY2xhc3MgbXVzdCBwbGF5IG5pY2UgKi8KKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGJ1ZmZlciAhPSBOVUxMLCBHU1RfRkxPV19FUlJPUik7CisKKyAgLyogY2hlY2sgaWYgc3ViY2xhc3MvZm9ybWF0IGNhbiBwcm92aWRlIHRzLgorICAgKiBJZiBzbywgdGhhdCBhbGxvd3MgYW5kIGVuYWJsZXMgZXh0cmEgc2VlayBhbmQgZHVyYXRpb24gZGV0ZXJtaW5pbmcgb3B0aW9ucyAqLworICBpZiAoR19VTkxJS0VMWSAocGFyc2UtPnByaXYtPmZpcnN0X2ZyYW1lX29mZnNldCA8IDAgJiYgcmV0ID09IEdTVF9GTE9XX09LKSkgeworICAgIGlmIChHU1RfQlVGRkVSX1RJTUVTVEFNUF9JU19WQUxJRCAoYnVmZmVyKSAmJiBwYXJzZS0+cHJpdi0+aGFzX3RpbWluZ19pbmZvCisgICAgICAgICYmIHBhcnNlLT5wcml2LT5wYWRfbW9kZSA9PSBHU1RfQUNUSVZBVEVfUFVMTCkgeworICAgICAgcGFyc2UtPnByaXYtPmZpcnN0X2ZyYW1lX29mZnNldCA9IG9mZnNldDsKKyAgICAgIHBhcnNlLT5wcml2LT5maXJzdF9mcmFtZV90cyA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpOworICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJzdWJjbGFzcyBwcm92aWRlZCB0cyAlIiBHU1RfVElNRV9GT1JNQVQKKyAgICAgICAgICAiIGZvciBmaXJzdCBmcmFtZSBhdCBvZmZzZXQgJSIgR19HSU5UNjRfRk9STUFULAorICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHBhcnNlLT5wcml2LT5maXJzdF9mcmFtZV90cyksCisgICAgICAgICAgcGFyc2UtPnByaXYtPmZpcnN0X2ZyYW1lX29mZnNldCk7CisgICAgICBpZiAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChwYXJzZS0+cHJpdi0+ZHVyYXRpb24pKSB7CisgICAgICAgIGdpbnQ2NCBvZmY7CisgICAgICAgIEdzdENsb2NrVGltZSBsYXN0X3RzID0gR19NQVhJTlQ2NDsKKworICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIm5vIGR1cmF0aW9uOyB0cnlpbmcgc2NhbiB0byBkZXRlcm1pbmUiKTsKKyAgICAgICAgZ3N0X2Jhc2VfcGFyc2VfbG9jYXRlX3RpbWUgKHBhcnNlLCAmbGFzdF90cywgJm9mZik7CisgICAgICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAobGFzdF90cykpCisgICAgICAgICAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X2R1cmF0aW9uIChwYXJzZSwgR1NUX0ZPUk1BVF9USU1FLCBsYXN0X3RzLCAwKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgLyogZGlzYWJsZSBmdXJ0aGVyIGNoZWNrcyAqLworICAgICAgcGFyc2UtPnByaXYtPmZpcnN0X2ZyYW1lX29mZnNldCA9IDA7CisgICAgfQorICB9CisKKyAgLyogYWdhaW4gdXNlIGRlZmF1bHQgaGFuZGxlciB0byBhZGQgbWlzc2luZyBtZXRhZGF0YTsKKyAgICogd2UgbWF5IGhhdmUgbmV3IGluZm9ybWF0aW9uIG9uIGZyYW1lIHByb3BlcnRpZXMgKi8KKyAgZ3N0X2Jhc2VfcGFyc2VfcGFyc2VfZnJhbWUgKHBhcnNlLCBmcmFtZSk7CisgIGlmIChHU1RfQlVGRkVSX1RJTUVTVEFNUF9JU19WQUxJRCAoYnVmZmVyKSAmJgorICAgICAgR1NUX0JVRkZFUl9EVVJBVElPTl9JU19WQUxJRCAoYnVmZmVyKSkgeworICAgIHBhcnNlLT5wcml2LT5uZXh0X3RzID0KKyAgICAgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgKyBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpOworICB9IGVsc2UgeworICAgIC8qIHdlIGxvc3QgdHJhY2ssIGRvIG5vdCBwcm9kdWNlIGJvZ3VzIHRpbWUgbmV4dCB0aW1lIGFyb3VuZAorICAgICAqIChwcm9iYWJseSBtZWFucyBwYXJzZXIgc3ViY2xhc3MgaGFzIGdpdmVuIHVwIG9uIHBhcnNpbmcgYXMgd2VsbCkgKi8KKyAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIm5vIG5leHQgZmFsbGJhY2sgdGltZXN0YW1wIik7CisgICAgcGFyc2UtPnByaXYtPm5leHRfdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICB9CisKKyAgaWYgKHBhcnNlLT5wcml2LT51cHN0cmVhbV9zZWVrYWJsZSAmJiBwYXJzZS0+cHJpdi0+ZXhhY3RfcG9zaXRpb24gJiYKKyAgICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QX0lTX1ZBTElEIChidWZmZXIpKQorICAgIGdzdF9iYXNlX3BhcnNlX2FkZF9pbmRleF9lbnRyeSAocGFyc2UsIG9mZnNldCwKKyAgICAgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlciksCisgICAgICAgICFHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUIChidWZmZXIsIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKSwgRkFMU0UpOworCisgIC8qIEZpcnN0IGJ1ZmZlcnMgYXJlIGRyb3BwZWQsIHRoaXMgbWVhbnMgdGhhdCB0aGUgc3ViY2xhc3MgbmVlZHMgbW9yZQorICAgKiBmcmFtZXMgdG8gZGVjaWRlIG9uIHRoZSBmb3JtYXQgYW5kIHF1ZXVlcyB0aGVtIGludGVybmFsbHkgKi8KKyAgLyogY29udmVydCBpbnRlcm5hbCBmbG93IHRvIE9LIGFuZCBtYXJrIGRpc2NvbnQgZm9yIHRoZSBuZXh0IGJ1ZmZlci4gKi8KKyAgaWYgKHJldCA9PSBHU1RfQkFTRV9QQVJTRV9GTE9XX0RST1BQRUQpIHsKKyAgICBnc3RfYmFzZV9wYXJzZV9mcmFtZV9mcmVlIChmcmFtZSk7CisgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICB9IGVsc2UgaWYgKHJldCA9PSBHU1RfQkFTRV9QQVJTRV9GTE9XX1FVRVVFRCkgeworICAgIGdzdF9iYXNlX3BhcnNlX3F1ZXVlX2ZyYW1lIChwYXJzZSwgZnJhbWUpOworICAgIHJldHVybiBHU1RfRkxPV19PSzsKKyAgfSBlbHNlIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spIHsKKyAgICByZXR1cm4gcmV0OworICB9CisKKyAgLyogQWxsIE9LLCBwdXNoIHF1ZXVlZCBmcmFtZXMgaWYgdGhlcmUgYXJlIGFueSAqLworICBpZiAoR19VTkxJS0VMWSAoIWdfcXVldWVfaXNfZW1wdHkgKCZwYXJzZS0+cHJpdi0+cXVldWVkX2ZyYW1lcykpKSB7CisgICAgR3N0QmFzZVBhcnNlRnJhbWUgKnF1ZXVlZF9mcmFtZTsKKworICAgIHdoaWxlICgocXVldWVkX2ZyYW1lID0gZ19xdWV1ZV9wb3BfaGVhZCAoJnBhcnNlLT5wcml2LT5xdWV1ZWRfZnJhbWVzKSkpIHsKKyAgICAgIGdzdF9iYXNlX3BhcnNlX3B1c2hfZnJhbWUgKHBhcnNlLCBxdWV1ZWRfZnJhbWUpOworICAgICAgZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfZnJlZSAocXVldWVkX2ZyYW1lKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gZ3N0X2Jhc2VfcGFyc2VfcHVzaF9mcmFtZSAocGFyc2UsIGZyYW1lKTsKK30KKworLyoqCisgKiBnc3RfYmFzZV9wYXJzZV9wdXNoX2ZyYW1lOgorICogQHBhcnNlOiAjR3N0QmFzZVBhcnNlLgorICogQGZyYW1lOiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdEJhc2VQYXJzZUZyYW1lCisgKgorICogUHVzaGVzIHRoZSBmcmFtZSBkb3duc3RyZWFtLCBzZW5kcyBhbnkgcGVuZGluZyBldmVudHMgYW5kCisgKiBkb2VzIHNvbWUgdGltZXN0YW1wIGFuZCBzZWdtZW50IGhhbmRsaW5nLiBUYWtlcyBvd25lcnNoaXAKKyAqIG9mIEBmcmFtZSBhbmQgd2lsbCBjbGVhciBpdCAoaWYgaXQgd2FzIGluaXRpYWxpc2VkIHdpdGgKKyAqIGdzdF9iYXNlX3BhcnNlX2ZyYW1lX2luaXQoKSkgb3IgZnJlZSBpdC4KKyAqCisgKiBUaGlzIG11c3QgYmUgY2FsbGVkIHdpdGggc2lua3BhZCBTVFJFQU1fTE9DSyBoZWxkLgorICoKKyAqIFJldHVybnM6ICNHc3RGbG93UmV0dXJuCisgKgorICogU2luY2U6IDAuMTAuMzMKKyAqLworR3N0Rmxvd1JldHVybgorZ3N0X2Jhc2VfcGFyc2VfcHVzaF9mcmFtZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsIEdzdEJhc2VQYXJzZUZyYW1lICogZnJhbWUpCit7CisgIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7CisgIEdzdENsb2NrVGltZSBsYXN0X3N0YXJ0ID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgR3N0Q2xvY2tUaW1lIGxhc3Rfc3RvcCA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgIEdzdEJhc2VQYXJzZUNsYXNzICprbGFzcyA9IEdTVF9CQVNFX1BBUlNFX0dFVF9DTEFTUyAocGFyc2UpOworICBHc3RCdWZmZXIgKmJ1ZmZlcjsKKyAgZ3NpemUgc2l6ZTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZnJhbWUgIT0gTlVMTCwgR1NUX0ZMT1dfRVJST1IpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZnJhbWUtPmJ1ZmZlciAhPSBOVUxMLCBHU1RfRkxPV19FUlJPUik7CisKKyAgR1NUX1RSQUNFX09CSkVDVCAocGFyc2UsICJwdXNoaW5nIGZyYW1lICVwIiwgZnJhbWUpOworCisgIGJ1ZmZlciA9IGZyYW1lLT5idWZmZXI7CisKKyAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLAorICAgICAgInByb2Nlc3NpbmcgYnVmZmVyIG9mIHNpemUgJSIgR19HU0laRV9GT1JNQVQgIiB3aXRoIHRzICUiIEdTVF9USU1FX0ZPUk1BVAorICAgICAgIiwgZHVyYXRpb24gJSIgR1NUX1RJTUVfRk9STUFULCBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpLAorICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikpLAorICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSkpOworCisgIC8qIHVwZGF0ZSBzdGF0cyAqLworICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKTsKKyAgcGFyc2UtPnByaXYtPmJ5dGVjb3VudCArPSBzaXplOworICBpZiAoR19MSUtFTFkgKCEoZnJhbWUtPmZsYWdzICYgR1NUX0JBU0VfUEFSU0VfRlJBTUVfRkxBR19OT19GUkFNRSkpKSB7CisgICAgcGFyc2UtPnByaXYtPmZyYW1lY291bnQrKzsKKyAgICBpZiAoR1NUX0JVRkZFUl9EVVJBVElPTl9JU19WQUxJRCAoYnVmZmVyKSkgeworICAgICAgcGFyc2UtPnByaXYtPmFjY19kdXJhdGlvbiArPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpOworICAgIH0KKyAgfQorICAvKiAwIG1lYW5zIGRpc2FibGVkICovCisgIGlmIChwYXJzZS0+cHJpdi0+dXBkYXRlX2ludGVydmFsIDwgMCkKKyAgICBwYXJzZS0+cHJpdi0+dXBkYXRlX2ludGVydmFsID0gNTA7CisgIGVsc2UgaWYgKHBhcnNlLT5wcml2LT51cGRhdGVfaW50ZXJ2YWwgPiAwICYmCisgICAgICAocGFyc2UtPnByaXYtPmZyYW1lY291bnQgJSBwYXJzZS0+cHJpdi0+dXBkYXRlX2ludGVydmFsKSA9PSAwKQorICAgIGdzdF9iYXNlX3BhcnNlX3VwZGF0ZV9kdXJhdGlvbiAocGFyc2UpOworCisgIGlmIChHU1RfQlVGRkVSX1RJTUVTVEFNUF9JU19WQUxJRCAoYnVmZmVyKSkKKyAgICBsYXN0X3N0YXJ0ID0gbGFzdF9zdG9wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcik7CisgIGlmIChsYXN0X3N0YXJ0ICE9IEdTVF9DTE9DS19USU1FX05PTkUKKyAgICAgICYmIEdTVF9CVUZGRVJfRFVSQVRJT05fSVNfVkFMSUQgKGJ1ZmZlcikpCisgICAgbGFzdF9zdG9wID0gbGFzdF9zdGFydCArIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcik7CisKKyAgLyogc2hvdWxkIGhhdmUgY2FwcyBieSBub3cgKi8KKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF9wYWRfaGFzX2N1cnJlbnRfY2FwcyAocGFyc2UtPnNyY3BhZCksCisgICAgICBHU1RfRkxPV19FUlJPUik7CisKKyAgLyogc2VnbWVudCBhZGp1c3RtZW50IG1hZ2ljOyBvbmx5IGlmIHdlIGFyZSBydW5uaW5nIHRoZSB3aG9sZSBzaG93ICovCisgIGlmICghcGFyc2UtPnByaXYtPnBhc3N0aHJvdWdoICYmIHBhcnNlLT5zZWdtZW50LnJhdGUgPiAwLjAgJiYKKyAgICAgIChwYXJzZS0+cHJpdi0+cGFkX21vZGUgPT0gR1NUX0FDVElWQVRFX1BVTEwgfHwKKyAgICAgICAgICBwYXJzZS0+cHJpdi0+dXBzdHJlYW1fc2Vla2FibGUpKSB7CisgICAgLyogc2VnbWVudCB0aW1lcyBhcmUgdHlwaWNhbGx5IGVzdGltYXRlcywKKyAgICAgKiBhY3R1YWwgZnJhbWUgZGF0YSBtaWdodCBsZWFkIHN1YmNsYXNzIHRvIGRpZmZlcmVudCB0aW1lc3RhbXBzLAorICAgICAqIHNvIG92ZXJyaWRlIHNlZ21lbnQgc3RhcnQgZnJvbSB3aGF0IGlzIHN1cHBsaWVkIHRoZXJlICovCisgICAgaWYgKEdfVU5MSUtFTFkgKHBhcnNlLT5wcml2LT5wZW5kaW5nX3NlZ21lbnQgJiYgIXBhcnNlLT5wcml2LT5leGFjdF9wb3NpdGlvbgorICAgICAgICAgICAgJiYgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGxhc3Rfc3RhcnQpKSkgeworICAgICAgZ3N0X2V2ZW50X3VucmVmIChwYXJzZS0+cHJpdi0+cGVuZGluZ19zZWdtZW50KTsKKyAgICAgIHBhcnNlLT5zZWdtZW50LnN0YXJ0ID0KKyAgICAgICAgICBNSU4gKChndWludDY0KSBsYXN0X3N0YXJ0LCAoZ3VpbnQ2NCkgcGFyc2UtPnNlZ21lbnQuc3RvcCk7CisKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLAorICAgICAgICAgICJhZGp1c3RpbmcgcGVuZGluZyBzZWdtZW50IHN0YXJ0IHRvICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgICAgICBHU1RfVElNRV9BUkdTIChwYXJzZS0+c2VnbWVudC5zdGFydCkpOworCisgICAgICBwYXJzZS0+cHJpdi0+cGVuZGluZ19zZWdtZW50ID0gZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmcGFyc2UtPnNlZ21lbnQpOworICAgIH0KKyAgICAvKiBoYW5kbGUgZ2FwcywgZS5nLiBub24temVybyBzdGFydC10aW1lLCBpbiBhcyBtdWNoIG5vdCBoYW5kbGVkIGJ5IGFib3ZlICovCisgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChwYXJzZS0+c2VnbWVudC5wb3NpdGlvbikgJiYKKyAgICAgICAgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGxhc3Rfc3RhcnQpKSB7CisgICAgICBHc3RDbG9ja1RpbWVEaWZmIGRpZmY7CisKKyAgICAgIC8qIG9ubHkgc2VuZCBuZXdzZWdtZW50cyB3aXRoIGluY3JlYXNpbmcgc3RhcnQgdGltZXMsCisgICAgICAgKiBvdGhlcndpc2UgaWYgdGhlc2UgZ28gYmFjayBhbmQgZm9ydGggZG93bnN0cmVhbSAoc2lua3MpIGluY3JlYXNlCisgICAgICAgKiBhY2N1bXVsYXRlZCB0aW1lIGFuZCBydW5uaW5nX3RpbWUgKi8KKyAgICAgIGRpZmYgPSBHU1RfQ0xPQ0tfRElGRiAocGFyc2UtPnNlZ21lbnQucG9zaXRpb24sIGxhc3Rfc3RhcnQpOworICAgICAgaWYgKEdfVU5MSUtFTFkgKGRpZmYgPiAyICogR1NUX1NFQ09ORAorICAgICAgICAgICAgICAmJiBsYXN0X3N0YXJ0ID4gcGFyc2UtPnNlZ21lbnQuc3RhcnQKKyAgICAgICAgICAgICAgJiYgKCFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocGFyc2UtPnNlZ21lbnQuc3RvcCkKKyAgICAgICAgICAgICAgICAgIHx8IGxhc3Rfc3RhcnQgPCBwYXJzZS0+c2VnbWVudC5zdG9wKSkpIHsKKworICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwKKyAgICAgICAgICAgICJHYXAgb2YgJSIgR19HSU5UNjRfRk9STUFUICIgbnMgZGV0ZWN0ZWQgaW4gc3RyZWFtICIgIiglIgorICAgICAgICAgICAgR1NUX1RJTUVfRk9STUFUICIgLT4gJSIgR1NUX1RJTUVfRk9STUFUICIpLiAiCisgICAgICAgICAgICAiU2VuZGluZyB1cGRhdGVkIE5FV1NFR01FTlQgZXZlbnRzIiwgZGlmZiwKKyAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHBhcnNlLT5zZWdtZW50LnBvc2l0aW9uKSwKKyAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKGxhc3Rfc3RhcnQpKTsKKworICAgICAgICBpZiAoR19VTkxJS0VMWSAocGFyc2UtPnByaXYtPnBlbmRpbmdfc2VnbWVudCkpIHsKKyAgICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKHBhcnNlLT5wcml2LT5wZW5kaW5nX3NlZ21lbnQpOworICAgICAgICAgIHBhcnNlLT5zZWdtZW50LnN0YXJ0ID0gbGFzdF9zdGFydDsKKyAgICAgICAgICBwYXJzZS0+c2VnbWVudC50aW1lID0gbGFzdF9zdGFydDsKKyAgICAgICAgICBwYXJzZS0+cHJpdi0+cGVuZGluZ19zZWdtZW50ID0KKyAgICAgICAgICAgICAgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmcGFyc2UtPnNlZ21lbnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8qIHNraXAgZ2FwIEZJWE1FICovCisgICAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYXJzZS0+c3JjcGFkLAorICAgICAgICAgICAgICBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZwYXJzZS0+c2VnbWVudCkpOworICAgICAgICB9CisgICAgICAgIHBhcnNlLT5zZWdtZW50LnBvc2l0aW9uID0gbGFzdF9zdGFydDsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICAvKiBhbmQgc2hvdWxkIHRoZW4gYWxzbyBiZSBsaW5rZWQgZG93bnN0cmVhbSwgc28gc2FmZSB0byBzZW5kIHNvbWUgZXZlbnRzICovCisgIGlmIChHX1VOTElLRUxZIChwYXJzZS0+cHJpdi0+Y2xvc2Vfc2VnbWVudCkpIHsKKyAgICAvKiBvbmx5IHNldCB1cCBieSBsb29wICovCisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJsb29wIHNlbmRpbmcgY2xvc2Ugc2VnbWVudCIpOworICAgIGdzdF9wYWRfcHVzaF9ldmVudCAocGFyc2UtPnNyY3BhZCwgcGFyc2UtPnByaXYtPmNsb3NlX3NlZ21lbnQpOworICAgIHBhcnNlLT5wcml2LT5jbG9zZV9zZWdtZW50ID0gTlVMTDsKKyAgfQorICBpZiAoR19VTkxJS0VMWSAocGFyc2UtPnByaXYtPnBlbmRpbmdfc2VnbWVudCkpIHsKKyAgICBHc3RFdmVudCAqcGVuZGluZ19zZWdtZW50OworCisgICAgcGVuZGluZ19zZWdtZW50ID0gcGFyc2UtPnByaXYtPnBlbmRpbmdfc2VnbWVudDsKKyAgICBwYXJzZS0+cHJpdi0+cGVuZGluZ19zZWdtZW50ID0gTlVMTDsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiJXMgcHVzaCBwZW5kaW5nIHNlZ21lbnQiLAorICAgICAgICBwYXJzZS0+cHJpdi0+cGFkX21vZGUgPT0gR1NUX0FDVElWQVRFX1BVTEwgPyAibG9vcCIgOiAiY2hhaW4iKTsKKyAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhcnNlLT5zcmNwYWQsIHBlbmRpbmdfc2VnbWVudCk7CisKKyAgICAvKiBoYXZlIGNhcHM7IGNoZWNrIGlkZW50aXR5ICovCisgICAgZ3N0X2Jhc2VfcGFyc2VfY2hlY2tfbWVkaWEgKHBhcnNlKTsKKyAgfQorCisgIC8qIHVwZGF0ZSBiaXRyYXRlcyBhbmQgb3B0aW9uYWxseSBwb3N0IGNvcnJlc3BvbmRpbmcgdGFncworICAgKiAoZm9sbG93aW5nIG5ld3NlZ21lbnQpICovCisgIGdzdF9iYXNlX3BhcnNlX3VwZGF0ZV9iaXRyYXRlcyAocGFyc2UsIGZyYW1lKTsKKworICBpZiAoR19VTkxJS0VMWSAocGFyc2UtPnByaXYtPnBlbmRpbmdfZXZlbnRzKSkgeworICAgIEdMaXN0ICpsOworCisgICAgZm9yIChsID0gcGFyc2UtPnByaXYtPnBlbmRpbmdfZXZlbnRzOyBsICE9IE5VTEw7IGwgPSBsLT5uZXh0KSB7CisgICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhcnNlLT5zcmNwYWQsIEdTVF9FVkVOVCAobC0+ZGF0YSkpOworICAgIH0KKyAgICBnX2xpc3RfZnJlZSAocGFyc2UtPnByaXYtPnBlbmRpbmdfZXZlbnRzKTsKKyAgICBwYXJzZS0+cHJpdi0+cGVuZGluZ19ldmVudHMgPSBOVUxMOworICB9CisKKyAgaWYgKGtsYXNzLT5wcmVfcHVzaF9mcmFtZSkgeworICAgIHJldCA9IGtsYXNzLT5wcmVfcHVzaF9mcmFtZSAocGFyc2UsIGZyYW1lKTsKKyAgfSBlbHNlIHsKKyAgICBmcmFtZS0+ZmxhZ3MgfD0gR1NUX0JBU0VfUEFSU0VfRlJBTUVfRkxBR19DTElQOworICB9CisKKyAgLyogdGFrZSBmaW5hbCBvd25lcnNoaXAgb2YgZnJhbWUgYnVmZmVyICovCisgIGJ1ZmZlciA9IGZyYW1lLT5idWZmZXI7CisgIGZyYW1lLT5idWZmZXIgPSBOVUxMOworCisgIC8qIHN1YmNsYXNzIG11c3QgcGxheSBuaWNlICovCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChidWZmZXIgIT0gTlVMTCwgR1NUX0ZMT1dfRVJST1IpOworCisgIHBhcnNlLT5wcml2LT5zZWVuX2tleWZyYW1lIHw9IHBhcnNlLT5wcml2LT5pc192aWRlbyAmJgorICAgICAgIUdTVF9CVUZGRVJfRkxBR19JU19TRVQgKGJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpOworCisgIGlmIChmcmFtZS0+ZmxhZ3MgJiBHU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX0NMSVApIHsKKyAgICBpZiAoR1NUX0JVRkZFUl9USU1FU1RBTVBfSVNfVkFMSUQgKGJ1ZmZlcikgJiYKKyAgICAgICAgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHBhcnNlLT5zZWdtZW50LnN0b3ApICYmCisgICAgICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID4KKyAgICAgICAgcGFyc2UtPnNlZ21lbnQuc3RvcCArIHBhcnNlLT5wcml2LT5sZWFkX291dF90cykgeworICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiRHJvcHBlZCBmcmFtZSwgYWZ0ZXIgc2VnbWVudCIpOworICAgICAgcmV0ID0gR1NUX0ZMT1dfVU5FWFBFQ1RFRDsKKyAgICB9IGVsc2UgaWYgKEdTVF9CVUZGRVJfVElNRVNUQU1QX0lTX1ZBTElEIChidWZmZXIpICYmCisgICAgICAgIEdTVF9CVUZGRVJfRFVSQVRJT05fSVNfVkFMSUQgKGJ1ZmZlcikgJiYKKyAgICAgICAgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHBhcnNlLT5zZWdtZW50LnN0YXJ0KSAmJgorICAgICAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSArIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgKworICAgICAgICBwYXJzZS0+cHJpdi0+bGVhZF9pbl90cyA8IHBhcnNlLT5zZWdtZW50LnN0YXJ0KSB7CisgICAgICBpZiAocGFyc2UtPnByaXYtPnNlZW5fa2V5ZnJhbWUpIHsKKyAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiRnJhbWUgYmVmb3JlIHNlZ21lbnQsIGFmdGVyIGtleWZyYW1lIik7CisgICAgICAgIHJldCA9IEdTVF9GTE9XX09LOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiRHJvcHBlZCBmcmFtZSwgYmVmb3JlIHNlZ21lbnQiKTsKKyAgICAgICAgcmV0ID0gR1NUX0JBU0VfUEFSU0VfRkxPV19EUk9QUEVEOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICByZXQgPSBHU1RfRkxPV19PSzsKKyAgICB9CisgIH0KKworICBpZiAocmV0ID09IEdTVF9CQVNFX1BBUlNFX0ZMT1dfRFJPUFBFRCkgeworICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgImZyYW1lICglIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzKSBkcm9wcGVkIiwgc2l6ZSk7CisgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKyAgICByZXQgPSBHU1RfRkxPV19PSzsKKyAgfSBlbHNlIGlmIChyZXQgPT0gR1NUX0ZMT1dfT0spIHsKKyAgICBpZiAocGFyc2UtPnNlZ21lbnQucmF0ZSA+IDAuMCkgeworICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAicHVzaGluZyBmcmFtZSAoJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcykgbm93Li4iLAorICAgICAgICAgIHNpemUpOworICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoIChwYXJzZS0+c3JjcGFkLCBidWZmZXIpOworICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiZnJhbWUgcHVzaGVkLCBmbG93ICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOworICAgIH0gZWxzZSB7CisgICAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJmcmFtZSAoJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcykgcXVldWVkIGZvciBub3ciLAorICAgICAgICAgIHNpemUpOworICAgICAgcGFyc2UtPnByaXYtPmJ1ZmZlcnNfcXVldWVkID0KKyAgICAgICAgICBnX3NsaXN0X3ByZXBlbmQgKHBhcnNlLT5wcml2LT5idWZmZXJzX3F1ZXVlZCwgYnVmZmVyKTsKKyAgICAgIHJldCA9IEdTVF9GTE9XX09LOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJmcmFtZSAoJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcykgbm90IHB1c2hlZDogJXMiLAorICAgICAgICBzaXplLCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7CisgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKyAgICAvKiBpZiB3ZSBhcmUgbm90IHN1ZmZpY2llbnRseSBpbiBjb250cm9sLCBsZXQgdXBzdHJlYW0gZGVjaWRlIG9uIEVPUyAqLworICAgIGlmIChyZXQgPT0gR1NUX0ZMT1dfVU5FWFBFQ1RFRCAmJgorICAgICAgICAocGFyc2UtPnByaXYtPnBhc3N0aHJvdWdoIHx8CisgICAgICAgICAgICAocGFyc2UtPnByaXYtPnBhZF9tb2RlID09IEdTVF9BQ1RJVkFURV9QVVNIICYmCisgICAgICAgICAgICAgICAgIXBhcnNlLT5wcml2LT51cHN0cmVhbV9zZWVrYWJsZSkpKQorICAgICAgcmV0ID0gR1NUX0ZMT1dfT0s7CisgIH0KKworICAvKiBVcGRhdGUgY3VycmVudCBydW5uaW5nIHNlZ21lbnQgcG9zaXRpb24gKi8KKyAgaWYgKHJldCA9PSBHU1RfRkxPV19PSyAmJiBsYXN0X3N0b3AgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSAmJgorICAgICAgcGFyc2UtPnNlZ21lbnQucG9zaXRpb24gPCBsYXN0X3N0b3ApCisgICAgcGFyc2UtPnNlZ21lbnQucG9zaXRpb24gPSBsYXN0X3N0b3A7CisKKyAgZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfZnJlZSAoZnJhbWUpOworCisgIHJldHVybiByZXQ7Cit9CisKKworLyogZ3N0X2Jhc2VfcGFyc2VfZHJhaW46CisgKgorICogRHJhaW5zIHRoZSBhZGFwdGVyIHVudGlsIGl0IGlzIGVtcHR5LiBJdCBkZWNyZWFzZXMgdGhlIG1pbl9mcmFtZV9zaXplIHRvCisgKiBtYXRjaCB0aGUgY3VycmVudCBhZGFwdGVyIHNpemUgYW5kIGNhbGxzIGNoYWluIG1ldGhvZCB1bnRpbCB0aGUgYWRhcHRlcgorICogaXMgZW1wdGllZCBvciBjaGFpbiByZXR1cm5zIHdpdGggZXJyb3IuCisgKi8KK3N0YXRpYyB2b2lkCitnc3RfYmFzZV9wYXJzZV9kcmFpbiAoR3N0QmFzZVBhcnNlICogcGFyc2UpCit7CisgIGd1aW50IGF2YWlsOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiZHJhaW5pbmciKTsKKyAgcGFyc2UtPnByaXYtPmRyYWluID0gVFJVRTsKKworICBmb3IgKDs7KSB7CisgICAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHBhcnNlLT5wcml2LT5hZGFwdGVyKTsKKyAgICBpZiAoIWF2YWlsKQorICAgICAgYnJlYWs7CisKKyAgICBpZiAoZ3N0X2Jhc2VfcGFyc2VfY2hhaW4gKHBhcnNlLT5zaW5rcGFkLCBOVUxMKSAhPSBHU1RfRkxPV19PSykgeworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLyogbm90aGluZyBjaGFuZ2VkLCBtYXliZSBkdWUgdG8gdHJ1bmNhdGVkIGZyYW1lOyBicmVhayBpbmZpbml0ZSBsb29wICovCisgICAgaWYgKGF2YWlsID09IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAocGFyc2UtPnByaXYtPmFkYXB0ZXIpKSB7CisgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIm5vIGNoYW5nZSBkdXJpbmcgZHJhaW5pbmc7IGZsdXNoaW5nIik7CisgICAgICBnc3RfYWRhcHRlcl9jbGVhciAocGFyc2UtPnByaXYtPmFkYXB0ZXIpOworICAgIH0KKyAgfQorCisgIHBhcnNlLT5wcml2LT5kcmFpbiA9IEZBTFNFOworfQorCisvKiBnc3RfYmFzZV9wYXJzZV9zZW5kX2J1ZmZlcnMKKyAqCisgKiBTZW5kcyBidWZmZXJzIGNvbGxlY3RlZCBpbiBzZW5kX2J1ZmZlcnMgZG93bnN0cmVhbSwgYW5kIGVuc3VyZXMgdGhhdCBsaXN0CisgKiBpcyBlbXB0eSBhdCB0aGUgZW5kIChlcnJvcnMgb3Igbm90KS4KKyAqLworc3RhdGljIEdzdEZsb3dSZXR1cm4KK2dzdF9iYXNlX3BhcnNlX3NlbmRfYnVmZmVycyAoR3N0QmFzZVBhcnNlICogcGFyc2UpCit7CisgIEdTTGlzdCAqc2VuZCA9IE5VTEw7CisgIEdzdEJ1ZmZlciAqYnVmOworICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOworCisgIHNlbmQgPSBwYXJzZS0+cHJpdi0+YnVmZmVyc19zZW5kOworCisgIC8qIHNlbmQgYnVmZmVycyAqLworICB3aGlsZSAoc2VuZCkgeworICAgIGJ1ZiA9IEdTVF9CVUZGRVJfQ0FTVCAoc2VuZC0+ZGF0YSk7CisgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAicHVzaGluZyBidWZmZXIgJXAsIHRpbWVzdGFtcCAlIgorICAgICAgICBHU1RfVElNRV9GT1JNQVQgIiwgZHVyYXRpb24gJSIgR1NUX1RJTUVfRk9STUFUCisgICAgICAgICIsIG9mZnNldCAlIiBHX0dJTlQ2NF9GT1JNQVQsIGJ1ZiwKKyAgICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZikpLAorICAgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpKSwgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZikpOworCisgICAgLyogaXRlcmF0ZSBvdXRwdXQgcXVldWUgYW4gcHVzaCBkb3duc3RyZWFtICovCisgICAgcmV0ID0gZ3N0X3BhZF9wdXNoIChwYXJzZS0+c3JjcGFkLCBidWYpOworICAgIHNlbmQgPSBnX3NsaXN0X2RlbGV0ZV9saW5rIChzZW5kLCBzZW5kKTsKKworICAgIC8qIGNsZWFyIGFueSBsZWZ0b3ZlciBpZiBlcnJvciAqLworICAgIGlmIChHX1VOTElLRUxZIChyZXQgIT0gR1NUX0ZMT1dfT0spKSB7CisgICAgICB3aGlsZSAoc2VuZCkgeworICAgICAgICBidWYgPSBHU1RfQlVGRkVSX0NBU1QgKHNlbmQtPmRhdGEpOworICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOworICAgICAgICBzZW5kID0gZ19zbGlzdF9kZWxldGVfbGluayAoc2VuZCwgc2VuZCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcGFyc2UtPnByaXYtPmJ1ZmZlcnNfc2VuZCA9IHNlbmQ7CisKKyAgcmV0dXJuIHJldDsKK30KKworLyogZ3N0X2Jhc2VfcGFyc2VfcHJvY2Vzc19mcmFnbWVudDoKKyAqCisgKiBQcm9jZXNzZXMgYSByZXZlcnNlIHBsYXliYWNrIChmb3J3YXJkKSBmcmFnbWVudDoKKyAqIC0gYXBwZW5kIGhlYWQgb2YgbGFzdCBmcmFnbWVudCB0aGF0IHdhcyBza2lwcGVkIHRvIGN1cnJlbnQgZnJhZ21lbnQgZGF0YQorICogLSBkcmFpbiB0aGUgcmVzdWx0aW5nIGN1cnJlbnQgZnJhZ21lbnQgZGF0YSAoaS5lLiByZXBlYXRlZCBjaGFpbikKKyAqIC0gYWRkIHRpbWUvZHVyYXRpb24gKGlmIG5lZWRlZCkgdG8gZnJhbWVzIHF1ZXVlZCBieSBjaGFpbgorICogLSBwdXNoIHF1ZXVlZCBkYXRhCisgKi8KK3N0YXRpYyBHc3RGbG93UmV0dXJuCitnc3RfYmFzZV9wYXJzZV9wcm9jZXNzX2ZyYWdtZW50IChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgZ2Jvb2xlYW4gcHVzaF9vbmx5KQoreworICBHc3RCdWZmZXIgKmJ1ZjsKKyAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKKyAgZ2Jvb2xlYW4gc2Vlbl9rZXkgPSBGQUxTRSwgc2Vlbl9kZWx0YSA9IEZBTFNFOworCisgIGlmIChwdXNoX29ubHkpCisgICAgZ290byBwdXNoOworCisgIC8qIHJlc3RvcmUgb3JkZXIgKi8KKyAgcGFyc2UtPnByaXYtPmJ1ZmZlcnNfcGVuZGluZyA9IGdfc2xpc3RfcmV2ZXJzZSAocGFyc2UtPnByaXYtPmJ1ZmZlcnNfcGVuZGluZyk7CisgIHdoaWxlIChwYXJzZS0+cHJpdi0+YnVmZmVyc19wZW5kaW5nKSB7CisgICAgYnVmID0gR1NUX0JVRkZFUl9DQVNUIChwYXJzZS0+cHJpdi0+YnVmZmVyc19wZW5kaW5nLT5kYXRhKTsKKyAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJhZGRpbmcgcGVuZGluZyBidWZmZXIgKHNpemUgJSIgR19HU0laRV9GT1JNQVQgIikiLAorICAgICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpKTsKKyAgICBnc3RfYWRhcHRlcl9wdXNoIChwYXJzZS0+cHJpdi0+YWRhcHRlciwgYnVmKTsKKyAgICBwYXJzZS0+cHJpdi0+YnVmZmVyc19wZW5kaW5nID0KKyAgICAgICAgZ19zbGlzdF9kZWxldGVfbGluayAocGFyc2UtPnByaXYtPmJ1ZmZlcnNfcGVuZGluZywKKyAgICAgICAgcGFyc2UtPnByaXYtPmJ1ZmZlcnNfcGVuZGluZyk7CisgIH0KKworICAvKiBpbnZhbGlkYXRlIHNvIG5vIGZhbGwtYmFjayB0aW1lc3RhbXBpbmcgaXMgcGVyZm9ybWVkOworICAgKiBvayBpZiB0YWtlbiBmcm9tIHN1YmNsYXNzIG9yIHVwc3RyZWFtICovCisgIHBhcnNlLT5wcml2LT5uZXh0X3RzID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgLyogcHJldmVudCBpdCBoYW5naW5nIGFyb3VuZCBzdG9wIGFsbCB0aGUgdGltZSAqLworICBwYXJzZS0+c2VnbWVudC5wb3NpdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgIC8qIG1hcmsgbmV4dCBydW4gKi8KKyAgcGFyc2UtPnByaXYtPmRpc2NvbnQgPSBUUlVFOworCisgIC8qIGNoYWluIGxvb2tzIGZvciBmcmFtZXMgYW5kIHF1ZXVlcyByZXN1bHRpbmcgb25lcyAoaW4gc3RlYWQgb2YgcHVzaGluZykgKi8KKyAgLyogaW5pdGlhbCBza2lwcGVkIGRhdGEgaXMgYWRkZWQgdG8gYnVmZmVyc19wZW5kaW5nICovCisgIGdzdF9iYXNlX3BhcnNlX2RyYWluIChwYXJzZSk7CisKK3B1c2g6CisgIGlmIChwYXJzZS0+cHJpdi0+YnVmZmVyc19zZW5kKSB7CisgICAgYnVmID0gR1NUX0JVRkZFUl9DQVNUIChwYXJzZS0+cHJpdi0+YnVmZmVyc19zZW5kLT5kYXRhKTsKKyAgICBzZWVuX2tleSB8PSAhR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoYnVmLCBHU1RfQlVGRkVSX0ZMQUdfREVMVEFfVU5JVCk7CisgIH0KKworICAvKiBhZGQgbWV0YWRhdGEgKGlmIG5lZWRlZCB0byBxdWV1ZWQgYnVmZmVycyAqLworICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJsYXN0IHRpbWVzdGFtcDogJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgR1NUX1RJTUVfQVJHUyAocGFyc2UtPnByaXYtPmxhc3RfdHMpKTsKKyAgd2hpbGUgKHBhcnNlLT5wcml2LT5idWZmZXJzX3F1ZXVlZCkgeworICAgIGJ1ZiA9IEdTVF9CVUZGRVJfQ0FTVCAocGFyc2UtPnByaXYtPmJ1ZmZlcnNfcXVldWVkLT5kYXRhKTsKKworICAgIC8qIG5vIHRvdWNoaW5nIGlmIHVwc3RyZWFtIG9yIHBhcnNpbmcgcHJvdmlkZWQgdGltZSAqLworICAgIGlmIChHU1RfQlVGRkVSX1RJTUVTVEFNUF9JU19WQUxJRCAoYnVmKSkgeworICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiYnVmZmVyIGhhcyB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSkpOworICAgIH0gZWxzZSBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHBhcnNlLT5wcml2LT5sYXN0X3RzKSAmJgorICAgICAgICBHU1RfQlVGRkVSX0RVUkFUSU9OX0lTX1ZBTElEIChidWYpKSB7CisgICAgICBpZiAoR19MSUtFTFkgKEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikgPD0gcGFyc2UtPnByaXYtPmxhc3RfdHMpKQorICAgICAgICBwYXJzZS0+cHJpdi0+bGFzdF90cyAtPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpOworICAgICAgZWxzZQorICAgICAgICBwYXJzZS0+cHJpdi0+bGFzdF90cyA9IDA7CisgICAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSA9IHBhcnNlLT5wcml2LT5sYXN0X3RzOworICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiYXBwbGllZCB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSkpOworICAgIH0gZWxzZSB7CisgICAgICAvKiBubyBpZGVhLCB2ZXJ5IGJhZCAqLworICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYXJzZSwgImNvdWxkIG5vdCBkZXRlcm1pbmUgdGltZSBmb3IgYnVmZmVyIik7CisgICAgfQorCisgICAgcGFyc2UtPnByaXYtPmxhc3RfdHMgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKTsKKworICAgIC8qIHJldmVyc2Ugb3JkZXIgZm9yIGFzY2VuZGluZyBzZW5kaW5nICovCisgICAgLyogc2VuZCBkb3duc3RyZWFtIGF0IGtleWZyYW1lIG5vdCBwcmVjZWRlZCBieSBhIGtleWZyYW1lCisgICAgICogKGUuZy4gdGhhdCBzaG91bGQgaWRlbnRpZnkgc3RhcnQgb2YgY29sbGVjdGlvbiBvZiBJRFIgbmFscykgKi8KKyAgICBpZiAoR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoYnVmLCBHU1RfQlVGRkVSX0ZMQUdfREVMVEFfVU5JVCkpIHsKKyAgICAgIGlmIChzZWVuX2tleSkgeworICAgICAgICByZXQgPSBnc3RfYmFzZV9wYXJzZV9zZW5kX2J1ZmZlcnMgKHBhcnNlKTsKKyAgICAgICAgLyogaWYgYSBwcm9ibGVtLCB0aHJvdyBhbGwgdG8gc2VuZGluZyAqLworICAgICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKSB7CisgICAgICAgICAgcGFyc2UtPnByaXYtPmJ1ZmZlcnNfc2VuZCA9CisgICAgICAgICAgICAgIGdfc2xpc3RfcmV2ZXJzZSAocGFyc2UtPnByaXYtPmJ1ZmZlcnNfcXVldWVkKTsKKyAgICAgICAgICBwYXJzZS0+cHJpdi0+YnVmZmVyc19xdWV1ZWQgPSBOVUxMOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNlZW5fa2V5ID0gRkFMU0U7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHNlZW5fZGVsdGEgPSBUUlVFOworICAgIH0KKworICAgIHNlZW5fa2V5IHw9ICFHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUIChidWYsIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKTsKKworICAgIHBhcnNlLT5wcml2LT5idWZmZXJzX3NlbmQgPQorICAgICAgICBnX3NsaXN0X3ByZXBlbmQgKHBhcnNlLT5wcml2LT5idWZmZXJzX3NlbmQsIGJ1Zik7CisgICAgcGFyc2UtPnByaXYtPmJ1ZmZlcnNfcXVldWVkID0KKyAgICAgICAgZ19zbGlzdF9kZWxldGVfbGluayAocGFyc2UtPnByaXYtPmJ1ZmZlcnNfcXVldWVkLAorICAgICAgICBwYXJzZS0+cHJpdi0+YnVmZmVyc19xdWV1ZWQpOworICB9CisKKyAgLyogYXVkaW8gbWF5IGhhdmUgYWxsIG1hcmtlZCBhcyBrZXlmcmFtZSwgc28gYXJyYW5nZSB0byBzZW5kIGhlcmUgKi8KKyAgaWYgKCFzZWVuX2RlbHRhKQorICAgIHJldCA9IGdzdF9iYXNlX3BhcnNlX3NlbmRfYnVmZmVycyAocGFyc2UpOworCisgIC8qIGFueSB0cmFpbGluZyB1bnVzZWQgbm8gbG9uZ2VyIHVzYWJsZSAoaWRlYWxseSBub25lKSAqLworICBpZiAoR19VTkxJS0VMWSAoZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChwYXJzZS0+cHJpdi0+YWRhcHRlcikpKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJkaXNjYXJkaW5nICUiIEdfR1NJWkVfRk9STUFUICIgdHJhaWxpbmcgYnl0ZXMiLAorICAgICAgICBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHBhcnNlLT5wcml2LT5hZGFwdGVyKSk7CisgICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHBhcnNlLT5wcml2LT5hZGFwdGVyKTsKKyAgfQorCisgIHJldHVybiByZXQ7Cit9CisKKy8qIHNtYWxsIGhlbHBlciB0aGF0IGNoZWNrcyB3aGV0aGVyIHdlIGhhdmUgYmVlbiB0cnlpbmcgdG8gcmVzeW5jIHRvbyBsb25nICovCitzdGF0aWMgaW5saW5lIEdzdEZsb3dSZXR1cm4KK2dzdF9iYXNlX3BhcnNlX2NoZWNrX3N5bmMgKEdzdEJhc2VQYXJzZSAqIHBhcnNlKQoreworICBpZiAoR19VTkxJS0VMWSAocGFyc2UtPnByaXYtPmRpc2NvbnQgJiYKKyAgICAgICAgICBwYXJzZS0+cHJpdi0+b2Zmc2V0IC0gcGFyc2UtPnByaXYtPnN5bmNfb2Zmc2V0ID4gMiAqIDEwMjQgKiAxMDI0KSkgeworICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwYXJzZSwgU1RSRUFNLCBERUNPREUsCisgICAgICAgICgiRmFpbGVkIHRvIHBhcnNlIHN0cmVhbSIpLCAoTlVMTCkpOworICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKKyAgfQorCisgIHJldHVybiBHU1RfRkxPV19PSzsKK30KKworc3RhdGljIEdzdEZsb3dSZXR1cm4KK2dzdF9iYXNlX3BhcnNlX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKK3sKKyAgR3N0QmFzZVBhcnNlQ2xhc3MgKmJjbGFzczsKKyAgR3N0QmFzZVBhcnNlICpwYXJzZTsKKyAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKKyAgR3N0QnVmZmVyICpvdXRidWYgPSBOVUxMOworICBHc3RCdWZmZXIgKnRtcGJ1ZiA9IE5VTEw7CisgIGd1aW50IGZzaXplID0gMTsKKyAgZ2ludCBza2lwID0gLTE7CisgIGNvbnN0IGd1aW50OCAqZGF0YTsKKyAgZ3VpbnQgb2xkX21pbl9zaXplID0gMCwgbWluX3NpemUsIGF2OworICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wOworICBHc3RCYXNlUGFyc2VGcmFtZSAqZnJhbWU7CisKKyAgcGFyc2UgPSBHU1RfQkFTRV9QQVJTRSAoR1NUX09CSkVDVF9QQVJFTlQgKHBhZCkpOworICBiY2xhc3MgPSBHU1RfQkFTRV9QQVJTRV9HRVRfQ0xBU1MgKHBhcnNlKTsKKyAgZnJhbWUgPSAmcGFyc2UtPnByaXYtPmZyYW1lOworCisgIGlmIChHX0xJS0VMWSAoYnVmZmVyKSkgeworICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwKKyAgICAgICAgImJ1ZmZlciBzaXplOiAlIiBHX0dTSVpFX0ZPUk1BVCAiLCBvZmZzZXQgPSAlIiBHX0dJTlQ2NF9GT1JNQVQsCisgICAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlciksIEdTVF9CVUZGRVJfT0ZGU0VUIChidWZmZXIpKTsKKyAgICBpZiAoR19VTkxJS0VMWSAocGFyc2UtPnByaXYtPnBhc3N0aHJvdWdoKSkgeworICAgICAgZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfaW5pdCAoZnJhbWUpOworICAgICAgZnJhbWUtPmJ1ZmZlciA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAoYnVmZmVyKTsKKyAgICAgIHJldHVybiBnc3RfYmFzZV9wYXJzZV9wdXNoX2ZyYW1lIChwYXJzZSwgZnJhbWUpOworICAgIH0KKyAgICAvKiB1cHN0cmVhbSBmZWVkaW5nIHVzIGluIHJldmVyc2UgcGxheWJhY2s7CisgICAgICogZ2F0aGVyIGVhY2ggZnJhZ21lbnQsIHRoZW4gcHJvY2VzcyBpdCBpbiBzaW5nbGUgcnVuICovCisgICAgaWYgKHBhcnNlLT5zZWdtZW50LnJhdGUgPCAwLjApIHsKKyAgICAgIGlmIChHX1VOTElLRUxZIChHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUIChidWZmZXIsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKSkpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJidWZmZXIgc3RhcnRzIG5ldyByZXZlcnNlIHBsYXliYWNrIGZyYWdtZW50Iik7CisgICAgICAgIHJldCA9IGdzdF9iYXNlX3BhcnNlX3Byb2Nlc3NfZnJhZ21lbnQgKHBhcnNlLCBGQUxTRSk7CisgICAgICB9CisgICAgICBnc3RfYWRhcHRlcl9wdXNoIChwYXJzZS0+cHJpdi0+YWRhcHRlciwgYnVmZmVyKTsKKyAgICAgIHJldHVybiByZXQ7CisgICAgfQorICAgIGdzdF9hZGFwdGVyX3B1c2ggKHBhcnNlLT5wcml2LT5hZGFwdGVyLCBidWZmZXIpOworICB9CisKKyAgaWYgKEdfVU5MSUtFTFkgKGJ1ZmZlciAmJgorICAgICAgICAgIEdTVF9CVUZGRVJfRkxBR19JU19TRVQgKGJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpKSkgeworICAgIGZyYW1lLT5fcHJpdmF0ZV9mbGFncyB8PSBHU1RfQkFTRV9QQVJTRV9GUkFNRV9QUklWQVRFX0ZMQUdfTk9BTExPQzsKKyAgICBnc3RfYmFzZV9wYXJzZV9mcmFtZV9mcmVlIChmcmFtZSk7CisgIH0KKworICAvKiBQYXJzZSBhbmQgcHVzaCBhcyBtYW55IGZyYW1lcyBhcyBwb3NzaWJsZSAqLworICAvKiBTdG9wIGVpdGhlciB3aGVuIGFkYXB0ZXIgaXMgZW1wdHkgb3Igd2UgYXJlIGZsdXNoaW5nICovCisgIHdoaWxlICghcGFyc2UtPnByaXYtPmZsdXNoaW5nKSB7CisgICAgZ2Jvb2xlYW4gcmVzOworCisgICAgLyogbWFpbnRhaW4gZnJhbWUgc3RhdGUgZm9yIGEgc2luZ2xlIGZyYW1lIHBhcnNpbmcgcm91bmQgYWNyb3NzIF9jaGFpbiBjYWxscywKKyAgICAgKiBzbyBvbmx5IGluaXQgd2hlbiBuZWVkZWQgKi8KKyAgICBpZiAoIWZyYW1lLT5fcHJpdmF0ZV9mbGFncykKKyAgICAgIGdzdF9iYXNlX3BhcnNlX2ZyYW1lX2luaXQgKGZyYW1lKTsKKworICAgIHRtcGJ1ZiA9IGdzdF9idWZmZXJfbmV3ICgpOworCisgICAgb2xkX21pbl9zaXplID0gMDsKKyAgICAvKiBTeW5jaHJvbml6YXRpb24gbG9vcCAqLworICAgIGZvciAoOzspIHsKKyAgICAgIC8qIG5vdGU6IGlmIHN1YmNsYXNzIGluZGljYXRlcyBNQVggZnNpemUsCisgICAgICAgKiB0aGlzIHdpbGwgbm90IGxpa2VseSBiZSBhdmFpbGFibGUgYW55d2F5IC4uLiAqLworICAgICAgbWluX3NpemUgPSBNQVggKHBhcnNlLT5wcml2LT5taW5fZnJhbWVfc2l6ZSwgZnNpemUpOworICAgICAgYXYgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHBhcnNlLT5wcml2LT5hZGFwdGVyKTsKKworICAgICAgLyogbG9vcCBzYWZldHkgY2hlY2sgKi8KKyAgICAgIGlmIChHX1VOTElLRUxZIChvbGRfbWluX3NpemUgPj0gbWluX3NpemUpKQorICAgICAgICBnb3RvIGludmFsaWRfbWluOworICAgICAgb2xkX21pbl9zaXplID0gbWluX3NpemU7CisKKyAgICAgIGlmIChHX1VOTElLRUxZIChwYXJzZS0+cHJpdi0+ZHJhaW4pKSB7CisgICAgICAgIG1pbl9zaXplID0gYXY7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiZHJhaW5pbmcsIGRhdGEgbGVmdDogJWQiLCBtaW5fc2l6ZSk7CisgICAgICAgIGlmIChHX1VOTElLRUxZICghbWluX3NpemUpKSB7CisgICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAodG1wYnVmKTsKKyAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyogQ29sbGVjdCBhdCBsZWFzdCBtaW5fZnJhbWVfc2l6ZSBieXRlcyAqLworICAgICAgaWYgKGF2IDwgbWluX3NpemUpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJub3QgZW5vdWdoIGRhdGEgYXZhaWxhYmxlIChvbmx5ICVkIGJ5dGVzKSIsCisgICAgICAgICAgICBhdik7CisgICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHRtcGJ1Zik7CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgIH0KKworICAgICAgLyogYWx3YXlzIHBhc3MgYWxsIGF2YWlsYWJsZSBkYXRhICovCisgICAgICBkYXRhID0gZ3N0X2FkYXB0ZXJfbWFwIChwYXJzZS0+cHJpdi0+YWRhcHRlciwgYXYpOworICAgICAgZ3N0X2J1ZmZlcl90YWtlX21lbW9yeSAodG1wYnVmLCAtMSwKKyAgICAgICAgICBnc3RfbWVtb3J5X25ld193cmFwcGVkIChHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFksCisgICAgICAgICAgICAgIChncG9pbnRlcikgZGF0YSwgTlVMTCwgYXYsIDAsIGF2KSk7CisgICAgICBHU1RfQlVGRkVSX09GRlNFVCAodG1wYnVmKSA9IHBhcnNlLT5wcml2LT5vZmZzZXQ7CisKKyAgICAgIGlmIChwYXJzZS0+cHJpdi0+ZGlzY29udCkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIm1hcmtpbmcgRElTQ09OVCIpOworICAgICAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUICh0bXBidWYsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKTsKKyAgICAgIH0KKworICAgICAgc2tpcCA9IC0xOworICAgICAgZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfdXBkYXRlIChwYXJzZSwgZnJhbWUsIHRtcGJ1Zik7CisgICAgICByZXMgPSBiY2xhc3MtPmNoZWNrX3ZhbGlkX2ZyYW1lIChwYXJzZSwgZnJhbWUsICZmc2l6ZSwgJnNraXApOworICAgICAgZ3N0X2FkYXB0ZXJfdW5tYXAgKHBhcnNlLT5wcml2LT5hZGFwdGVyLCAwKTsKKyAgICAgIGdzdF9idWZmZXJfcmVwbGFjZSAoJmZyYW1lLT5idWZmZXIsIE5VTEwpOworICAgICAgaWYgKHJlcykgeworICAgICAgICBpZiAoZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChwYXJzZS0+cHJpdi0+YWRhcHRlcikgPCBmc2l6ZSkgeworICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiZm91bmQgdmFsaWQgZnJhbWUgYnV0IG5vdCBlbm91Z2ggZGF0YSIKKyAgICAgICAgICAgICAgIiBhdmFpbGFibGUgKG9ubHkgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcykiLAorICAgICAgICAgICAgICBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHBhcnNlLT5wcml2LT5hZGFwdGVyKSk7CisgICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAodG1wYnVmKTsKKyAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIH0KKyAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAidmFsaWQgZnJhbWUgb2Ygc2l6ZSAlZCBhdCBwb3MgJWQiLCBmc2l6ZSwgc2tpcCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgaWYgKHNraXAgPT0gLTEpIHsKKyAgICAgICAgLyogc3ViY2xhc3MgZGlkbid0IHRvdWNoIHRoaXMgdmFsdWUuIEJ5IGRlZmF1bHQgd2Ugc2tpcCAxIGJ5dGUgKi8KKyAgICAgICAgc2tpcCA9IDE7CisgICAgICB9CisgICAgICBpZiAoc2tpcCA+IDApIHsKKyAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiZmluZGluZyBzeW5jLCBza2lwcGluZyAlZCBieXRlcyIsIHNraXApOworICAgICAgICBpZiAocGFyc2UtPnNlZ21lbnQucmF0ZSA8IDAuMCAmJiAhcGFyc2UtPnByaXYtPmJ1ZmZlcnNfcXVldWVkKSB7CisgICAgICAgICAgLyogcmV2ZXJzZSBwbGF5YmFjaywgYW5kIG5vIGZyYW1lcyBmb3VuZCB5ZXQsIHNvIHdlIGFyZSBza2lwcGluZworICAgICAgICAgICAqIHRoZSBsZWFkaW5nIHBhcnQgb2YgYSBmcmFnbWVudCwgd2hpY2ggbWF5IGZvcm0gdGhlIHRhaWwgb2YKKyAgICAgICAgICAgKiBmcmFnbWVudCBjb21pbmcgbGF0ZXIsIGhvcGVmdWxseSBzdWJjbGFzcyBza2lwcyBlZmZpY2llbnRseSAuLi4gKi8KKyAgICAgICAgICB0aW1lc3RhbXAgPSBnc3RfYWRhcHRlcl9wcmV2X3RpbWVzdGFtcCAocGFyc2UtPnByaXYtPmFkYXB0ZXIsIE5VTEwpOworICAgICAgICAgIG91dGJ1ZiA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChwYXJzZS0+cHJpdi0+YWRhcHRlciwgc2tpcCk7CisgICAgICAgICAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChvdXRidWYpOworICAgICAgICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChvdXRidWYpID0gdGltZXN0YW1wOworICAgICAgICAgIHBhcnNlLT5wcml2LT5idWZmZXJzX3BlbmRpbmcgPQorICAgICAgICAgICAgICBnX3NsaXN0X3ByZXBlbmQgKHBhcnNlLT5wcml2LT5idWZmZXJzX3BlbmRpbmcsIG91dGJ1Zik7CisgICAgICAgICAgb3V0YnVmID0gTlVMTDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBnc3RfYWRhcHRlcl9mbHVzaCAocGFyc2UtPnByaXYtPmFkYXB0ZXIsIHNraXApOworICAgICAgICB9CisgICAgICAgIHBhcnNlLT5wcml2LT5vZmZzZXQgKz0gc2tpcDsKKyAgICAgICAgaWYgKCFwYXJzZS0+cHJpdi0+ZGlzY29udCkKKyAgICAgICAgICBwYXJzZS0+cHJpdi0+c3luY19vZmZzZXQgPSBwYXJzZS0+cHJpdi0+b2Zmc2V0OworICAgICAgICBwYXJzZS0+cHJpdi0+ZGlzY29udCA9IFRSVUU7CisgICAgICAgIC8qIHNvbWV0aGluZyBjaGFuZ2VkIGxlYXN0OyBudWxsaWZ5IGxvb3AgY2hlY2sgKi8KKyAgICAgICAgb2xkX21pbl9zaXplID0gMDsKKyAgICAgIH0KKyAgICAgIC8qIHNraXAgPT0gMCBzaG91bGQgaW1wbHkgc3ViY2xhc3Mgc2V0IG1pbl9zaXplIHRvIG5lZWQgbW9yZSBkYXRhOworICAgICAgICogd2UgY2hlY2sgdGhpcyBzaG9ydGx5ICovCisgICAgICBpZiAoKHJldCA9IGdzdF9iYXNlX3BhcnNlX2NoZWNrX3N5bmMgKHBhcnNlKSkgIT0gR1NUX0ZMT1dfT0spIHsKKyAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAodG1wYnVmKTsKKyAgICAgICAgZ290byBkb25lOworICAgICAgfQorICAgIH0KKyAgICBnc3RfYnVmZmVyX3VucmVmICh0bXBidWYpOworICAgIHRtcGJ1ZiA9IE5VTEw7CisKKyAgICBpZiAoc2tpcCA+IDApIHsKKyAgICAgIC8qIFN1YmNsYXNzIGZvdW5kIHRoZSBzeW5jLCBidXQgc3RpbGwgd2FudHMgdG8gc2tpcCBzb21lIGRhdGEgKi8KKyAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgInNraXBwaW5nICVkIGJ5dGVzIiwgc2tpcCk7CisgICAgICBnc3RfYWRhcHRlcl9mbHVzaCAocGFyc2UtPnByaXYtPmFkYXB0ZXIsIHNraXApOworICAgICAgcGFyc2UtPnByaXYtPm9mZnNldCArPSBza2lwOworICAgIH0KKworICAgIC8qIEdyYWIgbG9jayB0byBwcmV2ZW50IGEgcmFjZSB3aXRoIEZMVVNIX1NUQVJUIGhhbmRsZXIgKi8KKyAgICBHU1RfUEFEX1NUUkVBTV9MT0NLIChwYXJzZS0+c3JjcGFkKTsKKworICAgIC8qIEZMVVNIX1NUQVJUIGV2ZW50IGNhdXNlcyB0aGUgImZsdXNoaW5nIiBmbGFnIHRvIGJlIHNldC4gSW4gdGhpcworICAgICAqIGNhc2Ugd2UgY2FuIGxlYXZlIHRoZSBmcmFtZSBwdXNoaW5nIGxvb3AgKi8KKyAgICBpZiAocGFyc2UtPnByaXYtPmZsdXNoaW5nKSB7CisgICAgICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKHBhcnNlLT5zcmNwYWQpOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLyogbW92ZSBhbG9uZyB3aXRoIHVwc3RyZWFtIHRpbWVzdGFtcCAoaWYgYW55KSwKKyAgICAgKiBidXQgaW50ZXJwb2xhdGUgaW4gYmV0d2VlbiAqLworICAgIHRpbWVzdGFtcCA9IGdzdF9hZGFwdGVyX3ByZXZfdGltZXN0YW1wIChwYXJzZS0+cHJpdi0+YWRhcHRlciwgTlVMTCk7CisgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lc3RhbXApICYmCisgICAgICAgIChwYXJzZS0+cHJpdi0+cHJldl90cyAhPSB0aW1lc3RhbXApKSB7CisgICAgICBwYXJzZS0+cHJpdi0+cHJldl90cyA9IHBhcnNlLT5wcml2LT5uZXh0X3RzID0gdGltZXN0YW1wOworICAgIH0KKworICAgIC8qIEZJWE1FOiBXb3VsZCBpdCBiZSBtb3JlIGVmZmljaWVudCB0byBtYWtlIGEgc3ViYnVmZmVyIGluc3RlYWQ/ICovCisgICAgb3V0YnVmID0gZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIgKHBhcnNlLT5wcml2LT5hZGFwdGVyLCBmc2l6ZSk7CisgICAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChvdXRidWYpOworCisgICAgLyogU3ViY2xhc3MgbWF5IHdhbnQgdG8ga25vdyB0aGUgZGF0YSBvZmZzZXQgKi8KKyAgICBHU1RfQlVGRkVSX09GRlNFVCAob3V0YnVmKSA9IHBhcnNlLT5wcml2LT5vZmZzZXQ7CisgICAgcGFyc2UtPnByaXYtPm9mZnNldCArPSBmc2l6ZTsKKyAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAob3V0YnVmKSA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgICAgR1NUX0JVRkZFUl9EVVJBVElPTiAob3V0YnVmKSA9IEdTVF9DTE9DS19USU1FX05PTkU7CisKKyAgICBmcmFtZS0+YnVmZmVyID0gb3V0YnVmOworICAgIHJldCA9IGdzdF9iYXNlX3BhcnNlX2hhbmRsZV9hbmRfcHVzaF9mcmFtZSAocGFyc2UsIGJjbGFzcywgZnJhbWUpOworICAgIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAocGFyc2UtPnNyY3BhZCk7CisKKyAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKSB7CisgICAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJwdXNoIHJldHVybmVkICVkIiwgcmV0KTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCitkb25lOgorICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJjaGFpbiBsZWF2aW5nIik7CisgIHJldHVybiByZXQ7CisKKyAgLyogRVJST1JTICovCitpbnZhbGlkX21pbjoKKyAgeworICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwYXJzZSwgU1RSRUFNLCBGQUlMRUQsIChOVUxMKSwKKyAgICAgICAgKCJtaW5fc2l6ZSBldm9sdXRpb24gJWQgLT4gJWQ7IGJyZWFraW5nIHRvIGF2b2lkIGxvb3BpbmciLAorICAgICAgICAgICAgb2xkX21pbl9zaXplLCBtaW5fc2l6ZSkpOworICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKKyAgfQorfQorCisvKiBwdWxsIEBzaXplIGJ5dGVzIGF0IGN1cnJlbnQgb2Zmc2V0LAorICogaS5lLiBhdCBsZWFzdCB0cnkgdG8gYW5kIHBvc3NpYmx5IHJldHVybiBhIHNob3J0ZXIgYnVmZmVyIGlmIG5lYXIgdGhlIGVuZCAqLworc3RhdGljIEdzdEZsb3dSZXR1cm4KK2dzdF9iYXNlX3BhcnNlX3B1bGxfcmFuZ2UgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBndWludCBzaXplLAorICAgIEdzdEJ1ZmZlciAqKiBidWZmZXIpCit7CisgIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGJ1ZmZlciAhPSBOVUxMLCBHU1RfRkxPV19FUlJPUik7CisKKyAgLyogQ2FjaGluZyBoZXJlIGFjdHVhbGx5IG1ha2VzIG11Y2ggbGVzcyBkaWZmZXJlbmNlIHRoYW4gb25lIHdvdWxkIGV4cGVjdC4KKyAgICogV2UgZG8gaXQgbWFpbmx5IHRvIGF2b2lkIHB1bGxpbmcgYnVmZmVycyBvZiAxIGJ5dGUgYWxsIHRoZSB0aW1lICovCisgIGlmIChwYXJzZS0+cHJpdi0+Y2FjaGUpIHsKKyAgICBnaW50NjQgY2FjaGVfb2Zmc2V0ID0gR1NUX0JVRkZFUl9PRkZTRVQgKHBhcnNlLT5wcml2LT5jYWNoZSk7CisgICAgZ2ludCBjYWNoZV9zaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAocGFyc2UtPnByaXYtPmNhY2hlKTsKKworICAgIGlmIChjYWNoZV9vZmZzZXQgPD0gcGFyc2UtPnByaXYtPm9mZnNldCAmJgorICAgICAgICAocGFyc2UtPnByaXYtPm9mZnNldCArIHNpemUpIDw9IChjYWNoZV9vZmZzZXQgKyBjYWNoZV9zaXplKSkgeworICAgICAgKmJ1ZmZlciA9IGdzdF9idWZmZXJfY29weV9yZWdpb24gKHBhcnNlLT5wcml2LT5jYWNoZSwgR1NUX0JVRkZFUl9DT1BZX0FMTCwKKyAgICAgICAgICBwYXJzZS0+cHJpdi0+b2Zmc2V0IC0gY2FjaGVfb2Zmc2V0LCBzaXplKTsKKyAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUICgqYnVmZmVyKSA9IHBhcnNlLT5wcml2LT5vZmZzZXQ7CisgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisgICAgfQorICAgIC8qIG5vdCBlbm91Z2ggZGF0YSBpbiB0aGUgY2FjaGUsIGZyZWUgY2FjaGUgYW5kIGdldCBhIG5ldyBvbmUgKi8KKyAgICBnc3RfYnVmZmVyX3VucmVmIChwYXJzZS0+cHJpdi0+Y2FjaGUpOworICAgIHBhcnNlLT5wcml2LT5jYWNoZSA9IE5VTEw7CisgIH0KKworICAvKiByZWZpbGwgdGhlIGNhY2hlICovCisgIHJldCA9CisgICAgICBnc3RfcGFkX3B1bGxfcmFuZ2UgKHBhcnNlLT5zaW5rcGFkLCBwYXJzZS0+cHJpdi0+b2Zmc2V0LCBNQVggKHNpemUsCisgICAgICAgICAgNjQgKiAxMDI0KSwgJnBhcnNlLT5wcml2LT5jYWNoZSk7CisgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spIHsKKyAgICBwYXJzZS0+cHJpdi0+Y2FjaGUgPSBOVUxMOworICAgIHJldHVybiByZXQ7CisgIH0KKworICBpZiAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAocGFyc2UtPnByaXYtPmNhY2hlKSA+PSBzaXplKSB7CisgICAgKmJ1ZmZlciA9CisgICAgICAgIGdzdF9idWZmZXJfY29weV9yZWdpb24gKHBhcnNlLT5wcml2LT5jYWNoZSwgR1NUX0JVRkZFUl9DT1BZX0FMTCwgMCwKKyAgICAgICAgc2l6ZSk7CisgICAgR1NUX0JVRkZFUl9PRkZTRVQgKCpidWZmZXIpID0gcGFyc2UtPnByaXYtPm9mZnNldDsKKyAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisgIH0KKworICAvKiBOb3QgcG9zc2libGUgdG8gZ2V0IGVub3VnaCBkYXRhLCB0cnkgYSBsYXN0IHRpbWUgd2l0aAorICAgKiByZXF1ZXN0aW5nIGV4YWN0bHkgdGhlIHNpemUgd2UgbmVlZCAqLworICBnc3RfYnVmZmVyX3VucmVmIChwYXJzZS0+cHJpdi0+Y2FjaGUpOworICBwYXJzZS0+cHJpdi0+Y2FjaGUgPSBOVUxMOworCisgIHJldCA9IGdzdF9wYWRfcHVsbF9yYW5nZSAocGFyc2UtPnNpbmtwYWQsIHBhcnNlLT5wcml2LT5vZmZzZXQsIHNpemUsCisgICAgICAmcGFyc2UtPnByaXYtPmNhY2hlKTsKKworICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJwdWxsX3JhbmdlIHJldHVybmVkICVkIiwgcmV0KTsKKyAgICAqYnVmZmVyID0gTlVMTDsKKyAgICByZXR1cm4gcmV0OworICB9CisKKyAgaWYgKGdzdF9idWZmZXJfZ2V0X3NpemUgKHBhcnNlLT5wcml2LT5jYWNoZSkgPCBzaXplKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJSZXR1cm5pbmcgc2hvcnQgYnVmZmVyIGF0IG9mZnNldCAlIgorICAgICAgICBHX0dVSU5UNjRfRk9STUFUICI6IHdhbnRlZCAldSBieXRlcywgZ290ICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMiLAorICAgICAgICBwYXJzZS0+cHJpdi0+b2Zmc2V0LCBzaXplLCBnc3RfYnVmZmVyX2dldF9zaXplIChwYXJzZS0+cHJpdi0+Y2FjaGUpKTsKKworICAgICpidWZmZXIgPSBwYXJzZS0+cHJpdi0+Y2FjaGU7CisgICAgcGFyc2UtPnByaXYtPmNhY2hlID0gTlVMTDsKKworICAgIHJldHVybiBHU1RfRkxPV19PSzsKKyAgfQorCisgICpidWZmZXIgPQorICAgICAgZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAocGFyc2UtPnByaXYtPmNhY2hlLCBHU1RfQlVGRkVSX0NPUFlfQUxMLCAwLCBzaXplKTsKKyAgR1NUX0JVRkZFUl9PRkZTRVQgKCpidWZmZXIpID0gcGFyc2UtPnByaXYtPm9mZnNldDsKKworICByZXR1cm4gR1NUX0ZMT1dfT0s7Cit9CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuCitnc3RfYmFzZV9wYXJzZV9oYW5kbGVfcHJldmlvdXNfZnJhZ21lbnQgKEdzdEJhc2VQYXJzZSAqIHBhcnNlKQoreworICBnaW50NjQgb2Zmc2V0ID0gMDsKKyAgR3N0Q2xvY2tUaW1lIHRzID0gMDsKKyAgR3N0QnVmZmVyICpidWZmZXI7CisgIEdzdEZsb3dSZXR1cm4gcmV0OworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiZnJhZ21lbnQgZW5kZWQ7IGxhc3RfdHMgPSAlIiBHU1RfVElNRV9GT1JNQVQKKyAgICAgICIsIGxhc3Rfb2Zmc2V0ID0gJSIgR19HSU5UNjRfRk9STUFULCBHU1RfVElNRV9BUkdTIChwYXJzZS0+cHJpdi0+bGFzdF90cyksCisgICAgICBwYXJzZS0+cHJpdi0+bGFzdF9vZmZzZXQpOworCisgIGlmICghcGFyc2UtPnByaXYtPmxhc3Rfb2Zmc2V0IHx8IHBhcnNlLT5wcml2LT5sYXN0X3RzIDw9IHBhcnNlLT5zZWdtZW50LnN0YXJ0KSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJwYXN0IHN0YXJ0IG9mIHNlZ21lbnQgJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgICBHU1RfVElNRV9BUkdTIChwYXJzZS0+c2VnbWVudC5zdGFydCkpOworICAgIHJldCA9IEdTVF9GTE9XX1VORVhQRUNURUQ7CisgICAgZ290byBleGl0OworICB9CisKKyAgLyogbGFzdCBmcmFnbWVudCBzdGFydGVkIGF0IGxhc3Rfb2Zmc2V0IC8gbGFzdF90czsKKyAgICogc2VlayBiYWNrIDEwcyBjYXBwZWQgYXQgMU1CICovCisgIGlmIChwYXJzZS0+cHJpdi0+bGFzdF90cyA+PSAxMCAqIEdTVF9TRUNPTkQpCisgICAgdHMgPSBwYXJzZS0+cHJpdi0+bGFzdF90cyAtIDEwICogR1NUX1NFQ09ORDsKKyAgLyogaWYgd2UgYXJlIGV4YWN0IG5vdywgd2Ugd2lsbCBiZSBtb3JlIHNvIGdvaW5nIGJhY2t3YXJkcyAqLworICBpZiAocGFyc2UtPnByaXYtPmV4YWN0X3Bvc2l0aW9uKSB7CisgICAgb2Zmc2V0ID0gZ3N0X2Jhc2VfcGFyc2VfZmluZF9vZmZzZXQgKHBhcnNlLCB0cywgVFJVRSwgTlVMTCk7CisgIH0gZWxzZSB7CisgICAgaWYgKCFnc3RfcGFkX3F1ZXJ5X2NvbnZlcnQgKHBhcnNlLT5zcmNwYWQsIEdTVF9GT1JNQVRfVElNRSwgdHMsCisgICAgICAgICAgICBHU1RfRk9STUFUX0JZVEVTLCAmb2Zmc2V0KSkgeworICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJjb252ZXJzaW9uIGZhaWxlZCwgb25seSBCWVRFIGJhc2VkIik7CisgICAgfQorICB9CisgIG9mZnNldCA9IENMQU1QIChvZmZzZXQsIHBhcnNlLT5wcml2LT5sYXN0X29mZnNldCAtIDEwMjQgKiAxMDI0LAorICAgICAgcGFyc2UtPnByaXYtPmxhc3Rfb2Zmc2V0IC0gMTAyNCk7CisgIG9mZnNldCA9IE1BWCAoMCwgb2Zmc2V0KTsKKworICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIm5leHQgZnJhZ21lbnQgZnJvbSBvZmZzZXQgJSIgR19HSU5UNjRfRk9STUFULAorICAgICAgb2Zmc2V0KTsKKyAgcGFyc2UtPnByaXYtPm9mZnNldCA9IG9mZnNldDsKKworICByZXQgPSBnc3RfYmFzZV9wYXJzZV9wdWxsX3JhbmdlIChwYXJzZSwgcGFyc2UtPnByaXYtPmxhc3Rfb2Zmc2V0IC0gb2Zmc2V0LAorICAgICAgJmJ1ZmZlcik7CisgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCisgICAgZ290byBleGl0OworCisgIC8qIG9mZnNldCB3aWxsIGluY3JlYXNlIGFnYWluIGFzIGZyYWdtZW50IGlzIHByb2Nlc3NlZC9wYXJzZWQgKi8KKyAgcGFyc2UtPnByaXYtPmxhc3Rfb2Zmc2V0ID0gb2Zmc2V0OworCisgIGdzdF9hZGFwdGVyX3B1c2ggKHBhcnNlLT5wcml2LT5hZGFwdGVyLCBidWZmZXIpOworICByZXQgPSBnc3RfYmFzZV9wYXJzZV9wcm9jZXNzX2ZyYWdtZW50IChwYXJzZSwgRkFMU0UpOworICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQorICAgIGdvdG8gZXhpdDsKKworICAvKiBmb3JjZSBwcmV2aW91cyBmcmFnbWVudCAqLworICBwYXJzZS0+cHJpdi0+b2Zmc2V0ID0gLTE7CisKK2V4aXQ6CisgIHJldHVybiByZXQ7Cit9CisKKy8qIFBVTEwgbW9kZToKKyAqIHB1bGwgYW5kIHNjYW4gZm9yIG5leHQgZnJhbWUgc3RhcnRpbmcgZnJvbSBjdXJyZW50IG9mZnNldAorICogYWp1c3RzIHN5bmMsIGRyYWluIGFuZCBvZmZzZXQgZ29pbmcgYWxvbmcgKi8KK3N0YXRpYyBHc3RGbG93UmV0dXJuCitnc3RfYmFzZV9wYXJzZV9zY2FuX2ZyYW1lIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgR3N0QmFzZVBhcnNlQ2xhc3MgKiBrbGFzcywKKyAgICBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lLCBnYm9vbGVhbiBmdWxsKQoreworICBHc3RCdWZmZXIgKmJ1ZmZlciwgKm91dGJ1ZjsKKyAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKKyAgZ3VpbnQgZnNpemUgPSAxLCBtaW5fc2l6ZSwgb2xkX21pbl9zaXplID0gMDsKKyAgZ2ludCBza2lwID0gMDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZnJhbWUgIT0gTlVMTCwgR1NUX0ZMT1dfRVJST1IpOworCisgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgInNjYW5uaW5nIGZvciBmcmFtZSBhdCBvZmZzZXQgJSIgR19HVUlOVDY0X0ZPUk1BVAorICAgICAgIiAoJSMiIEdfR0lOVDY0X01PRElGSUVSICJ4KSIsIHBhcnNlLT5wcml2LT5vZmZzZXQsIHBhcnNlLT5wcml2LT5vZmZzZXQpOworCisgIC8qIGxldCdzIG1ha2UgdGhpcyBlZmZpY2llbnQgZm9yIGFsbCBzdWJjbGFzcyBvbmNlIGFuZCBmb3IgYWxsOworICAgKiBtYXliZSBpdCBkb2VzIG5vdCBuZWVkIHRoaXMgbXVjaCwgYnV0IGluIHRoZSBsYXR0ZXIgY2FzZSwgd2Uga25vdyB3ZSBhcmUKKyAgICogaW4gcHVsbCBtb2RlIGhlcmUgYW5kIG1pZ2h0IGFzIHdlbGwgdHJ5IHRvIHJlYWQgYW5kIHN1cHBseSBtb3JlIGFueXdheQorICAgKiAoc28gZG9lcyB0aGUgYnVmZmVyIGNhY2hpbmcgbWVjaGFuaXNtKSAqLworICBmc2l6ZSA9IDY0ICogMTAyNDsKKworICB3aGlsZSAoVFJVRSkgeworICAgIGdib29sZWFuIHJlczsKKworICAgIG1pbl9zaXplID0gTUFYIChwYXJzZS0+cHJpdi0+bWluX2ZyYW1lX3NpemUsIGZzaXplKTsKKyAgICAvKiBsb29wIHNhZmV0eSBjaGVjayAqLworICAgIGlmIChHX1VOTElLRUxZIChvbGRfbWluX3NpemUgPj0gbWluX3NpemUpKQorICAgICAgZ290byBpbnZhbGlkX21pbjsKKyAgICBvbGRfbWluX3NpemUgPSBtaW5fc2l6ZTsKKworICAgIHJldCA9IGdzdF9iYXNlX3BhcnNlX3B1bGxfcmFuZ2UgKHBhcnNlLCBtaW5fc2l6ZSwgJmJ1ZmZlcik7CisgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKKyAgICAgIGdvdG8gZG9uZTsKKworICAgIGlmIChwYXJzZS0+cHJpdi0+ZGlzY29udCkgeworICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJtYXJraW5nIERJU0NPTlQiKTsKKyAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKGJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpOworICAgIH0KKworICAgIC8qIGlmIHdlIGdvdCBhIHNob3J0IHJlYWQsIGluZm9ybSBzdWJjbGFzcyB3ZSBhcmUgZHJhaW5pbmcgbGVmdG92ZXIKKyAgICAgKiBhbmQgbm8gbW9yZSBpcyB0byBiZSBleHBlY3RlZCAqLworICAgIGlmIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpIDwgbWluX3NpemUpCisgICAgICBwYXJzZS0+cHJpdi0+ZHJhaW4gPSBUUlVFOworCisgICAgc2tpcCA9IC0xOworICAgIGdzdF9iYXNlX3BhcnNlX2ZyYW1lX3VwZGF0ZSAocGFyc2UsIGZyYW1lLCBidWZmZXIpOworICAgIHJlcyA9IGtsYXNzLT5jaGVja192YWxpZF9mcmFtZSAocGFyc2UsIGZyYW1lLCAmZnNpemUsICZza2lwKTsKKyAgICBnc3RfYnVmZmVyX3JlcGxhY2UgKCZmcmFtZS0+YnVmZmVyLCBOVUxMKTsKKyAgICBpZiAocmVzKSB7CisgICAgICBwYXJzZS0+cHJpdi0+ZHJhaW4gPSBGQUxTRTsKKyAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgInZhbGlkIGZyYW1lIG9mIHNpemUgJWQgYXQgcG9zICVkIiwgZnNpemUsIHNraXApOworICAgICAgYnJlYWs7CisgICAgfQorICAgIHBhcnNlLT5wcml2LT5kcmFpbiA9IEZBTFNFOworICAgIGlmIChza2lwID09IC0xKQorICAgICAgc2tpcCA9IDE7CisgICAgaWYgKHNraXAgPiAwKSB7CisgICAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJmaW5kaW5nIHN5bmMsIHNraXBwaW5nICVkIGJ5dGVzIiwgc2tpcCk7CisgICAgICBpZiAoZnVsbCAmJiBwYXJzZS0+c2VnbWVudC5yYXRlIDwgMC4wICYmICFwYXJzZS0+cHJpdi0+YnVmZmVyc19xdWV1ZWQpIHsKKyAgICAgICAgLyogcmV2ZXJzZSBwbGF5YmFjaywgYW5kIG5vIGZyYW1lcyBmb3VuZCB5ZXQsIHNvIHdlIGFyZSBza2lwcGluZworICAgICAgICAgKiB0aGUgbGVhZGluZyBwYXJ0IG9mIGEgZnJhZ21lbnQsIHdoaWNoIG1heSBmb3JtIHRoZSB0YWlsIG9mCisgICAgICAgICAqIGZyYWdtZW50IGNvbWluZyBsYXRlciwgaG9wZWZ1bGx5IHN1YmNsYXNzIHNraXBzIGVmZmljaWVudGx5IC4uLiAqLworICAgICAgICBvdXRidWYgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChidWZmZXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIDAsIHNraXApOworICAgICAgICBwYXJzZS0+cHJpdi0+YnVmZmVyc19wZW5kaW5nID0KKyAgICAgICAgICAgIGdfc2xpc3RfcHJlcGVuZCAocGFyc2UtPnByaXYtPmJ1ZmZlcnNfcGVuZGluZywgb3V0YnVmKTsKKyAgICAgICAgb3V0YnVmID0gTlVMTDsKKyAgICAgIH0KKyAgICAgIHBhcnNlLT5wcml2LT5vZmZzZXQgKz0gc2tpcDsKKyAgICAgIGlmICghcGFyc2UtPnByaXYtPmRpc2NvbnQpCisgICAgICAgIHBhcnNlLT5wcml2LT5zeW5jX29mZnNldCA9IHBhcnNlLT5wcml2LT5vZmZzZXQ7CisgICAgICBwYXJzZS0+cHJpdi0+ZGlzY29udCA9IFRSVUU7CisgICAgICAvKiBzb21ldGhpbmcgY2hhbmdlZCBhdCBsZWFzdDsgbnVsbGlmeSBsb29wIGNoZWNrICovCisgICAgICBpZiAoZnNpemUgPT0gR19NQVhVSU5UKQorICAgICAgICBmc2l6ZSA9IG9sZF9taW5fc2l6ZSArIDY0ICogMTAyNDsKKyAgICAgIG9sZF9taW5fc2l6ZSA9IDA7CisgICAgfQorICAgIC8qIHNraXAgPT0gMCBzaG91bGQgaW1wbHkgc3ViY2xhc3Mgc2V0IG1pbl9zaXplIHRvIG5lZWQgbW9yZSBkYXRhOworICAgICAqIHdlIGNoZWNrIHRoaXMgc2hvcnRseSAqLworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiZmluZGluZyBzeW5jLi4uIik7CisgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKyAgICBpZiAoKHJldCA9IGdzdF9iYXNlX3BhcnNlX2NoZWNrX3N5bmMgKHBhcnNlKSkgIT0gR1NUX0ZMT1dfT0spIHsKKyAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisgIH0KKworICAvKiBEb2VzIHRoZSBzdWJjbGFzcyB3YW50IHRvIHNraXAgdG9vPyAqLworICBpZiAoc2tpcCA+IDApCisgICAgcGFyc2UtPnByaXYtPm9mZnNldCArPSBza2lwOworICBlbHNlIGlmIChza2lwIDwgMCkKKyAgICBza2lwID0gMDsKKworICBpZiAoZnNpemUgKyBza2lwIDw9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikpIHsKKyAgICBvdXRidWYgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChidWZmZXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIHNraXAsIGZzaXplKTsKKyAgICBHU1RfQlVGRkVSX09GRlNFVCAob3V0YnVmKSA9IEdTVF9CVUZGRVJfT0ZGU0VUIChidWZmZXIpICsgc2tpcDsKKyAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAob3V0YnVmKSA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKyAgfSBlbHNlIHsKKyAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworICAgIHJldCA9IGdzdF9iYXNlX3BhcnNlX3B1bGxfcmFuZ2UgKHBhcnNlLCBmc2l6ZSwgJm91dGJ1Zik7CisgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKKyAgICAgIGdvdG8gZG9uZTsKKyAgICBpZiAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAob3V0YnVmKSA8IGZzaXplKSB7CisgICAgICBnc3RfYnVmZmVyX3VucmVmIChvdXRidWYpOworICAgICAgcmV0ID0gR1NUX0ZMT1dfVU5FWFBFQ1RFRDsKKyAgICB9CisgIH0KKworICBwYXJzZS0+cHJpdi0+b2Zmc2V0ICs9IGZzaXplOworCisgIGZyYW1lLT5idWZmZXIgPSBvdXRidWY7CisKK2RvbmU6CisgIHJldHVybiByZXQ7CisKKyAgLyogRVJST1JTICovCitpbnZhbGlkX21pbjoKKyAgeworICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwYXJzZSwgU1RSRUFNLCBGQUlMRUQsIChOVUxMKSwKKyAgICAgICAgKCJtaW5fc2l6ZSBldm9sdXRpb24gJWQgLT4gJWQ7IGJyZWFraW5nIHRvIGF2b2lkIGxvb3BpbmciLAorICAgICAgICAgICAgb2xkX21pbl9zaXplLCBtaW5fc2l6ZSkpOworICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKKyAgfQorfQorCisvKiBMb29wIHRoYXQgaXMgdXNlZCBpbiBwdWxsIG1vZGUgdG8gcmV0cmlldmUgZGF0YSBmcm9tIHVwc3RyZWFtICovCitzdGF0aWMgdm9pZAorZ3N0X2Jhc2VfcGFyc2VfbG9vcCAoR3N0UGFkICogcGFkKQoreworICBHc3RCYXNlUGFyc2UgKnBhcnNlOworICBHc3RCYXNlUGFyc2VDbGFzcyAqa2xhc3M7CisgIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7CisgIEdzdEJhc2VQYXJzZUZyYW1lIGZyYW1lOworCisgIHBhcnNlID0gR1NUX0JBU0VfUEFSU0UgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7CisgIGtsYXNzID0gR1NUX0JBU0VfUEFSU0VfR0VUX0NMQVNTIChwYXJzZSk7CisKKyAgLyogcmV2ZXJzZSBwbGF5YmFjazoKKyAgICogZmlyc3QgZnJhZ21lbnQgKGNsb3Nlc3QgdG8gc3RvcCB0aW1lKSBpcyBoYW5kbGVkIG5vcm1hbGx5IGJlbG93LAorICAgKiB0aGVuIHdlIHB1bGwgaW4gZnJhZ21lbnRzIGdvaW5nIGJhY2t3YXJkcyAqLworICBpZiAocGFyc2UtPnNlZ21lbnQucmF0ZSA8IDAuMCkgeworICAgIC8qIGNoZWNrIGlmIHdlIGp1bXBlZCBiYWNrIHRvIGEgcHJldmlvdXMgZnJhZ21lbnQsCisgICAgICogd2hpY2ggaXMgYSBwb3N0LWZpcnN0IGZyYWdtZW50ICovCisgICAgaWYgKHBhcnNlLT5wcml2LT5vZmZzZXQgPCAwKSB7CisgICAgICByZXQgPSBnc3RfYmFzZV9wYXJzZV9oYW5kbGVfcHJldmlvdXNfZnJhZ21lbnQgKHBhcnNlKTsKKyAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisgIH0KKworICBnc3RfYmFzZV9wYXJzZV9mcmFtZV9pbml0ICgmZnJhbWUpOworICByZXQgPSBnc3RfYmFzZV9wYXJzZV9zY2FuX2ZyYW1lIChwYXJzZSwga2xhc3MsICZmcmFtZSwgVFJVRSk7CisgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCisgICAgZ290byBkb25lOworCisgIC8qIFRoaXMgYWx3YXlzIGNsZWFucyB1cCBmcmFtZSwgZXZlbiBpZiBlcnJvciBvY2N1cnMgKi8KKyAgcmV0ID0gZ3N0X2Jhc2VfcGFyc2VfaGFuZGxlX2FuZF9wdXNoX2ZyYW1lIChwYXJzZSwga2xhc3MsICZmcmFtZSk7CisKKyAgLyogZWF0IGV4cGVjdGVkIGVvcyBzaWduYWxsaW5nIHBhc3Qgc2VnbWVudCBpbiByZXZlcnNlIHBsYXliYWNrICovCisgIGlmIChwYXJzZS0+c2VnbWVudC5yYXRlIDwgMC4wICYmIHJldCA9PSBHU1RfRkxPV19VTkVYUEVDVEVEICYmCisgICAgICBwYXJzZS0+c2VnbWVudC5wb3NpdGlvbiA+PSBwYXJzZS0+c2VnbWVudC5zdG9wKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJkb3duc3RyZWFtIGhhcyByZWFjaGVkIGVuZCBvZiBzZWdtZW50Iik7CisgICAgLyogcHVzaCB3aGF0IHdhcyBhY2N1bXVsYXRlZCBkdXJpbmcgbG9vcCBydW4gKi8KKyAgICBnc3RfYmFzZV9wYXJzZV9wcm9jZXNzX2ZyYWdtZW50IChwYXJzZSwgVFJVRSk7CisgICAgLyogZm9yY2UgcHJldmlvdXMgZnJhZ21lbnQgKi8KKyAgICBwYXJzZS0+cHJpdi0+b2Zmc2V0ID0gLTE7CisgICAgcmV0ID0gR1NUX0ZMT1dfT0s7CisgIH0KKworZG9uZToKKyAgaWYgKHJldCA9PSBHU1RfRkxPV19VTkVYUEVDVEVEKQorICAgIGdvdG8gZW9zOworICBlbHNlIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCisgICAgZ290byBwYXVzZTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChwYXJzZSk7CisgIHJldHVybjsKKworICAvKiBFUlJPUlMgKi8KK2VvczoKKyAgeworICAgIHJldCA9IEdTVF9GTE9XX1VORVhQRUNURUQ7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJlb3MiKTsKKyAgICAvKiBmYWxsLXRocm91Z2ggKi8KKyAgfQorcGF1c2U6CisgIHsKKyAgICBnYm9vbGVhbiBwdXNoX2VvcyA9IEZBTFNFOworCisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJwYXVzaW5nIHRhc2ssIHJlYXNvbiAlcyIsCisgICAgICAgIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKKyAgICBnc3RfcGFkX3BhdXNlX3Rhc2sgKHBhcnNlLT5zaW5rcGFkKTsKKworICAgIGlmIChyZXQgPT0gR1NUX0ZMT1dfVU5FWFBFQ1RFRCkgeworICAgICAgLyogaGFuZGxlIGVuZC1vZi1zdHJlYW0vc2VnbWVudCAqLworICAgICAgaWYgKHBhcnNlLT5zZWdtZW50LmZsYWdzICYgR1NUX1NFRUtfRkxBR19TRUdNRU5UKSB7CisgICAgICAgIGdpbnQ2NCBzdG9wOworCisgICAgICAgIGlmICgoc3RvcCA9IHBhcnNlLT5zZWdtZW50LnN0b3ApID09IC0xKQorICAgICAgICAgIHN0b3AgPSBwYXJzZS0+c2VnbWVudC5kdXJhdGlvbjsKKworICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInNlbmRpbmcgc2VnbWVudF9kb25lIik7CisKKyAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlCisgICAgICAgICAgICAoR1NUX0VMRU1FTlRfQ0FTVCAocGFyc2UpLAorICAgICAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfZG9uZSAoR1NUX09CSkVDVF9DQVNUIChwYXJzZSksCisgICAgICAgICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCBzdG9wKSk7CisgICAgICB9IGVsc2UgeworICAgICAgICAvKiBJZiB3ZSBTVElMTCBoYXZlIHplcm8gZnJhbWVzIHByb2Nlc3NlZCwgZmlyZSBhbiBlcnJvciAqLworICAgICAgICBpZiAocGFyc2UtPnByaXYtPmZyYW1lY291bnQgPT0gMCkgeworICAgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwYXJzZSwgU1RSRUFNLCBXUk9OR19UWVBFLAorICAgICAgICAgICAgICAoIk5vIHZhbGlkIGZyYW1lcyBmb3VuZCBiZWZvcmUgZW5kIG9mIHN0cmVhbSIpLCAoTlVMTCkpOworICAgICAgICB9CisgICAgICAgIHB1c2hfZW9zID0gVFJVRTsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHJldCA9PSBHU1RfRkxPV19OT1RfTElOS0VEIHx8IHJldCA8IEdTVF9GTE9XX1VORVhQRUNURUQpIHsKKyAgICAgIC8qIGZvciBmYXRhbCBlcnJvcnMgd2UgcG9zdCBhbiBlcnJvciBtZXNzYWdlLCB3cm9uZy1zdGF0ZSBpcworICAgICAgICogbm90IGZhdGFsIGJlY2F1c2UgaXQgaGFwcGVucyBkdWUgdG8gZmx1c2hlcyBhbmQgb25seSBtZWFucworICAgICAgICogdGhhdCB3ZSBzaG91bGQgc3RvcCBub3cuICovCisgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAocGFyc2UsIFNUUkVBTSwgRkFJTEVELCAoTlVMTCksCisgICAgICAgICAgKCJzdHJlYW1pbmcgc3RvcHBlZCwgcmVhc29uICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpKTsKKyAgICAgIHB1c2hfZW9zID0gVFJVRTsKKyAgICB9CisgICAgaWYgKHB1c2hfZW9zKSB7CisgICAgICAvKiBuZXdzZWdtZW50IGJlZm9yZSBlb3MgKi8KKyAgICAgIGlmIChwYXJzZS0+cHJpdi0+cGVuZGluZ19zZWdtZW50KSB7CisgICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAocGFyc2UtPnNyY3BhZCwgcGFyc2UtPnByaXYtPnBlbmRpbmdfc2VnbWVudCk7CisgICAgICAgIHBhcnNlLT5wcml2LT5wZW5kaW5nX3NlZ21lbnQgPSBOVUxMOworICAgICAgfQorICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYXJzZS0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7CisgICAgfQorICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhcnNlKTsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iYXNlX3BhcnNlX3NpbmtfYWN0aXZhdGUgKEdzdFBhZCAqIHNpbmtwYWQpCit7CisgIEdzdEJhc2VQYXJzZSAqcGFyc2U7CisgIGdib29sZWFuIHJlc3VsdCA9IFRSVUU7CisgIEdzdFF1ZXJ5ICpxdWVyeTsKKyAgZ2Jvb2xlYW4gcHVsbF9tb2RlOworCisgIHBhcnNlID0gR1NUX0JBU0VfUEFSU0UgKGdzdF9wYWRfZ2V0X3BhcmVudCAoc2lua3BhZCkpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAic2luayBhY3RpdmF0ZSIpOworCisgIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19zY2hlZHVsaW5nICgpOworICByZXN1bHQgPSBnc3RfcGFkX3BlZXJfcXVlcnkgKHNpbmtwYWQsIHF1ZXJ5KTsKKyAgaWYgKHJlc3VsdCkgeworICAgIGdzdF9xdWVyeV9wYXJzZV9zY2hlZHVsaW5nIChxdWVyeSwgJnB1bGxfbW9kZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKyAgICAgICAgTlVMTCk7CisgIH0gZWxzZSB7CisgICAgcHVsbF9tb2RlID0gRkFMU0U7CisgIH0KKyAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7CisKKyAgaWYgKHB1bGxfbW9kZSkgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAidHJ5aW5nIHRvIGFjdGl2YXRlIGluIHB1bGwgbW9kZSIpOworICAgIHJlc3VsdCA9IGdzdF9wYWRfYWN0aXZhdGVfcHVsbCAoc2lua3BhZCwgVFJVRSk7CisgIH0gZWxzZSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJ0cnlpbmcgdG8gYWN0aXZhdGUgaW4gcHVzaCBtb2RlIik7CisgICAgcmVzdWx0ID0gZ3N0X3BhZF9hY3RpdmF0ZV9wdXNoIChzaW5rcGFkLCBUUlVFKTsKKyAgfQorCisgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAic2luayBhY3RpdmF0ZSByZXR1cm4gJWQiLCByZXN1bHQpOworICBnc3Rfb2JqZWN0X3VucmVmIChwYXJzZSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2Jhc2VfcGFyc2VfYWN0aXZhdGUgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBnYm9vbGVhbiBhY3RpdmUpCit7CisgIEdzdEJhc2VQYXJzZUNsYXNzICprbGFzczsKKyAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJhY3RpdmF0ZSAlZCIsIGFjdGl2ZSk7CisKKyAga2xhc3MgPSBHU1RfQkFTRV9QQVJTRV9HRVRfQ0xBU1MgKHBhcnNlKTsKKworICBpZiAoYWN0aXZlKSB7CisgICAgaWYgKHBhcnNlLT5wcml2LT5wYWRfbW9kZSA9PSBHU1RfQUNUSVZBVEVfTk9ORSAmJiBrbGFzcy0+c3RhcnQpCisgICAgICByZXN1bHQgPSBrbGFzcy0+c3RhcnQgKHBhcnNlKTsKKyAgfSBlbHNlIHsKKyAgICAvKiBXZSBtdXN0IG1ha2Ugc3VyZSBzdHJlYW1pbmcgaGFzIGZpbmlzaGVkIGJlZm9yZSByZXNldHRpbmcgdGhpbmdzCisgICAgICogYW5kIGNhbGxpbmcgdGhlIDo6c3RvcCB2ZnVuYyAqLworICAgIEdTVF9QQURfU1RSRUFNX0xPQ0sgKHBhcnNlLT5zaW5rcGFkKTsKKyAgICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKHBhcnNlLT5zaW5rcGFkKTsKKworICAgIGlmIChwYXJzZS0+cHJpdi0+cGFkX21vZGUgIT0gR1NUX0FDVElWQVRFX05PTkUgJiYga2xhc3MtPnN0b3ApCisgICAgICByZXN1bHQgPSBrbGFzcy0+c3RvcCAocGFyc2UpOworCisgICAgcGFyc2UtPnByaXYtPnBhZF9tb2RlID0gR1NUX0FDVElWQVRFX05PTkU7CisgIH0KKyAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJhY3RpdmF0ZSByZXR1cm46ICVkIiwgcmVzdWx0KTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfYmFzZV9wYXJzZV9zaW5rX2FjdGl2YXRlX3B1c2ggKEdzdFBhZCAqIHBhZCwgZ2Jvb2xlYW4gYWN0aXZlKQoreworICBnYm9vbGVhbiByZXN1bHQgPSBUUlVFOworICBHc3RCYXNlUGFyc2UgKnBhcnNlOworCisgIHBhcnNlID0gR1NUX0JBU0VfUEFSU0UgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJzaW5rIGFjdGl2YXRlIHB1c2ggJWQiLCBhY3RpdmUpOworCisgIHJlc3VsdCA9IGdzdF9iYXNlX3BhcnNlX2FjdGl2YXRlIChwYXJzZSwgYWN0aXZlKTsKKworICBpZiAocmVzdWx0KQorICAgIHBhcnNlLT5wcml2LT5wYWRfbW9kZSA9IGFjdGl2ZSA/IEdTVF9BQ1RJVkFURV9QVVNIIDogR1NUX0FDVElWQVRFX05PTkU7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJzaW5rIGFjdGl2YXRlIHB1c2ggcmV0dXJuOiAlZCIsIHJlc3VsdCk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAocGFyc2UpOworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iYXNlX3BhcnNlX3NpbmtfYWN0aXZhdGVfcHVsbCAoR3N0UGFkICogc2lua3BhZCwgZ2Jvb2xlYW4gYWN0aXZlKQoreworICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKKyAgR3N0QmFzZVBhcnNlICpwYXJzZTsKKworICBwYXJzZSA9IEdTVF9CQVNFX1BBUlNFIChnc3RfcGFkX2dldF9wYXJlbnQgKHNpbmtwYWQpKTsKKworICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImFjdGl2YXRlIHB1bGwgJWQiLCBhY3RpdmUpOworCisgIHJlc3VsdCA9IGdzdF9iYXNlX3BhcnNlX2FjdGl2YXRlIChwYXJzZSwgYWN0aXZlKTsKKworICBpZiAocmVzdWx0KSB7CisgICAgaWYgKGFjdGl2ZSkgeworICAgICAgcGFyc2UtPnByaXYtPnBlbmRpbmdfc2VnbWVudCA9IGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnBhcnNlLT5zZWdtZW50KTsKKyAgICAgIHJlc3VsdCAmPQorICAgICAgICAgIGdzdF9wYWRfc3RhcnRfdGFzayAoc2lua3BhZCwgKEdzdFRhc2tGdW5jdGlvbikgZ3N0X2Jhc2VfcGFyc2VfbG9vcCwKKyAgICAgICAgICBzaW5rcGFkKTsKKyAgICB9IGVsc2UgeworICAgICAgcmVzdWx0ICY9IGdzdF9wYWRfc3RvcF90YXNrIChzaW5rcGFkKTsKKyAgICB9CisgIH0KKworICBpZiAocmVzdWx0KQorICAgIHBhcnNlLT5wcml2LT5wYWRfbW9kZSA9IGFjdGl2ZSA/IEdTVF9BQ1RJVkFURV9QVUxMIDogR1NUX0FDVElWQVRFX05PTkU7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJzaW5rIGFjdGl2YXRlIHB1bGwgcmV0dXJuOiAlZCIsIHJlc3VsdCk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAocGFyc2UpOworICByZXR1cm4gcmVzdWx0OworfQorCisKKy8qKgorICogZ3N0X2Jhc2VfcGFyc2Vfc2V0X2R1cmF0aW9uOgorICogQHBhcnNlOiAjR3N0QmFzZVBhcnNlLgorICogQGZtdDogI0dzdEZvcm1hdC4KKyAqIEBkdXJhdGlvbjogZHVyYXRpb24gdmFsdWUuCisgKiBAaW50ZXJ2YWw6IGhvdyBvZnRlbiB0byB1cGRhdGUgdGhlIGR1cmF0aW9uIGVzdGltYXRlIGJhc2VkIG9uIGJpdHJhdGUsIG9yIDAuCisgKgorICogU2V0cyB0aGUgZHVyYXRpb24gb2YgdGhlIGN1cnJlbnRseSBwbGF5aW5nIG1lZGlhLiBTdWJjbGFzcyBjYW4gdXNlIHRoaXMKKyAqIHdoZW4gaXQgaXMgYWJsZSB0byBkZXRlcm1pbmUgZHVyYXRpb24gYW5kL29yIG5vdGljZXMgYSBjaGFuZ2UgaW4gdGhlIG1lZGlhCisgKiBkdXJhdGlvbi4gIEFsdGVybmF0aXZlbHksIGlmIEBpbnRlcnZhbCBpcyBub24temVybyAoZGVmYXVsdCksIHRoZW4gc3RyZWFtCisgKiBkdXJhdGlvbiBpcyBkZXRlcm1pbmVkIGJhc2VkIG9uIGVzdGltYXRlZCBiaXRyYXRlLCBhbmQgdXBkYXRlZCBldmVyeSBAaW50ZXJ2YWwKKyAqIGZyYW1lcy4KKyAqCisgKiBTaW5jZTogMC4xMC4zMworICovCit2b2lkCitnc3RfYmFzZV9wYXJzZV9zZXRfZHVyYXRpb24gKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAorICAgIEdzdEZvcm1hdCBmbXQsIGdpbnQ2NCBkdXJhdGlvbiwgZ2ludCBpbnRlcnZhbCkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAocGFyc2UgIT0gTlVMTCk7CisKKyAgaWYgKHBhcnNlLT5wcml2LT51cHN0cmVhbV9oYXNfZHVyYXRpb24pIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInVzaW5nIHVwc3RyZWFtIGR1cmF0aW9uOyBkaXNjYXJkaW5nIHVwZGF0ZSIpOworICAgIGdvdG8gZXhpdDsKKyAgfQorCisgIGlmIChkdXJhdGlvbiAhPSBwYXJzZS0+cHJpdi0+ZHVyYXRpb24pIHsKKyAgICBHc3RNZXNzYWdlICptOworCisgICAgbSA9IGdzdF9tZXNzYWdlX25ld19kdXJhdGlvbiAoR1NUX09CSkVDVCAocGFyc2UpLCBmbXQsIGR1cmF0aW9uKTsKKyAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UIChwYXJzZSksIG0pOworCisgICAgLyogVE9ETzogd2hhdCBhYm91dCBkdXJhdGlvbiB0YWc/ICovCisgIH0KKyAgcGFyc2UtPnByaXYtPmR1cmF0aW9uID0gZHVyYXRpb247CisgIHBhcnNlLT5wcml2LT5kdXJhdGlvbl9mbXQgPSBmbXQ7CisgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAic2V0IGR1cmF0aW9uOiAlIiBHX0dJTlQ2NF9GT1JNQVQsIGR1cmF0aW9uKTsKKyAgaWYgKGZtdCA9PSBHU1RfRk9STUFUX1RJTUUgJiYgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGR1cmF0aW9uKSkgeworICAgIGlmIChpbnRlcnZhbCAhPSAwKSB7CisgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInZhbGlkIGR1cmF0aW9uIHByb3ZpZGVkLCBkaXNhYmxpbmcgZXN0aW1hdGUiKTsKKyAgICAgIGludGVydmFsID0gMDsKKyAgICB9CisgIH0KKyAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJzZXQgdXBkYXRlIGludGVydmFsOiAlZCIsIGludGVydmFsKTsKKyAgcGFyc2UtPnByaXYtPnVwZGF0ZV9pbnRlcnZhbCA9IGludGVydmFsOworZXhpdDoKKyAgcmV0dXJuOworfQorCisvKioKKyAqIGdzdF9iYXNlX3BhcnNlX3NldF9hdmVyYWdlX2JpdHJhdGU6CisgKiBAcGFyc2U6ICNHc3RCYXNlUGFyc2UuCisgKiBAYml0cmF0ZTogYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvc2Vjb25kCisgKgorICogT3B0aW9uYWxseSBzZXRzIHRoZSBhdmVyYWdlIGJpdHJhdGUgZGV0ZWN0ZWQgaW4gbWVkaWEgKGlmIG5vbi16ZXJvKSwKKyAqIGUuZy4gYmFzZWQgb24gbWV0YWRhdGEsIGFzIGl0IHdpbGwgYmUgcG9zdGVkIHRvIHRoZSBhcHBsaWNhdGlvbi4KKyAqCisgKiBCeSBkZWZhdWx0LCBhbm5vdW5jZWQgYXZlcmFnZSBiaXRyYXRlIGlzIGVzdGltYXRlZC4gVGhlIGF2ZXJhZ2UgYml0cmF0ZQorICogaXMgdXNlZCB0byBlc3RpbWF0ZSB0aGUgdG90YWwgZHVyYXRpb24gb2YgdGhlIHN0cmVhbSBhbmQgdG8gZXN0aW1hdGUKKyAqIGEgc2VlayBwb3NpdGlvbiwgaWYgdGhlcmUncyBubyBpbmRleCBhbmQgdGhlIGZvcm1hdCBpcyBzeW5jYWJsZQorICogKHNlZSBnc3RfYmFzZV9wYXJzZV9zZXRfc3luY2FibGUoKSkuCisgKgorICogU2luY2U6IDAuMTAuMzMKKyAqLwordm9pZAorZ3N0X2Jhc2VfcGFyc2Vfc2V0X2F2ZXJhZ2VfYml0cmF0ZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsIGd1aW50IGJpdHJhdGUpCit7CisgIHBhcnNlLT5wcml2LT5iaXRyYXRlID0gYml0cmF0ZTsKKyAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJiaXRyYXRlICV1IiwgYml0cmF0ZSk7Cit9CisKKy8qKgorICogZ3N0X2Jhc2VfcGFyc2Vfc2V0X21pbl9mcmFtZV9zaXplOgorICogQHBhcnNlOiAjR3N0QmFzZVBhcnNlLgorICogQG1pbl9zaXplOiBNaW5pbXVtIHNpemUgb2YgdGhlIGRhdGEgdGhhdCB0aGlzIGJhc2UgY2xhc3Mgc2hvdWxkIGdpdmUgdG8KKyAqICAgICAgICAgICAgc3ViY2xhc3MuCisgKgorICogU3ViY2xhc3MgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIHRlbGwgdGhlIGJhc2UgY2xhc3MgdGhhdCBpdCBuZWVkcyB0bworICogZ2l2ZSBhdCBsZWFzdCAjbWluX3NpemUgYnVmZmVycy4KKyAqCisgKiBTaW5jZTogMC4xMC4zMworICovCit2b2lkCitnc3RfYmFzZV9wYXJzZV9zZXRfbWluX2ZyYW1lX3NpemUgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBndWludCBtaW5fc2l6ZSkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAocGFyc2UgIT0gTlVMTCk7CisKKyAgcGFyc2UtPnByaXYtPm1pbl9mcmFtZV9zaXplID0gbWluX3NpemU7CisgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgInNldCBmcmFtZV9taW5fc2l6ZTogJWQiLCBtaW5fc2l6ZSk7Cit9CisKKy8qKgorICogZ3N0X2Jhc2VfcGFyc2Vfc2V0X2ZyYW1lX3JhdGU6CisgKiBAcGFyc2U6IHRoZSAjR3N0QmFzZVBhcnNlIHRvIHNldAorICogQGZwc19udW06IGZyYW1lcyBwZXIgc2Vjb25kIChudW1lcmF0b3IpLgorICogQGZwc19kZW46IGZyYW1lcyBwZXIgc2Vjb25kIChkZW5vbWluYXRvcikuCisgKiBAbGVhZF9pbjogZnJhbWVzIG5lZWRlZCBiZWZvcmUgYSBzZWdtZW50IGZvciBzdWJzZXF1ZW50IGRlY29kZQorICogQGxlYWRfb3V0OiBmcmFtZXMgbmVlZGVkIGFmdGVyIGEgc2VnbWVudAorICoKKyAqIElmIGZyYW1lcyBwZXIgc2Vjb25kIGlzIGNvbmZpZ3VyZWQsIHBhcnNlciBjYW4gdGFrZSBjYXJlIG9mIGJ1ZmZlciBkdXJhdGlvbgorICogYW5kIHRpbWVzdGFtcGluZy4gIFdoZW4gcGVyZm9ybWluZyBzZWdtZW50IGNsaXBwaW5nLCBvciBzZWVraW5nIHRvIGEgc3BlY2lmaWMKKyAqIGxvY2F0aW9uLCBhIGNvcnJlc3BvbmRpbmcgZGVjb2RlciBtaWdodCBuZWVkIGFuIGluaXRpYWwgQGxlYWRfaW4gYW5kIGEKKyAqIGZvbGxvd2luZyBAbGVhZF9vdXQgbnVtYmVyIG9mIGZyYW1lcyB0byBlbnN1cmUgdGhlIGRlc2lyZWQgc2VnbWVudCBpcworICogZW50aXJlbHkgZmlsbGVkIHVwb24gZGVjb2RpbmcuCisgKgorICogU2luY2U6IDAuMTAuMzMKKyAqLwordm9pZAorZ3N0X2Jhc2VfcGFyc2Vfc2V0X2ZyYW1lX3JhdGUgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBndWludCBmcHNfbnVtLAorICAgIGd1aW50IGZwc19kZW4sIGd1aW50IGxlYWRfaW4sIGd1aW50IGxlYWRfb3V0KQoreworICBnX3JldHVybl9pZl9mYWlsIChwYXJzZSAhPSBOVUxMKTsKKworICBwYXJzZS0+cHJpdi0+ZnBzX251bSA9IGZwc19udW07CisgIHBhcnNlLT5wcml2LT5mcHNfZGVuID0gZnBzX2RlbjsKKyAgaWYgKCFmcHNfbnVtIHx8ICFmcHNfZGVuKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJpbnZhbGlkIGZwcyAoJWQvJWQpLCBpZ25vcmluZyBwYXJhbWV0ZXJzIiwKKyAgICAgICAgZnBzX251bSwgZnBzX2Rlbik7CisgICAgZnBzX251bSA9IGZwc19kZW4gPSAwOworICAgIHBhcnNlLT5wcml2LT5mcmFtZV9kdXJhdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgICAgcGFyc2UtPnByaXYtPmxlYWRfaW4gPSBwYXJzZS0+cHJpdi0+bGVhZF9vdXQgPSAwOworICAgIHBhcnNlLT5wcml2LT5sZWFkX2luX3RzID0gcGFyc2UtPnByaXYtPmxlYWRfb3V0X3RzID0gMDsKKyAgfSBlbHNlIHsKKyAgICBwYXJzZS0+cHJpdi0+ZnJhbWVfZHVyYXRpb24gPQorICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGUgKEdTVF9TRUNPTkQsIGZwc19kZW4sIGZwc19udW0pOworICAgIHBhcnNlLT5wcml2LT5sZWFkX2luID0gbGVhZF9pbjsKKyAgICBwYXJzZS0+cHJpdi0+bGVhZF9vdXQgPSBsZWFkX291dDsKKyAgICBwYXJzZS0+cHJpdi0+bGVhZF9pbl90cyA9CisgICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoR1NUX1NFQ09ORCwgZnBzX2RlbiAqIGxlYWRfaW4sIGZwc19udW0pOworICAgIHBhcnNlLT5wcml2LT5sZWFkX291dF90cyA9CisgICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoR1NUX1NFQ09ORCwgZnBzX2RlbiAqIGxlYWRfb3V0LCBmcHNfbnVtKTsKKyAgICAvKiBhaW0gZm9yIGFib3V0IDEuNXMgdG8gZXN0aW1hdGUgZHVyYXRpb24gKi8KKyAgICBpZiAocGFyc2UtPnByaXYtPnVwZGF0ZV9pbnRlcnZhbCA8IDApIHsKKyAgICAgIHBhcnNlLT5wcml2LT51cGRhdGVfaW50ZXJ2YWwgPSBmcHNfbnVtICogMyAvIChmcHNfZGVuICogMik7CisgICAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJlc3RpbWF0ZWQgdXBkYXRlIGludGVydmFsIHRvICVkIGZyYW1lcyIsCisgICAgICAgICAgcGFyc2UtPnByaXYtPnVwZGF0ZV9pbnRlcnZhbCk7CisgICAgfQorICB9CisgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgInNldCBmcHM6ICVkLyVkID0+IGR1cmF0aW9uOiAlIiBHX0dJTlQ2NF9GT1JNQVQgIiBtcyIsCisgICAgICBmcHNfbnVtLCBmcHNfZGVuLCBwYXJzZS0+cHJpdi0+ZnJhbWVfZHVyYXRpb24gLyBHU1RfTVNFQ09ORCk7CisgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgInNldCBsZWFkIGluOiAlZCBmcmFtZXMgPSAlIiBHX0dVSU5UNjRfRk9STUFUICIgbXMsICIKKyAgICAgICJsZWFkIG91dDogJWQgZnJhbWVzID0gJSIgR19HVUlOVDY0X0ZPUk1BVCAiIG1zIiwKKyAgICAgIGxlYWRfaW4sIHBhcnNlLT5wcml2LT5sZWFkX2luX3RzIC8gR1NUX01TRUNPTkQsCisgICAgICBsZWFkX291dCwgcGFyc2UtPnByaXYtPmxlYWRfb3V0X3RzIC8gR1NUX01TRUNPTkQpOworfQorCisvKioKKyAqIGdzdF9iYXNlX3BhcnNlX3NldF9oYXNfdGltaW5nX2luZm86CisgKiBAcGFyc2U6IGEgI0dzdEJhc2VQYXJzZQorICogQGhhc190aW1pbmc6IHdoZXRoZXIgZnJhbWVzIGNhcnJ5IHRpbWluZyBpbmZvcm1hdGlvbgorICoKKyAqIFNldCBpZiBmcmFtZXMgY2FycnkgdGltaW5nIGluZm9ybWF0aW9uIHdoaWNoIHRoZSBzdWJjbGFzcyBjYW4gKGdlbmVyYWxseSkKKyAqIHBhcnNlIGFuZCBwcm92aWRlLiAgSW4gcGFydGljdWxhciwgaW50cmluc2ljIChyYXRoZXIgdGhhbiBlc3RpbWF0ZWQpIHRpbWUKKyAqIGNhbiBiZSBvYnRhaW5lZCBmb2xsb3dpbmcgYSBzZWVrLgorICoKKyAqIFNpbmNlOiAwLjEwLjMzCisgKi8KK3ZvaWQKK2dzdF9iYXNlX3BhcnNlX3NldF9oYXNfdGltaW5nX2luZm8gKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBnYm9vbGVhbiBoYXNfdGltaW5nKQoreworICBwYXJzZS0+cHJpdi0+aGFzX3RpbWluZ19pbmZvID0gaGFzX3RpbWluZzsKKyAgR1NUX0lORk9fT0JKRUNUIChwYXJzZSwgImhhc190aW1pbmc6ICVzIiwgKGhhc190aW1pbmcpID8gInllcyIgOiAibm8iKTsKK30KKworLyoqCisgKiBnc3RfYmFzZV9wYXJzZV9zZXRfc3luY2FibGU6CisgKiBAcGFyc2U6IGEgI0dzdEJhc2VQYXJzZQorICogQHN5bmNhYmxlOiBzZXQgaWYgZnJhbWUgc3RhcnRzIGNhbiBiZSBpZGVudGlmaWVkCisgKgorICogU2V0IGlmIGZyYW1lIHN0YXJ0cyBjYW4gYmUgaWRlbnRpZmllZC4gVGhpcyBpcyBzZXQgYnkgZGVmYXVsdCBhbmQKKyAqIGRldGVybWluZXMgd2hldGhlciBzZWVraW5nIGJhc2VkIG9uIGJpdHJhdGUgYXZlcmFnZXMKKyAqIGlzIHBvc3NpYmxlIGZvciBhIGZvcm1hdC9zdHJlYW0uCisgKgorICogU2luY2U6IDAuMTAuMzMKKyAqLwordm9pZAorZ3N0X2Jhc2VfcGFyc2Vfc2V0X3N5bmNhYmxlIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgZ2Jvb2xlYW4gc3luY2FibGUpCit7CisgIHBhcnNlLT5wcml2LT5zeW5jYWJsZSA9IHN5bmNhYmxlOworICBHU1RfSU5GT19PQkpFQ1QgKHBhcnNlLCAic3luY2FibGU6ICVzIiwgKHN5bmNhYmxlKSA/ICJ5ZXMiIDogIm5vIik7Cit9CisKKy8qKgorICogZ3N0X2Jhc2VfcGFyc2Vfc2V0X3Bhc3N0aHJvdWdoOgorICogQHBhcnNlOiBhICNHc3RCYXNlUGFyc2UKKyAqIEBwYXNzdGhyb3VnaDogJVRSVUUgaWYgcGFyc2VyIHNob3VsZCBydW4gaW4gcGFzc3Rocm91Z2ggbW9kZQorICoKKyAqIFNldCBpZiB0aGUgbmF0dXJlIG9mIHRoZSBmb3JtYXQgb3IgY29uZmlndXJhdGlvbiBkb2VzIG5vdCBhbGxvdyAobXVjaCkKKyAqIHBhcnNpbmcsIGFuZCB0aGUgcGFyc2VyIHNob3VsZCBvcGVyYXRlIGluIHBhc3N0aHJvdWdoIG1vZGUgKHdoaWNoIG9ubHkKKyAqIGFwcGxpZXMgd2hlbiBvcGVyYXRpbmcgaW4gcHVzaCBtb2RlKS4gVGhhdCBpcywgaW5jb21pbmcgYnVmZmVycyBhcmUKKyAqIHB1c2hlZCB0aHJvdWdoIHVubW9kaWZpZWQsIGkuZS4gbm8gQGNoZWNrX3ZhbGlkX2ZyYW1lIG9yIEBwYXJzZV9mcmFtZQorICogY2FsbGJhY2tzIHdpbGwgYmUgaW52b2tlZCwgYnV0IEBwcmVfcHVzaF9idWZmZXIgd2lsbCBzdGlsbCBiZSBpbnZva2VkLAorICogc28gc3ViY2xhc3MgY2FuIHBlcmZvcm0gYXMgbXVjaCBvciBhcyBsaXR0bGUgaXMgYXBwcm9wcmlhdGUgZm9yCisgKiBwYXNzdGhyb3VnaCBzZW1hbnRpY3MgaW4gQHByZV9wdXNoX2J1ZmZlci4KKyAqCisgKiBTaW5jZTogMC4xMC4zMworICovCit2b2lkCitnc3RfYmFzZV9wYXJzZV9zZXRfcGFzc3Rocm91Z2ggKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBnYm9vbGVhbiBwYXNzdGhyb3VnaCkKK3sKKyAgcGFyc2UtPnByaXYtPnBhc3N0aHJvdWdoID0gcGFzc3Rocm91Z2g7CisgIEdTVF9JTkZPX09CSkVDVCAocGFyc2UsICJwYXNzdGhyb3VnaDogJXMiLCAocGFzc3Rocm91Z2gpID8gInllcyIgOiAibm8iKTsKK30KKworLyoqCisgKiBnc3RfYmFzZV9wYXJzZV9zZXRfbGF0ZW5jeToKKyAqIEBwYXJzZTogYSAjR3N0QmFzZVBhcnNlCisgKiBAbWluX2xhdGVuY3k6IG1pbmltdW0gcGFyc2UgbGF0ZW5jeQorICogQG1heF9sYXRlbmN5OiBtYXhpbXVtIHBhcnNlIGxhdGVuY3kKKyAqCisgKiBTZXRzIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtICh3aGljaCBtYXkgbGlrZWx5IGJlIGVxdWFsKSBsYXRlbmN5IGludHJvZHVjZWQKKyAqIGJ5IHRoZSBwYXJzaW5nIHByb2Nlc3MuICBJZiB0aGVyZSBpcyBzdWNoIGEgbGF0ZW5jeSwgd2hpY2ggZGVwZW5kcyBvbiB0aGUKKyAqIHBhcnRpY3VsYXIgcGFyc2luZyBvZiB0aGUgZm9ybWF0LCBpdCB0eXBpY2FsbHkgY29ycmVzcG9uZHMgdG8gMSBmcmFtZSBkdXJhdGlvbi4KKyAqCisgKiBTaW5jZTogMC4xMC4zNAorICovCit2b2lkCitnc3RfYmFzZV9wYXJzZV9zZXRfbGF0ZW5jeSAoR3N0QmFzZVBhcnNlICogcGFyc2UsIEdzdENsb2NrVGltZSBtaW5fbGF0ZW5jeSwKKyAgICBHc3RDbG9ja1RpbWUgbWF4X2xhdGVuY3kpCit7CisgIEdTVF9PQkpFQ1RfTE9DSyAocGFyc2UpOworICBwYXJzZS0+cHJpdi0+bWluX2xhdGVuY3kgPSBtaW5fbGF0ZW5jeTsKKyAgcGFyc2UtPnByaXYtPm1heF9sYXRlbmN5ID0gbWF4X2xhdGVuY3k7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYXJzZSk7CisgIEdTVF9JTkZPX09CSkVDVCAocGFyc2UsICJtaW4vbWF4IGxhdGVuY3kgJSIgR1NUX1RJTUVfRk9STUFUICIsICUiCisgICAgICBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKG1pbl9sYXRlbmN5KSwKKyAgICAgIEdTVF9USU1FX0FSR1MgKG1heF9sYXRlbmN5KSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2Jhc2VfcGFyc2VfZ2V0X2R1cmF0aW9uIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgR3N0Rm9ybWF0IGZvcm1hdCwKKyAgICBHc3RDbG9ja1RpbWUgKiBkdXJhdGlvbikKK3sKKyAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGR1cmF0aW9uICE9IE5VTEwsIEZBTFNFKTsKKworICAqZHVyYXRpb24gPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICBpZiAocGFyc2UtPnByaXYtPmR1cmF0aW9uICE9IC0xICYmIGZvcm1hdCA9PSBwYXJzZS0+cHJpdi0+ZHVyYXRpb25fZm10KSB7CisgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAidXNpbmcgcHJvdmlkZWQgZHVyYXRpb24iKTsKKyAgICAqZHVyYXRpb24gPSBwYXJzZS0+cHJpdi0+ZHVyYXRpb247CisgICAgcmVzID0gVFJVRTsKKyAgfSBlbHNlIGlmIChwYXJzZS0+cHJpdi0+ZHVyYXRpb24gIT0gLTEpIHsKKyAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJjb252ZXJ0aW5nIHByb3ZpZGVkIGR1cmF0aW9uIik7CisgICAgcmVzID0gZ3N0X2Jhc2VfcGFyc2VfY29udmVydCAocGFyc2UsIHBhcnNlLT5wcml2LT5kdXJhdGlvbl9mbXQsCisgICAgICAgIHBhcnNlLT5wcml2LT5kdXJhdGlvbiwgZm9ybWF0LCAoZ2ludDY0ICopIGR1cmF0aW9uKTsKKyAgfSBlbHNlIGlmIChmb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FICYmIHBhcnNlLT5wcml2LT5lc3RpbWF0ZWRfZHVyYXRpb24gIT0gLTEpIHsKKyAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJ1c2luZyBlc3RpbWF0ZWQgZHVyYXRpb24iKTsKKyAgICAqZHVyYXRpb24gPSBwYXJzZS0+cHJpdi0+ZXN0aW1hdGVkX2R1cmF0aW9uOworICAgIHJlcyA9IFRSVUU7CisgIH0KKworICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJyZXM6ICVkLCBkdXJhdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQsIHJlcywKKyAgICAgIEdTVF9USU1FX0FSR1MgKCpkdXJhdGlvbikpOworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgY29uc3QgR3N0UXVlcnlUeXBlICoKK2dzdF9iYXNlX3BhcnNlX2dldF9xdWVyeXR5cGVzIChHc3RQYWQgKiBwYWQpCit7CisgIHN0YXRpYyBjb25zdCBHc3RRdWVyeVR5cGUgbGlzdFtdID0geworICAgIEdTVF9RVUVSWV9QT1NJVElPTiwKKyAgICBHU1RfUVVFUllfRFVSQVRJT04sCisgICAgR1NUX1FVRVJZX0ZPUk1BVFMsCisgICAgR1NUX1FVRVJZX1NFRUtJTkcsCisgICAgR1NUX1FVRVJZX0NPTlZFUlQsCisgICAgR1NUX1FVRVJZX05PTkUKKyAgfTsKKworICByZXR1cm4gbGlzdDsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfYmFzZV9wYXJzZV9xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RRdWVyeSAqIHF1ZXJ5KQoreworICBHc3RCYXNlUGFyc2UgKnBhcnNlOworICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKKworICBwYXJzZSA9IEdTVF9CQVNFX1BBUlNFIChHU1RfUEFEX1BBUkVOVCAocGFkKSk7CisKKyAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiaGFuZGxpbmcgcXVlcnk6ICUiIEdTVF9QVFJfRk9STUFULCBxdWVyeSk7CisKKyAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7CisgICAgY2FzZSBHU1RfUVVFUllfUE9TSVRJT046CisgICAgeworICAgICAgZ2ludDY0IGRlc3RfdmFsdWU7CisgICAgICBHc3RGb3JtYXQgZm9ybWF0OworCisgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInBvc2l0aW9uIHF1ZXJ5Iik7CisgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24gKHF1ZXJ5LCAmZm9ybWF0LCBOVUxMKTsKKworICAgICAgR1NUX09CSkVDVF9MT0NLIChwYXJzZSk7CisgICAgICBpZiAoZm9ybWF0ID09IEdTVF9GT1JNQVRfQllURVMpIHsKKyAgICAgICAgZGVzdF92YWx1ZSA9IHBhcnNlLT5wcml2LT5vZmZzZXQ7CisgICAgICAgIHJlcyA9IFRSVUU7CisgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PSBwYXJzZS0+c2VnbWVudC5mb3JtYXQgJiYKKyAgICAgICAgICBHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocGFyc2UtPnNlZ21lbnQucG9zaXRpb24pKSB7CisgICAgICAgIGRlc3RfdmFsdWUgPSBwYXJzZS0+c2VnbWVudC5wb3NpdGlvbjsKKyAgICAgICAgcmVzID0gVFJVRTsKKyAgICAgIH0KKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYXJzZSk7CisKKyAgICAgIGlmIChyZXMpCisgICAgICAgIGdzdF9xdWVyeV9zZXRfcG9zaXRpb24gKHF1ZXJ5LCBmb3JtYXQsIGRlc3RfdmFsdWUpOworICAgICAgZWxzZSB7CisgICAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBxdWVyeSk7CisgICAgICAgIGlmICghcmVzKSB7CisgICAgICAgICAgLyogbm8gcHJlY2lzZSByZXN1bHQsIHVwc3RyZWFtIG5vIGlkZWEgZWl0aGVyLCB0aGVuIGJlc3QgZXN0aW1hdGUgKi8KKyAgICAgICAgICAvKiBwcml2LT5vZmZzZXQgaXMgdXBkYXRlZCBpbiBib3RoIFBVU0gvUFVMTCBtb2RlcyAqLworICAgICAgICAgIHJlcyA9IGdzdF9iYXNlX3BhcnNlX2NvbnZlcnQgKHBhcnNlLAorICAgICAgICAgICAgICBHU1RfRk9STUFUX0JZVEVTLCBwYXJzZS0+cHJpdi0+b2Zmc2V0LCBmb3JtYXQsICZkZXN0X3ZhbHVlKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX1FVRVJZX0RVUkFUSU9OOgorICAgIHsKKyAgICAgIEdzdEZvcm1hdCBmb3JtYXQ7CisgICAgICBHc3RDbG9ja1RpbWUgZHVyYXRpb247CisKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiZHVyYXRpb24gcXVlcnkiKTsKKyAgICAgIGdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbiAocXVlcnksICZmb3JtYXQsIE5VTEwpOworCisgICAgICAvKiBjb25zdWx0IHVwc3RyZWFtICovCisgICAgICByZXMgPSBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKHBhZCwgcXVlcnkpOworCisgICAgICAvKiBvdGhlcndpc2UgYmVzdCBlc3RpbWF0ZSBmcm9tIHVzICovCisgICAgICBpZiAoIXJlcykgeworICAgICAgICByZXMgPSBnc3RfYmFzZV9wYXJzZV9nZXRfZHVyYXRpb24gKHBhcnNlLCBmb3JtYXQsICZkdXJhdGlvbik7CisgICAgICAgIGlmIChyZXMpCisgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbiAocXVlcnksIGZvcm1hdCwgZHVyYXRpb24pOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX1FVRVJZX1NFRUtJTkc6CisgICAgeworICAgICAgR3N0Rm9ybWF0IGZtdDsKKyAgICAgIEdzdENsb2NrVGltZSBkdXJhdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgICAgICBnYm9vbGVhbiBzZWVrYWJsZSA9IEZBTFNFOworCisgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInNlZWtpbmcgcXVlcnkiKTsKKyAgICAgIGdzdF9xdWVyeV9wYXJzZV9zZWVraW5nIChxdWVyeSwgJmZtdCwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKyAgICAgIC8qIGNvbnN1bHQgdXBzdHJlYW0gKi8KKyAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBxdWVyeSk7CisKKyAgICAgIC8qIHdlIG1heSBiZSBhYmxlIHRvIGhlbHAgaWYgaW4gVElNRSAqLworICAgICAgaWYgKGZtdCA9PSBHU1RfRk9STUFUX1RJTUUgJiYgZ3N0X2Jhc2VfcGFyc2VfaXNfc2Vla2FibGUgKHBhcnNlKSkgeworICAgICAgICBnc3RfcXVlcnlfcGFyc2Vfc2Vla2luZyAocXVlcnksICZmbXQsICZzZWVrYWJsZSwgTlVMTCwgTlVMTCk7CisgICAgICAgIC8qIGFscmVhZHkgT0sgaWYgdXBzdHJlYW0gdGFrZXMgY2FyZSAqLworICAgICAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJ1cHN0cmVhbSBoYW5kbGVkICVkLCBzZWVrYWJsZSAlZCIsCisgICAgICAgICAgICByZXMsIHNlZWthYmxlKTsKKyAgICAgICAgaWYgKCEocmVzICYmIHNlZWthYmxlKSkgeworICAgICAgICAgIGlmICghZ3N0X2Jhc2VfcGFyc2VfZ2V0X2R1cmF0aW9uIChwYXJzZSwgR1NUX0ZPUk1BVF9USU1FLCAmZHVyYXRpb24pCisgICAgICAgICAgICAgIHx8IGR1cmF0aW9uID09IC0xKSB7CisgICAgICAgICAgICAvKiBzZWVrYWJsZSBpZiB3ZSBzdGlsbCBoYXZlIGEgY2hhbmNlIHRvIGdldCBkdXJhdGlvbiBsYXRlciBvbiAqLworICAgICAgICAgICAgc2Vla2FibGUgPQorICAgICAgICAgICAgICAgIHBhcnNlLT5wcml2LT51cHN0cmVhbV9zZWVrYWJsZSAmJiBwYXJzZS0+cHJpdi0+dXBkYXRlX2ludGVydmFsOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzZWVrYWJsZSA9IHBhcnNlLT5wcml2LT51cHN0cmVhbV9zZWVrYWJsZTsKKyAgICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgImFscmVhZHkgZGV0ZXJtaW5lIHVwc3RyZWFtIHNlZWthYmxlZDogJWQiLAorICAgICAgICAgICAgICAgIHNlZWthYmxlKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9zZWVraW5nIChxdWVyeSwgR1NUX0ZPUk1BVF9USU1FLCBzZWVrYWJsZSwgMCwgZHVyYXRpb24pOworICAgICAgICAgIHJlcyA9IFRSVUU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9RVUVSWV9GT1JNQVRTOgorICAgICAgZ3N0X3F1ZXJ5X3NldF9mb3JtYXRzdiAocXVlcnksIDMsIGZtdGxpc3QpOworICAgICAgcmVzID0gVFJVRTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1FVRVJZX0NPTlZFUlQ6CisgICAgeworICAgICAgR3N0Rm9ybWF0IHNyY19mb3JtYXQsIGRlc3RfZm9ybWF0OworICAgICAgZ2ludDY0IHNyY192YWx1ZSwgZGVzdF92YWx1ZTsKKworICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2NvbnZlcnQgKHF1ZXJ5LCAmc3JjX2Zvcm1hdCwgJnNyY192YWx1ZSwKKyAgICAgICAgICAmZGVzdF9mb3JtYXQsICZkZXN0X3ZhbHVlKTsKKworICAgICAgcmVzID0gZ3N0X2Jhc2VfcGFyc2VfY29udmVydCAocGFyc2UsIHNyY19mb3JtYXQsIHNyY192YWx1ZSwKKyAgICAgICAgICBkZXN0X2Zvcm1hdCwgJmRlc3RfdmFsdWUpOworICAgICAgaWYgKHJlcykgeworICAgICAgICBnc3RfcXVlcnlfc2V0X2NvbnZlcnQgKHF1ZXJ5LCBzcmNfZm9ybWF0LCBzcmNfdmFsdWUsCisgICAgICAgICAgICBkZXN0X2Zvcm1hdCwgZGVzdF92YWx1ZSk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfUVVFUllfTEFURU5DWToKKyAgICB7CisgICAgICBpZiAoKHJlcyA9IGdzdF9wYWRfcGVlcl9xdWVyeSAocGFyc2UtPnNpbmtwYWQsIHF1ZXJ5KSkpIHsKKyAgICAgICAgZ2Jvb2xlYW4gbGl2ZTsKKyAgICAgICAgR3N0Q2xvY2tUaW1lIG1pbl9sYXRlbmN5LCBtYXhfbGF0ZW5jeTsKKworICAgICAgICBnc3RfcXVlcnlfcGFyc2VfbGF0ZW5jeSAocXVlcnksICZsaXZlLCAmbWluX2xhdGVuY3ksICZtYXhfbGF0ZW5jeSk7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiUGVlciBsYXRlbmN5OiBsaXZlICVkLCBtaW4gJSIKKyAgICAgICAgICAgIEdTVF9USU1FX0ZPUk1BVCAiIG1heCAlIiBHU1RfVElNRV9GT1JNQVQsIGxpdmUsCisgICAgICAgICAgICBHU1RfVElNRV9BUkdTIChtaW5fbGF0ZW5jeSksIEdTVF9USU1FX0FSR1MgKG1heF9sYXRlbmN5KSk7CisKKyAgICAgICAgR1NUX09CSkVDVF9MT0NLIChwYXJzZSk7CisgICAgICAgIC8qIGFkZCBvdXIgbGF0ZW5jeSAqLworICAgICAgICBpZiAobWluX2xhdGVuY3kgIT0gLTEpCisgICAgICAgICAgbWluX2xhdGVuY3kgKz0gcGFyc2UtPnByaXYtPm1pbl9sYXRlbmN5OworICAgICAgICBpZiAobWF4X2xhdGVuY3kgIT0gLTEpCisgICAgICAgICAgbWF4X2xhdGVuY3kgKz0gcGFyc2UtPnByaXYtPm1heF9sYXRlbmN5OworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFyc2UpOworCisgICAgICAgIGdzdF9xdWVyeV9zZXRfbGF0ZW5jeSAocXVlcnksIGxpdmUsIG1pbl9sYXRlbmN5LCBtYXhfbGF0ZW5jeSk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBxdWVyeSk7CisgICAgICBicmVhazsKKyAgfQorICByZXR1cm4gcmVzOworfQorCisvKiBzY2FucyBmb3IgYSBjbHVzdGVyIHN0YXJ0IGZyb20gQHBvcywKKyAqIHJldHVybiBHU1RfRkxPV19PSyBhbmQgZnJhbWUgcG9zaXRpb24vdGltZSBpbiBAcG9zL0B0aW1lIGlmIGZvdW5kICovCitzdGF0aWMgR3N0Rmxvd1JldHVybgorZ3N0X2Jhc2VfcGFyc2VfZmluZF9mcmFtZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsIGdpbnQ2NCAqIHBvcywKKyAgICBHc3RDbG9ja1RpbWUgKiB0aW1lLCBHc3RDbG9ja1RpbWUgKiBkdXJhdGlvbikKK3sKKyAgR3N0QmFzZVBhcnNlQ2xhc3MgKmtsYXNzOworICBnaW50NjQgb3JpZ19vZmZzZXQ7CisgIGdib29sZWFuIG9yaWdfZHJhaW4sIG9yaWdfZGlzY29udDsKKyAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKKyAgR3N0QnVmZmVyICpidWYgPSBOVUxMOworICBHc3RCYXNlUGFyc2VGcmFtZSBmcmFtZTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAocG9zICE9IE5VTEwsIEdTVF9GTE9XX0VSUk9SKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRpbWUgIT0gTlVMTCwgR1NUX0ZMT1dfRVJST1IpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZHVyYXRpb24gIT0gTlVMTCwgR1NUX0ZMT1dfRVJST1IpOworCisgIGtsYXNzID0gR1NUX0JBU0VfUEFSU0VfR0VUX0NMQVNTIChwYXJzZSk7CisKKyAgKnRpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICAqZHVyYXRpb24gPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworCisgIC8qIHNhdmUgc3RhdGUgKi8KKyAgb3JpZ19vZmZzZXQgPSBwYXJzZS0+cHJpdi0+b2Zmc2V0OworICBvcmlnX2Rpc2NvbnQgPSBwYXJzZS0+cHJpdi0+ZGlzY29udDsKKyAgb3JpZ19kcmFpbiA9IHBhcnNlLT5wcml2LT5kcmFpbjsKKworICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInNjYW5uaW5nIGZvciBmcmFtZSBzdGFydGluZyBhdCAlIiBHX0dJTlQ2NF9GT1JNQVQKKyAgICAgICIgKCUjIiBHX0dJTlQ2NF9NT0RJRklFUiAieCkiLCAqcG9zLCAqcG9zKTsKKworICBnc3RfYmFzZV9wYXJzZV9mcmFtZV9pbml0ICgmZnJhbWUpOworCisgIC8qIGp1bXAgZWxzZXdoZXJlIGFuZCBsb2NhdGUgbmV4dCBmcmFtZSAqLworICBwYXJzZS0+cHJpdi0+b2Zmc2V0ID0gKnBvczsKKyAgcmV0ID0gZ3N0X2Jhc2VfcGFyc2Vfc2Nhbl9mcmFtZSAocGFyc2UsIGtsYXNzLCAmZnJhbWUsIEZBTFNFKTsKKyAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKKyAgICBnb3RvIGRvbmU7CisKKyAgYnVmID0gZnJhbWUuYnVmZmVyOworICBHU1RfTE9HX09CSkVDVCAocGFyc2UsCisgICAgICAicGVlayBwYXJzaW5nIGZyYW1lIGF0IG9mZnNldCAlIiBHX0dVSU5UNjRfRk9STUFUCisgICAgICAiICglIyIgR19HSU5UNjRfTU9ESUZJRVIgIngpIG9mIHNpemUgJSIgR19HU0laRV9GT1JNQVQsCisgICAgICBHU1RfQlVGRkVSX09GRlNFVCAoYnVmKSwgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZiksCisgICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpKTsKKworICAvKiBnZXQgb2Zmc2V0IGZpcnN0LCBzdWJjbGFzcyBwYXJzaW5nIG1pZ2h0IGR1bXAgb3RoZXIgc3R1ZmYgaW4gdGhlcmUgKi8KKyAgKnBvcyA9IEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpOworICByZXQgPSBrbGFzcy0+cGFyc2VfZnJhbWUgKHBhcnNlLCAmZnJhbWUpOworICBidWYgPSBmcmFtZS5idWZmZXI7CisKKyAgLyogYnV0IGl0IHNob3VsZCBwcm92aWRlIHByb3BlciB0aW1lICovCisgICp0aW1lID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1Zik7CisgICpkdXJhdGlvbiA9IEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1Zik7CisKKyAgZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfZnJlZSAoJmZyYW1lKTsKKworICBHU1RfTE9HX09CSkVDVCAocGFyc2UsCisgICAgICAiZnJhbWUgd2l0aCB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVCAiIGF0IG9mZnNldCAlIiBHX0dJTlQ2NF9GT1JNQVQsCisgICAgICBHU1RfVElNRV9BUkdTICgqdGltZSksICpwb3MpOworCitkb25lOgorICAvKiByZXN0b3JlIHN0YXRlICovCisgIHBhcnNlLT5wcml2LT5vZmZzZXQgPSBvcmlnX29mZnNldDsKKyAgcGFyc2UtPnByaXYtPmRpc2NvbnQgPSBvcmlnX2Rpc2NvbnQ7CisgIHBhcnNlLT5wcml2LT5kcmFpbiA9IG9yaWdfZHJhaW47CisKKyAgcmV0dXJuIHJldDsKK30KKworLyogYmlzZWN0IGFuZCBzY2FuIHRocm91Z2ggZmlsZSBmb3IgZnJhbWUgc3RhcnRpbmcgYmVmb3JlIEB0aW1lLAorICogcmV0dXJucyBPSyBhbmQgQHRpbWUvQG9mZnNldCBpZiBmb3VuZCwgTk9ORSBhbmQvb3IgZXJyb3Igb3RoZXJ3aXNlCisgKiBJZiBAdGltZSA9PSBHX01BWElOVDY0LCBzY2FuIGZvciBkdXJhdGlvbiAoID09IGxhc3QgZnJhbWUpICovCitzdGF0aWMgR3N0Rmxvd1JldHVybgorZ3N0X2Jhc2VfcGFyc2VfbG9jYXRlX3RpbWUgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBHc3RDbG9ja1RpbWUgKiBfdGltZSwKKyAgICBnaW50NjQgKiBfb2Zmc2V0KQoreworICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOworICBnaW50NjQgbHBvcywgaHBvcywgbmV3cG9zOworICBHc3RDbG9ja1RpbWUgdGltZSwgbHRpbWUsIGh0aW1lLCBuZXd0aW1lLCBkdXI7CisgIGdib29sZWFuIGNvbnQgPSBUUlVFOworICBjb25zdCBHc3RDbG9ja1RpbWUgdG9sZXJhbmNlID0gVEFSR0VUX0RJRkZFUkVOQ0U7CisgIGNvbnN0IGd1aW50IGNodW5rID0gNCAqIDEwMjQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKF90aW1lICE9IE5VTEwsIEdTVF9GTE9XX0VSUk9SKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKF9vZmZzZXQgIT0gTlVMTCwgR1NUX0ZMT1dfRVJST1IpOworCisgIC8qIFRPRE8gYWxzbyBtYWtlIGtleWZyYW1lIGF3YXJlIGlmIHVzZWZ1bCBzb21lIGRheSAqLworCisgIHRpbWUgPSAqX3RpbWU7CisKKyAgLyogYmFzaWMgY2FzZXMgKi8KKyAgaWYgKHRpbWUgPT0gMCkgeworICAgICpfb2Zmc2V0ID0gMDsKKyAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisgIH0KKworICBpZiAodGltZSA9PSAtMSkgeworICAgICpfb2Zmc2V0ID0gLTE7CisgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICB9CisKKyAgLyogZG8gbm90IGtub3cgYXQgZmlyc3QgKi8KKyAgKl9vZmZzZXQgPSAtMTsKKyAgKl90aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKworICAvKiBuZWVkIGluaXRpYWwgcG9zaXRpb25zOyBzdGFydCBhbmQgZW5kICovCisgIGxwb3MgPSBwYXJzZS0+cHJpdi0+Zmlyc3RfZnJhbWVfb2Zmc2V0OworICBsdGltZSA9IHBhcnNlLT5wcml2LT5maXJzdF9mcmFtZV90czsKKyAgaHRpbWUgPSBwYXJzZS0+cHJpdi0+ZHVyYXRpb247CisgIGhwb3MgPSBwYXJzZS0+cHJpdi0+dXBzdHJlYW1fc2l6ZTsKKworICAvKiBjaGVjayBwcmVjb25kaXRpb25zIGFyZSBzYXRpc2ZpZWQ7CisgICAqIHN0YXJ0IGFuZCBlbmQgYXJlIG5lZWRlZCwgZXhjZXB0IGZvciBzcGVjaWFsIGNhc2Ugd2hlcmUgd2Ugc2NhbiBmb3IKKyAgICogbGFzdCBmcmFtZSB0byBkZXRlcm1pbmUgZHVyYXRpb24gKi8KKyAgaWYgKHBhcnNlLT5wcml2LT5wYWRfbW9kZSAhPSBHU1RfQUNUSVZBVEVfUFVMTCB8fCAhaHBvcyB8fAorICAgICAgIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChsdGltZSkgfHwKKyAgICAgICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGh0aW1lKSAmJiB0aW1lICE9IEdfTUFYSU5UNjQpKSB7CisgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICB9CisKKyAgLyogc2hvcnRjdXQgY2FzZXMgKi8KKyAgaWYgKHRpbWUgPCBsdGltZSkgeworICAgIGdvdG8gZXhpdDsKKyAgfSBlbHNlIGlmICh0aW1lIDwgbHRpbWUgKyB0b2xlcmFuY2UpIHsKKyAgICAqX29mZnNldCA9IGxwb3M7CisgICAgKl90aW1lID0gbHRpbWU7CisgICAgZ290byBleGl0OworICB9IGVsc2UgaWYgKHRpbWUgPj0gaHRpbWUpIHsKKyAgICAqX29mZnNldCA9IGhwb3M7CisgICAgKl90aW1lID0gaHRpbWU7CisgICAgZ290byBleGl0OworICB9CisKKyAgd2hpbGUgKGh0aW1lID4gbHRpbWUgJiYgY29udCkgeworICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwKKyAgICAgICAgImxwb3M6ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgbHRpbWU6ICUiIEdTVF9USU1FX0ZPUk1BVCwgbHBvcywKKyAgICAgICAgR1NUX1RJTUVfQVJHUyAobHRpbWUpKTsKKyAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsCisgICAgICAgICJocG9zOiAlIiBHX0dVSU5UNjRfRk9STUFUICIsIGh0aW1lOiAlIiBHU1RfVElNRV9GT1JNQVQsIGhwb3MsCisgICAgICAgIEdTVF9USU1FX0FSR1MgKGh0aW1lKSk7CisgICAgaWYgKEdfVU5MSUtFTFkgKHRpbWUgPT0gR19NQVhJTlQ2NCkpIHsKKyAgICAgIG5ld3BvcyA9IGhwb3M7CisgICAgfSBlbHNlIGlmIChHX0xJS0VMWSAoaHBvcyA+IGxwb3MpKSB7CisgICAgICBuZXdwb3MgPQorICAgICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoaHBvcyAtIGxwb3MsIHRpbWUgLSBsdGltZSwgaHRpbWUgLSBsdGltZSkgKworICAgICAgICAgIGxwb3MgLSBjaHVuazsKKyAgICB9IGVsc2UgeworICAgICAgLyogc2hvdWxkIG1lYW4gbHBvcyA9PSBocG9zLCBzaW5jZSBscG9zIDw9IGhwb3MgaXMgaW52YXJpYW50ICovCisgICAgICBuZXdwb3MgPSBscG9zOworICAgICAgLyogd2UgY2hlY2sgdGhpcyBjYXNlIG9uY2UsIGJ1dCBub3QgZm9yZXZlciwgc28gYnJlYWsgbG9vcCAqLworICAgICAgY29udCA9IEZBTFNFOworICAgIH0KKworICAgIC8qIGVuc3VyZSAqLworICAgIG5ld3BvcyA9IENMQU1QIChuZXdwb3MsIGxwb3MsIGhwb3MpOworICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwKKyAgICAgICAgImVzdGltYXRlZCBfb2Zmc2V0IGZvciAlIiBHU1RfVElNRV9GT1JNQVQgIjogJSIgR19HSU5UNjRfRk9STUFULAorICAgICAgICBHU1RfVElNRV9BUkdTICh0aW1lKSwgbmV3cG9zKTsKKworICAgIHJldCA9IGdzdF9iYXNlX3BhcnNlX2ZpbmRfZnJhbWUgKHBhcnNlLCAmbmV3cG9zLCAmbmV3dGltZSwgJmR1cik7CisgICAgaWYgKHJldCA9PSBHU1RfRkxPV19VTkVYUEVDVEVEKSB7CisgICAgICAvKiBoZXVyaXN0aWMgSEFDSyAqLworICAgICAgaHBvcyA9IE1BWCAobHBvcywgaHBvcyAtIGNodW5rKTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0gZWxzZSBpZiAocmV0ICE9IEdTVF9GTE9XX09LKSB7CisgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYgKG5ld3RpbWUgPT0gLTEgfHwgbmV3cG9zID09IC0xKSB7CisgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInN1YmNsYXNzIGRpZCBub3QgcHJvdmlkZSBtZXRhZGF0YTsgYWJvcnRpbmciKTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChHX1VOTElLRUxZICh0aW1lID09IEdfTUFYSU5UNjQpKSB7CisgICAgICAqX29mZnNldCA9IG5ld3BvczsKKyAgICAgICpfdGltZSA9IG5ld3RpbWU7CisgICAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGR1cikpCisgICAgICAgICpfdGltZSArPSBkdXI7CisgICAgICBicmVhazsKKyAgICB9IGVsc2UgaWYgKG5ld3RpbWUgPiB0aW1lKSB7CisgICAgICAvKiBvdmVyc2hvb3QgKi8KKyAgICAgIGhwb3MgPSAobmV3cG9zID49IGhwb3MpID8gTUFYIChscG9zLCBocG9zIC0gY2h1bmspIDogTUFYIChscG9zLCBuZXdwb3MpOworICAgICAgaHRpbWUgPSBuZXd0aW1lOworICAgIH0gZWxzZSBpZiAobmV3dGltZSArIHRvbGVyYW5jZSA+IHRpbWUpIHsKKyAgICAgIC8qIGNsb3NlIGVub3VnaCB1bmRlcnNob290ICovCisgICAgICAqX29mZnNldCA9IG5ld3BvczsKKyAgICAgICpfdGltZSA9IG5ld3RpbWU7CisgICAgICBicmVhazsKKyAgICB9IGVsc2UgaWYgKG5ld3RpbWUgPCBsdGltZSkgeworICAgICAgLyogc28gYSBwb3NpdGlvbiBiZXlvbmQgbHBvcyByZXN1bHRlZCBpbiBlYXJsaWVyIHRpbWUgdGhhbiBsdGltZSAuLi4gKi8KKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAibm9uLWFzY2VuZGluZyB0aW1lOyBhYm9ydGluZyIpOworICAgICAgYnJlYWs7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIHVuZGVyc2hvb3QgdG9vIGZhciAqLworICAgICAgbmV3cG9zICs9IG5ld3BvcyA9PSBscG9zID8gY2h1bmsgOiAwOworICAgICAgbHBvcyA9IENMQU1QIChuZXdwb3MsIGxwb3MsIGhwb3MpOworICAgICAgbHRpbWUgPSBuZXd0aW1lOworICAgIH0KKyAgfQorCitleGl0OgorICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJyZXR1cm4gb2Zmc2V0ICUiIEdfR0lOVDY0X0ZPUk1BVCAiLCB0aW1lICUiCisgICAgICBHU1RfVElNRV9GT1JNQVQsICpfb2Zmc2V0LCBHU1RfVElNRV9BUkdTICgqX3RpbWUpKTsKKyAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGdpbnQ2NAorZ3N0X2Jhc2VfcGFyc2VfZmluZF9vZmZzZXQgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBHc3RDbG9ja1RpbWUgdGltZSwKKyAgICBnYm9vbGVhbiBiZWZvcmUsIEdzdENsb2NrVGltZSAqIF90cykKK3sKKyAgZ2ludDY0IGJ5dGVzID0gMCwgdHMgPSAwOworICBHc3RJbmRleEVudHJ5ICplbnRyeSA9IE5VTEw7CisKKyAgaWYgKHRpbWUgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkgeworICAgIHRzID0gdGltZTsKKyAgICBieXRlcyA9IC0xOworICAgIGdvdG8gZXhpdDsKKyAgfQorCisgIGdfc3RhdGljX211dGV4X2xvY2sgKCZwYXJzZS0+cHJpdi0+aW5kZXhfbG9jayk7CisgIGlmIChwYXJzZS0+cHJpdi0+aW5kZXgpIHsKKyAgICAvKiBMZXQncyBjaGVjayBpZiB3ZSBoYXZlIGFuIGluZGV4IGVudHJ5IGZvciB0aGF0IHRpbWUgKi8KKyAgICBlbnRyeSA9IGdzdF9pbmRleF9nZXRfYXNzb2NfZW50cnkgKHBhcnNlLT5wcml2LT5pbmRleCwKKyAgICAgICAgcGFyc2UtPnByaXYtPmluZGV4X2lkLAorICAgICAgICBiZWZvcmUgPyBHU1RfSU5ERVhfTE9PS1VQX0JFRk9SRSA6IEdTVF9JTkRFWF9MT09LVVBfQUZURVIsCisgICAgICAgIEdTVF9BU1NPQ0lBVElPTl9GTEFHX0tFWV9VTklULCBHU1RfRk9STUFUX1RJTUUsIHRpbWUpOworICB9CisKKyAgaWYgKGVudHJ5KSB7CisgICAgZ3N0X2luZGV4X2VudHJ5X2Fzc29jX21hcCAoZW50cnksIEdTVF9GT1JNQVRfQllURVMsICZieXRlcyk7CisgICAgZ3N0X2luZGV4X2VudHJ5X2Fzc29jX21hcCAoZW50cnksIEdTVF9GT1JNQVRfVElNRSwgJnRzKTsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiZm91bmQgaW5kZXggZW50cnkgZm9yICUiIEdTVF9USU1FX0ZPUk1BVAorICAgICAgICAiIGF0ICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBvZmZzZXQgJSIgR19HSU5UNjRfRk9STUFULAorICAgICAgICBHU1RfVElNRV9BUkdTICh0aW1lKSwgR1NUX1RJTUVfQVJHUyAodHMpLCBieXRlcyk7CisgIH0gZWxzZSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJubyBpbmRleCBlbnRyeSBmb3VuZCBmb3IgJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgICBHU1RfVElNRV9BUkdTICh0aW1lKSk7CisgICAgaWYgKCFiZWZvcmUpIHsKKyAgICAgIGJ5dGVzID0gLTE7CisgICAgICB0cyA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgICAgfQorICB9CisgIGdfc3RhdGljX211dGV4X3VubG9jayAoJnBhcnNlLT5wcml2LT5pbmRleF9sb2NrKTsKKworZXhpdDoKKyAgaWYgKF90cykKKyAgICAqX3RzID0gdHM7CisKKyAgcmV0dXJuIGJ5dGVzOworfQorCisvKiByZXR1cm5zIFRSVUUgaWYgc2VlayBzdWNjZWVkZWQgKi8KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2Jhc2VfcGFyc2VfaGFuZGxlX3NlZWsgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBHc3RFdmVudCAqIGV2ZW50KQoreworICBnZG91YmxlIHJhdGU7CisgIEdzdEZvcm1hdCBmb3JtYXQ7CisgIEdzdFNlZWtGbGFncyBmbGFnczsKKyAgR3N0U2Vla1R5cGUgY3VyX3R5cGUgPSBHU1RfU0VFS19UWVBFX05PTkUsIHN0b3BfdHlwZTsKKyAgZ2Jvb2xlYW4gZmx1c2gsIHVwZGF0ZSwgcmVzID0gVFJVRSwgYWNjdXJhdGU7CisgIGdpbnQ2NCBjdXIsIHN0b3AsIHNlZWtwb3MsIHNlZWtzdG9wOworICBHc3RTZWdtZW50IHNlZWtzZWdtZW50ID0geyAwLCB9OworICBHc3RDbG9ja1RpbWUgc3RhcnRfdHM7CisKKyAgZ3N0X2V2ZW50X3BhcnNlX3NlZWsgKGV2ZW50LCAmcmF0ZSwgJmZvcm1hdCwgJmZsYWdzLAorICAgICAgJmN1cl90eXBlLCAmY3VyLCAmc3RvcF90eXBlLCAmc3RvcCk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJzZWVrIHRvIGZvcm1hdCAlcywgcmF0ZSAlZiwgIgorICAgICAgInN0YXJ0IHR5cGUgJWQgYXQgJSIgR1NUX1RJTUVfRk9STUFUICIsIGVuZCB0eXBlICVkIGF0ICUiCisgICAgICBHU1RfVElNRV9GT1JNQVQsIGdzdF9mb3JtYXRfZ2V0X25hbWUgKGZvcm1hdCksIHJhdGUsCisgICAgICBjdXJfdHlwZSwgR1NUX1RJTUVfQVJHUyAoY3VyKSwgc3RvcF90eXBlLCBHU1RfVElNRV9BUkdTIChzdG9wKSk7CisKKyAgLyogbm8gbmVnYXRpdmUgcmF0ZXMgaW4gcHVzaCBtb2RlICovCisgIGlmIChyYXRlIDwgMC4wICYmIHBhcnNlLT5wcml2LT5wYWRfbW9kZSA9PSBHU1RfQUNUSVZBVEVfUFVTSCkKKyAgICBnb3RvIG5lZ2F0aXZlX3JhdGU7CisKKyAgaWYgKGN1cl90eXBlICE9IEdTVF9TRUVLX1RZUEVfU0VUIHx8CisgICAgICAoc3RvcF90eXBlICE9IEdTVF9TRUVLX1RZUEVfU0VUICYmIHN0b3BfdHlwZSAhPSBHU1RfU0VFS19UWVBFX05PTkUpKQorICAgIGdvdG8gd3JvbmdfdHlwZTsKKworICAvKiBGb3IgYW55IGZvcm1hdCBvdGhlciB0aGFuIFRJTUUsIHNlZSBpZiB1cHN0cmVhbSBoYW5kbGVzCisgICAqIGl0IGRpcmVjdGx5IG9yIGZhaWwuIEZvciBUSU1FLCB0cnkgdXBzdHJlYW0sIGJ1dCBkbyBpdCBvdXJzZWx2ZXMgaWYKKyAgICogaXQgZmFpbHMgdXBzdHJlYW0gKi8KKyAgaWYgKGZvcm1hdCAhPSBHU1RfRk9STUFUX1RJTUUpIHsKKyAgICAvKiBkZWZhdWx0IGFjdGlvbiBkZWxlZ2F0ZXMgdG8gdXBzdHJlYW0gKi8KKyAgICByZXMgPSBGQUxTRTsKKyAgICBnb3RvIGRvbmU7CisgIH0gZWxzZSB7CisgICAgZ3N0X2V2ZW50X3JlZiAoZXZlbnQpOworICAgIGlmICgocmVzID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChwYXJzZS0+c2lua3BhZCwgZXZlbnQpKSkgeworICAgICAgZ290byBkb25lOworICAgIH0KKyAgfQorCisgIC8qIGdldCBmbHVzaCBmbGFnICovCisgIGZsdXNoID0gZmxhZ3MgJiBHU1RfU0VFS19GTEFHX0ZMVVNIOworCisgIC8qIGNvcHkgc2VnbWVudCwgd2UgbmVlZCB0aGlzIGJlY2F1c2Ugd2Ugc3RpbGwgbmVlZCB0aGUgb2xkCisgICAqIHNlZ21lbnQgd2hlbiB3ZSBjbG9zZSB0aGUgY3VycmVudCBzZWdtZW50LiAqLworICBnc3Rfc2VnbWVudF9jb3B5X2ludG8gKCZwYXJzZS0+c2VnbWVudCwgJnNlZWtzZWdtZW50KTsKKworICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImNvbmZpZ3VyaW5nIHNlZWsiKTsKKyAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlZWtzZWdtZW50LCByYXRlLCBmb3JtYXQsIGZsYWdzLAorICAgICAgY3VyX3R5cGUsIGN1ciwgc3RvcF90eXBlLCBzdG9wLCAmdXBkYXRlKTsKKworICAvKiBhY2N1cmF0ZSBzZWVraW5nIGltcGxpZXMgc2VlayB0YWJsZXMgYXJlIHVzZWQgdG8gb2J0YWluIHBvc2l0aW9uLAorICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzZWdtZW50IGlzIG1haW50YWluZWQgZXhhY3RseSwgbm90IGFkanVzdGVkIGFueSB3YXkgKi8KKyAgYWNjdXJhdGUgPSBmbGFncyAmIEdTVF9TRUVLX0ZMQUdfQUNDVVJBVEU7CisKKyAgLyogbWF5YmUgd2UgY2FuIGJlIGFjY3VyYXRlIGZvciAoYWxtb3N0KSBmcmVlICovCisgIGdzdF9iYXNlX3BhcnNlX2ZpbmRfb2Zmc2V0IChwYXJzZSwgc2Vla3NlZ21lbnQucG9zaXRpb24sIFRSVUUsICZzdGFydF90cyk7CisgIGlmIChzZWVrc2VnbWVudC5wb3NpdGlvbiA8PSBzdGFydF90cyArIFRBUkdFVF9ESUZGRVJFTkNFKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJhY2N1cmF0ZSBzZWVrIHBvc3NpYmxlIik7CisgICAgYWNjdXJhdGUgPSBUUlVFOworICB9CisgIGlmIChhY2N1cmF0ZSkgeworICAgIEdzdENsb2NrVGltZSBzdGFydHBvcyA9IHNlZWtzZWdtZW50LnBvc2l0aW9uOworCisgICAgLyogYWNjdXJhdGUgcmVxdWVzdGVkLCBzbyAuLi4gc2VlayBhIGJpdCBiZWZvcmUgdGFyZ2V0ICovCisgICAgaWYgKHN0YXJ0cG9zIDwgcGFyc2UtPnByaXYtPmxlYWRfaW5fdHMpCisgICAgICBzdGFydHBvcyA9IDA7CisgICAgZWxzZQorICAgICAgc3RhcnRwb3MgLT0gcGFyc2UtPnByaXYtPmxlYWRfaW5fdHM7CisgICAgc2Vla3BvcyA9IGdzdF9iYXNlX3BhcnNlX2ZpbmRfb2Zmc2V0IChwYXJzZSwgc3RhcnRwb3MsIFRSVUUsICZzdGFydF90cyk7CisgICAgc2Vla3N0b3AgPSBnc3RfYmFzZV9wYXJzZV9maW5kX29mZnNldCAocGFyc2UsIHNlZWtzZWdtZW50LnN0b3AsIEZBTFNFLAorICAgICAgICBOVUxMKTsKKyAgfSBlbHNlIHsKKyAgICBzdGFydF90cyA9IHNlZWtzZWdtZW50LnBvc2l0aW9uOworICAgIGlmICghZ3N0X3BhZF9xdWVyeV9jb252ZXJ0IChwYXJzZS0+c3JjcGFkLCBmb3JtYXQsIHNlZWtzZWdtZW50LnBvc2l0aW9uLAorICAgICAgICAgICAgR1NUX0ZPUk1BVF9CWVRFUywgJnNlZWtwb3MpKQorICAgICAgZ290byBjb252ZXJ0X2ZhaWxlZDsKKyAgICBpZiAoIWdzdF9wYWRfcXVlcnlfY29udmVydCAocGFyc2UtPnNyY3BhZCwgZm9ybWF0LCBzZWVrc2VnbWVudC5zdG9wLAorICAgICAgICAgICAgR1NUX0ZPUk1BVF9CWVRFUywgJnNlZWtzdG9wKSkKKyAgICAgIGdvdG8gY29udmVydF9mYWlsZWQ7CisgIH0KKworICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwKKyAgICAgICJzZWVrIHBvc2l0aW9uICUiIEdfR0lOVDY0X0ZPUk1BVCAiIGluIGJ5dGVzOiAlIiBHX0dJTlQ2NF9GT1JNQVQsCisgICAgICBzdGFydF90cywgc2Vla3Bvcyk7CisgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLAorICAgICAgInNlZWsgc3RvcCAlIiBHX0dJTlQ2NF9GT1JNQVQgIiBpbiBieXRlczogJSIgR19HSU5UNjRfRk9STUFULAorICAgICAgc2Vla3NlZ21lbnQuc3RvcCwgc2Vla3N0b3ApOworCisgIGlmIChwYXJzZS0+cHJpdi0+cGFkX21vZGUgPT0gR1NUX0FDVElWQVRFX1BVTEwpIHsKKyAgICBnaW50NjQgbGFzdF9zdG9wOworCisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJzZWVrIGluIFBVTEwgbW9kZSIpOworCisgICAgaWYgKGZsdXNoKSB7CisgICAgICBpZiAocGFyc2UtPnNyY3BhZCkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInNlbmRpbmcgZmx1c2ggc3RhcnQiKTsKKyAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYXJzZS0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0ICgpKTsKKyAgICAgICAgLyogdW5sb2NrIHVwc3RyZWFtIHB1bGxfcmFuZ2UgKi8KKyAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYXJzZS0+c2lua3BhZCwgZ3N0X2V2ZW50X25ld19mbHVzaF9zdGFydCAoKSk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGdzdF9wYWRfcGF1c2VfdGFzayAocGFyc2UtPnNpbmtwYWQpOworICAgIH0KKworICAgIC8qIHdlIHNob3VsZCBub3cgYmUgYWJsZSB0byBncmFiIHRoZSBzdHJlYW1pbmcgdGhyZWFkIGJlY2F1c2Ugd2Ugc3RvcHBlZCBpdAorICAgICAqIHdpdGggdGhlIGFib3ZlIGZsdXNoL3BhdXNlIGNvZGUgKi8KKyAgICBHU1RfUEFEX1NUUkVBTV9MT0NLIChwYXJzZS0+c2lua3BhZCk7CisKKyAgICAvKiBzYXZlIGN1cnJlbnQgcG9zaXRpb24gKi8KKyAgICBsYXN0X3N0b3AgPSBwYXJzZS0+c2VnbWVudC5wb3NpdGlvbjsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInN0b3BwZWQgc3RyZWFtaW5nIGF0ICUiIEdfR0lOVDY0X0ZPUk1BVCwKKyAgICAgICAgbGFzdF9zdG9wKTsKKworICAgIC8qIG5vdyBjb21taXQgdG8gbmV3IHBvc2l0aW9uICovCisKKyAgICAvKiBwcmVwYXJlIGZvciBzdHJlYW1pbmcgYWdhaW4gKi8KKyAgICBpZiAoZmx1c2gpIHsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAic2VuZGluZyBmbHVzaCBzdG9wIik7CisgICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhcnNlLT5zcmNwYWQsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoVFJVRSkpOworICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYXJzZS0+c2lua3BhZCwgZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wIChUUlVFKSk7CisgICAgICBnc3RfYmFzZV9wYXJzZV9jbGVhcl9xdWV1ZXMgKHBhcnNlKTsKKyAgICB9IGVsc2UgeworICAgICAgLyoga2VlcCB0cmFjayBvZiBvdXIgcG9zaXRpb24gKi8KKyAgICAgIHNlZWtzZWdtZW50LmJhc2UgPSBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZzZWVrc2VnbWVudCwKKyAgICAgICAgICBzZWVrc2VnbWVudC5mb3JtYXQsIHBhcnNlLT5zZWdtZW50LnBvc2l0aW9uKTsKKyAgICB9CisKKyAgICBtZW1jcHkgKCZwYXJzZS0+c2VnbWVudCwgJnNlZWtzZWdtZW50LCBzaXplb2YgKEdzdFNlZ21lbnQpKTsKKworICAgIC8qIHN0b3JlIHRoZSBuZXdzZWdtZW50IGV2ZW50IHNvIGl0IGNhbiBiZSBzZW50IGZyb20gdGhlIHN0cmVhbWluZyB0aHJlYWQuICovCisgICAgaWYgKHBhcnNlLT5wcml2LT5wZW5kaW5nX3NlZ21lbnQpCisgICAgICBnc3RfZXZlbnRfdW5yZWYgKHBhcnNlLT5wcml2LT5wZW5kaW5nX3NlZ21lbnQpOworCisgICAgLyogVGhpcyB3aWxsIGJlIHNlbnQgbGF0ZXIgaW4gX2xvb3AoKSAqLworICAgIHBhcnNlLT5wcml2LT5wZW5kaW5nX3NlZ21lbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZwYXJzZS0+c2VnbWVudCk7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIkNyZWF0ZWQgbmV3c2VnIGZvcm1hdCAlZCwgIgorICAgICAgICAic3RhcnQgPSAlIiBHU1RfVElNRV9GT1JNQVQgIiwgc3RvcCA9ICUiIEdTVF9USU1FX0ZPUk1BVAorICAgICAgICAiLCBwb3MgPSAlIiBHU1RfVElNRV9GT1JNQVQsIGZvcm1hdCwKKyAgICAgICAgR1NUX1RJTUVfQVJHUyAocGFyc2UtPnNlZ21lbnQuc3RhcnQpLAorICAgICAgICBHU1RfVElNRV9BUkdTIChwYXJzZS0+c2VnbWVudC5zdG9wKSwKKyAgICAgICAgR1NUX1RJTUVfQVJHUyAocGFyc2UtPnNlZ21lbnQuc3RhcnQpKTsKKworICAgIC8qIG9uZSBsYXN0IGNoYW5jZSBpbiBwdWxsIG1vZGUgdG8gc3RheSBhY2N1cmF0ZTsKKyAgICAgKiBtYXliZSBzY2FuIGFuZCBzdWJjbGFzcyBjYW4gZmluZCB3aGVyZSB0byBnbyAqLworICAgIGlmICghYWNjdXJhdGUpIHsKKyAgICAgIGdpbnQ2NCBzY2FucG9zOworICAgICAgR3N0Q2xvY2tUaW1lIHRzID0gc2Vla3NlZ21lbnQucG9zaXRpb247CisKKyAgICAgIGdzdF9iYXNlX3BhcnNlX2xvY2F0ZV90aW1lIChwYXJzZSwgJnRzLCAmc2NhbnBvcyk7CisgICAgICBpZiAoc2NhbnBvcyA+PSAwKSB7CisgICAgICAgIGFjY3VyYXRlID0gVFJVRTsKKyAgICAgICAgc2Vla3BvcyA9IHNjYW5wb3M7CisgICAgICAgIC8qIHJ1bm5pbmcgY29sbGVjdGVkIGluZGV4IG5vdyBjb25zaXN0cyBvZiBzZXZlcmFsIGludGVydmFscywKKyAgICAgICAgICogc28gb3B0aW1pemVkIGNoZWNrIG5vIGxvbmdlciBwb3NzaWJsZSAqLworICAgICAgICBwYXJzZS0+cHJpdi0+aW5kZXhfbGFzdF92YWxpZCA9IEZBTFNFOworICAgICAgICBwYXJzZS0+cHJpdi0+aW5kZXhfbGFzdF9vZmZzZXQgPSAwOworICAgICAgICBwYXJzZS0+cHJpdi0+aW5kZXhfbGFzdF90cyA9IDA7CisgICAgICB9CisgICAgfQorCisgICAgLyogbWFyayBkaXNjb250IGlmIHdlIGFyZSBnb2luZyB0byBzdHJlYW0gZnJvbSBhbm90aGVyIHBvc2l0aW9uLiAqLworICAgIGlmIChzZWVrcG9zICE9IHBhcnNlLT5wcml2LT5vZmZzZXQpIHsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLAorICAgICAgICAgICJtYXJrIERJU0NPTlQsIHdlIGRpZCBhIHNlZWsgdG8gYW5vdGhlciBwb3NpdGlvbiIpOworICAgICAgcGFyc2UtPnByaXYtPm9mZnNldCA9IHNlZWtwb3M7CisgICAgICBwYXJzZS0+cHJpdi0+bGFzdF9vZmZzZXQgPSBzZWVrcG9zOworICAgICAgcGFyc2UtPnByaXYtPnNlZW5fa2V5ZnJhbWUgPSBGQUxTRTsKKyAgICAgIHBhcnNlLT5wcml2LT5kaXNjb250ID0gVFJVRTsKKyAgICAgIHBhcnNlLT5wcml2LT5uZXh0X3RzID0gc3RhcnRfdHM7CisgICAgICBwYXJzZS0+cHJpdi0+bGFzdF90cyA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgICAgICBwYXJzZS0+cHJpdi0+c3luY19vZmZzZXQgPSBzZWVrcG9zOworICAgICAgcGFyc2UtPnByaXYtPmV4YWN0X3Bvc2l0aW9uID0gYWNjdXJhdGU7CisgICAgfQorCisgICAgLyogU3RhcnQgc3RyZWFtaW5nIHRocmVhZCBpZiBwYXVzZWQgKi8KKyAgICBnc3RfcGFkX3N0YXJ0X3Rhc2sgKHBhcnNlLT5zaW5rcGFkLAorICAgICAgICAoR3N0VGFza0Z1bmN0aW9uKSBnc3RfYmFzZV9wYXJzZV9sb29wLCBwYXJzZS0+c2lua3BhZCk7CisKKyAgICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKHBhcnNlLT5zaW5rcGFkKTsKKworICAgIC8qIGhhbmRsZWQgc2VlayAqLworICAgIHJlcyA9IFRSVUU7CisgIH0gZWxzZSB7CisgICAgR3N0RXZlbnQgKm5ld19ldmVudDsKKyAgICBHc3RCYXNlUGFyc2VTZWVrICpzZWVrOworICAgIEdzdFNlZWtGbGFncyBmbGFncyA9IChmbHVzaCA/IEdTVF9TRUVLX0ZMQUdfRkxVU0ggOiBHU1RfU0VFS19GTEFHX05PTkUpOworCisgICAgLyogVGhlIG9ubHkgdGhpbmcgd2UgbmVlZCB0byBkbyBpbiBQVVNILW1vZGUgaXMgdG8gc2VuZCB0aGUKKyAgICAgICBzZWVrIGV2ZW50IChpbiBieXRlcykgdG8gdXBzdHJlYW0uIFNlZ21lbnQgLyBmbHVzaCBoYW5kbGluZyBoYXBwZW5zCisgICAgICAgaW4gY29ycmVzcG9uZGluZyBzcmMgZXZlbnQgaGFuZGxlcnMgKi8KKyAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInNlZWsgaW4gUFVTSCBtb2RlIik7CisgICAgaWYgKHNlZWtzdG9wID49IDAgJiYgc2Vla3N0b3AgPD0gc2Vla3BvcykKKyAgICAgIHNlZWtzdG9wID0gc2Vla3BvczsKKyAgICBuZXdfZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZWsgKHJhdGUsIEdTVF9GT1JNQVRfQllURVMsIGZsYWdzLAorICAgICAgICBHU1RfU0VFS19UWVBFX1NFVCwgc2Vla3Bvcywgc3RvcF90eXBlLCBzZWVrc3RvcCk7CisKKyAgICAvKiBzdG9yZSBzZWdtZW50IGluZm8gc28gaXRzIHByZWNpc2UgZGV0YWlscyBjYW4gYmUgcmVjb25zdHJ1Y3RlZCB3aGVuCisgICAgICogcmVjZWl2aW5nIG5ld3NlZ21lbnQ7CisgICAgICogdGhpcyBtYXR0ZXJzIGZvciBhbGwgZGV0YWlscyB3aGVuIGFjY3VyYXRlIHNlZWtpbmcsCisgICAgICogaXMgbW9zdCB1c2VmdWwgdG8gcHJlc2VydmUgTk9ORSBzdG9wIHRpbWUgb3RoZXJ3aXNlICovCisgICAgc2VlayA9IGdfbmV3MCAoR3N0QmFzZVBhcnNlU2VlaywgMSk7CisgICAgc2Vlay0+c2VnbWVudCA9IHNlZWtzZWdtZW50OworICAgIHNlZWstPmFjY3VyYXRlID0gYWNjdXJhdGU7CisgICAgc2Vlay0+b2Zmc2V0ID0gc2Vla3BvczsKKyAgICBzZWVrLT5zdGFydF90cyA9IHN0YXJ0X3RzOworICAgIEdTVF9PQkpFQ1RfTE9DSyAocGFyc2UpOworICAgIC8qIGxlc3Mgb3B0aW1hbCwgYnV0IHByZXNlcnZlcyBvcmRlciAqLworICAgIHBhcnNlLT5wcml2LT5wZW5kaW5nX3NlZWtzID0KKyAgICAgICAgZ19zbGlzdF9hcHBlbmQgKHBhcnNlLT5wcml2LT5wZW5kaW5nX3NlZWtzLCBzZWVrKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFyc2UpOworCisgICAgcmVzID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChwYXJzZS0+c2lua3BhZCwgbmV3X2V2ZW50KTsKKworICAgIGlmICghcmVzKSB7CisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHBhcnNlKTsKKyAgICAgIHBhcnNlLT5wcml2LT5wZW5kaW5nX3NlZWtzID0KKyAgICAgICAgICBnX3NsaXN0X3JlbW92ZSAocGFyc2UtPnByaXYtPnBlbmRpbmdfc2Vla3MsIHNlZWspOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhcnNlKTsKKyAgICAgIGdfZnJlZSAoc2Vlayk7CisgICAgfQorICB9CisKK2RvbmU6CisgIC8qIGhhbmRsZWQgZXZlbnQgaXMgb3VycyB0byBmcmVlICovCisgIGlmIChyZXMpCisgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgIHJldHVybiByZXM7CisKKyAgLyogRVJST1JTICovCituZWdhdGl2ZV9yYXRlOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJuZWdhdGl2ZSBwbGF5YmFjayByYXRlcyBkZWxlZ2F0ZWQgdXBzdHJlYW0uIik7CisgICAgcmVzID0gRkFMU0U7CisgICAgZ290byBkb25lOworICB9Cit3cm9uZ190eXBlOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJ1bnN1cHBvcnRlZCBzZWVrIHR5cGUuIik7CisgICAgcmVzID0gRkFMU0U7CisgICAgZ290byBkb25lOworICB9Citjb252ZXJ0X2ZhaWxlZDoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiY29udmVyc2lvbiBUSU1FIHRvIEJZVEVTIGZhaWxlZC4iKTsKKyAgICByZXMgPSBGQUxTRTsKKyAgICBnb3RvIGRvbmU7CisgIH0KK30KKworLyogQ2hlY2tzIGlmIGJpdHJhdGVzIGFyZSBhdmFpbGFibGUgZnJvbSB1cHN0cmVhbSB0YWdzIHNvIHRoYXQgd2UgZG9uJ3QKKyAqIG92ZXJyaWRlIHRoZW0gbGF0ZXIKKyAqLworc3RhdGljIHZvaWQKK2dzdF9iYXNlX3BhcnNlX2hhbmRsZV90YWcgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBHc3RFdmVudCAqIGV2ZW50KQoreworICBHc3RUYWdMaXN0ICp0YWdsaXN0ID0gTlVMTDsKKyAgZ3VpbnQgdG1wOworCisgIGdzdF9ldmVudF9wYXJzZV90YWcgKGV2ZW50LCAmdGFnbGlzdCk7CisKKyAgaWYgKGdzdF90YWdfbGlzdF9nZXRfdWludCAodGFnbGlzdCwgR1NUX1RBR19NSU5JTVVNX0JJVFJBVEUsICZ0bXApKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJ1cHN0cmVhbSBtaW4gYml0cmF0ZSAlZCIsIHRtcCk7CisgICAgcGFyc2UtPnByaXYtPnBvc3RfbWluX2JpdHJhdGUgPSBGQUxTRTsKKyAgfQorICBpZiAoZ3N0X3RhZ19saXN0X2dldF91aW50ICh0YWdsaXN0LCBHU1RfVEFHX0JJVFJBVEUsICZ0bXApKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJ1cHN0cmVhbSBhdmcgYml0cmF0ZSAlZCIsIHRtcCk7CisgICAgcGFyc2UtPnByaXYtPnBvc3RfYXZnX2JpdHJhdGUgPSBGQUxTRTsKKyAgfQorICBpZiAoZ3N0X3RhZ19saXN0X2dldF91aW50ICh0YWdsaXN0LCBHU1RfVEFHX01BWElNVU1fQklUUkFURSwgJnRtcCkpIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInVwc3RyZWFtIG1heCBiaXRyYXRlICVkIiwgdG1wKTsKKyAgICBwYXJzZS0+cHJpdi0+cG9zdF9tYXhfYml0cmF0ZSA9IEZBTFNFOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfYmFzZV9wYXJzZV9zZXRfaW5kZXggKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RJbmRleCAqIGluZGV4KQoreworICBHc3RCYXNlUGFyc2UgKnBhcnNlID0gR1NUX0JBU0VfUEFSU0UgKGVsZW1lbnQpOworCisgIGdfc3RhdGljX211dGV4X2xvY2sgKCZwYXJzZS0+cHJpdi0+aW5kZXhfbG9jayk7CisgIGlmIChwYXJzZS0+cHJpdi0+aW5kZXgpCisgICAgZ3N0X29iamVjdF91bnJlZiAocGFyc2UtPnByaXYtPmluZGV4KTsKKyAgaWYgKGluZGV4KSB7CisgICAgcGFyc2UtPnByaXYtPmluZGV4ID0gZ3N0X29iamVjdF9yZWYgKGluZGV4KTsKKyAgICBnc3RfaW5kZXhfZ2V0X3dyaXRlcl9pZCAoaW5kZXgsIEdTVF9PQkpFQ1RfQ0FTVCAoZWxlbWVudCksCisgICAgICAgICZwYXJzZS0+cHJpdi0+aW5kZXhfaWQpOworICAgIHBhcnNlLT5wcml2LT5vd25faW5kZXggPSBGQUxTRTsKKyAgfSBlbHNlIHsKKyAgICBwYXJzZS0+cHJpdi0+aW5kZXggPSBOVUxMOworICB9CisgIGdfc3RhdGljX211dGV4X3VubG9jayAoJnBhcnNlLT5wcml2LT5pbmRleF9sb2NrKTsKK30KKworc3RhdGljIEdzdEluZGV4ICoKK2dzdF9iYXNlX3BhcnNlX2dldF9pbmRleCAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCit7CisgIEdzdEJhc2VQYXJzZSAqcGFyc2UgPSBHU1RfQkFTRV9QQVJTRSAoZWxlbWVudCk7CisgIEdzdEluZGV4ICpyZXN1bHQgPSBOVUxMOworCisgIGdfc3RhdGljX211dGV4X2xvY2sgKCZwYXJzZS0+cHJpdi0+aW5kZXhfbG9jayk7CisgIGlmIChwYXJzZS0+cHJpdi0+aW5kZXgpCisgICAgcmVzdWx0ID0gZ3N0X29iamVjdF9yZWYgKHBhcnNlLT5wcml2LT5pbmRleCk7CisgIGdfc3RhdGljX211dGV4X3VubG9jayAoJnBhcnNlLT5wcml2LT5pbmRleF9sb2NrKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KK2dzdF9iYXNlX3BhcnNlX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCit7CisgIEdzdEJhc2VQYXJzZSAqcGFyc2U7CisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJlc3VsdDsKKworICBwYXJzZSA9IEdTVF9CQVNFX1BBUlNFIChlbGVtZW50KTsKKworICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgorICAgICAgLyogSWYgdGhpcyBpcyBvdXIgb3duIGluZGV4IGRlc3Ryb3kgaXQgYXMgdGhlCisgICAgICAgKiBvbGQgZW50cmllcyBtaWdodCBiZSB3cm9uZyBmb3IgdGhlIG5ldyBzdHJlYW0gKi8KKyAgICAgIGdfc3RhdGljX211dGV4X2xvY2sgKCZwYXJzZS0+cHJpdi0+aW5kZXhfbG9jayk7CisgICAgICBpZiAocGFyc2UtPnByaXYtPm93bl9pbmRleCkgeworICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwYXJzZS0+cHJpdi0+aW5kZXgpOworICAgICAgICBwYXJzZS0+cHJpdi0+aW5kZXggPSBOVUxMOworICAgICAgICBwYXJzZS0+cHJpdi0+b3duX2luZGV4ID0gRkFMU0U7CisgICAgICB9CisKKyAgICAgIC8qIElmIG5vIGluZGV4IHdhcyBjcmVhdGVkLCBnZW5lcmF0ZSBvbmUgKi8KKyAgICAgIGlmIChHX1VOTElLRUxZICghcGFyc2UtPnByaXYtPmluZGV4KSkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIm5vIGluZGV4IHByb3ZpZGVkIGNyZWF0aW5nIG91ciBvd24iKTsKKworICAgICAgICBwYXJzZS0+cHJpdi0+aW5kZXggPSBnc3RfaW5kZXhfZmFjdG9yeV9tYWtlICgibWVtaW5kZXgiKTsKKyAgICAgICAgZ3N0X2luZGV4X2dldF93cml0ZXJfaWQgKHBhcnNlLT5wcml2LT5pbmRleCwgR1NUX09CSkVDVCAocGFyc2UpLAorICAgICAgICAgICAgJnBhcnNlLT5wcml2LT5pbmRleF9pZCk7CisgICAgICAgIHBhcnNlLT5wcml2LT5vd25faW5kZXggPSBUUlVFOworICAgICAgfQorICAgICAgZ19zdGF0aWNfbXV0ZXhfdW5sb2NrICgmcGFyc2UtPnByaXYtPmluZGV4X2xvY2spOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgcmVzdWx0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7CisKKyAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKKyAgICAgIGdzdF9iYXNlX3BhcnNlX3Jlc2V0IChwYXJzZSk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuaCBiL2xpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU1YWQwZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmgKQEAgLTAsMCArMSwzMTggQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIENvbnRhY3Q6IFN0ZWZhbiBLb3N0IDxzdGVmYW4ua29zdEBub2tpYS5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0dTVF9CQVNFX1BBUlNFX0hfXworI2RlZmluZSBfX0dTVF9CQVNFX1BBUlNFX0hfXworCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgR1NUX1RZUEVfQkFTRV9QQVJTRSAgICAgICAgICAgIChnc3RfYmFzZV9wYXJzZV9nZXRfdHlwZSgpKQorI2RlZmluZSBHU1RfQkFTRV9QQVJTRShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0JBU0VfUEFSU0UsR3N0QmFzZVBhcnNlKSkKKyNkZWZpbmUgR1NUX0JBU0VfUEFSU0VfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0JBU0VfUEFSU0UsR3N0QmFzZVBhcnNlQ2xhc3MpKQorI2RlZmluZSBHU1RfQkFTRV9QQVJTRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksR1NUX1RZUEVfQkFTRV9QQVJTRSxHc3RCYXNlUGFyc2VDbGFzcykpCisjZGVmaW5lIEdTVF9JU19CQVNFX1BBUlNFKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfQkFTRV9QQVJTRSkpCisjZGVmaW5lIEdTVF9JU19CQVNFX1BBUlNFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9CQVNFX1BBUlNFKSkKKyNkZWZpbmUgR1NUX0JBU0VfUEFSU0VfQ0FTVChvYmopICAgICAgICgoR3N0QmFzZVBhcnNlICopKG9iaikpCisKKy8qKgorICogR1NUX0JBU0VfUEFSU0VfU1JDX1BBRDoKKyAqIEBvYmo6IGJhc2UgcGFyc2UgaW5zdGFuY2UKKyAqCisgKiBHaXZlcyB0aGUgcG9pbnRlciB0byB0aGUgc291cmNlICNHc3RQYWQgb2JqZWN0IG9mIHRoZSBlbGVtZW50LgorICoKKyAqIFNpbmNlOiAwLjEwLjMzCisgKi8KKyNkZWZpbmUgR1NUX0JBU0VfUEFSU0VfU1JDX1BBRChvYmopICAgIChHU1RfQkFTRV9QQVJTRV9DQVNUIChvYmopLT5zcmNwYWQpCisKKy8qKgorICogR1NUX0JBU0VfUEFSU0VfU0lOS19QQUQ6CisgKiBAb2JqOiBiYXNlIHBhcnNlIGluc3RhbmNlCisgKgorICogR2l2ZXMgdGhlIHBvaW50ZXIgdG8gdGhlIHNpbmsgI0dzdFBhZCBvYmplY3Qgb2YgdGhlIGVsZW1lbnQuCisgKgorICogU2luY2U6IDAuMTAuMzMKKyAqLworI2RlZmluZSBHU1RfQkFTRV9QQVJTRV9TSU5LX1BBRChvYmopICAgIChHU1RfQkFTRV9QQVJTRV9DQVNUIChvYmopLT5zaW5rcGFkKQorCisvKioKKyAqIEdTVF9CQVNFX1BBUlNFX0ZMT1dfRFJPUFBFRDoKKyAqCisgKiBBICNHc3RGbG93UmV0dXJuIHRoYXQgY2FuIGJlIHJldHVybmVkIGZyb20gcGFyc2VfZnJhbWUgdG8KKyAqIGluZGljYXRlIHRoYXQgbm8gb3V0cHV0IGJ1ZmZlciB3YXMgZ2VuZXJhdGVkLCBvciBmcm9tIHByZV9wdXNoX2J1ZmZlciB0bworICogdG8gZm9yZWdvIHB1c2hpbmcgYnVmZmVyLgorICoKKyAqIFNpbmNlOiAwLjEwLjMzCisgKi8KKyNkZWZpbmUgR1NUX0JBU0VfUEFSU0VfRkxPV19EUk9QUEVEICAgICBHU1RfRkxPV19DVVNUT01fU1VDQ0VTUworCisvKioKKyAqIEdTVF9CQVNFX1BBUlNFX0ZMT1dfUVVFVUVEOgorICoKKyAqIEEgI0dzdEZsb3dSZXR1cm4gdGhhdCBjYW4gYmUgcmV0dXJuZWQgZnJvbSBwYXJzZSBmcmFtZSB0byBpbmRpY2F0ZSB0aGF0CisgKiB0aGUgYnVmZmVyIHdpbGwgYmUgcXVldWVkIHRvIGJlIHB1c2hlZCB3aGVuIHRoZSBuZXh0IE9LCisgKgorICogU2luY2U6IDAuMTAuMzMKKyAqLworI2RlZmluZSBHU1RfQkFTRV9QQVJTRV9GTE9XX1FVRVVFRCAgICAgIEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTXzEKKworLyogbm90IHB1YmxpYyBBUEksIHVzZSBhY2Nlc3NvciBtYWNyb3MgYmVsb3cgKi8KKyNkZWZpbmUgR1NUX0JBU0VfUEFSU0VfRkxBR19MT1NUX1NZTkMgKDEgPDwgMCkKKyNkZWZpbmUgR1NUX0JBU0VfUEFSU0VfRkxBR19EUkFJTklORyAgKDEgPDwgMSkKKworLyoqCisgKiBHU1RfQkFTRV9QQVJTRV9MT1NUX1NZTkM6CisgKiBAcGFyc2U6IGJhc2UgcGFyc2UgaW5zdGFuY2UKKyAqCisgKiBPYnRhaW5zIGN1cnJlbnQgc3luYyBzdGF0dXMuCisgKgorICogU2luY2U6IDAuMTAuMzMKKyAqLworI2RlZmluZSBHU1RfQkFTRV9QQVJTRV9MT1NUX1NZTkMocGFyc2UpICghIShHU1RfQkFTRV9QQVJTRV9DQVNUKHBhcnNlKS0+ZmxhZ3MgJiBHU1RfQkFTRV9QQVJTRV9GTEFHX0xPU1RfU1lOQykpCisKKy8qKgorICogR1NUX0JBU0VfUEFSU0VfRFJBSU5JTkc6CisgKiBAcGFyc2U6IGJhc2UgcGFyc2UgaW5zdGFuY2UKKyAqCisgKiBPYnRhaW5zIGN1cnJlbnQgZHJhaW4gc3RhdHVzIChpZS4gd2hldGhlciBFT1MgaGFzIGJlZW4gcmVjZWl2ZWQgYW5kCisgKiB0aGUgcGFyc2VyIGlzIG5vdyBwcm9jZXNzaW5nIHRoZSBmcmFtZXMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtKQorICoKKyAqIFNpbmNlOiAwLjEwLjMzCisgKi8KKyNkZWZpbmUgR1NUX0JBU0VfUEFSU0VfRFJBSU5JTkcocGFyc2UpICAoISEoR1NUX0JBU0VfUEFSU0VfQ0FTVChwYXJzZSktPmZsYWdzICYgR1NUX0JBU0VfUEFSU0VfRkxBR19EUkFJTklORykpCisKKy8qKgorICogR3N0QmFzZVBhcnNlRnJhbWVGbGFnczoKKyAqIEBHU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX05PTkU6IG5vIGZsYWcKKyAqIEBHU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX05PX0ZSQU1FOiBzZXQgdG8gaW5kaWNhdGUgdGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZQorICogICBjb3VudGVkIGFzIGZyYW1lLCBlLmcuIGlmIHRoaXMgZnJhbWUgaXMgZGVwZW5kZW50IG9uIGEgcHJldmlvdXMgb25lLgorICogICBBcyBpdCBpcyBub3QgY291bnRlZCBhcyBhIGZyYW1lLCBiaXRyYXRlIGluY3JlYXNlcyBidXQgZnJhbWUgdG8gdGltZQorICogICBjb252ZXJzaW9ucyBhcmUgbWFpbnRhaW5lZC4KKyAqIEBHU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX0NMSVA6IEBwcmVfcHVzaF9idWZmZXIgY2FuIHNldCB0aGlzIHRvIGluZGljYXRlCisgKiAgICB0aGF0IHJlZ3VsYXIgc2VnbWVudCBjbGlwcGluZyBjYW4gc3RpbGwgYmUgcGVyZm9ybWVkIChhcyBvcHBvc2VkIHRvCisgKiAgICBhbnkgY3VzdG9tIG9uZSBoYXZpbmcgYmVlbiBkb25lKS4KKyAqCisgKiBGbGFncyB0byBiZSB1c2VkIGluIGEgI0dzdEJhc2VQYXJzZUZyYW1lLgorICoKKyAqIFNpbmNlOiAwLjEwLjMzCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIEdTVF9CQVNFX1BBUlNFX0ZSQU1FX0ZMQUdfTk9ORSAgICAgICAgID0gMCwKKyAgR1NUX0JBU0VfUEFSU0VfRlJBTUVfRkxBR19OT19GUkFNRSAgICAgPSAoMSA8PCAwKSwKKyAgR1NUX0JBU0VfUEFSU0VfRlJBTUVfRkxBR19DTElQICAgICAgICAgPSAoMSA8PCAxKQorfSBHc3RCYXNlUGFyc2VGcmFtZUZsYWdzOworCisvKioKKyAqIEdzdEJhc2VQYXJzZUZyYW1lOgorICogQGJ1ZmZlcjogZGF0YSB0byBjaGVjayBmb3IgdmFsaWQgZnJhbWUgb3IgcGFyc2VkIGZyYW1lLgorICogICBTdWJjbGFzcyBpcyBhbGxvd2VkIHRvIHJlcGxhY2UgdGhpcyBidWZmZXIuCisgKiBAb3ZlcmhlYWQ6IHN1YmNsYXNzIGNhbiBzZXQgdGhpcyB0byBpbmRpY2F0ZXMgdGhlIG1ldGFkYXRhIG92ZXJoZWFkCisgKiAgIGZvciB0aGUgZ2l2ZW4gZnJhbWUsIHdoaWNoIGlzIHRoZW4gdXNlZCB0byBlbmFibGUgbW9yZSBhY2N1cmF0ZSBiaXRyYXRlCisgKiAgIGNvbXB1dGF0aW9ucy4gSWYgdGhpcyBpcyAtMSwgaXQgaXMgYXNzdW1lZCB0aGF0IHRoaXMgZnJhbWUgc2hvdWxkIGJlCisgKiAgIHNraXBwZWQgaW4gYml0cmF0ZSBjYWxjdWxhdGlvbi4KKyAqIEBmbGFnczogYSBjb21iaW5hdGlvbiBvZiBpbnB1dCBhbmQgb3V0cHV0ICNHc3RCYXNlUGFyc2VGcmFtZUZsYWdzIHRoYXQKKyAqICBjb252ZXkgYWRkaXRpb25hbCBjb250ZXh0IHRvIHN1YmNsYXNzIG9yIGFsbG93IHN1YmNsYXNzIHRvIHR1bmUKKyAqICBzdWJzZXF1ZW50ICNHc3RCYXNlUGFyc2UgYWN0aW9ucy4KKyAqCisgKiBGcmFtZSAoY29udGV4dCkgZGF0YSBwYXNzZWQgdG8gZWFjaCBmcmFtZSBwYXJzaW5nIHZpcnR1YWwgbWV0aG9kcy4gIEluCisgKiBhZGRpdGlvbiB0byBwcm92aWRpbmcgdGhlIGRhdGEgdG8gYmUgY2hlY2tlZCBmb3IgYSB2YWxpZCBmcmFtZSBvciBhbiBhbHJlYWR5CisgKiBpZGVudGlmaWVkIGZyYW1lLCBpdCBjb252ZXlzIGFkZGl0aW9uYWwgbWV0YWRhdGEgb3IgY29udHJvbCBpbmZvcm1hdGlvbgorICogZnJvbSBhbmQgdG8gdGhlIHN1YmNsYXNzIHcuci50LiB0aGUgcGFydGljdWxhciBmcmFtZSBpbiBxdWVzdGlvbiAocmF0aGVyCisgKiB0aGFuIGdsb2JhbCBwYXJhbWV0ZXJzKS4gIFNvbWUgb2YgdGhlc2UgbWF5IGFwcGx5IHRvIGVhY2ggcGFyc2luZyBzdGFnZSwgb3RoZXJzCisgKiBvbmx5IHRvIHNvbWUgYSBwYXJ0aWN1bGFyIG9uZS4gIFRoZXNlIHBhcmFtZXRlcnMgYXJlIGVmZmVjdGl2ZWx5IHplcm9lZCBhdCBzdGFydAorICogb2YgZWFjaCBmcmFtZSdzIHByb2Nlc3NpbmcsIGkuZS4gcGFyc2luZyB2aXJ0dWFsIG1ldGhvZCBpbnZvY2F0aW9uIHNlcXVlbmNlLgorICoKKyAqIFNpbmNlOiAwLjEwLjMzCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgR3N0QnVmZmVyICogYnVmZmVyOworICBndWludCAgICAgICBmbGFnczsKKyAgZ2ludCAgICAgICAgb3ZlcmhlYWQ7CisgIC8qPCBwcml2YXRlID4qLworICBndWludCAgICAgICBfZ3N0X3Jlc2VydmVkX2lbMl07CisgIGdwb2ludGVyICAgIF9nc3RfcmVzZXJ2ZWRfcFsyXTsKKyAgZ3VpbnQgICAgICAgX3ByaXZhdGVfZmxhZ3M7Cit9IEdzdEJhc2VQYXJzZUZyYW1lOworCit0eXBlZGVmIHN0cnVjdCBfR3N0QmFzZVBhcnNlIEdzdEJhc2VQYXJzZTsKK3R5cGVkZWYgc3RydWN0IF9Hc3RCYXNlUGFyc2VDbGFzcyBHc3RCYXNlUGFyc2VDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9Hc3RCYXNlUGFyc2VQcml2YXRlIEdzdEJhc2VQYXJzZVByaXZhdGU7CisKKy8qKgorICogR3N0QmFzZVBhcnNlOgorICogQGVsZW1lbnQ6IHRoZSBwYXJlbnQgZWxlbWVudC4KKyAqCisgKiBUaGUgb3BhcXVlICNHc3RCYXNlUGFyc2UgZGF0YSBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBfR3N0QmFzZVBhcnNlIHsKKyAgR3N0RWxlbWVudCAgICAgZWxlbWVudDsKKworICAvKjwgcHJvdGVjdGVkID4qLworICAvKiBzb3VyY2UgYW5kIHNpbmsgcGFkcyAqLworICBHc3RQYWQgICAgICAgICAqc2lua3BhZDsKKyAgR3N0UGFkICAgICAgICAgKnNyY3BhZDsKKworICBndWludCAgICAgICAgICAgZmxhZ3M7CisKKyAgLyogTVQtcHJvdGVjdGVkICh3aXRoIFNUUkVBTV9MT0NLKSAqLworICBHc3RTZWdtZW50ICAgICAgc2VnbWVudDsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgZ3BvaW50ZXIgICAgICAgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR19MQVJHRV07CisgIEdzdEJhc2VQYXJzZVByaXZhdGUgKnByaXY7Cit9OworCisvKioKKyAqIEdzdEJhc2VQYXJzZUNsYXNzOgorICogQHBhcmVudF9jbGFzczogdGhlIHBhcmVudCBjbGFzcworICogQHN0YXJ0OiAgICAgICAgICBPcHRpb25hbC4KKyAqICAgICAgICAgICAgICAgICAgQ2FsbGVkIHdoZW4gdGhlIGVsZW1lbnQgc3RhcnRzIHByb2Nlc3NpbmcuCisgKiAgICAgICAgICAgICAgICAgIEFsbG93cyBvcGVuaW5nIGV4dGVybmFsIHJlc291cmNlcy4KKyAqIEBzdG9wOiAgICAgICAgICAgT3B0aW9uYWwuCisgKiAgICAgICAgICAgICAgICAgIENhbGxlZCB3aGVuIHRoZSBlbGVtZW50IHN0b3BzIHByb2Nlc3NpbmcuCisgKiAgICAgICAgICAgICAgICAgIEFsbG93cyBjbG9zaW5nIGV4dGVybmFsIHJlc291cmNlcy4KKyAqIEBzZXRfc2lua19jYXBzOiAgYWxsb3dzIHRoZSBzdWJjbGFzcyB0byBiZSBub3RpZmllZCBvZiB0aGUgYWN0dWFsIGNhcHMgc2V0LgorICogQGNoZWNrX3ZhbGlkX2ZyYW1lOiAgQ2hlY2sgaWYgdGhlIGdpdmVuIHBpZWNlIG9mIGRhdGEgY29udGFpbnMgYSB2YWxpZAorICogICAgICAgICAgICAgICAgICAgICAgZnJhbWUuCisgKiBAcGFyc2VfZnJhbWU6ICAgIFBhcnNlIHRoZSBhbHJlYWR5IGNoZWNrZWQgZnJhbWUuIFN1YmNsYXNzIG5lZWQgdG8KKyAqICAgICAgICAgICAgICAgICAgc2V0IHRoZSBidWZmZXIgdGltZXN0YW1wLCBkdXJhdGlvbiwgY2FwcyBhbmQgcG9zc2libHkKKyAqICAgICAgICAgICAgICAgICAgb3RoZXIgbmVjZXNzYXJ5IG1ldGFkYXRhLiBUaGlzIGlzIGNhbGxlZCB3aXRoIHNyY3BhZCdzCisgKiAgICAgICAgICAgICAgICAgIFNUUkVBTV9MT0NLIGhlbGQuCisgKiBAY29udmVydDogICAgICAgIE9wdGlvbmFsLgorICogICAgICAgICAgICAgICAgICBDb252ZXJ0IGJldHdlZW4gZm9ybWF0cy4KKyAqIEBldmVudDogICAgICAgICAgT3B0aW9uYWwuCisgKiAgICAgICAgICAgICAgICAgIEV2ZW50IGhhbmRsZXIgb24gdGhlIHNpbmsgcGFkLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4KKyAqICAgICAgICAgICAgICAgICAgVFJVRSBpZiB0aGUgZXZlbnQgd2FzIGhhbmRsZWQgYW5kIGNhbiBiZSBkcm9wcGVkLgorICogQHNyY19ldmVudDogICAgICBPcHRpb25hbC4KKyAqICAgICAgICAgICAgICAgICAgRXZlbnQgaGFuZGxlciBvbiB0aGUgc291cmNlIHBhZC4gU2hvdWxkIHJldHVybiBUUlVFCisgKiAgICAgICAgICAgICAgICAgIGlmIHRoZSBldmVudCB3YXMgaGFuZGxlZCBhbmQgY2FuIGJlIGRyb3BwZWQuCisgKiBAcHJlX3B1c2hfZnJhbWU6IE9wdGlvbmFsLgorICogICAgICAgICAgICAgICAgICAgQ2FsbGVkIGp1c3QgcHJpb3IgdG8gcHVzaGluZyBhIGZyYW1lIChhZnRlciBhbnkgcGVuZGluZworICogICAgICAgICAgICAgICAgICAgZXZlbnRzIGhhdmUgYmVlbiBzZW50KSB0byBnaXZlIHN1YmNsYXNzIGEgY2hhbmNlIHRvIHBlcmZvcm0KKyAqICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwgYWN0aW9ucyBhdCB0aGlzIHRpbWUgKGUuZy4gdGFnIHNlbmRpbmcpIG9yIHRvCisgKiAgICAgICAgICAgICAgICAgICBkZWNpZGUgd2hldGhlciB0aGlzIGJ1ZmZlciBzaG91bGQgYmUgZHJvcHBlZCBvciBub3QKKyAqICAgICAgICAgICAgICAgICAgIChlLmcuIGN1c3RvbSBzZWdtZW50IGNsaXBwaW5nKS4KKyAqCisgKiBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSBhbnkgb2YgdGhlIGF2YWlsYWJsZSB2aXJ0dWFsIG1ldGhvZHMgb3Igbm90LCBhcworICogbmVlZGVkLiBBdCBtaW5pbXVtIEBjaGVja192YWxpZF9mcmFtZSBhbmQgQHBhcnNlX2ZyYW1lIG5lZWRzIHRvIGJlCisgKiBvdmVycmlkZGVuLgorICovCitzdHJ1Y3QgX0dzdEJhc2VQYXJzZUNsYXNzIHsKKyAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKKworICAvKjwgcHVibGljID4qLworICAvKiB2aXJ0dWFsIG1ldGhvZHMgZm9yIHN1YmNsYXNzZXMgKi8KKworICBnYm9vbGVhbiAgICAgICgqc3RhcnQpICAgICAgICAgICAgICAoR3N0QmFzZVBhcnNlICogcGFyc2UpOworCisgIGdib29sZWFuICAgICAgKCpzdG9wKSAgICAgICAgICAgICAgIChHc3RCYXNlUGFyc2UgKiBwYXJzZSk7CisKKyAgZ2Jvb2xlYW4gICAgICAoKnNldF9zaW5rX2NhcHMpICAgICAgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2FwcyAgICAgICogY2Fwcyk7CisKKyAgZ2Jvb2xlYW4gICAgICAoKmNoZWNrX3ZhbGlkX2ZyYW1lKSAgKEdzdEJhc2VQYXJzZSAgICAgICogcGFyc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgKiBmcmFtZXNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAgICAqIHNraXBzaXplKTsKKworICBHc3RGbG93UmV0dXJuICgqcGFyc2VfZnJhbWUpICAgICAgICAoR3N0QmFzZVBhcnNlICAgICAgKiBwYXJzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEJhc2VQYXJzZUZyYW1lICogZnJhbWUpOworCisgIEdzdEZsb3dSZXR1cm4gKCpwcmVfcHVzaF9mcmFtZSkgICAgIChHc3RCYXNlUGFyc2UgICAgICAqIHBhcnNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QmFzZVBhcnNlRnJhbWUgKiBmcmFtZSk7CisKKyAgZ2Jvb2xlYW4gICAgICAoKmNvbnZlcnQpICAgICAgICAgICAgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Rm9ybWF0ICAgICAgc3JjX2Zvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQ2NCAgICAgICAgIHNyY192YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEZvcm1hdCAgICAgIGRlc3RfZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0ICAgICAgICogZGVzdF92YWx1ZSk7CisKKyAgZ2Jvb2xlYW4gICAgICAoKmV2ZW50KSAgICAgICAgICAgICAgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0RXZlbnQgICAgICogZXZlbnQpOworCisgIGdib29sZWFuICAgICAgKCpzcmNfZXZlbnQpICAgICAgICAgIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEV2ZW50ICAgICAqIGV2ZW50KTsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgZ3BvaW50ZXIgICAgICAgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR19MQVJHRV07Cit9OworCitHVHlwZSAgICAgICAgICAgZ3N0X2Jhc2VfcGFyc2VfZ2V0X3R5cGUgKHZvaWQpOworCitHVHlwZSAgICAgICAgICAgZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfZ2V0X3R5cGUgKHZvaWQpOworCitHc3RCYXNlUGFyc2VGcmFtZSAqIGdzdF9iYXNlX3BhcnNlX2ZyYW1lX25ldyAgKEdzdEJ1ZmZlciAgICAgICAgICAgICAgKiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEJhc2VQYXJzZUZyYW1lRmxhZ3MgICBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgICAgICAgICAgIG92ZXJoZWFkKTsKKwordm9pZCAgICAgICAgICAgIGdzdF9iYXNlX3BhcnNlX2ZyYW1lX2luaXQgICAgICAoR3N0QmFzZVBhcnNlRnJhbWUgKiBmcmFtZSk7CisKK3ZvaWQgICAgICAgICAgICBnc3RfYmFzZV9wYXJzZV9mcmFtZV9mcmVlICAgICAgKEdzdEJhc2VQYXJzZUZyYW1lICogZnJhbWUpOworCitHc3RGbG93UmV0dXJuICAgZ3N0X2Jhc2VfcGFyc2VfcHVzaF9mcmFtZSAgICAgIChHc3RCYXNlUGFyc2UgICAgICAqIHBhcnNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QmFzZVBhcnNlRnJhbWUgKiBmcmFtZSk7CisKK3ZvaWQgICAgICAgICAgICBnc3RfYmFzZV9wYXJzZV9zZXRfZHVyYXRpb24gICAgKEdzdEJhc2VQYXJzZSAgICAgICogcGFyc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RGb3JtYXQgICAgICAgICAgIGZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQ2NCAgICAgICAgICAgICAgZHVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAgICAgIGludGVydmFsKTsKKwordm9pZCAgICAgICAgICAgIGdzdF9iYXNlX3BhcnNlX3NldF9hdmVyYWdlX2JpdHJhdGUgKEdzdEJhc2VQYXJzZSAgICogcGFyc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICBiaXRyYXRlKTsKKwordm9pZCAgICAgICAgICAgIGdzdF9iYXNlX3BhcnNlX3NldF9taW5fZnJhbWVfc2l6ZSAoR3N0QmFzZVBhcnNlICAgICogcGFyc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICBtaW5fc2l6ZSk7CisKK3ZvaWQgICAgICAgICAgICBnc3RfYmFzZV9wYXJzZV9zZXRfaGFzX3RpbWluZ19pbmZvIChHc3RCYXNlUGFyc2UgICAqIHBhcnNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICAgaGFzX3RpbWluZyk7CisKK3ZvaWQgICAgICAgICAgICBnc3RfYmFzZV9wYXJzZV9zZXRfc3luY2FibGUgICAgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgc3luY2FibGUpOworCit2b2lkICAgICAgICAgICAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X3Bhc3N0aHJvdWdoIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgIHBhc3N0aHJvdWdoKTsKKwordm9pZCAgICAgICAgICAgIGdzdF9iYXNlX3BhcnNlX3NldF9mcmFtZV9yYXRlICAoR3N0QmFzZVBhcnNlICogcGFyc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICBmcHNfbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgZnBzX2RlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgIGxlYWRfaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICBsZWFkX291dCk7CisKK3ZvaWQgICAgICAgICAgICBnc3RfYmFzZV9wYXJzZV9zZXRfbGF0ZW5jeSAgICAgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIG1pbl9sYXRlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIG1heF9sYXRlbmN5KTsKKworZ2Jvb2xlYW4gICAgICAgIGdzdF9iYXNlX3BhcnNlX2NvbnZlcnRfZGVmYXVsdCAoR3N0QmFzZVBhcnNlICogcGFyc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RGb3JtYXQgICAgICBzcmNfZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0ICAgICAgICAgc3JjX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Rm9ybWF0ICAgICAgZGVzdF9mb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50NjQgICAgICAgKiBkZXN0X3ZhbHVlKTsKKworZ2Jvb2xlYW4gICAgICAgIGdzdF9iYXNlX3BhcnNlX2FkZF9pbmRleF9lbnRyeSAoR3N0QmFzZVBhcnNlICogcGFyc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDY0ICAgICAgICBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgICB0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgIGZvcmNlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fR1NUX0JBU0VfUEFSU0VfSF9fICovCmRpZmYgLS1naXQgYS9saWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmMgYi9saWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNhYTIwYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYwpAQCAtMCwwICsxLDUxMjggQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKyAqCisgKiBnc3RiYXNlc2luay5jOiBCYXNlIGNsYXNzIGZvciBzaW5rIGVsZW1lbnRzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoqCisgKiBTRUNUSU9OOmdzdGJhc2VzaW5rCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEJhc2UgY2xhc3MgZm9yIHNpbmsgZWxlbWVudHMKKyAqIEBzZWVfYWxzbzogI0dzdEJhc2VUcmFuc2Zvcm0sICNHc3RCYXNlU3JjCisgKgorICogI0dzdEJhc2VTaW5rIGlzIHRoZSBiYXNlIGNsYXNzIGZvciBzaW5rIGVsZW1lbnRzIGluIEdTdHJlYW1lciwgc3VjaCBhcworICogeHZpbWFnZXNpbmsgb3IgZmlsZXNpbmsuIEl0IGlzIGEgbGF5ZXIgb24gdG9wIG9mICNHc3RFbGVtZW50IHRoYXQgcHJvdmlkZXMgYQorICogc2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gcGx1Z2luIHdyaXRlcnMuICNHc3RCYXNlU2luayBoYW5kbGVzIG1hbnkgZGV0YWlscworICogZm9yIHlvdSwgZm9yIGV4YW1wbGU6IHByZXJvbGwsIGNsb2NrIHN5bmNocm9uaXphdGlvbiwgc3RhdGUgY2hhbmdlcywKKyAqIGFjdGl2YXRpb24gaW4gcHVzaCBvciBwdWxsIG1vZGUsIGFuZCBxdWVyaWVzLgorICoKKyAqIEluIG1vc3QgY2FzZXMsIHdoZW4gd3JpdGluZyBzaW5rIGVsZW1lbnRzLCB0aGVyZSBpcyBubyBuZWVkIHRvIGltcGxlbWVudAorICogY2xhc3MgbWV0aG9kcyBmcm9tICNHc3RFbGVtZW50IG9yIHRvIHNldCBmdW5jdGlvbnMgb24gcGFkcywgYmVjYXVzZSB0aGUKKyAqICNHc3RCYXNlU2luayBpbmZyYXN0cnVjdHVyZSBzaG91bGQgYmUgc3VmZmljaWVudC4KKyAqCisgKiAjR3N0QmFzZVNpbmsgcHJvdmlkZXMgc3VwcG9ydCBmb3IgZXhhY3RseSBvbmUgc2luayBwYWQsIHdoaWNoIHNob3VsZCBiZQorICogbmFtZWQgInNpbmsiLiBBIHNpbmsgaW1wbGVtZW50YXRpb24gKHN1YmNsYXNzIG9mICNHc3RCYXNlU2luaykgc2hvdWxkCisgKiBpbnN0YWxsIGEgcGFkIHRlbXBsYXRlIGluIGl0cyBjbGFzc19pbml0IGZ1bmN0aW9uLCBsaWtlIHNvOgorICogfFsKKyAqIHN0YXRpYyB2b2lkCisgKiBteV9lbGVtZW50X2NsYXNzX2luaXQgKEdzdE15RWxlbWVudENsYXNzICprbGFzcykKKyAqIHsKKyAqICAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKKyAqCisgKiAgIC8vIHNpbmt0ZW1wbGF0ZSBzaG91bGQgYmUgYSAjR3N0U3RhdGljUGFkVGVtcGxhdGUgd2l0aCBkaXJlY3Rpb24KKyAqICAgLy8gI0dTVF9QQURfU0lOSyBhbmQgbmFtZSAic2luayIKKyAqICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKKyAqICAgICAgIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoJmFtcDtzaW5rdGVtcGxhdGUpKTsKKyAqICAgLy8gc2VlICNHc3RFbGVtZW50RGV0YWlscworICogICBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlscyAoZ3N0ZWxlbWVudF9jbGFzcywgJmFtcDtkZXRhaWxzKTsKKyAqIH0KKyAqIF18CisgKgorICogI0dzdEJhc2VTaW5rIHdpbGwgaGFuZGxlIHRoZSBwcmVyb2xsaW5nIGNvcnJlY3RseS4gVGhpcyBtZWFucyB0aGF0IGl0IHdpbGwKKyAqIHJldHVybiAjR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyBmcm9tIGEgc3RhdGUgY2hhbmdlIHRvIFBBVVNFRCB1bnRpbCB0aGUgZmlyc3QKKyAqIGJ1ZmZlciBhcnJpdmVzIGluIHRoaXMgZWxlbWVudC4gVGhlIGJhc2UgY2xhc3Mgd2lsbCBjYWxsIHRoZQorICogI0dzdEJhc2VTaW5rQ2xhc3MucHJlcm9sbCgpIHZtZXRob2Qgd2l0aCB0aGlzIHByZXJvbGwgYnVmZmVyIGFuZCB3aWxsIHRoZW4KKyAqIGNvbW1pdCB0aGUgc3RhdGUgY2hhbmdlIHRvIHRoZSBuZXh0IGFzeW5jaHJvbm91c2x5IHBlbmRpbmcgc3RhdGUuCisgKgorICogV2hlbiB0aGUgZWxlbWVudCBpcyBzZXQgdG8gUExBWUlORywgI0dzdEJhc2VTaW5rIHdpbGwgc3luY2hyb25pc2Ugb24gdGhlCisgKiBjbG9jayB1c2luZyB0aGUgdGltZXMgcmV0dXJuZWQgZnJvbSAjR3N0QmFzZVNpbmtDbGFzcy5nZXRfdGltZXMoKS4gSWYgdGhpcworICogZnVuY3Rpb24gcmV0dXJucyAjR1NUX0NMT0NLX1RJTUVfTk9ORSBmb3IgdGhlIHN0YXJ0IHRpbWUsIG5vIHN5bmNocm9uaXNhdGlvbgorICogd2lsbCBiZSBkb25lLiBTeW5jaHJvbmlzYXRpb24gY2FuIGJlIGRpc2FibGVkIGVudGlyZWx5IGJ5IHNldHRpbmcgdGhlIG9iamVjdAorICogI0dzdEJhc2VTaW5rOnN5bmMgcHJvcGVydHkgdG8gJUZBTFNFLgorICoKKyAqIEFmdGVyIHN5bmNocm9uaXNhdGlvbiB0aGUgdmlydHVhbCBtZXRob2QgI0dzdEJhc2VTaW5rQ2xhc3MucmVuZGVyKCkgd2lsbCBiZQorICogY2FsbGVkLiBTdWJjbGFzc2VzIHNob3VsZCBtaW5pbWFsbHkgaW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICoKKyAqIFNpbmNlIDAuMTAuMyBzdWJjbGFzc2VzIHRoYXQgc3luY2hyb25pc2Ugb24gdGhlIGNsb2NrIGluIHRoZQorICogI0dzdEJhc2VTaW5rQ2xhc3MucmVuZGVyKCkgbWV0aG9kIGFyZSBzdXBwb3J0ZWQgYXMgd2VsbC4gVGhlc2UgY2xhc3NlcworICogdHlwaWNhbGx5IHJlY2VpdmUgYSBidWZmZXIgaW4gdGhlIHJlbmRlciBtZXRob2QgYW5kIGNhbiB0aGVuIHBvdGVudGlhbGx5CisgKiBibG9jayBvbiB0aGUgY2xvY2sgd2hpbGUgcmVuZGVyaW5nLiBBIHR5cGljYWwgZXhhbXBsZSBpcyBhbiBhdWRpb3NpbmsuCisgKiBTaW5jZSAwLjEwLjExIHRoZXNlIHN1YmNsYXNzZXMgY2FuIHVzZSBnc3RfYmFzZV9zaW5rX3dhaXRfcHJlcm9sbCgpIHRvCisgKiBwZXJmb3JtIHRoZSBibG9ja2luZyB3YWl0LgorICoKKyAqIFVwb24gcmVjZWl2aW5nIHRoZSBFT1MgZXZlbnQgaW4gdGhlIFBMQVlJTkcgc3RhdGUsICNHc3RCYXNlU2luayB3aWxsIHdhaXQKKyAqIGZvciB0aGUgY2xvY2sgdG8gcmVhY2ggdGhlIHRpbWUgaW5kaWNhdGVkIGJ5IHRoZSBzdG9wIHRpbWUgb2YgdGhlIGxhc3QKKyAqICNHc3RCYXNlU2lua0NsYXNzLmdldF90aW1lcygpIGNhbGwgYmVmb3JlIHBvc3RpbmcgYW4gRU9TIG1lc3NhZ2UuIFdoZW4gdGhlCisgKiBlbGVtZW50IHJlY2VpdmVzIEVPUyBpbiBQQVVTRUQsIHByZXJvbGwgY29tcGxldGVzLCB0aGUgZXZlbnQgaXMgcXVldWVkIGFuZCBhbgorICogRU9TIG1lc3NhZ2UgaXMgcG9zdGVkIHdoZW4gZ29pbmcgdG8gUExBWUlORy4KKyAqCisgKiAjR3N0QmFzZVNpbmsgd2lsbCBpbnRlcm5hbGx5IHVzZSB0aGUgI0dTVF9FVkVOVF9ORVdTRUdNRU5UIGV2ZW50cyB0byBzY2hlZHVsZQorICogc3luY2hyb25pc2F0aW9uIGFuZCBjbGlwcGluZyBvZiBidWZmZXJzLiBCdWZmZXJzIHRoYXQgZmFsbCBjb21wbGV0ZWx5IG91dHNpZGUKKyAqIG9mIHRoZSBjdXJyZW50IHNlZ21lbnQgYXJlIGRyb3BwZWQuIEJ1ZmZlcnMgdGhhdCBmYWxsIHBhcnRpYWxseSBpbiB0aGUKKyAqIHNlZ21lbnQgYXJlIHJlbmRlcmVkIChhbmQgcHJlcm9sbGVkKS4gU3ViY2xhc3NlcyBzaG91bGQgZG8gYW55IHN1YmJ1ZmZlcgorICogY2xpcHBpbmcgdGhlbXNlbHZlcyB3aGVuIG5lZWRlZC4KKyAqCisgKiAjR3N0QmFzZVNpbmsgd2lsbCBieSBkZWZhdWx0IHJlcG9ydCB0aGUgY3VycmVudCBwbGF5YmFjayBwb3NpdGlvbiBpbgorICogI0dTVF9GT1JNQVRfVElNRSBiYXNlZCBvbiB0aGUgY3VycmVudCBjbG9jayB0aW1lIGFuZCBzZWdtZW50IGluZm9ybWF0aW9uLgorICogSWYgbm8gY2xvY2sgaGFzIGJlZW4gc2V0IG9uIHRoZSBlbGVtZW50LCB0aGUgcXVlcnkgd2lsbCBiZSBmb3J3YXJkZWQKKyAqIHVwc3RyZWFtLgorICoKKyAqIFRoZSAjR3N0QmFzZVNpbmtDbGFzcy5zZXRfY2FwcygpIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHN1YmNsYXNzCisgKiBzaG91bGQgY29uZmlndXJlIGl0c2VsZiB0byBwcm9jZXNzIGEgc3BlY2lmaWMgbWVkaWEgdHlwZS4KKyAqCisgKiBUaGUgI0dzdEJhc2VTaW5rQ2xhc3Muc3RhcnQoKSBhbmQgI0dzdEJhc2VTaW5rQ2xhc3Muc3RvcCgpIHZpcnR1YWwgbWV0aG9kcworICogd2lsbCBiZSBjYWxsZWQgd2hlbiByZXNvdXJjZXMgc2hvdWxkIGJlIGFsbG9jYXRlZC4gQW55IAorICogI0dzdEJhc2VTaW5rQ2xhc3MucHJlcm9sbCgpLCAjR3N0QmFzZVNpbmtDbGFzcy5yZW5kZXIoKSBhbmQKKyAqICNHc3RCYXNlU2lua0NsYXNzLnNldF9jYXBzKCkgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYmV0d2VlbiB0aGUKKyAqICNHc3RCYXNlU2lua0NsYXNzLnN0YXJ0KCkgYW5kICNHc3RCYXNlU2lua0NsYXNzLnN0b3AoKSBjYWxscy4KKyAqCisgKiBUaGUgI0dzdEJhc2VTaW5rQ2xhc3MuZXZlbnQoKSB2aXJ0dWFsIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCB3aGVuIGFuIGV2ZW50IGlzCisgKiByZWNlaXZlZCBieSAjR3N0QmFzZVNpbmsuIE5vcm1hbGx5IHRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIG92ZXJyaWRlbiBieQorICogdmVyeSBzcGVjaWZpYyBlbGVtZW50cyAoc3VjaCBhcyBmaWxlIHNpbmtzKSB3aGljaCBuZWVkIHRvIGhhbmRsZSB0aGUKKyAqIG5ld3NlZ21lbnQgZXZlbnQgc3BlY2lhbGx5LgorICoKKyAqIFRoZSAjR3N0QmFzZVNpbmtDbGFzcy51bmxvY2soKSBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIGVsZW1lbnRzIHNob3VsZAorICogdW5ibG9jayBhbnkgYmxvY2tpbmcgb3BlcmF0aW9ucyB0aGV5IHBlcmZvcm0gaW4gdGhlCisgKiAjR3N0QmFzZVNpbmtDbGFzcy5yZW5kZXIoKSBtZXRob2QuIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCB3aGVuIHRoZQorICogI0dzdEJhc2VTaW5rQ2xhc3MucmVuZGVyKCkgbWV0aG9kIHBlcmZvcm1zIGEgYmxvY2tpbmcgd3JpdGUgb24gYSBmaWxlCisgKiBkZXNjcmlwdG9yLCBmb3IgZXhhbXBsZS4KKyAqCisgKiBUaGUgI0dzdEJhc2VTaW5rOm1heC1sYXRlbmVzcyBwcm9wZXJ0eSBhZmZlY3RzIGhvdyB0aGUgc2luayBkZWFscyB3aXRoCisgKiBidWZmZXJzIHRoYXQgYXJyaXZlIHRvbyBsYXRlIGluIHRoZSBzaW5rLiBBIGJ1ZmZlciBhcnJpdmVzIHRvbyBsYXRlIGluIHRoZQorICogc2luayB3aGVuIHRoZSBwcmVzZW50YXRpb24gdGltZSAoYXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgbGFzdCBzZWdtZW50LCBidWZmZXIKKyAqIHRpbWVzdGFtcCBhbmQgZWxlbWVudCBiYXNlX3RpbWUpIHBsdXMgdGhlIGR1cmF0aW9uIGlzIGJlZm9yZSB0aGUgY3VycmVudAorICogdGltZSBvZiB0aGUgY2xvY2suCisgKiBJZiB0aGUgZnJhbWUgaXMgbGF0ZXIgdGhhbiBtYXgtbGF0ZW5lc3MsIHRoZSBzaW5rIHdpbGwgZHJvcCB0aGUgYnVmZmVyCisgKiB3aXRob3V0IGNhbGxpbmcgdGhlIHJlbmRlciBtZXRob2QuCisgKiBUaGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgaWYgc3luYyBpcyBkaXNhYmxlZCwgdGhlCisgKiAjR3N0QmFzZVNpbmtDbGFzcy5nZXRfdGltZXMoKSBtZXRob2QgZG9lcyBub3QgcmV0dXJuIGEgdmFsaWQgc3RhcnQgdGltZSBvcgorICogbWF4LWxhdGVuZXNzIGlzIHNldCB0byAtMSAodGhlIGRlZmF1bHQpLgorICogU3ViY2xhc3NlcyBjYW4gdXNlIGdzdF9iYXNlX3Npbmtfc2V0X21heF9sYXRlbmVzcygpIHRvIGNvbmZpZ3VyZSB0aGUKKyAqIG1heC1sYXRlbmVzcyB2YWx1ZS4KKyAqCisgKiBUaGUgI0dzdEJhc2VTaW5rOnFvcyBwcm9wZXJ0eSB3aWxsIGVuYWJsZSB0aGUgcXVhbGl0eS1vZi1zZXJ2aWNlIGZlYXR1cmVzIG9mCisgKiB0aGUgYmFzZXNpbmsgd2hpY2ggZ2F0aGVyIHN0YXRpc3RpY3MgYWJvdXQgdGhlIHJlYWwtdGltZSBwZXJmb3JtYW5jZSBvZiB0aGUKKyAqIGNsb2NrIHN5bmNocm9uaXNhdGlvbi4gRm9yIGVhY2ggYnVmZmVyIHJlY2VpdmVkIGluIHRoZSBzaW5rLCBzdGF0aXN0aWNzIGFyZQorICogZ2F0aGVyZWQgYW5kIGEgUU9TIGV2ZW50IGlzIHNlbnQgdXBzdHJlYW0gd2l0aCB0aGVzZSBudW1iZXJzLiBUaGlzCisgKiBpbmZvcm1hdGlvbiBjYW4gdGhlbiBiZSB1c2VkIGJ5IHVwc3RyZWFtIGVsZW1lbnRzIHRvIHJlZHVjZSB0aGVpciBwcm9jZXNzaW5nCisgKiByYXRlLCBmb3IgZXhhbXBsZS4KKyAqCisgKiBTaW5jZSAwLjEwLjE1IHRoZSAjR3N0QmFzZVNpbms6YXN5bmMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gaW5zdHJ1Y3QgdGhlCisgKiBzaW5rIHRvIG5ldmVyIHBlcmZvcm0gYW4gQVNZTkMgc3RhdGUgY2hhbmdlLiBUaGlzIGZlYXR1cmUgaXMgbW9zdGx5IHVzYWJsZQorICogd2hlbiBkZWFsaW5nIHdpdGggbm9uLXN5bmNocm9uaXplZCBzdHJlYW1zIG9yIHNwYXJzZSBzdHJlYW1zLgorICoKKyAqIExhc3QgcmV2aWV3ZWQgb24gMjAwNy0wOC0yOSAoMC4xMC4xNSkKKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPGdzdC9nc3RfcHJpdmF0ZS5oPgorCisjaW5jbHVkZSAiZ3N0YmFzZXNpbmsuaCIKKyNpbmNsdWRlIDxnc3QvZ3N0bWFyc2hhbC5oPgorI2luY2x1ZGUgPGdzdC9nc3QtaTE4bi1saWIuaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X2Jhc2Vfc2lua19kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfYmFzZV9zaW5rX2RlYnVnCisKKyNkZWZpbmUgR1NUX0JBU0VfU0lOS19HRVRfUFJJVkFURShvYmopICBcCisgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgob2JqKSwgR1NUX1RZUEVfQkFTRV9TSU5LLCBHc3RCYXNlU2lua1ByaXZhdGUpKQorCisjZGVmaW5lIEdTVF9GTE9XX1NURVAgR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGdib29sZWFuIHZhbGlkOyAgICAgICAgICAgICAgIC8qIGlmIHRoaXMgaW5mbyBpcyB2YWxpZCAqLworICBndWludDMyIHNlcW51bTsgICAgICAgICAgICAgICAvKiB0aGUgc2VxbnVtIG9mIHRoZSBTVEVQIGV2ZW50ICovCisgIEdzdEZvcm1hdCBmb3JtYXQ7ICAgICAgICAgICAgIC8qIHRoZSBmb3JtYXQgb2YgdGhlIGFtb3VudCAqLworICBndWludDY0IGFtb3VudDsgICAgICAgICAgICAgICAvKiB0aGUgdG90YWwgYW1vdW50IG9mIGRhdGEgdG8gc2tpcCAqLworICBndWludDY0IHBvc2l0aW9uOyAgICAgICAgICAgICAvKiB0aGUgcG9zaXRpb24gaW4gdGhlIHN0ZXBwZWQgZGF0YSAqLworICBndWludDY0IGR1cmF0aW9uOyAgICAgICAgICAgICAvKiB0aGUgZHVyYXRpb24gaW4gdGltZSBvZiB0aGUgc2tpcHBlZCBkYXRhICovCisgIGd1aW50NjQgc3RhcnQ7ICAgICAgICAgICAgICAgIC8qIHJ1bm5pbmdfdGltZSBvZiB0aGUgc3RhcnQgKi8KKyAgZ2RvdWJsZSByYXRlOyAgICAgICAgICAgICAgICAgLyogcmF0ZSBvZiBza2lwcGluZyAqLworICBnZG91YmxlIHN0YXJ0X3JhdGU7ICAgICAgICAgICAvKiByYXRlIGJlZm9yZSBza2lwcGluZyAqLworICBndWludDY0IHN0YXJ0X3N0YXJ0OyAgICAgICAgICAvKiBzdGFydCBwb3NpdGlvbiBza2lwcGluZyAqLworICBndWludDY0IHN0YXJ0X3N0b3A7ICAgICAgICAgICAvKiBzdG9wIHBvc2l0aW9uIHNraXBwaW5nICovCisgIGdib29sZWFuIGZsdXNoOyAgICAgICAgICAgICAgIC8qIGlmIHRoaXMgd2FzIGEgZmx1c2hpbmcgc3RlcCAqLworICBnYm9vbGVhbiBpbnRlcm1lZGlhdGU7ICAgICAgICAvKiBpZiB0aGlzIGlzIGFuIGludGVybWVkaWF0ZSBzdGVwICovCisgIGdib29sZWFuIG5lZWRfcHJlcm9sbDsgICAgICAgIC8qIGlmIHdlIG5lZWQgcHJlcm9sbCBhZnRlciB0aGlzIHN0ZXAgKi8KK30gR3N0U3RlcEluZm87CisKKy8qIEZJWE1FLCBzb21lIHN0dWZmIGluIEFCSS5kYXRhIGFuZCBvdGhlciBpbiBQcml2YXRlLi4uCisgKiBNYWtlIHVwIHlvdXIgbWluZCBwbGVhc2UuCisgKi8KK3N0cnVjdCBfR3N0QmFzZVNpbmtQcml2YXRlCit7CisgIEdRdWV1ZSAqcHJlcm9sbF9xdWV1ZTsKKyAgZ2ludCBwcmVyb2xsX3F1ZXVlZDsKKworICBnaW50IHFvc19lbmFibGVkOyAgICAgICAgICAgICAvKiBBVE9NSUMgKi8KKyAgZ2Jvb2xlYW4gYXN5bmNfZW5hYmxlZDsKKyAgR3N0Q2xvY2tUaW1lRGlmZiB0c19vZmZzZXQ7CisgIEdzdENsb2NrVGltZSByZW5kZXJfZGVsYXk7CisKKyAgLyogc3RhcnQsIHN0b3Agb2YgY3VycmVudCBidWZmZXIsIHN0cmVhbSB0aW1lLCB1c2VkIHRvIHJlcG9ydCBwb3NpdGlvbiAqLworICBHc3RDbG9ja1RpbWUgY3VycmVudF9zc3RhcnQ7CisgIEdzdENsb2NrVGltZSBjdXJyZW50X3NzdG9wOworCisgIC8qIHN0YXJ0LCBzdG9wIGFuZCBqaXR0ZXIgb2YgY3VycmVudCBidWZmZXIsIHJ1bm5pbmcgdGltZSAqLworICBHc3RDbG9ja1RpbWUgY3VycmVudF9yc3RhcnQ7CisgIEdzdENsb2NrVGltZSBjdXJyZW50X3JzdG9wOworICBHc3RDbG9ja1RpbWVEaWZmIGN1cnJlbnRfaml0dGVyOworICAvKiB0aGUgcnVubmluZyB0aW1lIG9mIHRoZSBwcmV2aW91cyBidWZmZXIgKi8KKyAgR3N0Q2xvY2tUaW1lIHByZXZfcnN0YXJ0OworCisgIC8qIEVPUyBzeW5jIHRpbWUgaW4gcnVubmluZyB0aW1lICovCisgIEdzdENsb2NrVGltZSBlb3NfcnRpbWU7CisKKyAgLyogbGFzdCBidWZmZXIgdGhhdCBhcnJpdmVkIGluIHRpbWUsIHJ1bm5pbmcgdGltZSAqLworICBHc3RDbG9ja1RpbWUgbGFzdF9yZW5kZXJfdGltZTsKKyAgLyogd2hlbiB0aGUgbGFzdCBidWZmZXIgbGVmdCB0aGUgc2luaywgcnVubmluZyB0aW1lICovCisgIEdzdENsb2NrVGltZSBsYXN0X2xlZnQ7CisKKyAgLyogcnVubmluZyBhdmVyYWdlcyBnbyBoZXJlIHRoZXNlIGFyZSBkb25lIG9uIHJ1bm5pbmcgdGltZSAqLworICBHc3RDbG9ja1RpbWUgYXZnX3B0OworICBHc3RDbG9ja1RpbWUgYXZnX2R1cmF0aW9uOworICBnZG91YmxlIGF2Z19yYXRlOworICBHc3RDbG9ja1RpbWUgYXZnX2luX2RpZmY7CisKKyAgLyogdGhlc2UgYXJlIGRvbmUgb24gc3lzdGVtIHRpbWUuIGF2Z19qaXR0ZXIgYW5kIGF2Z19yZW5kZXIgYXJlCisgICAqIGNvbXBhcmVkIHRvIGVhY2hvdGhlciB0byBzZWUgaWYgdGhlIHJlbmRlcmluZyB0aW1lIHRha2VzIGEKKyAgICogaHVnZSBhbW91bnQgb2YgdGhlIHByb2Nlc3NpbmcsIElmIHNvIHdlIGFyZSBmbG9vZGVkIHdpdGgKKyAgICogYnVmZmVycy4gKi8KKyAgR3N0Q2xvY2tUaW1lIGxhc3RfbGVmdF9zeXN0aW1lOworICBHc3RDbG9ja1RpbWUgYXZnX2ppdHRlcjsKKyAgR3N0Q2xvY2tUaW1lIHN0YXJ0LCBzdG9wOworICBHc3RDbG9ja1RpbWUgYXZnX3JlbmRlcjsKKworICAvKiBudW1iZXIgb2YgcmVuZGVyZWQgYW5kIGRyb3BwZWQgZnJhbWVzICovCisgIGd1aW50NjQgcmVuZGVyZWQ7CisgIGd1aW50NjQgZHJvcHBlZDsKKworICAvKiBsYXRlbmN5IHN0dWZmICovCisgIEdzdENsb2NrVGltZSBsYXRlbmN5OworCisgIC8qIGlmIHdlIGFscmVhZHkgY29tbWl0ZWQgdGhlIHN0YXRlICovCisgIGdib29sZWFuIGNvbW1pdGVkOworICAvKiBzdGF0ZSBjaGFuZ2UgdG8gcGxheWluZyBvbmdvaW5nICovCisgIGdib29sZWFuIHRvX3BsYXlpbmc7CisKKyAgLyogd2hlbiB3ZSByZWNlaXZlZCBFT1MgKi8KKyAgZ2Jvb2xlYW4gcmVjZWl2ZWRfZW9zOworCisgIC8qIHdoZW4gd2UgYXJlIHByZXJvbGxlZCBhbmQgYWJsZSB0byByZXBvcnQgbGF0ZW5jeSAqLworICBnYm9vbGVhbiBoYXZlX2xhdGVuY3k7CisKKyAgLyogdGhlIGxhc3QgYnVmZmVyIHdlIHByZXJvbGxlZCBvciByZW5kZXJlZC4gVXNlZnVsIGZvciBtYWtpbmcgc25hcHNob3RzICovCisgIGdpbnQgZW5hYmxlX2xhc3RfYnVmZmVyOyAgICAgIC8qIGF0b21pYyAqLworICBHc3RCdWZmZXIgKmxhc3RfYnVmZmVyOworCisgIC8qIGNhcHMgZm9yIHB1bGwgYmFzZWQgc2NoZWR1bGluZyAqLworICBHc3RDYXBzICpwdWxsX2NhcHM7CisKKyAgLyogYmxvY2tzaXplIGZvciBwdWxsaW5nICovCisgIGd1aW50IGJsb2Nrc2l6ZTsKKworICBnYm9vbGVhbiBkaXNjb250OworCisgIC8qIHNlcW51bSBvZiB0aGUgc3RyZWFtICovCisgIGd1aW50MzIgc2VxbnVtOworCisgIGdib29sZWFuIGNhbGxfcHJlcm9sbDsKKyAgZ2Jvb2xlYW4gc3RlcF91bmxvY2s7CisKKyAgLyogd2UgaGF2ZSBhIHBlbmRpbmcgYW5kIGEgY3VycmVudCBzdGVwIG9wZXJhdGlvbiAqLworICBHc3RTdGVwSW5mbyBjdXJyZW50X3N0ZXA7CisgIEdzdFN0ZXBJbmZvIHBlbmRpbmdfc3RlcDsKKworICAvKiBDYWNoZWQgR3N0Q2xvY2tJRCAqLworICBHc3RDbG9ja0lEIGNhY2hlZF9jbG9ja19pZDsKKworICAvKiBmb3IgdGhyb3R0bGluZyBhbmQgUW9TICovCisgIEdzdENsb2NrVGltZSBlYXJsaWVzdF9pbl90aW1lOworICBHc3RDbG9ja1RpbWUgdGhyb3R0bGVfdGltZTsKKworICBnYm9vbGVhbiByZXNldF90aW1lOworfTsKKworI2RlZmluZSBET19SVU5OSU5HX0FWRyhhdmcsdmFsLHNpemUpICgoKHZhbCkgKyAoKHNpemUpLTEpICogKGF2ZykpIC8gKHNpemUpKQorCisvKiBnZW5lcmljIHJ1bm5pbmcgYXZlcmFnZSwgdGhpcyBoYXMgYSBuZXV0cmFsIHdpbmRvdyBzaXplICovCisjZGVmaW5lIFVQREFURV9SVU5OSU5HX0FWRyhhdmcsdmFsKSAgIERPX1JVTk5JTkdfQVZHKGF2Zyx2YWwsOCkKKworLyogdGhlIHdpbmRvd3MgZm9yIHRoZXNlIHJ1bm5pbmcgYXZlcmFnZXMgYXJlIGV4cGVyaW1lbnRhbGx5IG9idGFpbmVkLgorICogcG9zc2l0aXZlIHZhbHVlcyBnZXQgYXZlcmFnZWQgbW9yZSB3aGlsZSBuZWdhdGl2ZSB2YWx1ZXMgdXNlIGEgc21hbGwKKyAqIHdpbmRvdyBzbyB3ZSBjYW4gcmVhY3QgZmFzdGVyIHRvIGJhZG5lc3MuICovCisjZGVmaW5lIFVQREFURV9SVU5OSU5HX0FWR19QKGF2Zyx2YWwpIERPX1JVTk5JTkdfQVZHKGF2Zyx2YWwsMTYpCisjZGVmaW5lIFVQREFURV9SVU5OSU5HX0FWR19OKGF2Zyx2YWwpIERPX1JVTk5JTkdfQVZHKGF2Zyx2YWwsNCkKKworZW51bQoreworICBfUFJfSVNfTk9USElORyA9IDEgPDwgMCwKKyAgX1BSX0lTX0JVRkZFUiA9IDEgPDwgMSwKKyAgX1BSX0lTX0JVRkZFUkxJU1QgPSAxIDw8IDIsCisgIF9QUl9JU19FVkVOVCA9IDEgPDwgMworfSBQcml2YXRlT2JqZWN0VHlwZTsKKworI2RlZmluZSBPQkpfSVNfQlVGRkVSKGEpICgoYSkgJiBfUFJfSVNfQlVGRkVSKQorI2RlZmluZSBPQkpfSVNfQlVGRkVSTElTVChhKSAoKGEpICYgX1BSX0lTX0JVRkZFUkxJU1QpCisjZGVmaW5lIE9CSl9JU19FVkVOVChhKSAoKGEpICYgX1BSX0lTX0VWRU5UKQorI2RlZmluZSBPQkpfSVNfQlVGRkVSRlVMTChhKSAoKGEpICYgKF9QUl9JU19CVUZGRVIgfCBfUFJfSVNfQlVGRkVSTElTVCkpCisKKy8qIEJhc2VTaW5rIHByb3BlcnRpZXMgKi8KKworI2RlZmluZSBERUZBVUxUX0NBTl9BQ1RJVkFURV9QVUxMIEZBTFNFIC8qIGZpeG1lOiBlbmFibGUgbWUgKi8KKyNkZWZpbmUgREVGQVVMVF9DQU5fQUNUSVZBVEVfUFVTSCBUUlVFCisKKyNkZWZpbmUgREVGQVVMVF9QUkVST0xMX1FVRVVFX0xFTiAgIDAKKyNkZWZpbmUgREVGQVVMVF9TWU5DICAgICAgICAgICAgICAgIFRSVUUKKyNkZWZpbmUgREVGQVVMVF9NQVhfTEFURU5FU1MgICAgICAgIC0xCisjZGVmaW5lIERFRkFVTFRfUU9TICAgICAgICAgICAgICAgICBGQUxTRQorI2RlZmluZSBERUZBVUxUX0FTWU5DICAgICAgICAgICAgICAgVFJVRQorI2RlZmluZSBERUZBVUxUX1RTX09GRlNFVCAgICAgICAgICAgMAorI2RlZmluZSBERUZBVUxUX0JMT0NLU0laRSAgICAgICAgICAgNDA5NgorI2RlZmluZSBERUZBVUxUX1JFTkRFUl9ERUxBWSAgICAgICAgMAorI2RlZmluZSBERUZBVUxUX0VOQUJMRV9MQVNUX0JVRkZFUiAgVFJVRQorI2RlZmluZSBERUZBVUxUX1RIUk9UVExFX1RJTUUgICAgICAgMAorCitlbnVtCit7CisgIFBST1BfMCwKKyAgUFJPUF9QUkVST0xMX1FVRVVFX0xFTiwKKyAgUFJPUF9TWU5DLAorICBQUk9QX01BWF9MQVRFTkVTUywKKyAgUFJPUF9RT1MsCisgIFBST1BfQVNZTkMsCisgIFBST1BfVFNfT0ZGU0VULAorICBQUk9QX0VOQUJMRV9MQVNUX0JVRkZFUiwKKyAgUFJPUF9MQVNUX0JVRkZFUiwKKyAgUFJPUF9CTE9DS1NJWkUsCisgIFBST1BfUkVOREVSX0RFTEFZLAorICBQUk9QX1RIUk9UVExFX1RJTUUsCisgIFBST1BfTEFTVAorfTsKKworc3RhdGljIEdzdEVsZW1lbnRDbGFzcyAqcGFyZW50X2NsYXNzID0gTlVMTDsKKworc3RhdGljIHZvaWQgZ3N0X2Jhc2Vfc2lua19jbGFzc19pbml0IChHc3RCYXNlU2lua0NsYXNzICoga2xhc3MpOworc3RhdGljIHZvaWQgZ3N0X2Jhc2Vfc2lua19pbml0IChHc3RCYXNlU2luayAqIHRyYW5zLCBncG9pbnRlciBnX2NsYXNzKTsKK3N0YXRpYyB2b2lkIGdzdF9iYXNlX3NpbmtfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOworCitHVHlwZQorZ3N0X2Jhc2Vfc2lua19nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIHZvbGF0aWxlIGdzaXplIGJhc2Vfc2lua190eXBlID0gMDsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZiYXNlX3NpbmtfdHlwZSkpIHsKKyAgICBHVHlwZSBfdHlwZTsKKyAgICBzdGF0aWMgY29uc3QgR1R5cGVJbmZvIGJhc2Vfc2lua19pbmZvID0geworICAgICAgc2l6ZW9mIChHc3RCYXNlU2lua0NsYXNzKSwKKyAgICAgIE5VTEwsCisgICAgICBOVUxMLAorICAgICAgKEdDbGFzc0luaXRGdW5jKSBnc3RfYmFzZV9zaW5rX2NsYXNzX2luaXQsCisgICAgICBOVUxMLAorICAgICAgTlVMTCwKKyAgICAgIHNpemVvZiAoR3N0QmFzZVNpbmspLAorICAgICAgMCwKKyAgICAgIChHSW5zdGFuY2VJbml0RnVuYykgZ3N0X2Jhc2Vfc2lua19pbml0LAorICAgIH07CisKKyAgICBfdHlwZSA9IGdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMgKEdTVF9UWVBFX0VMRU1FTlQsCisgICAgICAgICJHc3RCYXNlU2luayIsICZiYXNlX3NpbmtfaW5mbywgR19UWVBFX0ZMQUdfQUJTVFJBQ1QpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmYmFzZV9zaW5rX3R5cGUsIF90eXBlKTsKKyAgfQorICByZXR1cm4gYmFzZV9zaW5rX3R5cGU7Cit9CisKK3N0YXRpYyB2b2lkIGdzdF9iYXNlX3Npbmtfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOworc3RhdGljIHZvaWQgZ3N0X2Jhc2Vfc2lua19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7CisKK3N0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9zaW5rX3NlbmRfZXZlbnQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAorICAgIEdzdEV2ZW50ICogZXZlbnQpOworc3RhdGljIGdib29sZWFuIGRlZmF1bHRfZWxlbWVudF9xdWVyeSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFF1ZXJ5ICogcXVlcnkpOworc3RhdGljIGNvbnN0IEdzdFF1ZXJ5VHlwZSAqZ3N0X2Jhc2Vfc2lua19nZXRfcXVlcnlfdHlwZXMgKEdzdEVsZW1lbnQgKiBlbGVtZW50KTsKKworc3RhdGljIEdzdENhcHMgKmdzdF9iYXNlX3NpbmtfZ2V0X2NhcHMgKEdzdEJhc2VTaW5rICogc2luaywgR3N0Q2FwcyAqIGNhcHMpOworc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3Npbmtfc2V0X2NhcHMgKEdzdEJhc2VTaW5rICogc2luaywgR3N0Q2FwcyAqIGNhcHMpOworc3RhdGljIHZvaWQgZ3N0X2Jhc2Vfc2lua19nZXRfdGltZXMgKEdzdEJhc2VTaW5rICogYmFzZXNpbmssIEdzdEJ1ZmZlciAqIGJ1ZmZlciwKKyAgICBHc3RDbG9ja1RpbWUgKiBzdGFydCwgR3N0Q2xvY2tUaW1lICogZW5kKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9zaW5rX3NldF9mbHVzaGluZyAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaywKKyAgICBHc3RQYWQgKiBwYWQsIGdib29sZWFuIGZsdXNoaW5nKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9zaW5rX2RlZmF1bHRfYWN0aXZhdGVfcHVsbCAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaywKKyAgICBnYm9vbGVhbiBhY3RpdmUpOworc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3NpbmtfZGVmYXVsdF9kb19zZWVrIChHc3RCYXNlU2luayAqIHNpbmssCisgICAgR3N0U2VnbWVudCAqIHNlZ21lbnQpOworc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3NpbmtfZGVmYXVsdF9wcmVwYXJlX3NlZWtfc2VnbWVudCAoR3N0QmFzZVNpbmsgKiBzaW5rLAorICAgIEdzdEV2ZW50ICogZXZlbnQsIEdzdFNlZ21lbnQgKiBzZWdtZW50KTsKKworc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKKyAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKKworc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3Npbmtfc2lua19xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RRdWVyeSAqIHF1ZXJ5KTsKK3N0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9iYXNlX3NpbmtfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0QnVmZmVyICogYnVmZmVyKTsKK3N0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9iYXNlX3NpbmtfY2hhaW5fbGlzdCAoR3N0UGFkICogcGFkLAorICAgIEdzdEJ1ZmZlckxpc3QgKiBsaXN0KTsKKworc3RhdGljIHZvaWQgZ3N0X2Jhc2Vfc2lua19sb29wIChHc3RQYWQgKiBwYWQpOworc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3NpbmtfcGFkX2FjdGl2YXRlIChHc3RQYWQgKiBwYWQpOworc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3NpbmtfcGFkX2FjdGl2YXRlX3B1c2ggKEdzdFBhZCAqIHBhZCwgZ2Jvb2xlYW4gYWN0aXZlKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9zaW5rX3BhZF9hY3RpdmF0ZV9wdWxsIChHc3RQYWQgKiBwYWQsIGdib29sZWFuIGFjdGl2ZSk7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2Vfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KTsKKworc3RhdGljIGdib29sZWFuIGRlZmF1bHRfc2lua19xdWVyeSAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RRdWVyeSAqIHF1ZXJ5KTsKKworc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3NpbmtfbmVnb3RpYXRlX3B1bGwgKEdzdEJhc2VTaW5rICogYmFzZXNpbmspOworc3RhdGljIEdzdENhcHMgKmdzdF9iYXNlX3NpbmtfcGFkX2dldGNhcHMgKEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGZpbHRlcik7CitzdGF0aWMgdm9pZCBnc3RfYmFzZV9zaW5rX3BhZF9maXhhdGUgKEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGNhcHMpOworCisvKiBjaGVjayBpZiBhbiBvYmplY3Qgd2FzIHRvbyBsYXRlICovCitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2Vfc2lua19pc190b29fbGF0ZSAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaywKKyAgICBHc3RNaW5pT2JqZWN0ICogb2JqLCBHc3RDbG9ja1RpbWUgcnN0YXJ0LCBHc3RDbG9ja1RpbWUgcnN0b3AsCisgICAgR3N0Q2xvY2tSZXR1cm4gc3RhdHVzLCBHc3RDbG9ja1RpbWVEaWZmIGppdHRlcik7CitzdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfYmFzZV9zaW5rX3ByZXJvbGxfb2JqZWN0IChHc3RCYXNlU2luayAqIGJhc2VzaW5rLAorICAgIGd1aW50OCBvYmpfdHlwZSwgR3N0TWluaU9iamVjdCAqIG9iaik7CisKK3N0YXRpYyB2b2lkCitnc3RfYmFzZV9zaW5rX2NsYXNzX2luaXQgKEdzdEJhc2VTaW5rQ2xhc3MgKiBrbGFzcykKK3sKKyAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOworICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7CisKKyAgZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7CisgIGdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOworCisgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfYmFzZV9zaW5rX2RlYnVnLCAiYmFzZXNpbmsiLCAwLAorICAgICAgImJhc2VzaW5rIGVsZW1lbnQiKTsKKworICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKGtsYXNzLCBzaXplb2YgKEdzdEJhc2VTaW5rUHJpdmF0ZSkpOworCisgIHBhcmVudF9jbGFzcyA9IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCAoa2xhc3MpOworCisgIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X2Jhc2Vfc2lua19maW5hbGl6ZTsKKyAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2Jhc2Vfc2lua19zZXRfcHJvcGVydHk7CisgIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9iYXNlX3NpbmtfZ2V0X3Byb3BlcnR5OworCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU1lOQywKKyAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgic3luYyIsICJTeW5jIiwgIlN5bmMgb24gdGhlIGNsb2NrIiwgREVGQVVMVF9TWU5DLAorICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTUFYX0xBVEVORVNTLAorICAgICAgZ19wYXJhbV9zcGVjX2ludDY0ICgibWF4LWxhdGVuZXNzIiwgIk1heCBMYXRlbmVzcyIsCisgICAgICAgICAgIk1heGltdW0gbnVtYmVyIG9mIG5hbm9zZWNvbmRzIHRoYXQgYSBidWZmZXIgY2FuIGJlIGxhdGUgYmVmb3JlIGl0ICIKKyAgICAgICAgICAiaXMgZHJvcHBlZCAoLTEgdW5saW1pdGVkKSIsIC0xLCBHX01BWElOVDY0LCBERUZBVUxUX01BWF9MQVRFTkVTUywKKyAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1FPUywKKyAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgicW9zIiwgIlFvcyIsCisgICAgICAgICAgIkdlbmVyYXRlIFF1YWxpdHktb2YtU2VydmljZSBldmVudHMgdXBzdHJlYW0iLCBERUZBVUxUX1FPUywKKyAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKyAgLyoqCisgICAqIEdzdEJhc2VTaW5rOmFzeW5jCisgICAqCisgICAqIElmIHNldCB0byAjVFJVRSwgdGhlIGJhc2VzaW5rIHdpbGwgcGVyZm9ybSBhc3luY2hyb25vdXMgc3RhdGUgY2hhbmdlcy4KKyAgICogV2hlbiBzZXQgdG8gI0ZBTFNFLCB0aGUgc2luayB3aWxsIG5vdCBzaWduYWwgdGhlIHBhcmVudCB3aGVuIGl0IHByZXJvbGxzLgorICAgKiBVc2UgdGhpcyBvcHRpb24gd2hlbiBkZWFsaW5nIHdpdGggc3BhcnNlIHN0cmVhbXMgb3Igd2hlbiBzeW5jaHJvbmlzYXRpb24gaXMKKyAgICogbm90IHJlcXVpcmVkLgorICAgKgorICAgKiBTaW5jZTogMC4xMC4xNQorICAgKi8KKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9BU1lOQywKKyAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiYXN5bmMiLCAiQXN5bmMiLAorICAgICAgICAgICJHbyBhc3luY2hyb25vdXNseSB0byBQQVVTRUQiLCBERUZBVUxUX0FTWU5DLAorICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworICAvKioKKyAgICogR3N0QmFzZVNpbms6dHMtb2Zmc2V0CisgICAqCisgICAqIENvbnRyb2xzIHRoZSBmaW5hbCBzeW5jaHJvbmlzYXRpb24sIGEgbmVnYXRpdmUgdmFsdWUgd2lsbCByZW5kZXIgdGhlIGJ1ZmZlcgorICAgKiBlYXJsaWVyIHdoaWxlIGEgcG9zaXRpdmUgdmFsdWUgZGVsYXlzIHBsYXliYWNrLiBUaGlzIHByb3BlcnR5IGNhbiBiZQorICAgKiB1c2VkIHRvIGZpeCBzeW5jaHJvbmlzYXRpb24gaW4gYmFkIGZpbGVzLgorICAgKgorICAgKiBTaW5jZTogMC4xMC4xNQorICAgKi8KKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9UU19PRkZTRVQsCisgICAgICBnX3BhcmFtX3NwZWNfaW50NjQgKCJ0cy1vZmZzZXQiLCAiVFMgT2Zmc2V0IiwKKyAgICAgICAgICAiVGltZXN0YW1wIG9mZnNldCBpbiBuYW5vc2Vjb25kcyIsIEdfTUlOSU5UNjQsIEdfTUFYSU5UNjQsCisgICAgICAgICAgREVGQVVMVF9UU19PRkZTRVQsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworCisgIC8qKgorICAgKiBHc3RCYXNlU2luazplbmFibGUtbGFzdC1idWZmZXIKKyAgICoKKyAgICogRW5hYmxlIHRoZSBsYXN0LWJ1ZmZlciBwcm9wZXJ0eS4gSWYgRkFMU0UsIGJhc2VzaW5rIGRvZXNuJ3Qga2VlcCBhCisgICAqIHJlZmVyZW5jZSB0byB0aGUgbGFzdCBidWZmZXIgYXJyaXZlZCBhbmQgdGhlIGxhc3QtYnVmZmVyIHByb3BlcnR5IGlzIGFsd2F5cworICAgKiBzZXQgdG8gTlVMTC4gVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdSBuZWVkIGJ1ZmZlcnMgdG8gYmUgcmVsZWFzZWQgYXMgc29vbgorICAgKiBhcyBwb3NzaWJsZSwgZWcuIGlmIHlvdSdyZSB1c2luZyBhIGJ1ZmZlciBwb29sLgorICAgKgorICAgKiBTaW5jZTogMC4xMC4zMAorICAgKi8KKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9FTkFCTEVfTEFTVF9CVUZGRVIsCisgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImVuYWJsZS1sYXN0LWJ1ZmZlciIsICJFbmFibGUgTGFzdCBCdWZmZXIiLAorICAgICAgICAgICJFbmFibGUgdGhlIGxhc3QtYnVmZmVyIHByb3BlcnR5IiwgREVGQVVMVF9FTkFCTEVfTEFTVF9CVUZGRVIsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisKKyAgLyoqCisgICAqIEdzdEJhc2VTaW5rOmxhc3QtYnVmZmVyCisgICAqCisgICAqIFRoZSBsYXN0IGJ1ZmZlciB0aGF0IGFycml2ZWQgaW4gdGhlIHNpbmsgYW5kIHdhcyB1c2VkIGZvciBwcmVyb2xsIG9yIGZvcgorICAgKiByZW5kZXJpbmcuIFRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUgdGh1bWJuYWlscy4gVGhpcyBwcm9wZXJ0eQorICAgKiBjYW4gYmUgTlVMTCB3aGVuIHRoZSBzaW5rIGhhcyBub3QgeWV0IHJlY2VpdmVkIGEgYnVmZXIuCisgICAqCisgICAqIFNpbmNlOiAwLjEwLjE1CisgICAqLworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0xBU1RfQlVGRkVSLAorICAgICAgZ19wYXJhbV9zcGVjX2JveGVkICgibGFzdC1idWZmZXIiLCAiTGFzdCBCdWZmZXIiLAorICAgICAgICAgICJUaGUgbGFzdCBidWZmZXIgcmVjZWl2ZWQgaW4gdGhlIHNpbmsiLCBHU1RfVFlQRV9CVUZGRVIsCisgICAgICAgICAgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKyAgLyoqCisgICAqIEdzdEJhc2VTaW5rOmJsb2Nrc2l6ZQorICAgKgorICAgKiBUaGUgYW1vdW50IG9mIGJ5dGVzIHRvIHB1bGwgd2hlbiBvcGVyYXRpbmcgaW4gcHVsbCBtb2RlLgorICAgKgorICAgKiBTaW5jZTogMC4xMC4yMgorICAgKi8KKyAgLyogRklYTUUgMC4xMTogYmxvY2tzaXplIHByb3BlcnR5IHNob3VsZCBiZSBpbnQsIG90aGVyd2lzZSBtaW4+bWF4Li4gKi8KKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9CTE9DS1NJWkUsCisgICAgICBnX3BhcmFtX3NwZWNfdWludCAoImJsb2Nrc2l6ZSIsICJCbG9jayBzaXplIiwKKyAgICAgICAgICAiU2l6ZSBpbiBieXRlcyB0byBwdWxsIHBlciBidWZmZXIgKDAgPSBkZWZhdWx0KSIsIDAsIEdfTUFYVUlOVCwKKyAgICAgICAgICBERUZBVUxUX0JMT0NLU0laRSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIC8qKgorICAgKiBHc3RCYXNlU2luazpyZW5kZXItZGVsYXkKKyAgICoKKyAgICogVGhlIGFkZGl0aW9uYWwgZGVsYXkgYmV0d2VlbiBzeW5jaHJvbmlzYXRpb24gYW5kIGFjdHVhbCByZW5kZXJpbmcgb2YgdGhlCisgICAqIG1lZGlhLiBUaGlzIHByb3BlcnR5IHdpbGwgYWRkIGFkZGl0aW9uYWwgbGF0ZW5jeSB0byB0aGUgZGV2aWNlIGluIG9yZGVyIHRvCisgICAqIG1ha2Ugb3RoZXIgc2lua3MgY29tcGVuc2F0ZSBmb3IgdGhlIGRlbGF5LgorICAgKgorICAgKiBTaW5jZTogMC4xMC4yMgorICAgKi8KKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9SRU5ERVJfREVMQVksCisgICAgICBnX3BhcmFtX3NwZWNfdWludDY0ICgicmVuZGVyLWRlbGF5IiwgIlJlbmRlciBEZWxheSIsCisgICAgICAgICAgIkFkZGl0aW9uYWwgcmVuZGVyIGRlbGF5IG9mIHRoZSBzaW5rIGluIG5hbm9zZWNvbmRzIiwgMCwgR19NQVhVSU5UNjQsCisgICAgICAgICAgREVGQVVMVF9SRU5ERVJfREVMQVksIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworICAvKioKKyAgICogR3N0QmFzZVNpbms6dGhyb3R0bGUtdGltZQorICAgKgorICAgKiBUaGUgdGltZSB0byBpbnNlcnQgYmV0d2VlbiBidWZmZXJzLiBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wKKyAgICogdGhlIG1heGltdW0gYW1vdW50IG9mIGJ1ZmZlcnMgcGVyIHNlY29uZCB0byByZW5kZXIuIFNldHRpbmcgdGhpcyBwcm9wZXJ0eQorICAgKiB0byBhIHZhbHVlIGJpZ2dlciB0aGFuIDAgd2lsbCBtYWtlIHRoZSBzaW5rIGNyZWF0ZSBUSFJPVFRMRSBRb1MgZXZlbnRzLgorICAgKgorICAgKiBTaW5jZTogMC4xMC4zMworICAgKi8KKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9USFJPVFRMRV9USU1FLAorICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCAoInRocm90dGxlLXRpbWUiLCAiVGhyb3R0bGUgdGltZSIsCisgICAgICAgICAgIlRoZSB0aW1lIHRvIGtlZXAgYmV0d2VlbiByZW5kZXJlZCBidWZmZXJzICh1bnVzZWQpIiwgMCwgR19NQVhVSU5UNjQsCisgICAgICAgICAgREVGQVVMVF9USFJPVFRMRV9USU1FLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKworICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPQorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKTsKKyAgZ3N0ZWxlbWVudF9jbGFzcy0+c2VuZF9ldmVudCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmFzZV9zaW5rX3NlbmRfZXZlbnQpOworICBnc3RlbGVtZW50X2NsYXNzLT5xdWVyeSA9IEdTVF9ERUJVR19GVU5DUFRSIChkZWZhdWx0X2VsZW1lbnRfcXVlcnkpOworICBnc3RlbGVtZW50X2NsYXNzLT5nZXRfcXVlcnlfdHlwZXMgPQorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3NpbmtfZ2V0X3F1ZXJ5X3R5cGVzKTsKKworICBrbGFzcy0+Z2V0X2NhcHMgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2Vfc2lua19nZXRfY2Fwcyk7CisgIGtsYXNzLT5zZXRfY2FwcyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmFzZV9zaW5rX3NldF9jYXBzKTsKKyAga2xhc3MtPmdldF90aW1lcyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmFzZV9zaW5rX2dldF90aW1lcyk7CisgIGtsYXNzLT5hY3RpdmF0ZV9wdWxsID0KKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmFzZV9zaW5rX2RlZmF1bHRfYWN0aXZhdGVfcHVsbCk7CisgIGtsYXNzLT5xdWVyeSA9IEdTVF9ERUJVR19GVU5DUFRSIChkZWZhdWx0X3NpbmtfcXVlcnkpOworCisgIC8qIFJlZ2lzdGVyaW5nIGRlYnVnIHN5bWJvbHMgZm9yIGZ1bmN0aW9uIHBvaW50ZXJzICovCisgIEdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSIChnc3RfYmFzZV9zaW5rX3BhZF9nZXRjYXBzKTsKKyAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9iYXNlX3NpbmtfcGFkX2ZpeGF0ZSk7CisgIEdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSIChnc3RfYmFzZV9zaW5rX3BhZF9hY3RpdmF0ZSk7CisgIEdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSIChnc3RfYmFzZV9zaW5rX3BhZF9hY3RpdmF0ZV9wdXNoKTsKKyAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9iYXNlX3NpbmtfcGFkX2FjdGl2YXRlX3B1bGwpOworICBHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUiAoZ3N0X2Jhc2Vfc2lua19ldmVudCk7CisgIEdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSIChnc3RfYmFzZV9zaW5rX2NoYWluKTsKKyAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9iYXNlX3NpbmtfY2hhaW5fbGlzdCk7Cit9CisKK3N0YXRpYyBHc3RDYXBzICoKK2dzdF9iYXNlX3NpbmtfcGFkX2dldGNhcHMgKEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGZpbHRlcikKK3sKKyAgR3N0QmFzZVNpbmtDbGFzcyAqYmNsYXNzOworICBHc3RCYXNlU2luayAqYnNpbms7CisgIEdzdENhcHMgKmNhcHMgPSBOVUxMOworCisgIGJzaW5rID0gR1NUX0JBU0VfU0lOSyAoZ3N0X3BhZF9nZXRfcGFyZW50IChwYWQpKTsKKyAgYmNsYXNzID0gR1NUX0JBU0VfU0lOS19HRVRfQ0xBU1MgKGJzaW5rKTsKKworICBpZiAoYnNpbmstPnBhZF9tb2RlID09IEdTVF9BQ1RJVkFURV9QVUxMKSB7CisgICAgLyogaWYgd2UgYXJlIG9wZXJhdGluZyBpbiBwdWxsIG1vZGUgd2Ugb25seSBhY2NlcHQgdGhlIG5lZ290aWF0ZWQgY2FwcyAqLworICAgIGNhcHMgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKHBhZCk7CisgIH0KKyAgaWYgKGNhcHMgPT0gTlVMTCkgeworICAgIGlmIChiY2xhc3MtPmdldF9jYXBzKQorICAgICAgY2FwcyA9IGJjbGFzcy0+Z2V0X2NhcHMgKGJzaW5rLCBmaWx0ZXIpOworCisgICAgaWYgKGNhcHMgPT0gTlVMTCkgeworICAgICAgR3N0UGFkVGVtcGxhdGUgKnBhZF90ZW1wbGF0ZTsKKworICAgICAgcGFkX3RlbXBsYXRlID0KKyAgICAgICAgICBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChHU1RfRUxFTUVOVF9DTEFTUyAoYmNsYXNzKSwKKyAgICAgICAgICAic2luayIpOworICAgICAgaWYgKHBhZF90ZW1wbGF0ZSAhPSBOVUxMKSB7CisgICAgICAgIGNhcHMgPSBnc3RfcGFkX3RlbXBsYXRlX2dldF9jYXBzIChwYWRfdGVtcGxhdGUpOworCisgICAgICAgIGlmIChmaWx0ZXIpIHsKKyAgICAgICAgICBHc3RDYXBzICppbnRlcnNlY3Rpb247CisKKyAgICAgICAgICBpbnRlcnNlY3Rpb24gPQorICAgICAgICAgICAgICBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCBjYXBzLCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOworICAgICAgICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKKyAgICAgICAgICBjYXBzID0gaW50ZXJzZWN0aW9uOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIGdzdF9vYmplY3RfdW5yZWYgKGJzaW5rKTsKKworICByZXR1cm4gY2FwczsKK30KKworc3RhdGljIHZvaWQKK2dzdF9iYXNlX3NpbmtfcGFkX2ZpeGF0ZSAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogY2FwcykKK3sKKyAgR3N0QmFzZVNpbmtDbGFzcyAqYmNsYXNzOworICBHc3RCYXNlU2luayAqYnNpbms7CisKKyAgYnNpbmsgPSBHU1RfQkFTRV9TSU5LIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOworICBiY2xhc3MgPSBHU1RfQkFTRV9TSU5LX0dFVF9DTEFTUyAoYnNpbmspOworCisgIGlmIChiY2xhc3MtPmZpeGF0ZSkKKyAgICBiY2xhc3MtPmZpeGF0ZSAoYnNpbmssIGNhcHMpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKGJzaW5rKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9iYXNlX3NpbmtfaW5pdCAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaywgZ3BvaW50ZXIgZ19jbGFzcykKK3sKKyAgR3N0UGFkVGVtcGxhdGUgKnBhZF90ZW1wbGF0ZTsKKyAgR3N0QmFzZVNpbmtQcml2YXRlICpwcml2OworCisgIGJhc2VzaW5rLT5wcml2ID0gcHJpdiA9IEdTVF9CQVNFX1NJTktfR0VUX1BSSVZBVEUgKGJhc2VzaW5rKTsKKworICBwYWRfdGVtcGxhdGUgPQorICAgICAgZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoR1NUX0VMRU1FTlRfQ0xBU1MgKGdfY2xhc3MpLCAic2luayIpOworICBnX3JldHVybl9pZl9mYWlsIChwYWRfdGVtcGxhdGUgIT0gTlVMTCk7CisKKyAgYmFzZXNpbmstPnNpbmtwYWQgPSBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlIChwYWRfdGVtcGxhdGUsICJzaW5rIik7CisKKyAgZ3N0X3BhZF9zZXRfZ2V0Y2Fwc19mdW5jdGlvbiAoYmFzZXNpbmstPnNpbmtwYWQsIGdzdF9iYXNlX3NpbmtfcGFkX2dldGNhcHMpOworICBnc3RfcGFkX3NldF9maXhhdGVjYXBzX2Z1bmN0aW9uIChiYXNlc2luay0+c2lua3BhZCwgZ3N0X2Jhc2Vfc2lua19wYWRfZml4YXRlKTsKKyAgZ3N0X3BhZF9zZXRfYWN0aXZhdGVfZnVuY3Rpb24gKGJhc2VzaW5rLT5zaW5rcGFkLCBnc3RfYmFzZV9zaW5rX3BhZF9hY3RpdmF0ZSk7CisgIGdzdF9wYWRfc2V0X2FjdGl2YXRlcHVzaF9mdW5jdGlvbiAoYmFzZXNpbmstPnNpbmtwYWQsCisgICAgICBnc3RfYmFzZV9zaW5rX3BhZF9hY3RpdmF0ZV9wdXNoKTsKKyAgZ3N0X3BhZF9zZXRfYWN0aXZhdGVwdWxsX2Z1bmN0aW9uIChiYXNlc2luay0+c2lua3BhZCwKKyAgICAgIGdzdF9iYXNlX3NpbmtfcGFkX2FjdGl2YXRlX3B1bGwpOworICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAoYmFzZXNpbmstPnNpbmtwYWQsIGdzdF9iYXNlX3Npbmtfc2lua19xdWVyeSk7CisgIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChiYXNlc2luay0+c2lua3BhZCwgZ3N0X2Jhc2Vfc2lua19ldmVudCk7CisgIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChiYXNlc2luay0+c2lua3BhZCwgZ3N0X2Jhc2Vfc2lua19jaGFpbik7CisgIGdzdF9wYWRfc2V0X2NoYWluX2xpc3RfZnVuY3Rpb24gKGJhc2VzaW5rLT5zaW5rcGFkLCBnc3RfYmFzZV9zaW5rX2NoYWluX2xpc3QpOworICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVF9DQVNUIChiYXNlc2luayksIGJhc2VzaW5rLT5zaW5rcGFkKTsKKworICBiYXNlc2luay0+cGFkX21vZGUgPSBHU1RfQUNUSVZBVEVfTk9ORTsKKyAgYmFzZXNpbmstPnByZXJvbGxfbG9jayA9IGdfbXV0ZXhfbmV3ICgpOworICBiYXNlc2luay0+cHJlcm9sbF9jb25kID0gZ19jb25kX25ldyAoKTsKKyAgcHJpdi0+cHJlcm9sbF9xdWV1ZSA9IGdfcXVldWVfbmV3ICgpOworICBwcml2LT5oYXZlX2xhdGVuY3kgPSBGQUxTRTsKKworICBiYXNlc2luay0+Y2FuX2FjdGl2YXRlX3B1c2ggPSBERUZBVUxUX0NBTl9BQ1RJVkFURV9QVVNIOworICBiYXNlc2luay0+Y2FuX2FjdGl2YXRlX3B1bGwgPSBERUZBVUxUX0NBTl9BQ1RJVkFURV9QVUxMOworCisgIGJhc2VzaW5rLT5zeW5jID0gREVGQVVMVF9TWU5DOworICBiYXNlc2luay0+bWF4X2xhdGVuZXNzID0gREVGQVVMVF9NQVhfTEFURU5FU1M7CisgIGdfYXRvbWljX2ludF9zZXQgKCZwcml2LT5xb3NfZW5hYmxlZCwgREVGQVVMVF9RT1MpOworICBwcml2LT5hc3luY19lbmFibGVkID0gREVGQVVMVF9BU1lOQzsKKyAgcHJpdi0+dHNfb2Zmc2V0ID0gREVGQVVMVF9UU19PRkZTRVQ7CisgIHByaXYtPnJlbmRlcl9kZWxheSA9IERFRkFVTFRfUkVOREVSX0RFTEFZOworICBwcml2LT5ibG9ja3NpemUgPSBERUZBVUxUX0JMT0NLU0laRTsKKyAgcHJpdi0+Y2FjaGVkX2Nsb2NrX2lkID0gTlVMTDsKKyAgZ19hdG9taWNfaW50X3NldCAoJnByaXYtPmVuYWJsZV9sYXN0X2J1ZmZlciwgREVGQVVMVF9FTkFCTEVfTEFTVF9CVUZGRVIpOworICBwcml2LT50aHJvdHRsZV90aW1lID0gREVGQVVMVF9USFJPVFRMRV9USU1FOworCisgIEdTVF9PQkpFQ1RfRkxBR19TRVQgKGJhc2VzaW5rLCBHU1RfRUxFTUVOVF9JU19TSU5LKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9iYXNlX3NpbmtfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCit7CisgIEdzdEJhc2VTaW5rICpiYXNlc2luazsKKworICBiYXNlc2luayA9IEdTVF9CQVNFX1NJTksgKG9iamVjdCk7CisKKyAgZ19tdXRleF9mcmVlIChiYXNlc2luay0+cHJlcm9sbF9sb2NrKTsKKyAgZ19jb25kX2ZyZWUgKGJhc2VzaW5rLT5wcmVyb2xsX2NvbmQpOworICBnX3F1ZXVlX2ZyZWUgKGJhc2VzaW5rLT5wcml2LT5wcmVyb2xsX3F1ZXVlKTsKKworICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Cit9CisKKy8qKgorICogZ3N0X2Jhc2Vfc2lua19zZXRfc3luYzoKKyAqIEBzaW5rOiB0aGUgc2luaworICogQHN5bmM6IHRoZSBuZXcgc3luYyB2YWx1ZS4KKyAqCisgKiBDb25maWd1cmVzIEBzaW5rIHRvIHN5bmNocm9uaXplIG9uIHRoZSBjbG9jayBvciBub3QuIFdoZW4KKyAqIEBzeW5jIGlzIEZBTFNFLCBpbmNvbWluZyBzYW1wbGVzIHdpbGwgYmUgcGxheWVkIGFzIGZhc3QgYXMKKyAqIHBvc3NpYmxlLiBJZiBAc3luYyBpcyBUUlVFLCB0aGUgdGltZXN0YW1wcyBvZiB0aGUgaW5jb21taW5nCisgKiBidWZmZXJzIHdpbGwgYmUgdXNlZCB0byBzY2hlZHVsZSB0aGUgZXhhY3QgcmVuZGVyIHRpbWUgb2YgaXRzCisgKiBjb250ZW50cy4KKyAqCisgKiBTaW5jZTogMC4xMC40CisgKi8KK3ZvaWQKK2dzdF9iYXNlX3Npbmtfc2V0X3N5bmMgKEdzdEJhc2VTaW5rICogc2luaywgZ2Jvb2xlYW4gc3luYykKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JBU0VfU0lOSyAoc2luaykpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoc2luayk7CisgIHNpbmstPnN5bmMgPSBzeW5jOworICBHU1RfT0JKRUNUX1VOTE9DSyAoc2luayk7Cit9CisKKy8qKgorICogZ3N0X2Jhc2Vfc2lua19nZXRfc3luYzoKKyAqIEBzaW5rOiB0aGUgc2luaworICoKKyAqIENoZWNrcyBpZiBAc2luayBpcyBjdXJyZW50bHkgY29uZmlndXJlZCB0byBzeW5jaHJvbml6ZSBhZ2FpbnN0IHRoZQorICogY2xvY2suCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgc2luayBpcyBjb25maWd1cmVkIHRvIHN5bmNocm9uaXplIGFnYWluc3QgdGhlIGNsb2NrLgorICoKKyAqIFNpbmNlOiAwLjEwLjQKKyAqLworZ2Jvb2xlYW4KK2dzdF9iYXNlX3NpbmtfZ2V0X3N5bmMgKEdzdEJhc2VTaW5rICogc2luaykKK3sKKyAgZ2Jvb2xlYW4gcmVzOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQkFTRV9TSU5LIChzaW5rKSwgRkFMU0UpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoc2luayk7CisgIHJlcyA9IHNpbmstPnN5bmM7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChzaW5rKTsKKworICByZXR1cm4gcmVzOworfQorCisvKioKKyAqIGdzdF9iYXNlX3Npbmtfc2V0X21heF9sYXRlbmVzczoKKyAqIEBzaW5rOiB0aGUgc2luaworICogQG1heF9sYXRlbmVzczogdGhlIG5ldyBtYXggbGF0ZW5lc3MgdmFsdWUuCisgKgorICogU2V0cyB0aGUgbmV3IG1heCBsYXRlbmVzcyB2YWx1ZSB0byBAbWF4X2xhdGVuZXNzLiBUaGlzIHZhbHVlIGlzCisgKiB1c2VkIHRvIGRlY2lkZSBpZiBhIGJ1ZmZlciBzaG91bGQgYmUgZHJvcHBlZCBvciBub3QgYmFzZWQgb24gdGhlCisgKiBidWZmZXIgdGltZXN0YW1wIGFuZCB0aGUgY3VycmVudCBjbG9jayB0aW1lLiBBIHZhbHVlIG9mIC0xIG1lYW5zCisgKiBhbiB1bmxpbWl0ZWQgdGltZS4KKyAqCisgKiBTaW5jZTogMC4xMC40CisgKi8KK3ZvaWQKK2dzdF9iYXNlX3Npbmtfc2V0X21heF9sYXRlbmVzcyAoR3N0QmFzZVNpbmsgKiBzaW5rLCBnaW50NjQgbWF4X2xhdGVuZXNzKQoreworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQkFTRV9TSU5LIChzaW5rKSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChzaW5rKTsKKyAgc2luay0+bWF4X2xhdGVuZXNzID0gbWF4X2xhdGVuZXNzOworICBHU1RfT0JKRUNUX1VOTE9DSyAoc2luayk7Cit9CisKKy8qKgorICogZ3N0X2Jhc2Vfc2lua19nZXRfbWF4X2xhdGVuZXNzOgorICogQHNpbms6IHRoZSBzaW5rCisgKgorICogR2V0cyB0aGUgbWF4IGxhdGVuZXNzIHZhbHVlLiBTZWUgZ3N0X2Jhc2Vfc2lua19zZXRfbWF4X2xhdGVuZXNzIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFJldHVybnM6IFRoZSBtYXhpbXVtIHRpbWUgaW4gbmFub3NlY29uZHMgdGhhdCBhIGJ1ZmZlciBjYW4gYmUgbGF0ZQorICogYmVmb3JlIGl0IGlzIGRyb3BwZWQgYW5kIG5vdCByZW5kZXJlZC4gQSB2YWx1ZSBvZiAtMSBtZWFucyBhbgorICogdW5saW1pdGVkIHRpbWUuCisgKgorICogU2luY2U6IDAuMTAuNAorICovCitnaW50NjQKK2dzdF9iYXNlX3NpbmtfZ2V0X21heF9sYXRlbmVzcyAoR3N0QmFzZVNpbmsgKiBzaW5rKQoreworICBnaW50NjQgcmVzOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQkFTRV9TSU5LIChzaW5rKSwgLTEpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoc2luayk7CisgIHJlcyA9IHNpbmstPm1heF9sYXRlbmVzczsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmspOworCisgIHJldHVybiByZXM7Cit9CisKKy8qKgorICogZ3N0X2Jhc2Vfc2lua19zZXRfcW9zX2VuYWJsZWQ6CisgKiBAc2luazogdGhlIHNpbmsKKyAqIEBlbmFibGVkOiB0aGUgbmV3IHFvcyB2YWx1ZS4KKyAqCisgKiBDb25maWd1cmVzIEBzaW5rIHRvIHNlbmQgUXVhbGl0eS1vZi1TZXJ2aWNlIGV2ZW50cyB1cHN0cmVhbS4KKyAqCisgKiBTaW5jZTogMC4xMC41CisgKi8KK3ZvaWQKK2dzdF9iYXNlX3Npbmtfc2V0X3Fvc19lbmFibGVkIChHc3RCYXNlU2luayAqIHNpbmssIGdib29sZWFuIGVuYWJsZWQpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19CQVNFX1NJTksgKHNpbmspKTsKKworICBnX2F0b21pY19pbnRfc2V0ICgmc2luay0+cHJpdi0+cW9zX2VuYWJsZWQsIGVuYWJsZWQpOworfQorCisvKioKKyAqIGdzdF9iYXNlX3NpbmtfaXNfcW9zX2VuYWJsZWQ6CisgKiBAc2luazogdGhlIHNpbmsKKyAqCisgKiBDaGVja3MgaWYgQHNpbmsgaXMgY3VycmVudGx5IGNvbmZpZ3VyZWQgdG8gc2VuZCBRdWFsaXR5LW9mLVNlcnZpY2UgZXZlbnRzCisgKiB1cHN0cmVhbS4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBzaW5rIGlzIGNvbmZpZ3VyZWQgdG8gcGVyZm9ybSBRdWFsaXR5LW9mLVNlcnZpY2UuCisgKgorICogU2luY2U6IDAuMTAuNQorICovCitnYm9vbGVhbgorZ3N0X2Jhc2Vfc2lua19pc19xb3NfZW5hYmxlZCAoR3N0QmFzZVNpbmsgKiBzaW5rKQoreworICBnYm9vbGVhbiByZXM7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CQVNFX1NJTksgKHNpbmspLCBGQUxTRSk7CisKKyAgcmVzID0gZ19hdG9taWNfaW50X2dldCAoJnNpbmstPnByaXYtPnFvc19lbmFibGVkKTsKKworICByZXR1cm4gcmVzOworfQorCisvKioKKyAqIGdzdF9iYXNlX3Npbmtfc2V0X2FzeW5jX2VuYWJsZWQ6CisgKiBAc2luazogdGhlIHNpbmsKKyAqIEBlbmFibGVkOiB0aGUgbmV3IGFzeW5jIHZhbHVlLgorICoKKyAqIENvbmZpZ3VyZXMgQHNpbmsgdG8gcGVyZm9ybSBhbGwgc3RhdGUgY2hhbmdlcyBhc3luY2hyb251c2x5LiBXaGVuIGFzeW5jIGlzCisgKiBkaXNhYmxlZCwgdGhlIHNpbmsgd2lsbCBpbW1lZGlhdGVseSBnbyB0byBQQVVTRUQgaW5zdGVhZCBvZiB3YWl0aW5nIGZvciBhCisgKiBwcmVyb2xsIGJ1ZmZlci4gVGhpcyBmZWF0dXJlIGlzIHVzZWZ1bCBpZiB0aGUgc2luayBkb2VzIG5vdCBzeW5jaHJvbml6ZQorICogYWdhaW5zdCB0aGUgY2xvY2sgb3Igd2hlbiBpdCBpcyBkZWFsaW5nIHdpdGggc3BhcnNlIHN0cmVhbXMuCisgKgorICogU2luY2U6IDAuMTAuMTUKKyAqLwordm9pZAorZ3N0X2Jhc2Vfc2lua19zZXRfYXN5bmNfZW5hYmxlZCAoR3N0QmFzZVNpbmsgKiBzaW5rLCBnYm9vbGVhbiBlbmFibGVkKQoreworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQkFTRV9TSU5LIChzaW5rKSk7CisKKyAgR1NUX0JBU0VfU0lOS19QUkVST0xMX0xPQ0sgKHNpbmspOworICBnX2F0b21pY19pbnRfc2V0ICgmc2luay0+cHJpdi0+YXN5bmNfZW5hYmxlZCwgZW5hYmxlZCk7CisgIEdTVF9MT0dfT0JKRUNUIChzaW5rLCAic2V0IGFzeW5jIGVuYWJsZWQgdG8gJWQiLCBlbmFibGVkKTsKKyAgR1NUX0JBU0VfU0lOS19QUkVST0xMX1VOTE9DSyAoc2luayk7Cit9CisKKy8qKgorICogZ3N0X2Jhc2Vfc2lua19pc19hc3luY19lbmFibGVkOgorICogQHNpbms6IHRoZSBzaW5rCisgKgorICogQ2hlY2tzIGlmIEBzaW5rIGlzIGN1cnJlbnRseSBjb25maWd1cmVkIHRvIHBlcmZvcm0gYXN5bmNocm9ub3VzIHN0YXRlCisgKiBjaGFuZ2VzIHRvIFBBVVNFRC4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBzaW5rIGlzIGNvbmZpZ3VyZWQgdG8gcGVyZm9ybSBhc3luY2hyb25vdXMgc3RhdGUKKyAqIGNoYW5nZXMuCisgKgorICogU2luY2U6IDAuMTAuMTUKKyAqLworZ2Jvb2xlYW4KK2dzdF9iYXNlX3NpbmtfaXNfYXN5bmNfZW5hYmxlZCAoR3N0QmFzZVNpbmsgKiBzaW5rKQoreworICBnYm9vbGVhbiByZXM7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CQVNFX1NJTksgKHNpbmspLCBGQUxTRSk7CisKKyAgcmVzID0gZ19hdG9taWNfaW50X2dldCAoJnNpbmstPnByaXYtPmFzeW5jX2VuYWJsZWQpOworCisgIHJldHVybiByZXM7Cit9CisKKy8qKgorICogZ3N0X2Jhc2Vfc2lua19zZXRfdHNfb2Zmc2V0OgorICogQHNpbms6IHRoZSBzaW5rCisgKiBAb2Zmc2V0OiB0aGUgbmV3IG9mZnNldAorICoKKyAqIEFkanVzdCB0aGUgc3luY2hyb25pc2F0aW9uIG9mIEBzaW5rIHdpdGggQG9mZnNldC4gQSBuZWdhdGl2ZSB2YWx1ZSB3aWxsCisgKiByZW5kZXIgYnVmZmVycyBlYXJsaWVyIHRoYW4gdGhlaXIgdGltZXN0YW1wLiBBIHBvc2l0aXZlIHZhbHVlIHdpbGwgZGVsYXkKKyAqIHJlbmRlcmluZy4gVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBmaXggcGxheWJhY2sgb2YgYmFkbHkgdGltZXN0YW1wZWQKKyAqIGJ1ZmZlcnMuCisgKgorICogU2luY2U6IDAuMTAuMTUKKyAqLwordm9pZAorZ3N0X2Jhc2Vfc2lua19zZXRfdHNfb2Zmc2V0IChHc3RCYXNlU2luayAqIHNpbmssIEdzdENsb2NrVGltZURpZmYgb2Zmc2V0KQoreworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQkFTRV9TSU5LIChzaW5rKSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChzaW5rKTsKKyAgc2luay0+cHJpdi0+dHNfb2Zmc2V0ID0gb2Zmc2V0OworICBHU1RfTE9HX09CSkVDVCAoc2luaywgInNldCB0aW1lIG9mZnNldCB0byAlIiBHX0dJTlQ2NF9GT1JNQVQsIG9mZnNldCk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChzaW5rKTsKK30KKworLyoqCisgKiBnc3RfYmFzZV9zaW5rX2dldF90c19vZmZzZXQ6CisgKiBAc2luazogdGhlIHNpbmsKKyAqCisgKiBHZXQgdGhlIHN5bmNocm9uaXNhdGlvbiBvZmZzZXQgb2YgQHNpbmsuCisgKgorICogUmV0dXJuczogVGhlIHN5bmNocm9uaXNhdGlvbiBvZmZzZXQuCisgKgorICogU2luY2U6IDAuMTAuMTUKKyAqLworR3N0Q2xvY2tUaW1lRGlmZgorZ3N0X2Jhc2Vfc2lua19nZXRfdHNfb2Zmc2V0IChHc3RCYXNlU2luayAqIHNpbmspCit7CisgIEdzdENsb2NrVGltZURpZmYgcmVzOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQkFTRV9TSU5LIChzaW5rKSwgMCk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChzaW5rKTsKKyAgcmVzID0gc2luay0+cHJpdi0+dHNfb2Zmc2V0OworICBHU1RfT0JKRUNUX1VOTE9DSyAoc2luayk7CisKKyAgcmV0dXJuIHJlczsKK30KKworLyoqCisgKiBnc3RfYmFzZV9zaW5rX2dldF9sYXN0X2J1ZmZlcjoKKyAqIEBzaW5rOiB0aGUgc2luaworICoKKyAqIEdldCB0aGUgbGFzdCBidWZmZXIgdGhhdCBhcnJpdmVkIGluIHRoZSBzaW5rIGFuZCB3YXMgdXNlZCBmb3IgcHJlcm9sbCBvciBmb3IKKyAqIHJlbmRlcmluZy4gVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSB0aHVtYm5haWxzLgorICoKKyAqIFRoZSAjR3N0Q2FwcyBvbiB0aGUgYnVmZmVyIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgdHlwZSBvZiB0aGUgYnVmZmVyLgorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdzdF9idWZmZXJfdW5yZWYKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdEJ1ZmZlci4gZ3N0X2J1ZmZlcl91bnJlZigpIGFmdGVyIHVzYWdlLgorICogICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBOVUxMIHdoZW4gbm8gYnVmZmVyIGhhcyBhcnJpdmVkIGluIHRoZSBzaW5rIHlldAorICogICAgIG9yIHdoZW4gdGhlIHNpbmsgaXMgbm90IGluIFBBVVNFRCBvciBQTEFZSU5HLgorICoKKyAqIFNpbmNlOiAwLjEwLjE1CisgKi8KK0dzdEJ1ZmZlciAqCitnc3RfYmFzZV9zaW5rX2dldF9sYXN0X2J1ZmZlciAoR3N0QmFzZVNpbmsgKiBzaW5rKQoreworICBHc3RCdWZmZXIgKnJlczsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JBU0VfU0lOSyAoc2luayksIE5VTEwpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoc2luayk7CisgIGlmICgocmVzID0gc2luay0+cHJpdi0+bGFzdF9idWZmZXIpKQorICAgIGdzdF9idWZmZXJfcmVmIChyZXMpOworICBHU1RfT0JKRUNUX1VOTE9DSyAoc2luayk7CisKKyAgcmV0dXJuIHJlczsKK30KKworLyogd2l0aCBPQkpFQ1RfTE9DSyAqLworc3RhdGljIHZvaWQKK2dzdF9iYXNlX3Npbmtfc2V0X2xhc3RfYnVmZmVyX3VubG9ja2VkIChHc3RCYXNlU2luayAqIHNpbmssIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKK3sKKyAgR3N0QnVmZmVyICpvbGQ7CisKKyAgb2xkID0gc2luay0+cHJpdi0+bGFzdF9idWZmZXI7CisgIGlmIChHX0xJS0VMWSAob2xkICE9IGJ1ZmZlcikpIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAic2V0dGluZyBsYXN0IGJ1ZmZlciB0byAlcCIsIGJ1ZmZlcik7CisgICAgaWYgKEdfTElLRUxZIChidWZmZXIpKQorICAgICAgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcik7CisgICAgc2luay0+cHJpdi0+bGFzdF9idWZmZXIgPSBidWZmZXI7CisgIH0gZWxzZSB7CisgICAgb2xkID0gTlVMTDsKKyAgfQorICAvKiBhdm9pZCB1bnJlZmZpbmcgd2l0aCB0aGUgbG9jayBiZWNhdXNlIGNsZWFudXAgY29kZSBtaWdodCB3YW50IHRvIHRha2UgdGhlCisgICAqIGxvY2sgdG9vICovCisgIGlmIChHX0xJS0VMWSAob2xkKSkgeworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzaW5rKTsKKyAgICBnc3RfYnVmZmVyX3VucmVmIChvbGQpOworICAgIEdTVF9PQkpFQ1RfTE9DSyAoc2luayk7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9iYXNlX3Npbmtfc2V0X2xhc3RfYnVmZmVyIChHc3RCYXNlU2luayAqIHNpbmssIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKK3sKKyAgaWYgKCFnX2F0b21pY19pbnRfZ2V0ICgmc2luay0+cHJpdi0+ZW5hYmxlX2xhc3RfYnVmZmVyKSkKKyAgICByZXR1cm47CisKKyAgR1NUX09CSkVDVF9MT0NLIChzaW5rKTsKKyAgZ3N0X2Jhc2Vfc2lua19zZXRfbGFzdF9idWZmZXJfdW5sb2NrZWQgKHNpbmssIGJ1ZmZlcik7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChzaW5rKTsKK30KKworLyoqCisgKiBnc3RfYmFzZV9zaW5rX3NldF9sYXN0X2J1ZmZlcl9lbmFibGVkOgorICogQHNpbms6IHRoZSBzaW5rCisgKiBAZW5hYmxlZDogdGhlIG5ldyBlbmFibGUtbGFzdC1idWZmZXIgdmFsdWUuCisgKgorICogQ29uZmlndXJlcyBAc2luayB0byBzdG9yZSB0aGUgbGFzdCByZWNlaXZlZCBidWZmZXIgaW4gdGhlIGxhc3QtYnVmZmVyCisgKiBwcm9wZXJ0eS4KKyAqCisgKiBTaW5jZTogMC4xMC4zMAorICovCit2b2lkCitnc3RfYmFzZV9zaW5rX3NldF9sYXN0X2J1ZmZlcl9lbmFibGVkIChHc3RCYXNlU2luayAqIHNpbmssIGdib29sZWFuIGVuYWJsZWQpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19CQVNFX1NJTksgKHNpbmspKTsKKworICAvKiBPbmx5IHRha2UgbG9jayBpZiB3ZSBjaGFuZ2UgdGhlIHZhbHVlICovCisgIGlmIChnX2F0b21pY19pbnRfY29tcGFyZV9hbmRfZXhjaGFuZ2UgKCZzaW5rLT5wcml2LT5lbmFibGVfbGFzdF9idWZmZXIsCisgICAgICAgICAgIWVuYWJsZWQsIGVuYWJsZWQpICYmICFlbmFibGVkKSB7CisgICAgR1NUX09CSkVDVF9MT0NLIChzaW5rKTsKKyAgICBnc3RfYmFzZV9zaW5rX3NldF9sYXN0X2J1ZmZlcl91bmxvY2tlZCAoc2luaywgTlVMTCk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmspOworICB9Cit9CisKKy8qKgorICogZ3N0X2Jhc2Vfc2lua19pc19sYXN0X2J1ZmZlcl9lbmFibGVkOgorICogQHNpbms6IHRoZSBzaW5rCisgKgorICogQ2hlY2tzIGlmIEBzaW5rIGlzIGN1cnJlbnRseSBjb25maWd1cmVkIHRvIHN0b3JlIHRoZSBsYXN0IHJlY2VpdmVkIGJ1ZmZlciBpbgorICogdGhlIGxhc3QtYnVmZmVyIHByb3BlcnR5LgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgdGhlIHNpbmsgaXMgY29uZmlndXJlZCB0byBzdG9yZSB0aGUgbGFzdCByZWNlaXZlZCBidWZmZXIuCisgKgorICogU2luY2U6IDAuMTAuMzAKKyAqLworZ2Jvb2xlYW4KK2dzdF9iYXNlX3NpbmtfaXNfbGFzdF9idWZmZXJfZW5hYmxlZCAoR3N0QmFzZVNpbmsgKiBzaW5rKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JBU0VfU0lOSyAoc2luayksIEZBTFNFKTsKKworICByZXR1cm4gZ19hdG9taWNfaW50X2dldCAoJnNpbmstPnByaXYtPmVuYWJsZV9sYXN0X2J1ZmZlcik7Cit9CisKKy8qKgorICogZ3N0X2Jhc2Vfc2lua19nZXRfbGF0ZW5jeToKKyAqIEBzaW5rOiB0aGUgc2luaworICoKKyAqIEdldCB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQgbGF0ZW5jeS4KKyAqCisgKiBSZXR1cm5zOiBUaGUgY29uZmlndXJlZCBsYXRlbmN5LgorICoKKyAqIFNpbmNlOiAwLjEwLjEyCisgKi8KK0dzdENsb2NrVGltZQorZ3N0X2Jhc2Vfc2lua19nZXRfbGF0ZW5jeSAoR3N0QmFzZVNpbmsgKiBzaW5rKQoreworICBHc3RDbG9ja1RpbWUgcmVzOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoc2luayk7CisgIHJlcyA9IHNpbmstPnByaXYtPmxhdGVuY3k7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChzaW5rKTsKKworICByZXR1cm4gcmVzOworfQorCisvKioKKyAqIGdzdF9iYXNlX3NpbmtfcXVlcnlfbGF0ZW5jeToKKyAqIEBzaW5rOiB0aGUgc2luaworICogQGxpdmU6IChvdXQpIChhbGxvdy1ub25lKTogaWYgdGhlIHNpbmsgaXMgbGl2ZQorICogQHVwc3RyZWFtX2xpdmU6IChvdXQpIChhbGxvdy1ub25lKTogaWYgYW4gdXBzdHJlYW0gZWxlbWVudCBpcyBsaXZlCisgKiBAbWluX2xhdGVuY3k6IChvdXQpIChhbGxvdy1ub25lKTogdGhlIG1pbiBsYXRlbmN5IG9mIHRoZSB1cHN0cmVhbSBlbGVtZW50cworICogQG1heF9sYXRlbmN5OiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBtYXggbGF0ZW5jeSBvZiB0aGUgdXBzdHJlYW0gZWxlbWVudHMKKyAqCisgKiBRdWVyeSB0aGUgc2luayBmb3IgdGhlIGxhdGVuY3kgcGFyYW1ldGVycy4gVGhlIGxhdGVuY3kgd2lsbCBiZSBxdWVyaWVkIGZyb20KKyAqIHRoZSB1cHN0cmVhbSBlbGVtZW50cy4gQGxpdmUgd2lsbCBiZSBUUlVFIGlmIEBzaW5rIGlzIGNvbmZpZ3VyZWQgdG8KKyAqIHN5bmNocm9uaXplIGFnYWluc3QgdGhlIGNsb2NrLiBAdXBzdHJlYW1fbGl2ZSB3aWxsIGJlIFRSVUUgaWYgYW4gdXBzdHJlYW0KKyAqIGVsZW1lbnQgaXMgbGl2ZS4KKyAqCisgKiBJZiBib3RoIEBsaXZlIGFuZCBAdXBzdHJlYW1fbGl2ZSBhcmUgVFJVRSwgdGhlIHNpbmsgd2lsbCB3YW50IHRvIGNvbXBlbnNhdGUKKyAqIGZvciB0aGUgbGF0ZW5jeSBpbnRyb2R1Y2VkIGJ5IHRoZSB1cHN0cmVhbSBlbGVtZW50cyBieSBzZXR0aW5nIHRoZQorICogQG1pbl9sYXRlbmN5IHRvIGEgc3RyaWN0bHkgcG9zc2l0aXZlIHZhbHVlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgbW9zdGx5IHVzZWQgYnkgc3ViY2xhc3Nlcy4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBxdWVyeSBzdWNjZWVkZWQuCisgKgorICogU2luY2U6IDAuMTAuMTIKKyAqLworZ2Jvb2xlYW4KK2dzdF9iYXNlX3NpbmtfcXVlcnlfbGF0ZW5jeSAoR3N0QmFzZVNpbmsgKiBzaW5rLCBnYm9vbGVhbiAqIGxpdmUsCisgICAgZ2Jvb2xlYW4gKiB1cHN0cmVhbV9saXZlLCBHc3RDbG9ja1RpbWUgKiBtaW5fbGF0ZW5jeSwKKyAgICBHc3RDbG9ja1RpbWUgKiBtYXhfbGF0ZW5jeSkKK3sKKyAgZ2Jvb2xlYW4gbCwgdXNfbGl2ZSwgcmVzLCBoYXZlX2xhdGVuY3k7CisgIEdzdENsb2NrVGltZSBtaW4sIG1heCwgcmVuZGVyX2RlbGF5OworICBHc3RRdWVyeSAqcXVlcnk7CisgIEdzdENsb2NrVGltZSB1c19taW4sIHVzX21heDsKKworICAvKiB3ZSBhcmUgbGl2ZSB3aGVuIHdlIHN5bmMgdG8gdGhlIGNsb2NrICovCisgIEdTVF9PQkpFQ1RfTE9DSyAoc2luayk7CisgIGwgPSBzaW5rLT5zeW5jOworICBoYXZlX2xhdGVuY3kgPSBzaW5rLT5wcml2LT5oYXZlX2xhdGVuY3k7CisgIHJlbmRlcl9kZWxheSA9IHNpbmstPnByaXYtPnJlbmRlcl9kZWxheTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmspOworCisgIC8qIGFzc3VtZSBubyBsYXRlbmN5ICovCisgIG1pbiA9IDA7CisgIG1heCA9IC0xOworICB1c19saXZlID0gRkFMU0U7CisKKyAgaWYgKGhhdmVfbGF0ZW5jeSkgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJ3ZSBhcmUgcmVhZHkgZm9yIExBVEVOQ1kgcXVlcnkiKTsKKyAgICAvKiB3ZSBhcmUgcmVhZHkgZm9yIGEgbGF0ZW5jeSBxdWVyeSB0aGlzIGlzIHdoZW4gd2UgcHJlcm9sbCBvciB3aGVuIHdlIGFyZQorICAgICAqIG5vdCBhc3luYy4gKi8KKyAgICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfbGF0ZW5jeSAoKTsKKworICAgIC8qIGFzayB0aGUgcGVlciBmb3IgdGhlIGxhdGVuY3kgKi8KKyAgICBpZiAoKHJlcyA9IGdzdF9wYWRfcGVlcl9xdWVyeSAoc2luay0+c2lua3BhZCwgcXVlcnkpKSkgeworICAgICAgLyogZ2V0IHVwc3RyZWFtIG1pbiBhbmQgbWF4IGxhdGVuY3kgKi8KKyAgICAgIGdzdF9xdWVyeV9wYXJzZV9sYXRlbmN5IChxdWVyeSwgJnVzX2xpdmUsICZ1c19taW4sICZ1c19tYXgpOworCisgICAgICBpZiAodXNfbGl2ZSkgeworICAgICAgICAvKiB1cHN0cmVhbSBsaXZlLCB1c2UgaXRzIGxhdGVuY3ksIHN1YmNsYXNzZXMgc2hvdWxkIHVzZSB0aGVzZQorICAgICAgICAgKiB2YWx1ZXMgdG8gY3JlYXRlIHRoZSBjb21wbGV0ZSBsYXRlbmN5LiAqLworICAgICAgICBtaW4gPSB1c19taW47CisgICAgICAgIG1heCA9IHVzX21heDsKKyAgICAgIH0KKyAgICAgIGlmIChsKSB7CisgICAgICAgIC8qIHdlIG5lZWQgdG8gYWRkIHRoZSByZW5kZXIgZGVsYXkgaWYgd2UgYXJlIGxpdmUgKi8KKyAgICAgICAgaWYgKG1pbiAhPSAtMSkKKyAgICAgICAgICBtaW4gKz0gcmVuZGVyX2RlbGF5OworICAgICAgICBpZiAobWF4ICE9IC0xKQorICAgICAgICAgIG1heCArPSByZW5kZXJfZGVsYXk7CisgICAgICB9CisgICAgfQorICAgIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOworICB9IGVsc2UgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJ3ZSBhcmUgbm90IHlldCByZWFkeSBmb3IgTEFURU5DWSBxdWVyeSIpOworICAgIHJlcyA9IEZBTFNFOworICB9CisKKyAgLyogbm90IGxpdmUsIHdlIHRyaWVkIHRvIGRvIHRoZSBxdWVyeSwgaWYgaXQgZmFpbGVkIHdlIHJldHVybiBUUlVFIGFueXdheSAqLworICBpZiAoIXJlcykgeworICAgIGlmICghbCkgeworICAgICAgcmVzID0gVFJVRTsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJsYXRlbmN5IHF1ZXJ5IGZhaWxlZCBidXQgd2UgYXJlIG5vdCBsaXZlIik7CisgICAgfSBlbHNlIHsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJsYXRlbmN5IHF1ZXJ5IGZhaWxlZCBhbmQgd2UgYXJlIGxpdmUiKTsKKyAgICB9CisgIH0KKworICBpZiAocmVzKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgImxhdGVuY3kgcXVlcnk6IGxpdmU6ICVkLCBoYXZlX2xhdGVuY3kgJWQsIgorICAgICAgICAiIHVwc3RyZWFtOiAlZCwgbWluICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBtYXggJSIgR1NUX1RJTUVfRk9STUFULCBsLAorICAgICAgICBoYXZlX2xhdGVuY3ksIHVzX2xpdmUsIEdTVF9USU1FX0FSR1MgKG1pbiksIEdTVF9USU1FX0FSR1MgKG1heCkpOworCisgICAgaWYgKGxpdmUpCisgICAgICAqbGl2ZSA9IGw7CisgICAgaWYgKHVwc3RyZWFtX2xpdmUpCisgICAgICAqdXBzdHJlYW1fbGl2ZSA9IHVzX2xpdmU7CisgICAgaWYgKG1pbl9sYXRlbmN5KQorICAgICAgKm1pbl9sYXRlbmN5ID0gbWluOworICAgIGlmIChtYXhfbGF0ZW5jeSkKKyAgICAgICptYXhfbGF0ZW5jeSA9IG1heDsKKyAgfQorICByZXR1cm4gcmVzOworfQorCisvKioKKyAqIGdzdF9iYXNlX3Npbmtfc2V0X3JlbmRlcl9kZWxheToKKyAqIEBzaW5rOiBhICNHc3RCYXNlU2luaworICogQGRlbGF5OiB0aGUgbmV3IGRlbGF5CisgKgorICogU2V0IHRoZSByZW5kZXIgZGVsYXkgaW4gQHNpbmsgdG8gQGRlbGF5LiBUaGUgcmVuZGVyIGRlbGF5IGlzIHRoZSB0aW1lCisgKiBiZXR3ZWVuIGFjdHVhbCByZW5kZXJpbmcgb2YgYSBidWZmZXIgYW5kIGl0cyBzeW5jaHJvbmlzYXRpb24gdGltZS4gU29tZQorICogZGV2aWNlcyBtaWdodCBkZWxheSBtZWRpYSByZW5kZXJpbmcgd2hpY2ggY2FuIGJlIGNvbXBlbnNhdGVkIGZvciB3aXRoIHRoaXMKKyAqIGZ1bmN0aW9uLgorICoKKyAqIEFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgdGhpcyBzaW5rIHdpbGwgcmVwb3J0IGFkZGl0aW9uYWwgbGF0ZW5jeSBhbmQKKyAqIG90aGVyIHNpbmtzIHdpbGwgYWRqdXN0IHRoZWlyIGxhdGVuY3kgdG8gZGVsYXkgdGhlIHJlbmRlcmluZyBvZiB0aGVpciBtZWRpYS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkIGJ5IHN1YmNsYXNzZXMuCisgKgorICogU2luY2U6IDAuMTAuMjEKKyAqLwordm9pZAorZ3N0X2Jhc2Vfc2lua19zZXRfcmVuZGVyX2RlbGF5IChHc3RCYXNlU2luayAqIHNpbmssIEdzdENsb2NrVGltZSBkZWxheSkKK3sKKyAgR3N0Q2xvY2tUaW1lIG9sZF9yZW5kZXJfZGVsYXk7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JBU0VfU0lOSyAoc2luaykpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoc2luayk7CisgIG9sZF9yZW5kZXJfZGVsYXkgPSBzaW5rLT5wcml2LT5yZW5kZXJfZGVsYXk7CisgIHNpbmstPnByaXYtPnJlbmRlcl9kZWxheSA9IGRlbGF5OworICBHU1RfTE9HX09CSkVDVCAoc2luaywgInNldCByZW5kZXIgZGVsYXkgdG8gJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgR1NUX1RJTUVfQVJHUyAoZGVsYXkpKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmspOworCisgIGlmIChkZWxheSAhPSBvbGRfcmVuZGVyX2RlbGF5KSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInBvc3RpbmcgbGF0ZW5jeSBjaGFuZ2VkIik7CisgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChzaW5rKSwKKyAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X2xhdGVuY3kgKEdTVF9PQkpFQ1RfQ0FTVCAoc2luaykpKTsKKyAgfQorfQorCisvKioKKyAqIGdzdF9iYXNlX3NpbmtfZ2V0X3JlbmRlcl9kZWxheToKKyAqIEBzaW5rOiBhICNHc3RCYXNlU2luaworICoKKyAqIEdldCB0aGUgcmVuZGVyIGRlbGF5IG9mIEBzaW5rLiBzZWUgZ3N0X2Jhc2Vfc2lua19zZXRfcmVuZGVyX2RlbGF5KCkgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZW5kZXIgZGVsYXkuCisgKgorICogUmV0dXJuczogdGhlIHJlbmRlciBkZWxheSBvZiBAc2luay4KKyAqCisgKiBTaW5jZTogMC4xMC4yMQorICovCitHc3RDbG9ja1RpbWUKK2dzdF9iYXNlX3NpbmtfZ2V0X3JlbmRlcl9kZWxheSAoR3N0QmFzZVNpbmsgKiBzaW5rKQoreworICBHc3RDbG9ja1RpbWVEaWZmIHJlczsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JBU0VfU0lOSyAoc2luayksIDApOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoc2luayk7CisgIHJlcyA9IHNpbmstPnByaXYtPnJlbmRlcl9kZWxheTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmspOworCisgIHJldHVybiByZXM7Cit9CisKKy8qKgorICogZ3N0X2Jhc2Vfc2lua19zZXRfYmxvY2tzaXplOgorICogQHNpbms6IGEgI0dzdEJhc2VTaW5rCisgKiBAYmxvY2tzaXplOiB0aGUgYmxvY2tzaXplIGluIGJ5dGVzCisgKgorICogU2V0IHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB0aGUgc2luayB3aWxsIHB1bGwgd2hlbiBpdCBpcyBvcGVyYXRpbmcgaW4gcHVsbAorICogbW9kZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yMgorICovCisvKiBGSVhNRSAwLjExOiBibG9ja3NpemUgcHJvcGVydHkgc2hvdWxkIGJlIGludCwgb3RoZXJ3aXNlIG1pbj5tYXguLiAqLwordm9pZAorZ3N0X2Jhc2Vfc2lua19zZXRfYmxvY2tzaXplIChHc3RCYXNlU2luayAqIHNpbmssIGd1aW50IGJsb2Nrc2l6ZSkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JBU0VfU0lOSyAoc2luaykpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoc2luayk7CisgIHNpbmstPnByaXYtPmJsb2Nrc2l6ZSA9IGJsb2Nrc2l6ZTsKKyAgR1NUX0xPR19PQkpFQ1QgKHNpbmssICJzZXQgYmxvY2tzaXplIHRvICV1IiwgYmxvY2tzaXplKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmspOworfQorCisvKioKKyAqIGdzdF9iYXNlX3NpbmtfZ2V0X2Jsb2Nrc2l6ZToKKyAqIEBzaW5rOiBhICNHc3RCYXNlU2luaworICoKKyAqIEdldCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgdGhlIHNpbmsgd2lsbCBwdWxsIHdoZW4gaXQgaXMgb3BlcmF0aW5nIGluIHB1bGwKKyAqIG1vZGUuCisgKgorICogUmV0dXJuczogdGhlIG51bWJlciBvZiBieXRlcyBAc2luayB3aWxsIHB1bGwgaW4gcHVsbCBtb2RlLgorICoKKyAqIFNpbmNlOiAwLjEwLjIyCisgKi8KKy8qIEZJWE1FIDAuMTE6IGJsb2Nrc2l6ZSBwcm9wZXJ0eSBzaG91bGQgYmUgaW50LCBvdGhlcndpc2UgbWluPm1heC4uICovCitndWludAorZ3N0X2Jhc2Vfc2lua19nZXRfYmxvY2tzaXplIChHc3RCYXNlU2luayAqIHNpbmspCit7CisgIGd1aW50IHJlczsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JBU0VfU0lOSyAoc2luayksIDApOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoc2luayk7CisgIHJlcyA9IHNpbmstPnByaXYtPmJsb2Nrc2l6ZTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmspOworCisgIHJldHVybiByZXM7Cit9CisKKy8qKgorICogZ3N0X2Jhc2Vfc2lua19zZXRfdGhyb3R0bGVfdGltZToKKyAqIEBzaW5rOiBhICNHc3RCYXNlU2luaworICogQHRocm90dGxlOiB0aGUgdGhyb3R0bGUgdGltZSBpbiBuYW5vc2Vjb25kcworICoKKyAqIFNldCB0aGUgdGltZSB0aGF0IHdpbGwgYmUgaW5zZXJ0ZWQgYmV0d2VlbiByZW5kZXJlZCBidWZmZXJzLiBUaGlzCisgKiBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSBtYXhpbXVtIGJ1ZmZlcnMgcGVyIHNlY29uZCB0aGF0IHRoZSBzaW5rCisgKiB3aWxsIHJlbmRlci4gCisgKgorICogU2luY2U6IDAuMTAuMzMKKyAqLwordm9pZAorZ3N0X2Jhc2Vfc2lua19zZXRfdGhyb3R0bGVfdGltZSAoR3N0QmFzZVNpbmsgKiBzaW5rLCBndWludDY0IHRocm90dGxlKQoreworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQkFTRV9TSU5LIChzaW5rKSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChzaW5rKTsKKyAgc2luay0+cHJpdi0+dGhyb3R0bGVfdGltZSA9IHRocm90dGxlOworICBHU1RfTE9HX09CSkVDVCAoc2luaywgInNldCB0aHJvdHRsZV90aW1lIHRvICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHRocm90dGxlKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmspOworfQorCisvKioKKyAqIGdzdF9iYXNlX3NpbmtfZ2V0X3Rocm90dGxlX3RpbWU6CisgKiBAc2luazogYSAjR3N0QmFzZVNpbmsKKyAqCisgKiBHZXQgdGhlIHRpbWUgdGhhdCB3aWxsIGJlIGluc2VydGVkIGJldHdlZW4gZnJhbWVzIHRvIGNvbnRyb2wgdGhlIAorICogbWF4aW11bSBidWZmZXJzIHBlciBzZWNvbmQuCisgKgorICogUmV0dXJuczogdGhlIG51bWJlciBvZiBuYW5vc2Vjb25kcyBAc2luayB3aWxsIHB1dCBiZXR3ZWVuIGZyYW1lcy4KKyAqCisgKiBTaW5jZTogMC4xMC4zMworICovCitndWludDY0Citnc3RfYmFzZV9zaW5rX2dldF90aHJvdHRsZV90aW1lIChHc3RCYXNlU2luayAqIHNpbmspCit7CisgIGd1aW50NjQgcmVzOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQkFTRV9TSU5LIChzaW5rKSwgMCk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChzaW5rKTsKKyAgcmVzID0gc2luay0+cHJpdi0+dGhyb3R0bGVfdGltZTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmspOworCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfYmFzZV9zaW5rX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQoreworICBHc3RCYXNlU2luayAqc2luayA9IEdTVF9CQVNFX1NJTksgKG9iamVjdCk7CisKKyAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX1NZTkM6CisgICAgICBnc3RfYmFzZV9zaW5rX3NldF9zeW5jIChzaW5rLCBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSkpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01BWF9MQVRFTkVTUzoKKyAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X21heF9sYXRlbmVzcyAoc2luaywgZ192YWx1ZV9nZXRfaW50NjQgKHZhbHVlKSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUU9TOgorICAgICAgZ3N0X2Jhc2Vfc2lua19zZXRfcW9zX2VuYWJsZWQgKHNpbmssIGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVNZTkM6CisgICAgICBnc3RfYmFzZV9zaW5rX3NldF9hc3luY19lbmFibGVkIChzaW5rLCBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSkpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RTX09GRlNFVDoKKyAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X3RzX29mZnNldCAoc2luaywgZ192YWx1ZV9nZXRfaW50NjQgKHZhbHVlKSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQkxPQ0tTSVpFOgorICAgICAgZ3N0X2Jhc2Vfc2lua19zZXRfYmxvY2tzaXplIChzaW5rLCBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSkpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JFTkRFUl9ERUxBWToKKyAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X3JlbmRlcl9kZWxheSAoc2luaywgZ192YWx1ZV9nZXRfdWludDY0ICh2YWx1ZSkpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0VOQUJMRV9MQVNUX0JVRkZFUjoKKyAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X2xhc3RfYnVmZmVyX2VuYWJsZWQgKHNpbmssIGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVEhST1RUTEVfVElNRToKKyAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X3Rocm90dGxlX3RpbWUgKHNpbmssIGdfdmFsdWVfZ2V0X3VpbnQ2NCAodmFsdWUpKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9iYXNlX3NpbmtfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKKyAgICBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIEdzdEJhc2VTaW5rICpzaW5rID0gR1NUX0JBU0VfU0lOSyAob2JqZWN0KTsKKworICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfU1lOQzoKKyAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBnc3RfYmFzZV9zaW5rX2dldF9zeW5jIChzaW5rKSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUFYX0xBVEVORVNTOgorICAgICAgZ192YWx1ZV9zZXRfaW50NjQgKHZhbHVlLCBnc3RfYmFzZV9zaW5rX2dldF9tYXhfbGF0ZW5lc3MgKHNpbmspKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9RT1M6CisgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgZ3N0X2Jhc2Vfc2lua19pc19xb3NfZW5hYmxlZCAoc2luaykpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FTWU5DOgorICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGdzdF9iYXNlX3NpbmtfaXNfYXN5bmNfZW5hYmxlZCAoc2luaykpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RTX09GRlNFVDoKKyAgICAgIGdfdmFsdWVfc2V0X2ludDY0ICh2YWx1ZSwgZ3N0X2Jhc2Vfc2lua19nZXRfdHNfb2Zmc2V0IChzaW5rKSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTEFTVF9CVUZGRVI6CisgICAgICBnc3RfdmFsdWVfdGFrZV9idWZmZXIgKHZhbHVlLCBnc3RfYmFzZV9zaW5rX2dldF9sYXN0X2J1ZmZlciAoc2luaykpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0VOQUJMRV9MQVNUX0JVRkZFUjoKKyAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBnc3RfYmFzZV9zaW5rX2lzX2xhc3RfYnVmZmVyX2VuYWJsZWQgKHNpbmspKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9CTE9DS1NJWkU6CisgICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgZ3N0X2Jhc2Vfc2lua19nZXRfYmxvY2tzaXplIChzaW5rKSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVOREVSX0RFTEFZOgorICAgICAgZ192YWx1ZV9zZXRfdWludDY0ICh2YWx1ZSwgZ3N0X2Jhc2Vfc2lua19nZXRfcmVuZGVyX2RlbGF5IChzaW5rKSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVEhST1RUTEVfVElNRToKKyAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAodmFsdWUsIGdzdF9iYXNlX3NpbmtfZ2V0X3Rocm90dGxlX3RpbWUgKHNpbmspKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KK30KKworCitzdGF0aWMgR3N0Q2FwcyAqCitnc3RfYmFzZV9zaW5rX2dldF9jYXBzIChHc3RCYXNlU2luayAqIHNpbmssIEdzdENhcHMgKiBmaWx0ZXIpCit7CisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iYXNlX3Npbmtfc2V0X2NhcHMgKEdzdEJhc2VTaW5rICogc2luaywgR3N0Q2FwcyAqIGNhcHMpCit7CisgIHJldHVybiBUUlVFOworfQorCisvKiB3aXRoIFBSRVJPTExfTE9DSywgU1RSRUFNX0xPQ0sgKi8KK3N0YXRpYyB2b2lkCitnc3RfYmFzZV9zaW5rX3ByZXJvbGxfcXVldWVfZmx1c2ggKEdzdEJhc2VTaW5rICogYmFzZXNpbmssIEdzdFBhZCAqIHBhZCkKK3sKKyAgR3N0TWluaU9iamVjdCAqb2JqOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiZmx1c2hpbmcgcXVldWUgJXAiLCBiYXNlc2luayk7CisgIHdoaWxlICgob2JqID0gZ19xdWV1ZV9wb3BfaGVhZCAoYmFzZXNpbmstPnByaXYtPnByZXJvbGxfcXVldWUpKSkgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAicG9wcGVkICVwIiwgb2JqKTsKKyAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKG9iaik7CisgIH0KKyAgLyogd2UgY2FuJ3QgaGF2ZSBFT1MgYW55bW9yZSBub3cgKi8KKyAgYmFzZXNpbmstPmVvcyA9IEZBTFNFOworICBiYXNlc2luay0+cHJpdi0+cmVjZWl2ZWRfZW9zID0gRkFMU0U7CisgIGJhc2VzaW5rLT5oYXZlX3ByZXJvbGwgPSBGQUxTRTsKKyAgYmFzZXNpbmstPnByaXYtPnN0ZXBfdW5sb2NrID0gRkFMU0U7CisgIGJhc2VzaW5rLT5lb3NfcXVldWVkID0gRkFMU0U7CisgIGJhc2VzaW5rLT5wcml2LT5wcmVyb2xsX3F1ZXVlZCA9IDA7CisgIC8qIGNhbid0IHJlcG9ydCBsYXRlbmN5IGFueW1vcmUgdW50aWwgd2UgcHJlcm9sbCBhZ2FpbiAqLworICBpZiAoYmFzZXNpbmstPnByaXYtPmFzeW5jX2VuYWJsZWQpIHsKKyAgICBHU1RfT0JKRUNUX0xPQ0sgKGJhc2VzaW5rKTsKKyAgICBiYXNlc2luay0+cHJpdi0+aGF2ZV9sYXRlbmN5ID0gRkFMU0U7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJhc2VzaW5rKTsKKyAgfQorICAvKiBhbmQgc2lnbmFsIGFueSB3YWl0ZXJzIG5vdyAqLworICBHU1RfQkFTRV9TSU5LX1BSRVJPTExfU0lHTkFMIChiYXNlc2luayk7Cit9CisKKy8qIHdpdGggU1RSRUFNX0xPQ0ssIGNvbmZpZ3VyZXMgZ2l2ZW4gc2VnbWVudCB3aXRoIHRoZSBldmVudCBpbmZvcm1hdGlvbi4gKi8KK3N0YXRpYyB2b2lkCitnc3RfYmFzZV9zaW5rX2NvbmZpZ3VyZV9zZWdtZW50IChHc3RCYXNlU2luayAqIGJhc2VzaW5rLCBHc3RQYWQgKiBwYWQsCisgICAgR3N0RXZlbnQgKiBldmVudCwgR3N0U2VnbWVudCAqIHNlZ21lbnQpCit7CisgIC8qIFRoZSBzZWdtZW50IGlzIHByb3RlY3RlZCB3aXRoIGJvdGggdGhlIFNUUkVBTV9MT0NLIGFuZCB0aGUgT0JKRUNUX0xPQ0suCisgICAqIFdlIHByb3RlY3Qgd2l0aCB0aGUgT0JKRUNUX0xPQ0sgc28gdGhhdCB3ZSBjYW4gdXNlIHRoZSB2YWx1ZXMgdG8KKyAgICogc2FmZWx5IGFuc3dlciBhIFBPU0lUSU9OIHF1ZXJ5LiAqLworICBHU1RfT0JKRUNUX0xPQ0sgKGJhc2VzaW5rKTsKKyAgLyogdGhlIG5ld3NlZ21lbnQgZXZlbnQgaXMgbmVlZGVkIHRvIGJyaW5nIHRoZSBidWZmZXIgdGltZXN0YW1wcyB0byB0aGUKKyAgICogc3RyZWFtIHRpbWUgYW5kIHRvIGRyb3Agc2FtcGxlcyBvdXRzaWRlIG9mIHRoZSBwbGF5YmFjayBzZWdtZW50LiAqLworICBnc3RfZXZlbnRfY29weV9zZWdtZW50IChldmVudCwgc2VnbWVudCk7CisgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiY29uZmlndXJlZCBTRUdNRU5UICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwKKyAgICAgIHNlZ21lbnQpOworICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNpbmspOworfQorCisvKiB3aXRoIFBSRVJPTExfTE9DSywgU1RSRUFNX0xPQ0sgKi8KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2Jhc2Vfc2lua19jb21taXRfc3RhdGUgKEdzdEJhc2VTaW5rICogYmFzZXNpbmspCit7CisgIC8qIGNvbW1pdCBzdGF0ZSBhbmQgcHJvY2VlZCB0byBuZXh0IHBlbmRpbmcgc3RhdGUgKi8KKyAgR3N0U3RhdGUgY3VycmVudCwgbmV4dCwgcGVuZGluZywgcG9zdF9wZW5kaW5nOworICBnYm9vbGVhbiBwb3N0X3BhdXNlZCA9IEZBTFNFOworICBnYm9vbGVhbiBwb3N0X2FzeW5jX2RvbmUgPSBGQUxTRTsKKyAgZ2Jvb2xlYW4gcG9zdF9wbGF5aW5nID0gRkFMU0U7CisgIGdib29sZWFuIHJlc2V0X3RpbWU7CisKKyAgLyogd2UgYXJlIGNlcnRhaW5seSBub3QgcGxheWluZyBhc3luYyBhbnltb3JlIG5vdyAqLworICBiYXNlc2luay0+cGxheWluZ19hc3luYyA9IEZBTFNFOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoYmFzZXNpbmspOworICBjdXJyZW50ID0gR1NUX1NUQVRFIChiYXNlc2luayk7CisgIG5leHQgPSBHU1RfU1RBVEVfTkVYVCAoYmFzZXNpbmspOworICBwZW5kaW5nID0gR1NUX1NUQVRFX1BFTkRJTkcgKGJhc2VzaW5rKTsKKyAgcG9zdF9wZW5kaW5nID0gcGVuZGluZzsKKyAgcmVzZXRfdGltZSA9IGJhc2VzaW5rLT5wcml2LT5yZXNldF90aW1lOworICBiYXNlc2luay0+cHJpdi0+cmVzZXRfdGltZSA9IEZBTFNFOworCisgIHN3aXRjaCAocGVuZGluZykgeworICAgIGNhc2UgR1NUX1NUQVRFX1BMQVlJTkc6CisgICAgeworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJjb21taXRpbmcgc3RhdGUgdG8gUExBWUlORyIpOworCisgICAgICBiYXNlc2luay0+bmVlZF9wcmVyb2xsID0gRkFMU0U7CisgICAgICBwb3N0X2FzeW5jX2RvbmUgPSBUUlVFOworICAgICAgYmFzZXNpbmstPnByaXYtPmNvbW1pdGVkID0gVFJVRTsKKyAgICAgIHBvc3RfcGxheWluZyA9IFRSVUU7CisgICAgICAvKiBwb3N0IFBBVVNFRCB0b28gd2hlbiB3ZSB3ZXJlIFJFQURZICovCisgICAgICBpZiAoY3VycmVudCA9PSBHU1RfU1RBVEVfUkVBRFkpIHsKKyAgICAgICAgcG9zdF9wYXVzZWQgPSBUUlVFOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX1NUQVRFX1BBVVNFRDoKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiY29tbWl0aW5nIHN0YXRlIHRvIFBBVVNFRCIpOworICAgICAgcG9zdF9wYXVzZWQgPSBUUlVFOworICAgICAgcG9zdF9hc3luY19kb25lID0gVFJVRTsKKyAgICAgIGJhc2VzaW5rLT5wcml2LT5jb21taXRlZCA9IFRSVUU7CisgICAgICBwb3N0X3BlbmRpbmcgPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HOworICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfU1RBVEVfUkVBRFk6CisgICAgY2FzZSBHU1RfU1RBVEVfTlVMTDoKKyAgICAgIGdvdG8gc3RvcHBpbmc7CisgICAgY2FzZSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HOgorICAgICAgZ290byBub3RoaW5nX3BlbmRpbmc7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgLyogd2UgY2FuIHJlcG9ydCBsYXRlbmN5IHF1ZXJpZXMgbm93ICovCisgIGJhc2VzaW5rLT5wcml2LT5oYXZlX2xhdGVuY3kgPSBUUlVFOworCisgIEdTVF9TVEFURSAoYmFzZXNpbmspID0gcGVuZGluZzsKKyAgR1NUX1NUQVRFX05FWFQgKGJhc2VzaW5rKSA9IEdTVF9TVEFURV9WT0lEX1BFTkRJTkc7CisgIEdTVF9TVEFURV9QRU5ESU5HIChiYXNlc2luaykgPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HOworICBHU1RfU1RBVEVfUkVUVVJOIChiYXNlc2luaykgPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChiYXNlc2luayk7CisKKyAgaWYgKHBvc3RfcGF1c2VkKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJwb3N0aW5nIFBBVVNFRCBzdGF0ZSBjaGFuZ2UgbWVzc2FnZSIpOworICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoYmFzZXNpbmspLAorICAgICAgICBnc3RfbWVzc2FnZV9uZXdfc3RhdGVfY2hhbmdlZCAoR1NUX09CSkVDVF9DQVNUIChiYXNlc2luayksCisgICAgICAgICAgICBjdXJyZW50LCBuZXh0LCBwb3N0X3BlbmRpbmcpKTsKKyAgfQorICBpZiAocG9zdF9hc3luY19kb25lKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJwb3N0aW5nIGFzeW5jLWRvbmUgbWVzc2FnZSIpOworICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoYmFzZXNpbmspLAorICAgICAgICBnc3RfbWVzc2FnZV9uZXdfYXN5bmNfZG9uZSAoR1NUX09CSkVDVF9DQVNUIChiYXNlc2luayksIHJlc2V0X3RpbWUpKTsKKyAgfQorICBpZiAocG9zdF9wbGF5aW5nKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJwb3N0aW5nIFBMQVlJTkcgc3RhdGUgY2hhbmdlIG1lc3NhZ2UiKTsKKyAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKGJhc2VzaW5rKSwKKyAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3N0YXRlX2NoYW5nZWQgKEdTVF9PQkpFQ1RfQ0FTVCAoYmFzZXNpbmspLAorICAgICAgICAgICAgbmV4dCwgcGVuZGluZywgR1NUX1NUQVRFX1ZPSURfUEVORElORykpOworICB9CisKKyAgR1NUX1NUQVRFX0JST0FEQ0FTVCAoYmFzZXNpbmspOworCisgIHJldHVybiBUUlVFOworCitub3RoaW5nX3BlbmRpbmc6CisgIHsKKyAgICAvKiBEZXBlbmRpbmcgb24gdGhlIHN0YXRlLCBzZXQgb3VyIHZhcnMuIFdlIGdldCBpbiB0aGlzIHNpdHVhdGlvbiB3aGVuIHRoZQorICAgICAqIHN0YXRlIGNoYW5nZSBmdW5jdGlvbiBnb3QgYSBjaGFuZ2UgdG8gdXBkYXRlIHRoZSBzdGF0ZSB2YXJzIGJlZm9yZSB0aGUKKyAgICAgKiBzdHJlYW1pbmcgdGhyZWFkIGRpZC4gVGhpcyBpcyBmaW5lIGJ1dCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlCisgICAgICogdXBkYXRlIHRoZSBuZWVkX3ByZXJvbGwgdmFyIHNpbmNlIGl0IHdhcyBUUlVFIHdoZW4gd2UgZ290IGhlcmUgYW5kIG1pZ2h0CisgICAgICogYmVjb21lIEZBTFNFIGlmIHdlIGdvdCB0byBQTEFZSU5HLiAqLworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAibm90aGluZyB0byBjb21taXQsIG5vdyBpbiAlcyIsCisgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChjdXJyZW50KSk7CisgICAgc3dpdGNoIChjdXJyZW50KSB7CisgICAgICBjYXNlIEdTVF9TVEFURV9QTEFZSU5HOgorICAgICAgICBiYXNlc2luay0+bmVlZF9wcmVyb2xsID0gRkFMU0U7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHU1RfU1RBVEVfUEFVU0VEOgorICAgICAgICBiYXNlc2luay0+bmVlZF9wcmVyb2xsID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBiYXNlc2luay0+bmVlZF9wcmVyb2xsID0gRkFMU0U7CisgICAgICAgIGJhc2VzaW5rLT5mbHVzaGluZyA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvKiB3ZSBjYW4gcmVwb3J0IGxhdGVuY3kgcXVlcmllcyBub3cgKi8KKyAgICBiYXNlc2luay0+cHJpdi0+aGF2ZV9sYXRlbmN5ID0gVFJVRTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNpbmspOworICAgIHJldHVybiBUUlVFOworICB9CitzdG9wcGluZzoKKyAgeworICAgIC8qIGFwcCBpcyBnb2luZyB0byBSRUFEWSAqLworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAic3RvcHBpbmciKTsKKyAgICBiYXNlc2luay0+bmVlZF9wcmVyb2xsID0gRkFMU0U7CisgICAgYmFzZXNpbmstPmZsdXNoaW5nID0gVFJVRTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNpbmspOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorc3RhcnRfc3RlcHBpbmcgKEdzdEJhc2VTaW5rICogc2luaywgR3N0U2VnbWVudCAqIHNlZ21lbnQsCisgICAgR3N0U3RlcEluZm8gKiBwZW5kaW5nLCBHc3RTdGVwSW5mbyAqIGN1cnJlbnQpCit7CisgIGdpbnQ2NCBlbmQ7CisgIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInVwZGF0ZSBwZW5kaW5nIHN0ZXAiKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHNpbmspOworICBtZW1jcHkgKGN1cnJlbnQsIHBlbmRpbmcsIHNpemVvZiAoR3N0U3RlcEluZm8pKTsKKyAgcGVuZGluZy0+dmFsaWQgPSBGQUxTRTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmspOworCisgIC8qIHBvc3QgbWVzc2FnZSBmaXJzdCAqLworICBtZXNzYWdlID0KKyAgICAgIGdzdF9tZXNzYWdlX25ld19zdGVwX3N0YXJ0IChHU1RfT0JKRUNUIChzaW5rKSwgVFJVRSwgY3VycmVudC0+Zm9ybWF0LAorICAgICAgY3VycmVudC0+YW1vdW50LCBjdXJyZW50LT5yYXRlLCBjdXJyZW50LT5mbHVzaCwgY3VycmVudC0+aW50ZXJtZWRpYXRlKTsKKyAgZ3N0X21lc3NhZ2Vfc2V0X3NlcW51bSAobWVzc2FnZSwgY3VycmVudC0+c2VxbnVtKTsKKyAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVCAoc2luayksIG1lc3NhZ2UpOworCisgIC8qIGdldCB0aGUgcnVubmluZyB0aW1lIG9mIHdoZXJlIHdlIHBhdXNlZCBhbmQgcmVtZW1iZXIgaXQgKi8KKyAgY3VycmVudC0+c3RhcnQgPSBnc3RfZWxlbWVudF9nZXRfc3RhcnRfdGltZSAoR1NUX0VMRU1FTlRfQ0FTVCAoc2luaykpOworICBnc3Rfc2VnbWVudF9zZXRfcnVubmluZ190aW1lIChzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIGN1cnJlbnQtPnN0YXJ0KTsKKworICAvKiBzZXQgdGhlIG5ldyByYXRlIGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSBzZWdtZW50ICovCisgIGN1cnJlbnQtPnN0YXJ0X3JhdGUgPSBzZWdtZW50LT5yYXRlOworICBzZWdtZW50LT5yYXRlICo9IGN1cnJlbnQtPnJhdGU7CisKKyAgLyogc2F2ZSB2YWx1ZXMgKi8KKyAgaWYgKHNlZ21lbnQtPnJhdGUgPiAwLjApCisgICAgY3VycmVudC0+c3RhcnRfc3RvcCA9IHNlZ21lbnQtPnN0b3A7CisgIGVsc2UKKyAgICBjdXJyZW50LT5zdGFydF9zdGFydCA9IHNlZ21lbnQtPnN0YXJ0OworCisgIGlmIChjdXJyZW50LT5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKSB7CisgICAgZW5kID0gY3VycmVudC0+c3RhcnQgKyBjdXJyZW50LT5hbW91bnQ7CisgICAgaWYgKCFjdXJyZW50LT5mbHVzaCkgeworICAgICAgLyogdXBkYXRlIHRoZSBzZWdtZW50IGNsaXBwaW5nIHJlZ2lvbnMgZm9yIG5vbi1mbHVzaGluZyBzZWVrcyAqLworICAgICAgaWYgKHNlZ21lbnQtPnJhdGUgPiAwLjApIHsKKyAgICAgICAgc2VnbWVudC0+c3RvcCA9IGdzdF9zZWdtZW50X3RvX3Bvc2l0aW9uIChzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIGVuZCk7CisgICAgICAgIHNlZ21lbnQtPnBvc2l0aW9uID0gc2VnbWVudC0+c3RvcDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGdpbnQ2NCBwb3NpdGlvbjsKKworICAgICAgICBwb3NpdGlvbiA9IGdzdF9zZWdtZW50X3RvX3Bvc2l0aW9uIChzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIGVuZCk7CisgICAgICAgIHNlZ21lbnQtPnRpbWUgPSBwb3NpdGlvbjsKKyAgICAgICAgc2VnbWVudC0+c3RhcnQgPSBwb3NpdGlvbjsKKyAgICAgICAgc2VnbWVudC0+cG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAic2VnbWVudCBub3cgJSIgR1NUX1NFR01FTlRfRk9STUFULCBzZWdtZW50KTsKKyAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInN0ZXAgc3RhcnRlZCBhdCBydW5uaW5nX3RpbWUgJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgR1NUX1RJTUVfQVJHUyAoY3VycmVudC0+c3RhcnQpKTsKKworICBpZiAoY3VycmVudC0+YW1vdW50ID09IC0xKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInN0ZXAgYW1vdW50ID09IC0xLCBzdG9wIHN0ZXBwaW5nIik7CisgICAgY3VycmVudC0+dmFsaWQgPSBGQUxTRTsKKyAgfSBlbHNlIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAic3RlcCBhbW91bnQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgZm9ybWF0OiAlcywgIgorICAgICAgICAicmF0ZTogJWYiLCBjdXJyZW50LT5hbW91bnQsIGdzdF9mb3JtYXRfZ2V0X25hbWUgKGN1cnJlbnQtPmZvcm1hdCksCisgICAgICAgIGN1cnJlbnQtPnJhdGUpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitzdG9wX3N0ZXBwaW5nIChHc3RCYXNlU2luayAqIHNpbmssIEdzdFNlZ21lbnQgKiBzZWdtZW50LAorICAgIEdzdFN0ZXBJbmZvICogY3VycmVudCwgZ2ludDY0IHJzdGFydCwgZ2ludDY0IHJzdG9wLCBnYm9vbGVhbiBlb3MpCit7CisgIGdpbnQ2NCBzdG9wLCBwb3NpdGlvbjsKKyAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKKworICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAic3RlcCBjb21wbGV0ZSIpOworCisgIGlmIChzZWdtZW50LT5yYXRlID4gMC4wKQorICAgIHN0b3AgPSByc3RhcnQ7CisgIGVsc2UKKyAgICBzdG9wID0gcnN0b3A7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywKKyAgICAgICJzdGVwIHN0b3AgYXQgcnVubmluZ190aW1lICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAoc3RvcCkpOworCisgIGlmIChzdG9wID09IC0xKQorICAgIGN1cnJlbnQtPmR1cmF0aW9uID0gY3VycmVudC0+cG9zaXRpb247CisgIGVsc2UKKyAgICBjdXJyZW50LT5kdXJhdGlvbiA9IHN0b3AgLSBjdXJyZW50LT5zdGFydDsKKworICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAic3RlcCBlbGFwc2VkIHJ1bm5pbmdfdGltZSAlIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICBHU1RfVElNRV9BUkdTIChjdXJyZW50LT5kdXJhdGlvbikpOworCisgIHBvc2l0aW9uID0gY3VycmVudC0+c3RhcnQgKyBjdXJyZW50LT5kdXJhdGlvbjsKKworICAvKiBub3cgbW92ZSB0aGUgc2VnbWVudCB0byB0aGUgbmV3IHJ1bm5pbmcgdGltZSAqLworICBnc3Rfc2VnbWVudF9zZXRfcnVubmluZ190aW1lIChzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIHBvc2l0aW9uKTsKKworICBpZiAoY3VycmVudC0+Zmx1c2gpIHsKKyAgICAvKiBhbmQgcmVtb3ZlIHRoZSB0aW1lIHdlIGZsdXNoZWQsIHN0YXJ0IHRpbWUgZGlkIG5vdCBjaGFuZ2UgKi8KKyAgICBzZWdtZW50LT5iYXNlID0gY3VycmVudC0+c3RhcnQ7CisgIH0gZWxzZSB7CisgICAgLyogc3RhcnQgdGltZSBpcyBub3cgdGhlIHN0ZXBwZWQgcG9zaXRpb24gKi8KKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhcnRfdGltZSAoR1NUX0VMRU1FTlRfQ0FTVCAoc2luayksIHBvc2l0aW9uKTsKKyAgfQorCisgIC8qIHJlc3RvcmUgdGhlIHByZXZpb3VzIHJhdGUgKi8KKyAgc2VnbWVudC0+cmF0ZSA9IGN1cnJlbnQtPnN0YXJ0X3JhdGU7CisKKyAgaWYgKHNlZ21lbnQtPnJhdGUgPiAwLjApCisgICAgc2VnbWVudC0+c3RvcCA9IGN1cnJlbnQtPnN0YXJ0X3N0b3A7CisgIGVsc2UKKyAgICBzZWdtZW50LT5zdGFydCA9IGN1cnJlbnQtPnN0YXJ0X3N0YXJ0OworCisgIC8qIHRoZSBjbGlwIHNlZ21lbnQgaXMgdXNlZCBmb3IgcG9zaXRpb24gcmVwb3J0IGluIHBhdXNlZC4uLiAqLworICBnc3Rfc2VnbWVudF9jb3B5X2ludG8gKHNlZ21lbnQsICZzaW5rLT5jbGlwX3NlZ21lbnQpOworCisgIC8qIHBvc3QgdGhlIHN0ZXAgZG9uZSB3aGVuIHdlIGtub3cgdGhlIHN0ZXBwZWQgZHVyYXRpb24gaW4gVElNRSAqLworICBtZXNzYWdlID0KKyAgICAgIGdzdF9tZXNzYWdlX25ld19zdGVwX2RvbmUgKEdTVF9PQkpFQ1RfQ0FTVCAoc2luayksIGN1cnJlbnQtPmZvcm1hdCwKKyAgICAgIGN1cnJlbnQtPmFtb3VudCwgY3VycmVudC0+cmF0ZSwgY3VycmVudC0+Zmx1c2gsIGN1cnJlbnQtPmludGVybWVkaWF0ZSwKKyAgICAgIGN1cnJlbnQtPmR1cmF0aW9uLCBlb3MpOworICBnc3RfbWVzc2FnZV9zZXRfc2VxbnVtIChtZXNzYWdlLCBjdXJyZW50LT5zZXFudW0pOworICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKHNpbmspLCBtZXNzYWdlKTsKKworICBpZiAoIWN1cnJlbnQtPmludGVybWVkaWF0ZSkKKyAgICBzaW5rLT5uZWVkX3ByZXJvbGwgPSBjdXJyZW50LT5uZWVkX3ByZXJvbGw7CisKKyAgLyogYW5kIHRoZSBjdXJyZW50IHN0ZXAgaW5mbyBmaW5pc2hlZCBhbmQgYmVjb21lcyBpbnZhbGlkICovCisgIGN1cnJlbnQtPnZhbGlkID0gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgoraGFuZGxlX3N0ZXBwaW5nIChHc3RCYXNlU2luayAqIHNpbmssIEdzdFNlZ21lbnQgKiBzZWdtZW50LAorICAgIEdzdFN0ZXBJbmZvICogY3VycmVudCwgZ3VpbnQ2NCAqIGNzdGFydCwgZ3VpbnQ2NCAqIGNzdG9wLCBndWludDY0ICogcnN0YXJ0LAorICAgIGd1aW50NjQgKiByc3RvcCkKK3sKKyAgZ2Jvb2xlYW4gc3RlcF9lbmQgPSBGQUxTRTsKKworICAvKiBzZWUgaWYgd2UgbmVlZCB0byBza2lwIHRoaXMgYnVmZmVyIGJlY2F1c2Ugb2Ygc3RlcHBpbmcgKi8KKyAgc3dpdGNoIChjdXJyZW50LT5mb3JtYXQpIHsKKyAgICBjYXNlIEdTVF9GT1JNQVRfVElNRToKKyAgICB7CisgICAgICBndWludDY0IGVuZDsKKyAgICAgIGd1aW50NjQgZmlyc3QsIGxhc3Q7CisgICAgICBnZG91YmxlIGFic19yYXRlOworCisgICAgICBpZiAoc2VnbWVudC0+cmF0ZSA+IDAuMCkgeworICAgICAgICBpZiAoc2VnbWVudC0+c3RvcCA9PSAqY3N0b3ApCisgICAgICAgICAgKnJzdG9wID0gKnJzdGFydCArIGN1cnJlbnQtPmFtb3VudDsKKworICAgICAgICBmaXJzdCA9ICpyc3RhcnQ7CisgICAgICAgIGxhc3QgPSAqcnN0b3A7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoc2VnbWVudC0+c3RhcnQgPT0gKmNzdGFydCkKKyAgICAgICAgICAqcnN0YXJ0ID0gKnJzdG9wICsgY3VycmVudC0+YW1vdW50OworCisgICAgICAgIGZpcnN0ID0gKnJzdG9wOworICAgICAgICBsYXN0ID0gKnJzdGFydDsKKyAgICAgIH0KKworICAgICAgZW5kID0gY3VycmVudC0+c3RhcnQgKyBjdXJyZW50LT5hbW91bnQ7CisgICAgICBjdXJyZW50LT5wb3NpdGlvbiA9IGZpcnN0IC0gY3VycmVudC0+c3RhcnQ7CisKKyAgICAgIGFic19yYXRlID0gQUJTIChzZWdtZW50LT5yYXRlKTsKKyAgICAgIGlmIChHX1VOTElLRUxZIChhYnNfcmF0ZSAhPSAxLjApKQorICAgICAgICBjdXJyZW50LT5wb3NpdGlvbiAvPSBhYnNfcmF0ZTsKKworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywKKyAgICAgICAgICAiYnVmZmVyOiAlIiBHU1RfVElNRV9GT1JNQVQgIi0lIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICAgICAgR1NUX1RJTUVfQVJHUyAoZmlyc3QpLCBHU1RfVElNRV9BUkdTIChsYXN0KSk7CisgICAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLAorICAgICAgICAgICJnb3QgdGltZSBzdGVwICUiIEdTVF9USU1FX0ZPUk1BVCAiLSUiIEdTVF9USU1FX0ZPUk1BVCAiLyUiCisgICAgICAgICAgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChjdXJyZW50LT5wb3NpdGlvbiksCisgICAgICAgICAgR1NUX1RJTUVfQVJHUyAobGFzdCAtIGN1cnJlbnQtPnN0YXJ0KSwKKyAgICAgICAgICBHU1RfVElNRV9BUkdTIChjdXJyZW50LT5hbW91bnQpKTsKKworICAgICAgaWYgKChjdXJyZW50LT5mbHVzaCAmJiBjdXJyZW50LT5wb3NpdGlvbiA+PSBjdXJyZW50LT5hbW91bnQpCisgICAgICAgICAgfHwgbGFzdCA+PSBlbmQpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInN0ZXAgZW5kZWQsIHdlIG5lZWQgY2xpcHBpbmciKTsKKyAgICAgICAgc3RlcF9lbmQgPSBUUlVFOworICAgICAgICBpZiAoc2VnbWVudC0+cmF0ZSA+IDAuMCkgeworICAgICAgICAgICpyc3RhcnQgPSBlbmQ7CisgICAgICAgICAgKmNzdGFydCA9IGdzdF9zZWdtZW50X3RvX3Bvc2l0aW9uIChzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIGVuZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgKnJzdG9wID0gZW5kOworICAgICAgICAgICpjc3RvcCA9IGdzdF9zZWdtZW50X3RvX3Bvc2l0aW9uIChzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIGVuZCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssCisgICAgICAgICAgImNzdGFydCAlIiBHU1RfVElNRV9GT1JNQVQgIiwgcnN0YXJ0ICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgICAgICBHU1RfVElNRV9BUkdTICgqY3N0YXJ0KSwgR1NUX1RJTUVfQVJHUyAoKnJzdGFydCkpOworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywKKyAgICAgICAgICAiY3N0b3AgJSIgR1NUX1RJTUVfRk9STUFUICIsIHJzdG9wICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgICAgICBHU1RfVElNRV9BUkdTICgqY3N0b3ApLCBHU1RfVElNRV9BUkdTICgqcnN0b3ApKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9GT1JNQVRfQlVGRkVSUzoKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssCisgICAgICAgICAgImdvdCBkZWZhdWx0IHN0ZXAgJSIgR19HVUlOVDY0X0ZPUk1BVCAiLyUiIEdfR1VJTlQ2NF9GT1JNQVQsCisgICAgICAgICAgY3VycmVudC0+cG9zaXRpb24sIGN1cnJlbnQtPmFtb3VudCk7CisKKyAgICAgIGlmIChjdXJyZW50LT5wb3NpdGlvbiA8IGN1cnJlbnQtPmFtb3VudCkgeworICAgICAgICBjdXJyZW50LT5wb3NpdGlvbisrOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgc3RlcF9lbmQgPSBUUlVFOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfRk9STUFUX0RFRkFVTFQ6CisgICAgZGVmYXVsdDoKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssCisgICAgICAgICAgImdvdCB1bmtub3duIHN0ZXAgJSIgR19HVUlOVDY0X0ZPUk1BVCAiLyUiIEdfR1VJTlQ2NF9GT1JNQVQsCisgICAgICAgICAgY3VycmVudC0+cG9zaXRpb24sIGN1cnJlbnQtPmFtb3VudCk7CisgICAgICBicmVhazsKKyAgfQorICByZXR1cm4gc3RlcF9lbmQ7Cit9CisKKy8qIHdpdGggU1RSRUFNX0xPQ0ssIFBSRVJPTExfTE9DSworICoKKyAqIFJldHVybnMgVFJVRSBpZiB0aGUgb2JqZWN0IG5lZWRzIHN5bmNocm9uaXNhdGlvbiBhbmQgdGFrZXMgdGhlcmVmb3JlCisgKiBwYXJ0IGluIHByZXJvbGxpbmcuCisgKgorICogcnNzdGFydC9yc3N0b3AgY29udGFpbiB0aGUgc3RhcnQvc3RvcCBpbiBzdHJlYW0gdGltZS4KKyAqIHJyc3RhcnQvcnJzdG9wIGNvbnRhaW4gdGhlIHN0YXJ0L3N0b3AgaW4gcnVubmluZyB0aW1lLgorICovCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iYXNlX3NpbmtfZ2V0X3N5bmNfdGltZXMgKEdzdEJhc2VTaW5rICogYmFzZXNpbmssIEdzdE1pbmlPYmplY3QgKiBvYmosCisgICAgR3N0Q2xvY2tUaW1lICogcnNzdGFydCwgR3N0Q2xvY2tUaW1lICogcnNzdG9wLAorICAgIEdzdENsb2NrVGltZSAqIHJyc3RhcnQsIEdzdENsb2NrVGltZSAqIHJyc3RvcCwgZ2Jvb2xlYW4gKiBkb19zeW5jLAorICAgIGdib29sZWFuICogc3RlcHBlZCwgR3N0U2VnbWVudCAqIHNlZ21lbnQsIEdzdFN0ZXBJbmZvICogc3RlcCwKKyAgICBnYm9vbGVhbiAqIHN0ZXBfZW5kLCBndWludDggb2JqX3R5cGUpCit7CisgIEdzdEJhc2VTaW5rQ2xhc3MgKmJjbGFzczsKKyAgR3N0QnVmZmVyICpidWZmZXI7CisgIEdzdENsb2NrVGltZSBzdGFydCwgc3RvcDsgICAgIC8qIHJhdyBzdGFydC9zdG9wIHRpbWVzdGFtcHMgKi8KKyAgZ3VpbnQ2NCBjc3RhcnQsIGNzdG9wOyAgICAgICAgLyogY2xpcHBlZCByYXcgdGltZXN0YW1wcyAqLworICBndWludDY0IHJzdGFydCwgcnN0b3A7ICAgICAgICAvKiBjbGlwcGVkIHRpbWVzdGFtcHMgY29udmVydGVkIHRvIHJ1bm5pbmcgdGltZSAqLworICBHc3RDbG9ja1RpbWUgc3N0YXJ0LCBzc3RvcDsgICAvKiBjbGlwcGVkIHRpbWVzdGFtcHMgY29udmVydGVkIHRvIHN0cmVhbSB0aW1lICovCisgIEdzdEZvcm1hdCBmb3JtYXQ7CisgIEdzdEJhc2VTaW5rUHJpdmF0ZSAqcHJpdjsKKyAgZ2Jvb2xlYW4gZW9zOworCisgIHByaXYgPSBiYXNlc2luay0+cHJpdjsKKworICAvKiBzdGFydCB3aXRoIG5vdGhpbmcgKi8KKyAgc3RhcnQgPSBzdG9wID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKworICBpZiAoR19VTkxJS0VMWSAoT0JKX0lTX0VWRU5UIChvYmpfdHlwZSkpKSB7CisgICAgR3N0RXZlbnQgKmV2ZW50ID0gR1NUX0VWRU5UX0NBU1QgKG9iaik7CisKKyAgICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKKyAgICAgICAgLyogRU9TIGV2ZW50IG5lZWRzIHN5bmNpbmcgKi8KKyAgICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKKyAgICAgIHsKKyAgICAgICAgaWYgKGJhc2VzaW5rLT5zZWdtZW50LnJhdGUgPj0gMC4wKSB7CisgICAgICAgICAgc3N0YXJ0ID0gc3N0b3AgPSBwcml2LT5jdXJyZW50X3NzdG9wOworICAgICAgICAgIGlmICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHNzdGFydCkpIHsKKyAgICAgICAgICAgIC8qIHdlIGhhdmUgbm90IHNlZW4gYSBidWZmZXIgeWV0LCB1c2UgdGhlIHNlZ21lbnQgdmFsdWVzICovCisgICAgICAgICAgICBzc3RhcnQgPSBzc3RvcCA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmYmFzZXNpbmstPnNlZ21lbnQsCisgICAgICAgICAgICAgICAgYmFzZXNpbmstPnNlZ21lbnQuZm9ybWF0LCBiYXNlc2luay0+c2VnbWVudC5zdG9wKTsKKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgc3N0YXJ0ID0gc3N0b3AgPSBwcml2LT5jdXJyZW50X3NzdGFydDsKKyAgICAgICAgICBpZiAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzc3RhcnQpKSB7CisgICAgICAgICAgICAvKiB3ZSBoYXZlIG5vdCBzZWVuIGEgYnVmZmVyIHlldCwgdXNlIHRoZSBzZWdtZW50IHZhbHVlcyAqLworICAgICAgICAgICAgc3N0YXJ0ID0gc3N0b3AgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJmJhc2VzaW5rLT5zZWdtZW50LAorICAgICAgICAgICAgICAgIGJhc2VzaW5rLT5zZWdtZW50LmZvcm1hdCwgYmFzZXNpbmstPnNlZ21lbnQuc3RhcnQpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJzdGFydCA9IHJzdG9wID0gcHJpdi0+ZW9zX3J0aW1lOworICAgICAgICAqZG9fc3luYyA9IHJzdGFydCAhPSAtMTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJzeW5jIHRpbWVzIGZvciBFT1MgJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAocnN0YXJ0KSk7CisgICAgICAgIC8qIGlmIHdlIGFyZSBzdGVwcGluZywgd2UgZW5kIG5vdyAqLworICAgICAgICAqc3RlcF9lbmQgPSBzdGVwLT52YWxpZDsKKyAgICAgICAgZW9zID0gVFJVRTsKKyAgICAgICAgZ290byBlb3NfZG9uZTsKKyAgICAgIH0KKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIC8qIG90aGVyIGV2ZW50cyBkbyBub3QgbmVlZCBzeW5jaW5nICovCisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgIH0KKworICBlb3MgPSBGQUxTRTsKKworYWdhaW46CisgIC8qIGVsc2UgZG8gYnVmZmVyIHN5bmMgY29kZSAqLworICBidWZmZXIgPSBHU1RfQlVGRkVSX0NBU1QgKG9iaik7CisKKyAgYmNsYXNzID0gR1NUX0JBU0VfU0lOS19HRVRfQ0xBU1MgKGJhc2VzaW5rKTsKKworICAvKiBqdXN0IGdldCB0aGUgdGltZXMgdG8gc2VlIGlmIHdlIG5lZWQgc3luY2luZywgaWYgdGhlIHN0YXJ0IHJldHVybnMgLTEgd2UKKyAgICogZG9uJ3Qgc3luYy4gKi8KKyAgaWYgKGJjbGFzcy0+Z2V0X3RpbWVzKQorICAgIGJjbGFzcy0+Z2V0X3RpbWVzIChiYXNlc2luaywgYnVmZmVyLCAmc3RhcnQsICZzdG9wKTsKKworICBpZiAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzdGFydCkpIHsKKyAgICAvKiB3ZSBkb24ndCBuZWVkIHRvIHN5bmMgYnV0IHdlIHN0aWxsIHdhbnQgdG8gZ2V0IHRoZSB0aW1lc3RhbXBzIGZvcgorICAgICAqIHRyYWNraW5nIHRoZSBwb3NpdGlvbiAqLworICAgIGdzdF9iYXNlX3NpbmtfZ2V0X3RpbWVzIChiYXNlc2luaywgYnVmZmVyLCAmc3RhcnQsICZzdG9wKTsKKyAgICAqZG9fc3luYyA9IEZBTFNFOworICB9IGVsc2UgeworICAgICpkb19zeW5jID0gVFJVRTsKKyAgfQorCisgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiZ290IHRpbWVzIHN0YXJ0OiAlIiBHU1RfVElNRV9GT1JNQVQKKyAgICAgICIsIHN0b3A6ICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBkb19zeW5jICVkIiwgR1NUX1RJTUVfQVJHUyAoc3RhcnQpLAorICAgICAgR1NUX1RJTUVfQVJHUyAoc3RvcCksICpkb19zeW5jKTsKKworICAvKiBjb2xsZWN0IHNlZ21lbnQgYW5kIGZvcm1hdCBmb3IgY29kZSBjbGFyaXR5ICovCisgIGZvcm1hdCA9IHNlZ21lbnQtPmZvcm1hdDsKKworICAvKiBjbGlwICovCisgIGlmIChHX1VOTElLRUxZICghZ3N0X3NlZ21lbnRfY2xpcCAoc2VnbWVudCwgZm9ybWF0LAorICAgICAgICAgICAgICBzdGFydCwgc3RvcCwgJmNzdGFydCwgJmNzdG9wKSkpIHsKKyAgICBpZiAoc3RlcC0+dmFsaWQpIHsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAic3RlcCBvdXQgb2Ygc2VnbWVudCIpOworICAgICAgLyogd2hlbiB3ZSBhcmUgc3RlcHBpbmcsIHByZXRlbmQgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgc2VnbWVudCAqLworICAgICAgaWYgKHNlZ21lbnQtPnJhdGUgPiAwLjApIHsKKyAgICAgICAgY3N0YXJ0ID0gc2VnbWVudC0+c3RvcDsKKyAgICAgICAgY3N0b3AgPSBzZWdtZW50LT5zdG9wOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgY3N0YXJ0ID0gc2VnbWVudC0+c3RhcnQ7CisgICAgICAgIGNzdG9wID0gc2VnbWVudC0+c3RhcnQ7CisgICAgICB9CisgICAgICBnb3RvIGRvX3RpbWVzOworICAgIH0KKyAgICBnb3RvIG91dF9vZl9zZWdtZW50OworICB9CisKKyAgaWYgKEdfVU5MSUtFTFkgKHN0YXJ0ICE9IGNzdGFydCB8fCBzdG9wICE9IGNzdG9wKSkgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiY2xpcHBlZCB0bzogc3RhcnQgJSIgR1NUX1RJTUVfRk9STUFUCisgICAgICAgICIsIHN0b3A6ICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAoY3N0YXJ0KSwKKyAgICAgICAgR1NUX1RJTUVfQVJHUyAoY3N0b3ApKTsKKyAgfQorCisgIC8qIHNldCBsYXN0IHN0b3AgcG9zaXRpb24gKi8KKyAgaWYgKEdfTElLRUxZIChzdG9wICE9IEdTVF9DTE9DS19USU1FX05PTkUgJiYgY3N0b3AgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkpCisgICAgc2VnbWVudC0+cG9zaXRpb24gPSBjc3RvcDsKKyAgZWxzZQorICAgIHNlZ21lbnQtPnBvc2l0aW9uID0gY3N0YXJ0OworCitkb190aW1lczoKKyAgcnN0YXJ0ID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lIChzZWdtZW50LCBmb3JtYXQsIGNzdGFydCk7CisgIHJzdG9wID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lIChzZWdtZW50LCBmb3JtYXQsIGNzdG9wKTsKKworICBpZiAoR19VTkxJS0VMWSAoc3RlcC0+dmFsaWQpKSB7CisgICAgaWYgKCEoKnN0ZXBfZW5kID0gaGFuZGxlX3N0ZXBwaW5nIChiYXNlc2luaywgc2VnbWVudCwgc3RlcCwgJmNzdGFydCwgJmNzdG9wLAorICAgICAgICAgICAgICAgICZyc3RhcnQsICZyc3RvcCkpKSB7CisgICAgICAvKiBzdGVwIGlzIHN0aWxsIGJ1c3ksIHdlIGRpc2NhcmQgZGF0YSB3aGVuIHdlIGFyZSBmbHVzaGluZyAqLworICAgICAgKnN0ZXBwZWQgPSBzdGVwLT5mbHVzaDsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAic3RlcHBpbmcgYnVzeSIpOworICAgIH0KKyAgfQorICAvKiB0aGlzIGNhbiBwcm9kdWNlIHdyb25nIHZhbHVlcyBpZiB3ZSBhY2N1bXVsYXRlZCBub24tVElNRSBzZWdtZW50cy4gSWYgdGhpcyBoYXBwZW5zLAorICAgKiB1cHN0cmVhbSBpcyBiZWhhdmluZyB2ZXJ5IGJhZGx5ICovCisgIHNzdGFydCA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lIChzZWdtZW50LCBmb3JtYXQsIGNzdGFydCk7CisgIHNzdG9wID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKHNlZ21lbnQsIGZvcm1hdCwgY3N0b3ApOworCitlb3NfZG9uZToKKyAgLyogZW9zX2RvbmUgbGFiZWwgb25seSBjYWxsZWQgd2hlbiBkb2luZyBFT1MsIHdlIGFsc28gc3RvcCBzdGVwcGluZyB0aGVuICovCisgIGlmICgqc3RlcF9lbmQgJiYgc3RlcC0+Zmx1c2gpIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgImZsdXNoaW5nIHN0ZXAgZW5kZWQiKTsKKyAgICBzdG9wX3N0ZXBwaW5nIChiYXNlc2luaywgc2VnbWVudCwgc3RlcCwgcnN0YXJ0LCByc3RvcCwgZW9zKTsKKyAgICAqc3RlcF9lbmQgPSBGQUxTRTsKKyAgICAvKiByZS1kZXRlcm1pbmUgcnVubmluZyBzdGFydCB0aW1lcyBmb3IgYWRqdXN0ZWQgc2VnbWVudAorICAgICAqICh3aGljaCBoYXMgYSBmbHVzaGVkIGFtb3VudCBvZiBydW5uaW5nL2FjY3VtdWxhdGVkIHRpbWUgcmVtb3ZlZCkgKi8KKyAgICBpZiAoIUdTVF9JU19FVkVOVCAob2JqKSkgeworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJyZWZyZXNoIHN5bmMgdGltZXMiKTsKKyAgICAgIGdvdG8gYWdhaW47CisgICAgfQorICB9CisKKyAgLyogc2F2ZSB0aW1lcyAqLworICAqcnNzdGFydCA9IHNzdGFydDsKKyAgKnJzc3RvcCA9IHNzdG9wOworICAqcnJzdGFydCA9IHJzdGFydDsKKyAgKnJyc3RvcCA9IHJzdG9wOworCisgIC8qIGJ1ZmZlcnMgYW5kIEVPUyBhbHdheXMgbmVlZCBzeW5jaW5nIGFuZCBwcmVyb2xsICovCisgIHJldHVybiBUUlVFOworCisgIC8qIHNwZWNpYWwgY2FzZXMgKi8KK291dF9vZl9zZWdtZW50OgorICB7CisgICAgLyogd2UgdXN1YWxseSBjbGlwIGluIHRoZSBjaGFpbiBmdW5jdGlvbiBhbHJlYWR5IGJ1dCBzdGVwcGluZyBjb3VsZCBjYXVzZQorICAgICAqIHRoZSBzZWdtZW50IHRvIGJlIHVwZGF0ZWQgbGF0ZXIuIHdlIHJldHVybiBGQUxTRSBzbyB0aGF0IHdlIGRvbid0IHRyeQorICAgICAqIHRvIHN5bmMgb24gaXQuICovCisgICAgR1NUX0xPR19PQkpFQ1QgKGJhc2VzaW5rLCAiYnVmZmVyIHNraXBwZWQsIG5vdCBpbiBzZWdtZW50Iik7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKKy8qIHdpdGggU1RSRUFNX0xPQ0ssIFBSRVJPTExfTE9DSywgTE9DSworICogYWRqdXN0IGEgdGltZXN0YW1wIHdpdGggdGhlIGxhdGVuY3kgYW5kIHRpbWVzdGFtcCBvZmZzZXQuIFRoaXMgZnVuY3Rpb24gZG9lcworICogbm90IGFkanVzdCBmb3IgdGhlIHJlbmRlciBkZWxheS4gKi8KK3N0YXRpYyBHc3RDbG9ja1RpbWUKK2dzdF9iYXNlX3NpbmtfYWRqdXN0X3RpbWUgKEdzdEJhc2VTaW5rICogYmFzZXNpbmssIEdzdENsb2NrVGltZSB0aW1lKQoreworICBHc3RDbG9ja1RpbWVEaWZmIHRzX29mZnNldDsKKworICAvKiBkb24ndCBkbyBhbnl0aGluZyBmdW5ueSB3aXRoIGludmFsaWQgdGltZXN0YW1wcyAqLworICBpZiAoR19VTkxJS0VMWSAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lKSkpCisgICAgcmV0dXJuIHRpbWU7CisKKyAgdGltZSArPSBiYXNlc2luay0+cHJpdi0+bGF0ZW5jeTsKKworICAvKiBhcHBseSBvZmZzZXQsIGJlIGNhcmVmdWxsIGZvciB1bmRlcmZsb3dzICovCisgIHRzX29mZnNldCA9IGJhc2VzaW5rLT5wcml2LT50c19vZmZzZXQ7CisgIGlmICh0c19vZmZzZXQgPCAwKSB7CisgICAgdHNfb2Zmc2V0ID0gLXRzX29mZnNldDsKKyAgICBpZiAodHNfb2Zmc2V0IDwgdGltZSkKKyAgICAgIHRpbWUgLT0gdHNfb2Zmc2V0OworICAgIGVsc2UKKyAgICAgIHRpbWUgPSAwOworICB9IGVsc2UKKyAgICB0aW1lICs9IHRzX29mZnNldDsKKworICAvKiBzdWJ0cmFjdCB0aGUgcmVuZGVyIGRlbGF5IGFnYWluLCB3aGljaCB3YXMgaW5jbHVkZWQgaW4gdGhlIGxhdGVuY3kgKi8KKyAgaWYgKHRpbWUgPiBiYXNlc2luay0+cHJpdi0+cmVuZGVyX2RlbGF5KQorICAgIHRpbWUgLT0gYmFzZXNpbmstPnByaXYtPnJlbmRlcl9kZWxheTsKKyAgZWxzZQorICAgIHRpbWUgPSAwOworCisgIHJldHVybiB0aW1lOworfQorCisvKioKKyAqIGdzdF9iYXNlX3Npbmtfd2FpdF9jbG9jazoKKyAqIEBzaW5rOiB0aGUgc2luaworICogQHRpbWU6IHRoZSBydW5uaW5nX3RpbWUgdG8gYmUgcmVhY2hlZAorICogQGppdHRlcjogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgaml0dGVyIHRvIGJlIGZpbGxlZCB3aXRoIHRpbWUgZGlmZiwgb3IgTlVMTAorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBibG9jayB1bnRpbCBAdGltZSBpcyByZWFjaGVkLiBJdCBpcyB1c3VhbGx5IGNhbGxlZCBieQorICogc3ViY2xhc3NlcyB0aGF0IHVzZSB0aGVpciBvd24gaW50ZXJuYWwgc3luY2hyb25pc2F0aW9uLgorICoKKyAqIElmIEB0aW1lIGlzIG5vdCB2YWxpZCwgbm8gc3ljbmhyb25pc2F0aW9uIGlzIGRvbmUgYW5kICNHU1RfQ0xPQ0tfQkFEVElNRSBpcworICogcmV0dXJuZWQuIExpa2V3aXNlLCBpZiBzeW5jaHJvbmlzYXRpb24gaXMgZGlzYWJsZWQgaW4gdGhlIGVsZW1lbnQgb3IgdGhlcmUKKyAqIGlzIG5vIGNsb2NrLCBubyBzeW5jaHJvbmlzYXRpb24gaXMgZG9uZSBhbmQgI0dTVF9DTE9DS19CQURUSU1FIGlzIHJldHVybmVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdpdGggdGhlIFBSRVJPTExfTE9DSyBoZWxkLCBsaWtlIHdoZW4KKyAqIHJlY2VpdmluZyBhbiBFT1MgZXZlbnQgaW4gdGhlICNHc3RCYXNlU2lua0NsYXNzLmV2ZW50KCkgdm1ldGhvZCBvciB3aGVuCisgKiByZWNlaXZpbmcgYSBidWZmZXIgaW4KKyAqIHRoZSAjR3N0QmFzZVNpbmtDbGFzcy5yZW5kZXIoKSB2bWV0aG9kLgorICoKKyAqIFRoZSBAdGltZSBhcmd1bWVudCBzaG91bGQgYmUgdGhlIHJ1bm5pbmdfdGltZSBvZiB3aGVuIHRoaXMgbWV0aG9kIHNob3VsZAorICogcmV0dXJuIGFuZCBpcyBub3QgYWRqdXN0ZWQgd2l0aCBhbnkgbGF0ZW5jeSBvciBvZmZzZXQgY29uZmlndXJlZCBpbiB0aGUKKyAqIHNpbmsuCisgKgorICogU2luY2U6IDAuMTAuMjAKKyAqCisgKiBSZXR1cm5zOiAjR3N0Q2xvY2tSZXR1cm4KKyAqLworR3N0Q2xvY2tSZXR1cm4KK2dzdF9iYXNlX3Npbmtfd2FpdF9jbG9jayAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RDbG9ja1RpbWUgdGltZSwKKyAgICBHc3RDbG9ja1RpbWVEaWZmICogaml0dGVyKQoreworICBHc3RDbG9ja1JldHVybiByZXQ7CisgIEdzdENsb2NrICpjbG9jazsKKyAgR3N0Q2xvY2tUaW1lIGJhc2VfdGltZTsKKworICBpZiAoR19VTkxJS0VMWSAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lKSkpCisgICAgZ290byBpbnZhbGlkX3RpbWU7CisKKyAgR1NUX09CSkVDVF9MT0NLIChzaW5rKTsKKyAgaWYgKEdfVU5MSUtFTFkgKCFzaW5rLT5zeW5jKSkKKyAgICBnb3RvIG5vX3N5bmM7CisKKyAgaWYgKEdfVU5MSUtFTFkgKChjbG9jayA9IEdTVF9FTEVNRU5UX0NMT0NLIChzaW5rKSkgPT0gTlVMTCkpCisgICAgZ290byBub19jbG9jazsKKworICBiYXNlX3RpbWUgPSBHU1RfRUxFTUVOVF9DQVNUIChzaW5rKS0+YmFzZV90aW1lOworICBHU1RfTE9HX09CSkVDVCAoc2luaywKKyAgICAgICJ0aW1lICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBiYXNlX3RpbWUgJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgR1NUX1RJTUVfQVJHUyAodGltZSksIEdTVF9USU1FX0FSR1MgKGJhc2VfdGltZSkpOworCisgIC8qIGFkZCBiYXNlX3RpbWUgdG8gcnVubmluZ190aW1lIHRvIGdldCB0aGUgdGltZSBhZ2FpbnN0IHRoZSBjbG9jayAqLworICB0aW1lICs9IGJhc2VfdGltZTsKKworICAvKiBSZS11c2UgZXhpc3RpbmcgY2xvY2tpZCBpZiBhdmFpbGFibGUgKi8KKyAgLyogRklYTUU6IENhc3RpbmcgdG8gR3N0Q2xvY2tFbnRyeSBvbmx5IHdvcmtzIGJlY2F1c2UgdGhlIHR5cGVzCisgICAqIGFyZSB0aGUgc2FtZSAqLworICBpZiAoR19MSUtFTFkgKHNpbmstPnByaXYtPmNhY2hlZF9jbG9ja19pZCAhPSBOVUxMCisgICAgICAgICAgJiYgR1NUX0NMT0NLX0VOVFJZX0NMT0NLICgoR3N0Q2xvY2tFbnRyeSAqKSBzaW5rLT5wcml2LT4KKyAgICAgICAgICAgICAgY2FjaGVkX2Nsb2NrX2lkKSA9PSBjbG9jaykpIHsKKyAgICBpZiAoIWdzdF9jbG9ja19zaW5nbGVfc2hvdF9pZF9yZWluaXQgKGNsb2NrLCBzaW5rLT5wcml2LT5jYWNoZWRfY2xvY2tfaWQsCisgICAgICAgICAgICB0aW1lKSkgeworICAgICAgZ3N0X2Nsb2NrX2lkX3VucmVmIChzaW5rLT5wcml2LT5jYWNoZWRfY2xvY2tfaWQpOworICAgICAgc2luay0+cHJpdi0+Y2FjaGVkX2Nsb2NrX2lkID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIHRpbWUpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBpZiAoc2luay0+cHJpdi0+Y2FjaGVkX2Nsb2NrX2lkICE9IE5VTEwpCisgICAgICBnc3RfY2xvY2tfaWRfdW5yZWYgKHNpbmstPnByaXYtPmNhY2hlZF9jbG9ja19pZCk7CisgICAgc2luay0+cHJpdi0+Y2FjaGVkX2Nsb2NrX2lkID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIHRpbWUpOworICB9CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChzaW5rKTsKKworICAvKiBBIGJsb2NraW5nIHdhaXQgaXMgcGVyZm9ybWVkIG9uIHRoZSBjbG9jay4gV2Ugc2F2ZSB0aGUgQ2xvY2tJRAorICAgKiBzbyB3ZSBjYW4gdW5sb2NrIHRoZSBlbnRyeSBhdCBhbnkgdGltZS4gV2hpbGUgd2UgYXJlIGJsb2NraW5nLCB3ZQorICAgKiByZWxlYXNlIHRoZSBQUkVST0xMX0xPQ0sgc28gdGhhdCBvdGhlciB0aHJlYWRzIGNhbiBpbnRlcnJ1cHQgdGhlCisgICAqIGVudHJ5LiAqLworICBzaW5rLT5jbG9ja19pZCA9IHNpbmstPnByaXYtPmNhY2hlZF9jbG9ja19pZDsKKyAgLyogcmVsZWFzZSB0aGUgcHJlcm9sbCBsb2NrIHdoaWxlIHdhaXRpbmcgKi8KKyAgR1NUX0JBU0VfU0lOS19QUkVST0xMX1VOTE9DSyAoc2luayk7CisKKyAgcmV0ID0gZ3N0X2Nsb2NrX2lkX3dhaXQgKHNpbmstPnByaXYtPmNhY2hlZF9jbG9ja19pZCwgaml0dGVyKTsKKworICBHU1RfQkFTRV9TSU5LX1BSRVJPTExfTE9DSyAoc2luayk7CisgIHNpbmstPmNsb2NrX2lkID0gTlVMTDsKKworICByZXR1cm4gcmV0OworCisgIC8qIG5vIHN5bmNpbmcgbmVlZGVkICovCitpbnZhbGlkX3RpbWU6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAidGltZSBub3QgdmFsaWQsIG5vIHN5bmMgbmVlZGVkIik7CisgICAgcmV0dXJuIEdTVF9DTE9DS19CQURUSU1FOworICB9Citub19zeW5jOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInN5bmMgZGlzYWJsZWQiKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc2luayk7CisgICAgcmV0dXJuIEdTVF9DTE9DS19CQURUSU1FOworICB9Citub19jbG9jazoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJubyBjbG9jaywgY2FuJ3Qgc3luYyIpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzaW5rKTsKKyAgICByZXR1cm4gR1NUX0NMT0NLX0JBRFRJTUU7CisgIH0KK30KKworLyoqCisgKiBnc3RfYmFzZV9zaW5rX3dhaXRfcHJlcm9sbDoKKyAqIEBzaW5rOiB0aGUgc2luaworICoKKyAqIElmIHRoZSAjR3N0QmFzZVNpbmtDbGFzcy5yZW5kZXIoKSBtZXRob2QgcGVyZm9ybXMgaXRzIG93biBzeW5jaHJvbmlzYXRpb24KKyAqIGFnYWluc3QgdGhlIGNsb2NrIGl0IG11c3QgdW5ibG9jayB3aGVuIGdvaW5nIGZyb20gUExBWUlORyB0byB0aGUgUEFVU0VEIHN0YXRlCisgKiBhbmQgY2FsbCB0aGlzIG1ldGhvZCBiZWZvcmUgY29udGludWluZyB0byByZW5kZXIgdGhlIHJlbWFpbmluZyBkYXRhLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBibG9jayB1bnRpbCBhIHN0YXRlIGNoYW5nZSB0byBQTEFZSU5HIGhhcHBlbnMgKGluIHdoaWNoCisgKiBjYXNlIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAjR1NUX0ZMT1dfT0spIG9yIHRoZSBwcm9jZXNzaW5nIG11c3QgYmUgc3RvcHBlZCBkdWUKKyAqIHRvIGEgc3RhdGUgY2hhbmdlIHRvIFJFQURZIG9yIGEgRkxVU0ggZXZlbnQgKGluIHdoaWNoIGNhc2UgdGhpcyBmdW5jdGlvbgorICogcmV0dXJucyAjR1NUX0ZMT1dfV1JPTkdfU1RBVEUpLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdpdGggdGhlIFBSRVJPTExfTE9DSyBoZWxkLCBsaWtlIGluIHRoZQorICogcmVuZGVyIGZ1bmN0aW9uLgorICoKKyAqIFJldHVybnM6ICNHU1RfRkxPV19PSyBpZiB0aGUgcHJlcm9sbCBjb21wbGV0ZWQgYW5kIHByb2Nlc3NpbmcgY2FuCisgKiBjb250aW51ZS4gQW55IG90aGVyIHJldHVybiB2YWx1ZSBzaG91bGQgYmUgcmV0dXJuZWQgZnJvbSB0aGUgcmVuZGVyIHZtZXRob2QuCisgKgorICogU2luY2U6IDAuMTAuMTEKKyAqLworR3N0Rmxvd1JldHVybgorZ3N0X2Jhc2Vfc2lua193YWl0X3ByZXJvbGwgKEdzdEJhc2VTaW5rICogc2luaykKK3sKKyAgc2luay0+aGF2ZV9wcmVyb2xsID0gVFJVRTsKKyAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgIndhaXRpbmcgaW4gcHJlcm9sbCBmb3IgZmx1c2ggb3IgUExBWUlORyIpOworICAvKiBibG9jayB1bnRpbCB0aGUgc3RhdGUgY2hhbmdlcywgb3Igd2UgZ2V0IGEgZmx1c2gsIG9yIHNvbWV0aGluZyAqLworICBHU1RfQkFTRV9TSU5LX1BSRVJPTExfV0FJVCAoc2luayk7CisgIHNpbmstPmhhdmVfcHJlcm9sbCA9IEZBTFNFOworICBpZiAoR19VTkxJS0VMWSAoc2luay0+Zmx1c2hpbmcpKQorICAgIGdvdG8gc3RvcHBpbmc7CisgIGlmIChHX1VOTElLRUxZIChzaW5rLT5wcml2LT5zdGVwX3VubG9jaykpCisgICAgZ290byBzdGVwX3VubG9ja2VkOworICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAiY29udGludWUgYWZ0ZXIgcHJlcm9sbCIpOworCisgIHJldHVybiBHU1RfRkxPV19PSzsKKworICAvKiBFUlJPUlMgKi8KK3N0b3BwaW5nOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInByZXJvbGwgaW50ZXJydXB0ZWQgYmVjYXVzZSBvZiBmbHVzaCIpOworICAgIHJldHVybiBHU1RfRkxPV19XUk9OR19TVEFURTsKKyAgfQorc3RlcF91bmxvY2tlZDoKKyAgeworICAgIHNpbmstPnByaXYtPnN0ZXBfdW5sb2NrID0gRkFMU0U7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInByZXJvbGwgaW50ZXJydXB0ZWQgYmVjYXVzZSBvZiBzdGVwIik7CisgICAgcmV0dXJuIEdTVF9GTE9XX1NURVA7CisgIH0KK30KKworc3RhdGljIGlubGluZSBndWludDgKK2dldF9vYmplY3RfdHlwZSAoR3N0TWluaU9iamVjdCAqIG9iaikKK3sKKyAgZ3VpbnQ4IG9ial90eXBlOworCisgIGlmIChHX0xJS0VMWSAoR1NUX0lTX0JVRkZFUiAob2JqKSkpCisgICAgb2JqX3R5cGUgPSBfUFJfSVNfQlVGRkVSOworICBlbHNlIGlmIChHU1RfSVNfRVZFTlQgKG9iaikpCisgICAgb2JqX3R5cGUgPSBfUFJfSVNfRVZFTlQ7CisgIGVsc2UgaWYgKEdTVF9JU19CVUZGRVJfTElTVCAob2JqKSkKKyAgICBvYmpfdHlwZSA9IF9QUl9JU19CVUZGRVJMSVNUOworICBlbHNlCisgICAgb2JqX3R5cGUgPSBfUFJfSVNfTk9USElORzsKKworICByZXR1cm4gb2JqX3R5cGU7Cit9CisKKy8qKgorICogZ3N0X2Jhc2Vfc2lua19kb19wcmVyb2xsOgorICogQHNpbms6IHRoZSBzaW5rCisgKiBAb2JqOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBtaW5pIG9iamVjdCB0aGF0IGNhdXNlZCB0aGUgcHJlcm9sbAorICoKKyAqIElmIHRoZSBAc2luayBzcGF3bnMgaXRzIG93biB0aHJlYWQgZm9yIHB1bGxpbmcgYnVmZmVycyBmcm9tIHVwc3RyZWFtIGl0CisgKiBzaG91bGQgY2FsbCB0aGlzIG1ldGhvZCBhZnRlciBpdCBoYXMgcHVsbGVkIGEgYnVmZmVyLiBJZiB0aGUgZWxlbWVudCBuZWVkZWQKKyAqIHRvIHByZXJvbGwsIHRoaXMgZnVuY3Rpb24gd2lsbCBwZXJmb3JtIHRoZSBwcmVyb2xsIGFuZCB3aWxsIHRoZW4gYmxvY2sKKyAqIHVudGlsIHRoZSBlbGVtZW50IHN0YXRlIGlzIGNoYW5nZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIFBSRVJPTExfTE9DSyBoZWxkLgorICoKKyAqIFJldHVybnM6ICNHU1RfRkxPV19PSyBpZiB0aGUgcHJlcm9sbCBjb21wbGV0ZWQgYW5kIHByb2Nlc3NpbmcgY2FuCisgKiBjb250aW51ZS4gQW55IG90aGVyIHJldHVybiB2YWx1ZSBzaG91bGQgYmUgcmV0dXJuZWQgZnJvbSB0aGUgcmVuZGVyIHZtZXRob2QuCisgKgorICogU2luY2U6IDAuMTAuMjIKKyAqLworR3N0Rmxvd1JldHVybgorZ3N0X2Jhc2Vfc2lua19kb19wcmVyb2xsIChHc3RCYXNlU2luayAqIHNpbmssIEdzdE1pbmlPYmplY3QgKiBvYmopCit7CisgIEdzdEZsb3dSZXR1cm4gcmV0OworCisgIHdoaWxlIChHX1VOTElLRUxZIChzaW5rLT5uZWVkX3ByZXJvbGwpKSB7CisgICAgZ3VpbnQ4IG9ial90eXBlOworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJwcmVyb2xsaW5nIG9iamVjdCAlcCIsIG9iaik7CisKKyAgICBvYmpfdHlwZSA9IGdldF9vYmplY3RfdHlwZSAob2JqKTsKKworICAgIHJldCA9IGdzdF9iYXNlX3NpbmtfcHJlcm9sbF9vYmplY3QgKHNpbmssIG9ial90eXBlLCBvYmopOworICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCisgICAgICBnb3RvIHByZXJvbGxfZmFpbGVkOworCisgICAgLyogbmVlZCB0byByZWNoZWNrIGhlcmUgYmVjYXVzZSB0aGUgY29tbWl0IHN0YXRlIGNvdWxkIGhhdmUKKyAgICAgKiBtYWRlIHVzIG5vdCBuZWVkIHRoZSBwcmVyb2xsIGFueW1vcmUgKi8KKyAgICBpZiAoR19MSUtFTFkgKHNpbmstPm5lZWRfcHJlcm9sbCkpIHsKKyAgICAgIC8qIGJsb2NrIHVudGlsIHRoZSBzdGF0ZSBjaGFuZ2VzLCBvciB3ZSBnZXQgYSBmbHVzaCwgb3Igc29tZXRoaW5nICovCisgICAgICByZXQgPSBnc3RfYmFzZV9zaW5rX3dhaXRfcHJlcm9sbCAoc2luayk7CisgICAgICBpZiAoKHJldCAhPSBHU1RfRkxPV19PSykgJiYgKHJldCAhPSBHU1RfRkxPV19TVEVQKSkKKyAgICAgICAgZ290byBwcmVyb2xsX2ZhaWxlZDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIEdTVF9GTE9XX09LOworCisgIC8qIEVSUk9SUyAqLworcHJlcm9sbF9mYWlsZWQ6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAicHJlcm9sbCBmYWlsZWQ6ICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOworICAgIHJldHVybiByZXQ7CisgIH0KK30KKworLyoqCisgKiBnc3RfYmFzZV9zaW5rX3dhaXRfZW9zOgorICogQHNpbms6IHRoZSBzaW5rCisgKiBAdGltZTogdGhlIHJ1bm5pbmdfdGltZSB0byBiZSByZWFjaGVkCisgKiBAaml0dGVyOiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBqaXR0ZXIgdG8gYmUgZmlsbGVkIHdpdGggdGltZSBkaWZmLCBvciBOVUxMCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGJsb2NrIHVudGlsIEB0aW1lIGlzIHJlYWNoZWQuIEl0IGlzIHVzdWFsbHkgY2FsbGVkIGJ5CisgKiBzdWJjbGFzc2VzIHRoYXQgdXNlIHRoZWlyIG93biBpbnRlcm5hbCBzeW5jaHJvbmlzYXRpb24gYnV0IHdhbnQgdG8gbGV0IHRoZQorICogRU9TIGJlIGhhbmRsZWQgYnkgdGhlIGJhc2UgY2xhc3MuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgd2l0aCB0aGUgUFJFUk9MTF9MT0NLIGhlbGQsIGxpa2Ugd2hlbgorICogcmVjZWl2aW5nIGFuIEVPUyBldmVudCBpbiB0aGUgOjpldmVudCB2bWV0aG9kLgorICoKKyAqIFRoZSBAdGltZSBhcmd1bWVudCBzaG91bGQgYmUgdGhlIHJ1bm5pbmdfdGltZSBvZiB3aGVuIHRoZSBFT1Mgc2hvdWxkIGhhcHBlbgorICogYW5kIHdpbGwgYmUgYWRqdXN0ZWQgd2l0aCBhbnkgbGF0ZW5jeSBhbmQgb2Zmc2V0IGNvbmZpZ3VyZWQgaW4gdGhlIHNpbmsuCisgKgorICogUmV0dXJuczogI0dzdEZsb3dSZXR1cm4KKyAqCisgKiBTaW5jZTogMC4xMC4xNQorICovCitHc3RGbG93UmV0dXJuCitnc3RfYmFzZV9zaW5rX3dhaXRfZW9zIChHc3RCYXNlU2luayAqIHNpbmssIEdzdENsb2NrVGltZSB0aW1lLAorICAgIEdzdENsb2NrVGltZURpZmYgKiBqaXR0ZXIpCit7CisgIEdzdENsb2NrUmV0dXJuIHN0YXR1czsKKyAgR3N0Rmxvd1JldHVybiByZXQ7CisKKyAgZG8geworICAgIEdzdENsb2NrVGltZSBzdGltZTsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJjaGVja2luZyBwcmVyb2xsIik7CisKKyAgICAvKiBmaXJzdCB3YWl0IGZvciB0aGUgcGxheWluZyBzdGF0ZSBiZWZvcmUgd2UgY2FuIGNvbnRpbnVlICovCisgICAgd2hpbGUgKEdfVU5MSUtFTFkgKHNpbmstPm5lZWRfcHJlcm9sbCkpIHsKKyAgICAgIHJldCA9IGdzdF9iYXNlX3Npbmtfd2FpdF9wcmVyb2xsIChzaW5rKTsKKyAgICAgIGlmICgocmV0ICE9IEdTVF9GTE9XX09LKSAmJiAocmV0ICE9IEdTVF9GTE9XX1NURVApKQorICAgICAgICBnb3RvIGZsdXNoaW5nOworICAgIH0KKworICAgIC8qIHByZXJvbGwgZG9uZSwgd2UgY2FuIHN5bmMgc2luY2Ugd2UgYXJlIGluIFBMQVlJTkcgbm93LiAqLworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJwb3NzaWJseSB3YWl0aW5nIGZvciBjbG9jayB0byByZWFjaCAlIgorICAgICAgICBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKHRpbWUpKTsKKworICAgIC8qIGNvbXBlbnNhdGUgZm9yIGxhdGVuY3kgYW5kIHRzX29mZnNldC4gV2UgZG9uJ3QgYWRqdXN0IGZvciByZW5kZXIgZGVsYXkKKyAgICAgKiBiZWNhdXNlIHdlIGRvbid0IGludGVyYWN0IHdpdGggdGhlIGRldmljZSBvbiBFT1Mgbm9ybWFsbHkuICovCisgICAgc3RpbWUgPSBnc3RfYmFzZV9zaW5rX2FkanVzdF90aW1lIChzaW5rLCB0aW1lKTsKKworICAgIC8qIHdhaXQgZm9yIHRoZSBjbG9jaywgdGhpcyBjYW4gYmUgaW50ZXJydXB0ZWQgYmVjYXVzZSB3ZSBnb3Qgc2h1dCBkb3duIG9yCisgICAgICogd2UgUEFVU0VELiAqLworICAgIHN0YXR1cyA9IGdzdF9iYXNlX3Npbmtfd2FpdF9jbG9jayAoc2luaywgc3RpbWUsIGppdHRlcik7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAiY2xvY2sgcmV0dXJuZWQgJWQiLCBzdGF0dXMpOworCisgICAgLyogaW52YWxpZCB0aW1lLCBubyBjbG9jayBvciBzeW5jIGRpc2FibGVkLCBqdXN0IGNvbnRpbnVlIHRoZW4gKi8KKyAgICBpZiAoc3RhdHVzID09IEdTVF9DTE9DS19CQURUSU1FKQorICAgICAgYnJlYWs7CisKKyAgICAvKiB3YWl0aW5nIGNvdWxkIGhhdmUgYmVlbiBpbnRlcnJ1cHRlZCBhbmQgd2UgY2FuIGJlIGZsdXNoaW5nIG5vdyAqLworICAgIGlmIChHX1VOTElLRUxZIChzaW5rLT5mbHVzaGluZykpCisgICAgICBnb3RvIGZsdXNoaW5nOworCisgICAgLyogcmV0cnkgaWYgd2UgZ290IHVuc2NoZWR1bGVkLCB3aGljaCBtZWFucyB3ZSBkaWQgbm90IHJlYWNoIHRoZSB0aW1lb3V0CisgICAgICogeWV0LiBpZiBzb21lIG90aGVyIGVycm9yIG9jY3VyZXMsIHdlIGNvbnRpbnVlLiAqLworICB9IHdoaWxlIChzdGF0dXMgPT0gR1NUX0NMT0NLX1VOU0NIRURVTEVEKTsKKworICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAiZW5kIG9mIHN0cmVhbSIpOworCisgIHJldHVybiBHU1RfRkxPV19PSzsKKworICAvKiBFUlJPUlMgKi8KK2ZsdXNoaW5nOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgIndlIGFyZSBmbHVzaGluZyIpOworICAgIHJldHVybiBHU1RfRkxPV19XUk9OR19TVEFURTsKKyAgfQorfQorCisvKiB3aXRoIFNUUkVBTV9MT0NLLCBQUkVST0xMX0xPQ0sKKyAqCisgKiBNYWtlIHN1cmUgd2UgYXJlIGluIFBMQVlJTkcgYW5kIHN5bmNocm9uaXplIGFuIG9iamVjdCB0byB0aGUgY2xvY2suCisgKgorICogSWYgd2UgbmVlZCBwcmVyb2xsLCB3ZSBhcmUgbm90IGluIFBMQVlJTkcuIFdlIHRyeSB0byBjb21taXQgdGhlIHN0YXRlCisgKiBpZiBuZWVkZWQgYW5kIHRoZW4gYmxvY2sgaWYgd2Ugc3RpbGwgYXJlIG5vdCBQTEFZSU5HLgorICoKKyAqIFdlIHN0YXJ0IHdhaXRpbmcgb24gdGhlIGNsb2NrIGluIFBMQVlJTkcuIElmIHdlIGdvdCBpbnRlcnJ1cHRlZCwgd2UKKyAqIGltbWVkaWF0ZWx5IHRyeSB0byByZS1wcmVyb2xsLgorICoKKyAqIFNvbWUgb2JqZWN0cyBkbyBub3QgbmVlZCBzeW5jaHJvbmlzYXRpb24gKG1vc3QgZXZlbnRzKSBhbmQgc28gdGhpcyBmdW5jdGlvbgorICogaW1tZWRpYXRlbHkgcmV0dXJucyBHU1RfRkxPV19PSy4KKyAqCisgKiBmb3Igb2JqZWN0cyB0aGF0IGFycml2ZSBsYXRlciB0aGFuIG1heC1sYXRlbmVzcyB0byBiZSBzeW5jaHJvbml6ZWQgdG8gdGhlCisgKiBjbG9jayBoYXZlIHRoZSBAbGF0ZSBib29sZWFuIHNldCB0byBUUlVFLgorICoKKyAqIFRoaXMgZnVuY3Rpb24ga2VlcHMgYSBydW5uaW5nIGF2ZXJhZ2Ugb2YgdGhlIGppdHRlciAodGhlIGRpZmYgYmV0d2VlbiB0aGUKKyAqIGNsb2NrIHRpbWUgYW5kIHRoZSByZXF1ZXN0ZWQgc3luYyB0aW1lKS4gVGhlIGppdHRlciBpcyBuZWdhdGl2ZSBmb3IKKyAqIG9iamVjdHMgdGhhdCBhcnJpdmUgaW4gdGltZSBhbmQgcG9zaXRpdmUgZm9yIGxhdGUgYnVmZmVycy4KKyAqCisgKiBkb2VzIG5vdCB0YWtlIG93bmVyc2hpcCBvZiBvYmouCisgKi8KK3N0YXRpYyBHc3RGbG93UmV0dXJuCitnc3RfYmFzZV9zaW5rX2RvX3N5bmMgKEdzdEJhc2VTaW5rICogYmFzZXNpbmssIEdzdFBhZCAqIHBhZCwKKyAgICBHc3RNaW5pT2JqZWN0ICogb2JqLCBnYm9vbGVhbiAqIGxhdGUsIGdib29sZWFuICogc3RlcF9lbmQsIGd1aW50OCBvYmpfdHlwZSkKK3sKKyAgR3N0Q2xvY2tUaW1lRGlmZiBqaXR0ZXIgPSAwOworICBnYm9vbGVhbiBzeW5jYWJsZTsKKyAgR3N0Q2xvY2tSZXR1cm4gc3RhdHVzID0gR1NUX0NMT0NLX09LOworICBHc3RDbG9ja1RpbWUgcnN0YXJ0LCByc3RvcCwgc3N0YXJ0LCBzc3RvcCwgc3RpbWU7CisgIGdib29sZWFuIGRvX3N5bmM7CisgIEdzdEJhc2VTaW5rUHJpdmF0ZSAqcHJpdjsKKyAgR3N0Rmxvd1JldHVybiByZXQ7CisgIEdzdFN0ZXBJbmZvICpjdXJyZW50LCAqcGVuZGluZzsKKyAgZ2Jvb2xlYW4gc3RlcHBlZDsKKworICBwcml2ID0gYmFzZXNpbmstPnByaXY7CisKK2RvX3N0ZXA6CisgIHNzdGFydCA9IHNzdG9wID0gcnN0YXJ0ID0gcnN0b3AgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICBkb19zeW5jID0gVFJVRTsKKyAgc3RlcHBlZCA9IEZBTFNFOworCisgIHByaXYtPmN1cnJlbnRfcnN0YXJ0ID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKworICAvKiBnZXQgc3RlcHBpbmcgaW5mbyAqLworICBjdXJyZW50ID0gJnByaXYtPmN1cnJlbnRfc3RlcDsKKyAgcGVuZGluZyA9ICZwcml2LT5wZW5kaW5nX3N0ZXA7CisKKyAgLyogZ2V0IHRpbWluZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBvYmplY3QgYWdhaW5zdCB0aGUgcmVuZGVyIHNlZ21lbnQgKi8KKyAgc3luY2FibGUgPSBnc3RfYmFzZV9zaW5rX2dldF9zeW5jX3RpbWVzIChiYXNlc2luaywgb2JqLAorICAgICAgJnNzdGFydCwgJnNzdG9wLCAmcnN0YXJ0LCAmcnN0b3AsICZkb19zeW5jLCAmc3RlcHBlZCwgJmJhc2VzaW5rLT5zZWdtZW50LAorICAgICAgY3VycmVudCwgc3RlcF9lbmQsIG9ial90eXBlKTsKKworICBpZiAoR19VTkxJS0VMWSAoc3RlcHBlZCkpCisgICAgZ290byBzdGVwX3NraXBwZWQ7CisKKyAgLyogYSBzeW5jYWJsZSBvYmplY3QgbmVlZHMgdG8gcGFydGljaXBhdGUgaW4gcHJlcm9sbCBhbmQKKyAgICogY2xvY2tpbmcuIEFsbCBidWZmZXJzIGFuZCBFT1MgYXJlIHN5bmNhYmxlLiAqLworICBpZiAoR19VTkxJS0VMWSAoIXN5bmNhYmxlKSkKKyAgICBnb3RvIG5vdF9zeW5jYWJsZTsKKworICAvKiBzdG9yZSB0aW1pbmcgaW5mbyBmb3IgY3VycmVudCBvYmplY3QgKi8KKyAgcHJpdi0+Y3VycmVudF9yc3RhcnQgPSByc3RhcnQ7CisgIHByaXYtPmN1cnJlbnRfcnN0b3AgPSAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHJzdG9wKSA/IHJzdG9wIDogcnN0YXJ0KTsKKworICAvKiBzYXZlIHN5bmMgdGltZSBmb3IgZW9zIHdoZW4gdGhlIHByZXZpb3VzIG9iamVjdCBuZWVkZWQgc3luYyAqLworICBwcml2LT5lb3NfcnRpbWUgPSAoZG9fc3luYyA/IHByaXYtPmN1cnJlbnRfcnN0b3AgOiBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKworICAvKiBjYWxjdWxhdGUgaW50ZXIgZnJhbWUgc3BhY2luZyAqLworICBpZiAoR19VTkxJS0VMWSAocHJpdi0+cHJldl9yc3RhcnQgIT0gLTEgJiYgcHJpdi0+cHJldl9yc3RhcnQgPCByc3RhcnQpKSB7CisgICAgR3N0Q2xvY2tUaW1lIGluX2RpZmY7CisKKyAgICBpbl9kaWZmID0gcnN0YXJ0IC0gcHJpdi0+cHJldl9yc3RhcnQ7CisKKyAgICBpZiAocHJpdi0+YXZnX2luX2RpZmYgPT0gLTEpCisgICAgICBwcml2LT5hdmdfaW5fZGlmZiA9IGluX2RpZmY7CisgICAgZWxzZQorICAgICAgcHJpdi0+YXZnX2luX2RpZmYgPSBVUERBVEVfUlVOTklOR19BVkcgKHByaXYtPmF2Z19pbl9kaWZmLCBpbl9kaWZmKTsKKworICAgIEdTVF9MT0dfT0JKRUNUIChiYXNlc2luaywgImF2ZyBmcmFtZSBkaWZmICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgICAgR1NUX1RJTUVfQVJHUyAocHJpdi0+YXZnX2luX2RpZmYpKTsKKworICB9CisgIHByaXYtPnByZXZfcnN0YXJ0ID0gcnN0YXJ0OworCisgIGlmIChHX1VOTElLRUxZIChwcml2LT5lYXJsaWVzdF9pbl90aW1lICE9IC0xCisgICAgICAgICAgJiYgcnN0YXJ0IDwgcHJpdi0+ZWFybGllc3RfaW5fdGltZSkpCisgICAgZ290byBxb3NfZHJvcHBlZDsKKworYWdhaW46CisgIC8qIGZpcnN0IGRvIHByZXJvbGwsIHRoaXMgbWFrZXMgc3VyZSB3ZSBjb21taXQgb3VyIHN0YXRlCisgICAqIHRvIFBBVVNFRCBhbmQgY2FuIGNvbnRpbnVlIHRvIFBMQVlJTkcuIFdlIGNhbm5vdCBwZXJmb3JtCisgICAqIGFueSBjbG9jayBzeW5jIGluIFBBVVNFRCBiZWNhdXNlIHRoZXJlIGlzIG5vIGNsb2NrLiAqLworICByZXQgPSBnc3RfYmFzZV9zaW5rX2RvX3ByZXJvbGwgKGJhc2VzaW5rLCBvYmopOworICBpZiAoR19VTkxJS0VMWSAocmV0ICE9IEdTVF9GTE9XX09LKSkKKyAgICBnb3RvIHByZXJvbGxfZmFpbGVkOworCisgIC8qIHVwZGF0ZSB0aGUgc2VnbWVudCB3aXRoIGEgcGVuZGluZyBzdGVwIGlmIHRoZSBjdXJyZW50IG9uZSBpcyBpbnZhbGlkIGFuZCB3ZQorICAgKiBoYXZlIGEgbmV3IHBlbmRpbmcgb25lLiBXZSBvbmx5IGFjY2VwdCBuZXcgc3RlcCB1cGRhdGVzIGFmdGVyIGEgcHJlcm9sbCAqLworICBpZiAoR19VTkxJS0VMWSAocGVuZGluZy0+dmFsaWQgJiYgIWN1cnJlbnQtPnZhbGlkKSkgeworICAgIHN0YXJ0X3N0ZXBwaW5nIChiYXNlc2luaywgJmJhc2VzaW5rLT5zZWdtZW50LCBwZW5kaW5nLCBjdXJyZW50KTsKKyAgICBnb3RvIGRvX3N0ZXA7CisgIH0KKworICAvKiBBZnRlciByZW5kZXJpbmcgd2Ugc3RvcmUgdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0IGJ1ZmZlciBzbyB0aGF0IHdlIGNhbiB1c2UKKyAgICogaXQgdG8gcmVwb3J0IHRoZSBwb3NpdGlvbi4gV2UgbmVlZCB0byB0YWtlIHRoZSBsb2NrIGhlcmUuICovCisgIEdTVF9PQkpFQ1RfTE9DSyAoYmFzZXNpbmspOworICBwcml2LT5jdXJyZW50X3NzdGFydCA9IHNzdGFydDsKKyAgcHJpdi0+Y3VycmVudF9zc3RvcCA9IChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoc3N0b3ApID8gc3N0b3AgOiBzc3RhcnQpOworICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNpbmspOworCisgIGlmICghZG9fc3luYykKKyAgICBnb3RvIGRvbmU7CisKKyAgLyogYWRqdXN0IGZvciBsYXRlbmN5ICovCisgIHN0aW1lID0gZ3N0X2Jhc2Vfc2lua19hZGp1c3RfdGltZSAoYmFzZXNpbmssIHJzdGFydCk7CisKKyAgLyogYWRqdXN0IGZvciByZW5kZXItZGVsYXksIGF2b2lkIHVuZGVyZmxvd3MgKi8KKyAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzdGltZSkpIHsKKyAgICBpZiAoc3RpbWUgPiBwcml2LT5yZW5kZXJfZGVsYXkpCisgICAgICBzdGltZSAtPSBwcml2LT5yZW5kZXJfZGVsYXk7CisgICAgZWxzZQorICAgICAgc3RpbWUgPSAwOworICB9CisKKyAgLyogcHJlcm9sbCBkb25lLCB3ZSBjYW4gc3luYyBzaW5jZSB3ZSBhcmUgaW4gUExBWUlORyBub3cuICovCisgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAicG9zc2libHkgd2FpdGluZyBmb3IgY2xvY2sgdG8gcmVhY2ggJSIKKyAgICAgIEdTVF9USU1FX0ZPUk1BVCAiLCBhZGp1c3RlZCAlIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICBHU1RfVElNRV9BUkdTIChyc3RhcnQpLCBHU1RfVElNRV9BUkdTIChzdGltZSkpOworCisgIC8qIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkgaWYgc3RhcnQgPT0gLTEsIG5vIGNsb2NrCisgICAqIG9yIHN5bmMgaXMgZGlzYWJsZWQgd2l0aCBHU1RfQ0xPQ0tfQkFEVElNRS4gKi8KKyAgc3RhdHVzID0gZ3N0X2Jhc2Vfc2lua193YWl0X2Nsb2NrIChiYXNlc2luaywgc3RpbWUsICZqaXR0ZXIpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiY2xvY2sgcmV0dXJuZWQgJWQsIGppdHRlciAlYyUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgIHN0YXR1cywgKGppdHRlciA8IDAgPyAnLScgOiAnICcpLCBHU1RfVElNRV9BUkdTIChBQlMgKGppdHRlcikpKTsKKworICAvKiBpbnZhbGlkIHRpbWUsIG5vIGNsb2NrIG9yIHN5bmMgZGlzYWJsZWQsIGp1c3QgcmVuZGVyICovCisgIGlmIChzdGF0dXMgPT0gR1NUX0NMT0NLX0JBRFRJTUUpCisgICAgZ290byBkb25lOworCisgIC8qIHdhaXRpbmcgY291bGQgaGF2ZSBiZWVuIGludGVycnVwdGVkIGFuZCB3ZSBjYW4gYmUgZmx1c2hpbmcgbm93ICovCisgIGlmIChHX1VOTElLRUxZIChiYXNlc2luay0+Zmx1c2hpbmcpKQorICAgIGdvdG8gZmx1c2hpbmc7CisKKyAgLyogY2hlY2sgZm9yIHVubG9ja2VkIGJ5IGEgc3RhdGUgY2hhbmdlLCB3ZSBhcmUgbm90IGZsdXNoaW5nIHNvCisgICAqIHdlIGNhbiB0cnkgdG8gcHJlcm9sbCBvbiB0aGUgY3VycmVudCBidWZmZXIuICovCisgIGlmIChHX1VOTElLRUxZIChzdGF0dXMgPT0gR1NUX0NMT0NLX1VOU0NIRURVTEVEKSkgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAidW5zY2hlZHVsZWQsIHdhaXRpbmcgc29tZSBtb3JlIik7CisgICAgcHJpdi0+Y2FsbF9wcmVyb2xsID0gVFJVRTsKKyAgICBnb3RvIGFnYWluOworICB9CisKKyAgLyogc3VjY2Vzc2Z1bCBzeW5jaW5nIGRvbmUsIHJlY29yZCBvYnNlcnZhdGlvbiAqLworICBwcml2LT5jdXJyZW50X2ppdHRlciA9IGppdHRlcjsKKworICAvKiBjaGVjayBpZiB0aGUgb2JqZWN0IHNob3VsZCBiZSBkcm9wcGVkICovCisgICpsYXRlID0gZ3N0X2Jhc2Vfc2lua19pc190b29fbGF0ZSAoYmFzZXNpbmssIG9iaiwgcnN0YXJ0LCByc3RvcCwKKyAgICAgIHN0YXR1cywgaml0dGVyKTsKKworZG9uZToKKyAgcmV0dXJuIEdTVF9GTE9XX09LOworCisgIC8qIEVSUk9SUyAqLworc3RlcF9za2lwcGVkOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJza2lwcGVkIHN0ZXBwZWQgb2JqZWN0ICVwIiwgb2JqKTsKKyAgICAqbGF0ZSA9IFRSVUU7CisgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICB9Citub3Rfc3luY2FibGU6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgIm5vbiBzeW5jYWJsZSBvYmplY3QgJXAiLCBvYmopOworICAgIHJldHVybiBHU1RfRkxPV19PSzsKKyAgfQorcW9zX2Ryb3BwZWQ6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgImRyb3BwZWQgYmVjYXVzZSBvZiBRb1MgJXAiLCBvYmopOworICAgICpsYXRlID0gVFJVRTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisgIH0KK2ZsdXNoaW5nOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJ3ZSBhcmUgZmx1c2hpbmciKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfV1JPTkdfU1RBVEU7CisgIH0KK3ByZXJvbGxfZmFpbGVkOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJwcmVyb2xsIGZhaWxlZCIpOworICAgICpzdGVwX2VuZCA9IEZBTFNFOworICAgIHJldHVybiByZXQ7CisgIH0KK30KKworc3RhdGljIGdib29sZWFuCitnc3RfYmFzZV9zaW5rX3NlbmRfcW9zIChHc3RCYXNlU2luayAqIGJhc2VzaW5rLCBHc3RRT1NUeXBlIHR5cGUsCisgICAgZ2RvdWJsZSBwcm9wb3J0aW9uLCBHc3RDbG9ja1RpbWUgdGltZSwgR3N0Q2xvY2tUaW1lRGlmZiBkaWZmKQoreworICBHc3RFdmVudCAqZXZlbnQ7CisgIGdib29sZWFuIHJlczsKKworICAvKiBnZW5lcmF0ZSBRdWFsaXR5LW9mLVNlcnZpY2UgZXZlbnQgKi8KKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfUU9TLCBiYXNlc2luaywKKyAgICAgICJxb3M6IHR5cGUgJWQsIHByb3BvcnRpb246ICVsZiwgZGlmZiAlIiBHX0dJTlQ2NF9GT1JNQVQgIiwgdGltZXN0YW1wICUiCisgICAgICBHU1RfVElNRV9GT1JNQVQsIHR5cGUsIHByb3BvcnRpb24sIGRpZmYsIEdTVF9USU1FX0FSR1MgKHRpbWUpKTsKKworICBldmVudCA9IGdzdF9ldmVudF9uZXdfcW9zICh0eXBlLCBwcm9wb3J0aW9uLCBkaWZmLCB0aW1lKTsKKworICAvKiBzZW5kIHVwc3RyZWFtICovCisgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAoYmFzZXNpbmstPnNpbmtwYWQsIGV2ZW50KTsKKworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2Jhc2Vfc2lua19wZXJmb3JtX3FvcyAoR3N0QmFzZVNpbmsgKiBzaW5rLCBnYm9vbGVhbiBkcm9wcGVkKQoreworICBHc3RCYXNlU2lua1ByaXZhdGUgKnByaXY7CisgIEdzdENsb2NrVGltZSBzdGFydCwgc3RvcDsKKyAgR3N0Q2xvY2tUaW1lRGlmZiBqaXR0ZXI7CisgIEdzdENsb2NrVGltZSBwdCwgZW50ZXJlZCwgbGVmdDsKKyAgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uOworICBnZG91YmxlIHJhdGU7CisKKyAgcHJpdiA9IHNpbmstPnByaXY7CisKKyAgc3RhcnQgPSBwcml2LT5jdXJyZW50X3JzdGFydDsKKworICBpZiAocHJpdi0+Y3VycmVudF9zdGVwLnZhbGlkKQorICAgIHJldHVybjsKKworICAvKiBpZiBRdWFsaXR5LW9mLVNlcnZpY2UgZGlzYWJsZWQsIGRvIG5vdGhpbmcgKi8KKyAgaWYgKCFnX2F0b21pY19pbnRfZ2V0ICgmcHJpdi0+cW9zX2VuYWJsZWQpIHx8CisgICAgICAhR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHN0YXJ0KSkKKyAgICByZXR1cm47CisKKyAgc3RvcCA9IHByaXYtPmN1cnJlbnRfcnN0b3A7CisgIGppdHRlciA9IHByaXYtPmN1cnJlbnRfaml0dGVyOworCisgIGlmIChqaXR0ZXIgPCAwKSB7CisgICAgLyogdGhpcyBpcyB0aGUgdGltZSB0aGUgYnVmZmVyIGVudGVyZWQgdGhlIHNpbmsgKi8KKyAgICBpZiAoc3RhcnQgPCAtaml0dGVyKQorICAgICAgZW50ZXJlZCA9IDA7CisgICAgZWxzZQorICAgICAgZW50ZXJlZCA9IHN0YXJ0ICsgaml0dGVyOworICAgIGxlZnQgPSBzdGFydDsKKyAgfSBlbHNlIHsKKyAgICAvKiB0aGlzIGlzIHRoZSB0aW1lIHRoZSBidWZmZXIgZW50ZXJlZCB0aGUgc2luayAqLworICAgIGVudGVyZWQgPSBzdGFydCArIGppdHRlcjsKKyAgICAvKiB0aGlzIGlzIHRoZSB0aW1lIHRoZSBidWZmZXIgbGVmdCB0aGUgc2luayAqLworICAgIGxlZnQgPSBzdGFydCArIGppdHRlcjsKKyAgfQorCisgIC8qIGNhbGN1bGF0ZSBkdXJhdGlvbiBvZiB0aGUgYnVmZmVyICovCisgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoc3RvcCkgJiYgc3RvcCAhPSBzdGFydCkKKyAgICBkdXJhdGlvbiA9IHN0b3AgLSBzdGFydDsKKyAgZWxzZQorICAgIGR1cmF0aW9uID0gcHJpdi0+YXZnX2luX2RpZmY7CisKKyAgLyogaWYgd2UgaGF2ZSB0aGUgdGltZSB3aGVuIHRoZSBsYXN0IGJ1ZmZlciBsZWZ0IHVzLCBjYWxjdWxhdGUKKyAgICogcHJvY2Vzc2luZyB0aW1lICovCisgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocHJpdi0+bGFzdF9sZWZ0KSkgeworICAgIGlmIChlbnRlcmVkID4gcHJpdi0+bGFzdF9sZWZ0KSB7CisgICAgICBwdCA9IGVudGVyZWQgLSBwcml2LT5sYXN0X2xlZnQ7CisgICAgfSBlbHNlIHsKKyAgICAgIHB0ID0gMDsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgcHQgPSBwcml2LT5hdmdfcHQ7CisgIH0KKworICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9RT1MsIHNpbmssICJzdGFydDogJSIgR1NUX1RJTUVfRk9STUFUCisgICAgICAiLCBzdG9wICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBlbnRlcmVkICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBsZWZ0ICUiCisgICAgICBHU1RfVElNRV9GT1JNQVQgIiwgcHQ6ICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBkdXJhdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQKKyAgICAgICIsaml0dGVyICUiIEdfR0lOVDY0X0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAoc3RhcnQpLCBHU1RfVElNRV9BUkdTIChzdG9wKSwKKyAgICAgIEdTVF9USU1FX0FSR1MgKGVudGVyZWQpLCBHU1RfVElNRV9BUkdTIChsZWZ0KSwgR1NUX1RJTUVfQVJHUyAocHQpLAorICAgICAgR1NUX1RJTUVfQVJHUyAoZHVyYXRpb24pLCBqaXR0ZXIpOworCisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1FPUywgc2luaywgImF2Z19kdXJhdGlvbjogJSIgR1NUX1RJTUVfRk9STUFUCisgICAgICAiLCBhdmdfcHQ6ICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBhdmdfcmF0ZTogJWciLAorICAgICAgR1NUX1RJTUVfQVJHUyAocHJpdi0+YXZnX2R1cmF0aW9uKSwgR1NUX1RJTUVfQVJHUyAocHJpdi0+YXZnX3B0KSwKKyAgICAgIHByaXYtPmF2Z19yYXRlKTsKKworICAvKiBjb2xsZWN0IHJ1bm5pbmcgYXZlcmFnZXMuIGZvciBmaXJzdCBvYnNlcnZhdGlvbnMsIHdlIGNvcHkgdGhlCisgICAqIHZhbHVlcyAqLworICBpZiAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChwcml2LT5hdmdfZHVyYXRpb24pKQorICAgIHByaXYtPmF2Z19kdXJhdGlvbiA9IGR1cmF0aW9uOworICBlbHNlCisgICAgcHJpdi0+YXZnX2R1cmF0aW9uID0gVVBEQVRFX1JVTk5JTkdfQVZHIChwcml2LT5hdmdfZHVyYXRpb24sIGR1cmF0aW9uKTsKKworICBpZiAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChwcml2LT5hdmdfcHQpKQorICAgIHByaXYtPmF2Z19wdCA9IHB0OworICBlbHNlCisgICAgcHJpdi0+YXZnX3B0ID0gVVBEQVRFX1JVTk5JTkdfQVZHIChwcml2LT5hdmdfcHQsIHB0KTsKKworICBpZiAocHJpdi0+YXZnX2R1cmF0aW9uICE9IDApCisgICAgcmF0ZSA9CisgICAgICAgIGdzdF9ndWludDY0X3RvX2dkb3VibGUgKHByaXYtPmF2Z19wdCkgLworICAgICAgICBnc3RfZ3VpbnQ2NF90b19nZG91YmxlIChwcml2LT5hdmdfZHVyYXRpb24pOworICBlbHNlCisgICAgcmF0ZSA9IDEuMDsKKworICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHByaXYtPmxhc3RfbGVmdCkpIHsKKyAgICBpZiAoZHJvcHBlZCB8fCBwcml2LT5hdmdfcmF0ZSA8IDAuMCkgeworICAgICAgcHJpdi0+YXZnX3JhdGUgPSByYXRlOworICAgIH0gZWxzZSB7CisgICAgICBpZiAocmF0ZSA+IDEuMCkKKyAgICAgICAgcHJpdi0+YXZnX3JhdGUgPSBVUERBVEVfUlVOTklOR19BVkdfTiAocHJpdi0+YXZnX3JhdGUsIHJhdGUpOworICAgICAgZWxzZQorICAgICAgICBwcml2LT5hdmdfcmF0ZSA9IFVQREFURV9SVU5OSU5HX0FWR19QIChwcml2LT5hdmdfcmF0ZSwgcmF0ZSk7CisgICAgfQorICB9CisKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfUU9TLCBzaW5rLAorICAgICAgInVwZGF0ZWQ6IGF2Z19kdXJhdGlvbjogJSIgR1NUX1RJTUVfRk9STUFUICIsIGF2Z19wdDogJSIgR1NUX1RJTUVfRk9STUFUCisgICAgICAiLCBhdmdfcmF0ZTogJWciLCBHU1RfVElNRV9BUkdTIChwcml2LT5hdmdfZHVyYXRpb24pLAorICAgICAgR1NUX1RJTUVfQVJHUyAocHJpdi0+YXZnX3B0KSwgcHJpdi0+YXZnX3JhdGUpOworCisKKyAgaWYgKHByaXYtPmF2Z19yYXRlID49IDAuMCkgeworICAgIEdzdFFPU1R5cGUgdHlwZTsKKyAgICBHc3RDbG9ja1RpbWVEaWZmIGRpZmY7CisKKyAgICAvKiBpZiB3ZSBoYXZlIGEgdmFsaWQgcmF0ZSwgc3RhcnQgc2VuZGluZyBRb1MgbWVzc2FnZXMgKi8KKyAgICBpZiAocHJpdi0+Y3VycmVudF9qaXR0ZXIgPCAwKSB7CisgICAgICAvKiBtYWtlIHN1cmUgd2UgbmV2ZXIgZ28gYmVsb3cgMCB3aGVuIGFkZGluZyB0aGUgaml0dGVyIHRvIHRoZQorICAgICAgICogdGltZXN0YW1wLiAqLworICAgICAgaWYgKHByaXYtPmN1cnJlbnRfcnN0YXJ0IDwgLXByaXYtPmN1cnJlbnRfaml0dGVyKQorICAgICAgICBwcml2LT5jdXJyZW50X2ppdHRlciA9IC1wcml2LT5jdXJyZW50X3JzdGFydDsKKyAgICB9CisKKyAgICBpZiAocHJpdi0+dGhyb3R0bGVfdGltZSA+IDApIHsKKyAgICAgIGRpZmYgPSBwcml2LT50aHJvdHRsZV90aW1lOworICAgICAgdHlwZSA9IEdTVF9RT1NfVFlQRV9USFJPVFRMRTsKKyAgICB9IGVsc2UgeworICAgICAgZGlmZiA9IHByaXYtPmN1cnJlbnRfaml0dGVyOworICAgICAgaWYgKGRpZmYgPD0gMCkKKyAgICAgICAgdHlwZSA9IEdTVF9RT1NfVFlQRV9PVkVSRkxPVzsKKyAgICAgIGVsc2UKKyAgICAgICAgdHlwZSA9IEdTVF9RT1NfVFlQRV9VTkRFUkZMT1c7CisgICAgfQorCisgICAgZ3N0X2Jhc2Vfc2lua19zZW5kX3FvcyAoc2luaywgdHlwZSwgcHJpdi0+YXZnX3JhdGUsIHByaXYtPmN1cnJlbnRfcnN0YXJ0LAorICAgICAgICBkaWZmKTsKKyAgfQorCisgIC8qIHJlY29yZCB3aGVuIHRoaXMgYnVmZmVyIHdpbGwgbGVhdmUgdXMgKi8KKyAgcHJpdi0+bGFzdF9sZWZ0ID0gbGVmdDsKK30KKworLyogcmVzZXQgYWxsIHFvcyBtZWFzdXJpbmcgKi8KK3N0YXRpYyB2b2lkCitnc3RfYmFzZV9zaW5rX3Jlc2V0X3FvcyAoR3N0QmFzZVNpbmsgKiBzaW5rKQoreworICBHc3RCYXNlU2lua1ByaXZhdGUgKnByaXY7CisKKyAgcHJpdiA9IHNpbmstPnByaXY7CisKKyAgcHJpdi0+bGFzdF9yZW5kZXJfdGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgIHByaXYtPnByZXZfcnN0YXJ0ID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgcHJpdi0+ZWFybGllc3RfaW5fdGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgIHByaXYtPmxhc3RfbGVmdCA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgIHByaXYtPmF2Z19kdXJhdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgIHByaXYtPmF2Z19wdCA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgIHByaXYtPmF2Z19yYXRlID0gLTEuMDsKKyAgcHJpdi0+YXZnX3JlbmRlciA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgIHByaXYtPmF2Z19pbl9kaWZmID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgcHJpdi0+cmVuZGVyZWQgPSAwOworICBwcml2LT5kcm9wcGVkID0gMDsKKworfQorCisvKiBDaGVja3MgaWYgdGhlIG9iamVjdCB3YXMgc2NoZWR1bGVkIHRvbyBsYXRlLgorICoKKyAqIHJzdGFydC9yc3RvcCBjb250YWluIHRoZSBydW5uaW5nX3RpbWUgc3RhcnQgYW5kIHN0b3AgdmFsdWVzCisgKiBvZiB0aGUgb2JqZWN0LgorICoKKyAqIHN0YXR1cyBhbmQgaml0dGVyIGNvbnRhaW4gdGhlIHJldHVybiB2YWx1ZXMgZnJvbSB0aGUgY2xvY2sgd2FpdC4KKyAqCisgKiByZXR1cm5zIFRSVUUgaWYgdGhlIGJ1ZmZlciB3YXMgdG9vIGxhdGUuCisgKi8KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2Jhc2Vfc2lua19pc190b29fbGF0ZSAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaywgR3N0TWluaU9iamVjdCAqIG9iaiwKKyAgICBHc3RDbG9ja1RpbWUgcnN0YXJ0LCBHc3RDbG9ja1RpbWUgcnN0b3AsCisgICAgR3N0Q2xvY2tSZXR1cm4gc3RhdHVzLCBHc3RDbG9ja1RpbWVEaWZmIGppdHRlcikKK3sKKyAgZ2Jvb2xlYW4gbGF0ZTsKKyAgZ3VpbnQ2NCBtYXhfbGF0ZW5lc3M7CisgIEdzdEJhc2VTaW5rUHJpdmF0ZSAqcHJpdjsKKworICBwcml2ID0gYmFzZXNpbmstPnByaXY7CisKKyAgbGF0ZSA9IEZBTFNFOworCisgIC8qIG9ubHkgZm9yIG9iamVjdHMgdGhhdCB3ZXJlIHRvbyBsYXRlICovCisgIGlmIChHX0xJS0VMWSAoc3RhdHVzICE9IEdTVF9DTE9DS19FQVJMWSkpCisgICAgZ290byBpbl90aW1lOworCisgIG1heF9sYXRlbmVzcyA9IGJhc2VzaW5rLT5tYXhfbGF0ZW5lc3M7CisKKyAgLyogY2hlY2sgaWYgZnJhbWUgZHJvcHBpbmcgaXMgZW5hYmxlZCAqLworICBpZiAobWF4X2xhdGVuZXNzID09IC0xKQorICAgIGdvdG8gbm9fZHJvcDsKKworICAvKiBvbmx5IGNoZWNrIGZvciBidWZmZXJzICovCisgIGlmIChHX1VOTElLRUxZICghR1NUX0lTX0JVRkZFUiAob2JqKSkpCisgICAgZ290byBub3RfYnVmZmVyOworCisgIC8qIGNhbid0IGRvIGNoZWNrIGlmIHdlIGRvbid0IGhhdmUgYSB0aW1lc3RhbXAgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKCFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocnN0YXJ0KSkpCisgICAgZ290byBub190aW1lc3RhbXA7CisKKyAgLyogd2UgY2FuIGFkZCBhIHZhbGlkIHN0b3AgdGltZSAqLworICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHJzdG9wKSkKKyAgICBtYXhfbGF0ZW5lc3MgKz0gcnN0b3A7CisgIGVsc2UgeworICAgIG1heF9sYXRlbmVzcyArPSByc3RhcnQ7CisgICAgLyogbm8gc3RvcCB0aW1lLCB1c2UgYXZnIGZyYW1lIGRpZmYgKi8KKyAgICBpZiAocHJpdi0+YXZnX2luX2RpZmYgIT0gLTEpCisgICAgICBtYXhfbGF0ZW5lc3MgKz0gcHJpdi0+YXZnX2luX2RpZmY7CisgIH0KKworICAvKiBpZiB0aGUgaml0dGVyIGJpZ2dlciB0aGFuIGR1cmF0aW9uIGFuZCBsYXRlbmVzcyB3ZSBhcmUgdG9vIGxhdGUgKi8KKyAgaWYgKChsYXRlID0gcnN0YXJ0ICsgaml0dGVyID4gbWF4X2xhdGVuZXNzKSkgeworICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1BFUkZPUk1BTkNFLCBiYXNlc2luaywKKyAgICAgICAgImJ1ZmZlciBpcyB0b28gbGF0ZSAlIiBHU1RfVElNRV9GT1JNQVQKKyAgICAgICAgIiA+ICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAocnN0YXJ0ICsgaml0dGVyKSwKKyAgICAgICAgR1NUX1RJTUVfQVJHUyAobWF4X2xhdGVuZXNzKSk7CisgICAgLyogISFlbWVyZ2VuY3khISwgaWYgd2UgZGlkIG5vdCByZWNlaXZlIGFueXRoaW5nIHZhbGlkIGZvciBtb3JlIHRoYW4gYQorICAgICAqIHNlY29uZCwgcmVuZGVyIGl0IGFueXdheSBzbyB0aGUgdXNlciBzZWVzIHNvbWV0aGluZyAqLworICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocHJpdi0+bGFzdF9yZW5kZXJfdGltZSkgJiYKKyAgICAgICAgcnN0YXJ0IC0gcHJpdi0+bGFzdF9yZW5kZXJfdGltZSA+IEdTVF9TRUNPTkQpIHsKKyAgICAgIGxhdGUgPSBGQUxTRTsKKyAgICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKGJhc2VzaW5rLCBDT1JFLCBDTE9DSywKKyAgICAgICAgICAoXygiQSBsb3Qgb2YgYnVmZmVycyBhcmUgYmVpbmcgZHJvcHBlZC4iKSksCisgICAgICAgICAgKCJUaGVyZSBtYXkgYmUgYSB0aW1lc3RhbXBpbmcgcHJvYmxlbSwgb3IgdGhpcyBjb21wdXRlciBpcyB0b28gc2xvdy4iKSk7CisgICAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9QRVJGT1JNQU5DRSwgYmFzZXNpbmssCisgICAgICAgICAgIioqZW1lcmdlbmN5KiogbGFzdCBidWZmZXIgYXQgJSIgR1NUX1RJTUVfRk9STUFUICIgPiBHU1RfU0VDT05EIiwKKyAgICAgICAgICBHU1RfVElNRV9BUkdTIChwcml2LT5sYXN0X3JlbmRlcl90aW1lKSk7CisgICAgfQorICB9CisKK2RvbmU6CisgIGlmICghbGF0ZSB8fCAhR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHByaXYtPmxhc3RfcmVuZGVyX3RpbWUpKSB7CisgICAgcHJpdi0+bGFzdF9yZW5kZXJfdGltZSA9IHJzdGFydDsKKyAgICAvKiB0aGUgbmV4dCBhbGxvd2VkIGlucHV0IHRpbWVzdGFtcCAqLworICAgIGlmIChwcml2LT50aHJvdHRsZV90aW1lID4gMCkKKyAgICAgIHByaXYtPmVhcmxpZXN0X2luX3RpbWUgPSByc3RhcnQgKyBwcml2LT50aHJvdHRsZV90aW1lOworICB9CisgIHJldHVybiBsYXRlOworCisgIC8qIGFsbCBpcyBmaW5lICovCitpbl90aW1lOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJvYmplY3Qgd2FzIHNjaGVkdWxlZCBpbiB0aW1lIik7CisgICAgZ290byBkb25lOworICB9Citub19kcm9wOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJmcmFtZSBkcm9wcGluZyBkaXNhYmxlZCIpOworICAgIGdvdG8gZG9uZTsKKyAgfQorbm90X2J1ZmZlcjoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAib2JqZWN0IGlzIG5vdCBhIGJ1ZmZlciIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorbm9fdGltZXN0YW1wOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJidWZmZXIgaGFzIG5vIHRpbWVzdGFtcCIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCisvKiBjYWxsZWQgYmVmb3JlIGFuZCBhZnRlciBjYWxsaW5nIHRoZSByZW5kZXIgdm1ldGhvZC4gSXQga2VlcHMgdHJhY2sgb2YgaG93CisgKiBtdWNoIHRpbWUgd2FzIHNwZW50IGluIHRoZSByZW5kZXIgbWV0aG9kIGFuZCBpcyB1c2VkIHRvIGNoZWNrIGlmIHdlIGFyZQorICogZmxvb2RlZCAqLworc3RhdGljIHZvaWQKK2dzdF9iYXNlX3NpbmtfZG9fcmVuZGVyX3N0YXRzIChHc3RCYXNlU2luayAqIGJhc2VzaW5rLCBnYm9vbGVhbiBzdGFydCkKK3sKKyAgR3N0QmFzZVNpbmtQcml2YXRlICpwcml2OworCisgIHByaXYgPSBiYXNlc2luay0+cHJpdjsKKworICBpZiAoc3RhcnQpIHsKKyAgICBwcml2LT5zdGFydCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7CisgIH0gZWxzZSB7CisgICAgR3N0Q2xvY2tUaW1lIGVsYXBzZWQ7CisKKyAgICBwcml2LT5zdG9wID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKKworICAgIGVsYXBzZWQgPSBHU1RfQ0xPQ0tfRElGRiAocHJpdi0+c3RhcnQsIHByaXYtPnN0b3ApOworCisgICAgaWYgKCFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocHJpdi0+YXZnX3JlbmRlcikpCisgICAgICBwcml2LT5hdmdfcmVuZGVyID0gZWxhcHNlZDsKKyAgICBlbHNlCisgICAgICBwcml2LT5hdmdfcmVuZGVyID0gVVBEQVRFX1JVTk5JTkdfQVZHIChwcml2LT5hdmdfcmVuZGVyLCBlbGFwc2VkKTsKKworICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1FPUywgYmFzZXNpbmssCisgICAgICAgICJhdmdfcmVuZGVyOiAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKHByaXYtPmF2Z19yZW5kZXIpKTsKKyAgfQorfQorCisvKiB3aXRoIFNUUkVBTV9MT0NLLCBQUkVST0xMX0xPQ0ssCisgKgorICogU3luY2hyb25pemUgdGhlIG9iamVjdCBvbiB0aGUgY2xvY2sgYW5kIHRoZW4gcmVuZGVyIGl0LgorICoKKyAqIHRha2VzIG93bmVyc2hpcCBvZiBvYmouCisgKi8KK3N0YXRpYyBHc3RGbG93UmV0dXJuCitnc3RfYmFzZV9zaW5rX3JlbmRlcl9vYmplY3QgKEdzdEJhc2VTaW5rICogYmFzZXNpbmssIEdzdFBhZCAqIHBhZCwKKyAgICBndWludDggb2JqX3R5cGUsIGdwb2ludGVyIG9iaikKK3sKKyAgR3N0Rmxvd1JldHVybiByZXQ7CisgIEdzdEJhc2VTaW5rQ2xhc3MgKmJjbGFzczsKKyAgZ2Jvb2xlYW4gbGF0ZSwgc3RlcF9lbmQ7CisgIGdwb2ludGVyIHN5bmNfb2JqOworICBHc3RCYXNlU2lua1ByaXZhdGUgKnByaXY7CisKKyAgcHJpdiA9IGJhc2VzaW5rLT5wcml2OworCisgIGlmIChPQkpfSVNfQlVGRkVSTElTVCAob2JqX3R5cGUpKSB7CisgICAgLyoKKyAgICAgKiBJZiBidWZmZXIgbGlzdCwgdXNlIHRoZSBmaXJzdCBncm91cCBidWZmZXIgd2l0aGluIHRoZSBsaXN0CisgICAgICogZm9yIHN5bmNpbmcKKyAgICAgKi8KKyAgICBzeW5jX29iaiA9IGdzdF9idWZmZXJfbGlzdF9nZXQgKEdTVF9CVUZGRVJfTElTVF9DQVNUIChvYmopLCAwKTsKKyAgICBnX2Fzc2VydCAoTlVMTCAhPSBzeW5jX29iaik7CisgIH0gZWxzZSB7CisgICAgc3luY19vYmogPSBvYmo7CisgIH0KKworYWdhaW46CisgIGxhdGUgPSBGQUxTRTsKKyAgc3RlcF9lbmQgPSBGQUxTRTsKKworICAvKiBzeW5jaHJvbml6ZSB0aGlzIG9iamVjdCwgbm9uIHN5bmNhYmxlIG9iamVjdHMgcmV0dXJuIE9LCisgICAqIGltbWVkaWF0ZWx5LiAqLworICByZXQgPQorICAgICAgZ3N0X2Jhc2Vfc2lua19kb19zeW5jIChiYXNlc2luaywgcGFkLCBzeW5jX29iaiwgJmxhdGUsICZzdGVwX2VuZCwKKyAgICAgIG9ial90eXBlKTsKKyAgaWYgKEdfVU5MSUtFTFkgKHJldCAhPSBHU1RfRkxPV19PSykpCisgICAgZ290byBzeW5jX2ZhaWxlZDsKKworICAvKiBhbmQgbm93IHJlbmRlciwgZXZlbnQgb3IgYnVmZmVyL2J1ZmZlciBsaXN0LiAqLworICBpZiAoR19MSUtFTFkgKE9CSl9JU19CVUZGRVJGVUxMIChvYmpfdHlwZSkpKSB7CisgICAgLyogZHJvcCBsYXRlIGJ1ZmZlcnMgdW5jb25kaXRpb25hbGx5LCBsZXQncyBob3BlIGl0J3MgdW5saWtlbHkgKi8KKyAgICBpZiAoR19VTkxJS0VMWSAobGF0ZSkpCisgICAgICBnb3RvIGRyb3BwZWQ7CisKKyAgICBiY2xhc3MgPSBHU1RfQkFTRV9TSU5LX0dFVF9DTEFTUyAoYmFzZXNpbmspOworCisgICAgaWYgKEdfTElLRUxZICgoT0JKX0lTX0JVRkZFUkxJU1QgKG9ial90eXBlKSAmJiBiY2xhc3MtPnJlbmRlcl9saXN0KSB8fAorICAgICAgICAgICAgKCFPQkpfSVNfQlVGRkVSTElTVCAob2JqX3R5cGUpICYmIGJjbGFzcy0+cmVuZGVyKSkpIHsKKyAgICAgIGdpbnQgZG9fcW9zOworCisgICAgICAvKiByZWFkIG9uY2UsIHRvIGdldCBzYW1lIHZhbHVlIGJlZm9yZSBhbmQgYWZ0ZXIgKi8KKyAgICAgIGRvX3FvcyA9IGdfYXRvbWljX2ludF9nZXQgKCZwcml2LT5xb3NfZW5hYmxlZCk7CisKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAicmVuZGVyaW5nIG9iamVjdCAlcCIsIG9iaik7CisKKyAgICAgIC8qIHJlY29yZCByZW5kZXJpbmcgdGltZSBmb3IgUW9TIGFuZCBzdGF0cyAqLworICAgICAgaWYgKGRvX3FvcykKKyAgICAgICAgZ3N0X2Jhc2Vfc2lua19kb19yZW5kZXJfc3RhdHMgKGJhc2VzaW5rLCBUUlVFKTsKKworICAgICAgaWYgKCFPQkpfSVNfQlVGRkVSTElTVCAob2JqX3R5cGUpKSB7CisgICAgICAgIEdzdEJ1ZmZlciAqYnVmOworCisgICAgICAgIC8qIEZvciBidWZmZXIgbGlzdHMgZG8gbm90IHNldCBsYXN0IGJ1ZmZlci4gQ3JlYXRpbmcgYnVmZmVyCisgICAgICAgICAqIHdpdGggbWVhbmluZ2Z1bCBkYXRhIGNhbiBiZSBkb25lIG9ubHkgd2l0aCBtZW1jcHkgd2hpY2ggd2lsbAorICAgICAgICAgKiBzaWduaWZpY2FudGx5IGFmZmVjdCBwZXJmb3JtYW5jZSAqLworICAgICAgICBidWYgPSBHU1RfQlVGRkVSX0NBU1QgKG9iaik7CisgICAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X2xhc3RfYnVmZmVyIChiYXNlc2luaywgYnVmKTsKKworICAgICAgICByZXQgPSBiY2xhc3MtPnJlbmRlciAoYmFzZXNpbmssIGJ1Zik7CisgICAgICB9IGVsc2UgeworICAgICAgICBHc3RCdWZmZXJMaXN0ICpidWZsaXN0OworCisgICAgICAgIGJ1Zmxpc3QgPSBHU1RfQlVGRkVSX0xJU1RfQ0FTVCAob2JqKTsKKworICAgICAgICByZXQgPSBiY2xhc3MtPnJlbmRlcl9saXN0IChiYXNlc2luaywgYnVmbGlzdCk7CisgICAgICB9CisKKyAgICAgIGlmIChkb19xb3MpCisgICAgICAgIGdzdF9iYXNlX3NpbmtfZG9fcmVuZGVyX3N0YXRzIChiYXNlc2luaywgRkFMU0UpOworCisgICAgICBpZiAocmV0ID09IEdTVF9GTE9XX1NURVApCisgICAgICAgIGdvdG8gYWdhaW47CisKKyAgICAgIGlmIChHX1VOTElLRUxZIChiYXNlc2luay0+Zmx1c2hpbmcpKQorICAgICAgICBnb3RvIGZsdXNoaW5nOworCisgICAgICBwcml2LT5yZW5kZXJlZCsrOworICAgIH0KKyAgfSBlbHNlIGlmIChHX0xJS0VMWSAoT0JKX0lTX0VWRU5UIChvYmpfdHlwZSkpKSB7CisgICAgR3N0RXZlbnQgKmV2ZW50ID0gR1NUX0VWRU5UX0NBU1QgKG9iaik7CisgICAgZ2Jvb2xlYW4gZXZlbnRfcmVzID0gVFJVRTsKKyAgICBHc3RFdmVudFR5cGUgdHlwZTsKKworICAgIGJjbGFzcyA9IEdTVF9CQVNFX1NJTktfR0VUX0NMQVNTIChiYXNlc2luayk7CisKKyAgICB0eXBlID0gR1NUX0VWRU5UX1RZUEUgKGV2ZW50KTsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAicmVuZGVyaW5nIGV2ZW50ICVwLCB0eXBlICVzIiwgb2JqLAorICAgICAgICBnc3RfZXZlbnRfdHlwZV9nZXRfbmFtZSAodHlwZSkpOworCisgICAgaWYgKGJjbGFzcy0+ZXZlbnQpCisgICAgICBldmVudF9yZXMgPSBiY2xhc3MtPmV2ZW50IChiYXNlc2luaywgZXZlbnQpOworCisgICAgLyogd2hlbiB3ZSBnZXQgaGVyZSB3ZSBjb3VsZCBiZSBmbHVzaGluZyBhZ2FpbiB3aGVuIHRoZSBldmVudCBoYW5kbGVyIGNhbGxzCisgICAgICogX3dhaXRfZW9zKCkuIFdlIGhhdmUgdG8gaWdub3JlIHRoaXMgb2JqZWN0IGluIHRoYXQgY2FzZS4gKi8KKyAgICBpZiAoR19VTkxJS0VMWSAoYmFzZXNpbmstPmZsdXNoaW5nKSkKKyAgICAgIGdvdG8gZmx1c2hpbmc7CisKKyAgICBpZiAoR19MSUtFTFkgKGV2ZW50X3JlcykpIHsKKyAgICAgIGd1aW50MzIgc2VxbnVtOworCisgICAgICBzZXFudW0gPSBiYXNlc2luay0+cHJpdi0+c2VxbnVtID0gZ3N0X2V2ZW50X2dldF9zZXFudW0gKGV2ZW50KTsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiR290IHNlcW51bSAjJSIgR19HVUlOVDMyX0ZPUk1BVCwgc2VxbnVtKTsKKworICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKKyAgICAgICAgeworICAgICAgICAgIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAgICAgICAgICAvKiB0aGUgRU9TIGV2ZW50IGlzIGNvbXBsZXRlbHkgaGFuZGxlZCBzbyB3ZSBtYXJrCisgICAgICAgICAgICogb3Vyc2VsdmVzIGFzIGJlaW5nIGluIHRoZSBFT1Mgc3RhdGUuIGVvcyBpcyBhbHNvCisgICAgICAgICAgICogcHJvdGVjdGVkIGJ5IHRoZSBvYmplY3QgbG9jayBzbyB3ZSBjYW4gcmVhZCBpdCB3aGVuCisgICAgICAgICAgICogYW5zd2VyaW5nIHRoZSBQT1NJVElPTiBxdWVyeS4gKi8KKyAgICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGJhc2VzaW5rKTsKKyAgICAgICAgICBiYXNlc2luay0+ZW9zID0gVFJVRTsKKyAgICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNpbmspOworCisgICAgICAgICAgLyogb2ssIG5vdyB3ZSBjYW4gcG9zdCB0aGUgbWVzc2FnZSAqLworICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiTm93IHBvc3RpbmcgRU9TIik7CisKKyAgICAgICAgICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2VvcyAoR1NUX09CSkVDVF9DQVNUIChiYXNlc2luaykpOworICAgICAgICAgIGdzdF9tZXNzYWdlX3NldF9zZXFudW0gKG1lc3NhZ2UsIHNlcW51bSk7CisgICAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChiYXNlc2luayksIG1lc3NhZ2UpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6CisgICAgICAgICAgLyogY29uZmlndXJlIHRoZSBzZWdtZW50ICovCisgICAgICAgICAgZ3N0X2Jhc2Vfc2lua19jb25maWd1cmVfc2VnbWVudCAoYmFzZXNpbmssIHBhZCwgZXZlbnQsCisgICAgICAgICAgICAgICZiYXNlc2luay0+c2VnbWVudCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR1NUX0VWRU5UX1RBRzoKKyAgICAgICAgeworICAgICAgICAgIEdzdFRhZ0xpc3QgKnRhZ2xpc3Q7CisKKyAgICAgICAgICBnc3RfZXZlbnRfcGFyc2VfdGFnIChldmVudCwgJnRhZ2xpc3QpOworCisgICAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChiYXNlc2luayksCisgICAgICAgICAgICAgIGdzdF9tZXNzYWdlX25ld190YWcgKEdTVF9PQkpFQ1RfQ0FTVCAoYmFzZXNpbmspLAorICAgICAgICAgICAgICAgICAgZ3N0X3RhZ19saXN0X2NvcHkgKHRhZ2xpc3QpKSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHU1RfRVZFTlRfU0lOS19NRVNTQUdFOgorICAgICAgICB7CisgICAgICAgICAgR3N0TWVzc2FnZSAqbXNnID0gTlVMTDsKKworICAgICAgICAgIGdzdF9ldmVudF9wYXJzZV9zaW5rX21lc3NhZ2UgKGV2ZW50LCAmbXNnKTsKKworICAgICAgICAgIGlmIChtc2cpCisgICAgICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKGJhc2VzaW5rKSwgbXNnKTsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgfSBlbHNlIHsKKyAgICBnX3JldHVybl92YWxfaWZfcmVhY2hlZCAoR1NUX0ZMT1dfRVJST1IpOworICB9CisKK2RvbmU6CisgIGlmIChzdGVwX2VuZCkgeworICAgIC8qIHRoZSBzdGVwIGVuZGVkLCBjaGVjayBpZiB3ZSBuZWVkIHRvIGFjdGl2YXRlIGEgbmV3IHN0ZXAgKi8KKyAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgInN0ZXAgZW5kZWQiKTsKKyAgICBzdG9wX3N0ZXBwaW5nIChiYXNlc2luaywgJmJhc2VzaW5rLT5zZWdtZW50LCAmcHJpdi0+Y3VycmVudF9zdGVwLAorICAgICAgICBwcml2LT5jdXJyZW50X3JzdGFydCwgcHJpdi0+Y3VycmVudF9yc3RvcCwgYmFzZXNpbmstPmVvcyk7CisgICAgZ290byBhZ2FpbjsKKyAgfQorCisgIGdzdF9iYXNlX3NpbmtfcGVyZm9ybV9xb3MgKGJhc2VzaW5rLCBsYXRlKTsKKworICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgIm9iamVjdCB1bnJlZiBhZnRlciByZW5kZXIgJXAiLCBvYmopOworICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChvYmopKTsKKyAgcmV0dXJuIHJldDsKKworICAvKiBFUlJPUlMgKi8KK3N5bmNfZmFpbGVkOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJkb19zeW5jIHJldHVybmVkICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOworICAgIGdvdG8gZG9uZTsKKyAgfQorZHJvcHBlZDoKKyAgeworICAgIHByaXYtPmRyb3BwZWQrKzsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgImJ1ZmZlciBsYXRlLCBkcm9wcGluZyIpOworCisgICAgaWYgKGdfYXRvbWljX2ludF9nZXQgKCZwcml2LT5xb3NfZW5hYmxlZCkpIHsKKyAgICAgIEdzdE1lc3NhZ2UgKnFvc19tc2c7CisgICAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBkdXJhdGlvbjsKKworICAgICAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKEdTVF9CVUZGRVJfQ0FTVCAoc3luY19vYmopKTsKKyAgICAgIGR1cmF0aW9uID0gR1NUX0JVRkZFUl9EVVJBVElPTiAoR1NUX0JVRkZFUl9DQVNUIChzeW5jX29iaikpOworCisgICAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9RT1MsIGJhc2VzaW5rLAorICAgICAgICAgICJxb3M6IGRyb3BwZWQgYnVmZmVyIHJ0ICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBzdCAlIiBHU1RfVElNRV9GT1JNQVQKKyAgICAgICAgICAiLCB0cyAlIiBHU1RfVElNRV9GT1JNQVQgIiwgZHVyICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgICAgICBHU1RfVElNRV9BUkdTIChwcml2LT5jdXJyZW50X3JzdGFydCksCisgICAgICAgICAgR1NUX1RJTUVfQVJHUyAocHJpdi0+Y3VycmVudF9zc3RhcnQpLCBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXApLAorICAgICAgICAgIEdTVF9USU1FX0FSR1MgKGR1cmF0aW9uKSk7CisgICAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9RT1MsIGJhc2VzaW5rLAorICAgICAgICAgICJxb3M6IHJlbmRlcmVkICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgZHJvcHBlZCAlIiBHX0dVSU5UNjRfRk9STUFULAorICAgICAgICAgIHByaXYtPnJlbmRlcmVkLCBwcml2LT5kcm9wcGVkKTsKKworICAgICAgcW9zX21zZyA9CisgICAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3FvcyAoR1NUX09CSkVDVF9DQVNUIChiYXNlc2luayksIGJhc2VzaW5rLT5zeW5jLAorICAgICAgICAgIHByaXYtPmN1cnJlbnRfcnN0YXJ0LCBwcml2LT5jdXJyZW50X3NzdGFydCwgdGltZXN0YW1wLCBkdXJhdGlvbik7CisgICAgICBnc3RfbWVzc2FnZV9zZXRfcW9zX3ZhbHVlcyAocW9zX21zZywgcHJpdi0+Y3VycmVudF9qaXR0ZXIsIHByaXYtPmF2Z19yYXRlLAorICAgICAgICAgIDEwMDAwMDApOworICAgICAgZ3N0X21lc3NhZ2Vfc2V0X3Fvc19zdGF0cyAocW9zX21zZywgR1NUX0ZPUk1BVF9CVUZGRVJTLCBwcml2LT5yZW5kZXJlZCwKKyAgICAgICAgICBwcml2LT5kcm9wcGVkKTsKKyAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoYmFzZXNpbmspLCBxb3NfbXNnKTsKKyAgICB9CisgICAgZ290byBkb25lOworICB9CitmbHVzaGluZzoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAid2UgYXJlIGZsdXNoaW5nLCBpZ25vcmUgb2JqZWN0Iik7CisgICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChvYmopOworICAgIHJldHVybiBHU1RfRkxPV19XUk9OR19TVEFURTsKKyAgfQorfQorCisvKiB3aXRoIFNUUkVBTV9MT0NLLCBQUkVST0xMX0xPQ0sKKyAqCisgKiBQZXJmb3JtIHByZXJvbGwgb24gdGhlIGdpdmVuIG9iamVjdC4gRm9yIGJ1ZmZlcnMgdGhpcyBtZWFucworICogY2FsbGluZyB0aGUgcHJlcm9sbCBzdWJjbGFzcyBtZXRob2QuCisgKiBJZiB0aGF0IHN1Y2NlZWRzLCB0aGUgc3RhdGUgd2lsbCBiZSBjb21taXRlZC4KKyAqCisgKiBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIG93bmVyc2hpcCBvZiBvYmouCisgKi8KK3N0YXRpYyBHc3RGbG93UmV0dXJuCitnc3RfYmFzZV9zaW5rX3ByZXJvbGxfb2JqZWN0IChHc3RCYXNlU2luayAqIGJhc2VzaW5rLCBndWludDggb2JqX3R5cGUsCisgICAgR3N0TWluaU9iamVjdCAqIG9iaikKK3sKKyAgR3N0Rmxvd1JldHVybiByZXQ7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJwcmVyb2xsaW5nIG9iamVjdCAlcCIsIG9iaik7CisKKyAgLyogaWYgaXQncyBhIGJ1ZmZlciwgd2UgbmVlZCB0byBjYWxsIHRoZSBwcmVyb2xsIG1ldGhvZCAqLworICBpZiAoR19MSUtFTFkgKE9CSl9JU19CVUZGRVJGVUxMIChvYmpfdHlwZSkgJiYgYmFzZXNpbmstPnByaXYtPmNhbGxfcHJlcm9sbCkpIHsKKyAgICBHc3RCYXNlU2lua0NsYXNzICpiY2xhc3M7CisgICAgR3N0QnVmZmVyICpidWY7CisgICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKKworICAgIGlmIChPQkpfSVNfQlVGRkVSTElTVCAob2JqX3R5cGUpKSB7CisgICAgICBidWYgPSBnc3RfYnVmZmVyX2xpc3RfZ2V0IChHU1RfQlVGRkVSX0xJU1RfQ0FTVCAob2JqKSwgMCk7CisgICAgICBnX2Fzc2VydCAoTlVMTCAhPSBidWYpOworICAgIH0gZWxzZSB7CisgICAgICBidWYgPSBHU1RfQlVGRkVSX0NBU1QgKG9iaik7CisgICAgfQorCisgICAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1Zik7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgInByZXJvbGwgYnVmZmVyICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgICAgR1NUX1RJTUVfQVJHUyAodGltZXN0YW1wKSk7CisKKyAgICAvKgorICAgICAqIEZvciBidWZmZXIgbGlzdHMgZG8gbm90IHNldCBsYXN0IGJ1ZmZlci4gQ3JlYXRpbmcgYnVmZmVyCisgICAgICogd2l0aCBtZWFuaW5nZnVsIGRhdGEgY2FuIGJlIGRvbmUgb25seSB3aXRoIG1lbWNweSB3aGljaCB3aWxsCisgICAgICogc2lnbmlmaWNhbnRseSBhZmZlY3QgcGVyZm9ybWFuY2UKKyAgICAgKi8KKyAgICBpZiAoIU9CSl9JU19CVUZGRVJMSVNUIChvYmpfdHlwZSkpIHsKKyAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X2xhc3RfYnVmZmVyIChiYXNlc2luaywgYnVmKTsKKyAgICB9CisKKyAgICBiY2xhc3MgPSBHU1RfQkFTRV9TSU5LX0dFVF9DTEFTUyAoYmFzZXNpbmspOworICAgIGlmIChiY2xhc3MtPnByZXJvbGwpCisgICAgICBpZiAoKHJldCA9IGJjbGFzcy0+cHJlcm9sbCAoYmFzZXNpbmssIGJ1ZikpICE9IEdTVF9GTE9XX09LKQorICAgICAgICBnb3RvIHByZXJvbGxfZmFpbGVkOworCisgICAgYmFzZXNpbmstPnByaXYtPmNhbGxfcHJlcm9sbCA9IEZBTFNFOworICB9CisKKyAgLyogY29tbWl0IHN0YXRlICovCisgIGlmIChHX0xJS0VMWSAoYmFzZXNpbmstPnBsYXlpbmdfYXN5bmMpKSB7CisgICAgaWYgKEdfVU5MSUtFTFkgKCFnc3RfYmFzZV9zaW5rX2NvbW1pdF9zdGF0ZSAoYmFzZXNpbmspKSkKKyAgICAgIGdvdG8gc3RvcHBpbmc7CisgIH0KKworICByZXR1cm4gR1NUX0ZMT1dfT0s7CisKKyAgLyogRVJST1JTICovCitwcmVyb2xsX2ZhaWxlZDoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAicHJlcm9sbCBmYWlsZWQsIGFib3J0IHN0YXRlIik7CisgICAgZ3N0X2VsZW1lbnRfYWJvcnRfc3RhdGUgKEdTVF9FTEVNRU5UX0NBU1QgKGJhc2VzaW5rKSk7CisgICAgcmV0dXJuIHJldDsKKyAgfQorc3RvcHBpbmc6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgInN0b3BwaW5nIHdoaWxlIGNvbW1pdGluZyBzdGF0ZSIpOworICAgIHJldHVybiBHU1RfRkxPV19XUk9OR19TVEFURTsKKyAgfQorfQorCisvKiB3aXRoIFNUUkVBTV9MT0NLLCBQUkVST0xMX0xPQ0sKKyAqCisgKiBRdWV1ZSBhbiBvYmplY3QgZm9yIHJlbmRlcmluZy4KKyAqIFRoZSBmaXJzdCBwcmVyb2xsYWJsZSBvYmplY3QgcXVldWVkIHdpbGwgY29tcGxldGUgdGhlIHByZXJvbGwuIElmIHRoZQorICogcHJlcm9sbCBxdWV1ZSBpcyBmaWxsZWQsIHdlIHJlbmRlciBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIHF1ZXVlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBvYmplY3QuCisgKi8KK3N0YXRpYyBHc3RGbG93UmV0dXJuCitnc3RfYmFzZV9zaW5rX3F1ZXVlX29iamVjdF91bmxvY2tlZCAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaywgR3N0UGFkICogcGFkLAorICAgIGd1aW50OCBvYmpfdHlwZSwgZ3BvaW50ZXIgb2JqLCBnYm9vbGVhbiBwcmVyb2xsYWJsZSkKK3sKKyAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKKyAgZ2ludCBsZW5ndGg7CisgIEdRdWV1ZSAqcTsKKworICBpZiAoR19VTkxJS0VMWSAoYmFzZXNpbmstPm5lZWRfcHJlcm9sbCkpIHsKKyAgICBpZiAoR19MSUtFTFkgKHByZXJvbGxhYmxlKSkKKyAgICAgIGJhc2VzaW5rLT5wcml2LT5wcmVyb2xsX3F1ZXVlZCsrOworCisgICAgbGVuZ3RoID0gYmFzZXNpbmstPnByaXYtPnByZXJvbGxfcXVldWVkOworCisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJub3cgJWQgcHJlcm9sbGVkIGl0ZW1zIiwgbGVuZ3RoKTsKKworICAgIC8qIGZpcnN0IHByZXJvbGxhYmxlIGl0ZW0gbmVlZHMgdG8gZmluaXNoIHRoZSBwcmVyb2xsICovCisgICAgaWYgKGxlbmd0aCA9PSAxKSB7CisgICAgICByZXQgPSBnc3RfYmFzZV9zaW5rX3ByZXJvbGxfb2JqZWN0IChiYXNlc2luaywgb2JqX3R5cGUsIG9iaik7CisgICAgICBpZiAoR19VTkxJS0VMWSAocmV0ICE9IEdTVF9GTE9XX09LKSkKKyAgICAgICAgZ290byBwcmVyb2xsX2ZhaWxlZDsKKyAgICB9CisgICAgLyogbmVlZCB0byByZWNoZWNrIGlmIHdlIG5lZWQgcHJlcm9sbCwgY29tbWl0IHN0YXRlIGR1cmluZyBwcmVyb2xsCisgICAgICogY291bGQgaGF2ZSBtYWRlIHVzIG5vdCBuZWVkIG1vcmUgcHJlcm9sbC4gKi8KKyAgICBpZiAoR19VTkxJS0VMWSAoYmFzZXNpbmstPm5lZWRfcHJlcm9sbCkpIHsKKyAgICAgIC8qIHNlZSBpZiB3ZSBjYW4gcmVuZGVyIG5vdywgaWYgd2UgY2FuJ3QgYWRkIHRoZSBvYmplY3QgdG8gdGhlIHByZXJvbGwKKyAgICAgICAqIHF1ZXVlLiAqLworICAgICAgaWYgKEdfVU5MSUtFTFkgKGxlbmd0aCA8PSAwKSkKKyAgICAgICAgZ290byBtb3JlX3ByZXJvbGw7CisgICAgfQorICB9CisgIC8qIHdlIGNhbiBzdGFydCByZW5kZXJpbmcgKG9yIGJsb2NraW5nKSB0aGUgcXVldWVkIG9iamVjdAorICAgKiBpZiBhbnkuICovCisgIHEgPSBiYXNlc2luay0+cHJpdi0+cHJlcm9sbF9xdWV1ZTsKKyAgd2hpbGUgKEdfVU5MSUtFTFkgKCFnX3F1ZXVlX2lzX2VtcHR5IChxKSkpIHsKKyAgICBHc3RNaW5pT2JqZWN0ICpvOworICAgIGd1aW50OCBvdDsKKworICAgIG8gPSBnX3F1ZXVlX3BvcF9oZWFkIChxKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgInJlbmRlcmluZyBxdWV1ZWQgb2JqZWN0ICVwIiwgbyk7CisKKyAgICBvdCA9IGdldF9vYmplY3RfdHlwZSAobyk7CisKKyAgICAvKiBkbyBzb21ldGhpbmcgd2l0aCB0aGUgcmV0dXJuIHZhbHVlICovCisgICAgcmV0ID0gZ3N0X2Jhc2Vfc2lua19yZW5kZXJfb2JqZWN0IChiYXNlc2luaywgcGFkLCBvdCwgbyk7CisgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKKyAgICAgIGdvdG8gZGVxdWV1ZV9mYWlsZWQ7CisgIH0KKworICAvKiBub3cgcmVuZGVyIHRoZSBvYmplY3QgKi8KKyAgcmV0ID0gZ3N0X2Jhc2Vfc2lua19yZW5kZXJfb2JqZWN0IChiYXNlc2luaywgcGFkLCBvYmpfdHlwZSwgb2JqKTsKKyAgYmFzZXNpbmstPnByaXYtPnByZXJvbGxfcXVldWVkID0gMDsKKworICByZXR1cm4gcmV0OworCisgIC8qIHNwZWNpYWwgY2FzZXMgKi8KK3ByZXJvbGxfZmFpbGVkOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJwcmVyb2xsIGZhaWxlZCwgcmVhc29uICVzIiwKKyAgICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOworICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKG9iaikpOworICAgIHJldHVybiByZXQ7CisgIH0KK21vcmVfcHJlcm9sbDoKKyAgeworICAgIC8qIGFkZCBvYmplY3QgdG8gdGhlIHF1ZXVlIGFuZCByZXR1cm4gKi8KKyAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgIm5lZWQgbW9yZSBwcmVyb2xsIGRhdGEiKTsKKyAgICBnX3F1ZXVlX3B1c2hfdGFpbCAoYmFzZXNpbmstPnByaXYtPnByZXJvbGxfcXVldWUsIG9iaik7CisgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICB9CitkZXF1ZXVlX2ZhaWxlZDoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAicmVuZGVyaW5nIHF1ZXVlZCBvYmplY3RzIGZhaWxlZCwgcmVhc29uICVzIiwKKyAgICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOworICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKG9iaikpOworICAgIHJldHVybiByZXQ7CisgIH0KK30KKworLyogd2l0aCBTVFJFQU1fTE9DSworICoKKyAqIFRoaXMgZnVuY3Rpb24gZ3JhYnMgdGhlIFBSRVJPTExfTE9DSyBhbmQgYWRkcyB0aGUgb2JqZWN0IHRvCisgKiB0aGUgcXVldWUuCisgKgorICogVGhpcyBmdW5jdGlvbiB0YWtlcyBvd25lcnNoaXAgb2Ygb2JqLgorICoKKyAqIE5vdGU6IE9ubHkgR3N0RXZlbnQgc2VlbSB0byBiZSBwYXNzZWQgdG8gdGhpcyBwcml2YXRlIG1ldGhvZAorICovCitzdGF0aWMgR3N0Rmxvd1JldHVybgorZ3N0X2Jhc2Vfc2lua19xdWV1ZV9vYmplY3QgKEdzdEJhc2VTaW5rICogYmFzZXNpbmssIEdzdFBhZCAqIHBhZCwKKyAgICBHc3RNaW5pT2JqZWN0ICogb2JqLCBnYm9vbGVhbiBwcmVyb2xsYWJsZSkKK3sKKyAgR3N0Rmxvd1JldHVybiByZXQ7CisKKyAgR1NUX0JBU0VfU0lOS19QUkVST0xMX0xPQ0sgKGJhc2VzaW5rKTsKKyAgaWYgKEdfVU5MSUtFTFkgKGJhc2VzaW5rLT5mbHVzaGluZykpCisgICAgZ290byBmbHVzaGluZzsKKworICBpZiAoR19VTkxJS0VMWSAoYmFzZXNpbmstPnByaXYtPnJlY2VpdmVkX2VvcykpCisgICAgZ290byB3YXNfZW9zOworCisgIHJldCA9CisgICAgICBnc3RfYmFzZV9zaW5rX3F1ZXVlX29iamVjdF91bmxvY2tlZCAoYmFzZXNpbmssIHBhZCwgX1BSX0lTX0VWRU5ULCBvYmosCisgICAgICBwcmVyb2xsYWJsZSk7CisgIEdTVF9CQVNFX1NJTktfUFJFUk9MTF9VTkxPQ0sgKGJhc2VzaW5rKTsKKworICByZXR1cm4gcmV0OworCisgIC8qIEVSUk9SUyAqLworZmx1c2hpbmc6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgInNpbmsgaXMgZmx1c2hpbmciKTsKKyAgICBHU1RfQkFTRV9TSU5LX1BSRVJPTExfVU5MT0NLIChiYXNlc2luayk7CisgICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChvYmopOworICAgIHJldHVybiBHU1RfRkxPV19XUk9OR19TVEFURTsKKyAgfQord2FzX2VvczoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLAorICAgICAgICAid2UgYXJlIEVPUywgZHJvcHBpbmcgb2JqZWN0LCByZXR1cm4gVU5FWFBFQ1RFRCIpOworICAgIEdTVF9CQVNFX1NJTktfUFJFUk9MTF9VTkxPQ0sgKGJhc2VzaW5rKTsKKyAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKG9iaik7CisgICAgcmV0dXJuIEdTVF9GTE9XX1VORVhQRUNURUQ7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9iYXNlX3NpbmtfZmx1c2hfc3RhcnQgKEdzdEJhc2VTaW5rICogYmFzZXNpbmssIEdzdFBhZCAqIHBhZCkKK3sKKyAgLyogbWFrZSBzdXJlIHdlIGFyZSBub3QgYmxvY2tlZCBvbiB0aGUgY2xvY2sgYWxzbyBjbGVhciBhbnkgcGVuZGluZworICAgKiBlb3Mgc3RhdGUuICovCisgIGdzdF9iYXNlX3Npbmtfc2V0X2ZsdXNoaW5nIChiYXNlc2luaywgcGFkLCBUUlVFKTsKKworICAvKiB3ZSBncmFiIHRoZSBzdHJlYW0gbG9jayBidXQgdGhhdCBpcyBub3QgbmVlZGVkIHNpbmNlIHNldHRpbmcgdGhlCisgICAqIHNpbmsgdG8gZmx1c2hpbmcgd291bGQgbWFrZSBzdXJlIG5vIHN0YXRlIGNvbW1pdCBpcyBiZWluZyBkb25lCisgICAqIGFueW1vcmUgKi8KKyAgR1NUX1BBRF9TVFJFQU1fTE9DSyAocGFkKTsKKyAgZ3N0X2Jhc2Vfc2lua19yZXNldF9xb3MgKGJhc2VzaW5rKTsKKyAgLyogYW5kIHdlIG5lZWQgdG8gY29tbWl0IG91ciBzdGF0ZSBhZ2FpbiBvbiB0aGUgbmV4dAorICAgKiBwcmVyb2xsZWQgYnVmZmVyICovCisgIGJhc2VzaW5rLT5wbGF5aW5nX2FzeW5jID0gVFJVRTsKKyAgaWYgKGJhc2VzaW5rLT5wcml2LT5hc3luY19lbmFibGVkKSB7CisgICAgZ3N0X2VsZW1lbnRfbG9zdF9zdGF0ZSAoR1NUX0VMRU1FTlRfQ0FTVCAoYmFzZXNpbmspKTsKKyAgfSBlbHNlIHsKKyAgICAvKiBzdGFydCB0aW1lIHJlc2V0IGluIGFib3ZlIGNhc2UgYXMgd2VsbDsKKyAgICAgKiBhcnJhbmdlcyBmb3IgYS5vLiBwcm9wZXIgcG9zaXRpb24gcmVwb3J0aW5nIHdoZW4gZmx1c2hpbmcgaW4gUEFVU0VEICovCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXJ0X3RpbWUgKEdTVF9FTEVNRU5UX0NBU1QgKGJhc2VzaW5rKSwgMCk7CisgICAgYmFzZXNpbmstPnByaXYtPmhhdmVfbGF0ZW5jeSA9IFRSVUU7CisgIH0KKyAgZ3N0X2Jhc2Vfc2lua19zZXRfbGFzdF9idWZmZXIgKGJhc2VzaW5rLCBOVUxMKTsKKyAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChwYWQpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2Jhc2Vfc2lua19mbHVzaF9zdG9wIChHc3RCYXNlU2luayAqIGJhc2VzaW5rLCBHc3RQYWQgKiBwYWQsCisgICAgZ2Jvb2xlYW4gcmVzZXRfdGltZSkKK3sKKyAgLyogdW5zZXQgZmx1c2hpbmcgc28gd2UgY2FuIGFjY2VwdCBuZXcgZGF0YSwgdGhpcyBhbHNvIGZsdXNoZXMgb3V0IGFueSBFT1MKKyAgICogZXZlbnQuICovCisgIGdzdF9iYXNlX3Npbmtfc2V0X2ZsdXNoaW5nIChiYXNlc2luaywgcGFkLCBGQUxTRSk7CisKKyAgLyogZm9yIHBvc2l0aW9uIHJlcG9ydGluZyAqLworICBHU1RfT0JKRUNUX0xPQ0sgKGJhc2VzaW5rKTsKKyAgYmFzZXNpbmstPnByaXYtPmN1cnJlbnRfc3N0YXJ0ID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgYmFzZXNpbmstPnByaXYtPmN1cnJlbnRfc3N0b3AgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICBiYXNlc2luay0+cHJpdi0+ZW9zX3J0aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgYmFzZXNpbmstPnByaXYtPmNhbGxfcHJlcm9sbCA9IFRSVUU7CisgIGJhc2VzaW5rLT5wcml2LT5jdXJyZW50X3N0ZXAudmFsaWQgPSBGQUxTRTsKKyAgYmFzZXNpbmstPnByaXYtPnBlbmRpbmdfc3RlcC52YWxpZCA9IEZBTFNFOworICBpZiAoYmFzZXNpbmstPnBhZF9tb2RlID09IEdTVF9BQ1RJVkFURV9QVVNIKSB7CisgICAgLyogd2UgbmVlZCBuZXcgc2VnbWVudCBpbmZvIGFmdGVyIHRoZSBmbHVzaC4gKi8KKyAgICBiYXNlc2luay0+aGF2ZV9uZXdzZWdtZW50ID0gRkFMU0U7CisgICAgaWYgKHJlc2V0X3RpbWUpIHsKKyAgICAgIGdzdF9zZWdtZW50X2luaXQgKCZiYXNlc2luay0+c2VnbWVudCwgR1NUX0ZPUk1BVF9VTkRFRklORUQpOworICAgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJmJhc2VzaW5rLT5jbGlwX3NlZ21lbnQsIEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKKyAgICB9CisgIH0KKyAgYmFzZXNpbmstPnByaXYtPnJlc2V0X3RpbWUgPSByZXNldF90aW1lOworICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNpbmspOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iYXNlX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiBldmVudCkKK3sKKyAgR3N0QmFzZVNpbmsgKmJhc2VzaW5rOworICBnYm9vbGVhbiByZXN1bHQgPSBUUlVFOworICBHc3RCYXNlU2lua0NsYXNzICpiY2xhc3M7CisKKyAgYmFzZXNpbmsgPSBHU1RfQkFTRV9TSU5LIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOworICBpZiAoR19VTkxJS0VMWSAoYmFzZXNpbmsgPT0gTlVMTCkpIHsKKyAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKworICBiY2xhc3MgPSBHU1RfQkFTRV9TSU5LX0dFVF9DTEFTUyAoYmFzZXNpbmspOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAicmVjZWl2ZWQgZXZlbnQgJXAgJSIgR1NUX1BUUl9GT1JNQVQsIGV2ZW50LAorICAgICAgZXZlbnQpOworCisgIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgeworICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKKyAgICB7CisgICAgICBHc3RGbG93UmV0dXJuIHJldDsKKworICAgICAgR1NUX0JBU0VfU0lOS19QUkVST0xMX0xPQ0sgKGJhc2VzaW5rKTsKKyAgICAgIGlmIChHX1VOTElLRUxZIChiYXNlc2luay0+Zmx1c2hpbmcpKQorICAgICAgICBnb3RvIGZsdXNoaW5nOworCisgICAgICBpZiAoR19VTkxJS0VMWSAoYmFzZXNpbmstPnByaXYtPnJlY2VpdmVkX2VvcykpCisgICAgICAgIGdvdG8gYWZ0ZXJfZW9zOworCisgICAgICAvKiB3ZSBzZXQgdGhlIHJlY2VpdmVkIEVPUyBmbGFnIGhlcmUgc28gdGhhdCB3ZSBjYW4gdXNlIGl0IHdoZW4gdGVzdGluZyBpZgorICAgICAgICogd2UgYXJlIHByZXJvbGxlZCBhbmQgdG8gcmVmdXNlIG1vcmUgYnVmZmVycy4gKi8KKyAgICAgIGJhc2VzaW5rLT5wcml2LT5yZWNlaXZlZF9lb3MgPSBUUlVFOworCisgICAgICAvKiBFT1MgaXMgYSBwcmVyb2xsYWJsZSBvYmplY3QsIHdlIGNhbGwgdGhlIHVubG9ja2VkIHZlcnNpb24gYmVjYXVzZSBpdAorICAgICAgICogZG9lcyBub3QgY2hlY2sgdGhlIHJlY2VpdmVkX2VvcyBmbGFnLiAqLworICAgICAgcmV0ID0gZ3N0X2Jhc2Vfc2lua19xdWV1ZV9vYmplY3RfdW5sb2NrZWQgKGJhc2VzaW5rLCBwYWQsCisgICAgICAgICAgX1BSX0lTX0VWRU5ULCBHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoZXZlbnQpLCBUUlVFKTsKKyAgICAgIGlmIChHX1VOTElLRUxZIChyZXQgIT0gR1NUX0ZMT1dfT0spKQorICAgICAgICByZXN1bHQgPSBGQUxTRTsKKworICAgICAgR1NUX0JBU0VfU0lOS19QUkVST0xMX1VOTE9DSyAoYmFzZXNpbmspOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX0VWRU5UX0NBUFM6CisgICAgeworICAgICAgR3N0Q2FwcyAqY2FwczsKKworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJjYXBzICVwIiwgZXZlbnQpOworCisgICAgICBnc3RfZXZlbnRfcGFyc2VfY2FwcyAoZXZlbnQsICZjYXBzKTsKKyAgICAgIGlmIChiY2xhc3MtPnNldF9jYXBzKQorICAgICAgICByZXN1bHQgPSBiY2xhc3MtPnNldF9jYXBzIChiYXNlc2luaywgY2Fwcyk7CisKKyAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6CisgICAgeworICAgICAgR3N0Rmxvd1JldHVybiByZXQ7CisKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAic2VnbWVudCAlcCIsIGV2ZW50KTsKKworICAgICAgR1NUX0JBU0VfU0lOS19QUkVST0xMX0xPQ0sgKGJhc2VzaW5rKTsKKyAgICAgIGlmIChHX1VOTElLRUxZIChiYXNlc2luay0+Zmx1c2hpbmcpKQorICAgICAgICBnb3RvIGZsdXNoaW5nOworCisgICAgICBpZiAoR19VTkxJS0VMWSAoYmFzZXNpbmstPnByaXYtPnJlY2VpdmVkX2VvcykpCisgICAgICAgIGdvdG8gYWZ0ZXJfZW9zOworCisgICAgICAvKiB0aGUgbmV3IHNlZ21lbnQgaXMgYSBub24gcHJlcm9sbGFibGUgaXRlbSBhbmQgZG9lcyBub3QgYmxvY2sgYW55dGhpbmcsCisgICAgICAgKiB3ZSBuZWVkIHRvIGNvbmZpZ3VyZSB0aGUgY3VycmVudCBjbGlwcGluZyBzZWdtZW50IGFuZCBpbnNlcnQgdGhlIGV2ZW50CisgICAgICAgKiBpbiB0aGUgcXVldWUgdG8gc2VyaWFsaXplIGl0IHdpdGggdGhlIGJ1ZmZlcnMgZm9yIHJlbmRlcmluZy4gKi8KKyAgICAgIGdzdF9iYXNlX3NpbmtfY29uZmlndXJlX3NlZ21lbnQgKGJhc2VzaW5rLCBwYWQsIGV2ZW50LAorICAgICAgICAgICZiYXNlc2luay0+Y2xpcF9zZWdtZW50KTsKKworICAgICAgcmV0ID0KKyAgICAgICAgICBnc3RfYmFzZV9zaW5rX3F1ZXVlX29iamVjdF91bmxvY2tlZCAoYmFzZXNpbmssIHBhZCwKKyAgICAgICAgICBfUFJfSVNfRVZFTlQsIEdTVF9NSU5JX09CSkVDVF9DQVNUIChldmVudCksIEZBTFNFKTsKKyAgICAgIGlmIChHX1VOTElLRUxZIChyZXQgIT0gR1NUX0ZMT1dfT0spKQorICAgICAgICByZXN1bHQgPSBGQUxTRTsKKyAgICAgIGVsc2UgeworICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGJhc2VzaW5rKTsKKyAgICAgICAgYmFzZXNpbmstPmhhdmVfbmV3c2VnbWVudCA9IFRSVUU7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiYXNlc2luayk7CisgICAgICB9CisgICAgICBHU1RfQkFTRV9TSU5LX1BSRVJPTExfVU5MT0NLIChiYXNlc2luayk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RBUlQ6CisgICAgICBpZiAoYmNsYXNzLT5ldmVudCkKKyAgICAgICAgYmNsYXNzLT5ldmVudCAoYmFzZXNpbmssIGV2ZW50KTsKKworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJmbHVzaC1zdGFydCAlcCIsIGV2ZW50KTsKKworICAgICAgZ3N0X2Jhc2Vfc2lua19mbHVzaF9zdGFydCAoYmFzZXNpbmssIHBhZCk7CisKKyAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKKyAgICB7CisgICAgICBnYm9vbGVhbiByZXNldF90aW1lOworCisgICAgICBpZiAoYmNsYXNzLT5ldmVudCkKKyAgICAgICAgYmNsYXNzLT5ldmVudCAoYmFzZXNpbmssIGV2ZW50KTsKKworICAgICAgZ3N0X2V2ZW50X3BhcnNlX2ZsdXNoX3N0b3AgKGV2ZW50LCAmcmVzZXRfdGltZSk7CisgICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgImZsdXNoLXN0b3AgJXAsIHJlc2V0X3RpbWU6ICVkIiwgZXZlbnQsCisgICAgICAgICAgcmVzZXRfdGltZSk7CisKKyAgICAgIGdzdF9iYXNlX3NpbmtfZmx1c2hfc3RvcCAoYmFzZXNpbmssIHBhZCwgcmVzZXRfdGltZSk7CisKKyAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAvKiBvdGhlciBldmVudHMgYXJlIHNlbnQgdG8gcXVldWUgb3Igc3ViY2xhc3MgZGVwZW5kaW5nIG9uIGlmIHRoZXkKKyAgICAgICAqIGFyZSBzZXJpYWxpemVkLiAqLworICAgICAgaWYgKEdTVF9FVkVOVF9JU19TRVJJQUxJWkVEIChldmVudCkpIHsKKyAgICAgICAgZ3N0X2Jhc2Vfc2lua19xdWV1ZV9vYmplY3QgKGJhc2VzaW5rLCBwYWQsCisgICAgICAgICAgICBHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoZXZlbnQpLCBGQUxTRSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoYmNsYXNzLT5ldmVudCkKKyAgICAgICAgICBiY2xhc3MtPmV2ZW50IChiYXNlc2luaywgZXZlbnQpOworICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICB9Citkb25lOgorICBnc3Rfb2JqZWN0X3VucmVmIChiYXNlc2luayk7CisKKyAgcmV0dXJuIHJlc3VsdDsKKworICAvKiBFUlJPUlMgKi8KK2ZsdXNoaW5nOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJ3ZSBhcmUgZmx1c2hpbmciKTsKKyAgICBHU1RfQkFTRV9TSU5LX1BSRVJPTExfVU5MT0NLIChiYXNlc2luayk7CisgICAgcmVzdWx0ID0gRkFMU0U7CisgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgICAgZ290byBkb25lOworICB9CisKK2FmdGVyX2VvczoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiRXZlbnQgcmVjZWl2ZWQgYWZ0ZXIgRU9TLCBkcm9wcGluZyIpOworICAgIEdTVF9CQVNFX1NJTktfUFJFUk9MTF9VTkxPQ0sgKGJhc2VzaW5rKTsKKyAgICByZXN1bHQgPSBGQUxTRTsKKyAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKyAgICBnb3RvIGRvbmU7CisgIH0KK30KKworLyogZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB0byBjYWxjdWxhdGUgdGhlIHN0YXJ0IGFuZCBlbmQKKyAqIHRpbWVzdGFtcHMgb24gYSBidWZmZXIsIHN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlCisgKi8KK3N0YXRpYyB2b2lkCitnc3RfYmFzZV9zaW5rX2dldF90aW1lcyAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaywgR3N0QnVmZmVyICogYnVmZmVyLAorICAgIEdzdENsb2NrVGltZSAqIHN0YXJ0LCBHc3RDbG9ja1RpbWUgKiBlbmQpCit7CisgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIGR1cmF0aW9uOworCisgIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpOworICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHRpbWVzdGFtcCkpIHsKKworICAgIC8qIGdldCBkdXJhdGlvbiB0byBjYWxjdWxhdGUgZW5kIHRpbWUgKi8KKyAgICBkdXJhdGlvbiA9IEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcik7CisgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChkdXJhdGlvbikpIHsKKyAgICAgICplbmQgPSB0aW1lc3RhbXAgKyBkdXJhdGlvbjsKKyAgICB9CisgICAgKnN0YXJ0ID0gdGltZXN0YW1wOworICB9Cit9CisKKy8qIG11c3QgYmUgY2FsbGVkIHdpdGggUFJFUk9MTF9MT0NLICovCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iYXNlX3NpbmtfbmVlZHNfcHJlcm9sbCAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaykKK3sKKyAgZ2Jvb2xlYW4gaXNfcHJlcm9sbGVkLCByZXM7CisKKyAgLyogd2UgaGF2ZSAyIGNhc2VzIHdoZXJlIHRoZSBQUkVST0xMX0xPQ0sgaXMgcmVsZWFzZWQ6CisgICAqICAxKSB3ZSBhcmUgYmxvY2tpbmcgaW4gdGhlIFBSRVJPTExfTE9DSyBhbmQgdGh1cyBhcmUgcHJlcm9sbGVkLgorICAgKiAgMikgd2UgYXJlIHN5bmNpbmcgb24gdGhlIGNsb2NrCisgICAqLworICBpc19wcmVyb2xsZWQgPSBiYXNlc2luay0+aGF2ZV9wcmVyb2xsIHx8IGJhc2VzaW5rLT5wcml2LT5yZWNlaXZlZF9lb3M7CisgIHJlcyA9ICFpc19wcmVyb2xsZWQ7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJoYXZlX3ByZXJvbGw6ICVkLCBFT1M6ICVkID0+IG5lZWRzIHByZXJvbGw6ICVkIiwKKyAgICAgIGJhc2VzaW5rLT5oYXZlX3ByZXJvbGwsIGJhc2VzaW5rLT5wcml2LT5yZWNlaXZlZF9lb3MsIHJlcyk7CisKKyAgcmV0dXJuIHJlczsKK30KKworLyogd2l0aCBTVFJFQU1fTE9DSywgUFJFUk9MTF9MT0NLCisgKgorICogVGFrZXMgYSBidWZmZXIgYW5kIGNvbXBhcmUgdGhlIHRpbWVzdGFtcHMgd2l0aCB0aGUgbGFzdCBzZWdtZW50LgorICogSWYgdGhlIGJ1ZmZlciBmYWxscyBvdXRzaWRlIG9mIHRoZSBzZWdtZW50IGJvdW5kYXJpZXMsIGRyb3AgaXQuCisgKiBFbHNlIHF1ZXVlIHRoZSBidWZmZXIgZm9yIHByZXJvbGwgYW5kIHJlbmRlcmluZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgYnVmZmVyLgorICovCitzdGF0aWMgR3N0Rmxvd1JldHVybgorZ3N0X2Jhc2Vfc2lua19jaGFpbl91bmxvY2tlZCAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaywgR3N0UGFkICogcGFkLAorICAgIGd1aW50OCBvYmpfdHlwZSwgZ3BvaW50ZXIgb2JqKQoreworICBHc3RCYXNlU2lua0NsYXNzICpiY2xhc3M7CisgIEdzdEZsb3dSZXR1cm4gcmVzdWx0OworICBHc3RDbG9ja1RpbWUgc3RhcnQgPSBHU1RfQ0xPQ0tfVElNRV9OT05FLCBlbmQgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICBHc3RTZWdtZW50ICpjbGlwX3NlZ21lbnQ7CisgIEdzdEJ1ZmZlciAqdGltZV9idWY7CisKKyAgaWYgKEdfVU5MSUtFTFkgKGJhc2VzaW5rLT5mbHVzaGluZykpCisgICAgZ290byBmbHVzaGluZzsKKworICBpZiAoR19VTkxJS0VMWSAoYmFzZXNpbmstPnByaXYtPnJlY2VpdmVkX2VvcykpCisgICAgZ290byB3YXNfZW9zOworCisgIGlmIChPQkpfSVNfQlVGRkVSTElTVCAob2JqX3R5cGUpKSB7CisgICAgdGltZV9idWYgPSBnc3RfYnVmZmVyX2xpc3RfZ2V0IChHU1RfQlVGRkVSX0xJU1RfQ0FTVCAob2JqKSwgMCk7CisgICAgZ19hc3NlcnQgKE5VTEwgIT0gdGltZV9idWYpOworICB9IGVsc2UgeworICAgIHRpbWVfYnVmID0gR1NUX0JVRkZFUl9DQVNUIChvYmopOworICB9CisKKyAgLyogZm9yIGNvZGUgY2xhcml0eSAqLworICBjbGlwX3NlZ21lbnQgPSAmYmFzZXNpbmstPmNsaXBfc2VnbWVudDsKKworICBpZiAoR19VTkxJS0VMWSAoIWJhc2VzaW5rLT5oYXZlX25ld3NlZ21lbnQpKSB7CisgICAgZ2Jvb2xlYW4gc3luYzsKKworICAgIHN5bmMgPSBnc3RfYmFzZV9zaW5rX2dldF9zeW5jIChiYXNlc2luayk7CisgICAgaWYgKHN5bmMpIHsKKyAgICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKGJhc2VzaW5rLCBTVFJFQU0sIEZBSUxFRCwKKyAgICAgICAgICAoXygiSW50ZXJuYWwgZGF0YSBmbG93IHByb2JsZW0uIikpLAorICAgICAgICAgICgiUmVjZWl2ZWQgYnVmZmVyIHdpdGhvdXQgYSBuZXctc2VnbWVudC4gQXNzdW1pbmcgdGltZXN0YW1wcyBzdGFydCBmcm9tIDAuIikpOworICAgIH0KKworICAgIC8qIHRoaXMgbWVhbnMgdGhpcyBzaW5rIHdpbGwgYXNzdW1lIHRpbWVzdGFtcHMgc3RhcnQgZnJvbSAwICovCisgICAgR1NUX09CSkVDVF9MT0NLIChiYXNlc2luayk7CisgICAgY2xpcF9zZWdtZW50LT5zdGFydCA9IDA7CisgICAgY2xpcF9zZWdtZW50LT5zdG9wID0gLTE7CisgICAgYmFzZXNpbmstPnNlZ21lbnQuc3RhcnQgPSAwOworICAgIGJhc2VzaW5rLT5zZWdtZW50LnN0b3AgPSAtMTsKKyAgICBiYXNlc2luay0+aGF2ZV9uZXdzZWdtZW50ID0gVFJVRTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNpbmspOworICB9CisKKyAgYmNsYXNzID0gR1NUX0JBU0VfU0lOS19HRVRfQ0xBU1MgKGJhc2VzaW5rKTsKKworICAvKiBjaGVjayBpZiB0aGUgYnVmZmVyIG5lZWRzIHRvIGJlIGRyb3BwZWQsIHdlIGZpcnN0IGFzayB0aGUgc3ViY2xhc3MgZm9yIHRoZQorICAgKiBzdGFydCBhbmQgZW5kICovCisgIGlmIChiY2xhc3MtPmdldF90aW1lcykKKyAgICBiY2xhc3MtPmdldF90aW1lcyAoYmFzZXNpbmssIHRpbWVfYnVmLCAmc3RhcnQsICZlbmQpOworCisgIGlmICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHN0YXJ0KSkgeworICAgIC8qIGlmIHRoZSBzdWJjbGFzcyBkb2VzIG5vdCB3YW50IHN5bmMsIHdlIHVzZSBvdXIgb3duIHZhbHVlcyBzbyB0aGF0IHdlIGF0CisgICAgICogbGVhc3QgY2xpcCB0aGUgYnVmZmVyIHRvIHRoZSBzZWdtZW50ICovCisgICAgZ3N0X2Jhc2Vfc2lua19nZXRfdGltZXMgKGJhc2VzaW5rLCB0aW1lX2J1ZiwgJnN0YXJ0LCAmZW5kKTsKKyAgfQorCisgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiZ290IHRpbWVzIHN0YXJ0OiAlIiBHU1RfVElNRV9GT1JNQVQKKyAgICAgICIsIGVuZDogJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChzdGFydCksIEdTVF9USU1FX0FSR1MgKGVuZCkpOworCisgIC8qIGEgZHJvcHBlZCBidWZmZXIgZG9lcyBub3QgcGFydGljaXBhdGUgaW4gYW55dGhpbmcgKi8KKyAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzdGFydCkgJiYKKyAgICAgIChjbGlwX3NlZ21lbnQtPmZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpKSB7CisgICAgaWYgKEdfVU5MSUtFTFkgKCFnc3Rfc2VnbWVudF9jbGlwIChjbGlwX3NlZ21lbnQsCisgICAgICAgICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCBzdGFydCwgZW5kLCBOVUxMLCBOVUxMKSkpCisgICAgICBnb3RvIG91dF9vZl9zZWdtZW50OworICB9CisKKyAgLyogbm93IHdlIGNhbiBwcm9jZXNzIHRoZSBidWZmZXIgaW4gdGhlIHF1ZXVlLCB0aGlzIGZ1bmN0aW9uIHRha2VzIG93bmVyc2hpcAorICAgKiBvZiB0aGUgYnVmZmVyICovCisgIHJlc3VsdCA9IGdzdF9iYXNlX3NpbmtfcXVldWVfb2JqZWN0X3VubG9ja2VkIChiYXNlc2luaywgcGFkLAorICAgICAgb2JqX3R5cGUsIG9iaiwgVFJVRSk7CisgIHJldHVybiByZXN1bHQ7CisKKyAgLyogRVJST1JTICovCitmbHVzaGluZzoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAic2luayBpcyBmbHVzaGluZyIpOworICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKG9iaikpOworICAgIHJldHVybiBHU1RfRkxPV19XUk9OR19TVEFURTsKKyAgfQord2FzX2VvczoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLAorICAgICAgICAid2UgYXJlIEVPUywgZHJvcHBpbmcgb2JqZWN0LCByZXR1cm4gVU5FWFBFQ1RFRCIpOworICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKG9iaikpOworICAgIHJldHVybiBHU1RfRkxPV19VTkVYUEVDVEVEOworICB9CitvdXRfb2Zfc2VnbWVudDoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiZHJvcHBpbmcgYnVmZmVyLCBvdXQgb2YgY2xpcHBpbmcgc2VnbWVudCIpOworICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKG9iaikpOworICAgIHJldHVybiBHU1RfRkxPV19PSzsKKyAgfQorfQorCisvKiB3aXRoIFNUUkVBTV9MT0NLCisgKi8KK3N0YXRpYyBHc3RGbG93UmV0dXJuCitnc3RfYmFzZV9zaW5rX2NoYWluX21haW4gKEdzdEJhc2VTaW5rICogYmFzZXNpbmssIEdzdFBhZCAqIHBhZCwKKyAgICBndWludDggb2JqX3R5cGUsIGdwb2ludGVyIG9iaikKK3sKKyAgR3N0Rmxvd1JldHVybiByZXN1bHQ7CisKKyAgaWYgKEdfVU5MSUtFTFkgKGJhc2VzaW5rLT5wYWRfbW9kZSAhPSBHU1RfQUNUSVZBVEVfUFVTSCkpCisgICAgZ290byB3cm9uZ19tb2RlOworCisgIEdTVF9CQVNFX1NJTktfUFJFUk9MTF9MT0NLIChiYXNlc2luayk7CisgIHJlc3VsdCA9IGdzdF9iYXNlX3NpbmtfY2hhaW5fdW5sb2NrZWQgKGJhc2VzaW5rLCBwYWQsIG9ial90eXBlLCBvYmopOworICBHU1RfQkFTRV9TSU5LX1BSRVJPTExfVU5MT0NLIChiYXNlc2luayk7CisKK2RvbmU6CisgIHJldHVybiByZXN1bHQ7CisKKyAgLyogRVJST1JTICovCit3cm9uZ19tb2RlOgorICB7CisgICAgR1NUX09CSkVDVF9MT0NLIChwYWQpOworICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYmFzZXNpbmssCisgICAgICAgICJQdXNoIG9uIHBhZCAlczolcywgYnV0IGl0IHdhcyBub3QgYWN0aXZhdGVkIGluIHB1c2ggbW9kZSIsCisgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisgICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAob2JqKSk7CisgICAgLyogd2UgZG9uJ3QgcG9zdCBhbiBlcnJvciBtZXNzYWdlIHRoaXMgd2lsbCBzaWduYWwgdG8gdGhlIHBlZXIKKyAgICAgKiBwdXNoaW5nIHRoYXQgRU9TIGlzIHJlYWNoZWQuICovCisgICAgcmVzdWx0ID0gR1NUX0ZMT1dfVU5FWFBFQ1RFRDsKKyAgICBnb3RvIGRvbmU7CisgIH0KK30KKworc3RhdGljIEdzdEZsb3dSZXR1cm4KK2dzdF9iYXNlX3NpbmtfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0QnVmZmVyICogYnVmKQoreworICBHc3RCYXNlU2luayAqYmFzZXNpbms7CisKKyAgYmFzZXNpbmsgPSBHU1RfQkFTRV9TSU5LIChHU1RfT0JKRUNUX1BBUkVOVCAocGFkKSk7CisKKyAgcmV0dXJuIGdzdF9iYXNlX3NpbmtfY2hhaW5fbWFpbiAoYmFzZXNpbmssIHBhZCwgX1BSX0lTX0JVRkZFUiwgYnVmKTsKK30KKworc3RhdGljIEdzdEZsb3dSZXR1cm4KK2dzdF9iYXNlX3NpbmtfY2hhaW5fbGlzdCAoR3N0UGFkICogcGFkLCBHc3RCdWZmZXJMaXN0ICogbGlzdCkKK3sKKyAgR3N0QmFzZVNpbmsgKmJhc2VzaW5rOworICBHc3RCYXNlU2lua0NsYXNzICpiY2xhc3M7CisgIEdzdEZsb3dSZXR1cm4gcmVzdWx0OworCisgIGJhc2VzaW5rID0gR1NUX0JBU0VfU0lOSyAoR1NUX09CSkVDVF9QQVJFTlQgKHBhZCkpOworICBiY2xhc3MgPSBHU1RfQkFTRV9TSU5LX0dFVF9DTEFTUyAoYmFzZXNpbmspOworCisgIGlmIChHX0xJS0VMWSAoYmNsYXNzLT5yZW5kZXJfbGlzdCkpIHsKKyAgICByZXN1bHQgPSBnc3RfYmFzZV9zaW5rX2NoYWluX21haW4gKGJhc2VzaW5rLCBwYWQsIF9QUl9JU19CVUZGRVJMSVNULCBsaXN0KTsKKyAgfSBlbHNlIHsKKyAgICBndWludCBpLCBsZW47CisgICAgR3N0QnVmZmVyICpidWZmZXI7CisKKyAgICBHU1RfSU5GT19PQkpFQ1QgKHBhZCwgImNoYWluaW5nIGVhY2ggZ3JvdXAgaW4gbGlzdCBhcyBhIG1lcmdlZCBidWZmZXIiKTsKKworICAgIGxlbiA9IGdzdF9idWZmZXJfbGlzdF9sZW4gKGxpc3QpOworCisgICAgcmVzdWx0ID0gR1NUX0ZMT1dfT0s7CisgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICBidWZmZXIgPSBnc3RfYnVmZmVyX2xpc3RfZ2V0IChsaXN0LCAwKTsKKyAgICAgIHJlc3VsdCA9IGdzdF9iYXNlX3NpbmtfY2hhaW5fbWFpbiAoYmFzZXNpbmssIHBhZCwgX1BSX0lTX0JVRkZFUiwKKyAgICAgICAgICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKSk7CisgICAgICBpZiAocmVzdWx0ICE9IEdTVF9GTE9XX09LKQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgZ3N0X2J1ZmZlcl9saXN0X3VucmVmIChsaXN0KTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2Jhc2Vfc2lua19kZWZhdWx0X2RvX3NlZWsgKEdzdEJhc2VTaW5rICogc2luaywgR3N0U2VnbWVudCAqIHNlZ21lbnQpCit7CisgIGdib29sZWFuIHJlcyA9IFRSVUU7CisKKyAgLyogdXBkYXRlIG91ciBvZmZzZXQgaWYgdGhlIHN0YXJ0L3N0b3AgcG9zaXRpb24gd2FzIHVwZGF0ZWQgKi8KKyAgaWYgKHNlZ21lbnQtPmZvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTKSB7CisgICAgc2VnbWVudC0+dGltZSA9IHNlZ21lbnQtPnN0YXJ0OworICB9IGVsc2UgaWYgKHNlZ21lbnQtPnN0YXJ0ID09IDApIHsKKyAgICAvKiBzZWVrIHRvIHN0YXJ0LCB3ZSBjYW4gaW1wbGVtZW50IGEgZGVmYXVsdCBmb3IgdGhpcy4gKi8KKyAgICBzZWdtZW50LT50aW1lID0gMDsKKyAgfSBlbHNlIHsKKyAgICByZXMgPSBGQUxTRTsKKyAgICBHU1RfSU5GT19PQkpFQ1QgKHNpbmssICJDYW4ndCBkbyBhIGRlZmF1bHQgc2VlayIpOworICB9CisKKyAgcmV0dXJuIHJlczsKK30KKworI2RlZmluZSBTRUVLX1RZUEVfSVNfUkVMQVRJVkUodCkgKCgodCkgIT0gR1NUX1NFRUtfVFlQRV9OT05FKSAmJiAoKHQpICE9IEdTVF9TRUVLX1RZUEVfU0VUKSkKKworc3RhdGljIGdib29sZWFuCitnc3RfYmFzZV9zaW5rX2RlZmF1bHRfcHJlcGFyZV9zZWVrX3NlZ21lbnQgKEdzdEJhc2VTaW5rICogc2luaywKKyAgICBHc3RFdmVudCAqIGV2ZW50LCBHc3RTZWdtZW50ICogc2VnbWVudCkKK3sKKyAgLyogQnkgZGVmYXVsdCwgd2UgdHJ5IG9uZSBvZiAyIHRoaW5nczoKKyAgICogICAtIEZvciBhYnNvbHV0ZSBzZWVrIHBvc2l0aW9ucywgY29udmVydCB0aGUgcmVxdWVzdGVkIHBvc2l0aW9uIHRvIG91cgorICAgKiAgICAgY29uZmlndXJlZCBwcm9jZXNzaW5nIGZvcm1hdCBhbmQgcGxhY2UgaXQgaW4gdGhlIG91dHB1dCBzZWdtZW50IFwKKyAgICogICAtIEZvciByZWxhdGl2ZSBzZWVrIHBvc2l0aW9ucywgY29udmVydCBvdXIgY3VycmVudCAoaW5wdXQpIHZhbHVlcyB0byB0aGUKKyAgICogICAgIHNlZWsgZm9ybWF0LCBhZGp1c3QgYnkgdGhlIHJlbGF0aXZlIHNlZWsgb2Zmc2V0IGFuZCB0aGVuIGNvbnZlcnQgYmFjayB0bworICAgKiAgICAgdGhlIHByb2Nlc3NpbmcgZm9ybWF0CisgICAqLworICBHc3RTZWVrVHlwZSBjdXJfdHlwZSwgc3RvcF90eXBlOworICBnaW50NjQgY3VyLCBzdG9wOworICBHc3RTZWVrRmxhZ3MgZmxhZ3M7CisgIEdzdEZvcm1hdCBzZWVrX2Zvcm1hdDsKKyAgZ2RvdWJsZSByYXRlOworICBnYm9vbGVhbiB1cGRhdGU7CisgIGdib29sZWFuIHJlcyA9IFRSVUU7CisKKyAgZ3N0X2V2ZW50X3BhcnNlX3NlZWsgKGV2ZW50LCAmcmF0ZSwgJnNlZWtfZm9ybWF0LCAmZmxhZ3MsCisgICAgICAmY3VyX3R5cGUsICZjdXIsICZzdG9wX3R5cGUsICZzdG9wKTsKKworICBpZiAoc2Vla19mb3JtYXQgPT0gc2VnbWVudC0+Zm9ybWF0KSB7CisgICAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoc2VnbWVudCwgcmF0ZSwgc2Vla19mb3JtYXQsIGZsYWdzLAorICAgICAgICBjdXJfdHlwZSwgY3VyLCBzdG9wX3R5cGUsIHN0b3AsICZ1cGRhdGUpOworICAgIHJldHVybiBUUlVFOworICB9CisKKyAgaWYgKGN1cl90eXBlICE9IEdTVF9TRUVLX1RZUEVfTk9ORSkgeworICAgIC8qIEZJWE1FOiBIYW5kbGUgc2Vla19jdXIgJiBzZWVrX2VuZCBieSBjb252ZXJ0aW5nIHRoZSBpbnB1dCBzZWdtZW50IHZhbHMgKi8KKyAgICByZXMgPQorICAgICAgICBnc3RfcGFkX3F1ZXJ5X2NvbnZlcnQgKHNpbmstPnNpbmtwYWQsIHNlZWtfZm9ybWF0LCBjdXIsIHNlZ21lbnQtPmZvcm1hdCwKKyAgICAgICAgJmN1cik7CisgICAgY3VyX3R5cGUgPSBHU1RfU0VFS19UWVBFX1NFVDsKKyAgfQorCisgIGlmIChyZXMgJiYgc3RvcF90eXBlICE9IEdTVF9TRUVLX1RZUEVfTk9ORSkgeworICAgIC8qIEZJWE1FOiBIYW5kbGUgc2Vla19jdXIgJiBzZWVrX2VuZCBieSBjb252ZXJ0aW5nIHRoZSBpbnB1dCBzZWdtZW50IHZhbHMgKi8KKyAgICByZXMgPQorICAgICAgICBnc3RfcGFkX3F1ZXJ5X2NvbnZlcnQgKHNpbmstPnNpbmtwYWQsIHNlZWtfZm9ybWF0LCBzdG9wLAorICAgICAgICBzZWdtZW50LT5mb3JtYXQsICZzdG9wKTsKKyAgICBzdG9wX3R5cGUgPSBHU1RfU0VFS19UWVBFX1NFVDsKKyAgfQorCisgIC8qIEFuZCBmaW5hbGx5LCBjb25maWd1cmUgb3VyIG91dHB1dCBzZWdtZW50IGluIHRoZSBkZXNpcmVkIGZvcm1hdCAqLworICBnc3Rfc2VnbWVudF9kb19zZWVrIChzZWdtZW50LCByYXRlLCBzZWdtZW50LT5mb3JtYXQsIGZsYWdzLCBjdXJfdHlwZSwgY3VyLAorICAgICAgc3RvcF90eXBlLCBzdG9wLCAmdXBkYXRlKTsKKworICBpZiAoIXJlcykKKyAgICBnb3RvIG5vX2Zvcm1hdDsKKworICByZXR1cm4gcmVzOworCitub19mb3JtYXQ6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAidW5kZWZpbmVkIGZvcm1hdCBnaXZlbiwgc2VlayBhYm9ydGVkLiIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCisvKiBwZXJmb3JtIGEgc2Vlaywgb25seSBleGVjdXRlZCBpbiBwdWxsIG1vZGUgKi8KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2Jhc2Vfc2lua19wZXJmb3JtX3NlZWsgKEdzdEJhc2VTaW5rICogc2luaywgR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KQoreworICBnYm9vbGVhbiBmbHVzaDsKKyAgZ2RvdWJsZSByYXRlOworICBHc3RGb3JtYXQgc2Vla19mb3JtYXQsIGRlc3RfZm9ybWF0OworICBHc3RTZWVrRmxhZ3MgZmxhZ3M7CisgIEdzdFNlZWtUeXBlIGN1cl90eXBlLCBzdG9wX3R5cGU7CisgIGdib29sZWFuIHNlZWtzZWdfY29uZmlndXJlZCA9IEZBTFNFOworICBnaW50NjQgY3VyLCBzdG9wOworICBnYm9vbGVhbiB1cGRhdGUsIHJlcyA9IFRSVUU7CisgIEdzdFNlZ21lbnQgc2Vla3NlZ21lbnQ7CisKKyAgZGVzdF9mb3JtYXQgPSBzaW5rLT5zZWdtZW50LmZvcm1hdDsKKworICBpZiAoZXZlbnQpIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAicGVyZm9ybWluZyBzZWVrIHdpdGggZXZlbnQgJXAiLCBldmVudCk7CisgICAgZ3N0X2V2ZW50X3BhcnNlX3NlZWsgKGV2ZW50LCAmcmF0ZSwgJnNlZWtfZm9ybWF0LCAmZmxhZ3MsCisgICAgICAgICZjdXJfdHlwZSwgJmN1ciwgJnN0b3BfdHlwZSwgJnN0b3ApOworCisgICAgZmx1c2ggPSBmbGFncyAmIEdTVF9TRUVLX0ZMQUdfRkxVU0g7CisgIH0gZWxzZSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInBlcmZvcm1pbmcgc2VlayB3aXRob3V0IGV2ZW50Iik7CisgICAgZmx1c2ggPSBGQUxTRTsKKyAgfQorCisgIGlmIChmbHVzaCkgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJmbHVzaGluZyB1cHN0cmVhbSIpOworICAgIGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0ICgpKTsKKyAgICBnc3RfYmFzZV9zaW5rX2ZsdXNoX3N0YXJ0IChzaW5rLCBwYWQpOworICB9IGVsc2UgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJwYXVzaW5nIHB1bGxpbmcgdGhyZWFkIik7CisgIH0KKworICBHU1RfUEFEX1NUUkVBTV9MT0NLIChwYWQpOworCisgIC8qIElmIHdlIGNvbmZpZ3VyZWQgdGhlIHNlZWtzZWdtZW50IGFib3ZlLCBkb24ndCBvdmVyd3JpdGUgaXQgbm93LiBPdGhlcndpc2UKKyAgICogY29weSB0aGUgY3VycmVudCBzZWdtZW50IGluZm8gaW50byB0aGUgdGVtcCBzZWdtZW50IHRoYXQgd2UgY2FuIGFjdHVhbGx5CisgICAqIGF0dGVtcHQgdGhlIHNlZWsgd2l0aC4gV2Ugb25seSB1cGRhdGUgdGhlIHJlYWwgc2VnbWVudCBpZiB0aGUgc2VlayBzdWNjZWVkcy4gKi8KKyAgaWYgKCFzZWVrc2VnX2NvbmZpZ3VyZWQpIHsKKyAgICBtZW1jcHkgKCZzZWVrc2VnbWVudCwgJnNpbmstPnNlZ21lbnQsIHNpemVvZiAoR3N0U2VnbWVudCkpOworCisgICAgLyogbm93IGNvbmZpZ3VyZSB0aGUgZmluYWwgc2VlayBzZWdtZW50ICovCisgICAgaWYgKGV2ZW50KSB7CisgICAgICBpZiAoc2luay0+c2VnbWVudC5mb3JtYXQgIT0gc2Vla19mb3JtYXQpIHsKKyAgICAgICAgLyogT0ssIGhlcmUncyB3aGVyZSB3ZSBnaXZlIHRoZSBzdWJjbGFzcyBhIGNoYW5jZSB0byBjb252ZXJ0IHRoZSByZWxhdGl2ZQorICAgICAgICAgKiBzZWVrIGludG8gYW4gYWJzb2x1dGUgb25lIGluIHRoZSBwcm9jZXNzaW5nIGZvcm1hdC4gV2Ugc2V0IHVwIGFueQorICAgICAgICAgKiBhYnNvbHV0ZSBzZWVrIGFib3ZlLCBiZWZvcmUgdGFraW5nIHRoZSBzdHJlYW0gbG9jay4gKi8KKyAgICAgICAgaWYgKCFnc3RfYmFzZV9zaW5rX2RlZmF1bHRfcHJlcGFyZV9zZWVrX3NlZ21lbnQgKHNpbmssIGV2ZW50LAorICAgICAgICAgICAgICAgICZzZWVrc2VnbWVudCkpIHsKKyAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLAorICAgICAgICAgICAgICAiUHJlcGFyaW5nIHRoZSBzZWVrIGZhaWxlZCBhZnRlciBmbHVzaGluZy4gIiAiQWJvcnRpbmcgc2VlayIpOworICAgICAgICAgIHJlcyA9IEZBTFNFOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICAvKiBUaGUgc2VlayBmb3JtYXQgbWF0Y2hlcyBvdXIgcHJvY2Vzc2luZyBmb3JtYXQsIG5vIG5lZWQgdG8gYXNrIHRoZQorICAgICAgICAgKiB0aGUgc3ViY2xhc3MgdG8gY29uZmlndXJlIHRoZSBzZWdtZW50LiAqLworICAgICAgICBnc3Rfc2VnbWVudF9kb19zZWVrICgmc2Vla3NlZ21lbnQsIHJhdGUsIHNlZWtfZm9ybWF0LCBmbGFncywKKyAgICAgICAgICAgIGN1cl90eXBlLCBjdXIsIHN0b3BfdHlwZSwgc3RvcCwgJnVwZGF0ZSk7CisgICAgICB9CisgICAgfQorICAgIC8qIEVsc2UsIG5vIHNlZWsgZXZlbnQgcGFzc2VkLCBzbyB3ZSdyZSBqdXN0IChyZSlzdGFydGluZyB0aGUKKyAgICAgICBjdXJyZW50IHNlZ21lbnQuICovCisgIH0KKworICBpZiAocmVzKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInNlZ21lbnQgY29uZmlndXJlZCBmcm9tICUiIEdfR0lOVDY0X0ZPUk1BVAorICAgICAgICAiIHRvICUiIEdfR0lOVDY0X0ZPUk1BVCAiLCBwb3NpdGlvbiAlIiBHX0dJTlQ2NF9GT1JNQVQsCisgICAgICAgIHNlZWtzZWdtZW50LnN0YXJ0LCBzZWVrc2VnbWVudC5zdG9wLCBzZWVrc2VnbWVudC5wb3NpdGlvbik7CisKKyAgICAvKiBkbyB0aGUgc2Vlaywgc2VnbWVudC5wb3NpdGlvbiBjb250YWlucyB0aGUgbmV3IHBvc2l0aW9uLiAqLworICAgIHJlcyA9IGdzdF9iYXNlX3NpbmtfZGVmYXVsdF9kb19zZWVrIChzaW5rLCAmc2Vla3NlZ21lbnQpOworICB9CisKKworICBpZiAoZmx1c2gpIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAic3RvcCBmbHVzaGluZyB1cHN0cmVhbSIpOworICAgIGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AgKFRSVUUpKTsKKyAgICBnc3RfYmFzZV9zaW5rX2ZsdXNoX3N0b3AgKHNpbmssIHBhZCwgVFJVRSk7CisgIH0gZWxzZSBpZiAocmVzICYmIHNpbmstPnJ1bm5pbmcpIHsKKyAgICAvKiB3ZSBhcmUgcnVubmluZyB0aGUgY3VycmVudCBzZWdtZW50IGFuZCBkb2luZyBhIG5vbi1mbHVzaGluZyBzZWVrLAorICAgICAqIGNsb3NlIHRoZSBzZWdtZW50IGZpcnN0IGJhc2VkIG9uIHRoZSBwb3NpdGlvbi4gKi8KKyAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAiY2xvc2luZyBydW5uaW5nIHNlZ21lbnQgJSIgR19HSU5UNjRfRk9STUFUCisgICAgICAgICIgdG8gJSIgR19HSU5UNjRfRk9STUFULCBzaW5rLT5zZWdtZW50LnN0YXJ0LCBzaW5rLT5zZWdtZW50LnBvc2l0aW9uKTsKKyAgfQorCisgIC8qIFRoZSBzdWJjbGFzcyBtdXN0IGhhdmUgY29udmVydGVkIHRoZSBzZWdtZW50IHRvIHRoZSBwcm9jZXNzaW5nIGZvcm1hdAorICAgKiBieSBub3cgKi8KKyAgaWYgKHJlcyAmJiBzZWVrc2VnbWVudC5mb3JtYXQgIT0gZGVzdF9mb3JtYXQpIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAiU3ViY2xhc3MgZmFpbGVkIHRvIHByZXBhcmUgYSBzZWVrIHNlZ21lbnQgIgorICAgICAgICAiaW4gdGhlIGNvcnJlY3QgZm9ybWF0LiBBYm9ydGluZyBzZWVrLiIpOworICAgIHJlcyA9IEZBTFNFOworICB9CisKKyAgLyogaWYgc3VjY2Vzc2Z1bCBzZWVrLCB3ZSB1cGRhdGUgb3VyIHJlYWwgc2VnbWVudCBhbmQgcHVzaAorICAgKiBvdXQgdGhlIG5ldyBzZWdtZW50LiAqLworICBpZiAocmVzKSB7CisgICAgZ3N0X3NlZ21lbnRfY29weV9pbnRvICgmc2Vla3NlZ21lbnQsICZzaW5rLT5zZWdtZW50KTsKKworICAgIGlmIChzaW5rLT5zZWdtZW50LmZsYWdzICYgR1NUX1NFRUtfRkxBR19TRUdNRU5UKSB7CisgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UIChzaW5rKSwKKyAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9zdGFydCAoR1NUX09CSkVDVCAoc2luayksCisgICAgICAgICAgICAgIHNpbmstPnNlZ21lbnQuZm9ybWF0LCBzaW5rLT5zZWdtZW50LnBvc2l0aW9uKSk7CisgICAgfQorICB9CisKKyAgc2luay0+cHJpdi0+ZGlzY29udCA9IFRSVUU7CisgIHNpbmstPnJ1bm5pbmcgPSBUUlVFOworCisgIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAocGFkKTsKKworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZAorc2V0X3N0ZXBfaW5mbyAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RTdGVwSW5mbyAqIGN1cnJlbnQsIEdzdFN0ZXBJbmZvICogcGVuZGluZywKKyAgICBndWludCBzZXFudW0sIEdzdEZvcm1hdCBmb3JtYXQsIGd1aW50NjQgYW1vdW50LCBnZG91YmxlIHJhdGUsCisgICAgZ2Jvb2xlYW4gZmx1c2gsIGdib29sZWFuIGludGVybWVkaWF0ZSkKK3sKKyAgR1NUX09CSkVDVF9MT0NLIChzaW5rKTsKKyAgcGVuZGluZy0+c2VxbnVtID0gc2VxbnVtOworICBwZW5kaW5nLT5mb3JtYXQgPSBmb3JtYXQ7CisgIHBlbmRpbmctPmFtb3VudCA9IGFtb3VudDsKKyAgcGVuZGluZy0+cG9zaXRpb24gPSAwOworICBwZW5kaW5nLT5yYXRlID0gcmF0ZTsKKyAgcGVuZGluZy0+Zmx1c2ggPSBmbHVzaDsKKyAgcGVuZGluZy0+aW50ZXJtZWRpYXRlID0gaW50ZXJtZWRpYXRlOworICBwZW5kaW5nLT52YWxpZCA9IFRSVUU7CisgIC8qIGZsdXNoIGludmFsaWRhdGVzIHRoZSBjdXJyZW50IHN0ZXBwaW5nIHNlZ21lbnQgKi8KKyAgaWYgKGZsdXNoKQorICAgIGN1cnJlbnQtPnZhbGlkID0gRkFMU0U7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChzaW5rKTsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfYmFzZV9zaW5rX3BlcmZvcm1fc3RlcCAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpCit7CisgIEdzdEJhc2VTaW5rUHJpdmF0ZSAqcHJpdjsKKyAgR3N0QmFzZVNpbmtDbGFzcyAqYmNsYXNzOworICBnYm9vbGVhbiBmbHVzaCwgaW50ZXJtZWRpYXRlOworICBnZG91YmxlIHJhdGU7CisgIEdzdEZvcm1hdCBmb3JtYXQ7CisgIGd1aW50NjQgYW1vdW50OworICBndWludCBzZXFudW07CisgIEdzdFN0ZXBJbmZvICpwZW5kaW5nLCAqY3VycmVudDsKKyAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKKworICBiY2xhc3MgPSBHU1RfQkFTRV9TSU5LX0dFVF9DTEFTUyAoc2luayk7CisgIHByaXYgPSBzaW5rLT5wcml2OworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJwZXJmb3JtaW5nIHN0ZXAgd2l0aCBldmVudCAlcCIsIGV2ZW50KTsKKworICBnc3RfZXZlbnRfcGFyc2Vfc3RlcCAoZXZlbnQsICZmb3JtYXQsICZhbW91bnQsICZyYXRlLCAmZmx1c2gsICZpbnRlcm1lZGlhdGUpOworICBzZXFudW0gPSBnc3RfZXZlbnRfZ2V0X3NlcW51bSAoZXZlbnQpOworCisgIHBlbmRpbmcgPSAmcHJpdi0+cGVuZGluZ19zdGVwOworICBjdXJyZW50ID0gJnByaXYtPmN1cnJlbnRfc3RlcDsKKworICAvKiBwb3N0IG1lc3NhZ2UgZmlyc3QgKi8KKyAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19zdGVwX3N0YXJ0IChHU1RfT0JKRUNUIChzaW5rKSwgRkFMU0UsIGZvcm1hdCwKKyAgICAgIGFtb3VudCwgcmF0ZSwgZmx1c2gsIGludGVybWVkaWF0ZSk7CisgIGdzdF9tZXNzYWdlX3NldF9zZXFudW0gKG1lc3NhZ2UsIHNlcW51bSk7CisgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlQgKHNpbmspLCBtZXNzYWdlKTsKKworICBpZiAoZmx1c2gpIHsKKyAgICAvKiB3ZSBuZWVkIHRvIGNhbGwgOjp1bmxvY2sgYmVmb3JlIGxvY2tpbmcgUFJFUk9MTF9MT0NLCisgICAgICogc2luY2Ugd2UgbG9jayBpdCBiZWZvcmUgZ29pbmcgaW50byA6OnJlbmRlciAqLworICAgIGlmIChiY2xhc3MtPnVubG9jaykKKyAgICAgIGJjbGFzcy0+dW5sb2NrIChzaW5rKTsKKworICAgIEdTVF9CQVNFX1NJTktfUFJFUk9MTF9MT0NLIChzaW5rKTsKKyAgICAvKiBub3cgdGhhdCB3ZSBoYXZlIHRoZSBQUkVST0xMIGxvY2ssIGNsZWFyIG91ciB1bmxvY2sgcmVxdWVzdCAqLworICAgIGlmIChiY2xhc3MtPnVubG9ja19zdG9wKQorICAgICAgYmNsYXNzLT51bmxvY2tfc3RvcCAoc2luayk7CisKKyAgICAvKiB1cGRhdGUgdGhlIHN0ZXBpbmZvIGFuZCBtYWtlIGl0IHZhbGlkICovCisgICAgc2V0X3N0ZXBfaW5mbyAoc2luaywgY3VycmVudCwgcGVuZGluZywgc2VxbnVtLCBmb3JtYXQsIGFtb3VudCwgcmF0ZSwgZmx1c2gsCisgICAgICAgIGludGVybWVkaWF0ZSk7CisKKyAgICBpZiAoc2luay0+cHJpdi0+YXN5bmNfZW5hYmxlZCkgeworICAgICAgLyogYW5kIHdlIG5lZWQgdG8gY29tbWl0IG91ciBzdGF0ZSBhZ2FpbiBvbiB0aGUgbmV4dAorICAgICAgICogcHJlcm9sbGVkIGJ1ZmZlciAqLworICAgICAgc2luay0+cGxheWluZ19hc3luYyA9IFRSVUU7CisgICAgICBwcml2LT5wZW5kaW5nX3N0ZXAubmVlZF9wcmVyb2xsID0gVFJVRTsKKyAgICAgIHNpbmstPm5lZWRfcHJlcm9sbCA9IEZBTFNFOworICAgICAgZ3N0X2VsZW1lbnRfbG9zdF9zdGF0ZSAoR1NUX0VMRU1FTlRfQ0FTVCAoc2luaykpOworICAgIH0gZWxzZSB7CisgICAgICBzaW5rLT5wcml2LT5oYXZlX2xhdGVuY3kgPSBUUlVFOworICAgICAgc2luay0+bmVlZF9wcmVyb2xsID0gRkFMU0U7CisgICAgfQorICAgIHByaXYtPmN1cnJlbnRfc3N0YXJ0ID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgICBwcml2LT5jdXJyZW50X3NzdG9wID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgICBwcml2LT5lb3NfcnRpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICAgIHByaXYtPmNhbGxfcHJlcm9sbCA9IFRSVUU7CisgICAgZ3N0X2Jhc2Vfc2lua19zZXRfbGFzdF9idWZmZXIgKHNpbmssIE5VTEwpOworICAgIGdzdF9iYXNlX3NpbmtfcmVzZXRfcW9zIChzaW5rKTsKKworICAgIGlmIChzaW5rLT5jbG9ja19pZCkgeworICAgICAgZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUgKHNpbmstPmNsb2NrX2lkKTsKKyAgICB9CisKKyAgICBpZiAoc2luay0+aGF2ZV9wcmVyb2xsKSB7CisgICAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAic2lnbmFsIHdhaXRlciIpOworICAgICAgcHJpdi0+c3RlcF91bmxvY2sgPSBUUlVFOworICAgICAgR1NUX0JBU0VfU0lOS19QUkVST0xMX1NJR05BTCAoc2luayk7CisgICAgfQorICAgIEdTVF9CQVNFX1NJTktfUFJFUk9MTF9VTkxPQ0sgKHNpbmspOworICB9IGVsc2UgeworICAgIC8qIHVwZGF0ZSB0aGUgc3RlcGluZm8gYW5kIG1ha2UgaXQgdmFsaWQgKi8KKyAgICBzZXRfc3RlcF9pbmZvIChzaW5rLCBjdXJyZW50LCBwZW5kaW5nLCBzZXFudW0sIGZvcm1hdCwgYW1vdW50LCByYXRlLCBmbHVzaCwKKyAgICAgICAgaW50ZXJtZWRpYXRlKTsKKyAgfQorCisgIHJldHVybiBUUlVFOworfQorCisvKiB3aXRoIFNUUkVBTV9MT0NLCisgKi8KK3N0YXRpYyB2b2lkCitnc3RfYmFzZV9zaW5rX2xvb3AgKEdzdFBhZCAqIHBhZCkKK3sKKyAgR3N0QmFzZVNpbmsgKmJhc2VzaW5rOworICBHc3RCdWZmZXIgKmJ1ZiA9IE5VTEw7CisgIEdzdEZsb3dSZXR1cm4gcmVzdWx0OworICBndWludCBibG9ja3NpemU7CisgIGd1aW50NjQgb2Zmc2V0OworCisgIGJhc2VzaW5rID0gR1NUX0JBU0VfU0lOSyAoR1NUX09CSkVDVF9QQVJFTlQgKHBhZCkpOworCisgIGdfYXNzZXJ0IChiYXNlc2luay0+cGFkX21vZGUgPT0gR1NUX0FDVElWQVRFX1BVTEwpOworCisgIGlmICgoYmxvY2tzaXplID0gYmFzZXNpbmstPnByaXYtPmJsb2Nrc2l6ZSkgPT0gMCkKKyAgICBibG9ja3NpemUgPSAtMTsKKworICBvZmZzZXQgPSBiYXNlc2luay0+c2VnbWVudC5wb3NpdGlvbjsKKworICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgInB1bGxpbmcgJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCAldSIsCisgICAgICBvZmZzZXQsIGJsb2Nrc2l6ZSk7CisKKyAgcmVzdWx0ID0gZ3N0X3BhZF9wdWxsX3JhbmdlIChwYWQsIG9mZnNldCwgYmxvY2tzaXplLCAmYnVmKTsKKyAgaWYgKEdfVU5MSUtFTFkgKHJlc3VsdCAhPSBHU1RfRkxPV19PSykpCisgICAgZ290byBwYXVzZWQ7CisKKyAgaWYgKEdfVU5MSUtFTFkgKGJ1ZiA9PSBOVUxMKSkKKyAgICBnb3RvIG5vX2J1ZmZlcjsKKworICBvZmZzZXQgKz0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKTsKKworICBiYXNlc2luay0+c2VnbWVudC5wb3NpdGlvbiA9IG9mZnNldDsKKworICBHU1RfQkFTRV9TSU5LX1BSRVJPTExfTE9DSyAoYmFzZXNpbmspOworICByZXN1bHQgPSBnc3RfYmFzZV9zaW5rX2NoYWluX3VubG9ja2VkIChiYXNlc2luaywgcGFkLCBfUFJfSVNfQlVGRkVSLCBidWYpOworICBHU1RfQkFTRV9TSU5LX1BSRVJPTExfVU5MT0NLIChiYXNlc2luayk7CisgIGlmIChHX1VOTElLRUxZIChyZXN1bHQgIT0gR1NUX0ZMT1dfT0spKQorICAgIGdvdG8gcGF1c2VkOworCisgIHJldHVybjsKKworICAvKiBFUlJPUlMgKi8KK3BhdXNlZDoKKyAgeworICAgIEdTVF9MT0dfT0JKRUNUIChiYXNlc2luaywgInBhdXNpbmcgdGFzaywgcmVhc29uICVzIiwKKyAgICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJlc3VsdCkpOworICAgIGdzdF9wYWRfcGF1c2VfdGFzayAocGFkKTsKKyAgICBpZiAocmVzdWx0ID09IEdTVF9GTE9XX1VORVhQRUNURUQpIHsKKyAgICAgIC8qIHBlcmZvcm0gRU9TIGxvZ2ljICovCisgICAgICBpZiAoYmFzZXNpbmstPnNlZ21lbnQuZmxhZ3MgJiBHU1RfU0VFS19GTEFHX1NFR01FTlQpIHsKKyAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChiYXNlc2luayksCisgICAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lIChHU1RfT0JKRUNUX0NBU1QgKGJhc2VzaW5rKSwKKyAgICAgICAgICAgICAgICBiYXNlc2luay0+c2VnbWVudC5mb3JtYXQsIGJhc2VzaW5rLT5zZWdtZW50LnBvc2l0aW9uKSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBnc3RfYmFzZV9zaW5rX2V2ZW50IChwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSBHU1RfRkxPV19OT1RfTElOS0VEIHx8IHJlc3VsdCA8PSBHU1RfRkxPV19VTkVYUEVDVEVEKSB7CisgICAgICAvKiBmb3IgZmF0YWwgZXJyb3JzIHdlIHBvc3QgYW4gZXJyb3IgbWVzc2FnZSwgcG9zdCB0aGUgZXJyb3IKKyAgICAgICAqIGZpcnN0IHNvIHRoZSBhcHAga25vd3MgYWJvdXQgdGhlIGVycm9yIGZpcnN0LiAKKyAgICAgICAqIHdyb25nLXN0YXRlIGlzIG5vdCBhIGZhdGFsIGVycm9yIGJlY2F1c2UgaXQgaGFwcGVucyBkdWUgdG8KKyAgICAgICAqIGZsdXNoaW5nIGFuZCBwb3N0aW5nIGFuIGVycm9yIG1lc3NhZ2UgaW4gdGhhdCBjYXNlIGlzIHRoZQorICAgICAgICogd3JvbmcgdGhpbmcgdG8gZG8sIGUuZy4gd2hlbiBiYXNlc3JjIGlzIGRvaW5nIGEgZmx1c2hpbmcKKyAgICAgICAqIHNlZWsuICovCisgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoYmFzZXNpbmssIFNUUkVBTSwgRkFJTEVELAorICAgICAgICAgIChfKCJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iKSksCisgICAgICAgICAgKCJzdHJlYW0gc3RvcHBlZCwgcmVhc29uICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJlc3VsdCkpKTsKKyAgICAgIGdzdF9iYXNlX3NpbmtfZXZlbnQgKHBhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpOworICAgIH0KKyAgICByZXR1cm47CisgIH0KK25vX2J1ZmZlcjoKKyAgeworICAgIEdTVF9MT0dfT0JKRUNUIChiYXNlc2luaywgIm5vIGJ1ZmZlciwgcGF1c2luZyIpOworICAgIEdTVF9FTEVNRU5UX0VSUk9SIChiYXNlc2luaywgU1RSRUFNLCBGQUlMRUQsCisgICAgICAgIChfKCJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIikpLCAoImVsZW1lbnQgcmV0dXJuZWQgTlVMTCBidWZmZXIiKSk7CisgICAgcmVzdWx0ID0gR1NUX0ZMT1dfRVJST1I7CisgICAgZ290byBwYXVzZWQ7CisgIH0KK30KKworc3RhdGljIGdib29sZWFuCitnc3RfYmFzZV9zaW5rX3NldF9mbHVzaGluZyAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaywgR3N0UGFkICogcGFkLAorICAgIGdib29sZWFuIGZsdXNoaW5nKQoreworICBHc3RCYXNlU2lua0NsYXNzICpiY2xhc3M7CisKKyAgYmNsYXNzID0gR1NUX0JBU0VfU0lOS19HRVRfQ0xBU1MgKGJhc2VzaW5rKTsKKworICBpZiAoZmx1c2hpbmcpIHsKKyAgICAvKiB1bmxvY2sgYW55IHN1YmNsYXNzZXMsIHdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgZ3JhYmJpbmcgdGhlCisgICAgICogUFJFUk9MTF9MT0NLIHNpbmNlIHdlIGhvbGQgdGhpcyBsb2NrIGJlZm9yZSBnb2luZyBpbnRvIDo6cmVuZGVyLiAqLworICAgIGlmIChiY2xhc3MtPnVubG9jaykKKyAgICAgIGJjbGFzcy0+dW5sb2NrIChiYXNlc2luayk7CisgIH0KKworICBHU1RfQkFTRV9TSU5LX1BSRVJPTExfTE9DSyAoYmFzZXNpbmspOworICBiYXNlc2luay0+Zmx1c2hpbmcgPSBmbHVzaGluZzsKKyAgaWYgKGZsdXNoaW5nKSB7CisgICAgLyogc3RlcCAxLCBub3cgdGhhdCB3ZSBoYXZlIHRoZSBQUkVST0xMIGxvY2ssIGNsZWFyIG91ciB1bmxvY2sgcmVxdWVzdCAqLworICAgIGlmIChiY2xhc3MtPnVubG9ja19zdG9wKQorICAgICAgYmNsYXNzLT51bmxvY2tfc3RvcCAoYmFzZXNpbmspOworCisgICAgLyogc2V0IG5lZWRfcHJlcm9sbCBiZWZvcmUgd2UgdW5ibG9jayB0aGUgY2xvY2suIElmIHRoZSBjbG9jayBpcyB1bmJsb2NrZWQKKyAgICAgKiBiZWZvcmUgdGltaW5nIG91dCwgd2UgY2FuIHJldXNlIHRoZSBidWZmZXIgZm9yIHByZXJvbGwuICovCisgICAgYmFzZXNpbmstPm5lZWRfcHJlcm9sbCA9IFRSVUU7CisKKyAgICAvKiBzdGVwIDIsIHVuYmxvY2sgY2xvY2sgc3luYyAoaWYgYW55KSBvciBhbnkgb3RoZXIgYmxvY2tpbmcgdGhpbmcgKi8KKyAgICBpZiAoYmFzZXNpbmstPmNsb2NrX2lkKSB7CisgICAgICBnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSAoYmFzZXNpbmstPmNsb2NrX2lkKTsKKyAgICB9CisKKyAgICAvKiBmbHVzaCBvdXQgdGhlIGRhdGEgdGhyZWFkIGlmIGl0J3MgbG9ja2VkIGluIGZpbmlzaF9wcmVyb2xsLCB0aGlzIHdpbGwKKyAgICAgKiBhbHNvIGZsdXNoIG91dCB0aGUgRU9TIHN0YXRlICovCisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssCisgICAgICAgICJmbHVzaGluZyBvdXQgZGF0YSB0aHJlYWQsIG5lZWQgcHJlcm9sbCB0byBUUlVFIik7CisgICAgZ3N0X2Jhc2Vfc2lua19wcmVyb2xsX3F1ZXVlX2ZsdXNoIChiYXNlc2luaywgcGFkKTsKKyAgfQorICBHU1RfQkFTRV9TSU5LX1BSRVJPTExfVU5MT0NLIChiYXNlc2luayk7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2Jhc2Vfc2lua19kZWZhdWx0X2FjdGl2YXRlX3B1bGwgKEdzdEJhc2VTaW5rICogYmFzZXNpbmssIGdib29sZWFuIGFjdGl2ZSkKK3sKKyAgZ2Jvb2xlYW4gcmVzdWx0OworCisgIGlmIChhY3RpdmUpIHsKKyAgICAvKiBzdGFydCB0YXNrICovCisgICAgcmVzdWx0ID0gZ3N0X3BhZF9zdGFydF90YXNrIChiYXNlc2luay0+c2lua3BhZCwKKyAgICAgICAgKEdzdFRhc2tGdW5jdGlvbikgZ3N0X2Jhc2Vfc2lua19sb29wLCBiYXNlc2luay0+c2lua3BhZCk7CisgIH0gZWxzZSB7CisgICAgLyogc3RlcCAyLCBtYWtlIHN1cmUgc3RyZWFtaW5nIGZpbmlzaGVzICovCisgICAgcmVzdWx0ID0gZ3N0X3BhZF9zdG9wX3Rhc2sgKGJhc2VzaW5rLT5zaW5rcGFkKTsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2Jhc2Vfc2lua19wYWRfYWN0aXZhdGUgKEdzdFBhZCAqIHBhZCkKK3sKKyAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisgIEdzdEJhc2VTaW5rICpiYXNlc2luazsKKyAgR3N0UXVlcnkgKnF1ZXJ5OworICBnYm9vbGVhbiBwdWxsX21vZGU7CisKKyAgYmFzZXNpbmsgPSBHU1RfQkFTRV9TSU5LIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiVHJ5aW5nIHB1bGwgbW9kZSBmaXJzdCIpOworCisgIGdzdF9iYXNlX3Npbmtfc2V0X2ZsdXNoaW5nIChiYXNlc2luaywgcGFkLCBGQUxTRSk7CisKKyAgLyogd2UgbmVlZCB0byBoYXZlIHRoZSBwdWxsIG1vZGUgZW5hYmxlZCAqLworICBpZiAoIWJhc2VzaW5rLT5jYW5fYWN0aXZhdGVfcHVsbCkgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAicHVsbCBtb2RlIGRpc2FibGVkIik7CisgICAgZ290byBmYWxsYmFjazsKKyAgfQorCisgIC8qIGNoZWNrIGlmIGRvd25zdHJlYW1zIHN1cHBvcnRzIHB1bGwgbW9kZSBhdCBhbGwgKi8KKyAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X3NjaGVkdWxpbmcgKCk7CisKKyAgaWYgKCFnc3RfcGFkX3BlZXJfcXVlcnkgKHBhZCwgcXVlcnkpKSB7CisgICAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJwZWVyIHF1ZXJ5IGZhaWxkLCBubyBwdWxsIG1vZGUiKTsKKyAgICBnb3RvIGZhbGxiYWNrOworICB9CisKKyAgLyogcGFyc2UgcmVzdWx0IG9mIHRoZSBxdWVyeSAqLworICBnc3RfcXVlcnlfcGFyc2Vfc2NoZWR1bGluZyAocXVlcnksICZwdWxsX21vZGUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKKworICBpZiAoIXB1bGxfbW9kZSkgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAicHVsbCBtb2RlIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICBnb3RvIGZhbGxiYWNrOworICB9CisKKyAgLyogc2V0IHRoZSBwYWQgbW9kZSBiZWZvcmUgc3RhcnRpbmcgdGhlIHRhc2sgc28gdGhhdCBpdCdzIGluIHRoZQorICAgKiBjb3JyZWN0IHN0YXRlIGZvciB0aGUgbmV3IHRocmVhZC4gYWxzbyB0aGUgc2luayBzZXRfY2FwcyBhbmQgZ2V0X2NhcHMKKyAgICogZnVuY3Rpb24gY2hlY2tzIHRoaXMgKi8KKyAgYmFzZXNpbmstPnBhZF9tb2RlID0gR1NUX0FDVElWQVRFX1BVTEw7CisKKyAgLyogd2UgZmlyc3QgdHJ5IHRvIG5lZ290aWF0ZSBhIGZvcm1hdCBzbyB0aGF0IHdoZW4gd2UgdHJ5IHRvIGFjdGl2YXRlCisgICAqIGRvd25zdHJlYW0sIGl0IGtub3dzIGFib3V0IG91ciBmb3JtYXQgKi8KKyAgaWYgKCFnc3RfYmFzZV9zaW5rX25lZ290aWF0ZV9wdWxsIChiYXNlc2luaykpIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgImZhaWxlZCB0byBuZWdvdGlhdGUgaW4gcHVsbCBtb2RlIik7CisgICAgZ290byBmYWxsYmFjazsKKyAgfQorCisgIC8qIG9rIGFjdGl2YXRlIG5vdyAqLworICBpZiAoIWdzdF9wYWRfYWN0aXZhdGVfcHVsbCAocGFkLCBUUlVFKSkgeworICAgIC8qIGNsZWFyIGFueSBwZW5kaW5nIGNhcHMgKi8KKyAgICBHU1RfT0JKRUNUX0xPQ0sgKGJhc2VzaW5rKTsKKyAgICBnc3RfY2Fwc19yZXBsYWNlICgmYmFzZXNpbmstPnByaXYtPnB1bGxfY2FwcywgTlVMTCk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJhc2VzaW5rKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgImZhaWxlZCB0byBhY3RpdmF0ZSBpbiBwdWxsIG1vZGUiKTsKKyAgICBnb3RvIGZhbGxiYWNrOworICB9CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJTdWNjZXNzIGFjdGl2YXRpbmcgcHVsbCBtb2RlIik7CisgIHJlc3VsdCA9IFRSVUU7CisgIGdvdG8gZG9uZTsKKworICAvKiBwdXNoIG1vZGUgZmFsbGJhY2sgKi8KK2ZhbGxiYWNrOgorICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgIkZhbGxpbmcgYmFjayB0byBwdXNoIG1vZGUiKTsKKyAgaWYgKChyZXN1bHQgPSBnc3RfcGFkX2FjdGl2YXRlX3B1c2ggKHBhZCwgVFJVRSkpKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJTdWNjZXNzIGFjdGl2YXRpbmcgcHVzaCBtb2RlIik7CisgIH0KKworZG9uZToKKyAgaWYgKCFyZXN1bHQpIHsKKyAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGJhc2VzaW5rLCAiQ291bGQgbm90IGFjdGl2YXRlIHBhZCBpbiBlaXRoZXIgbW9kZSIpOworICAgIGdzdF9iYXNlX3Npbmtfc2V0X2ZsdXNoaW5nIChiYXNlc2luaywgcGFkLCBUUlVFKTsKKyAgfQorCisgIGdzdF9vYmplY3RfdW5yZWYgKGJhc2VzaW5rKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iYXNlX3NpbmtfcGFkX2FjdGl2YXRlX3B1c2ggKEdzdFBhZCAqIHBhZCwgZ2Jvb2xlYW4gYWN0aXZlKQoreworICBnYm9vbGVhbiByZXN1bHQ7CisgIEdzdEJhc2VTaW5rICpiYXNlc2luazsKKworICBiYXNlc2luayA9IEdTVF9CQVNFX1NJTksgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7CisKKyAgaWYgKGFjdGl2ZSkgeworICAgIGlmICghYmFzZXNpbmstPmNhbl9hY3RpdmF0ZV9wdXNoKSB7CisgICAgICByZXN1bHQgPSBGQUxTRTsKKyAgICAgIGJhc2VzaW5rLT5wYWRfbW9kZSA9IEdTVF9BQ1RJVkFURV9OT05FOworICAgIH0gZWxzZSB7CisgICAgICByZXN1bHQgPSBUUlVFOworICAgICAgYmFzZXNpbmstPnBhZF9tb2RlID0gR1NUX0FDVElWQVRFX1BVU0g7CisgICAgfQorICB9IGVsc2UgeworICAgIGlmIChHX1VOTElLRUxZIChiYXNlc2luay0+cGFkX21vZGUgIT0gR1NUX0FDVElWQVRFX1BVU0gpKSB7CisgICAgICBnX3dhcm5pbmcgKCJJbnRlcm5hbCBHU3RyZWFtZXIgYWN0aXZhdGlvbiBlcnJvciEhISIpOworICAgICAgcmVzdWx0ID0gRkFMU0U7CisgICAgfSBlbHNlIHsKKyAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X2ZsdXNoaW5nIChiYXNlc2luaywgcGFkLCBUUlVFKTsKKyAgICAgIHJlc3VsdCA9IFRSVUU7CisgICAgICBiYXNlc2luay0+cGFkX21vZGUgPSBHU1RfQUNUSVZBVEVfTk9ORTsKKyAgICB9CisgIH0KKworICBnc3Rfb2JqZWN0X3VucmVmIChiYXNlc2luayk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfYmFzZV9zaW5rX25lZ290aWF0ZV9wdWxsIChHc3RCYXNlU2luayAqIGJhc2VzaW5rKQoreworICBHc3RDYXBzICpjYXBzOworICBnYm9vbGVhbiByZXN1bHQ7CisKKyAgcmVzdWx0ID0gRkFMU0U7CisKKyAgLyogdGhpcyByZXR1cm5zIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiBvdXIgY2FwcyBhbmQgdGhlIHBlZXIgY2Fwcy4gSWYgdGhlcmUKKyAgICogaXMgbm8gcGVlciwgaXQgcmV0dXJucyBOVUxMIGFuZCB3ZSBjYW4ndCBvcGVyYXRlIGluIHB1bGwgbW9kZSBzbyB3ZSBjYW4KKyAgICogZmFpbCB0aGUgbmVnb3RpYXRpb24uICovCisgIGNhcHMgPSBnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHMgKEdTVF9CQVNFX1NJTktfUEFEIChiYXNlc2luaykpOworICBpZiAoY2FwcyA9PSBOVUxMIHx8IGdzdF9jYXBzX2lzX2VtcHR5IChjYXBzKSkKKyAgICBnb3RvIG5vX2NhcHNfcG9zc2libGU7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJhbGxvd2VkIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKKworICBjYXBzID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAoY2Fwcyk7CisgIC8qIGdldCB0aGUgZmlyc3QgKHByZWZlcnJlZCkgZm9ybWF0ICovCisgIGdzdF9jYXBzX3RydW5jYXRlIChjYXBzKTsKKworICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgImhhdmUgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOworCisgIGlmIChnc3RfY2Fwc19pc19hbnkgKGNhcHMpKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJjYXBzIHdlcmUgQU5ZIGFmdGVyIGZpeGF0aW5nLCAiCisgICAgICAgICJhbGxvd2luZyBwdWxsKCkiKTsKKyAgICAvKiBuZWl0aGVyIHNpZGUgaGFzIHRlbXBsYXRlIGNhcHMgaW4gdGhpcyBjYXNlLCBzbyB0aGV5IGFyZSBwcmVwYXJlZCBmb3IKKyAgICAgICBwdWxsKCkgd2l0aG91dCBzZXRjYXBzKCkgKi8KKyAgICByZXN1bHQgPSBUUlVFOworICB9IGVsc2UgeworICAgIC8qIHRyeSB0byBmaXhhdGUgKi8KKyAgICBnc3RfcGFkX2ZpeGF0ZV9jYXBzIChHU1RfQkFTRV9TSU5LX1BBRCAoYmFzZXNpbmspLCBjYXBzKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgImZpeGF0ZWQgdG86ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKKworICAgIGlmIChnc3RfY2Fwc19pc19maXhlZCAoY2FwcykpIHsKKyAgICAgIGlmICghZ3N0X3BhZF9zZW5kX2V2ZW50IChHU1RfQkFTRV9TSU5LX1BBRCAoYmFzZXNpbmspLAorICAgICAgICAgICAgICBnc3RfZXZlbnRfbmV3X2NhcHMgKGNhcHMpKSkKKyAgICAgICAgZ290byBjb3VsZF9ub3Rfc2V0X2NhcHM7CisKKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoYmFzZXNpbmspOworICAgICAgZ3N0X2NhcHNfcmVwbGFjZSAoJmJhc2VzaW5rLT5wcml2LT5wdWxsX2NhcHMsIGNhcHMpOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJhc2VzaW5rKTsKKworICAgICAgcmVzdWx0ID0gVFJVRTsKKyAgICB9CisgIH0KKworICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7CisKKyAgcmV0dXJuIHJlc3VsdDsKKworbm9fY2Fwc19wb3NzaWJsZToKKyAgeworICAgIEdTVF9JTkZPX09CSkVDVCAoYmFzZXNpbmssICJQaXBlbGluZSBjb3VsZCBub3QgYWdyZWUgb24gY2FwcyIpOworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiZ2V0X2FsbG93ZWRfY2FwcygpIHJldHVybmVkIEVNUFRZIik7CisgICAgaWYgKGNhcHMpCisgICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Citjb3VsZF9ub3Rfc2V0X2NhcHM6CisgIHsKKyAgICBHU1RfSU5GT19PQkpFQ1QgKGJhc2VzaW5rLCAiQ291bGQgbm90IHNldCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7CisgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCisvKiB0aGlzIHdvbid0IGdldCBjYWxsZWQgdW50aWwgd2UgaW1wbGVtZW50IGFuIGFjdGl2YXRlIGZ1bmN0aW9uICovCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iYXNlX3NpbmtfcGFkX2FjdGl2YXRlX3B1bGwgKEdzdFBhZCAqIHBhZCwgZ2Jvb2xlYW4gYWN0aXZlKQoreworICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKKyAgR3N0QmFzZVNpbmsgKmJhc2VzaW5rOworICBHc3RCYXNlU2lua0NsYXNzICpiY2xhc3M7CisKKyAgYmFzZXNpbmsgPSBHU1RfQkFTRV9TSU5LIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOworICBiY2xhc3MgPSBHU1RfQkFTRV9TSU5LX0dFVF9DTEFTUyAoYmFzZXNpbmspOworCisgIGlmIChhY3RpdmUpIHsKKyAgICBnaW50NjQgZHVyYXRpb247CisKKyAgICAvKiB3ZSBtYXJrIHdlIGhhdmUgYSBuZXdzZWdtZW50IGhlcmUgYmVjYXVzZSBwdWxsIGJhc2VkCisgICAgICogbW9kZSB3b3JrcyBqdXN0IGZpbmUgd2l0aG91dCBoYXZpbmcgYSBuZXdzZWdtZW50IGJlZm9yZSB0aGUKKyAgICAgKiBmaXJzdCBidWZmZXIgKi8KKyAgICBnc3Rfc2VnbWVudF9pbml0ICgmYmFzZXNpbmstPnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMpOworICAgIGdzdF9zZWdtZW50X2luaXQgKCZiYXNlc2luay0+Y2xpcF9zZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTKTsKKyAgICBHU1RfT0JKRUNUX0xPQ0sgKGJhc2VzaW5rKTsKKyAgICBiYXNlc2luay0+aGF2ZV9uZXdzZWdtZW50ID0gVFJVRTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNpbmspOworCisgICAgLyogZ2V0IHRoZSBwZWVyIGR1cmF0aW9uIGluIGJ5dGVzICovCisgICAgcmVzdWx0ID0gZ3N0X3BhZF9xdWVyeV9wZWVyX2R1cmF0aW9uIChwYWQsIEdTVF9GT1JNQVRfQllURVMsICZkdXJhdGlvbik7CisgICAgaWYgKHJlc3VsdCkgeworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssCisgICAgICAgICAgInNldHRpbmcgZHVyYXRpb24gaW4gYnl0ZXMgdG8gJSIgR19HSU5UNjRfRk9STUFULCBkdXJhdGlvbik7CisgICAgICBiYXNlc2luay0+Y2xpcF9zZWdtZW50LmR1cmF0aW9uID0gZHVyYXRpb247CisgICAgICBiYXNlc2luay0+c2VnbWVudC5kdXJhdGlvbiA9IGR1cmF0aW9uOworICAgIH0gZWxzZSB7CisgICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgInVua25vd24gZHVyYXRpb24iKTsKKyAgICB9CisKKyAgICBpZiAoYmNsYXNzLT5hY3RpdmF0ZV9wdWxsKQorICAgICAgcmVzdWx0ID0gYmNsYXNzLT5hY3RpdmF0ZV9wdWxsIChiYXNlc2luaywgVFJVRSk7CisgICAgZWxzZQorICAgICAgcmVzdWx0ID0gRkFMU0U7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgIGdvdG8gYWN0aXZhdGVfZmFpbGVkOworCisgIH0gZWxzZSB7CisgICAgaWYgKEdfVU5MSUtFTFkgKGJhc2VzaW5rLT5wYWRfbW9kZSAhPSBHU1RfQUNUSVZBVEVfUFVMTCkpIHsKKyAgICAgIGdfd2FybmluZyAoIkludGVybmFsIEdTdHJlYW1lciBhY3RpdmF0aW9uIGVycm9yISEhIik7CisgICAgICByZXN1bHQgPSBGQUxTRTsKKyAgICB9IGVsc2UgeworICAgICAgcmVzdWx0ID0gZ3N0X2Jhc2Vfc2lua19zZXRfZmx1c2hpbmcgKGJhc2VzaW5rLCBwYWQsIFRSVUUpOworICAgICAgaWYgKGJjbGFzcy0+YWN0aXZhdGVfcHVsbCkKKyAgICAgICAgcmVzdWx0ICY9IGJjbGFzcy0+YWN0aXZhdGVfcHVsbCAoYmFzZXNpbmssIEZBTFNFKTsKKyAgICAgIGJhc2VzaW5rLT5wYWRfbW9kZSA9IEdTVF9BQ1RJVkFURV9OT05FOworICAgICAgLyogY2xlYXIgYW55IHBlbmRpbmcgY2FwcyAqLworICAgICAgR1NUX09CSkVDVF9MT0NLIChiYXNlc2luayk7CisgICAgICBnc3RfY2Fwc19yZXBsYWNlICgmYmFzZXNpbmstPnByaXYtPnB1bGxfY2FwcywgTlVMTCk7CisgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNpbmspOworICAgIH0KKyAgfQorICBnc3Rfb2JqZWN0X3VucmVmIChiYXNlc2luayk7CisKKyAgcmV0dXJuIHJlc3VsdDsKKworICAvKiBFUlJPUlMgKi8KK2FjdGl2YXRlX2ZhaWxlZDoKKyAgeworICAgIC8qIHJlc2V0LCBhcyBzdGFydGluZyB0aGUgdGhyZWFkIGZhaWxlZCAqLworICAgIGJhc2VzaW5rLT5wYWRfbW9kZSA9IEdTVF9BQ1RJVkFURV9OT05FOworCisgICAgR1NUX0VSUk9SX09CSkVDVCAoYmFzZXNpbmssICJzdWJjbGFzcyBmYWlsZWQgdG8gYWN0aXZhdGUgaW4gcHVsbCBtb2RlIik7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKKy8qIHNlbmQgYW4gZXZlbnQgdG8gb3VyIHNpbmtwYWQgcGVlci4gKi8KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2Jhc2Vfc2lua19zZW5kX2V2ZW50IChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0RXZlbnQgKiBldmVudCkKK3sKKyAgR3N0UGFkICpwYWQ7CisgIEdzdEJhc2VTaW5rICpiYXNlc2luayA9IEdTVF9CQVNFX1NJTksgKGVsZW1lbnQpOworICBnYm9vbGVhbiBmb3J3YXJkLCByZXN1bHQgPSBUUlVFOworICBHc3RBY3RpdmF0ZU1vZGUgbW9kZTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOworICAvKiBnZXQgdGhlIHBhZCBhbmQgdGhlIHNjaGVkdWxpbmcgbW9kZSAqLworICBwYWQgPSBnc3Rfb2JqZWN0X3JlZiAoYmFzZXNpbmstPnNpbmtwYWQpOworICBtb2RlID0gYmFzZXNpbmstPnBhZF9tb2RlOworICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7CisKKyAgLyogb25seSBwdXNoIFVQU1RSRUFNIGV2ZW50cyB1cHN0cmVhbSAqLworICBmb3J3YXJkID0gR1NUX0VWRU5UX0lTX1VQU1RSRUFNIChldmVudCk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJoYW5kbGluZyBldmVudCAlcCAlIiBHU1RfUFRSX0ZPUk1BVCwgZXZlbnQsCisgICAgICBldmVudCk7CisKKyAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7CisgICAgY2FzZSBHU1RfRVZFTlRfTEFURU5DWToKKyAgICB7CisgICAgICBHc3RDbG9ja1RpbWUgbGF0ZW5jeTsKKworICAgICAgZ3N0X2V2ZW50X3BhcnNlX2xhdGVuY3kgKGV2ZW50LCAmbGF0ZW5jeSk7CisKKyAgICAgIC8qIHN0b3JlIHRoZSBsYXRlbmN5LiBXZSB1c2UgdGhpcyB0byBhZGp1c3QgdGhlIHJ1bm5pbmdfdGltZSBiZWZvcmUgc3luY2luZworICAgICAgICogaXQgdG8gdGhlIGNsb2NrLiAqLworICAgICAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKKyAgICAgIGJhc2VzaW5rLT5wcml2LT5sYXRlbmN5ID0gbGF0ZW5jeTsKKyAgICAgIGlmICghYmFzZXNpbmstPnByaXYtPmhhdmVfbGF0ZW5jeSkKKyAgICAgICAgZm9yd2FyZCA9IEZBTFNFOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJsYXRlbmN5IHNldCB0byAlIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICAgICAgR1NUX1RJTUVfQVJHUyAobGF0ZW5jeSkpOworCisgICAgICAvKiBXZSBmb3J3YXJkIHRoaXMgZXZlbnQgc28gdGhhdCBhbGwgZWxlbWVudHMga25vdyBhYm91dCB0aGUgZ2xvYmFsIHBpcGVsaW5lCisgICAgICAgKiBsYXRlbmN5LiBUaGlzIGlzIGludGVyZXN0aW5nIGZvciBhbiBlbGVtZW50IHdoZW4gaXQgd2FudHMgdG8gZmlndXJlIG91dAorICAgICAgICogd2hlbiBhIHBhcnRpY3VsYXIgcGllY2Ugb2YgZGF0YSB3aWxsIGJlIHJlbmRlcmVkLiAqLworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX0VWRU5UX1NFRUs6CisgICAgICAvKiBpbiBwdWxsIG1vZGUgd2Ugd2lsbCBleGVjdXRlIHRoZSBzZWVrICovCisgICAgICBpZiAobW9kZSA9PSBHU1RfQUNUSVZBVEVfUFVMTCkKKyAgICAgICAgcmVzdWx0ID0gZ3N0X2Jhc2Vfc2lua19wZXJmb3JtX3NlZWsgKGJhc2VzaW5rLCBwYWQsIGV2ZW50KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX0VWRU5UX1NURVA6CisgICAgICByZXN1bHQgPSBnc3RfYmFzZV9zaW5rX3BlcmZvcm1fc3RlcCAoYmFzZXNpbmssIHBhZCwgZXZlbnQpOworICAgICAgZm9yd2FyZCA9IEZBTFNFOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgaWYgKGZvcndhcmQpIHsKKyAgICByZXN1bHQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZXZlbnQpOworICB9IGVsc2UgeworICAgIC8qIG5vdCBmb3J3YXJkZWQsIHVucmVmIHRoZSBldmVudCAqLworICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworICB9CisKKyAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfYmFzZV9zaW5rX2dldF9wb3NpdGlvbiAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaywgR3N0Rm9ybWF0IGZvcm1hdCwKKyAgICBnaW50NjQgKiBjdXIsIGdib29sZWFuICogdXBzdHJlYW0pCit7CisgIEdzdENsb2NrICpjbG9jayA9IE5VTEw7CisgIGdib29sZWFuIHJlcyA9IEZBTFNFOworICBHc3RGb3JtYXQgb2Zvcm1hdDsKKyAgR3N0U2VnbWVudCAqc2VnbWVudDsKKyAgR3N0Q2xvY2tUaW1lIG5vdywgbGF0ZW5jeTsKKyAgR3N0Q2xvY2tUaW1lRGlmZiBiYXNlX3RpbWU7CisgIGdpbnQ2NCB0aW1lLCBiYXNlLCBkdXJhdGlvbjsKKyAgZ2RvdWJsZSByYXRlOworICBnaW50NjQgbGFzdDsKKyAgZ2Jvb2xlYW4gbGFzdF9zZWVuLCB3aXRoX2Nsb2NrLCBpbl9wYXVzZWQ7CisKKyAgR1NUX09CSkVDVF9MT0NLIChiYXNlc2luayk7CisgIC8qIHdlIGNhbiBvbmx5IGdldCB0aGUgc2VnbWVudCB3aGVuIHdlIGFyZSBub3QgTlVMTCBvciBSRUFEWSAqLworICBpZiAoIWJhc2VzaW5rLT5oYXZlX25ld3NlZ21lbnQpCisgICAgZ290byB3cm9uZ19zdGF0ZTsKKworICBpbl9wYXVzZWQgPSBGQUxTRTsKKyAgLyogd2hlbiBub3QgaW4gUExBWUlORyBvciB3aGVuIHdlJ3JlIGJ1c3kgd2l0aCBhIHN0YXRlIGNoYW5nZSwgd2UKKyAgICogY2Fubm90IHJlYWQgZnJvbSB0aGUgY2xvY2sgc28gd2UgcmVwb3J0IHRpbWUgYmFzZWQgb24gdGhlCisgICAqIGxhc3Qgc2VlbiB0aW1lc3RhbXAuICovCisgIGlmIChHU1RfU1RBVEUgKGJhc2VzaW5rKSAhPSBHU1RfU1RBVEVfUExBWUlORyB8fAorICAgICAgR1NUX1NUQVRFX1BFTkRJTkcgKGJhc2VzaW5rKSAhPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HKSB7CisgICAgaW5fcGF1c2VkID0gVFJVRTsKKyAgfQorCisgIC8qIHdlIGRvbid0IHVzZSB0aGUgY2xpcCBzZWdtZW50IGluIHB1bGwgbW9kZSwgd2hlbiBzZWVraW5nIHdlIHVwZGF0ZSB0aGUKKyAgICogbWFpbiBzZWdtZW50IGRpcmVjdGx5IHdpdGggdGhlIG5ldyBzZWdtZW50IHZhbHVlcyB3aXRob3V0IGl0IGhhdmluZyB0byBiZQorICAgKiBhY3RpdmF0ZWQgYnkgdGhlIHJlbmRlcmluZyBhZnRlciBwcmVyb2xsICovCisgIGlmIChiYXNlc2luay0+cGFkX21vZGUgPT0gR1NUX0FDVElWQVRFX1BVU0gpCisgICAgc2VnbWVudCA9ICZiYXNlc2luay0+Y2xpcF9zZWdtZW50OworICBlbHNlCisgICAgc2VnbWVudCA9ICZiYXNlc2luay0+c2VnbWVudDsKKworICAvKiBnZXQgdGhlIGZvcm1hdCBpbiB0aGUgc2VnbWVudCAqLworICBvZm9ybWF0ID0gc2VnbWVudC0+Zm9ybWF0OworCisgIC8qIHJlcG9ydCB3aXRoIGxhc3Qgc2VlbiBwb3NpdGlvbiB3aGVuIEVPUyAqLworICBsYXN0X3NlZW4gPSBiYXNlc2luay0+ZW9zOworCisgIC8qIGFzc3VtZSB3ZSB3aWxsIHVzZSB0aGUgY2xvY2sgZm9yIGdldHRpbmcgdGhlIGN1cnJlbnQgcG9zaXRpb24gKi8KKyAgd2l0aF9jbG9jayA9IFRSVUU7CisgIGlmIChiYXNlc2luay0+c3luYyA9PSBGQUxTRSkKKyAgICB3aXRoX2Nsb2NrID0gRkFMU0U7CisKKyAgLyogYW5kIHdlIG5lZWQgYSBjbG9jayAqLworICBpZiAoR19VTkxJS0VMWSAoKGNsb2NrID0gR1NUX0VMRU1FTlRfQ0xPQ0sgKGJhc2VzaW5rKSkgPT0gTlVMTCkpCisgICAgd2l0aF9jbG9jayA9IEZBTFNFOworICBlbHNlCisgICAgZ3N0X29iamVjdF9yZWYgKGNsb2NrKTsKKworICAvKiBtYWlubG9vcCBtaWdodCBiZSBxdWVyeWluZyBwb3NpdGlvbiB3aGVuIGdvaW5nIHRvIHBsYXlpbmcgYXN5bmMsCisgICAqIHdoaWxlIChhdWRpbykgcmVuZGVyaW5nIG1pZ2h0IGJlIHF1aWNrbHkgYWR2YW5jaW5nIHN0cmVhbSBwb3NpdGlvbiwKKyAgICogc28gdXNlIGNsb2NrIGFzYXAgcmF0aGVyIHRoYW4gbGFzdCByZXBvcnRlZCBwb3NpdGlvbiAqLworICBpZiAoaW5fcGF1c2VkICYmIHdpdGhfY2xvY2sgJiYgZ19hdG9taWNfaW50X2dldCAoJmJhc2VzaW5rLT5wcml2LT50b19wbGF5aW5nKSkgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiZ29pbmcgdG8gUExBWUlORywgc28gbm90IFBBVVNFRCIpOworICAgIGluX3BhdXNlZCA9IEZBTFNFOworICB9CisKKyAgLyogY29sbGVjdCBhbGwgZGF0YSB3ZSBuZWVkIGhvbGRpbmcgdGhlIGxvY2sgKi8KKyAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzZWdtZW50LT50aW1lKSkKKyAgICB0aW1lID0gc2VnbWVudC0+dGltZTsKKyAgZWxzZQorICAgIHRpbWUgPSAwOworCisgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoc2VnbWVudC0+c3RvcCkpCisgICAgZHVyYXRpb24gPSBzZWdtZW50LT5zdG9wIC0gc2VnbWVudC0+c3RhcnQ7CisgIGVsc2UKKyAgICBkdXJhdGlvbiA9IDA7CisKKyAgYmFzZSA9IHNlZ21lbnQtPmJhc2U7CisgIHJhdGUgPSBzZWdtZW50LT5yYXRlICogc2VnbWVudC0+YXBwbGllZF9yYXRlOworICBsYXRlbmN5ID0gYmFzZXNpbmstPnByaXYtPmxhdGVuY3k7CisKKyAgaWYgKG9mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKSB7CisgICAgZ2ludDY0IHN0YXJ0LCBzdG9wOworCisgICAgc3RhcnQgPSBiYXNlc2luay0+cHJpdi0+Y3VycmVudF9zc3RhcnQ7CisgICAgc3RvcCA9IGJhc2VzaW5rLT5wcml2LT5jdXJyZW50X3NzdG9wOworCisgICAgaWYgKGluX3BhdXNlZCkgeworICAgICAgLyogaW4gcGF1c2VkIHdlIHVzZSB0aGUgbGFzdCBwb3NpdGlvbiBhcyBhIGxvd2VyIGJvdW5kICovCisgICAgICBpZiAoc3RvcCA9PSAtMSB8fCBzZWdtZW50LT5yYXRlID4gMC4wKQorICAgICAgICBsYXN0ID0gc3RhcnQ7CisgICAgICBlbHNlCisgICAgICAgIGxhc3QgPSBzdG9wOworICAgIH0gZWxzZSB7CisgICAgICAvKiBpbiBwbGF5aW5nLCB1c2UgbGFzdCBzdG9wIHRpbWUgYXMgdXBwZXIgYm91bmQgKi8KKyAgICAgIGlmIChzdGFydCA9PSAtMSB8fCBzZWdtZW50LT5yYXRlID4gMC4wKQorICAgICAgICBsYXN0ID0gc3RvcDsKKyAgICAgIGVsc2UKKyAgICAgICAgbGFzdCA9IHN0YXJ0OworICAgIH0KKyAgfSBlbHNlIHsKKyAgICAvKiBjb252ZXJ0IGxhc3Qgc3RvcCB0byBzdHJlYW0gdGltZSAqLworICAgIGxhc3QgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoc2VnbWVudCwgb2Zvcm1hdCwgc2VnbWVudC0+cG9zaXRpb24pOworICB9CisKKyAgaWYgKGluX3BhdXNlZCkgeworICAgIC8qIGluIHBhdXNlZCwgdXNlIHN0YXJ0X3RpbWUgKi8KKyAgICBiYXNlX3RpbWUgPSBHU1RfRUxFTUVOVF9TVEFSVF9USU1FIChiYXNlc2luayk7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJpbiBwYXVzZWQsIHVzaW5nIHN0YXJ0IHRpbWUgJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgICBHU1RfVElNRV9BUkdTIChiYXNlX3RpbWUpKTsKKyAgfSBlbHNlIGlmICh3aXRoX2Nsb2NrKSB7CisgICAgLyogZWxzZSB1c2UgY2xvY2sgd2hlbiBuZWVkZWQgKi8KKyAgICBiYXNlX3RpbWUgPSBHU1RfRUxFTUVOVF9DQVNUIChiYXNlc2luayktPmJhc2VfdGltZTsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgInVzaW5nIGNsb2NrIGFuZCBiYXNlIHRpbWUgJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgICBHU1RfVElNRV9BUkdTIChiYXNlX3RpbWUpKTsKKyAgfSBlbHNlIHsKKyAgICAvKiBlbHNlLCBubyBzeW5jIG9yIGNsb2NrIC0+IG5vIGJhc2UgdGltZSAqLworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAibm8gc3luYyBvciBubyBjbG9jayIpOworICAgIGJhc2VfdGltZSA9IC0xOworICB9CisKKyAgLyogbm8gYmFzZV90aW1lLCB3ZSBjYW4ndCBjYWxjdWxhdGUgcnVubmluZ190aW1lLCB1c2UgbGFzdCBzZWVtIHRpbWVzdGFtcCB0byByZXBvcnQKKyAgICogdGltZSAqLworICBpZiAoYmFzZV90aW1lID09IC0xKQorICAgIGxhc3Rfc2VlbiA9IFRSVUU7CisKKyAgLyogbmVlZCB0byByZWxlYXNlIHRoZSBvYmplY3QgbG9jayBiZWZvcmUgd2UgY2FuIGdldCB0aGUgdGltZSwKKyAgICogYSBjbG9jayBtaWdodCB0YWtlIHRoZSBMT0NLIG9mIHRoZSBwcm92aWRlciwgd2hpY2ggY291bGQgYmUKKyAgICogYSBiYXNlc2luayBzdWJjbGFzcy4gKi8KKyAgR1NUX09CSkVDVF9VTkxPQ0sgKGJhc2VzaW5rKTsKKworICBpZiAobGFzdF9zZWVuKSB7CisgICAgLyogaW4gRU9TIG9yIHdoZW4gbm8gdmFsaWQgc3RyZWFtX3RpbWUsIHJlcG9ydCB0aGUgdmFsdWUgb2YgbGFzdCBzZWVuCisgICAgICogdGltZXN0YW1wICovCisgICAgaWYgKGxhc3QgPT0gLTEpIHsKKyAgICAgIC8qIG5vIHRpbWVzdGFtcCwgd2UgbmVlZCB0byBhc2sgdXBzdHJlYW0gKi8KKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAibm8gbGFzdCBzZWVuIHRpbWVzdGFtcCwgYXNraW5nIHVwc3RyZWFtIik7CisgICAgICByZXMgPSBGQUxTRTsKKyAgICAgICp1cHN0cmVhbSA9IFRSVUU7CisgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAidXNpbmcgbGFzdCBzZWVuIHRpbWVzdGFtcCAlIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICAgIEdTVF9USU1FX0FSR1MgKGxhc3QpKTsKKyAgICAqY3VyID0gbGFzdDsKKyAgfSBlbHNlIHsKKyAgICBpZiAob2Zvcm1hdCAhPSBHU1RfRk9STUFUX1RJTUUpIHsKKyAgICAgIC8qIGNvbnZlcnQgYmFzZSwgdGltZSBhbmQgZHVyYXRpb24gdG8gdGltZSAqLworICAgICAgaWYgKCFnc3RfcGFkX3F1ZXJ5X2NvbnZlcnQgKGJhc2VzaW5rLT5zaW5rcGFkLCBvZm9ybWF0LCBiYXNlLAorICAgICAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsICZiYXNlKSkKKyAgICAgICAgZ290byBjb252ZXJ0X2ZhaWxlZDsKKyAgICAgIGlmICghZ3N0X3BhZF9xdWVyeV9jb252ZXJ0IChiYXNlc2luay0+c2lua3BhZCwgb2Zvcm1hdCwgZHVyYXRpb24sCisgICAgICAgICAgICAgIEdTVF9GT1JNQVRfVElNRSwgJmR1cmF0aW9uKSkKKyAgICAgICAgZ290byBjb252ZXJ0X2ZhaWxlZDsKKyAgICAgIGlmICghZ3N0X3BhZF9xdWVyeV9jb252ZXJ0IChiYXNlc2luay0+c2lua3BhZCwgb2Zvcm1hdCwgdGltZSwKKyAgICAgICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCAmdGltZSkpCisgICAgICAgIGdvdG8gY29udmVydF9mYWlsZWQ7CisgICAgICBpZiAoIWdzdF9wYWRfcXVlcnlfY29udmVydCAoYmFzZXNpbmstPnNpbmtwYWQsIG9mb3JtYXQsIGxhc3QsCisgICAgICAgICAgICAgIEdTVF9GT1JNQVRfVElNRSwgJmxhc3QpKQorICAgICAgICBnb3RvIGNvbnZlcnRfZmFpbGVkOworCisgICAgICAvKiBhc3N1bWUgdGltZSBmb3JtYXQgZnJvbSBub3cgb24gKi8KKyAgICAgIG9mb3JtYXQgPSBHU1RfRk9STUFUX1RJTUU7CisgICAgfQorCisgICAgaWYgKCFpbl9wYXVzZWQgJiYgd2l0aF9jbG9jaykgeworICAgICAgbm93ID0gZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jayk7CisgICAgfSBlbHNlIHsKKyAgICAgIG5vdyA9IGJhc2VfdGltZTsKKyAgICAgIGJhc2VfdGltZSA9IDA7CisgICAgfQorCisgICAgLyogc3VidHJhY3QgYmFzZSB0aW1lIGFuZCBiYXNlIHRpbWUgZnJvbSB0aGUgY2xvY2sgdGltZS4KKyAgICAgKiBNYWtlIHN1cmUgd2UgZG9uJ3QgZ28gbmVnYXRpdmUuIFRoaXMgaXMgdGhlIGN1cnJlbnQgdGltZSBpbgorICAgICAqIHRoZSBzZWdtZW50IHdoaWNoIHdlIG5lZWQgdG8gc2NhbGUgd2l0aCB0aGUgY29tYmluZWQKKyAgICAgKiByYXRlIGFuZCBhcHBsaWVkIHJhdGUuICovCisgICAgYmFzZV90aW1lICs9IGJhc2U7CisgICAgYmFzZV90aW1lICs9IGxhdGVuY3k7CisgICAgaWYgKEdTVF9DTE9DS19ESUZGIChiYXNlX3RpbWUsIG5vdykgPCAwKQorICAgICAgYmFzZV90aW1lID0gbm93OworCisgICAgLyogZm9yIG5lZ2F0aXZlIHJhdGVzIHdlIG5lZWQgdG8gY291bnQgYmFjayBmcm9tIHRoZSBzZWdtZW50CisgICAgICogZHVyYXRpb24uICovCisgICAgaWYgKHJhdGUgPCAwLjApCisgICAgICB0aW1lICs9IGR1cmF0aW9uOworCisgICAgKmN1ciA9IHRpbWUgKyBnc3RfZ3VpbnQ2NF90b19nZG91YmxlIChub3cgLSBiYXNlX3RpbWUpICogcmF0ZTsKKworICAgIGlmIChpbl9wYXVzZWQpIHsKKyAgICAgIC8qIG5ldmVyIHJlcG9ydCBsZXNzIHRoYW4gc2VnbWVudCB2YWx1ZXMgaW4gcGF1c2VkICovCisgICAgICBpZiAobGFzdCAhPSAtMSkKKyAgICAgICAgKmN1ciA9IE1BWCAobGFzdCwgKmN1cik7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIG5ldmVyIHJlcG9ydCBtb3JlIHRoYW4gbGFzdCBzZWVuIHBvc2l0aW9uIGluIHBsYXlpbmcgKi8KKyAgICAgIGlmIChsYXN0ICE9IC0xKQorICAgICAgICAqY3VyID0gTUlOIChsYXN0LCAqY3VyKTsKKyAgICB9CisKKyAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywKKyAgICAgICAgIm5vdyAlIiBHU1RfVElNRV9GT1JNQVQgIiAtIGJhc2VfdGltZSAlIiBHU1RfVElNRV9GT1JNQVQgIiAtIGJhc2UgJSIKKyAgICAgICAgR1NUX1RJTUVfRk9STUFUICIgKyB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVCAiICBsYXN0ICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgICAgR1NUX1RJTUVfQVJHUyAobm93KSwgR1NUX1RJTUVfQVJHUyAoYmFzZV90aW1lKSwgR1NUX1RJTUVfQVJHUyAoYmFzZSksCisgICAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWUpLCBHU1RfVElNRV9BUkdTIChsYXN0KSk7CisgIH0KKworICBpZiAob2Zvcm1hdCAhPSBmb3JtYXQpIHsKKyAgICAvKiBjb252ZXJ0IHRvIGZpbmFsIGZvcm1hdCAqLworICAgIGlmICghZ3N0X3BhZF9xdWVyeV9jb252ZXJ0IChiYXNlc2luay0+c2lua3BhZCwgb2Zvcm1hdCwgKmN1ciwgZm9ybWF0LCBjdXIpKQorICAgICAgZ290byBjb252ZXJ0X2ZhaWxlZDsKKyAgfQorCisgIHJlcyA9IFRSVUU7CisKK2RvbmU6CisgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAicmVzOiAlZCwgUE9TSVRJT046ICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgIHJlcywgR1NUX1RJTUVfQVJHUyAoKmN1cikpOworCisgIGlmIChjbG9jaykKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7CisKKyAgcmV0dXJuIHJlczsKKworICAvKiBzcGVjaWFsIGNhc2VzICovCit3cm9uZ19zdGF0ZToKKyAgeworICAgIC8qIGluIE5VTEwgb3IgUkVBRFkgd2UgYWx3YXlzIHJldHVybiBGQUxTRSBhbmQgLTEgKi8KKyAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgInBvc2l0aW9uIGluIHdyb25nIHN0YXRlLCByZXR1cm4gLTEiKTsKKyAgICByZXMgPSBGQUxTRTsKKyAgICAqY3VyID0gLTE7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJhc2VzaW5rKTsKKyAgICBnb3RvIGRvbmU7CisgIH0KK2NvbnZlcnRfZmFpbGVkOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJjb252ZXJ0IGZhaWxlZCwgdHJ5IHVwc3RyZWFtIik7CisgICAgKnVwc3RyZWFtID0gVFJVRTsKKyAgICByZXMgPSBGQUxTRTsKKyAgICBnb3RvIGRvbmU7CisgIH0KK30KKworc3RhdGljIGdib29sZWFuCitnc3RfYmFzZV9zaW5rX2dldF9kdXJhdGlvbiAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaywgR3N0Rm9ybWF0IGZvcm1hdCwKKyAgICBnaW50NjQgKiBkdXIsIGdib29sZWFuICogdXBzdHJlYW0pCit7CisgIGdib29sZWFuIHJlcyA9IEZBTFNFOworCisgIGlmIChiYXNlc2luay0+cGFkX21vZGUgPT0gR1NUX0FDVElWQVRFX1BVTEwpIHsKKyAgICBnaW50NjQgdWR1cmF0aW9uOworCisgICAgLyogZ2V0IHRoZSBkdXJhdGlvbiBpbiBieXRlcywgaW4gcHVsbCBtb2RlIHRoYXQncyBhbGwgd2UgYXJlIHN1cmUgdG8KKyAgICAgKiBrbm93LiBXZSBoYXZlIHRvIGV4cGxpY2l0bHkgZ2V0IHRoaXMgdmFsdWUgZnJvbSB1cHN0cmVhbSBpbnN0ZWFkIG9mCisgICAgICogdXNpbmcgb3VyIGNhY2hlZCB2YWx1ZSBiZWNhdXNlIGl0IG1pZ2h0IGNoYW5nZS4gRHVyYXRpb24gY2FjaGluZworICAgICAqIHNob3VsZCBiZSBkb25lIGF0IGEgaGlnaGVyIGxldmVsLiAqLworICAgIHJlcyA9CisgICAgICAgIGdzdF9wYWRfcXVlcnlfcGVlcl9kdXJhdGlvbiAoYmFzZXNpbmstPnNpbmtwYWQsIEdTVF9GT1JNQVRfQllURVMsCisgICAgICAgICZ1ZHVyYXRpb24pOworICAgIGlmIChyZXMpIHsKKyAgICAgIGJhc2VzaW5rLT5zZWdtZW50LmR1cmF0aW9uID0gdWR1cmF0aW9uOworICAgICAgaWYgKGZvcm1hdCAhPSBHU1RfRk9STUFUX0JZVEVTKSB7CisgICAgICAgIC8qIGNvbnZlcnQgdG8gdGhlIHJlcXVlc3RlZCBmb3JtYXQgKi8KKyAgICAgICAgcmVzID0KKyAgICAgICAgICAgIGdzdF9wYWRfcXVlcnlfY29udmVydCAoYmFzZXNpbmstPnNpbmtwYWQsIEdTVF9GT1JNQVRfQllURVMsCisgICAgICAgICAgICB1ZHVyYXRpb24sIGZvcm1hdCwgZHVyKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICpkdXIgPSB1ZHVyYXRpb247CisgICAgICB9CisgICAgfQorICAgICp1cHN0cmVhbSA9IEZBTFNFOworICB9IGVsc2UgeworICAgICp1cHN0cmVhbSA9IFRSVUU7CisgIH0KKworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgY29uc3QgR3N0UXVlcnlUeXBlICoKK2dzdF9iYXNlX3NpbmtfZ2V0X3F1ZXJ5X3R5cGVzIChHc3RFbGVtZW50ICogZWxlbWVudCkKK3sKKyAgc3RhdGljIGNvbnN0IEdzdFF1ZXJ5VHlwZSBxdWVyeV90eXBlc1tdID0geworICAgIEdTVF9RVUVSWV9EVVJBVElPTiwKKyAgICBHU1RfUVVFUllfUE9TSVRJT04sCisgICAgR1NUX1FVRVJZX1NFR01FTlQsCisgICAgR1NUX1FVRVJZX0xBVEVOQ1ksCisgICAgMAorICB9OworCisgIHJldHVybiBxdWVyeV90eXBlczsKK30KKworc3RhdGljIGdib29sZWFuCitkZWZhdWx0X2VsZW1lbnRfcXVlcnkgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KQoreworICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKKworICBHc3RCYXNlU2luayAqYmFzZXNpbmsgPSBHU1RfQkFTRV9TSU5LIChlbGVtZW50KTsKKworICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKKyAgICBjYXNlIEdTVF9RVUVSWV9QT1NJVElPTjoKKyAgICB7CisgICAgICBnaW50NjQgY3VyID0gMDsKKyAgICAgIEdzdEZvcm1hdCBmb3JtYXQ7CisgICAgICBnYm9vbGVhbiB1cHN0cmVhbSA9IEZBTFNFOworCisgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24gKHF1ZXJ5LCAmZm9ybWF0LCBOVUxMKTsKKworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJwb3NpdGlvbiBxdWVyeSBpbiBmb3JtYXQgJXMiLAorICAgICAgICAgIGdzdF9mb3JtYXRfZ2V0X25hbWUgKGZvcm1hdCkpOworCisgICAgICAvKiBmaXJzdCB0cnkgdG8gZ2V0IHRoZSBwb3NpdGlvbiBiYXNlZCBvbiB0aGUgY2xvY2sgKi8KKyAgICAgIGlmICgocmVzID0KKyAgICAgICAgICAgICAgZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24gKGJhc2VzaW5rLCBmb3JtYXQsICZjdXIsICZ1cHN0cmVhbSkpKSB7CisgICAgICAgIGdzdF9xdWVyeV9zZXRfcG9zaXRpb24gKHF1ZXJ5LCBmb3JtYXQsIGN1cik7CisgICAgICB9IGVsc2UgaWYgKHVwc3RyZWFtKSB7CisgICAgICAgIC8qIGZhbGxiYWNrIHRvIHBlZXIgcXVlcnkgKi8KKyAgICAgICAgcmVzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5IChiYXNlc2luay0+c2lua3BhZCwgcXVlcnkpOworICAgICAgfQorICAgICAgaWYgKCFyZXMpIHsKKyAgICAgICAgLyogd2UgY2FuIGhhbmRsZSBhIGZldyB0aGluZ3MgaWYgdXBzdHJlYW0gZmFpbGVkICovCisgICAgICAgIGlmIChmb3JtYXQgPT0gR1NUX0ZPUk1BVF9QRVJDRU5UKSB7CisgICAgICAgICAgZ2ludDY0IGR1ciA9IDA7CisKKyAgICAgICAgICByZXMgPSBnc3RfYmFzZV9zaW5rX2dldF9wb3NpdGlvbiAoYmFzZXNpbmssIEdTVF9GT1JNQVRfVElNRSwgJmN1ciwKKyAgICAgICAgICAgICAgJnVwc3RyZWFtKTsKKyAgICAgICAgICBpZiAoIXJlcyAmJiB1cHN0cmVhbSkgeworICAgICAgICAgICAgcmVzID0KKyAgICAgICAgICAgICAgICBnc3RfcGFkX3F1ZXJ5X3BlZXJfcG9zaXRpb24gKGJhc2VzaW5rLT5zaW5rcGFkLCBHU1RfRk9STUFUX1RJTUUsCisgICAgICAgICAgICAgICAgJmN1cik7CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChyZXMpIHsKKyAgICAgICAgICAgIHJlcyA9IGdzdF9iYXNlX3NpbmtfZ2V0X2R1cmF0aW9uIChiYXNlc2luaywgR1NUX0ZPUk1BVF9USU1FLCAmZHVyLAorICAgICAgICAgICAgICAgICZ1cHN0cmVhbSk7CisgICAgICAgICAgICBpZiAoIXJlcyAmJiB1cHN0cmVhbSkgeworICAgICAgICAgICAgICByZXMgPQorICAgICAgICAgICAgICAgICAgZ3N0X3BhZF9xdWVyeV9wZWVyX2R1cmF0aW9uIChiYXNlc2luay0+c2lua3BhZCwKKyAgICAgICAgICAgICAgICAgIEdTVF9GT1JNQVRfVElNRSwgJmR1cik7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChyZXMpIHsKKyAgICAgICAgICAgIGdpbnQ2NCBwb3M7CisKKyAgICAgICAgICAgIHBvcyA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoMTAwICogR1NUX0ZPUk1BVF9QRVJDRU5UX1NDQUxFLCBjdXIsCisgICAgICAgICAgICAgICAgZHVyKTsKKyAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfcG9zaXRpb24gKHF1ZXJ5LCBHU1RfRk9STUFUX1BFUkNFTlQsIHBvcyk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfUVVFUllfRFVSQVRJT046CisgICAgeworICAgICAgZ2ludDY0IGR1ciA9IDA7CisgICAgICBHc3RGb3JtYXQgZm9ybWF0OworICAgICAgZ2Jvb2xlYW4gdXBzdHJlYW0gPSBGQUxTRTsKKworICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uIChxdWVyeSwgJmZvcm1hdCwgTlVMTCk7CisKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiZHVyYXRpb24gcXVlcnkgaW4gZm9ybWF0ICVzIiwKKyAgICAgICAgICBnc3RfZm9ybWF0X2dldF9uYW1lIChmb3JtYXQpKTsKKworICAgICAgaWYgKChyZXMgPQorICAgICAgICAgICAgICBnc3RfYmFzZV9zaW5rX2dldF9kdXJhdGlvbiAoYmFzZXNpbmssIGZvcm1hdCwgJmR1ciwgJnVwc3RyZWFtKSkpIHsKKyAgICAgICAgZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbiAocXVlcnksIGZvcm1hdCwgZHVyKTsKKyAgICAgIH0gZWxzZSBpZiAodXBzdHJlYW0pIHsKKyAgICAgICAgLyogZmFsbGJhY2sgdG8gcGVlciBxdWVyeSAqLworICAgICAgICByZXMgPSBnc3RfcGFkX3BlZXJfcXVlcnkgKGJhc2VzaW5rLT5zaW5rcGFkLCBxdWVyeSk7CisgICAgICB9CisgICAgICBpZiAoIXJlcykgeworICAgICAgICAvKiB3ZSBjYW4gaGFuZGxlIGEgZmV3IHRoaW5ncyBpZiB1cHN0cmVhbSBmYWlsZWQgKi8KKyAgICAgICAgaWYgKGZvcm1hdCA9PSBHU1RfRk9STUFUX1BFUkNFTlQpIHsKKyAgICAgICAgICBnc3RfcXVlcnlfc2V0X2R1cmF0aW9uIChxdWVyeSwgR1NUX0ZPUk1BVF9QRVJDRU5ULAorICAgICAgICAgICAgICBHU1RfRk9STUFUX1BFUkNFTlRfTUFYKTsKKyAgICAgICAgICByZXMgPSBUUlVFOworICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfUVVFUllfTEFURU5DWToKKyAgICB7CisgICAgICBnYm9vbGVhbiBsaXZlLCB1c19saXZlOworICAgICAgR3N0Q2xvY2tUaW1lIG1pbiwgbWF4OworCisgICAgICBpZiAoKHJlcyA9IGdzdF9iYXNlX3NpbmtfcXVlcnlfbGF0ZW5jeSAoYmFzZXNpbmssICZsaXZlLCAmdXNfbGl2ZSwgJm1pbiwKKyAgICAgICAgICAgICAgICAgICZtYXgpKSkgeworICAgICAgICBnc3RfcXVlcnlfc2V0X2xhdGVuY3kgKHF1ZXJ5LCBsaXZlLCBtaW4sIG1heCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfUVVFUllfSklUVEVSOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfUVVFUllfUkFURToKKyAgICAgIC8qIGdzdF9xdWVyeV9zZXRfcmF0ZSAocXVlcnksIGJhc2VzaW5rLT5zZWdtZW50X3JhdGUpOyAqLworICAgICAgcmVzID0gVFJVRTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1FVRVJZX1NFR01FTlQ6CisgICAgeworICAgICAgaWYgKGJhc2VzaW5rLT5wYWRfbW9kZSA9PSBHU1RfQUNUSVZBVEVfUFVMTCkgeworICAgICAgICBnc3RfcXVlcnlfc2V0X3NlZ21lbnQgKHF1ZXJ5LCBiYXNlc2luay0+c2VnbWVudC5yYXRlLAorICAgICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCBiYXNlc2luay0+c2VnbWVudC5zdGFydCwgYmFzZXNpbmstPnNlZ21lbnQuc3RvcCk7CisgICAgICAgIHJlcyA9IFRSVUU7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXMgPSBnc3RfcGFkX3BlZXJfcXVlcnkgKGJhc2VzaW5rLT5zaW5rcGFkLCBxdWVyeSk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfUVVFUllfU0VFS0lORzoKKyAgICBjYXNlIEdTVF9RVUVSWV9DT05WRVJUOgorICAgIGNhc2UgR1NUX1FVRVJZX0ZPUk1BVFM6CisgICAgZGVmYXVsdDoKKyAgICAgIHJlcyA9IGdzdF9wYWRfcGVlcl9xdWVyeSAoYmFzZXNpbmstPnNpbmtwYWQsIHF1ZXJ5KTsKKyAgICAgIGJyZWFrOworICB9CisgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAicXVlcnkgJXMgcmV0dXJucyAlZCIsCisgICAgICBHU1RfUVVFUllfVFlQRV9OQU1FIChxdWVyeSksIHJlcyk7CisgIHJldHVybiByZXM7Cit9CisKKworc3RhdGljIGdib29sZWFuCitkZWZhdWx0X3NpbmtfcXVlcnkgKEdzdEJhc2VTaW5rICogYmFzZXNpbmssIEdzdFF1ZXJ5ICogcXVlcnkpCit7CisgIGdib29sZWFuIHJlczsKKyAgR3N0QmFzZVNpbmtDbGFzcyAqYmNsYXNzOworCisgIGJjbGFzcyA9IEdTVF9CQVNFX1NJTktfR0VUX0NMQVNTIChiYXNlc2luayk7CisKKyAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7CisgICAgY2FzZSBHU1RfUVVFUllfQUxMT0NBVElPTjoKKyAgICB7CisgICAgICBpZiAoYmNsYXNzLT5wcm9wb3NlX2FsbG9jYXRpb24pCisgICAgICAgIHJlcyA9IGJjbGFzcy0+cHJvcG9zZV9hbGxvY2F0aW9uIChiYXNlc2luaywgcXVlcnkpOworICAgICAgZWxzZQorICAgICAgICByZXMgPSBGQUxTRTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgcmVzID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChiYXNlc2luay0+c2lua3BhZCwgcXVlcnkpOworICAgICAgYnJlYWs7CisgIH0KKyAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfYmFzZV9zaW5rX3NpbmtfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0UXVlcnkgKiBxdWVyeSkKK3sKKyAgR3N0QmFzZVNpbmsgKmJhc2VzaW5rOworICBHc3RCYXNlU2lua0NsYXNzICpiY2xhc3M7CisgIGdib29sZWFuIHJlczsKKworICBiYXNlc2luayA9IEdTVF9CQVNFX1NJTktfQ0FTVCAoZ3N0X3BhZF9nZXRfcGFyZW50IChwYWQpKTsKKyAgaWYgKEdfVU5MSUtFTFkgKGJhc2VzaW5rID09IE5VTEwpKSB7CisgICAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgYmNsYXNzID0gR1NUX0JBU0VfU0lOS19HRVRfQ0xBU1MgKGJhc2VzaW5rKTsKKworICBpZiAoYmNsYXNzLT5xdWVyeSkKKyAgICByZXMgPSBiY2xhc3MtPnF1ZXJ5IChiYXNlc2luaywgcXVlcnkpOworICBlbHNlCisgICAgcmVzID0gRkFMU0U7CisKKyAgZ3N0X29iamVjdF91bnJlZiAoYmFzZXNpbmspOworCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgorZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQoreworICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7CisgIEdzdEJhc2VTaW5rICpiYXNlc2luayA9IEdTVF9CQVNFX1NJTksgKGVsZW1lbnQpOworICBHc3RCYXNlU2lua0NsYXNzICpiY2xhc3M7CisgIEdzdEJhc2VTaW5rUHJpdmF0ZSAqcHJpdjsKKworICBwcml2ID0gYmFzZXNpbmstPnByaXY7CisKKyAgYmNsYXNzID0gR1NUX0JBU0VfU0lOS19HRVRfQ0xBU1MgKGJhc2VzaW5rKTsKKworICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTlVMTF9UT19SRUFEWToKKyAgICAgIGlmIChiY2xhc3MtPnN0YXJ0KQorICAgICAgICBpZiAoIWJjbGFzcy0+c3RhcnQgKGJhc2VzaW5rKSkKKyAgICAgICAgICBnb3RvIHN0YXJ0X2ZhaWxlZDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6CisgICAgICAvKiBuZWVkIHRvIGNvbXBsZXRlIHByZXJvbGwgYmVmb3JlIHRoaXMgc3RhdGUgY2hhbmdlIGNvbXBsZXRlcywgdGhlcmUKKyAgICAgICAqIGlzIG5vIGRhdGEgZmxvdyBpbiBSRUFEWSBzbyB3ZSBjYW4gc2FmZWx5IGFzc3VtZSB3ZSBuZWVkIHRvIHByZXJvbGwuICovCisgICAgICBHU1RfQkFTRV9TSU5LX1BSRVJPTExfTE9DSyAoYmFzZXNpbmspOworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJSRUFEWSB0byBQQVVTRUQiKTsKKyAgICAgIGJhc2VzaW5rLT5oYXZlX25ld3NlZ21lbnQgPSBGQUxTRTsKKyAgICAgIGdzdF9zZWdtZW50X2luaXQgKCZiYXNlc2luay0+c2VnbWVudCwgR1NUX0ZPUk1BVF9VTkRFRklORUQpOworICAgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJmJhc2VzaW5rLT5jbGlwX3NlZ21lbnQsIEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKKyAgICAgIGJhc2VzaW5rLT5vZmZzZXQgPSAwOworICAgICAgYmFzZXNpbmstPmhhdmVfcHJlcm9sbCA9IEZBTFNFOworICAgICAgcHJpdi0+c3RlcF91bmxvY2sgPSBGQUxTRTsKKyAgICAgIGJhc2VzaW5rLT5uZWVkX3ByZXJvbGwgPSBUUlVFOworICAgICAgYmFzZXNpbmstPnBsYXlpbmdfYXN5bmMgPSBUUlVFOworICAgICAgYmFzZXNpbmstPnByaXYtPnJlc2V0X3RpbWUgPSBGQUxTRTsKKyAgICAgIHByaXYtPmN1cnJlbnRfc3N0YXJ0ID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgICAgIHByaXYtPmN1cnJlbnRfc3N0b3AgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICAgICAgcHJpdi0+ZW9zX3J0aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgICAgIHByaXYtPmxhdGVuY3kgPSAwOworICAgICAgYmFzZXNpbmstPmVvcyA9IEZBTFNFOworICAgICAgcHJpdi0+cmVjZWl2ZWRfZW9zID0gRkFMU0U7CisgICAgICBnc3RfYmFzZV9zaW5rX3Jlc2V0X3FvcyAoYmFzZXNpbmspOworICAgICAgcHJpdi0+Y29tbWl0ZWQgPSBGQUxTRTsKKyAgICAgIHByaXYtPmNhbGxfcHJlcm9sbCA9IFRSVUU7CisgICAgICBwcml2LT5jdXJyZW50X3N0ZXAudmFsaWQgPSBGQUxTRTsKKyAgICAgIHByaXYtPnBlbmRpbmdfc3RlcC52YWxpZCA9IEZBTFNFOworICAgICAgaWYgKHByaXYtPmFzeW5jX2VuYWJsZWQpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJkb2luZyBhc3luYyBzdGF0ZSBjaGFuZ2UiKTsKKyAgICAgICAgLyogd2hlbiBhc3luYyBlbmFibGVkLCBwb3N0IGFzeW5jLXN0YXJ0IG1lc3NhZ2UgYW5kIHJldHVybiBBU1lOQyBmcm9tCisgICAgICAgICAqIHRoZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gKi8KKyAgICAgICAgcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQzsKKyAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChiYXNlc2luayksCisgICAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfYXN5bmNfc3RhcnQgKEdTVF9PQkpFQ1RfQ0FTVCAoYmFzZXNpbmspKSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBwcml2LT5oYXZlX2xhdGVuY3kgPSBUUlVFOworICAgICAgfQorICAgICAgR1NUX0JBU0VfU0lOS19QUkVST0xMX1VOTE9DSyAoYmFzZXNpbmspOworICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19QTEFZSU5HOgorICAgICAgR1NUX0JBU0VfU0lOS19QUkVST0xMX0xPQ0sgKGJhc2VzaW5rKTsKKyAgICAgIGdfYXRvbWljX2ludF9zZXQgKCZiYXNlc2luay0+cHJpdi0+dG9fcGxheWluZywgVFJVRSk7CisgICAgICBpZiAoIWdzdF9iYXNlX3NpbmtfbmVlZHNfcHJlcm9sbCAoYmFzZXNpbmspKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiUEFVU0VEIHRvIFBMQVlJTkcsIGRvbid0IG5lZWQgcHJlcm9sbCIpOworICAgICAgICAvKiBubyBwcmVyb2xsIG5lZWRlZCBhbnltb3JlIG5vdy4gKi8KKyAgICAgICAgYmFzZXNpbmstPnBsYXlpbmdfYXN5bmMgPSBGQUxTRTsKKyAgICAgICAgYmFzZXNpbmstPm5lZWRfcHJlcm9sbCA9IEZBTFNFOworICAgICAgICBpZiAoYmFzZXNpbmstPmVvcykgeworICAgICAgICAgIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAgICAgICAgICAvKiBuZWVkIHRvIHBvc3QgRU9TIG1lc3NhZ2UgaGVyZSAqLworICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiTm93IHBvc3RpbmcgRU9TIik7CisgICAgICAgICAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19lb3MgKEdTVF9PQkpFQ1RfQ0FTVCAoYmFzZXNpbmspKTsKKyAgICAgICAgICBnc3RfbWVzc2FnZV9zZXRfc2VxbnVtIChtZXNzYWdlLCBiYXNlc2luay0+cHJpdi0+c2VxbnVtKTsKKyAgICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKGJhc2VzaW5rKSwgbWVzc2FnZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJzaWduYWwgcHJlcm9sbCIpOworICAgICAgICAgIEdTVF9CQVNFX1NJTktfUFJFUk9MTF9TSUdOQUwgKGJhc2VzaW5rKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJQQVVTRUQgdG8gUExBWUlORywgd2UgYXJlIG5vdCBwcmVyb2xsZWQiKTsKKyAgICAgICAgYmFzZXNpbmstPm5lZWRfcHJlcm9sbCA9IFRSVUU7CisgICAgICAgIGJhc2VzaW5rLT5wbGF5aW5nX2FzeW5jID0gVFJVRTsKKyAgICAgICAgcHJpdi0+Y2FsbF9wcmVyb2xsID0gVFJVRTsKKyAgICAgICAgcHJpdi0+Y29tbWl0ZWQgPSBGQUxTRTsKKyAgICAgICAgaWYgKHByaXYtPmFzeW5jX2VuYWJsZWQpIHsKKyAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgImRvaW5nIGFzeW5jIHN0YXRlIGNoYW5nZSIpOworICAgICAgICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfQVNZTkM7CisgICAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChiYXNlc2luayksCisgICAgICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19hc3luY19zdGFydCAoR1NUX09CSkVDVF9DQVNUIChiYXNlc2luaykpKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgR1NUX0JBU0VfU0lOS19QUkVST0xMX1VOTE9DSyAoYmFzZXNpbmspOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgeworICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGJyZXQ7CisKKyAgICBicmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7CisgICAgaWYgKEdfVU5MSUtFTFkgKGJyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKSkKKyAgICAgIGdvdG8gYWN0aXZhdGVfZmFpbGVkOworICB9CisKKyAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19QTEFZSU5HOgorICAgICAgLyogY29tcGxldGVkIHRyYW5zaXRpb24sIHNvIG5lZWQgbm90IGJlIG1hcmtlZCBhbnkgbG9uZ2VyCisgICAgICAgKiBBbmQgaXQgc2hvdWxkIGJlIHVubWFya2VkLCBzaW5jZSBlLmcuIGxvc2luZyBvdXIgcG9zaXRpb24gdXBvbiBmbHVzaAorICAgICAgICogZG9lcyBub3QgcmVhbGx5IGNoYW5nZSBzdGF0ZSB0byBQQVVTRUQgLi4uICovCisgICAgICBnX2F0b21pY19pbnRfc2V0ICgmYmFzZXNpbmstPnByaXYtPnRvX3BsYXlpbmcsIEZBTFNFKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRDoKKyAgICAgIGdfYXRvbWljX2ludF9zZXQgKCZiYXNlc2luay0+cHJpdi0+dG9fcGxheWluZywgRkFMU0UpOworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJQTEFZSU5HIHRvIFBBVVNFRCIpOworICAgICAgLyogRklYTUUsIG1ha2Ugc3VyZSB3ZSBjYW5ub3QgZW50ZXIgX3JlbmRlciBmaXJzdCAqLworCisgICAgICAvKiB3ZSBuZWVkIHRvIGNhbGwgOjp1bmxvY2sgYmVmb3JlIGxvY2tpbmcgUFJFUk9MTF9MT0NLCisgICAgICAgKiBzaW5jZSB3ZSBsb2NrIGl0IGJlZm9yZSBnb2luZyBpbnRvIDo6cmVuZGVyICovCisgICAgICBpZiAoYmNsYXNzLT51bmxvY2spCisgICAgICAgIGJjbGFzcy0+dW5sb2NrIChiYXNlc2luayk7CisKKyAgICAgIEdTVF9CQVNFX1NJTktfUFJFUk9MTF9MT0NLIChiYXNlc2luayk7CisgICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgImdvdCBwcmVyb2xsIGxvY2siKTsKKyAgICAgIC8qIG5vdyB0aGF0IHdlIGhhdmUgdGhlIFBSRVJPTEwgbG9jaywgY2xlYXIgb3VyIHVubG9jayByZXF1ZXN0ICovCisgICAgICBpZiAoYmNsYXNzLT51bmxvY2tfc3RvcCkKKyAgICAgICAgYmNsYXNzLT51bmxvY2tfc3RvcCAoYmFzZXNpbmspOworCisgICAgICAvKiB3ZSBuZWVkIHByZXJvbGwgYWdhaW4gYW5kIHdlIHNldCB0aGUgZmxhZyBiZWZvcmUgdW5sb2NraW5nIHRoZSBjbG9ja2lkCisgICAgICAgKiBiZWNhdXNlIGlmIHRoZSBjbG9ja2lkIGlzIHVubG9ja2VkIGJlZm9yZSBhIGN1cnJlbnQgYnVmZmVyIGV4cGlyZWQsIHdlCisgICAgICAgKiBjYW4gdXNlIHRoYXQgYnVmZmVyIHRvIHByZXJvbGwgd2l0aCAqLworICAgICAgYmFzZXNpbmstPm5lZWRfcHJlcm9sbCA9IFRSVUU7CisKKyAgICAgIGlmIChiYXNlc2luay0+Y2xvY2tfaWQpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJ1bnNjaGVkdWxlIGNsb2NrIik7CisgICAgICAgIGdzdF9jbG9ja19pZF91bnNjaGVkdWxlIChiYXNlc2luay0+Y2xvY2tfaWQpOworICAgICAgfQorCisgICAgICAvKiBpZiB3ZSBkb24ndCBoYXZlIGEgcHJlcm9sbCBidWZmZXIgd2UgbmVlZCB0byB3YWl0IGZvciBhIHByZXJvbGwgYW5kCisgICAgICAgKiByZXR1cm4gQVNZTkMuICovCisgICAgICBpZiAoIWdzdF9iYXNlX3NpbmtfbmVlZHNfcHJlcm9sbCAoYmFzZXNpbmspKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiUExBWUlORyB0byBQQVVTRUQsIHdlIGFyZSBwcmVyb2xsZWQiKTsKKyAgICAgICAgYmFzZXNpbmstPnBsYXlpbmdfYXN5bmMgPSBGQUxTRTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChHU1RfU1RBVEVfVEFSR0VUIChHU1RfRUxFTUVOVCAoYmFzZXNpbmspKSA8PSBHU1RfU1RBVEVfUkVBRFkpIHsKKyAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgImVsZW1lbnQgaXMgPD0gUkVBRFkiKTsKKyAgICAgICAgICByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssCisgICAgICAgICAgICAgICJQTEFZSU5HIHRvIFBBVVNFRCwgd2UgYXJlIG5vdCBwcmVyb2xsZWQiKTsKKyAgICAgICAgICBiYXNlc2luay0+cGxheWluZ19hc3luYyA9IFRSVUU7CisgICAgICAgICAgcHJpdi0+Y29tbWl0ZWQgPSBGQUxTRTsKKyAgICAgICAgICBwcml2LT5jYWxsX3ByZXJvbGwgPSBUUlVFOworICAgICAgICAgIGlmIChwcml2LT5hc3luY19lbmFibGVkKSB7CisgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgImRvaW5nIGFzeW5jIHN0YXRlIGNoYW5nZSIpOworICAgICAgICAgICAgcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQzsKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoYmFzZXNpbmspLAorICAgICAgICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19hc3luY19zdGFydCAoR1NUX09CSkVDVF9DQVNUIChiYXNlc2luaykpKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAicmVuZGVyZWQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQKKyAgICAgICAgICAiLCBkcm9wcGVkOiAlIiBHX0dVSU5UNjRfRk9STUFULCBwcml2LT5yZW5kZXJlZCwgcHJpdi0+ZHJvcHBlZCk7CisKKyAgICAgIGdzdF9iYXNlX3NpbmtfcmVzZXRfcW9zIChiYXNlc2luayk7CisgICAgICBHU1RfQkFTRV9TSU5LX1BSRVJPTExfVU5MT0NLIChiYXNlc2luayk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgorICAgICAgR1NUX0JBU0VfU0lOS19QUkVST0xMX0xPQ0sgKGJhc2VzaW5rKTsKKyAgICAgIC8qIHN0YXJ0IGJ5IHJlc2V0dGluZyBvdXIgcG9zaXRpb24gc3RhdGUgd2l0aCB0aGUgb2JqZWN0IGxvY2sgc28gdGhhdCB0aGUKKyAgICAgICAqIHBvc2l0aW9uIHF1ZXJ5IGdldHMgdGhlIHJpZ2h0IGlkZWEuIFdlIGRvIHRoaXMgYmVmb3JlIHdlIHBvc3QgdGhlCisgICAgICAgKiBtZXNzYWdlcyBzbyB0aGF0IHRoZSBtZXNzYWdlIGhhbmRsZXJzIHBpY2sgdGhpcyB1cC4gKi8KKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoYmFzZXNpbmspOworICAgICAgYmFzZXNpbmstPmhhdmVfbmV3c2VnbWVudCA9IEZBTFNFOworICAgICAgcHJpdi0+Y3VycmVudF9zc3RhcnQgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICAgICAgcHJpdi0+Y3VycmVudF9zc3RvcCA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgICAgICBwcml2LT5oYXZlX2xhdGVuY3kgPSBGQUxTRTsKKyAgICAgIGlmIChwcml2LT5jYWNoZWRfY2xvY2tfaWQpIHsKKyAgICAgICAgZ3N0X2Nsb2NrX2lkX3VucmVmIChwcml2LT5jYWNoZWRfY2xvY2tfaWQpOworICAgICAgICBwcml2LT5jYWNoZWRfY2xvY2tfaWQgPSBOVUxMOworICAgICAgfQorICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJhc2VzaW5rKTsKKworICAgICAgZ3N0X2Jhc2Vfc2lua19zZXRfbGFzdF9idWZmZXIgKGJhc2VzaW5rLCBOVUxMKTsKKyAgICAgIHByaXYtPmNhbGxfcHJlcm9sbCA9IEZBTFNFOworCisgICAgICBpZiAoIXByaXYtPmNvbW1pdGVkKSB7CisgICAgICAgIGlmIChwcml2LT5hc3luY19lbmFibGVkKSB7CisgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJQQVVTRUQgdG8gUkVBRFksIHBvc3RpbmcgYXN5bmMtZG9uZSIpOworCisgICAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChiYXNlc2luayksCisgICAgICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19zdGF0ZV9jaGFuZ2VkIChHU1RfT0JKRUNUX0NBU1QgKGJhc2VzaW5rKSwKKyAgICAgICAgICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HLCBHU1RfU1RBVEVfUEFVU0VELCBHU1RfU1RBVEVfUkVBRFkpKTsKKworICAgICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoYmFzZXNpbmspLAorICAgICAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfYXN5bmNfZG9uZSAoR1NUX09CSkVDVF9DQVNUIChiYXNlc2luayksIEZBTFNFKSk7CisgICAgICAgIH0KKyAgICAgICAgcHJpdi0+Y29tbWl0ZWQgPSBUUlVFOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJQQVVTRUQgdG8gUkVBRFksIGRvbid0IG5lZWRfcHJlcm9sbCIpOworICAgICAgfQorICAgICAgR1NUX0JBU0VfU0lOS19QUkVST0xMX1VOTE9DSyAoYmFzZXNpbmspOworICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEw6CisgICAgICBpZiAoYmNsYXNzLT5zdG9wKSB7CisgICAgICAgIGlmICghYmNsYXNzLT5zdG9wIChiYXNlc2luaykpIHsKKyAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGJhc2VzaW5rLCAiZmFpbGVkIHRvIHN0b3AiKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZ3N0X2Jhc2Vfc2lua19zZXRfbGFzdF9idWZmZXIgKGJhc2VzaW5rLCBOVUxMKTsKKyAgICAgIHByaXYtPmNhbGxfcHJlcm9sbCA9IEZBTFNFOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIHJldDsKKworICAvKiBFUlJPUlMgKi8KK3N0YXJ0X2ZhaWxlZDoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiZmFpbGVkIHRvIHN0YXJ0Iik7CisgICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKKyAgfQorYWN0aXZhdGVfZmFpbGVkOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssCisgICAgICAgICJlbGVtZW50IGZhaWxlZCB0byBjaGFuZ2Ugc3RhdGVzIC0tIGFjdGl2YXRpb24gcHJvYmxlbT8iKTsKKyAgICByZXR1cm4gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOworICB9Cit9CmRpZmYgLS1naXQgYS9saWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmggYi9saWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM4ZGZhYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaApAQCAtMCwwICsxLDI0NSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgorICoKKyAqIGdzdGJhc2VzaW5rLmg6CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0dTVF9CQVNFX1NJTktfSF9fCisjZGVmaW5lIF9fR1NUX0JBU0VfU0lOS19IX18KKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworR19CRUdJTl9ERUNMUworCisKKyNkZWZpbmUgR1NUX1RZUEVfQkFTRV9TSU5LICAgICAgICAgICAgICAoZ3N0X2Jhc2Vfc2lua19nZXRfdHlwZSgpKQorI2RlZmluZSBHU1RfQkFTRV9TSU5LKG9iaikgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9CQVNFX1NJTkssR3N0QmFzZVNpbmspKQorI2RlZmluZSBHU1RfQkFTRV9TSU5LX0NMQVNTKGtsYXNzKSAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0JBU0VfU0lOSyxHc3RCYXNlU2lua0NsYXNzKSkKKyNkZWZpbmUgR1NUX0JBU0VfU0lOS19HRVRfQ0xBU1Mob2JqKSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIEdTVF9UWVBFX0JBU0VfU0lOSywgR3N0QmFzZVNpbmtDbGFzcykpCisjZGVmaW5lIEdTVF9JU19CQVNFX1NJTksob2JqKSAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0JBU0VfU0lOSykpCisjZGVmaW5lIEdTVF9JU19CQVNFX1NJTktfQ0xBU1Moa2xhc3MpICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfQkFTRV9TSU5LKSkKKyNkZWZpbmUgR1NUX0JBU0VfU0lOS19DQVNUKG9iaikgICAgICAgICAoKEdzdEJhc2VTaW5rICopIChvYmopKQorCisvKioKKyAqIEdTVF9CQVNFX1NJTktfUEFEOgorICogQG9iajogYmFzZSBzaW5rIGluc3RhbmNlCisgKgorICogR2l2ZXMgdGhlIHBvaW50ZXIgdG8gdGhlICNHc3RQYWQgb2JqZWN0IG9mIHRoZSBlbGVtZW50LgorICovCisjZGVmaW5lIEdTVF9CQVNFX1NJTktfUEFEKG9iaikgICAgICAgICAgKEdTVF9CQVNFX1NJTktfQ0FTVCAob2JqKS0+c2lua3BhZCkKKworI2RlZmluZSBHU1RfQkFTRV9TSU5LX0dFVF9QUkVST0xMX0xPQ0socGFkKSAgIChHU1RfQkFTRV9TSU5LX0NBU1QocGFkKS0+cHJlcm9sbF9sb2NrKQorI2RlZmluZSBHU1RfQkFTRV9TSU5LX1BSRVJPTExfTE9DSyhwYWQpICAgICAgIChnX211dGV4X2xvY2soR1NUX0JBU0VfU0lOS19HRVRfUFJFUk9MTF9MT0NLKHBhZCkpKQorI2RlZmluZSBHU1RfQkFTRV9TSU5LX1BSRVJPTExfVFJZTE9DSyhwYWQpICAgIChnX211dGV4X3RyeWxvY2soR1NUX0JBU0VfU0lOS19HRVRfUFJFUk9MTF9MT0NLKHBhZCkpKQorI2RlZmluZSBHU1RfQkFTRV9TSU5LX1BSRVJPTExfVU5MT0NLKHBhZCkgICAgIChnX211dGV4X3VubG9jayhHU1RfQkFTRV9TSU5LX0dFVF9QUkVST0xMX0xPQ0socGFkKSkpCisKKyNkZWZpbmUgR1NUX0JBU0VfU0lOS19HRVRfUFJFUk9MTF9DT05EKHBhZCkgICAoR1NUX0JBU0VfU0lOS19DQVNUKHBhZCktPnByZXJvbGxfY29uZCkKKyNkZWZpbmUgR1NUX0JBU0VfU0lOS19QUkVST0xMX1dBSVQocGFkKSAgICAgICBcCisgICAgICBnX2NvbmRfd2FpdCAoR1NUX0JBU0VfU0lOS19HRVRfUFJFUk9MTF9DT05EIChwYWQpLCBHU1RfQkFTRV9TSU5LX0dFVF9QUkVST0xMX0xPQ0sgKHBhZCkpCisjZGVmaW5lIEdTVF9CQVNFX1NJTktfUFJFUk9MTF9USU1FRF9XQUlUKHBhZCwgdGltZXZhbCkgXAorICAgICAgZ19jb25kX3RpbWVkX3dhaXQgKEdTVF9CQVNFX1NJTktfR0VUX1BSRVJPTExfQ09ORCAocGFkKSwgR1NUX0JBU0VfU0lOS19HRVRfUFJFUk9MTF9MT0NLIChwYWQpLCB0aW1ldmFsKQorI2RlZmluZSBHU1RfQkFTRV9TSU5LX1BSRVJPTExfU0lHTkFMKHBhZCkgICAgIGdfY29uZF9zaWduYWwgKEdTVF9CQVNFX1NJTktfR0VUX1BSRVJPTExfQ09ORCAocGFkKSk7CisjZGVmaW5lIEdTVF9CQVNFX1NJTktfUFJFUk9MTF9CUk9BRENBU1QocGFkKSAgZ19jb25kX2Jyb2FkY2FzdCAoR1NUX0JBU0VfU0lOS19HRVRfUFJFUk9MTF9DT05EIChwYWQpKTsKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdEJhc2VTaW5rIEdzdEJhc2VTaW5rOwordHlwZWRlZiBzdHJ1Y3QgX0dzdEJhc2VTaW5rQ2xhc3MgR3N0QmFzZVNpbmtDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9Hc3RCYXNlU2lua1ByaXZhdGUgR3N0QmFzZVNpbmtQcml2YXRlOworCisvKioKKyAqIEdzdEJhc2VTaW5rOgorICoKKyAqIFRoZSBvcGFxdWUgI0dzdEJhc2VTaW5rIGRhdGEgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgX0dzdEJhc2VTaW5rIHsKKyAgR3N0RWxlbWVudCAgICAgZWxlbWVudDsKKworICAvKjwgcHJvdGVjdGVkID4qLworICBHc3RQYWQgICAgICAgICpzaW5rcGFkOworICBHc3RBY3RpdmF0ZU1vZGUgICAgICAgcGFkX21vZGU7CisKKyAgLyo8IHByb3RlY3RlZCA+Ki8gLyogd2l0aCBMT0NLICovCisgIGd1aW50NjQgICAgICAgIG9mZnNldDsKKyAgZ2Jvb2xlYW4gICAgICAgY2FuX2FjdGl2YXRlX3B1bGw7CisgIGdib29sZWFuICAgICAgIGNhbl9hY3RpdmF0ZV9wdXNoOworCisgIC8qPCBwcm90ZWN0ZWQgPiovIC8qIHdpdGggUFJFUk9MTF9MT0NLICovCisgIEdNdXRleCAgICAgICAgKnByZXJvbGxfbG9jazsKKyAgR0NvbmQgICAgICAgICAqcHJlcm9sbF9jb25kOworICBnYm9vbGVhbiAgICAgICBlb3M7CisgIGdib29sZWFuICAgICAgIGVvc19xdWV1ZWQ7CisgIGdib29sZWFuICAgICAgIG5lZWRfcHJlcm9sbDsKKyAgZ2Jvb2xlYW4gICAgICAgaGF2ZV9wcmVyb2xsOworICBnYm9vbGVhbiAgICAgICBwbGF5aW5nX2FzeW5jOworCisgIC8qPCBwcm90ZWN0ZWQgPiovIC8qIHdpdGggU1RSRUFNX0xPQ0sgKi8KKyAgZ2Jvb2xlYW4gICAgICAgaGF2ZV9uZXdzZWdtZW50OworICBHc3RTZWdtZW50ICAgICBzZWdtZW50OworICBHc3RTZWdtZW50ICAgICBjbGlwX3NlZ21lbnQ7CisKKyAgLyo8IHByaXZhdGUgPiovIC8qIHdpdGggTE9DSyAqLworICBHc3RDbG9ja0lEICAgICBjbG9ja19pZDsKKyAgR3N0Q2xvY2tUaW1lICAgZW5kX3RpbWU7CisgIGdib29sZWFuICAgICAgIHN5bmM7CisgIGdib29sZWFuICAgICAgIGZsdXNoaW5nOworICBnYm9vbGVhbiAgICAgICBydW5uaW5nOworCisgIGdpbnQ2NCAgICAgICAgIG1heF9sYXRlbmVzczsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgR3N0QmFzZVNpbmtQcml2YXRlICpwcml2OworCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkdfTEFSR0VdOworfTsKKworLyoqCisgKiBHc3RCYXNlU2lua0NsYXNzOgorICogQHBhcmVudF9jbGFzczogRWxlbWVudCBwYXJlbnQgY2xhc3MKKyAqIEBnZXRfY2FwczogQ2FsbGVkIHRvIGdldCBzaW5rIHBhZCBjYXBzIGZyb20gdGhlIHN1YmNsYXNzCisgKiBAc2V0X2NhcHM6IE5vdGlmeSBzdWJjbGFzcyBvZiBjaGFuZ2VkIGNhcHMKKyAqIEBmaXhhdGU6IE9ubHkgdXNlZnVsIGluIHB1bGwgbW9kZSwgdGhpcyB2bWV0aG9kIHdpbGwgYmUgY2FsbGVkIGluIHJlc3BvbnNlIHRvCisgKiAgICAgZ3N0X3BhZF9maXhhdGVfY2FwcygpIGJlaW5nIGNhbGxlZCBvbiB0aGUgc2luayBwYWQuIEltcGxlbWVudCBpZiB5b3UgaGF2ZQorICogICAgIGlkZWFzIGFib3V0IHdoYXQgc2hvdWxkIGJlIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGNhcHMgeW91IHN1cHBvcnQuCisgKiBAYWN0aXZhdGVfcHVsbDogU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyB3aGVuIHRoZXkgY2FuIHByb3ZpZGUgYW4KKyAqICAgICBhbHRlcm5hdGUgbWV0aG9kIG9mIHNwYXduaW5nIGEgdGhyZWFkIHRvIGRyaXZlIHRoZSBwaXBlbGluZSBpbiBwdWxsIG1vZGUuCisgKiAgICAgU2hvdWxkIHN0YXJ0IG9yIHN0b3AgdGhlIHB1bGxpbmcgdGhyZWFkLCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIHRoZQorICogICAgICJhY3RpdmUiIGFyZ3VtZW50LiBDYWxsZWQgYWZ0ZXIgYWN0dWFsbHkgYWN0aXZhdGluZyB0aGUgc2luayBwYWQgaW4gcHVsbAorICogICAgIG1vZGUuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHN0YXJ0cyBhIHRhc2sgb24gdGhlIHNpbmsgcGFkLgorICogQGdldF90aW1lczogQ2FsbGVkIHRvIGdldCB0aGUgc3RhcnQgYW5kIGVuZCB0aW1lcyBmb3Igc3luY2hyb25pc2luZworICogICAgIHRoZSBwYXNzZWQgYnVmZmVyIHRvIHRoZSBjbG9jaworICogQHByb3Bvc2VfYWxsb2NhdGlvbjogY29uZmlndXJlIHRoZSBhbGxvY2F0aW9uIHF1ZXJ5CisgKiBAc3RhcnQ6IFN0YXJ0IHByb2Nlc3NpbmcuIElkZWFsIGZvciBvcGVuaW5nIHJlc291cmNlcyBpbiB0aGUgc3ViY2xhc3MKKyAqIEBzdG9wOiBTdG9wIHByb2Nlc3NpbmcuIFN1YmNsYXNzZXMgc2hvdWxkIHVzZSB0aGlzIHRvIGNsb3NlIHJlc291cmNlcy4KKyAqIEB1bmxvY2s6IFVubG9jayBhbnkgcGVuZGluZyBhY2Nlc3MgdG8gdGhlIHJlc291cmNlLiBTdWJjbGFzc2VzIHNob3VsZAorICogICAgIHVuYmxvY2sgYW55IGJsb2NrZWQgZnVuY3Rpb24gQVNBUAorICogQHVubG9ja19zdG9wOiBDbGVhciB0aGUgcHJldmlvdXMgdW5sb2NrIHJlcXVlc3QuIFN1YmNsYXNzZXMgc2hvdWxkIGNsZWFyCisgKiAgICAgYW55IHN0YXRlIHRoZXkgc2V0IGR1cmluZyB1bmxvY2soKSwgc3VjaCBhcyBjbGVhcmluZyBjb21tYW5kIHF1ZXVlcy4KKyAqIEBldmVudDogT3ZlcnJpZGUgdGhpcyB0byBoYW5kbGUgZXZlbnRzIGFycml2aW5nIG9uIHRoZSBzaW5rIHBhZAorICogQHByZXJvbGw6IENhbGxlZCB0byBwcmVzZW50IHRoZSBwcmVyb2xsIGJ1ZmZlciBpZiBkZXNpcmVkCisgKiBAcmVuZGVyOiBDYWxsZWQgd2hlbiBhIGJ1ZmZlciBzaG91bGQgYmUgcHJlc2VudGVkIG9yIG91dHB1dCwgYXQgdGhlCisgKiAgICAgY29ycmVjdCBtb21lbnQgaWYgdGhlICNHc3RCYXNlU2luayBoYXMgYmVlbiBzZXQgdG8gc3luYyB0byB0aGUgY2xvY2suCisgKiBAcmVuZGVyX2xpc3Q6IFNhbWUgYXMgQHJlbmRlciBidXQgdXNlZCB3aGl0aCBidWZmZXIgbGlzdHMgaW5zdGVhZCBvZgorICogICAgIGJ1ZmZlcnMuIFNpbmNlOiAwLjEwLjI0CisgKiBAcXVlcnk6IHBlcmZvcm0gYSAjR3N0UXVlcnkgb24gdGhlIGVsZW1lbnQuIFNpbmNlOiAwLjEwLjM2CisgKgorICogU3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgYW55IG9mIHRoZSBhdmFpbGFibGUgdmlydHVhbCBtZXRob2RzIG9yIG5vdCwgYXMKKyAqIG5lZWRlZC4gQXQgdGhlIG1pbmltdW0sIHRoZSBAcmVuZGVyIG1ldGhvZCBzaG91bGQgYmUgb3ZlcnJpZGRlbiB0bworICogb3V0cHV0L3ByZXNlbnQgYnVmZmVycy4KKyAqLworc3RydWN0IF9Hc3RCYXNlU2lua0NsYXNzIHsKKyAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKKworICAvKiBnZXQgY2FwcyBmcm9tIHN1YmNsYXNzICovCisgIEdzdENhcHMqICAgICAgKCpnZXRfY2FwcykgICAgIChHc3RCYXNlU2luayAqc2luaywgR3N0Q2FwcyAqZmlsdGVyKTsKKyAgLyogbm90aWZ5IHN1YmNsYXNzIG9mIG5ldyBjYXBzICovCisgIGdib29sZWFuICAgICAgKCpzZXRfY2FwcykgICAgIChHc3RCYXNlU2luayAqc2luaywgR3N0Q2FwcyAqY2Fwcyk7CisKKyAgLyogZml4YXRlIHNpbmsgY2FwcyBkdXJpbmcgcHVsbC1tb2RlIG5lZ290aWF0aW9uICovCisgIHZvaWQgICAgICAgICAgKCpmaXhhdGUpICAgICAgIChHc3RCYXNlU2luayAqc2luaywgR3N0Q2FwcyAqY2Fwcyk7CisgIC8qIHN0YXJ0IG9yIHN0b3AgYSBwdWxsaW5nIHRocmVhZCAqLworICBnYm9vbGVhbiAgICAgICgqYWN0aXZhdGVfcHVsbCkoR3N0QmFzZVNpbmsgKnNpbmssIGdib29sZWFuIGFjdGl2ZSk7CisKKyAgLyogZ2V0IHRoZSBzdGFydCBhbmQgZW5kIHRpbWVzIGZvciBzeW5jaW5nIG9uIHRoaXMgYnVmZmVyICovCisgIHZvaWQgICAgICAgICAgKCpnZXRfdGltZXMpICAgIChHc3RCYXNlU2luayAqc2luaywgR3N0QnVmZmVyICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgKnN0YXJ0LCBHc3RDbG9ja1RpbWUgKmVuZCk7CisKKyAgLyogcHJvcG9zZSBhbGxvY2F0aW9uIHBhcmFtZXRlcnMgZm9yIHVwc3RyZWFtICovCisgIGdib29sZWFuICAgICAgKCpwcm9wb3NlX2FsbG9jYXRpb24pICAgKEdzdEJhc2VTaW5rICpzaW5rLCBHc3RRdWVyeSAqcXVlcnkpOworCisgIC8qIHN0YXJ0IGFuZCBzdG9wIHByb2Nlc3NpbmcsIGlkZWFsIGZvciBvcGVuaW5nL2Nsb3NpbmcgdGhlIHJlc291cmNlICovCisgIGdib29sZWFuICAgICAgKCpzdGFydCkgICAgICAgIChHc3RCYXNlU2luayAqc2luayk7CisgIGdib29sZWFuICAgICAgKCpzdG9wKSAgICAgICAgIChHc3RCYXNlU2luayAqc2luayk7CisKKyAgLyogdW5sb2NrIGFueSBwZW5kaW5nIGFjY2VzcyB0byB0aGUgcmVzb3VyY2UuIHN1YmNsYXNzZXMgc2hvdWxkIHVubG9jaworICAgKiBhbnkgZnVuY3Rpb24gQVNBUC4gKi8KKyAgZ2Jvb2xlYW4gICAgICAoKnVubG9jaykgICAgICAgKEdzdEJhc2VTaW5rICpzaW5rKTsKKyAgLyogQ2xlYXIgYSBwcmV2aW91c2x5IGluZGljYXRlZCB1bmxvY2sgcmVxdWVzdCBub3QgdGhhdCB1bmxvY2tpbmcgaXMKKyAgICogY29tcGxldGUuIFN1Yi1jbGFzc2VzIHNob3VsZCBjbGVhciBhbnkgY29tbWFuZCBxdWV1ZSBvciBpbmRpY2F0b3IgdGhleQorICAgKiBzZXQgZHVyaW5nIHVubG9jayAqLworICBnYm9vbGVhbiAgICAgICgqdW5sb2NrX3N0b3ApICAoR3N0QmFzZVNpbmsgKnNpbmspOworCisgIC8qIG5vdGlmeSBzdWJjbGFzcyBvZiBxdWVyeSAqLworICBnYm9vbGVhbiAgICAgICgqcXVlcnkpICAgICAgICAoR3N0QmFzZVNpbmsgKnNpbmssIEdzdFF1ZXJ5ICpxdWVyeSk7CisKKyAgLyogbm90aWZ5IHN1YmNsYXNzIG9mIGV2ZW50LCBwcmVyb2xsIGJ1ZmZlciBvciByZWFsIGJ1ZmZlciAqLworICBnYm9vbGVhbiAgICAgICgqZXZlbnQpICAgICAgICAoR3N0QmFzZVNpbmsgKnNpbmssIEdzdEV2ZW50ICpldmVudCk7CisKKyAgR3N0Rmxvd1JldHVybiAoKnByZXJvbGwpICAgICAgKEdzdEJhc2VTaW5rICpzaW5rLCBHc3RCdWZmZXIgKmJ1ZmZlcik7CisgIEdzdEZsb3dSZXR1cm4gKCpyZW5kZXIpICAgICAgIChHc3RCYXNlU2luayAqc2luaywgR3N0QnVmZmVyICpidWZmZXIpOworICAvKiBSZW5kZXIgYSBCdWZmZXJMaXN0ICovCisgIEdzdEZsb3dSZXR1cm4gKCpyZW5kZXJfbGlzdCkgIChHc3RCYXNlU2luayAqc2luaywgR3N0QnVmZmVyTGlzdCAqYnVmZmVyX2xpc3QpOworCisgIC8qPCBwcml2YXRlID4qLworICBncG9pbnRlciAgICAgICBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HX0xBUkdFXTsKK307CisKK0dUeXBlIGdzdF9iYXNlX3NpbmtfZ2V0X3R5cGUodm9pZCk7CisKK0dzdEZsb3dSZXR1cm4gICBnc3RfYmFzZV9zaW5rX2RvX3ByZXJvbGwgICAgICAgIChHc3RCYXNlU2luayAqc2luaywgR3N0TWluaU9iamVjdCAqb2JqKTsKK0dzdEZsb3dSZXR1cm4gICBnc3RfYmFzZV9zaW5rX3dhaXRfcHJlcm9sbCAgICAgIChHc3RCYXNlU2luayAqc2luayk7CisKKy8qIHN5bmNocm9uaXppbmcgYWdhaW5zdCB0aGUgY2xvY2sgKi8KK3ZvaWQgICAgICAgICAgICBnc3RfYmFzZV9zaW5rX3NldF9zeW5jICAgICAgICAgIChHc3RCYXNlU2luayAqc2luaywgZ2Jvb2xlYW4gc3luYyk7CitnYm9vbGVhbiAgICAgICAgZ3N0X2Jhc2Vfc2lua19nZXRfc3luYyAgICAgICAgICAoR3N0QmFzZVNpbmsgKnNpbmspOworCisvKiBkcm9wcGluZyBsYXRlIGJ1ZmZlcnMgKi8KK3ZvaWQgICAgICAgICAgICBnc3RfYmFzZV9zaW5rX3NldF9tYXhfbGF0ZW5lc3MgIChHc3RCYXNlU2luayAqc2luaywgZ2ludDY0IG1heF9sYXRlbmVzcyk7CitnaW50NjQgICAgICAgICAgZ3N0X2Jhc2Vfc2lua19nZXRfbWF4X2xhdGVuZXNzICAoR3N0QmFzZVNpbmsgKnNpbmspOworCisvKiBwZXJmb3JtaW5nIFFvUyAqLwordm9pZCAgICAgICAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X3Fvc19lbmFibGVkICAgKEdzdEJhc2VTaW5rICpzaW5rLCBnYm9vbGVhbiBlbmFibGVkKTsKK2dib29sZWFuICAgICAgICBnc3RfYmFzZV9zaW5rX2lzX3Fvc19lbmFibGVkICAgIChHc3RCYXNlU2luayAqc2luayk7CisKKy8qIGRvaW5nIGFzeW5jIHN0YXRlIGNoYW5nZXMgKi8KK3ZvaWQgICAgICAgICAgICBnc3RfYmFzZV9zaW5rX3NldF9hc3luY19lbmFibGVkIChHc3RCYXNlU2luayAqc2luaywgZ2Jvb2xlYW4gZW5hYmxlZCk7CitnYm9vbGVhbiAgICAgICAgZ3N0X2Jhc2Vfc2lua19pc19hc3luY19lbmFibGVkICAoR3N0QmFzZVNpbmsgKnNpbmspOworCisvKiB0dW5pbmcgc3luY2hyb25pc2F0aW9uICovCit2b2lkICAgICAgICAgICAgZ3N0X2Jhc2Vfc2lua19zZXRfdHNfb2Zmc2V0ICAgICAoR3N0QmFzZVNpbmsgKnNpbmssIEdzdENsb2NrVGltZURpZmYgb2Zmc2V0KTsKK0dzdENsb2NrVGltZURpZmYgZ3N0X2Jhc2Vfc2lua19nZXRfdHNfb2Zmc2V0ICAgIChHc3RCYXNlU2luayAqc2luayk7CisKKy8qIGxhc3QgYnVmZmVyICovCitHc3RCdWZmZXIgKiAgICAgZ3N0X2Jhc2Vfc2lua19nZXRfbGFzdF9idWZmZXIgICAoR3N0QmFzZVNpbmsgKnNpbmspOwordm9pZCAgICAgICAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X2xhc3RfYnVmZmVyX2VuYWJsZWQgKEdzdEJhc2VTaW5rICpzaW5rLCBnYm9vbGVhbiBlbmFibGVkKTsKK2dib29sZWFuICAgICAgICBnc3RfYmFzZV9zaW5rX2lzX2xhc3RfYnVmZmVyX2VuYWJsZWQgKEdzdEJhc2VTaW5rICpzaW5rKTsKKworLyogbGF0ZW5jeSAqLworZ2Jvb2xlYW4gICAgICAgIGdzdF9iYXNlX3NpbmtfcXVlcnlfbGF0ZW5jeSAgICAgKEdzdEJhc2VTaW5rICpzaW5rLCBnYm9vbGVhbiAqbGl2ZSwgZ2Jvb2xlYW4gKnVwc3RyZWFtX2xpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lICptaW5fbGF0ZW5jeSwgR3N0Q2xvY2tUaW1lICptYXhfbGF0ZW5jeSk7CitHc3RDbG9ja1RpbWUgICAgZ3N0X2Jhc2Vfc2lua19nZXRfbGF0ZW5jeSAgICAgICAoR3N0QmFzZVNpbmsgKnNpbmspOworCisvKiByZW5kZXIgZGVsYXkgKi8KK3ZvaWQgICAgICAgICAgICBnc3RfYmFzZV9zaW5rX3NldF9yZW5kZXJfZGVsYXkgIChHc3RCYXNlU2luayAqc2luaywgR3N0Q2xvY2tUaW1lIGRlbGF5KTsKK0dzdENsb2NrVGltZSAgICBnc3RfYmFzZV9zaW5rX2dldF9yZW5kZXJfZGVsYXkgIChHc3RCYXNlU2luayAqc2luayk7CisKKy8qIGJsb2Nrc2l6ZSAqLwordm9pZCAgICAgICAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X2Jsb2Nrc2l6ZSAgICAgKEdzdEJhc2VTaW5rICpzaW5rLCBndWludCBibG9ja3NpemUpOworZ3VpbnQgICAgICAgICAgIGdzdF9iYXNlX3NpbmtfZ2V0X2Jsb2Nrc2l6ZSAgICAgKEdzdEJhc2VTaW5rICpzaW5rKTsKKworLyogdGhyb3R0bGUtdGltZSAqLwordm9pZCAgICAgICAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X3Rocm90dGxlX3RpbWUgKEdzdEJhc2VTaW5rICpzaW5rLCBndWludDY0IHRocm90dGxlKTsKK2d1aW50NjQgICAgICAgICBnc3RfYmFzZV9zaW5rX2dldF90aHJvdHRsZV90aW1lIChHc3RCYXNlU2luayAqc2luayk7CisKK0dzdENsb2NrUmV0dXJuICBnc3RfYmFzZV9zaW5rX3dhaXRfY2xvY2sgICAgICAgIChHc3RCYXNlU2luayAqc2luaywgR3N0Q2xvY2tUaW1lIHRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lRGlmZiAqIGppdHRlcik7CitHc3RGbG93UmV0dXJuICAgZ3N0X2Jhc2Vfc2lua193YWl0X2VvcyAgICAgICAgICAoR3N0QmFzZVNpbmsgKnNpbmssIEdzdENsb2NrVGltZSB0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZURpZmYgKmppdHRlcik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9CQVNFX1NJTktfSF9fICovCmRpZmYgLS1naXQgYS9saWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYyBiL2xpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZmUyNjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYwpAQCAtMCwwICsxLDMyNzQgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgMjAwMCwyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+CisgKgorICogZ3N0YmFzZXNyYy5jOgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qKgorICogU0VDVElPTjpnc3RiYXNlc3JjCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEJhc2UgY2xhc3MgZm9yIGdldHJhbmdlIGJhc2VkIHNvdXJjZSBlbGVtZW50cworICogQHNlZV9hbHNvOiAjR3N0UHVzaFNyYywgI0dzdEJhc2VUcmFuc2Zvcm0sICNHc3RCYXNlU2luaworICoKKyAqIFRoaXMgaXMgYSBnZW5lcmljZSBiYXNlIGNsYXNzIGZvciBzb3VyY2UgZWxlbWVudHMuIFRoZSBmb2xsb3dpbmcKKyAqIHR5cGVzIG9mIHNvdXJjZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDxpdGVtaXplZGxpc3Q+CisgKiAgIDxsaXN0aXRlbT48cGFyYT5yYW5kb20gYWNjZXNzIHNvdXJjZXMgbGlrZSBmaWxlczwvcGFyYT48L2xpc3RpdGVtPgorICogICA8bGlzdGl0ZW0+PHBhcmE+c2Vla2FibGUgc291cmNlczwvcGFyYT48L2xpc3RpdGVtPgorICogICA8bGlzdGl0ZW0+PHBhcmE+bGl2ZSBzb3VyY2VzPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiA8L2l0ZW1pemVkbGlzdD4KKyAqCisgKiBUaGUgc291cmNlIGNhbiBiZSBjb25maWd1cmVkIHRvIG9wZXJhdGUgaW4gYW55ICNHc3RGb3JtYXQgd2l0aCB0aGUKKyAqIGdzdF9iYXNlX3NyY19zZXRfZm9ybWF0KCkgbWV0aG9kLiBUaGUgY3VycmVudGx5IHNldCBmb3JtYXQgZGV0ZXJtaW5lcworICogdGhlIGZvcm1hdCBvZiB0aGUgaW50ZXJuYWwgI0dzdFNlZ21lbnQgYW5kIGFueSAjR1NUX0VWRU5UX05FV1NFR01FTlQKKyAqIGV2ZW50cy4gVGhlIGRlZmF1bHQgZm9ybWF0IGZvciAjR3N0QmFzZVNyYyBpcyAjR1NUX0ZPUk1BVF9CWVRFUy4KKyAqCisgKiAjR3N0QmFzZVNyYyBhbHdheXMgc3VwcG9ydHMgcHVzaCBtb2RlIHNjaGVkdWxpbmcuIElmIHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldCwgaXQgYWxzbyBzdXBwb3J0cyBwdWxsIG1vZGUgc2NoZWR1bGluZzoKKyAqIDxpdGVtaXplZGxpc3Q+CisgKiAgIDxsaXN0aXRlbT48cGFyYT5UaGUgZm9ybWF0IGlzIHNldCB0byAjR1NUX0ZPUk1BVF9CWVRFUyAoZGVmYXVsdCkuPC9wYXJhPgorICogICA8L2xpc3RpdGVtPgorICogICA8bGlzdGl0ZW0+PHBhcmE+I0dzdEJhc2VTcmNDbGFzcy5pc19zZWVrYWJsZSgpIHJldHVybnMgJVRSVUUuPC9wYXJhPgorICogICA8L2xpc3RpdGVtPgorICogPC9pdGVtaXplZGxpc3Q+CisgKgorICogSWYgYWxsIHRoZSBjb25kaXRpb25zIGFyZSBtZXQgZm9yIG9wZXJhdGluZyBpbiBwdWxsIG1vZGUsICNHc3RCYXNlU3JjIGlzCisgKiBhdXRvbWF0aWNhbGx5IHNlZWthYmxlIGluIHB1c2ggbW9kZSBhcyB3ZWxsLiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgbXVzdAorICogYmUgbWV0IHRvIG1ha2UgdGhlIGVsZW1lbnQgc2Vla2FibGUgaW4gcHVzaCBtb2RlIHdoZW4gdGhlIGZvcm1hdCBpcyBub3QKKyAqICNHU1RfRk9STUFUX0JZVEVTOgorICogPGl0ZW1pemVkbGlzdD4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgICNHc3RCYXNlU3JjQ2xhc3MuaXNfc2Vla2FibGUoKSByZXR1cm5zICVUUlVFLgorICogICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgICNHc3RCYXNlU3JjQ2xhc3MucXVlcnkoKSBjYW4gY29udmVydCBhbGwgc3VwcG9ydGVkIHNlZWsgZm9ybWF0cyB0byB0aGUKKyAqICAgICBpbnRlcm5hbCBmb3JtYXQgYXMgc2V0IHdpdGggZ3N0X2Jhc2Vfc3JjX3NldF9mb3JtYXQoKS4KKyAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICAjR3N0QmFzZVNyY0NsYXNzLmRvX3NlZWsoKSBpcyBpbXBsZW1lbnRlZCwgcGVyZm9ybXMgdGhlIHNlZWsgYW5kIHJldHVybnMKKyAqICAgICAgJVRSVUUuCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogPC9pdGVtaXplZGxpc3Q+CisgKgorICogV2hlbiB0aGUgZWxlbWVudCBkb2VzIG5vdCBtZWV0IHRoZSByZXF1aXJlbWVudHMgdG8gb3BlcmF0ZSBpbiBwdWxsIG1vZGUsIHRoZQorICogb2Zmc2V0IGFuZCBsZW5ndGggaW4gdGhlICNHc3RCYXNlU3JjQ2xhc3MuY3JlYXRlKCkgbWV0aG9kIHNob3VsZCBiZSBpZ25vcmVkLgorICogSXQgaXMgcmVjb21tZW5kZWQgdG8gc3ViY2xhc3MgI0dzdFB1c2hTcmMgaW5zdGVhZCwgaW4gdGhpcyBzaXR1YXRpb24uIElmIHRoZQorICogZWxlbWVudCBjYW4gb3BlcmF0ZSBpbiBwdWxsIG1vZGUgYnV0IG9ubHkgd2l0aCBzcGVjaWZpYyBvZmZzZXRzIGFuZAorICogbGVuZ3RocywgaXQgaXMgYWxsb3dlZCB0byBnZW5lcmF0ZSBhbiBlcnJvciB3aGVuIHRoZSB3cm9uZyB2YWx1ZXMgYXJlIHBhc3NlZAorICogdG8gdGhlICNHc3RCYXNlU3JjQ2xhc3MuY3JlYXRlKCkgZnVuY3Rpb24uCisgKgorICogI0dzdEJhc2VTcmMgaGFzIHN1cHBvcnQgZm9yIGxpdmUgc291cmNlcy4gTGl2ZSBzb3VyY2VzIGFyZSBzb3VyY2VzIHRoYXQgd2hlbgorICogcGF1c2VkIGRpc2NhcmQgZGF0YSwgc3VjaCBhcyBhdWRpbyBvciB2aWRlbyBjYXB0dXJlIGRldmljZXMuIEEgdHlwaWNhbCBsaXZlCisgKiBzb3VyY2UgYWxzbyBwcm9kdWNlcyBkYXRhIGF0IGEgZml4ZWQgcmF0ZSBhbmQgdGh1cyBwcm92aWRlcyBhIGNsb2NrIHRvIHB1Ymxpc2gKKyAqIHRoaXMgcmF0ZS4KKyAqIFVzZSBnc3RfYmFzZV9zcmNfc2V0X2xpdmUoKSB0byBhY3RpdmF0ZSB0aGUgbGl2ZSBzb3VyY2UgbW9kZS4KKyAqCisgKiBBIGxpdmUgc291cmNlIGRvZXMgbm90IHByb2R1Y2UgZGF0YSBpbiB0aGUgUEFVU0VEIHN0YXRlLiBUaGlzIG1lYW5zIHRoYXQgdGhlCisgKiAjR3N0QmFzZVNyY0NsYXNzLmNyZWF0ZSgpIG1ldGhvZCB3aWxsIG5vdCBiZSBjYWxsZWQgaW4gUEFVU0VEIGJ1dCBvbmx5IGluCisgKiBQTEFZSU5HLiBUbyBzaWduYWwgdGhlIHBpcGVsaW5lIHRoYXQgdGhlIGVsZW1lbnQgd2lsbCBub3QgcHJvZHVjZSBkYXRhLCB0aGUKKyAqIHJldHVybiB2YWx1ZSBmcm9tIHRoZSBSRUFEWSB0byBQQVVTRUQgc3RhdGUgd2lsbCBiZQorICogI0dTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTC4KKyAqCisgKiBBIHR5cGljYWwgbGl2ZSBzb3VyY2Ugd2lsbCB0aW1lc3RhbXAgdGhlIGJ1ZmZlcnMgaXQgY3JlYXRlcyB3aXRoIHRoZQorICogY3VycmVudCBydW5uaW5nIHRpbWUgb2YgdGhlIHBpcGVsaW5lLiBUaGlzIGlzIG9uZSByZWFzb24gd2h5IGEgbGl2ZSBzb3VyY2UKKyAqIGNhbiBvbmx5IHByb2R1Y2UgZGF0YSBpbiB0aGUgUExBWUlORyBzdGF0ZSwgd2hlbiB0aGUgY2xvY2sgaXMgYWN0dWFsbHkKKyAqIGRpc3RyaWJ1dGVkIGFuZCBydW5uaW5nLgorICoKKyAqIExpdmUgc291cmNlcyB0aGF0IHN5bmNocm9uaXplIGFuZCBibG9jayBvbiB0aGUgY2xvY2sgKGFuIGF1ZGlvIHNvdXJjZSwgZm9yCisgKiBleGFtcGxlKSBjYW4gc2luY2UgMC4xMC4xMiB1c2UgZ3N0X2Jhc2Vfc3JjX3dhaXRfcGxheWluZygpIHdoZW4gdGhlCisgKiAjR3N0QmFzZVNyY0NsYXNzLmNyZWF0ZSgpIGZ1bmN0aW9uIHdhcyBpbnRlcnJ1cHRlZCBieSBhIHN0YXRlIGNoYW5nZSB0bworICogUEFVU0VELgorICoKKyAqIFRoZSAjR3N0QmFzZVNyY0NsYXNzLmdldF90aW1lcygpIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgcHNldWRvLWxpdmUKKyAqIHNvdXJjZXMuIEl0IG9ubHkgbWFrZXMgc2Vuc2UgdG8gaW1wbGVtZW50IHRoZSAjR3N0QmFzZVNyY0NsYXNzLmdldF90aW1lcygpCisgKiBmdW5jdGlvbiBpZiB0aGUgc291cmNlIGlzIGEgbGl2ZSBzb3VyY2UuIFRoZSAjR3N0QmFzZVNyY0NsYXNzLmdldF90aW1lcygpCisgKiBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHRpbWVzdGFtcHMgc3RhcnRpbmcgZnJvbSAwLCBhcyBpZiBpdCB3ZXJlIGEgbm9uLWxpdmUKKyAqIHNvdXJjZS4gVGhlIGJhc2UgY2xhc3Mgd2lsbCBtYWtlIHN1cmUgdGhhdCB0aGUgdGltZXN0YW1wcyBhcmUgdHJhbnNmb3JtZWQKKyAqIGludG8gdGhlIGN1cnJlbnQgcnVubmluZ190aW1lLiBUaGUgYmFzZSBzb3VyY2Ugd2lsbCB0aGVuIHdhaXQgZm9yIHRoZQorICogY2FsY3VsYXRlZCBydW5uaW5nX3RpbWUgYmVmb3JlIHB1c2hpbmcgb3V0IHRoZSBidWZmZXIuCisgKgorICogRm9yIGxpdmUgc291cmNlcywgdGhlIGJhc2UgY2xhc3Mgd2lsbCBieSBkZWZhdWx0IHJlcG9ydCBhIGxhdGVuY3kgb2YgMC4KKyAqIEZvciBwc2V1ZG8gbGl2ZSBzb3VyY2VzLCB0aGUgYmFzZSBjbGFzcyB3aWxsIGJ5IGRlZmF1bHQgbWVhc3VyZSB0aGUgZGlmZmVyZW5jZQorICogYmV0d2VlbiB0aGUgZmlyc3QgYnVmZmVyIHRpbWVzdGFtcCBhbmQgdGhlIHN0YXJ0IHRpbWUgb2YgZ2V0X3RpbWVzIGFuZCB3aWxsCisgKiByZXBvcnQgdGhpcyB2YWx1ZSBhcyB0aGUgbGF0ZW5jeS4KKyAqIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoZSBxdWVyeSBmdW5jdGlvbiB3aGVuIHRoaXMgYmVoYXZpb3VyIGlzIG5vdAorICogYWNjZXB0YWJsZS4KKyAqCisgKiBUaGVyZSBpcyBvbmx5IHN1cHBvcnQgaW4gI0dzdEJhc2VTcmMgZm9yIGV4YWN0bHkgb25lIHNvdXJjZSBwYWQsIHdoaWNoCisgKiBzaG91bGQgYmUgbmFtZWQgInNyYyIuIEEgc291cmNlIGltcGxlbWVudGF0aW9uIChzdWJjbGFzcyBvZiAjR3N0QmFzZVNyYykKKyAqIHNob3VsZCBpbnN0YWxsIGEgcGFkIHRlbXBsYXRlIGluIGl0cyBjbGFzc19pbml0IGZ1bmN0aW9uLCBsaWtlIHNvOgorICogfFsKKyAqIHN0YXRpYyB2b2lkCisgKiBteV9lbGVtZW50X2NsYXNzX2luaXQgKEdzdE15RWxlbWVudENsYXNzICprbGFzcykKKyAqIHsKKyAqICAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKKyAqICAgLy8gc3JjdGVtcGxhdGUgc2hvdWxkIGJlIGEgI0dzdFN0YXRpY1BhZFRlbXBsYXRlIHdpdGggZGlyZWN0aW9uCisgKiAgIC8vICNHU1RfUEFEX1NSQyBhbmQgbmFtZSAic3JjIgorICogICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAorICogICAgICAgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0ICgmYW1wO3NyY3RlbXBsYXRlKSk7CisgKiAgIC8vIHNlZSAjR3N0RWxlbWVudERldGFpbHMKKyAqICAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHMgKGdzdGVsZW1lbnRfY2xhc3MsICZhbXA7ZGV0YWlscyk7CisgKiB9CisgKiBdfAorICoKKyAqIDxyZWZzZWN0Mj4KKyAqIDx0aXRsZT5Db250cm9sbGVkIHNodXRkb3duIG9mIGxpdmUgc291cmNlcyBpbiBhcHBsaWNhdGlvbnM8L3RpdGxlPgorICogPHBhcmE+CisgKiBBcHBsaWNhdGlvbnMgdGhhdCByZWNvcmQgZnJvbSBhIGxpdmUgc291cmNlIG1heSB3YW50IHRvIHN0b3AgcmVjb3JkaW5nCisgKiBpbiBhIGNvbnRyb2xsZWQgd2F5LCBzbyB0aGF0IHRoZSByZWNvcmRpbmcgaXMgc3RvcHBlZCwgYnV0IHRoZSBkYXRhCisgKiBhbHJlYWR5IGluIHRoZSBwaXBlbGluZSBpcyBwcm9jZXNzZWQgdG8gdGhlIGVuZCAocmVtZW1iZXIgdGhhdCBtYW55IGxpdmUKKyAqIHNvdXJjZXMgd291bGQgZ28gb24gcmVjb3JkaW5nIGZvcmV2ZXIgb3RoZXJ3aXNlKS4gRm9yIHRoYXQgdG8gaGFwcGVuIHRoZQorICogYXBwbGljYXRpb24gbmVlZHMgdG8gbWFrZSB0aGUgc291cmNlIHN0b3AgcmVjb3JkaW5nIGFuZCBzZW5kIGFuIEVPUworICogZXZlbnQgZG93biB0aGUgcGlwZWxpbmUuIFRoZSBhcHBsaWNhdGlvbiB3b3VsZCB0aGVuIHdhaXQgZm9yIGFuCisgKiBFT1MgbWVzc2FnZSBwb3N0ZWQgb24gdGhlIHBpcGVsaW5lJ3MgYnVzIHRvIGtub3cgd2hlbiBhbGwgZGF0YSBoYXMKKyAqIGJlZW4gcHJvY2Vzc2VkIGFuZCB0aGUgcGlwZWxpbmUgY2FuIHNhZmVseSBiZSBzdG9wcGVkLgorICoKKyAqIFNpbmNlIEdTdHJlYW1lciAwLjEwLjE2IGFuIGFwcGxpY2F0aW9uIG1heSBzZW5kIGFuIEVPUyBldmVudCB0byBhIHNvdXJjZQorICogZWxlbWVudCB0byBtYWtlIGl0IHBlcmZvcm0gdGhlIEVPUyBsb2dpYyAoc2VuZCBFT1MgZXZlbnQgZG93bnN0cmVhbSBvciBwb3N0IGEKKyAqICNHU1RfTUVTU0FHRV9TRUdNRU5UX0RPTkUgb24gdGhlIGJ1cykuIFRoaXMgY2FuIHR5cGljYWxseSBiZSBkb25lCisgKiB3aXRoIHRoZSBnc3RfZWxlbWVudF9zZW5kX2V2ZW50KCkgZnVuY3Rpb24gb24gdGhlIGVsZW1lbnQgb3IgaXRzIHBhcmVudCBiaW4uCisgKgorICogQWZ0ZXIgdGhlIEVPUyBoYXMgYmVlbiBzZW50IHRvIHRoZSBlbGVtZW50LCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIHdhaXQgZm9yCisgKiBhbiBFT1MgbWVzc2FnZSB0byBiZSBwb3N0ZWQgb24gdGhlIHBpcGVsaW5lJ3MgYnVzLiBPbmNlIHRoaXMgRU9TIG1lc3NhZ2UgaXMKKyAqIHJlY2VpdmVkLCBpdCBtYXkgc2FmZWx5IHNodXQgZG93biB0aGUgZW50aXJlIHBpcGVsaW5lLgorICoKKyAqIExhc3QgcmV2aWV3ZWQgb24gMjAwNy0xMi0xOSAoMC4xMC4xNikKKyAqIDwvcGFyYT4KKyAqIDwvcmVmc2VjdDI+CisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGdzdC9nc3RfcHJpdmF0ZS5oPgorCisjaW5jbHVkZSAiZ3N0YmFzZXNyYy5oIgorI2luY2x1ZGUgImdzdHR5cGVmaW5kaGVscGVyLmgiCisjaW5jbHVkZSA8Z3N0L2dzdG1hcnNoYWwuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0LWkxOG4tbGliLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9iYXNlX3NyY19kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfYmFzZV9zcmNfZGVidWcKKworI2RlZmluZSBHU1RfTElWRV9HRVRfTE9DSyhlbGVtKSAgICAgICAgICAgICAgIChHU1RfQkFTRV9TUkNfQ0FTVChlbGVtKS0+bGl2ZV9sb2NrKQorI2RlZmluZSBHU1RfTElWRV9MT0NLKGVsZW0pICAgICAgICAgICAgICAgICAgIGdfbXV0ZXhfbG9jayhHU1RfTElWRV9HRVRfTE9DSyhlbGVtKSkKKyNkZWZpbmUgR1NUX0xJVkVfVFJZTE9DSyhlbGVtKSAgICAgICAgICAgICAgICBnX211dGV4X3RyeWxvY2soR1NUX0xJVkVfR0VUX0xPQ0soZWxlbSkpCisjZGVmaW5lIEdTVF9MSVZFX1VOTE9DSyhlbGVtKSAgICAgICAgICAgICAgICAgZ19tdXRleF91bmxvY2soR1NUX0xJVkVfR0VUX0xPQ0soZWxlbSkpCisjZGVmaW5lIEdTVF9MSVZFX0dFVF9DT05EKGVsZW0pICAgICAgICAgICAgICAgKEdTVF9CQVNFX1NSQ19DQVNUKGVsZW0pLT5saXZlX2NvbmQpCisjZGVmaW5lIEdTVF9MSVZFX1dBSVQoZWxlbSkgICAgICAgICAgICAgICAgICAgZ19jb25kX3dhaXQgKEdTVF9MSVZFX0dFVF9DT05EIChlbGVtKSwgR1NUX0xJVkVfR0VUX0xPQ0sgKGVsZW0pKQorI2RlZmluZSBHU1RfTElWRV9USU1FRF9XQUlUKGVsZW0sIHRpbWV2YWwpICAgIGdfY29uZF90aW1lZF93YWl0IChHU1RfTElWRV9HRVRfQ09ORCAoZWxlbSksIEdTVF9MSVZFX0dFVF9MT0NLIChlbGVtKSxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWV2YWwpCisjZGVmaW5lIEdTVF9MSVZFX1NJR05BTChlbGVtKSAgICAgICAgICAgICAgICAgZ19jb25kX3NpZ25hbCAoR1NUX0xJVkVfR0VUX0NPTkQgKGVsZW0pKTsKKyNkZWZpbmUgR1NUX0xJVkVfQlJPQURDQVNUKGVsZW0pICAgICAgICAgICAgICBnX2NvbmRfYnJvYWRjYXN0IChHU1RfTElWRV9HRVRfQ09ORCAoZWxlbSkpOworCisvKiBCYXNlU3JjIHNpZ25hbHMgYW5kIGFyZ3MgKi8KK2VudW0KK3sKKyAgLyogRklMTCBNRSAqLworICBMQVNUX1NJR05BTAorfTsKKworI2RlZmluZSBERUZBVUxUX0JMT0NLU0laRSAgICAgICA0MDk2CisjZGVmaW5lIERFRkFVTFRfTlVNX0JVRkZFUlMgICAgIC0xCisjZGVmaW5lIERFRkFVTFRfVFlQRUZJTkQgICAgICAgIEZBTFNFCisjZGVmaW5lIERFRkFVTFRfRE9fVElNRVNUQU1QICAgIEZBTFNFCisKK2VudW0KK3sKKyAgUFJPUF8wLAorICBQUk9QX0JMT0NLU0laRSwKKyAgUFJPUF9OVU1fQlVGRkVSUywKKyAgUFJPUF9UWVBFRklORCwKKyAgUFJPUF9ET19USU1FU1RBTVAKK307CisKKyNkZWZpbmUgR1NUX0JBU0VfU1JDX0dFVF9QUklWQVRFKG9iaikgIFwKKyAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKChvYmopLCBHU1RfVFlQRV9CQVNFX1NSQywgR3N0QmFzZVNyY1ByaXZhdGUpKQorCitzdHJ1Y3QgX0dzdEJhc2VTcmNQcml2YXRlCit7CisgIGdib29sZWFuIGRpc2NvbnQ7CisgIGdib29sZWFuIGZsdXNoaW5nOworCisgIC8qIGlmIHNlZ21lbnQgc2hvdWxkIGJlIHNlbnQgKi8KKyAgZ2Jvb2xlYW4gc2VnbWVudF9wZW5kaW5nOworCisgIC8qIGlmIEVPUyBpcyBwZW5kaW5nIChhdG9taWMpICovCisgIGdpbnQgcGVuZGluZ19lb3M7CisKKyAgLyogc3RhcnR1cCBsYXRlbmN5IGlzIHRoZSB0aW1lIGl0IHRha2VzIGJldHdlZW4gZ29pbmcgdG8gUExBWUlORyBhbmQgcHJvZHVjaW5nCisgICAqIHRoZSBmaXJzdCBCVUZGRVIgd2l0aCBydW5uaW5nX3RpbWUgMC4gVGhpcyB2YWx1ZSBpcyBpbmNsdWRlZCBpbiB0aGUgbGF0ZW5jeQorICAgKiByZXBvcnRpbmcuICovCisgIEdzdENsb2NrVGltZSBsYXRlbmN5OworICAvKiB0aW1lc3RhbXAgb2Zmc2V0LCB0aGlzIGlzIHRoZSBvZmZzZXQgYWRkIHRvIHRoZSB2YWx1ZXMgb2YgZ3N0X3RpbWVzIGZvcgorICAgKiBwc2V1ZG8gbGl2ZSBzb3VyY2VzICovCisgIEdzdENsb2NrVGltZURpZmYgdHNfb2Zmc2V0OworCisgIGdib29sZWFuIGRvX3RpbWVzdGFtcDsKKyAgdm9sYXRpbGUgZ2ludCBkeW5hbWljX3NpemU7CisKKyAgLyogc3RyZWFtIHNlcXVlbmNlIG51bWJlciAqLworICBndWludDMyIHNlcW51bTsKKworICAvKiBwZW5kaW5nIGV2ZW50cyAoVEFHLCBDVVNUT01fQk9USCwgQ1VTVE9NX0RPV05TVFJFQU0pIHRvIGJlCisgICAqIHB1c2hlZCBpbiB0aGUgZGF0YSBzdHJlYW0gKi8KKyAgR0xpc3QgKnBlbmRpbmdfZXZlbnRzOworICB2b2xhdGlsZSBnaW50IGhhdmVfZXZlbnRzOworCisgIC8qIFFvUyAqLy8qIHdpdGggTE9DSyAqLworICBnYm9vbGVhbiBxb3NfZW5hYmxlZDsKKyAgZ2RvdWJsZSBwcm9wb3J0aW9uOworICBHc3RDbG9ja1RpbWUgZWFybGllc3RfdGltZTsKKworICBHc3RCdWZmZXJQb29sICpwb29sOworICBjb25zdCBHc3RBbGxvY2F0b3IgKmFsbG9jYXRvcjsKKyAgZ3VpbnQgcHJlZml4OworICBndWludCBhbGlnbm1lbnQ7Cit9OworCitzdGF0aWMgR3N0RWxlbWVudENsYXNzICpwYXJlbnRfY2xhc3MgPSBOVUxMOworCitzdGF0aWMgdm9pZCBnc3RfYmFzZV9zcmNfY2xhc3NfaW5pdCAoR3N0QmFzZVNyY0NsYXNzICoga2xhc3MpOworc3RhdGljIHZvaWQgZ3N0X2Jhc2Vfc3JjX2luaXQgKEdzdEJhc2VTcmMgKiBzcmMsIGdwb2ludGVyIGdfY2xhc3MpOworc3RhdGljIHZvaWQgZ3N0X2Jhc2Vfc3JjX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKKworCitHVHlwZQorZ3N0X2Jhc2Vfc3JjX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgdm9sYXRpbGUgZ3NpemUgYmFzZV9zcmNfdHlwZSA9IDA7CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmYmFzZV9zcmNfdHlwZSkpIHsKKyAgICBHVHlwZSBfdHlwZTsKKyAgICBzdGF0aWMgY29uc3QgR1R5cGVJbmZvIGJhc2Vfc3JjX2luZm8gPSB7CisgICAgICBzaXplb2YgKEdzdEJhc2VTcmNDbGFzcyksCisgICAgICBOVUxMLAorICAgICAgTlVMTCwKKyAgICAgIChHQ2xhc3NJbml0RnVuYykgZ3N0X2Jhc2Vfc3JjX2NsYXNzX2luaXQsCisgICAgICBOVUxMLAorICAgICAgTlVMTCwKKyAgICAgIHNpemVvZiAoR3N0QmFzZVNyYyksCisgICAgICAwLAorICAgICAgKEdJbnN0YW5jZUluaXRGdW5jKSBnc3RfYmFzZV9zcmNfaW5pdCwKKyAgICB9OworCisgICAgX3R5cGUgPSBnX3R5cGVfcmVnaXN0ZXJfc3RhdGljIChHU1RfVFlQRV9FTEVNRU5ULAorICAgICAgICAiR3N0QmFzZVNyYyIsICZiYXNlX3NyY19pbmZvLCBHX1RZUEVfRkxBR19BQlNUUkFDVCk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZiYXNlX3NyY190eXBlLCBfdHlwZSk7CisgIH0KKyAgcmV0dXJuIGJhc2Vfc3JjX3R5cGU7Cit9CisKK3N0YXRpYyBHc3RDYXBzICpnc3RfYmFzZV9zcmNfZ2V0Y2FwcyAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogZmlsdGVyKTsKK3N0YXRpYyB2b2lkIGdzdF9iYXNlX3NyY19kZWZhdWx0X2ZpeGF0ZSAoR3N0QmFzZVNyYyAqIHNyYywgR3N0Q2FwcyAqIGNhcHMpOworc3RhdGljIHZvaWQgZ3N0X2Jhc2Vfc3JjX2ZpeGF0ZSAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogY2Fwcyk7CisKK3N0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9zcmNfaXNfcmFuZG9tX2FjY2VzcyAoR3N0QmFzZVNyYyAqIHNyYyk7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2Vfc3JjX2FjdGl2YXRlX3B1c2ggKEdzdFBhZCAqIHBhZCwgZ2Jvb2xlYW4gYWN0aXZlKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9zcmNfYWN0aXZhdGVfcHVsbCAoR3N0UGFkICogcGFkLCBnYm9vbGVhbiBhY3RpdmUpOworc3RhdGljIHZvaWQgZ3N0X2Jhc2Vfc3JjX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKK3N0YXRpYyB2b2lkIGdzdF9iYXNlX3NyY19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2Vfc3JjX2V2ZW50X2hhbmRsZXIgKEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiBldmVudCk7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2Vfc3JjX3NlbmRfZXZlbnQgKEdzdEVsZW1lbnQgKiBlbGVtLCBHc3RFdmVudCAqIGV2ZW50KTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9zcmNfZGVmYXVsdF9ldmVudCAoR3N0QmFzZVNyYyAqIHNyYywgR3N0RXZlbnQgKiBldmVudCk7CitzdGF0aWMgY29uc3QgR3N0UXVlcnlUeXBlICpnc3RfYmFzZV9zcmNfZ2V0X3F1ZXJ5X3R5cGVzIChHc3RFbGVtZW50ICogZWxlbWVudCk7CisKK3N0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9zcmNfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0UXVlcnkgKiBxdWVyeSk7CisKK3N0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9zcmNfYWN0aXZhdGVfcG9vbCAoR3N0QmFzZVNyYyAqIGJhc2VzcmMsCisgICAgZ2Jvb2xlYW4gYWN0aXZlKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9zcmNfZGVmYXVsdF9uZWdvdGlhdGUgKEdzdEJhc2VTcmMgKiBiYXNlc3JjKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9zcmNfZGVmYXVsdF9kb19zZWVrIChHc3RCYXNlU3JjICogc3JjLAorICAgIEdzdFNlZ21lbnQgKiBzZWdtZW50KTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9zcmNfZGVmYXVsdF9xdWVyeSAoR3N0QmFzZVNyYyAqIHNyYywgR3N0UXVlcnkgKiBxdWVyeSk7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfcHJlcGFyZV9zZWVrX3NlZ21lbnQgKEdzdEJhc2VTcmMgKiBzcmMsCisgICAgR3N0RXZlbnQgKiBldmVudCwgR3N0U2VnbWVudCAqIHNlZ21lbnQpOworc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfY3JlYXRlIChHc3RCYXNlU3JjICogYmFzZXNyYywKKyAgICBndWludDY0IG9mZnNldCwgZ3VpbnQgc2l6ZSwgR3N0QnVmZmVyICoqIGJ1Zik7CitzdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfYmFzZV9zcmNfZGVmYXVsdF9hbGxvYyAoR3N0QmFzZVNyYyAqIGJhc2VzcmMsCisgICAgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50IHNpemUsIEdzdEJ1ZmZlciAqKiBidWYpOworCitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2Vfc3JjX3NldF9mbHVzaGluZyAoR3N0QmFzZVNyYyAqIGJhc2VzcmMsCisgICAgZ2Jvb2xlYW4gZmx1c2hpbmcsIGdib29sZWFuIGxpdmVfcGxheSwgZ2Jvb2xlYW4gdW5sb2NrLCBnYm9vbGVhbiAqIHBsYXlpbmcpOworc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3NyY19zdGFydCAoR3N0QmFzZVNyYyAqIGJhc2VzcmMpOworc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3NyY19zdG9wIChHc3RCYXNlU3JjICogYmFzZXNyYyk7CisKK3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfYmFzZV9zcmNfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKKyAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKKworc3RhdGljIHZvaWQgZ3N0X2Jhc2Vfc3JjX2xvb3AgKEdzdFBhZCAqIHBhZCk7CitzdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfYmFzZV9zcmNfcGFkX2dldF9yYW5nZSAoR3N0UGFkICogcGFkLCBndWludDY0IG9mZnNldCwKKyAgICBndWludCBsZW5ndGgsIEdzdEJ1ZmZlciAqKiBidWYpOworc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2Jhc2Vfc3JjX2dldF9yYW5nZSAoR3N0QmFzZVNyYyAqIHNyYywgZ3VpbnQ2NCBvZmZzZXQsCisgICAgZ3VpbnQgbGVuZ3RoLCBHc3RCdWZmZXIgKiogYnVmKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9zcmNfc2Vla2FibGUgKEdzdEJhc2VTcmMgKiBzcmMpOworc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3NyY19uZWdvdGlhdGUgKEdzdEJhc2VTcmMgKiBiYXNlc3JjKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9zcmNfdXBkYXRlX2xlbmd0aCAoR3N0QmFzZVNyYyAqIHNyYywgZ3VpbnQ2NCBvZmZzZXQsCisgICAgZ3VpbnQgKiBsZW5ndGgpOworCitzdGF0aWMgdm9pZAorZ3N0X2Jhc2Vfc3JjX2NsYXNzX2luaXQgKEdzdEJhc2VTcmNDbGFzcyAqIGtsYXNzKQoreworICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7CisgIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKKworICBnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKKyAgZ3N0ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7CisKKyAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9iYXNlX3NyY19kZWJ1ZywgImJhc2VzcmMiLCAwLCAiYmFzZXNyYyBlbGVtZW50Iik7CisKKyAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChrbGFzcywgc2l6ZW9mIChHc3RCYXNlU3JjUHJpdmF0ZSkpOworCisgIHBhcmVudF9jbGFzcyA9IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCAoa2xhc3MpOworCisgIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X2Jhc2Vfc3JjX2ZpbmFsaXplOworICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfYmFzZV9zcmNfc2V0X3Byb3BlcnR5OworICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfYmFzZV9zcmNfZ2V0X3Byb3BlcnR5OworCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQkxPQ0tTSVpFLAorICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJibG9ja3NpemUiLCAiQmxvY2sgc2l6ZSIsCisgICAgICAgICAgIlNpemUgaW4gYnl0ZXMgdG8gcmVhZCBwZXIgYnVmZmVyICgtMSA9IGRlZmF1bHQpIiwgMCwgR19NQVhVSU5ULAorICAgICAgICAgIERFRkFVTFRfQkxPQ0tTSVpFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9OVU1fQlVGRkVSUywKKyAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJudW0tYnVmZmVycyIsICJudW0tYnVmZmVycyIsCisgICAgICAgICAgIk51bWJlciBvZiBidWZmZXJzIHRvIG91dHB1dCBiZWZvcmUgc2VuZGluZyBFT1MgKC0xID0gdW5saW1pdGVkKSIsCisgICAgICAgICAgLTEsIEdfTUFYSU5ULCBERUZBVUxUX05VTV9CVUZGRVJTLCBHX1BBUkFNX1JFQURXUklURSB8CisgICAgICAgICAgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1RZUEVGSU5ELAorICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJ0eXBlZmluZCIsICJUeXBlZmluZCIsCisgICAgICAgICAgIlJ1biB0eXBlZmluZCBiZWZvcmUgbmVnb3RpYXRpbmciLCBERUZBVUxUX1RZUEVGSU5ELAorICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0RPX1RJTUVTVEFNUCwKKyAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiZG8tdGltZXN0YW1wIiwgIkRvIHRpbWVzdGFtcCIsCisgICAgICAgICAgIkFwcGx5IGN1cnJlbnQgc3RyZWFtIHRpbWUgdG8gYnVmZmVycyIsIERFRkFVTFRfRE9fVElNRVNUQU1QLAorICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworCisgIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9CisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2Vfc3JjX2NoYW5nZV9zdGF0ZSk7CisgIGdzdGVsZW1lbnRfY2xhc3MtPnNlbmRfZXZlbnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2Vfc3JjX3NlbmRfZXZlbnQpOworICBnc3RlbGVtZW50X2NsYXNzLT5nZXRfcXVlcnlfdHlwZXMgPQorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3NyY19nZXRfcXVlcnlfdHlwZXMpOworCisgIGtsYXNzLT5uZWdvdGlhdGUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfbmVnb3RpYXRlKTsKKyAga2xhc3MtPmV2ZW50ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3NyY19kZWZhdWx0X2V2ZW50KTsKKyAga2xhc3MtPmRvX3NlZWsgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfZG9fc2Vlayk7CisgIGtsYXNzLT5xdWVyeSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmFzZV9zcmNfZGVmYXVsdF9xdWVyeSk7CisgIGtsYXNzLT5wcmVwYXJlX3NlZWtfc2VnbWVudCA9CisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfcHJlcGFyZV9zZWVrX3NlZ21lbnQpOworICBrbGFzcy0+Zml4YXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3NyY19kZWZhdWx0X2ZpeGF0ZSk7CisgIGtsYXNzLT5jcmVhdGUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfY3JlYXRlKTsKKyAga2xhc3MtPmFsbG9jID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3NyY19kZWZhdWx0X2FsbG9jKTsKKworICAvKiBSZWdpc3RlcmluZyBkZWJ1ZyBzeW1ib2xzIGZvciBmdW5jdGlvbiBwb2ludGVycyAqLworICBHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUiAoZ3N0X2Jhc2Vfc3JjX2FjdGl2YXRlX3B1c2gpOworICBHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUiAoZ3N0X2Jhc2Vfc3JjX2FjdGl2YXRlX3B1bGwpOworICBHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUiAoZ3N0X2Jhc2Vfc3JjX2V2ZW50X2hhbmRsZXIpOworICBHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUiAoZ3N0X2Jhc2Vfc3JjX3F1ZXJ5KTsKKyAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9iYXNlX3NyY19wYWRfZ2V0X3JhbmdlKTsKKyAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9iYXNlX3NyY19nZXRjYXBzKTsKKyAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9iYXNlX3NyY19maXhhdGUpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2Jhc2Vfc3JjX2luaXQgKEdzdEJhc2VTcmMgKiBiYXNlc3JjLCBncG9pbnRlciBnX2NsYXNzKQoreworICBHc3RQYWQgKnBhZDsKKyAgR3N0UGFkVGVtcGxhdGUgKnBhZF90ZW1wbGF0ZTsKKworICBiYXNlc3JjLT5wcml2ID0gR1NUX0JBU0VfU1JDX0dFVF9QUklWQVRFIChiYXNlc3JjKTsKKworICBiYXNlc3JjLT5pc19saXZlID0gRkFMU0U7CisgIGJhc2VzcmMtPmxpdmVfbG9jayA9IGdfbXV0ZXhfbmV3ICgpOworICBiYXNlc3JjLT5saXZlX2NvbmQgPSBnX2NvbmRfbmV3ICgpOworICBiYXNlc3JjLT5udW1fYnVmZmVycyA9IERFRkFVTFRfTlVNX0JVRkZFUlM7CisgIGJhc2VzcmMtPm51bV9idWZmZXJzX2xlZnQgPSAtMTsKKworICBiYXNlc3JjLT5jYW5fYWN0aXZhdGVfcHVzaCA9IFRSVUU7CisKKyAgcGFkX3RlbXBsYXRlID0KKyAgICAgIGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKEdTVF9FTEVNRU5UX0NMQVNTIChnX2NsYXNzKSwgInNyYyIpOworICBnX3JldHVybl9pZl9mYWlsIChwYWRfdGVtcGxhdGUgIT0gTlVMTCk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgImNyZWF0aW5nIHNyYyBwYWQiKTsKKyAgcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAocGFkX3RlbXBsYXRlLCAic3JjIik7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgInNldHRpbmcgZnVuY3Rpb25zIG9uIHNyYyBwYWQiKTsKKyAgZ3N0X3BhZF9zZXRfYWN0aXZhdGVwdXNoX2Z1bmN0aW9uIChwYWQsIGdzdF9iYXNlX3NyY19hY3RpdmF0ZV9wdXNoKTsKKyAgZ3N0X3BhZF9zZXRfYWN0aXZhdGVwdWxsX2Z1bmN0aW9uIChwYWQsIGdzdF9iYXNlX3NyY19hY3RpdmF0ZV9wdWxsKTsKKyAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHBhZCwgZ3N0X2Jhc2Vfc3JjX2V2ZW50X2hhbmRsZXIpOworICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAocGFkLCBnc3RfYmFzZV9zcmNfcXVlcnkpOworICBnc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbiAocGFkLCBnc3RfYmFzZV9zcmNfcGFkX2dldF9yYW5nZSk7CisgIGdzdF9wYWRfc2V0X2dldGNhcHNfZnVuY3Rpb24gKHBhZCwgZ3N0X2Jhc2Vfc3JjX2dldGNhcHMpOworICBnc3RfcGFkX3NldF9maXhhdGVjYXBzX2Z1bmN0aW9uIChwYWQsIGdzdF9iYXNlX3NyY19maXhhdGUpOworCisgIC8qIGhvbGQgcG9pbnRlciB0byBwYWQgKi8KKyAgYmFzZXNyYy0+c3JjcGFkID0gcGFkOworICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAiYWRkaW5nIHNyYyBwYWQiKTsKKyAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKGJhc2VzcmMpLCBwYWQpOworCisgIGJhc2VzcmMtPmJsb2Nrc2l6ZSA9IERFRkFVTFRfQkxPQ0tTSVpFOworICBiYXNlc3JjLT5jbG9ja19pZCA9IE5VTEw7CisgIC8qIHdlIG9wZXJhdGUgaW4gQllURVMgYnkgZGVmYXVsdCAqLworICBnc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdCAoYmFzZXNyYywgR1NUX0ZPUk1BVF9CWVRFUyk7CisgIGJhc2VzcmMtPnR5cGVmaW5kID0gREVGQVVMVF9UWVBFRklORDsKKyAgYmFzZXNyYy0+cHJpdi0+ZG9fdGltZXN0YW1wID0gREVGQVVMVF9ET19USU1FU1RBTVA7CisgIGdfYXRvbWljX2ludF9zZXQgKCZiYXNlc3JjLT5wcml2LT5oYXZlX2V2ZW50cywgRkFMU0UpOworCisgIEdTVF9PQkpFQ1RfRkxBR19VTlNFVCAoYmFzZXNyYywgR1NUX0JBU0VfU1JDX1NUQVJURUQpOworICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChiYXNlc3JjLCBHU1RfRUxFTUVOVF9JU19TT1VSQ0UpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJpbml0IGRvbmUiKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9iYXNlX3NyY19maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKK3sKKyAgR3N0QmFzZVNyYyAqYmFzZXNyYzsKKyAgR3N0RXZlbnQgKipldmVudF9wOworCisgIGJhc2VzcmMgPSBHU1RfQkFTRV9TUkMgKG9iamVjdCk7CisKKyAgZ19tdXRleF9mcmVlIChiYXNlc3JjLT5saXZlX2xvY2spOworICBnX2NvbmRfZnJlZSAoYmFzZXNyYy0+bGl2ZV9jb25kKTsKKworICBldmVudF9wID0gJmJhc2VzcmMtPnBlbmRpbmdfc2VlazsKKyAgZ3N0X2V2ZW50X3JlcGxhY2UgKGV2ZW50X3AsIE5VTEwpOworCisgIGlmIChiYXNlc3JjLT5wcml2LT5wZW5kaW5nX2V2ZW50cykgeworICAgIGdfbGlzdF9mb3JlYWNoIChiYXNlc3JjLT5wcml2LT5wZW5kaW5nX2V2ZW50cywgKEdGdW5jKSBnc3RfZXZlbnRfdW5yZWYsCisgICAgICAgIE5VTEwpOworICAgIGdfbGlzdF9mcmVlIChiYXNlc3JjLT5wcml2LT5wZW5kaW5nX2V2ZW50cyk7CisgIH0KKworICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Cit9CisKKy8qKgorICogZ3N0X2Jhc2Vfc3JjX3dhaXRfcGxheWluZzoKKyAqIEBzcmM6IHRoZSBzcmMKKyAqCisgKiBJZiB0aGUgI0dzdEJhc2VTcmNDbGFzcy5jcmVhdGUoKSBtZXRob2QgcGVyZm9ybXMgaXRzIG93biBzeW5jaHJvbmlzYXRpb24KKyAqIGFnYWluc3QgdGhlIGNsb2NrIGl0IG11c3QgdW5ibG9jayB3aGVuIGdvaW5nIGZyb20gUExBWUlORyB0byB0aGUgUEFVU0VEIHN0YXRlCisgKiBhbmQgY2FsbCB0aGlzIG1ldGhvZCBiZWZvcmUgY29udGludWluZyB0byBwcm9kdWNlIHRoZSByZW1haW5pbmcgZGF0YS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgdW50aWwgYSBzdGF0ZSBjaGFuZ2UgdG8gUExBWUlORyBoYXBwZW5zIChpbiB3aGljaAorICogY2FzZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMgI0dTVF9GTE9XX09LKSBvciB0aGUgcHJvY2Vzc2luZyBtdXN0IGJlIHN0b3BwZWQgZHVlCisgKiB0byBhIHN0YXRlIGNoYW5nZSB0byBSRUFEWSBvciBhIEZMVVNIIGV2ZW50IChpbiB3aGljaCBjYXNlIHRoaXMgZnVuY3Rpb24KKyAqIHJldHVybnMgI0dTVF9GTE9XX1dST05HX1NUQVRFKS4KKyAqCisgKiBTaW5jZTogMC4xMC4xMgorICoKKyAqIFJldHVybnM6ICNHU1RfRkxPV19PSyBpZiBAc3JjIGlzIFBMQVlJTkcgYW5kIHByb2Nlc3NpbmcgY2FuCisgKiBjb250aW51ZS4gQW55IG90aGVyIHJldHVybiB2YWx1ZSBzaG91bGQgYmUgcmV0dXJuZWQgZnJvbSB0aGUgY3JlYXRlIHZtZXRob2QuCisgKi8KK0dzdEZsb3dSZXR1cm4KK2dzdF9iYXNlX3NyY193YWl0X3BsYXlpbmcgKEdzdEJhc2VTcmMgKiBzcmMpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQkFTRV9TUkMgKHNyYyksIEdTVF9GTE9XX0VSUk9SKTsKKworICBkbyB7CisgICAgLyogYmxvY2sgdW50aWwgdGhlIHN0YXRlIGNoYW5nZXMsIG9yIHdlIGdldCBhIGZsdXNoLCBvciBzb21ldGhpbmcgKi8KKyAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJsaXZlIHNvdXJjZSB3YWl0aW5nIGZvciBydW5uaW5nIHN0YXRlIik7CisgICAgR1NUX0xJVkVfV0FJVCAoc3JjKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJsaXZlIHNvdXJjZSB1bmxvY2tlZCIpOworICAgIGlmIChzcmMtPnByaXYtPmZsdXNoaW5nKQorICAgICAgZ290byBmbHVzaGluZzsKKyAgfSB3aGlsZSAoR19VTkxJS0VMWSAoIXNyYy0+bGl2ZV9ydW5uaW5nKSk7CisKKyAgcmV0dXJuIEdTVF9GTE9XX09LOworCisgIC8qIEVSUk9SUyAqLworZmx1c2hpbmc6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJ3ZSBhcmUgZmx1c2hpbmciKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfV1JPTkdfU1RBVEU7CisgIH0KK30KKworLyoqCisgKiBnc3RfYmFzZV9zcmNfc2V0X2xpdmU6CisgKiBAc3JjOiBiYXNlIHNvdXJjZSBpbnN0YW5jZQorICogQGxpdmU6IG5ldyBsaXZlLW1vZGUKKyAqCisgKiBJZiB0aGUgZWxlbWVudCBsaXN0ZW5zIHRvIGEgbGl2ZSBzb3VyY2UsIEBsaXZlIHNob3VsZAorICogYmUgc2V0IHRvICVUUlVFLgorICoKKyAqIEEgbGl2ZSBzb3VyY2Ugd2lsbCBub3QgcHJvZHVjZSBkYXRhIGluIHRoZSBQQVVTRUQgc3RhdGUgYW5kCisgKiB3aWxsIHRoZXJlZm9yZSBub3QgYmUgYWJsZSB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgUFJFUk9MTCBwaGFzZQorICogb2YgYSBwaXBlbGluZS4gVG8gc2lnbmFsIHRoaXMgZmFjdCB0byB0aGUgYXBwbGljYXRpb24gYW5kIHRoZQorICogcGlwZWxpbmUsIHRoZSBzdGF0ZSBjaGFuZ2UgcmV0dXJuIHZhbHVlIG9mIHRoZSBsaXZlIHNvdXJjZSB3aWxsCisgKiBiZSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwuCisgKi8KK3ZvaWQKK2dzdF9iYXNlX3NyY19zZXRfbGl2ZSAoR3N0QmFzZVNyYyAqIHNyYywgZ2Jvb2xlYW4gbGl2ZSkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JBU0VfU1JDIChzcmMpKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHNyYyk7CisgIHNyYy0+aXNfbGl2ZSA9IGxpdmU7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmMpOworfQorCisvKioKKyAqIGdzdF9iYXNlX3NyY19pc19saXZlOgorICogQHNyYzogYmFzZSBzb3VyY2UgaW5zdGFuY2UKKyAqCisgKiBDaGVjayBpZiBhbiBlbGVtZW50IGlzIGluIGxpdmUgbW9kZS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBlbGVtZW50IGlzIGluIGxpdmUgbW9kZS4KKyAqLworZ2Jvb2xlYW4KK2dzdF9iYXNlX3NyY19pc19saXZlIChHc3RCYXNlU3JjICogc3JjKQoreworICBnYm9vbGVhbiByZXN1bHQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CQVNFX1NSQyAoc3JjKSwgRkFMU0UpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKKyAgcmVzdWx0ID0gc3JjLT5pc19saXZlOworICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGdzdF9iYXNlX3NyY19zZXRfZm9ybWF0OgorICogQHNyYzogYmFzZSBzb3VyY2UgaW5zdGFuY2UKKyAqIEBmb3JtYXQ6IHRoZSBmb3JtYXQgdG8gdXNlCisgKgorICogU2V0cyB0aGUgZGVmYXVsdCBmb3JtYXQgb2YgdGhlIHNvdXJjZS4gVGhpcyB3aWxsIGJlIHRoZSBmb3JtYXQgdXNlZAorICogZm9yIHNlbmRpbmcgTkVXX1NFR01FTlQgZXZlbnRzIGFuZCBmb3IgcGVyZm9ybWluZyBzZWVrcy4KKyAqCisgKiBJZiBhIGZvcm1hdCBvZiBHU1RfRk9STUFUX0JZVEVTIGlzIHNldCwgdGhlIGVsZW1lbnQgd2lsbCBiZSBhYmxlIHRvCisgKiBvcGVyYXRlIGluIHB1bGwgbW9kZSBpZiB0aGUgI0dzdEJhc2VTcmNDbGFzcy5pc19zZWVrYWJsZSgpIHJldHVybnMgVFJVRS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG11c3Qgb25seSBiZSBjYWxsZWQgaW4gc3RhdGVzIDwgJUdTVF9TVEFURV9QQVVTRUQuCisgKgorICogU2luY2U6IDAuMTAuMQorICovCit2b2lkCitnc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdCAoR3N0QmFzZVNyYyAqIHNyYywgR3N0Rm9ybWF0IGZvcm1hdCkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JBU0VfU1JDIChzcmMpKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1NUQVRFIChzcmMpIDw9IEdTVF9TVEFURV9SRUFEWSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChzcmMpOworICBnc3Rfc2VnbWVudF9pbml0ICgmc3JjLT5zZWdtZW50LCBmb3JtYXQpOworICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKK30KKworLyoqCisgKiBnc3RfYmFzZV9zcmNfc2V0X2R5bmFtaWNfc2l6ZToKKyAqIEBzcmM6IGJhc2Ugc291cmNlIGluc3RhbmNlCisgKiBAZHluYW1pYzogbmV3IGR5bmFtaWMgc2l6ZSBtb2RlCisgKgorICogSWYgbm90IEBkeW5hbWljLCBzaXplIGlzIG9ubHkgdXBkYXRlZCB3aGVuIG5lZWRlZCwgc3VjaCBhcyB3aGVuIHRyeWluZyB0bworICogcmVhZCBwYXN0IGN1cnJlbnQgdHJhY2tlZCBzaXplLiAgT3RoZXJ3aXNlLCBzaXplIGlzIGNoZWNrZWQgZm9yIHVwb24gZWFjaAorICogcmVhZC4KKyAqCisgKiBTaW5jZTogMC4xMC4zNQorICovCit2b2lkCitnc3RfYmFzZV9zcmNfc2V0X2R5bmFtaWNfc2l6ZSAoR3N0QmFzZVNyYyAqIHNyYywgZ2Jvb2xlYW4gZHluYW1pYykKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JBU0VfU1JDIChzcmMpKTsKKworICBnX2F0b21pY19pbnRfc2V0ICgmc3JjLT5wcml2LT5keW5hbWljX3NpemUsIGR5bmFtaWMpOworfQorCisvKioKKyAqIGdzdF9iYXNlX3NyY19xdWVyeV9sYXRlbmN5OgorICogQHNyYzogdGhlIHNvdXJjZQorICogQGxpdmU6IChvdXQpIChhbGxvdy1ub25lKTogaWYgdGhlIHNvdXJjZSBpcyBsaXZlCisgKiBAbWluX2xhdGVuY3k6IChvdXQpIChhbGxvdy1ub25lKTogdGhlIG1pbiBsYXRlbmN5IG9mIHRoZSBzb3VyY2UKKyAqIEBtYXhfbGF0ZW5jeTogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgbWF4IGxhdGVuY3kgb2YgdGhlIHNvdXJjZQorICoKKyAqIFF1ZXJ5IHRoZSBzb3VyY2UgZm9yIHRoZSBsYXRlbmN5IHBhcmFtZXRlcnMuIEBsaXZlIHdpbGwgYmUgVFJVRSB3aGVuIEBzcmMgaXMKKyAqIGNvbmZpZ3VyZWQgYXMgYSBsaXZlIHNvdXJjZS4gQG1pbl9sYXRlbmN5IHdpbGwgYmUgc2V0IHRvIHRoZSBkaWZmZXJlbmNlCisgKiBiZXR3ZWVuIHRoZSBydW5uaW5nIHRpbWUgYW5kIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGZpcnN0IGJ1ZmZlci4KKyAqIEBtYXhfbGF0ZW5jeSBpcyBhbHdheXMgdGhlIHVuZGVmaW5lZCB2YWx1ZSBvZiAtMS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG1vc3RseSB1c2VkIGJ5IHN1YmNsYXNzZXMuCisgKgorICogUmV0dXJuczogVFJVRSBpZiB0aGUgcXVlcnkgc3VjY2VlZGVkLgorICoKKyAqIFNpbmNlOiAwLjEwLjEzCisgKi8KK2dib29sZWFuCitnc3RfYmFzZV9zcmNfcXVlcnlfbGF0ZW5jeSAoR3N0QmFzZVNyYyAqIHNyYywgZ2Jvb2xlYW4gKiBsaXZlLAorICAgIEdzdENsb2NrVGltZSAqIG1pbl9sYXRlbmN5LCBHc3RDbG9ja1RpbWUgKiBtYXhfbGF0ZW5jeSkKK3sKKyAgR3N0Q2xvY2tUaW1lIG1pbjsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JBU0VfU1JDIChzcmMpLCBGQUxTRSk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChzcmMpOworICBpZiAobGl2ZSkKKyAgICAqbGl2ZSA9IHNyYy0+aXNfbGl2ZTsKKworICAvKiBpZiB3ZSBoYXZlIGEgc3RhcnR1cCBsYXRlbmN5LCByZXBvcnQgdGhpcyBvbmUsIGVsc2UgcmVwb3J0IDAuIFN1YmNsYXNzZXMKKyAgICogYXJlIHN1cHBvc2VkIHRvIG92ZXJyaWRlIHRoZSBxdWVyeSBmdW5jdGlvbiBpZiB0aGV5IHdhbnQgc29tZXRoaW5nCisgICAqIGVsc2UuICovCisgIGlmIChzcmMtPnByaXYtPmxhdGVuY3kgIT0gLTEpCisgICAgbWluID0gc3JjLT5wcml2LT5sYXRlbmN5OworICBlbHNlCisgICAgbWluID0gMDsKKworICBpZiAobWluX2xhdGVuY3kpCisgICAgKm1pbl9sYXRlbmN5ID0gbWluOworICBpZiAobWF4X2xhdGVuY3kpCisgICAgKm1heF9sYXRlbmN5ID0gLTE7CisKKyAgR1NUX0xPR19PQkpFQ1QgKHNyYywgImxhdGVuY3k6IGxpdmUgJWQsIG1pbiAlIiBHU1RfVElNRV9GT1JNQVQKKyAgICAgICIsIG1heCAlIiBHU1RfVElNRV9GT1JNQVQsIHNyYy0+aXNfbGl2ZSwgR1NUX1RJTUVfQVJHUyAobWluKSwKKyAgICAgIEdTVF9USU1FX0FSR1MgKC0xKSk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmMpOworCisgIHJldHVybiBUUlVFOworfQorCisvKioKKyAqIGdzdF9iYXNlX3NyY19zZXRfYmxvY2tzaXplOgorICogQHNyYzogdGhlIHNvdXJjZQorICogQGJsb2Nrc2l6ZTogdGhlIG5ldyBibG9ja3NpemUgaW4gYnl0ZXMKKyAqCisgKiBTZXQgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IEBzcmMgd2lsbCBwdXNoIG91dCB3aXRoIGVhY2ggYnVmZmVyLiBXaGVuCisgKiBAYmxvY2tzaXplIGlzIHNldCB0byAtMSwgYSBkZWZhdWx0IGxlbmd0aCB3aWxsIGJlIHVzZWQuCisgKgorICogU2luY2U6IDAuMTAuMjIKKyAqLwordm9pZAorZ3N0X2Jhc2Vfc3JjX3NldF9ibG9ja3NpemUgKEdzdEJhc2VTcmMgKiBzcmMsIGd1aW50IGJsb2Nrc2l6ZSkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JBU0VfU1JDIChzcmMpKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHNyYyk7CisgIHNyYy0+YmxvY2tzaXplID0gYmxvY2tzaXplOworICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKK30KKworLyoqCisgKiBnc3RfYmFzZV9zcmNfZ2V0X2Jsb2Nrc2l6ZToKKyAqIEBzcmM6IHRoZSBzb3VyY2UKKyAqCisgKiBHZXQgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IEBzcmMgd2lsbCBwdXNoIG91dCB3aXRoIGVhY2ggYnVmZmVyLgorICoKKyAqIFJldHVybnM6IHRoZSBudW1iZXIgb2YgYnl0ZXMgcHVzaGVkIHdpdGggZWFjaCBidWZmZXIuCisgKgorICogU2luY2U6IDAuMTAuMjIKKyAqLworZ3VpbnQKK2dzdF9iYXNlX3NyY19nZXRfYmxvY2tzaXplIChHc3RCYXNlU3JjICogc3JjKQoreworICBnaW50IHJlczsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JBU0VfU1JDIChzcmMpLCAwKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHNyYyk7CisgIHJlcyA9IHNyYy0+YmxvY2tzaXplOworICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKKworICByZXR1cm4gcmVzOworfQorCisKKy8qKgorICogZ3N0X2Jhc2Vfc3JjX3NldF9kb190aW1lc3RhbXA6CisgKiBAc3JjOiB0aGUgc291cmNlCisgKiBAdGltZXN0YW1wOiBlbmFibGUgb3IgZGlzYWJsZSB0aW1lc3RhbXBpbmcKKyAqCisgKiBDb25maWd1cmUgQHNyYyB0byBhdXRvbWF0aWNhbGx5IHRpbWVzdGFtcCBvdXRnb2luZyBidWZmZXJzIGJhc2VkIG9uIHRoZQorICogY3VycmVudCBydW5uaW5nX3RpbWUgb2YgdGhlIHBpcGVsaW5lLiBUaGlzIHByb3BlcnR5IGlzIG1vc3RseSB1c2VmdWwgZm9yIGxpdmUKKyAqIHNvdXJjZXMuCisgKgorICogU2luY2U6IDAuMTAuMTUKKyAqLwordm9pZAorZ3N0X2Jhc2Vfc3JjX3NldF9kb190aW1lc3RhbXAgKEdzdEJhc2VTcmMgKiBzcmMsIGdib29sZWFuIHRpbWVzdGFtcCkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JBU0VfU1JDIChzcmMpKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHNyYyk7CisgIHNyYy0+cHJpdi0+ZG9fdGltZXN0YW1wID0gdGltZXN0YW1wOworICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKK30KKworLyoqCisgKiBnc3RfYmFzZV9zcmNfZ2V0X2RvX3RpbWVzdGFtcDoKKyAqIEBzcmM6IHRoZSBzb3VyY2UKKyAqCisgKiBRdWVyeSBpZiBAc3JjIHRpbWVzdGFtcHMgb3V0Z29pbmcgYnVmZmVycyBiYXNlZCBvbiB0aGUgY3VycmVudCBydW5uaW5nX3RpbWUuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGJhc2UgY2xhc3Mgd2lsbCBhdXRvbWF0aWNhbGx5IHRpbWVzdGFtcCBvdXRnb2luZyBidWZmZXJzLgorICoKKyAqIFNpbmNlOiAwLjEwLjE1CisgKi8KK2dib29sZWFuCitnc3RfYmFzZV9zcmNfZ2V0X2RvX3RpbWVzdGFtcCAoR3N0QmFzZVNyYyAqIHNyYykKK3sKKyAgZ2Jvb2xlYW4gcmVzOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQkFTRV9TUkMgKHNyYyksIEZBTFNFKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHNyYyk7CisgIHJlcyA9IHNyYy0+cHJpdi0+ZG9fdGltZXN0YW1wOworICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKKworICByZXR1cm4gcmVzOworfQorCisvKioKKyAqIGdzdF9iYXNlX3NyY19uZXdfc2VhbWxlc3Nfc2VnbWVudDoKKyAqIEBzcmM6IFRoZSBzb3VyY2UKKyAqIEBzdGFydDogVGhlIG5ldyBzdGFydCB2YWx1ZSBmb3IgdGhlIHNlZ21lbnQKKyAqIEBzdG9wOiBTdG9wIHZhbHVlIGZvciB0aGUgbmV3IHNlZ21lbnQKKyAqIEBwb3NpdGlvbjogVGhlIHBvc2l0aW9uIHZhbHVlIGZvciB0aGUgbmV3IHNlZ2VudAorICoKKyAqIFByZXBhcmUgYSBuZXcgc2VhbWxlc3Mgc2VnbWVudCBmb3IgZW1pc3Npb24gZG93bnN0cmVhbS4gVGhpcyBmdW5jdGlvbiBtdXN0CisgKiBvbmx5IGJlIGNhbGxlZCBieSBkZXJpdmVkIHN1Yi1jbGFzc2VzLCBhbmQgb25seSBmcm9tIHRoZSBjcmVhdGUoKSBmdW5jdGlvbiwKKyAqIGFzIHRoZSBzdHJlYW0tbG9jayBuZWVkcyB0byBiZSBoZWxkLgorICoKKyAqIFRoZSBmb3JtYXQgZm9yIHRoZSBuZXcgc2VnbWVudCB3aWxsIGJlIHRoZSBjdXJyZW50IGZvcm1hdCBvZiB0aGUgc291cmNlLCBhcworICogY29uZmlndXJlZCB3aXRoIGdzdF9iYXNlX3NyY19zZXRfZm9ybWF0KCkKKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBwcmVwYXJhdGlvbiBvZiB0aGUgc2VhbWxlc3Mgc2VnbWVudCBzdWNjZWVkZWQuCisgKgorICogU2luY2U6IDAuMTAuMjYKKyAqLworZ2Jvb2xlYW4KK2dzdF9iYXNlX3NyY19uZXdfc2VhbWxlc3Nfc2VnbWVudCAoR3N0QmFzZVNyYyAqIHNyYywgZ2ludDY0IHN0YXJ0LCBnaW50NjQgc3RvcCwKKyAgICBnaW50NjQgcG9zaXRpb24pCit7CisgIGdib29sZWFuIHJlcyA9IFRSVUU7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLAorICAgICAgIlN0YXJ0aW5nIG5ldyBzZWFtbGVzcyBzZWdtZW50LiBTdGFydCAlIiBHU1RfVElNRV9GT1JNQVQgIiBzdG9wICUiCisgICAgICBHU1RfVElNRV9GT1JNQVQgIiBwb3NpdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKHN0YXJ0KSwKKyAgICAgIEdTVF9USU1FX0FSR1MgKHN0b3ApLCBHU1RfVElNRV9BUkdTIChwb3NpdGlvbikpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKKworICBzcmMtPnNlZ21lbnQuYmFzZSA9IGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnNyYy0+c2VnbWVudCwKKyAgICAgIHNyYy0+c2VnbWVudC5mb3JtYXQsIHNyYy0+c2VnbWVudC5wb3NpdGlvbik7CisgIHNyYy0+c2VnbWVudC5zdGFydCA9IHN0YXJ0OworICBzcmMtPnNlZ21lbnQuc3RvcCA9IHN0b3A7CisgIHNyYy0+c2VnbWVudC5wb3NpdGlvbiA9IHBvc2l0aW9uOworCisgIC8qIGZvcndhcmQsIHdlIHNlbmQgZGF0YSBmcm9tIHBvc2l0aW9uIHRvIHN0b3AgKi8KKyAgc3JjLT5wcml2LT5zZWdtZW50X3BlbmRpbmcgPSBUUlVFOworICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKKworICBzcmMtPnByaXYtPmRpc2NvbnQgPSBUUlVFOworICBzcmMtPnJ1bm5pbmcgPSBUUlVFOworCisgIHJldHVybiByZXM7Cit9CisKKy8qKgorICogZ3N0X2Jhc2Vfc3JjX3NldF9jYXBzOgorICogQHNyYzogYSAjR3N0QmFzZVNyYworICogQGNhcHM6IGEgI0dzdENhcHMKKyAqCisgKiBTZXQgbmV3IGNhcHMgb24gdGhlIGJhc2VzcmMgc291cmNlIHBhZC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgY2FwcyBjb3VsZCBiZSBzZXQKKyAqLworZ2Jvb2xlYW4KK2dzdF9iYXNlX3NyY19zZXRfY2FwcyAoR3N0QmFzZVNyYyAqIHNyYywgR3N0Q2FwcyAqIGNhcHMpCit7CisgIEdzdEJhc2VTcmNDbGFzcyAqYmNsYXNzOworICBnYm9vbGVhbiByZXMgPSBUUlVFOworCisgIGJjbGFzcyA9IEdTVF9CQVNFX1NSQ19HRVRfQ0xBU1MgKHNyYyk7CisKKyAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmMtPnNyY3BhZCwgZ3N0X2V2ZW50X25ld19jYXBzIChjYXBzKSk7CisKKyAgaWYgKGJjbGFzcy0+c2V0X2NhcHMpCisgICAgcmVzID0gYmNsYXNzLT5zZXRfY2FwcyAoc3JjLCBjYXBzKTsKKworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgR3N0Q2FwcyAqCitnc3RfYmFzZV9zcmNfZ2V0Y2FwcyAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogZmlsdGVyKQoreworICBHc3RCYXNlU3JjQ2xhc3MgKmJjbGFzczsKKyAgR3N0QmFzZVNyYyAqYnNyYzsKKyAgR3N0Q2FwcyAqY2FwcyA9IE5VTEw7CisKKyAgYnNyYyA9IEdTVF9CQVNFX1NSQyAoR1NUX1BBRF9QQVJFTlQgKHBhZCkpOworICBiY2xhc3MgPSBHU1RfQkFTRV9TUkNfR0VUX0NMQVNTIChic3JjKTsKKyAgaWYgKGJjbGFzcy0+Z2V0X2NhcHMpCisgICAgY2FwcyA9IGJjbGFzcy0+Z2V0X2NhcHMgKGJzcmMsIGZpbHRlcik7CisKKyAgaWYgKGNhcHMgPT0gTlVMTCkgeworICAgIEdzdFBhZFRlbXBsYXRlICpwYWRfdGVtcGxhdGU7CisKKyAgICBwYWRfdGVtcGxhdGUgPQorICAgICAgICBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChHU1RfRUxFTUVOVF9DTEFTUyAoYmNsYXNzKSwgInNyYyIpOworICAgIGlmIChwYWRfdGVtcGxhdGUgIT0gTlVMTCkgeworICAgICAgY2FwcyA9IGdzdF9wYWRfdGVtcGxhdGVfZ2V0X2NhcHMgKHBhZF90ZW1wbGF0ZSk7CisKKyAgICAgIGlmIChmaWx0ZXIpIHsKKyAgICAgICAgR3N0Q2FwcyAqaW50ZXJzZWN0aW9uOworCisgICAgICAgIGludGVyc2VjdGlvbiA9CisgICAgICAgICAgICBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCBjYXBzLCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOworICAgICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7CisgICAgICAgIGNhcHMgPSBpbnRlcnNlY3Rpb247CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBjYXBzOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfZml4YXRlIChHc3RCYXNlU3JjICogc3JjLCBHc3RDYXBzICogY2FwcykKK3sKKyAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAidXNpbmcgZGVmYXVsdCBjYXBzIGZpeGF0ZSBmdW5jdGlvbiIpOworICBnc3RfY2Fwc19maXhhdGUgKGNhcHMpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2Jhc2Vfc3JjX2ZpeGF0ZSAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogY2FwcykKK3sKKyAgR3N0QmFzZVNyY0NsYXNzICpiY2xhc3M7CisgIEdzdEJhc2VTcmMgKmJzcmM7CisKKyAgYnNyYyA9IEdTVF9CQVNFX1NSQyAoZ3N0X3BhZF9nZXRfcGFyZW50IChwYWQpKTsKKyAgYmNsYXNzID0gR1NUX0JBU0VfU1JDX0dFVF9DTEFTUyAoYnNyYyk7CisKKyAgaWYgKGJjbGFzcy0+Zml4YXRlKQorICAgIGJjbGFzcy0+Zml4YXRlIChic3JjLCBjYXBzKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChic3JjKTsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfYmFzZV9zcmNfZGVmYXVsdF9xdWVyeSAoR3N0QmFzZVNyYyAqIHNyYywgR3N0UXVlcnkgKiBxdWVyeSkKK3sKKyAgZ2Jvb2xlYW4gcmVzOworCisgIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgeworICAgIGNhc2UgR1NUX1FVRVJZX1BPU0lUSU9OOgorICAgIHsKKyAgICAgIEdzdEZvcm1hdCBmb3JtYXQ7CisKKyAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbiAocXVlcnksICZmb3JtYXQsIE5VTEwpOworCisgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJwb3NpdGlvbiBxdWVyeSBpbiBmb3JtYXQgJXMiLAorICAgICAgICAgIGdzdF9mb3JtYXRfZ2V0X25hbWUgKGZvcm1hdCkpOworCisgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICBjYXNlIEdTVF9GT1JNQVRfUEVSQ0VOVDoKKyAgICAgICAgeworICAgICAgICAgIGdpbnQ2NCBwZXJjZW50OworICAgICAgICAgIGdpbnQ2NCBwb3NpdGlvbjsKKyAgICAgICAgICBnaW50NjQgZHVyYXRpb247CisKKyAgICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHNyYyk7CisgICAgICAgICAgcG9zaXRpb24gPSBzcmMtPnNlZ21lbnQucG9zaXRpb247CisgICAgICAgICAgZHVyYXRpb24gPSBzcmMtPnNlZ21lbnQuZHVyYXRpb247CisgICAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyYyk7CisKKyAgICAgICAgICBpZiAocG9zaXRpb24gIT0gLTEgJiYgZHVyYXRpb24gIT0gLTEpIHsKKyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IGR1cmF0aW9uKQorICAgICAgICAgICAgICBwZXJjZW50ID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlIChHU1RfRk9STUFUX1BFUkNFTlRfTUFYLCBwb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgIGR1cmF0aW9uKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcGVyY2VudCA9IEdTVF9GT1JNQVRfUEVSQ0VOVF9NQVg7CisgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBwZXJjZW50ID0gLTE7CisKKyAgICAgICAgICBnc3RfcXVlcnlfc2V0X3Bvc2l0aW9uIChxdWVyeSwgR1NUX0ZPUk1BVF9QRVJDRU5ULCBwZXJjZW50KTsKKyAgICAgICAgICByZXMgPSBUUlVFOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgIHsKKyAgICAgICAgICBnaW50NjQgcG9zaXRpb247CisgICAgICAgICAgR3N0Rm9ybWF0IHNlZ19mb3JtYXQ7CisKKyAgICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHNyYyk7CisgICAgICAgICAgcG9zaXRpb24gPQorICAgICAgICAgICAgICBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNyYy0+c2VnbWVudCwgc3JjLT5zZWdtZW50LmZvcm1hdCwKKyAgICAgICAgICAgICAgc3JjLT5zZWdtZW50LnBvc2l0aW9uKTsKKyAgICAgICAgICBzZWdfZm9ybWF0ID0gc3JjLT5zZWdtZW50LmZvcm1hdDsKKyAgICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKKworICAgICAgICAgIGlmIChwb3NpdGlvbiAhPSAtMSkgeworICAgICAgICAgICAgLyogY29udmVydCB0byByZXF1ZXN0ZWQgZm9ybWF0ICovCisgICAgICAgICAgICByZXMgPQorICAgICAgICAgICAgICAgIGdzdF9wYWRfcXVlcnlfY29udmVydCAoc3JjLT5zcmNwYWQsIHNlZ19mb3JtYXQsCisgICAgICAgICAgICAgICAgcG9zaXRpb24sIGZvcm1hdCwgJnBvc2l0aW9uKTsKKyAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlcyA9IFRSVUU7CisKKyAgICAgICAgICBnc3RfcXVlcnlfc2V0X3Bvc2l0aW9uIChxdWVyeSwgZm9ybWF0LCBwb3NpdGlvbik7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9RVUVSWV9EVVJBVElPTjoKKyAgICB7CisgICAgICBHc3RGb3JtYXQgZm9ybWF0OworCisgICAgICBnc3RfcXVlcnlfcGFyc2VfZHVyYXRpb24gKHF1ZXJ5LCAmZm9ybWF0LCBOVUxMKTsKKworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiZHVyYXRpb24gcXVlcnkgaW4gZm9ybWF0ICVzIiwKKyAgICAgICAgICBnc3RfZm9ybWF0X2dldF9uYW1lIChmb3JtYXQpKTsKKworICAgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICAgICAgY2FzZSBHU1RfRk9STUFUX1BFUkNFTlQ6CisgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbiAocXVlcnksIEdTVF9GT1JNQVRfUEVSQ0VOVCwKKyAgICAgICAgICAgICAgR1NUX0ZPUk1BVF9QRVJDRU5UX01BWCk7CisgICAgICAgICAgcmVzID0gVFJVRTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgeworICAgICAgICAgIGdpbnQ2NCBkdXJhdGlvbjsKKyAgICAgICAgICBHc3RGb3JtYXQgc2VnX2Zvcm1hdDsKKyAgICAgICAgICBndWludCBsZW5ndGggPSAwOworCisgICAgICAgICAgLyogbWF5IGhhdmUgdG8gcmVmcmVzaCBkdXJhdGlvbiAqLworICAgICAgICAgIGlmIChnX2F0b21pY19pbnRfZ2V0ICgmc3JjLT5wcml2LT5keW5hbWljX3NpemUpKQorICAgICAgICAgICAgZ3N0X2Jhc2Vfc3JjX3VwZGF0ZV9sZW5ndGggKHNyYywgMCwgJmxlbmd0aCk7CisKKyAgICAgICAgICAvKiB0aGlzIGlzIHRoZSBkdXJhdGlvbiBhcyBjb25maWd1cmVkIGJ5IHRoZSBzdWJjbGFzcy4gKi8KKyAgICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHNyYyk7CisgICAgICAgICAgZHVyYXRpb24gPSBzcmMtPnNlZ21lbnQuZHVyYXRpb247CisgICAgICAgICAgc2VnX2Zvcm1hdCA9IHNyYy0+c2VnbWVudC5mb3JtYXQ7CisgICAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyYyk7CisKKyAgICAgICAgICBHU1RfTE9HX09CSkVDVCAoc3JjLCAiZHVyYXRpb24gJSIgR19HSU5UNjRfRk9STUFUICIsIGZvcm1hdCAlcyIsCisgICAgICAgICAgICAgIGR1cmF0aW9uLCBnc3RfZm9ybWF0X2dldF9uYW1lIChzZWdfZm9ybWF0KSk7CisKKyAgICAgICAgICBpZiAoZHVyYXRpb24gIT0gLTEpIHsKKyAgICAgICAgICAgIC8qIGNvbnZlcnQgdG8gcmVxdWVzdGVkIGZvcm1hdCwgaWYgdGhpcyBmYWlscywgd2UgaGF2ZSBhIGR1cmF0aW9uCisgICAgICAgICAgICAgKiBidXQgd2UgY2Fubm90IGFuc3dlciB0aGUgcXVlcnksIHdlIG11c3QgcmV0dXJuIEZBTFNFLiAqLworICAgICAgICAgICAgcmVzID0KKyAgICAgICAgICAgICAgICBnc3RfcGFkX3F1ZXJ5X2NvbnZlcnQgKHNyYy0+c3JjcGFkLCBzZWdfZm9ybWF0LAorICAgICAgICAgICAgICAgIGR1cmF0aW9uLCBmb3JtYXQsICZkdXJhdGlvbik7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIFRoZSBzdWJjbGFzcyBkaWQgbm90IGNvbmZpZ3VyZSBhIGR1cmF0aW9uLCB3ZSBhc3N1bWUgdGhhdCB0aGUKKyAgICAgICAgICAgICAqIG1lZGlhIGhhcyBhbiB1bmtub3duIGR1cmF0aW9uIHRoZW4gYW5kIHdlIHJldHVybiBUUlVFIHRvIHJlcG9ydAorICAgICAgICAgICAgICogdGhpcy4gTm90ZSB0aGF0IHRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIHJldHVybmluZyBGQUxTRSwgd2hpY2gKKyAgICAgICAgICAgICAqIG1lYW5zIHRoYXQgd2UgY2Fubm90IHJlcG9ydCB0aGUgZHVyYXRpb24gYXQgYWxsLiAqLworICAgICAgICAgICAgcmVzID0gVFJVRTsKKyAgICAgICAgICB9CisgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbiAocXVlcnksIGZvcm1hdCwgZHVyYXRpb24pOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEdTVF9RVUVSWV9TRUVLSU5HOgorICAgIHsKKyAgICAgIEdzdEZvcm1hdCBmb3JtYXQsIHNlZ19mb3JtYXQ7CisgICAgICBnaW50NjQgZHVyYXRpb247CisKKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKKyAgICAgIGR1cmF0aW9uID0gc3JjLT5zZWdtZW50LmR1cmF0aW9uOworICAgICAgc2VnX2Zvcm1hdCA9IHNyYy0+c2VnbWVudC5mb3JtYXQ7CisgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKKworICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmcgKHF1ZXJ5LCAmZm9ybWF0LCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICAgIGlmIChmb3JtYXQgPT0gc2VnX2Zvcm1hdCkgeworICAgICAgICBnc3RfcXVlcnlfc2V0X3NlZWtpbmcgKHF1ZXJ5LCBzZWdfZm9ybWF0LAorICAgICAgICAgICAgZ3N0X2Jhc2Vfc3JjX3NlZWthYmxlIChzcmMpLCAwLCBkdXJhdGlvbik7CisgICAgICAgIHJlcyA9IFRSVUU7CisgICAgICB9IGVsc2UgeworICAgICAgICAvKiBGSVhNRSAwLjExOiByZXR1cm4gVFJVRSArIHNlZWthYmxlPUZBTFNFIGZvciBTRUVLSU5HIHF1ZXJ5IGhlcmUgKi8KKyAgICAgICAgLyogRG9uJ3QgcmVwbHkgdG8gdGhlIHF1ZXJ5IHRvIG1ha2UgdXAgZm9yIGRlbXV4ZXJzIHdoaWNoIGRvbid0CisgICAgICAgICAqIGhhbmRsZSB0aGUgU0VFS0lORyBxdWVyeSB5ZXQuIFBsYXllcnMgbGlrZSBUb3RlbSB3aWxsIGZhbGwgYmFjaworICAgICAgICAgKiB0byB0aGUgZHVyYXRpb24gd2hlbiB0aGUgU0VFS0lORyBxdWVyeSBpc24ndCBhbnN3ZXJlZC4gKi8KKyAgICAgICAgcmVzID0gRkFMU0U7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfUVVFUllfU0VHTUVOVDoKKyAgICB7CisgICAgICBnaW50NjQgc3RhcnQsIHN0b3A7CisKKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKKyAgICAgIC8qIG5vIGVuZCBzZWdtZW50IGNvbmZpZ3VyZWQsIGN1cnJlbnQgZHVyYXRpb24gdGhlbiAqLworICAgICAgaWYgKChzdG9wID0gc3JjLT5zZWdtZW50LnN0b3ApID09IC0xKQorICAgICAgICBzdG9wID0gc3JjLT5zZWdtZW50LmR1cmF0aW9uOworICAgICAgc3RhcnQgPSBzcmMtPnNlZ21lbnQuc3RhcnQ7CisKKyAgICAgIC8qIGFkanVzdCB0byBzdHJlYW0gdGltZSAqLworICAgICAgaWYgKHNyYy0+c2VnbWVudC50aW1lICE9IC0xKSB7CisgICAgICAgIHN0YXJ0IC09IHNyYy0+c2VnbWVudC50aW1lOworICAgICAgICBpZiAoc3RvcCAhPSAtMSkKKyAgICAgICAgICBzdG9wIC09IHNyYy0+c2VnbWVudC50aW1lOworICAgICAgfQorCisgICAgICBnc3RfcXVlcnlfc2V0X3NlZ21lbnQgKHF1ZXJ5LCBzcmMtPnNlZ21lbnQucmF0ZSwgc3JjLT5zZWdtZW50LmZvcm1hdCwKKyAgICAgICAgICBzdGFydCwgc3RvcCk7CisgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKKyAgICAgIHJlcyA9IFRSVUU7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEdTVF9RVUVSWV9GT1JNQVRTOgorICAgIHsKKyAgICAgIGdzdF9xdWVyeV9zZXRfZm9ybWF0cyAocXVlcnksIDMsIEdTVF9GT1JNQVRfREVGQVVMVCwKKyAgICAgICAgICBHU1RfRk9STUFUX0JZVEVTLCBHU1RfRk9STUFUX1BFUkNFTlQpOworICAgICAgcmVzID0gVFJVRTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9RVUVSWV9DT05WRVJUOgorICAgIHsKKyAgICAgIEdzdEZvcm1hdCBzcmNfZm10LCBkZXN0X2ZtdDsKKyAgICAgIGdpbnQ2NCBzcmNfdmFsLCBkZXN0X3ZhbDsKKworICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2NvbnZlcnQgKHF1ZXJ5LCAmc3JjX2ZtdCwgJnNyY192YWwsICZkZXN0X2ZtdCwgJmRlc3RfdmFsKTsKKworICAgICAgLyogd2UgY2FuIG9ubHkgY29udmVydCBiZXR3ZWVuIGVxdWFsIGZvcm1hdHMuLi4gKi8KKyAgICAgIGlmIChzcmNfZm10ID09IGRlc3RfZm10KSB7CisgICAgICAgIGRlc3RfdmFsID0gc3JjX3ZhbDsKKyAgICAgICAgcmVzID0gVFJVRTsKKyAgICAgIH0gZWxzZQorICAgICAgICByZXMgPSBGQUxTRTsKKworICAgICAgZ3N0X3F1ZXJ5X3NldF9jb252ZXJ0IChxdWVyeSwgc3JjX2ZtdCwgc3JjX3ZhbCwgZGVzdF9mbXQsIGRlc3RfdmFsKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9RVUVSWV9MQVRFTkNZOgorICAgIHsKKyAgICAgIEdzdENsb2NrVGltZSBtaW4sIG1heDsKKyAgICAgIGdib29sZWFuIGxpdmU7CisKKyAgICAgIC8qIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIGFuZCBpbXBsZW1lbnQgc29tZXRoaW5nIHVzZWZ1bCAqLworICAgICAgcmVzID0gZ3N0X2Jhc2Vfc3JjX3F1ZXJ5X2xhdGVuY3kgKHNyYywgJmxpdmUsICZtaW4sICZtYXgpOworCisgICAgICBHU1RfTE9HX09CSkVDVCAoc3JjLCAicmVwb3J0IGxhdGVuY3k6IGxpdmUgJWQsIG1pbiAlIiBHU1RfVElNRV9GT1JNQVQKKyAgICAgICAgICAiLCBtYXggJSIgR1NUX1RJTUVfRk9STUFULCBsaXZlLCBHU1RfVElNRV9BUkdTIChtaW4pLAorICAgICAgICAgIEdTVF9USU1FX0FSR1MgKG1heCkpOworCisgICAgICBnc3RfcXVlcnlfc2V0X2xhdGVuY3kgKHF1ZXJ5LCBsaXZlLCBtaW4sIG1heCk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfUVVFUllfSklUVEVSOgorICAgIGNhc2UgR1NUX1FVRVJZX1JBVEU6CisgICAgICByZXMgPSBGQUxTRTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1FVRVJZX0JVRkZFUklORzoKKyAgICB7CisgICAgICBHc3RGb3JtYXQgZm9ybWF0LCBzZWdfZm9ybWF0OworICAgICAgZ2ludDY0IHN0YXJ0LCBzdG9wLCBlc3RpbWF0ZWQ7CisKKyAgICAgIGdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcmFuZ2UgKHF1ZXJ5LCAmZm9ybWF0LCBOVUxMLCBOVUxMLCBOVUxMKTsKKworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiYnVmZmVyaW5nIHF1ZXJ5IGluIGZvcm1hdCAlcyIsCisgICAgICAgICAgZ3N0X2Zvcm1hdF9nZXRfbmFtZSAoZm9ybWF0KSk7CisKKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKKyAgICAgIGlmIChzcmMtPnJhbmRvbV9hY2Nlc3MpIHsKKyAgICAgICAgZXN0aW1hdGVkID0gMDsKKyAgICAgICAgc3RhcnQgPSAwOworICAgICAgICBpZiAoZm9ybWF0ID09IEdTVF9GT1JNQVRfUEVSQ0VOVCkKKyAgICAgICAgICBzdG9wID0gR1NUX0ZPUk1BVF9QRVJDRU5UX01BWDsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHN0b3AgPSBzcmMtPnNlZ21lbnQuZHVyYXRpb247CisgICAgICB9IGVsc2UgeworICAgICAgICBlc3RpbWF0ZWQgPSAtMTsKKyAgICAgICAgc3RhcnQgPSAtMTsKKyAgICAgICAgc3RvcCA9IC0xOworICAgICAgfQorICAgICAgc2VnX2Zvcm1hdCA9IHNyYy0+c2VnbWVudC5mb3JtYXQ7CisgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKKworICAgICAgLyogY29udmVydCB0byByZXF1aXJlZCBmb3JtYXQuIFdoZW4gdGhlIGNvbnZlcnNpb24gZmFpbHMsIHdlIGNhbid0IGFuc3dlcgorICAgICAgICogdGhlIHF1ZXJ5LiBXaGVuIHRoZSB2YWx1ZSBpcyB1bmtub3duLCB3ZSBjYW4gZG9uJ3QgcGVyZm9ybSBjb252ZXJzaW9uCisgICAgICAgKiBidXQgcmVwb3J0IFRSVUUuICovCisgICAgICBpZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfUEVSQ0VOVCAmJiBzdG9wICE9IC0xKSB7CisgICAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfY29udmVydCAoc3JjLT5zcmNwYWQsIHNlZ19mb3JtYXQsCisgICAgICAgICAgICBzdG9wLCBmb3JtYXQsICZzdG9wKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJlcyA9IFRSVUU7CisgICAgICB9CisgICAgICBpZiAocmVzICYmIGZvcm1hdCAhPSBHU1RfRk9STUFUX1BFUkNFTlQgJiYgc3RhcnQgIT0gLTEpCisgICAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfY29udmVydCAoc3JjLT5zcmNwYWQsIHNlZ19mb3JtYXQsCisgICAgICAgICAgICBzdGFydCwgZm9ybWF0LCAmc3RhcnQpOworCisgICAgICBnc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19yYW5nZSAocXVlcnksIGZvcm1hdCwgc3RhcnQsIHN0b3AsIGVzdGltYXRlZCk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfUVVFUllfU0NIRURVTElORzoKKyAgICB7CisgICAgICBnYm9vbGVhbiByYW5kb21fYWNjZXNzOworCisgICAgICByYW5kb21fYWNjZXNzID0gZ3N0X2Jhc2Vfc3JjX2lzX3JhbmRvbV9hY2Nlc3MgKHNyYyk7CisKKyAgICAgIC8qIHdlIGNhbiBvcGVyYXRlIGluIGdldHJhbmdlIG1vZGUgaWYgdGhlIG5hdGl2ZSBmb3JtYXQgaXMgYnl0ZXMKKyAgICAgICAqIGFuZCB3ZSBhcmUgc2Vla2FibGUsIHRoaXMgY29uZGl0aW9uIGlzIHNldCBpbiB0aGUgcmFuZG9tX2FjY2VzcworICAgICAgICogZmxhZyBhbmQgaXMgc2V0IGluIHRoZSBfc3RhcnQoKSBtZXRob2QuICovCisgICAgICBnc3RfcXVlcnlfc2V0X3NjaGVkdWxpbmcgKHF1ZXJ5LCByYW5kb21fYWNjZXNzLCBUUlVFLCBGQUxTRSwgMSwgLTEsIDEpOworCisgICAgICByZXMgPSBUUlVFOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICByZXMgPSBGQUxTRTsKKyAgICAgIGJyZWFrOworICB9CisgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInF1ZXJ5ICVzIHJldHVybnMgJWQiLCBHU1RfUVVFUllfVFlQRV9OQU1FIChxdWVyeSksCisgICAgICByZXMpOworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iYXNlX3NyY19xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RRdWVyeSAqIHF1ZXJ5KQoreworICBHc3RCYXNlU3JjICpzcmM7CisgIEdzdEJhc2VTcmNDbGFzcyAqYmNsYXNzOworICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKKworICBzcmMgPSBHU1RfQkFTRV9TUkMgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7CisgIGlmIChHX1VOTElLRUxZIChzcmMgPT0gTlVMTCkpCisgICAgcmV0dXJuIEZBTFNFOworCisgIGJjbGFzcyA9IEdTVF9CQVNFX1NSQ19HRVRfQ0xBU1MgKHNyYyk7CisKKyAgaWYgKGJjbGFzcy0+cXVlcnkpCisgICAgcmVzdWx0ID0gYmNsYXNzLT5xdWVyeSAoc3JjLCBxdWVyeSk7CisgIGVsc2UKKyAgICByZXN1bHQgPSBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKHBhZCwgcXVlcnkpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfYmFzZV9zcmNfZGVmYXVsdF9kb19zZWVrIChHc3RCYXNlU3JjICogc3JjLCBHc3RTZWdtZW50ICogc2VnbWVudCkKK3sKKyAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKKworICAvKiB1cGRhdGUgb3VyIG9mZnNldCBpZiB0aGUgc3RhcnQvc3RvcCBwb3NpdGlvbiB3YXMgdXBkYXRlZCAqLworICBpZiAoc2VnbWVudC0+Zm9ybWF0ID09IEdTVF9GT1JNQVRfQllURVMpIHsKKyAgICBzZWdtZW50LT50aW1lID0gc2VnbWVudC0+c3RhcnQ7CisgIH0gZWxzZSBpZiAoc2VnbWVudC0+c3RhcnQgPT0gMCkgeworICAgIC8qIHNlZWsgdG8gc3RhcnQsIHdlIGNhbiBpbXBsZW1lbnQgYSBkZWZhdWx0IGZvciB0aGlzLiAqLworICAgIHNlZ21lbnQtPnRpbWUgPSAwOworICB9IGVsc2UgeworICAgIHJlcyA9IEZBTFNFOworICAgIEdTVF9JTkZPX09CSkVDVCAoc3JjLCAiQ2FuJ3QgZG8gYSBkZWZhdWx0IHNlZWsiKTsKKyAgfQorCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2Jhc2Vfc3JjX2RvX3NlZWsgKEdzdEJhc2VTcmMgKiBzcmMsIEdzdFNlZ21lbnQgKiBzZWdtZW50KQoreworICBHc3RCYXNlU3JjQ2xhc3MgKmJjbGFzczsKKyAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisKKyAgYmNsYXNzID0gR1NUX0JBU0VfU1JDX0dFVF9DTEFTUyAoc3JjKTsKKworICBpZiAoYmNsYXNzLT5kb19zZWVrKQorICAgIHJlc3VsdCA9IGJjbGFzcy0+ZG9fc2VlayAoc3JjLCBzZWdtZW50KTsKKworICByZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIFNFRUtfVFlQRV9JU19SRUxBVElWRSh0KSAoKCh0KSAhPSBHU1RfU0VFS19UWVBFX05PTkUpICYmICgodCkgIT0gR1NUX1NFRUtfVFlQRV9TRVQpKQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iYXNlX3NyY19kZWZhdWx0X3ByZXBhcmVfc2Vla19zZWdtZW50IChHc3RCYXNlU3JjICogc3JjLCBHc3RFdmVudCAqIGV2ZW50LAorICAgIEdzdFNlZ21lbnQgKiBzZWdtZW50KQoreworICAvKiBCeSBkZWZhdWx0LCB3ZSB0cnkgb25lIG9mIDIgdGhpbmdzOgorICAgKiAgIC0gRm9yIGFic29sdXRlIHNlZWsgcG9zaXRpb25zLCBjb252ZXJ0IHRoZSByZXF1ZXN0ZWQgcG9zaXRpb24gdG8gb3VyCisgICAqICAgICBjb25maWd1cmVkIHByb2Nlc3NpbmcgZm9ybWF0IGFuZCBwbGFjZSBpdCBpbiB0aGUgb3V0cHV0IHNlZ21lbnQgXAorICAgKiAgIC0gRm9yIHJlbGF0aXZlIHNlZWsgcG9zaXRpb25zLCBjb252ZXJ0IG91ciBjdXJyZW50IChpbnB1dCkgdmFsdWVzIHRvIHRoZQorICAgKiAgICAgc2VlayBmb3JtYXQsIGFkanVzdCBieSB0aGUgcmVsYXRpdmUgc2VlayBvZmZzZXQgYW5kIHRoZW4gY29udmVydCBiYWNrIHRvCisgICAqICAgICB0aGUgcHJvY2Vzc2luZyBmb3JtYXQKKyAgICovCisgIEdzdFNlZWtUeXBlIGN1cl90eXBlLCBzdG9wX3R5cGU7CisgIGdpbnQ2NCBjdXIsIHN0b3A7CisgIEdzdFNlZWtGbGFncyBmbGFnczsKKyAgR3N0Rm9ybWF0IHNlZWtfZm9ybWF0LCBkZXN0X2Zvcm1hdDsKKyAgZ2RvdWJsZSByYXRlOworICBnYm9vbGVhbiB1cGRhdGU7CisgIGdib29sZWFuIHJlcyA9IFRSVUU7CisKKyAgZ3N0X2V2ZW50X3BhcnNlX3NlZWsgKGV2ZW50LCAmcmF0ZSwgJnNlZWtfZm9ybWF0LCAmZmxhZ3MsCisgICAgICAmY3VyX3R5cGUsICZjdXIsICZzdG9wX3R5cGUsICZzdG9wKTsKKyAgZGVzdF9mb3JtYXQgPSBzZWdtZW50LT5mb3JtYXQ7CisKKyAgaWYgKHNlZWtfZm9ybWF0ID09IGRlc3RfZm9ybWF0KSB7CisgICAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoc2VnbWVudCwgcmF0ZSwgc2Vla19mb3JtYXQsIGZsYWdzLAorICAgICAgICBjdXJfdHlwZSwgY3VyLCBzdG9wX3R5cGUsIHN0b3AsICZ1cGRhdGUpOworICAgIHJldHVybiBUUlVFOworICB9CisKKyAgaWYgKGN1cl90eXBlICE9IEdTVF9TRUVLX1RZUEVfTk9ORSkgeworICAgIC8qIEZJWE1FOiBIYW5kbGUgc2Vla19jdXIgJiBzZWVrX2VuZCBieSBjb252ZXJ0aW5nIHRoZSBpbnB1dCBzZWdtZW50IHZhbHMgKi8KKyAgICByZXMgPQorICAgICAgICBnc3RfcGFkX3F1ZXJ5X2NvbnZlcnQgKHNyYy0+c3JjcGFkLCBzZWVrX2Zvcm1hdCwgY3VyLCBkZXN0X2Zvcm1hdCwKKyAgICAgICAgJmN1cik7CisgICAgY3VyX3R5cGUgPSBHU1RfU0VFS19UWVBFX1NFVDsKKyAgfQorCisgIGlmIChyZXMgJiYgc3RvcF90eXBlICE9IEdTVF9TRUVLX1RZUEVfTk9ORSkgeworICAgIC8qIEZJWE1FOiBIYW5kbGUgc2Vla19jdXIgJiBzZWVrX2VuZCBieSBjb252ZXJ0aW5nIHRoZSBpbnB1dCBzZWdtZW50IHZhbHMgKi8KKyAgICByZXMgPQorICAgICAgICBnc3RfcGFkX3F1ZXJ5X2NvbnZlcnQgKHNyYy0+c3JjcGFkLCBzZWVrX2Zvcm1hdCwgc3RvcCwgZGVzdF9mb3JtYXQsCisgICAgICAgICZzdG9wKTsKKyAgICBzdG9wX3R5cGUgPSBHU1RfU0VFS19UWVBFX1NFVDsKKyAgfQorCisgIC8qIEFuZCBmaW5hbGx5LCBjb25maWd1cmUgb3VyIG91dHB1dCBzZWdtZW50IGluIHRoZSBkZXNpcmVkIGZvcm1hdCAqLworICBnc3Rfc2VnbWVudF9kb19zZWVrIChzZWdtZW50LCByYXRlLCBkZXN0X2Zvcm1hdCwgZmxhZ3MsIGN1cl90eXBlLCBjdXIsCisgICAgICBzdG9wX3R5cGUsIHN0b3AsICZ1cGRhdGUpOworCisgIGlmICghcmVzKQorICAgIGdvdG8gbm9fZm9ybWF0OworCisgIHJldHVybiByZXM7CisKK25vX2Zvcm1hdDoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInVuZGVmaW5lZCBmb3JtYXQgZ2l2ZW4sIHNlZWsgYWJvcnRlZC4iKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworc3RhdGljIGdib29sZWFuCitnc3RfYmFzZV9zcmNfcHJlcGFyZV9zZWVrX3NlZ21lbnQgKEdzdEJhc2VTcmMgKiBzcmMsIEdzdEV2ZW50ICogZXZlbnQsCisgICAgR3N0U2VnbWVudCAqIHNlZWtzZWdtZW50KQoreworICBHc3RCYXNlU3JjQ2xhc3MgKmJjbGFzczsKKyAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisKKyAgYmNsYXNzID0gR1NUX0JBU0VfU1JDX0dFVF9DTEFTUyAoc3JjKTsKKworICBpZiAoYmNsYXNzLT5wcmVwYXJlX3NlZWtfc2VnbWVudCkKKyAgICByZXN1bHQgPSBiY2xhc3MtPnByZXBhcmVfc2Vla19zZWdtZW50IChzcmMsIGV2ZW50LCBzZWVrc2VnbWVudCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIEdzdEZsb3dSZXR1cm4KK2dzdF9iYXNlX3NyY19kZWZhdWx0X2FsbG9jIChHc3RCYXNlU3JjICogc3JjLCBndWludDY0IG9mZnNldCwKKyAgICBndWludCBzaXplLCBHc3RCdWZmZXIgKiogYnVmZmVyKQoreworICBHc3RGbG93UmV0dXJuIHJldDsKKyAgR3N0QmFzZVNyY1ByaXZhdGUgKnByaXYgPSBzcmMtPnByaXY7CisKKyAgaWYgKHByaXYtPnBvb2wpIHsKKyAgICByZXQgPSBnc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXIgKHByaXYtPnBvb2wsIGJ1ZmZlciwgTlVMTCk7CisgIH0gZWxzZSB7CisgICAgKmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChwcml2LT5hbGxvY2F0b3IsIHNpemUsIHByaXYtPmFsaWdubWVudCk7CisgICAgaWYgKEdfVU5MSUtFTFkgKCpidWZmZXIgPT0gTlVMTCkpCisgICAgICBnb3RvIGFsbG9jX2ZhaWxlZDsKKworICAgIHJldCA9IEdTVF9GTE9XX09LOworICB9CisgIHJldHVybiByZXQ7CisKKyAgLyogRVJST1JTICovCithbGxvY19mYWlsZWQ6CisgIHsKKyAgICBHU1RfRVJST1JfT0JKRUNUIChzcmMsICJGYWlsZWQgdG8gYWxsb2NhdGUgJXUgYnl0ZXMiLCBzaXplKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7CisgIH0KK30KKworc3RhdGljIEdzdEZsb3dSZXR1cm4KK2dzdF9iYXNlX3NyY19kZWZhdWx0X2NyZWF0ZSAoR3N0QmFzZVNyYyAqIHNyYywgZ3VpbnQ2NCBvZmZzZXQsCisgICAgZ3VpbnQgc2l6ZSwgR3N0QnVmZmVyICoqIGJ1ZmZlcikKK3sKKyAgR3N0QmFzZVNyY0NsYXNzICpiY2xhc3M7CisgIEdzdEZsb3dSZXR1cm4gcmV0OworCisgIGJjbGFzcyA9IEdTVF9CQVNFX1NSQ19HRVRfQ0xBU1MgKHNyYyk7CisKKyAgaWYgKEdfVU5MSUtFTFkgKCFiY2xhc3MtPmFsbG9jKSkKKyAgICBnb3RvIG5vX2Z1bmN0aW9uOworICBpZiAoR19VTkxJS0VMWSAoIWJjbGFzcy0+ZmlsbCkpCisgICAgZ290byBub19mdW5jdGlvbjsKKworICByZXQgPSBiY2xhc3MtPmFsbG9jIChzcmMsIG9mZnNldCwgc2l6ZSwgYnVmZmVyKTsKKyAgaWYgKEdfVU5MSUtFTFkgKHJldCAhPSBHU1RfRkxPV19PSykpCisgICAgZ290byBhbGxvY19mYWlsZWQ7CisKKyAgaWYgKEdfTElLRUxZIChzaXplID4gMCkpIHsKKyAgICAvKiBvbmx5IGNhbGwgZmlsbCB3aGVuIHRoZXJlIGlzIGEgc2l6ZSAqLworICAgIHJldCA9IGJjbGFzcy0+ZmlsbCAoc3JjLCBvZmZzZXQsIHNpemUsICpidWZmZXIpOworICAgIGlmIChHX1VOTElLRUxZIChyZXQgIT0gR1NUX0ZMT1dfT0spKQorICAgICAgZ290byBub3Rfb2s7CisgIH0KKworICByZXR1cm4gR1NUX0ZMT1dfT0s7CisKKyAgLyogRVJST1JTICovCitub19mdW5jdGlvbjoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIm5vIGZpbGwgb3IgYWxsb2MgZnVuY3Rpb24iKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKKyAgfQorYWxsb2NfZmFpbGVkOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiRmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBvZiAldSBieXRlcyIsIHNpemUpOworICAgIHJldHVybiByZXQ7CisgIH0KK25vdF9vazoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImZpbGwgcmV0dXJuZWQgJWQgKCVzKSIsIHJldCwKKyAgICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOworICAgIGdzdF9idWZmZXJfdW5yZWYgKCpidWZmZXIpOworICAgIHJldHVybiByZXQ7CisgIH0KK30KKworLyogdGhpcyBjb2RlIGltcGxlbWVudHMgdGhlIHNlZWtpbmcuIEl0IGlzIGEgZ29vZCBleGFtcGxlCisgKiBoYW5kbGluZyBhbGwgY2FzZXMuCisgKgorICogQSBzZWVrIHVwZGF0ZXMgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIHNlZ21lbnQuc3RhcnQKKyAqIGFuZCBzZWdtZW50LnN0b3AgdmFsdWVzIGJhc2VkIG9uIHRoZSBTRUVLX1RZUEUuIElmIHRoZQorICogc2VnbWVudC5zdGFydCB2YWx1ZSBpcyB1cGRhdGVkLCBhIHNlZWsgdG8gdGhpcyBuZXcgcG9zaXRpb24KKyAqIHNob3VsZCBiZSBwZXJmb3JtZWQuCisgKgorICogVGhlIHNlZWsgY2FuIG9ubHkgYmUgZXhlY3V0ZWQgd2hlbiB3ZSBhcmUgbm90IGN1cnJlbnRseQorICogc3RyZWFtaW5nIGFueSBkYXRhLCB0byBtYWtlIHN1cmUgdGhhdCB0aGlzIGlzIHRoZSBjYXNlLCB3ZQorICogYWNxdWlyZSB0aGUgU1RSRUFNX0xPQ0sgd2hpY2ggaXMgdGFrZW4gd2hlbiB3ZSBhcmUgaW4gdGhlCisgKiBfbG9vcCgpIGZ1bmN0aW9uIG9yIHdoZW4gYSBnZXRyYW5nZSgpIGlzIGNhbGxlZC4gTm9ybWFsbHkKKyAqIHdlIHdpbGwgbm90IHJlY2VpdmUgYSBzZWVrIGlmIHdlIGFyZSBvcGVyYXRpbmcgaW4gcHVsbCBtb2RlCisgKiB0aG91Z2guIFdoZW4gd2Ugb3BlcmF0ZSBhcyBhIGxpdmUgc291cmNlIHdlIG1pZ2h0IGJsb2NrIG9uIHRoZSBsaXZlCisgKiBjb25kLCB3aGljaCBkb2VzIG5vdCByZWxlYXNlIHRoZSBTVFJFQU1fTE9DSy4gVGhlcmVmb3JlIHdlIHdpbGwgdHJ5CisgKiB0byBncmFiIHRoZSBMSVZFX0xPQ0sgaW5zdGVhZCBvZiB0aGUgU1RSRUFNX0xPQ0sgdG8gbWFrZSBzdXJlIGl0IGlzCisgKiBzYWZlIHRvIHBlcmZvcm0gdGhlIHNlZWsuCisgKgorICogV2hlbiB3ZSBhcmUgaW4gdGhlIGxvb3AoKSBmdW5jdGlvbiwgd2UgbWlnaHQgYmUgaW4gdGhlIG1pZGRsZQorICogb2YgcHVzaGluZyBhIGJ1ZmZlciwgd2hpY2ggbWlnaHQgYmxvY2sgaW4gYSBzaW5rLiBUbyBtYWtlIHN1cmUKKyAqIHRoYXQgdGhlIHB1c2ggZ2V0cyB1bmJsb2NrZWQgd2UgcHVzaCBvdXQgYSBGTFVTSF9TVEFSVCBldmVudC4KKyAqIE91ciBsb29wIGZ1bmN0aW9uIHdpbGwgZ2V0IGEgV1JPTkdfU1RBVEUgcmV0dXJuIHZhbHVlIGZyb20KKyAqIHRoZSBwdXNoIGFuZCB3aWxsIHBhdXNlLCBlZmZlY3RpdmVseSByZWxlYXNpbmcgdGhlIFNUUkVBTV9MT0NLLgorICoKKyAqIEZvciBhIG5vbi1mbHVzaGluZyBzZWVrLCB3ZSBwYXVzZSB0aGUgdGFzaywgd2hpY2ggbWlnaHQgZXZlbnR1YWxseQorICogcmVsZWFzZSB0aGUgU1RSRUFNX0xPQ0suIFdlIHNheSBldmVudHVhbGx5IGJlY2F1c2Ugd2hlbiB0aGUgc2luaworICogYmxvY2tzIG9uIHRoZSBzYW1wbGUgd2UgbWlnaHQgd2FpdCBhIHZlcnkgbG9uZyB0aW1lIHVudGlsIHRoZSBzaW5rCisgKiB1bmJsb2NrcyB0aGUgc2FtcGxlLiBJbiBhbnkgY2FzZSB3ZSBhY3F1aXJlIHRoZSBTVFJFQU1fTE9DSyBhbmQKKyAqIGNhbiBjb250aW51ZSB0aGUgc2Vlay4gQSBub24tZmx1c2hpbmcgc2VlayBpcyBub3JtYWxseSBkb25lIGluIGEKKyAqIHJ1bm5pbmcgcGlwZWxpbmUgdG8gcGVyZm9ybSBzZWFtbGVzcyBwbGF5YmFjaywgdGhpcyBtZWFucyB0aGF0IHRoZSBzaW5rIGlzCisgKiBQTEFZSU5HIGFuZCB3aWxsIHJldHVybiBmcm9tIGl0cyBjaGFpbiBmdW5jdGlvbi4KKyAqIEluIHRoZSBjYXNlIG9mIGEgbm9uLWZsdXNoaW5nIHNlZWsgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUKKyAqIGRhdGEgd2Ugb3V0cHV0IGFmdGVyIHRoZSBzZWVrIGlzIGNvbnRpbnVvdXMgd2l0aCB0aGUgcHJldmlvdXMgZGF0YSwKKyAqIHRoaXMgaXMgYmVjYXVzZSBhIG5vbi1mbHVzaGluZyBzZWVrIGRvZXMgbm90IHJlc2V0IHRoZSBydW5uaW5nLXRpbWUKKyAqIHRvIDAuIFdlIGRvIHRoaXMgYnkgY2xvc2luZyB0aGUgY3VycmVudGx5IHJ1bm5pbmcgc2VnbWVudCwgaWUuIHNlbmRpbmcKKyAqIGEgbmV3X3NlZ21lbnQgZXZlbnQgd2l0aCB0aGUgc3RvcCBwb3NpdGlvbiBzZXQgdG8gdGhlIGxhc3QgcHJvY2Vzc2VkCisgKiBwb3NpdGlvbi4KKyAqCisgKiBBZnRlciB1cGRhdGluZyB0aGUgc2VnbWVudC5zdGFydC9zdG9wIHZhbHVlcywgd2UgcHJlcGFyZSBmb3IKKyAqIHN0cmVhbWluZyBhZ2Fpbi4gV2UgcHVzaCBvdXQgYSBGTFVTSF9TVE9QIHRvIG1ha2UgdGhlIHBlZXIgcGFkCisgKiBhY2NlcHQgZGF0YSBhZ2FpbiBhbmQgd2Ugc3RhcnQgb3VyIHRhc2sgYWdhaW4uCisgKgorICogQSBzZWdtZW50IHNlZWsgcG9zdHMgYSBtZXNzYWdlIG9uIHRoZSBidXMgc2F5aW5nIHRoYXQgdGhlIHBsYXliYWNrCisgKiBvZiB0aGUgc2VnbWVudCBzdGFydGVkLiBXZSBzdG9yZSB0aGUgc2VnbWVudCBmbGFnIGludGVybmFsbHkgYmVjYXVzZQorICogd2hlbiB3ZSByZWFjaCB0aGUgc2VnbWVudC5zdG9wIHdlIGhhdmUgdG8gcG9zdCBhIHNlZ21lbnQuZG9uZQorICogaW5zdGVhZCBvZiBFT1Mgd2hlbiBkb2luZyBhIHNlZ21lbnQgc2Vlay4KKyAqLworLyogRklYTUUgKDAuMTEpLCB3ZSBoYXZlIHRoZSB1bmxvY2sgZ2Jvb2xlYW4gaGVyZSBiZWNhdXNlIG1vc3QgY3VycmVudAorICogaW1wbGVtZW50YXRpb25zIChmZHNyYywgLWJhc2UvZ3N0L3RjcC8sIC4uLikgdW5jb25kaXRpb25hbGx5IHVubG9jaywgZXZlbiB3aGVuCisgKiB0aGUgc3RyZWFtaW5nIHRocmVhZCBpc24ndCBydW5uaW5nLCByZXN1bHRpbmcgaW4gYm9ndXMgdW5sb2NrcyBsYXRlciB3aGVuIGl0CisgKiBzdGFydHMuIFRoaXMgaXMgZml4ZWQgYnkgYWRkaW5nIHVubG9ja19zdG9wLCBidXQgd2Ugc2hvdWxkIHN0aWxsIGF2b2lkIHVubG9ja2luZworICogdW5uZWNlc3NhcmlseSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIEVyZ28sIHRoZSB1bmxvY2sgdmFyaWFibGUgc3RheXMKKyAqIHVudGlsIDAuMTEKKyAqLworc3RhdGljIGdib29sZWFuCitnc3RfYmFzZV9zcmNfcGVyZm9ybV9zZWVrIChHc3RCYXNlU3JjICogc3JjLCBHc3RFdmVudCAqIGV2ZW50LCBnYm9vbGVhbiB1bmxvY2spCit7CisgIGdib29sZWFuIHJlcyA9IFRSVUUsIHRyZXM7CisgIGdkb3VibGUgcmF0ZTsKKyAgR3N0Rm9ybWF0IHNlZWtfZm9ybWF0LCBkZXN0X2Zvcm1hdDsKKyAgR3N0U2Vla0ZsYWdzIGZsYWdzOworICBHc3RTZWVrVHlwZSBjdXJfdHlwZSwgc3RvcF90eXBlOworICBnaW50NjQgY3VyLCBzdG9wOworICBnYm9vbGVhbiBmbHVzaCwgcGxheWluZzsKKyAgZ2Jvb2xlYW4gdXBkYXRlOworICBnYm9vbGVhbiByZWxhdGl2ZV9zZWVrID0gRkFMU0U7CisgIGdib29sZWFuIHNlZWtzZWdfY29uZmlndXJlZCA9IEZBTFNFOworICBHc3RTZWdtZW50IHNlZWtzZWdtZW50OworICBndWludDMyIHNlcW51bTsKKyAgR3N0RXZlbnQgKnRldmVudDsKKworICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJkb2luZyBzZWVrOiAlIiBHU1RfUFRSX0ZPUk1BVCwgZXZlbnQpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKKyAgZGVzdF9mb3JtYXQgPSBzcmMtPnNlZ21lbnQuZm9ybWF0OworICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKKworICBpZiAoZXZlbnQpIHsKKyAgICBnc3RfZXZlbnRfcGFyc2Vfc2VlayAoZXZlbnQsICZyYXRlLCAmc2Vla19mb3JtYXQsICZmbGFncywKKyAgICAgICAgJmN1cl90eXBlLCAmY3VyLCAmc3RvcF90eXBlLCAmc3RvcCk7CisKKyAgICByZWxhdGl2ZV9zZWVrID0gU0VFS19UWVBFX0lTX1JFTEFUSVZFIChjdXJfdHlwZSkgfHwKKyAgICAgICAgU0VFS19UWVBFX0lTX1JFTEFUSVZFIChzdG9wX3R5cGUpOworCisgICAgaWYgKGRlc3RfZm9ybWF0ICE9IHNlZWtfZm9ybWF0ICYmICFyZWxhdGl2ZV9zZWVrKSB7CisgICAgICAvKiBJZiB3ZSBoYXZlIGFuIEFCU09MVVRFIHBvc2l0aW9uIChTRUVLX1NFVCBvbmx5KSwgd2UgY2FuIGNvbnZlcnQgaXQKKyAgICAgICAqIGhlcmUgYmVmb3JlIHRha2luZyB0aGUgc3RyZWFtIGxvY2ssIG90aGVyd2lzZSB3ZSBtdXN0IGNvbnZlcnQgaXQgbGF0ZXIsCisgICAgICAgKiBvbmNlIHdlIGhhdmUgdGhlIHN0cmVhbSBsb2NrIGFuZCBjYW4gcmVhZCB0aGUgbGFzdCBjb25maWd1cmVzIHNlZ21lbnQKKyAgICAgICAqIHN0YXJ0IGFuZCBzdG9wIHBvc2l0aW9ucyAqLworICAgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZWtzZWdtZW50LCBkZXN0X2Zvcm1hdCk7CisKKyAgICAgIGlmICghZ3N0X2Jhc2Vfc3JjX3ByZXBhcmVfc2Vla19zZWdtZW50IChzcmMsIGV2ZW50LCAmc2Vla3NlZ21lbnQpKQorICAgICAgICBnb3RvIHByZXBhcmVfZmFpbGVkOworCisgICAgICBzZWVrc2VnX2NvbmZpZ3VyZWQgPSBUUlVFOworICAgIH0KKworICAgIGZsdXNoID0gZmxhZ3MgJiBHU1RfU0VFS19GTEFHX0ZMVVNIOworICAgIHNlcW51bSA9IGdzdF9ldmVudF9nZXRfc2VxbnVtIChldmVudCk7CisgIH0gZWxzZSB7CisgICAgZmx1c2ggPSBGQUxTRTsKKyAgICAvKiBnZXQgbmV4dCBzZXFudW0gKi8KKyAgICBzZXFudW0gPSBnc3RfdXRpbF9zZXFudW1fbmV4dCAoKTsKKyAgfQorCisgIC8qIHNlbmQgZmx1c2ggc3RhcnQgKi8KKyAgaWYgKGZsdXNoKSB7CisgICAgdGV2ZW50ID0gZ3N0X2V2ZW50X25ld19mbHVzaF9zdGFydCAoKTsKKyAgICBnc3RfZXZlbnRfc2V0X3NlcW51bSAodGV2ZW50LCBzZXFudW0pOworICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjLT5zcmNwYWQsIHRldmVudCk7CisgIH0gZWxzZQorICAgIGdzdF9wYWRfcGF1c2VfdGFzayAoc3JjLT5zcmNwYWQpOworCisgIC8qIHVuYmxvY2sgc3RyZWFtaW5nIHRocmVhZC4gKi8KKyAgZ3N0X2Jhc2Vfc3JjX3NldF9mbHVzaGluZyAoc3JjLCBUUlVFLCBGQUxTRSwgdW5sb2NrLCAmcGxheWluZyk7CisKKyAgLyogZ3JhYiBzdHJlYW1pbmcgbG9jaywgdGhpcyBzaG91bGQgZXZlbnR1YWxseSBiZSBwb3NzaWJsZSwgZWl0aGVyCisgICAqIGJlY2F1c2UgdGhlIHRhc2sgaXMgcGF1c2VkLCBvdXIgc3RyZWFtaW5nIHRocmVhZCBzdG9wcGVkCisgICAqIG9yIGJlY2F1c2Ugb3VyIHBlZXIgaXMgZmx1c2hpbmcuICovCisgIEdTVF9QQURfU1RSRUFNX0xPQ0sgKHNyYy0+c3JjcGFkKTsKKyAgaWYgKEdfVU5MSUtFTFkgKHNyYy0+cHJpdi0+c2VxbnVtID09IHNlcW51bSkpIHsKKyAgICAvKiB3ZSBoYXZlIHNlZW4gdGhpcyBldmVudCBiZWZvcmUsIGlzc3VlIGEgd2FybmluZyBmb3Igbm93ICovCisgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzcmMsICJkdXBsaWNhdGUgZXZlbnQgZm91bmQgJSIgR19HVUlOVDMyX0ZPUk1BVCwKKyAgICAgICAgc2VxbnVtKTsKKyAgfSBlbHNlIHsKKyAgICBzcmMtPnByaXYtPnNlcW51bSA9IHNlcW51bTsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJzZWVrIHdpdGggc2VxbnVtICUiIEdfR1VJTlQzMl9GT1JNQVQsIHNlcW51bSk7CisgIH0KKworICBnc3RfYmFzZV9zcmNfc2V0X2ZsdXNoaW5nIChzcmMsIEZBTFNFLCBwbGF5aW5nLCB1bmxvY2ssIE5VTEwpOworCisgIC8qIElmIHdlIGNvbmZpZ3VyZWQgdGhlIHNlZWtzZWdtZW50IGFib3ZlLCBkb24ndCBvdmVyd3JpdGUgaXQgbm93LiBPdGhlcndpc2UKKyAgICogY29weSB0aGUgY3VycmVudCBzZWdtZW50IGluZm8gaW50byB0aGUgdGVtcCBzZWdtZW50IHRoYXQgd2UgY2FuIGFjdHVhbGx5CisgICAqIGF0dGVtcHQgdGhlIHNlZWsgd2l0aC4gV2Ugb25seSB1cGRhdGUgdGhlIHJlYWwgc2VnbWVudCBpZiB0aGUgc2VlayBzdWNjZWVkcy4gKi8KKyAgaWYgKCFzZWVrc2VnX2NvbmZpZ3VyZWQpIHsKKyAgICBtZW1jcHkgKCZzZWVrc2VnbWVudCwgJnNyYy0+c2VnbWVudCwgc2l6ZW9mIChHc3RTZWdtZW50KSk7CisKKyAgICAvKiBub3cgY29uZmlndXJlIHRoZSBmaW5hbCBzZWVrIHNlZ21lbnQgKi8KKyAgICBpZiAoZXZlbnQpIHsKKyAgICAgIGlmIChzZWVrc2VnbWVudC5mb3JtYXQgIT0gc2Vla19mb3JtYXQpIHsKKyAgICAgICAgLyogT0ssIGhlcmUncyB3aGVyZSB3ZSBnaXZlIHRoZSBzdWJjbGFzcyBhIGNoYW5jZSB0byBjb252ZXJ0IHRoZSByZWxhdGl2ZQorICAgICAgICAgKiBzZWVrIGludG8gYW4gYWJzb2x1dGUgb25lIGluIHRoZSBwcm9jZXNzaW5nIGZvcm1hdC4gV2Ugc2V0IHVwIGFueQorICAgICAgICAgKiBhYnNvbHV0ZSBzZWVrIGFib3ZlLCBiZWZvcmUgdGFraW5nIHRoZSBzdHJlYW0gbG9jay4gKi8KKyAgICAgICAgaWYgKCFnc3RfYmFzZV9zcmNfcHJlcGFyZV9zZWVrX3NlZ21lbnQgKHNyYywgZXZlbnQsICZzZWVrc2VnbWVudCkpIHsKKyAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJQcmVwYXJpbmcgdGhlIHNlZWsgZmFpbGVkIGFmdGVyIGZsdXNoaW5nLiAiCisgICAgICAgICAgICAgICJBYm9ydGluZyBzZWVrIik7CisgICAgICAgICAgcmVzID0gRkFMU0U7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8qIFRoZSBzZWVrIGZvcm1hdCBtYXRjaGVzIG91ciBwcm9jZXNzaW5nIGZvcm1hdCwgbm8gbmVlZCB0byBhc2sgdGhlCisgICAgICAgICAqIHRoZSBzdWJjbGFzcyB0byBjb25maWd1cmUgdGhlIHNlZ21lbnQuICovCisgICAgICAgIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWVrc2VnbWVudCwgcmF0ZSwgc2Vla19mb3JtYXQsIGZsYWdzLAorICAgICAgICAgICAgY3VyX3R5cGUsIGN1ciwgc3RvcF90eXBlLCBzdG9wLCAmdXBkYXRlKTsKKyAgICAgIH0KKyAgICB9CisgICAgLyogRWxzZSwgbm8gc2VlayBldmVudCBwYXNzZWQsIHNvIHdlJ3JlIGp1c3QgKHJlKXN0YXJ0aW5nIHRoZQorICAgICAgIGN1cnJlbnQgc2VnbWVudC4gKi8KKyAgfQorCisgIGlmIChyZXMpIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJzZWdtZW50IGNvbmZpZ3VyZWQgZnJvbSAlIiBHX0dJTlQ2NF9GT1JNQVQKKyAgICAgICAgIiB0byAlIiBHX0dJTlQ2NF9GT1JNQVQgIiwgcG9zaXRpb24gJSIgR19HSU5UNjRfRk9STUFULAorICAgICAgICBzZWVrc2VnbWVudC5zdGFydCwgc2Vla3NlZ21lbnQuc3RvcCwgc2Vla3NlZ21lbnQucG9zaXRpb24pOworCisgICAgLyogZG8gdGhlIHNlZWssIHNlZ21lbnQucG9zaXRpb24gY29udGFpbnMgdGhlIG5ldyBwb3NpdGlvbi4gKi8KKyAgICByZXMgPSBnc3RfYmFzZV9zcmNfZG9fc2VlayAoc3JjLCAmc2Vla3NlZ21lbnQpOworICB9CisKKyAgLyogYW5kIHByZXBhcmUgdG8gY29udGludWUgc3RyZWFtaW5nICovCisgIGlmIChmbHVzaCkgeworICAgIHRldmVudCA9IGdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoVFJVRSk7CisgICAgZ3N0X2V2ZW50X3NldF9zZXFudW0gKHRldmVudCwgc2VxbnVtKTsKKyAgICAvKiBzZW5kIGZsdXNoIHN0b3AsIHBlZXIgd2lsbCBhY2NlcHQgZGF0YSBhbmQgZXZlbnRzIGFnYWluLiBXZQorICAgICAqIGFyZSBub3QgeWV0IHByb3ZpZGluZyBkYXRhIGFzIHdlIHN0aWxsIGhhdmUgdGhlIFNUUkVBTV9MT0NLLiAqLworICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjLT5zcmNwYWQsIHRldmVudCk7CisgIH0KKworICAvKiBUaGUgc3ViY2xhc3MgbXVzdCBoYXZlIGNvbnZlcnRlZCB0aGUgc2VnbWVudCB0byB0aGUgcHJvY2Vzc2luZyBmb3JtYXQKKyAgICogYnkgbm93ICovCisgIGlmIChyZXMgJiYgc2Vla3NlZ21lbnQuZm9ybWF0ICE9IGRlc3RfZm9ybWF0KSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiU3ViY2xhc3MgZmFpbGVkIHRvIHByZXBhcmUgYSBzZWVrIHNlZ21lbnQgIgorICAgICAgICAiaW4gdGhlIGNvcnJlY3QgZm9ybWF0LiBBYm9ydGluZyBzZWVrLiIpOworICAgIHJlcyA9IEZBTFNFOworICB9CisKKyAgLyogaWYgdGhlIHNlZWsgd2FzIHN1Y2Nlc3NmdWwsIHdlIHVwZGF0ZSBvdXIgcmVhbCBzZWdtZW50IGFuZCBwdXNoCisgICAqIG91dCB0aGUgbmV3IHNlZ21lbnQuICovCisgIGlmIChyZXMpIHsKKyAgICBHU1RfT0JKRUNUX0xPQ0sgKHNyYyk7CisgICAgbWVtY3B5ICgmc3JjLT5zZWdtZW50LCAmc2Vla3NlZ21lbnQsIHNpemVvZiAoR3N0U2VnbWVudCkpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmMpOworCisgICAgaWYgKHNlZWtzZWdtZW50LmZsYWdzICYgR1NUX1NFRUtfRkxBR19TRUdNRU5UKSB7CisgICAgICBHc3RNZXNzYWdlICptZXNzYWdlOworCisgICAgICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfc3RhcnQgKEdTVF9PQkpFQ1QgKHNyYyksCisgICAgICAgICAgc2Vla3NlZ21lbnQuZm9ybWF0LCBzZWVrc2VnbWVudC5wb3NpdGlvbik7CisgICAgICBnc3RfbWVzc2FnZV9zZXRfc2VxbnVtIChtZXNzYWdlLCBzZXFudW0pOworCisgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UIChzcmMpLCBtZXNzYWdlKTsKKyAgICB9CisKKyAgICAvKiBmb3IgZGVyaXZpbmcgYSBzdG9wIHBvc2l0aW9uIGZvciB0aGUgcGxheWJhY2sgc2VnbWVudCBmcm9tIHRoZSBzZWVrCisgICAgICogc2VnbWVudCwgd2UgbXVzdCB0YWtlIHRoZSBkdXJhdGlvbiB3aGVuIHRoZSBzdG9wIGlzIG5vdCBzZXQgKi8KKyAgICBpZiAoKHN0b3AgPSBzZWVrc2VnbWVudC5zdG9wKSA9PSAtMSkKKyAgICAgIHN0b3AgPSBzZWVrc2VnbWVudC5kdXJhdGlvbjsKKworICAgIHNyYy0+cHJpdi0+c2VnbWVudF9wZW5kaW5nID0gVFJVRTsKKyAgfQorCisgIHNyYy0+cHJpdi0+ZGlzY29udCA9IFRSVUU7CisgIHNyYy0+cnVubmluZyA9IFRSVUU7CisgIC8qIGFuZCByZXN0YXJ0IHRoZSB0YXNrIGluIGNhc2UgaXQgZ290IHBhdXNlZCBleHBsaWNpdGx5IG9yIGJ5CisgICAqIHRoZSBGTFVTSF9TVEFSVCBldmVudCB3ZSBwdXNoZWQgb3V0LiAqLworICB0cmVzID0gZ3N0X3BhZF9zdGFydF90YXNrIChzcmMtPnNyY3BhZCwgKEdzdFRhc2tGdW5jdGlvbikgZ3N0X2Jhc2Vfc3JjX2xvb3AsCisgICAgICBzcmMtPnNyY3BhZCk7CisgIGlmIChyZXMgJiYgIXRyZXMpCisgICAgcmVzID0gRkFMU0U7CisKKyAgLyogYW5kIHJlbGVhc2UgdGhlIGxvY2sgYWdhaW4gc28gd2UgY2FuIGNvbnRpbnVlIHN0cmVhbWluZyAqLworICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKHNyYy0+c3JjcGFkKTsKKworICByZXR1cm4gcmVzOworCisgIC8qIEVSUk9SICovCitwcmVwYXJlX2ZhaWxlZDoKKyAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiUHJlcGFyaW5nIHRoZSBzZWVrIGZhaWxlZCBiZWZvcmUgZmx1c2hpbmcuICIKKyAgICAgICJBYm9ydGluZyBzZWVrIik7CisgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGNvbnN0IEdzdFF1ZXJ5VHlwZSAqCitnc3RfYmFzZV9zcmNfZ2V0X3F1ZXJ5X3R5cGVzIChHc3RFbGVtZW50ICogZWxlbWVudCkKK3sKKyAgc3RhdGljIGNvbnN0IEdzdFF1ZXJ5VHlwZSBxdWVyeV90eXBlc1tdID0geworICAgIEdTVF9RVUVSWV9EVVJBVElPTiwKKyAgICBHU1RfUVVFUllfUE9TSVRJT04sCisgICAgR1NUX1FVRVJZX1NFRUtJTkcsCisgICAgR1NUX1FVRVJZX1NFR01FTlQsCisgICAgR1NUX1FVRVJZX0ZPUk1BVFMsCisgICAgR1NUX1FVRVJZX0xBVEVOQ1ksCisgICAgR1NUX1FVRVJZX0pJVFRFUiwKKyAgICBHU1RfUVVFUllfUkFURSwKKyAgICBHU1RfUVVFUllfQ09OVkVSVCwKKyAgICAwCisgIH07CisKKyAgcmV0dXJuIHF1ZXJ5X3R5cGVzOworfQorCisvKiBhbGwgZXZlbnRzIHNlbmQgdG8gdGhpcyBlbGVtZW50IGRpcmVjdGx5LiBUaGlzIGlzIG1haW5seSBkb25lIGZyb20gdGhlCisgKiBhcHBsaWNhdGlvbi4KKyAqLworc3RhdGljIGdib29sZWFuCitnc3RfYmFzZV9zcmNfc2VuZF9ldmVudCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEV2ZW50ICogZXZlbnQpCit7CisgIEdzdEJhc2VTcmMgKnNyYzsKKyAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisKKyAgc3JjID0gR1NUX0JBU0VfU1JDIChlbGVtZW50KTsKKworICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJoYW5kbGluZyBldmVudCAlcCAlIiBHU1RfUFRSX0ZPUk1BVCwgZXZlbnQsIGV2ZW50KTsKKworICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKKyAgICAgIC8qIGJpZGlyZWN0aW9uYWwgZXZlbnRzICovCisgICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RBUlQ6CisgICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKKyAgICAgIC8qIHNlbmRpbmcgcmFuZG9tIGZsdXNoZXMgZG93bnN0cmVhbSBjYW4gYnJlYWsgc3R1ZmYsCisgICAgICAgKiBlc3BlY2lhbGx5IHN5bmMgc2luY2UgYWxsIHNlZ21lbnQgaW5mbyB3aWxsIGdldCBmbHVzaGVkICovCisgICAgICBicmVhazsKKworICAgICAgLyogZG93bnN0cmVhbSBzZXJpYWxpemVkIGV2ZW50cyAqLworICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKKyAgICB7CisgICAgICBHc3RCYXNlU3JjQ2xhc3MgKmJjbGFzczsKKworICAgICAgYmNsYXNzID0gR1NUX0JBU0VfU1JDX0dFVF9DTEFTUyAoc3JjKTsKKworICAgICAgLyogcXVldWUgRU9TIGFuZCBtYWtlIHN1cmUgdGhlIHRhc2sgb3IgcHVsbCBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgRU9TCisgICAgICAgKiBhY3Rpb25zLgorICAgICAgICoKKyAgICAgICAqIFdlIGhhdmUgdHdvIHBvc3NpYmlsaXRpZXM6CisgICAgICAgKgorICAgICAgICogIC0gQmVmb3JlIHdlIGFyZSB0byBlbnRlciB0aGUgX2NyZWF0ZSBmdW5jdGlvbiwgd2UgY2hlY2sgdGhlIHBlbmRpbmdfZW9zCisgICAgICAgKiAgICBmaXJzdCBhbmQgZG8gRU9TIGluc3RlYWQgb2YgZW50ZXJpbmcgaXQuCisgICAgICAgKiAgLSBJZiB3ZSBhcmUgaW4gdGhlIF9jcmVhdGUgZnVuY3Rpb24gb3Igd2UgZGlkIG5vdCBtYW5hZ2UgdG8gc2V0IHRoZQorICAgICAgICogICAgZmxhZyBmYXN0IGVub3VnaCBhbmQgd2UgYXJlIGFib3V0IHRvIGVudGVyIHRoZSBfY3JlYXRlIGZ1bmN0aW9uLAorICAgICAgICogICAgd2UgdW5sb2NrIGl0IHNvIHRoYXQgd2UgZXhpdCB3aXRoIFdST05HX1NUQVRFIGltbWVkaWF0ZWx5LiBXZSB0aGVuCisgICAgICAgKiAgICBjaGVjayB0aGUgRU9TIGZsYWcgYW5kIGRvIHRoZSBFT1MgbG9naWMuCisgICAgICAgKi8KKyAgICAgIGdfYXRvbWljX2ludF9zZXQgKCZzcmMtPnByaXYtPnBlbmRpbmdfZW9zLCBUUlVFKTsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIkVPUyBtYXJrZWQsIGNhbGxpbmcgdW5sb2NrIik7CisKKworICAgICAgLyogdW5sb2NrIHRoZSBfY3JlYXRlIGZ1bmN0aW9uIHNvIHRoYXQgd2UgY2FuIGNoZWNrIHRoZSBwZW5kaW5nX2VvcyBmbGFnCisgICAgICAgKiBhbmQgd2UgY2FuIGRvIEVPUy4gVGhpcyB3aWxsIGV2ZW50dWFsbHkgcmVsZWFzZSB0aGUgTElWRV9MT0NLIGFnYWluIHNvCisgICAgICAgKiB0aGF0IHdlIGNhbiBncmFiIGl0IGFuZCBzdG9wIHRoZSB1bmxvY2sgYWdhaW4uIFdlIGRvbid0IHRha2UgdGhlIHN0cmVhbQorICAgICAgICogbG9jayBzbyB0aGF0IHRoaXMgb3BlcmF0aW9uIGlzIGd1YXJhbnRlZWQgdG8gbmV2ZXIgYmxvY2suICovCisgICAgICBnc3RfYmFzZV9zcmNfYWN0aXZhdGVfcG9vbCAoc3JjLCBGQUxTRSk7CisgICAgICBpZiAoYmNsYXNzLT51bmxvY2spCisgICAgICAgIGJjbGFzcy0+dW5sb2NrIChzcmMpOworCisgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJ1bmxvY2sgY2FsbGVkLCB3YWl0aW5nIGZvciBMSVZFX0xPQ0siKTsKKworICAgICAgR1NUX0xJVkVfTE9DSyAoc3JjKTsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIkxJVkVfTE9DSyBhY3F1aXJlZCwgY2FsbGluZyB1bmxvY2tfc3RvcCIpOworICAgICAgLyogbm93IHN0b3AgdGhlIHVubG9jayBvZiB0aGUgc3RyZWFtaW5nIHRocmVhZCBhZ2Fpbi4gR3JhYmJpbmcgdGhlIGxpdmUKKyAgICAgICAqIGxvY2sgaXMgZW5vdWdoIGJlY2F1c2UgdGhhdCBwcm90ZWN0cyB0aGUgY3JlYXRlIGZ1bmN0aW9uLiAqLworICAgICAgaWYgKGJjbGFzcy0+dW5sb2NrX3N0b3ApCisgICAgICAgIGJjbGFzcy0+dW5sb2NrX3N0b3AgKHNyYyk7CisgICAgICBnc3RfYmFzZV9zcmNfYWN0aXZhdGVfcG9vbCAoc3JjLCBUUlVFKTsKKyAgICAgIEdTVF9MSVZFX1VOTE9DSyAoc3JjKTsKKworICAgICAgcmVzdWx0ID0gVFJVRTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9FVkVOVF9TRUdNRU5UOgorICAgICAgLyogc2VuZGluZyByYW5kb20gU0VHTUVOVCBkb3duc3RyZWFtIGNhbiBicmVhayBzeW5jLiAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfRVZFTlRfVEFHOgorICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNOgorICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RPTV9CT1RIOgorICAgICAgLyogSW5zZXJ0IFRBRywgQ1VTVE9NX0RPV05TVFJFQU0sIENVU1RPTV9CT1RIIGluIHRoZSBkYXRhZmxvdyAqLworICAgICAgR1NUX09CSkVDVF9MT0NLIChzcmMpOworICAgICAgc3JjLT5wcml2LT5wZW5kaW5nX2V2ZW50cyA9CisgICAgICAgICAgZ19saXN0X2FwcGVuZCAoc3JjLT5wcml2LT5wZW5kaW5nX2V2ZW50cywgZXZlbnQpOworICAgICAgZ19hdG9taWNfaW50X3NldCAoJnNyYy0+cHJpdi0+aGF2ZV9ldmVudHMsIFRSVUUpOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyYyk7CisgICAgICBldmVudCA9IE5VTEw7CisgICAgICByZXN1bHQgPSBUUlVFOworICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfRVZFTlRfQlVGRkVSU0laRToKKyAgICAgIC8qIGRvZXMgbm90IHNlZW0gdG8gbWFrZSBtdWNoIHNlbnNlIGN1cnJlbnRseSAqLworICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHVwc3RyZWFtIGV2ZW50cyAqLworICAgIGNhc2UgR1NUX0VWRU5UX1FPUzoKKyAgICAgIC8qIGVsZW1lbnRzIHNob3VsZCBvdmVycmlkZSBzZW5kX2V2ZW50IGFuZCBkbyBzb21ldGhpbmcgKi8KKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX0VWRU5UX1NFRUs6CisgICAgeworICAgICAgZ2Jvb2xlYW4gc3RhcnRlZDsKKworICAgICAgR1NUX09CSkVDVF9MT0NLIChzcmMtPnNyY3BhZCk7CisgICAgICBpZiAoR1NUX1BBRF9BQ1RJVkFURV9NT0RFIChzcmMtPnNyY3BhZCkgPT0gR1NUX0FDVElWQVRFX1BVTEwpCisgICAgICAgIGdvdG8gd3JvbmdfbW9kZTsKKyAgICAgIHN0YXJ0ZWQgPSBHU1RfUEFEX0FDVElWQVRFX01PREUgKHNyYy0+c3JjcGFkKSA9PSBHU1RfQUNUSVZBVEVfUFVTSDsKKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmMtPnNyY3BhZCk7CisKKyAgICAgIGlmIChzdGFydGVkKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInBlcmZvcm1pbmcgc2VlayIpOworICAgICAgICAvKiB3aGVuIHdlIGFyZSBydW5uaW5nIGluIHB1c2ggbW9kZSwgd2UgY2FuIGV4ZWN1dGUgdGhlCisgICAgICAgICAqIHNlZWsgcmlnaHQgbm93LCB3ZSBuZWVkIHRvIHVubG9jay4gKi8KKyAgICAgICAgcmVzdWx0ID0gZ3N0X2Jhc2Vfc3JjX3BlcmZvcm1fc2VlayAoc3JjLCBldmVudCwgVFJVRSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBHc3RFdmVudCAqKmV2ZW50X3A7CisKKyAgICAgICAgLyogZWxzZSB3ZSBzdG9yZSB0aGUgZXZlbnQgYW5kIGV4ZWN1dGUgdGhlIHNlZWsgd2hlbiB3ZQorICAgICAgICAgKiBnZXQgYWN0aXZhdGVkICovCisgICAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAicXVldWVpbmcgc2VlayIpOworICAgICAgICBldmVudF9wID0gJnNyYy0+cGVuZGluZ19zZWVrOworICAgICAgICBnc3RfZXZlbnRfcmVwbGFjZSAoKEdzdEV2ZW50ICoqKSBldmVudF9wLCBldmVudCk7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmMpOworICAgICAgICAvKiBhc3N1bWUgdGhlIHNlZWsgd2lsbCB3b3JrICovCisgICAgICAgIHJlc3VsdCA9IFRSVUU7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfRVZFTlRfTkFWSUdBVElPTjoKKyAgICAgIC8qIGNvdWxkIG1ha2Ugc2Vuc2UgZm9yIGVsZW1lbnRzIHRoYXQgZG8gc29tZXRoaW5nIHdpdGggbmF2aWdhdGlvbiBldmVudHMKKyAgICAgICAqIGJ1dCB0aGVuIHRoZXkgd291bGQgbmVlZCB0byBvdmVycmlkZSB0aGUgc2VuZF9ldmVudCBmdW5jdGlvbiAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfRVZFTlRfTEFURU5DWToKKyAgICAgIC8qIGRvZXMgbm90IHNlZW0gdG8gbWFrZSBzZW5zZSBjdXJyZW50bHkgKi8KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBjdXN0b20gZXZlbnRzICovCisgICAgY2FzZSBHU1RfRVZFTlRfQ1VTVE9NX1VQU1RSRUFNOgorICAgICAgLyogb3ZlcnJpZGUgc2VuZF9ldmVudCBpZiB5b3Ugd2FudCB0aGlzICovCisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTV9PT0I6CisgICAgY2FzZSBHU1RfRVZFTlRfQ1VTVE9NX0JPVEhfT09COgorICAgICAgLyogaW5zZXJ0IGEgcmFuZG9tIGN1c3RvbSBldmVudCBpbnRvIHRoZSBwaXBlbGluZSAqLworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAicHVzaGluZyBjdXN0b20gT09CIGV2ZW50IGRvd25zdHJlYW0iKTsKKyAgICAgIHJlc3VsdCA9IGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjLT5zcmNwYWQsIGV2ZW50KTsKKyAgICAgIC8qIHdlIGdhdmUgYXdheSB0aGUgcmVmIHRvIHRoZSBldmVudCBpbiB0aGUgcHVzaCAqLworICAgICAgZXZlbnQgPSBOVUxMOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9Citkb25lOgorICAvKiBpZiB3ZSBzdGlsbCBoYXZlIGEgcmVmIHRvIHRoZSBldmVudCwgdW5yZWYgaXQgbm93ICovCisgIGlmIChldmVudCkKKyAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKworICByZXR1cm4gcmVzdWx0OworCisgIC8qIEVSUk9SUyAqLword3JvbmdfbW9kZToKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImNhbm5vdCBwZXJmb3JtIHNlZWsgd2hlbiBvcGVyYXRpbmcgaW4gcHVsbCBtb2RlIik7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyYy0+c3JjcGFkKTsKKyAgICByZXN1bHQgPSBGQUxTRTsKKyAgICBnb3RvIGRvbmU7CisgIH0KK30KKworc3RhdGljIGdib29sZWFuCitnc3RfYmFzZV9zcmNfc2Vla2FibGUgKEdzdEJhc2VTcmMgKiBzcmMpCit7CisgIEdzdEJhc2VTcmNDbGFzcyAqYmNsYXNzOworICBiY2xhc3MgPSBHU1RfQkFTRV9TUkNfR0VUX0NMQVNTIChzcmMpOworICBpZiAoYmNsYXNzLT5pc19zZWVrYWJsZSkKKyAgICByZXR1cm4gYmNsYXNzLT5pc19zZWVrYWJsZSAoc3JjKTsKKyAgZWxzZQorICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9iYXNlX3NyY191cGRhdGVfcW9zIChHc3RCYXNlU3JjICogc3JjLAorICAgIGdkb3VibGUgcHJvcG9ydGlvbiwgR3N0Q2xvY2tUaW1lRGlmZiBkaWZmLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKQoreworICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9RT1MsIHNyYywKKyAgICAgICJxb3M6IHByb3BvcnRpb246ICVsZiwgZGlmZiAlIiBHX0dJTlQ2NF9GT1JNQVQgIiwgdGltZXN0YW1wICUiCisgICAgICBHU1RfVElNRV9GT1JNQVQsIHByb3BvcnRpb24sIGRpZmYsIEdTVF9USU1FX0FSR1MgKHRpbWVzdGFtcCkpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKKyAgc3JjLT5wcml2LT5wcm9wb3J0aW9uID0gcHJvcG9ydGlvbjsKKyAgc3JjLT5wcml2LT5lYXJsaWVzdF90aW1lID0gdGltZXN0YW1wICsgZGlmZjsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyYyk7Cit9CisKKworc3RhdGljIGdib29sZWFuCitnc3RfYmFzZV9zcmNfZGVmYXVsdF9ldmVudCAoR3N0QmFzZVNyYyAqIHNyYywgR3N0RXZlbnQgKiBldmVudCkKK3sKKyAgZ2Jvb2xlYW4gcmVzdWx0OworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImhhbmRsZSBldmVudCAlIiBHU1RfUFRSX0ZPUk1BVCwgZXZlbnQpOworCisgIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgeworICAgIGNhc2UgR1NUX0VWRU5UX1NFRUs6CisgICAgICAvKiBpcyBub3JtYWxseSBjYWxsZWQgd2hlbiBpbiBwdXNoIG1vZGUgKi8KKyAgICAgIGlmICghZ3N0X2Jhc2Vfc3JjX3NlZWthYmxlIChzcmMpKQorICAgICAgICBnb3RvIG5vdF9zZWVrYWJsZTsKKworICAgICAgcmVzdWx0ID0gZ3N0X2Jhc2Vfc3JjX3BlcmZvcm1fc2VlayAoc3JjLCBldmVudCwgVFJVRSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVEFSVDoKKyAgICAgIC8qIGNhbmNlbCBhbnkgYmxvY2tpbmcgZ2V0cmFuZ2UsIGlzIG5vcm1hbGx5IGNhbGxlZAorICAgICAgICogd2hlbiBpbiBwdWxsIG1vZGUuICovCisgICAgICByZXN1bHQgPSBnc3RfYmFzZV9zcmNfc2V0X2ZsdXNoaW5nIChzcmMsIFRSVUUsIEZBTFNFLCBUUlVFLCBOVUxMKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6CisgICAgICByZXN1bHQgPSBnc3RfYmFzZV9zcmNfc2V0X2ZsdXNoaW5nIChzcmMsIEZBTFNFLCBUUlVFLCBUUlVFLCBOVUxMKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX0VWRU5UX1FPUzoKKyAgICB7CisgICAgICBnZG91YmxlIHByb3BvcnRpb247CisgICAgICBHc3RDbG9ja1RpbWVEaWZmIGRpZmY7CisgICAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wOworCisgICAgICBnc3RfZXZlbnRfcGFyc2VfcW9zIChldmVudCwgTlVMTCwgJnByb3BvcnRpb24sICZkaWZmLCAmdGltZXN0YW1wKTsKKyAgICAgIGdzdF9iYXNlX3NyY191cGRhdGVfcW9zIChzcmMsIHByb3BvcnRpb24sIGRpZmYsIHRpbWVzdGFtcCk7CisgICAgICByZXN1bHQgPSBUUlVFOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICByZXN1bHQgPSBGQUxTRTsKKyAgICAgIGJyZWFrOworICB9CisgIHJldHVybiByZXN1bHQ7CisKKyAgLyogRVJST1JTICovCitub3Rfc2Vla2FibGU6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJpcyBub3Qgc2Vla2FibGUiKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworc3RhdGljIGdib29sZWFuCitnc3RfYmFzZV9zcmNfZXZlbnRfaGFuZGxlciAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KQoreworICBHc3RCYXNlU3JjICpzcmM7CisgIEdzdEJhc2VTcmNDbGFzcyAqYmNsYXNzOworICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKKworICBzcmMgPSBHU1RfQkFTRV9TUkMgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7CisgIGlmIChHX1VOTElLRUxZIChzcmMgPT0gTlVMTCkpIHsKKyAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKworICBiY2xhc3MgPSBHU1RfQkFTRV9TUkNfR0VUX0NMQVNTIChzcmMpOworCisgIGlmIChiY2xhc3MtPmV2ZW50KSB7CisgICAgaWYgKCEocmVzdWx0ID0gYmNsYXNzLT5ldmVudCAoc3JjLCBldmVudCkpKQorICAgICAgZ290byBzdWJjbGFzc19mYWlsZWQ7CisgIH0KKworZG9uZToKKyAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7CisKKyAgcmV0dXJuIHJlc3VsdDsKKworICAvKiBFUlJPUlMgKi8KK3N1YmNsYXNzX2ZhaWxlZDoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInN1YmNsYXNzIHJlZnVzZWQgZXZlbnQiKTsKKyAgICBnb3RvIGRvbmU7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9iYXNlX3NyY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgR3N0QmFzZVNyYyAqc3JjOworCisgIHNyYyA9IEdTVF9CQVNFX1NSQyAob2JqZWN0KTsKKworICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfQkxPQ0tTSVpFOgorICAgICAgZ3N0X2Jhc2Vfc3JjX3NldF9ibG9ja3NpemUgKHNyYywgZ192YWx1ZV9nZXRfdWludCAodmFsdWUpKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OVU1fQlVGRkVSUzoKKyAgICAgIHNyYy0+bnVtX2J1ZmZlcnMgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UWVBFRklORDoKKyAgICAgIHNyYy0+dHlwZWZpbmQgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRE9fVElNRVNUQU1QOgorICAgICAgZ3N0X2Jhc2Vfc3JjX3NldF9kb190aW1lc3RhbXAgKHNyYywgZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9iYXNlX3NyY19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLAorICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgR3N0QmFzZVNyYyAqc3JjOworCisgIHNyYyA9IEdTVF9CQVNFX1NSQyAob2JqZWN0KTsKKworICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfQkxPQ0tTSVpFOgorICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIGdzdF9iYXNlX3NyY19nZXRfYmxvY2tzaXplIChzcmMpKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OVU1fQlVGRkVSUzoKKyAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHNyYy0+bnVtX2J1ZmZlcnMpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RZUEVGSU5EOgorICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHNyYy0+dHlwZWZpbmQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RPX1RJTUVTVEFNUDoKKyAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBnc3RfYmFzZV9zcmNfZ2V0X2RvX3RpbWVzdGFtcCAoc3JjKSk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgIGJyZWFrOworICB9Cit9CisKKy8qIHdpdGggU1RSRUFNX0xPQ0sgYW5kIExPQ0sgKi8KK3N0YXRpYyBHc3RDbG9ja1JldHVybgorZ3N0X2Jhc2Vfc3JjX3dhaXQgKEdzdEJhc2VTcmMgKiBiYXNlc3JjLCBHc3RDbG9jayAqIGNsb2NrLCBHc3RDbG9ja1RpbWUgdGltZSkKK3sKKyAgR3N0Q2xvY2tSZXR1cm4gcmV0OworICBHc3RDbG9ja0lEIGlkOworCisgIGlkID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIHRpbWUpOworCisgIGJhc2VzcmMtPmNsb2NrX2lkID0gaWQ7CisgIC8qIHJlbGVhc2UgdGhlIGxpdmUgbG9jayB3aGlsZSB3YWl0aW5nICovCisgIEdTVF9MSVZFX1VOTE9DSyAoYmFzZXNyYyk7CisKKyAgcmV0ID0gZ3N0X2Nsb2NrX2lkX3dhaXQgKGlkLCBOVUxMKTsKKworICBHU1RfTElWRV9MT0NLIChiYXNlc3JjKTsKKyAgZ3N0X2Nsb2NrX2lkX3VucmVmIChpZCk7CisgIGJhc2VzcmMtPmNsb2NrX2lkID0gTlVMTDsKKworICByZXR1cm4gcmV0OworfQorCisvKiBwZXJmb3JtIHN5bmNocm9uaXNhdGlvbiBvbiBhIGJ1ZmZlci4KKyAqIHdpdGggU1RSRUFNX0xPQ0suCisgKi8KK3N0YXRpYyBHc3RDbG9ja1JldHVybgorZ3N0X2Jhc2Vfc3JjX2RvX3N5bmMgKEdzdEJhc2VTcmMgKiBiYXNlc3JjLCBHc3RCdWZmZXIgKiBidWZmZXIpCit7CisgIEdzdENsb2NrUmV0dXJuIHJlc3VsdDsKKyAgR3N0Q2xvY2tUaW1lIHN0YXJ0LCBlbmQ7CisgIEdzdEJhc2VTcmNDbGFzcyAqYmNsYXNzOworICBHc3RDbG9ja1RpbWUgYmFzZV90aW1lOworICBHc3RDbG9jayAqY2xvY2s7CisgIEdzdENsb2NrVGltZSBub3cgPSBHU1RfQ0xPQ0tfVElNRV9OT05FLCB0aW1lc3RhbXA7CisgIGdib29sZWFuIGRvX3RpbWVzdGFtcCwgZmlyc3QsIHBzZXVkb19saXZlOworCisgIGJjbGFzcyA9IEdTVF9CQVNFX1NSQ19HRVRfQ0xBU1MgKGJhc2VzcmMpOworCisgIHN0YXJ0ID0gZW5kID0gLTE7CisgIGlmIChiY2xhc3MtPmdldF90aW1lcykKKyAgICBiY2xhc3MtPmdldF90aW1lcyAoYmFzZXNyYywgYnVmZmVyLCAmc3RhcnQsICZlbmQpOworCisgIC8qIGdldCBidWZmZXIgdGltZXN0YW1wICovCisgIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpOworCisgIC8qIGdyYWIgdGhlIGxvY2sgdG8gcHJlcGFyZSBmb3IgY2xvY2tpbmcgYW5kIGNhbGN1bGF0ZSB0aGUgc3RhcnR1cAorICAgKiBsYXRlbmN5LiAqLworICBHU1RfT0JKRUNUX0xPQ0sgKGJhc2VzcmMpOworCisgIC8qIGlmIHdlIGFyZSBhc2tlZCB0byBzeW5jIGFnYWluc3QgdGhlIGNsb2NrIHdlIGFyZSBhIHBzZXVkbyBsaXZlIGVsZW1lbnQgKi8KKyAgcHNldWRvX2xpdmUgPSAoc3RhcnQgIT0gLTEgJiYgYmFzZXNyYy0+aXNfbGl2ZSk7CisgIC8qIGNoZWNrIGZvciB0aGUgZmlyc3QgYnVmZmVyICovCisgIGZpcnN0ID0gKGJhc2VzcmMtPnByaXYtPmxhdGVuY3kgPT0gLTEpOworCisgIGlmICh0aW1lc3RhbXAgIT0gLTEgJiYgcHNldWRvX2xpdmUpIHsKKyAgICBHc3RDbG9ja1RpbWUgbGF0ZW5jeTsKKworICAgIC8qIHdlIGhhdmUgYSB0aW1lc3RhbXAgYW5kIGEgc3luYyB0aW1lLCBsYXRlbmN5IGlzIHRoZSBkaWZmICovCisgICAgaWYgKHRpbWVzdGFtcCA8PSBzdGFydCkKKyAgICAgIGxhdGVuY3kgPSBzdGFydCAtIHRpbWVzdGFtcDsKKyAgICBlbHNlCisgICAgICBsYXRlbmN5ID0gMDsKKworICAgIGlmIChmaXJzdCkgeworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgInBzZXVkb19saXZlIHdpdGggbGF0ZW5jeSAlIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICAgICAgR1NUX1RJTUVfQVJHUyAobGF0ZW5jeSkpOworICAgICAgLyogZmlyc3QgdGltZSB3ZSBjYWxjdWxhdGUgbGF0ZW5jeSwganVzdCBjb25maWd1cmUgKi8KKyAgICAgIGJhc2VzcmMtPnByaXYtPmxhdGVuY3kgPSBsYXRlbmN5OworICAgIH0gZWxzZSB7CisgICAgICBpZiAoYmFzZXNyYy0+cHJpdi0+bGF0ZW5jeSAhPSBsYXRlbmN5KSB7CisgICAgICAgIC8qIHdlIGhhdmUgYSBuZXcgbGF0ZW5jeSwgRklYTUUgcG9zdCBsYXRlbmN5IG1lc3NhZ2UgKi8KKyAgICAgICAgYmFzZXNyYy0+cHJpdi0+bGF0ZW5jeSA9IGxhdGVuY3k7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJsYXRlbmN5IGNoYW5nZWQgdG8gJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAobGF0ZW5jeSkpOworICAgICAgfQorICAgIH0KKyAgfSBlbHNlIGlmIChmaXJzdCkgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJubyBsYXRlbmN5IG5lZWRlZCwgbGl2ZSAlZCwgc3luYyAlZCIsCisgICAgICAgIGJhc2VzcmMtPmlzX2xpdmUsIHN0YXJ0ICE9IC0xKTsKKyAgICBiYXNlc3JjLT5wcml2LT5sYXRlbmN5ID0gMDsKKyAgfQorCisgIC8qIGdldCBjbG9jaywgaWYgbm8gY2xvY2ssIHdlIGNhbid0IHN5bmMgb3IgZG8gdGltZXN0YW1wcyAqLworICBpZiAoKGNsb2NrID0gR1NUX0VMRU1FTlRfQ0xPQ0sgKGJhc2VzcmMpKSA9PSBOVUxMKQorICAgIGdvdG8gbm9fY2xvY2s7CisKKyAgYmFzZV90aW1lID0gR1NUX0VMRU1FTlRfQ0FTVCAoYmFzZXNyYyktPmJhc2VfdGltZTsKKworICBkb190aW1lc3RhbXAgPSBiYXNlc3JjLT5wcml2LT5kb190aW1lc3RhbXA7CisKKyAgLyogZmlyc3QgYnVmZmVyLCBjYWxjdWxhdGUgdGhlIHRpbWVzdGFtcCBvZmZzZXQgKi8KKyAgaWYgKGZpcnN0KSB7CisgICAgR3N0Q2xvY2tUaW1lIHJ1bm5pbmdfdGltZTsKKworICAgIG5vdyA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOworICAgIHJ1bm5pbmdfdGltZSA9IG5vdyAtIGJhc2VfdGltZTsKKworICAgIEdTVF9MT0dfT0JKRUNUIChiYXNlc3JjLAorICAgICAgICAic3RhcnR1cCB0aW1lc3RhbXA6ICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBydW5uaW5nX3RpbWUgJSIKKyAgICAgICAgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXApLAorICAgICAgICBHU1RfVElNRV9BUkdTIChydW5uaW5nX3RpbWUpKTsKKworICAgIGlmIChwc2V1ZG9fbGl2ZSAmJiB0aW1lc3RhbXAgIT0gLTEpIHsKKyAgICAgIC8qIGxpdmUgc291cmNlIGFuZCB3ZSBuZWVkIHRvIHN5bmMsIGFkZCBzdGFydHVwIGxhdGVuY3kgdG8gYWxsIHRpbWVzdGFtcHMKKyAgICAgICAqIHRvIGdldCB0aGUgcmVhbCBydW5uaW5nX3RpbWUuIExpdmUgc291cmNlcyBzaG91bGQgYWx3YXlzIHRpbWVzdGFtcAorICAgICAgICogYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IHJ1bm5pbmcgdGltZS4gKi8KKyAgICAgIGJhc2VzcmMtPnByaXYtPnRzX29mZnNldCA9IEdTVF9DTE9DS19ESUZGICh0aW1lc3RhbXAsIHJ1bm5pbmdfdGltZSk7CisKKyAgICAgIEdTVF9MT0dfT0JKRUNUIChiYXNlc3JjLCAibGl2ZSB3aXRoIHN5bmMsIHRzX29mZnNldCAlIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICAgICAgR1NUX1RJTUVfQVJHUyAoYmFzZXNyYy0+cHJpdi0+dHNfb2Zmc2V0KSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGJhc2VzcmMtPnByaXYtPnRzX29mZnNldCA9IDA7CisgICAgICBHU1RfTE9HX09CSkVDVCAoYmFzZXNyYywgIm5vIHRpbWVzdGFtcCBvZmZzZXQgbmVlZGVkIik7CisgICAgfQorCisgICAgaWYgKCFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodGltZXN0YW1wKSkgeworICAgICAgaWYgKGRvX3RpbWVzdGFtcCkKKyAgICAgICAgdGltZXN0YW1wID0gcnVubmluZ190aW1lOworICAgICAgZWxzZQorICAgICAgICB0aW1lc3RhbXAgPSAwOworCisgICAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IHRpbWVzdGFtcDsKKworICAgICAgR1NUX0xPR19PQkpFQ1QgKGJhc2VzcmMsICJjcmVhdGVkIHRpbWVzdGFtcDogJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWVzdGFtcCkpOworICAgIH0KKworICAgIC8qIGFkZCB0aGUgdGltZXN0YW1wIG9mZnNldCB3ZSBuZWVkIGZvciBzeW5jICovCisgICAgdGltZXN0YW1wICs9IGJhc2VzcmMtPnByaXYtPnRzX29mZnNldDsKKyAgfSBlbHNlIHsKKyAgICAvKiBub3QgdGhlIGZpcnN0IGJ1ZmZlciwgdGhlIHRpbWVzdGFtcCBpcyB0aGUgZGlmZiBiZXR3ZWVuIHRoZSBjbG9jayBhbmQKKyAgICAgKiBiYXNlX3RpbWUgKi8KKyAgICBpZiAoZG9fdGltZXN0YW1wICYmICFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodGltZXN0YW1wKSkgeworICAgICAgbm93ID0gZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jayk7CisKKyAgICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gbm93IC0gYmFzZV90aW1lOworCisgICAgICBHU1RfTE9HX09CSkVDVCAoYmFzZXNyYywgImNyZWF0ZWQgdGltZXN0YW1wOiAlIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICAgICAgR1NUX1RJTUVfQVJHUyAobm93IC0gYmFzZV90aW1lKSk7CisgICAgfQorICB9CisKKyAgLyogaWYgd2UgZG9uJ3QgaGF2ZSBhIGJ1ZmZlciB0aW1lc3RhbXAsIHdlIGRvbid0IHN5bmMgKi8KKyAgaWYgKCFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoc3RhcnQpKQorICAgIGdvdG8gbm9fc3luYzsKKworICBpZiAoYmFzZXNyYy0+aXNfbGl2ZSAmJiBHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodGltZXN0YW1wKSkgeworICAgIC8qIGZvciBwc2V1ZG8gbGl2ZSBzb3VyY2VzLCBhZGQgb3VyIHRzX29mZnNldCB0byB0aGUgdGltZXN0YW1wICovCisgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgKz0gYmFzZXNyYy0+cHJpdi0+dHNfb2Zmc2V0OworICAgIHN0YXJ0ICs9IGJhc2VzcmMtPnByaXYtPnRzX29mZnNldDsKKyAgfQorCisgIEdTVF9MT0dfT0JKRUNUIChiYXNlc3JjLAorICAgICAgIndhaXRpbmcgZm9yIGNsb2NrLCBiYXNlIHRpbWUgJSIgR1NUX1RJTUVfRk9STUFUCisgICAgICAiLCBzdHJlYW1fc3RhcnQgJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgR1NUX1RJTUVfQVJHUyAoYmFzZV90aW1lKSwgR1NUX1RJTUVfQVJHUyAoc3RhcnQpKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKGJhc2VzcmMpOworCisgIHJlc3VsdCA9IGdzdF9iYXNlX3NyY193YWl0IChiYXNlc3JjLCBjbG9jaywgc3RhcnQgKyBiYXNlX3RpbWUpOworCisgIEdTVF9MT0dfT0JKRUNUIChiYXNlc3JjLCAiY2xvY2sgZW50cnkgZG9uZTogJWQiLCByZXN1bHQpOworCisgIHJldHVybiByZXN1bHQ7CisKKyAgLyogc3BlY2lhbCBjYXNlcyAqLworbm9fY2xvY2s6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAid2UgaGF2ZSBubyBjbG9jayIpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiYXNlc3JjKTsKKyAgICByZXR1cm4gR1NUX0NMT0NLX09LOworICB9Citub19zeW5jOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgIm5vIHN5bmMgbmVlZGVkIik7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJhc2VzcmMpOworICAgIHJldHVybiBHU1RfQ0xPQ0tfT0s7CisgIH0KK30KKworLyogQ2FsbGVkIHdpdGggU1RSRUFNX0xPQ0sgYW5kIExJVkVfTE9DSyAqLworc3RhdGljIGdib29sZWFuCitnc3RfYmFzZV9zcmNfdXBkYXRlX2xlbmd0aCAoR3N0QmFzZVNyYyAqIHNyYywgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50ICogbGVuZ3RoKQoreworICBndWludDY0IHNpemUsIG1heHNpemU7CisgIEdzdEJhc2VTcmNDbGFzcyAqYmNsYXNzOworICBHc3RGb3JtYXQgZm9ybWF0OworICBnaW50NjQgc3RvcDsKKyAgZ2Jvb2xlYW4gZHluYW1pYzsKKworICBiY2xhc3MgPSBHU1RfQkFTRV9TUkNfR0VUX0NMQVNTIChzcmMpOworCisgIGZvcm1hdCA9IHNyYy0+c2VnbWVudC5mb3JtYXQ7CisgIHN0b3AgPSBzcmMtPnNlZ21lbnQuc3RvcDsKKyAgLyogZ2V0IHRvdGFsIGZpbGUgc2l6ZSAqLworICBzaXplID0gc3JjLT5zZWdtZW50LmR1cmF0aW9uOworCisgIC8qIG9ubHkgb3BlcmF0ZSBpZiB3ZSBhcmUgd29ya2luZyB3aXRoIGJ5dGVzICovCisgIGlmIChmb3JtYXQgIT0gR1NUX0ZPUk1BVF9CWVRFUykKKyAgICByZXR1cm4gVFJVRTsKKworICAvKiB0aGUgbWF4IGFtb3VudCBvZiBieXRlcyB0byByZWFkIGlzIHRoZSB0b3RhbCBzaXplIG9yCisgICAqIHVwIHRvIHRoZSBzZWdtZW50LnN0b3AgaWYgcHJlc2VudC4gKi8KKyAgaWYgKHN0b3AgIT0gLTEpCisgICAgbWF4c2l6ZSA9IE1JTiAoc2l6ZSwgc3RvcCk7CisgIGVsc2UKKyAgICBtYXhzaXplID0gc2l6ZTsKKworICBHU1RfREVCVUdfT0JKRUNUIChzcmMsCisgICAgICAicmVhZGluZyBvZmZzZXQgJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBsZW5ndGggJXUsIHNpemUgJSIgR19HSU5UNjRfRk9STUFUCisgICAgICAiLCBzZWdtZW50LnN0b3AgJSIgR19HSU5UNjRfRk9STUFUICIsIG1heHNpemUgJSIgR19HSU5UNjRfRk9STUFULCBvZmZzZXQsCisgICAgICAqbGVuZ3RoLCBzaXplLCBzdG9wLCBtYXhzaXplKTsKKworICBkeW5hbWljID0gZ19hdG9taWNfaW50X2dldCAoJnNyYy0+cHJpdi0+ZHluYW1pY19zaXplKTsKKyAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiZHluYW1pYyBzaXplOiAlZCIsIGR5bmFtaWMpOworCisgIC8qIGNoZWNrIHNpemUgaWYgd2UgaGF2ZSBvbmUgKi8KKyAgaWYgKG1heHNpemUgIT0gLTEpIHsKKyAgICAvKiBpZiB3ZSBydW4gcGFzdCB0aGUgZW5kLCBjaGVjayBpZiB0aGUgZmlsZSBiZWNhbWUgYmlnZ2VyIGFuZAorICAgICAqIHJldHJ5LiAqLworICAgIGlmIChHX1VOTElLRUxZIChvZmZzZXQgKyAqbGVuZ3RoID49IG1heHNpemUgfHwgZHluYW1pYykpIHsKKyAgICAgIC8qIHNlZSBpZiBsZW5ndGggb2YgdGhlIGZpbGUgY2hhbmdlZCAqLworICAgICAgaWYgKGJjbGFzcy0+Z2V0X3NpemUpCisgICAgICAgIGlmICghYmNsYXNzLT5nZXRfc2l6ZSAoc3JjLCAmc2l6ZSkpCisgICAgICAgICAgc2l6ZSA9IC0xOworCisgICAgICAvKiBtYWtlIHN1cmUgd2UgZG9uJ3QgZXhjZWVkIHRoZSBjb25maWd1cmVkIHNlZ21lbnQgc3RvcAorICAgICAgICogaWYgaXQgd2FzIHNldCAqLworICAgICAgaWYgKHN0b3AgIT0gLTEpCisgICAgICAgIG1heHNpemUgPSBNSU4gKHNpemUsIHN0b3ApOworICAgICAgZWxzZQorICAgICAgICBtYXhzaXplID0gc2l6ZTsKKworICAgICAgLyogaWYgd2UgYXJlIGF0IG9yIHBhc3QgdGhlIGVuZCwgRU9TICovCisgICAgICBpZiAoR19VTkxJS0VMWSAob2Zmc2V0ID49IG1heHNpemUpKQorICAgICAgICBnb3RvIHVuZXhwZWN0ZWRfbGVuZ3RoOworCisgICAgICAvKiBlbHNlIHdlIGNhbiBjbGlwIHRvIHRoZSBlbmQgKi8KKyAgICAgIGlmIChHX1VOTElLRUxZIChvZmZzZXQgKyAqbGVuZ3RoID49IG1heHNpemUpKQorICAgICAgICAqbGVuZ3RoID0gbWF4c2l6ZSAtIG9mZnNldDsKKworICAgIH0KKyAgfQorCisgIC8qIGtlZXAgdHJhY2sgb2YgY3VycmVudCBkdXJhdGlvbi4KKyAgICogc2VnbWVudCBpcyBpbiBieXRlcywgd2UgY2hlY2tlZCB0aGF0IGFib3ZlLiAqLworICBHU1RfT0JKRUNUX0xPQ0sgKHNyYyk7CisgIHNyYy0+c2VnbWVudC5kdXJhdGlvbiA9IHNpemU7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmMpOworCisgIHJldHVybiBUUlVFOworCisgIC8qIEVSUk9SUyAqLwordW5leHBlY3RlZF9sZW5ndGg6CisgIHsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworLyogbXVzdCBiZSBjYWxsZWQgd2l0aCBMSVZFX0xPQ0sgKi8KK3N0YXRpYyBHc3RGbG93UmV0dXJuCitnc3RfYmFzZV9zcmNfZ2V0X3JhbmdlIChHc3RCYXNlU3JjICogc3JjLCBndWludDY0IG9mZnNldCwgZ3VpbnQgbGVuZ3RoLAorICAgIEdzdEJ1ZmZlciAqKiBidWYpCit7CisgIEdzdEZsb3dSZXR1cm4gcmV0OworICBHc3RCYXNlU3JjQ2xhc3MgKmJjbGFzczsKKyAgR3N0Q2xvY2tSZXR1cm4gc3RhdHVzOworCisgIGJjbGFzcyA9IEdTVF9CQVNFX1NSQ19HRVRfQ0xBU1MgKHNyYyk7CisKK2FnYWluOgorICBpZiAoc3JjLT5pc19saXZlKSB7CisgICAgaWYgKEdfVU5MSUtFTFkgKCFzcmMtPmxpdmVfcnVubmluZykpIHsKKyAgICAgIHJldCA9IGdzdF9iYXNlX3NyY193YWl0X3BsYXlpbmcgKHNyYyk7CisgICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQorICAgICAgICBnb3RvIHN0b3BwZWQ7CisgICAgfQorICB9CisKKyAgaWYgKEdfVU5MSUtFTFkgKCFHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChzcmMsIEdTVF9CQVNFX1NSQ19TVEFSVEVEKSkpCisgICAgZ290byBub3Rfc3RhcnRlZDsKKworICBpZiAoR19VTkxJS0VMWSAoIWJjbGFzcy0+Y3JlYXRlKSkKKyAgICBnb3RvIG5vX2Z1bmN0aW9uOworCisgIGlmIChHX1VOTElLRUxZICghZ3N0X2Jhc2Vfc3JjX3VwZGF0ZV9sZW5ndGggKHNyYywgb2Zmc2V0LCAmbGVuZ3RoKSkpCisgICAgZ290byB1bmV4cGVjdGVkX2xlbmd0aDsKKworICAvKiB0cmFjayBwb3NpdGlvbiAqLworICBHU1RfT0JKRUNUX0xPQ0sgKHNyYyk7CisgIGlmIChzcmMtPnNlZ21lbnQuZm9ybWF0ID09IEdTVF9GT1JNQVRfQllURVMpCisgICAgc3JjLT5zZWdtZW50LnBvc2l0aW9uID0gb2Zmc2V0OworICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKKworICAvKiBub3JtYWxseSB3ZSBkb24ndCBjb3VudCBidWZmZXJzICovCisgIGlmIChHX1VOTElLRUxZIChzcmMtPm51bV9idWZmZXJzX2xlZnQgPj0gMCkpIHsKKyAgICBpZiAoc3JjLT5udW1fYnVmZmVyc19sZWZ0ID09IDApCisgICAgICBnb3RvIHJlYWNoZWRfbnVtX2J1ZmZlcnM7CisgICAgZWxzZQorICAgICAgc3JjLT5udW1fYnVmZmVyc19sZWZ0LS07CisgIH0KKworICAvKiBkb24ndCBlbnRlciB0aGUgY3JlYXRlIGZ1bmN0aW9uIGlmIGEgcGVuZGluZyBFT1MgZXZlbnQgd2FzIHNldC4gRm9yIHRoZQorICAgKiBsb2dpYyBvZiB0aGUgcGVuZGluZ19lb3MsIGNoZWNrIHRoZSBldmVudCBmdW5jdGlvbiBvZiB0aGlzIGNsYXNzLiAqLworICBpZiAoR19VTkxJS0VMWSAoZ19hdG9taWNfaW50X2dldCAoJnNyYy0+cHJpdi0+cGVuZGluZ19lb3MpKSkKKyAgICBnb3RvIGVvczsKKworICBHU1RfREVCVUdfT0JKRUNUIChzcmMsCisgICAgICAiY2FsbGluZyBjcmVhdGUgb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBsZW5ndGggJXUsIHRpbWUgJSIKKyAgICAgIEdfR0lOVDY0X0ZPUk1BVCwgb2Zmc2V0LCBsZW5ndGgsIHNyYy0+c2VnbWVudC50aW1lKTsKKworICByZXQgPSBiY2xhc3MtPmNyZWF0ZSAoc3JjLCBvZmZzZXQsIGxlbmd0aCwgYnVmKTsKKworICAvKiBUaGUgY3JlYXRlIGZ1bmN0aW9uIGNvdWxkIGJlIHVubG9ja2VkIGJlY2F1c2Ugd2UgaGF2ZSBhIHBlbmRpbmcgRU9TLiBJdCdzCisgICAqIHBvc3NpYmxlIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIGJ1ZmZlciBmcm9tIGNyZWF0ZSB0aGF0IHdlIG5lZWQgdG8KKyAgICogZGlzY2FyZCB3aGVuIHRoZSBjcmVhdGUgZnVuY3Rpb24gcmV0dXJuZWQgX09LLiAqLworICBpZiAoR19VTkxJS0VMWSAoZ19hdG9taWNfaW50X2dldCAoJnNyYy0+cHJpdi0+cGVuZGluZ19lb3MpKSkgeworICAgIGlmIChyZXQgPT0gR1NUX0ZMT1dfT0spIHsKKyAgICAgIGdzdF9idWZmZXJfdW5yZWYgKCpidWYpOworICAgICAgKmJ1ZiA9IE5VTEw7CisgICAgfQorICAgIGdvdG8gZW9zOworICB9CisKKyAgaWYgKEdfVU5MSUtFTFkgKHJldCAhPSBHU1RfRkxPV19PSykpCisgICAgZ290byBub3Rfb2s7CisKKyAgLyogbm8gdGltZXN0YW1wIHNldCBhbmQgd2UgYXJlIGF0IG9mZnNldCAwLCB3ZSBjYW4gdGltZXN0YW1wIHdpdGggMCAqLworICBpZiAob2Zmc2V0ID09IDAgJiYgc3JjLT5zZWdtZW50LnRpbWUgPT0gMAorICAgICAgJiYgR1NUX0JVRkZFUl9USU1FU1RBTVAgKCpidWYpID09IC0xICYmICFzcmMtPmlzX2xpdmUpIHsKKyAgICAqYnVmID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlICgqYnVmKTsKKyAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoKmJ1ZikgPSAwOworICB9CisKKyAgLyogbm93IHN5bmMgYmVmb3JlIHB1c2hpbmcgdGhlIGJ1ZmZlciAqLworICBzdGF0dXMgPSBnc3RfYmFzZV9zcmNfZG9fc3luYyAoc3JjLCAqYnVmKTsKKworICAvKiB3YWl0aW5nIGZvciB0aGUgY2xvY2sgY291bGQgaGF2ZSBtYWRlIHVzIGZsdXNoaW5nICovCisgIGlmIChHX1VOTElLRUxZIChzcmMtPnByaXYtPmZsdXNoaW5nKSkKKyAgICBnb3RvIGZsdXNoaW5nOworCisgIHN3aXRjaCAoc3RhdHVzKSB7CisgICAgY2FzZSBHU1RfQ0xPQ0tfRUFSTFk6CisgICAgICAvKiB0aGUgYnVmZmVyIGlzIHRvbyBsYXRlLiBXZSBjdXJyZW50bHkgZG9uJ3QgZHJvcCB0aGUgYnVmZmVyLiAqLworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiYnVmZmVyIHRvbyBsYXRlISwgcmV0dXJuaW5nIGFueXdheSIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfQ0xPQ0tfT0s6CisgICAgICAvKiBidWZmZXIgc3luY2hyb25pc2VkIHByb3Blcmx5ICovCisgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJidWZmZXIgb2siKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX0NMT0NLX1VOU0NIRURVTEVEOgorICAgICAgLyogdGhpcyBjYXNlIGlzIHRyaWdnZXJlZCB3aGVuIHdlIHdlcmUgd2FpdGluZyBmb3IgdGhlIGNsb2NrIGFuZAorICAgICAgICogaXQgZ290IHVubG9ja2VkIGJlY2F1c2Ugd2UgZGlkIGEgc3RhdGUgY2hhbmdlLiBJbiBhbnkgY2FzZSwgZ2V0IHJpZCBvZgorICAgICAgICogdGhlIGJ1ZmZlci4gKi8KKyAgICAgIGdzdF9idWZmZXJfdW5yZWYgKCpidWYpOworICAgICAgKmJ1ZiA9IE5VTEw7CisgICAgICBpZiAoIXNyYy0+bGl2ZV9ydW5uaW5nKSB7CisgICAgICAgIC8qIFdlIHJldHVybiBXUk9OR19TVEFURSB3aGVuIHdlIGFyZSBub3QgcnVubmluZyB0byBzdG9wIHRoZSBkYXRhZmxvdyBhbHNvCisgICAgICAgICAqIGdldCByaWQgb2YgdGhlIHByb2R1Y2VkIGJ1ZmZlci4gKi8KKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLAorICAgICAgICAgICAgImNsb2NrIHdhcyB1bnNjaGVkdWxlZCAoJWQpLCByZXR1cm5pbmcgV1JPTkdfU1RBVEUiLCBzdGF0dXMpOworICAgICAgICByZXQgPSBHU1RfRkxPV19XUk9OR19TVEFURTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8qIElmIHdlIGFyZSBydW5uaW5nIHdoZW4gdGhpcyBoYXBwZW5zLCB3ZSBxdWlja2x5IHN3aXRjaGVkIGJldHdlZW4KKyAgICAgICAgICogcGF1c2UgYW5kIHBsYXlpbmcuIFdlIHRyeSB0byBwcm9kdWNlIGEgbmV3IGJ1ZmZlciAqLworICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsCisgICAgICAgICAgICAiY2xvY2sgd2FzIHVuc2NoZWR1bGVkICglZCksIGJ1dCB3ZSBhcmUgcnVubmluZyIsIHN0YXR1cyk7CisgICAgICAgIGdvdG8gYWdhaW47CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgLyogYWxsIG90aGVyIHJlc3VsdCB2YWx1ZXMgYXJlIHVuZXhwZWN0ZWQgYW5kIGVycm9ycyAqLworICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgQ09SRSwgQ0xPQ0ssCisgICAgICAgICAgKF8oIkludGVybmFsIGNsb2NrIGVycm9yLiIpKSwKKyAgICAgICAgICAoImNsb2NrIHJldHVybmVkIHVuZXhwZWN0ZWQgcmV0dXJuIHZhbHVlICVkIiwgc3RhdHVzKSk7CisgICAgICBnc3RfYnVmZmVyX3VucmVmICgqYnVmKTsKKyAgICAgICpidWYgPSBOVUxMOworICAgICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7CisgICAgICBicmVhazsKKyAgfQorICByZXR1cm4gcmV0OworCisgIC8qIEVSUk9SICovCitzdG9wcGVkOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAid2FpdF9wbGF5aW5nIHJldHVybmVkICVkICglcykiLCByZXQsCisgICAgICAgIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKKyAgICByZXR1cm4gcmV0OworICB9Citub3Rfb2s6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJjcmVhdGUgcmV0dXJuZWQgJWQgKCVzKSIsIHJldCwKKyAgICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOworICAgIHJldHVybiByZXQ7CisgIH0KK25vdF9zdGFydGVkOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiZ2V0cmFuZ2UgYnV0IG5vdCBzdGFydGVkIik7CisgICAgcmV0dXJuIEdTVF9GTE9XX1dST05HX1NUQVRFOworICB9Citub19mdW5jdGlvbjoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIm5vIGNyZWF0ZSBmdW5jdGlvbiIpOworICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOworICB9Cit1bmV4cGVjdGVkX2xlbmd0aDoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInVuZXhwZWN0ZWQgbGVuZ3RoICV1IChvZmZzZXQ9JSIgR19HVUlOVDY0X0ZPUk1BVAorICAgICAgICAiLCBzaXplPSUiIEdfR0lOVDY0X0ZPUk1BVCAiKSIsIGxlbmd0aCwgb2Zmc2V0LCBzcmMtPnNlZ21lbnQuZHVyYXRpb24pOworICAgIHJldHVybiBHU1RfRkxPV19VTkVYUEVDVEVEOworICB9CityZWFjaGVkX251bV9idWZmZXJzOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAic2VudCBhbGwgYnVmZmVycyIpOworICAgIHJldHVybiBHU1RfRkxPV19VTkVYUEVDVEVEOworICB9CitmbHVzaGluZzoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIndlIGFyZSBmbHVzaGluZyIpOworICAgIGdzdF9idWZmZXJfdW5yZWYgKCpidWYpOworICAgICpidWYgPSBOVUxMOworICAgIHJldHVybiBHU1RfRkxPV19XUk9OR19TVEFURTsKKyAgfQorZW9zOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAid2UgYXJlIEVPUyIpOworICAgIHJldHVybiBHU1RfRkxPV19VTkVYUEVDVEVEOworICB9Cit9CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuCitnc3RfYmFzZV9zcmNfcGFkX2dldF9yYW5nZSAoR3N0UGFkICogcGFkLCBndWludDY0IG9mZnNldCwgZ3VpbnQgbGVuZ3RoLAorICAgIEdzdEJ1ZmZlciAqKiBidWYpCit7CisgIEdzdEJhc2VTcmMgKnNyYzsKKyAgR3N0Rmxvd1JldHVybiByZXM7CisKKyAgc3JjID0gR1NUX0JBU0VfU1JDX0NBU1QgKGdzdF9vYmplY3RfcmVmIChHU1RfT0JKRUNUX1BBUkVOVCAocGFkKSkpOworCisgIEdTVF9MSVZFX0xPQ0sgKHNyYyk7CisgIGlmIChHX1VOTElLRUxZIChzcmMtPnByaXYtPmZsdXNoaW5nKSkKKyAgICBnb3RvIGZsdXNoaW5nOworCisgIHJlcyA9IGdzdF9iYXNlX3NyY19nZXRfcmFuZ2UgKHNyYywgb2Zmc2V0LCBsZW5ndGgsIGJ1Zik7CisKK2RvbmU6CisgIEdTVF9MSVZFX1VOTE9DSyAoc3JjKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChzcmMpOworCisgIHJldHVybiByZXM7CisKKyAgLyogRVJST1JTICovCitmbHVzaGluZzoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIndlIGFyZSBmbHVzaGluZyIpOworICAgIHJlcyA9IEdTVF9GTE9XX1dST05HX1NUQVRFOworICAgIGdvdG8gZG9uZTsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iYXNlX3NyY19pc19yYW5kb21fYWNjZXNzIChHc3RCYXNlU3JjICogc3JjKQoreworICAvKiB3ZSBuZWVkIHRvIHN0YXJ0IHRoZSBiYXNlc3JjIHRvIGNoZWNrIHJhbmRvbSBhY2Nlc3MgKi8KKyAgaWYgKCFHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChzcmMsIEdTVF9CQVNFX1NSQ19TVEFSVEVEKSkgeworICAgIEdTVF9MT0dfT0JKRUNUIChzcmMsICJkb2luZyBzdGFydC9zdG9wIHRvIGNoZWNrIGdldF9yYW5nZSBzdXBwb3J0Iik7CisgICAgaWYgKEdfTElLRUxZIChnc3RfYmFzZV9zcmNfc3RhcnQgKHNyYykpKQorICAgICAgZ3N0X2Jhc2Vfc3JjX3N0b3AgKHNyYyk7CisgIH0KKworICByZXR1cm4gc3JjLT5yYW5kb21fYWNjZXNzOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2Jhc2Vfc3JjX2xvb3AgKEdzdFBhZCAqIHBhZCkKK3sKKyAgR3N0QmFzZVNyYyAqc3JjOworICBHc3RCdWZmZXIgKmJ1ZiA9IE5VTEw7CisgIEdzdEZsb3dSZXR1cm4gcmV0OworICBnaW50NjQgcG9zaXRpb247CisgIGdib29sZWFuIGVvczsKKyAgZ3VpbnQgYmxvY2tzaXplOworICBHTGlzdCAqcGVuZGluZ19ldmVudHMgPSBOVUxMLCAqdG1wOworCisgIGVvcyA9IEZBTFNFOworCisgIHNyYyA9IEdTVF9CQVNFX1NSQyAoR1NUX09CSkVDVF9QQVJFTlQgKHBhZCkpOworCisgIC8qIGNoZWNrIGlmIHdlIG5lZWQgdG8gcmVuZWdvdGlhdGUgKi8KKyAgaWYgKGdzdF9wYWRfY2hlY2tfcmVjb25maWd1cmUgKHBhZCkpIHsKKyAgICBpZiAoIWdzdF9iYXNlX3NyY19uZWdvdGlhdGUgKHNyYykpCisgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJGYWlsZWQgdG8gcmVuZWdvdGlhdGUiKTsKKyAgfQorCisgIEdTVF9MSVZFX0xPQ0sgKHNyYyk7CisKKyAgaWYgKEdfVU5MSUtFTFkgKHNyYy0+cHJpdi0+Zmx1c2hpbmcpKQorICAgIGdvdG8gZmx1c2hpbmc7CisKKyAgYmxvY2tzaXplID0gc3JjLT5ibG9ja3NpemU7CisKKyAgLyogaWYgd2Ugb3BlcmF0ZSBpbiBieXRlcywgd2UgY2FuIGNhbGN1bGF0ZSBhbiBvZmZzZXQgKi8KKyAgaWYgKHNyYy0+c2VnbWVudC5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9CWVRFUykgeworICAgIHBvc2l0aW9uID0gc3JjLT5zZWdtZW50LnBvc2l0aW9uOworICAgIC8qIGZvciBuZWdhdGl2ZSByYXRlcywgc3RhcnQgd2l0aCBzdWJ0cmFjdGluZyB0aGUgYmxvY2tzaXplICovCisgICAgaWYgKHNyYy0+c2VnbWVudC5yYXRlIDwgMC4wKSB7CisgICAgICAvKiB3ZSBjYW5ub3QgZ28gYmVsb3cgc2VnbWVudC5zdGFydCAqLworICAgICAgaWYgKHBvc2l0aW9uID4gc3JjLT5zZWdtZW50LnN0YXJ0ICsgYmxvY2tzaXplKQorICAgICAgICBwb3NpdGlvbiAtPSBibG9ja3NpemU7CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogbGFzdCBibG9jaywgcmVtYWluZGVyIHVwIHRvIHNlZ21lbnQuc3RhcnQgKi8KKyAgICAgICAgYmxvY2tzaXplID0gcG9zaXRpb24gLSBzcmMtPnNlZ21lbnQuc3RhcnQ7CisgICAgICAgIHBvc2l0aW9uID0gc3JjLT5zZWdtZW50LnN0YXJ0OworICAgICAgfQorICAgIH0KKyAgfSBlbHNlCisgICAgcG9zaXRpb24gPSAtMTsKKworICBHU1RfTE9HX09CSkVDVCAoc3JjLCAibmV4dF90cyAlIiBHU1RfVElNRV9GT1JNQVQgIiBzaXplICV1IiwKKyAgICAgIEdTVF9USU1FX0FSR1MgKHBvc2l0aW9uKSwgYmxvY2tzaXplKTsKKworICByZXQgPSBnc3RfYmFzZV9zcmNfZ2V0X3JhbmdlIChzcmMsIHBvc2l0aW9uLCBibG9ja3NpemUsICZidWYpOworICBpZiAoR19VTkxJS0VMWSAocmV0ICE9IEdTVF9GTE9XX09LKSkgeworICAgIEdTVF9JTkZPX09CSkVDVCAoc3JjLCAicGF1c2luZyBhZnRlciBnc3RfYmFzZV9zcmNfZ2V0X3JhbmdlKCkgPSAlcyIsCisgICAgICAgIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKKyAgICBHU1RfTElWRV9VTkxPQ0sgKHNyYyk7CisgICAgZ290byBwYXVzZTsKKyAgfQorICAvKiB0aGlzIHNob3VsZCBub3QgaGFwcGVuICovCisgIGlmIChHX1VOTElLRUxZIChidWYgPT0gTlVMTCkpCisgICAgZ290byBudWxsX2J1ZmZlcjsKKworICAvKiBwdXNoIGV2ZW50cyB0byBjbG9zZS9zdGFydCBvdXIgc2VnbWVudCBiZWZvcmUgd2UgcHVzaCB0aGUgYnVmZmVyLiAqLworICBpZiAoR19VTkxJS0VMWSAoc3JjLT5wcml2LT5zZWdtZW50X3BlbmRpbmcpKSB7CisgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNyYy0+c2VnbWVudCkpOworICAgIHNyYy0+cHJpdi0+c2VnbWVudF9wZW5kaW5nID0gRkFMU0U7CisgIH0KKworICBpZiAoZ19hdG9taWNfaW50X2dldCAoJnNyYy0+cHJpdi0+aGF2ZV9ldmVudHMpKSB7CisgICAgR1NUX09CSkVDVF9MT0NLIChzcmMpOworICAgIC8qIHRha2UgdGhlIGV2ZW50cyAqLworICAgIHBlbmRpbmdfZXZlbnRzID0gc3JjLT5wcml2LT5wZW5kaW5nX2V2ZW50czsKKyAgICBzcmMtPnByaXYtPnBlbmRpbmdfZXZlbnRzID0gTlVMTDsKKyAgICBnX2F0b21pY19pbnRfc2V0ICgmc3JjLT5wcml2LT5oYXZlX2V2ZW50cywgRkFMU0UpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmMpOworICB9CisKKyAgLyogUHVzaCBvdXQgcGVuZGluZyBldmVudHMgaWYgYW55ICovCisgIGlmIChHX1VOTElLRUxZIChwZW5kaW5nX2V2ZW50cyAhPSBOVUxMKSkgeworICAgIGZvciAodG1wID0gcGVuZGluZ19ldmVudHM7IHRtcDsgdG1wID0gZ19saXN0X25leHQgKHRtcCkpIHsKKyAgICAgIEdzdEV2ZW50ICpldiA9IChHc3RFdmVudCAqKSB0bXAtPmRhdGE7CisgICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZXYpOworICAgIH0KKyAgICBnX2xpc3RfZnJlZSAocGVuZGluZ19ldmVudHMpOworICB9CisKKyAgLyogZmlndXJlIG91dCB0aGUgbmV3IHBvc2l0aW9uICovCisgIHN3aXRjaCAoc3JjLT5zZWdtZW50LmZvcm1hdCkgeworICAgIGNhc2UgR1NUX0ZPUk1BVF9CWVRFUzoKKyAgICB7CisgICAgICBndWludCBidWZzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKTsKKworICAgICAgLyogd2Ugc3VidHJhY3RlZCBhYm92ZSBmb3IgbmVnYXRpdmUgcmF0ZXMgKi8KKyAgICAgIGlmIChzcmMtPnNlZ21lbnQucmF0ZSA+PSAwLjApCisgICAgICAgIHBvc2l0aW9uICs9IGJ1ZnNpemU7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfRk9STUFUX1RJTUU6CisgICAgeworICAgICAgR3N0Q2xvY2tUaW1lIHN0YXJ0LCBkdXJhdGlvbjsKKworICAgICAgc3RhcnQgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKTsKKyAgICAgIGR1cmF0aW9uID0gR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKTsKKworICAgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzdGFydCkpCisgICAgICAgIHBvc2l0aW9uID0gc3RhcnQ7CisgICAgICBlbHNlCisgICAgICAgIHBvc2l0aW9uID0gc3JjLT5zZWdtZW50LnBvc2l0aW9uOworCisgICAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGR1cmF0aW9uKSkgeworICAgICAgICBpZiAoc3JjLT5zZWdtZW50LnJhdGUgPj0gMC4wKQorICAgICAgICAgIHBvc2l0aW9uICs9IGR1cmF0aW9uOworICAgICAgICBlbHNlIGlmIChwb3NpdGlvbiA+IGR1cmF0aW9uKQorICAgICAgICAgIHBvc2l0aW9uIC09IGR1cmF0aW9uOworICAgICAgICBlbHNlCisgICAgICAgICAgcG9zaXRpb24gPSAwOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX0ZPUk1BVF9ERUZBVUxUOgorICAgICAgaWYgKHNyYy0+c2VnbWVudC5yYXRlID49IDAuMCkKKyAgICAgICAgcG9zaXRpb24gPSBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKGJ1Zik7CisgICAgICBlbHNlCisgICAgICAgIHBvc2l0aW9uID0gR1NUX0JVRkZFUl9PRkZTRVQgKGJ1Zik7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgcG9zaXRpb24gPSAtMTsKKyAgICAgIGJyZWFrOworICB9CisgIGlmIChwb3NpdGlvbiAhPSAtMSkgeworICAgIGlmIChzcmMtPnNlZ21lbnQucmF0ZSA+PSAwLjApIHsKKyAgICAgIC8qIHBvc2l0aXZlIHJhdGUsIGNoZWNrIGlmIHdlIHJlYWNoZWQgdGhlIHN0b3AgKi8KKyAgICAgIGlmIChzcmMtPnNlZ21lbnQuc3RvcCAhPSAtMSkgeworICAgICAgICBpZiAocG9zaXRpb24gPj0gc3JjLT5zZWdtZW50LnN0b3ApIHsKKyAgICAgICAgICBlb3MgPSBUUlVFOworICAgICAgICAgIHBvc2l0aW9uID0gc3JjLT5zZWdtZW50LnN0b3A7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgLyogbmVnYXRpdmUgcmF0ZSwgY2hlY2sgaWYgd2UgcmVhY2hlZCB0aGUgc3RhcnQuIHN0YXJ0IGlzIGFsd2F5cyBzZXQgdG8KKyAgICAgICAqIHNvbWV0aGluZyBkaWZmZXJlbnQgZnJvbSAtMSAqLworICAgICAgaWYgKHBvc2l0aW9uIDw9IHNyYy0+c2VnbWVudC5zdGFydCkgeworICAgICAgICBlb3MgPSBUUlVFOworICAgICAgICBwb3NpdGlvbiA9IHNyYy0+c2VnbWVudC5zdGFydDsKKyAgICAgIH0KKyAgICAgIC8qIHdoZW4gZ29pbmcgcmV2ZXJzZSwgYWxsIGJ1ZmZlcnMgYXJlIERJU0NPTlQgKi8KKyAgICAgIHNyYy0+cHJpdi0+ZGlzY29udCA9IFRSVUU7CisgICAgfQorICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKKyAgICBzcmMtPnNlZ21lbnQucG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKKyAgfQorCisgIGlmIChHX1VOTElLRUxZIChzcmMtPnByaXYtPmRpc2NvbnQpKSB7CisgICAgYnVmID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChidWYpOworICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpOworICAgIHNyYy0+cHJpdi0+ZGlzY29udCA9IEZBTFNFOworICB9CisgIEdTVF9MSVZFX1VOTE9DSyAoc3JjKTsKKworICByZXQgPSBnc3RfcGFkX3B1c2ggKHBhZCwgYnVmKTsKKyAgaWYgKEdfVU5MSUtFTFkgKHJldCAhPSBHU1RfRkxPV19PSykpIHsKKyAgICBHU1RfSU5GT19PQkpFQ1QgKHNyYywgInBhdXNpbmcgYWZ0ZXIgZ3N0X3BhZF9wdXNoKCkgPSAlcyIsCisgICAgICAgIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKKyAgICBnb3RvIHBhdXNlOworICB9CisKKyAgaWYgKEdfVU5MSUtFTFkgKGVvcykpIHsKKyAgICBHU1RfSU5GT19PQkpFQ1QgKHNyYywgInBhdXNpbmcgYWZ0ZXIgZW5kIG9mIHNlZ21lbnQiKTsKKyAgICByZXQgPSBHU1RfRkxPV19VTkVYUEVDVEVEOworICAgIGdvdG8gcGF1c2U7CisgIH0KKworZG9uZToKKyAgcmV0dXJuOworCisgIC8qIHNwZWNpYWwgY2FzZXMgKi8KK2ZsdXNoaW5nOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAid2UgYXJlIGZsdXNoaW5nIik7CisgICAgR1NUX0xJVkVfVU5MT0NLIChzcmMpOworICAgIHJldCA9IEdTVF9GTE9XX1dST05HX1NUQVRFOworICAgIGdvdG8gcGF1c2U7CisgIH0KK3BhdXNlOgorICB7CisgICAgY29uc3QgZ2NoYXIgKnJlYXNvbiA9IGdzdF9mbG93X2dldF9uYW1lIChyZXQpOworICAgIEdzdEV2ZW50ICpldmVudDsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInBhdXNpbmcgdGFzaywgcmVhc29uICVzIiwgcmVhc29uKTsKKyAgICBzcmMtPnJ1bm5pbmcgPSBGQUxTRTsKKyAgICBnc3RfcGFkX3BhdXNlX3Rhc2sgKHBhZCk7CisgICAgaWYgKHJldCA9PSBHU1RfRkxPV19VTkVYUEVDVEVEKSB7CisgICAgICBnYm9vbGVhbiBmbGFnX3NlZ21lbnQ7CisgICAgICBHc3RGb3JtYXQgZm9ybWF0OworICAgICAgZ2ludDY0IHBvc2l0aW9uOworCisgICAgICAvKiBwZXJmb3JtIEVPUyBsb2dpYyAqLworICAgICAgZmxhZ19zZWdtZW50ID0gKHNyYy0+c2VnbWVudC5mbGFncyAmIEdTVF9TRUVLX0ZMQUdfU0VHTUVOVCkgIT0gMDsKKyAgICAgIGZvcm1hdCA9IHNyYy0+c2VnbWVudC5mb3JtYXQ7CisgICAgICBwb3NpdGlvbiA9IHNyYy0+c2VnbWVudC5wb3NpdGlvbjsKKworICAgICAgaWYgKGZsYWdfc2VnbWVudCkgeworICAgICAgICBHc3RNZXNzYWdlICptZXNzYWdlOworCisgICAgICAgIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lIChHU1RfT0JKRUNUX0NBU1QgKHNyYyksCisgICAgICAgICAgICBmb3JtYXQsIHBvc2l0aW9uKTsKKyAgICAgICAgZ3N0X21lc3NhZ2Vfc2V0X3NlcW51bSAobWVzc2FnZSwgc3JjLT5wcml2LT5zZXFudW0pOworICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKHNyYyksIG1lc3NhZ2UpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2VvcyAoKTsKKyAgICAgICAgZ3N0X2V2ZW50X3NldF9zZXFudW0gKGV2ZW50LCBzcmMtPnByaXYtPnNlcW51bSk7CisgICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLCBldmVudCk7CisgICAgICB9CisgICAgfSBlbHNlIGlmIChyZXQgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCB8fCByZXQgPD0gR1NUX0ZMT1dfVU5FWFBFQ1RFRCkgeworICAgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2VvcyAoKTsKKyAgICAgIGdzdF9ldmVudF9zZXRfc2VxbnVtIChldmVudCwgc3JjLT5wcml2LT5zZXFudW0pOworICAgICAgLyogZm9yIGZhdGFsIGVycm9ycyB3ZSBwb3N0IGFuIGVycm9yIG1lc3NhZ2UsIHBvc3QgdGhlIGVycm9yCisgICAgICAgKiBmaXJzdCBzbyB0aGUgYXBwIGtub3dzIGFib3V0IHRoZSBlcnJvciBmaXJzdC4KKyAgICAgICAqIEFsc28gZG9uJ3QgZG8gdGhpcyBmb3IgV1JPTkdfU1RBVEUgYmVjYXVzZSBpdCBoYXBwZW5zCisgICAgICAgKiBkdWUgdG8gZmx1c2hpbmcgYW5kIHBvc3RpbmcgYW4gZXJyb3IgbWVzc2FnZSBiZWNhdXNlIG9mCisgICAgICAgKiB0aGF0IGlzIHRoZSB3cm9uZyB0aGluZyB0byBkbywgZS5nLiB3aGVuIHdlJ3JlIGRvaW5nCisgICAgICAgKiBhIGZsdXNoaW5nIHNlZWsuICovCisgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBTVFJFQU0sIEZBSUxFRCwKKyAgICAgICAgICAoXygiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIpKSwKKyAgICAgICAgICAoInN0cmVhbWluZyB0YXNrIHBhdXNlZCwgcmVhc29uICVzICglZCkiLCByZWFzb24sIHJldCkpOworICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsIGV2ZW50KTsKKyAgICB9CisgICAgZ290byBkb25lOworICB9CitudWxsX2J1ZmZlcjoKKyAgeworICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFNUUkVBTSwgRkFJTEVELAorICAgICAgICAoXygiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIpKSwgKCJlbGVtZW50IHJldHVybmVkIE5VTEwgYnVmZmVyIikpOworICAgIEdTVF9MSVZFX1VOTE9DSyAoc3JjKTsKKyAgICBnb3RvIGRvbmU7CisgIH0KK30KKworc3RhdGljIGdib29sZWFuCitnc3RfYmFzZV9zcmNfc2V0X2FsbG9jYXRpb24gKEdzdEJhc2VTcmMgKiBiYXNlc3JjLCBHc3RCdWZmZXJQb29sICogcG9vbCwKKyAgICBjb25zdCBHc3RBbGxvY2F0b3IgKiBhbGxvY2F0b3IsIGd1aW50IHByZWZpeCwgZ3VpbnQgYWxpZ25tZW50KQoreworICBHc3RCdWZmZXJQb29sICpvbGRwb29sOworICBHc3RCYXNlU3JjUHJpdmF0ZSAqcHJpdiA9IGJhc2VzcmMtPnByaXY7CisKKyAgaWYgKHBvb2wpIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAiYWN0aXZhdGUgcG9vbCIpOworICAgIGlmICghZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUgKHBvb2wsIFRSVUUpKQorICAgICAgZ290byBhY3RpdmF0ZV9mYWlsZWQ7CisgIH0KKworICBHU1RfT0JKRUNUX0xPQ0sgKGJhc2VzcmMpOworICBvbGRwb29sID0gcHJpdi0+cG9vbDsKKyAgcHJpdi0+cG9vbCA9IHBvb2w7CisKKyAgcHJpdi0+YWxsb2NhdG9yID0gYWxsb2NhdG9yOworCisgIHByaXYtPnByZWZpeCA9IHByZWZpeDsKKyAgcHJpdi0+YWxpZ25tZW50ID0gYWxpZ25tZW50OworICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNyYyk7CisKKyAgaWYgKG9sZHBvb2wpIHsKKyAgICAvKiBvbmx5IGRlYWN0aXZhdGUgaWYgdGhlIHBvb2wgaXMgbm90IHRoZSBvbmUgd2UncmUgdXNpbmcgKi8KKyAgICBpZiAob2xkcG9vbCAhPSBwb29sKSB7CisgICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAiZGVhY3RpdmF0ZSBvbGQgcG9vbCIpOworICAgICAgZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUgKG9sZHBvb2wsIEZBTFNFKTsKKyAgICB9CisgICAgZ3N0X29iamVjdF91bnJlZiAob2xkcG9vbCk7CisgIH0KKyAgcmV0dXJuIFRSVUU7CisKKyAgLyogRVJST1JTICovCithY3RpdmF0ZV9mYWlsZWQ6CisgIHsKKyAgICBHU1RfRVJST1JfT0JKRUNUIChiYXNlc3JjLCAiZmFpbGVkIHRvIGFjdGl2YXRlIGJ1ZmZlcnBvb2wuIik7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2Jhc2Vfc3JjX2FjdGl2YXRlX3Bvb2wgKEdzdEJhc2VTcmMgKiBiYXNlc3JjLCBnYm9vbGVhbiBhY3RpdmUpCit7CisgIEdzdEJhc2VTcmNQcml2YXRlICpwcml2ID0gYmFzZXNyYy0+cHJpdjsKKyAgR3N0QnVmZmVyUG9vbCAqcG9vbDsKKyAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKGJhc2VzcmMpOworICBpZiAoKHBvb2wgPSBwcml2LT5wb29sKSkKKyAgICBwb29sID0gZ3N0X29iamVjdF9yZWYgKHBvb2wpOworICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNyYyk7CisKKyAgaWYgKHBvb2wpIHsKKyAgICByZXMgPSBnc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZSAocG9vbCwgYWN0aXZlKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChwb29sKTsKKyAgfQorICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iYXNlX3NyY19wcmVwYXJlX2FsbG9jYXRpb24gKEdzdEJhc2VTcmMgKiBiYXNlc3JjLCBHc3RDYXBzICogY2FwcykKK3sKKyAgR3N0QmFzZVNyY0NsYXNzICpiY2xhc3M7CisgIGdib29sZWFuIHJlc3VsdCA9IFRSVUU7CisgIEdzdFF1ZXJ5ICpxdWVyeTsKKyAgR3N0QnVmZmVyUG9vbCAqcG9vbCA9IE5VTEw7CisgIGNvbnN0IEdzdEFsbG9jYXRvciAqYWxsb2NhdG9yID0gTlVMTDsKKyAgZ3VpbnQgc2l6ZSwgbWluLCBtYXgsIHByZWZpeCwgYWxpZ25tZW50OworCisgIGJjbGFzcyA9IEdTVF9CQVNFX1NSQ19HRVRfQ0xBU1MgKGJhc2VzcmMpOworCisgIC8qIG1ha2UgcXVlcnkgYW5kIGxldCBwZWVyIHBhZCBhbnN3ZXIsIHdlIGRvbid0IHJlYWxseSBjYXJlIGlmIGl0IHdvcmtlZCBvcgorICAgKiBub3QsIGlmIGl0IGZhaWxlZCwgdGhlIGFsbG9jYXRpb24gcXVlcnkgd291bGQgY29udGFpbiBkZWZhdWx0cyBhbmQgdGhlCisgICAqIHN1YmNsYXNzIHdvdWxkIHRoZW4gc2V0IGJldHRlciB2YWx1ZXMgaWYgbmVlZGVkICovCisgIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19hbGxvY2F0aW9uIChjYXBzLCBUUlVFKTsKKyAgaWYgKCFnc3RfcGFkX3BlZXJfcXVlcnkgKGJhc2VzcmMtPnNyY3BhZCwgcXVlcnkpKSB7CisgICAgLyogbm90IGEgcHJvYmxlbSwganVzdCBkZWJ1ZyBhIGxpdHRsZSAqLworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJwZWVyIEFMTE9DQVRJT04gcXVlcnkgZmFpbGVkIik7CisgIH0KKworICBpZiAoR19MSUtFTFkgKGJjbGFzcy0+ZGVjaWRlX2FsbG9jYXRpb24pKQorICAgIHJlc3VsdCA9IGJjbGFzcy0+ZGVjaWRlX2FsbG9jYXRpb24gKGJhc2VzcmMsIHF1ZXJ5KTsKKworICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAiQUxMT0NBVElPTiAoJWQpIHBhcmFtczogJSIgR1NUX1BUUl9GT1JNQVQsIHJlc3VsdCwKKyAgICAgIHF1ZXJ5KTsKKyAgZ3N0X3F1ZXJ5X3BhcnNlX2FsbG9jYXRpb25fcGFyYW1zIChxdWVyeSwgJnNpemUsICZtaW4sICZtYXgsICZwcmVmaXgsCisgICAgICAmYWxpZ25tZW50LCAmcG9vbCk7CisKKyAgaWYgKHNpemUgPT0gMCkgeworICAgIGNvbnN0IGdjaGFyICptZW0gPSBOVUxMOworCisgICAgLyogbm8gc2l6ZSwgd2UgaGF2ZSB2YXJpYWJsZSBzaXplIGJ1ZmZlcnMgKi8KKyAgICBpZiAoZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fbWVtb3JpZXMgKHF1ZXJ5KSA+IDApIHsKKyAgICAgIG1lbSA9IGdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9tZW1vcnkgKHF1ZXJ5LCAwKTsKKyAgICB9CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgIjAgc2l6ZSwgZ2V0dGluZyBhbGxvY2F0b3IgJXMiLAorICAgICAgICBHU1RfU1RSX05VTEwgKG1lbSkpOworICAgIGFsbG9jYXRvciA9IGdzdF9hbGxvY2F0b3JfZmluZCAobWVtKTsKKyAgfSBlbHNlIGlmIChwb29sID09IE5VTEwpIHsKKyAgICAvKiBmaXhlZCBzaXplLCB3ZSBjYW4gdXNlIGEgYnVmZmVycG9vbCAqLworICAgIEdzdFN0cnVjdHVyZSAqY29uZmlnOworCisgICAgLyogd2UgZGlkIG5vdCBnZXQgYSBwb29sLCBtYWtlIG9uZSBvdXJzZWx2ZXMgdGhlbiAqLworICAgIHBvb2wgPSBnc3RfYnVmZmVyX3Bvb2xfbmV3ICgpOworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJubyBwb29sLCBtYWtpbmcgbmV3IHBvb2wiKTsKKworICAgIGNvbmZpZyA9IGdzdF9idWZmZXJfcG9vbF9nZXRfY29uZmlnIChwb29sKTsKKyAgICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldCAoY29uZmlnLCBjYXBzLCBzaXplLCBtaW4sIG1heCwgcHJlZml4LAorICAgICAgICBhbGlnbm1lbnQpOworICAgIGdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnIChwb29sLCBjb25maWcpOworICB9CisKKyAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7CisKKyAgcmVzdWx0ID0KKyAgICAgIGdzdF9iYXNlX3NyY19zZXRfYWxsb2NhdGlvbiAoYmFzZXNyYywgcG9vbCwgYWxsb2NhdG9yLCBwcmVmaXgsIGFsaWdubWVudCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKKworfQorCisvKiBkZWZhdWx0IG5lZ290aWF0aW9uIGNvZGUuCisgKgorICogVGFrZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiBzcmMgYW5kIHNpbmsgcGFkcywgdGFrZSBmaXJzdAorICogY2FwcyBhbmQgZml4YXRlLgorICovCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iYXNlX3NyY19kZWZhdWx0X25lZ290aWF0ZSAoR3N0QmFzZVNyYyAqIGJhc2VzcmMpCit7CisgIEdzdENhcHMgKnRoaXNjYXBzOworICBHc3RDYXBzICpjYXBzID0gTlVMTDsKKyAgR3N0Q2FwcyAqcGVlcmNhcHMgPSBOVUxMOworICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKKworICAvKiBmaXJzdCBzZWUgd2hhdCBpcyBwb3NzaWJsZSBvbiBvdXIgc291cmNlIHBhZCAqLworICB0aGlzY2FwcyA9IGdzdF9wYWRfZ2V0X2NhcHMgKEdTVF9CQVNFX1NSQ19QQUQgKGJhc2VzcmMpLCBOVUxMKTsKKyAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgImNhcHMgb2Ygc3JjOiAlIiBHU1RfUFRSX0ZPUk1BVCwgdGhpc2NhcHMpOworICAvKiBub3RoaW5nIG9yIGFueXRoaW5nIGlzIGFsbG93ZWQsIHdlJ3JlIGRvbmUgKi8KKyAgaWYgKHRoaXNjYXBzID09IE5VTEwgfHwgZ3N0X2NhcHNfaXNfYW55ICh0aGlzY2FwcykpCisgICAgZ290byBub19uZWdvX25lZWRlZDsKKworICBpZiAoR19VTkxJS0VMWSAoZ3N0X2NhcHNfaXNfZW1wdHkgKHRoaXNjYXBzKSkpCisgICAgZ290byBub19jYXBzOworCisgIC8qIGdldCB0aGUgcGVlciBjYXBzICovCisgIHBlZXJjYXBzID0gZ3N0X3BhZF9wZWVyX2dldF9jYXBzIChHU1RfQkFTRV9TUkNfUEFEIChiYXNlc3JjKSwgdGhpc2NhcHMpOworICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAiY2FwcyBvZiBwZWVyOiAlIiBHU1RfUFRSX0ZPUk1BVCwgcGVlcmNhcHMpOworICBpZiAocGVlcmNhcHMpIHsKKyAgICAvKiBUaGUgcmVzdWx0IGlzIGFscmVhZHkgYSBzdWJzZXQgb2Ygb3VyIGNhcHMgKi8KKyAgICBjYXBzID0gcGVlcmNhcHM7CisgICAgZ3N0X2NhcHNfdW5yZWYgKHRoaXNjYXBzKTsKKyAgfSBlbHNlIHsKKyAgICAvKiBubyBwZWVyLCB3b3JrIHdpdGggb3VyIG93biBjYXBzIHRoZW4gKi8KKyAgICBjYXBzID0gdGhpc2NhcHM7CisgIH0KKyAgaWYgKGNhcHMgJiYgIWdzdF9jYXBzX2lzX2VtcHR5IChjYXBzKSkgeworICAgIGNhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChjYXBzKTsKKworICAgIC8qIHRha2UgZmlyc3QgKGFuZCBiZXN0LCBzaW5jZSB0aGV5IGFyZSBzb3J0ZWQpIHBvc3NpYmlsaXR5ICovCisgICAgZ3N0X2NhcHNfdHJ1bmNhdGUgKGNhcHMpOworCisgICAgLyogbm93IGZpeGF0ZSAqLworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJoYXZlIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKKyAgICBpZiAoZ3N0X2NhcHNfaXNfYW55IChjYXBzKSkgeworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgImFueSBjYXBzLCB3ZSBzdG9wIik7CisgICAgICAvKiBobW0sIHN0aWxsIGFueXRoaW5nLCBzbyBlbGVtZW50IGNhbiBkbyBhbnl0aGluZyBhbmQKKyAgICAgICAqIG5lZ28gaXMgbm90IG5lZWRlZCAqLworICAgICAgcmVzdWx0ID0gVFJVRTsKKyAgICB9IGVsc2UgeworICAgICAgZ3N0X3BhZF9maXhhdGVfY2FwcyAoR1NUX0JBU0VfU1JDX1BBRCAoYmFzZXNyYyksIGNhcHMpOworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgImZpeGF0ZWQgdG86ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKKyAgICAgIGlmIChnc3RfY2Fwc19pc19maXhlZCAoY2FwcykpIHsKKyAgICAgICAgLyogeWF5LCBmaXhlZCBjYXBzLCB1c2UgdGhvc2UgdGhlbiwgaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBzdWJjbGFzcyBkb2VzCisgICAgICAgICAqIG5vdCBhY2NlcHQgdGhpcyBjYXBzIGFmdGVyIGFsbCBhbmQgd2UgaGF2ZSB0byBmYWlsLiAqLworICAgICAgICByZXN1bHQgPSBnc3RfYmFzZV9zcmNfc2V0X2NhcHMgKGJhc2VzcmMsIGNhcHMpOworICAgICAgfQorICAgIH0KKyAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7CisgIH0gZWxzZSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgIm5vIGNvbW1vbiBjYXBzIik7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKKworbm9fbmVnb19uZWVkZWQ6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAibm8gbmVnb3RpYXRpb24gbmVlZGVkIik7CisgICAgaWYgKHRoaXNjYXBzKQorICAgICAgZ3N0X2NhcHNfdW5yZWYgKHRoaXNjYXBzKTsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorbm9fY2FwczoKKyAgeworICAgIEdTVF9FTEVNRU5UX0VSUk9SIChiYXNlc3JjLCBTVFJFQU0sIEZPUk1BVCwKKyAgICAgICAgKCJObyBzdXBwb3J0ZWQgZm9ybWF0cyBmb3VuZCIpLAorICAgICAgICAoIlRoaXMgZWxlbWVudCBkaWQgbm90IHByb2R1Y2UgdmFsaWQgY2FwcyIpKTsKKyAgICBpZiAodGhpc2NhcHMpCisgICAgICBnc3RfY2Fwc191bnJlZiAodGhpc2NhcHMpOworICAgIHJldHVybiBUUlVFOworICB9Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2Jhc2Vfc3JjX25lZ290aWF0ZSAoR3N0QmFzZVNyYyAqIGJhc2VzcmMpCit7CisgIEdzdEJhc2VTcmNDbGFzcyAqYmNsYXNzOworICBnYm9vbGVhbiByZXN1bHQ7CisKKyAgYmNsYXNzID0gR1NUX0JBU0VfU1JDX0dFVF9DTEFTUyAoYmFzZXNyYyk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgInN0YXJ0aW5nIG5lZ290aWF0aW9uIik7CisKKyAgaWYgKEdfTElLRUxZIChiY2xhc3MtPm5lZ290aWF0ZSkpCisgICAgcmVzdWx0ID0gYmNsYXNzLT5uZWdvdGlhdGUgKGJhc2VzcmMpOworICBlbHNlCisgICAgcmVzdWx0ID0gVFJVRTsKKworICBpZiAoR19MSUtFTFkgKHJlc3VsdCkpIHsKKyAgICBHc3RDYXBzICpjYXBzOworCisgICAgY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAoYmFzZXNyYy0+c3JjcGFkKTsKKworICAgIHJlc3VsdCA9IGdzdF9iYXNlX3NyY19wcmVwYXJlX2FsbG9jYXRpb24gKGJhc2VzcmMsIGNhcHMpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2Jhc2Vfc3JjX3N0YXJ0IChHc3RCYXNlU3JjICogYmFzZXNyYykKK3sKKyAgR3N0QmFzZVNyY0NsYXNzICpiY2xhc3M7CisgIGdib29sZWFuIHJlc3VsdCwgaGF2ZV9zaXplOworICBndWludDY0IHNpemU7CisgIGdib29sZWFuIHNlZWthYmxlOworICBHc3RGb3JtYXQgZm9ybWF0OworCisgIGlmIChHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChiYXNlc3JjLCBHU1RfQkFTRV9TUkNfU1RBUlRFRCkpCisgICAgcmV0dXJuIFRSVUU7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgInN0YXJ0aW5nIHNvdXJjZSIpOworCisgIGJhc2VzcmMtPm51bV9idWZmZXJzX2xlZnQgPSBiYXNlc3JjLT5udW1fYnVmZmVyczsKKworICBHU1RfT0JKRUNUX0xPQ0sgKGJhc2VzcmMpOworICBnc3Rfc2VnbWVudF9pbml0ICgmYmFzZXNyYy0+c2VnbWVudCwgYmFzZXNyYy0+c2VnbWVudC5mb3JtYXQpOworICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNyYyk7CisKKyAgYmFzZXNyYy0+cnVubmluZyA9IEZBTFNFOworICBiYXNlc3JjLT5wcml2LT5zZWdtZW50X3BlbmRpbmcgPSBGQUxTRTsKKworICBiY2xhc3MgPSBHU1RfQkFTRV9TUkNfR0VUX0NMQVNTIChiYXNlc3JjKTsKKyAgaWYgKGJjbGFzcy0+c3RhcnQpCisgICAgcmVzdWx0ID0gYmNsYXNzLT5zdGFydCAoYmFzZXNyYyk7CisgIGVsc2UKKyAgICByZXN1bHQgPSBUUlVFOworCisgIGlmICghcmVzdWx0KQorICAgIGdvdG8gY291bGRfbm90X3N0YXJ0OworCisgIEdTVF9PQkpFQ1RfRkxBR19TRVQgKGJhc2VzcmMsIEdTVF9CQVNFX1NSQ19TVEFSVEVEKTsKKworICBmb3JtYXQgPSBiYXNlc3JjLT5zZWdtZW50LmZvcm1hdDsKKworICAvKiBmaWd1cmUgb3V0IHRoZSBzaXplICovCisgIGhhdmVfc2l6ZSA9IEZBTFNFOworICBzaXplID0gLTE7CisgIGlmIChmb3JtYXQgPT0gR1NUX0ZPUk1BVF9CWVRFUykgeworICAgIGlmIChiY2xhc3MtPmdldF9zaXplKSB7CisgICAgICBpZiAoIShoYXZlX3NpemUgPSBiY2xhc3MtPmdldF9zaXplIChiYXNlc3JjLCAmc2l6ZSkpKQorICAgICAgICBzaXplID0gLTE7CisgICAgfQorICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJzZXR0aW5nIHNpemUgJSIgR19HVUlOVDY0X0ZPUk1BVCwgc2l6ZSk7CisgICAgLyogb25seSB1cGRhdGUgdGhlIHNpemUgd2hlbiBvcGVyYXRpbmcgaW4gYnl0ZXMsIHN1YmNsYXNzIGlzIHN1cHBvc2VkCisgICAgICogdG8gc2V0IGR1cmF0aW9uIGluIHRoZSBzdGFydCBtZXRob2QgZm9yIG90aGVyIGZvcm1hdHMgKi8KKyAgICBHU1RfT0JKRUNUX0xPQ0sgKGJhc2VzcmMpOworICAgIGJhc2VzcmMtPnNlZ21lbnQuZHVyYXRpb24gPSBzaXplOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiYXNlc3JjKTsKKyAgfQorCisgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsCisgICAgICAiZm9ybWF0OiAlcywgaGF2ZSBzaXplOiAlZCwgc2l6ZTogJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBkdXJhdGlvbjogJSIKKyAgICAgIEdfR0lOVDY0X0ZPUk1BVCwgZ3N0X2Zvcm1hdF9nZXRfbmFtZSAoZm9ybWF0KSwgaGF2ZV9zaXplLCBzaXplLAorICAgICAgYmFzZXNyYy0+c2VnbWVudC5kdXJhdGlvbik7CisKKyAgc2Vla2FibGUgPSBnc3RfYmFzZV9zcmNfc2Vla2FibGUgKGJhc2VzcmMpOworICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAiaXMgc2Vla2FibGU6ICVkIiwgc2Vla2FibGUpOworCisgIC8qIHVwZGF0ZSBmb3IgcmFuZG9tIGFjY2VzcyBmbGFnICovCisgIGJhc2VzcmMtPnJhbmRvbV9hY2Nlc3MgPSBzZWVrYWJsZSAmJiBmb3JtYXQgPT0gR1NUX0ZPUk1BVF9CWVRFUzsKKworICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAiaXMgcmFuZG9tX2FjY2VzczogJWQiLCBiYXNlc3JjLT5yYW5kb21fYWNjZXNzKTsKKworICBnc3RfcGFkX21hcmtfcmVjb25maWd1cmUgKEdTVF9CQVNFX1NSQ19QQUQgKGJhc2VzcmMpKTsKKworICByZXR1cm4gVFJVRTsKKworICAvKiBFUlJPUiAqLworY291bGRfbm90X3N0YXJ0OgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgImNvdWxkIG5vdCBzdGFydCIpOworICAgIC8qIHN1YmNsYXNzIGlzIHN1cHBvc2VkIHRvIHBvc3QgYSBtZXNzYWdlLiBXZSBkb24ndCBoYXZlIHRvIGNhbGwgX3N0b3AuICovCisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2Jhc2Vfc3JjX3N0b3AgKEdzdEJhc2VTcmMgKiBiYXNlc3JjKQoreworICBHc3RCYXNlU3JjQ2xhc3MgKmJjbGFzczsKKyAgZ2Jvb2xlYW4gcmVzdWx0ID0gVFJVRTsKKworICBpZiAoIUdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKGJhc2VzcmMsIEdTVF9CQVNFX1NSQ19TVEFSVEVEKSkKKyAgICByZXR1cm4gVFJVRTsKKworICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAic3RvcHBpbmcgc291cmNlIik7CisKKyAgYmNsYXNzID0gR1NUX0JBU0VfU1JDX0dFVF9DTEFTUyAoYmFzZXNyYyk7CisgIGlmIChiY2xhc3MtPnN0b3ApCisgICAgcmVzdWx0ID0gYmNsYXNzLT5zdG9wIChiYXNlc3JjKTsKKworICBnc3RfYmFzZV9zcmNfc2V0X2FsbG9jYXRpb24gKGJhc2VzcmMsIE5VTEwsIE5VTEwsIDAsIDApOworCisgIGlmIChyZXN1bHQpCisgICAgR1NUX09CSkVDVF9GTEFHX1VOU0VUIChiYXNlc3JjLCBHU1RfQkFTRV9TUkNfU1RBUlRFRCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogc3RhcnQgb3Igc3RvcCBmbHVzaGluZyBkYXRhcHJvY2Vzc2luZworICovCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iYXNlX3NyY19zZXRfZmx1c2hpbmcgKEdzdEJhc2VTcmMgKiBiYXNlc3JjLAorICAgIGdib29sZWFuIGZsdXNoaW5nLCBnYm9vbGVhbiBsaXZlX3BsYXksIGdib29sZWFuIHVubG9jaywgZ2Jvb2xlYW4gKiBwbGF5aW5nKQoreworICBHc3RCYXNlU3JjQ2xhc3MgKmJjbGFzczsKKworICBiY2xhc3MgPSBHU1RfQkFTRV9TUkNfR0VUX0NMQVNTIChiYXNlc3JjKTsKKworICBpZiAoZmx1c2hpbmcgJiYgdW5sb2NrKSB7CisgICAgZ3N0X2Jhc2Vfc3JjX2FjdGl2YXRlX3Bvb2wgKGJhc2VzcmMsIEZBTFNFKTsKKyAgICAvKiB1bmxvY2sgYW55IHN1YmNsYXNzZXMsIHdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgZ3JhYmJpbmcgdGhlCisgICAgICogTElWRV9MT0NLIHNpbmNlIHdlIGhvbGQgdGhpcyBsb2NrIGJlZm9yZSBnb2luZyBpbnRvIDo6Y3JlYXRlLiBXZSBwYXNzIGFuCisgICAgICogdW5sb2NrIHRvIHRoZSBwYXJhbXMgYmVjYXVzZSBvZiBiYWNrd2FyZHMgY29tcGF0IChzZWUgc2VlayBoYW5kbGVyKSovCisgICAgaWYgKGJjbGFzcy0+dW5sb2NrKQorICAgICAgYmNsYXNzLT51bmxvY2sgKGJhc2VzcmMpOworICB9CisKKyAgLyogdGhlIGxpdmUgbG9jayBpcyByZWxlYXNlZCB3aGVuIHdlIGFyZSBibG9ja2VkLCB3YWl0aW5nIGZvciBwbGF5aW5nIG9yCisgICAqIHdoZW4gd2Ugc3luYyB0byB0aGUgY2xvY2suICovCisgIEdTVF9MSVZFX0xPQ0sgKGJhc2VzcmMpOworICBpZiAocGxheWluZykKKyAgICAqcGxheWluZyA9IGJhc2VzcmMtPmxpdmVfcnVubmluZzsKKyAgYmFzZXNyYy0+cHJpdi0+Zmx1c2hpbmcgPSBmbHVzaGluZzsKKyAgaWYgKGZsdXNoaW5nKSB7CisgICAgLyogaWYgd2UgYXJlIGxvY2tlZCBpbiB0aGUgbGl2ZSBsb2NrLCBzaWduYWwgaXQgdG8gbWFrZSBpdCBmbHVzaCAqLworICAgIGJhc2VzcmMtPmxpdmVfcnVubmluZyA9IFRSVUU7CisKKyAgICAvKiBjbGVhciBwZW5kaW5nIEVPUyBpZiBhbnkgKi8KKyAgICBnX2F0b21pY19pbnRfc2V0ICgmYmFzZXNyYy0+cHJpdi0+cGVuZGluZ19lb3MsIEZBTFNFKTsKKworICAgIC8qIHN0ZXAgMSwgbm93IHRoYXQgd2UgaGF2ZSB0aGUgTElWRSBsb2NrLCBjbGVhciBvdXIgdW5sb2NrIHJlcXVlc3QgKi8KKyAgICBpZiAoYmNsYXNzLT51bmxvY2tfc3RvcCkKKyAgICAgIGJjbGFzcy0+dW5sb2NrX3N0b3AgKGJhc2VzcmMpOworCisgICAgLyogc3RlcCAyLCB1bmJsb2NrIGNsb2NrIHN5bmMgKGlmIGFueSkgb3IgYW55IG90aGVyIGJsb2NraW5nIHRoaW5nICovCisgICAgaWYgKGJhc2VzcmMtPmNsb2NrX2lkKQorICAgICAgZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUgKGJhc2VzcmMtPmNsb2NrX2lkKTsKKyAgfSBlbHNlIHsKKyAgICAvKiBzaWduYWwgdGhlIGxpdmUgc291cmNlIHRoYXQgaXQgY2FuIHN0YXJ0IHBsYXlpbmcgKi8KKyAgICBiYXNlc3JjLT5saXZlX3J1bm5pbmcgPSBsaXZlX3BsYXk7CisKKyAgICBnc3RfYmFzZV9zcmNfYWN0aXZhdGVfcG9vbCAoYmFzZXNyYywgVFJVRSk7CisKKyAgICAvKiBXaGVuIHVubG9ja2luZyBkcm9wIGFsbCBkZWxheWVkIGV2ZW50cyAqLworICAgIGlmICh1bmxvY2spIHsKKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoYmFzZXNyYyk7CisgICAgICBpZiAoYmFzZXNyYy0+cHJpdi0+cGVuZGluZ19ldmVudHMpIHsKKyAgICAgICAgZ19saXN0X2ZvcmVhY2ggKGJhc2VzcmMtPnByaXYtPnBlbmRpbmdfZXZlbnRzLCAoR0Z1bmMpIGdzdF9ldmVudF91bnJlZiwKKyAgICAgICAgICAgIE5VTEwpOworICAgICAgICBnX2xpc3RfZnJlZSAoYmFzZXNyYy0+cHJpdi0+cGVuZGluZ19ldmVudHMpOworICAgICAgICBiYXNlc3JjLT5wcml2LT5wZW5kaW5nX2V2ZW50cyA9IE5VTEw7CisgICAgICAgIGdfYXRvbWljX2ludF9zZXQgKCZiYXNlc3JjLT5wcml2LT5oYXZlX2V2ZW50cywgRkFMU0UpOworICAgICAgfQorICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJhc2VzcmMpOworICAgIH0KKyAgfQorICBHU1RfTElWRV9TSUdOQUwgKGJhc2VzcmMpOworICBHU1RfTElWRV9VTkxPQ0sgKGJhc2VzcmMpOworCisgIHJldHVybiBUUlVFOworfQorCisvKiB0aGUgcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IGEgbGl2ZSBzb3VyY2UgYmxvY2tzIGluIHRoZQorICogTElWRSBsb2NrIG9yIGxlYXZlcyB0aGUgTElWRSBsb2NrIGFuZCBjb250aW51ZXMgcGxheWluZy4gKi8KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2Jhc2Vfc3JjX3NldF9wbGF5aW5nIChHc3RCYXNlU3JjICogYmFzZXNyYywgZ2Jvb2xlYW4gbGl2ZV9wbGF5KQoreworICBHc3RCYXNlU3JjQ2xhc3MgKmJjbGFzczsKKworICBiY2xhc3MgPSBHU1RfQkFTRV9TUkNfR0VUX0NMQVNTIChiYXNlc3JjKTsKKworICAvKiB1bmxvY2sgc3ViY2xhc3NlcyBsb2NrZWQgaW4gOjpjcmVhdGUsIHdlIG9ubHkgZG8gdGhpcyB3aGVuIHdlIHN0b3AgcGxheWluZy4gKi8KKyAgaWYgKCFsaXZlX3BsYXkpIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAidW5sb2NrIik7CisgICAgaWYgKGJjbGFzcy0+dW5sb2NrKQorICAgICAgYmNsYXNzLT51bmxvY2sgKGJhc2VzcmMpOworICB9CisKKyAgLyogd2UgYXJlIG5vdyBhYmxlIHRvIGdyYWIgdGhlIExJVkUgbG9jaywgd2hlbiB3ZSBnZXQgaXQsIHdlIGNhbiBiZQorICAgKiB3YWl0aW5nIGZvciBQTEFZSU5HIHdoaWxlIGJsb2NrZWQgaW4gdGhlIExJVkUgY29uZCBvciB3ZSBjYW4gYmUgd2FpdGluZworICAgKiBmb3IgdGhlIGNsb2NrLiAqLworICBHU1RfTElWRV9MT0NLIChiYXNlc3JjKTsKKyAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgInVuc2NoZWR1bGUgY2xvY2siKTsKKworICAvKiB1bmJsb2NrIGNsb2NrIHN5bmMgKGlmIGFueSkgKi8KKyAgaWYgKGJhc2VzcmMtPmNsb2NrX2lkKQorICAgIGdzdF9jbG9ja19pZF91bnNjaGVkdWxlIChiYXNlc3JjLT5jbG9ja19pZCk7CisKKyAgLyogY29uZmlndXJlIHdoYXQgdG8gZG8gd2hlbiB3ZSBnZXQgdG8gdGhlIExJVkUgbG9jay4gKi8KKyAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgImxpdmUgcnVubmluZyAlZCIsIGxpdmVfcGxheSk7CisgIGJhc2VzcmMtPmxpdmVfcnVubmluZyA9IGxpdmVfcGxheTsKKworICBpZiAobGl2ZV9wbGF5KSB7CisgICAgZ2Jvb2xlYW4gc3RhcnQ7CisKKyAgICAvKiBjbGVhciBvdXIgdW5sb2NrIHJlcXVlc3Qgd2hlbiBnb2luZyB0byBQTEFZSU5HICovCisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgInVubG9jayBzdG9wIik7CisgICAgaWYgKGJjbGFzcy0+dW5sb2NrX3N0b3ApCisgICAgICBiY2xhc3MtPnVubG9ja19zdG9wIChiYXNlc3JjKTsKKworICAgIC8qIGZvciBsaXZlIHNvdXJjZXMgd2UgcmVzdGFydCB0aGUgdGltZXN0YW1wIGNvcnJlY3Rpb24gKi8KKyAgICBiYXNlc3JjLT5wcml2LT5sYXRlbmN5ID0gLTE7CisgICAgLyogaGF2ZSB0byByZXN0YXJ0IHRoZSB0YXNrIGluIGNhc2UgaXQgc3RvcHBlZCBiZWNhdXNlIG9mIHRoZSB1bmxvY2sgd2hlbgorICAgICAqIHdlIHdlbnQgdG8gUEFVU0VELiBPbmx5IGRvIHRoaXMgaWYgd2Ugb3BlcmF0aW5nIGluIHB1c2ggbW9kZS4gKi8KKyAgICBHU1RfT0JKRUNUX0xPQ0sgKGJhc2VzcmMtPnNyY3BhZCk7CisgICAgc3RhcnQgPSAoR1NUX1BBRF9BQ1RJVkFURV9NT0RFIChiYXNlc3JjLT5zcmNwYWQpID09IEdTVF9BQ1RJVkFURV9QVVNIKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNyYy0+c3JjcGFkKTsKKyAgICBpZiAoc3RhcnQpCisgICAgICBnc3RfcGFkX3N0YXJ0X3Rhc2sgKGJhc2VzcmMtPnNyY3BhZCwgKEdzdFRhc2tGdW5jdGlvbikgZ3N0X2Jhc2Vfc3JjX2xvb3AsCisgICAgICAgICAgYmFzZXNyYy0+c3JjcGFkKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAic2lnbmFsIik7CisgICAgR1NUX0xJVkVfU0lHTkFMIChiYXNlc3JjKTsKKyAgfQorICBHU1RfTElWRV9VTkxPQ0sgKGJhc2VzcmMpOworCisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iYXNlX3NyY19hY3RpdmF0ZV9wdXNoIChHc3RQYWQgKiBwYWQsIGdib29sZWFuIGFjdGl2ZSkKK3sKKyAgR3N0QmFzZVNyYyAqYmFzZXNyYzsKKyAgR3N0RXZlbnQgKmV2ZW50OworCisgIGJhc2VzcmMgPSBHU1RfQkFTRV9TUkMgKEdTVF9PQkpFQ1RfUEFSRU5UIChwYWQpKTsKKworICAvKiBwcmVwYXJlIHN1YmNsYXNzIGZpcnN0ICovCisgIGlmIChhY3RpdmUpIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAiQWN0aXZhdGluZyBpbiBwdXNoIG1vZGUiKTsKKworICAgIGlmIChHX1VOTElLRUxZICghYmFzZXNyYy0+Y2FuX2FjdGl2YXRlX3B1c2gpKQorICAgICAgZ290byBub19wdXNoX2FjdGl2YXRpb247CisKKyAgICBpZiAoR19VTkxJS0VMWSAoIWdzdF9iYXNlX3NyY19zdGFydCAoYmFzZXNyYykpKQorICAgICAgZ290byBlcnJvcl9zdGFydDsKKworICAgIGJhc2VzcmMtPnByaXYtPmRpc2NvbnQgPSBUUlVFOworICAgIGdzdF9iYXNlX3NyY19zZXRfZmx1c2hpbmcgKGJhc2VzcmMsIEZBTFNFLCBGQUxTRSwgRkFMU0UsIE5VTEwpOworCisgICAgLyogZG8gaW5pdGlhbCBzZWVrLCB3aGljaCB3aWxsIHN0YXJ0IHRoZSB0YXNrICovCisgICAgR1NUX09CSkVDVF9MT0NLIChiYXNlc3JjKTsKKyAgICBldmVudCA9IGJhc2VzcmMtPnBlbmRpbmdfc2VlazsKKyAgICBiYXNlc3JjLT5wZW5kaW5nX3NlZWsgPSBOVUxMOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiYXNlc3JjKTsKKworICAgIC8qIG5vIG5lZWQgdG8gdW5sb2NrIGFueXRoaW5nLCB0aGUgdGFzayBpcyBjZXJ0YWlubHkKKyAgICAgKiBub3QgcnVubmluZyBoZXJlLiBUaGUgcGVyZm9ybSBzZWVrIGNvZGUgd2lsbCBzdGFydCB0aGUgdGFzayB3aGVuCisgICAgICogZmluaXNoZWQuICovCisgICAgaWYgKEdfVU5MSUtFTFkgKCFnc3RfYmFzZV9zcmNfcGVyZm9ybV9zZWVrIChiYXNlc3JjLCBldmVudCwgRkFMU0UpKSkKKyAgICAgIGdvdG8gc2Vla19mYWlsZWQ7CisKKyAgICBpZiAoZXZlbnQpCisgICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKyAgfSBlbHNlIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAiRGVhY3RpdmF0aW5nIGluIHB1c2ggbW9kZSIpOworICAgIC8qIGZsdXNoIGFsbCAqLworICAgIGdzdF9iYXNlX3NyY19zZXRfZmx1c2hpbmcgKGJhc2VzcmMsIFRSVUUsIEZBTFNFLCBUUlVFLCBOVUxMKTsKKyAgICAvKiBzdG9wIHRoZSB0YXNrICovCisgICAgZ3N0X3BhZF9zdG9wX3Rhc2sgKHBhZCk7CisgICAgLyogbm93IHdlIGNhbiBzdG9wIHRoZSBzb3VyY2UgKi8KKyAgICBpZiAoR19VTkxJS0VMWSAoIWdzdF9iYXNlX3NyY19zdG9wIChiYXNlc3JjKSkpCisgICAgICBnb3RvIGVycm9yX3N0b3A7CisgIH0KKyAgcmV0dXJuIFRSVUU7CisKKyAgLyogRVJST1JTICovCitub19wdXNoX2FjdGl2YXRpb246CisgIHsKKyAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGJhc2VzcmMsICJTdWJjbGFzcyBkaXNhYmxlZCBwdXNoLW1vZGUgYWN0aXZhdGlvbiIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorZXJyb3Jfc3RhcnQ6CisgIHsKKyAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGJhc2VzcmMsICJGYWlsZWQgdG8gc3RhcnQgaW4gcHVzaCBtb2RlIik7CisgICAgcmV0dXJuIEZBTFNFOworICB9CitzZWVrX2ZhaWxlZDoKKyAgeworICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGJhc2VzcmMsICJGYWlsZWQgdG8gcGVyZm9ybSBpbml0aWFsIHNlZWsiKTsKKyAgICAvKiBmbHVzaCBhbGwgKi8KKyAgICBnc3RfYmFzZV9zcmNfc2V0X2ZsdXNoaW5nIChiYXNlc3JjLCBUUlVFLCBGQUxTRSwgVFJVRSwgTlVMTCk7CisgICAgLyogc3RvcCB0aGUgdGFzayAqLworICAgIGdzdF9wYWRfc3RvcF90YXNrIChwYWQpOworICAgIC8qIFN0b3AgdGhlIGJhc2VzcmMgKi8KKyAgICBnc3RfYmFzZV9zcmNfc3RvcCAoYmFzZXNyYyk7CisgICAgaWYgKGV2ZW50KQorICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CitlcnJvcl9zdG9wOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgIkZhaWxlZCB0byBzdG9wIGluIHB1c2ggbW9kZSIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iYXNlX3NyY19hY3RpdmF0ZV9wdWxsIChHc3RQYWQgKiBwYWQsIGdib29sZWFuIGFjdGl2ZSkKK3sKKyAgR3N0QmFzZVNyYyAqYmFzZXNyYzsKKworICBiYXNlc3JjID0gR1NUX0JBU0VfU1JDIChHU1RfT0JKRUNUX1BBUkVOVCAocGFkKSk7CisKKyAgLyogcHJlcGFyZSBzdWJjbGFzcyBmaXJzdCAqLworICBpZiAoYWN0aXZlKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgIkFjdGl2YXRpbmcgaW4gcHVsbCBtb2RlIik7CisgICAgaWYgKEdfVU5MSUtFTFkgKCFnc3RfYmFzZV9zcmNfc3RhcnQgKGJhc2VzcmMpKSkKKyAgICAgIGdvdG8gZXJyb3Jfc3RhcnQ7CisKKyAgICAvKiBpZiBub3QgcmFuZG9tX2FjY2Vzcywgd2UgY2Fubm90IG9wZXJhdGUgaW4gcHVsbCBtb2RlIGZvciBub3cgKi8KKyAgICBpZiAoR19VTkxJS0VMWSAoIWdzdF9iYXNlX3NyY19pc19yYW5kb21fYWNjZXNzIChiYXNlc3JjKSkpCisgICAgICBnb3RvIG5vX2dldF9yYW5nZTsKKworICAgIC8qIHN0b3AgZmx1c2hpbmcgbm93IGJ1dCBmb3IgbGl2ZSBzb3VyY2VzLCBzdGlsbCBibG9jayBpbiB0aGUgTElWRSBsb2NrIHdoZW4KKyAgICAgKiB3ZSBhcmUgbm90IHlldCBQTEFZSU5HICovCisgICAgZ3N0X2Jhc2Vfc3JjX3NldF9mbHVzaGluZyAoYmFzZXNyYywgRkFMU0UsIEZBTFNFLCBGQUxTRSwgTlVMTCk7CisgIH0gZWxzZSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgIkRlYWN0aXZhdGluZyBpbiBwdWxsIG1vZGUiKTsKKyAgICAvKiBmbHVzaCBhbGwsIHRoZXJlIGlzIG5vIHRhc2sgdG8gc3RvcCAqLworICAgIGdzdF9iYXNlX3NyY19zZXRfZmx1c2hpbmcgKGJhc2VzcmMsIFRSVUUsIEZBTFNFLCBUUlVFLCBOVUxMKTsKKworICAgIGlmIChHX1VOTElLRUxZICghZ3N0X2Jhc2Vfc3JjX3N0b3AgKGJhc2VzcmMpKSkKKyAgICAgIGdvdG8gZXJyb3Jfc3RvcDsKKyAgfQorICByZXR1cm4gVFJVRTsKKworICAvKiBFUlJPUlMgKi8KK2Vycm9yX3N0YXJ0OgorICB7CisgICAgR1NUX0VSUk9SX09CSkVDVCAoYmFzZXNyYywgIkZhaWxlZCB0byBzdGFydCBpbiBwdWxsIG1vZGUiKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK25vX2dldF9yYW5nZToKKyAgeworICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGJhc2VzcmMsICJDYW5ub3Qgb3BlcmF0ZSBpbiBwdWxsIG1vZGUsIHN0b3BwaW5nIik7CisgICAgZ3N0X2Jhc2Vfc3JjX3N0b3AgKGJhc2VzcmMpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorZXJyb3Jfc3RvcDoKKyAgeworICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGJhc2VzcmMsICJGYWlsZWQgdG8gc3RvcCBpbiBwdWxsIG1vZGUiKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCitnc3RfYmFzZV9zcmNfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKK3sKKyAgR3N0QmFzZVNyYyAqYmFzZXNyYzsKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmVzdWx0OworICBnYm9vbGVhbiBub19wcmVyb2xsID0gRkFMU0U7CisKKyAgYmFzZXNyYyA9IEdTVF9CQVNFX1NSQyAoZWxlbWVudCk7CisKKyAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgorICAgICAgbm9fcHJlcm9sbCA9IGdzdF9iYXNlX3NyY19pc19saXZlIChiYXNlc3JjKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUExBWUlORzoKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJQQVVTRUQtPlBMQVlJTkciKTsKKyAgICAgIGlmIChnc3RfYmFzZV9zcmNfaXNfbGl2ZSAoYmFzZXNyYykpIHsKKyAgICAgICAgLyogbm93IHdlIGNhbiBzdGFydCBwbGF5YmFjayAqLworICAgICAgICBnc3RfYmFzZV9zcmNfc2V0X3BsYXlpbmcgKGJhc2VzcmMsIFRSVUUpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgaWYgKChyZXN1bHQgPQorICAgICAgICAgIEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsCisgICAgICAgICAgICAgIHRyYW5zaXRpb24pKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpCisgICAgZ290byBmYWlsdXJlOworCisgIHN3aXRjaCAodHJhbnNpdGlvbikgeworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRDoKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJQTEFZSU5HLT5QQVVTRUQiKTsKKyAgICAgIGlmIChnc3RfYmFzZV9zcmNfaXNfbGl2ZSAoYmFzZXNyYykpIHsKKyAgICAgICAgLyogbWFrZSBzdXJlIHdlIGJsb2NrIGluIHRoZSBsaXZlIGxvY2sgaW4gUEFVU0VEICovCisgICAgICAgIGdzdF9iYXNlX3NyY19zZXRfcGxheWluZyAoYmFzZXNyYywgRkFMU0UpOworICAgICAgICBub19wcmVyb2xsID0gVFJVRTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6CisgICAgeworICAgICAgR3N0RXZlbnQgKipldmVudF9wOworCisgICAgICAvKiB3ZSBkb24ndCBuZWVkIHRvIHVuYmxvY2sgYW55dGhpbmcgaGVyZSwgdGhlIHBhZCBkZWFjdGl2YXRpb24gY29kZQorICAgICAgICogYWxyZWFkeSBkaWQgdGhpcyAqLworICAgICAgZ19hdG9taWNfaW50X3NldCAoJmJhc2VzcmMtPnByaXYtPnBlbmRpbmdfZW9zLCBGQUxTRSk7CisgICAgICBldmVudF9wID0gJmJhc2VzcmMtPnBlbmRpbmdfc2VlazsKKyAgICAgIGdzdF9ldmVudF9yZXBsYWNlIChldmVudF9wLCBOVUxMKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIGlmIChub19wcmVyb2xsICYmIHJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpCisgICAgcmVzdWx0ID0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMOworCisgIHJldHVybiByZXN1bHQ7CisKKyAgLyogRVJST1JTICovCitmYWlsdXJlOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgInBhcmVudCBmYWlsZWQgc3RhdGUgY2hhbmdlIik7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmggYi9saWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjI0MDk2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmgKQEAgLTAsMCArMSwyNTIgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+CisgKgorICogZ3N0YmFzZXNyYy5oOgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19HU1RfQkFTRV9TUkNfSF9fCisjZGVmaW5lIF9fR1NUX0JBU0VfU1JDX0hfXworCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgR1NUX1RZUEVfQkFTRV9TUkMgICAgICAgICAgICAgICAoZ3N0X2Jhc2Vfc3JjX2dldF90eXBlKCkpCisjZGVmaW5lIEdTVF9CQVNFX1NSQyhvYmopICAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0JBU0VfU1JDLEdzdEJhc2VTcmMpKQorI2RlZmluZSBHU1RfQkFTRV9TUkNfQ0xBU1Moa2xhc3MpICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0JBU0VfU1JDLEdzdEJhc2VTcmNDbGFzcykpCisjZGVmaW5lIEdTVF9CQVNFX1NSQ19HRVRfQ0xBU1Mob2JqKSAgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9CQVNFX1NSQywgR3N0QmFzZVNyY0NsYXNzKSkKKyNkZWZpbmUgR1NUX0lTX0JBU0VfU1JDKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfQkFTRV9TUkMpKQorI2RlZmluZSBHU1RfSVNfQkFTRV9TUkNfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0JBU0VfU1JDKSkKKyNkZWZpbmUgR1NUX0JBU0VfU1JDX0NBU1Qob2JqKSAgICAgICAgICAoKEdzdEJhc2VTcmMgKikob2JqKSkKKworLyoqCisgKiBHc3RCYXNlU3JjRmxhZ3M6CisgKiBAR1NUX0JBU0VfU1JDX1NUQVJURUQ6IGhhcyBzb3VyY2UgYmVlbiBzdGFydGVkCisgKiBAR1NUX0JBU0VfU1JDX0ZMQUdfTEFTVDogb2Zmc2V0IHRvIGRlZmluZSBtb3JlIGZsYWdzCisgKgorICogVGhlICNHc3RFbGVtZW50IGZsYWdzIHRoYXQgYSBiYXNlc3JjIGVsZW1lbnQgbWF5IGhhdmUuCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIEdTVF9CQVNFX1NSQ19TVEFSVEVEICAgICAgICAgICA9IChHU1RfRUxFTUVOVF9GTEFHX0xBU1QgPDwgMCksCisgIC8qIHBhZGRpbmcgKi8KKyAgR1NUX0JBU0VfU1JDX0ZMQUdfTEFTVCAgICAgICAgID0gKEdTVF9FTEVNRU5UX0ZMQUdfTEFTVCA8PCAyKQorfSBHc3RCYXNlU3JjRmxhZ3M7CisKK3R5cGVkZWYgc3RydWN0IF9Hc3RCYXNlU3JjIEdzdEJhc2VTcmM7Cit0eXBlZGVmIHN0cnVjdCBfR3N0QmFzZVNyY0NsYXNzIEdzdEJhc2VTcmNDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9Hc3RCYXNlU3JjUHJpdmF0ZSBHc3RCYXNlU3JjUHJpdmF0ZTsKKworLyoqCisgKiBHU1RfQkFTRV9TUkNfUEFEOgorICogQG9iajogYmFzZSBzb3VyY2UgaW5zdGFuY2UKKyAqCisgKiBHaXZlcyB0aGUgcG9pbnRlciB0byB0aGUgI0dzdFBhZCBvYmplY3Qgb2YgdGhlIGVsZW1lbnQuCisgKi8KKyNkZWZpbmUgR1NUX0JBU0VfU1JDX1BBRChvYmopICAgICAgICAgICAgICAgICAoR1NUX0JBU0VfU1JDX0NBU1QgKG9iaiktPnNyY3BhZCkKKworCisvKioKKyAqIEdzdEJhc2VTcmM6CisgKgorICogVGhlIG9wYXF1ZSAjR3N0QmFzZVNyYyBkYXRhIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IF9Hc3RCYXNlU3JjIHsKKyAgR3N0RWxlbWVudCAgICAgZWxlbWVudDsKKworICAvKjwgcHJvdGVjdGVkID4qLworICBHc3RQYWQgICAgICAgICpzcmNwYWQ7CisKKyAgLyogYXZhaWxhYmxlIHRvIHN1YmNsYXNzIGltcGxlbWVudGF0aW9ucyAqLworICAvKiBNVC1wcm90ZWN0ZWQgKHdpdGggTElWRV9MT0NLKSAqLworICBHTXV0ZXggICAgICAgICpsaXZlX2xvY2s7CisgIEdDb25kICAgICAgICAgKmxpdmVfY29uZDsKKyAgZ2Jvb2xlYW4gICAgICAgaXNfbGl2ZTsKKyAgZ2Jvb2xlYW4gICAgICAgbGl2ZV9ydW5uaW5nOworCisgIC8qIE1ULXByb3RlY3RlZCAod2l0aCBMT0NLKSAqLworICBndWludCAgICAgICAgICBibG9ja3NpemU7ICAgICAvKiBzaXplIG9mIGJ1ZmZlcnMgd2hlbiBvcGVyYXRpbmcgcHVzaCBiYXNlZCAqLworICBnYm9vbGVhbiAgICAgICBjYW5fYWN0aXZhdGVfcHVzaDsgICAgIC8qIHNvbWUgc2NoZWR1bGluZyBwcm9wZXJ0aWVzICovCisgIGdib29sZWFuICAgICAgIHJhbmRvbV9hY2Nlc3M7CisKKyAgR3N0Q2xvY2tJRCAgICAgY2xvY2tfaWQ7ICAgICAgLyogZm9yIHN5bmNpbmcgKi8KKworICAvKiBNVC1wcm90ZWN0ZWQgKHdpdGggU1RSRUFNX0xPQ0sgKmFuZCogT0JKRUNUX0xPQ0spICovCisgIEdzdFNlZ21lbnQgICAgIHNlZ21lbnQ7CisgIC8qIE1ULXByb3RlY3RlZCAod2l0aCBTVFJFQU1fTE9DSykgKi8KKyAgZ2Jvb2xlYW4gICAgICAgbmVlZF9uZXdzZWdtZW50OworCisgIGdpbnQgICAgICAgICAgIG51bV9idWZmZXJzOworICBnaW50ICAgICAgICAgICBudW1fYnVmZmVyc19sZWZ0OworCisgIGdib29sZWFuICAgICAgIHR5cGVmaW5kOworICBnYm9vbGVhbiAgICAgICBydW5uaW5nOworICBHc3RFdmVudCAgICAgICpwZW5kaW5nX3NlZWs7CisKKyAgR3N0QmFzZVNyY1ByaXZhdGUgKnByaXY7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdwb2ludGVyICAgICAgIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkdfTEFSR0VdOworfTsKKworLyoqCisgKiBHc3RCYXNlU3JjQ2xhc3M6CisgKiBAcGFyZW50X2NsYXNzOiBFbGVtZW50IHBhcmVudCBjbGFzcworICogQGdldF9jYXBzOiBDYWxsZWQgdG8gZ2V0IHRoZSBjYXBzIHRvIHJlcG9ydAorICogQG5lZ290aWF0ZTogTmVnb3RpYXRlZCB0aGUgY2FwcyB3aXRoIHRoZSBwZWVyLgorICogQGZpeGF0ZTogQ2FsbGVkIGR1cmluZyBuZWdvdGlhdGlvbiBpZiBjYXBzIG5lZWQgZml4YXRpbmcuIEltcGxlbWVudCBpbnN0ZWFkIG9mCisgKiAgIHNldHRpbmcgYSBmaXhhdGUgZnVuY3Rpb24gb24gdGhlIHNvdXJjZSBwYWQuCisgKiBAc2V0X2NhcHM6IE5vdGlmeSBzdWJjbGFzcyBvZiBjaGFuZ2VkIG91dHB1dCBjYXBzCisgKiBAZGVjaWRlX2FsbG9jYXRpb246IGNvbmZpZ3VyZSB0aGUgYWxsb2NhdGlvbiBxdWVyeQorICogQHN0YXJ0OiBTdGFydCBwcm9jZXNzaW5nLiBTdWJjbGFzc2VzIHNob3VsZCBvcGVuIHJlc291cmNlcyBhbmQgcHJlcGFyZQorICogICAgdG8gcHJvZHVjZSBkYXRhLgorICogQHN0b3A6IFN0b3AgcHJvY2Vzc2luZy4gU3ViY2xhc3NlcyBzaG91bGQgdXNlIHRoaXMgdG8gY2xvc2UgcmVzb3VyY2VzLgorICogQGdldF90aW1lczogR2l2ZW4gYSBidWZmZXIsIHJldHVybiB0aGUgc3RhcnQgYW5kIHN0b3AgdGltZSB3aGVuIGl0CisgKiAgICBzaG91bGQgYmUgcHVzaGVkIG91dC4gVGhlIGJhc2UgY2xhc3Mgd2lsbCBzeW5jIG9uIHRoZSBjbG9jayB1c2luZworICogICAgdGhlc2UgdGltZXMuCisgKiBAZ2V0X3NpemU6IFJldHVybiB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgcmVzb3VyY2UsIGluIHRoZSBjb25maWd1cmVkIGZvcm1hdC4KKyAqIEBpc19zZWVrYWJsZTogQ2hlY2sgaWYgdGhlIHNvdXJjZSBjYW4gc2VlaworICogQHByZXBhcmVfc2Vla19zZWdtZW50OiBQcmVwYXJlIHRoZSBHc3RTZWdtZW50IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlCisgKiAgIGRvX3NlZWsgdm1ldGhvZCBmb3IgZXhlY3V0aW5nIGEgc2VlayByZXF1ZXN0LiBTdWItY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUKKyAqICAgdGhpcyBpZiB0aGV5IHN1cHBvcnQgc2Vla2luZyBpbiBmb3JtYXRzIG90aGVyIHRoYW4gdGhlIGNvbmZpZ3VyZWQgbmF0aXZlCisgKiAgIGZvcm1hdC4gQnkgZGVmYXVsdCwgaXQgdHJpZXMgdG8gY29udmVydCB0aGUgc2VlayBhcmd1bWVudHMgdG8gdGhlCisgKiAgIGNvbmZpZ3VyZWQgbmF0aXZlIGZvcm1hdCBhbmQgcHJlcGFyZSBhIHNlZ21lbnQgaW4gdGhhdCBmb3JtYXQuCisgKiAgIFNpbmNlOiAwLjEwLjEzCisgKiBAZG9fc2VlazogUGVyZm9ybSBzZWVraW5nIG9uIHRoZSByZXNvdXJjZSB0byB0aGUgaW5kaWNhdGVkIHNlZ21lbnQuCisgKiBAdW5sb2NrOiBVbmxvY2sgYW55IHBlbmRpbmcgYWNjZXNzIHRvIHRoZSByZXNvdXJjZS4gU3ViY2xhc3NlcyBzaG91bGQKKyAqICAgIHVuYmxvY2sgYW55IGJsb2NrZWQgZnVuY3Rpb24gQVNBUC4gSW4gcGFydGljdWxhciwgYW55IGNyZWF0ZSgpIGZ1bmN0aW9uIGluCisgKiAgICBwcm9ncmVzcyBzaG91bGQgYmUgdW5ibG9ja2VkIGFuZCBzaG91bGQgcmV0dXJuIEdTVF9GTE9XX1dST05HX1NUQVRFLiBBbnkKKyAqICAgIGZ1dHVyZSBAY3JlYXRlPCEtLSAtLT4oKSBmdW5jdGlvbiBjYWxsIHNob3VsZCBhbHNvIHJldHVybiBHU1RfRkxPV19XUk9OR19TVEFURQorICogICAgdW50aWwgdGhlIEB1bmxvY2tfc3RvcDwhLS0gLS0+KCkgZnVuY3Rpb24gaGFzIGJlZW4gY2FsbGVkLgorICogQHVubG9ja19zdG9wOiBDbGVhciB0aGUgcHJldmlvdXMgdW5sb2NrIHJlcXVlc3QuIFN1YmNsYXNzZXMgc2hvdWxkIGNsZWFyCisgKiAgICBhbnkgc3RhdGUgdGhleSBzZXQgZHVyaW5nIHVubG9jaygpLCBzdWNoIGFzIGNsZWFyaW5nIGNvbW1hbmQgcXVldWVzLgorICogQHF1ZXJ5OiBIYW5kbGUgYSByZXF1ZXN0ZWQgcXVlcnkuCisgKiBAZXZlbnQ6IE92ZXJyaWRlIHRoaXMgdG8gaW1wbGVtZW50IGN1c3RvbSBldmVudCBoYW5kbGluZy4KKyAqIEBjcmVhdGU6IEFzayB0aGUgc3ViY2xhc3MgdG8gY3JlYXRlIGEgYnVmZmVyIHdpdGggb2Zmc2V0IGFuZCBzaXplLgorICogICBXaGVuIHRoZSBzdWJjbGFzcyByZXR1cm5zIEdTVF9GTE9XX09LLCBpdCBNVVNUIHJldHVybiBhIGJ1ZmZlciBvZiB0aGUKKyAqICAgcmVxdWVzdGVkIHNpemUgdW5sZXNzIGZld2VyIGJ5dGVzIGFyZSBhdmFpbGFibGUgYmVjYXVzZSBhbiBFT1MgY29uZGl0aW9uCisgKiAgIGlzIG5lYXIuIE5vIGJ1ZmZlciBzaG91bGQgYmUgcmV0dXJuZWQgd2hlbiB0aGUgcmV0dXJuIHZhbHVlIGlzIGRpZmZlcmVudAorICogICBmcm9tIEdTVF9GTE9XX09LLiBBIHJldHVybiB2YWx1ZSBvZiBHU1RfRkxPV19VTkVYUEVDVEVEIHNpZ25pZmllcyB0aGF0IHRoZQorICogICBlbmQgb2Ygc3RyZWFtIGlzIHJlYWNoZWQuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdpbGwgY2FsbCBAYWxsb2MgYW5kCisgKiAgIHRoZW4gY2FsbCBAZmlsbC4KKyAqIEBhbGxvYzogQXNrIHRoZSBzdWJjbGFzcyB0byBhbGxvY2F0ZSBhIGJ1ZmZlciB3aXRoIGZvciBvZmZzZXQgYW5kIHNpemUuIFRoZQorICogICBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdpbGwgY3JlYXRlIGEgbmV3IGJ1ZmZlciBmcm9tIHRoZSBuZWdvdGlhdGVkIGFsbG9jYXRvci4KKyAqIEBmaWxsOiBBc2sgdGhlIHN1YmNsYXNzIHRvIGZpbGwgdGhlIGJ1ZmZlciB3aXRoIGRhdGEgZm9yIG9mZnNldCBhbmQgc2l6ZS4gVGhlCisgKiAgIHBhc3NlZCBidWZmZXIgaXMgZ3VhcmFudGVlZCB0byBob2xkIHRoZSByZXF1ZXN0ZWQgYW1vdW50IG9mIGJ5dGVzLgorICoKKyAqIFN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIGFueSBvZiB0aGUgYXZhaWxhYmxlIHZpcnR1YWwgbWV0aG9kcyBvciBub3QsIGFzCisgKiBuZWVkZWQuIEF0IHRoZSBtaW5pbXVtLCB0aGUgQGNyZWF0ZSBtZXRob2Qgc2hvdWxkIGJlIG92ZXJyaWRkZW4gdG8gcHJvZHVjZQorICogYnVmZmVycy4KKyAqLworc3RydWN0IF9Hc3RCYXNlU3JjQ2xhc3MgeworICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworCisgIC8qPCBwdWJsaWMgPiovCisgIC8qIHZpcnR1YWwgbWV0aG9kcyBmb3Igc3ViY2xhc3NlcyAqLworCisgIC8qIGdldCBjYXBzIGZyb20gc3ViY2xhc3MgKi8KKyAgR3N0Q2FwcyogICAgICAoKmdldF9jYXBzKSAgICAgKEdzdEJhc2VTcmMgKnNyYywgR3N0Q2FwcyAqZmlsdGVyKTsKKyAgLyogZGVjaWRlIG9uIGNhcHMgKi8KKyAgZ2Jvb2xlYW4gICAgICAoKm5lZ290aWF0ZSkgICAgKEdzdEJhc2VTcmMgKnNyYyk7CisgIC8qIGNhbGxlZCBpZiwgaW4gbmVnb3RpYXRpb24sIGNhcHMgbmVlZCBmaXhhdGluZyAqLworICB2b2lkICAgICAgICAgICgqZml4YXRlKSAgICAgICAoR3N0QmFzZVNyYyAqc3JjLCBHc3RDYXBzICpjYXBzKTsKKyAgLyogbm90aWZ5IHRoZSBzdWJjbGFzcyBvZiBuZXcgY2FwcyAqLworICBnYm9vbGVhbiAgICAgICgqc2V0X2NhcHMpICAgICAoR3N0QmFzZVNyYyAqc3JjLCBHc3RDYXBzICpjYXBzKTsKKworICAvKiBzZXR1cCBhbGxvY2F0aW9uIHF1ZXJ5ICovCisgIGdib29sZWFuICAgICAgKCpkZWNpZGVfYWxsb2NhdGlvbikgICAoR3N0QmFzZVNyYyAqc3JjLCBHc3RRdWVyeSAqcXVlcnkpOworCisgIC8qIHN0YXJ0IGFuZCBzdG9wIHByb2Nlc3NpbmcsIGlkZWFsIGZvciBvcGVuaW5nL2Nsb3NpbmcgdGhlIHJlc291cmNlICovCisgIGdib29sZWFuICAgICAgKCpzdGFydCkgICAgICAgIChHc3RCYXNlU3JjICpzcmMpOworICBnYm9vbGVhbiAgICAgICgqc3RvcCkgICAgICAgICAoR3N0QmFzZVNyYyAqc3JjKTsKKworICAvKiBnaXZlbiBhIGJ1ZmZlciwgcmV0dXJuIHN0YXJ0IGFuZCBzdG9wIHRpbWUgd2hlbiBpdCBzaG91bGQgYmUgcHVzaGVkCisgICAqIG91dC4gVGhlIGJhc2UgY2xhc3Mgd2lsbCBzeW5jIG9uIHRoZSBjbG9jayB1c2luZyB0aGVzZSB0aW1lcy4gKi8KKyAgdm9pZCAgICAgICAgICAoKmdldF90aW1lcykgICAgKEdzdEJhc2VTcmMgKnNyYywgR3N0QnVmZmVyICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgKnN0YXJ0LCBHc3RDbG9ja1RpbWUgKmVuZCk7CisKKyAgLyogZ2V0IHRoZSB0b3RhbCBzaXplIG9mIHRoZSByZXNvdXJjZSBpbiBieXRlcyAqLworICBnYm9vbGVhbiAgICAgICgqZ2V0X3NpemUpICAgICAoR3N0QmFzZVNyYyAqc3JjLCBndWludDY0ICpzaXplKTsKKworICAvKiBjaGVjayBpZiB0aGUgcmVzb3VyY2UgaXMgc2Vla2FibGUgKi8KKyAgZ2Jvb2xlYW4gICAgICAoKmlzX3NlZWthYmxlKSAgKEdzdEJhc2VTcmMgKnNyYyk7CisKKyAgLyogUHJlcGFyZSB0aGUgc2VnbWVudCBvbiB3aGljaCB0byBwZXJmb3JtIGRvX3NlZWsoKSwgY29udmVydGluZyB0byB0aGUKKyAgICogY3VycmVudCBiYXNlc3JjIGZvcm1hdC4gKi8KKyAgZ2Jvb2xlYW4gICAgICAoKnByZXBhcmVfc2Vla19zZWdtZW50KSAoR3N0QmFzZVNyYyAqc3JjLCBHc3RFdmVudCAqc2VlaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U2VnbWVudCAqc2VnbWVudCk7CisgIC8qIG5vdGlmeSBzdWJjbGFzc2VzIG9mIGEgc2VlayAqLworICBnYm9vbGVhbiAgICAgICgqZG9fc2VlaykgICAgICAoR3N0QmFzZVNyYyAqc3JjLCBHc3RTZWdtZW50ICpzZWdtZW50KTsKKworICAvKiB1bmxvY2sgYW55IHBlbmRpbmcgYWNjZXNzIHRvIHRoZSByZXNvdXJjZS4gc3ViY2xhc3NlcyBzaG91bGQgdW5sb2NrCisgICAqIGFueSBmdW5jdGlvbiBBU0FQLiAqLworICBnYm9vbGVhbiAgICAgICgqdW5sb2NrKSAgICAgICAoR3N0QmFzZVNyYyAqc3JjKTsKKyAgLyogQ2xlYXIgYW55IHBlbmRpbmcgdW5sb2NrIHJlcXVlc3QsIGFzIHdlIHN1Y2NlZWRlZCBpbiB1bmxvY2tpbmcgKi8KKyAgZ2Jvb2xlYW4gICAgICAoKnVubG9ja19zdG9wKSAgKEdzdEJhc2VTcmMgKnNyYyk7CisKKyAgLyogbm90aWZ5IHN1YmNsYXNzZXMgb2YgYSBxdWVyeSAqLworICBnYm9vbGVhbiAgICAgICgqcXVlcnkpICAgICAgICAoR3N0QmFzZVNyYyAqc3JjLCBHc3RRdWVyeSAqcXVlcnkpOworCisgIC8qIG5vdGlmeSBzdWJjbGFzc2VzIG9mIGFuIGV2ZW50ICovCisgIGdib29sZWFuICAgICAgKCpldmVudCkgICAgICAgIChHc3RCYXNlU3JjICpzcmMsIEdzdEV2ZW50ICpldmVudCk7CisKKyAgLyogYXNrIHRoZSBzdWJjbGFzcyB0byBjcmVhdGUgYSBidWZmZXIgd2l0aCBvZmZzZXQgYW5kIHNpemUsIHRoZSBkZWZhdWx0CisgICAqIGltcGxlbWVudGF0aW9uIHdpbGwgY2FsbCBhbGxvYyBhbmQgZmlsbC4gKi8KKyAgR3N0Rmxvd1JldHVybiAoKmNyZWF0ZSkgICAgICAgKEdzdEJhc2VTcmMgKnNyYywgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCdWZmZXIgKipidWYpOworICAvKiBhc2sgdGhlIHN1YmNsYXNzIHRvIGFsbG9jYXRlIGFuIG91dHB1dCBidWZmZXIuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCisgICAqIHdpbGwgdXNlIHRoZSBuZWdvdGlhdGVkIGFsbG9jYXRvci4gKi8KKyAgR3N0Rmxvd1JldHVybiAoKmFsbG9jKSAgICAgICAgKEdzdEJhc2VTcmMgKnNyYywgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCdWZmZXIgKipidWYpOworICAvKiBhc2sgdGhlIHN1YmNsYXNzIHRvIGZpbGwgdGhlIGJ1ZmZlciB3aXRoIGRhdGEgZnJvbSBvZmZzZXQgYW5kIHNpemUgKi8KKyAgR3N0Rmxvd1JldHVybiAoKmZpbGwpICAgICAgICAgKEdzdEJhc2VTcmMgKnNyYywgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCdWZmZXIgKmJ1Zik7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdwb2ludGVyICAgICAgIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkdfTEFSR0VdOworfTsKKworR1R5cGUgZ3N0X2Jhc2Vfc3JjX2dldF90eXBlICh2b2lkKTsKKworR3N0Rmxvd1JldHVybiAgIGdzdF9iYXNlX3NyY193YWl0X3BsYXlpbmcgICAgIChHc3RCYXNlU3JjICpzcmMpOworCit2b2lkICAgICAgICAgICAgZ3N0X2Jhc2Vfc3JjX3NldF9saXZlICAgICAgICAgKEdzdEJhc2VTcmMgKnNyYywgZ2Jvb2xlYW4gbGl2ZSk7CitnYm9vbGVhbiAgICAgICAgZ3N0X2Jhc2Vfc3JjX2lzX2xpdmUgICAgICAgICAgKEdzdEJhc2VTcmMgKnNyYyk7CisKK3ZvaWQgICAgICAgICAgICBnc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdCAgICAgICAoR3N0QmFzZVNyYyAqc3JjLCBHc3RGb3JtYXQgZm9ybWF0KTsKKwordm9pZCAgICAgICAgICAgIGdzdF9iYXNlX3NyY19zZXRfZHluYW1pY19zaXplIChHc3RCYXNlU3JjICogc3JjLCBnYm9vbGVhbiBkeW5hbWljKTsKKworZ2Jvb2xlYW4gICAgICAgIGdzdF9iYXNlX3NyY19xdWVyeV9sYXRlbmN5ICAgIChHc3RCYXNlU3JjICpzcmMsIGdib29sZWFuICogbGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lICogbWluX2xhdGVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZSAqIG1heF9sYXRlbmN5KTsKKwordm9pZCAgICAgICAgICAgIGdzdF9iYXNlX3NyY19zZXRfYmxvY2tzaXplICAgIChHc3RCYXNlU3JjICpzcmMsIGd1aW50IGJsb2Nrc2l6ZSk7CitndWludCAgICAgICAgICAgZ3N0X2Jhc2Vfc3JjX2dldF9ibG9ja3NpemUgICAgKEdzdEJhc2VTcmMgKnNyYyk7CisKK3ZvaWQgICAgICAgICAgICBnc3RfYmFzZV9zcmNfc2V0X2RvX3RpbWVzdGFtcCAoR3N0QmFzZVNyYyAqc3JjLCBnYm9vbGVhbiB0aW1lc3RhbXApOworZ2Jvb2xlYW4gICAgICAgIGdzdF9iYXNlX3NyY19nZXRfZG9fdGltZXN0YW1wIChHc3RCYXNlU3JjICpzcmMpOworCitnYm9vbGVhbiAgICAgICAgZ3N0X2Jhc2Vfc3JjX25ld19zZWFtbGVzc19zZWdtZW50IChHc3RCYXNlU3JjICpzcmMsIGdpbnQ2NCBzdGFydCwgZ2ludDY0IHN0b3AsIGdpbnQ2NCBwb3NpdGlvbik7CisKK2dib29sZWFuICAgICAgICBnc3RfYmFzZV9zcmNfc2V0X2NhcHMgICAgICAgICAoR3N0QmFzZVNyYyAqc3JjLCBHc3RDYXBzICpjYXBzKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fR1NUX0JBU0VfU1JDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmMgYi9saWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODdiMzlmCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmMKQEAgLTAsMCArMSwyNDk2IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgorICogICAgICAgICAgICAgICAgICAgIDIwMDUgQW5keSBXaW5nbyA8d2luZ29AZmx1ZW5kby5jb20+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwNSBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwOCBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qKgorICogU0VDVElPTjpnc3RiYXNldHJhbnNmb3JtCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEJhc2UgY2xhc3MgZm9yIHNpbXBsZSB0cmFuc2Zvcm0gZmlsdGVycworICogQHNlZV9hbHNvOiAjR3N0QmFzZVNyYywgI0dzdEJhc2VTaW5rCisgKgorICogVGhpcyBiYXNlIGNsYXNzIGlzIGZvciBmaWx0ZXIgZWxlbWVudHMgdGhhdCBwcm9jZXNzIGRhdGEuCisgKgorICogSXQgcHJvdmlkZXMgZm9yOgorICogPGl0ZW1pemVkbGlzdD4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPm9uZSBzaW5rcGFkIGFuZCBvbmUgc3JjcGFkPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICAgUG9zc2libGUgZm9ybWF0cyBvbiBzaW5rIGFuZCBzb3VyY2UgcGFkIGltcGxlbWVudGVkCisgKiAgICAgIHdpdGggY3VzdG9tIHRyYW5zZm9ybV9jYXBzIGZ1bmN0aW9uLiBCeSBkZWZhdWx0IHVzZXMKKyAqICAgICAgc2FtZSBmb3JtYXQgb24gc2luayBhbmQgc291cmNlLgorICogICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPkhhbmRsZXMgc3RhdGUgY2hhbmdlczwvcGFyYT48L2xpc3RpdGVtPgorICogICA8bGlzdGl0ZW0+PHBhcmE+RG9lcyBmbHVzaGluZzwvcGFyYT48L2xpc3RpdGVtPgorICogICA8bGlzdGl0ZW0+PHBhcmE+UHVzaCBtb2RlPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICAgIFB1bGwgbW9kZSBpZiB0aGUgc3ViLWNsYXNzIHRyYW5zZm9ybSBjYW4gb3BlcmF0ZSBvbiBhcmJpdHJhcnkgZGF0YQorICogICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiA8L2l0ZW1pemVkbGlzdD4KKyAqCisgKiA8cmVmc2VjdDI+CisgKiA8dGl0bGU+VXNlIENhc2VzPC90aXRsZT4KKyAqIDxwYXJhPgorICogPG9yZGVyZWRsaXN0PgorICogPGxpc3RpdGVtPgorICogICA8aXRlbWl6ZWRsaXN0Pjx0aXRsZT5QYXNzdGhyb3VnaCBtb2RlPC90aXRsZT4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgIEVsZW1lbnQgaGFzIG5vIGludGVyZXN0IGluIG1vZGlmeWluZyB0aGUgYnVmZmVyLiBJdCBtYXkgd2FudCB0byBpbnNwZWN0IGl0LAorICogICAgIGluIHdoaWNoIGNhc2UgdGhlIGVsZW1lbnQgc2hvdWxkIGhhdmUgYSB0cmFuc2Zvcm1faXAgZnVuY3Rpb24uIElmIHRoZXJlCisgKiAgICAgaXMgbm8gdHJhbnNmb3JtX2lwIGZ1bmN0aW9uIGluIHBhc3N0aHJvdWdoIG1vZGUsIHRoZSBidWZmZXIgaXMgcHVzaGVkCisgKiAgICAgaW50YWN0LgorICogICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgIE9uIHRoZSBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgaXMgdGhlIHBhc3N0aHJvdWdoX29uX3NhbWVfY2FwcyB2YXJpYWJsZQorICogICAgIHdoaWNoIHdpbGwgYXV0b21hdGljYWxseSBzZXQvdW5zZXQgcGFzc3Rocm91Z2ggYmFzZWQgb24gd2hldGhlciB0aGUKKyAqICAgICBlbGVtZW50IG5lZ290aWF0ZXMgdGhlIHNhbWUgY2FwcyBvbiBib3RoIHBhZHMuCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgcGFzc3Rocm91Z2hfb25fc2FtZV9jYXBzIG9uIGFuIGVsZW1lbnQgdGhhdCBkb2Vzbid0IGltcGxlbWVudCBhCisgKiAgICAgdHJhbnNmb3JtX2NhcHMgZnVuY3Rpb24gaXMgdXNlZnVsIGZvciBlbGVtZW50cyB0aGF0IG9ubHkgaW5zcGVjdCBkYXRhCisgKiAgICAgKHN1Y2ggYXMgbGV2ZWwpCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogICA8L2l0ZW1pemVkbGlzdD4KKyAqICAgPGl0ZW1pemVkbGlzdD4KKyAqICAgPHRpdGxlPkV4YW1wbGUgZWxlbWVudHM8L3RpdGxlPgorICogICAgIDxsaXN0aXRlbT5MZXZlbDwvbGlzdGl0ZW0+CisgKiAgICAgPGxpc3RpdGVtPlZpZGVvc2NhbGUsIGF1ZGlvY29udmVydCwgZmZtcGVnY29sb3JzcGFjZSwgYXVkaW9yZXNhbXBsZSBpbgorICogICAgIGNlcnRhaW4gbW9kZXMuPC9saXN0aXRlbT4KKyAqICAgPC9pdGVtaXplZGxpc3Q+CisgKiA8L2xpc3RpdGVtPgorICogPGxpc3RpdGVtPgorICogICA8aXRlbWl6ZWRsaXN0PgorICogICAgIDx0aXRsZT5Nb2RpZmljYXRpb25zIGluLXBsYWNlIC0gaW5wdXQgYnVmZmVyIGFuZCBvdXRwdXQgYnVmZmVyIGFyZSB0aGUKKyAqICAgICBzYW1lIHRoaW5nLjwvdGl0bGU+CisgKiAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICBUaGUgZWxlbWVudCBtdXN0IGltcGxlbWVudCBhIHRyYW5zZm9ybV9pcCBmdW5jdGlvbi4KKyAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICBPdXRwdXQgYnVmZmVyIHNpemUgbXVzdCA8PSBpbnB1dCBidWZmZXIgc2l6ZQorICogICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgIElmIHRoZSBhbHdheXNfaW5fcGxhY2UgZmxhZyBpcyBzZXQsIG5vbi13cml0YWJsZSBidWZmZXJzIHdpbGwgYmUgY29waWVkCisgKiAgICAgYW5kIHBhc3NlZCB0byB0aGUgdHJhbnNmb3JtX2lwIGZ1bmN0aW9uLCBvdGhlcndpc2UgYSBuZXcgYnVmZmVyIHdpbGwgYmUKKyAqICAgICBjcmVhdGVkIGFuZCB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uIGNhbGxlZC4KKyAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICBJbmNvbWluZyB3cml0YWJsZSBidWZmZXJzIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSB0cmFuc2Zvcm1faXAgZnVuY3Rpb24KKyAqICAgICBpbW1lZGlhdGVseS4gIDwvcGFyYT48L2xpc3RpdGVtPgorICogICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgb25seSBpbXBsZW1lbnRpbmcgdHJhbnNmb3JtX2lwIGFuZCBub3QgdHJhbnNmb3JtIGltcGxpZXMgYWx3YXlzX2luX3BsYWNlCisgKiAgICAgPSBUUlVFCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogICA8L2l0ZW1pemVkbGlzdD4KKyAqICAgPGl0ZW1pemVkbGlzdD4KKyAqICAgPHRpdGxlPkV4YW1wbGUgZWxlbWVudHM8L3RpdGxlPgorICogICAgIDxsaXN0aXRlbT5Wb2x1bWU8L2xpc3RpdGVtPgorICogICAgIDxsaXN0aXRlbT5BdWRpb2NvbnZlcnQgaW4gY2VydGFpbiBtb2RlcyAoc2lnbmVkL3Vuc2lnbmVkCisgKiAgICAgY29udmVyc2lvbik8L2xpc3RpdGVtPgorICogICAgIDxsaXN0aXRlbT5mZm1wZWdjb2xvcnNwYWNlIGluIGNlcnRhaW4gbW9kZXMgKGVuZGlhbm5lc3MKKyAqICAgICBzd2FwcGluZyk8L2xpc3RpdGVtPgorICogICA8L2l0ZW1pemVkbGlzdD4KKyAqICA8L2xpc3RpdGVtPgorICogPGxpc3RpdGVtPgorICogICA8aXRlbWl6ZWRsaXN0PgorICogICA8dGl0bGU+TW9kaWZpY2F0aW9ucyBvbmx5IHRvIHRoZSBjYXBzL21ldGFkYXRhIG9mIGEgYnVmZmVyPC90aXRsZT4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgIFRoZSBlbGVtZW50IGRvZXMgbm90IHJlcXVpcmUgd3JpdGFibGUgZGF0YSwgYnV0IG5vbi13cml0YWJsZSBidWZmZXJzCisgKiAgICAgc2hvdWxkIGJlIHN1YmJ1ZmZlcmVkIHNvIHRoYXQgdGhlIG1ldGEtaW5mb3JtYXRpb24gY2FuIGJlIHJlcGxhY2VkLgorICogICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgIEVsZW1lbnRzIHdpc2hpbmcgdG8gb3BlcmF0ZSBpbiB0aGlzIG1vZGUgc2hvdWxkIHJlcGxhY2UgdGhlCisgKiAgICAgcHJlcGFyZV9vdXRwdXRfYnVmZmVyIG1ldGhvZCB0byBjcmVhdGUgc3ViYnVmZmVycyBvZiB0aGUgaW5wdXQgYnVmZmVyCisgKiAgICAgYW5kIHNldCBhbHdheXNfaW5fcGxhY2UgdG8gVFJVRQorICogICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgPC9pdGVtaXplZGxpc3Q+CisgKiAgIDxpdGVtaXplZGxpc3Q+CisgKiAgIDx0aXRsZT5FeGFtcGxlIGVsZW1lbnRzPC90aXRsZT4KKyAqICAgICA8bGlzdGl0ZW0+Q2Fwc2ZpbHRlciB3aGVuIHNldHRpbmcgY2FwcyBvbiBvdXRnb2luZyBidWZmZXJzIHRoYXQgaGF2ZQorICogICAgIG5vbmUuPC9saXN0aXRlbT4KKyAqICAgICA8bGlzdGl0ZW0+aWRlbnRpdHkgd2hlbiBpdCBpcyBnb2luZyB0byByZS10aW1lc3RhbXAgYnVmZmVycyBieQorICogICAgIGRhdGFyYXRlLjwvbGlzdGl0ZW0+CisgKiAgIDwvaXRlbWl6ZWRsaXN0PgorICogPC9saXN0aXRlbT4KKyAqIDxsaXN0aXRlbT4KKyAqICAgPGl0ZW1pemVkbGlzdD48dGl0bGU+Tm9ybWFsIG1vZGU8L3RpdGxlPgorICogICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgYWx3YXlzX2luX3BsYWNlIGZsYWcgaXMgbm90IHNldCwgb3IgdGhlcmUgaXMgbm8gdHJhbnNmb3JtX2lwIGZ1bmN0aW9uCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgRWxlbWVudCB3aWxsIHJlY2VpdmUgYW4gaW5wdXQgYnVmZmVyIGFuZCBvdXRwdXQgYnVmZmVyIHRvIG9wZXJhdGUgb24uCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgT3V0cHV0IGJ1ZmZlciBpcyBhbGxvY2F0ZWQgYnkgY2FsbGluZyB0aGUgcHJlcGFyZV9vdXRwdXRfYnVmZmVyIGZ1bmN0aW9uLgorICogICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgPC9pdGVtaXplZGxpc3Q+CisgKiAgIDxpdGVtaXplZGxpc3Q+CisgKiAgIDx0aXRsZT5FeGFtcGxlIGVsZW1lbnRzPC90aXRsZT4KKyAqICAgICA8bGlzdGl0ZW0+VmlkZW9zY2FsZSwgZmZtcGVnY29sb3JzcGFjZSwgYXVkaW9jb252ZXJ0IHdoZW4gZG9pbmcKKyAqICAgICBzY2FsaW5nL2NvbnZlcnNpb25zPC9saXN0aXRlbT4KKyAqICAgPC9pdGVtaXplZGxpc3Q+CisgKiA8L2xpc3RpdGVtPgorICogPGxpc3RpdGVtPgorICogICA8aXRlbWl6ZWRsaXN0Pjx0aXRsZT5TcGVjaWFsIG91dHB1dCBidWZmZXIgYWxsb2NhdGlvbnM8L3RpdGxlPgorICogICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgRWxlbWVudHMgd2hpY2ggbmVlZCB0byBkbyBzcGVjaWFsIGFsbG9jYXRpb24gb2YgdGhlaXIgb3V0cHV0IGJ1ZmZlcnMKKyAqICAgICBvdGhlciB0aGFuIHdoYXQgZ3N0X2J1ZmZlcl9wYWRfYWxsb2MgYWxsb3dzIHNob3VsZCBpbXBsZW1lbnQgYQorICogICAgIHByZXBhcmVfb3V0cHV0X2J1ZmZlciBtZXRob2QsIHdoaWNoIGNhbGxzIHRoZSBwYXJlbnQgaW1wbGVtZW50YXRpb24gYW5kCisgKiAgICAgcGFzc2VzIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyLgorICogICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgPC9pdGVtaXplZGxpc3Q+CisgKiAgIDxpdGVtaXplZGxpc3Q+CisgKiAgIDx0aXRsZT5FeGFtcGxlIGVsZW1lbnRzPC90aXRsZT4KKyAqICAgICA8bGlzdGl0ZW0+ZWZlbmNlPC9saXN0aXRlbT4KKyAqICAgPC9pdGVtaXplZGxpc3Q+CisgKiA8L2xpc3RpdGVtPgorICogPC9vcmRlcmVkbGlzdD4KKyAqIDwvcGFyYT4KKyAqIDwvcmVmc2VjdDI+CisgKiA8cmVmc2VjdDI+CisgKiA8dGl0bGU+U3ViLWNsYXNzIHNldHRhYmxlIGZsYWdzIG9uIEdzdEJhc2VUcmFuc2Zvcm08L3RpdGxlPgorICogPHBhcmE+CisgKiA8aXRlbWl6ZWRsaXN0PgorICogPGxpc3RpdGVtPjxwYXJhPgorICogICA8aXRlbWl6ZWRsaXN0Pjx0aXRsZT5wYXNzdGhyb3VnaDwvdGl0bGU+CisgKiAgICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgICAgSW1wbGllcyB0aGF0IGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIHRoZSBzdWItY2xhc3MgaXMgbm90CisgKiAgICAgICBpbnRlcmVzdGVkIGluIG1vZGlmeWluZyB0aGUgYnVmZmVycy4KKyAqICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgICBFbGVtZW50cyB3aGljaCBhcmUgYWx3YXlzIGluIHBhc3N0aHJvdWdoIG1vZGUgd2hlbmV2ZXIgdGhlIHNhbWUgY2FwcworICogICAgICAgaGFzIGJlZW4gbmVnb3RpYXRlZCBvbiBib3RoIHBhZHMgY2FuIHNldCB0aGUgY2xhc3MgdmFyaWFibGUKKyAqICAgICAgIHBhc3N0aHJvdWdoX29uX3NhbWVfY2FwcyB0byBoYXZlIHRoaXMgYmVoYXZpb3VyIGF1dG9tYXRpY2FsbHkuCisgKiAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDwvaXRlbWl6ZWRsaXN0PgorICogPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgIDxpdGVtaXplZGxpc3Q+PHRpdGxlPmFsd2F5c19pbl9wbGFjZTwvdGl0bGU+CisgKiAgICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgICAgRGV0ZXJtaW5lcyB3aGV0aGVyIGEgbm9uLXdyaXRhYmxlIGJ1ZmZlciB3aWxsIGJlIGNvcGllZCBiZWZvcmUgcGFzc2luZworICogICAgICAgdG8gdGhlIHRyYW5zZm9ybV9pcCBmdW5jdGlvbi4KKyAqICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgICBJbXBsaWVkIFRSVUUgaWYgbm8gdHJhbnNmb3JtIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkLgorICogICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogICAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICAgIEltcGxpZWQgRkFMU0UgaWYgT05MWSB0cmFuc2Zvcm0gZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQuCisgKiAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDwvaXRlbWl6ZWRsaXN0PgorICogPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiA8L2l0ZW1pemVkbGlzdD4KKyAqIDwvcGFyYT4KKyAqIDwvcmVmc2VjdDI+CisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgIi4uLy4uLy4uL2dzdC9nc3RfcHJpdmF0ZS5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2dzdC9nc3QtaTE4bi1saWIuaCIKKyNpbmNsdWRlICJnc3RiYXNldHJhbnNmb3JtLmgiCisjaW5jbHVkZSA8Z3N0L2dzdG1hcnNoYWwuaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9iYXNlX3RyYW5zZm9ybV9kZWJ1ZworCisvKiBCYXNlVHJhbnNmb3JtIHNpZ25hbHMgYW5kIGFyZ3MgKi8KK2VudW0KK3sKKyAgLyogRklMTCBNRSAqLworICBMQVNUX1NJR05BTAorfTsKKworI2RlZmluZSBERUZBVUxUX1BST1BfUU9TCUZBTFNFCisKK2VudW0KK3sKKyAgUFJPUF8wLAorICBQUk9QX1FPUworfTsKKworI2RlZmluZSBHU1RfQkFTRV9UUkFOU0ZPUk1fR0VUX1BSSVZBVEUob2JqKSAgXAorICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKChvYmopLCBHU1RfVFlQRV9CQVNFX1RSQU5TRk9STSwgR3N0QmFzZVRyYW5zZm9ybVByaXZhdGUpKQorCitzdHJ1Y3QgX0dzdEJhc2VUcmFuc2Zvcm1Qcml2YXRlCit7CisgIC8qIFFvUyAqLy8qIHdpdGggTE9DSyAqLworICBnYm9vbGVhbiBxb3NfZW5hYmxlZDsKKyAgZ2RvdWJsZSBwcm9wb3J0aW9uOworICBHc3RDbG9ja1RpbWUgZWFybGllc3RfdGltZTsKKyAgLyogcHJldmlvdXMgYnVmZmVyIGhhZCBhIGRpc2NvbnQgKi8KKyAgZ2Jvb2xlYW4gZGlzY29udDsKKworICBHc3RBY3RpdmF0ZU1vZGUgcGFkX21vZGU7CisKKyAgZ2Jvb2xlYW4gZ2FwX2F3YXJlOworCisgIGdib29sZWFuIHJlY29uZmlndXJlOworCisgIC8qIFFvUyBzdGF0cyAqLworICBndWludDY0IHByb2Nlc3NlZDsKKyAgZ3VpbnQ2NCBkcm9wcGVkOworCisgIEdzdENsb2NrVGltZSBwb3NpdGlvbl9vdXQ7CisKKyAgR3N0QnVmZmVyUG9vbCAqcG9vbDsKKyAgY29uc3QgR3N0QWxsb2NhdG9yICphbGxvY2F0b3I7CisgIGd1aW50IHByZWZpeDsKKyAgZ3VpbnQgYWxpZ25tZW50OworfTsKKworCitzdGF0aWMgR3N0RWxlbWVudENsYXNzICpwYXJlbnRfY2xhc3MgPSBOVUxMOworCitzdGF0aWMgdm9pZCBnc3RfYmFzZV90cmFuc2Zvcm1fY2xhc3NfaW5pdCAoR3N0QmFzZVRyYW5zZm9ybUNsYXNzICoga2xhc3MpOworc3RhdGljIHZvaWQgZ3N0X2Jhc2VfdHJhbnNmb3JtX2luaXQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKKyAgICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKiBrbGFzcyk7CisKKy8qIHdlIGNhbid0IHVzZSBHX0RFRklORV9BQlNUUkFDVF9UWVBFIGJlY2F1c2Ugd2UgbmVlZCB0aGUga2xhc3MgaW4gdGhlIF9pbml0CisgKiBtZXRob2QgdG8gZ2V0IHRvIHRoZSBwYWR0ZW1wbGF0ZXMgKi8KK0dUeXBlCitnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyB2b2xhdGlsZSBnc2l6ZSBiYXNlX3RyYW5zZm9ybV90eXBlID0gMDsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZiYXNlX3RyYW5zZm9ybV90eXBlKSkgeworICAgIEdUeXBlIF90eXBlOworICAgIHN0YXRpYyBjb25zdCBHVHlwZUluZm8gYmFzZV90cmFuc2Zvcm1faW5mbyA9IHsKKyAgICAgIHNpemVvZiAoR3N0QmFzZVRyYW5zZm9ybUNsYXNzKSwKKyAgICAgIE5VTEwsCisgICAgICBOVUxMLAorICAgICAgKEdDbGFzc0luaXRGdW5jKSBnc3RfYmFzZV90cmFuc2Zvcm1fY2xhc3NfaW5pdCwKKyAgICAgIE5VTEwsCisgICAgICBOVUxMLAorICAgICAgc2l6ZW9mIChHc3RCYXNlVHJhbnNmb3JtKSwKKyAgICAgIDAsCisgICAgICAoR0luc3RhbmNlSW5pdEZ1bmMpIGdzdF9iYXNlX3RyYW5zZm9ybV9pbml0LAorICAgIH07CisKKyAgICBfdHlwZSA9IGdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMgKEdTVF9UWVBFX0VMRU1FTlQsCisgICAgICAgICJHc3RCYXNlVHJhbnNmb3JtIiwgJmJhc2VfdHJhbnNmb3JtX2luZm8sIEdfVFlQRV9GTEFHX0FCU1RSQUNUKTsKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmJhc2VfdHJhbnNmb3JtX3R5cGUsIF90eXBlKTsKKyAgfQorICByZXR1cm4gYmFzZV90cmFuc2Zvcm1fdHlwZTsKK30KKworc3RhdGljIHZvaWQgZ3N0X2Jhc2VfdHJhbnNmb3JtX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKK3N0YXRpYyB2b2lkIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7CitzdGF0aWMgdm9pZCBnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOworc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3RyYW5zZm9ybV9zcmNfYWN0aXZhdGVfcHVsbCAoR3N0UGFkICogcGFkLAorICAgIGdib29sZWFuIGFjdGl2ZSk7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2VfdHJhbnNmb3JtX3NpbmtfYWN0aXZhdGVfcHVzaCAoR3N0UGFkICogcGFkLAorICAgIGdib29sZWFuIGFjdGl2ZSk7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2VfdHJhbnNmb3JtX2FjdGl2YXRlIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCisgICAgZ2Jvb2xlYW4gYWN0aXZlKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0X3VuaXRfc2l6ZSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAorICAgIEdzdENhcHMgKiBjYXBzLCBnc2l6ZSAqIHNpemUpOworCitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2VfdHJhbnNmb3JtX3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV90cmFuc2Zvcm1fc3JjX2V2ZW50ZnVuYyAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAorICAgIEdzdEV2ZW50ICogZXZlbnQpOworc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3RyYW5zZm9ybV9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpOworc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3RyYW5zZm9ybV9zaW5rX2V2ZW50ZnVuYyAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAorICAgIEdzdEV2ZW50ICogZXZlbnQpOworc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldHJhbmdlIChHc3RQYWQgKiBwYWQsIGd1aW50NjQgb2Zmc2V0LAorICAgIGd1aW50IGxlbmd0aCwgR3N0QnVmZmVyICoqIGJ1ZmZlcik7CitzdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfYmFzZV90cmFuc2Zvcm1fY2hhaW4gKEdzdFBhZCAqIHBhZCwKKyAgICBHc3RCdWZmZXIgKiBidWZmZXIpOworc3RhdGljIEdzdENhcHMgKmdzdF9iYXNlX3RyYW5zZm9ybV9nZXRjYXBzIChHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBmaWx0ZXIpOworc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3RyYW5zZm9ybV9hY2NlcHRjYXBzIChHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBjYXBzKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV90cmFuc2Zvcm1fYWNjZXB0Y2Fwc19kZWZhdWx0IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCisgICAgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwgR3N0Q2FwcyAqIGNhcHMpOworc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRjYXBzIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCisgICAgR3N0UGFkICogcGFkLCBHc3RDYXBzICogY2Fwcyk7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2VfdHJhbnNmb3JtX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdFF1ZXJ5ICogcXVlcnkpOworc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3RyYW5zZm9ybV9kZWZhdWx0X3F1ZXJ5IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCisgICAgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwgR3N0UXVlcnkgKiBxdWVyeSk7CitzdGF0aWMgY29uc3QgR3N0UXVlcnlUeXBlICpnc3RfYmFzZV90cmFuc2Zvcm1fcXVlcnlfdHlwZSAoR3N0UGFkICogcGFkKTsKKworc3RhdGljIEdzdEZsb3dSZXR1cm4gZGVmYXVsdF9wcmVwYXJlX291dHB1dF9idWZmZXIgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKKyAgICBHc3RCdWZmZXIgKiBpbmJ1ZiwgR3N0QnVmZmVyICoqIG91dGJ1Zik7CitzdGF0aWMgZ2Jvb2xlYW4gZGVmYXVsdF9jb3B5X21ldGFkYXRhIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCisgICAgR3N0QnVmZmVyICogaW5idWYsIEdzdEJ1ZmZlciAqIG91dGJ1Zik7CisKKy8qIHN0YXRpYyBndWludCBnc3RfYmFzZV90cmFuc2Zvcm1fc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsgKi8KKworCitzdGF0aWMgdm9pZAorZ3N0X2Jhc2VfdHJhbnNmb3JtX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQoreworICBHc3RCYXNlVHJhbnNmb3JtICp0cmFuczsKKworICB0cmFucyA9IEdTVF9CQVNFX1RSQU5TRk9STSAob2JqZWN0KTsKKworICBnX211dGV4X2ZyZWUgKHRyYW5zLT50cmFuc2Zvcm1fbG9jayk7CisKKyAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2Jhc2VfdHJhbnNmb3JtX2NsYXNzX2luaXQgKEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqIGtsYXNzKQoreworICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7CisKKyAgZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7CisKKyAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9iYXNlX3RyYW5zZm9ybV9kZWJ1ZywgImJhc2V0cmFuc2Zvcm0iLCAwLAorICAgICAgImJhc2V0cmFuc2Zvcm0gZWxlbWVudCIpOworCisgIEdTVF9ERUJVRyAoImdzdF9iYXNlX3RyYW5zZm9ybV9jbGFzc19pbml0Iik7CisKKyAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChrbGFzcywgc2l6ZW9mIChHc3RCYXNlVHJhbnNmb3JtUHJpdmF0ZSkpOworCisgIHBhcmVudF9jbGFzcyA9IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCAoa2xhc3MpOworCisgIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcHJvcGVydHk7CisgIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfcHJvcGVydHk7CisKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9RT1MsCisgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInFvcyIsICJRb1MiLCAiSGFuZGxlIFF1YWxpdHktb2YtU2VydmljZSBldmVudHMiLAorICAgICAgICAgIERFRkFVTFRfUFJPUF9RT1MsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworCisgIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X2Jhc2VfdHJhbnNmb3JtX2ZpbmFsaXplOworCisgIGtsYXNzLT5wYXNzdGhyb3VnaF9vbl9zYW1lX2NhcHMgPSBGQUxTRTsKKyAga2xhc3MtPnNpbmtfZXZlbnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NpbmtfZXZlbnRmdW5jKTsKKyAga2xhc3MtPnNyY19ldmVudCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmFzZV90cmFuc2Zvcm1fc3JjX2V2ZW50ZnVuYyk7CisgIGtsYXNzLT5hY2NlcHRfY2FwcyA9CisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2FjY2VwdGNhcHNfZGVmYXVsdCk7CisgIGtsYXNzLT5wcmVwYXJlX291dHB1dF9idWZmZXIgPQorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGRlZmF1bHRfcHJlcGFyZV9vdXRwdXRfYnVmZmVyKTsKKyAga2xhc3MtPmNvcHlfbWV0YWRhdGEgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZGVmYXVsdF9jb3B5X21ldGFkYXRhKTsKKyAga2xhc3MtPnF1ZXJ5ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3RyYW5zZm9ybV9kZWZhdWx0X3F1ZXJ5KTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9iYXNlX3RyYW5zZm9ybV9pbml0IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCisgICAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzICogYmNsYXNzKQoreworICBHc3RQYWRUZW1wbGF0ZSAqcGFkX3RlbXBsYXRlOworCisgIEdTVF9ERUJVRyAoImdzdF9iYXNlX3RyYW5zZm9ybV9pbml0Iik7CisKKyAgdHJhbnMtPnByaXYgPSBHU1RfQkFTRV9UUkFOU0ZPUk1fR0VUX1BSSVZBVEUgKHRyYW5zKTsKKworICBwYWRfdGVtcGxhdGUgPQorICAgICAgZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoR1NUX0VMRU1FTlRfQ0xBU1MgKGJjbGFzcyksICJzaW5rIik7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKHBhZF90ZW1wbGF0ZSAhPSBOVUxMKTsKKyAgdHJhbnMtPnNpbmtwYWQgPSBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlIChwYWRfdGVtcGxhdGUsICJzaW5rIik7CisgIGdzdF9wYWRfc2V0X2dldGNhcHNfZnVuY3Rpb24gKHRyYW5zLT5zaW5rcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRjYXBzKSk7CisgIGdzdF9wYWRfc2V0X2FjY2VwdGNhcHNfZnVuY3Rpb24gKHRyYW5zLT5zaW5rcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3RyYW5zZm9ybV9hY2NlcHRjYXBzKSk7CisgIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uICh0cmFucy0+c2lua3BhZCwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmFzZV90cmFuc2Zvcm1fc2lua19ldmVudCkpOworICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAodHJhbnMtPnNpbmtwYWQsCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NoYWluKSk7CisgIGdzdF9wYWRfc2V0X2FjdGl2YXRlcHVzaF9mdW5jdGlvbiAodHJhbnMtPnNpbmtwYWQsCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NpbmtfYWN0aXZhdGVfcHVzaCkpOworICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAodHJhbnMtPnNpbmtwYWQsCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3F1ZXJ5KSk7CisgIGdzdF9wYWRfc2V0X3F1ZXJ5X3R5cGVfZnVuY3Rpb24gKHRyYW5zLT5zaW5rcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3RyYW5zZm9ybV9xdWVyeV90eXBlKSk7CisgIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UICh0cmFucyksIHRyYW5zLT5zaW5rcGFkKTsKKworICBwYWRfdGVtcGxhdGUgPQorICAgICAgZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoR1NUX0VMRU1FTlRfQ0xBU1MgKGJjbGFzcyksICJzcmMiKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAocGFkX3RlbXBsYXRlICE9IE5VTEwpOworICB0cmFucy0+c3JjcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAocGFkX3RlbXBsYXRlLCAic3JjIik7CisgIGdzdF9wYWRfc2V0X2dldGNhcHNfZnVuY3Rpb24gKHRyYW5zLT5zcmNwYWQsCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldGNhcHMpKTsKKyAgZ3N0X3BhZF9zZXRfYWNjZXB0Y2Fwc19mdW5jdGlvbiAodHJhbnMtPnNyY3BhZCwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmFzZV90cmFuc2Zvcm1fYWNjZXB0Y2FwcykpOworICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAodHJhbnMtPnNyY3BhZCwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmFzZV90cmFuc2Zvcm1fc3JjX2V2ZW50KSk7CisgIGdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uICh0cmFucy0+c3JjcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRyYW5nZSkpOworICBnc3RfcGFkX3NldF9hY3RpdmF0ZXB1bGxfZnVuY3Rpb24gKHRyYW5zLT5zcmNwYWQsCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NyY19hY3RpdmF0ZV9wdWxsKSk7CisgIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uICh0cmFucy0+c3JjcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3RyYW5zZm9ybV9xdWVyeSkpOworICBnc3RfcGFkX3NldF9xdWVyeV90eXBlX2Z1bmN0aW9uICh0cmFucy0+c3JjcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3RyYW5zZm9ybV9xdWVyeV90eXBlKSk7CisgIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UICh0cmFucyksIHRyYW5zLT5zcmNwYWQpOworCisgIHRyYW5zLT50cmFuc2Zvcm1fbG9jayA9IGdfbXV0ZXhfbmV3ICgpOworICB0cmFucy0+cHJpdi0+cW9zX2VuYWJsZWQgPSBERUZBVUxUX1BST1BfUU9TOworICB0cmFucy0+Y2FjaGVfY2FwczEgPSBOVUxMOworICB0cmFucy0+Y2FjaGVfY2FwczIgPSBOVUxMOworICB0cmFucy0+cHJpdi0+cGFkX21vZGUgPSBHU1RfQUNUSVZBVEVfTk9ORTsKKyAgdHJhbnMtPnByaXYtPmdhcF9hd2FyZSA9IEZBTFNFOworCisgIHRyYW5zLT5wYXNzdGhyb3VnaCA9IEZBTFNFOworICBpZiAoYmNsYXNzLT50cmFuc2Zvcm0gPT0gTlVMTCkgeworICAgIC8qIElmIG5vIHRyYW5zZm9ybSBmdW5jdGlvbiwgYWx3YXlzX2luX3BsYWNlIGlzIFRSVUUgKi8KKyAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgInNldHRpbmcgaW5fcGxhY2UgVFJVRSIpOworICAgIHRyYW5zLT5hbHdheXNfaW5fcGxhY2UgPSBUUlVFOworCisgICAgaWYgKGJjbGFzcy0+dHJhbnNmb3JtX2lwID09IE5VTEwpIHsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAic2V0dGluZyBwYXNzdGhyb3VnaCBUUlVFIik7CisgICAgICB0cmFucy0+cGFzc3Rocm91Z2ggPSBUUlVFOworICAgIH0KKyAgfQorCisgIHRyYW5zLT5wcml2LT5wcm9jZXNzZWQgPSAwOworICB0cmFucy0+cHJpdi0+ZHJvcHBlZCA9IDA7Cit9CisKKy8qIGdpdmVuIEBjYXBzIG9uIHRoZSBzcmMgb3Igc2luayBwYWQgKGdpdmVuIGJ5IEBkaXJlY3Rpb24pCisgKiBjYWxjdWxhdGUgdGhlIHBvc3NpYmxlIGNhcHMgb24gdGhlIG90aGVyIHBhZC4KKyAqCisgKiBSZXR1cm5zIG5ldyBjYXBzLCB1bnJlZiBhZnRlciB1c2FnZS4KKyAqLworc3RhdGljIEdzdENhcHMgKgorZ3N0X2Jhc2VfdHJhbnNmb3JtX3RyYW5zZm9ybV9jYXBzIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCisgICAgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwgR3N0Q2FwcyAqIGNhcHMsIEdzdENhcHMgKiBmaWx0ZXIpCit7CisgIEdzdENhcHMgKnJldDsKKyAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzICprbGFzczsKKworICBpZiAoY2FwcyA9PSBOVUxMKQorICAgIHJldHVybiBOVUxMOworCisgIGtsYXNzID0gR1NUX0JBU0VfVFJBTlNGT1JNX0dFVF9DTEFTUyAodHJhbnMpOworCisgIC8qIGlmIHRoZXJlIGlzIGEgY3VzdG9tIHRyYW5zZm9ybSBmdW5jdGlvbiwgdXNlIHRoaXMgKi8KKyAgaWYgKGtsYXNzLT50cmFuc2Zvcm1fY2FwcykgeworCisgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJ0cmFuc2Zvcm0gY2FwcyAoZGlyZWN0aW9uID0gJWQpIiwgZGlyZWN0aW9uKTsKKworICAgIEdTVF9MT0dfT0JKRUNUICh0cmFucywgImZyb206ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKKyAgICByZXQgPSBrbGFzcy0+dHJhbnNmb3JtX2NhcHMgKHRyYW5zLCBkaXJlY3Rpb24sIGNhcHMsIGZpbHRlcik7CisgICAgR1NUX0xPR19PQkpFQ1QgKHRyYW5zLCAiICB0bzogJSIgR1NUX1BUUl9GT1JNQVQsIHJldCk7CisKKyNpZm5kZWYgR19ESVNBQkxFX0FTU0VSVAorICAgIGlmIChmaWx0ZXIpIHsKKyAgICAgIGlmICghZ3N0X2NhcHNfaXNfc3Vic2V0IChyZXQsIGZpbHRlcikpIHsKKyAgICAgICAgR3N0Q2FwcyAqaW50ZXJzZWN0aW9uOworCisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHRyYW5zLAorICAgICAgICAgICAgInRyYW5zZm9ybV9jYXBzIHJldHVybmVkIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQKKyAgICAgICAgICAgICIgd2hpY2ggYXJlIG5vdCBhIHJlYWwgc3Vic2V0IG9mIHRoZSBmaWx0ZXIgY2FwcyAlIgorICAgICAgICAgICAgR1NUX1BUUl9GT1JNQVQsIHJldCwgZmlsdGVyKTsKKyAgICAgICAgZ193YXJuaW5nICgiJXM6IHRyYW5zZm9ybV9jYXBzIHJldHVybmVkIGNhcHMgd2hpY2ggYXJlIG5vdCBhIHJlYWwgIgorICAgICAgICAgICAgInN1YnNldCBvZiB0aGUgZmlsdGVyIGNhcHMiLCBHU1RfRUxFTUVOVF9OQU1FICh0cmFucykpOworCisgICAgICAgIGludGVyc2VjdGlvbiA9CisgICAgICAgICAgICBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCByZXQsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7CisgICAgICAgIGdzdF9jYXBzX3VucmVmIChpbnRlcnNlY3Rpb24pOworICAgICAgICByZXQgPSBpbnRlcnNlY3Rpb247CisgICAgICB9CisgICAgfQorI2VuZGlmCisgIH0gZWxzZSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJpZGVudGl0eSBmcm9tOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7CisgICAgLyogbm8gdHJhbnNmb3JtIGZ1bmN0aW9uLCB1c2UgdGhlIGlkZW50aXR5IHRyYW5zZm9ybSAqLworICAgIGlmIChmaWx0ZXIpIHsKKyAgICAgIHJldCA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChmaWx0ZXIsIGNhcHMsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldCA9IGdzdF9jYXBzX3JlZiAoY2Fwcyk7CisgICAgfQorICB9CisKKyAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJ0bzogKCVkKSAlIiBHU1RfUFRSX0ZPUk1BVCwgZ3N0X2NhcHNfZ2V0X3NpemUgKHJldCksCisgICAgICByZXQpOworCisgIHJldHVybiByZXQ7Cit9CisKKy8qIHRyYW5zZm9ybSBhIGJ1ZmZlciBvZiBAc2l6ZSB3aXRoIEBjYXBzIG9uIHRoZSBwYWQgd2l0aCBAZGlyZWN0aW9uIHRvCisgKiB0aGUgc2l6ZSBvZiBhIGJ1ZmZlciB3aXRoIEBvdGhlcmNhcHMgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gQG90aGVyc2l6ZQorICoKKyAqIFdlIGhhdmUgdHdvIHdheXMgb2YgZG9pbmcgdGhpczoKKyAqICAxKSB1c2UgYSBjdXN0b20gdHJhbnNmb3JtIHNpemUgZnVuY3Rpb24sIHRoaXMgaXMgZm9yIGNvbXBsaWNhdGVkIGN1c3RvbQorICogICAgIGNhc2VzIHdpdGggbm8gZml4ZWQgdW5pdF9zaXplLgorICogIDIpIHVzZSB0aGUgdW5pdF9zaXplIGZ1bmN0aW9ucyB3aGVyZSB0aGVyZSBpcyBhIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZQorICogICAgIGNhcHMgYW5kIHRoZSBzaXplIG9mIGEgYnVmZmVyLgorICovCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iYXNlX3RyYW5zZm9ybV90cmFuc2Zvcm1fc2l6ZSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAorICAgIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdENhcHMgKiBjYXBzLAorICAgIGdzaXplIHNpemUsIEdzdENhcHMgKiBvdGhlcmNhcHMsIGdzaXplICogb3RoZXJzaXplKQoreworICBnc2l6ZSBpbnVuaXRzaXplLCBvdXR1bml0c2l6ZSwgdW5pdHM7CisgIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqa2xhc3M7CisgIGdib29sZWFuIHJldDsKKworICBrbGFzcyA9IEdTVF9CQVNFX1RSQU5TRk9STV9HRVRfQ0xBU1MgKHRyYW5zKTsKKworICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywKKyAgICAgICJhc2tlZCB0byB0cmFuc2Zvcm0gc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCAiIGZvciBjYXBzICUiCisgICAgICBHU1RfUFRSX0ZPUk1BVCAiIHRvIHNpemUgZm9yIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQgIiBpbiBkaXJlY3Rpb24gJXMiLAorICAgICAgc2l6ZSwgY2Fwcywgb3RoZXJjYXBzLCBkaXJlY3Rpb24gPT0gR1NUX1BBRF9TUkMgPyAiU1JDIiA6ICJTSU5LIik7CisKKyAgaWYgKGtsYXNzLT50cmFuc2Zvcm1fc2l6ZSkgeworICAgIC8qIGlmIHRoZXJlIGlzIGEgY3VzdG9tIHRyYW5zZm9ybSBmdW5jdGlvbiwgdXNlIHRoaXMgKi8KKyAgICByZXQgPSBrbGFzcy0+dHJhbnNmb3JtX3NpemUgKHRyYW5zLCBkaXJlY3Rpb24sIGNhcHMsIHNpemUsIG90aGVyY2FwcywKKyAgICAgICAgb3RoZXJzaXplKTsKKyAgfSBlbHNlIGlmIChrbGFzcy0+Z2V0X3VuaXRfc2l6ZSA9PSBOVUxMKSB7CisgICAgLyogaWYgdGhlcmUgaXMgbm8gdHJhbnNmb3JtX3NpemUgYW5kIG5vIHVuaXRfc2l6ZSwgaXQgbWVhbnMgdGhlCisgICAgICogZWxlbWVudCBkb2VzIG5vdCBtb2RpZnkgdGhlIHNpemUgb2YgYSBidWZmZXIgKi8KKyAgICAqb3RoZXJzaXplID0gc2l6ZTsKKyAgICByZXQgPSBUUlVFOworICB9IGVsc2UgeworICAgIC8qIHRoZXJlIGlzIG5vIHRyYW5zZm9ybV9zaXplIGZ1bmN0aW9uLCB3ZSBoYXZlIHRvIHVzZSB0aGUgdW5pdF9zaXplCisgICAgICogZnVuY3Rpb25zLiBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoZXJlIGlzIGEgZml4ZWQgdW5pdF9zaXplIGFzc29jaWF0ZWQgd2l0aAorICAgICAqIGVhY2ggY2Fwcy4gV2UgcHJvdmlkZSB0aGUgc2FtZSBhbW91bnQgb2YgdW5pdHMgb24gYm90aCBzaWRlcy4gKi8KKyAgICBpZiAoIWdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfdW5pdF9zaXplICh0cmFucywgY2FwcywgJmludW5pdHNpemUpKQorICAgICAgZ290byBub19pbl9zaXplOworCisgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsCisgICAgICAgICJpbnB1dCBzaXplICUiIEdfR1NJWkVfRk9STUFUICIsIGlucHV0IHVuaXQgc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCwKKyAgICAgICAgc2l6ZSwgaW51bml0c2l6ZSk7CisKKyAgICAvKiBpbnB1dCBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgdW5pdF9zaXplIG9mIHRoZSBpbnB1dCBjYXBzICovCisgICAgaWYgKGludW5pdHNpemUgPT0gMCB8fCAoc2l6ZSAlIGludW5pdHNpemUgIT0gMCkpCisgICAgICBnb3RvIG5vX211bHRpcGxlOworCisgICAgLyogZ2V0IHRoZSBhbW91bnQgb2YgdW5pdHMgKi8KKyAgICB1bml0cyA9IHNpemUgLyBpbnVuaXRzaXplOworCisgICAgLyogbm93IGdldCB0aGUgdW5pdCBzaXplIG9mIHRoZSBvdXRwdXQgKi8KKyAgICBpZiAoIWdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfdW5pdF9zaXplICh0cmFucywgb3RoZXJjYXBzLCAmb3V0dW5pdHNpemUpKQorICAgICAgZ290byBub19vdXRfc2l6ZTsKKworICAgIC8qIHRoZSBvdXRwdXQgc2l6ZSBpcyB0aGUgdW5pdF9zaXplIHRpbWVzIHRoZSBhbW91bnQgb2YgdW5pdHMgb24gdGhlCisgICAgICogaW5wdXQgKi8KKyAgICAqb3RoZXJzaXplID0gdW5pdHMgKiBvdXR1bml0c2l6ZTsKKyAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgInRyYW5zZm9ybWVkIHNpemUgdG8gJSIgR19HU0laRV9GT1JNQVQsCisgICAgICAgICpvdGhlcnNpemUpOworCisgICAgcmV0ID0gVFJVRTsKKyAgfQorICByZXR1cm4gcmV0OworCisgIC8qIEVSUk9SUyAqLworbm9faW5fc2l6ZToKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiY291bGQgbm90IGdldCBpbl9zaXplIik7CisgICAgZ193YXJuaW5nICgiJXM6IGNvdWxkIG5vdCBnZXQgaW5fc2l6ZSIsIEdTVF9FTEVNRU5UX05BTUUgKHRyYW5zKSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Citub19tdWx0aXBsZToKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiU2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCAiIGlzIG5vdCBhIG11bHRpcGxlIG9mIgorICAgICAgICAidW5pdCBzaXplICUiIEdfR1NJWkVfRk9STUFULCBzaXplLCBpbnVuaXRzaXplKTsKKyAgICBnX3dhcm5pbmcgKCIlczogc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCAiIGlzIG5vdCBhIG11bHRpcGxlIG9mIHVuaXQgc2l6ZSAlIgorICAgICAgICBHX0dTSVpFX0ZPUk1BVCwgR1NUX0VMRU1FTlRfTkFNRSAodHJhbnMpLCBzaXplLCBpbnVuaXRzaXplKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK25vX291dF9zaXplOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJjb3VsZCBub3QgZ2V0IG91dF9zaXplIik7CisgICAgZ193YXJuaW5nICgiJXM6IGNvdWxkIG5vdCBnZXQgb3V0X3NpemUiLCBHU1RfRUxFTUVOVF9OQU1FICh0cmFucykpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCisvKiBnZXQgdGhlIGNhcHMgdGhhdCBjYW4gYmUgaGFuZGxlZCBieSBAcGFkLiBXZSBwZXJmb3JtOgorICoKKyAqICAtIHRha2UgdGhlIGNhcHMgb2YgcGVlciBvZiBvdGhlcnBhZCwKKyAqICAtIGZpbHRlciBhZ2FpbnN0IHRoZSBwYWR0ZW1wbGF0ZSBvZiBvdGhlcnBhZCwgCisgKiAgLSBjYWxjdWxhdGUgYWxsIHRyYW5zZm9ybXMgb2YgcmVtYWluaW5nIGNhcHMKKyAqICAtIGZpbHRlciBhZ2FpbnN0IHRlbXBsYXRlIG9mIEBwYWQKKyAqCisgKiBJZiB0aGVyZSBpcyBubyBwZWVyLCB3ZSBzaW1wbHkgcmV0dXJuIHRoZSBjYXBzIG9mIHRoZSBwYWR0ZW1wbGF0ZSBvZiBwYWQuCisgKi8KK3N0YXRpYyBHc3RDYXBzICoKK2dzdF9iYXNlX3RyYW5zZm9ybV9nZXRjYXBzIChHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBmaWx0ZXIpCit7CisgIEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zOworICBHc3RQYWQgKm90aGVycGFkOworICBHc3RDYXBzICpwZWVyY2FwcywgKmNhcHMsICp0ZW1wLCAqcGVlcmZpbHRlciA9IE5VTEw7CisgIEdzdENhcHMgKnRlbXBsOworCisgIHRyYW5zID0gR1NUX0JBU0VfVFJBTlNGT1JNIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOworCisgIG90aGVycGFkID0gKHBhZCA9PSB0cmFucy0+c3JjcGFkKSA/IHRyYW5zLT5zaW5rcGFkIDogdHJhbnMtPnNyY3BhZDsKKworICAvKiB3ZSBjYW4gZG8gd2hhdCB0aGUgcGVlciBjYW4gKi8KKyAgaWYgKGZpbHRlcikgeworCisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiZmlsdGVyIGNhcHMgICUiIEdTVF9QVFJfRk9STUFULCBmaWx0ZXIpOworCisgICAgLyogZmlsdGVyZWQgYWdhaW5zdCBvdXIgcGFkdGVtcGxhdGUgb24gdGhlIG90aGVyIHNpZGUgKi8KKyAgICB0ZW1wbCA9IGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzIChwYWQpOworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIm91ciB0ZW1wbGF0ZSAgJSIgR1NUX1BUUl9GT1JNQVQsIHRlbXBsKTsKKyAgICB0ZW1wID0gZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGZpbHRlciwgdGVtcGwsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiaW50ZXJzZWN0ZWQgJSIgR1NUX1BUUl9GT1JNQVQsIHRlbXApOworICAgIGdzdF9jYXBzX3VucmVmICh0ZW1wbCk7CisKKyAgICAvKiB0aGVuIHNlZSB3aGF0IHdlIGNhbiB0cmFuc2Zvcm0gdGhpcyB0byAqLworICAgIHBlZXJmaWx0ZXIgPSBnc3RfYmFzZV90cmFuc2Zvcm1fdHJhbnNmb3JtX2NhcHMgKHRyYW5zLAorICAgICAgICBHU1RfUEFEX0RJUkVDVElPTiAocGFkKSwgdGVtcCwgTlVMTCk7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAidHJhbnNmb3JtZWQgICUiIEdTVF9QVFJfRk9STUFULCBwZWVyZmlsdGVyKTsKKyAgICBnc3RfY2Fwc191bnJlZiAodGVtcCk7CisKKyAgICAvKiBhbmQgZmlsdGVyIGFnYWluc3QgdGhlIHRlbXBsYXRlIG9mIHRoaXMgcGFkICovCisgICAgdGVtcGwgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAob3RoZXJwYWQpOworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIm91ciB0ZW1wbGF0ZSAgJSIgR1NUX1BUUl9GT1JNQVQsIHRlbXBsKTsKKyAgICAvKiBXZSBrZWVwIHRoZSBjYXBzIHNvcnRlZCBsaWtlIHRoZSByZXR1cm5lZCBjYXBzICovCisgICAgdGVtcCA9CisgICAgICAgIGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChwZWVyZmlsdGVyLCB0ZW1wbCwgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJpbnRlcnNlY3RlZCAlIiBHU1RfUFRSX0ZPUk1BVCwgdGVtcCk7CisgICAgZ3N0X2NhcHNfdW5yZWYgKHBlZXJmaWx0ZXIpOworICAgIGdzdF9jYXBzX3VucmVmICh0ZW1wbCk7CisgICAgcGVlcmZpbHRlciA9IHRlbXA7CisgIH0KKworICBwZWVyY2FwcyA9IGdzdF9wYWRfcGVlcl9nZXRfY2FwcyAob3RoZXJwYWQsIHBlZXJmaWx0ZXIpOworCisgIGlmIChwZWVyZmlsdGVyKQorICAgIGdzdF9jYXBzX3VucmVmIChwZWVyZmlsdGVyKTsKKworICBpZiAocGVlcmNhcHMpIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJwZWVyIGNhcHMgICUiIEdTVF9QVFJfRk9STUFULCBwZWVyY2Fwcyk7CisKKyAgICAvKiBmaWx0ZXJlZCBhZ2FpbnN0IG91ciBwYWR0ZW1wbGF0ZSBvbiB0aGUgb3RoZXIgc2lkZSAqLworICAgIHRlbXBsID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKG90aGVycGFkKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJvdXIgdGVtcGxhdGUgICUiIEdTVF9QVFJfRk9STUFULCB0ZW1wbCk7CisgICAgdGVtcCA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChwZWVyY2FwcywgdGVtcGwsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiaW50ZXJzZWN0ZWQgJSIgR1NUX1BUUl9GT1JNQVQsIHRlbXApOworICAgIGdzdF9jYXBzX3VucmVmICh0ZW1wbCk7CisgIH0gZWxzZSB7CisgICAgdGVtcCA9IGdzdF9jYXBzX2NvcHkgKGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzIChvdGhlcnBhZCkpOworICB9CisKKyAgLyogdGhlbiBzZWUgd2hhdCB3ZSBjYW4gdHJhbnNmb3JtIHRoaXMgdG8gKi8KKyAgY2FwcyA9IGdzdF9iYXNlX3RyYW5zZm9ybV90cmFuc2Zvcm1fY2FwcyAodHJhbnMsCisgICAgICBHU1RfUEFEX0RJUkVDVElPTiAob3RoZXJwYWQpLCB0ZW1wLCBmaWx0ZXIpOworICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJ0cmFuc2Zvcm1lZCAgJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOworICBnc3RfY2Fwc191bnJlZiAodGVtcCk7CisgIGlmIChjYXBzID09IE5VTEwpCisgICAgZ290byBkb25lOworCisgIC8qIGFuZCBmaWx0ZXIgYWdhaW5zdCB0aGUgdGVtcGxhdGUgb2YgdGhpcyBwYWQgKi8KKyAgdGVtcGwgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAocGFkKTsKKyAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAib3VyIHRlbXBsYXRlICAlIiBHU1RfUFRSX0ZPUk1BVCwgdGVtcGwpOworICAvKiBXZSBrZWVwIHRoZSBjYXBzIHNvcnRlZCBsaWtlIHRoZSByZXR1cm5lZCBjYXBzICovCisgIHRlbXAgPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoY2FwcywgdGVtcGwsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7CisgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImludGVyc2VjdGVkICUiIEdTVF9QVFJfRk9STUFULCB0ZW1wKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOworICBnc3RfY2Fwc191bnJlZiAodGVtcGwpOworICBjYXBzID0gdGVtcDsKKworICBpZiAocGVlcmNhcHMpIHsKKyAgICAvKiBOb3cgdHJ5IGlmIHdlIGNhbiBwdXQgdGhlIHVudHJhbnNmb3JtZWQgZG93bnN0cmVhbSBjYXBzIGZpcnN0ICovCisgICAgdGVtcCA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChwZWVyY2FwcywgY2FwcywgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKKyAgICBpZiAoIWdzdF9jYXBzX2lzX2VtcHR5ICh0ZW1wKSkgeworICAgICAgZ3N0X2NhcHNfbWVyZ2UgKHRlbXAsIGNhcHMpOworICAgICAgY2FwcyA9IHRlbXA7CisgICAgfSBlbHNlIHsKKyAgICAgIGdzdF9jYXBzX3VucmVmICh0ZW1wKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgLyogbm8gcGVlciBvciB0aGUgcGVlciBjYW4gZG8gYW55dGhpbmcsIG91ciBwYWR0ZW1wbGF0ZSBpcyBlbm91Z2ggdGhlbiAqLworICAgIGNhcHMgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAocGFkKTsKKworICAgIGlmIChmaWx0ZXIpIHsKKyAgICAgIEdzdENhcHMgKnRlbXA7CisKKyAgICAgIHRlbXAgPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCBjYXBzLCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOworICAgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOworICAgICAgY2FwcyA9IHRlbXA7CisgICAgfQorICB9CisKK2RvbmU6CisgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAicmV0dXJuaW5nICAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7CisKKyAgaWYgKHBlZXJjYXBzKQorICAgIGdzdF9jYXBzX3VucmVmIChwZWVyY2Fwcyk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAodHJhbnMpOworCisgIHJldHVybiBjYXBzOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iYXNlX3RyYW5zZm9ybV9zZXRfYWxsb2NhdGlvbiAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAorICAgIEdzdEJ1ZmZlclBvb2wgKiBwb29sLCBjb25zdCBHc3RBbGxvY2F0b3IgKiBhbGxvY2F0b3IsIGd1aW50IHByZWZpeCwKKyAgICBndWludCBhbGlnbm1lbnQpCit7CisgIEdzdEJ1ZmZlclBvb2wgKm9sZHBvb2w7CisgIEdzdEJhc2VUcmFuc2Zvcm1Qcml2YXRlICpwcml2ID0gdHJhbnMtPnByaXY7CisKKyAgLyogYWN0aXZhdGUgKi8KKyAgaWYgKHBvb2wpIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgInNldHRpbmcgcG9vbCAlcCBhY3RpdmUiLCBwb29sKTsKKyAgICBpZiAoIWdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlIChwb29sLCBUUlVFKSkKKyAgICAgIGdvdG8gYWN0aXZhdGVfZmFpbGVkOworICB9CisKKyAgR1NUX09CSkVDVF9MT0NLICh0cmFucyk7CisgIG9sZHBvb2wgPSBwcml2LT5wb29sOworICBwcml2LT5wb29sID0gcG9vbDsKKyAgcHJpdi0+YWxsb2NhdG9yID0gYWxsb2NhdG9yOworICBwcml2LT5wcmVmaXggPSBwcmVmaXg7CisgIHByaXYtPmFsaWdubWVudCA9IGFsaWdubWVudDsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHRyYW5zKTsKKworICBpZiAob2xkcG9vbCkgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiZGVhY3RpdmF0aW5nIG9sZCBwb29sICVwIiwgb2xkcG9vbCk7CisgICAgZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUgKG9sZHBvb2wsIEZBTFNFKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChvbGRwb29sKTsKKyAgfQorICByZXR1cm4gVFJVRTsKKworICAvKiBFUlJPUlMgKi8KK2FjdGl2YXRlX2ZhaWxlZDoKKyAgeworICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHRyYW5zLCAiZmFpbGVkIHRvIGFjdGl2YXRlIGJ1ZmZlcnBvb2wuIik7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2Jhc2VfdHJhbnNmb3JtX2RvX2J1ZmZlcnBvb2wgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0Q2FwcyAqIG91dGNhcHMpCit7CisgIEdzdFF1ZXJ5ICpxdWVyeTsKKyAgZ2Jvb2xlYW4gcmVzdWx0ID0gVFJVRTsKKyAgR3N0QnVmZmVyUG9vbCAqcG9vbCA9IE5VTEwsICpvbGRwb29sOworICBndWludCBzaXplLCBtaW4sIG1heCwgcHJlZml4LCBhbGlnbm1lbnQ7CisgIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqa2xhc3M7CisgIGNvbnN0IEdzdEFsbG9jYXRvciAqYWxsb2NhdG9yID0gTlVMTDsKKworICAvKiB0aGVyZSBhcmUgdGhlc2UgcG9zc2liaWxpdGllczoKKyAgICoKKyAgICogMSkgd2UgbmVnb3RpYXRlZCBwYXNzdGhyb3VnaCwgd2UgY2FuIHByb3h5IHRoZSBidWZmZXJwb29sIGRpcmVjdGx5IGFuZCB3ZQorICAgKiAgICB3aWxsIGRvIHRoYXQgd2hlbmV2ZXIgc29tZSB1cHN0cmVhbSBkb2VzIGFuIGFsbG9jYXRpb24gcXVlcnkuCisgICAqIDIpIHdlIG5lZWQgdG8gZG8gYSB0cmFuc2Zvcm0sIHdlIG5lZWQgdG8gZ2V0IGEgYnVmZmVycG9vbCBmcm9tIGRvd25zdHJlYW0KKyAgICogICAgYW5kIGNvbmZpZ3VyZSBpdC4gV2hlbiB1cHN0cmVhbSBkb2VzIHRoZSBBTExPQ0FUSU9OIHF1ZXJ5LCB0aGUKKyAgICogICAgcHJvcG9zZV9hbGxvY2F0aW9uIHZtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYW5kIHdlIHdpbGwgY29uZmlndXJlIHRoZQorICAgKiAgICB1cHN0cmVhbSBhbGxvY2F0b3Igd2l0aCBvdXIgcG9ycG9zZWQgdmFsdWVzIHRoZW4uCisgICAqLworCisgIC8qIGNsZWFyIG9sZCBwb29sICovCisgIG9sZHBvb2wgPSB0cmFucy0+cHJpdi0+cG9vbDsKKyAgaWYgKG9sZHBvb2wpIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgInVucmVmZmluZyBvbGQgcG9vbCIpOworICAgIGdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlIChvbGRwb29sLCBGQUxTRSk7CisgICAgZ3N0X29iamVjdF91bnJlZiAob2xkcG9vbCk7CisgICAgdHJhbnMtPnByaXYtPnBvb2wgPSBvbGRwb29sID0gTlVMTDsKKyAgfQorCisgIGlmICh0cmFucy0+cGFzc3Rocm91Z2ggfHwgdHJhbnMtPmFsd2F5c19pbl9wbGFjZSkgeworICAgIC8qIHdlIGFyZSBpbiBwYXNzdGhyb3VnaCwgdGhlIGlucHV0IGJ1ZmZlciBpcyBuZXZlciBjb3BpZWQgYW5kIGFsd2F5cyBwYXNzZWQKKyAgICAgKiBhbG9uZy4gV2UgbmV2ZXIgYWxsb2NhdGUgYW4gb3V0cHV0IGJ1ZmZlciBvbiB0aGUgc3JjcGFkLiBXaGF0IHdlIGRvIGlzCisgICAgICogbGV0IHRoZSB1cHN0cmVhbSBlbGVtZW50IGRlY2lkZSBpZiBpdCB3YW50cyB0byB1c2UgYSBidWZmZXJwb29sIGFuZAorICAgICAqIHRoZW4gd2Ugd2lsbCBwcm94eSB0aGUgZG93bnN0cmVhbSBwb29sICovCisgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJ3ZSdyZSBwYXNzdGhvdWdoLCBkZWxheSBidWZmZXJwb29sIik7CisgICAgcmV0dXJuIFRSVUU7CisgIH0KKworICAvKiBub3QgcGFzc3Rocm91Z2gsIHdlIG5lZWQgdG8gYWxsb2NhdGUgKi8KKyAgLyogZmluZCBhIHBvb2wgZm9yIHRoZSBuZWdvdGlhdGVkIGNhcHMgbm93ICovCisgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiZG9pbmcgYWxsb2NhdGlvbiBxdWVyeSIpOworICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfYWxsb2NhdGlvbiAob3V0Y2FwcywgVFJVRSk7CisgIGlmICghZ3N0X3BhZF9wZWVyX3F1ZXJ5ICh0cmFucy0+c3JjcGFkLCBxdWVyeSkpIHsKKyAgICAvKiBub3QgYSBwcm9ibGVtLCBqdXN0IGRlYnVnIGEgbGl0dGxlICovCisgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJwZWVyIEFMTE9DQVRJT04gcXVlcnkgZmFpbGVkIik7CisgIH0KKworICBrbGFzcyA9IEdTVF9CQVNFX1RSQU5TRk9STV9HRVRfQ0xBU1MgKHRyYW5zKTsKKworICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImNhbGxpbmcgZGVjaWRlX2FsbG9jYXRpb24iKTsKKyAgaWYgKEdfTElLRUxZIChrbGFzcy0+ZGVjaWRlX2FsbG9jYXRpb24pKQorICAgIHJlc3VsdCA9IGtsYXNzLT5kZWNpZGVfYWxsb2NhdGlvbiAodHJhbnMsIHF1ZXJ5KTsKKworICAvKiB3ZSBnb3QgY29uZmlndXJhdGlvbiBmcm9tIG91ciBwZWVyLCBwYXJzZSB0aGVtICovCisgIGdzdF9xdWVyeV9wYXJzZV9hbGxvY2F0aW9uX3BhcmFtcyAocXVlcnksICZzaXplLCAmbWluLCAmbWF4LCAmcHJlZml4LAorICAgICAgJmFsaWdubWVudCwgJnBvb2wpOworICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKKworICBpZiAoc2l6ZSA9PSAwKSB7CisgICAgY29uc3QgZ2NoYXIgKm1lbSA9IE5VTEw7CisKKyAgICAvKiBubyBzaXplLCB3ZSBoYXZlIHZhcmlhYmxlIHNpemUgYnVmZmVycyAqLworICAgIGlmIChnc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9tZW1vcmllcyAocXVlcnkpID4gMCkgeworICAgICAgbWVtID0gZ3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX21lbW9yeSAocXVlcnksIDApOworICAgIH0KKyAgICBhbGxvY2F0b3IgPSBnc3RfYWxsb2NhdG9yX2ZpbmQgKG1lbSk7CisgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJubyBzaXplLCB1c2luZyBhbGxvY2F0b3IgJXMiLCBHU1RfU1RSX05VTEwgKG1lbSkpOworICB9IGVsc2UgaWYgKHBvb2wgPT0gTlVMTCkgeworICAgIEdzdFN0cnVjdHVyZSAqY29uZmlnOworCisgICAgLyogd2UgZGlkIG5vdCBnZXQgYSBwb29sLCBtYWtlIG9uZSBvdXJzZWx2ZXMgdGhlbiAqLworICAgIHBvb2wgPSBnc3RfYnVmZmVyX3Bvb2xfbmV3ICgpOworCisgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJubyBwb29sLCBtYWtpbmcgb25lIik7CisgICAgY29uZmlnID0gZ3N0X2J1ZmZlcl9wb29sX2dldF9jb25maWcgKHBvb2wpOworICAgIGdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0IChjb25maWcsIG91dGNhcHMsIHNpemUsIG1pbiwgbWF4LCBwcmVmaXgsCisgICAgICAgIGFsaWdubWVudCk7CisgICAgZ3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWcgKHBvb2wsIGNvbmZpZyk7CisgIH0KKworICAvKiBhbmQgc3RvcmUgKi8KKyAgcmVzdWx0ID0KKyAgICAgIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfYWxsb2NhdGlvbiAodHJhbnMsIHBvb2wsIGFsbG9jYXRvciwgcHJlZml4LAorICAgICAgYWxpZ25tZW50KTsKKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBmdW5jdGlvbiB0cmlnZ2VyZWQgd2hlbiB0aGUgaW4gYW5kIG91dCBjYXBzIGFyZSBuZWdvdGlhdGVkIGFuZCBuZWVkCisgKiB0byBiZSBjb25maWd1cmVkIGluIHRoZSBzdWJjbGFzcy4gKi8KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2Jhc2VfdHJhbnNmb3JtX2NvbmZpZ3VyZV9jYXBzIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdENhcHMgKiBpbiwKKyAgICBHc3RDYXBzICogb3V0KQoreworICBnYm9vbGVhbiByZXQgPSBUUlVFOworICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKmtsYXNzOworCisgIGtsYXNzID0gR1NUX0JBU0VfVFJBTlNGT1JNX0dFVF9DTEFTUyAodHJhbnMpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiaW4gY2FwczogICUiIEdTVF9QVFJfRk9STUFULCBpbik7CisgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAib3V0IGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBvdXQpOworCisgIC8qIGNsZWFyIHRoZSBjYWNoZSAqLworICBnc3RfY2Fwc19yZXBsYWNlICgmdHJhbnMtPmNhY2hlX2NhcHMxLCBOVUxMKTsKKyAgZ3N0X2NhcHNfcmVwbGFjZSAoJnRyYW5zLT5jYWNoZV9jYXBzMiwgTlVMTCk7CisKKyAgLyogZmlndXJlIG91dCBzYW1lIGNhcHMgc3RhdGUgKi8KKyAgdHJhbnMtPmhhdmVfc2FtZV9jYXBzID0gZ3N0X2NhcHNfaXNfZXF1YWwgKGluLCBvdXQpOworICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImhhdmVfc2FtZV9jYXBzOiAlZCIsIHRyYW5zLT5oYXZlX3NhbWVfY2Fwcyk7CisKKyAgLyogSWYgd2UndmUgYSB0cmFuc2Zvcm1faXAgbWV0aG9kIGFuZCBzYW1lIGlucHV0L291dHB1dCBjYXBzLCBzZXQgaW5fcGxhY2UKKyAgICogYnkgZGVmYXVsdC4gSWYgZm9yIHNvbWUgcmVhc29uIHRoZSBzdWItY2xhc3MgcHJlZmVycyB1c2luZyBhIHRyYW5zZm9ybQorICAgKiBmdW5jdGlvbiwgaXQgY2FuIGNsZWFyIHRoZSBpbiBwbGFjZSBmbGFnIGluIHRoZSBzZXRfY2FwcyAqLworICBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2luX3BsYWNlICh0cmFucywKKyAgICAgIGtsYXNzLT50cmFuc2Zvcm1faXAgJiYgdHJhbnMtPmhhdmVfc2FtZV9jYXBzKTsKKworICAvKiBTZXQgdGhlIHBhc3N0aHJvdWdoIGlmIHRoZSBjbGFzcyB3YW50cyBwYXNzdGhyb3VnaF9vbl9zYW1lX2NhcHMKKyAgICogYW5kIHdlIGhhdmUgdGhlIHNhbWUgY2FwcyBvbiBlYWNoIHBhZCAqLworICBpZiAoa2xhc3MtPnBhc3N0aHJvdWdoX29uX3NhbWVfY2FwcykKKyAgICBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Bhc3N0aHJvdWdoICh0cmFucywgdHJhbnMtPmhhdmVfc2FtZV9jYXBzKTsKKworICAvKiBub3cgY29uZmlndXJlIHRoZSBlbGVtZW50IHdpdGggdGhlIGNhcHMgKi8KKyAgaWYgKGtsYXNzLT5zZXRfY2FwcykgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiQ2FsbGluZyBzZXRfY2FwcyBtZXRob2QgdG8gc2V0dXAgY2FwcyIpOworICAgIHJldCA9IGtsYXNzLT5zZXRfY2FwcyAodHJhbnMsIGluLCBvdXQpOworICB9CisKKyAgdHJhbnMtPm5lZ290aWF0ZWQgPSByZXQ7CisKKyAgcmV0dXJuIHJldDsKK30KKworLyogZ2l2ZW4gYSBmaXhlZCBAY2FwcyBvbiBAcGFkLCBjcmVhdGUgdGhlIGJlc3QgcG9zc2libGUgY2FwcyBmb3IgdGhlCisgKiBvdGhlciBwYWQuCisgKiBAY2FwcyBtdXN0IGJlIGZpeGVkIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FsbHMgdGhlIHRyYW5zZm9ybSBjYXBzIHZtZXRob2Qgb2YgdGhlIGJhc2V0cmFuc2Zvcm0gdG8gZmlndXJlCisgKiBvdXQgdGhlIHBvc3NpYmxlIHRhcmdldCBmb3JtYXRzLiBJdCB0aGVuIHRyaWVzIHRvIHNlbGVjdCB0aGUgYmVzdCBmb3JtYXQgZnJvbQorICogdGhpcyBsaXN0IGJ5OgorICoKKyAqIC0gYXR0ZW1wdCBwYXNzdGhyb3VnaCBpZiB0aGUgdGFyZ2V0IGNhcHMgaXMgYSBzdXBlcnNldCBvZiB0aGUgaW5wdXQgY2FwcworICogLSBmaXhhdGluZyBieSB1c2luZyBwZWVyIGNhcHMKKyAqIC0gZml4YXRpbmcgd2l0aCB0cmFuc2Zvcm0gZml4YXRlIGZ1bmN0aW9uCisgKiAtIGZpeGF0aW5nIHdpdGggcGFkIGZpeGF0ZSBmdW5jdGlvbnMuCisgKgorICogdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgY2FwcyB0aGF0IGNhbiBiZSB0cmFuc2Zvcm1lZCBpbnRvIGFuZCBpcyBhY2NlcHRlZCBieQorICogdGhlIHBlZXIgZWxlbWVudC4KKyAqLworc3RhdGljIEdzdENhcHMgKgorZ3N0X2Jhc2VfdHJhbnNmb3JtX2ZpbmRfdHJhbnNmb3JtIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdFBhZCAqIHBhZCwKKyAgICBHc3RDYXBzICogY2FwcykKK3sKKyAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzICprbGFzczsKKyAgR3N0UGFkICpvdGhlcnBhZCwgKm90aGVycGVlcjsKKyAgR3N0Q2FwcyAqb3RoZXJjYXBzOworICBnYm9vbGVhbiBpc19maXhlZDsKKworICAvKiBjYXBzIG11c3QgYmUgZml4ZWQgaGVyZSwgdGhpcyBpcyBhIHByb2dyYW1taW5nIGVycm9yIGlmIGl0J3Mgbm90ICovCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3RfY2Fwc19pc19maXhlZCAoY2FwcyksIE5VTEwpOworCisgIGtsYXNzID0gR1NUX0JBU0VfVFJBTlNGT1JNX0dFVF9DTEFTUyAodHJhbnMpOworCisgIG90aGVycGFkID0gKHBhZCA9PSB0cmFucy0+c3JjcGFkKSA/IHRyYW5zLT5zaW5rcGFkIDogdHJhbnMtPnNyY3BhZDsKKyAgb3RoZXJwZWVyID0gZ3N0X3BhZF9nZXRfcGVlciAob3RoZXJwYWQpOworCisgIC8qIHNlZSBob3cgd2UgY2FuIHRyYW5zZm9ybSB0aGUgaW5wdXQgY2Fwcy4gV2UgbmVlZCB0byBkbyB0aGlzIGV2ZW4gZm9yCisgICAqIHBhc3N0aHJvdWdoIGJlY2F1c2UgaXQgbWlnaHQgYmUgcG9zc2libGUgdGhhdCB0aGlzIGVsZW1lbnQgY2Fubm90IHN1cHBvcnQKKyAgICogcGFzc3Rocm91Z2ggYXQgYWxsLiAqLworICBvdGhlcmNhcHMgPSBnc3RfYmFzZV90cmFuc2Zvcm1fdHJhbnNmb3JtX2NhcHMgKHRyYW5zLAorICAgICAgR1NUX1BBRF9ESVJFQ1RJT04gKHBhZCksIGNhcHMsIE5VTEwpOworCisgIC8qIFRoZSBjYXBzIHdlIGNhbiBhY3R1YWxseSBvdXRwdXQgaXMgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgdHJhbnNmb3JtZWQKKyAgICogY2FwcyB3aXRoIHRoZSBwYWQgdGVtcGxhdGUgZm9yIHRoZSBwYWQgKi8KKyAgaWYgKG90aGVyY2FwcykgeworICAgIEdzdENhcHMgKmludGVyc2VjdCwgKnRlbXBsX2NhcHM7CisKKyAgICB0ZW1wbF9jYXBzID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKG90aGVycGFkKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywKKyAgICAgICAgImludGVyc2VjdGluZyBhZ2FpbnN0IHBhZHRlbXBsYXRlICUiIEdTVF9QVFJfRk9STUFULCB0ZW1wbF9jYXBzKTsKKworICAgIGludGVyc2VjdCA9CisgICAgICAgIGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChvdGhlcmNhcHMsIHRlbXBsX2NhcHMsCisgICAgICAgIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7CisKKyAgICBnc3RfY2Fwc191bnJlZiAob3RoZXJjYXBzKTsKKyAgICBnc3RfY2Fwc191bnJlZiAodGVtcGxfY2Fwcyk7CisgICAgb3RoZXJjYXBzID0gaW50ZXJzZWN0OworICB9CisKKyAgLyogY2hlY2sgaWYgdHJhbnNmb3JtIGlzIGVtcHR5ICovCisgIGlmICghb3RoZXJjYXBzIHx8IGdzdF9jYXBzX2lzX2VtcHR5IChvdGhlcmNhcHMpKQorICAgIGdvdG8gbm9fdHJhbnNmb3JtOworCisgIC8qIGlmIHRoZSBvdGhlcmNhcHMgYXJlIG5vdCBmaXhlZCwgd2UgbmVlZCB0byBmaXhhdGUgdGhlbSwgZmlyc3QgYXR0ZW1wdAorICAgKiBpcyBieSBhdHRlbXB0aW5nIHBhc3N0aHJvdWdoIGlmIHRoZSBvdGhlcmNhcHMgYXJlIGEgc3VwZXJzZXQgb2YgY2Fwcy4gKi8KKyAgLyogRklYTUUuIG1heWJlIHRoZSBjYXBzIGlzIG5vdCBmaXhlZCBiZWNhdXNlIGl0IGhhcyBtdWx0aXBsZSBzdHJ1Y3R1cmVzIG9mCisgICAqIGZpeGVkIGNhcHMgKi8KKyAgaXNfZml4ZWQgPSBnc3RfY2Fwc19pc19maXhlZCAob3RoZXJjYXBzKTsKKyAgaWYgKCFpc19maXhlZCkgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLAorICAgICAgICAidHJhbnNmb3JtIHJldHVybmVkIG5vbiBmaXhlZCAgJSIgR1NUX1BUUl9GT1JNQVQsIG90aGVyY2Fwcyk7CisKKyAgICAvKiBOb3cgbGV0J3Mgc2VlIHdoYXQgdGhlIHBlZXIgc3VnZ2VzdHMgYmFzZWQgb24gb3VyIHRyYW5zZm9ybWVkIGNhcHMgKi8KKyAgICBpZiAob3RoZXJwZWVyKSB7CisgICAgICBHc3RDYXBzICpwZWVyY2FwcywgKmludGVyc2VjdGlvbiwgKnRlbXBsX2NhcHM7CisKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLAorICAgICAgICAgICJDaGVja2luZyBwZWVyIGNhcHMgd2l0aCBmaWx0ZXIgJSIgR1NUX1BUUl9GT1JNQVQsIG90aGVyY2Fwcyk7CisKKyAgICAgIHBlZXJjYXBzID0gZ3N0X3BhZF9nZXRfY2FwcyAob3RoZXJwZWVyLCBvdGhlcmNhcHMpOworICAgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJSZXN1bHRlZCBpbiAlIiBHU1RfUFRSX0ZPUk1BVCwgcGVlcmNhcHMpOworCisgICAgICB0ZW1wbF9jYXBzID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKG90aGVycGFkKTsKKworICAgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsCisgICAgICAgICAgIkludGVyc2VjdGluZyB3aXRoIHRlbXBsYXRlIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIHRlbXBsX2NhcHMpOworCisgICAgICBpbnRlcnNlY3Rpb24gPQorICAgICAgICAgIGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChwZWVyY2FwcywgdGVtcGxfY2FwcywKKyAgICAgICAgICBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOworICAgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJJbnRlcnNlY3Rpb246ICUiIEdTVF9QVFJfRk9STUFULCBpbnRlcnNlY3Rpb24pOworICAgICAgZ3N0X2NhcHNfdW5yZWYgKHBlZXJjYXBzKTsKKyAgICAgIGdzdF9jYXBzX3VucmVmICh0ZW1wbF9jYXBzKTsKKyAgICAgIHBlZXJjYXBzID0gaW50ZXJzZWN0aW9uOworCisgICAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywKKyAgICAgICAgICAiSW50ZXJzZWN0aW5nIHdpdGggdHJhbnNmb3JtZWQgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgb3RoZXJjYXBzKTsKKyAgICAgIGludGVyc2VjdGlvbiA9CisgICAgICAgICAgZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKHBlZXJjYXBzLCBvdGhlcmNhcHMsCisgICAgICAgICAgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiSW50ZXJzZWN0aW9uOiAlIiBHU1RfUFRSX0ZPUk1BVCwgaW50ZXJzZWN0aW9uKTsKKyAgICAgIGdzdF9jYXBzX3VucmVmIChwZWVyY2Fwcyk7CisgICAgICBnc3RfY2Fwc191bnJlZiAob3RoZXJjYXBzKTsKKyAgICAgIG90aGVyY2FwcyA9IGludGVyc2VjdGlvbjsKKyAgICAgIGlzX2ZpeGVkID0gZ3N0X2NhcHNfaXNfZml4ZWQgKG90aGVyY2Fwcyk7CisgICAgfSBlbHNlIHsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAibm8gcGVlciwgZG9pbmcgcGFzc3Rocm91Z2giKTsKKyAgICAgIGdzdF9jYXBzX3VucmVmIChvdGhlcmNhcHMpOworICAgICAgb3RoZXJjYXBzID0gZ3N0X2NhcHNfcmVmIChjYXBzKTsKKyAgICAgIGlzX2ZpeGVkID0gVFJVRTsKKyAgICB9CisgIH0KKyAgaWYgKGdzdF9jYXBzX2lzX2VtcHR5IChvdGhlcmNhcHMpKQorICAgIGdvdG8gbm9fdHJhbnNmb3JtX3Bvc3NpYmxlOworCisgIC8qIHNlY29uZCBhdHRlbXB0IGF0IGZpeGF0aW9uLCBjYWxsIHRoZSBmaXhhdGUgdm1ldGhvZCBhbmQKKyAgICogdWx0aW1hdGVseSBjYWxsIHRoZSBwYWQgZml4YXRlIGZ1bmN0aW9uLiAqLworICBpZiAoIWlzX2ZpeGVkKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsCisgICAgICAgICJ0cnlpbmcgdG8gZml4YXRlICUiIEdTVF9QVFJfRk9STUFUICIgb24gcGFkICVzOiVzIiwKKyAgICAgICAgb3RoZXJjYXBzLCBHU1RfREVCVUdfUEFEX05BTUUgKG90aGVycGFkKSk7CisKKyAgICAvKiBzaW5jZSB3ZSBoYXZlIG5vIG90aGVyIHdheSB0byBmaXhhdGUgbGVmdCwgd2UgbWlnaHQgYXMgd2VsbCBqdXN0IHRha2UKKyAgICAgKiB0aGUgZmlyc3Qgb2YgdGhlIGNhcHMgbGlzdCBhbmQgZml4YXRlIHRoYXQgKi8KKworICAgIC8qIEZJWE1FOiB3aGVuIGZpeGF0aW5nIHVzaW5nIHRoZSB2bWV0aG9kLCBpdCBtaWdodCBtYWtlIHNlbnNlIHRvIGZpeGF0ZQorICAgICAqIGVhY2ggb2YgdGhlIGNhcHM7IGJ1dCBXaW0gZG9lc24ndCBzZWUgYSB1c2UgY2FzZSBmb3IgdGhhdCB5ZXQgKi8KKyAgICBnc3RfY2Fwc190cnVuY2F0ZSAob3RoZXJjYXBzKTsKKworICAgIGlmIChrbGFzcy0+Zml4YXRlX2NhcHMpIHsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAidHJ5aW5nIHRvIGZpeGF0ZSAlIiBHU1RfUFRSX0ZPUk1BVAorICAgICAgICAgICIgdXNpbmcgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVAorICAgICAgICAgICIgb24gcGFkICVzOiVzIHVzaW5nIGZpeGF0ZV9jYXBzIHZtZXRob2QiLCBvdGhlcmNhcHMsIGNhcHMsCisgICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChvdGhlcnBhZCkpOworICAgICAga2xhc3MtPmZpeGF0ZV9jYXBzICh0cmFucywgR1NUX1BBRF9ESVJFQ1RJT04gKHBhZCksIGNhcHMsIG90aGVyY2Fwcyk7CisgICAgICBpc19maXhlZCA9IGdzdF9jYXBzX2lzX2ZpeGVkIChvdGhlcmNhcHMpOworICAgIH0KKyAgICAvKiBpZiBzdGlsbCBub3QgZml4ZWQsIG5vIG90aGVyIG9wdGlvbiBidXQgdG8gbGV0IHRoZSBkZWZhdWx0IHBhZCBmaXhhdGUKKyAgICAgKiBmdW5jdGlvbiBkbyBpdHMgam9iICovCisgICAgaWYgKCFpc19maXhlZCkgeworICAgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJ0cnlpbmcgdG8gZml4YXRlICUiIEdTVF9QVFJfRk9STUFUCisgICAgICAgICAgIiBvbiBwYWQgJXM6JXMgdXNpbmcgZ3N0X3BhZF9maXhhdGVfY2FwcyIsIG90aGVyY2FwcywKKyAgICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKG90aGVycGFkKSk7CisgICAgICBnc3RfcGFkX2ZpeGF0ZV9jYXBzIChvdGhlcnBhZCwgb3RoZXJjYXBzKTsKKyAgICAgIGlzX2ZpeGVkID0gZ3N0X2NhcHNfaXNfZml4ZWQgKG90aGVyY2Fwcyk7CisgICAgfQorICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiYWZ0ZXIgZml4YXRpbmcgJSIgR1NUX1BUUl9GT1JNQVQsIG90aGVyY2Fwcyk7CisgIH0gZWxzZSB7CisgICAgR1NUX0RFQlVHICgiY2FwcyBhcmUgZml4ZWQiKTsKKyAgICAvKiBlbHNlIGNhcHMgYXJlIGZpeGVkIGJ1dCB0aGUgc3ViY2xhc3MgbWF5IHdhbnQgdG8gYWRkIGZpZWxkcyAqLworICAgIGlmIChrbGFzcy0+Zml4YXRlX2NhcHMpIHsKKyAgICAgIG90aGVyY2FwcyA9IGdzdF9jYXBzX21ha2Vfd3JpdGFibGUgKG90aGVyY2Fwcyk7CisKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiZG9pbmcgZml4YXRlICUiIEdTVF9QVFJfRk9STUFUCisgICAgICAgICAgIiB1c2luZyBjYXBzICUiIEdTVF9QVFJfRk9STUFUCisgICAgICAgICAgIiBvbiBwYWQgJXM6JXMgdXNpbmcgZml4YXRlX2NhcHMgdm1ldGhvZCIsIG90aGVyY2FwcywgY2FwcywKKyAgICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKG90aGVycGFkKSk7CisKKyAgICAgIGtsYXNzLT5maXhhdGVfY2FwcyAodHJhbnMsIEdTVF9QQURfRElSRUNUSU9OIChwYWQpLCBjYXBzLCBvdGhlcmNhcHMpOworICAgICAgaXNfZml4ZWQgPSBnc3RfY2Fwc19pc19maXhlZCAob3RoZXJjYXBzKTsKKyAgICB9CisgIH0KKworICAvKiBjYXBzIHNob3VsZCBiZSBmaXhlZCBub3csIGlmIG5vdCB3ZSBoYXZlIHRvIGZhaWwuICovCisgIGlmICghaXNfZml4ZWQpCisgICAgZ290byBjb3VsZF9ub3RfZml4YXRlOworCisgIC8qIGFuZCBwZWVyIHNob3VsZCBhY2NlcHQgKi8KKyAgaWYgKCFnc3RfcGFkX2FjY2VwdF9jYXBzIChvdGhlcnBlZXIsIG90aGVyY2FwcykpCisgICAgZ290byBwZWVyX25vX2FjY2VwdDsKKworICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgIklucHV0IGNhcHMgd2VyZSAlIiBHU1RfUFRSX0ZPUk1BVAorICAgICAgIiwgYW5kIGdvdCBmaW5hbCBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBjYXBzLCBvdGhlcmNhcHMpOworCisgIGlmIChvdGhlcnBlZXIpCisgICAgZ3N0X29iamVjdF91bnJlZiAob3RoZXJwZWVyKTsKKworICByZXR1cm4gb3RoZXJjYXBzOworCisgIC8qIEVSUk9SUyAqLworbm9fdHJhbnNmb3JtOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsCisgICAgICAgICJ0cmFuc2Zvcm0gcmV0dXJuZWQgdXNlbGVzcyAgJSIgR1NUX1BUUl9GT1JNQVQsIG90aGVyY2Fwcyk7CisgICAgZ290byBlcnJvcl9jbGVhbnVwOworICB9Citub190cmFuc2Zvcm1fcG9zc2libGU6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywKKyAgICAgICAgInRyYW5zZm9ybSBjb3VsZCBub3QgdHJhbnNmb3JtICUiIEdTVF9QVFJfRk9STUFUCisgICAgICAgICIgaW4gYW55dGhpbmcgd2Ugc3VwcG9ydCIsIGNhcHMpOworICAgIGdvdG8gZXJyb3JfY2xlYW51cDsKKyAgfQorY291bGRfbm90X2ZpeGF0ZToKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiRkFJTEVEIHRvIGZpeGF0ZSAlIiBHU1RfUFRSX0ZPUk1BVCwgb3RoZXJjYXBzKTsKKyAgICBnb3RvIGVycm9yX2NsZWFudXA7CisgIH0KK3BlZXJfbm9fYWNjZXB0OgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJGQUlMRUQgdG8gZ2V0IHBlZXIgb2YgJSIgR1NUX1BUUl9GT1JNQVQKKyAgICAgICAgIiB0byBhY2NlcHQgJSIgR1NUX1BUUl9GT1JNQVQsIG90aGVycGFkLCBvdGhlcmNhcHMpOworICAgIGdvdG8gZXJyb3JfY2xlYW51cDsKKyAgfQorZXJyb3JfY2xlYW51cDoKKyAgeworICAgIGlmIChvdGhlcnBlZXIpCisgICAgICBnc3Rfb2JqZWN0X3VucmVmIChvdGhlcnBlZXIpOworICAgIGlmIChvdGhlcmNhcHMpCisgICAgICBnc3RfY2Fwc191bnJlZiAob3RoZXJjYXBzKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iYXNlX3RyYW5zZm9ybV9hY2NlcHRjYXBzX2RlZmF1bHQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKKyAgICBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBHc3RDYXBzICogY2FwcykKK3sKKyNpZiAwCisgIEdzdFBhZCAqb3RoZXJwYWQ7CisgIEdzdENhcHMgKm90aGVyY2FwcyA9IE5VTEw7CisjZW5kaWYKKyAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKKworI2lmIDAKKyAgb3RoZXJwYWQgPSAocGFkID09IHRyYW5zLT5zcmNwYWQpID8gdHJhbnMtPnNpbmtwYWQgOiB0cmFucy0+c3JjcGFkOworCisgIC8qIHdlIG5lZWQgZml4ZWQgY2FwcyBmb3IgdGhlIGNoZWNrLCBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KKyAgICogaWYgd2UgZG9uJ3QgKi8KKyAgaWYgKCFnc3RfY2Fwc19pc19maXhlZCAoY2FwcykpCisjZW5kaWYKKyAgeworICAgIEdzdENhcHMgKmFsbG93ZWQ7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgIm5vbiBmaXhlZCBhY2NlcHQgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7CisKKyAgICAvKiBnZXQgYWxsIHRoZSBmb3JtYXRzIHdlIGNhbiBoYW5kbGUgb24gdGhpcyBwYWQgKi8KKyAgICBpZiAoZGlyZWN0aW9uID09IEdTVF9QQURfU1JDKQorICAgICAgYWxsb3dlZCA9IGdzdF9wYWRfZ2V0X2NhcHMgKHRyYW5zLT5zcmNwYWQsIE5VTEwpOworICAgIGVsc2UKKyAgICAgIGFsbG93ZWQgPSBnc3RfcGFkX2dldF9jYXBzICh0cmFucy0+c2lua3BhZCwgTlVMTCk7CisKKyAgICBpZiAoIWFsbG93ZWQpIHsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiZ3N0X3BhZF9nZXRfY2FwcygpIGZhaWxlZCIpOworICAgICAgZ290byBub190cmFuc2Zvcm1fcG9zc2libGU7CisgICAgfQorCisgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJhbGxvd2VkIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIGFsbG93ZWQpOworCisgICAgLyogaW50ZXJzZWN0IHdpdGggdGhlIHJlcXVlc3RlZCBmb3JtYXQgKi8KKyAgICByZXQgPSBnc3RfY2Fwc19pc19zdWJzZXQgKGNhcHMsIGFsbG93ZWQpOworICAgIGdzdF9jYXBzX3VucmVmIChhbGxvd2VkKTsKKworICAgIGlmICghcmV0KQorICAgICAgZ290byBub190cmFuc2Zvcm1fcG9zc2libGU7CisgIH0KKyNpZiAwCisgIGVsc2UgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImFjY2VwdCBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKKworICAgIC8qIGZpbmQgYmVzdCBwb3NzaWJsZSBjYXBzIGZvciB0aGUgb3RoZXIgcGFkIGFzIGEgd2F5IHRvIHNlZSBpZiB3ZSBjYW4KKyAgICAgKiB0cmFuc2Zvcm0gdGhpcyBjYXBzLiAqLworICAgIG90aGVyY2FwcyA9IGdzdF9iYXNlX3RyYW5zZm9ybV9maW5kX3RyYW5zZm9ybSAodHJhbnMsIHBhZCwgY2FwcywgRkFMU0UpOworICAgIGlmICghb3RoZXJjYXBzIHx8IGdzdF9jYXBzX2lzX2VtcHR5IChvdGhlcmNhcHMpKQorICAgICAgZ290byBub190cmFuc2Zvcm1fcG9zc2libGU7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJ3ZSBjYW4gdHJhbnNmb3JtIHRvICUiIEdTVF9QVFJfRk9STUFULCBvdGhlcmNhcHMpOworICB9CisjZW5kaWYKKworZG9uZToKKyNpZiAwCisgIC8qIFdlIGtub3cgaXQncyBhbHdheXMgTlVMTCBzaW5jZSB3ZSBuZXZlciB1c2UgaXQgKi8KKyAgaWYgKG90aGVyY2FwcykKKyAgICBnc3RfY2Fwc191bnJlZiAob3RoZXJjYXBzKTsKKyNlbmRpZgorCisgIHJldHVybiByZXQ7CisKKyAgLyogRVJST1JTICovCitub190cmFuc2Zvcm1fcG9zc2libGU6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywKKyAgICAgICAgInRyYW5zZm9ybSBjb3VsZCBub3QgdHJhbnNmb3JtICUiIEdTVF9QVFJfRk9STUFUCisgICAgICAgICIgaW4gYW55dGhpbmcgd2Ugc3VwcG9ydCIsIGNhcHMpOworICAgIHJldCA9IEZBTFNFOworICAgIGdvdG8gZG9uZTsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iYXNlX3RyYW5zZm9ybV9hY2NlcHRjYXBzIChHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBjYXBzKQoreworICBnYm9vbGVhbiByZXQgPSBUUlVFOworICBHc3RCYXNlVHJhbnNmb3JtICp0cmFuczsKKyAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzICpiY2xhc3M7CisKKyAgdHJhbnMgPSBHU1RfQkFTRV9UUkFOU0ZPUk0gKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7CisgIGJjbGFzcyA9IEdTVF9CQVNFX1RSQU5TRk9STV9HRVRfQ0xBU1MgKHRyYW5zKTsKKworICBpZiAoYmNsYXNzLT5hY2NlcHRfY2FwcykKKyAgICByZXQgPSBiY2xhc3MtPmFjY2VwdF9jYXBzICh0cmFucywgR1NUX1BBRF9ESVJFQ1RJT04gKHBhZCksIGNhcHMpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHRyYW5zKTsKKworICByZXR1cm4gcmV0OworfQorCisvKiBjYWxsZWQgd2hlbiBuZXcgY2FwcyBhcnJpdmUgb24gdGhlIHNpbmsgb3Igc291cmNlIHBhZCwKKyAqIFdlIHRyeSB0byBmaW5kIHRoZSBiZXN0IGNhcHMgZm9yIHRoZSBvdGhlciBzaWRlIHVzaW5nIG91ciBfZmluZF90cmFuc2Zvcm0oKQorICogZnVuY3Rpb24uIElmIHRoZXJlIGFyZSBjYXBzLCB3ZSBjb25maWd1cmUgdGhlIHRyYW5zZm9ybSBmb3IgdGhpcyBuZXcKKyAqIHRyYW5zZm9ybWF0aW9uLgorICoKKyAqIEZJWE1FLCB0aGlzIGZ1bmN0aW9uIGlzIGN1cnJlbnRseSBjb21tdXRhdGl2ZSBidXQgdGhpcyBzaG91bGQgbm90IHJlYWxseSBiZQorICogYmVjYXVzZSB3ZSBuZXZlciBzZXQgY2FwcyBzdGFydGluZyBmcm9tIHRoZSBzcmNwYWQuCisgKi8KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldGNhcHMgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0UGFkICogcGFkLAorICAgIEdzdENhcHMgKiBjYXBzKQoreworICBHc3RQYWQgKm90aGVycGFkLCAqb3RoZXJwZWVyOworICBHc3RDYXBzICpvdGhlcmNhcHMgPSBOVUxMOworICBnYm9vbGVhbiByZXQgPSBUUlVFOworICBHc3RDYXBzICppbmNhcHMsICpvdXRjYXBzOworCisgIG90aGVycGFkID0gKHBhZCA9PSB0cmFucy0+c3JjcGFkKSA/IHRyYW5zLT5zaW5rcGFkIDogdHJhbnMtPnNyY3BhZDsKKyAgb3RoZXJwZWVyID0gZ3N0X3BhZF9nZXRfcGVlciAob3RoZXJwYWQpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImhhdmUgbmV3IGNhcHMgJXAgJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMsIGNhcHMpOworCisgIC8qIGZpbmQgYmVzdCBwb3NzaWJsZSBjYXBzIGZvciB0aGUgb3RoZXIgcGFkICovCisgIG90aGVyY2FwcyA9IGdzdF9iYXNlX3RyYW5zZm9ybV9maW5kX3RyYW5zZm9ybSAodHJhbnMsIHBhZCwgY2Fwcyk7CisgIGlmICghb3RoZXJjYXBzIHx8IGdzdF9jYXBzX2lzX2VtcHR5IChvdGhlcmNhcHMpKQorICAgIGdvdG8gbm9fdHJhbnNmb3JtX3Bvc3NpYmxlOworCisgIC8qIGNvbmZpZ3VyZSB0aGUgZWxlbWVudCBub3cgKi8KKyAgLyogbWFrZSBzdXJlIGluIGFuZCBvdXQgY2FwcyBhcmUgY29ycmVjdCAqLworICBpZiAocGFkID09IHRyYW5zLT5zaW5rcGFkKSB7CisgICAgaW5jYXBzID0gY2FwczsKKyAgICBvdXRjYXBzID0gb3RoZXJjYXBzOworICB9IGVsc2UgeworICAgIGluY2FwcyA9IG90aGVyY2FwczsKKyAgICBvdXRjYXBzID0gY2FwczsKKyAgfQorCisgIC8qIGlmIHdlIGhhdmUgdGhlIHNhbWUgY2Fwcywgd2UgY2FuIG9wdGltaXplIGFuZCByZXVzZSB0aGUgaW5wdXQgY2FwcyAqLworICBpZiAoZ3N0X2NhcHNfaXNfZXF1YWwgKGluY2Fwcywgb3V0Y2FwcykpIHsKKyAgICBHU1RfSU5GT19PQkpFQ1QgKHRyYW5zLCAicmV1c2UgY2FwcyIpOworICAgIGdzdF9jYXBzX3VucmVmIChvdGhlcmNhcHMpOworICAgIG91dGNhcHMgPSBvdGhlcmNhcHMgPSBnc3RfY2Fwc19yZWYgKGluY2Fwcyk7CisgIH0KKworICAvKiBjYWxsIGNvbmZpZ3VyZSBub3cgKi8KKyAgaWYgKCEocmV0ID0gZ3N0X2Jhc2VfdHJhbnNmb3JtX2NvbmZpZ3VyZV9jYXBzICh0cmFucywgaW5jYXBzLCBvdXRjYXBzKSkpCisgICAgZ290byBmYWlsZWRfY29uZmlndXJlOworCisgIEdTVF9PQkpFQ1RfTE9DSyAodHJhbnMtPnNpbmtwYWQpOworICBHU1RfT0JKRUNUX0ZMQUdfVU5TRVQgKHRyYW5zLT5zcmNwYWQsIEdTVF9QQURfTkVFRF9SRUNPTkZJR1VSRSk7CisgIHRyYW5zLT5wcml2LT5yZWNvbmZpZ3VyZSA9IEZBTFNFOworICBHU1RfT0JKRUNUX1VOTE9DSyAodHJhbnMtPnNpbmtwYWQpOworCisgIC8qIHdlIGtub3cgdGhpcyB3aWxsIHdvcmssIHdlIGltcGxlbWVudCB0aGUgc2V0Y2FwcyAqLworICBnc3RfcGFkX3B1c2hfZXZlbnQgKG90aGVycGFkLCBnc3RfZXZlbnRfbmV3X2NhcHMgKG90aGVyY2FwcykpOworCisgIGlmIChwYWQgPT0gdHJhbnMtPnNyY3BhZCAmJiB0cmFucy0+cHJpdi0+cGFkX21vZGUgPT0gR1NUX0FDVElWQVRFX1BVTEwpIHsKKyAgICAvKiBGSVhNRSBobT8gKi8KKyAgICByZXQgJj0gZ3N0X3BhZF9wdXNoX2V2ZW50IChvdGhlcnBlZXIsIGdzdF9ldmVudF9uZXdfY2FwcyAob3RoZXJjYXBzKSk7CisgICAgaWYgKCFyZXQpIHsKKyAgICAgIEdTVF9JTkZPX09CSkVDVCAodHJhbnMsICJvdGhlcnBlZXIgc2V0Y2FwcyglIiBHU1RfUFRSX0ZPUk1BVCAiKSBmYWlsZWQiLAorICAgICAgICAgIG90aGVyY2Fwcyk7CisgICAgfQorICB9CisKKyAgaWYgKHJldCkgeworICAgIC8qIHRyeSB0byBnZXQgYSBwb29sIHdoZW4gbmVlZGVkICovCisgICAgcmV0ID0gZ3N0X2Jhc2VfdHJhbnNmb3JtX2RvX2J1ZmZlcnBvb2wgKHRyYW5zLCBvdGhlcmNhcHMpOworICB9CisKK2RvbmU6CisgIGlmIChvdGhlcnBlZXIpCisgICAgZ3N0X29iamVjdF91bnJlZiAob3RoZXJwZWVyKTsKKyAgaWYgKG90aGVyY2FwcykKKyAgICBnc3RfY2Fwc191bnJlZiAob3RoZXJjYXBzKTsKKworICB0cmFucy0+bmVnb3RpYXRlZCA9IHJldDsKKworICByZXR1cm4gcmV0OworCisgIC8qIEVSUk9SUyAqLworbm9fdHJhbnNmb3JtX3Bvc3NpYmxlOgorICB7CisgICAgR1NUX1dBUk5JTkdfT0JKRUNUICh0cmFucywKKyAgICAgICAgInRyYW5zZm9ybSBjb3VsZCBub3QgdHJhbnNmb3JtICUiIEdTVF9QVFJfRk9STUFUCisgICAgICAgICIgaW4gYW55dGhpbmcgd2Ugc3VwcG9ydCIsIGNhcHMpOworICAgIHJldCA9IEZBTFNFOworICAgIGdvdG8gZG9uZTsKKyAgfQorZmFpbGVkX2NvbmZpZ3VyZToKKyAgeworICAgIEdTVF9XQVJOSU5HX09CSkVDVCAodHJhbnMsICJGQUlMRUQgdG8gY29uZmlndXJlIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQKKyAgICAgICAgIiB0byBhY2NlcHQgJSIgR1NUX1BUUl9GT1JNQVQsIG90aGVycGFkLCBvdGhlcmNhcHMpOworICAgIHJldCA9IEZBTFNFOworICAgIGdvdG8gZG9uZTsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iYXNlX3RyYW5zZm9ybV9kZWZhdWx0X3F1ZXJ5IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCisgICAgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwgR3N0UXVlcnkgKiBxdWVyeSkKK3sKKyAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7CisgIEdzdFBhZCAqb3RoZXJwYWQ7CisKKyAgb3RoZXJwYWQgPSAoZGlyZWN0aW9uID09IEdTVF9QQURfU1JDKSA/IHRyYW5zLT5zaW5rcGFkIDogdHJhbnMtPnNyY3BhZDsKKworICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKKyAgICBjYXNlIEdTVF9RVUVSWV9BTExPQ0FUSU9OOgorICAgIHsKKyAgICAgIGdib29sZWFuIHBhc3N0aHJvdWdoOworCisgICAgICAvKiBjYW4gb25seSBiZSBkb25lIG9uIHRoZSBzaW5rcGFkICovCisgICAgICBpZiAoZGlyZWN0aW9uICE9IEdTVF9QQURfU0lOSykKKyAgICAgICAgZ290byBkb25lOworCisgICAgICBHU1RfQkFTRV9UUkFOU0ZPUk1fTE9DSyAodHJhbnMpOworICAgICAgcGFzc3Rocm91Z2ggPSB0cmFucy0+cGFzc3Rocm91Z2ggfHwgdHJhbnMtPmFsd2F5c19pbl9wbGFjZTsKKyAgICAgIEdTVF9CQVNFX1RSQU5TRk9STV9VTkxPQ0sgKHRyYW5zKTsKKworICAgICAgaWYgKHBhc3N0aHJvdWdoKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiZG9pbmcgcGFzc3Rocm91Z2ggcXVlcnkiKTsKKyAgICAgICAgcmV0ID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5IChvdGhlcnBhZCwgcXVlcnkpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzICprbGFzczsKKworICAgICAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgInByb3Bvc2UgYWxsb2NhdGlvbiB2YWx1ZXMiKTsKKworICAgICAgICBrbGFzcyA9IEdTVF9CQVNFX1RSQU5TRk9STV9HRVRfQ0xBU1MgKHRyYW5zKTsKKyAgICAgICAgLyogcGFzcyB0aGUgcXVlcnkgdG8gdGhlIHByb3Bvc2VfYWxsb2NhdGlvbiB2bWV0aG9kIGlmIGFueSAqLworICAgICAgICBpZiAoR19MSUtFTFkgKGtsYXNzLT5wcm9wb3NlX2FsbG9jYXRpb24pKQorICAgICAgICAgIHJldCA9IGtsYXNzLT5wcm9wb3NlX2FsbG9jYXRpb24gKHRyYW5zLCBxdWVyeSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXQgPSBGQUxTRTsKKyAgICAgIH0KKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiQUxMT0NBVElPTiByZXQgJWQsICUiIEdTVF9QVFJfRk9STUFULCByZXQsCisgICAgICAgICAgcXVlcnkpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX1FVRVJZX1BPU0lUSU9OOgorICAgIHsKKyAgICAgIEdzdEZvcm1hdCBmb3JtYXQ7CisKKyAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbiAocXVlcnksICZmb3JtYXQsIE5VTEwpOworICAgICAgaWYgKGZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUgJiYgdHJhbnMtPnNlZ21lbnQuZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSkgeworICAgICAgICBnaW50NjQgcG9zOworICAgICAgICByZXQgPSBUUlVFOworCisgICAgICAgIGlmICgoZGlyZWN0aW9uID09IEdTVF9QQURfU0lOSykKKyAgICAgICAgICAgIHx8ICh0cmFucy0+cHJpdi0+cG9zaXRpb25fb3V0ID09IEdTVF9DTE9DS19USU1FX05PTkUpKSB7CisgICAgICAgICAgcG9zID0KKyAgICAgICAgICAgICAgZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZ0cmFucy0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLAorICAgICAgICAgICAgICB0cmFucy0+c2VnbWVudC5wb3NpdGlvbik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcG9zID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZ0cmFucy0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLAorICAgICAgICAgICAgICB0cmFucy0+cHJpdi0+cG9zaXRpb25fb3V0KTsKKyAgICAgICAgfQorICAgICAgICBnc3RfcXVlcnlfc2V0X3Bvc2l0aW9uIChxdWVyeSwgZm9ybWF0LCBwb3MpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0ID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5IChvdGhlcnBhZCwgcXVlcnkpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICByZXQgPSBnc3RfcGFkX3BlZXJfcXVlcnkgKG90aGVycGFkLCBxdWVyeSk7CisgICAgICBicmVhazsKKyAgfQorCitkb25lOgorICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iYXNlX3RyYW5zZm9ybV9xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RRdWVyeSAqIHF1ZXJ5KQoreworICBHc3RCYXNlVHJhbnNmb3JtICp0cmFuczsKKyAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzICpiY2xhc3M7CisgIGdib29sZWFuIHJldDsKKworICB0cmFucyA9IEdTVF9CQVNFX1RSQU5TRk9STSAoZ3N0X3BhZF9nZXRfcGFyZW50IChwYWQpKTsKKyAgaWYgKEdfVU5MSUtFTFkgKHRyYW5zID09IE5VTEwpKQorICAgIHJldHVybiBGQUxTRTsKKworICBiY2xhc3MgPSBHU1RfQkFTRV9UUkFOU0ZPUk1fR0VUX0NMQVNTICh0cmFucyk7CisKKyAgaWYgKGJjbGFzcy0+cXVlcnkpCisgICAgcmV0ID0gYmNsYXNzLT5xdWVyeSAodHJhbnMsIEdTVF9QQURfRElSRUNUSU9OIChwYWQpLCBxdWVyeSk7CisgIGVsc2UKKyAgICByZXQgPSBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKHBhZCwgcXVlcnkpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHRyYW5zKTsKKworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3QgR3N0UXVlcnlUeXBlICoKK2dzdF9iYXNlX3RyYW5zZm9ybV9xdWVyeV90eXBlIChHc3RQYWQgKiBwYWQpCit7CisgIHN0YXRpYyBjb25zdCBHc3RRdWVyeVR5cGUgdHlwZXNbXSA9IHsKKyAgICBHU1RfUVVFUllfUE9TSVRJT04sCisgICAgR1NUX1FVRVJZX05PTkUKKyAgfTsKKworICByZXR1cm4gdHlwZXM7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gZWl0aGVyIHJldHVybnMgdGhlIGlucHV0IGJ1ZmZlciB3aXRob3V0IGluY3JlbWVudGluZyB0aGUKKyAqIHJlZmNvdW50IG9yIGl0IGFsbG9jYXRlcyBhIG5ldyAod3JpdGFibGUpIGJ1ZmZlciAqLworc3RhdGljIEdzdEZsb3dSZXR1cm4KK2RlZmF1bHRfcHJlcGFyZV9vdXRwdXRfYnVmZmVyIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCisgICAgR3N0QnVmZmVyICogaW5idWYsIEdzdEJ1ZmZlciAqKiBvdXRidWYpCit7CisgIEdzdEJhc2VUcmFuc2Zvcm1Qcml2YXRlICpwcml2OworICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOworICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKmJjbGFzczsKKworICBwcml2ID0gdHJhbnMtPnByaXY7CisgIGJjbGFzcyA9IEdTVF9CQVNFX1RSQU5TRk9STV9HRVRfQ0xBU1MgKHRyYW5zKTsKKworICAvKiBmaWd1cmUgb3V0IGhvdyB0byBhbGxvY2F0ZSBhbiBvdXRwdXQgYnVmZmVyICovCisgIGlmICh0cmFucy0+cGFzc3Rocm91Z2gpIHsKKyAgICAvKiBwYXNzdGhyb3VnaCwgd2Ugd2lsbCBub3QgbW9kaWZ5IHRoZSBpbmNvbW1pbmcgYnVmZmVyIHNvIHdlIGNhbiBqdXN0CisgICAgICogcmV1c2UgaXQgKi8KKyAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgInBhc3N0aHJvdWdoOiByZXVzaW5nIGlucHV0IGJ1ZmZlciIpOworICAgICpvdXRidWYgPSBpbmJ1ZjsKKyAgfSBlbHNlIHsKKyAgICAvKiB3ZSBjYW4ndCByZXVzZSB0aGUgaW5wdXQgYnVmZmVyICovCisgICAgaWYgKHByaXYtPnBvb2wpIHsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAidXNpbmcgcG9vbCBhbGxvYyIpOworICAgICAgcmV0ID0gZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyIChwcml2LT5wb29sLCBvdXRidWYsIE5VTEwpOworICAgIH0gZWxzZSB7CisgICAgICBnc2l6ZSBpbnNpemUsIG91dHNpemU7CisgICAgICBnYm9vbGVhbiByZXM7CisKKyAgICAgIC8qIG5vIHBvb2wsIHdlIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlciBmaXJzdCAqLworICAgICAgaW5zaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoaW5idWYpOworCisgICAgICBpZiAodHJhbnMtPnBhc3N0aHJvdWdoKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiZG9pbmcgcGFzc3Rocm91Z2ggYWxsb2MiKTsKKyAgICAgICAgLyogcGFzc3Rocm91Z2gsIHRoZSBvdXRwdXQgc2l6ZSBpcyB0aGUgc2FtZSBhcyB0aGUgaW5wdXQgc2l6ZS4gKi8KKyAgICAgICAgb3V0c2l6ZSA9IGluc2l6ZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGdib29sZWFuIHdhbnRfaW5fcGxhY2UgPSAoYmNsYXNzLT50cmFuc2Zvcm1faXAgIT0gTlVMTCkKKyAgICAgICAgICAgICYmIHRyYW5zLT5hbHdheXNfaW5fcGxhY2U7CisKKyAgICAgICAgaWYgKHdhbnRfaW5fcGxhY2UpIHsKKyAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImRvaW5nIGlucGxhY2UgYWxsb2MiKTsKKyAgICAgICAgICAvKiB3ZSBhbGxvYyBhIGJ1ZmZlciBvZiB0aGUgc2FtZSBzaXplIGFzIHRoZSBpbnB1dCAqLworICAgICAgICAgIG91dHNpemUgPSBpbnNpemU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgR3N0Q2FwcyAqaW5jYXBzLCAqb3V0Y2FwczsKKworICAgICAgICAgIC8qIGVsc2UgdXNlIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gZ2V0IHRoZSBzaXplICovCisgICAgICAgICAgaW5jYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzICh0cmFucy0+c2lua3BhZCk7CisgICAgICAgICAgb3V0Y2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAodHJhbnMtPnNyY3BhZCk7CisKKyAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImdldHRpbmcgb3V0cHV0IHNpemUgZm9yIGFsbG9jIik7CisgICAgICAgICAgLyogY29weSB0cmFuc2Zvcm0sIGZpZ3VyZSBvdXQgdGhlIG91dHB1dCBzaXplICovCisgICAgICAgICAgcmVzID0gZ3N0X2Jhc2VfdHJhbnNmb3JtX3RyYW5zZm9ybV9zaXplICh0cmFucywKKyAgICAgICAgICAgICAgR1NUX1BBRF9TSU5LLCBpbmNhcHMsIGluc2l6ZSwgb3V0Y2FwcywgJm91dHNpemUpOworCisgICAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKGluY2Fwcyk7CisgICAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKG91dGNhcHMpOworCisgICAgICAgICAgaWYgKCFyZXMpCisgICAgICAgICAgICBnb3RvIHVua25vd25fc2l6ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJkb2luZyBhbGxvYyBvZiBzaXplICUiIEdfR1NJWkVfRk9STUFULCBvdXRzaXplKTsKKyAgICAgICpvdXRidWYgPQorICAgICAgICAgIGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChwcml2LT5hbGxvY2F0b3IsIG91dHNpemUsIHByaXYtPmFsaWdubWVudCk7CisgICAgfQorICB9CisgIHJldHVybiByZXQ7CisKKyAgLyogRVJST1JTICovCit1bmtub3duX3NpemU6CisgIHsKKyAgICBHU1RfRVJST1JfT0JKRUNUICh0cmFucywgInVua25vd24gb3V0cHV0IHNpemUiKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7CisgIH0KK30KKworc3RhdGljIGdib29sZWFuCitkZWZhdWx0X2NvcHlfbWV0YWRhdGEgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKKyAgICBHc3RCdWZmZXIgKiBpbmJ1ZiwgR3N0QnVmZmVyICogb3V0YnVmKQoreworICBHc3RCYXNlVHJhbnNmb3JtUHJpdmF0ZSAqcHJpdiA9IHRyYW5zLT5wcml2OworCisgIC8qIG5vdyBjb3B5IHRoZSBtZXRhZGF0YSAqLworICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImNvcHlpbmcgbWV0YWRhdGEiKTsKKworICAvKiB0aGlzIHNob3VsZCBub3QgaGFwcGVuLCBidWZmZXJzIGFsbG9jYXRlZCBmcm9tIGEgcG9vbCBvciB3aXRoCisgICAqIG5ld19hbGxvY2F0ZSBzaG91bGQgYWx3YXlzIGJlIHdyaXRhYmxlLiAqLworICBpZiAoIWdzdF9idWZmZXJfaXNfd3JpdGFibGUgKG91dGJ1ZikpCisgICAgZ290byBub3Rfd3JpdGFibGU7CisKKyAgLyogd2hlbiB3ZSBnZXQgaGVyZSwgdGhlIG1ldGFkYXRhIHNob3VsZCBiZSB3cml0YWJsZSAqLworICBnc3RfYnVmZmVyX2NvcHlfaW50byAob3V0YnVmLCBpbmJ1ZiwKKyAgICAgIEdTVF9CVUZGRVJfQ09QWV9GTEFHUyB8IEdTVF9CVUZGRVJfQ09QWV9USU1FU1RBTVBTLCAwLCAtMSk7CisKKyAgLyogY2xlYXIgdGhlIEdBUCBmbGFnIHdoZW4gdGhlIHN1YmNsYXNzIGRvZXMgbm90IHVuZGVyc3RhbmQgaXQgKi8KKyAgaWYgKCFwcml2LT5nYXBfYXdhcmUpCisgICAgR1NUX0JVRkZFUl9GTEFHX1VOU0VUIChvdXRidWYsIEdTVF9CVUZGRVJfRkxBR19HQVApOworCisgIHJldHVybiBUUlVFOworCisgIC8qIEVSUk9SUyAqLworbm90X3dyaXRhYmxlOgorICB7CisgICAgR1NUX1dBUk5JTkdfT0JKRUNUICh0cmFucywgImJ1ZmZlciAlcCBub3Qgd3JpdGFibGUiLCBvdXRidWYpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCisvKiBHaXZlbiBAY2FwcyBjYWxjdWx0YXRlIHRoZSBzaXplIG9mIG9uZSB1bml0LgorICoKKyAqIEZvciB2aWRlbyBjYXBzLCB0aGlzIGlzIHRoZSBzaXplIG9mIG9uZSBmcmFtZSAoYW5kIHRodXMgb25lIGJ1ZmZlcikuCisgKiBGb3IgYXVkaW8gY2FwcywgdGhpcyBpcyB0aGUgc2l6ZSBvZiBvbmUgc2FtcGxlLgorICoKKyAqIFRoZXNlIHZhbHVlcyBhcmUgY2FjaGVkIHNpbmNlIHRoZXkgZG8gbm90IGNoYW5nZSBhbmQgdGhlIGNhbGN1bGF0aW9uCisgKiBwb3RlbnRpYWxseSBpbnZvbHZlcyBwYXJzaW5nIGNhcHMgYW5kIG90aGVyIGV4cGVuc2l2ZSBzdHVmZi4KKyAqCisgKiBXZSBoYXZlIHR3byBjYWNoZSBsb2NhdGlvbnMgdG8gc3RvcmUgdGhlIHNpemUsIG9uZSBmb3IgdGhlIHNvdXJjZSBjYXBzCisgKiBhbmQgb25lIGZvciB0aGUgc2luayBjYXBzLgorICoKKyAqIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBGQUxTRSBpZiBubyBzaXplIGNvdWxkIGJlIGNhbGN1bGF0ZWQuCisgKi8KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldF91bml0X3NpemUgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0Q2FwcyAqIGNhcHMsCisgICAgZ3NpemUgKiBzaXplKQoreworICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKKyAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzICpiY2xhc3M7CisKKyAgLyogc2VlIGlmIHdlIGhhdmUgdGhlIHJlc3VsdCBjYWNoZWQgKi8KKyAgaWYgKHRyYW5zLT5jYWNoZV9jYXBzMSA9PSBjYXBzKSB7CisgICAgKnNpemUgPSB0cmFucy0+Y2FjaGVfY2FwczFfc2l6ZTsKKyAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywKKyAgICAgICAgInJldHVybmVkICUiIEdfR1NJWkVfRk9STUFUICIgZnJvbSBmaXJzdCBjYWNoZSIsICpzaXplKTsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorICBpZiAodHJhbnMtPmNhY2hlX2NhcHMyID09IGNhcHMpIHsKKyAgICAqc2l6ZSA9IHRyYW5zLT5jYWNoZV9jYXBzMl9zaXplOworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLAorICAgICAgICAicmV0dXJuZWQgJSIgR19HU0laRV9GT1JNQVQgIiBmcm9tIHNlY29uZCBjYWNoZWQiLCAqc2l6ZSk7CisgICAgcmV0dXJuIFRSVUU7CisgIH0KKworICBiY2xhc3MgPSBHU1RfQkFTRV9UUkFOU0ZPUk1fR0VUX0NMQVNTICh0cmFucyk7CisgIGlmIChiY2xhc3MtPmdldF91bml0X3NpemUpIHsKKyAgICByZXMgPSBiY2xhc3MtPmdldF91bml0X3NpemUgKHRyYW5zLCBjYXBzLCBzaXplKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywKKyAgICAgICAgImNhcHMgJSIgR1NUX1BUUl9GT1JNQVQgIikgaGFzIHVuaXQgc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCAiLCByZXMgJXMiLAorICAgICAgICBjYXBzLCAqc2l6ZSwgcmVzID8gIlRSVUUiIDogIkZBTFNFIik7CisKKyAgICBpZiAocmVzKSB7CisgICAgICAvKiBhbmQgY2FjaGUgdGhlIHZhbHVlcyAqLworICAgICAgaWYgKHRyYW5zLT5jYWNoZV9jYXBzMSA9PSBOVUxMKSB7CisgICAgICAgIGdzdF9jYXBzX3JlcGxhY2UgKCZ0cmFucy0+Y2FjaGVfY2FwczEsIGNhcHMpOworICAgICAgICB0cmFucy0+Y2FjaGVfY2FwczFfc2l6ZSA9ICpzaXplOworICAgICAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywKKyAgICAgICAgICAgICJjYWNoaW5nICUiIEdfR1NJWkVfRk9STUFUICIgaW4gZmlyc3QgY2FjaGUiLCAqc2l6ZSk7CisgICAgICB9IGVsc2UgaWYgKHRyYW5zLT5jYWNoZV9jYXBzMiA9PSBOVUxMKSB7CisgICAgICAgIGdzdF9jYXBzX3JlcGxhY2UgKCZ0cmFucy0+Y2FjaGVfY2FwczIsIGNhcHMpOworICAgICAgICB0cmFucy0+Y2FjaGVfY2FwczJfc2l6ZSA9ICpzaXplOworICAgICAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywKKyAgICAgICAgICAgICJjYWNoaW5nICUiIEdfR1NJWkVfRk9STUFUICIgaW4gc2Vjb25kIGNhY2hlIiwgKnNpemUpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJubyBmcmVlIHNwb3QgdG8gY2FjaGUgdW5pdF9zaXplIik7CisgICAgICB9CisgICAgfQorICB9IGVsc2UgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiU3ViLWNsYXNzIGRvZXMgbm90IGltcGxlbWVudCBnZXRfdW5pdF9zaXplIik7CisgIH0KKyAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfYmFzZV90cmFuc2Zvcm1fc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KQoreworICBHc3RCYXNlVHJhbnNmb3JtICp0cmFuczsKKyAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzICpiY2xhc3M7CisgIGdib29sZWFuIHJldCA9IFRSVUU7CisKKyAgdHJhbnMgPSBHU1RfQkFTRV9UUkFOU0ZPUk0gKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7CisgIGlmIChHX1VOTElLRUxZICh0cmFucyA9PSBOVUxMKSkgeworICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorICBiY2xhc3MgPSBHU1RfQkFTRV9UUkFOU0ZPUk1fR0VUX0NMQVNTICh0cmFucyk7CisKKyAgaWYgKGJjbGFzcy0+c2lua19ldmVudCkKKyAgICByZXQgPSBiY2xhc3MtPnNpbmtfZXZlbnQgKHRyYW5zLCBldmVudCk7CisgIGVsc2UKKyAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKworICBnc3Rfb2JqZWN0X3VucmVmICh0cmFucyk7CisKKyAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfYmFzZV90cmFuc2Zvcm1fc2lua19ldmVudGZ1bmMgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0RXZlbnQgKiBldmVudCkKK3sKKyAgZ2Jvb2xlYW4gcmV0ID0gVFJVRSwgZm9yd2FyZCA9IFRSVUU7CisKKyAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7CisgICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RBUlQ6CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVE9QOgorICAgICAgR1NUX09CSkVDVF9MT0NLICh0cmFucyk7CisgICAgICAvKiByZXNldCBRb1MgcGFyYW1ldGVycyAqLworICAgICAgdHJhbnMtPnByaXYtPnByb3BvcnRpb24gPSAxLjA7CisgICAgICB0cmFucy0+cHJpdi0+ZWFybGllc3RfdGltZSA9IC0xOworICAgICAgdHJhbnMtPnByaXYtPmRpc2NvbnQgPSBGQUxTRTsKKyAgICAgIHRyYW5zLT5wcml2LT5wcm9jZXNzZWQgPSAwOworICAgICAgdHJhbnMtPnByaXYtPmRyb3BwZWQgPSAwOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHRyYW5zKTsKKyAgICAgIC8qIHdlIG5lZWQgbmV3IHNlZ21lbnQgaW5mbyBhZnRlciB0aGUgZmx1c2guICovCisgICAgICB0cmFucy0+aGF2ZV9zZWdtZW50ID0gRkFMU0U7CisgICAgICBnc3Rfc2VnbWVudF9pbml0ICgmdHJhbnMtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKKyAgICAgIHRyYW5zLT5wcml2LT5wb3NpdGlvbl9vdXQgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfRVZFTlRfRU9TOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfRVZFTlRfVEFHOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfRVZFTlRfQ0FQUzoKKyAgICB7CisgICAgICBHc3RDYXBzICpjYXBzOworCisgICAgICBnc3RfZXZlbnRfcGFyc2VfY2FwcyAoZXZlbnQsICZjYXBzKTsKKyAgICAgIHJldCA9IGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRjYXBzICh0cmFucywgdHJhbnMtPnNpbmtwYWQsIGNhcHMpOworCisgICAgICBmb3J3YXJkID0gRkFMU0U7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVDoKKyAgICB7CisgICAgICBnc3RfZXZlbnRfY29weV9zZWdtZW50IChldmVudCwgJnRyYW5zLT5zZWdtZW50KTsKKyAgICAgIHRyYW5zLT5oYXZlX3NlZ21lbnQgPSBUUlVFOworCisgICAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgInJlY2VpdmVkIFNFR01FTlQgJSIgR1NUX1NFR01FTlRfRk9STUFULAorICAgICAgICAgICZ0cmFucy0+c2VnbWVudCk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgaWYgKHJldCAmJiBmb3J3YXJkKQorICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAodHJhbnMtPnNyY3BhZCwgZXZlbnQpOworICBlbHNlCisgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisKKyAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfYmFzZV90cmFuc2Zvcm1fc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpCit7CisgIEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zOworICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKmJjbGFzczsKKyAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKKworICB0cmFucyA9IEdTVF9CQVNFX1RSQU5TRk9STSAoZ3N0X3BhZF9nZXRfcGFyZW50IChwYWQpKTsKKyAgaWYgKEdfVU5MSUtFTFkgKHRyYW5zID09IE5VTEwpKSB7CisgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgYmNsYXNzID0gR1NUX0JBU0VfVFJBTlNGT1JNX0dFVF9DTEFTUyAodHJhbnMpOworCisgIGlmIChiY2xhc3MtPnNyY19ldmVudCkKKyAgICByZXQgPSBiY2xhc3MtPnNyY19ldmVudCAodHJhbnMsIGV2ZW50KTsKKyAgZWxzZQorICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHRyYW5zKTsKKworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iYXNlX3RyYW5zZm9ybV9zcmNfZXZlbnRmdW5jIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdEV2ZW50ICogZXZlbnQpCit7CisgIGdib29sZWFuIHJldDsKKworICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImhhbmRsaW5nIGV2ZW50ICVwICUiIEdTVF9QVFJfRk9STUFULCBldmVudCwgZXZlbnQpOworCisgIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgeworICAgIGNhc2UgR1NUX0VWRU5UX1NFRUs6CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9FVkVOVF9OQVZJR0FUSU9OOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfRVZFTlRfUU9TOgorICAgIHsKKyAgICAgIGdkb3VibGUgcHJvcG9ydGlvbjsKKyAgICAgIEdzdENsb2NrVGltZURpZmYgZGlmZjsKKyAgICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXA7CisKKyAgICAgIGdzdF9ldmVudF9wYXJzZV9xb3MgKGV2ZW50LCBOVUxMLCAmcHJvcG9ydGlvbiwgJmRpZmYsICZ0aW1lc3RhbXApOworICAgICAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3VwZGF0ZV9xb3MgKHRyYW5zLCBwcm9wb3J0aW9uLCBkaWZmLCB0aW1lc3RhbXApOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAodHJhbnMtPnNpbmtwYWQsIGV2ZW50KTsKKworICByZXR1cm4gcmV0OworfQorCisvKiBwZXJmb3JtIGEgdHJhbnNmb3JtIG9uIEBpbmJ1ZiBhbmQgcHV0IHRoZSByZXN1bHQgaW4gQG91dGJ1Zi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNvbW1vbiB0byB0aGUgcHVzaCBhbmQgcHVsbC1iYXNlZCBvcGVyYXRpb25zLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgb3duZXJzaGlwIG9mIEBpbmJ1ZiAqLworc3RhdGljIEdzdEZsb3dSZXR1cm4KK2dzdF9iYXNlX3RyYW5zZm9ybV9oYW5kbGVfYnVmZmVyIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdEJ1ZmZlciAqIGluYnVmLAorICAgIEdzdEJ1ZmZlciAqKiBvdXRidWYpCit7CisgIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqYmNsYXNzOworICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOworICBnYm9vbGVhbiB3YW50X2luX3BsYWNlOworICBHc3RDbG9ja1RpbWUgcnVubmluZ190aW1lOworICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wOworICBnYm9vbGVhbiByZWNvbmZpZ3VyZTsKKworICBiY2xhc3MgPSBHU1RfQkFTRV9UUkFOU0ZPUk1fR0VUX0NMQVNTICh0cmFucyk7CisKKyAgR1NUX09CSkVDVF9MT0NLICh0cmFucy0+c2lua3BhZCk7CisgIHJlY29uZmlndXJlID0gR1NUX1BBRF9ORUVEU19SRUNPTkZJR1VSRSAodHJhbnMtPnNyY3BhZCkKKyAgICAgIHx8IHRyYW5zLT5wcml2LT5yZWNvbmZpZ3VyZTsKKyAgR1NUX09CSkVDVF9GTEFHX1VOU0VUICh0cmFucy0+c3JjcGFkLCBHU1RfUEFEX05FRURfUkVDT05GSUdVUkUpOworICB0cmFucy0+cHJpdi0+cmVjb25maWd1cmUgPSBGQUxTRTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHRyYW5zLT5zaW5rcGFkKTsKKworICBpZiAoR19VTkxJS0VMWSAocmVjb25maWd1cmUpKSB7CisgICAgR3N0Q2FwcyAqaW5jYXBzOworCisgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJ3ZSBoYWQgYSBwZW5kaW5nIHJlY29uZmlndXJlIik7CisKKyAgICBpbmNhcHMgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKHRyYW5zLT5zaW5rcGFkKTsKKyAgICBpZiAoaW5jYXBzID09IE5VTEwpCisgICAgICBnb3RvIG5vX3JlY29uZmlndXJlOworCisgICAgLyogaWYgd2UgbmVlZCB0byByZWNvbmZpZ3VyZSB3ZSBwcmV0ZW5kIGEgYnVmZmVyIHdpdGggbmV3IGNhcHMgYXJyaXZlZC4gVGhpcworICAgICAqIHdpbGwgcmVjb25maWd1cmUgdGhlIHRyYW5zZm9ybSB3aXRoIHRoZSBuZXcgb3V0cHV0IGZvcm1hdC4gV2UgY2FuIG9ubHkKKyAgICAgKiBkbyB0aGlzIGlmIHRoZSBidWZmZXIgYWN0dWFsbHkgaGFzIGNhcHMuICovCisgICAgaWYgKCFnc3RfYmFzZV90cmFuc2Zvcm1fc2V0Y2FwcyAodHJhbnMsIHRyYW5zLT5zaW5rcGFkLCBpbmNhcHMpKSB7CisgICAgICBnc3RfY2Fwc191bnJlZiAoaW5jYXBzKTsKKyAgICAgIGdvdG8gbm90X25lZ290aWF0ZWQ7CisgICAgfQorICAgIGdzdF9jYXBzX3VucmVmIChpbmNhcHMpOworICB9CisKK25vX3JlY29uZmlndXJlOgorICBpZiAoR1NUX0JVRkZFUl9PRkZTRVRfSVNfVkFMSUQgKGluYnVmKSkKKyAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywKKyAgICAgICAgImhhbmRsaW5nIGJ1ZmZlciAlcCBvZiBzaXplICUiIEdfR1NJWkVfRk9STUFUICIgYW5kIG9mZnNldCAlIgorICAgICAgICBHX0dVSU5UNjRfRk9STUFULCBpbmJ1ZiwgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoaW5idWYpLAorICAgICAgICBHU1RfQlVGRkVSX09GRlNFVCAoaW5idWYpKTsKKyAgZWxzZQorICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLAorICAgICAgICAiaGFuZGxpbmcgYnVmZmVyICVwIG9mIHNpemUgJSIgR19HU0laRV9GT1JNQVQgIiBhbmQgb2Zmc2V0IE5PTkUiLCBpbmJ1ZiwKKyAgICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoaW5idWYpKTsKKworICAvKiBEb24ndCBhbGxvdyBidWZmZXIgaGFuZGxpbmcgYmVmb3JlIG5lZ290aWF0aW9uLCBleGNlcHQgaW4gcGFzc3Rocm91Z2ggbW9kZQorICAgKiBvciBpZiB0aGUgY2xhc3MgZG9lc24ndCBpbXBsZW1lbnQgYSBzZXRfY2FwcyBmdW5jdGlvbiAoaW4gd2hpY2ggY2FzZSBpdCBkb2Vzbid0CisgICAqIGNhcmUgYWJvdXQgY2FwcykKKyAgICovCisgIGlmICghdHJhbnMtPm5lZ290aWF0ZWQgJiYgIXRyYW5zLT5wYXNzdGhyb3VnaCAmJiAoYmNsYXNzLT5zZXRfY2FwcyAhPSBOVUxMKSkKKyAgICBnb3RvIG5vdF9uZWdvdGlhdGVkOworCisgIC8qIFNldCBkaXNjb250IGZsYWcgc28gd2UgY2FuIG1hcmsgdGhlIG91dGdvaW5nIGJ1ZmZlciAqLworICBpZiAoR1NUX0JVRkZFUl9JU19ESVNDT05UIChpbmJ1ZikpIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImdvdCBESVNDT05UIGJ1ZmZlciAlcCIsIGluYnVmKTsKKyAgICB0cmFucy0+cHJpdi0+ZGlzY29udCA9IFRSVUU7CisgIH0KKworICAvKiBjYW4gb25seSBkbyBRb1MgaWYgdGhlIHNlZ21lbnQgaXMgaW4gVElNRSAqLworICBpZiAodHJhbnMtPnNlZ21lbnQuZm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSkKKyAgICBnb3RvIG5vX3FvczsKKworICAvKiBRT1MgaXMgZG9uZSBvbiB0aGUgcnVubmluZyB0aW1lIG9mIHRoZSBidWZmZXIsIGdldCBpdCBub3cgKi8KKyAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGluYnVmKTsKKyAgcnVubmluZ190aW1lID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmdHJhbnMtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwKKyAgICAgIHRpbWVzdGFtcCk7CisKKyAgaWYgKHJ1bm5pbmdfdGltZSAhPSAtMSkgeworICAgIGdib29sZWFuIG5lZWRfc2tpcDsKKyAgICBHc3RDbG9ja1RpbWUgZWFybGllc3RfdGltZTsKKyAgICBnZG91YmxlIHByb3BvcnRpb247CisKKyAgICAvKiBsb2NrIGZvciBnZXR0aW5nIHRoZSBRb1MgcGFyYW1ldGVycyB0aGF0IGFyZSBzZXQgKGluIGEgZGlmZmVyZW50IHRocmVhZCkKKyAgICAgKiB3aXRoIHRoZSBRT1MgZXZlbnRzICovCisgICAgR1NUX09CSkVDVF9MT0NLICh0cmFucyk7CisgICAgZWFybGllc3RfdGltZSA9IHRyYW5zLT5wcml2LT5lYXJsaWVzdF90aW1lOworICAgIHByb3BvcnRpb24gPSB0cmFucy0+cHJpdi0+cHJvcG9ydGlvbjsKKyAgICAvKiBjaGVjayBmb3IgUW9TLCBkb24ndCBwZXJmb3JtIGNvbnZlcnNpb24gZm9yIGJ1ZmZlcnMKKyAgICAgKiB0aGF0IGFyZSBrbm93biB0byBiZSBsYXRlLiAqLworICAgIG5lZWRfc2tpcCA9IHRyYW5zLT5wcml2LT5xb3NfZW5hYmxlZCAmJgorICAgICAgICBlYXJsaWVzdF90aW1lICE9IC0xICYmIHJ1bm5pbmdfdGltZSA8PSBlYXJsaWVzdF90aW1lOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh0cmFucyk7CisKKyAgICBpZiAobmVlZF9za2lwKSB7CisgICAgICBHc3RNZXNzYWdlICpxb3NfbXNnOworICAgICAgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uOworICAgICAgZ3VpbnQ2NCBzdHJlYW1fdGltZTsKKyAgICAgIGdpbnQ2NCBqaXR0ZXI7CisKKyAgICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1FPUywgdHJhbnMsICJza2lwcGluZyB0cmFuc2Zvcm06IHFvc3RpbWUgJSIKKyAgICAgICAgICBHU1RfVElNRV9GT1JNQVQgIiA8PSAlIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICAgICAgR1NUX1RJTUVfQVJHUyAocnVubmluZ190aW1lKSwgR1NUX1RJTUVfQVJHUyAoZWFybGllc3RfdGltZSkpOworCisgICAgICB0cmFucy0+cHJpdi0+ZHJvcHBlZCsrOworCisgICAgICBkdXJhdGlvbiA9IEdTVF9CVUZGRVJfRFVSQVRJT04gKGluYnVmKTsKKyAgICAgIHN0cmVhbV90aW1lID0KKyAgICAgICAgICBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnRyYW5zLT5zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsCisgICAgICAgICAgdGltZXN0YW1wKTsKKyAgICAgIGppdHRlciA9IEdTVF9DTE9DS19ESUZGIChydW5uaW5nX3RpbWUsIGVhcmxpZXN0X3RpbWUpOworCisgICAgICBxb3NfbXNnID0KKyAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfcW9zIChHU1RfT0JKRUNUX0NBU1QgKHRyYW5zKSwgRkFMU0UsIHJ1bm5pbmdfdGltZSwKKyAgICAgICAgICBzdHJlYW1fdGltZSwgdGltZXN0YW1wLCBkdXJhdGlvbik7CisgICAgICBnc3RfbWVzc2FnZV9zZXRfcW9zX3ZhbHVlcyAocW9zX21zZywgaml0dGVyLCBwcm9wb3J0aW9uLCAxMDAwMDAwKTsKKyAgICAgIGdzdF9tZXNzYWdlX3NldF9xb3Nfc3RhdHMgKHFvc19tc2csIEdTVF9GT1JNQVRfQlVGRkVSUywKKyAgICAgICAgICB0cmFucy0+cHJpdi0+cHJvY2Vzc2VkLCB0cmFucy0+cHJpdi0+ZHJvcHBlZCk7CisgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKHRyYW5zKSwgcW9zX21zZyk7CisKKyAgICAgIC8qIG1hcmsgZGlzY29udCBmb3IgbmV4dCBidWZmZXIgKi8KKyAgICAgIHRyYW5zLT5wcml2LT5kaXNjb250ID0gVFJVRTsKKyAgICAgIGdvdG8gc2tpcDsKKyAgICB9CisgIH0KKworbm9fcW9zOgorCisgIC8qIGZpcnN0IHRyeSB0byBhbGxvY2F0ZSBhbiBvdXRwdXQgYnVmZmVyIGJhc2VkIG9uIHRoZSBjdXJyZW50bHkgbmVnb3RpYXRlZAorICAgKiBmb3JtYXQuIG91dGJ1ZiB3aWxsIGNvbnRhaW4gYSBidWZmZXIgc3VpdGFibGUgZm9yIGRvaW5nIHRoZSBjb25maWd1cmVkCisgICAqIHRyYW5zZm9ybSBhZnRlciB0aGlzIGZ1bmN0aW9uLiAqLworICBpZiAoYmNsYXNzLT5wcmVwYXJlX291dHB1dF9idWZmZXIgPT0gTlVMTCkKKyAgICBnb3RvIG5vX3ByZXBhcmU7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJjYWxsaW5nIHByZXBhcmUgYnVmZmVyIik7CisgIHJldCA9IGJjbGFzcy0+cHJlcGFyZV9vdXRwdXRfYnVmZmVyICh0cmFucywgaW5idWYsIG91dGJ1Zik7CisKKyAgaWYgKHJldCAhPSBHU1RfRkxPV19PSyB8fCAqb3V0YnVmID09IE5VTEwpCisgICAgZ290byBub19idWZmZXI7CisKKyAgaWYgKGluYnVmID09ICpvdXRidWYpIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgInJldXNpbmcgaW5wdXQgYnVmZmVyIik7CisgIH0gZWxzZSBpZiAodHJhbnMtPnBhc3N0aHJvdWdoKSB7CisgICAgLyogd2UgYXJlIGFza2VkIHRvIHBlcmZvcm0gYSBwYXNzdGhyb3VnaCB0cmFuc2Zvcm0gYnV0IHRoZSBpbnB1dCBhbmQKKyAgICAgKiBvdXRwdXQgYnVmZmVycyBhcmUgZGlmZmVyZW50LiBXZSBoYXZlIHRvIGRpc2NhcmQgdGhlIG91dHB1dCBidWZmZXIgYW5kCisgICAgICogcmV1c2UgdGhlIGlucHV0IGJ1ZmZlci4gVGhpcyBpcyByYXRoZXIgd2VpcmQsIGl0IG1lYW5zIHRoYXQgdGhlIHByZXBhcmUKKyAgICAgKiBvdXRwdXQgYnVmZmVyIGRvZXMgc29tZXRoaW5nIHdyb25nLiAqLworICAgIEdTVF9XQVJOSU5HX09CSkVDVCAodHJhbnMsICJwYXNzdGhyb3VnaCBidXQgZGlmZmVyZW50IGJ1ZmZlcnMsIGNoZWNrIHRoZSAiCisgICAgICAgICJwcmVwYXJlX291dHB1dF9idWZmZXIgaW1wbGVtZW50YXRpb24iKTsKKyAgICBnc3RfYnVmZmVyX3VucmVmICgqb3V0YnVmKTsKKyAgICAqb3V0YnVmID0gaW5idWY7CisgIH0gZWxzZSB7CisgICAgLyogY29weSB0aGUgbWV0YWRhdGEgKi8KKyAgICBpZiAoYmNsYXNzLT5jb3B5X21ldGFkYXRhKQorICAgICAgaWYgKCFiY2xhc3MtPmNvcHlfbWV0YWRhdGEgKHRyYW5zLCBpbmJ1ZiwgKm91dGJ1ZikpIHsKKyAgICAgICAgLyogc29tZXRoaW5nIGZhaWxlZCwgcG9zdCBhIHdhcm5pbmcgKi8KKyAgICAgICAgR1NUX0VMRU1FTlRfV0FSTklORyAodHJhbnMsIFNUUkVBTSwgTk9UX0lNUExFTUVOVEVELAorICAgICAgICAgICAgKCJjb3VsZCBub3QgY29weSBtZXRhZGF0YSIpLCAoTlVMTCkpOworICAgICAgfQorICB9CisgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAidXNpbmcgYWxsb2NhdGVkIGJ1ZmZlciBpbiAlcCwgb3V0ICVwIiwgaW5idWYsCisgICAgICAqb3V0YnVmKTsKKworICAvKiBub3cgcGVyZm9ybSB0aGUgbmVlZGVkIHRyYW5zZm9ybSAqLworICBpZiAodHJhbnMtPnBhc3N0aHJvdWdoKSB7CisgICAgLyogSW4gcGFzc3Rocm91Z2ggbW9kZSwgZ2l2ZSB0cmFuc2Zvcm1faXAgYSBsb29rIGF0IHRoZQorICAgICAqIGJ1ZmZlciwgd2l0aG91dCBtYWtpbmcgaXQgd3JpdGFibGUsIG9yIGp1c3QgcHVzaCB0aGUKKyAgICAgKiBkYXRhIHRocm91Z2ggKi8KKyAgICBpZiAoYmNsYXNzLT50cmFuc2Zvcm1faXApIHsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiZG9pbmcgcGFzc3Rocm91Z2ggdHJhbnNmb3JtIik7CisgICAgICByZXQgPSBiY2xhc3MtPnRyYW5zZm9ybV9pcCAodHJhbnMsICpvdXRidWYpOworICAgIH0gZWxzZSB7CisgICAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImVsZW1lbnQgaXMgaW4gcGFzc3Rocm91Z2giKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgd2FudF9pbl9wbGFjZSA9IChiY2xhc3MtPnRyYW5zZm9ybV9pcCAhPSBOVUxMKSAmJiB0cmFucy0+YWx3YXlzX2luX3BsYWNlOworCisgICAgaWYgKHdhbnRfaW5fcGxhY2UpIHsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiZG9pbmcgaW5wbGFjZSB0cmFuc2Zvcm0iKTsKKworICAgICAgaWYgKGluYnVmICE9ICpvdXRidWYpIHsKKyAgICAgICAgZ3VpbnQ4ICppbmRhdGEsICpvdXRkYXRhOworICAgICAgICBnc2l6ZSBpbnNpemUsIG91dHNpemU7CisKKyAgICAgICAgLyogRGlmZmVyZW50IGJ1ZmZlci4gVGhlIGRhdGEgY2FuIHN0aWxsIGJlIHRoZSBzYW1lIHdoZW4gd2UgYXJlIGRlYWxpbmcKKyAgICAgICAgICogd2l0aCBzdWJidWZmZXJzIG9mIHRoZSBzYW1lIGJ1ZmZlci4gTm90ZSB0aGF0IGJlY2F1c2Ugb2YgdGhlIEZJWE1FIGluCisgICAgICAgICAqIHByZXBhcmVfb3V0cHV0X2J1ZmZlcigpIHdlIGhhdmUgZGVjcmVhc2VkIHRoZSByZWZjb3VudHMgb2YgaW5idWYgYW5kCisgICAgICAgICAqIG91dGJ1ZiB0byBrZWVwIHRoZW0gd3JpdGFibGUgKi8KKyAgICAgICAgaW5kYXRhID0gZ3N0X2J1ZmZlcl9tYXAgKGluYnVmLCAmaW5zaXplLCBOVUxMLCBHU1RfTUFQX1JFQUQpOworICAgICAgICBvdXRkYXRhID0gZ3N0X2J1ZmZlcl9tYXAgKCpvdXRidWYsICZvdXRzaXplLCBOVUxMLCBHU1RfTUFQX1dSSVRFKTsKKworICAgICAgICBpZiAoaW5kYXRhICE9IG91dGRhdGEpCisgICAgICAgICAgbWVtY3B5IChvdXRkYXRhLCBpbmRhdGEsIGluc2l6ZSk7CisKKyAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5idWYsIGluZGF0YSwgaW5zaXplKTsKKyAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoKm91dGJ1Ziwgb3V0ZGF0YSwgb3V0c2l6ZSk7CisgICAgICB9CisgICAgICByZXQgPSBiY2xhc3MtPnRyYW5zZm9ybV9pcCAodHJhbnMsICpvdXRidWYpOworICAgIH0gZWxzZSB7CisgICAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImRvaW5nIG5vbi1pbnBsYWNlIHRyYW5zZm9ybSIpOworCisgICAgICBpZiAoYmNsYXNzLT50cmFuc2Zvcm0pCisgICAgICAgIHJldCA9IGJjbGFzcy0+dHJhbnNmb3JtICh0cmFucywgaW5idWYsICpvdXRidWYpOworICAgICAgZWxzZQorICAgICAgICByZXQgPSBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOworICAgIH0KKyAgfQorCitza2lwOgorICAvKiBvbmx5IHVucmVmIGlucHV0IGJ1ZmZlciBpZiB3ZSBhbGxvY2F0ZWQgYSBuZXcgb3V0YnVmIGJ1ZmZlci4gSWYgd2UgcmV1c2VkCisgICAqIHRoZSBpbnB1dCBidWZmZXIsIG5vIHJlZmNvdW50IGlzIGNoYW5nZWQgdG8ga2VlcCB0aGUgaW5wdXQgYnVmZmVyIHdyaXRhYmxlCisgICAqIHdoZW4gbmVlZGVkLiAqLworICBpZiAoKm91dGJ1ZiAhPSBpbmJ1ZikKKyAgICBnc3RfYnVmZmVyX3VucmVmIChpbmJ1Zik7CisKKyAgcmV0dXJuIHJldDsKKworICAvKiBFUlJPUlMgKi8KK25vdF9uZWdvdGlhdGVkOgorICB7CisgICAgZ3N0X2J1ZmZlcl91bnJlZiAoaW5idWYpOworICAgICpvdXRidWYgPSBOVUxMOworICAgIEdTVF9FTEVNRU5UX0VSUk9SICh0cmFucywgU1RSRUFNLCBOT1RfSU1QTEVNRU5URUQsCisgICAgICAgICgibm90IG5lZ290aWF0ZWQiKSwgKCJub3QgbmVnb3RpYXRlZCIpKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX05FR09USUFURUQ7CisgIH0KK25vX3ByZXBhcmU6CisgIHsKKyAgICBnc3RfYnVmZmVyX3VucmVmIChpbmJ1Zik7CisgICAgR1NUX0VMRU1FTlRfRVJST1IgKHRyYW5zLCBTVFJFQU0sIE5PVF9JTVBMRU1FTlRFRCwKKyAgICAgICAgKCJTdWItY2xhc3MgaGFzIG5vIHByZXBhcmVfb3V0cHV0X2J1ZmZlciBpbXBsZW1lbnRhdGlvbiIpLCAoTlVMTCkpOworICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOworICB9Citub19idWZmZXI6CisgIHsKKyAgICBnc3RfYnVmZmVyX3VucmVmIChpbmJ1Zik7CisgICAgKm91dGJ1ZiA9IE5VTEw7CisgICAgR1NUX1dBUk5JTkdfT0JKRUNUICh0cmFucywgImNvdWxkIG5vdCBnZXQgYnVmZmVyIGZyb20gcG9vbDogJXMiLAorICAgICAgICBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7CisgICAgcmV0dXJuIHJldDsKKyAgfQorfQorCisvKiBGSVhNRSwgZ2V0cmFuZ2UgaXMgYnJva2VuLCBuZWVkIHRvIHB1bGwgcmFuZ2UgZnJvbSB0aGUgb3RoZXIKKyAqIGVuZCBiYXNlZCBvbiB0aGUgdHJhbnNmb3JtX3NpemUgcmVzdWx0LgorICovCitzdGF0aWMgR3N0Rmxvd1JldHVybgorZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldHJhbmdlIChHc3RQYWQgKiBwYWQsIGd1aW50NjQgb2Zmc2V0LAorICAgIGd1aW50IGxlbmd0aCwgR3N0QnVmZmVyICoqIGJ1ZmZlcikKK3sKKyAgR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnM7CisgIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqa2xhc3M7CisgIEdzdEZsb3dSZXR1cm4gcmV0OworICBHc3RCdWZmZXIgKmluYnVmOworCisgIHRyYW5zID0gR1NUX0JBU0VfVFJBTlNGT1JNIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOworCisgIHJldCA9IGdzdF9wYWRfcHVsbF9yYW5nZSAodHJhbnMtPnNpbmtwYWQsIG9mZnNldCwgbGVuZ3RoLCAmaW5idWYpOworICBpZiAoR19VTkxJS0VMWSAocmV0ICE9IEdTVF9GTE9XX09LKSkKKyAgICBnb3RvIHB1bGxfZXJyb3I7CisKKyAga2xhc3MgPSBHU1RfQkFTRV9UUkFOU0ZPUk1fR0VUX0NMQVNTICh0cmFucyk7CisgIGlmIChrbGFzcy0+YmVmb3JlX3RyYW5zZm9ybSkKKyAgICBrbGFzcy0+YmVmb3JlX3RyYW5zZm9ybSAodHJhbnMsIGluYnVmKTsKKworICBHU1RfQkFTRV9UUkFOU0ZPUk1fTE9DSyAodHJhbnMpOworICByZXQgPSBnc3RfYmFzZV90cmFuc2Zvcm1faGFuZGxlX2J1ZmZlciAodHJhbnMsIGluYnVmLCBidWZmZXIpOworICBHU1RfQkFTRV9UUkFOU0ZPUk1fVU5MT0NLICh0cmFucyk7CisKK2RvbmU6CisgIGdzdF9vYmplY3RfdW5yZWYgKHRyYW5zKTsKKworICByZXR1cm4gcmV0OworCisgIC8qIEVSUk9SUyAqLworcHVsbF9lcnJvcjoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiZmFpbGVkIHRvIHB1bGwgYSBidWZmZXI6ICVzIiwKKyAgICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOworICAgIGdvdG8gZG9uZTsKKyAgfQorfQorCitzdGF0aWMgR3N0Rmxvd1JldHVybgorZ3N0X2Jhc2VfdHJhbnNmb3JtX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKK3sKKyAgR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnM7CisgIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqa2xhc3M7CisgIEdzdEZsb3dSZXR1cm4gcmV0OworICBHc3RDbG9ja1RpbWUgcG9zaXRpb24gPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBkdXJhdGlvbjsKKyAgR3N0QnVmZmVyICpvdXRidWYgPSBOVUxMOworCisgIHRyYW5zID0gR1NUX0JBU0VfVFJBTlNGT1JNIChHU1RfT0JKRUNUX1BBUkVOVCAocGFkKSk7CisKKyAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcik7CisgIGR1cmF0aW9uID0gR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKTsKKworICAvKiBjYWxjdWxhdGUgZW5kIHBvc2l0aW9uIG9mIHRoZSBpbmNvbWluZyBidWZmZXIgKi8KKyAgaWYgKHRpbWVzdGFtcCAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7CisgICAgaWYgKGR1cmF0aW9uICE9IEdTVF9DTE9DS19USU1FX05PTkUpCisgICAgICBwb3NpdGlvbiA9IHRpbWVzdGFtcCArIGR1cmF0aW9uOworICAgIGVsc2UKKyAgICAgIHBvc2l0aW9uID0gdGltZXN0YW1wOworICB9CisKKyAga2xhc3MgPSBHU1RfQkFTRV9UUkFOU0ZPUk1fR0VUX0NMQVNTICh0cmFucyk7CisgIGlmIChrbGFzcy0+YmVmb3JlX3RyYW5zZm9ybSkKKyAgICBrbGFzcy0+YmVmb3JlX3RyYW5zZm9ybSAodHJhbnMsIGJ1ZmZlcik7CisKKyAgLyogcHJvdGVjdCB0cmFuc2Zvcm0gbWV0aG9kIGFuZCBjb25jdXJyZW50IGJ1ZmZlciBhbGxvYyAqLworICBHU1RfQkFTRV9UUkFOU0ZPUk1fTE9DSyAodHJhbnMpOworICByZXQgPSBnc3RfYmFzZV90cmFuc2Zvcm1faGFuZGxlX2J1ZmZlciAodHJhbnMsIGJ1ZmZlciwgJm91dGJ1Zik7CisgIEdTVF9CQVNFX1RSQU5TRk9STV9VTkxPQ0sgKHRyYW5zKTsKKworICAvKiBvdXRidWYgY2FuIGJlIE5VTEwsIHRoaXMgbWVhbnMgYSBkcm9wcGVkIGJ1ZmZlciwgaWYgd2UgaGF2ZSBhIGJ1ZmZlciBidXQKKyAgICogR1NUX0JBU0VfVFJBTlNGT1JNX0ZMT1dfRFJPUFBFRCB3ZSB3aWxsIG5vdCBwdXNoIGVpdGhlci4gKi8KKyAgaWYgKG91dGJ1ZiAhPSBOVUxMKSB7CisgICAgaWYgKHJldCA9PSBHU1RfRkxPV19PSykgeworICAgICAgR3N0Q2xvY2tUaW1lIHBvc2l0aW9uX291dCA9IEdTVF9DTE9DS19USU1FX05PTkU7CisKKyAgICAgIC8qIFJlbWVtYmVyIGxhc3Qgc3RvcCBwb3NpdGlvbiAqLworICAgICAgaWYgKHBvc2l0aW9uICE9IEdTVF9DTE9DS19USU1FX05PTkUgJiYKKyAgICAgICAgICB0cmFucy0+c2VnbWVudC5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKQorICAgICAgICB0cmFucy0+c2VnbWVudC5wb3NpdGlvbiA9IHBvc2l0aW9uOworCisgICAgICBpZiAoR1NUX0JVRkZFUl9USU1FU1RBTVBfSVNfVkFMSUQgKG91dGJ1ZikpIHsKKyAgICAgICAgcG9zaXRpb25fb3V0ID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKG91dGJ1Zik7CisgICAgICAgIGlmIChHU1RfQlVGRkVSX0RVUkFUSU9OX0lTX1ZBTElEIChvdXRidWYpKQorICAgICAgICAgIHBvc2l0aW9uX291dCArPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChvdXRidWYpOworICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbiAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7CisgICAgICAgIHBvc2l0aW9uX291dCA9IHBvc2l0aW9uOworICAgICAgfQorICAgICAgaWYgKHBvc2l0aW9uX291dCAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FCisgICAgICAgICAgJiYgdHJhbnMtPnNlZ21lbnQuZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSkKKyAgICAgICAgdHJhbnMtPnByaXYtPnBvc2l0aW9uX291dCA9IHBvc2l0aW9uX291dDsKKworICAgICAgLyogYXBwbHkgRElTQ09OVCBmbGFnIGlmIHRoZSBidWZmZXIgaXMgbm90IHlldCBtYXJrZWQgYXMgc3VjaCAqLworICAgICAgaWYgKHRyYW5zLT5wcml2LT5kaXNjb250KSB7CisgICAgICAgIGlmICghR1NUX0JVRkZFUl9JU19ESVNDT05UIChvdXRidWYpKSB7CisgICAgICAgICAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChvdXRidWYpOworICAgICAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKG91dGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpOworICAgICAgICB9CisgICAgICAgIHRyYW5zLT5wcml2LT5kaXNjb250ID0gRkFMU0U7CisgICAgICB9CisgICAgICB0cmFucy0+cHJpdi0+cHJvY2Vzc2VkKys7CisKKyAgICAgIHJldCA9IGdzdF9wYWRfcHVzaCAodHJhbnMtPnNyY3BhZCwgb3V0YnVmKTsKKyAgICB9IGVsc2UgeworICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0YnVmKTsKKyAgICB9CisgIH0KKworICAvKiBjb252ZXJ0IGludGVybmFsIGZsb3cgdG8gT0sgYW5kIG1hcmsgZGlzY29udCBmb3IgdGhlIG5leHQgYnVmZmVyLiAqLworICBpZiAocmV0ID09IEdTVF9CQVNFX1RSQU5TRk9STV9GTE9XX0RST1BQRUQpIHsKKyAgICB0cmFucy0+cHJpdi0+ZGlzY29udCA9IFRSVUU7CisgICAgcmV0ID0gR1NUX0ZMT1dfT0s7CisgIH0KKworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAorZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQoreworICBHc3RCYXNlVHJhbnNmb3JtICp0cmFuczsKKworICB0cmFucyA9IEdTVF9CQVNFX1RSQU5TRk9STSAob2JqZWN0KTsKKworICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfUU9TOgorICAgICAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9xb3NfZW5hYmxlZCAodHJhbnMsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKSk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zOworCisgIHRyYW5zID0gR1NUX0JBU0VfVFJBTlNGT1JNIChvYmplY3QpOworCisgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9RT1M6CisgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Fvc19lbmFibGVkICh0cmFucykpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICBicmVhazsKKyAgfQorfQorCisvKiBub3QgYSB2bWV0aG9kIG9mIGFueXRoaW5nLCBqdXN0IGFuIGludGVybmFsIG1ldGhvZCAqLworc3RhdGljIGdib29sZWFuCitnc3RfYmFzZV90cmFuc2Zvcm1fYWN0aXZhdGUgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgZ2Jvb2xlYW4gYWN0aXZlKQoreworICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKmJjbGFzczsKKyAgZ2Jvb2xlYW4gcmVzdWx0ID0gVFJVRTsKKworICBiY2xhc3MgPSBHU1RfQkFTRV9UUkFOU0ZPUk1fR0VUX0NMQVNTICh0cmFucyk7CisKKyAgaWYgKGFjdGl2ZSkgeworICAgIEdzdENhcHMgKmluY2FwcywgKm91dGNhcHM7CisKKyAgICBpZiAodHJhbnMtPnByaXYtPnBhZF9tb2RlID09IEdTVF9BQ1RJVkFURV9OT05FICYmIGJjbGFzcy0+c3RhcnQpCisgICAgICByZXN1bHQgJj0gYmNsYXNzLT5zdGFydCAodHJhbnMpOworCisgICAgaW5jYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzICh0cmFucy0+c2lua3BhZCk7CisgICAgb3V0Y2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAodHJhbnMtPnNyY3BhZCk7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sgKHRyYW5zKTsKKyAgICBpZiAoaW5jYXBzICYmIG91dGNhcHMpCisgICAgICB0cmFucy0+aGF2ZV9zYW1lX2NhcHMgPQorICAgICAgICAgIGdzdF9jYXBzX2lzX2VxdWFsIChpbmNhcHMsIG91dGNhcHMpIHx8IHRyYW5zLT5wYXNzdGhyb3VnaDsKKyAgICBlbHNlCisgICAgICB0cmFucy0+aGF2ZV9zYW1lX2NhcHMgPSB0cmFucy0+cGFzc3Rocm91Z2g7CisgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJoYXZlX3NhbWVfY2FwcyAlZCIsIHRyYW5zLT5oYXZlX3NhbWVfY2Fwcyk7CisgICAgdHJhbnMtPm5lZ290aWF0ZWQgPSBGQUxTRTsKKyAgICB0cmFucy0+aGF2ZV9zZWdtZW50ID0gRkFMU0U7CisgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnRyYW5zLT5zZWdtZW50LCBHU1RfRk9STUFUX1VOREVGSU5FRCk7CisgICAgdHJhbnMtPnByaXYtPnBvc2l0aW9uX291dCA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgICAgdHJhbnMtPnByaXYtPnByb3BvcnRpb24gPSAxLjA7CisgICAgdHJhbnMtPnByaXYtPmVhcmxpZXN0X3RpbWUgPSAtMTsKKyAgICB0cmFucy0+cHJpdi0+ZGlzY29udCA9IEZBTFNFOworICAgIHRyYW5zLT5wcml2LT5wcm9jZXNzZWQgPSAwOworICAgIHRyYW5zLT5wcml2LT5kcm9wcGVkID0gMDsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAodHJhbnMpOworCisgICAgaWYgKGluY2FwcykKKyAgICAgIGdzdF9jYXBzX3VucmVmIChpbmNhcHMpOworICAgIGlmIChvdXRjYXBzKQorICAgICAgZ3N0X2NhcHNfdW5yZWYgKG91dGNhcHMpOworICB9IGVsc2UgeworICAgIC8qIFdlIG11c3QgbWFrZSBzdXJlIHN0cmVhbWluZyBoYXMgZmluaXNoZWQgYmVmb3JlIHJlc2V0dGluZyB0aGluZ3MKKyAgICAgKiBhbmQgY2FsbGluZyB0aGUgOjpzdG9wIHZmdW5jICovCisgICAgR1NUX1BBRF9TVFJFQU1fTE9DSyAodHJhbnMtPnNpbmtwYWQpOworICAgIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAodHJhbnMtPnNpbmtwYWQpOworCisgICAgdHJhbnMtPmhhdmVfc2FtZV9jYXBzID0gRkFMU0U7CisgICAgLyogV2UgY2FuIG9ubHkgcmVzZXQgdGhlIHBhc3N0aHJvdWdoIG1vZGUgaWYgdGhlIGluc3RhbmNlIHRvbGQgdXMgdG8gCisgICAgICAgaGFuZGxlIGl0IGluIGNvbmZpZ3VyZV9jYXBzICovCisgICAgaWYgKGJjbGFzcy0+cGFzc3Rocm91Z2hfb25fc2FtZV9jYXBzKSB7CisgICAgICBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Bhc3N0aHJvdWdoICh0cmFucywgRkFMU0UpOworICAgIH0KKyAgICBnc3RfY2Fwc19yZXBsYWNlICgmdHJhbnMtPmNhY2hlX2NhcHMxLCBOVUxMKTsKKyAgICBnc3RfY2Fwc19yZXBsYWNlICgmdHJhbnMtPmNhY2hlX2NhcHMyLCBOVUxMKTsKKworICAgIGlmICh0cmFucy0+cHJpdi0+cGFkX21vZGUgIT0gR1NUX0FDVElWQVRFX05PTkUgJiYgYmNsYXNzLT5zdG9wKQorICAgICAgcmVzdWx0ICY9IGJjbGFzcy0+c3RvcCAodHJhbnMpOworCisgICAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9hbGxvY2F0aW9uICh0cmFucywgTlVMTCwgTlVMTCwgMCwgMCk7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9iYXNlX3RyYW5zZm9ybV9zaW5rX2FjdGl2YXRlX3B1c2ggKEdzdFBhZCAqIHBhZCwgZ2Jvb2xlYW4gYWN0aXZlKQoreworICBnYm9vbGVhbiByZXN1bHQgPSBUUlVFOworICBHc3RCYXNlVHJhbnNmb3JtICp0cmFuczsKKworICB0cmFucyA9IEdTVF9CQVNFX1RSQU5TRk9STSAoZ3N0X3BhZF9nZXRfcGFyZW50IChwYWQpKTsKKworICByZXN1bHQgPSBnc3RfYmFzZV90cmFuc2Zvcm1fYWN0aXZhdGUgKHRyYW5zLCBhY3RpdmUpOworCisgIGlmIChyZXN1bHQpCisgICAgdHJhbnMtPnByaXYtPnBhZF9tb2RlID0gYWN0aXZlID8gR1NUX0FDVElWQVRFX1BVU0ggOiBHU1RfQUNUSVZBVEVfTk9ORTsKKworICBnc3Rfb2JqZWN0X3VucmVmICh0cmFucyk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfYmFzZV90cmFuc2Zvcm1fc3JjX2FjdGl2YXRlX3B1bGwgKEdzdFBhZCAqIHBhZCwgZ2Jvb2xlYW4gYWN0aXZlKQoreworICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKKyAgR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnM7CisKKyAgdHJhbnMgPSBHU1RfQkFTRV9UUkFOU0ZPUk0gKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7CisKKyAgcmVzdWx0ID0gZ3N0X3BhZF9hY3RpdmF0ZV9wdWxsICh0cmFucy0+c2lua3BhZCwgYWN0aXZlKTsKKworICBpZiAocmVzdWx0KQorICAgIHJlc3VsdCAmPSBnc3RfYmFzZV90cmFuc2Zvcm1fYWN0aXZhdGUgKHRyYW5zLCBhY3RpdmUpOworCisgIGlmIChyZXN1bHQpCisgICAgdHJhbnMtPnByaXYtPnBhZF9tb2RlID0gYWN0aXZlID8gR1NUX0FDVElWQVRFX1BVTEwgOiBHU1RfQUNUSVZBVEVfTk9ORTsKKworICBnc3Rfb2JqZWN0X3VucmVmICh0cmFucyk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Bhc3N0aHJvdWdoOgorICogQHRyYW5zOiB0aGUgI0dzdEJhc2VUcmFuc2Zvcm0gdG8gc2V0CisgKiBAcGFzc3Rocm91Z2g6IGJvb2xlYW4gaW5kaWNhdGluZyBwYXNzdGhyb3VnaCBtb2RlLgorICoKKyAqIFNldCBwYXNzdGhyb3VnaCBtb2RlIGZvciB0aGlzIGZpbHRlciBieSBkZWZhdWx0LiBUaGlzIGlzIG1vc3RseQorICogdXNlZnVsIGZvciBmaWx0ZXJzIHRoYXQgZG8gbm90IGNhcmUgYWJvdXQgbmVnb3RpYXRpb24uCisgKgorICogQWx3YXlzIFRSVUUgZm9yIGZpbHRlcnMgd2hpY2ggZG9uJ3QgaW1wbGVtZW50IGVpdGhlciBhIHRyYW5zZm9ybQorICogb3IgdHJhbnNmb3JtX2lwIG1ldGhvZC4KKyAqCisgKiBNVCBzYWZlLgorICovCit2b2lkCitnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Bhc3N0aHJvdWdoIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCisgICAgZ2Jvb2xlYW4gcGFzc3Rocm91Z2gpCit7CisgIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqYmNsYXNzOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19CQVNFX1RSQU5TRk9STSAodHJhbnMpKTsKKworICBiY2xhc3MgPSBHU1RfQkFTRV9UUkFOU0ZPUk1fR0VUX0NMQVNTICh0cmFucyk7CisKKyAgR1NUX09CSkVDVF9MT0NLICh0cmFucyk7CisgIGlmIChwYXNzdGhyb3VnaCA9PSBGQUxTRSkgeworICAgIGlmIChiY2xhc3MtPnRyYW5zZm9ybV9pcCB8fCBiY2xhc3MtPnRyYW5zZm9ybSkKKyAgICAgIHRyYW5zLT5wYXNzdGhyb3VnaCA9IEZBTFNFOworICB9IGVsc2UgeworICAgIHRyYW5zLT5wYXNzdGhyb3VnaCA9IFRSVUU7CisgIH0KKworICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgInNldCBwYXNzdGhyb3VnaCAlZCIsIHRyYW5zLT5wYXNzdGhyb3VnaCk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLICh0cmFucyk7Cit9CisKKy8qKgorICogZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Bhc3N0aHJvdWdoOgorICogQHRyYW5zOiB0aGUgI0dzdEJhc2VUcmFuc2Zvcm0gdG8gcXVlcnkKKyAqCisgKiBTZWUgaWYgQHRyYW5zIGlzIGNvbmZpZ3VyZWQgYXMgYSBwYXNzdGhyb3VnaCB0cmFuc2Zvcm0uCisgKgorICogUmV0dXJuczogVFJVRSBpcyB0aGUgdHJhbnNmb3JtIGlzIGNvbmZpZ3VyZWQgaW4gcGFzc3Rocm91Z2ggbW9kZS4KKyAqCisgKiBNVCBzYWZlLgorICovCitnYm9vbGVhbgorZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Bhc3N0aHJvdWdoIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpCit7CisgIGdib29sZWFuIHJlc3VsdDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JBU0VfVFJBTlNGT1JNICh0cmFucyksIEZBTFNFKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHRyYW5zKTsKKyAgcmVzdWx0ID0gdHJhbnMtPnBhc3N0aHJvdWdoOworICBHU1RfT0JKRUNUX1VOTE9DSyAodHJhbnMpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9pbl9wbGFjZToKKyAqIEB0cmFuczogdGhlICNHc3RCYXNlVHJhbnNmb3JtIHRvIG1vZGlmeQorICogQGluX3BsYWNlOiBCb29sZWFuIHZhbHVlIGluZGljYXRpbmcgdGhhdCB3ZSB3b3VsZCBsaWtlIHRvIG9wZXJhdGUKKyAqIG9uIGluX3BsYWNlIGJ1ZmZlcnMuCisgKgorICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgbm9uLXdyaXRhYmxlIGJ1ZmZlciB3aWxsIGJlIGNvcGllZCBiZWZvcmUgcGFzc2luZworICogdG8gdGhlIHRyYW5zZm9ybV9pcCBmdW5jdGlvbi4KKyAqIDxpdGVtaXplZGxpc3Q+CisgKiAgIDxsaXN0aXRlbT5BbHdheXMgVFJVRSBpZiBubyB0cmFuc2Zvcm0gZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQuPC9saXN0aXRlbT4KKyAqICAgPGxpc3RpdGVtPkFsd2F5cyBGQUxTRSBpZiBPTkxZIHRyYW5zZm9ybSBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZC48L2xpc3RpdGVtPgorICogPC9pdGVtaXplZGxpc3Q+CisgKgorICogTVQgc2FmZS4KKyAqLwordm9pZAorZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9pbl9wbGFjZSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBnYm9vbGVhbiBpbl9wbGFjZSkKK3sKKyAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzICpiY2xhc3M7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JBU0VfVFJBTlNGT1JNICh0cmFucykpOworCisgIGJjbGFzcyA9IEdTVF9CQVNFX1RSQU5TRk9STV9HRVRfQ0xBU1MgKHRyYW5zKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHRyYW5zKTsKKworICBpZiAoaW5fcGxhY2UpIHsKKyAgICBpZiAoYmNsYXNzLT50cmFuc2Zvcm1faXApIHsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAic2V0dGluZyBpbl9wbGFjZSBUUlVFIik7CisgICAgICB0cmFucy0+YWx3YXlzX2luX3BsYWNlID0gVFJVRTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgaWYgKGJjbGFzcy0+dHJhbnNmb3JtKSB7CisgICAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgInNldHRpbmcgaW5fcGxhY2UgRkFMU0UiKTsKKyAgICAgIHRyYW5zLT5hbHdheXNfaW5fcGxhY2UgPSBGQUxTRTsKKyAgICB9CisgIH0KKworICBHU1RfT0JKRUNUX1VOTE9DSyAodHJhbnMpOworfQorCisvKioKKyAqIGdzdF9iYXNlX3RyYW5zZm9ybV9pc19pbl9wbGFjZToKKyAqIEB0cmFuczogdGhlICNHc3RCYXNlVHJhbnNmb3JtIHRvIHF1ZXJ5CisgKgorICogU2VlIGlmIEB0cmFucyBpcyBjb25maWd1cmVkIGFzIGEgaW5fcGxhY2UgdHJhbnNmb3JtLgorICoKKyAqIFJldHVybnM6IFRSVUUgaXMgdGhlIHRyYW5zZm9ybSBpcyBjb25maWd1cmVkIGluIGluX3BsYWNlIG1vZGUuCisgKgorICogTVQgc2FmZS4KKyAqLworZ2Jvb2xlYW4KK2dzdF9iYXNlX3RyYW5zZm9ybV9pc19pbl9wbGFjZSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zKQoreworICBnYm9vbGVhbiByZXN1bHQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CQVNFX1RSQU5TRk9STSAodHJhbnMpLCBGQUxTRSk7CisKKyAgR1NUX09CSkVDVF9MT0NLICh0cmFucyk7CisgIHJlc3VsdCA9IHRyYW5zLT5hbHdheXNfaW5fcGxhY2U7CisgIEdTVF9PQkpFQ1RfVU5MT0NLICh0cmFucyk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBnc3RfYmFzZV90cmFuc2Zvcm1fdXBkYXRlX3FvczoKKyAqIEB0cmFuczogYSAjR3N0QmFzZVRyYW5zZm9ybQorICogQHByb3BvcnRpb246IHRoZSBwcm9wb3J0aW9uCisgKiBAZGlmZjogdGhlIGRpZmYgYWdhaW5zdCB0aGUgY2xvY2sKKyAqIEB0aW1lc3RhbXA6IHRoZSB0aW1lc3RhbXAgb2YgdGhlIGJ1ZmZlciBnZW5lcmF0aW5nIHRoZSBRb1MgZXhwcmVzc2VkIGluCisgKiBydW5uaW5nX3RpbWUuCisgKgorICogU2V0IHRoZSBRb1MgcGFyYW1ldGVycyBpbiB0aGUgdHJhbnNmb3JtLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbnRlcm5hbGx5CisgKiB3aGVuIGEgUU9TIGV2ZW50IGlzIHJlY2VpdmVkIGJ1dCBzdWJjbGFzc2VzIGNhbiBwcm92aWRlIGN1c3RvbSBpbmZvcm1hdGlvbgorICogd2hlbiBuZWVkZWQuCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBTaW5jZTogMC4xMC41CisgKi8KK3ZvaWQKK2dzdF9iYXNlX3RyYW5zZm9ybV91cGRhdGVfcW9zIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCisgICAgZ2RvdWJsZSBwcm9wb3J0aW9uLCBHc3RDbG9ja1RpbWVEaWZmIGRpZmYsIEdzdENsb2NrVGltZSB0aW1lc3RhbXApCit7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JBU0VfVFJBTlNGT1JNICh0cmFucykpOworCisgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1FPUywgdHJhbnMsCisgICAgICAicW9zOiBwcm9wb3J0aW9uOiAlbGYsIGRpZmYgJSIgR19HSU5UNjRfRk9STUFUICIsIHRpbWVzdGFtcCAlIgorICAgICAgR1NUX1RJTUVfRk9STUFULCBwcm9wb3J0aW9uLCBkaWZmLCBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXApKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHRyYW5zKTsKKyAgdHJhbnMtPnByaXYtPnByb3BvcnRpb24gPSBwcm9wb3J0aW9uOworICB0cmFucy0+cHJpdi0+ZWFybGllc3RfdGltZSA9IHRpbWVzdGFtcCArIGRpZmY7CisgIEdTVF9PQkpFQ1RfVU5MT0NLICh0cmFucyk7Cit9CisKKy8qKgorICogZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9xb3NfZW5hYmxlZDoKKyAqIEB0cmFuczogYSAjR3N0QmFzZVRyYW5zZm9ybQorICogQGVuYWJsZWQ6IG5ldyBzdGF0ZQorICoKKyAqIEVuYWJsZSBvciBkaXNhYmxlIFFvUyBoYW5kbGluZyBpbiB0aGUgdHJhbnNmb3JtLgorICoKKyAqIE1UIHNhZmUuCisgKgorICogU2luY2U6IDAuMTAuNQorICovCit2b2lkCitnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Fvc19lbmFibGVkIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIGdib29sZWFuIGVuYWJsZWQpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19CQVNFX1RSQU5TRk9STSAodHJhbnMpKTsKKworICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9RT1MsIHRyYW5zLCAiZW5hYmxlZDogJWQiLCBlbmFibGVkKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHRyYW5zKTsKKyAgdHJhbnMtPnByaXYtPnFvc19lbmFibGVkID0gZW5hYmxlZDsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHRyYW5zKTsKK30KKworLyoqCisgKiBnc3RfYmFzZV90cmFuc2Zvcm1faXNfcW9zX2VuYWJsZWQ6CisgKiBAdHJhbnM6IGEgI0dzdEJhc2VUcmFuc2Zvcm0KKyAqCisgKiBRdWVyaWVzIGlmIHRoZSB0cmFuc2Zvcm0gd2lsbCBoYW5kbGUgUW9TLgorICoKKyAqIFJldHVybnM6IFRSVUUgaWYgUW9TIGlzIGVuYWJsZWQuCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBTaW5jZTogMC4xMC41CisgKi8KK2dib29sZWFuCitnc3RfYmFzZV90cmFuc2Zvcm1faXNfcW9zX2VuYWJsZWQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucykKK3sKKyAgZ2Jvb2xlYW4gcmVzdWx0OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQkFTRV9UUkFOU0ZPUk0gKHRyYW5zKSwgRkFMU0UpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAodHJhbnMpOworICByZXN1bHQgPSB0cmFucy0+cHJpdi0+cW9zX2VuYWJsZWQ7CisgIEdTVF9PQkpFQ1RfVU5MT0NLICh0cmFucyk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2dhcF9hd2FyZToKKyAqIEB0cmFuczogYSAjR3N0QmFzZVRyYW5zZm9ybQorICogQGdhcF9hd2FyZTogTmV3IHN0YXRlCisgKgorICogSWYgQGdhcF9hd2FyZSBpcyAlRkFMU0UgKHRoZSBkZWZhdWx0KSwgb3V0cHV0IGJ1ZmZlcnMgd2lsbCBoYXZlIHRoZQorICogJUdTVF9CVUZGRVJfRkxBR19HQVAgZmxhZyB1bnNldC4KKyAqCisgKiBJZiBzZXQgdG8gJVRSVUUsIHRoZSBlbGVtZW50IG11c3QgaGFuZGxlIG91dHB1dCBidWZmZXJzIHdpdGggdGhpcyBmbGFnIHNldAorICogY29ycmVjdGx5LCBpLmUuIGl0IGNhbiBhc3N1bWUgdGhhdCB0aGUgYnVmZmVyIGNvbnRhaW5zIG5ldXRyYWwgZGF0YSBidXQgbXVzdAorICogdW5zZXQgdGhlIGZsYWcgaWYgdGhlIG91dHB1dCBpcyBubyBuZXV0cmFsIGRhdGEuCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBTaW5jZTogMC4xMC4xNgorICovCit2b2lkCitnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2dhcF9hd2FyZSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBnYm9vbGVhbiBnYXBfYXdhcmUpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19CQVNFX1RSQU5TRk9STSAodHJhbnMpKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHRyYW5zKTsKKyAgdHJhbnMtPnByaXYtPmdhcF9hd2FyZSA9IGdhcF9hd2FyZTsKKyAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJzZXQgZ2FwIGF3YXJlICVkIiwgdHJhbnMtPnByaXYtPmdhcF9hd2FyZSk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLICh0cmFucyk7Cit9CisKKy8qKgorICogZ3N0X2Jhc2VfdHJhbnNmb3JtX3N1Z2dlc3Q6CisgKiBAdHJhbnM6IGEgI0dzdEJhc2VUcmFuc2Zvcm0KKyAqIEBjYXBzOiAodHJhbnNmZXIgbm9uZSk6IGNhcHMgdG8gc3VnZ2VzdAorICogQHNpemU6IGJ1ZmZlciBzaXplIHRvIHN1Z2dlc3QKKyAqCisgKiBJbnN0cnVjdHMgQHRyYW5zIHRvIHN1Z2dlc3QgbmV3IEBjYXBzIHVwc3RyZWFtLiBBIGNvcHkgb2YgQGNhcHMgd2lsbCBiZQorICogdGFrZW4uCisgKgorICogU2luY2U6IDAuMTAuMjEKKyAqLwordm9pZAorZ3N0X2Jhc2VfdHJhbnNmb3JtX3N1Z2dlc3QgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0Q2FwcyAqIGNhcHMsCisgICAgZ3NpemUgc2l6ZSkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JBU0VfVFJBTlNGT1JNICh0cmFucykpOworCisgIC8qIHB1c2ggdGhlIHJlbmVnb3RpYXRlIGV2ZW50ICovCisgIGlmICghZ3N0X3BhZF9wdXNoX2V2ZW50IChHU1RfQkFTRV9UUkFOU0ZPUk1fU0lOS19QQUQgKHRyYW5zKSwKKyAgICAgICAgICBnc3RfZXZlbnRfbmV3X3JlY29uZmlndXJlICgpKSkKKyAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgIlJlbmVnb3RpYXRlIGV2ZW50IHdhc24ndCBoYW5kbGVkIik7Cit9CisKKy8qKgorICogZ3N0X2Jhc2VfdHJhbnNmb3JtX3JlY29uZmlndXJlOgorICogQHRyYW5zOiBhICNHc3RCYXNlVHJhbnNmb3JtCisgKgorICogSW5zdHJ1Y3RzIEB0cmFucyB0byByZW5lZ290aWF0ZSBhIG5ldyBkb3duc3RyZWFtIHRyYW5zZm9ybSBvbiB0aGUgbmV4dAorICogYnVmZmVyLiBUaGlzIGZ1bmN0aW9uIGlzIHR5cGljYWxseSBjYWxsZWQgYWZ0ZXIgcHJvcGVydGllcyBvbiB0aGUgdHJhbnNmb3JtCisgKiB3ZXJlIHNldCB0aGF0IGluZmx1ZW5jZSB0aGUgb3V0cHV0IGZvcm1hdC4KKyAqCisgKiBTaW5jZTogMC4xMC4yMQorICovCit2b2lkCitnc3RfYmFzZV90cmFuc2Zvcm1fcmVjb25maWd1cmUgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucykKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JBU0VfVFJBTlNGT1JNICh0cmFucykpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAodHJhbnMpOworICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgIm1hcmtpbmcgcmVjb25maWd1cmUiKTsKKyAgdHJhbnMtPnByaXYtPnJlY29uZmlndXJlID0gVFJVRTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHRyYW5zKTsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oIGIvbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZlZWQ3YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oCkBAIC0wLDAgKzEsMzAyIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19HU1RfQkFTRV9UUkFOU0ZPUk1fSF9fCisjZGVmaW5lIF9fR1NUX0JBU0VfVFJBTlNGT1JNX0hfXworCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgR1NUX1RZUEVfQkFTRV9UUkFOU0ZPUk0JCSAgIChnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgR1NUX0JBU0VfVFJBTlNGT1JNKG9iaikJCSAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9CQVNFX1RSQU5TRk9STSxHc3RCYXNlVHJhbnNmb3JtKSkKKyNkZWZpbmUgR1NUX0JBU0VfVFJBTlNGT1JNX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9CQVNFX1RSQU5TRk9STSxHc3RCYXNlVHJhbnNmb3JtQ2xhc3MpKQorI2RlZmluZSBHU1RfQkFTRV9UUkFOU0ZPUk1fR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLEdTVF9UWVBFX0JBU0VfVFJBTlNGT1JNLEdzdEJhc2VUcmFuc2Zvcm1DbGFzcykpCisjZGVmaW5lIEdTVF9JU19CQVNFX1RSQU5TRk9STShvYmopCSAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9CQVNFX1RSQU5TRk9STSkpCisjZGVmaW5lIEdTVF9JU19CQVNFX1RSQU5TRk9STV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfQkFTRV9UUkFOU0ZPUk0pKQorLyogc2luY2UgMC4xMC40ICovCisjZGVmaW5lIEdTVF9CQVNFX1RSQU5TRk9STV9DQVNUKG9iaikJKChHc3RCYXNlVHJhbnNmb3JtICopKG9iaikpCisKKy8qKgorICogR1NUX0JBU0VfVFJBTlNGT1JNX1NJTktfTkFNRToKKyAqCisgKiBUaGUgbmFtZSBvZiB0aGUgdGVtcGxhdGVzIGZvciB0aGUgc2luayBwYWQuCisgKi8KKyNkZWZpbmUgR1NUX0JBU0VfVFJBTlNGT1JNX1NJTktfTkFNRQkic2luayIKKy8qKgorICogR1NUX0JBU0VfVFJBTlNGT1JNX1NSQ19OQU1FOgorICoKKyAqIFRoZSBuYW1lIG9mIHRoZSB0ZW1wbGF0ZXMgZm9yIHRoZSBzb3VyY2UgcGFkLgorICovCisjZGVmaW5lIEdTVF9CQVNFX1RSQU5TRk9STV9TUkNfTkFNRQkic3JjIgorCisvKioKKyAqIEdTVF9CQVNFX1RSQU5TRk9STV9TUkNfUEFEOgorICogQG9iajogYmFzZSB0cmFuc2Zvcm0gaW5zdGFuY2UKKyAqCisgKiBHaXZlcyB0aGUgcG9pbnRlciB0byB0aGUgc291cmNlICNHc3RQYWQgb2JqZWN0IG9mIHRoZSBlbGVtZW50LgorICoKKyAqIFNpbmNlOiAwLjEwLjQKKyAqLworI2RlZmluZSBHU1RfQkFTRV9UUkFOU0ZPUk1fU1JDX1BBRChvYmopCQkoR1NUX0JBU0VfVFJBTlNGT1JNX0NBU1QgKG9iaiktPnNyY3BhZCkKKworLyoqCisgKiBHU1RfQkFTRV9UUkFOU0ZPUk1fU0lOS19QQUQ6CisgKiBAb2JqOiBiYXNlIHRyYW5zZm9ybSBpbnN0YW5jZQorICoKKyAqIEdpdmVzIHRoZSBwb2ludGVyIHRvIHRoZSBzaW5rICNHc3RQYWQgb2JqZWN0IG9mIHRoZSBlbGVtZW50LgorICoKKyAqIFNpbmNlOiAwLjEwLjQKKyAqLworI2RlZmluZSBHU1RfQkFTRV9UUkFOU0ZPUk1fU0lOS19QQUQob2JqKQkoR1NUX0JBU0VfVFJBTlNGT1JNX0NBU1QgKG9iaiktPnNpbmtwYWQpCisKKy8qKgorICogR1NUX0JBU0VfVFJBTlNGT1JNX0ZMT1dfRFJPUFBFRDoKKyAqCisgKiBBICNHc3RGbG93UmV0dXJuIHRoYXQgY2FuIGJlIHJldHVybmVkIGZyb20gdHJhbnNmb3JtIGFuZCB0cmFuc2Zvcm1faXAgdG8KKyAqIGluZGljYXRlIHRoYXQgbm8gb3V0cHV0IGJ1ZmZlciB3YXMgZ2VuZXJhdGVkLgorICoKKyAqIFNpbmNlOiAwLjEwLjEzCisgKi8KKyNkZWZpbmUgR1NUX0JBU0VfVFJBTlNGT1JNX0ZMT1dfRFJPUFBFRCAgIEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTCisKKy8qKgorICogR1NUX0JBU0VfVFJBTlNGT1JNX0xPQ0s6CisgKiBAb2JqOiBiYXNlIHRyYW5zZm9ybSBpbnN0YW5jZQorICoKKyAqIE9idGFpbiBhIGxvY2sgdG8gcHJvdGVjdCB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uIGZyb20gY29uY3VycmVudCBhY2Nlc3MuCisgKgorICogU2luY2U6IDAuMTAuMTMKKyAqLworI2RlZmluZSBHU1RfQkFTRV9UUkFOU0ZPUk1fTE9DSyhvYmopICAgZ19tdXRleF9sb2NrIChHU1RfQkFTRV9UUkFOU0ZPUk1fQ0FTVCAob2JqKS0+dHJhbnNmb3JtX2xvY2spCisKKy8qKgorICogR1NUX0JBU0VfVFJBTlNGT1JNX1VOTE9DSzoKKyAqIEBvYmo6IGJhc2UgdHJhbnNmb3JtIGluc3RhbmNlCisgKgorICogUmVsZWFzZSB0aGUgbG9jayB0aGF0IHByb3RlY3RzIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gZnJvbSBjb25jdXJyZW50IGFjY2Vzcy4KKyAqCisgKiBTaW5jZTogMC4xMC4xMworICovCisjZGVmaW5lIEdTVF9CQVNFX1RSQU5TRk9STV9VTkxPQ0sob2JqKSBnX211dGV4X3VubG9jayAoR1NUX0JBU0VfVFJBTlNGT1JNX0NBU1QgKG9iaiktPnRyYW5zZm9ybV9sb2NrKQorCit0eXBlZGVmIHN0cnVjdCBfR3N0QmFzZVRyYW5zZm9ybSBHc3RCYXNlVHJhbnNmb3JtOwordHlwZWRlZiBzdHJ1Y3QgX0dzdEJhc2VUcmFuc2Zvcm1DbGFzcyBHc3RCYXNlVHJhbnNmb3JtQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfR3N0QmFzZVRyYW5zZm9ybVByaXZhdGUgR3N0QmFzZVRyYW5zZm9ybVByaXZhdGU7CisKKy8qKgorICogR3N0QmFzZVRyYW5zZm9ybToKKyAqCisgKiBUaGUgb3BhcXVlICNHc3RCYXNlVHJhbnNmb3JtIGRhdGEgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgX0dzdEJhc2VUcmFuc2Zvcm0geworICBHc3RFbGVtZW50CSBlbGVtZW50OworCisgIC8qPCBwcm90ZWN0ZWQgPiovCisgIC8qIHNvdXJjZSBhbmQgc2luayBwYWRzICovCisgIEdzdFBhZAkqc2lua3BhZDsKKyAgR3N0UGFkCSpzcmNwYWQ7CisKKyAgLyogU2V0IGJ5IHN1Yi1jbGFzcyAqLworICBnYm9vbGVhbgkgcGFzc3Rocm91Z2g7CisgIGdib29sZWFuCSBhbHdheXNfaW5fcGxhY2U7CisKKyAgR3N0Q2FwcwkqY2FjaGVfY2FwczE7CisgIGdzaXplCQkgY2FjaGVfY2FwczFfc2l6ZTsKKyAgR3N0Q2FwcwkqY2FjaGVfY2FwczI7CisgIGdzaXplCQkgY2FjaGVfY2FwczJfc2l6ZTsKKyAgZ2Jvb2xlYW4JIGhhdmVfc2FtZV9jYXBzOworCisgIGdib29sZWFuCSBuZWdvdGlhdGVkOworCisgIGdib29sZWFuICAgICAgIGhhdmVfc2VnbWVudDsKKworICAvKiBNVC1wcm90ZWN0ZWQgKHdpdGggU1RSRUFNX0xPQ0spICovCisgIEdzdFNlZ21lbnQgICAgIHNlZ21lbnQ7CisKKyAgR011dGV4CSp0cmFuc2Zvcm1fbG9jazsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgR3N0QmFzZVRyYW5zZm9ybVByaXZhdGUgKnByaXY7CisKKyAgZ3BvaW50ZXIgICAgICAgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR19MQVJHRV07Cit9OworCisvKioKKyAqIEdzdEJhc2VUcmFuc2Zvcm1DbGFzczoKKyAqIEBwYXJlbnRfY2xhc3M6ICAgRWxlbWVudCBwYXJlbnQgY2xhc3MKKyAqIEBwYXNzdGhyb3VnaF9vbl9zYW1lX2NhcHM6IElmIHNldCB0byBUUlVFLCBwYXNzdGhyb3VnaCBtb2RlIHdpbGwgYmUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBpZiB0aGUgY2FwcyBhcmUgdGhlIHNhbWUuCisgKiBAdHJhbnNmb3JtX2NhcHM6IE9wdGlvbmFsLiAgR2l2ZW4gdGhlIHBhZCBpbiB0aGlzIGRpcmVjdGlvbiBhbmQgdGhlIGdpdmVuCisgKiAgICAgICAgICAgICAgICAgIGNhcHMsIHdoYXQgY2FwcyBhcmUgYWxsb3dlZCBvbiB0aGUgb3RoZXIgcGFkIGluIHRoaXMKKyAqICAgICAgICAgICAgICAgICAgZWxlbWVudCA/CisgKiBAZml4YXRlX2NhcHM6ICAgIE9wdGlvbmFsLiBHaXZlbiB0aGUgcGFkIGluIHRoaXMgZGlyZWN0aW9uIGFuZCB0aGUgZ2l2ZW4KKyAqICAgICAgICAgICAgICAgICAgY2FwcywgZml4YXRlIHRoZSBjYXBzIG9uIHRoZSBvdGhlciBwYWQuCisgKiBAYWNjZXB0X2NhcHM6ICAgIE9wdGlvbmFsLiBTaW5jZSAwLjEwLjMwCisgKiAgICAgICAgICAgICAgICAgIFN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGNoZWNrIGlmIEBjYXBzIGNhbiBiZQorICogICAgICAgICAgICAgICAgICBoYW5kbGVkIGJ5IHRoZSBlbGVtZW50LiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBtaWdodCBub3QgYmUKKyAqICAgICAgICAgICAgICAgICAgdGhlIG1vc3Qgb3B0aW1hbCB3YXkgdG8gY2hlY2sgdGhpcyBpbiBhbGwgY2FzZXMuCisgKiBAc2V0X2NhcHM6ICAgICAgIGFsbG93cyB0aGUgc3ViY2xhc3MgdG8gYmUgbm90aWZpZWQgb2YgdGhlIGFjdHVhbCBjYXBzIHNldC4KKyAqIEBxdWVyeTogICAgICAgICAgT3B0aW9uYWwgU2luY2UgMC4xMC4zNgorICogICAgICAgICAgICAgICAgICBIYW5kbGUgYSByZXF1ZXN0ZWQgcXVlcnkuIFN1YmNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgdGhpcworICogICAgICAgICAgICAgICAgICBzaG91bGQgbXVzdCBjaGFpbiB1cCB0byB0aGUgcGFyZW50IGlmIHRoZXkgZGlkbid0IGhhbmRsZSB0aGUKKyAqICAgICAgICAgICAgICAgICAgcXVlcnkKKyAqIEBwcm9wb3NlX2FsbG9jYXRpb246IFByb3Bvc2UgYnVmZmVyIGFsbG9jYXRpb24gcGFyYW1ldGVycyBmb3IgdXBzdHJlYW0gZWxlbWVudHMuCisgKiAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIHdoZW4gbm90IG9wZXJhdGluZyBpbgorICogICAgICAgICAgICAgICAgICAgICAgcGFzc3Rocm91Z2ggbW9kZS4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgTlVMTC4KKyAqIEBkZWNpZGVfYWxsb2NhdGlvbjogU2V0dXAgdGhlIGFsbG9jYXRpb24gcGFyYW1ldGVycyBmb3IgYWxsb2NhdGluZyBvdXRwdXQKKyAqICAgICAgICAgICAgICAgICAgICBidWZmZXJzLiBUaGUgcGFzc2VkIGluIHF1ZXJ5IGNvbnRhaW5zIHRoZSByZXN1bHQgb2YgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgZG93bnN0cmVhbSBhbGxvY2F0aW9uIHF1ZXJ5LiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkCisgKiAgICAgICAgICAgICAgICAgICAgd2hlbiBub3Qgb3BlcmF0aW5nIGluIHBhc3N0aHJvdWdoIG1vZGUuIFRoZSBkZWZhdWx0CisgKiAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gaXMgTlVMTC4KKyAqIEB0cmFuc2Zvcm1fc2l6ZTogT3B0aW9uYWwuIEdpdmVuIHRoZSBzaXplIG9mIGEgYnVmZmVyIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24KKyAqICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgZ2l2ZW4gY2FwcywgY2FsY3VsYXRlIHRoZSBzaXplIGluIGJ5dGVzIG9mIGEgYnVmZmVyCisgKiAgICAgICAgICAgICAgICAgIG9uIHRoZSBvdGhlciBwYWQgd2l0aCB0aGUgZ2l2ZW4gb3RoZXIgY2Fwcy4KKyAqICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdXNlcyBnZXRfdW5pdF9zaXplIGFuZCBrZWVwcworICogICAgICAgICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHVuaXRzIHRoZSBzYW1lLgorICogQGdldF91bml0X3NpemU6ICBSZXF1aXJlZCBpZiB0aGUgdHJhbnNmb3JtIGlzIG5vdCBpbi1wbGFjZS4KKyAqICAgICAgICAgICAgICAgICAgZ2V0IHRoZSBzaXplIGluIGJ5dGVzIG9mIG9uZSB1bml0IGZvciB0aGUgZ2l2ZW4gY2Fwcy4KKyAqIEBzdGFydDogICAgICAgICAgT3B0aW9uYWwuCisgKiAgICAgICAgICAgICAgICAgIENhbGxlZCB3aGVuIHRoZSBlbGVtZW50IHN0YXJ0cyBwcm9jZXNzaW5nLgorICogICAgICAgICAgICAgICAgICBBbGxvd3Mgb3BlbmluZyBleHRlcm5hbCByZXNvdXJjZXMuCisgKiBAc3RvcDogICAgICAgICAgIE9wdGlvbmFsLgorICogICAgICAgICAgICAgICAgICBDYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBzdG9wcyBwcm9jZXNzaW5nLgorICogICAgICAgICAgICAgICAgICBBbGxvd3MgY2xvc2luZyBleHRlcm5hbCByZXNvdXJjZXMuCisgKiBAc2lua19ldmVudDogICAgIE9wdGlvbmFsLgorICogICAgICAgICAgICAgICAgICBFdmVudCBoYW5kbGVyIG9uIHRoZSBzaW5rIHBhZC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KKyAqICAgICAgICAgICAgICAgICAgaGFuZGxlcyB0aGUgZXZlbnQgYW5kIGZvcndhcmRzIGl0IGRvd25zdHJlYW0uCisgKiBAc3JjX2V2ZW50OiAgICAgIE9wdGlvbmFsLgorICogICAgICAgICAgICAgICAgICBFdmVudCBoYW5kbGVyIG9uIHRoZSBzb3VyY2UgcGFkLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgorICogICAgICAgICAgICAgICAgICBoYW5kbGVzIHRoZSBldmVudCBhbmQgZm9yd2FyZHMgaXQgdXBzdHJlYW0uCisgKiBAcHJlcGFyZV9vdXRwdXRfYnVmZmVyOiBPcHRpb25hbC4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIFN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHRoaXMgdG8gZG8gdGhlaXIgb3duCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0aW9uIG9mIG91dHB1dCBidWZmZXJzLiAgRWxlbWVudHMgdGhhdCBvbmx5IGRvCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBhbmFseXNpcyBjYW4gcmV0dXJuIGEgc3ViYnVmZmVyIG9yIGV2ZW4ganVzdAorICogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoZSBpbnB1dCBidWZmZXIgKGlmIGluCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzdGhyb3VnaCBtb2RlKS4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2lsbAorICogICAgICAgICAgICAgICAgICAgICAgICAgdXNlIHRoZSBuZWdvdGlhdGVkIGFsbG9jYXRvciBvciBidWZmZXJwb29sIGFuZAorICogICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtX3NpemUgdG8gYWxsb2NhdGUgYW4gb3V0cHV0IGJ1ZmZlciBvciBpdAorICogICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCByZXR1cm4gdGhlIGlucHV0IGJ1ZmZlciBpbiBwYXNzdGhyb3VnaCBtb2RlLgorICogQGNvcHlfbWV0YWRhdGE6IE9wdGlvbmFsLgorICogICAgICAgICAgICAgICAgIENvcHkgdGhlIG1ldGFkYXRhIGZyb20gdGhlIGlucHV0IGJ1ZmZlciB0byB0aGUgb3V0cHV0IGJ1ZmZlci4KKyAqICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aWxsIGNvcHkgdGhlIGZsYWdzLCB0aW1lc3RhbXBzIGFuZAorICogICAgICAgICAgICAgICAgIG9mZnNldHMgb2YgdGhlIGJ1ZmZlci4KKyAqIEBiZWZvcmVfdHJhbnNmb3JtOiBPcHRpb25hbC4gU2luY2UgMC4xMC4yMgorICogICAgICAgICAgICAgICAgICAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCByaWdodCBiZWZvcmUgdGhlIGJhc2UgY2xhc3Mgd2lsbAorICogICAgICAgICAgICAgICAgICAgIHN0YXJ0IHByb2Nlc3NpbmcuIER5bmFtaWMgcHJvcGVydGllcyBvciBvdGhlciBkZWxheWVkCisgKiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBjb3VsZCBiZSBwZXJmb3JtZWQgaW4gdGhpcyBtZXRob2QuCisgKiBAdHJhbnNmb3JtOiAgICAgIFJlcXVpcmVkIGlmIHRoZSBlbGVtZW50IGRvZXMgbm90IG9wZXJhdGUgaW4tcGxhY2UuCisgKiAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMgb25lIGluY29taW5nIGJ1ZmZlciB0byBvbmUgb3V0Z29pbmcgYnVmZmVyLgorICogICAgICAgICAgICAgICAgICBUaGUgZnVuY3Rpb24gaXMgYWxsb3dlZCB0byBjaGFuZ2Ugc2l6ZS90aW1lc3RhbXAvZHVyYXRpb24KKyAqICAgICAgICAgICAgICAgICAgb2YgdGhlIG91dGdvaW5nIGJ1ZmZlci4KKyAqIEB0cmFuc2Zvcm1faXA6ICAgUmVxdWlyZWQgaWYgdGhlIGVsZW1lbnQgb3BlcmF0ZXMgaW4tcGxhY2UuCisgKiAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybSB0aGUgaW5jb21pbmcgYnVmZmVyIGluLXBsYWNlLgorICoKKyAqIFN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIGFueSBvZiB0aGUgYXZhaWxhYmxlIHZpcnR1YWwgbWV0aG9kcyBvciBub3QsIGFzCisgKiBuZWVkZWQuIEF0IG1pbmltdW0gZWl0aGVyIEB0cmFuc2Zvcm0gb3IgQHRyYW5zZm9ybV9pcCBuZWVkIHRvIGJlIG92ZXJyaWRkZW4uCisgKiBJZiB0aGUgZWxlbWVudCBjYW4gb3ZlcndyaXRlIHRoZSBpbnB1dCBkYXRhIHdpdGggdGhlIHJlc3VsdHMgKGRhdGEgaXMgb2YgdGhlCisgKiBzYW1lIHR5cGUgYW5kIHF1YW50aXR5KSBpdCBzaG91bGQgcHJvdmlkZSBAdHJhbnNmb3JtX2lwLgorICovCitzdHJ1Y3QgX0dzdEJhc2VUcmFuc2Zvcm1DbGFzcyB7CisgIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgLyo8IHB1YmxpYyA+Ki8KKyAgZ2Jvb2xlYW4gICAgICAgcGFzc3Rocm91Z2hfb25fc2FtZV9jYXBzOworCisgIC8qIHZpcnR1YWwgbWV0aG9kcyBmb3Igc3ViY2xhc3NlcyAqLworICBHc3RDYXBzKgkoKnRyYW5zZm9ybV9jYXBzKSAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENhcHMgKmNhcHMsIEdzdENhcHMgKmZpbHRlcik7CisgIHZvaWQJCSgqZml4YXRlX2NhcHMpCSAgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBHc3RDYXBzICpjYXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzICpvdGhlcmNhcHMpOworICBnYm9vbGVhbiAgICAgICgqYWNjZXB0X2NhcHMpICAgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2FwcyAqY2Fwcyk7CisgIGdib29sZWFuICAgICAgKCpzZXRfY2FwcykgICAgICAgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zLCBHc3RDYXBzICppbmNhcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENhcHMgKm91dGNhcHMpOworICBnYm9vbGVhbiAgICAgICgqcXVlcnkpICAgICAgICAgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UXVlcnkgKnF1ZXJ5KTsKKworICAvKiBwcm9wb3NlIGFsbG9jYXRpb24gcXVlcnkgcGFyYW1ldGVycyBmb3IgaW5wdXQgYnVmZmVycyAqLworICBnYm9vbGVhbiAgICAgICgqcHJvcG9zZV9hbGxvY2F0aW9uKSAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMsIEdzdFF1ZXJ5ICpxdWVyeSk7CisgIC8qIGRlY2lkZSBhbGxvY2F0aW9uIHF1ZXJ5IGZvciBvdXRwdXQgYnVmZmVycyAqLworICBnYm9vbGVhbiAgICAgICgqZGVjaWRlX2FsbG9jYXRpb24pIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywgR3N0UXVlcnkgKnF1ZXJ5KTsKKworICAvKiB0cmFuc2Zvcm0gc2l6ZSAqLworICBnYm9vbGVhbiAgICAgICgqdHJhbnNmb3JtX3NpemUpIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2FwcyAqY2FwcywgZ3NpemUgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2FwcyAqb3RoZXJjYXBzLCBnc2l6ZSAqb3RoZXJzaXplKTsKKworICBnYm9vbGVhbiAgICAgICgqZ2V0X3VuaXRfc2l6ZSkgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywgR3N0Q2FwcyAqY2FwcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgKnNpemUpOworCisgIC8qIHN0YXRlcyAqLworICBnYm9vbGVhbiAgICAgICgqc3RhcnQpICAgICAgICAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMpOworICBnYm9vbGVhbiAgICAgICgqc3RvcCkgICAgICAgICAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMpOworCisgIC8qIHNpbmsgYW5kIHNyYyBwYWQgZXZlbnQgaGFuZGxlcnMgKi8KKyAgZ2Jvb2xlYW4gICAgICAoKnNpbmtfZXZlbnQpICAgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zLCBHc3RFdmVudCAqZXZlbnQpOworICBnYm9vbGVhbiAgICAgICgqc3JjX2V2ZW50KSAgICAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMsIEdzdEV2ZW50ICpldmVudCk7CisKKyAgR3N0Rmxvd1JldHVybiAoKnByZXBhcmVfb3V0cHV0X2J1ZmZlcikgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEJ1ZmZlciAqaW5wdXQsIEdzdEJ1ZmZlciAqKm91dGJ1Zik7CisKKyAgZ2Jvb2xlYW4gICAgICAoKmNvcHlfbWV0YWRhdGEpICAgICAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBHc3RCdWZmZXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCdWZmZXIgKm91dGJ1Zik7CisKKyAgdm9pZCAgICAgICAgICAoKmJlZm9yZV90cmFuc2Zvcm0pICAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMsIEdzdEJ1ZmZlciAqYnVmZmVyKTsKKworICAvKiB0cmFuc2Zvcm0gKi8KKyAgR3N0Rmxvd1JldHVybiAoKnRyYW5zZm9ybSkgICAgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zLCBHc3RCdWZmZXIgKmluYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyICpvdXRidWYpOworICBHc3RGbG93UmV0dXJuICgqdHJhbnNmb3JtX2lwKSAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMsIEdzdEJ1ZmZlciAqYnVmKTsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgZ3BvaW50ZXIgICAgICAgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR19MQVJHRV07Cit9OworCitHVHlwZSAgICAgICAgICAgZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldF90eXBlICAgICAgICAgKHZvaWQpOworCit2b2lkCQlnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Bhc3N0aHJvdWdoICAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gcGFzc3Rocm91Z2gpOworZ2Jvb2xlYW4JZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Bhc3N0aHJvdWdoICAgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zKTsKKwordm9pZAkJZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9pbl9wbGFjZSAgICAgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuIGluX3BsYWNlKTsKK2dib29sZWFuCWdzdF9iYXNlX3RyYW5zZm9ybV9pc19pbl9wbGFjZSAgICAgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucyk7CisKK3ZvaWQJCWdzdF9iYXNlX3RyYW5zZm9ybV91cGRhdGVfcW9zICAgICAgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywKKwkJCQkJCSAgICAgZ2RvdWJsZSBwcm9wb3J0aW9uLAorCQkJCQkJICAgICBHc3RDbG9ja1RpbWVEaWZmIGRpZmYsCisJCQkJCQkgICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXApOwordm9pZAkJZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9xb3NfZW5hYmxlZCAgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gZW5hYmxlZCk7CitnYm9vbGVhbglnc3RfYmFzZV90cmFuc2Zvcm1faXNfcW9zX2VuYWJsZWQgICAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMpOworCit2b2lkICAgICAgICAgICAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9nYXBfYXdhcmUgICAgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBnYXBfYXdhcmUpOworCit2b2lkCQlnc3RfYmFzZV90cmFuc2Zvcm1fc3VnZ2VzdCAgICAgICAgICAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2FwcyAqY2FwcywgZ3NpemUgc2l6ZSk7Cit2b2lkCQlnc3RfYmFzZV90cmFuc2Zvcm1fcmVjb25maWd1cmUgICAgICAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMpOworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fR1NUX0JBU0VfVFJBTlNGT1JNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvYmFzZS9nc3RiaXRyZWFkZXItZG9jcy5oIGIvbGlicy9nc3QvYmFzZS9nc3RiaXRyZWFkZXItZG9jcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMWEwNGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2dzdC9iYXNlL2dzdGJpdHJlYWRlci1kb2NzLmgKQEAgLTAsMCArMSwxNjEgQEAKKy8qIEdTdHJlYW1lciBiaXQgcmVhZGVyIGR1bW15IGhlYWRlciBmb3IgZ3RrLWRvYworICogQ29weXJpZ2h0IChDKSAyMDEwIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qIFRoaXMgaGVhZGVyIGlzIG5vdCBpbnN0YWxsZWQsIGl0IGp1c3QgY29udGFpbnMgc3R1ZmYgZm9yIGd0ay1kb2MgdG8gcGFyc2UsCisgKiBpbiBwYXJ0aWN1bGFyIGRvY3MgYW5kIHNvbWUgZHVtbXkgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGZvciB0aGUgc3RhdGljCisgKiBpbmxpbmUgZnVuY3Rpb25zIHdlIGdlbmVyYXRlIHZpYSBtYWNyb3MgaW4gZ3N0Yml0cmVhZGVyLmguCisgKi8KKworI2Vycm9yICJUaGlzIGhlYWRlciBzaG91bGQgbmV2ZXIgYmUgaW5jbHVkZWQgaW4gY29kZSwgaXQgaXMgb25seSBmb3IgZ3RrLWRvYyIKKworLyoqCisgKiBnc3RfYml0X3JlYWRlcl9za2lwX3VuY2hlY2tlZDoKKyAqIEByZWFkZXI6IGEgI0dzdEJpdFJlYWRlciBpbnN0YW5jZQorICogQG5iaXRzOiB0aGUgbnVtYmVyIG9mIGJpdHMgdG8gc2tpcAorICoKKyAqIFNraXBzIEBuYml0cyBiaXRzIG9mIHRoZSAjR3N0Qml0UmVhZGVyIGluc3RhbmNlIHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlcmUKKyAqIGFyZSBlbm91Z2ggYml0cyBhdmFpbGFibGUgaW4gdGhlIGJpdCByZWFkZXIuCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLwordm9pZCBnc3RfYml0X3JlYWRlcl9za2lwX3VuY2hlY2tlZCAoR3N0Qml0UmVhZGVyICogcmVhZGVyLCBndWludCBuYml0cyk7CisKKy8qKgorICogZ3N0X2JpdF9yZWFkZXJfc2tpcF90b19ieXRlX3VuY2hlY2tlZDoKKyAqIEByZWFkZXI6IGEgI0dzdEJpdFJlYWRlciBpbnN0YW5jZQorICoKKyAqIFNraXBzIHVudGlsIHRoZSBuZXh0IGJ5dGUgd2l0aG91dCBjaGVja2luZyBpZiB0aGVyZSBhcmUgZW5vdWdoIGJpdHMKKyAqIGF2YWlsYWJsZSBpbiB0aGUgYml0IHJlYWRlci4KKyAqIAorICogU2luY2U6IDAuMTAuMzEKKyAqLwordm9pZCBnc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGVfdW5jaGVja2VkIChHc3RCaXRSZWFkZXIgKiByZWFkZXIpOworCisvKioKKyAqIGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4X3VuY2hlY2tlZDoKKyAqIEByZWFkZXI6IGEgI0dzdEJpdFJlYWRlciBpbnN0YW5jZQorICogQG5iaXRzOiBudW1iZXIgb2YgYml0cyB0byByZWFkCisgKgorICogUmVhZCBAbmJpdHMgYml0cyBpbnRvIEB2YWwgYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbiB3aXRob3V0CisgKiBjaGVja2luZyBpZiB0aGVyZSBhcmUgZW5vdWdoIGJpdHMgYXZhaWxhYmxlIGluIHRoZSBiaXQgcmVhZGVyLgorICoKKyAqIFJldHVybnM6IHVuc2lnbmVkIDggYml0IGludGVnZXIgd2l0aCB0aGUgYml0cy4KKyAqIAorICogU2luY2U6IDAuMTAuMzEKKyAqLworZ3VpbnQ4IGdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50OF91bmNoZWNrZWQgKGNvbnN0IEdzdEJpdFJlYWRlciAqcmVhZGVyLCBndWludCBuYml0cyk7CisKKy8qKgorICogZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ4X3VuY2hlY2tlZDoKKyAqIEByZWFkZXI6IGEgI0dzdEJpdFJlYWRlciBpbnN0YW5jZQorICogQG5iaXRzOiBudW1iZXIgb2YgYml0cyB0byByZWFkCisgKgorICogUmVhZCBAbmJpdHMgYml0cyBpbnRvIEB2YWwgYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24gd2l0aG91dAorICogY2hlY2tpbmcgaWYgdGhlcmUgYXJlIGVub3VnaCBiaXRzIGF2YWlsYWJsZSBpbiB0aGUgYml0IHJlYWRlcgorICoKKyAqIFJldHVybnM6IHVuc2lnbmVkIDggYml0IGludGVnZXIgd2l0aCB0aGUgYml0cy4KKyAqIAorICogU2luY2U6IDAuMTAuMzEKKyAqLworZ3VpbnQ4IGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4X3VuY2hlY2tlZCAoR3N0Qml0UmVhZGVyICpyZWFkZXIsIGd1aW50IG5iaXRzKTsKKworLyoqCisgKiBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MTZfdW5jaGVja2VkOgorICogQHJlYWRlcjogYSAjR3N0Qml0UmVhZGVyIGluc3RhbmNlCisgKiBAbmJpdHM6IG51bWJlciBvZiBiaXRzIHRvIHJlYWQKKyAqCisgKiBSZWFkIEBuYml0cyBiaXRzIGludG8gQHZhbCBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uIHdpdGhvdXQKKyAqIGNoZWNraW5nIGlmIHRoZXJlIGFyZSBlbm91Z2ggYml0cyBhdmFpbGFibGUgaW4gdGhlIGJpdCByZWFkZXIuCisgKgorICogUmV0dXJuczogdW5zaWduZWQgMTYgYml0IGludGVnZXIgd2l0aCB0aGUgYml0cy4KKyAqIAorICogU2luY2U6IDAuMTAuMzEKKyAqLworZ3VpbnQxNiBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDE2X3VuY2hlY2tlZCAoY29uc3QgR3N0Qml0UmVhZGVyICpyZWFkZXIsIGd1aW50IG5iaXRzKTsKKworLyoqCisgKiBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDE2X3VuY2hlY2tlZDoKKyAqIEByZWFkZXI6IGEgI0dzdEJpdFJlYWRlciBpbnN0YW5jZQorICogQG5iaXRzOiBudW1iZXIgb2YgYml0cyB0byByZWFkCisgKgorICogUmVhZCBAbmJpdHMgYml0cyBpbnRvIEB2YWwgYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24gd2l0aG91dAorICogY2hlY2tpbmcgaWYgdGhlcmUgYXJlIGVub3VnaCBiaXRzIGF2YWlsYWJsZSBpbiB0aGUgYml0IHJlYWRlcgorICoKKyAqIFJldHVybnM6IHVuc2lnbmVkIDE2IGJpdCBpbnRlZ2VyIHdpdGggdGhlIGJpdHMuCisgKiAKKyAqIFNpbmNlOiAwLjEwLjMxCisgKi8KK2d1aW50MTYgZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDE2X3VuY2hlY2tlZCAoR3N0Qml0UmVhZGVyICpyZWFkZXIsIGd1aW50IG5iaXRzKTsKKworLyoqCisgKiBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MzJfdW5jaGVja2VkOgorICogQHJlYWRlcjogYSAjR3N0Qml0UmVhZGVyIGluc3RhbmNlCisgKiBAbmJpdHM6IG51bWJlciBvZiBiaXRzIHRvIHJlYWQKKyAqCisgKiBSZWFkIEBuYml0cyBiaXRzIGludG8gQHZhbCBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uIHdpdGhvdXQKKyAqIGNoZWNraW5nIGlmIHRoZXJlIGFyZSBlbm91Z2ggYml0cyBhdmFpbGFibGUgaW4gdGhlIGJpdCByZWFkZXIuCisgKgorICogUmV0dXJuczogdW5zaWduZWQgMzIgYml0IGludGVnZXIgd2l0aCB0aGUgYml0cy4KKyAqIAorICogU2luY2U6IDAuMTAuMzEKKyAqLworZ3VpbnQzMiBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDMyX3VuY2hlY2tlZCAoY29uc3QgR3N0Qml0UmVhZGVyICpyZWFkZXIsIGd1aW50IG5iaXRzKTsKKworLyoqCisgKiBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDMyX3VuY2hlY2tlZDoKKyAqIEByZWFkZXI6IGEgI0dzdEJpdFJlYWRlciBpbnN0YW5jZQorICogQG5iaXRzOiBudW1iZXIgb2YgYml0cyB0byByZWFkCisgKgorICogUmVhZCBAbmJpdHMgYml0cyBpbnRvIEB2YWwgYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24gd2l0aG91dAorICogY2hlY2tpbmcgaWYgdGhlcmUgYXJlIGVub3VnaCBiaXRzIGF2YWlsYWJsZSBpbiB0aGUgYml0IHJlYWRlcgorICoKKyAqIFJldHVybnM6IHVuc2lnbmVkIDMyIGJpdCBpbnRlZ2VyIHdpdGggdGhlIGJpdHMuCisgKiAKKyAqIFNpbmNlOiAwLjEwLjMxCisgKi8KK2d1aW50MzIgZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDMyX3VuY2hlY2tlZCAoR3N0Qml0UmVhZGVyICpyZWFkZXIsIGd1aW50IG5iaXRzKTsKKworLyoqCisgKiBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50NjRfdW5jaGVja2VkOgorICogQHJlYWRlcjogYSAjR3N0Qml0UmVhZGVyIGluc3RhbmNlCisgKiBAbmJpdHM6IG51bWJlciBvZiBiaXRzIHRvIHJlYWQKKyAqCisgKiBSZWFkIEBuYml0cyBiaXRzIGludG8gQHZhbCBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uIHdpdGhvdXQKKyAqIGNoZWNraW5nIGlmIHRoZXJlIGFyZSBlbm91Z2ggYml0cyBhdmFpbGFibGUgaW4gdGhlIGJpdCByZWFkZXIuCisgKgorICogUmV0dXJuczogdW5zaWduZWQgNjQgYml0IGludGVnZXIgd2l0aCB0aGUgYml0cy4KKyAqIAorICogU2luY2U6IDAuMTAuMzEKKyAqLworZ3VpbnQ2NCBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDY0X3VuY2hlY2tlZCAoY29uc3QgR3N0Qml0UmVhZGVyICpyZWFkZXIsIGd1aW50IG5iaXRzKTsKKworLyoqCisgKiBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDE2X3VuY2hlY2tlZDoKKyAqIEByZWFkZXI6IGEgI0dzdEJpdFJlYWRlciBpbnN0YW5jZQorICogQG5iaXRzOiBudW1iZXIgb2YgYml0cyB0byByZWFkCisgKgorICogUmVhZCBAbmJpdHMgYml0cyBpbnRvIEB2YWwgYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24gd2l0aG91dAorICogY2hlY2tpbmcgaWYgdGhlcmUgYXJlIGVub3VnaCBiaXRzIGF2YWlsYWJsZSBpbiB0aGUgYml0IHJlYWRlcgorICoKKyAqIFJldHVybnM6IHVuc2lnbmVkIDY0IGJpdCBpbnRlZ2VyIHdpdGggdGhlIGJpdHMuCisgKiAKKyAqIFNpbmNlOiAwLjEwLjMxCisgKi8KK2d1aW50NjQgZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDY0X3VuY2hlY2tlZCAoR3N0Qml0UmVhZGVyICpyZWFkZXIsIGd1aW50IG5iaXRzKTsKKwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvYmFzZS9nc3RiaXRyZWFkZXIuYyBiL2xpYnMvZ3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcxNDI0YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLmMKQEAgLTAsMCArMSwzMjggQEAKKy8qIEdTdHJlYW1lcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjZGVmaW5lIEdTVF9CSVRfUkVBREVSX0RJU0FCTEVfSU5MSU5FUworI2luY2x1ZGUgImdzdGJpdHJlYWRlci5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qKgorICogU0VDVElPTjpnc3RiaXRyZWFkZXIKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogUmVhZHMgYW55IG51bWJlciBvZiBiaXRzIGZyb20gYSBtZW1vcnkgYnVmZmVyCisgKgorICogI0dzdEJpdFJlYWRlciBwcm92aWRlcyBhIGJpdCByZWFkZXIgdGhhdCBjYW4gcmVhZCBhbnkgbnVtYmVyIG9mIGJpdHMKKyAqIGZyb20gYSBtZW1vcnkgYnVmZmVyLiBJdCBwcm92aWRlcyBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgYW55IG51bWJlciBvZiBiaXRzCisgKiBpbnRvIDgsIDE2LCAzMiBhbmQgNjQgYml0IHZhcmlhYmxlcy4KKyAqLworCisvKioKKyAqIGdzdF9iaXRfcmVhZGVyX25ldzoKKyAqIEBkYXRhOiBEYXRhIGZyb20gd2hpY2ggdGhlICNHc3RCaXRSZWFkZXIgc2hvdWxkIHJlYWQKKyAqIEBzaXplOiBTaXplIG9mIEBkYXRhIGluIGJ5dGVzCisgKgorICogQ3JlYXRlIGEgbmV3ICNHc3RCaXRSZWFkZXIgaW5zdGFuY2UsIHdoaWNoIHdpbGwgcmVhZCBmcm9tIEBkYXRhLgorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdzdF9iaXRfcmVhZGVyX2ZyZWUKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RCaXRSZWFkZXIgaW5zdGFuY2UKKyAqCisgKiBTaW5jZTogMC4xMC4yMgorICovCitHc3RCaXRSZWFkZXIgKgorZ3N0X2JpdF9yZWFkZXJfbmV3IChjb25zdCBndWludDggKiBkYXRhLCBndWludCBzaXplKQoreworICBHc3RCaXRSZWFkZXIgKnJldCA9IGdfc2xpY2VfbmV3MCAoR3N0Qml0UmVhZGVyKTsKKworICByZXQtPmRhdGEgPSBkYXRhOworICByZXQtPnNpemUgPSBzaXplOworCisgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICogZ3N0X2JpdF9yZWFkZXJfZnJlZToKKyAqIEByZWFkZXI6IChpbikgKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RCaXRSZWFkZXIgaW5zdGFuY2UKKyAqCisgKiBGcmVlcyBhICNHc3RCaXRSZWFkZXIgaW5zdGFuY2UsIHdoaWNoIHdhcyBwcmV2aW91c2x5IGFsbG9jYXRlZCBieQorICogZ3N0X2JpdF9yZWFkZXJfbmV3KCkuCisgKiAKKyAqIFNpbmNlOiAwLjEwLjIyCisgKi8KK3ZvaWQKK2dzdF9iaXRfcmVhZGVyX2ZyZWUgKEdzdEJpdFJlYWRlciAqIHJlYWRlcikKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAocmVhZGVyICE9IE5VTEwpOworCisgIGdfc2xpY2VfZnJlZSAoR3N0Qml0UmVhZGVyLCByZWFkZXIpOworfQorCisvKioKKyAqIGdzdF9iaXRfcmVhZGVyX2luaXQ6CisgKiBAcmVhZGVyOiBhICNHc3RCaXRSZWFkZXIgaW5zdGFuY2UKKyAqIEBkYXRhOiAoaW4pIChhcnJheSBsZW5ndGg9c2l6ZSk6IGRhdGEgZnJvbSB3aGljaCB0aGUgYml0IHJlYWRlciBzaG91bGQgcmVhZAorICogQHNpemU6IFNpemUgb2YgQGRhdGEgaW4gYnl0ZXMKKyAqCisgKiBJbml0aWFsaXplcyBhICNHc3RCaXRSZWFkZXIgaW5zdGFuY2UgdG8gcmVhZCBmcm9tIEBkYXRhLiBUaGlzIGZ1bmN0aW9uCisgKiBjYW4gYmUgY2FsbGVkIG9uIGFscmVhZHkgaW5pdGlhbGl6ZWQgaW5zdGFuY2VzLgorICogCisgKiBTaW5jZTogMC4xMC4yMgorICovCit2b2lkCitnc3RfYml0X3JlYWRlcl9pbml0IChHc3RCaXRSZWFkZXIgKiByZWFkZXIsIGNvbnN0IGd1aW50OCAqIGRhdGEsIGd1aW50IHNpemUpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKHJlYWRlciAhPSBOVUxMKTsKKworICByZWFkZXItPmRhdGEgPSBkYXRhOworICByZWFkZXItPnNpemUgPSBzaXplOworICByZWFkZXItPmJ5dGUgPSByZWFkZXItPmJpdCA9IDA7Cit9CisKKy8qKgorICogZ3N0X2JpdF9yZWFkZXJfc2V0X3BvczoKKyAqIEByZWFkZXI6IGEgI0dzdEJpdFJlYWRlciBpbnN0YW5jZQorICogQHBvczogVGhlIG5ldyBwb3NpdGlvbiBpbiBiaXRzCisgKgorICogU2V0cyB0aGUgbmV3IHBvc2l0aW9uIG9mIGEgI0dzdEJpdFJlYWRlciBpbnN0YW5jZSB0byBAcG9zIGluIGJpdHMuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHBvc2l0aW9uIGNvdWxkIGJlIHNldCBzdWNjZXNzZnVsbHksICVGQUxTRQorICogb3RoZXJ3aXNlLgorICogCisgKiBTaW5jZTogMC4xMC4yMgorICovCitnYm9vbGVhbgorZ3N0X2JpdF9yZWFkZXJfc2V0X3BvcyAoR3N0Qml0UmVhZGVyICogcmVhZGVyLCBndWludCBwb3MpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZWFkZXIgIT0gTlVMTCwgRkFMU0UpOworCisgIGlmIChwb3MgPiByZWFkZXItPnNpemUgKiA4KQorICAgIHJldHVybiBGQUxTRTsKKworICByZWFkZXItPmJ5dGUgPSBwb3MgLyA4OworICByZWFkZXItPmJpdCA9IHBvcyAlIDg7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qKgorICogZ3N0X2JpdF9yZWFkZXJfZ2V0X3BvczoKKyAqIEByZWFkZXI6IGEgI0dzdEJpdFJlYWRlciBpbnN0YW5jZQorICoKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgYSAjR3N0Qml0UmVhZGVyIGluc3RhbmNlIGluIGJpdHMuCisgKgorICogUmV0dXJuczogVGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgQHJlYWRlciBpbiBiaXRzLgorICogCisgKiBTaW5jZTogMC4xMC4yMgorICovCitndWludAorZ3N0X2JpdF9yZWFkZXJfZ2V0X3BvcyAoY29uc3QgR3N0Qml0UmVhZGVyICogcmVhZGVyKQoreworICByZXR1cm4gX2dzdF9iaXRfcmVhZGVyX2dldF9wb3NfaW5saW5lIChyZWFkZXIpOworfQorCisvKioKKyAqIGdzdF9iaXRfcmVhZGVyX2dldF9yZW1haW5pbmc6CisgKiBAcmVhZGVyOiBhICNHc3RCaXRSZWFkZXIgaW5zdGFuY2UKKyAqCisgKiBSZXR1cm5zIHRoZSByZW1haW5pbmcgbnVtYmVyIG9mIGJpdHMgb2YgYSAjR3N0Qml0UmVhZGVyIGluc3RhbmNlLgorICoKKyAqIFJldHVybnM6IFRoZSByZW1haW5pbmcgbnVtYmVyIG9mIGJpdHMgb2YgQHJlYWRlciBpbnN0YW5jZS4KKyAqIAorICogU2luY2U6IDAuMTAuMjIKKyAqLworZ3VpbnQKK2dzdF9iaXRfcmVhZGVyX2dldF9yZW1haW5pbmcgKGNvbnN0IEdzdEJpdFJlYWRlciAqIHJlYWRlcikKK3sKKyAgcmV0dXJuIF9nc3RfYml0X3JlYWRlcl9nZXRfcmVtYWluaW5nX2lubGluZSAocmVhZGVyKTsKK30KKworLyoqCisgKiBnc3RfYml0X3JlYWRlcl9nZXRfc2l6ZToKKyAqIEByZWFkZXI6IGEgI0dzdEJpdFJlYWRlciBpbnN0YW5jZQorICoKKyAqIFJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBiaXRzIG9mIGEgI0dzdEJpdFJlYWRlciBpbnN0YW5jZS4KKyAqCisgKiBSZXR1cm5zOiBUaGUgdG90YWwgbnVtYmVyIG9mIGJpdHMgb2YgQHJlYWRlciBpbnN0YW5jZS4KKyAqIAorICogU2luY2U6IDAuMTAuMjYKKyAqLworZ3VpbnQKK2dzdF9iaXRfcmVhZGVyX2dldF9zaXplIChjb25zdCBHc3RCaXRSZWFkZXIgKiByZWFkZXIpCit7CisgIHJldHVybiBfZ3N0X2JpdF9yZWFkZXJfZ2V0X3NpemVfaW5saW5lIChyZWFkZXIpOworfQorCisvKioKKyAqIGdzdF9iaXRfcmVhZGVyX3NraXA6CisgKiBAcmVhZGVyOiBhICNHc3RCaXRSZWFkZXIgaW5zdGFuY2UKKyAqIEBuYml0czogdGhlIG51bWJlciBvZiBiaXRzIHRvIHNraXAKKyAqCisgKiBTa2lwcyBAbmJpdHMgYml0cyBvZiB0aGUgI0dzdEJpdFJlYWRlciBpbnN0YW5jZS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBAbmJpdHMgYml0cyBjb3VsZCBiZSBza2lwcGVkLCAlRkFMU0Ugb3RoZXJ3aXNlLgorICogCisgKiBTaW5jZTogMC4xMC4yMgorICovCitnYm9vbGVhbgorZ3N0X2JpdF9yZWFkZXJfc2tpcCAoR3N0Qml0UmVhZGVyICogcmVhZGVyLCBndWludCBuYml0cykKK3sKKyAgcmV0dXJuIF9nc3RfYml0X3JlYWRlcl9za2lwX2lubGluZSAocmVhZGVyLCBuYml0cyk7Cit9CisKKy8qKgorICogZ3N0X2JpdF9yZWFkZXJfc2tpcF90b19ieXRlOgorICogQHJlYWRlcjogYSAjR3N0Qml0UmVhZGVyIGluc3RhbmNlCisgKgorICogU2tpcHMgdW50aWwgdGhlIG5leHQgYnl0ZS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgorICogCisgKiBTaW5jZTogMC4xMC4yMgorICovCitnYm9vbGVhbgorZ3N0X2JpdF9yZWFkZXJfc2tpcF90b19ieXRlIChHc3RCaXRSZWFkZXIgKiByZWFkZXIpCit7CisgIHJldHVybiBfZ3N0X2JpdF9yZWFkZXJfc2tpcF90b19ieXRlX2lubGluZSAocmVhZGVyKTsKK30KKworLyoqCisgKiBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50ODoKKyAqIEByZWFkZXI6IGEgI0dzdEJpdFJlYWRlciBpbnN0YW5jZQorICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ3VpbnQ4IHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqIEBuYml0czogbnVtYmVyIG9mIGJpdHMgdG8gcmVhZAorICoKKyAqIFJlYWQgQG5iaXRzIGJpdHMgaW50byBAdmFsIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KKyAqIAorICogU2luY2U6IDAuMTAuMjIKKyAqLworCisvKioKKyAqIGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQxNjoKKyAqIEByZWFkZXI6IGEgI0dzdEJpdFJlYWRlciBpbnN0YW5jZQorICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ3VpbnQxNiB0byBzdG9yZSB0aGUgcmVzdWx0CisgKiBAbmJpdHM6IG51bWJlciBvZiBiaXRzIHRvIHJlYWQKKyAqCisgKiBSZWFkIEBuYml0cyBiaXRzIGludG8gQHZhbCBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCisgKiAKKyAqIFNpbmNlOiAwLjEwLjIyCisgKi8KKworLyoqCisgKiBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MzI6CisgKiBAcmVhZGVyOiBhICNHc3RCaXRSZWFkZXIgaW5zdGFuY2UKKyAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2d1aW50MzIgdG8gc3RvcmUgdGhlIHJlc3VsdAorICogQG5iaXRzOiBudW1iZXIgb2YgYml0cyB0byByZWFkCisgKgorICogUmVhZCBAbmJpdHMgYml0cyBpbnRvIEB2YWwgYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgorICogCisgKiBTaW5jZTogMC4xMC4yMgorICovCisKKy8qKgorICogZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDY0OgorICogQHJlYWRlcjogYSAjR3N0Qml0UmVhZGVyIGluc3RhbmNlCisgKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNndWludDY0IHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqIEBuYml0czogbnVtYmVyIG9mIGJpdHMgdG8gcmVhZAorICoKKyAqIFJlYWQgQG5iaXRzIGJpdHMgaW50byBAdmFsIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KKyAqIAorICogU2luY2U6IDAuMTAuMjIKKyAqLworCisvKioKKyAqIGdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50ODoKKyAqIEByZWFkZXI6IGEgI0dzdEJpdFJlYWRlciBpbnN0YW5jZQorICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ3VpbnQ4IHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqIEBuYml0czogbnVtYmVyIG9mIGJpdHMgdG8gcmVhZAorICoKKyAqIFJlYWQgQG5iaXRzIGJpdHMgaW50byBAdmFsIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCisgKiAKKyAqIFNpbmNlOiAwLjEwLjIyCisgKi8KKworLyoqCisgKiBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDE2OgorICogQHJlYWRlcjogYSAjR3N0Qml0UmVhZGVyIGluc3RhbmNlCisgKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNndWludDE2IHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqIEBuYml0czogbnVtYmVyIG9mIGJpdHMgdG8gcmVhZAorICoKKyAqIFJlYWQgQG5iaXRzIGJpdHMgaW50byBAdmFsIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCisgKiAKKyAqIFNpbmNlOiAwLjEwLjIyCisgKi8KKworLyoqCisgKiBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDMyOgorICogQHJlYWRlcjogYSAjR3N0Qml0UmVhZGVyIGluc3RhbmNlCisgKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNndWludDMyIHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqIEBuYml0czogbnVtYmVyIG9mIGJpdHMgdG8gcmVhZAorICoKKyAqIFJlYWQgQG5iaXRzIGJpdHMgaW50byBAdmFsIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCisgKiAKKyAqIFNpbmNlOiAwLjEwLjIyCisgKi8KKworLyoqCisgKiBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDY0OgorICogQHJlYWRlcjogYSAjR3N0Qml0UmVhZGVyIGluc3RhbmNlCisgKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNndWludDY0IHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqIEBuYml0czogbnVtYmVyIG9mIGJpdHMgdG8gcmVhZAorICoKKyAqIFJlYWQgQG5iaXRzIGJpdHMgaW50byBAdmFsIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCisgKiAKKyAqIFNpbmNlOiAwLjEwLjIyCisgKi8KKworI2RlZmluZSBHU1RfQklUX1JFQURFUl9SRUFEX0JJVFMoYml0cykgXAorZ2Jvb2xlYW4gXAorZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQjI2JpdHMgKGNvbnN0IEdzdEJpdFJlYWRlciAqcmVhZGVyLCBndWludCMjYml0cyAqdmFsLCBndWludCBuYml0cykgXAoreyBcCisgIHJldHVybiBfZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQjI2JpdHMjI19pbmxpbmUgKHJlYWRlciwgdmFsLCBuYml0cyk7IFwKK30gXAorXAorZ2Jvb2xlYW4gXAorZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludCMjYml0cyAoR3N0Qml0UmVhZGVyICpyZWFkZXIsIGd1aW50IyNiaXRzICp2YWwsIGd1aW50IG5iaXRzKSBcCit7IFwKKyAgcmV0dXJuIF9nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50IyNiaXRzIyNfaW5saW5lIChyZWFkZXIsIHZhbCwgbmJpdHMpOyBcCit9CisKK0dTVF9CSVRfUkVBREVSX1JFQURfQklUUyAoOCk7CitHU1RfQklUX1JFQURFUl9SRUFEX0JJVFMgKDE2KTsKK0dTVF9CSVRfUkVBREVSX1JFQURfQklUUyAoMzIpOworR1NUX0JJVF9SRUFERVJfUkVBRF9CSVRTICg2NCk7CmRpZmYgLS1naXQgYS9saWJzL2dzdC9iYXNlL2dzdGJpdHJlYWRlci5oIGIvbGlicy9nc3QvYmFzZS9nc3RiaXRyZWFkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDJlM2JmCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9nc3QvYmFzZS9nc3RiaXRyZWFkZXIuaApAQCAtMCwwICsxLDI5OSBAQAorLyogR1N0cmVhbWVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fR1NUX0JJVF9SRUFERVJfSF9fCisjZGVmaW5lIF9fR1NUX0JJVF9SRUFERVJfSF9fCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKKy8qIEZJWE1FOiBpbmxpbmUgZnVuY3Rpb25zICovCisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBHU1RfQklUX1JFQURFUihyZWFkZXIpICgoR3N0Qml0UmVhZGVyICopIChyZWFkZXIpKQorCisvKioKKyAqIEdzdEJpdFJlYWRlcjoKKyAqIEBkYXRhOiBEYXRhIGZyb20gd2hpY2ggdGhlIGJpdCByZWFkZXIgd2lsbCByZWFkCisgKiBAc2l6ZTogU2l6ZSBvZiBAZGF0YSBpbiBieXRlcworICogQGJ5dGU6IEN1cnJlbnQgYnl0ZSBwb3NpdGlvbgorICogQGJpdDogQml0IHBvc2l0aW9uIGluIHRoZSBjdXJyZW50IGJ5dGUKKyAqCisgKiBBIGJpdCByZWFkZXIgaW5zdGFuY2UuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgZ3VpbnQ4ICpkYXRhOworICBndWludCBzaXplOworCisgIGd1aW50IGJ5dGU7ICAvKiBCeXRlIHBvc2l0aW9uICovCisgIGd1aW50IGJpdDsgICAvKiBCaXQgcG9zaXRpb24gaW4gdGhlIGN1cnJlbnQgYnl0ZSAqLworfSBHc3RCaXRSZWFkZXI7CisKK0dzdEJpdFJlYWRlciAqIGdzdF9iaXRfcmVhZGVyX25ldyAoY29uc3QgZ3VpbnQ4ICpkYXRhLCBndWludCBzaXplKTsKK3ZvaWQgZ3N0X2JpdF9yZWFkZXJfZnJlZSAoR3N0Qml0UmVhZGVyICpyZWFkZXIpOworCit2b2lkIGdzdF9iaXRfcmVhZGVyX2luaXQgKEdzdEJpdFJlYWRlciAqcmVhZGVyLCBjb25zdCBndWludDggKmRhdGEsIGd1aW50IHNpemUpOworCitnYm9vbGVhbiBnc3RfYml0X3JlYWRlcl9zZXRfcG9zIChHc3RCaXRSZWFkZXIgKnJlYWRlciwgZ3VpbnQgcG9zKTsKKworZ3VpbnQgZ3N0X2JpdF9yZWFkZXJfZ2V0X3BvcyAoY29uc3QgR3N0Qml0UmVhZGVyICpyZWFkZXIpOworZ3VpbnQgZ3N0X2JpdF9yZWFkZXJfZ2V0X3JlbWFpbmluZyAoY29uc3QgR3N0Qml0UmVhZGVyICpyZWFkZXIpOworCitndWludCBnc3RfYml0X3JlYWRlcl9nZXRfc2l6ZSAoY29uc3QgR3N0Qml0UmVhZGVyICpyZWFkZXIpOworCitnYm9vbGVhbiBnc3RfYml0X3JlYWRlcl9za2lwIChHc3RCaXRSZWFkZXIgKnJlYWRlciwgZ3VpbnQgbmJpdHMpOworZ2Jvb2xlYW4gZ3N0X2JpdF9yZWFkZXJfc2tpcF90b19ieXRlIChHc3RCaXRSZWFkZXIgKnJlYWRlcik7CisKK2dib29sZWFuIGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4IChHc3RCaXRSZWFkZXIgKnJlYWRlciwgZ3VpbnQ4ICp2YWwsIGd1aW50IG5iaXRzKTsKK2dib29sZWFuIGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQxNiAoR3N0Qml0UmVhZGVyICpyZWFkZXIsIGd1aW50MTYgKnZhbCwgZ3VpbnQgbmJpdHMpOworZ2Jvb2xlYW4gZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDMyIChHc3RCaXRSZWFkZXIgKnJlYWRlciwgZ3VpbnQzMiAqdmFsLCBndWludCBuYml0cyk7CitnYm9vbGVhbiBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50NjQgKEdzdEJpdFJlYWRlciAqcmVhZGVyLCBndWludDY0ICp2YWwsIGd1aW50IG5iaXRzKTsKKworZ2Jvb2xlYW4gZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ4IChjb25zdCBHc3RCaXRSZWFkZXIgKnJlYWRlciwgZ3VpbnQ4ICp2YWwsIGd1aW50IG5iaXRzKTsKK2dib29sZWFuIGdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MTYgKGNvbnN0IEdzdEJpdFJlYWRlciAqcmVhZGVyLCBndWludDE2ICp2YWwsIGd1aW50IG5iaXRzKTsKK2dib29sZWFuIGdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MzIgKGNvbnN0IEdzdEJpdFJlYWRlciAqcmVhZGVyLCBndWludDMyICp2YWwsIGd1aW50IG5iaXRzKTsKK2dib29sZWFuIGdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50NjQgKGNvbnN0IEdzdEJpdFJlYWRlciAqcmVhZGVyLCBndWludDY0ICp2YWwsIGd1aW50IG5iaXRzKTsKKworLyoqCisgKiBHU1RfQklUX1JFQURFUl9JTklUOgorICogQGRhdGE6IERhdGEgZnJvbSB3aGljaCB0aGUgI0dzdEJpdFJlYWRlciBzaG91bGQgcmVhZAorICogQHNpemU6IFNpemUgb2YgQGRhdGEgaW4gYnl0ZXMKKyAqCisgKiBBICNHc3RCaXRSZWFkZXIgbXVzdCBiZSBpbml0aWFsaXplZCB3aXRoIHRoaXMgbWFjcm8sIGJlZm9yZSBpdCBjYW4gYmUKKyAqIHVzZWQuIFRoaXMgbWFjcm8gY2FuIHVzZWQgYmUgdG8gaW5pdGlhbGl6ZSBhIHZhcmlhYmxlLCBidXQgaXQgY2Fubm90CisgKiBiZSBhc3NpZ25lZCB0byBhIHZhcmlhYmxlLiBJbiB0aGF0IGNhc2UgeW91IGhhdmUgdG8gdXNlCisgKiBnc3RfYml0X3JlYWRlcl9pbml0KCkuCisgKgorICogU2luY2U6IDAuMTAuMjIKKyAqLworI2RlZmluZSBHU1RfQklUX1JFQURFUl9JTklUKGRhdGEsIHNpemUpIHtkYXRhLCBzaXplLCAwLCAwfQorCisvKiBVbmNoZWNrZWQgdmFyaWFudHMgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnc3RfYml0X3JlYWRlcl9za2lwX3VuY2hlY2tlZCAoR3N0Qml0UmVhZGVyICogcmVhZGVyLCBndWludCBuYml0cykKK3sKKyAgcmVhZGVyLT5iaXQgKz0gbmJpdHM7CisgIHJlYWRlci0+Ynl0ZSArPSByZWFkZXItPmJpdCAvIDg7CisgIHJlYWRlci0+Yml0ID0gcmVhZGVyLT5iaXQgJSA4OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2dzdF9iaXRfcmVhZGVyX3NraXBfdG9fYnl0ZV91bmNoZWNrZWQgKEdzdEJpdFJlYWRlciAqIHJlYWRlcikKK3sKKyAgaWYgKHJlYWRlci0+Yml0KSB7CisgICAgcmVhZGVyLT5iaXQgPSAwOworICAgIHJlYWRlci0+Ynl0ZSsrOworICB9Cit9CisKKyNkZWZpbmUgX19HU1RfQklUX1JFQURFUl9SRUFEX0JJVFNfVU5DSEVDS0VEKGJpdHMpIFwKK3N0YXRpYyBpbmxpbmUgZ3VpbnQjI2JpdHMgXAorZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQjI2JpdHMjI191bmNoZWNrZWQgKGNvbnN0IEdzdEJpdFJlYWRlciAqcmVhZGVyLCBndWludCBuYml0cykgXAoreyBcCisgIGd1aW50IyNiaXRzIHJldCA9IDA7IFwKKyAgY29uc3QgZ3VpbnQ4ICpkYXRhOyBcCisgIGd1aW50IGJ5dGUsIGJpdDsgXAorICBcCisgIGRhdGEgPSByZWFkZXItPmRhdGE7IFwKKyAgYnl0ZSA9IHJlYWRlci0+Ynl0ZTsgXAorICBiaXQgPSByZWFkZXItPmJpdDsgXAorICBcCisgIHdoaWxlIChuYml0cyA+IDApIHsgXAorICAgIGd1aW50IHRvcmVhZCA9IE1JTiAobmJpdHMsIDggLSBiaXQpOyBcCisgICAgXAorICAgIHJldCA8PD0gdG9yZWFkOyBcCisgICAgcmV0IHw9IChkYXRhW2J5dGVdICYgKDB4ZmYgPj4gYml0KSkgPj4gKDggLSB0b3JlYWQgLSBiaXQpOyBcCisgICAgXAorICAgIGJpdCArPSB0b3JlYWQ7IFwKKyAgICBpZiAoYml0ID49IDgpIHsgXAorICAgICAgYnl0ZSsrOyBcCisgICAgICBiaXQgPSAwOyBcCisgICAgfSBcCisgICAgbmJpdHMgLT0gdG9yZWFkOyBcCisgIH0gXAorICBcCisgIHJldHVybiByZXQ7IFwKK30gXAorXAorc3RhdGljIGlubGluZSBndWludCMjYml0cyBcCitnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50IyNiaXRzIyNfdW5jaGVja2VkIChHc3RCaXRSZWFkZXIgKnJlYWRlciwgZ3VpbnQgbmJpdHMpIFwKK3sgXAorICBndWludCMjYml0cyByZXQ7IFwKKyAgXAorICByZXQgPSBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludCMjYml0cyMjX3VuY2hlY2tlZCAocmVhZGVyLCBuYml0cyk7IFwKKyAgXAorICBnc3RfYml0X3JlYWRlcl9za2lwX3VuY2hlY2tlZCAocmVhZGVyLCBuYml0cyk7IFwKKyAgXAorICByZXR1cm4gcmV0OyBcCit9CisKK19fR1NUX0JJVF9SRUFERVJfUkVBRF9CSVRTX1VOQ0hFQ0tFRCAoOCkKK19fR1NUX0JJVF9SRUFERVJfUkVBRF9CSVRTX1VOQ0hFQ0tFRCAoMTYpCitfX0dTVF9CSVRfUkVBREVSX1JFQURfQklUU19VTkNIRUNLRUQgKDMyKQorX19HU1RfQklUX1JFQURFUl9SRUFEX0JJVFNfVU5DSEVDS0VEICg2NCkKKworI3VuZGVmIF9fR1NUX0JJVF9SRUFERVJfUkVBRF9CSVRTX1VOQ0hFQ0tFRAorCisvKiB1bmNoZWNrZWQgdmFyaWFudHMgLS0gZG8gbm90IHVzZSAqLworCitzdGF0aWMgaW5saW5lIGd1aW50CitfZ3N0X2JpdF9yZWFkZXJfZ2V0X3NpemVfdW5jaGVja2VkIChjb25zdCBHc3RCaXRSZWFkZXIgKiByZWFkZXIpCit7CisgIHJldHVybiByZWFkZXItPnNpemUgKiA4OworfQorCitzdGF0aWMgaW5saW5lIGd1aW50CitfZ3N0X2JpdF9yZWFkZXJfZ2V0X3Bvc191bmNoZWNrZWQgKGNvbnN0IEdzdEJpdFJlYWRlciAqIHJlYWRlcikKK3sKKyAgcmV0dXJuIHJlYWRlci0+Ynl0ZSAqIDggKyByZWFkZXItPmJpdDsKK30KKworc3RhdGljIGlubGluZSBndWludAorX2dzdF9iaXRfcmVhZGVyX2dldF9yZW1haW5pbmdfdW5jaGVja2VkIChjb25zdCBHc3RCaXRSZWFkZXIgKiByZWFkZXIpCit7CisgIHJldHVybiByZWFkZXItPnNpemUgKiA4IC0gKHJlYWRlci0+Ynl0ZSAqIDggKyByZWFkZXItPmJpdCk7Cit9CisKKy8qIGlubGluZWQgdmFyaWFudHMgLS0gZG8gbm90IHVzZSBkaXJlY3RseSAqLworc3RhdGljIGlubGluZSBndWludAorX2dzdF9iaXRfcmVhZGVyX2dldF9zaXplX2lubGluZSAoY29uc3QgR3N0Qml0UmVhZGVyICogcmVhZGVyKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVhZGVyICE9IE5VTEwsIDApOworCisgIHJldHVybiBfZ3N0X2JpdF9yZWFkZXJfZ2V0X3NpemVfdW5jaGVja2VkIChyZWFkZXIpOworfQorCitzdGF0aWMgaW5saW5lIGd1aW50CitfZ3N0X2JpdF9yZWFkZXJfZ2V0X3Bvc19pbmxpbmUgKGNvbnN0IEdzdEJpdFJlYWRlciAqIHJlYWRlcikKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHJlYWRlciAhPSBOVUxMLCAwKTsKKworICByZXR1cm4gX2dzdF9iaXRfcmVhZGVyX2dldF9wb3NfdW5jaGVja2VkIChyZWFkZXIpOworfQorCitzdGF0aWMgaW5saW5lIGd1aW50CitfZ3N0X2JpdF9yZWFkZXJfZ2V0X3JlbWFpbmluZ19pbmxpbmUgKGNvbnN0IEdzdEJpdFJlYWRlciAqIHJlYWRlcikKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHJlYWRlciAhPSBOVUxMLCAwKTsKKworICByZXR1cm4gX2dzdF9iaXRfcmVhZGVyX2dldF9yZW1haW5pbmdfdW5jaGVja2VkIChyZWFkZXIpOworfQorCitzdGF0aWMgaW5saW5lIGdib29sZWFuCitfZ3N0X2JpdF9yZWFkZXJfc2tpcF9pbmxpbmUgKEdzdEJpdFJlYWRlciAqIHJlYWRlciwgZ3VpbnQgbmJpdHMpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZWFkZXIgIT0gTlVMTCwgRkFMU0UpOworCisgIGlmIChfZ3N0X2JpdF9yZWFkZXJfZ2V0X3JlbWFpbmluZ191bmNoZWNrZWQgKHJlYWRlcikgPCBuYml0cykKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgZ3N0X2JpdF9yZWFkZXJfc2tpcF91bmNoZWNrZWQgKHJlYWRlciwgbmJpdHMpOworCisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgaW5saW5lIGdib29sZWFuCitfZ3N0X2JpdF9yZWFkZXJfc2tpcF90b19ieXRlX2lubGluZSAoR3N0Qml0UmVhZGVyICogcmVhZGVyKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVhZGVyICE9IE5VTEwsIEZBTFNFKTsKKworICBpZiAocmVhZGVyLT5ieXRlID4gcmVhZGVyLT5zaXplKQorICAgIHJldHVybiBGQUxTRTsKKworICBnc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGVfdW5jaGVja2VkIChyZWFkZXIpOworCisgIHJldHVybiBUUlVFOworfQorCisjZGVmaW5lIF9fR1NUX0JJVF9SRUFERVJfUkVBRF9CSVRTX0lOTElORShiaXRzKSBcCitzdGF0aWMgaW5saW5lIGdib29sZWFuIFwKK19nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50IyNiaXRzIyNfaW5saW5lIChHc3RCaXRSZWFkZXIgKnJlYWRlciwgZ3VpbnQjI2JpdHMgKnZhbCwgZ3VpbnQgbmJpdHMpIFwKK3sgXAorICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVhZGVyICE9IE5VTEwsIEZBTFNFKTsgXAorICBnX3JldHVybl92YWxfaWZfZmFpbCAodmFsICE9IE5VTEwsIEZBTFNFKTsgXAorICBnX3JldHVybl92YWxfaWZfZmFpbCAobmJpdHMgPD0gYml0cywgRkFMU0UpOyBcCisgIFwKKyAgaWYgKF9nc3RfYml0X3JlYWRlcl9nZXRfcmVtYWluaW5nX3VuY2hlY2tlZCAocmVhZGVyKSA8IG5iaXRzKSBcCisgICAgcmV0dXJuIEZBTFNFOyBcCitcCisgICp2YWwgPSBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50IyNiaXRzIyNfdW5jaGVja2VkIChyZWFkZXIsIG5iaXRzKTsgXAorICByZXR1cm4gVFJVRTsgXAorfSBcCitcCitzdGF0aWMgaW5saW5lIGdib29sZWFuIFwKK19nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludCMjYml0cyMjX2lubGluZSAoY29uc3QgR3N0Qml0UmVhZGVyICpyZWFkZXIsIGd1aW50IyNiaXRzICp2YWwsIGd1aW50IG5iaXRzKSBcCit7IFwKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHJlYWRlciAhPSBOVUxMLCBGQUxTRSk7IFwKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZhbCAhPSBOVUxMLCBGQUxTRSk7IFwKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG5iaXRzIDw9IGJpdHMsIEZBTFNFKTsgXAorICBcCisgIGlmIChfZ3N0X2JpdF9yZWFkZXJfZ2V0X3JlbWFpbmluZ191bmNoZWNrZWQgKHJlYWRlcikgPCBuYml0cykgXAorICAgIHJldHVybiBGQUxTRTsgXAorXAorICAqdmFsID0gZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQjI2JpdHMjI191bmNoZWNrZWQgKHJlYWRlciwgbmJpdHMpOyBcCisgIHJldHVybiBUUlVFOyBcCit9CisKK19fR1NUX0JJVF9SRUFERVJfUkVBRF9CSVRTX0lOTElORSAoOCkKK19fR1NUX0JJVF9SRUFERVJfUkVBRF9CSVRTX0lOTElORSAoMTYpCitfX0dTVF9CSVRfUkVBREVSX1JFQURfQklUU19JTkxJTkUgKDMyKQorX19HU1RfQklUX1JFQURFUl9SRUFEX0JJVFNfSU5MSU5FICg2NCkKKworI3VuZGVmIF9fR1NUX0JJVF9SRUFERVJfUkVBRF9CSVRTX0lOTElORQorCisjaWZuZGVmIEdTVF9CSVRfUkVBREVSX0RJU0FCTEVfSU5MSU5FUworCisjZGVmaW5lIGdzdF9iaXRfcmVhZGVyX2dldF9zaXplKHJlYWRlcikgXAorICAgIF9nc3RfYml0X3JlYWRlcl9nZXRfc2l6ZV9pbmxpbmUgKHJlYWRlcikKKyNkZWZpbmUgZ3N0X2JpdF9yZWFkZXJfZ2V0X3BvcyhyZWFkZXIpIFwKKyAgICBfZ3N0X2JpdF9yZWFkZXJfZ2V0X3Bvc19pbmxpbmUgKHJlYWRlcikKKyNkZWZpbmUgZ3N0X2JpdF9yZWFkZXJfZ2V0X3JlbWFpbmluZyhyZWFkZXIpIFwKKyAgICBfZ3N0X2JpdF9yZWFkZXJfZ2V0X3JlbWFpbmluZ19pbmxpbmUgKHJlYWRlcikKKworLyogd2UgdXNlIGRlZmluZXMgaGVyZSBzbyB3ZSBjYW4gYWRkIHRoZSBHX0xJS0VMWSgpICovCisKKyNkZWZpbmUgZ3N0X2JpdF9yZWFkZXJfc2tpcChyZWFkZXIsIG5iaXRzKVwKKyAgICBHX0xJS0VMWSAoX2dzdF9iaXRfcmVhZGVyX3NraXBfaW5saW5lKHJlYWRlciwgbmJpdHMpKQorI2RlZmluZSBnc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGUocmVhZGVyKVwKKyAgICBHX0xJS0VMWSAoX2dzdF9iaXRfcmVhZGVyX3NraXBfdG9fYnl0ZV9pbmxpbmUocmVhZGVyKSkKKworI2RlZmluZSBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OChyZWFkZXIsIHZhbCwgbmJpdHMpIFwKKyAgICBHX0xJS0VMWSAoX2dzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4X2lubGluZSAocmVhZGVyLCB2YWwsIG5iaXRzKSkKKyNkZWZpbmUgZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDE2KHJlYWRlciwgdmFsLCBuYml0cykgXAorICAgIEdfTElLRUxZIChfZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDE2X2lubGluZSAocmVhZGVyLCB2YWwsIG5iaXRzKSkKKyNkZWZpbmUgZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDMyKHJlYWRlciwgdmFsLCBuYml0cykgXAorICAgIEdfTElLRUxZIChfZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDMyX2lubGluZSAocmVhZGVyLCB2YWwsIG5iaXRzKSkKKyNkZWZpbmUgZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDY0KHJlYWRlciwgdmFsLCBuYml0cykgXAorICAgIEdfTElLRUxZIChfZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDY0X2lubGluZSAocmVhZGVyLCB2YWwsIG5iaXRzKSkKKworI2RlZmluZSBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDgocmVhZGVyLCB2YWwsIG5iaXRzKSBcCisgICAgR19MSUtFTFkgKF9nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDhfaW5saW5lIChyZWFkZXIsIHZhbCwgbmJpdHMpKQorI2RlZmluZSBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDE2KHJlYWRlciwgdmFsLCBuYml0cykgXAorICAgIEdfTElLRUxZIChfZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQxNl9pbmxpbmUgKHJlYWRlciwgdmFsLCBuYml0cykpCisjZGVmaW5lIGdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MzIocmVhZGVyLCB2YWwsIG5iaXRzKSBcCisgICAgR19MSUtFTFkgKF9nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDMyX2lubGluZSAocmVhZGVyLCB2YWwsIG5iaXRzKSkKKyNkZWZpbmUgZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ2NChyZWFkZXIsIHZhbCwgbmJpdHMpIFwKKyAgICBHX0xJS0VMWSAoX2dzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50NjRfaW5saW5lIChyZWFkZXIsIHZhbCwgbmJpdHMpKQorI2VuZGlmCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9CSVRfUkVBREVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLWRvY3MuaCBiL2xpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci1kb2NzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFiODMyNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci1kb2NzLmgKQEAgLTAsMCArMSw2NDggQEAKKy8qIEdTdHJlYW1lciBieXRlIHJlYWRlciBkdW1teSBoZWFkZXIgZm9yIGd0ay1kb2MKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qIFRoaXMgaGVhZGVyIGlzIG5vdCBpbnN0YWxsZWQsIGl0IGp1c3QgY29udGFpbnMgc3R1ZmYgZm9yIGd0ay1kb2MgdG8gcGFyc2UsCisgKiBpbiBwYXJ0aWN1bGFyIGRvY3MgYW5kIHNvbWUgZHVtbXkgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGZvciB0aGUgc3RhdGljCisgKiBpbmxpbmUgZnVuY3Rpb25zIHdlIGdlbmVyYXRlIHZpYSBtYWNyb3MgaW4gZ3N0Ynl0ZXJlYWRlci5oLgorICovCisKKyNlcnJvciAiVGhpcyBoZWFkZXIgc2hvdWxkIG5ldmVyIGJlIGluY2x1ZGVkIGluIGNvZGUsIGl0IGlzIG9ubHkgZm9yIGd0ay1kb2MiCisKKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX3NraXBfdW5jaGVja2VkOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICogQG5ieXRlczogdGhlIG51bWJlciBvZiBieXRlcyB0byBza2lwCisgKgorICogU2tpcHMgQG5ieXRlcyBieXRlcyBvZiB0aGUgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2Ugd2l0aG91dCBjaGVja2luZyBpZgorICogdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyLgorICoKKyAqIFNpbmNlOiAwLjEwLjI1CisgKi8KK3ZvaWQgZ3N0X2J5dGVfcmVhZGVyX3NraXBfdW5jaGVja2VkIChHc3RCeXRlUmVhZGVyICogcmVhZGVyLCBndWludCBuYnl0ZXMpOworCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDhfdW5jaGVja2VkOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICoKKyAqIFJlYWQgYW4gdW5zaWduZWQgOCBiaXQgaW50ZWdlciB3aXRob3V0IGNoZWNraW5nIGlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMKKyAqIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIgYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiB1bnNpZ25lZCA4IGJpdCBpbnRlZ2VyLgorICoKKyAqIFNpbmNlOiAwLjEwLjI1CisgKi8KKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDhfdW5jaGVja2VkOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICoKKyAqIFJlYWQgYW4gdW5zaWduZWQgOCBiaXQgaW50ZWdlciB3aXRob3V0IGNoZWNraW5nIGlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMKKyAqIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZSB0aGUgY3VycmVudCByZWFkIHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6IHVuc2lnbmVkIDggYml0IGludGVnZXIuCisgKgorICogU2luY2U6IDAuMTAuMjUKKyAqLworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDhfdW5jaGVja2VkOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICoKKyAqIFJlYWQgYW4gc2lnbmVkIDggYml0IGludGVnZXIgd2l0aG91dCBjaGVja2luZyBpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzCisgKiBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogc2lnbmVkIDggYml0IGludGVnZXIuCisgKgorICogU2luY2U6IDAuMTAuMjUKKyAqLworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ4X3VuY2hlY2tlZDoKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqCisgKiBSZWFkIGFuIHNpZ25lZCA4IGJpdCBpbnRlZ2VyIHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcworICogYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciwgYnV0IGRvIG5vdCBhZHZhbmNlIHRoZSBjdXJyZW50IHJlYWQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogc2lnbmVkIDggYml0IGludGVnZXIuCisgKgorICogU2luY2U6IDAuMTAuMjUKKyAqLworZ3VpbnQ4IGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDhfdW5jaGVja2VkIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKK2d1aW50OCBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50OF91bmNoZWNrZWQgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOworZ2ludDggZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ4X3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7CitnaW50OCBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ4X3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7CisKKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfbGVfdW5jaGVja2VkOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICoKKyAqIFJlYWQgYW4gdW5zaWduZWQgMTYgYml0IGludGVnZXIgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZworICogaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyIGFuZCB1cGRhdGUgdGhlCisgKiBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6IHVuc2lnbmVkIDE2IGJpdCBpbnRlZ2VyLgorICoKKyAqIFNpbmNlOiAwLjEwLjI1CisgKi8KKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2xlX3VuY2hlY2tlZDoKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqCisgKiBSZWFkIGFuIHVuc2lnbmVkIDE2IGJpdCBpbnRlZ2VyIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKKyAqIGlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciwgYnV0IGRvIG5vdCBhZHZhbmNlCisgKiB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiB1bnNpZ25lZCAxNiBiaXQgaW50ZWdlci4KKyAqCisgKiBTaW5jZTogMC4xMC4yNQorICovCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlX3VuY2hlY2tlZDoKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqCisgKiBSZWFkIGFuIHVuc2lnbmVkIDE2IGJpdCBpbnRlZ2VyIGluIGJpZyBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKKyAqIGlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciBhbmQgdXBkYXRlIHRoZQorICogY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiB1bnNpZ25lZCAxNiBiaXQgaW50ZWdlci4KKyAqCisgKiBTaW5jZTogMC4xMC4yNQorICovCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQxNl9iZV91bmNoZWNrZWQ6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKgorICogUmVhZCBhbiB1bnNpZ25lZCAxNiBiaXQgaW50ZWdlciBpbiBiaWcgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCisgKiBpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZQorICogdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogdW5zaWduZWQgMTYgYml0IGludGVnZXIuCisgKgorICogU2luY2U6IDAuMTAuMjUKKyAqLworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2xlX3VuY2hlY2tlZDoKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqCisgKiBSZWFkIGEgc2lnbmVkIDE2IGJpdCBpbnRlZ2VyIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKKyAqIGlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciBhbmQgdXBkYXRlIHRoZQorICogY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiBzaWduZWQgMTYgYml0IGludGVnZXIuCisgKgorICogU2luY2U6IDAuMTAuMjUKKyAqLworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQxNl9sZV91bmNoZWNrZWQ6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKgorICogUmVhZCBhIHNpZ25lZCAxNiBiaXQgaW50ZWdlciBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCisgKiBpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZQorICogdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogc2lnbmVkIDE2IGJpdCBpbnRlZ2VyLgorICoKKyAqIFNpbmNlOiAwLjEwLjI1CisgKi8KKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9iZV91bmNoZWNrZWQ6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKgorICogUmVhZCBhIHNpZ25lZCAxNiBiaXQgaW50ZWdlciBpbiBiaWcgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCisgKiBpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIgYW5kIHVwZGF0ZSB0aGUKKyAqIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogc2lnbmVkIDE2IGJpdCBpbnRlZ2VyLgorICoKKyAqIFNpbmNlOiAwLjEwLjI1CisgKi8KKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfYmVfdW5jaGVja2VkOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICoKKyAqIFJlYWQgYSBzaWduZWQgMTYgYml0IGludGVnZXIgaW4gYmlnIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZworICogaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyLCBidXQgZG8gbm90IGFkdmFuY2UKKyAqIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6IHNpZ25lZCAxNiBiaXQgaW50ZWdlci4KKyAqCisgKiBTaW5jZTogMC4xMC4yNQorICovCitndWludDE2IGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2xlX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7CitndWludDE2IGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7CitndWludDE2IGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQxNl9sZV91bmNoZWNrZWQgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOworZ3VpbnQxNiBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfYmVfdW5jaGVja2VkIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKK2dpbnQxNiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2xlX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7CitnaW50MTYgZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9iZV91bmNoZWNrZWQgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOworZ2ludDE2IGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2xlX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7CitnaW50MTYgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfYmVfdW5jaGVja2VkIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKKworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9sZV91bmNoZWNrZWQ6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKgorICogUmVhZCBhbiB1bnNpZ25lZCAyNCBiaXQgaW50ZWdlciBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCisgKiBpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIgYW5kIHVwZGF0ZSB0aGUKKyAqIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogdW5zaWduZWQgMjQgYml0IGludGVnZXIgKGFzIGd1aW50MzIpCisgKgorICogU2luY2U6IDAuMTAuMjUKKyAqLworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfbGVfdW5jaGVja2VkOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICoKKyAqIFJlYWQgYW4gdW5zaWduZWQgMjQgYml0IGludGVnZXIgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZworICogaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyLCBidXQgZG8gbm90IGFkdmFuY2UKKyAqIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6IHVuc2lnbmVkIDI0IGJpdCBpbnRlZ2VyIChhcyBndWludDMyKQorICoKKyAqIFNpbmNlOiAwLjEwLjI1CisgKi8KKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfYmVfdW5jaGVja2VkOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICoKKyAqIFJlYWQgYW4gdW5zaWduZWQgMjQgYml0IGludGVnZXIgaW4gYmlnIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZworICogaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyIGFuZCB1cGRhdGUgdGhlCisgKiBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6IHVuc2lnbmVkIDI0IGJpdCBpbnRlZ2VyIChhcyBndWludDMyKQorICoKKyAqIFNpbmNlOiAwLjEwLjI1CisgKi8KKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2JlX3VuY2hlY2tlZDoKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqCisgKiBSZWFkIGFuIHVuc2lnbmVkIDI0IGJpdCBpbnRlZ2VyIGluIGJpZyBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKKyAqIGlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciwgYnV0IGRvIG5vdCBhZHZhbmNlCisgKiB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiB1bnNpZ25lZCAyNCBiaXQgaW50ZWdlciAoYXMgZ3VpbnQzMikKKyAqCisgKiBTaW5jZTogMC4xMC4yNQorICovCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfbGVfdW5jaGVja2VkOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICoKKyAqIFJlYWQgYSBzaWduZWQgMjQgYml0IGludGVnZXIgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZworICogaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyIGFuZCB1cGRhdGUgdGhlCisgKiBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6IHNpZ25lZCAyNCBiaXQgaW50ZWdlciAoYXMgZ2ludDMyKQorICoKKyAqIFNpbmNlOiAwLjEwLjI1CisgKi8KKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfbGVfdW5jaGVja2VkOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICoKKyAqIFJlYWQgYSBzaWduZWQgMjQgYml0IGludGVnZXIgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZworICogaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyLCBidXQgZG8gbm90IGFkdmFuY2UKKyAqIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6IHNpZ25lZCAyNCBiaXQgaW50ZWdlciAoYXMgZ2ludDMyKQorICoKKyAqIFNpbmNlOiAwLjEwLjI1CisgKi8KKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9iZV91bmNoZWNrZWQ6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKgorICogUmVhZCBhIHNpZ25lZCAyNCBiaXQgaW50ZWdlciBpbiBiaWcgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCisgKiBpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIgYW5kIHVwZGF0ZSB0aGUKKyAqIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogc2lnbmVkIDI0IGJpdCBpbnRlZ2VyIChhcyBnaW50MzIpCisgKgorICogU2luY2U6IDAuMTAuMjUKKyAqLworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9iZV91bmNoZWNrZWQ6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKgorICogUmVhZCBhIHNpZ25lZCAyNCBiaXQgaW50ZWdlciBpbiBiaWcgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCisgKiBpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZQorICogdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogc2lnbmVkIDI0IGJpdCBpbnRlZ2VyIChhcyBnaW50MzIpCisgKgorICogU2luY2U6IDAuMTAuMjUKKyAqLworZ3VpbnQzMiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9sZV91bmNoZWNrZWQgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOworZ3VpbnQzMiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9iZV91bmNoZWNrZWQgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOworZ3VpbnQzMiBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfbGVfdW5jaGVja2VkIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKK2d1aW50MzIgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2JlX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7CitnaW50MzIgZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9sZV91bmNoZWNrZWQgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOworZ2ludDMyIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfYmVfdW5jaGVja2VkIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKK2dpbnQzMiBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9sZV91bmNoZWNrZWQgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOworZ2ludDMyIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2JlX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7CisKKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfbGVfdW5jaGVja2VkOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICoKKyAqIFJlYWQgYW4gdW5zaWduZWQgMzIgYml0IGludGVnZXIgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZworICogaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyIGFuZCB1cGRhdGUgdGhlCisgKiBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6IHVuc2lnbmVkIDMyIGJpdCBpbnRlZ2VyLgorICoKKyAqIFNpbmNlOiAwLjEwLjI1CisgKi8KKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2xlX3VuY2hlY2tlZDoKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqCisgKiBSZWFkIGFuIHVuc2lnbmVkIDMyIGJpdCBpbnRlZ2VyIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKKyAqIGlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciwgYnV0IGRvIG5vdCBhZHZhbmNlCisgKiB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiB1bnNpZ25lZCAzMiBiaXQgaW50ZWdlci4KKyAqCisgKiBTaW5jZTogMC4xMC4yNQorICovCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlX3VuY2hlY2tlZDoKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqCisgKiBSZWFkIGFuIHVuc2lnbmVkIDMyIGJpdCBpbnRlZ2VyIGluIGJpZyBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKKyAqIGlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciBhbmQgdXBkYXRlIHRoZQorICogY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiB1bnNpZ25lZCAzMiBiaXQgaW50ZWdlci4KKyAqCisgKiBTaW5jZTogMC4xMC4yNQorICovCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9iZV91bmNoZWNrZWQ6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKgorICogUmVhZCBhbiB1bnNpZ25lZCAzMiBiaXQgaW50ZWdlciBpbiBiaWcgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCisgKiBpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZQorICogdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogdW5zaWduZWQgMzIgYml0IGludGVnZXIuCisgKgorICogU2luY2U6IDAuMTAuMjUKKyAqLworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2xlX3VuY2hlY2tlZDoKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqCisgKiBSZWFkIGEgc2lnbmVkIDMyIGJpdCBpbnRlZ2VyIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKKyAqIGlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciBhbmQgdXBkYXRlIHRoZQorICogY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiBzaWduZWQgMzIgYml0IGludGVnZXIuCisgKgorICogU2luY2U6IDAuMTAuMjUKKyAqLworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9sZV91bmNoZWNrZWQ6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKgorICogUmVhZCBhIHNpZ25lZCAzMiBiaXQgaW50ZWdlciBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCisgKiBpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZQorICogdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogc2lnbmVkIDMyIGJpdCBpbnRlZ2VyLgorICoKKyAqIFNpbmNlOiAwLjEwLjI1CisgKi8KKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9iZV91bmNoZWNrZWQ6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKgorICogUmVhZCBhIHNpZ25lZCAzMiBiaXQgaW50ZWdlciBpbiBiaWcgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCisgKiBpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIgYW5kIHVwZGF0ZSB0aGUKKyAqIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogc2lnbmVkIDMyIGJpdCBpbnRlZ2VyLgorICoKKyAqIFNpbmNlOiAwLjEwLjI1CisgKi8KKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfYmVfdW5jaGVja2VkOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICoKKyAqIFJlYWQgYSBzaWduZWQgMzIgYml0IGludGVnZXIgaW4gYmlnIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZworICogaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyLCBidXQgZG8gbm90IGFkdmFuY2UKKyAqIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6IHNpZ25lZCAzMiBiaXQgaW50ZWdlci4KKyAqCisgKiBTaW5jZTogMC4xMC4yNQorICovCitndWludDMyIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7CitndWludDMyIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7CitndWludDMyIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9sZV91bmNoZWNrZWQgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOworZ3VpbnQzMiBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfYmVfdW5jaGVja2VkIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKK2dpbnQzMiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2xlX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7CitnaW50MzIgZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9iZV91bmNoZWNrZWQgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOworZ2ludDMyIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2xlX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7CitnaW50MzIgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfYmVfdW5jaGVja2VkIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKKworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9sZV91bmNoZWNrZWQ6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKgorICogUmVhZCBhbiB1bnNpZ25lZCA2NCBiaXQgaW50ZWdlciBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCisgKiBpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIgYW5kIHVwZGF0ZSB0aGUKKyAqIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogdW5zaWduZWQgNjQgYml0IGludGVnZXIuCisgKgorICogU2luY2U6IDAuMTAuMjUKKyAqLworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfbGVfdW5jaGVja2VkOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICoKKyAqIFJlYWQgYW4gdW5zaWduZWQgNjQgYml0IGludGVnZXIgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZworICogaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyLCBidXQgZG8gbm90IGFkdmFuY2UKKyAqIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6IHVuc2lnbmVkIDY0IGJpdCBpbnRlZ2VyLgorICoKKyAqIFNpbmNlOiAwLjEwLjI1CisgKi8KKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmVfdW5jaGVja2VkOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICoKKyAqIFJlYWQgYW4gdW5zaWduZWQgNjQgYml0IGludGVnZXIgaW4gYmlnIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZworICogaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyIGFuZCB1cGRhdGUgdGhlCisgKiBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6IHVuc2lnbmVkIDY0IGJpdCBpbnRlZ2VyLgorICoKKyAqIFNpbmNlOiAwLjEwLjI1CisgKi8KKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2JlX3VuY2hlY2tlZDoKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqCisgKiBSZWFkIGFuIHVuc2lnbmVkIDY0IGJpdCBpbnRlZ2VyIGluIGJpZyBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKKyAqIGlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciwgYnV0IGRvIG5vdCBhZHZhbmNlCisgKiB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiB1bnNpZ25lZCA2NCBiaXQgaW50ZWdlci4KKyAqCisgKiBTaW5jZTogMC4xMC4yNQorICovCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfbGVfdW5jaGVja2VkOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICoKKyAqIFJlYWQgYSBzaWduZWQgNjQgYml0IGludGVnZXIgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZworICogaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyIGFuZCB1cGRhdGUgdGhlCisgKiBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6IHNpZ25lZCA2NCBiaXQgaW50ZWdlci4KKyAqCisgKiBTaW5jZTogMC4xMC4yNQorICovCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2xlX3VuY2hlY2tlZDoKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqCisgKiBSZWFkIGEgc2lnbmVkIDY0IGJpdCBpbnRlZ2VyIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKKyAqIGlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciwgYnV0IGRvIG5vdCBhZHZhbmNlCisgKiB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiBzaWduZWQgNjQgYml0IGludGVnZXIuCisgKgorICogU2luY2U6IDAuMTAuMjUKKyAqLworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2JlX3VuY2hlY2tlZDoKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqCisgKiBSZWFkIGEgc2lnbmVkIDY0IGJpdCBpbnRlZ2VyIGluIGJpZyBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKKyAqIGlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciBhbmQgdXBkYXRlIHRoZQorICogY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiBzaWduZWQgNjQgYml0IGludGVnZXIuCisgKgorICogU2luY2U6IDAuMTAuMjUKKyAqLworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9iZV91bmNoZWNrZWQ6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKgorICogUmVhZCBhIHNpZ25lZCA2NCBiaXQgaW50ZWdlciBpbiBiaWcgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCisgKiBpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZQorICogdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogc2lnbmVkIDY0IGJpdCBpbnRlZ2VyLgorICoKKyAqIFNpbmNlOiAwLjEwLjI1CisgKi8KK2d1aW50NjQgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfbGVfdW5jaGVja2VkIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKK2d1aW50NjQgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmVfdW5jaGVja2VkIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKK2d1aW50NjQgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2xlX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7CitndWludDY0IGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9iZV91bmNoZWNrZWQgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOworZ2ludDY0IGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfbGVfdW5jaGVja2VkIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKK2dpbnQ2NCBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2JlX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7CitnaW50NjQgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfbGVfdW5jaGVja2VkIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKK2dpbnQ2NCBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9iZV91bmNoZWNrZWQgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOworCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9sZV91bmNoZWNrZWQ6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKgorICogUmVhZCBhIDMyIGJpdCBsaXR0bGUgZW5kaWFuIGZsb2F0IHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoCisgKiBkYXRhIGF2YWlsYWJsZSBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6IGZsb2F0aW5nIHBvaW50IHZhbHVlIHJlYWQKKyAqCisgKiBTaW5jZTogMC4xMC4yNQorICovCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfbGVfdW5jaGVja2VkOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICoKKyAqIFJlYWQgYSAzMiBiaXQgbGl0dGxlIGVuZGlhbiBmbG9hdCB3aXRob3V0IGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaAorICogZGF0YSBhdmFpbGFibGUsIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6IGZsb2F0aW5nIHBvaW50IHZhbHVlIHJlYWQKKyAqCisgKiBTaW5jZTogMC4xMC4yNQorICovCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9iZV91bmNoZWNrZWQ6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKgorICogUmVhZCBhIDMyIGJpdCBiaWcgZW5kaWFuIGZsb2F0IHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoCisgKiBkYXRhIGF2YWlsYWJsZSBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6IGZsb2F0aW5nIHBvaW50IHZhbHVlIHJlYWQKKyAqCisgKiBTaW5jZTogMC4xMC4yNQorICovCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfYmVfdW5jaGVja2VkOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICoKKyAqIFJlYWQgYSAzMiBiaXQgYmlnIGVuZGlhbiBmbG9hdCB3aXRob3V0IGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaAorICogZGF0YSBhdmFpbGFibGUsIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6IGZsb2F0aW5nIHBvaW50IHZhbHVlIHJlYWQKKyAqCisgKiBTaW5jZTogMC4xMC4yNQorICovCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9sZV91bmNoZWNrZWQ6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKgorICogUmVhZCBhIDY0IGJpdCBsaXR0bGUgZW5kaWFuIGZsb2F0IHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoCisgKiBkYXRhIGF2YWlsYWJsZSBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6IGRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgdmFsdWUgcmVhZAorICoKKyAqIFNpbmNlOiAwLjEwLjI1CisgKi8KKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9sZV91bmNoZWNrZWQ6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKgorICogUmVhZCBhIDY0IGJpdCBsaXR0bGUgZW5kaWFuIGZsb2F0IHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoCisgKiBkYXRhIGF2YWlsYWJsZSwgYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCB2YWx1ZSByZWFkCisgKgorICogU2luY2U6IDAuMTAuMjUKKyAqLworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfYmVfdW5jaGVja2VkOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICoKKyAqIFJlYWQgYSA2NCBiaXQgYmlnIGVuZGlhbiBmbG9hdCB3aXRob3V0IGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaAorICogZGF0YSBhdmFpbGFibGUgYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHZhbHVlIHJlYWQKKyAqCisgKiBTaW5jZTogMC4xMC4yNQorICovCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfYmVfdW5jaGVja2VkOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICoKKyAqIFJlYWQgYSA2NCBiaXQgYmlnIGVuZGlhbiBmbG9hdCB3aXRob3V0IGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaAorICogZGF0YSBhdmFpbGFibGUsIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6IGRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgdmFsdWUgcmVhZAorICoKKyAqIFNpbmNlOiAwLjEwLjI1CisgKi8KKworZ2Zsb2F0ICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0MzJfbGVfdW5jaGVja2VkIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKK2dmbG9hdCAgZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDMyX2JlX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7CitnZG91YmxlIGdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9sZV91bmNoZWNrZWQgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOworZ2RvdWJsZSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfYmVfdW5jaGVja2VkIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKKworZ2Zsb2F0ICBnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2xlX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7CitnZmxvYXQgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfYmVfdW5jaGVja2VkIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKK2dkb3VibGUgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9sZV91bmNoZWNrZWQgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOworZ2RvdWJsZSBnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2JlX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7CisKKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YV91bmNoZWNrZWQ6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBhIGNvbnN0YW50IHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZGF0YSBwb3NpdGlvbgorICoKKyAqIFNpbmNlOiAwLjEwLjI1CisgKi8KK2NvbnN0IGd1aW50OCAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2RhdGFfdW5jaGVja2VkIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhX3VuY2hlY2tlZDoKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqIEBzaXplOiBTaXplIGluIGJ5dGVzCisgKgorICogUmV0dXJucyBhIGNvbnN0YW50IHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZGF0YSBwb3NpdGlvbiB3aXRob3V0IGNoZWNraW5nCisgKiBpZiBhdCBsZWFzdCBAc2l6ZSBieXRlcyBhcmUgbGVmdC4gQWR2YW5jZXMgdGhlIGN1cnJlbnQgcmVhZCBwb3NpdGlvbiBieQorICogQHNpemUgYnl0ZXMuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpIChhcnJheSBsZW5ndGg9c2l6ZSk6IGEgY29uc3RhbnQgcG9pbnRlciB0byB0aGUKKyAqICAgICBjdXJyZW50IGRhdGEgcG9zaXRpb24uCisgKgorICogU2luY2U6IDAuMTAuMjUKKyAqLworY29uc3QgZ3VpbnQ4ICogZ3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlciwgZ3VpbnQgc2l6ZSk7CisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9kdXBfZGF0YV91bmNoZWNrZWQ6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKiBAc2l6ZTogU2l6ZSBpbiBieXRlcworICoKKyAqIFJldHVybnMgYSBuZXdseS1hbGxvY2F0ZWQgY29weSBvZiB0aGUgZGF0YSBhdCB0aGUgY3VycmVudCBkYXRhIHBvc2l0aW9uCisgKiB3aXRob3V0IGNoZWNraW5nIGlmIGF0IGxlYXN0IEBzaXplIGJ5dGVzIGFyZSBsZWZ0LiBBZHZhbmNlcyB0aGUgY3VycmVudCByZWFkCisgKiBwb3NpdGlvbiBieSBAc2l6ZSBieXRlcy4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnX2ZyZWUKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKGFycmF5IGxlbmd0aD1zaXplKTogYSBuZXdseS1hbGxvY2F0ZWQgY29weSBvZiB0aGUKKyAqICAgICBkYXRhIEBzaXplIGJ5dGVzIGluIHNpemUuIEZyZWUgd2l0aCBnX2ZyZWUoKSB3aGVuIG5vIGxvbmdlciBuZWVkZWQuCisgKgorICogU2luY2U6IDAuMTAuMjUKKyAqLworZ3VpbnQ4ICogZ3N0X2J5dGVfcmVhZGVyX2R1cF9kYXRhX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlciwgZ3VpbnQgc2l6ZSk7CisKZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5jIGIvbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4NzVlNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5jCkBAIC0wLDAgKzEsMTI2MyBAQAorLyogR1N0cmVhbWVyIGJ5dGUgcmVhZGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPi4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2RlZmluZSBHU1RfQllURV9SRUFERVJfRElTQUJMRV9JTkxJTkVTCisjaW5jbHVkZSAiZ3N0Ynl0ZXJlYWRlci5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qKgorICogU0VDVElPTjpnc3RieXRlcmVhZGVyCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IFJlYWRzIGRpZmZlcmVudCBpbnRlZ2VyLCBzdHJpbmcgYW5kIGZsb2F0aW5nIHBvaW50CisgKiAgICAgdHlwZXMgZnJvbSBhIG1lbW9yeSBidWZmZXIKKyAqCisgKiAjR3N0Qnl0ZVJlYWRlciBwcm92aWRlcyBhIGJ5dGUgcmVhZGVyIHRoYXQgY2FuIHJlYWQgZGlmZmVyZW50IGludGVnZXIgYW5kCisgKiBmbG9hdGluZyBwb2ludCB0eXBlcyBmcm9tIGEgbWVtb3J5IGJ1ZmZlci4gSXQgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciByZWFkaW5nCisgKiBzaWduZWQvdW5zaWduZWQsIGxpdHRsZS9iaWcgZW5kaWFuIGludGVnZXJzIG9mIDgsIDE2LCAyNCwgMzIgYW5kIDY0IGJpdHMKKyAqIGFuZCBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgbGl0dGxlL2JpZyBlbmRpYW4gZmxvYXRpbmcgcG9pbnRzIG51bWJlcnMgb2YKKyAqIDMyIGFuZCA2NCBiaXRzLiBJdCBhbHNvIHByb3ZpZGVzIGZ1bmN0aW9ucyB0byByZWFkIE5VTC10ZXJtaW5hdGVkIHN0cmluZ3MKKyAqIGluIHZhcmlvdXMgY2hhcmFjdGVyIGVuY29kaW5ncy4KKyAqLworCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9uZXc6CisgKiBAZGF0YTogKGluKSAodHJhbnNmZXIgbm9uZSkgKGFycmF5IGxlbmd0aD1zaXplKTogZGF0YSBmcm9tIHdoaWNoIHRoZQorICogICAgICNHc3RCeXRlUmVhZGVyIHNob3VsZCByZWFkCisgKiBAc2l6ZTogU2l6ZSBvZiBAZGF0YSBpbiBieXRlcworICoKKyAqIENyZWF0ZSBhIG5ldyAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZSwgd2hpY2ggd2lsbCByZWFkIGZyb20gQGRhdGEuCisgKgorICogRnJlZS1mdW5jdGlvbjogZ3N0X2J5dGVfcmVhZGVyX2ZyZWUKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKgorICogU2luY2U6IDAuMTAuMjIKKyAqLworR3N0Qnl0ZVJlYWRlciAqCitnc3RfYnl0ZV9yZWFkZXJfbmV3IChjb25zdCBndWludDggKiBkYXRhLCBndWludCBzaXplKQoreworICBHc3RCeXRlUmVhZGVyICpyZXQgPSBnX3NsaWNlX25ldzAgKEdzdEJ5dGVSZWFkZXIpOworCisgIHJldC0+ZGF0YSA9IGRhdGE7CisgIHJldC0+c2l6ZSA9IHNpemU7CisKKyAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfZnJlZToKKyAqIEByZWFkZXI6IChpbikgKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKgorICogRnJlZXMgYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZSwgd2hpY2ggd2FzIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5CisgKiBnc3RfYnl0ZV9yZWFkZXJfbmV3KCkuCisgKiAKKyAqIFNpbmNlOiAwLjEwLjIyCisgKi8KK3ZvaWQKK2dzdF9ieXRlX3JlYWRlcl9mcmVlIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKQoreworICBnX3JldHVybl9pZl9mYWlsIChyZWFkZXIgIT0gTlVMTCk7CisKKyAgZ19zbGljZV9mcmVlIChHc3RCeXRlUmVhZGVyLCByZWFkZXIpOworfQorCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9pbml0OgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICogQGRhdGE6IChpbikgKHRyYW5zZmVyIG5vbmUpIChhcnJheSBsZW5ndGg9c2l6ZSk6IGRhdGEgZnJvbSB3aGljaAorICogICAgIHRoZSAjR3N0Qnl0ZVJlYWRlciBzaG91bGQgcmVhZAorICogQHNpemU6IFNpemUgb2YgQGRhdGEgaW4gYnl0ZXMKKyAqCisgKiBJbml0aWFsaXplcyBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlIHRvIHJlYWQgZnJvbSBAZGF0YS4gVGhpcyBmdW5jdGlvbgorICogY2FuIGJlIGNhbGxlZCBvbiBhbHJlYWR5IGluaXRpYWxpemVkIGluc3RhbmNlcy4KKyAqIAorICogU2luY2U6IDAuMTAuMjIKKyAqLwordm9pZAorZ3N0X2J5dGVfcmVhZGVyX2luaXQgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsIGNvbnN0IGd1aW50OCAqIGRhdGEsIGd1aW50IHNpemUpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKHJlYWRlciAhPSBOVUxMKTsKKworICByZWFkZXItPmRhdGEgPSBkYXRhOworICByZWFkZXItPnNpemUgPSBzaXplOworICByZWFkZXItPmJ5dGUgPSAwOworfQorCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9zZXRfcG9zOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICogQHBvczogVGhlIG5ldyBwb3NpdGlvbiBpbiBieXRlcworICoKKyAqIFNldHMgdGhlIG5ldyBwb3NpdGlvbiBvZiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlIHRvIEBwb3MgaW4gYnl0ZXMuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHBvc2l0aW9uIGNvdWxkIGJlIHNldCBzdWNjZXNzZnVsbHksICVGQUxTRQorICogb3RoZXJ3aXNlLgorICogCisgKiBTaW5jZTogMC4xMC4yMgorICovCitnYm9vbGVhbgorZ3N0X2J5dGVfcmVhZGVyX3NldF9wb3MgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsIGd1aW50IHBvcykKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHJlYWRlciAhPSBOVUxMLCBGQUxTRSk7CisKKyAgaWYgKHBvcyA+IHJlYWRlci0+c2l6ZSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgcmVhZGVyLT5ieXRlID0gcG9zOworCisgIHJldHVybiBUUlVFOworfQorCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfcG9zOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICoKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZSBpbiBieXRlcy4KKyAqCisgKiBSZXR1cm5zOiBUaGUgY3VycmVudCBwb3NpdGlvbiBvZiBAcmVhZGVyIGluIGJ5dGVzLgorICogCisgKiBTaW5jZTogMC4xMC4yMgorICovCitndWludAorZ3N0X2J5dGVfcmVhZGVyX2dldF9wb3MgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpCit7CisgIHJldHVybiBfZ3N0X2J5dGVfcmVhZGVyX2dldF9wb3NfaW5saW5lIChyZWFkZXIpOworfQorCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICoKKyAqIFJldHVybnMgdGhlIHJlbWFpbmluZyBudW1iZXIgb2YgYnl0ZXMgb2YgYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZS4KKyAqCisgKiBSZXR1cm5zOiBUaGUgcmVtYWluaW5nIG51bWJlciBvZiBieXRlcyBvZiBAcmVhZGVyIGluc3RhbmNlLgorICogCisgKiBTaW5jZTogMC4xMC4yMgorICovCitndWludAorZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpCit7CisgIHJldHVybiBfZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmdfaW5saW5lIChyZWFkZXIpOworfQorCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfc2l6ZToKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqCisgKiBSZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgb2YgYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZS4KKyAqCisgKiBSZXR1cm5zOiBUaGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIG9mIEByZWFkZXIgaW5zdGFuY2UuCisgKiAKKyAqIFNpbmNlOiAwLjEwLjI2CisgKi8KK2d1aW50Citnc3RfYnl0ZV9yZWFkZXJfZ2V0X3NpemUgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpCit7CisgIHJldHVybiBfZ3N0X2J5dGVfcmVhZGVyX2dldF9zaXplX2lubGluZSAocmVhZGVyKTsKK30KKworI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyBfZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmdfaW5saW5lCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfc2l6ZSBfZ3N0X2J5dGVfcmVhZGVyX2dldF9zaXplX2lubGluZQorCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9za2lwOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICogQG5ieXRlczogdGhlIG51bWJlciBvZiBieXRlcyB0byBza2lwCisgKgorICogU2tpcHMgQG5ieXRlcyBieXRlcyBvZiB0aGUgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgQG5ieXRlcyBieXRlcyBjb3VsZCBiZSBza2lwcGVkLCAlRkFMU0Ugb3RoZXJ3aXNlLgorICogCisgKiBTaW5jZTogMC4xMC4yMgorICovCitnYm9vbGVhbgorZ3N0X2J5dGVfcmVhZGVyX3NraXAgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsIGd1aW50IG5ieXRlcykKK3sKKyAgcmV0dXJuIF9nc3RfYnl0ZV9yZWFkZXJfc2tpcF9pbmxpbmUgKHJlYWRlciwgbmJ5dGVzKTsKK30KKworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4OgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ3VpbnQ4IHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqCisgKiBSZWFkIGFuIHVuc2lnbmVkIDggYml0IGludGVnZXIgaW50byBAdmFsIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KKyAqIAorICogU2luY2U6IDAuMTAuMjIKKyAqLworCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50ODoKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2dpbnQ4IHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqCisgKiBSZWFkIGEgc2lnbmVkIDggYml0IGludGVnZXIgaW50byBAdmFsIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KKyAqIAorICogU2luY2U6IDAuMTAuMjIKKyAqLworCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ4OgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ3VpbnQ4IHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqCisgKiBSZWFkIGFuIHVuc2lnbmVkIDggYml0IGludGVnZXIgaW50byBAdmFsIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCisgKiAKKyAqIFNpbmNlOiAwLjEwLjIyCisgKi8KKworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ4OgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ2ludDggdG8gc3RvcmUgdGhlIHJlc3VsdAorICoKKyAqIFJlYWQgYSBzaWduZWQgOCBiaXQgaW50ZWdlciBpbnRvIEB2YWwgYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KKyAqIAorICogU2luY2U6IDAuMTAuMjIKKyAqLworCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2xlOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ3VpbnQxNiB0byBzdG9yZSB0aGUgcmVzdWx0CisgKgorICogUmVhZCBhbiB1bnNpZ25lZCAxNiBiaXQgbGl0dGxlIGVuZGlhbiBpbnRlZ2VyIGludG8gQHZhbAorICogYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgorICogCisgKiBTaW5jZTogMC4xMC4yMgorICovCisKKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9sZToKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2dpbnQxNiB0byBzdG9yZSB0aGUgcmVzdWx0CisgKgorICogUmVhZCBhIHNpZ25lZCAxNiBiaXQgbGl0dGxlIGVuZGlhbiBpbnRlZ2VyIGludG8gQHZhbAorICogYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgorICogCisgKiBTaW5jZTogMC4xMC4yMgorICovCisKKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2xlOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ3VpbnQxNiB0byBzdG9yZSB0aGUgcmVzdWx0CisgKgorICogUmVhZCBhbiB1bnNpZ25lZCAxNiBiaXQgbGl0dGxlIGVuZGlhbiBpbnRlZ2VyIGludG8gQHZhbAorICogYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KKyAqIAorICogU2luY2U6IDAuMTAuMjIKKyAqLworCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2xlOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ2ludDE2IHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqCisgKiBSZWFkIGEgc2lnbmVkIDE2IGJpdCBsaXR0bGUgZW5kaWFuIGludGVnZXIgaW50byBAdmFsCisgKiBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgorICogCisgKiBTaW5jZTogMC4xMC4yMgorICovCisKKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmU6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNndWludDE2IHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqCisgKiBSZWFkIGFuIHVuc2lnbmVkIDE2IGJpdCBiaWcgZW5kaWFuIGludGVnZXIgaW50byBAdmFsCisgKiBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCisgKiAKKyAqIFNpbmNlOiAwLjEwLjIyCisgKi8KKworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2JlOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ2ludDE2IHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqCisgKiBSZWFkIGEgc2lnbmVkIDE2IGJpdCBiaWcgZW5kaWFuIGludGVnZXIgaW50byBAdmFsCisgKiBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCisgKiAKKyAqIFNpbmNlOiAwLjEwLjIyCisgKi8KKworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfYmU6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNndWludDE2IHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqCisgKiBSZWFkIGFuIHVuc2lnbmVkIDE2IGJpdCBiaWcgZW5kaWFuIGludGVnZXIgaW50byBAdmFsCisgKiBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgorICogCisgKiBTaW5jZTogMC4xMC4yMgorICovCisKKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfYmU6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNnaW50MTYgdG8gc3RvcmUgdGhlIHJlc3VsdAorICoKKyAqIFJlYWQgYSBzaWduZWQgMTYgYml0IGJpZyBlbmRpYW4gaW50ZWdlciBpbnRvIEB2YWwKKyAqIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCisgKiAKKyAqIFNpbmNlOiAwLjEwLjIyCisgKi8KKworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9sZToKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2d1aW50MzIgdG8gc3RvcmUgdGhlIHJlc3VsdAorICoKKyAqIFJlYWQgYW4gdW5zaWduZWQgMjQgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIEB2YWwKKyAqIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KKyAqIAorICogU2luY2U6IDAuMTAuMjIKKyAqLworCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfbGU6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNnaW50MzIgdG8gc3RvcmUgdGhlIHJlc3VsdAorICoKKyAqIFJlYWQgYSBzaWduZWQgMjQgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIEB2YWwKKyAqIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KKyAqIAorICogU2luY2U6IDAuMTAuMjIKKyAqLworCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9sZToKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2d1aW50MzIgdG8gc3RvcmUgdGhlIHJlc3VsdAorICoKKyAqIFJlYWQgYW4gdW5zaWduZWQgMjQgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIEB2YWwKKyAqIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCisgKiAKKyAqIFNpbmNlOiAwLjEwLjIyCisgKi8KKworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9sZToKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2dpbnQzMiB0byBzdG9yZSB0aGUgcmVzdWx0CisgKgorICogUmVhZCBhIHNpZ25lZCAyNCBiaXQgbGl0dGxlIGVuZGlhbiBpbnRlZ2VyIGludG8gQHZhbAorICogYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KKyAqIAorICogU2luY2U6IDAuMTAuMjIKKyAqLworCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2JlOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ3VpbnQzMiB0byBzdG9yZSB0aGUgcmVzdWx0CisgKgorICogUmVhZCBhbiB1bnNpZ25lZCAyNCBiaXQgYmlnIGVuZGlhbiBpbnRlZ2VyIGludG8gQHZhbAorICogYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgorICogCisgKiBTaW5jZTogMC4xMC4yMgorICovCisKKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9iZToKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2dpbnQzMiB0byBzdG9yZSB0aGUgcmVzdWx0CisgKgorICogUmVhZCBhIHNpZ25lZCAyNCBiaXQgYmlnIGVuZGlhbiBpbnRlZ2VyIGludG8gQHZhbAorICogYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgorICogCisgKiBTaW5jZTogMC4xMC4yMgorICovCisKKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2JlOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ3VpbnQzMiB0byBzdG9yZSB0aGUgcmVzdWx0CisgKgorICogUmVhZCBhbiB1bnNpZ25lZCAyNCBiaXQgYmlnIGVuZGlhbiBpbnRlZ2VyIGludG8gQHZhbAorICogYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KKyAqIAorICogU2luY2U6IDAuMTAuMjIKKyAqLworCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2JlOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ2ludDMyIHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqCisgKiBSZWFkIGEgc2lnbmVkIDI0IGJpdCBiaWcgZW5kaWFuIGludGVnZXIgaW50byBAdmFsCisgKiBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgorICogCisgKiBTaW5jZTogMC4xMC4yMgorICovCisKKworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9sZToKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2d1aW50MzIgdG8gc3RvcmUgdGhlIHJlc3VsdAorICoKKyAqIFJlYWQgYW4gdW5zaWduZWQgMzIgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIEB2YWwKKyAqIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KKyAqIAorICogU2luY2U6IDAuMTAuMjIKKyAqLworCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfbGU6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNnaW50MzIgdG8gc3RvcmUgdGhlIHJlc3VsdAorICoKKyAqIFJlYWQgYSBzaWduZWQgMzIgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIEB2YWwKKyAqIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KKyAqIAorICogU2luY2U6IDAuMTAuMjIKKyAqLworCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9sZToKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2d1aW50MzIgdG8gc3RvcmUgdGhlIHJlc3VsdAorICoKKyAqIFJlYWQgYW4gdW5zaWduZWQgMzIgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIEB2YWwKKyAqIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCisgKiAKKyAqIFNpbmNlOiAwLjEwLjIyCisgKi8KKworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9sZToKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2dpbnQzMiB0byBzdG9yZSB0aGUgcmVzdWx0CisgKgorICogUmVhZCBhIHNpZ25lZCAzMiBiaXQgbGl0dGxlIGVuZGlhbiBpbnRlZ2VyIGludG8gQHZhbAorICogYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KKyAqIAorICogU2luY2U6IDAuMTAuMjIKKyAqLworCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ3VpbnQzMiB0byBzdG9yZSB0aGUgcmVzdWx0CisgKgorICogUmVhZCBhbiB1bnNpZ25lZCAzMiBiaXQgYmlnIGVuZGlhbiBpbnRlZ2VyIGludG8gQHZhbAorICogYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgorICogCisgKiBTaW5jZTogMC4xMC4yMgorICovCisKKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9iZToKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2dpbnQzMiB0byBzdG9yZSB0aGUgcmVzdWx0CisgKgorICogUmVhZCBhIHNpZ25lZCAzMiBiaXQgYmlnIGVuZGlhbiBpbnRlZ2VyIGludG8gQHZhbAorICogYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgorICogCisgKiBTaW5jZTogMC4xMC4yMgorICovCisKKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2JlOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ3VpbnQzMiB0byBzdG9yZSB0aGUgcmVzdWx0CisgKgorICogUmVhZCBhbiB1bnNpZ25lZCAzMiBiaXQgYmlnIGVuZGlhbiBpbnRlZ2VyIGludG8gQHZhbAorICogYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KKyAqIAorICogU2luY2U6IDAuMTAuMjIKKyAqLworCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2JlOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ2ludDMyIHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqCisgKiBSZWFkIGEgc2lnbmVkIDMyIGJpdCBiaWcgZW5kaWFuIGludGVnZXIgaW50byBAdmFsCisgKiBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgorICogCisgKiBTaW5jZTogMC4xMC4yMgorICovCisKKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfbGU6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNndWludDY0IHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqCisgKiBSZWFkIGFuIHVuc2lnbmVkIDY0IGJpdCBsaXR0bGUgZW5kaWFuIGludGVnZXIgaW50byBAdmFsCisgKiBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCisgKiAKKyAqIFNpbmNlOiAwLjEwLjIyCisgKi8KKworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2xlOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ2ludDY0IHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqCisgKiBSZWFkIGEgc2lnbmVkIDY0IGJpdCBsaXR0bGUgZW5kaWFuIGludGVnZXIgaW50byBAdmFsCisgKiBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCisgKiAKKyAqIFNpbmNlOiAwLjEwLjIyCisgKi8KKworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfbGU6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNndWludDY0IHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqCisgKiBSZWFkIGFuIHVuc2lnbmVkIDY0IGJpdCBsaXR0bGUgZW5kaWFuIGludGVnZXIgaW50byBAdmFsCisgKiBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgorICogCisgKiBTaW5jZTogMC4xMC4yMgorICovCisKKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfbGU6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNnaW50NjQgdG8gc3RvcmUgdGhlIHJlc3VsdAorICoKKyAqIFJlYWQgYSBzaWduZWQgNjQgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIEB2YWwKKyAqIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCisgKiAKKyAqIFNpbmNlOiAwLjEwLjIyCisgKi8KKworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9iZToKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2d1aW50NjQgdG8gc3RvcmUgdGhlIHJlc3VsdAorICoKKyAqIFJlYWQgYW4gdW5zaWduZWQgNjQgYml0IGJpZyBlbmRpYW4gaW50ZWdlciBpbnRvIEB2YWwKKyAqIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KKyAqIAorICogU2luY2U6IDAuMTAuMjIKKyAqLworCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfYmU6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNnaW50NjQgdG8gc3RvcmUgdGhlIHJlc3VsdAorICoKKyAqIFJlYWQgYSBzaWduZWQgNjQgYml0IGJpZyBlbmRpYW4gaW50ZWdlciBpbnRvIEB2YWwKKyAqIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KKyAqIAorICogU2luY2U6IDAuMTAuMjIKKyAqLworCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9iZToKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2d1aW50NjQgdG8gc3RvcmUgdGhlIHJlc3VsdAorICoKKyAqIFJlYWQgYW4gdW5zaWduZWQgNjQgYml0IGJpZyBlbmRpYW4gaW50ZWdlciBpbnRvIEB2YWwKKyAqIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCisgKiAKKyAqIFNpbmNlOiAwLjEwLjIyCisgKi8KKworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9iZToKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2dpbnQ2NCB0byBzdG9yZSB0aGUgcmVzdWx0CisgKgorICogUmVhZCBhIHNpZ25lZCA2NCBiaXQgYmlnIGVuZGlhbiBpbnRlZ2VyIGludG8gQHZhbAorICogYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KKyAqIAorICogU2luY2U6IDAuMTAuMjIKKyAqLworCisjZGVmaW5lIEdTVF9CWVRFX1JFQURFUl9QRUVLX0dFVChiaXRzLHR5cGUsbmFtZSkgXAorZ2Jvb2xlYW4gXAorZ3N0X2J5dGVfcmVhZGVyX2dldF8jI25hbWUgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsIHR5cGUgKiB2YWwpIFwKK3sgXAorICByZXR1cm4gX2dzdF9ieXRlX3JlYWRlcl9nZXRfIyNuYW1lIyNfaW5saW5lIChyZWFkZXIsIHZhbCk7IFwKK30gXAorXAorZ2Jvb2xlYW4gXAorZ3N0X2J5dGVfcmVhZGVyX3BlZWtfIyNuYW1lIChjb25zdCBHc3RCeXRlUmVhZGVyICogcmVhZGVyLCB0eXBlICogdmFsKSBcCit7IFwKKyAgcmV0dXJuIF9nc3RfYnl0ZV9yZWFkZXJfcGVla18jI25hbWUjI19pbmxpbmUgKHJlYWRlciwgdmFsKTsgXAorfQorCisvKiAqSU5ERU5ULU9GRiogKi8KKworR1NUX0JZVEVfUkVBREVSX1BFRUtfR0VUKDgsZ3VpbnQ4LHVpbnQ4KQorR1NUX0JZVEVfUkVBREVSX1BFRUtfR0VUKDgsZ2ludDgsaW50OCkKKworR1NUX0JZVEVfUkVBREVSX1BFRUtfR0VUKDE2LGd1aW50MTYsdWludDE2X2xlKQorR1NUX0JZVEVfUkVBREVSX1BFRUtfR0VUKDE2LGd1aW50MTYsdWludDE2X2JlKQorR1NUX0JZVEVfUkVBREVSX1BFRUtfR0VUKDE2LGdpbnQxNixpbnQxNl9sZSkKK0dTVF9CWVRFX1JFQURFUl9QRUVLX0dFVCgxNixnaW50MTYsaW50MTZfYmUpCisKK0dTVF9CWVRFX1JFQURFUl9QRUVLX0dFVCgyNCxndWludDMyLHVpbnQyNF9sZSkKK0dTVF9CWVRFX1JFQURFUl9QRUVLX0dFVCgyNCxndWludDMyLHVpbnQyNF9iZSkKK0dTVF9CWVRFX1JFQURFUl9QRUVLX0dFVCgyNCxnaW50MzIsaW50MjRfbGUpCitHU1RfQllURV9SRUFERVJfUEVFS19HRVQoMjQsZ2ludDMyLGludDI0X2JlKQorCitHU1RfQllURV9SRUFERVJfUEVFS19HRVQoMzIsZ3VpbnQzMix1aW50MzJfbGUpCitHU1RfQllURV9SRUFERVJfUEVFS19HRVQoMzIsZ3VpbnQzMix1aW50MzJfYmUpCitHU1RfQllURV9SRUFERVJfUEVFS19HRVQoMzIsZ2ludDMyLGludDMyX2xlKQorR1NUX0JZVEVfUkVBREVSX1BFRUtfR0VUKDMyLGdpbnQzMixpbnQzMl9iZSkKKworR1NUX0JZVEVfUkVBREVSX1BFRUtfR0VUKDY0LGd1aW50NjQsdWludDY0X2xlKQorR1NUX0JZVEVfUkVBREVSX1BFRUtfR0VUKDY0LGd1aW50NjQsdWludDY0X2JlKQorR1NUX0JZVEVfUkVBREVSX1BFRUtfR0VUKDY0LGdpbnQ2NCxpbnQ2NF9sZSkKK0dTVF9CWVRFX1JFQURFUl9QRUVLX0dFVCg2NCxnaW50NjQsaW50NjRfYmUpCisKKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDMyX2xlOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ2Zsb2F0IHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqCisgKiBSZWFkIGEgMzIgYml0IGxpdHRsZSBlbmRpYW4gZmxvYXRpbmcgcG9pbnQgdmFsdWUgaW50byBAdmFsCisgKiBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCisgKiAKKyAqIFNpbmNlOiAwLjEwLjIyCisgKi8KKworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2xlOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ2Zsb2F0IHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqCisgKiBSZWFkIGEgMzIgYml0IGxpdHRsZSBlbmRpYW4gZmxvYXRpbmcgcG9pbnQgdmFsdWUgaW50byBAdmFsCisgKiBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgorICogCisgKiBTaW5jZTogMC4xMC4yMgorICovCisKKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDMyX2JlOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ2Zsb2F0IHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqCisgKiBSZWFkIGEgMzIgYml0IGJpZyBlbmRpYW4gZmxvYXRpbmcgcG9pbnQgdmFsdWUgaW50byBAdmFsCisgKiBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCisgKiAKKyAqIFNpbmNlOiAwLjEwLjIyCisgKi8KKworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2JlOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ2Zsb2F0IHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqCisgKiBSZWFkIGEgMzIgYml0IGJpZyBlbmRpYW4gZmxvYXRpbmcgcG9pbnQgdmFsdWUgaW50byBAdmFsCisgKiBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgorICogCisgKiBTaW5jZTogMC4xMC4yMgorICovCisKKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDY0X2xlOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ2RvdWJsZSB0byBzdG9yZSB0aGUgcmVzdWx0CisgKgorICogUmVhZCBhIDY0IGJpdCBsaXR0bGUgZW5kaWFuIGZsb2F0aW5nIHBvaW50IHZhbHVlIGludG8gQHZhbAorICogYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgorICogCisgKiBTaW5jZTogMC4xMC4yMgorICovCisKKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9sZToKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2dkb3VibGUgdG8gc3RvcmUgdGhlIHJlc3VsdAorICoKKyAqIFJlYWQgYSA2NCBiaXQgbGl0dGxlIGVuZGlhbiBmbG9hdGluZyBwb2ludCB2YWx1ZSBpbnRvIEB2YWwKKyAqIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCisgKiAKKyAqIFNpbmNlOiAwLjEwLjIyCisgKi8KKworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfYmU6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNnZG91YmxlIHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqCisgKiBSZWFkIGEgNjQgYml0IGJpZyBlbmRpYW4gZmxvYXRpbmcgcG9pbnQgdmFsdWUgaW50byBAdmFsCisgKiBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCisgKiAKKyAqIFNpbmNlOiAwLjEwLjIyCisgKi8KKworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2JlOgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ2RvdWJsZSB0byBzdG9yZSB0aGUgcmVzdWx0CisgKgorICogUmVhZCBhIDY0IGJpdCBiaWcgZW5kaWFuIGZsb2F0aW5nIHBvaW50IHZhbHVlIGludG8gQHZhbAorICogYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KKyAqIAorICogU2luY2U6IDAuMTAuMjIKKyAqLworCitHU1RfQllURV9SRUFERVJfUEVFS19HRVQoMzIsZ2Zsb2F0LGZsb2F0MzJfbGUpCitHU1RfQllURV9SRUFERVJfUEVFS19HRVQoMzIsZ2Zsb2F0LGZsb2F0MzJfYmUpCitHU1RfQllURV9SRUFERVJfUEVFS19HRVQoNjQsZ2RvdWJsZSxmbG9hdDY0X2xlKQorR1NUX0JZVEVfUkVBREVSX1BFRUtfR0VUKDY0LGdkb3VibGUsZmxvYXQ2NF9iZSkKKworLyogKklOREVOVC1PTiogKi8KKworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGE6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKiBAc2l6ZTogU2l6ZSBpbiBieXRlcworICogQHZhbDogKG91dCkgKHRyYW5zZmVyIG5vbmUpIChhcnJheSBsZW5ndGg9c2l6ZSk6IGFkZHJlc3Mgb2YgYQorICogICAgICNndWludDggcG9pbnRlciB2YXJpYWJsZSBpbiB3aGljaCB0byBzdG9yZSB0aGUgcmVzdWx0CisgKgorICogUmV0dXJucyBhIGNvbnN0YW50IHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZGF0YQorICogcG9zaXRpb24gaWYgYXQgbGVhc3QgQHNpemUgYnl0ZXMgYXJlIGxlZnQgYW5kCisgKiB1cGRhdGVzIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICoKKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgorICogCisgKiBTaW5jZTogMC4xMC4yMgorICovCitnYm9vbGVhbgorZ3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhIChHc3RCeXRlUmVhZGVyICogcmVhZGVyLCBndWludCBzaXplLAorICAgIGNvbnN0IGd1aW50OCAqKiB2YWwpCit7CisgIHJldHVybiBfZ3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhX2lubGluZSAocmVhZGVyLCBzaXplLCB2YWwpOworfQorCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2RhdGE6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKiBAc2l6ZTogU2l6ZSBpbiBieXRlcworICogQHZhbDogKG91dCkgKHRyYW5zZmVyIG5vbmUpIChhcnJheSBsZW5ndGg9c2l6ZSk6IGFkZHJlc3Mgb2YgYQorICogICAgICNndWludDggcG9pbnRlciB2YXJpYWJsZSBpbiB3aGljaCB0byBzdG9yZSB0aGUgcmVzdWx0CisgKgorICogUmV0dXJucyBhIGNvbnN0YW50IHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZGF0YQorICogcG9zaXRpb24gaWYgYXQgbGVhc3QgQHNpemUgYnl0ZXMgYXJlIGxlZnQgYW5kCisgKiBrZWVwcyB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KKyAqIAorICogU2luY2U6IDAuMTAuMjIKKyAqLworZ2Jvb2xlYW4KK2dzdF9ieXRlX3JlYWRlcl9wZWVrX2RhdGEgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsIGd1aW50IHNpemUsCisgICAgY29uc3QgZ3VpbnQ4ICoqIHZhbCkKK3sKKyAgcmV0dXJuIF9nc3RfYnl0ZV9yZWFkZXJfcGVla19kYXRhX2lubGluZSAocmVhZGVyLCBzaXplLCB2YWwpOworfQorCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9kdXBfZGF0YToKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqIEBzaXplOiBTaXplIGluIGJ5dGVzCisgKiBAdmFsOiAob3V0KSAodHJhbnNmZXIgZnVsbCkgKGFycmF5IGxlbmd0aD1zaXplKTogYWRkcmVzcyBvZiBhCisgKiAgICAgI2d1aW50OCBwb2ludGVyIHZhcmlhYmxlIGluIHdoaWNoIHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnX2ZyZWUKKyAqCisgKiBSZXR1cm5zIGEgbmV3bHktYWxsb2NhdGVkIGNvcHkgb2YgdGhlIGN1cnJlbnQgZGF0YQorICogcG9zaXRpb24gaWYgYXQgbGVhc3QgQHNpemUgYnl0ZXMgYXJlIGxlZnQgYW5kCisgKiB1cGRhdGVzIHRoZSBjdXJyZW50IHBvc2l0aW9uLiBGcmVlIHdpdGggZ19mcmVlKCkgd2hlbiBubyBsb25nZXIgbmVlZGVkLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCisgKgorICogU2luY2U6IDAuMTAuMjQKKyAqLworZ2Jvb2xlYW4KK2dzdF9ieXRlX3JlYWRlcl9kdXBfZGF0YSAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlciwgZ3VpbnQgc2l6ZSwgZ3VpbnQ4ICoqIHZhbCkKK3sKKyAgcmV0dXJuIF9nc3RfYnl0ZV9yZWFkZXJfZHVwX2RhdGFfaW5saW5lIChyZWFkZXIsIHNpemUsIHZhbCk7Cit9CisKKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX21hc2tlZF9zY2FuX3VpbnQzMjoKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIKKyAqIEBtYXNrOiBtYXNrIHRvIGFwcGx5IHRvIGRhdGEgYmVmb3JlIG1hdGNoaW5nIGFnYWluc3QgQHBhdHRlcm4KKyAqIEBwYXR0ZXJuOiBwYXR0ZXJuIHRvIG1hdGNoIChhZnRlciBtYXNrIGlzIGFwcGxpZWQpCisgKiBAb2Zmc2V0OiBvZmZzZXQgZnJvbSB3aGljaCB0byBzdGFydCBzY2FubmluZywgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQKKyAqICAgICBwb3NpdGlvbgorICogQHNpemU6IG51bWJlciBvZiBieXRlcyB0byBzY2FuIGZyb20gb2Zmc2V0CisgKgorICogU2NhbiBmb3IgcGF0dGVybiBAcGF0dGVybiB3aXRoIGFwcGxpZWQgbWFzayBAbWFzayBpbiB0aGUgYnl0ZSByZWFkZXIgZGF0YSwKKyAqIHN0YXJ0aW5nIGZyb20gb2Zmc2V0IEBvZmZzZXQgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgKgorICogVGhlIGJ5dGVzIGluIEBwYXR0ZXJuIGFuZCBAbWFzayBhcmUgaW50ZXJwcmV0ZWQgbGVmdC10by1yaWdodCwgcmVnYXJkbGVzcworICogb2YgZW5kaWFubmVzcy4gIEFsbCBmb3VyIGJ5dGVzIG9mIHRoZSBwYXR0ZXJuIG11c3QgYmUgcHJlc2VudCBpbiB0aGUKKyAqIGJ5dGUgcmVhZGVyIGRhdGEgZm9yIGl0IHRvIG1hdGNoLCBldmVuIGlmIHRoZSBmaXJzdCBvciBsYXN0IGJ5dGVzIGFyZSBtYXNrZWQKKyAqIG91dC4KKyAqCisgKiBJdCBpcyBhbiBlcnJvciB0byBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aG91dCBtYWtpbmcgc3VyZSB0aGF0IHRoZXJlIGlzCisgKiBlbm91Z2ggZGF0YSAob2Zmc2V0K3NpemUgYnl0ZXMpIGluIHRoZSBieXRlIHJlYWRlci4KKyAqCisgKiBSZXR1cm5zOiBvZmZzZXQgb2YgdGhlIGZpcnN0IG1hdGNoLCBvciAtMSBpZiBubyBtYXRjaCB3YXMgZm91bmQuCisgKgorICogRXhhbXBsZToKKyAqIDxwcm9ncmFtbGlzdGluZz4KKyAqIC8vIEFzc3VtZSB0aGUgcmVhZGVyIGNvbnRhaW5zIDB4MDAgMHgwMSAweDAyIC4uLiAweGZlIDB4ZmYKKyAqCisgKiBnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyIChyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4MDAwMTAyMDMsIDAsIDI1Nik7CisgKiAvLyAtPiByZXR1cm5zIDAKKyAqIGdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKHJlYWRlciwgMHhmZmZmZmZmZiwgMHgwMDAxMDIwMywgMSwgMjU1KTsKKyAqIC8vIC0+IHJldHVybnMgLTEKKyAqIGdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKHJlYWRlciwgMHhmZmZmZmZmZiwgMHgwMTAyMDMwNCwgMSwgMjU1KTsKKyAqIC8vIC0+IHJldHVybnMgMQorICogZ3N0X2J5dGVfcmVhZGVyX21hc2tlZF9zY2FuX3VpbnQzMiAocmVhZGVyLCAweGZmZmYsIDB4MDAwMSwgMCwgMjU2KTsKKyAqIC8vIC0+IHJldHVybnMgLTEKKyAqIGdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKHJlYWRlciwgMHhmZmZmLCAweDAyMDMsIDAsIDI1Nik7CisgKiAvLyAtPiByZXR1cm5zIDAKKyAqIGdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKHJlYWRlciwgMHhmZmZmMDAwMCwgMHgwMjAzMDAwMCwgMCwgMjU2KTsKKyAqIC8vIC0+IHJldHVybnMgMgorICogZ3N0X2J5dGVfcmVhZGVyX21hc2tlZF9zY2FuX3VpbnQzMiAocmVhZGVyLCAweGZmZmYwMDAwLCAweDAyMDMwMDAwLCAwLCA0KTsKKyAqIC8vIC0+IHJldHVybnMgLTEKKyAqIDwvcHJvZ3JhbWxpc3Rpbmc+CisgKgorICogU2luY2U6IDAuMTAuMjQKKyAqLworZ3VpbnQKK2dzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsIGd1aW50MzIgbWFzaywKKyAgICBndWludDMyIHBhdHRlcm4sIGd1aW50IG9mZnNldCwgZ3VpbnQgc2l6ZSkKK3sKKyAgY29uc3QgZ3VpbnQ4ICpkYXRhOworICBndWludDMyIHN0YXRlOworICBndWludCBpOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzaXplID4gMCwgLTEpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoKGd1aW50NjQpIG9mZnNldCArIHNpemUgPD0gcmVhZGVyLT5zaXplIC0gcmVhZGVyLT5ieXRlLAorICAgICAgLTEpOworCisgIC8qIHdlIGNhbid0IGZpbmQgdGhlIHBhdHRlcm4gd2l0aCBsZXNzIHRoYW4gNCBieXRlcyAqLworICBpZiAoR19VTkxJS0VMWSAoc2l6ZSA8IDQpKQorICAgIHJldHVybiAtMTsKKworICBkYXRhID0gcmVhZGVyLT5kYXRhICsgcmVhZGVyLT5ieXRlICsgb2Zmc2V0OworCisgIC8qIHNldCB0aGUgc3RhdGUgdG8gc29tZXRoaW5nIHRoYXQgZG9lcyBub3QgbWF0Y2ggKi8KKyAgc3RhdGUgPSB+cGF0dGVybjsKKworICAvKiBub3cgZmluZCBkYXRhICovCisgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAvKiB0aHJvdyBhd2F5IG9uZSBieXRlIGFuZCBtb3ZlIGluIHRoZSBuZXh0IGJ5dGUgKi8KKyAgICBzdGF0ZSA9ICgoc3RhdGUgPDwgOCkgfCBkYXRhW2ldKTsKKyAgICBpZiAoR19VTkxJS0VMWSAoKHN0YXRlICYgbWFzaykgPT0gcGF0dGVybikpIHsKKyAgICAgIC8qIHdlIGhhdmUgYSBtYXRjaCBidXQgd2UgbmVlZCB0byBoYXZlIHNraXBwZWQgYXQKKyAgICAgICAqIGxlYXN0IDQgYnl0ZXMgdG8gZmlsbCB0aGUgc3RhdGUuICovCisgICAgICBpZiAoR19MSUtFTFkgKGkgPj0gMykpCisgICAgICAgIHJldHVybiBvZmZzZXQgKyBpIC0gMzsKKyAgICB9CisgIH0KKworICAvKiBub3RoaW5nIGZvdW5kICovCisgIHJldHVybiAtMTsKK30KKworI2RlZmluZSBHU1RfQllURV9SRUFERVJfU0NBTl9TVFJJTkcoYml0cykgXAorc3RhdGljIGd1aW50IFwKK2dzdF9ieXRlX3JlYWRlcl9zY2FuX3N0cmluZ191dGYjI2JpdHMgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpIFwKK3sgXAorICBndWludCBsZW4sIG9mZiwgbWF4X2xlbjsgXAorICBcCisgIG1heF9sZW4gPSAocmVhZGVyLT5zaXplIC0gcmVhZGVyLT5ieXRlKSAvIHNpemVvZiAoZ3VpbnQjI2JpdHMpOyBcCisgIFwKKyAgLyogbmVlZCBhdCBsZWFzdCBhIHNpbmdsZSBOVUwgdGVybWluYXRvciAqLyBcCisgIGlmIChtYXhfbGVuIDwgMSkgXAorICAgIHJldHVybiAwOyBcCisgIFwKKyAgbGVuID0gMDsgXAorICBvZmYgPSByZWFkZXItPmJ5dGU7IFwKKyAgLyogZW5kaWFubmVzcyBkb2VzIG5vdCBtYXR0ZXIgaWYgd2UgYXJlIGxvb2tpbmcgZm9yIGEgTlVMIHRlcm1pbmF0b3IgKi8gXAorICB3aGlsZSAoR1NUX1JFQURfVUlOVCMjYml0cyMjX0xFICgmcmVhZGVyLT5kYXRhW29mZl0pICE9IDApIHsgXAorICAgICsrbGVuOyBcCisgICAgb2ZmICs9IHNpemVvZiAoZ3VpbnQjI2JpdHMpOyBcCisgICAgLyogaGF2ZSB3ZSByZWFjaGVkIHRoZSBlbmQgd2l0aG91dCBmaW5kaW5nIGEgTlVMIHRlcm1pbmF0b3I/ICovIFwKKyAgICBpZiAobGVuID09IG1heF9sZW4pIFwKKyAgICAgIHJldHVybiAwOyBcCisgIH0gXAorICAvKiByZXR1cm4gc2l6ZSBpbiBieXRlcyBpbmNsdWRpbmcgdGhlIE5VTCB0ZXJtaW5hdG9yIChoZW5jZSB0aGUgKzEpICovIFwKKyAgcmV0dXJuIChsZW4gKyAxKSAqIHNpemVvZiAoZ3VpbnQjI2JpdHMpOyBcCit9CisKKyNkZWZpbmUgR1NUX1JFQURfVUlOVDhfTEUgR1NUX1JFQURfVUlOVDgKK0dTVF9CWVRFX1JFQURFUl9TQ0FOX1NUUklORyAoOCk7CisjdW5kZWYgR1NUX1JFQURfVUlOVDhfTEUKK0dTVF9CWVRFX1JFQURFUl9TQ0FOX1NUUklORyAoMTYpOworR1NUX0JZVEVfUkVBREVSX1NDQU5fU1RSSU5HICgzMik7CisKKyNkZWZpbmUgR1NUX0JZVEVfUkVBREVSX1NLSVBfU1RSSU5HKGJpdHMpIFwKK2dib29sZWFuIFwKK2dzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGYjI2JpdHMgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpIFwKK3sgXAorICBndWludCBzaXplOyAvKiBzaXplIGluIGJ5dGVzIGluY2x1ZGluZyB0aGUgdGVybWluYXRvciAqLyBcCisgIFwKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHJlYWRlciAhPSBOVUxMLCBGQUxTRSk7IFwKKyAgXAorICBzaXplID0gZ3N0X2J5dGVfcmVhZGVyX3NjYW5fc3RyaW5nX3V0ZiMjYml0cyAocmVhZGVyKTsgXAorICByZWFkZXItPmJ5dGUgKz0gc2l6ZTsgXAorICByZXR1cm4gKHNpemUgPiAwKTsgXAorfQorCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZzoKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqCisgKiBTa2lwcyBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyBpbiB0aGUgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UsIGFkdmFuY2luZworICogdGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIGJ5dGUgYWZ0ZXIgdGhlIHN0cmluZy4gVGhpcyB3aWxsIHdvcmsgZm9yCisgKiBhbnkgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggYSBjaGFyYWN0ZXIgd2lkdGggb2YgOCBiaXRzLCBzbyBBU0NJSSwKKyAqIFVURi04LCBJU08tODg1OS1OIGV0Yy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZmFpbCBpZiBubyBOVUwtdGVybWluYXRvciB3YXMgZm91bmQgaW4gaW4gdGhlIGRhdGEuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgYSBzdHJpbmcgY291bGQgYmUgc2tpcHBlZCwgJUZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICovCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGY4OgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICoKKyAqIFNraXBzIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIGluIHRoZSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZSwgYWR2YW5jaW5nCisgKiB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUgYnl0ZSBhZnRlciB0aGUgc3RyaW5nLiBUaGlzIHdpbGwgd29yayBmb3IKKyAqIGFueSBOVUwtdGVybWluYXRlZCBzdHJpbmcgd2l0aCBhIGNoYXJhY3RlciB3aWR0aCBvZiA4IGJpdHMsIHNvIEFTQ0lJLAorICogVVRGLTgsIElTTy04ODU5LU4gZXRjLiBObyBpbnB1dCBjaGVja2luZyBmb3IgdmFsaWQgVVRGLTggaXMgZG9uZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZmFpbCBpZiBubyBOVUwtdGVybWluYXRvciB3YXMgZm91bmQgaW4gaW4gdGhlIGRhdGEuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgYSBzdHJpbmcgY291bGQgYmUgc2tpcHBlZCwgJUZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICovCitHU1RfQllURV9SRUFERVJfU0tJUF9TVFJJTkcgKDgpOworCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGYxNjoKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqCisgKiBTa2lwcyBhIE5VTC10ZXJtaW5hdGVkIFVURi0xNiBzdHJpbmcgaW4gdGhlICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlLAorICogYWR2YW5jaW5nIHRoZSBjdXJyZW50IHBvc2l0aW9uIHRvIHRoZSBieXRlIGFmdGVyIHRoZSBzdHJpbmcuCisgKgorICogTm8gaW5wdXQgY2hlY2tpbmcgZm9yIHZhbGlkIFVURi0xNiBpcyBkb25lLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBmYWlsIGlmIG5vIE5VTC10ZXJtaW5hdG9yIHdhcyBmb3VuZCBpbiBpbiB0aGUgZGF0YS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBhIHN0cmluZyBjb3VsZCBiZSBza2lwcGVkLCAlRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIFNpbmNlOiAwLjEwLjI0CisgKi8KK0dTVF9CWVRFX1JFQURFUl9TS0lQX1NUUklORyAoMTYpOworCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGYzMjoKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqCisgKiBTa2lwcyBhIE5VTC10ZXJtaW5hdGVkIFVURi0zMiBzdHJpbmcgaW4gdGhlICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlLAorICogYWR2YW5jaW5nIHRoZSBjdXJyZW50IHBvc2l0aW9uIHRvIHRoZSBieXRlIGFmdGVyIHRoZSBzdHJpbmcuCisgKgorICogTm8gaW5wdXQgY2hlY2tpbmcgZm9yIHZhbGlkIFVURi0zMiBpcyBkb25lLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBmYWlsIGlmIG5vIE5VTC10ZXJtaW5hdG9yIHdhcyBmb3VuZCBpbiBpbiB0aGUgZGF0YS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBhIHN0cmluZyBjb3VsZCBiZSBza2lwcGVkLCAlRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIFNpbmNlOiAwLjEwLjI0CisgKi8KK0dTVF9CWVRFX1JFQURFUl9TS0lQX1NUUklORyAoMzIpOworCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3N0cmluZzoKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqIEBzdHI6IChvdXQpICh0cmFuc2ZlciBub25lKSAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpOiBhZGRyZXNzIG9mIGEKKyAqICAgICAjZ2NoYXIgcG9pbnRlciB2YXJpZWJsZSBpbiB3aGljaCB0byBzdG9yZSB0aGUgcmVzdWx0CisgKgorICogUmV0dXJucyBhIGNvbnN0YW50IHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZGF0YSBwb3NpdGlvbiBpZiB0aGVyZSBpcworICogYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgaW4gdGhlIGRhdGEgKHRoaXMgY291bGQgYmUganVzdCBhIE5VTCB0ZXJtaW5hdG9yKS4KKyAqIFRoZSBjdXJyZW50IHBvc2l0aW9uIHdpbGwgYmUgbWFpbnRhaW5lZC4gVGhpcyB3aWxsIHdvcmsgZm9yIGFueQorICogTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggYSBjaGFyYWN0ZXIgd2lkdGggb2YgOCBiaXRzLCBzbyBBU0NJSSwKKyAqIFVURi04LCBJU08tODg1OS1OIGV0Yy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZmFpbCBpZiBubyBOVUwtdGVybWluYXRvciB3YXMgZm91bmQgaW4gaW4gdGhlIGRhdGEuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgYSBzdHJpbmcgY291bGQgYmUgc2tpcHBlZCwgJUZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICovCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3N0cmluZ191dGY4OgorICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQorICogQHN0cjogKG91dCkgKHRyYW5zZmVyIG5vbmUpIChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSk6IGFkZHJlc3Mgb2YgYQorICogICAgICNnY2hhciBwb2ludGVyIHZhcmllYmxlIGluIHdoaWNoIHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqCisgKiBSZXR1cm5zIGEgY29uc3RhbnQgcG9pbnRlciB0byB0aGUgY3VycmVudCBkYXRhIHBvc2l0aW9uIGlmIHRoZXJlIGlzCisgKiBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyBpbiB0aGUgZGF0YSAodGhpcyBjb3VsZCBiZSBqdXN0IGEgTlVMIHRlcm1pbmF0b3IpLgorICogVGhlIGN1cnJlbnQgcG9zaXRpb24gd2lsbCBiZSBtYWludGFpbmVkLiBUaGlzIHdpbGwgd29yayBmb3IgYW55CisgKiBOVUwtdGVybWluYXRlZCBzdHJpbmcgd2l0aCBhIGNoYXJhY3RlciB3aWR0aCBvZiA4IGJpdHMsIHNvIEFTQ0lJLAorICogVVRGLTgsIElTTy04ODU5LU4gZXRjLgorICoKKyAqIE5vIGlucHV0IGNoZWNraW5nIGZvciB2YWxpZCBVVEYtOCBpcyBkb25lLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBmYWlsIGlmIG5vIE5VTC10ZXJtaW5hdG9yIHdhcyBmb3VuZCBpbiBpbiB0aGUgZGF0YS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBhIHN0cmluZyBjb3VsZCBiZSBza2lwcGVkLCAlRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIFNpbmNlOiAwLjEwLjI0CisgKi8KK2dib29sZWFuCitnc3RfYnl0ZV9yZWFkZXJfcGVla19zdHJpbmdfdXRmOCAoY29uc3QgR3N0Qnl0ZVJlYWRlciAqIHJlYWRlciwKKyAgICBjb25zdCBnY2hhciAqKiBzdHIpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZWFkZXIgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RyICE9IE5VTEwsIEZBTFNFKTsKKworICBpZiAoZ3N0X2J5dGVfcmVhZGVyX3NjYW5fc3RyaW5nX3V0ZjggKHJlYWRlcikgPiAwKSB7CisgICAgKnN0ciA9IChjb25zdCBnY2hhciAqKSAocmVhZGVyLT5kYXRhICsgcmVhZGVyLT5ieXRlKTsKKyAgfSBlbHNlIHsKKyAgICAqc3RyID0gTlVMTDsKKyAgfQorICByZXR1cm4gKCpzdHIgIT0gTlVMTCk7Cit9CisKKy8qKgorICogZ3N0X2J5dGVfcmVhZGVyX2dldF9zdHJpbmdfdXRmODoKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqIEBzdHI6IChvdXQpICh0cmFuc2ZlciBub25lKSAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpOiBhZGRyZXNzIG9mIGEKKyAqICAgICAjZ2NoYXIgcG9pbnRlciB2YXJpZWJsZSBpbiB3aGljaCB0byBzdG9yZSB0aGUgcmVzdWx0CisgKgorICogUmV0dXJucyBhIGNvbnN0YW50IHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZGF0YSBwb3NpdGlvbiBpZiB0aGVyZSBpcworICogYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgaW4gdGhlIGRhdGEgKHRoaXMgY291bGQgYmUganVzdCBhIE5VTCB0ZXJtaW5hdG9yKSwKKyAqIGFkdmFuY2luZyB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUgYnl0ZSBhZnRlciB0aGUgc3RyaW5nLiBUaGlzIHdpbGwgd29yaworICogZm9yIGFueSBOVUwtdGVybWluYXRlZCBzdHJpbmcgd2l0aCBhIGNoYXJhY3RlciB3aWR0aCBvZiA4IGJpdHMsIHNvIEFTQ0lJLAorICogVVRGLTgsIElTTy04ODU5LU4gZXRjLgorICoKKyAqIE5vIGlucHV0IGNoZWNraW5nIGZvciB2YWxpZCBVVEYtOCBpcyBkb25lLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBmYWlsIGlmIG5vIE5VTC10ZXJtaW5hdG9yIHdhcyBmb3VuZCBpbiBpbiB0aGUgZGF0YS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBhIHN0cmluZyBjb3VsZCBiZSBmb3VuZCwgJUZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICovCitnYm9vbGVhbgorZ3N0X2J5dGVfcmVhZGVyX2dldF9zdHJpbmdfdXRmOCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlciwgY29uc3QgZ2NoYXIgKiogc3RyKQoreworICBndWludCBzaXplOyAgICAgICAgICAgICAgICAgICAvKiBzaXplIGluIGJ5dGVzIGluY2x1ZGluZyB0aGUgdGVybWluYXRvciAqLworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZWFkZXIgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RyICE9IE5VTEwsIEZBTFNFKTsKKworICBzaXplID0gZ3N0X2J5dGVfcmVhZGVyX3NjYW5fc3RyaW5nX3V0ZjggKHJlYWRlcik7CisgIGlmIChzaXplID09IDApIHsKKyAgICAqc3RyID0gTlVMTDsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKworICAqc3RyID0gKGNvbnN0IGdjaGFyICopIChyZWFkZXItPmRhdGEgKyByZWFkZXItPmJ5dGUpOworICByZWFkZXItPmJ5dGUgKz0gc2l6ZTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKKyNkZWZpbmUgR1NUX0JZVEVfUkVBREVSX0RVUF9TVFJJTkcoYml0cyx0eXBlKSBcCitnYm9vbGVhbiBcCitnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGYjI2JpdHMgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsIHR5cGUgKiogc3RyKSBcCit7IFwKKyAgZ3VpbnQgc2l6ZTsgLyogc2l6ZSBpbiBieXRlcyBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0b3IgKi8gXAorICBcCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZWFkZXIgIT0gTlVMTCwgRkFMU0UpOyBcCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHIgIT0gTlVMTCwgRkFMU0UpOyBcCisgIFwKKyAgc2l6ZSA9IGdzdF9ieXRlX3JlYWRlcl9zY2FuX3N0cmluZ191dGYjI2JpdHMgKHJlYWRlcik7IFwKKyAgaWYgKHNpemUgPT0gMCkgeyBcCisgICAgKnN0ciA9IE5VTEw7IFwKKyAgICByZXR1cm4gRkFMU0U7IFwKKyAgfSBcCisgICpzdHIgPSBnX21lbWR1cCAocmVhZGVyLT5kYXRhICsgcmVhZGVyLT5ieXRlLCBzaXplKTsgXAorICByZWFkZXItPmJ5dGUgKz0gc2l6ZTsgXAorICByZXR1cm4gVFJVRTsgXAorfQorCisvKioKKyAqIGdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0Zjg6CisgKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCisgKiBAc3RyOiAob3V0KSAodHJhbnNmZXIgZnVsbCkgKGFycmF5IHplcm8tdGVybWluYXRlZD0xKTogYWRkcmVzcyBvZiBhCisgKiAgICAgI2djaGFyIHBvaW50ZXIgdmFyaWVibGUgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHJlc3VsdAorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdfZnJlZQorICoKKyAqIEZJWE1FOlJlYWRzIChjb3BpZXMpIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIGluIHRoZSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZSwKKyAqIGFkdmFuY2luZyB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUgYnl0ZSBhZnRlciB0aGUgc3RyaW5nLiBUaGlzIHdpbGwgd29yaworICogZm9yIGFueSBOVUwtdGVybWluYXRlZCBzdHJpbmcgd2l0aCBhIGNoYXJhY3RlciB3aWR0aCBvZiA4IGJpdHMsIHNvIEFTQ0lJLAorICogVVRGLTgsIElTTy04ODU5LU4gZXRjLiBObyBpbnB1dCBjaGVja2luZyBmb3IgdmFsaWQgVVRGLTggaXMgZG9uZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZmFpbCBpZiBubyBOVUwtdGVybWluYXRvciB3YXMgZm91bmQgaW4gaW4gdGhlIGRhdGEuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgYSBzdHJpbmcgY291bGQgYmUgcmVhZCBpbnRvIEBzdHIsICVGQUxTRSBvdGhlcndpc2UuIFRoZQorICogICAgIHN0cmluZyBwdXQgaW50byBAc3RyIG11c3QgYmUgZnJlZWQgd2l0aCBnX2ZyZWUoKSB3aGVuIG5vIGxvbmdlciBuZWVkZWQuCisgKgorICogU2luY2U6IDAuMTAuMjQKKyAqLworR1NUX0JZVEVfUkVBREVSX0RVUF9TVFJJTkcgKDgsIGdjaGFyKTsKKworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGYxNjoKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqIEBzdHI6IChvdXQpICh0cmFuc2ZlciBmdWxsKSAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpOiBhZGRyZXNzIG9mIGEKKyAqICAgICAjZ3VpbnQxNiBwb2ludGVyIHZhcmllYmxlIGluIHdoaWNoIHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnX2ZyZWUKKyAqCisgKiBSZXR1cm5zIGEgbmV3bHktYWxsb2NhdGVkIGNvcHkgb2YgdGhlIGN1cnJlbnQgZGF0YSBwb3NpdGlvbiBpZiB0aGVyZSBpcworICogYSBOVUwtdGVybWluYXRlZCBVVEYtMTYgc3RyaW5nIGluIHRoZSBkYXRhICh0aGlzIGNvdWxkIGJlIGFuIGVtcHR5IHN0cmluZworICogYXMgd2VsbCksIGFuZCBhZHZhbmNlcyB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBObyBpbnB1dCBjaGVja2luZyBmb3IgdmFsaWQgVVRGLTE2IGlzIGRvbmUuIFRoaXMgZnVuY3Rpb24gaXMgZW5kaWFubmVzcworICogYWdub3N0aWMgLSB5b3Ugc2hvdWxkIG5vdCBhc3N1bWUgdGhlIFVURi0xNiBjaGFyYWN0ZXJzIGFyZSBpbiBob3N0CisgKiBlbmRpYW5uZXNzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBmYWlsIGlmIG5vIE5VTC10ZXJtaW5hdG9yIHdhcyBmb3VuZCBpbiBpbiB0aGUgZGF0YS4KKyAqCisgKiBOb3RlOiB0aGVyZSBpcyBubyBwZWVrIG9yIGdldCB2YXJpYW50IG9mIHRoaXMgZnVuY3Rpb24gdG8gZW5zdXJlIGNvcnJlY3QKKyAqIGJ5dGUgYWxpZ25tZW50IG9mIHRoZSBVVEYtMTYgc3RyaW5nLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIGEgc3RyaW5nIGNvdWxkIGJlIHJlYWQsICVGQUxTRSBvdGhlcndpc2UuIFRoZQorICogICAgIHN0cmluZyBwdXQgaW50byBAc3RyIG11c3QgYmUgZnJlZWQgd2l0aCBnX2ZyZWUoKSB3aGVuIG5vIGxvbmdlciBuZWVkZWQuCisgKgorICogU2luY2U6IDAuMTAuMjQKKyAqLworR1NUX0JZVEVfUkVBREVSX0RVUF9TVFJJTkcgKDE2LCBndWludDE2KTsKKworLyoqCisgKiBnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGYzMjoKKyAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKKyAqIEBzdHI6IChvdXQpICh0cmFuc2ZlciBmdWxsKSAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpOiBhZGRyZXNzIG9mIGEKKyAqICAgICAjZ3VpbnQzMiBwb2ludGVyIHZhcmllYmxlIGluIHdoaWNoIHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnX2ZyZWUKKyAqCisgKiBSZXR1cm5zIGEgbmV3bHktYWxsb2NhdGVkIGNvcHkgb2YgdGhlIGN1cnJlbnQgZGF0YSBwb3NpdGlvbiBpZiB0aGVyZSBpcworICogYSBOVUwtdGVybWluYXRlZCBVVEYtMzIgc3RyaW5nIGluIHRoZSBkYXRhICh0aGlzIGNvdWxkIGJlIGFuIGVtcHR5IHN0cmluZworICogYXMgd2VsbCksIGFuZCBhZHZhbmNlcyB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAqCisgKiBObyBpbnB1dCBjaGVja2luZyBmb3IgdmFsaWQgVVRGLTMyIGlzIGRvbmUuIFRoaXMgZnVuY3Rpb24gaXMgZW5kaWFubmVzcworICogYWdub3N0aWMgLSB5b3Ugc2hvdWxkIG5vdCBhc3N1bWUgdGhlIFVURi0zMiBjaGFyYWN0ZXJzIGFyZSBpbiBob3N0CisgKiBlbmRpYW5uZXNzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBmYWlsIGlmIG5vIE5VTC10ZXJtaW5hdG9yIHdhcyBmb3VuZCBpbiBpbiB0aGUgZGF0YS4KKyAqCisgKiBOb3RlOiB0aGVyZSBpcyBubyBwZWVrIG9yIGdldCB2YXJpYW50IG9mIHRoaXMgZnVuY3Rpb24gdG8gZW5zdXJlIGNvcnJlY3QKKyAqIGJ5dGUgYWxpZ25tZW50IG9mIHRoZSBVVEYtMzIgc3RyaW5nLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIGEgc3RyaW5nIGNvdWxkIGJlIHJlYWQsICVGQUxTRSBvdGhlcndpc2UuIFRoZQorICogICAgIHN0cmluZyBwdXQgaW50byBAc3RyIG11c3QgYmUgZnJlZWQgd2l0aCBnX2ZyZWUoKSB3aGVuIG5vIGxvbmdlciBuZWVkZWQuCisgKgorICogU2luY2U6IDAuMTAuMjQKKyAqLworR1NUX0JZVEVfUkVBREVSX0RVUF9TVFJJTkcgKDMyLCBndWludDMyKTsKZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5oIGIvbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMzYzRmNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5oCkBAIC0wLDAgKzEsNTExIEBACisvKiBHU3RyZWFtZXIgYnl0ZSByZWFkZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+LgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0dTVF9CWVRFX1JFQURFUl9IX18KKyNkZWZpbmUgX19HU1RfQllURV9SRUFERVJfSF9fCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBHU1RfQllURV9SRUFERVIocmVhZGVyKSAoKEdzdEJ5dGVSZWFkZXIgKikgKHJlYWRlcikpCisKKy8qKgorICogR3N0Qnl0ZVJlYWRlcjoKKyAqIEBkYXRhOiBEYXRhIGZyb20gd2hpY2ggdGhlIGJpdCByZWFkZXIgd2lsbCByZWFkCisgKiBAc2l6ZTogU2l6ZSBvZiBAZGF0YSBpbiBieXRlcworICogQGJ5dGU6IEN1cnJlbnQgYnl0ZSBwb3NpdGlvbgorICoKKyAqIEEgYnl0ZSByZWFkZXIgaW5zdGFuY2UuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgZ3VpbnQ4ICpkYXRhOworICBndWludCBzaXplOworCisgIGd1aW50IGJ5dGU7ICAvKiBCeXRlIHBvc2l0aW9uICovCit9IEdzdEJ5dGVSZWFkZXI7CisKK0dzdEJ5dGVSZWFkZXIgKiBnc3RfYnl0ZV9yZWFkZXJfbmV3IChjb25zdCBndWludDggKmRhdGEsIGd1aW50IHNpemUpOwordm9pZCBnc3RfYnl0ZV9yZWFkZXJfZnJlZSAoR3N0Qnl0ZVJlYWRlciAqcmVhZGVyKTsKKwordm9pZCBnc3RfYnl0ZV9yZWFkZXJfaW5pdCAoR3N0Qnl0ZVJlYWRlciAqcmVhZGVyLCBjb25zdCBndWludDggKmRhdGEsIGd1aW50IHNpemUpOworCitnYm9vbGVhbiBnc3RfYnl0ZV9yZWFkZXJfc2V0X3BvcyAoR3N0Qnl0ZVJlYWRlciAqcmVhZGVyLCBndWludCBwb3MpOworCitndWludCBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3BvcyAoY29uc3QgR3N0Qnl0ZVJlYWRlciAqcmVhZGVyKTsKK2d1aW50IGdzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nIChjb25zdCBHc3RCeXRlUmVhZGVyICpyZWFkZXIpOworCitndWludCBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3NpemUgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKnJlYWRlcik7CisKK2dib29sZWFuIGdzdF9ieXRlX3JlYWRlcl9za2lwIChHc3RCeXRlUmVhZGVyICpyZWFkZXIsIGd1aW50IG5ieXRlcyk7CisKK2dib29sZWFuIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDggKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ3VpbnQ4ICp2YWwpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ4IChHc3RCeXRlUmVhZGVyICpyZWFkZXIsIGdpbnQ4ICp2YWwpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfbGUgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ3VpbnQxNiAqdmFsKTsKK2dib29sZWFuIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfbGUgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ2ludDE2ICp2YWwpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmUgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ3VpbnQxNiAqdmFsKTsKK2dib29sZWFuIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfYmUgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ2ludDE2ICp2YWwpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfbGUgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ3VpbnQzMiAqdmFsKTsKK2dib29sZWFuIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfbGUgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ2ludDMyICp2YWwpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfYmUgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ3VpbnQzMiAqdmFsKTsKK2dib29sZWFuIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfYmUgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ2ludDMyICp2YWwpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfbGUgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ3VpbnQzMiAqdmFsKTsKK2dib29sZWFuIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfbGUgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ2ludDMyICp2YWwpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ3VpbnQzMiAqdmFsKTsKK2dib29sZWFuIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfYmUgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ2ludDMyICp2YWwpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfbGUgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ3VpbnQ2NCAqdmFsKTsKK2dib29sZWFuIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfbGUgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ2ludDY0ICp2YWwpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmUgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ3VpbnQ2NCAqdmFsKTsKK2dib29sZWFuIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfYmUgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ2ludDY0ICp2YWwpOworCitnYm9vbGVhbiBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50OCAoY29uc3QgR3N0Qnl0ZVJlYWRlciAqcmVhZGVyLCBndWludDggKnZhbCk7CitnYm9vbGVhbiBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ4IChjb25zdCBHc3RCeXRlUmVhZGVyICpyZWFkZXIsIGdpbnQ4ICp2YWwpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2xlIChjb25zdCBHc3RCeXRlUmVhZGVyICpyZWFkZXIsIGd1aW50MTYgKnZhbCk7CitnYm9vbGVhbiBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQxNl9sZSAoY29uc3QgR3N0Qnl0ZVJlYWRlciAqcmVhZGVyLCBnaW50MTYgKnZhbCk7CitnYm9vbGVhbiBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfYmUgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ3VpbnQxNiAqdmFsKTsKK2dib29sZWFuIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2JlIChjb25zdCBHc3RCeXRlUmVhZGVyICpyZWFkZXIsIGdpbnQxNiAqdmFsKTsKK2dib29sZWFuIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9sZSAoY29uc3QgR3N0Qnl0ZVJlYWRlciAqcmVhZGVyLCBndWludDMyICp2YWwpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfbGUgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ2ludDMyICp2YWwpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2JlIChjb25zdCBHc3RCeXRlUmVhZGVyICpyZWFkZXIsIGd1aW50MzIgKnZhbCk7CitnYm9vbGVhbiBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9iZSAoY29uc3QgR3N0Qnl0ZVJlYWRlciAqcmVhZGVyLCBnaW50MzIgKnZhbCk7CitnYm9vbGVhbiBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfbGUgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ3VpbnQzMiAqdmFsKTsKK2dib29sZWFuIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2xlIChjb25zdCBHc3RCeXRlUmVhZGVyICpyZWFkZXIsIGdpbnQzMiAqdmFsKTsKK2dib29sZWFuIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9iZSAoY29uc3QgR3N0Qnl0ZVJlYWRlciAqcmVhZGVyLCBndWludDMyICp2YWwpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfYmUgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ2ludDMyICp2YWwpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2xlIChjb25zdCBHc3RCeXRlUmVhZGVyICpyZWFkZXIsIGd1aW50NjQgKnZhbCk7CitnYm9vbGVhbiBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9sZSAoY29uc3QgR3N0Qnl0ZVJlYWRlciAqcmVhZGVyLCBnaW50NjQgKnZhbCk7CitnYm9vbGVhbiBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfYmUgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ3VpbnQ2NCAqdmFsKTsKK2dib29sZWFuIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2JlIChjb25zdCBHc3RCeXRlUmVhZGVyICpyZWFkZXIsIGdpbnQ2NCAqdmFsKTsKKworZ2Jvb2xlYW4gZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDMyX2xlIChHc3RCeXRlUmVhZGVyICpyZWFkZXIsIGdmbG9hdCAqdmFsKTsKK2dib29sZWFuIGdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9iZSAoR3N0Qnl0ZVJlYWRlciAqcmVhZGVyLCBnZmxvYXQgKnZhbCk7CitnYm9vbGVhbiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfbGUgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ2RvdWJsZSAqdmFsKTsKK2dib29sZWFuIGdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9iZSAoR3N0Qnl0ZVJlYWRlciAqcmVhZGVyLCBnZG91YmxlICp2YWwpOworCitnYm9vbGVhbiBnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2xlIChjb25zdCBHc3RCeXRlUmVhZGVyICpyZWFkZXIsIGdmbG9hdCAqdmFsKTsKK2dib29sZWFuIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfYmUgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ2Zsb2F0ICp2YWwpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9sZSAoY29uc3QgR3N0Qnl0ZVJlYWRlciAqcmVhZGVyLCBnZG91YmxlICp2YWwpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9iZSAoY29uc3QgR3N0Qnl0ZVJlYWRlciAqcmVhZGVyLCBnZG91YmxlICp2YWwpOworCitnYm9vbGVhbiBnc3RfYnl0ZV9yZWFkZXJfZHVwX2RhdGEgIChHc3RCeXRlUmVhZGVyICogcmVhZGVyLCBndWludCBzaXplLCBndWludDggICAgICAgKiogdmFsKTsKK2dib29sZWFuIGdzdF9ieXRlX3JlYWRlcl9nZXRfZGF0YSAgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsIGd1aW50IHNpemUsIGNvbnN0IGd1aW50OCAqKiB2YWwpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YSAoY29uc3QgR3N0Qnl0ZVJlYWRlciAqIHJlYWRlciwgZ3VpbnQgc2l6ZSwgY29uc3QgZ3VpbnQ4ICoqIHZhbCk7CisKKyNkZWZpbmUgZ3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmcocmVhZGVyLHN0cikgXAorICAgIGdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjgocmVhZGVyLHN0cikKKworZ2Jvb2xlYW4gZ3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmdfdXRmOCAgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsIGdjaGFyICAgKiogc3RyKTsKK2dib29sZWFuIGdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjE2IChHc3RCeXRlUmVhZGVyICogcmVhZGVyLCBndWludDE2ICoqIHN0cik7CitnYm9vbGVhbiBnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGYzMiAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlciwgZ3VpbnQzMiAqKiBzdHIpOworCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZyhyZWFkZXIpIFwKKyAgICBnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmOChyZWFkZXIpCisKK2dib29sZWFuIGdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGY4ICAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7CitnYm9vbGVhbiBnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmMTYgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjMyIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKKworI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3N0cmluZyhyZWFkZXIsc3RyKSBcCisgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF9zdHJpbmdfdXRmOChyZWFkZXIsc3RyKQorCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3N0cmluZyhyZWFkZXIsc3RyKSBcCisgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3RyaW5nX3V0ZjgocmVhZGVyLHN0cikKKworZ2Jvb2xlYW4gZ3N0X2J5dGVfcmVhZGVyX2dldF9zdHJpbmdfdXRmOCAgIChHc3RCeXRlUmVhZGVyICogcmVhZGVyLCBjb25zdCBnY2hhciAqKiBzdHIpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3RyaW5nX3V0ZjggIChjb25zdCBHc3RCeXRlUmVhZGVyICogcmVhZGVyLCBjb25zdCBnY2hhciAqKiBzdHIpOworCitndWludCAgICBnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyIChjb25zdCBHc3RCeXRlUmVhZGVyICogcmVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiAgICAgICAgICAgICAgIG1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDMyICAgICAgICAgICAgICAgcGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICAgICBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAgc2l6ZSk7CisKKy8qKgorICogR1NUX0JZVEVfUkVBREVSX0lOSVQ6CisgKiBAZGF0YTogRGF0YSBmcm9tIHdoaWNoIHRoZSAjR3N0Qnl0ZVJlYWRlciBzaG91bGQgcmVhZAorICogQHNpemU6IFNpemUgb2YgQGRhdGEgaW4gYnl0ZXMKKyAqCisgKiBBICNHc3RCeXRlUmVhZGVyIG11c3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCB0aGlzIG1hY3JvLCBiZWZvcmUgaXQgY2FuIGJlCisgKiB1c2VkLiBUaGlzIG1hY3JvIGNhbiB1c2VkIGJlIHRvIGluaXRpYWxpemUgYSB2YXJpYWJsZSwgYnV0IGl0IGNhbm5vdAorICogYmUgYXNzaWduZWQgdG8gYSB2YXJpYWJsZS4gSW4gdGhhdCBjYXNlIHlvdSBoYXZlIHRvIHVzZQorICogZ3N0X2J5dGVfcmVhZGVyX2luaXQoKS4KKyAqCisgKiBTaW5jZTogMC4xMC4yMgorICovCisjZGVmaW5lIEdTVF9CWVRFX1JFQURFUl9JTklUKGRhdGEsIHNpemUpIHtkYXRhLCBzaXplLCAwfQorCisvKiB1bmNoZWNrZWQgdmFyaWFudHMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZ3N0X2J5dGVfcmVhZGVyX3NraXBfdW5jaGVja2VkIChHc3RCeXRlUmVhZGVyICogcmVhZGVyLCBndWludCBuYnl0ZXMpCit7CisgIHJlYWRlci0+Ynl0ZSArPSBuYnl0ZXM7Cit9CisKKyNkZWZpbmUgX19HU1RfQllURV9SRUFERVJfR0VUX1BFRUtfQklUU19VTkNIRUNLRUQoYml0cyx0eXBlLGxvd2VyLHVwcGVyLGFkaikgXAorXAorc3RhdGljIGlubGluZSB0eXBlIFwKK2dzdF9ieXRlX3JlYWRlcl9wZWVrXyMjbG93ZXIjI191bmNoZWNrZWQgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpIFwKK3sgXAorICB0eXBlIHZhbCA9ICh0eXBlKSBHU1RfUkVBRF8jI3VwcGVyIChyZWFkZXItPmRhdGEgKyByZWFkZXItPmJ5dGUpOyBcCisgIGFkaiBcCisgIHJldHVybiB2YWw7IFwKK30gXAorXAorc3RhdGljIGlubGluZSB0eXBlIFwKK2dzdF9ieXRlX3JlYWRlcl9nZXRfIyNsb3dlciMjX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcikgXAoreyBcCisgIHR5cGUgdmFsID0gZ3N0X2J5dGVfcmVhZGVyX3BlZWtfIyNsb3dlciMjX3VuY2hlY2tlZCAocmVhZGVyKTsgXAorICByZWFkZXItPmJ5dGUgKz0gYml0cyAvIDg7IFwKKyAgcmV0dXJuIHZhbDsgXAorfQorCitfX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX1VOQ0hFQ0tFRCg4LGd1aW50OCx1aW50OCxVSU5UOCwvKiAqLykKK19fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfVU5DSEVDS0VEKDgsZ2ludDgsaW50OCxVSU5UOCwvKiAqLykKKworX19HU1RfQllURV9SRUFERVJfR0VUX1BFRUtfQklUU19VTkNIRUNLRUQoMTYsZ3VpbnQxNix1aW50MTZfbGUsVUlOVDE2X0xFLC8qICovKQorX19HU1RfQllURV9SRUFERVJfR0VUX1BFRUtfQklUU19VTkNIRUNLRUQoMTYsZ3VpbnQxNix1aW50MTZfYmUsVUlOVDE2X0JFLC8qICovKQorX19HU1RfQllURV9SRUFERVJfR0VUX1BFRUtfQklUU19VTkNIRUNLRUQoMTYsZ2ludDE2LGludDE2X2xlLFVJTlQxNl9MRSwvKiAqLykKK19fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfVU5DSEVDS0VEKDE2LGdpbnQxNixpbnQxNl9iZSxVSU5UMTZfQkUsLyogKi8pCisKK19fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfVU5DSEVDS0VEKDMyLGd1aW50MzIsdWludDMyX2xlLFVJTlQzMl9MRSwvKiAqLykKK19fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfVU5DSEVDS0VEKDMyLGd1aW50MzIsdWludDMyX2JlLFVJTlQzMl9CRSwvKiAqLykKK19fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfVU5DSEVDS0VEKDMyLGdpbnQzMixpbnQzMl9sZSxVSU5UMzJfTEUsLyogKi8pCitfX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX1VOQ0hFQ0tFRCgzMixnaW50MzIsaW50MzJfYmUsVUlOVDMyX0JFLC8qICovKQorCitfX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX1VOQ0hFQ0tFRCgyNCxndWludDMyLHVpbnQyNF9sZSxVSU5UMjRfTEUsLyogKi8pCitfX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX1VOQ0hFQ0tFRCgyNCxndWludDMyLHVpbnQyNF9iZSxVSU5UMjRfQkUsLyogKi8pCisKKy8qIGZpeCB1cCB0aGUgc2lnbiBmb3IgMjQtYml0IHNpZ25lZCBpbnRzIHN0b3JlZCBpbiAzMi1iaXQgc2lnbmVkIGludHMgKi8KK19fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfVU5DSEVDS0VEKDI0LGdpbnQzMixpbnQyNF9sZSxVSU5UMjRfTEUsCisgICAgaWYgKHZhbCAmIDB4MDA4MDAwMDApIHZhbCB8PSAweGZmMDAwMDAwOykKK19fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfVU5DSEVDS0VEKDI0LGdpbnQzMixpbnQyNF9iZSxVSU5UMjRfQkUsCisgICAgaWYgKHZhbCAmIDB4MDA4MDAwMDApIHZhbCB8PSAweGZmMDAwMDAwOykKKworX19HU1RfQllURV9SRUFERVJfR0VUX1BFRUtfQklUU19VTkNIRUNLRUQoNjQsZ3VpbnQ2NCx1aW50NjRfbGUsVUlOVDY0X0xFLC8qICovKQorX19HU1RfQllURV9SRUFERVJfR0VUX1BFRUtfQklUU19VTkNIRUNLRUQoNjQsZ3VpbnQ2NCx1aW50NjRfYmUsVUlOVDY0X0JFLC8qICovKQorX19HU1RfQllURV9SRUFERVJfR0VUX1BFRUtfQklUU19VTkNIRUNLRUQoNjQsZ2ludDY0LGludDY0X2xlLFVJTlQ2NF9MRSwvKiAqLykKK19fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfVU5DSEVDS0VEKDY0LGdpbnQ2NCxpbnQ2NF9iZSxVSU5UNjRfQkUsLyogKi8pCisKK19fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfVU5DSEVDS0VEKDMyLGdmbG9hdCxmbG9hdDMyX2xlLEZMT0FUX0xFLC8qICovKQorX19HU1RfQllURV9SRUFERVJfR0VUX1BFRUtfQklUU19VTkNIRUNLRUQoMzIsZ2Zsb2F0LGZsb2F0MzJfYmUsRkxPQVRfQkUsLyogKi8pCitfX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX1VOQ0hFQ0tFRCg2NCxnZG91YmxlLGZsb2F0NjRfbGUsRE9VQkxFX0xFLC8qICovKQorX19HU1RfQllURV9SRUFERVJfR0VUX1BFRUtfQklUU19VTkNIRUNLRUQoNjQsZ2RvdWJsZSxmbG9hdDY0X2JlLERPVUJMRV9CRSwvKiAqLykKKworI3VuZGVmIF9fR0VUX1BFRUtfQklUU19VTkNIRUNLRUQKKworc3RhdGljIGlubGluZSBjb25zdCBndWludDggKgorZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YV91bmNoZWNrZWQgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpCit7CisgIHJldHVybiAoY29uc3QgZ3VpbnQ4ICopIChyZWFkZXItPmRhdGEgKyByZWFkZXItPmJ5dGUpOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IGd1aW50OCAqCitnc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGFfdW5jaGVja2VkIChHc3RCeXRlUmVhZGVyICogcmVhZGVyLCBndWludCBzaXplKQoreworICBjb25zdCBndWludDggKmRhdGE7CisKKyAgZGF0YSA9IGdzdF9ieXRlX3JlYWRlcl9wZWVrX2RhdGFfdW5jaGVja2VkIChyZWFkZXIpOworICBnc3RfYnl0ZV9yZWFkZXJfc2tpcF91bmNoZWNrZWQgKHJlYWRlciwgc2l6ZSk7CisgIHJldHVybiBkYXRhOworfQorCitzdGF0aWMgaW5saW5lIGd1aW50OCAqCitnc3RfYnl0ZV9yZWFkZXJfZHVwX2RhdGFfdW5jaGVja2VkIChHc3RCeXRlUmVhZGVyICogcmVhZGVyLCBndWludCBzaXplKQoreworICBnY29uc3Rwb2ludGVyIGRhdGEgPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGFfdW5jaGVja2VkIChyZWFkZXIsIHNpemUpOworICByZXR1cm4gKGd1aW50OCAqKSBnX21lbWR1cCAoZGF0YSwgc2l6ZSk7Cit9CisKKy8qIFVuY2hlY2tlZCB2YXJpYW50cyB0aGF0IHNob3VsZCBub3QgYmUgdXNlZCAqLworc3RhdGljIGlubGluZSBndWludAorX2dzdF9ieXRlX3JlYWRlcl9nZXRfcG9zX3VuY2hlY2tlZCAoY29uc3QgR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcikKK3sKKyAgcmV0dXJuIHJlYWRlci0+Ynl0ZTsKK30KKworc3RhdGljIGlubGluZSBndWludAorX2dzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nX3VuY2hlY2tlZCAoY29uc3QgR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcikKK3sKKyAgcmV0dXJuIHJlYWRlci0+c2l6ZSAtIHJlYWRlci0+Ynl0ZTsKK30KKworc3RhdGljIGlubGluZSBndWludAorX2dzdF9ieXRlX3JlYWRlcl9nZXRfc2l6ZV91bmNoZWNrZWQgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpCit7CisgIHJldHVybiByZWFkZXItPnNpemU7Cit9CisKKy8qIGlubGluZWQgdmFyaWFudHMgKGRvIG5vdCB1c2UgZGlyZWN0bHkpICovCisKK3N0YXRpYyBpbmxpbmUgZ3VpbnQKK19nc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZ19pbmxpbmUgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZWFkZXIgIT0gTlVMTCwgMCk7CisKKyAgcmV0dXJuIF9nc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZ191bmNoZWNrZWQgKHJlYWRlcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgZ3VpbnQKK19nc3RfYnl0ZV9yZWFkZXJfZ2V0X3NpemVfaW5saW5lIChjb25zdCBHc3RCeXRlUmVhZGVyICogcmVhZGVyKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVhZGVyICE9IE5VTEwsIDApOworCisgIHJldHVybiBfZ3N0X2J5dGVfcmVhZGVyX2dldF9zaXplX3VuY2hlY2tlZCAocmVhZGVyKTsKK30KKworI2RlZmluZSBfX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX0lOTElORShiaXRzLHR5cGUsbmFtZSkgXAorXAorc3RhdGljIGlubGluZSBnYm9vbGVhbiBcCitfZ3N0X2J5dGVfcmVhZGVyX3BlZWtfIyNuYW1lIyNfaW5saW5lIChjb25zdCBHc3RCeXRlUmVhZGVyICogcmVhZGVyLCB0eXBlICogdmFsKSBcCit7IFwKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHJlYWRlciAhPSBOVUxMLCBGQUxTRSk7IFwKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZhbCAhPSBOVUxMLCBGQUxTRSk7IFwKKyAgXAorICBpZiAoX2dzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nX3VuY2hlY2tlZCAocmVhZGVyKSA8IChiaXRzIC8gOCkpIFwKKyAgICByZXR1cm4gRkFMU0U7IFwKK1wKKyAgKnZhbCA9IGdzdF9ieXRlX3JlYWRlcl9wZWVrXyMjbmFtZSMjX3VuY2hlY2tlZCAocmVhZGVyKTsgXAorICByZXR1cm4gVFJVRTsgXAorfSBcCitcCitzdGF0aWMgaW5saW5lIGdib29sZWFuIFwKK19nc3RfYnl0ZV9yZWFkZXJfZ2V0XyMjbmFtZSMjX2lubGluZSAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlciwgdHlwZSAqIHZhbCkgXAoreyBcCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZWFkZXIgIT0gTlVMTCwgRkFMU0UpOyBcCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh2YWwgIT0gTlVMTCwgRkFMU0UpOyBcCisgIFwKKyAgaWYgKF9nc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZ191bmNoZWNrZWQgKHJlYWRlcikgPCAoYml0cyAvIDgpKSBcCisgICAgcmV0dXJuIEZBTFNFOyBcCitcCisgICp2YWwgPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0XyMjbmFtZSMjX3VuY2hlY2tlZCAocmVhZGVyKTsgXAorICByZXR1cm4gVFJVRTsgXAorfQorCitfX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX0lOTElORSg4LGd1aW50OCx1aW50OCkKK19fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfSU5MSU5FKDgsZ2ludDgsaW50OCkKKworX19HU1RfQllURV9SRUFERVJfR0VUX1BFRUtfQklUU19JTkxJTkUoMTYsZ3VpbnQxNix1aW50MTZfbGUpCitfX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX0lOTElORSgxNixndWludDE2LHVpbnQxNl9iZSkKK19fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfSU5MSU5FKDE2LGdpbnQxNixpbnQxNl9sZSkKK19fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfSU5MSU5FKDE2LGdpbnQxNixpbnQxNl9iZSkKKworX19HU1RfQllURV9SRUFERVJfR0VUX1BFRUtfQklUU19JTkxJTkUoMzIsZ3VpbnQzMix1aW50MzJfbGUpCitfX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX0lOTElORSgzMixndWludDMyLHVpbnQzMl9iZSkKK19fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfSU5MSU5FKDMyLGdpbnQzMixpbnQzMl9sZSkKK19fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfSU5MSU5FKDMyLGdpbnQzMixpbnQzMl9iZSkKKworX19HU1RfQllURV9SRUFERVJfR0VUX1BFRUtfQklUU19JTkxJTkUoMjQsZ3VpbnQzMix1aW50MjRfbGUpCitfX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX0lOTElORSgyNCxndWludDMyLHVpbnQyNF9iZSkKK19fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfSU5MSU5FKDI0LGdpbnQzMixpbnQyNF9sZSkKK19fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfSU5MSU5FKDI0LGdpbnQzMixpbnQyNF9iZSkKKworX19HU1RfQllURV9SRUFERVJfR0VUX1BFRUtfQklUU19JTkxJTkUoNjQsZ3VpbnQ2NCx1aW50NjRfbGUpCitfX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX0lOTElORSg2NCxndWludDY0LHVpbnQ2NF9iZSkKK19fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfSU5MSU5FKDY0LGdpbnQ2NCxpbnQ2NF9sZSkKK19fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfSU5MSU5FKDY0LGdpbnQ2NCxpbnQ2NF9iZSkKKworX19HU1RfQllURV9SRUFERVJfR0VUX1BFRUtfQklUU19JTkxJTkUoMzIsZ2Zsb2F0LGZsb2F0MzJfbGUpCitfX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX0lOTElORSgzMixnZmxvYXQsZmxvYXQzMl9iZSkKK19fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfSU5MSU5FKDY0LGdkb3VibGUsZmxvYXQ2NF9sZSkKK19fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfSU5MSU5FKDY0LGdkb3VibGUsZmxvYXQ2NF9iZSkKKworI3VuZGVmIF9fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfSU5MSU5FCisKKyNpZm5kZWYgR1NUX0JZVEVfUkVBREVSX0RJU0FCTEVfSU5MSU5FUworCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nKHJlYWRlcikgXAorICAgIF9nc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZ19pbmxpbmUocmVhZGVyKQorCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfc2l6ZShyZWFkZXIpIFwKKyAgICBfZ3N0X2J5dGVfcmVhZGVyX2dldF9zaXplX2lubGluZShyZWFkZXIpCisKKyNkZWZpbmUgZ3N0X2J5dGVfcmVhZGVyX2dldF9wb3MocmVhZGVyKSBcCisgICAgX2dzdF9ieXRlX3JlYWRlcl9nZXRfcG9zX2lubGluZShyZWFkZXIpCisKKy8qIHdlIHVzZSBkZWZpbmVzIGhlcmUgc28gd2UgY2FuIGFkZCB0aGUgR19MSUtFTFkoKSAqLworI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4KHJlYWRlcix2YWwpIFwKKyAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OF9pbmxpbmUocmVhZGVyLHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50OChyZWFkZXIsdmFsKSBcCisgICAgR19MSUtFTFkoX2dzdF9ieXRlX3JlYWRlcl9nZXRfaW50OF9pbmxpbmUocmVhZGVyLHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2xlKHJlYWRlcix2YWwpIFwKKyAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfbGVfaW5saW5lKHJlYWRlcix2YWwpKQorI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2xlKHJlYWRlcix2YWwpIFwKKyAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9sZV9pbmxpbmUocmVhZGVyLHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlKHJlYWRlcix2YWwpIFwKKyAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmVfaW5saW5lKHJlYWRlcix2YWwpKQorI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2JlKHJlYWRlcix2YWwpIFwKKyAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9iZV9pbmxpbmUocmVhZGVyLHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2xlKHJlYWRlcix2YWwpIFwKKyAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfbGVfaW5saW5lKHJlYWRlcix2YWwpKQorI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDI0X2xlKHJlYWRlcix2YWwpIFwKKyAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9sZV9pbmxpbmUocmVhZGVyLHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2JlKHJlYWRlcix2YWwpIFwKKyAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfYmVfaW5saW5lKHJlYWRlcix2YWwpKQorI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDI0X2JlKHJlYWRlcix2YWwpIFwKKyAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9iZV9pbmxpbmUocmVhZGVyLHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlKHJlYWRlcix2YWwpIFwKKyAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfbGVfaW5saW5lKHJlYWRlcix2YWwpKQorI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2xlKHJlYWRlcix2YWwpIFwKKyAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9sZV9pbmxpbmUocmVhZGVyLHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlKHJlYWRlcix2YWwpIFwKKyAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmVfaW5saW5lKHJlYWRlcix2YWwpKQorI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2JlKHJlYWRlcix2YWwpIFwKKyAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9iZV9pbmxpbmUocmVhZGVyLHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2xlKHJlYWRlcix2YWwpIFwKKyAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfbGVfaW5saW5lKHJlYWRlcix2YWwpKQorI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2xlKHJlYWRlcix2YWwpIFwKKyAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9sZV9pbmxpbmUocmVhZGVyLHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2JlKHJlYWRlcix2YWwpIFwKKyAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmVfaW5saW5lKHJlYWRlcix2YWwpKQorI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2JlKHJlYWRlcix2YWwpIFwKKyAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9iZV9pbmxpbmUocmVhZGVyLHZhbCkpCisKKyNkZWZpbmUgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDgocmVhZGVyLHZhbCkgXAorICAgIEdfTElLRUxZKF9nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50OF9pbmxpbmUocmVhZGVyLHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDgocmVhZGVyLHZhbCkgXAorICAgIEdfTElLRUxZKF9nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ4X2lubGluZShyZWFkZXIsdmFsKSkKKyNkZWZpbmUgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2xlKHJlYWRlcix2YWwpIFwKKyAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2xlX2lubGluZShyZWFkZXIsdmFsKSkKKyNkZWZpbmUgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfbGUocmVhZGVyLHZhbCkgXAorICAgIEdfTElLRUxZKF9nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQxNl9sZV9pbmxpbmUocmVhZGVyLHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQxNl9iZShyZWFkZXIsdmFsKSBcCisgICAgR19MSUtFTFkoX2dzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQxNl9iZV9pbmxpbmUocmVhZGVyLHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2JlKHJlYWRlcix2YWwpIFwKKyAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfYmVfaW5saW5lKHJlYWRlcix2YWwpKQorI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfbGUocmVhZGVyLHZhbCkgXAorICAgIEdfTElLRUxZKF9nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfbGVfaW5saW5lKHJlYWRlcix2YWwpKQorI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9sZShyZWFkZXIsdmFsKSBcCisgICAgR19MSUtFTFkoX2dzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2xlX2lubGluZShyZWFkZXIsdmFsKSkKKyNkZWZpbmUgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2JlKHJlYWRlcix2YWwpIFwKKyAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2JlX2lubGluZShyZWFkZXIsdmFsKSkKKyNkZWZpbmUgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfYmUocmVhZGVyLHZhbCkgXAorICAgIEdfTElLRUxZKF9nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9iZV9pbmxpbmUocmVhZGVyLHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9sZShyZWFkZXIsdmFsKSBcCisgICAgR19MSUtFTFkoX2dzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9sZV9pbmxpbmUocmVhZGVyLHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2xlKHJlYWRlcix2YWwpIFwKKyAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfbGVfaW5saW5lKHJlYWRlcix2YWwpKQorI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfYmUocmVhZGVyLHZhbCkgXAorICAgIEdfTElLRUxZKF9nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfYmVfaW5saW5lKHJlYWRlcix2YWwpKQorI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9iZShyZWFkZXIsdmFsKSBcCisgICAgR19MSUtFTFkoX2dzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2JlX2lubGluZShyZWFkZXIsdmFsKSkKKyNkZWZpbmUgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2xlKHJlYWRlcix2YWwpIFwKKyAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2xlX2lubGluZShyZWFkZXIsdmFsKSkKKyNkZWZpbmUgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfbGUocmVhZGVyLHZhbCkgXAorICAgIEdfTElLRUxZKF9nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9sZV9pbmxpbmUocmVhZGVyLHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9iZShyZWFkZXIsdmFsKSBcCisgICAgR19MSUtFTFkoX2dzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9iZV9pbmxpbmUocmVhZGVyLHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2JlKHJlYWRlcix2YWwpIFwKKyAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfYmVfaW5saW5lKHJlYWRlcix2YWwpKQorCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9sZShyZWFkZXIsdmFsKSBcCisgICAgR19MSUtFTFkoX2dzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9sZV9pbmxpbmUocmVhZGVyLHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9iZShyZWFkZXIsdmFsKSBcCisgICAgR19MSUtFTFkoX2dzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9iZV9pbmxpbmUocmVhZGVyLHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9sZShyZWFkZXIsdmFsKSBcCisgICAgR19MSUtFTFkoX2dzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9sZV9pbmxpbmUocmVhZGVyLHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9iZShyZWFkZXIsdmFsKSBcCisgICAgR19MSUtFTFkoX2dzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9iZV9pbmxpbmUocmVhZGVyLHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfbGUocmVhZGVyLHZhbCkgXAorICAgIEdfTElLRUxZKF9nc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2xlX2lubGluZShyZWFkZXIsdmFsKSkKKyNkZWZpbmUgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQzMl9iZShyZWFkZXIsdmFsKSBcCisgICAgR19MSUtFTFkoX2dzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfYmVfaW5saW5lKHJlYWRlcix2YWwpKQorI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2xlKHJlYWRlcix2YWwpIFwKKyAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9sZV9pbmxpbmUocmVhZGVyLHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfYmUocmVhZGVyLHZhbCkgXAorICAgIEdfTElLRUxZKF9nc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2JlX2lubGluZShyZWFkZXIsdmFsKSkKKworI2VuZGlmIC8qIEdTVF9CWVRFX1JFQURFUl9ESVNBQkxFX0lOTElORVMgKi8KKworc3RhdGljIGlubGluZSBnYm9vbGVhbgorX2dzdF9ieXRlX3JlYWRlcl9kdXBfZGF0YV9pbmxpbmUgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsIGd1aW50IHNpemUsIGd1aW50OCAqKiB2YWwpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZWFkZXIgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAodmFsICE9IE5VTEwsIEZBTFNFKTsKKworICBpZiAoR19VTkxJS0VMWSAoc2l6ZSA+IHJlYWRlci0+c2l6ZSB8fCBfZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmdfaW5saW5lIChyZWFkZXIpIDwgc2l6ZSkpCisgICAgcmV0dXJuIEZBTFNFOworCisgICp2YWwgPSBnc3RfYnl0ZV9yZWFkZXJfZHVwX2RhdGFfdW5jaGVja2VkIChyZWFkZXIsIHNpemUpOworICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGlubGluZSBnYm9vbGVhbgorX2dzdF9ieXRlX3JlYWRlcl9nZXRfZGF0YV9pbmxpbmUgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsIGd1aW50IHNpemUsIGNvbnN0IGd1aW50OCAqKiB2YWwpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZWFkZXIgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAodmFsICE9IE5VTEwsIEZBTFNFKTsKKworICBpZiAoR19VTkxJS0VMWSAoc2l6ZSA+IHJlYWRlci0+c2l6ZSB8fCBfZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmdfaW5saW5lIChyZWFkZXIpIDwgc2l6ZSkpCisgICAgcmV0dXJuIEZBTFNFOworCisgICp2YWwgPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGFfdW5jaGVja2VkIChyZWFkZXIsIHNpemUpOworICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGlubGluZSBnYm9vbGVhbgorX2dzdF9ieXRlX3JlYWRlcl9wZWVrX2RhdGFfaW5saW5lIChjb25zdCBHc3RCeXRlUmVhZGVyICogcmVhZGVyLCBndWludCBzaXplLCBjb25zdCBndWludDggKiogdmFsKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVhZGVyICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZhbCAhPSBOVUxMLCBGQUxTRSk7CisKKyAgaWYgKEdfVU5MSUtFTFkgKHNpemUgPiByZWFkZXItPnNpemUgfHwgX2dzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nX2lubGluZSAocmVhZGVyKSA8IHNpemUpKQorICAgIHJldHVybiBGQUxTRTsKKworICAqdmFsID0gZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YV91bmNoZWNrZWQgKHJlYWRlcik7CisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgaW5saW5lIGd1aW50CitfZ3N0X2J5dGVfcmVhZGVyX2dldF9wb3NfaW5saW5lIChjb25zdCBHc3RCeXRlUmVhZGVyICogcmVhZGVyKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVhZGVyICE9IE5VTEwsIDApOworCisgIHJldHVybiBfZ3N0X2J5dGVfcmVhZGVyX2dldF9wb3NfdW5jaGVja2VkIChyZWFkZXIpOworfQorCitzdGF0aWMgaW5saW5lIGdib29sZWFuCitfZ3N0X2J5dGVfcmVhZGVyX3NraXBfaW5saW5lIChHc3RCeXRlUmVhZGVyICogcmVhZGVyLCBndWludCBuYnl0ZXMpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZWFkZXIgIT0gTlVMTCwgRkFMU0UpOworCisgIGlmIChHX1VOTElLRUxZIChfZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmdfdW5jaGVja2VkIChyZWFkZXIpIDwgbmJ5dGVzKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgcmVhZGVyLT5ieXRlICs9IG5ieXRlczsKKyAgcmV0dXJuIFRSVUU7Cit9CisKKyNpZm5kZWYgR1NUX0JZVEVfUkVBREVSX0RJU0FCTEVfSU5MSU5FUworCisjZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9kdXBfZGF0YShyZWFkZXIsc2l6ZSx2YWwpIFwKKyAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2R1cF9kYXRhX2lubGluZShyZWFkZXIsc2l6ZSx2YWwpKQorI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGEocmVhZGVyLHNpemUsdmFsKSBcCisgICAgR19MSUtFTFkoX2dzdF9ieXRlX3JlYWRlcl9nZXRfZGF0YV9pbmxpbmUocmVhZGVyLHNpemUsdmFsKSkKKyNkZWZpbmUgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YShyZWFkZXIsc2l6ZSx2YWwpIFwKKyAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YV9pbmxpbmUocmVhZGVyLHNpemUsdmFsKSkKKyNkZWZpbmUgZ3N0X2J5dGVfcmVhZGVyX3NraXAocmVhZGVyLG5ieXRlcykgXAorICAgIEdfTElLRUxZKF9nc3RfYnl0ZV9yZWFkZXJfc2tpcF9pbmxpbmUocmVhZGVyLG5ieXRlcykpCisKKyNlbmRpZiAvKiBHU1RfQllURV9SRUFERVJfRElTQUJMRV9JTkxJTkVTICovCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9CWVRFX1JFQURFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci1kb2NzLmggYi9saWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXItZG9jcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNGMyMGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXItZG9jcy5oCkBAIC0wLDAgKzEsMzE2IEBACisvKiBHU3RyZWFtZXIgYnl0ZSB3cml0ZXIgZHVtbXkgaGVhZGVyIGZvciBndGstZG9jCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyogVGhpcyBoZWFkZXIgaXMgbm90IGluc3RhbGxlZCwgaXQganVzdCBjb250YWlucyBzdHVmZiBmb3IgZ3RrLWRvYyB0byBwYXJzZSwKKyAqIGluIHBhcnRpY3VsYXIgZG9jcyBhbmQgc29tZSBkdW1teSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgZm9yIHRoZSBzdGF0aWMKKyAqIGlubGluZSBmdW5jdGlvbnMgd2UgZ2VuZXJhdGUgdmlhIG1hY3JvcyBpbiBnc3RiaXRyZWFkZXIuaC4KKyAqLworCisjZXJyb3IgIlRoaXMgaGVhZGVyIHNob3VsZCBuZXZlciBiZSBpbmNsdWRlZCBpbiBjb2RlLCBpdCBpcyBvbmx5IGZvciBndGstZG9jIgorCisvKioKKyAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDhfdW5jaGVja2VkOgorICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKKyAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCisgKgorICogV3JpdGVzIGEgdW5zaWduZWQgOCBiaXQgaW50ZWdlciB0byBAd3JpdGVyIHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlcmUKKyAqIGlzIGVub3VnaCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSB3cml0ZXIuCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLwordm9pZCBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4X3VuY2hlY2tlZCAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBndWludDggdmFsKTsKKworLyoqCisgKiBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9iZV91bmNoZWNrZWQ6CisgKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQorICogQHZhbDogVmFsdWUgdG8gd3JpdGUKKyAqCisgKiBXcml0ZXMgYSB1bnNpZ25lZCBiaWcgZW5kaWFuIDE2IGJpdCBpbnRlZ2VyIHRvIEB3cml0ZXIgd2l0aG91dAorICogY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBieXRlIHdyaXRlci4KKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCit2b2lkIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2JlX3VuY2hlY2tlZCAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBndWludDE2IHZhbCk7CisKKy8qKgorICogZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfYmVfdW5jaGVja2VkOgorICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKKyAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCisgKgorICogV3JpdGVzIGEgdW5zaWduZWQgYmlnIGVuZGlhbiAyNCBiaXQgaW50ZWdlciB0byBAd3JpdGVyIHdpdGhvdXQKKyAqIGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSB3cml0ZXIuCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLwordm9pZCBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9iZV91bmNoZWNrZWQgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgZ3VpbnQzMiB2YWwpOworCisvKioKKyAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2JlX3VuY2hlY2tlZDoKKyAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCisgKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQorICoKKyAqIFdyaXRlcyBhIHVuc2lnbmVkIGJpZyBlbmRpYW4gMzIgYml0IGludGVnZXIgdG8gQHdyaXRlciB3aXRob3V0CisgKiBjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgorICoKKyAqIFNpbmNlOiAwLjEwLjMxCisgKi8KK3ZvaWQgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfYmVfdW5jaGVja2VkIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGd1aW50MzIgdmFsKTsKKworLyoqCisgKiBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9iZV91bmNoZWNrZWQ6CisgKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQorICogQHZhbDogVmFsdWUgdG8gd3JpdGUKKyAqCisgKiBXcml0ZXMgYSB1bnNpZ25lZCBiaWcgZW5kaWFuIDY0IGJpdCBpbnRlZ2VyIHRvIEB3cml0ZXIgd2l0aG91dAorICogY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBieXRlIHdyaXRlci4KKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCit2b2lkIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2JlX3VuY2hlY2tlZCAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBndWludDY0IHZhbCk7CisKKy8qKgorICogZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfbGVfdW5jaGVja2VkOgorICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKKyAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCisgKgorICogV3JpdGVzIGEgdW5zaWduZWQgbGl0dGxlIGVuZGlhbiAxNiBiaXQgaW50ZWdlciB0byBAd3JpdGVyIHdpdGhvdXQKKyAqIGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSB3cml0ZXIuCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLwordm9pZCBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9sZV91bmNoZWNrZWQgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgZ3VpbnQxNiB2YWwpOworCisvKioKKyAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2xlX3VuY2hlY2tlZDoKKyAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCisgKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQorICoKKyAqIFdyaXRlcyBhIHVuc2lnbmVkIGxpdHRsZSBlbmRpYW4gMjQgYml0IGludGVnZXIgdG8gQHdyaXRlciB3aXRob3V0CisgKiBjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgorICoKKyAqIFNpbmNlOiAwLjEwLjMxCisgKi8KK3ZvaWQgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfbGVfdW5jaGVja2VkIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGd1aW50MzIgdmFsKTsKKworLyoqCisgKiBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZV91bmNoZWNrZWQ6CisgKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQorICogQHZhbDogVmFsdWUgdG8gd3JpdGUKKyAqCisgKiBXcml0ZXMgYSB1bnNpZ25lZCBsaXR0bGUgZW5kaWFuIDMyIGJpdCBpbnRlZ2VyIHRvIEB3cml0ZXIgd2l0aG91dAorICogY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBieXRlIHdyaXRlci4KKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCit2b2lkIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlX3VuY2hlY2tlZCAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBndWludDMyIHZhbCk7CisKKy8qKgorICogZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfbGVfdW5jaGVja2VkOgorICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKKyAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCisgKgorICogV3JpdGVzIGEgdW5zaWduZWQgbGl0dGxlIGVuZGlhbiA2NCBiaXQgaW50ZWdlciB0byBAd3JpdGVyIHdpdGhvdXQKKyAqIGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSB3cml0ZXIuCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLwordm9pZCBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9sZV91bmNoZWNrZWQgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgZ3VpbnQ2NCB2YWwpOworCisvKioKKyAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50ODoKKyAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCisgKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQorICoKKyAqIFdyaXRlcyBhIHNpZ25lZCA4IGJpdCBpbnRlZ2VyIHRvIEB3cml0ZXIgd2l0aG91dAorICogY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBieXRlIHdyaXRlci4KKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCit2b2lkIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50OF91bmNoZWNrZWQgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgZ2ludDggdmFsKTsKKworLyoqCisgKiBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2JlX3VuY2hlY2tlZDoKKyAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCisgKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQorICoKKyAqIFdyaXRlcyBhIHNpZ25lZCBiaWcgZW5kaWFuIDE2IGJpdCBpbnRlZ2VyIHRvIEB3cml0ZXIgd2l0aG91dAorICogY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBieXRlIHdyaXRlci4KKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCit2b2lkIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfYmVfdW5jaGVja2VkIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGdpbnQxNiB2YWwpOworCisvKioKKyAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfYmVfdW5jaGVja2VkOgorICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKKyAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCisgKgorICogV3JpdGVzIGEgc2lnbmVkIGJpZyBlbmRpYW4gMjQgYml0IGludGVnZXIgdG8gQHdyaXRlciB3aXRob3V0CisgKiBjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgorICoKKyAqIFNpbmNlOiAwLjEwLjMxCisgKi8KK3ZvaWQgZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9iZV91bmNoZWNrZWQgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgZ2ludDMyIHZhbCk7CisKKy8qKgorICogZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9iZV91bmNoZWNrZWQ6CisgKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQorICogQHZhbDogVmFsdWUgdG8gd3JpdGUKKyAqCisgKiBXcml0ZXMgYSBzaWduZWQgYmlnIGVuZGlhbiAzMiBiaXQgaW50ZWdlciB0byBAd3JpdGVyIHdpdGhvdXQKKyAqIGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSB3cml0ZXIuCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLwordm9pZCBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDMyX2JlX3VuY2hlY2tlZCAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBnaW50MzIgdmFsKTsKKworLyoqCisgKiBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2JlX3VuY2hlY2tlZDoKKyAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCisgKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQorICoKKyAqIFdyaXRlcyBhIHNpZ25lZCBiaWcgZW5kaWFuIDY0IGJpdCBpbnRlZ2VyIHRvIEB3cml0ZXIgd2l0aG91dAorICogY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBieXRlIHdyaXRlci4KKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCit2b2lkIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfYmVfdW5jaGVja2VkIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGdpbnQ2NCB2YWwpOworCisvKioKKyAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfbGVfdW5jaGVja2VkOgorICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKKyAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCisgKgorICogV3JpdGVzIGEgc2lnbmVkIGxpdHRsZSBlbmRpYW4gMTYgYml0IGludGVnZXIgdG8gQHdyaXRlciB3aXRob3V0CisgKiBjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgorICoKKyAqIFNpbmNlOiAwLjEwLjMxCisgKi8KK3ZvaWQgZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9sZV91bmNoZWNrZWQgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgZ2ludDE2IHZhbCk7CisKKy8qKgorICogZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9sZV91bmNoZWNrZWQ6CisgKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQorICogQHZhbDogVmFsdWUgdG8gd3JpdGUKKyAqCisgKiBXcml0ZXMgYSBzaWduZWQgbGl0dGxlIGVuZGlhbiAyNCBiaXQgaW50ZWdlciB0byBAd3JpdGVyIHdpdGhvdXQKKyAqIGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSB3cml0ZXIuCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLwordm9pZCBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2xlX3VuY2hlY2tlZCAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBnaW50MzIgdmFsKTsKKworLyoqCisgKiBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDMyX2xlX3VuY2hlY2tlZDoKKyAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCisgKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQorICoKKyAqIFdyaXRlcyBhIHNpZ25lZCBsaXR0bGUgZW5kaWFuIDMyIGJpdCBpbnRlZ2VyIHRvIEB3cml0ZXIgd2l0aG91dAorICogY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBieXRlIHdyaXRlci4KKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCit2b2lkIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfbGVfdW5jaGVja2VkIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGdpbnQzMiB2YWwpOworCisvKioKKyAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfbGVfdW5jaGVja2VkOgorICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKKyAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCisgKgorICogV3JpdGVzIGEgc2lnbmVkIGxpdHRsZSBlbmRpYW4gNjQgYml0IGludGVnZXIgdG8gQHdyaXRlciB3aXRob3V0CisgKiBjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgorICoKKyAqIFNpbmNlOiAwLjEwLjMxCisgKi8KK3ZvaWQgZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9sZV91bmNoZWNrZWQgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgZ2ludDY0IHZhbCk7CisKKy8qKgorICogZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDMyX2JlX3VuY2hlY2tlZDoKKyAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCisgKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQorICoKKyAqIFdyaXRlcyBhIGJpZyBlbmRpYW4gMzIgYml0IGZsb2F0IHRvIEB3cml0ZXIgd2l0aG91dAorICogY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBieXRlIHdyaXRlci4KKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCit2b2lkIGdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9iZV91bmNoZWNrZWQgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgZ2Zsb2F0IHZhbCk7CisKKy8qKgorICogZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDY0X2JlX3VuY2hlY2tlZDoKKyAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCisgKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQorICoKKyAqIFdyaXRlcyBhIGJpZyBlbmRpYW4gNjQgYml0IGZsb2F0IHRvIEB3cml0ZXIgd2l0aG91dAorICogY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBieXRlIHdyaXRlci4KKyAqCisgKiBTaW5jZTogMC4xMC4zMQorICovCit2b2lkIGdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9iZV91bmNoZWNrZWQgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgZ2RvdWJsZSB2YWwpOworCisvKioKKyAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9sZV91bmNoZWNrZWQ6CisgKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQorICogQHZhbDogVmFsdWUgdG8gd3JpdGUKKyAqCisgKiBXcml0ZXMgYSBsaXR0bGUgZW5kaWFuIDMyIGJpdCBmbG9hdCB0byBAd3JpdGVyIHdpdGhvdXQKKyAqIGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSB3cml0ZXIuCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLwordm9pZCBnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfbGVfdW5jaGVja2VkIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGdmbG9hdCB2YWwpOworCisvKioKKyAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9sZV91bmNoZWNrZWQ6CisgKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQorICogQHZhbDogVmFsdWUgdG8gd3JpdGUKKyAqCisgKiBXcml0ZXMgYSBsaXR0bGUgZW5kaWFuIDY0IGJpdCBmbG9hdCB0byBAd3JpdGVyIHdpdGhvdXQKKyAqIGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSB3cml0ZXIuCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLwordm9pZCBnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfbGVfdW5jaGVja2VkIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGdkb3VibGUgdmFsKTsKKworLyoqCisgKiBnc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGFfdW5jaGVja2VkOgorICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKKyAqIEBkYXRhOiAoaW4pICh0cmFuc2ZlciBub25lKSAoYXJyYXkgbGVuZ3RoPXNpemUpOiBEYXRhIHRvIHdyaXRlCisgKiBAc2l6ZTogU2l6ZSBvZiBAZGF0YSBpbiBieXRlcworICoKKyAqIFdyaXRlcyBAc2l6ZSBieXRlcyBvZiBAZGF0YSB0byBAd3JpdGVyIHdpdGhvdXQKKyAqIGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSB3cml0ZXIuCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLwordm9pZCBnc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGFfdW5jaGVja2VkIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGNvbnN0IGd1aW50OCAqZGF0YSwgZ3VpbnQgc2l6ZSk7CisKKy8qKgorICogZ3N0X2J5dGVfd3JpdGVyX2ZpbGxfdW5jaGVja2VkOgorICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKKyAqIEB2YWx1ZTogVmFsdWUgdG8gYmUgd3JpdGVuCisgKiBAc2l6ZTogTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXRlbgorICoKKyAqIFdyaXRlcyBAc2l6ZSBieXRlcyBjb250YWluaW5nIEB2YWx1ZSB0byBAd3JpdGVyIHdpdGhvdXQKKyAqIGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSB3cml0ZXIuCisgKgorICogU2luY2U6IDAuMTAuMzEKKyAqLwordm9pZCBnc3RfYnl0ZV93cml0ZXJfZmlsbF91bmNoZWNrZWQgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgZ3VpbnQ4IHZhbHVlLCBndWludCBzaXplKTsKKwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLmMgYi9saWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjliNzA1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLmMKQEAgLTAsMCArMSw3NTIgQEAKKy8qIEdTdHJlYW1lciBieXRlIHdyaXRlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjZGVmaW5lIEdTVF9CWVRFX1dSSVRFUl9ESVNBQkxFX0lOTElORVMKKyNpbmNsdWRlICJnc3RieXRld3JpdGVyLmgiCisKKy8qKgorICogU0VDVElPTjpnc3RieXRld3JpdGVyCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IFdyaXRlcyBkaWZmZXJlbnQgaW50ZWdlciwgc3RyaW5nIGFuZCBmbG9hdGluZyBwb2ludAorICogICAgIHR5cGVzIHRvIGEgbWVtb3J5IGJ1ZmZlciBhbmQgYWxsb3dzIHJlYWRpbmcKKyAqCisgKiAjR3N0Qnl0ZVdyaXRlciBwcm92aWRlcyBhIGJ5dGUgd3JpdGVyIGFuZCByZWFkZXIgdGhhdCBjYW4gd3JpdGUvcmVhZCBkaWZmZXJlbnQKKyAqIGludGVnZXIgYW5kIGZsb2F0aW5nIHBvaW50IHR5cGVzIHRvL2Zyb20gYSBtZW1vcnkgYnVmZmVyLiBJdCBwcm92aWRlcyBmdW5jdGlvbnMKKyAqIGZvciB3cml0aW5nL3JlYWRpbmcgc2lnbmVkL3Vuc2lnbmVkLCBsaXR0bGUvYmlnIGVuZGlhbiBpbnRlZ2VycyBvZiA4LCAxNiwgMjQsCisgKiAzMiBhbmQgNjQgYml0cyBhbmQgZnVuY3Rpb25zIGZvciByZWFkaW5nIGxpdHRsZS9iaWcgZW5kaWFuIGZsb2F0aW5nIHBvaW50cyBudW1iZXJzIG9mCisgKiAzMiBhbmQgNjQgYml0cy4gSXQgYWxzbyBwcm92aWRlcyBmdW5jdGlvbnMgdG8gd3JpdGUvcmVhZCBOVUwtdGVybWluYXRlZCBzdHJpbmdzCisgKiBpbiB2YXJpb3VzIGNoYXJhY3RlciBlbmNvZGluZ3MuCisgKi8KKworLyoqCisgKiBnc3RfYnl0ZV93cml0ZXJfbmV3OgorICoKKyAqIENyZWF0ZXMgYSBuZXcsIGVtcHR5ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCisgKgorICogRnJlZS1mdW5jdGlvbjogZ3N0X2J5dGVfd3JpdGVyX2ZyZWUKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3LCBlbXB0eSAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQorICoKKyAqIFNpbmNlOiAwLjEwLjI2CisgKi8KK0dzdEJ5dGVXcml0ZXIgKgorZ3N0X2J5dGVfd3JpdGVyX25ldyAodm9pZCkKK3sKKyAgR3N0Qnl0ZVdyaXRlciAqcmV0ID0gZ19zbGljZV9uZXcwIChHc3RCeXRlV3JpdGVyKTsKKworICByZXQtPm93bmVkID0gVFJVRTsKKyAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBnc3RfYnl0ZV93cml0ZXJfbmV3X3dpdGhfc2l6ZToKKyAqIEBzaXplOiBJbml0aWFsIHNpemUgb2YgZGF0YQorICogQGZpeGVkOiBJZiAlVFJVRSB0aGUgZGF0YSBjYW4ndCBiZSByZWFsbG9jYXRlZAorICoKKyAqIENyZWF0ZXMgYSBuZXcgI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2Ugd2l0aCB0aGUgZ2l2ZW4KKyAqIGluaXRpYWwgZGF0YSBzaXplLgorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdzdF9ieXRlX3dyaXRlcl9mcmVlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQorICoKKyAqIFNpbmNlOiAwLjEwLjI2CisgKi8KK0dzdEJ5dGVXcml0ZXIgKgorZ3N0X2J5dGVfd3JpdGVyX25ld193aXRoX3NpemUgKGd1aW50IHNpemUsIGdib29sZWFuIGZpeGVkKQoreworICBHc3RCeXRlV3JpdGVyICpyZXQgPSBnc3RfYnl0ZV93cml0ZXJfbmV3ICgpOworCisgIHJldC0+YWxsb2Nfc2l6ZSA9IHNpemU7CisgIHJldC0+cGFyZW50LmRhdGEgPSBnX21hbGxvYyAocmV0LT5hbGxvY19zaXplKTsKKyAgcmV0LT5maXhlZCA9IGZpeGVkOworICByZXQtPm93bmVkID0gVFJVRTsKKworICByZXR1cm4gcmV0OworfQorCisvKioKKyAqIGdzdF9ieXRlX3dyaXRlcl9uZXdfd2l0aF9kYXRhOgorICogQGRhdGE6IE1lbW9yeSBhcmVhIGZvciB3cml0aW5nCisgKiBAc2l6ZTogU2l6ZSBvZiBAZGF0YSBpbiBieXRlcworICogQGluaXRpYWxpemVkOiBJZiAlVFJVRSB0aGUgY29tcGxldGUgZGF0YSBjYW4gYmUgcmVhZCBmcm9tIHRoZSBiZWdpbm5pbmcKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlIHdpdGggdGhlIGdpdmVuCisgKiBtZW1vcnkgYXJlYS4gSWYgQGluaXRpYWxpemVkIGlzICVUUlVFIGl0IGlzIHBvc3NpYmxlIHRvCisgKiByZWFkIEBzaXplIGJ5dGVzIGZyb20gdGhlICNHc3RCeXRlV3JpdGVyIGZyb20gdGhlIGJlZ2lubmluZy4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnc3RfYnl0ZV93cml0ZXJfZnJlZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKKyAqCisgKiBTaW5jZTogMC4xMC4yNgorICovCitHc3RCeXRlV3JpdGVyICoKK2dzdF9ieXRlX3dyaXRlcl9uZXdfd2l0aF9kYXRhIChndWludDggKiBkYXRhLCBndWludCBzaXplLCBnYm9vbGVhbiBpbml0aWFsaXplZCkKK3sKKyAgR3N0Qnl0ZVdyaXRlciAqcmV0ID0gZ3N0X2J5dGVfd3JpdGVyX25ldyAoKTsKKworICByZXQtPnBhcmVudC5kYXRhID0gZGF0YTsKKyAgcmV0LT5wYXJlbnQuc2l6ZSA9IChpbml0aWFsaXplZCkgPyBzaXplIDogMDsKKyAgcmV0LT5hbGxvY19zaXplID0gc2l6ZTsKKyAgcmV0LT5maXhlZCA9IFRSVUU7CisgIHJldC0+b3duZWQgPSBGQUxTRTsKKworICByZXR1cm4gcmV0OworfQorCisvKioKKyAqIGdzdF9ieXRlX3dyaXRlcl9pbml0OgorICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKKyAqCisgKiBJbml0aWFsaXplcyBAd3JpdGVyIHRvIGFuIGVtcHR5IGluc3RhbmNlCisgKgorICogU2luY2U6IDAuMTAuMjYKKyAqLwordm9pZAorZ3N0X2J5dGVfd3JpdGVyX2luaXQgKEdzdEJ5dGVXcml0ZXIgKiB3cml0ZXIpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKHdyaXRlciAhPSBOVUxMKTsKKworICBtZW1zZXQgKHdyaXRlciwgMCwgc2l6ZW9mIChHc3RCeXRlV3JpdGVyKSk7CisKKyAgd3JpdGVyLT5vd25lZCA9IFRSVUU7Cit9CisKKy8qKgorICogZ3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9zaXplOgorICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKKyAqIEBzaXplOiBJbml0aWFsIHNpemUgb2YgZGF0YQorICogQGZpeGVkOiBJZiAlVFJVRSB0aGUgZGF0YSBjYW4ndCBiZSByZWFsbG9jYXRlZAorICoKKyAqIEluaXRpYWxpemVzIEB3cml0ZXIgd2l0aCB0aGUgZ2l2ZW4gaW5pdGlhbCBkYXRhIHNpemUuCisgKgorICogU2luY2U6IDAuMTAuMjYKKyAqLwordm9pZAorZ3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9zaXplIChHc3RCeXRlV3JpdGVyICogd3JpdGVyLCBndWludCBzaXplLAorICAgIGdib29sZWFuIGZpeGVkKQoreworICBnX3JldHVybl9pZl9mYWlsICh3cml0ZXIgIT0gTlVMTCk7CisKKyAgZ3N0X2J5dGVfd3JpdGVyX2luaXQgKHdyaXRlcik7CisKKyAgd3JpdGVyLT5wYXJlbnQuZGF0YSA9IGdfbWFsbG9jIChzaXplKTsKKyAgd3JpdGVyLT5hbGxvY19zaXplID0gc2l6ZTsKKyAgd3JpdGVyLT5maXhlZCA9IGZpeGVkOworICB3cml0ZXItPm93bmVkID0gVFJVRTsKK30KKworLyoqCisgKiBnc3RfYnl0ZV93cml0ZXJfaW5pdF93aXRoX2RhdGE6CisgKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQorICogQGRhdGE6IChpbiBjYWxsZWUtYWxsb2NhdGVkKSAoYXJyYXkgbGVuZ3RoPXNpemUpICh0cmFuc2ZlciBub25lKTogTWVtb3J5CisgKiAgICAgYXJlYSBmb3Igd3JpdGluZworICogQHNpemU6IFNpemUgb2YgQGRhdGEgaW4gYnl0ZXMKKyAqIEBpbml0aWFsaXplZDogSWYgJVRSVUUgdGhlIGNvbXBsZXRlIGRhdGEgY2FuIGJlIHJlYWQgZnJvbSB0aGUgYmVnaW5uaW5nCisgKgorICogSW5pdGlhbGl6ZXMgQHdyaXRlciB3aXRoIHRoZSBnaXZlbgorICogbWVtb3J5IGFyZWEuIElmIEBpbml0aWFsaXplZCBpcyAlVFJVRSBpdCBpcyBwb3NzaWJsZSB0bworICogcmVhZCBAc2l6ZSBieXRlcyBmcm9tIHRoZSAjR3N0Qnl0ZVdyaXRlciBmcm9tIHRoZSBiZWdpbm5pbmcuCisgKgorICogU2luY2U6IDAuMTAuMjYKKyAqLwordm9pZAorZ3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9kYXRhIChHc3RCeXRlV3JpdGVyICogd3JpdGVyLCBndWludDggKiBkYXRhLAorICAgIGd1aW50IHNpemUsIGdib29sZWFuIGluaXRpYWxpemVkKQoreworICBnX3JldHVybl9pZl9mYWlsICh3cml0ZXIgIT0gTlVMTCk7CisKKyAgZ3N0X2J5dGVfd3JpdGVyX2luaXQgKHdyaXRlcik7CisKKyAgd3JpdGVyLT5wYXJlbnQuZGF0YSA9IGRhdGE7CisgIHdyaXRlci0+cGFyZW50LnNpemUgPSAoaW5pdGlhbGl6ZWQpID8gc2l6ZSA6IDA7CisgIHdyaXRlci0+YWxsb2Nfc2l6ZSA9IHNpemU7CisgIHdyaXRlci0+Zml4ZWQgPSBUUlVFOworICB3cml0ZXItPm93bmVkID0gRkFMU0U7Cit9CisKKy8qKgorICogZ3N0X2J5dGVfd3JpdGVyX3Jlc2V0OgorICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKKyAqCisgKiBSZXNldHMgQHdyaXRlciBhbmQgZnJlZXMgdGhlIGRhdGEgaWYgaXQncworICogb3duZWQgYnkgQHdyaXRlci4KKyAqCisgKiBTaW5jZTogMC4xMC4yNgorICovCit2b2lkCitnc3RfYnl0ZV93cml0ZXJfcmVzZXQgKEdzdEJ5dGVXcml0ZXIgKiB3cml0ZXIpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKHdyaXRlciAhPSBOVUxMKTsKKworICBpZiAod3JpdGVyLT5vd25lZCkKKyAgICBnX2ZyZWUgKChndWludDggKikgd3JpdGVyLT5wYXJlbnQuZGF0YSk7CisgIG1lbXNldCAod3JpdGVyLCAwLCBzaXplb2YgKEdzdEJ5dGVXcml0ZXIpKTsKK30KKworLyoqCisgKiBnc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9kYXRhOgorICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKKyAqCisgKiBSZXNldHMgQHdyaXRlciBhbmQgcmV0dXJucyB0aGUgY3VycmVudCBkYXRhLgorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdfZnJlZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIGN1cnJlbnQgZGF0YS4gZ19mcmVlKCkgYWZ0ZXIgdXNhZ2UuCisgKgorICogU2luY2U6IDAuMTAuMjYKKyAqLworZ3VpbnQ4ICoKK2dzdF9ieXRlX3dyaXRlcl9yZXNldF9hbmRfZ2V0X2RhdGEgKEdzdEJ5dGVXcml0ZXIgKiB3cml0ZXIpCit7CisgIGd1aW50OCAqZGF0YTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAod3JpdGVyICE9IE5VTEwsIE5VTEwpOworCisgIGRhdGEgPSAoZ3VpbnQ4ICopIHdyaXRlci0+cGFyZW50LmRhdGE7CisgIGlmICghd3JpdGVyLT5vd25lZCkKKyAgICBkYXRhID0gZ19tZW1kdXAgKGRhdGEsIHdyaXRlci0+cGFyZW50LnNpemUpOworICB3cml0ZXItPnBhcmVudC5kYXRhID0gTlVMTDsKKyAgZ3N0X2J5dGVfd3JpdGVyX3Jlc2V0ICh3cml0ZXIpOworCisgIHJldHVybiBkYXRhOworfQorCisvKioKKyAqIGdzdF9ieXRlX3dyaXRlcl9yZXNldF9hbmRfZ2V0X2J1ZmZlcjoKKyAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCisgKgorICogUmVzZXRzIEB3cml0ZXIgYW5kIHJldHVybnMgdGhlIGN1cnJlbnQgZGF0YSBhcyBidWZmZXIuCisgKgorICogRnJlZS1mdW5jdGlvbjogZ3N0X2J1ZmZlcl91bnJlZgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIGN1cnJlbnQgZGF0YSBhcyBidWZmZXIuIGdzdF9idWZmZXJfdW5yZWYoKQorICogICAgIGFmdGVyIHVzYWdlLgorICoKKyAqIFNpbmNlOiAwLjEwLjI2CisgKi8KK0dzdEJ1ZmZlciAqCitnc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9idWZmZXIgKEdzdEJ5dGVXcml0ZXIgKiB3cml0ZXIpCit7CisgIEdzdEJ1ZmZlciAqYnVmZmVyOworICBncG9pbnRlciBkYXRhOworICBnc2l6ZSBzaXplOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh3cml0ZXIgIT0gTlVMTCwgTlVMTCk7CisKKyAgc2l6ZSA9IHdyaXRlci0+cGFyZW50LnNpemU7CisgIGRhdGEgPSBnc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9kYXRhICh3cml0ZXIpOworCisgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOworICBpZiAoZGF0YSAhPSBOVUxMKSB7CisgICAgZ3N0X2J1ZmZlcl90YWtlX21lbW9yeSAoYnVmZmVyLCAtMSwKKyAgICAgICAgZ3N0X21lbW9yeV9uZXdfd3JhcHBlZCAoMCwgZGF0YSwgZ19mcmVlLCBzaXplLCAwLCBzaXplKSk7CisgIH0KKworICByZXR1cm4gYnVmZmVyOworfQorCisvKioKKyAqIGdzdF9ieXRlX3dyaXRlcl9mcmVlOgorICogQHdyaXRlcjogKGluKSAodHJhbnNmZXIgZnVsbCk6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCisgKgorICogRnJlZXMgQHdyaXRlciBhbmQgYWxsIG1lbW9yeSBhbGxvY2F0ZWQgYnkgaXQuCisgKgorICogU2luY2U6IDAuMTAuMjYKKyAqLwordm9pZAorZ3N0X2J5dGVfd3JpdGVyX2ZyZWUgKEdzdEJ5dGVXcml0ZXIgKiB3cml0ZXIpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKHdyaXRlciAhPSBOVUxMKTsKKworICBnc3RfYnl0ZV93cml0ZXJfcmVzZXQgKHdyaXRlcik7CisgIGdfc2xpY2VfZnJlZSAoR3N0Qnl0ZVdyaXRlciwgd3JpdGVyKTsKK30KKworLyoqCisgKiBnc3RfYnl0ZV93cml0ZXJfZnJlZV9hbmRfZ2V0X2RhdGE6CisgKiBAd3JpdGVyOiAoaW4pICh0cmFuc2ZlciBmdWxsKTogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKKyAqCisgKiBGcmVlcyBAd3JpdGVyIGFuZCBhbGwgbWVtb3J5IGFsbG9jYXRlZCBieSBpdCBleGNlcHQKKyAqIHRoZSBjdXJyZW50IGRhdGEsIHdoaWNoIGlzIHJldHVybmVkLgorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdfZnJlZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIGN1cnJlbnQgZGF0YS4gZ19mcmVlKCkgYWZ0ZXIgdXNhZ2UuCisgKgorICogU2luY2U6IDAuMTAuMjYKKyAqLworZ3VpbnQ4ICoKK2dzdF9ieXRlX3dyaXRlcl9mcmVlX2FuZF9nZXRfZGF0YSAoR3N0Qnl0ZVdyaXRlciAqIHdyaXRlcikKK3sKKyAgZ3VpbnQ4ICpkYXRhOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh3cml0ZXIgIT0gTlVMTCwgTlVMTCk7CisKKyAgZGF0YSA9IGdzdF9ieXRlX3dyaXRlcl9yZXNldF9hbmRfZ2V0X2RhdGEgKHdyaXRlcik7CisgIGdfc2xpY2VfZnJlZSAoR3N0Qnl0ZVdyaXRlciwgd3JpdGVyKTsKKworICByZXR1cm4gZGF0YTsKK30KKworLyoqCisgKiBnc3RfYnl0ZV93cml0ZXJfZnJlZV9hbmRfZ2V0X2J1ZmZlcjoKKyAqIEB3cml0ZXI6IChpbikgKHRyYW5zZmVyIGZ1bGwpOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQorICoKKyAqIEZyZWVzIEB3cml0ZXIgYW5kIGFsbCBtZW1vcnkgYWxsb2NhdGVkIGJ5IGl0IGV4Y2VwdAorICogdGhlIGN1cnJlbnQgZGF0YSwgd2hpY2ggaXMgcmV0dXJuZWQgYXMgI0dzdEJ1ZmZlci4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnc3RfYnVmZmVyX3VucmVmCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgY3VycmVudCBkYXRhIGFzIGJ1ZmZlci4gZ3N0X2J1ZmZlcl91bnJlZigpCisgKiAgICAgYWZ0ZXIgdXNhZ2UuCisgKgorICogU2luY2U6IDAuMTAuMjYKKyAqLworR3N0QnVmZmVyICoKK2dzdF9ieXRlX3dyaXRlcl9mcmVlX2FuZF9nZXRfYnVmZmVyIChHc3RCeXRlV3JpdGVyICogd3JpdGVyKQoreworICBHc3RCdWZmZXIgKmJ1ZmZlcjsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAod3JpdGVyICE9IE5VTEwsIE5VTEwpOworCisgIGJ1ZmZlciA9IGdzdF9ieXRlX3dyaXRlcl9yZXNldF9hbmRfZ2V0X2J1ZmZlciAod3JpdGVyKTsKKyAgZ19zbGljZV9mcmVlIChHc3RCeXRlV3JpdGVyLCB3cml0ZXIpOworCisgIHJldHVybiBidWZmZXI7Cit9CisKKy8qKgorICogZ3N0X2J5dGVfd3JpdGVyX2dldF9yZW1haW5pbmc6CisgKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQorICoKKyAqIFJldHVybnMgdGhlIHJlbWFpbmluZyBzaXplIG9mIGRhdGEgdGhhdCBjYW4gc3RpbGwgYmUgd3JpdHRlbi4gSWYKKyAqIC0xIGlzIHJldHVybmVkIHRoZSByZW1haW5pbmcgc2l6ZSBpcyBvbmx5IGxpbWl0ZWQgYnkgc3lzdGVtIHJlc291cmNlcy4KKyAqCisgKiBSZXR1cm5zOiB0aGUgcmVtYWluaW5nIHNpemUgb2YgZGF0YSB0aGF0IGNhbiBzdGlsbCBiZSB3cml0dGVuCisgKgorICogU2luY2U6IDAuMTAuMjYKKyAqLworZ3VpbnQKK2dzdF9ieXRlX3dyaXRlcl9nZXRfcmVtYWluaW5nIChjb25zdCBHc3RCeXRlV3JpdGVyICogd3JpdGVyKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAod3JpdGVyICE9IE5VTEwsIC0xKTsKKworICBpZiAoIXdyaXRlci0+Zml4ZWQpCisgICAgcmV0dXJuIC0xOworICBlbHNlCisgICAgcmV0dXJuIHdyaXRlci0+YWxsb2Nfc2l6ZSAtIHdyaXRlci0+cGFyZW50LmJ5dGU7Cit9CisKKy8qKgorICogZ3N0X2J5dGVfd3JpdGVyX2Vuc3VyZV9mcmVlX3NwYWNlOgorICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKKyAqIEBzaXplOiBOdW1iZXIgb2YgYnl0ZXMgdGhhdCBzaG91bGQgYmUgYXZhaWxhYmxlCisgKgorICogQ2hlY2tzIGlmIGVub3VnaCBmcmVlIHNwYWNlIGZyb20gdGhlIGN1cnJlbnQgd3JpdGUgY3Vyc29yIGlzCisgKiBhdmFpbGFibGUgYW5kIHJlYWxsb2NhdGVzIGlmIG5lY2Vzc2FyeS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBhdCBsZWFzdCBAc2l6ZSBieXRlcyBhcmUgc3RpbGwgYXZhaWxhYmxlCisgKgorICogU2luY2U6IDAuMTAuMjYKKyAqLworZ2Jvb2xlYW4KK2dzdF9ieXRlX3dyaXRlcl9lbnN1cmVfZnJlZV9zcGFjZSAoR3N0Qnl0ZVdyaXRlciAqIHdyaXRlciwgZ3VpbnQgc2l6ZSkKK3sKKyAgcmV0dXJuIF9nc3RfYnl0ZV93cml0ZXJfZW5zdXJlX2ZyZWVfc3BhY2VfaW5saW5lICh3cml0ZXIsIHNpemUpOworfQorCisKKyNkZWZpbmUgQ1JFQVRFX1dSSVRFX0ZVTkMoYml0cyx0eXBlLG5hbWUsd3JpdGVfZnVuYykgXAorZ2Jvb2xlYW4gXAorZ3N0X2J5dGVfd3JpdGVyX3B1dF8jI25hbWUgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgdHlwZSB2YWwpIFwKK3sgXAorICByZXR1cm4gX2dzdF9ieXRlX3dyaXRlcl9wdXRfIyNuYW1lIyNfaW5saW5lICh3cml0ZXIsIHZhbCk7IFwKK30KKworQ1JFQVRFX1dSSVRFX0ZVTkMgKDgsIGd1aW50OCwgdWludDgsIEdTVF9XUklURV9VSU5UOCk7CitDUkVBVEVfV1JJVEVfRlVOQyAoOCwgZ2ludDgsIGludDgsIEdTVF9XUklURV9VSU5UOCk7CitDUkVBVEVfV1JJVEVfRlVOQyAoMTYsIGd1aW50MTYsIHVpbnQxNl9sZSwgR1NUX1dSSVRFX1VJTlQxNl9MRSk7CitDUkVBVEVfV1JJVEVfRlVOQyAoMTYsIGd1aW50MTYsIHVpbnQxNl9iZSwgR1NUX1dSSVRFX1VJTlQxNl9CRSk7CitDUkVBVEVfV1JJVEVfRlVOQyAoMTYsIGdpbnQxNiwgaW50MTZfbGUsIEdTVF9XUklURV9VSU5UMTZfTEUpOworQ1JFQVRFX1dSSVRFX0ZVTkMgKDE2LCBnaW50MTYsIGludDE2X2JlLCBHU1RfV1JJVEVfVUlOVDE2X0JFKTsKK0NSRUFURV9XUklURV9GVU5DICgyNCwgZ3VpbnQzMiwgdWludDI0X2xlLCBHU1RfV1JJVEVfVUlOVDI0X0xFKTsKK0NSRUFURV9XUklURV9GVU5DICgyNCwgZ3VpbnQzMiwgdWludDI0X2JlLCBHU1RfV1JJVEVfVUlOVDI0X0JFKTsKK0NSRUFURV9XUklURV9GVU5DICgyNCwgZ2ludDMyLCBpbnQyNF9sZSwgR1NUX1dSSVRFX1VJTlQyNF9MRSk7CitDUkVBVEVfV1JJVEVfRlVOQyAoMjQsIGdpbnQzMiwgaW50MjRfYmUsIEdTVF9XUklURV9VSU5UMjRfQkUpOworQ1JFQVRFX1dSSVRFX0ZVTkMgKDMyLCBndWludDMyLCB1aW50MzJfbGUsIEdTVF9XUklURV9VSU5UMzJfTEUpOworQ1JFQVRFX1dSSVRFX0ZVTkMgKDMyLCBndWludDMyLCB1aW50MzJfYmUsIEdTVF9XUklURV9VSU5UMzJfQkUpOworQ1JFQVRFX1dSSVRFX0ZVTkMgKDMyLCBnaW50MzIsIGludDMyX2xlLCBHU1RfV1JJVEVfVUlOVDMyX0xFKTsKK0NSRUFURV9XUklURV9GVU5DICgzMiwgZ2ludDMyLCBpbnQzMl9iZSwgR1NUX1dSSVRFX1VJTlQzMl9CRSk7CitDUkVBVEVfV1JJVEVfRlVOQyAoNjQsIGd1aW50NjQsIHVpbnQ2NF9sZSwgR1NUX1dSSVRFX1VJTlQ2NF9MRSk7CitDUkVBVEVfV1JJVEVfRlVOQyAoNjQsIGd1aW50NjQsIHVpbnQ2NF9iZSwgR1NUX1dSSVRFX1VJTlQ2NF9CRSk7CitDUkVBVEVfV1JJVEVfRlVOQyAoNjQsIGdpbnQ2NCwgaW50NjRfbGUsIEdTVF9XUklURV9VSU5UNjRfTEUpOworQ1JFQVRFX1dSSVRFX0ZVTkMgKDY0LCBnaW50NjQsIGludDY0X2JlLCBHU1RfV1JJVEVfVUlOVDY0X0JFKTsKKworQ1JFQVRFX1dSSVRFX0ZVTkMgKDMyLCBnZmxvYXQsIGZsb2F0MzJfYmUsIEdTVF9XUklURV9GTE9BVF9CRSk7CitDUkVBVEVfV1JJVEVfRlVOQyAoMzIsIGdmbG9hdCwgZmxvYXQzMl9sZSwgR1NUX1dSSVRFX0ZMT0FUX0xFKTsKK0NSRUFURV9XUklURV9GVU5DICg2NCwgZ2RvdWJsZSwgZmxvYXQ2NF9iZSwgR1NUX1dSSVRFX0RPVUJMRV9CRSk7CitDUkVBVEVfV1JJVEVfRlVOQyAoNjQsIGdkb3VibGUsIGZsb2F0NjRfbGUsIEdTVF9XUklURV9ET1VCTEVfTEUpOworCitnYm9vbGVhbgorZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhIChHc3RCeXRlV3JpdGVyICogd3JpdGVyLCBjb25zdCBndWludDggKiBkYXRhLAorICAgIGd1aW50IHNpemUpCit7CisgIHJldHVybiBfZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhX2lubGluZSAod3JpdGVyLCBkYXRhLCBzaXplKTsKK30KKworZ2Jvb2xlYW4KK2dzdF9ieXRlX3dyaXRlcl9maWxsIChHc3RCeXRlV3JpdGVyICogd3JpdGVyLCBndWludDggdmFsdWUsIGd1aW50IHNpemUpCit7CisgIHJldHVybiBfZ3N0X2J5dGVfd3JpdGVyX2ZpbGxfaW5saW5lICh3cml0ZXIsIHZhbHVlLCBzaXplKTsKK30KKworI2RlZmluZSBDUkVBVEVfV1JJVEVfU1RSSU5HX0ZVTkMoYml0cyx0eXBlKSBcCitnYm9vbGVhbiBcCitnc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZ191dGYjI2JpdHMgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgY29uc3QgdHlwZSAqIGRhdGEpIFwKK3sgXAorICBndWludCBzaXplID0gMDsgXAorICBcCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh3cml0ZXIgIT0gTlVMTCwgRkFMU0UpOyBcCisgIFwKKyAgLyogZW5kaWFubmVzcyBkb2VzIG5vdCBtYXR0ZXIgaWYgd2UgYXJlIGxvb2tpbmcgZm9yIGEgTlVMIHRlcm1pbmF0b3IgKi8gXAorICB3aGlsZSAoZGF0YVtzaXplXSAhPSAwKSB7IFwKKyAgICAvKiBoYXZlIHByZXZlbnQgb3ZlcmZsb3cgKi8gXAorICAgIGlmIChHX1VOTElLRUxZIChzaXplID09IEdfTUFYVUlOVCkpIFwKKyAgICAgIHJldHVybiBGQUxTRTsgXAorICAgICsrc2l6ZTsgXAorICB9IFwKKyAgKytzaXplOyBcCisgIFwKKyAgaWYgKEdfVU5MSUtFTFkgKCFfZ3N0X2J5dGVfd3JpdGVyX2Vuc3VyZV9mcmVlX3NwYWNlX2lubGluZSh3cml0ZXIsIHNpemUgKiAoYml0cyAvIDgpKSkpIFwKKyAgICByZXR1cm4gRkFMU0U7IFwKKyAgXAorICBfZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhX2lubGluZSAod3JpdGVyLCAoY29uc3QgZ3VpbnQ4ICopIGRhdGEsIHNpemUgKiAoYml0cyAvIDgpKTsgXAorICBcCisgIHJldHVybiBUUlVFOyBcCit9CisKK0NSRUFURV9XUklURV9TVFJJTkdfRlVOQyAoOCwgZ2NoYXIpOworQ1JFQVRFX1dSSVRFX1NUUklOR19GVU5DICgxNiwgZ3VpbnQxNik7CitDUkVBVEVfV1JJVEVfU1RSSU5HX0ZVTkMgKDMyLCBndWludDMyKTsKKy8qKgorICogZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50ODoKKyAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCisgKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQorICoKKyAqIFdyaXRlcyBhIHVuc2lnbmVkIDggYml0IGludGVnZXIgdG8gQHdyaXRlci4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbgorICoKKyAqIFNpbmNlOiAwLjEwLjI2CisgKi8KKy8qKgorICogZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfYmU6CisgKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQorICogQHZhbDogVmFsdWUgdG8gd3JpdGUKKyAqCisgKiBXcml0ZXMgYSB1bnNpZ25lZCBiaWcgZW5kaWFuIDE2IGJpdCBpbnRlZ2VyIHRvIEB3cml0ZXIuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW4KKyAqCisgKiBTaW5jZTogMC4xMC4yNgorICovCisvKioKKyAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2JlOgorICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKKyAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCisgKgorICogV3JpdGVzIGEgdW5zaWduZWQgYmlnIGVuZGlhbiAyNCBiaXQgaW50ZWdlciB0byBAd3JpdGVyLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuCisgKgorICogU2luY2U6IDAuMTAuMjYKKyAqLworLyoqCisgKiBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9iZToKKyAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCisgKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQorICoKKyAqIFdyaXRlcyBhIHVuc2lnbmVkIGJpZyBlbmRpYW4gMzIgYml0IGludGVnZXIgdG8gQHdyaXRlci4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbgorICoKKyAqIFNpbmNlOiAwLjEwLjI2CisgKi8KKy8qKgorICogZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfYmU6CisgKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQorICogQHZhbDogVmFsdWUgdG8gd3JpdGUKKyAqCisgKiBXcml0ZXMgYSB1bnNpZ25lZCBiaWcgZW5kaWFuIDY0IGJpdCBpbnRlZ2VyIHRvIEB3cml0ZXIuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW4KKyAqCisgKiBTaW5jZTogMC4xMC4yNgorICovCisvKioKKyAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2xlOgorICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKKyAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCisgKgorICogV3JpdGVzIGEgdW5zaWduZWQgbGl0dGxlIGVuZGlhbiAxNiBiaXQgaW50ZWdlciB0byBAd3JpdGVyLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuCisgKgorICogU2luY2U6IDAuMTAuMjYKKyAqLworLyoqCisgKiBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9sZToKKyAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCisgKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQorICoKKyAqIFdyaXRlcyBhIHVuc2lnbmVkIGxpdHRsZSBlbmRpYW4gMjQgYml0IGludGVnZXIgdG8gQHdyaXRlci4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbgorICoKKyAqIFNpbmNlOiAwLjEwLjI2CisgKi8KKy8qKgorICogZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGU6CisgKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQorICogQHZhbDogVmFsdWUgdG8gd3JpdGUKKyAqCisgKiBXcml0ZXMgYSB1bnNpZ25lZCBsaXR0bGUgZW5kaWFuIDMyIGJpdCBpbnRlZ2VyIHRvIEB3cml0ZXIuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW4KKyAqCisgKiBTaW5jZTogMC4xMC4yNgorICovCisvKioKKyAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2xlOgorICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKKyAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCisgKgorICogV3JpdGVzIGEgdW5zaWduZWQgbGl0dGxlIGVuZGlhbiA2NCBiaXQgaW50ZWdlciB0byBAd3JpdGVyLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuCisgKgorICogU2luY2U6IDAuMTAuMjYKKyAqLworLyoqCisgKiBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDg6CisgKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQorICogQHZhbDogVmFsdWUgdG8gd3JpdGUKKyAqCisgKiBXcml0ZXMgYSBzaWduZWQgOCBiaXQgaW50ZWdlciB0byBAd3JpdGVyLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuCisgKgorICogU2luY2U6IDAuMTAuMjYKKyAqLworLyoqCisgKiBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2JlOgorICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKKyAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCisgKgorICogV3JpdGVzIGEgc2lnbmVkIGJpZyBlbmRpYW4gMTYgYml0IGludGVnZXIgdG8gQHdyaXRlci4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbgorICoKKyAqIFNpbmNlOiAwLjEwLjI2CisgKi8KKy8qKgorICogZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9iZToKKyAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCisgKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQorICoKKyAqIFdyaXRlcyBhIHNpZ25lZCBiaWcgZW5kaWFuIDI0IGJpdCBpbnRlZ2VyIHRvIEB3cml0ZXIuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW4KKyAqCisgKiBTaW5jZTogMC4xMC4yNgorICovCisvKioKKyAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfYmU6CisgKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQorICogQHZhbDogVmFsdWUgdG8gd3JpdGUKKyAqCisgKiBXcml0ZXMgYSBzaWduZWQgYmlnIGVuZGlhbiAzMiBiaXQgaW50ZWdlciB0byBAd3JpdGVyLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuCisgKgorICogU2luY2U6IDAuMTAuMjYKKyAqLworLyoqCisgKiBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2JlOgorICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKKyAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCisgKgorICogV3JpdGVzIGEgc2lnbmVkIGJpZyBlbmRpYW4gNjQgYml0IGludGVnZXIgdG8gQHdyaXRlci4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbgorICoKKyAqIFNpbmNlOiAwLjEwLjI2CisgKi8KKy8qKgorICogZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9sZToKKyAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCisgKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQorICoKKyAqIFdyaXRlcyBhIHNpZ25lZCBsaXR0bGUgZW5kaWFuIDE2IGJpdCBpbnRlZ2VyIHRvIEB3cml0ZXIuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW4KKyAqCisgKiBTaW5jZTogMC4xMC4yNgorICovCisvKioKKyAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfbGU6CisgKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQorICogQHZhbDogVmFsdWUgdG8gd3JpdGUKKyAqCisgKiBXcml0ZXMgYSBzaWduZWQgbGl0dGxlIGVuZGlhbiAyNCBiaXQgaW50ZWdlciB0byBAd3JpdGVyLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuCisgKgorICogU2luY2U6IDAuMTAuMjYKKyAqLworLyoqCisgKiBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDMyX2xlOgorICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKKyAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCisgKgorICogV3JpdGVzIGEgc2lnbmVkIGxpdHRsZSBlbmRpYW4gMzIgYml0IGludGVnZXIgdG8gQHdyaXRlci4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbgorICoKKyAqIFNpbmNlOiAwLjEwLjI2CisgKi8KKy8qKgorICogZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9sZToKKyAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCisgKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQorICoKKyAqIFdyaXRlcyBhIHNpZ25lZCBsaXR0bGUgZW5kaWFuIDY0IGJpdCBpbnRlZ2VyIHRvIEB3cml0ZXIuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW4KKyAqCisgKiBTaW5jZTogMC4xMC4yNgorICovCisvKioKKyAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9iZToKKyAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCisgKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQorICoKKyAqIFdyaXRlcyBhIGJpZyBlbmRpYW4gMzIgYml0IGZsb2F0IHRvIEB3cml0ZXIuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW4KKyAqCisgKiBTaW5jZTogMC4xMC4yNworICovCisvKioKKyAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9iZToKKyAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCisgKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQorICoKKyAqIFdyaXRlcyBhIGJpZyBlbmRpYW4gNjQgYml0IGZsb2F0IHRvIEB3cml0ZXIuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW4KKyAqCisgKiBTaW5jZTogMC4xMC4yNworICovCisvKioKKyAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9sZToKKyAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCisgKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQorICoKKyAqIFdyaXRlcyBhIGxpdHRsZSBlbmRpYW4gMzIgYml0IGZsb2F0IHRvIEB3cml0ZXIuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW4KKyAqCisgKiBTaW5jZTogMC4xMC4yNworICovCisvKioKKyAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9sZToKKyAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCisgKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQorICoKKyAqIFdyaXRlcyBhIGxpdHRsZSBlbmRpYW4gNjQgYml0IGZsb2F0IHRvIEB3cml0ZXIuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW4KKyAqCisgKiBTaW5jZTogMC4xMC4yNworICovCisvKioKKyAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nX3V0Zjg6CisgKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQorICogQGRhdGE6ICh0cmFuc2ZlciBub25lKSAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpICh0eXBlIHV0ZjgpOiBVVEY4IHN0cmluZyB0bworICogICAgIHdyaXRlCisgKgorICogV3JpdGVzIGEgTlVMLXRlcm1pbmF0ZWQgVVRGOCBzdHJpbmcgdG8gQHdyaXRlciAoaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdG9yKS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbgorICoKKyAqIFNpbmNlOiAwLjEwLjI2CisgKi8KKy8qKgorICogZ3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmdfdXRmMTY6CisgKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQorICogQGRhdGE6ICh0cmFuc2ZlciBub25lKSAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpOiBVVEYxNiBzdHJpbmcgdG8gd3JpdGUKKyAqCisgKiBXcml0ZXMgYSBOVUwtdGVybWluYXRlZCBVVEYxNiBzdHJpbmcgdG8gQHdyaXRlciAoaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdG9yKS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbgorICoKKyAqIFNpbmNlOiAwLjEwLjI2CisgKi8KKy8qKgorICogZ3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmdfdXRmMzI6CisgKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQorICogQGRhdGE6ICh0cmFuc2ZlciBub25lKSAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpOiBVVEYzMiBzdHJpbmcgdG8gd3JpdGUKKyAqCisgKiBXcml0ZXMgYSBOVUwtdGVybWluYXRlZCBVVEYzMiBzdHJpbmcgdG8gQHdyaXRlciAoaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdG9yKS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbgorICoKKyAqIFNpbmNlOiAwLjEwLjI2CisgKi8KKy8qKgorICogZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhOgorICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKKyAqIEBkYXRhOiAodHJhbnNmZXIgbm9uZSkgKGFycmF5IGxlbmd0aD1zaXplKTogRGF0YSB0byB3cml0ZQorICogQHNpemU6IFNpemUgb2YgQGRhdGEgaW4gYnl0ZXMKKyAqCisgKiBXcml0ZXMgQHNpemUgYnl0ZXMgb2YgQGRhdGEgdG8gQHdyaXRlci4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbgorICoKKyAqIFNpbmNlOiAwLjEwLjI2CisgKi8KKy8qKgorICogZ3N0X2J5dGVfd3JpdGVyX2ZpbGw6CisgKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQorICogQHZhbHVlOiBWYWx1ZSB0byBiZSB3cml0ZW4KKyAqIEBzaXplOiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdGVuCisgKgorICogV3JpdGVzIEBzaXplIGJ5dGVzIGNvbnRhaW5pbmcgQHZhbHVlIHRvIEB3cml0ZXIuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW4KKyAqCisgKiBTaW5jZTogMC4xMC4yNworICovCmRpZmYgLS1naXQgYS9saWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuaCBiL2xpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYzY4ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuaApAQCAtMCwwICsxLDM1OSBAQAorLyogR1N0cmVhbWVyIGJ5dGUgd3JpdGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fR1NUX0JZVEVfV1JJVEVSX0hfXworI2RlZmluZSBfX0dTVF9CWVRFX1dSSVRFUl9IX18KKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDxnc3QvYmFzZS9nc3RieXRlcmVhZGVyLmg+CisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEdTVF9CWVRFX1dSSVRFUih3cml0ZXIpICgoR3N0Qnl0ZVdyaXRlciAqKSAod3JpdGVyKSkKKworLyoqCisgKiBHc3RCeXRlV3JpdGVyOgorICogQHBhcmVudDogI0dzdEJ5dGVSZWFkZXIgcGFyZW50CisgKiBAYWxsb2Nfc2l6ZTogQWxsb2NhdGlvbiBzaXplIG9mIHRoZSBkYXRhCisgKiBAZml4ZWQ6IElmICVUUlVFIG5vIHJlYWxsb2NhdGlvbnMgYXJlIGFsbG93ZWQKKyAqIEBvd25lZDogSWYgJUZBTFNFIG5vIHJlYWxsb2NhdGlvbnMgYXJlIGFsbG93ZWQgYW5kIGNvcGllcyBvZiBkYXRhIGFyZSByZXR1cm5lZAorICoKKyAqIEEgYnl0ZSB3cml0ZXIgaW5zdGFuY2UuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgR3N0Qnl0ZVJlYWRlciBwYXJlbnQ7CisKKyAgZ3VpbnQgYWxsb2Nfc2l6ZTsKKworICBnYm9vbGVhbiBmaXhlZDsKKyAgZ2Jvb2xlYW4gb3duZWQ7Cit9IEdzdEJ5dGVXcml0ZXI7CisKK0dzdEJ5dGVXcml0ZXIgKiBnc3RfYnl0ZV93cml0ZXJfbmV3ICh2b2lkKTsKK0dzdEJ5dGVXcml0ZXIgKiBnc3RfYnl0ZV93cml0ZXJfbmV3X3dpdGhfc2l6ZSAoZ3VpbnQgc2l6ZSwgZ2Jvb2xlYW4gZml4ZWQpOworR3N0Qnl0ZVdyaXRlciAqIGdzdF9ieXRlX3dyaXRlcl9uZXdfd2l0aF9kYXRhIChndWludDggKmRhdGEsIGd1aW50IHNpemUsIGdib29sZWFuIGluaXRpYWxpemVkKTsKKwordm9pZCBnc3RfYnl0ZV93cml0ZXJfaW5pdCAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyKTsKK3ZvaWQgZ3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9zaXplIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGd1aW50IHNpemUsIGdib29sZWFuIGZpeGVkKTsKK3ZvaWQgZ3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9kYXRhIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGd1aW50OCAqZGF0YSwgZ3VpbnQgc2l6ZSwgZ2Jvb2xlYW4gaW5pdGlhbGl6ZWQpOworCit2b2lkIGdzdF9ieXRlX3dyaXRlcl9mcmVlIChHc3RCeXRlV3JpdGVyICp3cml0ZXIpOworZ3VpbnQ4ICogZ3N0X2J5dGVfd3JpdGVyX2ZyZWVfYW5kX2dldF9kYXRhIChHc3RCeXRlV3JpdGVyICp3cml0ZXIpOworR3N0QnVmZmVyICpnc3RfYnl0ZV93cml0ZXJfZnJlZV9hbmRfZ2V0X2J1ZmZlciAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyKTsKKwordm9pZCBnc3RfYnl0ZV93cml0ZXJfcmVzZXQgKEdzdEJ5dGVXcml0ZXIgKndyaXRlcik7CitndWludDggKiBnc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9kYXRhIChHc3RCeXRlV3JpdGVyICp3cml0ZXIpOworR3N0QnVmZmVyICpnc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9idWZmZXIgKEdzdEJ5dGVXcml0ZXIgKndyaXRlcik7CisKKy8qKgorICogZ3N0X2J5dGVfd3JpdGVyX2dldF9wb3M6CisgKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQorICoKKyAqIFJldHVybnM6IFRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSByZWFkL3dyaXRlIGN1cnNvcgorICoKKyAqIFNpbmNlOiAwLjEwLjI2CisgKi8KKy8qKgorICogZ3N0X2J5dGVfd3JpdGVyX3NldF9wb3M6CisgKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQorICogQHBvczogbmV3IHBvc2l0aW9uCisgKgorICogU2V0cyB0aGUgY3VycmVudCByZWFkL3dyaXRlIGN1cnNvciBvZiBAd3JpdGVyLiBUaGUgbmV3IHBvc2l0aW9uCisgKiBjYW4gb25seSBiZSBiZXR3ZWVuIDAgYW5kIHRoZSBjdXJyZW50IHNpemUuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIG5ldyBwb3NpdGlvbiBjb3VsZCBiZSBzZXQKKyAqCisgKiBTaW5jZTogMC4xMC4yNgorICovCisvKioKKyAqIGdzdF9ieXRlX3dyaXRlcl9nZXRfc2l6ZToKKyAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCisgKgorICogUmV0dXJuczogVGhlIGN1cnJlbnQsIGluaXRpYWxpemVkIHNpemUgb2YgdGhlIGRhdGEKKyAqCisgKiBTaW5jZTogMC4xMC4yNgorICovCisjaWZkZWYgX0ZPT0xfR1RLX0RPQ18KK0dfSU5MSU5FX0ZVTkMgZ3VpbnQgZ3N0X2J5dGVfd3JpdGVyX2dldF9wb3MgKGNvbnN0IEdzdEJ5dGVXcml0ZXIgKndyaXRlcik7CitHX0lOTElORV9GVU5DIGdib29sZWFuIGdzdF9ieXRlX3dyaXRlcl9zZXRfcG9zIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGd1aW50IHBvcyk7CitHX0lOTElORV9GVU5DIGd1aW50IGdzdF9ieXRlX3dyaXRlcl9nZXRfc2l6ZSAoY29uc3QgR3N0Qnl0ZVdyaXRlciAqd3JpdGVyKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGd1aW50Citnc3RfYnl0ZV93cml0ZXJfZ2V0X3BvcyAoY29uc3QgR3N0Qnl0ZVdyaXRlciAqd3JpdGVyKQoreworICByZXR1cm4gZ3N0X2J5dGVfcmVhZGVyX2dldF9wb3MgKChjb25zdCBHc3RCeXRlUmVhZGVyICopIHdyaXRlcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KK2dzdF9ieXRlX3dyaXRlcl9zZXRfcG9zIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGd1aW50IHBvcykKK3sKKyAgcmV0dXJuIGdzdF9ieXRlX3JlYWRlcl9zZXRfcG9zIChHU1RfQllURV9SRUFERVIgKHdyaXRlciksIHBvcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZ3VpbnQKK2dzdF9ieXRlX3dyaXRlcl9nZXRfc2l6ZSAoY29uc3QgR3N0Qnl0ZVdyaXRlciAqd3JpdGVyKQoreworICByZXR1cm4gZ3N0X2J5dGVfcmVhZGVyX2dldF9zaXplICgoY29uc3QgR3N0Qnl0ZVJlYWRlciAqKSB3cml0ZXIpOworfQorI2VuZGlmCisKK2d1aW50IGdzdF9ieXRlX3dyaXRlcl9nZXRfcmVtYWluaW5nIChjb25zdCBHc3RCeXRlV3JpdGVyICp3cml0ZXIpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfd3JpdGVyX2Vuc3VyZV9mcmVlX3NwYWNlIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGd1aW50IHNpemUpOworCitnYm9vbGVhbiBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4IChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGd1aW50OCB2YWwpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ4IChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGdpbnQ4IHZhbCk7CitnYm9vbGVhbiBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9iZSAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBndWludDE2IHZhbCk7CitnYm9vbGVhbiBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9sZSAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBndWludDE2IHZhbCk7CitnYm9vbGVhbiBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2JlIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGdpbnQxNiB2YWwpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9sZSAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBnaW50MTYgdmFsKTsKK2dib29sZWFuIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2JlIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGd1aW50MzIgdmFsKTsKK2dib29sZWFuIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2xlIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGd1aW50MzIgdmFsKTsKK2dib29sZWFuIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfYmUgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgZ2ludDMyIHZhbCk7CitnYm9vbGVhbiBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2xlIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGdpbnQzMiB2YWwpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfYmUgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgZ3VpbnQzMiB2YWwpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgZ3VpbnQzMiB2YWwpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9iZSAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBnaW50MzIgdmFsKTsKK2dib29sZWFuIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfbGUgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgZ2ludDMyIHZhbCk7CitnYm9vbGVhbiBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9iZSAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBndWludDY0IHZhbCk7CitnYm9vbGVhbiBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9sZSAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBndWludDY0IHZhbCk7CitnYm9vbGVhbiBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2JlIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGdpbnQ2NCB2YWwpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9sZSAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBnaW50NjQgdmFsKTsKKworZ2Jvb2xlYW4gZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDMyX2JlIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGdmbG9hdCB2YWwpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDMyX2xlIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGdmbG9hdCB2YWwpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDY0X2JlIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGdkb3VibGUgdmFsKTsKK2dib29sZWFuIGdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9sZSAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBnZG91YmxlIHZhbCk7CisKK2dib29sZWFuIGdzdF9ieXRlX3dyaXRlcl9wdXRfZGF0YSAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBjb25zdCBndWludDggKmRhdGEsIGd1aW50IHNpemUpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfd3JpdGVyX2ZpbGwgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgZ3VpbnQ4IHZhbHVlLCBndWludCBzaXplKTsKK2dib29sZWFuIGdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nX3V0ZjggKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgY29uc3QgZ2NoYXIgKmRhdGEpOworZ2Jvb2xlYW4gZ3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmdfdXRmMTYgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgY29uc3QgZ3VpbnQxNiAqZGF0YSk7CitnYm9vbGVhbiBnc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZ191dGYzMiAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBjb25zdCBndWludDMyICpkYXRhKTsKKworLyoqCisgKiBnc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZzoKKyAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCisgKiBAZGF0YTogKGluKSAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpOiBOdWxsIHRlcm1pbmF0ZWQgc3RyaW5nCisgKgorICogV3JpdGUgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgdG8gQHdyaXRlciAoaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdG9yKS4gVGhlCisgKiBzdHJpbmcgaXMgYXNzdW1lZCB0byBiZSBpbiBhbiA4LWJpdCBlbmNvZGluZyAoZS5nLiBBU0NJSSxVVEYtOCBvcgorICogSVNPLTg4NTktMSkuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHN0cmluZyBjb3VsZCBiZSB3cml0dGVuCisgKgorICogU2luY2U6IDAuMTAuMjYKKyAqLworI2RlZmluZSBnc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZyh3cml0ZXIsIGRhdGEpIFwKKyAgZ3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmdfdXRmOCh3cml0ZXIsIGRhdGEpCisKK3N0YXRpYyBpbmxpbmUgZ3VpbnQKK19nc3RfYnl0ZV93cml0ZXJfbmV4dF9wb3cyIChndWludCBuKQoreworICBndWludCByZXQgPSAxNjsKKworICAvKiBXZSBzdGFydCB3aXRoIDE2LCBzbWFsbGVyIGFsbG9jYXRpb25zIG1ha2Ugbm8gc2Vuc2UgKi8KKworICB3aGlsZSAocmV0IDwgbiAmJiByZXQgPiAwKQorICAgIHJldCA8PD0gMTsKKworICByZXR1cm4gcmV0ID8gcmV0IDogbjsKK30KKworc3RhdGljIGlubGluZSBnYm9vbGVhbgorX2dzdF9ieXRlX3dyaXRlcl9lbnN1cmVfZnJlZV9zcGFjZV9pbmxpbmUgKEdzdEJ5dGVXcml0ZXIgKiB3cml0ZXIsIGd1aW50IHNpemUpCit7CisgIGdwb2ludGVyIGRhdGE7CisKKyAgaWYgKEdfTElLRUxZIChzaXplIDw9IHdyaXRlci0+YWxsb2Nfc2l6ZSAtIHdyaXRlci0+cGFyZW50LmJ5dGUpKQorICAgIHJldHVybiBUUlVFOworICBpZiAoR19VTkxJS0VMWSAod3JpdGVyLT5maXhlZCB8fCAhd3JpdGVyLT5vd25lZCkpCisgICAgcmV0dXJuIEZBTFNFOworICBpZiAoR19VTkxJS0VMWSAod3JpdGVyLT5wYXJlbnQuYnl0ZSA+IEdfTUFYVUlOVCAtIHNpemUpKQorICAgIHJldHVybiBGQUxTRTsKKworICB3cml0ZXItPmFsbG9jX3NpemUgPSBfZ3N0X2J5dGVfd3JpdGVyX25leHRfcG93MiAod3JpdGVyLT5wYXJlbnQuYnl0ZSArIHNpemUpOworICBkYXRhID0gZ190cnlfcmVhbGxvYyAoKGd1aW50OCAqKSB3cml0ZXItPnBhcmVudC5kYXRhLCB3cml0ZXItPmFsbG9jX3NpemUpOworICBpZiAoR19VTkxJS0VMWSAoZGF0YSA9PSBOVUxMKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgd3JpdGVyLT5wYXJlbnQuZGF0YSA9IChndWludDggKikgZGF0YTsKKworICByZXR1cm4gVFJVRTsKK30KKworI2RlZmluZSBfX0dTVF9CWVRFX1dSSVRFUl9DUkVBVEVfV1JJVEVfRlVOQyhiaXRzLHR5cGUsbmFtZSx3cml0ZV9mdW5jKSBcCitzdGF0aWMgaW5saW5lIHZvaWQgXAorZ3N0X2J5dGVfd3JpdGVyX3B1dF8jI25hbWUjI191bmNoZWNrZWQgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgdHlwZSB2YWwpIFwKK3sgXAorICBndWludDggKndyaXRlX2RhdGE7IFwKKyAgXAorICB3cml0ZV9kYXRhID0gKGd1aW50OCAqKSB3cml0ZXItPnBhcmVudC5kYXRhICsgd3JpdGVyLT5wYXJlbnQuYnl0ZTsgXAorICB3cml0ZV9mdW5jICh3cml0ZV9kYXRhLCB2YWwpOyBcCisgIHdyaXRlci0+cGFyZW50LmJ5dGUgKz0gYml0cy84OyBcCisgIHdyaXRlci0+cGFyZW50LnNpemUgPSBNQVggKHdyaXRlci0+cGFyZW50LnNpemUsIHdyaXRlci0+cGFyZW50LmJ5dGUpOyBcCit9IFwKK1wKK3N0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4gXAorX2dzdF9ieXRlX3dyaXRlcl9wdXRfIyNuYW1lIyNfaW5saW5lIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIHR5cGUgdmFsKSBcCit7IFwKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHdyaXRlciAhPSBOVUxMLCBGQUxTRSk7IFwKKyAgXAorICBpZiAoR19VTkxJS0VMWSAoIV9nc3RfYnl0ZV93cml0ZXJfZW5zdXJlX2ZyZWVfc3BhY2VfaW5saW5lKHdyaXRlciwgYml0cy84KSkpIFwKKyAgICByZXR1cm4gRkFMU0U7IFwKKyAgXAorICBnc3RfYnl0ZV93cml0ZXJfcHV0XyMjbmFtZSMjX3VuY2hlY2tlZCAod3JpdGVyLCB2YWwpOyBcCisgIFwKKyAgcmV0dXJuIFRSVUU7IFwKK30KKworX19HU1RfQllURV9XUklURVJfQ1JFQVRFX1dSSVRFX0ZVTkMgKDgsIGd1aW50OCwgdWludDgsIEdTVF9XUklURV9VSU5UOCkKK19fR1NUX0JZVEVfV1JJVEVSX0NSRUFURV9XUklURV9GVU5DICg4LCBnaW50OCwgaW50OCwgR1NUX1dSSVRFX1VJTlQ4KQorX19HU1RfQllURV9XUklURVJfQ1JFQVRFX1dSSVRFX0ZVTkMgKDE2LCBndWludDE2LCB1aW50MTZfbGUsIEdTVF9XUklURV9VSU5UMTZfTEUpCitfX0dTVF9CWVRFX1dSSVRFUl9DUkVBVEVfV1JJVEVfRlVOQyAoMTYsIGd1aW50MTYsIHVpbnQxNl9iZSwgR1NUX1dSSVRFX1VJTlQxNl9CRSkKK19fR1NUX0JZVEVfV1JJVEVSX0NSRUFURV9XUklURV9GVU5DICgxNiwgZ2ludDE2LCBpbnQxNl9sZSwgR1NUX1dSSVRFX1VJTlQxNl9MRSkKK19fR1NUX0JZVEVfV1JJVEVSX0NSRUFURV9XUklURV9GVU5DICgxNiwgZ2ludDE2LCBpbnQxNl9iZSwgR1NUX1dSSVRFX1VJTlQxNl9CRSkKK19fR1NUX0JZVEVfV1JJVEVSX0NSRUFURV9XUklURV9GVU5DICgyNCwgZ3VpbnQzMiwgdWludDI0X2xlLCBHU1RfV1JJVEVfVUlOVDI0X0xFKQorX19HU1RfQllURV9XUklURVJfQ1JFQVRFX1dSSVRFX0ZVTkMgKDI0LCBndWludDMyLCB1aW50MjRfYmUsIEdTVF9XUklURV9VSU5UMjRfQkUpCitfX0dTVF9CWVRFX1dSSVRFUl9DUkVBVEVfV1JJVEVfRlVOQyAoMjQsIGdpbnQzMiwgaW50MjRfbGUsIEdTVF9XUklURV9VSU5UMjRfTEUpCitfX0dTVF9CWVRFX1dSSVRFUl9DUkVBVEVfV1JJVEVfRlVOQyAoMjQsIGdpbnQzMiwgaW50MjRfYmUsIEdTVF9XUklURV9VSU5UMjRfQkUpCitfX0dTVF9CWVRFX1dSSVRFUl9DUkVBVEVfV1JJVEVfRlVOQyAoMzIsIGd1aW50MzIsIHVpbnQzMl9sZSwgR1NUX1dSSVRFX1VJTlQzMl9MRSkKK19fR1NUX0JZVEVfV1JJVEVSX0NSRUFURV9XUklURV9GVU5DICgzMiwgZ3VpbnQzMiwgdWludDMyX2JlLCBHU1RfV1JJVEVfVUlOVDMyX0JFKQorX19HU1RfQllURV9XUklURVJfQ1JFQVRFX1dSSVRFX0ZVTkMgKDMyLCBnaW50MzIsIGludDMyX2xlLCBHU1RfV1JJVEVfVUlOVDMyX0xFKQorX19HU1RfQllURV9XUklURVJfQ1JFQVRFX1dSSVRFX0ZVTkMgKDMyLCBnaW50MzIsIGludDMyX2JlLCBHU1RfV1JJVEVfVUlOVDMyX0JFKQorX19HU1RfQllURV9XUklURVJfQ1JFQVRFX1dSSVRFX0ZVTkMgKDY0LCBndWludDY0LCB1aW50NjRfbGUsIEdTVF9XUklURV9VSU5UNjRfTEUpCitfX0dTVF9CWVRFX1dSSVRFUl9DUkVBVEVfV1JJVEVfRlVOQyAoNjQsIGd1aW50NjQsIHVpbnQ2NF9iZSwgR1NUX1dSSVRFX1VJTlQ2NF9CRSkKK19fR1NUX0JZVEVfV1JJVEVSX0NSRUFURV9XUklURV9GVU5DICg2NCwgZ2ludDY0LCBpbnQ2NF9sZSwgR1NUX1dSSVRFX1VJTlQ2NF9MRSkKK19fR1NUX0JZVEVfV1JJVEVSX0NSRUFURV9XUklURV9GVU5DICg2NCwgZ2ludDY0LCBpbnQ2NF9iZSwgR1NUX1dSSVRFX1VJTlQ2NF9CRSkKKworX19HU1RfQllURV9XUklURVJfQ1JFQVRFX1dSSVRFX0ZVTkMgKDMyLCBnZmxvYXQsIGZsb2F0MzJfYmUsIEdTVF9XUklURV9GTE9BVF9CRSkKK19fR1NUX0JZVEVfV1JJVEVSX0NSRUFURV9XUklURV9GVU5DICgzMiwgZ2Zsb2F0LCBmbG9hdDMyX2xlLCBHU1RfV1JJVEVfRkxPQVRfTEUpCitfX0dTVF9CWVRFX1dSSVRFUl9DUkVBVEVfV1JJVEVfRlVOQyAoNjQsIGdkb3VibGUsIGZsb2F0NjRfYmUsIEdTVF9XUklURV9ET1VCTEVfQkUpCitfX0dTVF9CWVRFX1dSSVRFUl9DUkVBVEVfV1JJVEVfRlVOQyAoNjQsIGdkb3VibGUsIGZsb2F0NjRfbGUsIEdTVF9XUklURV9ET1VCTEVfTEUpCisKKyN1bmRlZiBfX0dTVF9CWVRFX1dSSVRFUl9DUkVBVEVfV1JJVEVfRlVOQworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dzdF9ieXRlX3dyaXRlcl9wdXRfZGF0YV91bmNoZWNrZWQgKEdzdEJ5dGVXcml0ZXIgKiB3cml0ZXIsIGNvbnN0IGd1aW50OCAqIGRhdGEsCisgICAgZ3VpbnQgc2l6ZSkKK3sKKyAgbWVtY3B5ICgoZ3VpbnQ4ICopICYgd3JpdGVyLT5wYXJlbnQuZGF0YVt3cml0ZXItPnBhcmVudC5ieXRlXSwgZGF0YSwgc2l6ZSk7CisgIHdyaXRlci0+cGFyZW50LmJ5dGUgKz0gc2l6ZTsKKyAgd3JpdGVyLT5wYXJlbnQuc2l6ZSA9IE1BWCAod3JpdGVyLT5wYXJlbnQuc2l6ZSwgd3JpdGVyLT5wYXJlbnQuYnl0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KK19nc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGFfaW5saW5lIChHc3RCeXRlV3JpdGVyICogd3JpdGVyLCBjb25zdCBndWludDggKiBkYXRhLAorICAgIGd1aW50IHNpemUpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh3cml0ZXIgIT0gTlVMTCwgRkFMU0UpOworCisgIGlmIChHX1VOTElLRUxZICghX2dzdF9ieXRlX3dyaXRlcl9lbnN1cmVfZnJlZV9zcGFjZV9pbmxpbmUgKHdyaXRlciwgc2l6ZSkpKQorICAgIHJldHVybiBGQUxTRTsKKworICBnc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGFfdW5jaGVja2VkICh3cml0ZXIsIGRhdGEsIHNpemUpOworCisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2dzdF9ieXRlX3dyaXRlcl9maWxsX3VuY2hlY2tlZCAoR3N0Qnl0ZVdyaXRlciAqIHdyaXRlciwgZ3VpbnQ4IHZhbHVlLCBndWludCBzaXplKQoreworICBtZW1zZXQgKChndWludDggKikgJiB3cml0ZXItPnBhcmVudC5kYXRhW3dyaXRlci0+cGFyZW50LmJ5dGVdLCB2YWx1ZSwgc2l6ZSk7CisgIHdyaXRlci0+cGFyZW50LmJ5dGUgKz0gc2l6ZTsKKyAgd3JpdGVyLT5wYXJlbnQuc2l6ZSA9IE1BWCAod3JpdGVyLT5wYXJlbnQuc2l6ZSwgd3JpdGVyLT5wYXJlbnQuYnl0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KK19nc3RfYnl0ZV93cml0ZXJfZmlsbF9pbmxpbmUgKEdzdEJ5dGVXcml0ZXIgKiB3cml0ZXIsIGd1aW50OCB2YWx1ZSwgZ3VpbnQgc2l6ZSkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHdyaXRlciAhPSBOVUxMLCBGQUxTRSk7CisKKyAgaWYgKEdfVU5MSUtFTFkgKCFfZ3N0X2J5dGVfd3JpdGVyX2Vuc3VyZV9mcmVlX3NwYWNlX2lubGluZSAod3JpdGVyLCBzaXplKSkpCisgICAgcmV0dXJuIEZBTFNFOworCisgIGdzdF9ieXRlX3dyaXRlcl9maWxsX3VuY2hlY2tlZCAod3JpdGVyLCB2YWx1ZSwgc2l6ZSk7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKyNpZm5kZWYgR1NUX0JZVEVfV1JJVEVSX0RJU0FCTEVfSU5MSU5FUworCisvKiB3ZSB1c2UgZGVmaW5lcyBoZXJlIHNvIHdlIGNhbiBhZGQgdGhlIEdfTElLRUxZKCkgKi8KKworI2RlZmluZSBnc3RfYnl0ZV93cml0ZXJfZW5zdXJlX2ZyZWVfc3BhY2Uod3JpdGVyLCBzaXplKSBcCisgICAgR19MSUtFTFkgKF9nc3RfYnl0ZV93cml0ZXJfZW5zdXJlX2ZyZWVfc3BhY2VfaW5saW5lICh3cml0ZXIsIHNpemUpKQorI2RlZmluZSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4KHdyaXRlciwgdmFsKSBcCisgICAgR19MSUtFTFkgKF9nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4X2lubGluZSAod3JpdGVyLCB2YWwpKQorI2RlZmluZSBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDgod3JpdGVyLCB2YWwpIFwKKyAgICBHX0xJS0VMWSAoX2dzdF9ieXRlX3dyaXRlcl9wdXRfaW50OF9pbmxpbmUgKHdyaXRlciwgdmFsKSkKKyNkZWZpbmUgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfYmUod3JpdGVyLCB2YWwpIFwKKyAgICBHX0xJS0VMWSAoX2dzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2JlX2lubGluZSAod3JpdGVyLCB2YWwpKQorI2RlZmluZSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9sZSh3cml0ZXIsIHZhbCkgXAorICAgIEdfTElLRUxZIChfZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfbGVfaW5saW5lICh3cml0ZXIsIHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfYmUod3JpdGVyLCB2YWwpIFwKKyAgICBHX0xJS0VMWSAoX2dzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfYmVfaW5saW5lICh3cml0ZXIsIHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfbGUod3JpdGVyLCB2YWwpIFwKKyAgICBHX0xJS0VMWSAoX2dzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfbGVfaW5saW5lICh3cml0ZXIsIHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2JlKHdyaXRlciwgdmFsKSBcCisgICAgR19MSUtFTFkgKF9nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9iZV9pbmxpbmUgKHdyaXRlciwgdmFsKSkKKyNkZWZpbmUgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfbGUod3JpdGVyLCB2YWwpIFwKKyAgICBHX0xJS0VMWSAoX2dzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2xlX2lubGluZSAod3JpdGVyLCB2YWwpKQorI2RlZmluZSBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2JlKHdyaXRlciwgdmFsKSBcCisgICAgR19MSUtFTFkgKF9nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2JlX2lubGluZSAod3JpdGVyLCB2YWwpKQorI2RlZmluZSBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2xlKHdyaXRlciwgdmFsKSBcCisgICAgR19MSUtFTFkgKF9nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2xlX2lubGluZSAod3JpdGVyLCB2YWwpKQorI2RlZmluZSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9iZSh3cml0ZXIsIHZhbCkgXAorICAgIEdfTElLRUxZIChfZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfYmVfaW5saW5lICh3cml0ZXIsIHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlKHdyaXRlciwgdmFsKSBcCisgICAgR19MSUtFTFkgKF9nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZV9pbmxpbmUgKHdyaXRlciwgdmFsKSkKKyNkZWZpbmUgZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9iZSh3cml0ZXIsIHZhbCkgXAorICAgIEdfTElLRUxZIChfZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9iZV9pbmxpbmUgKHdyaXRlciwgdmFsKSkKKyNkZWZpbmUgZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9sZSh3cml0ZXIsIHZhbCkgXAorICAgIEdfTElLRUxZIChfZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9sZV9pbmxpbmUgKHdyaXRlciwgdmFsKSkKKyNkZWZpbmUgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfYmUod3JpdGVyLCB2YWwpIFwKKyAgICBHX0xJS0VMWSAoX2dzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2JlX2lubGluZSAod3JpdGVyLCB2YWwpKQorI2RlZmluZSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9sZSh3cml0ZXIsIHZhbCkgXAorICAgIEdfTElLRUxZIChfZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfbGVfaW5saW5lICh3cml0ZXIsIHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfYmUod3JpdGVyLCB2YWwpIFwKKyAgICBHX0xJS0VMWSAoX2dzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfYmVfaW5saW5lICh3cml0ZXIsIHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfbGUod3JpdGVyLCB2YWwpIFwKKyAgICBHX0xJS0VMWSAoX2dzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfbGVfaW5saW5lICh3cml0ZXIsIHZhbCkpCisKKyNkZWZpbmUgZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDMyX2JlKHdyaXRlciwgdmFsKSBcCisgICAgR19MSUtFTFkgKF9nc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfYmVfaW5saW5lICh3cml0ZXIsIHZhbCkpCisjZGVmaW5lIGdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9sZSh3cml0ZXIsIHZhbCkgXAorICAgIEdfTElLRUxZIChfZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDMyX2xlX2lubGluZSAod3JpdGVyLCB2YWwpKQorI2RlZmluZSBnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfYmUod3JpdGVyLCB2YWwpIFwKKyAgICBHX0xJS0VMWSAoX2dzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9iZV9pbmxpbmUgKHdyaXRlciwgdmFsKSkKKyNkZWZpbmUgZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDY0X2xlKHdyaXRlciwgdmFsKSBcCisgICAgR19MSUtFTFkgKF9nc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfbGVfaW5saW5lICh3cml0ZXIsIHZhbCkpCisKKyNkZWZpbmUgZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhKHdyaXRlciwgZGF0YSwgc2l6ZSkgXAorICAgIEdfTElLRUxZIChfZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhX2lubGluZSAod3JpdGVyLCBkYXRhLCBzaXplKSkKKyNkZWZpbmUgZ3N0X2J5dGVfd3JpdGVyX2ZpbGwod3JpdGVyLCB2YWwsIHNpemUpIFwKKyAgICBHX0xJS0VMWSAoX2dzdF9ieXRlX3dyaXRlcl9maWxsX2lubGluZSAod3JpdGVyLCB2YWwsIHNpemUpKQorCisjZW5kaWYKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fR1NUX0JZVEVfV1JJVEVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jIGIvbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjY2I1MmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmMKQEAgLTAsMCArMSwxNDE1IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgorICoKKyAqIGdzdGNvbGxlY3RwYWRzLmM6CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKy8qKgorICogU0VDVElPTjpnc3Rjb2xsZWN0cGFkcworICogQHNob3J0X2Rlc2NyaXB0aW9uOiBtYW5hZ2VzIGEgc2V0IG9mIHBhZHMgdGhhdCBvcGVyYXRlIGluIGNvbGxlY3QgbW9kZQorICogQHNlZV9hbHNvOgorICoKKyAqIE1hbmFnZXMgYSBzZXQgb2YgcGFkcyB0aGF0IG9wZXJhdGUgaW4gY29sbGVjdCBtb2RlLiBUaGlzIG1lYW5zIHRoYXQgY29udHJvbAorICogaXMgZ2l2ZW4gdG8gdGhlIG1hbmFnZXIgb2YgdGhpcyBvYmplY3Qgd2hlbiBhbGwgcGFkcyBoYXZlIGRhdGEuCisgKiA8aXRlbWl6ZWRsaXN0PgorICogICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgQ29sbGVjdHBhZHMgYXJlIGNyZWF0ZWQgd2l0aCBnc3RfY29sbGVjdF9wYWRzX25ldygpLiBBIGNhbGxiYWNrIHNob3VsZCB0aGVuCisgKiAgICAgYmUgaW5zdGFsbGVkIHdpdGggZ3N0X2NvbGxlY3RfcGFkc19zZXRfZnVuY3Rpb24gKCkuCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgUGFkcyBhcmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24gd2l0aCBnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQoKS8KKyAqICAgICBnc3RfY29sbGVjdF9wYWRzX3JlbW92ZV9wYWQoKS4gVGhlIHBhZAorICogICAgIGhhcyB0byBiZSBhIHNpbmtwYWQuIFRoZSBjaGFpbiBhbmQgZXZlbnQgZnVuY3Rpb25zIG9mIHRoZSBwYWQgYXJlCisgKiAgICAgb3ZlcnJpZGRlbi4gVGhlIGVsZW1lbnRfcHJpdmF0ZSBvZiB0aGUgcGFkIGlzIHVzZWQgdG8gc3RvcmUKKyAqICAgICBwcml2YXRlIGluZm9ybWF0aW9uIGZvciB0aGUgY29sbGVjdHBhZHMuCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgRm9yIGVhY2ggcGFkLCBkYXRhIGlzIHF1ZXVlZCBpbiB0aGUgX2NoYWluIGZ1bmN0aW9uIG9yIGJ5CisgKiAgICAgcGVyZm9ybWluZyBhIHB1bGxfcmFuZ2UuCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgV2hlbiBkYXRhIGlzIHF1ZXVlZCBvbiBhbGwgcGFkcywgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICBEYXRhIGNhbiBiZSBkZXF1ZXVlZCBmcm9tIHRoZSBwYWQgd2l0aCB0aGUgZ3N0X2NvbGxlY3RfcGFkc19wb3AoKSBtZXRob2QuCisgKiAgICAgT25lIGNhbiBwZWVrIGF0IHRoZSBkYXRhIHdpdGggdGhlIGdzdF9jb2xsZWN0X3BhZHNfcGVlaygpIGZ1bmN0aW9uLgorICogICAgIFRoZXNlIGZ1bmN0aW9ucyB3aWxsIHJldHVybiBOVUxMIGlmIHRoZSBwYWQgcmVjZWl2ZWQgYW4gRU9TIGV2ZW50LiBXaGVuIGFsbAorICogICAgIHBhZHMgcmV0dXJuIE5VTEwgZnJvbSBhIGdzdF9jb2xsZWN0X3BhZHNfcGVlaygpLCB0aGUgZWxlbWVudCBjYW4gZW1pdCBhbiBFT1MKKyAqICAgICBldmVudCBpdHNlbGYuCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgRGF0YSBjYW4gYWxzbyBiZSBkZXF1ZXVlZCBpbiBieXRlIHVuaXRzIHVzaW5nIHRoZSBnc3RfY29sbGVjdF9wYWRzX2F2YWlsYWJsZSgpLAorICogICAgIGdzdF9jb2xsZWN0X3BhZHNfcmVhZCgpIGFuZCBnc3RfY29sbGVjdF9wYWRzX2ZsdXNoKCkgY2FsbHMuCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgRWxlbWVudHMgc2hvdWxkIGNhbGwgZ3N0X2NvbGxlY3RfcGFkc19zdGFydCgpIGFuZCBnc3RfY29sbGVjdF9wYWRzX3N0b3AoKSBpbgorICogICAgIHRoZWlyIHN0YXRlIGNoYW5nZSBmdW5jdGlvbnMgdG8gc3RhcnQgYW5kIHN0b3AgdGhlIHByb2Nlc3Npbmcgb2YgdGhlIGNvbGxlY3BhZHMuCisgKiAgICAgVGhlIGdzdF9jb2xsZWN0X3BhZHNfc3RvcCgpIGNhbGwgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyB0aGUgcGFyZW50CisgKiAgICAgZWxlbWVudCBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gaW4gdGhlIFBBVVNFRF9UT19SRUFEWSBzdGF0ZSBjaGFuZ2UgdG8gZW5zdXJlCisgKiAgICAgbm8gcGFkIGlzIGJsb2NrZWQgYW5kIHRoZSBlbGVtZW50IGNhbiBmaW5pc2ggc3RyZWFtaW5nLgorICogICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgIGdzdF9jb2xsZWN0X3BhZHNfY29sbGVjdCgpIGFuZCBnc3RfY29sbGVjdF9wYWRzX2NvbGxlY3RfcmFuZ2UoKSBjYW4gYmUgdXNlZCBieQorICogICAgIGVsZW1lbnRzIHRoYXQgc3RhcnQgYSAjR3N0VGFzayB0byBkcml2ZSB0aGUgY29sbGVjdF9wYWRzLiBUaGlzIGZlYXR1cmUgaXMgaG93ZXZlcgorICogICAgIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogPC9pdGVtaXplZGxpc3Q+CisgKgorICogTGFzdCByZXZpZXdlZCBvbiAyMDA2LTA1LTEwICgwLjEwLjYpCisgKi8KKworI2luY2x1ZGUgImdzdGNvbGxlY3RwYWRzLmgiCisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGNvbGxlY3RfcGFkc19kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBjb2xsZWN0X3BhZHNfZGVidWcKKworI2RlZmluZSBHU1RfQ09MTEVDVF9QQURTX0dFVF9QUklWQVRFKG9iaikgIFwKKyAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoKG9iaiksIEdTVF9UWVBFX0NPTExFQ1RfUEFEUywgR3N0Q29sbGVjdFBhZHNQcml2YXRlKSkKKworc3RydWN0IF9Hc3RDb2xsZWN0UGFkc1ByaXZhdGUKK3sKKyAgR3N0Q29sbGVjdFBhZHNDbGlwRnVuY3Rpb24gY2xpcGZ1bmM7CisgIGdwb2ludGVyIGNsaXBmdW5jX3VzZXJfZGF0YTsKK307CisKKyNkZWZpbmUgZ3N0X2NvbGxlY3RfcGFkc19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCitHX0RFRklORV9UWVBFIChHc3RDb2xsZWN0UGFkcywgZ3N0X2NvbGxlY3RfcGFkcywgR1NUX1RZUEVfT0JKRUNUKTsKKworc3RhdGljIHZvaWQgZ3N0X2NvbGxlY3RfcGFkc19jbGVhciAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzLAorICAgIEdzdENvbGxlY3REYXRhICogZGF0YSk7CitzdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfY29sbGVjdF9wYWRzX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2NvbGxlY3RfcGFkc19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KTsKK3N0YXRpYyB2b2lkIGdzdF9jb2xsZWN0X3BhZHNfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOworc3RhdGljIHZvaWQgcmVmX2RhdGEgKEdzdENvbGxlY3REYXRhICogZGF0YSk7CitzdGF0aWMgdm9pZCB1bnJlZl9kYXRhIChHc3RDb2xsZWN0RGF0YSAqIGRhdGEpOworc3RhdGljIHZvaWQgZ3N0X2NvbGxlY3RfcGFkc19jaGVja19wYWRzX3VubG9ja2VkIChHc3RDb2xsZWN0UGFkcyAqIHBhZHMpOworCitzdGF0aWMgdm9pZAorZ3N0X2NvbGxlY3RfcGFkc19jbGFzc19pbml0IChHc3RDb2xsZWN0UGFkc0NsYXNzICoga2xhc3MpCit7CisgIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7CisKKyAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChrbGFzcywgc2l6ZW9mIChHc3RDb2xsZWN0UGFkc1ByaXZhdGUpKTsKKworICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoY29sbGVjdF9wYWRzX2RlYnVnLCAiY29sbGVjdHBhZHMiLCAwLAorICAgICAgIkdzdENvbGxlY3RQYWRzIik7CisKKyAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfY29sbGVjdF9wYWRzX2ZpbmFsaXplOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2NvbGxlY3RfcGFkc19pbml0IChHc3RDb2xsZWN0UGFkcyAqIHBhZHMpCit7CisgIHBhZHMtPmFiaWRhdGEuQUJJLnByaXYgPSBHU1RfQ09MTEVDVF9QQURTX0dFVF9QUklWQVRFIChwYWRzKTsKKworICBwYWRzLT5jb25kID0gZ19jb25kX25ldyAoKTsKKyAgcGFkcy0+ZGF0YSA9IE5VTEw7CisgIHBhZHMtPmNvb2tpZSA9IDA7CisgIHBhZHMtPm51bXBhZHMgPSAwOworICBwYWRzLT5xdWV1ZWRwYWRzID0gMDsKKyAgcGFkcy0+ZW9zcGFkcyA9IDA7CisgIHBhZHMtPnN0YXJ0ZWQgPSBGQUxTRTsKKworICAvKiBtZW1iZXJzIHRvIG1hbmFnZSB0aGUgcGFkIGxpc3QgKi8KKyAgcGFkcy0+YWJpZGF0YS5BQkkucGFkX2xvY2sgPSBnX211dGV4X25ldyAoKTsKKyAgcGFkcy0+YWJpZGF0YS5BQkkucGFkX2Nvb2tpZSA9IDA7CisgIHBhZHMtPmFiaWRhdGEuQUJJLnBhZF9saXN0ID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK2dzdF9jb2xsZWN0X3BhZHNfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCit7CisgIEdTTGlzdCAqY29sbGVjdGVkOworICBHc3RDb2xsZWN0UGFkcyAqcGFkcyA9IEdTVF9DT0xMRUNUX1BBRFMgKG9iamVjdCk7CisKKyAgR1NUX0RFQlVHICgiZmluYWxpemUiKTsKKworICBnX2NvbmRfZnJlZSAocGFkcy0+Y29uZCk7CisgIGdfbXV0ZXhfZnJlZSAocGFkcy0+YWJpZGF0YS5BQkkucGFkX2xvY2spOworCisgIC8qIFJlbW92ZSBwYWRzICovCisgIGNvbGxlY3RlZCA9IHBhZHMtPmFiaWRhdGEuQUJJLnBhZF9saXN0OworICBmb3IgKDsgY29sbGVjdGVkOyBjb2xsZWN0ZWQgPSBnX3NsaXN0X25leHQgKGNvbGxlY3RlZCkpIHsKKyAgICBHc3RDb2xsZWN0RGF0YSAqcGRhdGEgPSAoR3N0Q29sbGVjdERhdGEgKikgY29sbGVjdGVkLT5kYXRhOworCisgICAgdW5yZWZfZGF0YSAocGRhdGEpOworICB9CisgIC8qIEZyZWUgcGFkcyBsaXN0ICovCisgIGdfc2xpc3RfZm9yZWFjaCAocGFkcy0+ZGF0YSwgKEdGdW5jKSB1bnJlZl9kYXRhLCBOVUxMKTsKKyAgZ19zbGlzdF9mcmVlIChwYWRzLT5kYXRhKTsKKyAgZ19zbGlzdF9mcmVlIChwYWRzLT5hYmlkYXRhLkFCSS5wYWRfbGlzdCk7CisKKyAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOworfQorCisvKioKKyAqIGdzdF9jb2xsZWN0X3BhZHNfbmV3OgorICoKKyAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiAjR3N0Q29sbGVjdFBhZHMuCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RDb2xsZWN0UGFkcywgb3IgTlVMTCBpbiBjYXNlIG9mIGFuIGVycm9yLgorICovCitHc3RDb2xsZWN0UGFkcyAqCitnc3RfY29sbGVjdF9wYWRzX25ldyAodm9pZCkKK3sKKyAgR3N0Q29sbGVjdFBhZHMgKm5ld2NvbGw7CisKKyAgbmV3Y29sbCA9IGdfb2JqZWN0X25ld3YgKEdTVF9UWVBFX0NPTExFQ1RfUEFEUywgMCwgTlVMTCk7CisKKyAgcmV0dXJuIG5ld2NvbGw7Cit9CisKKy8qKgorICogZ3N0X2NvbGxlY3RfcGFkc19zZXRfZnVuY3Rpb246CisgKiBAcGFkczogdGhlIGNvbGxlY3RzcGFkcyB0byB1c2UKKyAqIEBmdW5jOiB0aGUgZnVuY3Rpb24gdG8gc2V0CisgKiBAdXNlcl9kYXRhOiAoY2xvc3VyZSk6IHVzZXIgZGF0YSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uCisgKgorICogU2V0IHRoZSBjYWxsYmFjayBmdW5jdGlvbiBhbmQgdXNlciBkYXRhIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbgorICogYWxsIHRoZSBwYWRzIGFkZGVkIHRvIHRoZSBjb2xsZWN0aW9uIGhhdmUgYnVmZmVycyBxdWV1ZWQuCisgKgorICogTVQgc2FmZS4KKyAqLwordm9pZAorZ3N0X2NvbGxlY3RfcGFkc19zZXRfZnVuY3Rpb24gKEdzdENvbGxlY3RQYWRzICogcGFkcywKKyAgICBHc3RDb2xsZWN0UGFkc0Z1bmN0aW9uIGZ1bmMsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAocGFkcyAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0NPTExFQ1RfUEFEUyAocGFkcykpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAocGFkcyk7CisgIHBhZHMtPmZ1bmMgPSBmdW5jOworICBwYWRzLT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWRzKTsKK30KKworc3RhdGljIHZvaWQKK3JlZl9kYXRhIChHc3RDb2xsZWN0RGF0YSAqIGRhdGEpCit7CisgIGdfYXNzZXJ0IChkYXRhICE9IE5VTEwpOworCisgIGdfYXRvbWljX2ludF9pbmMgKCYoZGF0YS0+YWJpZGF0YS5BQkkucmVmY291bnQpKTsKK30KKworc3RhdGljIHZvaWQKK3VucmVmX2RhdGEgKEdzdENvbGxlY3REYXRhICogZGF0YSkKK3sKKyAgR3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5IGRlc3Ryb3lfbm90aWZ5OworCisgIGdfYXNzZXJ0IChkYXRhICE9IE5VTEwpOworICBnX2Fzc2VydCAoZGF0YS0+YWJpZGF0YS5BQkkucmVmY291bnQgPiAwKTsKKworICBpZiAoIWdfYXRvbWljX2ludF9kZWNfYW5kX3Rlc3QgKCYoZGF0YS0+YWJpZGF0YS5BQkkucmVmY291bnQpKSkKKyAgICByZXR1cm47CisKKyAgLyogRklYTUU6IFVnbHkgaGFjayBhcyB3ZSBjYW4ndCBhZGQgbW9yZSBmaWVsZHMgdG8gR3N0Q29sbGVjdERhdGEgKi8KKyAgZGVzdHJveV9ub3RpZnkgPSAoR3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5KQorICAgICAgZ19vYmplY3RfZ2V0X2RhdGEgKEdfT0JKRUNUIChkYXRhLT5wYWQpLAorICAgICAgImdzdC1jb2xsZWN0LWRhdGEtZGVzdHJveS1ub3RpZnkiKTsKKworICBpZiAoZGVzdHJveV9ub3RpZnkpCisgICAgZGVzdHJveV9ub3RpZnkgKGRhdGEpOworCisgIGdfb2JqZWN0X3VucmVmIChkYXRhLT5wYWQpOworICBpZiAoZGF0YS0+YnVmZmVyKSB7CisgICAgZ3N0X2J1ZmZlcl91bnJlZiAoZGF0YS0+YnVmZmVyKTsKKyAgfQorICBnX2ZyZWUgKGRhdGEpOworfQorCisvKioKKyAqIGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZDoKKyAqIEBwYWRzOiB0aGUgY29sbGVjdHNwYWRzIHRvIHVzZQorICogQHBhZDogKHRyYW5zZmVyIG5vbmUpOiB0aGUgcGFkIHRvIGFkZAorICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSByZXR1cm5lZCAjR3N0Q29sbGVjdERhdGEgc3RydWN0dXJlCisgKgorICogQWRkIGEgcGFkIHRvIHRoZSBjb2xsZWN0aW9uIG9mIGNvbGxlY3QgcGFkcy4gVGhlIHBhZCBoYXMgdG8gYmUKKyAqIGEgc2lua3BhZC4gVGhlIHJlZmNvdW50IG9mIHRoZSBwYWQgaXMgaW5jcmVtZW50ZWQuIFVzZQorICogZ3N0X2NvbGxlY3RfcGFkc19yZW1vdmVfcGFkKCkgdG8gcmVtb3ZlIHRoZSBwYWQgZnJvbSB0aGUgY29sbGVjdGlvbgorICogYWdhaW4uCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIG92ZXJyaWRlIHRoZSBjaGFpbiBhbmQgZXZlbnQgZnVuY3Rpb25zIG9mIHRoZSBwYWQKKyAqIGFsb25nIHdpdGggdGhlIGVsZW1lbnRfcHJpdmF0ZSBkYXRhLCB3aGljaCBpcyB1c2VkIHRvIHN0b3JlIHByaXZhdGUKKyAqIGluZm9ybWF0aW9uIGZvciB0aGUgY29sbGVjdHBhZHMuCisgKgorICogWW91IHNwZWNpZnkgYSBzaXplIGZvciB0aGUgcmV0dXJuZWQgI0dzdENvbGxlY3REYXRhIHN0cnVjdHVyZQorICogc28gdGhhdCB5b3UgY2FuIHVzZSBpdCB0byBzdG9yZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorICoKKyAqIFRoZSBwYWQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGFjdGl2YXRlZCBpbiBwdXNoIG1vZGUgd2hlbiBAcGFkcyBpcworICogc3RhcnRlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbGxzIGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZF9mdWxsKCkgcGFzc2luZyBhIHZhbHVlIG9mIE5VTEwKKyAqIGZvciBkZXN0cm95X25vdGlmeS4KKyAqCisgKiBNVCBzYWZlLgorICoKKyAqIFJldHVybnM6IGEgbmV3ICNHc3RDb2xsZWN0RGF0YSB0byBpZGVudGlmeSB0aGUgbmV3IHBhZC4gT3IgTlVMTAorICogICBpZiB3cm9uZyBwYXJhbWV0ZXJzIGFyZSBzdXBwbGllZC4KKyAqLworR3N0Q29sbGVjdERhdGEgKgorZ3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkIChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsIEdzdFBhZCAqIHBhZCwgZ3VpbnQgc2l6ZSkKK3sKKyAgcmV0dXJuIGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZF9mdWxsIChwYWRzLCBwYWQsIHNpemUsIE5VTEwpOworfQorCisvKioKKyAqIGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZF9mdWxsOgorICogQHBhZHM6IHRoZSBjb2xsZWN0c3BhZHMgdG8gdXNlCisgKiBAcGFkOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBwYWQgdG8gYWRkCisgKiBAc2l6ZTogdGhlIHNpemUgb2YgdGhlIHJldHVybmVkICNHc3RDb2xsZWN0RGF0YSBzdHJ1Y3R1cmUKKyAqIEBkZXN0cm95X25vdGlmeTogZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGJlZm9yZSB0aGUgcmV0dXJuZWQgI0dzdENvbGxlY3REYXRhCisgKiBzdHJ1Y3R1cmUgaXMgZnJlZWQKKyAqCisgKiBBZGQgYSBwYWQgdG8gdGhlIGNvbGxlY3Rpb24gb2YgY29sbGVjdCBwYWRzLiBUaGUgcGFkIGhhcyB0byBiZQorICogYSBzaW5rcGFkLiBUaGUgcmVmY291bnQgb2YgdGhlIHBhZCBpcyBpbmNyZW1lbnRlZC4gVXNlCisgKiBnc3RfY29sbGVjdF9wYWRzX3JlbW92ZV9wYWQoKSB0byByZW1vdmUgdGhlIHBhZCBmcm9tIHRoZSBjb2xsZWN0aW9uCisgKiBhZ2Fpbi4KKyAqCisgKiBZb3Ugc3BlY2lmeSBhIHNpemUgZm9yIHRoZSByZXR1cm5lZCAjR3N0Q29sbGVjdERhdGEgc3RydWN0dXJlCisgKiBzbyB0aGF0IHlvdSBjYW4gdXNlIGl0IHRvIHN0b3JlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgKgorICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSAjR3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5IHRoYXQgd2lsbCBiZSBjYWxsZWQKKyAqIGp1c3QgYmVmb3JlIHRoZSAjR3N0Q29sbGVjdERhdGEgc3RydWN0dXJlIGlzIGZyZWVkLiBJdCBpcyBwYXNzZWQgdGhlCisgKiBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgYW5kIHNob3VsZCBmcmVlIGFueSBjdXN0b20gbWVtb3J5IGFuZCByZXNvdXJjZXMKKyAqIGFsbG9jYXRlZCBmb3IgaXQuCisgKgorICogVGhlIHBhZCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYWN0aXZhdGVkIGluIHB1c2ggbW9kZSB3aGVuIEBwYWRzIGlzCisgKiBzdGFydGVkLgorICoKKyAqIE1UIHNhZmUuCisgKgorICogU2luY2U6IDAuMTAuMTIKKyAqCisgKiBSZXR1cm5zOiBhIG5ldyAjR3N0Q29sbGVjdERhdGEgdG8gaWRlbnRpZnkgdGhlIG5ldyBwYWQuIE9yIE5VTEwKKyAqICAgaWYgd3JvbmcgcGFyYW1ldGVycyBhcmUgc3VwcGxpZWQuCisgKi8KK0dzdENvbGxlY3REYXRhICoKK2dzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZF9mdWxsIChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsIEdzdFBhZCAqIHBhZCwgZ3VpbnQgc2l6ZSwKKyAgICBHc3RDb2xsZWN0RGF0YURlc3Ryb3lOb3RpZnkgZGVzdHJveV9ub3RpZnkpCit7CisgIEdzdENvbGxlY3REYXRhICpkYXRhOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwYWRzICE9IE5VTEwsIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NPTExFQ1RfUEFEUyAocGFkcyksIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAocGFkICE9IE5VTEwsIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1BBRF9JU19TSU5LIChwYWQpLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNpemUgPj0gc2l6ZW9mIChHc3RDb2xsZWN0RGF0YSksIE5VTEwpOworCisgIEdTVF9ERUJVRyAoImFkZGluZyBwYWQgJXM6JXMiLCBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOworCisgIGRhdGEgPSBnX21hbGxvYzAgKHNpemUpOworICBkYXRhLT5jb2xsZWN0ID0gcGFkczsKKyAgZGF0YS0+cGFkID0gZ3N0X29iamVjdF9yZWYgKHBhZCk7CisgIGRhdGEtPmJ1ZmZlciA9IE5VTEw7CisgIGRhdGEtPnBvcyA9IDA7CisgIGdzdF9zZWdtZW50X2luaXQgKCZkYXRhLT5zZWdtZW50LCBHU1RfRk9STUFUX1VOREVGSU5FRCk7CisgIGRhdGEtPmFiaWRhdGEuQUJJLmZsdXNoaW5nID0gRkFMU0U7CisgIGRhdGEtPmFiaWRhdGEuQUJJLm5ld19zZWdtZW50ID0gRkFMU0U7CisgIGRhdGEtPmFiaWRhdGEuQUJJLmVvcyA9IEZBTFNFOworICBkYXRhLT5hYmlkYXRhLkFCSS5yZWZjb3VudCA9IDE7CisKKyAgLyogRklYTUU6IFVnbHkgaGFjayBhcyB3ZSBjYW4ndCBhZGQgbW9yZSBmaWVsZHMgdG8gR3N0Q29sbGVjdERhdGEgKi8KKyAgZ19vYmplY3Rfc2V0X2RhdGEgKEdfT0JKRUNUIChwYWQpLCAiZ3N0LWNvbGxlY3QtZGF0YS1kZXN0cm95LW5vdGlmeSIsCisgICAgICAodm9pZCAqKSBkZXN0cm95X25vdGlmeSk7CisKKyAgR1NUX0NPTExFQ1RfUEFEU19QQURfTE9DSyAocGFkcyk7CisgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKKyAgZ3N0X3BhZF9zZXRfZWxlbWVudF9wcml2YXRlIChwYWQsIGRhdGEpOworICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKyAgcGFkcy0+YWJpZGF0YS5BQkkucGFkX2xpc3QgPQorICAgICAgZ19zbGlzdF9hcHBlbmQgKHBhZHMtPmFiaWRhdGEuQUJJLnBhZF9saXN0LCBkYXRhKTsKKyAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHBhZCwgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9jb2xsZWN0X3BhZHNfY2hhaW4pKTsKKyAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHBhZCwgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9jb2xsZWN0X3BhZHNfZXZlbnQpKTsKKyAgLyogYWN0aXZhdGUgdGhlIHBhZCB3aGVuIG5lZWRlZCAqLworICBpZiAocGFkcy0+c3RhcnRlZCkKKyAgICBnc3RfcGFkX3NldF9hY3RpdmUgKHBhZCwgVFJVRSk7CisgIHBhZHMtPmFiaWRhdGEuQUJJLnBhZF9jb29raWUrKzsKKyAgR1NUX0NPTExFQ1RfUEFEU19QQURfVU5MT0NLIChwYWRzKTsKKworICByZXR1cm4gZGF0YTsKK30KKworc3RhdGljIGdpbnQKK2ZpbmRfcGFkIChHc3RDb2xsZWN0RGF0YSAqIGRhdGEsIEdzdFBhZCAqIHBhZCkKK3sKKyAgaWYgKGRhdGEtPnBhZCA9PSBwYWQpCisgICAgcmV0dXJuIDA7CisgIHJldHVybiAxOworfQorCisvKioKKyAqIGdzdF9jb2xsZWN0X3BhZHNfc2V0X2NsaXBfZnVuY3Rpb246CisgKiBAcGFkczogdGhlIGNvbGxlY3RzcGFkcyB0byB1c2UKKyAqIEBjbGlwZnVuYzogY2xpcCBmdW5jdGlvbiB0byBpbnN0YWxsCisgKiBAdXNlcl9kYXRhOiAoY2xvc3VyZSk6IHVzZXIgZGF0YSB0byBwYXNzIHRvIEBjbGlwX2Z1bmMKKyAqCisgKiBJbnN0YWxsIGEgY2xpcHBpbmcgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgcmlnaHQgYWZ0ZXIgYSBidWZmZXIgaXMgcmVjZWl2ZWQKKyAqIG9uIGEgcGFkIG1hbmFnZWQgYnkgQHBhZHMuIFNlZSAjR3N0Q29sbGVjdFBhZHNDbGlwRnVuY3Rpb24gZm9yIG1vcmUgaW5mby4KKyAqCisgKiBTaW5jZTogMC4xMC4yNgorICovCit2b2lkCitnc3RfY29sbGVjdF9wYWRzX3NldF9jbGlwX2Z1bmN0aW9uIChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsCisgICAgR3N0Q29sbGVjdFBhZHNDbGlwRnVuY3Rpb24gY2xpcGZ1bmMsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgR3N0Q29sbGVjdFBhZHNQcml2YXRlICpwcml2OworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKHBhZHMgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19DT0xMRUNUX1BBRFMgKHBhZHMpKTsKKworICBwcml2ID0gcGFkcy0+YWJpZGF0YS5BQkkucHJpdjsKKworICBwcml2LT5jbGlwZnVuYyA9IGNsaXBmdW5jOworICBwcml2LT5jbGlwZnVuY191c2VyX2RhdGEgPSB1c2VyX2RhdGE7Cit9CisKKy8qKgorICogZ3N0X2NvbGxlY3RfcGFkc19yZW1vdmVfcGFkOgorICogQHBhZHM6IHRoZSBjb2xsZWN0c3BhZHMgdG8gdXNlCisgKiBAcGFkOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBwYWQgdG8gcmVtb3ZlCisgKgorICogUmVtb3ZlIGEgcGFkIGZyb20gdGhlIGNvbGxlY3Rpb24gb2YgY29sbGVjdCBwYWRzLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxzbworICogZnJlZSB0aGUgI0dzdENvbGxlY3REYXRhIGFuZCBhbGwgdGhlIHJlc291cmNlcyB0aGF0IHdlcmUgYWxsb2NhdGVkIHdpdGgKKyAqIGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZCgpLgorICoKKyAqIFRoZSBwYWQgd2lsbCBiZSBkZWFjdGl2YXRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gQHBhZHMgaXMgc3RvcHBlZC4KKyAqCisgKiBNVCBzYWZlLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBwYWQgY291bGQgYmUgcmVtb3ZlZC4KKyAqLworZ2Jvb2xlYW4KK2dzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZCAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzLCBHc3RQYWQgKiBwYWQpCit7CisgIEdzdENvbGxlY3REYXRhICpkYXRhOworICBHU0xpc3QgKmxpc3Q7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBhZHMgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NPTExFQ1RfUEFEUyAocGFkcyksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBhZCAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7CisKKyAgR1NUX0RFQlVHICgicmVtb3ZpbmcgcGFkICVzOiVzIiwgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKKworICBHU1RfQ09MTEVDVF9QQURTX1BBRF9MT0NLIChwYWRzKTsKKyAgbGlzdCA9CisgICAgICBnX3NsaXN0X2ZpbmRfY3VzdG9tIChwYWRzLT5hYmlkYXRhLkFCSS5wYWRfbGlzdCwgcGFkLAorICAgICAgKEdDb21wYXJlRnVuYykgZmluZF9wYWQpOworICBpZiAoIWxpc3QpCisgICAgZ290byB1bmtub3duX3BhZDsKKworICBkYXRhID0gKEdzdENvbGxlY3REYXRhICopIGxpc3QtPmRhdGE7CisKKyAgR1NUX0RFQlVHICgiZm91bmQgcGFkICVzOiVzIGF0ICVwIiwgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpLCBkYXRhKTsKKworICAvKiBjbGVhciB0aGUgc3R1ZmYgd2UgY29uZmlndXJlZCAqLworICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAocGFkLCBOVUxMKTsKKyAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHBhZCwgTlVMTCk7CisgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKKyAgZ3N0X3BhZF9zZXRfZWxlbWVudF9wcml2YXRlIChwYWQsIE5VTEwpOworICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKworICAvKiBiYWNrd2FyZCBjb21wYXQsIGFsc28gcmVtb3ZlIGZyb20gZGF0YSBpZiBzdG9wcGVkLCBub3RlIHRoYXQgdGhpcyBmdW5jdGlvbgorICAgKiBjYW4gb25seSBiZSBjYWxsZWQgd2hlbiB3ZSBhcmUgc3RvcHBlZCBiZWNhdXNlIHdlIGRvbid0IHRha2UgdGhlIExPQ0sgdG8KKyAgICogcHJvdGVjdCB0aGUgcGFkcy0+ZGF0YSBsaXN0LiAqLworICBpZiAoIXBhZHMtPnN0YXJ0ZWQpIHsKKyAgICBHU0xpc3QgKmRsaXN0OworCisgICAgZGxpc3QgPSBnX3NsaXN0X2ZpbmRfY3VzdG9tIChwYWRzLT5kYXRhLCBwYWQsIChHQ29tcGFyZUZ1bmMpIGZpbmRfcGFkKTsKKyAgICBpZiAoZGxpc3QpIHsKKyAgICAgIEdzdENvbGxlY3REYXRhICpwZGF0YSA9IGRsaXN0LT5kYXRhOworCisgICAgICBwYWRzLT5kYXRhID0gZ19zbGlzdF9kZWxldGVfbGluayAocGFkcy0+ZGF0YSwgZGxpc3QpOworICAgICAgdW5yZWZfZGF0YSAocGRhdGEpOworICAgIH0KKyAgfQorICAvKiByZW1vdmUgZnJvbSB0aGUgcGFkIGxpc3QgKi8KKyAgcGFkcy0+YWJpZGF0YS5BQkkucGFkX2xpc3QgPQorICAgICAgZ19zbGlzdF9kZWxldGVfbGluayAocGFkcy0+YWJpZGF0YS5BQkkucGFkX2xpc3QsIGxpc3QpOworICBwYWRzLT5hYmlkYXRhLkFCSS5wYWRfY29va2llKys7CisKKyAgLyogc2lnbmFsIHdhaXRlcnMgYmVjYXVzZSBzb21ldGhpbmcgY2hhbmdlZCAqLworICBHU1RfQ09MTEVDVF9QQURTX0JST0FEQ0FTVCAocGFkcyk7CisKKyAgLyogZGVhY3RpdmF0ZSB0aGUgcGFkIHdoZW4gbmVlZGVkICovCisgIGlmICghcGFkcy0+c3RhcnRlZCkKKyAgICBnc3RfcGFkX3NldF9hY3RpdmUgKHBhZCwgRkFMU0UpOworCisgIC8qIGNsZWFuIGFuZCBmcmVlIHRoZSBjb2xsZWN0IGRhdGEgKi8KKyAgdW5yZWZfZGF0YSAoZGF0YSk7CisKKyAgR1NUX0NPTExFQ1RfUEFEU19QQURfVU5MT0NLIChwYWRzKTsKKworICByZXR1cm4gVFJVRTsKKwordW5rbm93bl9wYWQ6CisgIHsKKyAgICBHU1RfV0FSTklORyAoImNhbm5vdCByZW1vdmUgdW5rbm93biBwYWQgJXM6JXMiLCBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOworICAgIEdTVF9DT0xMRUNUX1BBRFNfUEFEX1VOTE9DSyAocGFkcyk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKKy8qKgorICogZ3N0X2NvbGxlY3RfcGFkc19pc19hY3RpdmU6CisgKiBAcGFkczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgY29sbGVjdHNwYWRzIHRvIHVzZQorICogQHBhZDogdGhlIHBhZCB0byBjaGVjaworICoKKyAqIENoZWNrIGlmIGEgcGFkIGlzIGFjdGl2ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGN1cnJlbnRseSBub3QgaW1wbGVtZW50ZWQuCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgcGFkIGlzIGFjdGl2ZS4KKyAqLworZ2Jvb2xlYW4KK2dzdF9jb2xsZWN0X3BhZHNfaXNfYWN0aXZlIChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsIEdzdFBhZCAqIHBhZCkKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBhZHMgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NPTExFQ1RfUEFEUyAocGFkcyksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBhZCAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7CisKKyAgZ193YXJuaW5nICgiZ3N0X2NvbGxlY3RfcGFkc19pc19hY3RpdmUoKSBpcyBub3QgaW1wbGVtZW50ZWQiKTsKKworICByZXR1cm4gRkFMU0U7Cit9CisKKy8qKgorICogZ3N0X2NvbGxlY3RfcGFkc19jb2xsZWN0OgorICogQHBhZHM6IHRoZSBjb2xsZWN0c3BhZHMgdG8gdXNlCisgKgorICogQ29sbGVjdCBkYXRhIG9uIGFsbCBwYWRzLiBUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkCisgKiBmcm9tIGEgI0dzdFRhc2sgZnVuY3Rpb24gaW4gYW4gZWxlbWVudC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGN1cnJlbnRseSBub3QgaW1wbGVtZW50ZWQuCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBSZXR1cm5zOiAjR3N0Rmxvd1JldHVybiBvZiB0aGUgb3BlcmF0aW9uLgorICovCitHc3RGbG93UmV0dXJuCitnc3RfY29sbGVjdF9wYWRzX2NvbGxlY3QgKEdzdENvbGxlY3RQYWRzICogcGFkcykKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBhZHMgIT0gTlVMTCwgR1NUX0ZMT1dfRVJST1IpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NPTExFQ1RfUEFEUyAocGFkcyksIEdTVF9GTE9XX0VSUk9SKTsKKworICBnX3dhcm5pbmcgKCJnc3RfY29sbGVjdF9wYWRzX2NvbGxlY3QoKSBpcyBub3QgaW1wbGVtZW50ZWQiKTsKKworICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKK30KKworLyoqCisgKiBnc3RfY29sbGVjdF9wYWRzX2NvbGxlY3RfcmFuZ2U6CisgKiBAcGFkczogdGhlIGNvbGxlY3RzcGFkcyB0byB1c2UKKyAqIEBvZmZzZXQ6IHRoZSBvZmZzZXQgdG8gY29sbGVjdAorICogQGxlbmd0aDogdGhlIGxlbmd0aCB0byBjb2xsZWN0CisgKgorICogQ29sbGVjdCBkYXRhIHdpdGggQG9mZnNldCBhbmQgQGxlbmd0aCBvbiBhbGwgcGFkcy4gVGhpcyBmdW5jdGlvbgorICogaXMgdHlwaWNhbGx5IGNhbGxlZCBpbiB0aGUgZ2V0cmFuZ2UgZnVuY3Rpb24gb2YgYW4gZWxlbWVudC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGN1cnJlbnRseSBub3QgaW1wbGVtZW50ZWQuCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBSZXR1cm5zOiAjR3N0Rmxvd1JldHVybiBvZiB0aGUgb3BlcmF0aW9uLgorICovCitHc3RGbG93UmV0dXJuCitnc3RfY29sbGVjdF9wYWRzX2NvbGxlY3RfcmFuZ2UgKEdzdENvbGxlY3RQYWRzICogcGFkcywgZ3VpbnQ2NCBvZmZzZXQsCisgICAgZ3VpbnQgbGVuZ3RoKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAocGFkcyAhPSBOVUxMLCBHU1RfRkxPV19FUlJPUik7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ09MTEVDVF9QQURTIChwYWRzKSwgR1NUX0ZMT1dfRVJST1IpOworCisgIGdfd2FybmluZyAoImdzdF9jb2xsZWN0X3BhZHNfY29sbGVjdF9yYW5nZSgpIGlzIG5vdCBpbXBsZW1lbnRlZCIpOworCisgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9jb2xsZWN0X3BhZHNfaXNfZmx1c2hpbmcgKEdzdENvbGxlY3RQYWRzICogcGFkcykKK3sKKyAgR1NMaXN0ICp3YWxrID0gTlVMTDsKKyAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKKworICBHU1RfQ09MTEVDVF9QQURTX1BBRF9MT0NLIChwYWRzKTsKKworICAvKiBFbnN1cmUgcGFkcy0+ZGF0YSBzdGF0ZSAqLworICBnc3RfY29sbGVjdF9wYWRzX2NoZWNrX3BhZHNfdW5sb2NrZWQgKHBhZHMpOworCisgIEdTVF9ERUJVRyAoIkdldHRpbmcgZmx1c2hpbmcgc3RhdGUgKHBhZHM6JXAsIHBhZHMtPmRhdGE6JXApIiwKKyAgICAgIHBhZHMsIHBhZHMtPmRhdGEpOworCisgIGZvciAod2FsayA9IHBhZHMtPmRhdGE7IHdhbGs7IHdhbGsgPSBnX3NsaXN0X25leHQgKHdhbGspKSB7CisgICAgR3N0Q29sbGVjdERhdGEgKmNkYXRhID0gd2Fsay0+ZGF0YTsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGNkYXRhLT5wYWQsICJmbHVzaGluZzolZCIsIGNkYXRhLT5hYmlkYXRhLkFCSS5mbHVzaGluZyk7CisKKyAgICBpZiAoY2RhdGEtPmFiaWRhdGEuQUJJLmZsdXNoaW5nKSB7CisgICAgICBnb3RvIGRvbmU7CisgICAgfQorICB9CisKKyAgcmVzID0gRkFMU0U7Citkb25lOgorICBHU1RfQ09MTEVDVF9QQURTX1BBRF9VTkxPQ0sgKHBhZHMpOworICByZXR1cm4gcmVzOworfQorCisvKiBGSVhNRSwgSSB0aGluayB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gd29yayBhcm91bmQgYmFkIGJlaGF2aW91cgorICogb2YgZWxlbWVudHMgdGhhdCBhZGQgcGFkcyB0byB0aGVtc2VsdmVzIHdpdGhvdXQgYWN0aXZhdGluZyB0aGVtLgorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggUEFEX0xPQ0suCisgKi8KK3N0YXRpYyB2b2lkCitnc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaGluZ191bmxvY2tlZCAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzLAorICAgIGdib29sZWFuIGZsdXNoaW5nKQoreworICBHU0xpc3QgKndhbGsgPSBOVUxMOworCisgIEdTVF9ERUJVRyAoIlNldHRpbmcgZmx1c2hpbmcgKCVkKSIsIGZsdXNoaW5nKTsKKworICAvKiBVcGRhdGUgdGhlIHBhZHMgZmx1c2hpbmcgZmxhZyAqLworICBmb3IgKHdhbGsgPSBwYWRzLT5kYXRhOyB3YWxrOyB3YWxrID0gZ19zbGlzdF9uZXh0ICh3YWxrKSkgeworICAgIEdzdENvbGxlY3REYXRhICpjZGF0YSA9IHdhbGstPmRhdGE7CisKKyAgICBpZiAoR1NUX0lTX1BBRCAoY2RhdGEtPnBhZCkpIHsKKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoY2RhdGEtPnBhZCk7CisgICAgICBpZiAoZmx1c2hpbmcpCisgICAgICAgIEdTVF9QQURfU0VUX0ZMVVNISU5HIChjZGF0YS0+cGFkKTsKKyAgICAgIGVsc2UKKyAgICAgICAgR1NUX1BBRF9VTlNFVF9GTFVTSElORyAoY2RhdGEtPnBhZCk7CisgICAgICBjZGF0YS0+YWJpZGF0YS5BQkkuZmx1c2hpbmcgPSBmbHVzaGluZzsKKyAgICAgIGdzdF9jb2xsZWN0X3BhZHNfY2xlYXIgKHBhZHMsIGNkYXRhKTsKKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChjZGF0YS0+cGFkKTsKKyAgICB9CisgIH0KKyAgLyogU2V0dGluZyB0aGUgcGFkcyB0byBmbHVzaGluZyBtZWFucyB0aGF0IHdlIGNoYW5nZWQgdGhlIHZhbHVlcyB3aGljaAorICAgKiBhcmUgJ3Byb3RlY3RlZCcgYnkgdGhlIGNvb2tpZS4gV2UgdGhlcmVmb3JlIHVwZGF0ZSBpdCB0byBmb3JjZSBhCisgICAqIHJlY2FsY3VsYXRpb24gb2YgdGhlIGN1cnJlbnQgcGFkIHN0YXR1cy4gKi8KKyAgcGFkcy0+YWJpZGF0YS5BQkkucGFkX2Nvb2tpZSsrOworfQorCisvKioKKyAqIGdzdF9jb2xsZWN0X3BhZHNfc2V0X2ZsdXNoaW5nOgorICogQHBhZHM6IHRoZSBjb2xsZWN0c3BhZHMgdG8gdXNlCisgKiBAZmx1c2hpbmc6IGRlc2lyZWQgc3RhdGUgb2YgdGhlIHBhZHMKKyAqCisgKiBDaGFuZ2UgdGhlIGZsdXNoaW5nIHN0YXRlIG9mIGFsbCB0aGUgcGFkcyBpbiB0aGUgY29sbGVjdGlvbi4gTm8gcGFkCisgKiBpcyBhYmxlIHRvIGFjY2VwdCBhbnltb3JlIGRhdGEgd2hlbiBAZmx1c2hpbmcgaXMgJVRSVUUuIENhbGxpbmcgdGhpcworICogZnVuY3Rpb24gd2l0aCBAZmx1c2hpbmcgJUZBTFNFIG1ha2VzIEBwYWRzIGFjY2VwdCBkYXRhIGFnYWluLgorICoKKyAqIE1UIHNhZmUuCisgKgorICogU2luY2U6IDAuMTAuNy4KKyAqLwordm9pZAorZ3N0X2NvbGxlY3RfcGFkc19zZXRfZmx1c2hpbmcgKEdzdENvbGxlY3RQYWRzICogcGFkcywgZ2Jvb2xlYW4gZmx1c2hpbmcpCit7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKHBhZHMgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19DT0xMRUNUX1BBRFMgKHBhZHMpKTsKKworICBHU1RfQ09MTEVDVF9QQURTX1BBRF9MT0NLIChwYWRzKTsKKyAgLyogRW5zdXJlIHBhZHMtPmRhdGEgc3RhdGUgKi8KKyAgZ3N0X2NvbGxlY3RfcGFkc19jaGVja19wYWRzX3VubG9ja2VkIChwYWRzKTsKKyAgZ3N0X2NvbGxlY3RfcGFkc19zZXRfZmx1c2hpbmdfdW5sb2NrZWQgKHBhZHMsIGZsdXNoaW5nKTsKKyAgR1NUX0NPTExFQ1RfUEFEU19QQURfVU5MT0NLIChwYWRzKTsKK30KKworLyoqCisgKiBnc3RfY29sbGVjdF9wYWRzX3N0YXJ0OgorICogQHBhZHM6IHRoZSBjb2xsZWN0c3BhZHMgdG8gdXNlCisgKgorICogU3RhcnRzIHRoZSBwcm9jZXNzaW5nIG9mIGRhdGEgaW4gdGhlIGNvbGxlY3RfcGFkcy4KKyAqCisgKiBNVCBzYWZlLgorICovCit2b2lkCitnc3RfY29sbGVjdF9wYWRzX3N0YXJ0IChHc3RDb2xsZWN0UGFkcyAqIHBhZHMpCit7CisgIEdTTGlzdCAqY29sbGVjdGVkOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKHBhZHMgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19DT0xMRUNUX1BBRFMgKHBhZHMpKTsKKworICBHU1RfREVCVUdfT0JKRUNUIChwYWRzLCAic3RhcnRpbmcgY29sbGVjdCBwYWRzIik7CisKKyAgLyogbWFrZSBzdXJlIHN0b3AgYW5kIGNvbGxlY3QgY2Fubm90IGJlIGNhbGxlZCBhbnltb3JlICovCisgIEdTVF9PQkpFQ1RfTE9DSyAocGFkcyk7CisKKyAgLyogbWFrZSBwYWRzIHN0cmVhbWFibGUgKi8KKyAgR1NUX0NPTExFQ1RfUEFEU19QQURfTE9DSyAocGFkcyk7CisKKyAgLyogbG9vcCBvdmVyIHRoZSBtYXN0ZXIgcGFkIGxpc3QgYW5kIHJlc2V0IHRoZSBzZWdtZW50ICovCisgIGNvbGxlY3RlZCA9IHBhZHMtPmFiaWRhdGEuQUJJLnBhZF9saXN0OworICBmb3IgKDsgY29sbGVjdGVkOyBjb2xsZWN0ZWQgPSBnX3NsaXN0X25leHQgKGNvbGxlY3RlZCkpIHsKKyAgICBHc3RDb2xsZWN0RGF0YSAqZGF0YTsKKworICAgIGRhdGEgPSBjb2xsZWN0ZWQtPmRhdGE7CisgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJmRhdGEtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKKyAgfQorCisgIGdzdF9jb2xsZWN0X3BhZHNfc2V0X2ZsdXNoaW5nX3VubG9ja2VkIChwYWRzLCBGQUxTRSk7CisKKyAgLyogU3RhcnQgY29sbGVjdCBwYWRzICovCisgIHBhZHMtPnN0YXJ0ZWQgPSBUUlVFOworICBHU1RfQ09MTEVDVF9QQURTX1BBRF9VTkxPQ0sgKHBhZHMpOworICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkcyk7Cit9CisKKy8qKgorICogZ3N0X2NvbGxlY3RfcGFkc19zdG9wOgorICogQHBhZHM6IHRoZSBjb2xsZWN0c3BhZHMgdG8gdXNlCisgKgorICogU3RvcHMgdGhlIHByb2Nlc3Npbmcgb2YgZGF0YSBpbiB0aGUgY29sbGVjdF9wYWRzLiB0aGlzIGZ1bmN0aW9uCisgKiB3aWxsIGFsc28gdW5ibG9jayBhbnkgYmxvY2tpbmcgb3BlcmF0aW9ucy4KKyAqCisgKiBNVCBzYWZlLgorICovCit2b2lkCitnc3RfY29sbGVjdF9wYWRzX3N0b3AgKEdzdENvbGxlY3RQYWRzICogcGFkcykKK3sKKyAgR1NMaXN0ICpjb2xsZWN0ZWQ7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAocGFkcyAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0NPTExFQ1RfUEFEUyAocGFkcykpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZHMsICJzdG9wcGluZyBjb2xsZWN0IHBhZHMiKTsKKworICAvKiBtYWtlIHN1cmUgY29sbGVjdCBhbmQgc3RhcnQgY2Fubm90IGJlIGNhbGxlZCBhbnltb3JlICovCisgIEdTVF9PQkpFQ1RfTE9DSyAocGFkcyk7CisKKyAgLyogbWFrZSBwYWRzIG5vdCBhY2NlcHQgZGF0YSBhbnltb3JlICovCisgIEdTVF9DT0xMRUNUX1BBRFNfUEFEX0xPQ0sgKHBhZHMpOworICBnc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaGluZ191bmxvY2tlZCAocGFkcywgVFJVRSk7CisKKyAgLyogU3RvcCBjb2xsZWN0IHBhZHMgKi8KKyAgcGFkcy0+c3RhcnRlZCA9IEZBTFNFOworICBwYWRzLT5lb3NwYWRzID0gMDsKKyAgcGFkcy0+cXVldWVkcGFkcyA9IDA7CisKKyAgLyogbG9vcCBvdmVyIHRoZSBtYXN0ZXIgcGFkIGxpc3QgYW5kIGZsdXNoIGJ1ZmZlcnMgKi8KKyAgY29sbGVjdGVkID0gcGFkcy0+YWJpZGF0YS5BQkkucGFkX2xpc3Q7CisgIGZvciAoOyBjb2xsZWN0ZWQ7IGNvbGxlY3RlZCA9IGdfc2xpc3RfbmV4dCAoY29sbGVjdGVkKSkgeworICAgIEdzdENvbGxlY3REYXRhICpkYXRhOworICAgIEdzdEJ1ZmZlciAqKmJ1ZmZlcl9wOworCisgICAgZGF0YSA9IGNvbGxlY3RlZC0+ZGF0YTsKKyAgICBpZiAoZGF0YS0+YnVmZmVyKSB7CisgICAgICBidWZmZXJfcCA9ICZkYXRhLT5idWZmZXI7CisgICAgICBnc3RfYnVmZmVyX3JlcGxhY2UgKGJ1ZmZlcl9wLCBOVUxMKTsKKyAgICAgIGRhdGEtPnBvcyA9IDA7CisgICAgfQorICAgIGRhdGEtPmFiaWRhdGEuQUJJLmVvcyA9IEZBTFNFOworICB9CisKKyAgR1NUX0NPTExFQ1RfUEFEU19QQURfVU5MT0NLIChwYWRzKTsKKyAgLyogV2FrZSB0aGVtIHVwIHNvIHRoZXkgY2FuIGVuZCB0aGUgY2hhaW4gZnVuY3Rpb25zLiAqLworICBHU1RfQ09MTEVDVF9QQURTX0JST0FEQ0FTVCAocGFkcyk7CisKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZHMpOworfQorCisvKioKKyAqIGdzdF9jb2xsZWN0X3BhZHNfcGVlazoKKyAqIEBwYWRzOiB0aGUgY29sbGVjdHNwYWRzIHRvIHBlZWsKKyAqIEBkYXRhOiB0aGUgZGF0YSB0byB1c2UKKyAqCisgKiBQZWVrIGF0IHRoZSBidWZmZXIgY3VycmVudGx5IHF1ZXVlZCBpbiBAZGF0YS4gVGhpcyBmdW5jdGlvbgorICogc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBAcGFkcyBMT0NLIGhlbGQsIHN1Y2ggYXMgaW4gdGhlIGNhbGxiYWNrCisgKiBoYW5kbGVyLgorICoKKyAqIE1UIHNhZmUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBUaGUgYnVmZmVyIGluIEBkYXRhIG9yIE5VTEwgaWYgbm8gYnVmZmVyIGlzIHF1ZXVlZC4KKyAqICBzaG91bGQgdW5yZWYgdGhlIGJ1ZmZlciBhZnRlciB1c2FnZS4KKyAqLworR3N0QnVmZmVyICoKK2dzdF9jb2xsZWN0X3BhZHNfcGVlayAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzLCBHc3RDb2xsZWN0RGF0YSAqIGRhdGEpCit7CisgIEdzdEJ1ZmZlciAqcmVzdWx0OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwYWRzICE9IE5VTEwsIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NPTExFQ1RfUEFEUyAocGFkcyksIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGF0YSAhPSBOVUxMLCBOVUxMKTsKKworICBpZiAoKHJlc3VsdCA9IGRhdGEtPmJ1ZmZlcikpCisgICAgZ3N0X2J1ZmZlcl9yZWYgKHJlc3VsdCk7CisKKyAgR1NUX0RFQlVHICgiUGVla2luZyBhdCBwYWQgJXM6JXM6IGJ1ZmZlcj0lcCIsCisgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKGRhdGEtPnBhZCksIHJlc3VsdCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBnc3RfY29sbGVjdF9wYWRzX3BvcDoKKyAqIEBwYWRzOiB0aGUgY29sbGVjdHNwYWRzIHRvIHBvcAorICogQGRhdGE6IHRoZSBkYXRhIHRvIHVzZQorICoKKyAqIFBvcCB0aGUgYnVmZmVyIGN1cnJlbnRseSBxdWV1ZWQgaW4gQGRhdGEuIFRoaXMgZnVuY3Rpb24KKyAqIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUgQHBhZHMgTE9DSyBoZWxkLCBzdWNoIGFzIGluIHRoZSBjYWxsYmFjaworICogaGFuZGxlci4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnc3RfYnVmZmVyX3VucmVmCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IFRoZSBidWZmZXIgaW4gQGRhdGEgb3IgTlVMTCBpZiBubyBidWZmZXIgd2FzCisgKiAgIHF1ZXVlZC4gWW91IHNob3VsZCB1bnJlZiB0aGUgYnVmZmVyIGFmdGVyIHVzYWdlLgorICovCitHc3RCdWZmZXIgKgorZ3N0X2NvbGxlY3RfcGFkc19wb3AgKEdzdENvbGxlY3RQYWRzICogcGFkcywgR3N0Q29sbGVjdERhdGEgKiBkYXRhKQoreworICBHc3RCdWZmZXIgKnJlc3VsdDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAocGFkcyAhPSBOVUxMLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DT0xMRUNUX1BBRFMgKHBhZHMpLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRhdGEgIT0gTlVMTCwgTlVMTCk7CisKKyAgaWYgKChyZXN1bHQgPSBkYXRhLT5idWZmZXIpKSB7CisgICAgZGF0YS0+YnVmZmVyID0gTlVMTDsKKyAgICBkYXRhLT5wb3MgPSAwOworICAgIC8qIG9uZSBsZXNzIHBhZCB3aXRoIHF1ZXVlZCBkYXRhIG5vdyAqLworICAgIHBhZHMtPnF1ZXVlZHBhZHMtLTsKKyAgfQorCisgIEdTVF9DT0xMRUNUX1BBRFNfQlJPQURDQVNUIChwYWRzKTsKKworICBHU1RfREVCVUcgKCJQb3AgYnVmZmVyIG9uIHBhZCAlczolczogYnVmZmVyPSVwIiwKKyAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAoZGF0YS0+cGFkKSwgcmVzdWx0KTsKKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBwb3AgYW5kIHVucmVmIHRoZSBjdXJyZW50bHkgcXVldWVkIGJ1ZmZlciwgc2hvdWxkIGUgY2FsbGVkIHdpdGggdGhlIExPQ0sKKyAqIGhlbHQuICovCitzdGF0aWMgdm9pZAorZ3N0X2NvbGxlY3RfcGFkc19jbGVhciAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzLCBHc3RDb2xsZWN0RGF0YSAqIGRhdGEpCit7CisgIEdzdEJ1ZmZlciAqYnVmOworCisgIGlmICgoYnVmID0gZ3N0X2NvbGxlY3RfcGFkc19wb3AgKHBhZHMsIGRhdGEpKSkKKyAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOworfQorCisvKioKKyAqIGdzdF9jb2xsZWN0X3BhZHNfYXZhaWxhYmxlOgorICogQHBhZHM6IHRoZSBjb2xsZWN0c3BhZHMgdG8gcXVlcnkKKyAqCisgKiBRdWVyeSBob3cgbXVjaCBieXRlcyBjYW4gYmUgcmVhZCBmcm9tIGVhY2ggcXVldWVkIGJ1ZmZlci4gVGhpcyBtZWFucworICogdGhhdCB0aGUgcmVzdWx0IG9mIHRoaXMgY2FsbCBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjYW4KKyAqIGJlIHJlYWQgZnJvbSBlYWNoIG9mIHRoZSBwYWRzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIEBwYWRzIExPQ0sgaGVsZCwgc3VjaCBhcworICogaW4gdGhlIGNhbGxiYWNrLgorICoKKyAqIE1UIHNhZmUuCisgKgorICogUmV0dXJuczogVGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHF1ZXVlZCBvbiBhbGwgcGFkcy4gVGhpcyBmdW5jdGlvbgorICogcmV0dXJucyAwIGlmIGEgcGFkIGhhcyBubyBxdWV1ZWQgYnVmZmVyLgorICovCisvKiBGSVhNRSwgd2UgY2FuIGRvIHRoaXMgaW4gdGhlIF9jaGFpbiBmdW5jdGlvbnMgKi8KK2d1aW50Citnc3RfY29sbGVjdF9wYWRzX2F2YWlsYWJsZSAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzKQoreworICBHU0xpc3QgKmNvbGxlY3RlZDsKKyAgZ3VpbnQgcmVzdWx0ID0gR19NQVhVSU5UOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwYWRzICE9IE5VTEwsIDApOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NPTExFQ1RfUEFEUyAocGFkcyksIDApOworCisgIGZvciAoY29sbGVjdGVkID0gcGFkcy0+ZGF0YTsgY29sbGVjdGVkOyBjb2xsZWN0ZWQgPSBnX3NsaXN0X25leHQgKGNvbGxlY3RlZCkpIHsKKyAgICBHc3RDb2xsZWN0RGF0YSAqcGRhdGE7CisgICAgR3N0QnVmZmVyICpidWZmZXI7CisgICAgZ2ludCBzaXplOworCisgICAgcGRhdGEgPSAoR3N0Q29sbGVjdERhdGEgKikgY29sbGVjdGVkLT5kYXRhOworCisgICAgLyogaWdub3JlIHBhZCB3aXRoIEVPUyAqLworICAgIGlmIChHX1VOTElLRUxZIChwZGF0YS0+YWJpZGF0YS5BQkkuZW9zKSkgeworICAgICAgR1NUX0RFQlVHICgicGFkICVzOiVzIGlzIEVPUyIsIEdTVF9ERUJVR19QQURfTkFNRSAocGRhdGEtPnBhZCkpOworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgLyogYW4gZW1wdHkgYnVmZmVyIHdpdGhvdXQgRU9TIGlzIHdlaXJkIHdoZW4gd2UgZ2V0IGhlcmUuLiAqLworICAgIGlmIChHX1VOTElLRUxZICgoYnVmZmVyID0gcGRhdGEtPmJ1ZmZlcikgPT0gTlVMTCkpIHsKKyAgICAgIEdTVF9XQVJOSU5HICgicGFkICVzOiVzIGhhcyBubyBidWZmZXIiLCBHU1RfREVCVUdfUEFEX05BTUUgKHBkYXRhLT5wYWQpKTsKKyAgICAgIGdvdG8gbm90X2ZpbGxlZDsKKyAgICB9CisKKyAgICAvKiB0aGlzIGlzIHRoZSBzaXplIGxlZnQgb2YgdGhlIGJ1ZmZlciAqLworICAgIHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpIC0gcGRhdGEtPnBvczsKKyAgICBHU1RfREVCVUcgKCJwYWQgJXM6JXMgaGFzICVkIGJ5dGVzIGxlZnQiLAorICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBkYXRhLT5wYWQpLCBzaXplKTsKKworICAgIC8qIG5lZWQgdG8gcmV0dXJuIHRoZSBtaW4gb2YgYWxsIGF2YWlsYWJsZSBkYXRhICovCisgICAgaWYgKHNpemUgPCByZXN1bHQpCisgICAgICByZXN1bHQgPSBzaXplOworICB9CisgIC8qIG5vdGhpbmcgY2hhbmdlZCwgYWxsIG11c3QgYmUgRU9TIHRoZW4sIHJldHVybiAwICovCisgIGlmIChHX1VOTElLRUxZIChyZXN1bHQgPT0gR19NQVhVSU5UKSkKKyAgICByZXN1bHQgPSAwOworCisgIHJldHVybiByZXN1bHQ7CisKK25vdF9maWxsZWQ6CisgIHsKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCisvKioKKyAqIGdzdF9jb2xsZWN0X3BhZHNfcmVhZF9idWZmZXI6CisgKiBAcGFkczogdGhlIGNvbGxlY3RzcGFkcyB0byBxdWVyeQorICogQGRhdGE6IHRoZSBkYXRhIHRvIHVzZQorICogQHNpemU6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAorICoKKyAqIEdldCBhIGJ1ZmZlciBvZiBAc2l6ZSBieXRlcyBmcm9tIHRoZSBnaXZlbiBwYWQgQGRhdGEuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdpdGggQHBhZHMgTE9DSyBoZWxkLCBzdWNoIGFzIGluIHRoZSBjYWxsYmFjay4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnc3RfYnVmZmVyX3VucmVmCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RCdWZmZXIuIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgY2FuIGJlIGxlc3MKKyAqICAgICB0aGF0IHJlcXVlc3RlZC4gQSByZXR1cm4gb2YgTlVMTCBzaWduYWxzIHRoYXQgdGhlIHBhZCBpcyBlbmQtb2Ytc3RyZWFtLgorICogICAgIFVucmVmIHRoZSBidWZmZXIgd2l0aCBnc3RfYnVmZmVyX3VucmVmKCkgYWZ0ZXIgdXNlLgorICoKKyAqIE1UIHNhZmUuCisgKgorICogU2luY2U6IDAuMTAuMTgKKyAqLworR3N0QnVmZmVyICoKK2dzdF9jb2xsZWN0X3BhZHNfcmVhZF9idWZmZXIgKEdzdENvbGxlY3RQYWRzICogcGFkcywgR3N0Q29sbGVjdERhdGEgKiBkYXRhLAorICAgIGd1aW50IHNpemUpCit7CisgIGd1aW50IHJlYWRzaXplLCBidWZzaXplOworICBHc3RCdWZmZXIgKmJ1ZmZlcjsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAocGFkcyAhPSBOVUxMLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DT0xMRUNUX1BBRFMgKHBhZHMpLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRhdGEgIT0gTlVMTCwgTlVMTCk7CisKKyAgLyogbm8gYnVmZmVyLCBtdXN0IGJlIEVPUyAqLworICBpZiAoKGJ1ZmZlciA9IGRhdGEtPmJ1ZmZlcikgPT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsKKworICBidWZzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKTsKKworICByZWFkc2l6ZSA9IE1JTiAoc2l6ZSwgYnVmc2l6ZSAtIGRhdGEtPnBvcyk7CisKKyAgaWYgKGRhdGEtPnBvcyA9PSAwICYmIHJlYWRzaXplID09IGJ1ZnNpemUpCisgICAgcmV0dXJuIGdzdF9idWZmZXJfcmVmIChidWZmZXIpOworICBlbHNlCisgICAgcmV0dXJuIGdzdF9idWZmZXJfY29weV9yZWdpb24gKGJ1ZmZlciwgR1NUX0JVRkZFUl9DT1BZX0FMTCwgZGF0YS0+cG9zLAorICAgICAgICByZWFkc2l6ZSk7Cit9CisKKy8qKgorICogZ3N0X2NvbGxlY3RfcGFkc190YWtlX2J1ZmZlcjoKKyAqIEBwYWRzOiB0aGUgY29sbGVjdHNwYWRzIHRvIHF1ZXJ5CisgKiBAZGF0YTogdGhlIGRhdGEgdG8gdXNlCisgKiBAc2l6ZTogdGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkCisgKgorICogR2V0IGEgYnVmZmVyIG9mIEBzaXplIGJ5dGVzIGZyb20gdGhlIGdpdmVuIHBhZCBAZGF0YS4gRmx1c2hlcyB0aGUgYW1vdW50CisgKiBvZiByZWFkIGJ5dGVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIEBwYWRzIExPQ0sgaGVsZCwgc3VjaCBhcyBpbiB0aGUgY2FsbGJhY2suCisgKgorICogRnJlZS1mdW5jdGlvbjogZ3N0X2J1ZmZlcl91bnJlZgorICoKKyAqIE1UIHNhZmUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RCdWZmZXIuIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgY2FuIGJlIGxlc3MKKyAqICAgICB0aGF0IHJlcXVlc3RlZC4gQSByZXR1cm4gb2YgTlVMTCBzaWduYWxzIHRoYXQgdGhlIHBhZCBpcyBlbmQtb2Ytc3RyZWFtLgorICogICAgIFVucmVmIHRoZSBidWZmZXIgYWZ0ZXIgdXNlLgorICoKKyAqIFNpbmNlOiAwLjEwLjE4CisgKi8KK0dzdEJ1ZmZlciAqCitnc3RfY29sbGVjdF9wYWRzX3Rha2VfYnVmZmVyIChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsIEdzdENvbGxlY3REYXRhICogZGF0YSwKKyAgICBndWludCBzaXplKQoreworICBHc3RCdWZmZXIgKmJ1ZmZlciA9IGdzdF9jb2xsZWN0X3BhZHNfcmVhZF9idWZmZXIgKHBhZHMsIGRhdGEsIHNpemUpOworCisgIGlmIChidWZmZXIpIHsKKyAgICBnc3RfY29sbGVjdF9wYWRzX2ZsdXNoIChwYWRzLCBkYXRhLCBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpKTsKKyAgfQorICByZXR1cm4gYnVmZmVyOworfQorCisvKioKKyAqIGdzdF9jb2xsZWN0X3BhZHNfZmx1c2g6CisgKiBAcGFkczogdGhlIGNvbGxlY3RzcGFkcyB0byBxdWVyeQorICogQGRhdGE6IHRoZSBkYXRhIHRvIHVzZQorICogQHNpemU6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gZmx1c2gKKyAqCisgKiBGbHVzaCBAc2l6ZSBieXRlcyBmcm9tIHRoZSBwYWQgQGRhdGEuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdpdGggQHBhZHMgTE9DSyBoZWxkLCBzdWNoIGFzCisgKiBpbiB0aGUgY2FsbGJhY2suCisgKgorICogTVQgc2FmZS4KKyAqCisgKiBSZXR1cm5zOiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGZsdXNoZWQuIFRoaXMgY2FuIGJlIGxlc3MgdGhhbiBAc2l6ZSBhbmQKKyAqIGlzIDAgaWYgdGhlIHBhZCB3YXMgZW5kLW9mLXN0cmVhbS4KKyAqLworZ3VpbnQKK2dzdF9jb2xsZWN0X3BhZHNfZmx1c2ggKEdzdENvbGxlY3RQYWRzICogcGFkcywgR3N0Q29sbGVjdERhdGEgKiBkYXRhLAorICAgIGd1aW50IHNpemUpCit7CisgIGd1aW50IGZsdXNoc2l6ZTsKKyAgR3N0QnVmZmVyICpidWZmZXI7CisgIGdzaXplIGJzaXplOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwYWRzICE9IE5VTEwsIDApOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NPTExFQ1RfUEFEUyAocGFkcyksIDApOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGF0YSAhPSBOVUxMLCAwKTsKKworICAvKiBubyBidWZmZXIsIG11c3QgYmUgRU9TICovCisgIGlmICgoYnVmZmVyID0gZGF0YS0+YnVmZmVyKSA9PSBOVUxMKQorICAgIHJldHVybiAwOworCisgIGJzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKTsKKworICAvKiB0aGlzIGlzIHdoYXQgd2UgY2FuIGZsdXNoIGF0IG1heCAqLworICBmbHVzaHNpemUgPSBNSU4gKHNpemUsIGJzaXplIC0gZGF0YS0+cG9zKTsKKworICBkYXRhLT5wb3MgKz0gc2l6ZTsKKworICBHU1RfTE9HX09CSkVDVCAocGFkcywgIkZsdXNoaW5nICVkIGJ5dGVzLCByZXF1ZXN0ZWQgJXUiLCBmbHVzaHNpemUsIHNpemUpOworCisgIGlmIChkYXRhLT5wb3MgPj0gYnNpemUpCisgICAgLyogX2NsZWFyIHdpbGwgYWxzbyByZXNldCBkYXRhLT5wb3MgdG8gMCAqLworICAgIGdzdF9jb2xsZWN0X3BhZHNfY2xlYXIgKHBhZHMsIGRhdGEpOworCisgIHJldHVybiBmbHVzaHNpemU7Cit9CisKKy8qIHNlZSBpZiBwYWRzIHdlcmUgYWRkZWQgb3IgcmVtb3ZlZCBhbmQgdXBkYXRlIG91ciBzdGF0cy4gQW55IHBhZAorICogYWRkZWQgYWZ0ZXIgcmVsZWFzaW5nIHRoZSBQQURfTE9DSyB3aWxsIGdldCBjb2xsZWN0ZWQgaW4gdGhlIG5leHQKKyAqIHJvdW5kLgorICoKKyAqIFdlIGNhbiBkbyBhIHF1aWNrIGNoZWNrIGJ5IGNoZWNraW5nIHRoZSBjb29raWVzLCB0aGF0IGdldCBjaGFuZ2VkCisgKiB3aGVuZXZlciB0aGUgcGFkIGxpc3QgaXMgdXBkYXRlZC4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIExPQ0suCisgKi8KK3N0YXRpYyB2b2lkCitnc3RfY29sbGVjdF9wYWRzX2NoZWNrX3BhZHNfdW5sb2NrZWQgKEdzdENvbGxlY3RQYWRzICogcGFkcykKK3sKKyAgR1NUX0RFQlVHICgic3RvcmVkIGNvb2tpZSA6ICVkLCB1c2VkX2Nvb2tpZTolZCIsCisgICAgICBwYWRzLT5hYmlkYXRhLkFCSS5wYWRfY29va2llLCBwYWRzLT5jb29raWUpOworICBpZiAoR19VTkxJS0VMWSAocGFkcy0+YWJpZGF0YS5BQkkucGFkX2Nvb2tpZSAhPSBwYWRzLT5jb29raWUpKSB7CisgICAgR1NMaXN0ICpjb2xsZWN0ZWQ7CisKKyAgICAvKiBjbGVhciBsaXN0IGFuZCBzdGF0cyAqLworICAgIGdfc2xpc3RfZm9yZWFjaCAocGFkcy0+ZGF0YSwgKEdGdW5jKSB1bnJlZl9kYXRhLCBOVUxMKTsKKyAgICBnX3NsaXN0X2ZyZWUgKHBhZHMtPmRhdGEpOworICAgIHBhZHMtPmRhdGEgPSBOVUxMOworICAgIHBhZHMtPm51bXBhZHMgPSAwOworICAgIHBhZHMtPnF1ZXVlZHBhZHMgPSAwOworICAgIHBhZHMtPmVvc3BhZHMgPSAwOworCisgICAgLyogbG9vcCBvdmVyIHRoZSBtYXN0ZXIgcGFkIGxpc3QgKi8KKyAgICBjb2xsZWN0ZWQgPSBwYWRzLT5hYmlkYXRhLkFCSS5wYWRfbGlzdDsKKyAgICBmb3IgKDsgY29sbGVjdGVkOyBjb2xsZWN0ZWQgPSBnX3NsaXN0X25leHQgKGNvbGxlY3RlZCkpIHsKKyAgICAgIEdzdENvbGxlY3REYXRhICpkYXRhOworCisgICAgICAvKiB1cGRhdGUgdGhlIHN0YXRzICovCisgICAgICBwYWRzLT5udW1wYWRzKys7CisgICAgICBkYXRhID0gY29sbGVjdGVkLT5kYXRhOworCisgICAgICBpZiAoR19MSUtFTFkgKCFkYXRhLT5hYmlkYXRhLkFCSS5mbHVzaGluZykpIHsKKyAgICAgICAgaWYgKGRhdGEtPmJ1ZmZlcikKKyAgICAgICAgICBwYWRzLT5xdWV1ZWRwYWRzKys7CisgICAgICAgIGlmIChkYXRhLT5hYmlkYXRhLkFCSS5lb3MpCisgICAgICAgICAgcGFkcy0+ZW9zcGFkcysrOworICAgICAgfQorCisgICAgICAvKiBhZGQgdG8gdGhlIGxpc3Qgb2YgcGFkcyB0byBjb2xsZWN0ICovCisgICAgICByZWZfZGF0YSAoZGF0YSk7CisgICAgICBwYWRzLT5kYXRhID0gZ19zbGlzdF9wcmVwZW5kIChwYWRzLT5kYXRhLCBkYXRhKTsKKyAgICB9CisgICAgLyogYW5kIHVwZGF0ZSB0aGUgY29va2llICovCisgICAgcGFkcy0+Y29va2llID0gcGFkcy0+YWJpZGF0YS5BQkkucGFkX2Nvb2tpZTsKKyAgfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2dzdF9jb2xsZWN0X3BhZHNfY2hlY2tfcGFkcyAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzKQoreworICAvKiB0aGUgbWFzdGVyIGxpc3QgYW5kIGNvb2tpZSBhcmUgcHJvdGVjdGVkIHdpdGggdGhlIFBBRF9MT0NLICovCisgIEdTVF9DT0xMRUNUX1BBRFNfUEFEX0xPQ0sgKHBhZHMpOworICBnc3RfY29sbGVjdF9wYWRzX2NoZWNrX3BhZHNfdW5sb2NrZWQgKHBhZHMpOworICBHU1RfQ09MTEVDVF9QQURTX1BBRF9VTkxPQ0sgKHBhZHMpOworfQorCisvKiBjaGVja3MgaWYgYWxsIHRoZSBwYWRzIGFyZSBjb2xsZWN0ZWQgYW5kIGNhbGwgdGhlIGNvbGxlY3RmdW5jdGlvbgorICoKKyAqIFNob3VsZCBiZSBjYWxsZWQgd2l0aCBMT0NLLgorICoKKyAqIFJldHVybnM6IFRoZSAjR3N0Rmxvd1JldHVybiBvZiBjb2xsZWN0aW9uLgorICovCitzdGF0aWMgR3N0Rmxvd1JldHVybgorZ3N0X2NvbGxlY3RfcGFkc19jaGVja19jb2xsZWN0ZWQgKEdzdENvbGxlY3RQYWRzICogcGFkcykKK3sKKyAgR3N0Rmxvd1JldHVybiBmbG93X3JldCA9IEdTVF9GTE9XX09LOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ09MTEVDVF9QQURTIChwYWRzKSwgR1NUX0ZMT1dfRVJST1IpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAocGFkcy0+ZnVuYyAhPSBOVUxMLCBHU1RfRkxPV19OT1RfU1VQUE9SVEVEKTsKKworICAvKiBjaGVjayBmb3IgbmV3IHBhZHMsIHVwZGF0ZSBzdGF0cyBldGMuLiAqLworICBnc3RfY29sbGVjdF9wYWRzX2NoZWNrX3BhZHMgKHBhZHMpOworCisgIGlmIChHX1VOTElLRUxZIChwYWRzLT5lb3NwYWRzID09IHBhZHMtPm51bXBhZHMpKSB7CisgICAgLyogSWYgYWxsIG91ciBwYWRzIGFyZSBFT1MganVzdCBjb2xsZWN0IG9uY2UgdG8gbGV0IHRoZSBlbGVtZW50CisgICAgICogZG8gaXRzIGZpbmFsIEVPUyBoYW5kbGluZy4gKi8KKyAgICBHU1RfREVCVUcgKCJBbGwgYWN0aXZlIHBhZHMgKCVkKSBhcmUgRU9TLCBjYWxsaW5nICVzIiwKKyAgICAgICAgcGFkcy0+bnVtcGFkcywgR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRSAocGFkcy0+ZnVuYykpOworICAgIGZsb3dfcmV0ID0gcGFkcy0+ZnVuYyAocGFkcywgcGFkcy0+dXNlcl9kYXRhKTsKKyAgfSBlbHNlIHsKKyAgICBnYm9vbGVhbiBjb2xsZWN0ZWQgPSBGQUxTRTsKKworICAgIC8qIFdlIGNhbGwgdGhlIGNvbGxlY3RlZCBmdW5jdGlvbiBhcyBsb25nIGFzIG91ciBjb25kaXRpb24gbWF0Y2hlcy4KKyAgICAgKiBGSVhNRTogc2hvdWxkIHdlIGVycm9yIG91dCBpZiB0aGUgY29sbGVjdCBmdW5jdGlvbiBkaWQgbm90IHBvcCBhbnl0aGluZyA/CisgICAgICogd2UgY2FuIGdldCBhIGJ1c3kgbG9vcCBoZXJlIGlmIHRoZSBlbGVtZW50IGRvZXMgbm90IHBvcCBmcm9tIHRoZSBjb2xsZWN0CisgICAgICogZnVuY3Rpb24KKyAgICAgKi8KKyAgICB3aGlsZSAoKChwYWRzLT5xdWV1ZWRwYWRzICsgcGFkcy0+ZW9zcGFkcykgPj0gcGFkcy0+bnVtcGFkcykpIHsKKyAgICAgIEdTVF9ERUJVRyAoIkFsbCBhY3RpdmUgcGFkcyAoJWQgKyAlZCA+PSAlZCkgaGF2ZSBkYXRhLCBjYWxsaW5nICVzIiwKKyAgICAgICAgICBwYWRzLT5xdWV1ZWRwYWRzLCBwYWRzLT5lb3NwYWRzLCBwYWRzLT5udW1wYWRzLAorICAgICAgICAgIEdTVF9ERUJVR19GVU5DUFRSX05BTUUgKHBhZHMtPmZ1bmMpKTsKKyAgICAgIGZsb3dfcmV0ID0gcGFkcy0+ZnVuYyAocGFkcywgcGFkcy0+dXNlcl9kYXRhKTsKKyAgICAgIGNvbGxlY3RlZCA9IFRSVUU7CisKKyAgICAgIC8qIGJyZWFrIG9uIGVycm9yICovCisgICAgICBpZiAoZmxvd19yZXQgIT0gR1NUX0ZMT1dfT0spCisgICAgICAgIGJyZWFrOworICAgICAgLyogRG9uJ3Qga2VlcCBsb29waW5nIGFmdGVyIHRlbGxpbmcgdGhlIGVsZW1lbnQgRU9TIG9yIGZsdXNoaW5nICovCisgICAgICBpZiAocGFkcy0+cXVldWVkcGFkcyA9PSAwKQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKCFjb2xsZWN0ZWQpCisgICAgICBHU1RfREVCVUcgKCJOb3QgYWxsIGFjdGl2ZSBwYWRzICglZCkgaGF2ZSBkYXRhLCBjb250aW51aW5nIiwKKyAgICAgICAgICBwYWRzLT5udW1wYWRzKTsKKyAgfQorICByZXR1cm4gZmxvd19yZXQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2NvbGxlY3RfcGFkc19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KQoreworICBnYm9vbGVhbiByZXM7CisgIEdzdENvbGxlY3REYXRhICpkYXRhOworICBHc3RDb2xsZWN0UGFkcyAqcGFkczsKKworICAvKiBzb21lIG1hZ2ljIHRvIGdldCB0aGUgbWFuYWdpbmcgY29sbGVjdF9wYWRzICovCisgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKKyAgZGF0YSA9IChHc3RDb2xsZWN0RGF0YSAqKSBnc3RfcGFkX2dldF9lbGVtZW50X3ByaXZhdGUgKHBhZCk7CisgIGlmIChHX1VOTElLRUxZIChkYXRhID09IE5VTEwpKQorICAgIGdvdG8gcGFkX3JlbW92ZWQ7CisgIHJlZl9kYXRhIChkYXRhKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisKKyAgcmVzID0gVFJVRTsKKworICBwYWRzID0gZGF0YS0+Y29sbGVjdDsKKworICBHU1RfREVCVUcgKCJHb3QgJXMgZXZlbnQgb24gcGFkICVzOiVzIiwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpLAorICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChkYXRhLT5wYWQpKTsKKworICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKKyAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVEFSVDoKKyAgICB7CisgICAgICAvKiBmb3J3YXJkIGV2ZW50IHRvIHVuYmxvY2sgY2hlY2tfY29sbGVjdGVkICovCisgICAgICBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgZXZlbnQpOworCisgICAgICAvKiBub3cgdW5ibG9jayB0aGUgY2hhaW4gZnVuY3Rpb24uCisgICAgICAgKiBubyBjb25kIHBlciBwYWQsIHNvIHRoZXkgYWxsIHVuYmxvY2ssCisgICAgICAgKiBub24tZmx1c2hpbmcgYmxvY2sgYWdhaW4gKi8KKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAocGFkcyk7CisgICAgICBkYXRhLT5hYmlkYXRhLkFCSS5mbHVzaGluZyA9IFRSVUU7CisgICAgICBnc3RfY29sbGVjdF9wYWRzX2NsZWFyIChwYWRzLCBkYXRhKTsKKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWRzKTsKKworICAgICAgLyogZXZlbnQgYWxyZWFkeSBjbGVhbmVkIHVwIGJ5IGZvcndhcmRpbmcgKi8KKyAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisgICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKKyAgICB7CisgICAgICAvKiBmbHVzaCB0aGUgMSBidWZmZXIgcXVldWUgKi8KKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAocGFkcyk7CisgICAgICBkYXRhLT5hYmlkYXRhLkFCSS5mbHVzaGluZyA9IEZBTFNFOworICAgICAgZ3N0X2NvbGxlY3RfcGFkc19jbGVhciAocGFkcywgZGF0YSk7CisgICAgICAvKiB3ZSBuZWVkIG5ldyBzZWdtZW50IGluZm8gYWZ0ZXIgdGhlIGZsdXNoICovCisgICAgICBnc3Rfc2VnbWVudF9pbml0ICgmZGF0YS0+c2VnbWVudCwgR1NUX0ZPUk1BVF9VTkRFRklORUQpOworICAgICAgZGF0YS0+YWJpZGF0YS5BQkkubmV3X3NlZ21lbnQgPSBGQUxTRTsKKyAgICAgIC8qIGlmIHRoZSBwYWQgd2FzIEVPUywgcmVtb3ZlIHRoZSBFT1MgZmxhZyBhbmQKKyAgICAgICAqIGRlY3JlbWVudCB0aGUgbnVtYmVyIG9mIGVvc3BhZHMgKi8KKyAgICAgIGlmIChHX1VOTElLRUxZIChkYXRhLT5hYmlkYXRhLkFCSS5lb3MgPT0gVFJVRSkpIHsKKyAgICAgICAgcGFkcy0+ZW9zcGFkcy0tOworICAgICAgICBkYXRhLT5hYmlkYXRhLkFCSS5lb3MgPSBGQUxTRTsKKyAgICAgIH0KKworICAgICAgaWYgKCFnc3RfY29sbGVjdF9wYWRzX2lzX2ZsdXNoaW5nIChwYWRzKSkgeworICAgICAgICAvKiBmb3J3YXJkIGV2ZW50IGlmIGFsbCBwYWRzIGFyZSBubyBsb25nZXIgZmx1c2hpbmcgKi8KKyAgICAgICAgR1NUX0RFQlVHICgiTm8gbW9yZSBwYWRzIGFyZSBmbHVzaGluZywgZm9yd2FyZGluZyBGTFVTSF9TVE9QIik7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWRzKTsKKyAgICAgICAgZ290byBmb3J3YXJkOworICAgICAgfQorICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkcyk7CisgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKKyAgICB7CisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHBhZHMpOworICAgICAgLyogaWYgdGhlIHBhZCB3YXMgbm90IEVPUywgbWFrZSBpdCBFT1MgYW5kIHNvIHdlCisgICAgICAgKiBoYXZlIG9uZSBtb3JlIGVvc3BhZCAqLworICAgICAgaWYgKEdfTElLRUxZIChkYXRhLT5hYmlkYXRhLkFCSS5lb3MgPT0gRkFMU0UpKSB7CisgICAgICAgIGRhdGEtPmFiaWRhdGEuQUJJLmVvcyA9IFRSVUU7CisgICAgICAgIHBhZHMtPmVvc3BhZHMrKzsKKyAgICAgIH0KKyAgICAgIC8qIGNoZWNrIGlmIHdlIG5lZWQgY29sbGVjdGluZyBhbnl0aGluZywgd2UgaWdub3JlIHRoZQorICAgICAgICogcmVzdWx0LiAqLworICAgICAgZ3N0X2NvbGxlY3RfcGFkc19jaGVja19jb2xsZWN0ZWQgKHBhZHMpOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZHMpOworCisgICAgICAvKiBXZSBlYXQgdGhpcyBldmVudCwgZWxlbWVudCBzaG91bGQgZG8gc29tZXRoaW5nCisgICAgICAgKiBpbiB0aGUgY29sbGVjdGVkIGNhbGxiYWNrLiAqLworICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6CisgICAgeworICAgICAgZ3N0X2V2ZW50X2NvcHlfc2VnbWVudCAoZXZlbnQsICZkYXRhLT5zZWdtZW50KTsKKworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGF0YS0+cGFkLCAiZ290IG5ld3NlZ21lbnQgJSIgR1NUX1NFR01FTlRfRk9STUFULAorICAgICAgICAgICZkYXRhLT5zZWdtZW50KTsKKyAgICAgIGRhdGEtPmFiaWRhdGEuQUJJLm5ld19zZWdtZW50ID0gVFJVRTsKKworICAgICAgLyogd2UgbXVzdCBub3QgZm9yd2FyZCB0aGlzIGV2ZW50IHNpbmNlIG11bHRpcGxlIHNlZ21lbnRzIHdpbGwgYmUKKyAgICAgICAqIGFjY3VtdWxhdGVkIGFuZCB0aGlzIGlzIGNlcnRhaW5seSBub3Qgd2hhdCB3ZSB3YW50LiAqLworICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgICAgICAvKiBGSVhNRTogY29sbGVjdC1wYWRzIGJhc2VkIGVsZW1lbnRzIG5lZWQgdG8gY3JlYXRlIHRoZWlyIG93biBuZXdzZWdtZW50CisgICAgICAgKiBldmVudCAoYW5kIG9ubHkgb25lIHJlYWxseSkKKyAgICAgICAqIChhKSBtYWtlIHRoZSBzZWdtZW50IHBhcnQgb2YgdGhlIEdzdENvbGxlY3REYXRhIHN0cnVjdHVyZSBvZiBlYWNoIHBhZCwKKyAgICAgICAqIHNvIHlvdSBjYW4ganVzdCBjaGVjayB0aGF0IG9uY2UgeW91IGhhdmUgYSBidWZmZXIgcXVldWVkIG9uIHRoYXQgcGFkLAorICAgICAgICogKGIpIHlvdSBjYW4gb3ZlcnJpZGUgYSBwYWQncyBldmVudCBmdW5jdGlvbiB3aXRoIHlvdXIgb3duLAorICAgICAgICogY2F0Y2ggdGhlIG5ld3NlZ21lbnQgZXZlbnQgYW5kIHRoZW4gcGFzcyBpdCBvbiB0byB0aGUgb3JpZ2luYWwKKyAgICAgICAqIGdzdGNvbGxlY3RwYWRzIGV2ZW50IGZ1bmN0aW9uCisgICAgICAgKiAodGhhdCdzIHdoYXQgYXZpbXV4IGRvZXMgZm9yIHNvbWV0aGluZyBJSVJDKQorICAgICAgICogc2VlICMzNDAwNjAKKyAgICAgICAqLworICAgICAgZ290byBkb25lOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgLyogZm9yd2FyZCBvdGhlciBldmVudHMgKi8KKyAgICAgIGdvdG8gZm9yd2FyZDsKKyAgfQorCitmb3J3YXJkOgorICBHU1RfREVCVUdfT0JKRUNUIChwYWRzLCAiZm9yd2FyZCB1bmhhbmRsZWQgZXZlbnQ6ICVzIiwKKyAgICAgIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7CisgIHJlcyA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBldmVudCk7CisKK2RvbmU6CisgIHVucmVmX2RhdGEgKGRhdGEpOworICByZXR1cm4gcmVzOworCisgIC8qIEVSUk9SUyAqLworcGFkX3JlbW92ZWQ6CisgIHsKKyAgICBHU1RfREVCVUcgKCIlcyBnb3QgcmVtb3ZlZCBmcm9tIGNvbGxlY3RwYWRzIiwgR1NUX09CSkVDVF9OQU1FIChwYWQpKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworLyogRm9yIGVhY2ggYnVmZmVyIHdlIHJlY2VpdmUgd2UgY2hlY2sgaWYgb3VyIGNvbGxlY3RlZCBjb25kaXRpb24gaXMgcmVhY2hlZAorICogYW5kIGlmIHNvIHdlIGNhbGwgdGhlIGNvbGxlY3RlZCBmdW5jdGlvbi4gV2hlbiB0aGlzIGlzIGRvbmUgd2UgY2hlY2sgaWYKKyAqIGRhdGEgaGFzIGJlZW4gdW5xdWV1ZWQuIElmIGRhdGEgaXMgc3RpbGwgcXVldWVkIHdlIHdhaXQgaG9sZGluZyB0aGUgc3RyZWFtCisgKiBsb2NrIHRvIG1ha2Ugc3VyZSBubyBFT1MgZXZlbnQgY2FuIGhhcHBlbiB3aGlsZSB3ZSBhcmUgcmVhZHkgdG8gYmUKKyAqIGNvbGxlY3RlZAorICovCitzdGF0aWMgR3N0Rmxvd1JldHVybgorZ3N0X2NvbGxlY3RfcGFkc19jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RCdWZmZXIgKiBidWZmZXIpCit7CisgIEdzdENvbGxlY3REYXRhICpkYXRhOworICBHc3RDb2xsZWN0UGFkcyAqcGFkczsKKyAgR3N0Q29sbGVjdFBhZHNQcml2YXRlICpwcml2OworICBHc3RGbG93UmV0dXJuIHJldDsKKworICBHU1RfREVCVUcgKCJHb3QgYnVmZmVyIGZvciBwYWQgJXM6JXMiLCBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOworCisgIC8qIHNvbWUgbWFnaWMgdG8gZ2V0IHRoZSBtYW5hZ2luZyBjb2xsZWN0X3BhZHMgKi8KKyAgR1NUX09CSkVDVF9MT0NLIChwYWQpOworICBkYXRhID0gKEdzdENvbGxlY3REYXRhICopIGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkKTsKKyAgaWYgKEdfVU5MSUtFTFkgKGRhdGEgPT0gTlVMTCkpCisgICAgZ290byBub19kYXRhOworICByZWZfZGF0YSAoZGF0YSk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworCisgIHBhZHMgPSBkYXRhLT5jb2xsZWN0OworICBwcml2ID0gcGFkcy0+YWJpZGF0YS5BQkkucHJpdjsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHBhZHMpOworICAvKiBpZiBub3Qgc3RhcnRlZCwgYmFpbCBvdXQgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKCFwYWRzLT5zdGFydGVkKSkKKyAgICBnb3RvIG5vdF9zdGFydGVkOworICAvKiBjaGVjayBpZiB0aGlzIHBhZCBpcyBmbHVzaGluZyAqLworICBpZiAoR19VTkxJS0VMWSAoZGF0YS0+YWJpZGF0YS5BQkkuZmx1c2hpbmcpKQorICAgIGdvdG8gZmx1c2hpbmc7CisgIC8qIHBhZCB3YXMgRU9TLCB3ZSBjYW4gcmVmdXNlIHRoaXMgZGF0YSAqLworICBpZiAoR19VTkxJS0VMWSAoZGF0YS0+YWJpZGF0YS5BQkkuZW9zKSkKKyAgICBnb3RvIHVuZXhwZWN0ZWQ7CisKKyAgLyogc2VlIGlmIHdlIG5lZWQgdG8gY2xpcCAqLworICBpZiAocHJpdi0+Y2xpcGZ1bmMpIHsKKyAgICBidWZmZXIgPSBwcml2LT5jbGlwZnVuYyAocGFkcywgZGF0YSwgYnVmZmVyLCBwcml2LT5jbGlwZnVuY191c2VyX2RhdGEpOworCisgICAgaWYgKEdfVU5MSUtFTFkgKGJ1ZmZlciA9PSBOVUxMKSkKKyAgICAgIGdvdG8gY2xpcHBlZDsKKyAgfQorCisgIEdTVF9ERUJVRyAoIlF1ZXVpbmcgYnVmZmVyICVwIGZvciBwYWQgJXM6JXMiLCBidWZmZXIsCisgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOworCisgIC8qIE9uZSBtb3JlIHBhZCBoYXMgZGF0YSBxdWV1ZWQgKi8KKyAgcGFkcy0+cXVldWVkcGFkcysrOworICAvKiB0YWtlIG93bmVyc2hpcCBvZiB0aGUgYnVmZmVyICovCisgIGlmIChkYXRhLT5idWZmZXIpCisgICAgZ3N0X2J1ZmZlcl91bnJlZiAoZGF0YS0+YnVmZmVyKTsKKyAgZGF0YS0+YnVmZmVyID0gYnVmZmVyOworICBidWZmZXIgPSBOVUxMOworCisgIC8qIHVwZGF0ZSBzZWdtZW50IGxhc3QgcG9zaXRpb24gaWYgaW4gVElNRSAqLworICBpZiAoR19MSUtFTFkgKGRhdGEtPnNlZ21lbnQuZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSkpIHsKKyAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGRhdGEtPmJ1ZmZlcik7CisKKyAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHRpbWVzdGFtcCkpCisgICAgICBkYXRhLT5zZWdtZW50LnBvc2l0aW9uID0gdGltZXN0YW1wOworICB9CisKKyAgLyogV2hpbGUgd2UgaGF2ZSBkYXRhIHF1ZXVlZCBvbiB0aGlzIHBhZCB0cnkgdG8gY29sbGVjdCBzdHVmZiAqLworICBkbyB7CisgICAgR1NUX0RFQlVHICgiUGFkICVzOiVzIGNoZWNraW5nIiwgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKKyAgICAvKiBDaGVjayBpZiBvdXIgY29sbGVjdGVkIGNvbmRpdGlvbiBpcyBtYXRjaGVkIGFuZCBjYWxsIHRoZSBjb2xsZWN0ZWQgZnVuY3Rpb24KKyAgICAgKiBpZiBpdCBpcyAqLworICAgIHJldCA9IGdzdF9jb2xsZWN0X3BhZHNfY2hlY2tfY29sbGVjdGVkIChwYWRzKTsKKyAgICAvKiB3aGVuIGFuIGVycm9yIG9jY3Vycywgd2Ugd2FudCB0byByZXBvcnQgdGhpcyBiYWNrIHRvIHRoZSBjYWxsZXIgQVNBUAorICAgICAqIHdpdGhvdXQgaGF2aW5nIHRvIGJsb2NrIGlmIHRoZSBidWZmZXIgd2FzIG5vdCBwb3BwZWQgKi8KKyAgICBpZiAoR19VTkxJS0VMWSAocmV0ICE9IEdTVF9GTE9XX09LKSkKKyAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAvKiBkYXRhIHdhcyBjb25zdW1lZCwgd2UgY2FuIGV4aXQgYW5kIGFjY2VwdCBuZXcgZGF0YSAqLworICAgIGlmIChkYXRhLT5idWZmZXIgPT0gTlVMTCkKKyAgICAgIGJyZWFrOworCisgICAgLyogQ2hlY2sgaWYgd2UgZ290IHJlbW92ZWQgaW4gdGhlIG1lYW4gdGltZSwgRklYTUUsIHRoaXMgaXMgcmFjeS4KKyAgICAgKiBCZXR3ZWVuIHRoaXMgY2hlY2sgYW5kIHRoZSBfV0FJVCwgdGhlIHBhZCBjb3VsZCBiZSByZW1vdmVkIHdoaWNoIHdpbGwKKyAgICAgKiBtYWtlcyB1cyBoYW5nIGluIHRoZSBfV0FJVC4gKi8KKyAgICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7CisgICAgaWYgKEdfVU5MSUtFTFkgKGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkKSA9PSBOVUxMKSkKKyAgICAgIGdvdG8gcGFkX3JlbW92ZWQ7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisKKyAgICBHU1RfREVCVUcgKCJQYWQgJXM6JXMgaGFzIGEgYnVmZmVyIHF1ZXVlZCwgd2FpdGluZyIsCisgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7CisKKyAgICAvKiB3YWl0IHRvIGJlIGNvbGxlY3RlZCwgdGhpcyBtdXN0IGhhcHBlbiBmcm9tIGFub3RoZXIgdGhyZWFkIHRyaWdnZXJlZAorICAgICAqIGJ5IHRoZSBfY2hhaW4gZnVuY3Rpb24gb2YgYW5vdGhlciBwYWQuIFdlIHJlbGVhc2UgdGhlIGxvY2sgc28gd2UKKyAgICAgKiBjYW4gZ2V0IHN0b3BwZWQgb3IgZmx1c2hlZCBhcyB3ZWxsLiBXZSBjYW4gaG93ZXZlciBub3QgZ2V0IEVPUworICAgICAqIGJlY2F1c2Ugd2Ugc3RpbGwgaG9sZCB0aGUgU1RSRUFNX0xPQ0suCisgICAgICovCisgICAgR1NUX0NPTExFQ1RfUEFEU19XQUlUIChwYWRzKTsKKworICAgIEdTVF9ERUJVRyAoIlBhZCAlczolcyByZXN1bWluZyIsIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7CisKKyAgICAvKiBhZnRlciBhIHNpZ25hbCwgd2UgY291bGQgYmUgc3RvcHBlZCAqLworICAgIGlmIChHX1VOTElLRUxZICghcGFkcy0+c3RhcnRlZCkpCisgICAgICBnb3RvIG5vdF9zdGFydGVkOworICAgIC8qIGNoZWNrIGlmIHRoaXMgcGFkIGlzIGZsdXNoaW5nICovCisgICAgaWYgKEdfVU5MSUtFTFkgKGRhdGEtPmFiaWRhdGEuQUJJLmZsdXNoaW5nKSkKKyAgICAgIGdvdG8gZmx1c2hpbmc7CisgIH0KKyAgd2hpbGUgKGRhdGEtPmJ1ZmZlciAhPSBOVUxMKTsKKwordW5sb2NrX2RvbmU6CisgIEdTVF9ERUJVRyAoIlBhZCAlczolcyBkb25lIiwgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZHMpOworICB1bnJlZl9kYXRhIChkYXRhKTsKKyAgaWYgKGJ1ZmZlcikKKyAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworICByZXR1cm4gcmV0OworCitwYWRfcmVtb3ZlZDoKKyAgeworICAgIEdTVF9XQVJOSU5HICgiJXMgZ290IHJlbW92ZWQgZnJvbSBjb2xsZWN0cGFkcyIsIEdTVF9PQkpFQ1RfTkFNRSAocGFkKSk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisgICAgcmV0ID0gR1NUX0ZMT1dfTk9UX0xJTktFRDsKKyAgICBnb3RvIHVubG9ja19kb25lOworICB9CisgIC8qIEVSUk9SUyAqLworbm9fZGF0YToKKyAgeworICAgIEdTVF9ERUJVRyAoIiVzIGdvdCByZW1vdmVkIGZyb20gY29sbGVjdHBhZHMiLCBHU1RfT0JKRUNUX05BTUUgKHBhZCkpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7CisgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9MSU5LRUQ7CisgIH0KK25vdF9zdGFydGVkOgorICB7CisgICAgR1NUX0RFQlVHICgibm90IHN0YXJ0ZWQiKTsKKyAgICBnc3RfY29sbGVjdF9wYWRzX2NsZWFyIChwYWRzLCBkYXRhKTsKKyAgICByZXQgPSBHU1RfRkxPV19XUk9OR19TVEFURTsKKyAgICBnb3RvIHVubG9ja19kb25lOworICB9CitmbHVzaGluZzoKKyAgeworICAgIEdTVF9ERUJVRyAoInBhZCAlczolcyBpcyBmbHVzaGluZyIsIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7CisgICAgZ3N0X2NvbGxlY3RfcGFkc19jbGVhciAocGFkcywgZGF0YSk7CisgICAgcmV0ID0gR1NUX0ZMT1dfV1JPTkdfU1RBVEU7CisgICAgZ290byB1bmxvY2tfZG9uZTsKKyAgfQordW5leHBlY3RlZDoKKyAgeworICAgIC8qIHdlIHNob3VsZCBub3QgcG9zdCBhbiBlcnJvciBmb3IgdGhpcywganVzdCBpbmZvcm0gdXBzdHJlYW0gdGhhdAorICAgICAqIHdlIGRvbid0IGV4cGVjdCBhbnl0aGluZyBhbnltb3JlICovCisgICAgR1NUX0RFQlVHICgicGFkICVzOiVzIGlzIGVvcyIsIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7CisgICAgcmV0ID0gR1NUX0ZMT1dfVU5FWFBFQ1RFRDsKKyAgICBnb3RvIHVubG9ja19kb25lOworICB9CitjbGlwcGVkOgorICB7CisgICAgR1NUX0RFQlVHICgiY2xpcHBlZCBidWZmZXIgb24gcGFkICVzOiVzIiwgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKKyAgICByZXQgPSBHU1RfRkxPV19PSzsKKyAgICBnb3RvIHVubG9ja19kb25lOworICB9CitlcnJvcjoKKyAgeworICAgIC8qIHdlIHByaW50IHRoZSBlcnJvciwgdGhlIGVsZW1lbnQgc2hvdWxkIHBvc3QgYSByZWFzb25hYmxlIGVycm9yCisgICAgICogbWVzc2FnZSBmb3IgZmF0YWwgZXJyb3JzICovCisgICAgR1NUX0RFQlVHICgiY29sbGVjdCBmYWlsZWQsIHJlYXNvbiAlZCAoJXMpIiwgcmV0LCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7CisgICAgZ3N0X2NvbGxlY3RfcGFkc19jbGVhciAocGFkcywgZGF0YSk7CisgICAgZ290byB1bmxvY2tfZG9uZTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oIGIvbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNjc2MWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmgKQEAgLTAsMCArMSwyMjEgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+CisgKgorICogZ3N0Y29sbGVjdF9wYWRzLmg6CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0dTVF9DT0xMRUNUX1BBRFNfSF9fCisjZGVmaW5lIF9fR1NUX0NPTExFQ1RfUEFEU19IX18KKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEdTVF9UWVBFX0NPTExFQ1RfUEFEUyAgICAgICAgICAgIChnc3RfY29sbGVjdF9wYWRzX2dldF90eXBlKCkpCisjZGVmaW5lIEdTVF9DT0xMRUNUX1BBRFMob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9DT0xMRUNUX1BBRFMsR3N0Q29sbGVjdFBhZHMpKQorI2RlZmluZSBHU1RfQ09MTEVDVF9QQURTX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9DT0xMRUNUX1BBRFMsR3N0Q29sbGVjdFBhZHNDbGFzcykpCisjZGVmaW5lIEdTVF9DT0xMRUNUX1BBRFNfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSxHU1RfVFlQRV9DT0xMRUNUX1BBRFMsR3N0Q29sbGVjdFBhZHNDbGFzcykpCisjZGVmaW5lIEdTVF9JU19DT0xMRUNUX1BBRFMob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9DT0xMRUNUX1BBRFMpKQorI2RlZmluZSBHU1RfSVNfQ09MTEVDVF9QQURTX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9DT0xMRUNUX1BBRFMpKQorCit0eXBlZGVmIHN0cnVjdCBfR3N0Q29sbGVjdERhdGEgR3N0Q29sbGVjdERhdGE7Cit0eXBlZGVmIHN0cnVjdCBfR3N0Q29sbGVjdFBhZHMgR3N0Q29sbGVjdFBhZHM7Cit0eXBlZGVmIHN0cnVjdCBfR3N0Q29sbGVjdFBhZHNQcml2YXRlIEdzdENvbGxlY3RQYWRzUHJpdmF0ZTsKK3R5cGVkZWYgc3RydWN0IF9Hc3RDb2xsZWN0UGFkc0NsYXNzIEdzdENvbGxlY3RQYWRzQ2xhc3M7CisKKy8qKgorICogR3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5OgorICogQGRhdGE6IHRoZSAjR3N0Q29sbGVjdERhdGEgdGhhdCB3aWxsIGJlIGZyZWVkCisgKgorICogQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlICNHc3RDb2xsZWN0RGF0YSB3aWxsIGJlIGZyZWVkLgorICogSXQgaXMgcGFzc2VkIHRoZSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgYW5kIHNob3VsZCBmcmVlIGFueSBjdXN0b20KKyAqIG1lbW9yeSBhbmQgcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgaXQuCisgKgorICogU2luY2U6IDAuMTAuMTIKKyAqLwordHlwZWRlZiB2b2lkICgqR3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5KSAoR3N0Q29sbGVjdERhdGEgKmRhdGEpOworCisvKioKKyAqIEdzdENvbGxlY3RQYWRzQ2xpcEZ1bmN0aW9uOgorICogQHBhZHM6IGEgI0dzdENvbGxlY3RQYWRzIAorICogQGRhdGE6IGEgI0dzdENvbGxlY3REYXRhIAorICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyIAorICogQHVzZXJfZGF0YTogdXNlciBkYXRhIAorICoKKyAqIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIEBidWZmZXIgaXMgcmVjZWl2ZWQgb24gdGhlIHBhZCBtYW5hZ2VkCisgKiBieSBAZGF0YSBpbiB0aGUgY29sbGVjcGFkIG9iamVjdCBAcGFkcy4KKyAqCisgKiBUaGUgZnVuY3Rpb24gc2hvdWxkIHVzZSB0aGUgc2VnbWVudCBvZiBAZGF0YSBhbmQgdGhlIG5lZ290aWF0ZWQgbWVkaWEgdHlwZSBvbgorICogdGhlIHBhZCB0byBwZXJmb3JtIGNsaXBwaW5nIG9mIEBidWZmZXIuIAorICoKKyAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgb3duZXJzaGlwIG9mIEBidWZmZXIuCisgKgorICogUmV0dXJuczogYSAjR3N0QnVmZmVyIHRoYXQgY29udGFpbnMgdGhlIGNsaXBwZWQgZGF0YSBvZiBAYnVmZmVyIG9yIE5VTEwgd2hlbgorICogdGhlIGJ1ZmZlciBoYXMgYmVlbiBjbGlwcGVkIGNvbXBsZXRlbHkuCisgKgorICogU2luY2U6IDAuMTAuMjYKKyAqLwordHlwZWRlZiBHc3RCdWZmZXIgKiAoKkdzdENvbGxlY3RQYWRzQ2xpcEZ1bmN0aW9uKSAoR3N0Q29sbGVjdFBhZHMgKnBhZHMsIEdzdENvbGxlY3REYXRhICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyICpidWZmZXIsIGdwb2ludGVyIHVzZXJfZGF0YSk7CisKKy8qKgorICogR3N0Q29sbGVjdERhdGE6CisgKiBAY29sbGVjdDogb3duZXIgI0dzdENvbGxlY3RQYWRzCisgKiBAcGFkOiAjR3N0UGFkIG1hbmFnZWQgYnkgdGhpcyBkYXRhCisgKiBAYnVmZmVyOiBjdXJyZW50bHkgcXVldWVkIGJ1ZmZlci4KKyAqIEBwb3M6IHBvc2l0aW9uIGluIHRoZSBidWZmZXIKKyAqIEBzZWdtZW50OiBsYXN0IHNlZ21lbnQgcmVjZWl2ZWQuCisgKgorICogU3RydWN0dXJlIHVzZWQgYnkgdGhlIGNvbGxlY3RfcGFkcy4KKyAqLworc3RydWN0IF9Hc3RDb2xsZWN0RGF0YQoreworICAvKiB3aXRoIExPQ0sgb2YgQGNvbGxlY3QgKi8KKyAgR3N0Q29sbGVjdFBhZHMgICAgICAgICpjb2xsZWN0OworICBHc3RQYWQgICAgICAgICAgICAgICAgKnBhZDsKKyAgR3N0QnVmZmVyICAgICAgICAgICAgICpidWZmZXI7CisgIGd1aW50ICAgICAgICAgICAgICAgICAgcG9zOworICBHc3RTZWdtZW50ICAgICAgICAgICAgIHNlZ21lbnQ7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIHVuaW9uIHsKKyAgICBzdHJ1Y3QgeworICAgICAgZ2Jvb2xlYW4gICAgICAgICAgIGZsdXNoaW5nOworICAgICAgZ2Jvb2xlYW4gICAgICAgICAgIG5ld19zZWdtZW50OworICAgICAgZ2Jvb2xlYW4gICAgICAgICAgIGVvczsKKyAgICAgIGdpbnQgICAgICAgICAgICAgICByZWZjb3VudDsKKyAgICB9IEFCSTsKKyAgICAvKiBhZGRpbmcgKyAwIHRvIG1hcmsgQUJJIGNoYW5nZSB0byBiZSB1bmRvbmUgbGF0ZXIgKi8KKyAgICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HICsgMF07CisgIH0gYWJpZGF0YTsKK307CisKKy8qKgorICogR3N0Q29sbGVjdFBhZHNGdW5jdGlvbjoKKyAqIEBwYWRzOiB0aGUgI0dzdENvbGxlY3RQYWRzIHRoYXQgdHJpZ2dlcmVkIHRoZSBjYWxsYmFjaworICogQHVzZXJfZGF0YTogdXNlciBkYXRhIHBhc3NlZCB0byBnc3RfY29sbGVjdF9wYWRzX3NldF9mdW5jdGlvbigpCisgKgorICogQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gYWxsIHBhZHMgaGF2ZSByZWNlaXZlZCBkYXRhLgorICoKKyAqIFJldHVybnM6ICNHU1RfRkxPV19PSyBmb3Igc3VjY2VzcworICovCit0eXBlZGVmIEdzdEZsb3dSZXR1cm4gKCpHc3RDb2xsZWN0UGFkc0Z1bmN0aW9uKSAoR3N0Q29sbGVjdFBhZHMgKnBhZHMsIGdwb2ludGVyIHVzZXJfZGF0YSk7CisKKyNkZWZpbmUgR1NUX0NPTExFQ1RfUEFEU19HRVRfUEFEX0xPQ0socGFkcykgKCgoR3N0Q29sbGVjdFBhZHMgKilwYWRzKS0+YWJpZGF0YS5BQkkucGFkX2xvY2spCisjZGVmaW5lIEdTVF9DT0xMRUNUX1BBRFNfUEFEX0xPQ0socGFkcykgICAgIChnX211dGV4X2xvY2soR1NUX0NPTExFQ1RfUEFEU19HRVRfUEFEX0xPQ0sgKHBhZHMpKSkKKyNkZWZpbmUgR1NUX0NPTExFQ1RfUEFEU19QQURfVU5MT0NLKHBhZHMpICAgKGdfbXV0ZXhfdW5sb2NrKEdTVF9DT0xMRUNUX1BBRFNfR0VUX1BBRF9MT0NLIChwYWRzKSkpCisKKyNkZWZpbmUgR1NUX0NPTExFQ1RfUEFEU19HRVRfQ09ORChwYWRzKSAoKChHc3RDb2xsZWN0UGFkcyAqKXBhZHMpLT5jb25kKQorI2RlZmluZSBHU1RfQ09MTEVDVF9QQURTX1dBSVQocGFkcykgICAgIChnX2NvbmRfd2FpdCAoR1NUX0NPTExFQ1RfUEFEU19HRVRfQ09ORCAocGFkcyksIEdTVF9PQkpFQ1RfR0VUX0xPQ0sgKHBhZHMpKSkKKyNkZWZpbmUgR1NUX0NPTExFQ1RfUEFEU19TSUdOQUwocGFkcykgICAoZ19jb25kX3NpZ25hbCAoR1NUX0NPTExFQ1RfUEFEU19HRVRfQ09ORCAocGFkcykpKQorI2RlZmluZSBHU1RfQ09MTEVDVF9QQURTX0JST0FEQ0FTVChwYWRzKShnX2NvbmRfYnJvYWRjYXN0IChHU1RfQ09MTEVDVF9QQURTX0dFVF9DT05EIChwYWRzKSkpCisKKy8qKgorICogR3N0Q29sbGVjdFBhZHM6CisgKiBAZGF0YTogI0dMaXN0IG9mICNHc3RDb2xsZWN0RGF0YSBtYW5hZ2VkIGJ5IHRoaXMgI0dzdENvbGxlY3RQYWRzLgorICoKKyAqIENvbGxlY3RwYWRzIG9iamVjdC4KKyAqIE5vdGUgdGhhdCBAZGF0YSBpcyBvbmx5IHJlbGlhYmxlIGZvciBpdGVyYXRpbmcgdGhlIGxpc3Qgb2YgI0dzdENvbGxlY3REYXRhCisgKiB3aGVuIGluc2lkZSB0aGUgI0dzdENvbGxlY3RQYWRzRnVuY3Rpb24gY2FsbGJhY2suCisgKi8KK3N0cnVjdCBfR3N0Q29sbGVjdFBhZHMgeworICBHc3RPYmplY3QgICAgICBvYmplY3Q7CisKKyAgLyo8IHB1YmxpYyA+Ki8gLyogd2l0aCBMT0NLICovCisgIEdTTGlzdCAgICAgICAgKmRhdGE7ICAgICAgICAgICAgICAgICAgLyogbGlzdCBvZiBDb2xsZWN0RGF0YSBpdGVtcyAqLworCisgIC8qPCBwcml2YXRlID4qLworICBndWludDMyICAgICAgICBjb29raWU7ICAgICAgICAgICAgICAgIC8qIEBkYXRhIGxpc3QgY29va2llICovCisKKyAgLyogd2l0aCBMT0NLICovCisgIEdDb25kICAgICAgICAgKmNvbmQ7ICAgICAgICAgICAgICAgICAgLyogdG8gc2lnbmFsIHJlbW92YWwgb2YgZGF0YSAqLworCisgIEdzdENvbGxlY3RQYWRzRnVuY3Rpb24gZnVuYzsgICAgICAgICAgLyogZnVuY3Rpb24gYW5kIHVzZXJfZGF0YSBmb3IgY2FsbGJhY2sgKi8KKyAgZ3BvaW50ZXIgICAgICAgdXNlcl9kYXRhOworCisgIGd1aW50ICAgICAgICAgIG51bXBhZHM7ICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHBhZHMgaW4gQGRhdGEgKi8KKyAgZ3VpbnQgICAgICAgICAgcXVldWVkcGFkczsgICAgICAgICAgICAvKiBudW1iZXIgb2YgcGFkcyB3aXRoIGEgYnVmZmVyICovCisgIGd1aW50ICAgICAgICAgIGVvc3BhZHM7ICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHBhZHMgdGhhdCBhcmUgRU9TICovCisKKyAgLyogd2l0aCBMT0NLIGFuZCBQQURfTE9DSyovCisgIGdib29sZWFuICAgICAgIHN0YXJ0ZWQ7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIHVuaW9uIHsKKyAgICBzdHJ1Y3QgeworICAgICAgLyogc2luY2UgMC4xMC42ICovIC8qIHdpdGggUEFEX0xPQ0sgKi8KKyAgICAgIEdNdXRleCAgICAqcGFkX2xvY2s7ICAgICAgICAgICAgICAvKiB1c2VkIHRvIHNlcmlhbGl6ZSBhZGQvcmVtb3ZlICovCisgICAgICBHU0xpc3QgICAgKnBhZF9saXN0OyAgICAgICAgICAgICAgLyogdXBkYXRlZCBwYWQgbGlzdCAqLworICAgICAgZ3VpbnQzMiAgICBwYWRfY29va2llOyAgICAgICAgICAgIC8qIHVwZGF0ZWQgY29va2llICovCisgICAgICBHc3RDb2xsZWN0UGFkc1ByaXZhdGUgICpwcml2OworICAgIH0gQUJJOworICAgIC8qIGFkZGluZyArIDAgdG8gbWFyayBBQkkgY2hhbmdlIHRvIGJlIHVuZG9uZSBsYXRlciAqLworICAgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkcgKyAwXTsKKyAgfSBhYmlkYXRhOworfTsKKworc3RydWN0IF9Hc3RDb2xsZWN0UGFkc0NsYXNzIHsKKyAgR3N0T2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworCisgIC8qPCBwcml2YXRlID4qLworICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKK307CisKK0dUeXBlIGdzdF9jb2xsZWN0X3BhZHNfZ2V0X3R5cGUodm9pZCk7CisKKy8qIGNyZWF0aW5nIHRoZSBvYmplY3QgKi8KK0dzdENvbGxlY3RQYWRzKiBnc3RfY29sbGVjdF9wYWRzX25ldyAgICAgICAgICAgICh2b2lkKTsKKworLyogc2V0IHRoZSBjYWxsYmFja3MgKi8KK3ZvaWQgICAgICAgICAgICBnc3RfY29sbGVjdF9wYWRzX3NldF9mdW5jdGlvbiAgICAgIChHc3RDb2xsZWN0UGFkcyAqcGFkcywgR3N0Q29sbGVjdFBhZHNGdW5jdGlvbiBmdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7Cit2b2lkICAgICAgICAgICAgZ3N0X2NvbGxlY3RfcGFkc19zZXRfY2xpcF9mdW5jdGlvbiAoR3N0Q29sbGVjdFBhZHMgKnBhZHMsIEdzdENvbGxlY3RQYWRzQ2xpcEZ1bmN0aW9uIGNsaXBmdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7CisKKy8qIHBhZCBtYW5hZ2VtZW50ICovCitHc3RDb2xsZWN0RGF0YSogZ3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkICAgICAgICAoR3N0Q29sbGVjdFBhZHMgKnBhZHMsIEdzdFBhZCAqcGFkLCBndWludCBzaXplKTsKK0dzdENvbGxlY3REYXRhKiBnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWRfZnVsbCAgIChHc3RDb2xsZWN0UGFkcyAqcGFkcywgR3N0UGFkICpwYWQsIGd1aW50IHNpemUsIEdzdENvbGxlY3REYXRhRGVzdHJveU5vdGlmeSBkZXN0cm95X25vdGlmeSk7CisKKworZ2Jvb2xlYW4gICAgICAgIGdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZCAgICAgKEdzdENvbGxlY3RQYWRzICpwYWRzLCBHc3RQYWQgKnBhZCk7CitnYm9vbGVhbiAgICAgICAgZ3N0X2NvbGxlY3RfcGFkc19pc19hY3RpdmUgICAgICAoR3N0Q29sbGVjdFBhZHMgKnBhZHMsIEdzdFBhZCAqcGFkKTsKKworLyogc3RhcnQvc3RvcCBjb2xsZWN0aW9uICovCitHc3RGbG93UmV0dXJuICAgZ3N0X2NvbGxlY3RfcGFkc19jb2xsZWN0ICAgICAgICAoR3N0Q29sbGVjdFBhZHMgKnBhZHMpOworR3N0Rmxvd1JldHVybiAgIGdzdF9jb2xsZWN0X3BhZHNfY29sbGVjdF9yYW5nZSAgKEdzdENvbGxlY3RQYWRzICpwYWRzLCBndWludDY0IG9mZnNldCwgZ3VpbnQgbGVuZ3RoKTsKKwordm9pZCAgICAgICAgICAgIGdzdF9jb2xsZWN0X3BhZHNfc3RhcnQgICAgICAgICAgKEdzdENvbGxlY3RQYWRzICpwYWRzKTsKK3ZvaWQgICAgICAgICAgICBnc3RfY29sbGVjdF9wYWRzX3N0b3AgICAgICAgICAgIChHc3RDb2xsZWN0UGFkcyAqcGFkcyk7Cit2b2lkICAgICAgICAgICAgZ3N0X2NvbGxlY3RfcGFkc19zZXRfZmx1c2hpbmcgICAoR3N0Q29sbGVjdFBhZHMgKnBhZHMsIGdib29sZWFuIGZsdXNoaW5nKTsKKworLyogZ2V0IGNvbGxlY3RlZCBidWZmZXJzICovCitHc3RCdWZmZXIqICAgICAgZ3N0X2NvbGxlY3RfcGFkc19wZWVrICAgICAgICAgICAoR3N0Q29sbGVjdFBhZHMgKnBhZHMsIEdzdENvbGxlY3REYXRhICpkYXRhKTsKK0dzdEJ1ZmZlciogICAgICBnc3RfY29sbGVjdF9wYWRzX3BvcCAgICAgICAgICAgIChHc3RDb2xsZWN0UGFkcyAqcGFkcywgR3N0Q29sbGVjdERhdGEgKmRhdGEpOworCisvKiBnZXQgY29sbGVjdGVkIGJ5dGVzICovCitndWludCAgICAgICAgICAgZ3N0X2NvbGxlY3RfcGFkc19hdmFpbGFibGUgICAgICAoR3N0Q29sbGVjdFBhZHMgKnBhZHMpOworR3N0QnVmZmVyICogICAgIGdzdF9jb2xsZWN0X3BhZHNfcmVhZF9idWZmZXIgICAgKEdzdENvbGxlY3RQYWRzICogcGFkcywgR3N0Q29sbGVjdERhdGEgKiBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IHNpemUpOworR3N0QnVmZmVyICogICAgIGdzdF9jb2xsZWN0X3BhZHNfdGFrZV9idWZmZXIgICAgKEdzdENvbGxlY3RQYWRzICogcGFkcywgR3N0Q29sbGVjdERhdGEgKiBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IHNpemUpOworZ3VpbnQgICAgICAgICAgIGdzdF9jb2xsZWN0X3BhZHNfZmx1c2ggICAgICAgICAgKEdzdENvbGxlY3RQYWRzICpwYWRzLCBHc3RDb2xsZWN0RGF0YSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBzaXplKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fR1NUX0NPTExFQ1RfUEFEU19IX18gKi8KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmMgYi9saWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZGFkYjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5jCkBAIC0wLDAgKzEsNjYwIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNiBFZHdhcmQgSGVydmV5IDxlZHdhcmRAZmx1ZW5kby5jb20+CisgKgorICogZ3N0ZGF0YXF1ZXVlLmM6CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoqCisgKiBTRUNUSU9OOmdzdGRhdGFxdWV1ZQorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBUaHJlYWRzYWZlIHF1ZXVlaW5nIG9iamVjdAorICoKKyAqICNHc3REYXRhUXVldWUgaXMgYW4gb2JqZWN0IHRoYXQgaGFuZGxlcyB0aHJlYWRzYWZlIHF1ZXVlaW5nIG9mIG9iamVjdHMuIEl0CisgKiBhbHNvIHByb3ZpZGVzIHNpemUtcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBUaGlzIG9iamVjdCBzaG91bGQgYmUgdXNlZCBmb3IKKyAqIGFueSAjR3N0RWxlbWVudCB0aGF0IHdpc2hlcyB0byBwcm92aWRlIHNvbWUgc29ydCBvZiBxdWV1ZWluZyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFNpbmNlOiAwLjEwLjExCisgKi8KKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlICJzdHJpbmcuaCIKKyNpbmNsdWRlICJnc3RkYXRhcXVldWUuaCIKKworR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZGF0YV9xdWV1ZV9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAoZGF0YV9xdWV1ZV9kZWJ1ZykKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGRhdGFfcXVldWVfZGF0YWZsb3cpOworCisKKy8qIFF1ZXVlIHNpZ25hbHMgYW5kIGFyZ3MgKi8KK2VudW0KK3sKKyAgU0lHTkFMX0VNUFRZLAorICBTSUdOQUxfRlVMTCwKKyAgTEFTVF9TSUdOQUwKK307CisKK2VudW0KK3sKKyAgQVJHXzAsCisgIEFSR19DVVJfTEVWRUxfVklTSUJMRSwKKyAgQVJHX0NVUl9MRVZFTF9CWVRFUywKKyAgQVJHX0NVUl9MRVZFTF9USU1FCisgICAgICAvKiBGSUxMIE1FICovCit9OworCisjZGVmaW5lIEdTVF9EQVRBX1FVRVVFX01VVEVYX0xPQ0socSkgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICBcCisgICAgR1NUX0NBVF9MT0cgKGRhdGFfcXVldWVfZGF0YWZsb3csICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAibG9ja2luZyBxbG9jayBmcm9tIHRocmVhZCAlcCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBnX3RocmVhZF9zZWxmICgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGdfbXV0ZXhfbG9jayAocS0+cWxvY2spOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEdTVF9DQVRfTE9HIChkYXRhX3F1ZXVlX2RhdGFmbG93LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAibG9ja2VkIHFsb2NrIGZyb20gdGhyZWFkICVwIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBnX3RocmVhZF9zZWxmICgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IEdfU1RNVF9FTkQKKworI2RlZmluZSBHU1RfREFUQV9RVUVVRV9NVVRFWF9MT0NLX0NIRUNLKHEsIGxhYmVsKSBHX1NUTVRfU1RBUlQgeyAgICAgICAgXAorICAgIEdTVF9EQVRBX1FVRVVFX01VVEVYX0xPQ0sgKHEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChxLT5mbHVzaGluZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgZ290byBsYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IEdfU1RNVF9FTkQKKworI2RlZmluZSBHU1RfREFUQV9RVUVVRV9NVVRFWF9VTkxPQ0socSkgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgXAorICAgIEdTVF9DQVRfTE9HIChkYXRhX3F1ZXVlX2RhdGFmbG93LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgInVubG9ja2luZyBxbG9jayBmcm9tIHRocmVhZCAlcCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgZ190aHJlYWRfc2VsZiAoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBnX211dGV4X3VubG9jayAocS0+cWxvY2spOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSBHX1NUTVRfRU5ECisKKyNkZWZpbmUgU1RBVFVTKHEsIG1zZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgR1NUX0NBVF9MT0cgKGRhdGFfcXVldWVfZGF0YWZsb3csICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICJxdWV1ZTolcCAiIG1zZyAiOiAldSB2aXNpYmxlIGl0ZW1zLCAldSAiICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICJieXRlcywgJSJHX0dVSU5UNjRfRk9STUFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICIgbnMsICV1IGVsZW1lbnRzIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIHF1ZXVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIHEtPmN1cl9sZXZlbC52aXNpYmxlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIHEtPmN1cl9sZXZlbC5ieXRlcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIHEtPmN1cl9sZXZlbC50aW1lLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIHEtPnF1ZXVlLT5sZW5ndGgpCisKK3N0YXRpYyB2b2lkIGdzdF9kYXRhX3F1ZXVlX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKKworc3RhdGljIHZvaWQgZ3N0X2RhdGFfcXVldWVfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAorICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOworc3RhdGljIHZvaWQgZ3N0X2RhdGFfcXVldWVfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAorICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOworCitzdGF0aWMgR09iamVjdENsYXNzICpwYXJlbnRfY2xhc3MgPSBOVUxMOworc3RhdGljIGd1aW50IGdzdF9kYXRhX3F1ZXVlX3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07CisKKyNkZWZpbmUgX2RvX2luaXQgXAoreyBcCisgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChkYXRhX3F1ZXVlX2RlYnVnLCAiZGF0YXF1ZXVlIiwgMCwgXAorICAgICAgImRhdGEgcXVldWUgb2JqZWN0Iik7IFwKKyAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGRhdGFfcXVldWVfZGF0YWZsb3csICJkYXRhX3F1ZXVlX2RhdGFmbG93IiwgMCwgXAorICAgICAgImRhdGFmbG93IGluc2lkZSB0aGUgZGF0YSBxdWV1ZSBvYmplY3QiKTsgXAorfQorCisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3REYXRhUXVldWUsIGdzdF9kYXRhX3F1ZXVlLCBHX1RZUEVfT0JKRUNULCBfZG9faW5pdCk7CisKK3N0YXRpYyB2b2lkCitnc3RfZGF0YV9xdWV1ZV9jbGFzc19pbml0IChHc3REYXRhUXVldWVDbGFzcyAqIGtsYXNzKQoreworICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOworCisgIHBhcmVudF9jbGFzcyA9IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCAoa2xhc3MpOworCisgIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9kYXRhX3F1ZXVlX3NldF9wcm9wZXJ0eTsKKyAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2RhdGFfcXVldWVfZ2V0X3Byb3BlcnR5OworCisgIC8qIHNpZ25hbHMgKi8KKyAgLyoqCisgICAqIEdzdERhdGFRdWV1ZTo6ZW1wdHk6CisgICAqIEBxdWV1ZTogdGhlIHF1ZXVlIGluc3RhbmNlCisgICAqCisgICAqIFJlcG9ydHMgdGhhdCB0aGUgcXVldWUgYmVjYW1lIGVtcHR5IChlbXB0eSkuCisgICAqIEEgcXVldWUgaXMgZW1wdHkgaWYgdGhlIHRvdGFsIGFtb3VudCBvZiB2aXNpYmxlIGl0ZW1zIGluc2lkZSBpdCAobnVtLXZpc2libGUsIHRpbWUsCisgICAqIHNpemUpIGlzIGxvd2VyIHRoYW4gdGhlIGJvdW5kYXJ5IHZhbHVlcyB3aGljaCBjYW4gYmUgc2V0IHRocm91Z2ggdGhlIEdPYmplY3QKKyAgICogcHJvcGVydGllcy4KKyAgICovCisgIGdzdF9kYXRhX3F1ZXVlX3NpZ25hbHNbU0lHTkFMX0VNUFRZXSA9CisgICAgICBnX3NpZ25hbF9uZXcgKCJlbXB0eSIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksIEdfU0lHTkFMX1JVTl9GSVJTVCwKKyAgICAgIEdfU1RSVUNUX09GRlNFVCAoR3N0RGF0YVF1ZXVlQ2xhc3MsIGVtcHR5KSwgTlVMTCwgTlVMTCwKKyAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELCBHX1RZUEVfTk9ORSwgMCk7CisKKyAgLyoqCisgICAqIEdzdERhdGFRdWV1ZTo6ZnVsbDoKKyAgICogQHF1ZXVlOiB0aGUgcXVldWUgaW5zdGFuY2UKKyAgICoKKyAgICogUmVwb3J0cyB0aGF0IHRoZSBxdWV1ZSBiZWNhbWUgZnVsbCAoZnVsbCkuCisgICAqIEEgcXVldWUgaXMgZnVsbCBpZiB0aGUgdG90YWwgYW1vdW50IG9mIGRhdGEgaW5zaWRlIGl0IChudW0tdmlzaWJsZSwgdGltZSwKKyAgICogc2l6ZSkgaXMgaGlnaGVyIHRoYW4gdGhlIGJvdW5kYXJ5IHZhbHVlcyB3aGljaCBjYW4gYmUgc2V0IHRocm91Z2ggdGhlIEdPYmplY3QKKyAgICogcHJvcGVydGllcy4KKyAgICovCisgIGdzdF9kYXRhX3F1ZXVlX3NpZ25hbHNbU0lHTkFMX0ZVTExdID0KKyAgICAgIGdfc2lnbmFsX25ldyAoImZ1bGwiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLCBHX1NJR05BTF9SVU5fRklSU1QsCisgICAgICBHX1NUUlVDVF9PRkZTRVQgKEdzdERhdGFRdWV1ZUNsYXNzLCBmdWxsKSwgTlVMTCwgTlVMTCwKKyAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELCBHX1RZUEVfTk9ORSwgMCk7CisKKyAgLyogcHJvcGVydGllcyAqLworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBBUkdfQ1VSX0xFVkVMX0JZVEVTLAorICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJjdXJyZW50LWxldmVsLWJ5dGVzIiwgIkN1cnJlbnQgbGV2ZWwgKGtCKSIsCisgICAgICAgICAgIkN1cnJlbnQgYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIChieXRlcykiLAorICAgICAgICAgIDAsIEdfTUFYVUlOVCwgMCwgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgQVJHX0NVUl9MRVZFTF9WSVNJQkxFLAorICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJjdXJyZW50LWxldmVsLXZpc2libGUiLAorICAgICAgICAgICJDdXJyZW50IGxldmVsICh2aXNpYmxlIGl0ZW1zKSIsCisgICAgICAgICAgIkN1cnJlbnQgbnVtYmVyIG9mIHZpc2libGUgaXRlbXMgaW4gdGhlIHF1ZXVlIiwgMCwgR19NQVhVSU5ULCAwLAorICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIEFSR19DVVJfTEVWRUxfVElNRSwKKyAgICAgIGdfcGFyYW1fc3BlY191aW50NjQgKCJjdXJyZW50LWxldmVsLXRpbWUiLCAiQ3VycmVudCBsZXZlbCAobnMpIiwKKyAgICAgICAgICAiQ3VycmVudCBhbW91bnQgb2YgZGF0YSBpbiB0aGUgcXVldWUgKGluIG5zKSIsIDAsIEdfTUFYVUlOVDY0LCAwLAorICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisKKyAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfZGF0YV9xdWV1ZV9maW5hbGl6ZTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9kYXRhX3F1ZXVlX2luaXQgKEdzdERhdGFRdWV1ZSAqIHF1ZXVlKQoreworICBxdWV1ZS0+Y3VyX2xldmVsLnZpc2libGUgPSAwOyAvKiBubyBjb250ZW50ICovCisgIHF1ZXVlLT5jdXJfbGV2ZWwuYnl0ZXMgPSAwOyAgIC8qIG5vIGNvbnRlbnQgKi8KKyAgcXVldWUtPmN1cl9sZXZlbC50aW1lID0gMDsgICAgLyogbm8gY29udGVudCAqLworCisgIHF1ZXVlLT5jaGVja2Z1bGwgPSBOVUxMOworCisgIHF1ZXVlLT5xbG9jayA9IGdfbXV0ZXhfbmV3ICgpOworICBxdWV1ZS0+aXRlbV9hZGQgPSBnX2NvbmRfbmV3ICgpOworICBxdWV1ZS0+aXRlbV9kZWwgPSBnX2NvbmRfbmV3ICgpOworICBxdWV1ZS0+cXVldWUgPSBnX3F1ZXVlX25ldyAoKTsKKworICBHU1RfREVCVUcgKCJpbml0aWFsaXplZCBxdWV1ZSdzIG5vdF9lbXB0eSAmIG5vdF9mdWxsIGNvbmRpdGlvbnMiKTsKK30KKworLyoqCisgKiBnc3RfZGF0YV9xdWV1ZV9uZXdfZnVsbDoKKyAqIEBjaGVja2Z1bGw6IHRoZSBjYWxsYmFjayB1c2VkIHRvIHRlbGwgaWYgdGhlIGVsZW1lbnQgY29uc2lkZXJzIHRoZSBxdWV1ZSBmdWxsCisgKiBvciBub3QuCisgKiBAZnVsbGNhbGxiYWNrOiB0aGUgY2FsbGJhY2sgd2hpY2ggd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgcXVldWUgaXMgY29uc2lkZXJlZCBmdWxsLgorICogQGVtcHR5Y2FsbGJhY2s6IHRoZSBjYWxsYmFjayB3aGljaCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBxdWV1ZSBpcyBjb25zaWRlcmVkIGVtcHR5LgorICogQGNoZWNrZGF0YTogYSAjZ3BvaW50ZXIgdGhhdCB3aWxsIGJlIGdpdmVuIGluIHRoZSBAY2hlY2tmdWxsIGNhbGxiYWNrLgorICoKKyAqIENyZWF0ZXMgYSBuZXcgI0dzdERhdGFRdWV1ZS4gVGhlIGRpZmZlcmVuY2Ugd2l0aCBAZ3N0X2RhdGFfcXVldWVfbmV3IGlzIHRoYXQgaXQgd2lsbAorICogbm90IGVtaXQgdGhlICdmdWxsJyBhbmQgJ2VtcHR5JyBzaWduYWxzLCBidXQgaW5zdGVhZCBjYWxsaW5nIGRpcmVjdGx5IEBmdWxsY2FsbGJhY2sKKyAqIG9yIEBlbXB0eWNhbGxiYWNrLgorICoKKyAqIFJldHVybnM6IGEgbmV3ICNHc3REYXRhUXVldWUuCisgKgorICogU2luY2U6IDAuMTAuMjYKKyAqLworCitHc3REYXRhUXVldWUgKgorZ3N0X2RhdGFfcXVldWVfbmV3X2Z1bGwgKEdzdERhdGFRdWV1ZUNoZWNrRnVsbEZ1bmN0aW9uIGNoZWNrZnVsbCwKKyAgICBHc3REYXRhUXVldWVGdWxsQ2FsbGJhY2sgZnVsbGNhbGxiYWNrLAorICAgIEdzdERhdGFRdWV1ZUVtcHR5Q2FsbGJhY2sgZW1wdHljYWxsYmFjaywgZ3BvaW50ZXIgY2hlY2tkYXRhKQoreworICBHc3REYXRhUXVldWUgKnJldDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoY2hlY2tmdWxsICE9IE5VTEwsIE5VTEwpOworCisgIHJldCA9IGdfb2JqZWN0X25ld3YgKEdTVF9UWVBFX0RBVEFfUVVFVUUsIDAsIE5VTEwpOworICByZXQtPmNoZWNrZnVsbCA9IGNoZWNrZnVsbDsKKyAgcmV0LT5jaGVja2RhdGEgPSBjaGVja2RhdGE7CisgIHJldC0+ZnVsbGNhbGxiYWNrID0gZnVsbGNhbGxiYWNrOworICByZXQtPmVtcHR5Y2FsbGJhY2sgPSBlbXB0eWNhbGxiYWNrOworCisgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICogZ3N0X2RhdGFfcXVldWVfbmV3OgorICogQGNoZWNrZnVsbDogdGhlIGNhbGxiYWNrIHVzZWQgdG8gdGVsbCBpZiB0aGUgZWxlbWVudCBjb25zaWRlcnMgdGhlIHF1ZXVlIGZ1bGwKKyAqIG9yIG5vdC4KKyAqIEBjaGVja2RhdGE6IGEgI2dwb2ludGVyIHRoYXQgd2lsbCBiZSBnaXZlbiBpbiB0aGUgQGNoZWNrZnVsbCBjYWxsYmFjay4KKyAqCisgKiBSZXR1cm5zOiBhIG5ldyAjR3N0RGF0YVF1ZXVlLgorICovCisKK0dzdERhdGFRdWV1ZSAqCitnc3RfZGF0YV9xdWV1ZV9uZXcgKEdzdERhdGFRdWV1ZUNoZWNrRnVsbEZ1bmN0aW9uIGNoZWNrZnVsbCwgZ3BvaW50ZXIgY2hlY2tkYXRhKQoreworICByZXR1cm4gZ3N0X2RhdGFfcXVldWVfbmV3X2Z1bGwgKGNoZWNrZnVsbCwgTlVMTCwgTlVMTCwgY2hlY2tkYXRhKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9kYXRhX3F1ZXVlX2NsZWFudXAgKEdzdERhdGFRdWV1ZSAqIHF1ZXVlKQoreworICB3aGlsZSAoIWdfcXVldWVfaXNfZW1wdHkgKHF1ZXVlLT5xdWV1ZSkpIHsKKyAgICBHc3REYXRhUXVldWVJdGVtICppdGVtID0gZ19xdWV1ZV9wb3BfaGVhZCAocXVldWUtPnF1ZXVlKTsKKworICAgIC8qIEp1c3QgY2FsbCB0aGUgZGVzdHJveSBub3RpZnkgb24gdGhlIGl0ZW0gKi8KKyAgICBpdGVtLT5kZXN0cm95IChpdGVtKTsKKyAgfQorICBxdWV1ZS0+Y3VyX2xldmVsLnZpc2libGUgPSAwOworICBxdWV1ZS0+Y3VyX2xldmVsLmJ5dGVzID0gMDsKKyAgcXVldWUtPmN1cl9sZXZlbC50aW1lID0gMDsKK30KKworLyogY2FsbGVkIG9ubHkgb25jZSwgYXMgb3Bwb3NlZCB0byBkaXNwb3NlICovCitzdGF0aWMgdm9pZAorZ3N0X2RhdGFfcXVldWVfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCit7CisgIEdzdERhdGFRdWV1ZSAqcXVldWUgPSBHU1RfREFUQV9RVUVVRSAob2JqZWN0KTsKKworICBHU1RfREVCVUcgKCJmaW5hbGl6aW5nIHF1ZXVlIik7CisKKyAgZ3N0X2RhdGFfcXVldWVfY2xlYW51cCAocXVldWUpOworICBnX3F1ZXVlX2ZyZWUgKHF1ZXVlLT5xdWV1ZSk7CisKKyAgR1NUX0RFQlVHICgiZnJlZSBtdXRleCIpOworICBnX211dGV4X2ZyZWUgKHF1ZXVlLT5xbG9jayk7CisgIEdTVF9ERUJVRyAoImRvbmUgZnJlZSBtdXRleCIpOworCisgIGdfY29uZF9mcmVlIChxdWV1ZS0+aXRlbV9hZGQpOworICBnX2NvbmRfZnJlZSAocXVldWUtPml0ZW1fZGVsKTsKKworICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ3N0X2RhdGFfcXVldWVfbG9ja2VkX2ZsdXNoIChHc3REYXRhUXVldWUgKiBxdWV1ZSkKK3sKKyAgU1RBVFVTIChxdWV1ZSwgImJlZm9yZSBmbHVzaGluZyIpOworICBnc3RfZGF0YV9xdWV1ZV9jbGVhbnVwIChxdWV1ZSk7CisgIFNUQVRVUyAocXVldWUsICJhZnRlciBmbHVzaGluZyIpOworICAvKiB3ZSBkZWxldGVkIHNvbWV0aGluZy4uLiAqLworICBpZiAocXVldWUtPndhaXRpbmdfZGVsKQorICAgIGdfY29uZF9zaWduYWwgKHF1ZXVlLT5pdGVtX2RlbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KK2dzdF9kYXRhX3F1ZXVlX2xvY2tlZF9pc19lbXB0eSAoR3N0RGF0YVF1ZXVlICogcXVldWUpCit7CisgIHJldHVybiAocXVldWUtPnF1ZXVlLT5sZW5ndGggPT0gMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KK2dzdF9kYXRhX3F1ZXVlX2xvY2tlZF9pc19mdWxsIChHc3REYXRhUXVldWUgKiBxdWV1ZSkKK3sKKyAgcmV0dXJuIHF1ZXVlLT5jaGVja2Z1bGwgKHF1ZXVlLCBxdWV1ZS0+Y3VyX2xldmVsLnZpc2libGUsCisgICAgICBxdWV1ZS0+Y3VyX2xldmVsLmJ5dGVzLCBxdWV1ZS0+Y3VyX2xldmVsLnRpbWUsIHF1ZXVlLT5jaGVja2RhdGEpOworfQorCisvKioKKyAqIGdzdF9kYXRhX3F1ZXVlX2ZsdXNoOgorICogQHF1ZXVlOiBhICNHc3REYXRhUXVldWUuCisgKgorICogRmx1c2hlcyBhbGwgdGhlIGNvbnRlbnRzIG9mIHRoZSBAcXVldWUuIEFueSBjYWxsIHRvICNnc3RfZGF0YV9xdWV1ZV9wdXNoIGFuZAorICogI2dzdF9kYXRhX3F1ZXVlX3BvcCB3aWxsIGJlIHJlbGVhc2VkLgorICogTVQgc2FmZS4KKyAqCisgKiBTaW5jZTogMC4xMC4xMQorICovCit2b2lkCitnc3RfZGF0YV9xdWV1ZV9mbHVzaCAoR3N0RGF0YVF1ZXVlICogcXVldWUpCit7CisgIEdTVF9ERUJVRyAoInF1ZXVlOiVwIiwgcXVldWUpOworICBHU1RfREFUQV9RVUVVRV9NVVRFWF9MT0NLIChxdWV1ZSk7CisgIGdzdF9kYXRhX3F1ZXVlX2xvY2tlZF9mbHVzaCAocXVldWUpOworICBHU1RfREFUQV9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKK30KKworLyoqCisgKiBnc3RfZGF0YV9xdWV1ZV9pc19lbXB0eToKKyAqIEBxdWV1ZTogYSAjR3N0RGF0YVF1ZXVlLgorICoKKyAqIFF1ZXJpZXMgaWYgdGhlcmUgYXJlIGFueSBpdGVtcyBpbiB0aGUgQHF1ZXVlLgorICogTVQgc2FmZS4KKyAqCisgKiBSZXR1cm5zOiAjVFJVRSBpZiBAcXVldWUgaXMgZW1wdHkuCisgKgorICogU2luY2U6IDAuMTAuMTEKKyAqLworZ2Jvb2xlYW4KK2dzdF9kYXRhX3F1ZXVlX2lzX2VtcHR5IChHc3REYXRhUXVldWUgKiBxdWV1ZSkKK3sKKyAgZ2Jvb2xlYW4gcmVzOworCisgIEdTVF9EQVRBX1FVRVVFX01VVEVYX0xPQ0sgKHF1ZXVlKTsKKyAgcmVzID0gZ3N0X2RhdGFfcXVldWVfbG9ja2VkX2lzX2VtcHR5IChxdWV1ZSk7CisgIEdTVF9EQVRBX1FVRVVFX01VVEVYX1VOTE9DSyAocXVldWUpOworCisgIHJldHVybiByZXM7Cit9CisKKy8qKgorICogZ3N0X2RhdGFfcXVldWVfaXNfZnVsbDoKKyAqIEBxdWV1ZTogYSAjR3N0RGF0YVF1ZXVlLgorICoKKyAqIFF1ZXJpZXMgaWYgQHF1ZXVlIGlzIGZ1bGwuIFRoaXMgY2hlY2sgd2lsbCBiZSBkb25lIHVzaW5nIHRoZQorICogI0dzdERhdGFRdWV1ZUNoZWNrRnVsbEZ1bmN0aW9uIHJlZ2lzdGVyZWQgd2l0aCBAcXVldWUuCisgKiBNVCBzYWZlLgorICoKKyAqIFJldHVybnM6ICNUUlVFIGlmIEBxdWV1ZSBpcyBmdWxsLgorICoKKyAqIFNpbmNlOiAwLjEwLjExCisgKi8KK2dib29sZWFuCitnc3RfZGF0YV9xdWV1ZV9pc19mdWxsIChHc3REYXRhUXVldWUgKiBxdWV1ZSkKK3sKKyAgZ2Jvb2xlYW4gcmVzOworCisgIEdTVF9EQVRBX1FVRVVFX01VVEVYX0xPQ0sgKHF1ZXVlKTsKKyAgcmVzID0gZ3N0X2RhdGFfcXVldWVfbG9ja2VkX2lzX2Z1bGwgKHF1ZXVlKTsKKyAgR1NUX0RBVEFfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7CisKKyAgcmV0dXJuIHJlczsKK30KKworLyoqCisgKiBnc3RfZGF0YV9xdWV1ZV9zZXRfZmx1c2hpbmc6CisgKiBAcXVldWU6IGEgI0dzdERhdGFRdWV1ZS4KKyAqIEBmbHVzaGluZzogYSAjZ2Jvb2xlYW4gc3RhdGluZyBpZiB0aGUgcXVldWUgd2lsbCBiZSBmbHVzaGluZyBvciBub3QuCisgKgorICogU2V0cyB0aGUgcXVldWUgdG8gZmx1c2hpbmcgc3RhdGUgaWYgQGZsdXNoaW5nIGlzICNUUlVFLiBJZiBzZXQgdG8gZmx1c2hpbmcKKyAqIHN0YXRlLCBhbnkgaW5jb21pbmcgZGF0YSBvbiB0aGUgQHF1ZXVlIHdpbGwgYmUgZGlzY2FyZGVkLiBBbnkgY2FsbCBjdXJyZW50bHkKKyAqIGJsb2NraW5nIG9uICNnc3RfZGF0YV9xdWV1ZV9wdXNoIG9yICNnc3RfZGF0YV9xdWV1ZV9wb3Agd2lsbCByZXR1cm4gc3RyYWlnaHQKKyAqIGF3YXkgd2l0aCBhIHJldHVybiB2YWx1ZSBvZiAjRkFMU0UuIFdoaWxlIHRoZSBAcXVldWUgaXMgaW4gZmx1c2hpbmcgc3RhdGUsIAorICogYWxsIGNhbGxzIHRvIHRob3NlIHR3byBmdW5jdGlvbnMgd2lsbCByZXR1cm4gI0ZBTFNFLgorICoKKyAqIE1UIFNhZmUuCisgKgorICogU2luY2U6IDAuMTAuMTEKKyAqLwordm9pZAorZ3N0X2RhdGFfcXVldWVfc2V0X2ZsdXNoaW5nIChHc3REYXRhUXVldWUgKiBxdWV1ZSwgZ2Jvb2xlYW4gZmx1c2hpbmcpCit7CisgIEdTVF9ERUJVRyAoInF1ZXVlOiVwICwgZmx1c2hpbmc6JWQiLCBxdWV1ZSwgZmx1c2hpbmcpOworCisgIEdTVF9EQVRBX1FVRVVFX01VVEVYX0xPQ0sgKHF1ZXVlKTsKKyAgcXVldWUtPmZsdXNoaW5nID0gZmx1c2hpbmc7CisgIGlmIChmbHVzaGluZykgeworICAgIC8qIHJlbGVhc2UgcHVzaC9wb3AgZnVuY3Rpb25zICovCisgICAgaWYgKHF1ZXVlLT53YWl0aW5nX2FkZCkKKyAgICAgIGdfY29uZF9zaWduYWwgKHF1ZXVlLT5pdGVtX2FkZCk7CisgICAgaWYgKHF1ZXVlLT53YWl0aW5nX2RlbCkKKyAgICAgIGdfY29uZF9zaWduYWwgKHF1ZXVlLT5pdGVtX2RlbCk7CisgIH0KKyAgR1NUX0RBVEFfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7Cit9CisKKy8qKgorICogZ3N0X2RhdGFfcXVldWVfcHVzaDoKKyAqIEBxdWV1ZTogYSAjR3N0RGF0YVF1ZXVlLgorICogQGl0ZW06IGEgI0dzdERhdGFRdWV1ZUl0ZW0uCisgKgorICogUHVzaGVzIGEgI0dzdERhdGFRdWV1ZUl0ZW0gKG9yIGEgc3RydWN0dXJlIHRoYXQgYmVnaW5zIHdpdGggdGhlIHNhbWUgZmllbGRzKQorICogb24gdGhlIEBxdWV1ZS4gSWYgdGhlIEBxdWV1ZSBpcyBmdWxsLCB0aGUgY2FsbCB3aWxsIGJsb2NrIHVudGlsIHNwYWNlIGlzCisgKiBhdmFpbGFibGUsIE9SIHRoZSBAcXVldWUgaXMgc2V0IHRvIGZsdXNoaW5nIHN0YXRlLgorICogTVQgc2FmZS4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBoYXMgc2xpZ2h0bHkgZGlmZmVyZW50IHNlbWFudGljcyB0aGFuIGdzdF9wYWRfcHVzaCgpCisgKiBhbmQgZ3N0X3BhZF9wdXNoX2V2ZW50KCk6IHRoaXMgZnVuY3Rpb24gb25seSB0YWtlcyBvd25lcnNoaXAgb2YgQGl0ZW0gYW5kCisgKiB0aGUgI0dzdE1pbmlPYmplY3QgY29udGFpbmVkIGluIEBpdGVtIGlmIHRoZSBwdXNoIHdhcyBzdWNjZXNzZnVsLiBJZiBGQUxTRQorICogaXMgcmV0dXJuZWQsIHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgQGl0ZW0gYW5kIGl0cyBjb250ZW50cy4KKyAqCisgKiBSZXR1cm5zOiAjVFJVRSBpZiB0aGUgQGl0ZW0gd2FzIHN1Y2Nlc3NmdWxseSBwdXNoZWQgb24gdGhlIEBxdWV1ZS4KKyAqCisgKiBTaW5jZTogMC4xMC4xMQorICovCitnYm9vbGVhbgorZ3N0X2RhdGFfcXVldWVfcHVzaCAoR3N0RGF0YVF1ZXVlICogcXVldWUsIEdzdERhdGFRdWV1ZUl0ZW0gKiBpdGVtKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0RBVEFfUVVFVUUgKHF1ZXVlKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoaXRlbSAhPSBOVUxMLCBGQUxTRSk7CisKKyAgR1NUX0RBVEFfUVVFVUVfTVVURVhfTE9DS19DSEVDSyAocXVldWUsIGZsdXNoaW5nKTsKKworICBTVEFUVVMgKHF1ZXVlLCAiYmVmb3JlIHB1c2hpbmciKTsKKworICAvKiBXZSBBTFdBWVMgbmVlZCB0byBjaGVjayBmb3IgcXVldWUgZmlsbG5lc3MgKi8KKyAgaWYgKGdzdF9kYXRhX3F1ZXVlX2xvY2tlZF9pc19mdWxsIChxdWV1ZSkpIHsKKyAgICBHU1RfREFUQV9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKKyAgICBpZiAoR19MSUtFTFkgKHF1ZXVlLT5mdWxsY2FsbGJhY2spKQorICAgICAgcXVldWUtPmZ1bGxjYWxsYmFjayAocXVldWUsIHF1ZXVlLT5jaGVja2RhdGEpOworICAgIGVsc2UKKyAgICAgIGdfc2lnbmFsX2VtaXQgKHF1ZXVlLCBnc3RfZGF0YV9xdWV1ZV9zaWduYWxzW1NJR05BTF9GVUxMXSwgMCk7CisgICAgR1NUX0RBVEFfUVVFVUVfTVVURVhfTE9DS19DSEVDSyAocXVldWUsIGZsdXNoaW5nKTsKKworICAgIC8qIHNpZ25hbCBtaWdodCBoYXZlIHJlbW92ZWQgc29tZSBpdGVtcyAqLworICAgIHdoaWxlIChnc3RfZGF0YV9xdWV1ZV9sb2NrZWRfaXNfZnVsbCAocXVldWUpKSB7CisgICAgICBxdWV1ZS0+d2FpdGluZ19kZWwgPSBUUlVFOworICAgICAgZ19jb25kX3dhaXQgKHF1ZXVlLT5pdGVtX2RlbCwgcXVldWUtPnFsb2NrKTsKKyAgICAgIHF1ZXVlLT53YWl0aW5nX2RlbCA9IEZBTFNFOworICAgICAgaWYgKHF1ZXVlLT5mbHVzaGluZykKKyAgICAgICAgZ290byBmbHVzaGluZzsKKyAgICB9CisgIH0KKworICBnX3F1ZXVlX3B1c2hfdGFpbCAocXVldWUtPnF1ZXVlLCBpdGVtKTsKKworICBpZiAoaXRlbS0+dmlzaWJsZSkKKyAgICBxdWV1ZS0+Y3VyX2xldmVsLnZpc2libGUrKzsKKyAgcXVldWUtPmN1cl9sZXZlbC5ieXRlcyArPSBpdGVtLT5zaXplOworICBxdWV1ZS0+Y3VyX2xldmVsLnRpbWUgKz0gaXRlbS0+ZHVyYXRpb247CisKKyAgU1RBVFVTIChxdWV1ZSwgImFmdGVyIHB1c2hpbmciKTsKKyAgaWYgKHF1ZXVlLT53YWl0aW5nX2FkZCkKKyAgICBnX2NvbmRfc2lnbmFsIChxdWV1ZS0+aXRlbV9hZGQpOworCisgIEdTVF9EQVRBX1FVRVVFX01VVEVYX1VOTE9DSyAocXVldWUpOworCisgIHJldHVybiBUUlVFOworCisgIC8qIEVSUk9SUyAqLworZmx1c2hpbmc6CisgIHsKKyAgICBHU1RfREVCVUcgKCJxdWV1ZTolcCwgd2UgYXJlIGZsdXNoaW5nIiwgcXVldWUpOworICAgIEdTVF9EQVRBX1FVRVVFX01VVEVYX1VOTE9DSyAocXVldWUpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCisvKioKKyAqIGdzdF9kYXRhX3F1ZXVlX3BvcDoKKyAqIEBxdWV1ZTogYSAjR3N0RGF0YVF1ZXVlLgorICogQGl0ZW06IHBvaW50ZXIgdG8gc3RvcmUgdGhlIHJldHVybmVkICNHc3REYXRhUXVldWVJdGVtLgorICoKKyAqIFJldHJpZXZlcyB0aGUgZmlyc3QgQGl0ZW0gYXZhaWxhYmxlIG9uIHRoZSBAcXVldWUuIElmIHRoZSBxdWV1ZSBpcyBjdXJyZW50bHkKKyAqIGVtcHR5LCB0aGUgY2FsbCB3aWxsIGJsb2NrIHVudGlsIGF0IGxlYXN0IG9uZSBpdGVtIGlzIGF2YWlsYWJsZSwgT1IgdGhlCisgKiBAcXVldWUgaXMgc2V0IHRvIHRoZSBmbHVzaGluZyBzdGF0ZS4KKyAqIE1UIHNhZmUuCisgKgorICogUmV0dXJuczogI1RSVUUgaWYgYW4gQGl0ZW0gd2FzIHN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgZnJvbSB0aGUgQHF1ZXVlLgorICoKKyAqIFNpbmNlOiAwLjEwLjExCisgKi8KK2dib29sZWFuCitnc3RfZGF0YV9xdWV1ZV9wb3AgKEdzdERhdGFRdWV1ZSAqIHF1ZXVlLCBHc3REYXRhUXVldWVJdGVtICoqIGl0ZW0pCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfREFUQV9RVUVVRSAocXVldWUpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpdGVtICE9IE5VTEwsIEZBTFNFKTsKKworICBHU1RfREFUQV9RVUVVRV9NVVRFWF9MT0NLX0NIRUNLIChxdWV1ZSwgZmx1c2hpbmcpOworCisgIFNUQVRVUyAocXVldWUsICJiZWZvcmUgcG9wcGluZyIpOworCisgIGlmIChnc3RfZGF0YV9xdWV1ZV9sb2NrZWRfaXNfZW1wdHkgKHF1ZXVlKSkgeworICAgIEdTVF9EQVRBX1FVRVVFX01VVEVYX1VOTE9DSyAocXVldWUpOworICAgIGlmIChHX0xJS0VMWSAocXVldWUtPmVtcHR5Y2FsbGJhY2spKQorICAgICAgcXVldWUtPmVtcHR5Y2FsbGJhY2sgKHF1ZXVlLCBxdWV1ZS0+Y2hlY2tkYXRhKTsKKyAgICBlbHNlCisgICAgICBnX3NpZ25hbF9lbWl0IChxdWV1ZSwgZ3N0X2RhdGFfcXVldWVfc2lnbmFsc1tTSUdOQUxfRU1QVFldLCAwKTsKKyAgICBHU1RfREFUQV9RVUVVRV9NVVRFWF9MT0NLX0NIRUNLIChxdWV1ZSwgZmx1c2hpbmcpOworCisgICAgd2hpbGUgKGdzdF9kYXRhX3F1ZXVlX2xvY2tlZF9pc19lbXB0eSAocXVldWUpKSB7CisgICAgICBxdWV1ZS0+d2FpdGluZ19hZGQgPSBUUlVFOworICAgICAgZ19jb25kX3dhaXQgKHF1ZXVlLT5pdGVtX2FkZCwgcXVldWUtPnFsb2NrKTsKKyAgICAgIHF1ZXVlLT53YWl0aW5nX2FkZCA9IEZBTFNFOworICAgICAgaWYgKHF1ZXVlLT5mbHVzaGluZykKKyAgICAgICAgZ290byBmbHVzaGluZzsKKyAgICB9CisgIH0KKworICAvKiBHZXQgdGhlIGl0ZW0gZnJvbSB0aGUgR1F1ZXVlICovCisgICppdGVtID0gZ19xdWV1ZV9wb3BfaGVhZCAocXVldWUtPnF1ZXVlKTsKKworICAvKiB1cGRhdGUgY3VycmVudCBsZXZlbCBjb3VudGVyICovCisgIGlmICgoKml0ZW0pLT52aXNpYmxlKQorICAgIHF1ZXVlLT5jdXJfbGV2ZWwudmlzaWJsZS0tOworICBxdWV1ZS0+Y3VyX2xldmVsLmJ5dGVzIC09ICgqaXRlbSktPnNpemU7CisgIHF1ZXVlLT5jdXJfbGV2ZWwudGltZSAtPSAoKml0ZW0pLT5kdXJhdGlvbjsKKworICBTVEFUVVMgKHF1ZXVlLCAiYWZ0ZXIgcG9wcGluZyIpOworICBpZiAocXVldWUtPndhaXRpbmdfZGVsKQorICAgIGdfY29uZF9zaWduYWwgKHF1ZXVlLT5pdGVtX2RlbCk7CisKKyAgR1NUX0RBVEFfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7CisKKyAgcmV0dXJuIFRSVUU7CisKKyAgLyogRVJST1JTICovCitmbHVzaGluZzoKKyAgeworICAgIEdTVF9ERUJVRyAoInF1ZXVlOiVwLCB3ZSBhcmUgZmx1c2hpbmciLCBxdWV1ZSk7CisgICAgR1NUX0RBVEFfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKKy8qKgorICogZ3N0X2RhdGFfcXVldWVfZHJvcF9oZWFkOgorICogQHF1ZXVlOiBUaGUgI0dzdERhdGFRdWV1ZSB0byBkcm9wIGFuIGl0ZW0gZnJvbS4KKyAqIEB0eXBlOiBUaGUgI0dUeXBlIG9mIHRoZSBpdGVtIHRvIGRyb3AuCisgKgorICogUG9wIGFuZCB1bnJlZiB0aGUgaGVhZC1tb3N0ICNHc3RNaW5pT2JqZWN0IHdpdGggdGhlIGdpdmVuICNHVHlwZS4KKyAqCisgKiBSZXR1cm5zOiBUUlVFIGlmIGFuIGVsZW1lbnQgd2FzIHJlbW92ZWQuCisgKgorICogU2luY2U6IDAuMTAuMTEKKyAqLworZ2Jvb2xlYW4KK2dzdF9kYXRhX3F1ZXVlX2Ryb3BfaGVhZCAoR3N0RGF0YVF1ZXVlICogcXVldWUsIEdUeXBlIHR5cGUpCit7CisgIGdib29sZWFuIHJlcyA9IEZBTFNFOworICBHTGlzdCAqaXRlbTsKKyAgR3N0RGF0YVF1ZXVlSXRlbSAqbGVhayA9IE5VTEw7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19EQVRBX1FVRVVFIChxdWV1ZSksIEZBTFNFKTsKKworICBHU1RfREVCVUcgKCJxdWV1ZTolcCIsIHF1ZXVlKTsKKworICBHU1RfREFUQV9RVUVVRV9NVVRFWF9MT0NLIChxdWV1ZSk7CisgIGZvciAoaXRlbSA9IGdfcXVldWVfcGVla19oZWFkX2xpbmsgKHF1ZXVlLT5xdWV1ZSk7IGl0ZW07IGl0ZW0gPSBpdGVtLT5uZXh0KSB7CisgICAgR3N0RGF0YVF1ZXVlSXRlbSAqdG1wID0gKEdzdERhdGFRdWV1ZUl0ZW0gKikgaXRlbS0+ZGF0YTsKKworICAgIGlmIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAodG1wLT5vYmplY3QsIHR5cGUpKSB7CisgICAgICBsZWFrID0gdG1wOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgaWYgKCFsZWFrKQorICAgIGdvdG8gZG9uZTsKKworICBnX3F1ZXVlX2RlbGV0ZV9saW5rIChxdWV1ZS0+cXVldWUsIGl0ZW0pOworCisgIGlmIChsZWFrLT52aXNpYmxlKQorICAgIHF1ZXVlLT5jdXJfbGV2ZWwudmlzaWJsZS0tOworICBxdWV1ZS0+Y3VyX2xldmVsLmJ5dGVzIC09IGxlYWstPnNpemU7CisgIHF1ZXVlLT5jdXJfbGV2ZWwudGltZSAtPSBsZWFrLT5kdXJhdGlvbjsKKworICBsZWFrLT5kZXN0cm95IChsZWFrKTsKKworICByZXMgPSBUUlVFOworCitkb25lOgorICBHU1RfREFUQV9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKKworICBHU1RfREVCVUcgKCJxdWV1ZTolcCAsIHJlczolZCIsIHF1ZXVlLCByZXMpOworCisgIHJldHVybiByZXM7Cit9CisKKy8qKgorICogZ3N0X2RhdGFfcXVldWVfbGltaXRzX2NoYW5nZWQ6CisgKiBAcXVldWU6IFRoZSAjR3N0RGF0YVF1ZXVlIAorICoKKyAqIEluZm9ybSB0aGUgcXVldWUgdGhhdCB0aGUgbGltaXRzIGZvciB0aGUgZnVsbG5lc3MgY2hlY2sgaGF2ZSBjaGFuZ2VkIGFuZCB0aGF0CisgKiBhbnkgYmxvY2tpbmcgZ3N0X2RhdGFfcXVldWVfcHVzaCgpIHNob3VsZCBiZSB1bmJsb2NrZWQgdG8gcmVjaGVjayB0aGUgbGltdHMuCisgKgorICogU2luY2U6IDAuMTAuMTEKKyAqLwordm9pZAorZ3N0X2RhdGFfcXVldWVfbGltaXRzX2NoYW5nZWQgKEdzdERhdGFRdWV1ZSAqIHF1ZXVlKQoreworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfREFUQV9RVUVVRSAocXVldWUpKTsKKworICBHU1RfREFUQV9RVUVVRV9NVVRFWF9MT0NLIChxdWV1ZSk7CisgIGlmIChxdWV1ZS0+d2FpdGluZ19kZWwpIHsKKyAgICBHU1RfREVCVUcgKCJzaWduYWwgZGVsIik7CisgICAgZ19jb25kX3NpZ25hbCAocXVldWUtPml0ZW1fZGVsKTsKKyAgfQorICBHU1RfREFUQV9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKK30KKworLyoqCisgKiBnc3RfZGF0YV9xdWV1ZV9nZXRfbGV2ZWw6CisgKiBAcXVldWU6IFRoZSAjR3N0RGF0YVF1ZXVlCisgKiBAbGV2ZWw6IHRoZSBsb2NhdGlvbiB0byBzdG9yZSB0aGUgcmVzdWx0CisgKgorICogR2V0IHRoZSBjdXJyZW50IGxldmVsIG9mIHRoZSBxdWV1ZS4KKyAqCisgKiBTaW5jZTogMC4xMC4xMQorICovCit2b2lkCitnc3RfZGF0YV9xdWV1ZV9nZXRfbGV2ZWwgKEdzdERhdGFRdWV1ZSAqIHF1ZXVlLCBHc3REYXRhUXVldWVTaXplICogbGV2ZWwpCit7CisgIG1lbWNweSAobGV2ZWwsICgmcXVldWUtPmN1cl9sZXZlbCksIHNpemVvZiAoR3N0RGF0YVF1ZXVlU2l6ZSkpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2RhdGFfcXVldWVfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAorICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9kYXRhX3F1ZXVlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKKyAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQoreworICBHc3REYXRhUXVldWUgKnF1ZXVlID0gR1NUX0RBVEFfUVVFVUUgKG9iamVjdCk7CisKKyAgR1NUX0RBVEFfUVVFVUVfTVVURVhfTE9DSyAocXVldWUpOworCisgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgQVJHX0NVUl9MRVZFTF9CWVRFUzoKKyAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBxdWV1ZS0+Y3VyX2xldmVsLmJ5dGVzKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQVJHX0NVUl9MRVZFTF9WSVNJQkxFOgorICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHF1ZXVlLT5jdXJfbGV2ZWwudmlzaWJsZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEFSR19DVVJfTEVWRUxfVElNRToKKyAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAodmFsdWUsIHF1ZXVlLT5jdXJfbGV2ZWwudGltZSk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgIGJyZWFrOworICB9CisKKyAgR1NUX0RBVEFfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7Cit9CmRpZmYgLS1naXQgYS9saWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5oIGIvbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWI0MmZmCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuaApAQCAtMCwwICsxLDE4MCBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGZsdWVuZG8uY29tPgorICoKKyAqIGdzdGRhdGFxdWV1ZS5oOgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworI2lmbmRlZiBfX0dTVF9EQVRBX1FVRVVFX0hfXworI2RlZmluZSBfX0dTVF9EQVRBX1FVRVVFX0hfXworCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCitHX0JFR0lOX0RFQ0xTCisjZGVmaW5lIEdTVF9UWVBFX0RBVEFfUVVFVUUgXAorICAoZ3N0X2RhdGFfcXVldWVfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgR1NUX0RBVEFfUVVFVUUob2JqKSBcCisgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9EQVRBX1FVRVVFLEdzdERhdGFRdWV1ZSkpCisjZGVmaW5lIEdTVF9EQVRBX1FVRVVFX0NMQVNTKGtsYXNzKSBcCisgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0RBVEFfUVVFVUUsR3N0RGF0YVF1ZXVlQ2xhc3MpKQorI2RlZmluZSBHU1RfSVNfREFUQV9RVUVVRShvYmopIFwKKyAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0RBVEFfUVVFVUUpKQorI2RlZmluZSBHU1RfSVNfREFUQV9RVUVVRV9DTEFTUyhrbGFzcykgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9EQVRBX1FVRVVFKSkKK3R5cGVkZWYgc3RydWN0IF9Hc3REYXRhUXVldWUgR3N0RGF0YVF1ZXVlOwordHlwZWRlZiBzdHJ1Y3QgX0dzdERhdGFRdWV1ZUNsYXNzIEdzdERhdGFRdWV1ZUNsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX0dzdERhdGFRdWV1ZVNpemUgR3N0RGF0YVF1ZXVlU2l6ZTsKK3R5cGVkZWYgc3RydWN0IF9Hc3REYXRhUXVldWVJdGVtIEdzdERhdGFRdWV1ZUl0ZW07CisKKy8qKgorICogR3N0RGF0YVF1ZXVlSXRlbToKKyAqIEBvYmplY3Q6IHRoZSAjR3N0TWluaU9iamVjdCB0byBxdWV1ZS4KKyAqIEBzaXplOiB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgbWluaW9iamVjdC4KKyAqIEBkdXJhdGlvbjogdGhlIGR1cmF0aW9uIGluICNHc3RDbG9ja1RpbWUgb2YgdGhlIG1pbmlvYmplY3QuIENhbiBub3QgYmUKKyAqICNHU1RfQ0xPQ0tfVElNRV9OT05FLgorICogQHZpc2libGU6ICNUUlVFIGlmIEBvYmplY3Qgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYXMgYSB2aXNpYmxlIG9iamVjdC4KKyAqIEBkZXN0cm95OiBUaGUgI0dEZXN0cm95Tm90aWZ5IGZ1bmN0aW9uIHRvIHVzZSB0byBmcmVlIHRoZSAjR3N0RGF0YVF1ZXVlSXRlbS4KKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsc28gZHJvcCB0aGUgcmVmZXJlbmNlIHRvIEBvYmplY3QgdGhlIG93bmVyIG9mIHRoZQorICogI0dzdERhdGFRdWV1ZUl0ZW0gaXMgYXNzdW1lZCB0byBob2xkLgorICoKKyAqIFN0cnVjdHVyZSB1c2VkIGJ5ICNHc3REYXRhUXVldWUuIFlvdSBjYW4gc3VwcGx5IGEgZGlmZmVyZW50IHN0cnVjdHVyZSwgYXMKKyAqIGxvbmcgYXMgdGhlIHRvcCBvZiB0aGUgc3RydWN0dXJlIGlzIGlkZW50aWNhbCB0byB0aGlzIHN0cnVjdHVyZS4KKyAqCisgKiBTaW5jZTogMC4xMC4xMQorICovCisKK3N0cnVjdCBfR3N0RGF0YVF1ZXVlSXRlbQoreworICBHc3RNaW5pT2JqZWN0ICpvYmplY3Q7CisgIGd1aW50IHNpemU7CisgIGd1aW50NjQgZHVyYXRpb247CisgIGdib29sZWFuIHZpc2libGU7CisKKyAgLyogdXNlciBzdXBwbGllZCBkZXN0cm95IGZ1bmN0aW9uICovCisgIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3k7Cit9OworCisvKioKKyAqIEdzdERhdGFRdWV1ZVNpemU6CisgKiBAdmlzaWJsZTogbnVtYmVyIG9mIGJ1ZmZlcnMKKyAqIEBieXRlczogbnVtYmVyIG9mIGJ5dGVzCisgKiBAdGltZTogYW1vdW50IG9mIHRpbWUKKyAqCisgKiBTdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgc2l6ZSBvZiBhIHF1ZXVlLgorICoKKyAqIFNpbmNlOiAwLjEwLjExCisgKi8KK3N0cnVjdCBfR3N0RGF0YVF1ZXVlU2l6ZQoreworICBndWludCB2aXNpYmxlOworICBndWludCBieXRlczsKKyAgZ3VpbnQ2NCB0aW1lOworfTsKKworLyoqCisgKiBHc3REYXRhUXVldWVDaGVja0Z1bGxGdW5jdGlvbjoKKyAqIEBxdWV1ZTogYSAjR3N0RGF0YVF1ZXVlLgorICogQHZpc2libGU6IFRoZSBudW1iZXIgb2YgdmlzaWJsZSBpdGVtcyBjdXJyZW50bHkgaW4gdGhlIHF1ZXVlLgorICogQGJ5dGVzOiBUaGUgYW1vdW50IG9mIGJ5dGVzIGN1cnJlbnRseSBpbiB0aGUgcXVldWUuCisgKiBAdGltZTogVGhlIGFjY3VtdWxhdGVkIGR1cmF0aW9uIG9mIHRoZSBpdGVtcyBjdXJyZW50bHkgaW4gdGhlIHF1ZXVlLgorICogQGNoZWNrZGF0YTogVGhlICNncG9pbnRlciByZWdpc3RlcmVkIHdoZW4gdGhlICNHc3REYXRhUXVldWUgd2FzIGNyZWF0ZWQuCisgKiAKKyAqIFRoZSBwcm90b3R5cGUgb2YgdGhlIGZ1bmN0aW9uIHVzZWQgdG8gaW5mb3JtIHRoZSBxdWV1ZSB0aGF0IGl0IHNob3VsZCBiZQorICogY29uc2lkZXJlZCBhcyBmdWxsLgorICoKKyAqIFJldHVybnM6ICNUUlVFIGlmIHRoZSBxdWV1ZSBzaG91bGQgYmUgY29uc2lkZXJlZCBmdWxsLgorICoKKyAqIFNpbmNlOiAwLjEwLjExCisgKi8KK3R5cGVkZWYgZ2Jvb2xlYW4gKCpHc3REYXRhUXVldWVDaGVja0Z1bGxGdW5jdGlvbikgKEdzdERhdGFRdWV1ZSAqIHF1ZXVlLAorICAgIGd1aW50IHZpc2libGUsIGd1aW50IGJ5dGVzLCBndWludDY0IHRpbWUsIGdwb2ludGVyIGNoZWNrZGF0YSk7CisKK3R5cGVkZWYgdm9pZCAoKkdzdERhdGFRdWV1ZUZ1bGxDYWxsYmFjaykgKEdzdERhdGFRdWV1ZSAqIHF1ZXVlLCBncG9pbnRlciBjaGVja2RhdGEpOwordHlwZWRlZiB2b2lkICgqR3N0RGF0YVF1ZXVlRW1wdHlDYWxsYmFjaykgKEdzdERhdGFRdWV1ZSAqIHF1ZXVlLCBncG9pbnRlciBjaGVja2RhdGEpOworCisvKioKKyAqIEdzdERhdGFRdWV1ZToKKyAqIEBvYmplY3Q6IHRoZSBwYXJlbnQgc3RydWN0dXJlCisgKgorICogT3BhcXVlICNHc3REYXRhUXVldWUgc3RydWN0dXJlLgorICoKKyAqIFNpbmNlOiAwLjEwLjExCisgKi8KK3N0cnVjdCBfR3N0RGF0YVF1ZXVlCit7CisgIEdPYmplY3Qgb2JqZWN0OworCisgIC8qPCBwcml2YXRlID4qLworICAvKiB0aGUgcXVldWUgb2YgZGF0YSB3ZSdyZSBrZWVwaW5nIG91ciBncnViYnkgaGFuZHMgb24gKi8KKyAgR1F1ZXVlICpxdWV1ZTsKKworICBHc3REYXRhUXVldWVTaXplIGN1cl9sZXZlbDsgICAvKiBzaXplIG9mIHRoZSBxdWV1ZSAqLworICBHc3REYXRhUXVldWVDaGVja0Z1bGxGdW5jdGlvbiBjaGVja2Z1bGw7ICAgICAgLyogQ2FsbGJhY2sgdG8gY2hlY2sgaWYgdGhlIHF1ZXVlIGlzIGZ1bGwgKi8KKyAgZ3BvaW50ZXIgKmNoZWNrZGF0YTsKKworICBHTXV0ZXggKnFsb2NrOyAgICAgICAgICAgICAgICAvKiBsb2NrIGZvciBxdWV1ZSAodnMgb2JqZWN0IGxvY2spICovCisgIGdib29sZWFuIHdhaXRpbmdfYWRkOworICBHQ29uZCAqaXRlbV9hZGQ7ICAgICAgICAgICAgICAvKiBzaWduYWxzIGJ1ZmZlcnMgbm93IGF2YWlsYWJsZSBmb3IgcmVhZGluZyAqLworICBnYm9vbGVhbiB3YWl0aW5nX2RlbDsKKyAgR0NvbmQgKml0ZW1fZGVsOyAgICAgICAgICAgICAgLyogc2lnbmFscyBzcGFjZSBub3cgYXZhaWxhYmxlIGZvciB3cml0aW5nICovCisgIGdib29sZWFuIGZsdXNoaW5nOyAgICAgICAgICAgIC8qIGluZGljYXRlcyB3aGV0aGVyIGNvbmRpdGlvbnMgd2hlcmUgc2lnbmFsbGVkIGJlY2F1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogb2YgZXh0ZXJuYWwgZmx1c2hpbmcgKi8KKyAgR3N0RGF0YVF1ZXVlRnVsbENhbGxiYWNrIGZ1bGxjYWxsYmFjazsKKyAgR3N0RGF0YVF1ZXVlRW1wdHlDYWxsYmFjayBlbXB0eWNhbGxiYWNrOworCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOworfTsKKworc3RydWN0IF9Hc3REYXRhUXVldWVDbGFzcworeworICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworCisgIC8qIHNpZ25hbHMgKi8KKyAgdm9pZCAoKmVtcHR5KSAoR3N0RGF0YVF1ZXVlICogcXVldWUpOworICB2b2lkICgqZnVsbCkgKEdzdERhdGFRdWV1ZSAqIHF1ZXVlKTsKKworICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKK307CisKK0dUeXBlIGdzdF9kYXRhX3F1ZXVlX2dldF90eXBlICh2b2lkKTsKKworR3N0RGF0YVF1ZXVlICogZ3N0X2RhdGFfcXVldWVfbmV3ICAgICAgICAgICAgKEdzdERhdGFRdWV1ZUNoZWNrRnVsbEZ1bmN0aW9uIGNoZWNrZnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBjaGVja2RhdGEpOworCitHc3REYXRhUXVldWUgKiBnc3RfZGF0YV9xdWV1ZV9uZXdfZnVsbCAgICAgICAoR3N0RGF0YVF1ZXVlQ2hlY2tGdWxsRnVuY3Rpb24gY2hlY2tmdWxsLAorCQkJCQkgICAgICBHc3REYXRhUXVldWVGdWxsQ2FsbGJhY2sgZnVsbGNhbGxiYWNrLAorCQkJCQkgICAgICBHc3REYXRhUXVldWVFbXB0eUNhbGxiYWNrIGVtcHR5Y2FsbGJhY2ssCisJCQkJCSAgICAgIGdwb2ludGVyIGNoZWNrZGF0YSk7CisKK2dib29sZWFuICAgICAgIGdzdF9kYXRhX3F1ZXVlX3B1c2ggICAgICAgICAgIChHc3REYXRhUXVldWUgKiBxdWV1ZSwgR3N0RGF0YVF1ZXVlSXRlbSAqIGl0ZW0pOworZ2Jvb2xlYW4gICAgICAgZ3N0X2RhdGFfcXVldWVfcG9wICAgICAgICAgICAgKEdzdERhdGFRdWV1ZSAqIHF1ZXVlLCBHc3REYXRhUXVldWVJdGVtICoqIGl0ZW0pOworCit2b2lkICAgICAgICAgICBnc3RfZGF0YV9xdWV1ZV9mbHVzaCAgICAgICAgICAoR3N0RGF0YVF1ZXVlICogcXVldWUpOwordm9pZCAgICAgICAgICAgZ3N0X2RhdGFfcXVldWVfc2V0X2ZsdXNoaW5nICAgKEdzdERhdGFRdWV1ZSAqIHF1ZXVlLCBnYm9vbGVhbiBmbHVzaGluZyk7CisKK2dib29sZWFuICAgICAgIGdzdF9kYXRhX3F1ZXVlX2Ryb3BfaGVhZCAgICAgIChHc3REYXRhUXVldWUgKiBxdWV1ZSwgR1R5cGUgdHlwZSk7CisKK2dib29sZWFuICAgICAgIGdzdF9kYXRhX3F1ZXVlX2lzX2Z1bGwgICAgICAgIChHc3REYXRhUXVldWUgKiBxdWV1ZSk7CitnYm9vbGVhbiAgICAgICBnc3RfZGF0YV9xdWV1ZV9pc19lbXB0eSAgICAgICAoR3N0RGF0YVF1ZXVlICogcXVldWUpOworCit2b2lkICAgICAgICAgICBnc3RfZGF0YV9xdWV1ZV9nZXRfbGV2ZWwgICAgICAoR3N0RGF0YVF1ZXVlICogcXVldWUsIEdzdERhdGFRdWV1ZVNpemUgKmxldmVsKTsKK3ZvaWQgICAgICAgICAgIGdzdF9kYXRhX3F1ZXVlX2xpbWl0c19jaGFuZ2VkIChHc3REYXRhUXVldWUgKiBxdWV1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9EQVRBX1FVRVVFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvYmFzZS9nc3RwdXNoc3JjLmMgYi9saWJzL2dzdC9iYXNlL2dzdHB1c2hzcmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmFlYzg2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9nc3QvYmFzZS9nc3RwdXNoc3JjLmMKQEAgLTAsMCArMSwxNTEgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgMjAwMCwyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+CisgKgorICogZ3N0cHVzaHNyYy5jOgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qKgorICogU0VDVElPTjpnc3RwdXNoc3JjCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEJhc2UgY2xhc3MgZm9yIHB1c2ggYmFzZWQgc291cmNlIGVsZW1lbnRzCisgKiBAc2VlX2Fsc286ICNHc3RCYXNlU3JjCisgKgorICogVGhpcyBjbGFzcyBpcyBtb3N0bHkgdXNlZnVsIGZvciBlbGVtZW50cyB0aGF0IGNhbm5vdCBkbworICogcmFuZG9tIGFjY2Vzcywgb3IgYXQgbGVhc3QgdmVyeSBzbG93bHkuIFRoZSBzb3VyY2UgdXN1YWxseQorICogcHJlZmVycyB0byBwdXNoIG91dCBhIGZpeGVkIHNpemUgYnVmZmVyLgorICoKKyAqIFN1YmNsYXNzZXMgdXN1YWxseSBvcGVyYXRlIGluIGEgZm9ybWF0IHRoYXQgaXMgZGlmZmVyZW50IGZyb20gdGhlCisgKiBkZWZhdWx0IEdTVF9GT1JNQVRfQllURVMgZm9ybWF0IG9mICNHc3RCYXNlU3JjLgorICoKKyAqIENsYXNzZXMgZXh0ZW5kaW5nIHRoaXMgYmFzZSBjbGFzcyB3aWxsIHVzdWFsbHkgYmUgc2NoZWR1bGVkCisgKiBpbiBhIHB1c2ggYmFzZWQgbW9kZS4gSWYgdGhlIHBlZXIgYWNjZXB0cyB0byBvcGVyYXRlIHdpdGhvdXQKKyAqIG9mZnNldHMgYW5kIHdpdGhpbiB0aGUgbGltaXRzIG9mIHRoZSBhbGxvd2VkIGJsb2NrIHNpemUsIHRoaXMKKyAqIGNsYXNzIGNhbiBvcGVyYXRlIGluIGdldHJhbmdlIGJhc2VkIG1vZGUgYXV0b21hdGljYWxseS4gVG8gbWFrZQorICogdGhpcyBwb3NzaWJsZSwgdGhlIHN1YmNsYXNzIHNob3VsZCBpbXBsZW1lbnQgYW5kIG92ZXJyaWRlIHRoZQorICogU0NIRURVTElORyBxdWVyeS4KKyAqCisgKiBUaGUgc3ViY2xhc3Mgc2hvdWxkIGV4dGVuZCB0aGUgbWV0aG9kcyBmcm9tIHRoZSBiYXNlY2xhc3MgaW4KKyAqIGFkZGl0aW9uIHRvIHRoZSA6OmNyZWF0ZSBtZXRob2QuCisgKgorICogU2Vla2luZywgZmx1c2hpbmcsIHNjaGVkdWxpbmcgYW5kIHN5bmMgaXMgYWxsIGhhbmRsZWQgYnkgdGhpcworICogYmFzZSBjbGFzcy4KKyAqCisgKiBMYXN0IHJldmlld2VkIG9uIDIwMDYtMDctMDQgKDAuMTAuOSkKKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiZ3N0cHVzaHNyYy5oIgorI2luY2x1ZGUgImdzdHR5cGVmaW5kaGVscGVyLmgiCisjaW5jbHVkZSA8Z3N0L2dzdG1hcnNoYWwuaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X3B1c2hfc3JjX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9wdXNoX3NyY19kZWJ1ZworCisjZGVmaW5lIF9kb19pbml0IFwKKyAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X3B1c2hfc3JjX2RlYnVnLCAicHVzaHNyYyIsIDAsIFwKKyAgICAgICAgInB1c2hzcmMgZWxlbWVudCIpOworCisjZGVmaW5lIGdzdF9wdXNoX3NyY19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0UHVzaFNyYywgZ3N0X3B1c2hfc3JjLCBHU1RfVFlQRV9CQVNFX1NSQywgX2RvX2luaXQpOworCitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X3B1c2hfc3JjX3F1ZXJ5IChHc3RCYXNlU3JjICogc3JjLCBHc3RRdWVyeSAqIHF1ZXJ5KTsKK3N0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9wdXNoX3NyY19jcmVhdGUgKEdzdEJhc2VTcmMgKiBic3JjLCBndWludDY0IG9mZnNldCwKKyAgICBndWludCBsZW5ndGgsIEdzdEJ1ZmZlciAqKiByZXQpOworc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3B1c2hfc3JjX2ZpbGwgKEdzdEJhc2VTcmMgKiBic3JjLCBndWludDY0IG9mZnNldCwKKyAgICBndWludCBsZW5ndGgsIEdzdEJ1ZmZlciAqIHJldCk7CisKK3N0YXRpYyB2b2lkCitnc3RfcHVzaF9zcmNfY2xhc3NfaW5pdCAoR3N0UHVzaFNyY0NsYXNzICoga2xhc3MpCit7CisgIEdzdEJhc2VTcmNDbGFzcyAqZ3N0YmFzZXNyY19jbGFzcyA9IChHc3RCYXNlU3JjQ2xhc3MgKikga2xhc3M7CisKKyAgZ3N0YmFzZXNyY19jbGFzcy0+Y3JlYXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9wdXNoX3NyY19jcmVhdGUpOworICBnc3RiYXNlc3JjX2NsYXNzLT5maWxsID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9wdXNoX3NyY19maWxsKTsKKyAgZ3N0YmFzZXNyY19jbGFzcy0+cXVlcnkgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3B1c2hfc3JjX3F1ZXJ5KTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9wdXNoX3NyY19pbml0IChHc3RQdXNoU3JjICogcHVzaHNyYykKK3sKKyAgLyogbm9wICovCit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3B1c2hfc3JjX3F1ZXJ5IChHc3RCYXNlU3JjICogc3JjLCBHc3RRdWVyeSAqIHF1ZXJ5KQoreworICBnYm9vbGVhbiByZXQ7CisKKyAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7CisgICAgY2FzZSBHU1RfUVVFUllfU0NIRURVTElORzoKKyAgICB7CisgICAgICAvKiBhIHB1c2hzcmMgY2FuIGJ5IGRlZmF1bHQgbmV2ZXIgb3BlcmF0ZSBpbiBwdWxsIG1vZGUgb3ZlcnJpZGUKKyAgICAgICAqIGlmIHlvdSB3YW50IHNvbWV0aGluZyBkaWZmZXJlbnQuICovCisgICAgICBnc3RfcXVlcnlfc2V0X3NjaGVkdWxpbmcgKHF1ZXJ5LCBGQUxTRSwgRkFMU0UsIFRSVUUsIDEsIC0xLCAxKTsKKyAgICAgIHJldCA9IFRSVUU7CisgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgIHJldCA9IEdTVF9CQVNFX1NSQ19DTEFTUyAocGFyZW50X2NsYXNzKS0+cXVlcnkgKHNyYywgcXVlcnkpOworICAgICAgYnJlYWs7CisgIH0KKyAgcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgR3N0Rmxvd1JldHVybgorZ3N0X3B1c2hfc3JjX2NyZWF0ZSAoR3N0QmFzZVNyYyAqIGJzcmMsIGd1aW50NjQgb2Zmc2V0LCBndWludCBsZW5ndGgsCisgICAgR3N0QnVmZmVyICoqIHJldCkKK3sKKyAgR3N0Rmxvd1JldHVybiBmcmV0OworICBHc3RQdXNoU3JjICpzcmM7CisgIEdzdFB1c2hTcmNDbGFzcyAqcGNsYXNzOworCisgIHNyYyA9IEdTVF9QVVNIX1NSQyAoYnNyYyk7CisgIHBjbGFzcyA9IEdTVF9QVVNIX1NSQ19HRVRfQ0xBU1MgKHNyYyk7CisgIGlmIChwY2xhc3MtPmNyZWF0ZSkKKyAgICBmcmV0ID0gcGNsYXNzLT5jcmVhdGUgKHNyYywgcmV0KTsKKyAgZWxzZQorICAgIGZyZXQgPQorICAgICAgICBHU1RfQkFTRV9TUkNfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNyZWF0ZSAoYnNyYywgb2Zmc2V0LCBsZW5ndGgsIHJldCk7CisKKyAgcmV0dXJuIGZyZXQ7Cit9CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuCitnc3RfcHVzaF9zcmNfZmlsbCAoR3N0QmFzZVNyYyAqIGJzcmMsIGd1aW50NjQgb2Zmc2V0LCBndWludCBsZW5ndGgsCisgICAgR3N0QnVmZmVyICogcmV0KQoreworICBHc3RGbG93UmV0dXJuIGZyZXQ7CisgIEdzdFB1c2hTcmMgKnNyYzsKKyAgR3N0UHVzaFNyY0NsYXNzICpwY2xhc3M7CisKKyAgc3JjID0gR1NUX1BVU0hfU1JDIChic3JjKTsKKyAgcGNsYXNzID0gR1NUX1BVU0hfU1JDX0dFVF9DTEFTUyAoc3JjKTsKKyAgaWYgKHBjbGFzcy0+ZmlsbCkKKyAgICBmcmV0ID0gcGNsYXNzLT5maWxsIChzcmMsIHJldCk7CisgIGVsc2UKKyAgICBmcmV0ID0gR1NUX0JBU0VfU1JDX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maWxsIChic3JjLCBvZmZzZXQsIGxlbmd0aCwgcmV0KTsKKworICByZXR1cm4gZnJldDsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5oIGIvbGlicy9nc3QvYmFzZS9nc3RwdXNoc3JjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ4ZmZiMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+CisgKgorICogZ3N0cHVzaHNyYy5oOgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19HU1RfUFVTSF9TUkNfSF9fCisjZGVmaW5lIF9fR1NUX1BVU0hfU1JDX0hfXworCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2VzcmMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEdTVF9UWVBFX1BVU0hfU1JDICAgICAgICAgICAgICAgKGdzdF9wdXNoX3NyY19nZXRfdHlwZSgpKQorI2RlZmluZSBHU1RfUFVTSF9TUkMob2JqKSAgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9QVVNIX1NSQyxHc3RQdXNoU3JjKSkKKyNkZWZpbmUgR1NUX1BVU0hfU1JDX0NMQVNTKGtsYXNzKSAgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9QVVNIX1NSQyxHc3RQdXNoU3JjQ2xhc3MpKQorI2RlZmluZSBHU1RfUFVTSF9TUkNfR0VUX0NMQVNTKG9iaikgICAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIEdTVF9UWVBFX1BVU0hfU1JDLCBHc3RQdXNoU3JjQ2xhc3MpKQorI2RlZmluZSBHU1RfSVNfUFVTSF9TUkMob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9QVVNIX1NSQykpCisjZGVmaW5lIEdTVF9JU19QVVNIX1NSQ19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUFVTSF9TUkMpKQorCit0eXBlZGVmIHN0cnVjdCBfR3N0UHVzaFNyYyBHc3RQdXNoU3JjOwordHlwZWRlZiBzdHJ1Y3QgX0dzdFB1c2hTcmNDbGFzcyBHc3RQdXNoU3JjQ2xhc3M7CisKKy8qKgorICogR3N0UHVzaFNyYzoKKyAqCisgKiBUaGUgb3BhcXVlICNHc3RQdXNoU3JjIGRhdGEgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgX0dzdFB1c2hTcmMgeworICBHc3RCYXNlU3JjICAgICBwYXJlbnQ7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOworfTsKKworc3RydWN0IF9Hc3RQdXNoU3JjQ2xhc3MgeworICBHc3RCYXNlU3JjQ2xhc3MgcGFyZW50X2NsYXNzOworCisgIC8qIGFzayB0aGUgc3ViY2xhc3MgdG8gY3JlYXRlIGEgYnVmZmVyICovCisgIEdzdEZsb3dSZXR1cm4gKCpjcmVhdGUpIChHc3RQdXNoU3JjICpzcmMsIEdzdEJ1ZmZlciAqKmJ1Zik7CisKKyAgLyogYXNrIHRoZSBzdWJjbGFzcyB0byBmaWxsIGEgYnVmZmVyICovCisgIEdzdEZsb3dSZXR1cm4gKCpmaWxsKSAoR3N0UHVzaFNyYyAqc3JjLCBHc3RCdWZmZXIgKmJ1Zik7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOworfTsKKworR1R5cGUgZ3N0X3B1c2hfc3JjX2dldF90eXBlKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HU1RfUFVTSF9TUkNfSF9fICovCmRpZmYgLS1naXQgYS9saWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmMgYi9saWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBlNDAyOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYwpAQCAtMCwwICsxLDY3MiBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogQ29weXJpZ2h0IChDKSAyMDAwLDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNiAgICAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+CisgKgorICogZ3N0dHlwZWZpbmRoZWxwZXIuYzoKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKioKKyAqIFNFQ1RJT046Z3N0dHlwZWZpbmRoZWxwZXIKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHR5cGVmaW5kaW5nIAorICoKKyAqIFV0aWxpdHkgZnVuY3Rpb25zIGZvciBlbGVtZW50cyBkb2luZyB0eXBlZmluZGluZzoKKyAqIGdzdF90eXBlX2ZpbmRfaGVscGVyKCkgZG9lcyB0eXBlZmluZGluZyBpbiBwdWxsIG1vZGUsIHdoaWxlCisgKiBnc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfYnVmZmVyKCkgaXMgdXNlZnVsIGZvciBlbGVtZW50cyBuZWVkaW5nIHRvIGRvCisgKiB0eXBlZmluZGluZyBpbiBwdXNoIG1vZGUgZnJvbSBhIGNoYWluIGZ1bmN0aW9uLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJnc3R0eXBlZmluZGhlbHBlci5oIgorCisvKiAqKioqKioqKioqKioqKioqKioqKioqIHR5cGVmaW5kaW5nIGluIHB1bGwgbW9kZSAqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworc3RhdGljIHZvaWQKK2hlbHBlcl9maW5kX3N1Z2dlc3QgKGdwb2ludGVyIGRhdGEsIGd1aW50IHByb2JhYmlsaXR5LCBjb25zdCBHc3RDYXBzICogY2Fwcyk7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIEdTTGlzdCAqYnVmZmVyczsgICAgICAgICAgICAgIC8qIGJ1ZmZlciBjYWNoZSAqLworICBndWludDY0IHNpemU7CisgIGd1aW50NjQgbGFzdF9vZmZzZXQ7CisgIEdzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbiBmdW5jOworICBHc3RUeXBlRmluZFByb2JhYmlsaXR5IGJlc3RfcHJvYmFiaWxpdHk7CisgIEdzdENhcHMgKmNhcHM7CisgIEdzdFR5cGVGaW5kRmFjdG9yeSAqZmFjdG9yeTsgIC8qIGZvciBsb2dnaW5nICovCisgIEdzdE9iamVjdCAqb2JqOyAgICAgICAgICAgICAgIC8qIGZvciBsb2dnaW5nICovCit9IEdzdFR5cGVGaW5kSGVscGVyOworCisvKgorICogaGVscGVyX2ZpbmRfcGVlazoKKyAqIEBkYXRhOiBoZWxwZXIgZGF0YSBzdHJ1Y3QKKyAqIEBvZmY6IHN0cmVhbSBvZmZzZXQKKyAqIEBzaXplOiBibG9jayBzaXplCisgKgorICogR2V0IGRhdGEgcG9pbnRlciB3aXRoaW4gYSBzdHJlYW0uIEtlZXBzIGEgY2FjaGUgb2YgcmVhZCBidWZmZXJzIChwYXJ0bHkKKyAqIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBidXQgbW9zdGx5IGJlY2F1c2UgcG9pbnRlcnMgcmV0dXJuZWQgYnkgdXMgbmVlZAorICogdG8gc3RheSB2YWxpZCB1bnRpbCB0eXBlZmluZGluZyBoYXMgZmluaXNoZWQpCisgKgorICogUmV0dXJuczogYWRkcmVzcyBvZiB0aGUgZGF0YSBvciAlTlVMTCBpZiBidWZmZXIgZG9lcyBub3QgY292ZXIgdGhlCisgKiByZXF1ZXN0ZWQgcmFuZ2UuCisgKi8KK3N0YXRpYyBjb25zdCBndWludDggKgoraGVscGVyX2ZpbmRfcGVlayAoZ3BvaW50ZXIgZGF0YSwgZ2ludDY0IG9mZnNldCwgZ3VpbnQgc2l6ZSkKK3sKKyAgR3N0VHlwZUZpbmRIZWxwZXIgKmhlbHBlcjsKKyAgR3N0QnVmZmVyICpidWZmZXI7CisgIEdzdEZsb3dSZXR1cm4gcmV0OworICBHU0xpc3QgKmluc2VydF9wb3MgPSBOVUxMOworICBnc2l6ZSBidWZfc2l6ZTsKKyAgZ3VpbnQ2NCBidWZfb2Zmc2V0OworI2lmIDAKKyAgR3N0Q2FwcyAqY2FwczsKKyNlbmRpZgorCisgIGhlbHBlciA9IChHc3RUeXBlRmluZEhlbHBlciAqKSBkYXRhOworCisgIEdTVF9MT0dfT0JKRUNUIChoZWxwZXItPm9iaiwgIiclcycgY2FsbGVkIHBlZWsgKCUiIEdfR0lOVDY0X0ZPUk1BVAorICAgICAgIiwgJXUpIiwgR1NUX09CSkVDVF9OQU1FIChoZWxwZXItPmZhY3RvcnkpLCBvZmZzZXQsIHNpemUpOworCisgIGlmIChzaXplID09IDApCisgICAgcmV0dXJuIE5VTEw7CisKKyAgaWYgKG9mZnNldCA8IDApIHsKKyAgICBpZiAoaGVscGVyLT5zaXplID09IC0xIHx8IGhlbHBlci0+c2l6ZSA8IC1vZmZzZXQpCisgICAgICByZXR1cm4gTlVMTDsKKworICAgIG9mZnNldCArPSBoZWxwZXItPnNpemU7CisgIH0KKworICAvKiBzZWUgaWYgd2UgaGF2ZSBhIG1hdGNoaW5nIGJ1ZmZlciBhbHJlYWR5IGluIG91ciBsaXN0ICovCisgIGlmIChzaXplID4gMCAmJiBvZmZzZXQgPD0gaGVscGVyLT5sYXN0X29mZnNldCkgeworICAgIEdTTGlzdCAqd2FsazsKKworICAgIGZvciAod2FsayA9IGhlbHBlci0+YnVmZmVyczsgd2Fsazsgd2FsayA9IHdhbGstPm5leHQpIHsKKyAgICAgIEdzdEJ1ZmZlciAqYnVmID0gR1NUX0JVRkZFUl9DQVNUICh3YWxrLT5kYXRhKTsKKyAgICAgIGd1aW50NjQgYnVmX29mZnNldCA9IEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpOworICAgICAgZ3VpbnQgYnVmX3NpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpOworCisgICAgICAvKiBidWZmZXJzIGFyZSBrZXB0IHNvcnRlZCBieSBlbmQgb2Zmc2V0IChoaWdoZXN0IGZpcnN0KSBpbiB0aGUgbGlzdCwgc28KKyAgICAgICAqIGF0IHRoaXMgcG9pbnQgd2Ugc2F2ZSB0aGUgY3VycmVudCBwb3NpdGlvbiBhbmQgc3RvcCBzZWFyY2hpbmcgaWYgCisgICAgICAgKiB3ZSdyZSBhZnRlciB0aGUgc2VhcmNoZWQgZW5kIG9mZnNldCAqLworICAgICAgaWYgKGJ1Zl9vZmZzZXQgPD0gb2Zmc2V0KSB7CisgICAgICAgIGlmICgob2Zmc2V0ICsgc2l6ZSkgPCAoYnVmX29mZnNldCArIGJ1Zl9zaXplKSkgeworICAgICAgICAgIGd1aW50OCAqZGF0YTsKKworICAgICAgICAgIC8qIEZJWE1FLCB1bm1hcCBhZnRlciB1c2FnZSAqLworICAgICAgICAgIGRhdGEgPSBnc3RfYnVmZmVyX21hcCAoYnVmLCBOVUxMLCBOVUxMLCBHU1RfTUFQX1JFQUQpOworCisgICAgICAgICAgcmV0dXJuIGRhdGEgKyAob2Zmc2V0IC0gYnVmX29mZnNldCk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ICsgc2l6ZSA+PSBidWZfb2Zmc2V0ICsgYnVmX3NpemUpIHsKKyAgICAgICAgaW5zZXJ0X3BvcyA9IHdhbGs7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGJ1ZmZlciA9IE5VTEw7CisgIC8qIHNvbWUgdHlwZWZpbmRlcnMgZ28gaW4gMSBieXRlIHN0ZXBzIG92ZXIgMWsgb2YgZGF0YSBhbmQgcmVxdWVzdAorICAgKiBzbWFsbCBidWZmZXJzLiBJdCBpcyByZWFsbHkgaW5lZmZpY2llbnQgdG8gcHVsbCBlYWNoIHRpbWUsIGFuZCBwdWxsaW5nCisgICAqIGEgbGFyZ2VyIGNodW5rIGlzIGFsbW9zdCBmcmVlLiBUcnlpbmcgdG8gcHVsbCBhIGxhcmdlciBjaHVuayBhdCB0aGUgZW5kCisgICAqIG9mIHRoZSBmaWxlIGlzIGFsc28gbm90IGEgcHJvYmxlbSBoZXJlLCB3ZSdsbCBqdXN0IGdldCBhIHRydW5jYXRlZCBidWZmZXIKKyAgICogaW4gdGhhdCBjYXNlIChhbmQgd2UnbGwgaGF2ZSB0byBkb3VibGUtY2hlY2sgdGhlIHNpemUgd2UgYWN0dWFsbHkgZ2V0CisgICAqIGFueXdheSwgc2VlIGJlbG93KSAqLworICByZXQgPSBoZWxwZXItPmZ1bmMgKGhlbHBlci0+b2JqLCBvZmZzZXQsIE1BWCAoc2l6ZSwgNDA5NiksICZidWZmZXIpOworCisgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCisgICAgZ290byBlcnJvcjsKKworI2lmIDAKKyAgY2FwcyA9IEdTVF9CVUZGRVJfQ0FQUyAoYnVmZmVyKTsKKworICBpZiAoY2FwcyAmJiAhZ3N0X2NhcHNfaXNfZW1wdHkgKGNhcHMpICYmICFnc3RfY2Fwc19pc19hbnkgKGNhcHMpKSB7CisgICAgR1NUX0RFQlVHICgiYnVmZmVyIGhhcyBjYXBzICUiIEdTVF9QVFJfRk9STUFUICIsIHN1Z2dlc3QgbWF4IHByb2JhYmlsaXR5IiwKKyAgICAgICAgY2Fwcyk7CisKKyAgICBnc3RfY2Fwc19yZXBsYWNlICgmaGVscGVyLT5jYXBzLCBjYXBzKTsKKyAgICBoZWxwZXItPmJlc3RfcHJvYmFiaWxpdHkgPSBHU1RfVFlQRV9GSU5EX01BWElNVU07CisKKyAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworICAgIHJldHVybiBOVUxMOworICB9CisjZW5kaWYKKworICAvKiBnZXRyYW5nZSBtaWdodCBzaWxlbnRseSByZXR1cm4gc2hvcnRlbmVkIGJ1ZmZlcnMgYXQgdGhlIGVuZCBvZiBhIGZpbGUsCisgICAqIHdlIG11c3QsIGhvd2V2ZXIsIGFsd2F5cyByZXR1cm4gZWl0aGVyIHRoZSBmdWxsIHJlcXVlc3RlZCBkYXRhIG9yIE5VTEwgKi8KKyAgYnVmX29mZnNldCA9IEdTVF9CVUZGRVJfT0ZGU0VUIChidWZmZXIpOworICBidWZfc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcik7CisKKyAgaWYgKChidWZfb2Zmc2V0ICE9IC0xICYmIGJ1Zl9vZmZzZXQgIT0gb2Zmc2V0KSB8fCBidWZfc2l6ZSA8IHNpemUpIHsKKyAgICBHU1RfREVCVUcgKCJkcm9wcGluZyBzaG9ydCBidWZmZXI6ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIi0lIiBHX0dVSU5UNjRfRk9STUFUCisgICAgICAgICIgaW5zdGVhZCBvZiAlIiBHX0dVSU5UNjRfRk9STUFUICItJSIgR19HVUlOVDY0X0ZPUk1BVCwKKyAgICAgICAgYnVmX29mZnNldCwgYnVmX29mZnNldCArIGJ1Zl9zaXplIC0gMSwgb2Zmc2V0LCBvZmZzZXQgKyBzaXplIC0gMSk7CisgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIGlmIChpbnNlcnRfcG9zKSB7CisgICAgaGVscGVyLT5idWZmZXJzID0KKyAgICAgICAgZ19zbGlzdF9pbnNlcnRfYmVmb3JlIChoZWxwZXItPmJ1ZmZlcnMsIGluc2VydF9wb3MsIGJ1ZmZlcik7CisgIH0gZWxzZSB7CisgICAgLyogaWYgaW5zZXJ0X3BvcyBpcyBub3Qgc2V0LCBvdXIgb2Zmc2V0IGlzIGJpZ2dlciB0aGFuIHRoZSBsYXJnZXN0IG9mZnNldAorICAgICAqIHdlIGhhdmUgc28gZmFyOyBzaW5jZSB3ZSBrZWVwIHRoZSBsaXN0IHNvcnRlZCB3aXRoIGhpZ2hlc3Qgb2Zmc2V0cworICAgICAqIGZpcnN0LCB3ZSBuZWVkIHRvIHByZXBlbmQgdGhlIGJ1ZmZlciB0byB0aGUgbGlzdCAqLworICAgIGhlbHBlci0+bGFzdF9vZmZzZXQgPSBHU1RfQlVGRkVSX09GRlNFVCAoYnVmZmVyKSArIGJ1Zl9zaXplOworICAgIGhlbHBlci0+YnVmZmVycyA9IGdfc2xpc3RfcHJlcGVuZCAoaGVscGVyLT5idWZmZXJzLCBidWZmZXIpOworICB9CisKKyAgLyogRklYTUUsIHVubWFwICovCisgIHJldHVybiBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCBOVUxMLCBOVUxMLCBHU1RfTUFQX1JFQUQpOworCitlcnJvcjoKKyAgeworICAgIEdTVF9JTkZPICgidHlwZWZpbmQgZnVuY3Rpb24gcmV0dXJuZWQ6ICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOworICAgIHJldHVybiBOVUxMOworICB9Cit9CisKKy8qCisgKiBoZWxwZXJfZmluZF9zdWdnZXN0OgorICogQGRhdGE6IGhlbHBlciBkYXRhIHN0cnVjdAorICogQHByb2JhYmlsaXR5OiBwcm9iYWJpbGl0eSBvZiB0aGUgbWF0Y2gKKyAqIEBjYXBzOiBjYXBzIG9mIHRoZSB0eXBlCisgKgorICogSWYgZ2l2ZW4gQHByb2JhYmlsaXR5IGlzIGhpZ2hlciwgcmVwbGFjZSBwcmV2aW91c2x5IHN0b3JlIGNhcHMuCisgKi8KK3N0YXRpYyB2b2lkCitoZWxwZXJfZmluZF9zdWdnZXN0IChncG9pbnRlciBkYXRhLCBHc3RUeXBlRmluZFByb2JhYmlsaXR5IHByb2JhYmlsaXR5LAorICAgIGNvbnN0IEdzdENhcHMgKiBjYXBzKQoreworICBHc3RUeXBlRmluZEhlbHBlciAqaGVscGVyID0gKEdzdFR5cGVGaW5kSGVscGVyICopIGRhdGE7CisKKyAgR1NUX0xPR19PQkpFQ1QgKGhlbHBlci0+b2JqLAorICAgICAgIiclcycgY2FsbGVkIHN1Z2dlc3QgKCV1LCAlIiBHU1RfUFRSX0ZPUk1BVCAiKSIsCisgICAgICBHU1RfT0JKRUNUX05BTUUgKGhlbHBlci0+ZmFjdG9yeSksIHByb2JhYmlsaXR5LCBjYXBzKTsKKworICBpZiAocHJvYmFiaWxpdHkgPiBoZWxwZXItPmJlc3RfcHJvYmFiaWxpdHkpIHsKKyAgICBHc3RDYXBzICpjb3B5ID0gZ3N0X2NhcHNfY29weSAoY2Fwcyk7CisKKyAgICBnc3RfY2Fwc19yZXBsYWNlICgmaGVscGVyLT5jYXBzLCBjb3B5KTsKKyAgICBnc3RfY2Fwc191bnJlZiAoY29weSk7CisgICAgaGVscGVyLT5iZXN0X3Byb2JhYmlsaXR5ID0gcHJvYmFiaWxpdHk7CisgIH0KK30KKworc3RhdGljIGd1aW50NjQKK2hlbHBlcl9maW5kX2dldF9sZW5ndGggKGdwb2ludGVyIGRhdGEpCit7CisgIEdzdFR5cGVGaW5kSGVscGVyICpoZWxwZXIgPSAoR3N0VHlwZUZpbmRIZWxwZXIgKikgZGF0YTsKKworICBHU1RfTE9HX09CSkVDVCAoaGVscGVyLT5vYmosICInJXMnIGNhbGxlZCBnZXRfbGVuZ3RoLCByZXR1cm5pbmcgJSIKKyAgICAgIEdfR1VJTlQ2NF9GT1JNQVQsIEdTVF9PQkpFQ1RfTkFNRSAoaGVscGVyLT5mYWN0b3J5KSwgaGVscGVyLT5zaXplKTsKKworICByZXR1cm4gaGVscGVyLT5zaXplOworfQorCisvKioKKyAqIGdzdF90eXBlX2ZpbmRfaGVscGVyX2dldF9yYW5nZV9leHQ6CisgKiBAb2JqOiBBICNHc3RPYmplY3QgdGhhdCB3aWxsIGJlIHBhc3NlZCBhcyBmaXJzdCBhcmd1bWVudCB0byBAZnVuYworICogQGZ1bmM6IChzY29wZSBjYWxsKTogQSBnZW5lcmljICNHc3RUeXBlRmluZEhlbHBlckdldFJhbmdlRnVuY3Rpb24gdGhhdCB3aWxsCisgKiAgICAgICAgYmUgdXNlZCB0byBhY2Nlc3MgZGF0YSBhdCByYW5kb20gb2Zmc2V0cyB3aGVuIGRvaW5nIHRoZSB0eXBlZmluZGluZworICogQHNpemU6IFRoZSBsZW5ndGggaW4gYnl0ZXMKKyAqIEBleHRlbnNpb246IGV4dGVuc2lvbiBvZiB0aGUgbWVkaWEKKyAqIEBwcm9iOiAob3V0KSAoYWxsb3ctbm9uZSk6IGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBwcm9iYWJpbGl0eSBvZiB0aGUgZm91bmQKKyAqICAgICBjYXBzLCBvciAjTlVMTAorICoKKyAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gZG8gcHVsbC1iYXNlZCB0eXBlZmluZGluZy4gVW5saWtlIGdzdF90eXBlX2ZpbmRfaGVscGVyKCkKKyAqIGhvd2V2ZXIsIHRoaXMgZnVuY3Rpb24gd2lsbCB1c2UgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiBAZnVuYyB0byBvYnRhaW4gdGhlCisgKiBkYXRhIG5lZWRlZCBieSB0aGUgdHlwZWZpbmQgZnVuY3Rpb25zLCByYXRoZXIgdGhhbiBvcGVyYXRpbmcgb24gYSBnaXZlbgorICogc291cmNlIHBhZC4gVGhpcyBpcyB1c2VmdWwgbW9zdGx5IGZvciBlbGVtZW50cyBsaWtlIHRhZyBkZW11eGVycyB3aGljaAorICogc3RyaXAgb2ZmIGRhdGEgYXQgdGhlIGJlZ2lubmluZyBhbmQvb3IgZW5kIG9mIGEgZmlsZSBhbmQgd2FudCB0byB0eXBlZmluZAorICogdGhlIHN0cmlwcGVkIGRhdGEgc3RyZWFtIGJlZm9yZSBhZGRpbmcgdGhlaXIgb3duIHNvdXJjZSBwYWQgKHRoZSBzcGVjaWZpZWQKKyAqIGNhbGxiYWNrIGNhbiB0aGVuIGNhbGwgdGhlIHVwc3RyZWFtIHBlZXIgcGFkIHdpdGggb2Zmc2V0cyBhZGp1c3RlZCBmb3IgdGhlCisgKiB0YWcgc2l6ZSwgZm9yIGV4YW1wbGUpLgorICoKKyAqIFdoZW4gQGV4dGVuc2lvbiBpcyBub3QgTlVMTCwgdGhpcyBmdW5jdGlvbiB3aWxsIGZpcnN0IHRyeSB0aGUgdHlwZWZpbmQKKyAqIGZ1bmN0aW9ucyBmb3IgdGhlIGdpdmVuIGV4dGVuc2lvbiwgd2hpY2ggbWlnaHQgc3BlZWQgdXAgdGhlIHR5cGVmaW5kaW5nCisgKiBpbiBtYW55IGNhc2VzLgorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdzdF9jYXBzX3VucmVmCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdENhcHMgY29ycmVzcG9uZGluZyB0byB0aGUgZGF0YSBzdHJlYW0uCisgKiAgICAgUmV0dXJucyAjTlVMTCBpZiBubyAjR3N0Q2FwcyBtYXRjaGVzIHRoZSBkYXRhIHN0cmVhbS4KKyAqCisgKiBTaW5jZTogMC4xMC4yNgorICovCitHc3RDYXBzICoKK2dzdF90eXBlX2ZpbmRfaGVscGVyX2dldF9yYW5nZV9leHQgKEdzdE9iamVjdCAqIG9iaiwKKyAgICBHc3RUeXBlRmluZEhlbHBlckdldFJhbmdlRnVuY3Rpb24gZnVuYywgZ3VpbnQ2NCBzaXplLAorICAgIGNvbnN0IGdjaGFyICogZXh0ZW5zaW9uLCBHc3RUeXBlRmluZFByb2JhYmlsaXR5ICogcHJvYikKK3sKKyAgR3N0VHlwZUZpbmRIZWxwZXIgaGVscGVyOworICBHc3RUeXBlRmluZCBmaW5kOworICBHU0xpc3QgKndhbGs7CisgIEdMaXN0ICpsLCAqdHlwZV9saXN0OworICBHc3RDYXBzICpyZXN1bHQgPSBOVUxMOworICBnaW50IHBvcyA9IDA7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19PQkpFQ1QgKG9iaiksIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoZnVuYyAhPSBOVUxMLCBOVUxMKTsKKworICBoZWxwZXIuYnVmZmVycyA9IE5VTEw7CisgIGhlbHBlci5zaXplID0gc2l6ZTsKKyAgaGVscGVyLmxhc3Rfb2Zmc2V0ID0gMDsKKyAgaGVscGVyLmZ1bmMgPSBmdW5jOworICBoZWxwZXIuYmVzdF9wcm9iYWJpbGl0eSA9IEdTVF9UWVBFX0ZJTkRfTk9ORTsKKyAgaGVscGVyLmNhcHMgPSBOVUxMOworICBoZWxwZXIub2JqID0gb2JqOworCisgIGZpbmQuZGF0YSA9ICZoZWxwZXI7CisgIGZpbmQucGVlayA9IGhlbHBlcl9maW5kX3BlZWs7CisgIGZpbmQuc3VnZ2VzdCA9IGhlbHBlcl9maW5kX3N1Z2dlc3Q7CisKKyAgaWYgKHNpemUgPT0gMCB8fCBzaXplID09IChndWludDY0KSAtIDEpIHsKKyAgICBmaW5kLmdldF9sZW5ndGggPSBOVUxMOworICB9IGVsc2UgeworICAgIGZpbmQuZ2V0X2xlbmd0aCA9IGhlbHBlcl9maW5kX2dldF9sZW5ndGg7CisgIH0KKworICB0eXBlX2xpc3QgPSBnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2xpc3QgKCk7CisKKyAgLyogbW92ZSB0aGUgdHlwZWZpbmRlcnMgZm9yIHRoZSBleHRlbnNpb24gZmlyc3QgaW4gdGhlIGxpc3QuIFRoZSBpZGVhIGlzIHRoYXQKKyAgICogd2hlbiBvbmUgb2YgdGhlbSByZXR1cm5zIE1BWCB3ZSBkb24ndCBuZWVkIHRvIHNlYXJjaCBmdXJ0aGVyIGFzIHRoZXJlIGlzIGEKKyAgICogdmVyeSBoaWdoIGNoYW5jZSB3ZSBnb3QgdGhlIHJpZ2h0IHR5cGUuICovCisgIGlmIChleHRlbnNpb24pIHsKKyAgICBHTGlzdCAqbmV4dDsKKworICAgIEdTVF9MT0dfT0JKRUNUIChvYmosICJzb3J0aW5nIHR5cGVmaW5kIGZvciBleHRlbnNpb24gJXMgdG8gaGVhZCIsCisgICAgICAgIGV4dGVuc2lvbik7CisKKyAgICBmb3IgKGwgPSB0eXBlX2xpc3Q7IGw7IGwgPSBuZXh0KSB7CisgICAgICBHc3RUeXBlRmluZEZhY3RvcnkgKmZhY3Rvcnk7CisgICAgICBnaW50IGk7CisgICAgICBnY2hhciAqKmV4dDsKKworICAgICAgbmV4dCA9IGwtPm5leHQ7CisKKyAgICAgIGZhY3RvcnkgPSBHU1RfVFlQRV9GSU5EX0ZBQ1RPUlkgKGwtPmRhdGEpOworCisgICAgICBleHQgPSBnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2V4dGVuc2lvbnMgKGZhY3RvcnkpOworICAgICAgaWYgKGV4dCA9PSBOVUxMKQorICAgICAgICBjb250aW51ZTsKKworICAgICAgR1NUX0xPR19PQkpFQ1QgKG9iaiwgInRlc3RpbmcgZmFjdG9yeSAlcyBmb3IgZXh0ZW5zaW9uICVzIiwKKyAgICAgICAgICBHU1RfT0JKRUNUX05BTUUgKGZhY3RvcnkpLCBleHRlbnNpb24pOworCisgICAgICBmb3IgKGkgPSAwOyBleHRbaV07IGkrKykgeworICAgICAgICBpZiAoc3RyY21wIChleHRbaV0sIGV4dGVuc2lvbikgPT0gMCkgeworICAgICAgICAgIC8qIGZvdW5kIGV4dGVuc2lvbiwgbW92ZSBpbiBmcm9udCAqLworICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChvYmosICJtb3ZpbmcgdHlwZWZpbmQgZm9yIGV4dGVuc2lvbiAlcyB0byBoZWFkIiwKKyAgICAgICAgICAgICAgZXh0ZW5zaW9uKTsKKyAgICAgICAgICAvKiByZW1vdmUgZW50cnkgZnJvbSBsaXN0ICovCisgICAgICAgICAgdHlwZV9saXN0ID0gZ19saXN0X2RlbGV0ZV9saW5rICh0eXBlX2xpc3QsIGwpOworICAgICAgICAgIC8qIGluc2VydCBhdCB0aGUgcG9zaXRpb24gKi8KKyAgICAgICAgICB0eXBlX2xpc3QgPSBnX2xpc3RfaW5zZXJ0ICh0eXBlX2xpc3QsIGZhY3RvcnksIHBvcyk7CisgICAgICAgICAgLyogbmV4dCBlbGVtZW50IHdpbGwgYmUgaW5zZXJ0ZWQgYWZ0ZXIgdGhpcyBvbmUgKi8KKyAgICAgICAgICBwb3MrKzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIGZvciAobCA9IHR5cGVfbGlzdDsgbDsgbCA9IGwtPm5leHQpIHsKKyAgICBoZWxwZXIuZmFjdG9yeSA9IEdTVF9UWVBFX0ZJTkRfRkFDVE9SWSAobC0+ZGF0YSk7CisgICAgZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2NhbGxfZnVuY3Rpb24gKGhlbHBlci5mYWN0b3J5LCAmZmluZCk7CisgICAgaWYgKGhlbHBlci5iZXN0X3Byb2JhYmlsaXR5ID49IEdTVF9UWVBFX0ZJTkRfTUFYSU1VTSkKKyAgICAgIGJyZWFrOworICB9CisgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUgKHR5cGVfbGlzdCk7CisKKyAgZm9yICh3YWxrID0gaGVscGVyLmJ1ZmZlcnM7IHdhbGs7IHdhbGsgPSB3YWxrLT5uZXh0KQorICAgIGdzdF9idWZmZXJfdW5yZWYgKEdTVF9CVUZGRVJfQ0FTVCAod2Fsay0+ZGF0YSkpOworICBnX3NsaXN0X2ZyZWUgKGhlbHBlci5idWZmZXJzKTsKKworICBpZiAoaGVscGVyLmJlc3RfcHJvYmFiaWxpdHkgPiAwKQorICAgIHJlc3VsdCA9IGhlbHBlci5jYXBzOworCisgIGlmIChwcm9iKQorICAgICpwcm9iID0gaGVscGVyLmJlc3RfcHJvYmFiaWxpdHk7CisKKyAgR1NUX0xPR19PQkpFQ1QgKG9iaiwgIlJldHVybmluZyAlIiBHU1RfUFRSX0ZPUk1BVCAiIChwcm9iYWJpbGl0eSA9ICV1KSIsCisgICAgICByZXN1bHQsIChndWludCkgaGVscGVyLmJlc3RfcHJvYmFiaWxpdHkpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZ3N0X3R5cGVfZmluZF9oZWxwZXJfZ2V0X3JhbmdlOgorICogQG9iajogQSAjR3N0T2JqZWN0IHRoYXQgd2lsbCBiZSBwYXNzZWQgYXMgZmlyc3QgYXJndW1lbnQgdG8gQGZ1bmMKKyAqIEBmdW5jOiAoc2NvcGUgY2FsbCk6IEEgZ2VuZXJpYyAjR3N0VHlwZUZpbmRIZWxwZXJHZXRSYW5nZUZ1bmN0aW9uIHRoYXQgd2lsbAorICogICAgICAgIGJlIHVzZWQgdG8gYWNjZXNzIGRhdGEgYXQgcmFuZG9tIG9mZnNldHMgd2hlbiBkb2luZyB0aGUgdHlwZWZpbmRpbmcKKyAqIEBzaXplOiBUaGUgbGVuZ3RoIGluIGJ5dGVzCisgKiBAcHJvYjogKG91dCkgKGFsbG93LW5vbmUpOiBsb2NhdGlvbiB0byBzdG9yZSB0aGUgcHJvYmFiaWxpdHkgb2YgdGhlIGZvdW5kCisgKiAgICAgY2Fwcywgb3IgI05VTEwKKyAqCisgKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGRvIHB1bGwtYmFzZWQgdHlwZWZpbmRpbmcuIFVubGlrZSBnc3RfdHlwZV9maW5kX2hlbHBlcigpCisgKiBob3dldmVyLCB0aGlzIGZ1bmN0aW9uIHdpbGwgdXNlIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gQGZ1bmMgdG8gb2J0YWluIHRoZQorICogZGF0YSBuZWVkZWQgYnkgdGhlIHR5cGVmaW5kIGZ1bmN0aW9ucywgcmF0aGVyIHRoYW4gb3BlcmF0aW5nIG9uIGEgZ2l2ZW4KKyAqIHNvdXJjZSBwYWQuIFRoaXMgaXMgdXNlZnVsIG1vc3RseSBmb3IgZWxlbWVudHMgbGlrZSB0YWcgZGVtdXhlcnMgd2hpY2gKKyAqIHN0cmlwIG9mZiBkYXRhIGF0IHRoZSBiZWdpbm5pbmcgYW5kL29yIGVuZCBvZiBhIGZpbGUgYW5kIHdhbnQgdG8gdHlwZWZpbmQKKyAqIHRoZSBzdHJpcHBlZCBkYXRhIHN0cmVhbSBiZWZvcmUgYWRkaW5nIHRoZWlyIG93biBzb3VyY2UgcGFkICh0aGUgc3BlY2lmaWVkCisgKiBjYWxsYmFjayBjYW4gdGhlbiBjYWxsIHRoZSB1cHN0cmVhbSBwZWVyIHBhZCB3aXRoIG9mZnNldHMgYWRqdXN0ZWQgZm9yIHRoZQorICogdGFnIHNpemUsIGZvciBleGFtcGxlKS4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnc3RfY2Fwc191bnJlZgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RDYXBzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRhdGEgc3RyZWFtLgorICogICAgIFJldHVybnMgI05VTEwgaWYgbm8gI0dzdENhcHMgbWF0Y2hlcyB0aGUgZGF0YSBzdHJlYW0uCisgKi8KK0dzdENhcHMgKgorZ3N0X3R5cGVfZmluZF9oZWxwZXJfZ2V0X3JhbmdlIChHc3RPYmplY3QgKiBvYmosCisgICAgR3N0VHlwZUZpbmRIZWxwZXJHZXRSYW5nZUZ1bmN0aW9uIGZ1bmMsIGd1aW50NjQgc2l6ZSwKKyAgICBHc3RUeXBlRmluZFByb2JhYmlsaXR5ICogcHJvYikKK3sKKyAgcmV0dXJuIGdzdF90eXBlX2ZpbmRfaGVscGVyX2dldF9yYW5nZV9leHQgKG9iaiwgZnVuYywgc2l6ZSwgTlVMTCwgcHJvYik7Cit9CisKKy8qKgorICogZ3N0X3R5cGVfZmluZF9oZWxwZXI6CisgKiBAc3JjOiBBIHNvdXJjZSAjR3N0UGFkCisgKiBAc2l6ZTogVGhlIGxlbmd0aCBpbiBieXRlcworICoKKyAqIFRyaWVzIHRvIGZpbmQgd2hhdCB0eXBlIG9mIGRhdGEgaXMgZmxvd2luZyBmcm9tIHRoZSBnaXZlbiBzb3VyY2UgI0dzdFBhZC4KKyAqCisgKiBGcmVlLWZ1bmN0aW9uOiBnc3RfY2Fwc191bnJlZgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RDYXBzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRhdGEgc3RyZWFtLgorICogICAgIFJldHVybnMgI05VTEwgaWYgbm8gI0dzdENhcHMgbWF0Y2hlcyB0aGUgZGF0YSBzdHJlYW0uCisgKi8KKworR3N0Q2FwcyAqCitnc3RfdHlwZV9maW5kX2hlbHBlciAoR3N0UGFkICogc3JjLCBndWludDY0IHNpemUpCit7CisgIEdzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbiBmdW5jOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfT0JKRUNUIChzcmMpLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9QQURfR0VUUkFOR0VGVU5DIChzcmMpICE9IE5VTEwsIE5VTEwpOworCisgIGZ1bmMgPSAoR3N0VHlwZUZpbmRIZWxwZXJHZXRSYW5nZUZ1bmN0aW9uKSAoR1NUX1BBRF9HRVRSQU5HRUZVTkMgKHNyYykpOworCisgIHJldHVybiBnc3RfdHlwZV9maW5kX2hlbHBlcl9nZXRfcmFuZ2UgKEdTVF9PQkpFQ1QgKHNyYyksIGZ1bmMsIHNpemUsIE5VTEwpOworfQorCisvKiAqKioqKioqKioqKioqKioqKioqKioqIHR5cGVmaW5kaW5nIGZvciBidWZmZXJzICoqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgY29uc3QgZ3VpbnQ4ICpkYXRhOyAgICAgICAgICAgLyogYnVmZmVyIGRhdGEgKi8KKyAgZ3NpemUgc2l6ZTsKKyAgR3N0VHlwZUZpbmRQcm9iYWJpbGl0eSBiZXN0X3Byb2JhYmlsaXR5OworICBHc3RDYXBzICpjYXBzOworICBHc3RUeXBlRmluZEZhY3RvcnkgKmZhY3Rvcnk7ICAvKiBmb3IgbG9nZ2luZyAqLworICBHc3RPYmplY3QgKm9iajsgICAgICAgICAgICAgICAvKiBmb3IgbG9nZ2luZyAqLworfSBHc3RUeXBlRmluZEJ1ZkhlbHBlcjsKKworLyoKKyAqIGJ1Zl9oZWxwZXJfZmluZF9wZWVrOgorICogQGRhdGE6IGhlbHBlciBkYXRhIHN0cnVjdAorICogQG9mZjogc3RyZWFtIG9mZnNldAorICogQHNpemU6IGJsb2NrIHNpemUKKyAqCisgKiBHZXQgZGF0YSBwb2ludGVyIHdpdGhpbiBhIGJ1ZmZlci4KKyAqCisgKiBSZXR1cm5zOiBhZGRyZXNzIGluc2lkZSB0aGUgYnVmZmVyIG9yICVOVUxMIGlmIGJ1ZmZlciBkb2VzIG5vdCBjb3ZlciB0aGUKKyAqIHJlcXVlc3RlZCByYW5nZS4KKyAqLworc3RhdGljIGNvbnN0IGd1aW50OCAqCitidWZfaGVscGVyX2ZpbmRfcGVlayAoZ3BvaW50ZXIgZGF0YSwgZ2ludDY0IG9mZiwgZ3VpbnQgc2l6ZSkKK3sKKyAgR3N0VHlwZUZpbmRCdWZIZWxwZXIgKmhlbHBlcjsKKworICBoZWxwZXIgPSAoR3N0VHlwZUZpbmRCdWZIZWxwZXIgKikgZGF0YTsKKyAgR1NUX0xPR19PQkpFQ1QgKGhlbHBlci0+b2JqLCAiJyVzJyBjYWxsZWQgcGVlayAoJSIgR19HSU5UNjRfRk9STUFUICIsICV1KSIsCisgICAgICBHU1RfT0JKRUNUX05BTUUgKGhlbHBlci0+ZmFjdG9yeSksIG9mZiwgc2l6ZSk7CisKKyAgaWYgKHNpemUgPT0gMCkKKyAgICByZXR1cm4gTlVMTDsKKworICBpZiAob2ZmIDwgMCkgeworICAgIEdTVF9MT0dfT0JKRUNUIChoZWxwZXItPm9iaiwgIiclcycgd2FudGVkIHRvIHBlZWsgYXQgZW5kOyBub3Qgc3VwcG9ydGVkIiwKKyAgICAgICAgR1NUX09CSkVDVF9OQU1FIChoZWxwZXItPmZhY3RvcnkpKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIGlmICgob2ZmICsgc2l6ZSkgPD0gaGVscGVyLT5zaXplKQorICAgIHJldHVybiBoZWxwZXItPmRhdGEgKyBvZmY7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBidWZfaGVscGVyX2ZpbmRfc3VnZ2VzdDoKKyAqIEBkYXRhOiBoZWxwZXIgZGF0YSBzdHJ1Y3QKKyAqIEBwcm9iYWJpbGl0eTogcHJvYmFiaWxpdHkgb2YgdGhlIG1hdGNoCisgKiBAY2FwczogY2FwcyBvZiB0aGUgdHlwZQorICoKKyAqIElmIGdpdmVuIEBwcm9iYWJpbGl0eSBpcyBoaWdoZXIsIHJlcGxhY2UgcHJldmlvdXNseSBzdG9yZSBjYXBzLgorICovCitzdGF0aWMgdm9pZAorYnVmX2hlbHBlcl9maW5kX3N1Z2dlc3QgKGdwb2ludGVyIGRhdGEsIEdzdFR5cGVGaW5kUHJvYmFiaWxpdHkgcHJvYmFiaWxpdHksCisgICAgY29uc3QgR3N0Q2FwcyAqIGNhcHMpCit7CisgIEdzdFR5cGVGaW5kQnVmSGVscGVyICpoZWxwZXIgPSAoR3N0VHlwZUZpbmRCdWZIZWxwZXIgKikgZGF0YTsKKworICBHU1RfTE9HX09CSkVDVCAoaGVscGVyLT5vYmosCisgICAgICAiJyVzJyBjYWxsZWQgc3VnZ2VzdCAoJXUsICUiIEdTVF9QVFJfRk9STUFUICIpIiwKKyAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoaGVscGVyLT5mYWN0b3J5KSwgcHJvYmFiaWxpdHksIGNhcHMpOworCisgIC8qIE5vdGU6IG5vdCA+PSBhcyB3ZSBjYWxsIHR5cGVmaW5kZXJzIGluIG9yZGVyIG9mIHJhbmssIGhpZ2hlc3QgZmlyc3QgKi8KKyAgaWYgKHByb2JhYmlsaXR5ID4gaGVscGVyLT5iZXN0X3Byb2JhYmlsaXR5KSB7CisgICAgR3N0Q2FwcyAqY29weSA9IGdzdF9jYXBzX2NvcHkgKGNhcHMpOworCisgICAgZ3N0X2NhcHNfcmVwbGFjZSAoJmhlbHBlci0+Y2FwcywgY29weSk7CisgICAgZ3N0X2NhcHNfdW5yZWYgKGNvcHkpOworICAgIGhlbHBlci0+YmVzdF9wcm9iYWJpbGl0eSA9IHByb2JhYmlsaXR5OworICB9Cit9CisKKy8qKgorICogZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2RhdGE6CisgKiBAb2JqOiBvYmplY3QgZG9pbmcgdGhlIHR5cGVmaW5kaW5nLCBvciBOVUxMICh1c2VkIGZvciBsb2dnaW5nKQorICogQGRhdGE6IChpbikgKHRyYW5zZmVyIG5vbmUpOiBhIHBvaW50ZXIgd2l0aCBkYXRhIHRvIHR5cGVmaW5kCisgKiBAc2l6ZTogKGluKSAodHJhbnNmZXIgbm9uZSk6IHRoZSBzaXplIG9mIEBkYXRhCisgKiBAcHJvYjogKG91dCkgKGFsbG93LW5vbmUpOiBsb2NhdGlvbiB0byBzdG9yZSB0aGUgcHJvYmFiaWxpdHkgb2YgdGhlIGZvdW5kCisgKiAgICAgY2Fwcywgb3IgI05VTEwKKyAqCisgKiBUcmllcyB0byBmaW5kIHdoYXQgdHlwZSBvZiBkYXRhIGlzIGNvbnRhaW5lZCBpbiB0aGUgZ2l2ZW4gQGRhdGEsIHRoZQorICogYXNzdW1wdGlvbiBiZWluZyB0aGF0IHRoZSBkYXRhIHJlcHJlc2VudHMgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyZWFtIG9yCisgKiBmaWxlLgorICoKKyAqIEFsbCBhdmFpbGFibGUgdHlwZWZpbmRlcnMgd2lsbCBiZSBjYWxsZWQgb24gdGhlIGRhdGEgaW4gb3JkZXIgb2YgcmFuay4gSWYKKyAqIGEgdHlwZWZpbmRpbmcgZnVuY3Rpb24gcmV0dXJucyBhIHByb2JhYmlsaXR5IG9mICNHU1RfVFlQRV9GSU5EX01BWElNVU0sCisgKiB0eXBlZmluZGluZyBpcyBzdG9wcGVkIGltbWVkaWF0ZWx5IGFuZCB0aGUgZm91bmQgY2FwcyB3aWxsIGJlIHJldHVybmVkCisgKiByaWdodCBhd2F5LiBPdGhlcndpc2UsIGFsbCBhdmFpbGFibGUgdHlwZWZpbmQgZnVuY3Rpb25zIHdpbGwgdGhlIHRyaWVkLAorICogYW5kIHRoZSBjYXBzIHdpdGggdGhlIGhpZ2hlc3QgcHJvYmFiaWxpdHkgd2lsbCBiZSByZXR1cm5lZCwgb3IgI05VTEwgaWYKKyAqIHRoZSBjb250ZW50IG9mIEBkYXRhIGNvdWxkIG5vdCBiZSBpZGVudGlmaWVkLgorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdzdF9jYXBzX3VucmVmCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdENhcHMgY29ycmVzcG9uZGluZyB0byB0aGUgZGF0YSwgb3IgI05VTEwKKyAqICAgICBpZiBubyB0eXBlIGNvdWxkIGJlIGZvdW5kLiBUaGUgY2FsbGVyIHNob3VsZCBmcmVlIHRoZSBjYXBzIHJldHVybmVkCisgKiAgICAgd2l0aCBnc3RfY2Fwc191bnJlZigpLgorICovCitHc3RDYXBzICoKK2dzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9kYXRhIChHc3RPYmplY3QgKiBvYmosIGNvbnN0IGd1aW50OCAqIGRhdGEsIGdzaXplIHNpemUsCisgICAgR3N0VHlwZUZpbmRQcm9iYWJpbGl0eSAqIHByb2IpCit7CisgIEdzdFR5cGVGaW5kQnVmSGVscGVyIGhlbHBlcjsKKyAgR3N0VHlwZUZpbmQgZmluZDsKKyAgR0xpc3QgKmwsICp0eXBlX2xpc3Q7CisgIEdzdENhcHMgKnJlc3VsdCA9IE5VTEw7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRhdGEgIT0gTlVMTCwgTlVMTCk7CisKKyAgaGVscGVyLmRhdGEgPSBkYXRhOworICBoZWxwZXIuc2l6ZSA9IHNpemU7CisgIGhlbHBlci5iZXN0X3Byb2JhYmlsaXR5ID0gR1NUX1RZUEVfRklORF9OT05FOworICBoZWxwZXIuY2FwcyA9IE5VTEw7CisgIGhlbHBlci5vYmogPSBvYmo7CisKKyAgaWYgKGhlbHBlci5kYXRhID09IE5VTEwgfHwgaGVscGVyLnNpemUgPT0gMCkKKyAgICByZXR1cm4gTlVMTDsKKworICBmaW5kLmRhdGEgPSAmaGVscGVyOworICBmaW5kLnBlZWsgPSBidWZfaGVscGVyX2ZpbmRfcGVlazsKKyAgZmluZC5zdWdnZXN0ID0gYnVmX2hlbHBlcl9maW5kX3N1Z2dlc3Q7CisgIGZpbmQuZ2V0X2xlbmd0aCA9IE5VTEw7CisKKyAgdHlwZV9saXN0ID0gZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9saXN0ICgpOworCisgIGZvciAobCA9IHR5cGVfbGlzdDsgbDsgbCA9IGwtPm5leHQpIHsKKyAgICBoZWxwZXIuZmFjdG9yeSA9IEdTVF9UWVBFX0ZJTkRfRkFDVE9SWSAobC0+ZGF0YSk7CisgICAgZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2NhbGxfZnVuY3Rpb24gKGhlbHBlci5mYWN0b3J5LCAmZmluZCk7CisgICAgaWYgKGhlbHBlci5iZXN0X3Byb2JhYmlsaXR5ID49IEdTVF9UWVBFX0ZJTkRfTUFYSU1VTSkKKyAgICAgIGJyZWFrOworICB9CisgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUgKHR5cGVfbGlzdCk7CisKKyAgaWYgKGhlbHBlci5iZXN0X3Byb2JhYmlsaXR5ID4gMCkKKyAgICByZXN1bHQgPSBoZWxwZXIuY2FwczsKKworICBpZiAocHJvYikKKyAgICAqcHJvYiA9IGhlbHBlci5iZXN0X3Byb2JhYmlsaXR5OworCisgIEdTVF9MT0dfT0JKRUNUIChvYmosICJSZXR1cm5pbmcgJSIgR1NUX1BUUl9GT1JNQVQgIiAocHJvYmFiaWxpdHkgPSAldSkiLAorICAgICAgcmVzdWx0LCAoZ3VpbnQpIGhlbHBlci5iZXN0X3Byb2JhYmlsaXR5KTsKKworICByZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9idWZmZXI6CisgKiBAb2JqOiBvYmplY3QgZG9pbmcgdGhlIHR5cGVmaW5kaW5nLCBvciBOVUxMICh1c2VkIGZvciBsb2dnaW5nKQorICogQGJ1ZjogKGluKSAodHJhbnNmZXIgbm9uZSk6IGEgI0dzdEJ1ZmZlciB3aXRoIGRhdGEgdG8gdHlwZWZpbmQKKyAqIEBwcm9iOiAob3V0KSAoYWxsb3ctbm9uZSk6IGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBwcm9iYWJpbGl0eSBvZiB0aGUgZm91bmQKKyAqICAgICBjYXBzLCBvciAjTlVMTAorICoKKyAqIFRyaWVzIHRvIGZpbmQgd2hhdCB0eXBlIG9mIGRhdGEgaXMgY29udGFpbmVkIGluIHRoZSBnaXZlbiAjR3N0QnVmZmVyLCB0aGUKKyAqIGFzc3VtcHRpb24gYmVpbmcgdGhhdCB0aGUgYnVmZmVyIHJlcHJlc2VudHMgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyZWFtIG9yCisgKiBmaWxlLgorICoKKyAqIEFsbCBhdmFpbGFibGUgdHlwZWZpbmRlcnMgd2lsbCBiZSBjYWxsZWQgb24gdGhlIGRhdGEgaW4gb3JkZXIgb2YgcmFuay4gSWYKKyAqIGEgdHlwZWZpbmRpbmcgZnVuY3Rpb24gcmV0dXJucyBhIHByb2JhYmlsaXR5IG9mICNHU1RfVFlQRV9GSU5EX01BWElNVU0sCisgKiB0eXBlZmluZGluZyBpcyBzdG9wcGVkIGltbWVkaWF0ZWx5IGFuZCB0aGUgZm91bmQgY2FwcyB3aWxsIGJlIHJldHVybmVkCisgKiByaWdodCBhd2F5LiBPdGhlcndpc2UsIGFsbCBhdmFpbGFibGUgdHlwZWZpbmQgZnVuY3Rpb25zIHdpbGwgdGhlIHRyaWVkLAorICogYW5kIHRoZSBjYXBzIHdpdGggdGhlIGhpZ2hlc3QgcHJvYmFiaWxpdHkgd2lsbCBiZSByZXR1cm5lZCwgb3IgI05VTEwgaWYKKyAqIHRoZSBjb250ZW50IG9mIHRoZSBidWZmZXIgY291bGQgbm90IGJlIGlkZW50aWZpZWQuCisgKgorICogRnJlZS1mdW5jdGlvbjogZ3N0X2NhcHNfdW5yZWYKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0Q2FwcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBkYXRhLCBvciAjTlVMTAorICogICAgIGlmIG5vIHR5cGUgY291bGQgYmUgZm91bmQuIFRoZSBjYWxsZXIgc2hvdWxkIGZyZWUgdGhlIGNhcHMgcmV0dXJuZWQKKyAqICAgICB3aXRoIGdzdF9jYXBzX3VucmVmKCkuCisgKi8KK0dzdENhcHMgKgorZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2J1ZmZlciAoR3N0T2JqZWN0ICogb2JqLCBHc3RCdWZmZXIgKiBidWYsCisgICAgR3N0VHlwZUZpbmRQcm9iYWJpbGl0eSAqIHByb2IpCit7CisgIEdzdENhcHMgKnJlc3VsdDsKKyAgZ3VpbnQ4ICpkYXRhOworICBnc2l6ZSBzaXplOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChidWYgIT0gTlVMTCwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVGRkVSIChidWYpLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpID09IDAgfHwKKyAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpID09IEdTVF9CVUZGRVJfT0ZGU0VUX05PTkUsIE5VTEwpOworCisgIGRhdGEgPSBnc3RfYnVmZmVyX21hcCAoYnVmLCAmc2l6ZSwgTlVMTCwgR1NUX01BUF9SRUFEKTsKKyAgcmVzdWx0ID0gZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2RhdGEgKG9iaiwgZGF0YSwgc2l6ZSwgcHJvYik7CisgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgZGF0YSwgc2l6ZSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBnc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfZXh0ZW5zaW9uOgorICogQG9iajogKGFsbG93LW5vbmUpOiBvYmplY3QgZG9pbmcgdGhlIHR5cGVmaW5kaW5nLCBvciBOVUxMICh1c2VkIGZvciBsb2dnaW5nKQorICogQGV4dGVuc2lvbjogYW4gZXh0ZW5zaW9uCisgKgorICogVHJpZXMgdG8gZmluZCB0aGUgYmVzdCAjR3N0Q2FwcyBhc3NvY2lhdGVkIHdpdGggQGV4dGVuc2lvbi4KKyAqCisgKiBBbGwgYXZhaWxhYmxlIHR5cGVmaW5kZXJzIHdpbGwgYmUgY2hlY2tlZCBhZ2FpbnN0IHRoZSBleHRlbnNpb24gaW4gb3JkZXIKKyAqIG9mIHJhbmsuIFRoZSBjYXBzIG9mIHRoZSBmaXJzdCB0eXBlZmluZGVyIHRoYXQgY2FuIGhhbmRsZSBAZXh0ZW5zaW9uIHdpbGwgYmUKKyAqIHJldHVybmVkLgorICoKKyAqIEZyZWUtZnVuY3Rpb246IGdzdF9jYXBzX3VucmVmCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdENhcHMgY29ycmVzcG9uZGluZyB0byBAZXh0ZW5zaW9uLCBvcgorICogICAgICNOVUxMIGlmIG5vIHR5cGUgY291bGQgYmUgZm91bmQuIFRoZSBjYWxsZXIgc2hvdWxkIGZyZWUgdGhlIGNhcHMKKyAqICAgICByZXR1cm5lZCB3aXRoIGdzdF9jYXBzX3VucmVmKCkuCisgKiAKKyAqIFNpbmNlOiAwLjEwLjIzCisgKi8KK0dzdENhcHMgKgorZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2V4dGVuc2lvbiAoR3N0T2JqZWN0ICogb2JqLCBjb25zdCBnY2hhciAqIGV4dGVuc2lvbikKK3sKKyAgR0xpc3QgKmwsICp0eXBlX2xpc3Q7CisgIEdzdENhcHMgKnJlc3VsdCA9IE5VTEw7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGV4dGVuc2lvbiAhPSBOVUxMLCBOVUxMKTsKKworICBHU1RfTE9HX09CSkVDVCAob2JqLCAiZmluZGluZyBjYXBzIGZvciBleHRlbnNpb24gJXMiLCBleHRlbnNpb24pOworCisgIHR5cGVfbGlzdCA9IGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfbGlzdCAoKTsKKworICBmb3IgKGwgPSB0eXBlX2xpc3Q7IGw7IGwgPSBnX2xpc3RfbmV4dCAobCkpIHsKKyAgICBHc3RUeXBlRmluZEZhY3RvcnkgKmZhY3Rvcnk7CisgICAgZ2NoYXIgKipleHQ7CisgICAgZ2ludCBpOworCisgICAgZmFjdG9yeSA9IEdTVF9UWVBFX0ZJTkRfRkFDVE9SWSAobC0+ZGF0YSk7CisKKyAgICAvKiB3ZSBvbmx5IHdhbnQgdG8gY2hlY2sgdGhvc2UgZmFjdG9yaWVzIHdpdGhvdXQgYSBmdW5jdGlvbiAqLworICAgIGlmIChmYWN0b3J5LT5mdW5jdGlvbiAhPSBOVUxMKQorICAgICAgY29udGludWU7CisKKyAgICAvKiBnZXQgdGhlIGV4dGVuc2lvbiB0aGF0IHRoaXMgdHlwZWZpbmQgZmFjdG9yeSBjYW4gaGFuZGxlICovCisgICAgZXh0ID0gZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9leHRlbnNpb25zIChmYWN0b3J5KTsKKyAgICBpZiAoZXh0ID09IE5VTEwpCisgICAgICBjb250aW51ZTsKKworICAgIC8qIHRoZXJlIGFyZSBleHRlbnNpb24sIHNlZSBpZiBvbmUgb2YgdGhlbSBtYXRjaGVzIHRoZSByZXF1ZXN0ZWQKKyAgICAgKiBleHRlbnNpb24gKi8KKyAgICBmb3IgKGkgPSAwOyBleHRbaV07IGkrKykgeworICAgICAgaWYgKHN0cmNtcCAoZXh0W2ldLCBleHRlbnNpb24pID09IDApIHsKKyAgICAgICAgLyogd2UgZm91bmQgYSBtYXRjaGluZyBleHRlbnNpb24sIHRha2UgdGhlIGNhcHMgKi8KKyAgICAgICAgaWYgKChyZXN1bHQgPSBnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2NhcHMgKGZhY3RvcnkpKSkgeworICAgICAgICAgIGdzdF9jYXBzX3JlZiAocmVzdWx0KTsKKyAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KK2RvbmU6CisgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUgKHR5cGVfbGlzdCk7CisKKyAgR1NUX0xPR19PQkpFQ1QgKG9iaiwgIlJldHVybmluZyAlIiBHU1RfUFRSX0ZPUk1BVCwgcmVzdWx0KTsKKworICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5oIGIvbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MmJjMTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmgKQEAgLTAsMCArMSw3OSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogQ29weXJpZ2h0IChDKSAyMDAwLDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNiAgICAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+CisgKgorICogZ3N0dHlwZWZpbmRoZWxwZXIuaDoKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fR1NUX1RZUEVGSU5ESEVMUEVSX0hfXworI2RlZmluZSBfX0dTVF9UWVBFRklOREhFTFBFUl9IX18KKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworR19CRUdJTl9ERUNMUworCitHc3RDYXBzICogZ3N0X3R5cGVfZmluZF9oZWxwZXIgKEdzdFBhZCAqc3JjLCBndWludDY0IHNpemUpOworCitHc3RDYXBzICogZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2RhdGEgICAoR3N0T2JqZWN0ICAgICAgICAgICAgICAqb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGd1aW50OCAgICAgICAgICAgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgICAgICAgICAgICAgICAgICAgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUeXBlRmluZFByb2JhYmlsaXR5ICpwcm9iKTsKK0dzdENhcHMgKiBnc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfYnVmZmVyIChHc3RPYmplY3QgICAgICAgICAgICAgICpvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyICAgICAgICAgICAgICAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFR5cGVGaW5kUHJvYmFiaWxpdHkgKnByb2IpOworCitHc3RDYXBzICogZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2V4dGVuc2lvbiAoR3N0T2JqZWN0ICogb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogZXh0ZW5zaW9uKTsKKworLyoqCisgKiBHc3RUeXBlRmluZEhlbHBlckdldFJhbmdlRnVuY3Rpb246CisgKiBAb2JqOiBhICNHc3RPYmplY3QgdGhhdCB3aWxsIGhhbmRsZSB0aGUgZ2V0cmFuZ2UgcmVxdWVzdAorICogQG9mZnNldDogdGhlIG9mZnNldCBvZiB0aGUgcmFuZ2UKKyAqIEBsZW5ndGg6IHRoZSBsZW5ndGggb2YgdGhlIHJhbmdlCisgKiBAYnVmZmVyOiBhIG1lbW9yeSBsb2NhdGlvbiB0byBob2xkIHRoZSByZXN1bHQgYnVmZmVyCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSBnc3RfdHlwZV9maW5kX2hlbHBlcl9nZXRfcmFuZ2UoKSB3aGVuCisgKiB0eXBlZmluZGluZyBmdW5jdGlvbnMgcmVxdWVzdCB0byBwZWVrIGF0IHRoZSBkYXRhIG9mIGEgc3RyZWFtIGF0IGNlcnRhaW4KKyAqIG9mZnNldHMuIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBHU1RfRkxPV19PSywgdGhlIHJlc3VsdCBidWZmZXIgd2lsbCBiZQorICogc3RvcmVkIGluIEBidWZmZXIuIFRoZSAgY29udGVudHMgb2YgQGJ1ZmZlciBpcyBpbnZhbGlkIGZvciBhbnkgb3RoZXIKKyAqIHJldHVybiB2YWx1ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlaGF2ZSBleGFjdGx5IGxpa2UgYSAjR3N0UGFkR2V0UmFuZ2VGdW5jdGlvbi4KKyAqCisgKiBSZXR1cm5zOiBHU1RfRkxPV19PSyBmb3Igc3VjY2VzcworICovCit0eXBlZGVmIEdzdEZsb3dSZXR1cm4gKCpHc3RUeXBlRmluZEhlbHBlckdldFJhbmdlRnVuY3Rpb24pIChHc3RPYmplY3QgICpvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDY0ICAgICBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCdWZmZXIgKipidWZmZXIpOworCitHc3RDYXBzICogZ3N0X3R5cGVfZmluZF9oZWxwZXJfZ2V0X3JhbmdlIChHc3RPYmplY3QgICAgICAgICAgICAgICAgICAgICAgICAqIG9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbiAgZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFR5cGVGaW5kUHJvYmFiaWxpdHkgICAgICAgICAgICAqcHJvYik7CisKK0dzdENhcHMgKiBnc3RfdHlwZV9maW5kX2hlbHBlcl9nZXRfcmFuZ2VfZXh0IChHc3RPYmplY3QgICAgICAgICAgICAgICAgICAgICAgICAqIG9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUeXBlRmluZEhlbHBlckdldFJhbmdlRnVuY3Rpb24gIGZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAgICAgICAqZXh0ZW5zaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFR5cGVGaW5kUHJvYmFiaWxpdHkgICAgICAgICAgICAqcHJvYik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9UWVBFRklOREhFTFBFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtIGIvbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QzMDgyYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMTU2IEBACitsaWJfTFRMSUJSQVJJRVMgPSBsaWJnc3RjaGVjay1AR1NUX01BSk9STUlOT1JALmxhCisKK1NZTUJPTFNfRklMRSA9IGV4cG9ydHMuc3ltCisKK0JVSUxUX1NPVVJDRVMgPSBpbnRlcm5hbC1jaGVjay5oCisKK2xpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGFfREVQRU5ERU5DSUVTID0gXAorCSQodG9wX2J1aWxkZGlyKS9nc3QvbGliZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCWludGVybmFsLWNoZWNrLmggXAorCSQoU1lNQk9MU19GSUxFKQorbGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQF9sYV9TT1VSQ0VTID0JXAorCWdzdGJ1ZmZlcnN0cmF3LmMJCQlcCisJZ3N0Y2hlY2suYwkJCQlcCisJZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmMKKworbGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKSBcCisJLUkkKHRvcF9idWlsZGRpcikvbGlicyBcCisJLUkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2sgXAorCS1JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrCitsaWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAX2xhX0xJQkFERCA9ICQoR1NUX09CSl9MSUJTKSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2xpYmNoZWNraW50ZXJuYWwubGEgXAorCSQoTElCTSkKK2xpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGFfTERGTEFHUyA9IFwKKwktZXhwb3J0LXN5bWJvbHMgJChTWU1CT0xTX0ZJTEUpICQoR1NUX0FMTF9MREZMQUdTKSAkKEdTVF9MVF9MREZMQUdTKQorCitsaWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAaW5jbHVkZWRpciA9CQlcCisJJChpbmNsdWRlZGlyKS9nc3RyZWFtZXItQEdTVF9NQUpPUk1JTk9SQC9nc3QvY2hlY2sKKworbGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVfSEVBREVSUyA9CSBcCisJZ3N0YnVmZmVyc3RyYXcuaAkJCVwKKwlnc3RjaGVjay5oCQkJCVwKKwlnc3Rjb25zaXN0ZW5jeWNoZWNrZXIuaAorCitub2Rpc3RfbGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVfSEVBREVSUyA9CVwKKwlpbnRlcm5hbC1jaGVjay5oCQorCitDTEVBTkZJTEVTID0gKi5nY25vICouZ2NkYSAqLmdjb3YgaW50ZXJuYWwtY2hlY2suaCAkKFNZTUJPTFNfRklMRSkKKworaW50ZXJuYWwtY2hlY2suaDogJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrLmgKKwkkKEFNX1ZfR0VOKWNwICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVjay5oIGludGVybmFsLWNoZWNrLmgKKworJS5jLmdjb3Y6IC5saWJzL2xpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGEtJS5nY2RhICUuYworCSQoR0NPVikgLWIgLWYgLW8gJF4gPiAkQC5vdXQKKworZ2NvdjogJChsaWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAX2xhX1NPVVJDRVM6PS5nY292KQorCitTVUJESVJTID0gbGliY2hlY2sKKworTElCR1NUQ0hFQ0tfRVhQT1JURURfVkFSUyA9IFwKKwlfZ3N0X2NoZWNrX3RocmVhZHNfcnVubmluZyBcCisJX2dzdF9jaGVja19yYWlzZWRfY3JpdGljYWwgXAorCV9nc3RfY2hlY2tfcmFpc2VkX3dhcm5pbmcgXAorCV9nc3RfY2hlY2tfZXhwZWN0aW5nX2xvZyBcCisJYnVmZmVycyBcCisJY2hlY2tfY29uZCBcCisJY2hlY2tfZGVidWcgXAorCWNoZWNrX211dGV4IFwKKwltdXRleCBcCisJc3RhcnRfY29uZCBcCisJc3luY19jb25kIFwKKwl0aHJlYWRfbGlzdAorCitMSUJHU1RDSEVDS19FWFBPUlRFRF9GVU5DUyA9IFwKKwlfZ3N0X2NoZWNrX3J1bl90ZXN0X2Z1bmMgXAorCWdzdF9idWZmZXJfc3RyYXdfZ2V0X2J1ZmZlciBcCisJZ3N0X2J1ZmZlcl9zdHJhd19zdGFydF9waXBlbGluZSBcCisJZ3N0X2J1ZmZlcl9zdHJhd19zdG9wX3BpcGVsaW5lIFwKKwlnc3RfY2hlY2tfYWJpX2xpc3QgXAorCWdzdF9jaGVja19jYXBzX2VxdWFsIFwKKwlnc3RfY2hlY2tfYnVmZmVyX2RhdGEgXAorCWdzdF9jaGVja19jaGFpbl9mdW5jIFwKKwlnc3RfY2hlY2tfZHJvcF9idWZmZXJzIFwKKwlnc3RfY2hlY2tfZWxlbWVudF9wdXNoX2J1ZmZlciBcCisJZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXJfbGlzdCBcCisJZ3N0X2NoZWNrX2luaXQgXAorCWdzdF9jaGVja19tZXNzYWdlX2Vycm9yIFwKKwlnc3RfY2hlY2tfcnVuX3N1aXRlIFwKKwlnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCBcCisJZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkIFwKKwlnc3RfY2hlY2tfc2V0dXBfc2lua19wYWRfYnlfbmFtZSBcCisJZ3N0X2NoZWNrX3NldHVwX3NyY19wYWQgXAorCWdzdF9jaGVja19zZXR1cF9zcmNfcGFkX2J5X25hbWUgXAorCWdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50IFwKKwlnc3RfY2hlY2tfdGVhcmRvd25fcGFkX2J5X25hbWUgXAorCWdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZCBcCisJZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQgXAorCWdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX25ldyBcCisJZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfcmVzZXQgXAorCWdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX2ZyZWUKKworTElCR1NUQ0hFQ0tfRVhQT1JURURfU1lNQk9MUyA9IFwKKwkkKExJQkdTVENIRUNLX0VYUE9SVEVEX1ZBUlMpIFwKKwkkKExJQkdTVENIRUNLX0VYUE9SVEVEX0ZVTkNTKQorCisjIFBsZWFzZSBkbyBub3QgZXZlbiB0aGluayBhYm91dCBjaGFuZ2luZyB0aGUgYWxwaGFiZXQgYmVsb3cgaW50byBBLVphLXouCisjIEl0IGlzIHRoZXJlIGZvciBwdXJwb3NlLiAoQnVnICM2MDIwOTMpCitDSEVDS19TWU1TPWAkKFNFRCkgLW4gLWUgJ3MvXi4uKkNLX0VYUE9SVFsgXVx7MSxcfVwoW18wLTlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XVx7MSxcfVwpLi4qJCQvXDEvcCcgQHRvcF9zcmNkaXJAL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrLmguaW5gCitwcmludC1jaGVjay1zeW1ib2xzOgorCUBmb3IgcyBpbiAkKENIRUNLX1NZTVMpOyBkbyBcCisJICBlY2hvICQkczsgXAorCWRvbmU7CisKKyQoU1lNQk9MU19GSUxFKToKKwkkKEFNX1ZfR0VOKXJtIC1mICQoU1lNQk9MU19GSUxFKSAyPi9kZXYvbnVsbDsgXAorCWZvciBzIGluICQoTElCR1NUQ0hFQ0tfRVhQT1JURURfU1lNQk9MUykgJChDSEVDS19TWU1TKTsgZG8gXAorCSAgZWNobyAkJHMgPj4gJChTWU1CT0xTX0ZJTEUpOyBcCisJZG9uZQorCitpZiBIQVZFX0lOVFJPU1BFQ1RJT04KK0JVSUxUX0dJUlNPVVJDRVMgPSBHc3RDaGVjay1AR1NUX01BSk9STUlOT1JALmdpcgorCitnaXJfaGVhZGVycz0kKHBhdHN1YnN0ICUsJChzcmNkaXIpLyUsICQobGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVfSEVBREVSUykpIFwKKyAgICAkKHBhdHN1YnN0ICUsJChidWlsZGRpcikvJSwgJChub2Rpc3RfbGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVfSEVBREVSUykpCitnaXJfc291cmNlcz0kKHBhdHN1YnN0ICUsJChzcmNkaXIpLyUsICQobGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQF9sYV9TT1VSQ0VTKSkKK2dpcl9jaW5jbHVkZXM9JChwYXRzdWJzdCAlLC0tYy1pbmNsdWRlPSdnc3QvY2hlY2svJScsJChsaWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAaW5jbHVkZV9IRUFERVJTKSkgXAorICAgICQocGF0c3Vic3QgJSwtLWMtaW5jbHVkZT0nZ3N0L2NoZWNrLyUnLCQobm9kaXN0X2xpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlX0hFQURFUlMpKQorCitHc3RDaGVjay1AR1NUX01BSk9STUlOT1JALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGEKKwkkKEFNX1ZfR0VOKVBLR19DT05GSUdfUEFUSD0iJChHU1RfUEtHX0NPTkZJR19QQVRIKSIgXAorCQlHU1RfUExVR0lOX1NZU1RFTV9QQVRIPSIiIEdTVF9QTFVHSU5fUEFUSD0iIiBHU1RfUkVHSVNUUllfVVBEQVRFPW5vIFwKKwkJJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIC12IC0tbmFtZXNwYWNlIEdzdENoZWNrIFwKKwkJLS1uc3ZlcnNpb249QEdTVF9NQUpPUk1JTk9SQCBcCisJCS0tc3RyaXAtcHJlZml4PUdzdCBcCisJCS1ER1NUX1VTRV9VTlNUQUJMRV9BUEkgXAorCQktSSQodG9wX3NyY2RpcikgXAorCQktSSQodG9wX3NyY2RpcikvbGlicyBcCisJCS1JJCh0b3BfYnVpbGRkaXIpIFwKKwkJLUkkKHRvcF9idWlsZGRpcikvbGlicyBcCisJCSQoZ2lyX2NpbmNsdWRlcykgXAorCQktLWFkZC1pbmNsdWRlLXBhdGg9JCh0b3BfYnVpbGRkaXIpL2dzdCBcCisJCS0tbGlicmFyeS1wYXRoPSQodG9wX2J1aWxkZGlyKS9nc3QgXAorCQktLWxpYnJhcnk9JCh0b3BfYnVpbGRkaXIpL2dzdC9saWJnc3RyZWFtZXItMC4xMS5sYSBcCisJCS0tbGlicmFyeT1saWJnc3RjaGVjay0wLjExLmxhIFwKKwkJLS1pbmNsdWRlPUdzdC0wLjExIFwKKwkJLS1saWJ0b29sPSIkKHRvcF9idWlsZGRpcikvbGlidG9vbCIgXAorCQktLXBrZyBnc3RyZWFtZXItQEdTVF9NQUpPUk1JTk9SQCBcCisJCS0tcGtnLWV4cG9ydCBnc3RyZWFtZXItY2hlY2stQEdTVF9NQUpPUk1JTk9SQCBcCisJCS0tYWRkLWluaXQtc2VjdGlvbj0iZ3N0X2luaXQoTlVMTCxOVUxMKTsiIFwKKwkJLS1vdXRwdXQgJEAgXAorCQkkKGdpcl9oZWFkZXJzKSBcCisJCSQoZ2lyX3NvdXJjZXMpCisKKyMgSU5UUk9TUEVDVElPTl9HSVJESVIvSU5UUk9TUEVDVElPTl9UWVBFTElCRElSIGFyZW4ndCB0aGUgcmlnaHQgcGxhY2UgdG8KKyMgaW5zdGFsbCBhbnl0aGluZyAtIHdlIG5lZWQgdG8gaW5zdGFsbCBpbnNpZGUgb3VyIHByZWZpeC4KK2dpcmRpciA9ICQoZGF0YWRpcikvZ2lyLTEuMAorZ2lyX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVMpCisKK3R5cGVsaWJzZGlyID0gJChsaWJkaXIpL2dpcmVwb3NpdG9yeS0xLjAvCisKK3R5cGVsaWJzX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVM6Lmdpcj0udHlwZWxpYikKKworJS50eXBlbGliOiAlLmdpciAkKElOVFJPU1BFQ1RJT05fQ09NUElMRVIpCisJJChBTV9WX0dFTikkKElOVFJPU1BFQ1RJT05fQ09NUElMRVIpIC0taW5jbHVkZWRpcj0kKHNyY2RpcikgLS1pbmNsdWRlZGlyPSQoYnVpbGRkaXIpIC0taW5jbHVkZWRpcj0kKHRvcF9idWlsZGRpcikvZ3N0ICQoSU5UUk9TUEVDVElPTl9DT01QSUxFUl9PUFRTKSAkPCAtbyAkKEBGKQorCitDTEVBTkZJTEVTICs9ICQoQlVJTFRfR0lSU09VUkNFUykgJCh0eXBlbGlic19EQVRBKQorZW5kaWYKZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmluIGIvbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcxNzg1MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMTE1NiBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4xIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworCisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBhbV9fYXBwZW5kXzEgPSAkKEJVSUxUX0dJUlNPVVJDRVMpICQodHlwZWxpYnNfREFUQSkKK3N1YmRpciA9IGxpYnMvZ3N0L2NoZWNrCitESVNUX0NPTU1PTiA9ICQobGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVfSEVBREVSUykgXAorCSQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1weXRob24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXNjcnViLWluY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbF9tYXggPSA0MAorYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKKyAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorYW1fX25vYmFzZV9zdHJpcCA9IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCithbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisgIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCisgICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisgICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCisgICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworYW1fX2Jhc2VfbGlzdCA9IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGxpYmRpcikiICIkKERFU1RESVIpJChnaXJkaXIpIiBcCisJIiQoREVTVERJUikkKHR5cGVsaWJzZGlyKSIgXAorCSIkKERFU1RESVIpJChsaWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAaW5jbHVkZWRpcikiIFwKKwkiJChERVNURElSKSQobGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVkaXIpIgorTFRMSUJSQVJJRVMgPSAkKGxpYl9MVExJQlJBUklFUykKK2FtX19ERVBFTkRFTkNJRVNfMSA9CithbV9saWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAX2xhX09CSkVDVFMgPSAgXAorCWxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YnVmZmVyc3RyYXcubG8gXAorCWxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Y2hlY2subG8gXAorCWxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmxvCitsaWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAX2xhX09CSkVDVFMgPSAgXAorCSQoYW1fbGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQF9sYV9PQkpFQ1RTKQorQU1fVl9sdCA9ICQoYW1fX3ZfbHRfJChWKSkKK2FtX192X2x0XyA9ICQoYW1fX3ZfbHRfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9sdF8wID0gLS1zaWxlbnQKK2xpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCisJJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKKwkkKGxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQobGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQF9sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCisJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfJChWKSkKK2FtX192X0NDXyA9ICQoYW1fX3ZfQ0NfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgIiAkQDsKK0FNX1ZfYXQgPSAkKGFtX192X2F0XyQoVikpCithbV9fdl9hdF8gPSAkKGFtX192X2F0XyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfYXRfMCA9IEAKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEXyQoVikpCithbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICIgJEA7CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOXyQoVikpCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitTT1VSQ0VTID0gJChsaWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAX2xhX1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKGxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGFfU09VUkNFUykKK1JFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBcCisJaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1kdmktcmVjdXJzaXZlIGluc3RhbGwtZXhlYy1yZWN1cnNpdmUgXAorCWluc3RhbGwtaHRtbC1yZWN1cnNpdmUgaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1wZGYtcmVjdXJzaXZlIGluc3RhbGwtcHMtcmVjdXJzaXZlIGluc3RhbGwtcmVjdXJzaXZlIFwKKwlpbnN0YWxsY2hlY2stcmVjdXJzaXZlIGluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBwZGYtcmVjdXJzaXZlIFwKKwlwcy1yZWN1cnNpdmUgdW5pbnN0YWxsLXJlY3Vyc2l2ZQorREFUQSA9ICQoZ2lyX0RBVEEpICQodHlwZWxpYnNfREFUQSkKK0hFQURFUlMgPSAkKGxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlX0hFQURFUlMpIFwKKwkkKG5vZGlzdF9saWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAaW5jbHVkZV9IRUFERVJTKQorUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMgPSBtb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlCVwKKyAgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorQU1fUkVDVVJTSVZFX1RBUkdFVFMgPSAkKFJFQ1VSU0lWRV9UQVJHRVRTOi1yZWN1cnNpdmU9KSBcCisJJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUzotcmVjdXJzaXZlPSkgdGFncyBUQUdTIGN0YWdzIENUQUdTIFwKKwlkaXN0ZGlyCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNUX1NVQkRJUlMgPSAkKFNVQkRJUlMpCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorYW1fX3JlbGF0aXZpemUgPSBcCisgIGRpcjA9YHB3ZGA7IFwKKyAgc2VkX2ZpcnN0PSdzLF5cKFteL10qXCkvLiokJCxcMSwnOyBcCisgIHNlZF9yZXN0PSdzLF5bXi9dKi8qLCwnOyBcCisgIHNlZF9sYXN0PSdzLF4uKi9cKFteL10qXCkkJCxcMSwnOyBcCisgIHNlZF9idXRsYXN0PSdzLC8qW14vXSokJCwsJzsgXAorICB3aGlsZSB0ZXN0IC1uICIkJGRpcjEiOyBkbyBcCisgICAgZmlyc3Q9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKKyAgICBpZiB0ZXN0ICIkJGZpcnN0IiAhPSAiLiI7IHRoZW4gXAorICAgICAgaWYgdGVzdCAiJCRmaXJzdCIgPSAiLi4iOyB0aGVuIFwKKyAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfbGFzdCJgLyIkJGRpcjIiOyBcCisgICAgICAgIGRpcjA9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2J1dGxhc3QiYDsgXAorICAgICAgZWxzZSBcCisgICAgICAgIGZpcnN0Mj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAorICAgICAgICBpZiB0ZXN0ICIkJGZpcnN0MiIgPSAiJCRmaXJzdCI7IHRoZW4gXAorICAgICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAorICAgICAgICBlbHNlIFwKKyAgICAgICAgICBkaXIyPSIuLi8kJGRpcjIiOyBcCisgICAgICAgIGZpOyBcCisgICAgICAgIGRpcjA9IiQkZGlyMCIvIiQkZmlyc3QiOyBcCisgICAgICBmaTsgXAorICAgIGZpOyBcCisgICAgZGlyMT1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCisgIGRvbmU7IFwKKyAgcmVsZGlyPSIkJGRpcjIiCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVMgPSBAQVNACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JJU09OX1BBVEggPSBAQklTT05fUEFUSEAKK0NBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKK0NBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACitDQyA9IEBDQ0AKK0NDQVMgPSBAQ0NBU0AKK0NDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAorQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAorQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAorQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAorQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRBRElSID0gQERBVEFESVJACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACitETExUT09MID0gQERMTFRPT0xACitET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAorRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKK0VYRUVYVCA9IEBFWEVFWFRACitGRkxBR1MgPSBARkZMQUdTQAorRkdSRVAgPSBARkdSRVBACitGTEVYX1BBVEggPSBARkxFWF9QQVRIQAorR0NPViA9IEBHQ09WQAorR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACitHQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAorR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACitHTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKK0dMSUJfTElCUyA9IEBHTElCX0xJQlNACitHTElCX09OTFlfQ0ZMQUdTID0gQEdMSUJfT05MWV9DRkxBR1NACitHTElCX09OTFlfTElCUyA9IEBHTElCX09OTFlfTElCU0AKK0dMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAorR0xJQl9SRVEgPSBAR0xJQl9SRVFACitHTVBfTElCUyA9IEBHTVBfTElCU0AKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAorR1JFUCA9IEBHUkVQQAorR1NMX0xJQlMgPSBAR1NMX0xJQlNACitHU1RfQUdFID0gQEdTVF9BR0VACitHU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKK0dTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKK0dTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACitHU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAorR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACitHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FQAorR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAorR1NUX0RJU0FCTEVfTkVUX0RFRklORSA9IEBHU1RfRElTQUJMRV9ORVRfREVGSU5FQAorR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKK0dTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACitHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACitHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAorR1NUX0RJU0FCTEVfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1RSQUNFX0RFRklORUAKK0dTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkUgPSBAR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORUAKK0dTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkUgPSBAR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORUAKK0dTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FID0gQEdTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FQAorR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACitHU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKK0dTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACitHU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKK0dTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAorR1NUX01BSk9STUlOT1IgPSBAR1NUX01BSk9STUlOT1JACitHU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKK0dTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKK0dTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACitHU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKK0dTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKK0dTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKK0dTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACitHU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACitHU1RfUEtHX0RFUFMgPSBAR1NUX1BLR19ERVBTQAorR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKK0dTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgPSBAR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFREAKK0dTVF9QUklOVEZfRVhURU5TSU9OX1BPSU5URVJfRk9STUFUX0RFRklORSA9IEBHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkVACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FQAorR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAorR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKK0dTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OX0RFRklORSA9IEBHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkVACitHVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAorSEFWRV9ET0NCT09LMkhUTUwgPSBASEFWRV9ET0NCT09LMkhUTUxACitIQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAorSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAorSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAorSEFWRV9GSUcyREVWID0gQEhBVkVfRklHMkRFVkAKK0hBVkVfR01QID0gQEhBVkVfR01QQAorSEFWRV9HU0wgPSBASEFWRV9HU0xACitIQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAorSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAorSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKK0hBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAorSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKK0hPU1RfQ1BVID0gQEhPU1RfQ1BVQAorSFRNTF9ESVIgPSBASFRNTF9ESVJACitJTkVUX0FUT05fTElCUyA9IEBJTkVUX0FUT05fTElCU0AKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACitJTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKK0lOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKK0lOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKK0lOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAorSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKK0lOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKK0lOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACitJTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJESVIgPSBATElCRElSQAorTElCSUNPTlYgPSBATElCSUNPTlZACitMSUJJTlRMID0gQExJQklOVExACitMSUJNID0gQExJQk1ACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMT0NBTEVESVIgPSBATE9DQUxFRElSQAorTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAorTFRMSUJJTlRMID0gQExUTElCSU5UTEAKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUlOVCA9IEBNQUlOVEAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKK01TR01FUkdFID0gQE1TR01FUkdFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKK1BBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACitQQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAorUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACitQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BMVUdJTkRJUiA9IEBQTFVHSU5ESVJACitQT1NVQiA9IEBQT1NVQkAKK1BST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAorUFlUSE9OID0gQFBZVEhPTkAKK1BZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACitQWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAorUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAorUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1ZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACitWQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACitWQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACitWRVJTSU9OID0gQFZFUlNJT05ACitXQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKK1dJTjMyX0xJQlMgPSBAV0lOMzJfTElCU0AKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKK1hHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKK1hNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAorWFNMVFBST0MgPSBAWFNMVFBST0NACitYU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3BrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACitwa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAorcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3B5ZXhlY2RpciA9IEBweWV4ZWNkaXJACitweXRob25kaXIgPSBAcHl0aG9uZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitsaWJfTFRMSUJSQVJJRVMgPSBsaWJnc3RjaGVjay1AR1NUX01BSk9STUlOT1JALmxhCitTWU1CT0xTX0ZJTEUgPSBleHBvcnRzLnN5bQorQlVJTFRfU09VUkNFUyA9IGludGVybmFsLWNoZWNrLmgKK2xpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGFfREVQRU5ERU5DSUVTID0gXAorCSQodG9wX2J1aWxkZGlyKS9nc3QvbGliZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCWludGVybmFsLWNoZWNrLmggXAorCSQoU1lNQk9MU19GSUxFKQorCitsaWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAX2xhX1NPVVJDRVMgPSBcCisJZ3N0YnVmZmVyc3RyYXcuYwkJCVwKKwlnc3RjaGVjay5jCQkJCVwKKwlnc3Rjb25zaXN0ZW5jeWNoZWNrZXIuYworCitsaWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpIFwKKwktSSQodG9wX2J1aWxkZGlyKS9saWJzIFwKKwktSSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjayBcCisJLUkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliY2hlY2sKKworbGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQF9sYV9MSUJBREQgPSAkKEdTVF9PQkpfTElCUykgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJjaGVjay9saWJjaGVja2ludGVybmFsLmxhIFwKKwkkKExJQk0pCisKK2xpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGFfTERGTEFHUyA9IFwKKwktZXhwb3J0LXN5bWJvbHMgJChTWU1CT0xTX0ZJTEUpICQoR1NUX0FMTF9MREZMQUdTKSAkKEdTVF9MVF9MREZMQUdTKQorCitsaWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAaW5jbHVkZWRpciA9IFwKKwkkKGluY2x1ZGVkaXIpL2dzdHJlYW1lci1AR1NUX01BSk9STUlOT1JAL2dzdC9jaGVjaworCitsaWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAaW5jbHVkZV9IRUFERVJTID0gXAorCWdzdGJ1ZmZlcnN0cmF3LmgJCQlcCisJZ3N0Y2hlY2suaAkJCQlcCisJZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmgKKworbm9kaXN0X2xpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlX0hFQURFUlMgPSBcCisJaW50ZXJuYWwtY2hlY2suaAkKKworQ0xFQU5GSUxFUyA9ICouZ2NubyAqLmdjZGEgKi5nY292IGludGVybmFsLWNoZWNrLmggJChTWU1CT0xTX0ZJTEUpIFwKKwkkKGFtX19hcHBlbmRfMSkKK1NVQkRJUlMgPSBsaWJjaGVjaworTElCR1NUQ0hFQ0tfRVhQT1JURURfVkFSUyA9IFwKKwlfZ3N0X2NoZWNrX3RocmVhZHNfcnVubmluZyBcCisJX2dzdF9jaGVja19yYWlzZWRfY3JpdGljYWwgXAorCV9nc3RfY2hlY2tfcmFpc2VkX3dhcm5pbmcgXAorCV9nc3RfY2hlY2tfZXhwZWN0aW5nX2xvZyBcCisJYnVmZmVycyBcCisJY2hlY2tfY29uZCBcCisJY2hlY2tfZGVidWcgXAorCWNoZWNrX211dGV4IFwKKwltdXRleCBcCisJc3RhcnRfY29uZCBcCisJc3luY19jb25kIFwKKwl0aHJlYWRfbGlzdAorCitMSUJHU1RDSEVDS19FWFBPUlRFRF9GVU5DUyA9IFwKKwlfZ3N0X2NoZWNrX3J1bl90ZXN0X2Z1bmMgXAorCWdzdF9idWZmZXJfc3RyYXdfZ2V0X2J1ZmZlciBcCisJZ3N0X2J1ZmZlcl9zdHJhd19zdGFydF9waXBlbGluZSBcCisJZ3N0X2J1ZmZlcl9zdHJhd19zdG9wX3BpcGVsaW5lIFwKKwlnc3RfY2hlY2tfYWJpX2xpc3QgXAorCWdzdF9jaGVja19jYXBzX2VxdWFsIFwKKwlnc3RfY2hlY2tfYnVmZmVyX2RhdGEgXAorCWdzdF9jaGVja19jaGFpbl9mdW5jIFwKKwlnc3RfY2hlY2tfZHJvcF9idWZmZXJzIFwKKwlnc3RfY2hlY2tfZWxlbWVudF9wdXNoX2J1ZmZlciBcCisJZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXJfbGlzdCBcCisJZ3N0X2NoZWNrX2luaXQgXAorCWdzdF9jaGVja19tZXNzYWdlX2Vycm9yIFwKKwlnc3RfY2hlY2tfcnVuX3N1aXRlIFwKKwlnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCBcCisJZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkIFwKKwlnc3RfY2hlY2tfc2V0dXBfc2lua19wYWRfYnlfbmFtZSBcCisJZ3N0X2NoZWNrX3NldHVwX3NyY19wYWQgXAorCWdzdF9jaGVja19zZXR1cF9zcmNfcGFkX2J5X25hbWUgXAorCWdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50IFwKKwlnc3RfY2hlY2tfdGVhcmRvd25fcGFkX2J5X25hbWUgXAorCWdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZCBcCisJZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQgXAorCWdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX25ldyBcCisJZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfcmVzZXQgXAorCWdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX2ZyZWUKKworTElCR1NUQ0hFQ0tfRVhQT1JURURfU1lNQk9MUyA9IFwKKwkkKExJQkdTVENIRUNLX0VYUE9SVEVEX1ZBUlMpIFwKKwkkKExJQkdTVENIRUNLX0VYUE9SVEVEX0ZVTkNTKQorCisKKyMgUGxlYXNlIGRvIG5vdCBldmVuIHRoaW5rIGFib3V0IGNoYW5naW5nIHRoZSBhbHBoYWJldCBiZWxvdyBpbnRvIEEtWmEtei4KKyMgSXQgaXMgdGhlcmUgZm9yIHB1cnBvc2UuIChCdWcgIzYwMjA5MykKK0NIRUNLX1NZTVMgPSBgJChTRUQpIC1uIC1lICdzL14uLipDS19FWFBPUlRbIF1cezEsXH1cKFtfMC05QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5el1cezEsXH1cKS4uKiQkL1wxL3AnIEB0b3Bfc3JjZGlyQC9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVjay5oLmluYAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQEJVSUxUX0dJUlNPVVJDRVMgPSBHc3RDaGVjay1AR1NUX01BSk9STUlOT1JALmdpcgorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQGdpcl9oZWFkZXJzID0gJChwYXRzdWJzdCAlLCQoc3JjZGlyKS8lLCAkKGxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlX0hFQURFUlMpKSBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAICAgICQocGF0c3Vic3QgJSwkKGJ1aWxkZGlyKS8lLCAkKG5vZGlzdF9saWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAaW5jbHVkZV9IRUFERVJTKSkKKworQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQGdpcl9zb3VyY2VzID0gJChwYXRzdWJzdCAlLCQoc3JjZGlyKS8lLCAkKGxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGFfU09VUkNFUykpCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAZ2lyX2NpbmNsdWRlcyA9ICQocGF0c3Vic3QgJSwtLWMtaW5jbHVkZT0nZ3N0L2NoZWNrLyUnLCQobGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVfSEVBREVSUykpIFwKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAgICAgJChwYXRzdWJzdCAlLC0tYy1pbmNsdWRlPSdnc3QvY2hlY2svJScsJChub2Rpc3RfbGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVfSEVBREVSUykpCisKKworIyBJTlRST1NQRUNUSU9OX0dJUkRJUi9JTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgYXJlbid0IHRoZSByaWdodCBwbGFjZSB0bworIyBpbnN0YWxsIGFueXRoaW5nIC0gd2UgbmVlZCB0byBpbnN0YWxsIGluc2lkZSBvdXIgcHJlZml4LgorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQGdpcmRpciA9ICQoZGF0YWRpcikvZ2lyLTEuMAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQGdpcl9EQVRBID0gJChCVUlMVF9HSVJTT1VSQ0VTKQorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQHR5cGVsaWJzZGlyID0gJChsaWJkaXIpL2dpcmVwb3NpdG9yeS0xLjAvCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAdHlwZWxpYnNfREFUQSA9ICQoQlVJTFRfR0lSU09VUkNFUzouZ2lyPS50eXBlbGliKQorYWxsOiAkKEJVSUxUX1NPVVJDRVMpCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYWxsLXJlY3Vyc2l2ZQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKK2luc3RhbGwtbGliTFRMSUJSQVJJRVM6ICQobGliX0xUTElCUkFSSUVTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQobGliZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQobGliZGlyKSIKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCisJICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKKwkgIGVsc2UgOjsgZmk7IFwKKwlkb25lOyBcCisJdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKGxpYmRpciknIjsgXAorCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKGxpYmRpcikiOyBcCisJfQorCit1bmluc3RhbGwtbGliTFRMSUJSQVJJRVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgJChhbV9fc3RyaXBfZGlyKSBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKGxpYmRpcikvJCRmJyI7IFwKKwkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChsaWJkaXIpLyQkZiI7IFwKKwlkb25lCisKK2NsZWFuLWxpYkxUTElCUkFSSUVTOgorCS10ZXN0IC16ICIkKGxpYl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobGliX0xUTElCUkFSSUVTKQorCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGRpcj0iYGVjaG8gJCRwIHwgc2VkIC1lICdzfC9bXi9dKiQkfHwnYCI7IFwKKwkgIHRlc3QgIiQkZGlyIiAhPSAiJCRwIiB8fCBkaXI9LjsgXAorCSAgZWNobyAicm0gLWYgXCIkJHtkaXJ9L3NvX2xvY2F0aW9uc1wiIjsgXAorCSAgcm0gLWYgIiQke2Rpcn0vc29fbG9jYXRpb25zIjsgXAorCWRvbmUKK2xpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGE6ICQobGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQF9sYV9PQkpFQ1RTKSAkKGxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGFfREVQRU5ERU5DSUVTKSAKKwkkKEFNX1ZfQ0NMRCkkKGxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGFfTElOSykgLXJwYXRoICQobGliZGlyKSAkKGxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGFfT0JKRUNUUykgJChsaWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAX2xhX0xJQkFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RidWZmZXJzdHJhdy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Y2hlY2suUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNvbnNpc3RlbmN5Y2hlY2tlci5QbG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RidWZmZXJzdHJhdy5sbzogZ3N0YnVmZmVyc3RyYXcuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YnVmZmVyc3RyYXcubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YnVmZmVyc3RyYXcuVHBvIC1jIC1vIGxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YnVmZmVyc3RyYXcubG8gYHRlc3QgLWYgJ2dzdGJ1ZmZlcnN0cmF3LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGJ1ZmZlcnN0cmF3LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0YnVmZmVyc3RyYXcuVHBvICQoREVQRElSKS9saWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAX2xhLWdzdGJ1ZmZlcnN0cmF3LlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdGJ1ZmZlcnN0cmF3LmMnIG9iamVjdD0nbGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RidWZmZXJzdHJhdy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RidWZmZXJzdHJhdy5sbyBgdGVzdCAtZiAnZ3N0YnVmZmVyc3RyYXcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YnVmZmVyc3RyYXcuYworCitsaWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNoZWNrLmxvOiBnc3RjaGVjay5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RjaGVjay5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RjaGVjay5UcG8gLWMgLW8gbGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RjaGVjay5sbyBgdGVzdCAtZiAnZ3N0Y2hlY2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Y2hlY2suYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RjaGVjay5UcG8gJChERVBESVIpL2xpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Y2hlY2suUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0Y2hlY2suYycgb2JqZWN0PSdsaWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNoZWNrLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNoZWNrLmxvIGB0ZXN0IC1mICdnc3RjaGVjay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RjaGVjay5jCisKK2xpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmxvOiBnc3Rjb25zaXN0ZW5jeWNoZWNrZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNvbnNpc3RlbmN5Y2hlY2tlci5UcG8gLWMgLW8gbGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3Rjb25zaXN0ZW5jeWNoZWNrZXIubG8gYHRlc3QgLWYgJ2dzdGNvbnNpc3RlbmN5Y2hlY2tlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rjb25zaXN0ZW5jeWNoZWNrZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3Rjb25zaXN0ZW5jeWNoZWNrZXIuVHBvICQoREVQRElSKS9saWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNvbnNpc3RlbmN5Y2hlY2tlci5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3Rjb25zaXN0ZW5jeWNoZWNrZXIuYycgb2JqZWN0PSdsaWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNvbnNpc3RlbmN5Y2hlY2tlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3Rjb25zaXN0ZW5jeWNoZWNrZXIubG8gYHRlc3QgLWYgJ2dzdGNvbnNpc3RlbmN5Y2hlY2tlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rjb25zaXN0ZW5jeWNoZWNrZXIuYworCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworaW5zdGFsbC1naXJEQVRBOiAkKGdpcl9EQVRBKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoZ2lyZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoZ2lyZGlyKSIKKwlAbGlzdD0nJChnaXJfREFUQSknOyB0ZXN0IC1uICIkKGdpcmRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQoZ2lyZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQoZ2lyZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1naXJEQVRBOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQoZ2lyX0RBVEEpJzsgdGVzdCAtbiAiJChnaXJkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJdGVzdCAtbiAiJCRmaWxlcyIgfHwgZXhpdCAwOyBcCisJZWNobyAiICggY2QgJyQoREVTVERJUikkKGdpcmRpciknICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorCWNkICIkKERFU1RESVIpJChnaXJkaXIpIiAmJiBybSAtZiAkJGZpbGVzCitpbnN0YWxsLXR5cGVsaWJzREFUQTogJCh0eXBlbGlic19EQVRBKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQodHlwZWxpYnNkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJCh0eXBlbGlic2RpcikiCisJQGxpc3Q9JyQodHlwZWxpYnNfREFUQSknOyB0ZXN0IC1uICIkKHR5cGVsaWJzZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJCh0eXBlbGlic2RpciknIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKHR5cGVsaWJzZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC10eXBlbGlic0RBVEE6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJCh0eXBlbGlic19EQVRBKSc7IHRlc3QgLW4gIiQodHlwZWxpYnNkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJdGVzdCAtbiAiJCRmaWxlcyIgfHwgZXhpdCAwOyBcCisJZWNobyAiICggY2QgJyQoREVTVERJUikkKHR5cGVsaWJzZGlyKScgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisJY2QgIiQoREVTVERJUikkKHR5cGVsaWJzZGlyKSIgJiYgcm0gLWYgJCRmaWxlcworaW5zdGFsbC1saWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAaW5jbHVkZUhFQURFUlM6ICQobGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVfSEVBREVSUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQobGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVkaXIpIgorCUBsaXN0PSckKGxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlX0hFQURFUlMpJzsgdGVzdCAtbiAiJChsaWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAaW5jbHVkZWRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICckKERFU1RESVIpJChsaWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAaW5jbHVkZWRpciknIjsgXAorCSAgJChJTlNUQUxMX0hFQURFUikgJCRmaWxlcyAiJChERVNURElSKSQobGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVkaXIpIiB8fCBleGl0ICQkPzsgXAorCWRvbmUKKwordW5pbnN0YWxsLWxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlSEVBREVSUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlX0hFQURFUlMpJzsgdGVzdCAtbiAiJChsaWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAaW5jbHVkZWRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwl0ZXN0IC1uICIkJGZpbGVzIiB8fCBleGl0IDA7IFwKKwllY2hvICIgKCBjZCAnJChERVNURElSKSQobGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVkaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQobGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVkaXIpIiAmJiBybSAtZiAkJGZpbGVzCitpbnN0YWxsLW5vZGlzdF9saWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAaW5jbHVkZUhFQURFUlM6ICQobm9kaXN0X2xpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlX0hFQURFUlMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChsaWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAaW5jbHVkZWRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlZGlyKSIKKwlAbGlzdD0nJChub2Rpc3RfbGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVfSEVBREVSUyknOyB0ZXN0IC1uICIkKGxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgJyQoREVTVERJUikkKGxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlZGlyKSciOyBcCisJICAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICIkKERFU1RESVIpJChsaWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAaW5jbHVkZWRpcikiIHx8IGV4aXQgJCQ/OyBcCisJZG9uZQorCit1bmluc3RhbGwtbm9kaXN0X2xpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlSEVBREVSUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKG5vZGlzdF9saWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAaW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQobGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJdGVzdCAtbiAiJCRmaWxlcyIgfHwgZXhpdCAwOyBcCisJZWNobyAiICggY2QgJyQoREVTVERJUikkKGxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlZGlyKScgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisJY2QgIiQoREVTVERJUikkKGxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlZGlyKSIgJiYgcm0gLWYgJCRmaWxlcworCisjIFRoaXMgZGlyZWN0b3J5J3Mgc3ViZGlyZWN0b3JpZXMgYXJlIG1vc3RseSBpbmRlcGVuZGVudDsgeW91IGNhbiBjZAorIyBpbnRvIHRoZW0gYW5kIHJ1biBgbWFrZScgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoaXMgTWFrZWZpbGUuCisjIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mIGBtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCisjICgxKSBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IGluIGBjb25maWcuc3RhdHVzJywgZWRpdCBgY29uZmlnLnN0YXR1cycKKyMgICAgICh3aGljaCB3aWxsIGNhdXNlIHRoZSBNYWtlZmlsZXMgdG8gYmUgcmVnZW5lcmF0ZWQgd2hlbiB5b3UgcnVuIGBtYWtlJyk7CisjICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSBgbWFrZScgY29tbWFuZCBsaW5lLgorJChSRUNVUlNJVkVfVEFSR0VUUyk6CisJQGZhaWw9IGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBkb3Rfc2Vlbj15ZXM7IFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZTsgXAorCWlmIHRlc3QgIiQkZG90X3NlZW4iID0gIm5vIjsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAiJCR0YXJnZXQtYW0iIHx8IGV4aXQgMTsgXAorCWZpOyB0ZXN0IC16ICIkJGZhaWwiCisKKyQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpOgorCUBmYWlsPSBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJY2FzZSAiJEAiIGluIFwKKwkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKKwkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKKwllc2FjOyBcCisJcmV2PScnOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIDo7IGVsc2UgXAorCSAgICByZXY9IiQkc3ViZGlyICQkcmV2IjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJcmV2PSIkJHJldiAuIjsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlmb3Igc3ViZGlyIGluICQkcmV2OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKKwlkb25lICYmIHRlc3QgLXogIiQkZmFpbCIKK3RhZ3MtcmVjdXJzaXZlOgorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRhZ3MpOyBcCisJZG9uZQorY3RhZ3MtcmVjdXJzaXZlOgorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGN0YWdzKTsgXAorCWRvbmUKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWlmICgkKEVUQUdTKSAtLWV0YWdzLWluY2x1ZGUgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCSAgaW5jbHVkZV9vcHRpb249LS1ldGFncy1pbmNsdWRlOyBcCisJICBlbXB0eV9maXg9LjsgXAorCWVsc2UgXAorCSAgaW5jbHVkZV9vcHRpb249LS1pbmNsdWRlOyBcCisJICBlbXB0eV9maXg9OyBcCisJZmk7IFwKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIHRlc3QgISAtZiAkJHN1YmRpci9UQUdTIHx8IFwKKwkgICAgICBzZXQgIiQkQCIgIiQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6IGN0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJQGxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8ICQoTUtESVJfUCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQoZGlzdGRpcikvJCRzdWJkaXIiOyBcCisJICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCisJICAgIG5ld19kaXN0ZGlyPSQkcmVsZGlyOyBcCisJICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQodG9wX2Rpc3RkaXIpIjsgXAorCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAorCSAgICBuZXdfdG9wX2Rpc3RkaXI9JCRyZWxkaXI7IFwKKwkgICAgZWNobyAiIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFxcIjsgXAorCSAgICBlY2hvICIgICAgIGFtX19yZW1vdmVfZGlzdGRpcj06IGFtX19za2lwX2xlbmd0aF9jaGVjaz06IGFtX19za2lwX21vZGVfZml4PTogZGlzdGRpcikiOyBcCisJICAgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgXAorCSAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgICAgICAgIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgXAorCSAgICAgICAgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXAorCQlhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBcCisJCWFtX19za2lwX2xlbmd0aF9jaGVjaz06IFwKKwkJYW1fX3NraXBfbW9kZV9maXg9OiBcCisJICAgICAgICBkaXN0ZGlyKSBcCisJICAgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiAkKEJVSUxUX1NPVVJDRVMpCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2stcmVjdXJzaXZlCithbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoREFUQSkgJChIRUFERVJTKQoraW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQoraW5zdGFsbGRpcnMtYW06CisJZm9yIGRpciBpbiAiJChERVNURElSKSQobGliZGlyKSIgIiQoREVTVERJUikkKGdpcmRpcikiICIkKERFU1RESVIpJCh0eXBlbGlic2RpcikiICIkKERFU1RESVIpJChsaWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAaW5jbHVkZWRpcikiICIkKERFU1RESVIpJChsaWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAaW5jbHVkZWRpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogJChCVUlMVF9TT1VSQ0VTKQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtcmVjdXJzaXZlCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQordW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorCS10ZXN0IC16ICIkKEJVSUxUX1NPVVJDRVMpIiB8fCBybSAtZiAkKEJVSUxUX1NPVVJDRVMpCitjbGVhbjogY2xlYW4tcmVjdXJzaXZlCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYkxUTElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLXJlY3Vyc2l2ZQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtcmVjdXJzaXZlCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tcmVjdXJzaXZlCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1naXJEQVRBIFwKKwlpbnN0YWxsLWxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlSEVBREVSUyBcCisJaW5zdGFsbC1ub2Rpc3RfbGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVIRUFERVJTIFwKKwlpbnN0YWxsLXR5cGVsaWJzREFUQQorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktcmVjdXJzaXZlCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtbGliTFRMSUJSQVJJRVMKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1yZWN1cnNpdmUKKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtcmVjdXJzaXZlCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1yZWN1cnNpdmUKKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1yZWN1cnNpdmUKKworcGRmLWFtOgorCitwczogcHMtcmVjdXJzaXZlCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1naXJEQVRBIHVuaW5zdGFsbC1saWJMVExJQlJBUklFUyBcCisJdW5pbnN0YWxsLWxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlSEVBREVSUyBcCisJdW5pbnN0YWxsLW5vZGlzdF9saWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAaW5jbHVkZUhFQURFUlMgXAorCXVuaW5zdGFsbC10eXBlbGlic0RBVEEKKworLk1BS0U6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIGFsbCBjaGVjayBcCisJY3RhZ3MtcmVjdXJzaXZlIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwIFwKKwl0YWdzLXJlY3Vyc2l2ZQorCisuUEhPTlk6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIFwKKwlhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYkxUTElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgY3RhZ3MgY3RhZ3MtcmVjdXJzaXZlIFwKKwlkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKKwlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKKwlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKKwlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1naXJEQVRBIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gXAorCWluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1saWJMVExJQlJBUklFUyBcCisJaW5zdGFsbC1saWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAaW5jbHVkZUhFQURFUlMgaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtbm9kaXN0X2xpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlSEVBREVSUyBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGwtdHlwZWxpYnNEQVRBIGluc3RhbGxjaGVjayBcCisJaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIGluc3RhbGxkaXJzLWFtIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKKwltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisJdGFncyB0YWdzLXJlY3Vyc2l2ZSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1naXJEQVRBIFwKKwl1bmluc3RhbGwtbGliTFRMSUJSQVJJRVMgXAorCXVuaW5zdGFsbC1saWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAaW5jbHVkZUhFQURFUlMgXAorCXVuaW5zdGFsbC1ub2Rpc3RfbGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVIRUFERVJTIFwKKwl1bmluc3RhbGwtdHlwZWxpYnNEQVRBCisKKworaW50ZXJuYWwtY2hlY2suaDogJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrLmgKKwkkKEFNX1ZfR0VOKWNwICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVjay5oIGludGVybmFsLWNoZWNrLmgKKworJS5jLmdjb3Y6IC5saWJzL2xpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBfbGEtJS5nY2RhICUuYworCSQoR0NPVikgLWIgLWYgLW8gJF4gPiAkQC5vdXQKKworZ2NvdjogJChsaWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAX2xhX1NPVVJDRVM6PS5nY292KQorcHJpbnQtY2hlY2stc3ltYm9sczoKKwlAZm9yIHMgaW4gJChDSEVDS19TWU1TKTsgZG8gXAorCSAgZWNobyAkJHM7IFwKKwlkb25lOworCiskKFNZTUJPTFNfRklMRSk6CisJJChBTV9WX0dFTilybSAtZiAkKFNZTUJPTFNfRklMRSkgMj4vZGV2L251bGw7IFwKKwlmb3IgcyBpbiAkKExJQkdTVENIRUNLX0VYUE9SVEVEX1NZTUJPTFMpICQoQ0hFQ0tfU1lNUyk7IGRvIFwKKwkgIGVjaG8gJCRzID4+ICQoU1lNQk9MU19GSUxFKTsgXAorCWRvbmUKKworQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQEdzdENoZWNrLUBHU1RfTUFKT1JNSU5PUkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0Y2hlY2stQEdTVF9NQUpPUk1JTk9SQC5sYQorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkkKEFNX1ZfR0VOKVBLR19DT05GSUdfUEFUSD0iJChHU1RfUEtHX0NPTkZJR19QQVRIKSIgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJR1NUX1BMVUdJTl9TWVNURU1fUEFUSD0iIiBHU1RfUExVR0lOX1BBVEg9IiIgR1NUX1JFR0lTVFJZX1VQREFURT1ubyBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQkkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgLXYgLS1uYW1lc3BhY2UgR3N0Q2hlY2sgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1uc3ZlcnNpb249QEdTVF9NQUpPUk1JTk9SQCBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLXN0cmlwLXByZWZpeD1Hc3QgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLURHU1RfVVNFX1VOU1RBQkxFX0FQSSBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktSSQodG9wX3NyY2RpcikgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLUkkKHRvcF9zcmNkaXIpL2xpYnMgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLUkkKHRvcF9idWlsZGRpcikgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLUkkKHRvcF9idWlsZGRpcikvbGlicyBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQkkKGdpcl9jaW5jbHVkZXMpIFwKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tYWRkLWluY2x1ZGUtcGF0aD0kKHRvcF9idWlsZGRpcikvZ3N0IFwKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tbGlicmFyeS1wYXRoPSQodG9wX2J1aWxkZGlyKS9nc3QgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1saWJyYXJ5PSQodG9wX2J1aWxkZGlyKS9nc3QvbGliZ3N0cmVhbWVyLTAuMTEubGEgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1saWJyYXJ5PWxpYmdzdGNoZWNrLTAuMTEubGEgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1pbmNsdWRlPUdzdC0wLjExIFwKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tbGlidG9vbD0iJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wiIFwKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tcGtnIGdzdHJlYW1lci1AR1NUX01BSk9STUlOT1JAIFwKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tcGtnLWV4cG9ydCBnc3RyZWFtZXItY2hlY2stQEdTVF9NQUpPUk1JTk9SQCBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLWFkZC1pbml0LXNlY3Rpb249ImdzdF9pbml0KE5VTEwsTlVMTCk7IiBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLW91dHB1dCAkQCBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQkkKGdpcl9oZWFkZXJzKSBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQkkKGdpcl9zb3VyY2VzKQorCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAJS50eXBlbGliOiAlLmdpciAkKElOVFJPU1BFQ1RJT05fQ09NUElMRVIpCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACSQoQU1fVl9HRU4pJChJTlRST1NQRUNUSU9OX0NPTVBJTEVSKSAtLWluY2x1ZGVkaXI9JChzcmNkaXIpIC0taW5jbHVkZWRpcj0kKGJ1aWxkZGlyKSAtLWluY2x1ZGVkaXI9JCh0b3BfYnVpbGRkaXIpL2dzdCAkKElOVFJPU1BFQ1RJT05fQ09NUElMRVJfT1BUUykgJDwgLW8gJChARikKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY2hlY2svZ3N0YnVmZmVyc3RyYXcuYyBiL2xpYnMvZ3N0L2NoZWNrL2dzdGJ1ZmZlcnN0cmF3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE1MDRmZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2NoZWNrL2dzdGJ1ZmZlcnN0cmF3LmMKQEAgLTAsMCArMSwxNzcgQEAKKy8qIEdTdHJlYW1lcgorICoKKyAqIHVuaXQgdGVzdGluZyBoZWxwZXIgbGliCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFuZHkgV2luZ28gPHdpbmdvIGF0IHBvYm94LmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKioKKyAqIFNFQ1RJT046Z3N0Y2hlY2tidWZmZXJzdHJhdworICogQHNob3J0X2Rlc2NyaXB0aW9uOiBCdWZmZXIgaW50ZXJjZXB0aW9uIGNvZGUgZm9yIEdTdHJlYW1lciB1bml0IHRlc3RzCisgKgorICogVGhlc2UgbWFjcm9zIGFuZCBmdW5jdGlvbnMgYXJlIGZvciBpbnRlcm5hbCB1c2Ugb2YgdGhlIHVuaXQgdGVzdHMgZm91bmQKKyAqIGluc2lkZSB0aGUgJ2NoZWNrJyBkaXJlY3RvcmllcyBvZiB2YXJpb3VzIEdTdHJlYW1lciBwYWNrYWdlcy4KKyAqLworCisjaW5jbHVkZSAiZ3N0YnVmZmVyc3RyYXcuaCIKKworc3RhdGljIEdDb25kICpjb25kID0gTlVMTDsKK3N0YXRpYyBHTXV0ZXggKmxvY2sgPSBOVUxMOworc3RhdGljIEdzdEJ1ZmZlciAqYnVmID0gTlVMTDsKK3N0YXRpYyBndWxvbmcgaWQ7CisKKy8qIGNhbGxlZCBmb3IgZXZlcnkgYnVmZmVyLiAgV2FpdHMgdW50aWwgdGhlIGdsb2JhbCAiYnVmIiB2YXJpYWJsZSBpcyB1bnNldCwKKyAqIHRoZW4gc2V0cyBpdCB0byB0aGUgYnVmZmVyIHJlY2VpdmVkLCBhbmQgc2lnbmFscy4gKi8KK3N0YXRpYyBnYm9vbGVhbgorYnVmZmVyX3Byb2JlIChHc3RQYWQgKiBwYWQsIEdzdFByb2JlVHlwZSB0eXBlLCBHc3RCdWZmZXIgKiBidWZmZXIsCisgICAgZ3BvaW50ZXIgdW51c2VkKQoreworICBnX211dGV4X2xvY2sgKGxvY2spOworCisgIHdoaWxlIChidWYgIT0gTlVMTCkKKyAgICBnX2NvbmRfd2FpdCAoY29uZCwgbG9jayk7CisKKyAgLyogaW5jcmVhc2UgdGhlIHJlZmNvdW50IGJlY2F1c2Ugd2Ugc3RvcmUgaXQgZ2xvYmFsbHkgZm9yIG90aGVycyB0byB1c2UgKi8KKyAgYnVmID0gZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcik7CisKKyAgZ19jb25kX3NpZ25hbCAoY29uZCk7CisKKyAgZ19tdXRleF91bmxvY2sgKGxvY2spOworCisgIHJldHVybiBUUlVFOworfQorCisvKioKKyAqIGdzdF9idWZmZXJfc3RyYXdfc3RhcnRfcGlwZWxpbmU6CisgKiBAYmluOiB0aGUgcGlwZWxpbmUgdG8gcnVuCisgKiBAcGFkOiBhIHBhZCBvbiBhbiBlbGVtZW50IGluIEBiaW4KKyAqCisgKiBTZXRzIHVwIGEgcGlwZWxpbmUgZm9yIGJ1ZmZlciBzdWNraW5nLiBUaGlzIHdpbGwgYWxsb3cgeW91IHRvIGNhbGwKKyAqIGdzdF9idWZmZXJfc3RyYXdfZ2V0X2J1ZmZlcigpIHRvIGFjY2VzcyBidWZmZXJzIGFzIHRoZXkgcGFzcyBvdmVyIEBwYWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBub3JtYWxseSB1c2VkIGluIHVuaXQgdGVzdHMgdGhhdCB3YW50IHRvIHZlcmlmeSB0aGF0IGEKKyAqIHBhcnRpY3VsYXIgZWxlbWVudCBpcyBvdXRwdXR0aW5nIGNvcnJlY3QgYnVmZmVycy4gRm9yIGV4YW1wbGUsIHlvdSB3b3VsZCBtYWtlCisgKiBhIHBpcGVsaW5lIHZpYSBnc3RfcGFyc2VfbGF1bmNoKCksIHB1bGwgb3V0IHRoZSBwYWQgeW91IHdhbnQgdG8gbW9uaXRvciwgdGhlbgorICogY2FsbCBnc3RfYnVmZmVyX3N0cmF3X2dldF9idWZmZXIoKSB0byBnZXQgdGhlIGJ1ZmZlcnMgdGhhdCBwYXNzIHRocm91Z2ggQHBhZC4KKyAqIFRoZSBwaXBlbGluZSB3aWxsIGJsb2NrIHVudGlsIHlvdSBoYXZlIHN1Y2tlZCBvZmYgdGhlIGJ1ZmZlcnMuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgc3RhdGUgb2YgQGJpbiB0byBQTEFZSU5HOyB0byBjbGVhbiB1cCwgYmUgc3VyZSB0bworICogY2FsbCBnc3RfYnVmZmVyX3N0cmF3X3N0b3BfcGlwZWxpbmUoKS4KKyAqCisgKiBOb3RlIHRoYXQgeW91IG1heSBub3Qgc3RhcnQgdHdvIGJ1ZmZlciBzdHJhd3MgYXQgdGhlIHNhbWUgdGltZS4gVGhpcyBmdW5jdGlvbgorICogaXMgaW50ZW5kZWQgZm9yIHVuaXQgdGVzdHMsIG5vdCBnZW5lcmFsIEFQSSB1c2UuIEluIGZhY3QgaXQgY2FsbHMgZmFpbF9pZgorICogZnJvbSBsaWJjaGVjaywgc28geW91IGNhbm5vdCB1c2UgaXQgb3V0c2lkZSB1bml0IHRlc3RzLgorICovCit2b2lkCitnc3RfYnVmZmVyX3N0cmF3X3N0YXJ0X3BpcGVsaW5lIChHc3RFbGVtZW50ICogYmluLCBHc3RQYWQgKiBwYWQpCit7CisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKKworICBpZCA9IGdzdF9wYWRfYWRkX3Byb2JlIChwYWQsIEdTVF9QUk9CRV9UWVBFX0JVRkZFUiwKKyAgICAgIChHc3RQYWRQcm9iZUNhbGxiYWNrKSBidWZmZXJfcHJvYmUsIE5VTEwsIE5VTEwpOworCisgIGNvbmQgPSBnX2NvbmRfbmV3ICgpOworICBsb2NrID0gZ19tdXRleF9uZXcgKCk7CisKKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgZmFpbF9pZiAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSwgIkNvdWxkIG5vdCBzdGFydCB0ZXN0IHBpcGVsaW5lIik7CisgIGlmIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQykgeworICAgIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoYmluLCBOVUxMLCBOVUxMLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKyAgICBmYWlsX2lmIChyZXQgIT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiQ291bGQgbm90IHN0YXJ0IHRlc3QgcGlwZWxpbmUiKTsKKyAgfQorfQorCisvKioKKyAqIGdzdF9idWZmZXJfc3RyYXdfZ2V0X2J1ZmZlcjoKKyAqIEBiaW46IHRoZSBwaXBlbGluZSBwcmV2aW91c2x5IHN0YXJ0ZWQgdmlhIGdzdF9idWZmZXJfc3RyYXdfc3RhcnRfcGlwZWxpbmUoKQorICogQHBhZDogdGhlIHBhZCBwcmV2aW91c2x5IHBhc3NlZCB0byBnc3RfYnVmZmVyX3N0cmF3X3N0YXJ0X3BpcGVsaW5lKCkKKyAqCisgKiBHZXQgb25lIGJ1ZmZlciBmcm9tIEBwYWQuIEltcGxlbWVudGVkIHZpYSBidWZmZXIgcHJvYmVzLiBUaGlzIGZ1bmN0aW9uIHdpbGwKKyAqIGJsb2NrIHVudGlsIHRoZSBwaXBlbGluZSBwYXNzZXMgYSBidWZmZXIgb3ZlciBAcGFkLCBzbyBmb3Igcm9idXN0IGJlaGF2aW9yCisgKiBpbiB1bml0IHRlc3RzLCB5b3UgbmVlZCB0byB1c2UgY2hlY2sncyB0aW1lb3V0IHRvIGZhaWwgb3V0IGluIHRoZSBjYXNlIHRoYXQgYQorICogYnVmZmVyIG5ldmVyIGFycml2ZXMuCisgKgorICogWW91IG11c3QgaGF2ZSBwcmV2aW91c2x5IGNhbGxlZCBnc3RfYnVmZmVyX3N0cmF3X3N0YXJ0X3BpcGVsaW5lKCkgb24KKyAqIEBwaXBlbGluZSBhbmQgQHBhZC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgY2FwdHVyZWQgI0dzdEJ1ZmZlci4KKyAqLworR3N0QnVmZmVyICoKK2dzdF9idWZmZXJfc3RyYXdfZ2V0X2J1ZmZlciAoR3N0RWxlbWVudCAqIGJpbiwgR3N0UGFkICogcGFkKQoreworICBHc3RCdWZmZXIgKnJldDsKKworICBnX211dGV4X2xvY2sgKGxvY2spOworCisgIHdoaWxlIChidWYgPT0gTlVMTCkKKyAgICBnX2NvbmRfd2FpdCAoY29uZCwgbG9jayk7CisKKyAgcmV0ID0gYnVmOworICBidWYgPSBOVUxMOworCisgIGdfY29uZF9zaWduYWwgKGNvbmQpOworCisgIGdfbXV0ZXhfdW5sb2NrIChsb2NrKTsKKworICByZXR1cm4gcmV0OworfQorCisvKioKKyAqIGdzdF9idWZmZXJfc3RyYXdfc3RvcF9waXBlbGluZToKKyAqIEBiaW46IHRoZSBwaXBlbGluZSBwcmV2aW91c2x5IHN0YXJ0ZWQgdmlhIGdzdF9idWZmZXJfc3RyYXdfc3RhcnRfcGlwZWxpbmUoKQorICogQHBhZDogdGhlIHBhZCBwcmV2aW91c2x5IHBhc3NlZCB0byBnc3RfYnVmZmVyX3N0cmF3X3N0YXJ0X3BpcGVsaW5lKCkKKyAqCisgKiBTZXQgQGJpbiB0byAjR1NUX1NUQVRFX05VTEwgYW5kIHJlbGVhc2UgcmVzb3VyY2UgYWxsb2NhdGVkIGluCisgKiBnc3RfYnVmZmVyX3N0cmF3X3N0YXJ0X3BpcGVsaW5lKCkuCisgKgorICogWW91IG11c3QgaGF2ZSBwcmV2aW91c2x5IGNhbGxlZCBnc3RfYnVmZmVyX3N0cmF3X3N0YXJ0X3BpcGVsaW5lKCkgb24KKyAqIEBwaXBlbGluZSBhbmQgQHBhZC4KKyAqLwordm9pZAorZ3N0X2J1ZmZlcl9zdHJhd19zdG9wX3BpcGVsaW5lIChHc3RFbGVtZW50ICogYmluLCBHc3RQYWQgKiBwYWQpCit7CisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKKworICBnX211dGV4X2xvY2sgKGxvY2spOworICBpZiAoYnVmKQorICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7CisgIGJ1ZiA9IE5VTEw7CisgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChwYWQsIChndWludCkgaWQpOworICBpZCA9IDA7CisgIGdfY29uZF9zaWduYWwgKGNvbmQpOworICBnX211dGV4X3VubG9jayAobG9jayk7CisKKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9OVUxMKTsKKyAgZmFpbF9pZiAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSwgIkNvdWxkIG5vdCBzdG9wIHRlc3QgcGlwZWxpbmUiKTsKKyAgaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKSB7CisgICAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChiaW4sIE5VTEwsIE5VTEwsIEdTVF9DTE9DS19USU1FX05PTkUpOworICAgIGZhaWxfaWYgKHJldCAhPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJDb3VsZCBub3Qgc3RvcCB0ZXN0IHBpcGVsaW5lIik7CisgIH0KKworICBnX211dGV4X2xvY2sgKGxvY2spOworICBpZiAoYnVmKQorICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7CisgIGJ1ZiA9IE5VTEw7CisgIGdfbXV0ZXhfdW5sb2NrIChsb2NrKTsKKworICBnX211dGV4X2ZyZWUgKGxvY2spOworICBnX2NvbmRfZnJlZSAoY29uZCk7CisKKyAgbG9jayA9IE5VTEw7CisgIGNvbmQgPSBOVUxMOworfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY2hlY2svZ3N0YnVmZmVyc3RyYXcuaCBiL2xpYnMvZ3N0L2NoZWNrL2dzdGJ1ZmZlcnN0cmF3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVjNGEzMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2NoZWNrL2dzdGJ1ZmZlcnN0cmF3LmgKQEAgLTAsMCArMSwzNSBAQAorLyogR1N0cmVhbWVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFuZHkgV2luZ28gPHdpbmdvIGF0IHBvYm94LmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fR1NUX0JVRkZFUl9TVFJBV19IX18KKyNkZWZpbmUgX19HU1RfQlVGRkVSX1NUUkFXX0hfXworCisKKyNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KKworR19CRUdJTl9ERUNMUworCit2b2lkIGdzdF9idWZmZXJfc3RyYXdfc3RhcnRfcGlwZWxpbmUgKEdzdEVsZW1lbnQgKiBiaW4sIEdzdFBhZCAqIHBhZCk7CitHc3RCdWZmZXIgKmdzdF9idWZmZXJfc3RyYXdfZ2V0X2J1ZmZlciAoR3N0RWxlbWVudCAqIGJpbiwgR3N0UGFkICogcGFkKTsKK3ZvaWQgZ3N0X2J1ZmZlcl9zdHJhd19zdG9wX3BpcGVsaW5lIChHc3RFbGVtZW50ICogYmluLCBHc3RQYWQgKiBwYWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HU1RfQlVGRkVSX1NUUkFXX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYyBiL2xpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYxYzBjOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmMKQEAgLTAsMCArMSw2NTcgQEAKKy8qIEdTdHJlYW1lcgorICoKKyAqIENvbW1vbiBjb2RlIGZvciBHU3RyZWFtZXIgdW5pdHRlc3RzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDYgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKy8qKgorICogU0VDVElPTjpnc3RjaGVjaworICogQHNob3J0X2Rlc2NyaXB0aW9uOiBDb21tb24gY29kZSBmb3IgR1N0cmVhbWVyIHVuaXQgdGVzdHMKKyAqCisgKiBUaGVzZSBtYWNyb3MgYW5kIGZ1bmN0aW9ucyBhcmUgZm9yIGludGVybmFsIHVzZSBvZiB0aGUgdW5pdCB0ZXN0cyBmb3VuZAorICogaW5zaWRlIHRoZSAnY2hlY2snIGRpcmVjdG9yaWVzIG9mIHZhcmlvdXMgR1N0cmVhbWVyIHBhY2thZ2VzLgorICovCisKKyNpbmNsdWRlICJnc3RjaGVjay5oIgorCitHU1RfREVCVUdfQ0FURUdPUlkgKGNoZWNrX2RlYnVnKTsKKworLyogbG9nZ2luZyBmdW5jdGlvbiBmb3IgdGVzdHMKKyAqIGEgdGVzdCB1c2VzIGdfbWVzc2FnZSgpIHRvIGxvZyBhIGRlYnVnIGxpbmUKKyAqIGEgZ3N0IHVuaXQgdGVzdCBjYW4gYmUgcnVuIHdpdGggR1NUX1RFU1RfREVCVUcgZW52IHZhciBzZXQgdG8gc2VlIHRoZQorICogbWVzc2FnZXMKKyAqLworCitnYm9vbGVhbiBfZ3N0X2NoZWNrX3RocmVhZHNfcnVubmluZyA9IEZBTFNFOworR0xpc3QgKnRocmVhZF9saXN0ID0gTlVMTDsKK0dNdXRleCAqbXV0ZXg7CitHQ29uZCAqc3RhcnRfY29uZDsgICAgICAgICAgICAgIC8qIHVzZWQgdG8gbm90aWZ5IG1haW4gdGhyZWFkIG9mIHRocmVhZCBzdGFydHVwcyAqLworR0NvbmQgKnN5bmNfY29uZDsgICAgICAgICAgICAgICAvKiB1c2VkIHRvIHN5bmNocm9uaXplIGFsbCB0aHJlYWRzIGFuZCBtYWluIHRocmVhZCAqLworCitHTGlzdCAqYnVmZmVycyA9IE5VTEw7CitHTXV0ZXggKmNoZWNrX211dGV4ID0gTlVMTDsKK0dDb25kICpjaGVja19jb25kID0gTlVMTDsKKworLyogRklYTUUgMC4xMTogc2hvdWxkbid0IF9nc3RfY2hlY2tfZGVidWcgYmUgc3RhdGljPyBOb3QgdXNlZCBhbnl3aGVyZSAqLworZ2Jvb2xlYW4gX2dzdF9jaGVja19kZWJ1ZyA9IEZBTFNFOworZ2Jvb2xlYW4gX2dzdF9jaGVja19yYWlzZWRfY3JpdGljYWwgPSBGQUxTRTsKK2dib29sZWFuIF9nc3RfY2hlY2tfcmFpc2VkX3dhcm5pbmcgPSBGQUxTRTsKK2dib29sZWFuIF9nc3RfY2hlY2tfZXhwZWN0aW5nX2xvZyA9IEZBTFNFOworCitzdGF0aWMgdm9pZCBnc3RfY2hlY2tfbG9nX21lc3NhZ2VfZnVuYworICAgIChjb25zdCBnY2hhciAqIGxvZ19kb21haW4sIEdMb2dMZXZlbEZsYWdzIGxvZ19sZXZlbCwKKyAgICBjb25zdCBnY2hhciAqIG1lc3NhZ2UsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgaWYgKF9nc3RfY2hlY2tfZGVidWcpIHsKKyAgICBnX3ByaW50ICgiJXMiLCBtZXNzYWdlKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZCBnc3RfY2hlY2tfbG9nX2NyaXRpY2FsX2Z1bmMKKyAgICAoY29uc3QgZ2NoYXIgKiBsb2dfZG9tYWluLCBHTG9nTGV2ZWxGbGFncyBsb2dfbGV2ZWwsCisgICAgY29uc3QgZ2NoYXIgKiBtZXNzYWdlLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIGlmICghX2dzdF9jaGVja19leHBlY3RpbmdfbG9nKSB7CisgICAgZ19wcmludCAoIlxuXG5VbmV4cGVjdGVkIGNyaXRpY2FsL3dhcm5pbmc6ICVzXG4iLCBtZXNzYWdlKTsKKyAgICBmYWlsICgiVW5leHBlY3RlZCBjcml0aWNhbC93YXJuaW5nOiAlcyIsIG1lc3NhZ2UpOworICB9CisKKyAgaWYgKF9nc3RfY2hlY2tfZGVidWcpIHsKKyAgICBnX3ByaW50ICgiXG5FeHBlY3RlZCBjcml0aWNhbC93YXJuaW5nOiAlc1xuIiwgbWVzc2FnZSk7CisgIH0KKworICBpZiAobG9nX2xldmVsICYgR19MT0dfTEVWRUxfQ1JJVElDQUwpCisgICAgX2dzdF9jaGVja19yYWlzZWRfY3JpdGljYWwgPSBUUlVFOworICBpZiAobG9nX2xldmVsICYgR19MT0dfTEVWRUxfV0FSTklORykKKyAgICBfZ3N0X2NoZWNrX3JhaXNlZF93YXJuaW5nID0gVFJVRTsKK30KKworc3RhdGljIGdpbnQKK3NvcnRfcGx1Z2lucyAoR3N0UGx1Z2luICogYSwgR3N0UGx1Z2luICogYikKK3sKKyAgaW50IHJldDsKKworICByZXQgPSBzdHJjbXAgKGdzdF9wbHVnaW5fZ2V0X3NvdXJjZSAoYSksIGdzdF9wbHVnaW5fZ2V0X3NvdXJjZSAoYikpOworICBpZiAocmV0ID09IDApCisgICAgcmV0ID0gc3RyY21wIChnc3RfcGx1Z2luX2dldF9uYW1lIChhKSwgZ3N0X3BsdWdpbl9nZXRfbmFtZSAoYikpOworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAorcHJpbnRfcGx1Z2lucyAodm9pZCkKK3sKKyAgR0xpc3QgKnBsdWdpbnMsICpsOworCisgIHBsdWdpbnMgPSBnc3RfZGVmYXVsdF9yZWdpc3RyeV9nZXRfcGx1Z2luX2xpc3QgKCk7CisgIHBsdWdpbnMgPSBnX2xpc3Rfc29ydCAocGx1Z2lucywgKEdDb21wYXJlRnVuYykgc29ydF9wbHVnaW5zKTsKKyAgZm9yIChsID0gcGx1Z2luczsgbCAhPSBOVUxMOyBsID0gbC0+bmV4dCkgeworICAgIEdzdFBsdWdpbiAqcGx1Z2luID0gR1NUX1BMVUdJTiAobC0+ZGF0YSk7CisKKyAgICBpZiAoc3RyY21wIChnc3RfcGx1Z2luX2dldF9zb3VyY2UgKHBsdWdpbiksICJCTEFDS0xJU1QiKSAhPSAwKSB7CisgICAgICBHU1RfTE9HICgiJTIwc0AlcyIsIGdzdF9wbHVnaW5fZ2V0X25hbWUgKHBsdWdpbiksCisgICAgICAgICAgR1NUX1NUUl9OVUxMIChnc3RfcGx1Z2luX2dldF9maWxlbmFtZSAocGx1Z2luKSkpOworICAgIH0KKyAgfQorICBnc3RfcGx1Z2luX2xpc3RfZnJlZSAocGx1Z2lucyk7Cit9CisKKy8qIGluaXRpYWxpemUgR1N0cmVhbWVyIHRlc3RpbmcgKi8KK3ZvaWQKK2dzdF9jaGVja19pbml0IChpbnQgKmFyZ2MsIGNoYXIgKiphcmd2W10pCit7CisgIGdzdF9pbml0IChhcmdjLCBhcmd2KTsKKworICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoY2hlY2tfZGVidWcsICJjaGVjayIsIDAsICJjaGVjayByZWdyZXNzaW9uIHRlc3RzIik7CisKKyAgaWYgKGdfZ2V0ZW52ICgiR1NUX1RFU1RfREVCVUciKSkKKyAgICBfZ3N0X2NoZWNrX2RlYnVnID0gVFJVRTsKKworICBnX2xvZ19zZXRfaGFuZGxlciAoTlVMTCwgR19MT0dfTEVWRUxfTUVTU0FHRSwgZ3N0X2NoZWNrX2xvZ19tZXNzYWdlX2Z1bmMsCisgICAgICBOVUxMKTsKKyAgZ19sb2dfc2V0X2hhbmRsZXIgKE5VTEwsIEdfTE9HX0xFVkVMX0NSSVRJQ0FMIHwgR19MT0dfTEVWRUxfV0FSTklORywKKyAgICAgIGdzdF9jaGVja19sb2dfY3JpdGljYWxfZnVuYywgTlVMTCk7CisgIGdfbG9nX3NldF9oYW5kbGVyICgiR1N0cmVhbWVyIiwgR19MT0dfTEVWRUxfQ1JJVElDQUwgfCBHX0xPR19MRVZFTF9XQVJOSU5HLAorICAgICAgZ3N0X2NoZWNrX2xvZ19jcml0aWNhbF9mdW5jLCBOVUxMKTsKKyAgZ19sb2dfc2V0X2hhbmRsZXIgKCJHTGliLUdPYmplY3QiLCBHX0xPR19MRVZFTF9DUklUSUNBTCB8IEdfTE9HX0xFVkVMX1dBUk5JTkcsCisgICAgICBnc3RfY2hlY2tfbG9nX2NyaXRpY2FsX2Z1bmMsIE5VTEwpOworICBnX2xvZ19zZXRfaGFuZGxlciAoIkdzdC1QaG9ub24iLCBHX0xPR19MRVZFTF9DUklUSUNBTCB8IEdfTE9HX0xFVkVMX1dBUk5JTkcsCisgICAgICBnc3RfY2hlY2tfbG9nX2NyaXRpY2FsX2Z1bmMsIE5VTEwpOworCisgIHByaW50X3BsdWdpbnMgKCk7CisKKyAgY2hlY2tfY29uZCA9IGdfY29uZF9uZXcgKCk7CisgIGNoZWNrX211dGV4ID0gZ19tdXRleF9uZXcgKCk7Cit9CisKKy8qIG1lc3NhZ2UgY2hlY2tpbmcgKi8KK3ZvaWQKK2dzdF9jaGVja19tZXNzYWdlX2Vycm9yIChHc3RNZXNzYWdlICogbWVzc2FnZSwgR3N0TWVzc2FnZVR5cGUgdHlwZSwKKyAgICBHUXVhcmsgZG9tYWluLCBnaW50IGNvZGUpCit7CisgIEdFcnJvciAqZXJyb3I7CisgIGdjaGFyICpkZWJ1ZzsKKworICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gdHlwZSwKKyAgICAgICJtZXNzYWdlIGlzIG9mIHR5cGUgJXMgaW5zdGVhZCBvZiBleHBlY3RlZCB0eXBlICVzIiwKKyAgICAgIGdzdF9tZXNzYWdlX3R5cGVfZ2V0X25hbWUgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpKSwKKyAgICAgIGdzdF9tZXNzYWdlX3R5cGVfZ2V0X25hbWUgKHR5cGUpKTsKKyAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1lc3NhZ2UsICZlcnJvciwgJmRlYnVnKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZXJyb3ItPmRvbWFpbiwgZG9tYWluKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZXJyb3ItPmNvZGUsIGNvZGUpOworICBnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKyAgZ19mcmVlIChkZWJ1Zyk7Cit9CisKKy8qIGhlbHBlciBmdW5jdGlvbnMgKi8KK0dzdEZsb3dSZXR1cm4KK2dzdF9jaGVja19jaGFpbl9mdW5jIChHc3RQYWQgKiBwYWQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKK3sKKyAgR1NUX0RFQlVHICgiY2hhaW5fZnVuYzogcmVjZWl2ZWQgYnVmZmVyICVwIiwgYnVmZmVyKTsKKyAgYnVmZmVycyA9IGdfbGlzdF9hcHBlbmQgKGJ1ZmZlcnMsIGJ1ZmZlcik7CisKKyAgZ19tdXRleF9sb2NrIChjaGVja19tdXRleCk7CisgIGdfY29uZF9zaWduYWwgKGNoZWNrX2NvbmQpOworICBnX211dGV4X3VubG9jayAoY2hlY2tfbXV0ZXgpOworCisgIHJldHVybiBHU1RfRkxPV19PSzsKK30KKworLyogc2V0dXAgYW4gZWxlbWVudCBmb3IgYSBmaWx0ZXIgdGVzdCB3aXRoIG15c3JjcGFkIGFuZCBteXNpbmtwYWQgKi8KK0dzdEVsZW1lbnQgKgorZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKGNvbnN0IGdjaGFyICogZmFjdG9yeSkKK3sKKyAgR3N0RWxlbWVudCAqZWxlbWVudDsKKworICBHU1RfREVCVUcgKCJzZXR1cF9lbGVtZW50Iik7CisKKyAgZWxlbWVudCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoZmFjdG9yeSwgZmFjdG9yeSk7CisgIGZhaWxfaWYgKGVsZW1lbnQgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgYSAnJXMnIGVsZW1lbnQiLCBmYWN0b3J5KTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoZWxlbWVudCwgZmFjdG9yeSwgMSk7CisgIHJldHVybiBlbGVtZW50OworfQorCit2b2lkCitnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCit7CisgIEdTVF9ERUJVRyAoInRlYXJkb3duX2VsZW1lbnQiKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfTlVMTCkgPT0KKyAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImNvdWxkIG5vdCBzZXQgdG8gbnVsbCIpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChlbGVtZW50LCAiZWxlbWVudCIsIDEpOworICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtZW50KTsKK30KKworLyogRklYTUU6IHNldF9jYXBzIGlzbid0IHRoYXQgdXNlZnVsCisgKi8KK0dzdFBhZCAqCitnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCisgICAgR3N0U3RhdGljUGFkVGVtcGxhdGUgKiB0bXBsLCBHc3RDYXBzICogY2FwcykKK3sKKyAgR3N0UGFkICpzcmNwYWQ7CisKKyAgc3JjcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NyY19wYWRfYnlfbmFtZSAoZWxlbWVudCwgdG1wbCwgInNpbmsiKTsKKyAgaWYgKGNhcHMpCisgICAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLCBnc3RfZXZlbnRfbmV3X2NhcHMgKGNhcHMpKSwKKyAgICAgICAgImNvdWxkIG5vdCBzZXQgY2FwcyBvbiBwYWQiKTsKKyAgcmV0dXJuIHNyY3BhZDsKK30KKworR3N0UGFkICoKK2dzdF9jaGVja19zZXR1cF9zcmNfcGFkX2J5X25hbWUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAorICAgIEdzdFN0YXRpY1BhZFRlbXBsYXRlICogdG1wbCwgY29uc3QgZ2NoYXIgKiBuYW1lKQoreworICBHc3RQYWQgKnNyY3BhZCwgKnNpbmtwYWQ7CisKKyAgLyogc2VuZGluZyBwYWQgKi8KKyAgc3JjcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKHRtcGwsICJzcmMiKTsKKyAgR1NUX0RFQlVHX09CSkVDVCAoZWxlbWVudCwgInNldHRpbmcgdXAgc2VuZGluZyBwYWQgJXAiLCBzcmNwYWQpOworICBmYWlsX2lmIChzcmNwYWQgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgYSBzcmNwYWQiKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjcGFkLCAic3JjcGFkIiwgMSk7CisKKyAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChlbGVtZW50LCBuYW1lKTsKKyAgaWYgKHNpbmtwYWQgPT0gTlVMTCkKKyAgICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChlbGVtZW50LCBuYW1lKTsKKyAgZmFpbF9pZiAoc2lua3BhZCA9PSBOVUxMLCAiQ291bGQgbm90IGdldCBzaW5rIHBhZCBmcm9tICVzIiwKKyAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc2lua3BhZCwgInNpbmtwYWQiLCAyKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAoc3JjcGFkLCBzaW5rcGFkKSA9PSBHU1RfUEFEX0xJTktfT0ssCisgICAgICAiQ291bGQgbm90IGxpbmsgc291cmNlIGFuZCAlcyBzaW5rIHBhZHMiLCBHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOyAgIC8qIGJlY2F1c2Ugd2UgZ290IGl0IGhpZ2hlciB1cCAqLworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rcGFkLCAic2lua3BhZCIsIDEpOworCisgIHJldHVybiBzcmNwYWQ7Cit9CisKK3ZvaWQKK2dzdF9jaGVja190ZWFyZG93bl9wYWRfYnlfbmFtZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIGNvbnN0IGdjaGFyICogbmFtZSkKK3sKKyAgR3N0UGFkICpwYWRfcGVlciwgKnBhZF9lbGVtZW50OworCisgIC8qIGNsZWFuIHVwIGZsb2F0aW5nIHNyYyBwYWQgKi8KKyAgcGFkX2VsZW1lbnQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZWxlbWVudCwgbmFtZSk7CisgIC8qIFdlIGRvbid0IGNoZWNrIHRoZSByZWZjb3VudCBoZXJlIHNpbmNlIHRoZXJlICptaWdodCogYmUKKyAgICogYSBwYWQgY2FjaGUgaG9sZGluZyBhbiBleHRyYSByZWZlcmVuY2Ugb24gcGFkX2VsZW1lbnQuCisgICAqIFRvIGdldCB0byBhIHN0YXRlIHdoZXJlIG5vIHBhZCBjYWNoZSB3aWxsIGV4aXN0LAorICAgKiB3ZSBmaXJzdCB1bmxpbmsgdGhhdCBwYWQuICovCisgIHBhZF9wZWVyID0gZ3N0X3BhZF9nZXRfcGVlciAocGFkX2VsZW1lbnQpOworCisgIGlmIChwYWRfcGVlcikgeworICAgIGlmIChnc3RfcGFkX2dldF9kaXJlY3Rpb24gKHBhZF9lbGVtZW50KSA9PSBHU1RfUEFEX1NJTkspCisgICAgICBnc3RfcGFkX3VubGluayAocGFkX3BlZXIsIHBhZF9lbGVtZW50KTsKKyAgICBlbHNlCisgICAgICBnc3RfcGFkX3VubGluayAocGFkX2VsZW1lbnQsIHBhZF9wZWVyKTsKKyAgfQorCisgIC8qIHBhZCByZWZzIGhlbGQgYnkgYm90aCBjcmVhdG9yIGFuZCB0aGlzIGZ1bmN0aW9uICh0aHJvdWdoIF9nZXQpICovCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHBhZF9lbGVtZW50LCAiZWxlbWVudCBwYWRfZWxlbWVudCIsIDIpOworICBnc3Rfb2JqZWN0X3VucmVmIChwYWRfZWxlbWVudCk7CisgIC8qIG9uZSBtb3JlIHJlZiBpcyBoZWxkIGJ5IGVsZW1lbnQgaXRzZWxmICovCisKKyAgaWYgKHBhZF9wZWVyKSB7CisgICAgLyogcGFkIHJlZnMgaGVsZCBieSBib3RoIGNyZWF0b3IgYW5kIHRoaXMgZnVuY3Rpb24gKHRocm91Z2ggX2dldF9wZWVyKSAqLworICAgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHBhZF9wZWVyLCAiY2hlY2sgcGFkX3BlZXIiLCAyKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWRfcGVlcik7CisgICAgZ3N0X29iamVjdF91bnJlZiAocGFkX3BlZXIpOworICB9Cit9CisKK3ZvaWQKK2dzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCkKK3sKKyAgZ3N0X2NoZWNrX3RlYXJkb3duX3BhZF9ieV9uYW1lIChlbGVtZW50LCAic2luayIpOworfQorCisvKiBGSVhNRTogc2V0X2NhcHMgaXNuJ3QgdGhhdCB1c2VmdWw7IG1pZ2h0IHdhbnQgdG8gY2hlY2sgaWYgZml4ZWQsCisgKiB0aGVuIHVzZSBzZXRfdXNlX2ZpeGVkIG9yIHNvbWVzdWNoICovCitHc3RQYWQgKgorZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGljUGFkVGVtcGxhdGUgKiB0bXBsLAorICAgIEdzdENhcHMgKiBjYXBzKQoreworICBHc3RQYWQgKnNpbmtwYWQ7CisKKyAgc2lua3BhZCA9IGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZF9ieV9uYW1lIChlbGVtZW50LCB0bXBsLCAic3JjIik7CisgIGlmIChjYXBzKQorICAgIGZhaWxfdW5sZXNzIChnc3RfcGFkX3NlbmRfZXZlbnQgKHNpbmtwYWQsIGdzdF9ldmVudF9uZXdfY2FwcyAoY2FwcykpLAorICAgICAgICAiQ291bGQgbm90IHNldCBwYWQgY2FwcyIpOworICByZXR1cm4gc2lua3BhZDsKK30KKworR3N0UGFkICoKK2dzdF9jaGVja19zZXR1cF9zaW5rX3BhZF9ieV9uYW1lIChHc3RFbGVtZW50ICogZWxlbWVudCwKKyAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqIHRtcGwsIGNvbnN0IGdjaGFyICogbmFtZSkKK3sKKyAgR3N0UGFkICpzcmNwYWQsICpzaW5rcGFkOworCisgIC8qIHJlY2VpdmluZyBwYWQgKi8KKyAgc2lua3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICh0bXBsLCAic2luayIpOworICBHU1RfREVCVUdfT0JKRUNUIChlbGVtZW50LCAic2V0dGluZyB1cCByZWNlaXZpbmcgcGFkICVwIiwgc2lua3BhZCk7CisgIGZhaWxfaWYgKHNpbmtwYWQgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgYSBzaW5rcGFkIik7CisKKyAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGVsZW1lbnQsIG5hbWUpOworICBpZiAoc3JjcGFkID09IE5VTEwpCisgICAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChlbGVtZW50LCBuYW1lKTsKKyAgZmFpbF9pZiAoc3JjcGFkID09IE5VTEwsICJDb3VsZCBub3QgZ2V0IHNvdXJjZSBwYWQgZnJvbSAlcyIsCisgICAgICBHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSk7CisgIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChzaW5rcGFkLCBnc3RfY2hlY2tfY2hhaW5fZnVuYyk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoZWxlbWVudCwgIkxpbmtpbmcgZWxlbWVudCBzcmMgcGFkIGFuZCByZWNlaXZpbmcgc2luayBwYWQiKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAoc3JjcGFkLCBzaW5rcGFkKSA9PSBHU1RfUEFEX0xJTktfT0ssCisgICAgICAiQ291bGQgbm90IGxpbmsgJXMgc291cmNlIGFuZCBzaW5rIHBhZHMiLCBHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7ICAgIC8qIGJlY2F1c2Ugd2UgZ290IGl0IGhpZ2hlciB1cCAqLworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmNwYWQsICJzcmNwYWQiLCAxKTsKKworICBHU1RfREVCVUdfT0JKRUNUIChlbGVtZW50LCAic2V0IHVwIHNyY3BhZCwgcmVmY291bnQgaXMgMSIpOworICByZXR1cm4gc2lua3BhZDsKK30KKwordm9pZAorZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCkKK3sKKyAgZ3N0X2NoZWNrX3RlYXJkb3duX3BhZF9ieV9uYW1lIChlbGVtZW50LCAic3JjIik7Cit9CisKKy8qKgorICogZ3N0X2NoZWNrX2Ryb3BfYnVmZmVyczoKKyAqCisgKiBVbnJlZiBhbmQgcmVtb3ZlIGFsbCBidWZmZXJzIHRoYXQgYXJlIGluIHRoZSBnbG9iYWwgQGJ1ZmZlcnMgR0xpc3QsCisgKiBlbXB0eWluZyB0aGUgbGlzdC4KKyAqCisgKiBTaW5jZTogMC4xMC4xOAorICovCit2b2lkCitnc3RfY2hlY2tfZHJvcF9idWZmZXJzICh2b2lkKQoreworICB3aGlsZSAoYnVmZmVycyAhPSBOVUxMKSB7CisgICAgZ3N0X2J1ZmZlcl91bnJlZiAoR1NUX0JVRkZFUiAoYnVmZmVycy0+ZGF0YSkpOworICAgIGJ1ZmZlcnMgPSBnX2xpc3RfZGVsZXRlX2xpbmsgKGJ1ZmZlcnMsIGJ1ZmZlcnMpOworICB9Cit9CisKKy8qKgorICogZ3N0X2NoZWNrX2NhcHNfZXF1YWw6CisgKiBAY2FwczE6IGZpcnN0IGNhcHMgdG8gY29tcGFyZQorICogQGNhcHMyOiBzZWNvbmQgY2FwcyB0byBjb21wYXJlCisgKgorICogQ29tcGFyZSB0d28gY2FwcyB3aXRoIGdzdF9jYXBzX2lzX2VxdWFsIGFuZCBmYWlsIHVubGVzcyB0aGV5IGFyZQorICogZXF1YWwuCisgKgorICogU2luY2U6IDAuMTAuMTgKKyAqLwordm9pZAorZ3N0X2NoZWNrX2NhcHNfZXF1YWwgKEdzdENhcHMgKiBjYXBzMSwgR3N0Q2FwcyAqIGNhcHMyKQoreworICBnY2hhciAqbmFtZTEgPSBnc3RfY2Fwc190b19zdHJpbmcgKGNhcHMxKTsKKyAgZ2NoYXIgKm5hbWUyID0gZ3N0X2NhcHNfdG9fc3RyaW5nIChjYXBzMik7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChjYXBzMSwgY2FwczIpLAorICAgICAgImNhcHMgKCclcycpIGlzIG5vdCBlcXVhbCB0byBjYXBzICgnJXMnKSIsIG5hbWUxLCBuYW1lMik7CisgIGdfZnJlZSAobmFtZTEpOworICBnX2ZyZWUgKG5hbWUyKTsKK30KKworCisvKioKKyAqIGdzdF9jaGVja19idWZmZXJfZGF0YToKKyAqIEBidWZmZXI6IGJ1ZmZlciB0byBjb21wYXJlCisgKiBAZGF0YTogZGF0YSB0byBjb21wYXJlIHRvCisgKiBAc2l6ZTogc2l6ZSBvZiBkYXRhIHRvIGNvbXBhcmUKKyAqCisgKiBDb21wYXJlIHRoZSBidWZmZXIgY29udGVudHMgd2l0aCBAZGF0YSBhbmQgQHNpemUuCisgKi8KK3ZvaWQKK2dzdF9jaGVja19idWZmZXJfZGF0YSAoR3N0QnVmZmVyICogYnVmZmVyLCBnY29uc3Rwb2ludGVyIGRhdGEsIGdzaXplIHNpemUpCit7CisgIGd1aW50OCAqYmRhdGE7CisgIGdzaXplIGJzaXplOworCisgIGJkYXRhID0gZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJmJzaXplLCBOVUxMLCBHU1RfTUFQX1JFQUQpOworICBmYWlsX3VubGVzcyAobWVtY21wIChiZGF0YSwgZGF0YSwgc2l6ZSkgPT0gMCwgImJ1ZmZlciBjb250ZW50cyBub3QgZXF1YWwiKTsKKyAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCBiZGF0YSwgYnNpemUpOworfQorCisvKioKKyAqIGdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVyX2xpc3Q6CisgKiBAZWxlbWVudF9uYW1lOiBuYW1lIG9mIHRoZSBlbGVtZW50IHRoYXQgbmVlZHMgdG8gYmUgY3JlYXRlZAorICogQGJ1ZmZlcl9pbjogYSBsaXN0IG9mIGJ1ZmZlcnMgdGhhdCBuZWVkcyB0byBiZSBwdWNoZWQgdG8gdGhlIGVsZW1lbnQKKyAqIEBidWZmZXJfb3V0OiBhIGxpc3Qgb2YgYnVmZmVycyB0aGF0IHdlIGV4cGVjdCBmcm9tIHRoZSBlbGVtZW50CisgKiBAbGFzdF9mbG93X3JldHVybjogdGhlIGxhc3QgYnVmZmVyIHB1c2ggbmVlZHMgdG8gZ2l2ZSB0aGlzIEdzdEZsb3dSZXR1cm4KKyAqCisgKiBDcmVhdGUgYW4gQGVsZW1lbnQgd2l0aCB0aGUgZmFjdG9yeSB3aXRoIHRoZSBuYW1lIGFuZCBwdXNoIHRoZSBidWZmZXJzIGluCisgKiBAYnVmZmVyX2luIHRvIHRoaXMgZWxlbWVudC4gVGhlIGVsZW1lbnQgc2hvdWxkIGNyZWF0ZSB0aGUgYnVmZmVycyBlcXVhbCB0bworICogdGhlIGJ1ZmZlcnMgaW4gQGJ1ZmZlcl9vdXQuIFdlIG9ubHkgY2hlY2sgdGhlIGNhcHMsIHNpemUgYW5kIHRoZSBkYXRhIG9mIHRoZQorICogYnVmZmVycy4gVGhpcyBmdW5jdGlvbiB1bnJlZnMgdGhlIGJ1ZmZlcnMgaW4gdGhlIHR3byBsaXN0cy4KKyAqIFRoZSBsYXN0X2Zsb3dfcmV0dXJuIHBhcmFtZXRlciBpbmRpY2F0ZXMgdGhlIGV4cGVjdGVkIGZsb3cgcmV0dXJuIHZhbHVlIGZyb20KKyAqIHB1c2hpbmcgdGhlIGZpbmFsIGJ1ZmZlciBpbiB0aGUgbGlzdC4KKyAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gc2V0IHVwIGEgdGVzdCB3aGljaCBwdXNoZXMgc29tZSBidWZmZXJzIGFuZCB0aGVuIGFuCisgKiBpbnZhbGlkIGJ1ZmZlciwgd2hlbiB0aGUgZmluYWwgYnVmZmVyIGlzIGV4cGVjdGVkIHRvIGZhaWwsIGZvciBleGFtcGxlLgorICogCisgKiBTaW5jZTogMC4xMC4xOAorICovCisvKiBGSVhNRSAwLjExOiByZW5hbWUgdGhpcyBmdW5jdGlvbiBub3cgdGhhdCB0aGVyZSdzIEdzdEJ1ZmZlckxpc3Q/ICovCit2b2lkCitnc3RfY2hlY2tfZWxlbWVudF9wdXNoX2J1ZmZlcl9saXN0IChjb25zdCBnY2hhciAqIGVsZW1lbnRfbmFtZSwKKyAgICBHTGlzdCAqIGJ1ZmZlcl9pbiwgR0xpc3QgKiBidWZmZXJfb3V0LCBHc3RGbG93UmV0dXJuIGxhc3RfZmxvd19yZXR1cm4pCit7CisjaWYgMAorICBHc3RDYXBzICpzaW5rX2NhcHM7CisgIEdzdENhcHMgKnNyY19jYXBzID0gTlVMTDsKKyNlbmRpZgorICBHc3RFbGVtZW50ICplbGVtZW50OworICBHc3RQYWQgKnBhZF9wZWVyOworICBHc3RQYWQgKnNpbmtfcGFkID0gTlVMTDsKKyAgR3N0UGFkICpzcmNfcGFkOworICBHc3RCdWZmZXIgKmJ1ZmZlcjsKKworICAvKiBjaGVjayB0aGF0IHRoZXJlIGFyZSBubyBidWZmZXJzIHdhaXRpbmcgKi8KKyAgZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycyAoKTsKKyAgLyogY3JlYXRlIHRoZSBlbGVtZW50ICovCisgIGVsZW1lbnQgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoZWxlbWVudF9uYW1lKTsKKyAgZmFpbF9pZiAoZWxlbWVudCA9PSBOVUxMLCAiZmFpbGVkIHRvIGNyZWF0ZSB0aGUgZWxlbWVudCAnJXMnIiwgZWxlbWVudF9uYW1lKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSwgInRoZSBlbGVtZW50IGlzIG5vIGVsZW1lbnQiKTsKKyAgLyogY3JlYXRlIHRoZSBzcmMgcGFkICovCisgIGJ1ZmZlciA9IEdTVF9CVUZGRVIgKGJ1ZmZlcl9pbi0+ZGF0YSk7CisKKyAgZmFpbF91bmxlc3MgKEdTVF9JU19CVUZGRVIgKGJ1ZmZlciksICJUaGVyZSBzaG91bGQgYmUgYSBidWZmZXIgaW4gYnVmZmVyX2luIik7CisjaWYgMAorICBzcmNfY2FwcyA9IEdTVF9CVUZGRVJfQ0FQUyAoYnVmZmVyKTsKKyNlbmRpZgorICBzcmNfcGFkID0gZ3N0X3BhZF9uZXcgKE5VTEwsIEdTVF9QQURfU1JDKTsKKyNpZiAwCisgIGdzdF9wYWRfc2V0X2NhcHMgKHNyY19wYWQsIHNyY19jYXBzKTsKKyNlbmRpZgorICBwYWRfcGVlciA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChlbGVtZW50LCAic2luayIpOworICBmYWlsX2lmIChwYWRfcGVlciA9PSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAoc3JjX3BhZCwgcGFkX3BlZXIpID09IEdTVF9QQURfTElOS19PSywKKyAgICAgICJDb3VsZCBub3QgbGluayBzb3VyY2UgYW5kICVzIHNpbmsgcGFkcyIsIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKKyAgZ3N0X29iamVjdF91bnJlZiAocGFkX3BlZXIpOworICAvKiBhY3RpdmF0ZSB0aGUgcGFkICovCisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjX3BhZCwgVFJVRSk7CisgIEdTVF9ERUJVRyAoInNyYyBwYWQgYWN0aXZhdGVkIik7CisgIC8qIGRvbid0IGNyZWF0ZSB0aGUgc2lua19wYWQgaWYgdGhlcmUgaXMgbm8gYnVmZmVyX291dCBsaXN0ICovCisgIGlmIChidWZmZXJfb3V0ICE9IE5VTEwpIHsKKyNpZiAwCisgICAgZ2NoYXIgKnRlbXA7CisjZW5kaWYKKworICAgIEdTVF9ERUJVRyAoImJ1ZmZlciBvdXQgZGV0ZWN0ZWQsIGNyZWF0aW5nIHRoZSBzaW5rIHBhZCIpOworICAgIC8qIGdldCB0aGUgc2luayBjYXBzICovCisjaWYgMAorICAgIHNpbmtfY2FwcyA9IEdTVF9CVUZGRVJfQ0FQUyAoR1NUX0JVRkZFUiAoYnVmZmVyX291dC0+ZGF0YSkpOworICAgIGZhaWxfdW5sZXNzIChHU1RfSVNfQ0FQUyAoc2lua19jYXBzKSwgImJ1ZmZlciBvdXQgZG9uJ3QgaGF2ZSBjYXBzIik7CisgICAgdGVtcCA9IGdzdF9jYXBzX3RvX3N0cmluZyAoc2lua19jYXBzKTsKKworICAgIEdTVF9ERUJVRyAoInNpbmsgY2FwcyByZXF1ZXN0ZWQgYnkgYnVmZmVyIG91dDogJyVzJyIsIHRlbXApOworICAgIGdfZnJlZSAodGVtcCk7CisgICAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2ZpeGVkIChzaW5rX2NhcHMpLCAid2UgbmVlZCBmaXhlZCBjYXBzIik7CisjZW5kaWYKKyAgICAvKiBnZXQgdGhlIHNpbmsgcGFkICovCisgICAgc2lua19wYWQgPSBnc3RfcGFkX25ldyAoTlVMTCwgR1NUX1BBRF9TSU5LKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX0lTX1BBRCAoc2lua19wYWQpKTsKKyNpZiAwCisgICAgZ3N0X3BhZF9zZXRfY2FwcyAoc2lua19wYWQsIHNpbmtfY2Fwcyk7CisjZW5kaWYKKyAgICAvKiBnZXQgdGhlIHBlZXIgcGFkICovCisgICAgcGFkX3BlZXIgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZWxlbWVudCwgInNyYyIpOworICAgIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHBhZF9wZWVyLCBzaW5rX3BhZCkgPT0gR1NUX1BBRF9MSU5LX09LLAorICAgICAgICAiQ291bGQgbm90IGxpbmsgc2luayBhbmQgJXMgc291cmNlIHBhZHMiLCBHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSk7CisgICAgZ3N0X29iamVjdF91bnJlZiAocGFkX3BlZXIpOworICAgIC8qIGNvbmZpZ3VyZSB0aGUgc2luayBwYWQgKi8KKyAgICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoc2lua19wYWQsIGdzdF9jaGVja19jaGFpbl9mdW5jKTsKKyAgICBnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmtfcGFkLCBUUlVFKTsKKyAgfQorICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LAorICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCisgICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7CisgIC8qIHB1c2ggYWxsIHRoZSBidWZmZXJzIGluIHRoZSBidWZmZXJfaW4gbGlzdCAqLworICBmYWlsX3VubGVzcyAoZ19saXN0X2xlbmd0aCAoYnVmZmVyX2luKSA+IDAsICJ0aGUgYnVmZmVyX2luIGxpc3QgaXMgZW1wdHkiKTsKKyAgd2hpbGUgKGJ1ZmZlcl9pbiAhPSBOVUxMKSB7CisgICAgR3N0QnVmZmVyICpuZXh0X2J1ZmZlciA9IEdTVF9CVUZGRVIgKGJ1ZmZlcl9pbi0+ZGF0YSk7CisKKyAgICBmYWlsX3VubGVzcyAoR1NUX0lTX0JVRkZFUiAobmV4dF9idWZmZXIpLAorICAgICAgICAiZGF0YSBpbiBidWZmZXJfaW4gc2hvdWxkIGJlIGEgYnVmZmVyIik7CisgICAgLyogcmVtb3ZlIHRoZSBidWZmZXIgZnJvbSB0aGUgbGlzdCAqLworICAgIGJ1ZmZlcl9pbiA9IGdfbGlzdF9yZW1vdmUgKGJ1ZmZlcl9pbiwgbmV4dF9idWZmZXIpOworICAgIGlmIChidWZmZXJfaW4gPT0gTlVMTCkgeworICAgICAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAoc3JjX3BhZCwgbmV4dF9idWZmZXIpID09IGxhc3RfZmxvd19yZXR1cm4sCisgICAgICAgICAgIndlIGV4cGVjdCBzb21ldGhpbmcgZWxzZSBmcm9tIHRoZSBsYXN0IGJ1ZmZlciIpOworICAgIH0gZWxzZSB7CisgICAgICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChzcmNfcGFkLCBuZXh0X2J1ZmZlcikgPT0gR1NUX0ZMT1dfT0ssCisgICAgICAgICAgIkZhaWxlZCB0byBwdXNoIGJ1ZmZlciBpbiIpOworICAgIH0KKyAgfQorICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LAorICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJjb3VsZCBub3Qgc2V0IHRvIG51bGwiKTsKKyAgLyogY2hlY2sgdGhhdCB0aGVyZSBpcyBhIGJ1ZmZlciBvdXQgKi8KKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIGdfbGlzdF9sZW5ndGggKGJ1ZmZlcl9vdXQpKTsKKyAgd2hpbGUgKGJ1ZmZlcnMgIT0gTlVMTCkgeworICAgIEdzdEJ1ZmZlciAqbmV3ID0gR1NUX0JVRkZFUiAoYnVmZmVycy0+ZGF0YSk7CisgICAgR3N0QnVmZmVyICpvcmlnID0gR1NUX0JVRkZFUiAoYnVmZmVyX291dC0+ZGF0YSk7CisgICAgZ3NpemUgbmV3c2l6ZSwgb3JpZ3NpemU7CisgICAgZ3VpbnQ4ICpuZXdkYXRhLCAqb3JpZ2RhdGE7CisKKyAgICBuZXdkYXRhID0gZ3N0X2J1ZmZlcl9tYXAgKG5ldywgJm5ld3NpemUsIE5VTEwsIEdTVF9NQVBfUkVBRCk7CisgICAgb3JpZ2RhdGEgPSBnc3RfYnVmZmVyX21hcCAob3JpZywgJm9yaWdzaXplLCBOVUxMLCBHU1RfTUFQX1JFQUQpOworCisgICAgR1NUX0xPRyAoIm9yaWcgYnVmZmVyOiBzaXplICUiIEdfR1NJWkVfRk9STUFULCBvcmlnc2l6ZSk7CisgICAgR1NUX0xPRyAoIm5ldyAgYnVmZmVyOiBzaXplICUiIEdfR1NJWkVfRk9STUFULCBuZXdzaXplKTsKKyAgICBHU1RfTUVNRFVNUCAoIm9yaWcgYnVmZmVyIiwgb3JpZ2RhdGEsIG9yaWdzaXplKTsKKyAgICBHU1RfTUVNRFVNUCAoIm5ldyAgYnVmZmVyIiwgbmV3ZGF0YSwgbmV3c2l6ZSk7CisKKyAgICAvKiByZW1vdmUgdGhlIGJ1ZmZlcnMgKi8KKyAgICBidWZmZXJzID0gZ19saXN0X3JlbW92ZSAoYnVmZmVycywgbmV3KTsKKyAgICBidWZmZXJfb3V0ID0gZ19saXN0X3JlbW92ZSAoYnVmZmVyX291dCwgb3JpZyk7CisKKyAgICBmYWlsX3VubGVzcyAob3JpZ3NpemUgPT0gbmV3c2l6ZSwgInNpemUgb2YgdGhlIGJ1ZmZlcnMgYXJlIG5vdCB0aGUgc2FtZSIpOworICAgIGZhaWxfdW5sZXNzIChtZW1jbXAgKG9yaWdkYXRhLCBuZXdkYXRhLCBuZXdzaXplKSA9PSAwLAorICAgICAgICAiZGF0YSBpcyBub3QgdGhlIHNhbWUiKTsKKyNpZiAwCisgICAgZ3N0X2NoZWNrX2NhcHNfZXF1YWwgKEdTVF9CVUZGRVJfQ0FQUyAob3JpZyksIEdTVF9CVUZGRVJfQ0FQUyAobmV3KSk7CisjZW5kaWYKKworICAgIGdzdF9idWZmZXJfdW5tYXAgKG9yaWcsIG9yaWdkYXRhLCBvcmlnc2l6ZSk7CisgICAgZ3N0X2J1ZmZlcl91bm1hcCAobmV3LCBuZXdkYXRhLCBuZXdzaXplKTsKKworICAgIGdzdF9idWZmZXJfdW5yZWYgKG5ldyk7CisgICAgZ3N0X2J1ZmZlcl91bnJlZiAob3JpZyk7CisgIH0KKyAgLyogdGVhcmRvd24gdGhlIGVsZW1lbnQgYW5kIHBhZHMgKi8KKyAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzcmNfcGFkLCBGQUxTRSk7CisgIGdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkIChlbGVtZW50KTsKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rX3BhZCwgRkFMU0UpOworICBnc3RfY2hlY2tfdGVhcmRvd25fc2lua19wYWQgKGVsZW1lbnQpOworICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAoZWxlbWVudCk7Cit9CisKKy8qKgorICogZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXI6CisgKiBAZWxlbWVudF9uYW1lOiBuYW1lIG9mIHRoZSBlbGVtZW50IHRoYXQgbmVlZHMgdG8gYmUgY3JlYXRlZAorICogQGJ1ZmZlcl9pbjogcHVzaCB0aGlzIGJ1ZmZlciB0byB0aGUgZWxlbWVudAorICogQGJ1ZmZlcl9vdXQ6IGNvbXBhcmUgdGhlIHJlc3VsdCB3aXRoIHRoaXMgYnVmZmVyCisgKgorICogQ3JlYXRlIGFuIEBlbGVtZW50IHdpdGggdGhlIGZhY3Rvcnkgd2l0aCB0aGUgbmFtZSBhbmQgcHVzaCB0aGUKKyAqIEBidWZmZXJfaW4gdG8gdGhpcyBlbGVtZW50LiBUaGUgZWxlbWVudCBzaG91bGQgY3JlYXRlIG9uZSBidWZmZXIKKyAqIGFuZCB0aGlzIHdpbGwgYmUgY29tcGFyZWQgd2l0aCBAYnVmZmVyX291dC4gV2Ugb25seSBjaGVjayB0aGUgY2FwcworICogYW5kIHRoZSBkYXRhIG9mIHRoZSBidWZmZXJzLiBUaGlzIGZ1bmN0aW9uIHVucmVmcyB0aGUgYnVmZmVycy4KKyAqIAorICogU2luY2U6IDAuMTAuMTgKKyAqLwordm9pZAorZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXIgKGNvbnN0IGdjaGFyICogZWxlbWVudF9uYW1lLAorICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcl9pbiwgR3N0QnVmZmVyICogYnVmZmVyX291dCkKK3sKKyAgR0xpc3QgKmluID0gTlVMTDsKKyAgR0xpc3QgKm91dCA9IE5VTEw7CisKKyAgaW4gPSBnX2xpc3RfYXBwZW5kIChpbiwgYnVmZmVyX2luKTsKKyAgb3V0ID0gZ19saXN0X2FwcGVuZCAob3V0LCBidWZmZXJfb3V0KTsKKworICBnc3RfY2hlY2tfZWxlbWVudF9wdXNoX2J1ZmZlcl9saXN0IChlbGVtZW50X25hbWUsIGluLCBvdXQsIEdTVF9GTE9XX09LKTsKK30KKwordm9pZAorZ3N0X2NoZWNrX2FiaV9saXN0IChHc3RDaGVja0FCSVN0cnVjdCBsaXN0W10sIGdib29sZWFuIGhhdmVfYWJpX3NpemVzKQoreworICBpZiAoaGF2ZV9hYmlfc2l6ZXMpIHsKKyAgICBnYm9vbGVhbiBvayA9IFRSVUU7CisgICAgZ2ludCBpOworCisgICAgZm9yIChpID0gMDsgbGlzdFtpXS5uYW1lOyBpKyspIHsKKyAgICAgIGlmIChsaXN0W2ldLnNpemUgIT0gbGlzdFtpXS5hYmlfc2l6ZSkgeworICAgICAgICBvayA9IEZBTFNFOworICAgICAgICBnX3ByaW50ICgic2l6ZW9mKCVzKSBpcyAlZCwgZXhwZWN0ZWQgJWRcbiIsCisgICAgICAgICAgICBsaXN0W2ldLm5hbWUsIGxpc3RbaV0uc2l6ZSwgbGlzdFtpXS5hYmlfc2l6ZSk7CisgICAgICB9CisgICAgfQorICAgIGZhaWxfdW5sZXNzIChvaywgImZhaWxlZCBBQkkgY2hlY2siKTsKKyAgfSBlbHNlIHsKKyAgICBjb25zdCBnY2hhciAqZm47CisKKyAgICBpZiAoKGZuID0gZ19nZXRlbnYgKCJHU1RfQUJJIikpKSB7CisgICAgICBHRXJyb3IgKmVyciA9IE5VTEw7CisgICAgICBHU3RyaW5nICpzOworICAgICAgZ2ludCBpOworCisgICAgICBzID0gZ19zdHJpbmdfbmV3ICgiXG5Hc3RDaGVja0FCSVN0cnVjdCBsaXN0W10gPSB7XG4iKTsKKyAgICAgIGZvciAoaSA9IDA7IGxpc3RbaV0ubmFtZTsgaSsrKSB7CisgICAgICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHMsICIgIHtcIiVzXCIsIHNpemVvZiAoJXMpLCAlZH0sXG4iLAorICAgICAgICAgICAgbGlzdFtpXS5uYW1lLCBsaXN0W2ldLm5hbWUsIGxpc3RbaV0uc2l6ZSk7CisgICAgICB9CisgICAgICBnX3N0cmluZ19hcHBlbmQgKHMsICIgIHtOVUxMLCAwLCAwfVxuIik7CisgICAgICBnX3N0cmluZ19hcHBlbmQgKHMsICJ9O1xuIik7CisgICAgICBpZiAoIWdfZmlsZV9zZXRfY29udGVudHMgKGZuLCBzLT5zdHIsIHMtPmxlbiwgJmVycikpIHsKKyAgICAgICAgZ19wcmludCAoIiVzIiwgcy0+c3RyKTsKKyAgICAgICAgZ19wcmludGVyciAoIlxuRmFpbGVkIHRvIHdyaXRlIEFCSSBpbmZvcm1hdGlvbjogJXNcbiIsIGVyci0+bWVzc2FnZSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBnX3ByaW50ICgiXG5Xcm90ZSBBQkkgaW5mb3JtYXRpb24gdG8gJyVzJy5cbiIsIGZuKTsKKyAgICAgIH0KKyAgICAgIGdfc3RyaW5nX2ZyZWUgKHMsIFRSVUUpOworICAgIH0gZWxzZSB7CisgICAgICBnX3ByaW50ICgiTm8gc3RydWN0dXJlIHNpemUgbGlzdCB3YXMgZ2VuZXJhdGVkIGZvciB0aGlzIGFyY2hpdGVjdHVyZS5cbiIpOworICAgICAgZ19wcmludCAoIlJ1biB3aXRoIEdTVF9BQkkgZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0IHRvIG91dHB1dCBoZWFkZXIuXG4iKTsKKyAgICB9CisgIH0KK30KKworZ2ludAorZ3N0X2NoZWNrX3J1bl9zdWl0ZSAoU3VpdGUgKiBzdWl0ZSwgY29uc3QgZ2NoYXIgKiBuYW1lLCBjb25zdCBnY2hhciAqIGZuYW1lKQoreworICBTUnVubmVyICpzcjsKKyAgZ2NoYXIgKnhtbGZpbGVuYW1lID0gTlVMTDsKKyAgZ2ludCBuZjsKKworICBzciA9IHNydW5uZXJfY3JlYXRlIChzdWl0ZSk7CisKKyAgaWYgKGdfZ2V0ZW52ICgiR1NUX0NIRUNLX1hNTCIpKSB7CisgICAgLyogaG93IGx1Y2t5IHdlIGFyZSB0byBoYXZlIF9fRklMRV9fIGVuZCBpbiAuYyAqLworICAgIHhtbGZpbGVuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgiJXNoZWNrLnhtbCIsIGZuYW1lKTsKKworICAgIHNydW5uZXJfc2V0X3htbCAoc3IsIHhtbGZpbGVuYW1lKTsKKyAgfQorCisgIHNydW5uZXJfcnVuX2FsbCAoc3IsIENLX05PUk1BTCk7CisgIG5mID0gc3J1bm5lcl9udGVzdHNfZmFpbGVkIChzcik7CisgIGdfZnJlZSAoeG1sZmlsZW5hbWUpOworICBzcnVubmVyX2ZyZWUgKHNyKTsKKyAgcmV0dXJuIG5mOworfQorCitnYm9vbGVhbgorX2dzdF9jaGVja19ydW5fdGVzdF9mdW5jIChjb25zdCBnY2hhciAqIGZ1bmNfbmFtZSkKK3sKKyAgY29uc3QgZ2NoYXIgKmdzdF9jaGVja3M7CisgIGdib29sZWFuIHJlcyA9IEZBTFNFOworICBnY2hhciAqKmZ1bmNzLCAqKmY7CisKKyAgZ3N0X2NoZWNrcyA9IGdfZ2V0ZW52ICgiR1NUX0NIRUNLUyIpOworCisgIC8qIG5vIGZpbHRlciBzcGVjaWZpZWQgPT4gcnVuIGFsbCBjaGVja3MgKi8KKyAgaWYgKGdzdF9jaGVja3MgPT0gTlVMTCB8fCAqZ3N0X2NoZWNrcyA9PSAnXDAnKQorICAgIHJldHVybiBUUlVFOworCisgIC8qIG9ubHkgcnVuIHNwZWNpZmllZCBmdW5jdGlvbnMgKi8KKyAgZnVuY3MgPSBnX3N0cnNwbGl0IChnc3RfY2hlY2tzLCAiLCIsIC0xKTsKKyAgZm9yIChmID0gZnVuY3M7IGYgIT0gTlVMTCAmJiAqZiAhPSBOVUxMOyArK2YpIHsKKyAgICBpZiAoZ19wYXR0ZXJuX21hdGNoX3NpbXBsZSAoKmYsIGZ1bmNfbmFtZSkpIHsKKyAgICAgIHJlcyA9IFRSVUU7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgZ19zdHJmcmVldiAoZnVuY3MpOworICByZXR1cm4gcmVzOworfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaCBiL2xpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ0YTkzNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmgKQEAgLTAsMCArMSw0NTYgQEAKKy8qIEdTdHJlYW1lcgorICoKKyAqIENvbW1vbiBjb2RlIGZvciBHU3RyZWFtZXIgdW5pdHRlc3RzCisgKgorICogQ29weXJpZ2h0IChDKSA8MjAwND4gVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorICogQ29weXJpZ2h0IChDKSA8MjAwOD4gVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fR1NUX0NIRUNLX0hfXworI2RlZmluZSBfX0dTVF9DSEVDS19IX18KKworI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgPGdzdC9jaGVjay9pbnRlcm5hbC1jaGVjay5oPgorCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCitHX0JFR0lOX0RFQ0xTCisKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4gKGNoZWNrX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGNoZWNrX2RlYnVnCisKKy8qIGxvZ2dpbmcgZnVuY3Rpb24gZm9yIHRlc3RzCisgKiBhIHRlc3QgdXNlcyBnX21lc3NhZ2UoKSB0byBsb2cgYSBkZWJ1ZyBsaW5lCisgKiBhIGdzdCB1bml0IHRlc3QgY2FuIGJlIHJ1biB3aXRoIEdTVF9URVNUX0RFQlVHIGVudiB2YXIgc2V0IHRvIHNlZSB0aGUKKyAqIG1lc3NhZ2VzCisgKi8KK2V4dGVybiBnYm9vbGVhbiBfZ3N0X2NoZWNrX3RocmVhZHNfcnVubmluZzsKK2V4dGVybiBnYm9vbGVhbiBfZ3N0X2NoZWNrX3JhaXNlZF9jcml0aWNhbDsKK2V4dGVybiBnYm9vbGVhbiBfZ3N0X2NoZWNrX3JhaXNlZF93YXJuaW5nOworZXh0ZXJuIGdib29sZWFuIF9nc3RfY2hlY2tfZXhwZWN0aW5nX2xvZzsKKworLyogZ2xvYmFsIHZhcmlhYmxlcyB1c2VkIGluIHRlc3QgbWV0aG9kcyAqLworZXh0ZXJuIEdMaXN0ICogYnVmZmVyczsKKworZXh0ZXJuIEdNdXRleCAqY2hlY2tfbXV0ZXg7CitleHRlcm4gR0NvbmQgKmNoZWNrX2NvbmQ7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIGludCBzaXplOworICBpbnQgYWJpX3NpemU7Cit9CitHc3RDaGVja0FCSVN0cnVjdDsKKwordm9pZCBnc3RfY2hlY2tfaW5pdCAoaW50ICphcmdjLCBjaGFyICoqYXJndltdKTsKKworR3N0Rmxvd1JldHVybiBnc3RfY2hlY2tfY2hhaW5fZnVuYyAoR3N0UGFkICogcGFkLCBHc3RCdWZmZXIgKiBidWZmZXIpOworCit2b2lkIGdzdF9jaGVja19tZXNzYWdlX2Vycm9yIChHc3RNZXNzYWdlICogbWVzc2FnZSwgR3N0TWVzc2FnZVR5cGUgdHlwZSwKKyAgICBHUXVhcmsgZG9tYWluLCBnaW50IGNvZGUpOworCitHc3RFbGVtZW50ICpnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoY29uc3QgZ2NoYXIgKiBmYWN0b3J5KTsKK3ZvaWQgZ3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQgKEdzdEVsZW1lbnQgKiBlbGVtZW50KTsKK0dzdFBhZCAqZ3N0X2NoZWNrX3NldHVwX3NyY19wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAorICAgIEdzdFN0YXRpY1BhZFRlbXBsYXRlICogdG1wbCwgR3N0Q2FwcyAqIGNhcHMpOworR3N0UGFkICogZ3N0X2NoZWNrX3NldHVwX3NyY19wYWRfYnlfbmFtZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCisgICAgICAgICAgR3N0U3RhdGljUGFkVGVtcGxhdGUgKiB0bXBsLCBjb25zdCBnY2hhciAqbmFtZSk7CitHc3RQYWQgKiBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWRfYnlfbmFtZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIAorICAgICAgICAgIEdzdFN0YXRpY1BhZFRlbXBsYXRlICogdG1wbCwgY29uc3QgZ2NoYXIgKm5hbWUpOwordm9pZCBnc3RfY2hlY2tfdGVhcmRvd25fcGFkX2J5X25hbWUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBjb25zdCBnY2hhciAqbmFtZSk7Cit2b2lkIGdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCk7Cit2b2lkIGdzdF9jaGVja19kcm9wX2J1ZmZlcnMgKHZvaWQpOwordm9pZCBnc3RfY2hlY2tfY2Fwc19lcXVhbCAoR3N0Q2FwcyAqIGNhcHMxLCBHc3RDYXBzICogY2FwczIpOwordm9pZCBnc3RfY2hlY2tfYnVmZmVyX2RhdGEgKEdzdEJ1ZmZlciAqIGJ1ZmZlciwgZ2NvbnN0cG9pbnRlciBkYXRhLCBnc2l6ZSBzaXplKTsKK3ZvaWQgZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXJfbGlzdCAoY29uc3QgZ2NoYXIgKiBlbGVtZW50X25hbWUsCisgICAgR0xpc3QgKiBidWZmZXJfaW4sIEdMaXN0ICogYnVmZmVyX291dCwgR3N0Rmxvd1JldHVybiBsYXN0X2Zsb3dfcmV0dXJuKTsKK3ZvaWQgZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXIgKGNvbnN0IGdjaGFyICogZWxlbWVudF9uYW1lLAorICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcl9pbiwgR3N0QnVmZmVyICogYnVmZmVyX291dCk7CitHc3RQYWQgKmdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCisgICAgR3N0U3RhdGljUGFkVGVtcGxhdGUgKiB0bXBsLCBHc3RDYXBzICogY2Fwcyk7Cit2b2lkIGdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQpOwordm9pZCBnc3RfY2hlY2tfYWJpX2xpc3QgKEdzdENoZWNrQUJJU3RydWN0IGxpc3RbXSwgZ2Jvb2xlYW4gaGF2ZV9hYmlfc2l6ZXMpOworZ2ludCBnc3RfY2hlY2tfcnVuX3N1aXRlIChTdWl0ZSAqIHN1aXRlLCBjb25zdCBnY2hhciAqIG5hbWUsCisgICAgY29uc3QgZ2NoYXIgKiBmbmFtZSk7CisKKyNkZWZpbmUgZmFpbF91bmxlc3NfbWVzc2FnZV9lcnJvcihtc2csIGRvbWFpbiwgY29kZSkJCVwKK2dzdF9jaGVja19tZXNzYWdlX2Vycm9yIChtc2csIEdTVF9NRVNTQUdFX0VSUk9SLAkJXAorICBHU1RfICMjIGRvbWFpbiAjIyBfRVJST1IsIEdTVF8gIyMgZG9tYWluICMjIF9FUlJPUl8gIyMgY29kZSkKKyNkZWZpbmUgYXNzZXJ0X21lc3NhZ2VfZXJyb3IobSwgZCwgYykgZmFpbF91bmxlc3NfbWVzc2FnZV9lcnJvcihtLCBkLCBjKQorCisvKioKKyAqIEdTVF9TVEFSVF9URVNUOgorICogQF9fdGVzdG5hbWU6IHRlc3QgZnVuY3Rpb24gbmFtZQorICoKKyAqIHdyYXBwZXIgZm9yIGNoZWNrcyBTVEFSVF9URVNUCisgKi8KKy8qKgorICogR1NUX0VORF9URVNUOgorICoKKyAqIHdyYXBwZXIgZm9yIGNoZWNrcyBFTkRfVEVTVAorICovCisjZGVmaW5lIEdTVF9TVEFSVF9URVNUKF9fdGVzdG5hbWUpIFwKK3N0YXRpYyB2b2lkIF9fdGVzdG5hbWUgKGludCBfX2lfXylcCit7XAorICBHU1RfREVCVUcgKCJ0ZXN0IHN0YXJ0Iik7IFwKKyAgdGNhc2VfZm5fc3RhcnQgKCIiIyBfX3Rlc3RuYW1lLCBfX0ZJTEVfXywgX19MSU5FX18pOworCisjZGVmaW5lIEdTVF9FTkRfVEVTVCBHU1RfTE9HICgiY2xlYW5pbmcgdXAgdGFza3MiKTsgXAorICAgICAgICAgICAgICAgICAgICAgZ3N0X3Rhc2tfY2xlYW51cF9hbGwgKCk7IFwKKyAgICAgICAgICAgICAgICAgICAgIEVORF9URVNUCisKKy8qIGFkZGl0aW9uYWwgZmFpbCBtYWNyb3MgKi8KKy8qKgorICogZmFpbF91bmxlc3NfZXF1YWxzX2ludDoKKyAqIEBhOiBhICNnaW50IHZhbHVlIG9yIGV4cHJlc3Npb24KKyAqIEBiOiBhICNnaW50IHZhbHVlIG9yIGV4cHJlc3Npb24KKyAqCisgKiBUaGlzIG1hY3JvIGNoZWNrcyB0aGF0IEBhIGFuZCBAYiBhcmUgZXF1YWwgYW5kIGFib3J0cyBpZiB0aGlzIGlzIG5vdCB0aGUKKyAqIGNhc2UsIHByaW50aW5nIGJvdGggZXhwcmVzc2lvbnMgYW5kIHRoZSB2YWx1ZXMgdGhleSBldmFsdWF0ZWQgdG8uIFRoaXMKKyAqIG1hY3JvIGlzIGZvciB1c2UgaW4gdW5pdCB0ZXN0cy4KKyAqLworI2RlZmluZSBmYWlsX3VubGVzc19lcXVhbHNfaW50KGEsIGIpCQkJCQlcCitHX1NUTVRfU1RBUlQgewkJCQkJCQkJXAorICBpbnQgZmlyc3QgPSBhOwkJCQkJCQlcCisgIGludCBzZWNvbmQgPSBiOwkJCQkJCQlcCisgIGZhaWxfdW5sZXNzKGZpcnN0ID09IHNlY29uZCwJCQkJCQlcCisgICAgIiciICNhICInICglZCkgaXMgbm90IGVxdWFsIHRvICciICNiIicgKCVkKSIsIGZpcnN0LCBzZWNvbmQpOwlcCit9IEdfU1RNVF9FTkQ7CisvKioKKyAqIGFzc2VydF9lcXVhbHNfaW50OgorICogQGE6IGEgI2dpbnQgdmFsdWUgb3IgZXhwcmVzc2lvbgorICogQGI6IGEgI2dpbnQgdmFsdWUgb3IgZXhwcmVzc2lvbgorICoKKyAqIFRoaXMgbWFjcm8gY2hlY2tzIHRoYXQgQGEgYW5kIEBiIGFyZSBlcXVhbCBhbmQgYWJvcnRzIGlmIHRoaXMgaXMgbm90IHRoZQorICogY2FzZSwgcHJpbnRpbmcgYm90aCBleHByZXNzaW9ucyBhbmQgdGhlIHZhbHVlcyB0aGV5IGV2YWx1YXRlZCB0by4gVGhpcworICogbWFjcm8gaXMgZm9yIHVzZSBpbiB1bml0IHRlc3RzLgorICovCisjZGVmaW5lIGFzc2VydF9lcXVhbHNfaW50KGEsIGIpIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQoYSwgYikKKworLyoqCisgKiBmYWlsX3VubGVzc19lcXVhbHNfaW50NjQ6CisgKiBAYTogYSAjZ2ludDY0IHZhbHVlIG9yIGV4cHJlc3Npb24KKyAqIEBiOiBhICNnaW50NjQgdmFsdWUgb3IgZXhwcmVzc2lvbgorICoKKyAqIFRoaXMgbWFjcm8gY2hlY2tzIHRoYXQgQGEgYW5kIEBiIGFyZSBlcXVhbCBhbmQgYWJvcnRzIGlmIHRoaXMgaXMgbm90IHRoZQorICogY2FzZSwgcHJpbnRpbmcgYm90aCBleHByZXNzaW9ucyBhbmQgdGhlIHZhbHVlcyB0aGV5IGV2YWx1YXRlZCB0by4gVGhpcworICogbWFjcm8gaXMgZm9yIHVzZSBpbiB1bml0IHRlc3RzLgorICovCisjZGVmaW5lIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NChhLCBiKQkJCQkJXAorR19TVE1UX1NUQVJUIHsJCQkJCQkJCVwKKyAgZ2ludDY0IGZpcnN0ID0gYTsJCQkJCQkJXAorICBnaW50NjQgc2Vjb25kID0gYjsJCQkJCQkJXAorICBmYWlsX3VubGVzcyhmaXJzdCA9PSBzZWNvbmQsCQkJCQkJXAorICAgICInIiAjYSAiJyAoJSIgR19HSU5UNjRfRk9STUFUIikgaXMgbm90IGVxdWFsIHRvICciICNiIicgKCUiCQlcCisgICAgR19HSU5UNjRfRk9STUFUIikiLCBmaXJzdCwgc2Vjb25kKTsJCQkJCVwKK30gR19TVE1UX0VORDsKKy8qKgorICogYXNzZXJ0X2VxdWFsc19pbnQ2NDoKKyAqIEBhOiBhICNnaW50NjQgdmFsdWUgb3IgZXhwcmVzc2lvbgorICogQGI6IGEgI2dpbnQ2NCB2YWx1ZSBvciBleHByZXNzaW9uCisgKgorICogVGhpcyBtYWNybyBjaGVja3MgdGhhdCBAYSBhbmQgQGIgYXJlIGVxdWFsIGFuZCBhYm9ydHMgaWYgdGhpcyBpcyBub3QgdGhlCisgKiBjYXNlLCBwcmludGluZyBib3RoIGV4cHJlc3Npb25zIGFuZCB0aGUgdmFsdWVzIHRoZXkgZXZhbHVhdGVkIHRvLiBUaGlzCisgKiBtYWNybyBpcyBmb3IgdXNlIGluIHVuaXQgdGVzdHMuCisgKi8KKyNkZWZpbmUgYXNzZXJ0X2VxdWFsc19pbnQ2NChhLCBiKSBmYWlsX3VubGVzc19lcXVhbHNfaW50NjQoYSwgYikKKworLyoqCisgKiBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0OgorICogQGE6IGEgI2d1aW50NjQgdmFsdWUgb3IgZXhwcmVzc2lvbgorICogQGI6IGEgI2d1aW50NjQgdmFsdWUgb3IgZXhwcmVzc2lvbgorICoKKyAqIFRoaXMgbWFjcm8gY2hlY2tzIHRoYXQgQGEgYW5kIEBiIGFyZSBlcXVhbCBhbmQgYWJvcnRzIGlmIHRoaXMgaXMgbm90IHRoZQorICogY2FzZSwgcHJpbnRpbmcgYm90aCBleHByZXNzaW9ucyBhbmQgdGhlIHZhbHVlcyB0aGV5IGV2YWx1YXRlZCB0by4gVGhpcworICogbWFjcm8gaXMgZm9yIHVzZSBpbiB1bml0IHRlc3RzLgorICovCisjZGVmaW5lIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQoYSwgYikJCQkJCVwKK0dfU1RNVF9TVEFSVCB7CQkJCQkJCQlcCisgIGd1aW50NjQgZmlyc3QgPSBhOwkJCQkJCQlcCisgIGd1aW50NjQgc2Vjb25kID0gYjsJCQkJCQkJXAorICBmYWlsX3VubGVzcyhmaXJzdCA9PSBzZWNvbmQsCQkJCQkJXAorICAgICInIiAjYSAiJyAoJSIgR19HVUlOVDY0X0ZPUk1BVCAiKSBpcyBub3QgZXF1YWwgdG8gJyIgI2IiJyAoJSIJXAorICAgIEdfR1VJTlQ2NF9GT1JNQVQgIikiLCBmaXJzdCwgc2Vjb25kKTsJCQkJXAorfSBHX1NUTVRfRU5EOworLyoqCisgKiBhc3NlcnRfZXF1YWxzX3VpbnQ2NDoKKyAqIEBhOiBhICNndWludDY0IHZhbHVlIG9yIGV4cHJlc3Npb24KKyAqIEBiOiBhICNndWludDY0IHZhbHVlIG9yIGV4cHJlc3Npb24KKyAqCisgKiBUaGlzIG1hY3JvIGNoZWNrcyB0aGF0IEBhIGFuZCBAYiBhcmUgZXF1YWwgYW5kIGFib3J0cyBpZiB0aGlzIGlzIG5vdCB0aGUKKyAqIGNhc2UsIHByaW50aW5nIGJvdGggZXhwcmVzc2lvbnMgYW5kIHRoZSB2YWx1ZXMgdGhleSBldmFsdWF0ZWQgdG8uIFRoaXMKKyAqIG1hY3JvIGlzIGZvciB1c2UgaW4gdW5pdCB0ZXN0cy4KKyAqLworI2RlZmluZSBhc3NlcnRfZXF1YWxzX3VpbnQ2NChhLCBiKSBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0KGEsIGIpCisKKy8qKgorICogZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZzoKKyAqIEBhOiBhIHN0cmluZyBsaXRlcmFsIG9yIGV4cHJlc3Npb24KKyAqIEBiOiBhIHN0cmluZyBsaXRlcmFsIG9yIGV4cHJlc3Npb24KKyAqCisgKiBUaGlzIG1hY3JvIGNoZWNrcyB0aGF0IEBhIGFuZCBAYiBhcmUgZXF1YWwgKGFzIHBlciBzdHJjbXApIGFuZCBhYm9ydHMgaWYKKyAqIHRoaXMgaXMgbm90IHRoZSBjYXNlLCBwcmludGluZyBib3RoIGV4cHJlc3Npb25zIGFuZCB0aGUgdmFsdWVzIHRoZXkKKyAqIGV2YWx1YXRlZCB0by4gVGhpcyBtYWNybyBpcyBmb3IgdXNlIGluIHVuaXQgdGVzdHMuCisgKi8KKyNkZWZpbmUgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyhhLCBiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGNvbnN0IGdjaGFyICogZmlyc3QgPSBhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY29uc3QgZ2NoYXIgKiBzZWNvbmQgPSBiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBmYWlsX3VubGVzcyhnX3N0cmNtcDAgKGZpcnN0LCBzZWNvbmQpID09IDAsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiciICNhICInICglcykgaXMgbm90IGVxdWFsIHRvICciICNiIicgKCVzKSIsIGZpcnN0LCBzZWNvbmQpOyAgIFwKK30gR19TVE1UX0VORDsKKy8qKgorICogYXNzZXJ0X2VxdWFsc19zdHJpbmc6CisgKiBAYTogYSBzdHJpbmcgbGl0ZXJhbCBvciBleHByZXNzaW9uCisgKiBAYjogYSBzdHJpbmcgbGl0ZXJhbCBvciBleHByZXNzaW9uCisgKgorICogVGhpcyBtYWNybyBjaGVja3MgdGhhdCBAYSBhbmQgQGIgYXJlIGVxdWFsIChhcyBwZXIgc3RyY21wKSBhbmQgYWJvcnRzIGlmCisgKiB0aGlzIGlzIG5vdCB0aGUgY2FzZSwgcHJpbnRpbmcgYm90aCBleHByZXNzaW9ucyBhbmQgdGhlIHZhbHVlcyB0aGV5CisgKiBldmFsdWF0ZWQgdG8uIFRoaXMgbWFjcm8gaXMgZm9yIHVzZSBpbiB1bml0IHRlc3RzLgorICovCisjZGVmaW5lIGFzc2VydF9lcXVhbHNfc3RyaW5nKGEsIGIpIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcoYSwgYikKKworLyoqCisgKiBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQ6CisgKiBAYTogYSAjZ2RvdWJsZSBvciAjZ2Zsb2F0IHZhbHVlIG9yIGV4cHJlc3Npb24KKyAqIEBiOiBhICNnZG91YmxlIG9yICNnZmxvYXQgdmFsdWUgb3IgZXhwcmVzc2lvbgorICoKKyAqIFRoaXMgbWFjcm8gY2hlY2tzIHRoYXQgQGEgYW5kIEBiIGFyZSAoYWxtb3N0KSBlcXVhbCBhbmQgYWJvcnRzIGlmIHRoaXMKKyAqIGlzIG5vdCB0aGUgY2FzZSwgcHJpbnRpbmcgYm90aCBleHByZXNzaW9ucyBhbmQgdGhlIHZhbHVlcyB0aGV5IGV2YWx1YXRlZAorICogdG8uIFRoaXMgbWFjcm8gaXMgZm9yIHVzZSBpbiB1bml0IHRlc3RzLgorICoKKyAqIFNpbmNlOiAwLjEwLjE0CisgKi8KKyNkZWZpbmUgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0KGEsIGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK0dfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG91YmxlIGZpcnN0ID0gYTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG91YmxlIHNlY29uZCA9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLyogVGhpcyB3aWxsIG9ubHkgd29yayBmb3IgJ25vcm1hbCcgdmFsdWVzIGFuZCB2YWx1ZXMgYXJvdW5kIDAsIFwKKyAgICogd2hpY2ggc2hvdWxkIGJlIGdvb2QgZW5vdWdoIGZvciBvdXIgcHVycG9zZXMgaGVyZSAqLyAgICAgICAgIFwKKyAgZmFpbF91bmxlc3MoZmFicyAoZmlyc3QgLSBzZWNvbmQpIDwgMC4wMDAwMDAxLCAgICAgICAgICAgICAgICAgIFwKKyAgICAiJyIgI2EgIicgKCVnKSBpcyBub3QgZXF1YWwgdG8gJyIgI2IgIicgKCVnKSIsIGZpcnN0LCBzZWNvbmQpO1wKK30gR19TVE1UX0VORDsKKworLyoqCisgKiBhc3NlcnRfZXF1YWxzX2Zsb2F0OgorICogQGE6IGEgI2dkb3VibGUgb3IgI2dmbG9hdCB2YWx1ZSBvciBleHByZXNzaW9uCisgKiBAYjogYSAjZ2RvdWJsZSBvciAjZ2Zsb2F0IHZhbHVlIG9yIGV4cHJlc3Npb24KKyAqCisgKiBUaGlzIG1hY3JvIGNoZWNrcyB0aGF0IEBhIGFuZCBAYiBhcmUgKGFsbW9zdCkgZXF1YWwgYW5kIGFib3J0cyBpZiB0aGlzCisgKiBpcyBub3QgdGhlIGNhc2UsIHByaW50aW5nIGJvdGggZXhwcmVzc2lvbnMgYW5kIHRoZSB2YWx1ZXMgdGhleSBldmFsdWF0ZWQKKyAqIHRvLiBUaGlzIG1hY3JvIGlzIGZvciB1c2UgaW4gdW5pdCB0ZXN0cy4KKyAqCisgKiBTaW5jZTogMC4xMC4xNAorICovCisjZGVmaW5lIGFzc2VydF9lcXVhbHNfZmxvYXQoYSwgYikgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0KGEsIGIpCisKKworLyoqKgorICogdGhyZWFkIHRlc3QgbWFjcm9zIGFuZCB2YXJpYWJsZXMKKyAqLworZXh0ZXJuIEdMaXN0ICp0aHJlYWRfbGlzdDsKK2V4dGVybiBHTXV0ZXggKm11dGV4OworZXh0ZXJuIEdDb25kICpzdGFydF9jb25kOwkvKiB1c2VkIHRvIG5vdGlmeSBtYWluIHRocmVhZCBvZiB0aHJlYWQgc3RhcnR1cHMgKi8KK2V4dGVybiBHQ29uZCAqc3luY19jb25kOwkvKiB1c2VkIHRvIHN5bmNocm9uaXplIGFsbCB0aHJlYWRzIGFuZCBtYWluIHRocmVhZCAqLworCisjZGVmaW5lIE1BSU5fU1RBUlRfVEhSRUFEUyhjb3VudCwgZnVuY3Rpb24sIGRhdGEpCQlcCitNQUlOX0lOSVQoKTsJCQkJCQkJXAorTUFJTl9TVEFSVF9USFJFQURfRlVOQ1RJT05TKGNvdW50LCBmdW5jdGlvbiwgZGF0YSk7CQlcCitNQUlOX1NZTkNIUk9OSVpFKCk7CisKKyNkZWZpbmUgTUFJTl9JTklUKCkJCQlcCitHX1NUTVRfU1RBUlQgewkJCQlcCisgIF9nc3RfY2hlY2tfdGhyZWFkc19ydW5uaW5nID0gVFJVRTsJXAorCQkJCQlcCisgIGlmIChtdXRleCA9PSBOVUxMKSB7CQkJXAorICAgIG11dGV4ID0gZ19tdXRleF9uZXcgKCk7CQlcCisgICAgc3RhcnRfY29uZCA9IGdfY29uZF9uZXcgKCk7CQlcCisgICAgc3luY19jb25kID0gZ19jb25kX25ldyAoKTsJCVwKKyAgfQkJCQkJXAorfSBHX1NUTVRfRU5EOworCisjZGVmaW5lIE1BSU5fU1RBUlRfVEhSRUFEX0ZVTkNUSU9OUyhjb3VudCwgZnVuY3Rpb24sIGRhdGEpCVwKK0dfU1RNVF9TVEFSVCB7CQkJCQkJCVwKKyAgaW50IGk7CQkJCQkJCVwKKyAgZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsJCQkJCVwKKyAgICBNQUlOX1NUQVJUX1RIUkVBRF9GVU5DVElPTiAoaSwgZnVuY3Rpb24sIGRhdGEpOwkJXAorICB9CQkJCQkJCQlcCit9IEdfU1RNVF9FTkQ7CisKKyNkZWZpbmUgTUFJTl9TVEFSVF9USFJFQURfRlVOQ1RJT04oaSwgZnVuY3Rpb24sIGRhdGEpCQlcCitHX1NUTVRfU1RBUlQgewkJCQkJCQlcCisgICAgR1RocmVhZCAqdGhyZWFkID0gTlVMTDsJCQkJCVwKKyAgICBHU1RfREVCVUcgKCJNQUlOOiBjcmVhdGluZyB0aHJlYWQgJWQiLCBpKTsJCQlcCisgICAgZ19tdXRleF9sb2NrIChtdXRleCk7CQkJCQlcCisgICAgdGhyZWFkID0gZ190aHJlYWRfY3JlYXRlICgoR1RocmVhZEZ1bmMpIGZ1bmN0aW9uLCBkYXRhLAlcCisJVFJVRSwgTlVMTCk7CQkJCQkJXAorICAgIC8qIHdhaXQgZm9yIHRocmVhZCB0byBzaWduYWwgdXMgdGhhdCBpdCdzIHJlYWR5ICovCQlcCisgICAgR1NUX0RFQlVHICgiTUFJTjogd2FpdGluZyBmb3IgdGhyZWFkICVkIiwgaSk7CQlcCisgICAgZ19jb25kX3dhaXQgKHN0YXJ0X2NvbmQsIG11dGV4KTsJCQkJXAorICAgIGdfbXV0ZXhfdW5sb2NrIChtdXRleCk7CQkJCQlcCisJCQkJCQkJCVwKKyAgICB0aHJlYWRfbGlzdCA9IGdfbGlzdF9hcHBlbmQgKHRocmVhZF9saXN0LCB0aHJlYWQpOwkJXAorfSBHX1NUTVRfRU5EOworCisKKyNkZWZpbmUgTUFJTl9TWU5DSFJPTklaRSgpCQlcCitHX1NUTVRfU1RBUlQgewkJCQlcCisgIEdTVF9ERUJVRyAoIk1BSU46IHN5bmNocm9uaXppbmciKTsJXAorICBnX2NvbmRfYnJvYWRjYXN0IChzeW5jX2NvbmQpOwkJXAorICBHU1RfREVCVUcgKCJNQUlOOiBzeW5jaHJvbml6ZWQiKTsJXAorfSBHX1NUTVRfRU5EOworCisjZGVmaW5lIE1BSU5fU1RPUF9USFJFQURTKCkJCQkJCVwKK0dfU1RNVF9TVEFSVCB7CQkJCQkJCVwKKyAgX2dzdF9jaGVja190aHJlYWRzX3J1bm5pbmcgPSBGQUxTRTsJCQkJXAorCQkJCQkJCQlcCisgIC8qIGpvaW4gYWxsIHRocmVhZHMgKi8JCQkJCVwKKyAgR1NUX0RFQlVHICgiTUFJTjogam9pbmluZyIpOwkJCQkJXAorICBnX2xpc3RfZm9yZWFjaCAodGhyZWFkX2xpc3QsIChHRnVuYykgZ190aHJlYWRfam9pbiwgTlVMTCk7CVwKKyAgZ19saXN0X2ZyZWUgKHRocmVhZF9saXN0KTsJCQkJCVwKKyAgdGhyZWFkX2xpc3QgPSBOVUxMOwkJCQkJCVwKKyAgR1NUX0RFQlVHICgiTUFJTjogam9pbmVkIik7CQkJCQlcCit9IEdfU1RNVF9FTkQ7CisKKyNkZWZpbmUgVEhSRUFEX1NUQVJUKCkJCQkJCQlcCitUSFJFQURfU1RBUlRFRCgpOwkJCQkJCVwKK1RIUkVBRF9TWU5DSFJPTklaRSgpOworCisjZGVmaW5lIFRIUkVBRF9TVEFSVEVEKCkJCQkJCVwKK0dfU1RNVF9TVEFSVCB7CQkJCQkJCVwKKyAgLyogc2lnbmFsIG1haW4gdGhyZWFkIHRoYXQgd2Ugc3RhcnRlZCAqLwkJCVwKKyAgR1NUX0RFQlVHICgiVEhSRUFEICVwOiBzdGFydGVkIiwgZ190aHJlYWRfc2VsZiAoKSk7CQlcCisgIGdfbXV0ZXhfbG9jayAobXV0ZXgpOwkJCQkJCVwKKyAgZ19jb25kX3NpZ25hbCAoc3RhcnRfY29uZCk7CQkJCQlcCit9IEdfU1RNVF9FTkQ7CisKKyNkZWZpbmUgVEhSRUFEX1NZTkNIUk9OSVpFKCkJCQkJCVwKK0dfU1RNVF9TVEFSVCB7CQkJCQkJCVwKKyAgLyogc3luY2hyb25pemUgZXZlcnlvbmUgKi8JCQkJCVwKKyAgR1NUX0RFQlVHICgiVEhSRUFEICVwOiBzeW5jaW5nIiwgZ190aHJlYWRfc2VsZiAoKSk7CQlcCisgIGdfY29uZF93YWl0IChzeW5jX2NvbmQsIG11dGV4KTsJCQkJXAorICBHU1RfREVCVUcgKCJUSFJFQUQgJXA6IHN5bmNlZCIsIGdfdGhyZWFkX3NlbGYgKCkpOwkJXAorICBnX211dGV4X3VubG9jayAobXV0ZXgpOwkJCQkJXAorfSBHX1NUTVRfRU5EOworCisjZGVmaW5lIFRIUkVBRF9TV0lUQ0goKQkJCQkJCVwKK0dfU1RNVF9TVEFSVCB7CQkJCQkJCVwKKyAgLyogYSBtaW5pbWFsIHNsZWVwIGlzIGEgY29udGV4dCBzd2l0Y2ggKi8JCQlcCisgIGdfdXNsZWVwICgxKTsJCQkJCQkJXAorfSBHX1NUTVRfRU5EOworCisjZGVmaW5lIFRIUkVBRF9URVNUX1JVTk5JTkcoKQkoX2dzdF9jaGVja190aHJlYWRzX3J1bm5pbmcgPT0gVFJVRSkKKworLyogYWRkaXRpb25hbCBhc3NlcnRpb25zICovCisjZGVmaW5lIEFTU0VSVF9DUklUSUNBTChjb2RlKQkJCQkJXAorR19TVE1UX1NUQVJUIHsJCQkJCQkJXAorICBfZ3N0X2NoZWNrX2V4cGVjdGluZ19sb2cgPSBUUlVFOwkJCQlcCisgIF9nc3RfY2hlY2tfcmFpc2VkX2NyaXRpY2FsID0gRkFMU0U7CQkJCVwKKyAgY29kZTsJCQkJCQkJCVwKKyAgX2ZhaWxfdW5sZXNzIChfZ3N0X2NoZWNrX3JhaXNlZF9jcml0aWNhbCwgX19GSUxFX18sIF9fTElORV9fLCBcCisgICAgICAgICAgICAgICAgIkV4cGVjdGVkIGdfY3JpdGljYWwsIGdvdCBub3RoaW5nIiwgTlVMTCk7ICAgICAgXAorICBfZ3N0X2NoZWNrX2V4cGVjdGluZ19sb2cgPSBGQUxTRTsJCQkJXAorfSBHX1NUTVRfRU5ECisKKyNkZWZpbmUgQVNTRVJUX1dBUk5JTkcoY29kZSkJCQkJCVwKK0dfU1RNVF9TVEFSVCB7CQkJCQkJCVwKKyAgX2dzdF9jaGVja19leHBlY3RpbmdfbG9nID0gVFJVRTsJCQkJXAorICBfZ3N0X2NoZWNrX3JhaXNlZF93YXJuaW5nID0gRkFMU0U7CQkJCVwKKyAgY29kZTsJCQkJCQkJCVwKKyAgX2ZhaWxfdW5sZXNzIChfZ3N0X2NoZWNrX3JhaXNlZF93YXJuaW5nLCBfX0ZJTEVfXywgX19MSU5FX18sICBcCisgICAgICAgICAgICAgICAgIkV4cGVjdGVkIGdfd2FybmluZywgZ290IG5vdGhpbmciLCBOVUxMKTsgICAgICAgXAorICBfZ3N0X2NoZWNrX2V4cGVjdGluZ19sb2cgPSBGQUxTRTsJCQkJXAorfSBHX1NUTVRfRU5ECisKKworI2RlZmluZSBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UKG9iamVjdCwgbmFtZSwgdmFsdWUpCQlcCitHX1NUTVRfU1RBUlQgewkJCQkJCQlcCisgIGludCByYzsJCQkJCQkJXAorICByYyA9IEdTVF9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKG9iamVjdCk7CQkJXAorICBmYWlsX3VubGVzcyAocmMgPT0gdmFsdWUsCQkJCQlcCisgICAgICAiJXMgKCVwKSByZWZjb3VudCBpcyAlZCBpbnN0ZWFkIG9mICVkIiwJCQlcCisgICAgICBuYW1lLCBvYmplY3QsIHJjLCB2YWx1ZSk7CQkJCQlcCit9IEdfU1RNVF9FTkQKKworI2RlZmluZSBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UX0JFVFdFRU4ob2JqZWN0LCBuYW1lLCBsb3dlciwgdXBwZXIpCVwKK0dfU1RNVF9TVEFSVCB7CQkJCQkJCQlcCisgIGludCByYyA9IEdTVF9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKG9iamVjdCk7CQkJCVwKKyAgaW50IGxvID0gbG93ZXI7CQkJCQkJCVwKKyAgaW50IGhpID0gdXBwZXI7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgZmFpbF91bmxlc3MgKHJjID49IGxvLAkJCQkJCVwKKyAgICAgICIlcyAoJXApIHJlZmNvdW50ICVkIGlzIHNtYWxsZXIgdGhhbiAlZCIsCQkJCVwKKyAgICAgIG5hbWUsIG9iamVjdCwgcmMsIGxvKTsJCQkJCQlcCisgIGZhaWxfdW5sZXNzIChyYyA8PSBoaSwJCQkJCQlcCisgICAgICAiJXMgKCVwKSByZWZjb3VudCAlZCBpcyBiaWdnZXIgdGhhbiAlZCIsCQkJCVwKKyAgICAgIG5hbWUsIG9iamVjdCwgcmMsIGhpKTsJCQkJCQlcCit9IEdfU1RNVF9FTkQKKworCisjZGVmaW5lIEFTU0VSVF9DQVBTX1JFRkNPVU5UKGNhcHMsIG5hbWUsIHZhbHVlKQkJCVwKKwlBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQoY2FwcywgbmFtZSwgdmFsdWUpCisKKyNkZWZpbmUgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVChidWZmZXIsIG5hbWUsIHZhbHVlKQkJXAorCUFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVChidWZmZXIsIG5hbWUsIHZhbHVlKQorCisjZGVmaW5lIEFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVChjYXBzLCBuYW1lLCB2YWx1ZSkJCVwKK0dfU1RNVF9TVEFSVCB7CQkJCQkJCVwKKyAgaW50IHJjOwkJCQkJCQlcCisgIHJjID0gR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChjYXBzKTsJCQlcCisgIGZhaWxfdW5sZXNzIChyYyA9PSB2YWx1ZSwJCQkJCVwKKyAgICAgICAgICAgICAgIG5hbWUgIiByZWZjb3VudCBpcyAlZCBpbnN0ZWFkIG9mICVkIiwgcmMsIHZhbHVlKTtcCit9IEdfU1RNVF9FTkQKKworI2RlZmluZSBBU1NFUlRfU0VUX1NUQVRFKGVsZW1lbnQsIHN0YXRlLCByZXQpCQkJXAorZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwJCQlcCisgIHN0YXRlKSA9PSByZXQsCQkJCQkJXAorICAiY291bGQgbm90IGNoYW5nZSBzdGF0ZSB0byAiICNzdGF0ZSk7CisKKyNkZWZpbmUgR1NUX0NIRUNLX01BSU4obmFtZSkJCQkJCVwKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCQkJCVwKK3sJCQkJCQkJCVwKKyAgU3VpdGUgKnM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGdzdF9jaGVja19pbml0ICgmYXJnYywgJmFyZ3YpOwkJCQlcCisgIHMgPSBuYW1lICMjIF9zdWl0ZSAoKTsJCQkJCVwKKyAgcmV0dXJuIGdzdF9jaGVja19ydW5fc3VpdGUgKHMsICMgbmFtZSwgX19GSUxFX18pOwkJXAorfQorCisvKiBIYWNrIHRvIGFsbG93IHJ1bi10aW1lIHNlbGVjdGlvbiBvZiB1bml0IHRlc3RzIHRvIHJ1biB2aWEgdGhlCisgKiBHU1RfQ0hFQ0tTIGVudmlyb25tZW50IHZhcmlhYmxlICh0ZXN0IGZ1bmN0aW9uIG5hbWVzLCBjb21tYS1zZXBhcmF0ZWQpICovCisKK2dib29sZWFuIF9nc3RfY2hlY2tfcnVuX3Rlc3RfZnVuYyAoY29uc3QgZ2NoYXIgKiBmdW5jX25hbWUpOworCitzdGF0aWMgaW5saW5lIHZvaWQKK19fZ3N0X3RjYXNlX2FkZF90ZXN0IChUQ2FzZSAqIHRjLCBURnVuIHRmLCBjb25zdCBjaGFyICogZm5hbWUsIGludCBzaWduYWwsCisgICAgaW50IGFsbG93ZWRfZXhpdF92YWx1ZSwgaW50IHN0YXJ0LCBpbnQgZW5kKQoreworICBpZiAoX2dzdF9jaGVja19ydW5fdGVzdF9mdW5jIChmbmFtZSkpIHsKKyAgICBfdGNhc2VfYWRkX3Rlc3QgKHRjLCB0ZiwgZm5hbWUsIHNpZ25hbCwgYWxsb3dlZF9leGl0X3ZhbHVlLCBzdGFydCwgZW5kKTsKKyAgfQorfQorCisjZGVmaW5lIF90Y2FzZV9hZGRfdGVzdCBfX2dzdF90Y2FzZV9hZGRfdGVzdAorCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HU1RfQ0hFQ0tfSF9fICovCmRpZmYgLS1naXQgYS9saWJzL2dzdC9jaGVjay9nc3Rjb25zaXN0ZW5jeWNoZWNrZXIuYyBiL2xpYnMvZ3N0L2NoZWNrL2dzdGNvbnNpc3RlbmN5Y2hlY2tlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMWZjNWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2dzdC9jaGVjay9nc3Rjb25zaXN0ZW5jeWNoZWNrZXIuYwpAQCAtMCwwICsxLDE2MCBAQAorLyogR1N0cmVhbWVyCisgKgorICogdW5pdCB0ZXN0aW5nIGhlbHBlciBsaWIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKioKKyAqIFNFQ1RJT046Z3N0Y2hlY2tjb25zaXN0ZW5jeWNoZWNrZXIKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogRGF0YSBmbG93IGNvbnNpc3RlbmN5IGNoZWNrZXIgZm9yIEdTdHJlYW1lciB1bml0IHRlc3RzLgorICoKKyAqIFRoZXNlIG1hY3JvcyBhbmQgZnVuY3Rpb25zIGFyZSBmb3IgaW50ZXJuYWwgdXNlIG9mIHRoZSB1bml0IHRlc3RzIGZvdW5kCisgKiBpbnNpZGUgdGhlICdjaGVjaycgZGlyZWN0b3JpZXMgb2YgdmFyaW91cyBHU3RyZWFtZXIgcGFja2FnZXMuCisgKgorICogU2luY2U6IDAuMTAuMjQKKyAqLworCisjaW5jbHVkZSAiZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmgiCisKK3N0cnVjdCBfR3N0U3RyZWFtQ29uc2lzdGVuY3kKK3sKKyAgZ2Jvb2xlYW4gZmx1c2hpbmc7CisgIGdib29sZWFuIHNlZ21lbnQ7CisgIGdib29sZWFuIGVvczsKKyAgZ3Vsb25nIHByb2JlaWQ7CisgIEdzdFBhZCAqcGFkOworfTsKKworc3RhdGljIGdib29sZWFuCitzb3VyY2VfcGFkX2RhdGFfY2IgKEdzdFBhZCAqIHBhZCwgR3N0UHJvYmVUeXBlIHR5cGUsIEdzdE1pbmlPYmplY3QgKiBkYXRhLAorICAgIEdzdFN0cmVhbUNvbnNpc3RlbmN5ICogY29uc2lzdCkKK3sKKyAgaWYgKEdTVF9JU19CVUZGRVIgKGRhdGEpKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiQnVmZmVyICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKEdTVF9CVUZGRVIgKGRhdGEpKSkpOworICAgIC8qIElmIGFuIEVPUyB3ZW50IHRocm91Z2gsIGEgYnVmZmVyIHdvdWxkIGJlIGludmFsaWQgKi8KKyAgICBmYWlsX2lmIChjb25zaXN0LT5lb3MsICJCdWZmZXIgcmVjZWl2ZWQgYWZ0ZXIgRU9TIik7CisgICAgLyogQnVmZmVycyBuZWVkIHRvIGJlIHByZWNlZGVkIGJ5IGEgc2VnbWVudCBldmVudCAqLworICAgIGZhaWxfdW5sZXNzIChjb25zaXN0LT5zZWdtZW50LCAiQnVmZmVyIHJlY2VpdmVkIHdpdGhvdXQgc2VnbWVudCIpOworICB9IGVsc2UgaWYgKEdTVF9JU19FVkVOVCAoZGF0YSkpIHsKKyAgICBHc3RFdmVudCAqZXZlbnQgPSAoR3N0RXZlbnQgKikgZGF0YTsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIiVzIiwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKKyAgICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKKyAgICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUQVJUOgorICAgICAgICBjb25zaXN0LT5mbHVzaGluZyA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKKyAgICAgICAgLyogUmVjZWl2aW5nIGEgZmx1c2gtc3RvcCBpcyBvbmx5IHZhbGlkIGFmdGVyIHJlY2VpdmluZyBhIGZsdXNoLXN0YXJ0ICovCisgICAgICAgIGZhaWxfdW5sZXNzIChjb25zaXN0LT5mbHVzaGluZywKKyAgICAgICAgICAgICJSZWNlaXZlZCBhIEZMVVNIX1NUT1Agd2l0aG91dCBhIEZMVVNIX1NUQVJUIik7CisgICAgICAgIGZhaWxfaWYgKGNvbnNpc3QtPmVvcywgIlJlY2VpdmVkIGEgRkxVU0hfU1RPUCBhZnRlciBhbiBFT1MiKTsKKyAgICAgICAgY29uc2lzdC0+Zmx1c2hpbmcgPSBGQUxTRTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9FVkVOVF9TRUdNRU5UOgorICAgICAgICBjb25zaXN0LT5zZWdtZW50ID0gVFJVRTsKKyAgICAgICAgY29uc2lzdC0+ZW9zID0gRkFMU0U7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHU1RfRVZFTlRfRU9TOgorICAgICAgICAvKiBGSVhNRSA6IG5vdCAxMDAlIHN1cmUgYWJvdXQgd2hldGhlciB0d28gZW9zIGluIGEgcm93IGlzIHZhbGlkICovCisgICAgICAgIGZhaWxfaWYgKGNvbnNpc3QtPmVvcywgIlJlY2VpdmVkIEVPUyBqdXN0IGFmdGVyIGFub3RoZXIgRU9TIik7CisgICAgICAgIGNvbnNpc3QtPmVvcyA9IFRSVUU7CisgICAgICAgIGNvbnNpc3QtPnNlZ21lbnQgPSBGQUxTRTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9FVkVOVF9UQUc6CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInRhZyAlIiBHU1RfUFRSX0ZPUk1BVCwKKyAgICAgICAgICAgIGdzdF9ldmVudF9nZXRfc3RydWN0dXJlIChldmVudCkpOworICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChHU1RfRVZFTlRfSVNfU0VSSUFMSVpFRCAoZXZlbnQpICYmIEdTVF9FVkVOVF9JU19ET1dOU1RSRUFNIChldmVudCkpIHsKKyAgICAgICAgICBmYWlsX2lmIChjb25zaXN0LT5lb3MsICJFdmVudCByZWNlaXZlZCBhZnRlciBFT1MiKTsKKyAgICAgICAgICBmYWlsX3VubGVzcyAoY29uc2lzdC0+c2VnbWVudCwgIkV2ZW50IHJlY2VpdmVkIGJlZm9yZSBzZWdtZW50Iik7CisgICAgICAgIH0KKyAgICAgICAgLyogRklYTUUgOiBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gZm9yIG90aGVyIGV2ZW50cyAqLworICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICByZXR1cm4gVFJVRTsKK30KKworLyoqCisgKiBnc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9uZXc6CisgKiBAcGFkOiBUaGUgI0dzdFBhZCBvbiB3aGljaCB0aGUgZGF0YWZsb3cgd2lsbCBiZSBjaGVja2VkLgorICoKKyAqIFNldHMgdXAgYSBkYXRhIHByb2JlIG9uIHRoZSBnaXZlbiBwYWQgd2hpY2ggd2lsbCByYWlzZSBhc3NlcnRpb25zIGlmIHRoZQorICogZGF0YSBmbG93IGlzIGluY29uc2lzdGVudC4KKyAqCisgKiBDdXJyZW50bHkgb25seSB3b3JrcyBmb3Igc291cmNlIHBhZHMuCisgKgorICogUmV0dXJuczogQSAjR3N0U3RyZWFtQ29uc2lzdGVuY3kgc3RydWN0dXJlIHVzZWQgdG8gdHJhY2sgZGF0YSBmbG93LgorICoKKyAqIFNpbmNlOiAwLjEwLjI0CisgKi8KKworR3N0U3RyZWFtQ29uc2lzdGVuY3kgKgorZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfbmV3IChHc3RQYWQgKiBwYWQpCit7CisgIEdzdFN0cmVhbUNvbnNpc3RlbmN5ICpjb25zaXN0OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwYWQgIT0gTlVMTCwgTlVMTCk7CisKKyAgY29uc2lzdCA9IGdfbmV3MCAoR3N0U3RyZWFtQ29uc2lzdGVuY3ksIDEpOworICBjb25zaXN0LT5wYWQgPSBnX29iamVjdF9yZWYgKHBhZCk7CisgIGNvbnNpc3QtPnByb2JlaWQgPQorICAgICAgZ3N0X3BhZF9hZGRfcHJvYmUgKHBhZCwgR1NUX1BST0JFX1RZUEVfREFUQSwKKyAgICAgIChHc3RQYWRQcm9iZUNhbGxiYWNrKSBzb3VyY2VfcGFkX2RhdGFfY2IsIGNvbnNpc3QsIE5VTEwpOworCisgIHJldHVybiBjb25zaXN0OworfQorCisvKioKKyAqIGdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX3Jlc2V0OgorICogQGNvbnNpc3Q6IFRoZSAjR3N0U3RyZWFtQ29uc2lzdGVuY3kgdG8gcmVzZXQuCisgKgorICogUmVzZXQgdGhlIHN0cmVhbSBjaGVja2VyJ3MgaW50ZXJuYWwgdmFyaWFibGVzLgorICoKKyAqIFNpbmNlOiAwLjEwLjI0CisgKi8KKwordm9pZAorZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfcmVzZXQgKEdzdFN0cmVhbUNvbnNpc3RlbmN5ICogY29uc2lzdCkKK3sKKyAgY29uc2lzdC0+ZW9zID0gRkFMU0U7CisgIGNvbnNpc3QtPmZsdXNoaW5nID0gRkFMU0U7CisgIGNvbnNpc3QtPnNlZ21lbnQgPSBGQUxTRTsKK30KKworLyoqCisgKiBnc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9mcmVlOgorICogQGNvbnNpc3Q6IFRoZSAjR3N0U3RyZWFtQ29uc2lzdGVuY3kgdG8gZnJlZS4KKyAqCisgKiBGcmVlcyB0aGUgYWxsb2NhdGVkIGRhdGEgYW5kIHByb2JlIGFzc29jaWF0ZWQgd2l0aCBAY29uc2lzdC4KKyAqCisgKiBTaW5jZTogMC4xMC4yNAorICovCisKK3ZvaWQKK2dzdF9jb25zaXN0ZW5jeV9jaGVja2VyX2ZyZWUgKEdzdFN0cmVhbUNvbnNpc3RlbmN5ICogY29uc2lzdCkKK3sKKyAgLyogUmVtb3ZlIHRoZSBkYXRhIHByb2JlICovCisgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChjb25zaXN0LT5wYWQsIGNvbnNpc3QtPnByb2JlaWQpOworICBnX29iamVjdF91bnJlZiAoY29uc2lzdC0+cGFkKTsKKyAgZ19mcmVlIChjb25zaXN0KTsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NoZWNrL2dzdGNvbnNpc3RlbmN5Y2hlY2tlci5oIGIvbGlicy9nc3QvY2hlY2svZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM4OGFmNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2NoZWNrL2dzdGNvbnNpc3RlbmN5Y2hlY2tlci5oCkBAIC0wLDAgKzEsNDggQEAKKy8qIEdTdHJlYW1lcgorICoKKyAqIHVuaXQgdGVzdGluZyBoZWxwZXIgbGliCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0dTVF9DT05TSVNURU5DWV9DSEVDS0VSX0hfXworI2RlZmluZSBfX0dTVF9DT05TSVNURU5DWV9DSEVDS0VSX0hfXworCisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisKK0dfQkVHSU5fREVDTFMKKworLyoqCisgKiBHc3RTdHJlYW1Db25zaXN0ZW5jeToKKyAqCisgKiBPcGFxdWUgY29uc2lzdGVuY3kgY2hlY2tlciBoYW5kbGUuCisgKgorICogU2luY2U6IDAuMTAuMjQKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX0dzdFN0cmVhbUNvbnNpc3RlbmN5IEdzdFN0cmVhbUNvbnNpc3RlbmN5OworCisKK0dzdFN0cmVhbUNvbnNpc3RlbmN5ICogZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfbmV3ICAgKEdzdFBhZCAqIHBhZCk7CisKK3ZvaWQgICAgICAgICAgICAgICAgICAgZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfcmVzZXQgKEdzdFN0cmVhbUNvbnNpc3RlbmN5ICogY29uc2lzdCk7CisKK3ZvaWQgICAgICAgICAgICAgICAgICAgZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfZnJlZSAgKEdzdFN0cmVhbUNvbnNpc3RlbmN5ICogY29uc2lzdCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9DT05TSVNURU5DWV9DSEVDS0VSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY2hlY2svbGliY2hlY2svTWFrZWZpbGUuYW0gYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzQ2NWUzCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9nc3QvY2hlY2svbGliY2hlY2svTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwzOCBAQAorbm9pbnN0X0xUTElCUkFSSUVTCT0gbGliY2hlY2tpbnRlcm5hbC5sYQorCitFWFRSQV9ESVNUID0gY2hlY2suaC5pbgorCitDRklMRVMgPVwKKwljaGVjay5jCQlcCisJY2hlY2tfZXJyb3IuYwlcCisJY2hlY2tfbGlzdC5jCVwKKwljaGVja19sb2cuYwlcCisJY2hlY2tfbXNnLmMJXAorCWNoZWNrX3BhY2suYwlcCisJY2hlY2tfcHJpbnQuYwlcCisJY2hlY2tfcnVuLmMJXAorCWNoZWNrX3N0ci5jCisKK0hGSUxFUyA9XAorCWNoZWNrLmgJCVwKKwljaGVja19lcnJvci5oCVwKKwljaGVja19pbXBsLmgJXAorCWNoZWNrX2xpc3QuaAlcCisJY2hlY2tfbG9nLmgJXAorCWNoZWNrX21zZy5oCVwKKwljaGVja19wYWNrLmgJXAorCWNoZWNrX3ByaW50LmgJXAorCWNoZWNrX3N0ci5oCisKK25vaW5zdF9IRUFERVJTID0gJChIRklMRVMpCisKK2xpYmNoZWNraW50ZXJuYWxfbGFfU09VUkNFUwk9ICQoQ0ZJTEVTKSAkKEhGSUxFUykKKworIyBkZWZpbmUgSEFWRV9QVEhSRUFEIGhlcmUgYXMgd2VsbCBzbyB3ZSBrZWVwIGNoYW5nZXMgdG8gdGhlIGNvZGUgdG8gYSBtaW5pbXVtCitpZiBIQVZFX1BUSFJFQURfSAorbGliY2hlY2tpbnRlcm5hbF9sYV9DRkxBR1MJPSAtRF9HTlVfU09VUkNFIC1ESEFWRV9QVEhSRUFECitsaWJjaGVja2ludGVybmFsX2xhX0xJQkFERAk9IC1scHRocmVhZAorZWxzZQorbGliY2hlY2tpbnRlcm5hbF9sYV9DRkxBR1MJPSAtRF9HTlVfU09VUkNFCitsaWJjaGVja2ludGVybmFsX2xhX0xJQkFERAk9CitlbmRpZgpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY2hlY2svbGliY2hlY2svTWFrZWZpbGUuaW4gYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjAxZmE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9nc3QvY2hlY2svbGliY2hlY2svTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw3OTQgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gbGlicy9nc3QvY2hlY2svbGliY2hlY2sKK0RJU1RfQ09NTU9OID0gJChub2luc3RfSEVBREVSUykgJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKKwkkKHNyY2RpcikvTWFrZWZpbGUuaW4gJChzcmNkaXIpL2NoZWNrLmguaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1weXRob24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXNjcnViLWluY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9IGNoZWNrLmgKK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitMVExJQlJBUklFUyA9ICQobm9pbnN0X0xUTElCUkFSSUVTKQorbGliY2hlY2tpbnRlcm5hbF9sYV9ERVBFTkRFTkNJRVMgPQorYW1fX29iamVjdHNfMSA9IGxpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2subG8gXAorCWxpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfZXJyb3IubG8gXAorCWxpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfbGlzdC5sbyBcCisJbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19sb2cubG8gXAorCWxpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfbXNnLmxvIFwKKwlsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX3BhY2subG8gXAorCWxpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfcHJpbnQubG8gXAorCWxpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfcnVuLmxvIFwKKwlsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX3N0ci5sbworYW1fX29iamVjdHNfMiA9CithbV9saWJjaGVja2ludGVybmFsX2xhX09CSkVDVFMgPSAkKGFtX19vYmplY3RzXzEpICQoYW1fX29iamVjdHNfMikKK2xpYmNoZWNraW50ZXJuYWxfbGFfT0JKRUNUUyA9ICQoYW1fbGliY2hlY2tpbnRlcm5hbF9sYV9PQkpFQ1RTKQorQU1fVl9sdCA9ICQoYW1fX3ZfbHRfJChWKSkKK2FtX192X2x0XyA9ICQoYW1fX3ZfbHRfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9sdF8wID0gLS1zaWxlbnQKK2xpYmNoZWNraW50ZXJuYWxfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCisJJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKKwkkKGxpYmNoZWNraW50ZXJuYWxfbGFfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCisJJChMREZMQUdTKSAtbyAkQAorREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCithbV9fbXYgPSBtdiAtZgorQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0FNX1ZfQ0MgPSAkKGFtX192X0NDXyQoVikpCithbV9fdl9DQ18gPSAkKGFtX192X0NDXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF8kKFYpKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X2F0XzAgPSBACitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0FNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF8kKFYpKQorYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAiICRAOworQU1fVl9HRU4gPSAkKGFtX192X0dFTl8kKFYpKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworU09VUkNFUyA9ICQobGliY2hlY2tpbnRlcm5hbF9sYV9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChsaWJjaGVja2ludGVybmFsX2xhX1NPVVJDRVMpCitIRUFERVJTID0gJChub2luc3RfSEVBREVSUykKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVMgPSBAQVNACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JJU09OX1BBVEggPSBAQklTT05fUEFUSEAKK0NBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKK0NBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACitDQyA9IEBDQ0AKK0NDQVMgPSBAQ0NBU0AKK0NDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAorQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAorQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAorQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAorQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRBRElSID0gQERBVEFESVJACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACitETExUT09MID0gQERMTFRPT0xACitET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAorRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKK0VYRUVYVCA9IEBFWEVFWFRACitGRkxBR1MgPSBARkZMQUdTQAorRkdSRVAgPSBARkdSRVBACitGTEVYX1BBVEggPSBARkxFWF9QQVRIQAorR0NPViA9IEBHQ09WQAorR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACitHQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAorR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACitHTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKK0dMSUJfTElCUyA9IEBHTElCX0xJQlNACitHTElCX09OTFlfQ0ZMQUdTID0gQEdMSUJfT05MWV9DRkxBR1NACitHTElCX09OTFlfTElCUyA9IEBHTElCX09OTFlfTElCU0AKK0dMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAorR0xJQl9SRVEgPSBAR0xJQl9SRVFACitHTVBfTElCUyA9IEBHTVBfTElCU0AKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAorR1JFUCA9IEBHUkVQQAorR1NMX0xJQlMgPSBAR1NMX0xJQlNACitHU1RfQUdFID0gQEdTVF9BR0VACitHU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKK0dTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKK0dTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACitHU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAorR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACitHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FQAorR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAorR1NUX0RJU0FCTEVfTkVUX0RFRklORSA9IEBHU1RfRElTQUJMRV9ORVRfREVGSU5FQAorR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKK0dTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACitHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACitHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAorR1NUX0RJU0FCTEVfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1RSQUNFX0RFRklORUAKK0dTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkUgPSBAR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORUAKK0dTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkUgPSBAR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORUAKK0dTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FID0gQEdTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FQAorR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACitHU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKK0dTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACitHU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKK0dTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAorR1NUX01BSk9STUlOT1IgPSBAR1NUX01BSk9STUlOT1JACitHU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKK0dTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKK0dTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACitHU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKK0dTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKK0dTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKK0dTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACitHU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACitHU1RfUEtHX0RFUFMgPSBAR1NUX1BLR19ERVBTQAorR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKK0dTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgPSBAR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFREAKK0dTVF9QUklOVEZfRVhURU5TSU9OX1BPSU5URVJfRk9STUFUX0RFRklORSA9IEBHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkVACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FQAorR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAorR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKK0dTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OX0RFRklORSA9IEBHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkVACitHVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAorSEFWRV9ET0NCT09LMkhUTUwgPSBASEFWRV9ET0NCT09LMkhUTUxACitIQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAorSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAorSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAorSEFWRV9GSUcyREVWID0gQEhBVkVfRklHMkRFVkAKK0hBVkVfR01QID0gQEhBVkVfR01QQAorSEFWRV9HU0wgPSBASEFWRV9HU0xACitIQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAorSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAorSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKK0hBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAorSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKK0hPU1RfQ1BVID0gQEhPU1RfQ1BVQAorSFRNTF9ESVIgPSBASFRNTF9ESVJACitJTkVUX0FUT05fTElCUyA9IEBJTkVUX0FUT05fTElCU0AKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACitJTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKK0lOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKK0lOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKK0lOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAorSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKK0lOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKK0lOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACitJTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJESVIgPSBATElCRElSQAorTElCSUNPTlYgPSBATElCSUNPTlZACitMSUJJTlRMID0gQExJQklOVExACitMSUJNID0gQExJQk1ACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMT0NBTEVESVIgPSBATE9DQUxFRElSQAorTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAorTFRMSUJJTlRMID0gQExUTElCSU5UTEAKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUlOVCA9IEBNQUlOVEAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKK01TR01FUkdFID0gQE1TR01FUkdFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKK1BBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACitQQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAorUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACitQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BMVUdJTkRJUiA9IEBQTFVHSU5ESVJACitQT1NVQiA9IEBQT1NVQkAKK1BST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAorUFlUSE9OID0gQFBZVEhPTkAKK1BZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACitQWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAorUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAorUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1ZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACitWQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACitWQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACitWRVJTSU9OID0gQFZFUlNJT05ACitXQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKK1dJTjMyX0xJQlMgPSBAV0lOMzJfTElCU0AKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKK1hHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKK1hNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAorWFNMVFBST0MgPSBAWFNMVFBST0NACitYU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3BrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACitwa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAorcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3B5ZXhlY2RpciA9IEBweWV4ZWNkaXJACitweXRob25kaXIgPSBAcHl0aG9uZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitub2luc3RfTFRMSUJSQVJJRVMgPSBsaWJjaGVja2ludGVybmFsLmxhCitFWFRSQV9ESVNUID0gY2hlY2suaC5pbgorQ0ZJTEVTID0gXAorCWNoZWNrLmMJCVwKKwljaGVja19lcnJvci5jCVwKKwljaGVja19saXN0LmMJXAorCWNoZWNrX2xvZy5jCVwKKwljaGVja19tc2cuYwlcCisJY2hlY2tfcGFjay5jCVwKKwljaGVja19wcmludC5jCVwKKwljaGVja19ydW4uYwlcCisJY2hlY2tfc3RyLmMKKworSEZJTEVTID0gXAorCWNoZWNrLmgJCVwKKwljaGVja19lcnJvci5oCVwKKwljaGVja19pbXBsLmgJXAorCWNoZWNrX2xpc3QuaAlcCisJY2hlY2tfbG9nLmgJXAorCWNoZWNrX21zZy5oCVwKKwljaGVja19wYWNrLmgJXAorCWNoZWNrX3ByaW50LmgJXAorCWNoZWNrX3N0ci5oCisKK25vaW5zdF9IRUFERVJTID0gJChIRklMRVMpCitsaWJjaGVja2ludGVybmFsX2xhX1NPVVJDRVMgPSAkKENGSUxFUykgJChIRklMRVMpCitASEFWRV9QVEhSRUFEX0hfRkFMU0VAbGliY2hlY2tpbnRlcm5hbF9sYV9DRkxBR1MgPSAtRF9HTlVfU09VUkNFCisKKyMgZGVmaW5lIEhBVkVfUFRIUkVBRCBoZXJlIGFzIHdlbGwgc28gd2Uga2VlcCBjaGFuZ2VzIHRvIHRoZSBjb2RlIHRvIGEgbWluaW11bQorQEhBVkVfUFRIUkVBRF9IX1RSVUVAbGliY2hlY2tpbnRlcm5hbF9sYV9DRkxBR1MgPSAtRF9HTlVfU09VUkNFIC1ESEFWRV9QVEhSRUFECitASEFWRV9QVEhSRUFEX0hfRkFMU0VAbGliY2hlY2tpbnRlcm5hbF9sYV9MSUJBREQgPSAKK0BIQVZFX1BUSFJFQURfSF9UUlVFQGxpYmNoZWNraW50ZXJuYWxfbGFfTElCQUREID0gLWxwdGhyZWFkCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKK2NoZWNrLmg6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9jaGVjay5oLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKKworY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVM6CisJLXRlc3QgLXogIiQobm9pbnN0X0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChub2luc3RfTFRMSUJSQVJJRVMpCisJQGxpc3Q9JyQobm9pbnN0X0xUTElCUkFSSUVTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgZGlyPSJgZWNobyAkJHAgfCBzZWQgLWUgJ3N8L1teL10qJCR8fCdgIjsgXAorCSAgdGVzdCAiJCRkaXIiICE9ICIkJHAiIHx8IGRpcj0uOyBcCisJICBlY2hvICJybSAtZiBcIiQke2Rpcn0vc29fbG9jYXRpb25zXCIiOyBcCisJICBybSAtZiAiJCR7ZGlyfS9zb19sb2NhdGlvbnMiOyBcCisJZG9uZQorbGliY2hlY2tpbnRlcm5hbC5sYTogJChsaWJjaGVja2ludGVybmFsX2xhX09CSkVDVFMpICQobGliY2hlY2tpbnRlcm5hbF9sYV9ERVBFTkRFTkNJRVMpIAorCSQoQU1fVl9DQ0xEKSQobGliY2hlY2tpbnRlcm5hbF9sYV9MSU5LKSAgJChsaWJjaGVja2ludGVybmFsX2xhX09CSkVDVFMpICQobGliY2hlY2tpbnRlcm5hbF9sYV9MSUJBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2suUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLWNoZWNrX2Vycm9yLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19saXN0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19sb2cuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLWNoZWNrX21zZy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfcGFjay5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfcHJpbnQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLWNoZWNrX3J1bi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfc3RyLlBsb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCitsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrLmxvOiBjaGVjay5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2hlY2tpbnRlcm5hbF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVjay5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVjay5UcG8gLWMgLW8gbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVjay5sbyBgdGVzdCAtZiAnY2hlY2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgY2hlY2suYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVjay5UcG8gJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2suUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nY2hlY2suYycgb2JqZWN0PSdsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2hlY2tpbnRlcm5hbF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrLmxvIGB0ZXN0IC1mICdjaGVjay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BjaGVjay5jCisKK2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfZXJyb3IubG86IGNoZWNrX2Vycm9yLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjaGVja2ludGVybmFsX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX2Vycm9yLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLWNoZWNrX2Vycm9yLlRwbyAtYyAtbyBsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX2Vycm9yLmxvIGB0ZXN0IC1mICdjaGVja19lcnJvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BjaGVja19lcnJvci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLWNoZWNrX2Vycm9yLlRwbyAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19lcnJvci5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdjaGVja19lcnJvci5jJyBvYmplY3Q9J2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfZXJyb3IubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjaGVja2ludGVybmFsX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfZXJyb3IubG8gYHRlc3QgLWYgJ2NoZWNrX2Vycm9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNoZWNrX2Vycm9yLmMKKworbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19saXN0LmxvOiBjaGVja19saXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjaGVja2ludGVybmFsX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX2xpc3QubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfbGlzdC5UcG8gLWMgLW8gbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19saXN0LmxvIGB0ZXN0IC1mICdjaGVja19saXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNoZWNrX2xpc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19saXN0LlRwbyAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19saXN0LlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2NoZWNrX2xpc3QuYycgb2JqZWN0PSdsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX2xpc3QubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjaGVja2ludGVybmFsX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfbGlzdC5sbyBgdGVzdCAtZiAnY2hlY2tfbGlzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BjaGVja19saXN0LmMKKworbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19sb2cubG86IGNoZWNrX2xvZy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2hlY2tpbnRlcm5hbF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19sb2cubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfbG9nLlRwbyAtYyAtbyBsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX2xvZy5sbyBgdGVzdCAtZiAnY2hlY2tfbG9nLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNoZWNrX2xvZy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLWNoZWNrX2xvZy5UcG8gJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfbG9nLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2NoZWNrX2xvZy5jJyBvYmplY3Q9J2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfbG9nLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2hlY2tpbnRlcm5hbF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX2xvZy5sbyBgdGVzdCAtZiAnY2hlY2tfbG9nLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNoZWNrX2xvZy5jCisKK2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfbXNnLmxvOiBjaGVja19tc2cuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNoZWNraW50ZXJuYWxfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfbXNnLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLWNoZWNrX21zZy5UcG8gLWMgLW8gbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19tc2cubG8gYHRlc3QgLWYgJ2NoZWNrX21zZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BjaGVja19tc2cuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19tc2cuVHBvICQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLWNoZWNrX21zZy5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdjaGVja19tc2cuYycgb2JqZWN0PSdsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX21zZy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNoZWNraW50ZXJuYWxfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19tc2cubG8gYHRlc3QgLWYgJ2NoZWNrX21zZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BjaGVja19tc2cuYworCitsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX3BhY2subG86IGNoZWNrX3BhY2suYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNoZWNraW50ZXJuYWxfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfcGFjay5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19wYWNrLlRwbyAtYyAtbyBsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX3BhY2subG8gYHRlc3QgLWYgJ2NoZWNrX3BhY2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgY2hlY2tfcGFjay5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLWNoZWNrX3BhY2suVHBvICQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLWNoZWNrX3BhY2suUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nY2hlY2tfcGFjay5jJyBvYmplY3Q9J2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfcGFjay5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNoZWNraW50ZXJuYWxfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19wYWNrLmxvIGB0ZXN0IC1mICdjaGVja19wYWNrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNoZWNrX3BhY2suYworCitsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX3ByaW50LmxvOiBjaGVja19wcmludC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2hlY2tpbnRlcm5hbF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19wcmludC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19wcmludC5UcG8gLWMgLW8gbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19wcmludC5sbyBgdGVzdCAtZiAnY2hlY2tfcHJpbnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY2hlY2tfcHJpbnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19wcmludC5UcG8gJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfcHJpbnQuUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nY2hlY2tfcHJpbnQuYycgb2JqZWN0PSdsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX3ByaW50LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2hlY2tpbnRlcm5hbF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX3ByaW50LmxvIGB0ZXN0IC1mICdjaGVja19wcmludC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BjaGVja19wcmludC5jCisKK2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfcnVuLmxvOiBjaGVja19ydW4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNoZWNraW50ZXJuYWxfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfcnVuLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLWNoZWNrX3J1bi5UcG8gLWMgLW8gbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19ydW4ubG8gYHRlc3QgLWYgJ2NoZWNrX3J1bi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BjaGVja19ydW4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19ydW4uVHBvICQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLWNoZWNrX3J1bi5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdjaGVja19ydW4uYycgb2JqZWN0PSdsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX3J1bi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNoZWNraW50ZXJuYWxfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19ydW4ubG8gYHRlc3QgLWYgJ2NoZWNrX3J1bi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BjaGVja19ydW4uYworCitsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX3N0ci5sbzogY2hlY2tfc3RyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjaGVja2ludGVybmFsX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX3N0ci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19zdHIuVHBvIC1jIC1vIGxpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfc3RyLmxvIGB0ZXN0IC1mICdjaGVja19zdHIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY2hlY2tfc3RyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfc3RyLlRwbyAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19zdHIuUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nY2hlY2tfc3RyLmMnIG9iamVjdD0nbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19zdHIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjaGVja2ludGVybmFsX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfc3RyLmxvIGB0ZXN0IC1mICdjaGVja19zdHIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY2hlY2tfc3RyLmMKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChIRUFERVJTKQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVMgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdExUTElCUkFSSUVTIGN0YWdzIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKKwlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrLmMgYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZTllMTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVjay5jCkBAIC0wLDAgKzEsNDQyIEBACisvKgorICogQ2hlY2s6IGEgdW5pdCB0ZXN0IGZyYW1ld29yayBmb3IgQworICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEFyaWVuIE1hbGVjCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisjaW5jbHVkZSAiY2hlY2suaCIKKyNpbmNsdWRlICJjaGVja19lcnJvci5oIgorI2luY2x1ZGUgImNoZWNrX2xpc3QuaCIKKyNpbmNsdWRlICJjaGVja19pbXBsLmgiCisjaW5jbHVkZSAiY2hlY2tfbXNnLmgiCisKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgICAgICAgIC8qIGZvciBfUE9TSVhfVkVSU0lPTiAqLworI2VuZGlmCisKKyNpZm5kZWYgREVGQVVMVF9USU1FT1VUCisjZGVmaW5lIERFRkFVTFRfVElNRU9VVCA0CisjZW5kaWYKKworaW50IGNoZWNrX21ham9yX3ZlcnNpb24gPSBDSEVDS19NQUpPUl9WRVJTSU9OOworaW50IGNoZWNrX21pbm9yX3ZlcnNpb24gPSBDSEVDS19NSU5PUl9WRVJTSU9OOworaW50IGNoZWNrX21pY3JvX3ZlcnNpb24gPSBDSEVDS19NSUNST19WRVJTSU9OOworCitzdGF0aWMgaW50IG5vbl9wYXNzIChpbnQgdmFsKTsKK3N0YXRpYyBGaXh0dXJlICpmaXh0dXJlX2NyZWF0ZSAoU0Z1biBmdW4sIGludCBpc2NoZWNrZWQpOworc3RhdGljIHZvaWQgdGNhc2VfYWRkX2ZpeHR1cmUgKFRDYXNlICogdGMsIFNGdW4gc2V0dXAsIFNGdW4gdGVhcmRvd24sCisgICAgaW50IGlzY2hlY2tlZCk7CitzdGF0aWMgdm9pZCB0cl9pbml0IChUZXN0UmVzdWx0ICogdHIpOworc3RhdGljIHZvaWQgc3VpdGVfZnJlZSAoU3VpdGUgKiBzKTsKK3N0YXRpYyB2b2lkIHRjYXNlX2ZyZWUgKFRDYXNlICogdGMpOworCitTdWl0ZSAqCitzdWl0ZV9jcmVhdGUgKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIFN1aXRlICpzOworICBzID0gZW1hbGxvYyAoc2l6ZW9mIChTdWl0ZSkpOyAvKiBmcmVlZCBpbiBzdWl0ZV9mcmVlICovCisgIGlmIChuYW1lID09IE5VTEwpCisgICAgcy0+bmFtZSA9ICIiOworICBlbHNlCisgICAgcy0+bmFtZSA9IG5hbWU7CisgIHMtPnRjbHN0ID0gY2hlY2tfbGlzdF9jcmVhdGUgKCk7CisgIHJldHVybiBzOworfQorCitzdGF0aWMgdm9pZAorc3VpdGVfZnJlZSAoU3VpdGUgKiBzKQoreworICBMaXN0ICpsOworICBpZiAocyA9PSBOVUxMKQorICAgIHJldHVybjsKKyAgbCA9IHMtPnRjbHN0OworICBmb3IgKGxpc3RfZnJvbnQgKGwpOyAhbGlzdF9hdF9lbmQgKGwpOyBsaXN0X2FkdmFuY2UgKGwpKSB7CisgICAgdGNhc2VfZnJlZSAobGlzdF92YWwgKGwpKTsKKyAgfQorICBsaXN0X2ZyZWUgKHMtPnRjbHN0KTsKKyAgZnJlZSAocyk7Cit9CisKK1RDYXNlICoKK3RjYXNlX2NyZWF0ZSAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgY2hhciAqZW52OworICBpbnQgdGltZW91dCA9IERFRkFVTFRfVElNRU9VVDsKKyAgVENhc2UgKnRjID0gZW1hbGxvYyAoc2l6ZW9mIChUQ2FzZSkpOyAvKmZyZWVkIGluIHRjYXNlX2ZyZWUgKi8KKyAgaWYgKG5hbWUgPT0gTlVMTCkKKyAgICB0Yy0+bmFtZSA9ICIiOworICBlbHNlCisgICAgdGMtPm5hbWUgPSBuYW1lOworCisgIGVudiA9IGdldGVudiAoIkNLX0RFRkFVTFRfVElNRU9VVCIpOworICBpZiAoZW52ICE9IE5VTEwpIHsKKyAgICBpbnQgdG1wID0gYXRvaSAoZW52KTsKKyAgICBpZiAodG1wID49IDApIHsKKyAgICAgIHRpbWVvdXQgPSB0bXA7CisgICAgfQorICB9CisKKyAgZW52ID0gZ2V0ZW52ICgiQ0tfVElNRU9VVF9NVUxUSVBMSUVSIik7CisgIGlmIChlbnYgIT0gTlVMTCkgeworICAgIGludCB0bXAgPSBhdG9pIChlbnYpOworICAgIGlmICh0bXAgPj0gMCkgeworICAgICAgdGltZW91dCA9IHRpbWVvdXQgKiB0bXA7CisgICAgfQorICB9CisKKyAgdGMtPnRpbWVvdXQgPSB0aW1lb3V0OworICB0Yy0+dGZsc3QgPSBjaGVja19saXN0X2NyZWF0ZSAoKTsKKyAgdGMtPnVuY2hfc2Zsc3QgPSBjaGVja19saXN0X2NyZWF0ZSAoKTsKKyAgdGMtPmNoX3NmbHN0ID0gY2hlY2tfbGlzdF9jcmVhdGUgKCk7CisgIHRjLT51bmNoX3RmbHN0ID0gY2hlY2tfbGlzdF9jcmVhdGUgKCk7CisgIHRjLT5jaF90ZmxzdCA9IGNoZWNrX2xpc3RfY3JlYXRlICgpOworCisgIHJldHVybiB0YzsKK30KKworCitzdGF0aWMgdm9pZAordGNhc2VfZnJlZSAoVENhc2UgKiB0YykKK3sKKyAgbGlzdF9hcHBseSAodGMtPnRmbHN0LCBmcmVlKTsKKyAgbGlzdF9hcHBseSAodGMtPnVuY2hfc2Zsc3QsIGZyZWUpOworICBsaXN0X2FwcGx5ICh0Yy0+Y2hfc2Zsc3QsIGZyZWUpOworICBsaXN0X2FwcGx5ICh0Yy0+dW5jaF90ZmxzdCwgZnJlZSk7CisgIGxpc3RfYXBwbHkgKHRjLT5jaF90ZmxzdCwgZnJlZSk7CisgIGxpc3RfZnJlZSAodGMtPnRmbHN0KTsKKyAgbGlzdF9mcmVlICh0Yy0+dW5jaF9zZmxzdCk7CisgIGxpc3RfZnJlZSAodGMtPmNoX3NmbHN0KTsKKyAgbGlzdF9mcmVlICh0Yy0+dW5jaF90ZmxzdCk7CisgIGxpc3RfZnJlZSAodGMtPmNoX3RmbHN0KTsKKworICBmcmVlICh0Yyk7Cit9CisKK3ZvaWQKK3N1aXRlX2FkZF90Y2FzZSAoU3VpdGUgKiBzLCBUQ2FzZSAqIHRjKQoreworICBpZiAocyA9PSBOVUxMIHx8IHRjID09IE5VTEwpCisgICAgcmV0dXJuOworICBsaXN0X2FkZF9lbmQgKHMtPnRjbHN0LCB0Yyk7Cit9CisKK3ZvaWQKK190Y2FzZV9hZGRfdGVzdCAoVENhc2UgKiB0YywgVEZ1biBmbiwgY29uc3QgY2hhciAqbmFtZSwgaW50IF9zaWduYWwsCisgICAgaW50IGFsbG93ZWRfZXhpdF92YWx1ZSwgaW50IHN0YXJ0LCBpbnQgZW5kKQoreworICBURiAqdGY7CisgIGlmICh0YyA9PSBOVUxMIHx8IGZuID09IE5VTEwgfHwgbmFtZSA9PSBOVUxMKQorICAgIHJldHVybjsKKyAgdGYgPSBlbWFsbG9jIChzaXplb2YgKFRGKSk7ICAgLyogZnJlZWQgaW4gdGNhc2VfZnJlZSAqLworICB0Zi0+Zm4gPSBmbjsKKyAgdGYtPmxvb3Bfc3RhcnQgPSBzdGFydDsKKyAgdGYtPmxvb3BfZW5kID0gZW5kOworICB0Zi0+c2lnbmFsID0gX3NpZ25hbDsgICAgICAgICAvKiAwIG1lYW5zIG5vIHNpZ25hbCBleHBlY3RlZCAqLworICB0Zi0+YWxsb3dlZF9leGl0X3ZhbHVlID0gYWxsb3dlZF9leGl0X3ZhbHVlOyAgLyogMCBpcyBkZWZhdWx0IHN1Y2Nlc3NmdWwgZXhpdCAqLworICB0Zi0+bmFtZSA9IG5hbWU7CisgIGxpc3RfYWRkX2VuZCAodGMtPnRmbHN0LCB0Zik7Cit9CisKK3N0YXRpYyBGaXh0dXJlICoKK2ZpeHR1cmVfY3JlYXRlIChTRnVuIGZ1biwgaW50IGlzY2hlY2tlZCkKK3sKKyAgRml4dHVyZSAqZjsKKyAgZiA9IGVtYWxsb2MgKHNpemVvZiAoRml4dHVyZSkpOworICBmLT5mdW4gPSBmdW47CisgIGYtPmlzY2hlY2tlZCA9IGlzY2hlY2tlZDsKKworICByZXR1cm4gZjsKK30KKwordm9pZAordGNhc2VfYWRkX3VuY2hlY2tlZF9maXh0dXJlIChUQ2FzZSAqIHRjLCBTRnVuIHNldHVwLCBTRnVuIHRlYXJkb3duKQoreworICB0Y2FzZV9hZGRfZml4dHVyZSAodGMsIHNldHVwLCB0ZWFyZG93biwgMCk7Cit9CisKK3ZvaWQKK3RjYXNlX2FkZF9jaGVja2VkX2ZpeHR1cmUgKFRDYXNlICogdGMsIFNGdW4gc2V0dXAsIFNGdW4gdGVhcmRvd24pCit7CisgIHRjYXNlX2FkZF9maXh0dXJlICh0Yywgc2V0dXAsIHRlYXJkb3duLCAxKTsKK30KKworc3RhdGljIHZvaWQKK3RjYXNlX2FkZF9maXh0dXJlIChUQ2FzZSAqIHRjLCBTRnVuIHNldHVwLCBTRnVuIHRlYXJkb3duLCBpbnQgaXNjaGVja2VkKQoreworICBpZiAoc2V0dXApIHsKKyAgICBpZiAoaXNjaGVja2VkKQorICAgICAgbGlzdF9hZGRfZW5kICh0Yy0+Y2hfc2Zsc3QsIGZpeHR1cmVfY3JlYXRlIChzZXR1cCwgaXNjaGVja2VkKSk7CisgICAgZWxzZQorICAgICAgbGlzdF9hZGRfZW5kICh0Yy0+dW5jaF9zZmxzdCwgZml4dHVyZV9jcmVhdGUgKHNldHVwLCBpc2NoZWNrZWQpKTsKKyAgfQorCisgIC8qIEFkZCB0ZWFyZG93bnMgYXQgZnJvbnQgc28gdGhleSBhcmUgcnVuIGluIHJldmVyc2Ugb3JkZXIuICovCisgIGlmICh0ZWFyZG93bikgeworICAgIGlmIChpc2NoZWNrZWQpCisgICAgICBsaXN0X2FkZF9mcm9udCAodGMtPmNoX3RmbHN0LCBmaXh0dXJlX2NyZWF0ZSAodGVhcmRvd24sIGlzY2hlY2tlZCkpOworICAgIGVsc2UKKyAgICAgIGxpc3RfYWRkX2Zyb250ICh0Yy0+dW5jaF90ZmxzdCwgZml4dHVyZV9jcmVhdGUgKHRlYXJkb3duLCBpc2NoZWNrZWQpKTsKKyAgfQorfQorCit2b2lkCit0Y2FzZV9zZXRfdGltZW91dCAoVENhc2UgKiB0YywgaW50IHRpbWVvdXQpCit7CisgIGlmICh0aW1lb3V0ID49IDApIHsKKyAgICBjaGFyICplbnYgPSBnZXRlbnYgKCJDS19USU1FT1VUX01VTFRJUExJRVIiKTsKKyAgICBpZiAoZW52ICE9IE5VTEwpIHsKKyAgICAgIGludCB0bXAgPSBhdG9pIChlbnYpOworICAgICAgaWYgKHRtcCA+PSAwKSB7CisgICAgICAgIHRpbWVvdXQgPSB0aW1lb3V0ICogdG1wOworICAgICAgfQorICAgIH0KKyAgICB0Yy0+dGltZW91dCA9IHRpbWVvdXQ7CisgIH0KK30KKwordm9pZAordGNhc2VfZm5fc3RhcnQgKGNvbnN0IGNoYXIgKmZuYW1lIENLX0FUVFJJQlVURV9VTlVTRUQsIGNvbnN0IGNoYXIgKmZpbGUsCisgICAgaW50IGxpbmUpCit7CisgIHNlbmRfY3R4X2luZm8gKENLX0NUWF9URVNUKTsKKyAgc2VuZF9sb2NfaW5mbyAoZmlsZSwgbGluZSk7Cit9CisKK3ZvaWQKK19tYXJrX3BvaW50IChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSkKK3sKKyAgc2VuZF9sb2NfaW5mbyAoZmlsZSwgbGluZSk7Cit9CisKK3ZvaWQKK19mYWlsX3VubGVzcyAoaW50IHJlc3VsdCwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmV4cHIsIC4uLikKK3sKKyAgY29uc3QgY2hhciAqbXNnOworCisgIHNlbmRfbG9jX2luZm8gKGZpbGUsIGxpbmUpOworICBpZiAoIXJlc3VsdCkgeworICAgIHZhX2xpc3QgYXA7CisgICAgY2hhciBidWZbQlVGU0laXTsKKworICAgIHZhX3N0YXJ0IChhcCwgZXhwcik7CisgICAgbXNnID0gKGNvbnN0IGNoYXIgKikgdmFfYXJnIChhcCwgY2hhciAqKTsKKyAgICBpZiAobXNnID09IE5VTEwpCisgICAgICBtc2cgPSBleHByOworICAgIHZzbnByaW50ZiAoYnVmLCBCVUZTSVosIG1zZywgYXApOworICAgIHZhX2VuZCAoYXApOworICAgIHNlbmRfZmFpbHVyZV9pbmZvIChidWYpOworICAgIGlmIChjdXJfZm9ya19zdGF0dXMgKCkgPT0gQ0tfRk9SSykgeworI2lmZGVmIF9QT1NJWF9WRVJTSU9OCisgICAgICBleGl0ICgxKTsKKyNlbmRpZiAvKiBfUE9TSVhfVkVSU0lPTiAqLworICAgIH0KKyAgfQorfQorCitTUnVubmVyICoKK3NydW5uZXJfY3JlYXRlIChTdWl0ZSAqIHMpCit7CisgIFNSdW5uZXIgKnNyID0gZW1hbGxvYyAoc2l6ZW9mIChTUnVubmVyKSk7ICAgICAvKiBmcmVlZCBpbiBzcnVubmVyX2ZyZWUgKi8KKyAgc3ItPnNsc3QgPSBjaGVja19saXN0X2NyZWF0ZSAoKTsKKyAgaWYgKHMgIT0gTlVMTCkKKyAgICBsaXN0X2FkZF9lbmQgKHNyLT5zbHN0LCBzKTsKKyAgc3ItPnN0YXRzID0gZW1hbGxvYyAoc2l6ZW9mIChUZXN0U3RhdHMpKTsgICAgIC8qIGZyZWVkIGluIHNydW5uZXJfZnJlZSAqLworICBzci0+c3RhdHMtPm5fY2hlY2tlZCA9IHNyLT5zdGF0cy0+bl9mYWlsZWQgPSBzci0+c3RhdHMtPm5fZXJyb3JzID0gMDsKKyAgc3ItPnJlc3VsdGxzdCA9IGNoZWNrX2xpc3RfY3JlYXRlICgpOworICBzci0+bG9nX2ZuYW1lID0gTlVMTDsKKyAgc3ItPnhtbF9mbmFtZSA9IE5VTEw7CisgIHNyLT5sb2dsc3QgPSBOVUxMOworICBzci0+ZnN0YXQgPSBDS19GT1JLX0dFVEVOVjsKKyAgcmV0dXJuIHNyOworfQorCit2b2lkCitzcnVubmVyX2FkZF9zdWl0ZSAoU1J1bm5lciAqIHNyLCBTdWl0ZSAqIHMpCit7CisgIGlmIChzID09IE5VTEwpCisgICAgcmV0dXJuOworCisgIGxpc3RfYWRkX2VuZCAoc3ItPnNsc3QsIHMpOworfQorCit2b2lkCitzcnVubmVyX2ZyZWUgKFNSdW5uZXIgKiBzcikKK3sKKyAgTGlzdCAqbDsKKyAgVGVzdFJlc3VsdCAqdHI7CisgIGlmIChzciA9PSBOVUxMKQorICAgIHJldHVybjsKKworICBmcmVlIChzci0+c3RhdHMpOworICBsID0gc3ItPnNsc3Q7CisgIGZvciAobGlzdF9mcm9udCAobCk7ICFsaXN0X2F0X2VuZCAobCk7IGxpc3RfYWR2YW5jZSAobCkpIHsKKyAgICBzdWl0ZV9mcmVlIChsaXN0X3ZhbCAobCkpOworICB9CisgIGxpc3RfZnJlZSAoc3ItPnNsc3QpOworCisgIGwgPSBzci0+cmVzdWx0bHN0OworICBmb3IgKGxpc3RfZnJvbnQgKGwpOyAhbGlzdF9hdF9lbmQgKGwpOyBsaXN0X2FkdmFuY2UgKGwpKSB7CisgICAgdHIgPSBsaXN0X3ZhbCAobCk7CisgICAgZnJlZSAodHItPmZpbGUpOworICAgIGZyZWUgKHRyLT5tc2cpOworICAgIGZyZWUgKHRyKTsKKyAgfQorICBsaXN0X2ZyZWUgKHNyLT5yZXN1bHRsc3QpOworCisgIGZyZWUgKHNyKTsKK30KKworaW50CitzcnVubmVyX250ZXN0c19mYWlsZWQgKFNSdW5uZXIgKiBzcikKK3sKKyAgcmV0dXJuIHNyLT5zdGF0cy0+bl9mYWlsZWQgKyBzci0+c3RhdHMtPm5fZXJyb3JzOworfQorCitpbnQKK3NydW5uZXJfbnRlc3RzX3J1biAoU1J1bm5lciAqIHNyKQoreworICByZXR1cm4gc3ItPnN0YXRzLT5uX2NoZWNrZWQ7Cit9CisKK1Rlc3RSZXN1bHQgKioKK3NydW5uZXJfZmFpbHVyZXMgKFNSdW5uZXIgKiBzcikKK3sKKyAgaW50IGkgPSAwOworICBUZXN0UmVzdWx0ICoqdHJhcnJheTsKKyAgTGlzdCAqcmxzdDsKKyAgdHJhcnJheSA9IG1hbGxvYyAoc2l6ZW9mICh0cmFycmF5WzBdKSAqIHNydW5uZXJfbnRlc3RzX2ZhaWxlZCAoc3IpKTsKKworICBybHN0ID0gc3ItPnJlc3VsdGxzdDsKKyAgZm9yIChsaXN0X2Zyb250IChybHN0KTsgIWxpc3RfYXRfZW5kIChybHN0KTsgbGlzdF9hZHZhbmNlIChybHN0KSkgeworICAgIFRlc3RSZXN1bHQgKnRyID0gbGlzdF92YWwgKHJsc3QpOworICAgIGlmIChub25fcGFzcyAodHItPnJ0eXBlKSkKKyAgICAgIHRyYXJyYXlbaSsrXSA9IHRyOworCisgIH0KKyAgcmV0dXJuIHRyYXJyYXk7Cit9CisKK1Rlc3RSZXN1bHQgKioKK3NydW5uZXJfcmVzdWx0cyAoU1J1bm5lciAqIHNyKQoreworICBpbnQgaSA9IDA7CisgIFRlc3RSZXN1bHQgKip0cmFycmF5OworICBMaXN0ICpybHN0OworCisgIHRyYXJyYXkgPSBtYWxsb2MgKHNpemVvZiAodHJhcnJheVswXSkgKiBzcnVubmVyX250ZXN0c19ydW4gKHNyKSk7CisKKyAgcmxzdCA9IHNyLT5yZXN1bHRsc3Q7CisgIGZvciAobGlzdF9mcm9udCAocmxzdCk7ICFsaXN0X2F0X2VuZCAocmxzdCk7IGxpc3RfYWR2YW5jZSAocmxzdCkpIHsKKyAgICB0cmFycmF5W2krK10gPSBsaXN0X3ZhbCAocmxzdCk7CisgIH0KKyAgcmV0dXJuIHRyYXJyYXk7Cit9CisKK3N0YXRpYyBpbnQKK25vbl9wYXNzIChpbnQgdmFsKQoreworICByZXR1cm4gdmFsICE9IENLX1BBU1M7Cit9CisKK1Rlc3RSZXN1bHQgKgordHJfY3JlYXRlICh2b2lkKQoreworICBUZXN0UmVzdWx0ICp0cjsKKworICB0ciA9IGVtYWxsb2MgKHNpemVvZiAoVGVzdFJlc3VsdCkpOworICB0cl9pbml0ICh0cik7CisgIHJldHVybiB0cjsKK30KKwordm9pZAordHJfcmVzZXQgKFRlc3RSZXN1bHQgKiB0cikKK3sKKyAgdHJfaW5pdCAodHIpOworfQorCitzdGF0aWMgdm9pZAordHJfaW5pdCAoVGVzdFJlc3VsdCAqIHRyKQoreworICB0ci0+Y3R4ID0gQ0tfQ1RYX0lOVkFMSUQ7CisgIHRyLT5saW5lID0gLTE7CisgIHRyLT5ydHlwZSA9IENLX1RFU1RfUkVTVUxUX0lOVkFMSUQ7CisgIHRyLT5tc2cgPSBOVUxMOworICB0ci0+ZmlsZSA9IE5VTEw7CisgIHRyLT50Y25hbWUgPSBOVUxMOworICB0ci0+dG5hbWUgPSBOVUxMOworfQorCisKK2NvbnN0IGNoYXIgKgordHJfbXNnIChUZXN0UmVzdWx0ICogdHIpCit7CisgIHJldHVybiB0ci0+bXNnOworfQorCitpbnQKK3RyX2xubyAoVGVzdFJlc3VsdCAqIHRyKQoreworICByZXR1cm4gdHItPmxpbmU7Cit9CisKK2NvbnN0IGNoYXIgKgordHJfbGZpbGUgKFRlc3RSZXN1bHQgKiB0cikKK3sKKyAgcmV0dXJuIHRyLT5maWxlOworfQorCitpbnQKK3RyX3J0eXBlIChUZXN0UmVzdWx0ICogdHIpCit7CisgIHJldHVybiB0ci0+cnR5cGU7Cit9CisKK2VudW0gY2tfcmVzdWx0X2N0eAordHJfY3R4IChUZXN0UmVzdWx0ICogdHIpCit7CisgIHJldHVybiB0ci0+Y3R4OworfQorCitjb25zdCBjaGFyICoKK3RyX3RjbmFtZSAoVGVzdFJlc3VsdCAqIHRyKQoreworICByZXR1cm4gdHItPnRjbmFtZTsKK30KKworc3RhdGljIGludCBfZnN0YXQgPSBDS19GT1JLOworCit2b2lkCitzZXRfZm9ya19zdGF0dXMgKGVudW0gZm9ya19zdGF0dXMgZnN0YXQpCit7CisgIGlmIChmc3RhdCA9PSBDS19GT1JLIHx8IGZzdGF0ID09IENLX05PRk9SSyB8fCBmc3RhdCA9PSBDS19GT1JLX0dFVEVOVikKKyAgICBfZnN0YXQgPSBmc3RhdDsKKyAgZWxzZQorICAgIGVwcmludGYgKCJCYWQgc3RhdHVzIGluIHNldF9mb3JrX3N0YXR1cyIsIF9fRklMRV9fLCBfX0xJTkVfXyk7Cit9CisKK2VudW0gZm9ya19zdGF0dXMKK2N1cl9mb3JrX3N0YXR1cyAodm9pZCkKK3sKKyAgcmV0dXJuIF9mc3RhdDsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrLmggYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYjQyZjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVjay5oCkBAIC0wLDAgKzEsNDE4IEBACisvKi0qLSBtb2RlOkM7IC0qLSAqLworLyoKKyAqIENoZWNrOiBhIHVuaXQgdGVzdCBmcmFtZXdvcmsgZm9yIEMKKyAqIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgQXJpZW4gTWFsZWMKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgQ0hFQ0tfSAorI2RlZmluZSBDSEVDS19ICisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogQ2hlY2s6IGEgdW5pdCB0ZXN0IGZyYW1ld29yayBmb3IgQworCisgICBDaGVjayBpcyBhIHVuaXQgdGVzdCBmcmFtZXdvcmsgZm9yIEMuIEl0IGZlYXR1cmVzIGEgc2ltcGxlCisgICBpbnRlcmZhY2UgZm9yIGRlZmluaW5nIHVuaXQgdGVzdHMsIHB1dHRpbmcgbGl0dGxlIGluIHRoZSB3YXkgb2YgdGhlCisgICBkZXZlbG9wZXIuIFRlc3RzIGFyZSBydW4gaW4gYSBzZXBhcmF0ZSBhZGRyZXNzIHNwYWNlLCBzbyBDaGVjayBjYW4KKyAgIGNhdGNoIGJvdGggYXNzZXJ0aW9uIGZhaWx1cmVzIGFuZCBjb2RlIGVycm9ycyB0aGF0IGNhdXNlCisgICBzZWdtZW50YXRpb24gZmF1bHRzIG9yIG90aGVyIHNpZ25hbHMuIFRoZSBvdXRwdXQgZnJvbSB1bml0IHRlc3RzCisgICBjYW4gYmUgdXNlZCB3aXRoaW4gc291cmNlIGNvZGUgZWRpdG9ycyBhbmQgSURFcy4KKworICAgVW5pdCB0ZXN0cyBhcmUgY3JlYXRlZCB3aXRoIHRoZSBTVEFSVF9URVNUL0VORF9URVNUIG1hY3JvCisgICBwYWlyLiBUaGUgZmFpbF91bmxlc3MgYW5kIGZhaWwgbWFjcm9zIGFyZSB1c2VkIGZvciBjcmVhdGluZworICAgY2hlY2tzIHdpdGhpbiB1bml0IHRlc3RzOyB0aGUgbWFya19wb2ludCBtYWNybyBpcyB1c2VmdWwgZm9yCisgICB0cmFwcGluZyB0aGUgbG9jYXRpb24gb2Ygc2lnbmFscyBhbmQvb3IgZWFybHkgZXhpdHMuCisKKworICAgVGVzdCBjYXNlcyBhcmUgY3JlYXRlZCB3aXRoIHRjYXNlX2NyZWF0ZSwgdW5pdCB0ZXN0cyBhcmUgYWRkZWQKKyAgIHdpdGggdGNhc2VfYWRkX3Rlc3QKKworCisgICBTdWl0ZXMgYXJlIGNyZWF0ZWQgd2l0aCBzdWl0ZV9jcmVhdGU7IHRlc3QgY2FzZXMgYXJlIGFkZGVkCisgICB3aXRoIHN1aXRlX2FkZF90Y2FzZQorCisgICBTdWl0ZXMgYXJlIHJ1biB0aHJvdWdoIGFuIFNSdW5uZXIsIHdoaWNoIGlzIGNyZWF0ZWQgd2l0aAorICAgc3J1bm5lcl9jcmVhdGUuIEFkZGl0aW9uYWwgc3VpdGVzIGNhbiBiZSBhZGRlZCB0byBhbiBTUnVubmVyIHdpdGgKKyAgIHNydW5uZXJfYWRkX3N1aXRlLiBBbiBTUnVubmVyIGlzIGZyZWVkIHdpdGggc3J1bm5lcl9mcmVlLCB3aGljaCBhbHNvCisgICBmcmVlcyBhbGwgc3VpdGVzIGFkZGVkIHRvIHRoZSBydW5uZXIuIAorCisgICBVc2Ugc3J1bm5lcl9ydW5fYWxsIHRvIHJ1biBhIHN1aXRlIGFuZCBwcmludCByZXN1bHRzLgorCisgICBNYWNyb3MgYW5kIGZ1bmN0aW9ucyBzdGFydGluZyB3aXRoIF8gKHVuZGVyc2NvcmUpIGFyZSBpbnRlcm5hbCBhbmQKKyAgIG1heSBjaGFuZ2Ugd2l0aG91dCBub3RpY2UuIFlvdSBoYXZlIGJlZW4gd2FybmVkIS4KKworKi8KKworCisjaWZkZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgQ0tfQ1BQU1RBUlQgZXh0ZXJuICJDIiB7CisjZGVmaW5lIENLX0NQUEVORCB9CitDS19DUFBTVEFSVAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fR05VQ19NSU5PUl9fKQorI2RlZmluZSBHQ0NfVkVSU0lPTl9BVF9MRUFTVChtYWpvciwgbWlub3IpIFwKKygoX19HTlVDX18gPiAobWFqb3IpKSB8fCBcCisgKF9fR05VQ19fID09IChtYWpvcikgJiYgX19HTlVDX01JTk9SX18gPj0gKG1pbm9yKSkpCisjZWxzZQorI2RlZmluZSBHQ0NfVkVSU0lPTl9BVF9MRUFTVChtYWpvciwgbWlub3IpIDAKKyNlbmRpZgorCisjaWYgR0NDX1ZFUlNJT05fQVRfTEVBU1QoMiw5NSkKKyNkZWZpbmUgQ0tfQVRUUklCVVRFX1VOVVNFRCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkKKyNlbHNlCisjZGVmaW5lIENLX0FUVFJJQlVURV9VTlVTRUQgICAgICAgICAgICAgIAorI2VuZGlmIC8qIEdDQyAyLjk1ICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworLyogVXNlZCB0byBjcmVhdGUgdGhlIGxpbmtlciBzY3JpcHQgZm9yIGhpZGluZyBsaWItbG9jYWwgc3ltYm9scy4gU2hhbGwKKyAgIGJlIHB1dCBkaXJlY3RseSBpbiBmcm9udCBvZiB0aGUgZXhwb3J0ZWQgc3ltYm9sLiAqLworI2RlZmluZSBDS19FWFBPUlQKKworLyogY2hlY2sgdmVyc2lvbiBudW1iZXJzICovCisgIAorI2RlZmluZSBDSEVDS19NQUpPUl9WRVJTSU9OICgwKQorI2RlZmluZSBDSEVDS19NSU5PUl9WRVJTSU9OICg5KQorI2RlZmluZSBDSEVDS19NSUNST19WRVJTSU9OICg4KQorCitleHRlcm4gaW50IENLX0VYUE9SVCBjaGVja19tYWpvcl92ZXJzaW9uOworZXh0ZXJuIGludCBDS19FWFBPUlQgY2hlY2tfbWlub3JfdmVyc2lvbjsKK2V4dGVybiBpbnQgQ0tfRVhQT1JUIGNoZWNrX21pY3JvX3ZlcnNpb247CisKKyNpZm5kZWYgTlVMTAorI2RlZmluZSBOVUxMICgodm9pZCopMCkKKyNlbmRpZgorCisvKiBvcGFxdWUgdHlwZSBmb3IgYSB0ZXN0IGNhc2UKKworICAgQSBUQ2FzZSByZXByZXNlbnRzIGEgdGVzdCBjYXNlLiAgQ3JlYXRlIHdpdGggdGNhc2VfY3JlYXRlLCBmcmVlCisgICB3aXRoIHRjYXNlX2ZyZWUuICBGb3IgdGhlIG1vbWVudCwgdGVzdCBjYXNlcyBjYW4gb25seSBiZSBydW4KKyAgIHRocm91Z2ggYSBzdWl0ZQorKi8KK3R5cGVkZWYgc3RydWN0IFRDYXNlIFRDYXNlOyAKKworLyogdHlwZSBmb3IgYSB0ZXN0IGZ1bmN0aW9uICovCit0eXBlZGVmIHZvaWQgKCpURnVuKSAoaW50KTsKKworLyogdHlwZSBmb3IgYSBzZXR1cC90ZWFyZG93biBmdW5jdGlvbiAqLwordHlwZWRlZiB2b2lkICgqU0Z1bikgKHZvaWQpOworIAorLyogT3BhcXVlIHR5cGUgZm9yIGEgdGVzdCBzdWl0ZSAqLwordHlwZWRlZiBzdHJ1Y3QgU3VpdGUgU3VpdGU7CisgCisvKiBDcmVhdGVzIGEgdGVzdCBzdWl0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lICovCitTdWl0ZSAqIENLX0VYUE9SVCBzdWl0ZV9jcmVhdGUgKGNvbnN0IGNoYXIgKm5hbWUpOworCisvKiBBZGQgYSB0ZXN0IGNhc2UgdG8gYSBzdWl0ZSAqLwordm9pZCBDS19FWFBPUlQgc3VpdGVfYWRkX3RjYXNlIChTdWl0ZSAqcywgVENhc2UgKnRjKTsKKworLyogQ3JlYXRlIGEgdGVzdCBjYXNlICovCitUQ2FzZSAqIENLX0VYUE9SVCB0Y2FzZV9jcmVhdGUgKGNvbnN0IGNoYXIgKm5hbWUpOworCisvKiBBZGQgYSB0ZXN0IGZ1bmN0aW9uIHRvIGEgdGVzdCBjYXNlIChtYWNybyB2ZXJzaW9uKSAqLworI2RlZmluZSB0Y2FzZV9hZGRfdGVzdCh0Yyx0ZikgdGNhc2VfYWRkX3Rlc3RfcmFpc2Vfc2lnbmFsKHRjLHRmLDApCisKKy8qIEFkZCBhIHRlc3QgZnVuY3Rpb24gd2l0aCBzaWduYWwgaGFuZGxpbmcgdG8gYSB0ZXN0IGNhc2UgKG1hY3JvIHZlcnNpb24pICovCisjZGVmaW5lIHRjYXNlX2FkZF90ZXN0X3JhaXNlX3NpZ25hbCh0Yyx0ZixzaWduYWwpIFwKKyAgIF90Y2FzZV9hZGRfdGVzdCgodGMpLCh0ZiksIiIgIyB0ZiAiIiwoc2lnbmFsKSwgMCwgMCwgMSkKKworLyogQWRkIGEgdGVzdCBmdW5jdGlvbiB3aXRoIGFuIGV4cGVjdGVkIGV4aXQgdmFsdWUgdG8gYSB0ZXN0IGNhc2UgKG1hY3JvIHZlcnNpb24pICovCisjZGVmaW5lIHRjYXNlX2FkZF9leGl0X3Rlc3QodGMsIHRmLCBleHBlY3RlZF9leGl0X3ZhbHVlKSBcCisgIF90Y2FzZV9hZGRfdGVzdCgodGMpLCh0ZiksIiIgIyB0ZiAiIiwwLChleHBlY3RlZF9leGl0X3ZhbHVlKSwwLDEpCisKKy8qIEFkZCBhIGxvb3BpbmcgdGVzdCBmdW5jdGlvbiB0byBhIHRlc3QgY2FzZSAobWFjcm8gdmVyc2lvbikKKworICAgVGhlIHRlc3Qgd2lsbCBiZSBjYWxsZWQgaW4gYSBmb3IoaSA9IHM7IGkgPCBlOyBpKyspIGxvb3Agd2l0aCBlYWNoCisgICBpdGVyYXRpb24gYmVpbmcgZXhlY3V0ZWQgaW4gYSBuZXcgY29udGV4dC4gVGhlIGxvb3AgdmFyaWFibGUgJ2knIGlzCisgICBhdmFpbGFibGUgaW4gdGhlIHRlc3QuCisgKi8KKyNkZWZpbmUgdGNhc2VfYWRkX2xvb3BfdGVzdCh0Yyx0ZixzLGUpIFwKKyAgX3RjYXNlX2FkZF90ZXN0KCh0YyksKHRmKSwiIiAjIHRmICIiLDAsMCwocyksKGUpKQorIAorLyogU2lnbmFsIHZlcnNpb24gb2YgbG9vcCB0ZXN0LiAgCisgICBGSVhNRTogYWRkIGEgdGVzdCBjYXNlOyB0aGlzIGlzIHVudGVzdGVkIGFzIHBhcnQgb2YgQ2hlY2sncyB0ZXN0cy4KKyAqLworI2RlZmluZSB0Y2FzZV9hZGRfbG9vcF90ZXN0X3JhaXNlX3NpZ25hbCh0Yyx0ZixzaWduYWwscyxlKSBcCisgIF90Y2FzZV9hZGRfdGVzdCgodGMpLCh0ZiksIiIgIyB0ZiAiIiwoc2lnbmFsKSwwLChzKSwoZSkpCisKKy8qIGFsbG93ZWQgZXhpdCB2YWx1ZSB2ZXJzaW9uIG9mIGxvb3AgdGVzdC4gKi8KKyNkZWZpbmUgdGNhc2VfYWRkX2xvb3BfZXhpdF90ZXN0KHRjLHRmLGV4cGVjdGVkX2V4aXRfdmFsdWUscyxlKSBcCisgIF90Y2FzZV9hZGRfdGVzdCgodGMpLCh0ZiksIiIgIyB0ZiAiIiwwLChleHBlY3RlZF9leGl0X3ZhbHVlKSwocyksKGUpKQorCisvKiBBZGQgYSB0ZXN0IGZ1bmN0aW9uIHRvIGEgdGVzdCBjYXNlCisgIChmdW5jdGlvbiB2ZXJzaW9uIC0tIHVzZSB0aGlzIHdoZW4gdGhlIG1hY3JvIHdvbid0IHdvcmsKKyovCit2b2lkIENLX0VYUE9SVCBfdGNhc2VfYWRkX3Rlc3QgKFRDYXNlICp0YywgVEZ1biB0ZiwgY29uc3QgY2hhciAqZm5hbWUsIGludCBfc2lnbmFsLCBpbnQgYWxsb3dlZF9leGl0X3ZhbHVlLCBpbnQgc3RhcnQsIGludCBlbmQpOworCisvKiBBZGQgdW5jaGVja2VkIGZpeHR1cmUgc2V0dXAvdGVhcmRvd24gZnVuY3Rpb25zIHRvIGEgdGVzdCBjYXNlCisKKyAgIElmIHVuY2hlY2tlZCBmaXh0dXJlIGZ1bmN0aW9ucyBhcmUgcnVuIGF0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZQorICAgdGVzdCBjYXNlLCBhbmQgbm90IGJlZm9yZSBhbmQgYWZ0ZXIgdW5pdCB0ZXN0cy4gTm90ZSB0aGF0IHVuY2hlY2tlZAorICAgc2V0dXAvdGVhcmRvd24gZnVuY3Rpb25zIGFyZSBub3QgcnVuIGluIGEgc2VwYXJhdGUgYWRkcmVzcyBzcGFjZSwKKyAgIGxpa2UgdGVzdCBmdW5jdGlvbnMsIGFuZCBzbyBtdXN0IG5vdCBleGl0IG9yIHNpZ25hbCAoZS5nLiwKKyAgIHNlZ2ZhdWx0KQorCisgICBBbHNvLCB3aGVuIHJ1biBpbiBDS19OT0ZPUksgbW9kZSwgdW5jaGVja2VkIGZpeHR1cmUgZnVuY3Rpb25zIG1heQorICAgbGVhZCB0byBkaWZmZXJlbnQgdW5pdCB0ZXN0IGJlaGF2aW9yIElGIHVuaXQgdGVzdHMgY2hhbmdlIGRhdGEKKyAgIHNldHVwIGJ5IHRoZSBmaXh0dXJlIGZ1bmN0aW9ucy4KKyovCit2b2lkIENLX0VYUE9SVCB0Y2FzZV9hZGRfdW5jaGVja2VkX2ZpeHR1cmUgKFRDYXNlICp0YywgU0Z1biBzZXR1cCwgU0Z1biB0ZWFyZG93bik7CisKKy8qIEFkZCBmaXh0dXJlIHNldHVwL3RlYXJkb3duIGZ1bmN0aW9ucyB0byBhIHRlc3QgY2FzZQorCisgICBDaGVja2VkIGZpeHR1cmUgZnVuY3Rpb25zIGFyZSBydW4gYmVmb3JlIGFuZCBhZnRlciB1bml0CisgICB0ZXN0cy4gVW5saWtlIHVuY2hlY2tlZCBmaXh0dXJlIGZ1bmN0aW9ucywgY2hlY2tlZCBmaXh0dXJlCisgICBmdW5jdGlvbnMgYXJlIHJ1biBpbiB0aGUgc2FtZSBzZXBhcmF0ZSBhZGRyZXNzIHNwYWNlIGFzIHRoZSB0ZXN0CisgICBwcm9ncmFtLCBhbmQgdGh1cyB0aGUgdGVzdCBmdW5jdGlvbiB3aWxsIHN1cnZpdmUgc2lnbmFscyBvcgorICAgdW5leHBlY3RlZCBleGl0cyBpbiB0aGUgZml4dHVyZSBmdW5jdGlvbi4gQWxzbywgSUYgdGhlIHNldHVwCisgICBmdW5jdGlvbiBpcyBpZGVtcG90ZW50LCB1bml0IHRlc3QgYmVoYXZpb3Igd2lsbCBiZSB0aGUgc2FtZSBpbgorICAgQ0tfRk9SSyBhbmQgQ0tfTk9GT1JLIG1vZGVzLgorCisgICBIb3dldmVyLCBzaW5jZSBmaXh0dXJlIGZ1bmN0aW9ucyBhcmUgcnVuIGJlZm9yZSBhbmQgYWZ0ZXIgZWFjaCB1bml0CisgICB0ZXN0LCB0aGV5IHNob3VsZCBub3QgYmUgZXhwZW5zaXZlIGNvZGUuCisKKyovIAordm9pZCBDS19FWFBPUlQgdGNhc2VfYWRkX2NoZWNrZWRfZml4dHVyZSAoVENhc2UgKnRjLCBTRnVuIHNldHVwLCBTRnVuIHRlYXJkb3duKTsKKworLyogU2V0IHRoZSB0aW1lb3V0IGZvciBhbGwgdGVzdHMgaW4gYSB0ZXN0IGNhc2UuIEEgdGVzdCB0aGF0IGxhc3RzIGxvbmdlcgorICAgdGhhbiB0aGUgdGltZW91dCAoaW4gc2Vjb25kcykgd2lsbCBiZSBraWxsZWQgYW5kIHRodXMgZmFpbCB3aXRoIGFuIGVycm9yLgorICAgVGhlIHRpbWVvdXQgY2FuIGFsc28gYmUgc2V0IGdsb2JhbHkgd2l0aCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgIENLX0RFRkFVTFRfVElNRU9VVCwgdGhlIHNwZWNpZmljIHNldHRpbmcgYWx3YXlzIHRha2VzIHByZWNlZGVuY2UuCisqLwordm9pZCBDS19FWFBPUlQgdGNhc2Vfc2V0X3RpbWVvdXQgKFRDYXNlICp0YywgaW50IHRpbWVvdXQpOworIAorLyogSW50ZXJuYWwgZnVuY3Rpb24gdG8gbWFyayB0aGUgc3RhcnQgb2YgYSB0ZXN0IGZ1bmN0aW9uICovCit2b2lkIENLX0VYUE9SVCB0Y2FzZV9mbl9zdGFydCAoY29uc3QgY2hhciAqZm5hbWUsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKTsKKworLyogU3RhcnQgYSB1bml0IHRlc3Qgd2l0aCBTVEFSVF9URVNUKHVuaXRfbmFtZSksIGVuZCB3aXRoIEVORF9URVNUCisgICBPbmUgbXVzdCB1c2UgYnJhY2VzIHdpdGhpbiBhIFNUQVJUXy9FTkRfIHBhaXIgdG8gZGVjbGFyZSBuZXcgdmFyaWFibGVzCisqLyAKKyNkZWZpbmUgU1RBUlRfVEVTVChfX3Rlc3RuYW1lKVwKK3N0YXRpYyB2b2lkIF9fdGVzdG5hbWUgKGludCBfaSBDS19BVFRSSUJVVEVfVU5VU0VEKVwKK3tcCisgIHRjYXNlX2ZuX3N0YXJ0ICgiIiMgX190ZXN0bmFtZSwgX19GSUxFX18sIF9fTElORV9fKTsKKworLyogRW5kIGEgdW5pdCB0ZXN0ICovCisjZGVmaW5lIEVORF9URVNUIH0KKworLyogRmFpbCB0aGUgdGVzdCBjYXNlIHVubGVzcyBleHByIGlzIHRydWUgKi8KKy8qIFRoZSBzcGFjZSBiZWZvcmUgdGhlIGNvbW1hIHNpZ24gYmVmb3JlICMjIGlzIGVzc2VudGlhbCB0byBiZSBjb21wYXRpYmxlCisgICB3aXRoIGdjYyAyLjk1LjMgYW5kIGVhcmxpZXIuCisqLworI2RlZmluZSBmYWlsX3VubGVzcyhleHByLCAuLi4pXAorICAgICAgICBfZmFpbF91bmxlc3MoZXhwciwgX19GSUxFX18sIF9fTElORV9fLFwKKyAgICAgICAgIkFzc2VydGlvbiAnIiNleHByIicgZmFpbGVkIiAsICMjIF9fVkFfQVJHU19fLCBOVUxMKQorCisvKiBGYWlsIHRoZSB0ZXN0IGNhc2UgaWYgZXhwciBpcyB0cnVlICovCisvKiBUaGUgc3BhY2UgYmVmb3JlIHRoZSBjb21tYSBzaWduIGJlZm9yZSAjIyBpcyBlc3NlbnRpYWwgdG8gYmUgY29tcGF0aWJsZQorICAgd2l0aCBnY2MgMi45NS4zIGFuZCBlYXJsaWVyLgorKi8KKworLyogRklYTUU6IHRoZXNlIG1hY3JvcyBtYXkgY29uZmxpY3Qgd2l0aCBDODkgaWYgZXhwciBpcyAKKyAgIEZJWE1FOiAgIHN0cmNtcCAoc3RyMSwgc3RyMikgZHVlIHRvIGV4Y2Vzc2l2ZSBzdHJpbmcgbGVuZ3RoLiAqLworI2RlZmluZSBmYWlsX2lmKGV4cHIsIC4uLilcCisgICAgICAgIF9mYWlsX3VubGVzcyghKGV4cHIpLCBfX0ZJTEVfXywgX19MSU5FX18sXAorICAgICAgICAiRmFpbHVyZSAnIiNleHByIicgb2NjdXJlZCIgLCAjIyBfX1ZBX0FSR1NfXywgTlVMTCkKKworLyogQWx3YXlzIGZhaWwgKi8KKyNkZWZpbmUgZmFpbCguLi4pIF9mYWlsX3VubGVzcygwLCBfX0ZJTEVfXywgX19MSU5FX18sICJGYWlsZWQiICwgIyMgX19WQV9BUkdTX18sIE5VTEwpCisKKy8qIE5vbiBtYWNybyB2ZXJzaW9uIG9mICNmYWlsX3VubGVzcywgd2l0aCBtb3JlIGNvbXBsaWNhdGVkIGludGVyZmFjZSAqLwordm9pZCBDS19FWFBPUlQgX2ZhaWxfdW5sZXNzIChpbnQgcmVzdWx0LCBjb25zdCBjaGFyICpmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZSwgY29uc3QgY2hhciAqZXhwciwgLi4uKTsKKworLyogTmV3IGNoZWNrIGZhaWwgQVBJLiAqLworI2RlZmluZSBja19hYm9ydCgpIGNrX2Fib3J0X21zZyhOVUxMKQorI2RlZmluZSBja19hYm9ydF9tc2cgZmFpbAorI2RlZmluZSBja19hc3NlcnQoQykgY2tfYXNzZXJ0X21zZyhDLCBOVUxMKQorI2RlZmluZSBja19hc3NlcnRfbXNnIGZhaWxfdW5sZXNzCisKKy8qIEludGVnZXIgY29tcGFyc2lvbiBtYWNyb3Mgd2l0aCBpbXByb3ZlZCBvdXRwdXQgY29tcGFyZWQgdG8gZmFpbF91bmxlc3MoKS4gKi8KKy8qIE8gbWF5IGJlIGFueSBjb21wYXJpb24gb3BlcmF0b3IuICovCisjZGVmaW5lIF9ja19hc3NlcnRfaW50KFgsIE8sIFkpIGNrX2Fzc2VydF9tc2coKFgpIE8gKFkpLCAiQXNzZXJ0aW9uICciI1gjTyNZIicgZmFpbGVkOiAiI1giPT0lZCwgIiNZIj09JWQiLCBYLCBZKSAKKyNkZWZpbmUgY2tfYXNzZXJ0X2ludF9lcShYLCBZKSBfY2tfYXNzZXJ0X2ludChYLCA9PSwgWSkgCisjZGVmaW5lIGNrX2Fzc2VydF9pbnRfbmUoWCwgWSkgX2NrX2Fzc2VydF9pbnQoWCwgIT0sIFkpIAorCisvKiBTdHJpbmcgY29tcGFyc2lvbiBtYWNyb3Mgd2l0aCBpbXByb3ZlZCBvdXRwdXQgY29tcGFyZWQgdG8gZmFpbF91bmxlc3MoKSAqLworI2RlZmluZSBfY2tfYXNzZXJ0X3N0cihDLCBYLCBPLCBZKSBja19hc3NlcnRfbXNnKEMsICJBc3NlcnRpb24gJyIjWCNPI1kiJyBmYWlsZWQ6ICIjWCI9PVwiJXNcIiwgIiNZIj09XCIlc1wiIiwgWCwgWSkgCisjZGVmaW5lIGNrX2Fzc2VydF9zdHJfZXEoWCwgWSkgX2NrX2Fzc2VydF9zdHIoIXN0cmNtcChYLCBZKSwgWCwgPT0sIFkpCisjZGVmaW5lIGNrX2Fzc2VydF9zdHJfbmUoWCwgWSkgX2NrX2Fzc2VydF9zdHIoc3RyY21wKFgsIFkpLCBYLCAhPSwgWSkKKworCisvKiBNYXJrIHRoZSBsYXN0IHBvaW50IHJlYWNoZWQgaW4gYSB1bml0IHRlc3QKKyAgICh1c2VmdWwgZm9yIHRyYWNraW5nIGRvd24gd2hlcmUgYSBzZWdmYXVsdCwgZXRjLiBvY2N1cnMpCisqLworI2RlZmluZSBtYXJrX3BvaW50KCkgX21hcmtfcG9pbnQoX19GSUxFX18sX19MSU5FX18pCisKKy8qIE5vbiBtYWNybyB2ZXJzaW9uIG9mICNtYXJrX3BvaW50ICovCit2b2lkIENLX0VYUE9SVCBfbWFya19wb2ludCAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpOworCisvKiBSZXN1bHQgb2YgYSB0ZXN0ICovCitlbnVtIHRlc3RfcmVzdWx0IHsKKyAgQ0tfVEVTVF9SRVNVTFRfSU5WQUxJRCwgLyogRGVmYXVsdCB2YWx1ZTsgc2hvdWxkIG5vdCBlbmNvdW50ZXIgdGhpcyAqLworICBDS19QQVNTLCAvKiBUZXN0IHBhc3NlZCovCisgIENLX0ZBSUxVUkUsIC8qIFRlc3QgY29tcGxldGVkIGJ1dCBmYWlsZWQgKi8KKyAgQ0tfRVJST1IgLyogVGVzdCBmYWlsZWQgdG8gY29tcGxldGUKKwkgICAgICAodW5leHBlY3RlZCBzaWduYWwgb3Igbm9uLXplcm8gZWFybHkgZXhpdCkgKi8gCit9OworCisvKiBTcGVjaWZpZXMgdGhlIGhvdyBtdWNoIG91dHB1dCBhbiBTUnVubmVyIHNob3VsZCBwcm9kdWNlICovCitlbnVtIHByaW50X291dHB1dCB7CisgIENLX1NJTEVOVCwgLyogTm8gb3V0cHV0ICovCisgIENLX01JTklNQUwsIC8qIE9ubHkgc3VtbWFyeSBvdXRwdXQgKi8KKyAgQ0tfTk9STUFMLCAvKiBBbGwgZmFpbGVkIHRlc3RzICovCisgIENLX1ZFUkJPU0UsIC8qIEFsbCB0ZXN0cyAqLworICBDS19FTlYsIC8qIExvb2sgYXQgZW52aXJvbm1lbnQgdmFyICovCisjaWYgMAorICBDS19TVUJVTklULCAvKiBSdW4gYXMgYSBzdWJ1bml0IGNoaWxkIHByb2Nlc3MgKi8KKyNlbmRpZgorICBDS19MQVNUCit9OworCisvKiBIb2xkcyBzdGF0ZSBmb3IgYSBydW5uaW5nIG9mIGEgdGVzdCBzdWl0ZSAqLwordHlwZWRlZiBzdHJ1Y3QgU1J1bm5lciBTUnVubmVyOworCisvKiBPcGFxdWUgdHlwZSBmb3IgYSB0ZXN0IGZhaWx1cmUgKi8KK3R5cGVkZWYgc3RydWN0IFRlc3RSZXN1bHQgVGVzdFJlc3VsdDsKKworLyogYWNjZXNzb3JzIGZvciB0ciBmaWVsZHMgKi8KK2VudW0gY2tfcmVzdWx0X2N0eCB7CisgIENLX0NUWF9JTlZBTElELCAvKiBEZWZhdWx0IHZhbHVlOyBzaG91bGQgbm90IGVuY291bnRlciB0aGlzICovCisgIENLX0NUWF9TRVRVUCwKKyAgQ0tfQ1RYX1RFU1QsCisgIENLX0NUWF9URUFSRE9XTgorfTsKKworLyogVHlwZSBvZiByZXN1bHQgKi8KK2ludCBDS19FWFBPUlQgdHJfcnR5cGUgKFRlc3RSZXN1bHQgKnRyKTsKKy8qIENvbnRleHQgaW4gd2hpY2ggdGhlIHJlc3VsdCBvY2N1cnJlZCAqLyAKK2VudW0gY2tfcmVzdWx0X2N0eCBDS19FWFBPUlQgdHJfY3R4IChUZXN0UmVzdWx0ICp0cik7IAorLyogRmFpbHVyZSBtZXNzYWdlICovCitjb25zdCBjaGFyICogQ0tfRVhQT1JUIHRyX21zZyAoVGVzdFJlc3VsdCAqdHIpOworLyogTGluZSBudW1iZXIgYXQgd2hpY2ggZmFpbHVyZSBvY2N1cmVkICovCitpbnQgQ0tfRVhQT1JUIHRyX2xubyAoVGVzdFJlc3VsdCAqdHIpOworLyogRmlsZSBuYW1lIGF0IHdoaWNoIGZhaWx1cmUgb2NjdXJlZCAqLworY29uc3QgY2hhciAqIENLX0VYUE9SVCB0cl9sZmlsZSAoVGVzdFJlc3VsdCAqdHIpOworLyogVGVzdCBjYXNlIGluIHdoaWNoIHVuaXQgdGVzdCB3YXMgcnVuICovCitjb25zdCBjaGFyICogQ0tfRVhQT1JUIHRyX3RjbmFtZSAoVGVzdFJlc3VsdCAqdHIpOworCisvKiBDcmVhdGVzIGFuIFNSdW5uZXIgZm9yIHRoZSBnaXZlbiBzdWl0ZSAqLworU1J1bm5lciAqIENLX0VYUE9SVCBzcnVubmVyX2NyZWF0ZSAoU3VpdGUgKnMpOworCisvKiBBZGRzIGEgU3VpdGUgdG8gYW4gU1J1bm5lciAqLwordm9pZCBDS19FWFBPUlQgc3J1bm5lcl9hZGRfc3VpdGUgKFNSdW5uZXIgKnNyLCBTdWl0ZSAqcyk7CisKKy8qIEZyZWVzIGFuIFNSdW5uZXIsIGFsbCBzdWl0ZXMgYWRkZWQgdG8gaXQgYW5kIGFsbCBjb250YWluZWQgdGVzdCBjYXNlcyAqLwordm9pZCBDS19FWFBPUlQgc3J1bm5lcl9mcmVlIChTUnVubmVyICpzcik7CisKKyAKKy8qIFRlc3QgcnVubmluZyAqLworCisvKiBSdW5zIGFuIFNSdW5uZXIsIHByaW50aW5nIHJlc3VsdHMgYXMgc3BlY2lmaWVkIChzZWUgZW51bSBwcmludF9vdXRwdXQpICovCit2b2lkIENLX0VYUE9SVCBzcnVubmVyX3J1bl9hbGwgKFNSdW5uZXIgKnNyLCBlbnVtIHByaW50X291dHB1dCBwcmludF9tb2RlKTsKKworIAorLyogTmV4dCBmdW5jdGlvbnMgYXJlIHZhbGlkIG9ubHkgYWZ0ZXIgdGhlIHN1aXRlIGhhcyBiZWVuCisgICBjb21wbGV0ZWx5IHJ1biwgb2YgY291cnNlICovCisKKy8qIE51bWJlciBvZiBmYWlsZWQgdGVzdHMgaW4gYSBydW4gc3VpdGUuIEluY2x1ZGVzIGZhaWx1cmVzICsgZXJyb3JzICovCitpbnQgQ0tfRVhQT1JUIHNydW5uZXJfbnRlc3RzX2ZhaWxlZCAoU1J1bm5lciAqc3IpOworCisvKiBUb3RhbCBudW1iZXIgb2YgdGVzdHMgcnVuIGluIGEgcnVuIHN1aXRlICovCitpbnQgQ0tfRVhQT1JUIHNydW5uZXJfbnRlc3RzX3J1biAoU1J1bm5lciAqc3IpOworCisvKiBSZXR1cm4gYW4gYXJyYXkgb2YgcmVzdWx0cyBmb3IgYWxsIGZhaWx1cmVzCisgIAorICAgTnVtYmVyIG9mIGZhaWx1cmVzIGlzIGVxdWFsIHRvIHNydW5uZXJfbmZhaWxlZF90ZXN0cy4gIE1lbW9yeSBmb3IKKyAgIHRoZSBhcnJheSBpcyBtYWxsb2MnZWQgYW5kIG11c3QgYmUgZnJlZWQsIGJ1dCBpbmRpdmlkdWFsIFRlc3RSZXN1bHRzCisgICBtdXN0IG5vdAorKi8KK1Rlc3RSZXN1bHQgKiogQ0tfRVhQT1JUIHNydW5uZXJfZmFpbHVyZXMgKFNSdW5uZXIgKnNyKTsKKworLyogUmV0dXJuIGFuIGFycmF5IG9mIHJlc3VsdHMgZm9yIGFsbCBydW4gdGVzdHMKKworICAgTnVtYmVyIG9mIHJlc3VsdHMgaXMgZXF1YWwgdG8gc3J1bm5lcl9udGVzdHNfcnVuLCBhbmQgZXhjbHVkZXMKKyAgIGZhaWx1cmVzIGR1ZSB0byBzZXR1cCBmdW5jdGlvbiBmYWlsdXJlLgorCisgICBNZW1vcnkgaXMgbWFsbG9jJ2VkIGFuZCBtdXN0IGJlIGZyZWVkLCBidXQgaW5kaXZpZHVhbCBUZXN0UmVzdWx0cworICAgbXVzdCBub3QKKyovICAKK1Rlc3RSZXN1bHQgKiogQ0tfRVhQT1JUIHNydW5uZXJfcmVzdWx0cyAoU1J1bm5lciAqc3IpOworCisgCisvKiBQcmludGluZyAqLworCisvKiBQcmludCB0aGUgcmVzdWx0cyBjb250YWluZWQgaW4gYW4gU1J1bm5lciAqLwordm9pZCBDS19FWFBPUlQgc3J1bm5lcl9wcmludCAoU1J1bm5lciAqc3IsIGVudW0gcHJpbnRfb3V0cHV0IHByaW50X21vZGUpOworICAKKyAgCisvKiBTZXQgYSBsb2cgZmlsZSB0byB3aGljaCB0byB3cml0ZSBkdXJpbmcgdGVzdCBydW5uaW5nLgorCisgIExvZyBmaWxlIHNldHRpbmcgaXMgYW4gaW5pdGlhbGl6ZSBvbmx5IG9wZXJhdGlvbiAtLSBpdCBzaG91bGQgYmUKKyAgZG9uZSBpbW1lZGlhdGx5IGFmdGVyIFNSdW5uZXIgY3JlYXRpb24sIGFuZCB0aGUgbG9nIGZpbGUgY2FuJ3QgYmUKKyAgY2hhbmdlZCBhZnRlciBiZWluZyBzZXQuCisqLwordm9pZCBDS19FWFBPUlQgc3J1bm5lcl9zZXRfbG9nIChTUnVubmVyICpzciwgY29uc3QgY2hhciAqZm5hbWUpOworCisvKiBEb2VzIHRoZSBTUnVubmVyIGhhdmUgYSBsb2cgZmlsZT8gKi8KK2ludCBDS19FWFBPUlQgc3J1bm5lcl9oYXNfbG9nIChTUnVubmVyICpzcik7CisKKy8qIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgbG9nIGZpbGUsIG9yIE5VTEwgaWYgbm9uZSAqLworY29uc3QgY2hhciAqIENLX0VYUE9SVCBzcnVubmVyX2xvZ19mbmFtZSAoU1J1bm5lciAqc3IpOworCisvKiBTZXQgYSB4bWwgZmlsZSB0byB3aGljaCB0byB3cml0ZSBkdXJpbmcgdGVzdCBydW5uaW5nLgorCisgIFhNTCBmaWxlIHNldHRpbmcgaXMgYW4gaW5pdGlhbGl6ZSBvbmx5IG9wZXJhdGlvbiAtLSBpdCBzaG91bGQgYmUKKyAgZG9uZSBpbW1lZGlhdGx5IGFmdGVyIFNSdW5uZXIgY3JlYXRpb24sIGFuZCB0aGUgWE1MIGZpbGUgY2FuJ3QgYmUKKyAgY2hhbmdlZCBhZnRlciBiZWluZyBzZXQuCisqLwordm9pZCBDS19FWFBPUlQgc3J1bm5lcl9zZXRfeG1sIChTUnVubmVyICpzciwgY29uc3QgY2hhciAqZm5hbWUpOworCisvKiBEb2VzIHRoZSBTUnVubmVyIGhhdmUgYW4gWE1MIGxvZyBmaWxlPyAqLworaW50IENLX0VYUE9SVCBzcnVubmVyX2hhc194bWwgKFNSdW5uZXIgKnNyKTsKKworLyogUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBYTUwgZmlsZSwgb3IgTlVMTCBpZiBub25lICovCitjb25zdCBjaGFyICogQ0tfRVhQT1JUIHNydW5uZXJfeG1sX2ZuYW1lIChTUnVubmVyICpzcik7CisKKworLyogQ29udHJvbCBmb3JraW5nICovCitlbnVtIGZvcmtfc3RhdHVzIHsKKyAgQ0tfRk9SS19HRVRFTlYsIC8qIGxvb2sgaW4gdGhlIGVudmlyb25tZW50IGZvciBDS19GT1JLICovCisgIENLX0ZPUkssICAgICAgICAvKiBjYWxsIGZvcmsgdG8gcnVuIHRlc3RzICovCisgIENLX05PRk9SSyAgICAgICAvKiBkb24ndCBjYWxsIGZvcmsgKi8KK307CisgCisvKiBHZXQgdGhlIGN1cnJlbnQgZm9yayBzdGF0dXMgKi8KK2VudW0gZm9ya19zdGF0dXMgQ0tfRVhQT1JUIHNydW5uZXJfZm9ya19zdGF0dXMgKFNSdW5uZXIgKnNyKTsKKworLyogU2V0IHRoZSBjdXJyZW50IGZvcmsgc3RhdHVzICovCit2b2lkIENLX0VYUE9SVCBzcnVubmVyX3NldF9mb3JrX3N0YXR1cyAoU1J1bm5lciAqc3IsIGVudW0gZm9ya19zdGF0dXMgZnN0YXQpOyAKKyAgCisvKiBGb3JrIGluIGEgdGVzdCBhbmQgbWFrZSBzdXJlIG1lc3NhZ2luZyBhbmQgdGVzdHMgd29yay4gKi8KK3BpZF90IENLX0VYUE9SVCBjaGVja19mb3JrKHZvaWQpOworCisvKiBXYWl0IGZvciB0aGUgcGlkIGFuZCBleGl0LiBJZiBwaWQgaXMgemVybywganVzdCBleGl0LiAqLwordm9pZCBDS19FWFBPUlQgY2hlY2tfd2FpdHBpZF9hbmRfZXhpdChwaWRfdCBwaWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMgCitDS19DUFBFTkQKKyNlbmRpZgorCisjZW5kaWYgLyogQ0hFQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2suaC5pbiBiL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrLmguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMxZmRiYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrLmguaW4KQEAgLTAsMCArMSw0MTggQEAKKy8qLSotIG1vZGU6QzsgLSotICovCisvKgorICogQ2hlY2s6IGEgdW5pdCB0ZXN0IGZyYW1ld29yayBmb3IgQworICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCBBcmllbiBNYWxlYworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBDSEVDS19ICisjZGVmaW5lIENIRUNLX0gKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKiBDaGVjazogYSB1bml0IHRlc3QgZnJhbWV3b3JrIGZvciBDCisKKyAgIENoZWNrIGlzIGEgdW5pdCB0ZXN0IGZyYW1ld29yayBmb3IgQy4gSXQgZmVhdHVyZXMgYSBzaW1wbGUKKyAgIGludGVyZmFjZSBmb3IgZGVmaW5pbmcgdW5pdCB0ZXN0cywgcHV0dGluZyBsaXR0bGUgaW4gdGhlIHdheSBvZiB0aGUKKyAgIGRldmVsb3Blci4gVGVzdHMgYXJlIHJ1biBpbiBhIHNlcGFyYXRlIGFkZHJlc3Mgc3BhY2UsIHNvIENoZWNrIGNhbgorICAgY2F0Y2ggYm90aCBhc3NlcnRpb24gZmFpbHVyZXMgYW5kIGNvZGUgZXJyb3JzIHRoYXQgY2F1c2UKKyAgIHNlZ21lbnRhdGlvbiBmYXVsdHMgb3Igb3RoZXIgc2lnbmFscy4gVGhlIG91dHB1dCBmcm9tIHVuaXQgdGVzdHMKKyAgIGNhbiBiZSB1c2VkIHdpdGhpbiBzb3VyY2UgY29kZSBlZGl0b3JzIGFuZCBJREVzLgorCisgICBVbml0IHRlc3RzIGFyZSBjcmVhdGVkIHdpdGggdGhlIFNUQVJUX1RFU1QvRU5EX1RFU1QgbWFjcm8KKyAgIHBhaXIuIFRoZSBmYWlsX3VubGVzcyBhbmQgZmFpbCBtYWNyb3MgYXJlIHVzZWQgZm9yIGNyZWF0aW5nCisgICBjaGVja3Mgd2l0aGluIHVuaXQgdGVzdHM7IHRoZSBtYXJrX3BvaW50IG1hY3JvIGlzIHVzZWZ1bCBmb3IKKyAgIHRyYXBwaW5nIHRoZSBsb2NhdGlvbiBvZiBzaWduYWxzIGFuZC9vciBlYXJseSBleGl0cy4KKworCisgICBUZXN0IGNhc2VzIGFyZSBjcmVhdGVkIHdpdGggdGNhc2VfY3JlYXRlLCB1bml0IHRlc3RzIGFyZSBhZGRlZAorICAgd2l0aCB0Y2FzZV9hZGRfdGVzdAorCisKKyAgIFN1aXRlcyBhcmUgY3JlYXRlZCB3aXRoIHN1aXRlX2NyZWF0ZTsgdGVzdCBjYXNlcyBhcmUgYWRkZWQKKyAgIHdpdGggc3VpdGVfYWRkX3RjYXNlCisKKyAgIFN1aXRlcyBhcmUgcnVuIHRocm91Z2ggYW4gU1J1bm5lciwgd2hpY2ggaXMgY3JlYXRlZCB3aXRoCisgICBzcnVubmVyX2NyZWF0ZS4gQWRkaXRpb25hbCBzdWl0ZXMgY2FuIGJlIGFkZGVkIHRvIGFuIFNSdW5uZXIgd2l0aAorICAgc3J1bm5lcl9hZGRfc3VpdGUuIEFuIFNSdW5uZXIgaXMgZnJlZWQgd2l0aCBzcnVubmVyX2ZyZWUsIHdoaWNoIGFsc28KKyAgIGZyZWVzIGFsbCBzdWl0ZXMgYWRkZWQgdG8gdGhlIHJ1bm5lci4gCisKKyAgIFVzZSBzcnVubmVyX3J1bl9hbGwgdG8gcnVuIGEgc3VpdGUgYW5kIHByaW50IHJlc3VsdHMuCisKKyAgIE1hY3JvcyBhbmQgZnVuY3Rpb25zIHN0YXJ0aW5nIHdpdGggXyAodW5kZXJzY29yZSkgYXJlIGludGVybmFsIGFuZAorICAgbWF5IGNoYW5nZSB3aXRob3V0IG5vdGljZS4gWW91IGhhdmUgYmVlbiB3YXJuZWQhLgorCisqLworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBDS19DUFBTVEFSVCBleHRlcm4gIkMiIHsKKyNkZWZpbmUgQ0tfQ1BQRU5EIH0KK0NLX0NQUFNUQVJUCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19HTlVDX01JTk9SX18pCisjZGVmaW5lIEdDQ19WRVJTSU9OX0FUX0xFQVNUKG1ham9yLCBtaW5vcikgXAorKChfX0dOVUNfXyA+IChtYWpvcikpIHx8IFwKKyAoX19HTlVDX18gPT0gKG1ham9yKSAmJiBfX0dOVUNfTUlOT1JfXyA+PSAobWlub3IpKSkKKyNlbHNlCisjZGVmaW5lIEdDQ19WRVJTSU9OX0FUX0xFQVNUKG1ham9yLCBtaW5vcikgMAorI2VuZGlmCisKKyNpZiBHQ0NfVkVSU0lPTl9BVF9MRUFTVCgyLDk1KQorI2RlZmluZSBDS19BVFRSSUJVVEVfVU5VU0VEIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKQorI2Vsc2UKKyNkZWZpbmUgQ0tfQVRUUklCVVRFX1VOVVNFRCAgICAgICAgICAgICAgCisjZW5kaWYgLyogR0NDIDIuOTUgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisvKiBVc2VkIHRvIGNyZWF0ZSB0aGUgbGlua2VyIHNjcmlwdCBmb3IgaGlkaW5nIGxpYi1sb2NhbCBzeW1ib2xzLiBTaGFsbAorICAgYmUgcHV0IGRpcmVjdGx5IGluIGZyb250IG9mIHRoZSBleHBvcnRlZCBzeW1ib2wuICovCisjZGVmaW5lIENLX0VYUE9SVAorCisvKiBjaGVjayB2ZXJzaW9uIG51bWJlcnMgKi8KKyAgCisjZGVmaW5lIENIRUNLX01BSk9SX1ZFUlNJT04gKEBDSEVDS19NQUpPUl9WRVJTSU9OQCkKKyNkZWZpbmUgQ0hFQ0tfTUlOT1JfVkVSU0lPTiAoQENIRUNLX01JTk9SX1ZFUlNJT05AKQorI2RlZmluZSBDSEVDS19NSUNST19WRVJTSU9OIChAQ0hFQ0tfTUlDUk9fVkVSU0lPTkApCisKK2V4dGVybiBpbnQgQ0tfRVhQT1JUIGNoZWNrX21ham9yX3ZlcnNpb247CitleHRlcm4gaW50IENLX0VYUE9SVCBjaGVja19taW5vcl92ZXJzaW9uOworZXh0ZXJuIGludCBDS19FWFBPUlQgY2hlY2tfbWljcm9fdmVyc2lvbjsKKworI2lmbmRlZiBOVUxMCisjZGVmaW5lIE5VTEwgKCh2b2lkKikwKQorI2VuZGlmCisKKy8qIG9wYXF1ZSB0eXBlIGZvciBhIHRlc3QgY2FzZQorCisgICBBIFRDYXNlIHJlcHJlc2VudHMgYSB0ZXN0IGNhc2UuICBDcmVhdGUgd2l0aCB0Y2FzZV9jcmVhdGUsIGZyZWUKKyAgIHdpdGggdGNhc2VfZnJlZS4gIEZvciB0aGUgbW9tZW50LCB0ZXN0IGNhc2VzIGNhbiBvbmx5IGJlIHJ1bgorICAgdGhyb3VnaCBhIHN1aXRlCisqLwordHlwZWRlZiBzdHJ1Y3QgVENhc2UgVENhc2U7IAorCisvKiB0eXBlIGZvciBhIHRlc3QgZnVuY3Rpb24gKi8KK3R5cGVkZWYgdm9pZCAoKlRGdW4pIChpbnQpOworCisvKiB0eXBlIGZvciBhIHNldHVwL3RlYXJkb3duIGZ1bmN0aW9uICovCit0eXBlZGVmIHZvaWQgKCpTRnVuKSAodm9pZCk7CisgCisvKiBPcGFxdWUgdHlwZSBmb3IgYSB0ZXN0IHN1aXRlICovCit0eXBlZGVmIHN0cnVjdCBTdWl0ZSBTdWl0ZTsKKyAKKy8qIENyZWF0ZXMgYSB0ZXN0IHN1aXRlIHdpdGggdGhlIGdpdmVuIG5hbWUgKi8KK1N1aXRlICogQ0tfRVhQT1JUIHN1aXRlX2NyZWF0ZSAoY29uc3QgY2hhciAqbmFtZSk7CisKKy8qIEFkZCBhIHRlc3QgY2FzZSB0byBhIHN1aXRlICovCit2b2lkIENLX0VYUE9SVCBzdWl0ZV9hZGRfdGNhc2UgKFN1aXRlICpzLCBUQ2FzZSAqdGMpOworCisvKiBDcmVhdGUgYSB0ZXN0IGNhc2UgKi8KK1RDYXNlICogQ0tfRVhQT1JUIHRjYXNlX2NyZWF0ZSAoY29uc3QgY2hhciAqbmFtZSk7CisKKy8qIEFkZCBhIHRlc3QgZnVuY3Rpb24gdG8gYSB0ZXN0IGNhc2UgKG1hY3JvIHZlcnNpb24pICovCisjZGVmaW5lIHRjYXNlX2FkZF90ZXN0KHRjLHRmKSB0Y2FzZV9hZGRfdGVzdF9yYWlzZV9zaWduYWwodGMsdGYsMCkKKworLyogQWRkIGEgdGVzdCBmdW5jdGlvbiB3aXRoIHNpZ25hbCBoYW5kbGluZyB0byBhIHRlc3QgY2FzZSAobWFjcm8gdmVyc2lvbikgKi8KKyNkZWZpbmUgdGNhc2VfYWRkX3Rlc3RfcmFpc2Vfc2lnbmFsKHRjLHRmLHNpZ25hbCkgXAorICAgX3RjYXNlX2FkZF90ZXN0KCh0YyksKHRmKSwiIiAjIHRmICIiLChzaWduYWwpLCAwLCAwLCAxKQorCisvKiBBZGQgYSB0ZXN0IGZ1bmN0aW9uIHdpdGggYW4gZXhwZWN0ZWQgZXhpdCB2YWx1ZSB0byBhIHRlc3QgY2FzZSAobWFjcm8gdmVyc2lvbikgKi8KKyNkZWZpbmUgdGNhc2VfYWRkX2V4aXRfdGVzdCh0YywgdGYsIGV4cGVjdGVkX2V4aXRfdmFsdWUpIFwKKyAgX3RjYXNlX2FkZF90ZXN0KCh0YyksKHRmKSwiIiAjIHRmICIiLDAsKGV4cGVjdGVkX2V4aXRfdmFsdWUpLDAsMSkKKworLyogQWRkIGEgbG9vcGluZyB0ZXN0IGZ1bmN0aW9uIHRvIGEgdGVzdCBjYXNlIChtYWNybyB2ZXJzaW9uKQorCisgICBUaGUgdGVzdCB3aWxsIGJlIGNhbGxlZCBpbiBhIGZvcihpID0gczsgaSA8IGU7IGkrKykgbG9vcCB3aXRoIGVhY2gKKyAgIGl0ZXJhdGlvbiBiZWluZyBleGVjdXRlZCBpbiBhIG5ldyBjb250ZXh0LiBUaGUgbG9vcCB2YXJpYWJsZSAnaScgaXMKKyAgIGF2YWlsYWJsZSBpbiB0aGUgdGVzdC4KKyAqLworI2RlZmluZSB0Y2FzZV9hZGRfbG9vcF90ZXN0KHRjLHRmLHMsZSkgXAorICBfdGNhc2VfYWRkX3Rlc3QoKHRjKSwodGYpLCIiICMgdGYgIiIsMCwwLChzKSwoZSkpCisgCisvKiBTaWduYWwgdmVyc2lvbiBvZiBsb29wIHRlc3QuICAKKyAgIEZJWE1FOiBhZGQgYSB0ZXN0IGNhc2U7IHRoaXMgaXMgdW50ZXN0ZWQgYXMgcGFydCBvZiBDaGVjaydzIHRlc3RzLgorICovCisjZGVmaW5lIHRjYXNlX2FkZF9sb29wX3Rlc3RfcmFpc2Vfc2lnbmFsKHRjLHRmLHNpZ25hbCxzLGUpIFwKKyAgX3RjYXNlX2FkZF90ZXN0KCh0YyksKHRmKSwiIiAjIHRmICIiLChzaWduYWwpLDAsKHMpLChlKSkKKworLyogYWxsb3dlZCBleGl0IHZhbHVlIHZlcnNpb24gb2YgbG9vcCB0ZXN0LiAqLworI2RlZmluZSB0Y2FzZV9hZGRfbG9vcF9leGl0X3Rlc3QodGMsdGYsZXhwZWN0ZWRfZXhpdF92YWx1ZSxzLGUpIFwKKyAgX3RjYXNlX2FkZF90ZXN0KCh0YyksKHRmKSwiIiAjIHRmICIiLDAsKGV4cGVjdGVkX2V4aXRfdmFsdWUpLChzKSwoZSkpCisKKy8qIEFkZCBhIHRlc3QgZnVuY3Rpb24gdG8gYSB0ZXN0IGNhc2UKKyAgKGZ1bmN0aW9uIHZlcnNpb24gLS0gdXNlIHRoaXMgd2hlbiB0aGUgbWFjcm8gd29uJ3Qgd29yaworKi8KK3ZvaWQgQ0tfRVhQT1JUIF90Y2FzZV9hZGRfdGVzdCAoVENhc2UgKnRjLCBURnVuIHRmLCBjb25zdCBjaGFyICpmbmFtZSwgaW50IF9zaWduYWwsIGludCBhbGxvd2VkX2V4aXRfdmFsdWUsIGludCBzdGFydCwgaW50IGVuZCk7CisKKy8qIEFkZCB1bmNoZWNrZWQgZml4dHVyZSBzZXR1cC90ZWFyZG93biBmdW5jdGlvbnMgdG8gYSB0ZXN0IGNhc2UKKworICAgSWYgdW5jaGVja2VkIGZpeHR1cmUgZnVuY3Rpb25zIGFyZSBydW4gYXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlCisgICB0ZXN0IGNhc2UsIGFuZCBub3QgYmVmb3JlIGFuZCBhZnRlciB1bml0IHRlc3RzLiBOb3RlIHRoYXQgdW5jaGVja2VkCisgICBzZXR1cC90ZWFyZG93biBmdW5jdGlvbnMgYXJlIG5vdCBydW4gaW4gYSBzZXBhcmF0ZSBhZGRyZXNzIHNwYWNlLAorICAgbGlrZSB0ZXN0IGZ1bmN0aW9ucywgYW5kIHNvIG11c3Qgbm90IGV4aXQgb3Igc2lnbmFsIChlLmcuLAorICAgc2VnZmF1bHQpCisKKyAgIEFsc28sIHdoZW4gcnVuIGluIENLX05PRk9SSyBtb2RlLCB1bmNoZWNrZWQgZml4dHVyZSBmdW5jdGlvbnMgbWF5CisgICBsZWFkIHRvIGRpZmZlcmVudCB1bml0IHRlc3QgYmVoYXZpb3IgSUYgdW5pdCB0ZXN0cyBjaGFuZ2UgZGF0YQorICAgc2V0dXAgYnkgdGhlIGZpeHR1cmUgZnVuY3Rpb25zLgorKi8KK3ZvaWQgQ0tfRVhQT1JUIHRjYXNlX2FkZF91bmNoZWNrZWRfZml4dHVyZSAoVENhc2UgKnRjLCBTRnVuIHNldHVwLCBTRnVuIHRlYXJkb3duKTsKKworLyogQWRkIGZpeHR1cmUgc2V0dXAvdGVhcmRvd24gZnVuY3Rpb25zIHRvIGEgdGVzdCBjYXNlCisKKyAgIENoZWNrZWQgZml4dHVyZSBmdW5jdGlvbnMgYXJlIHJ1biBiZWZvcmUgYW5kIGFmdGVyIHVuaXQKKyAgIHRlc3RzLiBVbmxpa2UgdW5jaGVja2VkIGZpeHR1cmUgZnVuY3Rpb25zLCBjaGVja2VkIGZpeHR1cmUKKyAgIGZ1bmN0aW9ucyBhcmUgcnVuIGluIHRoZSBzYW1lIHNlcGFyYXRlIGFkZHJlc3Mgc3BhY2UgYXMgdGhlIHRlc3QKKyAgIHByb2dyYW0sIGFuZCB0aHVzIHRoZSB0ZXN0IGZ1bmN0aW9uIHdpbGwgc3Vydml2ZSBzaWduYWxzIG9yCisgICB1bmV4cGVjdGVkIGV4aXRzIGluIHRoZSBmaXh0dXJlIGZ1bmN0aW9uLiBBbHNvLCBJRiB0aGUgc2V0dXAKKyAgIGZ1bmN0aW9uIGlzIGlkZW1wb3RlbnQsIHVuaXQgdGVzdCBiZWhhdmlvciB3aWxsIGJlIHRoZSBzYW1lIGluCisgICBDS19GT1JLIGFuZCBDS19OT0ZPUksgbW9kZXMuCisKKyAgIEhvd2V2ZXIsIHNpbmNlIGZpeHR1cmUgZnVuY3Rpb25zIGFyZSBydW4gYmVmb3JlIGFuZCBhZnRlciBlYWNoIHVuaXQKKyAgIHRlc3QsIHRoZXkgc2hvdWxkIG5vdCBiZSBleHBlbnNpdmUgY29kZS4KKworKi8gCit2b2lkIENLX0VYUE9SVCB0Y2FzZV9hZGRfY2hlY2tlZF9maXh0dXJlIChUQ2FzZSAqdGMsIFNGdW4gc2V0dXAsIFNGdW4gdGVhcmRvd24pOworCisvKiBTZXQgdGhlIHRpbWVvdXQgZm9yIGFsbCB0ZXN0cyBpbiBhIHRlc3QgY2FzZS4gQSB0ZXN0IHRoYXQgbGFzdHMgbG9uZ2VyCisgICB0aGFuIHRoZSB0aW1lb3V0IChpbiBzZWNvbmRzKSB3aWxsIGJlIGtpbGxlZCBhbmQgdGh1cyBmYWlsIHdpdGggYW4gZXJyb3IuCisgICBUaGUgdGltZW91dCBjYW4gYWxzbyBiZSBzZXQgZ2xvYmFseSB3aXRoIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgQ0tfREVGQVVMVF9USU1FT1VULCB0aGUgc3BlY2lmaWMgc2V0dGluZyBhbHdheXMgdGFrZXMgcHJlY2VkZW5jZS4KKyovCit2b2lkIENLX0VYUE9SVCB0Y2FzZV9zZXRfdGltZW91dCAoVENhc2UgKnRjLCBpbnQgdGltZW91dCk7CisgCisvKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBtYXJrIHRoZSBzdGFydCBvZiBhIHRlc3QgZnVuY3Rpb24gKi8KK3ZvaWQgQ0tfRVhQT1JUIHRjYXNlX2ZuX3N0YXJ0IChjb25zdCBjaGFyICpmbmFtZSwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpOworCisvKiBTdGFydCBhIHVuaXQgdGVzdCB3aXRoIFNUQVJUX1RFU1QodW5pdF9uYW1lKSwgZW5kIHdpdGggRU5EX1RFU1QKKyAgIE9uZSBtdXN0IHVzZSBicmFjZXMgd2l0aGluIGEgU1RBUlRfL0VORF8gcGFpciB0byBkZWNsYXJlIG5ldyB2YXJpYWJsZXMKKyovIAorI2RlZmluZSBTVEFSVF9URVNUKF9fdGVzdG5hbWUpXAorc3RhdGljIHZvaWQgX190ZXN0bmFtZSAoaW50IF9pIENLX0FUVFJJQlVURV9VTlVTRUQpXAore1wKKyAgdGNhc2VfZm5fc3RhcnQgKCIiIyBfX3Rlc3RuYW1lLCBfX0ZJTEVfXywgX19MSU5FX18pOworCisvKiBFbmQgYSB1bml0IHRlc3QgKi8KKyNkZWZpbmUgRU5EX1RFU1QgfQorCisvKiBGYWlsIHRoZSB0ZXN0IGNhc2UgdW5sZXNzIGV4cHIgaXMgdHJ1ZSAqLworLyogVGhlIHNwYWNlIGJlZm9yZSB0aGUgY29tbWEgc2lnbiBiZWZvcmUgIyMgaXMgZXNzZW50aWFsIHRvIGJlIGNvbXBhdGlibGUKKyAgIHdpdGggZ2NjIDIuOTUuMyBhbmQgZWFybGllci4KKyovCisjZGVmaW5lIGZhaWxfdW5sZXNzKGV4cHIsIC4uLilcCisgICAgICAgIF9mYWlsX3VubGVzcyhleHByLCBfX0ZJTEVfXywgX19MSU5FX18sXAorICAgICAgICAiQXNzZXJ0aW9uICciI2V4cHIiJyBmYWlsZWQiICwgIyMgX19WQV9BUkdTX18sIE5VTEwpCisKKy8qIEZhaWwgdGhlIHRlc3QgY2FzZSBpZiBleHByIGlzIHRydWUgKi8KKy8qIFRoZSBzcGFjZSBiZWZvcmUgdGhlIGNvbW1hIHNpZ24gYmVmb3JlICMjIGlzIGVzc2VudGlhbCB0byBiZSBjb21wYXRpYmxlCisgICB3aXRoIGdjYyAyLjk1LjMgYW5kIGVhcmxpZXIuCisqLworCisvKiBGSVhNRTogdGhlc2UgbWFjcm9zIG1heSBjb25mbGljdCB3aXRoIEM4OSBpZiBleHByIGlzIAorICAgRklYTUU6ICAgc3RyY21wIChzdHIxLCBzdHIyKSBkdWUgdG8gZXhjZXNzaXZlIHN0cmluZyBsZW5ndGguICovCisjZGVmaW5lIGZhaWxfaWYoZXhwciwgLi4uKVwKKyAgICAgICAgX2ZhaWxfdW5sZXNzKCEoZXhwciksIF9fRklMRV9fLCBfX0xJTkVfXyxcCisgICAgICAgICJGYWlsdXJlICciI2V4cHIiJyBvY2N1cmVkIiAsICMjIF9fVkFfQVJHU19fLCBOVUxMKQorCisvKiBBbHdheXMgZmFpbCAqLworI2RlZmluZSBmYWlsKC4uLikgX2ZhaWxfdW5sZXNzKDAsIF9fRklMRV9fLCBfX0xJTkVfXywgIkZhaWxlZCIgLCAjIyBfX1ZBX0FSR1NfXywgTlVMTCkKKworLyogTm9uIG1hY3JvIHZlcnNpb24gb2YgI2ZhaWxfdW5sZXNzLCB3aXRoIG1vcmUgY29tcGxpY2F0ZWQgaW50ZXJmYWNlICovCit2b2lkIENLX0VYUE9SVCBfZmFpbF91bmxlc3MgKGludCByZXN1bHQsIGNvbnN0IGNoYXIgKmZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lLCBjb25zdCBjaGFyICpleHByLCAuLi4pOworCisvKiBOZXcgY2hlY2sgZmFpbCBBUEkuICovCisjZGVmaW5lIGNrX2Fib3J0KCkgY2tfYWJvcnRfbXNnKE5VTEwpCisjZGVmaW5lIGNrX2Fib3J0X21zZyBmYWlsCisjZGVmaW5lIGNrX2Fzc2VydChDKSBja19hc3NlcnRfbXNnKEMsIE5VTEwpCisjZGVmaW5lIGNrX2Fzc2VydF9tc2cgZmFpbF91bmxlc3MKKworLyogSW50ZWdlciBjb21wYXJzaW9uIG1hY3JvcyB3aXRoIGltcHJvdmVkIG91dHB1dCBjb21wYXJlZCB0byBmYWlsX3VubGVzcygpLiAqLworLyogTyBtYXkgYmUgYW55IGNvbXBhcmlvbiBvcGVyYXRvci4gKi8KKyNkZWZpbmUgX2NrX2Fzc2VydF9pbnQoWCwgTywgWSkgY2tfYXNzZXJ0X21zZygoWCkgTyAoWSksICJBc3NlcnRpb24gJyIjWCNPI1kiJyBmYWlsZWQ6ICIjWCI9PSVkLCAiI1kiPT0lZCIsIFgsIFkpIAorI2RlZmluZSBja19hc3NlcnRfaW50X2VxKFgsIFkpIF9ja19hc3NlcnRfaW50KFgsID09LCBZKSAKKyNkZWZpbmUgY2tfYXNzZXJ0X2ludF9uZShYLCBZKSBfY2tfYXNzZXJ0X2ludChYLCAhPSwgWSkgCisKKy8qIFN0cmluZyBjb21wYXJzaW9uIG1hY3JvcyB3aXRoIGltcHJvdmVkIG91dHB1dCBjb21wYXJlZCB0byBmYWlsX3VubGVzcygpICovCisjZGVmaW5lIF9ja19hc3NlcnRfc3RyKEMsIFgsIE8sIFkpIGNrX2Fzc2VydF9tc2coQywgIkFzc2VydGlvbiAnIiNYI08jWSInIGZhaWxlZDogIiNYIj09XCIlc1wiLCAiI1kiPT1cIiVzXCIiLCBYLCBZKSAKKyNkZWZpbmUgY2tfYXNzZXJ0X3N0cl9lcShYLCBZKSBfY2tfYXNzZXJ0X3N0cighc3RyY21wKFgsIFkpLCBYLCA9PSwgWSkKKyNkZWZpbmUgY2tfYXNzZXJ0X3N0cl9uZShYLCBZKSBfY2tfYXNzZXJ0X3N0cihzdHJjbXAoWCwgWSksIFgsICE9LCBZKQorCisKKy8qIE1hcmsgdGhlIGxhc3QgcG9pbnQgcmVhY2hlZCBpbiBhIHVuaXQgdGVzdAorICAgKHVzZWZ1bCBmb3IgdHJhY2tpbmcgZG93biB3aGVyZSBhIHNlZ2ZhdWx0LCBldGMuIG9jY3VycykKKyovCisjZGVmaW5lIG1hcmtfcG9pbnQoKSBfbWFya19wb2ludChfX0ZJTEVfXyxfX0xJTkVfXykKKworLyogTm9uIG1hY3JvIHZlcnNpb24gb2YgI21hcmtfcG9pbnQgKi8KK3ZvaWQgQ0tfRVhQT1JUIF9tYXJrX3BvaW50IChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSk7CisKKy8qIFJlc3VsdCBvZiBhIHRlc3QgKi8KK2VudW0gdGVzdF9yZXN1bHQgeworICBDS19URVNUX1JFU1VMVF9JTlZBTElELCAvKiBEZWZhdWx0IHZhbHVlOyBzaG91bGQgbm90IGVuY291bnRlciB0aGlzICovCisgIENLX1BBU1MsIC8qIFRlc3QgcGFzc2VkKi8KKyAgQ0tfRkFJTFVSRSwgLyogVGVzdCBjb21wbGV0ZWQgYnV0IGZhaWxlZCAqLworICBDS19FUlJPUiAvKiBUZXN0IGZhaWxlZCB0byBjb21wbGV0ZQorCSAgICAgICh1bmV4cGVjdGVkIHNpZ25hbCBvciBub24temVybyBlYXJseSBleGl0KSAqLyAKK307CisKKy8qIFNwZWNpZmllcyB0aGUgaG93IG11Y2ggb3V0cHV0IGFuIFNSdW5uZXIgc2hvdWxkIHByb2R1Y2UgKi8KK2VudW0gcHJpbnRfb3V0cHV0IHsKKyAgQ0tfU0lMRU5ULCAvKiBObyBvdXRwdXQgKi8KKyAgQ0tfTUlOSU1BTCwgLyogT25seSBzdW1tYXJ5IG91dHB1dCAqLworICBDS19OT1JNQUwsIC8qIEFsbCBmYWlsZWQgdGVzdHMgKi8KKyAgQ0tfVkVSQk9TRSwgLyogQWxsIHRlc3RzICovCisgIENLX0VOViwgLyogTG9vayBhdCBlbnZpcm9ubWVudCB2YXIgKi8KKyNpZiBARU5BQkxFX1NVQlVOSVRACisgIENLX1NVQlVOSVQsIC8qIFJ1biBhcyBhIHN1YnVuaXQgY2hpbGQgcHJvY2VzcyAqLworI2VuZGlmCisgIENLX0xBU1QKK307CisKKy8qIEhvbGRzIHN0YXRlIGZvciBhIHJ1bm5pbmcgb2YgYSB0ZXN0IHN1aXRlICovCit0eXBlZGVmIHN0cnVjdCBTUnVubmVyIFNSdW5uZXI7CisKKy8qIE9wYXF1ZSB0eXBlIGZvciBhIHRlc3QgZmFpbHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgVGVzdFJlc3VsdCBUZXN0UmVzdWx0OworCisvKiBhY2Nlc3NvcnMgZm9yIHRyIGZpZWxkcyAqLworZW51bSBja19yZXN1bHRfY3R4IHsKKyAgQ0tfQ1RYX0lOVkFMSUQsIC8qIERlZmF1bHQgdmFsdWU7IHNob3VsZCBub3QgZW5jb3VudGVyIHRoaXMgKi8KKyAgQ0tfQ1RYX1NFVFVQLAorICBDS19DVFhfVEVTVCwKKyAgQ0tfQ1RYX1RFQVJET1dOCit9OworCisvKiBUeXBlIG9mIHJlc3VsdCAqLworaW50IENLX0VYUE9SVCB0cl9ydHlwZSAoVGVzdFJlc3VsdCAqdHIpOworLyogQ29udGV4dCBpbiB3aGljaCB0aGUgcmVzdWx0IG9jY3VycmVkICovIAorZW51bSBja19yZXN1bHRfY3R4IENLX0VYUE9SVCB0cl9jdHggKFRlc3RSZXN1bHQgKnRyKTsgCisvKiBGYWlsdXJlIG1lc3NhZ2UgKi8KK2NvbnN0IGNoYXIgKiBDS19FWFBPUlQgdHJfbXNnIChUZXN0UmVzdWx0ICp0cik7CisvKiBMaW5lIG51bWJlciBhdCB3aGljaCBmYWlsdXJlIG9jY3VyZWQgKi8KK2ludCBDS19FWFBPUlQgdHJfbG5vIChUZXN0UmVzdWx0ICp0cik7CisvKiBGaWxlIG5hbWUgYXQgd2hpY2ggZmFpbHVyZSBvY2N1cmVkICovCitjb25zdCBjaGFyICogQ0tfRVhQT1JUIHRyX2xmaWxlIChUZXN0UmVzdWx0ICp0cik7CisvKiBUZXN0IGNhc2UgaW4gd2hpY2ggdW5pdCB0ZXN0IHdhcyBydW4gKi8KK2NvbnN0IGNoYXIgKiBDS19FWFBPUlQgdHJfdGNuYW1lIChUZXN0UmVzdWx0ICp0cik7CisKKy8qIENyZWF0ZXMgYW4gU1J1bm5lciBmb3IgdGhlIGdpdmVuIHN1aXRlICovCitTUnVubmVyICogQ0tfRVhQT1JUIHNydW5uZXJfY3JlYXRlIChTdWl0ZSAqcyk7CisKKy8qIEFkZHMgYSBTdWl0ZSB0byBhbiBTUnVubmVyICovCit2b2lkIENLX0VYUE9SVCBzcnVubmVyX2FkZF9zdWl0ZSAoU1J1bm5lciAqc3IsIFN1aXRlICpzKTsKKworLyogRnJlZXMgYW4gU1J1bm5lciwgYWxsIHN1aXRlcyBhZGRlZCB0byBpdCBhbmQgYWxsIGNvbnRhaW5lZCB0ZXN0IGNhc2VzICovCit2b2lkIENLX0VYUE9SVCBzcnVubmVyX2ZyZWUgKFNSdW5uZXIgKnNyKTsKKworIAorLyogVGVzdCBydW5uaW5nICovCisKKy8qIFJ1bnMgYW4gU1J1bm5lciwgcHJpbnRpbmcgcmVzdWx0cyBhcyBzcGVjaWZpZWQgKHNlZSBlbnVtIHByaW50X291dHB1dCkgKi8KK3ZvaWQgQ0tfRVhQT1JUIHNydW5uZXJfcnVuX2FsbCAoU1J1bm5lciAqc3IsIGVudW0gcHJpbnRfb3V0cHV0IHByaW50X21vZGUpOworCisgCisvKiBOZXh0IGZ1bmN0aW9ucyBhcmUgdmFsaWQgb25seSBhZnRlciB0aGUgc3VpdGUgaGFzIGJlZW4KKyAgIGNvbXBsZXRlbHkgcnVuLCBvZiBjb3Vyc2UgKi8KKworLyogTnVtYmVyIG9mIGZhaWxlZCB0ZXN0cyBpbiBhIHJ1biBzdWl0ZS4gSW5jbHVkZXMgZmFpbHVyZXMgKyBlcnJvcnMgKi8KK2ludCBDS19FWFBPUlQgc3J1bm5lcl9udGVzdHNfZmFpbGVkIChTUnVubmVyICpzcik7CisKKy8qIFRvdGFsIG51bWJlciBvZiB0ZXN0cyBydW4gaW4gYSBydW4gc3VpdGUgKi8KK2ludCBDS19FWFBPUlQgc3J1bm5lcl9udGVzdHNfcnVuIChTUnVubmVyICpzcik7CisKKy8qIFJldHVybiBhbiBhcnJheSBvZiByZXN1bHRzIGZvciBhbGwgZmFpbHVyZXMKKyAgCisgICBOdW1iZXIgb2YgZmFpbHVyZXMgaXMgZXF1YWwgdG8gc3J1bm5lcl9uZmFpbGVkX3Rlc3RzLiAgTWVtb3J5IGZvcgorICAgdGhlIGFycmF5IGlzIG1hbGxvYydlZCBhbmQgbXVzdCBiZSBmcmVlZCwgYnV0IGluZGl2aWR1YWwgVGVzdFJlc3VsdHMKKyAgIG11c3Qgbm90CisqLworVGVzdFJlc3VsdCAqKiBDS19FWFBPUlQgc3J1bm5lcl9mYWlsdXJlcyAoU1J1bm5lciAqc3IpOworCisvKiBSZXR1cm4gYW4gYXJyYXkgb2YgcmVzdWx0cyBmb3IgYWxsIHJ1biB0ZXN0cworCisgICBOdW1iZXIgb2YgcmVzdWx0cyBpcyBlcXVhbCB0byBzcnVubmVyX250ZXN0c19ydW4sIGFuZCBleGNsdWRlcworICAgZmFpbHVyZXMgZHVlIHRvIHNldHVwIGZ1bmN0aW9uIGZhaWx1cmUuCisKKyAgIE1lbW9yeSBpcyBtYWxsb2MnZWQgYW5kIG11c3QgYmUgZnJlZWQsIGJ1dCBpbmRpdmlkdWFsIFRlc3RSZXN1bHRzCisgICBtdXN0IG5vdAorKi8gIAorVGVzdFJlc3VsdCAqKiBDS19FWFBPUlQgc3J1bm5lcl9yZXN1bHRzIChTUnVubmVyICpzcik7CisKKyAKKy8qIFByaW50aW5nICovCisKKy8qIFByaW50IHRoZSByZXN1bHRzIGNvbnRhaW5lZCBpbiBhbiBTUnVubmVyICovCit2b2lkIENLX0VYUE9SVCBzcnVubmVyX3ByaW50IChTUnVubmVyICpzciwgZW51bSBwcmludF9vdXRwdXQgcHJpbnRfbW9kZSk7CisgIAorICAKKy8qIFNldCBhIGxvZyBmaWxlIHRvIHdoaWNoIHRvIHdyaXRlIGR1cmluZyB0ZXN0IHJ1bm5pbmcuCisKKyAgTG9nIGZpbGUgc2V0dGluZyBpcyBhbiBpbml0aWFsaXplIG9ubHkgb3BlcmF0aW9uIC0tIGl0IHNob3VsZCBiZQorICBkb25lIGltbWVkaWF0bHkgYWZ0ZXIgU1J1bm5lciBjcmVhdGlvbiwgYW5kIHRoZSBsb2cgZmlsZSBjYW4ndCBiZQorICBjaGFuZ2VkIGFmdGVyIGJlaW5nIHNldC4KKyovCit2b2lkIENLX0VYUE9SVCBzcnVubmVyX3NldF9sb2cgKFNSdW5uZXIgKnNyLCBjb25zdCBjaGFyICpmbmFtZSk7CisKKy8qIERvZXMgdGhlIFNSdW5uZXIgaGF2ZSBhIGxvZyBmaWxlPyAqLworaW50IENLX0VYUE9SVCBzcnVubmVyX2hhc19sb2cgKFNSdW5uZXIgKnNyKTsKKworLyogUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBsb2cgZmlsZSwgb3IgTlVMTCBpZiBub25lICovCitjb25zdCBjaGFyICogQ0tfRVhQT1JUIHNydW5uZXJfbG9nX2ZuYW1lIChTUnVubmVyICpzcik7CisKKy8qIFNldCBhIHhtbCBmaWxlIHRvIHdoaWNoIHRvIHdyaXRlIGR1cmluZyB0ZXN0IHJ1bm5pbmcuCisKKyAgWE1MIGZpbGUgc2V0dGluZyBpcyBhbiBpbml0aWFsaXplIG9ubHkgb3BlcmF0aW9uIC0tIGl0IHNob3VsZCBiZQorICBkb25lIGltbWVkaWF0bHkgYWZ0ZXIgU1J1bm5lciBjcmVhdGlvbiwgYW5kIHRoZSBYTUwgZmlsZSBjYW4ndCBiZQorICBjaGFuZ2VkIGFmdGVyIGJlaW5nIHNldC4KKyovCit2b2lkIENLX0VYUE9SVCBzcnVubmVyX3NldF94bWwgKFNSdW5uZXIgKnNyLCBjb25zdCBjaGFyICpmbmFtZSk7CisKKy8qIERvZXMgdGhlIFNSdW5uZXIgaGF2ZSBhbiBYTUwgbG9nIGZpbGU/ICovCitpbnQgQ0tfRVhQT1JUIHNydW5uZXJfaGFzX3htbCAoU1J1bm5lciAqc3IpOworCisvKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIFhNTCBmaWxlLCBvciBOVUxMIGlmIG5vbmUgKi8KK2NvbnN0IGNoYXIgKiBDS19FWFBPUlQgc3J1bm5lcl94bWxfZm5hbWUgKFNSdW5uZXIgKnNyKTsKKworCisvKiBDb250cm9sIGZvcmtpbmcgKi8KK2VudW0gZm9ya19zdGF0dXMgeworICBDS19GT1JLX0dFVEVOViwgLyogbG9vayBpbiB0aGUgZW52aXJvbm1lbnQgZm9yIENLX0ZPUksgKi8KKyAgQ0tfRk9SSywgICAgICAgIC8qIGNhbGwgZm9yayB0byBydW4gdGVzdHMgKi8KKyAgQ0tfTk9GT1JLICAgICAgIC8qIGRvbid0IGNhbGwgZm9yayAqLworfTsKKyAKKy8qIEdldCB0aGUgY3VycmVudCBmb3JrIHN0YXR1cyAqLworZW51bSBmb3JrX3N0YXR1cyBDS19FWFBPUlQgc3J1bm5lcl9mb3JrX3N0YXR1cyAoU1J1bm5lciAqc3IpOworCisvKiBTZXQgdGhlIGN1cnJlbnQgZm9yayBzdGF0dXMgKi8KK3ZvaWQgQ0tfRVhQT1JUIHNydW5uZXJfc2V0X2Zvcmtfc3RhdHVzIChTUnVubmVyICpzciwgZW51bSBmb3JrX3N0YXR1cyBmc3RhdCk7IAorICAKKy8qIEZvcmsgaW4gYSB0ZXN0IGFuZCBtYWtlIHN1cmUgbWVzc2FnaW5nIGFuZCB0ZXN0cyB3b3JrLiAqLworcGlkX3QgQ0tfRVhQT1JUIGNoZWNrX2Zvcmsodm9pZCk7CisKKy8qIFdhaXQgZm9yIHRoZSBwaWQgYW5kIGV4aXQuIElmIHBpZCBpcyB6ZXJvLCBqdXN0IGV4aXQuICovCit2b2lkIENLX0VYUE9SVCBjaGVja193YWl0cGlkX2FuZF9leGl0KHBpZF90IHBpZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cyAKK0NLX0NQUEVORAorI2VuZGlmCisKKyNlbmRpZiAvKiBDSEVDS19IICovCmRpZmYgLS1naXQgYS9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19lcnJvci5jIGIvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfZXJyb3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWFkZDZkCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfZXJyb3IuYwpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ2hlY2s6IGEgdW5pdCB0ZXN0IGZyYW1ld29yayBmb3IgQworICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEFyaWVuIE1hbGVjCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJjaGVja19lcnJvci5oIgorCisKKy8qIEZJWE1FOiBpbmNsdWRpbmcgYSBjb2xvbiBhdCB0aGUgZW5kIGlzIGEgYmFkIHdheSB0byBpbmRpY2F0ZSBhbiBlcnJvciAqLwordm9pZAorZXByaW50ZiAoY29uc3QgY2hhciAqZm10LCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgLi4uKQoreworICB2YV9saXN0IGFyZ3M7CisgIGZmbHVzaCAoc3RkZXJyKTsKKworICBmcHJpbnRmIChzdGRlcnIsICIlczolZDogIiwgZmlsZSwgbGluZSk7CisgIHZhX3N0YXJ0IChhcmdzLCBsaW5lKTsKKyAgdmZwcmludGYgKHN0ZGVyciwgZm10LCBhcmdzKTsKKyAgdmFfZW5kIChhcmdzKTsKKworICAvKmluY2x1ZGUgc3lzdGVtIGVycm9yIGluZm9ybWF0aW9uIGlmIGZvcm1hdCBlbmRzIGluIGNvbG9uICovCisgIGlmIChmbXRbMF0gIT0gJ1wwJyAmJiBmbXRbc3RybGVuIChmbXQpIC0gMV0gPT0gJzonKQorICAgIGZwcmludGYgKHN0ZGVyciwgIiAlcyIsIHN0cmVycm9yIChlcnJubykpOworICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOworCisgIGV4aXQgKDIpOworfQorCit2b2lkICoKK2VtYWxsb2MgKHNpemVfdCBuKQoreworICB2b2lkICpwOworICBwID0gbWFsbG9jIChuKTsKKyAgaWYgKHAgPT0gTlVMTCkKKyAgICBlcHJpbnRmICgibWFsbG9jIG9mICV1IGJ5dGVzIGZhaWxlZDoiLCBfX0ZJTEVfXywgX19MSU5FX18gLSAyLCBuKTsKKyAgcmV0dXJuIHA7Cit9CisKK3ZvaWQgKgorZXJlYWxsb2MgKHZvaWQgKnB0ciwgc2l6ZV90IG4pCit7CisgIHZvaWQgKnA7CisgIHAgPSByZWFsbG9jIChwdHIsIG4pOworICBpZiAocCA9PSBOVUxMKQorICAgIGVwcmludGYgKCJyZWFsbG9jIG9mICV1IGJ5dGVzIGZhaWxlZDoiLCBfX0ZJTEVfXywgX19MSU5FX18gLSAyLCBuKTsKKyAgcmV0dXJuIHA7Cit9CmRpZmYgLS1naXQgYS9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19lcnJvci5oIGIvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfZXJyb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTFlMjExCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfZXJyb3IuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ2hlY2s6IGEgdW5pdCB0ZXN0IGZyYW1ld29yayBmb3IgQworICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEFyaWVuIE1hbGVjCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIEVSUk9SX0gKKyNkZWZpbmUgRVJST1JfSAorCisvKiBJbmNsdWRlIHN0ZGxpYi5oIGJlZm9yZWhhbmQgKi8KKworLyogUHJpbnQgZXJyb3IgbWVzc2FnZSBhbmQgZGllCisgICBJZiBmbXQgZW5kcyBpbiBjb2xvbiwgaW5jbHVkZSBzeXN0ZW0gZXJyb3IgaW5mb3JtYXRpb24gKi8KK3ZvaWQgZXByaW50ZiAoY29uc3QgY2hhciAqZm10LCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwuLi4pOworLyogbWFsbG9jIG9yIGRpZSAqLwordm9pZCAqZW1hbGxvYyhzaXplX3Qgbik7Cit2b2lkICplcmVhbGxvYyh2b2lkICosIHNpemVfdCBuKTsKKworI2VuZGlmIC8qRVJST1JfSCovCmRpZmYgLS1naXQgYS9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19pbXBsLmggYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19pbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA3OTUwYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2ltcGwuaApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENoZWNrOiBhIHVuaXQgdGVzdCBmcmFtZXdvcmsgZm9yIEMKKyAqIENvcHlyaWdodCAoQykgMjAwMSwyMDAyIEFyaWVuIE1hbGVjCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIENIRUNLX0lNUExfSAorI2RlZmluZSBDSEVDS19JTVBMX0gKKworCisvKiBUaGlzIGhlYWRlciBzaG91bGQgYmUgaW5jbHVkZWQgYnkgYW55IG1vZHVsZSB0aGF0IG5lZWRzCisgICB0byBrbm93IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIHRoZSBjaGVjayBzdHJ1Y3R1cmVzCisgICBJbmNsdWRlIHN0ZGlvLmggJiBsaXN0LmggYmVmb3JlIHRoaXMgaGVhZGVyCisqLworCit0eXBlZGVmIHN0cnVjdCBURiB7CisgIFRGdW4gZm47CisgIGludCBsb29wX3N0YXJ0OworICBpbnQgbG9vcF9lbmQ7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIGludCBzaWduYWw7CisgIHVuc2lnbmVkIGNoYXIgYWxsb3dlZF9leGl0X3ZhbHVlOworfSBURjsKKworc3RydWN0IFN1aXRlIHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgTGlzdCAqdGNsc3Q7IC8qIExpc3Qgb2YgdGVzdCBjYXNlcyAqLworfTsKKwordHlwZWRlZiBzdHJ1Y3QgRml4dHVyZSAKK3sKKyAgaW50IGlzY2hlY2tlZDsKKyAgU0Z1biBmdW47Cit9IEZpeHR1cmU7CisKK3N0cnVjdCBUQ2FzZSB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIGludCB0aW1lb3V0OworICBMaXN0ICp0ZmxzdDsgLyogbGlzdCBvZiB0ZXN0IGZ1bmN0aW9ucyAqLworICBMaXN0ICp1bmNoX3NmbHN0OworICBMaXN0ICp1bmNoX3RmbHN0OworICBMaXN0ICpjaF9zZmxzdDsKKyAgTGlzdCAqY2hfdGZsc3Q7Cit9OworCit0eXBlZGVmIHN0cnVjdCBUZXN0U3RhdHMgeworICBpbnQgbl9jaGVja2VkOworICBpbnQgbl9mYWlsZWQ7CisgIGludCBuX2Vycm9yczsKK30gVGVzdFN0YXRzOworCitzdHJ1Y3QgVGVzdFJlc3VsdCB7CisgIGVudW0gdGVzdF9yZXN1bHQgcnR5cGU7ICAgICAvKiBUeXBlIG9mIHJlc3VsdCAqLworICBlbnVtIGNrX3Jlc3VsdF9jdHggY3R4OyAgICAgLyogV2hlbiB0aGUgcmVzdWx0IG9jY3VycmVkICovCisgIGNoYXIgKmZpbGU7ICAgIC8qIEZpbGUgd2hlcmUgdGhlIHRlc3Qgb2NjdXJlZCAqLworICBpbnQgbGluZTsgICAgICAvKiBMaW5lIG51bWJlciB3aGVyZSB0aGUgdGVzdCBvY2N1cnJlZCAqLworICBpbnQgaXRlcjsgICAgICAvKiBUaGUgaXRlcmF0aW9uIHZhbHVlIGZvciBsb29waW5nIHRlc3RzICovCisgIGNvbnN0IGNoYXIgKnRjbmFtZTsgIC8qIFRlc3QgY2FzZSB0aGF0IGdlbmVyYXRlZCB0aGUgcmVzdWx0ICovCisgIGNvbnN0IGNoYXIgKnRuYW1lOyAgLyogVGVzdCB0aGF0IGdlbmVyYXRlZCB0aGUgcmVzdWx0ICovCisgIGNoYXIgKm1zZzsgICAgIC8qIEZhaWx1cmUgbWVzc2FnZSAqLworfTsKKworVGVzdFJlc3VsdCAqdHJfY3JlYXRlKHZvaWQpOwordm9pZCB0cl9yZXNldChUZXN0UmVzdWx0ICp0cik7CisKK2VudW0gY2xfZXZlbnQgeworICBDTElOSVRMT0dfU1IsCisgIENMRU5ETE9HX1NSLAorICBDTFNUQVJUX1NSLAorICBDTFNUQVJUX1MsCisgIENMRU5EX1NSLAorICBDTEVORF9TLAorICBDTFNUQVJUX1QsIC8qIEEgdGVzdCBjYXNlIGlzIGFib3V0IHRvIHJ1biAqLworICBDTEVORF9UCit9OworCit0eXBlZGVmIHZvaWQgKCpMRnVuKSAoU1J1bm5lciAqLCBGSUxFKiwgZW51bSBwcmludF9vdXRwdXQsCisJCSAgICAgIHZvaWQgKiwgZW51bSBjbF9ldmVudCk7CisKK3R5cGVkZWYgc3RydWN0IExvZyB7CisgIEZJTEUgKmxmaWxlOworICBMRnVuIGxmdW47CisgIGludCBjbG9zZTsKKyAgZW51bSBwcmludF9vdXRwdXQgbW9kZTsKK30gTG9nOworCitzdHJ1Y3QgU1J1bm5lciB7CisgIExpc3QgKnNsc3Q7IC8qIExpc3Qgb2YgU3VpdGUgb2JqZWN0cyAqLworICBUZXN0U3RhdHMgKnN0YXRzOyAvKiBSdW4gc3RhdGlzdGljcyAqLworICBMaXN0ICpyZXN1bHRsc3Q7IC8qIExpc3Qgb2YgdW5pdCB0ZXN0IHJlc3VsdHMgKi8KKyAgY29uc3QgY2hhciAqbG9nX2ZuYW1lOyAvKiBuYW1lIG9mIGxvZyBmaWxlICovCisgIGNvbnN0IGNoYXIgKnhtbF9mbmFtZTsgLyogbmFtZSBvZiB4bWwgb3V0cHV0IGZpbGUgKi8KKyAgTGlzdCAqbG9nbHN0OyAvKiBsaXN0IG9mIExvZyBvYmplY3RzICovCisgIGVudW0gZm9ya19zdGF0dXMgZnN0YXQ7IC8qIGNvbnRyb2xzIGlmIHN1aXRlcyBhcmUgZm9ya2VkIG9yIG5vdAorCQkJICAgICBOT1RFOiBEb24ndCB1c2UgdGhpcyB2YWx1ZSBkaXJlY3RseSwKKwkJCSAgICAgaW5zdGVhZCB1c2Ugc3J1bm5lcl9mb3JrX3N0YXR1cyAqLworfTsKKworCit2b2lkIHNldF9mb3JrX3N0YXR1cyhlbnVtIGZvcmtfc3RhdHVzIGZzdGF0KTsKK2VudW0gZm9ya19zdGF0dXMgY3VyX2Zvcmtfc3RhdHVzICh2b2lkKTsKKworI2VuZGlmIC8qIENIRUNLX0lNUExfSCAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfbGlzdC5jIGIvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfbGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3M2EyMjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19saXN0LmMKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBDaGVjazogYSB1bml0IHRlc3QgZnJhbWV3b3JrIGZvciBDCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgQXJpZW4gTWFsZWMKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiY2hlY2tfbGlzdC5oIgorI2luY2x1ZGUgImNoZWNrX2Vycm9yLmgiCisKKworZW51bQoreworICBMSU5JVCA9IDEsCisgIExHUk9XID0gMgorfTsKKworc3RydWN0IExpc3QKK3sKKyAgaW50IG5fZWx0czsKKyAgaW50IG1heF9lbHRzOworICBpbnQgY3VycmVudDsgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIHRoZSBjdXJyZW50IG5vZGUgKi8KKyAgaW50IGxhc3Q7ICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byB0aGUgbm9kZSBiZWZvcmUgRU5EICovCisgIGNvbnN0IHZvaWQgKipkYXRhOworfTsKKworc3RhdGljIHZvaWQKK21heWJlX2dyb3cgKExpc3QgKiBscCkKK3sKKyAgaWYgKGxwLT5uX2VsdHMgPj0gbHAtPm1heF9lbHRzKSB7CisgICAgbHAtPm1heF9lbHRzICo9IExHUk9XOworICAgIGxwLT5kYXRhID0gZXJlYWxsb2MgKGxwLT5kYXRhLCBscC0+bWF4X2VsdHMgKiBzaXplb2YgKGxwLT5kYXRhWzBdKSk7CisgIH0KK30KKworTGlzdCAqCitjaGVja19saXN0X2NyZWF0ZSAodm9pZCkKK3sKKyAgTGlzdCAqbHA7CisgIGxwID0gZW1hbGxvYyAoc2l6ZW9mIChMaXN0KSk7CisgIGxwLT5uX2VsdHMgPSAwOworICBscC0+bWF4X2VsdHMgPSBMSU5JVDsKKyAgbHAtPmRhdGEgPSBlbWFsbG9jIChzaXplb2YgKGxwLT5kYXRhWzBdKSAqIExJTklUKTsKKyAgbHAtPmN1cnJlbnQgPSBscC0+bGFzdCA9IC0xOworICByZXR1cm4gbHA7Cit9CisKK3ZvaWQKK2xpc3RfYWRkX2Zyb250IChMaXN0ICogbHAsIGNvbnN0IHZvaWQgKnZhbCkKK3sKKyAgaWYgKGxwID09IE5VTEwpCisgICAgcmV0dXJuOworICBtYXliZV9ncm93IChscCk7CisgIG1lbW1vdmUgKGxwLT5kYXRhICsgMSwgbHAtPmRhdGEsIGxwLT5uX2VsdHMgKiBzaXplb2YgbHAtPmRhdGFbMF0pOworICBscC0+bGFzdCsrOworICBscC0+bl9lbHRzKys7CisgIGxwLT5jdXJyZW50ID0gMDsKKyAgbHAtPmRhdGFbbHAtPmN1cnJlbnRdID0gdmFsOworfQorCit2b2lkCitsaXN0X2FkZF9lbmQgKExpc3QgKiBscCwgY29uc3Qgdm9pZCAqdmFsKQoreworICBpZiAobHAgPT0gTlVMTCkKKyAgICByZXR1cm47CisgIG1heWJlX2dyb3cgKGxwKTsKKyAgbHAtPmxhc3QrKzsKKyAgbHAtPm5fZWx0cysrOworICBscC0+Y3VycmVudCA9IGxwLT5sYXN0OworICBscC0+ZGF0YVtscC0+Y3VycmVudF0gPSB2YWw7Cit9CisKK2ludAorbGlzdF9hdF9lbmQgKExpc3QgKiBscCkKK3sKKyAgaWYgKGxwLT5jdXJyZW50ID09IC0xKQorICAgIHJldHVybiAxOworICBlbHNlCisgICAgcmV0dXJuIChscC0+Y3VycmVudCA+IGxwLT5sYXN0KTsKK30KKwordm9pZAorbGlzdF9mcm9udCAoTGlzdCAqIGxwKQoreworICBpZiAobHAtPmN1cnJlbnQgPT0gLTEpCisgICAgcmV0dXJuOworICBscC0+Y3VycmVudCA9IDA7Cit9CisKKwordm9pZAorbGlzdF9mcmVlIChMaXN0ICogbHApCit7CisgIGlmIChscCA9PSBOVUxMKQorICAgIHJldHVybjsKKworICBmcmVlIChscC0+ZGF0YSk7CisgIGZyZWUgKGxwKTsKK30KKwordm9pZCAqCitsaXN0X3ZhbCAoTGlzdCAqIGxwKQoreworICBpZiAobHAgPT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsKKyAgaWYgKGxwLT5jdXJyZW50ID09IC0xIHx8IGxwLT5jdXJyZW50ID4gbHAtPmxhc3QpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgcmV0dXJuICh2b2lkICopIGxwLT5kYXRhW2xwLT5jdXJyZW50XTsKK30KKwordm9pZAorbGlzdF9hZHZhbmNlIChMaXN0ICogbHApCit7CisgIGlmIChscCA9PSBOVUxMKQorICAgIHJldHVybjsKKyAgaWYgKGxpc3RfYXRfZW5kIChscCkpCisgICAgcmV0dXJuOworICBscC0+Y3VycmVudCsrOworfQorCisKK3ZvaWQKK2xpc3RfYXBwbHkgKExpc3QgKiBscCwgdm9pZCAoKmZwKSAodm9pZCAqKSkKK3sKKyAgaWYgKGxwID09IE5VTEwgfHwgZnAgPT0gTlVMTCkKKyAgICByZXR1cm47CisKKyAgZm9yIChsaXN0X2Zyb250IChscCk7ICFsaXN0X2F0X2VuZCAobHApOyBsaXN0X2FkdmFuY2UgKGxwKSkKKyAgICBmcCAobGlzdF92YWwgKGxwKSk7CisKK30KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2xpc3QuaCBiL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2xpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDBmNGY4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfbGlzdC5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDaGVjazogYSB1bml0IHRlc3QgZnJhbWV3b3JrIGZvciBDCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgQXJpZW4gTWFsZWMKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgQ0hFQ0tfTElTVF9ICisjZGVmaW5lIENIRUNLX0xJU1RfSAorCit0eXBlZGVmIHN0cnVjdCBMaXN0IExpc3Q7CisKKy8qIENyZWF0ZSBhbiBlbXB0eSBsaXN0ICovCitMaXN0ICogY2hlY2tfbGlzdF9jcmVhdGUgKHZvaWQpOworCisvKiBJcyBsaXN0IGF0IGVuZD8gKi8KK2ludCBsaXN0X2F0X2VuZCAoTGlzdCAqIGxwKTsKKworLyogUG9zaXRpb24gbGlzdCBhdCBmcm9udCAqLwordm9pZCBsaXN0X2Zyb250KExpc3QgKmxwKTsKKworLyogQWRkIGEgdmFsdWUgdG8gdGhlIGZyb250IG9mIHRoZSBsaXN0LAorICAgcG9zaXRpb25pbmcgbmV3bHkgYWRkZWQgdmFsdWUgYXMgY3VycmVudCB2YWx1ZS4KKyAgIE1vcmUgZXhwZW5zaXZlIHRoYW4gbGlzdF9hZGRfZW5kLCBhcyBpdCB1c2VzIG1lbW1vdmUuICovCit2b2lkIGxpc3RfYWRkX2Zyb250IChMaXN0ICpscCwgY29uc3Qgdm9pZCAqdmFsKTsKKworLyogQWRkIGEgdmFsdWUgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCwKKyAgIHBvc2l0aW9uaW5nIG5ld2x5IGFkZGVkIHZhbHVlIGFzIGN1cnJlbnQgdmFsdWUgKi8KK3ZvaWQgbGlzdF9hZGRfZW5kIChMaXN0ICpscCwgY29uc3Qgdm9pZCAqdmFsKTsKKworLyogR2l2ZSB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgbm9kZSAqLwordm9pZCAqbGlzdF92YWwgKExpc3QgKiBscCk7CisKKy8qIFBvc2l0aW9uIHRoZSBsaXN0IGF0IHRoZSBuZXh0IG5vZGUgKi8KK3ZvaWQgbGlzdF9hZHZhbmNlIChMaXN0ICogbHApOworCisvKiBGcmVlIGEgbGlzdCwgYnV0IGRvbid0IGZyZWUgdmFsdWVzICovCit2b2lkIGxpc3RfZnJlZSAoTGlzdCAqIGxwKTsKKwordm9pZCBsaXN0X2FwcGx5IChMaXN0ICpscCwgdm9pZCAoKmZwKSAodm9pZCAqKSk7CisKKworI2VuZGlmIC8qIENIRUNLX0xJU1RfSCAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfbG9nLmMgYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19sb2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTBlM2ViCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfbG9nLmMKQEAgLTAsMCArMSw0NDYgQEAKKy8qCisgKiBDaGVjazogYSB1bml0IHRlc3QgZnJhbWV3b3JrIGZvciBDCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgQXJpZW4gTWFsZWMKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxjaGVjay5oPgorI2lmIEhBVkVfU1VCVU5JVF9DSElMRF9ICisjaW5jbHVkZSA8c3VidW5pdC9jaGlsZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJjaGVja19lcnJvci5oIgorI2luY2x1ZGUgImNoZWNrX2xpc3QuaCIKKyNpbmNsdWRlICJjaGVja19pbXBsLmgiCisjaW5jbHVkZSAiY2hlY2tfbG9nLmgiCisjaW5jbHVkZSAiY2hlY2tfcHJpbnQuaCIKKyNpbmNsdWRlICJjaGVja19zdHIuaCIKKworLyogbG9jYWx0aW1lX3IgaXMgYXBwYXJlbnRseSBub3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MgKi8KKyNpZm5kZWYgSEFWRV9MT0NBTFRJTUVfUgorc3RhdGljIHN0cnVjdCB0bSAqCitsb2NhbHRpbWVfciAoY29uc3QgdGltZV90ICogY2xvY2ssIHN0cnVjdCB0bSAqcmVzdWx0KQoreworICBzdHJ1Y3QgdG0gKm5vdyA9IGxvY2FsdGltZSAoY2xvY2spOworICBpZiAobm93ID09IE5VTEwpIHsKKyAgICByZXR1cm4gTlVMTDsKKyAgfSBlbHNlIHsKKyAgICAqcmVzdWx0ID0gKm5vdzsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmIC8qIEhBVkVfREVDTF9MT0NBTFRJTUVfUiAqLworCitzdGF0aWMgdm9pZCBzcnVubmVyX3NlbmRfZXZ0IChTUnVubmVyICogc3IsIHZvaWQgKm9iaiwgZW51bSBjbF9ldmVudCBldnQpOworCit2b2lkCitzcnVubmVyX3NldF9sb2cgKFNSdW5uZXIgKiBzciwgY29uc3QgY2hhciAqZm5hbWUpCit7CisgIGlmIChzci0+bG9nX2ZuYW1lKQorICAgIHJldHVybjsKKyAgc3ItPmxvZ19mbmFtZSA9IGZuYW1lOworfQorCitpbnQKK3NydW5uZXJfaGFzX2xvZyAoU1J1bm5lciAqIHNyKQoreworICByZXR1cm4gc3ItPmxvZ19mbmFtZSAhPSBOVUxMOworfQorCitjb25zdCBjaGFyICoKK3NydW5uZXJfbG9nX2ZuYW1lIChTUnVubmVyICogc3IpCit7CisgIHJldHVybiBzci0+bG9nX2ZuYW1lOworfQorCisKK3ZvaWQKK3NydW5uZXJfc2V0X3htbCAoU1J1bm5lciAqIHNyLCBjb25zdCBjaGFyICpmbmFtZSkKK3sKKyAgaWYgKHNyLT54bWxfZm5hbWUpCisgICAgcmV0dXJuOworICBzci0+eG1sX2ZuYW1lID0gZm5hbWU7Cit9CisKK2ludAorc3J1bm5lcl9oYXNfeG1sIChTUnVubmVyICogc3IpCit7CisgIHJldHVybiBzci0+eG1sX2ZuYW1lICE9IE5VTEw7Cit9CisKK2NvbnN0IGNoYXIgKgorc3J1bm5lcl94bWxfZm5hbWUgKFNSdW5uZXIgKiBzcikKK3sKKyAgcmV0dXJuIHNyLT54bWxfZm5hbWU7Cit9CisKK3ZvaWQKK3NydW5uZXJfcmVnaXN0ZXJfbGZ1biAoU1J1bm5lciAqIHNyLCBGSUxFICogbGZpbGUsIGludCBjbG9zZSwKKyAgICBMRnVuIGxmdW4sIGVudW0gcHJpbnRfb3V0cHV0IHByaW50bW9kZSkKK3sKKyAgTG9nICpsID0gZW1hbGxvYyAoc2l6ZW9mIChMb2cpKTsKKworICBpZiAocHJpbnRtb2RlID09IENLX0VOVikgeworICAgIHByaW50bW9kZSA9IGdldF9lbnZfcHJpbnRtb2RlICgpOworICB9CisKKyAgbC0+bGZpbGUgPSBsZmlsZTsKKyAgbC0+bGZ1biA9IGxmdW47CisgIGwtPmNsb3NlID0gY2xvc2U7CisgIGwtPm1vZGUgPSBwcmludG1vZGU7CisgIGxpc3RfYWRkX2VuZCAoc3ItPmxvZ2xzdCwgbCk7CisgIHJldHVybjsKK30KKwordm9pZAorbG9nX3NydW5uZXJfc3RhcnQgKFNSdW5uZXIgKiBzcikKK3sKKyAgc3J1bm5lcl9zZW5kX2V2dCAoc3IsIE5VTEwsIENMU1RBUlRfU1IpOworfQorCit2b2lkCitsb2dfc3J1bm5lcl9lbmQgKFNSdW5uZXIgKiBzcikKK3sKKyAgc3J1bm5lcl9zZW5kX2V2dCAoc3IsIE5VTEwsIENMRU5EX1NSKTsKK30KKwordm9pZAorbG9nX3N1aXRlX3N0YXJ0IChTUnVubmVyICogc3IsIFN1aXRlICogcykKK3sKKyAgc3J1bm5lcl9zZW5kX2V2dCAoc3IsIHMsIENMU1RBUlRfUyk7Cit9CisKK3ZvaWQKK2xvZ19zdWl0ZV9lbmQgKFNSdW5uZXIgKiBzciwgU3VpdGUgKiBzKQoreworICBzcnVubmVyX3NlbmRfZXZ0IChzciwgcywgQ0xFTkRfUyk7Cit9CisKK3ZvaWQKK2xvZ190ZXN0X3N0YXJ0IChTUnVubmVyICogc3IsIFRDYXNlICogdGMsIFRGICogdGZ1bikKK3sKKyAgY2hhciBidWZmZXJbMTAwXTsKKyAgc25wcmludGYgKGJ1ZmZlciwgOTksICIlczolcyIsIHRjLT5uYW1lLCB0ZnVuLT5uYW1lKTsKKyAgc3J1bm5lcl9zZW5kX2V2dCAoc3IsIGJ1ZmZlciwgQ0xTVEFSVF9UKTsKK30KKwordm9pZAorbG9nX3Rlc3RfZW5kIChTUnVubmVyICogc3IsIFRlc3RSZXN1bHQgKiB0cikKK3sKKyAgc3J1bm5lcl9zZW5kX2V2dCAoc3IsIHRyLCBDTEVORF9UKTsKK30KKworc3RhdGljIHZvaWQKK3NydW5uZXJfc2VuZF9ldnQgKFNSdW5uZXIgKiBzciwgdm9pZCAqb2JqLCBlbnVtIGNsX2V2ZW50IGV2dCkKK3sKKyAgTGlzdCAqbDsKKyAgTG9nICpsZzsKKyAgbCA9IHNyLT5sb2dsc3Q7CisgIGZvciAobGlzdF9mcm9udCAobCk7ICFsaXN0X2F0X2VuZCAobCk7IGxpc3RfYWR2YW5jZSAobCkpIHsKKyAgICBsZyA9IGxpc3RfdmFsIChsKTsKKyAgICBmZmx1c2ggKGxnLT5sZmlsZSk7CisgICAgbGctPmxmdW4gKHNyLCBsZy0+bGZpbGUsIGxnLT5tb2RlLCBvYmosIGV2dCk7CisgICAgZmZsdXNoIChsZy0+bGZpbGUpOworICB9Cit9CisKK3ZvaWQKK3N0ZG91dF9sZnVuIChTUnVubmVyICogc3IsIEZJTEUgKiBmaWxlLCBlbnVtIHByaW50X291dHB1dCBwcmludG1vZGUsCisgICAgdm9pZCAqb2JqLCBlbnVtIGNsX2V2ZW50IGV2dCkKK3sKKyAgU3VpdGUgKnM7CisKKyAgaWYgKHByaW50bW9kZSA9PSBDS19FTlYpIHsKKyAgICBwcmludG1vZGUgPSBnZXRfZW52X3ByaW50bW9kZSAoKTsKKyAgfQorCisgIHN3aXRjaCAoZXZ0KSB7CisgICAgY2FzZSBDTElOSVRMT0dfU1I6CisgICAgICBicmVhazsKKyAgICBjYXNlIENMRU5ETE9HX1NSOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBDTFNUQVJUX1NSOgorICAgICAgaWYgKHByaW50bW9kZSA+IENLX1NJTEVOVCkgeworICAgICAgICBmcHJpbnRmIChmaWxlLCAiUnVubmluZyBzdWl0ZShzKToiKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xTVEFSVF9TOgorICAgICAgcyA9IG9iajsKKyAgICAgIGlmIChwcmludG1vZGUgPiBDS19TSUxFTlQpIHsKKyAgICAgICAgZnByaW50ZiAoZmlsZSwgIiAlc1xuIiwgcy0+bmFtZSk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIENMRU5EX1NSOgorICAgICAgaWYgKHByaW50bW9kZSA+IENLX1NJTEVOVCkgeworICAgICAgICAvKiB3ZSBkb24ndCB3YW50IGEgbmV3bGluZSBiZWZvcmUgcHJpbnRpbmcgaGVyZSwgbmV3bGluZXMgc2hvdWxkCisgICAgICAgICAgIGNvbWUgYWZ0ZXIgcHJpbnRpbmcgYSBzdHJpbmcsIG5vdCBiZWZvcmUuICBpdCdzIGJldHRlciB0byBhZGQKKyAgICAgICAgICAgdGhlIG5ld2xpbmUgYWJvdmUgaW4gQ0xTVEFSVF9TLgorICAgICAgICAgKi8KKyAgICAgICAgc3J1bm5lcl9mcHJpbnQgKGZpbGUsIHNyLCBwcmludG1vZGUpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBDTEVORF9TOgorICAgICAgcyA9IG9iajsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xTVEFSVF9UOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBDTEVORF9UOgorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGVwcmludGYgKCJCYWQgZXZlbnQgdHlwZSByZWNlaXZlZCBpbiBzdGRvdXRfbGZ1biIsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgIH0KKworCit9CisKK3ZvaWQKK2xmaWxlX2xmdW4gKFNSdW5uZXIgKiBzciwgRklMRSAqIGZpbGUsCisgICAgZW51bSBwcmludF9vdXRwdXQgcHJpbnRtb2RlIENLX0FUVFJJQlVURV9VTlVTRUQsIHZvaWQgKm9iaiwKKyAgICBlbnVtIGNsX2V2ZW50IGV2dCkKK3sKKyAgVGVzdFJlc3VsdCAqdHI7CisgIFN1aXRlICpzOworCisgIHN3aXRjaCAoZXZ0KSB7CisgICAgY2FzZSBDTElOSVRMT0dfU1I6CisgICAgICBicmVhazsKKyAgICBjYXNlIENMRU5ETE9HX1NSOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBDTFNUQVJUX1NSOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBDTFNUQVJUX1M6CisgICAgICBzID0gb2JqOworICAgICAgZnByaW50ZiAoZmlsZSwgIlJ1bm5pbmcgc3VpdGUgJXNcbiIsIHMtPm5hbWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDTEVORF9TUjoKKyAgICAgIGZwcmludGYgKGZpbGUsICJSZXN1bHRzIGZvciBhbGwgc3VpdGVzIHJ1bjpcbiIpOworICAgICAgc3J1bm5lcl9mcHJpbnQgKGZpbGUsIHNyLCBDS19NSU5JTUFMKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xFTkRfUzoKKyAgICAgIHMgPSBvYmo7CisgICAgICBicmVhazsKKyAgICBjYXNlIENMU1RBUlRfVDoKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xFTkRfVDoKKyAgICAgIHRyID0gb2JqOworICAgICAgdHJfZnByaW50IChmaWxlLCB0ciwgQ0tfVkVSQk9TRSk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgZXByaW50ZiAoIkJhZCBldmVudCB0eXBlIHJlY2VpdmVkIGluIGxmaWxlX2xmdW4iLCBfX0ZJTEVfXywgX19MSU5FX18pOworICB9CisKKworfQorCit2b2lkCit4bWxfbGZ1biAoU1J1bm5lciAqIHNyIENLX0FUVFJJQlVURV9VTlVTRUQsIEZJTEUgKiBmaWxlLAorICAgIGVudW0gcHJpbnRfb3V0cHV0IHByaW50bW9kZSBDS19BVFRSSUJVVEVfVU5VU0VELCB2b2lkICpvYmosCisgICAgZW51bSBjbF9ldmVudCBldnQpCit7CisgIFRlc3RSZXN1bHQgKnRyOworICBTdWl0ZSAqczsKKyAgc3RhdGljIHN0cnVjdCB0aW1ldmFsIGluaXR0diwgZW5kdHY7CisgIHN0YXRpYyBjaGFyIHRbc2l6ZW9mICJ5eXl5LW1tLWRkIGhoOm1tOnNzIl0gPSB7IDAgfTsKKworICBpZiAodFswXSA9PSAwKSB7CisgICAgc3RydWN0IHRtIG5vdzsKKyAgICBnZXR0aW1lb2ZkYXkgKCZpbml0dHYsIE5VTEwpOworICAgIGxvY2FsdGltZV9yICgmKGluaXR0di50dl9zZWMpLCAmbm93KTsKKyAgICBzdHJmdGltZSAodCwgc2l6ZW9mICgieXl5eS1tbS1kZCBoaDptbTpzcyIpLCAiJVktJW0tJWQgJUg6JU06JVMiLCAmbm93KTsKKyAgfQorCisgIHN3aXRjaCAoZXZ0KSB7CisgICAgY2FzZSBDTElOSVRMT0dfU1I6CisgICAgICBmcHJpbnRmIChmaWxlLCAiPD94bWwgdmVyc2lvbj1cIjEuMFwiPz5cbiIpOworICAgICAgZnByaW50ZiAoZmlsZSwKKyAgICAgICAgICAiPHRlc3RzdWl0ZXMgeG1sbnM9XCJodHRwOi8vY2hlY2suc291cmNlZm9yZ2UubmV0L25zXCI+XG4iKTsKKyAgICAgIGZwcmludGYgKGZpbGUsICIgIDxkYXRldGltZT4lczwvZGF0ZXRpbWU+XG4iLCB0KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xFTkRMT0dfU1I6CisgICAgICBnZXR0aW1lb2ZkYXkgKCZlbmR0diwgTlVMTCk7CisgICAgICBmcHJpbnRmIChmaWxlLCAiICA8ZHVyYXRpb24+JWY8L2R1cmF0aW9uPlxuIiwKKyAgICAgICAgICAoZW5kdHYudHZfc2VjICsgKGZsb2F0KSAoZW5kdHYudHZfdXNlYykgLyAxMDAwMDAwKSAtCisgICAgICAgICAgKGluaXR0di50dl9zZWMgKyAoZmxvYXQpIChpbml0dHYudHZfdXNlYyAvIDEwMDAwMDApKSk7CisgICAgICBmcHJpbnRmIChmaWxlLCAiPC90ZXN0c3VpdGVzPlxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlIENMU1RBUlRfU1I6CisgICAgICBicmVhazsKKyAgICBjYXNlIENMU1RBUlRfUzoKKyAgICAgIHMgPSBvYmo7CisgICAgICBmcHJpbnRmIChmaWxlLCAiICA8c3VpdGU+XG4iKTsKKyAgICAgIGZwcmludGYgKGZpbGUsICIgICAgPHRpdGxlPiVzPC90aXRsZT5cbiIsIHMtPm5hbWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDTEVORF9TUjoKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xFTkRfUzoKKyAgICAgIGZwcmludGYgKGZpbGUsICIgIDwvc3VpdGU+XG4iKTsKKyAgICAgIHMgPSBvYmo7CisgICAgICBicmVhazsKKyAgICBjYXNlIENMU1RBUlRfVDoKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xFTkRfVDoKKyAgICAgIHRyID0gb2JqOworICAgICAgdHJfeG1scHJpbnQgKGZpbGUsIHRyLCBDS19WRVJCT1NFKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBlcHJpbnRmICgiQmFkIGV2ZW50IHR5cGUgcmVjZWl2ZWQgaW4geG1sX2xmdW4iLCBfX0ZJTEVfXywgX19MSU5FX18pOworICB9CisKK30KKworI2lmIEVOQUJMRV9TVUJVTklUCit2b2lkCitzdWJ1bml0X2xmdW4gKFNSdW5uZXIgKiBzciwgRklMRSAqIGZpbGUsIGVudW0gcHJpbnRfb3V0cHV0IHByaW50bW9kZSwKKyAgICB2b2lkICpvYmosIGVudW0gY2xfZXZlbnQgZXZ0KQoreworICBUZXN0UmVzdWx0ICp0cjsKKyAgU3VpdGUgKnM7CisgIGNoYXIgY29uc3QgKm5hbWU7CisKKyAgLyogYXNzZXJ0KHByaW50bW9kZSA9PSBDS19TVUJVTklUKTsgKi8KKworICBzd2l0Y2ggKGV2dCkgeworICAgIGNhc2UgQ0xJTklUTE9HX1NSOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBDTEVORExPR19TUjoKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xTVEFSVF9TUjoKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xTVEFSVF9TOgorICAgICAgcyA9IG9iajsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xFTkRfU1I6CisgICAgICBpZiAocHJpbnRtb2RlID4gQ0tfU0lMRU5UKSB7CisgICAgICAgIGZwcmludGYgKGZpbGUsICJcbiIpOworICAgICAgICBzcnVubmVyX2ZwcmludCAoZmlsZSwgc3IsIHByaW50bW9kZSk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIENMRU5EX1M6CisgICAgICBzID0gb2JqOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDTFNUQVJUX1Q6CisgICAgICBuYW1lID0gb2JqOworICAgICAgc3VidW5pdF90ZXN0X3N0YXJ0IChuYW1lKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xFTkRfVDoKKyAgICAgIHRyID0gb2JqOworICAgICAgeworICAgICAgICBjaGFyICpuYW1lID0gY2tfc3RyZHVwX3ByaW50ZiAoIiVzOiVzIiwgdHItPnRjbmFtZSwgdHItPnRuYW1lKTsKKyAgICAgICAgY2hhciAqbXNnID0gdHJfc2hvcnRfc3RyICh0cik7CisgICAgICAgIHN3aXRjaCAodHItPnJ0eXBlKSB7CisgICAgICAgICAgY2FzZSBDS19QQVNTOgorICAgICAgICAgICAgc3VidW5pdF90ZXN0X3Bhc3MgKG5hbWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBDS19GQUlMVVJFOgorICAgICAgICAgICAgc3VidW5pdF90ZXN0X2ZhaWwgKG5hbWUsIG1zZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIENLX0VSUk9SOgorICAgICAgICAgICAgc3VidW5pdF90ZXN0X2Vycm9yIChuYW1lLCBtc2cpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGVwcmludGYgKCJCYWQgcmVzdWx0IHR5cGUgaW4gc3VidW5pdF9sZnVuIiwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgICAgICAgIGZyZWUgKG5hbWUpOworICAgICAgICAgICAgZnJlZSAobXNnKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGVwcmludGYgKCJCYWQgZXZlbnQgdHlwZSByZWNlaXZlZCBpbiBzdWJ1bml0X2xmdW4iLCBfX0ZJTEVfXywgX19MSU5FX18pOworICB9Cit9CisjZW5kaWYKKworRklMRSAqCitzcnVubmVyX29wZW5fbGZpbGUgKFNSdW5uZXIgKiBzcikKK3sKKyAgRklMRSAqZiA9IE5VTEw7CisgIGlmIChzcnVubmVyX2hhc19sb2cgKHNyKSkgeworICAgIGYgPSBmb3BlbiAoc3ItPmxvZ19mbmFtZSwgInciKTsKKyAgICBpZiAoZiA9PSBOVUxMKQorICAgICAgZXByaW50ZiAoIkVycm9yIGluIGNhbGwgdG8gZm9wZW4gd2hpbGUgb3BlbmluZyBsb2cgZmlsZSAlczoiLCBfX0ZJTEVfXywKKyAgICAgICAgICBfX0xJTkVfXyAtIDIsIHNyLT5sb2dfZm5hbWUpOworICB9CisgIHJldHVybiBmOworfQorCitGSUxFICoKK3NydW5uZXJfb3Blbl94bWxmaWxlIChTUnVubmVyICogc3IpCit7CisgIEZJTEUgKmYgPSBOVUxMOworICBpZiAoc3J1bm5lcl9oYXNfeG1sIChzcikpIHsKKyAgICBmID0gZm9wZW4gKHNyLT54bWxfZm5hbWUsICJ3Iik7CisgICAgaWYgKGYgPT0gTlVMTCkKKyAgICAgIGVwcmludGYgKCJFcnJvciBpbiBjYWxsIHRvIGZvcGVuIHdoaWxlIG9wZW5pbmcgeG1sIGZpbGUgJXM6IiwgX19GSUxFX18sCisgICAgICAgICAgX19MSU5FX18gLSAyLCBzci0+eG1sX2ZuYW1lKTsKKyAgfQorICByZXR1cm4gZjsKK30KKwordm9pZAorc3J1bm5lcl9pbml0X2xvZ2dpbmcgKFNSdW5uZXIgKiBzciwgZW51bSBwcmludF9vdXRwdXQgcHJpbnRfbW9kZSkKK3sKKyAgRklMRSAqZjsKKyAgc3ItPmxvZ2xzdCA9IGNoZWNrX2xpc3RfY3JlYXRlICgpOworI2lmIEVOQUJMRV9TVUJVTklUCisgIGlmIChwcmludF9tb2RlICE9IENLX1NVQlVOSVQpCisjZW5kaWYKKyAgICBzcnVubmVyX3JlZ2lzdGVyX2xmdW4gKHNyLCBzdGRvdXQsIDAsIHN0ZG91dF9sZnVuLCBwcmludF9tb2RlKTsKKyNpZiBFTkFCTEVfU1VCVU5JVAorICBlbHNlCisgICAgc3J1bm5lcl9yZWdpc3Rlcl9sZnVuIChzciwgc3Rkb3V0LCAwLCBzdWJ1bml0X2xmdW4sIHByaW50X21vZGUpOworI2VuZGlmCisgIGYgPSBzcnVubmVyX29wZW5fbGZpbGUgKHNyKTsKKyAgaWYgKGYpIHsKKyAgICBzcnVubmVyX3JlZ2lzdGVyX2xmdW4gKHNyLCBmLCAxLCBsZmlsZV9sZnVuLCBwcmludF9tb2RlKTsKKyAgfQorICBmID0gc3J1bm5lcl9vcGVuX3htbGZpbGUgKHNyKTsKKyAgaWYgKGYpIHsKKyAgICBzcnVubmVyX3JlZ2lzdGVyX2xmdW4gKHNyLCBmLCAyLCB4bWxfbGZ1biwgcHJpbnRfbW9kZSk7CisgIH0KKyAgc3J1bm5lcl9zZW5kX2V2dCAoc3IsIE5VTEwsIENMSU5JVExPR19TUik7Cit9CisKK3ZvaWQKK3NydW5uZXJfZW5kX2xvZ2dpbmcgKFNSdW5uZXIgKiBzcikKK3sKKyAgTGlzdCAqbDsKKyAgaW50IHJ2YWw7CisKKyAgc3J1bm5lcl9zZW5kX2V2dCAoc3IsIE5VTEwsIENMRU5ETE9HX1NSKTsKKworICBsID0gc3ItPmxvZ2xzdDsKKyAgZm9yIChsaXN0X2Zyb250IChsKTsgIWxpc3RfYXRfZW5kIChsKTsgbGlzdF9hZHZhbmNlIChsKSkgeworICAgIExvZyAqbGcgPSBsaXN0X3ZhbCAobCk7CisgICAgaWYgKGxnLT5jbG9zZSkgeworICAgICAgcnZhbCA9IGZjbG9zZSAobGctPmxmaWxlKTsKKyAgICAgIGlmIChydmFsICE9IDApCisgICAgICAgIGVwcmludGYgKCJFcnJvciBpbiBjYWxsIHRvIGZjbG9zZSB3aGlsZSBjbG9zaW5nIGxvZyBmaWxlOiIsIF9fRklMRV9fLAorICAgICAgICAgICAgX19MSU5FX18gLSAyKTsKKyAgICB9CisgICAgZnJlZSAobGcpOworICB9CisgIGxpc3RfZnJlZSAobCk7CisgIHNyLT5sb2dsc3QgPSBOVUxMOworfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfbG9nLmggYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19sb2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWQzOGVlCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfbG9nLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENoZWNrOiBhIHVuaXQgdGVzdCBmcmFtZXdvcmsgZm9yIEMKKyAqIENvcHlyaWdodCAoQykgMjAwMSwyMDAyIEFyaWVuIE1hbGVjCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIENIRUNLX0xPR19ICisjZGVmaW5lIENIRUNLX0xPR19ICisKK3ZvaWQgbG9nX3NydW5uZXJfc3RhcnQgKFNSdW5uZXIgKnNyKTsKK3ZvaWQgbG9nX3NydW5uZXJfZW5kIChTUnVubmVyICpzcik7Cit2b2lkIGxvZ19zdWl0ZV9zdGFydCAoU1J1bm5lciAqc3IsIFN1aXRlICpzKTsKK3ZvaWQgbG9nX3N1aXRlX2VuZCAoU1J1bm5lciAqc3IsIFN1aXRlICpzKTsKK3ZvaWQgbG9nX3Rlc3RfZW5kIChTUnVubmVyICpzciwgVGVzdFJlc3VsdCAqdHIpOwordm9pZCBsb2dfdGVzdF9zdGFydCAoU1J1bm5lciAqc3IsIFRDYXNlICp0YywgVEYgKnRmdW4pOworCit2b2lkIHN0ZG91dF9sZnVuIChTUnVubmVyICpzciwgRklMRSAqZmlsZSwgZW51bSBwcmludF9vdXRwdXQsCisJCSAgdm9pZCAqb2JqLCBlbnVtIGNsX2V2ZW50IGV2dCk7CisKK3ZvaWQgbGZpbGVfbGZ1biAoU1J1bm5lciAqc3IsIEZJTEUgKmZpbGUsIGVudW0gcHJpbnRfb3V0cHV0LAorCQkgIHZvaWQgKm9iaiwgZW51bSBjbF9ldmVudCBldnQpOworCit2b2lkIHhtbF9sZnVuIChTUnVubmVyICpzciwgRklMRSAqZmlsZSwgZW51bSBwcmludF9vdXRwdXQsCisJCSAgdm9pZCAqb2JqLCBlbnVtIGNsX2V2ZW50IGV2dCk7CisKK3ZvaWQgc3VidW5pdF9sZnVuIChTUnVubmVyICpzciwgRklMRSAqZmlsZSwgZW51bSBwcmludF9vdXRwdXQsCisJCSAgdm9pZCAqb2JqLCBlbnVtIGNsX2V2ZW50IGV2dCk7CisKK3ZvaWQgc3J1bm5lcl9yZWdpc3Rlcl9sZnVuIChTUnVubmVyICpzciwgRklMRSAqbGZpbGUsIGludCBjbG9zZSwKKwkJCSAgICBMRnVuIGxmdW4sIGVudW0gcHJpbnRfb3V0cHV0KTsKKworRklMRSAqc3J1bm5lcl9vcGVuX2xmaWxlIChTUnVubmVyICpzcik7CitGSUxFICpzcnVubmVyX29wZW5feG1sZmlsZSAoU1J1bm5lciAqc3IpOwordm9pZCBzcnVubmVyX2luaXRfbG9nZ2luZyAoU1J1bm5lciAqc3IsIGVudW0gcHJpbnRfb3V0cHV0IHByaW50X21vZGUpOwordm9pZCBzcnVubmVyX2VuZF9sb2dnaW5nIChTUnVubmVyICpzcik7CisKKyNlbmRpZiAvKiBDSEVDS19MT0dfSCAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfbXNnLmMgYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19tc2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmJmZjQzCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfbXNnLmMKQEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiBDaGVjazogYSB1bml0IHRlc3QgZnJhbWV3b3JrIGZvciBDCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgMjAwMiwgQXJpZW4gTWFsZWMKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImNoZWNrX2Vycm9yLmgiCisjaW5jbHVkZSAiY2hlY2suaCIKKyNpbmNsdWRlICJjaGVja19saXN0LmgiCisjaW5jbHVkZSAiY2hlY2tfaW1wbC5oIgorI2luY2x1ZGUgImNoZWNrX21zZy5oIgorI2luY2x1ZGUgImNoZWNrX3BhY2suaCIKKworCisvKiAnUGlwZScgaXMgaW1wbGVtZW50ZWQgYXMgYSB0ZW1wb3JhcnkgZmlsZSB0byBvdmVyY29tZSBtZXNzYWdlCisgKiB2b2x1bWUgbGltaXRhdGlvbnMgb3V0bGluZWQgaW4gYnVnICM0ODIwMTIuIFRoaXMgc2NoZW1lIHdvcmtzIHdlbGwKKyAqIHdpdGggdGhlIGV4aXN0aW5nIHVzYWdlIHdoZXJlaW4gdGhlIHBhcmVudCBkb2VzIG5vdCBiZWdpbiByZWFkaW5nCisgKiB1bnRpbCB0aGUgY2hpbGQgaGFzIGRvbmUgd3JpdGluZyBhbmQgZXhpdGVkLgorICoKKyAqIFBpcGUgbGlmZSBjeWNsZToKKyAqIC0gVGhlIHBhcmVudCBjcmVhdGVzIGEgdG1wZmlsZSgpLgorICogLSBUaGUgZm9yaygpIGNhbGwgaGFzIHRoZSBlZmZlY3Qgb2YgZHVwbGljYXRpbmcgdGhlIGZpbGUgZGVzY3JpcHRvcgorICogICBhbmQgY29weWluZyAob24gd3JpdGUpIHRoZSBGSUxFKiBkYXRhIHN0cnVjdHVyZXMuCisgKiAtIFRoZSBjaGlsZCB3cml0ZXMgdG8gdGhlIGZpbGUsIGFuZCBpdHMgZHVwJ2VkIGZpbGUgZGVzY3JpcHRvciBhbmQKKyAqICAgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjbGVhbmVkIHVwIG9uIGNoaWxkIHByb2Nlc3MgZXhpdC4KKyAqIC0gQmVmb3JlIHJlYWRpbmcsIHRoZSBwYXJlbnQgcmV3aW5kKCkncyB0aGUgZmlsZSB0byByZXNldCBib3RoCisgKiAgIEZJTEUqIGFuZCB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvciBsb2NhdGlvbiBkYXRhLgorICogLSBXaGVuIGZpbmlzaGVkLCB0aGUgcGFyZW50IGZjbG9zZSgpJ3MgdGhlIEZJTEUqLCBkZWxldGluZyB0aGUKKyAqICAgdGVtcG9yYXJ5IGZpbGUsIHBlciB0bXBmaWxlKCkncyBzZW1hbnRpY3MuCisgKgorICogVGhpcyBzY2hlbWUgbWF5IGJyZWFrIGRvd24gaWYgdGhlIHVzYWdlIGNoYW5nZXMgdG8gYXN5bmNocm9ub3VzCisgKiByZWFkaW5nIGFuZCB3cml0aW5nLgorICovCisKK3N0YXRpYyBGSUxFICpzZW5kX2ZpbGUxOworc3RhdGljIEZJTEUgKnNlbmRfZmlsZTI7CisKK3N0YXRpYyBGSUxFICpnZXRfcGlwZSAodm9pZCk7CitzdGF0aWMgdm9pZCBzZXR1cF9waXBlICh2b2lkKTsKK3N0YXRpYyB2b2lkIHRlYXJkb3duX3BpcGUgKHZvaWQpOworc3RhdGljIFRlc3RSZXN1bHQgKmNvbnN0cnVjdF90ZXN0X3Jlc3VsdCAoUmN2TXNnICogcm1zZywgaW50IHdhc2Vycm9yKTsKK3N0YXRpYyB2b2lkIHRyX3NldF9sb2NfYnlfY3R4IChUZXN0UmVzdWx0ICogdHIsIGVudW0gY2tfcmVzdWx0X2N0eCBjdHgsCisgICAgUmN2TXNnICogcm1zZyk7CitzdGF0aWMgRklMRSAqCitnZXRfcGlwZSAodm9pZCkKK3sKKyAgaWYgKHNlbmRfZmlsZTIgIT0gMCkgeworICAgIHJldHVybiBzZW5kX2ZpbGUyOworICB9CisKKyAgaWYgKHNlbmRfZmlsZTEgIT0gMCkgeworICAgIHJldHVybiBzZW5kX2ZpbGUxOworICB9CisKKyAgZXByaW50ZiAoIk5vIG1lc3NhZ2luZyBzZXR1cCIsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK3NlbmRfZmFpbHVyZV9pbmZvIChjb25zdCBjaGFyICptc2cpCit7CisgIEZhaWxNc2cgZm1zZzsKKworICBmbXNnLm1zZyA9IChjaGFyICopIG1zZzsKKyAgcHBhY2sgKGZpbGVubyAoZ2V0X3BpcGUgKCkpLCBDS19NU0dfRkFJTCwgKENoZWNrTXNnICopICYgZm1zZyk7Cit9CisKK3ZvaWQKK3NlbmRfbG9jX2luZm8gKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKQoreworICBMb2NNc2cgbG1zZzsKKworICBsbXNnLmZpbGUgPSAoY2hhciAqKSBmaWxlOworICBsbXNnLmxpbmUgPSBsaW5lOworICBwcGFjayAoZmlsZW5vIChnZXRfcGlwZSAoKSksIENLX01TR19MT0MsIChDaGVja01zZyAqKSAmIGxtc2cpOworfQorCit2b2lkCitzZW5kX2N0eF9pbmZvIChlbnVtIGNrX3Jlc3VsdF9jdHggY3R4KQoreworICBDdHhNc2cgY21zZzsKKworICBjbXNnLmN0eCA9IGN0eDsKKyAgcHBhY2sgKGZpbGVubyAoZ2V0X3BpcGUgKCkpLCBDS19NU0dfQ1RYLCAoQ2hlY2tNc2cgKikgJiBjbXNnKTsKK30KKworVGVzdFJlc3VsdCAqCityZWNlaXZlX3Rlc3RfcmVzdWx0IChpbnQgd2FzZXJyb3IpCit7CisgIEZJTEUgKmZwOworICBSY3ZNc2cgKnJtc2c7CisgIFRlc3RSZXN1bHQgKnJlc3VsdDsKKworICBmcCA9IGdldF9waXBlICgpOworICBpZiAoZnAgPT0gTlVMTCkKKyAgICBlcHJpbnRmICgiRXJyb3IgaW4gY2FsbCB0byBnZXRfcGlwZSIsIF9fRklMRV9fLCBfX0xJTkVfXyAtIDIpOworICByZXdpbmQgKGZwKTsKKyAgcm1zZyA9IHB1bnBhY2sgKGZpbGVubyAoZnApKTsKKyAgdGVhcmRvd25fcGlwZSAoKTsKKyAgc2V0dXBfcGlwZSAoKTsKKworICByZXN1bHQgPSBjb25zdHJ1Y3RfdGVzdF9yZXN1bHQgKHJtc2csIHdhc2Vycm9yKTsKKyAgcmN2bXNnX2ZyZWUgKHJtc2cpOworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAordHJfc2V0X2xvY19ieV9jdHggKFRlc3RSZXN1bHQgKiB0ciwgZW51bSBja19yZXN1bHRfY3R4IGN0eCwgUmN2TXNnICogcm1zZykKK3sKKyAgaWYgKGN0eCA9PSBDS19DVFhfVEVTVCkgeworICAgIHRyLT5maWxlID0gcm1zZy0+dGVzdF9maWxlOworICAgIHRyLT5saW5lID0gcm1zZy0+dGVzdF9saW5lOworICAgIHJtc2ctPnRlc3RfZmlsZSA9IE5VTEw7CisgICAgcm1zZy0+dGVzdF9saW5lID0gLTE7CisgIH0gZWxzZSB7CisgICAgdHItPmZpbGUgPSBybXNnLT5maXh0dXJlX2ZpbGU7CisgICAgdHItPmxpbmUgPSBybXNnLT5maXh0dXJlX2xpbmU7CisgICAgcm1zZy0+Zml4dHVyZV9maWxlID0gTlVMTDsKKyAgICBybXNnLT5maXh0dXJlX2xpbmUgPSAtMTsKKyAgfQorfQorCitzdGF0aWMgVGVzdFJlc3VsdCAqCitjb25zdHJ1Y3RfdGVzdF9yZXN1bHQgKFJjdk1zZyAqIHJtc2csIGludCB3YXNlcnJvcikKK3sKKyAgVGVzdFJlc3VsdCAqdHI7CisKKyAgaWYgKHJtc2cgPT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsKKworICB0ciA9IHRyX2NyZWF0ZSAoKTsKKworICBpZiAocm1zZy0+bXNnICE9IE5VTEwgfHwgd2FzZXJyb3IpIHsKKyAgICB0ci0+Y3R4ID0gKGN1cl9mb3JrX3N0YXR1cyAoKSA9PSBDS19GT1JLKSA/IHJtc2ctPmxhc3RjdHggOiBybXNnLT5mYWlsY3R4OworICAgIHRyLT5tc2cgPSBybXNnLT5tc2c7CisgICAgcm1zZy0+bXNnID0gTlVMTDsKKyAgICB0cl9zZXRfbG9jX2J5X2N0eCAodHIsIHRyLT5jdHgsIHJtc2cpOworICB9IGVsc2UgaWYgKHJtc2ctPmxhc3RjdHggPT0gQ0tfQ1RYX1NFVFVQKSB7CisgICAgdHItPmN0eCA9IENLX0NUWF9TRVRVUDsKKyAgICB0ci0+bXNnID0gTlVMTDsKKyAgICB0cl9zZXRfbG9jX2J5X2N0eCAodHIsIENLX0NUWF9TRVRVUCwgcm1zZyk7CisgIH0gZWxzZSB7CisgICAgdHItPmN0eCA9IENLX0NUWF9URVNUOworICAgIHRyLT5tc2cgPSBOVUxMOworICAgIHRyX3NldF9sb2NfYnlfY3R4ICh0ciwgQ0tfQ1RYX1RFU1QsIHJtc2cpOworICB9CisKKyAgcmV0dXJuIHRyOworfQorCit2b2lkCitzZXR1cF9tZXNzYWdpbmcgKHZvaWQpCit7CisgIHNldHVwX3BpcGUgKCk7Cit9CisKK3ZvaWQKK3RlYXJkb3duX21lc3NhZ2luZyAodm9pZCkKK3sKKyAgdGVhcmRvd25fcGlwZSAoKTsKK30KKworc3RhdGljIHZvaWQKK3NldHVwX3BpcGUgKHZvaWQpCit7CisgIGlmIChzZW5kX2ZpbGUxICE9IDApIHsKKyAgICBpZiAoc2VuZF9maWxlMiAhPSAwKQorICAgICAgZXByaW50ZiAoIk9ubHkgb25lIG5lc3Rpbmcgb2Ygc3VpdGUgcnVucyBzdXBwb3J0ZWQiLCBfX0ZJTEVfXywgX19MSU5FX18pOworICAgIHNlbmRfZmlsZTIgPSB0bXBmaWxlICgpOworICB9IGVsc2UgeworICAgIHNlbmRfZmlsZTEgPSB0bXBmaWxlICgpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCit0ZWFyZG93bl9waXBlICh2b2lkKQoreworICBpZiAoc2VuZF9maWxlMiAhPSAwKSB7CisgICAgZmNsb3NlIChzZW5kX2ZpbGUyKTsKKyAgICBzZW5kX2ZpbGUyID0gMDsKKyAgfSBlbHNlIGlmIChzZW5kX2ZpbGUxICE9IDApIHsKKyAgICBmY2xvc2UgKHNlbmRfZmlsZTEpOworICAgIHNlbmRfZmlsZTEgPSAwOworICB9IGVsc2UgeworICAgIGVwcmludGYgKCJObyBtZXNzYWdpbmcgc2V0dXAiLCBfX0ZJTEVfXywgX19MSU5FX18pOworICB9Cit9CmRpZmYgLS1naXQgYS9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19tc2cuaCBiL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX21zZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZDdmMjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19tc2cuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ2hlY2s6IGEgdW5pdCB0ZXN0IGZyYW1ld29yayBmb3IgQworICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEFyaWVuIE1hbGVjCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIENIRUNLX01TR19ORVdfSAorI2RlZmluZSBDSEVDS19NU0dfTkVXX0gKKworCisvKiBGdW5jdGlvbnMgaW1wbGVtZW50aW5nIG1lc3NhZ2luZyBkdXJpbmcgdGVzdCBydW5zICovCisKK3ZvaWQgc2VuZF9mYWlsdXJlX2luZm8oY29uc3QgY2hhciAqbXNnKTsKK3ZvaWQgc2VuZF9sb2NfaW5mbyhjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSk7Cit2b2lkIHNlbmRfY3R4X2luZm8oZW51bSBja19yZXN1bHRfY3R4IGN0eCk7CisKK1Rlc3RSZXN1bHQgKnJlY2VpdmVfdGVzdF9yZXN1bHQoaW50IHdhc2Vycm9yKTsKKwordm9pZCBzZXR1cF9tZXNzYWdpbmcodm9pZCk7Cit2b2lkIHRlYXJkb3duX21lc3NhZ2luZyh2b2lkKTsKKworI2VuZGlmIC8qQ0hFQ0tfTVNHX05FV19IICovCmRpZmYgLS1naXQgYS9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19wYWNrLmMgYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19wYWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI1ZGVjZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3BhY2suYwpAQCAtMCwwICsxLDQ0OSBAQAorLyoKKyAqIENoZWNrOiBhIHVuaXQgdGVzdCBmcmFtZXdvcmsgZm9yIEMKKyAqIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBBcmllbiBNYWxlYworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiX3N0ZGludC5oIgorCisjaW5jbHVkZSAiY2hlY2suaCIKKyNpbmNsdWRlICJjaGVja19lcnJvci5oIgorI2luY2x1ZGUgImNoZWNrX2xpc3QuaCIKKyNpbmNsdWRlICJjaGVja19pbXBsLmgiCisjaW5jbHVkZSAiY2hlY2tfcGFjay5oIgorCisjaWZkZWYgSEFWRV9QVEhSRUFECisjaW5jbHVkZSA8cHRocmVhZC5oPgorcHRocmVhZF9tdXRleF90IGxvY2tfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworI2Vsc2UKKyNkZWZpbmUgcHRocmVhZF9tdXRleF9sb2NrKGFyZykKKyNkZWZpbmUgcHRocmVhZF9tdXRleF91bmxvY2soYXJnKQorI2VuZGlmCisKKy8qIHR5cGVkZWYgYW4gdW5zaWduZWQgaW50IHRoYXQgaGFzIGF0IGxlYXN0IDQgYnl0ZXMgKi8KK3R5cGVkZWYgdWludDMyX3QgY2tfdWludDMyOworCisKK3N0YXRpYyB2b2lkIHBhY2tfaW50IChjaGFyICoqYnVmLCBpbnQgdmFsKTsKK3N0YXRpYyBpbnQgdXBhY2tfaW50IChjaGFyICoqYnVmKTsKK3N0YXRpYyB2b2lkIHBhY2tfc3RyIChjaGFyICoqYnVmLCBjb25zdCBjaGFyICpzdHIpOworc3RhdGljIGNoYXIgKnVwYWNrX3N0ciAoY2hhciAqKmJ1Zik7CisKK3N0YXRpYyBpbnQgcGFja19jdHggKGNoYXIgKipidWYsIEN0eE1zZyAqIGNtc2cpOworc3RhdGljIGludCBwYWNrX2xvYyAoY2hhciAqKmJ1ZiwgTG9jTXNnICogbG1zZyk7CitzdGF0aWMgaW50IHBhY2tfZmFpbCAoY2hhciAqKmJ1ZiwgRmFpbE1zZyAqIGZtc2cpOworc3RhdGljIHZvaWQgdXBhY2tfY3R4IChjaGFyICoqYnVmLCBDdHhNc2cgKiBjbXNnKTsKK3N0YXRpYyB2b2lkIHVwYWNrX2xvYyAoY2hhciAqKmJ1ZiwgTG9jTXNnICogbG1zZyk7CitzdGF0aWMgdm9pZCB1cGFja19mYWlsIChjaGFyICoqYnVmLCBGYWlsTXNnICogZm1zZyk7CisKK3N0YXRpYyB2b2lkIGNoZWNrX3R5cGUgKGludCB0eXBlLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSk7CitzdGF0aWMgZW51bSBja19tc2dfdHlwZSB1cGFja190eXBlIChjaGFyICoqYnVmKTsKK3N0YXRpYyB2b2lkIHBhY2tfdHlwZSAoY2hhciAqKmJ1ZiwgZW51bSBja19tc2dfdHlwZSB0eXBlKTsKKworc3RhdGljIGludCByZWFkX2J1ZiAoaW50IGZkZXMsIGNoYXIgKipidWYpOworc3RhdGljIGludCBnZXRfcmVzdWx0IChjaGFyICpidWYsIFJjdk1zZyAqIHJtc2cpOworc3RhdGljIHZvaWQgcmN2bXNnX3VwZGF0ZV9jdHggKFJjdk1zZyAqIHJtc2csIGVudW0gY2tfcmVzdWx0X2N0eCBjdHgpOworc3RhdGljIHZvaWQgcmN2bXNnX3VwZGF0ZV9sb2MgKFJjdk1zZyAqIHJtc2csIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKTsKK3N0YXRpYyBSY3ZNc2cgKnJjdm1zZ19jcmVhdGUgKHZvaWQpOwordm9pZCByY3Ztc2dfZnJlZSAoUmN2TXNnICogcm1zZyk7CisKK3R5cGVkZWYgaW50ICgqcGZ1bikgKGNoYXIgKiosIENoZWNrTXNnICopOwordHlwZWRlZiB2b2lkICgqdXBmdW4pIChjaGFyICoqLCBDaGVja01zZyAqKTsKKworc3RhdGljIHBmdW4gcGZ0YWJbXSA9IHsKKyAgKHBmdW4pIHBhY2tfY3R4LAorICAocGZ1bikgcGFja19mYWlsLAorICAocGZ1bikgcGFja19sb2MKK307CisKK3N0YXRpYyB1cGZ1biB1cGZ0YWJbXSA9IHsKKyAgKHVwZnVuKSB1cGFja19jdHgsCisgICh1cGZ1bikgdXBhY2tfZmFpbCwKKyAgKHVwZnVuKSB1cGFja19sb2MKK307CisKK2ludAorcGFjayAoZW51bSBja19tc2dfdHlwZSB0eXBlLCBjaGFyICoqYnVmLCBDaGVja01zZyAqIG1zZykKK3sKKyAgaWYgKGJ1ZiA9PSBOVUxMKQorICAgIHJldHVybiAtMTsKKyAgaWYgKG1zZyA9PSBOVUxMKQorICAgIHJldHVybiAwOworCisgIGNoZWNrX3R5cGUgKHR5cGUsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisKKyAgcmV0dXJuIHBmdGFiW3R5cGVdIChidWYsIG1zZyk7Cit9CisKK2ludAordXBhY2sgKGNoYXIgKmJ1ZiwgQ2hlY2tNc2cgKiBtc2csIGVudW0gY2tfbXNnX3R5cGUgKnR5cGUpCit7CisgIGNoYXIgKm9idWY7CisgIGludCBucmVhZDsKKworICBpZiAoYnVmID09IE5VTEwpCisgICAgcmV0dXJuIC0xOworCisgIG9idWYgPSBidWY7CisKKyAgKnR5cGUgPSB1cGFja190eXBlICgmYnVmKTsKKworICBjaGVja190eXBlICgqdHlwZSwgX19GSUxFX18sIF9fTElORV9fKTsKKworICB1cGZ0YWJbKnR5cGVdICgmYnVmLCBtc2cpOworCisgIG5yZWFkID0gYnVmIC0gb2J1ZjsKKyAgcmV0dXJuIG5yZWFkOworfQorCitzdGF0aWMgdm9pZAorcGFja19pbnQgKGNoYXIgKipidWYsIGludCB2YWwpCit7CisgIHVuc2lnbmVkIGNoYXIgKnVidWYgPSAodW5zaWduZWQgY2hhciAqKSAqYnVmOworICBja191aW50MzIgdXZhbCA9IHZhbDsKKworICB1YnVmWzBdID0gKHV2YWwgPj4gMjQpICYgMHhGRjsKKyAgdWJ1ZlsxXSA9ICh1dmFsID4+IDE2KSAmIDB4RkY7CisgIHVidWZbMl0gPSAodXZhbCA+PiA4KSAmIDB4RkY7CisgIHVidWZbM10gPSB1dmFsICYgMHhGRjsKKworICAqYnVmICs9IDQ7Cit9CisKK3N0YXRpYyBpbnQKK3VwYWNrX2ludCAoY2hhciAqKmJ1ZikKK3sKKyAgdW5zaWduZWQgY2hhciAqdWJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopICpidWY7CisgIGNrX3VpbnQzMiB1dmFsOworCisgIHV2YWwgPSAoKHVidWZbMF0gPDwgMjQpIHwgKHVidWZbMV0gPDwgMTYpIHwgKHVidWZbMl0gPDwgOCkgfCB1YnVmWzNdKTsKKworICAqYnVmICs9IDQ7CisKKyAgcmV0dXJuIChpbnQpIHV2YWw7Cit9CisKK3N0YXRpYyB2b2lkCitwYWNrX3N0ciAoY2hhciAqKmJ1ZiwgY29uc3QgY2hhciAqdmFsKQoreworICBpbnQgc3Ryc3o7CisKKyAgaWYgKHZhbCA9PSBOVUxMKQorICAgIHN0cnN6ID0gMDsKKyAgZWxzZQorICAgIHN0cnN6ID0gc3RybGVuICh2YWwpOworCisgIHBhY2tfaW50IChidWYsIHN0cnN6KTsKKworICBpZiAoc3Ryc3ogPiAwKSB7CisgICAgbWVtY3B5ICgqYnVmLCB2YWwsIHN0cnN6KTsKKyAgICAqYnVmICs9IHN0cnN6OworICB9Cit9CisKK3N0YXRpYyBjaGFyICoKK3VwYWNrX3N0ciAoY2hhciAqKmJ1ZikKK3sKKyAgY2hhciAqdmFsOworICBpbnQgc3Ryc3o7CisKKyAgc3Ryc3ogPSB1cGFja19pbnQgKGJ1Zik7CisKKyAgaWYgKHN0cnN6ID4gMCkgeworICAgIHZhbCA9IGVtYWxsb2MgKHN0cnN6ICsgMSk7CisgICAgbWVtY3B5ICh2YWwsICpidWYsIHN0cnN6KTsKKyAgICB2YWxbc3Ryc3pdID0gMDsKKyAgICAqYnVmICs9IHN0cnN6OworICB9IGVsc2UgeworICAgIHZhbCA9IGVtYWxsb2MgKDEpOworICAgICp2YWwgPSAwOworICB9CisKKyAgcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHZvaWQKK3BhY2tfdHlwZSAoY2hhciAqKmJ1ZiwgZW51bSBja19tc2dfdHlwZSB0eXBlKQoreworICBwYWNrX2ludCAoYnVmLCAoaW50KSB0eXBlKTsKK30KKworc3RhdGljIGVudW0gY2tfbXNnX3R5cGUKK3VwYWNrX3R5cGUgKGNoYXIgKipidWYpCit7CisgIHJldHVybiAoZW51bSBja19tc2dfdHlwZSkgdXBhY2tfaW50IChidWYpOworfQorCisKK3N0YXRpYyBpbnQKK3BhY2tfY3R4IChjaGFyICoqYnVmLCBDdHhNc2cgKiBjbXNnKQoreworICBjaGFyICpwdHI7CisgIGludCBsZW47CisKKyAgbGVuID0gNCArIDQ7CisgICpidWYgPSBwdHIgPSBlbWFsbG9jIChsZW4pOworCisgIHBhY2tfdHlwZSAoJnB0ciwgQ0tfTVNHX0NUWCk7CisgIHBhY2tfaW50ICgmcHRyLCAoaW50KSBjbXNnLT5jdHgpOworCisgIHJldHVybiBsZW47Cit9CisKK3N0YXRpYyB2b2lkCit1cGFja19jdHggKGNoYXIgKipidWYsIEN0eE1zZyAqIGNtc2cpCit7CisgIGNtc2ctPmN0eCA9IHVwYWNrX2ludCAoYnVmKTsKK30KKworc3RhdGljIGludAorcGFja19sb2MgKGNoYXIgKipidWYsIExvY01zZyAqIGxtc2cpCit7CisgIGNoYXIgKnB0cjsKKyAgaW50IGxlbjsKKworICBsZW4gPSA0ICsgNCArIChsbXNnLT5maWxlID8gc3RybGVuIChsbXNnLT5maWxlKSA6IDApICsgNDsKKyAgKmJ1ZiA9IHB0ciA9IGVtYWxsb2MgKGxlbik7CisKKyAgcGFja190eXBlICgmcHRyLCBDS19NU0dfTE9DKTsKKyAgcGFja19zdHIgKCZwdHIsIGxtc2ctPmZpbGUpOworICBwYWNrX2ludCAoJnB0ciwgbG1zZy0+bGluZSk7CisKKyAgcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHZvaWQKK3VwYWNrX2xvYyAoY2hhciAqKmJ1ZiwgTG9jTXNnICogbG1zZykKK3sKKyAgbG1zZy0+ZmlsZSA9IHVwYWNrX3N0ciAoYnVmKTsKKyAgbG1zZy0+bGluZSA9IHVwYWNrX2ludCAoYnVmKTsKK30KKworc3RhdGljIGludAorcGFja19mYWlsIChjaGFyICoqYnVmLCBGYWlsTXNnICogZm1zZykKK3sKKyAgY2hhciAqcHRyOworICBpbnQgbGVuOworCisgIGxlbiA9IDQgKyA0ICsgKGZtc2ctPm1zZyA/IHN0cmxlbiAoZm1zZy0+bXNnKSA6IDApOworICAqYnVmID0gcHRyID0gZW1hbGxvYyAobGVuKTsKKworICBwYWNrX3R5cGUgKCZwdHIsIENLX01TR19GQUlMKTsKKyAgcGFja19zdHIgKCZwdHIsIGZtc2ctPm1zZyk7CisKKyAgcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHZvaWQKK3VwYWNrX2ZhaWwgKGNoYXIgKipidWYsIEZhaWxNc2cgKiBmbXNnKQoreworICBmbXNnLT5tc2cgPSB1cGFja19zdHIgKGJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkCitjaGVja190eXBlIChpbnQgdHlwZSwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpCit7CisgIGlmICh0eXBlIDwgMCB8fCB0eXBlID49IENLX01TR19MQVNUKQorICAgIGVwcmludGYgKCJCYWQgbWVzc2FnZSB0eXBlIGFyZyAlZCIsIGZpbGUsIGxpbmUsIHR5cGUpOworfQorCisjaWZkZWYgSEFWRV9QVEhSRUFECitwdGhyZWFkX211dGV4X3QgbXV0ZXhfbG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisjZW5kaWYKKwordm9pZAorcHBhY2sgKGludCBmZGVzLCBlbnVtIGNrX21zZ190eXBlIHR5cGUsIENoZWNrTXNnICogbXNnKQoreworICBjaGFyICpidWY7CisgIGludCBuOworICBzc2l6ZV90IHI7CisKKyAgbiA9IHBhY2sgKHR5cGUsICZidWYsIG1zZyk7CisgIHB0aHJlYWRfbXV0ZXhfbG9jayAoJm11dGV4X2xvY2spOworICByID0gd3JpdGUgKGZkZXMsIGJ1Ziwgbik7CisgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrICgmbXV0ZXhfbG9jayk7CisgIGlmIChyID09IC0xKQorICAgIGVwcmludGYgKCJFcnJvciBpbiBjYWxsIHRvIHdyaXRlOiIsIF9fRklMRV9fLCBfX0xJTkVfXyAtIDIpOworCisgIGZyZWUgKGJ1Zik7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRfYnVmIChpbnQgZmRlcywgY2hhciAqKmJ1ZikKK3sKKyAgY2hhciAqcmVhZGxvYzsKKyAgaW50IG47CisgIGludCBucmVhZCA9IDA7CisgIGludCBzaXplID0gMTsKKyAgaW50IGdyb3cgPSAyOworCisgICpidWYgPSBlbWFsbG9jIChzaXplKTsKKyAgcmVhZGxvYyA9ICpidWY7CisgIHdoaWxlICgxKSB7CisgICAgbiA9IHJlYWQgKGZkZXMsIHJlYWRsb2MsIHNpemUgLSBucmVhZCk7CisgICAgaWYgKG4gPT0gMCkKKyAgICAgIGJyZWFrOworICAgIGlmIChuID09IC0xKQorICAgICAgZXByaW50ZiAoIkVycm9yIGluIGNhbGwgdG8gcmVhZDoiLCBfX0ZJTEVfXywgX19MSU5FX18gLSA0KTsKKworICAgIG5yZWFkICs9IG47CisgICAgc2l6ZSAqPSBncm93OworICAgICpidWYgPSBlcmVhbGxvYyAoKmJ1Ziwgc2l6ZSk7CisgICAgcmVhZGxvYyA9ICpidWYgKyBucmVhZDsKKyAgfQorCisgIHJldHVybiBucmVhZDsKK30KKworCitzdGF0aWMgaW50CitnZXRfcmVzdWx0IChjaGFyICpidWYsIFJjdk1zZyAqIHJtc2cpCit7CisgIGVudW0gY2tfbXNnX3R5cGUgdHlwZTsKKyAgQ2hlY2tNc2cgbXNnOworICBpbnQgbjsKKworICBuID0gdXBhY2sgKGJ1ZiwgJm1zZywgJnR5cGUpOworICBpZiAobiA9PSAtMSkKKyAgICBlcHJpbnRmICgiRXJyb3IgaW4gY2FsbCB0byB1cGFjayIsIF9fRklMRV9fLCBfX0xJTkVfXyAtIDIpOworCisgIGlmICh0eXBlID09IENLX01TR19DVFgpIHsKKyAgICBDdHhNc2cgKmNtc2cgPSAoQ3R4TXNnICopICYgbXNnOworICAgIHJjdm1zZ191cGRhdGVfY3R4IChybXNnLCBjbXNnLT5jdHgpOworICB9IGVsc2UgaWYgKHR5cGUgPT0gQ0tfTVNHX0xPQykgeworICAgIExvY01zZyAqbG1zZyA9IChMb2NNc2cgKikgJiBtc2c7CisgICAgaWYgKHJtc2ctPmZhaWxjdHggPT0gQ0tfQ1RYX0lOVkFMSUQpIHsKKyAgICAgIHJjdm1zZ191cGRhdGVfbG9jIChybXNnLCBsbXNnLT5maWxlLCBsbXNnLT5saW5lKTsKKyAgICB9CisgICAgZnJlZSAobG1zZy0+ZmlsZSk7CisgIH0gZWxzZSBpZiAodHlwZSA9PSBDS19NU0dfRkFJTCkgeworICAgIEZhaWxNc2cgKmZtc2cgPSAoRmFpbE1zZyAqKSAmIG1zZzsKKyAgICBpZiAocm1zZy0+bXNnID09IE5VTEwpIHsKKyAgICAgIHJtc2ctPm1zZyA9IGVtYWxsb2MgKHN0cmxlbiAoZm1zZy0+bXNnKSArIDEpOworICAgICAgc3RyY3B5IChybXNnLT5tc2csIGZtc2ctPm1zZyk7CisgICAgICBybXNnLT5mYWlsY3R4ID0gcm1zZy0+bGFzdGN0eDsKKyAgICB9IGVsc2UgeworICAgICAgLyogU2tpcCBzdWJzZXF1ZW50IGZhaWx1cmUgbWVzc2FnZXMsIG9ubHkgaGFwcGVucyBmb3IgQ0tfTk9GT1JLICovCisgICAgfQorICAgIGZyZWUgKGZtc2ctPm1zZyk7CisgIH0gZWxzZQorICAgIGNoZWNrX3R5cGUgKHR5cGUsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisKKyAgcmV0dXJuIG47Cit9CisKK3N0YXRpYyB2b2lkCityZXNldF9yY3ZfdGVzdCAoUmN2TXNnICogcm1zZykKK3sKKyAgcm1zZy0+dGVzdF9saW5lID0gLTE7CisgIHJtc2ctPnRlc3RfZmlsZSA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCityZXNldF9yY3ZfZml4dHVyZSAoUmN2TXNnICogcm1zZykKK3sKKyAgcm1zZy0+Zml4dHVyZV9saW5lID0gLTE7CisgIHJtc2ctPmZpeHR1cmVfZmlsZSA9IE5VTEw7Cit9CisKK3N0YXRpYyBSY3ZNc2cgKgorcmN2bXNnX2NyZWF0ZSAodm9pZCkKK3sKKyAgUmN2TXNnICpybXNnOworCisgIHJtc2cgPSBlbWFsbG9jIChzaXplb2YgKFJjdk1zZykpOworICBybXNnLT5sYXN0Y3R4ID0gQ0tfQ1RYX0lOVkFMSUQ7CisgIHJtc2ctPmZhaWxjdHggPSBDS19DVFhfSU5WQUxJRDsKKyAgcm1zZy0+bXNnID0gTlVMTDsKKyAgcmVzZXRfcmN2X3Rlc3QgKHJtc2cpOworICByZXNldF9yY3ZfZml4dHVyZSAocm1zZyk7CisgIHJldHVybiBybXNnOworfQorCit2b2lkCityY3Ztc2dfZnJlZSAoUmN2TXNnICogcm1zZykKK3sKKyAgZnJlZSAocm1zZy0+Zml4dHVyZV9maWxlKTsKKyAgZnJlZSAocm1zZy0+dGVzdF9maWxlKTsKKyAgZnJlZSAocm1zZy0+bXNnKTsKKyAgZnJlZSAocm1zZyk7Cit9CisKK3N0YXRpYyB2b2lkCityY3Ztc2dfdXBkYXRlX2N0eCAoUmN2TXNnICogcm1zZywgZW51bSBja19yZXN1bHRfY3R4IGN0eCkKK3sKKyAgaWYgKHJtc2ctPmxhc3RjdHggIT0gQ0tfQ1RYX0lOVkFMSUQpIHsKKyAgICBmcmVlIChybXNnLT5maXh0dXJlX2ZpbGUpOworICAgIHJlc2V0X3Jjdl9maXh0dXJlIChybXNnKTsKKyAgfQorICBybXNnLT5sYXN0Y3R4ID0gY3R4OworfQorCitzdGF0aWMgdm9pZAorcmN2bXNnX3VwZGF0ZV9sb2MgKFJjdk1zZyAqIHJtc2csIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKQoreworICBpbnQgZmxlbiA9IHN0cmxlbiAoZmlsZSk7CisKKyAgaWYgKHJtc2ctPmxhc3RjdHggPT0gQ0tfQ1RYX1RFU1QpIHsKKyAgICBmcmVlIChybXNnLT50ZXN0X2ZpbGUpOworICAgIHJtc2ctPnRlc3RfbGluZSA9IGxpbmU7CisgICAgcm1zZy0+dGVzdF9maWxlID0gZW1hbGxvYyAoZmxlbiArIDEpOworICAgIHN0cmNweSAocm1zZy0+dGVzdF9maWxlLCBmaWxlKTsKKyAgfSBlbHNlIHsKKyAgICBmcmVlIChybXNnLT5maXh0dXJlX2ZpbGUpOworICAgIHJtc2ctPmZpeHR1cmVfbGluZSA9IGxpbmU7CisgICAgcm1zZy0+Zml4dHVyZV9maWxlID0gZW1hbGxvYyAoZmxlbiArIDEpOworICAgIHN0cmNweSAocm1zZy0+Zml4dHVyZV9maWxlLCBmaWxlKTsKKyAgfQorfQorCitSY3ZNc2cgKgorcHVucGFjayAoaW50IGZkZXMpCit7CisgIGludCBucmVhZCwgbjsKKyAgY2hhciAqYnVmOworICBjaGFyICpvYnVmOworICBSY3ZNc2cgKnJtc2c7CisKKyAgbnJlYWQgPSByZWFkX2J1ZiAoZmRlcywgJmJ1Zik7CisgIG9idWYgPSBidWY7CisgIHJtc2cgPSByY3Ztc2dfY3JlYXRlICgpOworCisgIHdoaWxlIChucmVhZCA+IDApIHsKKyAgICBuID0gZ2V0X3Jlc3VsdCAoYnVmLCBybXNnKTsKKyAgICBucmVhZCAtPSBuOworICAgIGJ1ZiArPSBuOworICB9CisKKyAgZnJlZSAob2J1Zik7CisgIGlmIChybXNnLT5sYXN0Y3R4ID09IENLX0NUWF9JTlZBTElEKSB7CisgICAgZnJlZSAocm1zZyk7CisgICAgcm1zZyA9IE5VTEw7CisgIH0KKworICByZXR1cm4gcm1zZzsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3BhY2suaCBiL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3BhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjc4Njk1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcGFjay5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDaGVjazogYSB1bml0IHRlc3QgZnJhbWV3b3JrIGZvciBDCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgQXJpZW4gTWFsZWMKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgQ0hFQ0tfUEFDS19ICisjZGVmaW5lIENIRUNLX1BBQ0tfSAorCisKK2VudW0gY2tfbXNnX3R5cGUgeworICBDS19NU0dfQ1RYLAorICBDS19NU0dfRkFJTCwKKyAgQ0tfTVNHX0xPQywKKyAgQ0tfTVNHX0xBU1QKK307CisKK3R5cGVkZWYgc3RydWN0IEN0eE1zZworeworICBlbnVtIGNrX3Jlc3VsdF9jdHggY3R4OworfSBDdHhNc2c7CisKK3R5cGVkZWYgc3RydWN0IExvY01zZyAKK3sKKyAgaW50IGxpbmU7CisgIGNoYXIgKmZpbGU7Cit9IExvY01zZzsKKwordHlwZWRlZiBzdHJ1Y3QgRmFpbE1zZworeworICBjaGFyICptc2c7Cit9IEZhaWxNc2c7CisKK3R5cGVkZWYgdW5pb24KK3sKKyAgQ3R4TXNnICBjdHhfbXNnOworICBGYWlsTXNnIGZhaWxfbXNnOworICBMb2NNc2cgIGxvY19tc2c7Cit9IENoZWNrTXNnOworCit0eXBlZGVmIHN0cnVjdCBSY3ZNc2cKK3sKKyAgZW51bSBja19yZXN1bHRfY3R4IGxhc3RjdHg7CisgIGVudW0gY2tfcmVzdWx0X2N0eCBmYWlsY3R4OworICBjaGFyICpmaXh0dXJlX2ZpbGU7CisgIGludCBmaXh0dXJlX2xpbmU7CisgIGNoYXIgKnRlc3RfZmlsZTsKKyAgaW50IHRlc3RfbGluZTsKKyAgY2hhciAqbXNnOworfSBSY3ZNc2c7CisKK3ZvaWQgcmN2bXNnX2ZyZWUgKFJjdk1zZyAqcm1zZyk7CisKKyAgCitpbnQgcGFjayAoZW51bSBja19tc2dfdHlwZSB0eXBlLCBjaGFyICoqYnVmLCBDaGVja01zZyAqbXNnKTsKK2ludCB1cGFjayAoY2hhciAqYnVmLCBDaGVja01zZyAqbXNnLCBlbnVtIGNrX21zZ190eXBlICp0eXBlKTsKKwordm9pZCBwcGFjayAoaW50IGZkZXMsIGVudW0gY2tfbXNnX3R5cGUgdHlwZSwgQ2hlY2tNc2cgKm1zZyk7CitSY3ZNc2cgKnB1bnBhY2sgKGludCBmZGVzKTsKKworCisjZW5kaWYgLypDSEVDS19QQUNLX0ggKi8KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3ByaW50LmMgYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19wcmludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZjdkN2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19wcmludC5jCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogQ2hlY2s6IGEgdW5pdCB0ZXN0IGZyYW1ld29yayBmb3IgQworICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEFyaWVuIE1hbGVjCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAiY2hlY2suaCIKKyNpbmNsdWRlICJjaGVja19saXN0LmgiCisjaW5jbHVkZSAiY2hlY2tfaW1wbC5oIgorI2luY2x1ZGUgImNoZWNrX3N0ci5oIgorI2luY2x1ZGUgImNoZWNrX3ByaW50LmgiCisKK3N0YXRpYyB2b2lkIHNydW5uZXJfZnByaW50X3N1bW1hcnkgKEZJTEUgKiBmaWxlLCBTUnVubmVyICogc3IsCisgICAgZW51bSBwcmludF9vdXRwdXQgcHJpbnRfbW9kZSk7CitzdGF0aWMgdm9pZCBzcnVubmVyX2ZwcmludF9yZXN1bHRzIChGSUxFICogZmlsZSwgU1J1bm5lciAqIHNyLAorICAgIGVudW0gcHJpbnRfb3V0cHV0IHByaW50X21vZGUpOworCisKK3ZvaWQKK3NydW5uZXJfcHJpbnQgKFNSdW5uZXIgKiBzciwgZW51bSBwcmludF9vdXRwdXQgcHJpbnRfbW9kZSkKK3sKKyAgc3J1bm5lcl9mcHJpbnQgKHN0ZG91dCwgc3IsIHByaW50X21vZGUpOworfQorCit2b2lkCitzcnVubmVyX2ZwcmludCAoRklMRSAqIGZpbGUsIFNSdW5uZXIgKiBzciwgZW51bSBwcmludF9vdXRwdXQgcHJpbnRfbW9kZSkKK3sKKyAgaWYgKHByaW50X21vZGUgPT0gQ0tfRU5WKSB7CisgICAgcHJpbnRfbW9kZSA9IGdldF9lbnZfcHJpbnRtb2RlICgpOworICB9CisKKyAgc3J1bm5lcl9mcHJpbnRfc3VtbWFyeSAoZmlsZSwgc3IsIHByaW50X21vZGUpOworICBzcnVubmVyX2ZwcmludF9yZXN1bHRzIChmaWxlLCBzciwgcHJpbnRfbW9kZSk7Cit9CisKK3N0YXRpYyB2b2lkCitzcnVubmVyX2ZwcmludF9zdW1tYXJ5IChGSUxFICogZmlsZSwgU1J1bm5lciAqIHNyLCBlbnVtIHByaW50X291dHB1dCBwcmludF9tb2RlKQoreworI2lmIEVOQUJMRV9TVUJVTklUCisgIGlmIChwcmludF9tb2RlID09IENLX1NVQlVOSVQpCisgICAgcmV0dXJuOworI2VuZGlmCisKKyAgaWYgKHByaW50X21vZGUgPj0gQ0tfTUlOSU1BTCkgeworICAgIGNoYXIgKnN0cjsKKworICAgIHN0ciA9IHNyX3N0YXRfc3RyIChzcik7CisgICAgZnByaW50ZiAoZmlsZSwgIiVzXG4iLCBzdHIpOworICAgIGZyZWUgKHN0cik7CisgIH0KKyAgcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAorc3J1bm5lcl9mcHJpbnRfcmVzdWx0cyAoRklMRSAqIGZpbGUsIFNSdW5uZXIgKiBzciwgZW51bSBwcmludF9vdXRwdXQgcHJpbnRfbW9kZSkKK3sKKyAgTGlzdCAqcmVzdWx0bHN0OworCisjaWYgRU5BQkxFX1NVQlVOSVQKKyAgaWYgKHByaW50X21vZGUgPT0gQ0tfU1VCVU5JVCkKKyAgICByZXR1cm47CisjZW5kaWYKKworICByZXN1bHRsc3QgPSBzci0+cmVzdWx0bHN0OworCisgIGZvciAobGlzdF9mcm9udCAocmVzdWx0bHN0KTsgIWxpc3RfYXRfZW5kIChyZXN1bHRsc3QpOworICAgICAgbGlzdF9hZHZhbmNlIChyZXN1bHRsc3QpKSB7CisgICAgVGVzdFJlc3VsdCAqdHIgPSBsaXN0X3ZhbCAocmVzdWx0bHN0KTsKKyAgICB0cl9mcHJpbnQgKGZpbGUsIHRyLCBwcmludF9tb2RlKTsKKyAgfQorICByZXR1cm47Cit9CisKK3ZvaWQKK3RyX2ZwcmludCAoRklMRSAqIGZpbGUsIFRlc3RSZXN1bHQgKiB0ciwgZW51bSBwcmludF9vdXRwdXQgcHJpbnRfbW9kZSkKK3sKKyAgaWYgKHByaW50X21vZGUgPT0gQ0tfRU5WKSB7CisgICAgcHJpbnRfbW9kZSA9IGdldF9lbnZfcHJpbnRtb2RlICgpOworICB9CisKKyAgaWYgKChwcmludF9tb2RlID49IENLX1ZFUkJPU0UgJiYgdHItPnJ0eXBlID09IENLX1BBU1MpIHx8CisgICAgICAodHItPnJ0eXBlICE9IENLX1BBU1MgJiYgcHJpbnRfbW9kZSA+PSBDS19OT1JNQUwpKSB7CisgICAgY2hhciAqdHJzdHIgPSB0cl9zdHIgKHRyKTsKKyAgICBmcHJpbnRmIChmaWxlLCAiJXNcbiIsIHRyc3RyKTsKKyAgICBmcmVlICh0cnN0cik7CisgIH0KK30KKwordm9pZAordHJfeG1scHJpbnQgKEZJTEUgKiBmaWxlLCBUZXN0UmVzdWx0ICogdHIsCisgICAgZW51bSBwcmludF9vdXRwdXQgcHJpbnRfbW9kZSBDS19BVFRSSUJVVEVfVU5VU0VEKQoreworICBjaGFyIHJlc3VsdFsxMF07CisgIGNoYXIgKnBhdGhfbmFtZTsKKyAgY2hhciAqZmlsZV9uYW1lOworICBjaGFyICpzbGFzaDsKKworICBzd2l0Y2ggKHRyLT5ydHlwZSkgeworICAgIGNhc2UgQ0tfUEFTUzoKKyAgICAgIHN0cmNweSAocmVzdWx0LCAic3VjY2VzcyIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDS19GQUlMVVJFOgorICAgICAgc3RyY3B5IChyZXN1bHQsICJmYWlsdXJlIik7CisgICAgICBicmVhazsKKyAgICBjYXNlIENLX0VSUk9SOgorICAgICAgc3RyY3B5IChyZXN1bHQsICJlcnJvciIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDS19URVNUX1JFU1VMVF9JTlZBTElEOgorICAgIGRlZmF1bHQ6CisgICAgICBhYm9ydCAoKTsKKyAgICAgIGJyZWFrOworICB9CisKKyAgc2xhc2ggPSBzdHJyY2hyICh0ci0+ZmlsZSwgJy8nKTsKKyAgaWYgKHNsYXNoID09IE5VTEwpIHsKKyAgICBwYXRoX25hbWUgPSAoY2hhciAqKSAiLiI7CisgICAgZmlsZV9uYW1lID0gdHItPmZpbGU7CisgIH0gZWxzZSB7CisgICAgcGF0aF9uYW1lID0gc3RyZHVwICh0ci0+ZmlsZSk7CisgICAgcGF0aF9uYW1lW3NsYXNoIC0gdHItPmZpbGVdID0gMDsgICAgLyogVGVybWluYXRlIHRoZSB0ZW1wb3Jhcnkgc3RyaW5nLiAqLworICAgIGZpbGVfbmFtZSA9IHNsYXNoICsgMTsKKyAgfQorCisKKyAgZnByaW50ZiAoZmlsZSwgIiAgICA8dGVzdCByZXN1bHQ9XCIlc1wiPlxuIiwgcmVzdWx0KTsKKyAgZnByaW50ZiAoZmlsZSwgIiAgICAgIDxwYXRoPiVzPC9wYXRoPlxuIiwgcGF0aF9uYW1lKTsKKyAgZnByaW50ZiAoZmlsZSwgIiAgICAgIDxmbj4lczolZDwvZm4+XG4iLCBmaWxlX25hbWUsIHRyLT5saW5lKTsKKyAgZnByaW50ZiAoZmlsZSwgIiAgICAgIDxpZD4lczwvaWQ+XG4iLCB0ci0+dG5hbWUpOworICBmcHJpbnRmIChmaWxlLCAiICAgICAgPGl0ZXJhdGlvbj4lZDwvaXRlcmF0aW9uPlxuIiwgdHItPml0ZXIpOworICBmcHJpbnRmIChmaWxlLCAiICAgICAgPGRlc2NyaXB0aW9uPiVzPC9kZXNjcmlwdGlvbj5cbiIsIHRyLT50Y25hbWUpOworICBmcHJpbnRmIChmaWxlLCAiICAgICAgPG1lc3NhZ2U+JXM8L21lc3NhZ2U+XG4iLCB0ci0+bXNnKTsKKyAgZnByaW50ZiAoZmlsZSwgIiAgICA8L3Rlc3Q+XG4iKTsKKworICBpZiAoc2xhc2ggIT0gTlVMTCkgeworICAgIGZyZWUgKHBhdGhfbmFtZSk7CisgIH0KK30KKworZW51bSBwcmludF9vdXRwdXQKK2dldF9lbnZfcHJpbnRtb2RlICh2b2lkKQoreworICBjaGFyICplbnYgPSBnZXRlbnYgKCJDS19WRVJCT1NJVFkiKTsKKyAgaWYgKGVudiA9PSBOVUxMKQorICAgIHJldHVybiBDS19OT1JNQUw7CisgIGlmIChzdHJjbXAgKGVudiwgInNpbGVudCIpID09IDApCisgICAgcmV0dXJuIENLX1NJTEVOVDsKKyAgaWYgKHN0cmNtcCAoZW52LCAibWluaW1hbCIpID09IDApCisgICAgcmV0dXJuIENLX01JTklNQUw7CisgIGlmIChzdHJjbXAgKGVudiwgInZlcmJvc2UiKSA9PSAwKQorICAgIHJldHVybiBDS19WRVJCT1NFOworICByZXR1cm4gQ0tfTk9STUFMOworfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcHJpbnQuaCBiL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3ByaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRiMDJkYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3ByaW50LmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENoZWNrOiBhIHVuaXQgdGVzdCBmcmFtZXdvcmsgZm9yIEMKKyAqIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBBcmllbiBNYWxlYworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBDSEVDS19QUklOVF9ICisjZGVmaW5lIENIRUNLX1BSSU5UX0gKKwordm9pZCB0cl9mcHJpbnQgKEZJTEUgKmZpbGUsIFRlc3RSZXN1bHQgKnRyLCBlbnVtIHByaW50X291dHB1dCBwcmludF9tb2RlKTsKK3ZvaWQgdHJfeG1scHJpbnQgKEZJTEUgKmZpbGUsIFRlc3RSZXN1bHQgKnRyLCBlbnVtIHByaW50X291dHB1dCBwcmludF9tb2RlKTsKK3ZvaWQgc3J1bm5lcl9mcHJpbnQgKEZJTEUgKmZpbGUsIFNSdW5uZXIgKnNyLCBlbnVtIHByaW50X291dHB1dCBwcmludF9tb2RlKTsKK2VudW0gcHJpbnRfb3V0cHV0IGdldF9lbnZfcHJpbnRtb2RlICh2b2lkKTsKKworCisjZW5kaWYgLyogQ0hFQ0tfUFJJTlRfSCAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcnVuLmMgYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19ydW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGEzNmEwCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcnVuLmMKQEAgLTAsMCArMSw2MDEgQEAKKy8qCisgKiBDaGVjazogYSB1bml0IHRlc3QgZnJhbWV3b3JrIGZvciBDCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgQXJpZW4gTWFsZWMKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfU1lTX1dBSVRfSAorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorCisjaW5jbHVkZSAiY2hlY2suaCIKKyNpbmNsdWRlICJjaGVja19lcnJvci5oIgorI2luY2x1ZGUgImNoZWNrX2xpc3QuaCIKKyNpbmNsdWRlICJjaGVja19pbXBsLmgiCisjaW5jbHVkZSAiY2hlY2tfbXNnLmgiCisjaW5jbHVkZSAiY2hlY2tfbG9nLmgiCisKK2VudW0gcmluZm8KK3sKKyAgQ0tfUl9TSUcsCisgIENLX1JfUEFTUywKKyAgQ0tfUl9FWElULAorICBDS19SX0ZBSUxfVEVTVCwKKyAgQ0tfUl9GQUlMX0ZJWFRVUkUKK307CisKK2VudW0gdGZfdHlwZQoreworICBDS19GT1JLX1RFU1QsCisgIENLX05PRk9SS19URVNULAorICBDS19OT0ZPUktfRklYVFVSRQorfTsKKworLyogYWxsIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBpbiB0aGUgc2FtZSBvcmRlciB0aGV5IGFyZSBkZWNsYXJlZC4KKyAgIGZ1bmN0aW9ucyB0aGF0IGRlcGVuZCBvbiBmb3JraW5nIGFyZSBnYXRoZXJlZCBhbGwgdG9nZXRoZXIuCisgICBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4gKi8KK3N0YXRpYyB2b2lkIHNydW5uZXJfcnVuX2luaXQgKFNSdW5uZXIgKiBzciwgZW51bSBwcmludF9vdXRwdXQgcHJpbnRfbW9kZSk7CitzdGF0aWMgdm9pZCBzcnVubmVyX3J1bl9lbmQgKFNSdW5uZXIgKiBzciwgZW51bSBwcmludF9vdXRwdXQgcHJpbnRfbW9kZSk7CitzdGF0aWMgdm9pZCBzcnVubmVyX2l0ZXJhdGVfc3VpdGVzIChTUnVubmVyICogc3IsIGVudW0gcHJpbnRfb3V0cHV0IHByaW50X21vZGUpOworc3RhdGljIHZvaWQgc3J1bm5lcl9pdGVyYXRlX3RjYXNlX3RmdW5zIChTUnVubmVyICogc3IsIFRDYXNlICogdGMpOworc3RhdGljIHZvaWQgc3J1bm5lcl9hZGRfZmFpbHVyZSAoU1J1bm5lciAqIHNyLCBUZXN0UmVzdWx0ICogdGYpOworc3RhdGljIGludCBzcnVubmVyX3J1bl91bmNoZWNrZWRfc2V0dXAgKFNSdW5uZXIgKiBzciwgVENhc2UgKiB0Yyk7CitzdGF0aWMgVGVzdFJlc3VsdCAqdGNhc2VfcnVuX2NoZWNrZWRfc2V0dXAgKFNSdW5uZXIgKiBzciwgVENhc2UgKiB0Yyk7CitzdGF0aWMgdm9pZCBzcnVubmVyX3J1bl90ZWFyZG93biAoTGlzdCAqIGwpOworc3RhdGljIHZvaWQgc3J1bm5lcl9ydW5fdW5jaGVja2VkX3RlYXJkb3duIChUQ2FzZSAqIHRjKTsKK3N0YXRpYyB2b2lkIHRjYXNlX3J1bl9jaGVja2VkX3RlYXJkb3duIChUQ2FzZSAqIHRjKTsKK3N0YXRpYyB2b2lkIHNydW5uZXJfcnVuX3RjYXNlIChTUnVubmVyICogc3IsIFRDYXNlICogdGMpOworc3RhdGljIFRlc3RSZXN1bHQgKnRjYXNlX3J1bl90ZnVuX25vZm9yayAoU1J1bm5lciAqIHNyLCBUQ2FzZSAqIHRjLCBURiAqIHRmLAorICAgIGludCBpKTsKK3N0YXRpYyBUZXN0UmVzdWx0ICpyZWNlaXZlX3Jlc3VsdF9pbmZvX25vZm9yayAoY29uc3QgY2hhciAqdGNuYW1lLAorICAgIGNvbnN0IGNoYXIgKnRuYW1lLCBpbnQgaXRlcik7CitzdGF0aWMgdm9pZCBzZXRfbm9mb3JrX2luZm8gKFRlc3RSZXN1bHQgKiB0cik7CitzdGF0aWMgY2hhciAqcGFzc19tc2cgKHZvaWQpOworCisjaWZkZWYgX1BPU0lYX1ZFUlNJT04KK3N0YXRpYyBUZXN0UmVzdWx0ICp0Y2FzZV9ydW5fdGZ1bl9mb3JrIChTUnVubmVyICogc3IsIFRDYXNlICogdGMsIFRGICogdGYsCisgICAgaW50IGkpOworc3RhdGljIFRlc3RSZXN1bHQgKnJlY2VpdmVfcmVzdWx0X2luZm9fZm9yayAoY29uc3QgY2hhciAqdGNuYW1lLAorICAgIGNvbnN0IGNoYXIgKnRuYW1lLCBpbnQgaXRlciwgaW50IHN0YXR1cywgaW50IGV4cGVjdGVkX3NpZ25hbCwKKyAgICB1bnNpZ25lZCBjaGFyIGFsbG93ZWRfZXhpdF92YWx1ZSk7CitzdGF0aWMgdm9pZCBzZXRfZm9ya19pbmZvIChUZXN0UmVzdWx0ICogdHIsIGludCBzdGF0dXMsIGludCBleHBlY3RlZF9zaWduYWwsCisgICAgdW5zaWduZWQgY2hhciBhbGxvd2VkX2V4aXRfdmFsdWUpOworc3RhdGljIGNoYXIgKnNpZ25hbF9tc2cgKGludCBzaWcpOworc3RhdGljIGNoYXIgKnNpZ25hbF9lcnJvcl9tc2cgKGludCBzaWduYWxfcmVjZWl2ZWQsIGludCBzaWduYWxfZXhwZWN0ZWQpOworc3RhdGljIGNoYXIgKmV4aXRfbXNnIChpbnQgZXhpdHN0YXR1cyk7CitzdGF0aWMgaW50IHdhc2Vycm9yIChpbnQgc3RhdHVzLCBpbnQgZXhwZWN0ZWRfc2lnbmFsKTsKKworc3RhdGljIGludCBhbGFybV9yZWNlaXZlZDsKK3N0YXRpYyBwaWRfdCBncm91cF9waWQ7CisKK3N0YXRpYyB2b2lkIENLX0FUVFJJQlVURV9VTlVTRUQKK3NpZ19oYW5kbGVyIChpbnQgc2lnX25yKQoreworICBzd2l0Y2ggKHNpZ19ucikgeworICAgIGNhc2UgU0lHQUxSTToKKyAgICAgIGFsYXJtX3JlY2VpdmVkID0gMTsKKyAgICAgIGtpbGxwZyAoZ3JvdXBfcGlkLCBTSUdLSUxMKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBlcHJpbnRmICgiVW5oYW5kbGVkIHNpZ25hbDogJWQiLCBfX0ZJTEVfXywgX19MSU5FX18sIHNpZ19ucik7CisgICAgICBicmVhazsKKyAgfQorfQorI2VuZGlmIC8qIF9QT1NJWF9WRVJTSU9OICovCisKKyNkZWZpbmUgTVNHX0xFTiAxMDAKKworc3RhdGljIHZvaWQKK3NydW5uZXJfcnVuX2luaXQgKFNSdW5uZXIgKiBzciwgZW51bSBwcmludF9vdXRwdXQgcHJpbnRfbW9kZSkKK3sKKyAgc2V0X2Zvcmtfc3RhdHVzIChzcnVubmVyX2Zvcmtfc3RhdHVzIChzcikpOworICBzZXR1cF9tZXNzYWdpbmcgKCk7CisgIHNydW5uZXJfaW5pdF9sb2dnaW5nIChzciwgcHJpbnRfbW9kZSk7CisgIGxvZ19zcnVubmVyX3N0YXJ0IChzcik7Cit9CisKK3N0YXRpYyB2b2lkCitzcnVubmVyX3J1bl9lbmQgKFNSdW5uZXIgKiBzciwgZW51bSBwcmludF9vdXRwdXQgQ0tfQVRUUklCVVRFX1VOVVNFRCBwcmludF9tb2RlKQoreworICBsb2dfc3J1bm5lcl9lbmQgKHNyKTsKKyAgc3J1bm5lcl9lbmRfbG9nZ2luZyAoc3IpOworICB0ZWFyZG93bl9tZXNzYWdpbmcgKCk7CisgIHNldF9mb3JrX3N0YXR1cyAoQ0tfRk9SSyk7Cit9CisKK3N0YXRpYyB2b2lkCitzcnVubmVyX2l0ZXJhdGVfc3VpdGVzIChTUnVubmVyICogc3IsCisgICAgZW51bSBwcmludF9vdXRwdXQgQ0tfQVRUUklCVVRFX1VOVVNFRCBwcmludF9tb2RlKQoreworICBMaXN0ICpzbHN0OworICBMaXN0ICp0Y2w7CisgIFRDYXNlICp0YzsKKworICBzbHN0ID0gc3ItPnNsc3Q7CisKKyAgZm9yIChsaXN0X2Zyb250IChzbHN0KTsgIWxpc3RfYXRfZW5kIChzbHN0KTsgbGlzdF9hZHZhbmNlIChzbHN0KSkgeworICAgIFN1aXRlICpzID0gbGlzdF92YWwgKHNsc3QpOworCisgICAgbG9nX3N1aXRlX3N0YXJ0IChzciwgcyk7CisKKyAgICB0Y2wgPSBzLT50Y2xzdDsKKworICAgIGZvciAobGlzdF9mcm9udCAodGNsKTsgIWxpc3RfYXRfZW5kICh0Y2wpOyBsaXN0X2FkdmFuY2UgKHRjbCkpIHsKKyAgICAgIHRjID0gbGlzdF92YWwgKHRjbCk7CisgICAgICBzcnVubmVyX3J1bl90Y2FzZSAoc3IsIHRjKTsKKyAgICB9CisKKyAgICBsb2dfc3VpdGVfZW5kIChzciwgcyk7CisgIH0KK30KKworc3RhdGljIHZvaWQKK3NydW5uZXJfaXRlcmF0ZV90Y2FzZV90ZnVucyAoU1J1bm5lciAqIHNyLCBUQ2FzZSAqIHRjKQoreworICBMaXN0ICp0Zmw7CisgIFRGICp0ZnVuOworICBUZXN0UmVzdWx0ICp0ciA9IE5VTEw7CisKKyAgdGZsID0gdGMtPnRmbHN0OworCisgIGZvciAobGlzdF9mcm9udCAodGZsKTsgIWxpc3RfYXRfZW5kICh0ZmwpOyBsaXN0X2FkdmFuY2UgKHRmbCkpIHsKKyAgICBpbnQgaTsKKyAgICB0ZnVuID0gbGlzdF92YWwgKHRmbCk7CisKKyAgICBmb3IgKGkgPSB0ZnVuLT5sb29wX3N0YXJ0OyBpIDwgdGZ1bi0+bG9vcF9lbmQ7IGkrKykgeworICAgICAgbG9nX3Rlc3Rfc3RhcnQgKHNyLCB0YywgdGZ1bik7CisgICAgICBzd2l0Y2ggKHNydW5uZXJfZm9ya19zdGF0dXMgKHNyKSkgeworICAgICAgICBjYXNlIENLX0ZPUks6CisjaWZkZWYgX1BPU0lYX1ZFUlNJT04KKyAgICAgICAgICB0ciA9IHRjYXNlX3J1bl90ZnVuX2ZvcmsgKHNyLCB0YywgdGZ1biwgaSk7CisjZWxzZSAvKiBfUE9TSVhfVkVSU0lPTiAqLworICAgICAgICAgIGVwcmludGYgKCJUaGlzIHZlcnNpb24gZG9lcyBub3Qgc3VwcG9ydCBmb3JrIiwgX19GSUxFX18sIF9fTElORV9fKTsKKyNlbmRpZiAvKiBfUE9TSVhfVkVSU0lPTiAqLworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENLX05PRk9SSzoKKyAgICAgICAgICB0ciA9IHRjYXNlX3J1bl90ZnVuX25vZm9yayAoc3IsIHRjLCB0ZnVuLCBpKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBlcHJpbnRmICgiQmFkIGZvcmsgc3RhdHVzIGluIFNSdW5uZXIiLCBfX0ZJTEVfXywgX19MSU5FX18pOworICAgICAgfQorICAgICAgc3J1bm5lcl9hZGRfZmFpbHVyZSAoc3IsIHRyKTsKKyAgICAgIGxvZ190ZXN0X2VuZCAoc3IsIHRyKTsKKyAgICB9CisgIH0KK30KKworc3RhdGljIHZvaWQKK3NydW5uZXJfYWRkX2ZhaWx1cmUgKFNSdW5uZXIgKiBzciwgVGVzdFJlc3VsdCAqIHRyKQoreworICBsaXN0X2FkZF9lbmQgKHNyLT5yZXN1bHRsc3QsIHRyKTsKKyAgc3ItPnN0YXRzLT5uX2NoZWNrZWQrKzsgICAgICAgLyogY291bnQgY2hlY2tzIGR1cmluZyBzZXR1cCwgdGVzdCwgYW5kIHRlYXJkb3duICovCisgIGlmICh0ci0+cnR5cGUgPT0gQ0tfRkFJTFVSRSkKKyAgICBzci0+c3RhdHMtPm5fZmFpbGVkKys7CisgIGVsc2UgaWYgKHRyLT5ydHlwZSA9PSBDS19FUlJPUikKKyAgICBzci0+c3RhdHMtPm5fZXJyb3JzKys7CisKK30KKworc3RhdGljIGludAorc3J1bm5lcl9ydW5fdW5jaGVja2VkX3NldHVwIChTUnVubmVyICogc3IsIFRDYXNlICogdGMpCit7CisgIFRlc3RSZXN1bHQgKnRyOworICBMaXN0ICpsOworICBGaXh0dXJlICpmOworICBpbnQgcnZhbCA9IDE7CisKKyAgc2V0X2Zvcmtfc3RhdHVzIChDS19OT0ZPUkspOworCisgIGwgPSB0Yy0+dW5jaF9zZmxzdDsKKworICBmb3IgKGxpc3RfZnJvbnQgKGwpOyAhbGlzdF9hdF9lbmQgKGwpOyBsaXN0X2FkdmFuY2UgKGwpKSB7CisgICAgc2VuZF9jdHhfaW5mbyAoQ0tfQ1RYX1NFVFVQKTsKKyAgICBmID0gbGlzdF92YWwgKGwpOworICAgIGYtPmZ1biAoKTsKKworICAgIHRyID0gcmVjZWl2ZV9yZXN1bHRfaW5mb19ub2ZvcmsgKHRjLT5uYW1lLCAidW5jaGVja2VkX3NldHVwIiwgMCk7CisKKyAgICBpZiAodHItPnJ0eXBlICE9IENLX1BBU1MpIHsKKyAgICAgIHNydW5uZXJfYWRkX2ZhaWx1cmUgKHNyLCB0cik7CisgICAgICBydmFsID0gMDsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBmcmVlICh0ci0+ZmlsZSk7CisgICAgZnJlZSAodHItPm1zZyk7CisgICAgZnJlZSAodHIpOworICB9CisKKyAgc2V0X2Zvcmtfc3RhdHVzIChzcnVubmVyX2Zvcmtfc3RhdHVzIChzcikpOworICByZXR1cm4gcnZhbDsKK30KKworc3RhdGljIFRlc3RSZXN1bHQgKgordGNhc2VfcnVuX2NoZWNrZWRfc2V0dXAgKFNSdW5uZXIgKiBzciwgVENhc2UgKiB0YykKK3sKKyAgVGVzdFJlc3VsdCAqdHIgPSBOVUxMOworICBMaXN0ICpsOworICBGaXh0dXJlICpmOworICBlbnVtIGZvcmtfc3RhdHVzIGZzdGF0ID0gc3J1bm5lcl9mb3JrX3N0YXR1cyAoc3IpOworCisgIGwgPSB0Yy0+Y2hfc2Zsc3Q7CisgIGlmIChmc3RhdCA9PSBDS19GT1JLKSB7CisgICAgc2VuZF9jdHhfaW5mbyAoQ0tfQ1RYX1NFVFVQKTsKKyAgfQorCisgIGZvciAobGlzdF9mcm9udCAobCk7ICFsaXN0X2F0X2VuZCAobCk7IGxpc3RfYWR2YW5jZSAobCkpIHsKKyAgICBpZiAoZnN0YXQgPT0gQ0tfTk9GT1JLKSB7CisgICAgICBzZW5kX2N0eF9pbmZvIChDS19DVFhfU0VUVVApOworICAgIH0KKyAgICBmID0gbGlzdF92YWwgKGwpOworICAgIGYtPmZ1biAoKTsKKworICAgIC8qIFN0b3AgdGhlIHNldHVwIGFuZCByZXR1cm4gdGhlIGZhaWx1cmUgaWYgbm9mb3JrIG1vZGUuICovCisgICAgaWYgKGZzdGF0ID09IENLX05PRk9SSykgeworICAgICAgdHIgPSByZWNlaXZlX3Jlc3VsdF9pbmZvX25vZm9yayAodGMtPm5hbWUsICJjaGVja2VkX3NldHVwIiwgMCk7CisgICAgICBpZiAodHItPnJ0eXBlICE9IENLX1BBU1MpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGZyZWUgKHRyLT5maWxlKTsKKyAgICAgIGZyZWUgKHRyLT5tc2cpOworICAgICAgZnJlZSAodHIpOworICAgICAgdHIgPSBOVUxMOworICAgIH0KKyAgfQorCisgIHJldHVybiB0cjsKK30KKworc3RhdGljIHZvaWQKK3NydW5uZXJfcnVuX3RlYXJkb3duIChMaXN0ICogbCkKK3sKKyAgRml4dHVyZSAqZjsKKworICBmb3IgKGxpc3RfZnJvbnQgKGwpOyAhbGlzdF9hdF9lbmQgKGwpOyBsaXN0X2FkdmFuY2UgKGwpKSB7CisgICAgZiA9IGxpc3RfdmFsIChsKTsKKyAgICBzZW5kX2N0eF9pbmZvIChDS19DVFhfVEVBUkRPV04pOworICAgIGYtPmZ1biAoKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorc3J1bm5lcl9ydW5fdW5jaGVja2VkX3RlYXJkb3duIChUQ2FzZSAqIHRjKQoreworICBzcnVubmVyX3J1bl90ZWFyZG93biAodGMtPnVuY2hfdGZsc3QpOworfQorCitzdGF0aWMgdm9pZAordGNhc2VfcnVuX2NoZWNrZWRfdGVhcmRvd24gKFRDYXNlICogdGMpCit7CisgIHNydW5uZXJfcnVuX3RlYXJkb3duICh0Yy0+Y2hfdGZsc3QpOworfQorCitzdGF0aWMgdm9pZAorc3J1bm5lcl9ydW5fdGNhc2UgKFNSdW5uZXIgKiBzciwgVENhc2UgKiB0YykKK3sKKyAgaWYgKHNydW5uZXJfcnVuX3VuY2hlY2tlZF9zZXR1cCAoc3IsIHRjKSkgeworICAgIHNydW5uZXJfaXRlcmF0ZV90Y2FzZV90ZnVucyAoc3IsIHRjKTsKKyAgICBzcnVubmVyX3J1bl91bmNoZWNrZWRfdGVhcmRvd24gKHRjKTsKKyAgfQorfQorCitzdGF0aWMgVGVzdFJlc3VsdCAqCit0Y2FzZV9ydW5fdGZ1bl9ub2ZvcmsgKFNSdW5uZXIgKiBzciwgVENhc2UgKiB0YywgVEYgKiB0ZnVuLCBpbnQgaSkKK3sKKyAgVGVzdFJlc3VsdCAqdHI7CisKKyAgdHIgPSB0Y2FzZV9ydW5fY2hlY2tlZF9zZXR1cCAoc3IsIHRjKTsKKyAgaWYgKHRyID09IE5VTEwpIHsKKyAgICB0ZnVuLT5mbiAoaSk7CisgICAgdGNhc2VfcnVuX2NoZWNrZWRfdGVhcmRvd24gKHRjKTsKKyAgICByZXR1cm4gcmVjZWl2ZV9yZXN1bHRfaW5mb19ub2ZvcmsgKHRjLT5uYW1lLCB0ZnVuLT5uYW1lLCBpKTsKKyAgfQorCisgIHJldHVybiB0cjsKK30KKworc3RhdGljIFRlc3RSZXN1bHQgKgorcmVjZWl2ZV9yZXN1bHRfaW5mb19ub2ZvcmsgKGNvbnN0IGNoYXIgKnRjbmFtZSwgY29uc3QgY2hhciAqdG5hbWUsIGludCBpdGVyKQoreworICBUZXN0UmVzdWx0ICp0cjsKKworICB0ciA9IHJlY2VpdmVfdGVzdF9yZXN1bHQgKDApOworICBpZiAodHIgPT0gTlVMTCkKKyAgICBlcHJpbnRmICgiRmFpbGVkIHRvIHJlY2VpdmUgdGVzdCByZXN1bHQiLCBfX0ZJTEVfXywgX19MSU5FX18pOworICB0ci0+dGNuYW1lID0gdGNuYW1lOworICB0ci0+dG5hbWUgPSB0bmFtZTsKKyAgdHItPml0ZXIgPSBpdGVyOworICBzZXRfbm9mb3JrX2luZm8gKHRyKTsKKworICByZXR1cm4gdHI7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfbm9mb3JrX2luZm8gKFRlc3RSZXN1bHQgKiB0cikKK3sKKyAgaWYgKHRyLT5tc2cgPT0gTlVMTCkgeworICAgIHRyLT5ydHlwZSA9IENLX1BBU1M7CisgICAgdHItPm1zZyA9IHBhc3NfbXNnICgpOworICB9IGVsc2UgeworICAgIHRyLT5ydHlwZSA9IENLX0ZBSUxVUkU7CisgIH0KK30KKworc3RhdGljIGNoYXIgKgorcGFzc19tc2cgKHZvaWQpCit7CisgIGNoYXIgKm1zZyA9IGVtYWxsb2MgKHNpemVvZiAoIlBhc3NlZCIpKTsKKyAgc3RyY3B5IChtc2csICJQYXNzZWQiKTsKKyAgcmV0dXJuIG1zZzsKK30KKworI2lmZGVmIF9QT1NJWF9WRVJTSU9OCitzdGF0aWMgVGVzdFJlc3VsdCAqCit0Y2FzZV9ydW5fdGZ1bl9mb3JrIChTUnVubmVyICogc3IsIFRDYXNlICogdGMsIFRGICogdGZ1biwgaW50IGkpCit7CisgIHBpZF90IHBpZF93OworICBwaWRfdCBwaWQ7CisgIGludCBzdGF0dXMgPSAwOworCisgIHBpZCA9IGZvcmsgKCk7CisgIGlmIChwaWQgPT0gLTEpCisgICAgZXByaW50ZiAoIkVycm9yIGluIGNhbGwgdG8gZm9yazoiLCBfX0ZJTEVfXywgX19MSU5FX18gLSAyKTsKKyAgaWYgKHBpZCA9PSAwKSB7CisgICAgc2V0cGdpZCAoMCwgMCk7CisgICAgZ3JvdXBfcGlkID0gZ2V0cGdycCAoKTsKKyAgICB0Y2FzZV9ydW5fY2hlY2tlZF9zZXR1cCAoc3IsIHRjKTsKKyAgICB0ZnVuLT5mbiAoaSk7CisgICAgdGNhc2VfcnVuX2NoZWNrZWRfdGVhcmRvd24gKHRjKTsKKyAgICBleGl0IChFWElUX1NVQ0NFU1MpOworICB9IGVsc2UgeworICAgIGdyb3VwX3BpZCA9IHBpZDsKKyAgfQorCisgIGFsYXJtX3JlY2VpdmVkID0gMDsKKyAgYWxhcm0gKHRjLT50aW1lb3V0KTsKKyAgZG8geworICAgIHBpZF93ID0gd2FpdHBpZCAocGlkLCAmc3RhdHVzLCAwKTsKKyAgfSB3aGlsZSAocGlkX3cgPT0gLTEpOworCisgIGtpbGxwZyAocGlkLCBTSUdLSUxMKTsgICAgICAgIC8qIEtpbGwgcmVtYWluaW5nIHByb2Nlc3Nlcy4gKi8KKworICByZXR1cm4gcmVjZWl2ZV9yZXN1bHRfaW5mb19mb3JrICh0Yy0+bmFtZSwgdGZ1bi0+bmFtZSwgaSwgc3RhdHVzLAorICAgICAgdGZ1bi0+c2lnbmFsLCB0ZnVuLT5hbGxvd2VkX2V4aXRfdmFsdWUpOworfQorCitzdGF0aWMgVGVzdFJlc3VsdCAqCityZWNlaXZlX3Jlc3VsdF9pbmZvX2ZvcmsgKGNvbnN0IGNoYXIgKnRjbmFtZSwKKyAgICBjb25zdCBjaGFyICp0bmFtZSwKKyAgICBpbnQgaXRlciwgaW50IHN0YXR1cywgaW50IGV4cGVjdGVkX3NpZ25hbCwgdW5zaWduZWQgY2hhciBhbGxvd2VkX2V4aXRfdmFsdWUpCit7CisgIFRlc3RSZXN1bHQgKnRyOworCisgIHRyID0gcmVjZWl2ZV90ZXN0X3Jlc3VsdCAod2FzZXJyb3IgKHN0YXR1cywgZXhwZWN0ZWRfc2lnbmFsKSk7CisgIGlmICh0ciA9PSBOVUxMKQorICAgIGVwcmludGYgKCJGYWlsZWQgdG8gcmVjZWl2ZSB0ZXN0IHJlc3VsdCIsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgIHRyLT50Y25hbWUgPSB0Y25hbWU7CisgIHRyLT50bmFtZSA9IHRuYW1lOworICB0ci0+aXRlciA9IGl0ZXI7CisgIHNldF9mb3JrX2luZm8gKHRyLCBzdGF0dXMsIGV4cGVjdGVkX3NpZ25hbCwgYWxsb3dlZF9leGl0X3ZhbHVlKTsKKworICByZXR1cm4gdHI7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfZm9ya19pbmZvIChUZXN0UmVzdWx0ICogdHIsIGludCBzdGF0dXMsIGludCBzaWduYWxfZXhwZWN0ZWQsCisgICAgdW5zaWduZWQgY2hhciBhbGxvd2VkX2V4aXRfdmFsdWUpCit7CisgIGludCB3YXNfc2lnID0gV0lGU0lHTkFMRUQgKHN0YXR1cyk7CisgIGludCB3YXNfZXhpdCA9IFdJRkVYSVRFRCAoc3RhdHVzKTsKKyAgaW50IGV4aXRfc3RhdHVzID0gV0VYSVRTVEFUVVMgKHN0YXR1cyk7CisgIGludCBzaWduYWxfcmVjZWl2ZWQgPSBXVEVSTVNJRyAoc3RhdHVzKTsKKworICBpZiAod2FzX3NpZykgeworICAgIGlmIChzaWduYWxfZXhwZWN0ZWQgPT0gc2lnbmFsX3JlY2VpdmVkKSB7CisgICAgICBpZiAoYWxhcm1fcmVjZWl2ZWQpIHsKKyAgICAgICAgLyogR290IGFsYXJtIGluc3RlYWQgb2Ygc2lnbmFsICovCisgICAgICAgIHRyLT5ydHlwZSA9IENLX0VSUk9SOworICAgICAgICB0ci0+bXNnID0gc2lnbmFsX2Vycm9yX21zZyAoc2lnbmFsX3JlY2VpdmVkLCBzaWduYWxfZXhwZWN0ZWQpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdHItPnJ0eXBlID0gQ0tfUEFTUzsKKyAgICAgICAgdHItPm1zZyA9IHBhc3NfbXNnICgpOworICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2lnbmFsX2V4cGVjdGVkICE9IDApIHsKKyAgICAgIC8qIHNpZ25hbCByZWNlaXZlZCwgYnV0IG5vdCB0aGUgZXhwZWN0ZWQgb25lICovCisgICAgICB0ci0+cnR5cGUgPSBDS19FUlJPUjsKKyAgICAgIHRyLT5tc2cgPSBzaWduYWxfZXJyb3JfbXNnIChzaWduYWxfcmVjZWl2ZWQsIHNpZ25hbF9leHBlY3RlZCk7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIHNpZ25hbCByZWNlaXZlZCBhbmQgbm9uZSBleHBlY3RlZCAqLworICAgICAgdHItPnJ0eXBlID0gQ0tfRVJST1I7CisgICAgICB0ci0+bXNnID0gc2lnbmFsX21zZyAoc2lnbmFsX3JlY2VpdmVkKTsKKyAgICB9CisgIH0gZWxzZSBpZiAoc2lnbmFsX2V4cGVjdGVkID09IDApIHsKKyAgICBpZiAod2FzX2V4aXQgJiYgZXhpdF9zdGF0dXMgPT0gYWxsb3dlZF9leGl0X3ZhbHVlKSB7CisgICAgICB0ci0+cnR5cGUgPSBDS19QQVNTOworICAgICAgdHItPm1zZyA9IHBhc3NfbXNnICgpOworICAgIH0gZWxzZSBpZiAod2FzX2V4aXQgJiYgZXhpdF9zdGF0dXMgIT0gYWxsb3dlZF9leGl0X3ZhbHVlKSB7CisgICAgICBpZiAodHItPm1zZyA9PSBOVUxMKSB7ICAgIC8qIGVhcmx5IGV4aXQgKi8KKyAgICAgICAgdHItPnJ0eXBlID0gQ0tfRVJST1I7CisgICAgICAgIHRyLT5tc2cgPSBleGl0X21zZyAoZXhpdF9zdGF0dXMpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdHItPnJ0eXBlID0gQ0tfRkFJTFVSRTsKKyAgICAgIH0KKyAgICB9CisgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIGEgc2lnbmFsIHdhcyBleHBlY3RlZCBhbmQgbm9uZSByYWlzZWQgKi8KKyAgICBpZiAod2FzX2V4aXQpIHsKKyAgICAgIHRyLT5tc2cgPSBleGl0X21zZyAoZXhpdF9zdGF0dXMpOworICAgICAgaWYgKGV4aXRfc3RhdHVzID09IGFsbG93ZWRfZXhpdF92YWx1ZSkKKyAgICAgICAgdHItPnJ0eXBlID0gQ0tfRkFJTFVSRTsgLyogbm9ybWFsIGV4aXQgc3RhdHVzICovCisgICAgICBlbHNlCisgICAgICAgIHRyLT5ydHlwZSA9IENLX0ZBSUxVUkU7IC8qIGVhcmx5IGV4aXQgKi8KKyAgICB9CisgIH0KK30KKworc3RhdGljIGNoYXIgKgorc2lnbmFsX21zZyAoaW50IHNpZ25hbCkKK3sKKyAgY2hhciAqbXNnID0gZW1hbGxvYyAoTVNHX0xFTik7ICAgICAgICAvKiBmcmVlJ2QgYnkgY2FsbGVyICovCisgIGlmIChhbGFybV9yZWNlaXZlZCkgeworICAgIHNucHJpbnRmIChtc2csIE1TR19MRU4sICJUZXN0IHRpbWVvdXQgZXhwaXJlZCIpOworICB9IGVsc2UgeworICAgIHNucHJpbnRmIChtc2csIE1TR19MRU4sICJSZWNlaXZlZCBzaWduYWwgJWQgKCVzKSIsCisgICAgICAgIHNpZ25hbCwgc3Ryc2lnbmFsIChzaWduYWwpKTsKKyAgfQorICByZXR1cm4gbXNnOworfQorCitzdGF0aWMgY2hhciAqCitzaWduYWxfZXJyb3JfbXNnIChpbnQgc2lnbmFsX3JlY2VpdmVkLCBpbnQgc2lnbmFsX2V4cGVjdGVkKQoreworICBjaGFyICpzaWdfcl9zdHI7CisgIGNoYXIgKnNpZ19lX3N0cjsKKyAgY2hhciAqbXNnID0gZW1hbGxvYyAoTVNHX0xFTik7ICAgICAgICAvKiBmcmVlJ2QgYnkgY2FsbGVyICovCisgIHNpZ19yX3N0ciA9IHN0cmR1cCAoc3Ryc2lnbmFsIChzaWduYWxfcmVjZWl2ZWQpKTsKKyAgc2lnX2Vfc3RyID0gc3RyZHVwIChzdHJzaWduYWwgKHNpZ25hbF9leHBlY3RlZCkpOworICBpZiAoYWxhcm1fcmVjZWl2ZWQpIHsKKyAgICBzbnByaW50ZiAobXNnLCBNU0dfTEVOLCAiVGVzdCB0aW1lb3V0IGV4cGlyZWQsIGV4cGVjdGVkIHNpZ25hbCAlZCAoJXMpIiwKKyAgICAgICAgc2lnbmFsX2V4cGVjdGVkLCBzaWdfZV9zdHIpOworICB9IGVsc2UgeworICAgIHNucHJpbnRmIChtc2csIE1TR19MRU4sICJSZWNlaXZlZCBzaWduYWwgJWQgKCVzKSwgZXhwZWN0ZWQgJWQgKCVzKSIsCisgICAgICAgIHNpZ25hbF9yZWNlaXZlZCwgc2lnX3Jfc3RyLCBzaWduYWxfZXhwZWN0ZWQsIHNpZ19lX3N0cik7CisgIH0KKyAgZnJlZSAoc2lnX3Jfc3RyKTsKKyAgZnJlZSAoc2lnX2Vfc3RyKTsKKyAgcmV0dXJuIG1zZzsKK30KKworc3RhdGljIGNoYXIgKgorZXhpdF9tc2cgKGludCBleGl0dmFsKQoreworICBjaGFyICptc2cgPSBlbWFsbG9jIChNU0dfTEVOKTsgICAgICAgIC8qIGZyZWUnZCBieSBjYWxsZXIgKi8KKyAgc25wcmludGYgKG1zZywgTVNHX0xFTiwgIkVhcmx5IGV4aXQgd2l0aCByZXR1cm4gdmFsdWUgJWQiLCBleGl0dmFsKTsKKyAgcmV0dXJuIG1zZzsKK30KKworc3RhdGljIGludAord2FzZXJyb3IgKGludCBzdGF0dXMsIGludCBzaWduYWxfZXhwZWN0ZWQpCit7CisgIGludCB3YXNfc2lnID0gV0lGU0lHTkFMRUQgKHN0YXR1cyk7CisgIGludCB3YXNfZXhpdCA9IFdJRkVYSVRFRCAoc3RhdHVzKTsKKyAgaW50IGV4aXRfc3RhdHVzID0gV0VYSVRTVEFUVVMgKHN0YXR1cyk7CisgIGludCBzaWduYWxfcmVjZWl2ZWQgPSBXVEVSTVNJRyAoc3RhdHVzKTsKKworICByZXR1cm4gKCh3YXNfc2lnICYmIChzaWduYWxfcmVjZWl2ZWQgIT0gc2lnbmFsX2V4cGVjdGVkKSkgfHwKKyAgICAgICh3YXNfZXhpdCAmJiBleGl0X3N0YXR1cyAhPSAwKSk7Cit9CisjZW5kaWYgLyogX1BPU0lYX1ZFUlNJT04gKi8KKworZW51bSBmb3JrX3N0YXR1cworc3J1bm5lcl9mb3JrX3N0YXR1cyAoU1J1bm5lciAqIHNyKQoreworICBpZiAoc3ItPmZzdGF0ID09IENLX0ZPUktfR0VURU5WKSB7CisgICAgY2hhciAqZW52ID0gZ2V0ZW52ICgiQ0tfRk9SSyIpOworICAgIGlmIChlbnYgPT0gTlVMTCkKKyAgICAgIHJldHVybiBDS19GT1JLOworICAgIGlmIChzdHJjbXAgKGVudiwgIm5vIikgPT0gMCkKKyAgICAgIHJldHVybiBDS19OT0ZPUks7CisgICAgZWxzZSB7CisjaWZkZWYgX1BPU0lYX1ZFUlNJT04KKyAgICAgIHJldHVybiBDS19GT1JLOworI2Vsc2UgLyogX1BPU0lYX1ZFUlNJT04gKi8KKyAgICAgIGVwcmludGYgKCJUaGlzIHZlcnNpb24gZG9lcyBub3Qgc3VwcG9ydCBmb3JrIiwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgIHJldHVybiBDS19OT0ZPUks7CisjZW5kaWYgLyogX1BPU0lYX1ZFUlNJT04gKi8KKyAgICB9CisgIH0gZWxzZQorICAgIHJldHVybiBzci0+ZnN0YXQ7Cit9CisKK3ZvaWQKK3NydW5uZXJfc2V0X2Zvcmtfc3RhdHVzIChTUnVubmVyICogc3IsIGVudW0gZm9ya19zdGF0dXMgZnN0YXQpCit7CisgIHNyLT5mc3RhdCA9IGZzdGF0OworfQorCit2b2lkCitzcnVubmVyX3J1bl9hbGwgKFNSdW5uZXIgKiBzciwgZW51bSBwcmludF9vdXRwdXQgcHJpbnRfbW9kZSkKK3sKKyNpZmRlZiBfUE9TSVhfVkVSU0lPTgorICBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZF9hY3Rpb247CisgIHN0cnVjdCBzaWdhY3Rpb24gbmV3X2FjdGlvbjsKKyNlbmRpZiAvKiBfUE9TSVhfVkVSU0lPTiAqLworCisgIGlmIChzciA9PSBOVUxMKQorICAgIHJldHVybjsKKyAgaWYgKHByaW50X21vZGUgPj0gQ0tfTEFTVCkgeworICAgIGVwcmludGYgKCJCYWQgcHJpbnRfbW9kZSBhcmd1bWVudCB0byBzcnVubmVyX3J1bl9hbGw6ICVkIiwKKyAgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBwcmludF9tb2RlKTsKKyAgfQorI2lmZGVmIF9QT1NJWF9WRVJTSU9OCisgIG1lbXNldCAoJm5ld19hY3Rpb24sIDAsIHNpemVvZiBuZXdfYWN0aW9uKTsKKyAgbmV3X2FjdGlvbi5zYV9oYW5kbGVyID0gc2lnX2hhbmRsZXI7CisgIHNpZ2FjdGlvbiAoU0lHQUxSTSwgJm5ld19hY3Rpb24sICZvbGRfYWN0aW9uKTsKKyNlbmRpZiAvKiBfUE9TSVhfVkVSU0lPTiAqLworICBzcnVubmVyX3J1bl9pbml0IChzciwgcHJpbnRfbW9kZSk7CisgIHNydW5uZXJfaXRlcmF0ZV9zdWl0ZXMgKHNyLCBwcmludF9tb2RlKTsKKyAgc3J1bm5lcl9ydW5fZW5kIChzciwgcHJpbnRfbW9kZSk7CisjaWZkZWYgX1BPU0lYX1ZFUlNJT04KKyAgc2lnYWN0aW9uIChTSUdBTFJNLCAmb2xkX2FjdGlvbiwgTlVMTCk7CisjZW5kaWYgLyogX1BPU0lYX1ZFUlNJT04gKi8KK30KKworcGlkX3QKK2NoZWNrX2ZvcmsgKHZvaWQpCit7CisjaWZkZWYgX1BPU0lYX1ZFUlNJT04KKyAgcGlkX3QgcGlkID0gZm9yayAoKTsKKyAgLyogU2V0IHRoZSBwcm9jZXNzIHRvIGEgcHJvY2VzcyBncm91cCB0byBiZSBhYmxlIHRvIGtpbGwgaXQgZWFzaWx5LiAqLworICBzZXRwZ2lkIChwaWQsIGdyb3VwX3BpZCk7CisgIHJldHVybiBwaWQ7CisjZWxzZSAvKiBfUE9TSVhfVkVSU0lPTiAqLworICBlcHJpbnRmICgiVGhpcyB2ZXJzaW9uIGRvZXMgbm90IHN1cHBvcnQgZm9yayIsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgIHJldHVybiAwOworI2VuZGlmIC8qIF9QT1NJWF9WRVJTSU9OICovCit9CisKK3ZvaWQKK2NoZWNrX3dhaXRwaWRfYW5kX2V4aXQgKHBpZF90IHBpZCBDS19BVFRSSUJVVEVfVU5VU0VEKQoreworI2lmZGVmIF9QT1NJWF9WRVJTSU9OCisgIHBpZF90IHBpZF93OworICBpbnQgc3RhdHVzOworCisgIGlmIChwaWQgPiAwKSB7CisgICAgZG8geworICAgICAgcGlkX3cgPSB3YWl0cGlkIChwaWQsICZzdGF0dXMsIDApOworICAgIH0gd2hpbGUgKHBpZF93ID09IC0xKTsKKyAgICBpZiAod2FzZXJyb3IgKHN0YXR1cywgMCkpIHsKKyAgICAgIGV4aXQgKEVYSVRfRkFJTFVSRSk7CisgICAgfQorICB9CisgIGV4aXQgKEVYSVRfU1VDQ0VTUyk7CisjZWxzZSAvKiBfUE9TSVhfVkVSU0lPTiAqLworICBlcHJpbnRmICgiVGhpcyB2ZXJzaW9uIGRvZXMgbm90IHN1cHBvcnQgZm9yayIsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisjZW5kaWYgLyogX1BPU0lYX1ZFUlNJT04gKi8KK30KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3N0ci5jIGIvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfc3RyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE5NDExMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3N0ci5jCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ2hlY2s6IGEgdW5pdCB0ZXN0IGZyYW1ld29yayBmb3IgQworICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEFyaWVuIE1hbGVjCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisjaW5jbHVkZSAiY2hlY2suaCIKKyNpbmNsdWRlICJjaGVja19saXN0LmgiCisjaW5jbHVkZSAiY2hlY2tfZXJyb3IuaCIKKyNpbmNsdWRlICJjaGVja19pbXBsLmgiCisjaW5jbHVkZSAiY2hlY2tfc3RyLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICp0cl90eXBlX3N0ciAoVGVzdFJlc3VsdCAqIHRyKTsKK3N0YXRpYyBpbnQgcGVyY2VudF9wYXNzZWQgKFRlc3RTdGF0cyAqIHQpOworCitjaGFyICoKK3RyX3N0ciAoVGVzdFJlc3VsdCAqIHRyKQoreworICBjb25zdCBjaGFyICpleGFjdF9tc2c7CisgIGNoYXIgKnJzdHI7CisKKyAgZXhhY3RfbXNnID0gKHRyLT5ydHlwZSA9PSBDS19FUlJPUikgPyAiKGFmdGVyIHRoaXMgcG9pbnQpICIgOiAiIjsKKworICByc3RyID0gY2tfc3RyZHVwX3ByaW50ZiAoIiVzOiVkOiVzOiVzOiVzOiVkOiAlcyVzIiwKKyAgICAgIHRyLT5maWxlLCB0ci0+bGluZSwKKyAgICAgIHRyX3R5cGVfc3RyICh0ciksIHRyLT50Y25hbWUsIHRyLT50bmFtZSwgdHItPml0ZXIsIGV4YWN0X21zZywgdHItPm1zZyk7CisKKyAgcmV0dXJuIHJzdHI7Cit9CisKK2NoYXIgKgordHJfc2hvcnRfc3RyIChUZXN0UmVzdWx0ICogdHIpCit7CisgIGNvbnN0IGNoYXIgKmV4YWN0X21zZzsKKyAgY2hhciAqcnN0cjsKKworICBleGFjdF9tc2cgPSAodHItPnJ0eXBlID09IENLX0VSUk9SKSA/ICIoYWZ0ZXIgdGhpcyBwb2ludCkgIiA6ICIiOworCisgIHJzdHIgPSBja19zdHJkdXBfcHJpbnRmICgiJXM6JWQ6ICVzJXMiLAorICAgICAgdHItPmZpbGUsIHRyLT5saW5lLCBleGFjdF9tc2csIHRyLT5tc2cpOworCisgIHJldHVybiByc3RyOworfQorCitjaGFyICoKK3NyX3N0YXRfc3RyIChTUnVubmVyICogc3IpCit7CisgIGNoYXIgKnN0cjsKKyAgVGVzdFN0YXRzICp0czsKKworICB0cyA9IHNyLT5zdGF0czsKKworICBzdHIgPSBja19zdHJkdXBfcHJpbnRmICgiJWQlJTogQ2hlY2tzOiAlZCwgRmFpbHVyZXM6ICVkLCBFcnJvcnM6ICVkIiwKKyAgICAgIHBlcmNlbnRfcGFzc2VkICh0cyksIHRzLT5uX2NoZWNrZWQsIHRzLT5uX2ZhaWxlZCwgdHMtPm5fZXJyb3JzKTsKKworICByZXR1cm4gc3RyOworfQorCitjaGFyICoKK2NrX3N0cmR1cF9wcmludGYgKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICAvKiBHdWVzcyB3ZSBuZWVkIG5vIG1vcmUgdGhhbiAxMDAgYnl0ZXMuICovCisgIGludCBuLCBzaXplID0gMTAwOworICBjaGFyICpwOworICB2YV9saXN0IGFwOworCisgIHAgPSBlbWFsbG9jIChzaXplKTsKKworICB3aGlsZSAoMSkgeworICAgIC8qIFRyeSB0byBwcmludCBpbiB0aGUgYWxsb2NhdGVkIHNwYWNlLiAqLworICAgIHZhX3N0YXJ0IChhcCwgZm10KTsKKyAgICBuID0gdnNucHJpbnRmIChwLCBzaXplLCBmbXQsIGFwKTsKKyAgICB2YV9lbmQgKGFwKTsKKyAgICAvKiBJZiB0aGF0IHdvcmtlZCwgcmV0dXJuIHRoZSBzdHJpbmcuICovCisgICAgaWYgKG4gPiAtMSAmJiBuIDwgc2l6ZSkKKyAgICAgIHJldHVybiBwOworCisgICAgLyogRWxzZSB0cnkgYWdhaW4gd2l0aCBtb3JlIHNwYWNlLiAqLworICAgIGlmIChuID4gLTEpICAgICAgICAgICAgICAgICAvKiBDOTkgY29uZm9ybSB2c25wcmludGYoKSAqLworICAgICAgc2l6ZSA9IG4gKyAxOyAgICAgICAgICAgICAvKiBwcmVjaXNlbHkgd2hhdCBpcyBuZWVkZWQgKi8KKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgLyogZ2xpYmMgMi4wICovCisgICAgICBzaXplICo9IDI7ICAgICAgICAgICAgICAgIC8qIHR3aWNlIHRoZSBvbGQgc2l6ZSAqLworCisgICAgcCA9IGVyZWFsbG9jIChwLCBzaXplKTsKKyAgfQorfQorCitzdGF0aWMgY29uc3QgY2hhciAqCit0cl90eXBlX3N0ciAoVGVzdFJlc3VsdCAqIHRyKQoreworICBjb25zdCBjaGFyICpzdHIgPSBOVUxMOworICBpZiAodHItPmN0eCA9PSBDS19DVFhfVEVTVCkgeworICAgIGlmICh0ci0+cnR5cGUgPT0gQ0tfUEFTUykKKyAgICAgIHN0ciA9ICJQIjsKKyAgICBlbHNlIGlmICh0ci0+cnR5cGUgPT0gQ0tfRkFJTFVSRSkKKyAgICAgIHN0ciA9ICJGIjsKKyAgICBlbHNlIGlmICh0ci0+cnR5cGUgPT0gQ0tfRVJST1IpCisgICAgICBzdHIgPSAiRSI7CisgIH0gZWxzZQorICAgIHN0ciA9ICJTIjsKKworICByZXR1cm4gc3RyOworfQorCitzdGF0aWMgaW50CitwZXJjZW50X3Bhc3NlZCAoVGVzdFN0YXRzICogdCkKK3sKKyAgaWYgKHQtPm5fZmFpbGVkID09IDAgJiYgdC0+bl9lcnJvcnMgPT0gMCkKKyAgICByZXR1cm4gMTAwOworICBlbHNlIGlmICh0LT5uX2NoZWNrZWQgPT0gMCkKKyAgICByZXR1cm4gMDsKKyAgZWxzZQorICAgIHJldHVybiAoaW50KSAoKGZsb2F0KSAodC0+bl9jaGVja2VkIC0gKHQtPm5fZmFpbGVkICsgdC0+bl9lcnJvcnMpKSAvCisgICAgICAgIChmbG9hdCkgdC0+bl9jaGVja2VkICogMTAwKTsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3N0ci5oIGIvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfc3RyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ0MTA1NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3N0ci5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDaGVjazogYSB1bml0IHRlc3QgZnJhbWV3b3JrIGZvciBDCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgQXJpZW4gTWFsZWMKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgQ0hFQ0tfU1RSX0gKKyNkZWZpbmUgQ0hFQ0tfU1RSX0gKKworLyogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBUZXN0UmVzdWx0LiAgUmV0dXJuCisgICB2YWx1ZSBoYXMgYmVlbiBtYWxsb2MnZCwgYW5kIG11c3QgYmUgZnJlZWQgYnkgdGhlIGNhbGxlciAqLworY2hhciAqdHJfc3RyIChUZXN0UmVzdWx0ICp0cik7CisKKy8qIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gVGVzdFJlc3VsdCBtZXNzYWdlCisgICB3aXRob3V0IHRoZSB0ZXN0IGlkIG9yIHJlc3VsdCB0eXBlLiBUaGlzIGlzIHN1aXRhYmxlIGZvciBzZXBhcmF0ZQorICAgZm9ybWF0dGluZyBvZiB0aGUgdGVzdCBhbmQgdGhlIG1lc3NhZ2UuIFJldHVybiB2YWx1ZSBoYXMgYmVlbiAKKyAgIG1hbGxvYydkLCBhbmQgbXVzdCBiZSBmcmVlZCBieSB0aGUgY2FsbGVyICovCitjaGFyICp0cl9zaG9ydF9zdHIgKFRlc3RSZXN1bHQgKnRyKTsKKworLyogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBTUnVubmVyJ3MgcnVuCisgICBzdGF0aXN0aWNzICglIHBhc3NlZCwgbnVtIHJ1biwgcGFzc2VkLCBlcnJvcnMsIGZhaWx1cmVzKS4gUmV0dXJuCisgICB2YWx1ZSBoYXMgYmVlbiBtYWxsb2MnZCwgYW5kIG11c3QgYmUgZnJlZWQgYnkgdGhlIGNhbGxlcgorKi8gCitjaGFyICpzcl9zdGF0X3N0ciAoU1J1bm5lciAqc3IpOworCitjaGFyICpja19zdHJkdXBfcHJpbnRmIChjb25zdCBjaGFyICpmbXQsIC4uLik7CisKKyNlbmRpZiAvKiBDSEVDS19TVFJfSCAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbSBiL2xpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EyOGVlNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw5MiBAQAorbGliX0xUTElCUkFSSUVTID0gbGliZ3N0Y29udHJvbGxlci1AR1NUX01BSk9STUlOT1JALmxhCisKK2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9pbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9nc3RyZWFtZXItQEdTVF9NQUpPUk1JTk9SQC9nc3QvY29udHJvbGxlcgorbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVfSEVBREVSUyA9IFwKKwlnc3Rjb250cm9sbGVyLmggXAorCWdzdGNvbnRyb2xzb3VyY2UuaCBcCisJZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuaCBcCisJZ3N0bGZvY29udHJvbHNvdXJjZS5oCisKK25vaW5zdF9IRUFERVJTID0gXAorCWdzdGNvbnRyb2xsZXJwcml2YXRlLmggXAorCWdzdGludGVycG9sYXRpb25jb250cm9sc291cmNlcHJpdmF0ZS5oIFwKKwlnc3RsZm9jb250cm9sc291cmNlcHJpdmF0ZS5oCisKK2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9TT1VSQ0VTID0gXAorCWxpYi5jIFwKKwlnc3Rjb250cm9sbGVyLmMgXAorCWdzdGludGVycG9sYXRpb24uYyBcCisJZ3N0aGVscGVyLmMgXAorCWdzdGNvbnRyb2xzb3VyY2UuYyBcCisJZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYyBcCisJZ3N0bGZvY29udHJvbHNvdXJjZS5jCisKK2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQorbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhX0xJQkFERCA9ICQoR1NUX09CSl9MSUJTKSAkKExJQk0pCitsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfTERGTEFHUyA9ICQoR1NUX0xJQl9MREZMQUdTKSAkKEdTVF9BTExfTERGTEFHUykgJChHU1RfTFRfTERGTEFHUykKKworQ0xFQU5GSUxFUyA9ICouZ2NubyAqLmdjZGEgKi5nY292CisKKyUuYy5nY292OiAubGlicy9saWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtJS5nY2RhICUuYworCSQoR0NPVikgLWIgLWYgLW8gJF4gPiAkQC5vdXQKKworZ2NvdjogJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfU09VUkNFUzo9Lmdjb3YpCisKK0FuZHJvaWQubWs6IE1ha2VmaWxlLmFtCisJYW5kcm9nZW5pemVyIC06UFJPSkVDVCBnc3RyZWFtZXIgLTpTSEFSRUQgbGliZ3N0Y29udHJvbGxlci1AR1NUX01BSk9STUlOT1JAIC06VEFHUyBlbmcgZGVidWcgXAorCSAtOlJFTF9UT1AgJCh0b3Bfc3JjZGlyKSAtOkFCU19UT1AgJChhYnNfdG9wX3NyY2RpcikgXAorCSAtOlNPVVJDRVMgJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfU09VUkNFUykgXAorCSAtOkNGTEFHUyAkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpIFwKKwkgLTpMREZMQUdTICQobGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhX0xERkxBR1MpIFwKKwkgICAgICAgICAgICQobGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhX0xJQkFERCkgXAorCSAtOkhFQURFUl9UQVJHRVQgZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAvZ3N0L2NvbnRyb2xsZXIgXAorCSAtOkhFQURFUlMgJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZV9IRUFERVJTKSBcCisJIC06UEFTU1RIUk9VR0ggTE9DQUxfQVJNX01PREU6PWFybSBcCisJPiAkQAorCitpZiBIQVZFX0lOVFJPU1BFQ1RJT04KK0JVSUxUX0dJUlNPVVJDRVMgPSBHc3RDb250cm9sbGVyLUBHU1RfTUFKT1JNSU5PUkAuZ2lyCisKK2dpcl9oZWFkZXJzPSQocGF0c3Vic3QgJSwkKHNyY2RpcikvJSwgJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZV9IRUFERVJTKSkKK2dpcl9zb3VyY2VzPSQocGF0c3Vic3QgJSwkKHNyY2RpcikvJSwgJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfU09VUkNFUykpCitnaXJfY2luY2x1ZGVzPSQocGF0c3Vic3QgJSwtLWMtaW5jbHVkZT0nZ3N0L2NvbnRyb2xsZXIvJScsJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZV9IRUFERVJTKSkKKworR3N0Q29udHJvbGxlci1AR1NUX01BSk9STUlOT1JALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdGNvbnRyb2xsZXItQEdTVF9NQUpPUk1JTk9SQC5sYQorCSQoQU1fVl9HRU4pUEtHX0NPTkZJR19QQVRIPSIkKEdTVF9QS0dfQ09ORklHX1BBVEgpIiBcCisJCUdTVF9QTFVHSU5fU1lTVEVNX1BBVEg9IiIgR1NUX1BMVUdJTl9QQVRIPSIiIEdTVF9SRUdJU1RSWV9VUERBVEU9bm8gXAorCQkkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgLXYgLS1uYW1lc3BhY2UgR3N0Q29udHJvbGxlciBcCisJCS0tbnN2ZXJzaW9uPUBHU1RfTUFKT1JNSU5PUkAgXAorCQktLXN0cmlwLXByZWZpeD1Hc3QgXAorCQktREdTVF9VU0VfVU5TVEFCTEVfQVBJIFwKKwkJLUkkKHRvcF9zcmNkaXIpIFwKKwkJLUkkKHRvcF9zcmNkaXIpL2xpYnMgXAorCQktSSQodG9wX2J1aWxkZGlyKSBcCisJCS1JJCh0b3BfYnVpbGRkaXIpL2xpYnMgXAorCQkkKGdpcl9jaW5jbHVkZXMpIFwKKwkJLS1hZGQtaW5jbHVkZS1wYXRoPSQodG9wX2J1aWxkZGlyKS9nc3QgXAorCQktLWxpYnJhcnktcGF0aD0kKHRvcF9idWlsZGRpcikvZ3N0IFwKKwkJLS1saWJyYXJ5PSQodG9wX2J1aWxkZGlyKS9nc3QvbGliZ3N0cmVhbWVyLTAuMTEubGEgXAorCQktLWxpYnJhcnk9bGliZ3N0Y29udHJvbGxlci0wLjExLmxhIFwKKwkJLS1pbmNsdWRlPUdzdC0wLjExIFwKKwkJLS1saWJ0b29sPSIkKHRvcF9idWlsZGRpcikvbGlidG9vbCIgXAorCQktLXBrZyBnc3RyZWFtZXItQEdTVF9NQUpPUk1JTk9SQCBcCisJCS0tcGtnLWV4cG9ydCBnc3RyZWFtZXItY29udHJvbGxlci1AR1NUX01BSk9STUlOT1JAIFwKKwkJLS1hZGQtaW5pdC1zZWN0aW9uPSJnc3RfaW5pdChOVUxMLE5VTEwpOyIgXAorCQktLW91dHB1dCAkQCBcCisJCSQoZ2lyX2hlYWRlcnMpIFwKKwkJJChnaXJfc291cmNlcykKKworIyBJTlRST1NQRUNUSU9OX0dJUkRJUi9JTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgYXJlbid0IHRoZSByaWdodCBwbGFjZSB0bworIyBpbnN0YWxsIGFueXRoaW5nIC0gd2UgbmVlZCB0byBpbnN0YWxsIGluc2lkZSBvdXIgcHJlZml4LgorZ2lyZGlyID0gJChkYXRhZGlyKS9naXItMS4wCitnaXJfREFUQSA9ICQoQlVJTFRfR0lSU09VUkNFUykKKwordHlwZWxpYnNkaXIgPSAkKGxpYmRpcikvZ2lyZXBvc2l0b3J5LTEuMC8KKwordHlwZWxpYnNfREFUQSA9ICQoQlVJTFRfR0lSU09VUkNFUzouZ2lyPS50eXBlbGliKQorCislLnR5cGVsaWI6ICUuZ2lyICQoSU5UUk9TUEVDVElPTl9DT01QSUxFUikKKwkkKEFNX1ZfR0VOKSQoSU5UUk9TUEVDVElPTl9DT01QSUxFUikgLS1pbmNsdWRlZGlyPSQoc3JjZGlyKSAtLWluY2x1ZGVkaXI9JChidWlsZGRpcikgLS1pbmNsdWRlZGlyPSQodG9wX2J1aWxkZGlyKS9nc3QgJChJTlRST1NQRUNUSU9OX0NPTVBJTEVSX09QVFMpICQ8IC1vICQoQEYpCisKK0NMRUFORklMRVMgKz0gJChCVUlMVF9HSVJTT1VSQ0VTKSAkKHR5cGVsaWJzX0RBVEEpCitlbmRpZgpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5pbiBiL2xpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRkMjE0ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw5NDkgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKworCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAYW1fX2FwcGVuZF8xID0gJChCVUlMVF9HSVJTT1VSQ0VTKSAkKHR5cGVsaWJzX0RBVEEpCitzdWJkaXIgPSBsaWJzL2dzdC9jb250cm9sbGVyCitESVNUX0NPTU1PTiA9ICQobGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVfSEVBREVSUykgXAorCSQobm9pbnN0X0hFQURFUlMpICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1weXRob24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXNjcnViLWluY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbF9tYXggPSA0MAorYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKKyAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorYW1fX25vYmFzZV9zdHJpcCA9IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCithbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisgIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCisgICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisgICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCisgICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworYW1fX2Jhc2VfbGlzdCA9IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGxpYmRpcikiICIkKERFU1RESVIpJChnaXJkaXIpIiBcCisJIiQoREVTVERJUikkKHR5cGVsaWJzZGlyKSIgXAorCSIkKERFU1RESVIpJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZWRpcikiCitMVExJQlJBUklFUyA9ICQobGliX0xUTElCUkFSSUVTKQorYW1fX0RFUEVOREVOQ0lFU18xID0KK2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9ERVBFTkRFTkNJRVMgPSAgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2FtX2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9PQkpFQ1RTID0gIFwKKwlsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtbGliLmxvIFwKKwlsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Y29udHJvbGxlci5sbyBcCisJbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGludGVycG9sYXRpb24ubG8gXAorCWxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RoZWxwZXIubG8gXAorCWxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3Rjb250cm9sc291cmNlLmxvIFwKKwlsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UubG8gXAorCWxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RsZm9jb250cm9sc291cmNlLmxvCitsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfT0JKRUNUUyA9ICBcCisJJChhbV9saWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfT0JKRUNUUykKK0FNX1ZfbHQgPSAkKGFtX192X2x0XyQoVikpCithbV9fdl9sdF8gPSAkKGFtX192X2x0XyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfbHRfMCA9IC0tc2lsZW50CitsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSBcCisJLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCisJJChDQ0xEKSAkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpIFwKKwkkKENGTEFHUykgJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKwkkKEFNX0NGTEFHUykgJChDRkxBR1MpCitBTV9WX0NDID0gJChhbV9fdl9DQ18kKFYpKQorYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ18kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAiICRAOworQU1fVl9hdCA9ICQoYW1fX3ZfYXRfJChWKSkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9hdF8wID0gQAorQ0NMRCA9ICQoQ0MpCitMSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitBTV9WX0NDTEQgPSAkKGFtX192X0NDTERfJChWKSkKK2FtX192X0NDTERfID0gJChhbV9fdl9DQ0xEXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgIiAkQDsKK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fJChWKSkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgIiAkQDsKK1NPVVJDRVMgPSAkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfU09VUkNFUykKK0RBVEEgPSAkKGdpcl9EQVRBKSAkKHR5cGVsaWJzX0RBVEEpCitIRUFERVJTID0gJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZV9IRUFERVJTKSBcCisJJChub2luc3RfSEVBREVSUykKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVMgPSBAQVNACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JJU09OX1BBVEggPSBAQklTT05fUEFUSEAKK0NBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKK0NBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACitDQyA9IEBDQ0AKK0NDQVMgPSBAQ0NBU0AKK0NDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAorQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAorQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAorQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAorQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRBRElSID0gQERBVEFESVJACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACitETExUT09MID0gQERMTFRPT0xACitET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAorRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKK0VYRUVYVCA9IEBFWEVFWFRACitGRkxBR1MgPSBARkZMQUdTQAorRkdSRVAgPSBARkdSRVBACitGTEVYX1BBVEggPSBARkxFWF9QQVRIQAorR0NPViA9IEBHQ09WQAorR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACitHQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAorR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACitHTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKK0dMSUJfTElCUyA9IEBHTElCX0xJQlNACitHTElCX09OTFlfQ0ZMQUdTID0gQEdMSUJfT05MWV9DRkxBR1NACitHTElCX09OTFlfTElCUyA9IEBHTElCX09OTFlfTElCU0AKK0dMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAorR0xJQl9SRVEgPSBAR0xJQl9SRVFACitHTVBfTElCUyA9IEBHTVBfTElCU0AKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAorR1JFUCA9IEBHUkVQQAorR1NMX0xJQlMgPSBAR1NMX0xJQlNACitHU1RfQUdFID0gQEdTVF9BR0VACitHU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKK0dTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKK0dTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACitHU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAorR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACitHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FQAorR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAorR1NUX0RJU0FCTEVfTkVUX0RFRklORSA9IEBHU1RfRElTQUJMRV9ORVRfREVGSU5FQAorR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKK0dTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACitHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACitHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAorR1NUX0RJU0FCTEVfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1RSQUNFX0RFRklORUAKK0dTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkUgPSBAR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORUAKK0dTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkUgPSBAR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORUAKK0dTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FID0gQEdTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FQAorR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACitHU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKK0dTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACitHU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKK0dTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAorR1NUX01BSk9STUlOT1IgPSBAR1NUX01BSk9STUlOT1JACitHU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKK0dTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKK0dTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACitHU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKK0dTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKK0dTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKK0dTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACitHU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACitHU1RfUEtHX0RFUFMgPSBAR1NUX1BLR19ERVBTQAorR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKK0dTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgPSBAR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFREAKK0dTVF9QUklOVEZfRVhURU5TSU9OX1BPSU5URVJfRk9STUFUX0RFRklORSA9IEBHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkVACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FQAorR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAorR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKK0dTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OX0RFRklORSA9IEBHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkVACitHVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAorSEFWRV9ET0NCT09LMkhUTUwgPSBASEFWRV9ET0NCT09LMkhUTUxACitIQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAorSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAorSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAorSEFWRV9GSUcyREVWID0gQEhBVkVfRklHMkRFVkAKK0hBVkVfR01QID0gQEhBVkVfR01QQAorSEFWRV9HU0wgPSBASEFWRV9HU0xACitIQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAorSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAorSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKK0hBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAorSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKK0hPU1RfQ1BVID0gQEhPU1RfQ1BVQAorSFRNTF9ESVIgPSBASFRNTF9ESVJACitJTkVUX0FUT05fTElCUyA9IEBJTkVUX0FUT05fTElCU0AKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACitJTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKK0lOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKK0lOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKK0lOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAorSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKK0lOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKK0lOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACitJTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJESVIgPSBATElCRElSQAorTElCSUNPTlYgPSBATElCSUNPTlZACitMSUJJTlRMID0gQExJQklOVExACitMSUJNID0gQExJQk1ACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMT0NBTEVESVIgPSBATE9DQUxFRElSQAorTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAorTFRMSUJJTlRMID0gQExUTElCSU5UTEAKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUlOVCA9IEBNQUlOVEAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKK01TR01FUkdFID0gQE1TR01FUkdFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKK1BBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACitQQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAorUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACitQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BMVUdJTkRJUiA9IEBQTFVHSU5ESVJACitQT1NVQiA9IEBQT1NVQkAKK1BST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAorUFlUSE9OID0gQFBZVEhPTkAKK1BZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACitQWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAorUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAorUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1ZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACitWQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACitWQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACitWRVJTSU9OID0gQFZFUlNJT05ACitXQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKK1dJTjMyX0xJQlMgPSBAV0lOMzJfTElCU0AKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKK1hHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKK1hNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAorWFNMVFBST0MgPSBAWFNMVFBST0NACitYU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3BrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACitwa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAorcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3B5ZXhlY2RpciA9IEBweWV4ZWNkaXJACitweXRob25kaXIgPSBAcHl0aG9uZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitsaWJfTFRMSUJSQVJJRVMgPSBsaWJnc3Rjb250cm9sbGVyLUBHU1RfTUFKT1JNSU5PUkAubGEKK2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9pbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9nc3RyZWFtZXItQEdTVF9NQUpPUk1JTk9SQC9nc3QvY29udHJvbGxlcgorbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVfSEVBREVSUyA9IFwKKwlnc3Rjb250cm9sbGVyLmggXAorCWdzdGNvbnRyb2xzb3VyY2UuaCBcCisJZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuaCBcCisJZ3N0bGZvY29udHJvbHNvdXJjZS5oCisKK25vaW5zdF9IRUFERVJTID0gXAorCWdzdGNvbnRyb2xsZXJwcml2YXRlLmggXAorCWdzdGludGVycG9sYXRpb25jb250cm9sc291cmNlcHJpdmF0ZS5oIFwKKwlnc3RsZm9jb250cm9sc291cmNlcHJpdmF0ZS5oCisKK2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9TT1VSQ0VTID0gXAorCWxpYi5jIFwKKwlnc3Rjb250cm9sbGVyLmMgXAorCWdzdGludGVycG9sYXRpb24uYyBcCisJZ3N0aGVscGVyLmMgXAorCWdzdGNvbnRyb2xzb3VyY2UuYyBcCisJZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYyBcCisJZ3N0bGZvY29udHJvbHNvdXJjZS5jCisKK2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQorbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhX0xJQkFERCA9ICQoR1NUX09CSl9MSUJTKSAkKExJQk0pCitsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfTERGTEFHUyA9ICQoR1NUX0xJQl9MREZMQUdTKSAkKEdTVF9BTExfTERGTEFHUykgJChHU1RfTFRfTERGTEFHUykKK0NMRUFORklMRVMgPSAqLmdjbm8gKi5nY2RhICouZ2NvdiAkKGFtX19hcHBlbmRfMSkKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBCVUlMVF9HSVJTT1VSQ0VTID0gR3N0Q29udHJvbGxlci1AR1NUX01BSk9STUlOT1JALmdpcgorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQGdpcl9oZWFkZXJzID0gJChwYXRzdWJzdCAlLCQoc3JjZGlyKS8lLCAkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9pbmNsdWRlX0hFQURFUlMpKQorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQGdpcl9zb3VyY2VzID0gJChwYXRzdWJzdCAlLCQoc3JjZGlyKS8lLCAkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9TT1VSQ0VTKSkKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBnaXJfY2luY2x1ZGVzID0gJChwYXRzdWJzdCAlLC0tYy1pbmNsdWRlPSdnc3QvY29udHJvbGxlci8lJywkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9pbmNsdWRlX0hFQURFUlMpKQorCisjIElOVFJPU1BFQ1RJT05fR0lSRElSL0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiBhcmVuJ3QgdGhlIHJpZ2h0IHBsYWNlIHRvCisjIGluc3RhbGwgYW55dGhpbmcgLSB3ZSBuZWVkIHRvIGluc3RhbGwgaW5zaWRlIG91ciBwcmVmaXguCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAZ2lyZGlyID0gJChkYXRhZGlyKS9naXItMS4wCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAZ2lyX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVMpCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAdHlwZWxpYnNkaXIgPSAkKGxpYmRpcikvZ2lyZXBvc2l0b3J5LTEuMC8KK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUB0eXBlbGlic19EQVRBID0gJChCVUlMVF9HSVJTT1VSQ0VTOi5naXI9LnR5cGVsaWIpCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251IGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CitpbnN0YWxsLWxpYkxUTElCUkFSSUVTOiAkKGxpYl9MVExJQlJBUklFUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGxpYmRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGxpYmRpcikiCisJQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQobGliZGlyKSIgfHwgbGlzdD07IFwKKwlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAorCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCisJICBlbHNlIDo7IGZpOyBcCisJZG9uZTsgXAorCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAorCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChsaWJkaXIpJyI7IFwKKwkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChsaWJkaXIpIjsgXAorCX0KKwordW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQobGliZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgICQoYW1fX3N0cmlwX2RpcikgXAorCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChsaWJkaXIpLyQkZiciOyBcCisJICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQobGliZGlyKS8kJGYiOyBcCisJZG9uZQorCitjbGVhbi1saWJMVExJQlJBUklFUzoKKwktdGVzdCAteiAiJChsaWJfTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKGxpYl9MVExJQlJBUklFUykKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBkaXI9ImBlY2hvICQkcCB8IHNlZCAtZSAnc3wvW14vXSokJHx8J2AiOyBcCisJICB0ZXN0ICIkJGRpciIgIT0gIiQkcCIgfHwgZGlyPS47IFwKKwkgIGVjaG8gInJtIC1mIFwiJCR7ZGlyfS9zb19sb2NhdGlvbnNcIiI7IFwKKwkgIHJtIC1mICIkJHtkaXJ9L3NvX2xvY2F0aW9ucyI7IFwKKwlkb25lCitsaWJnc3Rjb250cm9sbGVyLUBHU1RfTUFKT1JNSU5PUkAubGE6ICQobGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhX09CSkVDVFMpICQobGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhX0RFUEVOREVOQ0lFUykgCisJJChBTV9WX0NDTEQpJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfTElOSykgLXJwYXRoICQobGliZGlyKSAkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9PQkpFQ1RTKSAkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9MSUJBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3Rjb250cm9sbGVyLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNvbnRyb2xzb3VyY2UuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0aGVscGVyLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGludGVycG9sYXRpb24uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bGZvY29udHJvbHNvdXJjZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1saWIuUGxvQGFtX19xdW90ZUAKKworLmMubzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgJDwKKworLmMub2JqOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisKK2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1saWIubG86IGxpYi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtbGliLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtbGliLlRwbyAtYyAtbyBsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtbGliLmxvIGB0ZXN0IC1mICdsaWIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbGliLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1saWIuVHBvICQoREVQRElSKS9saWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtbGliLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2xpYi5jJyBvYmplY3Q9J2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1saWIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhLWxpYi5sbyBgdGVzdCAtZiAnbGliLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGxpYi5jCisKK2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3Rjb250cm9sbGVyLmxvOiBnc3Rjb250cm9sbGVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3Rjb250cm9sbGVyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Y29udHJvbGxlci5UcG8gLWMgLW8gbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNvbnRyb2xsZXIubG8gYHRlc3QgLWYgJ2dzdGNvbnRyb2xsZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Y29udHJvbGxlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Y29udHJvbGxlci5UcG8gJChERVBESVIpL2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3Rjb250cm9sbGVyLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdGNvbnRyb2xsZXIuYycgb2JqZWN0PSdsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Y29udHJvbGxlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Y29udHJvbGxlci5sbyBgdGVzdCAtZiAnZ3N0Y29udHJvbGxlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rjb250cm9sbGVyLmMKKworbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGludGVycG9sYXRpb24ubG86IGdzdGludGVycG9sYXRpb24uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGludGVycG9sYXRpb24ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RpbnRlcnBvbGF0aW9uLlRwbyAtYyAtbyBsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0aW50ZXJwb2xhdGlvbi5sbyBgdGVzdCAtZiAnZ3N0aW50ZXJwb2xhdGlvbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RpbnRlcnBvbGF0aW9uLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RpbnRlcnBvbGF0aW9uLlRwbyAkKERFUERJUikvbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGludGVycG9sYXRpb24uUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0aW50ZXJwb2xhdGlvbi5jJyBvYmplY3Q9J2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RpbnRlcnBvbGF0aW9uLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RpbnRlcnBvbGF0aW9uLmxvIGB0ZXN0IC1mICdnc3RpbnRlcnBvbGF0aW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGludGVycG9sYXRpb24uYworCitsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0aGVscGVyLmxvOiBnc3RoZWxwZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGhlbHBlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGhlbHBlci5UcG8gLWMgLW8gbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGhlbHBlci5sbyBgdGVzdCAtZiAnZ3N0aGVscGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGhlbHBlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0aGVscGVyLlRwbyAkKERFUERJUikvbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGhlbHBlci5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RoZWxwZXIuYycgb2JqZWN0PSdsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0aGVscGVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RoZWxwZXIubG8gYHRlc3QgLWYgJ2dzdGhlbHBlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RoZWxwZXIuYworCitsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Y29udHJvbHNvdXJjZS5sbzogZ3N0Y29udHJvbHNvdXJjZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Y29udHJvbHNvdXJjZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNvbnRyb2xzb3VyY2UuVHBvIC1jIC1vIGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3Rjb250cm9sc291cmNlLmxvIGB0ZXN0IC1mICdnc3Rjb250cm9sc291cmNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGNvbnRyb2xzb3VyY2UuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNvbnRyb2xzb3VyY2UuVHBvICQoREVQRElSKS9saWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0Y29udHJvbHNvdXJjZS5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3Rjb250cm9sc291cmNlLmMnIG9iamVjdD0nbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNvbnRyb2xzb3VyY2UubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGNvbnRyb2xzb3VyY2UubG8gYHRlc3QgLWYgJ2dzdGNvbnRyb2xzb3VyY2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Y29udHJvbHNvdXJjZS5jCisKK2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5sbzogZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuVHBvIC1jIC1vIGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5sbyBgdGVzdCAtZiAnZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLlRwbyAkKERFUERJUikvbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmMnIG9iamVjdD0nbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5sbyBgdGVzdCAtZiAnZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYworCitsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bGZvY29udHJvbHNvdXJjZS5sbzogZ3N0bGZvY29udHJvbHNvdXJjZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bGZvY29udHJvbHNvdXJjZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGxmb2NvbnRyb2xzb3VyY2UuVHBvIC1jIC1vIGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RsZm9jb250cm9sc291cmNlLmxvIGB0ZXN0IC1mICdnc3RsZm9jb250cm9sc291cmNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGxmb2NvbnRyb2xzb3VyY2UuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGxmb2NvbnRyb2xzb3VyY2UuVHBvICQoREVQRElSKS9saWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bGZvY29udHJvbHNvdXJjZS5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RsZm9jb250cm9sc291cmNlLmMnIG9iamVjdD0nbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGxmb2NvbnRyb2xzb3VyY2UubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhLWdzdGxmb2NvbnRyb2xzb3VyY2UubG8gYHRlc3QgLWYgJ2dzdGxmb2NvbnRyb2xzb3VyY2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0bGZvY29udHJvbHNvdXJjZS5jCisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCitpbnN0YWxsLWdpckRBVEE6ICQoZ2lyX0RBVEEpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChnaXJkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChnaXJkaXIpIgorCUBsaXN0PSckKGdpcl9EQVRBKSc7IHRlc3QgLW4gIiQoZ2lyZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChnaXJkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChnaXJkaXIpIiB8fCBleGl0ICQkPzsgXAorCWRvbmUKKwordW5pbnN0YWxsLWdpckRBVEE6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChnaXJfREFUQSknOyB0ZXN0IC1uICIkKGdpcmRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwl0ZXN0IC1uICIkJGZpbGVzIiB8fCBleGl0IDA7IFwKKwllY2hvICIgKCBjZCAnJChERVNURElSKSQoZ2lyZGlyKScgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisJY2QgIiQoREVTVERJUikkKGdpcmRpcikiICYmIHJtIC1mICQkZmlsZXMKK2luc3RhbGwtdHlwZWxpYnNEQVRBOiAkKHR5cGVsaWJzX0RBVEEpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJCh0eXBlbGlic2RpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKHR5cGVsaWJzZGlyKSIKKwlAbGlzdD0nJCh0eXBlbGlic19EQVRBKSc7IHRlc3QgLW4gIiQodHlwZWxpYnNkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKHR5cGVsaWJzZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQodHlwZWxpYnNkaXIpIiB8fCBleGl0ICQkPzsgXAorCWRvbmUKKwordW5pbnN0YWxsLXR5cGVsaWJzREFUQToKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKHR5cGVsaWJzX0RBVEEpJzsgdGVzdCAtbiAiJCh0eXBlbGlic2RpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwl0ZXN0IC1uICIkJGZpbGVzIiB8fCBleGl0IDA7IFwKKwllY2hvICIgKCBjZCAnJChERVNURElSKSQodHlwZWxpYnNkaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQodHlwZWxpYnNkaXIpIiAmJiBybSAtZiAkJGZpbGVzCitpbnN0YWxsLWxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9pbmNsdWRlSEVBREVSUzogJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZV9IRUFERVJTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQobGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZWRpcikiCisJQGxpc3Q9JyQobGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVfSEVBREVSUyknOyB0ZXN0IC1uICIkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9pbmNsdWRlZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgJyQoREVTVERJUikkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9pbmNsdWRlZGlyKSciOyBcCisJICAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICIkKERFU1RESVIpJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZWRpcikiIHx8IGV4aXQgJCQ/OyBcCisJZG9uZQorCit1bmluc3RhbGwtbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVIRUFERVJTOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQobGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVfSEVBREVSUyknOyB0ZXN0IC1uICIkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9pbmNsdWRlZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAorCXRlc3QgLW4gIiQkZmlsZXMiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiAoIGNkICckKERFU1RESVIpJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZWRpciknICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorCWNkICIkKERFU1RESVIpJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZWRpcikiICYmIHJtIC1mICQkZmlsZXMKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChEQVRBKSAkKEhFQURFUlMpCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChsaWJkaXIpIiAiJChERVNURElSKSQoZ2lyZGlyKSIgIiQoREVTVERJUikkKHR5cGVsaWJzZGlyKSIgIiQoREVTVERJUikkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9pbmNsdWRlZGlyKSI7IGRvIFwKKwkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKKwlkb25lCitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChDTEVBTkZJTEVTKQorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGliTFRMSUJSQVJJRVMgY2xlYW4tbGlidG9vbCBcCisJbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtZ2lyREFUQSBcCisJaW5zdGFsbC1saWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZUhFQURFUlMgXAorCWluc3RhbGwtdHlwZWxpYnNEQVRBCisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLWxpYkxUTElCUkFSSUVTCisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWdpckRBVEEgdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTIFwKKwl1bmluc3RhbGwtbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVIRUFERVJTIFwKKwl1bmluc3RhbGwtdHlwZWxpYnNEQVRBCisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYkxUTElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgY3RhZ3MgZGlzdGNsZWFuIFwKKwlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZ2lyREFUQSBcCisJaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIFwKKwlpbnN0YWxsLWxpYkxUTElCUkFSSUVTIFwKKwlpbnN0YWxsLWxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9pbmNsdWRlSEVBREVSUyBcCisJaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBcCisJaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGwtdHlwZWxpYnNEQVRBIGluc3RhbGxjaGVjayBcCisJaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKKwltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisJdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1naXJEQVRBIFwKKwl1bmluc3RhbGwtbGliTFRMSUJSQVJJRVMgXAorCXVuaW5zdGFsbC1saWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZUhFQURFUlMgXAorCXVuaW5zdGFsbC10eXBlbGlic0RBVEEKKworCislLmMuZ2NvdjogLmxpYnMvbGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhLSUuZ2NkYSAlLmMKKwkkKEdDT1YpIC1iIC1mIC1vICReID4gJEAub3V0CisKK2djb3Y6ICQobGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhX1NPVVJDRVM6PS5nY292KQorCitBbmRyb2lkLm1rOiBNYWtlZmlsZS5hbQorCWFuZHJvZ2VuaXplciAtOlBST0pFQ1QgZ3N0cmVhbWVyIC06U0hBUkVEIGxpYmdzdGNvbnRyb2xsZXItQEdTVF9NQUpPUk1JTk9SQCAtOlRBR1MgZW5nIGRlYnVnIFwKKwkgLTpSRUxfVE9QICQodG9wX3NyY2RpcikgLTpBQlNfVE9QICQoYWJzX3RvcF9zcmNkaXIpIFwKKwkgLTpTT1VSQ0VTICQobGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2xhX1NPVVJDRVMpIFwKKwkgLTpDRkxBR1MgJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSBcCisJIC06TERGTEFHUyAkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9MREZMQUdTKSBcCisJICAgICAgICAgICAkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9NQUpPUk1JTk9SQF9sYV9MSUJBREQpIFwKKwkgLTpIRUFERVJfVEFSR0VUIGdzdHJlYW1lci1AR1NUX01BSk9STUlOT1JAL2dzdC9jb250cm9sbGVyIFwKKwkgLTpIRUFERVJTICQobGliZ3N0Y29udHJvbGxlcl9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVfSEVBREVSUykgXAorCSAtOlBBU1NUSFJPVUdIIExPQ0FMX0FSTV9NT0RFOj1hcm0gXAorCT4gJEAKKworQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQEdzdENvbnRyb2xsZXItQEdTVF9NQUpPUk1JTk9SQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3Rjb250cm9sbGVyLUBHU1RfTUFKT1JNSU5PUkAubGEKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJJChBTV9WX0dFTilQS0dfQ09ORklHX1BBVEg9IiQoR1NUX1BLR19DT05GSUdfUEFUSCkiIFwKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCUdTVF9QTFVHSU5fU1lTVEVNX1BBVEg9IiIgR1NUX1BMVUdJTl9QQVRIPSIiIEdTVF9SRUdJU1RSWV9VUERBVEU9bm8gXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIC12IC0tbmFtZXNwYWNlIEdzdENvbnRyb2xsZXIgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1uc3ZlcnNpb249QEdTVF9NQUpPUk1JTk9SQCBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLXN0cmlwLXByZWZpeD1Hc3QgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLURHU1RfVVNFX1VOU1RBQkxFX0FQSSBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktSSQodG9wX3NyY2RpcikgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLUkkKHRvcF9zcmNkaXIpL2xpYnMgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLUkkKHRvcF9idWlsZGRpcikgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLUkkKHRvcF9idWlsZGRpcikvbGlicyBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQkkKGdpcl9jaW5jbHVkZXMpIFwKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tYWRkLWluY2x1ZGUtcGF0aD0kKHRvcF9idWlsZGRpcikvZ3N0IFwKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tbGlicmFyeS1wYXRoPSQodG9wX2J1aWxkZGlyKS9nc3QgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1saWJyYXJ5PSQodG9wX2J1aWxkZGlyKS9nc3QvbGliZ3N0cmVhbWVyLTAuMTEubGEgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1saWJyYXJ5PWxpYmdzdGNvbnRyb2xsZXItMC4xMS5sYSBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLWluY2x1ZGU9R3N0LTAuMTEgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1saWJ0b29sPSIkKHRvcF9idWlsZGRpcikvbGlidG9vbCIgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1wa2cgZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1wa2ctZXhwb3J0IGdzdHJlYW1lci1jb250cm9sbGVyLUBHU1RfTUFKT1JNSU5PUkAgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1hZGQtaW5pdC1zZWN0aW9uPSJnc3RfaW5pdChOVUxMLE5VTEwpOyIgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1vdXRwdXQgJEAgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJJChnaXJfaGVhZGVycykgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJJChnaXJfc291cmNlcykKKworQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQCUudHlwZWxpYjogJS5naXIgJChJTlRST1NQRUNUSU9OX0NPTVBJTEVSKQorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkkKEFNX1ZfR0VOKSQoSU5UUk9TUEVDVElPTl9DT01QSUxFUikgLS1pbmNsdWRlZGlyPSQoc3JjZGlyKSAtLWluY2x1ZGVkaXI9JChidWlsZGRpcikgLS1pbmNsdWRlZGlyPSQodG9wX2J1aWxkZGlyKS9nc3QgJChJTlRST1NQRUNUSU9OX0NPTVBJTEVSX09QVFMpICQ8IC1vICQoQEYpCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jIGIvbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBmM2Q2NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jCkBAIC0wLDAgKzEsOTU5IEBACisvKiBHU3RyZWFtZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBTdGVmYW4gS29zdCA8ZW5zb25pYyBhdCB1c2VycyBkb3Qgc2YgZG90IG5ldD4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisgKgorICogZ3N0Y29udHJvbGxlci5jOiBkeW5hbWljIHBhcmFtZXRlciBjb250cm9sIHN1YnN5c3RlbQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qKgorICogU0VDVElPTjpnc3Rjb250cm9sbGVyCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IGR5bmFtaWMgcGFyYW1ldGVyIGNvbnRyb2wgc3Vic3lzdGVtCisgKgorICogVGhlIGNvbnRyb2xsZXIgc3Vic3lzdGVtIG9mZmVycyBhIGxpZ2h0d2VpZ2h0IHdheSB0byBhZGp1c3QgZ29iamVjdAorICogcHJvcGVydGllcyBvdmVyIHN0cmVhbS10aW1lLiBJdCB3b3JrcyBieSB1c2luZyB0aW1lLXN0YW1wZWQgdmFsdWUgcGFpcnMgdGhhdAorICogYXJlIHF1ZXVlZCBmb3IgZWxlbWVudC1wcm9wZXJ0aWVzLiBBdCBydW4tdGltZSB0aGUgZWxlbWVudHMgY29udGlub3VzbHkgcHVsbAorICogdmFsdWVzIGNoYW5nZXMgZm9yIHRoZSBjdXJyZW50IHN0cmVhbS10aW1lLgorICoKKyAqIFdoYXQgbmVlZHMgdG8gYmUgY2hhbmdlZCBpbiBhICNHc3RFbGVtZW50PworICogVmVyeSBsaXR0bGUgLSBpdCBpcyBqdXN0IHR3byBzdGVwcyB0byBtYWtlIGEgcGx1Z2luIGNvbnRyb2xsYWJsZSEKKyAqIDxvcmRlcmVkbGlzdD4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgIG1hcmsgZ29iamVjdC1wcm9wZXJ0aWVzIHBhcmFtc3BlY3MgdGhhdCBtYWtlIHNlbnNlIHRvIGJlIGNvbnRyb2xsZWQsCisgKiAgICAgYnkgR1NUX1BBUkFNX0NPTlRST0xMQUJMRS4KKyAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICB3aGVuIHByb2Nlc3NpbmcgZGF0YSAoZ2V0LCBjaGFpbiwgbG9vcCBmdW5jdGlvbikgYXQgdGhlIGJlZ2lubmluZyBjYWxsCisgKiAgICAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyhlbGVtZW50LHRpbWVzdGFtcCkuCisgKiAgICAgVGhpcyB3aWxsIG1hZGUgdGhlIGNvbnRyb2xsZXIgdG8gdXBkYXRlIGFsbCBnb2JqZWN0IHByb3BlcnRpZXMgdGhhdCBhcmUgdW5kZXIKKyAqICAgICBjb250cm9sIHdpdGggdGhlIGN1cnJlbnQgdmFsdWVzIGJhc2VkIG9uIHRpbWVzdGFtcC4KKyAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiA8L29yZGVyZWRsaXN0PgorICoKKyAqIFdoYXQgbmVlZHMgdG8gYmUgZG9uZSBpbiBhcHBsaWNhdGlvbnM/CisgKiBBZ2FpbiBpdHMgbm90IGEgbG90IHRvIGNoYW5nZS4KKyAqIDxvcmRlcmVkbGlzdD4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgIGZpcnN0IHB1dCBzb21lIHByb3BlcnRpZXMgdW5kZXIgY29udHJvbCwgYnkgY2FsbGluZworICogICAgIGNvbnRyb2xsZXIgPSBnc3Rfb2JqZWN0X2NvbnRyb2xfcHJvcGVydGllcyAob2JqZWN0LCAicHJvcDEiLCAicHJvcDIiLC4uLik7CisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgR2V0IGEgI0dzdENvbnRyb2xTb3VyY2UgZm9yIHRoZSBwcm9wZXJ0eSBhbmQgc2V0IGl0IHVwLgorICogICAgIGNzb3VyY2UgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKCk7CisgKiAgICAgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0X2ludGVycG9sYXRpb25fbW9kZShjc291cmNlLCBtb2RlKTsKKyAqICAgICBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXQgKGNzb3VyY2UsMCAqIEdTVF9TRUNPTkQsIHZhbHVlMSk7CisgKiAgICAgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0IChjc291cmNlLDEgKiBHU1RfU0VDT05ELCB2YWx1ZTIpOworICogICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgPGxpc3RpdGVtPjxwYXJhPgorICogICAgIFNldCB0aGUgI0dzdENvbnRyb2xTb3VyY2UgaW4gdGhlIGNvbnRyb2xsZXIuCisgKiAgICAgZ3N0X2NvbnRyb2xsZXJfc2V0X2NvbnRyb2xfc291cmNlIChjb250cm9sbGVyLCAicHJvcDEiLCBjc291cmNlKTsKKyAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICBzdGFydCB5b3VyIHBpcGVsaW5lCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogPC9vcmRlcmVkbGlzdD4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgImdzdGNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJnc3Rjb250cm9sbGVycHJpdmF0ZS5oIgorI2luY2x1ZGUgImdzdGNvbnRyb2xzb3VyY2UuaCIKKyNpbmNsdWRlICJnc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5oIgorCisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBjb250cm9sbGVyX2RlYnVnCitHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOIChHU1RfQ0FUX0RFRkFVTFQpOworCitzdGF0aWMgR09iamVjdENsYXNzICpwYXJlbnRfY2xhc3MgPSBOVUxMOworR1F1YXJrIHByaXZfZ3N0X2NvbnRyb2xsZXJfa2V5OworCisvKiBwcm9wZXJ0eSBpZHMgKi8KK2VudW0KK3sKKyAgUFJPUF9DT05UUk9MX1JBVEUgPSAxCit9OworCitzdHJ1Y3QgX0dzdENvbnRyb2xsZXJQcml2YXRlCit7CisgIEdzdENsb2NrVGltZSBjb250cm9sX3JhdGU7CisgIEdzdENsb2NrVGltZSBsYXN0X3N5bmM7Cit9OworCisvKiBoZWxwZXIgKi8KKworLyoKKyAqIGdzdF9jb250cm9sbGVkX3Byb3BlcnR5X25ldzoKKyAqIEBvYmplY3Q6IGZvciB3aGljaCBvYmplY3QgdGhlIGNvbnRyb2xsZWQgcHJvcGVydHkgc2hvdWxkIGJlIHNldCB1cAorICogQG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBiZSBjb250cm9sbGVkCisgKgorICogUHJpdmF0ZSBtZXRob2Qgd2hpY2ggaW5pdGlhbGl6ZXMgdGhlIGZpZWxkcyBvZiBhIG5ldyBjb250cm9sbGVkIHByb3BlcnR5CisgKiBzdHJ1Y3R1cmUuCisgKgorICogUmV0dXJuczogYSBmcmVzaGx5IGFsbG9jYXRlZCBzdHJ1Y3R1cmUgb3IgJU5VTEwKKyAqLworc3RhdGljIEdzdENvbnRyb2xsZWRQcm9wZXJ0eSAqCitnc3RfY29udHJvbGxlZF9wcm9wZXJ0eV9uZXcgKEdPYmplY3QgKiBvYmplY3QsIGNvbnN0IGdjaGFyICogbmFtZSkKK3sKKyAgR3N0Q29udHJvbGxlZFByb3BlcnR5ICpwcm9wID0gTlVMTDsKKyAgR1BhcmFtU3BlYyAqcHNwZWM7CisKKyAgR1NUX0lORk8gKCJ0cnlpbmcgdG8gcHV0IHByb3BlcnR5ICclcycgdW5kZXIgY29udHJvbCIsIG5hbWUpOworCisgIC8qIGNoZWNrIGlmIHRoZSBvYmplY3QgaGFzIGEgcHJvcGVydHkgb2YgdGhhdCBuYW1lICovCisgIGlmICgocHNwZWMgPQorICAgICAgICAgIGdfb2JqZWN0X2NsYXNzX2ZpbmRfcHJvcGVydHkgKEdfT0JKRUNUX0dFVF9DTEFTUyAob2JqZWN0KSwgbmFtZSkpKSB7CisgICAgR1NUX0RFQlVHICgiICBwc2VjLT5mbGFncyA6IDB4JTA4eCIsIHBzcGVjLT5mbGFncyk7CisKKyAgICAvKiBjaGVjayBpZiB0aGlzIHBhcmFtIGlzIHdpdGFibGUgJiYgY29udHJvbGFibGUgJiYgIWNvbnN0cnVjdC1vbmx5ICovCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKChwc3BlYy0+ZmxhZ3MgJiAoR19QQVJBTV9XUklUQUJMRSB8CisgICAgICAgICAgICAgICAgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSA9PQorICAgICAgICAoR19QQVJBTV9XUklUQUJMRSB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUpLCBOVUxMKTsKKworICAgIGlmICgocHJvcCA9IGdfc2xpY2VfbmV3IChHc3RDb250cm9sbGVkUHJvcGVydHkpKSkgeworICAgICAgcHJvcC0+cHNwZWMgPSBwc3BlYzsKKyAgICAgIHByb3AtPm5hbWUgPSBwc3BlYy0+bmFtZTsKKyAgICAgIHByb3AtPmNzb3VyY2UgPSBOVUxMOworICAgICAgcHJvcC0+ZGlzYWJsZWQgPSBGQUxTRTsKKyAgICAgIG1lbXNldCAoJnByb3AtPmxhc3RfdmFsdWUsIDAsIHNpemVvZiAoR1ZhbHVlKSk7CisgICAgICBnX3ZhbHVlX2luaXQgKCZwcm9wLT5sYXN0X3ZhbHVlLCBHX1BBUkFNX1NQRUNfVkFMVUVfVFlQRSAocHJvcC0+cHNwZWMpKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgR1NUX1dBUk5JTkcgKCJjbGFzcyAnJXMnIGhhcyBubyBwcm9wZXJ0eSAnJXMnIiwgR19PQkpFQ1RfVFlQRV9OQU1FIChvYmplY3QpLAorICAgICAgICBuYW1lKTsKKyAgfQorICByZXR1cm4gcHJvcDsKK30KKworLyoKKyAqIGdzdF9jb250cm9sbGVkX3Byb3BlcnR5X2ZyZWU6CisgKiBAcHJvcDogdGhlIG9iamVjdCB0byBmcmVlCisgKgorICogUHJpdmF0ZSBtZXRob2Qgd2hpY2ggZnJlZXMgYWxsIGRhdGEgYWxsb2NhdGVkIGJ5IGEgI0dzdENvbnRyb2xsZWRQcm9wZXJ0eQorICogaW5zdGFuY2UuCisgKi8KK3N0YXRpYyB2b2lkCitnc3RfY29udHJvbGxlZF9wcm9wZXJ0eV9mcmVlIChHc3RDb250cm9sbGVkUHJvcGVydHkgKiBwcm9wKQoreworICBpZiAocHJvcC0+Y3NvdXJjZSkKKyAgICBnX29iamVjdF91bnJlZiAocHJvcC0+Y3NvdXJjZSk7CisgIGdfdmFsdWVfdW5zZXQgKCZwcm9wLT5sYXN0X3ZhbHVlKTsKKyAgZ19zbGljZV9mcmVlIChHc3RDb250cm9sbGVkUHJvcGVydHksIHByb3ApOworfQorCisvKgorICogZ3N0X2NvbnRyb2xsZXJfZmluZF9jb250cm9sbGVkX3Byb3BlcnR5OgorICogQHNlbGY6IHRoZSBjb250cm9sbGVyIG9iamVjdCB0byBzZWFyY2ggZm9yIGEgcHJvcGVydHkgaW4KKyAqIEBuYW1lOiB0aGUgZ29iamVjdCBwcm9wZXJ0eSBuYW1lIHRvIGxvb2sgZm9yCisgKgorICogU2VhcmNoZXMgdGhlIGxpc3Qgb2YgcHJvcGVydGllcyB1bmRlciBjb250cm9sLgorICoKKyAqIFJldHVybnM6IGEgI0dzdENvbnRyb2xsZWRQcm9wZXJ0eSBvYmplY3Qgb2YgJU5VTEwgaWYgdGhlIHByb3BlcnR5IGlzIG5vdAorICogYmVpbmcgY29udHJvbGxlZC4KKyAqLworc3RhdGljIEdzdENvbnRyb2xsZWRQcm9wZXJ0eSAqCitnc3RfY29udHJvbGxlcl9maW5kX2NvbnRyb2xsZWRfcHJvcGVydHkgKEdzdENvbnRyb2xsZXIgKiBzZWxmLAorICAgIGNvbnN0IGdjaGFyICogbmFtZSkKK3sKKyAgR3N0Q29udHJvbGxlZFByb3BlcnR5ICpwcm9wOworICBHTGlzdCAqbm9kZTsKKworICBmb3IgKG5vZGUgPSBzZWxmLT5wcm9wZXJ0aWVzOyBub2RlOyBub2RlID0gZ19saXN0X25leHQgKG5vZGUpKSB7CisgICAgcHJvcCA9IG5vZGUtPmRhdGE7CisgICAgLyogRklYTUU6IGV2ZW50dWFsbHkgdXNlIEdRdWFyayB0byBzcGVlZCBpdCB1cCAqLworICAgIGlmICghc3RyY21wIChwcm9wLT5uYW1lLCBuYW1lKSkgeworICAgICAgcmV0dXJuIHByb3A7CisgICAgfQorICB9CisgIEdTVF9ERUJVRyAoImNvbnRyb2xsZXIgZG9lcyBub3QgKHlldCkgbWFuYWdlIHByb3BlcnR5ICclcyciLCBuYW1lKTsKKworICByZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIGdzdF9jb250cm9sbGVyX2FkZF9wcm9wZXJ0eToKKyAqIEBzZWxmOiB0aGUgY29udHJvbGxlciBvYmplY3Qgb3IgJU5VTEwgaWYgbm9uZSB5ZXQgZXhpc3RzCisgKiBAb2JqZWN0OiBvYmplY3QgdG8gYmluZCB0aGUgcHJvcGVydHkKKyAqIEBuYW1lOiBuYW1lIG9mIHByb2plY3R5IGluIEBvYmplY3QKKyAqIEByZWZfZXhpc3Rpbmc6IHBvaW50ZXIgdG8gZmxhZyB0aGF0IHRyYWNrcyBpZiB3ZSBuZWVkIHRvIHJlZiBhbiBleGlzdGluZworICogICBjb250cm9sbGVyIHN0aWxsCisgKgorICogQ3JlYXRlcyBhIG5ldyAjR3N0Q29udHJvbGxlZFByb3BlcnR5IGlmIHRoZXJlIGlzIG5vbmUgZm9yIHByb3BlcnR5IEBuYW1lIHlldC4KKyAqIEluIGNhc2UgdGhpcyBpcyB0aGUgZmlyc3QgY29udHJvbGxlZCBwcm9wZXJ5LCBpdCBjcmVhdGVzIHRoZSBjb250cm9sbGVyIGFzCisgKiB3ZWxsLgorICoKKyAqIFJldHVybnM6IGEgbmV3bHkgY3JlYXRlZCBjb250cm9sbGVyIG9iamVjdCBvciByZWZmZWQgZXhpc3Rpbmcgb25lIHdpdGggdGhlCisgKiBnaXZlbiBwcm9wZXJ0eSBib3VuZC4KKyAqLworc3RhdGljIEdzdENvbnRyb2xsZXIgKgorZ3N0X2NvbnRyb2xsZXJfYWRkX3Byb3BlcnR5IChHc3RDb250cm9sbGVyICogc2VsZiwgR09iamVjdCAqIG9iamVjdCwKKyAgICBjb25zdCBnY2hhciAqIG5hbWUsIGdib29sZWFuICogcmVmX2V4aXN0aW5nKQoreworICAvKiB0ZXN0IGlmIHRoaXMgcHJvcGVydHkgaXNuJ3QgeWV0IGNvbnRyb2xsZWQgKi8KKyAgaWYgKCFzZWxmIHx8ICFnc3RfY29udHJvbGxlcl9maW5kX2NvbnRyb2xsZWRfcHJvcGVydHkgKHNlbGYsIG5hbWUpKSB7CisgICAgR3N0Q29udHJvbGxlZFByb3BlcnR5ICpwcm9wOworCisgICAgLyogY3JlYXRlIEdzdENvbnRyb2xsZWRQcm9wZXJ0eSBhbmQgYWRkIHRvIHNlbGYtPnByb3BldGllcyBMaXN0ICovCisgICAgaWYgKChwcm9wID0gZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfbmV3IChvYmplY3QsIG5hbWUpKSkgeworICAgICAgLyogaWYgd2UgZG9uJ3QgaGF2ZSBhIGNvbnRyb2xsZXIgb2JqZWN0IHlldCwgbm93IGlzIHRoZSB0aW1lIHRvIGNyZWF0ZSBvbmUgKi8KKyAgICAgIGlmICghc2VsZikgeworICAgICAgICBzZWxmID0gZ19vYmplY3RfbmV3diAoR1NUX1RZUEVfQ09OVFJPTExFUiwgMCwgTlVMTCk7CisgICAgICAgIHNlbGYtPm9iamVjdCA9IGdfb2JqZWN0X3JlZiAob2JqZWN0KTsKKyAgICAgICAgLyogc3RvcmUgdGhlIGNvbnRyb2xsZXIgKi8KKyAgICAgICAgZ19vYmplY3Rfc2V0X3FkYXRhIChvYmplY3QsIHByaXZfZ3N0X2NvbnRyb2xsZXJfa2V5LCBzZWxmKTsKKyAgICAgICAgKnJlZl9leGlzdGluZyA9IEZBTFNFOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgLyogb25seSB3YW50IG9uZSBzaW5nbGUgX3JlZigpLCBldmVuIGZvciBtdWx0aXBsZSBwcm9wZXJ0aWVzICovCisgICAgICAgIGlmICgqcmVmX2V4aXN0aW5nKSB7CisgICAgICAgICAgZ19vYmplY3RfcmVmIChzZWxmKTsKKyAgICAgICAgICAqcmVmX2V4aXN0aW5nID0gRkFMU0U7CisgICAgICAgICAgR1NUX0lORk8gKCJyZXR1cm5pbmcgZXhpc3RpbmcgY29udHJvbGxlciIpOworICAgICAgICB9CisgICAgICB9CisgICAgICBzZWxmLT5wcm9wZXJ0aWVzID0gZ19saXN0X3ByZXBlbmQgKHNlbGYtPnByb3BlcnRpZXMsIHByb3ApOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBHU1RfV0FSTklORyAoInRyeWluZyB0byBjb250cm9sIHByb3BlcnR5ICVzIGFnYWluIiwgbmFtZSk7CisgICAgaWYgKCpyZWZfZXhpc3RpbmcpIHsKKyAgICAgIGdfb2JqZWN0X3JlZiAoc2VsZik7CisgICAgICAqcmVmX2V4aXN0aW5nID0gRkFMU0U7CisgICAgfQorICB9CisgIHJldHVybiBzZWxmOworfQorCisvKiBtZXRob2RzICovCisKKy8qKgorICogZ3N0X2NvbnRyb2xsZXJfbmV3X3ZhbGlzdDoKKyAqIEBvYmplY3Q6IHRoZSBvYmplY3Qgb2Ygd2hpY2ggc29tZSBwcm9wZXJ0aWVzIHNob3VsZCBiZSBjb250cm9sbGVkCisgKiBAdmFyX2FyZ3M6ICVOVUxMIHRlcm1pbmF0ZWQgbGlzdCBvZiBwcm9wZXJ0eSBuYW1lcyB0aGF0IHNob3VsZCBiZSBjb250cm9sbGVkCisgKgorICogQ3JlYXRlcyBhIG5ldyBHc3RDb250cm9sbGVyIGZvciB0aGUgZ2l2ZW4gb2JqZWN0J3MgcHJvcGVydGllcworICoKKyAqIFJldHVybnM6IHRoZSBuZXcgY29udHJvbGxlci4KKyAqLworR3N0Q29udHJvbGxlciAqCitnc3RfY29udHJvbGxlcl9uZXdfdmFsaXN0IChHT2JqZWN0ICogb2JqZWN0LCB2YV9saXN0IHZhcl9hcmdzKQoreworICBHc3RDb250cm9sbGVyICpzZWxmOworICBnYm9vbGVhbiByZWZfZXhpc3RpbmcgPSBUUlVFOworICBnY2hhciAqbmFtZTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19PQkpFQ1QgKG9iamVjdCksIE5VTEwpOworCisgIEdTVF9JTkZPICgic2V0dGluZyB1cCBhIG5ldyBjb250cm9sbGVyIik7CisKKyAgc2VsZiA9IGdfb2JqZWN0X2dldF9xZGF0YSAob2JqZWN0LCBwcml2X2dzdF9jb250cm9sbGVyX2tleSk7CisgIC8qIGNyZWF0ZSBHc3RDb250cm9sbGVkUHJvcGVydHkgZm9yIGVhY2ggcHJvcGVydHkgKi8KKyAgd2hpbGUgKChuYW1lID0gdmFfYXJnICh2YXJfYXJncywgZ2NoYXIgKikpKSB7CisgICAgc2VsZiA9IGdzdF9jb250cm9sbGVyX2FkZF9wcm9wZXJ0eSAoc2VsZiwgb2JqZWN0LCBuYW1lLCAmcmVmX2V4aXN0aW5nKTsKKyAgfQorICB2YV9lbmQgKHZhcl9hcmdzKTsKKworICBpZiAoc2VsZikKKyAgICBHU1RfSU5GTyAoImNvbnRyb2xsZXItPnJlZl9jb3VudD0lZCIsIEdfT0JKRUNUIChzZWxmKS0+cmVmX2NvdW50KTsKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy8qKgorICogZ3N0X2NvbnRyb2xsZXJfbmV3X2xpc3Q6CisgKiBAb2JqZWN0OiB0aGUgb2JqZWN0IG9mIHdoaWNoIHNvbWUgcHJvcGVydGllcyBzaG91bGQgYmUgY29udHJvbGxlZAorICogQGxpc3Q6IGxpc3Qgb2YgcHJvcGVydHkgbmFtZXMgdGhhdCBzaG91bGQgYmUgY29udHJvbGxlZAorICoKKyAqIENyZWF0ZXMgYSBuZXcgR3N0Q29udHJvbGxlciBmb3IgdGhlIGdpdmVuIG9iamVjdCdzIHByb3BlcnRpZXMKKyAqCisgKiBSZXR1cm5zOiB0aGUgbmV3IGNvbnRyb2xsZXIuCisgKi8KK0dzdENvbnRyb2xsZXIgKgorZ3N0X2NvbnRyb2xsZXJfbmV3X2xpc3QgKEdPYmplY3QgKiBvYmplY3QsIEdMaXN0ICogbGlzdCkKK3sKKyAgR3N0Q29udHJvbGxlciAqc2VsZjsKKyAgZ2Jvb2xlYW4gcmVmX2V4aXN0aW5nID0gVFJVRTsKKyAgZ2NoYXIgKm5hbWU7CisgIEdMaXN0ICpub2RlOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX0lTX09CSkVDVCAob2JqZWN0KSwgTlVMTCk7CisKKyAgR1NUX0lORk8gKCJzZXR0aW5nIHVwIGEgbmV3IGNvbnRyb2xsZXIiKTsKKworICBzZWxmID0gZ19vYmplY3RfZ2V0X3FkYXRhIChvYmplY3QsIHByaXZfZ3N0X2NvbnRyb2xsZXJfa2V5KTsKKyAgLyogY3JlYXRlIEdzdENvbnRyb2xsZWRQcm9wZXJ0eSBmb3IgZWFjaCBwcm9wZXJ0eSAqLworICBmb3IgKG5vZGUgPSBsaXN0OyBub2RlOyBub2RlID0gZ19saXN0X25leHQgKG5vZGUpKSB7CisgICAgbmFtZSA9IChnY2hhciAqKSBub2RlLT5kYXRhOworICAgIHNlbGYgPSBnc3RfY29udHJvbGxlcl9hZGRfcHJvcGVydHkgKHNlbGYsIG9iamVjdCwgbmFtZSwgJnJlZl9leGlzdGluZyk7CisgIH0KKworICBpZiAoc2VsZikKKyAgICBHU1RfSU5GTyAoImNvbnRyb2xsZXItPnJlZl9jb3VudD0lZCIsIEdfT0JKRUNUIChzZWxmKS0+cmVmX2NvdW50KTsKKyAgcmV0dXJuIHNlbGY7Cit9CisKKy8qKgorICogZ3N0X2NvbnRyb2xsZXJfbmV3OgorICogQG9iamVjdDogdGhlIG9iamVjdCBvZiB3aGljaCBzb21lIHByb3BlcnRpZXMgc2hvdWxkIGJlIGNvbnRyb2xsZWQKKyAqIEAuLi46ICVOVUxMIHRlcm1pbmF0ZWQgbGlzdCBvZiBwcm9wZXJ0eSBuYW1lcyB0aGF0IHNob3VsZCBiZSBjb250cm9sbGVkCisgKgorICogQ3JlYXRlcyBhIG5ldyBHc3RDb250cm9sbGVyIGZvciB0aGUgZ2l2ZW4gb2JqZWN0J3MgcHJvcGVydGllcworICoKKyAqIFJldHVybnM6IHRoZSBuZXcgY29udHJvbGxlci4KKyAqLworR3N0Q29udHJvbGxlciAqCitnc3RfY29udHJvbGxlcl9uZXcgKEdPYmplY3QgKiBvYmplY3QsIC4uLikKK3sKKyAgR3N0Q29udHJvbGxlciAqc2VsZjsKKyAgdmFfbGlzdCB2YXJfYXJnczsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19PQkpFQ1QgKG9iamVjdCksIE5VTEwpOworCisgIHZhX3N0YXJ0ICh2YXJfYXJncywgb2JqZWN0KTsKKyAgc2VsZiA9IGdzdF9jb250cm9sbGVyX25ld192YWxpc3QgKG9iamVjdCwgdmFyX2FyZ3MpOworICB2YV9lbmQgKHZhcl9hcmdzKTsKKworICByZXR1cm4gc2VsZjsKK30KKworLyoqCisgKiBnc3RfY29udHJvbGxlcl9yZW1vdmVfcHJvcGVydGllc192YWxpc3Q6CisgKiBAc2VsZjogdGhlIGNvbnRyb2xsZXIgb2JqZWN0IGZyb20gd2hpY2ggc29tZSBwcm9wZXJ0aWVzIHNob3VsZCBiZSByZW1vdmVkCisgKiBAdmFyX2FyZ3M6ICVOVUxMIHRlcm1pbmF0ZWQgbGlzdCBvZiBwcm9wZXJ0eSBuYW1lcyB0aGF0IHNob3VsZCBiZSByZW1vdmVkCisgKgorICogUmVtb3ZlcyB0aGUgZ2l2ZW4gb2JqZWN0IHByb3BlcnRpZXMgZnJvbSB0aGUgY29udHJvbGxlcgorICoKKyAqIFJldHVybnM6ICVGQUxTRSBpZiBvbmUgb2YgdGhlIGdpdmVuIHByb3BlcnR5IGlzbid0IGhhbmRsZWQgYnkgdGhlIGNvbnRyb2xsZXIsICVUUlVFIG90aGVyd2lzZQorICovCitnYm9vbGVhbgorZ3N0X2NvbnRyb2xsZXJfcmVtb3ZlX3Byb3BlcnRpZXNfdmFsaXN0IChHc3RDb250cm9sbGVyICogc2VsZiwgdmFfbGlzdCB2YXJfYXJncykKK3sKKyAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKKyAgR3N0Q29udHJvbGxlZFByb3BlcnR5ICpwcm9wOworICBnY2hhciAqbmFtZTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NPTlRST0xMRVIgKHNlbGYpLCBGQUxTRSk7CisKKyAgd2hpbGUgKChuYW1lID0gdmFfYXJnICh2YXJfYXJncywgZ2NoYXIgKikpKSB7CisgICAgLyogZmluZCB0aGUgcHJvcGVydHkgaW4gdGhlIHByb3BlcnRpZXMgbGlzdCBvZiB0aGUgY29udHJvbGxlciwgcmVtb3ZlIGFuZCBmcmVlIGl0ICovCisgICAgZ19tdXRleF9sb2NrIChzZWxmLT5sb2NrKTsKKyAgICBpZiAoKHByb3AgPSBnc3RfY29udHJvbGxlcl9maW5kX2NvbnRyb2xsZWRfcHJvcGVydHkgKHNlbGYsIG5hbWUpKSkgeworICAgICAgc2VsZi0+cHJvcGVydGllcyA9IGdfbGlzdF9yZW1vdmUgKHNlbGYtPnByb3BlcnRpZXMsIHByb3ApOworICAgICAgLy9nX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QgKHNlbGYtPm9iamVjdCwgcHJvcC0+bm90aWZ5X2hhbmRsZXJfaWQpOworICAgICAgZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfZnJlZSAocHJvcCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJlcyA9IEZBTFNFOworICAgIH0KKyAgICBnX211dGV4X3VubG9jayAoc2VsZi0+bG9jayk7CisgIH0KKworICByZXR1cm4gcmVzOworfQorCisvKioKKyAqIGdzdF9jb250cm9sbGVyX3JlbW92ZV9wcm9wZXJ0aWVzX2xpc3Q6CisgKiBAc2VsZjogdGhlIGNvbnRyb2xsZXIgb2JqZWN0IGZyb20gd2hpY2ggc29tZSBwcm9wZXJ0aWVzIHNob3VsZCBiZSByZW1vdmVkCisgKiBAbGlzdDogI0dMaXN0IG9mIHByb3BlcnR5IG5hbWVzIHRoYXQgc2hvdWxkIGJlIHJlbW92ZWQKKyAqCisgKiBSZW1vdmVzIHRoZSBnaXZlbiBvYmplY3QgcHJvcGVydGllcyBmcm9tIHRoZSBjb250cm9sbGVyCisgKgorICogUmV0dXJuczogJUZBTFNFIGlmIG9uZSBvZiB0aGUgZ2l2ZW4gcHJvcGVydHkgaXNuJ3QgaGFuZGxlZCBieSB0aGUgY29udHJvbGxlciwgJVRSVUUgb3RoZXJ3aXNlCisgKi8KK2dib29sZWFuCitnc3RfY29udHJvbGxlcl9yZW1vdmVfcHJvcGVydGllc19saXN0IChHc3RDb250cm9sbGVyICogc2VsZiwgR0xpc3QgKiBsaXN0KQoreworICBnYm9vbGVhbiByZXMgPSBUUlVFOworICBHc3RDb250cm9sbGVkUHJvcGVydHkgKnByb3A7CisgIGdjaGFyICpuYW1lOworICBHTGlzdCAqdG1wOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ09OVFJPTExFUiAoc2VsZiksIEZBTFNFKTsKKworICBmb3IgKHRtcCA9IGxpc3Q7IHRtcDsgdG1wID0gZ19saXN0X25leHQgKHRtcCkpIHsKKyAgICBuYW1lID0gKGdjaGFyICopIHRtcC0+ZGF0YTsKKworICAgIC8qIGZpbmQgdGhlIHByb3BlcnR5IGluIHRoZSBwcm9wZXJ0aWVzIGxpc3Qgb2YgdGhlIGNvbnRyb2xsZXIsIHJlbW92ZSBhbmQgZnJlZSBpdCAqLworICAgIGdfbXV0ZXhfbG9jayAoc2VsZi0+bG9jayk7CisgICAgaWYgKChwcm9wID0gZ3N0X2NvbnRyb2xsZXJfZmluZF9jb250cm9sbGVkX3Byb3BlcnR5IChzZWxmLCBuYW1lKSkpIHsKKyAgICAgIHNlbGYtPnByb3BlcnRpZXMgPSBnX2xpc3RfcmVtb3ZlIChzZWxmLT5wcm9wZXJ0aWVzLCBwcm9wKTsKKyAgICAgIC8vZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0IChzZWxmLT5vYmplY3QsIHByb3AtPm5vdGlmeV9oYW5kbGVyX2lkKTsKKyAgICAgIGdzdF9jb250cm9sbGVkX3Byb3BlcnR5X2ZyZWUgKHByb3ApOworICAgIH0gZWxzZSB7CisgICAgICByZXMgPSBGQUxTRTsKKyAgICB9CisgICAgZ19tdXRleF91bmxvY2sgKHNlbGYtPmxvY2spOworICB9CisKKyAgcmV0dXJuIHJlczsKK30KKworLyoqCisgKiBnc3RfY29udHJvbGxlcl9yZW1vdmVfcHJvcGVydGllczoKKyAqIEBzZWxmOiB0aGUgY29udHJvbGxlciBvYmplY3QgZnJvbSB3aGljaCBzb21lIHByb3BlcnRpZXMgc2hvdWxkIGJlIHJlbW92ZWQKKyAqIEAuLi46ICVOVUxMIHRlcm1pbmF0ZWQgbGlzdCBvZiBwcm9wZXJ0eSBuYW1lcyB0aGF0IHNob3VsZCBiZSByZW1vdmVkCisgKgorICogUmVtb3ZlcyB0aGUgZ2l2ZW4gb2JqZWN0IHByb3BlcnRpZXMgZnJvbSB0aGUgY29udHJvbGxlcgorICoKKyAqIFJldHVybnM6ICVGQUxTRSBpZiBvbmUgb2YgdGhlIGdpdmVuIHByb3BlcnR5IGlzbid0IGhhbmRsZWQgYnkgdGhlIGNvbnRyb2xsZXIsICVUUlVFIG90aGVyd2lzZQorICovCitnYm9vbGVhbgorZ3N0X2NvbnRyb2xsZXJfcmVtb3ZlX3Byb3BlcnRpZXMgKEdzdENvbnRyb2xsZXIgKiBzZWxmLCAuLi4pCit7CisgIGdib29sZWFuIHJlczsKKyAgdmFfbGlzdCB2YXJfYXJnczsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NPTlRST0xMRVIgKHNlbGYpLCBGQUxTRSk7CisKKyAgdmFfc3RhcnQgKHZhcl9hcmdzLCBzZWxmKTsKKyAgcmVzID0gZ3N0X2NvbnRyb2xsZXJfcmVtb3ZlX3Byb3BlcnRpZXNfdmFsaXN0IChzZWxmLCB2YXJfYXJncyk7CisgIHZhX2VuZCAodmFyX2FyZ3MpOworCisgIHJldHVybiByZXM7Cit9CisKKy8qKgorICogZ3N0X2NvbnRyb2xsZXJfc2V0X3Byb3BlcnR5X2Rpc2FibGVkOgorICogQHNlbGY6IHRoZSAjR3N0Q29udHJvbGxlciB3aGljaCBzaG91bGQgYmUgZGlzYWJsZWQKKyAqIEBwcm9wZXJ0eV9uYW1lOiBwcm9wZXJ0eSB0byBkaXNhYmxlCisgKiBAZGlzYWJsZWQ6IGJvb2xlYW4gdGhhdCBzcGVjaWZpZXMgd2hldGhlciB0byBkaXNhYmxlIHRoZSBjb250cm9sbGVyCisgKiBvciBub3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgdGhlICNHc3RDb250cm9sbGVyIG9uIGEgcHJvcGVydHkgZm9yCisgKiBzb21lIHRpbWUsIGkuZS4gZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMoKSB3aWxsIGRvIG5vdGhpbmcgZm9yIHRoZQorICogcHJvcGVydHkuCisgKgorICogU2luY2U6IDAuMTAuMTQKKyAqLworCit2b2lkCitnc3RfY29udHJvbGxlcl9zZXRfcHJvcGVydHlfZGlzYWJsZWQgKEdzdENvbnRyb2xsZXIgKiBzZWxmLAorICAgIGNvbnN0IGdjaGFyICogcHJvcGVydHlfbmFtZSwgZ2Jvb2xlYW4gZGlzYWJsZWQpCit7CisgIEdzdENvbnRyb2xsZWRQcm9wZXJ0eSAqcHJvcDsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQ09OVFJPTExFUiAoc2VsZikpOworICBnX3JldHVybl9pZl9mYWlsIChwcm9wZXJ0eV9uYW1lKTsKKworICBnX211dGV4X2xvY2sgKHNlbGYtPmxvY2spOworICBpZiAoKHByb3AgPSBnc3RfY29udHJvbGxlcl9maW5kX2NvbnRyb2xsZWRfcHJvcGVydHkgKHNlbGYsIHByb3BlcnR5X25hbWUpKSkgeworICAgIHByb3AtPmRpc2FibGVkID0gZGlzYWJsZWQ7CisgIH0KKyAgZ19tdXRleF91bmxvY2sgKHNlbGYtPmxvY2spOworfQorCisKKy8qKgorICogZ3N0X2NvbnRyb2xsZXJfc2V0X2Rpc2FibGVkOgorICogQHNlbGY6IHRoZSAjR3N0Q29udHJvbGxlciB3aGljaCBzaG91bGQgYmUgZGlzYWJsZWQKKyAqIEBkaXNhYmxlZDogYm9vbGVhbiB0aGF0IHNwZWNpZmllcyB3aGV0aGVyIHRvIGRpc2FibGUgdGhlIGNvbnRyb2xsZXIKKyAqIG9yIG5vdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBhbGwgcHJvcGVydGllcyBvZiB0aGUgI0dzdENvbnRyb2xsZXIKKyAqIGZvciBzb21lIHRpbWUsIGkuZS4gZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMoKSB3aWxsIGRvIG5vdGhpbmcuCisgKgorICogU2luY2U6IDAuMTAuMTQKKyAqLworCit2b2lkCitnc3RfY29udHJvbGxlcl9zZXRfZGlzYWJsZWQgKEdzdENvbnRyb2xsZXIgKiBzZWxmLCBnYm9vbGVhbiBkaXNhYmxlZCkKK3sKKyAgR0xpc3QgKm5vZGU7CisgIEdzdENvbnRyb2xsZWRQcm9wZXJ0eSAqcHJvcDsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQ09OVFJPTExFUiAoc2VsZikpOworCisgIGdfbXV0ZXhfbG9jayAoc2VsZi0+bG9jayk7CisgIGZvciAobm9kZSA9IHNlbGYtPnByb3BlcnRpZXM7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0KSB7CisgICAgcHJvcCA9IG5vZGUtPmRhdGE7CisgICAgcHJvcC0+ZGlzYWJsZWQgPSBkaXNhYmxlZDsKKyAgfQorICBnX211dGV4X3VubG9jayAoc2VsZi0+bG9jayk7Cit9CisKKy8qKgorICogZ3N0X2NvbnRyb2xsZXJfc2V0X2NvbnRyb2xfc291cmNlOgorICogQHNlbGY6IHRoZSBjb250cm9sbGVyIG9iamVjdAorICogQHByb3BlcnR5X25hbWU6IG5hbWUgb2YgdGhlIHByb3BlcnR5IGZvciB3aGljaCB0aGUgI0dzdENvbnRyb2xTb3VyY2Ugc2hvdWxkIGJlIHNldAorICogQGNzb3VyY2U6IHRoZSAjR3N0Q29udHJvbFNvdXJjZSB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciB0aGUgcHJvcGVydHkKKyAqCisgKiBTZXRzIHRoZSAjR3N0Q29udHJvbFNvdXJjZSBmb3IgQHByb3BlcnR5X25hbWUuIElmIHRoZXJlIGFscmVhZHkgd2FzIGEgI0dzdENvbnRyb2xTb3VyY2UKKyAqIGZvciB0aGlzIHByb3BlcnR5IGl0IHdpbGwgYmUgdW5yZWZlcmVuY2VkLgorICoKKyAqIFJldHVybnM6ICVGQUxTRSBpZiB0aGUgZ2l2ZW4gcHJvcGVydHkgaXNuJ3QgaGFuZGxlZCBieSB0aGUgY29udHJvbGxlciBvciB0aGUgbmV3ICNHc3RDb250cm9sU291cmNlCisgKiBjb3VsZG4ndCBiZSBib3VuZCB0byB0aGUgcHJvcGVydHksICVUUlVFIGlmIGV2ZXJ5dGhpbmcgd29ya2VkIGFzIGV4cGVjdGVkLgorICoKKyAqIFNpbmNlOiAwLjEwLjE0CisgKi8KK2dib29sZWFuCitnc3RfY29udHJvbGxlcl9zZXRfY29udHJvbF9zb3VyY2UgKEdzdENvbnRyb2xsZXIgKiBzZWxmLAorICAgIGNvbnN0IGdjaGFyICogcHJvcGVydHlfbmFtZSwgR3N0Q29udHJvbFNvdXJjZSAqIGNzb3VyY2UpCit7CisgIEdzdENvbnRyb2xsZWRQcm9wZXJ0eSAqcHJvcDsKKyAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7CisKKyAgZ19tdXRleF9sb2NrIChzZWxmLT5sb2NrKTsKKyAgaWYgKChwcm9wID0gZ3N0X2NvbnRyb2xsZXJfZmluZF9jb250cm9sbGVkX3Byb3BlcnR5IChzZWxmLCBwcm9wZXJ0eV9uYW1lKSkpIHsKKyAgICBHc3RDb250cm9sU291cmNlICpvbGQgPSBwcm9wLT5jc291cmNlOworCisgICAgaWYgKGNzb3VyY2UgJiYgKHJldCA9IGdzdF9jb250cm9sX3NvdXJjZV9iaW5kIChjc291cmNlLCBwcm9wLT5wc3BlYykpKSB7CisgICAgICBnX29iamVjdF9yZWYgKGNzb3VyY2UpOworICAgICAgcHJvcC0+Y3NvdXJjZSA9IGNzb3VyY2U7CisgICAgfSBlbHNlIGlmICghY3NvdXJjZSkgeworICAgICAgcmV0ID0gVFJVRTsKKyAgICAgIHByb3AtPmNzb3VyY2UgPSBOVUxMOworICAgIH0KKworICAgIGlmIChyZXQgJiYgb2xkKQorICAgICAgZ19vYmplY3RfdW5yZWYgKG9sZCk7CisgIH0KKyAgZ19tdXRleF91bmxvY2sgKHNlbGYtPmxvY2spOworCisgIHJldHVybiByZXQ7Cit9CisKKy8qKgorICogZ3N0X2NvbnRyb2xsZXJfZ2V0X2NvbnRyb2xfc291cmNlOgorICogQHNlbGY6IHRoZSBjb250cm9sbGVyIG9iamVjdAorICogQHByb3BlcnR5X25hbWU6IG5hbWUgb2YgdGhlIHByb3BlcnR5IGZvciB3aGljaCB0aGUgI0dzdENvbnRyb2xTb3VyY2Ugc2hvdWxkIGJlIGdldAorICoKKyAqIEdldHMgdGhlIGNvcnJlc3BvbmRpbmcgI0dzdENvbnRyb2xTb3VyY2UgZm9yIHRoZSBwcm9wZXJ0eS4gVGhpcyBzaG91bGQgYmUgdW5yZWZlcmVuY2VkCisgKiBhZ2FpbiBhZnRlciB1c2UuCisgKgorICogUmV0dXJuczogdGhlICNHc3RDb250cm9sU291cmNlIGZvciBAcHJvcGVydHlfbmFtZSBvciBOVUxMIGlmIHRoZSBwcm9wZXJ0eSBpcyBub3QKKyAqIGNvbnRyb2xsZWQgYnkgdGhpcyBjb250cm9sbGVyIG9yIG5vICNHc3RDb250cm9sU291cmNlIHdhcyBhc3NpZ25lZCB5ZXQuCisgKgorICogU2luY2U6IDAuMTAuMTQKKyAqLworR3N0Q29udHJvbFNvdXJjZSAqCitnc3RfY29udHJvbGxlcl9nZXRfY29udHJvbF9zb3VyY2UgKEdzdENvbnRyb2xsZXIgKiBzZWxmLAorICAgIGNvbnN0IGdjaGFyICogcHJvcGVydHlfbmFtZSkKK3sKKyAgR3N0Q29udHJvbGxlZFByb3BlcnR5ICpwcm9wOworICBHc3RDb250cm9sU291cmNlICpyZXQgPSBOVUxMOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ09OVFJPTExFUiAoc2VsZiksIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAocHJvcGVydHlfbmFtZSwgTlVMTCk7CisKKyAgZ19tdXRleF9sb2NrIChzZWxmLT5sb2NrKTsKKyAgaWYgKChwcm9wID0gZ3N0X2NvbnRyb2xsZXJfZmluZF9jb250cm9sbGVkX3Byb3BlcnR5IChzZWxmLCBwcm9wZXJ0eV9uYW1lKSkpIHsKKyAgICByZXQgPSBwcm9wLT5jc291cmNlOworICB9CisgIGdfbXV0ZXhfdW5sb2NrIChzZWxmLT5sb2NrKTsKKworICBpZiAocmV0KQorICAgIGdfb2JqZWN0X3JlZiAocmV0KTsKKworICByZXR1cm4gcmV0OworfQorCisvKioKKyAqIGdzdF9jb250cm9sbGVyX2dldDoKKyAqIEBzZWxmOiB0aGUgY29udHJvbGxlciBvYmplY3Qgd2hpY2ggaGFuZGxlcyB0aGUgcHJvcGVydGllcworICogQHByb3BlcnR5X25hbWU6IHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQKKyAqIEB0aW1lc3RhbXA6IHRoZSB0aW1lIHRoZSBjb250cm9sLWNoYW5nZSBzaG91bGQgYmUgcmVhZCBmcm9tCisgKgorICogR2V0cyB0aGUgdmFsdWUgZm9yIHRoZSBnaXZlbiBjb250cm9sbGVyLWhhbmRsZWQgcHJvcGVydHkgYXQgdGhlIHJlcXVlc3RlZAorICogdGltZS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgR1ZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBhdCB0aGUgZ2l2ZW4gdGltZSwgb3IgJU5VTEwgaWYgdGhlCisgKiBwcm9wZXJ0eSBpc24ndCBoYW5kbGVkIGJ5IHRoZSBjb250cm9sbGVyCisgKi8KK0dWYWx1ZSAqCitnc3RfY29udHJvbGxlcl9nZXQgKEdzdENvbnRyb2xsZXIgKiBzZWxmLCBjb25zdCBnY2hhciAqIHByb3BlcnR5X25hbWUsCisgICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCkKK3sKKyAgR3N0Q29udHJvbGxlZFByb3BlcnR5ICpwcm9wOworICBHVmFsdWUgKnZhbCA9IE5VTEw7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DT05UUk9MTEVSIChzZWxmKSwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwcm9wZXJ0eV9uYW1lLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lc3RhbXApLCBOVUxMKTsKKworICBnX211dGV4X2xvY2sgKHNlbGYtPmxvY2spOworICBpZiAoKHByb3AgPSBnc3RfY29udHJvbGxlcl9maW5kX2NvbnRyb2xsZWRfcHJvcGVydHkgKHNlbGYsIHByb3BlcnR5X25hbWUpKSkgeworICAgIHZhbCA9IGdfbmV3MCAoR1ZhbHVlLCAxKTsKKyAgICBnX3ZhbHVlX2luaXQgKHZhbCwgR19QQVJBTV9TUEVDX1ZBTFVFX1RZUEUgKHByb3AtPnBzcGVjKSk7CisgICAgaWYgKHByb3AtPmNzb3VyY2UpIHsKKyAgICAgIGdib29sZWFuIHJlczsKKworICAgICAgLyogZ2V0IGN1cnJlbnQgdmFsdWUgdmlhIGNvbnRyb2wgc291cmNlICovCisgICAgICByZXMgPSBnc3RfY29udHJvbF9zb3VyY2VfZ2V0X3ZhbHVlIChwcm9wLT5jc291cmNlLCB0aW1lc3RhbXAsIHZhbCk7CisgICAgICBpZiAoIXJlcykgeworICAgICAgICBnX2ZyZWUgKHZhbCk7CisgICAgICAgIHZhbCA9IE5VTEw7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGdfb2JqZWN0X2dldF9wcm9wZXJ0eSAoc2VsZi0+b2JqZWN0LCBwcm9wLT5uYW1lLCB2YWwpOworICAgIH0KKyAgfQorICBnX211dGV4X3VubG9jayAoc2VsZi0+bG9jayk7CisKKyAgcmV0dXJuIHZhbDsKK30KKworLyoqCisgKiBnc3RfY29udHJvbGxlcl9zdWdnZXN0X25leHRfc3luYzoKKyAqIEBzZWxmOiB0aGUgY29udHJvbGxlciB0aGF0IGhhbmRsZXMgdGhlIHZhbHVlcworICoKKyAqIFJldHVybnMgYSBzdWdnZXN0aW9uIGZvciB0aW1lc3RhbXBzIHdoZXJlIGJ1ZmZlcnMgc2hvdWxkIGJlIHNwbGl0CisgKiB0byBnZXQgYmVzdCBjb250cm9sbGVyIHJlc3VsdHMuCisgKgorICogUmV0dXJuczogUmV0dXJucyB0aGUgc3VnZ2VzdGVkIHRpbWVzdGFtcCBvciAlR1NUX0NMT0NLX1RJTUVfTk9ORQorICogaWYgbm8gY29udHJvbC1yYXRlIHdhcyBzZXQuCisgKgorICogU2luY2U6IDAuMTAuMTMKKyAqLworR3N0Q2xvY2tUaW1lCitnc3RfY29udHJvbGxlcl9zdWdnZXN0X25leHRfc3luYyAoR3N0Q29udHJvbGxlciAqIHNlbGYpCit7CisgIEdzdENsb2NrVGltZSByZXQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DT05UUk9MTEVSIChzZWxmKSwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWxmLT5wcml2LT5jb250cm9sX3JhdGUgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSwKKyAgICAgIEdTVF9DTE9DS19USU1FX05PTkUpOworCisgIGdfbXV0ZXhfbG9jayAoc2VsZi0+bG9jayk7CisKKyAgLyogVE9ETzogSW1wbGVtZW50IG1vcmUgbG9naWMsIGRlcGVuZGluZyBvbiBpbnRlcnBvbGF0aW9uIG1vZGUKKyAgICogYW5kIGNvbnRyb2wgcG9pbnRzCisgICAqIEZJWE1FOiB3ZSBuZWVkIHBsYXliYWNrIGRpcmVjdGlvbgorICAgKi8KKyAgcmV0ID0gc2VsZi0+cHJpdi0+bGFzdF9zeW5jICsgc2VsZi0+cHJpdi0+Y29udHJvbF9yYXRlOworCisgIGdfbXV0ZXhfdW5sb2NrIChzZWxmLT5sb2NrKTsKKworICByZXR1cm4gcmV0OworfQorCisvKioKKyAqIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzOgorICogQHNlbGY6IHRoZSBjb250cm9sbGVyIHRoYXQgaGFuZGxlcyB0aGUgdmFsdWVzCisgKiBAdGltZXN0YW1wOiB0aGUgdGltZSB0aGF0IHNob3VsZCBiZSBwcm9jZXNzZWQKKyAqCisgKiBTZXRzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBlbGVtZW50LCBhY2NvcmRpbmcgdG8gdGhlIGNvbnRyb2xsZXIgdGhhdCAobWF5YmUpCisgKiBoYW5kbGVzIHRoZW0gYW5kIGZvciB0aGUgZ2l2ZW4gdGltZXN0YW1wLgorICoKKyAqIElmIHRoaXMgZnVuY3Rpb24gZmFpbHMsIGl0IGlzIG1vc3QgbGlrZWx5IHRoZSBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzIGZhdWx0LgorICogTW9zdCBwcm9iYWJseSB0aGUgY29udHJvbCBzb3VyY2VzIGFyZSBub3Qgc2V0dXAgY29ycmVjdGx5LgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBjb250cm9sbGVyIHZhbHVlcyBjb3VsZCBiZSBhcHBsaWVkIHRvIHRoZSBvYmplY3QKKyAqIHByb3BlcnRpZXMsICVGQUxTRSBvdGhlcndpc2UKKyAqLworZ2Jvb2xlYW4KK2dzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChHc3RDb250cm9sbGVyICogc2VsZiwgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCkKK3sKKyAgR3N0Q29udHJvbGxlZFByb3BlcnR5ICpwcm9wOworICBHTGlzdCAqbm9kZTsKKyAgZ2Jvb2xlYW4gcmV0ID0gVFJVRSwgdmFsX3JldDsKKyAgR1ZhbHVlIHZhbHVlID0geyAwLCB9OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ09OVFJPTExFUiAoc2VsZiksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lc3RhbXApLCBGQUxTRSk7CisKKyAgR1NUX0xPRyAoInN5bmNfdmFsdWVzIik7CisKKyAgZ19tdXRleF9sb2NrIChzZWxmLT5sb2NrKTsKKyAgZ19vYmplY3RfZnJlZXplX25vdGlmeSAoc2VsZi0+b2JqZWN0KTsKKyAgLyogZ28gb3ZlciB0aGUgY29udHJvbGxlZCBwcm9wZXJ0aWVzIG9mIHRoZSBjb250cm9sbGVyICovCisgIGZvciAobm9kZSA9IHNlbGYtPnByb3BlcnRpZXM7IG5vZGU7IG5vZGUgPSBnX2xpc3RfbmV4dCAobm9kZSkpIHsKKyAgICBwcm9wID0gbm9kZS0+ZGF0YTsKKworICAgIGlmICghcHJvcC0+Y3NvdXJjZSB8fCBwcm9wLT5kaXNhYmxlZCkKKyAgICAgIGNvbnRpbnVlOworCisgICAgR1NUX0xPRyAoInByb3BlcnR5ICclcycgYXQgdHM9JSIgR19HVUlOVDY0X0ZPUk1BVCwgcHJvcC0+bmFtZSwgdGltZXN0YW1wKTsKKworICAgIC8qIHdlIGNhbiBtYWtlIHRoaXMgZmFzdGVyCisgICAgICogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM2OTM5CisgICAgICovCisgICAgZ192YWx1ZV9pbml0ICgmdmFsdWUsIEdfUEFSQU1fU1BFQ19WQUxVRV9UWVBFIChwcm9wLT5wc3BlYykpOworICAgIHZhbF9yZXQgPSBnc3RfY29udHJvbF9zb3VyY2VfZ2V0X3ZhbHVlIChwcm9wLT5jc291cmNlLCB0aW1lc3RhbXAsICZ2YWx1ZSk7CisgICAgaWYgKEdfTElLRUxZICh2YWxfcmV0KSkgeworICAgICAgLyogYWx3YXlzIHNldCB0aGUgdmFsdWUgZm9yIGZpcnN0IHRpbWUsIGJ1dCB0aGVuIG9ubHkgaWYgaXQgY2hhbmdlZAorICAgICAgICogdGhpcyBzaG91bGQgbGltaXQgZ19vYmplY3Rfbm90aWZ5IGludm9jYXRpb25zLgorICAgICAgICogRklYTUU6IGNhbiB3ZSBkZXRlY3QgbmVnYXRpdmUgcGxheWJhY2sgcmF0ZXM/CisgICAgICAgKi8KKyAgICAgIGlmICgodGltZXN0YW1wIDwgc2VsZi0+cHJpdi0+bGFzdF9zeW5jKSB8fAorICAgICAgICAgIGdzdF92YWx1ZV9jb21wYXJlICgmdmFsdWUsICZwcm9wLT5sYXN0X3ZhbHVlKSAhPSBHU1RfVkFMVUVfRVFVQUwpIHsKKyAgICAgICAgZ19vYmplY3Rfc2V0X3Byb3BlcnR5IChzZWxmLT5vYmplY3QsIHByb3AtPm5hbWUsICZ2YWx1ZSk7CisgICAgICAgIGdfdmFsdWVfY29weSAoJnZhbHVlLCAmcHJvcC0+bGFzdF92YWx1ZSk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIEdTVF9ERUJVRyAoIm5vIGNvbnRyb2wgdmFsdWUgZm9yIHBhcmFtICVzIiwgcHJvcC0+bmFtZSk7CisgICAgfQorICAgIGdfdmFsdWVfdW5zZXQgKCZ2YWx1ZSk7CisgICAgcmV0ICY9IHZhbF9yZXQ7CisgIH0KKyAgc2VsZi0+cHJpdi0+bGFzdF9zeW5jID0gdGltZXN0YW1wOworICBnX29iamVjdF90aGF3X25vdGlmeSAoc2VsZi0+b2JqZWN0KTsKKworICBnX211dGV4X3VubG9jayAoc2VsZi0+bG9jayk7CisKKyAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBnc3RfY29udHJvbGxlcl9nZXRfdmFsdWVfYXJyYXlzOgorICogQHNlbGY6IHRoZSBjb250cm9sbGVyIHRoYXQgaGFuZGxlcyB0aGUgdmFsdWVzCisgKiBAdGltZXN0YW1wOiB0aGUgdGltZSB0aGF0IHNob3VsZCBiZSBwcm9jZXNzZWQKKyAqIEB2YWx1ZV9hcnJheXM6IGxpc3QgdG8gcmV0dXJuIHRoZSBjb250cm9sLXZhbHVlcyBpbgorICoKKyAqIEZ1bmN0aW9uIHRvIGJlIGFibGUgdG8gZ2V0IGFuIGFycmF5IG9mIHZhbHVlcyBmb3Igb25lIG9yIG1vcmUgZ2l2ZW4gZWxlbWVudAorICogcHJvcGVydGllcy4KKyAqCisgKiBBbGwgZmllbGRzIG9mIHRoZSAlR3N0VmFsdWVBcnJheSBpbiB0aGUgbGlzdCBtdXN0IGJlIGZpbGxlZCBjb3JyZWN0bHkuCisgKiBFc3BlY2lhbGx5IHRoZSBHc3RWYWx1ZUFycmF5LT52YWx1ZXMgYXJyYXlzIG11c3QgYmUgYmlnIGVub3VnaCB0byBrZWVwCisgKiB0aGUgcmVxdWVzdGVkIGFtb3VudCBvZiB2YWx1ZXMuCisgKgorICogVGhlIHR5cGVzIG9mIHRoZSB2YWx1ZXMgaW4gdGhlIGFycmF5IGFyZSB0aGUgc2FtZSBhcyB0aGUgcHJvcGVydHkncyB0eXBlLgorICoKKyAqIDxub3RlPjxwYXJhPlRoaXMgZG9lc24ndCBtb2RpZnkgdGhlIGNvbnRyb2xsZWQgR09iamVjdCBwcm9wZXJ0aWVzITwvcGFyYT48L25vdGU+CisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGdpdmVuIGFycmF5KHMpIGNvdWxkIGJlIGZpbGxlZCwgJUZBTFNFIG90aGVyd2lzZQorICovCitnYm9vbGVhbgorZ3N0X2NvbnRyb2xsZXJfZ2V0X3ZhbHVlX2FycmF5cyAoR3N0Q29udHJvbGxlciAqIHNlbGYsCisgICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgR1NMaXN0ICogdmFsdWVfYXJyYXlzKQoreworICBnYm9vbGVhbiByZXMgPSBUUlVFOworICBHU0xpc3QgKm5vZGU7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DT05UUk9MTEVSIChzZWxmKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHRpbWVzdGFtcCksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZhbHVlX2FycmF5cywgRkFMU0UpOworCisgIGZvciAobm9kZSA9IHZhbHVlX2FycmF5czsgKHJlcyAmJiBub2RlKTsgbm9kZSA9IGdfc2xpc3RfbmV4dCAobm9kZSkpIHsKKyAgICByZXMgPSBnc3RfY29udHJvbGxlcl9nZXRfdmFsdWVfYXJyYXkgKHNlbGYsIHRpbWVzdGFtcCwgbm9kZS0+ZGF0YSk7CisgIH0KKworICByZXR1cm4gKHJlcyk7Cit9CisKKy8qKgorICogZ3N0X2NvbnRyb2xsZXJfZ2V0X3ZhbHVlX2FycmF5OgorICogQHNlbGY6IHRoZSBjb250cm9sbGVyIHRoYXQgaGFuZGxlcyB0aGUgdmFsdWVzCisgKiBAdGltZXN0YW1wOiB0aGUgdGltZSB0aGF0IHNob3VsZCBiZSBwcm9jZXNzZWQKKyAqIEB2YWx1ZV9hcnJheTogYXJyYXkgdG8gcHV0IGNvbnRyb2wtdmFsdWVzIGluCisgKgorICogRnVuY3Rpb24gdG8gYmUgYWJsZSB0byBnZXQgYW4gYXJyYXkgb2YgdmFsdWVzIGZvciBvbmUgZWxlbWVudCBwcm9wZXJ0eS4KKyAqCisgKiBBbGwgZmllbGRzIG9mIEB2YWx1ZV9hcnJheSBtdXN0IGJlIGZpbGxlZCBjb3JyZWN0bHkuIEVzcGVjaWFsbHkgdGhlCisgKiBAdmFsdWVfYXJyYXktPnZhbHVlcyBhcnJheSBtdXN0IGJlIGJpZyBlbm91Z2ggdG8ga2VlcCB0aGUgcmVxdWVzdGVkIGFtb3VudAorICogb2YgdmFsdWVzIChhcyBpbmRpY2F0ZWQgYnkgdGhlIG5ic2FtcGxlcyBmaWVsZCkuCisgKgorICogVGhlIHR5cGUgb2YgdGhlIHZhbHVlcyBpbiB0aGUgYXJyYXkgaXMgdGhlIHNhbWUgYXMgdGhlIHByb3BlcnR5J3MgdHlwZS4KKyAqCisgKiA8bm90ZT48cGFyYT5UaGlzIGRvZXNuJ3QgbW9kaWZ5IHRoZSBjb250cm9sbGVkIEdPYmplY3QgcHJvcGVydHkhPC9wYXJhPjwvbm90ZT4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgZ2l2ZW4gYXJyYXkgY291bGQgYmUgZmlsbGVkLCAlRkFMU0Ugb3RoZXJ3aXNlCisgKi8KK2dib29sZWFuCitnc3RfY29udHJvbGxlcl9nZXRfdmFsdWVfYXJyYXkgKEdzdENvbnRyb2xsZXIgKiBzZWxmLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLAorICAgIEdzdFZhbHVlQXJyYXkgKiB2YWx1ZV9hcnJheSkKK3sKKyAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7CisgIEdzdENvbnRyb2xsZWRQcm9wZXJ0eSAqcHJvcDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NPTlRST0xMRVIgKHNlbGYpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodGltZXN0YW1wKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAodmFsdWVfYXJyYXksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZhbHVlX2FycmF5LT5wcm9wZXJ0eV9uYW1lLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh2YWx1ZV9hcnJheS0+dmFsdWVzLCBGQUxTRSk7CisKKyAgZ19tdXRleF9sb2NrIChzZWxmLT5sb2NrKTsKKworICBpZiAoKHByb3AgPQorICAgICAgICAgIGdzdF9jb250cm9sbGVyX2ZpbmRfY29udHJvbGxlZF9wcm9wZXJ0eSAoc2VsZiwKKyAgICAgICAgICAgICAgdmFsdWVfYXJyYXktPnByb3BlcnR5X25hbWUpKSkgeworICAgIC8qIGdldCBjdXJyZW50IHZhbHVlX2FycmF5IHZpYSBjb250cm9sIHNvdXJjZSAqLworCisgICAgaWYgKCFwcm9wLT5jc291cmNlKQorICAgICAgZ290byBvdXQ7CisKKyAgICByZXMgPQorICAgICAgICBnc3RfY29udHJvbF9zb3VyY2VfZ2V0X3ZhbHVlX2FycmF5IChwcm9wLT5jc291cmNlLCB0aW1lc3RhbXAsCisgICAgICAgIHZhbHVlX2FycmF5KTsKKyAgfQorCitvdXQ6CisgIGdfbXV0ZXhfdW5sb2NrIChzZWxmLT5sb2NrKTsKKyAgcmV0dXJuIHJlczsKK30KKworLyogZ29iamVjdCBoYW5kbGluZyAqLworCitzdGF0aWMgdm9pZAorX2dzdF9jb250cm9sbGVyX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlfaWQsCisgICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgR3N0Q29udHJvbGxlciAqc2VsZiA9IEdTVF9DT05UUk9MTEVSIChvYmplY3QpOworCisgIHN3aXRjaCAocHJvcGVydHlfaWQpIHsKKyAgICBjYXNlIFBST1BfQ09OVFJPTF9SQVRFOnsKKyAgICAgIC8qIEZJWE1FOiBkb24ndCBjaGFuZ2UgaWYgZWxlbWVudCBpcyBwbGF5aW5nLCBjb250cm9sbGVyIHdvcmtzIGZvciBHT2JqZWN0CisgICAgICAgICBzbyB0aGlzIHdvbnQgd29yaworCisgICAgICAgICBHc3RTdGF0ZSBjX3N0YXRlLCBwX3N0YXRlOworICAgICAgICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OworCisgICAgICAgICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHNlbGYtPm9iamVjdCwgJmNfc3RhdGUsICZwX3N0YXRlLCAwKTsKKyAgICAgICAgIGlmICgocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyAmJgorICAgICAgICAgKGNfc3RhdGUgPT0gR1NUX1NUQVRFX05VTEwgfHwgY19zdGF0ZSA9PSBHU1RfU1RBVEVfUkVBRFkpKSB8fAorICAgICAgICAgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DICYmCisgICAgICAgICAocF9zdGF0ZSA9PSBHU1RfU1RBVEVfTlVMTCB8fCBwX3N0YXRlID09IEdTVF9TVEFURV9SRUFEWSkpKSB7CisgICAgICAgKi8KKyAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAodmFsdWUsIHNlbGYtPnByaXYtPmNvbnRyb2xfcmF0ZSk7CisgICAgICAvKgorICAgICAgICAgfQorICAgICAgICAgZWxzZSB7CisgICAgICAgICBHU1RfV0FSTklORyAoIkNoYW5naW5nIHRoZSBjb250cm9sIHJhdGUgaXMgb25seSBhbGxvd2VkIGlmIHRoZSBlbGVtbnQiCisgICAgICAgICAiIGlzIGluIE5VTEwgb3IgUkVBRFkiKTsKKyAgICAgICAgIH0KKyAgICAgICAqLworICAgIH0KKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6eworICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BlcnR5X2lkLCBwc3BlYyk7CisgICAgfQorICAgICAgYnJlYWs7CisgIH0KK30KKworLyogc2V0cyB0aGUgZ2l2ZW4gcHJvcGVydGllcyBmb3IgdGhpcyBvYmplY3QgKi8KK3N0YXRpYyB2b2lkCitfZ3N0X2NvbnRyb2xsZXJfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wZXJ0eV9pZCwKKyAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQoreworICBHc3RDb250cm9sbGVyICpzZWxmID0gR1NUX0NPTlRST0xMRVIgKG9iamVjdCk7CisKKyAgc3dpdGNoIChwcm9wZXJ0eV9pZCkgeworICAgIGNhc2UgUFJPUF9DT05UUk9MX1JBVEU6eworICAgICAgc2VsZi0+cHJpdi0+Y29udHJvbF9yYXRlID0gZ192YWx1ZV9nZXRfdWludDY0ICh2YWx1ZSk7CisgICAgfQorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDp7CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcGVydHlfaWQsIHBzcGVjKTsKKyAgICB9CisgICAgICBicmVhazsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorX2dzdF9jb250cm9sbGVyX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpCit7CisgIEdzdENvbnRyb2xsZXIgKnNlbGYgPSBHU1RfQ09OVFJPTExFUiAob2JqZWN0KTsKKworICBpZiAoc2VsZi0+b2JqZWN0ICE9IE5VTEwpIHsKKyAgICBnX211dGV4X2xvY2sgKHNlbGYtPmxvY2spOworICAgIC8qIGZyZWUgbGlzdCBvZiBwcm9wZXJ0aWVzICovCisgICAgaWYgKHNlbGYtPnByb3BlcnRpZXMpIHsKKyAgICAgIEdMaXN0ICpub2RlOworCisgICAgICBmb3IgKG5vZGUgPSBzZWxmLT5wcm9wZXJ0aWVzOyBub2RlOyBub2RlID0gZ19saXN0X25leHQgKG5vZGUpKSB7CisgICAgICAgIEdzdENvbnRyb2xsZWRQcm9wZXJ0eSAqcHJvcCA9IG5vZGUtPmRhdGE7CisKKyAgICAgICAgZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfZnJlZSAocHJvcCk7CisgICAgICB9CisgICAgICBnX2xpc3RfZnJlZSAoc2VsZi0+cHJvcGVydGllcyk7CisgICAgICBzZWxmLT5wcm9wZXJ0aWVzID0gTlVMTDsKKyAgICB9CisKKyAgICAvKiByZW1vdmUgY29udHJvbGxlciBmcm9tIG9iamVjdCdzIHFkYXRhIGxpc3QgKi8KKyAgICBnX29iamVjdF9zZXRfcWRhdGEgKHNlbGYtPm9iamVjdCwgcHJpdl9nc3RfY29udHJvbGxlcl9rZXksIE5VTEwpOworICAgIGdfb2JqZWN0X3VucmVmIChzZWxmLT5vYmplY3QpOworICAgIHNlbGYtPm9iamVjdCA9IE5VTEw7CisgICAgZ19tdXRleF91bmxvY2sgKHNlbGYtPmxvY2spOworICB9CisKKyAgaWYgKEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kaXNwb3NlKQorICAgIChHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSkgKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkCitfZ3N0X2NvbnRyb2xsZXJfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCit7CisgIEdzdENvbnRyb2xsZXIgKnNlbGYgPSBHU1RfQ09OVFJPTExFUiAob2JqZWN0KTsKKworICBnX211dGV4X2ZyZWUgKHNlbGYtPmxvY2spOworCisgIGlmIChHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUpCisgICAgKEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSkgKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkCitfZ3N0X2NvbnRyb2xsZXJfaW5pdCAoR1R5cGVJbnN0YW5jZSAqIGluc3RhbmNlLCBncG9pbnRlciBnX2NsYXNzKQoreworICBHc3RDb250cm9sbGVyICpzZWxmID0gR1NUX0NPTlRST0xMRVIgKGluc3RhbmNlKTsKKworICBzZWxmLT5sb2NrID0gZ19tdXRleF9uZXcgKCk7CisgIHNlbGYtPnByaXYgPQorICAgICAgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFIChzZWxmLCBHU1RfVFlQRV9DT05UUk9MTEVSLAorICAgICAgR3N0Q29udHJvbGxlclByaXZhdGUpOworICBzZWxmLT5wcml2LT5sYXN0X3N5bmMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICBzZWxmLT5wcml2LT5jb250cm9sX3JhdGUgPSAxMDAgKiBHU1RfTVNFQ09ORDsKK30KKworc3RhdGljIHZvaWQKK19nc3RfY29udHJvbGxlcl9jbGFzc19pbml0IChHc3RDb250cm9sbGVyQ2xhc3MgKiBrbGFzcykKK3sKKyAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKKworICBwYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQgKGtsYXNzKTsKKyAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChrbGFzcywgc2l6ZW9mIChHc3RDb250cm9sbGVyUHJpdmF0ZSkpOworCisgIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IF9nc3RfY29udHJvbGxlcl9zZXRfcHJvcGVydHk7CisgIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IF9nc3RfY29udHJvbGxlcl9nZXRfcHJvcGVydHk7CisgIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBfZ3N0X2NvbnRyb2xsZXJfZGlzcG9zZTsKKyAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBfZ3N0X2NvbnRyb2xsZXJfZmluYWxpemU7CisKKyAgcHJpdl9nc3RfY29udHJvbGxlcl9rZXkgPSBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoImdzdDo6Y29udHJvbGxlciIpOworCisgIC8qIHJlZ2lzdGVyIHByb3BlcnRpZXMgKi8KKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DT05UUk9MX1JBVEUsCisgICAgICBnX3BhcmFtX3NwZWNfdWludDY0ICgiY29udHJvbC1yYXRlIiwKKyAgICAgICAgICAiY29udHJvbCByYXRlIiwKKyAgICAgICAgICAiQ29udHJvbGxlZCBwcm9wZXJ0aWVzIHdpbGwgYmUgdXBkYXRlZCBhdCBsZWFzdCBldmVyeSBjb250cm9sLXJhdGUgbmFub3NlY29uZHMiLAorICAgICAgICAgIDEsIEdfTUFYVUlOVCwgMTAwICogR1NUX01TRUNPTkQsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisKKyAgLyogcmVnaXN0ZXIgc2lnbmFscyAqLworICAvKiBzZXQgZGVmYXVsdHMgZm9yIG92ZXJyaWRhYmxlIG1ldGhvZHMgKi8KK30KKworR1R5cGUKK2dzdF9jb250cm9sbGVyX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgdm9sYXRpbGUgZ3NpemUgdHlwZSA9IDA7CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmdHlwZSkpIHsKKyAgICBHVHlwZSBfdHlwZTsKKyAgICBzdGF0aWMgY29uc3QgR1R5cGVJbmZvIGluZm8gPSB7CisgICAgICBzaXplb2YgKEdzdENvbnRyb2xsZXJDbGFzcyksCisgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGJhc2VfaW5pdCAqLworICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBiYXNlX2ZpbmFsaXplICovCisgICAgICAoR0NsYXNzSW5pdEZ1bmMpIF9nc3RfY29udHJvbGxlcl9jbGFzc19pbml0LCAgICAgIC8qIGNsYXNzX2luaXQgKi8KKyAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogY2xhc3NfZmluYWxpemUgKi8KKyAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogY2xhc3NfZGF0YSAqLworICAgICAgc2l6ZW9mIChHc3RDb250cm9sbGVyKSwKKyAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgLyogbl9wcmVhbGxvY3MgKi8KKyAgICAgIChHSW5zdGFuY2VJbml0RnVuYykgX2dzdF9jb250cm9sbGVyX2luaXQsIC8qIGluc3RhbmNlX2luaXQgKi8KKyAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgLyogdmFsdWVfdGFibGUgKi8KKyAgICB9OworICAgIF90eXBlID0gZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyAoR19UWVBFX09CSkVDVCwgIkdzdENvbnRyb2xsZXIiLCAmaW5mbywgMCk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZ0eXBlLCBfdHlwZSk7CisgIH0KKyAgcmV0dXJuIHR5cGU7Cit9CmRpZmYgLS1naXQgYS9saWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuaCBiL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNjY2YTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuaApAQCAtMCwwICsxLDEzNyBAQAorLyogR1N0cmVhbWVyCisgKgorICogQ29weXJpZ2h0IChDKSA8MjAwNT4gU3RlZmFuIEtvc3QgPGVuc29uaWMgYXQgdXNlcnMgZG90IHNmIGRvdCBuZXQ+CisgKgorICogZ3N0LWNvbnRyb2xsZXIuaDogZHluYW1pYyBwYXJhbWV0ZXIgY29udHJvbCBzdWJzeXN0ZW0KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fR1NUX0NPTlRST0xMRVJfSF9fCisjZGVmaW5lIF9fR1NUX0NPTlRST0xMRVJfSF9fCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPGdsaWIvZ3ByaW50Zi5oPgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworI2luY2x1ZGUgPGdzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xzb3VyY2UuaD4KKyNpbmNsdWRlIDxnc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qIHR5cGUgbWFjcm9zICovCisKKyNkZWZpbmUgR1NUX1RZUEVfQ09OVFJPTExFUgkgICAgICAgKGdzdF9jb250cm9sbGVyX2dldF90eXBlICgpKQorI2RlZmluZSBHU1RfQ09OVFJPTExFUihvYmopCSAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9DT05UUk9MTEVSLCBHc3RDb250cm9sbGVyKSkKKyNkZWZpbmUgR1NUX0NPTlRST0xMRVJfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfQ09OVFJPTExFUiwgR3N0Q29udHJvbGxlckNsYXNzKSkKKyNkZWZpbmUgR1NUX0lTX0NPTlRST0xMRVIob2JqKQkgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfQ09OVFJPTExFUikpCisjZGVmaW5lIEdTVF9JU19DT05UUk9MTEVSX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX0NPTlRST0xMRVJFKSkKKyNkZWZpbmUgR1NUX0NPTlRST0xMRVJfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfQ09OVFJPTExFUiwgR3N0Q29udHJvbGxlckNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdENvbnRyb2xsZXIgR3N0Q29udHJvbGxlcjsKK3R5cGVkZWYgc3RydWN0IF9Hc3RDb250cm9sbGVyQ2xhc3MgR3N0Q29udHJvbGxlckNsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX0dzdENvbnRyb2xsZXJQcml2YXRlIEdzdENvbnRyb2xsZXJQcml2YXRlOworCisvKioKKyAqIEdzdENvbnRyb2xsZXI6CisgKgorICogVGhlIGluc3RhbmNlIHN0cnVjdHVyZSBvZiBHc3RDb250cm9sbGVyCisgKi8KKworc3RydWN0IF9Hc3RDb250cm9sbGVyCit7CisgIEdPYmplY3QgcGFyZW50OworCisgIEdMaXN0ICpwcm9wZXJ0aWVzOyAgLyogTGlzdCBvZiBHc3RDb250cm9sbGVkUHJvcGVydHkgKi8KKyAgR011dGV4ICpsb2NrOyAgICAgICAvKiBTZWN1cmUgcHJvcGVydHkgYWNjZXNzLCBlbGVtZW50cyB3aWxsIGFjY2VzcyBmcm9tIHRocmVhZHMgKi8KKyAgR09iamVjdCAqb2JqZWN0OyAgICAvKiB0aGUgb2JqZWN0IHdlIGNvbnRyb2wgKi8KKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgR3N0Q29udHJvbGxlclByaXZhdGUgKnByaXY7CisgIGdwb2ludGVyICAgICAgIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkcgLSAxXTsKK307CisKK3N0cnVjdCBfR3N0Q29udHJvbGxlckNsYXNzCit7CisgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdwb2ludGVyICAgICAgIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOworfTsKKworR1R5cGUgZ3N0X2NvbnRyb2xsZXJfZ2V0X3R5cGUgKHZvaWQpOworCisvKiBHc3RDb250cm9sbGVyIGZ1bmN0aW9ucyAqLworCitHc3RDb250cm9sbGVyICpnc3RfY29udHJvbGxlcl9uZXdfdmFsaXN0IChHT2JqZWN0ICogb2JqZWN0LCB2YV9saXN0IHZhcl9hcmdzKTsKK0dzdENvbnRyb2xsZXIgKmdzdF9jb250cm9sbGVyX25ld19saXN0IChHT2JqZWN0ICogb2JqZWN0LCBHTGlzdCAqbGlzdCk7CitHc3RDb250cm9sbGVyICpnc3RfY29udHJvbGxlcl9uZXcgKEdPYmplY3QgKiBvYmplY3QsIC4uLikgR19HTlVDX05VTExfVEVSTUlOQVRFRDsKKworZ2Jvb2xlYW4gZ3N0X2NvbnRyb2xsZXJfcmVtb3ZlX3Byb3BlcnRpZXNfdmFsaXN0IChHc3RDb250cm9sbGVyICogc2VsZiwKKyAgICB2YV9saXN0IHZhcl9hcmdzKTsKK2dib29sZWFuIGdzdF9jb250cm9sbGVyX3JlbW92ZV9wcm9wZXJ0aWVzX2xpc3QgKEdzdENvbnRyb2xsZXIgKiBzZWxmLAorCQkJCQkJR0xpc3QgKmxpc3QpOworZ2Jvb2xlYW4gZ3N0X2NvbnRyb2xsZXJfcmVtb3ZlX3Byb3BlcnRpZXMgKEdzdENvbnRyb2xsZXIgKiBzZWxmLCAuLi4pIEdfR05VQ19OVUxMX1RFUk1JTkFURUQ7CisKK3ZvaWQgZ3N0X2NvbnRyb2xsZXJfc2V0X2Rpc2FibGVkIChHc3RDb250cm9sbGVyICpzZWxmLCBnYm9vbGVhbiBkaXNhYmxlZCk7Cit2b2lkIGdzdF9jb250cm9sbGVyX3NldF9wcm9wZXJ0eV9kaXNhYmxlZCAoR3N0Q29udHJvbGxlciAqc2VsZiwgY29uc3QgZ2NoYXIgKiBwcm9wZXJ0eV9uYW1lLCBnYm9vbGVhbiBkaXNhYmxlZCk7CitnYm9vbGVhbiBnc3RfY29udHJvbGxlcl9zZXRfY29udHJvbF9zb3VyY2UgKEdzdENvbnRyb2xsZXIgKnNlbGYsIGNvbnN0IGdjaGFyICogcHJvcGVydHlfbmFtZSwgR3N0Q29udHJvbFNvdXJjZSAqY3NvdXJjZSk7CitHc3RDb250cm9sU291cmNlICogZ3N0X2NvbnRyb2xsZXJfZ2V0X2NvbnRyb2xfc291cmNlIChHc3RDb250cm9sbGVyICpzZWxmLCBjb25zdCBnY2hhciAqIHByb3BlcnR5X25hbWUpOworCitHc3RDbG9ja1RpbWUgZ3N0X2NvbnRyb2xsZXJfc3VnZ2VzdF9uZXh0X3N5bmMgKEdzdENvbnRyb2xsZXIgKnNlbGYpOworZ2Jvb2xlYW4gZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKEdzdENvbnRyb2xsZXIgKiBzZWxmLAorICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXApOworCitHVmFsdWUgKmdzdF9jb250cm9sbGVyX2dldCAoR3N0Q29udHJvbGxlciAqIHNlbGYsIGNvbnN0IGdjaGFyICogcHJvcGVydHlfbmFtZSwKKyAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKTsKK2dib29sZWFuIGdzdF9jb250cm9sbGVyX2dldF92YWx1ZV9hcnJheXMgKEdzdENvbnRyb2xsZXIgKiBzZWxmLAorICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdTTGlzdCAqIHZhbHVlX2FycmF5cyk7CitnYm9vbGVhbiBnc3RfY29udHJvbGxlcl9nZXRfdmFsdWVfYXJyYXkgKEdzdENvbnRyb2xsZXIgKiBzZWxmLAorICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdzdFZhbHVlQXJyYXkgKiB2YWx1ZV9hcnJheSk7CisKKy8qIEdPYmplY3QgY29udmVuaWVuY2UgZnVuY3Rpb25zICovCisKK0dzdENvbnRyb2xsZXIgKmdzdF9vYmplY3RfY29udHJvbF9wcm9wZXJ0aWVzIChHT2JqZWN0ICogb2JqZWN0LCAuLi4pIEdfR05VQ19OVUxMX1RFUk1JTkFURUQ7CitnYm9vbGVhbiBnc3Rfb2JqZWN0X3VuY29udHJvbF9wcm9wZXJ0aWVzIChHT2JqZWN0ICogb2JqZWN0LCAuLi4pIEdfR05VQ19OVUxMX1RFUk1JTkFURUQ7CisKK0dzdENvbnRyb2xsZXIgKmdzdF9vYmplY3RfZ2V0X2NvbnRyb2xsZXIgKEdPYmplY3QgKiBvYmplY3QpOworZ2Jvb2xlYW4gZ3N0X29iamVjdF9zZXRfY29udHJvbGxlciAoR09iamVjdCAqIG9iamVjdCwgR3N0Q29udHJvbGxlciAqIGNvbnRyb2xsZXIpOworCitHc3RDbG9ja1RpbWUgZ3N0X29iamVjdF9zdWdnZXN0X25leHRfc3luYyAoR09iamVjdCAqIG9iamVjdCk7CitnYm9vbGVhbiBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHT2JqZWN0ICogb2JqZWN0LCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKTsKKworZ2Jvb2xlYW4gZ3N0X29iamVjdF9zZXRfY29udHJvbF9zb3VyY2UgKEdPYmplY3QgKm9iamVjdCwgY29uc3QgZ2NoYXIgKiBwcm9wZXJ0eV9uYW1lLCBHc3RDb250cm9sU291cmNlICpjc291cmNlKTsKK0dzdENvbnRyb2xTb3VyY2UgKiBnc3Rfb2JqZWN0X2dldF9jb250cm9sX3NvdXJjZSAoR09iamVjdCAqb2JqZWN0LCBjb25zdCBnY2hhciAqIHByb3BlcnR5X25hbWUpOworCitnYm9vbGVhbiBnc3Rfb2JqZWN0X2dldF92YWx1ZV9hcnJheXMgKEdPYmplY3QgKiBvYmplY3QsCisgICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgR1NMaXN0ICogdmFsdWVfYXJyYXlzKTsKK2dib29sZWFuIGdzdF9vYmplY3RfZ2V0X3ZhbHVlX2FycmF5IChHT2JqZWN0ICogb2JqZWN0LAorICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdzdFZhbHVlQXJyYXkgKiB2YWx1ZV9hcnJheSk7CisKK0dzdENsb2NrVGltZSBnc3Rfb2JqZWN0X2dldF9jb250cm9sX3JhdGUgKEdPYmplY3QgKiBvYmplY3QpOwordm9pZCBnc3Rfb2JqZWN0X3NldF9jb250cm9sX3JhdGUgKEdPYmplY3QgKiBvYmplY3QsIEdzdENsb2NrVGltZSBjb250cm9sX3JhdGUpOworCisvKiBsaWIgaW5pdC9kb25lICovCisKK2dib29sZWFuIGdzdF9jb250cm9sbGVyX2luaXQgKGludCAqIGFyZ2MsIGNoYXIgKioqYXJndik7CisKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fR1NUX0NPTlRST0xMRVJfSF9fICovCmRpZmYgLS1naXQgYS9saWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXJwcml2YXRlLmggYi9saWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXJwcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRjNTdhNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlcnByaXZhdGUuaApAQCAtMCwwICsxLDUzIEBACisvKiBHU3RyZWFtZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBTdGVmYW4gS29zdCA8ZW5zb25pYyBhdCB1c2VycyBkb3Qgc2YgZG90IG5ldD4KKyAqCisgKiBnc3Rjb250cm9sbGVycHJpdmF0ZS5oOiBkeW5hbWljIHBhcmFtZXRlciBjb250cm9sIHN1YnN5c3RlbQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19HU1RfQ09OVFJPTExFUl9QUklWQVRFX0hfXworI2RlZmluZSBfX0dTVF9DT05UUk9MTEVSX1BSSVZBVEVfSF9fCisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKKyNpbmNsdWRlIDxnc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmg+CisjaW5jbHVkZSA8Z3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbHNvdXJjZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICogR3N0Q29udHJvbGxlZFByb3BlcnR5OgorICovCit0eXBlZGVmIHN0cnVjdCBfR3N0Q29udHJvbGxlZFByb3BlcnR5Cit7CisgIEdQYXJhbVNwZWMgKnBzcGVjOyAgICAgICAgICAgIC8qIEdQYXJhbVNwZWMgZm9yIHRoaXMgcHJvcGVydHkgKi8KKyAgY29uc3QgZ2NoYXIgKm5hbWU7ICAgICAgICAgICAgLyogbmFtZSBvZiB0aGUgcHJvcGVydHkgKi8KKyAgR3N0Q29udHJvbFNvdXJjZSAqY3NvdXJjZTsgICAgLyogR3N0Q29udHJvbFNvdXJjZSBmb3IgdGhpcyBwcm9wZXJ0eSAqLworICBnYm9vbGVhbiBkaXNhYmxlZDsKKyAgR1ZhbHVlIGxhc3RfdmFsdWU7Cit9IEdzdENvbnRyb2xsZWRQcm9wZXJ0eTsKKworI2RlZmluZSBHU1RfQ09OVFJPTExFRF9QUk9QRVJUWShvYmopICAgICgoR3N0Q29udHJvbGxlZFByb3BlcnR5ICopKG9iaikpCisKK2V4dGVybiBHUXVhcmsgcHJpdl9nc3RfY29udHJvbGxlcl9rZXk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9DT05UUk9MTEVSX1BSSVZBVEVfSF9fICovCmRpZmYgLS1naXQgYS9saWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xzb3VyY2UuYyBiL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbHNvdXJjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkN2Q0N2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xzb3VyY2UuYwpAQCAtMCwwICsxLDE1NSBAQAorLyogR1N0cmVhbWVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KKyAqCisgKiBnc3Rjb250cm9sc291cmNlLmM6IEludGVyZmFjZSBkZWNsYXJhdGlvbiBmb3IgY29udHJvbCBzb3VyY2VzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoqCisgKiBTRUNUSU9OOmdzdGNvbnRyb2xzb3VyY2UKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogYmFzZSBjbGFzcyBmb3IgY29udHJvbCBzb3VyY2Ugc291cmNlcworICoKKyAqIFRoZSAjR3N0Q29udHJvbFNvdXJjZSBpcyBhIGJhc2UgY2xhc3MgZm9yIGNvbnRyb2wgdmFsdWUgc291cmNlcyB0aGF0IGNvdWxkCisgKiBiZSB1c2VkIGJ5ICNHc3RDb250cm9sbGVyIHRvIGdldCB0aW1lc3RhbXAtdmFsdWUgcGFpcnMuCisgKgorICogQSAjR3N0Q29udHJvbFNvdXJjZSBpcyB1c2VkIGJ5IGZpcnN0IGdldHRpbmcgYW4gaW5zdGFuY2UsIGJpbmRpbmcgaXQgdG8gYQorICogI0dQYXJhbVNwZWMgKGZvciBleGFtcGxlIGJ5IHVzaW5nIGdzdF9jb250cm9sbGVyX3NldF9jb250cm9sX3NvdXJjZSgpKSBhbmQKKyAqIHRoZW4gYnkgaGF2aW5nIGl0IHVzZWQgYnkgdGhlICNHc3RDb250cm9sbGVyIG9yIGNhbGxpbmcKKyAqIGdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWUoKSBvciBnc3RfY29udHJvbF9zb3VyY2VfZ2V0X3ZhbHVlX2FycmF5KCkuCisgKgorICogRm9yIGltcGxlbWVudGluZyBhIG5ldyAjR3N0Q29udHJvbFNvdXJjZSBvbmUgaGFzIHRvIGltcGxlbWVudCBhCisgKiAjR3N0Q29udHJvbFNvdXJjZUJpbmQgbWV0aG9kLCB3aGljaCB3aWxsIGRlcGVuZGluZyBvbiB0aGUgI0dQYXJhbVNwZWMgc2V0IHVwCisgKiB0aGUgY29udHJvbCBzb3VyY2UgZm9yIHVzZSBhbmQgc2V0cyB0aGUgI0dzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSBhbmQKKyAqICNHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSBmdW5jdGlvbnMuIFRoZXNlIGFyZSB0aGVuIHVzZWQgYnkKKyAqIGdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWUoKSBvciBnc3RfY29udHJvbF9zb3VyY2VfZ2V0X3ZhbHVlX2FycmF5KCkKKyAqIHRvIGdldCB2YWx1ZXMgZm9yIHNwZWNpZmljIHRpbWVzdGFtcHMuCisgKgorICovCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworI2luY2x1ZGUgImdzdGNvbnRyb2xzb3VyY2UuaCIKKworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgY29udHJvbGxlcl9kZWJ1ZworR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTiAoR1NUX0NBVF9ERUZBVUxUKTsKKworR19ERUZJTkVfQUJTVFJBQ1RfVFlQRSAoR3N0Q29udHJvbFNvdXJjZSwgZ3N0X2NvbnRyb2xfc291cmNlLCBHX1RZUEVfT0JKRUNUKTsKKworc3RhdGljIEdPYmplY3RDbGFzcyAqcGFyZW50X2NsYXNzID0gTlVMTDsKKworc3RhdGljIHZvaWQKK2dzdF9jb250cm9sX3NvdXJjZV9jbGFzc19pbml0IChHc3RDb250cm9sU291cmNlQ2xhc3MgKiBrbGFzcykKK3sKKyAgLy9HT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOworCisgIHBhcmVudF9jbGFzcyA9IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCAoa2xhc3MpOworCisgIC8qIEhhcyB0byBiZSBpbXBsZW1lbnRlZCBieSBjaGlsZHJlbiAqLworICBrbGFzcy0+YmluZCA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfY29udHJvbF9zb3VyY2VfaW5pdCAoR3N0Q29udHJvbFNvdXJjZSAqIHNlbGYpCit7CisgIC8qIFNldCBkZWZhdWx0IGhhbmRsZXJzIHRoYXQgcHJpbnQgYSB3YXJuaW5nICovCisgIHNlbGYtPmdldF92YWx1ZSA9IE5VTEw7CisgIHNlbGYtPmdldF92YWx1ZV9hcnJheSA9IE5VTEw7CisgIHNlbGYtPmJvdW5kID0gRkFMU0U7Cit9CisKKy8qKgorICogZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZToKKyAqIEBzZWxmOiB0aGUgI0dzdENvbnRyb2xTb3VyY2Ugb2JqZWN0CisgKiBAdGltZXN0YW1wOiB0aGUgdGltZSBmb3Igd2hpY2ggdGhlIHZhbHVlIHNob3VsZCBiZSByZXR1cm5lZAorICogQHZhbHVlOiB0aGUgdmFsdWUKKyAqCisgKiBHZXRzIHRoZSB2YWx1ZSBmb3IgdGhpcyAjR3N0Q29udHJvbFNvdXJjZSBhdCBhIGdpdmVuIHRpbWVzdGFtcC4KKyAqCisgKiBSZXR1cm5zOiBGQUxTRSBpZiB0aGUgdmFsdWUgY291bGRuJ3QgYmUgcmV0dXJuZWQsIFRSVUUgb3RoZXJ3aXNlLgorICovCitnYm9vbGVhbgorZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZSAoR3N0Q29udHJvbFNvdXJjZSAqIHNlbGYsIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsCisgICAgR1ZhbHVlICogdmFsdWUpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ09OVFJPTF9TT1VSQ0UgKHNlbGYpLCBGQUxTRSk7CisKKyAgaWYgKEdfTElLRUxZIChzZWxmLT5nZXRfdmFsdWUpKSB7CisgICAgcmV0dXJuIHNlbGYtPmdldF92YWx1ZSAoc2VsZiwgdGltZXN0YW1wLCB2YWx1ZSk7CisgIH0gZWxzZSB7CisgICAgR1NUX0VSUk9SICgiTm90IGJvdW5kIHRvIGEgc3BlY2lmaWMgcHJvcGVydHkgeWV0ISIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCisvKioKKyAqIGdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWVfYXJyYXk6CisgKiBAc2VsZjogdGhlICNHc3RDb250cm9sU291cmNlIG9iamVjdAorICogQHRpbWVzdGFtcDogdGhlIHRpbWUgdGhhdCBzaG91bGQgYmUgcHJvY2Vzc2VkCisgKiBAdmFsdWVfYXJyYXk6IGFycmF5IHRvIHB1dCBjb250cm9sLXZhbHVlcyBpbgorICoKKyAqIEdldHMgYW4gYXJyYXkgb2YgdmFsdWVzIGZvciBvbmUgZWxlbWVudCBwcm9wZXJ0eS4KKyAqCisgKiBBbGwgZmllbGRzIG9mIEB2YWx1ZV9hcnJheSBtdXN0IGJlIGZpbGxlZCBjb3JyZWN0bHkuIEVzcGVjaWFsbHkgdGhlCisgKiBAdmFsdWVfYXJyYXktPnZhbHVlcyBhcnJheSBtdXN0IGJlIGJpZyBlbm91Z2ggdG8ga2VlcCB0aGUgcmVxdWVzdGVkIGFtb3VudAorICogb2YgdmFsdWVzLgorICoKKyAqIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZXMgaW4gdGhlIGFycmF5IGlzIHRoZSBzYW1lIGFzIHRoZSBwcm9wZXJ0eSdzIHR5cGUuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGdpdmVuIGFycmF5IGNvdWxkIGJlIGZpbGxlZCwgJUZBTFNFIG90aGVyd2lzZQorICovCitnYm9vbGVhbgorZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZV9hcnJheSAoR3N0Q29udHJvbFNvdXJjZSAqIHNlbGYsCisgICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgR3N0VmFsdWVBcnJheSAqIHZhbHVlX2FycmF5KQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NPTlRST0xfU09VUkNFIChzZWxmKSwgRkFMU0UpOworCisgIGlmIChHX0xJS0VMWSAoc2VsZi0+Z2V0X3ZhbHVlX2FycmF5KSkgeworICAgIHJldHVybiBzZWxmLT5nZXRfdmFsdWVfYXJyYXkgKHNlbGYsIHRpbWVzdGFtcCwgdmFsdWVfYXJyYXkpOworICB9IGVsc2UgeworICAgIEdTVF9FUlJPUiAoIk5vdCBib3VuZCB0byBhIHNwZWNpZmljIHByb3BlcnR5IHlldCEiKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworLyoqCisgKiBnc3RfY29udHJvbF9zb3VyY2VfYmluZDoKKyAqIEBzZWxmOiB0aGUgI0dzdENvbnRyb2xTb3VyY2Ugb2JqZWN0CisgKiBAcHNwZWM6ICNHUGFyYW1TcGVjIGZvciB0aGUgcHJvcGVydHkgZm9yIHdoaWNoIHRoaXMgI0dzdENvbnRyb2xTb3VyY2Ugc2hvdWxkIGdlbmVyYXRlIHZhbHVlcy4KKyAqCisgKiBCaW5kcyBhICNHc3RDb250cm9sU291cmNlIHRvIGEgc3BlY2lmaWMgcHJvcGVydHkuIFRoaXMgbXVzdCBiZSBjYWxsZWQgb25seSBvbmNlIGZvciBhCisgKiAjR3N0Q29udHJvbFNvdXJjZS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgI0dzdENvbnRyb2xTb3VyY2Ugd2FzIGJvdW5kIGNvcnJlY3RseSwgJUZBTFNFIG90aGVyd2lzZS4KKyAqLworZ2Jvb2xlYW4KK2dzdF9jb250cm9sX3NvdXJjZV9iaW5kIChHc3RDb250cm9sU291cmNlICogc2VsZiwgR1BhcmFtU3BlYyAqIHBzcGVjKQoreworICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NPTlRST0xfU09VUkNFIChzZWxmKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0NPTlRST0xfU09VUkNFX0dFVF9DTEFTUyAoc2VsZiktPmJpbmQsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKCFzZWxmLT5ib3VuZCwgRkFMU0UpOworCisgIHJldCA9IEdTVF9DT05UUk9MX1NPVVJDRV9HRVRfQ0xBU1MgKHNlbGYpLT5iaW5kIChzZWxmLCBwc3BlYyk7CisKKyAgaWYgKHJldCkKKyAgICBzZWxmLT5ib3VuZCA9IFRSVUU7CisKKyAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbHNvdXJjZS5oIGIvbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sc291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRmY2ExOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbHNvdXJjZS5oCkBAIC0wLDAgKzEsMTYzIEBACisvKiBHU3RyZWFtZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorICoKKyAqIGdzdGNvbnRyb2xzb3VyY2UuaDogSW50ZXJmYWNlIGRlY2xhcmF0aW9uIGZvciBjb250cm9sIHNvdXJjZXMKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fR1NUX0NPTlRST0xfU09VUkNFX0hfXworI2RlZmluZSBfX0dTVF9DT05UUk9MX1NPVVJDRV9IX18KKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgR1NUX1RZUEVfQ09OVFJPTF9TT1VSQ0UgXAorICAoZ3N0X2NvbnRyb2xfc291cmNlX2dldF90eXBlKCkpCisjZGVmaW5lIEdTVF9DT05UUk9MX1NPVVJDRShvYmopIFwKKyAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0NPTlRST0xfU09VUkNFLEdzdENvbnRyb2xTb3VyY2UpKQorI2RlZmluZSBHU1RfQ09OVFJPTF9TT1VSQ0VfQ0xBU1Moa2xhc3MpIFwKKyAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfQ09OVFJPTF9TT1VSQ0UsR3N0Q29udHJvbFNvdXJjZUNsYXNzKSkKKyNkZWZpbmUgR1NUX0lTX0NPTlRST0xfU09VUkNFKG9iaikgXAorICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfQ09OVFJPTF9TT1VSQ0UpKQorI2RlZmluZSBHU1RfSVNfQ09OVFJPTF9TT1VSQ0VfQ0xBU1Moa2xhc3MpIFwKKyAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfQ09OVFJPTF9TT1VSQ0UpKQorI2RlZmluZSBHU1RfQ09OVFJPTF9TT1VSQ0VfR0VUX0NMQVNTKG9iaikgXAorICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIEdTVF9UWVBFX0NPTlRPTF9TT1VSQ0UsIEdzdENvbnRyb2xTb3VyY2VDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9Hc3RDb250cm9sU291cmNlIEdzdENvbnRyb2xTb3VyY2U7Cit0eXBlZGVmIHN0cnVjdCBfR3N0Q29udHJvbFNvdXJjZUNsYXNzIEdzdENvbnRyb2xTb3VyY2VDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9Hc3RUaW1lZFZhbHVlIEdzdFRpbWVkVmFsdWU7Cit0eXBlZGVmIHN0cnVjdCBfR3N0VmFsdWVBcnJheSBHc3RWYWx1ZUFycmF5OworCisvKioKKyAqIEdzdFRpbWVkVmFsdWU6CisgKiBAdGltZXN0YW1wOiB0aW1lc3RhbXAgb2YgdGhlIHZhbHVlIGNoYW5nZQorICogQHZhbHVlOiB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZQorICoKKyAqIFN0cnVjdHVyZSBmb3Igc2F2aW5nIGEgdGltZXN0YW1wIGFuZCBhIHZhbHVlLgorICovCitzdHJ1Y3QgX0dzdFRpbWVkVmFsdWUKK3sKKyAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKKyAgR1ZhbHVlIHZhbHVlOworfTsKKworLyoqCisgKiBHc3RWYWx1ZUFycmF5OgorICogQHByb3BlcnR5X25hbWU6IHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGlzIGFycmF5IGJlbG9uZ3MgdG8KKyAqIEBuYnNhbXBsZXM6IG51bWJlciBvZiBzYW1wbGVzIHJlcXVlc3RlZAorICogQHNhbXBsZV9pbnRlcnZhbDogaW50ZXJ2YWwgYmV0d2VlbiBlYWNoIHNhbXBsZQorICogQHZhbHVlczogcG9pbnRlciB0byB0aGUgYXJyYXkKKyAqCisgKiBTdHJ1Y3R1cmUgdG8gcmVjZWl2ZSBtdWx0aXBsZSB2YWx1ZXMgYXQgb25jZS4KKyAqLworc3RydWN0IF9Hc3RWYWx1ZUFycmF5Cit7CisgIGNvbnN0IGdjaGFyICpwcm9wZXJ0eV9uYW1lOworICBnaW50IG5ic2FtcGxlczsKKyAgR3N0Q2xvY2tUaW1lIHNhbXBsZV9pbnRlcnZhbDsKKyAgZ3BvaW50ZXIgKnZhbHVlczsKK307CisKKy8qKiAKKyAqIEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZQorICogQHNlbGY6IHRoZSAjR3N0Q29udHJvbFNvdXJjZSBpbnN0YW5jZQorICogQHRpbWVzdGFtcDogdGltZXN0YW1wIGZvciB3aGljaCBhIHZhbHVlIHNob3VsZCBiZSBjYWxjdWxhdGVkCisgKiBAdmFsdWU6IGEgI0dWYWx1ZSB3aGljaCB3aWxsIGJlIHNldCB0byB0aGUgcmVzdWx0LiBJdCBtdXN0IGJlIGluaXRpYWxpemVkIHRvIHRoZSBjb3JyZWN0IHR5cGUuCisgKgorICogRnVuY3Rpb24gZm9yIHJldHVybmluZyBhIHZhbHVlIGZvciBhIGdpdmVuIHRpbWVzdGFtcC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdmFsdWUgd2FzIHN1Y2Nlc3NmdWxseSBjYWxjdWxhdGVkLgorICoKKyAqLwordHlwZWRlZiBnYm9vbGVhbiAoKiBHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIChHc3RDb250cm9sU291cmNlICpzZWxmLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBHVmFsdWUgKnZhbHVlKTsKKworLyoqIAorICogR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkKKyAqIEBzZWxmOiB0aGUgI0dzdENvbnRyb2xTb3VyY2UgaW5zdGFuY2UKKyAqIEB0aW1lc3RhbXA6IHRpbWVzdGFtcCBmb3Igd2hpY2ggYSB2YWx1ZSBzaG91bGQgYmUgY2FsY3VsYXRlZAorICogQHZhbHVlX2FycmF5OiBhcnJheSB0byBwdXQgY29udHJvbC12YWx1ZXMgaW4KKyAqCisgKiBGdW5jdGlvbiBmb3IgcmV0dXJuaW5nIGEgI0dzdFZhbHVlQXJyYXkgZm9yIGEgZ2l2ZW4gdGltZXN0YW1wLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSB2YWx1ZXMgd2VyZSBzdWNjZXNzZnVsbHkgY2FsY3VsYXRlZC4KKyAqCisgKi8KK3R5cGVkZWYgZ2Jvb2xlYW4gKCogR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkpIChHc3RDb250cm9sU291cmNlICpzZWxmLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBHc3RWYWx1ZUFycmF5ICp2YWx1ZV9hcnJheSk7CisKKy8qKiAKKyAqIEdzdENvbnRyb2xTb3VyY2VCaW5kCisgKiBAc2VsZjogdGhlICNHc3RDb250cm9sU291cmNlIGluc3RhbmNlCisgKiBAcHNwZWM6ICNHUGFyYW1TcGVjIHRoYXQgc2hvdWxkIGJlIGJvdW5kIHRvCisgKgorICogRnVuY3Rpb24gZm9yIGJpbmRpbmcgYSAjR3N0Q29udHJvbFNvdXJjZSB0byBhICNHUGFyYW1TcGVjLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBwcm9wZXJ0eSBjb3VsZCBiZSBib3VuZCB0byB0aGUgI0dzdENvbnRyb2xTb3VyY2UsICVGQUxTRSBvdGhlcndpc2UuCisgKi8KK3R5cGVkZWYgZ2Jvb2xlYW4gKCogR3N0Q29udHJvbFNvdXJjZUJpbmQpIChHc3RDb250cm9sU291cmNlICpzZWxmLCBHUGFyYW1TcGVjICpwc3BlYyk7CisKKy8qKgorICogR3N0Q29udHJvbFNvdXJjZToKKyAqIEBnZXRfdmFsdWU6IEZ1bmN0aW9uIGZvciByZXR1cm5pbmcgYSB2YWx1ZSBmb3IgYSBnaXZlbiB0aW1lc3RhbXAKKyAqIEBnZXRfdmFsdWVfYXJyYXk6IEZ1bmN0aW9uIGZvciByZXR1cm5pbmcgYSAjR3N0VmFsdWVBcnJheSBmb3IgYSBnaXZlbiB0aW1lc3RhbXAKKyAqCisgKiBUaGUgaW5zdGFuY2Ugc3RydWN0dXJlIG9mICNHc3RDb250cm9sU291cmNlLgorICovCitzdHJ1Y3QgX0dzdENvbnRyb2xTb3VyY2UgeworICBHT2JqZWN0IHBhcmVudDsKKworICAvKjwgcHVibGljID4qLworICBHc3RDb250cm9sU291cmNlR2V0VmFsdWUgZ2V0X3ZhbHVlOyAgICAgICAgICAgICAvKiBSZXR1cm5zIHRoZSB2YWx1ZSBmb3IgYSBwcm9wZXJ0eSBhdCBhIGdpdmVuIHRpbWVzdGFtcCAqLworICBHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSBnZXRfdmFsdWVfYXJyYXk7ICAvKiBSZXR1cm5zIHZhbHVlcyBmb3IgYSBwcm9wZXJ0eSBpbiBhIGdpdmVuIHRpbWVzcGFuICovCisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdib29sZWFuIGJvdW5kOworICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKK307CisKKy8qKgorICogR3N0Q29udHJvbFNvdXJjZUNsYXNzOgorICogQHBhcmVudF9jbGFzczogUGFyZW50IGNsYXNzCisgKiBAYmluZDogQ2xhc3MgbWV0aG9kIGZvciBiaW5kaW5nIHRoZSAjR3N0Q29udHJvbFNvdXJjZSB0byBhIHNwZWNpZmljIEdQYXJhbVNwZWMKKyAqCisgKiBUaGUgY2xhc3Mgc3RydWN0dXJlIG9mICNHc3RDb250cm9sU291cmNlLgorICovCisKK3N0cnVjdCBfR3N0Q29udHJvbFNvdXJjZUNsYXNzCit7CisgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisgIAorICBHc3RDb250cm9sU291cmNlQmluZCBiaW5kOyAgLyogQmluZHMgdGhlIEdzdENvbnRyb2xTb3VyY2UgdG8gYSBzcGVjaWZpYyBHUGFyYW1TcGVjICovCisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOworfTsKKworR1R5cGUgZ3N0X2NvbnRyb2xfc291cmNlX2dldF90eXBlICh2b2lkKTsKKworLyogRnVuY3Rpb25zICovCisKK2dib29sZWFuIGdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWUgKEdzdENvbnRyb2xTb3VyY2UgKnNlbGYsIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdWYWx1ZSAqdmFsdWUpOworZ2Jvb2xlYW4gZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZV9hcnJheSAoR3N0Q29udHJvbFNvdXJjZSAqc2VsZiwgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgR3N0VmFsdWVBcnJheSAqdmFsdWVfYXJyYXkpOworZ2Jvb2xlYW4gZ3N0X2NvbnRyb2xfc291cmNlX2JpbmQgKEdzdENvbnRyb2xTb3VyY2UgKnNlbGYsIEdQYXJhbVNwZWMgKnBzcGVjKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fR1NUX0NPTlRST0xfU09VUkNFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY29udHJvbGxlci9nc3RoZWxwZXIuYyBiL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aGVscGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMxZjI0YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aGVscGVyLmMKQEAgLTAsMCArMSwzNzAgQEAKKy8qIEdTdHJlYW1lcgorICoKKyAqIENvcHlyaWdodCAoQykgPDIwMDU+IFN0ZWZhbiBLb3N0IDxlbnNvbmljIGF0IHVzZXJzIGRvdCBzZiBkb3QgbmV0PgorICoKKyAqIGdzdGhlbHBlci5jOiBHT2JqZWN0IGNvbnZlbmllbmNlIG1ldGhvZHMgZm9yIHVzaW5nIGR5bmFtaWMgcHJvcGVydGllcworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qKgorICogU0VDVElPTjpnc3Rjb250cm9sbGVyZ29iamVjdAorICogQHNob3J0X2Rlc2NyaXB0aW9uOiAjR09iamVjdCBjb252ZW5pZW5jZSBtZXRob2RzIGZvciB1c2luZyBkeW5hbWljIHByb3BlcnRpZXMKKyAqIEBzZWVfYWxzbzogI0dzdENvbnRyb2xsZXIKKyAqCisgKiBUaGVzZSBtZXRob2RzIGFsbG93IHRvIHVzZSBzb21lICNHc3RDb250cm9sbGVyIGZ1bmN0aW9uYWxpdHkgZGlyZWN0bHkgZnJvbQorICogdGhlICNHT2JqZWN0IGNsYXNzLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNpbmNsdWRlICJnc3Rjb250cm9sbGVycHJpdmF0ZS5oIgorI2luY2x1ZGUgImdzdGNvbnRyb2xsZXIuaCIKKworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgY29udHJvbGxlcl9kZWJ1ZworR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTiAoR1NUX0NBVF9ERUZBVUxUKTsKKworLyoqCisgKiBnc3Rfb2JqZWN0X2NvbnRyb2xfcHJvcGVydGllczoKKyAqIEBvYmplY3Q6IHRoZSBvYmplY3Qgb2Ygd2hpY2ggc29tZSBwcm9wZXJ0aWVzIHNob3VsZCBiZSBjb250cm9sbGVkCisgKiBALi4uOiAlTlVMTCB0ZXJtaW5hdGVkIGxpc3Qgb2YgcHJvcGVydHkgbmFtZXMgdGhhdCBzaG91bGQgYmUgY29udHJvbGxlZAorICoKKyAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBHT2JqZWN0CisgKgorICogQ3JlYXRlcyBhIEdzdENvbnRyb2xsZXIgdGhhdCBhbGxvd3MgeW91IHRvIGR5bmFtaWNhbGx5IGNvbnRyb2wgb25lLCBvciBtb3JlLCBHT2JqZWN0IHByb3BlcnRpZXMuCisgKiBJZiB0aGUgZ2l2ZW4gR09iamVjdCBhbHJlYWR5IGhhcyBhIEdzdENvbnRyb2xsZXIsIGl0IGFkZHMgdGhlIGdpdmVuIHByb3BlcnRpZXMgdG8gdGhlIGV4aXN0aW5nCisgKiBjb250cm9sbGVyIGFuZCByZXR1cm5zIHRoYXQgY29udHJvbGxlci4KKyAqCisgKiBSZXR1cm5zOiBUaGUgR3N0Q29udHJvbGxlciB3aXRoIHdoaWNoIHRoZSB1c2VyIGNhbiBjb250cm9sIHRoZSBnaXZlbiBwcm9wZXJ0aWVzIGR5bmFtaWNhbGx5IG9yIE5VTEwgaWYKKyAqIG9uZSBvciBtb3JlIG9mIHRoZSBnaXZlbiBwcm9wZXJ0aWVzIGFyZW4ndCBhdmFpbGFibGUsIG9yIGNhbm5vdCBiZSBjb250cm9sbGVkLCBmb3IgdGhlIGdpdmVuIGVsZW1lbnQuCisgKiBTaW5jZTogMC45CisgKi8KK0dzdENvbnRyb2xsZXIgKgorZ3N0X29iamVjdF9jb250cm9sX3Byb3BlcnRpZXMgKEdPYmplY3QgKiBvYmplY3QsIC4uLikKK3sKKyAgR3N0Q29udHJvbGxlciAqY3RybDsKKyAgdmFfbGlzdCB2YXJfYXJnczsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19PQkpFQ1QgKG9iamVjdCksIE5VTEwpOworCisgIHZhX3N0YXJ0ICh2YXJfYXJncywgb2JqZWN0KTsKKyAgY3RybCA9IGdzdF9jb250cm9sbGVyX25ld192YWxpc3QgKG9iamVjdCwgdmFyX2FyZ3MpOworICB2YV9lbmQgKHZhcl9hcmdzKTsKKyAgcmV0dXJuIChjdHJsKTsKK30KKworLyoqCisgKiBnc3Rfb2JqZWN0X3VuY29udHJvbF9wcm9wZXJ0aWVzOgorICogQG9iamVjdDogdGhlIG9iamVjdCBvZiB3aGljaCBzb21lIHByb3BlcnRpZXMgc2hvdWxkIG5vdCBiZSBjb250cm9sbGVkIGFueW1vcmUKKyAqIEAuLi46ICVOVUxMIHRlcm1pbmF0ZWQgbGlzdCBvZiBwcm9wZXJ0eSBuYW1lcyB0aGF0IHNob3VsZCBiZSBjb250cm9sbGVkCisgKgorICogQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIEdPYmplY3QKKyAqCisgKiBSZW1vdmVzIHRoZSBnaXZlbiBlbGVtZW50J3MgcHJvcGVydGllcyBmcm9tIGl0J3MgY29udHJvbGxlcgorICoKKyAqIFJldHVybnM6ICVGQUxTRSBpZiBvbmUgb2YgdGhlIGdpdmVuIHByb3BlcnR5IG5hbWVzIGlzbid0IGhhbmRsZWQgYnkgdGhlCisgKiBjb250cm9sbGVyLCAlVFJVRSBvdGhlcndpc2UKKyAqIFNpbmNlOiAwLjkKKyAqLworZ2Jvb2xlYW4KK2dzdF9vYmplY3RfdW5jb250cm9sX3Byb3BlcnRpZXMgKEdPYmplY3QgKiBvYmplY3QsIC4uLikKK3sKKyAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7CisgIEdzdENvbnRyb2xsZXIgKmN0cmw7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfT0JKRUNUIChvYmplY3QpLCBGQUxTRSk7CisKKyAgaWYgKChjdHJsID0gZ19vYmplY3RfZ2V0X3FkYXRhIChvYmplY3QsIHByaXZfZ3N0X2NvbnRyb2xsZXJfa2V5KSkpIHsKKyAgICB2YV9saXN0IHZhcl9hcmdzOworCisgICAgdmFfc3RhcnQgKHZhcl9hcmdzLCBvYmplY3QpOworICAgIHJlcyA9IGdzdF9jb250cm9sbGVyX3JlbW92ZV9wcm9wZXJ0aWVzX3ZhbGlzdCAoY3RybCwgdmFyX2FyZ3MpOworICAgIHZhX2VuZCAodmFyX2FyZ3MpOworICB9CisgIHJldHVybiAocmVzKTsKK30KKworLyoqCisgKiBnc3Rfb2JqZWN0X2dldF9jb250cm9sbGVyOgorICogQG9iamVjdDogdGhlIG9iamVjdCB0aGF0IGhhcyBjb250cm9sbGVkIHByb3BlcnRpZXMKKyAqCisgKiBHZXRzIHRoZSBjb250cm9sbGVyIGZvciB0aGUgZ2l2ZW4gR09iamVjdAorICogCisgKiBSZXR1cm5zOiB0aGUgY29udHJvbGxlciBoYW5kbGluZyBzb21lIG9mIHRoZSBnaXZlbiBlbGVtZW50J3MgcHJvcGVydGllcywgJU5VTEwgaWYgbm8gY29udHJvbGxlcgorICogU2luY2U6IDAuOQorICovCisvKiBGSVhNRSAwLjExOiBUaGlzIHNob3VsZCByZXR1cm4gYSBuZXcgcmVmZXJlbmNlICovCitHc3RDb250cm9sbGVyICoKK2dzdF9vYmplY3RfZ2V0X2NvbnRyb2xsZXIgKEdPYmplY3QgKiBvYmplY3QpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX0lTX09CSkVDVCAob2JqZWN0KSwgTlVMTCk7CisKKyAgcmV0dXJuIChnX29iamVjdF9nZXRfcWRhdGEgKG9iamVjdCwgcHJpdl9nc3RfY29udHJvbGxlcl9rZXkpKTsKK30KKworLyoqCisgKiBnc3Rfb2JqZWN0X3NldF9jb250cm9sbGVyOgorICogQG9iamVjdDogdGhlIG9iamVjdCB0aGF0IHNob3VsZCBnZXQgdGhlIGNvbnRyb2xsZXIKKyAqIEBjb250cm9sbGVyOiB0aGUgY29udHJvbGxlciBvYmplY3QgdG8gcGx1ZyBpbgorICoKKyAqIFNldHMgdGhlIGNvbnRyb2xsZXIgb24gdGhlIGdpdmVuIEdPYmplY3QKKyAqCisgKiBSZXR1cm5zOiAlRkFMU0UgaWYgdGhlIEdPYmplY3QgYWxyZWFkeSBoYXMgYW4gY29udHJvbGxlciwgJVRSVUUgb3RoZXJ3aXNlCisgKiBTaW5jZTogMC45CisgKi8KKy8qIEZJWE1FIDAuMTE6IFRoaXMgc2hvdWxkIGluY3JlYXNlIHRoZSByZWZjb3VudCBiZWZvcmUgc3RvcmluZyAqLworZ2Jvb2xlYW4KK2dzdF9vYmplY3Rfc2V0X2NvbnRyb2xsZXIgKEdPYmplY3QgKiBvYmplY3QsIEdzdENvbnRyb2xsZXIgKiBjb250cm9sbGVyKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19PQkpFQ1QgKG9iamVjdCksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGNvbnRyb2xsZXIsIEZBTFNFKTsKKworICBpZiAoIWdfb2JqZWN0X2dldF9xZGF0YSAob2JqZWN0LCBwcml2X2dzdF9jb250cm9sbGVyX2tleSkpIHsKKyAgICBnX29iamVjdF9zZXRfcWRhdGEgKG9iamVjdCwgcHJpdl9nc3RfY29udHJvbGxlcl9rZXksIGNvbnRyb2xsZXIpOworICAgIHJldHVybiAoVFJVRSk7CisgIH0KKyAgcmV0dXJuIChGQUxTRSk7Cit9CisKKyAvKioKKyAqIGdzdF9vYmplY3Rfc3VnZ2VzdF9uZXh0X3N5bmM6CisgKiBAb2JqZWN0OiB0aGUgb2JqZWN0IHRoYXQgaGFzIGNvbnRyb2xsZWQgcHJvcGVydGllcworICoKKyAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBHT2JqZWN0CisgKgorICogUmV0dXJuczogc2FtZSB0aGluZyBhcyBnc3RfY29udHJvbGxlcl9zdWdnZXN0X25leHRfc3luYygpCisgKiBTaW5jZTogMC4xMC4xMworICovCitHc3RDbG9ja1RpbWUKK2dzdF9vYmplY3Rfc3VnZ2VzdF9uZXh0X3N5bmMgKEdPYmplY3QgKiBvYmplY3QpCit7CisgIEdzdENvbnRyb2xsZXIgKmN0cmwgPSBOVUxMOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX0lTX09CSkVDVCAob2JqZWN0KSwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisKKyAgaWYgKChjdHJsID0gZ19vYmplY3RfZ2V0X3FkYXRhIChvYmplY3QsIHByaXZfZ3N0X2NvbnRyb2xsZXJfa2V5KSkpIHsKKyAgICByZXR1cm4gZ3N0X2NvbnRyb2xsZXJfc3VnZ2VzdF9uZXh0X3N5bmMgKGN0cmwpOworICB9CisgIHJldHVybiAoR1NUX0NMT0NLX1RJTUVfTk9ORSk7Cit9CisKKy8qKgorICogZ3N0X29iamVjdF9zeW5jX3ZhbHVlczoKKyAqIEBvYmplY3Q6IHRoZSBvYmplY3QgdGhhdCBoYXMgY29udHJvbGxlZCBwcm9wZXJ0aWVzCisgKiBAdGltZXN0YW1wOiB0aGUgdGltZSB0aGF0IHNob3VsZCBiZSBwcm9jZXNzZWQKKyAqCisgKiBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgR09iamVjdAorICoKKyAqIFJldHVybnM6IHNhbWUgdGhpbmcgYXMgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMoKQorICogU2luY2U6IDAuOQorICovCitnYm9vbGVhbgorZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR09iamVjdCAqIG9iamVjdCwgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCkKK3sKKyAgR3N0Q29udHJvbGxlciAqY3RybCA9IE5VTEw7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfT0JKRUNUIChvYmplY3QpLCBGQUxTRSk7CisKKyAgaWYgKChjdHJsID0gZ19vYmplY3RfZ2V0X3FkYXRhIChvYmplY3QsIHByaXZfZ3N0X2NvbnRyb2xsZXJfa2V5KSkpIHsKKyAgICByZXR1cm4gZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIHRpbWVzdGFtcCk7CisgIH0KKyAgLyogdGhpcyBpcyBubyBmYWlsdXJlLCBpdHMgY2FsbGVkIGJ5IGVsZW1lbnRzIHJlZ2FyZGxlc3MgaWYgdGhlcmUgaXMgYQorICAgKiBjb250cm9sbGVyIGFzc2lnbmVkIG9yIG5vdAorICAgKi8KKyAgcmV0dXJuIChUUlVFKTsKK30KKworLyoqCisgKiBnc3Rfb2JqZWN0X3NldF9jb250cm9sX3NvdXJjZToKKyAqIEBvYmplY3Q6IHRoZSBjb250cm9sbGVyIG9iamVjdAorICogQHByb3BlcnR5X25hbWU6IG5hbWUgb2YgdGhlIHByb3BlcnR5IGZvciB3aGljaCB0aGUgI0dzdENvbnRyb2xTb3VyY2Ugc2hvdWxkIGJlIHNldAorICogQGNzb3VyY2U6IHRoZSAjR3N0Q29udHJvbFNvdXJjZSB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciB0aGUgcHJvcGVydHkKKyAqCisgKiBTZXRzIHRoZSAjR3N0Q29udHJvbFNvdXJjZSBmb3IgQHByb3BlcnR5X25hbWUuIElmIHRoZXJlIGFscmVhZHkgd2FzIGEgI0dzdENvbnRyb2xTb3VyY2UKKyAqIGZvciB0aGlzIHByb3BlcnR5IGl0IHdpbGwgYmUgdW5yZWZlcmVuY2VkLgorICoKKyAqIFJldHVybnM6ICVGQUxTRSBpZiB0aGUgZ2l2ZW4gcHJvcGVydHkgaXNuJ3QgaGFuZGxlZCBieSB0aGUgY29udHJvbGxlciBvciB0aGUgbmV3ICNHc3RDb250cm9sU291cmNlCisgKiBjb3VsZG4ndCBiZSBib3VuZCB0byB0aGUgcHJvcGVydHksICVUUlVFIGlmIGV2ZXJ5dGhpbmcgd29ya2VkIGFzIGV4cGVjdGVkLgorICoKKyAqIFNpbmNlOiAwLjEwLjE0CisgKi8KK2dib29sZWFuCitnc3Rfb2JqZWN0X3NldF9jb250cm9sX3NvdXJjZSAoR09iamVjdCAqIG9iamVjdCwgY29uc3QgZ2NoYXIgKiBwcm9wZXJ0eV9uYW1lLAorICAgIEdzdENvbnRyb2xTb3VyY2UgKiBjc291cmNlKQoreworICBHc3RDb250cm9sbGVyICpjdHJsID0gTlVMTDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19PQkpFQ1QgKG9iamVjdCksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DT05UUk9MX1NPVVJDRSAoY3NvdXJjZSksIEZBTFNFKTsKKworICBpZiAoKGN0cmwgPSBnX29iamVjdF9nZXRfcWRhdGEgKG9iamVjdCwgcHJpdl9nc3RfY29udHJvbGxlcl9rZXkpKSkgeworICAgIHJldHVybiBnc3RfY29udHJvbGxlcl9zZXRfY29udHJvbF9zb3VyY2UgKGN0cmwsIHByb3BlcnR5X25hbWUsIGNzb3VyY2UpOworICB9CisgIHJldHVybiBGQUxTRTsKK30KKworLyoqCisgKiBnc3Rfb2JqZWN0X2dldF9jb250cm9sX3NvdXJjZToKKyAqIEBvYmplY3Q6IHRoZSBvYmplY3QKKyAqIEBwcm9wZXJ0eV9uYW1lOiBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBmb3Igd2hpY2ggdGhlICNHc3RDb250cm9sU291cmNlIHNob3VsZCBiZSBnZXQKKyAqCisgKiBHZXRzIHRoZSBjb3JyZXNwb25kaW5nICNHc3RDb250cm9sU291cmNlIGZvciB0aGUgcHJvcGVydHkuIFRoaXMgc2hvdWxkIGJlIHVucmVmZXJlbmNlZAorICogYWdhaW4gYWZ0ZXIgdXNlLgorICoKKyAqIFJldHVybnM6IHRoZSAjR3N0Q29udHJvbFNvdXJjZSBmb3IgQHByb3BlcnR5X25hbWUgb3IgTlVMTCBpZiB0aGUgcHJvcGVydHkgaXMgbm90CisgKiBjb250cm9sbGVkIGJ5IHRoaXMgY29udHJvbGxlciBvciBubyAjR3N0Q29udHJvbFNvdXJjZSB3YXMgYXNzaWduZWQgeWV0LgorICoKKyAqIFNpbmNlOiAwLjEwLjE0CisgKi8KK0dzdENvbnRyb2xTb3VyY2UgKgorZ3N0X29iamVjdF9nZXRfY29udHJvbF9zb3VyY2UgKEdPYmplY3QgKiBvYmplY3QsIGNvbnN0IGdjaGFyICogcHJvcGVydHlfbmFtZSkKK3sKKyAgR3N0Q29udHJvbGxlciAqY3RybCA9IE5VTEw7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfT0JKRUNUIChvYmplY3QpLCBOVUxMKTsKKworICBpZiAoKGN0cmwgPSBnX29iamVjdF9nZXRfcWRhdGEgKG9iamVjdCwgcHJpdl9nc3RfY29udHJvbGxlcl9rZXkpKSkgeworICAgIHJldHVybiBnc3RfY29udHJvbGxlcl9nZXRfY29udHJvbF9zb3VyY2UgKGN0cmwsIHByb3BlcnR5X25hbWUpOworICB9CisgIHJldHVybiBOVUxMOworfQorCisvKioKKyAqIGdzdF9vYmplY3RfZ2V0X3ZhbHVlX2FycmF5czoKKyAqIEBvYmplY3Q6IHRoZSBvYmplY3QgdGhhdCBoYXMgY29udHJvbGxlZCBwcm9wZXJ0aWVzCisgKiBAdGltZXN0YW1wOiB0aGUgdGltZSB0aGF0IHNob3VsZCBiZSBwcm9jZXNzZWQKKyAqIEB2YWx1ZV9hcnJheXM6IGxpc3QgdG8gcmV0dXJuIHRoZSBjb250cm9sLXZhbHVlcyBpbgorICoKKyAqIEZ1bmN0aW9uIHRvIGJlIGFibGUgdG8gZ2V0IGFuIGFycmF5IG9mIHZhbHVlcyBmb3Igb25lIG9yIG1vcmUgZ2l2ZW4gZWxlbWVudAorICogcHJvcGVydGllcy4KKyAqCisgKiBJZiB0aGUgR3N0VmFsdWVBcnJheS0+dmFsdWVzIGFycmF5IGluIGxpc3Qgbm9kZXMgaXMgTlVMTCwgaXQgd2lsbCBiZSBjcmVhdGVkCisgKiBieSB0aGUgZnVuY3Rpb24uCisgKiBUaGUgdHlwZSBvZiB0aGUgdmFsdWVzIGluIHRoZSBhcnJheSBhcmUgdGhlIHNhbWUgYXMgdGhlIHByb3BlcnR5J3MgdHlwZS4KKyAqCisgKiBUaGUgZ19vYmplY3RfKiBmdW5jdGlvbnMgYXJlIGp1c3QgY29udmVuaWVuY2UgZnVuY3Rpb25zIGZvciBHT2JqZWN0CisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGdpdmVuIGFycmF5KHMpIGNvdWxkIGJlIGZpbGxlZCwgJUZBTFNFIG90aGVyd2lzZQorICogU2luY2U6IDAuOQorICovCitnYm9vbGVhbgorZ3N0X29iamVjdF9nZXRfdmFsdWVfYXJyYXlzIChHT2JqZWN0ICogb2JqZWN0LCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLAorICAgIEdTTGlzdCAqIHZhbHVlX2FycmF5cykKK3sKKyAgR3N0Q29udHJvbGxlciAqY3RybDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19PQkpFQ1QgKG9iamVjdCksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lc3RhbXApLCBGQUxTRSk7CisKKyAgaWYgKChjdHJsID0gZ19vYmplY3RfZ2V0X3FkYXRhIChvYmplY3QsIHByaXZfZ3N0X2NvbnRyb2xsZXJfa2V5KSkpIHsKKyAgICByZXR1cm4gZ3N0X2NvbnRyb2xsZXJfZ2V0X3ZhbHVlX2FycmF5cyAoY3RybCwgdGltZXN0YW1wLCB2YWx1ZV9hcnJheXMpOworICB9CisgIHJldHVybiAoRkFMU0UpOworfQorCisvKioKKyAqIGdzdF9vYmplY3RfZ2V0X3ZhbHVlX2FycmF5OgorICogQG9iamVjdDogdGhlIG9iamVjdCB0aGF0IGhhcyBjb250cm9sbGVkIHByb3BlcnRpZXMKKyAqIEB0aW1lc3RhbXA6IHRoZSB0aW1lIHRoYXQgc2hvdWxkIGJlIHByb2Nlc3NlZAorICogQHZhbHVlX2FycmF5OiBhcnJheSB0byBwdXQgY29udHJvbC12YWx1ZXMgaW4KKyAqCisgKiBGdW5jdGlvbiB0byBiZSBhYmxlIHRvIGdldCBhbiBhcnJheSBvZiB2YWx1ZXMgZm9yIG9uZSBlbGVtZW50IHByb3BlcnRpZXMKKyAqCisgKiBJZiB0aGUgR3N0VmFsdWVBcnJheS0+dmFsdWVzIGFycmF5IGlzIE5VTEwsIGl0IHdpbGwgYmUgY3JlYXRlZCBieSB0aGUgZnVuY3Rpb24uCisgKiBUaGUgdHlwZSBvZiB0aGUgdmFsdWVzIGluIHRoZSBhcnJheSBhcmUgdGhlIHNhbWUgYXMgdGhlIHByb3BlcnR5J3MgdHlwZS4KKyAqCisgKiBUaGUgZ19vYmplY3RfKiBmdW5jdGlvbnMgYXJlIGp1c3QgY29udmVuaWVuY2UgZnVuY3Rpb25zIGZvciBHT2JqZWN0CisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGdpdmVuIGFycmF5KHMpIGNvdWxkIGJlIGZpbGxlZCwgJUZBTFNFIG90aGVyd2lzZQorICogU2luY2U6IDAuOQorICovCitnYm9vbGVhbgorZ3N0X29iamVjdF9nZXRfdmFsdWVfYXJyYXkgKEdPYmplY3QgKiBvYmplY3QsIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsCisgICAgR3N0VmFsdWVBcnJheSAqIHZhbHVlX2FycmF5KQoreworICBHc3RDb250cm9sbGVyICpjdHJsOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX0lTX09CSkVDVCAob2JqZWN0KSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHRpbWVzdGFtcCksIEZBTFNFKTsKKworICBpZiAoKGN0cmwgPSBnX29iamVjdF9nZXRfcWRhdGEgKG9iamVjdCwgcHJpdl9nc3RfY29udHJvbGxlcl9rZXkpKSkgeworICAgIHJldHVybiBnc3RfY29udHJvbGxlcl9nZXRfdmFsdWVfYXJyYXkgKGN0cmwsIHRpbWVzdGFtcCwgdmFsdWVfYXJyYXkpOworICB9CisgIHJldHVybiAoRkFMU0UpOworfQorCisvKioKKyAqIGdzdF9vYmplY3RfZ2V0X2NvbnRyb2xfcmF0ZToKKyAqIEBvYmplY3Q6IHRoZSBvYmplY3QgdGhhdCBoYXMgY29udHJvbGxlZCBwcm9wZXJ0aWVzCisgKgorICogT2J0YWluIHRoZSBjb250cm9sLXJhdGUgZm9yIHRoaXMgQG9iamVjdC4gQXVkaW8gcHJvY2Vzc2luZyAjR3N0RWxlbWVudAorICogb2JqZWN0cyB3aWxsIHVzZSB0aGlzIHJhdGUgdG8gc3ViLWRpdmlkZSB0aGVpciBwcm9jZXNzaW5nIGxvb3AgYW5kIGNhbGwKKyAqIGdzdF9vYmplY3Rfc3luY192YWx1ZXMoKSBpbmJldHdlZW4uIFRoZSBsZW5ndGggb2YgdGhlIHByb2Nlc3Npbmcgc2VnbWVudAorICogc2hvdWxkIGJlIHVwIHRvIEBjb250cm9sLXJhdGUgbmFub3NlY29uZHMuCisgKgorICogSWYgdGhlIEBvYmplY3QgaXMgbm90IHVuZGVyIHByb3BlcnR5IGNvbnRyb2wsIHRoaXMgd2lsbCByZXR1cm4KKyAqICVHU1RfQ0xPQ0tfVElNRV9OT05FLiBUaGlzIGFsbG93cyB0aGUgZWxlbWVudCB0byBhdm9pZCB0aGUgc3ViLWRpdmlkaW5nLgorICoKKyAqIFRoZSBjb250cm9sLXJhdGUgaXMgbm90IGV4cGVjdGVkIHRvIGNoYW5nZSBpZiB0aGUgZWxlbWVudCBpcyBpbgorICogJUdTVF9TVEFURV9QQVVTRUQgb3IgJUdTVF9TVEFURV9QTEFZSU5HLgorICoKKyAqIFJldHVybnM6IHRoZSBjb250cm9sIHJhdGUgaW4gbmFub3NlY29uZHMKKyAqIFNpbmNlOiAwLjEwLjEwCisgKi8KK0dzdENsb2NrVGltZQorZ3N0X29iamVjdF9nZXRfY29udHJvbF9yYXRlIChHT2JqZWN0ICogb2JqZWN0KQoreworICBHc3RDb250cm9sbGVyICpjdHJsOworICBHc3RDbG9ja1RpbWUgY29udHJvbF9yYXRlID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19PQkpFQ1QgKG9iamVjdCksIEZBTFNFKTsKKworICBpZiAoKGN0cmwgPSBnX29iamVjdF9nZXRfcWRhdGEgKG9iamVjdCwgcHJpdl9nc3RfY29udHJvbGxlcl9rZXkpKSkgeworICAgIGdfb2JqZWN0X2dldCAoY3RybCwgImNvbnRyb2wtcmF0ZSIsICZjb250cm9sX3JhdGUsIE5VTEwpOworICB9CisgIHJldHVybiAoY29udHJvbF9yYXRlKTsKK30KKworLyoqCisgKiBnc3Rfb2JqZWN0X3NldF9jb250cm9sX3JhdGU6CisgKiBAb2JqZWN0OiB0aGUgb2JqZWN0IHRoYXQgaGFzIGNvbnRyb2xsZWQgcHJvcGVydGllcworICogQGNvbnRyb2xfcmF0ZTogdGhlIG5ldyBjb250cm9sLXJhdGUgaW4gbmFub3NlY29uZHMuCisgKgorICogQ2hhbmdlIHRoZSBjb250cm9sLXJhdGUgZm9yIHRoaXMgQG9iamVjdC4gQXVkaW8gcHJvY2Vzc2luZyAjR3N0RWxlbWVudAorICogb2JqZWN0cyB3aWxsIHVzZSB0aGlzIHJhdGUgdG8gc3ViLWRpdmlkZSB0aGVpciBwcm9jZXNzaW5nIGxvb3AgYW5kIGNhbGwKKyAqIGdzdF9vYmplY3Rfc3luY192YWx1ZXMoKSBpbmJldHdlZW4uIFRoZSBsZW5ndGggb2YgdGhlIHByb2Nlc3Npbmcgc2VnbWVudAorICogc2hvdWxkIGJlIHVwIHRvIEBjb250cm9sLXJhdGUgbmFub3NlY29uZHMuCisgKgorICogVGhlIGNvbnRyb2wtcmF0ZSBzaG91bGQgbm90IGNoYW5nZSBpZiB0aGUgZWxlbWVudCBpcyBpbiAlR1NUX1NUQVRFX1BBVVNFRCBvcgorICogJUdTVF9TVEFURV9QTEFZSU5HLgorICoKKyAqIFNpbmNlOiAwLjEwLjEwCisgKi8KK3ZvaWQKK2dzdF9vYmplY3Rfc2V0X2NvbnRyb2xfcmF0ZSAoR09iamVjdCAqIG9iamVjdCwgR3N0Q2xvY2tUaW1lIGNvbnRyb2xfcmF0ZSkKK3sKKyAgR3N0Q29udHJvbGxlciAqY3RybDsKKworICBnX3JldHVybl9pZl9mYWlsIChHX0lTX09CSkVDVCAob2JqZWN0KSk7CisKKyAgaWYgKChjdHJsID0gZ19vYmplY3RfZ2V0X3FkYXRhIChvYmplY3QsIHByaXZfZ3N0X2NvbnRyb2xsZXJfa2V5KSkpIHsKKyAgICBnX29iamVjdF9zZXQgKGN0cmwsICJjb250cm9sLXJhdGUiLCBjb250cm9sX3JhdGUsIE5VTEwpOworICB9Cit9CmRpZmYgLS1naXQgYS9saWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYyBiL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZmY2MGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYwpAQCAtMCwwICsxLDgxMSBAQAorLyogR1N0cmVhbWVyCisgKgorICogQ29weXJpZ2h0IChDKSA8MjAwNT4gU3RlZmFuIEtvc3QgPGVuc29uaWMgYXQgdXNlcnMgZG90IHNmIGRvdCBuZXQ+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKyAqCisgKiBnc3RpbnRlcnBvbGF0aW9uLmM6IEludGVycG9sYXRpb24gbWV0aG9kcyBmb3IgZHluYW1pYyBwcm9wZXJ0aWVzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJnc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5oIgorI2luY2x1ZGUgImdzdGludGVycG9sYXRpb25jb250cm9sc291cmNlcHJpdmF0ZS5oIgorCisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBjb250cm9sbGVyX2RlYnVnCitHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOIChHU1RfQ0FUX0RFRkFVTFQpOworCisjZGVmaW5lIEVNUFRZKHgpICh4KQorCisvKiBjb21tb24gaGVscGVyICovCisKK3N0YXRpYyBnaW50Citnc3RfY29udHJvbF9wb2ludF9maW5kIChnY29uc3Rwb2ludGVyIHAxLCBnY29uc3Rwb2ludGVyIHAyKQoreworICBHc3RDbG9ja1RpbWUgY3QxID0gKChHc3RDb250cm9sUG9pbnQgKikgcDEpLT50aW1lc3RhbXA7CisgIEdzdENsb2NrVGltZSBjdDIgPSAqKEdzdENsb2NrVGltZSAqKSBwMjsKKworICByZXR1cm4gKChjdDEgPCBjdDIpID8gLTEgOiAoKGN0MSA9PSBjdDIpID8gMCA6IDEpKTsKK30KKworLyoKKyAqIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2ZpbmRfY29udHJvbF9wb2ludF9pdGVyOgorICogQHNlbGY6IHRoZSBpbnRlcnBvbGF0aW9uIGNvbnRyb2wgc291cmNlIHRvIHNlYXJjaCBpbgorICogQHRpbWVzdGFtcDogdGhlIHNlYXJjaCBrZXkKKyAqCisgKiBGaW5kIGxhc3QgdmFsdWUgYmVmb3JlIGdpdmVuIHRpbWVzdGFtcCBpbiBjb250cm9sIHBvaW50IGxpc3QuCisgKiBJZiBhbGwgdmFsdWVzIGluIHRoZSBjb250cm9sIHBvaW50IGxpc3QgY29tZSBhZnRlciB0aGUgZ2l2ZW4KKyAqIHRpbWVzdGFtcCBvciBubyB2YWx1ZXMgZXhpc3QsICVOVUxMIGlzIHJldHVybmVkLgorICoKKyAqIFJldHVybnM6IHRoZSBmb3VuZCAjR1NlcXVlbmNlSXRlciBvciAlTlVMTAorICovCitzdGF0aWMgR1NlcXVlbmNlSXRlciAqZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfZmluZF9jb250cm9sX3BvaW50X2l0ZXIKKyAgICAoR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UgKiBzZWxmLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKQoreworICBHU2VxdWVuY2VJdGVyICppdGVyOworCisgIGlmICghc2VsZi0+cHJpdi0+dmFsdWVzKQorICAgIHJldHVybiBOVUxMOworCisgIGl0ZXIgPQorICAgICAgZ19zZXF1ZW5jZV9zZWFyY2ggKHNlbGYtPnByaXYtPnZhbHVlcywgJnRpbWVzdGFtcCwKKyAgICAgIChHQ29tcGFyZURhdGFGdW5jKSBnc3RfY29udHJvbF9wb2ludF9maW5kLCBOVUxMKTsKKworICAvKiBnX3NlcXVlbmNlX3NlYXJjaCgpIHJldHVybnMgdGhlIGl0ZXIgd2hlcmUgdGltZXN0YW1wCisgICAqIHdvdWxkIGJlIGluc2VydGVkLCBpLmUuIHRoZSBpdGVyID4gdGltZXN0YW1wLCBzbworICAgKiB3ZSBuZWVkIHRvIGdldCB0aGUgcHJldmlvdXMgb25lLiBBbmQgb2YgY291cnNlLCBpZgorICAgKiB0aGVyZSBpcyBubyBwcmV2aW91cyBvbmUsIHdlIHJldHVybiBOVUxMLiAqLworICBpZiAoZ19zZXF1ZW5jZV9pdGVyX2lzX2JlZ2luIChpdGVyKSkKKyAgICByZXR1cm4gTlVMTDsKKworICByZXR1cm4gZ19zZXF1ZW5jZV9pdGVyX3ByZXYgKGl0ZXIpOworfQorCisvKiAgc3RlcHMtbGlrZSAobm8tKWludGVycG9sYXRpb24sIGRlZmF1bHQgKi8KKy8qICBqdXN0IHJldHVybnMgdGhlIHZhbHVlIGZvciB0aGUgbW9zdCByZWNlbnQga2V5LWZyYW1lICovCitzdGF0aWMgaW5saW5lIGNvbnN0IEdWYWx1ZSAqCitfaW50ZXJwb2xhdGVfbm9uZV9nZXQgKEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlICogc2VsZiwKKyAgICBHU2VxdWVuY2VJdGVyICogaXRlcikKK3sKKyAgY29uc3QgR1ZhbHVlICpyZXQ7CisKKyAgaWYgKGl0ZXIpIHsKKyAgICBHc3RDb250cm9sUG9pbnQgKmNwID0gZ19zZXF1ZW5jZV9nZXQgKGl0ZXIpOworCisgICAgcmV0ID0gJmNwLT52YWx1ZTsKKyAgfSBlbHNlIHsKKyAgICByZXQgPSAmc2VsZi0+cHJpdi0+ZGVmYXVsdF92YWx1ZTsKKyAgfQorICByZXR1cm4gcmV0OworfQorCisjZGVmaW5lIERFRklORV9OT05FX0dFVF9GVU5DX0NPTVBBUkFCTEUodHlwZSkgXAorc3RhdGljIGlubGluZSBjb25zdCBHVmFsdWUgKiBcCitfaW50ZXJwb2xhdGVfbm9uZV9nZXRfIyN0eXBlIChHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSAqc2VsZiwgR1NlcXVlbmNlSXRlciAqaXRlcikgXAoreyBcCisgIGNvbnN0IEdWYWx1ZSAqcmV0OyBcCisgIFwKKyAgaWYgKGl0ZXIpIHsgXAorICAgIEdzdENvbnRyb2xQb2ludCAqY3AgPSBnX3NlcXVlbmNlX2dldCAoaXRlcik7IFwKKyAgICBnIyN0eXBlIHJldF92YWwgPSBnX3ZhbHVlX2dldF8jI3R5cGUgKCZjcC0+dmFsdWUpOyBcCisgICAgXAorICAgIGlmIChnX3ZhbHVlX2dldF8jI3R5cGUgKCZzZWxmLT5wcml2LT5taW5pbXVtX3ZhbHVlKSA+IHJldF92YWwpIFwKKyAgICAgIHJldCA9ICZzZWxmLT5wcml2LT5taW5pbXVtX3ZhbHVlOyBcCisgICAgZWxzZSBpZiAoZ192YWx1ZV9nZXRfIyN0eXBlICgmc2VsZi0+cHJpdi0+bWF4aW11bV92YWx1ZSkgPCByZXRfdmFsKSBcCisgICAgICByZXQgPSAmc2VsZi0+cHJpdi0+bWF4aW11bV92YWx1ZTsgXAorICAgIGVsc2UgXAorICAgICAgcmV0ID0gJmNwLT52YWx1ZTsgXAorICB9IGVsc2UgeyBcCisgICAgcmV0ID0gJnNlbGYtPnByaXYtPmRlZmF1bHRfdmFsdWU7IFwKKyAgfSBcCisgIHJldHVybiByZXQ7IFwKK30KKworI2RlZmluZSBERUZJTkVfTk9ORV9HRVQodHlwZSxjdHlwZSxnZXRfZnVuYykgXAorc3RhdGljIGdib29sZWFuIFwKK2ludGVycG9sYXRlX25vbmVfZ2V0XyMjdHlwZSAoR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UgKnNlbGYsIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdWYWx1ZSAqdmFsdWUpIFwKK3sgXAorICBjb25zdCBHVmFsdWUgKnJldDsgXAorICBHU2VxdWVuY2VJdGVyICppdGVyOyBcCisgIFwKKyAgZ19tdXRleF9sb2NrIChzZWxmLT5sb2NrKTsgXAorICBcCisgIGl0ZXIgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9maW5kX2NvbnRyb2xfcG9pbnRfaXRlciAoc2VsZiwgdGltZXN0YW1wKTsgXAorICByZXQgPSBnZXRfZnVuYyAoc2VsZiwgaXRlcik7IFwKKyAgZ192YWx1ZV9jb3B5IChyZXQsIHZhbHVlKTsgXAorICBnX211dGV4X3VubG9jayAoc2VsZi0+bG9jayk7IFwKKyAgcmV0dXJuIFRSVUU7IFwKK30gXAorXAorc3RhdGljIGdib29sZWFuIFwKK2ludGVycG9sYXRlX25vbmVfZ2V0XyMjdHlwZSMjX3ZhbHVlX2FycmF5IChHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSAqc2VsZiwgXAorICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdzdFZhbHVlQXJyYXkgKiB2YWx1ZV9hcnJheSkgXAoreyBcCisgIGdpbnQgaTsgXAorICBHc3RDbG9ja1RpbWUgdHMgPSB0aW1lc3RhbXA7IFwKKyAgR3N0Q2xvY2tUaW1lIG5leHRfdHMgPSAwOyBcCisgIGN0eXBlICp2YWx1ZXMgPSAoY3R5cGUgKikgdmFsdWVfYXJyYXktPnZhbHVlczsgXAorICBjb25zdCBHVmFsdWUgKnJldF92YWwgPSBOVUxMOyBcCisgIGN0eXBlIHJldCA9IDA7IFwKKyAgR1NlcXVlbmNlSXRlciAqaXRlcjEgPSBOVUxMLCAqaXRlcjIgPSBOVUxMOyBcCisgIFwKKyAgZ19tdXRleF9sb2NrIChzZWxmLT5sb2NrKTsgXAorICBmb3IoaSA9IDA7IGkgPCB2YWx1ZV9hcnJheS0+bmJzYW1wbGVzOyBpKyspIHsgXAorICAgIGlmICghcmV0X3ZhbCB8fCB0cyA+PSBuZXh0X3RzKSB7IFwKKyAgICAgIGl0ZXIxID0gZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfZmluZF9jb250cm9sX3BvaW50X2l0ZXIgKHNlbGYsIHRzKTsgXAorICAgICAgaWYgKCFpdGVyMSkgeyBcCisgICAgICAgIGlmIChHX0xJS0VMWSAoc2VsZi0+cHJpdi0+dmFsdWVzKSkgXAorCSAgaXRlcjIgPSBnX3NlcXVlbmNlX2dldF9iZWdpbl9pdGVyIChzZWxmLT5wcml2LT52YWx1ZXMpOyBcCisJZWxzZSBcCisJICBpdGVyMiA9IE5VTEw7IFwKKyAgICAgIH0gZWxzZSB7IFwKKyAgICAgICAgaXRlcjIgPSBnX3NlcXVlbmNlX2l0ZXJfbmV4dCAoaXRlcjEpOyBcCisgICAgICB9IFwKKyAgICAgIFwKKyAgICAgIGlmIChpdGVyMiAmJiAhZ19zZXF1ZW5jZV9pdGVyX2lzX2VuZCAoaXRlcjIpKSB7IFwKKyAgICAgICAgR3N0Q29udHJvbFBvaW50ICpjcDsgXAorICAgICAgICBcCisgICAgICAgIGNwID0gZ19zZXF1ZW5jZV9nZXQgKGl0ZXIyKTsgXAorICAgICAgICBuZXh0X3RzID0gY3AtPnRpbWVzdGFtcDsgXAorICAgICAgfSBlbHNlIHsgXAorICAgICAgICBuZXh0X3RzID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsgXAorICAgICAgfSBcCisgICAgICBcCisgICAgICByZXRfdmFsID0gZ2V0X2Z1bmMgKHNlbGYsIGl0ZXIxKTsgXAorICAgICAgcmV0ID0gZ192YWx1ZV9nZXRfIyN0eXBlIChyZXRfdmFsKTsgXAorICAgIH0gXAorICAgICp2YWx1ZXMgPSByZXQ7IFwKKyAgICB0cyArPSB2YWx1ZV9hcnJheS0+c2FtcGxlX2ludGVydmFsOyBcCisgICAgdmFsdWVzKys7IFwKKyAgfSBcCisgIGdfbXV0ZXhfdW5sb2NrIChzZWxmLT5sb2NrKTsgXAorICByZXR1cm4gVFJVRTsgXAorfQorCitERUZJTkVfTk9ORV9HRVRfRlVOQ19DT01QQVJBQkxFIChpbnQpOworREVGSU5FX05PTkVfR0VUIChpbnQsIGdpbnQsIF9pbnRlcnBvbGF0ZV9ub25lX2dldF9pbnQpOworREVGSU5FX05PTkVfR0VUX0ZVTkNfQ09NUEFSQUJMRSAodWludCk7CitERUZJTkVfTk9ORV9HRVQgKHVpbnQsIGd1aW50LCBfaW50ZXJwb2xhdGVfbm9uZV9nZXRfdWludCk7CitERUZJTkVfTk9ORV9HRVRfRlVOQ19DT01QQVJBQkxFIChsb25nKTsKK0RFRklORV9OT05FX0dFVCAobG9uZywgZ2xvbmcsIF9pbnRlcnBvbGF0ZV9ub25lX2dldF9sb25nKTsKK0RFRklORV9OT05FX0dFVF9GVU5DX0NPTVBBUkFCTEUgKHVsb25nKTsKK0RFRklORV9OT05FX0dFVCAodWxvbmcsIGd1bG9uZywgX2ludGVycG9sYXRlX25vbmVfZ2V0X3Vsb25nKTsKK0RFRklORV9OT05FX0dFVF9GVU5DX0NPTVBBUkFCTEUgKGludDY0KTsKK0RFRklORV9OT05FX0dFVCAoaW50NjQsIGdpbnQ2NCwgX2ludGVycG9sYXRlX25vbmVfZ2V0X2ludDY0KTsKK0RFRklORV9OT05FX0dFVF9GVU5DX0NPTVBBUkFCTEUgKHVpbnQ2NCk7CitERUZJTkVfTk9ORV9HRVQgKHVpbnQ2NCwgZ3VpbnQ2NCwgX2ludGVycG9sYXRlX25vbmVfZ2V0X3VpbnQ2NCk7CitERUZJTkVfTk9ORV9HRVRfRlVOQ19DT01QQVJBQkxFIChmbG9hdCk7CitERUZJTkVfTk9ORV9HRVQgKGZsb2F0LCBnZmxvYXQsIF9pbnRlcnBvbGF0ZV9ub25lX2dldF9mbG9hdCk7CitERUZJTkVfTk9ORV9HRVRfRlVOQ19DT01QQVJBQkxFIChkb3VibGUpOworREVGSU5FX05PTkVfR0VUIChkb3VibGUsIGdkb3VibGUsIF9pbnRlcnBvbGF0ZV9ub25lX2dldF9kb3VibGUpOworCitERUZJTkVfTk9ORV9HRVQgKGJvb2xlYW4sIGdib29sZWFuLCBfaW50ZXJwb2xhdGVfbm9uZV9nZXQpOworREVGSU5FX05PTkVfR0VUIChlbnVtLCBnaW50LCBfaW50ZXJwb2xhdGVfbm9uZV9nZXQpOworREVGSU5FX05PTkVfR0VUIChzdHJpbmcsIGNvbnN0IGdjaGFyICosIF9pbnRlcnBvbGF0ZV9ub25lX2dldCk7CisKK3N0YXRpYyBHc3RJbnRlcnBvbGF0ZU1ldGhvZCBpbnRlcnBvbGF0ZV9ub25lID0geworICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSBpbnRlcnBvbGF0ZV9ub25lX2dldF9pbnQsCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgaW50ZXJwb2xhdGVfbm9uZV9nZXRfaW50X3ZhbHVlX2FycmF5LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSBpbnRlcnBvbGF0ZV9ub25lX2dldF91aW50LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkpIGludGVycG9sYXRlX25vbmVfZ2V0X3VpbnRfdmFsdWVfYXJyYXksCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIGludGVycG9sYXRlX25vbmVfZ2V0X2xvbmcsCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgaW50ZXJwb2xhdGVfbm9uZV9nZXRfbG9uZ192YWx1ZV9hcnJheSwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgaW50ZXJwb2xhdGVfbm9uZV9nZXRfdWxvbmcsCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgaW50ZXJwb2xhdGVfbm9uZV9nZXRfdWxvbmdfdmFsdWVfYXJyYXksCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIGludGVycG9sYXRlX25vbmVfZ2V0X2ludDY0LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkpIGludGVycG9sYXRlX25vbmVfZ2V0X2ludDY0X3ZhbHVlX2FycmF5LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSBpbnRlcnBvbGF0ZV9ub25lX2dldF91aW50NjQsCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgaW50ZXJwb2xhdGVfbm9uZV9nZXRfdWludDY0X3ZhbHVlX2FycmF5LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSBpbnRlcnBvbGF0ZV9ub25lX2dldF9mbG9hdCwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSBpbnRlcnBvbGF0ZV9ub25lX2dldF9mbG9hdF92YWx1ZV9hcnJheSwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgaW50ZXJwb2xhdGVfbm9uZV9nZXRfZG91YmxlLAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkpIGludGVycG9sYXRlX25vbmVfZ2V0X2RvdWJsZV92YWx1ZV9hcnJheSwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgaW50ZXJwb2xhdGVfbm9uZV9nZXRfYm9vbGVhbiwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSBpbnRlcnBvbGF0ZV9ub25lX2dldF9ib29sZWFuX3ZhbHVlX2FycmF5LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSBpbnRlcnBvbGF0ZV9ub25lX2dldF9lbnVtLAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkpIGludGVycG9sYXRlX25vbmVfZ2V0X2VudW1fdmFsdWVfYXJyYXksCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIGludGVycG9sYXRlX25vbmVfZ2V0X3N0cmluZywKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSBpbnRlcnBvbGF0ZV9ub25lX2dldF9zdHJpbmdfdmFsdWVfYXJyYXkKK307CisKKy8qICByZXR1cm5zIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSwgZXhjZXB0IGZvciB0aW1lcyB3aXRoIHNwZWNpZmljIHZhbHVlcyAqLworLyogIG5lZWRlZCBmb3Igb25lLXNob3QgZXZlbnRzLCBzdWNoIGFzIG5vdGVzIGFuZCB0cmlnZ2VycyAqLworc3RhdGljIGlubGluZSBjb25zdCBHVmFsdWUgKgorX2ludGVycG9sYXRlX3RyaWdnZXJfZ2V0IChHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSAqIHNlbGYsCisgICAgR1NlcXVlbmNlSXRlciAqIGl0ZXIsIEdzdENsb2NrVGltZSB0aW1lc3RhbXApCit7CisgIEdzdENvbnRyb2xQb2ludCAqY3A7CisKKyAgLyogY2hlY2sgaWYgdGhlcmUgaXMgYSB2YWx1ZSBhdCB0aGUgcmVnaXN0ZXJlZCB0aW1lc3RhbXAgKi8KKyAgaWYgKGl0ZXIpIHsKKyAgICBjcCA9IGdfc2VxdWVuY2VfZ2V0IChpdGVyKTsKKyAgICBpZiAodGltZXN0YW1wID09IGNwLT50aW1lc3RhbXApIHsKKyAgICAgIHJldHVybiAmY3AtPnZhbHVlOworICAgIH0KKyAgfQorICBpZiAoc2VsZi0+cHJpdi0+bnZhbHVlcyA+IDApCisgICAgcmV0dXJuICZzZWxmLT5wcml2LT5kZWZhdWx0X3ZhbHVlOworICBlbHNlCisgICAgcmV0dXJuIE5VTEw7Cit9CisKKyNkZWZpbmUgREVGSU5FX1RSSUdHRVJfR0VUX0ZVTkNfQ09NUEFSQUJMRSh0eXBlKSBcCitzdGF0aWMgaW5saW5lIGNvbnN0IEdWYWx1ZSAqIFwKK19pbnRlcnBvbGF0ZV90cmlnZ2VyX2dldF8jI3R5cGUgKEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlICpzZWxmLCBHU2VxdWVuY2VJdGVyICppdGVyLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKSBcCit7IFwKKyAgR3N0Q29udHJvbFBvaW50ICpjcDsgXAorICBcCisgIC8qIGNoZWNrIGlmIHRoZXJlIGlzIGEgdmFsdWUgYXQgdGhlIHJlZ2lzdGVyZWQgdGltZXN0YW1wICovIFwKKyAgaWYgKGl0ZXIpIHsgXAorICAgIGNwID0gZ19zZXF1ZW5jZV9nZXQgKGl0ZXIpOyBcCisgICAgaWYgKHRpbWVzdGFtcCA9PSBjcC0+dGltZXN0YW1wKSB7IFwKKyAgICAgIGcjI3R5cGUgcmV0ID0gZ192YWx1ZV9nZXRfIyN0eXBlICgmY3AtPnZhbHVlKTsgXAorICAgICAgaWYgKGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPm1pbmltdW1fdmFsdWUpID4gcmV0KSBcCisgICAgICAgIHJldHVybiAmc2VsZi0+cHJpdi0+bWluaW11bV92YWx1ZTsgXAorICAgICAgZWxzZSBpZiAoZ192YWx1ZV9nZXRfIyN0eXBlICgmc2VsZi0+cHJpdi0+bWF4aW11bV92YWx1ZSkgPCByZXQpIFwKKyAgICAgICAgcmV0dXJuICZzZWxmLT5wcml2LT5tYXhpbXVtX3ZhbHVlOyBcCisgICAgICBlbHNlIFwKKyAgICAgICAgcmV0dXJuICZjcC0+dmFsdWU7IFwKKyAgICB9IFwKKyAgfSBcCisgIFwKKyAgaWYgKHNlbGYtPnByaXYtPm52YWx1ZXMgPiAwKSBcCisgICAgcmV0dXJuICZzZWxmLT5wcml2LT5kZWZhdWx0X3ZhbHVlOyBcCisgIGVsc2UgXAorICAgIHJldHVybiBOVUxMOyBcCit9CisKKyNkZWZpbmUgREVGSU5FX1RSSUdHRVJfR0VUKHR5cGUsIGN0eXBlLCBnZXRfZnVuYykgXAorc3RhdGljIGdib29sZWFuIFwKK2ludGVycG9sYXRlX3RyaWdnZXJfZ2V0XyMjdHlwZSAoR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UgKnNlbGYsIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdWYWx1ZSAqdmFsdWUpIFwKK3sgXAorICBjb25zdCBHVmFsdWUgKnJldDsgXAorICBHU2VxdWVuY2VJdGVyICppdGVyOyBcCisgIFwKKyAgZ19tdXRleF9sb2NrIChzZWxmLT5sb2NrKTsgXAorICBcCisgIGl0ZXIgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9maW5kX2NvbnRyb2xfcG9pbnRfaXRlciAoc2VsZiwgdGltZXN0YW1wKTsgXAorICByZXQgPSBnZXRfZnVuYyAoc2VsZiwgaXRlciwgdGltZXN0YW1wKTsgXAorICBpZiAoIXJldCkgeyBcCisgICAgZ19tdXRleF91bmxvY2sgKHNlbGYtPmxvY2spOyBcCisgICAgcmV0dXJuIEZBTFNFOyBcCisgIH0gXAorICBcCisgIGdfdmFsdWVfY29weSAocmV0LCB2YWx1ZSk7IFwKKyAgZ19tdXRleF91bmxvY2sgKHNlbGYtPmxvY2spOyBcCisgIHJldHVybiBUUlVFOyBcCit9IFwKK1wKK3N0YXRpYyBnYm9vbGVhbiBcCitpbnRlcnBvbGF0ZV90cmlnZ2VyX2dldF8jI3R5cGUjI192YWx1ZV9hcnJheSAoR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UgKnNlbGYsIFwKKyAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBHc3RWYWx1ZUFycmF5ICogdmFsdWVfYXJyYXkpIFwKK3sgXAorICBnaW50IGk7IFwKKyAgR3N0Q2xvY2tUaW1lIHRzID0gdGltZXN0YW1wOyBcCisgIEdzdENsb2NrVGltZSBuZXh0X3RzID0gMDsgXAorICBjdHlwZSAqdmFsdWVzID0gKGN0eXBlICopIHZhbHVlX2FycmF5LT52YWx1ZXM7IFwKKyAgY29uc3QgR1ZhbHVlICpyZXRfdmFsID0gTlVMTDsgXAorICBjdHlwZSByZXQgPSAwOyBcCisgIEdTZXF1ZW5jZUl0ZXIgKml0ZXIxID0gTlVMTCwgKml0ZXIyID0gTlVMTDsgXAorICBnYm9vbGVhbiB0cmlnZ2VyZWQgPSBGQUxTRTsgXAorICBcCisgIGdfbXV0ZXhfbG9jayAoc2VsZi0+bG9jayk7IFwKKyAgZm9yKGkgPSAwOyBpIDwgdmFsdWVfYXJyYXktPm5ic2FtcGxlczsgaSsrKSB7IFwKKyAgICBpZiAoIXJldF92YWwgfHwgdHMgPj0gbmV4dF90cykgeyBcCisgICAgICBpdGVyMSA9IGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2ZpbmRfY29udHJvbF9wb2ludF9pdGVyIChzZWxmLCB0cyk7IFwKKyAgICAgIGlmICghaXRlcjEpIHsgXAorICAgICAgICBpZiAoR19MSUtFTFkgKHNlbGYtPnByaXYtPnZhbHVlcykpIFwKKyAgICAgICAgICBpdGVyMiA9IGdfc2VxdWVuY2VfZ2V0X2JlZ2luX2l0ZXIgKHNlbGYtPnByaXYtPnZhbHVlcyk7IFwKKwllbHNlIFwKKwkgIGl0ZXIyID0gTlVMTDsgXAorICAgICAgfSBlbHNlIHsgXAorICAgICAgICBpdGVyMiA9IGdfc2VxdWVuY2VfaXRlcl9uZXh0IChpdGVyMSk7IFwKKyAgICAgIH0gXAorICAgICAgXAorICAgICAgaWYgKGl0ZXIyICYmICFnX3NlcXVlbmNlX2l0ZXJfaXNfZW5kIChpdGVyMikpIHsgXAorICAgICAgICBHc3RDb250cm9sUG9pbnQgKmNwOyBcCisgICAgICAgIFwKKyAgICAgICAgY3AgPSBnX3NlcXVlbmNlX2dldCAoaXRlcjIpOyBcCisgICAgICAgIG5leHRfdHMgPSBjcC0+dGltZXN0YW1wOyBcCisgICAgICB9IGVsc2UgeyBcCisgICAgICAgIG5leHRfdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOyBcCisgICAgICB9IFwKKyAgICAgIFwKKyAgICAgIHJldF92YWwgPSBnZXRfZnVuYyAoc2VsZiwgaXRlcjEsIHRzKTsgXAorICAgICAgaWYgKCFyZXRfdmFsKSB7IFwKKyAgICAgICAgZ19tdXRleF91bmxvY2sgKHNlbGYtPmxvY2spOyBcCisgICAgICAgIHJldHVybiBGQUxTRTsgXAorICAgICAgfSBcCisgICAgICByZXQgPSBnX3ZhbHVlX2dldF8jI3R5cGUgKHJldF92YWwpOyBcCisgICAgICB0cmlnZ2VyZWQgPSBUUlVFOyBcCisgICAgfSBlbHNlIGlmICh0cmlnZ2VyZWQpIHsgXAorICAgICAgcmV0X3ZhbCA9IGdldF9mdW5jIChzZWxmLCBpdGVyMSwgdHMpOyBcCisgICAgICBpZiAoIXJldF92YWwpIHsgXAorICAgICAgICBnX211dGV4X3VubG9jayAoc2VsZi0+bG9jayk7IFwKKyAgICAgICAgcmV0dXJuIEZBTFNFOyBcCisgICAgICB9IFwKKyAgICAgIHJldCA9IGdfdmFsdWVfZ2V0XyMjdHlwZSAocmV0X3ZhbCk7IFwKKyAgICAgIHRyaWdnZXJlZCA9IEZBTFNFOyBcCisgICAgfSBcCisgICAgKnZhbHVlcyA9IHJldDsgXAorICAgIHRzICs9IHZhbHVlX2FycmF5LT5zYW1wbGVfaW50ZXJ2YWw7IFwKKyAgICB2YWx1ZXMrKzsgXAorICB9IFwKKyAgZ19tdXRleF91bmxvY2sgKHNlbGYtPmxvY2spOyBcCisgIHJldHVybiBUUlVFOyBcCit9CisKK0RFRklORV9UUklHR0VSX0dFVF9GVU5DX0NPTVBBUkFCTEUgKGludCk7CitERUZJTkVfVFJJR0dFUl9HRVQgKGludCwgZ2ludCwgX2ludGVycG9sYXRlX3RyaWdnZXJfZ2V0X2ludCk7CitERUZJTkVfVFJJR0dFUl9HRVRfRlVOQ19DT01QQVJBQkxFICh1aW50KTsKK0RFRklORV9UUklHR0VSX0dFVCAodWludCwgZ3VpbnQsIF9pbnRlcnBvbGF0ZV90cmlnZ2VyX2dldF91aW50KTsKK0RFRklORV9UUklHR0VSX0dFVF9GVU5DX0NPTVBBUkFCTEUgKGxvbmcpOworREVGSU5FX1RSSUdHRVJfR0VUIChsb25nLCBnbG9uZywgX2ludGVycG9sYXRlX3RyaWdnZXJfZ2V0X2xvbmcpOworREVGSU5FX1RSSUdHRVJfR0VUX0ZVTkNfQ09NUEFSQUJMRSAodWxvbmcpOworREVGSU5FX1RSSUdHRVJfR0VUICh1bG9uZywgZ3Vsb25nLCBfaW50ZXJwb2xhdGVfdHJpZ2dlcl9nZXRfdWxvbmcpOworREVGSU5FX1RSSUdHRVJfR0VUX0ZVTkNfQ09NUEFSQUJMRSAoaW50NjQpOworREVGSU5FX1RSSUdHRVJfR0VUIChpbnQ2NCwgZ2ludDY0LCBfaW50ZXJwb2xhdGVfdHJpZ2dlcl9nZXRfaW50NjQpOworREVGSU5FX1RSSUdHRVJfR0VUX0ZVTkNfQ09NUEFSQUJMRSAodWludDY0KTsKK0RFRklORV9UUklHR0VSX0dFVCAodWludDY0LCBndWludDY0LCBfaW50ZXJwb2xhdGVfdHJpZ2dlcl9nZXRfdWludDY0KTsKK0RFRklORV9UUklHR0VSX0dFVF9GVU5DX0NPTVBBUkFCTEUgKGZsb2F0KTsKK0RFRklORV9UUklHR0VSX0dFVCAoZmxvYXQsIGdmbG9hdCwgX2ludGVycG9sYXRlX3RyaWdnZXJfZ2V0X2Zsb2F0KTsKK0RFRklORV9UUklHR0VSX0dFVF9GVU5DX0NPTVBBUkFCTEUgKGRvdWJsZSk7CitERUZJTkVfVFJJR0dFUl9HRVQgKGRvdWJsZSwgZ2RvdWJsZSwgX2ludGVycG9sYXRlX3RyaWdnZXJfZ2V0X2RvdWJsZSk7CisKK0RFRklORV9UUklHR0VSX0dFVCAoYm9vbGVhbiwgZ2Jvb2xlYW4sIF9pbnRlcnBvbGF0ZV90cmlnZ2VyX2dldCk7CitERUZJTkVfVFJJR0dFUl9HRVQgKGVudW0sIGdpbnQsIF9pbnRlcnBvbGF0ZV90cmlnZ2VyX2dldCk7CitERUZJTkVfVFJJR0dFUl9HRVQgKHN0cmluZywgY29uc3QgZ2NoYXIgKiwgX2ludGVycG9sYXRlX3RyaWdnZXJfZ2V0KTsKKworc3RhdGljIEdzdEludGVycG9sYXRlTWV0aG9kIGludGVycG9sYXRlX3RyaWdnZXIgPSB7CisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIGludGVycG9sYXRlX3RyaWdnZXJfZ2V0X2ludCwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSBpbnRlcnBvbGF0ZV90cmlnZ2VyX2dldF9pbnRfdmFsdWVfYXJyYXksCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIGludGVycG9sYXRlX3RyaWdnZXJfZ2V0X3VpbnQsCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgaW50ZXJwb2xhdGVfdHJpZ2dlcl9nZXRfdWludF92YWx1ZV9hcnJheSwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgaW50ZXJwb2xhdGVfdHJpZ2dlcl9nZXRfbG9uZywKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSBpbnRlcnBvbGF0ZV90cmlnZ2VyX2dldF9sb25nX3ZhbHVlX2FycmF5LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSBpbnRlcnBvbGF0ZV90cmlnZ2VyX2dldF91bG9uZywKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSBpbnRlcnBvbGF0ZV90cmlnZ2VyX2dldF91bG9uZ192YWx1ZV9hcnJheSwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgaW50ZXJwb2xhdGVfdHJpZ2dlcl9nZXRfaW50NjQsCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgaW50ZXJwb2xhdGVfdHJpZ2dlcl9nZXRfaW50NjRfdmFsdWVfYXJyYXksCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIGludGVycG9sYXRlX3RyaWdnZXJfZ2V0X3VpbnQ2NCwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSBpbnRlcnBvbGF0ZV90cmlnZ2VyX2dldF91aW50NjRfdmFsdWVfYXJyYXksCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIGludGVycG9sYXRlX3RyaWdnZXJfZ2V0X2Zsb2F0LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkpIGludGVycG9sYXRlX3RyaWdnZXJfZ2V0X2Zsb2F0X3ZhbHVlX2FycmF5LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSBpbnRlcnBvbGF0ZV90cmlnZ2VyX2dldF9kb3VibGUsCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgaW50ZXJwb2xhdGVfdHJpZ2dlcl9nZXRfZG91YmxlX3ZhbHVlX2FycmF5LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSBpbnRlcnBvbGF0ZV90cmlnZ2VyX2dldF9ib29sZWFuLAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkpIGludGVycG9sYXRlX3RyaWdnZXJfZ2V0X2Jvb2xlYW5fdmFsdWVfYXJyYXksCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIGludGVycG9sYXRlX3RyaWdnZXJfZ2V0X2VudW0sCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgaW50ZXJwb2xhdGVfdHJpZ2dlcl9nZXRfZW51bV92YWx1ZV9hcnJheSwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgaW50ZXJwb2xhdGVfdHJpZ2dlcl9nZXRfc3RyaW5nLAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkpIGludGVycG9sYXRlX3RyaWdnZXJfZ2V0X3N0cmluZ192YWx1ZV9hcnJheQorfTsKKworLyogIGxpbmVhciBpbnRlcnBvbGF0aW9uICovCisvKiAgc21vb3RoZXMgaW5iZXR3ZWVuIHZhbHVlcyAqLworI2RlZmluZSBERUZJTkVfTElORUFSX0dFVCh2dHlwZSwgcm91bmQsIGNvbnZlcnQpIFwKK3N0YXRpYyBpbmxpbmUgdm9pZCBcCitfaW50ZXJwb2xhdGVfbGluZWFyX2ludGVybmFsXyMjdnR5cGUgKEdzdENsb2NrVGltZSB0aW1lc3RhbXAxLCBnIyN2dHlwZSB2YWx1ZTEsIEdzdENsb2NrVGltZSB0aW1lc3RhbXAyLCBnIyN2dHlwZSB2YWx1ZTIsIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIGcjI3Z0eXBlIG1pbiwgZyMjdnR5cGUgbWF4LCBnIyN2dHlwZSAqcmV0KSBcCit7IFwKKyAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lc3RhbXAyKSkgeyBcCisgICAgZ2RvdWJsZSBzbG9wZTsgXAorICAgIFwKKyAgICBzbG9wZSA9ICgoZ2RvdWJsZSkgY29udmVydCAodmFsdWUyKSAtIChnZG91YmxlKSBjb252ZXJ0ICh2YWx1ZTEpKSAvIGdzdF9ndWludDY0X3RvX2dkb3VibGUgKHRpbWVzdGFtcDIgLSB0aW1lc3RhbXAxKTsgXAorICAgIFwKKyAgICBpZiAocm91bmQpIFwKKyAgICAgICpyZXQgPSAoZyMjdnR5cGUpIChjb252ZXJ0ICh2YWx1ZTEpICsgZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSAodGltZXN0YW1wIC0gdGltZXN0YW1wMSkgKiBzbG9wZSArIDAuNSk7IFwKKyAgICBlbHNlIFwKKyAgICAgICpyZXQgPSAoZyMjdnR5cGUpIChjb252ZXJ0ICh2YWx1ZTEpICsgZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSAodGltZXN0YW1wIC0gdGltZXN0YW1wMSkgKiBzbG9wZSk7IFwKKyAgfSBlbHNlIHsgXAorICAgICpyZXQgPSB2YWx1ZTE7IFwKKyAgfSBcCisgICpyZXQgPSBDTEFNUCAoKnJldCwgbWluLCBtYXgpOyBcCit9IFwKK1wKK3N0YXRpYyBnYm9vbGVhbiBcCitpbnRlcnBvbGF0ZV9saW5lYXJfZ2V0XyMjdnR5cGUgKEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlICpzZWxmLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBHVmFsdWUgKnZhbHVlKSBcCit7IFwKKyAgZyMjdnR5cGUgcmV0LCBtaW4sIG1heDsgXAorICBHU2VxdWVuY2VJdGVyICppdGVyOyBcCisgIEdzdENvbnRyb2xQb2ludCAqY3AxLCAqY3AyID0gTlVMTCwgY3AgPSB7MCwgfTsgXAorICBcCisgIGdfbXV0ZXhfbG9jayAoc2VsZi0+bG9jayk7IFwKKyAgXAorICBtaW4gPSBnX3ZhbHVlX2dldF8jI3Z0eXBlICgmc2VsZi0+cHJpdi0+bWluaW11bV92YWx1ZSk7IFwKKyAgbWF4ID0gZ192YWx1ZV9nZXRfIyN2dHlwZSAoJnNlbGYtPnByaXYtPm1heGltdW1fdmFsdWUpOyBcCisgIFwKKyAgaXRlciA9IGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2ZpbmRfY29udHJvbF9wb2ludF9pdGVyIChzZWxmLCB0aW1lc3RhbXApOyBcCisgIGlmIChpdGVyKSB7IFwKKyAgICBjcDEgPSBnX3NlcXVlbmNlX2dldCAoaXRlcik7IFwKKyAgICBpdGVyID0gZ19zZXF1ZW5jZV9pdGVyX25leHQgKGl0ZXIpOyBcCisgIH0gZWxzZSB7IFwKKyAgICBjcC50aW1lc3RhbXAgPSBHX0dVSU5UNjRfQ09OU1RBTlQoMCk7IFwKKyAgICBnX3ZhbHVlX2luaXQgKCZjcC52YWx1ZSwgc2VsZi0+cHJpdi0+dHlwZSk7IFwKKyAgICBnX3ZhbHVlX2NvcHkgKCZzZWxmLT5wcml2LT5kZWZhdWx0X3ZhbHVlLCAmY3AudmFsdWUpOyBcCisgICAgY3AxID0gJmNwOyBcCisgICAgaWYgKEdfTElLRUxZIChzZWxmLT5wcml2LT52YWx1ZXMpKSBcCisgICAgICBpdGVyID0gZ19zZXF1ZW5jZV9nZXRfYmVnaW5faXRlciAoc2VsZi0+cHJpdi0+dmFsdWVzKTsgXAorICB9IFwKKyAgaWYgKGl0ZXIgJiYgIWdfc2VxdWVuY2VfaXRlcl9pc19lbmQgKGl0ZXIpKSBcCisgICAgY3AyID0gZ19zZXF1ZW5jZV9nZXQgKGl0ZXIpOyBcCisgIFwKKyAgX2ludGVycG9sYXRlX2xpbmVhcl9pbnRlcm5hbF8jI3Z0eXBlIChjcDEtPnRpbWVzdGFtcCwgZ192YWx1ZV9nZXRfIyN2dHlwZSAoJmNwMS0+dmFsdWUpLCAoY3AyID8gY3AyLT50aW1lc3RhbXAgOiBHU1RfQ0xPQ0tfVElNRV9OT05FKSwgKGNwMiA/IGdfdmFsdWVfZ2V0XyMjdnR5cGUgKCZjcDItPnZhbHVlKSA6IDApLCB0aW1lc3RhbXAsIG1pbiwgbWF4LCAmcmV0KTsgXAorICBnX3ZhbHVlX3NldF8jI3Z0eXBlICh2YWx1ZSwgcmV0KTsgXAorICBnX211dGV4X3VubG9jayAoc2VsZi0+bG9jayk7IFwKKyAgaWYgKGNwMSA9PSAmY3ApIFwKKyAgICBnX3ZhbHVlX3Vuc2V0ICgmY3AudmFsdWUpOyBcCisgIHJldHVybiBUUlVFOyBcCit9IFwKK1wKK3N0YXRpYyBnYm9vbGVhbiBcCitpbnRlcnBvbGF0ZV9saW5lYXJfZ2V0XyMjdnR5cGUjI192YWx1ZV9hcnJheSAoR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UgKnNlbGYsIFwKKyAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBHc3RWYWx1ZUFycmF5ICogdmFsdWVfYXJyYXkpIFwKK3sgXAorICBnaW50IGk7IFwKKyAgR3N0Q2xvY2tUaW1lIHRzID0gdGltZXN0YW1wOyBcCisgIEdzdENsb2NrVGltZSBuZXh0X3RzID0gMDsgXAorICBnIyN2dHlwZSAqdmFsdWVzID0gKGcjI3Z0eXBlICopIHZhbHVlX2FycmF5LT52YWx1ZXM7IFwKKyAgR1NlcXVlbmNlSXRlciAqaXRlcjEsICppdGVyMiA9IE5VTEw7IFwKKyAgR3N0Q29udHJvbFBvaW50ICpjcDEgPSBOVUxMLCAqY3AyID0gTlVMTCwgY3AgPSB7MCwgfTsgXAorICBnIyN2dHlwZSB2YWwxID0gMCwgdmFsMiA9IDAsIG1pbiwgbWF4OyBcCisgIFwKKyAgZ19tdXRleF9sb2NrIChzZWxmLT5sb2NrKTsgXAorICBcCisgIGNwLnRpbWVzdGFtcCA9IEdfR1VJTlQ2NF9DT05TVEFOVCgwKTsgXAorICBnX3ZhbHVlX2luaXQgKCZjcC52YWx1ZSwgc2VsZi0+cHJpdi0+dHlwZSk7IFwKKyAgZ192YWx1ZV9jb3B5ICgmc2VsZi0+cHJpdi0+ZGVmYXVsdF92YWx1ZSwgJmNwLnZhbHVlKTsgXAorICBcCisgIG1pbiA9IGdfdmFsdWVfZ2V0XyMjdnR5cGUgKCZzZWxmLT5wcml2LT5taW5pbXVtX3ZhbHVlKTsgXAorICBtYXggPSBnX3ZhbHVlX2dldF8jI3Z0eXBlICgmc2VsZi0+cHJpdi0+bWF4aW11bV92YWx1ZSk7IFwKKyAgXAorICBmb3IoaSA9IDA7IGkgPCB2YWx1ZV9hcnJheS0+bmJzYW1wbGVzOyBpKyspIHsgXAorICAgIGlmICh0aW1lc3RhbXAgPj0gbmV4dF90cykgeyBcCisgICAgICBpdGVyMSA9IGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2ZpbmRfY29udHJvbF9wb2ludF9pdGVyIChzZWxmLCB0cyk7IFwKKyAgICAgIGlmICghaXRlcjEpIHsgXAorICAgICAgICBjcDEgPSAmY3A7IFwKKwlpZiAoR19MSUtFTFkgKHNlbGYtPnByaXYtPnZhbHVlcykpIFwKKwkgIGl0ZXIyID0gZ19zZXF1ZW5jZV9nZXRfYmVnaW5faXRlciAoc2VsZi0+cHJpdi0+dmFsdWVzKTsgXAorCWVsc2UgXAorCSAgaXRlcjIgPSBOVUxMOyBcCisgICAgICB9IGVsc2UgeyBcCisgICAgICAgIGNwMSA9IGdfc2VxdWVuY2VfZ2V0IChpdGVyMSk7IFwKKyAgICAgICAgaXRlcjIgPSBnX3NlcXVlbmNlX2l0ZXJfbmV4dCAoaXRlcjEpOyBcCisgICAgICB9IFwKKyAgICAgIFwKKyAgICAgIGlmIChpdGVyMiAmJiAhZ19zZXF1ZW5jZV9pdGVyX2lzX2VuZCAoaXRlcjIpKSB7IFwKKyAgICAgICAgY3AyID0gZ19zZXF1ZW5jZV9nZXQgKGl0ZXIyKTsgXAorICAgICAgICBuZXh0X3RzID0gY3AyLT50aW1lc3RhbXA7IFwKKyAgICAgIH0gZWxzZSB7IFwKKyAgICAgICAgbmV4dF90cyA9IEdTVF9DTE9DS19USU1FX05PTkU7IFwKKyAgICAgIH0gXAorICAgICAgdmFsMSA9IGdfdmFsdWVfZ2V0XyMjdnR5cGUgKCZjcDEtPnZhbHVlKTsgXAorICAgICAgaWYgKGNwMikgXAorICAgICAgICB2YWwyID0gZ192YWx1ZV9nZXRfIyN2dHlwZSAoJmNwMi0+dmFsdWUpOyBcCisgICAgfSBcCisgICAgX2ludGVycG9sYXRlX2xpbmVhcl9pbnRlcm5hbF8jI3Z0eXBlIChjcDEtPnRpbWVzdGFtcCwgdmFsMSwgKGNwMiA/IGNwMi0+dGltZXN0YW1wIDogR1NUX0NMT0NLX1RJTUVfTk9ORSksIChjcDIgPyB2YWwyIDogMCksIHRzLCBtaW4sIG1heCwgdmFsdWVzKTsgXAorICAgIHRzICs9IHZhbHVlX2FycmF5LT5zYW1wbGVfaW50ZXJ2YWw7IFwKKyAgICB2YWx1ZXMrKzsgXAorICB9IFwKKyAgZ19tdXRleF91bmxvY2sgKHNlbGYtPmxvY2spOyBcCisgIGdfdmFsdWVfdW5zZXQgKCZjcC52YWx1ZSk7IFwKKyAgcmV0dXJuIFRSVUU7IFwKK30KKworREVGSU5FX0xJTkVBUl9HRVQgKGludCwgVFJVRSwgRU1QVFkpOworREVGSU5FX0xJTkVBUl9HRVQgKHVpbnQsIFRSVUUsIEVNUFRZKTsKK0RFRklORV9MSU5FQVJfR0VUIChsb25nLCBUUlVFLCBFTVBUWSk7CitERUZJTkVfTElORUFSX0dFVCAodWxvbmcsIFRSVUUsIEVNUFRZKTsKK0RFRklORV9MSU5FQVJfR0VUIChpbnQ2NCwgVFJVRSwgRU1QVFkpOworREVGSU5FX0xJTkVBUl9HRVQgKHVpbnQ2NCwgVFJVRSwgZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSk7CitERUZJTkVfTElORUFSX0dFVCAoZmxvYXQsIEZBTFNFLCBFTVBUWSk7CitERUZJTkVfTElORUFSX0dFVCAoZG91YmxlLCBGQUxTRSwgRU1QVFkpOworCitzdGF0aWMgR3N0SW50ZXJwb2xhdGVNZXRob2QgaW50ZXJwb2xhdGVfbGluZWFyID0geworICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSBpbnRlcnBvbGF0ZV9saW5lYXJfZ2V0X2ludCwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSBpbnRlcnBvbGF0ZV9saW5lYXJfZ2V0X2ludF92YWx1ZV9hcnJheSwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgaW50ZXJwb2xhdGVfbGluZWFyX2dldF91aW50LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkpIGludGVycG9sYXRlX2xpbmVhcl9nZXRfdWludF92YWx1ZV9hcnJheSwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgaW50ZXJwb2xhdGVfbGluZWFyX2dldF9sb25nLAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkpIGludGVycG9sYXRlX2xpbmVhcl9nZXRfbG9uZ192YWx1ZV9hcnJheSwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgaW50ZXJwb2xhdGVfbGluZWFyX2dldF91bG9uZywKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSBpbnRlcnBvbGF0ZV9saW5lYXJfZ2V0X3Vsb25nX3ZhbHVlX2FycmF5LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSBpbnRlcnBvbGF0ZV9saW5lYXJfZ2V0X2ludDY0LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkpIGludGVycG9sYXRlX2xpbmVhcl9nZXRfaW50NjRfdmFsdWVfYXJyYXksCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIGludGVycG9sYXRlX2xpbmVhcl9nZXRfdWludDY0LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkpIGludGVycG9sYXRlX2xpbmVhcl9nZXRfdWludDY0X3ZhbHVlX2FycmF5LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSBpbnRlcnBvbGF0ZV9saW5lYXJfZ2V0X2Zsb2F0LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkpIGludGVycG9sYXRlX2xpbmVhcl9nZXRfZmxvYXRfdmFsdWVfYXJyYXksCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIGludGVycG9sYXRlX2xpbmVhcl9nZXRfZG91YmxlLAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkpIGludGVycG9sYXRlX2xpbmVhcl9nZXRfZG91YmxlX3ZhbHVlX2FycmF5LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSBOVUxMLAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkpIE5VTEwsCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIE5VTEwsCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgTlVMTCwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgTlVMTCwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSBOVUxMCit9OworCisvKiAgc3F1YXJlIGludGVycG9sYXRpb24gKi8KKworLyogIGN1YmljIGludGVycG9sYXRpb24gKi8KKworLyogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgaW1wbGVtZW50IGEgbmF0dXJhbCBjdWJpYyBzcGxpbmUgaW50ZXJwb2xhdG9yLgorICogRm9yIGRldGFpbHMgbG9vayBhdCBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NwbGluZV9pbnRlcnBvbGF0aW9uCisgKgorICogSW5zdGVhZCBvZiB1c2luZyBhIHJlYWwgbWF0cml4IHdpdGggbl4yIGVsZW1lbnRzIGZvciB0aGUgbGluZWFyIHN5c3RlbQorICogb2YgZXF1YXRpb25zIHdlIHVzZSB0aHJlZSBhcnJheXMgbywgcCwgcSB0byBob2xkIHRoZSB0cmlkaWFnb25hbCBtYXRyaXgKKyAqIGFzIGZvbGxvd2luZyB0byBzYXZlIG1lbW9yeToKKyAqCisgKiBwWzBdIHFbMF0gICAgMCAgICAwICAgIDAKKyAqIG9bMV0gcFsxXSBxWzFdICAgIDAgICAgMAorICogICAgMCBvWzJdIHBbMl0gcVsyXSAgICAuCisgKiAgICAuICAgIC4gICAgLiAgICAuICAgIC4KKyAqLworCisjZGVmaW5lIERFRklORV9DVUJJQ19HRVQodnR5cGUscm91bmQsIGNvbnZlcnQpIFwKK3N0YXRpYyB2b2lkIFwKK19pbnRlcnBvbGF0ZV9jdWJpY191cGRhdGVfY2FjaGVfIyN2dHlwZSAoR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UgKnNlbGYpIFwKK3sgXAorICBnaW50IGksIG4gPSBzZWxmLT5wcml2LT5udmFsdWVzOyBcCisgIGdkb3VibGUgKm8gPSBnX25ldzAgKGdkb3VibGUsIG4pOyBcCisgIGdkb3VibGUgKnAgPSBnX25ldzAgKGdkb3VibGUsIG4pOyBcCisgIGdkb3VibGUgKnEgPSBnX25ldzAgKGdkb3VibGUsIG4pOyBcCisgIFwKKyAgZ2RvdWJsZSAqaCA9IGdfbmV3MCAoZ2RvdWJsZSwgbik7IFwKKyAgZ2RvdWJsZSAqYiA9IGdfbmV3MCAoZ2RvdWJsZSwgbik7IFwKKyAgZ2RvdWJsZSAqeiA9IGdfbmV3MCAoZ2RvdWJsZSwgbik7IFwKKyAgXAorICBHU2VxdWVuY2VJdGVyICppdGVyOyBcCisgIEdzdENvbnRyb2xQb2ludCAqY3A7IFwKKyAgR3N0Q2xvY2tUaW1lIHgsIHhfbmV4dDsgXAorICBnIyN2dHlwZSB5X3ByZXYsIHksIHlfbmV4dDsgXAorICBcCisgIC8qIEZpbGwgbGluZWFyIHN5c3RlbSBvZiBlcXVhdGlvbnMgKi8gXAorICBpdGVyID0gZ19zZXF1ZW5jZV9nZXRfYmVnaW5faXRlciAoc2VsZi0+cHJpdi0+dmFsdWVzKTsgXAorICBjcCA9IGdfc2VxdWVuY2VfZ2V0IChpdGVyKTsgXAorICB4ID0gY3AtPnRpbWVzdGFtcDsgXAorICB5ID0gZ192YWx1ZV9nZXRfIyN2dHlwZSAoJmNwLT52YWx1ZSk7IFwKKyAgXAorICBwWzBdID0gMS4wOyBcCisgIFwKKyAgaXRlciA9IGdfc2VxdWVuY2VfaXRlcl9uZXh0IChpdGVyKTsgXAorICBjcCA9IGdfc2VxdWVuY2VfZ2V0IChpdGVyKTsgXAorICB4X25leHQgPSBjcC0+dGltZXN0YW1wOyBcCisgIHlfbmV4dCA9IGdfdmFsdWVfZ2V0XyMjdnR5cGUgKCZjcC0+dmFsdWUpOyBcCisgIGhbMF0gPSBnc3RfZ3VpbnQ2NF90b19nZG91YmxlICh4X25leHQgLSB4KTsgXAorICBcCisgIGZvciAoaSA9IDE7IGkgPCBuLTE7IGkrKykgeyBcCisgICAgLyogU2h1ZmZsZSB4IGFuZCB5IHZhbHVlcyAqLyBcCisgICAgeV9wcmV2ID0geTsgXAorICAgIHggPSB4X25leHQ7IFwKKyAgICB5ID0geV9uZXh0OyBcCisgICAgaXRlciA9IGdfc2VxdWVuY2VfaXRlcl9uZXh0IChpdGVyKTsgXAorICAgIGNwID0gZ19zZXF1ZW5jZV9nZXQgKGl0ZXIpOyBcCisgICAgeF9uZXh0ID0gY3AtPnRpbWVzdGFtcDsgXAorICAgIHlfbmV4dCA9IGdfdmFsdWVfZ2V0XyMjdnR5cGUgKCZjcC0+dmFsdWUpOyBcCisgICAgXAorICAgIGhbaV0gPSBnc3RfZ3VpbnQ2NF90b19nZG91YmxlICh4X25leHQgLSB4KTsgXAorICAgIG9baV0gPSBoW2ktMV07IFwKKyAgICBwW2ldID0gMi4wICogKGhbaS0xXSArIGhbaV0pOyBcCisgICAgcVtpXSA9IGhbaV07IFwKKyAgICBiW2ldID0gY29udmVydCAoeV9uZXh0IC0geSkgLyBoW2ldIC0gY29udmVydCAoeSAtIHlfcHJldikgLyBoW2ktMV07IFwKKyAgfSBcCisgIHBbbi0xXSA9IDEuMDsgXAorICBcCisgIC8qIFVzZSBHYXVzcyBlbGltaW5hdGlvbiB0byBzZXQgZXZlcnl0aGluZyBiZWxvdyB0aGUgXAorICAgKiBkaWFnb25hbCB0byB6ZXJvICovIFwKKyAgZm9yIChpID0gMTsgaSA8IG4tMTsgaSsrKSB7IFwKKyAgICBnZG91YmxlIGEgPSBvW2ldIC8gcFtpLTFdOyBcCisgICAgcFtpXSAtPSBhICogcVtpLTFdOyBcCisgICAgYltpXSAtPSBhICogYltpLTFdOyBcCisgIH0gXAorICBcCisgIC8qIFNvbHZlIGV2ZXJ5dGhpbmcgZWxzZSBmcm9tIGJvdHRvbSB0byB0b3AgKi8gXAorICBmb3IgKGkgPSBuLTI7IGkgPiAwOyBpLS0pIFwKKyAgICB6W2ldID0gKGJbaV0gLSBxW2ldICogeltpKzFdKSAvIHBbaV07IFwKKyAgXAorICAvKiBTYXZlIGNhY2hlIG5leHQgaW4gdGhlIEdzdENvbnRyb2xQb2ludCAqLyBcCisgIFwKKyAgaXRlciA9IGdfc2VxdWVuY2VfZ2V0X2JlZ2luX2l0ZXIgKHNlbGYtPnByaXYtPnZhbHVlcyk7IFwKKyAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeyBcCisgICAgY3AgPSBnX3NlcXVlbmNlX2dldCAoaXRlcik7IFwKKyAgICBjcC0+Y2FjaGUuY3ViaWMuaCA9IGhbaV07IFwKKyAgICBjcC0+Y2FjaGUuY3ViaWMueiA9IHpbaV07IFwKKyAgICBpdGVyID0gZ19zZXF1ZW5jZV9pdGVyX25leHQgKGl0ZXIpOyBcCisgIH0gXAorICBcCisgIC8qIEZyZWUgb3VyIHRlbXBvcmFyeSBhcnJheXMgKi8gXAorICBnX2ZyZWUgKG8pOyBcCisgIGdfZnJlZSAocCk7IFwKKyAgZ19mcmVlIChxKTsgXAorICBnX2ZyZWUgKGgpOyBcCisgIGdfZnJlZSAoYik7IFwKKyAgZ19mcmVlICh6KTsgXAorfSBcCitcCitzdGF0aWMgaW5saW5lIHZvaWQgXAorX2ludGVycG9sYXRlX2N1YmljX2dldF8jI3Z0eXBlIChHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSAqc2VsZiwgR3N0Q29udHJvbFBvaW50ICpjcDEsIGcjI3Z0eXBlIHZhbHVlMSwgR3N0Q29udHJvbFBvaW50ICpjcDIsIGcjI3Z0eXBlIHZhbHVlMiwgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgZyMjdnR5cGUgbWluLCBnIyN2dHlwZSBtYXgsIGcjI3Z0eXBlICpyZXQpIFwKK3sgXAorICBpZiAoIXNlbGYtPnByaXYtPnZhbGlkX2NhY2hlKSB7IFwKKyAgICBfaW50ZXJwb2xhdGVfY3ViaWNfdXBkYXRlX2NhY2hlXyMjdnR5cGUgKHNlbGYpOyBcCisgICAgc2VsZi0+cHJpdi0+dmFsaWRfY2FjaGUgPSBUUlVFOyBcCisgIH0gXAorICBcCisgIGlmIChjcDIpIHsgXAorICAgIGdkb3VibGUgZGlmZjEsIGRpZmYyOyBcCisgICAgZ2RvdWJsZSBvdXQ7IFwKKyAgICBcCisgICAgZGlmZjEgPSBnc3RfZ3VpbnQ2NF90b19nZG91YmxlICh0aW1lc3RhbXAgLSBjcDEtPnRpbWVzdGFtcCk7IFwKKyAgICBkaWZmMiA9IGdzdF9ndWludDY0X3RvX2dkb3VibGUgKGNwMi0+dGltZXN0YW1wIC0gdGltZXN0YW1wKTsgXAorICAgIFwKKyAgICBvdXQgPSAoY3AyLT5jYWNoZS5jdWJpYy56ICogZGlmZjEgKiBkaWZmMSAqIGRpZmYxICsgY3AxLT5jYWNoZS5jdWJpYy56ICogZGlmZjIgKiBkaWZmMiAqIGRpZmYyKSAvIGNwMS0+Y2FjaGUuY3ViaWMuaDsgXAorICAgIG91dCArPSAoY29udmVydCAodmFsdWUyKSAvIGNwMS0+Y2FjaGUuY3ViaWMuaCAtIGNwMS0+Y2FjaGUuY3ViaWMuaCAqIGNwMi0+Y2FjaGUuY3ViaWMueikgKiBkaWZmMTsgXAorICAgIG91dCArPSAoY29udmVydCAodmFsdWUxKSAvIGNwMS0+Y2FjaGUuY3ViaWMuaCAtIGNwMS0+Y2FjaGUuY3ViaWMuaCAqIGNwMS0+Y2FjaGUuY3ViaWMueikgKiBkaWZmMjsgXAorICAgIFwKKyAgICBpZiAocm91bmQpIFwKKyAgICAgICpyZXQgPSAoZyMjdnR5cGUpIChvdXQgKyAwLjUpOyBcCisgICAgZWxzZSBcCisgICAgICAqcmV0ID0gKGcjI3Z0eXBlKSBvdXQ7IFwKKyAgfSBcCisgIGVsc2UgeyBcCisgICAgKnJldCA9IHZhbHVlMTsgXAorICB9IFwKKyAgKnJldCA9IENMQU1QICgqcmV0LCBtaW4sIG1heCk7IFwKK30gXAorXAorc3RhdGljIGdib29sZWFuIFwKK2ludGVycG9sYXRlX2N1YmljX2dldF8jI3Z0eXBlIChHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSAqc2VsZiwgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgR1ZhbHVlICp2YWx1ZSkgXAoreyBcCisgIGcjI3Z0eXBlIHJldCwgbWluLCBtYXg7IFwKKyAgR1NlcXVlbmNlSXRlciAqaXRlcjsgXAorICBHc3RDb250cm9sUG9pbnQgKmNwMSwgKmNwMiA9IE5VTEwsIGNwID0gezAsIH07IFwKKyAgXAorICBpZiAoc2VsZi0+cHJpdi0+bnZhbHVlcyA8PSAyKSBcCisgICAgcmV0dXJuIGludGVycG9sYXRlX2xpbmVhcl9nZXRfIyN2dHlwZSAoc2VsZiwgdGltZXN0YW1wLCB2YWx1ZSk7IFwKKyAgXAorICBnX211dGV4X2xvY2sgKHNlbGYtPmxvY2spOyBcCisgIFwKKyAgbWluID0gZ192YWx1ZV9nZXRfIyN2dHlwZSAoJnNlbGYtPnByaXYtPm1pbmltdW1fdmFsdWUpOyBcCisgIG1heCA9IGdfdmFsdWVfZ2V0XyMjdnR5cGUgKCZzZWxmLT5wcml2LT5tYXhpbXVtX3ZhbHVlKTsgXAorICBcCisgIGl0ZXIgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9maW5kX2NvbnRyb2xfcG9pbnRfaXRlciAoc2VsZiwgdGltZXN0YW1wKTsgXAorICBpZiAoaXRlcikgeyBcCisgICAgY3AxID0gZ19zZXF1ZW5jZV9nZXQgKGl0ZXIpOyBcCisgICAgaXRlciA9IGdfc2VxdWVuY2VfaXRlcl9uZXh0IChpdGVyKTsgXAorICB9IGVsc2UgeyBcCisgICAgY3AudGltZXN0YW1wID0gR19HVUlOVDY0X0NPTlNUQU5UKDApOyBcCisgICAgZ192YWx1ZV9pbml0ICgmY3AudmFsdWUsIHNlbGYtPnByaXYtPnR5cGUpOyBcCisgICAgZ192YWx1ZV9jb3B5ICgmc2VsZi0+cHJpdi0+ZGVmYXVsdF92YWx1ZSwgJmNwLnZhbHVlKTsgXAorICAgIGNwMSA9ICZjcDsgXAorICAgIGlmIChHX0xJS0VMWSAoc2VsZi0+cHJpdi0+dmFsdWVzKSkgXAorICAgICAgaXRlciA9IGdfc2VxdWVuY2VfZ2V0X2JlZ2luX2l0ZXIgKHNlbGYtPnByaXYtPnZhbHVlcyk7IFwKKyAgfSBcCisgIGlmIChpdGVyICYmICFnX3NlcXVlbmNlX2l0ZXJfaXNfZW5kIChpdGVyKSkgXAorICAgIGNwMiA9IGdfc2VxdWVuY2VfZ2V0IChpdGVyKTsgXAorICBcCisgIF9pbnRlcnBvbGF0ZV9jdWJpY19nZXRfIyN2dHlwZSAoc2VsZiwgY3AxLCBnX3ZhbHVlX2dldF8jI3Z0eXBlICgmY3AxLT52YWx1ZSksIGNwMiwgKGNwMiA/IGdfdmFsdWVfZ2V0XyMjdnR5cGUgKCZjcDItPnZhbHVlKSA6IDApLCB0aW1lc3RhbXAsIG1pbiwgbWF4LCAmcmV0KTsgXAorICBnX3ZhbHVlX3NldF8jI3Z0eXBlICh2YWx1ZSwgcmV0KTsgXAorICBnX211dGV4X3VubG9jayAoc2VsZi0+bG9jayk7IFwKKyAgaWYgKGNwMSA9PSAmY3ApIFwKKyAgICBnX3ZhbHVlX3Vuc2V0ICgmY3AudmFsdWUpOyBcCisgIHJldHVybiBUUlVFOyBcCit9IFwKK1wKK3N0YXRpYyBnYm9vbGVhbiBcCitpbnRlcnBvbGF0ZV9jdWJpY19nZXRfIyN2dHlwZSMjX3ZhbHVlX2FycmF5IChHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSAqc2VsZiwgXAorICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdzdFZhbHVlQXJyYXkgKiB2YWx1ZV9hcnJheSkgXAoreyBcCisgIGdpbnQgaTsgXAorICBHc3RDbG9ja1RpbWUgdHMgPSB0aW1lc3RhbXA7IFwKKyAgR3N0Q2xvY2tUaW1lIG5leHRfdHMgPSAwOyBcCisgIGcjI3Z0eXBlICp2YWx1ZXMgPSAoZyMjdnR5cGUgKikgdmFsdWVfYXJyYXktPnZhbHVlczsgXAorICBHU2VxdWVuY2VJdGVyICppdGVyMSwgKml0ZXIyID0gTlVMTDsgXAorICBHc3RDb250cm9sUG9pbnQgKmNwMSA9IE5VTEwsICpjcDIgPSBOVUxMLCBjcCA9IHswLCB9OyBcCisgIGcjI3Z0eXBlIHZhbDEgPSAwLCB2YWwyID0gMCwgbWluLCBtYXg7IFwKKyAgXAorICBpZiAoc2VsZi0+cHJpdi0+bnZhbHVlcyA8PSAyKSBcCisgICAgcmV0dXJuIGludGVycG9sYXRlX2xpbmVhcl9nZXRfIyN2dHlwZSMjX3ZhbHVlX2FycmF5IChzZWxmLCB0aW1lc3RhbXAsIHZhbHVlX2FycmF5KTsgXAorICBcCisgIGdfbXV0ZXhfbG9jayAoc2VsZi0+bG9jayk7IFwKKyAgXAorICBjcC50aW1lc3RhbXAgPSBHX0dVSU5UNjRfQ09OU1RBTlQoMCk7IFwKKyAgZ192YWx1ZV9pbml0ICgmY3AudmFsdWUsIHNlbGYtPnByaXYtPnR5cGUpOyBcCisgIGdfdmFsdWVfY29weSAoJnNlbGYtPnByaXYtPmRlZmF1bHRfdmFsdWUsICZjcC52YWx1ZSk7IFwKKyAgXAorICBtaW4gPSBnX3ZhbHVlX2dldF8jI3Z0eXBlICgmc2VsZi0+cHJpdi0+bWluaW11bV92YWx1ZSk7IFwKKyAgbWF4ID0gZ192YWx1ZV9nZXRfIyN2dHlwZSAoJnNlbGYtPnByaXYtPm1heGltdW1fdmFsdWUpOyBcCisgIFwKKyAgZm9yKGkgPSAwOyBpIDwgdmFsdWVfYXJyYXktPm5ic2FtcGxlczsgaSsrKSB7IFwKKyAgICBpZiAodGltZXN0YW1wID49IG5leHRfdHMpIHsgXAorICAgICAgaXRlcjEgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9maW5kX2NvbnRyb2xfcG9pbnRfaXRlciAoc2VsZiwgdHMpOyBcCisgICAgICBpZiAoIWl0ZXIxKSB7IFwKKyAgICAgICAgY3AxID0gJmNwOyBcCisJaWYgKEdfTElLRUxZIChzZWxmLT5wcml2LT52YWx1ZXMpKSBcCisJICBpdGVyMiA9IGdfc2VxdWVuY2VfZ2V0X2JlZ2luX2l0ZXIgKHNlbGYtPnByaXYtPnZhbHVlcyk7IFwKKwllbHNlIFwKKwkgIGl0ZXIyID0gTlVMTDsgXAorICAgICAgfSBlbHNlIHsgXAorICAgICAgICBjcDEgPSBnX3NlcXVlbmNlX2dldCAoaXRlcjEpOyBcCisgICAgICAgIGl0ZXIyID0gZ19zZXF1ZW5jZV9pdGVyX25leHQgKGl0ZXIxKTsgXAorICAgICAgfSBcCisgICAgICBcCisgICAgICBpZiAoaXRlcjIgJiYgIWdfc2VxdWVuY2VfaXRlcl9pc19lbmQgKGl0ZXIyKSkgeyBcCisgICAgICAgIGNwMiA9IGdfc2VxdWVuY2VfZ2V0IChpdGVyMik7IFwKKyAgICAgICAgbmV4dF90cyA9IGNwMi0+dGltZXN0YW1wOyBcCisgICAgICB9IGVsc2UgeyBcCisgICAgICAgIG5leHRfdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOyBcCisgICAgICB9IFwKKyAgICAgIHZhbDEgPSBnX3ZhbHVlX2dldF8jI3Z0eXBlICgmY3AxLT52YWx1ZSk7IFwKKyAgICAgIGlmIChjcDIpIFwKKyAgICAgICAgdmFsMiA9IGdfdmFsdWVfZ2V0XyMjdnR5cGUgKCZjcDItPnZhbHVlKTsgXAorICAgIH0gXAorICAgIF9pbnRlcnBvbGF0ZV9jdWJpY19nZXRfIyN2dHlwZSAoc2VsZiwgY3AxLCB2YWwxLCBjcDIsIHZhbDIsIHRpbWVzdGFtcCwgbWluLCBtYXgsIHZhbHVlcyk7IFwKKyAgICB0cyArPSB2YWx1ZV9hcnJheS0+c2FtcGxlX2ludGVydmFsOyBcCisgICAgdmFsdWVzKys7IFwKKyAgfSBcCisgIGdfbXV0ZXhfdW5sb2NrIChzZWxmLT5sb2NrKTsgXAorICBnX3ZhbHVlX3Vuc2V0ICgmY3AudmFsdWUpOyBcCisgIHJldHVybiBUUlVFOyBcCit9CisKK0RFRklORV9DVUJJQ19HRVQgKGludCwgVFJVRSwgRU1QVFkpOworREVGSU5FX0NVQklDX0dFVCAodWludCwgVFJVRSwgRU1QVFkpOworREVGSU5FX0NVQklDX0dFVCAobG9uZywgVFJVRSwgRU1QVFkpOworREVGSU5FX0NVQklDX0dFVCAodWxvbmcsIFRSVUUsIEVNUFRZKTsKK0RFRklORV9DVUJJQ19HRVQgKGludDY0LCBUUlVFLCBFTVBUWSk7CitERUZJTkVfQ1VCSUNfR0VUICh1aW50NjQsIFRSVUUsIGdzdF9ndWludDY0X3RvX2dkb3VibGUpOworREVGSU5FX0NVQklDX0dFVCAoZmxvYXQsIEZBTFNFLCBFTVBUWSk7CitERUZJTkVfQ1VCSUNfR0VUIChkb3VibGUsIEZBTFNFLCBFTVBUWSk7CisKK3N0YXRpYyBHc3RJbnRlcnBvbGF0ZU1ldGhvZCBpbnRlcnBvbGF0ZV9jdWJpYyA9IHsKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgaW50ZXJwb2xhdGVfY3ViaWNfZ2V0X2ludCwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSBpbnRlcnBvbGF0ZV9jdWJpY19nZXRfaW50X3ZhbHVlX2FycmF5LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSBpbnRlcnBvbGF0ZV9jdWJpY19nZXRfdWludCwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSBpbnRlcnBvbGF0ZV9jdWJpY19nZXRfdWludF92YWx1ZV9hcnJheSwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgaW50ZXJwb2xhdGVfY3ViaWNfZ2V0X2xvbmcsCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgaW50ZXJwb2xhdGVfY3ViaWNfZ2V0X2xvbmdfdmFsdWVfYXJyYXksCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIGludGVycG9sYXRlX2N1YmljX2dldF91bG9uZywKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSBpbnRlcnBvbGF0ZV9jdWJpY19nZXRfdWxvbmdfdmFsdWVfYXJyYXksCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIGludGVycG9sYXRlX2N1YmljX2dldF9pbnQ2NCwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSBpbnRlcnBvbGF0ZV9jdWJpY19nZXRfaW50NjRfdmFsdWVfYXJyYXksCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIGludGVycG9sYXRlX2N1YmljX2dldF91aW50NjQsCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgaW50ZXJwb2xhdGVfY3ViaWNfZ2V0X3VpbnQ2NF92YWx1ZV9hcnJheSwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgaW50ZXJwb2xhdGVfY3ViaWNfZ2V0X2Zsb2F0LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkpIGludGVycG9sYXRlX2N1YmljX2dldF9mbG9hdF92YWx1ZV9hcnJheSwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgaW50ZXJwb2xhdGVfY3ViaWNfZ2V0X2RvdWJsZSwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSBpbnRlcnBvbGF0ZV9jdWJpY19nZXRfZG91YmxlX3ZhbHVlX2FycmF5LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSBOVUxMLAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkpIE5VTEwsCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIE5VTEwsCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgTlVMTCwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgTlVMTCwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSBOVUxMCit9OworCisvKiAgcmVnaXN0ZXIgYWxsIGludGVycG9sYXRpb24gbWV0aG9kcyAqLworR3N0SW50ZXJwb2xhdGVNZXRob2QgKnByaXZfZ3N0X2ludGVycG9sYXRpb25fbWV0aG9kc1tdID0geworICAmaW50ZXJwb2xhdGVfbm9uZSwKKyAgJmludGVycG9sYXRlX3RyaWdnZXIsCisgICZpbnRlcnBvbGF0ZV9saW5lYXIsCisgICZpbnRlcnBvbGF0ZV9jdWJpYywKKyAgJmludGVycG9sYXRlX2N1YmljCit9OworCitndWludCBwcml2X2dzdF9udW1faW50ZXJwb2xhdGlvbl9tZXRob2RzID0KK0dfTl9FTEVNRU5UUyAocHJpdl9nc3RfaW50ZXJwb2xhdGlvbl9tZXRob2RzKTsKZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYyBiL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjdkMWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5jCkBAIC0wLDAgKzEsNjk3IEBACisvKiBHU3RyZWFtZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsMjAwOSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKyAqCisgKiBnc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5jOiBDb250cm9sIHNvdXJjZSB0aGF0IHByb3ZpZGVzIHNldmVyYWwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycG9sYXRpb24gbWV0aG9kcworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qKgorICogU0VDVElPTjpnc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZQorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBpbnRlcnBvbGF0aW9uIGNvbnRyb2wgc291cmNlCisgKgorICogI0dzdEludGVycG9sYXRpb25Db250cm9sU291cmNlIGlzIGEgI0dzdENvbnRyb2xTb3VyY2UsIHRoYXQgaW50ZXJwb2xhdGVzIHZhbHVlcyBiZXR3ZWVuIHVzZXItZ2l2ZW4KKyAqIGNvbnRyb2wgcG9pbnRzLiBJdCBzdXBwb3J0cyBzZXZlcmFsIGludGVycG9sYXRpb24gbW9kZXMgYW5kIHByb3BlcnR5IHR5cGVzLgorICoKKyAqIFRvIHVzZSAjR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UgZ2V0IGEgbmV3IGluc3RhbmNlIGJ5IGNhbGxpbmcKKyAqIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX25ldygpLCBiaW5kIGl0IHRvIGEgI0dQYXJhbVNwZWMsIHNlbGVjdCBhIGludGVycG9sYXRpb24gbW9kZSB3aXRoCisgKiBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXRfaW50ZXJwb2xhdGlvbl9tb2RlKCkgYW5kIHNldCBzb21lIGNvbnRyb2wgcG9pbnRzIGJ5IGNhbGxpbmcKKyAqIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldCgpLgorICoKKyAqIEFsbCBmdW5jdGlvbnMgYXJlIE1ULXNhZmUuCisgKgorICovCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworI2luY2x1ZGUgImdzdGNvbnRyb2xzb3VyY2UuaCIKKyNpbmNsdWRlICJnc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5oIgorI2luY2x1ZGUgImdzdGludGVycG9sYXRpb25jb250cm9sc291cmNlcHJpdmF0ZS5oIgorCisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBjb250cm9sbGVyX2RlYnVnCitHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOIChHU1RfQ0FUX0RFRkFVTFQpOworCitHX0RFRklORV9UWVBFIChHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSwgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2UsCisgICAgR1NUX1RZUEVfQ09OVFJPTF9TT1VSQ0UpOworCitzdGF0aWMgR09iamVjdENsYXNzICpwYXJlbnRfY2xhc3MgPSBOVUxMOworCisvKgorICogZ3N0X2NvbnRyb2xfcG9pbnRfZnJlZToKKyAqIEBwcm9wOiB0aGUgb2JqZWN0IHRvIGZyZWUKKyAqCisgKiBQcml2YXRlIG1ldGhvZCB3aGljaCBmcmVlcyBhbGwgZGF0YSBhbGxvY2F0ZWQgYnkgYSAjR3N0Q29udHJvbFBvaW50CisgKiBpbnN0YW5jZS4KKyAqLworc3RhdGljIHZvaWQKK2dzdF9jb250cm9sX3BvaW50X2ZyZWUgKEdzdENvbnRyb2xQb2ludCAqIGNwKQoreworICBnX3JldHVybl9pZl9mYWlsIChjcCk7CisKKyAgZ192YWx1ZV91bnNldCAoJmNwLT52YWx1ZSk7CisgIGdfc2xpY2VfZnJlZSAoR3N0Q29udHJvbFBvaW50LCBjcCk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9yZXNldCAoR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UgKiBzZWxmKQoreworICBHc3RDb250cm9sU291cmNlICpjc291cmNlID0gKEdzdENvbnRyb2xTb3VyY2UgKikgc2VsZjsKKworICBjc291cmNlLT5nZXRfdmFsdWUgPSBOVUxMOworICBjc291cmNlLT5nZXRfdmFsdWVfYXJyYXkgPSBOVUxMOworCisgIHNlbGYtPnByaXYtPnR5cGUgPSBzZWxmLT5wcml2LT5iYXNlID0gR19UWVBFX0lOVkFMSUQ7CisKKyAgaWYgKEdfSVNfVkFMVUUgKCZzZWxmLT5wcml2LT5kZWZhdWx0X3ZhbHVlKSkKKyAgICBnX3ZhbHVlX3Vuc2V0ICgmc2VsZi0+cHJpdi0+ZGVmYXVsdF92YWx1ZSk7CisgIGlmIChHX0lTX1ZBTFVFICgmc2VsZi0+cHJpdi0+bWluaW11bV92YWx1ZSkpCisgICAgZ192YWx1ZV91bnNldCAoJnNlbGYtPnByaXYtPm1pbmltdW1fdmFsdWUpOworICBpZiAoR19JU19WQUxVRSAoJnNlbGYtPnByaXYtPm1heGltdW1fdmFsdWUpKQorICAgIGdfdmFsdWVfdW5zZXQgKCZzZWxmLT5wcml2LT5tYXhpbXVtX3ZhbHVlKTsKKworICBpZiAoc2VsZi0+cHJpdi0+dmFsdWVzKSB7CisgICAgZ19zZXF1ZW5jZV9mcmVlIChzZWxmLT5wcml2LT52YWx1ZXMpOworICAgIHNlbGYtPnByaXYtPnZhbHVlcyA9IE5VTEw7CisgIH0KKworICBzZWxmLT5wcml2LT5udmFsdWVzID0gMDsKKyAgc2VsZi0+cHJpdi0+dmFsaWRfY2FjaGUgPSBGQUxTRTsKK30KKworLyoqCisgKiBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXc6CisgKgorICogVGhpcyByZXR1cm5zIGEgbmV3LCB1bmJvdW5kICNHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS4KKyAqCisgKiBSZXR1cm5zOiBhIG5ldywgdW5ib3VuZCAjR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuCisgKi8KK0dzdEludGVycG9sYXRpb25Db250cm9sU291cmNlICoKK2dzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX25ldyAodm9pZCkKK3sKKyAgcmV0dXJuIGdfb2JqZWN0X25ld3YgKEdTVF9UWVBFX0lOVEVSUE9MQVRJT05fQ09OVFJPTF9TT1VSQ0UsIDAsIE5VTEwpOworfQorCisvKioKKyAqIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldF9pbnRlcnBvbGF0aW9uX21vZGU6CisgKiBAc2VsZjogdGhlICNHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSBvYmplY3QKKyAqIEBtb2RlOiBpbnRlcnBvbGF0aW9uIG1vZGUKKyAqCisgKiBTZXRzIHRoZSBnaXZlbiBpbnRlcnBvbGF0aW9uIG1vZGUuCisgKgorICogPG5vdGU+PHBhcmE+VXNlciBpbnRlcnBvbGF0aW9uIGlzIG5vdCB5ZXQgYXZhaWxhYmxlIGFuZCBxdWFkcmF0aWMgaW50ZXJwb2xhdGlvbgorICogaXMgZGVwcmVjYXRlZCBhbmQgbWFwcyB0byBjdWJpYyBpbnRlcnBvbGF0aW9uLjwvcGFyYT48L25vdGU+CisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGludGVycG9sYXRpb24gbW9kZSBjb3VsZCBiZSBzZXQsICVGQUxTRSBvdGhlcndpc2UKKyAqLworLyogKklOREVOVC1PRkYqICovCitnYm9vbGVhbgorZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0X2ludGVycG9sYXRpb25fbW9kZSAoCisgICAgR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UgKiBzZWxmLCBHc3RJbnRlcnBvbGF0ZU1vZGUgbW9kZSkKKy8qICpJTkRFTlQtT04qICovCit7CisgIGdib29sZWFuIHJldCA9IFRSVUU7CisgIEdzdENvbnRyb2xTb3VyY2UgKmNzb3VyY2UgPSBHU1RfQ09OVFJPTF9TT1VSQ0UgKHNlbGYpOworCisgIGlmIChtb2RlID49IHByaXZfZ3N0X251bV9pbnRlcnBvbGF0aW9uX21ldGhvZHMKKyAgICAgIHx8IHByaXZfZ3N0X2ludGVycG9sYXRpb25fbWV0aG9kc1ttb2RlXSA9PSBOVUxMKSB7CisgICAgR1NUX1dBUk5JTkcgKCJpbnRlcnBvbGF0aW9uIG1vZGUgJWQgaW52YWxpZCBvciBub3QgaW1wbGVtZW50ZWQgeWV0IiwgbW9kZSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgaWYgKG1vZGUgPT0gR1NUX0lOVEVSUE9MQVRFX1FVQURSQVRJQykgeworICAgIEdTVF9XQVJOSU5HICgiUXVhZHJhdGljIGludGVycG9sYXRpb24gbW9kZSBpcyBkZXByZWNhdGVkLCB1c2luZyBjdWJpYyIKKyAgICAgICAgImludGVycG9sYXRpb24gbW9kZSIpOworICB9CisKKyAgaWYgKG1vZGUgPT0gR1NUX0lOVEVSUE9MQVRFX1VTRVIpIHsKKyAgICBHU1RfV0FSTklORyAoIlVzZXIgaW50ZXJwb2xhdGlvbiBtb2RlIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKworICBnX211dGV4X2xvY2sgKHNlbGYtPmxvY2spOworICBzd2l0Y2ggKHNlbGYtPnByaXYtPmJhc2UpIHsKKyAgICBjYXNlIEdfVFlQRV9JTlQ6CisgICAgICBjc291cmNlLT5nZXRfdmFsdWUgPSBwcml2X2dzdF9pbnRlcnBvbGF0aW9uX21ldGhvZHNbbW9kZV0tPmdldF9pbnQ7CisgICAgICBjc291cmNlLT5nZXRfdmFsdWVfYXJyYXkgPQorICAgICAgICAgIHByaXZfZ3N0X2ludGVycG9sYXRpb25fbWV0aG9kc1ttb2RlXS0+Z2V0X2ludF92YWx1ZV9hcnJheTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR19UWVBFX1VJTlQ6eworICAgICAgY3NvdXJjZS0+Z2V0X3ZhbHVlID0gcHJpdl9nc3RfaW50ZXJwb2xhdGlvbl9tZXRob2RzW21vZGVdLT5nZXRfdWludDsKKyAgICAgIGNzb3VyY2UtPmdldF92YWx1ZV9hcnJheSA9CisgICAgICAgICAgcHJpdl9nc3RfaW50ZXJwb2xhdGlvbl9tZXRob2RzW21vZGVdLT5nZXRfdWludF92YWx1ZV9hcnJheTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdfVFlQRV9MT05HOnsKKyAgICAgIGNzb3VyY2UtPmdldF92YWx1ZSA9IHByaXZfZ3N0X2ludGVycG9sYXRpb25fbWV0aG9kc1ttb2RlXS0+Z2V0X2xvbmc7CisgICAgICBjc291cmNlLT5nZXRfdmFsdWVfYXJyYXkgPQorICAgICAgICAgIHByaXZfZ3N0X2ludGVycG9sYXRpb25fbWV0aG9kc1ttb2RlXS0+Z2V0X2xvbmdfdmFsdWVfYXJyYXk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHX1RZUEVfVUxPTkc6eworICAgICAgY3NvdXJjZS0+Z2V0X3ZhbHVlID0gcHJpdl9nc3RfaW50ZXJwb2xhdGlvbl9tZXRob2RzW21vZGVdLT5nZXRfdWxvbmc7CisgICAgICBjc291cmNlLT5nZXRfdmFsdWVfYXJyYXkgPQorICAgICAgICAgIHByaXZfZ3N0X2ludGVycG9sYXRpb25fbWV0aG9kc1ttb2RlXS0+Z2V0X3Vsb25nX3ZhbHVlX2FycmF5OworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR19UWVBFX0lOVDY0OnsKKyAgICAgIGNzb3VyY2UtPmdldF92YWx1ZSA9IHByaXZfZ3N0X2ludGVycG9sYXRpb25fbWV0aG9kc1ttb2RlXS0+Z2V0X2ludDY0OworICAgICAgY3NvdXJjZS0+Z2V0X3ZhbHVlX2FycmF5ID0KKyAgICAgICAgICBwcml2X2dzdF9pbnRlcnBvbGF0aW9uX21ldGhvZHNbbW9kZV0tPmdldF9pbnQ2NF92YWx1ZV9hcnJheTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdfVFlQRV9VSU5UNjQ6eworICAgICAgY3NvdXJjZS0+Z2V0X3ZhbHVlID0gcHJpdl9nc3RfaW50ZXJwb2xhdGlvbl9tZXRob2RzW21vZGVdLT5nZXRfdWludDY0OworICAgICAgY3NvdXJjZS0+Z2V0X3ZhbHVlX2FycmF5ID0KKyAgICAgICAgICBwcml2X2dzdF9pbnRlcnBvbGF0aW9uX21ldGhvZHNbbW9kZV0tPmdldF91aW50NjRfdmFsdWVfYXJyYXk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHX1RZUEVfRkxPQVQ6eworICAgICAgY3NvdXJjZS0+Z2V0X3ZhbHVlID0gcHJpdl9nc3RfaW50ZXJwb2xhdGlvbl9tZXRob2RzW21vZGVdLT5nZXRfZmxvYXQ7CisgICAgICBjc291cmNlLT5nZXRfdmFsdWVfYXJyYXkgPQorICAgICAgICAgIHByaXZfZ3N0X2ludGVycG9sYXRpb25fbWV0aG9kc1ttb2RlXS0+Z2V0X2Zsb2F0X3ZhbHVlX2FycmF5OworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR19UWVBFX0RPVUJMRTp7CisgICAgICBjc291cmNlLT5nZXRfdmFsdWUgPSBwcml2X2dzdF9pbnRlcnBvbGF0aW9uX21ldGhvZHNbbW9kZV0tPmdldF9kb3VibGU7CisgICAgICBjc291cmNlLT5nZXRfdmFsdWVfYXJyYXkgPQorICAgICAgICAgIHByaXZfZ3N0X2ludGVycG9sYXRpb25fbWV0aG9kc1ttb2RlXS0+Z2V0X2RvdWJsZV92YWx1ZV9hcnJheTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdfVFlQRV9CT09MRUFOOnsKKyAgICAgIGNzb3VyY2UtPmdldF92YWx1ZSA9IHByaXZfZ3N0X2ludGVycG9sYXRpb25fbWV0aG9kc1ttb2RlXS0+Z2V0X2Jvb2xlYW47CisgICAgICBjc291cmNlLT5nZXRfdmFsdWVfYXJyYXkgPQorICAgICAgICAgIHByaXZfZ3N0X2ludGVycG9sYXRpb25fbWV0aG9kc1ttb2RlXS0+Z2V0X2Jvb2xlYW5fdmFsdWVfYXJyYXk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHX1RZUEVfRU5VTTp7CisgICAgICBjc291cmNlLT5nZXRfdmFsdWUgPSBwcml2X2dzdF9pbnRlcnBvbGF0aW9uX21ldGhvZHNbbW9kZV0tPmdldF9lbnVtOworICAgICAgY3NvdXJjZS0+Z2V0X3ZhbHVlX2FycmF5ID0KKyAgICAgICAgICBwcml2X2dzdF9pbnRlcnBvbGF0aW9uX21ldGhvZHNbbW9kZV0tPmdldF9lbnVtX3ZhbHVlX2FycmF5OworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR19UWVBFX1NUUklORzp7CisgICAgICBjc291cmNlLT5nZXRfdmFsdWUgPSBwcml2X2dzdF9pbnRlcnBvbGF0aW9uX21ldGhvZHNbbW9kZV0tPmdldF9zdHJpbmc7CisgICAgICBjc291cmNlLT5nZXRfdmFsdWVfYXJyYXkgPQorICAgICAgICAgIHByaXZfZ3N0X2ludGVycG9sYXRpb25fbWV0aG9kc1ttb2RlXS0+Z2V0X3N0cmluZ192YWx1ZV9hcnJheTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgcmV0ID0gRkFMU0U7CisgICAgICBicmVhazsKKyAgfQorCisgIC8qIEluY29tcGxldGUgaW1wbGVtZW50YXRpb24gKi8KKyAgaWYgKCFyZXQgfHwgIWNzb3VyY2UtPmdldF92YWx1ZSB8fCAhY3NvdXJjZS0+Z2V0X3ZhbHVlX2FycmF5KSB7CisgICAgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfcmVzZXQgKHNlbGYpOworICAgIHJldCA9IEZBTFNFOworICB9CisKKyAgc2VsZi0+cHJpdi0+dmFsaWRfY2FjaGUgPSBGQUxTRTsKKyAgc2VsZi0+cHJpdi0+aW50ZXJwb2xhdGlvbl9tb2RlID0gbW9kZTsKKworICBnX211dGV4X3VubG9jayAoc2VsZi0+bG9jayk7CisKKyAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9iaW5kIChHc3RDb250cm9sU291cmNlICogc291cmNlLAorICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgR1R5cGUgdHlwZSwgYmFzZTsKKyAgR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UgKnNlbGYgPQorICAgICAgKEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlICopIHNvdXJjZTsKKyAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKKworICAvKiBnZXQgdGhlIGZ1bmRhbWVudGFsIGJhc2UgdHlwZSAqLworICBzZWxmLT5wcml2LT50eXBlID0gYmFzZSA9IHR5cGUgPSBHX1BBUkFNX1NQRUNfVkFMVUVfVFlQRSAocHNwZWMpOworICB3aGlsZSAoKHR5cGUgPSBnX3R5cGVfcGFyZW50ICh0eXBlKSkpCisgICAgYmFzZSA9IHR5cGU7CisKKyAgc2VsZi0+cHJpdi0+YmFzZSA9IGJhc2U7CisgIC8qIHJlc3RvcmUgdHlwZSAqLworICB0eXBlID0gc2VsZi0+cHJpdi0+dHlwZTsKKworICBpZiAoIWdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldF9pbnRlcnBvbGF0aW9uX21vZGUgKHNlbGYsCisgICAgICAgICAgc2VsZi0+cHJpdi0+aW50ZXJwb2xhdGlvbl9tb2RlKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgc3dpdGNoIChiYXNlKSB7CisgICAgY2FzZSBHX1RZUEVfSU5UOnsKKyAgICAgIEdQYXJhbVNwZWNJbnQgKnRwc3BlYyA9IEdfUEFSQU1fU1BFQ19JTlQgKHBzcGVjKTsKKworICAgICAgZ192YWx1ZV9pbml0ICgmc2VsZi0+cHJpdi0+ZGVmYXVsdF92YWx1ZSwgdHlwZSk7CisgICAgICBnX3ZhbHVlX3NldF9pbnQgKCZzZWxmLT5wcml2LT5kZWZhdWx0X3ZhbHVlLCB0cHNwZWMtPmRlZmF1bHRfdmFsdWUpOworICAgICAgZ192YWx1ZV9pbml0ICgmc2VsZi0+cHJpdi0+bWluaW11bV92YWx1ZSwgdHlwZSk7CisgICAgICBnX3ZhbHVlX3NldF9pbnQgKCZzZWxmLT5wcml2LT5taW5pbXVtX3ZhbHVlLCB0cHNwZWMtPm1pbmltdW0pOworICAgICAgZ192YWx1ZV9pbml0ICgmc2VsZi0+cHJpdi0+bWF4aW11bV92YWx1ZSwgdHlwZSk7CisgICAgICBnX3ZhbHVlX3NldF9pbnQgKCZzZWxmLT5wcml2LT5tYXhpbXVtX3ZhbHVlLCB0cHNwZWMtPm1heGltdW0pOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR19UWVBFX1VJTlQ6eworICAgICAgR1BhcmFtU3BlY1VJbnQgKnRwc3BlYyA9IEdfUEFSQU1fU1BFQ19VSU5UIChwc3BlYyk7CisKKyAgICAgIGdfdmFsdWVfaW5pdCAoJnNlbGYtPnByaXYtPmRlZmF1bHRfdmFsdWUsIHR5cGUpOworICAgICAgZ192YWx1ZV9zZXRfdWludCAoJnNlbGYtPnByaXYtPmRlZmF1bHRfdmFsdWUsIHRwc3BlYy0+ZGVmYXVsdF92YWx1ZSk7CisgICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5taW5pbXVtX3ZhbHVlLCB0eXBlKTsKKyAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKCZzZWxmLT5wcml2LT5taW5pbXVtX3ZhbHVlLCB0cHNwZWMtPm1pbmltdW0pOworICAgICAgZ192YWx1ZV9pbml0ICgmc2VsZi0+cHJpdi0+bWF4aW11bV92YWx1ZSwgdHlwZSk7CisgICAgICBnX3ZhbHVlX3NldF91aW50ICgmc2VsZi0+cHJpdi0+bWF4aW11bV92YWx1ZSwgdHBzcGVjLT5tYXhpbXVtKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdfVFlQRV9MT05HOnsKKyAgICAgIEdQYXJhbVNwZWNMb25nICp0cHNwZWMgPSBHX1BBUkFNX1NQRUNfTE9ORyAocHNwZWMpOworCisgICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5kZWZhdWx0X3ZhbHVlLCB0eXBlKTsKKyAgICAgIGdfdmFsdWVfc2V0X2xvbmcgKCZzZWxmLT5wcml2LT5kZWZhdWx0X3ZhbHVlLCB0cHNwZWMtPmRlZmF1bHRfdmFsdWUpOworICAgICAgZ192YWx1ZV9pbml0ICgmc2VsZi0+cHJpdi0+bWluaW11bV92YWx1ZSwgdHlwZSk7CisgICAgICBnX3ZhbHVlX3NldF9sb25nICgmc2VsZi0+cHJpdi0+bWluaW11bV92YWx1ZSwgdHBzcGVjLT5taW5pbXVtKTsKKyAgICAgIGdfdmFsdWVfaW5pdCAoJnNlbGYtPnByaXYtPm1heGltdW1fdmFsdWUsIHR5cGUpOworICAgICAgZ192YWx1ZV9zZXRfbG9uZyAoJnNlbGYtPnByaXYtPm1heGltdW1fdmFsdWUsIHRwc3BlYy0+bWF4aW11bSk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHX1RZUEVfVUxPTkc6eworICAgICAgR1BhcmFtU3BlY1VMb25nICp0cHNwZWMgPSBHX1BBUkFNX1NQRUNfVUxPTkcgKHBzcGVjKTsKKworICAgICAgZ192YWx1ZV9pbml0ICgmc2VsZi0+cHJpdi0+ZGVmYXVsdF92YWx1ZSwgdHlwZSk7CisgICAgICBnX3ZhbHVlX3NldF91bG9uZyAoJnNlbGYtPnByaXYtPmRlZmF1bHRfdmFsdWUsIHRwc3BlYy0+ZGVmYXVsdF92YWx1ZSk7CisgICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5taW5pbXVtX3ZhbHVlLCB0eXBlKTsKKyAgICAgIGdfdmFsdWVfc2V0X3Vsb25nICgmc2VsZi0+cHJpdi0+bWluaW11bV92YWx1ZSwgdHBzcGVjLT5taW5pbXVtKTsKKyAgICAgIGdfdmFsdWVfaW5pdCAoJnNlbGYtPnByaXYtPm1heGltdW1fdmFsdWUsIHR5cGUpOworICAgICAgZ192YWx1ZV9zZXRfdWxvbmcgKCZzZWxmLT5wcml2LT5tYXhpbXVtX3ZhbHVlLCB0cHNwZWMtPm1heGltdW0pOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR19UWVBFX0lOVDY0OnsKKyAgICAgIEdQYXJhbVNwZWNJbnQ2NCAqdHBzcGVjID0gR19QQVJBTV9TUEVDX0lOVDY0IChwc3BlYyk7CisKKyAgICAgIGdfdmFsdWVfaW5pdCAoJnNlbGYtPnByaXYtPmRlZmF1bHRfdmFsdWUsIHR5cGUpOworICAgICAgZ192YWx1ZV9zZXRfaW50NjQgKCZzZWxmLT5wcml2LT5kZWZhdWx0X3ZhbHVlLCB0cHNwZWMtPmRlZmF1bHRfdmFsdWUpOworICAgICAgZ192YWx1ZV9pbml0ICgmc2VsZi0+cHJpdi0+bWluaW11bV92YWx1ZSwgdHlwZSk7CisgICAgICBnX3ZhbHVlX3NldF9pbnQ2NCAoJnNlbGYtPnByaXYtPm1pbmltdW1fdmFsdWUsIHRwc3BlYy0+bWluaW11bSk7CisgICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5tYXhpbXVtX3ZhbHVlLCB0eXBlKTsKKyAgICAgIGdfdmFsdWVfc2V0X2ludDY0ICgmc2VsZi0+cHJpdi0+bWF4aW11bV92YWx1ZSwgdHBzcGVjLT5tYXhpbXVtKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdfVFlQRV9VSU5UNjQ6eworICAgICAgR1BhcmFtU3BlY1VJbnQ2NCAqdHBzcGVjID0gR19QQVJBTV9TUEVDX1VJTlQ2NCAocHNwZWMpOworCisgICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5kZWZhdWx0X3ZhbHVlLCB0eXBlKTsKKyAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAoJnNlbGYtPnByaXYtPmRlZmF1bHRfdmFsdWUsIHRwc3BlYy0+ZGVmYXVsdF92YWx1ZSk7CisgICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5taW5pbXVtX3ZhbHVlLCB0eXBlKTsKKyAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAoJnNlbGYtPnByaXYtPm1pbmltdW1fdmFsdWUsIHRwc3BlYy0+bWluaW11bSk7CisgICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5tYXhpbXVtX3ZhbHVlLCB0eXBlKTsKKyAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAoJnNlbGYtPnByaXYtPm1heGltdW1fdmFsdWUsIHRwc3BlYy0+bWF4aW11bSk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHX1RZUEVfRkxPQVQ6eworICAgICAgR1BhcmFtU3BlY0Zsb2F0ICp0cHNwZWMgPSBHX1BBUkFNX1NQRUNfRkxPQVQgKHBzcGVjKTsKKworICAgICAgZ192YWx1ZV9pbml0ICgmc2VsZi0+cHJpdi0+ZGVmYXVsdF92YWx1ZSwgdHlwZSk7CisgICAgICBnX3ZhbHVlX3NldF9mbG9hdCAoJnNlbGYtPnByaXYtPmRlZmF1bHRfdmFsdWUsIHRwc3BlYy0+ZGVmYXVsdF92YWx1ZSk7CisgICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5taW5pbXVtX3ZhbHVlLCB0eXBlKTsKKyAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0ICgmc2VsZi0+cHJpdi0+bWluaW11bV92YWx1ZSwgdHBzcGVjLT5taW5pbXVtKTsKKyAgICAgIGdfdmFsdWVfaW5pdCAoJnNlbGYtPnByaXYtPm1heGltdW1fdmFsdWUsIHR5cGUpOworICAgICAgZ192YWx1ZV9zZXRfZmxvYXQgKCZzZWxmLT5wcml2LT5tYXhpbXVtX3ZhbHVlLCB0cHNwZWMtPm1heGltdW0pOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR19UWVBFX0RPVUJMRTp7CisgICAgICBHUGFyYW1TcGVjRG91YmxlICp0cHNwZWMgPSBHX1BBUkFNX1NQRUNfRE9VQkxFIChwc3BlYyk7CisKKyAgICAgIGdfdmFsdWVfaW5pdCAoJnNlbGYtPnByaXYtPmRlZmF1bHRfdmFsdWUsIHR5cGUpOworICAgICAgZ192YWx1ZV9zZXRfZG91YmxlICgmc2VsZi0+cHJpdi0+ZGVmYXVsdF92YWx1ZSwgdHBzcGVjLT5kZWZhdWx0X3ZhbHVlKTsKKyAgICAgIGdfdmFsdWVfaW5pdCAoJnNlbGYtPnByaXYtPm1pbmltdW1fdmFsdWUsIHR5cGUpOworICAgICAgZ192YWx1ZV9zZXRfZG91YmxlICgmc2VsZi0+cHJpdi0+bWluaW11bV92YWx1ZSwgdHBzcGVjLT5taW5pbXVtKTsKKyAgICAgIGdfdmFsdWVfaW5pdCAoJnNlbGYtPnByaXYtPm1heGltdW1fdmFsdWUsIHR5cGUpOworICAgICAgZ192YWx1ZV9zZXRfZG91YmxlICgmc2VsZi0+cHJpdi0+bWF4aW11bV92YWx1ZSwgdHBzcGVjLT5tYXhpbXVtKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdfVFlQRV9CT09MRUFOOnsKKyAgICAgIEdQYXJhbVNwZWNCb29sZWFuICp0cHNwZWMgPSBHX1BBUkFNX1NQRUNfQk9PTEVBTiAocHNwZWMpOworCisgICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5kZWZhdWx0X3ZhbHVlLCB0eXBlKTsKKyAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKCZzZWxmLT5wcml2LT5kZWZhdWx0X3ZhbHVlLCB0cHNwZWMtPmRlZmF1bHRfdmFsdWUpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR19UWVBFX0VOVU06eworICAgICAgR1BhcmFtU3BlY0VudW0gKnRwc3BlYyA9IEdfUEFSQU1fU1BFQ19FTlVNIChwc3BlYyk7CisKKyAgICAgIGdfdmFsdWVfaW5pdCAoJnNlbGYtPnByaXYtPmRlZmF1bHRfdmFsdWUsIHR5cGUpOworICAgICAgZ192YWx1ZV9zZXRfZW51bSAoJnNlbGYtPnByaXYtPmRlZmF1bHRfdmFsdWUsIHRwc3BlYy0+ZGVmYXVsdF92YWx1ZSk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHX1RZUEVfU1RSSU5HOnsKKyAgICAgIEdQYXJhbVNwZWNTdHJpbmcgKnRwc3BlYyA9IEdfUEFSQU1fU1BFQ19TVFJJTkcgKHBzcGVjKTsKKworICAgICAgZ192YWx1ZV9pbml0ICgmc2VsZi0+cHJpdi0+ZGVmYXVsdF92YWx1ZSwgdHlwZSk7CisgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKCZzZWxmLT5wcml2LT5kZWZhdWx0X3ZhbHVlLCB0cHNwZWMtPmRlZmF1bHRfdmFsdWUpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICBHU1RfV0FSTklORyAoImluY29tcGxldGUgaW1wbGVtZW50YXRpb24gZm9yIHBhcmFtc3BlYyB0eXBlICclcyciLAorICAgICAgICAgIEdfUEFSQU1fU1BFQ19UWVBFX05BTUUgKHBzcGVjKSk7CisgICAgICByZXQgPSBGQUxTRTsKKyAgICAgIGJyZWFrOworICB9CisKKyAgaWYgKHJldCkgeworICAgIHNlbGYtPnByaXYtPnZhbGlkX2NhY2hlID0gRkFMU0U7CisgICAgc2VsZi0+cHJpdi0+bnZhbHVlcyA9IDA7CisgIH0gZWxzZSB7CisgICAgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfcmVzZXQgKHNlbGYpOworICB9CisKKyAgcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGdzdF9jb250cm9sX3BvaW50X2NvbXBhcmU6CisgKiBAcDE6IGEgcG9pbnRlciB0byBhICNHc3RDb250cm9sUG9pbnQKKyAqIEBwMjogYSBwb2ludGVyIHRvIGEgI0dzdENvbnRyb2xQb2ludAorICoKKyAqIENvbXBhcmUgZnVuY3Rpb24gZm9yIGdfbGlzdCBvcGVyYXRpb25zIHRoYXQgb3BlcmF0ZXMgb24gdHdvICNHc3RDb250cm9sUG9pbnQKKyAqIHBhcmFtZXRlcnMuCisgKi8KK3N0YXRpYyBnaW50Citnc3RfY29udHJvbF9wb2ludF9jb21wYXJlIChnY29uc3Rwb2ludGVyIHAxLCBnY29uc3Rwb2ludGVyIHAyKQoreworICBHc3RDbG9ja1RpbWUgY3QxID0gKChHc3RDb250cm9sUG9pbnQgKikgcDEpLT50aW1lc3RhbXA7CisgIEdzdENsb2NrVGltZSBjdDIgPSAoKEdzdENvbnRyb2xQb2ludCAqKSBwMiktPnRpbWVzdGFtcDsKKworICByZXR1cm4gKChjdDEgPCBjdDIpID8gLTEgOiAoKGN0MSA9PSBjdDIpID8gMCA6IDEpKTsKK30KKworLyoKKyAqIGdzdF9jb250cm9sX3BvaW50X2ZpbmQ6CisgKiBAcDE6IGEgcG9pbnRlciB0byBhICNHc3RDb250cm9sUG9pbnQKKyAqIEBwMjogYSBwb2ludGVyIHRvIGEgI0dzdENsb2NrVGltZQorICoKKyAqIENvbXBhcmUgZnVuY3Rpb24gZm9yIGdfbGlzdCBvcGVyYXRpb25zIHRoYXQgb3BlcmF0ZXMgb24gYSAjR3N0Q29udHJvbFBvaW50IGFuZAorICogYSAjR3N0Q2xvY2tUaW1lLgorICovCitzdGF0aWMgZ2ludAorZ3N0X2NvbnRyb2xfcG9pbnRfZmluZCAoZ2NvbnN0cG9pbnRlciBwMSwgZ2NvbnN0cG9pbnRlciBwMikKK3sKKyAgR3N0Q2xvY2tUaW1lIGN0MSA9ICgoR3N0Q29udHJvbFBvaW50ICopIHAxKS0+dGltZXN0YW1wOworICBHc3RDbG9ja1RpbWUgY3QyID0gKihHc3RDbG9ja1RpbWUgKikgcDI7CisKKyAgcmV0dXJuICgoY3QxIDwgY3QyKSA/IC0xIDogKChjdDEgPT0gY3QyKSA/IDAgOiAxKSk7Cit9CisKK3N0YXRpYyBHc3RDb250cm9sUG9pbnQgKgorX21ha2VfbmV3X2NwIChHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSAqIHNlbGYsIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsCisgICAgY29uc3QgR1ZhbHVlICogdmFsdWUpCit7CisgIEdzdENvbnRyb2xQb2ludCAqY3A7CisKKyAgLyogY3JlYXRlIGEgbmV3IEdzdENvbnRyb2xQb2ludCAqLworICBjcCA9IGdfc2xpY2VfbmV3MCAoR3N0Q29udHJvbFBvaW50KTsKKyAgY3AtPnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKyAgZ192YWx1ZV9pbml0ICgmY3AtPnZhbHVlLCBzZWxmLT5wcml2LT50eXBlKTsKKyAgZ192YWx1ZV9jb3B5ICh2YWx1ZSwgJmNwLT52YWx1ZSk7CisKKyAgcmV0dXJuIGNwOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0X2ludGVybmFsIChHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSAqCisgICAgc2VsZiwgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgY29uc3QgR1ZhbHVlICogdmFsdWUpCit7CisgIEdTZXF1ZW5jZUl0ZXIgKml0ZXI7CisKKyAgLyogY2hlY2sgaWYgYSBjb250cm9sIHBvaW50IGZvciB0aGUgdGltZXN0YW1wIGFscmVhZHkgZXhpc3RzICovCisKKyAgLyogaXRlciBjb250YWlucyB0aGUgaXRlciByaWdodCAqYWZ0ZXIqIHRpbWVzdGFtcCAqLworICBpZiAoR19MSUtFTFkgKHNlbGYtPnByaXYtPnZhbHVlcykpIHsKKyAgICBpdGVyID0KKyAgICAgICAgZ19zZXF1ZW5jZV9zZWFyY2ggKHNlbGYtPnByaXYtPnZhbHVlcywgJnRpbWVzdGFtcCwKKyAgICAgICAgKEdDb21wYXJlRGF0YUZ1bmMpIGdzdF9jb250cm9sX3BvaW50X2ZpbmQsIE5VTEwpOworICAgIGlmIChpdGVyKSB7CisgICAgICBHU2VxdWVuY2VJdGVyICpwcmV2ID0gZ19zZXF1ZW5jZV9pdGVyX3ByZXYgKGl0ZXIpOworICAgICAgR3N0Q29udHJvbFBvaW50ICpjcCA9IGdfc2VxdWVuY2VfZ2V0IChwcmV2KTsKKworICAgICAgLyogSWYgdGhlIHRpbWVzdGFtcCBpcyB0aGUgc2FtZSBqdXN0IHVwZGF0ZSB0aGUgY29udHJvbCBwb2ludCB2YWx1ZSAqLworICAgICAgaWYgKGNwLT50aW1lc3RhbXAgPT0gdGltZXN0YW1wKSB7CisgICAgICAgIC8qIHVwZGF0ZSBjb250cm9sIHBvaW50ICovCisgICAgICAgIGdfdmFsdWVfcmVzZXQgKCZjcC0+dmFsdWUpOworICAgICAgICBnX3ZhbHVlX2NvcHkgKHZhbHVlLCAmY3AtPnZhbHVlKTsKKyAgICAgICAgZ290byBkb25lOworICAgICAgfQorICAgIH0KKyAgfSBlbHNlIHsKKyAgICBzZWxmLT5wcml2LT52YWx1ZXMgPQorICAgICAgICBnX3NlcXVlbmNlX25ldyAoKEdEZXN0cm95Tm90aWZ5KSBnc3RfY29udHJvbF9wb2ludF9mcmVlKTsKKyAgfQorCisgIC8qIHNvcnQgbmV3IGNwIGludG8gdGhlIHByb3AtPnZhbHVlcyBsaXN0ICovCisgIGdfc2VxdWVuY2VfaW5zZXJ0X3NvcnRlZCAoc2VsZi0+cHJpdi0+dmFsdWVzLCBfbWFrZV9uZXdfY3AgKHNlbGYsIHRpbWVzdGFtcCwKKyAgICAgICAgICB2YWx1ZSksIChHQ29tcGFyZURhdGFGdW5jKSBnc3RfY29udHJvbF9wb2ludF9jb21wYXJlLCBOVUxMKTsKKyAgc2VsZi0+cHJpdi0+bnZhbHVlcysrOworCitkb25lOgorICBzZWxmLT5wcml2LT52YWxpZF9jYWNoZSA9IEZBTFNFOworfQorCisKKy8qKgorICogZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0OgorICogQHNlbGY6IHRoZSAjR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2Ugb2JqZWN0CisgKiBAdGltZXN0YW1wOiB0aGUgdGltZSB0aGUgY29udHJvbC1jaGFuZ2UgaXMgc2NoZWR1bGVkIGZvcgorICogQHZhbHVlOiB0aGUgY29udHJvbC12YWx1ZQorICoKKyAqIFNldCB0aGUgdmFsdWUgb2YgZ2l2ZW4gY29udHJvbGxlci1oYW5kbGVkIHByb3BlcnR5IGF0IGEgY2VydGFpbiB0aW1lLgorICoKKyAqIFJldHVybnM6IEZBTFNFIGlmIHRoZSB2YWx1ZXMgY291bGRuJ3QgYmUgc2V0LCBUUlVFIG90aGVyd2lzZS4KKyAqLworZ2Jvb2xlYW4KK2dzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldCAoR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UgKiBzZWxmLAorICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQoreworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0lOVEVSUE9MQVRJT05fQ09OVFJPTF9TT1VSQ0UgKHNlbGYpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodGltZXN0YW1wKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19WQUxVRSAodmFsdWUpLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX1ZBTFVFX1RZUEUgKHZhbHVlKSA9PSBzZWxmLT5wcml2LT50eXBlLCBGQUxTRSk7CisKKyAgZ19tdXRleF9sb2NrIChzZWxmLT5sb2NrKTsKKyAgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0X2ludGVybmFsIChzZWxmLCB0aW1lc3RhbXAsIHZhbHVlKTsKKyAgZ19tdXRleF91bmxvY2sgKHNlbGYtPmxvY2spOworCisgIHJldHVybiBUUlVFOworfQorCisvKioKKyAqIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldF9mcm9tX2xpc3Q6CisgKiBAc2VsZjogdGhlICNHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSBvYmplY3QKKyAqIEB0aW1lZHZhbHVlczogYSBsaXN0IHdpdGggI0dzdFRpbWVkVmFsdWUgaXRlbXMKKyAqCisgKiBTZXRzIG11bHRpcGxlIHRpbWVkIHZhbHVlcyBhdCBvbmNlLgorICoKKyAqIFJldHVybnM6IEZBTFNFIGlmIHRoZSB2YWx1ZXMgY291bGRuJ3QgYmUgc2V0LCBUUlVFIG90aGVyd2lzZS4KKyAqLworZ2Jvb2xlYW4KK2dzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldF9mcm9tX2xpc3QgKEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlICoKKyAgICBzZWxmLCBjb25zdCBHU0xpc3QgKiB0aW1lZHZhbHVlcykKK3sKKyAgY29uc3QgR1NMaXN0ICpub2RlOworICBHc3RUaW1lZFZhbHVlICp0djsKKyAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19JTlRFUlBPTEFUSU9OX0NPTlRST0xfU09VUkNFIChzZWxmKSwgRkFMU0UpOworCisgIGZvciAobm9kZSA9IHRpbWVkdmFsdWVzOyBub2RlOyBub2RlID0gZ19zbGlzdF9uZXh0IChub2RlKSkgeworICAgIHR2ID0gbm9kZS0+ZGF0YTsKKyAgICBpZiAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0di0+dGltZXN0YW1wKSkgeworICAgICAgR1NUX1dBUk5JTkcgKCJHc3RUaW1lZFZhbHVlZCB3aXRoIGludmFsaWQgdGltZXN0YW1wIHBhc3NlZCB0byAlcyIsCisgICAgICAgICAgR1NUX0ZVTkNUSU9OKTsKKyAgICB9IGVsc2UgaWYgKCFHX0lTX1ZBTFVFICgmdHYtPnZhbHVlKSkgeworICAgICAgR1NUX1dBUk5JTkcgKCJHc3RUaW1lZFZhbHVlZCB3aXRoIGludmFsaWQgdmFsdWUgcGFzc2VkIHRvICVzIiwKKyAgICAgICAgICBHU1RfRlVOQ1RJT04pOworICAgIH0gZWxzZSBpZiAoR19WQUxVRV9UWVBFICgmdHYtPnZhbHVlKSAhPSBzZWxmLT5wcml2LT50eXBlKSB7CisgICAgICBHU1RfV0FSTklORyAoImluY29tcGF0aWJsZSB2YWx1ZSB0eXBlIGZvciBwcm9wZXJ0eSIpOworICAgIH0gZWxzZSB7CisgICAgICBnX211dGV4X2xvY2sgKHNlbGYtPmxvY2spOworICAgICAgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0X2ludGVybmFsIChzZWxmLCB0di0+dGltZXN0YW1wLAorICAgICAgICAgICZ0di0+dmFsdWUpOworICAgICAgZ19tdXRleF91bmxvY2sgKHNlbGYtPmxvY2spOworICAgICAgcmVzID0gVFJVRTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHJlczsKK30KKworLyoqCisgKiBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV91bnNldDoKKyAqIEBzZWxmOiB0aGUgI0dzdEludGVycG9sYXRpb25Db250cm9sU291cmNlIG9iamVjdAorICogQHRpbWVzdGFtcDogdGhlIHRpbWUgdGhlIGNvbnRyb2wtY2hhbmdlIHNob3VsZCBiZSByZW1vdmVkIGZyb20KKyAqCisgKiBVc2VkIHRvIHJlbW92ZSB0aGUgdmFsdWUgb2YgZ2l2ZW4gY29udHJvbGxlci1oYW5kbGVkIHByb3BlcnR5IGF0IGEgY2VydGFpbgorICogdGltZS4KKyAqCisgKiBSZXR1cm5zOiBGQUxTRSBpZiB0aGUgdmFsdWUgY291bGRuJ3QgYmUgdW5zZXQgKGkuZS4gbm90IGZvdW5kLCBUUlVFIG90aGVyd2lzZS4KKyAqLworZ2Jvb2xlYW4KK2dzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3Vuc2V0IChHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSAqIHNlbGYsCisgICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCkKK3sKKyAgR1NlcXVlbmNlSXRlciAqaXRlcjsKKyAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19JTlRFUlBPTEFUSU9OX0NPTlRST0xfU09VUkNFIChzZWxmKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHRpbWVzdGFtcCksIEZBTFNFKTsKKworICBnX211dGV4X2xvY2sgKHNlbGYtPmxvY2spOworICAvKiBjaGVjayBpZiBhIGNvbnRyb2wgcG9pbnQgZm9yIHRoZSB0aW1lc3RhbXAgZXhpc3RzICovCisgIGlmIChHX0xJS0VMWSAoc2VsZi0+cHJpdi0+dmFsdWVzKSAmJiAoaXRlciA9CisgICAgICAgICAgZ19zZXF1ZW5jZV9zZWFyY2ggKHNlbGYtPnByaXYtPnZhbHVlcywgJnRpbWVzdGFtcCwKKyAgICAgICAgICAgICAgKEdDb21wYXJlRGF0YUZ1bmMpIGdzdF9jb250cm9sX3BvaW50X2ZpbmQsIE5VTEwpKSkgeworICAgIEdzdENvbnRyb2xQb2ludCAqY3A7CisKKyAgICAvKiBJdGVyIGNvbnRhaW5zIHRoZSBpdGVyIHJpZ2h0IGFmdGVyIHRpbWVzdGFtcCwgaS5lLgorICAgICAqIHdlIG5lZWQgdG8gZ2V0IHRoZSBwcmV2aW91cyBvbmUgYW5kIGNoZWNrIHRoZSB0aW1lc3RhbXAKKyAgICAgKi8KKyAgICBpdGVyID0gZ19zZXF1ZW5jZV9pdGVyX3ByZXYgKGl0ZXIpOworICAgIGNwID0gZ19zZXF1ZW5jZV9nZXQgKGl0ZXIpOworICAgIGlmIChjcC0+dGltZXN0YW1wID09IHRpbWVzdGFtcCkgeworICAgICAgZ19zZXF1ZW5jZV9yZW1vdmUgKGl0ZXIpOworICAgICAgc2VsZi0+cHJpdi0+bnZhbHVlcy0tOworICAgICAgc2VsZi0+cHJpdi0+dmFsaWRfY2FjaGUgPSBGQUxTRTsKKyAgICAgIHJlcyA9IFRSVUU7CisgICAgfQorICB9CisgIGdfbXV0ZXhfdW5sb2NrIChzZWxmLT5sb2NrKTsKKworICByZXR1cm4gcmVzOworfQorCisvKioKKyAqIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3Vuc2V0X2FsbDoKKyAqIEBzZWxmOiB0aGUgI0dzdEludGVycG9sYXRpb25Db250cm9sU291cmNlIG9iamVjdAorICoKKyAqIFVzZWQgdG8gcmVtb3ZlIGFsbCB0aW1lLXN0YW1wZWQgdmFsdWVzIG9mIGdpdmVuIGNvbnRyb2xsZXItaGFuZGxlZCBwcm9wZXJ0eQorICoKKyAqLwordm9pZAorZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfdW5zZXRfYWxsIChHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSAqCisgICAgc2VsZikKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0lOVEVSUE9MQVRJT05fQ09OVFJPTF9TT1VSQ0UgKHNlbGYpKTsKKworICBnX211dGV4X2xvY2sgKHNlbGYtPmxvY2spOworICAvKiBmcmVlIEdzdENvbnRyb2xQb2ludCBzdHJ1Y3R1cmVzICovCisgIGlmIChzZWxmLT5wcml2LT52YWx1ZXMpIHsKKyAgICBnX3NlcXVlbmNlX2ZyZWUgKHNlbGYtPnByaXYtPnZhbHVlcyk7CisgICAgc2VsZi0+cHJpdi0+dmFsdWVzID0gTlVMTDsKKyAgfQorICBzZWxmLT5wcml2LT5udmFsdWVzID0gMDsKKyAgc2VsZi0+cHJpdi0+dmFsaWRfY2FjaGUgPSBGQUxTRTsKKworICBnX211dGV4X3VubG9jayAoc2VsZi0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkCitfYXBwZW5kX2NvbnRyb2xfcG9pbnQgKEdzdENvbnRyb2xQb2ludCAqIGNwLCBHTGlzdCAqKiBsKQoreworICAqbCA9IGdfbGlzdF9wcmVwZW5kICgqbCwgY3ApOworfQorCisvKioKKyAqIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2dldF9hbGw6CisgKiBAc2VsZjogdGhlICNHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSB0byBnZXQgdGhlIGxpc3QgZnJvbQorICoKKyAqIFJldHVybnMgYSByZWFkLW9ubHkgY29weSBvZiB0aGUgbGlzdCBvZiAjR3N0VGltZWRWYWx1ZSBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LgorICogRnJlZSB0aGUgbGlzdCBhZnRlciBkb25lIHdpdGggaXQuCisgKgorICogUmV0dXJuczogYSBjb3B5IG9mIHRoZSBsaXN0LCBvciAlTlVMTCBpZiB0aGUgcHJvcGVydHkgaXNuJ3QgaGFuZGxlZCBieSB0aGUgY29udHJvbGxlcgorICovCitHTGlzdCAqCitnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9nZXRfYWxsIChHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSAqIHNlbGYpCit7CisgIEdMaXN0ICpyZXMgPSBOVUxMOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfSU5URVJQT0xBVElPTl9DT05UUk9MX1NPVVJDRSAoc2VsZiksIE5VTEwpOworCisgIGdfbXV0ZXhfbG9jayAoc2VsZi0+bG9jayk7CisgIGlmIChHX0xJS0VMWSAoc2VsZi0+cHJpdi0+dmFsdWVzKSkKKyAgICBnX3NlcXVlbmNlX2ZvcmVhY2ggKHNlbGYtPnByaXYtPnZhbHVlcywgKEdGdW5jKSBfYXBwZW5kX2NvbnRyb2xfcG9pbnQsCisgICAgICAgICZyZXMpOworICBnX211dGV4X3VubG9jayAoc2VsZi0+bG9jayk7CisKKyAgcmV0dXJuIGdfbGlzdF9yZXZlcnNlIChyZXMpOworfQorCisvKioKKyAqIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2dldF9jb3VudDoKKyAqIEBzZWxmOiB0aGUgI0dzdEludGVycG9sYXRpb25Db250cm9sU291cmNlIHRvIGdldCB0aGUgbnVtYmVyIG9mIHZhbHVlcyBmcm9tCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvbnRyb2wgcG9pbnRzIHRoYXQgYXJlIHNldC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbnVtYmVyIG9mIGNvbnRyb2wgcG9pbnRzIHRoYXQgYXJlIHNldC4KKyAqCisgKi8KK2dpbnQKK2dzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2dldF9jb3VudCAoR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UgKgorICAgIHNlbGYpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfSU5URVJQT0xBVElPTl9DT05UUk9MX1NPVVJDRSAoc2VsZiksIDApOworICByZXR1cm4gc2VsZi0+cHJpdi0+bnZhbHVlczsKK30KKworCitzdGF0aWMgdm9pZAorZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfaW5pdCAoR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UgKiBzZWxmKQoreworICBzZWxmLT5sb2NrID0gZ19tdXRleF9uZXcgKCk7CisgIHNlbGYtPnByaXYgPQorICAgICAgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFIChzZWxmLCBHU1RfVFlQRV9JTlRFUlBPTEFUSU9OX0NPTlRST0xfU09VUkNFLAorICAgICAgR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2VQcml2YXRlKTsKKyAgc2VsZi0+cHJpdi0+aW50ZXJwb2xhdGlvbl9tb2RlID0gR1NUX0lOVEVSUE9MQVRFX05PTkU7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9maW5hbGl6ZSAoR09iamVjdCAqIG9iaikKK3sKKyAgR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UgKnNlbGYgPSBHU1RfSU5URVJQT0xBVElPTl9DT05UUk9MX1NPVVJDRSAob2JqKTsKKworICBnX211dGV4X2xvY2sgKHNlbGYtPmxvY2spOworICBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9yZXNldCAoc2VsZik7CisgIGdfbXV0ZXhfdW5sb2NrIChzZWxmLT5sb2NrKTsKKyAgZ19tdXRleF9mcmVlIChzZWxmLT5sb2NrKTsKKyAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmopOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfZGlzcG9zZSAoR09iamVjdCAqIG9iaikKK3sKKyAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iaik7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9jbGFzc19pbml0IChHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZUNsYXNzCisgICAgKiBrbGFzcykKK3sKKyAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKKyAgR3N0Q29udHJvbFNvdXJjZUNsYXNzICpjc291cmNlX2NsYXNzID0gR1NUX0NPTlRST0xfU09VUkNFX0NMQVNTIChrbGFzcyk7CisKKyAgcGFyZW50X2NsYXNzID0gZ190eXBlX2NsYXNzX3BlZWtfcGFyZW50IChrbGFzcyk7CisgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAoa2xhc3MsCisgICAgICBzaXplb2YgKEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlUHJpdmF0ZSkpOworCisgIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfZmluYWxpemU7CisgIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9kaXNwb3NlOworICBjc291cmNlX2NsYXNzLT5iaW5kID0gZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfYmluZDsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuaCBiL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjE0NzU1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5oCkBAIC0wLDAgKzEsMTA5IEBACisvKiBHU3RyZWFtZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorICoKKyAqIGdzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmg6IENvbnRyb2wgc291cmNlIHRoYXQgcHJvdmlkZXMgc2V2ZXJhbAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGlvbiBtZXRob2RzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0dTVF9JTlRFUlBPTEFUSU9OX0NPTlRST0xfU09VUkNFX0hfXworI2RlZmluZSBfX0dTVF9JTlRFUlBPTEFUSU9OX0NPTlRST0xfU09VUkNFX0hfXworCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKKyNpbmNsdWRlIDxnc3QvY29udHJvbGxlci9nc3Rjb250cm9sc291cmNlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBHU1RfVFlQRV9JTlRFUlBPTEFUSU9OX0NPTlRST0xfU09VUkNFIFwKKyAgKGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2dldF90eXBlICgpKQorI2RlZmluZSBHU1RfSU5URVJQT0xBVElPTl9DT05UUk9MX1NPVVJDRShvYmopIFwKKyAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfSU5URVJQT0xBVElPTl9DT05UUk9MX1NPVVJDRSwgR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UpKQorI2RlZmluZSBHU1RfSU5URVJQT0xBVElPTl9DT05UUk9MX1NPVVJDRV9DTEFTUyh2dGFibGUpIFwKKyAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgodnRhYmxlKSwgR1NUX1RZUEVfSU5URVJQT0xBVElPTl9DT05UUk9MX1NPVVJDRSwgR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2VDbGFzcykpCisjZGVmaW5lIEdTVF9JU19JTlRFUlBPTEFUSU9OX0NPTlRST0xfU09VUkNFKG9iaikgXAorICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9JTlRFUlBPTEFUSU9OX0NPTlRST0xfU09VUkNFKSkKKyNkZWZpbmUgR1NUX0lTX0lOVEVSUE9MQVRJT05fQ09OVFJPTF9TT1VSQ0VfQ0xBU1ModnRhYmxlKSBcCisgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKHZ0YWJsZSksIEdTVF9UWVBFX0lOVEVSUE9MQVRJT05fQ09OVFJPTF9TT1VSQ0UpKQorI2RlZmluZSBHU1RfSU5URVJQT0xBVElPTl9DT05UUk9MX1NPVVJDRV9HRVRfQ0xBU1MoaW5zdCkgXAorICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKGluc3QpLCBHU1RfVFlQRV9JTlRFUlBPTEFUSU9OX0NPTlRST0xfU09VUkNFLCBHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdEludGVycG9sYXRpb25Db250cm9sU291cmNlIEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlOwordHlwZWRlZiBzdHJ1Y3QgX0dzdEludGVycG9sYXRpb25Db250cm9sU291cmNlQ2xhc3MgR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2VDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZVByaXZhdGUgR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2VQcml2YXRlOworCisvKioKKyAqIEdzdEludGVycG9sYXRlTW9kZToKKyAqIEBHU1RfSU5URVJQT0xBVEVfTk9ORTogc3RlcHMtbGlrZSBpbnRlcnBvbGF0aW9uLCBkZWZhdWx0CisgKiBAR1NUX0lOVEVSUE9MQVRFX1RSSUdHRVI6IHJldHVybnMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHByb3BlcnR5LAorICogZXhjZXB0IGZvciB0aW1lcyB3aXRoIHNwZWNpZmljIHZhbHVlcworICogQEdTVF9JTlRFUlBPTEFURV9MSU5FQVI6IGxpbmVhciBpbnRlcnBvbGF0aW9uCisgKiBAR1NUX0lOVEVSUE9MQVRFX1FVQURSQVRJQzogc3F1YXJlIGludGVycG9sYXRpb24gKGRlcHJlY2F0ZWQsIG1hcHMgdG8gY3ViaWMpCisgKiBAR1NUX0lOVEVSUE9MQVRFX0NVQklDOiBjdWJpYyBpbnRlcnBvbGF0aW9uCisgKiBAR1NUX0lOVEVSUE9MQVRFX1VTRVI6IHVzZXItcHJvdmlkZWQgaW50ZXJwb2xhdGlvbiAobm90IHlldCBhdmFpbGFibGUpCisgKgorICogVGhlIHZhcmlvdXMgaW50ZXJwb2xhdGlvbiBtb2RlcyBhdmFpbGFibGUuCisgKi8KK3R5cGVkZWYgZW51bQoreworICBHU1RfSU5URVJQT0xBVEVfTk9ORSwKKyAgR1NUX0lOVEVSUE9MQVRFX1RSSUdHRVIsCisgIEdTVF9JTlRFUlBPTEFURV9MSU5FQVIsCisgIEdTVF9JTlRFUlBPTEFURV9RVUFEUkFUSUMsCisgIEdTVF9JTlRFUlBPTEFURV9DVUJJQywKKyAgR1NUX0lOVEVSUE9MQVRFX1VTRVIKK30gR3N0SW50ZXJwb2xhdGVNb2RlOworCisvKioKKyAqIEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlOgorICoKKyAqIFRoZSBpbnN0YW5jZSBzdHJ1Y3R1cmUgb2YgI0dzdENvbnRyb2xTb3VyY2UuCisgKi8KK3N0cnVjdCBfR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UgeworICBHc3RDb250cm9sU291cmNlIHBhcmVudDsKKworICAvKiA8cHJpdmF0ZT4gKi8KKyAgR011dGV4ICpsb2NrOworICBHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZVByaXZhdGUgKnByaXY7CisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOworfTsKKworc3RydWN0IF9Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZUNsYXNzIHsKKyAgR3N0Q29udHJvbFNvdXJjZUNsYXNzIHBhcmVudF9jbGFzczsKKyAgCisgIC8qPCBwcml2YXRlID4qLworICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKK307CisKK0dUeXBlIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2dldF90eXBlICh2b2lkKTsKKworLyogRnVuY3Rpb25zICovCisKK0dzdEludGVycG9sYXRpb25Db250cm9sU291cmNlICpnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKHZvaWQpOworZ2Jvb2xlYW4gZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0X2ludGVycG9sYXRpb25fbW9kZSAoR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UgKnNlbGYsIEdzdEludGVycG9sYXRlTW9kZSBtb2RlKTsKK2dib29sZWFuIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldCAoR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UgKiBzZWxmLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSk7CitnYm9vbGVhbiBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXRfZnJvbV9saXN0IChHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSAqIHNlbGYsIGNvbnN0IEdTTGlzdCAqIHRpbWVkdmFsdWVzKTsKK2dib29sZWFuIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3Vuc2V0IChHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSAqIHNlbGYsIEdzdENsb2NrVGltZSB0aW1lc3RhbXApOwordm9pZCBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV91bnNldF9hbGwgKEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlICpzZWxmKTsKK0dMaXN0ICpnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9nZXRfYWxsIChHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSAqIHNlbGYpOworZ2ludCBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9nZXRfY291bnQgKEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlICogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9JTlRFUlBPTEFUSU9OX0NPTlRST0xfU09VUkNFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZXByaXZhdGUuaCBiL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2Vwcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA1OGQxYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2Vwcml2YXRlLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qIEdTdHJlYW1lcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisgKgorICogZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2Vwcml2YXRlLmg6IFByaXZhdGUgZGVjbGFyYXRpb25zIGZvciB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19HU1RfSU5URVJQT0xBVElPTl9DT05UUk9MX1NPVVJDRV9QUklWQVRFX0hfXworI2RlZmluZSBfX0dTVF9JTlRFUlBPTEFUSU9OX0NPTlRST0xfU09VUkNFX1BSSVZBVEVfSF9fCisKKy8qKgorICogR3N0SW50ZXJwb2xhdGVNZXRob2Q6CisgKgorICogRnVuY3Rpb24gcG9pbnRlciBzdHJ1Y3R1cmUgdG8gZG8gdXNlci1kZWZpbmVkIGludGVycG9sYXRpb24gbWV0aG9kcworICovCit0eXBlZGVmIHN0cnVjdCBfR3N0SW50ZXJwb2xhdGVNZXRob2QKK3sKKyAgR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlIGdldF9pbnQ7CisgIEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5IGdldF9pbnRfdmFsdWVfYXJyYXk7CisgIEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSBnZXRfdWludDsKKyAgR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkgZ2V0X3VpbnRfdmFsdWVfYXJyYXk7CisgIEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSBnZXRfbG9uZzsKKyAgR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkgZ2V0X2xvbmdfdmFsdWVfYXJyYXk7CisgIEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSBnZXRfdWxvbmc7CisgIEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5IGdldF91bG9uZ192YWx1ZV9hcnJheTsKKyAgR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlIGdldF9pbnQ2NDsKKyAgR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkgZ2V0X2ludDY0X3ZhbHVlX2FycmF5OworICBHc3RDb250cm9sU291cmNlR2V0VmFsdWUgZ2V0X3VpbnQ2NDsKKyAgR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkgZ2V0X3VpbnQ2NF92YWx1ZV9hcnJheTsKKyAgR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlIGdldF9mbG9hdDsKKyAgR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkgZ2V0X2Zsb2F0X3ZhbHVlX2FycmF5OworICBHc3RDb250cm9sU291cmNlR2V0VmFsdWUgZ2V0X2RvdWJsZTsKKyAgR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkgZ2V0X2RvdWJsZV92YWx1ZV9hcnJheTsKKyAgR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlIGdldF9ib29sZWFuOworICBHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSBnZXRfYm9vbGVhbl92YWx1ZV9hcnJheTsKKyAgR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlIGdldF9lbnVtOworICBHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSBnZXRfZW51bV92YWx1ZV9hcnJheTsKKyAgR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlIGdldF9zdHJpbmc7CisgIEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5IGdldF9zdHJpbmdfdmFsdWVfYXJyYXk7Cit9IEdzdEludGVycG9sYXRlTWV0aG9kOworCisvKioKKyAqIEdzdENvbnRyb2xQb2ludDoKKyAqCisgKiBhIGludGVybmFsIHN0cnVjdHVyZSBmb3IgdmFsdWUrdGltZSBhbmQgdmFyaW91cyB0ZW1wb3JhcnkKKyAqIHZhbHVlcyB1c2VkIGZvciBpbnRlcnBvbGF0aW9uLiBUaGlzICJpbmhlcml0cyIgZnJvbQorICogR3N0VGltZWRWYWx1ZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX0dzdENvbnRyb2xQb2ludAoreworICAvKiBmaWVsZHMgZnJvbSBHc3RUaW1lZFZhbHVlLiBETyBOT1QgQ0hBTkdFISAqLworICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wOyAgICAgICAvKiB0aW1lc3RhbXAgb2YgdGhlIHZhbHVlIGNoYW5nZSAqLworICBHVmFsdWUgdmFsdWU7ICAgICAgICAgICAgICAgICAvKiB0aGUgbmV3IHZhbHVlICovCisKKyAgLyogaW50ZXJuYWwgZmllbGRzICovCisKKyAgLyogQ2FjaGVzIGZvciB0aGUgaW50ZXJwb2xhdG9ycyAqLworICB1bmlvbiB7CisgICAgc3RydWN0IHsKKyAgICAgIGdkb3VibGUgaDsKKyAgICAgIGdkb3VibGUgejsKKyAgICB9IGN1YmljOworICB9IGNhY2hlOworCit9IEdzdENvbnRyb2xQb2ludDsKKworc3RydWN0IF9Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZVByaXZhdGUKK3sKKyAgR1R5cGUgdHlwZTsgICAgICAgICAgICAgICAgICAgLyogdHlwZSBvZiB0aGUgaGFuZGxlZCBwcm9wZXJ0eSAqLworICBHVHlwZSBiYXNlOyAgICAgICAgICAgICAgICAgICAvKiBiYXNlLXR5cGUgb2YgdGhlIGhhbmRsZWQgcHJvcGVydHkgKi8KKworICBHVmFsdWUgZGVmYXVsdF92YWx1ZTsgICAgICAgICAvKiBkZWZhdWx0IHZhbHVlIGZvciB0aGUgaGFuZGxlZCBwcm9wZXJ0eSAqLworICBHVmFsdWUgbWluaW11bV92YWx1ZTsgICAgICAgICAvKiBtaW4gdmFsdWUgZm9yIHRoZSBoYW5kbGVkIHByb3BlcnR5ICovCisgIEdWYWx1ZSBtYXhpbXVtX3ZhbHVlOyAgICAgICAgIC8qIG1heCB2YWx1ZSBmb3IgdGhlIGhhbmRsZWQgcHJvcGVydHkgKi8KKyAgR3N0SW50ZXJwb2xhdGVNb2RlIGludGVycG9sYXRpb25fbW9kZTsKKyAgCisgIEdTZXF1ZW5jZSAqdmFsdWVzOyAgICAgICAgICAgIC8qIExpc3Qgb2YgR3N0Q29udHJvbFBvaW50ICovCisgIGdpbnQgbnZhbHVlczsgICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiBjb250cm9sIHBvaW50cyAqLworICBnYm9vbGVhbiB2YWxpZF9jYWNoZTsKK307CisKK2V4dGVybiBHc3RJbnRlcnBvbGF0ZU1ldGhvZCAqcHJpdl9nc3RfaW50ZXJwb2xhdGlvbl9tZXRob2RzW107CitleHRlcm4gZ3VpbnQgcHJpdl9nc3RfbnVtX2ludGVycG9sYXRpb25fbWV0aG9kczsKKworI2VuZGlmIC8qIF9fR1NUX0lOVEVSUE9MQVRJT05fQ09OVFJPTF9TT1VSQ0VfUFJJVkFURV9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmMgYi9saWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjcxMWIyCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9nc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmMKQEAgLTAsMCArMSwxMTU3IEBACisvKiBHU3RyZWFtZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsMjAxMCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKyAqCisgKiBnc3RsZm9jb250cm9sc291cmNlLmM6IENvbnRyb2wgc291cmNlIHRoYXQgcHJvdmlkZXMgc29tZSBwZXJpb2RpYyB3YXZlZm9ybXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgYXMgY29udHJvbCB2YWx1ZXMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoqCisgKiBTRUNUSU9OOmdzdGxmb2NvbnRyb2xzb3VyY2UKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogTEZPIGNvbnRyb2wgc291cmNlCisgKgorICogI0dzdExGT0NvbnRyb2xTb3VyY2UgaXMgYSAjR3N0Q29udHJvbFNvdXJjZSwgdGhhdCBwcm92aWRlcyBzZXZlcmFsIHBlcmlvZGljIHdhdmVmb3JtcworICogYXMgY29udHJvbCB2YWx1ZXMuIEl0IHN1cHBvcnRzIGFsbCBmdW5kYW1lbnRhbCwgbnVtZXJpYyBHVmFsdWUgdHlwZXMgYXMgcHJvcGVydHkuCisgKgorICogVG8gdXNlICNHc3RMRk9Db250cm9sU291cmNlIGdldCBhIG5ldyBpbnN0YW5jZSBieSBjYWxsaW5nIGdzdF9sZm9fY29udHJvbF9zb3VyY2VfbmV3KCksCisgKiBiaW5kIGl0IHRvIGEgI0dQYXJhbVNwZWMgYW5kIHNldCB0aGUgcmVsZXZhbnQgcHJvcGVydGllcyBvciB1c2UKKyAqIGdzdF9sZm9fY29udHJvbF9zb3VyY2Vfc2V0X3dhdmVmb3JtLgorICoKKyAqIEFsbCBmdW5jdGlvbnMgYXJlIE1ULXNhZmUuCisgKgorICovCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworI2luY2x1ZGUgImdzdGNvbnRyb2xzb3VyY2UuaCIKKyNpbmNsdWRlICJnc3RsZm9jb250cm9sc291cmNlLmgiCisjaW5jbHVkZSAiZ3N0bGZvY29udHJvbHNvdXJjZXByaXZhdGUuaCIKKworI2luY2x1ZGUgPGdzdC9tYXRoLWNvbXBhdC5oPgorCisjZGVmaW5lIEVNUFRZKHgpICh4KQorCisvKiBGSVhNRTogYXMgJSBpbiBDIGlzIG5vdCB0aGUgbW9kdWxvIG9wZXJhdG9yIHdlIG5lZWQgaGVyZSBmb3IKKyAqIG5lZ2F0aXZlIG51bWJlcnMgaW1wbGVtZW50IG91ciBvd24uIEFyZSB0aGVyZSBiZXR0ZXIgd2F5cz8gKi8KK3N0YXRpYyBpbmxpbmUgR3N0Q2xvY2tUaW1lCitfY2FsY3VsYXRlX3BvcyAoR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgR3N0Q2xvY2tUaW1lIHRpbWVzaGlmdCwKKyAgICBHc3RDbG9ja1RpbWUgcGVyaW9kKQoreworICB3aGlsZSAodGltZXN0YW1wIDwgdGltZXNoaWZ0KQorICAgIHRpbWVzdGFtcCArPSBwZXJpb2Q7CisKKyAgdGltZXN0YW1wIC09IHRpbWVzaGlmdDsKKworICByZXR1cm4gdGltZXN0YW1wICUgcGVyaW9kOworfQorCisjZGVmaW5lIERFRklORV9TSU5FKHR5cGUscm91bmQsY29udmVydCkgXAorc3RhdGljIGlubGluZSBnIyN0eXBlIFwKK19zaW5lX2dldF8jI3R5cGUgKEdzdExGT0NvbnRyb2xTb3VyY2UgKnNlbGYsIGcjI3R5cGUgbWF4LCBnIyN0eXBlIG1pbiwgZ2RvdWJsZSBhbXAsIGdkb3VibGUgb2ZmLCBHc3RDbG9ja1RpbWUgdGltZXNoaWZ0LCBHc3RDbG9ja1RpbWUgcGVyaW9kLCBnZG91YmxlIGZyZXF1ZW5jeSwgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCkgXAoreyBcCisgIGdkb3VibGUgcmV0OyBcCisgIEdzdENsb2NrVGltZSBwb3MgPSBfY2FsY3VsYXRlX3BvcyAodGltZXN0YW1wLCB0aW1lc2hpZnQsIHBlcmlvZCk7IFwKKyAgXAorICByZXQgPSBzaW4gKDIuMCAqIE1fUEkgKiAoZnJlcXVlbmN5IC8gR1NUX1NFQ09ORCkgKiBnc3RfZ3VpbnQ2NF90b19nZG91YmxlIChwb3MpKTsgXAorICByZXQgKj0gYW1wOyBcCisgIHJldCArPSBvZmY7IFwKKyAgXAorICBpZiAocm91bmQpIFwKKyAgICByZXQgKz0gMC41OyBcCisgIFwKKyAgcmV0dXJuIChnIyN0eXBlKSBDTEFNUCAocmV0LCBjb252ZXJ0IChtaW4pLCBjb252ZXJ0IChtYXgpKTsgXAorfSBcCitcCitzdGF0aWMgZ2Jvb2xlYW4gXAord2F2ZWZvcm1fc2luZV9nZXRfIyN0eXBlIChHc3RMRk9Db250cm9sU291cmNlICpzZWxmLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBcCisgICAgR1ZhbHVlICp2YWx1ZSkgXAoreyBcCisgIGcjI3R5cGUgcmV0LCBtYXgsIG1pbjsgXAorICBnZG91YmxlIGFtcCwgb2ZmLCBmcmVxdWVuY3k7IFwKKyAgR3N0Q2xvY2tUaW1lIHRpbWVzaGlmdCwgcGVyaW9kOyBcCisgIFwKKyAgZ19tdXRleF9sb2NrIChzZWxmLT5sb2NrKTsgXAorICBtYXggPSBnX3ZhbHVlX2dldF8jI3R5cGUgKCZzZWxmLT5wcml2LT5tYXhpbXVtX3ZhbHVlKTsgXAorICBtaW4gPSBnX3ZhbHVlX2dldF8jI3R5cGUgKCZzZWxmLT5wcml2LT5taW5pbXVtX3ZhbHVlKTsgXAorICBhbXAgPSBjb252ZXJ0IChnX3ZhbHVlX2dldF8jI3R5cGUgKCZzZWxmLT5wcml2LT5hbXBsaXR1ZGUpKTsgXAorICBvZmYgPSBjb252ZXJ0IChnX3ZhbHVlX2dldF8jI3R5cGUgKCZzZWxmLT5wcml2LT5vZmZzZXQpKTsgXAorICB0aW1lc2hpZnQgPSBzZWxmLT5wcml2LT50aW1lc2hpZnQ7IFwKKyAgcGVyaW9kID0gc2VsZi0+cHJpdi0+cGVyaW9kOyBcCisgIGZyZXF1ZW5jeSA9IHNlbGYtPnByaXYtPmZyZXF1ZW5jeTsgXAorICBcCisgIHJldCA9IF9zaW5lX2dldF8jI3R5cGUgKHNlbGYsIG1heCwgbWluLCBhbXAsIG9mZiwgdGltZXNoaWZ0LCBwZXJpb2QsIGZyZXF1ZW5jeSwgdGltZXN0YW1wKTsgXAorICBnX3ZhbHVlX3NldF8jI3R5cGUgKHZhbHVlLCByZXQpOyBcCisgIGdfbXV0ZXhfdW5sb2NrIChzZWxmLT5sb2NrKTsgXAorICByZXR1cm4gVFJVRTsgXAorfSBcCitcCitzdGF0aWMgZ2Jvb2xlYW4gXAord2F2ZWZvcm1fc2luZV9nZXRfIyN0eXBlIyNfdmFsdWVfYXJyYXkgKEdzdExGT0NvbnRyb2xTb3VyY2UgKnNlbGYsIFwKKyAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdzdFZhbHVlQXJyYXkgKiB2YWx1ZV9hcnJheSkgXAoreyBcCisgIGdpbnQgaTsgXAorICBHc3RDbG9ja1RpbWUgdHMgPSB0aW1lc3RhbXA7IFwKKyAgZyMjdHlwZSAqdmFsdWVzID0gKGcjI3R5cGUgKikgdmFsdWVfYXJyYXktPnZhbHVlczsgXAorICBnIyN0eXBlIG1heCwgbWluOyBcCisgIGdkb3VibGUgYW1wLCBvZmYsIGZyZXF1ZW5jeTsgXAorICBHc3RDbG9ja1RpbWUgdGltZXNoaWZ0LCBwZXJpb2Q7IFwKKyAgXAorICBnX211dGV4X2xvY2sgKHNlbGYtPmxvY2spOyBcCisgIG1heCA9IGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPm1heGltdW1fdmFsdWUpOyBcCisgIG1pbiA9IGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPm1pbmltdW1fdmFsdWUpOyBcCisgIGFtcCA9IGNvbnZlcnQgKGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPmFtcGxpdHVkZSkpOyBcCisgIG9mZiA9IGNvbnZlcnQgKGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPm9mZnNldCkpOyBcCisgIHRpbWVzaGlmdCA9IHNlbGYtPnByaXYtPnRpbWVzaGlmdDsgXAorICBwZXJpb2QgPSBzZWxmLT5wcml2LT5wZXJpb2Q7IFwKKyAgZnJlcXVlbmN5ID0gc2VsZi0+cHJpdi0+ZnJlcXVlbmN5OyBcCisgIFwKKyAgZm9yKGkgPSAwOyBpIDwgdmFsdWVfYXJyYXktPm5ic2FtcGxlczsgaSsrKSB7IFwKKyAgICAqdmFsdWVzID0gX3NpbmVfZ2V0XyMjdHlwZSAoc2VsZiwgbWF4LCBtaW4sIGFtcCwgb2ZmLCB0aW1lc2hpZnQsIHBlcmlvZCwgZnJlcXVlbmN5LCB0cyk7IFwKKyAgICB0cyArPSB2YWx1ZV9hcnJheS0+c2FtcGxlX2ludGVydmFsOyBcCisgICAgdmFsdWVzKys7IFwKKyAgfSBcCisgIGdfbXV0ZXhfdW5sb2NrIChzZWxmLT5sb2NrKTsgXAorICByZXR1cm4gVFJVRTsgXAorfQorCitERUZJTkVfU0lORSAoaW50LCBUUlVFLCBFTVBUWSk7CitERUZJTkVfU0lORSAodWludCwgVFJVRSwgRU1QVFkpOworREVGSU5FX1NJTkUgKGxvbmcsIFRSVUUsIEVNUFRZKTsKK0RFRklORV9TSU5FICh1bG9uZywgVFJVRSwgRU1QVFkpOworREVGSU5FX1NJTkUgKGludDY0LCBUUlVFLCBFTVBUWSk7CitERUZJTkVfU0lORSAodWludDY0LCBUUlVFLCBnc3RfZ3VpbnQ2NF90b19nZG91YmxlKTsKK0RFRklORV9TSU5FIChmbG9hdCwgRkFMU0UsIEVNUFRZKTsKK0RFRklORV9TSU5FIChkb3VibGUsIEZBTFNFLCBFTVBUWSk7CisKK3N0YXRpYyBHc3RXYXZlZm9ybUltcGxlbWVudGF0aW9uIHdhdmVmb3JtX3NpbmUgPSB7CisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIHdhdmVmb3JtX3NpbmVfZ2V0X2ludCwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSB3YXZlZm9ybV9zaW5lX2dldF9pbnRfdmFsdWVfYXJyYXksCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIHdhdmVmb3JtX3NpbmVfZ2V0X3VpbnQsCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgd2F2ZWZvcm1fc2luZV9nZXRfdWludF92YWx1ZV9hcnJheSwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgd2F2ZWZvcm1fc2luZV9nZXRfbG9uZywKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSB3YXZlZm9ybV9zaW5lX2dldF9sb25nX3ZhbHVlX2FycmF5LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSB3YXZlZm9ybV9zaW5lX2dldF91bG9uZywKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSB3YXZlZm9ybV9zaW5lX2dldF91bG9uZ192YWx1ZV9hcnJheSwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgd2F2ZWZvcm1fc2luZV9nZXRfaW50NjQsCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgd2F2ZWZvcm1fc2luZV9nZXRfaW50NjRfdmFsdWVfYXJyYXksCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIHdhdmVmb3JtX3NpbmVfZ2V0X3VpbnQ2NCwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSB3YXZlZm9ybV9zaW5lX2dldF91aW50NjRfdmFsdWVfYXJyYXksCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIHdhdmVmb3JtX3NpbmVfZ2V0X2Zsb2F0LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkpIHdhdmVmb3JtX3NpbmVfZ2V0X2Zsb2F0X3ZhbHVlX2FycmF5LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSB3YXZlZm9ybV9zaW5lX2dldF9kb3VibGUsCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgd2F2ZWZvcm1fc2luZV9nZXRfZG91YmxlX3ZhbHVlX2FycmF5Cit9OworCisjZGVmaW5lIERFRklORV9TUVVBUkUodHlwZSxyb3VuZCwgY29udmVydCkgXAorXAorc3RhdGljIGlubGluZSBnIyN0eXBlIFwKK19zcXVhcmVfZ2V0XyMjdHlwZSAoR3N0TEZPQ29udHJvbFNvdXJjZSAqc2VsZiwgZyMjdHlwZSBtYXgsIGcjI3R5cGUgbWluLCBnZG91YmxlIGFtcCwgZ2RvdWJsZSBvZmYsIEdzdENsb2NrVGltZSB0aW1lc2hpZnQsIEdzdENsb2NrVGltZSBwZXJpb2QsIGdkb3VibGUgZnJlcXVlbmN5LCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKSBcCit7IFwKKyAgR3N0Q2xvY2tUaW1lIHBvcyA9IF9jYWxjdWxhdGVfcG9zICh0aW1lc3RhbXAsIHRpbWVzaGlmdCwgcGVyaW9kKTsgXAorICBnZG91YmxlIHJldDsgXAorICBcCisgIGlmIChwb3MgPj0gcGVyaW9kIC8gMikgXAorICAgIHJldCA9IGFtcDsgXAorICBlbHNlIFwKKyAgICByZXQgPSAtIGFtcDsgXAorICBcCisgIHJldCArPSBvZmY7IFwKKyAgXAorICBpZiAocm91bmQpIFwKKyAgICByZXQgKz0gMC41OyBcCisgIFwKKyAgcmV0dXJuIChnIyN0eXBlKSBDTEFNUCAocmV0LCBjb252ZXJ0IChtaW4pLCBjb252ZXJ0IChtYXgpKTsgXAorfSBcCitcCitzdGF0aWMgZ2Jvb2xlYW4gXAord2F2ZWZvcm1fc3F1YXJlX2dldF8jI3R5cGUgKEdzdExGT0NvbnRyb2xTb3VyY2UgKnNlbGYsIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIFwKKyAgICBHVmFsdWUgKnZhbHVlKSBcCit7IFwKKyAgZyMjdHlwZSByZXQsIG1heCwgbWluOyBcCisgIGdkb3VibGUgYW1wLCBvZmYsIGZyZXF1ZW5jeTsgXAorICBHc3RDbG9ja1RpbWUgdGltZXNoaWZ0LCBwZXJpb2Q7IFwKKyAgXAorICBnX211dGV4X2xvY2sgKHNlbGYtPmxvY2spOyBcCisgIG1heCA9IGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPm1heGltdW1fdmFsdWUpOyBcCisgIG1pbiA9IGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPm1pbmltdW1fdmFsdWUpOyBcCisgIGFtcCA9IGNvbnZlcnQgKGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPmFtcGxpdHVkZSkpOyBcCisgIG9mZiA9IGNvbnZlcnQgKGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPm9mZnNldCkpOyBcCisgIHRpbWVzaGlmdCA9IHNlbGYtPnByaXYtPnRpbWVzaGlmdDsgXAorICBwZXJpb2QgPSBzZWxmLT5wcml2LT5wZXJpb2Q7IFwKKyAgZnJlcXVlbmN5ID0gc2VsZi0+cHJpdi0+ZnJlcXVlbmN5OyBcCisgIFwKKyAgcmV0ID0gX3NxdWFyZV9nZXRfIyN0eXBlIChzZWxmLCBtYXgsIG1pbiwgYW1wLCBvZmYsIHRpbWVzaGlmdCwgcGVyaW9kLCBmcmVxdWVuY3ksIHRpbWVzdGFtcCk7IFwKKyAgZ192YWx1ZV9zZXRfIyN0eXBlICh2YWx1ZSwgcmV0KTsgXAorICBnX211dGV4X3VubG9jayAoc2VsZi0+bG9jayk7IFwKKyAgcmV0dXJuIFRSVUU7IFwKK30gXAorXAorc3RhdGljIGdib29sZWFuIFwKK3dhdmVmb3JtX3NxdWFyZV9nZXRfIyN0eXBlIyNfdmFsdWVfYXJyYXkgKEdzdExGT0NvbnRyb2xTb3VyY2UgKnNlbGYsIFwKKyAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdzdFZhbHVlQXJyYXkgKiB2YWx1ZV9hcnJheSkgXAoreyBcCisgIGdpbnQgaTsgXAorICBHc3RDbG9ja1RpbWUgdHMgPSB0aW1lc3RhbXA7IFwKKyAgZyMjdHlwZSAqdmFsdWVzID0gKGcjI3R5cGUgKikgdmFsdWVfYXJyYXktPnZhbHVlczsgXAorICBnIyN0eXBlIG1heCwgbWluOyBcCisgIGdkb3VibGUgYW1wLCBvZmYsIGZyZXF1ZW5jeTsgXAorICBHc3RDbG9ja1RpbWUgdGltZXNoaWZ0LCBwZXJpb2Q7IFwKKyAgXAorICBnX211dGV4X2xvY2sgKHNlbGYtPmxvY2spOyBcCisgIG1heCA9IGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPm1heGltdW1fdmFsdWUpOyBcCisgIG1pbiA9IGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPm1pbmltdW1fdmFsdWUpOyBcCisgIGFtcCA9IGNvbnZlcnQgKGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPmFtcGxpdHVkZSkpOyBcCisgIG9mZiA9IGNvbnZlcnQgKGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPm9mZnNldCkpOyBcCisgIHRpbWVzaGlmdCA9IHNlbGYtPnByaXYtPnRpbWVzaGlmdDsgXAorICBwZXJpb2QgPSBzZWxmLT5wcml2LT5wZXJpb2Q7IFwKKyAgZnJlcXVlbmN5ID0gc2VsZi0+cHJpdi0+ZnJlcXVlbmN5OyBcCisgIFwKKyAgZm9yKGkgPSAwOyBpIDwgdmFsdWVfYXJyYXktPm5ic2FtcGxlczsgaSsrKSB7IFwKKyAgICAqdmFsdWVzID0gX3NxdWFyZV9nZXRfIyN0eXBlIChzZWxmLCBtYXgsIG1pbiwgYW1wLCBvZmYsIHRpbWVzaGlmdCwgcGVyaW9kLCBmcmVxdWVuY3ksIHRzKTsgXAorICAgIHRzICs9IHZhbHVlX2FycmF5LT5zYW1wbGVfaW50ZXJ2YWw7IFwKKyAgICB2YWx1ZXMrKzsgXAorICB9IFwKKyAgZ19tdXRleF91bmxvY2sgKHNlbGYtPmxvY2spOyBcCisgIHJldHVybiBUUlVFOyBcCit9CisKK0RFRklORV9TUVVBUkUgKGludCwgVFJVRSwgRU1QVFkpOworREVGSU5FX1NRVUFSRSAodWludCwgVFJVRSwgRU1QVFkpOworREVGSU5FX1NRVUFSRSAobG9uZywgVFJVRSwgRU1QVFkpOworREVGSU5FX1NRVUFSRSAodWxvbmcsIFRSVUUsIEVNUFRZKTsKK0RFRklORV9TUVVBUkUgKGludDY0LCBUUlVFLCBFTVBUWSk7CitERUZJTkVfU1FVQVJFICh1aW50NjQsIFRSVUUsIGdzdF9ndWludDY0X3RvX2dkb3VibGUpOworREVGSU5FX1NRVUFSRSAoZmxvYXQsIEZBTFNFLCBFTVBUWSk7CitERUZJTkVfU1FVQVJFIChkb3VibGUsIEZBTFNFLCBFTVBUWSk7CisKK3N0YXRpYyBHc3RXYXZlZm9ybUltcGxlbWVudGF0aW9uIHdhdmVmb3JtX3NxdWFyZSA9IHsKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgd2F2ZWZvcm1fc3F1YXJlX2dldF9pbnQsCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgd2F2ZWZvcm1fc3F1YXJlX2dldF9pbnRfdmFsdWVfYXJyYXksCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIHdhdmVmb3JtX3NxdWFyZV9nZXRfdWludCwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSB3YXZlZm9ybV9zcXVhcmVfZ2V0X3VpbnRfdmFsdWVfYXJyYXksCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIHdhdmVmb3JtX3NxdWFyZV9nZXRfbG9uZywKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSB3YXZlZm9ybV9zcXVhcmVfZ2V0X2xvbmdfdmFsdWVfYXJyYXksCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIHdhdmVmb3JtX3NxdWFyZV9nZXRfdWxvbmcsCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgd2F2ZWZvcm1fc3F1YXJlX2dldF91bG9uZ192YWx1ZV9hcnJheSwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgd2F2ZWZvcm1fc3F1YXJlX2dldF9pbnQ2NCwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSB3YXZlZm9ybV9zcXVhcmVfZ2V0X2ludDY0X3ZhbHVlX2FycmF5LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSB3YXZlZm9ybV9zcXVhcmVfZ2V0X3VpbnQ2NCwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSB3YXZlZm9ybV9zcXVhcmVfZ2V0X3VpbnQ2NF92YWx1ZV9hcnJheSwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgd2F2ZWZvcm1fc3F1YXJlX2dldF9mbG9hdCwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSB3YXZlZm9ybV9zcXVhcmVfZ2V0X2Zsb2F0X3ZhbHVlX2FycmF5LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSB3YXZlZm9ybV9zcXVhcmVfZ2V0X2RvdWJsZSwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSB3YXZlZm9ybV9zcXVhcmVfZ2V0X2RvdWJsZV92YWx1ZV9hcnJheQorfTsKKworI2RlZmluZSBERUZJTkVfU0FXKHR5cGUscm91bmQsY29udmVydCkgXAorXAorc3RhdGljIGlubGluZSBnIyN0eXBlIFwKK19zYXdfZ2V0XyMjdHlwZSAoR3N0TEZPQ29udHJvbFNvdXJjZSAqc2VsZiwgZyMjdHlwZSBtYXgsIGcjI3R5cGUgbWluLCBnZG91YmxlIGFtcCwgZ2RvdWJsZSBvZmYsIEdzdENsb2NrVGltZSB0aW1lc2hpZnQsIEdzdENsb2NrVGltZSBwZXJpb2QsIGdkb3VibGUgZnJlcXVlbmN5LCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKSBcCit7IFwKKyAgR3N0Q2xvY2tUaW1lIHBvcyA9IF9jYWxjdWxhdGVfcG9zICh0aW1lc3RhbXAsIHRpbWVzaGlmdCwgcGVyaW9kKTsgXAorICBnZG91YmxlIHJldDsgXAorICBcCisgIHJldCA9IC0gKChnc3RfZ3VpbnQ2NF90b19nZG91YmxlIChwb3MpIC0gZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSAocGVyaW9kKSAvIDIuMCkgKiAoKDIuMCAqIGFtcCkgLyBnc3RfZ3VpbnQ2NF90b19nZG91YmxlIChwZXJpb2QpKSk7XAorICBcCisgIHJldCArPSBvZmY7IFwKKyAgXAorICBpZiAocm91bmQpIFwKKyAgICByZXQgKz0gMC41OyBcCisgIFwKKyAgcmV0dXJuIChnIyN0eXBlKSBDTEFNUCAocmV0LCBjb252ZXJ0IChtaW4pLCBjb252ZXJ0IChtYXgpKTsgXAorfSBcCitcCitzdGF0aWMgZ2Jvb2xlYW4gXAord2F2ZWZvcm1fc2F3X2dldF8jI3R5cGUgKEdzdExGT0NvbnRyb2xTb3VyY2UgKnNlbGYsIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIFwKKyAgICBHVmFsdWUgKnZhbHVlKSBcCit7IFwKKyAgZyMjdHlwZSByZXQsIG1heCwgbWluOyBcCisgIGdkb3VibGUgYW1wLCBvZmYsIGZyZXF1ZW5jeTsgXAorICBHc3RDbG9ja1RpbWUgdGltZXNoaWZ0LCBwZXJpb2Q7IFwKKyAgXAorICBnX211dGV4X2xvY2sgKHNlbGYtPmxvY2spOyBcCisgIG1heCA9IGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPm1heGltdW1fdmFsdWUpOyBcCisgIG1pbiA9IGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPm1pbmltdW1fdmFsdWUpOyBcCisgIGFtcCA9IGNvbnZlcnQgKGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPmFtcGxpdHVkZSkpOyBcCisgIG9mZiA9IGNvbnZlcnQgKGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPm9mZnNldCkpOyBcCisgIHRpbWVzaGlmdCA9IHNlbGYtPnByaXYtPnRpbWVzaGlmdDsgXAorICBwZXJpb2QgPSBzZWxmLT5wcml2LT5wZXJpb2Q7IFwKKyAgZnJlcXVlbmN5ID0gc2VsZi0+cHJpdi0+ZnJlcXVlbmN5OyBcCisgIFwKKyAgcmV0ID0gX3Nhd19nZXRfIyN0eXBlIChzZWxmLCBtYXgsIG1pbiwgYW1wLCBvZmYsIHRpbWVzaGlmdCwgcGVyaW9kLCBmcmVxdWVuY3ksIHRpbWVzdGFtcCk7IFwKKyAgZ192YWx1ZV9zZXRfIyN0eXBlICh2YWx1ZSwgcmV0KTsgXAorICBnX211dGV4X3VubG9jayAoc2VsZi0+bG9jayk7IFwKKyAgcmV0dXJuIFRSVUU7IFwKK30gXAorXAorc3RhdGljIGdib29sZWFuIFwKK3dhdmVmb3JtX3Nhd19nZXRfIyN0eXBlIyNfdmFsdWVfYXJyYXkgKEdzdExGT0NvbnRyb2xTb3VyY2UgKnNlbGYsIFwKKyAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdzdFZhbHVlQXJyYXkgKiB2YWx1ZV9hcnJheSkgXAoreyBcCisgIGdpbnQgaTsgXAorICBHc3RDbG9ja1RpbWUgdHMgPSB0aW1lc3RhbXA7IFwKKyAgZyMjdHlwZSAqdmFsdWVzID0gKGcjI3R5cGUgKikgdmFsdWVfYXJyYXktPnZhbHVlczsgXAorICBnIyN0eXBlIG1heCwgbWluOyBcCisgIGdkb3VibGUgYW1wLCBvZmYsIGZyZXF1ZW5jeTsgXAorICBHc3RDbG9ja1RpbWUgdGltZXNoaWZ0LCBwZXJpb2Q7IFwKKyAgXAorICBnX211dGV4X2xvY2sgKHNlbGYtPmxvY2spOyBcCisgIG1heCA9IGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPm1heGltdW1fdmFsdWUpOyBcCisgIG1pbiA9IGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPm1pbmltdW1fdmFsdWUpOyBcCisgIGFtcCA9IGNvbnZlcnQgKGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPmFtcGxpdHVkZSkpOyBcCisgIG9mZiA9IGNvbnZlcnQgKGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPm9mZnNldCkpOyBcCisgIHRpbWVzaGlmdCA9IHNlbGYtPnByaXYtPnRpbWVzaGlmdDsgXAorICBwZXJpb2QgPSBzZWxmLT5wcml2LT5wZXJpb2Q7IFwKKyAgZnJlcXVlbmN5ID0gc2VsZi0+cHJpdi0+ZnJlcXVlbmN5OyBcCisgIFwKKyAgZm9yKGkgPSAwOyBpIDwgdmFsdWVfYXJyYXktPm5ic2FtcGxlczsgaSsrKSB7IFwKKyAgICAqdmFsdWVzID0gX3Nhd19nZXRfIyN0eXBlIChzZWxmLCBtYXgsIG1pbiwgYW1wLCBvZmYsIHRpbWVzaGlmdCwgcGVyaW9kLCBmcmVxdWVuY3ksIHRzKTsgXAorICAgIHRzICs9IHZhbHVlX2FycmF5LT5zYW1wbGVfaW50ZXJ2YWw7IFwKKyAgICB2YWx1ZXMrKzsgXAorICB9IFwKKyAgZ19tdXRleF91bmxvY2sgKHNlbGYtPmxvY2spOyBcCisgIHJldHVybiBUUlVFOyBcCit9CisKK0RFRklORV9TQVcgKGludCwgVFJVRSwgRU1QVFkpOworREVGSU5FX1NBVyAodWludCwgVFJVRSwgRU1QVFkpOworREVGSU5FX1NBVyAobG9uZywgVFJVRSwgRU1QVFkpOworREVGSU5FX1NBVyAodWxvbmcsIFRSVUUsIEVNUFRZKTsKK0RFRklORV9TQVcgKGludDY0LCBUUlVFLCBFTVBUWSk7CitERUZJTkVfU0FXICh1aW50NjQsIFRSVUUsIGdzdF9ndWludDY0X3RvX2dkb3VibGUpOworREVGSU5FX1NBVyAoZmxvYXQsIEZBTFNFLCBFTVBUWSk7CitERUZJTkVfU0FXIChkb3VibGUsIEZBTFNFLCBFTVBUWSk7CisKK3N0YXRpYyBHc3RXYXZlZm9ybUltcGxlbWVudGF0aW9uIHdhdmVmb3JtX3NhdyA9IHsKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgd2F2ZWZvcm1fc2F3X2dldF9pbnQsCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgd2F2ZWZvcm1fc2F3X2dldF9pbnRfdmFsdWVfYXJyYXksCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIHdhdmVmb3JtX3Nhd19nZXRfdWludCwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSB3YXZlZm9ybV9zYXdfZ2V0X3VpbnRfdmFsdWVfYXJyYXksCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIHdhdmVmb3JtX3Nhd19nZXRfbG9uZywKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSB3YXZlZm9ybV9zYXdfZ2V0X2xvbmdfdmFsdWVfYXJyYXksCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIHdhdmVmb3JtX3Nhd19nZXRfdWxvbmcsCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgd2F2ZWZvcm1fc2F3X2dldF91bG9uZ192YWx1ZV9hcnJheSwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgd2F2ZWZvcm1fc2F3X2dldF9pbnQ2NCwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSB3YXZlZm9ybV9zYXdfZ2V0X2ludDY0X3ZhbHVlX2FycmF5LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSB3YXZlZm9ybV9zYXdfZ2V0X3VpbnQ2NCwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSB3YXZlZm9ybV9zYXdfZ2V0X3VpbnQ2NF92YWx1ZV9hcnJheSwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgd2F2ZWZvcm1fc2F3X2dldF9mbG9hdCwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSB3YXZlZm9ybV9zYXdfZ2V0X2Zsb2F0X3ZhbHVlX2FycmF5LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSB3YXZlZm9ybV9zYXdfZ2V0X2RvdWJsZSwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSB3YXZlZm9ybV9zYXdfZ2V0X2RvdWJsZV92YWx1ZV9hcnJheQorfTsKKworI2RlZmluZSBERUZJTkVfUlNBVyh0eXBlLHJvdW5kLGNvbnZlcnQpIFwKK1wKK3N0YXRpYyBpbmxpbmUgZyMjdHlwZSBcCitfcnNhd19nZXRfIyN0eXBlIChHc3RMRk9Db250cm9sU291cmNlICpzZWxmLCBnIyN0eXBlIG1heCwgZyMjdHlwZSBtaW4sIGdkb3VibGUgYW1wLCBnZG91YmxlIG9mZiwgR3N0Q2xvY2tUaW1lIHRpbWVzaGlmdCwgR3N0Q2xvY2tUaW1lIHBlcmlvZCwgZ2RvdWJsZSBmcmVxdWVuY3ksIEdzdENsb2NrVGltZSB0aW1lc3RhbXApIFwKK3sgXAorICBHc3RDbG9ja1RpbWUgcG9zID0gX2NhbGN1bGF0ZV9wb3MgKHRpbWVzdGFtcCwgdGltZXNoaWZ0LCBwZXJpb2QpOyBcCisgIGdkb3VibGUgcmV0OyBcCisgIFwKKyAgcmV0ID0gKChnc3RfZ3VpbnQ2NF90b19nZG91YmxlIChwb3MpIC0gZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSAocGVyaW9kKSAvIDIuMCkgKiAoKDIuMCAqIGFtcCkgLyBnc3RfZ3VpbnQ2NF90b19nZG91YmxlIChwZXJpb2QpKSk7XAorICBcCisgIHJldCArPSBvZmY7IFwKKyAgXAorICBpZiAocm91bmQpIFwKKyAgICByZXQgKz0gMC41OyBcCisgIFwKKyAgcmV0dXJuIChnIyN0eXBlKSBDTEFNUCAocmV0LCBjb252ZXJ0IChtaW4pLCBjb252ZXJ0IChtYXgpKTsgXAorfSBcCitcCitzdGF0aWMgZ2Jvb2xlYW4gXAord2F2ZWZvcm1fcnNhd19nZXRfIyN0eXBlIChHc3RMRk9Db250cm9sU291cmNlICpzZWxmLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBcCisgICAgR1ZhbHVlICp2YWx1ZSkgXAoreyBcCisgIGcjI3R5cGUgcmV0LCBtYXgsIG1pbjsgXAorICBnZG91YmxlIGFtcCwgb2ZmLCBmcmVxdWVuY3k7IFwKKyAgR3N0Q2xvY2tUaW1lIHRpbWVzaGlmdCwgcGVyaW9kOyBcCisgIFwKKyAgZ19tdXRleF9sb2NrIChzZWxmLT5sb2NrKTsgXAorICBtYXggPSBnX3ZhbHVlX2dldF8jI3R5cGUgKCZzZWxmLT5wcml2LT5tYXhpbXVtX3ZhbHVlKTsgXAorICBtaW4gPSBnX3ZhbHVlX2dldF8jI3R5cGUgKCZzZWxmLT5wcml2LT5taW5pbXVtX3ZhbHVlKTsgXAorICBhbXAgPSBjb252ZXJ0IChnX3ZhbHVlX2dldF8jI3R5cGUgKCZzZWxmLT5wcml2LT5hbXBsaXR1ZGUpKTsgXAorICBvZmYgPSBjb252ZXJ0IChnX3ZhbHVlX2dldF8jI3R5cGUgKCZzZWxmLT5wcml2LT5vZmZzZXQpKTsgXAorICB0aW1lc2hpZnQgPSBzZWxmLT5wcml2LT50aW1lc2hpZnQ7IFwKKyAgcGVyaW9kID0gc2VsZi0+cHJpdi0+cGVyaW9kOyBcCisgIGZyZXF1ZW5jeSA9IHNlbGYtPnByaXYtPmZyZXF1ZW5jeTsgXAorICBcCisgIHJldCA9IF9yc2F3X2dldF8jI3R5cGUgKHNlbGYsIG1heCwgbWluLCBhbXAsIG9mZiwgdGltZXNoaWZ0LCBwZXJpb2QsIGZyZXF1ZW5jeSwgdGltZXN0YW1wKTsgXAorICBnX3ZhbHVlX3NldF8jI3R5cGUgKHZhbHVlLCByZXQpOyBcCisgIGdfbXV0ZXhfdW5sb2NrIChzZWxmLT5sb2NrKTsgXAorICByZXR1cm4gVFJVRTsgXAorfSBcCitcCitzdGF0aWMgZ2Jvb2xlYW4gXAord2F2ZWZvcm1fcnNhd19nZXRfIyN0eXBlIyNfdmFsdWVfYXJyYXkgKEdzdExGT0NvbnRyb2xTb3VyY2UgKnNlbGYsIFwKKyAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdzdFZhbHVlQXJyYXkgKiB2YWx1ZV9hcnJheSkgXAoreyBcCisgIGdpbnQgaTsgXAorICBHc3RDbG9ja1RpbWUgdHMgPSB0aW1lc3RhbXA7IFwKKyAgZyMjdHlwZSAqdmFsdWVzID0gKGcjI3R5cGUgKikgdmFsdWVfYXJyYXktPnZhbHVlczsgXAorICBnIyN0eXBlIG1heCwgbWluOyBcCisgIGdkb3VibGUgYW1wLCBvZmYsIGZyZXF1ZW5jeTsgXAorICBHc3RDbG9ja1RpbWUgdGltZXNoaWZ0LCBwZXJpb2Q7IFwKKyAgXAorICBnX211dGV4X2xvY2sgKHNlbGYtPmxvY2spOyBcCisgIG1heCA9IGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPm1heGltdW1fdmFsdWUpOyBcCisgIG1pbiA9IGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPm1pbmltdW1fdmFsdWUpOyBcCisgIGFtcCA9IGNvbnZlcnQgKGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPmFtcGxpdHVkZSkpOyBcCisgIG9mZiA9IGNvbnZlcnQgKGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPm9mZnNldCkpOyBcCisgIHRpbWVzaGlmdCA9IHNlbGYtPnByaXYtPnRpbWVzaGlmdDsgXAorICBwZXJpb2QgPSBzZWxmLT5wcml2LT5wZXJpb2Q7IFwKKyAgZnJlcXVlbmN5ID0gc2VsZi0+cHJpdi0+ZnJlcXVlbmN5OyBcCisgIFwKKyAgZm9yKGkgPSAwOyBpIDwgdmFsdWVfYXJyYXktPm5ic2FtcGxlczsgaSsrKSB7IFwKKyAgICAqdmFsdWVzID0gX3JzYXdfZ2V0XyMjdHlwZSAoc2VsZiwgbWF4LCBtaW4sIGFtcCwgb2ZmLCB0aW1lc2hpZnQsIHBlcmlvZCwgZnJlcXVlbmN5LCB0cyk7IFwKKyAgICB0cyArPSB2YWx1ZV9hcnJheS0+c2FtcGxlX2ludGVydmFsOyBcCisgICAgdmFsdWVzKys7IFwKKyAgfSBcCisgIGdfbXV0ZXhfdW5sb2NrIChzZWxmLT5sb2NrKTsgXAorICByZXR1cm4gVFJVRTsgXAorfQorCitERUZJTkVfUlNBVyAoaW50LCBUUlVFLCBFTVBUWSk7CitERUZJTkVfUlNBVyAodWludCwgVFJVRSwgRU1QVFkpOworREVGSU5FX1JTQVcgKGxvbmcsIFRSVUUsIEVNUFRZKTsKK0RFRklORV9SU0FXICh1bG9uZywgVFJVRSwgRU1QVFkpOworREVGSU5FX1JTQVcgKGludDY0LCBUUlVFLCBFTVBUWSk7CitERUZJTkVfUlNBVyAodWludDY0LCBUUlVFLCBnc3RfZ3VpbnQ2NF90b19nZG91YmxlKTsKK0RFRklORV9SU0FXIChmbG9hdCwgRkFMU0UsIEVNUFRZKTsKK0RFRklORV9SU0FXIChkb3VibGUsIEZBTFNFLCBFTVBUWSk7CisKK3N0YXRpYyBHc3RXYXZlZm9ybUltcGxlbWVudGF0aW9uIHdhdmVmb3JtX3JzYXcgPSB7CisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIHdhdmVmb3JtX3JzYXdfZ2V0X2ludCwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSB3YXZlZm9ybV9yc2F3X2dldF9pbnRfdmFsdWVfYXJyYXksCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIHdhdmVmb3JtX3JzYXdfZ2V0X3VpbnQsCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgd2F2ZWZvcm1fcnNhd19nZXRfdWludF92YWx1ZV9hcnJheSwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgd2F2ZWZvcm1fcnNhd19nZXRfbG9uZywKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSB3YXZlZm9ybV9yc2F3X2dldF9sb25nX3ZhbHVlX2FycmF5LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSB3YXZlZm9ybV9yc2F3X2dldF91bG9uZywKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSB3YXZlZm9ybV9yc2F3X2dldF91bG9uZ192YWx1ZV9hcnJheSwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgd2F2ZWZvcm1fcnNhd19nZXRfaW50NjQsCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgd2F2ZWZvcm1fcnNhd19nZXRfaW50NjRfdmFsdWVfYXJyYXksCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIHdhdmVmb3JtX3JzYXdfZ2V0X3VpbnQ2NCwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSB3YXZlZm9ybV9yc2F3X2dldF91aW50NjRfdmFsdWVfYXJyYXksCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIHdhdmVmb3JtX3JzYXdfZ2V0X2Zsb2F0LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkpIHdhdmVmb3JtX3JzYXdfZ2V0X2Zsb2F0X3ZhbHVlX2FycmF5LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSB3YXZlZm9ybV9yc2F3X2dldF9kb3VibGUsCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgd2F2ZWZvcm1fcnNhd19nZXRfZG91YmxlX3ZhbHVlX2FycmF5Cit9OworCisjZGVmaW5lIERFRklORV9UUklBTkdMRSh0eXBlLHJvdW5kLGNvbnZlcnQpIFwKK1wKK3N0YXRpYyBpbmxpbmUgZyMjdHlwZSBcCitfdHJpYW5nbGVfZ2V0XyMjdHlwZSAoR3N0TEZPQ29udHJvbFNvdXJjZSAqc2VsZiwgZyMjdHlwZSBtYXgsIGcjI3R5cGUgbWluLCBnZG91YmxlIGFtcCwgZ2RvdWJsZSBvZmYsIEdzdENsb2NrVGltZSB0aW1lc2hpZnQsIEdzdENsb2NrVGltZSBwZXJpb2QsIGdkb3VibGUgZnJlcXVlbmN5LCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKSBcCit7IFwKKyAgR3N0Q2xvY2tUaW1lIHBvcyA9IF9jYWxjdWxhdGVfcG9zICh0aW1lc3RhbXAsIHRpbWVzaGlmdCwgcGVyaW9kKTsgXAorICBnZG91YmxlIHJldDsgXAorICBcCisgIGlmIChnc3RfZ3VpbnQ2NF90b19nZG91YmxlIChwb3MpIDw9IGdzdF9ndWludDY0X3RvX2dkb3VibGUgKHBlcmlvZCkgLyA0LjApIFwKKyAgICByZXQgPSBnc3RfZ3VpbnQ2NF90b19nZG91YmxlIChwb3MpICogKCg0LjAgKiBhbXApIC8gZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSAocGVyaW9kKSk7IFwKKyAgZWxzZSBpZiAoZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSAocG9zKSA8PSAoMy4wICogZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSAocGVyaW9kKSkgLyA0LjApIFwKKyAgICByZXQgPSAtKGdzdF9ndWludDY0X3RvX2dkb3VibGUgKHBvcykgLSBnc3RfZ3VpbnQ2NF90b19nZG91YmxlIChwZXJpb2QpIC8gMi4wKSAqICgoNC4wICogYW1wKSAvIGdzdF9ndWludDY0X3RvX2dkb3VibGUgKHBlcmlvZCkpOyBcCisgIGVsc2UgXAorICAgIHJldCA9IGdzdF9ndWludDY0X3RvX2dkb3VibGUgKHBlcmlvZCkgLSBnc3RfZ3VpbnQ2NF90b19nZG91YmxlIChwb3MpICogKCg0LjAgKiBhbXApIC8gZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSAocGVyaW9kKSk7IFwKKyAgXAorICByZXQgKz0gb2ZmOyBcCisgIFwKKyAgaWYgKHJvdW5kKSBcCisgICAgcmV0ICs9IDAuNTsgXAorICBcCisgIHJldHVybiAoZyMjdHlwZSkgQ0xBTVAgKHJldCwgY29udmVydCAobWluKSwgY29udmVydCAobWF4KSk7IFwKK30gXAorXAorc3RhdGljIGdib29sZWFuIFwKK3dhdmVmb3JtX3RyaWFuZ2xlX2dldF8jI3R5cGUgKEdzdExGT0NvbnRyb2xTb3VyY2UgKnNlbGYsIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIFwKKyAgICBHVmFsdWUgKnZhbHVlKSBcCit7IFwKKyAgZyMjdHlwZSByZXQsIG1heCwgbWluOyBcCisgIGdkb3VibGUgYW1wLCBvZmYsIGZyZXF1ZW5jeTsgXAorICBHc3RDbG9ja1RpbWUgdGltZXNoaWZ0LCBwZXJpb2Q7IFwKKyAgXAorICBnX211dGV4X2xvY2sgKHNlbGYtPmxvY2spOyBcCisgIG1heCA9IGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPm1heGltdW1fdmFsdWUpOyBcCisgIG1pbiA9IGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPm1pbmltdW1fdmFsdWUpOyBcCisgIGFtcCA9IGNvbnZlcnQgKGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPmFtcGxpdHVkZSkpOyBcCisgIG9mZiA9IGNvbnZlcnQgKGdfdmFsdWVfZ2V0XyMjdHlwZSAoJnNlbGYtPnByaXYtPm9mZnNldCkpOyBcCisgIHRpbWVzaGlmdCA9IHNlbGYtPnByaXYtPnRpbWVzaGlmdDsgXAorICBwZXJpb2QgPSBzZWxmLT5wcml2LT5wZXJpb2Q7IFwKKyAgZnJlcXVlbmN5ID0gc2VsZi0+cHJpdi0+ZnJlcXVlbmN5OyBcCisgIFwKKyAgcmV0ID0gX3RyaWFuZ2xlX2dldF8jI3R5cGUgKHNlbGYsIG1heCwgbWluLCBhbXAsIG9mZiwgdGltZXNoaWZ0LCBwZXJpb2QsIGZyZXF1ZW5jeSwgdGltZXN0YW1wKTsgXAorICBnX3ZhbHVlX3NldF8jI3R5cGUgKHZhbHVlLCByZXQpOyBcCisgIGdfbXV0ZXhfdW5sb2NrIChzZWxmLT5sb2NrKTsgXAorICByZXR1cm4gVFJVRTsgXAorfSBcCitcCitzdGF0aWMgZ2Jvb2xlYW4gXAord2F2ZWZvcm1fdHJpYW5nbGVfZ2V0XyMjdHlwZSMjX3ZhbHVlX2FycmF5IChHc3RMRk9Db250cm9sU291cmNlICpzZWxmLCBcCisgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBHc3RWYWx1ZUFycmF5ICogdmFsdWVfYXJyYXkpIFwKK3sgXAorICBnaW50IGk7IFwKKyAgR3N0Q2xvY2tUaW1lIHRzID0gdGltZXN0YW1wOyBcCisgIGcjI3R5cGUgKnZhbHVlcyA9IChnIyN0eXBlICopIHZhbHVlX2FycmF5LT52YWx1ZXM7IFwKKyAgZyMjdHlwZSBtYXgsIG1pbjsgXAorICBnZG91YmxlIGFtcCwgb2ZmLCBmcmVxdWVuY3k7IFwKKyAgR3N0Q2xvY2tUaW1lIHRpbWVzaGlmdCwgcGVyaW9kOyBcCisgIFwKKyAgZ19tdXRleF9sb2NrIChzZWxmLT5sb2NrKTsgXAorICBtYXggPSBnX3ZhbHVlX2dldF8jI3R5cGUgKCZzZWxmLT5wcml2LT5tYXhpbXVtX3ZhbHVlKTsgXAorICBtaW4gPSBnX3ZhbHVlX2dldF8jI3R5cGUgKCZzZWxmLT5wcml2LT5taW5pbXVtX3ZhbHVlKTsgXAorICBhbXAgPSBjb252ZXJ0IChnX3ZhbHVlX2dldF8jI3R5cGUgKCZzZWxmLT5wcml2LT5hbXBsaXR1ZGUpKTsgXAorICBvZmYgPSBjb252ZXJ0IChnX3ZhbHVlX2dldF8jI3R5cGUgKCZzZWxmLT5wcml2LT5vZmZzZXQpKTsgXAorICB0aW1lc2hpZnQgPSBzZWxmLT5wcml2LT50aW1lc2hpZnQ7IFwKKyAgcGVyaW9kID0gc2VsZi0+cHJpdi0+cGVyaW9kOyBcCisgIGZyZXF1ZW5jeSA9IHNlbGYtPnByaXYtPmZyZXF1ZW5jeTsgXAorICBcCisgIGZvcihpID0gMDsgaSA8IHZhbHVlX2FycmF5LT5uYnNhbXBsZXM7IGkrKykgeyBcCisgICAgKnZhbHVlcyA9IF90cmlhbmdsZV9nZXRfIyN0eXBlIChzZWxmLCBtYXgsIG1pbiwgYW1wLCBvZmYsIHRpbWVzaGlmdCwgcGVyaW9kLCBmcmVxdWVuY3ksIHRzKTsgXAorICAgIHRzICs9IHZhbHVlX2FycmF5LT5zYW1wbGVfaW50ZXJ2YWw7IFwKKyAgICB2YWx1ZXMrKzsgXAorICB9IFwKKyAgZ19tdXRleF91bmxvY2sgKHNlbGYtPmxvY2spOyBcCisgIHJldHVybiBUUlVFOyBcCit9CisKK0RFRklORV9UUklBTkdMRSAoaW50LCBUUlVFLCBFTVBUWSk7CitERUZJTkVfVFJJQU5HTEUgKHVpbnQsIFRSVUUsIEVNUFRZKTsKK0RFRklORV9UUklBTkdMRSAobG9uZywgVFJVRSwgRU1QVFkpOworREVGSU5FX1RSSUFOR0xFICh1bG9uZywgVFJVRSwgRU1QVFkpOworREVGSU5FX1RSSUFOR0xFIChpbnQ2NCwgVFJVRSwgRU1QVFkpOworREVGSU5FX1RSSUFOR0xFICh1aW50NjQsIFRSVUUsIGdzdF9ndWludDY0X3RvX2dkb3VibGUpOworREVGSU5FX1RSSUFOR0xFIChmbG9hdCwgRkFMU0UsIEVNUFRZKTsKK0RFRklORV9UUklBTkdMRSAoZG91YmxlLCBGQUxTRSwgRU1QVFkpOworCitzdGF0aWMgR3N0V2F2ZWZvcm1JbXBsZW1lbnRhdGlvbiB3YXZlZm9ybV90cmlhbmdsZSA9IHsKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgd2F2ZWZvcm1fdHJpYW5nbGVfZ2V0X2ludCwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSB3YXZlZm9ybV90cmlhbmdsZV9nZXRfaW50X3ZhbHVlX2FycmF5LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSB3YXZlZm9ybV90cmlhbmdsZV9nZXRfdWludCwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSB3YXZlZm9ybV90cmlhbmdsZV9nZXRfdWludF92YWx1ZV9hcnJheSwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgd2F2ZWZvcm1fdHJpYW5nbGVfZ2V0X2xvbmcsCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgd2F2ZWZvcm1fdHJpYW5nbGVfZ2V0X2xvbmdfdmFsdWVfYXJyYXksCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIHdhdmVmb3JtX3RyaWFuZ2xlX2dldF91bG9uZywKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSB3YXZlZm9ybV90cmlhbmdsZV9nZXRfdWxvbmdfdmFsdWVfYXJyYXksCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIHdhdmVmb3JtX3RyaWFuZ2xlX2dldF9pbnQ2NCwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSB3YXZlZm9ybV90cmlhbmdsZV9nZXRfaW50NjRfdmFsdWVfYXJyYXksCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIHdhdmVmb3JtX3RyaWFuZ2xlX2dldF91aW50NjQsCisgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgd2F2ZWZvcm1fdHJpYW5nbGVfZ2V0X3VpbnQ2NF92YWx1ZV9hcnJheSwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgd2F2ZWZvcm1fdHJpYW5nbGVfZ2V0X2Zsb2F0LAorICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkpIHdhdmVmb3JtX3RyaWFuZ2xlX2dldF9mbG9hdF92YWx1ZV9hcnJheSwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgd2F2ZWZvcm1fdHJpYW5nbGVfZ2V0X2RvdWJsZSwKKyAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSB3YXZlZm9ybV90cmlhbmdsZV9nZXRfZG91YmxlX3ZhbHVlX2FycmF5Cit9OworCitzdGF0aWMgR3N0V2F2ZWZvcm1JbXBsZW1lbnRhdGlvbiAqd2F2ZWZvcm1zW10gPSB7CisgICZ3YXZlZm9ybV9zaW5lLAorICAmd2F2ZWZvcm1fc3F1YXJlLAorICAmd2F2ZWZvcm1fc2F3LAorICAmd2F2ZWZvcm1fcnNhdywKKyAgJndhdmVmb3JtX3RyaWFuZ2xlCit9OworCitzdGF0aWMgY29uc3QgZ3VpbnQgbnVtX3dhdmVmb3JtcyA9IEdfTl9FTEVNRU5UUyAod2F2ZWZvcm1zKTsKKworZW51bQoreworICBQUk9QX1dBVkVGT1JNID0gMSwKKyAgUFJPUF9GUkVRVUVOQ1ksCisgIFBST1BfVElNRVNISUZULAorICBQUk9QX0FNUExJVFVERSwKKyAgUFJPUF9PRkZTRVQKK307CisKK0dUeXBlCitnc3RfbGZvX3dhdmVmb3JtX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgZ3R5cGUgPSAwOworICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7R1NUX0xGT19XQVZFRk9STV9TSU5FLCAiR1NUX0xGT19XQVZFRk9STV9TSU5FIiwKKyAgICAgICAgInNpbmUifSwKKyAgICB7R1NUX0xGT19XQVZFRk9STV9TUVVBUkUsICJHU1RfTEZPX1dBVkVGT1JNX1NRVUFSRSIsCisgICAgICAgICJzcXVhcmUifSwKKyAgICB7R1NUX0xGT19XQVZFRk9STV9TQVcsICJHU1RfTEZPX1dBVkVGT1JNX1NBVyIsCisgICAgICAgICJzYXcifSwKKyAgICB7R1NUX0xGT19XQVZFRk9STV9SRVZFUlNFX1NBVywgIkdTVF9MRk9fV0FWRUZPUk1fUkVWRVJTRV9TQVciLAorICAgICAgICAicmV2ZXJzZS1zYXcifSwKKyAgICB7R1NUX0xGT19XQVZFRk9STV9UUklBTkdMRSwgIkdTVF9MRk9fV0FWRUZPUk1fVFJJQU5HTEUiLAorICAgICAgICAidHJpYW5nbGUifSwKKyAgICB7MCwgTlVMTCwgTlVMTH0KKyAgfTsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZndHlwZSkpIHsKKyAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0TEZPV2F2ZWZvcm0iLCB2YWx1ZXMpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmZ3R5cGUsIHRtcCk7CisgIH0KKworICByZXR1cm4gKEdUeXBlKSBndHlwZTsKK30KKworR19ERUZJTkVfVFlQRSAoR3N0TEZPQ29udHJvbFNvdXJjZSwgZ3N0X2xmb19jb250cm9sX3NvdXJjZSwKKyAgICBHU1RfVFlQRV9DT05UUk9MX1NPVVJDRSk7CisKK3N0YXRpYyBHT2JqZWN0Q2xhc3MgKnBhcmVudF9jbGFzcyA9IE5VTEw7CisKK3N0YXRpYyB2b2lkCitnc3RfbGZvX2NvbnRyb2xfc291cmNlX3Jlc2V0IChHc3RMRk9Db250cm9sU291cmNlICogc2VsZikKK3sKKyAgR3N0Q29udHJvbFNvdXJjZSAqY3NvdXJjZSA9IEdTVF9DT05UUk9MX1NPVVJDRSAoc2VsZik7CisKKyAgY3NvdXJjZS0+Z2V0X3ZhbHVlID0gTlVMTDsKKyAgY3NvdXJjZS0+Z2V0X3ZhbHVlX2FycmF5ID0gTlVMTDsKKworICBzZWxmLT5wcml2LT50eXBlID0gc2VsZi0+cHJpdi0+YmFzZSA9IEdfVFlQRV9JTlZBTElEOworCisgIGlmIChHX0lTX1ZBTFVFICgmc2VsZi0+cHJpdi0+bWluaW11bV92YWx1ZSkpCisgICAgZ192YWx1ZV91bnNldCAoJnNlbGYtPnByaXYtPm1pbmltdW1fdmFsdWUpOworICBpZiAoR19JU19WQUxVRSAoJnNlbGYtPnByaXYtPm1heGltdW1fdmFsdWUpKQorICAgIGdfdmFsdWVfdW5zZXQgKCZzZWxmLT5wcml2LT5tYXhpbXVtX3ZhbHVlKTsKKworICBpZiAoR19JU19WQUxVRSAoJnNlbGYtPnByaXYtPmFtcGxpdHVkZSkpCisgICAgZ192YWx1ZV91bnNldCAoJnNlbGYtPnByaXYtPmFtcGxpdHVkZSk7CisgIGlmIChHX0lTX1ZBTFVFICgmc2VsZi0+cHJpdi0+b2Zmc2V0KSkKKyAgICBnX3ZhbHVlX3Vuc2V0ICgmc2VsZi0+cHJpdi0+b2Zmc2V0KTsKK30KKworLyoqCisgKiBnc3RfbGZvX2NvbnRyb2xfc291cmNlX25ldzoKKyAqCisgKiBUaGlzIHJldHVybnMgYSBuZXcsIHVuYm91bmQgI0dzdExGT0NvbnRyb2xTb3VyY2UuCisgKgorICogUmV0dXJuczogYSBuZXcsIHVuYm91bmQgI0dzdExGT0NvbnRyb2xTb3VyY2UuCisgKi8KK0dzdExGT0NvbnRyb2xTb3VyY2UgKgorZ3N0X2xmb19jb250cm9sX3NvdXJjZV9uZXcgKHZvaWQpCit7CisgIHJldHVybiBnX29iamVjdF9uZXd2IChHU1RfVFlQRV9MRk9fQ09OVFJPTF9TT1VSQ0UsIDAsIE5VTEwpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9sZm9fY29udHJvbF9zb3VyY2Vfc2V0X3dhdmVmb3JtIChHc3RMRk9Db250cm9sU291cmNlICogc2VsZiwKKyAgICBHc3RMRk9XYXZlZm9ybSB3YXZlZm9ybSkKK3sKKyAgR3N0Q29udHJvbFNvdXJjZSAqY3NvdXJjZSA9IEdTVF9DT05UUk9MX1NPVVJDRSAoc2VsZik7CisgIGdib29sZWFuIHJldCA9IFRSVUU7CisKKyAgaWYgKHdhdmVmb3JtID49IG51bV93YXZlZm9ybXMgfHwgKGludCkgd2F2ZWZvcm0gPCAwKSB7CisgICAgR1NUX1dBUk5JTkcgKCJ3YXZlZm9ybSAlZCBpbnZhbGlkIG9yIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCB3YXZlZm9ybSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgaWYgKHNlbGYtPnByaXYtPmJhc2UgPT0gR19UWVBFX0lOVkFMSUQpIHsKKyAgICBHU1RfV0FSTklORyAoIm5vdCBib3VuZCB0byBhIHByb3BlcnR5IHlldCIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorCisgIHN3aXRjaCAoc2VsZi0+cHJpdi0+YmFzZSkgeworICAgIGNhc2UgR19UWVBFX0lOVDoKKyAgICAgIGNzb3VyY2UtPmdldF92YWx1ZSA9IHdhdmVmb3Jtc1t3YXZlZm9ybV0tPmdldF9pbnQ7CisgICAgICBjc291cmNlLT5nZXRfdmFsdWVfYXJyYXkgPSB3YXZlZm9ybXNbd2F2ZWZvcm1dLT5nZXRfaW50X3ZhbHVlX2FycmF5OworICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1RZUEVfVUlOVDp7CisgICAgICBjc291cmNlLT5nZXRfdmFsdWUgPSB3YXZlZm9ybXNbd2F2ZWZvcm1dLT5nZXRfdWludDsKKyAgICAgIGNzb3VyY2UtPmdldF92YWx1ZV9hcnJheSA9IHdhdmVmb3Jtc1t3YXZlZm9ybV0tPmdldF91aW50X3ZhbHVlX2FycmF5OworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR19UWVBFX0xPTkc6eworICAgICAgY3NvdXJjZS0+Z2V0X3ZhbHVlID0gd2F2ZWZvcm1zW3dhdmVmb3JtXS0+Z2V0X2xvbmc7CisgICAgICBjc291cmNlLT5nZXRfdmFsdWVfYXJyYXkgPSB3YXZlZm9ybXNbd2F2ZWZvcm1dLT5nZXRfbG9uZ192YWx1ZV9hcnJheTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdfVFlQRV9VTE9ORzp7CisgICAgICBjc291cmNlLT5nZXRfdmFsdWUgPSB3YXZlZm9ybXNbd2F2ZWZvcm1dLT5nZXRfdWxvbmc7CisgICAgICBjc291cmNlLT5nZXRfdmFsdWVfYXJyYXkgPSB3YXZlZm9ybXNbd2F2ZWZvcm1dLT5nZXRfdWxvbmdfdmFsdWVfYXJyYXk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHX1RZUEVfSU5UNjQ6eworICAgICAgY3NvdXJjZS0+Z2V0X3ZhbHVlID0gd2F2ZWZvcm1zW3dhdmVmb3JtXS0+Z2V0X2ludDY0OworICAgICAgY3NvdXJjZS0+Z2V0X3ZhbHVlX2FycmF5ID0gd2F2ZWZvcm1zW3dhdmVmb3JtXS0+Z2V0X2ludDY0X3ZhbHVlX2FycmF5OworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR19UWVBFX1VJTlQ2NDp7CisgICAgICBjc291cmNlLT5nZXRfdmFsdWUgPSB3YXZlZm9ybXNbd2F2ZWZvcm1dLT5nZXRfdWludDY0OworICAgICAgY3NvdXJjZS0+Z2V0X3ZhbHVlX2FycmF5ID0gd2F2ZWZvcm1zW3dhdmVmb3JtXS0+Z2V0X3VpbnQ2NF92YWx1ZV9hcnJheTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdfVFlQRV9GTE9BVDp7CisgICAgICBjc291cmNlLT5nZXRfdmFsdWUgPSB3YXZlZm9ybXNbd2F2ZWZvcm1dLT5nZXRfZmxvYXQ7CisgICAgICBjc291cmNlLT5nZXRfdmFsdWVfYXJyYXkgPSB3YXZlZm9ybXNbd2F2ZWZvcm1dLT5nZXRfZmxvYXRfdmFsdWVfYXJyYXk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHX1RZUEVfRE9VQkxFOnsKKyAgICAgIGNzb3VyY2UtPmdldF92YWx1ZSA9IHdhdmVmb3Jtc1t3YXZlZm9ybV0tPmdldF9kb3VibGU7CisgICAgICBjc291cmNlLT5nZXRfdmFsdWVfYXJyYXkgPSB3YXZlZm9ybXNbd2F2ZWZvcm1dLT5nZXRfZG91YmxlX3ZhbHVlX2FycmF5OworICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICByZXQgPSBGQUxTRTsKKyAgICAgIGJyZWFrOworICB9CisKKyAgaWYgKHJldCkKKyAgICBzZWxmLT5wcml2LT53YXZlZm9ybSA9IHdhdmVmb3JtOworICBlbHNlCisgICAgR1NUX1dBUk5JTkcgKCJpbmNvbXBsZXRlIGltcGxlbWVudGF0aW9uIGZvciB0eXBlICclcyciLAorICAgICAgICBHU1RfU1RSX05VTEwgKGdfdHlwZV9uYW1lIChzZWxmLT5wcml2LT50eXBlKSkpOworCisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2xmb19jb250cm9sX3NvdXJjZV9iaW5kIChHc3RDb250cm9sU291cmNlICogc291cmNlLCBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIEdUeXBlIHR5cGUsIGJhc2U7CisgIEdzdExGT0NvbnRyb2xTb3VyY2UgKnNlbGYgPSBHU1RfTEZPX0NPTlRST0xfU09VUkNFIChzb3VyY2UpOworICBnYm9vbGVhbiByZXQgPSBUUlVFOworCisgIC8qIGdldCB0aGUgZnVuZGFtZW50YWwgYmFzZSB0eXBlICovCisgIHNlbGYtPnByaXYtPnR5cGUgPSBiYXNlID0gdHlwZSA9IEdfUEFSQU1fU1BFQ19WQUxVRV9UWVBFIChwc3BlYyk7CisgIHdoaWxlICgodHlwZSA9IGdfdHlwZV9wYXJlbnQgKHR5cGUpKSkKKyAgICBiYXNlID0gdHlwZTsKKworICBzZWxmLT5wcml2LT5iYXNlID0gYmFzZTsKKyAgLyogcmVzdG9yZSB0eXBlICovCisgIHR5cGUgPSBzZWxmLT5wcml2LT50eXBlOworCisgIHN3aXRjaCAoYmFzZSkgeworICAgIGNhc2UgR19UWVBFX0lOVDp7CisgICAgICBHUGFyYW1TcGVjSW50ICp0cHNwZWMgPSBHX1BBUkFNX1NQRUNfSU5UIChwc3BlYyk7CisKKyAgICAgIGdfdmFsdWVfaW5pdCAoJnNlbGYtPnByaXYtPm1pbmltdW1fdmFsdWUsIHR5cGUpOworICAgICAgZ192YWx1ZV9zZXRfaW50ICgmc2VsZi0+cHJpdi0+bWluaW11bV92YWx1ZSwgdHBzcGVjLT5taW5pbXVtKTsKKyAgICAgIGdfdmFsdWVfaW5pdCAoJnNlbGYtPnByaXYtPm1heGltdW1fdmFsdWUsIHR5cGUpOworICAgICAgZ192YWx1ZV9zZXRfaW50ICgmc2VsZi0+cHJpdi0+bWF4aW11bV92YWx1ZSwgdHBzcGVjLT5tYXhpbXVtKTsKKworICAgICAgaWYgKCFHX0lTX1ZBTFVFICgmc2VsZi0+cHJpdi0+YW1wbGl0dWRlKSkgeworICAgICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5hbXBsaXR1ZGUsIHR5cGUpOworICAgICAgICBnX3ZhbHVlX3NldF9pbnQgKCZzZWxmLT5wcml2LT5hbXBsaXR1ZGUsIDApOworICAgICAgfQorCisgICAgICBpZiAoIUdfSVNfVkFMVUUgKCZzZWxmLT5wcml2LT5vZmZzZXQpKSB7CisgICAgICAgIGdfdmFsdWVfaW5pdCAoJnNlbGYtPnByaXYtPm9mZnNldCwgdHlwZSk7CisgICAgICAgIGdfdmFsdWVfc2V0X2ludCAoJnNlbGYtPnByaXYtPm9mZnNldCwgdHBzcGVjLT5kZWZhdWx0X3ZhbHVlKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdfVFlQRV9VSU5UOnsKKyAgICAgIEdQYXJhbVNwZWNVSW50ICp0cHNwZWMgPSBHX1BBUkFNX1NQRUNfVUlOVCAocHNwZWMpOworCisgICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5taW5pbXVtX3ZhbHVlLCB0eXBlKTsKKyAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKCZzZWxmLT5wcml2LT5taW5pbXVtX3ZhbHVlLCB0cHNwZWMtPm1pbmltdW0pOworICAgICAgZ192YWx1ZV9pbml0ICgmc2VsZi0+cHJpdi0+bWF4aW11bV92YWx1ZSwgdHlwZSk7CisgICAgICBnX3ZhbHVlX3NldF91aW50ICgmc2VsZi0+cHJpdi0+bWF4aW11bV92YWx1ZSwgdHBzcGVjLT5tYXhpbXVtKTsKKworICAgICAgaWYgKCFHX0lTX1ZBTFVFICgmc2VsZi0+cHJpdi0+YW1wbGl0dWRlKSkgeworICAgICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5hbXBsaXR1ZGUsIHR5cGUpOworICAgICAgICBnX3ZhbHVlX3NldF91aW50ICgmc2VsZi0+cHJpdi0+YW1wbGl0dWRlLCAwKTsKKyAgICAgIH0KKworICAgICAgaWYgKCFHX0lTX1ZBTFVFICgmc2VsZi0+cHJpdi0+b2Zmc2V0KSkgeworICAgICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5vZmZzZXQsIHR5cGUpOworICAgICAgICBnX3ZhbHVlX3NldF91aW50ICgmc2VsZi0+cHJpdi0+b2Zmc2V0LCB0cHNwZWMtPmRlZmF1bHRfdmFsdWUpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR19UWVBFX0xPTkc6eworICAgICAgR1BhcmFtU3BlY0xvbmcgKnRwc3BlYyA9IEdfUEFSQU1fU1BFQ19MT05HIChwc3BlYyk7CisKKyAgICAgIGdfdmFsdWVfaW5pdCAoJnNlbGYtPnByaXYtPm1pbmltdW1fdmFsdWUsIHR5cGUpOworICAgICAgZ192YWx1ZV9zZXRfbG9uZyAoJnNlbGYtPnByaXYtPm1pbmltdW1fdmFsdWUsIHRwc3BlYy0+bWluaW11bSk7CisgICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5tYXhpbXVtX3ZhbHVlLCB0eXBlKTsKKyAgICAgIGdfdmFsdWVfc2V0X2xvbmcgKCZzZWxmLT5wcml2LT5tYXhpbXVtX3ZhbHVlLCB0cHNwZWMtPm1heGltdW0pOworICAgICAgaWYgKCFHX0lTX1ZBTFVFICgmc2VsZi0+cHJpdi0+YW1wbGl0dWRlKSkgeworICAgICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5hbXBsaXR1ZGUsIHR5cGUpOworICAgICAgICBnX3ZhbHVlX3NldF9sb25nICgmc2VsZi0+cHJpdi0+YW1wbGl0dWRlLCAwKTsKKyAgICAgIH0KKworICAgICAgaWYgKCFHX0lTX1ZBTFVFICgmc2VsZi0+cHJpdi0+b2Zmc2V0KSkgeworICAgICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5vZmZzZXQsIHR5cGUpOworICAgICAgICBnX3ZhbHVlX3NldF9sb25nICgmc2VsZi0+cHJpdi0+b2Zmc2V0LCB0cHNwZWMtPmRlZmF1bHRfdmFsdWUpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR19UWVBFX1VMT05HOnsKKyAgICAgIEdQYXJhbVNwZWNVTG9uZyAqdHBzcGVjID0gR19QQVJBTV9TUEVDX1VMT05HIChwc3BlYyk7CisKKyAgICAgIGdfdmFsdWVfaW5pdCAoJnNlbGYtPnByaXYtPm1pbmltdW1fdmFsdWUsIHR5cGUpOworICAgICAgZ192YWx1ZV9zZXRfdWxvbmcgKCZzZWxmLT5wcml2LT5taW5pbXVtX3ZhbHVlLCB0cHNwZWMtPm1pbmltdW0pOworICAgICAgZ192YWx1ZV9pbml0ICgmc2VsZi0+cHJpdi0+bWF4aW11bV92YWx1ZSwgdHlwZSk7CisgICAgICBnX3ZhbHVlX3NldF91bG9uZyAoJnNlbGYtPnByaXYtPm1heGltdW1fdmFsdWUsIHRwc3BlYy0+bWF4aW11bSk7CisgICAgICBpZiAoIUdfSVNfVkFMVUUgKCZzZWxmLT5wcml2LT5hbXBsaXR1ZGUpKSB7CisgICAgICAgIGdfdmFsdWVfaW5pdCAoJnNlbGYtPnByaXYtPmFtcGxpdHVkZSwgdHlwZSk7CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nICgmc2VsZi0+cHJpdi0+YW1wbGl0dWRlLCAwKTsKKyAgICAgIH0KKworICAgICAgaWYgKCFHX0lTX1ZBTFVFICgmc2VsZi0+cHJpdi0+b2Zmc2V0KSkgeworICAgICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5vZmZzZXQsIHR5cGUpOworICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyAoJnNlbGYtPnByaXYtPm9mZnNldCwgdHBzcGVjLT5kZWZhdWx0X3ZhbHVlKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdfVFlQRV9JTlQ2NDp7CisgICAgICBHUGFyYW1TcGVjSW50NjQgKnRwc3BlYyA9IEdfUEFSQU1fU1BFQ19JTlQ2NCAocHNwZWMpOworCisgICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5taW5pbXVtX3ZhbHVlLCB0eXBlKTsKKyAgICAgIGdfdmFsdWVfc2V0X2ludDY0ICgmc2VsZi0+cHJpdi0+bWluaW11bV92YWx1ZSwgdHBzcGVjLT5taW5pbXVtKTsKKyAgICAgIGdfdmFsdWVfaW5pdCAoJnNlbGYtPnByaXYtPm1heGltdW1fdmFsdWUsIHR5cGUpOworICAgICAgZ192YWx1ZV9zZXRfaW50NjQgKCZzZWxmLT5wcml2LT5tYXhpbXVtX3ZhbHVlLCB0cHNwZWMtPm1heGltdW0pOworICAgICAgaWYgKCFHX0lTX1ZBTFVFICgmc2VsZi0+cHJpdi0+YW1wbGl0dWRlKSkgeworICAgICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5hbXBsaXR1ZGUsIHR5cGUpOworICAgICAgICBnX3ZhbHVlX3NldF9pbnQ2NCAoJnNlbGYtPnByaXYtPmFtcGxpdHVkZSwgMCk7CisgICAgICB9CisKKyAgICAgIGlmICghR19JU19WQUxVRSAoJnNlbGYtPnByaXYtPm9mZnNldCkpIHsKKyAgICAgICAgZ192YWx1ZV9pbml0ICgmc2VsZi0+cHJpdi0+b2Zmc2V0LCB0eXBlKTsKKyAgICAgICAgZ192YWx1ZV9zZXRfaW50NjQgKCZzZWxmLT5wcml2LT5vZmZzZXQsIHRwc3BlYy0+ZGVmYXVsdF92YWx1ZSk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHX1RZUEVfVUlOVDY0OnsKKyAgICAgIEdQYXJhbVNwZWNVSW50NjQgKnRwc3BlYyA9IEdfUEFSQU1fU1BFQ19VSU5UNjQgKHBzcGVjKTsKKworICAgICAgZ192YWx1ZV9pbml0ICgmc2VsZi0+cHJpdi0+bWluaW11bV92YWx1ZSwgdHlwZSk7CisgICAgICBnX3ZhbHVlX3NldF91aW50NjQgKCZzZWxmLT5wcml2LT5taW5pbXVtX3ZhbHVlLCB0cHNwZWMtPm1pbmltdW0pOworICAgICAgZ192YWx1ZV9pbml0ICgmc2VsZi0+cHJpdi0+bWF4aW11bV92YWx1ZSwgdHlwZSk7CisgICAgICBnX3ZhbHVlX3NldF91aW50NjQgKCZzZWxmLT5wcml2LT5tYXhpbXVtX3ZhbHVlLCB0cHNwZWMtPm1heGltdW0pOworICAgICAgaWYgKCFHX0lTX1ZBTFVFICgmc2VsZi0+cHJpdi0+YW1wbGl0dWRlKSkgeworICAgICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5hbXBsaXR1ZGUsIHR5cGUpOworICAgICAgICBnX3ZhbHVlX3NldF91aW50NjQgKCZzZWxmLT5wcml2LT5hbXBsaXR1ZGUsIDApOworICAgICAgfQorCisgICAgICBpZiAoIUdfSVNfVkFMVUUgKCZzZWxmLT5wcml2LT5vZmZzZXQpKSB7CisgICAgICAgIGdfdmFsdWVfaW5pdCAoJnNlbGYtPnByaXYtPm9mZnNldCwgdHlwZSk7CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAoJnNlbGYtPnByaXYtPm9mZnNldCwgdHBzcGVjLT5kZWZhdWx0X3ZhbHVlKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdfVFlQRV9GTE9BVDp7CisgICAgICBHUGFyYW1TcGVjRmxvYXQgKnRwc3BlYyA9IEdfUEFSQU1fU1BFQ19GTE9BVCAocHNwZWMpOworCisgICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5taW5pbXVtX3ZhbHVlLCB0eXBlKTsKKyAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0ICgmc2VsZi0+cHJpdi0+bWluaW11bV92YWx1ZSwgdHBzcGVjLT5taW5pbXVtKTsKKyAgICAgIGdfdmFsdWVfaW5pdCAoJnNlbGYtPnByaXYtPm1heGltdW1fdmFsdWUsIHR5cGUpOworICAgICAgZ192YWx1ZV9zZXRfZmxvYXQgKCZzZWxmLT5wcml2LT5tYXhpbXVtX3ZhbHVlLCB0cHNwZWMtPm1heGltdW0pOworICAgICAgaWYgKCFHX0lTX1ZBTFVFICgmc2VsZi0+cHJpdi0+YW1wbGl0dWRlKSkgeworICAgICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5hbXBsaXR1ZGUsIHR5cGUpOworICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCAoJnNlbGYtPnByaXYtPmFtcGxpdHVkZSwgMC4wKTsKKyAgICAgIH0KKworICAgICAgaWYgKCFHX0lTX1ZBTFVFICgmc2VsZi0+cHJpdi0+b2Zmc2V0KSkgeworICAgICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5vZmZzZXQsIHR5cGUpOworICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCAoJnNlbGYtPnByaXYtPm9mZnNldCwgdHBzcGVjLT5kZWZhdWx0X3ZhbHVlKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdfVFlQRV9ET1VCTEU6eworICAgICAgR1BhcmFtU3BlY0RvdWJsZSAqdHBzcGVjID0gR19QQVJBTV9TUEVDX0RPVUJMRSAocHNwZWMpOworCisgICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5taW5pbXVtX3ZhbHVlLCB0eXBlKTsKKyAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAoJnNlbGYtPnByaXYtPm1pbmltdW1fdmFsdWUsIHRwc3BlYy0+bWluaW11bSk7CisgICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5tYXhpbXVtX3ZhbHVlLCB0eXBlKTsKKyAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAoJnNlbGYtPnByaXYtPm1heGltdW1fdmFsdWUsIHRwc3BlYy0+bWF4aW11bSk7CisgICAgICBpZiAoIUdfSVNfVkFMVUUgKCZzZWxmLT5wcml2LT5hbXBsaXR1ZGUpKSB7CisgICAgICAgIGdfdmFsdWVfaW5pdCAoJnNlbGYtPnByaXYtPmFtcGxpdHVkZSwgdHlwZSk7CisgICAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAoJnNlbGYtPnByaXYtPmFtcGxpdHVkZSwgMC4wKTsKKyAgICAgIH0KKworICAgICAgaWYgKCFHX0lTX1ZBTFVFICgmc2VsZi0+cHJpdi0+b2Zmc2V0KSkgeworICAgICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5vZmZzZXQsIHR5cGUpOworICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUgKCZzZWxmLT5wcml2LT5vZmZzZXQsIHRwc3BlYy0+ZGVmYXVsdF92YWx1ZSk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgIEdTVF9XQVJOSU5HICgiaW5jb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBmb3IgcGFyYW1zcGVjIHR5cGUgJyVzJyIsCisgICAgICAgICAgR19QQVJBTV9TUEVDX1RZUEVfTkFNRSAocHNwZWMpKTsKKyAgICAgIHJldCA9IEZBTFNFOworICAgICAgYnJlYWs7CisgIH0KKworICBpZiAocmV0KSB7CisgICAgR1ZhbHVlIGFtcCA9IHsgMCwgfQorICAgICwgb2ZmID0geworICAgIDAsfTsKKworICAgIC8qIFRoaXMgc2hvdWxkIG5ldmVyIGZhaWwgdW5sZXNzIHRoZSB1c2VyIGFscmVhZHkgc2V0IGFtcGxpdHVkZSBvciBvZmZzZXQKKyAgICAgKiB3aXRoIGFuIGluY29tcGF0aWJsZSB0eXBlIGJlZm9yZSBfYmluZCAoKSAqLworICAgIGlmICghZ192YWx1ZV90eXBlX3RyYW5zZm9ybWFibGUgKEdfVkFMVUVfVFlQRSAoJnNlbGYtPnByaXYtPmFtcGxpdHVkZSksCisgICAgICAgICAgICBiYXNlKQorICAgICAgICB8fCAhZ192YWx1ZV90eXBlX3RyYW5zZm9ybWFibGUgKEdfVkFMVUVfVFlQRSAoJnNlbGYtPnByaXYtPm9mZnNldCksCisgICAgICAgICAgICBiYXNlKSkgeworICAgICAgR1NUX1dBUk5JTkcgKCJpbmNvbXBhdGlibGUgdHlwZXMgZm9yIGFtcGxpdHVkZSBvciBvZmZzZXQiKTsKKyAgICAgIGdzdF9sZm9fY29udHJvbF9zb3VyY2VfcmVzZXQgKHNlbGYpOworICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIC8qIEdlbmVyYXRlIGNvcGllcyBhbmQgdHJhbnNmb3JtIHRvIHRoZSBjb3JyZWN0IHR5cGUgKi8KKyAgICBnX3ZhbHVlX2luaXQgKCZhbXAsIGJhc2UpOworICAgIGdfdmFsdWVfdHJhbnNmb3JtICgmc2VsZi0+cHJpdi0+YW1wbGl0dWRlLCAmYW1wKTsKKyAgICBnX3ZhbHVlX2luaXQgKCZvZmYsIGJhc2UpOworICAgIGdfdmFsdWVfdHJhbnNmb3JtICgmc2VsZi0+cHJpdi0+b2Zmc2V0LCAmb2ZmKTsKKworICAgIHJldCA9IGdzdF9sZm9fY29udHJvbF9zb3VyY2Vfc2V0X3dhdmVmb3JtIChzZWxmLCBzZWxmLT5wcml2LT53YXZlZm9ybSk7CisKKyAgICBnX3ZhbHVlX3Vuc2V0ICgmc2VsZi0+cHJpdi0+YW1wbGl0dWRlKTsKKyAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5hbXBsaXR1ZGUsIHNlbGYtPnByaXYtPmJhc2UpOworICAgIGdfdmFsdWVfdHJhbnNmb3JtICgmYW1wLCAmc2VsZi0+cHJpdi0+YW1wbGl0dWRlKTsKKworICAgIGdfdmFsdWVfdW5zZXQgKCZzZWxmLT5wcml2LT5vZmZzZXQpOworICAgIGdfdmFsdWVfaW5pdCAoJnNlbGYtPnByaXYtPm9mZnNldCwgc2VsZi0+cHJpdi0+YmFzZSk7CisgICAgZ192YWx1ZV90cmFuc2Zvcm0gKCZvZmYsICZzZWxmLT5wcml2LT5vZmZzZXQpOworCisgICAgZ192YWx1ZV91bnNldCAoJmFtcCk7CisgICAgZ192YWx1ZV91bnNldCAoJm9mZik7CisgIH0KKworICBpZiAoIXJldCkKKyAgICBnc3RfbGZvX2NvbnRyb2xfc291cmNlX3Jlc2V0IChzZWxmKTsKKworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAorZ3N0X2xmb19jb250cm9sX3NvdXJjZV9pbml0IChHc3RMRk9Db250cm9sU291cmNlICogc2VsZikKK3sKKyAgc2VsZi0+cHJpdiA9CisgICAgICBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKHNlbGYsIEdTVF9UWVBFX0xGT19DT05UUk9MX1NPVVJDRSwKKyAgICAgIEdzdExGT0NvbnRyb2xTb3VyY2VQcml2YXRlKTsKKyAgc2VsZi0+cHJpdi0+d2F2ZWZvcm0gPSBHU1RfTEZPX1dBVkVGT1JNX1NJTkU7CisgIHNlbGYtPnByaXYtPmZyZXF1ZW5jeSA9IDEuMDsKKyAgc2VsZi0+cHJpdi0+cGVyaW9kID0gR1NUX1NFQ09ORCAvIHNlbGYtPnByaXYtPmZyZXF1ZW5jeTsKKyAgc2VsZi0+cHJpdi0+dGltZXNoaWZ0ID0gMDsKKworICBzZWxmLT5sb2NrID0gZ19tdXRleF9uZXcgKCk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfbGZvX2NvbnRyb2xfc291cmNlX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqKQoreworICBHc3RMRk9Db250cm9sU291cmNlICpzZWxmID0gR1NUX0xGT19DT05UUk9MX1NPVVJDRSAob2JqKTsKKworICBnc3RfbGZvX2NvbnRyb2xfc291cmNlX3Jlc2V0IChzZWxmKTsKKworICBpZiAoc2VsZi0+bG9jaykgeworICAgIGdfbXV0ZXhfZnJlZSAoc2VsZi0+bG9jayk7CisgICAgc2VsZi0+bG9jayA9IE5VTEw7CisgIH0KKworICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iaik7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfbGZvX2NvbnRyb2xfc291cmNlX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmopCit7CisgIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChvYmopOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2xmb19jb250cm9sX3NvdXJjZV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgR3N0TEZPQ29udHJvbFNvdXJjZSAqc2VsZiA9IEdTVF9MRk9fQ09OVFJPTF9TT1VSQ0UgKG9iamVjdCk7CisKKyAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX1dBVkVGT1JNOgorICAgICAgZ19tdXRleF9sb2NrIChzZWxmLT5sb2NrKTsKKyAgICAgIGdzdF9sZm9fY29udHJvbF9zb3VyY2Vfc2V0X3dhdmVmb3JtIChzZWxmLAorICAgICAgICAgIChHc3RMRk9XYXZlZm9ybSkgZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpKTsKKyAgICAgIGdfbXV0ZXhfdW5sb2NrIChzZWxmLT5sb2NrKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GUkVRVUVOQ1k6eworICAgICAgZ2RvdWJsZSBmcmVxdWVuY3kgPSBnX3ZhbHVlX2dldF9kb3VibGUgKHZhbHVlKTsKKworICAgICAgZ19yZXR1cm5faWZfZmFpbCAoZnJlcXVlbmN5ID4gMAorICAgICAgICAgIHx8ICgoR3N0Q2xvY2tUaW1lKSAoR1NUX1NFQ09ORCAvIGZyZXF1ZW5jeSkpICE9IDApOworCisgICAgICBnX211dGV4X2xvY2sgKHNlbGYtPmxvY2spOworICAgICAgc2VsZi0+cHJpdi0+ZnJlcXVlbmN5ID0gZnJlcXVlbmN5OworICAgICAgc2VsZi0+cHJpdi0+cGVyaW9kID0gR1NUX1NFQ09ORCAvIGZyZXF1ZW5jeTsKKyAgICAgIGdfbXV0ZXhfdW5sb2NrIChzZWxmLT5sb2NrKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfVElNRVNISUZUOgorICAgICAgZ19tdXRleF9sb2NrIChzZWxmLT5sb2NrKTsKKyAgICAgIHNlbGYtPnByaXYtPnRpbWVzaGlmdCA9IGdfdmFsdWVfZ2V0X3VpbnQ2NCAodmFsdWUpOworICAgICAgZ19tdXRleF91bmxvY2sgKHNlbGYtPmxvY2spOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FNUExJVFVERTp7CisgICAgICBHVmFsdWUgKnZhbCA9IGdfdmFsdWVfZ2V0X2JveGVkICh2YWx1ZSk7CisKKyAgICAgIGlmIChzZWxmLT5wcml2LT50eXBlICE9IEdfVFlQRV9JTlZBTElEKSB7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwgKGdfdmFsdWVfdHlwZV90cmFuc2Zvcm1hYmxlIChzZWxmLT5wcml2LT50eXBlLAorICAgICAgICAgICAgICAgIEdfVkFMVUVfVFlQRSAodmFsKSkpOworCisgICAgICAgIGdfbXV0ZXhfbG9jayAoc2VsZi0+bG9jayk7CisgICAgICAgIGlmIChHX0lTX1ZBTFVFICgmc2VsZi0+cHJpdi0+YW1wbGl0dWRlKSkKKyAgICAgICAgICBnX3ZhbHVlX3Vuc2V0ICgmc2VsZi0+cHJpdi0+YW1wbGl0dWRlKTsKKworICAgICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5wcml2LT5hbXBsaXR1ZGUsIHNlbGYtPnByaXYtPnR5cGUpOworICAgICAgICBnX3ZhbHVlX3RyYW5zZm9ybSAodmFsLCAmc2VsZi0+cHJpdi0+YW1wbGl0dWRlKTsKKyAgICAgICAgZ19tdXRleF91bmxvY2sgKHNlbGYtPmxvY2spOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZ19tdXRleF9sb2NrIChzZWxmLT5sb2NrKTsKKyAgICAgICAgaWYgKEdfSVNfVkFMVUUgKCZzZWxmLT5wcml2LT5hbXBsaXR1ZGUpKQorICAgICAgICAgIGdfdmFsdWVfdW5zZXQgKCZzZWxmLT5wcml2LT5hbXBsaXR1ZGUpOworCisgICAgICAgIGdfdmFsdWVfaW5pdCAoJnNlbGYtPnByaXYtPmFtcGxpdHVkZSwgR19WQUxVRV9UWVBFICh2YWwpKTsKKyAgICAgICAgZ192YWx1ZV9jb3B5ICh2YWwsICZzZWxmLT5wcml2LT5hbXBsaXR1ZGUpOworICAgICAgICBnX211dGV4X3VubG9jayAoc2VsZi0+bG9jayk7CisgICAgICB9CisKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfT0ZGU0VUOnsKKyAgICAgIEdWYWx1ZSAqdmFsID0gZ192YWx1ZV9nZXRfYm94ZWQgKHZhbHVlKTsKKworICAgICAgaWYgKHNlbGYtPnByaXYtPnR5cGUgIT0gR19UWVBFX0lOVkFMSUQpIHsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFpbCAoZ192YWx1ZV90eXBlX3RyYW5zZm9ybWFibGUgKHNlbGYtPnByaXYtPnR5cGUsCisgICAgICAgICAgICAgICAgR19WQUxVRV9UWVBFICh2YWwpKSk7CisKKyAgICAgICAgZ19tdXRleF9sb2NrIChzZWxmLT5sb2NrKTsKKyAgICAgICAgaWYgKEdfSVNfVkFMVUUgKCZzZWxmLT5wcml2LT5vZmZzZXQpKQorICAgICAgICAgIGdfdmFsdWVfdW5zZXQgKCZzZWxmLT5wcml2LT5vZmZzZXQpOworCisgICAgICAgIGdfdmFsdWVfaW5pdCAoJnNlbGYtPnByaXYtPm9mZnNldCwgc2VsZi0+cHJpdi0+dHlwZSk7CisgICAgICAgIGdfdmFsdWVfdHJhbnNmb3JtICh2YWwsICZzZWxmLT5wcml2LT5vZmZzZXQpOworICAgICAgICBnX211dGV4X3VubG9jayAoc2VsZi0+bG9jayk7CisgICAgICB9IGVsc2UgeworICAgICAgICBnX211dGV4X2xvY2sgKHNlbGYtPmxvY2spOworICAgICAgICBpZiAoR19JU19WQUxVRSAoJnNlbGYtPnByaXYtPm9mZnNldCkpCisgICAgICAgICAgZ192YWx1ZV91bnNldCAoJnNlbGYtPnByaXYtPm9mZnNldCk7CisKKyAgICAgICAgZ192YWx1ZV9pbml0ICgmc2VsZi0+cHJpdi0+b2Zmc2V0LCBHX1ZBTFVFX1RZUEUgKHZhbCkpOworICAgICAgICBnX3ZhbHVlX2NvcHkgKHZhbCwgJnNlbGYtPnByaXYtPm9mZnNldCk7CisgICAgICAgIGdfbXV0ZXhfdW5sb2NrIChzZWxmLT5sb2NrKTsKKyAgICAgIH0KKworICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9sZm9fY29udHJvbF9zb3VyY2VfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIEdzdExGT0NvbnRyb2xTb3VyY2UgKnNlbGYgPSBHU1RfTEZPX0NPTlRST0xfU09VUkNFIChvYmplY3QpOworCisgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9XQVZFRk9STToKKyAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBzZWxmLT5wcml2LT53YXZlZm9ybSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRlJFUVVFTkNZOgorICAgICAgZ192YWx1ZV9zZXRfZG91YmxlICh2YWx1ZSwgc2VsZi0+cHJpdi0+ZnJlcXVlbmN5KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9USU1FU0hJRlQ6CisgICAgICBnX3ZhbHVlX3NldF91aW50NjQgKHZhbHVlLCBzZWxmLT5wcml2LT50aW1lc2hpZnQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FNUExJVFVERToKKyAgICAgIGdfdmFsdWVfc2V0X2JveGVkICh2YWx1ZSwgJnNlbGYtPnByaXYtPmFtcGxpdHVkZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfT0ZGU0VUOgorICAgICAgZ192YWx1ZV9zZXRfYm94ZWQgKHZhbHVlLCAmc2VsZi0+cHJpdi0+b2Zmc2V0KTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9sZm9fY29udHJvbF9zb3VyY2VfY2xhc3NfaW5pdCAoR3N0TEZPQ29udHJvbFNvdXJjZUNsYXNzICoga2xhc3MpCit7CisgIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7CisgIEdzdENvbnRyb2xTb3VyY2VDbGFzcyAqY3NvdXJjZV9jbGFzcyA9IEdTVF9DT05UUk9MX1NPVVJDRV9DTEFTUyAoa2xhc3MpOworCisgIHBhcmVudF9jbGFzcyA9IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCAoa2xhc3MpOworICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKGtsYXNzLCBzaXplb2YgKEdzdExGT0NvbnRyb2xTb3VyY2VQcml2YXRlKSk7CisKKyAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfbGZvX2NvbnRyb2xfc291cmNlX2ZpbmFsaXplOworICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3N0X2xmb19jb250cm9sX3NvdXJjZV9kaXNwb3NlOworICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfbGZvX2NvbnRyb2xfc291cmNlX3NldF9wcm9wZXJ0eTsKKyAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2xmb19jb250cm9sX3NvdXJjZV9nZXRfcHJvcGVydHk7CisKKyAgY3NvdXJjZV9jbGFzcy0+YmluZCA9IGdzdF9sZm9fY29udHJvbF9zb3VyY2VfYmluZDsKKworICAvKioKKyAgICogR3N0TEZPQ29udHJvbFNvdXJjZTp3YXZlZm9ybQorICAgKgorICAgKiBTcGVjaWZpZXMgdGhlIHdhdmVmb3JtIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHRoaXMgI0dzdExGT0NvbnRyb2xTb3VyY2UuCisgICAqIAorICAgKiovCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfV0FWRUZPUk0sCisgICAgICBnX3BhcmFtX3NwZWNfZW51bSAoIndhdmVmb3JtIiwgIldhdmVmb3JtIiwgIldhdmVmb3JtIiwKKyAgICAgICAgICBHU1RfVFlQRV9MRk9fV0FWRUZPUk0sIEdTVF9MRk9fV0FWRUZPUk1fU0lORSwKKyAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKworICAvKioKKyAgICogR3N0TEZPQ29udHJvbFNvdXJjZTpmcmVxdWVuY3kKKyAgICoKKyAgICogU3BlY2lmaWVzIHRoZSBmcmVxdWVuY3kgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgdGhlIHdhdmVmb3JtCisgICAqIG9mIHRoaXMgI0dzdExGT0NvbnRyb2xTb3VyY2UuIEl0IHNob3VsZCBiZSBsYXJnZSBlbm91Z2gKKyAgICogc28gdGhhdCB0aGUgcGVyaW9kIGlzIGxvbmdlciB0aGFuIG9uZSBuYW5vc2Vjb25kLgorICAgKiAKKyAgICoqLworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0ZSRVFVRU5DWSwKKyAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUgKCJmcmVxdWVuY3kiLCAiRnJlcXVlbmN5IiwKKyAgICAgICAgICAiRnJlcXVlbmN5IG9mIHRoZSB3YXZlZm9ybSIsIDAuMCwgR19NQVhET1VCTEUsIDEuMCwKKyAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKworICAvKioKKyAgICogR3N0TEZPQ29udHJvbFNvdXJjZTp0aW1lc2hpZnQKKyAgICoKKyAgICogU3BlY2lmaWVzIHRoZSB0aW1lc2hpZnQgdG8gdGhlIHJpZ2h0IHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHRoZSB3YXZlZm9ybQorICAgKiBvZiB0aGlzICNHc3RMRk9Db250cm9sU291cmNlIGluIG5hbm9zZWNvbmRzLgorICAgKgorICAgKiBUbyBnZXQgYSBuIG5hbm9zZWNvbmQgc2hpZnQgdG8gdGhlIGxlZnQgdXNlCisgICAqICIoR1NUX1NFQ09ORCAvIGZyZXF1ZW5jeSkgLSBuIi4KKyAgICoKKyAgICoqLworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1RJTUVTSElGVCwKKyAgICAgIGdfcGFyYW1fc3BlY191aW50NjQgKCJ0aW1lc2hpZnQiLCAiVGltZXNoaWZ0IiwKKyAgICAgICAgICAiVGltZXNoaWZ0IG9mIHRoZSB3YXZlZm9ybSB0byB0aGUgcmlnaHQiLCAwLCBHX01BWFVJTlQ2NCwgMCwKKyAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKworICAvKioKKyAgICogR3N0TEZPQ29udHJvbFNvdXJjZTphbXBsaXR1ZGUKKyAgICoKKyAgICogU3BlY2lmaWVzIHRoZSBhbXBsaXR1ZGUgZm9yIHRoZSB3YXZlZm9ybSBvZiB0aGlzICNHc3RMRk9Db250cm9sU291cmNlLgorICAgKgorICAgKiBJdCBzaG91bGQgYmUgZ2l2ZW4gYXMgYSAjR1ZhbHVlIHdpdGggYSB0eXBlIHRoYXQgY2FuIGJlIHRyYW5zZm9ybWVkCisgICAqIHRvIHRoZSB0eXBlIG9mIHRoZSBib3VuZCBwcm9wZXJ0eS4KKyAgICoqLworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0FNUExJVFVERSwKKyAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCAoImFtcGxpdHVkZSIsICJBbXBsaXR1ZGUiLCAiQW1wbGl0dWRlIG9mIHRoZSB3YXZlZm9ybSIsCisgICAgICAgICAgR19UWVBFX1ZBTFVFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKworICAvKioKKyAgICogR3N0TEZPQ29udHJvbFNvdXJjZTpvZmZzZXQKKyAgICoKKyAgICogU3BlY2lmaWVzIHRoZSBvZmZzZXQgZm9yIHRoZSB3YXZlZm9ybSBvZiB0aGlzICNHc3RMRk9Db250cm9sU291cmNlLgorICAgKgorICAgKiBJdCBzaG91bGQgYmUgZ2l2ZW4gYXMgYSAjR1ZhbHVlIHdpdGggYSB0eXBlIHRoYXQgY2FuIGJlIHRyYW5zZm9ybWVkCisgICAqIHRvIHRoZSB0eXBlIG9mIHRoZSBib3VuZCBwcm9wZXJ0eS4KKyAgICoqLworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX09GRlNFVCwKKyAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCAoIm9mZnNldCIsICJPZmZzZXQiLCAiT2Zmc2V0IG9mIHRoZSB3YXZlZm9ybSIsCisgICAgICAgICAgR19UWVBFX1ZBTFVFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5oIGIvbGlicy9nc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYxYWQwNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5oCkBAIC0wLDAgKzEsMTAyIEBACisvKiBHU3RyZWFtZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorICoKKyAqIGdzdGxmb2NvbnRyb2xzb3VyY2UuaDogQ29udHJvbCBzb3VyY2UgdGhhdCBwcm92aWRlcyBzb21lIHBlcmlvZGljIHdhdmVmb3JtcworICogICAgICAgICAgICAgICAgICAgICAgICBhcyBjb250cm9sIHZhbHVlcy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fR1NUX0xGT19DT05UUk9MX1NPVVJDRV9IX18KKyNkZWZpbmUgX19HU1RfTEZPX0NPTlRST0xfU09VUkNFX0hfXworCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKKyNpbmNsdWRlIDxnc3QvY29udHJvbGxlci9nc3Rjb250cm9sc291cmNlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBHU1RfVFlQRV9MRk9fQ09OVFJPTF9TT1VSQ0UgXAorICAoZ3N0X2xmb19jb250cm9sX3NvdXJjZV9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgR1NUX0xGT19DT05UUk9MX1NPVVJDRShvYmopIFwKKyAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfTEZPX0NPTlRST0xfU09VUkNFLCBHc3RMRk9Db250cm9sU291cmNlKSkKKyNkZWZpbmUgR1NUX0xGT19DT05UUk9MX1NPVVJDRV9DTEFTUyh2dGFibGUpIFwKKyAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgodnRhYmxlKSwgR1NUX1RZUEVfTEZPX0NPTlRST0xfU09VUkNFLCBHc3RMRk9Db250cm9sU291cmNlQ2xhc3MpKQorI2RlZmluZSBHU1RfSVNfTEZPX0NPTlRST0xfU09VUkNFKG9iaikgXAorICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9MRk9fQ09OVFJPTF9TT1VSQ0UpKQorI2RlZmluZSBHU1RfSVNfTEZPX0NPTlRST0xfU09VUkNFX0NMQVNTKHZ0YWJsZSkgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKCh2dGFibGUpLCBHU1RfVFlQRV9MRk9fQ09OVFJPTF9TT1VSQ0UpKQorI2RlZmluZSBHU1RfTEZPX0NPTlRST0xfU09VUkNFX0dFVF9DTEFTUyhpbnN0KSBcCisgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgoaW5zdCksIEdTVF9UWVBFX0xGT19DT05UUk9MX1NPVVJDRSwgR3N0TEZPQ29udHJvbFNvdXJjZUNsYXNzKSkKKworI2RlZmluZSBHU1RfVFlQRV9MRk9fV0FWRUZPUk0gKGdzdF9sZm9fd2F2ZWZvcm1fZ2V0X3R5cGUgKCkpCisKK3R5cGVkZWYgc3RydWN0IF9Hc3RMRk9Db250cm9sU291cmNlIEdzdExGT0NvbnRyb2xTb3VyY2U7Cit0eXBlZGVmIHN0cnVjdCBfR3N0TEZPQ29udHJvbFNvdXJjZUNsYXNzIEdzdExGT0NvbnRyb2xTb3VyY2VDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9Hc3RMRk9Db250cm9sU291cmNlUHJpdmF0ZSBHc3RMRk9Db250cm9sU291cmNlUHJpdmF0ZTsKKworLyoqCisgKiBHc3RMRk9XYXZlZm9ybToKKyAqIEBHU1RfTEZPX1dBVkVGT1JNX1NJTkU6IHNpbmUgd2F2ZWZvcm0KKyAqIEBHU1RfTEZPX1dBVkVGT1JNX1NRVUFSRTogc3F1YXJlIHdhdmVmb3JtCisgKiBAR1NUX0xGT19XQVZFRk9STV9TQVc6IHNhdyB3YXZlZm9ybQorICogQEdTVF9MRk9fV0FWRUZPUk1fUkVWRVJTRV9TQVc6IHJldmVyc2Ugc2F3IHdhdmVmb3JtCisgKiBAR1NUX0xGT19XQVZFRk9STV9UUklBTkdMRTogdHJpYW5nbGUgd2F2ZWZvcm0KKyAqCisgKiBUaGUgdmFyaW91cyB3YXZlZm9ybSBtb2RlcyBhdmFpbGFibGUuCisgKi8KK3R5cGVkZWYgZW51bQoreworICBHU1RfTEZPX1dBVkVGT1JNX1NJTkUsCisgIEdTVF9MRk9fV0FWRUZPUk1fU1FVQVJFLAorICBHU1RfTEZPX1dBVkVGT1JNX1NBVywKKyAgR1NUX0xGT19XQVZFRk9STV9SRVZFUlNFX1NBVywKKyAgR1NUX0xGT19XQVZFRk9STV9UUklBTkdMRQorfSBHc3RMRk9XYXZlZm9ybTsKKworLyoqCisgKiBHc3RMRk9Db250cm9sU291cmNlOgorICoKKyAqIFRoZSBpbnN0YW5jZSBzdHJ1Y3R1cmUgb2YgI0dzdENvbnRyb2xTb3VyY2UuCisgKi8KK3N0cnVjdCBfR3N0TEZPQ29udHJvbFNvdXJjZSB7CisgIEdzdENvbnRyb2xTb3VyY2UgcGFyZW50OworCisgIC8qIDxwcml2YXRlPiAqLworICBHc3RMRk9Db250cm9sU291cmNlUHJpdmF0ZSAqcHJpdjsKKyAgR011dGV4ICpsb2NrOworICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKK307CisKK3N0cnVjdCBfR3N0TEZPQ29udHJvbFNvdXJjZUNsYXNzIHsKKyAgR3N0Q29udHJvbFNvdXJjZUNsYXNzIHBhcmVudF9jbGFzczsKKyAgCisgIC8qPCBwcml2YXRlID4qLworICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKK307CisKK0dUeXBlIGdzdF9sZm9fY29udHJvbF9zb3VyY2VfZ2V0X3R5cGUgKHZvaWQpOworR1R5cGUgZ3N0X2xmb193YXZlZm9ybV9nZXRfdHlwZSAodm9pZCk7CisKKy8qIEZ1bmN0aW9ucyAqLworCitHc3RMRk9Db250cm9sU291cmNlICpnc3RfbGZvX2NvbnRyb2xfc291cmNlX25ldyAodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9MRk9fQ09OVFJPTF9TT1VSQ0VfSF9fICovCmRpZmYgLS1naXQgYS9saWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2Vwcml2YXRlLmggYi9saWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2Vwcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRkZjM1NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZXByaXZhdGUuaApAQCAtMCwwICsxLDY0IEBACisvKiBHU3RyZWFtZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgorICoKKyAqIGdzdGxmb2NvbnRyb2xzb3VyY2Vwcml2YXRlLmg6IFByaXZhdGUgZGVjbGFyYXRpb25zIGZvciB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RMRk9Db250cm9sU291cmNlCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0dTVF9MRk9fQ09OVFJPTF9TT1VSQ0VfUFJJVkFURV9IX18KKyNkZWZpbmUgX19HU1RfTEZPX0NPTlRST0xfU09VUkNFX1BSSVZBVEVfSF9fCisKK3R5cGVkZWYgc3RydWN0IF9Hc3RXYXZlZm9ybUltcGxlbWVudGF0aW9uCit7CisgIEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSBnZXRfaW50OworICBHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSBnZXRfaW50X3ZhbHVlX2FycmF5OworICBHc3RDb250cm9sU291cmNlR2V0VmFsdWUgZ2V0X3VpbnQ7CisgIEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5IGdldF91aW50X3ZhbHVlX2FycmF5OworICBHc3RDb250cm9sU291cmNlR2V0VmFsdWUgZ2V0X2xvbmc7CisgIEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5IGdldF9sb25nX3ZhbHVlX2FycmF5OworICBHc3RDb250cm9sU291cmNlR2V0VmFsdWUgZ2V0X3Vsb25nOworICBHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSBnZXRfdWxvbmdfdmFsdWVfYXJyYXk7CisgIEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSBnZXRfaW50NjQ7CisgIEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5IGdldF9pbnQ2NF92YWx1ZV9hcnJheTsKKyAgR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlIGdldF91aW50NjQ7CisgIEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5IGdldF91aW50NjRfdmFsdWVfYXJyYXk7CisgIEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSBnZXRfZmxvYXQ7CisgIEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5IGdldF9mbG9hdF92YWx1ZV9hcnJheTsKKyAgR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlIGdldF9kb3VibGU7CisgIEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5IGdldF9kb3VibGVfdmFsdWVfYXJyYXk7Cit9IEdzdFdhdmVmb3JtSW1wbGVtZW50YXRpb247CisKK3N0cnVjdCBfR3N0TEZPQ29udHJvbFNvdXJjZVByaXZhdGUKK3sKKyAgR1R5cGUgdHlwZTsgICAgICAgICAgICAgICAgICAgLyogdHlwZSBvZiB0aGUgaGFuZGxlZCBwcm9wZXJ0eSAqLworICBHVHlwZSBiYXNlOyAgICAgICAgICAgICAgICAgICAvKiBiYXNlLXR5cGUgb2YgdGhlIGhhbmRsZWQgcHJvcGVydHkgKi8KKworICBHVmFsdWUgbWluaW11bV92YWx1ZTsgICAgICAgICAvKiBtaW4gdmFsdWUgZm9yIHRoZSBoYW5kbGVkIHByb3BlcnR5ICovCisgIEdWYWx1ZSBtYXhpbXVtX3ZhbHVlOyAgICAgICAgIC8qIG1heCB2YWx1ZSBmb3IgdGhlIGhhbmRsZWQgcHJvcGVydHkgKi8KKworICBHc3RMRk9XYXZlZm9ybSB3YXZlZm9ybTsKKyAgZ2RvdWJsZSBmcmVxdWVuY3k7CisgIEdzdENsb2NrVGltZSBwZXJpb2Q7CisgIEdzdENsb2NrVGltZSB0aW1lc2hpZnQ7CisgIEdWYWx1ZSBhbXBsaXR1ZGU7CisgIEdWYWx1ZSBvZmZzZXQ7IAorfTsKKworI2VuZGlmIC8qIF9fR1NUX0xGT19DT05UUk9MX1NPVVJDRV9QUklWQVRFX0hfXyAqLworCmRpZmYgLS1naXQgYS9saWJzL2dzdC9jb250cm9sbGVyL2xpYi5jIGIvbGlicy9nc3QvY29udHJvbGxlci9saWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODExODVmCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9nc3QvY29udHJvbGxlci9saWIuYwpAQCAtMCwwICsxLDU4IEBACisvKiBHU3RyZWFtZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBTdGVmYW4gS29zdCA8ZW5zb25pYyBhdCB1c2VycyBkb3Qgc2YgZG90IG5ldD4KKyAqCisgKiBsaWIuYzogY29udHJvbGxlciBzdWJzeXN0ZW0gaW5pdAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDxnc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmg+CisKKy8qIGxpYnJhcnkgaW5pdGlhbGlzYXRpb24gKi8KKworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgY29udHJvbGxlcl9kZWJ1ZworR1NUX0RFQlVHX0NBVEVHT1JZIChHU1RfQ0FUX0RFRkFVTFQpOworCisvKioKKyAqIGdzdF9jb250cm9sbGVyX2luaXQ6CisgKiBAYXJnYzogcG9pbnRlciB0byB0aGUgY29tbWFuZGxpbmUgYXJndW1lbnQgY291bnQKKyAqIEBhcmd2OiBwb2ludGVyIHRvIHRoZSBjb21tYW5kbGluZSBhcmd1bWVudCB2YWx1ZXMKKyAqCisgKiBJbml0aWFsaXplcyB0aGUgdXNlIG9mIHRoZSBjb250cm9sbGVyIGxpYnJhcnkuIFN1Z2dlc3RlZCB0byBiZSBjYWxsZWQgcmlnaHQKKyAqIGFmdGVyIGdzdF9pbml0KCkuCisgKgorICogUmV0dXJuczogdGhlICVUUlVFIGZvciBzdWNjZXNzLgorICovCitnYm9vbGVhbgorZ3N0X2NvbnRyb2xsZXJfaW5pdCAoaW50ICphcmdjLCBjaGFyICoqKmFyZ3YpCit7CisgIHN0YXRpYyBnYm9vbGVhbiBfZ3N0X2NvbnRyb2xsZXJfaW5pdGlhbGl6ZWQgPSBGQUxTRTsKKworICBpZiAoX2dzdF9jb250cm9sbGVyX2luaXRpYWxpemVkKQorICAgIHJldHVybiBUUlVFOworCisgIF9nc3RfY29udHJvbGxlcl9pbml0aWFsaXplZCA9IFRSVUU7CisKKyAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKEdTVF9DQVRfREVGQVVMVCwgImdzdGNvbnRyb2xsZXIiLCAwLAorICAgICAgImR5bmFtaWMgcGFyYW1ldGVyIGNvbnRyb2wgZm9yIGdzdHJlYW1lciBlbGVtZW50cyIpOworCisgIHJldHVybiBUUlVFOworfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvZGF0YXByb3RvY29sL01ha2VmaWxlLmFtIGIvbGlicy9nc3QvZGF0YXByb3RvY29sL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YmQzODcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2dzdC9kYXRhcHJvdG9jb2wvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw4MSBAQAorbGliX0xUTElCUkFSSUVTID0gbGliZ3N0ZGF0YXByb3RvY29sLUBHU1RfTUFKT1JNSU5PUkAubGEKKworbGliZ3N0ZGF0YXByb3RvY29sX0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAvZ3N0L2RhdGFwcm90b2NvbAorbGliZ3N0ZGF0YXByb3RvY29sX0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZV9IRUFERVJTID0gXAorICAgIGRhdGFwcm90b2NvbC5oCitub2luc3RfSEVBREVSUyA9IGRwLXByaXZhdGUuaAorCitsaWJnc3RkYXRhcHJvdG9jb2xfQEdTVF9NQUpPUk1JTk9SQF9sYV9TT1VSQ0VTID0gXAorICAgIGRhdGFwcm90b2NvbC5jCisKK2xpYmdzdGRhdGFwcm90b2NvbF9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCitsaWJnc3RkYXRhcHJvdG9jb2xfQEdTVF9NQUpPUk1JTk9SQF9sYV9MSUJBREQgPSAkKEdTVF9PQkpfTElCUykKK2xpYmdzdGRhdGFwcm90b2NvbF9AR1NUX01BSk9STUlOT1JAX2xhX0xERkxBR1MgPSAkKEdTVF9MSUJfTERGTEFHUykgJChHU1RfQUxMX0xERkxBR1MpICQoR1NUX0xUX0xERkxBR1MpCisKK0NMRUFORklMRVMgPSAqLmdjbm8gKi5nY2RhICouZ2NvdiAqLmdjb3Yub3V0CisKKyUuYy5nY292OiAubGlicy9saWJnc3RkYXRhcHJvdG9jb2xfQEdTVF9NQUpPUk1JTk9SQF9sYS0lLmdjZGEgJS5jCisJJChHQ09WKSAtYiAtZiAtbyAkXiA+ICRALm91dAorCitnY292OiAkKGxpYmdzdGRhdGFwcm90b2NvbF9AR1NUX01BSk9STUlOT1JAX2xhX1NPVVJDRVM6PS5nY292KQorCitBbmRyb2lkLm1rOiBNYWtlZmlsZS5hbQorCWFuZHJvZ2VuaXplciAtOlBST0pFQ1QgZ3N0cmVhbWVyIC06U0hBUkVEIGxpYmdzdGRhdGFwcm90b2NvbC1AR1NUX01BSk9STUlOT1JAIC06VEFHUyBlbmcgZGVidWcgXAorCSAtOlJFTF9UT1AgJCh0b3Bfc3JjZGlyKSAtOkFCU19UT1AgJChhYnNfdG9wX3NyY2RpcikgXAorCSAtOlNPVVJDRVMgJChsaWJnc3RkYXRhcHJvdG9jb2xfQEdTVF9NQUpPUk1JTk9SQF9sYV9TT1VSQ0VTKSBcCisJIC06Q0ZMQUdTICQobGliZ3N0ZGF0YXByb3RvY29sX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSBcCisJIC06TERGTEFHUyAkKGxpYmdzdGRhdGFwcm90b2NvbF9AR1NUX01BSk9STUlOT1JAX2xhX0xERkxBR1MpIFwKKwkgICAgICAgICAgICQobGliZ3N0ZGF0YXByb3RvY29sX0BHU1RfTUFKT1JNSU5PUkBfbGFfTElCQUREKSBcCisJIC06SEVBREVSX1RBUkdFVCBnc3RyZWFtZXItQEdTVF9NQUpPUk1JTk9SQC9nc3QvZGF0YXByb3RvY29sIFwKKwkgLTpIRUFERVJTICQobGliZ3N0ZGF0YXByb3RvY29sX0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZV9IRUFERVJTKSBcCisJIC06UEFTU1RIUk9VR0ggTE9DQUxfQVJNX01PREU6PWFybSBcCisJPiAkQAorCisjIERpc2FibGVkIHVudGlsIHRoaXMgaXMgZml4ZWQ6CisjIGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTU5NDIwMgoraWYgRkFMU0UKK2lmIEhBVkVfSU5UUk9TUEVDVElPTgorQlVJTFRfR0lSU09VUkNFUyA9IEdzdERhdGFwcm90b2NvbC1AR1NUX01BSk9STUlOT1JALmdpcgorCitnaXJfaGVhZGVycz0kKHBhdHN1YnN0ICUsJChzcmNkaXIpLyUsICQobGliZ3N0ZGF0YXByb3RvY29sX0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZV9IRUFERVJTKSkKK2dpcl9zb3VyY2VzPSQocGF0c3Vic3QgJSwkKHNyY2RpcikvJSwgJChsaWJnc3RkYXRhcHJvdG9jb2xfQEdTVF9NQUpPUk1JTk9SQF9sYV9TT1VSQ0VTKSkKK2dpcl9jaW5jbHVkZXM9JChwYXRzdWJzdCAlLC0tYy1pbmNsdWRlPSdnc3QvZGF0YXByb3RvY29sLyUnLCQobGliZ3N0ZGF0YXByb3RvY29sX0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZV9IRUFERVJTKSkKKworR3N0RGF0YXByb3RvY29sLUBHU1RfTUFKT1JNSU5PUkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0ZGF0YXByb3RvY29sLUBHU1RfTUFKT1JNSU5PUkAubGEKKwkkKEFNX1ZfR0VOKVBLR19DT05GSUdfUEFUSD0iJChHU1RfUEtHX0NPTkZJR19QQVRIKSIgXAorCQlHU1RfUExVR0lOX1NZU1RFTV9QQVRIPSIiIEdTVF9QTFVHSU5fUEFUSD0iIiBHU1RfUkVHSVNUUllfVVBEQVRFPW5vIFwKKwkJJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIC12IC0tbmFtZXNwYWNlIEdzdERhdGFwcm90b2NvbCBcCisJCS0tc3RyaXAtcHJlZml4PUdzdCBcCisJCS0tbnN2ZXJzaW9uPUBHU1RfTUFKT1JNSU5PUkAgXAorCQktREdTVF9VU0VfVU5TVEFCTEVfQVBJIFwKKwkJLUkkKHRvcF9zcmNkaXIpIFwKKwkJLUkkKHRvcF9idWlsZGRpcikgXAorCQkkKGdpcl9jaW5jbHVkZXMpIFwKKwkJLS1hZGQtaW5jbHVkZS1wYXRoPSQodG9wX2J1aWxkZGlyKS9nc3QgXAorCQktLWxpYnJhcnktcGF0aD0kKHRvcF9idWlsZGRpcikvZ3N0IFwKKwkJLS1saWJyYXJ5PSQodG9wX2J1aWxkZGlyKS9nc3QvbGliZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCQktLWxpYnJhcnk9bGliZ3N0ZGF0YXByb3RvY29sLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCQktLWluY2x1ZGU9R3N0LUBHU1RfTUFKT1JNSU5PUkAgXAorCQktLWxpYnRvb2w9IiQodG9wX2J1aWxkZGlyKS9saWJ0b29sIiBcCisJCS0tcGtnIGdzdHJlYW1lci1AR1NUX01BSk9STUlOT1JAIFwKKwkJLS1wa2ctZXhwb3J0PWdzdHJlYW1lci1kYXRhcHJvdG9jb2wtQEdTVF9NQUpPUk1JTk9SQCBcCisJCS0tYWRkLWluaXQtc2VjdGlvbj0iZ3N0X2luaXQoTlVMTCxOVUxMKTsiIFwKKwkJLS1vdXRwdXQgJEAgXAorCQkkKGdpcl9oZWFkZXJzKSBcCisJCSQoZ2lyX3NvdXJjZXMpCisKKyMgSU5UUk9TUEVDVElPTl9HSVJESVIvSU5UUk9TUEVDVElPTl9UWVBFTElCRElSIGFyZW4ndCB0aGUgcmlnaHQgcGxhY2UgdG8KKyMgaW5zdGFsbCBhbnl0aGluZyAtIHdlIG5lZWQgdG8gaW5zdGFsbCBpbnNpZGUgb3VyIHByZWZpeC4KK2dpcmRpciA9ICQoZGF0YWRpcikvZ2lyLTEuMAorZ2lyX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVMpCisKK3R5cGVsaWJzZGlyID0gJChsaWJkaXIpL2dpcmVwb3NpdG9yeS0xLjAvCisKK3R5cGVsaWJzX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVM6Lmdpcj0udHlwZWxpYikKKworJS50eXBlbGliOiAlLmdpciAkKElOVFJPU1BFQ1RJT05fQ09NUElMRVIpCisJJChBTV9WX0dFTikkKElOVFJPU1BFQ1RJT05fQ09NUElMRVIpIC0taW5jbHVkZWRpcj0kKHNyY2RpcikgLS1pbmNsdWRlZGlyPSQoYnVpbGRkaXIpIC0taW5jbHVkZWRpcj0kKHRvcF9idWlsZGRpcikvZ3N0ICQoSU5UUk9TUEVDVElPTl9DT01QSUxFUl9PUFRTKSAkPCAtbyAkKEBGKQorCitDTEVBTkZJTEVTICs9ICQoQlVJTFRfR0lSU09VUkNFUykgJCh0eXBlbGlic19EQVRBKQorZW5kaWYKK2VuZGlmCmRpZmYgLS1naXQgYS9saWJzL2dzdC9kYXRhcHJvdG9jb2wvTWFrZWZpbGUuaW4gYi9saWJzL2dzdC9kYXRhcHJvdG9jb2wvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYyMTcyYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L2RhdGFwcm90b2NvbC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDgxNSBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4xIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSBsaWJzL2dzdC9kYXRhcHJvdG9jb2wKK0RJU1RfQ09NTU9OID0gJChsaWJnc3RkYXRhcHJvdG9jb2xfQEdTVF9NQUpPUk1JTk9SQF9pbmNsdWRlX0hFQURFUlMpIFwKKwkkKG5vaW5zdF9IRUFERVJTKSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtcHl0aG9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1zY3J1Yi1pbmNsdWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZnVuY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYXJzZXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2ludHJvc3BlY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jaGVjay1jaGVja3MubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ljb252Lm00ICQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00ICQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L25scy5tNCAkKHRvcF9zcmNkaXIpL200L3BvLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxfbWF4ID0gNDAKK2FtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCisgIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKK2FtX19ub2Jhc2Vfc3RyaXAgPSBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgorYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCisgICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAorICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAorICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKK2FtX19iYXNlX2xpc3QgPSBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKK2FtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChsaWJkaXIpIiBcCisJIiQoREVTVERJUikkKGxpYmdzdGRhdGFwcm90b2NvbF9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVkaXIpIgorTFRMSUJSQVJJRVMgPSAkKGxpYl9MVExJQlJBUklFUykKK2FtX19ERVBFTkRFTkNJRVNfMSA9CitsaWJnc3RkYXRhcHJvdG9jb2xfQEdTVF9NQUpPUk1JTk9SQF9sYV9ERVBFTkRFTkNJRVMgPSAgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorYW1fbGliZ3N0ZGF0YXByb3RvY29sX0BHU1RfTUFKT1JNSU5PUkBfbGFfT0JKRUNUUyA9ICBcCisJbGliZ3N0ZGF0YXByb3RvY29sX0BHU1RfTUFKT1JNSU5PUkBfbGEtZGF0YXByb3RvY29sLmxvCitsaWJnc3RkYXRhcHJvdG9jb2xfQEdTVF9NQUpPUk1JTk9SQF9sYV9PQkpFQ1RTID0gIFwKKwkkKGFtX2xpYmdzdGRhdGFwcm90b2NvbF9AR1NUX01BSk9STUlOT1JAX2xhX09CSkVDVFMpCitBTV9WX2x0ID0gJChhbV9fdl9sdF8kKFYpKQorYW1fX3ZfbHRfID0gJChhbV9fdl9sdF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X2x0XzAgPSAtLXNpbGVudAorbGliZ3N0ZGF0YXByb3RvY29sX0BHU1RfTUFKT1JNSU5PUkBfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSBcCisJLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCisJJChDQ0xEKSAkKGxpYmdzdGRhdGFwcm90b2NvbF9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgXAorCSQoQ0ZMQUdTKSAkKGxpYmdzdGRhdGFwcm90b2NvbF9AR1NUX01BSk9STUlOT1JAX2xhX0xERkxBR1MpIFwKKwkkKExERkxBR1MpIC1vICRACitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCisJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfJChWKSkKK2FtX192X0NDXyA9ICQoYW1fX3ZfQ0NfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgIiAkQDsKK0FNX1ZfYXQgPSAkKGFtX192X2F0XyQoVikpCithbV9fdl9hdF8gPSAkKGFtX192X2F0XyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfYXRfMCA9IEAKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEXyQoVikpCithbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICIgJEA7CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOXyQoVikpCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitTT1VSQ0VTID0gJChsaWJnc3RkYXRhcHJvdG9jb2xfQEdTVF9NQUpPUk1JTk9SQF9sYV9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChsaWJnc3RkYXRhcHJvdG9jb2xfQEdTVF9NQUpPUk1JTk9SQF9sYV9TT1VSQ0VTKQorSEVBREVSUyA9ICQobGliZ3N0ZGF0YXByb3RvY29sX0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZV9IRUFERVJTKSBcCisJJChub2luc3RfSEVBREVSUykKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVMgPSBAQVNACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JJU09OX1BBVEggPSBAQklTT05fUEFUSEAKK0NBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKK0NBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACitDQyA9IEBDQ0AKK0NDQVMgPSBAQ0NBU0AKK0NDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAorQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAorQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAorQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAorQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRBRElSID0gQERBVEFESVJACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACitETExUT09MID0gQERMTFRPT0xACitET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAorRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKK0VYRUVYVCA9IEBFWEVFWFRACitGRkxBR1MgPSBARkZMQUdTQAorRkdSRVAgPSBARkdSRVBACitGTEVYX1BBVEggPSBARkxFWF9QQVRIQAorR0NPViA9IEBHQ09WQAorR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACitHQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAorR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACitHTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKK0dMSUJfTElCUyA9IEBHTElCX0xJQlNACitHTElCX09OTFlfQ0ZMQUdTID0gQEdMSUJfT05MWV9DRkxBR1NACitHTElCX09OTFlfTElCUyA9IEBHTElCX09OTFlfTElCU0AKK0dMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAorR0xJQl9SRVEgPSBAR0xJQl9SRVFACitHTVBfTElCUyA9IEBHTVBfTElCU0AKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAorR1JFUCA9IEBHUkVQQAorR1NMX0xJQlMgPSBAR1NMX0xJQlNACitHU1RfQUdFID0gQEdTVF9BR0VACitHU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKK0dTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKK0dTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACitHU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAorR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACitHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FQAorR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAorR1NUX0RJU0FCTEVfTkVUX0RFRklORSA9IEBHU1RfRElTQUJMRV9ORVRfREVGSU5FQAorR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKK0dTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACitHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACitHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAorR1NUX0RJU0FCTEVfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1RSQUNFX0RFRklORUAKK0dTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkUgPSBAR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORUAKK0dTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkUgPSBAR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORUAKK0dTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FID0gQEdTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FQAorR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACitHU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKK0dTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACitHU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKK0dTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAorR1NUX01BSk9STUlOT1IgPSBAR1NUX01BSk9STUlOT1JACitHU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKK0dTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKK0dTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACitHU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKK0dTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKK0dTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKK0dTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACitHU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACitHU1RfUEtHX0RFUFMgPSBAR1NUX1BLR19ERVBTQAorR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKK0dTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgPSBAR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFREAKK0dTVF9QUklOVEZfRVhURU5TSU9OX1BPSU5URVJfRk9STUFUX0RFRklORSA9IEBHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkVACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FQAorR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAorR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKK0dTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OX0RFRklORSA9IEBHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkVACitHVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAorSEFWRV9ET0NCT09LMkhUTUwgPSBASEFWRV9ET0NCT09LMkhUTUxACitIQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAorSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAorSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAorSEFWRV9GSUcyREVWID0gQEhBVkVfRklHMkRFVkAKK0hBVkVfR01QID0gQEhBVkVfR01QQAorSEFWRV9HU0wgPSBASEFWRV9HU0xACitIQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAorSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAorSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKK0hBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAorSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKK0hPU1RfQ1BVID0gQEhPU1RfQ1BVQAorSFRNTF9ESVIgPSBASFRNTF9ESVJACitJTkVUX0FUT05fTElCUyA9IEBJTkVUX0FUT05fTElCU0AKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACitJTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKK0lOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKK0lOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKK0lOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAorSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKK0lOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKK0lOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACitJTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJESVIgPSBATElCRElSQAorTElCSUNPTlYgPSBATElCSUNPTlZACitMSUJJTlRMID0gQExJQklOVExACitMSUJNID0gQExJQk1ACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMT0NBTEVESVIgPSBATE9DQUxFRElSQAorTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAorTFRMSUJJTlRMID0gQExUTElCSU5UTEAKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUlOVCA9IEBNQUlOVEAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKK01TR01FUkdFID0gQE1TR01FUkdFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKK1BBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACitQQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAorUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACitQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BMVUdJTkRJUiA9IEBQTFVHSU5ESVJACitQT1NVQiA9IEBQT1NVQkAKK1BST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAorUFlUSE9OID0gQFBZVEhPTkAKK1BZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACitQWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAorUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAorUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1ZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACitWQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACitWQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACitWRVJTSU9OID0gQFZFUlNJT05ACitXQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKK1dJTjMyX0xJQlMgPSBAV0lOMzJfTElCU0AKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKK1hHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKK1hNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAorWFNMVFBST0MgPSBAWFNMVFBST0NACitYU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3BrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACitwa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAorcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3B5ZXhlY2RpciA9IEBweWV4ZWNkaXJACitweXRob25kaXIgPSBAcHl0aG9uZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitsaWJfTFRMSUJSQVJJRVMgPSBsaWJnc3RkYXRhcHJvdG9jb2wtQEdTVF9NQUpPUk1JTk9SQC5sYQorbGliZ3N0ZGF0YXByb3RvY29sX0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAvZ3N0L2RhdGFwcm90b2NvbAorbGliZ3N0ZGF0YXByb3RvY29sX0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZV9IRUFERVJTID0gXAorICAgIGRhdGFwcm90b2NvbC5oCisKK25vaW5zdF9IRUFERVJTID0gZHAtcHJpdmF0ZS5oCitsaWJnc3RkYXRhcHJvdG9jb2xfQEdTVF9NQUpPUk1JTk9SQF9sYV9TT1VSQ0VTID0gXAorICAgIGRhdGFwcm90b2NvbC5jCisKK2xpYmdzdGRhdGFwcm90b2NvbF9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCitsaWJnc3RkYXRhcHJvdG9jb2xfQEdTVF9NQUpPUk1JTk9SQF9sYV9MSUJBREQgPSAkKEdTVF9PQkpfTElCUykKK2xpYmdzdGRhdGFwcm90b2NvbF9AR1NUX01BSk9STUlOT1JAX2xhX0xERkxBR1MgPSAkKEdTVF9MSUJfTERGTEFHUykgJChHU1RfQUxMX0xERkxBR1MpICQoR1NUX0xUX0xERkxBR1MpCitDTEVBTkZJTEVTID0gKi5nY25vICouZ2NkYSAqLmdjb3YgKi5nY292Lm91dAorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgbGlicy9nc3QvZGF0YXByb3RvY29sL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251IGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKK2luc3RhbGwtbGliTFRMSUJSQVJJRVM6ICQobGliX0xUTElCUkFSSUVTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQobGliZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQobGliZGlyKSIKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCisJICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKKwkgIGVsc2UgOjsgZmk7IFwKKwlkb25lOyBcCisJdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKGxpYmRpciknIjsgXAorCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKGxpYmRpcikiOyBcCisJfQorCit1bmluc3RhbGwtbGliTFRMSUJSQVJJRVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgJChhbV9fc3RyaXBfZGlyKSBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKGxpYmRpcikvJCRmJyI7IFwKKwkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChsaWJkaXIpLyQkZiI7IFwKKwlkb25lCisKK2NsZWFuLWxpYkxUTElCUkFSSUVTOgorCS10ZXN0IC16ICIkKGxpYl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobGliX0xUTElCUkFSSUVTKQorCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGRpcj0iYGVjaG8gJCRwIHwgc2VkIC1lICdzfC9bXi9dKiQkfHwnYCI7IFwKKwkgIHRlc3QgIiQkZGlyIiAhPSAiJCRwIiB8fCBkaXI9LjsgXAorCSAgZWNobyAicm0gLWYgXCIkJHtkaXJ9L3NvX2xvY2F0aW9uc1wiIjsgXAorCSAgcm0gLWYgIiQke2Rpcn0vc29fbG9jYXRpb25zIjsgXAorCWRvbmUKK2xpYmdzdGRhdGFwcm90b2NvbC1AR1NUX01BSk9STUlOT1JALmxhOiAkKGxpYmdzdGRhdGFwcm90b2NvbF9AR1NUX01BSk9STUlOT1JAX2xhX09CSkVDVFMpICQobGliZ3N0ZGF0YXByb3RvY29sX0BHU1RfTUFKT1JNSU5PUkBfbGFfREVQRU5ERU5DSUVTKSAKKwkkKEFNX1ZfQ0NMRCkkKGxpYmdzdGRhdGFwcm90b2NvbF9AR1NUX01BSk9STUlOT1JAX2xhX0xJTkspIC1ycGF0aCAkKGxpYmRpcikgJChsaWJnc3RkYXRhcHJvdG9jb2xfQEdTVF9NQUpPUk1JTk9SQF9sYV9PQkpFQ1RTKSAkKGxpYmdzdGRhdGFwcm90b2NvbF9AR1NUX01BSk9STUlOT1JAX2xhX0xJQkFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0ZGF0YXByb3RvY29sX0BHU1RfTUFKT1JNSU5PUkBfbGEtZGF0YXByb3RvY29sLlBsb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCitsaWJnc3RkYXRhcHJvdG9jb2xfQEdTVF9NQUpPUk1JTk9SQF9sYS1kYXRhcHJvdG9jb2wubG86IGRhdGFwcm90b2NvbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZGF0YXByb3RvY29sX0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGRhdGFwcm90b2NvbF9AR1NUX01BSk9STUlOT1JAX2xhLWRhdGFwcm90b2NvbC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0ZGF0YXByb3RvY29sX0BHU1RfTUFKT1JNSU5PUkBfbGEtZGF0YXByb3RvY29sLlRwbyAtYyAtbyBsaWJnc3RkYXRhcHJvdG9jb2xfQEdTVF9NQUpPUk1JTk9SQF9sYS1kYXRhcHJvdG9jb2wubG8gYHRlc3QgLWYgJ2RhdGFwcm90b2NvbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BkYXRhcHJvdG9jb2wuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0ZGF0YXByb3RvY29sX0BHU1RfTUFKT1JNSU5PUkBfbGEtZGF0YXByb3RvY29sLlRwbyAkKERFUERJUikvbGliZ3N0ZGF0YXByb3RvY29sX0BHU1RfTUFKT1JNSU5PUkBfbGEtZGF0YXByb3RvY29sLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2RhdGFwcm90b2NvbC5jJyBvYmplY3Q9J2xpYmdzdGRhdGFwcm90b2NvbF9AR1NUX01BSk9STUlOT1JAX2xhLWRhdGFwcm90b2NvbC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGRhdGFwcm90b2NvbF9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGRhdGFwcm90b2NvbF9AR1NUX01BSk9STUlOT1JAX2xhLWRhdGFwcm90b2NvbC5sbyBgdGVzdCAtZiAnZGF0YXByb3RvY29sLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGRhdGFwcm90b2NvbC5jCisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCitpbnN0YWxsLWxpYmdzdGRhdGFwcm90b2NvbF9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVIRUFERVJTOiAkKGxpYmdzdGRhdGFwcm90b2NvbF9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVfSEVBREVSUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGxpYmdzdGRhdGFwcm90b2NvbF9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChsaWJnc3RkYXRhcHJvdG9jb2xfQEdTVF9NQUpPUk1JTk9SQF9pbmNsdWRlZGlyKSIKKwlAbGlzdD0nJChsaWJnc3RkYXRhcHJvdG9jb2xfQEdTVF9NQUpPUk1JTk9SQF9pbmNsdWRlX0hFQURFUlMpJzsgdGVzdCAtbiAiJChsaWJnc3RkYXRhcHJvdG9jb2xfQEdTVF9NQUpPUk1JTk9SQF9pbmNsdWRlZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgJyQoREVTVERJUikkKGxpYmdzdGRhdGFwcm90b2NvbF9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgIiQoREVTVERJUikkKGxpYmdzdGRhdGFwcm90b2NvbF9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVkaXIpIiB8fCBleGl0ICQkPzsgXAorCWRvbmUKKwordW5pbnN0YWxsLWxpYmdzdGRhdGFwcm90b2NvbF9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVIRUFERVJTOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQobGliZ3N0ZGF0YXByb3RvY29sX0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQobGliZ3N0ZGF0YXByb3RvY29sX0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZWRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwl0ZXN0IC1uICIkJGZpbGVzIiB8fCBleGl0IDA7IFwKKwllY2hvICIgKCBjZCAnJChERVNURElSKSQobGliZ3N0ZGF0YXByb3RvY29sX0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZWRpciknICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorCWNkICIkKERFU1RESVIpJChsaWJnc3RkYXRhcHJvdG9jb2xfQEdTVF9NQUpPUk1JTk9SQF9pbmNsdWRlZGlyKSIgJiYgcm0gLWYgJCRmaWxlcworCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKEhFQURFUlMpCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChsaWJkaXIpIiAiJChERVNURElSKSQobGliZ3N0ZGF0YXByb3RvY29sX0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZWRpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYkxUTElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOiAgXAorCWluc3RhbGwtbGliZ3N0ZGF0YXByb3RvY29sX0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZUhFQURFUlMKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtbGliTFRMSUJSQVJJRVMKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtbGliTFRMSUJSQVJJRVMgXAorCXVuaW5zdGFsbC1saWJnc3RkYXRhcHJvdG9jb2xfQEdTVF9NQUpPUk1JTk9SQF9pbmNsdWRlSEVBREVSUworCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJMVExJQlJBUklFUyBjbGVhbi1saWJ0b29sIGN0YWdzIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIFwKKwlpbnN0YWxsLWxpYkxUTElCUkFSSUVTIFwKKwlpbnN0YWxsLWxpYmdzdGRhdGFwcm90b2NvbF9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVIRUFERVJTIFwKKwlpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIFwKKwlpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBcCisJaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIFwKKwl1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTIFwKKwl1bmluc3RhbGwtbGliZ3N0ZGF0YXByb3RvY29sX0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZUhFQURFUlMKKworCislLmMuZ2NvdjogLmxpYnMvbGliZ3N0ZGF0YXByb3RvY29sX0BHU1RfTUFKT1JNSU5PUkBfbGEtJS5nY2RhICUuYworCSQoR0NPVikgLWIgLWYgLW8gJF4gPiAkQC5vdXQKKworZ2NvdjogJChsaWJnc3RkYXRhcHJvdG9jb2xfQEdTVF9NQUpPUk1JTk9SQF9sYV9TT1VSQ0VTOj0uZ2NvdikKKworQW5kcm9pZC5tazogTWFrZWZpbGUuYW0KKwlhbmRyb2dlbml6ZXIgLTpQUk9KRUNUIGdzdHJlYW1lciAtOlNIQVJFRCBsaWJnc3RkYXRhcHJvdG9jb2wtQEdTVF9NQUpPUk1JTk9SQCAtOlRBR1MgZW5nIGRlYnVnIFwKKwkgLTpSRUxfVE9QICQodG9wX3NyY2RpcikgLTpBQlNfVE9QICQoYWJzX3RvcF9zcmNkaXIpIFwKKwkgLTpTT1VSQ0VTICQobGliZ3N0ZGF0YXByb3RvY29sX0BHU1RfTUFKT1JNSU5PUkBfbGFfU09VUkNFUykgXAorCSAtOkNGTEFHUyAkKGxpYmdzdGRhdGFwcm90b2NvbF9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgXAorCSAtOkxERkxBR1MgJChsaWJnc3RkYXRhcHJvdG9jb2xfQEdTVF9NQUpPUk1JTk9SQF9sYV9MREZMQUdTKSBcCisJICAgICAgICAgICAkKGxpYmdzdGRhdGFwcm90b2NvbF9AR1NUX01BSk9STUlOT1JAX2xhX0xJQkFERCkgXAorCSAtOkhFQURFUl9UQVJHRVQgZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAvZ3N0L2RhdGFwcm90b2NvbCBcCisJIC06SEVBREVSUyAkKGxpYmdzdGRhdGFwcm90b2NvbF9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVfSEVBREVSUykgXAorCSAtOlBBU1NUSFJPVUdIIExPQ0FMX0FSTV9NT0RFOj1hcm0gXAorCT4gJEAKKworI0dzdERhdGFwcm90b2NvbC1AR1NUX01BSk9STUlOT1JALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdGRhdGFwcm90b2NvbC1AR1NUX01BSk9STUlOT1JALmxhCisjCSQoQU1fVl9HRU4pUEtHX0NPTkZJR19QQVRIPSIkKEdTVF9QS0dfQ09ORklHX1BBVEgpIiBcCisjCQlHU1RfUExVR0lOX1NZU1RFTV9QQVRIPSIiIEdTVF9QTFVHSU5fUEFUSD0iIiBHU1RfUkVHSVNUUllfVVBEQVRFPW5vIFwKKyMJCSQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSAtdiAtLW5hbWVzcGFjZSBHc3REYXRhcHJvdG9jb2wgXAorIwkJLS1zdHJpcC1wcmVmaXg9R3N0IFwKKyMJCS0tbnN2ZXJzaW9uPUBHU1RfTUFKT1JNSU5PUkAgXAorIwkJLURHU1RfVVNFX1VOU1RBQkxFX0FQSSBcCisjCQktSSQodG9wX3NyY2RpcikgXAorIwkJLUkkKHRvcF9idWlsZGRpcikgXAorIwkJJChnaXJfY2luY2x1ZGVzKSBcCisjCQktLWFkZC1pbmNsdWRlLXBhdGg9JCh0b3BfYnVpbGRkaXIpL2dzdCBcCisjCQktLWxpYnJhcnktcGF0aD0kKHRvcF9idWlsZGRpcikvZ3N0IFwKKyMJCS0tbGlicmFyeT0kKHRvcF9idWlsZGRpcikvZ3N0L2xpYmdzdHJlYW1lci1AR1NUX01BSk9STUlOT1JALmxhIFwKKyMJCS0tbGlicmFyeT1saWJnc3RkYXRhcHJvdG9jb2wtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisjCQktLWluY2x1ZGU9R3N0LUBHU1RfTUFKT1JNSU5PUkAgXAorIwkJLS1saWJ0b29sPSIkKHRvcF9idWlsZGRpcikvbGlidG9vbCIgXAorIwkJLS1wa2cgZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAgXAorIwkJLS1wa2ctZXhwb3J0PWdzdHJlYW1lci1kYXRhcHJvdG9jb2wtQEdTVF9NQUpPUk1JTk9SQCBcCisjCQktLWFkZC1pbml0LXNlY3Rpb249ImdzdF9pbml0KE5VTEwsTlVMTCk7IiBcCisjCQktLW91dHB1dCAkQCBcCisjCQkkKGdpcl9oZWFkZXJzKSBcCisjCQkkKGdpcl9zb3VyY2VzKQorCisjJS50eXBlbGliOiAlLmdpciAkKElOVFJPU1BFQ1RJT05fQ09NUElMRVIpCisjCSQoQU1fVl9HRU4pJChJTlRST1NQRUNUSU9OX0NPTVBJTEVSKSAtLWluY2x1ZGVkaXI9JChzcmNkaXIpIC0taW5jbHVkZWRpcj0kKGJ1aWxkZGlyKSAtLWluY2x1ZGVkaXI9JCh0b3BfYnVpbGRkaXIpL2dzdCAkKElOVFJPU1BFQ1RJT05fQ09NUElMRVJfT1BUUykgJDwgLW8gJChARikKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jIGIvbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMmUxODIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmMKQEAgLTAsMCArMSw3NjggQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA2IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKyAqCisgKiBkYXRhcHJvdG9jb2wuYzogRnVuY3Rpb25zIGltcGxlbWVudGluZyB0aGUgR1N0cmVhbWVyIERhdGEgUHJvdG9jb2wKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKioKKyAqIFNFQ1RJT046Z3N0ZGF0YXByb3RvY29sCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IFNlcmlhbGl6YXRpb24gb2YgY2FwcywgYnVmZmVycyBhbmQgZXZlbnRzLgorICogQHNlZV9hbHNvOiAjR3N0Q2FwcywgI0dzdEV2ZW50LCAjR3N0QnVmZmVyCisgKgorICogVGhpcyBoZWxwZXIgbGlicmFyeSBwcm92aWRlcyBzZXJpYWxpemF0aW9uIG9mIEdzdEJ1ZmZlciwgR3N0Q2FwcyBhbmQKKyAqIEdzdEV2ZW50IHN0cnVjdHVyZXMuCisgKgorICogVGhpcyBzZXJpYWxpemF0aW9uIGlzIHVzZWZ1bCB3aGVuIEdTdHJlYW1lciBuZWVkcyB0byBpbnRlcmZhY2Ugd2l0aAorICogdGhlIG91dHNpZGUgd29ybGQgdG8gdHJhbnNwb3J0IGRhdGEgYmV0d2VlbiBkaXN0aW5jdCBHU3RyZWFtZXIgcGlwZWxpbmVzLgorICogVGhlIGNvbm5lY3Rpb25zIHdpdGggdGhlIG91dHNpZGUgd29ybGQgZ2VuZXJhbGx5IGRvbid0IGhhdmUgbWVjaGFuaXNtcworICogdG8gdHJhbnNwb3J0IHByb3BlcnRpZXMgb2YgdGhlc2Ugc3RydWN0dXJlcy4KKyAqCisgKiBGb3IgZXhhbXBsZSwgdHJhbnNwb3J0aW5nIGJ1ZmZlcnMgYWNyb3NzIG5hbWVkIHBpcGVzIG9yIG5ldHdvcmsgY29ubmVjdGlvbnMKKyAqIGRvZXNuJ3QgbWFpbnRhaW4gdGhlIGJ1ZmZlciBzaXplIGFuZCBzZXBhcmF0aW9uLgorICoKKyAqIFRoaXMgZGF0YSBwcm90b2NvbCBhc3N1bWVzIGEgcmVsaWFibGUgY29ubmVjdGlvbi1vcmllbnRlZCB0cmFuc3BvcnQsIHN1Y2ggYXMKKyAqIFRDUCwgYSBwaXBlLCBvciBhIGZpbGUuICBUaGUgcHJvdG9jb2wgZG9lcyBub3Qgc2VyaWFsaXplIHRoZSBjYXBzIGZvcgorICogZWFjaCBidWZmZXI7IGluc3RlYWQsIGl0IHRyYW5zcG9ydCB0aGUgY2FwcyBvbmx5IHdoZW4gdGhleSBjaGFuZ2UgaW4gdGhlCisgKiBzdHJlYW0uICBUaGlzIGltcGxpZXMgdGhhdCB0aGVyZSB3aWxsIGFsd2F5cyBiZSBhIGNhcHMgcGFja2V0IGJlZm9yZSBhbnkKKyAqIGJ1ZmZlciBwYWNrZXRzLgorICoKKyAqIFRoZSB2ZXJzaW9uaW5nIG9mIHRoZSBwcm90b2NvbCBpcyBpbmRlcGVuZGVudCBvZiBHU3RyZWFtZXIncyB2ZXJzaW9uLgorICogVGhlIG1ham9yIG51bWJlciBnZXRzIGluY3JlbWVudGVkLCBhbmQgdGhlIG1pbm9yIHJlc2V0LCBmb3IgaW5jb21wYXRpYmxlCisgKiBjaGFuZ2VzLiAgVGhlIG1pbm9yIG51bWJlciBnZXRzIGluY3JlbWVudGVkIGZvciBjb21wYXRpYmxlIGNoYW5nZXMgdGhhdAorICogYWxsb3cgY2xpZW50cyB3aG8gZG8gbm90IGNvbXBsZXRlbHkgdW5kZXJzdGFuZCB0aGUgbmV3ZXIgcHJvdG9jb2wgdmVyc2lvbgorICogdG8gc3RpbGwgZGVjb2RlIHdoYXQgdGhleSBkbyB1bmRlcnN0YW5kLgorICoKKyAqIFZlcnNpb24gMC4yIHNlcmlhbGl6ZXMgb25seSBhIHNtYWxsIHN1YnNldCBvZiBhbGwgZXZlbnRzLCB3aXRoIGEgY3VzdG9tCisgKiBwYXlsb2FkIGZvciBlYWNoIHR5cGUuICBBbHNvLCBhbGwgR0RQIHN0cmVhbXMgc3RhcnQgd2l0aCB0aGUgaW5pdGlhbCBjYXBzCisgKiBwYWNrZXQuCisgKgorICogVmVyc2lvbiAxLjAgc2VyaWFsaXplcyBhbGwgZXZlbnRzIGJ5IHRha2luZyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mCisgKiB0aGUgZXZlbnQgYXMgdGhlIHBheWxvYWQuICBJbiBhZGRpdGlvbiwgR0RQIHN0cmVhbXMgY2FuIG5vdyBzdGFydCB3aXRoCisgKiBldmVudHMgYXMgd2VsbCwgYXMgcmVxdWlyZWQgYnkgdGhlIG5ldyBkYXRhIHN0cmVhbSBtb2RlbCBpbiBHU3RyZWFtZXIgMC4xMC4KKyAqCisgKiBDb252ZXJ0aW5nIGJ1ZmZlcnMsIGNhcHMgYW5kIGV2ZW50cyB0byBHRFAgYnVmZmVycyBpcyBkb25lIHVzaW5nIGEKKyAqICNHc3REUFBhY2tldGl6ZXIgb2JqZWN0IGFuZCBpbnZva2luZyBpdHMgcGFja2V0aXplciBmdW5jdGlvbnMuCisgKiBGb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgcmVhc29ucywgdGhlIG9sZCAwLjIgbWV0aG9kcyBhcmUgc3RpbGwKKyAqIGF2YWlsYWJsZSBidXQgZGVwcmVjYXRlZC4KKyAqCisgKiBGb3IgcmVmZXJlbmNlLCB0aGlzIGltYWdlIHNob3dzIHRoZSBieXRlIGxheW91dCBvZiB0aGUgR0RQIGhlYWRlcjoKKyAqCisgKiA8aW5saW5lZ3JhcGhpYyBmb3JtYXQ9IlBORyIgZmlsZXJlZj0iZ2RwLWhlYWRlci5wbmciPjwvaW5saW5lZ3JhcGhpYz4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuaD4KKyNpbmNsdWRlIDxnbGliL2dwcmludGYuaD4gICAgICAgLyogZ19zcHJpbnRmICovCisjaW5jbHVkZSA8c3RyaW5nLmg+ICAgICAgICAgICAgIC8qIHN0cmxlbiAqLworI2luY2x1ZGUgImRwLXByaXZhdGUuaCIKKworLyogZGVidWcgY2F0ZWdvcnkgKi8KK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGRhdGFfcHJvdG9jb2xfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZGF0YV9wcm90b2NvbF9kZWJ1ZworCisvKiBoZWxwZXIgbWFjcm9zICovCisKKy8qIHdyaXRlIGZpcnN0IDYgYnl0ZXMgb2YgaGVhZGVyICovCisjZGVmaW5lIEdTVF9EUF9JTklUX0hFQURFUihoLCB2ZXJzaW9uLCBmbGFncywgdHlwZSkJCVwKK0dfU1RNVF9TVEFSVCB7CQkJCQkJCVwKKyAgZ2ludCBtYWogPSAwLCBtaW4gPSAwOwkJCQkJXAorICBzd2l0Y2ggKHZlcnNpb24pIHsJCQkJCQlcCisgICAgY2FzZSBHU1RfRFBfVkVSU0lPTl8wXzI6IG1haiA9IDA7IG1pbiA9IDI7IGJyZWFrOwkJXAorICAgIGNhc2UgR1NUX0RQX1ZFUlNJT05fMV8wOiBtYWogPSAxOyBtaW4gPSAwOyBicmVhazsJCVwKKyAgfQkJCQkJCQkJXAorICBoWzBdID0gKGd1aW50OCkgbWFqOwkJCQkJCVwKKyAgaFsxXSA9IChndWludDgpIG1pbjsJCQkJCQlcCisgIGhbMl0gPSAoZ3VpbnQ4KSBmbGFnczsJCQkJCVwKKyAgaFszXSA9IDA7IC8qIHBhZGRpbmcgYnl0ZSAqLwkJCQkJXAorICBHU1RfV1JJVEVfVUlOVDE2X0JFIChoICsgNCwgdHlwZSk7CQkJCVwKK30gR19TVE1UX0VORAorCisjZGVmaW5lIEdTVF9EUF9TRVRfQ1JDKGgsIGZsYWdzLCBwYXlsb2FkLCBsZW5ndGgpOwkJXAorR19TVE1UX1NUQVJUIHsJCQkJCQkJXAorICBndWludDE2IGNyYyA9IDA7CQkJCQkJXAorICBpZiAoZmxhZ3MgJiBHU1RfRFBfSEVBREVSX0ZMQUdfQ1JDX0hFQURFUikJCQlcCisgICAgLyogd2UgZG9uJ3QgY3JjIHRoZSBsYXN0IGZvdXIgYnl0ZXMgc2luY2UgdGhleSBhcmUgY3JjJ3MgKi8gXAorICAgIGNyYyA9IGdzdF9kcF9jcmMgKGgsIDU4KTsJCQkJCVwKKyAgR1NUX1dSSVRFX1VJTlQxNl9CRSAoaCArIDU4LCBjcmMpOwkJCQlcCisJCQkJCQkJCVwKKyAgY3JjID0gMDsJCQkJCQkJXAorICBpZiAobGVuZ3RoICYmIChmbGFncyAmIEdTVF9EUF9IRUFERVJfRkxBR19DUkNfUEFZTE9BRCkpCVwKKyAgICBjcmMgPSBnc3RfZHBfY3JjIChwYXlsb2FkLCBsZW5ndGgpOwkJCQlcCisgIEdTVF9XUklURV9VSU5UMTZfQkUgKGggKyA2MCwgY3JjKTsJCQkJXAorfSBHX1NUTVRfRU5ECisKKy8qIGNhbGN1bGF0ZSBhIENDSVRUIDE2IGJpdCBDUkMgY2hlY2sgdmFsdWUgZm9yIGEgZ2l2ZW4gYnl0ZSBhcnJheSAqLworLyoKKyAqIHRoaXMgY29kZSBzbmlwcGV0IGlzIGFkYXB0ZWQgZnJvbSBhIHdlYiBwYWdlIEkgZm91bmQKKyAqIGl0IGlzIGlkZW50aWNhbCBleGNlcHQgZm9yIGNsZWFudXBzLCBhbmQgYSBmaW5hbCBYT1Igd2l0aCAweGZmZmYKKyAqIGFzIG91dGxpbmVkIGluIHRoZSB1ZWNwIHNwZWMKKyAqCisgKiBYTU9ERU0gICAgeF4xNiArIHheMTIgKyB4XjUgKyAxCisgKi8KKworI2RlZmluZSBQT0xZICAgICAgIDB4MTAyMQorI2RlZmluZSBDUkNfSU5JVCAgIDB4RkZGRgorCisvKioqIEhFTFBFUiBGVU5DVElPTlMgKioqLworCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9kcF9oZWFkZXJfZnJvbV9idWZmZXJfYW55IChjb25zdCBHc3RCdWZmZXIgKiBidWZmZXIsIEdzdERQSGVhZGVyRmxhZyBmbGFncywKKyAgICBndWludCAqIGxlbmd0aCwgZ3VpbnQ4ICoqIGhlYWRlciwgR3N0RFBWZXJzaW9uIHZlcnNpb24pCit7CisgIGd1aW50OCAqaDsKKyAgZ3VpbnQxNiBmbGFnc19tYXNrOworICBndWludDggKmRhdGE7CisgIGdzaXplIHNpemU7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVIgKGJ1ZmZlciksIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGxlbmd0aCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoaGVhZGVyLCBGQUxTRSk7CisKKyAgKmxlbmd0aCA9IEdTVF9EUF9IRUFERVJfTEVOR1RIOworICBoID0gZ19tYWxsb2MwIChHU1RfRFBfSEVBREVSX0xFTkdUSCk7CisKKyAgLyogdmVyc2lvbiwgZmxhZ3MsIHR5cGUgKi8KKyAgR1NUX0RQX0lOSVRfSEVBREVSIChoLCB2ZXJzaW9uLCBmbGFncywgR1NUX0RQX1BBWUxPQURfQlVGRkVSKTsKKworICBkYXRhID0gZ3N0X2J1ZmZlcl9tYXAgKChHc3RCdWZmZXIgKikgYnVmZmVyLCAmc2l6ZSwgTlVMTCwgR1NUX01BUF9SRUFEKTsKKworICAvKiBidWZmZXIgcHJvcGVydGllcyAqLworICBHU1RfV1JJVEVfVUlOVDMyX0JFIChoICsgNiwgc2l6ZSk7CisgIEdTVF9XUklURV9VSU5UNjRfQkUgKGggKyAxMCwgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikpOworICBHU1RfV1JJVEVfVUlOVDY0X0JFIChoICsgMTgsIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikpOworICBHU1RfV1JJVEVfVUlOVDY0X0JFIChoICsgMjYsIEdTVF9CVUZGRVJfT0ZGU0VUIChidWZmZXIpKTsKKyAgR1NUX1dSSVRFX1VJTlQ2NF9CRSAoaCArIDM0LCBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKGJ1ZmZlcikpOworCisgIC8qIGRhdGEgZmxhZ3M7IGVhdHMgdHdvIGJ5dGVzIGZyb20gdGhlIEFCSSBhcmVhICovCisgIC8qIHdlIGNvcHkgZXZlcnl0aGluZyBidXQgdGhlIHJlYWQtb25seSBmbGFncyAqLworICBmbGFnc19tYXNrID0gR1NUX0JVRkZFUl9GTEFHX0xJVkUgfCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCB8CisgICAgICBHU1RfQlVGRkVSX0ZMQUdfSU5fQ0FQUyB8IEdTVF9CVUZGRVJfRkxBR19HQVAgfAorICAgICAgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQ7CisKKyAgR1NUX1dSSVRFX1VJTlQxNl9CRSAoaCArIDQyLCBHU1RfQlVGRkVSX0ZMQUdTIChidWZmZXIpICYgZmxhZ3NfbWFzayk7CisKKyAgR1NUX0RQX1NFVF9DUkMgKGgsIGZsYWdzLCBkYXRhLCBzaXplKTsKKworICBnc3RfYnVmZmVyX3VubWFwICgoR3N0QnVmZmVyICopIGJ1ZmZlciwgZGF0YSwgc2l6ZSk7CisKKyAgR1NUX0xPRyAoImNyZWF0ZWQgaGVhZGVyIGZyb20gYnVmZmVyOiIpOworICBnc3RfZHBfZHVtcF9ieXRlX2FycmF5IChoLCBHU1RfRFBfSEVBREVSX0xFTkdUSCk7CisgICpoZWFkZXIgPSBoOworICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfZHBfcGFja2V0X2Zyb21fY2Fwc19hbnkgKGNvbnN0IEdzdENhcHMgKiBjYXBzLCBHc3REUEhlYWRlckZsYWcgZmxhZ3MsCisgICAgZ3VpbnQgKiBsZW5ndGgsIGd1aW50OCAqKiBoZWFkZXIsIGd1aW50OCAqKiBwYXlsb2FkLCBHc3REUFZlcnNpb24gdmVyc2lvbikKK3sKKyAgZ3VpbnQ4ICpoOworICBndWNoYXIgKnN0cmluZzsKKyAgZ3VpbnQgcGF5bG9hZF9sZW5ndGg7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DQVBTIChjYXBzKSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAobGVuZ3RoLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChoZWFkZXIsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBheWxvYWQsIEZBTFNFKTsKKworICAqbGVuZ3RoID0gR1NUX0RQX0hFQURFUl9MRU5HVEg7CisgIGggPSBnX21hbGxvYzAgKEdTVF9EUF9IRUFERVJfTEVOR1RIKTsKKworICBzdHJpbmcgPSAoZ3VjaGFyICopIGdzdF9jYXBzX3RvX3N0cmluZyAoY2Fwcyk7CisgIHBheWxvYWRfbGVuZ3RoID0gc3RybGVuICgoZ2NoYXIgKikgc3RyaW5nKSArIDE7ICAgICAgIC8qIGluY2x1ZGUgdHJhaWxpbmcgMCAqLworCisgIC8qIHZlcnNpb24sIGZsYWdzLCB0eXBlICovCisgIEdTVF9EUF9JTklUX0hFQURFUiAoaCwgdmVyc2lvbiwgZmxhZ3MsIEdTVF9EUF9QQVlMT0FEX0NBUFMpOworCisgIC8qIGJ1ZmZlciBwcm9wZXJ0aWVzICovCisgIEdTVF9XUklURV9VSU5UMzJfQkUgKGggKyA2LCBwYXlsb2FkX2xlbmd0aCk7CisgIEdTVF9XUklURV9VSU5UNjRfQkUgKGggKyAxMCwgKGd1aW50NjQpIDApOworICBHU1RfV1JJVEVfVUlOVDY0X0JFIChoICsgMTgsIChndWludDY0KSAwKTsKKyAgR1NUX1dSSVRFX1VJTlQ2NF9CRSAoaCArIDI2LCAoZ3VpbnQ2NCkgMCk7CisgIEdTVF9XUklURV9VSU5UNjRfQkUgKGggKyAzNCwgKGd1aW50NjQpIDApOworCisgIEdTVF9EUF9TRVRfQ1JDIChoLCBmbGFncywgc3RyaW5nLCBwYXlsb2FkX2xlbmd0aCk7CisKKyAgR1NUX0xPRyAoImNyZWF0ZWQgaGVhZGVyIGZyb20gY2FwczoiKTsKKyAgZ3N0X2RwX2R1bXBfYnl0ZV9hcnJheSAoaCwgR1NUX0RQX0hFQURFUl9MRU5HVEgpOworICAqaGVhZGVyID0gaDsKKyAgKnBheWxvYWQgPSBzdHJpbmc7CisgIHJldHVybiBUUlVFOworfQorCisKKy8qKiogUFVCTElDIEZVTkNUSU9OUyAqKiovCisKK3N0YXRpYyBjb25zdCBndWludDE2IGdzdF9kcF9jcmNfdGFibGVbMjU2XSA9IHsKKyAgMHgwMDAwLCAweDEwMjEsIDB4MjA0MiwgMHgzMDYzLCAweDQwODQsIDB4NTBhNSwgMHg2MGM2LCAweDcwZTcsCisgIDB4ODEwOCwgMHg5MTI5LCAweGExNGEsIDB4YjE2YiwgMHhjMThjLCAweGQxYWQsIDB4ZTFjZSwgMHhmMWVmLAorICAweDEyMzEsIDB4MDIxMCwgMHgzMjczLCAweDIyNTIsIDB4NTJiNSwgMHg0Mjk0LCAweDcyZjcsIDB4NjJkNiwKKyAgMHg5MzM5LCAweDgzMTgsIDB4YjM3YiwgMHhhMzVhLCAweGQzYmQsIDB4YzM5YywgMHhmM2ZmLCAweGUzZGUsCisgIDB4MjQ2MiwgMHgzNDQzLCAweDA0MjAsIDB4MTQwMSwgMHg2NGU2LCAweDc0YzcsIDB4NDRhNCwgMHg1NDg1LAorICAweGE1NmEsIDB4YjU0YiwgMHg4NTI4LCAweDk1MDksIDB4ZTVlZSwgMHhmNWNmLCAweGM1YWMsIDB4ZDU4ZCwKKyAgMHgzNjUzLCAweDI2NzIsIDB4MTYxMSwgMHgwNjMwLCAweDc2ZDcsIDB4NjZmNiwgMHg1Njk1LCAweDQ2YjQsCisgIDB4Yjc1YiwgMHhhNzdhLCAweDk3MTksIDB4ODczOCwgMHhmN2RmLCAweGU3ZmUsIDB4ZDc5ZCwgMHhjN2JjLAorICAweDQ4YzQsIDB4NThlNSwgMHg2ODg2LCAweDc4YTcsIDB4MDg0MCwgMHgxODYxLCAweDI4MDIsIDB4MzgyMywKKyAgMHhjOWNjLCAweGQ5ZWQsIDB4ZTk4ZSwgMHhmOWFmLCAweDg5NDgsIDB4OTk2OSwgMHhhOTBhLCAweGI5MmIsCisgIDB4NWFmNSwgMHg0YWQ0LCAweDdhYjcsIDB4NmE5NiwgMHgxYTcxLCAweDBhNTAsIDB4M2EzMywgMHgyYTEyLAorICAweGRiZmQsIDB4Y2JkYywgMHhmYmJmLCAweGViOWUsIDB4OWI3OSwgMHg4YjU4LCAweGJiM2IsIDB4YWIxYSwKKyAgMHg2Y2E2LCAweDdjODcsIDB4NGNlNCwgMHg1Y2M1LCAweDJjMjIsIDB4M2MwMywgMHgwYzYwLCAweDFjNDEsCisgIDB4ZWRhZSwgMHhmZDhmLCAweGNkZWMsIDB4ZGRjZCwgMHhhZDJhLCAweGJkMGIsIDB4OGQ2OCwgMHg5ZDQ5LAorICAweDdlOTcsIDB4NmViNiwgMHg1ZWQ1LCAweDRlZjQsIDB4M2UxMywgMHgyZTMyLCAweDFlNTEsIDB4MGU3MCwKKyAgMHhmZjlmLCAweGVmYmUsIDB4ZGZkZCwgMHhjZmZjLCAweGJmMWIsIDB4YWYzYSwgMHg5ZjU5LCAweDhmNzgsCisgIDB4OTE4OCwgMHg4MWE5LCAweGIxY2EsIDB4YTFlYiwgMHhkMTBjLCAweGMxMmQsIDB4ZjE0ZSwgMHhlMTZmLAorICAweDEwODAsIDB4MDBhMSwgMHgzMGMyLCAweDIwZTMsIDB4NTAwNCwgMHg0MDI1LCAweDcwNDYsIDB4NjA2NywKKyAgMHg4M2I5LCAweDkzOTgsIDB4YTNmYiwgMHhiM2RhLCAweGMzM2QsIDB4ZDMxYywgMHhlMzdmLCAweGYzNWUsCisgIDB4MDJiMSwgMHgxMjkwLCAweDIyZjMsIDB4MzJkMiwgMHg0MjM1LCAweDUyMTQsIDB4NjI3NywgMHg3MjU2LAorICAweGI1ZWEsIDB4YTVjYiwgMHg5NWE4LCAweDg1ODksIDB4ZjU2ZSwgMHhlNTRmLCAweGQ1MmMsIDB4YzUwZCwKKyAgMHgzNGUyLCAweDI0YzMsIDB4MTRhMCwgMHgwNDgxLCAweDc0NjYsIDB4NjQ0NywgMHg1NDI0LCAweDQ0MDUsCisgIDB4YTdkYiwgMHhiN2ZhLCAweDg3OTksIDB4OTdiOCwgMHhlNzVmLCAweGY3N2UsIDB4YzcxZCwgMHhkNzNjLAorICAweDI2ZDMsIDB4MzZmMiwgMHgwNjkxLCAweDE2YjAsIDB4NjY1NywgMHg3Njc2LCAweDQ2MTUsIDB4NTYzNCwKKyAgMHhkOTRjLCAweGM5NmQsIDB4ZjkwZSwgMHhlOTJmLCAweDk5YzgsIDB4ODllOSwgMHhiOThhLCAweGE5YWIsCisgIDB4NTg0NCwgMHg0ODY1LCAweDc4MDYsIDB4NjgyNywgMHgxOGMwLCAweDA4ZTEsIDB4Mzg4MiwgMHgyOGEzLAorICAweGNiN2QsIDB4ZGI1YywgMHhlYjNmLCAweGZiMWUsIDB4OGJmOSwgMHg5YmQ4LCAweGFiYmIsIDB4YmI5YSwKKyAgMHg0YTc1LCAweDVhNTQsIDB4NmEzNywgMHg3YTE2LCAweDBhZjEsIDB4MWFkMCwgMHgyYWIzLCAweDNhOTIsCisgIDB4ZmQyZSwgMHhlZDBmLCAweGRkNmMsIDB4Y2Q0ZCwgMHhiZGFhLCAweGFkOGIsIDB4OWRlOCwgMHg4ZGM5LAorICAweDdjMjYsIDB4NmMwNywgMHg1YzY0LCAweDRjNDUsIDB4M2NhMiwgMHgyYzgzLCAweDFjZTAsIDB4MGNjMSwKKyAgMHhlZjFmLCAweGZmM2UsIDB4Y2Y1ZCwgMHhkZjdjLCAweGFmOWIsIDB4YmZiYSwgMHg4ZmQ5LCAweDlmZjgsCisgIDB4NmUxNywgMHg3ZTM2LCAweDRlNTUsIDB4NWU3NCwgMHgyZTkzLCAweDNlYjIsIDB4MGVkMSwgMHgxZWYwCit9OworCisvKioKKyAqIGdzdF9kcF9jcmM6CisgKiBAYnVmZmVyOiBhcnJheSBvZiBieXRlcworICogQGxlbmd0aDogdGhlIGxlbmd0aCBvZiBAYnVmZmVyCisgKgorICogQ2FsY3VsYXRlIGEgQ1JDIGZvciB0aGUgZ2l2ZW4gYnVmZmVyIG92ZXIgdGhlIGdpdmVuIG51bWJlciBvZiBieXRlcy4KKyAqIFRoaXMgaXMgb25seSBwcm92aWRlZCBmb3IgdmVyaWZpY2F0aW9uIHB1cnBvc2VzOyB0eXBpY2FsIEdEUCB1c2VycworICogd2lsbCBub3QgbmVlZCB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFJldHVybnM6IGEgdHdvLWJ5dGUgQ1JDIGNoZWNrc3VtLgorICovCitndWludDE2Citnc3RfZHBfY3JjIChjb25zdCBndWludDggKiBidWZmZXIsIGd1aW50IGxlbmd0aCkKK3sKKyAgZ3VpbnQxNiBjcmNfcmVnaXN0ZXIgPSBDUkNfSU5JVDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoYnVmZmVyICE9IE5VTEwgfHwgbGVuZ3RoID09IDAsIDApOworCisgIC8qIGNhbGMgQ1JDICovCisgIGZvciAoOyBsZW5ndGgtLTspIHsKKyAgICBjcmNfcmVnaXN0ZXIgPSAoZ3VpbnQxNikgKChjcmNfcmVnaXN0ZXIgPDwgOCkgXgorICAgICAgICBnc3RfZHBfY3JjX3RhYmxlWygoY3JjX3JlZ2lzdGVyID4+IDgpICYgMHgwMGZmKSBeICpidWZmZXIrK10pOworICB9CisgIHJldHVybiAoMHhmZmZmIF4gY3JjX3JlZ2lzdGVyKTsKK30KKworLyogZGVidWdnaW5nIGZ1bmN0aW9uOyBkdW1wcyBieXRlIGFycmF5IHZhbHVlcyBwZXIgOCBieXRlcyAqLworLyogRklYTUU6IHdvdWxkIGJlIG5pY2UgdG8gbWVyZ2UgdGhpcyB3aXRoIGdzdF91dGlsX2R1bXBfbWVtICgpICovCit2b2lkCitnc3RfZHBfZHVtcF9ieXRlX2FycmF5IChndWludDggKiBhcnJheSwgZ3VpbnQgbGVuZ3RoKQoreworICBpbnQgaTsKKyAgaW50IG4gPSA4OyAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGJ5dGVzIHBlciBsaW5lICovCisgIGdjaGFyICpsaW5lID0gZ19tYWxsb2MwICgzICogbiArIDEpOworCisgIEdTVF9MT0cgKCJkdW1waW5nIGJ5dGUgYXJyYXkgb2YgbGVuZ3RoICVkIiwgbGVuZ3RoKTsKKyAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgZ19zcHJpbnRmIChsaW5lICsgMyAqIChpICUgbiksICIlMDJ4ICIsIGFycmF5W2ldKTsKKyAgICBpZiAoaSAlIG4gPT0gKG4gLSAxKSkgeworICAgICAgR1NUX0xPRyAoIiUwM2Q6ICVzIiwgaSAtIChuIC0gMSksIGxpbmUpOworICAgIH0KKyAgfQorICBpZiAoaSAlIG4gIT0gMCkgeworICAgIEdTVF9MT0cgKCIlMDNkOiAlcyIsIChpIC8gbikgKiBuLCBsaW5lKTsKKyAgfQorICBnX2ZyZWUgKGxpbmUpOworfQorCitHVHlwZQorZ3N0X2RwX3ZlcnNpb25fZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBnc2l6ZSBnc3RfZHBfdmVyc2lvbl90eXBlID0gMDsKKyAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgZ3N0X2RwX3ZlcnNpb25bXSA9IHsKKyAgICB7R1NUX0RQX1ZFUlNJT05fMF8yLCAiR1NUX0RQX1ZFUlNJT05fMF8yIiwgIjAuMiJ9LAorICAgIHtHU1RfRFBfVkVSU0lPTl8xXzAsICJHU1RfRFBfVkVSU0lPTl8xXzAiLCAiMS4wIn0sCisgICAgezAsIE5VTEwsIE5VTEx9LAorICB9OworCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmdzdF9kcF92ZXJzaW9uX3R5cGUpKSB7CisgICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdERQVmVyc2lvbiIsIGdzdF9kcF92ZXJzaW9uKTsKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmdzdF9kcF92ZXJzaW9uX3R5cGUsIHRtcCk7CisgIH0KKworICByZXR1cm4gKEdUeXBlKSBnc3RfZHBfdmVyc2lvbl90eXBlOworfTsKKworLyoqCisgKiBnc3RfZHBfaW5pdDoKKyAqCisgKiBJbml0aWFsaXplIEdTdHJlYW1lciBEYXRhIFByb3RvY29sIGxpYnJhcnkuCisgKgorICogU2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgdXNpbmcgdGhlc2UgZnVuY3Rpb25zIGZyb20gc291cmNlIGxpbmtpbmcKKyAqIHRvIHRoaXMgc291cmNlIGZpbGUuCisgKi8KK3ZvaWQKK2dzdF9kcF9pbml0ICh2b2lkKQoreworICBzdGF0aWMgZ2Jvb2xlYW4gX2dzdF9kcF9pbml0aWFsaXplZCA9IEZBTFNFOworCisgIGlmIChfZ3N0X2RwX2luaXRpYWxpemVkKQorICAgIHJldHVybjsKKworICBfZ3N0X2RwX2luaXRpYWxpemVkID0gVFJVRTsKKworICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfZHBfdmVyc2lvbl9nZXRfdHlwZSAoKSk7CisKKyAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGRhdGFfcHJvdG9jb2xfZGVidWcsICJnZHAiLCAwLAorICAgICAgIkdTdHJlYW1lciBEYXRhIFByb3RvY29sIik7Cit9CisKKy8qKgorICogZ3N0X2RwX2hlYWRlcl9wYXlsb2FkX2xlbmd0aDoKKyAqIEBoZWFkZXI6IHRoZSBieXRlIGhlYWRlciBvZiB0aGUgcGFja2V0IGFycmF5CisgKgorICogR2V0IHRoZSBsZW5ndGggb2YgdGhlIHBheWxvYWQgZGVzY3JpYmVkIGJ5IEBoZWFkZXIuCisgKgorICogUmV0dXJuczogdGhlIGxlbmd0aCBvZiB0aGUgcGF5bG9hZCB0aGlzIGhlYWRlciBkZXNjcmliZXMuCisgKi8KK2d1aW50MzIKK2dzdF9kcF9oZWFkZXJfcGF5bG9hZF9sZW5ndGggKGNvbnN0IGd1aW50OCAqIGhlYWRlcikKK3sKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGhlYWRlciAhPSBOVUxMLCAwKTsKKworICByZXR1cm4gR1NUX0RQX0hFQURFUl9QQVlMT0FEX0xFTkdUSCAoaGVhZGVyKTsKK30KKworLyoqCisgKiBnc3RfZHBfaGVhZGVyX3BheWxvYWRfdHlwZToKKyAqIEBoZWFkZXI6IHRoZSBieXRlIGhlYWRlciBvZiB0aGUgcGFja2V0IGFycmF5CisgKgorICogR2V0IHRoZSB0eXBlIG9mIHRoZSBwYXlsb2FkIGRlc2NyaWJlZCBieSBAaGVhZGVyLgorICoKKyAqIFJldHVybnM6IHRoZSAjR3N0RFBQYXlsb2FkVHlwZSB0aGUgcGF5bG9hZCB0aGlzIGhlYWRlciBkZXNjcmliZXMuCisgKi8KK0dzdERQUGF5bG9hZFR5cGUKK2dzdF9kcF9oZWFkZXJfcGF5bG9hZF90eXBlIChjb25zdCBndWludDggKiBoZWFkZXIpCit7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChoZWFkZXIgIT0gTlVMTCwgR1NUX0RQX1BBWUxPQURfTk9ORSk7CisKKyAgcmV0dXJuIEdTVF9EUF9IRUFERVJfUEFZTE9BRF9UWVBFIChoZWFkZXIpOworfQorCisvKioqIFBBQ0tFVElaRVIgRlVOQ1RJT05TICoqKi8KKworc3RhdGljIGdib29sZWFuCitnc3RfZHBfaGVhZGVyX2Zyb21fYnVmZmVyXzFfMCAoY29uc3QgR3N0QnVmZmVyICogYnVmZmVyLCBHc3REUEhlYWRlckZsYWcgZmxhZ3MsCisgICAgZ3VpbnQgKiBsZW5ndGgsIGd1aW50OCAqKiBoZWFkZXIpCit7CisgIHJldHVybiBnc3RfZHBfaGVhZGVyX2Zyb21fYnVmZmVyX2FueSAoYnVmZmVyLCBmbGFncywgbGVuZ3RoLCBoZWFkZXIsCisgICAgICBHU1RfRFBfVkVSU0lPTl8xXzApOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9kcF9wYWNrZXRfZnJvbV9jYXBzXzFfMCAoY29uc3QgR3N0Q2FwcyAqIGNhcHMsIEdzdERQSGVhZGVyRmxhZyBmbGFncywKKyAgICBndWludCAqIGxlbmd0aCwgZ3VpbnQ4ICoqIGhlYWRlciwgZ3VpbnQ4ICoqIHBheWxvYWQpCit7CisgIHJldHVybiBnc3RfZHBfcGFja2V0X2Zyb21fY2Fwc19hbnkgKGNhcHMsIGZsYWdzLCBsZW5ndGgsIGhlYWRlciwgcGF5bG9hZCwKKyAgICAgIEdTVF9EUF9WRVJTSU9OXzFfMCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2RwX3BhY2tldF9mcm9tX2V2ZW50XzFfMCAoY29uc3QgR3N0RXZlbnQgKiBldmVudCwgR3N0RFBIZWFkZXJGbGFnIGZsYWdzLAorICAgIGd1aW50ICogbGVuZ3RoLCBndWludDggKiogaGVhZGVyLCBndWludDggKiogcGF5bG9hZCkKK3sKKyAgZ3VpbnQ4ICpoOworICBndWludDMyIHBsX2xlbmd0aDsgICAgICAgICAgICAvKiBsZW5ndGggb2YgcGF5bG9hZCAqLworICBndWNoYXIgKnN0cmluZyA9IE5VTEw7CisgIGNvbnN0IEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRVZFTlQgKGV2ZW50KSwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAobGVuZ3RoLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChoZWFkZXIsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBheWxvYWQsIEZBTFNFKTsKKworICAqbGVuZ3RoID0gR1NUX0RQX0hFQURFUl9MRU5HVEg7CisgIGggPSBnX21hbGxvYzAgKEdTVF9EUF9IRUFERVJfTEVOR1RIKTsKKworICBzdHJ1Y3R1cmUgPSBnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoKEdzdEV2ZW50ICopIGV2ZW50KTsKKyAgaWYgKHN0cnVjdHVyZSkgeworICAgIHN0cmluZyA9IChndWNoYXIgKikgZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKHN0cnVjdHVyZSk7CisgICAgR1NUX0xPRyAoImV2ZW50ICVwIGhhcyBzdHJ1Y3R1cmUsIHN0cmluZyAlcyIsIGV2ZW50LCBzdHJpbmcpOworICAgIHBsX2xlbmd0aCA9IHN0cmxlbiAoKGdjaGFyICopIHN0cmluZykgKyAxOyAgLyogaW5jbHVkZSB0cmFpbGluZyAwICovCisgIH0gZWxzZSB7CisgICAgR1NUX0xPRyAoImV2ZW50ICVwIGhhcyBubyBzdHJ1Y3R1cmUiLCBldmVudCk7CisgICAgcGxfbGVuZ3RoID0gMDsKKyAgfQorCisgIC8qIHZlcnNpb24sIGZsYWdzLCB0eXBlICovCisgIEdTVF9EUF9JTklUX0hFQURFUiAoaCwgR1NUX0RQX1ZFUlNJT05fMV8wLCBmbGFncywKKyAgICAgIEdTVF9EUF9QQVlMT0FEX0VWRU5UX05PTkUgKyBHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKTsKKworICAvKiBsZW5ndGggKi8KKyAgR1NUX1dSSVRFX1VJTlQzMl9CRSAoaCArIDYsIHBsX2xlbmd0aCk7CisgIC8qIHRpbWVzdGFtcCAqLworICBHU1RfV1JJVEVfVUlOVDY0X0JFIChoICsgMTAsIEdTVF9FVkVOVF9USU1FU1RBTVAgKGV2ZW50KSk7CisKKyAgR1NUX0RQX1NFVF9DUkMgKGgsIGZsYWdzLCBzdHJpbmcsIHBsX2xlbmd0aCk7CisKKyAgR1NUX0xPRyAoImNyZWF0ZWQgaGVhZGVyIGZyb20gZXZlbnQ6Iik7CisgIGdzdF9kcF9kdW1wX2J5dGVfYXJyYXkgKGgsIEdTVF9EUF9IRUFERVJfTEVOR1RIKTsKKyAgKmhlYWRlciA9IGg7CisgICpwYXlsb2FkID0gc3RyaW5nOworICByZXR1cm4gVFJVRTsKK30KKworLyoqKiBERVBBQ0tFVElaSU5HIEZVTkNUSU9OUyAqKiovCisKKy8qKgorICogZ3N0X2RwX2J1ZmZlcl9mcm9tX2hlYWRlcjoKKyAqIEBoZWFkZXJfbGVuZ3RoOiB0aGUgbGVuZ3RoIG9mIHRoZSBwYWNrZXQgaGVhZGVyCisgKiBAaGVhZGVyOiB0aGUgYnl0ZSBhcnJheSBvZiB0aGUgcGFja2V0IGhlYWRlcgorICoKKyAqIENyZWF0ZXMgYSBuZXdseSBhbGxvY2F0ZWQgI0dzdEJ1ZmZlciBmcm9tIHRoZSBnaXZlbiBoZWFkZXIuCisgKiBUaGUgYnVmZmVyIGRhdGEgbmVlZHMgdG8gYmUgY29waWVkIGludG8gaXQgYmVmb3JlIHZhbGlkYXRpbmcuCisgKgorICogVXNlIHRoaXMgZnVuY3Rpb24gaWYgeW91IHdhbnQgdG8gcHJlLWFsbG9jYXRlIGEgYnVmZmVyIGJhc2VkIG9uIHRoZQorICogcGFja2V0IGhlYWRlciB0byByZWFkIHRoZSBwYWNrZXQgcGF5bG9hZCBpbiB0by4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIHRoZSBoZWFkZXIgcGFzc2VkIHRvIGl0LCB1c2UKKyAqIGdzdF9kcF92YWxpZGF0ZV9oZWFkZXIoKSBmaXJzdCBpZiB0aGUgaGVhZGVyIGRhdGEgaXMgdW5jaGVja2VkLgorICoKKyAqIFJldHVybnM6IEEgI0dzdEJ1ZmZlciBpZiB0aGUgYnVmZmVyIHdhcyBzdWNjZXNzZnVsbHkgY3JlYXRlZCwgb3IgTlVMTC4KKyAqLworR3N0QnVmZmVyICoKK2dzdF9kcF9idWZmZXJfZnJvbV9oZWFkZXIgKGd1aW50IGhlYWRlcl9sZW5ndGgsIGNvbnN0IGd1aW50OCAqIGhlYWRlcikKK3sKKyAgR3N0QnVmZmVyICpidWZmZXI7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGhlYWRlciAhPSBOVUxMLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGhlYWRlcl9sZW5ndGggPj0gR1NUX0RQX0hFQURFUl9MRU5HVEgsIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0RQX0hFQURFUl9QQVlMT0FEX1RZUEUgKGhlYWRlcikgPT0KKyAgICAgIEdTVF9EUF9QQVlMT0FEX0JVRkZFUiwgTlVMTCk7CisKKyAgYnVmZmVyID0KKyAgICAgIGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLAorICAgICAgKGd1aW50KSBHU1RfRFBfSEVBREVSX1BBWUxPQURfTEVOR1RIIChoZWFkZXIpLCAwKTsKKworICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IEdTVF9EUF9IRUFERVJfVElNRVNUQU1QIChoZWFkZXIpOworICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpID0gR1NUX0RQX0hFQURFUl9EVVJBVElPTiAoaGVhZGVyKTsKKyAgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZmZlcikgPSBHU1RfRFBfSEVBREVSX09GRlNFVCAoaGVhZGVyKTsKKyAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChidWZmZXIpID0gR1NUX0RQX0hFQURFUl9PRkZTRVRfRU5EIChoZWFkZXIpOworICBHU1RfQlVGRkVSX0ZMQUdTIChidWZmZXIpID0gR1NUX0RQX0hFQURFUl9CVUZGRVJfRkxBR1MgKGhlYWRlcik7CisKKyAgcmV0dXJuIGJ1ZmZlcjsKK30KKworLyoqCisgKiBnc3RfZHBfY2Fwc19mcm9tX3BhY2tldDoKKyAqIEBoZWFkZXJfbGVuZ3RoOiB0aGUgbGVuZ3RoIG9mIHRoZSBwYWNrZXQgaGVhZGVyCisgKiBAaGVhZGVyOiB0aGUgYnl0ZSBhcnJheSBvZiB0aGUgcGFja2V0IGhlYWRlcgorICogQHBheWxvYWQ6IHRoZSBieXRlIGFycmF5IG9mIHRoZSBwYWNrZXQgcGF5bG9hZAorICoKKyAqIENyZWF0ZXMgYSBuZXdseSBhbGxvY2F0ZWQgI0dzdENhcHMgZnJvbSB0aGUgZ2l2ZW4gcGFja2V0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gaXQsIHVzZQorICogZ3N0X2RwX3ZhbGlkYXRlX3BhY2tldCgpIGZpcnN0IGlmIHRoZSBoZWFkZXIgYW5kIHBheWxvYWQgZGF0YSBhcmUKKyAqIHVuY2hlY2tlZC4KKyAqCisgKiBSZXR1cm5zOiBBICNHc3RDYXBzIGNvbnRhaW5pbmcgdGhlIGNhcHMgcmVwcmVzZW50ZWQgaW4gdGhlIHBhY2tldCwKKyAqICAgICAgICAgIG9yIE5VTEwgaWYgdGhlIHBhY2tldCBjb3VsZCBub3QgYmUgY29udmVydGVkLgorICovCitHc3RDYXBzICoKK2dzdF9kcF9jYXBzX2Zyb21fcGFja2V0IChndWludCBoZWFkZXJfbGVuZ3RoLCBjb25zdCBndWludDggKiBoZWFkZXIsCisgICAgY29uc3QgZ3VpbnQ4ICogcGF5bG9hZCkKK3sKKyAgR3N0Q2FwcyAqY2FwczsKKyAgZ2NoYXIgKnN0cmluZzsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoaGVhZGVyLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGhlYWRlcl9sZW5ndGggPj0gR1NUX0RQX0hFQURFUl9MRU5HVEgsIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0RQX0hFQURFUl9QQVlMT0FEX1RZUEUgKGhlYWRlcikgPT0KKyAgICAgIEdTVF9EUF9QQVlMT0FEX0NBUFMsIE5VTEwpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAocGF5bG9hZCwgTlVMTCk7CisKKyAgLyogMCBzaXplZCBwYXlsb2FkIGxlbmd0aCB3aWxsIHdvcmsgY3JlYXRlIE5VTEwgc3RyaW5nICovCisgIHN0cmluZyA9IGdfc3RybmR1cCAoKGdjaGFyICopIHBheWxvYWQsIEdTVF9EUF9IRUFERVJfUEFZTE9BRF9MRU5HVEggKGhlYWRlcikpOworICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKHN0cmluZyk7CisgIGdfZnJlZSAoc3RyaW5nKTsKKworICByZXR1cm4gY2FwczsKK30KKworc3RhdGljIEdzdEV2ZW50ICoKK2dzdF9kcF9ldmVudF9mcm9tX3BhY2tldF8wXzIgKGd1aW50IGhlYWRlcl9sZW5ndGgsIGNvbnN0IGd1aW50OCAqIGhlYWRlciwKKyAgICBjb25zdCBndWludDggKiBwYXlsb2FkKQoreworICBHc3RFdmVudCAqZXZlbnQgPSBOVUxMOworICBHc3RFdmVudFR5cGUgdHlwZTsKKworICB0eXBlID0gR1NUX0RQX0hFQURFUl9QQVlMT0FEX1RZUEUgKGhlYWRlcikgLSBHU1RfRFBfUEFZTE9BRF9FVkVOVF9OT05FOworICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdTVF9FVkVOVF9VTktOT1dOOgorICAgICAgR1NUX1dBUk5JTkcgKCJVbmtub3duIGV2ZW50LCBpZ25vcmluZyIpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgY2FzZSBHU1RfRVZFTlRfRU9TOgorICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUQVJUOgorICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6CisgICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVDoKKyAgICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19jdXN0b20gKHR5cGUsIE5VTEwpOworICAgICAgR1NUX0VWRU5UX1RJTUVTVEFNUCAoZXZlbnQpID0gR1NUX0RQX0hFQURFUl9USU1FU1RBTVAgKGhlYWRlcik7CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9FVkVOVF9TRUVLOgorICAgIHsKKyAgICAgIGdkb3VibGUgcmF0ZTsKKyAgICAgIEdzdEZvcm1hdCBmb3JtYXQ7CisgICAgICBHc3RTZWVrRmxhZ3MgZmxhZ3M7CisgICAgICBHc3RTZWVrVHlwZSBjdXJfdHlwZSwgc3RvcF90eXBlOworICAgICAgZ2ludDY0IGN1ciwgc3RvcDsKKworICAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBheWxvYWQgIT0gTlVMTCwgTlVMTCk7CisKKyAgICAgIC8qIEZJWE1FLCByZWFkIHJhdGUgKi8KKyAgICAgIHJhdGUgPSAxLjA7CisgICAgICBmb3JtYXQgPSAoR3N0Rm9ybWF0KSBHU1RfUkVBRF9VSU5UMzJfQkUgKHBheWxvYWQpOworICAgICAgZmxhZ3MgPSAoR3N0U2Vla0ZsYWdzKSBHU1RfUkVBRF9VSU5UMzJfQkUgKHBheWxvYWQgKyA0KTsKKyAgICAgIGN1cl90eXBlID0gKEdzdFNlZWtUeXBlKSBHU1RfUkVBRF9VSU5UMzJfQkUgKHBheWxvYWQgKyA4KTsKKyAgICAgIGN1ciA9IChnaW50NjQpIEdTVF9SRUFEX1VJTlQ2NF9CRSAocGF5bG9hZCArIDEyKTsKKyAgICAgIHN0b3BfdHlwZSA9IChHc3RTZWVrVHlwZSkgR1NUX1JFQURfVUlOVDMyX0JFIChwYXlsb2FkICsgMjApOworICAgICAgc3RvcCA9IChnaW50NjQpIEdTVF9SRUFEX1VJTlQ2NF9CRSAocGF5bG9hZCArIDI0KTsKKworICAgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZWsgKHJhdGUsIGZvcm1hdCwgZmxhZ3MsIGN1cl90eXBlLCBjdXIsCisgICAgICAgICAgc3RvcF90eXBlLCBzdG9wKTsKKyAgICAgIEdTVF9FVkVOVF9USU1FU1RBTVAgKGV2ZW50KSA9IEdTVF9EUF9IRUFERVJfVElNRVNUQU1QIChoZWFkZXIpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX0VWRU5UX1FPUzoKKyAgICBjYXNlIEdTVF9FVkVOVF9OQVZJR0FUSU9OOgorICAgIGNhc2UgR1NUX0VWRU5UX1RBRzoKKyAgICAgIEdTVF9XQVJOSU5HICgiVW5oYW5kbGVkIGV2ZW50IHR5cGUgJWQsIGlnbm9yaW5nIiwgdHlwZSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICBkZWZhdWx0OgorICAgICAgR1NUX1dBUk5JTkcgKCJVbmtub3duIGV2ZW50IHR5cGUgJWQsIGlnbm9yaW5nIiwgdHlwZSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIHJldHVybiBldmVudDsKK30KKworc3RhdGljIEdzdEV2ZW50ICoKK2dzdF9kcF9ldmVudF9mcm9tX3BhY2tldF8xXzAgKGd1aW50IGhlYWRlcl9sZW5ndGgsIGNvbnN0IGd1aW50OCAqIGhlYWRlciwKKyAgICBjb25zdCBndWludDggKiBwYXlsb2FkKQoreworICBHc3RFdmVudCAqZXZlbnQgPSBOVUxMOworICBHc3RFdmVudFR5cGUgdHlwZTsKKyAgZ2NoYXIgKnN0cmluZyA9IE5VTEw7CisgIEdzdFN0cnVjdHVyZSAqcyA9IE5VTEw7CisKKyAgdHlwZSA9IEdTVF9EUF9IRUFERVJfUEFZTE9BRF9UWVBFIChoZWFkZXIpIC0gR1NUX0RQX1BBWUxPQURfRVZFTlRfTk9ORTsKKyAgaWYgKHBheWxvYWQpIHsKKyAgICBzdHJpbmcgPQorICAgICAgICBnX3N0cm5kdXAgKChnY2hhciAqKSBwYXlsb2FkLCBHU1RfRFBfSEVBREVSX1BBWUxPQURfTEVOR1RIIChoZWFkZXIpKTsKKyAgICBzID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAoc3RyaW5nLCBOVUxMKTsKKyAgICBnX2ZyZWUgKHN0cmluZyk7CisgIH0KKyAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2N1c3RvbSAodHlwZSwgcyk7CisgIHJldHVybiBldmVudDsKK30KKworCisvKioKKyAqIGdzdF9kcF9ldmVudF9mcm9tX3BhY2tldDoKKyAqIEBoZWFkZXJfbGVuZ3RoOiB0aGUgbGVuZ3RoIG9mIHRoZSBwYWNrZXQgaGVhZGVyCisgKiBAaGVhZGVyOiB0aGUgYnl0ZSBhcnJheSBvZiB0aGUgcGFja2V0IGhlYWRlcgorICogQHBheWxvYWQ6IHRoZSBieXRlIGFycmF5IG9mIHRoZSBwYWNrZXQgcGF5bG9hZAorICoKKyAqIENyZWF0ZXMgYSBuZXdseSBhbGxvY2F0ZWQgI0dzdEV2ZW50IGZyb20gdGhlIGdpdmVuIHBhY2tldC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIGl0LCB1c2UKKyAqIGdzdF9kcF92YWxpZGF0ZV9wYWNrZXQoKSBmaXJzdCBpZiB0aGUgaGVhZGVyIGFuZCBwYXlsb2FkIGRhdGEgYXJlCisgKiB1bmNoZWNrZWQuCisgKgorICogUmV0dXJuczogQSAjR3N0RXZlbnQgaWYgdGhlIGV2ZW50IHdhcyBzdWNjZXNzZnVsbHkgY3JlYXRlZCwKKyAqICAgICAgICAgIG9yIE5VTEwgaWYgYW4gZXZlbnQgY291bGQgbm90IGJlIHJlYWQgZnJvbSB0aGUgcGF5bG9hZC4KKyAqLworR3N0RXZlbnQgKgorZ3N0X2RwX2V2ZW50X2Zyb21fcGFja2V0IChndWludCBoZWFkZXJfbGVuZ3RoLCBjb25zdCBndWludDggKiBoZWFkZXIsCisgICAgY29uc3QgZ3VpbnQ4ICogcGF5bG9hZCkKK3sKKyAgZ3VpbnQ4IG1ham9yLCBtaW5vcjsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAoaGVhZGVyLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGhlYWRlcl9sZW5ndGggPj0gR1NUX0RQX0hFQURFUl9MRU5HVEgsIE5VTEwpOworCisgIG1ham9yID0gR1NUX0RQX0hFQURFUl9NQUpPUl9WRVJTSU9OIChoZWFkZXIpOworICBtaW5vciA9IEdTVF9EUF9IRUFERVJfTUlOT1JfVkVSU0lPTiAoaGVhZGVyKTsKKworICBpZiAobWFqb3IgPT0gMCAmJiBtaW5vciA9PSAyKQorICAgIHJldHVybiBnc3RfZHBfZXZlbnRfZnJvbV9wYWNrZXRfMF8yIChoZWFkZXJfbGVuZ3RoLCBoZWFkZXIsIHBheWxvYWQpOworICBlbHNlIGlmIChtYWpvciA9PSAxICYmIG1pbm9yID09IDApCisgICAgcmV0dXJuIGdzdF9kcF9ldmVudF9mcm9tX3BhY2tldF8xXzAgKGhlYWRlcl9sZW5ndGgsIGhlYWRlciwgcGF5bG9hZCk7CisgIGVsc2UgeworICAgIEdTVF9FUlJPUiAoIlVua25vd24gR0RQIHZlcnNpb24gJWQuJWQiLCBtYWpvciwgbWlub3IpOworICAgIHJldHVybiBOVUxMOworICB9Cit9CisKKy8qKgorICogZ3N0X2RwX3ZhbGlkYXRlX2hlYWRlcjoKKyAqIEBoZWFkZXJfbGVuZ3RoOiB0aGUgbGVuZ3RoIG9mIHRoZSBwYWNrZXQgaGVhZGVyCisgKiBAaGVhZGVyOiB0aGUgYnl0ZSBhcnJheSBvZiB0aGUgcGFja2V0IGhlYWRlcgorICoKKyAqIFZhbGlkYXRlcyB0aGUgZ2l2ZW4gcGFja2V0IGhlYWRlciBieSBjaGVja2luZyB0aGUgQ1JDIGNoZWNrc3VtLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBDUkMgbWF0Y2hlcywgb3Igbm8gQ1JDIGNoZWNrc3VtIGlzIHByZXNlbnQuCisgKi8KK2dib29sZWFuCitnc3RfZHBfdmFsaWRhdGVfaGVhZGVyIChndWludCBoZWFkZXJfbGVuZ3RoLCBjb25zdCBndWludDggKiBoZWFkZXIpCit7CisgIGd1aW50MTYgY3JjX3JlYWQsIGNyY19jYWxjdWxhdGVkOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChoZWFkZXIgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoaGVhZGVyX2xlbmd0aCA+PSBHU1RfRFBfSEVBREVSX0xFTkdUSCwgRkFMU0UpOworCisgIGlmICghKEdTVF9EUF9IRUFERVJfRkxBR1MgKGhlYWRlcikgJiBHU1RfRFBfSEVBREVSX0ZMQUdfQ1JDX0hFQURFUikpCisgICAgcmV0dXJuIFRSVUU7CisKKyAgY3JjX3JlYWQgPSBHU1RfRFBfSEVBREVSX0NSQ19IRUFERVIgKGhlYWRlcik7CisKKyAgLyogZG9uJ3QgaW5jbHVkZSB0aGUgbGFzdCB0d28gY3JjIGZpZWxkcyBmb3IgdGhlIGNyYyBjaGVjayAqLworICBjcmNfY2FsY3VsYXRlZCA9IGdzdF9kcF9jcmMgKGhlYWRlciwgaGVhZGVyX2xlbmd0aCAtIDQpOworICBpZiAoY3JjX3JlYWQgIT0gY3JjX2NhbGN1bGF0ZWQpCisgICAgZ290byBjcmNfZXJyb3I7CisKKyAgR1NUX0xPRyAoImhlYWRlciBjcmMgdmFsaWRhdGlvbjogJTAyeCIsIGNyY19yZWFkKTsKKyAgcmV0dXJuIFRSVUU7CisKKyAgLyogRVJST1JTICovCitjcmNfZXJyb3I6CisgIHsKKyAgICBHU1RfV0FSTklORyAoImhlYWRlciBjcmMgbWlzbWF0Y2g6IHJlYWQgJTAyeCwgY2FsY3VsYXRlZCAlMDJ4IiwgY3JjX3JlYWQsCisgICAgICAgIGNyY19jYWxjdWxhdGVkKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworLyoqCisgKiBnc3RfZHBfdmFsaWRhdGVfcGF5bG9hZDoKKyAqIEBoZWFkZXJfbGVuZ3RoOiB0aGUgbGVuZ3RoIG9mIHRoZSBwYWNrZXQgaGVhZGVyCisgKiBAaGVhZGVyOiB0aGUgYnl0ZSBhcnJheSBvZiB0aGUgcGFja2V0IGhlYWRlcgorICogQHBheWxvYWQ6IHRoZSBieXRlIGFycmF5IG9mIHRoZSBwYWNrZXQgcGF5bG9hZAorICoKKyAqIFZhbGlkYXRlcyB0aGUgZ2l2ZW4gcGFja2V0IHBheWxvYWQgdXNpbmcgdGhlIGdpdmVuIHBhY2tldCBoZWFkZXIKKyAqIGJ5IGNoZWNraW5nIHRoZSBDUkMgY2hlY2tzdW0uCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIENSQyBtYXRjaGVzLCBvciBubyBDUkMgY2hlY2tzdW0gaXMgcHJlc2VudC4KKyAqLworZ2Jvb2xlYW4KK2dzdF9kcF92YWxpZGF0ZV9wYXlsb2FkIChndWludCBoZWFkZXJfbGVuZ3RoLCBjb25zdCBndWludDggKiBoZWFkZXIsCisgICAgY29uc3QgZ3VpbnQ4ICogcGF5bG9hZCkKK3sKKyAgZ3VpbnQxNiBjcmNfcmVhZCwgY3JjX2NhbGN1bGF0ZWQ7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGhlYWRlciAhPSBOVUxMLCBGQUxTRSk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChoZWFkZXJfbGVuZ3RoID49IEdTVF9EUF9IRUFERVJfTEVOR1RILCBGQUxTRSk7CisKKyAgaWYgKCEoR1NUX0RQX0hFQURFUl9GTEFHUyAoaGVhZGVyKSAmIEdTVF9EUF9IRUFERVJfRkxBR19DUkNfUEFZTE9BRCkpCisgICAgcmV0dXJuIFRSVUU7CisKKyAgY3JjX3JlYWQgPSBHU1RfRFBfSEVBREVSX0NSQ19QQVlMT0FEIChoZWFkZXIpOworICBjcmNfY2FsY3VsYXRlZCA9IGdzdF9kcF9jcmMgKHBheWxvYWQsIEdTVF9EUF9IRUFERVJfUEFZTE9BRF9MRU5HVEggKGhlYWRlcikpOworICBpZiAoY3JjX3JlYWQgIT0gY3JjX2NhbGN1bGF0ZWQpCisgICAgZ290byBjcmNfZXJyb3I7CisKKyAgR1NUX0xPRyAoInBheWxvYWQgY3JjIHZhbGlkYXRpb246ICUwMngiLCBjcmNfcmVhZCk7CisgIHJldHVybiBUUlVFOworCisgIC8qIEVSUk9SUyAqLworY3JjX2Vycm9yOgorICB7CisgICAgR1NUX1dBUk5JTkcgKCJwYXlsb2FkIGNyYyBtaXNtYXRjaDogcmVhZCAlMDJ4LCBjYWxjdWxhdGVkICUwMngiLCBjcmNfcmVhZCwKKyAgICAgICAgY3JjX2NhbGN1bGF0ZWQpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCisvKioKKyAqIGdzdF9kcF92YWxpZGF0ZV9wYWNrZXQ6CisgKiBAaGVhZGVyX2xlbmd0aDogdGhlIGxlbmd0aCBvZiB0aGUgcGFja2V0IGhlYWRlcgorICogQGhlYWRlcjogdGhlIGJ5dGUgYXJyYXkgb2YgdGhlIHBhY2tldCBoZWFkZXIKKyAqIEBwYXlsb2FkOiB0aGUgYnl0ZSBhcnJheSBvZiB0aGUgcGFja2V0IHBheWxvYWQKKyAqCisgKiBWYWxpZGF0ZXMgdGhlIGdpdmVuIHBhY2tldCBieSBjaGVja2luZyB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBjaGVja3N1bXMuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHBhY2tldCB2YWxpZGF0ZXMuCisgKi8KK2dib29sZWFuCitnc3RfZHBfdmFsaWRhdGVfcGFja2V0IChndWludCBoZWFkZXJfbGVuZ3RoLCBjb25zdCBndWludDggKiBoZWFkZXIsCisgICAgY29uc3QgZ3VpbnQ4ICogcGF5bG9hZCkKK3sKKyAgaWYgKCFnc3RfZHBfdmFsaWRhdGVfaGVhZGVyIChoZWFkZXJfbGVuZ3RoLCBoZWFkZXIpKQorICAgIHJldHVybiBGQUxTRTsKKyAgaWYgKCFnc3RfZHBfdmFsaWRhdGVfcGF5bG9hZCAoaGVhZGVyX2xlbmd0aCwgaGVhZGVyLCBwYXlsb2FkKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qKgorICogZ3N0X2RwX3BhY2tldGl6ZXJfbmV3OgorICogQHZlcnNpb246IHRoZSAjR3N0RFBWZXJzaW9uIG9mIHRoZSBwcm90b2NvbCB0byBwYWNrZXRpemUgZm9yLgorICoKKyAqIENyZWF0ZXMgYSBuZXcgcGFja2V0aXplci4KKyAqCisgKiBSZXR1cm5zOiBhIG5ld2x5IGFsbG9jYXRlZCAjR3N0RFBQYWNrZXRpemVyCisgKi8KK0dzdERQUGFja2V0aXplciAqCitnc3RfZHBfcGFja2V0aXplcl9uZXcgKEdzdERQVmVyc2lvbiB2ZXJzaW9uKQoreworICBHc3REUFBhY2tldGl6ZXIgKnJldDsKKworICByZXQgPSBnX21hbGxvYzAgKHNpemVvZiAoR3N0RFBQYWNrZXRpemVyKSk7CisgIHJldC0+dmVyc2lvbiA9IHZlcnNpb247CisKKyAgc3dpdGNoICh2ZXJzaW9uKSB7CisgICAgY2FzZSBHU1RfRFBfVkVSU0lPTl8xXzA6CisgICAgICByZXQtPmhlYWRlcl9mcm9tX2J1ZmZlciA9IGdzdF9kcF9oZWFkZXJfZnJvbV9idWZmZXJfMV8wOworICAgICAgcmV0LT5wYWNrZXRfZnJvbV9jYXBzID0gZ3N0X2RwX3BhY2tldF9mcm9tX2NhcHNfMV8wOworICAgICAgcmV0LT5wYWNrZXRfZnJvbV9ldmVudCA9IGdzdF9kcF9wYWNrZXRfZnJvbV9ldmVudF8xXzA7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgZ19mcmVlIChyZXQpOworICAgICAgcmV0ID0gTlVMTDsKKyAgICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBnc3RfZHBfcGFja2V0aXplcl9mcmVlOgorICogQHBhY2tldGl6ZXI6IHRoZSAjR3N0RFBQYWNrZXRpemVyIHRvIGZyZWUuCisgKgorICogRnJlZSB0aGUgZ2l2ZW4gcGFja2V0aXplci4KKyAqLwordm9pZAorZ3N0X2RwX3BhY2tldGl6ZXJfZnJlZSAoR3N0RFBQYWNrZXRpemVyICogcGFja2V0aXplcikKK3sKKyAgZ19mcmVlIChwYWNrZXRpemVyKTsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuaCBiL2xpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmQ1MjRhCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5oCkBAIC0wLDAgKzEsMTc1IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDYgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorICoKKyAqIGRhdGFwcm90b2NvbC5oOiBGdW5jdGlvbnMgaW1wbGVtZW50aW5nIHRoZSBHU3RyZWFtZXIgRGF0YSBQcm90b2NvbAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19HU1RfREFUQV9QUk9UT0NPTF9IX18KKyNkZWZpbmUgX19HU1RfREFUQV9QUk9UT0NPTF9IX18KKworI2luY2x1ZGUgPGdzdC9nc3RidWZmZXIuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0ZXZlbnQuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Y2Fwcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICogR3N0RFBWZXJzaW9uOgorICogQEdTVF9EUF9WRVJTSU9OXzBfMjogcHJvdG9jb2wgdmVyc2lvbiAwLjIKKyAqIEBHU1RfRFBfVkVSU0lPTl8xXzA6IHByb3RvY29sIHZlcnNpb24gMS4wCisgKgorICogVGhlIHZlcnNpb24gb2YgdGhlIEdEUCBwcm90b2NvbCBiZWluZyB1c2VkLgorICovCit0eXBlZGVmIGVudW0geworICBHU1RfRFBfVkVSU0lPTl8wXzIgPSAxLAorICBHU1RfRFBfVkVSU0lPTl8xXzAsCit9IEdzdERQVmVyc2lvbjsKKworR1R5cGUgZ3N0X2RwX3ZlcnNpb25fZ2V0X3R5cGUgKHZvaWQpOworI2RlZmluZSBHU1RfVFlQRV9EUF9WRVJTSU9OIChnc3RfZHBfdmVyc2lvbl9nZXRfdHlwZSAoKSkKKworLyoqCisgKiBHU1RfRFBfVkVSU0lPTl9NQUpPUjoKKyAqCisgKiBUaGUgbWFqb3IgdmVyc2lvbiBudW1iZXIgb2YgdGhlIEdTdHJlYW1lciBEYXRhIFByb3RvY29sLgorICovCisjZGVmaW5lIEdTVF9EUF9WRVJTSU9OX01BSk9SIDAKKy8qKgorICogR1NUX0RQX1ZFUlNJT05fTUlOT1I6CisgKgorICogVGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBHU3RyZWFtZXIgRGF0YSBQcm90b2NvbC4KKyAqLworI2RlZmluZSBHU1RfRFBfVkVSU0lPTl9NSU5PUiAyCisKKy8qKgorICogR1NUX0RQX0hFQURFUl9MRU5HVEg6CisgKgorICogVGhlIGhlYWRlciBzaXplIGluIGJ5dGVzLgorICovCisjZGVmaW5lIEdTVF9EUF9IRUFERVJfTEVOR1RIIDYyCisKKy8qKgorICogR3N0RFBIZWFkZXJGbGFnOgorICogQEdTVF9EUF9IRUFERVJfRkxBR19OT05FOiBObyBmbGFnIHByZXNlbnQuCisgKiBAR1NUX0RQX0hFQURFUl9GTEFHX0NSQ19IRUFERVI6IGEgaGVhZGVyIENSQyBmaWVsZCBpcyBwcmVzZW50LgorICogQEdTVF9EUF9IRUFERVJfRkxBR19DUkNfUEFZTE9BRDogYSBwYXlsb2FkIENSQyBmaWVsZCBpcyBwcmVzZW50LgorICogQEdTVF9EUF9IRUFERVJfRkxBR19DUkM6IGEgQ1JDIGZvciBoZWFkZXIgYW5kIHBheWxvYWQgaXMgcHJlc2VudC4KKyAqCisgKiBoZWFkZXIgZmxhZ3MgZm9yIHRoZSBkYXRhcHJvdG9jb2wuCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIEdTVF9EUF9IRUFERVJfRkxBR19OT05FICAgICAgICA9IDAsCisgIEdTVF9EUF9IRUFERVJfRkxBR19DUkNfSEVBREVSICA9ICgxIDw8IDApLAorICBHU1RfRFBfSEVBREVSX0ZMQUdfQ1JDX1BBWUxPQUQgPSAoMSA8PCAxKSwKKyAgR1NUX0RQX0hFQURFUl9GTEFHX0NSQyAgICAgICAgID0gKDEgPDwgMSkgfCAoMSA8PCAwKSwKK30gR3N0RFBIZWFkZXJGbGFnOworCisvKioKKyAqIEdzdERQUGF5bG9hZFR5cGU6CisgKiBAR1NUX0RQX1BBWUxPQURfTk9ORTogSW52YWxpZCBwYXlsb2FkIHR5cGUuCisgKiBAR1NUX0RQX1BBWUxPQURfQlVGRkVSOiAjR3N0QnVmZmVyIHBheWxvYWQgcGFja2V0LgorICogQEdTVF9EUF9QQVlMT0FEX0NBUFM6ICNHc3RDYXBzIHBheWxvYWQgcGFja2V0LgorICogQEdTVF9EUF9QQVlMT0FEX0VWRU5UX05PTkU6IEZpcnN0IHZhbHVlIG9mICNHc3RFdmVudCBwYXlsb2FkIHBhY2tldHMuCisgKgorICogVGhlIEdEUCBwYXlsb2FkIHR5cGVzLiBhICNHc3RFdmVudCBwYXlsb2FkIHR5cGUgaXMgZW5jb2RlZCB3aXRoIHRoZQorICogZXZlbnQgdHlwZSBudW1iZXIgc3RhcnRpbmcgZnJvbSBAR1NUX0RQX1BBWUxPQURfRVZFTlRfTk9ORS4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgR1NUX0RQX1BBWUxPQURfTk9ORSAgICAgICAgICAgID0gMCwKKyAgR1NUX0RQX1BBWUxPQURfQlVGRkVSLAorICBHU1RfRFBfUEFZTE9BRF9DQVBTLAorICBHU1RfRFBfUEFZTE9BRF9FVkVOVF9OT05FICAgICAgPSA2NCwKK30gR3N0RFBQYXlsb2FkVHlwZTsKKwordHlwZWRlZiBnYm9vbGVhbiAoKkdzdERQSGVhZGVyRnJvbUJ1ZmZlckZ1bmN0aW9uKSAoY29uc3QgR3N0QnVmZmVyICogYnVmZmVyLAorCQkJCQkJR3N0RFBIZWFkZXJGbGFnIGZsYWdzLAorCQkJCQkJZ3VpbnQgKiBsZW5ndGgsCisJCQkJCQlndWludDggKiogaGVhZGVyKTsKK3R5cGVkZWYgZ2Jvb2xlYW4gKCpHc3REUFBhY2tldEZyb21DYXBzRnVuY3Rpb24pIChjb25zdCBHc3RDYXBzICogY2FwcywKKwkJCQkJCUdzdERQSGVhZGVyRmxhZyBmbGFncywKKwkJCQkJCWd1aW50ICogbGVuZ3RoLAorCQkJCQkJZ3VpbnQ4ICoqIGhlYWRlciwKKwkJCQkJCWd1aW50OCAqKiBwYXlsb2FkKTsKK3R5cGVkZWYgZ2Jvb2xlYW4gKCpHc3REUFBhY2tldEZyb21FdmVudEZ1bmN0aW9uKSAoY29uc3QgR3N0RXZlbnQgKiBldmVudCwKKwkJCQkJCUdzdERQSGVhZGVyRmxhZyBmbGFncywKKwkJCQkJCWd1aW50ICogbGVuZ3RoLAorCQkJCQkJZ3VpbnQ4ICoqIGhlYWRlciwKKwkJCQkJCWd1aW50OCAqKiBwYXlsb2FkKTsKKworLyoqCisgKiBHc3REUFBhY2tldGl6ZXI6CisgKiBAdmVyc2lvbjogdGhlICNHc3REUFZlcnNpb24gb2YgdGhlIHByb3RvY29sIHRvIGJlIHVzZWQKKyAqIEBoZWFkZXJfZnJvbV9idWZmZXI6IGJ1ZmZlciBzZXJpYWxpemVyIGZ1bmN0aW9uCisgKiBAcGFja2V0X2Zyb21fY2FwczogY2FwcyBzZXJpYWxpemVyIGZ1bmN0aW9uCisgKiBAcGFja2V0X2Zyb21fZXZlbnQ6IGV2ZW50IHNlcmlhbGl6ZXIgZnVuY3Rpb24KKyAqCisgKiBEYXRhIHByb3RvY29sIHBhY2tldGl6ZXIgaGFuZGxlLgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgIEdzdERQVmVyc2lvbiB2ZXJzaW9uOworCisgIEdzdERQSGVhZGVyRnJvbUJ1ZmZlckZ1bmN0aW9uIGhlYWRlcl9mcm9tX2J1ZmZlcjsKKyAgR3N0RFBQYWNrZXRGcm9tQ2Fwc0Z1bmN0aW9uIHBhY2tldF9mcm9tX2NhcHM7CisgIEdzdERQUGFja2V0RnJvbUV2ZW50RnVuY3Rpb24gcGFja2V0X2Zyb21fZXZlbnQ7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOworfSBHc3REUFBhY2tldGl6ZXI7CisKKwordm9pZAkJZ3N0X2RwX2luaXQJCQkodm9pZCk7CisKKy8qIHBhY2tldGl6ZXIgKi8KK0dzdERQUGFja2V0aXplciAqCisgICAgICAgICAgICAgICAgZ3N0X2RwX3BhY2tldGl6ZXJfbmV3ICAgICAgICAgICAoR3N0RFBWZXJzaW9uIHZlcnNpb24pOwordm9pZCAgICAgICAgICAgIGdzdF9kcF9wYWNrZXRpemVyX2ZyZWUgICAgICAgICAgKEdzdERQUGFja2V0aXplciAqcGFja2V0aXplcik7CisKKy8qIGNyYyBjaGVja3N1bSAqLworZ3VpbnQxNiAgICAgICAgIGdzdF9kcF9jcmMgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGd1aW50OCAqIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBsZW5ndGgpOworCisvKiBwYXlsb2FkIGluZm9ybWF0aW9uIGZyb20gaGVhZGVyICovCitndWludDMyCQlnc3RfZHBfaGVhZGVyX3BheWxvYWRfbGVuZ3RoCShjb25zdCBndWludDggKiBoZWFkZXIpOworR3N0RFBQYXlsb2FkVHlwZQorCQlnc3RfZHBfaGVhZGVyX3BheWxvYWRfdHlwZQkoY29uc3QgZ3VpbnQ4ICogaGVhZGVyKTsKKworLyogY29udmVydGluZyB0byBHc3RCdWZmZXIvR3N0RXZlbnQvR3N0Q2FwcyAqLworR3N0QnVmZmVyICoJZ3N0X2RwX2J1ZmZlcl9mcm9tX2hlYWRlcgkoZ3VpbnQgaGVhZGVyX2xlbmd0aCwKKwkJCQkJCWNvbnN0IGd1aW50OCAqIGhlYWRlcik7CitHc3RDYXBzICoJZ3N0X2RwX2NhcHNfZnJvbV9wYWNrZXQJCShndWludCBoZWFkZXJfbGVuZ3RoLAorCQkJCQkJY29uc3QgZ3VpbnQ4ICogaGVhZGVyLAorCQkJCQkJY29uc3QgZ3VpbnQ4ICogcGF5bG9hZCk7CitHc3RFdmVudCAqCWdzdF9kcF9ldmVudF9mcm9tX3BhY2tldAkoZ3VpbnQgaGVhZGVyX2xlbmd0aCwKKwkJCQkJCWNvbnN0IGd1aW50OCAqIGhlYWRlciwKKwkJCQkJCWNvbnN0IGd1aW50OCAqIHBheWxvYWQpOworCisvKiB2YWxpZGF0aW9uICovCitnYm9vbGVhbglnc3RfZHBfdmFsaWRhdGVfaGVhZGVyCQkoZ3VpbnQgaGVhZGVyX2xlbmd0aCwKKwkJCQkJCWNvbnN0IGd1aW50OCAqIGhlYWRlcik7CitnYm9vbGVhbglnc3RfZHBfdmFsaWRhdGVfcGF5bG9hZAkJKGd1aW50IGhlYWRlcl9sZW5ndGgsCisJCQkJCQljb25zdCBndWludDggKiBoZWFkZXIsCisJCQkJCQljb25zdCBndWludDggKiBwYXlsb2FkKTsKK2dib29sZWFuCWdzdF9kcF92YWxpZGF0ZV9wYWNrZXQJCShndWludCBoZWFkZXJfbGVuZ3RoLAorCQkJCQkJY29uc3QgZ3VpbnQ4ICogaGVhZGVyLAorCQkJCQkJY29uc3QgZ3VpbnQ4ICogcGF5bG9hZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9EQVRBX1BST1RPQ09MX0hfXyAqLworCmRpZmYgLS1naXQgYS9saWJzL2dzdC9kYXRhcHJvdG9jb2wvZHAtcHJpdmF0ZS5oIGIvbGlicy9nc3QvZGF0YXByb3RvY29sL2RwLXByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTU0MDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9nc3QvZGF0YXByb3RvY29sL2RwLXByaXZhdGUuaApAQCAtMCwwICsxLDUyIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiBDb3B5cmlnaHQgKEMpIDwyMDA0PiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisgKgorICogZHAtcHJpdmF0ZS5oOiBwcml2YXRlIGRlZmluZXMvbWFjcm9zIGZvciBkYXRhcHJvdG9jb2wgaW1wbGVtZW50YXRpb24KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fR1NUX0RQX1BSSVZBVEVfSF9fCisjZGVmaW5lIF9fR1NUX0RQX1BSSVZBVEVfSF9fCisKKyNpbmNsdWRlIDxnc3QvZ3N0YnVmZmVyLmg+CisjaW5jbHVkZSA8Z3N0L2dzdGV2ZW50Lmg+CisjaW5jbHVkZSA8Z3N0L2dzdGNhcHMuaD4KKworR19CRUdJTl9ERUNMUworCisvKiBhY2Nlc3NvciBkZWZpbmVzICovCisjZGVmaW5lIEdTVF9EUF9IRUFERVJfTUFKT1JfVkVSU0lPTih4KQkoKHgpWzBdKQorI2RlZmluZSBHU1RfRFBfSEVBREVSX01JTk9SX1ZFUlNJT04oeCkgICgoeClbMV0pCisjZGVmaW5lIEdTVF9EUF9IRUFERVJfRkxBR1MoeCkgICAgICAgICAgKCh4KVsyXSkKKy8qIGZyZWUgYnl0ZSBoZXJlIHRvIGFsaWduICovCisjZGVmaW5lIEdTVF9EUF9IRUFERVJfUEFZTE9BRF9UWVBFKHgpICAgR1NUX1JFQURfVUlOVDE2X0JFICh4ICsgNCkKKyNkZWZpbmUgR1NUX0RQX0hFQURFUl9QQVlMT0FEX0xFTkdUSCh4KSBHU1RfUkVBRF9VSU5UMzJfQkUgKHggKyA2KQorI2RlZmluZSBHU1RfRFBfSEVBREVSX1RJTUVTVEFNUCh4KSAgICAgIEdTVF9SRUFEX1VJTlQ2NF9CRSAoeCArIDEwKQorI2RlZmluZSBHU1RfRFBfSEVBREVSX0RVUkFUSU9OKHgpICAgICAgIEdTVF9SRUFEX1VJTlQ2NF9CRSAoeCArIDE4KQorI2RlZmluZSBHU1RfRFBfSEVBREVSX09GRlNFVCh4KSAgICAgICAgIEdTVF9SRUFEX1VJTlQ2NF9CRSAoeCArIDI2KQorI2RlZmluZSBHU1RfRFBfSEVBREVSX09GRlNFVF9FTkQoeCkgICAgIEdTVF9SRUFEX1VJTlQ2NF9CRSAoeCArIDM0KQorI2RlZmluZSBHU1RfRFBfSEVBREVSX0JVRkZFUl9GTEFHUyh4KSAgIEdTVF9SRUFEX1VJTlQxNl9CRSAoeCArIDQyKQorI2RlZmluZSBHU1RfRFBfSEVBREVSX0NSQ19IRUFERVIoeCkgICAgIEdTVF9SRUFEX1VJTlQxNl9CRSAoeCArIDU4KQorI2RlZmluZSBHU1RfRFBfSEVBREVSX0NSQ19QQVlMT0FEKHgpICAgIEdTVF9SRUFEX1VJTlQxNl9CRSAoeCArIDYwKQorCit2b2lkIGdzdF9kcF9kdW1wX2J5dGVfYXJyYXkgKGd1aW50OCAqYXJyYXksIGd1aW50IGxlbmd0aCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9EUF9QUklWQVRFX0hfXyAqLworCmRpZmYgLS1naXQgYS9saWJzL2dzdC9oZWxwZXJzL01ha2VmaWxlLmFtIGIvbGlicy9nc3QvaGVscGVycy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTQ2ZmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9nc3QvaGVscGVycy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDE5IEBACitoZWxwZXJzX1BST0dSQU1TID0gZ3N0LXBsdWdpbi1zY2FubmVyCitoZWxwZXJzZGlyPSQobGliZXhlY2RpcikvZ3N0cmVhbWVyLSQoR1NUX01BSk9STUlOT1IpCisKK2dzdF9wbHVnaW5fc2Nhbm5lcl9TT1VSQ0VTID0gZ3N0LXBsdWdpbi1zY2FubmVyLmMKK2dzdF9wbHVnaW5fc2Nhbm5lcl9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQorZ3N0X3BsdWdpbl9zY2FubmVyX0xEQUREID0gJChHU1RfT0JKX0xJQlMpCisKK0FuZHJvaWQubWs6IE1ha2VmaWxlLmFtCisJYW5kcm9nZW5pemVyIC06UFJPSkVDVCBnc3RyZWFtZXIgLTpFWEVDVVRBQkxFIGdzdC1wbHVnaW4tc2Nhbm5lciAgLTpUQUdTIGVuZyBkZWJ1ZyBcCisJIC06UkVMX1RPUCAkKHRvcF9zcmNkaXIpIC06QUJTX1RPUCAkKGFic190b3Bfc3JjZGlyKSBcCisJIC06U09VUkNFUyAkKGdzdF9wbHVnaW5fc2Nhbm5lcl9TT1VSQ0VTKSBcCisJIC06Q0ZMQUdTICQoZ3N0X3BsdWdpbl9zY2FubmVyX0NGTEFHUykgXAorCSAtOkxERkxBR1MgJChnc3RfcGx1Z2luX3NjYW5uZXJfTERBREQpIFwKKwkgLTpQQVNTVEhST1VHSCBMT0NBTF9BUk1fTU9ERTo9YXJtIFwKKwk+ICRACisKKyMgY2xlYW4gb3V0IHRoZSBvbGQgb25lIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIHVkcGF0ZWQgY29ycmVjdGx5CisjIHJlbW92ZSBhZ2FpbiBhZnRlciByZWxlYXNlCitDTEVBTkZJTEVTID0gcGx1Z2luLXNjYW5uZXIKZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2hlbHBlcnMvTWFrZWZpbGUuaW4gYi9saWJzL2dzdC9oZWxwZXJzL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NmFhN2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2dzdC9oZWxwZXJzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNzQ0IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitoZWxwZXJzX1BST0dSQU1TID0gZ3N0LXBsdWdpbi1zY2FubmVyJChFWEVFWFQpCitzdWJkaXIgPSBsaWJzL2dzdC9oZWxwZXJzCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1weXRob24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXNjcnViLWluY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGhlbHBlcnNkaXIpIgorUFJPR1JBTVMgPSAkKGhlbHBlcnNfUFJPR1JBTVMpCithbV9nc3RfcGx1Z2luX3NjYW5uZXJfT0JKRUNUUyA9ICBcCisJZ3N0X3BsdWdpbl9zY2FubmVyLWdzdC1wbHVnaW4tc2Nhbm5lci4kKE9CSkVYVCkKK2dzdF9wbHVnaW5fc2Nhbm5lcl9PQkpFQ1RTID0gJChhbV9nc3RfcGx1Z2luX3NjYW5uZXJfT0JKRUNUUykKK2FtX19ERVBFTkRFTkNJRVNfMSA9Citnc3RfcGx1Z2luX3NjYW5uZXJfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCitBTV9WX2x0ID0gJChhbV9fdl9sdF8kKFYpKQorYW1fX3ZfbHRfID0gJChhbV9fdl9sdF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X2x0XzAgPSAtLXNpbGVudAorZ3N0X3BsdWdpbl9zY2FubmVyX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAorCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCisJJChnc3RfcGx1Z2luX3NjYW5uZXJfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCisJJChMREZMQUdTKSAtbyAkQAorREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCithbV9fbXYgPSBtdiAtZgorQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0FNX1ZfQ0MgPSAkKGFtX192X0NDXyQoVikpCithbV9fdl9DQ18gPSAkKGFtX192X0NDXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF8kKFYpKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X2F0XzAgPSBACitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0FNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF8kKFYpKQorYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAiICRAOworQU1fVl9HRU4gPSAkKGFtX192X0dFTl8kKFYpKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworU09VUkNFUyA9ICQoZ3N0X3BsdWdpbl9zY2FubmVyX1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKGdzdF9wbHVnaW5fc2Nhbm5lcl9TT1VSQ0VTKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBUyA9IEBBU0AKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAorQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAorQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKK0NDID0gQENDQAorQ0NBUyA9IEBDQ0FTQAorQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACitDQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDSEVDS19NQUpPUl9WRVJTSU9OID0gQENIRUNLX01BSk9SX1ZFUlNJT05ACitDSEVDS19NSUNST19WRVJTSU9OID0gQENIRUNLX01JQ1JPX1ZFUlNJT05ACitDSEVDS19NSU5PUl9WRVJTSU9OID0gQENIRUNLX01JTk9SX1ZFUlNJT05ACitDSEVDS19WRVJTSU9OID0gQENIRUNLX1ZFUlNJT05ACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEFESVIgPSBAREFUQURJUkAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRU5BQkxFX1NVQlVOSVQgPSBARU5BQkxFX1NVQlVOSVRACitFUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZGTEFHUyA9IEBGRkxBR1NACitGR1JFUCA9IEBGR1JFUEAKK0ZMRVhfUEFUSCA9IEBGTEVYX1BBVEhACitHQ09WID0gQEdDT1ZACitHQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKK0dDT1ZfTElCUyA9IEBHQ09WX0xJQlNACitHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAorR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKK0dMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAorR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKK0dMSUJfT05MWV9DRkxBR1MgPSBAR0xJQl9PTkxZX0NGTEFHU0AKK0dMSUJfT05MWV9MSUJTID0gQEdMSUJfT05MWV9MSUJTQAorR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACitHTElCX1JFUSA9IEBHTElCX1JFUUAKK0dNUF9MSUJTID0gQEdNUF9MSUJTQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHUkVQID0gQEdSRVBACitHU0xfTElCUyA9IEBHU0xfTElCU0AKK0dTVF9BR0UgPSBAR1NUX0FHRUAKK0dTVF9BTExfQ0ZMQUdTID0gQEdTVF9BTExfQ0ZMQUdTQAorR1NUX0FMTF9DWFhGTEFHUyA9IEBHU1RfQUxMX0NYWEZMQUdTQAorR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKK0dTVF9BTExfTElCUyA9IEBHU1RfQUxMX0xJQlNACitHU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKK0dTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9ERUZJTkVACitHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkVACitHU1RfRElTQUJMRV9ORVRfREVGSU5FID0gQEdTVF9ESVNBQkxFX05FVF9ERUZJTkVACitHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAorR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKK0dTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKK0dTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACitHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfVFJBQ0VfREVGSU5FQAorR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAorR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAorR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTU19ERUZJTkUgPSBAR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTU19ERUZJTkVACitHU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKK0dTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAorR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKK0dTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAorR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACitHU1RfTUFKT1JNSU5PUiA9IEBHU1RfTUFKT1JNSU5PUkAKK0dTVF9PQkpfQ0ZMQUdTID0gQEdTVF9PQkpfQ0ZMQUdTQAorR1NUX09CSl9DWFhGTEFHUyA9IEBHU1RfT0JKX0NYWEZMQUdTQAorR1NUX09CSl9MSUJTID0gQEdTVF9PQkpfTElCU0AKK0dTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAorR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAorR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAorR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKK0dTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKK0dTVF9QS0dfREVQUyA9IEBHU1RfUEtHX0RFUFNACitHU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAorR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAorR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1BPSU5URVJfRk9STUFUX0RFRklORUAKK0dTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORSA9IEBHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkVACitHU1RfUkVHSVNUUllfRE9DX1RZUEVTID0gQEdTVF9SRUdJU1RSWV9ET0NfVFlQRVNACitHU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAorR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FID0gQEdTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OX0RFRklORUAKK0dUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACitIQVZFX0RPQ0JPT0sySFRNTCA9IEBIQVZFX0RPQ0JPT0sySFRNTEAKK0hBVkVfRE9DQk9PSzJQUyA9IEBIQVZFX0RPQ0JPT0syUFNACitIQVZFX0RWSVBTID0gQEhBVkVfRFZJUFNACitIQVZFX0VQU1RPUERGID0gQEhBVkVfRVBTVE9QREZACitIQVZFX0ZJRzJERVYgPSBASEFWRV9GSUcyREVWQAorSEFWRV9HTVAgPSBASEFWRV9HTVBACitIQVZFX0dTTCA9IEBIQVZFX0dTTEAKK0hBVkVfSkFERVRFWCA9IEBIQVZFX0pBREVURVhACitIQVZFX1BOR1RPUE5NID0gQEhBVkVfUE5HVE9QTk1ACitIQVZFX1BOTVRPUFMgPSBASEFWRV9QTk1UT1BTQAorSEFWRV9QUzJQREYgPSBASEFWRV9QUzJQREZACitIQVZFX1hNTExJTlQgPSBASEFWRV9YTUxMSU5UQAorSE9TVF9DUFUgPSBASE9TVF9DUFVACitIVE1MX0RJUiA9IEBIVE1MX0RJUkAKK0lORVRfQVRPTl9MSUJTID0gQElORVRfQVRPTl9MSUJTQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAorSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAorSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAorSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACitJTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAorSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAorSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkRJUiA9IEBMSUJESVJACitMSUJJQ09OViA9IEBMSUJJQ09OVkAKK0xJQklOVEwgPSBATElCSU5UTEAKK0xJQk0gPSBATElCTUAKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xPQ0FMRURJUiA9IEBMT0NBTEVESVJACitMVExJQklDT05WID0gQExUTElCSUNPTlZACitMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BSU5UID0gQE1BSU5UQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAorUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKK1BBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACitQQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKK1BBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMX1BBVEggPSBAUEVSTF9QQVRIQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUExVR0lORElSID0gQFBMVUdJTkRJUkAKK1BPU1VCID0gQFBPU1VCQAorUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACitQWVRIT04gPSBAUFlUSE9OQAorUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKK1BZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACitQWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACitQWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKK1ZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKK1ZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1dBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAorV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAorWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKK1hTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK2x0X0VDSE8gPSBAbHRfRUNIT0AKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKK3BrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACitwbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKK3B5dGhvbmRpciA9IEBweXRob25kaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK2hlbHBlcnNkaXIgPSAkKGxpYmV4ZWNkaXIpL2dzdHJlYW1lci0kKEdTVF9NQUpPUk1JTk9SKQorZ3N0X3BsdWdpbl9zY2FubmVyX1NPVVJDRVMgPSBnc3QtcGx1Z2luLXNjYW5uZXIuYworZ3N0X3BsdWdpbl9zY2FubmVyX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCitnc3RfcGx1Z2luX3NjYW5uZXJfTERBREQgPSAkKEdTVF9PQkpfTElCUykKKworIyBjbGVhbiBvdXQgdGhlIG9sZCBvbmUgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgdWRwYXRlZCBjb3JyZWN0bHkKKyMgcmVtb3ZlIGFnYWluIGFmdGVyIHJlbGVhc2UKK0NMRUFORklMRVMgPSBwbHVnaW4tc2Nhbm5lcgorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgbGlicy9nc3QvaGVscGVycy9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSBsaWJzL2dzdC9oZWxwZXJzL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgoraW5zdGFsbC1oZWxwZXJzUFJPR1JBTVM6ICQoaGVscGVyc19QUk9HUkFNUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGhlbHBlcnNkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChoZWxwZXJzZGlyKSIKKwlAbGlzdD0nJChoZWxwZXJzX1BST0dSQU1TKSc7IHRlc3QgLW4gIiQoaGVscGVyc2RpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKKwlzZWQgJ3MvJChFWEVFWFQpJCQvLycgfCBcCisJd2hpbGUgcmVhZCBwIHAxOyBkbyBpZiB0ZXN0IC1mICQkcCB8fCB0ZXN0IC1mICQkcDE7IFwKKwkgIHRoZW4gZWNobyAiJCRwIjsgZWNobyAiJCRwIjsgZWxzZSA6OyBmaTsgXAorCWRvbmUgfCBcCisJc2VkIC1lICdwO3MsLiovLCw7bjtoJyAtZSAnc3wuKnwufCcgXAorCSAgICAtZSAncDt4O3MsLiovLCw7cy8kKEVYRUVYVCkkJC8vOyQodHJhbnNmb3JtKTtzLyQkLyQoRVhFRVhUKS8nIHwgXAorCXNlZCAnTjtOO047cyxcbiwgLGcnIHwgXAorCSQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiI7IGRpcnNbIi4iXSA9IDEgfSBcCisJICB7IGQ9JCQzOyBpZiAoZGlyc1tkXSAhPSAxKSB7IHByaW50ICJkIiwgZDsgZGlyc1tkXSA9IDEgfSBcCisJICAgIGlmICgkJDIgPT0gJCQ0KSBmaWxlc1tkXSA9IGZpbGVzW2RdICIgIiAkJDE7IFwKKwkgICAgZWxzZSB7IHByaW50ICJmIiwgJCQzICIvIiAkJDQsICQkMTsgfSB9IFwKKwkgIEVORCB7IGZvciAoZCBpbiBmaWxlcykgcHJpbnQgImYiLCBkLCBmaWxlc1tkXSB9JyB8IFwKKwl3aGlsZSByZWFkIHR5cGUgZGlyIGZpbGVzOyBkbyBcCisJICAgIGlmIHRlc3QgIiQkZGlyIiA9IC47IHRoZW4gZGlyPTsgZWxzZSBkaXI9LyQkZGlyOyBmaTsgXAorCSAgICB0ZXN0IC16ICIkJGZpbGVzIiB8fCB7IFwKKwkgICAgZWNobyAiICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTF9QUk9HUkFNKSAkJGZpbGVzICckKERFU1RESVIpJChoZWxwZXJzZGlyKSQkZGlyJyI7IFwKKwkgICAgJChJTlNUQUxMX1BST0dSQU1fRU5WKSAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZXMgIiQoREVTVERJUikkKGhlbHBlcnNkaXIpJCRkaXIiIHx8IGV4aXQgJCQ/OyBcCisJICAgIH0gXAorCTsgZG9uZQorCit1bmluc3RhbGwtaGVscGVyc1BST0dSQU1TOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQoaGVscGVyc19QUk9HUkFNUyknOyB0ZXN0IC1uICIkKGhlbHBlcnNkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBcCisJICBzZWQgLWUgJ2g7cyxeLiovLCw7cy8kKEVYRUVYVCkkJC8vOyQodHJhbnNmb3JtKScgXAorCSAgICAgIC1lICdzLyQkLyQoRVhFRVhUKS8nIGA7IFwKKwl0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiAoIGNkICckKERFU1RESVIpJChoZWxwZXJzZGlyKScgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisJY2QgIiQoREVTVERJUikkKGhlbHBlcnNkaXIpIiAmJiBybSAtZiAkJGZpbGVzCisKK2NsZWFuLWhlbHBlcnNQUk9HUkFNUzoKKwlAbGlzdD0nJChoZWxwZXJzX1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKKwl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAorCWxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdAorZ3N0LXBsdWdpbi1zY2FubmVyJChFWEVFWFQpOiAkKGdzdF9wbHVnaW5fc2Nhbm5lcl9PQkpFQ1RTKSAkKGdzdF9wbHVnaW5fc2Nhbm5lcl9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBnc3QtcGx1Z2luLXNjYW5uZXIkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKGdzdF9wbHVnaW5fc2Nhbm5lcl9MSU5LKSAkKGdzdF9wbHVnaW5fc2Nhbm5lcl9PQkpFQ1RTKSAkKGdzdF9wbHVnaW5fc2Nhbm5lcl9MREFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ3N0X3BsdWdpbl9zY2FubmVyLWdzdC1wbHVnaW4tc2Nhbm5lci5Qb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCitnc3RfcGx1Z2luX3NjYW5uZXItZ3N0LXBsdWdpbi1zY2FubmVyLm86IGdzdC1wbHVnaW4tc2Nhbm5lci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ3N0X3BsdWdpbl9zY2FubmVyX0NGTEFHUykgJChDRkxBR1MpIC1NVCBnc3RfcGx1Z2luX3NjYW5uZXItZ3N0LXBsdWdpbi1zY2FubmVyLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdF9wbHVnaW5fc2Nhbm5lci1nc3QtcGx1Z2luLXNjYW5uZXIuVHBvIC1jIC1vIGdzdF9wbHVnaW5fc2Nhbm5lci1nc3QtcGx1Z2luLXNjYW5uZXIubyBgdGVzdCAtZiAnZ3N0LXBsdWdpbi1zY2FubmVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC1wbHVnaW4tc2Nhbm5lci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RfcGx1Z2luX3NjYW5uZXItZ3N0LXBsdWdpbi1zY2FubmVyLlRwbyAkKERFUERJUikvZ3N0X3BsdWdpbl9zY2FubmVyLWdzdC1wbHVnaW4tc2Nhbm5lci5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC1wbHVnaW4tc2Nhbm5lci5jJyBvYmplY3Q9J2dzdF9wbHVnaW5fc2Nhbm5lci1nc3QtcGx1Z2luLXNjYW5uZXIubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ3N0X3BsdWdpbl9zY2FubmVyX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdF9wbHVnaW5fc2Nhbm5lci1nc3QtcGx1Z2luLXNjYW5uZXIubyBgdGVzdCAtZiAnZ3N0LXBsdWdpbi1zY2FubmVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC1wbHVnaW4tc2Nhbm5lci5jCisKK2dzdF9wbHVnaW5fc2Nhbm5lci1nc3QtcGx1Z2luLXNjYW5uZXIub2JqOiBnc3QtcGx1Z2luLXNjYW5uZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdzdF9wbHVnaW5fc2Nhbm5lcl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0X3BsdWdpbl9zY2FubmVyLWdzdC1wbHVnaW4tc2Nhbm5lci5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdF9wbHVnaW5fc2Nhbm5lci1nc3QtcGx1Z2luLXNjYW5uZXIuVHBvIC1jIC1vIGdzdF9wbHVnaW5fc2Nhbm5lci1nc3QtcGx1Z2luLXNjYW5uZXIub2JqIGBpZiB0ZXN0IC1mICdnc3QtcGx1Z2luLXNjYW5uZXIuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QtcGx1Z2luLXNjYW5uZXIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0LXBsdWdpbi1zY2FubmVyLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdF9wbHVnaW5fc2Nhbm5lci1nc3QtcGx1Z2luLXNjYW5uZXIuVHBvICQoREVQRElSKS9nc3RfcGx1Z2luX3NjYW5uZXItZ3N0LXBsdWdpbi1zY2FubmVyLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0LXBsdWdpbi1zY2FubmVyLmMnIG9iamVjdD0nZ3N0X3BsdWdpbl9zY2FubmVyLWdzdC1wbHVnaW4tc2Nhbm5lci5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdzdF9wbHVnaW5fc2Nhbm5lcl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RfcGx1Z2luX3NjYW5uZXItZ3N0LXBsdWdpbi1zY2FubmVyLm9iaiBgaWYgdGVzdCAtZiAnZ3N0LXBsdWdpbi1zY2FubmVyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0LXBsdWdpbi1zY2FubmVyLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC1wbHVnaW4tc2Nhbm5lci5jJzsgZmlgCisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJc2V0IHg7IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoUFJPR1JBTVMpCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChoZWxwZXJzZGlyKSI7IGRvIFwKKwkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKKwlkb25lCitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChDTEVBTkZJTEVTKQorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4taGVscGVyc1BST0dSQU1TIGNsZWFuLWxpYnRvb2wgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWhlbHBlcnNQUk9HUkFNUworCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtaGVscGVyc1BST0dSQU1TCisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWhlbHBlcnNQUk9HUkFNUyBjbGVhbi1saWJ0b29sIGN0YWdzIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBcCisJaW5zdGFsbC1oZWxwZXJzUFJPR1JBTVMgaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBcCisJaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBcCisJaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgXAorCWluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWhlbHBlcnNQUk9HUkFNUworCisKK0FuZHJvaWQubWs6IE1ha2VmaWxlLmFtCisJYW5kcm9nZW5pemVyIC06UFJPSkVDVCBnc3RyZWFtZXIgLTpFWEVDVVRBQkxFIGdzdC1wbHVnaW4tc2Nhbm5lciAgLTpUQUdTIGVuZyBkZWJ1ZyBcCisJIC06UkVMX1RPUCAkKHRvcF9zcmNkaXIpIC06QUJTX1RPUCAkKGFic190b3Bfc3JjZGlyKSBcCisJIC06U09VUkNFUyAkKGdzdF9wbHVnaW5fc2Nhbm5lcl9TT1VSQ0VTKSBcCisJIC06Q0ZMQUdTICQoZ3N0X3BsdWdpbl9zY2FubmVyX0NGTEFHUykgXAorCSAtOkxERkxBR1MgJChnc3RfcGx1Z2luX3NjYW5uZXJfTERBREQpIFwKKwkgLTpQQVNTVEhST1VHSCBMT0NBTF9BUk1fTU9ERTo9YXJtIFwKKwk+ICRACisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2hlbHBlcnMvZ3N0LXBsdWdpbi1zY2FubmVyLmMgYi9saWJzL2dzdC9oZWxwZXJzL2dzdC1wbHVnaW4tc2Nhbm5lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MDU3MjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2dzdC9oZWxwZXJzL2dzdC1wbHVnaW4tc2Nhbm5lci5jCkBAIC0wLDAgKzEsNjcgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA4IEphbiBTY2htaWR0IDxqYW4uc2NobWlkdEBzdW4uY29tPgorICoKKyAqIGdzdC1wbHVnaW4tc2Nhbm5lci5jOiB0b29sIHRvIGxvYWQgcGx1Z2lucyBvdXQgb2YgcHJvY2VzcyBmb3Igc2Nhbm5pbmcKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBIZWxwZXIgYmluYXJ5IHRoYXQgZG9lcyBwbHVnaW4tbG9hZGluZyBvdXQgb2YgcHJvY2VzcyBhbmQgZmVlZHMgcmVzdWx0cworICogYmFjayB0byB0aGUgcGFyZW50IG92ZXIgZmRzLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8Z3N0L2dzdF9wcml2YXRlLmg+CisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgZ2Jvb2xlYW4gcmVzOworICBjaGFyICoqbXlfYXJndjsKKyAgaW50IG15X2FyZ2M7CisKKyAgaWYgKGFyZ2MgIT0gMiB8fCBzdHJjbXAgKGFyZ3ZbMV0sICItbCIpKQorICAgIHJldHVybiAxOworCisgIGlmICghZ190aHJlYWRfc3VwcG9ydGVkICgpKQorICAgIGdfdGhyZWFkX2luaXQgKE5VTEwpOworCisgIG15X2FyZ2MgPSAyOworICBteV9hcmd2ID0gZ19tYWxsb2MgKG15X2FyZ2MgKiBzaXplb2YgKGNoYXIgKikpOworICBteV9hcmd2WzBdID0gYXJndlswXTsKKyAgbXlfYXJndlsxXSA9IChjaGFyICopICItLWdzdC1kaXNhYmxlLXJlZ2lzdHJ5LXVwZGF0ZSI7CisKKyNpZm5kZWYgR1NUX0RJU0FCTEVfUkVHSVNUUlkKKyAgX2dzdF9kaXNhYmxlX3JlZ2lzdHJ5X2NhY2hlID0gVFJVRTsKKyNlbmRpZgorCisgIHJlcyA9IGdzdF9pbml0X2NoZWNrICgmbXlfYXJnYywgJm15X2FyZ3YsIE5VTEwpOworCisgIGdfZnJlZSAobXlfYXJndik7CisgIGlmICghcmVzKQorICAgIHJldHVybiAxOworCisgIC8qIENyZWF0ZSByZWdpc3RyeSBzY2FubmVyIGxpc3RlbmVyIGFuZCBydW4gKi8KKyAgaWYgKCFfZ3N0X3BsdWdpbl9sb2FkZXJfY2xpZW50X3J1biAoKSkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbSBiL2xpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2FmYTY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9nc3QvbmV0L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsODQgQEAKK2xpYl9MVExJQlJBUklFUyA9IGxpYmdzdG5ldC1AR1NUX01BSk9STUlOT1JALmxhCisKK2xpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL2dzdHJlYW1lci1AR1NUX01BSk9STUlOT1JAL2dzdC9uZXQKK2xpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVfSEVBREVSUyA9IFwKKyAgICBnc3RuZXQuaCBcCisgICAgZ3N0bmV0Y2xpZW50Y2xvY2suaCBcCisgICAgZ3N0bmV0dGltZXBhY2tldC5oIFwKKyAgICBnc3RuZXR0aW1lcHJvdmlkZXIuaAorCitsaWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9sYV9TT1VSQ0VTID0gXAorICAgIGdzdG5ldGNsaWVudGNsb2NrLmMgXAorICAgIGdzdG5ldHRpbWVwYWNrZXQuYyBcCisgICAgZ3N0bmV0dGltZXByb3ZpZGVyLmMKKworbGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykKK2xpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2xhX0xJQkFERCA9ICQoR1NUX09CSl9MSUJTKSAkKElORVRfQVRPTl9MSUJTKSAkKFdJTjMyX0xJQlMpCitsaWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9sYV9MREZMQUdTID0gJChHU1RfTElCX0xERkxBR1MpICQoR1NUX0FMTF9MREZMQUdTKSAkKEdTVF9MVF9MREZMQUdTKQorCitDTEVBTkZJTEVTID0gKi5nY25vICouZ2NkYSAqLmdjb3YKKworJS5jLmdjb3Y6IC5saWJzL2xpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2xhLSUuZ2NkYSAlLmMKKwkkKEdDT1YpIC1iIC1mIC1vICReID4gJEAub3V0CisKK2djb3Y6ICQobGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfbGFfU09VUkNFUzo9Lmdjb3YpCisKK0FuZHJvaWQubWs6IE1ha2VmaWxlLmFtCisJYW5kcm9nZW5pemVyIC06UFJPSkVDVCBnc3RyZWFtZXIgLTpTSEFSRUQgbGliZ3N0bmV0LUBHU1RfTUFKT1JNSU5PUkAgLTpUQUdTIGVuZyBkZWJ1ZyBcCisJIC06UkVMX1RPUCAkKHRvcF9zcmNkaXIpIC06QUJTX1RPUCAkKGFic190b3Bfc3JjZGlyKSBcCisJIC06U09VUkNFUyAkKGxpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2xhX1NPVVJDRVMpIFwKKwkgLTpDRkxBR1MgJChsaWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpIFwKKwkgLTpMREZMQUdTICQobGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfbGFfTERGTEFHUykgXAorCSAgICAgICAgICAgJChsaWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9sYV9MSUJBREQpIFwKKwkgLTpIRUFERVJfVEFSR0VUIGdzdHJlYW1lci1AR1NUX01BSk9STUlOT1JAL2dzdC9uZXQgXAorCSAtOkhFQURFUlMgJChsaWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9pbmNsdWRlX0hFQURFUlMpIFwKKwkgLTpQQVNTVEhST1VHSCBMT0NBTF9BUk1fTU9ERTo9YXJtIFwKKwk+ICRACisKKworaWYgSEFWRV9JTlRST1NQRUNUSU9OCitCVUlMVF9HSVJTT1VSQ0VTID0gR3N0TmV0LUBHU1RfTUFKT1JNSU5PUkAuZ2lyCisKK2dpcl9oZWFkZXJzPSQocGF0c3Vic3QgJSwkKHNyY2RpcikvJSwgJChsaWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9pbmNsdWRlX0hFQURFUlMpKQorZ2lyX3NvdXJjZXM9JChwYXRzdWJzdCAlLCQoc3JjZGlyKS8lLCAkKGxpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2xhX1NPVVJDRVMpKQorZ2lyX2NpbmNsdWRlcz0tLWMtaW5jbHVkZT0iZ3N0L25ldC9nc3RuZXQuaCIKKworR3N0TmV0LUBHU1RfTUFKT1JNSU5PUkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0bmV0LUBHU1RfTUFKT1JNSU5PUkAubGEKKwkkKEFNX1ZfR0VOKVBLR19DT05GSUdfUEFUSD0iJChHU1RfUEtHX0NPTkZJR19QQVRIKSIgXAorCQlHU1RfUExVR0lOX1NZU1RFTV9QQVRIPSIiIEdTVF9QTFVHSU5fUEFUSD0iIiBHU1RfUkVHSVNUUllfVVBEQVRFPW5vIFwKKwkJJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIC12IC0tbmFtZXNwYWNlIEdzdE5ldCBcCisJCS0tc3RyaXAtcHJlZml4PUdzdCBcCisJCS0tbnN2ZXJzaW9uPUBHU1RfTUFKT1JNSU5PUkAgXAorCQktREdTVF9VU0VfVU5TVEFCTEVfQVBJIFwKKwkJLUkkKHRvcF9zcmNkaXIpIFwKKwkJLUkkKHRvcF9zcmNkaXIpL2xpYnMgXAorCQktSSQodG9wX2J1aWxkZGlyKSBcCisJCS1JJCh0b3BfYnVpbGRkaXIpL2xpYnMgXAorCQkkKGdpcl9jaW5jbHVkZXMpIFwKKwkJLS1hZGQtaW5jbHVkZS1wYXRoPSQodG9wX2J1aWxkZGlyKS9nc3QgXAorCQktLWxpYnJhcnktcGF0aD0kKHRvcF9idWlsZGRpcikvZ3N0IFwKKwkJLS1saWJyYXJ5PSQodG9wX2J1aWxkZGlyKS9nc3QvbGliZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCQktLWxpYnJhcnk9bGliZ3N0bmV0LUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCQktLWluY2x1ZGU9R3N0LUBHU1RfTUFKT1JNSU5PUkAgXAorCQktLWxpYnRvb2w9IiQodG9wX2J1aWxkZGlyKS9saWJ0b29sIiBcCisJCS0tcGtnIGdzdHJlYW1lci1AR1NUX01BSk9STUlOT1JAIFwKKwkJLS1wa2ctZXhwb3J0PSJnc3RyZWFtZXItbmV0LUBHU1RfTUFKT1JNSU5PUkAiIFwKKwkJLS1hZGQtaW5pdC1zZWN0aW9uPSJnc3RfaW5pdChOVUxMLE5VTEwpOyIgXAorCQktLW91dHB1dCAkQCBcCisJCSQoZ2lyX2hlYWRlcnMpIFwKKwkJJChnaXJfc291cmNlcykKKworIyBJTlRST1NQRUNUSU9OX0dJUkRJUi9JTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgYXJlbid0IHRoZSByaWdodCBwbGFjZSB0bworIyBpbnN0YWxsIGFueXRoaW5nIC0gd2UgbmVlZCB0byBpbnN0YWxsIGluc2lkZSBvdXIgcHJlZml4LgorZ2lyZGlyID0gJChkYXRhZGlyKS9naXItMS4wCitnaXJfREFUQSA9ICQoQlVJTFRfR0lSU09VUkNFUykKKwordHlwZWxpYnNkaXIgPSAkKGxpYmRpcikvZ2lyZXBvc2l0b3J5LTEuMC8KKwordHlwZWxpYnNfREFUQSA9ICQoQlVJTFRfR0lSU09VUkNFUzouZ2lyPS50eXBlbGliKQorCislLnR5cGVsaWI6ICUuZ2lyICQoSU5UUk9TUEVDVElPTl9DT01QSUxFUikKKwkkKEFNX1ZfR0VOKSQoSU5UUk9TUEVDVElPTl9DT01QSUxFUikgLS1pbmNsdWRlZGlyPSQoc3JjZGlyKSAtLWluY2x1ZGVkaXI9JChidWlsZGRpcikgLS1pbmNsdWRlZGlyPSQodG9wX2J1aWxkZGlyKS9nc3QgJChJTlRST1NQRUNUSU9OX0NPTVBJTEVSX09QVFMpICQ8IC1vICQoQEYpCisKK0NMRUFORklMRVMgKz0gJChCVUlMVF9HSVJTT1VSQ0VTKSAkKHR5cGVsaWJzX0RBVEEpCitlbmRpZgpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvbmV0L01ha2VmaWxlLmluIGIvbGlicy9nc3QvbmV0L01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NjQ1YjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2dzdC9uZXQvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw4OTggQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKworCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAYW1fX2FwcGVuZF8xID0gJChCVUlMVF9HSVJTT1VSQ0VTKSAkKHR5cGVsaWJzX0RBVEEpCitzdWJkaXIgPSBsaWJzL2dzdC9uZXQKK0RJU1RfQ09NTU9OID0gJChsaWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9pbmNsdWRlX0hFQURFUlMpIFwKKwkkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtcHl0aG9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1zY3J1Yi1pbmNsdWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZnVuY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYXJzZXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2ludHJvc3BlY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jaGVjay1jaGVja3MubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ljb252Lm00ICQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00ICQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L25scy5tNCAkKHRvcF9zcmNkaXIpL200L3BvLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxfbWF4ID0gNDAKK2FtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCisgIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKK2FtX19ub2Jhc2Vfc3RyaXAgPSBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgorYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCisgICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAorICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAorICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKK2FtX19iYXNlX2xpc3QgPSBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKK2FtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChsaWJkaXIpIiAiJChERVNURElSKSQoZ2lyZGlyKSIgXAorCSIkKERFU1RESVIpJCh0eXBlbGlic2RpcikiIFwKKwkiJChERVNURElSKSQobGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZWRpcikiCitMVExJQlJBUklFUyA9ICQobGliX0xUTElCUkFSSUVTKQorYW1fX0RFUEVOREVOQ0lFU18xID0KK2xpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKQorYW1fbGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfbGFfT0JKRUNUUyA9ICBcCisJbGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bmV0Y2xpZW50Y2xvY2subG8gXAorCWxpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG5ldHRpbWVwYWNrZXQubG8gXAorCWxpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG5ldHRpbWVwcm92aWRlci5sbworbGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfbGFfT0JKRUNUUyA9ICBcCisJJChhbV9saWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9sYV9PQkpFQ1RTKQorQU1fVl9sdCA9ICQoYW1fX3ZfbHRfJChWKSkKK2FtX192X2x0XyA9ICQoYW1fX3ZfbHRfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9sdF8wID0gLS1zaWxlbnQKK2xpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAorCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCisJJChsaWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChsaWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCisJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfJChWKSkKK2FtX192X0NDXyA9ICQoYW1fX3ZfQ0NfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgIiAkQDsKK0FNX1ZfYXQgPSAkKGFtX192X2F0XyQoVikpCithbV9fdl9hdF8gPSAkKGFtX192X2F0XyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfYXRfMCA9IEAKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEXyQoVikpCithbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICIgJEA7CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOXyQoVikpCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitTT1VSQ0VTID0gJChsaWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9sYV9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChsaWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9sYV9TT1VSQ0VTKQorREFUQSA9ICQoZ2lyX0RBVEEpICQodHlwZWxpYnNfREFUQSkKK0hFQURFUlMgPSAkKGxpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVfSEVBREVSUykKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVMgPSBAQVNACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JJU09OX1BBVEggPSBAQklTT05fUEFUSEAKK0NBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKK0NBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACitDQyA9IEBDQ0AKK0NDQVMgPSBAQ0NBU0AKK0NDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAorQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAorQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAorQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAorQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRBRElSID0gQERBVEFESVJACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACitETExUT09MID0gQERMTFRPT0xACitET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAorRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKK0VYRUVYVCA9IEBFWEVFWFRACitGRkxBR1MgPSBARkZMQUdTQAorRkdSRVAgPSBARkdSRVBACitGTEVYX1BBVEggPSBARkxFWF9QQVRIQAorR0NPViA9IEBHQ09WQAorR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACitHQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAorR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACitHTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKK0dMSUJfTElCUyA9IEBHTElCX0xJQlNACitHTElCX09OTFlfQ0ZMQUdTID0gQEdMSUJfT05MWV9DRkxBR1NACitHTElCX09OTFlfTElCUyA9IEBHTElCX09OTFlfTElCU0AKK0dMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAorR0xJQl9SRVEgPSBAR0xJQl9SRVFACitHTVBfTElCUyA9IEBHTVBfTElCU0AKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAorR1JFUCA9IEBHUkVQQAorR1NMX0xJQlMgPSBAR1NMX0xJQlNACitHU1RfQUdFID0gQEdTVF9BR0VACitHU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKK0dTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKK0dTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACitHU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAorR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACitHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FQAorR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAorR1NUX0RJU0FCTEVfTkVUX0RFRklORSA9IEBHU1RfRElTQUJMRV9ORVRfREVGSU5FQAorR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKK0dTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACitHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACitHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAorR1NUX0RJU0FCTEVfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1RSQUNFX0RFRklORUAKK0dTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkUgPSBAR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORUAKK0dTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkUgPSBAR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORUAKK0dTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FID0gQEdTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FQAorR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACitHU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKK0dTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACitHU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKK0dTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAorR1NUX01BSk9STUlOT1IgPSBAR1NUX01BSk9STUlOT1JACitHU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKK0dTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKK0dTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACitHU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKK0dTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKK0dTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKK0dTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACitHU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACitHU1RfUEtHX0RFUFMgPSBAR1NUX1BLR19ERVBTQAorR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKK0dTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgPSBAR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFREAKK0dTVF9QUklOVEZfRVhURU5TSU9OX1BPSU5URVJfRk9STUFUX0RFRklORSA9IEBHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkVACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FQAorR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAorR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKK0dTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OX0RFRklORSA9IEBHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkVACitHVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAorSEFWRV9ET0NCT09LMkhUTUwgPSBASEFWRV9ET0NCT09LMkhUTUxACitIQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAorSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAorSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAorSEFWRV9GSUcyREVWID0gQEhBVkVfRklHMkRFVkAKK0hBVkVfR01QID0gQEhBVkVfR01QQAorSEFWRV9HU0wgPSBASEFWRV9HU0xACitIQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAorSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAorSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKK0hBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAorSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKK0hPU1RfQ1BVID0gQEhPU1RfQ1BVQAorSFRNTF9ESVIgPSBASFRNTF9ESVJACitJTkVUX0FUT05fTElCUyA9IEBJTkVUX0FUT05fTElCU0AKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACitJTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKK0lOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKK0lOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKK0lOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAorSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKK0lOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKK0lOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACitJTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJESVIgPSBATElCRElSQAorTElCSUNPTlYgPSBATElCSUNPTlZACitMSUJJTlRMID0gQExJQklOVExACitMSUJNID0gQExJQk1ACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMT0NBTEVESVIgPSBATE9DQUxFRElSQAorTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAorTFRMSUJJTlRMID0gQExUTElCSU5UTEAKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUlOVCA9IEBNQUlOVEAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKK01TR01FUkdFID0gQE1TR01FUkdFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKK1BBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACitQQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAorUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACitQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BMVUdJTkRJUiA9IEBQTFVHSU5ESVJACitQT1NVQiA9IEBQT1NVQkAKK1BST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAorUFlUSE9OID0gQFBZVEhPTkAKK1BZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACitQWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAorUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAorUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1ZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACitWQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACitWQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACitWRVJTSU9OID0gQFZFUlNJT05ACitXQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKK1dJTjMyX0xJQlMgPSBAV0lOMzJfTElCU0AKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKK1hHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKK1hNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAorWFNMVFBST0MgPSBAWFNMVFBST0NACitYU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3BrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACitwa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAorcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3B5ZXhlY2RpciA9IEBweWV4ZWNkaXJACitweXRob25kaXIgPSBAcHl0aG9uZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitsaWJfTFRMSUJSQVJJRVMgPSBsaWJnc3RuZXQtQEdTVF9NQUpPUk1JTk9SQC5sYQorbGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAvZ3N0L25ldAorbGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZV9IRUFERVJTID0gXAorICAgIGdzdG5ldC5oIFwKKyAgICBnc3RuZXRjbGllbnRjbG9jay5oIFwKKyAgICBnc3RuZXR0aW1lcGFja2V0LmggXAorICAgIGdzdG5ldHRpbWVwcm92aWRlci5oCisKK2xpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2xhX1NPVVJDRVMgPSBcCisgICAgZ3N0bmV0Y2xpZW50Y2xvY2suYyBcCisgICAgZ3N0bmV0dGltZXBhY2tldC5jIFwKKyAgICBnc3RuZXR0aW1lcHJvdmlkZXIuYworCitsaWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQorbGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfbGFfTElCQUREID0gJChHU1RfT0JKX0xJQlMpICQoSU5FVF9BVE9OX0xJQlMpICQoV0lOMzJfTElCUykKK2xpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2xhX0xERkxBR1MgPSAkKEdTVF9MSUJfTERGTEFHUykgJChHU1RfQUxMX0xERkxBR1MpICQoR1NUX0xUX0xERkxBR1MpCitDTEVBTkZJTEVTID0gKi5nY25vICouZ2NkYSAqLmdjb3YgJChhbV9fYXBwZW5kXzEpCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAQlVJTFRfR0lSU09VUkNFUyA9IEdzdE5ldC1AR1NUX01BSk9STUlOT1JALmdpcgorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQGdpcl9oZWFkZXJzID0gJChwYXRzdWJzdCAlLCQoc3JjZGlyKS8lLCAkKGxpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVfSEVBREVSUykpCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAZ2lyX3NvdXJjZXMgPSAkKHBhdHN1YnN0ICUsJChzcmNkaXIpLyUsICQobGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfbGFfU09VUkNFUykpCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAZ2lyX2NpbmNsdWRlcyA9IC0tYy1pbmNsdWRlPSJnc3QvbmV0L2dzdG5ldC5oIgorCisjIElOVFJPU1BFQ1RJT05fR0lSRElSL0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiBhcmVuJ3QgdGhlIHJpZ2h0IHBsYWNlIHRvCisjIGluc3RhbGwgYW55dGhpbmcgLSB3ZSBuZWVkIHRvIGluc3RhbGwgaW5zaWRlIG91ciBwcmVmaXguCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAZ2lyZGlyID0gJChkYXRhZGlyKS9naXItMS4wCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAZ2lyX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVMpCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAdHlwZWxpYnNkaXIgPSAkKGxpYmRpcikvZ2lyZXBvc2l0b3J5LTEuMC8KK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUB0eXBlbGlic19EQVRBID0gJChCVUlMVF9HSVJTT1VSQ0VTOi5naXI9LnR5cGVsaWIpCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBsaWJzL2dzdC9uZXQvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbnUgbGlicy9nc3QvbmV0L01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgoraW5zdGFsbC1saWJMVExJQlJBUklFUzogJChsaWJfTFRMSUJSQVJJRVMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChsaWJkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChsaWJkaXIpIgorCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKGxpYmRpcikiIHx8IGxpc3Q9OyBcCisJbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKKwkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAorCSAgZWxzZSA6OyBmaTsgXAorCWRvbmU7IFwKKwl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKKwkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQobGliZGlyKSciOyBcCisJICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQobGliZGlyKSI7IFwKKwl9CisKK3VuaW5zdGFsbC1saWJMVExJQlJBUklFUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKGxpYmRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICAkKGFtX19zdHJpcF9kaXIpIFwKKwkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQobGliZGlyKS8kJGYnIjsgXAorCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKGxpYmRpcikvJCRmIjsgXAorCWRvbmUKKworY2xlYW4tbGliTFRMSUJSQVJJRVM6CisJLXRlc3QgLXogIiQobGliX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChsaWJfTFRMSUJSQVJJRVMpCisJQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgZGlyPSJgZWNobyAkJHAgfCBzZWQgLWUgJ3N8L1teL10qJCR8fCdgIjsgXAorCSAgdGVzdCAiJCRkaXIiICE9ICIkJHAiIHx8IGRpcj0uOyBcCisJICBlY2hvICJybSAtZiBcIiQke2Rpcn0vc29fbG9jYXRpb25zXCIiOyBcCisJICBybSAtZiAiJCR7ZGlyfS9zb19sb2NhdGlvbnMiOyBcCisJZG9uZQorbGliZ3N0bmV0LUBHU1RfTUFKT1JNSU5PUkAubGE6ICQobGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfbGFfT0JKRUNUUykgJChsaWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9sYV9ERVBFTkRFTkNJRVMpIAorCSQoQU1fVl9DQ0xEKSQobGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfbGFfTElOSykgLXJwYXRoICQobGliZGlyKSAkKGxpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2xhX09CSkVDVFMpICQobGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfbGFfTElCQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RuZXRjbGllbnRjbG9jay5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG5ldHRpbWVwYWNrZXQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RuZXR0aW1lcHJvdmlkZXIuUGxvQGFtX19xdW90ZUAKKworLmMubzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgJDwKKworLmMub2JqOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisKK2xpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG5ldGNsaWVudGNsb2NrLmxvOiBnc3RuZXRjbGllbnRjbG9jay5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG5ldGNsaWVudGNsb2NrLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RuZXRjbGllbnRjbG9jay5UcG8gLWMgLW8gbGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bmV0Y2xpZW50Y2xvY2subG8gYHRlc3QgLWYgJ2dzdG5ldGNsaWVudGNsb2NrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG5ldGNsaWVudGNsb2NrLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG5ldGNsaWVudGNsb2NrLlRwbyAkKERFUERJUikvbGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bmV0Y2xpZW50Y2xvY2suUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0bmV0Y2xpZW50Y2xvY2suYycgb2JqZWN0PSdsaWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RuZXRjbGllbnRjbG9jay5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG5ldGNsaWVudGNsb2NrLmxvIGB0ZXN0IC1mICdnc3RuZXRjbGllbnRjbG9jay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RuZXRjbGllbnRjbG9jay5jCisKK2xpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG5ldHRpbWVwYWNrZXQubG86IGdzdG5ldHRpbWVwYWNrZXQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RuZXR0aW1lcGFja2V0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RuZXR0aW1lcGFja2V0LlRwbyAtYyAtbyBsaWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RuZXR0aW1lcGFja2V0LmxvIGB0ZXN0IC1mICdnc3RuZXR0aW1lcGFja2V0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG5ldHRpbWVwYWNrZXQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bmV0dGltZXBhY2tldC5UcG8gJChERVBESVIpL2xpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG5ldHRpbWVwYWNrZXQuUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0bmV0dGltZXBhY2tldC5jJyBvYmplY3Q9J2xpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG5ldHRpbWVwYWNrZXQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RuZXR0aW1lcGFja2V0LmxvIGB0ZXN0IC1mICdnc3RuZXR0aW1lcGFja2V0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG5ldHRpbWVwYWNrZXQuYworCitsaWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RuZXR0aW1lcHJvdmlkZXIubG86IGdzdG5ldHRpbWVwcm92aWRlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG5ldHRpbWVwcm92aWRlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bmV0dGltZXByb3ZpZGVyLlRwbyAtYyAtbyBsaWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9sYS1nc3RuZXR0aW1lcHJvdmlkZXIubG8gYHRlc3QgLWYgJ2dzdG5ldHRpbWVwcm92aWRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RuZXR0aW1lcHJvdmlkZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bmV0dGltZXByb3ZpZGVyLlRwbyAkKERFUERJUikvbGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfbGEtZ3N0bmV0dGltZXByb3ZpZGVyLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdG5ldHRpbWVwcm92aWRlci5jJyBvYmplY3Q9J2xpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG5ldHRpbWVwcm92aWRlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2xhLWdzdG5ldHRpbWVwcm92aWRlci5sbyBgdGVzdCAtZiAnZ3N0bmV0dGltZXByb3ZpZGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG5ldHRpbWVwcm92aWRlci5jCisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCitpbnN0YWxsLWdpckRBVEE6ICQoZ2lyX0RBVEEpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChnaXJkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChnaXJkaXIpIgorCUBsaXN0PSckKGdpcl9EQVRBKSc7IHRlc3QgLW4gIiQoZ2lyZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChnaXJkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChnaXJkaXIpIiB8fCBleGl0ICQkPzsgXAorCWRvbmUKKwordW5pbnN0YWxsLWdpckRBVEE6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChnaXJfREFUQSknOyB0ZXN0IC1uICIkKGdpcmRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwl0ZXN0IC1uICIkJGZpbGVzIiB8fCBleGl0IDA7IFwKKwllY2hvICIgKCBjZCAnJChERVNURElSKSQoZ2lyZGlyKScgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisJY2QgIiQoREVTVERJUikkKGdpcmRpcikiICYmIHJtIC1mICQkZmlsZXMKK2luc3RhbGwtdHlwZWxpYnNEQVRBOiAkKHR5cGVsaWJzX0RBVEEpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJCh0eXBlbGlic2RpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKHR5cGVsaWJzZGlyKSIKKwlAbGlzdD0nJCh0eXBlbGlic19EQVRBKSc7IHRlc3QgLW4gIiQodHlwZWxpYnNkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKHR5cGVsaWJzZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQodHlwZWxpYnNkaXIpIiB8fCBleGl0ICQkPzsgXAorCWRvbmUKKwordW5pbnN0YWxsLXR5cGVsaWJzREFUQToKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKHR5cGVsaWJzX0RBVEEpJzsgdGVzdCAtbiAiJCh0eXBlbGlic2RpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwl0ZXN0IC1uICIkJGZpbGVzIiB8fCBleGl0IDA7IFwKKwllY2hvICIgKCBjZCAnJChERVNURElSKSQodHlwZWxpYnNkaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQodHlwZWxpYnNkaXIpIiAmJiBybSAtZiAkJGZpbGVzCitpbnN0YWxsLWxpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVIRUFERVJTOiAkKGxpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVfSEVBREVSUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGxpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChsaWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9pbmNsdWRlZGlyKSIKKwlAbGlzdD0nJChsaWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9pbmNsdWRlX0hFQURFUlMpJzsgdGVzdCAtbiAiJChsaWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9pbmNsdWRlZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgJyQoREVTVERJUikkKGxpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgIiQoREVTVERJUikkKGxpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVkaXIpIiB8fCBleGl0ICQkPzsgXAorCWRvbmUKKwordW5pbnN0YWxsLWxpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVIRUFERVJTOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQobGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQobGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZWRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwl0ZXN0IC1uICIkJGZpbGVzIiB8fCBleGl0IDA7IFwKKwllY2hvICIgKCBjZCAnJChERVNURElSKSQobGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZWRpciknICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorCWNkICIkKERFU1RESVIpJChsaWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9pbmNsdWRlZGlyKSIgJiYgcm0gLWYgJCRmaWxlcworCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKERBVEEpICQoSEVBREVSUykKK2luc3RhbGxkaXJzOgorCWZvciBkaXIgaW4gIiQoREVTVERJUikkKGxpYmRpcikiICIkKERFU1RESVIpJChnaXJkaXIpIiAiJChERVNURElSKSQodHlwZWxpYnNkaXIpIiAiJChERVNURElSKSQobGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZWRpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYkxUTElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWdpckRBVEEgXAorCWluc3RhbGwtbGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZUhFQURFUlMgXAorCWluc3RhbGwtdHlwZWxpYnNEQVRBCisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLWxpYkxUTElCUkFSSUVTCisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWdpckRBVEEgdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTIFwKKwl1bmluc3RhbGwtbGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZUhFQURFUlMgXAorCXVuaW5zdGFsbC10eXBlbGlic0RBVEEKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCisJY2xlYW4tbGliTFRMSUJSQVJJRVMgY2xlYW4tbGlidG9vbCBjdGFncyBkaXN0Y2xlYW4gXAorCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1naXJEQVRBIFwKKwlpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gXAorCWluc3RhbGwtbGliTFRMSUJSQVJJRVMgXAorCWluc3RhbGwtbGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZUhFQURFUlMgaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCisJaW5zdGFsbC1zdHJpcCBpbnN0YWxsLXR5cGVsaWJzREFUQSBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorCXRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtZ2lyREFUQSBcCisJdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTIFwKKwl1bmluc3RhbGwtbGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfaW5jbHVkZUhFQURFUlMgXAorCXVuaW5zdGFsbC10eXBlbGlic0RBVEEKKworCislLmMuZ2NvdjogLmxpYnMvbGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfbGEtJS5nY2RhICUuYworCSQoR0NPVikgLWIgLWYgLW8gJF4gPiAkQC5vdXQKKworZ2NvdjogJChsaWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9sYV9TT1VSQ0VTOj0uZ2NvdikKKworQW5kcm9pZC5tazogTWFrZWZpbGUuYW0KKwlhbmRyb2dlbml6ZXIgLTpQUk9KRUNUIGdzdHJlYW1lciAtOlNIQVJFRCBsaWJnc3RuZXQtQEdTVF9NQUpPUk1JTk9SQCAtOlRBR1MgZW5nIGRlYnVnIFwKKwkgLTpSRUxfVE9QICQodG9wX3NyY2RpcikgLTpBQlNfVE9QICQoYWJzX3RvcF9zcmNkaXIpIFwKKwkgLTpTT1VSQ0VTICQobGliZ3N0bmV0X0BHU1RfTUFKT1JNSU5PUkBfbGFfU09VUkNFUykgXAorCSAtOkNGTEFHUyAkKGxpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2xhX0NGTEFHUykgXAorCSAtOkxERkxBR1MgJChsaWJnc3RuZXRfQEdTVF9NQUpPUk1JTk9SQF9sYV9MREZMQUdTKSBcCisJICAgICAgICAgICAkKGxpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2xhX0xJQkFERCkgXAorCSAtOkhFQURFUl9UQVJHRVQgZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAvZ3N0L25ldCBcCisJIC06SEVBREVSUyAkKGxpYmdzdG5ldF9AR1NUX01BSk9STUlOT1JAX2luY2x1ZGVfSEVBREVSUykgXAorCSAtOlBBU1NUSFJPVUdIIExPQ0FMX0FSTV9NT0RFOj1hcm0gXAorCT4gJEAKKworQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQEdzdE5ldC1AR1NUX01BSk9STUlOT1JALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdG5ldC1AR1NUX01BSk9STUlOT1JALmxhCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACSQoQU1fVl9HRU4pUEtHX0NPTkZJR19QQVRIPSIkKEdTVF9QS0dfQ09ORklHX1BBVEgpIiBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQlHU1RfUExVR0lOX1NZU1RFTV9QQVRIPSIiIEdTVF9QTFVHSU5fUEFUSD0iIiBHU1RfUkVHSVNUUllfVVBEQVRFPW5vIFwKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCSQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSAtdiAtLW5hbWVzcGFjZSBHc3ROZXQgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1zdHJpcC1wcmVmaXg9R3N0IFwKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tbnN2ZXJzaW9uPUBHU1RfTUFKT1JNSU5PUkAgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLURHU1RfVVNFX1VOU1RBQkxFX0FQSSBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktSSQodG9wX3NyY2RpcikgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLUkkKHRvcF9zcmNkaXIpL2xpYnMgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLUkkKHRvcF9idWlsZGRpcikgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLUkkKHRvcF9idWlsZGRpcikvbGlicyBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQkkKGdpcl9jaW5jbHVkZXMpIFwKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tYWRkLWluY2x1ZGUtcGF0aD0kKHRvcF9idWlsZGRpcikvZ3N0IFwKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tbGlicmFyeS1wYXRoPSQodG9wX2J1aWxkZGlyKS9nc3QgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1saWJyYXJ5PSQodG9wX2J1aWxkZGlyKS9nc3QvbGliZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1saWJyYXJ5PWxpYmdzdG5ldC1AR1NUX01BSk9STUlOT1JALmxhIFwKK0BIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0taW5jbHVkZT1Hc3QtQEdTVF9NQUpPUk1JTk9SQCBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLWxpYnRvb2w9IiQodG9wX2J1aWxkZGlyKS9saWJ0b29sIiBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLXBrZyBnc3RyZWFtZXItQEdTVF9NQUpPUk1JTk9SQCBcCitASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLXBrZy1leHBvcnQ9ImdzdHJlYW1lci1uZXQtQEdTVF9NQUpPUk1JTk9SQCIgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1hZGQtaW5pdC1zZWN0aW9uPSJnc3RfaW5pdChOVUxMLE5VTEwpOyIgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1vdXRwdXQgJEAgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJJChnaXJfaGVhZGVycykgXAorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJJChnaXJfc291cmNlcykKKworQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQCUudHlwZWxpYjogJS5naXIgJChJTlRST1NQRUNUSU9OX0NPTVBJTEVSKQorQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkkKEFNX1ZfR0VOKSQoSU5UUk9TUEVDVElPTl9DT01QSUxFUikgLS1pbmNsdWRlZGlyPSQoc3JjZGlyKSAtLWluY2x1ZGVkaXI9JChidWlsZGRpcikgLS1pbmNsdWRlZGlyPSQodG9wX2J1aWxkZGlyKS9nc3QgJChJTlRST1NQRUNUSU9OX0NPTVBJTEVSX09QVFMpICQ8IC1vICQoQEYpCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L25ldC9nc3RuZXQuaCBiL2xpYnMvZ3N0L25ldC9nc3RuZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzhjYWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9nc3QvbmV0L2dzdG5ldC5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKKyNpZm5kZWYgX19HU1RfTkVUX0hfXworI2RlZmluZSBfX0dTVF9ORVRfSF9fCisKKworI2luY2x1ZGUgPGdzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suaD4KKyNpbmNsdWRlIDxnc3QvbmV0L2dzdG5ldHRpbWVwYWNrZXQuaD4KKyNpbmNsdWRlIDxnc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5oPgorCisKKyNlbmRpZiAvKiBfX0dTVF9ORVRfSF9fICovCmRpZmYgLS1naXQgYS9saWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYyBiL2xpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMzBlM2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYwpAQCAtMCwwICsxLDU4MSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAgICAgIDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDA1IEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKyAqCisgKiBnc3RuZXRjbGllbnRjbG9jay5oOiBjbG9jayB0aGF0IHN5bmNocm9uaXplcyBpdHNlbGYgdG8gYSB0aW1lIHByb3ZpZGVyIG92ZXIKKyAqIHRoZSBuZXR3b3JrCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKy8qKgorICogU0VDVElPTjpnc3RuZXRjbGllbnRjbG9jaworICogQHNob3J0X2Rlc2NyaXB0aW9uOiBTcGVjaWFsIGNsb2NrIHRoYXQgc3luY2hyb25pemVzIHRvIGEgcmVtb3RlIHRpbWUKKyAqICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXIuCisgKiBAc2VlX2Fsc286ICNHc3RDbG9jaywgI0dzdE5ldFRpbWVQcm92aWRlciwgI0dzdFBpcGVsaW5lCisgKgorICogVGhpcyBvYmplY3QgaW1wbGVtZW50cyBhIGN1c3RvbSAjR3N0Q2xvY2sgdGhhdCBzeW5jaHJvbml6ZXMgaXRzIHRpbWUKKyAqIHRvIGEgcmVtb3RlIHRpbWUgcHJvdmlkZXIgc3VjaCBhcyAjR3N0TmV0VGltZVByb3ZpZGVyLgorICoKKyAqIEEgbmV3IGNsb2NrIGlzIGNyZWF0ZWQgd2l0aCBnc3RfbmV0X2NsaWVudF9jbG9ja19uZXcoKSB3aGljaCB0YWtlcyB0aGUKKyAqIGFkZHJlc3MgYW5kIHBvcnQgb2YgdGhlIHJlbW90ZSB0aW1lIHByb3ZpZGVyIGFsb25nIHdpdGggYSBuYW1lIGFuZAorICogYW4gaW5pdGlhbCB0aW1lLgorICoKKyAqIFRoaXMgY2xvY2sgd2lsbCBwb2xsIHRoZSB0aW1lIHByb3ZpZGVyIGFuZCB3aWxsIHVwZGF0ZSBpdHMgY2FsaWJyYXRpb24KKyAqIHBhcmFtZXRlcnMgYmFzZWQgb24gdGhlIGxvY2FsIGFuZCByZW1vdGUgb2JzZXJ2YXRpb25zLgorICoKKyAqIFZhcmlvdXMgcGFyYW1ldGVycyBvZiB0aGUgY2xvY2sgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aCB0aGUgcGFyZW50ICNHc3RDbG9jaworICogInRpbWVvdXQiLCAid2luZG93LXNpemUiIGFuZCAid2luZG93LXRocmVzaG9sZCIgb2JqZWN0IHByb3BlcnRpZXMuCisgKgorICogQSAjR3N0TmV0Q2xpZW50Q2xvY2sgaXMgdHlwaWNhbGx5IHNldCBvbiBhICNHc3RQaXBlbGluZSB3aXRoIAorICogZ3N0X3BpcGVsaW5lX3VzZV9jbG9jaygpLgorICoKKyAqIExhc3QgcmV2aWV3ZWQgb24gMjAwNS0xMS0yMyAoMC45LjUpCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAiZ3N0bmV0dGltZXBhY2tldC5oIgorI2luY2x1ZGUgImdzdG5ldGNsaWVudGNsb2NrLmgiCisKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA+PSAxNDAwCisjaW5jbHVkZSA8aW8uaD4KKyNlbmRpZgorCitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChuY2NfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKG5jY19kZWJ1ZykKKworI2RlZmluZSBERUZBVUxUX0FERFJFU1MgICAgICAgICAiMTI3LjAuMC4xIgorI2RlZmluZSBERUZBVUxUX1BPUlQgICAgICAgICAgICA1NjM3CisjZGVmaW5lIERFRkFVTFRfVElNRU9VVCAgICAgICAgIEdTVF9TRUNPTkQKKworI2lmZGVmIEdfT1NfV0lOMzIKKyNkZWZpbmUgZ2V0c29ja25hbWUoc29jayxhZGRyLGxlbikgZ2V0c29ja25hbWUoc29jayxhZGRyLChpbnQgKilsZW4pCisjZW5kaWYKKworZW51bQoreworICBQUk9QXzAsCisgIFBST1BfQUREUkVTUywKKyAgUFJPUF9QT1JULAorfTsKKworI2RlZmluZSBHU1RfTkVUX0NMSUVOVF9DTE9DS19HRVRfUFJJVkFURShvYmopICBcCisgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKChvYmopLCBHU1RfVFlQRV9ORVRfQ0xJRU5UX0NMT0NLLCBHc3ROZXRDbGllbnRDbG9ja1ByaXZhdGUpKQorCitzdHJ1Y3QgX0dzdE5ldENsaWVudENsb2NrUHJpdmF0ZQoreworICBHc3RQb2xsRkQgc29jazsKKyAgR3N0UG9sbCAqZmRzZXQ7Cit9OworCisjZGVmaW5lIF9kb19pbml0IFwKKyAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKG5jY19kZWJ1ZywgIm5ldGNsb2NrIiwgMCwgIk5ldHdvcmsgY2xpZW50IGNsb2NrIik7CisjZGVmaW5lIGdzdF9uZXRfY2xpZW50X2Nsb2NrX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3ROZXRDbGllbnRDbG9jaywgZ3N0X25ldF9jbGllbnRfY2xvY2ssCisgICAgR1NUX1RZUEVfU1lTVEVNX0NMT0NLLCBfZG9faW5pdCk7CisKK3N0YXRpYyB2b2lkIGdzdF9uZXRfY2xpZW50X2Nsb2NrX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKK3N0YXRpYyB2b2lkIGdzdF9uZXRfY2xpZW50X2Nsb2NrX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKK3N0YXRpYyB2b2lkIGdzdF9uZXRfY2xpZW50X2Nsb2NrX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKKworc3RhdGljIHZvaWQgZ3N0X25ldF9jbGllbnRfY2xvY2tfc3RvcCAoR3N0TmV0Q2xpZW50Q2xvY2sgKiBzZWxmKTsKKworI2lmZGVmIEdfT1NfV0lOMzIKK3N0YXRpYyBpbnQKK2luZXRfYXRvbiAoY29uc3QgY2hhciAqYywgc3RydWN0IGluX2FkZHIgKnBhZGRyKQoreworICAvKiBub3RlIHRoYXQgaW5ldF9hZGRyIGlzIGRlcHJlY2F0ZWQgb24gdW5peCBiZWNhdXNlCisgICAqIGluZXRfYWRkciByZXR1cm5zIC0xIChJTkFERFJfTk9ORSkgZm9yIHRoZSB2YWxpZCAyNTUuMjU1LjI1NS4yNTUKKyAgICogYWRkcmVzcy4gKi8KKyAgcGFkZHItPnNfYWRkciA9IGluZXRfYWRkciAoYyk7CisgIGlmIChwYWRkci0+c19hZGRyID09IElOQUREUl9OT05FKQorICAgIHJldHVybiAwOworCisgIHJldHVybiAxOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkCitnc3RfbmV0X2NsaWVudF9jbG9ja19jbGFzc19pbml0IChHc3ROZXRDbGllbnRDbG9ja0NsYXNzICoga2xhc3MpCit7CisgIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKKworICBnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKKworICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKGtsYXNzLCBzaXplb2YgKEdzdE5ldENsaWVudENsb2NrUHJpdmF0ZSkpOworCisgIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X25ldF9jbGllbnRfY2xvY2tfZmluYWxpemU7CisgIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9uZXRfY2xpZW50X2Nsb2NrX2dldF9wcm9wZXJ0eTsKKyAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X25ldF9jbGllbnRfY2xvY2tfc2V0X3Byb3BlcnR5OworCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQUREUkVTUywKKyAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJhZGRyZXNzIiwgImFkZHJlc3MiLAorICAgICAgICAgICJUaGUgYWRkcmVzcyBvZiB0aGUgbWFjaGluZSBwcm92aWRpbmcgYSB0aW1lIHNlcnZlciwgIgorICAgICAgICAgICJhcyBhIGRvdHRlZCBxdWFkICh4LngueC54KSIsIERFRkFVTFRfQUREUkVTUywKKyAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9QT1JULAorICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInBvcnQiLCAicG9ydCIsCisgICAgICAgICAgIlRoZSBwb3J0IG9uIHdoaWNoIHRoZSByZW1vdGUgc2VydmVyIGlzIGxpc3RlbmluZyIsIDAsIEdfTUFYVUlOVDE2LAorICAgICAgICAgIERFRkFVTFRfUE9SVCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfbmV0X2NsaWVudF9jbG9ja19pbml0IChHc3ROZXRDbGllbnRDbG9jayAqIHNlbGYpCit7CisgIEdzdENsb2NrICpjbG9jayA9IEdTVF9DTE9DS19DQVNUIChzZWxmKTsKKworI2lmZGVmIEdfT1NfV0lOMzIKKyAgV1NBREFUQSB3OworICBpbnQgZXJyb3IgPSBXU0FTdGFydHVwICgweDAyMDIsICZ3KTsKKworICBpZiAoZXJyb3IpIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiRXJyb3Igb24gV1NBU3RhcnR1cCIpOworICB9CisgIGlmICh3LndWZXJzaW9uICE9IDB4MDIwMikgeworICAgIFdTQUNsZWFudXAgKCk7CisgIH0KKyNlbmRpZgorICBzZWxmLT5wcml2ID0gR1NUX05FVF9DTElFTlRfQ0xPQ0tfR0VUX1BSSVZBVEUgKHNlbGYpOworCisgIHNlbGYtPnBvcnQgPSBERUZBVUxUX1BPUlQ7CisgIHNlbGYtPmFkZHJlc3MgPSBnX3N0cmR1cCAoREVGQVVMVF9BRERSRVNTKTsKKworICBjbG9jay0+dGltZW91dCA9IERFRkFVTFRfVElNRU9VVDsKKworICBzZWxmLT5wcml2LT5zb2NrLmZkID0gLTE7CisgIHNlbGYtPnRocmVhZCA9IE5VTEw7CisKKyAgc2VsZi0+c2VydmFkZHIgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZAorZ3N0X25ldF9jbGllbnRfY2xvY2tfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCit7CisgIEdzdE5ldENsaWVudENsb2NrICpzZWxmID0gR1NUX05FVF9DTElFTlRfQ0xPQ0sgKG9iamVjdCk7CisKKyAgaWYgKHNlbGYtPnRocmVhZCkgeworICAgIGdzdF9uZXRfY2xpZW50X2Nsb2NrX3N0b3AgKHNlbGYpOworICAgIGdfYXNzZXJ0IChzZWxmLT50aHJlYWQgPT0gTlVMTCk7CisgIH0KKworICBpZiAoc2VsZi0+cHJpdi0+ZmRzZXQpIHsKKyAgICBnc3RfcG9sbF9mcmVlIChzZWxmLT5wcml2LT5mZHNldCk7CisgICAgc2VsZi0+cHJpdi0+ZmRzZXQgPSBOVUxMOworICB9CisKKyAgZ19mcmVlIChzZWxmLT5hZGRyZXNzKTsKKyAgc2VsZi0+YWRkcmVzcyA9IE5VTEw7CisKKyAgZ19mcmVlIChzZWxmLT5zZXJ2YWRkcik7CisgIHNlbGYtPnNlcnZhZGRyID0gTlVMTDsKKworI2lmZGVmIEdfT1NfV0lOMzIKKyAgV1NBQ2xlYW51cCAoKTsKKyNlbmRpZgorCisgIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9uZXRfY2xpZW50X2Nsb2NrX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQoreworICBHc3ROZXRDbGllbnRDbG9jayAqc2VsZiA9IEdTVF9ORVRfQ0xJRU5UX0NMT0NLIChvYmplY3QpOworCisgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9BRERSRVNTOgorICAgICAgZ19mcmVlIChzZWxmLT5hZGRyZXNzKTsKKyAgICAgIGlmIChnX3ZhbHVlX2dldF9zdHJpbmcgKHZhbHVlKSA9PSBOVUxMKQorICAgICAgICBzZWxmLT5hZGRyZXNzID0gZ19zdHJkdXAgKERFRkFVTFRfQUREUkVTUyk7CisgICAgICBlbHNlCisgICAgICAgIHNlbGYtPmFkZHJlc3MgPSBnX3N0cmR1cCAoZ192YWx1ZV9nZXRfc3RyaW5nICh2YWx1ZSkpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BPUlQ6CisgICAgICBzZWxmLT5wb3J0ID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfbmV0X2NsaWVudF9jbG9ja19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgR3N0TmV0Q2xpZW50Q2xvY2sgKnNlbGYgPSBHU1RfTkVUX0NMSUVOVF9DTE9DSyAob2JqZWN0KTsKKworICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfQUREUkVTUzoKKyAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHNlbGYtPmFkZHJlc3MpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BPUlQ6CisgICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBzZWxmLT5wb3J0KTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9uZXRfY2xpZW50X2Nsb2NrX29ic2VydmVfdGltZXMgKEdzdE5ldENsaWVudENsb2NrICogc2VsZiwKKyAgICBHc3RDbG9ja1RpbWUgbG9jYWxfMSwgR3N0Q2xvY2tUaW1lIHJlbW90ZSwgR3N0Q2xvY2tUaW1lIGxvY2FsXzIpCit7CisgIEdzdENsb2NrVGltZSBsb2NhbF9hdmc7CisgIGdkb3VibGUgcl9zcXVhcmVkOworICBHc3RDbG9jayAqY2xvY2s7CisKKyAgaWYgKGxvY2FsXzIgPCBsb2NhbF8xKQorICAgIGdvdG8gYm9ndXNfb2JzZXJ2YXRpb247CisKKyAgbG9jYWxfYXZnID0gKGxvY2FsXzIgKyBsb2NhbF8xKSAvIDI7CisKKyAgY2xvY2sgPSBHU1RfQ0xPQ0tfQ0FTVCAoc2VsZik7CisKKyAgZ3N0X2Nsb2NrX2FkZF9vYnNlcnZhdGlvbiAoR1NUX0NMT0NLIChzZWxmKSwgbG9jYWxfYXZnLCByZW1vdGUsICZyX3NxdWFyZWQpOworCisgIEdTVF9DTE9DS19TTEFWRV9MT0NLIChzZWxmKTsKKyAgaWYgKGNsb2NrLT5maWxsaW5nKSB7CisgICAgc2VsZi0+Y3VycmVudF90aW1lb3V0ID0gMDsKKyAgfSBlbHNlIHsKKyAgICAvKiBnZXRvIGZvcm11bGEgKi8KKyAgICBzZWxmLT5jdXJyZW50X3RpbWVvdXQgPQorICAgICAgICAoMWUtMyAvICgxIC0gTUlOIChyX3NxdWFyZWQsIDAuOTk5OTkpKSkgKiBHU1RfU0VDT05EOworICAgIHNlbGYtPmN1cnJlbnRfdGltZW91dCA9IE1JTiAoc2VsZi0+Y3VycmVudF90aW1lb3V0LCBjbG9jay0+dGltZW91dCk7CisgIH0KKyAgR1NUX0NMT0NLX1NMQVZFX1VOTE9DSyAoY2xvY2spOworCisgIHJldHVybjsKKworYm9ndXNfb2JzZXJ2YXRpb246CisgIHsKKyAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNlbGYsICJ0aW1lIHBhY2tldCByZWNlaXZlIHRpbWUgPCBzZW5kIHRpbWUgKCUiCisgICAgICAgIEdTVF9USU1FX0ZPUk1BVCAiIDwgJSIgR1NUX1RJTUVfRk9STUFUICIpIiwgR1NUX1RJTUVfQVJHUyAobG9jYWxfMSksCisgICAgICAgIEdTVF9USU1FX0FSR1MgKGxvY2FsXzIpKTsKKyAgICByZXR1cm47CisgIH0KK30KKworc3RhdGljIGdpbnQKK2dzdF9uZXRfY2xpZW50X2Nsb2NrX2RvX3NlbGVjdCAoR3N0TmV0Q2xpZW50Q2xvY2sgKiBzZWxmKQoreworICB3aGlsZSAoVFJVRSkgeworICAgIEdzdENsb2NrVGltZSBkaWZmOworICAgIGdpbnQgcmV0OworCisgICAgR1NUX0xPR19PQkpFQ1QgKHNlbGYsICJkb2luZyBzZWxlY3QiKTsKKworICAgIGRpZmYgPSBnc3RfY2xvY2tfZ2V0X2ludGVybmFsX3RpbWUgKEdTVF9DTE9DSyAoc2VsZikpOworICAgIHJldCA9IGdzdF9wb2xsX3dhaXQgKHNlbGYtPnByaXYtPmZkc2V0LCBzZWxmLT5jdXJyZW50X3RpbWVvdXQpOworICAgIGRpZmYgPSBnc3RfY2xvY2tfZ2V0X2ludGVybmFsX3RpbWUgKEdTVF9DTE9DSyAoc2VsZikpIC0gZGlmZjsKKworICAgIGlmIChkaWZmID4gc2VsZi0+Y3VycmVudF90aW1lb3V0KQorICAgICAgc2VsZi0+Y3VycmVudF90aW1lb3V0ID0gMDsKKyAgICBlbHNlCisgICAgICBzZWxmLT5jdXJyZW50X3RpbWVvdXQgLT0gZGlmZjsKKworICAgIEdTVF9MT0dfT0JKRUNUIChzZWxmLCAic2VsZWN0IHJldHVybmVkICVkIiwgcmV0KTsKKworICAgIGlmIChyZXQgPCAwICYmIGVycm5vICE9IEVCVVNZKSB7CisgICAgICBpZiAoZXJybm8gIT0gRUFHQUlOICYmIGVycm5vICE9IEVJTlRSKQorICAgICAgICBnb3RvIHNlbGVjdF9lcnJvcjsKKyAgICAgIGVsc2UKKyAgICAgICAgY29udGludWU7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7CisKKyAgICAvKiBsb2cgZXJyb3JzIGFuZCBrZWVwIGdvaW5nICovCisgIHNlbGVjdF9lcnJvcjoKKyAgICB7CisgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNlbGYsICJzZWxlY3QgZXJyb3IgJWQ6ICVzICglZCkiLCByZXQsCisgICAgICAgICAgZ19zdHJlcnJvciAoZXJybm8pLCBlcnJubyk7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgIH0KKworICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKKyAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgZ3BvaW50ZXIKK2dzdF9uZXRfY2xpZW50X2Nsb2NrX3RocmVhZCAoZ3BvaW50ZXIgZGF0YSkKK3sKKyAgR3N0TmV0Q2xpZW50Q2xvY2sgKnNlbGYgPSBkYXRhOworICBzdHJ1Y3Qgc29ja2FkZHJfaW4gdG1wYWRkcjsKKyAgc29ja2xlbl90IGxlbjsKKyAgR3N0TmV0VGltZVBhY2tldCAqcGFja2V0OworICBnaW50IHJldDsKKyAgR3N0Q2xvY2sgKmNsb2NrID0gZGF0YTsKKworICB3aGlsZSAoVFJVRSkgeworICAgIHJldCA9IGdzdF9uZXRfY2xpZW50X2Nsb2NrX2RvX3NlbGVjdCAoc2VsZik7CisKKyAgICBpZiAocmV0IDwgMCAmJiBlcnJubyA9PSBFQlVTWSkgeworICAgICAgR1NUX0xPR19PQkpFQ1QgKHNlbGYsICJzdG9wIik7CisgICAgICBnb3RvIHN0b3BwZWQ7CisgICAgfSBlbHNlIGlmIChyZXQgPT0gMCkgeworICAgICAgLyogdGltZWQgb3V0LCBsZXQncyBzZW5kIGFub3RoZXIgcGFja2V0ICovCisgICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAidGltZWQgb3V0Iik7CisKKyAgICAgIHBhY2tldCA9IGdzdF9uZXRfdGltZV9wYWNrZXRfbmV3IChOVUxMKTsKKworICAgICAgcGFja2V0LT5sb2NhbF90aW1lID0gZ3N0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lIChHU1RfQ0xPQ0sgKHNlbGYpKTsKKworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgInNlbmRpbmcgcGFja2V0LCBsb2NhbCB0aW1lID0gJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHBhY2tldC0+bG9jYWxfdGltZSkpOworICAgICAgZ3N0X25ldF90aW1lX3BhY2tldF9zZW5kIChwYWNrZXQsIHNlbGYtPnByaXYtPnNvY2suZmQsCisgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSBzZWxmLT5zZXJ2YWRkciwgc2l6ZW9mIChzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKworICAgICAgZ19mcmVlIChwYWNrZXQpOworCisgICAgICAvKiByZXNldCB0aW1lb3V0ICovCisgICAgICBzZWxmLT5jdXJyZW50X3RpbWVvdXQgPSBjbG9jay0+dGltZW91dDsKKyAgICAgIGNvbnRpbnVlOworICAgIH0gZWxzZSBpZiAoZ3N0X3BvbGxfZmRfY2FuX3JlYWQgKHNlbGYtPnByaXYtPmZkc2V0LCAmc2VsZi0+cHJpdi0+c29jaykpIHsKKyAgICAgIC8qIGdvdCBkYXRhIGluICovCisgICAgICBHc3RDbG9ja1RpbWUgbmV3X2xvY2FsID0gZ3N0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lIChHU1RfQ0xPQ0sgKHNlbGYpKTsKKworICAgICAgbGVuID0gc2l6ZW9mIChzdHJ1Y3Qgc29ja2FkZHIpOworICAgICAgcGFja2V0ID0gZ3N0X25ldF90aW1lX3BhY2tldF9yZWNlaXZlIChzZWxmLT5wcml2LT5zb2NrLmZkLAorICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnRtcGFkZHIsICZsZW4pOworCisgICAgICBpZiAoIXBhY2tldCkKKyAgICAgICAgZ290byByZWNlaXZlX2Vycm9yOworCisgICAgICBHU1RfTE9HX09CSkVDVCAoc2VsZiwgImdvdCBwYWNrZXQgYmFjayIpOworICAgICAgR1NUX0xPR19PQkpFQ1QgKHNlbGYsICJsb2NhbF8xID0gJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHBhY2tldC0+bG9jYWxfdGltZSkpOworICAgICAgR1NUX0xPR19PQkpFQ1QgKHNlbGYsICJyZW1vdGUgPSAlIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICAgICAgR1NUX1RJTUVfQVJHUyAocGFja2V0LT5yZW1vdGVfdGltZSkpOworICAgICAgR1NUX0xPR19PQkpFQ1QgKHNlbGYsICJsb2NhbF8yID0gJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgICAgIEdTVF9USU1FX0FSR1MgKG5ld19sb2NhbCkpOworCisgICAgICAvKiBvYnNlcnZlX3RpbWVzIHdpbGwgcmVzZXQgdGhlIHRpbWVvdXQgKi8KKyAgICAgIGdzdF9uZXRfY2xpZW50X2Nsb2NrX29ic2VydmVfdGltZXMgKHNlbGYsIHBhY2tldC0+bG9jYWxfdGltZSwKKyAgICAgICAgICBwYWNrZXQtPnJlbW90ZV90aW1lLCBuZXdfbG9jYWwpOworCisgICAgICBnX2ZyZWUgKHBhY2tldCk7CisgICAgICBjb250aW51ZTsKKyAgICB9IGVsc2UgeworICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzZWxmLCAidW5oYW5kbGVkIHNlbGVjdCByZXR1cm4gc3RhdGU/Iik7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKKworICBzdG9wcGVkOgorICAgIHsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJzaHV0dGluZyBkb3duIik7CisgICAgICAvKiBzb2NrZXQgZ2V0cyBjbG9zZWQgaW4gX3N0b3AoKSAqLworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICByZWNlaXZlX2Vycm9yOgorICAgIHsKKyAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc2VsZiwgInJlY2VpdmUgZXJyb3IiKTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOworCisgIH0KKworICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfbmV0X2NsaWVudF9jbG9ja19zdGFydCAoR3N0TmV0Q2xpZW50Q2xvY2sgKiBzZWxmKQoreworICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2VydmFkZHIsIG15YWRkcjsKKyAgc29ja2xlbl90IGxlbjsKKyAgZ2ludCByZXQ7CisgIEdFcnJvciAqZXJyb3I7CisKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNlbGYtPmFkZHJlc3MgIT0gTlVMTCwgRkFMU0UpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2VsZi0+c2VydmFkZHIgPT0gTlVMTCwgRkFMU0UpOworCisgIGlmICgocmV0ID0gc29ja2V0IChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKSkgPCAwKQorICAgIGdvdG8gbm9fc29ja2V0OworCisgIHNlbGYtPnByaXYtPnNvY2suZmQgPSByZXQ7CisKKyAgbGVuID0gc2l6ZW9mIChteWFkZHIpOworICByZXQgPSBnZXRzb2NrbmFtZSAoc2VsZi0+cHJpdi0+c29jay5mZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmbXlhZGRyLCAmbGVuKTsKKyAgaWYgKHJldCA8IDApCisgICAgZ290byBnZXRzb2NrbmFtZV9lcnJvcjsKKworICBtZW1zZXQgKCZzZXJ2YWRkciwgMCwgc2l6ZW9mIChzZXJ2YWRkcikpOworICBzZXJ2YWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsgICAgICAgIC8qIGhvc3QgYnl0ZSBvcmRlciAqLworICBzZXJ2YWRkci5zaW5fcG9ydCA9IGh0b25zIChzZWxmLT5wb3J0KTsgICAgICAgLyogc2hvcnQsIG5ldHdvcmsgYnl0ZSBvcmRlciAqLworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJzb2NrZXQgb3BlbmVkIG9uIFVEUCBwb3J0ICVoZCIsCisgICAgICBudG9ocyAoc2VydmFkZHIuc2luX3BvcnQpKTsKKworICBpZiAoIWluZXRfYXRvbiAoc2VsZi0+YWRkcmVzcywgJnNlcnZhZGRyLnNpbl9hZGRyKSkKKyAgICBnb3RvIGJhZF9hZGRyZXNzOworCisgIHNlbGYtPnNlcnZhZGRyID0gZ19tYWxsb2MgKHNpemVvZiAoc3RydWN0IHNvY2thZGRyX2luKSk7CisgIG1lbWNweSAoc2VsZi0+c2VydmFkZHIsICZzZXJ2YWRkciwgc2l6ZW9mIChzZXJ2YWRkcikpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJ3aWxsIGNvbW11bmljYXRlIHdpdGggJXM6JWQiLCBzZWxmLT5hZGRyZXNzLAorICAgICAgc2VsZi0+cG9ydCk7CisKKyAgZ3N0X3BvbGxfYWRkX2ZkIChzZWxmLT5wcml2LT5mZHNldCwgJnNlbGYtPnByaXYtPnNvY2spOworICBnc3RfcG9sbF9mZF9jdGxfcmVhZCAoc2VsZi0+cHJpdi0+ZmRzZXQsICZzZWxmLT5wcml2LT5zb2NrLCBUUlVFKTsKKworICBzZWxmLT50aHJlYWQgPSBnX3RocmVhZF9jcmVhdGUgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX3RocmVhZCwgc2VsZiwgVFJVRSwKKyAgICAgICZlcnJvcik7CisgIGlmICghc2VsZi0+dGhyZWFkKQorICAgIGdvdG8gbm9fdGhyZWFkOworCisgIHJldHVybiBUUlVFOworCisgIC8qIEVSUk9SUyAqLworbm9fc29ja2V0OgorICB7CisgICAgR1NUX0VSUk9SX09CSkVDVCAoc2VsZiwgInNvY2tldCBmYWlsZWQgJWQ6ICVzICglZCkiLCByZXQsCisgICAgICAgIGdfc3RyZXJyb3IgKGVycm5vKSwgZXJybm8pOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorZ2V0c29ja25hbWVfZXJyb3I6CisgIHsKKyAgICBHU1RfRVJST1JfT0JKRUNUIChzZWxmLCAiZ2V0c29ja25hbWUgZmFpbGVkICVkOiAlcyAoJWQpIiwgcmV0LAorICAgICAgICBnX3N0cmVycm9yIChlcnJubyksIGVycm5vKTsKKyAgICBjbG9zZSAoc2VsZi0+cHJpdi0+c29jay5mZCk7CisgICAgc2VsZi0+cHJpdi0+c29jay5mZCA9IC0xOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorYmFkX2FkZHJlc3M6CisgIHsKKyAgICBHU1RfRVJST1JfT0JKRUNUIChzZWxmLCAiaW5ldF9hdG9uIGZhaWxlZCAlZDogJXMgKCVkKSIsIHJldCwKKyAgICAgICAgZ19zdHJlcnJvciAoZXJybm8pLCBlcnJubyk7CisgICAgY2xvc2UgKHNlbGYtPnByaXYtPnNvY2suZmQpOworICAgIHNlbGYtPnByaXYtPnNvY2suZmQgPSAtMTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK25vX3RocmVhZDoKKyAgeworICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHNlbGYsICJjb3VsZCBub3QgY3JlYXRlIHRocmVhZDogJXMiLCBlcnJvci0+bWVzc2FnZSk7CisgICAgZ3N0X3BvbGxfcmVtb3ZlX2ZkIChzZWxmLT5wcml2LT5mZHNldCwgJnNlbGYtPnByaXYtPnNvY2spOworICAgIGNsb3NlIChzZWxmLT5wcml2LT5zb2NrLmZkKTsKKyAgICBzZWxmLT5wcml2LT5zb2NrLmZkID0gLTE7CisgICAgZ19mcmVlIChzZWxmLT5zZXJ2YWRkcik7CisgICAgc2VsZi0+c2VydmFkZHIgPSBOVUxMOworICAgIGdfZXJyb3JfZnJlZSAoZXJyb3IpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZ3N0X25ldF9jbGllbnRfY2xvY2tfc3RvcCAoR3N0TmV0Q2xpZW50Q2xvY2sgKiBzZWxmKQoreworICBnc3RfcG9sbF9zZXRfZmx1c2hpbmcgKHNlbGYtPnByaXYtPmZkc2V0LCBUUlVFKTsKKyAgZ190aHJlYWRfam9pbiAoc2VsZi0+dGhyZWFkKTsKKyAgc2VsZi0+dGhyZWFkID0gTlVMTDsKKworICBpZiAoc2VsZi0+cHJpdi0+c29jay5mZCAhPSAtMSkgeworICAgIGdzdF9wb2xsX3JlbW92ZV9mZCAoc2VsZi0+cHJpdi0+ZmRzZXQsICZzZWxmLT5wcml2LT5zb2NrKTsKKyAgICBjbG9zZSAoc2VsZi0+cHJpdi0+c29jay5mZCk7CisgICAgc2VsZi0+cHJpdi0+c29jay5mZCA9IC0xOworICB9Cit9CisKKy8qKgorICogZ3N0X25ldF9jbGllbnRfY2xvY2tfbmV3OgorICogQG5hbWU6IGEgbmFtZSBmb3IgdGhlIGNsb2NrCisgKiBAcmVtb3RlX2FkZHJlc3M6IHRoZSBhZGRyZXNzIG9mIHRoZSByZW1vdGUgY2xvY2sgcHJvdmlkZXIKKyAqIEByZW1vdGVfcG9ydDogdGhlIHBvcnQgb2YgdGhlIHJlbW90ZSBjbG9jayBwcm92aWRlcgorICogQGJhc2VfdGltZTogaW5pdGlhbCB0aW1lIG9mIHRoZSBjbG9jaworICoKKyAqIENyZWF0ZSBhIG5ldyAjR3N0TmV0Q2xpZW50Q2xvY2sgdGhhdCB3aWxsIHJlcG9ydCB0aGUgdGltZQorICogcHJvdmlkZWQgYnkgdGhlICNHc3ROZXRUaW1lUHJvdmlkZXIgb24gQHJlbW90ZV9hZGRyZXNzIGFuZCAKKyAqIEByZW1vdGVfcG9ydC4KKyAqCisgKiBSZXR1cm5zOiBhIG5ldyAjR3N0Q2xvY2sgdGhhdCByZWNlaXZlcyBhIHRpbWUgZnJvbSB0aGUgcmVtb3RlCisgKiBjbG9jay4KKyAqLworR3N0Q2xvY2sgKgorZ3N0X25ldF9jbGllbnRfY2xvY2tfbmV3IChnY2hhciAqIG5hbWUsIGNvbnN0IGdjaGFyICogcmVtb3RlX2FkZHJlc3MsCisgICAgZ2ludCByZW1vdGVfcG9ydCwgR3N0Q2xvY2tUaW1lIGJhc2VfdGltZSkKK3sKKyAgR3N0TmV0Q2xpZW50Q2xvY2sgKnJldDsKKyAgR3N0Q2xvY2tUaW1lIGludGVybmFsOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZW1vdGVfYWRkcmVzcyAhPSBOVUxMLCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHJlbW90ZV9wb3J0ID4gMCwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZW1vdGVfcG9ydCA8PSBHX01BWFVJTlQxNiwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChiYXNlX3RpbWUgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSwgTlVMTCk7CisKKyAgcmV0ID0gZ19vYmplY3RfbmV3IChHU1RfVFlQRV9ORVRfQ0xJRU5UX0NMT0NLLCAiYWRkcmVzcyIsIHJlbW90ZV9hZGRyZXNzLAorICAgICAgInBvcnQiLCByZW1vdGVfcG9ydCwgTlVMTCk7CisKKyAgLyogZ3N0X2Nsb2NrX2dldF90aW1lKCkgdmFsdWVzIGFyZSBndWFyYW50ZWVkIHRvIGJlIGluY3JlYXNpbmcuIGJlY2F1c2Ugbm8gb25lCisgICAqIGhhcyBjYWxsZWQgZ2V0X3RpbWUgb24gdGhpcyBjbG9jayB5ZXQgd2UgYXJlIGZyZWUgdG8gYWRqdXN0IHRvIGFueSB2YWx1ZQorICAgKiB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IHdvcnJ5aW5nIGFib3V0IE1BWCgpIGlzc3VlcyB3aXRoIHRoZSBjbG9jaydzCisgICAqIGludGVybmFsIHRpbWUuCisgICAqLworCisgIC8qIHVwZGF0ZSBvdXIgaW50ZXJuYWwgdGltZSBzbyBnZXRfdGltZSgpIGdpdmUgc29tZXRoaW5nIGFyb3VuZCBiYXNlX3RpbWUuCisgICAgIGFzc3VtZSB0aGF0IHRoZSByYXRlIGlzIDEgaW4gdGhlIGJlZ2lubmluZy4gKi8KKyAgaW50ZXJuYWwgPSBnc3RfY2xvY2tfZ2V0X2ludGVybmFsX3RpbWUgKEdTVF9DTE9DSyAocmV0KSk7CisgIGdzdF9jbG9ja19zZXRfY2FsaWJyYXRpb24gKEdTVF9DTE9DSyAocmV0KSwgaW50ZXJuYWwsIGJhc2VfdGltZSwgMSwgMSk7CisKKyAgeworICAgIEdzdENsb2NrVGltZSBub3cgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKEdTVF9DTE9DSyAocmV0KSk7CisKKyAgICBpZiAoR1NUX0NMT0NLX0RJRkYgKG5vdywgYmFzZV90aW1lKSA+IDAgfHwKKyAgICAgICAgR1NUX0NMT0NLX0RJRkYgKG5vdywgYmFzZV90aW1lICsgR1NUX1NFQ09ORCkgPCAwKSB7CisgICAgICBnX3dhcm5pbmcgKCJ1bmFibGUgdG8gc2V0IHRoZSBiYXNlIHRpbWUsIGV4cGVjdCBzeW5jIHByb2JsZW1zISIpOworICAgIH0KKyAgfQorCisgIGlmICgocmV0LT5wcml2LT5mZHNldCA9IGdzdF9wb2xsX25ldyAoVFJVRSkpID09IE5VTEwpCisgICAgZ290byBub19mZHNldDsKKworICBpZiAoIWdzdF9uZXRfY2xpZW50X2Nsb2NrX3N0YXJ0IChyZXQpKQorICAgIGdvdG8gZmFpbGVkX3N0YXJ0OworCisgIC8qIGFsbCBzeXN0ZW1zIGdvLCBjYXAnbiAqLworICByZXR1cm4gKEdzdENsb2NrICopIHJldDsKKworbm9fZmRzZXQ6CisgIHsKKyAgICBHU1RfRVJST1JfT0JKRUNUIChyZXQsICJjb3VsZCBub3QgY3JlYXRlIGFuIGZkc2V0OiAlcyAoJWQpIiwKKyAgICAgICAgZ19zdHJlcnJvciAoZXJybm8pLCBlcnJubyk7CisgICAgZ3N0X29iamVjdF91bnJlZiAocmV0KTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorZmFpbGVkX3N0YXJ0OgorICB7CisgICAgLyogYWxyZWFkeSBwcmludGVkIGEgbmljZSBlcnJvciAqLworICAgIGdzdF9vYmplY3RfdW5yZWYgKHJldCk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KK30KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5oIGIvbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRiMmUyZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5oCkBAIC0wLDAgKzEsMTA1IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgorICogICAgICAgICAgICAgICAgICAgIDIwMDUgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorICoKKyAqIGdzdG5ldGNsaWVudGNsb2NrLmg6IGNsb2NrIHRoYXQgc3luY2hyb25pemVzIGl0c2VsZiB0byBhIHRpbWUgcHJvdmlkZXIgb3ZlcgorICogdGhlIG5ldHdvcmsKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKKyNpZm5kZWYgX19HU1RfTkVUX0NMSUVOVF9DTE9DS19IX18KKyNkZWZpbmUgX19HU1RfTkVUX0NMSUVOVF9DTE9DS19IX18KKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0c3lzdGVtY2xvY2suaD4KKworR19CRUdJTl9ERUNMUworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2lmZGVmIEdfT1NfV0lOMzIKKyMgaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbHNlCisjIGluY2x1ZGUgPG5ldGRiLmg+CisjIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyMgaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorIyBpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZiAvKkdfT1NfV0lOMzIgKi8KKworI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNkZWZpbmUgR1NUX1RZUEVfTkVUX0NMSUVOVF9DTE9DSyBcCisgIChnc3RfbmV0X2NsaWVudF9jbG9ja19nZXRfdHlwZSgpKQorI2RlZmluZSBHU1RfTkVUX0NMSUVOVF9DTE9DSyhvYmopIFwKKyAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX05FVF9DTElFTlRfQ0xPQ0ssR3N0TmV0Q2xpZW50Q2xvY2spKQorI2RlZmluZSBHU1RfTkVUX0NMSUVOVF9DTE9DS19DTEFTUyhrbGFzcykgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9ORVRfQ0xJRU5UX0NMT0NLLEdzdE5ldENsaWVudENsb2NrQ2xhc3MpKQorI2RlZmluZSBHU1RfSVNfTkVUX0NMSUVOVF9DTE9DSyhvYmopIFwKKyAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX05FVF9DTElFTlRfQ0xPQ0spKQorI2RlZmluZSBHU1RfSVNfTkVUX0NMSUVOVF9DTE9DS19DTEFTUyhrbGFzcykgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9ORVRfQ0xJRU5UX0NMT0NLKSkKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdE5ldENsaWVudENsb2NrIEdzdE5ldENsaWVudENsb2NrOwordHlwZWRlZiBzdHJ1Y3QgX0dzdE5ldENsaWVudENsb2NrQ2xhc3MgR3N0TmV0Q2xpZW50Q2xvY2tDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9Hc3ROZXRDbGllbnRDbG9ja1ByaXZhdGUgR3N0TmV0Q2xpZW50Q2xvY2tQcml2YXRlOworCisvKioKKyAqIEdzdE5ldENsaWVudENsb2NrOgorICoKKyAqIE9wYXF1ZSAjR3N0TmV0Q2xpZW50Q2xvY2sgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgX0dzdE5ldENsaWVudENsb2NrIHsKKyAgR3N0U3lzdGVtQ2xvY2sgY2xvY2s7CisKKyAgLyo8IHByb3RlY3RlZCA+Ki8KKyAgZ2NoYXIgKmFkZHJlc3M7CisgIGdpbnQgcG9ydDsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgaW50IHNvY2s7CisgIGludCBjb250cm9sX3NvY2tbMl07CisKKyAgR3N0Q2xvY2tUaW1lIGN1cnJlbnRfdGltZW91dDsKKworICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNlcnZhZGRyOworCisgIEdUaHJlYWQgKnRocmVhZDsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgR3N0TmV0Q2xpZW50Q2xvY2tQcml2YXRlICpwcml2OworCisgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkcgLSAxXTsKK307CisKK3N0cnVjdCBfR3N0TmV0Q2xpZW50Q2xvY2tDbGFzcyB7CisgIEdzdFN5c3RlbUNsb2NrQ2xhc3MgcGFyZW50X2NsYXNzOworCisgIC8qPCBwcml2YXRlID4qLworICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKK307CisKK0dUeXBlICAgICAgICAgICBnc3RfbmV0X2NsaWVudF9jbG9ja19nZXRfdHlwZQkodm9pZCk7CitHc3RDbG9jayoJZ3N0X25ldF9jbGllbnRfY2xvY2tfbmV3CShnY2hhciAqbmFtZSwgY29uc3QgZ2NoYXIgKnJlbW90ZV9hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgcmVtb3RlX3BvcnQsIEdzdENsb2NrVGltZSBiYXNlX3RpbWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HU1RfTkVUX0NMSUVOVF9DTE9DS19IX18gKi8KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcGFja2V0LmMgYi9saWJzL2dzdC9uZXQvZ3N0bmV0dGltZXBhY2tldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmOGEwMjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2dzdC9uZXQvZ3N0bmV0dGltZXBhY2tldC5jCkBAIC0wLDAgKzEsMjE4IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKy8qKgorICogU0VDVElPTjpnc3RuZXR0aW1lcGFja2V0CisgKiBAc2hvcnRfZGVzY3JpcHRpb246IEhlbHBlciBzdHJ1Y3R1cmUgdG8gY29uc3RydWN0IGNsb2NrIHBhY2tldHMgdXNlZAorICogICAgICAgICAgICAgICAgICAgICBieSBuZXR3b3JrIGNsb2Nrcy4KKyAqIEBzZWVfYWxzbzogI0dzdENsb2NrLCAjR3N0TmV0Q2xpZW50Q2xvY2ssICNHc3ROZXRUaW1lUHJvdmlkZXIKKyAqCisgKiBWYXJpb3VzIGZ1bmN0aW9ucyBmb3IgcmVjZWl2aW5nLCBzZW5kaW5nIGFuIHNlcmlhbGl6aW5nICNHc3ROZXRUaW1lUGFja2V0CisgKiBzdHJ1Y3R1cmVzLgorICoKKyAqIExhc3QgcmV2aWV3ZWQgb24gMjAwNS0xMS0yMyAoMC45LjUpCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8Z2xpYi5oPgorCisjaWZkZWYgX19DWUdXSU5fXworIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyMgaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZ3N0bmV0dGltZXBhY2tldC5oIgorCisKKy8qKgorICogZ3N0X25ldF90aW1lX3BhY2tldF9uZXc6CisgKiBAYnVmZmVyOiBhIGJ1ZmZlciBmcm9tIHdoaWNoIHRvIGNvbnN0cnVjdCB0aGUgcGFja2V0LCBvciBOVUxMCisgKgorICogQ3JlYXRlcyBhIG5ldyAjR3N0TmV0VGltZVBhY2tldCBmcm9tIGEgYnVmZmVyIHJlY2VpdmVkIG92ZXIgdGhlIG5ldHdvcmsuIFRoZQorICogY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IEBidWZmZXIgaXMgYXQgbGVhc3QKKyAqICNHU1RfTkVUX1RJTUVfUEFDS0VUX1NJWkUgYnl0ZXMgbG9uZy4KKyAqCisgKiBJZiBAYnVmZmVyIGlzICNOVUxMLCB0aGUgbG9jYWwgYW5kIHJlbW90ZSB0aW1lcyB3aWxsIGJlIHNldCB0bworICogI0dTVF9DTE9DS19USU1FX05PTkUuCisgKgorICogTVQgc2FmZS4gQ2FsbGVyIG93bnMgcmV0dXJuIHZhbHVlIChnX2ZyZWUgdG8gZnJlZSkuCisgKgorICogUmV0dXJuczogVGhlIG5ldyAjR3N0TmV0VGltZVBhY2tldC4KKyAqLworR3N0TmV0VGltZVBhY2tldCAqCitnc3RfbmV0X3RpbWVfcGFja2V0X25ldyAoY29uc3QgZ3VpbnQ4ICogYnVmZmVyKQoreworICBHc3ROZXRUaW1lUGFja2V0ICpyZXQ7CisKKyAgZ19hc3NlcnQgKHNpemVvZiAoR3N0Q2xvY2tUaW1lKSA9PSA4KTsKKworICByZXQgPSBnX25ldzAgKEdzdE5ldFRpbWVQYWNrZXQsIDEpOworCisgIGlmIChidWZmZXIpIHsKKyAgICByZXQtPmxvY2FsX3RpbWUgPSBHU1RfUkVBRF9VSU5UNjRfQkUgKGJ1ZmZlcik7CisgICAgcmV0LT5yZW1vdGVfdGltZSA9IEdTVF9SRUFEX1VJTlQ2NF9CRSAoYnVmZmVyICsgc2l6ZW9mIChHc3RDbG9ja1RpbWUpKTsKKyAgfSBlbHNlIHsKKyAgICByZXQtPmxvY2FsX3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICAgIHJldC0+cmVtb3RlX3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICB9CisKKyAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBnc3RfbmV0X3RpbWVfcGFja2V0X3NlcmlhbGl6ZToKKyAqIEBwYWNrZXQ6IHRoZSAjR3N0TmV0VGltZVBhY2tldAorICoKKyAqIFNlcmlhbGl6ZWQgYSAjR3N0TmV0VGltZVBhY2tldCBpbnRvIGEgbmV3bHktYWxsb2NhdGVkIHNlcXVlbmNlIG9mCisgKiAjR1NUX05FVF9USU1FX1BBQ0tFVF9TSVpFIGJ5dGVzLCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuIFRoZSB2YWx1ZSByZXR1cm5lZCBpcworICogc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gd3JpdGUoMikgb3Igc2VuZHRvKDIpIGZvciBjb21tdW5pY2F0aW9uIG92ZXIgdGhlCisgKiBuZXR3b3JrLgorICoKKyAqIE1UIHNhZmUuIENhbGxlciBvd25zIHJldHVybiB2YWx1ZSAoZ19mcmVlIHRvIGZyZWUpLgorICoKKyAqIFJldHVybnM6IEEgbmV3bHkgYWxsb2NhdGVkIHNlcXVlbmNlIG9mICNHU1RfTkVUX1RJTUVfUEFDS0VUX1NJWkUgYnl0ZXMuCisgKi8KK2d1aW50OCAqCitnc3RfbmV0X3RpbWVfcGFja2V0X3NlcmlhbGl6ZSAoY29uc3QgR3N0TmV0VGltZVBhY2tldCAqIHBhY2tldCkKK3sKKyAgZ3VpbnQ4ICpyZXQ7CisKKyAgZ19hc3NlcnQgKHNpemVvZiAoR3N0Q2xvY2tUaW1lKSA9PSA4KTsKKworICByZXQgPSBnX25ldzAgKGd1aW50OCwgR1NUX05FVF9USU1FX1BBQ0tFVF9TSVpFKTsKKworICBHU1RfV1JJVEVfVUlOVDY0X0JFIChyZXQsIHBhY2tldC0+bG9jYWxfdGltZSk7CisgIEdTVF9XUklURV9VSU5UNjRfQkUgKHJldCArIHNpemVvZiAoR3N0Q2xvY2tUaW1lKSwgcGFja2V0LT5yZW1vdGVfdGltZSk7CisKKyAgcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBnc3RfbmV0X3RpbWVfcGFja2V0X3JlY2VpdmU6CisgKiBAZmQ6IGEgZmlsZSBkZXNjcmlwdG9yIGNyZWF0ZWQgYnkgc29ja2V0KDIpCisgKiBAYWRkcjogYSBwb2ludGVyIHRvIGEgc29ja2FkZHIgdG8gaG9sZCB0aGUgYWRkcmVzcyBvZiB0aGUgc2VuZGVyCisgKiBAbGVuOiBhIHBvaW50ZXIgdG8gdGhlIHNpemUgb2YgdGhlIGRhdGEgcG9pbnRlZCB0byBieSBAYWRkcgorICoKKyAqIFJlY2VpdmVzIGEgI0dzdE5ldFRpbWVQYWNrZXQgb3ZlciBhIHNvY2tldC4gSGFuZGxlcyBpbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbHMsCisgKiBidXQgb3RoZXJ3aXNlIHJldHVybnMgTlVMTCBvbiBlcnJvci4gU2VlIHJlY3Zmcm9tKDIpIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uCisgKiBob3cgdG8gaW50ZXJwcmV0IEBzb2NrYWRkci4KKyAqCisgKiBNVCBzYWZlLiBDYWxsZXIgb3ducyByZXR1cm4gdmFsdWUgKGdfZnJlZSB0byBmcmVlKS4KKyAqCisgKiBSZXR1cm5zOiBUaGUgbmV3ICNHc3ROZXRUaW1lUGFja2V0LgorICovCitHc3ROZXRUaW1lUGFja2V0ICoKK2dzdF9uZXRfdGltZV9wYWNrZXRfcmVjZWl2ZSAoZ2ludCBmZCwgc3RydWN0IHNvY2thZGRyICogYWRkciwgc29ja2xlbl90ICogbGVuKQoreworICBndWludDggYnVmZmVyW0dTVF9ORVRfVElNRV9QQUNLRVRfU0laRV07CisgIGdpbnQgcmV0OworCisgIHdoaWxlIChUUlVFKSB7CisjaWZkZWYgR19PU19XSU4zMgorICAgIHJldCA9IHJlY3Zmcm9tIChmZCwgKGNoYXIgKikgYnVmZmVyLCBHU1RfTkVUX1RJTUVfUEFDS0VUX1NJWkUsCisjZWxzZQorICAgIHJldCA9IHJlY3Zmcm9tIChmZCwgYnVmZmVyLCBHU1RfTkVUX1RJTUVfUEFDS0VUX1NJWkUsCisjZW5kaWYKKyAgICAgICAgMCwgKHN0cnVjdCBzb2NrYWRkciAqKSBhZGRyLCBsZW4pOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICBpZiAoZXJybm8gIT0gRUFHQUlOICYmIGVycm5vICE9IEVJTlRSKQorICAgICAgICBnb3RvIHJlY2VpdmVfZXJyb3I7CisgICAgICBlbHNlCisgICAgICAgIGNvbnRpbnVlOworICAgIH0gZWxzZSBpZiAocmV0IDwgR1NUX05FVF9USU1FX1BBQ0tFVF9TSVpFKSB7CisgICAgICBnb3RvIHNob3J0X3BhY2tldDsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIGdzdF9uZXRfdGltZV9wYWNrZXRfbmV3IChidWZmZXIpOworICAgIH0KKyAgfQorCityZWNlaXZlX2Vycm9yOgorICB7CisgICAgR1NUX0RFQlVHICgicmVjZWl2ZSBlcnJvciAlZDogJXMgKCVkKSIsIHJldCwgZ19zdHJlcnJvciAoZXJybm8pLCBlcnJubyk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KK3Nob3J0X3BhY2tldDoKKyAgeworICAgIEdTVF9ERUJVRyAoInNvbWVvbmUgc2VudCB1cyBhIHNob3J0IHBhY2tldCAoJWQgPCAlZCkiLAorICAgICAgICByZXQsIEdTVF9ORVRfVElNRV9QQUNLRVRfU0laRSk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KK30KKworLyoqCisgKiBnc3RfbmV0X3RpbWVfcGFja2V0X3NlbmQ6CisgKiBAcGFja2V0OiB0aGUgI0dzdE5ldFRpbWVQYWNrZXQKKyAqIEBmZDogYSBmaWxlIGRlc2NyaXB0b3IgY3JlYXRlZCBieSBzb2NrZXQoMikKKyAqIEBhZGRyOiBhIHBvaW50ZXIgdG8gYSBzb2NrYWRkciB0byBob2xkIHRoZSBhZGRyZXNzIG9mIHRoZSBzZW5kZXIKKyAqIEBsZW46IHRoZSBzaXplIG9mIHRoZSBkYXRhIHBvaW50ZWQgdG8gYnkgQGFkZHIKKyAqCisgKiBTZW5kcyBhICNHc3ROZXRUaW1lUGFja2V0IG92ZXIgYSBzb2NrZXQuIEVzc2VudGlhbGx5IGEgdGhpbiB3cmFwcGVyIGFyb3VuZAorICogc2VuZHRvKDIpIGFuZCBnc3RfbmV0X3RpbWVfcGFja2V0X3NlcmlhbGl6ZSgpLiAKKyAqCisgKiBNVCBzYWZlLgorICoKKyAqIFJldHVybnM6IFRoZSByZXR1cm4gdmFsdWUgb2Ygc2VuZHRvKDIpLgorICovCitnaW50Citnc3RfbmV0X3RpbWVfcGFja2V0X3NlbmQgKGNvbnN0IEdzdE5ldFRpbWVQYWNrZXQgKiBwYWNrZXQsIGdpbnQgZmQsCisgICAgc3RydWN0IHNvY2thZGRyICogYWRkciwgc29ja2xlbl90IGxlbikKK3sKKyNpZiBkZWZpbmVkIF9fQ1lHV0lOX18KKyAgZ2ludCBmZGZsYWdzOworI2VsaWYgZGVmaW5lZCBHX09TX1dJTjMyCisgIGd1bG9uZyBmbGFnczsKKyNlbmRpZgorCisgIGd1aW50OCAqYnVmZmVyOworICBnaW50IHJldCwgc2VuZF9mbGFnczsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAocGFja2V0ICE9IE5VTEwsIC1FSU5WQUwpOworCisjaWZkZWYgX19DWUdXSU5fXworICBzZW5kX2ZsYWdzID0gMDsKKyAgZmRmbGFncyA9IGZjbnRsIChmZCwgRl9HRVRGTCk7CisgIGZjbnRsIChmZCwgRl9TRVRGTCwgZmRmbGFncyB8IE9fTk9OQkxPQ0spOworI2VsaWYgZGVmaW5lZCBHX09TX1dJTjMyCisgIGZsYWdzID0gMTsKKyAgc2VuZF9mbGFncyA9IDA7CisjZWxzZQorICBzZW5kX2ZsYWdzID0gTVNHX0RPTlRXQUlUOworI2VuZGlmCisKKyAgYnVmZmVyID0gZ3N0X25ldF90aW1lX3BhY2tldF9zZXJpYWxpemUgKHBhY2tldCk7CisKKyNpZmRlZiBHX09TX1dJTjMyCisgIGlvY3Rsc29ja2V0IChmZCwgRklPTkJJTywgJmZsYWdzKTsgICAgLyogU2V0IG5vbmJsb2NraW5nIG1vZGUgKi8KKyAgcmV0ID0KKyAgICAgIHNlbmR0byAoZmQsIChjaGFyICopIGJ1ZmZlciwgR1NUX05FVF9USU1FX1BBQ0tFVF9TSVpFLCBzZW5kX2ZsYWdzLCBhZGRyLAorICAgICAgbGVuKTsKKyNlbHNlCisgIHJldCA9IHNlbmR0byAoZmQsIGJ1ZmZlciwgR1NUX05FVF9USU1FX1BBQ0tFVF9TSVpFLCBzZW5kX2ZsYWdzLCBhZGRyLCBsZW4pOworI2VuZGlmCisKKyNpZmRlZiBfX0NZR1dJTl9fCisgIGZjbnRsIChmZCwgRl9TRVRGTCwgZmRmbGFncyk7CisjZW5kaWYKKworICBnX2ZyZWUgKGJ1ZmZlcik7CisKKyAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcGFja2V0LmggYi9saWJzL2dzdC9uZXQvZ3N0bmV0dGltZXBhY2tldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZWVmYTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2dzdC9uZXQvZ3N0bmV0dGltZXBhY2tldC5oCkBAIC0wLDAgKzEsNzggQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKKyNpZm5kZWYgX19HU1RfTkVUX1RJTUVfUEFDS0VUX0hfXworI2RlZmluZSBfX0dTVF9ORVRfVElNRV9QQUNLRVRfSF9fCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpZmRlZiBHX09TX1dJTjMyCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2lmbmRlZiBzb2NrbGVuX3QKKyNkZWZpbmUgc29ja2xlbl90IGludAorI2VuZGlmCisjZWxzZQorI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorCisvKioKKyAqIEdTVF9ORVRfVElNRV9QQUNLRVRfU0laRToKKyAqCisgKiBUaGUgc2l6ZSBvZiB0aGUgcGFja2V0cyBzZW50IGJldHdlZW4gbmV0d29yayBjbG9ja3MuCisgKi8KKyNkZWZpbmUgR1NUX05FVF9USU1FX1BBQ0tFVF9TSVpFIDE2CisKK3R5cGVkZWYgc3RydWN0IF9Hc3ROZXRUaW1lUGFja2V0IEdzdE5ldFRpbWVQYWNrZXQ7CisKKy8qKgorICogR3N0TmV0VGltZVBhY2tldDoKKyAqIEBsb2NhbF90aW1lOiB0aGUgbG9jYWwgdGltZSB3aGVuIHRoaXMgcGFja2V0IHdhcyBzZW50CisgKiBAcmVtb3RlX3RpbWU6IHRoZSByZW1vdGUgdGltZSBvYnNlcnZhdGlvbgorICoKKyAqIENvbnRlbnQgb2YgYSAjR3N0TmV0VGltZVBhY2tldC4KKyAqLworc3RydWN0IF9Hc3ROZXRUaW1lUGFja2V0IHsKKyAgR3N0Q2xvY2tUaW1lIGxvY2FsX3RpbWU7CisgIEdzdENsb2NrVGltZSByZW1vdGVfdGltZTsKK307CisKK0dzdE5ldFRpbWVQYWNrZXQqCWdzdF9uZXRfdGltZV9wYWNrZXRfbmV3IAkoY29uc3QgZ3VpbnQ4ICpidWZmZXIpOworZ3VpbnQ4KgkJCWdzdF9uZXRfdGltZV9wYWNrZXRfc2VyaWFsaXplCShjb25zdCBHc3ROZXRUaW1lUGFja2V0ICpwYWNrZXQpOworCitHc3ROZXRUaW1lUGFja2V0Kglnc3RfbmV0X3RpbWVfcGFja2V0X3JlY2VpdmUJKGdpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCAqbGVuKTsKK2dpbnQJCQlnc3RfbmV0X3RpbWVfcGFja2V0X3NlbmQJKGNvbnN0IEdzdE5ldFRpbWVQYWNrZXQgKnBhY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCBsZW4pOworCitHX0VORF9ERUNMUworCisKKyNlbmRpZiAvKiBfX0dTVF9ORVRfVElNRV9QQUNLRVRfSF9fICovCmRpZmYgLS1naXQgYS9saWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmMgYi9saWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFiNGNhYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYwpAQCAtMCwwICsxLDUxNSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisvKioKKyAqIFNFQ1RJT046Z3N0bmV0dGltZXByb3ZpZGVyCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IFNwZWNpYWwgb2JqZWN0IHRoYXQgZXhwb3NlZCB0aGUgdGltZSBvZiBhIGNsb2NrCisgKiAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBuZXR3b3JrLgorICogQHNlZV9hbHNvOiAjR3N0Q2xvY2ssICNHc3ROZXRDbGllbnRDbG9jaywgI0dzdFBpcGVsaW5lCisgKgorICogVGhpcyBvYmplY3QgZXhwb3NlcyB0aGUgdGltZSBvZiBhICNHc3RDbG9jayBvbiB0aGUgbmV0d29yay4KKyAqCisgKiBBICNHc3ROZXRUaW1lUHJvdmlkZXIgaXMgY3JlYXRlZCB3aXRoIGdzdF9uZXRfdGltZV9wcm92aWRlcl9uZXcoKSB3aGljaAorICogdGFrZXMgYSAjR3N0Q2xvY2ssIGFuIGFkZHJlc3MgYW5kIGEgcG9ydCBudW1iZXIgYXMgYXJndW1lbnRzLgorICoKKyAqIEFmdGVyIGNyZWF0aW5nIHRoZSBvYmplY3QsIGEgY2xpZW50IGNsb2NrIHN1Y2ggYXMgI0dzdE5ldENsaWVudENsb2NrIGNhbgorICogcXVlcnkgdGhlIGV4cG9zZWQgY2xvY2sgb3ZlciB0aGUgbmV0d29yayBmb3IgaXRzIHZhbHVlcy4KKyAqCisgKiBUaGUgI0dzdE5ldFRpbWVQcm92aWRlciB0eXBpY2FsbHkgd3JhcHMgdGhlIGNsb2NrIHVzZWQgYnkgYSAjR3N0UGlwZWxpbmUuCisgKgorICogTGFzdCByZXZpZXdlZCBvbiAyMDA1LTExLTIzICgwLjkuNSkKKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJnc3RuZXR0aW1lcHJvdmlkZXIuaCIKKyNpbmNsdWRlICJnc3RuZXR0aW1lcGFja2V0LmgiCisKKyNpbmNsdWRlIDxnbGliLmg+CisKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA+PSAxNDAwCisjaW5jbHVkZSA8aW8uaD4KKyNlbmRpZgorCisjaWZuZGVmIEdfT1NfV0lOMzIKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9GSU9OUkVBRF9JTl9TWVNfRklMSU8KKyNpbmNsdWRlIDxzeXMvZmlsaW8uaD4KKyNlbmRpZgorCitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChudHBfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKG50cF9kZWJ1ZykKKworI2lmZGVmIEdfT1NfV0lOMzIKKyNkZWZpbmUgY2xvc2Uoc29jaykgY2xvc2Vzb2NrZXQoc29jaykKKyNlbmRpZgorCisjZGVmaW5lIERFRkFVTFRfQUREUkVTUyAgICAgICAgICIwLjAuMC4wIgorI2RlZmluZSBERUZBVUxUX1BPUlQgICAgICAgICAgICA1NjM3CisKKyNkZWZpbmUgSVNfQUNUSVZFKHNlbGYpIChnX2F0b21pY19pbnRfZ2V0ICgmKChzZWxmKS0+YWN0aXZlLmFjdGl2ZSkpKQorCisjaWZkZWYgR19PU19XSU4zMgorI2RlZmluZSBzZXRzb2Nrb3B0KHNvY2ssIHNvbF9mbGFncywgcmV1c2VfZmxhZ3MsIHJ1LCBzaXplb2ZydSkgc2V0c29ja29wdCAoc29jaywgc29sX2ZsYWdzLCByZXVzZV9mbGFncywgKGNoYXIgKilydSwgc2l6ZW9mcnUpCisjZW5kaWYKK2VudW0KK3sKKyAgUFJPUF8wLAorICBQUk9QX1BPUlQsCisgIFBST1BfQUREUkVTUywKKyAgUFJPUF9DTE9DSywKKyAgUFJPUF9BQ1RJVkUKKyAgICAgIC8qIEZJTEwgTUUgKi8KK307CisKKyNkZWZpbmUgR1NUX05FVF9USU1FX1BST1ZJREVSX0dFVF9QUklWQVRFKG9iaikgIFwKKyAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKChvYmopLCBHU1RfVFlQRV9ORVRfVElNRV9QUk9WSURFUiwgR3N0TmV0VGltZVByb3ZpZGVyUHJpdmF0ZSkpCisKK3N0cnVjdCBfR3N0TmV0VGltZVByb3ZpZGVyUHJpdmF0ZQoreworICBHc3RQb2xsRkQgc29jazsKKyAgR3N0UG9sbCAqZmRzZXQ7Cit9OworCitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X25ldF90aW1lX3Byb3ZpZGVyX3N0YXJ0IChHc3ROZXRUaW1lUHJvdmlkZXIgKiBic2VsZik7CitzdGF0aWMgdm9pZCBnc3RfbmV0X3RpbWVfcHJvdmlkZXJfc3RvcCAoR3N0TmV0VGltZVByb3ZpZGVyICogYnNlbGYpOworCitzdGF0aWMgZ3BvaW50ZXIgZ3N0X25ldF90aW1lX3Byb3ZpZGVyX3RocmVhZCAoZ3BvaW50ZXIgZGF0YSk7CisKK3N0YXRpYyB2b2lkIGdzdF9uZXRfdGltZV9wcm92aWRlcl9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7CitzdGF0aWMgdm9pZCBnc3RfbmV0X3RpbWVfcHJvdmlkZXJfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOworc3RhdGljIHZvaWQgZ3N0X25ldF90aW1lX3Byb3ZpZGVyX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKKworI2RlZmluZSBfZG9faW5pdCBcCisgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChudHBfZGVidWcsICJuZXR0aW1lIiwgMCwgIk5ldHdvcmsgdGltZSBwcm92aWRlciIpOworCisjZGVmaW5lIGdzdF9uZXRfdGltZV9wcm92aWRlcl9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0TmV0VGltZVByb3ZpZGVyLCBnc3RfbmV0X3RpbWVfcHJvdmlkZXIsCisgICAgR1NUX1RZUEVfT0JKRUNULCBfZG9faW5pdCk7CisKKyNpZmRlZiBHX09TX1dJTjMyCitzdGF0aWMgaW50CitpbmV0X2F0b24gKGNvbnN0IGNoYXIgKmMsIHN0cnVjdCBpbl9hZGRyICpwYWRkcikKK3sKKyAgcGFkZHItPnNfYWRkciA9IGluZXRfYWRkciAoYyk7CisgIGlmIChwYWRkci0+c19hZGRyID09IElOQUREUl9OT05FKQorICAgIHJldHVybiAwOworCisgIHJldHVybiAxOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkCitnc3RfbmV0X3RpbWVfcHJvdmlkZXJfY2xhc3NfaW5pdCAoR3N0TmV0VGltZVByb3ZpZGVyQ2xhc3MgKiBrbGFzcykKK3sKKyAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOworCisgIGdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOworCisgIGdfYXNzZXJ0IChzaXplb2YgKEdzdENsb2NrVGltZSkgPT0gOCk7CisKKyAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChrbGFzcywgc2l6ZW9mIChHc3ROZXRUaW1lUHJvdmlkZXJQcml2YXRlKSk7CisKKyAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfbmV0X3RpbWVfcHJvdmlkZXJfZmluYWxpemU7CisgIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9uZXRfdGltZV9wcm92aWRlcl9zZXRfcHJvcGVydHk7CisgIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9uZXRfdGltZV9wcm92aWRlcl9nZXRfcHJvcGVydHk7CisKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9QT1JULAorICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInBvcnQiLCAicG9ydCIsCisgICAgICAgICAgIlRoZSBwb3J0IHRvIHJlY2VpdmUgdGhlIHBhY2tldHMgZnJvbSwgMD1hbGxvY2F0ZSIsIDAsIEdfTUFYVUlOVDE2LAorICAgICAgICAgIERFRkFVTFRfUE9SVCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQUREUkVTUywKKyAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJhZGRyZXNzIiwgImFkZHJlc3MiLAorICAgICAgICAgICJUaGUgYWRkcmVzcyB0byBiaW5kIG9uLCBhcyBhIGRvdHRlZCBxdWFkICh4LngueC54KSIsCisgICAgICAgICAgREVGQVVMVF9BRERSRVNTLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DTE9DSywKKyAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QgKCJjbG9jayIsICJDbG9jayIsCisgICAgICAgICAgIlRoZSBjbG9jayB0byBleHBvcnQgb3ZlciB0aGUgbmV0d29yayIsIEdTVF9UWVBFX0NMT0NLLAorICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0FDVElWRSwKKyAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiYWN0aXZlIiwgIkFjdGl2ZSIsCisgICAgICAgICAgIlRSVUUgaWYgdGhlIGNsb2NrIHdpbGwgcmVzcG9uZCB0byBxdWVyaWVzIG92ZXIgdGhlIG5ldHdvcmsiLCBUUlVFLAorICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X25ldF90aW1lX3Byb3ZpZGVyX2luaXQgKEdzdE5ldFRpbWVQcm92aWRlciAqIHNlbGYpCit7CisjaWZkZWYgR19PU19XSU4zMgorICBXU0FEQVRBIHc7CisgIGludCBlcnJvciA9IFdTQVN0YXJ0dXAgKDB4MDIwMiwgJncpOworCisgIGlmIChlcnJvcikgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJFcnJvciBvbiBXU0FTdGFydHVwIik7CisgIH0KKyAgaWYgKHcud1ZlcnNpb24gIT0gMHgwMjAyKSB7CisgICAgV1NBQ2xlYW51cCAoKTsKKyAgfQorI2VuZGlmCisgIHNlbGYtPnByaXYgPSBHU1RfTkVUX1RJTUVfUFJPVklERVJfR0VUX1BSSVZBVEUgKHNlbGYpOworCisgIHNlbGYtPnBvcnQgPSBERUZBVUxUX1BPUlQ7CisgIHNlbGYtPnByaXYtPnNvY2suZmQgPSAtMTsKKyAgc2VsZi0+YWRkcmVzcyA9IGdfc3RyZHVwIChERUZBVUxUX0FERFJFU1MpOworICBzZWxmLT50aHJlYWQgPSBOVUxMOworICBzZWxmLT5hY3RpdmUuYWN0aXZlID0gVFJVRTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9uZXRfdGltZV9wcm92aWRlcl9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKK3sKKyAgR3N0TmV0VGltZVByb3ZpZGVyICpzZWxmID0gR1NUX05FVF9USU1FX1BST1ZJREVSIChvYmplY3QpOworCisgIGlmIChzZWxmLT50aHJlYWQpIHsKKyAgICBnc3RfbmV0X3RpbWVfcHJvdmlkZXJfc3RvcCAoc2VsZik7CisgICAgZ19hc3NlcnQgKHNlbGYtPnRocmVhZCA9PSBOVUxMKTsKKyAgfQorCisgIGlmIChzZWxmLT5wcml2LT5mZHNldCkgeworICAgIGdzdF9wb2xsX2ZyZWUgKHNlbGYtPnByaXYtPmZkc2V0KTsKKyAgICBzZWxmLT5wcml2LT5mZHNldCA9IE5VTEw7CisgIH0KKworICBnX2ZyZWUgKHNlbGYtPmFkZHJlc3MpOworICBzZWxmLT5hZGRyZXNzID0gTlVMTDsKKworICBpZiAoc2VsZi0+Y2xvY2spCisgICAgZ3N0X29iamVjdF91bnJlZiAoc2VsZi0+Y2xvY2spOworICBzZWxmLT5jbG9jayA9IE5VTEw7CisKKyNpZmRlZiBHX09TX1dJTjMyCisgIFdTQUNsZWFudXAgKCk7CisjZW5kaWYKKworICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Cit9CisKK3N0YXRpYyBncG9pbnRlcgorZ3N0X25ldF90aW1lX3Byb3ZpZGVyX3RocmVhZCAoZ3BvaW50ZXIgZGF0YSkKK3sKKyAgR3N0TmV0VGltZVByb3ZpZGVyICpzZWxmID0gZGF0YTsKKyAgc3RydWN0IHNvY2thZGRyX2luIHRtcGFkZHI7CisgIHNvY2tsZW5fdCBsZW47CisgIEdzdE5ldFRpbWVQYWNrZXQgKnBhY2tldDsKKyAgZ2ludCByZXQ7CisKKyAgd2hpbGUgKFRSVUUpIHsKKyAgICBHU1RfTE9HX09CSkVDVCAoc2VsZiwgImRvaW5nIHNlbGVjdCIpOworICAgIHJldCA9IGdzdF9wb2xsX3dhaXQgKHNlbGYtPnByaXYtPmZkc2V0LCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKyAgICBHU1RfTE9HX09CSkVDVCAoc2VsZiwgInNlbGVjdCByZXR1cm5lZCAlZCIsIHJldCk7CisKKyAgICBpZiAocmV0IDw9IDApIHsKKyAgICAgIGlmIChlcnJubyA9PSBFQlVTWSkgeworICAgICAgICBHU1RfTE9HX09CSkVDVCAoc2VsZiwgInN0b3AiKTsKKyAgICAgICAgZ290byBzdG9wcGVkOworICAgICAgfSBlbHNlIGlmIChlcnJubyAhPSBFQUdBSU4gJiYgZXJybm8gIT0gRUlOVFIpCisgICAgICAgIGdvdG8gc2VsZWN0X2Vycm9yOworICAgICAgZWxzZQorICAgICAgICBjb250aW51ZTsKKyAgICB9IGVsc2UgeworICAgICAgLyogZ290IGRhdGEgaW4gKi8KKyAgICAgIGxlbiA9IHNpemVvZiAoc3RydWN0IHNvY2thZGRyKTsKKworICAgICAgcGFja2V0ID0gZ3N0X25ldF90aW1lX3BhY2tldF9yZWNlaXZlIChzZWxmLT5wcml2LT5zb2NrLmZkLAorICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnRtcGFkZHIsICZsZW4pOworCisgICAgICBpZiAoIXBhY2tldCkKKyAgICAgICAgZ290byByZWNlaXZlX2Vycm9yOworCisgICAgICBpZiAoSVNfQUNUSVZFIChzZWxmKSkgeworICAgICAgICAvKiBkbyB3aGF0IHdlIHdlcmUgYXNrZWQgdG8gYW5kIHNlbmQgdGhlIHBhY2tldCBiYWNrICovCisgICAgICAgIHBhY2tldC0+cmVtb3RlX3RpbWUgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKHNlbGYtPmNsb2NrKTsKKworICAgICAgICAvKiBpZ25vcmUgZXJyb3JzICovCisgICAgICAgIGdzdF9uZXRfdGltZV9wYWNrZXRfc2VuZCAocGFja2V0LCBzZWxmLT5wcml2LT5zb2NrLmZkLAorICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSAmdG1wYWRkciwgbGVuKTsKKyAgICAgIH0KKworICAgICAgZ19mcmVlIChwYWNrZXQpOworCisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKKworICAgIC8qIGxvZyBlcnJvcnMgYW5kIGtlZXAgZ29pbmcgKi8KKyAgc2VsZWN0X2Vycm9yOgorICAgIHsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJzZWxlY3QgZXJyb3IgJWQ6ICVzICglZCkiLCByZXQsCisgICAgICAgICAgZ19zdHJlcnJvciAoZXJybm8pLCBlcnJubyk7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgIHN0b3BwZWQ6CisgICAgeworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgInNodXR0aW5nIGRvd24iKTsKKyAgICAgIC8qIGNsb3NlIHNvY2tldCAqLworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICByZWNlaXZlX2Vycm9yOgorICAgIHsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJyZWNlaXZlIGVycm9yIik7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKKworICB9CisKKyAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfbmV0X3RpbWVfcHJvdmlkZXJfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIEdzdE5ldFRpbWVQcm92aWRlciAqc2VsZiA9IEdTVF9ORVRfVElNRV9QUk9WSURFUiAob2JqZWN0KTsKKyAgR3N0Q2xvY2sgKipjbG9ja19wID0gJnNlbGYtPmNsb2NrOworCisgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9QT1JUOgorICAgICAgc2VsZi0+cG9ydCA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FERFJFU1M6CisgICAgICBnX2ZyZWUgKHNlbGYtPmFkZHJlc3MpOworICAgICAgaWYgKGdfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpID09IE5VTEwpCisgICAgICAgIHNlbGYtPmFkZHJlc3MgPSBnX3N0cmR1cCAoREVGQVVMVF9BRERSRVNTKTsKKyAgICAgIGVsc2UKKyAgICAgICAgc2VsZi0+YWRkcmVzcyA9IGdfc3RyZHVwIChnX3ZhbHVlX2dldF9zdHJpbmcgKHZhbHVlKSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0xPQ0s6CisgICAgICBnc3Rfb2JqZWN0X3JlcGxhY2UgKChHc3RPYmplY3QgKiopIGNsb2NrX3AsCisgICAgICAgICAgKEdzdE9iamVjdCAqKSBnX3ZhbHVlX2dldF9vYmplY3QgKHZhbHVlKSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQUNUSVZFOgorICAgICAgZ19hdG9taWNfaW50X3NldCAoJnNlbGYtPmFjdGl2ZS5hY3RpdmUsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKSk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfbmV0X3RpbWVfcHJvdmlkZXJfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIEdzdE5ldFRpbWVQcm92aWRlciAqc2VsZiA9IEdTVF9ORVRfVElNRV9QUk9WSURFUiAob2JqZWN0KTsKKworICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfUE9SVDoKKyAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHNlbGYtPnBvcnQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FERFJFU1M6CisgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBzZWxmLT5hZGRyZXNzKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DTE9DSzoKKyAgICAgIGdfdmFsdWVfc2V0X29iamVjdCAodmFsdWUsIHNlbGYtPmNsb2NrKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BQ1RJVkU6CisgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgSVNfQUNUSVZFIChzZWxmKSk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X25ldF90aW1lX3Byb3ZpZGVyX3N0YXJ0IChHc3ROZXRUaW1lUHJvdmlkZXIgKiBzZWxmKQoreworICBnaW50IHJ1OworICBzdHJ1Y3Qgc29ja2FkZHJfaW4gbXlfYWRkcjsKKyAgc29ja2xlbl90IGxlbjsKKyAgaW50IHBvcnQ7CisgIGdpbnQgcmV0OworICBHRXJyb3IgKmVycm9yOworCisgIGlmICgocmV0ID0gc29ja2V0IChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKSkgPCAwKQorICAgIGdvdG8gbm9fc29ja2V0OworCisgIHNlbGYtPnByaXYtPnNvY2suZmQgPSByZXQ7CisKKyAgcnUgPSAxOworICByZXQgPQorICAgICAgc2V0c29ja29wdCAoc2VsZi0+cHJpdi0+c29jay5mZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAmcnUsCisgICAgICBzaXplb2YgKHJ1KSk7CisgIGlmIChyZXQgPCAwKQorICAgIGdvdG8gc2V0c29ja29wdF9lcnJvcjsKKworICBtZW1zZXQgKCZteV9hZGRyLCAwLCBzaXplb2YgKG15X2FkZHIpKTsKKyAgbXlfYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsgLyogaG9zdCBieXRlIG9yZGVyICovCisgIG15X2FkZHIuc2luX3BvcnQgPSBodG9ucyAoKGdpbnQxNikgc2VsZi0+cG9ydCk7ICAgICAgIC8qIHNob3J0LCBuZXR3b3JrIGJ5dGUgb3JkZXIgKi8KKyAgbXlfYWRkci5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOworICBpZiAoc2VsZi0+YWRkcmVzcykgeworICAgIHJldCA9IGluZXRfYXRvbiAoc2VsZi0+YWRkcmVzcywgJm15X2FkZHIuc2luX2FkZHIpOworICAgIGlmIChyZXQgPT0gMCkKKyAgICAgIGdvdG8gaW52YWxpZF9hZGRyZXNzX2Vycm9yOworICB9CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgImJpbmRpbmcgb24gcG9ydCAlZCIsIHNlbGYtPnBvcnQpOworICByZXQgPQorICAgICAgYmluZCAoc2VsZi0+cHJpdi0+c29jay5mZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmbXlfYWRkciwKKyAgICAgIHNpemVvZiAobXlfYWRkcikpOworICBpZiAocmV0IDwgMCkKKyAgICBnb3RvIGJpbmRfZXJyb3I7CisKKyAgbGVuID0gc2l6ZW9mIChteV9hZGRyKTsKKyAgcmV0ID0gZ2V0c29ja25hbWUgKHNlbGYtPnByaXYtPnNvY2suZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJm15X2FkZHIsICZsZW4pOworICBpZiAocmV0IDwgMCkKKyAgICBnb3RvIGdldHNvY2tuYW1lX2Vycm9yOworCisgIHBvcnQgPSBudG9ocyAobXlfYWRkci5zaW5fcG9ydCk7CisgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJib3VuZCwgb24gcG9ydCAlZCIsIHBvcnQpOworCisgIGlmIChwb3J0ICE9IHNlbGYtPnBvcnQpIHsKKyAgICBzZWxmLT5wb3J0ID0gcG9ydDsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAibm90aWZ5aW5nICVkIiwgcG9ydCk7CisgICAgZ19vYmplY3Rfbm90aWZ5IChHX09CSkVDVCAoc2VsZiksICJwb3J0Iik7CisgIH0KKworICBnc3RfcG9sbF9hZGRfZmQgKHNlbGYtPnByaXYtPmZkc2V0LCAmc2VsZi0+cHJpdi0+c29jayk7CisgIGdzdF9wb2xsX2ZkX2N0bF9yZWFkIChzZWxmLT5wcml2LT5mZHNldCwgJnNlbGYtPnByaXYtPnNvY2ssIFRSVUUpOworCisgIHNlbGYtPnRocmVhZCA9IGdfdGhyZWFkX2NyZWF0ZSAoZ3N0X25ldF90aW1lX3Byb3ZpZGVyX3RocmVhZCwgc2VsZiwgVFJVRSwKKyAgICAgICZlcnJvcik7CisgIGlmICghc2VsZi0+dGhyZWFkKQorICAgIGdvdG8gbm9fdGhyZWFkOworCisgIHJldHVybiBUUlVFOworCisgIC8qIEVSUk9SUyAqLworbm9fc29ja2V0OgorICB7CisgICAgR1NUX0VSUk9SX09CSkVDVCAoc2VsZiwgInNvY2tldCBmYWlsZWQgJWQ6ICVzICglZCkiLCByZXQsCisgICAgICAgIGdfc3RyZXJyb3IgKGVycm5vKSwgZXJybm8pOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorc2V0c29ja29wdF9lcnJvcjoKKyAgeworICAgIGNsb3NlIChzZWxmLT5wcml2LT5zb2NrLmZkKTsKKyAgICBzZWxmLT5wcml2LT5zb2NrLmZkID0gLTE7CisgICAgR1NUX0VSUk9SX09CSkVDVCAoc2VsZiwgInNldHNvY2tvcHQgZmFpbGVkICVkOiAlcyAoJWQpIiwgcmV0LAorICAgICAgICBnX3N0cmVycm9yIChlcnJubyksIGVycm5vKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK2ludmFsaWRfYWRkcmVzc19lcnJvcjoKKyAgeworICAgIGNsb3NlIChzZWxmLT5wcml2LT5zb2NrLmZkKTsKKyAgICBzZWxmLT5wcml2LT5zb2NrLmZkID0gLTE7CisgICAgR1NUX0VSUk9SX09CSkVDVCAoc2VsZiwgImludmFsaWQgbmV0d29yayBhZGRyZXNzICVzOiAlcyAoJWQpIiwKKyAgICAgICAgc2VsZi0+YWRkcmVzcywgZ19zdHJlcnJvciAoZXJybm8pLCBlcnJubyk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CitiaW5kX2Vycm9yOgorICB7CisgICAgY2xvc2UgKHNlbGYtPnByaXYtPnNvY2suZmQpOworICAgIHNlbGYtPnByaXYtPnNvY2suZmQgPSAtMTsKKyAgICBHU1RfRVJST1JfT0JKRUNUIChzZWxmLCAiYmluZCBmYWlsZWQgJWQ6ICVzICglZCkiLCByZXQsCisgICAgICAgIGdfc3RyZXJyb3IgKGVycm5vKSwgZXJybm8pOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorZ2V0c29ja25hbWVfZXJyb3I6CisgIHsKKyAgICBjbG9zZSAoc2VsZi0+cHJpdi0+c29jay5mZCk7CisgICAgc2VsZi0+cHJpdi0+c29jay5mZCA9IC0xOworICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHNlbGYsICJnZXRzb2NrbmFtZSBmYWlsZWQgJWQ6ICVzICglZCkiLCByZXQsCisgICAgICAgIGdfc3RyZXJyb3IgKGVycm5vKSwgZXJybm8pOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorbm9fdGhyZWFkOgorICB7CisgICAgZ3N0X3BvbGxfcmVtb3ZlX2ZkIChzZWxmLT5wcml2LT5mZHNldCwgJnNlbGYtPnByaXYtPnNvY2spOworICAgIGNsb3NlIChzZWxmLT5wcml2LT5zb2NrLmZkKTsKKyAgICBzZWxmLT5wcml2LT5zb2NrLmZkID0gLTE7CisgICAgR1NUX0VSUk9SX09CSkVDVCAoc2VsZiwgImNvdWxkIG5vdCBjcmVhdGUgdGhyZWFkOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKyAgICBnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9uZXRfdGltZV9wcm92aWRlcl9zdG9wIChHc3ROZXRUaW1lUHJvdmlkZXIgKiBzZWxmKQoreworICBnc3RfcG9sbF9zZXRfZmx1c2hpbmcgKHNlbGYtPnByaXYtPmZkc2V0LCBUUlVFKTsKKyAgZ190aHJlYWRfam9pbiAoc2VsZi0+dGhyZWFkKTsKKyAgc2VsZi0+dGhyZWFkID0gTlVMTDsKKworICBpZiAoc2VsZi0+cHJpdi0+c29jay5mZCAhPSAtMSkgeworICAgIGdzdF9wb2xsX3JlbW92ZV9mZCAoc2VsZi0+cHJpdi0+ZmRzZXQsICZzZWxmLT5wcml2LT5zb2NrKTsKKyAgICBjbG9zZSAoc2VsZi0+cHJpdi0+c29jay5mZCk7CisgICAgc2VsZi0+cHJpdi0+c29jay5mZCA9IC0xOworICB9Cit9CisKKy8qKgorICogZ3N0X25ldF90aW1lX3Byb3ZpZGVyX25ldzoKKyAqIEBjbG9jazogYSAjR3N0Q2xvY2sgdG8gZXhwb3J0IG92ZXIgdGhlIG5ldHdvcmsKKyAqIEBhZGRyZXNzOiBhbiBhZGRyZXNzIHRvIGJpbmQgb24gYXMgYSBkb3R0ZWQgcXVhZCAoeHh4Lnh4eC54eHgueHh4KSwgb3IgTlVMTAorICogICAgICAgICAgIHRvIGJpbmQgdG8gYWxsIGFkZHJlc3NlcworICogQHBvcnQ6IGEgcG9ydCB0byBiaW5kIG9uLCBvciAwIHRvIGxldCB0aGUga2VybmVsIGNob29zZQorICoKKyAqIEFsbG93cyBuZXR3b3JrIGNsaWVudHMgdG8gZ2V0IHRoZSBjdXJyZW50IHRpbWUgb2YgQGNsb2NrLgorICoKKyAqIFJldHVybnM6IHRoZSBuZXcgI0dzdE5ldFRpbWVQcm92aWRlciwgb3IgTlVMTCBvbiBlcnJvcgorICovCitHc3ROZXRUaW1lUHJvdmlkZXIgKgorZ3N0X25ldF90aW1lX3Byb3ZpZGVyX25ldyAoR3N0Q2xvY2sgKiBjbG9jaywgY29uc3QgZ2NoYXIgKiBhZGRyZXNzLCBnaW50IHBvcnQpCit7CisgIEdzdE5ldFRpbWVQcm92aWRlciAqcmV0OworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChjbG9jayAmJiBHU1RfSVNfQ0xPQ0sgKGNsb2NrKSwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwb3J0ID49IDAgJiYgcG9ydCA8PSBHX01BWFVJTlQxNiwgTlVMTCk7CisKKyAgcmV0ID0gZ19vYmplY3RfbmV3IChHU1RfVFlQRV9ORVRfVElNRV9QUk9WSURFUiwgImNsb2NrIiwgY2xvY2ssICJhZGRyZXNzIiwKKyAgICAgIGFkZHJlc3MsICJwb3J0IiwgcG9ydCwgTlVMTCk7CisKKyAgaWYgKChyZXQtPnByaXYtPmZkc2V0ID0gZ3N0X3BvbGxfbmV3IChUUlVFKSkgPT0gTlVMTCkKKyAgICBnb3RvIG5vX2Zkc2V0OworCisgIGlmICghZ3N0X25ldF90aW1lX3Byb3ZpZGVyX3N0YXJ0IChyZXQpKQorICAgIGdvdG8gZmFpbGVkX3N0YXJ0OworCisgIC8qIGFsbCBzeXN0ZW1zIGdvLCBjYXAnbiAqLworICByZXR1cm4gcmV0OworCitub19mZHNldDoKKyAgeworICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHJldCwgImNvdWxkIG5vdCBjcmVhdGUgYW4gZmRzZXQ6ICVzICglZCkiLAorICAgICAgICBnX3N0cmVycm9yIChlcnJubyksIGVycm5vKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChyZXQpOworICAgIHJldHVybiBOVUxMOworICB9CitmYWlsZWRfc3RhcnQ6CisgIHsKKyAgICAvKiBhbHJlYWR5IHByaW50ZWQgYSBuaWNlIGVycm9yICovCisgICAgZ3N0X29iamVjdF91bnJlZiAocmV0KTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5oIGIvbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NjA5ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmgKQEAgLTAsMCArMSwxMTAgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKyAqICAgICAgICAgICAgICAgMjAwNiBKb25pIFZhbHRhbmVuIDxqb25pLnZhbHRhbmVuQG1vdmlhbC5maT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKKyNpZm5kZWYgX19HU1RfTkVUX1RJTUVfUFJPVklERVJfSF9fCisjZGVmaW5lIF9fR1NUX05FVF9USU1FX1BST1ZJREVSX0hfXworCisvKiB0byBkZXRlcm1pbmF0ZSBvcyAqLworI2luY2x1ZGUgPGdsaWIuaD4KKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworR19CRUdJTl9ERUNMUworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2lmZGVmIEdfT1NfV0lOMzIKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjaWZuZGVmIHNvY2tsZW5fdAorI2RlZmluZSBzb2NrbGVuX3QgaW50CisjZW5kaWYKKyNlbHNlCisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxmY250bC5oPgorCisjZGVmaW5lIEdTVF9UWVBFX05FVF9USU1FX1BST1ZJREVSIFwKKyAgKGdzdF9uZXRfdGltZV9wcm92aWRlcl9nZXRfdHlwZSgpKQorI2RlZmluZSBHU1RfTkVUX1RJTUVfUFJPVklERVIob2JqKSBcCisgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9ORVRfVElNRV9QUk9WSURFUixHc3ROZXRUaW1lUHJvdmlkZXIpKQorI2RlZmluZSBHU1RfTkVUX1RJTUVfUFJPVklERVJfQ0xBU1Moa2xhc3MpIFwKKyAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfTkVUX1RJTUVfUFJPVklERVIsR3N0TmV0VGltZVByb3ZpZGVyQ2xhc3MpKQorI2RlZmluZSBHU1RfSVNfTkVUX1RJTUVfUFJPVklERVIob2JqKSBcCisgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9ORVRfVElNRV9QUk9WSURFUikpCisjZGVmaW5lIEdTVF9JU19ORVRfVElNRV9QUk9WSURFUl9DTEFTUyhrbGFzcykgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9ORVRfVElNRV9QUk9WSURFUikpCisKK3R5cGVkZWYgc3RydWN0IF9Hc3ROZXRUaW1lUHJvdmlkZXIgR3N0TmV0VGltZVByb3ZpZGVyOwordHlwZWRlZiBzdHJ1Y3QgX0dzdE5ldFRpbWVQcm92aWRlckNsYXNzIEdzdE5ldFRpbWVQcm92aWRlckNsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX0dzdE5ldFRpbWVQcm92aWRlclByaXZhdGUgR3N0TmV0VGltZVByb3ZpZGVyUHJpdmF0ZTsKKworCisvKioKKyAqIEdzdE5ldFRpbWVQcm92aWRlcjoKKyAqCisgKiBPcGFxdWUgI0dzdE5ldFRpbWVQcm92aWRlciBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBfR3N0TmV0VGltZVByb3ZpZGVyIHsKKyAgR3N0T2JqZWN0IHBhcmVudDsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgZ2NoYXIgKmFkZHJlc3M7CisgIGludCBwb3J0OworCisgIGludCBzb2NrOworICBpbnQgY29udHJvbF9zb2NrWzJdOworCisgIEdUaHJlYWQgKnRocmVhZDsKKworICBHc3RDbG9jayAqY2xvY2s7CisKKyAgdW5pb24geworICAgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWQxOworICAgIC8qIGhhcyB0byBiZSBhIGdpbnQsIHdlIHVzZSBhdG9taWMgb3BzIGhlcmUgKi8KKyAgICBnaW50IGFjdGl2ZTsKKyAgfSBhY3RpdmU7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIEdzdE5ldFRpbWVQcm92aWRlclByaXZhdGUgKnByaXY7CisKKyAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElORyAtIDJdOworfTsKKworc3RydWN0IF9Hc3ROZXRUaW1lUHJvdmlkZXJDbGFzcyB7CisgIEdzdE9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK0dUeXBlCQkJZ3N0X25ldF90aW1lX3Byb3ZpZGVyX2dldF90eXBlCSh2b2lkKTsKK0dzdE5ldFRpbWVQcm92aWRlcioJZ3N0X25ldF90aW1lX3Byb3ZpZGVyX25ldyAJKEdzdENsb2NrICpjbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICphZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBwb3J0KTsKKworR19FTkRfREVDTFMKKworCisjZW5kaWYgLyogX19HU1RfTkVUX1RJTUVfUFJPVklERVJfSF9fICovCmRpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmE0YjFlMQotLS0gL2Rldi9udWxsCisrKyBiL2x0bWFpbi5zaApAQCAtMCwwICsxLDg0MTMgQEAKKyMgR2VuZXJhdGVkIGZyb20gbHRtYWluLm00c2guCisKKyMgbHRtYWluLnNoIChHTlUgbGlidG9vbCkgMi4yLjZiCisjIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2CisKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCisjIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCisjIEdOVSBMaWJ0b29sIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisjIGlmIHlvdSBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQKKyMgaXMgYnVpbHQgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlCisjIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIworIyBHTlUgTGlidG9vbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggR05VIExpYnRvb2w7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBhIGNvcHkKKyMgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwsCisjIG9yIG9idGFpbmVkIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyMgVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiBbTU9ERS1BUkddLi4uCisjCisjIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgorIworIyAgICAgLS1jb25maWcgICAgICAgICAgICAgc2hvdyBhbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyMgICAgIC0tZGVidWcgICAgICAgICAgICAgIGVuYWJsZSB2ZXJib3NlIHNoZWxsIHRyYWNpbmcKKyMgLW4sIC0tZHJ5LXJ1biAgICAgICAgICAgIGRpc3BsYXkgY29tbWFuZHMgd2l0aG91dCBtb2RpZnlpbmcgYW55IGZpbGVzCisjICAgICAtLWZlYXR1cmVzICAgICAgICAgICBkaXNwbGF5IGJhc2ljIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKyMgICAgIC0tbW9kZT1NT0RFICAgICAgICAgIHVzZSBvcGVyYXRpb24gbW9kZSBNT0RFCisjICAgICAtLXByZXNlcnZlLWR1cC1kZXBzICBkb24ndCByZW1vdmUgZHVwbGljYXRlIGRlcGVuZGVuY3kgbGlicmFyaWVzCisjICAgICAtLXF1aWV0LCAtLXNpbGVudCAgICBkb24ndCBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCisjICAgICAtLXRhZz1UQUcgICAgICAgICAgICB1c2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZnJvbSB0YWcgVEFHCisjIC12LCAtLXZlcmJvc2UgICAgICAgICAgICBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIChkZWZhdWx0KQorIyAgICAgLS12ZXJzaW9uICAgICAgICAgICAgcHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbgorIyAtaCwgLS1oZWxwICAgICAgICAgICAgICAgcHJpbnQgc2hvcnQgb3IgbG9uZyBoZWxwIG1lc3NhZ2UKKyMKKyMgTU9ERSBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICBjbGVhbiAgICAgICAgICAgICAgcmVtb3ZlIGZpbGVzIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeQorIyAgICAgICBjb21waWxlICAgICAgICAgICAgY29tcGlsZSBhIHNvdXJjZSBmaWxlIGludG8gYSBsaWJ0b29sIG9iamVjdAorIyAgICAgICBleGVjdXRlICAgICAgICAgICAgYXV0b21hdGljYWxseSBzZXQgbGlicmFyeSBwYXRoLCB0aGVuIHJ1biBhIHByb2dyYW0KKyMgICAgICAgZmluaXNoICAgICAgICAgICAgIGNvbXBsZXRlIHRoZSBpbnN0YWxsYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMKKyMgICAgICAgaW5zdGFsbCAgICAgICAgICAgIGluc3RhbGwgbGlicmFyaWVzIG9yIGV4ZWN1dGFibGVzCisjICAgICAgIGxpbmsgICAgICAgICAgICAgICBjcmVhdGUgYSBsaWJyYXJ5IG9yIGFuIGV4ZWN1dGFibGUKKyMgICAgICAgdW5pbnN0YWxsICAgICAgICAgIHJlbW92ZSBsaWJyYXJpZXMgZnJvbSBhbiBpbnN0YWxsZWQgZGlyZWN0b3J5CisjCisjIE1PREUtQVJHUyB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgTU9ERS4KKyMgVHJ5IGAkcHJvZ25hbWUgLS1oZWxwIC0tbW9kZT1NT0RFJyBmb3IgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIE1PREUuCisjCisjIFdoZW4gcmVwb3J0aW5nIGEgYnVnLCBwbGVhc2UgZGVzY3JpYmUgYSB0ZXN0IGNhc2UgdG8gcmVwcm9kdWNlIGl0IGFuZAorIyBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246CisjCisjICAgICAgIGhvc3QtdHJpcGxldDoJJGhvc3QKKyMgICAgICAgc2hlbGw6CQkkU0hFTEwKKyMgICAgICAgY29tcGlsZXI6CQkkTFRDQworIyAgICAgICBjb21waWxlciBmbGFnczoJCSRMVENGTEFHUworIyAgICAgICBsaW5rZXI6CQkkTEQgKGdudT8gJHdpdGhfZ251X2xkKQorIyAgICAgICAkcHJvZ25hbWU6CQkoR05VIGxpYnRvb2wpIDIuMi42YiBEZWJpYW4tMi4yLjZiLTJ1YnVudHUzCisjICAgICAgIGF1dG9tYWtlOgkJJGF1dG9tYWtlX3ZlcnNpb24KKyMgICAgICAgYXV0b2NvbmY6CQkkYXV0b2NvbmZfdmVyc2lvbgorIworIyBSZXBvcnQgYnVncyB0byA8YnVnLWxpYnRvb2xAZ251Lm9yZz4uCisKK1BST0dSQU09bHRtYWluLnNoCitQQUNLQUdFPWxpYnRvb2wKK1ZFUlNJT049IjIuMi42YiBEZWJpYW4tMi4yLjZiLTJ1YnVudHUzIgorVElNRVNUQU1QPSIiCitwYWNrYWdlX3JldmlzaW9uPTEuMzAxNworCisjIEJlIEJvdXJuZSBjb21wYXRpYmxlCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICpwb3NpeCopIHNldCAtbyBwb3NpeDs7IGVzYWMKK2ZpCitCSU5fU0g9eHBnNDsgZXhwb3J0IEJJTl9TSCAjIGZvciBUcnU2NAorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorCisjIE5MUyBudWlzYW5jZXM6IFdlIHNhdmUgdGhlIG9sZCB2YWx1ZXMgdG8gcmVzdG9yZSBkdXJpbmcgZXhlY3V0ZSBtb2RlLgorIyBPbmx5IHNldCBMQU5HIGFuZCBMQ19BTEwgdG8gQyBpZiBhbHJlYWR5IHNldC4KKyMgVGhlc2UgbXVzdCBub3QgYmUgc2V0IHVuY29uZGl0aW9uYWxseSBiZWNhdXNlIG5vdCBhbGwgc3lzdGVtcyB1bmRlcnN0YW5kCisjIGUuZy4gTEFORz1DIChub3RhYmx5IFNDTykuCitsdF91c2VyX2xvY2FsZT0KK2x0X3NhZmVfbG9jYWxlPQorZm9yIGx0X3ZhciBpbiBMQU5HIExBTkdVQUdFIExDX0FMTCBMQ19DVFlQRSBMQ19DT0xMQVRFIExDX01FU1NBR0VTCitkbworICBldmFsICJpZiB0ZXN0IFwiXCR7JGx0X3ZhcitzZXR9XCIgPSBzZXQ7IHRoZW4KKyAgICAgICAgICBzYXZlXyRsdF92YXI9XCQkbHRfdmFyCisgICAgICAgICAgJGx0X3Zhcj1DCisJICBleHBvcnQgJGx0X3ZhcgorCSAgbHRfdXNlcl9sb2NhbGU9XCIkbHRfdmFyPVxcXCRzYXZlX1wkbHRfdmFyOyBcJGx0X3VzZXJfbG9jYWxlXCIKKwkgIGx0X3NhZmVfbG9jYWxlPVwiJGx0X3Zhcj1DOyBcJGx0X3NhZmVfbG9jYWxlXCIKKwlmaSIKK2RvbmUKKworJGx0X3Vuc2V0IENEUEFUSAorCisKKworCisKKzogJHtDUD0iY3AgLWYifQorOiAke0VDSE89ImVjaG8ifQorOiAke0VHUkVQPSIvYmluL2dyZXAgLUUifQorOiAke0ZHUkVQPSIvYmluL2dyZXAgLUYifQorOiAke0dSRVA9Ii9iaW4vZ3JlcCJ9Cis6ICR7TE5fUz0ibG4gLXMifQorOiAke01BS0U9Im1ha2UifQorOiAke01LRElSPSJta2RpciJ9Cis6ICR7TVY9Im12IC1mIn0KKzogJHtSTT0icm0gLWYifQorOiAke1NFRD0iL2Jpbi9zZWQifQorOiAke1NIRUxMPSIke0NPTkZJR19TSEVMTC0vYmluL3NofSJ9Cis6ICR7WHNlZD0iJFNFRCAtZSAxcy9eWC8vIn0KKworIyBHbG9iYWwgdmFyaWFibGVzOgorRVhJVF9TVUNDRVNTPTAKK0VYSVRfRkFJTFVSRT0xCitFWElUX01JU01BVENIPTYzICAjICQ/ID0gNjMgaXMgdXNlZCB0byBpbmRpY2F0ZSB2ZXJzaW9uIG1pc21hdGNoIHRvIG1pc3NpbmcuCitFWElUX1NLSVA9NzcJICAjICQ/ID0gNzcgaXMgdXNlZCB0byBpbmRpY2F0ZSBhIHNraXBwZWQgdGVzdCB0byBhdXRvbWFrZS4KKworZXhpdF9zdGF0dXM9JEVYSVRfU1VDQ0VTUworCisjIE1ha2Ugc3VyZSBJRlMgaGFzIGEgc2Vuc2libGUgZGVmYXVsdAorbHRfbmw9JworJworSUZTPSIgCSRsdF9ubCIKKworZGlybmFtZT0icywvW14vXSokLCwiCitiYXNlbmFtZT0icyxeLiovLCwiCisKKyMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKyMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKyMgY2FsbDoKKyMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCisjICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKKyMgICAgICAgICAgICAgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisjICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KKyMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCisjIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCisjIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKK3sKKyAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKyAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICIkZGlybmFtZSJgCisgIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCisgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKyAgZWxzZQorICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKyAgZmkKKyAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJGJhc2VuYW1lImAKK30KKworIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUuCisKKyMgV29yayBhcm91bmQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpc3N1ZSBvbiBJUklYIDYuNS4gT24gSVJJWCA2LjQrLCBzaAorIyBpcyBrc2ggYnV0IHdoZW4gdGhlIHNoZWxsIGlzIGludm9rZWQgYXMgInNoIiBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgb2YKKyMgdGhlIF9YUEcgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IGVxdWFsIHRvIDEgKG9uZSksIHRoZSBzcGVjaWFsCisjIHBvc2l0aW9uYWwgcGFyYW1ldGVyICQwLCB3aXRoaW4gYSBmdW5jdGlvbiBjYWxsLCBpcyB0aGUgbmFtZSBvZiB0aGUKKyMgZnVuY3Rpb24uCitwcm9ncGF0aD0iJDAiCisKKyMgVGhlIG5hbWUgb2YgdGhpcyBwcm9ncmFtOgorIyBJbiB0aGUgdW5saWtlbHkgZXZlbnQgJHByb2duYW1lIGJlZ2FuIHdpdGggYSAnLScsIGl0IHdvdWxkIHBsYXkgaGF2b2Mgd2l0aAorIyBmdW5jX2VjaG8gKGltYWdpbmUgcHJvZ25hbWU9LW4pLCBzbyB3ZSBwcmVwZW5kIC4vIGluIHRoYXQgY2FzZToKK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRwcm9ncGF0aCIKK3Byb2duYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorY2FzZSAkcHJvZ25hbWUgaW4KKyAgLSopIHByb2duYW1lPS4vJHByb2duYW1lIDs7Citlc2FjCisKKyMgTWFrZSBzdXJlIHdlIGhhdmUgYW4gYWJzb2x1dGUgcGF0aCBmb3IgcmVleGVjdXRpb246CitjYXNlICRwcm9ncGF0aCBpbgorICBbXFwvXSp8W0EtWmEtel06XFwqKSA7OworICAqW1xcL10qKQorICAgICBwcm9nZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisgICAgIHByb2dkaXI9YGNkICIkcHJvZ2RpciIgJiYgcHdkYAorICAgICBwcm9ncGF0aD0iJHByb2dkaXIvJHByb2duYW1lIgorICAgICA7OworICAqKQorICAgICBzYXZlX0lGUz0iJElGUyIKKyAgICAgSUZTPToKKyAgICAgZm9yIHByb2dkaXIgaW4gJFBBVEg7IGRvCisgICAgICAgSUZTPSIkc2F2ZV9JRlMiCisgICAgICAgdGVzdCAteCAiJHByb2dkaXIvJHByb2duYW1lIiAmJiBicmVhaworICAgICBkb25lCisgICAgIElGUz0iJHNhdmVfSUZTIgorICAgICB0ZXN0IC1uICIkcHJvZ2RpciIgfHwgcHJvZ2Rpcj1gcHdkYAorICAgICBwcm9ncGF0aD0iJHByb2dkaXIvJHByb2duYW1lIgorICAgICA7OworZXNhYworCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCisjIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorWHNlZD0iJHtTRUR9IicgLWUgMXMvXlgvLycKK3NlZF9xdW90ZV9zdWJzdD0ncy9cKFtgIiRcXF1cKS9cXFwxL2cnCisKKyMgU2FtZSBhcyBhYm92ZSwgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgorZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woWyJgXFxdXCkvXFxcMS9nJworCisjIFJlLWBcJyBwYXJhbWV0ZXIgZXhwYW5zaW9ucyBpbiBvdXRwdXQgb2YgZG91YmxlX3F1b3RlX3N1YnN0IHRoYXQgd2VyZQorIyBgXCctZWQgaW4gaW5wdXQgdG8gdGhlIHNhbWUuICBJZiBhbiBvZGQgbnVtYmVyIG9mIGBcJyBwcmVjZWRlZCBhICckJworIyBpbiBpbnB1dCB0byBkb3VibGVfcXVvdGVfc3Vic3QsIHRoYXQgJyQnIHdhcyBwcm90ZWN0ZWQgZnJvbSBleHBhbnNpb24uCisjIFNpbmNlIGVhY2ggaW5wdXQgYFwnIGlzIG5vdyB0d28gYFwncywgbG9vayBmb3IgYW55IG51bWJlciBvZiBydW5zIG9mCisjIGZvdXIgYFwncyBmb2xsb3dlZCBieSB0d28gYFwncyBhbmQgdGhlbiBhICckJy4gIGBcJyB0aGF0ICckJy4KK2JzPSdcXCcKK2JzMj0nXFxcXCcKK2JzND0nXFxcXFxcXFwnCitkb2xsYXI9J1wkJworc2VkX2RvdWJsZV9iYWNrc2xhc2g9IlwKKyAgcy8kYnM0LyZcXAorL2cKKyAgcy9eJGJzMiRkb2xsYXIvJGJzJi8KKyAgcy9cXChbXiRic11cXCkkYnMyJGRvbGxhci9cXDEkYnMyJGJzJGRvbGxhci9nCisgIHMvXG4vL2ciCisKKyMgU3RhbmRhcmQgb3B0aW9uczoKK29wdF9kcnlfcnVuPWZhbHNlCitvcHRfaGVscD1mYWxzZQorb3B0X3F1aWV0PWZhbHNlCitvcHRfdmVyYm9zZT1mYWxzZQorb3B0X3dhcm5pbmc9OgorCisjIGZ1bmNfZWNobyBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSwgYWxvbmcgd2l0aCB0aGUgY3VycmVudCBtb2RlCisjIG5hbWUgaWYgaXQgaGFzIGJlZW4gc2V0IHlldC4KK2Z1bmNfZWNobyAoKQoreworICAgICRFQ0hPICIkcHJvZ25hbWUke21vZGUrOiB9JG1vZGU6ICQqIgorfQorCisjIGZ1bmNfdmVyYm9zZSBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSBpbiB2ZXJib3NlIG1vZGUgb25seS4KK2Z1bmNfdmVyYm9zZSAoKQoreworICAgICRvcHRfdmVyYm9zZSAmJiBmdW5jX2VjaG8gJHsxKyIkQCJ9CisKKyAgICAjIEEgYnVnIGluIGJhc2ggaGFsdHMgdGhlIHNjcmlwdCBpZiB0aGUgbGFzdCBsaW5lIG9mIGEgZnVuY3Rpb24KKyAgICAjIGZhaWxzIHdoZW4gc2V0IC1lIGlzIGluIGZvcmNlLCBzbyB3ZSBuZWVkIGFub3RoZXIgY29tbWFuZCB0bworICAgICMgd29yayBhcm91bmQgdGhhdDoKKyAgICA6Cit9CisKKyMgZnVuY19lcnJvciBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvci4KK2Z1bmNfZXJyb3IgKCkKK3sKKyAgICAkRUNITyAiJHByb2duYW1lJHttb2RlKzogfSRtb2RlOiAiJHsxKyIkQCJ9IDE+JjIKK30KKworIyBmdW5jX3dhcm5pbmcgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIHdhcm5pbmcgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvci4KK2Z1bmNfd2FybmluZyAoKQoreworICAgICRvcHRfd2FybmluZyAmJiAkRUNITyAiJHByb2duYW1lJHttb2RlKzogfSRtb2RlOiB3YXJuaW5nOiAiJHsxKyIkQCJ9IDE+JjIKKworICAgICMgYmFzaCBidWcgYWdhaW46CisgICAgOgorfQorCisjIGZ1bmNfZmF0YWxfZXJyb3IgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGFuZCBleGl0LgorZnVuY19mYXRhbF9lcnJvciAoKQoreworICAgIGZ1bmNfZXJyb3IgJHsxKyIkQCJ9CisgICAgZXhpdCAkRVhJVF9GQUlMVVJFCit9CisKKyMgZnVuY19mYXRhbF9oZWxwIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBmb2xsb3dlZCBieQorIyBhIGhlbHAgaGludCwgYW5kIGV4aXQuCitmdW5jX2ZhdGFsX2hlbHAgKCkKK3sKKyAgICBmdW5jX2Vycm9yICR7MSsiJEAifQorICAgIGZ1bmNfZmF0YWxfZXJyb3IgIiRoZWxwIgorfQoraGVscD0iVHJ5IFxgJHByb2duYW1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAgIyMgZGVmYXVsdAorCisKKyMgZnVuY19ncmVwIGV4cHJlc3Npb24gZmlsZW5hbWUKKyMgQ2hlY2sgd2hldGhlciBFWFBSRVNTSU9OIG1hdGNoZXMgYW55IGxpbmUgb2YgRklMRU5BTUUsIHdpdGhvdXQgb3V0cHV0LgorZnVuY19ncmVwICgpCit7CisgICAgJEdSRVAgIiQxIiAiJDIiID4vZGV2L251bGwgMj4mMQorfQorCisKKyMgZnVuY19ta2Rpcl9wIGRpcmVjdG9yeS1wYXRoCisjIE1ha2Ugc3VyZSB0aGUgZW50aXJlIHBhdGggdG8gRElSRUNUT1JZLVBBVEggaXMgYXZhaWxhYmxlLgorZnVuY19ta2Rpcl9wICgpCit7CisgICAgbXlfZGlyZWN0b3J5X3BhdGg9IiQxIgorICAgIG15X2Rpcl9saXN0PQorCisgICAgaWYgdGVzdCAtbiAiJG15X2RpcmVjdG9yeV9wYXRoIiAmJiB0ZXN0ICIkb3B0X2RyeV9ydW4iICE9ICI6IjsgdGhlbgorCisgICAgICAjIFByb3RlY3QgZGlyZWN0b3J5IG5hbWVzIHN0YXJ0aW5nIHdpdGggYC0nCisgICAgICBjYXNlICRteV9kaXJlY3RvcnlfcGF0aCBpbgorICAgICAgICAtKikgbXlfZGlyZWN0b3J5X3BhdGg9Ii4vJG15X2RpcmVjdG9yeV9wYXRoIiA7OworICAgICAgZXNhYworCisgICAgICAjIFdoaWxlIHNvbWUgcG9ydGlvbiBvZiBESVIgZG9lcyBub3QgeWV0IGV4aXN0Li4uCisgICAgICB3aGlsZSB0ZXN0ICEgLWQgIiRteV9kaXJlY3RvcnlfcGF0aCI7IGRvCisgICAgICAgICMgLi4ubWFrZSBhIGxpc3QgaW4gdG9wbW9zdCBmaXJzdCBvcmRlci4gIFVzZSBhIGNvbG9uIGRlbGltaXRlZAorCSMgbGlzdCBpbmNhc2Ugc29tZSBwb3J0aW9uIG9mIHBhdGggY29udGFpbnMgd2hpdGVzcGFjZS4KKyAgICAgICAgbXlfZGlyX2xpc3Q9IiRteV9kaXJlY3RvcnlfcGF0aDokbXlfZGlyX2xpc3QiCisKKyAgICAgICAgIyBJZiB0aGUgbGFzdCBwb3J0aW9uIGFkZGVkIGhhcyBubyBzbGFzaCBpbiBpdCwgdGhlIGxpc3QgaXMgZG9uZQorICAgICAgICBjYXNlICRteV9kaXJlY3RvcnlfcGF0aCBpbiAqLyopIDs7ICopIGJyZWFrIDs7IGVzYWMKKworICAgICAgICAjIC4uLm90aGVyd2lzZSB0aHJvdyBhd2F5IHRoZSBjaGlsZCBkaXJlY3RvcnkgYW5kIGxvb3AKKyAgICAgICAgbXlfZGlyZWN0b3J5X3BhdGg9YCRFQ0hPICJYJG15X2RpcmVjdG9yeV9wYXRoIiB8ICRYc2VkIC1lICIkZGlybmFtZSJgCisgICAgICBkb25lCisgICAgICBteV9kaXJfbGlzdD1gJEVDSE8gIlgkbXlfZGlyX2xpc3QiIHwgJFhzZWQgLWUgJ3MsOiokLCwnYAorCisgICAgICBzYXZlX21rZGlyX3BfSUZTPSIkSUZTIjsgSUZTPSc6JworICAgICAgZm9yIG15X2RpciBpbiAkbXlfZGlyX2xpc3Q7IGRvCisJSUZTPSIkc2F2ZV9ta2Rpcl9wX0lGUyIKKyAgICAgICAgIyBta2RpciBjYW4gZmFpbCB3aXRoIGEgYEZpbGUgZXhpc3QnIGVycm9yIGlmIHR3byBwcm9jZXNzZXMKKyAgICAgICAgIyB0cnkgdG8gY3JlYXRlIG9uZSBvZiB0aGUgZGlyZWN0b3JpZXMgY29uY3VycmVudGx5LiAgRG9uJ3QKKyAgICAgICAgIyBzdG9wIGluIHRoYXQgY2FzZSEKKyAgICAgICAgJE1LRElSICIkbXlfZGlyIiAyPi9kZXYvbnVsbCB8fCA6CisgICAgICBkb25lCisgICAgICBJRlM9IiRzYXZlX21rZGlyX3BfSUZTIgorCisgICAgICAjIEJhaWwgb3V0IGlmIHdlIChvciBzb21lIG90aGVyIHByb2Nlc3MpIGZhaWxlZCB0byBjcmVhdGUgYSBkaXJlY3RvcnkuCisgICAgICB0ZXN0IC1kICIkbXlfZGlyZWN0b3J5X3BhdGgiIHx8IFwKKyAgICAgICAgZnVuY19mYXRhbF9lcnJvciAiRmFpbGVkIHRvIGNyZWF0ZSBcYCQxJyIKKyAgICBmaQorfQorCisKKyMgZnVuY19ta3RlbXBkaXIgW3N0cmluZ10KKyMgTWFrZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdGhhdCB3b24ndCBjbGFzaCB3aXRoIG90aGVyIHJ1bm5pbmcKKyMgbGlidG9vbCBwcm9jZXNzZXMsIGFuZCBhdm9pZHMgcmFjZSBjb25kaXRpb25zIGlmIHBvc3NpYmxlLiAgSWYKKyMgZ2l2ZW4sIFNUUklORyBpcyB0aGUgYmFzZW5hbWUgZm9yIHRoYXQgZGlyZWN0b3J5LgorZnVuY19ta3RlbXBkaXIgKCkKK3sKKyAgICBteV90ZW1wbGF0ZT0iJHtUTVBESVItL3RtcH0vJHsxLSRwcm9nbmFtZX0iCisKKyAgICBpZiB0ZXN0ICIkb3B0X2RyeV9ydW4iID0gIjoiOyB0aGVuCisgICAgICAjIFJldHVybiBhIGRpcmVjdG9yeSBuYW1lLCBidXQgZG9uJ3QgY3JlYXRlIGl0IGluIGRyeS1ydW4gbW9kZQorICAgICAgbXlfdG1wZGlyPSIke215X3RlbXBsYXRlfS0kJCIKKyAgICBlbHNlCisKKyAgICAgICMgSWYgbWt0ZW1wIHdvcmtzLCB1c2UgdGhhdCBmaXJzdCBhbmQgZm9yZW1vc3QKKyAgICAgIG15X3RtcGRpcj1gbWt0ZW1wIC1kICIke215X3RlbXBsYXRlfS1YWFhYWFhYWCIgMj4vZGV2L251bGxgCisKKyAgICAgIGlmIHRlc3QgISAtZCAiJG15X3RtcGRpciI7IHRoZW4KKyAgICAgICAgIyBGYWlsaW5nIHRoYXQsIGF0IGxlYXN0IHRyeSBhbmQgdXNlICRSQU5ET00gdG8gYXZvaWQgYSByYWNlCisgICAgICAgIG15X3RtcGRpcj0iJHtteV90ZW1wbGF0ZX0tJHtSQU5ET00tMH0kJCIKKworICAgICAgICBzYXZlX21rdGVtcGRpcl91bWFzaz1gdW1hc2tgCisgICAgICAgIHVtYXNrIDAwNzcKKyAgICAgICAgJE1LRElSICIkbXlfdG1wZGlyIgorICAgICAgICB1bWFzayAkc2F2ZV9ta3RlbXBkaXJfdW1hc2sKKyAgICAgIGZpCisKKyAgICAgICMgSWYgd2UncmUgbm90IGluIGRyeS1ydW4gbW9kZSwgYm9tYiBvdXQgb24gZmFpbHVyZQorICAgICAgdGVzdCAtZCAiJG15X3RtcGRpciIgfHwgXAorICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgY3JlYXRlIHRlbXBvcmFyeSBkaXJlY3RvcnkgXGAkbXlfdG1wZGlyJyIKKyAgICBmaQorCisgICAgJEVDSE8gIlgkbXlfdG1wZGlyIiB8ICRYc2VkCit9CisKKworIyBmdW5jX3F1b3RlX2Zvcl9ldmFsIGFyZworIyBBZXN0aGV0aWNhbGx5IHF1b3RlIEFSRyB0byBiZSBldmFsZWQgbGF0ZXIuCisjIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0d28gdmFsdWVzOiBGVU5DX1FVT1RFX0ZPUl9FVkFMX1JFU1VMVAorIyBpcyBkb3VibGUtcXVvdGVkLCBzdWl0YWJsZSBmb3IgYSBzdWJzZXF1ZW50IGV2YWwsIHdoZXJlYXMKKyMgRlVOQ19RVU9URV9GT1JfRVZBTF9VTlFVT1RFRF9SRVNVTFQgaGFzIG1lcmVseSBhbGwgY2hhcmFjdGVycworIyB3aGljaCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUgcXVvdGVzIGJhY2tzbGFzaGlmaWVkLgorZnVuY19xdW90ZV9mb3JfZXZhbCAoKQoreworICAgIGNhc2UgJDEgaW4KKyAgICAgICpbXFxcYFwiXCRdKikKKwlmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdD1gJEVDSE8gIlgkMSIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgIDs7CisgICAgICAqKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdD0iJDEiIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQgaW4KKyAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhY2hhcmFjdGVycyB0byBkZWxheQorICAgICAgIyB3b3JkIHNwbGl0dGluZywgY29tbWFuZCBzdWJzdGl0dXRpb24gYW5kIGFuZCB2YXJpYWJsZQorICAgICAgIyBleHBhbnNpb24gZm9yIGEgc3Vic2VxdWVudCBldmFsLgorICAgICAgIyBNYW55IEJvdXJuZSBzaGVsbHMgY2Fubm90IGhhbmRsZSBjbG9zZSBicmFja2V0cyBjb3JyZWN0bHkKKyAgICAgICMgaW4gc2NhbiBzZXRzLCBzbyB3ZSBzcGVjaWZ5IGl0IHNlcGFyYXRlbHkuCisgICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQ9IlwiJGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0XCIiCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdD0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0IgorICAgIGVzYWMKK30KKworCisjIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCBhcmcKKyMgQWVzdGhldGljYWxseSBxdW90ZSBBUkcgdG8gYmUgZXZhbGVkIGxhdGVyOyBzYW1lIGFzIGFib3ZlLAorIyBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitmdW5jX3F1b3RlX2Zvcl9leHBhbmQgKCkKK3sKKyAgICBjYXNlICQxIGluCisgICAgICAqW1xcXGBcIl0qKQorCW15X2FyZz1gJEVDSE8gIlgkMSIgfCAkWHNlZCBcCisJICAgIC1lICIkZG91YmxlX3F1b3RlX3N1YnN0IiAtZSAiJHNlZF9kb3VibGVfYmFja3NsYXNoImAgOzsKKyAgICAgICopCisgICAgICAgIG15X2FyZz0iJDEiIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkbXlfYXJnIGluCisgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YWNoYXJhY3RlcnMgdG8gZGVsYXkKKyAgICAgICMgd29yZCBzcGxpdHRpbmcgYW5kIGNvbW1hbmQgc3Vic3RpdHV0aW9uIGZvciBhIHN1YnNlcXVlbnQgZXZhbC4KKyAgICAgICMgTWFueSBCb3VybmUgc2hlbGxzIGNhbm5vdCBoYW5kbGUgY2xvc2UgYnJhY2tldHMgY29ycmVjdGx5CisgICAgICAjIGluIHNjYW4gc2V0cywgc28gd2Ugc3BlY2lmeSBpdCBzZXBhcmF0ZWx5LgorICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisgICAgICAgIG15X2FyZz0iXCIkbXlfYXJnXCIiCisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdD0iJG15X2FyZyIKK30KKworCisjIGZ1bmNfc2hvd19ldmFsIGNtZCBbZmFpbF9leHBdCisjIFVubGVzcyBvcHRfc2lsZW50IGlzIHRydWUsIHRoZW4gb3V0cHV0IENNRC4gIFRoZW4sIGlmIG9wdF9kcnlydW4gaXMKKyMgbm90IHRydWUsIGV2YWx1YXRlIENNRC4gIElmIHRoZSBldmFsdWF0aW9uIG9mIENNRCBmYWlscywgYW5kIEZBSUxfRVhQCisjIGlzIGdpdmVuLCB0aGVuIGV2YWx1YXRlIGl0LgorZnVuY19zaG93X2V2YWwgKCkKK3sKKyAgICBteV9jbWQ9IiQxIgorICAgIG15X2ZhaWxfZXhwPSIkezItOn0iCisKKyAgICAke29wdF9zaWxlbnQtZmFsc2V9IHx8IHsKKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJG15X2NtZCIKKyAgICAgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKyAgICB9CisKKyAgICBpZiAke29wdF9kcnlfcnVuLWZhbHNlfTsgdGhlbiA6OyBlbHNlCisgICAgICBldmFsICIkbXlfY21kIgorICAgICAgbXlfc3RhdHVzPSQ/CisgICAgICBpZiB0ZXN0ICIkbXlfc3RhdHVzIiAtZXEgMDsgdGhlbiA6OyBlbHNlCisJZXZhbCAiKGV4aXQgJG15X3N0YXR1cyk7ICRteV9mYWlsX2V4cCIKKyAgICAgIGZpCisgICAgZmkKK30KKworCisjIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSBjbWQgW2ZhaWxfZXhwXQorIyBVbmxlc3Mgb3B0X3NpbGVudCBpcyB0cnVlLCB0aGVuIG91dHB1dCBDTUQuICBUaGVuLCBpZiBvcHRfZHJ5cnVuIGlzCisjIG5vdCB0cnVlLCBldmFsdWF0ZSBDTUQuICBJZiB0aGUgZXZhbHVhdGlvbiBvZiBDTUQgZmFpbHMsIGFuZCBGQUlMX0VYUAorIyBpcyBnaXZlbiwgdGhlbiBldmFsdWF0ZSBpdC4gIFVzZSB0aGUgc2F2ZWQgbG9jYWxlIGZvciBldmFsdWF0aW9uLgorZnVuY19zaG93X2V2YWxfbG9jYWxlICgpCit7CisgICAgbXlfY21kPSIkMSIKKyAgICBteV9mYWlsX2V4cD0iJHsyLTp9IgorCisgICAgJHtvcHRfc2lsZW50LWZhbHNlfSB8fCB7CisgICAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRteV9jbWQiCisgICAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisgICAgfQorCisgICAgaWYgJHtvcHRfZHJ5X3J1bi1mYWxzZX07IHRoZW4gOjsgZWxzZQorICAgICAgZXZhbCAiJGx0X3VzZXJfbG9jYWxlCisJICAgICRteV9jbWQiCisgICAgICBteV9zdGF0dXM9JD8KKyAgICAgIGV2YWwgIiRsdF9zYWZlX2xvY2FsZSIKKyAgICAgIGlmIHRlc3QgIiRteV9zdGF0dXMiIC1lcSAwOyB0aGVuIDo7IGVsc2UKKwlldmFsICIoZXhpdCAkbXlfc3RhdHVzKTsgJG15X2ZhaWxfZXhwIgorICAgICAgZmkKKyAgICBmaQorfQorCisKKworCisKKyMgZnVuY192ZXJzaW9uCisjIEVjaG8gdmVyc2lvbiBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KK2Z1bmNfdmVyc2lvbiAoKQoreworICAgICRTRUQgLW4gJy9eIyAnJFBST0dSQU0nIChHTlUgLywvIyB3YXJyYW50eTsgLyB7CisgICAgICAgIHMvXiMgLy8KKwlzL14jICokLy8KKyAgICAgICAgcy9cKChDKVwpWyAwLTksLV0qXCggWzEtOV1bMC05XSpcKS9cMVwyLworICAgICAgICBwCisgICAgIH0nIDwgIiRwcm9ncGF0aCIKKyAgICAgZXhpdCAkPworfQorCisjIGZ1bmNfdXNhZ2UKKyMgRWNobyBzaG9ydCBoZWxwIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorZnVuY191c2FnZSAoKQoreworICAgICRTRUQgLW4gJy9eIyBVc2FnZTovLC8jIC1oLyB7CisgICAgICAgIHMvXiMgLy8KKwlzL14jICokLy8KKwlzL1wkcHJvZ25hbWUvJyRwcm9nbmFtZScvCisJcAorICAgIH0nIDwgIiRwcm9ncGF0aCIKKyAgICAkRUNITworICAgICRFQ0hPICJydW4gXGAkcHJvZ25hbWUgLS1oZWxwIHwgbW9yZScgZm9yIGZ1bGwgdXNhZ2UiCisgICAgZXhpdCAkPworfQorCisjIGZ1bmNfaGVscAorIyBFY2hvIGxvbmcgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KK2Z1bmNfaGVscCAoKQoreworICAgICRTRUQgLW4gJy9eIyBVc2FnZTovLC8jIFJlcG9ydCBidWdzIHRvLyB7CisgICAgICAgIHMvXiMgLy8KKwlzL14jICokLy8KKwlzKlwkcHJvZ25hbWUqJyRwcm9nbmFtZScqCisJcypcJGhvc3QqJyIkaG9zdCInKgorCXMqXCRTSEVMTConIiRTSEVMTCInKgorCXMqXCRMVENDKiciJExUQ0MiJyoKKwlzKlwkTFRDRkxBR1MqJyIkTFRDRkxBR1MiJyoKKwlzKlwkTEQqJyIkTEQiJyoKKwlzL1wkd2l0aF9nbnVfbGQvJyIkd2l0aF9nbnVfbGQiJy8KKwlzL1wkYXV0b21ha2VfdmVyc2lvbi8nImAoYXV0b21ha2UgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAiJy8KKwlzL1wkYXV0b2NvbmZfdmVyc2lvbi8nImAoYXV0b2NvbmYgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAiJy8KKwlwCisgICAgIH0nIDwgIiRwcm9ncGF0aCIKKyAgICBleGl0ICQ/Cit9CisKKyMgZnVuY19taXNzaW5nX2FyZyBhcmduYW1lCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IgYW5kIHNldCBnbG9iYWwKKyMgZXhpdF9jbWQuCitmdW5jX21pc3NpbmdfYXJnICgpCit7CisgICAgZnVuY19lcnJvciAibWlzc2luZyBhcmd1bWVudCBmb3IgJDEiCisgICAgZXhpdF9jbWQ9ZXhpdAorfQorCitleGl0X2NtZD06CisKKworCisKKworIyBDaGVjayB0aGF0IHdlIGhhdmUgYSB3b3JraW5nICRFQ0hPLgoraWYgdGVzdCAiWCQxIiA9IFgtLW5vLXJlZXhlYzsgdGhlbgorICAjIERpc2NhcmQgdGhlIC0tbm8tcmVleGVjIGZsYWcsIGFuZCBjb250aW51ZS4KKyAgc2hpZnQKK2VsaWYgdGVzdCAiWCQxIiA9IFgtLWZhbGxiYWNrLWVjaG87IHRoZW4KKyAgIyBBdm9pZCBpbmxpbmUgZG9jdW1lbnQgaGVyZSwgaXQgbWF5IGJlIGxlZnQgb3ZlcgorICA6CitlbGlmIHRlc3QgIlhgeyAkRUNITyAnXHQnOyB9IDI+L2Rldi9udWxsYCIgPSAnWFx0JzsgdGhlbgorICAjIFlpcHBlZSwgJEVDSE8gd29ya3MhCisgIDoKK2Vsc2UKKyAgIyBSZXN0YXJ0IHVuZGVyIHRoZSBjb3JyZWN0IHNoZWxsLCBhbmQgdGhlbiBtYXliZSAkRUNITyB3aWxsIHdvcmsuCisgIGV4ZWMgJFNIRUxMICIkcHJvZ3BhdGgiIC0tbm8tcmVleGVjICR7MSsiJEAifQorZmkKKworaWYgdGVzdCAiWCQxIiA9IFgtLWZhbGxiYWNrLWVjaG87IHRoZW4KKyAgIyB1c2VkIGFzIGZhbGxiYWNrIGVjaG8KKyAgc2hpZnQKKyAgY2F0IDw8RU9GCiskKgorRU9GCisgIGV4aXQgJEVYSVRfU1VDQ0VTUworZmkKKworbWFnaWM9IiUlJU1BR0lDIHZhcmlhYmxlJSUlIgorbWFnaWNfZXhlPSIlJSVNQUdJQyBFWEUgdmFyaWFibGUlJSUiCisKKyMgR2xvYmFsIHZhcmlhYmxlcy4KKyMgJG1vZGUgaXMgdW5zZXQKK25vbm9wdD0KK2V4ZWN1dGVfZGxmaWxlcz0KK3ByZXNlcnZlX2FyZ3M9CitsbzJvPSJzL1xcLmxvXCQvLiR7b2JqZXh0fS8iCitvMmxvPSJzL1xcLiR7b2JqZXh0fVwkLy5sby8iCitleHRyYWN0ZWRfYXJjaGl2ZXM9CitleHRyYWN0ZWRfc2VyaWFsPTAKKworb3B0X2RyeV9ydW49ZmFsc2UKK29wdF9kdXBsaWNhdGVfZGVwcz1mYWxzZQorb3B0X3NpbGVudD1mYWxzZQorb3B0X2RlYnVnPToKKworIyBJZiB0aGlzIHZhcmlhYmxlIGlzIHNldCBpbiBhbnkgb2YgdGhlIGFjdGlvbnMsIHRoZSBjb21tYW5kIGluIGl0CisjIHdpbGwgYmUgZXhlY2VkIGF0IHRoZSBlbmQuICBUaGlzIHByZXZlbnRzIGhlcmUtZG9jdW1lbnRzIGZyb20gYmVpbmcKKyMgbGVmdCBvdmVyIGJ5IHNoZWxscy4KK2V4ZWNfY21kPQorCisjIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgZm9sbG93ZWQgYnkKKyMgYSBjb25maWd1cmF0aW9uIGZhaWx1cmUgaGludCwgYW5kIGV4aXQuCitmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gKCkKK3sKKyAgICBmdW5jX2Vycm9yICR7MSsiJEAifQorICAgIGZ1bmNfZXJyb3IgIlNlZSB0aGUgJFBBQ0tBR0UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisgICAgZnVuY19mYXRhbF9lcnJvciAiRmF0YWwgY29uZmlndXJhdGlvbiBlcnJvci4iCit9CisKKworIyBmdW5jX2NvbmZpZworIyBEaXNwbGF5IHRoZSBjb25maWd1cmF0aW9uIGZvciBhbGwgdGhlIHRhZ3MgaW4gdGhpcyBzY3JpcHQuCitmdW5jX2NvbmZpZyAoKQoreworICAgIHJlX2JlZ2luY2Y9J14jICMjIyBCRUdJTiBMSUJUT09MJworICAgIHJlX2VuZGNmPSdeIyAjIyMgRU5EIExJQlRPT0wnCisKKyAgICAjIERlZmF1bHQgY29uZmlndXJhdGlvbi4KKyAgICAkU0VEICIxLC8kcmVfYmVnaW5jZiBDT05GSUcvZDsvJHJlX2VuZGNmIENPTkZJRy8sXCRkIiA8ICIkcHJvZ3BhdGgiCisKKyAgICAjIE5vdyBwcmludCB0aGUgY29uZmlndXJhdGlvbnMgZm9yIHRoZSB0YWdzLgorICAgIGZvciB0YWduYW1lIGluICR0YWdsaXN0OyBkbworICAgICAgJFNFRCAtbiAiLyRyZV9iZWdpbmNmIFRBRyBDT05GSUc6ICR0YWduYW1lXCQvLC8kcmVfZW5kY2YgVEFHIENPTkZJRzogJHRhZ25hbWVcJC9wIiA8ICIkcHJvZ3BhdGgiCisgICAgZG9uZQorCisgICAgZXhpdCAkPworfQorCisjIGZ1bmNfZmVhdHVyZXMKKyMgRGlzcGxheSB0aGUgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0LgorZnVuY19mZWF0dXJlcyAoKQoreworICAgICRFQ0hPICJob3N0OiAkaG9zdCIKKyAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorICAgICAgJEVDSE8gImVuYWJsZSBzaGFyZWQgbGlicmFyaWVzIgorICAgIGVsc2UKKyAgICAgICRFQ0hPICJkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMiCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisgICAgICAkRUNITyAiZW5hYmxlIHN0YXRpYyBsaWJyYXJpZXMiCisgICAgZWxzZQorICAgICAgJEVDSE8gImRpc2FibGUgc3RhdGljIGxpYnJhcmllcyIKKyAgICBmaQorCisgICAgZXhpdCAkPworfQorCisjIGZ1bmNfZW5hYmxlX3RhZyB0YWduYW1lCisjIFZlcmlmeSB0aGF0IFRBR05BTUUgaXMgdmFsaWQsIGFuZCBlaXRoZXIgZmxhZyBhbiBlcnJvciBhbmQgZXhpdCwgb3IKKyMgZW5hYmxlIHRoZSBUQUdOQU1FIHRhZy4gIFdlIGFsc28gYWRkIFRBR05BTUUgdG8gdGhlIGdsb2JhbCAkdGFnbGlzdAorIyB2YXJpYWJsZSBoZXJlLgorZnVuY19lbmFibGVfdGFnICgpCit7CisgICMgR2xvYmFsIHZhcmlhYmxlOgorICB0YWduYW1lPSIkMSIKKworICByZV9iZWdpbmNmPSJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZVwkIgorICByZV9lbmRjZj0iXiMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lXCQiCisgIHNlZF9leHRyYWN0Y2Y9Ii8kcmVfYmVnaW5jZi8sLyRyZV9lbmRjZi9wIgorCisgICMgVmFsaWRhdGUgdGFnbmFtZS4KKyAgY2FzZSAkdGFnbmFtZSBpbgorICAgICpbIS1fQS1aYS16MC05LC9dKikKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImludmFsaWQgdGFnIG5hbWU6ICR0YWduYW1lIgorICAgICAgOzsKKyAgZXNhYworCisgICMgRG9uJ3QgdGVzdCBmb3IgdGhlICJkZWZhdWx0IiBDIHRhZywgYXMgd2Uga25vdyBpdCdzCisgICMgdGhlcmUgYnV0IG5vdCBzcGVjaWFsbHkgbWFya2VkLgorICBjYXNlICR0YWduYW1lIGluCisgICAgQ0MpIDs7CisgICAgKikKKyAgICAgIGlmICRHUkVQICIkcmVfYmVnaW5jZiIgIiRwcm9ncGF0aCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJdGFnbGlzdD0iJHRhZ2xpc3QgJHRhZ25hbWUiCisKKwkjIEV2YWx1YXRlIHRoZSBjb25maWd1cmF0aW9uLiAgQmUgY2FyZWZ1bCB0byBxdW90ZSB0aGUgcGF0aAorCSMgYW5kIHRoZSBzZWQgc2NyaXB0LCB0byBhdm9pZCBzcGxpdHRpbmcgb24gd2hpdGVzcGFjZSwgYnV0CisJIyBhbHNvIGRvbid0IHVzZSBub24tcG9ydGFibGUgcXVvdGVzIHdpdGhpbiBiYWNrcXVvdGVzIHdpdGhpbgorCSMgcXVvdGVzIHdlIGhhdmUgdG8gZG8gaXQgaW4gMiBzdGVwczoKKwlleHRyYWN0ZWRjZj1gJFNFRCAtbiAtZSAiJHNlZF9leHRyYWN0Y2YiIDwgIiRwcm9ncGF0aCJgCisJZXZhbCAiJGV4dHJhY3RlZGNmIgorICAgICAgZWxzZQorCWZ1bmNfZXJyb3IgImlnbm9yaW5nIHVua25vd24gdGFnICR0YWduYW1lIgorICAgICAgZmkKKyAgICAgIDs7CisgIGVzYWMKK30KKworIyBQYXJzZSBvcHRpb25zIG9uY2UsIHRob3JvdWdobHkuICBUaGlzIGNvbWVzIGFzIHNvb24gYXMgcG9zc2libGUgaW4KKyMgdGhlIHNjcmlwdCB0byBtYWtlIHRoaW5ncyBsaWtlIGBsaWJ0b29sIC0tdmVyc2lvbicgaGFwcGVuIHF1aWNrbHkuCit7CisKKyAgIyBTaG9ydGhhbmQgZm9yIC0tbW9kZT1mb28sIG9ubHkgdmFsaWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50CisgIGNhc2UgJDEgaW4KKyAgY2xlYW58Y2xlYXxjbGV8Y2wpCisgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY2xlYW4gJHsxKyIkQCJ9OyBzaGlmdAorICAgIDs7CisgIGNvbXBpbGV8Y29tcGlsfGNvbXBpfGNvbXB8Y29tfGNvfGMpCisgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY29tcGlsZSAkezErIiRAIn07IHNoaWZ0CisgICAgOzsKKyAgZXhlY3V0ZXxleGVjdXR8ZXhlY3V8ZXhlY3xleGV8ZXh8ZSkKKyAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBleGVjdXRlICR7MSsiJEAifTsgc2hpZnQKKyAgICA7OworICBmaW5pc2h8ZmluaXN8ZmluaXxmaW58Zml8ZikKKyAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdAorICAgIDs7CisgIGluc3RhbGx8aW5zdGFsfGluc3RhfGluc3R8aW5zfGlufGkpCisgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0CisgICAgOzsKKyAgbGlua3xsaW58bGl8bCkKKyAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBsaW5rICR7MSsiJEAifTsgc2hpZnQKKyAgICA7OworICB1bmluc3RhbGx8dW5pbnN0YWx8dW5pbnN0YXx1bmluc3R8dW5pbnN8dW5pbnx1bml8dW58dSkKKyAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSB1bmluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorICAgIDs7CisgIGVzYWMKKworICAjIFBhcnNlIG5vbi1tb2RlIHNwZWNpZmljIGFyZ3VtZW50czoKKyAgd2hpbGUgdGVzdCAiJCMiIC1ndCAwOyBkbworICAgIG9wdD0iJDEiCisgICAgc2hpZnQKKworICAgIGNhc2UgJG9wdCBpbgorICAgICAgLS1jb25maWcpCQlmdW5jX2NvbmZpZwkJCQkJOzsKKworICAgICAgLS1kZWJ1ZykJCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQiCisJCQlmdW5jX2VjaG8gImVuYWJsaW5nIHNoZWxsIHRyYWNlIG1vZGUiCisJCQlvcHRfZGVidWc9J3NldCAteCcKKwkJCSRvcHRfZGVidWcKKwkJCTs7CisKKyAgICAgIC1kbG9wZW4pCQl0ZXN0ICIkIyIgLWVxIDAgJiYgZnVuY19taXNzaW5nX2FyZyAiJG9wdCIgJiYgYnJlYWsKKwkJCWV4ZWN1dGVfZGxmaWxlcz0iJGV4ZWN1dGVfZGxmaWxlcyAkMSIKKwkJCXNoaWZ0CisJCQk7OworCisgICAgICAtLWRyeS1ydW4gfCAtbikJb3B0X2RyeV9ydW49OgkJCQkJOzsKKyAgICAgIC0tZmVhdHVyZXMpICAgICAgIGZ1bmNfZmVhdHVyZXMJCQkJCTs7CisgICAgICAtLWZpbmlzaCkJCW1vZGU9ImZpbmlzaCIJCQkJCTs7CisKKyAgICAgIC0tbW9kZSkJCXRlc3QgIiQjIiAtZXEgMCAmJiBmdW5jX21pc3NpbmdfYXJnICIkb3B0IiAmJiBicmVhaworCQkJY2FzZSAkMSBpbgorCQkJICAjIFZhbGlkIG1vZGUgYXJndW1lbnRzOgorCQkJICBjbGVhbikJOzsKKwkJCSAgY29tcGlsZSkJOzsKKwkJCSAgZXhlY3V0ZSkJOzsKKwkJCSAgZmluaXNoKQk7OworCQkJICBpbnN0YWxsKQk7OworCQkJICBsaW5rKQkJOzsKKwkJCSAgcmVsaW5rKQk7OworCQkJICB1bmluc3RhbGwpCTs7CisKKwkJCSAgIyBDYXRjaCBhbnl0aGluZyBlbHNlIGFzIGFuIGVycm9yCisJCQkgICopIGZ1bmNfZXJyb3IgImludmFsaWQgYXJndW1lbnQgZm9yICRvcHQiCisJCQkgICAgIGV4aXRfY21kPWV4aXQKKwkJCSAgICAgYnJlYWsKKwkJCSAgICAgOzsKKwkJICAgICAgICBlc2FjCisKKwkJCW1vZGU9IiQxIgorCQkJc2hpZnQKKwkJCTs7CisKKyAgICAgIC0tcHJlc2VydmUtZHVwLWRlcHMpCisJCQlvcHRfZHVwbGljYXRlX2RlcHM9OgkJCQk7OworCisgICAgICAtLXF1aWV0fC0tc2lsZW50KQlwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkb3B0IgorCQkJb3B0X3NpbGVudD06CisJCQk7OworCisgICAgICAtLXZlcmJvc2V8IC12KQlwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkb3B0IgorCQkJb3B0X3NpbGVudD1mYWxzZQorCQkJOzsKKworICAgICAgLS10YWcpCQl0ZXN0ICIkIyIgLWVxIDAgJiYgZnVuY19taXNzaW5nX2FyZyAiJG9wdCIgJiYgYnJlYWsKKwkJCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQgJDEiCisJCQlmdW5jX2VuYWJsZV90YWcgIiQxIgkjIHRhZ25hbWUgaXMgc2V0IGhlcmUKKwkJCXNoaWZ0CisJCQk7OworCisgICAgICAjIFNlcGFyYXRlIG9wdGFyZ3MgdG8gbG9uZyBvcHRpb25zOgorICAgICAgLWRsb3Blbj0qfC0tbW9kZT0qfC0tdGFnPSopCisJCQlmdW5jX29wdF9zcGxpdCAiJG9wdCIKKwkJCXNldCBkdW1teSAiJGZ1bmNfb3B0X3NwbGl0X29wdCIgIiRmdW5jX29wdF9zcGxpdF9hcmciICR7MSsiJEAifQorCQkJc2hpZnQKKwkJCTs7CisKKyAgICAgIC1cP3wtaCkJCWZ1bmNfdXNhZ2UJCQkJCTs7CisgICAgICAtLWhlbHApCQlvcHRfaGVscD06CQkJCQk7OworICAgICAgLS12ZXJzaW9uKQlmdW5jX3ZlcnNpb24JCQkJCTs7CisKKyAgICAgIC0qKQkJZnVuY19mYXRhbF9oZWxwICJ1bnJlY29nbml6ZWQgb3B0aW9uIFxgJG9wdCciCTs7CisKKyAgICAgICopCQlub25vcHQ9IiRvcHQiCisJCQlicmVhaworCQkJOzsKKyAgICBlc2FjCisgIGRvbmUKKworCisgIGNhc2UgJGhvc3QgaW4KKyAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqcHczMiogfCAqY2VnY2MqKQorICAgICAgIyBkb24ndCBlbGltaW5hdGUgZHVwbGljYXRpb25zIGluICRwb3N0ZGVwcyBhbmQgJHByZWRlcHMKKyAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9OgorICAgICAgOzsKKyAgICAqKQorICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz0kb3B0X2R1cGxpY2F0ZV9kZXBzCisgICAgICA7OworICBlc2FjCisKKyAgIyBIYXZpbmcgd2FybmVkIGFib3V0IGFsbCBtaXMtc3BlY2lmaWVkIG9wdGlvbnMsIGJhaWwgb3V0IGlmCisgICMgYW55dGhpbmcgd2FzIHdyb25nLgorICAkZXhpdF9jbWQgJEVYSVRfRkFJTFVSRQorfQorCisjIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaAorIyBFbnN1cmUgdGhhdCB3ZSBhcmUgdXNpbmcgbTQgbWFjcm9zLCBhbmQgbGlidG9vbCBzY3JpcHQgZnJvbSB0aGUgc2FtZQorIyByZWxlYXNlIG9mIGxpYnRvb2wuCitmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2ggKCkKK3sKKyAgaWYgdGVzdCAiJHBhY2thZ2VfcmV2aXNpb24iICE9ICIkbWFjcm9fcmV2aXNpb24iOyB0aGVuCisgICAgaWYgdGVzdCAiJFZFUlNJT04iICE9ICIkbWFjcm9fdmVyc2lvbiI7IHRoZW4KKyAgICAgIGlmIHRlc3QgLXogIiRtYWNyb192ZXJzaW9uIjsgdGhlbgorICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgYnV0IHRoZQorJHByb2duYW1lOiBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tIGFuIG9sZGVyIHJlbGVhc2UuCiskcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCiskcHJvZ25hbWU6IGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCitfTFRfRU9GCisgICAgICBlbHNlCisgICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCBidXQgdGhlCiskcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gJFBBQ0tBR0UgJG1hY3JvX3ZlcnNpb24uCiskcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCiskcHJvZ25hbWU6IGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCitfTFRfRU9GCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCByZXZpc2lvbiAkcGFja2FnZV9yZXZpc2lvbiwKKyRwcm9nbmFtZTogYnV0IHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tIHJldmlzaW9uICRtYWNyb19yZXZpc2lvbi4KKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24KKyRwcm9nbmFtZTogb2YgJFBBQ0tBR0UgJFZFUlNJT04gYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KK19MVF9FT0YKKyAgICBmaQorCisgICAgZXhpdCAkRVhJVF9NSVNNQVRDSAorICBmaQorfQorCisKKyMjIC0tLS0tLS0tLS0tICMjCisjIyAgICBNYWluLiAgICAjIworIyMgLS0tLS0tLS0tLS0gIyMKKworJG9wdF9oZWxwIHx8IHsKKyAgIyBTYW5pdHkgY2hlY2tzIGZpcnN0OgorICBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKworICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiAhPSB5ZXM7IHRoZW4KKyAgICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gIm5vdCBjb25maWd1cmVkIHRvIGJ1aWxkIGFueSBraW5kIG9mIGxpYnJhcnkiCisgIGZpCisKKyAgdGVzdCAteiAiJG1vZGUiICYmIGZ1bmNfZmF0YWxfZXJyb3IgImVycm9yOiB5b3UgbXVzdCBzcGVjaWZ5IGEgTU9ERS4iCisKKworICAjIERhcndpbiBzdWNrcworICBldmFsIHN0ZF9zaHJleHQ9XCIkc2hyZXh0X2NtZHNcIgorCisKKyAgIyBPbmx5IGV4ZWN1dGUgbW9kZSBpcyBhbGxvd2VkIHRvIGhhdmUgLWRsb3BlbiBmbGFncy4KKyAgaWYgdGVzdCAtbiAiJGV4ZWN1dGVfZGxmaWxlcyIgJiYgdGVzdCAiJG1vZGUiICE9IGV4ZWN1dGU7IHRoZW4KKyAgICBmdW5jX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uIFxgLWRsb3BlbiciCisgICAgJEVDSE8gIiRoZWxwIiAxPiYyCisgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisgIGZpCisKKyAgIyBDaGFuZ2UgdGhlIGhlbHAgbWVzc2FnZSB0byBhIG1vZGUtc3BlY2lmaWMgb25lLgorICBnZW5lcmljX2hlbHA9IiRoZWxwIgorICBoZWxwPSJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwIC0tbW9kZT0kbW9kZScgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorfQorCisKKyMgZnVuY19sYWxpYl9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgYC5sYScgbGlicmFyeSBvciBgLmxvJyBvYmplY3QgZmlsZS4KKyMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKKyMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCitmdW5jX2xhbGliX3AgKCkKK3sKKyAgICB0ZXN0IC1mICIkMSIgJiYKKyAgICAgICRTRUQgLWUgNHEgIiQxIiAyPi9kZXYvbnVsbCBcCisgICAgICAgIHwgJEdSRVAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIiA+IC9kZXYvbnVsbCAyPiYxCit9CisKKyMgZnVuY19sYWxpYl91bnNhZmVfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIGAubGEnIGxpYnJhcnkgb3IgYC5sbycgb2JqZWN0IGZpbGUuCisjIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgc2FtZSBjaGVjayBhcyBmdW5jX2xhbGliX3Agd2l0aG91dAorIyByZXNvcnRpbmcgdG8gZXh0ZXJuYWwgcHJvZ3JhbXMuICBUbyB0aGlzIGVuZCwgaXQgcmVkaXJlY3RzIHN0ZGluIGFuZAorIyBjbG9zZXMgaXQgYWZ0ZXJ3YXJkcywgd2l0aG91dCBzYXZpbmcgdGhlIG9yaWdpbmFsIGZpbGUgZGVzY3JpcHRvci4KKyMgQXMgYSBzYWZldHkgbWVhc3VyZSwgdXNlIGl0IG9ubHkgd2hlcmUgYSBuZWdhdGl2ZSByZXN1bHQgd291bGQgYmUKKyMgZmF0YWwgYW55d2F5LiAgV29ya3MgaWYgYGZpbGUnIGRvZXMgbm90IGV4aXN0LgorZnVuY19sYWxpYl91bnNhZmVfcCAoKQoreworICAgIGxhbGliX3A9bm8KKyAgICBpZiB0ZXN0IC1mICIkMSIgJiYgdGVzdCAtciAiJDEiICYmIGV4ZWMgNTwmMCA8IiQxIjsgdGhlbgorCWZvciBsYWxpYl9wX2wgaW4gMSAyIDMgNAorCWRvCisJICAgIHJlYWQgbGFsaWJfcF9saW5lCisJICAgIGNhc2UgIiRsYWxpYl9wX2xpbmUiIGluCisJCVwjXCBHZW5lcmF0ZWRcIGJ5XCAqJFBBQ0tBR0UqICkgbGFsaWJfcD15ZXM7IGJyZWFrOzsKKwkgICAgZXNhYworCWRvbmUKKwlleGVjIDA8JjUgNTwmLQorICAgIGZpCisgICAgdGVzdCAiJGxhbGliX3AiID0geWVzCit9CisKKyMgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCB3cmFwcGVyIHNjcmlwdAorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICgpCit7CisgICAgZnVuY19sYWxpYl9wICIkMSIKK30KKworIyBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCB3cmFwcGVyIGV4ZWN1dGFibGUKKyMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKKyMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCitmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgKCkKK3sKKyAgICBmdW5jX2x0d3JhcHBlcl9leGVjX3N1ZmZpeD0KKyAgICBjYXNlICQxIGluCisgICAgKi5leGUpIDs7CisgICAgKikgZnVuY19sdHdyYXBwZXJfZXhlY19zdWZmaXg9LmV4ZSA7OworICAgIGVzYWMKKyAgICAkR1JFUCAiJG1hZ2ljX2V4ZSIgIiQxJGZ1bmNfbHR3cmFwcGVyX2V4ZWNfc3VmZml4IiA+L2Rldi9udWxsIDI+JjEKK30KKworIyBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lIGZpbGUKKyMgQXNzdW1lcyBmaWxlIGlzIGFuIGx0d3JhcHBlcl9leGVjdXRhYmxlCisjIHVzZXMgJGZpbGUgdG8gZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBmaWxlbmFtZSBmb3IgYQorIyB0ZW1wb3JhcnkgbHR3cmFwcGVyX3NjcmlwdC4KK2Z1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgKCkKK3sKKyAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdD0iIgorICAgIGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJDEiOyB0aGVuCisJZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJDEiICIiICIuIgorCWZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCWZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdC8kb2JqZGlyLyR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0fV9sdHNod3JhcHBlciIKKyAgICBmaQorfQorCisjIGZ1bmNfbHR3cmFwcGVyX3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCBvciB3cmFwcGVyIGV4ZWN1dGFibGUKKyMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKKyMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCitmdW5jX2x0d3JhcHBlcl9wICgpCit7CisgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgIiQxIiB8fCBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiQxIgorfQorCisKKyMgZnVuY19leGVjdXRlX2NtZHMgY29tbWFuZHMgZmFpbF9jbWQKKyMgRXhlY3V0ZSB0aWxkZS1kZWxpbWl0ZWQgQ09NTUFORFMuCisjIElmIEZBSUxfQ01EIGlzIGdpdmVuLCBldmFsIHRoYXQgdXBvbiBmYWlsdXJlLgorIyBGQUlMX0NNRCBtYXkgcmVhZC1hY2Nlc3MgdGhlIGN1cnJlbnQgY29tbWFuZCBpbiB2YXJpYWJsZSBDTUQhCitmdW5jX2V4ZWN1dGVfY21kcyAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBzYXZlX2lmcz0kSUZTOyBJRlM9J34nCisgICAgZm9yIGNtZCBpbiAkMTsgZG8KKyAgICAgIElGUz0kc2F2ZV9pZnMKKyAgICAgIGV2YWwgY21kPVwiJGNtZFwiCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJGNtZCIgIiR7Mi06fSIKKyAgICBkb25lCisgICAgSUZTPSRzYXZlX2lmcworfQorCisKKyMgZnVuY19zb3VyY2UgZmlsZQorIyBTb3VyY2UgRklMRSwgYWRkaW5nIGRpcmVjdG9yeSBjb21wb25lbnQgaWYgbmVjZXNzYXJ5LgorIyBOb3RlIHRoYXQgaXQgaXMgbm90IG5lY2Vzc2FyeSBvbiBjeWd3aW4vbWluZ3cgdG8gYXBwZW5kIGEgZG90IHRvCisjIEZJTEUgZXZlbiBpZiBib3RoIEZJTEUgYW5kIEZJTEUuZXhlIGV4aXN0OiBhdXRvbWF0aWMtYXBwZW5kLS5leGUKKyMgYmVoYXZpb3IgaGFwcGVucyBvbmx5IGZvciBleGVjKDMpLCBub3QgZm9yIG9wZW4oMikhICBBbHNvLCBzb3VyY2luZworIyBgRklMRS4nIGRvZXMgbm90IHdvcmsgb24gY3lnd2luIG1hbmFnZWQgbW91bnRzLgorZnVuY19zb3VyY2UgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgY2FzZSAkMSBpbgorICAgICovKiB8ICpcXCopCS4gIiQxIiA7OworICAgICopCQkuICIuLyQxIiA7OworICAgIGVzYWMKK30KKworCisjIGZ1bmNfaW5mZXJfdGFnIGFyZworIyBJbmZlciB0YWdnZWQgY29uZmlndXJhdGlvbiB0byB1c2UgaWYgYW55IGFyZSBhdmFpbGFibGUgYW5kCisjIGlmIG9uZSB3YXNuJ3QgY2hvc2VuIHZpYSB0aGUgIi0tdGFnIiBjb21tYW5kIGxpbmUgb3B0aW9uLgorIyBPbmx5IGF0dGVtcHQgdGhpcyBpZiB0aGUgY29tcGlsZXIgaW4gdGhlIGJhc2UgY29tcGlsZQorIyBjb21tYW5kIGRvZXNuJ3QgbWF0Y2ggdGhlIGRlZmF1bHQgY29tcGlsZXIuCisjIGFyZyBpcyB1c3VhbGx5IG9mIHRoZSBmb3JtICdnY2MgLi4uJworZnVuY19pbmZlcl90YWcgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgaWYgdGVzdCAtbiAiJGF2YWlsYWJsZV90YWdzIiAmJiB0ZXN0IC16ICIkdGFnbmFtZSI7IHRoZW4KKyAgICAgIENDX3F1b3RlZD0KKyAgICAgIGZvciBhcmcgaW4gJENDOyBkbworICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCUNDX3F1b3RlZD0iJENDX3F1b3RlZCAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgICBkb25lCisgICAgICBjYXNlICRAIGluCisgICAgICAjIEJsYW5rcyBpbiB0aGUgY29tbWFuZCBtYXkgaGF2ZSBiZWVuIHN0cmlwcGVkIGJ5IHRoZSBjYWxsaW5nIHNoZWxsLAorICAgICAgIyBidXQgbm90IGZyb20gdGhlIENDIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4gY29uZmlndXJlIHdhcyBydW4uCisgICAgICAiICRDQyAiKiB8ICIkQ0MgIiogfCAiIGAkRUNITyAkQ0NgICIqIHwgImAkRUNITyAkQ0NgICIqIHwgIiAkQ0NfcXVvdGVkIiogfCAiJENDX3F1b3RlZCAiKiB8ICIgYCRFQ0hPICRDQ19xdW90ZWRgICIqIHwgImAkRUNITyAkQ0NfcXVvdGVkYCAiKikgOzsKKyAgICAgICMgQmxhbmtzIGF0IHRoZSBzdGFydCBvZiAkYmFzZV9jb21waWxlIHdpbGwgY2F1c2UgdGhpcyB0byBmYWlsCisgICAgICAjIGlmIHdlIGRvbid0IGNoZWNrIGZvciB0aGVtIGFzIHdlbGwuCisgICAgICAqKQorCWZvciB6IGluICRhdmFpbGFibGVfdGFnczsgZG8KKwkgIGlmICRHUkVQICJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkeiQiIDwgIiRwcm9ncGF0aCIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgIyBFdmFsdWF0ZSB0aGUgY29uZmlndXJhdGlvbi4KKwkgICAgZXZhbCAiYCR7U0VEfSAtbiAtZSAnL14jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICckeickLywvXiMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICckeickL3AnIDwgJHByb2dwYXRoYCIKKwkgICAgQ0NfcXVvdGVkPQorCSAgICBmb3IgYXJnIGluICRDQzsgZG8KKwkgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgb3RoZXIgc2hlbGwgbWV0YWNoYXJhY3RlcnMuCisJICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwkgICAgICBDQ19xdW90ZWQ9IiRDQ19xdW90ZWQgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCSAgICBkb25lCisJICAgIGNhc2UgIiRAICIgaW4KKwkgICAgICAiICRDQyAiKiB8ICIkQ0MgIiogfCAiIGAkRUNITyAkQ0NgICIqIHwgImAkRUNITyAkQ0NgICIqIHwgIiAkQ0NfcXVvdGVkIiogfCAiJENDX3F1b3RlZCAiKiB8ICIgYCRFQ0hPICRDQ19xdW90ZWRgICIqIHwgImAkRUNITyAkQ0NfcXVvdGVkYCAiKikKKwkgICAgICAjIFRoZSBjb21waWxlciBpbiB0aGUgYmFzZSBjb21waWxlIGNvbW1hbmQgbWF0Y2hlcworCSAgICAgICMgdGhlIG9uZSBpbiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24uCisJICAgICAgIyBBc3N1bWUgdGhpcyBpcyB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24gd2Ugd2FudC4KKwkgICAgICB0YWduYW1lPSR6CisJICAgICAgYnJlYWsKKwkgICAgICA7OworCSAgICBlc2FjCisJICBmaQorCWRvbmUKKwkjIElmICR0YWduYW1lIHN0aWxsIGlzbid0IHNldCwgdGhlbiBubyB0YWdnZWQgY29uZmlndXJhdGlvbgorCSMgd2FzIGZvdW5kIGFuZCBsZXQgdGhlIHVzZXIga25vdyB0aGF0IHRoZSAiLS10YWciIGNvbW1hbmQKKwkjIGxpbmUgb3B0aW9uIG11c3QgYmUgdXNlZC4KKwlpZiB0ZXN0IC16ICIkdGFnbmFtZSI7IHRoZW4KKwkgIGZ1bmNfZWNobyAidW5hYmxlIHRvIGluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIgorCSAgZnVuY19mYXRhbF9lcnJvciAic3BlY2lmeSBhIHRhZyB3aXRoIFxgLS10YWcnIgorIwllbHNlCisjCSAgZnVuY192ZXJib3NlICJ1c2luZyAkdGFnbmFtZSB0YWdnZWQgY29uZmlndXJhdGlvbiIKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgZmkKK30KKworCisKKyMgZnVuY193cml0ZV9saWJ0b29sX29iamVjdCBvdXRwdXRfbmFtZSBwaWNfbmFtZSBub25waWNfbmFtZQorIyBDcmVhdGUgYSBsaWJ0b29sIG9iamVjdCBmaWxlIChhbmFsb2dvdXMgdG8gYSAiLmxhIiBmaWxlKSwKKyMgYnV0IGRvbid0IGNyZWF0ZSBpdCBpZiB3ZSdyZSBkb2luZyBhIGRyeSBydW4uCitmdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0ICgpCit7CisgICAgd3JpdGVfbGlib2JqPSR7MX0KKyAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorICAgICAgd3JpdGVfbG9iaj1cJyR7Mn1cJworICAgIGVsc2UKKyAgICAgIHdyaXRlX2xvYmo9bm9uZQorICAgIGZpCisKKyAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisgICAgICB3cml0ZV9vbGRvYmo9XCckezN9XCcKKyAgICBlbHNlCisgICAgICB3cml0ZV9vbGRvYmo9bm9uZQorICAgIGZpCisKKyAgICAkb3B0X2RyeV9ydW4gfHwgeworICAgICAgY2F0ID4ke3dyaXRlX2xpYm9ian1UIDw8RU9GCisjICR3cml0ZV9saWJvYmogLSBhIGxpYnRvb2wgb2JqZWN0IGZpbGUKKyMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIworIyBQbGVhc2UgRE8gTk9UIGRlbGV0ZSB0aGlzIGZpbGUhCisjIEl0IGlzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyB0aGUgbGlicmFyeS4KKworIyBOYW1lIG9mIHRoZSBQSUMgb2JqZWN0LgorcGljX29iamVjdD0kd3JpdGVfbG9iagorCisjIE5hbWUgb2YgdGhlIG5vbi1QSUMgb2JqZWN0Citub25fcGljX29iamVjdD0kd3JpdGVfb2xkb2JqCisKK0VPRgorICAgICAgJE1WICIke3dyaXRlX2xpYm9ian1UIiAiJHt3cml0ZV9saWJvYmp9IgorICAgIH0KK30KKworIyBmdW5jX21vZGVfY29tcGlsZSBhcmcuLi4KK2Z1bmNfbW9kZV9jb21waWxlICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgICMgR2V0IHRoZSBjb21waWxhdGlvbiBjb21tYW5kIGFuZCB0aGUgc291cmNlIGZpbGUuCisgICAgYmFzZV9jb21waWxlPQorICAgIHNyY2ZpbGU9IiRub25vcHQiICAjICBhbHdheXMga2VlcCBhIG5vbi1lbXB0eSB2YWx1ZSBpbiAic3JjZmlsZSIKKyAgICBzdXBwcmVzc19vcHQ9eWVzCisgICAgc3VwcHJlc3Nfb3V0cHV0PQorICAgIGFyZ19tb2RlPW5vcm1hbAorICAgIGxpYm9iaj0KKyAgICBsYXRlcj0KKyAgICBwaWVfZmxhZz0KKworICAgIGZvciBhcmcKKyAgICBkbworICAgICAgY2FzZSAkYXJnX21vZGUgaW4KKyAgICAgIGFyZyAgKQorCSMgZG8gbm90ICJjb250aW51ZSIuICBJbnN0ZWFkLCBhZGQgdGhpcyB0byBiYXNlX2NvbXBpbGUKKwlsYXN0YXJnPSIkYXJnIgorCWFyZ19tb2RlPW5vcm1hbAorCTs7CisKKyAgICAgIHRhcmdldCApCisJbGlib2JqPSIkYXJnIgorCWFyZ19tb2RlPW5vcm1hbAorCWNvbnRpbnVlCisJOzsKKworICAgICAgbm9ybWFsICkKKwkjIEFjY2VwdCBhbnkgY29tbWFuZC1saW5lIG9wdGlvbnMuCisJY2FzZSAkYXJnIGluCisJLW8pCisJICB0ZXN0IC1uICIkbGlib2JqIiAmJiBcCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBjYW5ub3Qgc3BlY2lmeSBcYC1vJyBtb3JlIHRoYW4gb25jZSIKKwkgIGFyZ19tb2RlPXRhcmdldAorCSAgY29udGludWUKKwkgIDs7CisKKwktcGllIHwgLWZwaWUgfCAtZlBJRSkKKyAgICAgICAgICBwaWVfZmxhZz0iJHBpZV9mbGFnICRhcmciCisJICBjb250aW51ZQorCSAgOzsKKworCS1zaGFyZWQgfCAtc3RhdGljIHwgLXByZWZlci1waWMgfCAtcHJlZmVyLW5vbi1waWMpCisJICBsYXRlcj0iJGxhdGVyICRhcmciCisJICBjb250aW51ZQorCSAgOzsKKworCS1uby1zdXBwcmVzcykKKwkgIHN1cHByZXNzX29wdD1ubworCSAgY29udGludWUKKwkgIDs7CisKKwktWGNvbXBpbGVyKQorCSAgYXJnX21vZGU9YXJnICAjICB0aGUgbmV4dCBvbmUgZ29lcyBpbnRvIHRoZSAiYmFzZV9jb21waWxlIiBhcmcgbGlzdAorCSAgY29udGludWUgICAgICAjICBUaGUgY3VycmVudCAic3JjZmlsZSIgd2lsbCBlaXRoZXIgYmUgcmV0YWluZWQgb3IKKwkgIDs7ICAgICAgICAgICAgIyAgcmVwbGFjZWQgbGF0ZXIuICBJIHdvdWxkIGd1ZXNzIHRoYXQgd291bGQgYmUgYSBidWcuCisKKwktV2MsKikKKwkgIGZ1bmNfc3RyaXBuYW1lICctV2MsJyAnJyAiJGFyZyIKKwkgIGFyZ3M9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgbGFzdGFyZz0KKwkgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJworCSAgZm9yIGFyZyBpbiAkYXJnczsgZG8KKwkgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJICAgIGxhc3Rhcmc9IiRsYXN0YXJnICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwkgIGRvbmUKKwkgIElGUz0iJHNhdmVfaWZzIgorCSAgZnVuY19zdHJpcG5hbWUgJyAnICcnICIkbGFzdGFyZyIKKwkgIGxhc3Rhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCisJICAjIEFkZCB0aGUgYXJndW1lbnRzIHRvIGJhc2VfY29tcGlsZS4KKwkgIGJhc2VfY29tcGlsZT0iJGJhc2VfY29tcGlsZSAkbGFzdGFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCisJKikKKwkgICMgQWNjZXB0IHRoZSBjdXJyZW50IGFyZ3VtZW50IGFzIHRoZSBzb3VyY2UgZmlsZS4KKwkgICMgVGhlIHByZXZpb3VzICJzcmNmaWxlIiBiZWNvbWVzIHRoZSBjdXJyZW50IGFyZ3VtZW50LgorCSAgIworCSAgbGFzdGFyZz0iJHNyY2ZpbGUiCisJICBzcmNmaWxlPSIkYXJnIgorCSAgOzsKKwllc2FjICAjICBjYXNlICRhcmcKKwk7OworICAgICAgZXNhYyAgICAjICBjYXNlICRhcmdfbW9kZQorCisgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgdGhlIHByZXZpb3VzIGFyZ3VtZW50LgorICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGxhc3RhcmciCisgICAgICBiYXNlX2NvbXBpbGU9IiRiYXNlX2NvbXBpbGUgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgIGRvbmUgIyBmb3IgYXJnCisKKyAgICBjYXNlICRhcmdfbW9kZSBpbgorICAgIGFyZykKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBtdXN0IHNwZWNpZnkgYW4gYXJndW1lbnQgZm9yIC1YY29tcGlsZSIKKyAgICAgIDs7CisgICAgdGFyZ2V0KQorICAgICAgZnVuY19mYXRhbF9lcnJvciAieW91IG11c3Qgc3BlY2lmeSBhIHRhcmdldCB3aXRoIFxgLW8nIgorICAgICAgOzsKKyAgICAqKQorICAgICAgIyBHZXQgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgb2JqZWN0LgorICAgICAgdGVzdCAteiAiJGxpYm9iaiIgJiYgeworCWZ1bmNfYmFzZW5hbWUgIiRzcmNmaWxlIgorCWxpYm9iaj0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgICAgfQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIFJlY29nbml6ZSBzZXZlcmFsIGRpZmZlcmVudCBmaWxlIHN1ZmZpeGVzLgorICAgICMgSWYgdGhlIHVzZXIgc3BlY2lmaWVzIC1vIGZpbGUubywgaXQgaXMgcmVwbGFjZWQgd2l0aCBmaWxlLmxvCisgICAgY2FzZSAkbGlib2JqIGluCisgICAgKi5bY0NGU2lmbXNvXSB8IFwKKyAgICAqLmFkYSB8ICouYWRiIHwgKi5hZHMgfCAqLmFzbSB8IFwKKyAgICAqLmMrKyB8ICouY2MgfCAqLmlpIHwgKi5jbGFzcyB8ICouY3BwIHwgKi5jeHggfCBcCisgICAgKi5bZkZdWzA5XT8gfCAqLmZvciB8ICouamF2YSB8ICoub2JqIHwgKi5zeCkKKyAgICAgIGZ1bmNfeGZvcm0gIiRsaWJvYmoiCisgICAgICBsaWJvYmo9JGZ1bmNfeGZvcm1fcmVzdWx0CisgICAgICA7OworICAgIGVzYWMKKworICAgIGNhc2UgJGxpYm9iaiBpbgorICAgICoubG8pIGZ1bmNfbG8ybyAiJGxpYm9iaiI7IG9iaj0kZnVuY19sbzJvX3Jlc3VsdCA7OworICAgICopCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZGV0ZXJtaW5lIG5hbWUgb2YgbGlicmFyeSBvYmplY3QgZnJvbSBcYCRsaWJvYmonIgorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBmdW5jX2luZmVyX3RhZyAkYmFzZV9jb21waWxlCisKKyAgICBmb3IgYXJnIGluICRsYXRlcjsgZG8KKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLXNoYXJlZCkKKwl0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgXAorCSAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJjYW4gbm90IGJ1aWxkIGEgc2hhcmVkIGxpYnJhcnkiCisJYnVpbGRfb2xkX2xpYnM9bm8KKwljb250aW51ZQorCTs7CisKKyAgICAgIC1zdGF0aWMpCisJYnVpbGRfbGlidG9vbF9saWJzPW5vCisJYnVpbGRfb2xkX2xpYnM9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtcHJlZmVyLXBpYykKKwlwaWNfbW9kZT15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1wcmVmZXItbm9uLXBpYykKKwlwaWNfbW9kZT1ubworCWNvbnRpbnVlCisJOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisKKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkbGlib2JqIgorICAgIHRlc3QgIlgkbGlib2JqIiAhPSAiWCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIgXAorICAgICAgJiYgJEVDSE8gIlgkbGlib2JqIiB8ICRHUkVQICdbXX4jXip7fTs8Pj8iJyInIicJICYoKXxgJFtdJyBcCisgICAgICAmJiBmdW5jX3dhcm5pbmcgImxpYm9iaiBuYW1lIFxgJGxpYm9iaicgbWF5IG5vdCBjb250YWluIHNoZWxsIHNwZWNpYWwgY2hhcmFjdGVycy4iCisgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJG9iaiIgIi8iICIiCisgICAgb2JqbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgIHhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorICAgIGxvYmo9JHt4ZGlyfSRvYmpkaXIvJG9iam5hbWUKKworICAgIHRlc3QgLXogIiRiYXNlX2NvbXBpbGUiICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIGNvbXBpbGF0aW9uIGNvbW1hbmQiCisKKyAgICAjIERlbGV0ZSBhbnkgbGVmdG92ZXIgbGlicmFyeSBvYmplY3RzLgorICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgIHJlbW92ZWxpc3Q9IiRvYmogJGxvYmogJGxpYm9iaiAke2xpYm9ian1UIgorICAgIGVsc2UKKyAgICAgIHJlbW92ZWxpc3Q9IiRsb2JqICRsaWJvYmogJHtsaWJvYmp9VCIKKyAgICBmaQorCisgICAgIyBPbiBDeWd3aW4gdGhlcmUncyBubyAicmVhbCIgUElDIGZsYWcgc28gd2UgbXVzdCBidWlsZCBib3RoIG9iamVjdCB0eXBlcworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgcGljX21vZGU9ZGVmYXVsdAorICAgICAgOzsKKyAgICBlc2FjCisgICAgaWYgdGVzdCAiJHBpY19tb2RlIiA9IG5vICYmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KKyAgICAgICMgbm9uLVBJQyBjb2RlIGluIHNoYXJlZCBsaWJyYXJpZXMgaXMgbm90IHN1cHBvcnRlZAorICAgICAgcGljX21vZGU9ZGVmYXVsdAorICAgIGZpCisKKyAgICAjIENhbGN1bGF0ZSB0aGUgZmlsZW5hbWUgb2YgdGhlIG91dHB1dCBvYmplY3QgaWYgY29tcGlsZXIgZG9lcworICAgICMgbm90IHN1cHBvcnQgLW8gd2l0aCAtYworICAgIGlmIHRlc3QgIiRjb21waWxlcl9jX28iID0gbm87IHRoZW4KKyAgICAgIG91dHB1dF9vYmo9YCRFQ0hPICJYJHNyY2ZpbGUiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJyAtZSAncyVcLlteLl0qJCUlJ2AuJHtvYmpleHR9CisgICAgICBsb2NrZmlsZT0iJG91dHB1dF9vYmoubG9jayIKKyAgICBlbHNlCisgICAgICBvdXRwdXRfb2JqPQorICAgICAgbmVlZF9sb2Nrcz1ubworICAgICAgbG9ja2ZpbGU9CisgICAgZmkKKworICAgICMgTG9jayB0aGlzIGNyaXRpY2FsIHNlY3Rpb24gaWYgaXQgaXMgbmVlZGVkCisgICAgIyBXZSB1c2UgdGhpcyBzY3JpcHQgZmlsZSB0byBtYWtlIHRoZSBsaW5rLCBpdCBhdm9pZHMgY3JlYXRpbmcgYSBuZXcgZmlsZQorICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHllczsgdGhlbgorICAgICAgdW50aWwgJG9wdF9kcnlfcnVuIHx8IGxuICIkcHJvZ3BhdGgiICIkbG9ja2ZpbGUiIDI+L2Rldi9udWxsOyBkbworCWZ1bmNfZWNobyAiV2FpdGluZyBmb3IgJGxvY2tmaWxlIHRvIGJlIHJlbW92ZWQiCisJc2xlZXAgMgorICAgICAgZG9uZQorICAgIGVsaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0gd2FybjsgdGhlbgorICAgICAgaWYgdGVzdCAtZiAiJGxvY2tmaWxlIjsgdGhlbgorCSRFQ0hPICJcCisqKiogRVJST1IsICRsb2NrZmlsZSBleGlzdHMgYW5kIGNvbnRhaW5zOgorYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgCisKK1RoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGlzIHRyeWluZyB0byB1c2UgdGhlIHNhbWUKK3RlbXBvcmFyeSBvYmplY3QgZmlsZSwgYW5kIGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5kIGl0IGJlY2F1c2UKK3lvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBcYC1jJyBhbmQgXGAtbycgdG9nZXRoZXIuICBJZiB5b3UKK3JlcGVhdCB0aGlzIGNvbXBpbGF0aW9uLCBpdCBtYXkgc3VjY2VlZCwgYnkgY2hhbmNlLCBidXQgeW91IGhhZCBiZXR0ZXIKK2F2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCitjb21waWxlci4iCisKKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmaQorICAgICAgcmVtb3ZlbGlzdD0iJHJlbW92ZWxpc3QgJG91dHB1dF9vYmoiCisgICAgICAkRUNITyAiJHNyY2ZpbGUiID4gIiRsb2NrZmlsZSIKKyAgICBmaQorCisgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAorICAgIHJlbW92ZWxpc3Q9IiRyZW1vdmVsaXN0ICRsb2NrZmlsZSIKKyAgICB0cmFwICckb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnIDEgMiAxNQorCisgICAgaWYgdGVzdCAtbiAiJGZpeF9zcmNmaWxlX3BhdGgiOyB0aGVuCisgICAgICBldmFsIHNyY2ZpbGU9XCIkZml4X3NyY2ZpbGVfcGF0aFwiCisgICAgZmkKKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkc3JjZmlsZSIKKyAgICBxc3JjZmlsZT0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKKworICAgICMgT25seSBidWlsZCBhIFBJQyBvYmplY3QgaWYgd2UgYXJlIGJ1aWxkaW5nIGxpYnRvb2wgbGlicmFyaWVzLgorICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisgICAgICAjIFdpdGhvdXQgdGhpcyBhc3NpZ25tZW50LCBiYXNlX2NvbXBpbGUgZ2V0cyBlbXB0aWVkLgorICAgICAgZmJzZF9oaWRlb3VzX3NoX2J1Zz0kYmFzZV9jb21waWxlCisKKyAgICAgIGlmIHRlc3QgIiRwaWNfbW9kZSIgIT0gbm87IHRoZW4KKwljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSAkcGljX2ZsYWciCisgICAgICBlbHNlCisJIyBEb24ndCBidWlsZCBQSUMgY29kZQorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlIgorICAgICAgZmkKKworICAgICAgZnVuY19ta2Rpcl9wICIkeGRpciRvYmpkaXIiCisKKyAgICAgIGlmIHRlc3QgLXogIiRvdXRwdXRfb2JqIjsgdGhlbgorCSMgUGxhY2UgUElDIG9iamVjdHMgaW4gJG9iamRpcgorCWNvbW1hbmQ9IiRjb21tYW5kIC1vICRsb2JqIgorICAgICAgZmkKKworICAgICAgZnVuY19zaG93X2V2YWxfbG9jYWxlICIkY29tbWFuZCIJXAorICAgICAgICAgICd0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnCisKKyAgICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHdhcm4gJiYKKwkgdGVzdCAiWGBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYCIgIT0gIlgkc3JjZmlsZSI7IHRoZW4KKwkkRUNITyAiXAorKioqIEVSUk9SLCAkbG9ja2ZpbGUgY29udGFpbnM6CitgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKKworYnV0IGl0IHNob3VsZCBjb250YWluOgorJHNyY2ZpbGUKKworVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQordGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoreW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IFxgLWMnIGFuZCBcYC1vJyB0b2dldGhlci4gIElmIHlvdQorcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgorYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKK2NvbXBpbGVyLiIKKworCSRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKKwlleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIGZpCisKKyAgICAgICMgSnVzdCBtb3ZlIHRoZSBvYmplY3QgaWYgbmVlZGVkLCB0aGVuIGdvIG9uIHRvIGNvbXBpbGUgdGhlIG5leHQgb25lCisgICAgICBpZiB0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgdGVzdCAiWCRvdXRwdXRfb2JqIiAhPSAiWCRsb2JqIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICckTVYgIiRvdXRwdXRfb2JqIiAiJGxvYmoiJyBcCisJICAnZXJyb3I9JD87ICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJGVycm9yJworICAgICAgZmkKKworICAgICAgIyBBbGxvdyBlcnJvciBtZXNzYWdlcyBvbmx5IGZyb20gdGhlIGZpcnN0IGNvbXBpbGF0aW9uLgorICAgICAgaWYgdGVzdCAiJHN1cHByZXNzX29wdCIgPSB5ZXM7IHRoZW4KKwlzdXBwcmVzc19vdXRwdXQ9JyA+L2Rldi9udWxsIDI+JjEnCisgICAgICBmaQorICAgIGZpCisKKyAgICAjIE9ubHkgYnVpbGQgYSBwb3NpdGlvbi1kZXBlbmRlbnQgb2JqZWN0IGlmIHdlIGJ1aWxkIG9sZCBsaWJyYXJpZXMuCisgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorICAgICAgaWYgdGVzdCAiJHBpY19tb2RlIiAhPSB5ZXM7IHRoZW4KKwkjIERvbid0IGJ1aWxkIFBJQyBjb2RlCisJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUkcGllX2ZsYWciCisgICAgICBlbHNlCisJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUgJHBpY19mbGFnIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9jX28iID0geWVzOyB0aGVuCisJY29tbWFuZD0iJGNvbW1hbmQgLW8gJG9iaiIKKyAgICAgIGZpCisKKyAgICAgICMgU3VwcHJlc3MgY29tcGlsZXIgb3V0cHV0IGlmIHdlIGFscmVhZHkgZGlkIGEgUElDIGNvbXBpbGF0aW9uLgorICAgICAgY29tbWFuZD0iJGNvbW1hbmQkc3VwcHJlc3Nfb3V0cHV0IgorICAgICAgZnVuY19zaG93X2V2YWxfbG9jYWxlICIkY29tbWFuZCIgXAorICAgICAgICAnJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFJworCisgICAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgPSB3YXJuICYmCisJIHRlc3QgIlhgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAiICE9ICJYJHNyY2ZpbGUiOyB0aGVuCisJJEVDSE8gIlwKKyoqKiBFUlJPUiwgJGxvY2tmaWxlIGNvbnRhaW5zOgorYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgCisKK2J1dCBpdCBzaG91bGQgY29udGFpbjoKKyRzcmNmaWxlCisKK1RoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGlzIHRyeWluZyB0byB1c2UgdGhlIHNhbWUKK3RlbXBvcmFyeSBvYmplY3QgZmlsZSwgYW5kIGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5kIGl0IGJlY2F1c2UKK3lvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBcYC1jJyBhbmQgXGAtbycgdG9nZXRoZXIuICBJZiB5b3UKK3JlcGVhdCB0aGlzIGNvbXBpbGF0aW9uLCBpdCBtYXkgc3VjY2VlZCwgYnkgY2hhbmNlLCBidXQgeW91IGhhZCBiZXR0ZXIKK2F2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCitjb21waWxlci4iCisKKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmaQorCisgICAgICAjIEp1c3QgbW92ZSB0aGUgb2JqZWN0IGlmIG5lZWRlZAorICAgICAgaWYgdGVzdCAtbiAiJG91dHB1dF9vYmoiICYmIHRlc3QgIlgkb3V0cHV0X29iaiIgIT0gIlgkb2JqIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICckTVYgIiRvdXRwdXRfb2JqIiAiJG9iaiInIFwKKwkgICdlcnJvcj0kPzsgJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkZXJyb3InCisgICAgICBmaQorICAgIGZpCisKKyAgICAkb3B0X2RyeV9ydW4gfHwgeworICAgICAgZnVuY193cml0ZV9saWJ0b29sX29iamVjdCAiJGxpYm9iaiIgIiRvYmpkaXIvJG9iam5hbWUiICIkb2JqbmFtZSIKKworICAgICAgIyBVbmxvY2sgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaWYgaXQgd2FzIGxvY2tlZAorICAgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCisJcmVtb3ZlbGlzdD0kbG9ja2ZpbGUKKyAgICAgICAgJFJNICIkbG9ja2ZpbGUiCisgICAgICBmaQorICAgIH0KKworICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworfQorCiskb3B0X2hlbHAgfHwgewordGVzdCAiJG1vZGUiID0gY29tcGlsZSAmJiBmdW5jX21vZGVfY29tcGlsZSAkezErIiRAIn0KK30KKworZnVuY19tb2RlX2hlbHAgKCkKK3sKKyAgICAjIFdlIG5lZWQgdG8gZGlzcGxheSBoZWxwIGZvciBlYWNoIG9mIHRoZSBtb2Rlcy4KKyAgICBjYXNlICRtb2RlIGluCisgICAgICAiIikKKyAgICAgICAgIyBHZW5lcmljIGhlbHAgaXMgZXh0cmFjdGVkIGZyb20gdGhlIHVzYWdlIGNvbW1lbnRzCisgICAgICAgICMgYXQgdGhlIHN0YXJ0IG9mIHRoaXMgZmlsZS4KKyAgICAgICAgZnVuY19oZWxwCisgICAgICAgIDs7CisKKyAgICAgIGNsZWFuKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9Y2xlYW4gUk0gW1JNLU9QVElPTl0uLi4gRklMRS4uLgorCitSZW1vdmUgZmlsZXMgZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5LgorCitSTSBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSB0byB1c2UgdG8gZGVsZXRlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIEZJTEUKKyh0eXBpY2FsbHkgXGAvYmluL3JtJykuICBSTS1PUFRJT05TIGFyZSBvcHRpb25zIChzdWNoIGFzIFxgLWYnKSB0byBiZSBwYXNzZWQKK3RvIFJNLgorCitJZiBGSUxFIGlzIGEgbGlidG9vbCBsaWJyYXJ5LCBvYmplY3Qgb3IgcHJvZ3JhbSwgYWxsIHRoZSBmaWxlcyBhc3NvY2lhdGVkCit3aXRoIGl0IGFyZSBkZWxldGVkLiBPdGhlcndpc2UsIG9ubHkgRklMRSBpdHNlbGYgaXMgZGVsZXRlZCB1c2luZyBSTS4iCisgICAgICAgIDs7CisKKyAgICAgIGNvbXBpbGUpCisgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9Y29tcGlsZSBDT01QSUxFLUNPTU1BTkQuLi4gU09VUkNFRklMRQorCitDb21waWxlIGEgc291cmNlIGZpbGUgaW50byBhIGxpYnRvb2wgbGlicmFyeSBvYmplY3QuCisKK1RoaXMgbW9kZSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBvcHRpb25zOgorCisgIC1vIE9VVFBVVC1GSUxFICAgIHNldCB0aGUgb3V0cHV0IGZpbGUgbmFtZSB0byBPVVRQVVQtRklMRQorICAtbm8tc3VwcHJlc3MgICAgICBkbyBub3Qgc3VwcHJlc3MgY29tcGlsZXIgb3V0cHV0IGZvciBtdWx0aXBsZSBwYXNzZXMKKyAgLXByZWZlci1waWMgICAgICAgdHJ5IHRvIGJ1aWxkaW5nIFBJQyBvYmplY3RzIG9ubHkKKyAgLXByZWZlci1ub24tcGljICAgdHJ5IHRvIGJ1aWxkaW5nIG5vbi1QSUMgb2JqZWN0cyBvbmx5CisgIC1zaGFyZWQgICAgICAgICAgIGRvIG5vdCBidWlsZCBhIFxgLm8nIGZpbGUgc3VpdGFibGUgZm9yIHN0YXRpYyBsaW5raW5nCisgIC1zdGF0aWMgICAgICAgICAgIG9ubHkgYnVpbGQgYSBcYC5vJyBmaWxlIHN1aXRhYmxlIGZvciBzdGF0aWMgbGlua2luZworCitDT01QSUxFLUNPTU1BTkQgaXMgYSBjb21tYW5kIHRvIGJlIHVzZWQgaW4gY3JlYXRpbmcgYSBcYHN0YW5kYXJkJyBvYmplY3QgZmlsZQorZnJvbSB0aGUgZ2l2ZW4gU09VUkNFRklMRS4KKworVGhlIG91dHB1dCBmaWxlIG5hbWUgaXMgZGV0ZXJtaW5lZCBieSByZW1vdmluZyB0aGUgZGlyZWN0b3J5IGNvbXBvbmVudCBmcm9tCitTT1VSQ0VGSUxFLCB0aGVuIHN1YnN0aXR1dGluZyB0aGUgQyBzb3VyY2UgY29kZSBzdWZmaXggXGAuYycgd2l0aCB0aGUKK2xpYnJhcnkgb2JqZWN0IHN1ZmZpeCwgXGAubG8nLiIKKyAgICAgICAgOzsKKworICAgICAgZXhlY3V0ZSkKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWV4ZWN1dGUgQ09NTUFORCBbQVJHU10uLi4KKworQXV0b21hdGljYWxseSBzZXQgbGlicmFyeSBwYXRoLCB0aGVuIHJ1biBhIHByb2dyYW0uCisKK1RoaXMgbW9kZSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBvcHRpb25zOgorCisgIC1kbG9wZW4gRklMRSAgICAgIGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgRklMRSB0byB0aGUgbGlicmFyeSBwYXRoCisKK1RoaXMgbW9kZSBzZXRzIHRoZSBsaWJyYXJ5IHBhdGggZW52aXJvbm1lbnQgdmFyaWFibGUgYWNjb3JkaW5nIHRvIFxgLWRsb3BlbicKK2ZsYWdzLgorCitJZiBhbnkgb2YgdGhlIEFSR1MgYXJlIGxpYnRvb2wgZXhlY3V0YWJsZSB3cmFwcGVycywgdGhlbiB0aGV5IGFyZSB0cmFuc2xhdGVkCitpbnRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgdW5pbnN0YWxsZWQgYmluYXJ5LCBhbmQgYW55IG9mIHRoZWlyIHJlcXVpcmVkIGxpYnJhcnkKK2RpcmVjdG9yaWVzIGFyZSBhZGRlZCB0byB0aGUgbGlicmFyeSBwYXRoLgorCitUaGVuLCBDT01NQU5EIGlzIGV4ZWN1dGVkLCB3aXRoIEFSR1MgYXMgYXJndW1lbnRzLiIKKyAgICAgICAgOzsKKworICAgICAgZmluaXNoKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9ZmluaXNoIFtMSUJESVJdLi4uCisKK0NvbXBsZXRlIHRoZSBpbnN0YWxsYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMuCisKK0VhY2ggTElCRElSIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgbGlidG9vbCBsaWJyYXJpZXMuCisKK1RoZSBjb21tYW5kcyB0aGF0IHRoaXMgbW9kZSBleGVjdXRlcyBtYXkgcmVxdWlyZSBzdXBlcnVzZXIgcHJpdmlsZWdlcy4gIFVzZQordGhlIFxgLS1kcnktcnVuJyBvcHRpb24gaWYgeW91IGp1c3Qgd2FudCB0byBzZWUgd2hhdCB3b3VsZCBiZSBleGVjdXRlZC4iCisgICAgICAgIDs7CisKKyAgICAgIGluc3RhbGwpCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1pbnN0YWxsIElOU1RBTEwtQ09NTUFORC4uLgorCitJbnN0YWxsIGV4ZWN1dGFibGVzIG9yIGxpYnJhcmllcy4KKworSU5TVEFMTC1DT01NQU5EIGlzIHRoZSBpbnN0YWxsYXRpb24gY29tbWFuZC4gIFRoZSBmaXJzdCBjb21wb25lbnQgc2hvdWxkIGJlCitlaXRoZXIgdGhlIFxgaW5zdGFsbCcgb3IgXGBjcCcgcHJvZ3JhbS4KKworVGhlIGZvbGxvd2luZyBjb21wb25lbnRzIG9mIElOU1RBTEwtQ09NTUFORCBhcmUgdHJlYXRlZCBzcGVjaWFsbHk6CisKKyAgLWluc3QtcHJlZml4IFBSRUZJWC1ESVIgIFVzZSBQUkVGSVgtRElSIGFzIGEgc3RhZ2luZyBhcmVhIGZvciBpbnN0YWxsYXRpb24KKworVGhlIHJlc3Qgb2YgdGhlIGNvbXBvbmVudHMgYXJlIGludGVycHJldGVkIGFzIGFyZ3VtZW50cyB0byB0aGF0IGNvbW1hbmQgKG9ubHkKK0JTRC1jb21wYXRpYmxlIGluc3RhbGwgb3B0aW9ucyBhcmUgcmVjb2duaXplZCkuIgorICAgICAgICA7OworCisgICAgICBsaW5rKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9bGluayBMSU5LLUNPTU1BTkQuLi4KKworTGluayBvYmplY3QgZmlsZXMgb3IgbGlicmFyaWVzIHRvZ2V0aGVyIHRvIGZvcm0gYW5vdGhlciBsaWJyYXJ5LCBvciB0bworY3JlYXRlIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbS4KKworTElOSy1DT01NQU5EIGlzIGEgY29tbWFuZCB1c2luZyB0aGUgQyBjb21waWxlciB0aGF0IHlvdSB3b3VsZCB1c2UgdG8gY3JlYXRlCithIHByb2dyYW0gZnJvbSBzZXZlcmFsIG9iamVjdCBmaWxlcy4KKworVGhlIGZvbGxvd2luZyBjb21wb25lbnRzIG9mIExJTkstQ09NTUFORCBhcmUgdHJlYXRlZCBzcGVjaWFsbHk6CisKKyAgLWFsbC1zdGF0aWMgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgYXQgYWxsCisgIC1hdm9pZC12ZXJzaW9uICAgIGRvIG5vdCBhZGQgYSB2ZXJzaW9uIHN1ZmZpeCBpZiBwb3NzaWJsZQorICAtZGxvcGVuIEZJTEUgICAgICBcYC1kbHByZW9wZW4nIEZJTEUgaWYgaXQgY2Fubm90IGJlIGRsb3BlbmVkIGF0IHJ1bnRpbWUKKyAgLWRscHJlb3BlbiBGSUxFICAgbGluayBpbiBGSUxFIGFuZCBhZGQgaXRzIHN5bWJvbHMgdG8gbHRfcHJlbG9hZGVkX3N5bWJvbHMKKyAgLWV4cG9ydC1keW5hbWljICAgYWxsb3cgc3ltYm9scyBmcm9tIE9VVFBVVC1GSUxFIHRvIGJlIHJlc29sdmVkIHdpdGggZGxzeW0oMykKKyAgLWV4cG9ydC1zeW1ib2xzIFNZTUZJTEUKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHRvIGV4cG9ydCBvbmx5IHRoZSBzeW1ib2xzIGxpc3RlZCBpbiBTWU1GSUxFCisgIC1leHBvcnQtc3ltYm9scy1yZWdleCBSRUdFWAorICAgICAgICAgICAgICAgICAgICB0cnkgdG8gZXhwb3J0IG9ubHkgdGhlIHN5bWJvbHMgbWF0Y2hpbmcgUkVHRVgKKyAgLUxMSUJESVIgICAgICAgICAgc2VhcmNoIExJQkRJUiBmb3IgcmVxdWlyZWQgaW5zdGFsbGVkIGxpYnJhcmllcworICAtbE5BTUUgICAgICAgICAgICBPVVRQVVQtRklMRSByZXF1aXJlcyB0aGUgaW5zdGFsbGVkIGxpYnJhcnkgbGliTkFNRQorICAtbW9kdWxlICAgICAgICAgICBidWlsZCBhIGxpYnJhcnkgdGhhdCBjYW4gZGxvcGVuZWQKKyAgLW5vLWZhc3QtaW5zdGFsbCAgZGlzYWJsZSB0aGUgZmFzdC1pbnN0YWxsIG1vZGUKKyAgLW5vLWluc3RhbGwgICAgICAgbGluayBhIG5vdC1pbnN0YWxsYWJsZSBleGVjdXRhYmxlCisgIC1uby11bmRlZmluZWQgICAgIGRlY2xhcmUgdGhhdCBhIGxpYnJhcnkgZG9lcyBub3QgcmVmZXIgdG8gZXh0ZXJuYWwgc3ltYm9scworICAtbyBPVVRQVVQtRklMRSAgICBjcmVhdGUgT1VUUFVULUZJTEUgZnJvbSB0aGUgc3BlY2lmaWVkIG9iamVjdHMKKyAgLW9iamVjdGxpc3QgRklMRSAgVXNlIGEgbGlzdCBvZiBvYmplY3QgZmlsZXMgZm91bmQgaW4gRklMRSB0byBzcGVjaWZ5IG9iamVjdHMKKyAgLXByZWNpb3VzLWZpbGVzLXJlZ2V4IFJFR0VYCisgICAgICAgICAgICAgICAgICAgIGRvbid0IHJlbW92ZSBvdXRwdXQgZmlsZXMgbWF0Y2hpbmcgUkVHRVgKKyAgLXJlbGVhc2UgUkVMRUFTRSAgc3BlY2lmeSBwYWNrYWdlIHJlbGVhc2UgaW5mb3JtYXRpb24KKyAgLXJwYXRoIExJQkRJUiAgICAgdGhlIGNyZWF0ZWQgbGlicmFyeSB3aWxsIGV2ZW50dWFsbHkgYmUgaW5zdGFsbGVkIGluIExJQkRJUgorICAtUlsgXUxJQkRJUiAgICAgICBhZGQgTElCRElSIHRvIHRoZSBydW50aW1lIHBhdGggb2YgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcworICAtc2hhcmVkICAgICAgICAgICBvbmx5IGRvIGR5bmFtaWMgbGlua2luZyBvZiBsaWJ0b29sIGxpYnJhcmllcworICAtc2hyZXh0IFNVRkZJWCAgICBvdmVycmlkZSB0aGUgc3RhbmRhcmQgc2hhcmVkIGxpYnJhcnkgZmlsZSBleHRlbnNpb24KKyAgLXN0YXRpYyAgICAgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgb2YgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKyAgLXN0YXRpYy1saWJ0b29sLWxpYnMKKyAgICAgICAgICAgICAgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgb2YgbGlidG9vbCBsaWJyYXJpZXMKKyAgLXZlcnNpb24taW5mbyBDVVJSRU5UWzpSRVZJU0lPTls6QUdFXV0KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSBsaWJyYXJ5IHZlcnNpb24gaW5mbyBbZWFjaCB2YXJpYWJsZSBkZWZhdWx0cyB0byAwXQorICAtd2VhayBMSUJOQU1FICAgICBkZWNsYXJlIHRoYXQgdGhlIHRhcmdldCBwcm92aWRlcyB0aGUgTElCTkFNRSBpbnRlcmZhY2UKKworQWxsIG90aGVyIG9wdGlvbnMgKGFyZ3VtZW50cyBiZWdpbm5pbmcgd2l0aCBcYC0nKSBhcmUgaWdub3JlZC4KKworRXZlcnkgb3RoZXIgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhIGZpbGVuYW1lLiAgRmlsZXMgZW5kaW5nIGluIFxgLmxhJyBhcmUKK3RyZWF0ZWQgYXMgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMsIG90aGVyIGZpbGVzIGFyZSBzdGFuZGFyZCBvciBsaWJyYXJ5CitvYmplY3QgZmlsZXMuCisKK0lmIHRoZSBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmxhJywgdGhlbiBhIGxpYnRvb2wgbGlicmFyeSBpcyBjcmVhdGVkLAorb25seSBsaWJyYXJ5IG9iamVjdHMgKFxgLmxvJyBmaWxlcykgbWF5IGJlIHNwZWNpZmllZCwgYW5kIFxgLXJwYXRoJyBpcworcmVxdWlyZWQsIGV4Y2VwdCB3aGVuIGNyZWF0aW5nIGEgY29udmVuaWVuY2UgbGlicmFyeS4KKworSWYgT1VUUFVULUZJTEUgZW5kcyBpbiBcYC5hJyBvciBcYC5saWInLCB0aGVuIGEgc3RhbmRhcmQgbGlicmFyeSBpcyBjcmVhdGVkCit1c2luZyBcYGFyJyBhbmQgXGByYW5saWInLCBvciBvbiBXaW5kb3dzIHVzaW5nIFxgbGliJy4KKworSWYgT1VUUFVULUZJTEUgZW5kcyBpbiBcYC5sbycgb3IgXGAuJHtvYmpleHR9JywgdGhlbiBhIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUKK2lzIGNyZWF0ZWQsIG90aGVyd2lzZSBhbiBleGVjdXRhYmxlIHByb2dyYW0gaXMgY3JlYXRlZC4iCisgICAgICAgIDs7CisKKyAgICAgIHVuaW5zdGFsbCkKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPXVuaW5zdGFsbCBSTSBbUk0tT1BUSU9OXS4uLiBGSUxFLi4uCisKK1JlbW92ZSBsaWJyYXJpZXMgZnJvbSBhbiBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgorCitSTSBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSB0byB1c2UgdG8gZGVsZXRlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIEZJTEUKKyh0eXBpY2FsbHkgXGAvYmluL3JtJykuICBSTS1PUFRJT05TIGFyZSBvcHRpb25zIChzdWNoIGFzIFxgLWYnKSB0byBiZSBwYXNzZWQKK3RvIFJNLgorCitJZiBGSUxFIGlzIGEgbGlidG9vbCBsaWJyYXJ5LCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBpdCBhcmUgZGVsZXRlZC4KK090aGVyd2lzZSwgb25seSBGSUxFIGl0c2VsZiBpcyBkZWxldGVkIHVzaW5nIFJNLiIKKyAgICAgICAgOzsKKworICAgICAgKikKKyAgICAgICAgZnVuY19mYXRhbF9oZWxwICJpbnZhbGlkIG9wZXJhdGlvbiBtb2RlIFxgJG1vZGUnIgorICAgICAgICA7OworICAgIGVzYWMKKworICAgICRFQ0hPCisgICAgJEVDSE8gIlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IG90aGVyIG1vZGVzLiIKKworICAgIGV4aXQgJD8KK30KKworICAjIE5vdyB0aGF0IHdlJ3ZlIGNvbGxlY3RlZCBhIHBvc3NpYmxlIC0tbW9kZSBhcmcsIHNob3cgaGVscCBpZiBuZWNlc3NhcnkKKyAgJG9wdF9oZWxwICYmIGZ1bmNfbW9kZV9oZWxwCisKKworIyBmdW5jX21vZGVfZXhlY3V0ZSBhcmcuLi4KK2Z1bmNfbW9kZV9leGVjdXRlICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgICMgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjb21tYW5kIG5hbWUuCisgICAgY21kPSIkbm9ub3B0IgorICAgIHRlc3QgLXogIiRjbWQiICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIENPTU1BTkQiCisKKyAgICAjIEhhbmRsZSAtZGxvcGVuIGZsYWdzIGltbWVkaWF0ZWx5LgorICAgIGZvciBmaWxlIGluICRleGVjdXRlX2RsZmlsZXM7IGRvCisgICAgICB0ZXN0IC1mICIkZmlsZSIgXAorCXx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkZmlsZScgaXMgbm90IGEgZmlsZSIKKworICAgICAgZGlyPQorICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgKi5sYSkKKwkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgorCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRmaWxlIiBcCisJICB8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCisJIyBSZWFkIHRoZSBsaWJ0b29sIGxpYnJhcnkuCisJZGxuYW1lPQorCWxpYnJhcnlfbmFtZXM9CisJZnVuY19zb3VyY2UgIiRmaWxlIgorCisJIyBTa2lwIHRoaXMgbGlicmFyeSBpZiBpdCBjYW5ub3QgYmUgZGxvcGVuZWQuCisJaWYgdGVzdCAteiAiJGRsbmFtZSI7IHRoZW4KKwkgICMgV2FybiBpZiBpdCB3YXMgYSBzaGFyZWQgbGlicmFyeS4KKwkgIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJiBcCisJICAgIGZ1bmNfd2FybmluZyAiXGAkZmlsZScgd2FzIG5vdCBsaW5rZWQgd2l0aCBcYC1leHBvcnQtZHluYW1pYyciCisJICBjb250aW51ZQorCWZpCisKKwlmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKKwlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCisJaWYgdGVzdCAtZiAiJGRpci8kb2JqZGlyLyRkbG5hbWUiOyB0aGVuCisJICBkaXI9IiRkaXIvJG9iamRpciIKKwllbHNlCisJICBpZiB0ZXN0ICEgLWYgIiRkaXIvJGRsbmFtZSI7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgXGAkZGxuYW1lJyBpbiBcYCRkaXInIG9yIFxgJGRpci8kb2JqZGlyJyIKKwkgIGZpCisJZmkKKwk7OworCisgICAgICAqLmxvKQorCSMgSnVzdCBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSAubG8gZmlsZS4KKwlmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKKwlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCTs7CisKKyAgICAgICopCisJZnVuY193YXJuaW5nICJcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIG5vbi1saWJ0b29sIGxpYnJhcmllcyBhbmQgb2JqZWN0cyIKKwljb250aW51ZQorCTs7CisgICAgICBlc2FjCisKKyAgICAgICMgR2V0IHRoZSBhYnNvbHV0ZSBwYXRobmFtZS4KKyAgICAgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKKyAgICAgIHRlc3QgLW4gIiRhYnNkaXIiICYmIGRpcj0iJGFic2RpciIKKworICAgICAgIyBOb3cgYWRkIHRoZSBkaXJlY3RvcnkgdG8gc2hsaWJwYXRoX3Zhci4KKyAgICAgIGlmIGV2YWwgInRlc3QgLXogXCJcJCRzaGxpYnBhdGhfdmFyXCIiOyB0aGVuCisJZXZhbCAiJHNobGlicGF0aF92YXI9XCJcJGRpclwiIgorICAgICAgZWxzZQorCWV2YWwgIiRzaGxpYnBhdGhfdmFyPVwiXCRkaXI6XCQkc2hsaWJwYXRoX3ZhclwiIgorICAgICAgZmkKKyAgICBkb25lCisKKyAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHNobGlicGF0aF92YXIKKyAgICAjIHJhdGhlciB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisgICAgbGlidG9vbF9leGVjdXRlX21hZ2ljPSIkbWFnaWMiCisKKyAgICAjIENoZWNrIGlmIGFueSBvZiB0aGUgYXJndW1lbnRzIGlzIGEgd3JhcHBlciBzY3JpcHQuCisgICAgYXJncz0KKyAgICBmb3IgZmlsZQorICAgIGRvCisgICAgICBjYXNlICRmaWxlIGluCisgICAgICAtKikgOzsKKyAgICAgICopCisJIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgcmVhbGx5IGEgbGlidG9vbCBwcm9ncmFtLgorCWlmIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkZmlsZSI7IHRoZW4KKwkgIGZ1bmNfc291cmNlICIkZmlsZSIKKwkgICMgVHJhbnNmb3JtIGFyZyB0byB3cmFwcGVkIG5hbWUuCisJICBmaWxlPSIkcHJvZ2Rpci8kcHJvZ3JhbSIKKwllbGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJGZpbGUiOyB0aGVuCisJICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKKwkgIGZ1bmNfc291cmNlICIkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQiCisJICAjIFRyYW5zZm9ybSBhcmcgdG8gd3JhcHBlZCBuYW1lLgorCSAgZmlsZT0iJHByb2dkaXIvJHByb2dyYW0iCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgIyBRdW90ZSBhcmd1bWVudHMgKHRvIHByZXNlcnZlIHNoZWxsIG1ldGFjaGFyYWN0ZXJzKS4KKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmaWxlIgorICAgICAgYXJncz0iJGFyZ3MgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgIGRvbmUKKworICAgIGlmIHRlc3QgIlgkb3B0X2RyeV9ydW4iID0gWGZhbHNlOyB0aGVuCisgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwkjIEV4cG9ydCB0aGUgc2hsaWJwYXRoX3Zhci4KKwlldmFsICJleHBvcnQgJHNobGlicGF0aF92YXIiCisgICAgICBmaQorCisgICAgICAjIFJlc3RvcmUgc2F2ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICAgICBmb3IgbHRfdmFyIGluIExBTkcgTEFOR1VBR0UgTENfQUxMIExDX0NUWVBFIExDX0NPTExBVEUgTENfTUVTU0FHRVMKKyAgICAgIGRvCisJZXZhbCAiaWYgdGVzdCBcIlwke3NhdmVfJGx0X3ZhcitzZXR9XCIgPSBzZXQ7IHRoZW4KKyAgICAgICAgICAgICAgICAkbHRfdmFyPVwkc2F2ZV8kbHRfdmFyOyBleHBvcnQgJGx0X3ZhcgorCSAgICAgIGVsc2UKKwkJJGx0X3Vuc2V0ICRsdF92YXIKKwkgICAgICBmaSIKKyAgICAgIGRvbmUKKworICAgICAgIyBOb3cgcHJlcGFyZSB0byBhY3R1YWxseSBleGVjIHRoZSBjb21tYW5kLgorICAgICAgZXhlY19jbWQ9IlwkY21kJGFyZ3MiCisgICAgZWxzZQorICAgICAgIyBEaXNwbGF5IHdoYXQgd291bGQgYmUgZG9uZS4KKyAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorCWV2YWwgIlwkRUNITyBcIlwkc2hsaWJwYXRoX3Zhcj1cJCRzaGxpYnBhdGhfdmFyXCIiCisJJEVDSE8gImV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKKyAgICAgIGZpCisgICAgICAkRUNITyAiJGNtZCRhcmdzIgorICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgZmkKK30KKwordGVzdCAiJG1vZGUiID0gZXhlY3V0ZSAmJiBmdW5jX21vZGVfZXhlY3V0ZSAkezErIiRAIn0KKworCisjIGZ1bmNfbW9kZV9maW5pc2ggYXJnLi4uCitmdW5jX21vZGVfZmluaXNoICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIGxpYmRpcnM9IiRub25vcHQiCisgICAgYWRtaW5jbWRzPQorCisgICAgaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzJGZpbmlzaF9ldmFsIiAmJiB0ZXN0IC1uICIkbGliZGlycyI7IHRoZW4KKyAgICAgIGZvciBkaXIKKyAgICAgIGRvCisJbGliZGlycz0iJGxpYmRpcnMgJGRpciIKKyAgICAgIGRvbmUKKworICAgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKwlpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMiOyB0aGVuCisJICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgZmluaXNoIGNvbW1hbmRzLgorCSAgZnVuY19leGVjdXRlX2NtZHMgIiRmaW5pc2hfY21kcyIgJ2FkbWluY21kcz0iJGFkbWluY21kcworJyIkY21kIiciJworCWZpCisJaWYgdGVzdCAtbiAiJGZpbmlzaF9ldmFsIjsgdGhlbgorCSAgIyBEbyB0aGUgc2luZ2xlIGZpbmlzaF9ldmFsLgorCSAgZXZhbCBjbWRzPVwiJGZpbmlzaF9ldmFsXCIKKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kcyIgfHwgYWRtaW5jbWRzPSIkYWRtaW5jbWRzCisgICAgICAgJGNtZHMiCisJZmkKKyAgICAgIGRvbmUKKyAgICBmaQorCisgICAgIyBFeGl0IGhlcmUgaWYgdGhleSB3YW50ZWQgc2lsZW50IG1vZGUuCisgICAgJG9wdF9zaWxlbnQgJiYgZXhpdCAkRVhJVF9TVUNDRVNTCisKKyAgICAkRUNITyAiWC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iIHwgJFhzZWQKKyAgICAkRUNITyAiTGlicmFyaWVzIGhhdmUgYmVlbiBpbnN0YWxsZWQgaW46IgorICAgIGZvciBsaWJkaXIgaW4gJGxpYmRpcnM7IGRvCisgICAgICAkRUNITyAiICAgJGxpYmRpciIKKyAgICBkb25lCisgICAgJEVDSE8KKyAgICAkRUNITyAiSWYgeW91IGV2ZXIgaGFwcGVuIHRvIHdhbnQgdG8gbGluayBhZ2FpbnN0IGluc3RhbGxlZCBsaWJyYXJpZXMiCisgICAgJEVDSE8gImluIGEgZ2l2ZW4gZGlyZWN0b3J5LCBMSUJESVIsIHlvdSBtdXN0IGVpdGhlciB1c2UgbGlidG9vbCwgYW5kIgorICAgICRFQ0hPICJzcGVjaWZ5IHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBsaWJyYXJ5LCBvciB1c2UgdGhlIFxgLUxMSUJESVInIgorICAgICRFQ0hPICJmbGFnIGR1cmluZyBsaW5raW5nIGFuZCBkbyBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZzoiCisgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisgICAgICAkRUNITyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRzaGxpYnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKyAgICAgICRFQ0hPICIgICAgIGR1cmluZyBleGVjdXRpb24iCisgICAgZmkKKyAgICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisgICAgICAkRUNITyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRydW5wYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCisgICAgICAkRUNITyAiICAgICBkdXJpbmcgbGlua2luZyIKKyAgICBmaQorICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorICAgICAgbGliZGlyPUxJQkRJUgorICAgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCisgICAgICAkRUNITyAiICAgLSB1c2UgdGhlIFxgJGZsYWcnIGxpbmtlciBmbGFnIgorICAgIGZpCisgICAgaWYgdGVzdCAtbiAiJGFkbWluY21kcyI7IHRoZW4KKyAgICAgICRFQ0hPICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBydW4gdGhlc2UgY29tbWFuZHM6JGFkbWluY21kcyIKKyAgICBmaQorICAgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisgICAgICAkRUNITyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgYWRkIExJQkRJUiB0byBcYC9ldGMvbGQuc28uY29uZiciCisgICAgZmkKKyAgICAkRUNITworCisgICAgJEVDSE8gIlNlZSBhbnkgb3BlcmF0aW5nIHN5c3RlbSBkb2N1bWVudGF0aW9uIGFib3V0IHNoYXJlZCBsaWJyYXJpZXMgZm9yIgorICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgIHNvbGFyaXMyLls2Nzg5XXxzb2xhcmlzMi4xWzAtOV0pCisgICAgICAgICRFQ0hPICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSwgY3JsZSgxKSBhbmQgbGQuc28oOCkgbWFudWFsIgorCSRFQ0hPICJwYWdlcy4iCisJOzsKKyAgICAgICopCisgICAgICAgICRFQ0hPICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSBhbmQgbGQuc28oOCkgbWFudWFsIHBhZ2VzLiIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgJEVDSE8gIlgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiB8ICRYc2VkCisgICAgZXhpdCAkRVhJVF9TVUNDRVNTCit9CisKK3Rlc3QgIiRtb2RlIiA9IGZpbmlzaCAmJiBmdW5jX21vZGVfZmluaXNoICR7MSsiJEAifQorCisKKyMgZnVuY19tb2RlX2luc3RhbGwgYXJnLi4uCitmdW5jX21vZGVfaW5zdGFsbCAoKQoreworICAgICRvcHRfZGVidWcKKyAgICAjIFRoZXJlIG1heSBiZSBhbiBvcHRpb25hbCBzaCgxKSBhcmd1bWVudCBhdCB0aGUgYmVnaW5uaW5nIG9mCisgICAgIyBpbnN0YWxsX3Byb2cgKGVzcGVjaWFsbHkgb24gV2luZG93cyBOVCkuCisgICAgaWYgdGVzdCAiJG5vbm9wdCIgPSAiJFNIRUxMIiB8fCB0ZXN0ICIkbm9ub3B0IiA9IC9iaW4vc2ggfHwKKyAgICAgICAjIEFsbG93IHRoZSB1c2Ugb2YgR05VIHNodG9vbCdzIGluc3RhbGwgY29tbWFuZC4KKyAgICAgICAkRUNITyAiWCRub25vcHQiIHwgJEdSRVAgc2h0b29sID4vZGV2L251bGw7IHRoZW4KKyAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSBpdC4KKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRub25vcHQiCisgICAgICBpbnN0YWxsX3Byb2c9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCAiCisgICAgICBhcmc9JDEKKyAgICAgIHNoaWZ0CisgICAgZWxzZQorICAgICAgaW5zdGFsbF9wcm9nPQorICAgICAgYXJnPSRub25vcHQKKyAgICBmaQorCisgICAgIyBUaGUgcmVhbCBmaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgdGhlIG5hbWUgb2YgdGhlIGluc3RhbGxhdGlvbiBwcm9ncmFtLgorICAgICMgQWVzdGhldGljYWxseSBxdW90ZSBpdC4KKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorICAgIGluc3RhbGxfcHJvZz0iJGluc3RhbGxfcHJvZyRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKworICAgICMgV2UgbmVlZCB0byBhY2NlcHQgYXQgbGVhc3QgYWxsIHRoZSBCU0QgaW5zdGFsbCBmbGFncy4KKyAgICBkZXN0PQorICAgIGZpbGVzPQorICAgIG9wdHM9CisgICAgcHJldj0KKyAgICBpbnN0YWxsX3R5cGU9CisgICAgaXNkaXI9bm8KKyAgICBzdHJpcG1lPQorICAgIGZvciBhcmcKKyAgICBkbworICAgICAgaWYgdGVzdCAtbiAiJGRlc3QiOyB0aGVuCisJZmlsZXM9IiRmaWxlcyAkZGVzdCIKKwlkZXN0PSRhcmcKKwljb250aW51ZQorICAgICAgZmkKKworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtZCkgaXNkaXI9eWVzIDs7CisgICAgICAtZikKKwljYXNlICIgJGluc3RhbGxfcHJvZyAiIGluCisJKltcXFwgL11jcFwgKikgOzsKKwkqKSBwcmV2PSRhcmcgOzsKKwllc2FjCisJOzsKKyAgICAgIC1nIHwgLW0gfCAtbykKKwlwcmV2PSRhcmcKKwk7OworICAgICAgLXMpCisJc3RyaXBtZT0iIC1zIgorCWNvbnRpbnVlCisJOzsKKyAgICAgIC0qKQorCTs7CisgICAgICAqKQorCSMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkZWQgYW4gYXJndW1lbnQsIHRoZW4gc2tpcCBpdC4KKwlpZiB0ZXN0IC1uICIkcHJldiI7IHRoZW4KKwkgIHByZXY9CisJZWxzZQorCSAgZGVzdD0kYXJnCisJICBjb250aW51ZQorCWZpCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIHRoZSBhcmd1bWVudC4KKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisgICAgICBpbnN0YWxsX3Byb2c9IiRpbnN0YWxsX3Byb2cgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgIGRvbmUKKworICAgIHRlc3QgLXogIiRpbnN0YWxsX3Byb2ciICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhbiBpbnN0YWxsIHByb2dyYW0iCisKKyAgICB0ZXN0IC1uICIkcHJldiIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ0aGUgXGAkcHJldicgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IgorCisgICAgaWYgdGVzdCAteiAiJGZpbGVzIjsgdGhlbgorICAgICAgaWYgdGVzdCAteiAiJGRlc3QiOyB0aGVuCisJZnVuY19mYXRhbF9oZWxwICJubyBmaWxlIG9yIGRlc3RpbmF0aW9uIHNwZWNpZmllZCIKKyAgICAgIGVsc2UKKwlmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBkZXN0aW5hdGlvbiIKKyAgICAgIGZpCisgICAgZmkKKworICAgICMgU3RyaXAgYW55IHRyYWlsaW5nIHNsYXNoIGZyb20gdGhlIGRlc3RpbmF0aW9uLgorICAgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiJGRlc3QiCisgICAgZGVzdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisKKyAgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9yeS4KKyAgICB0ZXN0IC1kICIkZGVzdCIgJiYgaXNkaXI9eWVzCisgICAgaWYgdGVzdCAiJGlzZGlyIiA9IHllczsgdGhlbgorICAgICAgZGVzdGRpcj0iJGRlc3QiCisgICAgICBkZXN0bmFtZT0KKyAgICBlbHNlCisgICAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkZGVzdCIgIiIgIi4iCisgICAgICBkZXN0ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyAgICAgIGRlc3RuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisKKyAgICAgICMgTm90IGEgZGlyZWN0b3J5LCBzbyBjaGVjayB0byBzZWUgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBmaWxlIHNwZWNpZmllZC4KKyAgICAgIHNldCBkdW1teSAkZmlsZXM7IHNoaWZ0CisgICAgICB0ZXN0ICIkIyIgLWd0IDEgJiYgXAorCWZ1bmNfZmF0YWxfaGVscCAiXGAkZGVzdCcgaXMgbm90IGEgZGlyZWN0b3J5IgorICAgIGZpCisgICAgY2FzZSAkZGVzdGRpciBpbgorICAgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKyAgICAqKQorICAgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbworCWNhc2UgJGZpbGUgaW4KKwkqLmxvKSA7OworCSopCisJICBmdW5jX2ZhdGFsX2hlbHAgIlxgJGRlc3RkaXInIG11c3QgYmUgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUiCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCB2YXJpYWJsZXMgcmF0aGVyCisgICAgIyB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisgICAgbGlidG9vbF9pbnN0YWxsX21hZ2ljPSIkbWFnaWMiCisKKyAgICBzdGF0aWNsaWJzPQorICAgIGZ1dHVyZV9saWJkaXJzPQorICAgIGN1cnJlbnRfbGliZGlycz0KKyAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisKKyAgICAgICMgRG8gZWFjaCBpbnN0YWxsYXRpb24uCisgICAgICBjYXNlICRmaWxlIGluCisgICAgICAqLiRsaWJleHQpCisJIyBEbyB0aGUgc3RhdGljIGxpYnJhcmllcyBsYXRlci4KKwlzdGF0aWNsaWJzPSIkc3RhdGljbGlicyAkZmlsZSIKKwk7OworCisgICAgICAqLmxhKQorCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCisJZnVuY19sYWxpYl91bnNhZmVfcCAiJGZpbGUiIFwKKwkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkZmlsZScgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCisJbGlicmFyeV9uYW1lcz0KKwlvbGRfbGlicmFyeT0KKwlyZWxpbmtfY29tbWFuZD0KKwlmdW5jX3NvdXJjZSAiJGZpbGUiCisKKwkjIEFkZCB0aGUgbGliZGlyIHRvIGN1cnJlbnRfbGliZGlycyBpZiBpdCBpcyB0aGUgZGVzdGluYXRpb24uCisJaWYgdGVzdCAiWCRkZXN0ZGlyIiA9ICJYJGxpYmRpciI7IHRoZW4KKwkgIGNhc2UgIiRjdXJyZW50X2xpYmRpcnMgIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGN1cnJlbnRfbGliZGlycz0iJGN1cnJlbnRfbGliZGlycyAkbGliZGlyIiA7OworCSAgZXNhYworCWVsc2UKKwkgICMgTm90ZSB0aGUgbGliZGlyIGFzIGEgZnV0dXJlIGxpYmRpci4KKwkgIGNhc2UgIiRmdXR1cmVfbGliZGlycyAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgZnV0dXJlX2xpYmRpcnM9IiRmdXR1cmVfbGliZGlycyAkbGliZGlyIiA7OworCSAgZXNhYworCWZpCisKKwlmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiLyIgIiIKKwlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCWRpcj0iJGRpciRvYmpkaXIiCisKKwlpZiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJICAjIERldGVybWluZSB0aGUgcHJlZml4IHRoZSB1c2VyIGhhcyBhcHBsaWVkIHRvIG91ciBmdXR1cmUgZGlyLgorCSAgaW5zdF9wcmVmaXhfZGlyPWAkRUNITyAiWCRkZXN0ZGlyIiB8ICRYc2VkIC1lICJzJSRsaWJkaXJcJCUlImAKKworCSAgIyBEb24ndCBhbGxvdyB0aGUgdXNlciB0byBwbGFjZSB1cyBvdXRzaWRlIG9mIG91ciBleHBlY3RlZAorCSAgIyBsb2NhdGlvbiBiL2MgdGhpcyBwcmV2ZW50cyBmaW5kaW5nIGRlcGVuZGVudCBsaWJyYXJpZXMgdGhhdAorCSAgIyBhcmUgaW5zdGFsbGVkIHRvIHRoZSBzYW1lIHByZWZpeC4KKwkgICMgQXQgcHJlc2VudCwgdGhpcyBjaGVjayBkb2Vzbid0IGFmZmVjdCB3aW5kb3dzIC5kbGwncyB0aGF0CisJICAjIGFyZSBpbnN0YWxsZWQgaW50byAkbGliZGlyLy4uL2JpbiAoY3VycmVudGx5LCB0aGF0IHdvcmtzIGZpbmUpCisJICAjIGJ1dCBpdCdzIHNvbWV0aGluZyB0byBrZWVwIGFuIGV5ZSBvbi4KKwkgIHRlc3QgIiRpbnN0X3ByZWZpeF9kaXIiID0gIiRkZXN0ZGlyIiAmJiBcCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImVycm9yOiBjYW5ub3QgaW5zdGFsbCBcYCRmaWxlJyB0byBhIGRpcmVjdG9yeSBub3QgZW5kaW5nIGluICRsaWJkaXIiCisKKwkgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisJICAgICMgU3RpY2sgdGhlIGluc3RfcHJlZml4X2RpciBkYXRhIGludG8gdGhlIGxpbmsgY29tbWFuZC4KKwkgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICJYJHJlbGlua19jb21tYW5kIiB8ICRYc2VkIC1lICJzJUBpbnN0X3ByZWZpeF9kaXJAJS1pbnN0LXByZWZpeC1kaXIgJGluc3RfcHJlZml4X2RpciUiYAorCSAgZWxzZQorCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIlgkcmVsaW5rX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQGluc3RfcHJlZml4X2RpckAlJSJgCisJICBmaQorCisJICBmdW5jX3dhcm5pbmcgInJlbGlua2luZyBcYCRmaWxlJyIKKwkgIGZ1bmNfc2hvd19ldmFsICIkcmVsaW5rX2NvbW1hbmQiIFwKKwkgICAgJ2Z1bmNfZmF0YWxfZXJyb3IgImVycm9yOiByZWxpbmsgXGAkZmlsZSdcJycgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCInCisJZmkKKworCSMgU2VlIHRoZSBuYW1lcyBvZiB0aGUgc2hhcmVkIGxpYnJhcnkuCisJc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzOyBzaGlmdAorCWlmIHRlc3QgLW4gIiQxIjsgdGhlbgorCSAgcmVhbG5hbWU9IiQxIgorCSAgc2hpZnQKKworCSAgc3JjbmFtZT0iJHJlYWxuYW1lIgorCSAgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIiAmJiBzcmNuYW1lPSIkcmVhbG5hbWUiVAorCisJICAjIEluc3RhbGwgdGhlIHNoYXJlZCBsaWJyYXJ5IGFuZCBidWlsZCB0aGUgc3ltbGlua3MuCisJICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyAkZGlyLyRzcmNuYW1lICRkZXN0ZGlyLyRyZWFsbmFtZSIgXAorCSAgICAgICdleGl0ICQ/JworCSAgdHN0cmlwbWU9IiRzdHJpcG1lIgorCSAgY2FzZSAkaG9zdF9vcyBpbgorCSAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorCSAgICBjYXNlICRyZWFsbmFtZSBpbgorCSAgICAqLmRsbC5hKQorCSAgICAgIHRzdHJpcG1lPSIiCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCSAgZXNhYworCSAgaWYgdGVzdCAtbiAiJHRzdHJpcG1lIiAmJiB0ZXN0IC1uICIkc3RyaXBsaWIiOyB0aGVuCisJICAgIGZ1bmNfc2hvd19ldmFsICIkc3RyaXBsaWIgJGRlc3RkaXIvJHJlYWxuYW1lIiAnZXhpdCAkPycKKwkgIGZpCisKKwkgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgorCSAgICAjIERlbGV0ZSB0aGUgb2xkIHN5bWxpbmtzLCBhbmQgY3JlYXRlIG5ldyBvbmVzLgorCSAgICAjIFRyeSBgbG4gLXNmJyBmaXJzdCwgYmVjYXVzZSB0aGUgYGxuJyBiaW5hcnkgbWlnaHQgZGVwZW5kIG9uCisJICAgICMgdGhlIHN5bWxpbmsgd2UgcmVwbGFjZSEgIFNvbGFyaXMgL2Jpbi9sbiBkb2VzIG5vdCB1bmRlcnN0YW5kIC1mLAorCSAgICAjIHNvIHdlIGFsc28gbmVlZCB0byB0cnkgcm0gJiYgbG4gLXMuCisJICAgIGZvciBsaW5rbmFtZQorCSAgICBkbworCSAgICAgIHRlc3QgIiRsaW5rbmFtZSIgIT0gIiRyZWFsbmFtZSIgXAorCQkmJiBmdW5jX3Nob3dfZXZhbCAiKGNkICRkZXN0ZGlyICYmIHsgJExOX1MgLWYgJHJlYWxuYW1lICRsaW5rbmFtZSB8fCB7ICRSTSAkbGlua25hbWUgJiYgJExOX1MgJHJlYWxuYW1lICRsaW5rbmFtZTsgfTsgfSkiCisJICAgIGRvbmUKKwkgIGZpCisKKwkgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0aW5zdGFsbCBjb21tYW5kcy4KKwkgIGxpYj0iJGRlc3RkaXIvJHJlYWxuYW1lIgorCSAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0aW5zdGFsbF9jbWRzIiAnZXhpdCAkPycKKwlmaQorCisJIyBJbnN0YWxsIHRoZSBwc2V1ZG8tbGlicmFyeSBmb3IgaW5mb3JtYXRpb24gcHVycG9zZXMuCisJZnVuY19iYXNlbmFtZSAiJGZpbGUiCisJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCWluc3RuYW1lPSIkZGlyLyRuYW1lImkKKwlmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyAkaW5zdG5hbWUgJGRlc3RkaXIvJG5hbWUiICdleGl0ICQ/JworCisJIyBNYXliZSBpbnN0YWxsIHRoZSBzdGF0aWMgbGlicmFyeSwgdG9vLgorCXRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgc3RhdGljbGlicz0iJHN0YXRpY2xpYnMgJGRpci8kb2xkX2xpYnJhcnkiCisJOzsKKworICAgICAgKi5sbykKKwkjIEluc3RhbGwgKGkuZS4gY29weSkgYSBsaWJ0b29sIG9iamVjdC4KKworCSMgRmlndXJlIG91dCBkZXN0aW5hdGlvbiBmaWxlIG5hbWUsIGlmIGl0IHdhc24ndCBhbHJlYWR5IHNwZWNpZmllZC4KKwlpZiB0ZXN0IC1uICIkZGVzdG5hbWUiOyB0aGVuCisJICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RuYW1lIgorCWVsc2UKKwkgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorCSAgZGVzdGZpbGU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdGZpbGUiCisJZmkKKworCSMgRGVkdWNlIHRoZSBuYW1lIG9mIHRoZSBkZXN0aW5hdGlvbiBvbGQtc3R5bGUgb2JqZWN0IGZpbGUuCisJY2FzZSAkZGVzdGZpbGUgaW4KKwkqLmxvKQorCSAgZnVuY19sbzJvICIkZGVzdGZpbGUiCisJICBzdGF0aWNkZXN0PSRmdW5jX2xvMm9fcmVzdWx0CisJICA7OworCSouJG9iamV4dCkKKwkgIHN0YXRpY2Rlc3Q9IiRkZXN0ZmlsZSIKKwkgIGRlc3RmaWxlPQorCSAgOzsKKwkqKQorCSAgZnVuY19mYXRhbF9oZWxwICJjYW5ub3QgY29weSBhIGxpYnRvb2wgb2JqZWN0IHRvIFxgJGRlc3RmaWxlJyIKKwkgIDs7CisJZXNhYworCisJIyBJbnN0YWxsIHRoZSBsaWJ0b29sIG9iamVjdCBpZiByZXF1ZXN0ZWQuCisJdGVzdCAtbiAiJGRlc3RmaWxlIiAmJiBcCisJICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyAkZmlsZSAkZGVzdGZpbGUiICdleGl0ICQ/JworCisJIyBJbnN0YWxsIHRoZSBvbGQgb2JqZWN0IGlmIGVuYWJsZWQuCisJaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorCSAgIyBEZWR1Y2UgdGhlIG5hbWUgb2YgdGhlIG9sZC1zdHlsZSBvYmplY3QgZmlsZS4KKwkgIGZ1bmNfbG8ybyAiJGZpbGUiCisJICBzdGF0aWNvYmo9JGZ1bmNfbG8yb19yZXN1bHQKKwkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nIFwkc3RhdGljb2JqIFwkc3RhdGljZGVzdCIgJ2V4aXQgJD8nCisJZmkKKwlleGl0ICRFWElUX1NVQ0NFU1MKKwk7OworCisgICAgICAqKQorCSMgRmlndXJlIG91dCBkZXN0aW5hdGlvbiBmaWxlIG5hbWUsIGlmIGl0IHdhc24ndCBhbHJlYWR5IHNwZWNpZmllZC4KKwlpZiB0ZXN0IC1uICIkZGVzdG5hbWUiOyB0aGVuCisJICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RuYW1lIgorCWVsc2UKKwkgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorCSAgZGVzdGZpbGU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdGZpbGUiCisJZmkKKworCSMgSWYgdGhlIGZpbGUgaXMgbWlzc2luZywgYW5kIHRoZXJlIGlzIGEgLmV4ZSBvbiB0aGUgZW5kLCBzdHJpcCBpdAorCSMgYmVjYXVzZSBpdCBpcyBtb3N0IGxpa2VseSBhIGxpYnRvb2wgc2NyaXB0IHdlIGFjdHVhbGx5IHdhbnQgdG8KKwkjIGluc3RhbGwKKwlzdHJpcHBlZF9leHQ9IiIKKwljYXNlICRmaWxlIGluCisJICAqLmV4ZSkKKwkgICAgaWYgdGVzdCAhIC1mICIkZmlsZSI7IHRoZW4KKwkgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgorCSAgICAgIGZpbGU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICAgIHN0cmlwcGVkX2V4dD0iLmV4ZSIKKwkgICAgZmkKKwkgICAgOzsKKwllc2FjCisKKwkjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyByZWFsbHkgYSBsaWJ0b29sIHByb2dyYW0uCisJY2FzZSAkaG9zdCBpbgorCSpjeWd3aW4qIHwgKm1pbmd3KikKKwkgICAgaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRoZW4KKwkgICAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKKwkgICAgICB3cmFwcGVyPSRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICBlbHNlCisJICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZmlsZSIKKwkgICAgICB3cmFwcGVyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgZmkKKwkgICAgOzsKKwkqKQorCSAgICB3cmFwcGVyPSRmaWxlCisJICAgIDs7CisJZXNhYworCWlmIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkd3JhcHBlciI7IHRoZW4KKwkgIG5vdGluc3RfZGVwbGlicz0KKwkgIHJlbGlua19jb21tYW5kPQorCisJICBmdW5jX3NvdXJjZSAiJHdyYXBwZXIiCisKKwkgICMgQ2hlY2sgdGhlIHZhcmlhYmxlcyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gc2V0LgorCSAgdGVzdCAteiAiJGdlbmVyYXRlZF9ieV9saWJ0b29sX3ZlcnNpb24iICYmIFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IFxgJHdyYXBwZXInIgorCisJICBmaW5hbGl6ZT15ZXMKKwkgIGZvciBsaWIgaW4gJG5vdGluc3RfZGVwbGliczsgZG8KKwkgICAgIyBDaGVjayB0byBzZWUgdGhhdCBlYWNoIGxpYnJhcnkgaXMgaW5zdGFsbGVkLgorCSAgICBsaWJkaXI9CisJICAgIGlmIHRlc3QgLWYgIiRsaWIiOyB0aGVuCisJICAgICAgZnVuY19zb3VyY2UgIiRsaWIiCisJICAgIGZpCisJICAgIGxpYmZpbGU9IiRsaWJkaXIvImAkRUNITyAiWCRsaWIiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlZydgICMjIyB0ZXN0c3VpdGU6IHNraXAgbmVzdGVkIHF1b3RpbmcgdGVzdAorCSAgICBpZiB0ZXN0IC1uICIkbGliZGlyIiAmJiB0ZXN0ICEgLWYgIiRsaWJmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfd2FybmluZyAiXGAkbGliJyBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluIFxgJGxpYmRpciciCisJICAgICAgZmluYWxpemU9bm8KKwkgICAgZmkKKwkgIGRvbmUKKworCSAgcmVsaW5rX2NvbW1hbmQ9CisJICBmdW5jX3NvdXJjZSAiJHdyYXBwZXIiCisKKwkgIG91dHB1dG5hbWU9CisJICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IG5vICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICBpZiB0ZXN0ICIkZmluYWxpemUiID0geWVzOyB0aGVuCisJICAgICAgICB0bXBkaXI9YGZ1bmNfbWt0ZW1wZGlyYAorCQlmdW5jX2Jhc2VuYW1lICIkZmlsZSRzdHJpcHBlZF9leHQiCisJCWZpbGU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgICAgIG91dHB1dG5hbWU9IiR0bXBkaXIvJGZpbGUiCisJICAgICAgICAjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisJICAgICAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIlgkcmVsaW5rX2NvbW1hbmQiIHwgJFhzZWQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0bmFtZSInJWcnYAorCisJICAgICAgICAkb3B0X3NpbGVudCB8fCB7CisJICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJHJlbGlua19jb21tYW5kIgorCQkgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKwkgICAgICAgIH0KKwkgICAgICAgIGlmIGV2YWwgIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4gOgorCSAgICAgICAgICBlbHNlCisJCSAgZnVuY19lcnJvciAiZXJyb3I6IHJlbGluayBcYCRmaWxlJyB3aXRoIHRoZSBhYm92ZSBjb21tYW5kIGJlZm9yZSBpbnN0YWxsaW5nIGl0IgorCQkgICRvcHRfZHJ5X3J1biB8fCAke1JNfXIgIiR0bXBkaXIiCisJCSAgY29udGludWUKKwkgICAgICAgIGZpCisJICAgICAgICBmaWxlPSIkb3V0cHV0bmFtZSIKKwkgICAgICBlbHNlCisJICAgICAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCByZWxpbmsgXGAkZmlsZSciCisJICAgICAgZmkKKwkgICAgfQorCSAgZWxzZQorCSAgICAjIEluc3RhbGwgdGhlIGJpbmFyeSB0aGF0IHdlIGNvbXBpbGVkIGVhcmxpZXIuCisJICAgIGZpbGU9YCRFQ0hPICJYJGZpbGUkc3RyaXBwZWRfZXh0IiB8ICRYc2VkIC1lICJzJVwoW14vXSpcKSQlJG9iamRpci9cMSUiYAorCSAgZmkKKwlmaQorCisJIyByZW1vdmUgLmV4ZSBzaW5jZSBjeWd3aW4gL3Vzci9iaW4vaW5zdGFsbCB3aWxsIGFwcGVuZCBhbm90aGVyCisJIyBvbmUgYW55d2F5CisJY2FzZSAkaW5zdGFsbF9wcm9nLCRob3N0IGluCisJKi91c3IvYmluL2luc3RhbGwqLCpjeWd3aW4qKQorCSAgY2FzZSAkZmlsZTokZGVzdGZpbGUgaW4KKwkgICouZXhlOiouZXhlKQorCSAgICAjIHRoaXMgaXMgb2sKKwkgICAgOzsKKwkgICouZXhlOiopCisJICAgIGRlc3RmaWxlPSRkZXN0ZmlsZS5leGUKKwkgICAgOzsKKwkgICo6Ki5leGUpCisJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGRlc3RmaWxlIgorCSAgICBkZXN0ZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKwlmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZ1wkc3RyaXBtZSBcJGZpbGUgXCRkZXN0ZmlsZSIgJ2V4aXQgJD8nCisJJG9wdF9kcnlfcnVuIHx8IGlmIHRlc3QgLW4gIiRvdXRwdXRuYW1lIjsgdGhlbgorCSAgJHtSTX1yICIkdG1wZGlyIgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisKKyAgICBmb3IgZmlsZSBpbiAkc3RhdGljbGliczsgZG8KKyAgICAgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorICAgICAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCisgICAgICAjIFNldCB1cCB0aGUgcmFubGliIHBhcmFtZXRlcnMuCisgICAgICBvbGRsaWI9IiRkZXN0ZGlyLyRuYW1lIgorCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyBcJGZpbGUgXCRvbGRsaWIiICdleGl0ICQ/JworCisgICAgICBpZiB0ZXN0IC1uICIkc3RyaXBtZSIgJiYgdGVzdCAtbiAiJG9sZF9zdHJpcGxpYiI7IHRoZW4KKwlmdW5jX3Nob3dfZXZhbCAiJG9sZF9zdHJpcGxpYiAkb2xkbGliIiAnZXhpdCAkPycKKyAgICAgIGZpCisKKyAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0aW5zdGFsbCBjb21tYW5kcy4KKyAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiICdleGl0ICQ/JworICAgIGRvbmUKKworICAgIHRlc3QgLW4gIiRmdXR1cmVfbGliZGlycyIgJiYgXAorICAgICAgZnVuY193YXJuaW5nICJyZW1lbWJlciB0byBydW4gXGAkcHJvZ25hbWUgLS1maW5pc2gkZnV0dXJlX2xpYmRpcnMnIgorCisgICAgaWYgdGVzdCAtbiAiJGN1cnJlbnRfbGliZGlycyI7IHRoZW4KKyAgICAgICMgTWF5YmUganVzdCBkbyBhIGRyeSBydW4uCisgICAgICAkb3B0X2RyeV9ydW4gJiYgY3VycmVudF9saWJkaXJzPSIgLW4kY3VycmVudF9saWJkaXJzIgorICAgICAgZXhlY19jbWQ9JyRTSEVMTCAkcHJvZ3BhdGggJHByZXNlcnZlX2FyZ3MgLS1maW5pc2gkY3VycmVudF9saWJkaXJzJworICAgIGVsc2UKKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgIGZpCit9CisKK3Rlc3QgIiRtb2RlIiA9IGluc3RhbGwgJiYgZnVuY19tb2RlX2luc3RhbGwgJHsxKyIkQCJ9CisKKworIyBmdW5jX2dlbmVyYXRlX2Rsc3ltcyBvdXRwdXRuYW1lIG9yaWdpbmF0b3IgcGljX3AKKyMgRXh0cmFjdCBzeW1ib2xzIGZyb20gZGxwcmVmaWxlcyBhbmQgY3JlYXRlICR7b3V0cHV0bmFtZX1TLm8gd2l0aAorIyBhIGRscHJlb3BlbiBzeW1ib2wgdGFibGUuCitmdW5jX2dlbmVyYXRlX2Rsc3ltcyAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBteV9vdXRwdXRuYW1lPSIkMSIKKyAgICBteV9vcmlnaW5hdG9yPSIkMiIKKyAgICBteV9waWNfcD0iJHszLW5vfSIKKyAgICBteV9wcmVmaXg9YCRFQ0hPICIkbXlfb3JpZ2luYXRvciIgfCBzZWQgJ3MlW15hLXpBLVowLTldJV8lZydgCisgICAgbXlfZGxzeW1zPQorCisgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KKyAgICAgIGlmIHRlc3QgLW4gIiROTSIgJiYgdGVzdCAtbiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKwlteV9kbHN5bXM9IiR7bXlfb3V0cHV0bmFtZX1TLmMiCisgICAgICBlbHNlCisJZnVuY19lcnJvciAibm90IGNvbmZpZ3VyZWQgdG8gZXh0cmFjdCBnbG9iYWwgc3ltYm9scyBmcm9tIGRscHJlb3BlbmVkIGZpbGVzIgorICAgICAgZmkKKyAgICBmaQorCisgICAgaWYgdGVzdCAtbiAiJG15X2Rsc3ltcyI7IHRoZW4KKyAgICAgIGNhc2UgJG15X2Rsc3ltcyBpbgorICAgICAgIiIpIDs7CisgICAgICAqLmMpCisJIyBEaXNjb3ZlciB0aGUgbmxpc3Qgb2YgZWFjaCBvZiB0aGUgZGxmaWxlcy4KKwlubGlzdD0iJG91dHB1dF9vYmpkaXIvJHtteV9vdXRwdXRuYW1lfS5ubSIKKworCWZ1bmNfc2hvd19ldmFsICIkUk0gJG5saXN0ICR7bmxpc3R9UyAke25saXN0fVQiCisKKwkjIFBhcnNlIHRoZSBuYW1lIGxpc3QgaW50byBhIHNvdXJjZSBmaWxlLgorCWZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKKworCSRvcHRfZHJ5X3J1biB8fCAkRUNITyA+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorLyogJG15X2Rsc3ltcyAtIHN5bWJvbCByZXNvbHV0aW9uIHRhYmxlIGZvciBcYCRteV9vdXRwdXRuYW1lJyBkbHN5bSBlbXVsYXRpb24uICovCisvKiBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuIFwiQ1wiIHsKKyNlbmRpZgorCisvKiBFeHRlcm5hbCBzeW1ib2wgZGVjbGFyYXRpb25zIGZvciB0aGUgY29tcGlsZXIuICovXAorIgorCisJaWYgdGVzdCAiJGRsc2VsZiIgPSB5ZXM7IHRoZW4KKwkgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgXGAkb3V0cHV0JyIKKworCSAgJG9wdF9kcnlfcnVuIHx8IGVjaG8gJzogQFBST0dSQU1AICcgPiAiJG5saXN0IgorCisJICAjIEFkZCBvdXIgb3duIHByb2dyYW0gb2JqZWN0cyB0byB0aGUgc3ltYm9sIGxpc3QuCisJICBwcm9nZmlsZXM9YCRFQ0hPICJYJG9ianMkb2xkX2RlcGxpYnMiIHwgJFNQMk5MIHwgJFhzZWQgLWUgIiRsbzJvIiB8ICROTDJTUGAKKwkgIGZvciBwcm9nZmlsZSBpbiAkcHJvZ2ZpbGVzOyBkbworCSAgICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tIFxgJHByb2dmaWxlJyIKKwkgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiROTSAkcHJvZ2ZpbGUgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorCSAgZG9uZQorCisJICBpZiB0ZXN0IC1uICIkZXhjbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgIGV2YWwgJyRFR1JFUCAtdiAiICgkZXhjbHVkZV9leHBzeW1zKSQiICIkbmxpc3QiID4gIiRubGlzdCJUJworCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCisJICAgIH0KKwkgIGZpCisKKwkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICBldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRubGlzdCIgPiAiJG5saXN0IlQnCisJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKwkgICAgfQorCSAgZmkKKworCSAgIyBQcmVwYXJlIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMKKwkgIGlmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9scyI7IHRoZW4KKwkgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIKKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICAkUk0gJGV4cG9ydF9zeW1ib2xzCisJICAgICAgZXZhbCAiJHtTRUR9IC1uIC1lICcvXjogQFBST0dSQU1AICQvZCcgLWUgJ3MvXi4qIFwoLipcKSQvXDEvcCcgIic8ICIkbmxpc3QiID4gIiRleHBvcnRfc3ltYm9scyInCisJICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorICAgICAgICAgICAgICAgIGV2YWwgImVjaG8gRVhQT1JUUyAiJz4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisgICAgICAgICAgICAgICAgZXZhbCAnY2F0ICIkZXhwb3J0X3N5bWJvbHMiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworCSAgICAgICAgOzsKKwkgICAgICBlc2FjCisJICAgIH0KKwkgIGVsc2UKKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICBldmFsICIke1NFRH0gLWUgJ3MvXChbXS5bKl4kXVwpL1xcXFxcMS9nJyAtZSAncy9eLyAvJyAtZSAncy8kLyQvJyInIDwgIiRleHBvcnRfc3ltYm9scyIgPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIicKKwkgICAgICBldmFsICckR1JFUCAtZiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIiA8ICIkbmxpc3QiID4gIiRubGlzdCJUJworCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCisJICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICAgKmN5Z3dpbiB8ICptaW5ndyogfCAqY2VnY2MqICkKKwkgICAgICAgICAgZXZhbCAiZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKwkgICAgICAgICAgZXZhbCAnY2F0ICIkbmxpc3QiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworCSAgICAgICAgICA7OworCSAgICAgIGVzYWMKKwkgICAgfQorCSAgZmkKKwlmaQorCisJZm9yIGRscHJlZmlsZSBpbiAkZGxwcmVmaWxlczsgZG8KKwkgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkZGxwcmVmaWxlJyIKKwkgIGZ1bmNfYmFzZW5hbWUgIiRkbHByZWZpbGUiCisJICBuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJworCSAgICBldmFsICIkTk0gJGRscHJlZmlsZSAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisJICB9CisJZG9uZQorCisJJG9wdF9kcnlfcnVuIHx8IHsKKwkgICMgTWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgYW4gZW1wdHkgZmlsZS4KKwkgIHRlc3QgLWYgIiRubGlzdCIgfHwgOiA+ICIkbmxpc3QiCisKKwkgIGlmIHRlc3QgLW4gIiRleGNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAgICRFR1JFUCAtdiAiICgkZXhjbHVkZV9leHBzeW1zKSQiICIkbmxpc3QiID4gIiRubGlzdCJUCisJICAgICRNViAiJG5saXN0IlQgIiRubGlzdCIKKwkgIGZpCisKKwkgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCisJICBpZiAkR1JFUCAtdiAiXjogIiA8ICIkbmxpc3QiIHwKKwkgICAgICBpZiBzb3J0IC1rIDMgPC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJc29ydCAtayAzCisJICAgICAgZWxzZQorCQlzb3J0ICsyCisJICAgICAgZmkgfAorCSAgICAgIHVuaXEgPiAiJG5saXN0IlM7IHRoZW4KKwkgICAgOgorCSAgZWxzZQorCSAgICAkR1JFUCAtdiAiXjogIiA8ICIkbmxpc3QiID4gIiRubGlzdCJTCisJICBmaQorCisJICBpZiB0ZXN0IC1mICIkbmxpc3QiUzsgdGhlbgorCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCJTID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIicKKwkgIGVsc2UKKwkgICAgJEVDSE8gJy8qIE5PTkUgKi8nID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCSAgZmkKKworCSAgJEVDSE8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisKKy8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgdm9pZCAqYWRkcmVzczsKK30gbHRfZGxzeW1saXN0OworIgorCSAgY2FzZSAkaG9zdCBpbgorCSAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisJICAgICRFQ0hPID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZQorICAgcnVudGltZSByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24KKyAgIG9uIHBzZXVkby1yZWxvY3MuICAqLyIKKwkgICAgbHRfZGxzeW1fY29uc3Q9IDs7CisJICAqb3NmNSopCisJICAgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhICovIgorCSAgICBsdF9kbHN5bV9jb25zdD0gOzsKKwkgICopCisJICAgIGx0X2Rsc3ltX2NvbnN0PWNvbnN0IDs7CisJICBlc2FjCisKKwkgICRFQ0hPID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorZXh0ZXJuICRsdF9kbHN5bV9jb25zdCBsdF9kbHN5bWxpc3QKK2x0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXTsKKyRsdF9kbHN5bV9jb25zdCBsdF9kbHN5bWxpc3QKK2x0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXSA9Cit7XAorICB7IFwiJG15X29yaWdpbmF0b3JcIiwgKHZvaWQgKikgMCB9LCIKKworCSAgY2FzZSAkbmVlZF9saWJfcHJlZml4IGluCisJICBubykKKwkgICAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIDwgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisJICAgIDs7CisJICAqKQorCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiA8ICIkbmxpc3QiID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCSAgICA7OworCSAgZXNhYworCSAgJEVDSE8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisgIHswLCAodm9pZCAqKSAwfQorfTsKKworLyogVGhpcyB3b3JrcyBhcm91bmQgYSBwcm9ibGVtIGluIEZyZWVCU0QgbGlua2VyICovCisjaWZkZWYgRlJFRUJTRF9XT1JLQVJPVU5ECitzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworICByZXR1cm4gbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sczsKK30KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZlwKKyIKKwl9ICMgISRvcHRfZHJ5X3J1bgorCisJcGljX2ZsYWdfZm9yX3N5bXRhYmxlPQorCWNhc2UgIiRjb21waWxlX2NvbW1hbmQgIiBpbgorCSoiIC1zdGF0aWMgIiopIDs7CisJKikKKwkgIGNhc2UgJGhvc3QgaW4KKwkgICMgY29tcGlsaW5nIHRoZSBzeW1ib2wgdGFibGUgZmlsZSB3aXRoIHBpY19mbGFnIHdvcmtzIGFyb3VuZAorCSAgIyBhIEZyZWVCU0QgYnVnIHRoYXQgY2F1c2VzIHByb2dyYW1zIHRvIGNyYXNoIHdoZW4gLWxtIGlzCisJICAjIGxpbmtlZCBiZWZvcmUgYW55IG90aGVyIFBJQyBvYmplY3QuICBCdXQgd2UgbXVzdCBub3QgdXNlCisJICAjIHBpY19mbGFnIHdoZW4gbGlua2luZyB3aXRoIC1zdGF0aWMuICBUaGUgcHJvYmxlbSBleGlzdHMgaW4KKwkgICMgRnJlZUJTRCAyLjIuNiBhbmQgaXMgZml4ZWQgaW4gRnJlZUJTRCAzLjEuCisJICAqLSotZnJlZWJzZDIqfCotKi1mcmVlYnNkMy4wKnwqLSotZnJlZWJzZGVsZjMuMCopCisJICAgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyAtREZSRUVCU0RfV09SS0FST1VORCIgOzsKKwkgICotKi1ocHV4KikKKwkgICAgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIiAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgIlgkbXlfcGljX3AiICE9IFhubzsgdGhlbgorCSAgICAgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyIKKwkgICAgZmkKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCXN5bXRhYl9jZmxhZ3M9CisJZm9yIGFyZyBpbiAkTFRDRkxBR1M7IGRvCisJICBjYXNlICRhcmcgaW4KKwkgIC1waWUgfCAtZnBpZSB8IC1mUElFKSA7OworCSAgKikgc3ltdGFiX2NmbGFncz0iJHN5bXRhYl9jZmxhZ3MgJGFyZyIgOzsKKwkgIGVzYWMKKwlkb25lCisKKwkjIE5vdyBjb21waWxlIHRoZSBkeW5hbWljIHN5bWJvbCBmaWxlLgorCWZ1bmNfc2hvd19ldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJExUQ0Mkc3ltdGFiX2NmbGFncyAtYyRub19idWlsdGluX2ZsYWckcGljX2ZsYWdfZm9yX3N5bXRhYmxlICIkbXlfZGxzeW1zIiknICdleGl0ICQ/JworCisJIyBDbGVhbiB1cCB0aGUgZ2VuZXJhdGVkIGZpbGVzLgorCWZ1bmNfc2hvd19ldmFsICckUk0gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICIkbmxpc3QiICIke25saXN0fVMiICIke25saXN0fVQiJworCisJIyBUcmFuc2Zvcm0gdGhlIHN5bWJvbCBmaWxlIGludG8gdGhlIGNvcnJlY3QgbmFtZS4KKwlzeW1maWxlb2JqPSIkb3V0cHV0X29iamRpci8ke215X291dHB1dG5hbWV9Uy4kb2JqZXh0IgorCWNhc2UgJGhvc3QgaW4KKwkqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKwkgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLmRlZiI7IHRoZW4KKwkgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiWCRjb21waWxlX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQFNZTUZJTEVAJSRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLmRlZiAkc3ltZmlsZW9iaiUiYAorCSAgICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiWCRmaW5hbGl6ZV9jb21tYW5kIiB8ICRYc2VkIC1lICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYgJHN5bWZpbGVvYmolImAKKwkgIGVsc2UKKwkgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiWCRjb21waWxlX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisJICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisJICBmaQorCSAgOzsKKwkqKQorCSAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiWCRjb21waWxlX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisJICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiWCRmaW5hbGl6ZV9jb21tYW5kIiB8ICRYc2VkIC1lICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAorCSAgOzsKKwllc2FjCisJOzsKKyAgICAgICopCisJZnVuY19mYXRhbF9lcnJvciAidW5rbm93biBzdWZmaXggZm9yIFxgJG15X2Rsc3ltcyciCisJOzsKKyAgICAgIGVzYWMKKyAgICBlbHNlCisgICAgICAjIFdlIGtlZXAgZ29pbmcganVzdCBpbiBjYXNlIHRoZSB1c2VyIGRpZG4ndCByZWZlciB0bworICAgICAgIyBsdF9wcmVsb2FkZWRfc3ltYm9scy4gIFRoZSBsaW5rZXIgd2lsbCBmYWlsIGlmIGdsb2JhbF9zeW1ib2xfcGlwZQorICAgICAgIyByZWFsbHkgd2FzIHJlcXVpcmVkLgorCisgICAgICAjIE51bGxpZnkgdGhlIHN5bWJvbCBmaWxlLgorICAgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiWCRjb21waWxlX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlIEBTWU1GSUxFQCUlImAKKyAgICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlIEBTWU1GSUxFQCUlImAKKyAgICBmaQorfQorCisjIGZ1bmNfd2luMzJfbGliaWQgYXJnCisjIHJldHVybiB0aGUgbGlicmFyeSB0eXBlIG9mIGZpbGUgJ2FyZycKKyMKKyMgTmVlZCBhIGxvdCBvZiBnb28gdG8gaGFuZGxlICpib3RoKiBETExzIGFuZCBpbXBvcnQgbGlicworIyBIYXMgdG8gYmUgYSBzaGVsbCBmdW5jdGlvbiBpbiBvcmRlciB0byAnZWF0JyB0aGUgYXJndW1lbnQKKyMgdGhhdCBpcyBzdXBwbGllZCB3aGVuICRmaWxlX21hZ2ljX2NvbW1hbmQgaXMgY2FsbGVkLgorZnVuY193aW4zMl9saWJpZCAoKQoreworICAkb3B0X2RlYnVnCisgIHdpbjMyX2xpYmlkX3R5cGU9InVua25vd24iCisgIHdpbjMyX2ZpbGVyZXM9YGZpbGUgLUwgJDEgMj4vZGV2L251bGxgCisgIGNhc2UgJHdpbjMyX2ZpbGVyZXMgaW4KKyAgKmFyXCBhcmNoaXZlXCBpbXBvcnRcIGxpYnJhcnkqKSAjIGRlZmluaXRlbHkgaW1wb3J0CisgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgaW1wb3J0IgorICAgIDs7CisgICphclwgYXJjaGl2ZSopICMgY291bGQgYmUgYW4gaW1wb3J0LCBvciBzdGF0aWMKKyAgICBpZiBldmFsICRPQkpEVU1QIC1mICQxIHwgJFNFRCAtZSAnMTBxJyAyPi9kZXYvbnVsbCB8CisgICAgICAgJEVHUkVQICdmaWxlIGZvcm1hdCBwZS1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nID4vZGV2L251bGwgOyB0aGVuCisgICAgICB3aW4zMl9ubXJlcz1gZXZhbCAkTk0gLWYgcG9zaXggLUEgJDEgfAorCSRTRUQgLW4gLWUgJworCSAgICAxLDEwMHsKKwkJLyBJIC97CisJCSAgICBzLC4qLGltcG9ydCwKKwkJICAgIHAKKwkJICAgIHEKKwkJfQorCSAgICB9J2AKKyAgICAgIGNhc2UgJHdpbjMyX25tcmVzIGluCisgICAgICBpbXBvcnQqKSAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgaW1wb3J0Ijs7CisgICAgICAqKSAgICAgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgc3RhdGljIjs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICA7OworICAqRExMKikKKyAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgRExMIgorICAgIDs7CisgICpleGVjdXRhYmxlKikgIyBidXQgc2hlbGwgc2NyaXB0cyBhcmUgImV4ZWN1dGFibGUiIHRvby4uLgorICAgIGNhc2UgJHdpbjMyX2ZpbGVyZXMgaW4KKyAgICAqTVNcIFdpbmRvd3NcIFBFXCBJbnRlbCopCisgICAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgRExMIgorICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICAkRUNITyAiJHdpbjMyX2xpYmlkX3R5cGUiCit9CisKKworCisjIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlIGRpciBvbGRsaWIKK2Z1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIGZfZXhfYW5fYXJfZGlyPSIkMSI7IHNoaWZ0CisgICAgZl9leF9hbl9hcl9vbGRsaWI9IiQxIgorICAgIGZ1bmNfc2hvd19ldmFsICIoY2QgXCRmX2V4X2FuX2FyX2RpciAmJiAkQVIgeCBcIlwkZl9leF9hbl9hcl9vbGRsaWJcIikiICdleGl0ICQ/JworICAgIGlmICgkQVIgdCAiJGZfZXhfYW5fYXJfb2xkbGliIiB8IHNvcnQgfCBzb3J0IC11YyA+L2Rldi9udWxsIDI+JjEpOyB0aGVuCisgICAgIDoKKyAgICBlbHNlCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJvYmplY3QgbmFtZSBjb25mbGljdHMgaW4gYXJjaGl2ZTogJGZfZXhfYW5fYXJfZGlyLyRmX2V4X2FuX2FyX29sZGxpYiIKKyAgICBmaQorfQorCisKKyMgZnVuY19leHRyYWN0X2FyY2hpdmVzIGdlbnRvcCBvbGRsaWIgLi4uCitmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgbXlfZ2VudG9wPSIkMSI7IHNoaWZ0CisgICAgbXlfb2xkbGlicz0kezErIiRAIn0KKyAgICBteV9vbGRvYmpzPSIiCisgICAgbXlfeGxpYj0iIgorICAgIG15X3hhYnM9IiIKKyAgICBteV94ZGlyPSIiCisKKyAgICBmb3IgbXlfeGxpYiBpbiAkbXlfb2xkbGliczsgZG8KKyAgICAgICMgRXh0cmFjdCB0aGUgb2JqZWN0cy4KKyAgICAgIGNhc2UgJG15X3hsaWIgaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIG15X3hhYnM9IiRteV94bGliIiA7OworCSopIG15X3hhYnM9YHB3ZGAiLyRteV94bGliIiA7OworICAgICAgZXNhYworICAgICAgZnVuY19iYXNlbmFtZSAiJG15X3hsaWIiCisgICAgICBteV94bGliPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgICBteV94bGliX3U9JG15X3hsaWIKKyAgICAgIHdoaWxlIDo7IGRvCisgICAgICAgIGNhc2UgIiAkZXh0cmFjdGVkX2FyY2hpdmVzICIgaW4KKwkqIiAkbXlfeGxpYl91ICIqKQorCSAgZnVuY19hcml0aCAkZXh0cmFjdGVkX3NlcmlhbCArIDEKKwkgIGV4dHJhY3RlZF9zZXJpYWw9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICBteV94bGliX3U9bHQkZXh0cmFjdGVkX3NlcmlhbC0kbXlfeGxpYiA7OworCSopIGJyZWFrIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgZXh0cmFjdGVkX2FyY2hpdmVzPSIkZXh0cmFjdGVkX2FyY2hpdmVzICRteV94bGliX3UiCisgICAgICBteV94ZGlyPSIkbXlfZ2VudG9wLyRteV94bGliX3UiCisKKyAgICAgIGZ1bmNfbWtkaXJfcCAiJG15X3hkaXIiCisKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICotZGFyd2luKikKKwlmdW5jX3ZlcmJvc2UgIkV4dHJhY3RpbmcgJG15X3hhYnMiCisJIyBEbyBub3QgYm90aGVyIGRvaW5nIGFueXRoaW5nIGlmIGp1c3QgYSBkcnkgcnVuCisJJG9wdF9kcnlfcnVuIHx8IHsKKwkgIGRhcndpbl9vcmlnX2Rpcj1gcHdkYAorCSAgY2QgJG15X3hkaXIgfHwgZXhpdCAkPworCSAgZGFyd2luX2FyY2hpdmU9JG15X3hhYnMKKwkgIGRhcndpbl9jdXJkaXI9YHB3ZGAKKwkgIGRhcndpbl9iYXNlX2FyY2hpdmU9YGJhc2VuYW1lICIkZGFyd2luX2FyY2hpdmUiYAorCSAgZGFyd2luX2FyY2hlcz1gJExJUE8gLWluZm8gIiRkYXJ3aW5fYXJjaGl2ZSIgMj4vZGV2L251bGwgfCAkR1JFUCBBcmNoaXRlY3R1cmVzIDI+L2Rldi9udWxsIHx8IHRydWVgCisJICBpZiB0ZXN0IC1uICIkZGFyd2luX2FyY2hlcyI7IHRoZW4KKwkgICAgZGFyd2luX2FyY2hlcz1gJEVDSE8gIiRkYXJ3aW5fYXJjaGVzIiB8ICRTRUQgLWUgJ3MvLiphcmU6Ly8nYAorCSAgICBkYXJ3aW5fYXJjaD0KKwkgICAgZnVuY192ZXJib3NlICIkZGFyd2luX2Jhc2VfYXJjaGl2ZSBoYXMgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAkZGFyd2luX2FyY2hlcyIKKwkgICAgZm9yIGRhcndpbl9hcmNoIGluICAkZGFyd2luX2FyY2hlcyA7IGRvCisJICAgICAgZnVuY19ta2Rpcl9wICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9IgorCSAgICAgICRMSVBPIC10aGluICRkYXJ3aW5fYXJjaCAtb3V0cHV0ICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9LyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iICIke2Rhcndpbl9hcmNoaXZlfSIKKwkgICAgICBjZCAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofSIKKwkgICAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiYHB3ZGAiICIke2Rhcndpbl9iYXNlX2FyY2hpdmV9IgorCSAgICAgIGNkICIkZGFyd2luX2N1cmRpciIKKwkgICAgICAkUk0gInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0vJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfSIKKwkgICAgZG9uZSAjICRkYXJ3aW5fYXJjaGVzCisgICAgICAgICAgICAjIyBPa2F5IG5vdyB3ZSd2ZSBhIGJ1bmNoIG9mIHRoaW4gb2JqZWN0cywgZ290dGEgZmF0dGVuIHRoZW0gdXAgOikKKwkgICAgZGFyd2luX2ZpbGVsaXN0PWBmaW5kIHVuZmF0LSQkIC10eXBlIGYgLW5hbWUgXCoubyAtcHJpbnQgLW8gLW5hbWUgXCoubG8gLXByaW50IHwgJFNFRCAtZSAiJGJhc2VuYW1lIiB8IHNvcnQgLXVgCisJICAgIGRhcndpbl9maWxlPQorCSAgICBkYXJ3aW5fZmlsZXM9CisJICAgIGZvciBkYXJ3aW5fZmlsZSBpbiAkZGFyd2luX2ZpbGVsaXN0OyBkbworCSAgICAgIGRhcndpbl9maWxlcz1gZmluZCB1bmZhdC0kJCAtbmFtZSAkZGFyd2luX2ZpbGUgLXByaW50IHwgJE5MMlNQYAorCSAgICAgICRMSVBPIC1jcmVhdGUgLW91dHB1dCAiJGRhcndpbl9maWxlIiAkZGFyd2luX2ZpbGVzCisJICAgIGRvbmUgIyAkZGFyd2luX2ZpbGVsaXN0CisJICAgICRSTSAtcmYgdW5mYXQtJCQKKwkgICAgY2QgIiRkYXJ3aW5fb3JpZ19kaXIiCisJICBlbHNlCisJICAgIGNkICRkYXJ3aW5fb3JpZ19kaXIKKwkgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgIiRteV94ZGlyIiAiJG15X3hhYnMiCisJICBmaSAjICRkYXJ3aW5fYXJjaGVzCisJfSAjICEkb3B0X2RyeV9ydW4KKwk7OworICAgICAgKikKKyAgICAgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgIiRteV94ZGlyIiAiJG15X3hhYnMiCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIG15X29sZG9ianM9IiRteV9vbGRvYmpzICJgZmluZCAkbXlfeGRpciAtbmFtZSBcKi4kb2JqZXh0IC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnQgfCAkTkwyU1BgCisgICAgZG9uZQorCisgICAgZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdD0iJG15X29sZG9ianMiCit9CisKKworCisjIGZ1bmNfZW1pdF93cmFwcGVyX3BhcnQxIFthcmc9bm9dCisjCisjIEVtaXQgdGhlIGZpcnN0IHBhcnQgb2YgYSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IG9uIHN0ZG91dC4KKyMgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgZGVzY3JpcHRpb24gYXNzb2NpYXRlZCB3aXRoCisjIGZ1bmNfZW1pdF93cmFwcGVyKCksIGJlbG93LgorZnVuY19lbWl0X3dyYXBwZXJfcGFydDEgKCkKK3sKKwlmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MV9hcmcxPW5vCisJaWYgdGVzdCAtbiAiJDEiIDsgdGhlbgorCSAgZnVuY19lbWl0X3dyYXBwZXJfcGFydDFfYXJnMT0kMQorCWZpCisKKwkkRUNITyAiXAorIyEgJFNIRUxMCisKKyMgJG91dHB1dCAtIHRlbXBvcmFyeSB3cmFwcGVyIHNjcmlwdCBmb3IgJG9iamRpci8kb3V0cHV0bmFtZQorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjCisjIFRoZSAkb3V0cHV0IHByb2dyYW0gY2Fubm90IGJlIGRpcmVjdGx5IGV4ZWN1dGVkIHVudGlsIGFsbCB0aGUgbGlidG9vbAorIyBsaWJyYXJpZXMgdGhhdCBpdCBkZXBlbmRzIG9uIGFyZSBpbnN0YWxsZWQuCisjCisjIFRoaXMgd3JhcHBlciBzY3JpcHQgc2hvdWxkIG5ldmVyIGJlIG1vdmVkIG91dCBvZiB0aGUgYnVpbGQgZGlyZWN0b3J5LgorIyBJZiBpdCBpcywgaXQgd2lsbCBub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKKyMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitYc2VkPScke1NFRH0gLWUgMXMvXlgvLycKK3NlZF9xdW90ZV9zdWJzdD0nJHNlZF9xdW90ZV9zdWJzdCcKKworIyBCZSBCb3VybmUgY29tcGF0aWJsZQoraWYgdGVzdCAtbiBcIlwke1pTSF9WRVJTSU9OK3NldH1cIiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uIFwkezErXCJcJEBcIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICdcJHsxK1wiXCRAXCJ9Jz0nXCJcJEBcIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBcYChzZXQgLW8pIDI+L2Rldi9udWxsXGAgaW4gKnBvc2l4Kikgc2V0IC1vIHBvc2l4OzsgZXNhYworZmkKK0JJTl9TSD14cGc0OyBleHBvcnQgQklOX1NIICMgZm9yIFRydTY0CitEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCisKKyMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0CisjIGlmIENEUEFUSCBpcyBzZXQuCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKK3JlbGlua19jb21tYW5kPVwiJHJlbGlua19jb21tYW5kXCIKKworIyBUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGRldGVybWluZXMgb3VyIG9wZXJhdGlvbiBtb2RlLgoraWYgdGVzdCBcIlwkbGlidG9vbF9pbnN0YWxsX21hZ2ljXCIgPSBcIiRtYWdpY1wiOyB0aGVuCisgICMgaW5zdGFsbCBtb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgorICBnZW5lcmF0ZWRfYnlfbGlidG9vbF92ZXJzaW9uPSckbWFjcm9fdmVyc2lvbicKKyAgbm90aW5zdF9kZXBsaWJzPSckbm90aW5zdF9kZXBsaWJzJworZWxzZQorICAjIFdoZW4gd2UgYXJlIHNvdXJjZWQgaW4gZXhlY3V0ZSBtb2RlLCBcJGZpbGUgYW5kIFwkRUNITyBhcmUgYWxyZWFkeSBzZXQuCisgIGlmIHRlc3QgXCJcJGxpYnRvb2xfZXhlY3V0ZV9tYWdpY1wiICE9IFwiJG1hZ2ljXCI7IHRoZW4KKyAgICBFQ0hPPVwiJHFlY2hvXCIKKyAgICBmaWxlPVwiXCQwXCIKKyAgICAjIE1ha2Ugc3VyZSBlY2hvIHdvcmtzLgorICAgIGlmIHRlc3QgXCJYXCQxXCIgPSBYLS1uby1yZWV4ZWM7IHRoZW4KKyAgICAgICMgRGlzY2FyZCB0aGUgLS1uby1yZWV4ZWMgZmxhZywgYW5kIGNvbnRpbnVlLgorICAgICAgc2hpZnQKKyAgICBlbGlmIHRlc3QgXCJYXGB7IFwkRUNITyAnXHQnOyB9IDI+L2Rldi9udWxsXGBcIiA9ICdYXHQnOyB0aGVuCisgICAgICAjIFlpcHBlZSwgXCRFQ0hPIHdvcmtzIQorICAgICAgOgorICAgIGVsc2UKKyAgICAgICMgUmVzdGFydCB1bmRlciB0aGUgY29ycmVjdCBzaGVsbCwgYW5kIHRoZW4gbWF5YmUgXCRFQ0hPIHdpbGwgd29yay4KKyAgICAgIGV4ZWMgJFNIRUxMIFwiXCQwXCIgLS1uby1yZWV4ZWMgXCR7MStcIlwkQFwifQorICAgIGZpCisgIGZpXAorIgorCSRFQ0hPICJcCisKKyAgIyBGaW5kIHRoZSBkaXJlY3RvcnkgdGhhdCB0aGlzIHNjcmlwdCBsaXZlcyBpbi4KKyAgdGhpc2Rpcj1cYFwkRUNITyBcIlhcJGZpbGVcIiB8IFwkWHNlZCAtZSAncyUvW14vXSokJSUnXGAKKyAgdGVzdCBcInhcJHRoaXNkaXJcIiA9IFwieFwkZmlsZVwiICYmIHRoaXNkaXI9LgorCisgICMgRm9sbG93IHN5bWJvbGljIGxpbmtzIHVudGlsIHdlIGdldCB0byB0aGUgcmVhbCB0aGlzZGlyLgorICBmaWxlPVxgbHMgLWxkIFwiXCRmaWxlXCIgfCAke1NFRH0gLW4gJ3MvLiotPiAvL3AnXGAKKyAgd2hpbGUgdGVzdCAtbiBcIlwkZmlsZVwiOyBkbworICAgIGRlc3RkaXI9XGBcJEVDSE8gXCJYXCRmaWxlXCIgfCBcJFhzZWQgLWUgJ3MlL1teL10qXCQlJSdcYAorCisgICAgIyBJZiB0aGVyZSB3YXMgYSBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGNoYW5nZSB0aGlzZGlyLgorICAgIGlmIHRlc3QgXCJ4XCRkZXN0ZGlyXCIgIT0gXCJ4XCRmaWxlXCI7IHRoZW4KKyAgICAgIGNhc2UgXCJcJGRlc3RkaXJcIiBpbgorICAgICAgW1xcXFwvXSogfCBbQS1aYS16XTpbXFxcXC9dKikgdGhpc2Rpcj1cIlwkZGVzdGRpclwiIDs7CisgICAgICAqKSB0aGlzZGlyPVwiXCR0aGlzZGlyL1wkZGVzdGRpclwiIDs7CisgICAgICBlc2FjCisgICAgZmkKKworICAgIGZpbGU9XGBcJEVDSE8gXCJYXCRmaWxlXCIgfCBcJFhzZWQgLWUgJ3MlXi4qLyUlJ1xgCisgICAgZmlsZT1cYGxzIC1sZCBcIlwkdGhpc2Rpci9cJGZpbGVcIiB8ICR7U0VEfSAtbiAncy8uKi0+IC8vcCdcYAorICBkb25lCisiCit9CisjIGVuZDogZnVuY19lbWl0X3dyYXBwZXJfcGFydDEKKworIyBmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MiBbYXJnPW5vXQorIworIyBFbWl0IHRoZSBzZWNvbmQgcGFydCBvZiBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgb24gc3Rkb3V0LgorIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBkZXNjcmlwdGlvbiBhc3NvY2lhdGVkIHdpdGgKKyMgZnVuY19lbWl0X3dyYXBwZXIoKSwgYmVsb3cuCitmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MiAoKQoreworCWZ1bmNfZW1pdF93cmFwcGVyX3BhcnQyX2FyZzE9bm8KKwlpZiB0ZXN0IC1uICIkMSIgOyB0aGVuCisJICBmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0Ml9hcmcxPSQxCisJZmkKKworCSRFQ0hPICJcCisKKyAgIyBVc3VhbGx5ICdubycsIGV4Y2VwdCBvbiBjeWd3aW4vbWluZ3cgd2hlbiBlbWJlZGRlZCBpbnRvCisgICMgdGhlIGN3cmFwcGVyLgorICBXUkFQUEVSX1NDUklQVF9CRUxPTkdTX0lOX09CSkRJUj0kZnVuY19lbWl0X3dyYXBwZXJfcGFydDJfYXJnMQorICBpZiB0ZXN0IFwiXCRXUkFQUEVSX1NDUklQVF9CRUxPTkdTX0lOX09CSkRJUlwiID0gXCJ5ZXNcIjsgdGhlbgorICAgICMgc3BlY2lhbCBjYXNlIGZvciAnLicKKyAgICBpZiB0ZXN0IFwiXCR0aGlzZGlyXCIgPSBcIi5cIjsgdGhlbgorICAgICAgdGhpc2Rpcj1cYHB3ZFxgCisgICAgZmkKKyAgICAjIHJlbW92ZSAubGlicyBmcm9tIHRoaXNkaXIKKyAgICBjYXNlIFwiXCR0aGlzZGlyXCIgaW4KKyAgICAqW1xcXFwvXSRvYmpkaXIgKSB0aGlzZGlyPVxgXCRFQ0hPIFwiWFwkdGhpc2RpclwiIHwgXCRYc2VkIC1lICdzJVtcXFxcL11bXlxcXFwvXSokJSUnXGAgOzsKKyAgICAkb2JqZGlyICkgICB0aGlzZGlyPS4gOzsKKyAgICBlc2FjCisgIGZpCisKKyAgIyBUcnkgdG8gZ2V0IHRoZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZS4KKyAgYWJzZGlyPVxgY2QgXCJcJHRoaXNkaXJcIiAmJiBwd2RcYAorICB0ZXN0IC1uIFwiXCRhYnNkaXJcIiAmJiB0aGlzZGlyPVwiXCRhYnNkaXJcIgorIgorCisJaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwkgICRFQ0hPICJcCisgIHByb2dyYW09bHQtJyRvdXRwdXRuYW1lJyRleGVleHQKKyAgcHJvZ2Rpcj1cIlwkdGhpc2Rpci8kb2JqZGlyXCIKKworICBpZiB0ZXN0ICEgLWYgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgfHwKKyAgICAgeyBmaWxlPVxgbHMgLTFkdCBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiBcIlwkcHJvZ2Rpci8uLi9cJHByb2dyYW1cIiAyPi9kZXYvbnVsbCB8ICR7U0VEfSAxcVxgOyBcXAorICAgICAgIHRlc3QgXCJYXCRmaWxlXCIgIT0gXCJYXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB9OyB0aGVuCisKKyAgICBmaWxlPVwiXCRcJC1cJHByb2dyYW1cIgorCisgICAgaWYgdGVzdCAhIC1kIFwiXCRwcm9nZGlyXCI7IHRoZW4KKyAgICAgICRNS0RJUiBcIlwkcHJvZ2RpclwiCisgICAgZWxzZQorICAgICAgJFJNIFwiXCRwcm9nZGlyL1wkZmlsZVwiCisgICAgZmkiCisKKwkgICRFQ0hPICJcCisKKyAgICAjIHJlbGluayBleGVjdXRhYmxlIGlmIG5lY2Vzc2FyeQorICAgIGlmIHRlc3QgLW4gXCJcJHJlbGlua19jb21tYW5kXCI7IHRoZW4KKyAgICAgIGlmIHJlbGlua19jb21tYW5kX291dHB1dD1cYGV2YWwgXCRyZWxpbmtfY29tbWFuZCAyPiYxXGA7IHRoZW4gOgorICAgICAgZWxzZQorCSRFQ0hPIFwiXCRyZWxpbmtfY29tbWFuZF9vdXRwdXRcIiA+JjIKKwkkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKwlleGl0IDEKKyAgICAgIGZpCisgICAgZmkKKworICAgICRNViBcIlwkcHJvZ2Rpci9cJGZpbGVcIiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiAyPi9kZXYvbnVsbCB8fAorICAgIHsgJFJNIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOworICAgICAgJE1WIFwiXCRwcm9nZGlyL1wkZmlsZVwiIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB9CisgICAgJFJNIFwiXCRwcm9nZGlyL1wkZmlsZVwiCisgIGZpIgorCWVsc2UKKwkgICRFQ0hPICJcCisgIHByb2dyYW09JyRvdXRwdXRuYW1lJworICBwcm9nZGlyPVwiXCR0aGlzZGlyLyRvYmpkaXJcIgorIgorCWZpCisKKwkkRUNITyAiXAorCisgIGlmIHRlc3QgLWYgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7IHRoZW4iCisKKwkjIEV4cG9ydCBvdXIgc2hsaWJwYXRoX3ZhciBpZiB3ZSBoYXZlIG9uZS4KKwlpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCisJICAkRUNITyAiXAorICAgICMgQWRkIG91ciBvd24gbGlicmFyeSBwYXRoIHRvICRzaGxpYnBhdGhfdmFyCisgICAgJHNobGlicGF0aF92YXI9XCIkdGVtcF9ycGF0aFwkJHNobGlicGF0aF92YXJcIgorCisgICAgIyBTb21lIHN5c3RlbXMgY2Fubm90IGNvcGUgd2l0aCBjb2xvbi10ZXJtaW5hdGVkICRzaGxpYnBhdGhfdmFyCisgICAgIyBUaGUgc2Vjb25kIGNvbG9uIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gQmVPUyBSNCBzZWQKKyAgICAkc2hsaWJwYXRoX3Zhcj1cYFwkRUNITyBcIlhcJCRzaGxpYnBhdGhfdmFyXCIgfCBcJFhzZWQgLWUgJ3MvOjoqXCQvLydcYAorCisgICAgZXhwb3J0ICRzaGxpYnBhdGhfdmFyCisiCisJZmkKKworCSMgZml4dXAgdGhlIGRsbCBzZWFyY2hwYXRoIGlmIHdlIG5lZWQgdG8uCisJaWYgdGVzdCAtbiAiJGRsbHNlYXJjaHBhdGgiOyB0aGVuCisJICAkRUNITyAiXAorICAgICMgQWRkIHRoZSBkbGwgc2VhcmNoIHBhdGggY29tcG9uZW50cyB0byB0aGUgZXhlY3V0YWJsZSBQQVRICisgICAgUEFUSD0kZGxsc2VhcmNocGF0aDpcJFBBVEgKKyIKKwlmaQorCisJJEVDSE8gIlwKKyAgICBpZiB0ZXN0IFwiXCRsaWJ0b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdpY1wiOyB0aGVuCisgICAgICAjIFJ1biB0aGUgYWN0dWFsIHByb2dyYW0gd2l0aCBvdXIgYXJndW1lbnRzLgorIgorCWNhc2UgJGhvc3QgaW4KKwkjIEJhY2tzbGFzaGVzIHNlcGFyYXRlIGRpcmVjdG9yaWVzIG9uIHBsYWluIHdpbmRvd3MKKwkqLSotbWluZ3cgfCAqLSotb3MyKiB8ICotY2VnY2MqKQorCSAgJEVDSE8gIlwKKyAgICAgIGV4ZWMgXCJcJHByb2dkaXJcXFxcXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQorIgorCSAgOzsKKworCSopCisJICAkRUNITyAiXAorICAgICAgZXhlYyBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CisiCisJICA7OworCWVzYWMKKwkkRUNITyAiXAorICAgICAgXCRFQ0hPIFwiXCQwOiBjYW5ub3QgZXhlYyBcJHByb2dyYW0gXCQqXCIgMT4mMgorICAgICAgZXhpdCAxCisgICAgZmkKKyAgZWxzZQorICAgICMgVGhlIHByb2dyYW0gZG9lc24ndCBleGlzdC4KKyAgICBcJEVDSE8gXCJcJDA6IGVycm9yOiBcXFxgXCRwcm9nZGlyL1wkcHJvZ3JhbScgZG9lcyBub3QgZXhpc3RcIiAxPiYyCisgICAgXCRFQ0hPIFwiVGhpcyBzY3JpcHQgaXMganVzdCBhIHdyYXBwZXIgZm9yIFwkcHJvZ3JhbS5cIiAxPiYyCisgICAgJEVDSE8gXCJTZWUgdGhlICRQQUNLQUdFIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIgMT4mMgorICAgIGV4aXQgMQorICBmaQorZmlcCisiCit9CisjIGVuZDogZnVuY19lbWl0X3dyYXBwZXJfcGFydDIKKworCisjIGZ1bmNfZW1pdF93cmFwcGVyIFthcmc9bm9dCisjCisjIEVtaXQgYSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IG9uIHN0ZG91dC4KKyMgRG9uJ3QgZGlyZWN0bHkgb3BlbiBhIGZpbGUgYmVjYXVzZSB3ZSBtYXkgd2FudCB0bworIyBpbmNvcnBvcmF0ZSB0aGUgc2NyaXB0IGNvbnRlbnRzIHdpdGhpbiBhIGN5Z3dpbi9taW5ndworIyB3cmFwcGVyIGV4ZWN1dGFibGUuICBNdXN0IE9OTFkgYmUgY2FsbGVkIGZyb20gd2l0aGluCisjIGZ1bmNfbW9kZV9saW5rIGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBhIG51bWJlciBvZiB2YXJpYWJsZXMKKyMgc2V0IHRoZXJlaW4uCisjCisjIEFSRyBpcyB0aGUgdmFsdWUgdGhhdCB0aGUgV1JBUFBFUl9TQ1JJUFRfQkVMT05HU19JTl9PQkpESVIKKyMgdmFyaWFibGUgd2lsbCB0YWtlLiAgSWYgJ3llcycsIHRoZW4gdGhlIGVtaXR0ZWQgc2NyaXB0CisjIHdpbGwgYXNzdW1lIHRoYXQgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBpdCBpcyBzdG9yZWQgaXMKKyMgdGhlICRvYmpkaXIgZGlyZWN0b3J5LiAgVGhpcyBpcyBhIGN5Z3dpbi9taW5ndy1zcGVjaWZpYworIyBiZWhhdmlvci4KK2Z1bmNfZW1pdF93cmFwcGVyICgpCit7CisJZnVuY19lbWl0X3dyYXBwZXJfYXJnMT1ubworCWlmIHRlc3QgLW4gIiQxIiA7IHRoZW4KKwkgIGZ1bmNfZW1pdF93cmFwcGVyX2FyZzE9JDEKKwlmaQorCisJIyBzcGxpdCB0aGlzIHVwIHNvIHRoYXQgZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYworCSMgY2FuIGNhbGwgZWFjaCBwYXJ0IGluZGVwZW5kZW50bHkuCisJZnVuY19lbWl0X3dyYXBwZXJfcGFydDEgIiR7ZnVuY19lbWl0X3dyYXBwZXJfYXJnMX0iCisJZnVuY19lbWl0X3dyYXBwZXJfcGFydDIgIiR7ZnVuY19lbWl0X3dyYXBwZXJfYXJnMX0iCit9CisKKworIyBmdW5jX3RvX2hvc3RfcGF0aCBhcmcKKyMKKyMgQ29udmVydCBwYXRocyB0byBob3N0IGZvcm1hdCB3aGVuIHVzZWQgd2l0aCBidWlsZCB0b29scy4KKyMgSW50ZW5kZWQgZm9yIHVzZSB3aXRoICJuYXRpdmUiIG1pbmd3ICh3aGVyZSBsaWJ0b29sIGl0c2VsZgorIyBpcyBydW5uaW5nIHVuZGVyIHRoZSBtc3lzIHNoZWxsKSwgb3IgaW4gdGhlIGZvbGxvd2luZyBjcm9zcy0KKyMgYnVpbGQgZW52aXJvbm1lbnRzOgorIyAgICAkYnVpbGQgICAgICAgICAgJGhvc3QKKyMgICAgbWluZ3cgKG1zeXMpICAgIG1pbmd3ICBbZS5nLiBuYXRpdmVdCisjICAgIGN5Z3dpbiAgICAgICAgICBtaW5ndworIyAgICAqbml4ICsgd2luZSAgICAgbWluZ3cKKyMgd2hlcmUgd2luZSBpcyBlcXVpcHBlZCB3aXRoIHRoZSBgd2luZXBhdGgnIGV4ZWN1dGFibGUuCisjIEluIHRoZSBuYXRpdmUgbWluZ3cgY2FzZSwgdGhlIChtc3lzKSBzaGVsbCBhdXRvbWF0aWNhbGx5CisjIGNvbnZlcnRzIHBhdGhzIGZvciBhbnkgbm9uLW1zeXMgYXBwbGljYXRpb25zIGl0IGxhdW5jaGVzLAorIyBidXQgdGhhdCBmYWNpbGl0eSBpc24ndCBhdmFpbGFibGUgZnJvbSBpbnNpZGUgdGhlIGN3cmFwcGVyLgorIyBTaW1pbGFyIGFjY29tbW9kYXRpb25zIGFyZSBuZWNlc3NhcnkgZm9yICRob3N0IG1pbmd3IGFuZAorIyAkYnVpbGQgY3lnd2luLiAgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIGRvZXMgbm8gaGFybSBmb3Igb3RoZXIKKyMgJGhvc3QvJGJ1aWxkIGNvbWJpbmF0aW9ucyBub3QgbGlzdGVkIGFib3ZlLgorIworIyBBUkcgaXMgdGhlIHBhdGggKG9uICRidWlsZCkgdGhhdCBzaG91bGQgYmUgY29udmVydGVkIHRvCisjIHRoZSBwcm9wZXIgcmVwcmVzZW50YXRpb24gZm9yICRob3N0LiBUaGUgcmVzdWx0IGlzIHN0b3JlZAorIyBpbiAkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorZnVuY190b19ob3N0X3BhdGggKCkKK3sKKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiIDsgdGhlbgorICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICptaW5ndyogKQorICAgICAgICBsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5PSdzfFxcXFwqfFxcfGc7c3wvfFxcfGc7c3xcXHxcXFxcfGcnCisgICAgICAgIGNhc2UgJGJ1aWxkIGluCisgICAgICAgICAgKm1pbmd3KiApICMgYWN0dWFsbHksIG1zeXMKKyAgICAgICAgICAgICMgYXdrd2FyZDogY21kIGFwcGVuZHMgc3BhY2VzIHRvIHJlc3VsdAorICAgICAgICAgICAgbHRfc2VkX3N0cmlwX3RyYWlsaW5nX3NwYWNlcz0icy9bIF0qXCQvLyIKKyAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9YCggY21kIC8vYyBlY2hvICIkMSIgfFwKKyAgICAgICAgICAgICAgJFNFRCAtZSAiJGx0X3NlZF9zdHJpcF90cmFpbGluZ19zcGFjZXMiICkgMj4vZGV2L251bGwgfHwgZWNobyAiImAKKyAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gZWNobyAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiIHxcCisgICAgICAgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKmN5Z3dpbiogKQorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT1gY3lncGF0aCAtdyAiJDEiYAorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWBlY2hvICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgfFwKKyAgICAgICAgICAgICAgJFNFRCAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorICAgICAgICAgICAgOzsKKyAgICAgICAgICAqICkKKyAgICAgICAgICAgICMgVW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lcyBub3QgZXhpdCB3aXRoIGEgbm9uLXplcm8KKyAgICAgICAgICAgICMgZXJyb3IgY29kZSwgc28gd2UgYXJlIGZvcmNlZCB0byBjaGVjayB0aGUgY29udGVudHMgb2YKKyAgICAgICAgICAgICMgc3Rkb3V0LiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlIGNvbW1hbmQgaXMgbm90CisgICAgICAgICAgICAjIGZvdW5kLCB0aGUgc2hlbGwgd2lsbCBzZXQgYW4gZXhpdCBjb2RlIG9mIDEyNyBhbmQgcHJpbnQKKyAgICAgICAgICAgICMgKmFuIGVycm9yIG1lc3NhZ2UqIHRvIHN0ZG91dC4gU28gd2UgbXVzdCBjaGVjayBmb3IgYm90aAorICAgICAgICAgICAgIyBlcnJvciBjb2RlIG9mIHplcm8gQU5EIG5vbi1lbXB0eSBzdGRvdXQsIHdoaWNoIGV4cGxhaW5zCisgICAgICAgICAgICAjIHRoZSBvZGQgY29uc3RydWN0aW9uOgorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT1gd2luZXBhdGggLXcgIiQxIiAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgIGlmIHRlc3QgIiQ/IiAtZXEgMCAmJiB0ZXN0IC1uICIke2Z1bmNfdG9faG9zdF9wYXRoX3RtcDF9IjsgdGhlbgorICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YGVjaG8gIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiB8XAorICAgICAgICAgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIyBBbGxvdyB3YXJuaW5nIGJlbG93LgorICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiIDsgdGhlbgorICAgICAgICAgIGZ1bmNfZXJyb3IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgaG9zdCBwYXRoIGNvcnJlc3BvbmRpbmcgdG8iCisgICAgICAgICAgZnVuY19lcnJvciAiICAnJDEnIgorICAgICAgICAgIGZ1bmNfZXJyb3IgIkNvbnRpbnVpbmcsIGJ1dCB1bmluc3RhbGxlZCBleGVjdXRhYmxlcyBtYXkgbm90IHdvcmsuIgorICAgICAgICAgICMgRmFsbGJhY2s6CisgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGZpCit9CisjIGVuZDogZnVuY190b19ob3N0X3BhdGgKKworIyBmdW5jX3RvX2hvc3RfcGF0aGxpc3QgYXJnCisjCisjIENvbnZlcnQgcGF0aGxpc3RzIHRvIGhvc3QgZm9ybWF0IHdoZW4gdXNlZCB3aXRoIGJ1aWxkIHRvb2xzLgorIyBTZWUgZnVuY190b19ob3N0X3BhdGgoKSwgYWJvdmUuIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgdGhlCisjIGZvbGxvd2luZyAkYnVpbGQvJGhvc3QgY29tYmluYXRpb25zIChidXQgZG9lcyBubyBoYXJtIGZvcgorIyBjb21iaW5hdGlvbnMgbm90IGxpc3RlZCBoZXJlKToKKyMgICAgJGJ1aWxkICAgICAgICAgICRob3N0CisjICAgIG1pbmd3IChtc3lzKSAgICBtaW5ndyAgW2UuZy4gbmF0aXZlXQorIyAgICBjeWd3aW4gICAgICAgICAgbWluZ3cKKyMgICAgKm5peCArIHdpbmUgICAgIG1pbmd3CisjCisjIFBhdGggc2VwYXJhdG9ycyBhcmUgYWxzbyBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgZm9ybWF0IHRvCisjICRob3N0IGZvcm1hdC4gSWYgQVJHIGJlZ2lucyBvciBlbmRzIHdpdGggYSBwYXRoIHNlcGFyYXRvcgorIyBjaGFyYWN0ZXIsIGl0IGlzIHByZXNlcnZlZCAoYnV0IGNvbnZlcnRlZCB0byAkaG9zdCBmb3JtYXQpCisjIG9uIG91dHB1dC4KKyMKKyMgQVJHIGlzIGEgcGF0aGxpc3QgKG9uICRidWlsZCkgdGhhdCBzaG91bGQgYmUgY29udmVydGVkIHRvCisjIHRoZSBwcm9wZXIgcmVwcmVzZW50YXRpb24gb24gJGhvc3QuIFRoZSByZXN1bHQgaXMgc3RvcmVkCisjIGluICRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0LgorZnVuY190b19ob3N0X3BhdGhsaXN0ICgpCit7CisgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSIgOyB0aGVuCisgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKm1pbmd3KiApCisgICAgICAgIGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnk9J3N8XFxcXCp8XFx8ZztzfC98XFx8ZztzfFxcfFxcXFx8ZycKKyAgICAgICAgIyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycyBmcm9tCisgICAgICAgICMgQVJHLiBtc3lzIGJlaGF2aW9yIGlzIGluY29uc2lzdGVudCBoZXJlLCBjeWdwYXRoIHR1cm5zIHRoZW0KKyAgICAgICAgIyBpbnRvICcuOycgYW5kICc7LicsIGFuZCB3aW5lcGF0aCBpZ25vcmVzIHRoZW0gY29tcGxldGVseS4KKyAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDI9IiQxIgorICAgICAgICAjIE9uY2Ugc2V0IGZvciB0aGlzIGNhbGwsIHRoaXMgdmFyaWFibGUgc2hvdWxkIG5vdCBiZQorICAgICAgICAjIHJlYXNzaWduZWQuIEl0IGlzIHVzZWQgaW4gdGhhIGZhbGxiYWNrIGNhc2UuCisgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAxPWBlY2hvICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDIiIHxcCisgICAgICAgICAgJFNFRCAtZSAnc3xeOip8fCcgLWUgJ3N8OiokfHwnYAorICAgICAgICBjYXNlICRidWlsZCBpbgorICAgICAgICAgICptaW5ndyogKSAjIEFjdHVhbGx5LCBtc3lzLgorICAgICAgICAgICAgIyBBd2t3YXJkOiBjbWQgYXBwZW5kcyBzcGFjZXMgdG8gcmVzdWx0LgorICAgICAgICAgICAgbHRfc2VkX3N0cmlwX3RyYWlsaW5nX3NwYWNlcz0icy9bIF0qXCQvLyIKKyAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAyPWAoIGNtZCAvL2MgZWNobyAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAxIiB8XAorICAgICAgICAgICAgICAkU0VEIC1lICIkbHRfc2VkX3N0cmlwX3RyYWlsaW5nX3NwYWNlcyIgKSAyPi9kZXYvbnVsbCB8fCBlY2hvICIiYAorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD1gZWNobyAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAyIiB8XAorICAgICAgICAgICAgICAkU0VEIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCisgICAgICAgICAgICA7OworICAgICAgICAgICpjeWd3aW4qICkKKyAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAyPWBjeWdwYXRoIC13IC1wICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDEiYAorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD1gZWNobyAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAyIiB8XAorICAgICAgICAgICAgICAkU0VEIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCisgICAgICAgICAgICA7OworICAgICAgICAgICogKQorICAgICAgICAgICAgIyB1bmZvcnR1bmF0ZWx5LCB3aW5lcGF0aCBkb2Vzbid0IGNvbnZlcnQgcGF0aGxpc3RzCisgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PSIiCisgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3Rfb2xkSUZTPSRJRlMKKyAgICAgICAgICAgIElGUz06CisgICAgICAgICAgICBmb3IgZnVuY190b19ob3N0X3BhdGhsaXN0X2YgaW4gJGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAxIDsgZG8KKyAgICAgICAgICAgICAgSUZTPSRmdW5jX3RvX2hvc3RfcGF0aGxpc3Rfb2xkSUZTCisgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfZiIgOyB0aGVuCisgICAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGggIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfZiIKKyAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IiA7IHRoZW4KKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0IiA7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD0iJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD0iJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ7JGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgSUZTPToKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIElGUz0kZnVuY190b19ob3N0X3BhdGhsaXN0X29sZElGUworICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCIgOyB0aGVuCisgICAgICAgICAgZnVuY19lcnJvciAiQ291bGQgbm90IGRldGVybWluZSB0aGUgaG9zdCBwYXRoKHMpIGNvcnJlc3BvbmRpbmcgdG8iCisgICAgICAgICAgZnVuY19lcnJvciAiICAnJDEnIgorICAgICAgICAgIGZ1bmNfZXJyb3IgIkNvbnRpbnVpbmcsIGJ1dCB1bmluc3RhbGxlZCBleGVjdXRhYmxlcyBtYXkgbm90IHdvcmsuIgorICAgICAgICAgICMgRmFsbGJhY2suIFRoaXMgbWF5IGJyZWFrIGlmICQxIGNvbnRhaW5zIERPUy1zdHlsZSBkcml2ZQorICAgICAgICAgICMgc3BlY2lmaWNhdGlvbnMuIFRoZSBmaXggaXMgbm90IHRvIGNvbXBsaWNhdGUgdGhlIGV4cHJlc3Npb24KKyAgICAgICAgICAjIGJlbG93LCBidXQgZm9yIHRoZSB1c2VyIHRvIHByb3ZpZGUgYSB3b3JraW5nIHdpbmUgaW5zdGFsbGF0aW9uCisgICAgICAgICAgIyB3aXRoIHdpbmVwYXRoIHNvIHRoYXQgcGF0aCB0cmFuc2xhdGlvbiBpbiB0aGUgY3Jvc3MtdG8tbWluZ3cKKyAgICAgICAgICAjIGNhc2Ugd29ya3MgcHJvcGVybHkuCisgICAgICAgICAgbHRfcmVwbGFjZV9wYXRoc2VwX25peF90b19kb3M9InN8Onw7fGciCisgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD1gZWNobyAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAxIiB8XAorICAgICAgICAgICAgJFNFRCAtZSAiJGx0X3JlcGxhY2VfcGF0aHNlcF9uaXhfdG9fZG9zImAKKyAgICAgICAgZmkKKyAgICAgICAgIyBOb3csIGFkZCB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3JzIGJhY2sKKyAgICAgICAgY2FzZSAiJDEiIGluCisgICAgICAgICAgOiogKSBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PSI7JGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQiCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIGNhc2UgIiQxIiBpbgorICAgICAgICAgICo6ICkgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD0iJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ7IgorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworICAgIGVzYWMKKyAgZmkKK30KKyMgZW5kOiBmdW5jX3RvX2hvc3RfcGF0aGxpc3QKKworIyBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjCisjIGVtaXQgdGhlIHNvdXJjZSBjb2RlIGZvciBhIHdyYXBwZXIgZXhlY3V0YWJsZSBvbiBzdGRvdXQKKyMgTXVzdCBPTkxZIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBmdW5jX21vZGVfbGluayBiZWNhdXNlCisjIGl0IGRlcGVuZHMgb24gYSBudW1iZXIgb2YgdmFyaWFibGUgc2V0IHRoZXJlaW4uCitmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjICgpCit7CisJY2F0IDw8RU9GCisKKy8qICRjd3JhcHBlcnNvdXJjZSAtIHRlbXBvcmFyeSB3cmFwcGVyIGV4ZWN1dGFibGUgZm9yICRvYmpkaXIvJG91dHB1dG5hbWUKKyAgIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKworICAgVGhlICRvdXRwdXQgcHJvZ3JhbSBjYW5ub3QgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgdW50aWwgYWxsIHRoZSBsaWJ0b29sCisgICBsaWJyYXJpZXMgdGhhdCBpdCBkZXBlbmRzIG9uIGFyZSBpbnN0YWxsZWQuCisKKyAgIFRoaXMgd3JhcHBlciBleGVjdXRhYmxlIHNob3VsZCBuZXZlciBiZSBtb3ZlZCBvdXQgb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKyAgIElmIGl0IGlzLCBpdCB3aWxsIG5vdCBvcGVyYXRlIGNvcnJlY3RseS4KKworICAgQ3VycmVudGx5LCBpdCBzaW1wbHkgZXhlY3MgdGhlIHdyYXBwZXIgKnNjcmlwdCogIiRTSEVMTCAkb3V0cHV0IiwKKyAgIGJ1dCBjb3VsZCBldmVudHVhbGx5IGFic29yYiBhbGwgb2YgdGhlIHNjcmlwdHMgZnVuY3Rpb25hbGl0eSBhbmQKKyAgIGV4ZWMgJG9iamRpci8kb3V0cHV0bmFtZSBkaXJlY3RseS4KKyovCitFT0YKKwkgICAgY2F0IDw8IkVPRiIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lmZGVmIF9NU0NfVkVSCisjIGluY2x1ZGUgPGRpcmVjdC5oPgorIyBpbmNsdWRlIDxwcm9jZXNzLmg+CisjIGluY2x1ZGUgPGlvLmg+CisjIGRlZmluZSBzZXRtb2RlIF9zZXRtb2RlCisjZWxzZQorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisjIGlmZGVmIF9fQ1lHV0lOX18KKyMgIGluY2x1ZGUgPGlvLmg+CisjICBkZWZpbmUgSEFWRV9TRVRFTlYKKyMgIGlmZGVmIF9fU1RSSUNUX0FOU0lfXworY2hhciAqcmVhbHBhdGggKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKK2ludCBwdXRlbnYgKGNoYXIgKik7CitpbnQgc2V0ZW52IChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaWYgZGVmaW5lZChQQVRIX01BWCkKKyMgZGVmaW5lIExUX1BBVEhNQVggUEFUSF9NQVgKKyNlbGlmIGRlZmluZWQoTUFYUEFUSExFTikKKyMgZGVmaW5lIExUX1BBVEhNQVggTUFYUEFUSExFTgorI2Vsc2UKKyMgZGVmaW5lIExUX1BBVEhNQVggMTAyNAorI2VuZGlmCisKKyNpZm5kZWYgU19JWE9USAorIyBkZWZpbmUgU19JWE9USCAwCisjZW5kaWYKKyNpZm5kZWYgU19JWEdSUAorIyBkZWZpbmUgU19JWEdSUCAwCisjZW5kaWYKKworI2lmZGVmIF9NU0NfVkVSCisjIGRlZmluZSBTX0lYVVNSIF9TX0lFWEVDCisjIGRlZmluZSBzdGF0IF9zdGF0CisjIGlmbmRlZiBfSU5UUFRSX1RfREVGSU5FRAorIyAgZGVmaW5lIGludHB0cl90IGludAorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgRElSX1NFUEFSQVRPUgorIyBkZWZpbmUgRElSX1NFUEFSQVRPUiAnLycKKyMgZGVmaW5lIFBBVEhfU0VQQVJBVE9SICc6JworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfV0lOMzIpIHx8IGRlZmluZWQgKF9fTVNET1NfXykgfHwgZGVmaW5lZCAoX19ESkdQUF9fKSB8fCBcCisgIGRlZmluZWQgKF9fT1MyX18pCisjIGRlZmluZSBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQorIyBkZWZpbmUgRk9QRU5fV0IgIndiIgorIyBpZm5kZWYgRElSX1NFUEFSQVRPUl8yCisjICBkZWZpbmUgRElSX1NFUEFSQVRPUl8yICdcXCcKKyMgZW5kaWYKKyMgaWZuZGVmIFBBVEhfU0VQQVJBVE9SXzIKKyMgIGRlZmluZSBQQVRIX1NFUEFSQVRPUl8yICc7JworIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgRElSX1NFUEFSQVRPUl8yCisjIGRlZmluZSBJU19ESVJfU0VQQVJBVE9SKGNoKSAoKGNoKSA9PSBESVJfU0VQQVJBVE9SKQorI2Vsc2UgLyogRElSX1NFUEFSQVRPUl8yICovCisjIGRlZmluZSBJU19ESVJfU0VQQVJBVE9SKGNoKSBcCisJKCgoY2gpID09IERJUl9TRVBBUkFUT1IpIHx8ICgoY2gpID09IERJUl9TRVBBUkFUT1JfMikpCisjZW5kaWYgLyogRElSX1NFUEFSQVRPUl8yICovCisKKyNpZm5kZWYgUEFUSF9TRVBBUkFUT1JfMgorIyBkZWZpbmUgSVNfUEFUSF9TRVBBUkFUT1IoY2gpICgoY2gpID09IFBBVEhfU0VQQVJBVE9SKQorI2Vsc2UgLyogUEFUSF9TRVBBUkFUT1JfMiAqLworIyBkZWZpbmUgSVNfUEFUSF9TRVBBUkFUT1IoY2gpICgoY2gpID09IFBBVEhfU0VQQVJBVE9SXzIpCisjZW5kaWYgLyogUEFUSF9TRVBBUkFUT1JfMiAqLworCisjaWZkZWYgX19DWUdXSU5fXworIyBkZWZpbmUgRk9QRU5fV0IgIndiIgorI2VuZGlmCisKKyNpZm5kZWYgRk9QRU5fV0IKKyMgZGVmaW5lIEZPUEVOX1dCICJ3IgorI2VuZGlmCisjaWZuZGVmIF9PX0JJTkFSWQorIyBkZWZpbmUgX09fQklOQVJZIDAKKyNlbmRpZgorCisjZGVmaW5lIFhNQUxMT0ModHlwZSwgbnVtKSAgICAgICgodHlwZSAqKSB4bWFsbG9jICgobnVtKSAqIHNpemVvZih0eXBlKSkpCisjZGVmaW5lIFhGUkVFKHN0YWxlKSBkbyB7IFwKKyAgaWYgKHN0YWxlKSB7IGZyZWUgKCh2b2lkICopIHN0YWxlKTsgc3RhbGUgPSAwOyB9IFwKK30gd2hpbGUgKDApCisKKyN1bmRlZiBMVFdSQVBQRVJfREVCVUdQUklOVEYKKyNpZiBkZWZpbmVkIERFQlVHV1JBUFBFUgorIyBkZWZpbmUgTFRXUkFQUEVSX0RFQlVHUFJJTlRGKGFyZ3MpIGx0d3JhcHBlcl9kZWJ1Z3ByaW50ZiBhcmdzCitzdGF0aWMgdm9pZAorbHR3cmFwcGVyX2RlYnVncHJpbnRmIChjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQgKGFyZ3MsIGZtdCk7CisgICAgKHZvaWQpIHZmcHJpbnRmIChzdGRlcnIsIGZtdCwgYXJncyk7CisgICAgdmFfZW5kIChhcmdzKTsKK30KKyNlbHNlCisjIGRlZmluZSBMVFdSQVBQRVJfREVCVUdQUklOVEYoYXJncykKKyNlbmRpZgorCitjb25zdCBjaGFyICpwcm9ncmFtX25hbWUgPSBOVUxMOworCit2b2lkICp4bWFsbG9jIChzaXplX3QgbnVtKTsKK2NoYXIgKnhzdHJkdXAgKGNvbnN0IGNoYXIgKnN0cmluZyk7Citjb25zdCBjaGFyICpiYXNlX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpOworY2hhciAqZmluZF9leGVjdXRhYmxlIChjb25zdCBjaGFyICp3cmFwcGVyKTsKK2NoYXIgKmNoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYyk7CitpbnQgbWFrZV9leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKTsKK2ludCBjaGVja19leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKTsKK2NoYXIgKnN0cmVuZHphcCAoY2hhciAqc3RyLCBjb25zdCBjaGFyICpwYXQpOwordm9pZCBsdF9mYXRhbCAoY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKTsKK3ZvaWQgbHRfc2V0ZW52IChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CitjaGFyICpsdF9leHRlbmRfc3RyIChjb25zdCBjaGFyICpvcmlnX3ZhbHVlLCBjb25zdCBjaGFyICphZGQsIGludCB0b19lbmQpOwordm9pZCBsdF9vcHRfcHJvY2Vzc19lbnZfc2V0IChjb25zdCBjaGFyICphcmcpOwordm9pZCBsdF9vcHRfcHJvY2Vzc19lbnZfcHJlcGVuZCAoY29uc3QgY2hhciAqYXJnKTsKK3ZvaWQgbHRfb3B0X3Byb2Nlc3NfZW52X2FwcGVuZCAoY29uc3QgY2hhciAqYXJnKTsKK2ludCBsdF9zcGxpdF9uYW1lX3ZhbHVlIChjb25zdCBjaGFyICphcmcsIGNoYXIqKiBuYW1lLCBjaGFyKiogdmFsdWUpOwordm9pZCBsdF91cGRhdGVfZXhlX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK3ZvaWQgbHRfdXBkYXRlX2xpYl9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpzY3JpcHRfdGV4dF9wYXJ0MSA9CitFT0YKKworCSAgICBmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MSB5ZXMgfAorCSAgICAgICAgJFNFRCAtZSAncy9cKFtcXCJdXCkvXFxcMS9nJyBcCisJICAgICAgICAgICAgIC1lICdzL14vICAiLycgLWUgJ3MvJC9cXG4iLycKKwkgICAgZWNobyAiOyIKKwkgICAgY2F0IDw8RU9GCisKK3N0YXRpYyBjb25zdCBjaGFyICpzY3JpcHRfdGV4dF9wYXJ0MiA9CitFT0YKKwkgICAgZnVuY19lbWl0X3dyYXBwZXJfcGFydDIgeWVzIHwKKwkgICAgICAgICRTRUQgLWUgJ3MvXChbXFwiXVwpL1xcXDEvZycgXAorCSAgICAgICAgICAgICAtZSAncy9eLyAgIi8nIC1lICdzLyQvXFxuIi8nCisJICAgIGVjaG8gIjsiCisKKwkgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogTUFHSUNfRVhFID0gIiRtYWdpY19leGUiOworY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBUk5BTUUgPSAiJHNobGlicGF0aF92YXIiOworRU9GCisKKwkgICAgaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLW4gIiR0ZW1wX3JwYXRoIjsgdGhlbgorICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3QgIiR0ZW1wX3JwYXRoIgorCSAgICAgIGNhdCA8PEVPRgorY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBTFVFICAgPSAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQiOworRU9GCisJICAgIGVsc2UKKwkgICAgICBjYXQgPDwiRU9GIgorY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBTFVFICAgPSAiIjsKK0VPRgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRkbGxzZWFyY2hwYXRoIjsgdGhlbgorICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3QgIiRkbGxzZWFyY2hwYXRoOiIKKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQVJOQU1FID0gIlBBVEgiOworY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBTFVFICAgPSAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQiOworRU9GCisJICAgIGVsc2UKKwkgICAgICBjYXQgPDwiRU9GIgorY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBUk5BTUUgPSAiIjsKK2NvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQUxVRSAgID0gIiI7CitFT0YKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllczsgdGhlbgorCSAgICAgIGNhdCA8PEVPRgorY29uc3QgY2hhciAqIFRBUkdFVF9QUk9HUkFNX05BTUUgPSAibHQtJG91dHB1dG5hbWUiOyAvKiBob3BlZnVsbHksIG5vIC5leGUgKi8KK0VPRgorCSAgICBlbHNlCisJICAgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogVEFSR0VUX1BST0dSQU1fTkFNRSA9ICIkb3V0cHV0bmFtZSI7IC8qIGhvcGVmdWxseSwgbm8gLmV4ZSAqLworRU9GCisJICAgIGZpCisKKworCSAgICBjYXQgPDwiRU9GIgorCisjZGVmaW5lIExUV1JBUFBFUl9PUFRJT05fUFJFRklYICAgICAgICAgIi0tbHQtIgorI2RlZmluZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWF9MRU5HVEggIDUKKworc3RhdGljIGNvbnN0IHNpemVfdCBvcHRfcHJlZml4X2xlbiAgICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVhfTEVOR1RIOworc3RhdGljIGNvbnN0IGNoYXIgKmx0d3JhcHBlcl9vcHRpb25fcHJlZml4ID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVg7CisKK3N0YXRpYyBjb25zdCBjaGFyICpkdW1wc2NyaXB0X29wdCAgICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYICJkdW1wLXNjcmlwdCI7CisKK3N0YXRpYyBjb25zdCBzaXplX3QgZW52X3NldF9vcHRfbGVuICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYX0xFTkdUSCArIDc7CitzdGF0aWMgY29uc3QgY2hhciAqZW52X3NldF9vcHQgICAgICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAiZW52LXNldCI7CisgIC8qIGFyZ3VtZW50IGlzIHB1dGVudi1zdHlsZSAiZm9vPWJhciIsIHZhbHVlIG9mIGZvbyBpcyBzZXQgdG8gYmFyICovCisKK3N0YXRpYyBjb25zdCBzaXplX3QgZW52X3ByZXBlbmRfb3B0X2xlbiA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYX0xFTkdUSCArIDExOworc3RhdGljIGNvbnN0IGNoYXIgKmVudl9wcmVwZW5kX29wdCAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVggImVudi1wcmVwZW5kIjsKKyAgLyogYXJndW1lbnQgaXMgcHV0ZW52LXN0eWxlICJmb289YmFyIiwgbmV3IHZhbHVlIG9mIGZvbyBpcyBiYXIke2Zvb30gKi8KKworc3RhdGljIGNvbnN0IHNpemVfdCBlbnZfYXBwZW5kX29wdF9sZW4gID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVhfTEVOR1RIICsgMTA7CitzdGF0aWMgY29uc3QgY2hhciAqZW52X2FwcGVuZF9vcHQgICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAiZW52LWFwcGVuZCI7CisgIC8qIGFyZ3VtZW50IGlzIHB1dGVudi1zdHlsZSAiZm9vPWJhciIsIG5ldyB2YWx1ZSBvZiBmb28gaXMgJHtmb299YmFyICovCisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgY2hhciAqKm5ld2FyZ3o7CisgIGludCAgbmV3YXJnYzsKKyAgY2hhciAqdG1wX3BhdGhzcGVjOworICBjaGFyICphY3R1YWxfY3dyYXBwZXJfcGF0aDsKKyAgY2hhciAqYWN0dWFsX2N3cmFwcGVyX25hbWU7CisgIGNoYXIgKnRhcmdldF9uYW1lOworICBjaGFyICpsdF9hcmd2X3plcm87CisgIGludHB0cl90IHJ2YWwgPSAxMjc7CisKKyAgaW50IGk7CisKKyAgcHJvZ3JhbV9uYW1lID0gKGNoYXIgKikgeHN0cmR1cCAoYmFzZV9uYW1lIChhcmd2WzBdKSk7CisgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgYXJndlswXSAgICAgIDogJXNcbiIsIGFyZ3ZbMF0pKTsKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBwcm9ncmFtX25hbWUgOiAlc1xuIiwgcHJvZ3JhbV9uYW1lKSk7CisKKyAgLyogdmVyeSBzaW1wbGUgYXJnIHBhcnNpbmc7IGRvbid0IHdhbnQgdG8gcmVseSBvbiBnZXRvcHQgKi8KKyAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKyAgICB7CisgICAgICBpZiAoc3RyY21wIChhcmd2W2ldLCBkdW1wc2NyaXB0X29wdCkgPT0gMCkKKwl7CitFT0YKKwkgICAgY2FzZSAiJGhvc3QiIGluCisJICAgICAgKm1pbmd3KiB8ICpjeWd3aW4qICkKKwkJIyBtYWtlIHN0ZG91dCB1c2UgInVuaXgiIGxpbmUgZW5kaW5ncworCQllY2hvICIgICAgICAgICAgc2V0bW9kZSgxLF9PX0JJTkFSWSk7IgorCQk7OworCSAgICAgIGVzYWMKKworCSAgICBjYXQgPDwiRU9GIgorCSAgcHJpbnRmICgiJXMiLCBzY3JpcHRfdGV4dF9wYXJ0MSk7CisJICBwcmludGYgKCIlcyIsIHNjcmlwdF90ZXh0X3BhcnQyKTsKKwkgIHJldHVybiAwOworCX0KKyAgICB9CisKKyAgbmV3YXJneiA9IFhNQUxMT0MgKGNoYXIgKiwgYXJnYyArIDEpOworICB0bXBfcGF0aHNwZWMgPSBmaW5kX2V4ZWN1dGFibGUgKGFyZ3ZbMF0pOworICBpZiAodG1wX3BhdGhzcGVjID09IE5VTEwpCisgICAgbHRfZmF0YWwgKCJDb3VsZG4ndCBmaW5kICVzIiwgYXJndlswXSk7CisgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgZm91bmQgZXhlIChiZWZvcmUgc3ltbGluayBjaGFzZSkgYXQgOiAlc1xuIiwKKwkJCSAgdG1wX3BhdGhzcGVjKSk7CisKKyAgYWN0dWFsX2N3cmFwcGVyX3BhdGggPSBjaGFzZV9zeW1saW5rcyAodG1wX3BhdGhzcGVjKTsKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBmb3VuZCBleGUgKGFmdGVyIHN5bWxpbmsgY2hhc2UpIGF0IDogJXNcbiIsCisJCQkgIGFjdHVhbF9jd3JhcHBlcl9wYXRoKSk7CisgIFhGUkVFICh0bXBfcGF0aHNwZWMpOworCisgIGFjdHVhbF9jd3JhcHBlcl9uYW1lID0geHN0cmR1cCggYmFzZV9uYW1lIChhY3R1YWxfY3dyYXBwZXJfcGF0aCkpOworICBzdHJlbmR6YXAgKGFjdHVhbF9jd3JhcHBlcl9wYXRoLCBhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisKKyAgLyogd3JhcHBlciBuYW1lIHRyYW5zZm9ybXMgKi8KKyAgc3RyZW5kemFwIChhY3R1YWxfY3dyYXBwZXJfbmFtZSwgIi5leGUiKTsKKyAgdG1wX3BhdGhzcGVjID0gbHRfZXh0ZW5kX3N0ciAoYWN0dWFsX2N3cmFwcGVyX25hbWUsICIuZXhlIiwgMSk7CisgIFhGUkVFIChhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisgIGFjdHVhbF9jd3JhcHBlcl9uYW1lID0gdG1wX3BhdGhzcGVjOworICB0bXBfcGF0aHNwZWMgPSAwOworCisgIC8qIHRhcmdldF9uYW1lIHRyYW5zZm9ybXMgLS0gdXNlIGFjdHVhbCB0YXJnZXQgcHJvZ3JhbSBuYW1lOyBtaWdodCBoYXZlIGx0LSBwcmVmaXggKi8KKyAgdGFyZ2V0X25hbWUgPSB4c3RyZHVwIChiYXNlX25hbWUgKFRBUkdFVF9QUk9HUkFNX05BTUUpKTsKKyAgc3RyZW5kemFwICh0YXJnZXRfbmFtZSwgIi5leGUiKTsKKyAgdG1wX3BhdGhzcGVjID0gbHRfZXh0ZW5kX3N0ciAodGFyZ2V0X25hbWUsICIuZXhlIiwgMSk7CisgIFhGUkVFICh0YXJnZXRfbmFtZSk7CisgIHRhcmdldF9uYW1lID0gdG1wX3BhdGhzcGVjOworICB0bXBfcGF0aHNwZWMgPSAwOworCisgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgbGlidG9vbCB0YXJnZXQgbmFtZTogJXNcbiIsCisJCQkgIHRhcmdldF9uYW1lKSk7CitFT0YKKworCSAgICBjYXQgPDxFT0YKKyAgbmV3YXJnelswXSA9CisgICAgWE1BTExPQyAoY2hhciwgKHN0cmxlbiAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpICsKKwkJICAgIHN0cmxlbiAoIiRvYmpkaXIiKSArIDEgKyBzdHJsZW4gKGFjdHVhbF9jd3JhcHBlcl9uYW1lKSArIDEpKTsKKyAgc3RyY3B5IChuZXdhcmd6WzBdLCBhY3R1YWxfY3dyYXBwZXJfcGF0aCk7CisgIHN0cmNhdCAobmV3YXJnelswXSwgIiRvYmpkaXIiKTsKKyAgc3RyY2F0IChuZXdhcmd6WzBdLCAiLyIpOworRU9GCisKKwkgICAgY2F0IDw8IkVPRiIKKyAgLyogc3RvcCBoZXJlLCBhbmQgY29weSBzbyB3ZSBkb24ndCBoYXZlIHRvIGRvIHRoaXMgdHdpY2UgKi8KKyAgdG1wX3BhdGhzcGVjID0geHN0cmR1cCAobmV3YXJnelswXSk7CisKKyAgLyogZG8gTk9UIHdhbnQgdGhlIGx0LSBwcmVmaXggaGVyZSwgc28gdXNlIGFjdHVhbF9jd3JhcHBlcl9uYW1lICovCisgIHN0cmNhdCAobmV3YXJnelswXSwgYWN0dWFsX2N3cmFwcGVyX25hbWUpOworCisgIC8qIERPIHdhbnQgdGhlIGx0LSBwcmVmaXggaGVyZSBpZiBpdCBleGlzdHMsIHNvIHVzZSB0YXJnZXRfbmFtZSAqLworICBsdF9hcmd2X3plcm8gPSBsdF9leHRlbmRfc3RyICh0bXBfcGF0aHNwZWMsIHRhcmdldF9uYW1lLCAxKTsKKyAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7CisgIHRtcF9wYXRoc3BlYyA9IE5VTEw7CitFT0YKKworCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgbWluZ3cqKQorCSAgICBjYXQgPDwiRU9GIgorICB7CisgICAgY2hhciogcDsKKyAgICB3aGlsZSAoKHAgPSBzdHJjaHIgKG5ld2FyZ3pbMF0sICdcXCcpKSAhPSBOVUxMKQorICAgICAgeworCSpwID0gJy8nOworICAgICAgfQorICAgIHdoaWxlICgocCA9IHN0cmNociAobHRfYXJndl96ZXJvLCAnXFwnKSkgIT0gTlVMTCkKKyAgICAgIHsKKwkqcCA9ICcvJzsKKyAgICAgIH0KKyAgfQorRU9GCisJICAgIDs7CisJICAgIGVzYWMKKworCSAgICBjYXQgPDwiRU9GIgorICBYRlJFRSAodGFyZ2V0X25hbWUpOworICBYRlJFRSAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpOworICBYRlJFRSAoYWN0dWFsX2N3cmFwcGVyX25hbWUpOworCisgIGx0X3NldGVudiAoIkJJTl9TSCIsICJ4cGc0Iik7IC8qIGZvciBUcnU2NCAqLworICBsdF9zZXRlbnYgKCJEVUFMQ0FTRSIsICIxIik7ICAvKiBmb3IgTVNLIHNoICovCisgIGx0X3VwZGF0ZV9saWJfcGF0aCAoTElCX1BBVEhfVkFSTkFNRSwgTElCX1BBVEhfVkFMVUUpOworICBsdF91cGRhdGVfZXhlX3BhdGggKEVYRV9QQVRIX1ZBUk5BTUUsIEVYRV9QQVRIX1ZBTFVFKTsKKworICBuZXdhcmdjPTA7CisgIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCisgICAgeworICAgICAgaWYgKHN0cm5jbXAgKGFyZ3ZbaV0sIGVudl9zZXRfb3B0LCBlbnZfc2V0X29wdF9sZW4pID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoYXJndltpXVtlbnZfc2V0X29wdF9sZW5dID09ICc9JykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY29uc3QgY2hhciAqcCA9IGFyZ3ZbaV0gKyBlbnZfc2V0X29wdF9sZW4gKyAxOworICAgICAgICAgICAgICBsdF9vcHRfcHJvY2Vzc19lbnZfc2V0IChwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChhcmd2W2ldW2Vudl9zZXRfb3B0X2xlbl0gPT0gJ1wwJyAmJiBpICsgMSA8IGFyZ2MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGx0X29wdF9wcm9jZXNzX2Vudl9zZXQgKGFyZ3ZbKytpXSk7IC8qIGRvbid0IGNvcHkgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBsdF9mYXRhbCAoIiVzIG1pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQiLCBlbnZfc2V0X29wdCk7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgIGlmIChzdHJuY21wIChhcmd2W2ldLCBlbnZfcHJlcGVuZF9vcHQsIGVudl9wcmVwZW5kX29wdF9sZW4pID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoYXJndltpXVtlbnZfcHJlcGVuZF9vcHRfbGVuXSA9PSAnPScpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnAgPSBhcmd2W2ldICsgZW52X3ByZXBlbmRfb3B0X2xlbiArIDE7CisgICAgICAgICAgICAgIGx0X29wdF9wcm9jZXNzX2Vudl9wcmVwZW5kIChwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChhcmd2W2ldW2Vudl9wcmVwZW5kX29wdF9sZW5dID09ICdcMCcgJiYgaSArIDEgPCBhcmdjKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBsdF9vcHRfcHJvY2Vzc19lbnZfcHJlcGVuZCAoYXJndlsrK2ldKTsgLyogZG9uJ3QgY29weSAqLworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGx0X2ZhdGFsICgiJXMgbWlzc2luZyByZXF1aXJlZCBhcmd1bWVudCIsIGVudl9wcmVwZW5kX29wdCk7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgIGlmIChzdHJuY21wIChhcmd2W2ldLCBlbnZfYXBwZW5kX29wdCwgZW52X2FwcGVuZF9vcHRfbGVuKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgaWYgKGFyZ3ZbaV1bZW52X2FwcGVuZF9vcHRfbGVuXSA9PSAnPScpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnAgPSBhcmd2W2ldICsgZW52X2FwcGVuZF9vcHRfbGVuICsgMTsKKyAgICAgICAgICAgICAgbHRfb3B0X3Byb2Nlc3NfZW52X2FwcGVuZCAocCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoYXJndltpXVtlbnZfYXBwZW5kX29wdF9sZW5dID09ICdcMCcgJiYgaSArIDEgPCBhcmdjKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBsdF9vcHRfcHJvY2Vzc19lbnZfYXBwZW5kIChhcmd2WysraV0pOyAvKiBkb24ndCBjb3B5ICovCisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgbHRfZmF0YWwgKCIlcyBtaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50IiwgZW52X2FwcGVuZF9vcHQpOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICBpZiAoc3RybmNtcCAoYXJndltpXSwgbHR3cmFwcGVyX29wdGlvbl9wcmVmaXgsIG9wdF9wcmVmaXhfbGVuKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgLyogaG93ZXZlciwgaWYgdGhlcmUgaXMgYW4gb3B0aW9uIGluIHRoZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWAorICAgICAgICAgICAgIG5hbWVzcGFjZSwgYnV0IGl0IGlzIG5vdCBvbmUgb2YgdGhlIG9uZXMgd2Uga25vdyBhYm91dCBhbmQKKyAgICAgICAgICAgICBoYXZlIGFscmVhZHkgZGVhbHQgd2l0aCwgYWJvdmUgKGlubHVkaW5nIGR1bXAtc2NyaXB0KSwgdGhlbgorICAgICAgICAgICAgIHJlcG9ydCBhbiBlcnJvci4gT3RoZXJ3aXNlLCB0YXJnZXRzIG1pZ2h0IGJlZ2luIHRvIGJlbGlldmUKKyAgICAgICAgICAgICB0aGV5IGFyZSBhbGxvd2VkIHRvIHVzZSBvcHRpb25zIGluIHRoZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWAorICAgICAgICAgICAgIG5hbWVzcGFjZS4gVGhlIGZpcnN0IHRpbWUgYW55IHVzZXIgY29tcGxhaW5zIGFib3V0IHRoaXMsIHdlJ2xsCisgICAgICAgICAgICAgbmVlZCB0byBtYWtlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYIGEgY29uZmlndXJlLXRpbWUgb3B0aW9uCisgICAgICAgICAgICAgb3IgYSBjb25maWd1cmUuYWMtc2V0dGFibGUgdmFsdWUuCisgICAgICAgICAgICovCisgICAgICAgICAgbHRfZmF0YWwgKCJVbnJlY29nbml6ZWQgb3B0aW9uIGluICVzIG5hbWVzcGFjZTogJyVzJyIsCisgICAgICAgICAgICAgICAgICAgIGx0d3JhcHBlcl9vcHRpb25fcHJlZml4LCBhcmd2W2ldKTsKKyAgICAgICAgfQorICAgICAgLyogb3RoZXJ3aXNlIC4uLiAqLworICAgICAgbmV3YXJnelsrK25ld2FyZ2NdID0geHN0cmR1cCAoYXJndltpXSk7CisgICAgfQorICBuZXdhcmd6WysrbmV3YXJnY10gPSBOVUxMOworCisgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAgICAgKCgiKG1haW4pIGx0X2FyZ3ZfemVybyA6ICVzXG4iLCAobHRfYXJndl96ZXJvID8gbHRfYXJndl96ZXJvIDogIjxOVUxMPiIpKSk7CisgIGZvciAoaSA9IDA7IGkgPCBuZXdhcmdjOyBpKyspCisgICAgeworICAgICAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBuZXdhcmd6WyVkXSAgIDogJXNcbiIsIGksIChuZXdhcmd6W2ldID8gbmV3YXJneltpXSA6ICI8TlVMTD4iKSkpOworICAgIH0KKworRU9GCisKKwkgICAgY2FzZSAkaG9zdF9vcyBpbgorCSAgICAgIG1pbmd3KikKKwkJY2F0IDw8IkVPRiIKKyAgLyogZXhlY3YgZG9lc24ndCBhY3R1YWxseSB3b3JrIG9uIG1pbmd3IGFzIGV4cGVjdGVkIG9uIHVuaXggKi8KKyAgcnZhbCA9IF9zcGF3bnYgKF9QX1dBSVQsIGx0X2FyZ3ZfemVybywgKGNvbnN0IGNoYXIgKiBjb25zdCAqKSBuZXdhcmd6KTsKKyAgaWYgKHJ2YWwgPT0gLTEpCisgICAgeworICAgICAgLyogZmFpbGVkIHRvIHN0YXJ0IHByb2Nlc3MgKi8KKyAgICAgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgZmFpbGVkIHRvIGxhdW5jaCB0YXJnZXQgXCIlc1wiOiBlcnJubyA9ICVkXG4iLCBsdF9hcmd2X3plcm8sIGVycm5vKSk7CisgICAgICByZXR1cm4gMTI3OworICAgIH0KKyAgcmV0dXJuIHJ2YWw7CitFT0YKKwkJOzsKKwkgICAgICAqKQorCQljYXQgPDwiRU9GIgorICBleGVjdiAobHRfYXJndl96ZXJvLCBuZXdhcmd6KTsKKyAgcmV0dXJuIHJ2YWw7IC8qID0xMjcsIGJ1dCBhdm9pZHMgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmcgKi8KK0VPRgorCQk7OworCSAgICBlc2FjCisKKwkgICAgY2F0IDw8IkVPRiIKK30KKwordm9pZCAqCit4bWFsbG9jIChzaXplX3QgbnVtKQoreworICB2b2lkICpwID0gKHZvaWQgKikgbWFsbG9jIChudW0pOworICBpZiAoIXApCisgICAgbHRfZmF0YWwgKCJNZW1vcnkgZXhoYXVzdGVkIik7CisKKyAgcmV0dXJuIHA7Cit9CisKK2NoYXIgKgoreHN0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKQoreworICByZXR1cm4gc3RyaW5nID8gc3RyY3B5ICgoY2hhciAqKSB4bWFsbG9jIChzdHJsZW4gKHN0cmluZykgKyAxKSwKKwkJCSAgc3RyaW5nKSA6IE5VTEw7Cit9CisKK2NvbnN0IGNoYXIgKgorYmFzZV9uYW1lIChjb25zdCBjaGFyICpuYW1lKQoreworICBjb25zdCBjaGFyICpiYXNlOworCisjaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCisgIC8qIFNraXAgb3ZlciB0aGUgZGlzayBuYW1lIGluIE1TRE9TIHBhdGhuYW1lcy4gKi8KKyAgaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKSBuYW1lWzBdKSAmJiBuYW1lWzFdID09ICc6JykKKyAgICBuYW1lICs9IDI7CisjZW5kaWYKKworICBmb3IgKGJhc2UgPSBuYW1lOyAqbmFtZTsgbmFtZSsrKQorICAgIGlmIChJU19ESVJfU0VQQVJBVE9SICgqbmFtZSkpCisgICAgICBiYXNlID0gbmFtZSArIDE7CisgIHJldHVybiBiYXNlOworfQorCitpbnQKK2NoZWNrX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpCit7CisgIHN0cnVjdCBzdGF0IHN0OworCisgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIoY2hlY2tfZXhlY3V0YWJsZSkgIDogJXNcbiIsCisJCQkgIHBhdGggPyAoKnBhdGggPyBwYXRoIDogIkVNUFRZISIpIDogIk5VTEwhIikpOworICBpZiAoKCFwYXRoKSB8fCAoISpwYXRoKSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoKHN0YXQgKHBhdGgsICZzdCkgPj0gMCkKKyAgICAgICYmIChzdC5zdF9tb2RlICYgKFNfSVhVU1IgfCBTX0lYR1JQIHwgU19JWE9USCkpKQorICAgIHJldHVybiAxOworICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorbWFrZV9leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKQoreworICBpbnQgcnZhbCA9IDA7CisgIHN0cnVjdCBzdGF0IHN0OworCisgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFrZV9leGVjdXRhYmxlKSAgIDogJXNcbiIsCisJCQkgIHBhdGggPyAoKnBhdGggPyBwYXRoIDogIkVNUFRZISIpIDogIk5VTEwhIikpOworICBpZiAoKCFwYXRoKSB8fCAoISpwYXRoKSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoc3RhdCAocGF0aCwgJnN0KSA+PSAwKQorICAgIHsKKyAgICAgIHJ2YWwgPSBjaG1vZCAocGF0aCwgc3Quc3RfbW9kZSB8IFNfSVhPVEggfCBTX0lYR1JQIHwgU19JWFVTUik7CisgICAgfQorICByZXR1cm4gcnZhbDsKK30KKworLyogU2VhcmNoZXMgZm9yIHRoZSBmdWxsIHBhdGggb2YgdGhlIHdyYXBwZXIuICBSZXR1cm5zCisgICBuZXdseSBhbGxvY2F0ZWQgZnVsbCBwYXRoIG5hbWUgaWYgZm91bmQsIE5VTEwgb3RoZXJ3aXNlCisgICBEb2VzIG5vdCBjaGFzZSBzeW1saW5rcywgZXZlbiBvbiBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IHRoZW0uCisqLworY2hhciAqCitmaW5kX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKndyYXBwZXIpCit7CisgIGludCBoYXNfc2xhc2ggPSAwOworICBjb25zdCBjaGFyICpwOworICBjb25zdCBjaGFyICpwX25leHQ7CisgIC8qIHN0YXRpYyBidWZmZXIgZm9yIGdldGN3ZCAqLworICBjaGFyIHRtcFtMVF9QQVRITUFYICsgMV07CisgIGludCB0bXBfbGVuOworICBjaGFyICpjb25jYXRfbmFtZTsKKworICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKGZpbmRfZXhlY3V0YWJsZSkgICA6ICVzXG4iLAorCQkJICB3cmFwcGVyID8gKCp3cmFwcGVyID8gd3JhcHBlciA6ICJFTVBUWSEiKSA6ICJOVUxMISIpKTsKKworICBpZiAoKHdyYXBwZXIgPT0gTlVMTCkgfHwgKCp3cmFwcGVyID09ICdcMCcpKQorICAgIHJldHVybiBOVUxMOworCisgIC8qIEFic29sdXRlIHBhdGg/ICovCisjaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCisgIGlmIChpc2FscGhhICgodW5zaWduZWQgY2hhcikgd3JhcHBlclswXSkgJiYgd3JhcHBlclsxXSA9PSAnOicpCisgICAgeworICAgICAgY29uY2F0X25hbWUgPSB4c3RyZHVwICh3cmFwcGVyKTsKKyAgICAgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCisJcmV0dXJuIGNvbmNhdF9uYW1lOworICAgICAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisjZW5kaWYKKyAgICAgIGlmIChJU19ESVJfU0VQQVJBVE9SICh3cmFwcGVyWzBdKSkKKwl7CisJICBjb25jYXRfbmFtZSA9IHhzdHJkdXAgKHdyYXBwZXIpOworCSAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKKwkgICAgcmV0dXJuIGNvbmNhdF9uYW1lOworCSAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKwl9CisjaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCisgICAgfQorI2VuZGlmCisKKyAgZm9yIChwID0gd3JhcHBlcjsgKnA7IHArKykKKyAgICBpZiAoKnAgPT0gJy8nKQorICAgICAgeworCWhhc19zbGFzaCA9IDE7CisJYnJlYWs7CisgICAgICB9CisgIGlmICghaGFzX3NsYXNoKQorICAgIHsKKyAgICAgIC8qIG5vIHNsYXNoZXM7IHNlYXJjaCBQQVRIICovCisgICAgICBjb25zdCBjaGFyICpwYXRoID0gZ2V0ZW52ICgiUEFUSCIpOworICAgICAgaWYgKHBhdGggIT0gTlVMTCkKKwl7CisJICBmb3IgKHAgPSBwYXRoOyAqcDsgcCA9IHBfbmV4dCkKKwkgICAgeworCSAgICAgIGNvbnN0IGNoYXIgKnE7CisJICAgICAgc2l6ZV90IHBfbGVuOworCSAgICAgIGZvciAocSA9IHA7ICpxOyBxKyspCisJCWlmIChJU19QQVRIX1NFUEFSQVRPUiAoKnEpKQorCQkgIGJyZWFrOworCSAgICAgIHBfbGVuID0gcSAtIHA7CisJICAgICAgcF9uZXh0ID0gKCpxID09ICdcMCcgPyBxIDogcSArIDEpOworCSAgICAgIGlmIChwX2xlbiA9PSAwKQorCQl7CisJCSAgLyogZW1wdHkgcGF0aDogY3VycmVudCBkaXJlY3RvcnkgKi8KKwkJICBpZiAoZ2V0Y3dkICh0bXAsIExUX1BBVEhNQVgpID09IE5VTEwpCisJCSAgICBsdF9mYXRhbCAoImdldGN3ZCBmYWlsZWQiKTsKKwkJICB0bXBfbGVuID0gc3RybGVuICh0bXApOworCQkgIGNvbmNhdF9uYW1lID0KKwkJICAgIFhNQUxMT0MgKGNoYXIsIHRtcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOworCQkgIG1lbWNweSAoY29uY2F0X25hbWUsIHRtcCwgdG1wX2xlbik7CisJCSAgY29uY2F0X25hbWVbdG1wX2xlbl0gPSAnLyc7CisJCSAgc3RyY3B5IChjb25jYXRfbmFtZSArIHRtcF9sZW4gKyAxLCB3cmFwcGVyKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIGNvbmNhdF9uYW1lID0KKwkJICAgIFhNQUxMT0MgKGNoYXIsIHBfbGVuICsgMSArIHN0cmxlbiAod3JhcHBlcikgKyAxKTsKKwkJICBtZW1jcHkgKGNvbmNhdF9uYW1lLCBwLCBwX2xlbik7CisJCSAgY29uY2F0X25hbWVbcF9sZW5dID0gJy8nOworCQkgIHN0cmNweSAoY29uY2F0X25hbWUgKyBwX2xlbiArIDEsIHdyYXBwZXIpOworCQl9CisJICAgICAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKKwkJcmV0dXJuIGNvbmNhdF9uYW1lOworCSAgICAgIFhGUkVFIChjb25jYXRfbmFtZSk7CisJICAgIH0KKwl9CisgICAgICAvKiBub3QgZm91bmQgaW4gUEFUSDsgYXNzdW1lIGN1cmRpciAqLworICAgIH0KKyAgLyogUmVsYXRpdmUgcGF0aCB8IG5vdCBmb3VuZCBpbiBwYXRoOiBwcmVwZW5kIGN3ZCAqLworICBpZiAoZ2V0Y3dkICh0bXAsIExUX1BBVEhNQVgpID09IE5VTEwpCisgICAgbHRfZmF0YWwgKCJnZXRjd2QgZmFpbGVkIik7CisgIHRtcF9sZW4gPSBzdHJsZW4gKHRtcCk7CisgIGNvbmNhdF9uYW1lID0gWE1BTExPQyAoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CisgIG1lbWNweSAoY29uY2F0X25hbWUsIHRtcCwgdG1wX2xlbik7CisgIGNvbmNhdF9uYW1lW3RtcF9sZW5dID0gJy8nOworICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgdG1wX2xlbiArIDEsIHdyYXBwZXIpOworCisgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCisgICAgcmV0dXJuIGNvbmNhdF9uYW1lOworICBYRlJFRSAoY29uY2F0X25hbWUpOworICByZXR1cm4gTlVMTDsKK30KKworY2hhciAqCitjaGFzZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNwZWMpCit7CisjaWZuZGVmIFNfSVNMTksKKyAgcmV0dXJuIHhzdHJkdXAgKHBhdGhzcGVjKTsKKyNlbHNlCisgIGNoYXIgYnVmW0xUX1BBVEhNQVhdOworICBzdHJ1Y3Qgc3RhdCBzOworICBjaGFyICp0bXBfcGF0aHNwZWMgPSB4c3RyZHVwIChwYXRoc3BlYyk7CisgIGNoYXIgKnA7CisgIGludCBoYXNfc3ltbGlua3MgPSAwOworICB3aGlsZSAoc3RybGVuICh0bXBfcGF0aHNwZWMpICYmICFoYXNfc3ltbGlua3MpCisgICAgeworICAgICAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoImNoZWNraW5nIHBhdGggY29tcG9uZW50IGZvciBzeW1saW5rczogJXNcbiIsCisJCQkgICAgICB0bXBfcGF0aHNwZWMpKTsKKyAgICAgIGlmIChsc3RhdCAodG1wX3BhdGhzcGVjLCAmcykgPT0gMCkKKwl7CisJICBpZiAoU19JU0xOSyAocy5zdF9tb2RlKSAhPSAwKQorCSAgICB7CisJICAgICAgaGFzX3N5bWxpbmtzID0gMTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCisJICAvKiBzZWFyY2ggYmFja3dhcmRzIGZvciBsYXN0IERJUl9TRVBBUkFUT1IgKi8KKwkgIHAgPSB0bXBfcGF0aHNwZWMgKyBzdHJsZW4gKHRtcF9wYXRoc3BlYykgLSAxOworCSAgd2hpbGUgKChwID4gdG1wX3BhdGhzcGVjKSAmJiAoIUlTX0RJUl9TRVBBUkFUT1IgKCpwKSkpCisJICAgIHAtLTsKKwkgIGlmICgocCA9PSB0bXBfcGF0aHNwZWMpICYmICghSVNfRElSX1NFUEFSQVRPUiAoKnApKSkKKwkgICAgeworCSAgICAgIC8qIG5vIG1vcmUgRElSX1NFUEFSQVRPUlMgbGVmdCAqLworCSAgICAgIGJyZWFrOworCSAgICB9CisJICAqcCA9ICdcMCc7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGNoYXIgKmVycnN0ciA9IHN0cmVycm9yIChlcnJubyk7CisJICBsdF9mYXRhbCAoIkVycm9yIGFjY2Vzc2luZyBmaWxlICVzICglcykiLCB0bXBfcGF0aHNwZWMsIGVycnN0cik7CisJfQorICAgIH0KKyAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7CisKKyAgaWYgKCFoYXNfc3ltbGlua3MpCisgICAgeworICAgICAgcmV0dXJuIHhzdHJkdXAgKHBhdGhzcGVjKTsKKyAgICB9CisKKyAgdG1wX3BhdGhzcGVjID0gcmVhbHBhdGggKHBhdGhzcGVjLCBidWYpOworICBpZiAodG1wX3BhdGhzcGVjID09IDApCisgICAgeworICAgICAgbHRfZmF0YWwgKCJDb3VsZCBub3QgZm9sbG93IHN5bWxpbmtzIGZvciAlcyIsIHBhdGhzcGVjKTsKKyAgICB9CisgIHJldHVybiB4c3RyZHVwICh0bXBfcGF0aHNwZWMpOworI2VuZGlmCit9CisKK2NoYXIgKgorc3RyZW5kemFwIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCkKK3sKKyAgc2l6ZV90IGxlbiwgcGF0bGVuOworCisgIGFzc2VydCAoc3RyICE9IE5VTEwpOworICBhc3NlcnQgKHBhdCAhPSBOVUxMKTsKKworICBsZW4gPSBzdHJsZW4gKHN0cik7CisgIHBhdGxlbiA9IHN0cmxlbiAocGF0KTsKKworICBpZiAocGF0bGVuIDw9IGxlbikKKyAgICB7CisgICAgICBzdHIgKz0gbGVuIC0gcGF0bGVuOworICAgICAgaWYgKHN0cmNtcCAoc3RyLCBwYXQpID09IDApCisJKnN0ciA9ICdcMCc7CisgICAgfQorICByZXR1cm4gc3RyOworfQorCitzdGF0aWMgdm9pZAorbHRfZXJyb3JfY29yZSAoaW50IGV4aXRfc3RhdHVzLCBjb25zdCBjaGFyICptb2RlLAorCSAgICAgICBjb25zdCBjaGFyICptZXNzYWdlLCB2YV9saXN0IGFwKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlczogJXM6ICIsIHByb2dyYW1fbmFtZSwgbW9kZSk7CisgIHZmcHJpbnRmIChzdGRlcnIsIG1lc3NhZ2UsIGFwKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiLlxuIik7CisKKyAgaWYgKGV4aXRfc3RhdHVzID49IDApCisgICAgZXhpdCAoZXhpdF9zdGF0dXMpOworfQorCit2b2lkCitsdF9mYXRhbCAoY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKQoreworICB2YV9saXN0IGFwOworICB2YV9zdGFydCAoYXAsIG1lc3NhZ2UpOworICBsdF9lcnJvcl9jb3JlIChFWElUX0ZBSUxVUkUsICJGQVRBTCIsIG1lc3NhZ2UsIGFwKTsKKyAgdmFfZW5kIChhcCk7Cit9CisKK3ZvaWQKK2x0X3NldGVudiAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobHRfc2V0ZW52KSBzZXR0aW5nICclcycgdG8gJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUgPyBuYW1lIDogIjxOVUxMPiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUgPyB2YWx1ZSA6ICI8TlVMTD4iKSkpOworICB7CisjaWZkZWYgSEFWRV9TRVRFTlYKKyAgICAvKiBhbHdheXMgbWFrZSBhIGNvcHksIGZvciBjb25zaXN0ZW5jeSB3aXRoICFIQVZFX1NFVEVOViAqLworICAgIGNoYXIgKnN0ciA9IHhzdHJkdXAgKHZhbHVlKTsKKyAgICBzZXRlbnYgKG5hbWUsIHN0ciwgMSk7CisjZWxzZQorICAgIGludCBsZW4gPSBzdHJsZW4gKG5hbWUpICsgMSArIHN0cmxlbiAodmFsdWUpICsgMTsKKyAgICBjaGFyICpzdHIgPSBYTUFMTE9DIChjaGFyLCBsZW4pOworICAgIHNwcmludGYgKHN0ciwgIiVzPSVzIiwgbmFtZSwgdmFsdWUpOworICAgIGlmIChwdXRlbnYgKHN0cikgIT0gRVhJVF9TVUNDRVNTKQorICAgICAgeworICAgICAgICBYRlJFRSAoc3RyKTsKKyAgICAgIH0KKyNlbmRpZgorICB9Cit9CisKK2NoYXIgKgorbHRfZXh0ZW5kX3N0ciAoY29uc3QgY2hhciAqb3JpZ192YWx1ZSwgY29uc3QgY2hhciAqYWRkLCBpbnQgdG9fZW5kKQoreworICBjaGFyICpuZXdfdmFsdWU7CisgIGlmIChvcmlnX3ZhbHVlICYmICpvcmlnX3ZhbHVlKQorICAgIHsKKyAgICAgIGludCBvcmlnX3ZhbHVlX2xlbiA9IHN0cmxlbiAob3JpZ192YWx1ZSk7CisgICAgICBpbnQgYWRkX2xlbiA9IHN0cmxlbiAoYWRkKTsKKyAgICAgIG5ld192YWx1ZSA9IFhNQUxMT0MgKGNoYXIsIGFkZF9sZW4gKyBvcmlnX3ZhbHVlX2xlbiArIDEpOworICAgICAgaWYgKHRvX2VuZCkKKyAgICAgICAgeworICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlLCBvcmlnX3ZhbHVlKTsKKyAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSArIG9yaWdfdmFsdWVfbGVuLCBhZGQpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSwgYWRkKTsKKyAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSArIGFkZF9sZW4sIG9yaWdfdmFsdWUpOworICAgICAgICB9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbmV3X3ZhbHVlID0geHN0cmR1cCAoYWRkKTsKKyAgICB9CisgIHJldHVybiBuZXdfdmFsdWU7Cit9CisKK2ludAorbHRfc3BsaXRfbmFtZV92YWx1ZSAoY29uc3QgY2hhciAqYXJnLCBjaGFyKiogbmFtZSwgY2hhcioqIHZhbHVlKQoreworICBjb25zdCBjaGFyICpwOworICBpbnQgbGVuOworICBpZiAoIWFyZyB8fCAhKmFyZykKKyAgICByZXR1cm4gMTsKKworICBwID0gc3RyY2hyIChhcmcsIChpbnQpJz0nKTsKKworICBpZiAoIXApCisgICAgcmV0dXJuIDE7CisKKyAgKnZhbHVlID0geHN0cmR1cCAoKytwKTsKKworICBsZW4gPSBzdHJsZW4gKGFyZykgLSBzdHJsZW4gKCp2YWx1ZSk7CisgICpuYW1lID0gWE1BTExPQyAoY2hhciwgbGVuKTsKKyAgc3RybmNweSAoKm5hbWUsIGFyZywgbGVuLTEpOworICAoKm5hbWUpW2xlbiAtIDFdID0gJ1wwJzsKKworICByZXR1cm4gMDsKK30KKwordm9pZAorbHRfb3B0X3Byb2Nlc3NfZW52X3NldCAoY29uc3QgY2hhciAqYXJnKQoreworICBjaGFyICpuYW1lID0gTlVMTDsKKyAgY2hhciAqdmFsdWUgPSBOVUxMOworCisgIGlmIChsdF9zcGxpdF9uYW1lX3ZhbHVlIChhcmcsICZuYW1lLCAmdmFsdWUpICE9IDApCisgICAgeworICAgICAgWEZSRUUgKG5hbWUpOworICAgICAgWEZSRUUgKHZhbHVlKTsKKyAgICAgIGx0X2ZhdGFsICgiYmFkIGFyZ3VtZW50IGZvciAlczogJyVzJyIsIGVudl9zZXRfb3B0LCBhcmcpOworICAgIH0KKworICBsdF9zZXRlbnYgKG5hbWUsIHZhbHVlKTsKKyAgWEZSRUUgKG5hbWUpOworICBYRlJFRSAodmFsdWUpOworfQorCit2b2lkCitsdF9vcHRfcHJvY2Vzc19lbnZfcHJlcGVuZCAoY29uc3QgY2hhciAqYXJnKQoreworICBjaGFyICpuYW1lID0gTlVMTDsKKyAgY2hhciAqdmFsdWUgPSBOVUxMOworICBjaGFyICpuZXdfdmFsdWUgPSBOVUxMOworCisgIGlmIChsdF9zcGxpdF9uYW1lX3ZhbHVlIChhcmcsICZuYW1lLCAmdmFsdWUpICE9IDApCisgICAgeworICAgICAgWEZSRUUgKG5hbWUpOworICAgICAgWEZSRUUgKHZhbHVlKTsKKyAgICAgIGx0X2ZhdGFsICgiYmFkIGFyZ3VtZW50IGZvciAlczogJyVzJyIsIGVudl9wcmVwZW5kX29wdCwgYXJnKTsKKyAgICB9CisKKyAgbmV3X3ZhbHVlID0gbHRfZXh0ZW5kX3N0ciAoZ2V0ZW52IChuYW1lKSwgdmFsdWUsIDApOworICBsdF9zZXRlbnYgKG5hbWUsIG5ld192YWx1ZSk7CisgIFhGUkVFIChuZXdfdmFsdWUpOworICBYRlJFRSAobmFtZSk7CisgIFhGUkVFICh2YWx1ZSk7Cit9CisKK3ZvaWQKK2x0X29wdF9wcm9jZXNzX2Vudl9hcHBlbmQgKGNvbnN0IGNoYXIgKmFyZykKK3sKKyAgY2hhciAqbmFtZSA9IE5VTEw7CisgIGNoYXIgKnZhbHVlID0gTlVMTDsKKyAgY2hhciAqbmV3X3ZhbHVlID0gTlVMTDsKKworICBpZiAobHRfc3BsaXRfbmFtZV92YWx1ZSAoYXJnLCAmbmFtZSwgJnZhbHVlKSAhPSAwKQorICAgIHsKKyAgICAgIFhGUkVFIChuYW1lKTsKKyAgICAgIFhGUkVFICh2YWx1ZSk7CisgICAgICBsdF9mYXRhbCAoImJhZCBhcmd1bWVudCBmb3IgJXM6ICclcyciLCBlbnZfYXBwZW5kX29wdCwgYXJnKTsKKyAgICB9CisKKyAgbmV3X3ZhbHVlID0gbHRfZXh0ZW5kX3N0ciAoZ2V0ZW52IChuYW1lKSwgdmFsdWUsIDEpOworICBsdF9zZXRlbnYgKG5hbWUsIG5ld192YWx1ZSk7CisgIFhGUkVFIChuZXdfdmFsdWUpOworICBYRlJFRSAobmFtZSk7CisgIFhGUkVFICh2YWx1ZSk7Cit9CisKK3ZvaWQKK2x0X3VwZGF0ZV9leGVfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobHRfdXBkYXRlX2V4ZV9wYXRoKSBtb2RpZnlpbmcgJyVzJyBieSBwcmVwZW5kaW5nICclcydcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChuYW1lID8gbmFtZSA6ICI8TlVMTD4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlID8gdmFsdWUgOiAiPE5VTEw+IikpKTsKKworICBpZiAobmFtZSAmJiAqbmFtZSAmJiB2YWx1ZSAmJiAqdmFsdWUpCisgICAgeworICAgICAgY2hhciAqbmV3X3ZhbHVlID0gbHRfZXh0ZW5kX3N0ciAoZ2V0ZW52IChuYW1lKSwgdmFsdWUsIDApOworICAgICAgLyogc29tZSBzeXN0ZW1zIGNhbid0IGNvcGUgd2l0aCBhICc6Jy10ZXJtaW5hdGVkIHBhdGggIycgKi8KKyAgICAgIGludCBsZW4gPSBzdHJsZW4gKG5ld192YWx1ZSk7CisgICAgICB3aGlsZSAoKChsZW4gPSBzdHJsZW4gKG5ld192YWx1ZSkpID4gMCkgJiYgSVNfUEFUSF9TRVBBUkFUT1IgKG5ld192YWx1ZVtsZW4tMV0pKQorICAgICAgICB7CisgICAgICAgICAgbmV3X3ZhbHVlW2xlbi0xXSA9ICdcMCc7CisgICAgICAgIH0KKyAgICAgIGx0X3NldGVudiAobmFtZSwgbmV3X3ZhbHVlKTsKKyAgICAgIFhGUkVFIChuZXdfdmFsdWUpOworICAgIH0KK30KKwordm9pZAorbHRfdXBkYXRlX2xpYl9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihsdF91cGRhdGVfbGliX3BhdGgpIG1vZGlmeWluZyAnJXMnIGJ5IHByZXBlbmRpbmcgJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUgPyBuYW1lIDogIjxOVUxMPiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUgPyB2YWx1ZSA6ICI8TlVMTD4iKSkpOworCisgIGlmIChuYW1lICYmICpuYW1lICYmIHZhbHVlICYmICp2YWx1ZSkKKyAgICB7CisgICAgICBjaGFyICpuZXdfdmFsdWUgPSBsdF9leHRlbmRfc3RyIChnZXRlbnYgKG5hbWUpLCB2YWx1ZSwgMCk7CisgICAgICBsdF9zZXRlbnYgKG5hbWUsIG5ld192YWx1ZSk7CisgICAgICBYRlJFRSAobmV3X3ZhbHVlKTsKKyAgICB9Cit9CisKKworRU9GCit9CisjIGVuZDogZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYworCisjIGZ1bmNfbW9kZV9saW5rIGFyZy4uLgorZnVuY19tb2RlX2xpbmsgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgY2FzZSAkaG9zdCBpbgorICAgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCisgICAgICAjIEl0IGlzIGltcG9zc2libGUgdG8gbGluayBhIGRsbCB3aXRob3V0IHRoaXMgc2V0dGluZywgYW5kCisgICAgICAjIHdlIHNob3VsZG4ndCBmb3JjZSB0aGUgbWFrZWZpbGUgbWFpbnRhaW5lciB0byBmaWd1cmUgb3V0CisgICAgICAjIHdoaWNoIHN5c3RlbSB3ZSBhcmUgY29tcGlsaW5nIGZvciBpbiBvcmRlciB0byBwYXNzIGFuIGV4dHJhCisgICAgICAjIGZsYWcgZm9yIGV2ZXJ5IGxpYnRvb2wgaW52b2NhdGlvbi4KKyAgICAgICMgYWxsb3dfdW5kZWZpbmVkPW5vCisKKyAgICAgICMgRklYTUU6IFVuZm9ydHVuYXRlbHksIHRoZXJlIGFyZSBwcm9ibGVtcyB3aXRoIHRoZSBhYm92ZSB3aGVuIHRyeWluZworICAgICAgIyB0byBtYWtlIGEgZGxsIHdoaWNoIGhhcyB1bmRlZmluZWQgc3ltYm9scywgaW4gd2hpY2ggY2FzZSBub3QKKyAgICAgICMgZXZlbiBhIHN0YXRpYyBsaWJyYXJ5IGlzIGJ1aWx0LiAgRm9yIG5vdywgd2UgbmVlZCB0byBzcGVjaWZ5CisgICAgICAjIC1uby11bmRlZmluZWQgb24gdGhlIGxpYnRvb2wgbGluayBsaW5lIHdoZW4gd2UgY2FuIGJlIGNlcnRhaW4KKyAgICAgICMgdGhhdCBhbGwgc3ltYm9scyBhcmUgc2F0aXNmaWVkLCBvdGhlcndpc2Ugd2UgZ2V0IGEgc3RhdGljIGxpYnJhcnkuCisgICAgICBhbGxvd191bmRlZmluZWQ9eWVzCisgICAgICA7OworICAgICopCisgICAgICBhbGxvd191bmRlZmluZWQ9eWVzCisgICAgICA7OworICAgIGVzYWMKKyAgICBsaWJ0b29sX2FyZ3M9JG5vbm9wdAorICAgIGJhc2VfY29tcGlsZT0iJG5vbm9wdCAkQCIKKyAgICBjb21waWxlX2NvbW1hbmQ9JG5vbm9wdAorICAgIGZpbmFsaXplX2NvbW1hbmQ9JG5vbm9wdAorCisgICAgY29tcGlsZV9ycGF0aD0KKyAgICBmaW5hbGl6ZV9ycGF0aD0KKyAgICBjb21waWxlX3NobGlicGF0aD0KKyAgICBmaW5hbGl6ZV9zaGxpYnBhdGg9CisgICAgY29udmVuaWVuY2U9CisgICAgb2xkX2NvbnZlbmllbmNlPQorICAgIGRlcGxpYnM9CisgICAgb2xkX2RlcGxpYnM9CisgICAgY29tcGlsZXJfZmxhZ3M9CisgICAgbGlua2VyX2ZsYWdzPQorICAgIGRsbHNlYXJjaHBhdGg9CisgICAgbGliX3NlYXJjaF9wYXRoPWBwd2RgCisgICAgaW5zdF9wcmVmaXhfZGlyPQorICAgIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPQorCisgICAgYXZvaWRfdmVyc2lvbj1ubworICAgIGRsZmlsZXM9CisgICAgZGxwcmVmaWxlcz0KKyAgICBkbHNlbGY9bm8KKyAgICBleHBvcnRfZHluYW1pYz1ubworICAgIGV4cG9ydF9zeW1ib2xzPQorICAgIGV4cG9ydF9zeW1ib2xzX3JlZ2V4PQorICAgIGdlbmVyYXRlZD0KKyAgICBsaWJvYmpzPQorICAgIGx0bGlicz0KKyAgICBtb2R1bGU9bm8KKyAgICBub19pbnN0YWxsPW5vCisgICAgb2Jqcz0KKyAgICBub25fcGljX29iamVjdHM9CisgICAgcHJlY2lvdXNfZmlsZXNfcmVnZXg9CisgICAgcHJlZmVyX3N0YXRpY19saWJzPW5vCisgICAgcHJlbG9hZD1ubworICAgIHByZXY9CisgICAgcHJldmFyZz0KKyAgICByZWxlYXNlPQorICAgIHJwYXRoPQorICAgIHhycGF0aD0KKyAgICBwZXJtX3JwYXRoPQorICAgIHRlbXBfcnBhdGg9CisgICAgdGhyZWFkX3NhZmU9bm8KKyAgICB2aW5mbz0KKyAgICB2aW5mb19udW1iZXI9bm8KKyAgICB3ZWFrX2xpYnM9CisgICAgc2luZ2xlX21vZHVsZT0iJHt3bH0tc2luZ2xlX21vZHVsZSIKKyAgICBmdW5jX2luZmVyX3RhZyAkYmFzZV9jb21waWxlCisKKyAgICAjIFdlIG5lZWQgdG8ga25vdyAtc3RhdGljLCB0byBnZXQgdGhlIHJpZ2h0IG91dHB1dCBmaWxlbmFtZXMuCisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1zaGFyZWQpCisJdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIFwKKwkgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAiY2FuIG5vdCBidWlsZCBhIHNoYXJlZCBsaWJyYXJ5IgorCWJ1aWxkX29sZF9saWJzPW5vCisJYnJlYWsKKwk7OworICAgICAgLWFsbC1zdGF0aWMgfCAtc3RhdGljIHwgLXN0YXRpYy1saWJ0b29sLWxpYnMpCisJY2FzZSAkYXJnIGluCisJLWFsbC1zdGF0aWMpCisJICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0IC16ICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICAgZnVuY193YXJuaW5nICJjb21wbGV0ZSBzdGF0aWMgbGlua2luZyBpcyBpbXBvc3NpYmxlIGluIHRoaXMgY29uZmlndXJhdGlvbiIKKwkgIGZpCisJICBpZiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICAgZGxvcGVuX3NlbGY9JGRsb3Blbl9zZWxmX3N0YXRpYworCSAgZmkKKwkgIHByZWZlcl9zdGF0aWNfbGlicz15ZXMKKwkgIDs7CisJLXN0YXRpYykKKwkgIGlmIHRlc3QgLXogIiRwaWNfZmxhZyIgJiYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAgIGRsb3Blbl9zZWxmPSRkbG9wZW5fc2VsZl9zdGF0aWMKKwkgIGZpCisJICBwcmVmZXJfc3RhdGljX2xpYnM9YnVpbHQKKwkgIDs7CisJLXN0YXRpYy1saWJ0b29sLWxpYnMpCisJICBpZiB0ZXN0IC16ICIkcGljX2ZsYWciICYmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCSAgICBkbG9wZW5fc2VsZj0kZGxvcGVuX3NlbGZfc3RhdGljCisJICBmaQorCSAgcHJlZmVyX3N0YXRpY19saWJzPXllcworCSAgOzsKKwllc2FjCisJYnVpbGRfbGlidG9vbF9saWJzPW5vCisJYnVpbGRfb2xkX2xpYnM9eWVzCisJYnJlYWsKKwk7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgICMgU2VlIGlmIG91ciBzaGFyZWQgYXJjaGl2ZXMgZGVwZW5kIG9uIHN0YXRpYyBhcmNoaXZlcy4KKyAgICB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgJiYgYnVpbGRfb2xkX2xpYnM9eWVzCisKKyAgICAjIEdvIHRocm91Z2ggdGhlIGFyZ3VtZW50cywgdHJhbnNmb3JtaW5nIHRoZW0gb24gdGhlIHdheS4KKyAgICB3aGlsZSB0ZXN0ICIkIyIgLWd0IDA7IGRvCisgICAgICBhcmc9IiQxIgorICAgICAgc2hpZnQKKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisgICAgICBxYXJnPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdAorICAgICAgZnVuY19hcHBlbmQgbGlidG9vbF9hcmdzICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCisgICAgICAjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZHMgYW4gYXJndW1lbnQsIGFzc2lnbiBpdC4KKyAgICAgIGlmIHRlc3QgLW4gIiRwcmV2IjsgdGhlbgorCWNhc2UgJHByZXYgaW4KKwlvdXRwdXQpCisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiBAT1VUUFVUQCIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiBAT1VUUFVUQCIKKwkgIDs7CisJZXNhYworCisJY2FzZSAkcHJldiBpbgorCWRsZmlsZXN8ZGxwcmVmaWxlcykKKwkgIGlmIHRlc3QgIiRwcmVsb2FkIiA9IG5vOyB0aGVuCisJICAgICMgQWRkIHRoZSBzeW1ib2wgb2JqZWN0IGludG8gdGhlIGxpbmtpbmcgY29tbWFuZHMuCisJICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiIEBTWU1GSUxFQCIKKwkgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiIEBTWU1GSUxFQCIKKwkgICAgcHJlbG9hZD15ZXMKKwkgIGZpCisJICBjYXNlICRhcmcgaW4KKwkgICoubGEgfCAqLmxvKSA7OyAgIyBXZSBoYW5kbGUgdGhlc2UgY2FzZXMgYmVsb3cuCisJICBmb3JjZSkKKwkgICAgaWYgdGVzdCAiJGRsc2VsZiIgPSBubzsgdGhlbgorCSAgICAgIGRsc2VsZj1uZWVkbGVzcworCSAgICAgIGV4cG9ydF9keW5hbWljPXllcworCSAgICBmaQorCSAgICBwcmV2PQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgc2VsZikKKwkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorCSAgICAgIGRsc2VsZj15ZXMKKwkgICAgZWxpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzICYmIHRlc3QgIiRkbG9wZW5fc2VsZiIgIT0geWVzOyB0aGVuCisJICAgICAgZGxzZWxmPXllcworCSAgICBlbHNlCisJICAgICAgZGxzZWxmPW5lZWRsZXNzCisJICAgICAgZXhwb3J0X2R5bmFtaWM9eWVzCisJICAgIGZpCisJICAgIHByZXY9CisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICAqKQorCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCisJICAgICAgZGxmaWxlcz0iJGRsZmlsZXMgJGFyZyIKKwkgICAgZWxzZQorCSAgICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRhcmciCisJICAgIGZpCisJICAgIHByZXY9CisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBlc2FjCisJICA7OworCWV4cHN5bXMpCisJICBleHBvcnRfc3ltYm9scz0iJGFyZyIKKwkgIHRlc3QgLWYgIiRhcmciIFwKKwkgICAgfHwgZnVuY19mYXRhbF9lcnJvciAic3ltYm9sIGZpbGUgXGAkYXJnJyBkb2VzIG5vdCBleGlzdCIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlleHBzeW1zX3JlZ2V4KQorCSAgZXhwb3J0X3N5bWJvbHNfcmVnZXg9IiRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJZnJhbWV3b3JrKQorCSAgY2FzZSAkaG9zdCBpbgorCSAgICAqLSotZGFyd2luKikKKwkgICAgICBjYXNlICIkZGVwbGlicyAiIGluCisJCSoiICRxYXJnLmx0ZnJhbWV3b3JrICIqKSA7OworCQkqKSBkZXBsaWJzPSIkZGVwbGlicyAkcWFyZy5sdGZyYW1ld29yayIgIyB0aGlzIGlzIGZpeGVkIGxhdGVyCisJCSAgIDs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICBlc2FjCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJaW5zdF9wcmVmaXgpCisJICBpbnN0X3ByZWZpeF9kaXI9IiRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJb2JqZWN0bGlzdCkKKwkgIGlmIHRlc3QgLWYgIiRhcmciOyB0aGVuCisJICAgIHNhdmVfYXJnPSRhcmcKKwkgICAgbW9yZWFyZ3M9CisJICAgIGZvciBmaWwgaW4gYGNhdCAiJHNhdmVfYXJnImAKKwkgICAgZG8KKyMJICAgICAgbW9yZWFyZ3M9IiRtb3JlYXJncyAkZmlsIgorCSAgICAgIGFyZz0kZmlsCisJICAgICAgIyBBIGxpYnRvb2wtY29udHJvbGxlZCBvYmplY3QuCisKKwkgICAgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBvYmplY3QuCisJICAgICAgaWYgZnVuY19sYWxpYl91bnNhZmVfcCAiJGFyZyI7IHRoZW4KKwkJcGljX29iamVjdD0KKwkJbm9uX3BpY19vYmplY3Q9CisKKwkJIyBSZWFkIHRoZSAubG8gZmlsZQorCQlmdW5jX3NvdXJjZSAiJGFyZyIKKworCQlpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwKKwkJICAgdGVzdCAteiAiJG5vbl9waWNfb2JqZWN0IiB8fAorCQkgICB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lICYmCisJCSAgIHRlc3QgIiRub25fcGljX29iamVjdCIgPSBub25lOyB0aGVuCisJCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBvYmplY3QgZm9yIFxgJGFyZyciCisJCWZpCisKKwkJIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKwkJZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKKwkJeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwkJaWYgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkJICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCQkgIHBpY19vYmplY3Q9IiR4ZGlyJHBpY19vYmplY3QiCisKKwkJICBpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCisJCSAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0geWVzOyB0aGVuCisJCSAgICAgIGRsZmlsZXM9IiRkbGZpbGVzICRwaWNfb2JqZWN0IgorCQkgICAgICBwcmV2PQorCQkgICAgICBjb250aW51ZQorCQkgICAgZWxzZQorCQkgICAgICAjIElmIGxpYnRvb2wgb2JqZWN0cyBhcmUgdW5zdXBwb3J0ZWQsIHRoZW4gd2UgbmVlZCB0byBwcmVsb2FkLgorCQkgICAgICBwcmV2PWRscHJlZmlsZXMKKwkJICAgIGZpCisJCSAgZmkKKworCQkgICMgQ0hFQ0sgTUU6ICBJIHRoaW5rIEkgYnVzdGVkIHRoaXMuICAtT3NzYW1hCisJCSAgaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorCQkgICAgIyBQcmVsb2FkIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgorCQkgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJHBpY19vYmplY3QiCisJCSAgICBwcmV2PQorCQkgIGZpCisKKwkJICAjIEEgUElDIG9iamVjdC4KKwkJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCisJCSAgYXJnPSIkcGljX29iamVjdCIKKwkJZmkKKworCQkjIE5vbi1QSUMgb2JqZWN0LgorCQlpZiB0ZXN0ICIkbm9uX3BpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkJICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCQkgIG5vbl9waWNfb2JqZWN0PSIkeGRpciRub25fcGljX29iamVjdCIKKworCQkgICMgQSBzdGFuZGFyZCBub24tUElDIG9iamVjdAorCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkJICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSA7IHRoZW4KKwkJICAgIGFyZz0iJG5vbl9waWNfb2JqZWN0IgorCQkgIGZpCisJCWVsc2UKKwkJICAjIElmIHRoZSBQSUMgb2JqZWN0IGV4aXN0cywgdXNlIGl0IGluc3RlYWQuCisJCSAgIyAkeGRpciB3YXMgcHJlcGVuZGVkIHRvICRwaWNfb2JqZWN0IGFib3ZlLgorCQkgIG5vbl9waWNfb2JqZWN0PSIkcGljX29iamVjdCIKKwkJICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJCWZpCisJICAgICAgZWxzZQorCQkjIE9ubHkgYW4gZXJyb3IgaWYgbm90IGRvaW5nIGEgZHJ5LXJ1bi4KKwkJaWYgJG9wdF9kcnlfcnVuOyB0aGVuCisJCSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKwkJICBmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCQkgIHhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCisJCSAgZnVuY19sbzJvICIkYXJnIgorCQkgIHBpY19vYmplY3Q9JHhkaXIkb2JqZGlyLyRmdW5jX2xvMm9fcmVzdWx0CisJCSAgbm9uX3BpY19vYmplY3Q9JHhkaXIkZnVuY19sbzJvX3Jlc3VsdAorCQkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKKwkJICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJICAgICAgICBlbHNlCisJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkYXJnJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIG9iamVjdCIKKwkJZmkKKwkgICAgICBmaQorCSAgICBkb25lCisJICBlbHNlCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImxpbmsgaW5wdXQgZmlsZSBcYCRhcmcnIGRvZXMgbm90IGV4aXN0IgorCSAgZmkKKwkgIGFyZz0kc2F2ZV9hcmcKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlwcmVjaW91c19yZWdleCkKKwkgIHByZWNpb3VzX2ZpbGVzX3JlZ2V4PSIkYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXJlbGVhc2UpCisJICByZWxlYXNlPSItJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlycGF0aCB8IHhycGF0aCkKKwkgICMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCSAgY2FzZSAkYXJnIGluCisJICBbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CisJICAqKQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGFic29sdXRlIHJ1bi1wYXRocyBhcmUgYWxsb3dlZCIKKwkgICAgOzsKKwkgIGVzYWMKKwkgIGlmIHRlc3QgIiRwcmV2IiA9IHJwYXRoOyB0aGVuCisJICAgIGNhc2UgIiRycGF0aCAiIGluCisJICAgICoiICRhcmcgIiopIDs7CisJICAgICopIHJwYXRoPSIkcnBhdGggJGFyZyIgOzsKKwkgICAgZXNhYworCSAgZWxzZQorCSAgICBjYXNlICIkeHJwYXRoICIgaW4KKwkgICAgKiIgJGFyZyAiKikgOzsKKwkgICAgKikgeHJwYXRoPSIkeHJwYXRoICRhcmciIDs7CisJICAgIGVzYWMKKwkgIGZpCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJc2hyZXh0KQorCSAgc2hyZXh0X2NtZHM9IiRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJd2VhaykKKwkgIHdlYWtfbGlicz0iJHdlYWtfbGlicyAkYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXhjY2xpbmtlcikKKwkgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAkcWFyZyIKKwkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHFhcmciCisJICBwcmV2PQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHFhcmciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHFhcmciCisJICBjb250aW51ZQorCSAgOzsKKwl4Y29tcGlsZXIpCisJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRxYXJnIgorCSAgcHJldj0KKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRxYXJnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRxYXJnIgorCSAgY29udGludWUKKwkgIDs7CisJeGxpbmtlcikKKwkgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAkcWFyZyIKKwkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHdsJHFhcmciCisJICBwcmV2PQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHdsJHFhcmciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHdsJHFhcmciCisJICBjb250aW51ZQorCSAgOzsKKwkqKQorCSAgZXZhbCAiJHByZXY9XCJcJGFyZ1wiIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCWVzYWMKKyAgICAgIGZpICMgdGVzdCAtbiAiJHByZXYiCisKKyAgICAgIHByZXZhcmc9IiRhcmciCisKKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLWFsbC1zdGF0aWMpCisJaWYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAjIFNlZSBjb21tZW50IGZvciAtc3RhdGljIGZsYWcgYmVsb3csIGZvciBtb3JlIGRldGFpbHMuCisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkbGlua19zdGF0aWNfZmxhZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkbGlua19zdGF0aWNfZmxhZyIKKwlmaQorCWNvbnRpbnVlCisJOzsKKworICAgICAgLWFsbG93LXVuZGVmaW5lZCkKKwkjIEZJWE1FOiByZW1vdmUgdGhpcyBmbGFnIHNvbWV0aW1lIGluIHRoZSBmdXR1cmUuCisJZnVuY19mYXRhbF9lcnJvciAiXGAtYWxsb3ctdW5kZWZpbmVkJyBtdXN0IG5vdCBiZSB1c2VkIGJlY2F1c2UgaXQgaXMgdGhlIGRlZmF1bHQiCisJOzsKKworICAgICAgLWF2b2lkLXZlcnNpb24pCisJYXZvaWRfdmVyc2lvbj15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1kbG9wZW4pCisJcHJldj1kbGZpbGVzCisJY29udGludWUKKwk7OworCisgICAgICAtZGxwcmVvcGVuKQorCXByZXY9ZGxwcmVmaWxlcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWV4cG9ydC1keW5hbWljKQorCWV4cG9ydF9keW5hbWljPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWV4cG9ydC1zeW1ib2xzIHwgLWV4cG9ydC1zeW1ib2xzLXJlZ2V4KQorCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgfHwgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgZnVuY19mYXRhbF9lcnJvciAibW9yZSB0aGFuIG9uZSAtZXhwb3J0ZWQtc3ltYm9scyBhcmd1bWVudCBpcyBub3QgYWxsb3dlZCIKKwlmaQorCWlmIHRlc3QgIlgkYXJnIiA9ICJYLWV4cG9ydC1zeW1ib2xzIjsgdGhlbgorCSAgcHJldj1leHBzeW1zCisJZWxzZQorCSAgcHJldj1leHBzeW1zX3JlZ2V4CisJZmkKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1mcmFtZXdvcmspCisJcHJldj1mcmFtZXdvcmsKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1pbnN0LXByZWZpeC1kaXIpCisJcHJldj1pbnN0X3ByZWZpeAorCWNvbnRpbnVlCisJOzsKKworICAgICAgIyBUaGUgbmF0aXZlIElSSVggbGlua2VyIHVuZGVyc3RhbmRzIC1MQU5HOiosIC1MSVNUOiogYW5kIC1MTk86KgorICAgICAgIyBzbywgaWYgd2Ugc2VlIHRoZXNlIGZsYWdzIGJlIGNhcmVmdWwgbm90IHRvIHRyZWF0IHRoZW0gbGlrZSAtTAorICAgICAgLUxbQS1aXVtBLVpdKjoqKQorCWNhc2UgJHdpdGhfZ2NjLyRob3N0IGluCisJbm8vKi0qLWlyaXgqIHwgLyotKi1pcml4KikKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKwkgIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLUwqKQorCWZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRhcmciCisJZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwlpZiB0ZXN0IC16ICIkZGlyIjsgdGhlbgorCSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgInJlcXVpcmUgbm8gc3BhY2UgYmV0d2VlbiBcYC1MJyBhbmQgXGAkMSciCisJICBlbHNlCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm5lZWQgcGF0aCBmb3IgXGAtTCcgb3B0aW9uIgorCSAgZmkKKwlmaQorCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCWNhc2UgJGRpciBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKwkqKQorCSAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAorCSAgdGVzdCAteiAiJGFic2RpciIgJiYgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mIFxgJGRpciciCisJICBkaXI9IiRhYnNkaXIiCisJICA7OworCWVzYWMKKwljYXNlICIkZGVwbGlicyAiIGluCisJKiIgLUwkZGlyICIqKSA7OworCSopCisJICBkZXBsaWJzPSIkZGVwbGlicyAtTCRkaXIiCisJICBsaWJfc2VhcmNoX3BhdGg9IiRsaWJfc2VhcmNoX3BhdGggJGRpciIKKwkgIDs7CisJZXNhYworCWNhc2UgJGhvc3QgaW4KKwkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotY2VnY2MqKQorCSAgdGVzdGJpbmRpcj1gJEVDSE8gIlgkZGlyIiB8ICRYc2VkIC1lICdzKi9saWIkKi9iaW4qJ2AKKwkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorCSAgKiI6JGRpcjoiKikgOzsKKwkgIDo6KSBkbGxzZWFyY2hwYXRoPSRkaXI7OworCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JGRpciI7OworCSAgZXNhYworCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisJICAqIjokdGVzdGJpbmRpcjoiKikgOzsKKwkgIDo6KSBkbGxzZWFyY2hwYXRoPSR0ZXN0YmluZGlyOzsKKwkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiR0ZXN0YmluZGlyIjs7CisJICBlc2FjCisJICA7OworCWVzYWMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1sKikKKwlpZiB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgfHwgdGVzdCAiWCRhcmciID0gIlgtbG0iOyB0aGVuCisJICBjYXNlICRob3N0IGluCisJICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotYmVvcyogfCAqLWNlZ2NjKikKKwkgICAgIyBUaGVzZSBzeXN0ZW1zIGRvbid0IGFjdHVhbGx5IGhhdmUgYSBDIG9yIG1hdGggbGlicmFyeSAoYXMgc3VjaCkKKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgICotKi1vczIqKQorCSAgICAjIFRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIEMgbGlicmFyeSAoYXMgc3VjaCkKKwkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCogfCAqLSotZHJhZ29uZmx5KikKKwkgICAgIyBEbyBub3QgaW5jbHVkZSBsaWJjIGR1ZSB0byB1cyBoYXZpbmcgbGliYy9saWJjX3IuCisJICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQorCSAgICA7OworCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSAgICAjIFJoYXBzb2R5IEMgYW5kIG1hdGggbGlicmFyaWVzIGFyZSBpbiB0aGUgU3lzdGVtIGZyYW1ld29yaworCSAgICBkZXBsaWJzPSIkZGVwbGlicyBTeXN0ZW0ubHRmcmFtZXdvcmsiCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotc2NvMy4ydjUqIHwgKi0qLXNjbzV2NiopCisJICAgICMgQ2F1c2VzIHByb2JsZW1zIHdpdGggX19jdHlwZQorCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKwkgICAgOzsKKwkgICotKi1zeXN2NC4ydXcyKiB8ICotKi1zeXN2NSogfCAqLSotdW5peHdhcmUqIHwgKi0qLU9wZW5VTklYKikKKwkgICAgIyBDb21waWxlciBpbnNlcnRzIGxpYmMgaW4gdGhlIGNvcnJlY3QgcGxhY2UgZm9yIHRocmVhZHMgdG8gd29yaworCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKwkgICAgOzsKKwkgIGVzYWMKKwllbGlmIHRlc3QgIlgkYXJnIiA9ICJYLWxjX3IiOyB0aGVuCisJIGNhc2UgJGhvc3QgaW4KKwkgKi0qLW9wZW5ic2QqIHwgKi0qLWZyZWVic2QqIHwgKi0qLWRyYWdvbmZseSopCisJICAgIyBEbyBub3QgaW5jbHVkZSBsaWJjX3IgZGlyZWN0bHksIHVzZSAtcHRocmVhZCBmbGFnLgorCSAgIGNvbnRpbnVlCisJICAgOzsKKwkgZXNhYworCWZpCisJZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1tb2R1bGUpCisJbW9kdWxlPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgIyBUcnU2NCBVTklYIHVzZXMgLW1vZGVsIFthcmddIHRvIGRldGVybWluZSB0aGUgbGF5b3V0IG9mIEMrKworICAgICAgIyBjbGFzc2VzLCBuYW1lIG1hbmdsaW5nLCBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLgorICAgICAgIyBEYXJ3aW4gdXNlcyB0aGUgLWFyY2ggZmxhZyB0byBkZXRlcm1pbmUgb3V0cHV0IGFyY2hpdGVjdHVyZS4KKyAgICAgIC1tb2RlbHwtYXJjaHwtaXN5c3Jvb3QpCisJY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkYXJnIgorCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisJcHJldj14Y29tcGlsZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1tdHwtbXRocmVhZHN8LWt0aHJlYWR8LUt0aHJlYWR8LXB0aHJlYWR8LXB0aHJlYWRzfC0tdGhyZWFkLXNhZmV8LXRocmVhZHMpCisJY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkYXJnIgorCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKwkgICAgKiIgJGFyZyAiKikgOzsKKwkgICAgKiApIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGFyZyIgOzsKKwllc2FjCisJY29udGludWUKKwk7OworCisgICAgICAtbXVsdGlfbW9kdWxlKQorCXNpbmdsZV9tb2R1bGU9IiR7d2x9LW11bHRpX21vZHVsZSIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1uby1mYXN0LWluc3RhbGwpCisJZmFzdF9pbnN0YWxsPW5vCisJY29udGludWUKKwk7OworCisgICAgICAtbm8taW5zdGFsbCkKKwljYXNlICRob3N0IGluCisJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLSotZGFyd2luKiB8ICotY2VnY2MqKQorCSAgIyBUaGUgUEFUSCBoYWNrZXJ5IGluIHdyYXBwZXIgc2NyaXB0cyBpcyByZXF1aXJlZCBvbiBXaW5kb3dzCisJICAjIGFuZCBEYXJ3aW4gaW4gb3JkZXIgZm9yIHRoZSBsb2FkZXIgdG8gZmluZCBhbnkgZGxscyBpdCBuZWVkcy4KKwkgIGZ1bmNfd2FybmluZyAiXGAtbm8taW5zdGFsbCcgaXMgaWdub3JlZCBmb3IgJGhvc3QiCisJICBmdW5jX3dhcm5pbmcgImFzc3VtaW5nIFxgLW5vLWZhc3QtaW5zdGFsbCcgaW5zdGVhZCIKKwkgIGZhc3RfaW5zdGFsbD1ubworCSAgOzsKKwkqKSBub19pbnN0YWxsPXllcyA7OworCWVzYWMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1uby11bmRlZmluZWQpCisJYWxsb3dfdW5kZWZpbmVkPW5vCisJY29udGludWUKKwk7OworCisgICAgICAtb2JqZWN0bGlzdCkKKwlwcmV2PW9iamVjdGxpc3QKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1vKSBwcmV2PW91dHB1dCA7OworCisgICAgICAtcHJlY2lvdXMtZmlsZXMtcmVnZXgpCisJcHJldj1wcmVjaW91c19yZWdleAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXJlbGVhc2UpCisJcHJldj1yZWxlYXNlCisJY29udGludWUKKwk7OworCisgICAgICAtcnBhdGgpCisJcHJldj1ycGF0aAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLVIpCisJcHJldj14cnBhdGgKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1SKikKKwlmdW5jX3N0cmlwbmFtZSAnLVInICcnICIkYXJnIgorCWRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJY2FzZSAkZGlyIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworCSopCisJICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGFic29sdXRlIHJ1bi1wYXRocyBhcmUgYWxsb3dlZCIKKwkgIDs7CisJZXNhYworCWNhc2UgIiR4cnBhdGggIiBpbgorCSoiICRkaXIgIiopIDs7CisJKikgeHJwYXRoPSIkeHJwYXRoICRkaXIiIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXNoYXJlZCkKKwkjIFRoZSBlZmZlY3RzIG9mIC1zaGFyZWQgYXJlIGRlZmluZWQgaW4gYSBwcmV2aW91cyBsb29wLgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXNocmV4dCkKKwlwcmV2PXNocmV4dAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXN0YXRpYyB8IC1zdGF0aWMtbGlidG9vbC1saWJzKQorCSMgVGhlIGVmZmVjdHMgb2YgLXN0YXRpYyBhcmUgZGVmaW5lZCBpbiBhIHByZXZpb3VzIGxvb3AuCisJIyBXZSB1c2VkIHRvIGRvIHRoZSBzYW1lIGFzIC1hbGwtc3RhdGljIG9uIHBsYXRmb3JtcyB0aGF0CisJIyBkaWRuJ3QgaGF2ZSBhIFBJQyBmbGFnLCBidXQgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgZWZmZWN0cworCSMgd291bGQgYmUgZXF1aXZhbGVudCB3YXMgd3JvbmcuICBJdCB3b3VsZCBicmVhayBvbiBhdCBsZWFzdAorCSMgRGlnaXRhbCBVbml4IGFuZCBBSVguCisJY29udGludWUKKwk7OworCisgICAgICAtdGhyZWFkLXNhZmUpCisJdGhyZWFkX3NhZmU9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtdmVyc2lvbi1pbmZvKQorCXByZXY9dmluZm8KKwljb250aW51ZQorCTs7CisKKyAgICAgIC12ZXJzaW9uLW51bWJlcikKKwlwcmV2PXZpbmZvCisJdmluZm9fbnVtYmVyPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXdlYWspCisgICAgICAgIHByZXY9d2VhaworCWNvbnRpbnVlCisJOzsKKworICAgICAgLVdjLCopCisJZnVuY19zdHJpcG5hbWUgJy1XYywnICcnICIkYXJnIgorCWFyZ3M9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCWFyZz0KKwlzYXZlX2lmcz0iJElGUyI7IElGUz0nLCcKKwlmb3IgZmxhZyBpbiAkYXJnczsgZG8KKwkgIElGUz0iJHNhdmVfaWZzIgorICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmbGFnIgorCSAgYXJnPSIkYXJnICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCWRvbmUKKwlJRlM9IiRzYXZlX2lmcyIKKwlmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRhcmciCisJYXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwk7OworCisgICAgICAtV2wsKikKKwlmdW5jX3N0cmlwbmFtZSAnLVdsLCcgJycgIiRhcmciCisJYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJYXJnPQorCXNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJworCWZvciBmbGFnIGluICRhcmdzOyBkbworCSAgSUZTPSIkc2F2ZV9pZnMiCisgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZsYWciCisJICBhcmc9IiRhcmcgJHdsJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCWRvbmUKKwlJRlM9IiRzYXZlX2lmcyIKKwlmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRhcmciCisJYXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwk7OworCisgICAgICAtWGNvbXBpbGVyKQorCXByZXY9eGNvbXBpbGVyCisJY29udGludWUKKwk7OworCisgICAgICAtWGxpbmtlcikKKwlwcmV2PXhsaW5rZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1YQ0NsaW5rZXIpCisJcHJldj14Y2NsaW5rZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgICMgLW1zZ18qIGZvciBvc2YgY2MKKyAgICAgIC1tc2dfKikKKwlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCTs7CisKKyAgICAgICMgLTY0LCAtbWlwc1swLTldIGVuYWJsZSA2NC1iaXQgbW9kZSBvbiB0aGUgU0dJIGNvbXBpbGVyCisgICAgICAjIC1yWzAtOV1bMC05XSogc3BlY2lmaWVzIHRoZSBwcm9jZXNzb3Igb24gdGhlIFNHSSBjb21waWxlcgorICAgICAgIyAteGFyY2g9KiwgLXh0YXJnZXQ9KiBlbmFibGUgNjQtYml0IG1vZGUgb24gdGhlIFN1biBjb21waWxlcgorICAgICAgIyArREEqLCArREQqIGVuYWJsZSA2NC1iaXQgbW9kZSBvbiB0aGUgSFAgY29tcGlsZXIKKyAgICAgICMgLXEqIHBhc3MgdGhyb3VnaCBjb21waWxlciBhcmdzIGZvciB0aGUgSUJNIGNvbXBpbGVyCisgICAgICAjIC1tKiwgLXRbNDVdKiwgLXR4c2NhbGUqIHBhc3MgdGhyb3VnaCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMKKyAgICAgICMgY29tcGlsZXIgYXJncyBmb3IgR0NDCisgICAgICAjIC1GL3BhdGggZ2l2ZXMgcGF0aCB0byB1bmluc3RhbGxlZCBmcmFtZXdvcmtzLCBnY2Mgb24gZGFyd2luCisgICAgICAjIC1wLCAtcGcsIC0tY292ZXJhZ2UsIC1mcHJvZmlsZS0qIHBhc3MgdGhyb3VnaCBwcm9maWxpbmcgZmxhZyBmb3IgR0NDCisgICAgICAjIEBmaWxlIEdDQyByZXNwb25zZSBmaWxlcworICAgICAgLTY0fC1taXBzWzAtOV18LXJbMC05XVswLTldKnwteGFyY2g9KnwteHRhcmdldD0qfCtEQSp8K0REKnwtcSp8LW0qfCBcCisgICAgICAtdFs0NV0qfC10eHNjYWxlKnwtcHwtcGd8LS1jb3ZlcmFnZXwtZnByb2ZpbGUtKnwtRip8QCopCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisgICAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorICAgICAgICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCisgICAgICAgIGNvbnRpbnVlCisgICAgICAgIDs7CisKKyAgICAgICMgU29tZSBvdGhlciBjb21waWxlciBmbGFnLgorICAgICAgLSogfCArKikKKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwk7OworCisgICAgICAqLiRvYmpleHQpCisJIyBBIHN0YW5kYXJkIG9iamVjdC4KKwlvYmpzPSIkb2JqcyAkYXJnIgorCTs7CisKKyAgICAgICoubG8pCisJIyBBIGxpYnRvb2wtY29udHJvbGxlZCBvYmplY3QuCisKKwkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBvYmplY3QuCisJaWYgZnVuY19sYWxpYl91bnNhZmVfcCAiJGFyZyI7IHRoZW4KKwkgIHBpY19vYmplY3Q9CisJICBub25fcGljX29iamVjdD0KKworCSAgIyBSZWFkIHRoZSAubG8gZmlsZQorCSAgZnVuY19zb3VyY2UgIiRhcmciCisKKwkgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fAorCSAgICAgdGVzdCAteiAiJG5vbl9waWNfb2JqZWN0IiB8fAorCSAgICAgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSAmJgorCSAgICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiA9IG5vbmU7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBvYmplY3QgZm9yIFxgJGFyZyciCisJICBmaQorCisJICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCSAgZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKKwkgIHhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCisJICBpZiB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCSAgICBwaWNfb2JqZWN0PSIkeGRpciRwaWNfb2JqZWN0IgorCisJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0geWVzOyB0aGVuCisJCWRsZmlsZXM9IiRkbGZpbGVzICRwaWNfb2JqZWN0IgorCQlwcmV2PQorCQljb250aW51ZQorCSAgICAgIGVsc2UKKwkJIyBJZiBsaWJ0b29sIG9iamVjdHMgYXJlIHVuc3VwcG9ydGVkLCB0aGVuIHdlIG5lZWQgdG8gcHJlbG9hZC4KKwkJcHJldj1kbHByZWZpbGVzCisJICAgICAgZmkKKwkgICAgZmkKKworCSAgICAjIENIRUNLIE1FOiAgSSB0aGluayBJIGJ1c3RlZCB0aGlzLiAgLU9zc2FtYQorCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJICAgICAgIyBQcmVsb2FkIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgorCSAgICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRwaWNfb2JqZWN0IgorCSAgICAgIHByZXY9CisJICAgIGZpCisKKwkgICAgIyBBIFBJQyBvYmplY3QuCisJICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKKwkgICAgYXJnPSIkcGljX29iamVjdCIKKwkgIGZpCisKKwkgICMgTm9uLVBJQyBvYmplY3QuCisJICBpZiB0ZXN0ICIkbm9uX3BpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkgICAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KKwkgICAgbm9uX3BpY19vYmplY3Q9IiR4ZGlyJG5vbl9waWNfb2JqZWN0IgorCisJICAgICMgQSBzdGFuZGFyZCBub24tUElDIG9iamVjdAorCSAgICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJICAgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fCB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lIDsgdGhlbgorCSAgICAgIGFyZz0iJG5vbl9waWNfb2JqZWN0IgorCSAgICBmaQorCSAgZWxzZQorCSAgICAjIElmIHRoZSBQSUMgb2JqZWN0IGV4aXN0cywgdXNlIGl0IGluc3RlYWQuCisJICAgICMgJHhkaXIgd2FzIHByZXBlbmRlZCB0byAkcGljX29iamVjdCBhYm92ZS4KKwkgICAgbm9uX3BpY19vYmplY3Q9IiRwaWNfb2JqZWN0IgorCSAgICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJICBmaQorCWVsc2UKKwkgICMgT25seSBhbiBlcnJvciBpZiBub3QgZG9pbmcgYSBkcnktcnVuLgorCSAgaWYgJG9wdF9kcnlfcnVuOyB0aGVuCisJICAgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisJICAgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCisJICAgIHhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCisJICAgIGZ1bmNfbG8ybyAiJGFyZyIKKwkgICAgcGljX29iamVjdD0keGRpciRvYmpkaXIvJGZ1bmNfbG8yb19yZXN1bHQKKwkgICAgbm9uX3BpY19vYmplY3Q9JHhkaXIkZnVuY19sbzJvX3Jlc3VsdAorCSAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCisJICAgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkgIGVsc2UKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiXGAkYXJnJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIG9iamVjdCIKKwkgIGZpCisJZmkKKwk7OworCisgICAgICAqLiRsaWJleHQpCisJIyBBbiBhcmNoaXZlLgorCWRlcGxpYnM9IiRkZXBsaWJzICRhcmciCisJb2xkX2RlcGxpYnM9IiRvbGRfZGVwbGlicyAkYXJnIgorCWNvbnRpbnVlCisJOzsKKworICAgICAgKi5sYSkKKwkjIEEgbGlidG9vbC1jb250cm9sbGVkIGxpYnJhcnkuCisKKwlpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCisJICAjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRsb3Blbi4KKwkgIGRsZmlsZXM9IiRkbGZpbGVzICRhcmciCisJICBwcmV2PQorCWVsaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorCSAgIyBUaGUgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRscHJlb3Blbi4KKwkgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRhcmciCisJICBwcmV2PQorCWVsc2UKKwkgIGRlcGxpYnM9IiRkZXBsaWJzICRhcmciCisJZmkKKwljb250aW51ZQorCTs7CisKKyAgICAgICMgU29tZSBvdGhlciBjb21waWxlciBhcmd1bWVudC4KKyAgICAgICopCisJIyBVbmtub3duIGFyZ3VtZW50cyBpbiBib3RoIGZpbmFsaXplX2NvbW1hbmQgYW5kIGNvbXBpbGVfY29tbWFuZCBuZWVkCisJIyB0byBiZSBhZXN0aGV0aWNhbGx5IHF1b3RlZCBiZWNhdXNlIHRoZXkgYXJlIGV2YWxlZCBsYXRlci4KKwlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCTs7CisgICAgICBlc2FjICMgYXJnCisKKyAgICAgICMgTm93IGFjdHVhbGx5IHN1YnN0aXR1dGUgdGhlIGFyZ3VtZW50IGludG8gdGhlIGNvbW1hbmRzLgorICAgICAgaWYgdGVzdCAtbiAiJGFyZyI7IHRoZW4KKwlmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorCWZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorICAgICAgZmkKKyAgICBkb25lICMgYXJndW1lbnQgcGFyc2luZyBsb29wCisKKyAgICB0ZXN0IC1uICIkcHJldiIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ0aGUgXGAkcHJldmFyZycgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IgorCisgICAgaWYgdGVzdCAiJGV4cG9ydF9keW5hbWljIiA9IHllcyAmJiB0ZXN0IC1uICIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIjsgdGhlbgorICAgICAgZXZhbCBhcmc9XCIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKKyAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKyAgICBmaQorCisgICAgb2xkbGlicz0KKyAgICAjIGNhbGN1bGF0ZSB0aGUgbmFtZSBvZiB0aGUgZmlsZSwgd2l0aG91dCBpdHMgZGlyZWN0b3J5CisgICAgZnVuY19iYXNlbmFtZSAiJG91dHB1dCIKKyAgICBvdXRwdXRuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgbGlib2Jqc19zYXZlPSIkbGlib2JqcyIKKworICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorICAgICAgIyBnZXQgdGhlIGRpcmVjdG9yaWVzIGxpc3RlZCBpbiAkc2hsaWJwYXRoX3ZhcgorICAgICAgZXZhbCBzaGxpYl9zZWFyY2hfcGF0aD1cYFwkRUNITyBcIlhcJHskc2hsaWJwYXRoX3Zhcn1cIiBcfCBcJFhzZWQgLWUgXCdzLzovIC9nXCdcYAorICAgIGVsc2UKKyAgICAgIHNobGliX3NlYXJjaF9wYXRoPQorICAgIGZpCisgICAgZXZhbCBzeXNfbGliX3NlYXJjaF9wYXRoPVwiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlY1wiCisgICAgZXZhbCBzeXNfbGliX2Rsc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWNcIgorCisgICAgZnVuY19kaXJuYW1lICIkb3V0cHV0IiAiLyIgIiIKKyAgICBvdXRwdXRfb2JqZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCRvYmpkaXIiCisgICAgIyBDcmVhdGUgdGhlIG9iamVjdCBkaXJlY3RvcnkuCisgICAgZnVuY19ta2Rpcl9wICIkb3V0cHV0X29iamRpciIKKworICAgICMgRGV0ZXJtaW5lIHRoZSB0eXBlIG9mIG91dHB1dAorICAgIGNhc2UgJG91dHB1dCBpbgorICAgICIiKQorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dCBmaWxlIgorICAgICAgOzsKKyAgICAqLiRsaWJleHQpIGxpbmttb2RlPW9sZGxpYiA7OworICAgICoubG8gfCAqLiRvYmpleHQpIGxpbmttb2RlPW9iaiA7OworICAgICoubGEpIGxpbmttb2RlPWxpYiA7OworICAgICopIGxpbmttb2RlPXByb2cgOzsgIyBBbnl0aGluZyBlbHNlIHNob3VsZCBiZSBhIHByb2dyYW0uCisgICAgZXNhYworCisgICAgc3BlY2lhbGRlcGxpYnM9CisKKyAgICBsaWJzPQorICAgICMgRmluZCBhbGwgaW50ZXJkZXBlbmRlbnQgZGVwbGlicyBieSBzZWFyY2hpbmcgZm9yIGxpYnJhcmllcworICAgICMgdGhhdCBhcmUgbGlua2VkIG1vcmUgdGhhbiBvbmNlIChlLmcuIC1sYSAtbGIgLWxhKQorICAgIGZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisgICAgICBpZiAkb3B0X2R1cGxpY2F0ZV9kZXBzIDsgdGhlbgorCWNhc2UgIiRsaWJzICIgaW4KKwkqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGxpYnM9IiRsaWJzICRkZXBsaWIiCisgICAgZG9uZQorCisgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorICAgICAgbGlicz0iJHByZWRlcHMgJGxpYnMgJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCAkcG9zdGRlcHMiCisKKyAgICAgICMgQ29tcHV0ZSBsaWJyYXJpZXMgdGhhdCBhcmUgbGlzdGVkIG1vcmUgdGhhbiBvbmNlIGluICRwcmVkZXBzCisgICAgICAjICRwb3N0ZGVwcyBhbmQgbWFyayB0aGVtIGFzIHNwZWNpYWwgKGkuZS4sIHdob3NlIGR1cGxpY2F0ZXMgYXJlCisgICAgICAjIG5vdCB0byBiZSBlbGltaW5hdGVkKS4KKyAgICAgIHByZV9wb3N0X2RlcHM9CisgICAgICBpZiAkb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwczsgdGhlbgorCWZvciBwcmVfcG9zdF9kZXAgaW4gJHByZWRlcHMgJHBvc3RkZXBzOyBkbworCSAgY2FzZSAiJHByZV9wb3N0X2RlcHMgIiBpbgorCSAgKiIgJHByZV9wb3N0X2RlcCAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkcHJlX3Bvc3RfZGVwcyIgOzsKKwkgIGVzYWMKKwkgIHByZV9wb3N0X2RlcHM9IiRwcmVfcG9zdF9kZXBzICRwcmVfcG9zdF9kZXAiCisJZG9uZQorICAgICAgZmkKKyAgICAgIHByZV9wb3N0X2RlcHM9CisgICAgZmkKKworICAgIGRlcGxpYnM9CisgICAgbmV3ZGVwZW5kZW5jeV9saWJzPQorICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0KKyAgICBuZWVkX3JlbGluaz1ubyAjIHdoZXRoZXIgd2UncmUgbGlua2luZyBhbnkgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKyAgICBub3RpbnN0X2RlcGxpYnM9ICMgbm90LWluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworICAgIG5vdGluc3RfcGF0aD0gIyBwYXRocyB0aGF0IGNvbnRhaW4gbm90LWluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworCisgICAgY2FzZSAkbGlua21vZGUgaW4KKyAgICBsaWIpCisJcGFzc2VzPSJjb252IGRscHJlb3BlbiBsaW5rIgorCWZvciBmaWxlIGluICRkbGZpbGVzICRkbHByZWZpbGVzOyBkbworCSAgY2FzZSAkZmlsZSBpbgorCSAgKi5sYSkgOzsKKwkgICopCisJICAgIGZ1bmNfZmF0YWxfaGVscCAibGlicmFyaWVzIGNhbiBcYC1kbG9wZW4nIG9ubHkgbGlidG9vbCBsaWJyYXJpZXM6ICRmaWxlIgorCSAgICA7OworCSAgZXNhYworCWRvbmUKKwk7OworICAgIHByb2cpCisJY29tcGlsZV9kZXBsaWJzPQorCWZpbmFsaXplX2RlcGxpYnM9CisJYWxsZGVwbGlicz1ubworCW5ld2RsZmlsZXM9CisJbmV3ZGxwcmVmaWxlcz0KKwlwYXNzZXM9ImNvbnYgc2NhbiBkbG9wZW4gZGxwcmVvcGVuIGxpbmsiCisJOzsKKyAgICAqKSAgcGFzc2VzPSJjb252IgorCTs7CisgICAgZXNhYworCisgICAgZm9yIHBhc3MgaW4gJHBhc3NlczsgZG8KKyAgICAgICMgVGhlIHByZW9wZW4gcGFzcyBpbiBsaWIgbW9kZSByZXZlcnNlcyAkZGVwbGliczsgcHV0IGl0IGJhY2sgaGVyZQorICAgICAgIyBzbyB0aGF0IC1MIGNvbWVzIGJlZm9yZSBsaWJzIHRoYXQgbmVlZCBpdCBmb3IgaW5zdGFuY2UuLi4KKyAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGxpbmsiOyB0aGVuCisJIyMgRklYTUU6IEZpbmQgdGhlIHBsYWNlIHdoZXJlIHRoZSBsaXN0IGlzIHJlYnVpbHQgaW4gdGhlIHdyb25nCisJIyMgICAgICAgIG9yZGVyLCBhbmQgZml4IGl0IHRoZXJlIHByb3Blcmx5CisgICAgICAgIHRtcF9kZXBsaWJzPQorCWZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJICB0bXBfZGVwbGlicz0iJGRlcGxpYiAkdG1wX2RlcGxpYnMiCisJZG9uZQorCWRlcGxpYnM9IiR0bXBfZGVwbGlicyIKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGxpbmsiIHx8CisJIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxzY2FuIjsgdGhlbgorCWxpYnM9IiRkZXBsaWJzIgorCWRlcGxpYnM9CisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwljYXNlICRwYXNzIGluCisJZGxvcGVuKSBsaWJzPSIkZGxmaWxlcyIgOzsKKwlkbHByZW9wZW4pIGxpYnM9IiRkbHByZWZpbGVzIiA7OworCWxpbmspCisJICBsaWJzPSIkZGVwbGlicyAlREVQTElCUyUiCisJICB0ZXN0ICJYJGxpbmtfYWxsX2RlcGxpYnMiICE9IFhubyAmJiBsaWJzPSIkbGlicyAkZGVwZW5kZW5jeV9saWJzIgorCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsZGxwcmVvcGVuIjsgdGhlbgorCSMgQ29sbGVjdCBhbmQgZm9yd2FyZCBkZXBsaWJzIG9mIHByZW9wZW5lZCBsaWJ0b29sIGxpYnMKKwlmb3IgbGliIGluICRkbHByZWZpbGVzOyBkbworCSAgIyBJZ25vcmUgbm9uLWxpYnRvb2wtbGlicworCSAgZGVwZW5kZW5jeV9saWJzPQorCSAgY2FzZSAkbGliIGluCisJICAqLmxhKQlmdW5jX3NvdXJjZSAiJGxpYiIgOzsKKwkgIGVzYWMKKworCSAgIyBDb2xsZWN0IHByZW9wZW5lZCBsaWJ0b29sIGRlcGxpYnMsIGV4Y2VwdCBhbnkgdGhpcyBsaWJyYXJ5CisJICAjIGhhcyBkZWNsYXJlZCBhcyB3ZWFrIGxpYnMKKwkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKyAgICAgICAgICAgIGRlcGxpYl9iYXNlPWAkRUNITyAiWCRkZXBsaWIiIHwgJFhzZWQgLWUgIiRiYXNlbmFtZSJgCisJICAgIGNhc2UgIiAkd2Vha19saWJzICIgaW4KKwkgICAgKiIgJGRlcGxpYl9iYXNlICIqKSA7OworCSAgICAqKSBkZXBsaWJzPSIkZGVwbGlicyAkZGVwbGliIiA7OworCSAgICBlc2FjCisJICBkb25lCisJZG9uZQorCWxpYnM9IiRkbHByZWZpbGVzIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRwYXNzIiA9IGRsb3BlbjsgdGhlbgorCSMgQ29sbGVjdCBkbHByZW9wZW5lZCBsaWJyYXJpZXMKKwlzYXZlX2RlcGxpYnM9IiRkZXBsaWJzIgorCWRlcGxpYnM9CisgICAgICBmaQorCisgICAgICBmb3IgZGVwbGliIGluICRsaWJzOyBkbworCWxpYj0KKwlmb3VuZD1ubworCWNhc2UgJGRlcGxpYiBpbgorCS1tdHwtbXRocmVhZHN8LWt0aHJlYWR8LUt0aHJlYWR8LXB0aHJlYWR8LXB0aHJlYWRzfC0tdGhyZWFkLXNhZmV8LXRocmVhZHMpCisJICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICBlbHNlCisJICAgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYiIKKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiA7IHRoZW4KKwkJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKwkJICAgICoiICRkZXBsaWIgIiopIDs7CisJCSAgICAqICkgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkZGVwbGliIiA7OworCQllc2FjCisJICAgIGZpCisJICBmaQorCSAgY29udGludWUKKwkgIDs7CisJLWwqKQorCSAgaWYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWIgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nOyB0aGVuCisJICAgIGZ1bmNfd2FybmluZyAiXGAtbCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMvb2JqZWN0cyIKKwkgICAgY29udGludWUKKwkgIGZpCisJICBmdW5jX3N0cmlwbmFtZSAnLWwnICcnICIkZGVwbGliIgorCSAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCisJICAgIHNlYXJjaGRpcnM9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGxpYl9zZWFyY2hfcGF0aCAkY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aCIKKwkgIGVsc2UKKwkgICAgc2VhcmNoZGlycz0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aCIKKwkgIGZpCisJICBmb3Igc2VhcmNoZGlyIGluICRzZWFyY2hkaXJzOyBkbworCSAgICBmb3Igc2VhcmNoX2V4dCBpbiAubGEgJHN0ZF9zaHJleHQgLnNvIC5hOyBkbworCSAgICAgICMgU2VhcmNoIHRoZSBsaWJ0b29sIGxpYnJhcnkKKwkgICAgICBsaWI9IiRzZWFyY2hkaXIvbGliJHtuYW1lfSR7c2VhcmNoX2V4dH0iCisJICAgICAgaWYgdGVzdCAtZiAiJGxpYiI7IHRoZW4KKwkJaWYgdGVzdCAiJHNlYXJjaF9leHQiID0gIi5sYSI7IHRoZW4KKwkJICBmb3VuZD15ZXMKKwkJZWxzZQorCQkgIGZvdW5kPW5vCisJCWZpCisJCWJyZWFrIDIKKwkgICAgICBmaQorCSAgICBkb25lCisJICBkb25lCisJICBpZiB0ZXN0ICIkZm91bmQiICE9IHllczsgdGhlbgorCSAgICAjIGRlcGxpYiBkb2Vzbid0IHNlZW0gdG8gYmUgYSBsaWJ0b29sIGxpYnJhcnkKKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgICAgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgZmkKKwkgICAgY29udGludWUKKwkgIGVsc2UgIyBkZXBsaWIgaXMgYSBsaWJ0b29sIGxpYnJhcnkKKwkgICAgIyBJZiAkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzICYmICRkZXBsaWIgaXMgYSBzdGRsaWIsCisJICAgICMgV2UgbmVlZCB0byBkbyBzb21lIHNwZWNpYWwgdGhpbmdzIGhlcmUsIGFuZCBub3QgbGF0ZXIuCisJICAgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkgICAgICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKQorCQlpZiBmdW5jX2xhbGliX3AgIiRsaWIiOyB0aGVuCisJCSAgbGlicmFyeV9uYW1lcz0KKwkJICBvbGRfbGlicmFyeT0KKwkJICBmdW5jX3NvdXJjZSAiJGxpYiIKKwkJICBmb3IgbCBpbiAkb2xkX2xpYnJhcnkgJGxpYnJhcnlfbmFtZXM7IGRvCisJCSAgICBsbD0iJGwiCisJCSAgZG9uZQorCQkgIGlmIHRlc3QgIlgkbGwiID0gIlgkb2xkX2xpYnJhcnkiIDsgdGhlbiAjIG9ubHkgc3RhdGljIHZlcnNpb24gYXZhaWxhYmxlCisJCSAgICBmb3VuZD1ubworCQkgICAgZnVuY19kaXJuYW1lICIkbGliIiAiIiAiLiIKKwkJICAgIGxhZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKwkJICAgIGxpYj0kbGFkaXIvJG9sZF9saWJyYXJ5CisJCSAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJCSAgICBlbHNlCisJCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJCSAgICAgIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgJiYgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJCSAgICBmaQorCQkgICAgY29udGludWUKKwkJICBmaQorCQlmaQorCQk7OworCSAgICAgICopIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgZmkKKwkgIDs7ICMgLWwKKwkqLmx0ZnJhbWV3b3JrKQorCSAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliIDsgdGhlbgorCQljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCQkgICAgKiIgJGRlcGxpYiAiKikgOzsKKwkJICAgICogKSBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRkZXBsaWIiIDs7CisJCWVzYWMKKwkgICAgZmkKKwkgIGZpCisJICBjb250aW51ZQorCSAgOzsKKwktTCopCisJICBjYXNlICRsaW5rbW9kZSBpbgorCSAgbGliKQorCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICB0ZXN0ICIkcGFzcyIgPSBjb252ICYmIGNvbnRpbnVlCisJICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgorCSAgICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwkgICAgOzsKKwkgIHByb2cpCisJICAgIGlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICAgIGNvbnRpbnVlCisJICAgIGZpCisJICAgIGlmIHRlc3QgIiRwYXNzIiA9IHNjYW47IHRoZW4KKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgZmkKKwkgICAgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKwkgICAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJICAgIDs7CisJICAqKQorCSAgICBmdW5jX3dhcm5pbmcgIlxgLUwnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzL29iamVjdHMiCisJICAgIDs7CisJICBlc2FjICMgbGlua21vZGUKKwkgIGNvbnRpbnVlCisJICA7OyAjIC1MCisJLVIqKQorCSAgaWYgdGVzdCAiJHBhc3MiID0gbGluazsgdGhlbgorCSAgICBmdW5jX3N0cmlwbmFtZSAnLVInICcnICIkZGVwbGliIgorCSAgICBkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICAjIE1ha2Ugc3VyZSB0aGUgeHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgICBjYXNlICIkeHJwYXRoICIgaW4KKwkgICAgKiIgJGRpciAiKikgOzsKKwkgICAgKikgeHJwYXRoPSIkeHJwYXRoICRkaXIiIDs7CisJICAgIGVzYWMKKwkgIGZpCisJICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgY29udGludWUKKwkgIDs7CisJKi5sYSkgbGliPSIkZGVwbGliIiA7OworCSouJGxpYmV4dCkKKwkgIGlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgY29udGludWUKKwkgIGZpCisJICBjYXNlICRsaW5rbW9kZSBpbgorCSAgbGliKQorCSAgICAjIExpbmtpbmcgY29udmVuaWVuY2UgbW9kdWxlcyBpbnRvIHNoYXJlZCBsaWJyYXJpZXMgaXMgYWxsb3dlZCwKKwkgICAgIyBidXQgbGlua2luZyBvdGhlciBzdGF0aWMgbGlicmFyaWVzIGlzIG5vbi1wb3J0YWJsZS4KKwkgICAgY2FzZSAiICRkbHByZWNvbnZlbmllbmNlbGlicyAiIGluCisJICAgICoiICRkZXBsaWIgIiopIDs7CisJICAgICopCisJICAgICAgdmFsaWRfYV9saWI9bm8KKwkgICAgICBjYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCQltYXRjaF9wYXR0ZXJuKikKKwkJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kOyBzaGlmdAorCQkgIG1hdGNoX3BhdHRlcm5fcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiJDEgXCguKlwpImAKKwkJICBpZiBldmFsICJcJEVDSE8gXCJYJGRlcGxpYlwiIiAyPi9kZXYvbnVsbCB8ICRYc2VkIC1lIDEwcSBcCisJCSAgICB8ICRFR1JFUCAiJG1hdGNoX3BhdHRlcm5fcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJCSAgICB2YWxpZF9hX2xpYj15ZXMKKwkJICBmaQorCQk7OworCQlwYXNzX2FsbCkKKwkJICB2YWxpZF9hX2xpYj15ZXMKKwkJOzsKKwkgICAgICBlc2FjCisJICAgICAgaWYgdGVzdCAiJHZhbGlkX2FfbGliIiAhPSB5ZXM7IHRoZW4KKwkJJEVDSE8KKwkJJEVDSE8gIioqKiBXYXJuaW5nOiBUcnlpbmcgdG8gbGluayB3aXRoIHN0YXRpYyBsaWIgYXJjaGl2ZSAkZGVwbGliLiIKKwkJJEVDSE8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCSRFQ0hPICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCQkkRUNITyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCQkkRUNITyAiKioqIGJlY2F1c2UgdGhlIGZpbGUgZXh0ZW5zaW9ucyAuJGxpYmV4dCBvZiB0aGlzIGFyZ3VtZW50IG1ha2VzIG1lIGJlbGlldmUiCisJCSRFQ0hPICIqKiogdGhhdCBpdCBpcyBqdXN0IGEgc3RhdGljIGFyY2hpdmUgdGhhdCBJIHNob3VsZCBub3QgdXNlIGhlcmUuIgorCSAgICAgIGVsc2UKKwkJJEVDSE8KKwkJJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIgorCQkkRUNITyAiKioqIHN0YXRpYyBsaWJyYXJ5ICRkZXBsaWIgaXMgbm90IHBvcnRhYmxlISIKKwkJZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgIHByb2cpCisJICAgIGlmIHRlc3QgIiRwYXNzIiAhPSBsaW5rOyB0aGVuCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGZpCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBlc2FjICMgbGlua21vZGUKKwkgIDs7ICMgKi4kbGliZXh0CisJKi5sbyB8ICouJG9iamV4dCkKKwkgIGlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgIGVsaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuIHx8IHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgIT0geWVzIHx8IHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbm87IHRoZW4KKwkgICAgICAjIElmIHRoZXJlIGlzIG5vIGRsb3BlbiBzdXBwb3J0IG9yIHdlJ3JlIGxpbmtpbmcgc3RhdGljYWxseSwKKwkgICAgICAjIHdlIG5lZWQgdG8gcHJlbG9hZC4KKwkgICAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGVwbGliIgorCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkZGVwbGliIgorCSAgICBmaQorCSAgZmkKKwkgIGNvbnRpbnVlCisJICA7OworCSVERVBMSUJTJSkKKwkgIGFsbGRlcGxpYnM9eWVzCisJICBjb250aW51ZQorCSAgOzsKKwllc2FjICMgY2FzZSAkZGVwbGliCisKKwlpZiB0ZXN0ICIkZm91bmQiID0geWVzIHx8IHRlc3QgLWYgIiRsaWIiOyB0aGVuIDoKKwllbHNlCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCB0aGUgbGlicmFyeSBcYCRsaWInIG9yIHVuaGFuZGxlZCBhcmd1bWVudCBcYCRkZXBsaWInIgorCWZpCisKKwkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgorCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRsaWIiIFwKKwkgIHx8IGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCisJZnVuY19kaXJuYW1lICIkbGliIiAiIiAiLiIKKwlsYWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwlkbG5hbWU9CisJZGxvcGVuPQorCWRscHJlb3Blbj0KKwlsaWJkaXI9CisJbGlicmFyeV9uYW1lcz0KKwlvbGRfbGlicmFyeT0KKwlpbmhlcml0ZWRfbGlua2VyX2ZsYWdzPQorCSMgSWYgdGhlIGxpYnJhcnkgd2FzIGluc3RhbGxlZCB3aXRoIGFuIG9sZCByZWxlYXNlIG9mIGxpYnRvb2wsCisJIyBpdCB3aWxsIG5vdCByZWRlZmluZSB2YXJpYWJsZXMgaW5zdGFsbGVkLCBvciBzaG91bGRub3RsaW5rCisJaW5zdGFsbGVkPXllcworCXNob3VsZG5vdGxpbms9bm8KKwlhdm9pZHRlbXBycGF0aD0KKworCisJIyBSZWFkIHRoZSAubGEgZmlsZQorCWZ1bmNfc291cmNlICIkbGliIgorCisJIyBDb252ZXJ0ICItZnJhbWV3b3JrIGZvbyIgdG8gImZvby5sdGZyYW1ld29yayIKKwlpZiB0ZXN0IC1uICIkaW5oZXJpdGVkX2xpbmtlcl9mbGFncyI7IHRoZW4KKwkgIHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPWAkRUNITyAiWCRpbmhlcml0ZWRfbGlua2VyX2ZsYWdzIiB8ICRYc2VkIC1lICdzLy1mcmFtZXdvcmsgXChbXiAkXSpcKS9cMS5sdGZyYW1ld29yay9nJ2AKKwkgIGZvciB0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnIGluICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnczsgZG8KKwkgICAgY2FzZSAiICRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisJICAgICAgKiIgJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWcgIiopIDs7CisJICAgICAgKikgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyI7OworCSAgICBlc2FjCisJICBkb25lCisJZmkKKwlkZXBlbmRlbmN5X2xpYnM9YCRFQ0hPICJYICRkZXBlbmRlbmN5X2xpYnMiIHwgJFhzZWQgLWUgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsbGluayIgfHwKKwkgICB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csc2NhbiIgfHwKKwkgICB7IHRlc3QgIiRsaW5rbW9kZSIgIT0gcHJvZyAmJiB0ZXN0ICIkbGlua21vZGUiICE9IGxpYjsgfTsgdGhlbgorCSAgdGVzdCAtbiAiJGRsb3BlbiIgJiYgZGxmaWxlcz0iJGRsZmlsZXMgJGRsb3BlbiIKKwkgIHRlc3QgLW4gIiRkbHByZW9wZW4iICYmIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRkbHByZW9wZW4iCisJZmkKKworCWlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KKwkgICMgT25seSBjaGVjayBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzCisJICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIgorCSAgaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KKwkgICAgaWYgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorCSAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciBcYCRsaWInIgorCSAgICBmaQorCSAgICAjIEl0IGlzIGEgbGlidG9vbCBjb252ZW5pZW5jZSBsaWJyYXJ5LCBzbyBhZGQgaW4gaXRzIG9iamVjdHMuCisJICAgIGNvbnZlbmllbmNlPSIkY29udmVuaWVuY2UgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorCSAgICBvbGRfY29udmVuaWVuY2U9IiRvbGRfY29udmVuaWVuY2UgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorCSAgICB0bXBfbGlicz0KKwkgICAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgICAgaWYgJG9wdF9kdXBsaWNhdGVfZGVwcyA7IHRoZW4KKwkJY2FzZSAiJHRtcF9saWJzICIgaW4KKwkJKiIgJGRlcGxpYiAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkZGVwbGliIiA7OworCQllc2FjCisJICAgICAgZmkKKwkgICAgICB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiCisJICAgIGRvbmUKKwkgIGVsaWYgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgY29udmVuaWVuY2UgbGlicmFyeSIKKwkgIGZpCisJICBjb250aW51ZQorCWZpICMgJHBhc3MgPSBjb252CisKKworCSMgR2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IHdlIGxpbmsgYWdhaW5zdC4KKwlsaW5rbGliPQorCWZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KKwkgIGxpbmtsaWI9IiRsIgorCWRvbmUKKwlpZiB0ZXN0IC16ICIkbGlua2xpYiI7IHRoZW4KKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciBcYCRsaWInIgorCWZpCisKKwkjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRsb3Blbi4KKwlpZiB0ZXN0ICIkcGFzcyIgPSBkbG9wZW47IHRoZW4KKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCAtZGxvcGVuIGEgY29udmVuaWVuY2UgbGlicmFyeTogXGAkbGliJyIKKwkgIGZpCisJICBpZiB0ZXN0IC16ICIkZGxuYW1lIiB8fAorCSAgICAgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiAhPSB5ZXMgfHwKKwkgICAgIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbm87IHRoZW4KKwkgICAgIyBJZiB0aGVyZSBpcyBubyBkbG5hbWUsIG5vIGRsb3BlbiBzdXBwb3J0IG9yIHdlJ3JlIGxpbmtpbmcKKwkgICAgIyBzdGF0aWNhbGx5LCB3ZSBuZWVkIHRvIHByZWxvYWQuICBXZSBhbHNvIG5lZWQgdG8gcHJlbG9hZCBhbnkKKwkgICAgIyBkZXBlbmRlbnQgbGlicmFyaWVzIHNvIGxpYmx0ZGwncyBkZXBsaWIgcHJlbG9hZGVyIGRvZXNuJ3QKKwkgICAgIyBib21iIG91dCBpbiB0aGUgbG9hZCBkZXBsaWJzIHBoYXNlLgorCSAgICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkbGliICRkZXBlbmRlbmN5X2xpYnMiCisJICBlbHNlCisJICAgIG5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRsaWIiCisJICBmaQorCSAgY29udGludWUKKwlmaSAjICRwYXNzID0gZGxvcGVuCisKKwkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwljYXNlICRsYWRpciBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzX2xhZGlyPSIkbGFkaXIiIDs7CisJKikKKwkgIGFic19sYWRpcj1gY2QgIiRsYWRpciIgJiYgcHdkYAorCSAgaWYgdGVzdCAteiAiJGFic19sYWRpciI7IHRoZW4KKwkgICAgZnVuY193YXJuaW5nICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mIFxgJGxhZGlyJyIKKwkgICAgZnVuY193YXJuaW5nICJwYXNzaW5nIGl0IGxpdGVyYWxseSB0byB0aGUgbGlua2VyLCBhbHRob3VnaCBpdCBtaWdodCBmYWlsIgorCSAgICBhYnNfbGFkaXI9IiRsYWRpciIKKwkgIGZpCisJICA7OworCWVzYWMKKwlmdW5jX2Jhc2VuYW1lICIkbGliIgorCWxhbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCisJIyBGaW5kIHRoZSByZWxldmFudCBvYmplY3QgZGlyZWN0b3J5IGFuZCBsaWJyYXJ5IG5hbWUuCisJaWYgdGVzdCAiWCRpbnN0YWxsZWQiID0gWHllczsgdGhlbgorCSAgaWYgdGVzdCAhIC1mICIkbGliZGlyLyRsaW5rbGliIiAmJiB0ZXN0IC1mICIkYWJzX2xhZGlyLyRsaW5rbGliIjsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgImxpYnJhcnkgXGAkbGliJyB3YXMgbW92ZWQuIgorCSAgICBkaXI9IiRsYWRpciIKKwkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgorCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCisJICBlbHNlCisJICAgIGRpcj0iJGxpYmRpciIKKwkgICAgYWJzZGlyPSIkbGliZGlyIgorCSAgZmkKKwkgIHRlc3QgIlgkaGFyZGNvZGVfYXV0b21hdGljIiA9IFh5ZXMgJiYgYXZvaWR0ZW1wcnBhdGg9eWVzCisJZWxzZQorCSAgaWYgdGVzdCAhIC1mICIkbGFkaXIvJG9iamRpci8kbGlua2xpYiIgJiYgdGVzdCAtZiAiJGFic19sYWRpci8kbGlua2xpYiI7IHRoZW4KKwkgICAgZGlyPSIkbGFkaXIiCisJICAgIGFic2Rpcj0iJGFic19sYWRpciIKKwkgICAgIyBSZW1vdmUgdGhpcyBzZWFyY2ggcGF0aCBsYXRlcgorCSAgICBub3RpbnN0X3BhdGg9IiRub3RpbnN0X3BhdGggJGFic19sYWRpciIKKwkgIGVsc2UKKwkgICAgZGlyPSIkbGFkaXIvJG9iamRpciIKKwkgICAgYWJzZGlyPSIkYWJzX2xhZGlyLyRvYmpkaXIiCisJICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKKwkgICAgbm90aW5zdF9wYXRoPSIkbm90aW5zdF9wYXRoICRhYnNfbGFkaXIiCisJICBmaQorCWZpICMgJGluc3RhbGxlZCA9IHllcworCWZ1bmNfc3RyaXBuYW1lICdsaWInICcubGEnICIkbGFuYW1lIgorCW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCisJIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbHByZW9wZW4uCisJaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuOyB0aGVuCisJICBpZiB0ZXN0IC16ICIkbGliZGlyIiAmJiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGxpYnJhcmllcyBtYXkgLWRscHJlb3BlbiBhIGNvbnZlbmllbmNlIGxpYnJhcnk6IFxgJGxpYiciCisJICBmaQorCSAgIyBQcmVmZXIgdXNpbmcgYSBzdGF0aWMgbGlicmFyeSAoc28gdGhhdCBubyBzaWxseSBfRFlOQU1JQyBzeW1ib2xzCisJICAjIGFyZSByZXF1aXJlZCB0byBsaW5rKS4KKwkgIGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRpci8kb2xkX2xpYnJhcnkiCisJICAgICMgS2VlcCBhIGxpc3Qgb2YgcHJlb3BlbmVkIGNvbnZlbmllbmNlIGxpYnJhcmllcyB0byBjaGVjaworCSAgICAjIHRoYXQgdGhleSBhcmUgYmVpbmcgdXNlZCBjb3JyZWN0bHkgaW4gdGhlIGxpbmsgcGFzcy4KKwkgICAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCQlkbHByZWNvbnZlbmllbmNlbGlicz0iJGRscHJlY29udmVuaWVuY2VsaWJzICRkaXIvJG9sZF9saWJyYXJ5IgorCSAgIyBPdGhlcndpc2UsIHVzZSB0aGUgZGxuYW1lLCBzbyB0aGF0IGx0X2Rsb3BlbiBmaW5kcyBpdC4KKwkgIGVsaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKwkgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRpci8kZGxuYW1lIgorCSAgZWxzZQorCSAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGlyLyRsaW5rbGliIgorCSAgZmkKKwlmaSAjICRwYXNzID0gZGxwcmVvcGVuCisKKwlpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgorCSAgIyBMaW5rIHRoZSBjb252ZW5pZW5jZSBsaWJyYXJ5CisJICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCisJICAgIGRlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRkZXBsaWJzIgorCSAgZWxpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkZmluYWxpemVfZGVwbGlicyIKKwkgIGVsc2UKKwkgICAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIgIyB1c2VkIGZvciBwcm9nLHNjYW4gcGFzcworCSAgZmkKKwkgIGNvbnRpbnVlCisJZmkKKworCisJaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgJiYgdGVzdCAiJHBhc3MiICE9IGxpbms7IHRoZW4KKwkgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkbGFkaXIiCisJICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIgorCisJICBsaW5rYWxsZGVwbGlicz1ubworCSAgaWYgdGVzdCAiJGxpbmtfYWxsX2RlcGxpYnMiICE9IG5vIHx8IHRlc3QgLXogIiRsaWJyYXJ5X25hbWVzIiB8fAorCSAgICAgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBubzsgdGhlbgorCSAgICBsaW5rYWxsZGVwbGlicz15ZXMKKwkgIGZpCisKKwkgIHRtcF9saWJzPQorCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgLUwqKSBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgorCSAgICAgICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCQkgOzsKKwkgICAgZXNhYworCSAgICAjIE5lZWQgdG8gbGluayBhZ2FpbnN0IGFsbCBkZXBlbmRlbmN5X2xpYnM/CisJICAgIGlmIHRlc3QgIiRsaW5rYWxsZGVwbGlicyIgPSB5ZXM7IHRoZW4KKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgIyBOZWVkIHRvIGhhcmRjb2RlIHNoYXJlZCBsaWJyYXJ5IHBhdGhzCisJICAgICAgIyBvci9hbmQgbGluayBhZ2FpbnN0IHN0YXRpYyBsaWJyYXJpZXMKKwkgICAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgZmkKKwkgICAgaWYgJG9wdF9kdXBsaWNhdGVfZGVwcyA7IHRoZW4KKwkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIKKwkgIGRvbmUgIyBmb3IgZGVwbGliCisJICBjb250aW51ZQorCWZpICMgJGxpbmttb2RlID0gcHJvZy4uLgorCisJaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYKKwkgICAgIHsgeyB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzIiA9IG5vIHx8CisJICAgICAgICAgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicywkaW5zdGFsbGVkIiA9ICJidWlsdCx5ZXMiOyB9IHx8CisJICAgICAgIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IH07IHRoZW4KKwkgICAgIyBXZSBuZWVkIHRvIGhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGgKKwkgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLXogIiRhdm9pZHRlbXBycGF0aCIgOyB0aGVuCisJICAgICAgIyBNYWtlIHN1cmUgdGhlIHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgICAgIGNhc2UgIiR0ZW1wX3JwYXRoOiIgaW4KKwkgICAgICAqIiRhYnNkaXI6IiopIDs7CisJICAgICAgKikgdGVtcF9ycGF0aD0iJHRlbXBfcnBhdGgkYWJzZGlyOiIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisKKwkgICAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoLgorCSAgICAjIFNraXAgZGlyZWN0b3JpZXMgdGhhdCBhcmUgaW4gdGhlIHN5c3RlbSBkZWZhdWx0IHJ1bi10aW1lCisJICAgICMgc2VhcmNoIHBhdGguCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgICAqKSBjb21waWxlX3JwYXRoPSIkY29tcGlsZV9ycGF0aCAkYWJzZGlyIgorCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIgorCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICBmaSAjICRsaW5rbW9kZSwkcGFzcyA9IHByb2csbGluay4uLgorCisJICBpZiB0ZXN0ICIkYWxsZGVwbGlicyIgPSB5ZXMgJiYKKwkgICAgIHsgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA9IHBhc3NfYWxsIHx8CisJICAgICAgIHsgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYKKwkJIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIjsgfTsgfTsgdGhlbgorCSAgICAjIFdlIG9ubHkgbmVlZCB0byBzZWFyY2ggZm9yIHN0YXRpYyBsaWJyYXJpZXMKKwkgICAgY29udGludWUKKwkgIGZpCisJZmkKKworCWxpbmtfc3RhdGljPW5vICMgV2hldGhlciB0aGUgZGVwbGliIHdpbGwgYmUgbGlua2VkIHN0YXRpY2FsbHkKKwl1c2Vfc3RhdGljX2xpYnM9JHByZWZlcl9zdGF0aWNfbGlicworCWlmIHRlc3QgIiR1c2Vfc3RhdGljX2xpYnMiID0gYnVpbHQgJiYgdGVzdCAiJGluc3RhbGxlZCIgPSB5ZXM7IHRoZW4KKwkgIHVzZV9zdGF0aWNfbGlicz1ubworCWZpCisJaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiICYmCisJICAgeyB0ZXN0ICIkdXNlX3N0YXRpY19saWJzIiA9IG5vIHx8IHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IH07IHRoZW4KKwkgIGNhc2UgJGhvc3QgaW4KKwkgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyopCisJICAgICAgIyBObyBwb2ludCBpbiByZWxpbmtpbmcgRExMcyBiZWNhdXNlIHBhdGhzIGFyZSBub3QgZW5jb2RlZAorCSAgICAgIG5vdGluc3RfZGVwbGlicz0iJG5vdGluc3RfZGVwbGlicyAkbGliIgorCSAgICAgIG5lZWRfcmVsaW5rPW5vCisJICAgIDs7CisJICAqKQorCSAgICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IG5vOyB0aGVuCisJICAgICAgbm90aW5zdF9kZXBsaWJzPSIkbm90aW5zdF9kZXBsaWJzICRsaWIiCisJICAgICAgbmVlZF9yZWxpbms9eWVzCisJICAgIGZpCisJICAgIDs7CisJICBlc2FjCisJICAjIFRoaXMgaXMgYSBzaGFyZWQgbGlicmFyeQorCisJICAjIFdhcm4gYWJvdXQgcG9ydGFiaWxpdHksIGNhbid0IGxpbmsgYWdhaW5zdCAtbW9kdWxlJ3Mgb24gc29tZQorCSAgIyBzeXN0ZW1zIChkYXJ3aW4pLiAgRG9uJ3QgYmxlYXQgYWJvdXQgZGxvcGVuZWQgbW9kdWxlcyB0aG91Z2ghCisJICBkbG9wZW5tb2R1bGU9IiIKKwkgIGZvciBkbHByZW1vZHVsZXRlc3QgaW4gJGRscHJlZmlsZXM7IGRvCisJICAgIGlmIHRlc3QgIlgkZGxwcmVtb2R1bGV0ZXN0IiA9ICJYJGxpYiI7IHRoZW4KKwkgICAgICBkbG9wZW5tb2R1bGU9IiRkbHByZW1vZHVsZXRlc3QiCisJICAgICAgYnJlYWsKKwkgICAgZmkKKwkgIGRvbmUKKwkgIGlmIHRlc3QgLXogIiRkbG9wZW5tb2R1bGUiICYmIHRlc3QgIiRzaG91bGRub3RsaW5rIiA9IHllcyAmJiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCisJICAgICRFQ0hPCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBleGVjdXRhYmxlICRvdXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9kdWxlIgorCSAgICBlbHNlCisJICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIGxvYWRhYmxlIG1vZHVsZSIKKwkgICAgZmkKKwkgICAgJEVDSE8gIioqKiAkbGlua2xpYiBpcyBub3QgcG9ydGFibGUhIgorCSAgZmkKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgJiYKKwkgICAgIHRlc3QgIiRoYXJkY29kZV9pbnRvX2xpYnMiID0geWVzOyB0aGVuCisJICAgICMgSGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aC4KKwkgICAgIyBTa2lwIGRpcmVjdG9yaWVzIHRoYXQgYXJlIGluIHRoZSBzeXN0ZW0gZGVmYXVsdCBydW4tdGltZQorCSAgICAjIHNlYXJjaCBwYXRoLgorCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisJICAgICoiICRhYnNkaXIgIiopIDs7CisJICAgICopCisJICAgICAgY2FzZSAiJGNvbXBpbGVfcnBhdGggIiBpbgorCSAgICAgICoiICRhYnNkaXIgIiopIDs7CisJICAgICAgKikgY29tcGlsZV9ycGF0aD0iJGNvbXBpbGVfcnBhdGggJGFic2RpciIKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisJICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICopCisJICAgICAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KKwkgICAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAgICopIGZpbmFsaXplX3JwYXRoPSIkZmluYWxpemVfcnBhdGggJGxpYmRpciIKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZmkKKworCSAgaWYgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIjsgdGhlbgorCSAgICAjIGZpZ3VyZSBvdXQgdGhlIHNvbmFtZQorCSAgICBzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXMKKwkgICAgc2hpZnQKKwkgICAgcmVhbG5hbWU9IiQxIgorCSAgICBzaGlmdAorCSAgICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkgICAgIyB1c2UgZGxuYW1lIGlmIHdlIGdvdCBpdC4gaXQncyBwZXJmZWN0bHkgZ29vZCwgbm8/CisJICAgIGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCisJICAgICAgc29uYW1lPSIkZGxuYW1lIgorCSAgICBlbGlmIHRlc3QgLW4gIiRzb25hbWVfc3BlYyI7IHRoZW4KKwkgICAgICAjIGJsZWggd2luZG93cworCSAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICAqY3lnd2luKiB8IG1pbmd3KiB8ICpjZWdjYyopCisJICAgICAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCQltYWpvcj0kZnVuY19hcml0aF9yZXN1bHQKKwkJdmVyc3VmZml4PSItJG1ham9yIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgICBldmFsIHNvbmFtZT1cIiRzb25hbWVfc3BlY1wiCisJICAgIGVsc2UKKwkgICAgICBzb25hbWU9IiRyZWFsbmFtZSIKKwkgICAgZmkKKworCSAgICAjIE1ha2UgYSBuZXcgbmFtZSBmb3IgdGhlIGV4dHJhY3RfZXhwc3ltc19jbWRzIHRvIHVzZQorCSAgICBzb3Jvb3Q9IiRzb25hbWUiCisJICAgIGZ1bmNfYmFzZW5hbWUgIiRzb3Jvb3QiCisJICAgIHNvbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgICBmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmRsbCcgIiRzb25hbWUiCisJICAgIG5ld2xpYj1saWJpbXAtJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5hCisKKwkgICAgIyBJZiB0aGUgbGlicmFyeSBoYXMgbm8gZXhwb3J0IGxpc3QsIHRoZW4gY3JlYXRlIG9uZSBub3cKKwkgICAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS1kZWYiOyB0aGVuIDoKKwkgICAgZWxzZQorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIFxgJHNvbmFtZSciCisJICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRleHRyYWN0X2V4cHN5bXNfY21kcyIgJ2V4aXQgJD8nCisJICAgIGZpCisKKwkgICAgIyBDcmVhdGUgJG5ld2xpYgorCSAgICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8kbmV3bGliIjsgdGhlbiA6OyBlbHNlCisJICAgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIGltcG9ydCBsaWJyYXJ5IGZvciBcYCRzb25hbWUnIgorCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiICdleGl0ICQ/JworCSAgICBmaQorCSAgICAjIG1ha2Ugc3VyZSB0aGUgbGlicmFyeSB2YXJpYWJsZXMgYXJlIHBvaW50aW5nIHRvIHRoZSBuZXcgbGlicmFyeQorCSAgICBkaXI9JG91dHB1dF9vYmpkaXIKKwkgICAgbGlua2xpYj0kbmV3bGliCisJICBmaSAjIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIKKworCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG1vZGUiICE9IHJlbGluazsgdGhlbgorCSAgICBhZGRfc2hsaWJwYXRoPQorCSAgICBhZGRfZGlyPQorCSAgICBhZGQ9CisJICAgIGxpYl9saW5rZWQ9eWVzCisJICAgIGNhc2UgJGhhcmRjb2RlX2FjdGlvbiBpbgorCSAgICBpbW1lZGlhdGUgfCB1bnN1cHBvcnRlZCkKKwkgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiA9IG5vOyB0aGVuCisJCWFkZD0iJGRpci8kbGlua2xpYiIKKwkJY2FzZSAkaG9zdCBpbgorCQkgICotKi1zY28zLjJ2NS4wLlswMjRdKikgYWRkX2Rpcj0iLUwkZGlyIiA7OworCQkgICotKi1zeXN2NCp1dzIqKSBhZGRfZGlyPSItTCRkaXIiIDs7CisJCSAgKi0qLXN5c3Y1T3BlblVOSVgqIHwgKi0qLXN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCBcCisJCSAgICAqLSotdW5peHdhcmU3KikgYWRkX2Rpcj0iLUwkZGlyIiA7OworCQkgICotKi1kYXJ3aW4qICkKKwkJICAgICMgaWYgdGhlIGxpYiBpcyBhIChub24tZGxvcGVuZWQpIG1vZHVsZSB0aGVuIHdlIGNhbiBub3QKKwkJICAgICMgbGluayBhZ2FpbnN0IGl0LCBzb21lb25lIGlzIGlnbm9yaW5nIHRoZSBlYXJsaWVyIHdhcm5pbmdzCisJCSAgICBpZiAvdXNyL2Jpbi9maWxlIC1MICRhZGQgMj4gL2Rldi9udWxsIHwKKwkJCSAkR1JFUCAiOiBbXjpdKiBidW5kbGUiID4vZGV2L251bGwgOyB0aGVuCisJCSAgICAgIGlmIHRlc3QgIlgkZGxvcGVubW9kdWxlIiAhPSAiWCRsaWIiOyB0aGVuCisJCQkkRUNITyAiKioqIFdhcm5pbmc6IGxpYiAkbGlua2xpYiBpcyBhIG1vZHVsZSwgbm90IGEgc2hhcmVkIGxpYnJhcnkiCisJCQlpZiB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiIDsgdGhlbgorCQkJICAkRUNITworCQkJICAkRUNITyAiKioqIEFuZCB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBzdGF0aWMgYXJjaGl2ZSBhdmFpbGFibGUiCisJCQkgICRFQ0hPICIqKiogVGhlIGxpbmsgd2lsbCBwcm9iYWJseSBmYWlsLCBzb3JyeSIKKwkJCWVsc2UKKwkJCSAgYWRkPSIkZGlyLyRvbGRfbGlicmFyeSIKKwkJCWZpCisJCSAgICAgIGVsaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorCQkJYWRkPSIkZGlyLyRvbGRfbGlicmFyeSIKKwkJICAgICAgZmkKKwkJICAgIGZpCisJCWVzYWMKKwkgICAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IG5vOyB0aGVuCisJCWNhc2UgJGhvc3QgaW4KKwkJKi0qLXN1bm9zKikgYWRkX3NobGlicGF0aD0iJGRpciIgOzsKKwkJZXNhYworCQlhZGRfZGlyPSItTCRkaXIiCisJCWFkZD0iLWwkbmFtZSIKKwkgICAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IG5vOyB0aGVuCisJCWFkZF9zaGxpYnBhdGg9IiRkaXIiCisJCWFkZD0iLWwkbmFtZSIKKwkgICAgICBlbHNlCisJCWxpYl9saW5rZWQ9bm8KKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgIHJlbGluaykKKwkgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiA9IHllcyAmJgorCSAgICAgICAgIHRlc3QgIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUiID0gbm87IHRoZW4KKwkJYWRkPSIkZGlyLyRsaW5rbGliIgorCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0geWVzOyB0aGVuCisJCWFkZF9kaXI9Ii1MJGRpciIKKwkJIyBUcnkgbG9va2luZyBmaXJzdCBpbiB0aGUgbG9jYXRpb24gd2UncmUgYmVpbmcgaW5zdGFsbGVkIHRvLgorCQlpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorCQkgIGNhc2UgJGxpYmRpciBpbgorCQkgICAgW1xcL10qKQorCQkgICAgICBhZGRfZGlyPSIkYWRkX2RpciAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorCQkgICAgICA7OworCQkgIGVzYWMKKwkJZmkKKwkJYWRkPSItbCRuYW1lIgorCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisJCWFkZF9zaGxpYnBhdGg9IiRkaXIiCisJCWFkZD0iLWwkbmFtZSIKKwkgICAgICBlbHNlCisJCWxpYl9saW5rZWQ9bm8KKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgICopIGxpYl9saW5rZWQ9bm8gOzsKKwkgICAgZXNhYworCisJICAgIGlmIHRlc3QgIiRsaWJfbGlua2VkIiAhPSB5ZXM7IHRoZW4KKwkgICAgICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gInVuc3VwcG9ydGVkIGhhcmRjb2RlIHByb3BlcnRpZXMiCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAtbiAiJGFkZF9zaGxpYnBhdGgiOyB0aGVuCisJICAgICAgY2FzZSA6JGNvbXBpbGVfc2hsaWJwYXRoOiBpbgorCSAgICAgICoiOiRhZGRfc2hsaWJwYXRoOiIqKSA7OworCSAgICAgICopIGNvbXBpbGVfc2hsaWJwYXRoPSIkY29tcGlsZV9zaGxpYnBhdGgkYWRkX3NobGlicGF0aDoiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBjb21waWxlX2RlcGxpYnM9IiRhZGRfZGlyICRjb21waWxlX2RlcGxpYnMiCisJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgY29tcGlsZV9kZXBsaWJzPSIkYWRkICRjb21waWxlX2RlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZGVwbGlicz0iJGFkZF9kaXIgJGRlcGxpYnMiCisJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZGVwbGlicz0iJGFkZCAkZGVwbGlicyIKKwkgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiAhPSB5ZXMgJiYKKwkJIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiAhPSB5ZXMgJiYKKwkJIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IHllczsgdGhlbgorCQljYXNlIDokZmluYWxpemVfc2hsaWJwYXRoOiBpbgorCQkqIjokbGliZGlyOiIqKSA7OworCQkqKSBmaW5hbGl6ZV9zaGxpYnBhdGg9IiRmaW5hbGl6ZV9zaGxpYnBhdGgkbGliZGlyOiIgOzsKKwkJZXNhYworCSAgICAgIGZpCisJICAgIGZpCisJICBmaQorCisJICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgICAgYWRkX3NobGlicGF0aD0KKwkgICAgYWRkX2Rpcj0KKwkgICAgYWRkPQorCSAgICAjIEZpbmFsaXplIGNvbW1hbmQgZm9yIGJvdGggaXMgc2ltcGxlOiBqdXN0IGhhcmRjb2RlIGl0LgorCSAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiA9IHllcyAmJgorCSAgICAgICB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIiA9IG5vOyB0aGVuCisJICAgICAgYWRkPSIkbGliZGlyLyRsaW5rbGliIgorCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IHllczsgdGhlbgorCSAgICAgIGFkZF9kaXI9Ii1MJGxpYmRpciIKKwkgICAgICBhZGQ9Ii1sJG5hbWUiCisJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisJICAgICAgY2FzZSA6JGZpbmFsaXplX3NobGlicGF0aDogaW4KKwkgICAgICAqIjokbGliZGlyOiIqKSA7OworCSAgICAgICopIGZpbmFsaXplX3NobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCRsaWJkaXI6IiA7OworCSAgICAgIGVzYWMKKwkgICAgICBhZGQ9Ii1sJG5hbWUiCisJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSB5ZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIiAmJgorCQkgdGVzdCAtZiAiJGluc3RfcHJlZml4X2RpciRsaWJkaXIvJGxpbmtsaWIiIDsgdGhlbgorCQlhZGQ9IiRpbnN0X3ByZWZpeF9kaXIkbGliZGlyLyRsaW5rbGliIgorCSAgICAgIGVsc2UKKwkJYWRkPSIkbGliZGlyLyRsaW5rbGliIgorCSAgICAgIGZpCisJICAgIGVsc2UKKwkgICAgICAjIFdlIGNhbm5vdCBzZWVtIHRvIGhhcmRjb2RlIGl0LCBndWVzcyB3ZSdsbCBmYWtlIGl0LgorCSAgICAgIGFkZF9kaXI9Ii1MJGxpYmRpciIKKwkgICAgICAjIFRyeSBsb29raW5nIGZpcnN0IGluIHRoZSBsb2NhdGlvbiB3ZSdyZSBiZWluZyBpbnN0YWxsZWQgdG8uCisJICAgICAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKwkJY2FzZSAkbGliZGlyIGluCisJCSAgW1xcL10qKQorCQkgICAgYWRkX2Rpcj0iJGFkZF9kaXIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKwkJICAgIDs7CisJCWVzYWMKKwkgICAgICBmaQorCSAgICAgIGFkZD0iLWwkbmFtZSIKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBmaW5hbGl6ZV9kZXBsaWJzPSIkYWRkX2RpciAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBmaW5hbGl6ZV9kZXBsaWJzPSIkYWRkICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGRlcGxpYnM9IiRhZGRfZGlyICRkZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGRlcGxpYnM9IiRhZGQgJGRlcGxpYnMiCisJICAgIGZpCisJICBmaQorCWVsaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICMgSGVyZSB3ZSBhc3N1bWUgdGhhdCBvbmUgb2YgaGFyZGNvZGVfZGlyZWN0IG9yIGhhcmRjb2RlX21pbnVzX0wKKwkgICMgaXMgbm90IHVuc3VwcG9ydGVkLiAgVGhpcyBpcyB2YWxpZCBvbiBhbGwga25vd24gc3RhdGljIGFuZAorCSAgIyBzaGFyZWQgcGxhdGZvcm1zLgorCSAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgIT0gdW5zdXBwb3J0ZWQ7IHRoZW4KKwkgICAgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBsaW5rbGliPSIkb2xkX2xpYnJhcnkiCisJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRpci8kbGlua2xpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGlyLyRsaW5rbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBjb21waWxlX2RlcGxpYnM9Ii1sJG5hbWUgLUwkZGlyICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9Ii1sJG5hbWUgLUwkZGlyICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZmkKKwllbGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJICAjIE5vdCBhIHNoYXJlZCBsaWJyYXJ5CisJICBpZiB0ZXN0ICIkZGVwbGlic19jaGVja19tZXRob2QiICE9IHBhc3NfYWxsOyB0aGVuCisJICAgICMgV2UncmUgdHJ5aW5nIGxpbmsgYSBzaGFyZWQgbGlicmFyeSBhZ2FpbnN0IGEgc3RhdGljIG9uZQorCSAgICAjIGJ1dCB0aGUgc3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydCBpdC4KKworCSAgICAjIEp1c3QgcHJpbnQgYSB3YXJuaW5nIGFuZCBhZGQgdGhlIGxpYnJhcnkgdG8gZGVwZW5kZW5jeV9saWJzIHNvCisJICAgICMgdGhhdCB0aGUgcHJvZ3JhbSBjYW4gYmUgbGlua2VkIGFnYWluc3QgdGhlIHN0YXRpYyBsaWJyYXJ5LgorCSAgICAkRUNITworCSAgICAkRUNITyAiKioqIFdhcm5pbmc6IFRoaXMgc3lzdGVtIGNhbiBub3QgbGluayB0byBzdGF0aWMgbGliIGFyY2hpdmUgJGxpYi4iCisJICAgICRFQ0hPICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCSAgICAkRUNITyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkgICAgJEVDSE8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZS4iCisJICAgIGlmIHRlc3QgIiRtb2R1bGUiID0geWVzOyB0aGVuCisJICAgICAgJEVDSE8gIioqKiBCdXQgYXMgeW91IHRyeSB0byBidWlsZCBhIG1vZHVsZSBsaWJyYXJ5LCBsaWJ0b29sIHdpbGwgc3RpbGwgY3JlYXRlICIKKwkgICAgICAkRUNITyAiKioqIGEgc3RhdGljIG1vZHVsZSwgdGhhdCBzaG91bGQgd29yayBhcyBsb25nIGFzIHRoZSBkbG9wZW5pbmcgYXBwbGljYXRpb24iCisJICAgICAgJEVDSE8gIioqKiBpcyBsaW5rZWQgd2l0aCB0aGUgLWRsb3BlbiBmbGFnIHRvIHJlc29sdmUgc3ltYm9scyBhdCBydW50aW1lLiIKKwkgICAgICBpZiB0ZXN0IC16ICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorCQkkRUNITworCQkkRUNITyAiKioqIEhvd2V2ZXIsIHRoaXMgd291bGQgb25seSB3b3JrIGlmIGxpYnRvb2wgd2FzIGFibGUgdG8gZXh0cmFjdCBzeW1ib2wiCisJCSRFQ0hPICIqKiogbGlzdHMgZnJvbSBhIHByb2dyYW0sIHVzaW5nIFxgbm0nIG9yIGVxdWl2YWxlbnQsIGJ1dCBsaWJ0b29sIGNvdWxkIgorCQkkRUNITyAiKioqIG5vdCBmaW5kIHN1Y2ggYSBwcm9ncmFtLiAgU28sIHRoaXMgbW9kdWxlIGlzIHByb2JhYmx5IHVzZWxlc3MuIgorCQkkRUNITyAiKioqIFxgbm0nIGZyb20gR05VIGJpbnV0aWxzIGFuZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVscC4iCisJICAgICAgZmkKKwkgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0gbm87IHRoZW4KKwkJYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorCQlidWlsZF9vbGRfbGlicz15ZXMKKwkgICAgICBlbHNlCisJCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICAgIGZpCisJICAgIGZpCisJICBlbHNlCisJICAgIGRlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRkZXBsaWJzIgorCSAgICBsaW5rX3N0YXRpYz15ZXMKKwkgIGZpCisJZmkgIyBsaW5rIHNoYXJlZC9zdGF0aWMgbGlicmFyeT8KKworCWlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRkZXBlbmRlbmN5X2xpYnMiICYmCisJICAgICB7IHRlc3QgIiRoYXJkY29kZV9pbnRvX2xpYnMiICE9IHllcyB8fAorCSAgICAgICB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzIHx8CisJICAgICAgIHRlc3QgIiRsaW5rX3N0YXRpYyIgPSB5ZXM7IH07IHRoZW4KKwkgICAgIyBFeHRyYWN0IC1SIGZyb20gZGVwZW5kZW5jeV9saWJzCisJICAgIHRlbXBfZGVwbGlicz0KKwkgICAgZm9yIGxpYmRpciBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICAgIGNhc2UgJGxpYmRpciBpbgorCSAgICAgIC1SKikgZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGxpYmRpciIKKwkgICAgICAgICAgIHRlbXBfeHJwYXRoPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkJICAgY2FzZSAiICR4cnBhdGggIiBpbgorCQkgICAqIiAkdGVtcF94cnBhdGggIiopIDs7CisJCSAgICopIHhycGF0aD0iJHhycGF0aCAkdGVtcF94cnBhdGgiOzsKKwkJICAgZXNhYzs7CisJICAgICAgKikgdGVtcF9kZXBsaWJzPSIkdGVtcF9kZXBsaWJzICRsaWJkaXIiOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgZGVwZW5kZW5jeV9saWJzPSIkdGVtcF9kZXBsaWJzIgorCSAgZmkKKworCSAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRhYnNkaXIiCisJICAjIExpbmsgYWdhaW5zdCB0aGlzIGxpYnJhcnkKKwkgIHRlc3QgIiRsaW5rX3N0YXRpYyIgPSBubyAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRhYnNfbGFkaXIvJGxhbmFtZSAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgIyAuLi4gYW5kIGl0cyBkZXBlbmRlbmN5X2xpYnMKKwkgIHRtcF9saWJzPQorCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgaWYgJG9wdF9kdXBsaWNhdGVfZGVwcyA7IHRoZW4KKwkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIKKwkgIGRvbmUKKworCSAgaWYgdGVzdCAiJGxpbmtfYWxsX2RlcGxpYnMiICE9IG5vOyB0aGVuCisJICAgICMgQWRkIHRoZSBzZWFyY2ggcGF0aHMgb2YgYWxsIGRlcGVuZGVuY3kgbGlicmFyaWVzCisJICAgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgICBwYXRoPQorCSAgICAgIGNhc2UgJGRlcGxpYiBpbgorCSAgICAgIC1MKikgcGF0aD0iJGRlcGxpYiIgOzsKKwkgICAgICAqLmxhKQorCSAgICAgICAgZnVuY19kaXJuYW1lICIkZGVwbGliIiAiIiAiLiIKKwkJZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKwkJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJCWNhc2UgJGRpciBpbgorCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFic2Rpcj0iJGRpciIgOzsKKwkJKikKKwkJICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCisJCSAgaWYgdGVzdCAteiAiJGFic2RpciI7IHRoZW4KKwkJICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRkaXInIgorCQkgICAgYWJzZGlyPSIkZGlyIgorCQkgIGZpCisJCSAgOzsKKwkJZXNhYworCQlpZiAkR1JFUCAiXmluc3RhbGxlZD1ubyIgJGRlcGxpYiA+IC9kZXYvbnVsbDsgdGhlbgorCQljYXNlICRob3N0IGluCisJCSotKi1kYXJ3aW4qKQorCQkgIGRlcGRlcGw9CisJCSAgZXZhbCBkZXBsaWJyYXJ5X25hbWVzPWAke1NFRH0gLW4gLWUgJ3MvXmxpYnJhcnlfbmFtZXM9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorCQkgIGlmIHRlc3QgLW4gIiRkZXBsaWJyYXJ5X25hbWVzIiA7IHRoZW4KKwkJICAgIGZvciB0bXAgaW4gJGRlcGxpYnJhcnlfbmFtZXMgOyBkbworCQkgICAgICBkZXBkZXBsPSR0bXAKKwkJICAgIGRvbmUKKwkJICAgIGlmIHRlc3QgLWYgIiRhYnNkaXIvJG9iamRpci8kZGVwZGVwbCIgOyB0aGVuCisJCSAgICAgIGRlcGRlcGw9IiRhYnNkaXIvJG9iamRpci8kZGVwZGVwbCIKKwkJICAgICAgZGFyd2luX2luc3RhbGxfbmFtZT1gJHtPVE9PTH0gLUwgJGRlcGRlcGwgfCBhd2sgJ3tpZiAoTlIgPT0gMikge3ByaW50ICQxO2V4aXR9fSdgCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGRhcndpbl9pbnN0YWxsX25hbWUiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRhcndpbl9pbnN0YWxsX25hbWU9YCR7T1RPT0w2NH0gLUwgJGRlcGRlcGwgIHwgYXdrICd7aWYgKE5SID09IDIpIHtwcmludCAkMTtleGl0fX0nYAorICAgICAgICAgICAgICAgICAgICAgIGZpCisJCSAgICAgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHt3bH0tZHlsaWJfZmlsZSAke3dsfSR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKKwkJICAgICAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzIC1keWxpYl9maWxlICR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKKwkJICAgICAgcGF0aD0KKwkJICAgIGZpCisJCSAgZmkKKwkJICA7OworCQkqKQorCQkgIHBhdGg9Ii1MJGFic2Rpci8kb2JqZGlyIgorCQkgIDs7CisJCWVzYWMKKwkJZWxzZQorCQkgIGV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisJCSAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCQkgICAgZnVuY19mYXRhbF9lcnJvciAiXGAkZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCSAgdGVzdCAiJGFic2RpciIgIT0gIiRsaWJkaXIiICYmIFwKKwkJICAgIGZ1bmNfd2FybmluZyAiXGAkZGVwbGliJyBzZWVtcyB0byBiZSBtb3ZlZCIKKworCQkgIHBhdGg9Ii1MJGFic2RpciIKKwkJZmkKKwkJOzsKKwkgICAgICBlc2FjCisJICAgICAgY2FzZSAiICRkZXBsaWJzICIgaW4KKwkgICAgICAqIiAkcGF0aCAiKikgOzsKKwkgICAgICAqKSBkZXBsaWJzPSIkcGF0aCAkZGVwbGlicyIgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgIGZpICMgbGlua19hbGxfZGVwbGlicyAhPSBubworCWZpICMgbGlua21vZGUgPSBsaWIKKyAgICAgIGRvbmUgIyBmb3IgZGVwbGliIGluICRsaWJzCisgICAgICBpZiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCisJaWYgdGVzdCAiJGxpbmttb2RlIiA9ICJwcm9nIjsgdGhlbgorCSAgY29tcGlsZV9kZXBsaWJzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGNvbXBpbGVfZGVwbGlicyIKKwkgIGZpbmFsaXplX2RlcGxpYnM9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkZmluYWxpemVfZGVwbGlicyIKKwllbHNlCisJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICJgJEVDSE8gIlggJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzIiB8ICRYc2VkIC1lICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCWZpCisgICAgICBmaQorICAgICAgZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzIgorICAgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuOyB0aGVuCisJIyBMaW5rIHRoZSBkbHByZW9wZW5lZCBsaWJyYXJpZXMgYmVmb3JlIG90aGVyIGxpYnJhcmllcworCWZvciBkZXBsaWIgaW4gJHNhdmVfZGVwbGliczsgZG8KKwkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJZG9uZQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRwYXNzIiAhPSBkbG9wZW47IHRoZW4KKwlpZiB0ZXN0ICIkcGFzcyIgIT0gY29udjsgdGhlbgorCSAgIyBNYWtlIHN1cmUgbGliX3NlYXJjaF9wYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgbGliX3NlYXJjaF9wYXRoPQorCSAgZm9yIGRpciBpbiAkbmV3bGliX3NlYXJjaF9wYXRoOyBkbworCSAgICBjYXNlICIkbGliX3NlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGRpciAiKikgOzsKKwkgICAgKikgbGliX3NlYXJjaF9wYXRoPSIkbGliX3NlYXJjaF9wYXRoICRkaXIiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwkgIG5ld2xpYl9zZWFyY2hfcGF0aD0KKwlmaQorCisJaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiAhPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgdmFycz0iZGVwbGlicyIKKwllbHNlCisJICB2YXJzPSJjb21waWxlX2RlcGxpYnMgZmluYWxpemVfZGVwbGlicyIKKwlmaQorCWZvciB2YXIgaW4gJHZhcnMgZGVwZW5kZW5jeV9saWJzOyBkbworCSAgIyBBZGQgbGlicmFyaWVzIHRvICR2YXIgaW4gcmV2ZXJzZSBvcmRlcgorCSAgZXZhbCB0bXBfbGlicz1cIlwkJHZhclwiCisJICBuZXdfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJHRtcF9saWJzOyBkbworCSAgICAjIEZJWE1FOiBQZWRhbnRpY2FsbHksIHRoaXMgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLCBzbworCSAgICAjICAgICAgICB0aGF0IHNvbWUgbmFzdHkgZGVwZW5kZW5jeSBsb29wIGlzbid0IGFjY2lkZW50YWxseQorCSAgICAjICAgICAgICBicm9rZW46CisJICAgICNuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiCisJICAgICMgUHJhZ21hdGljYWxseSwgdGhpcyBzZWVtcyB0byBjYXVzZSB2ZXJ5IGZldyBwcm9ibGVtcyBpbgorCSAgICAjIHByYWN0aWNlOgorCSAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgLUwqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisJICAgIC1SKikgOzsKKwkgICAgKikKKwkgICAgICAjIEFuZCBoZXJlIGlzIHRoZSByZWFzb246IHdoZW4gYSBsaWJyYXJ5IGFwcGVhcnMgbW9yZQorCSAgICAgICMgdGhhbiBvbmNlIGFzIGFuIGV4cGxpY2l0IGRlcGVuZGVuY2Ugb2YgYSBsaWJyYXJ5LCBvcgorCSAgICAgICMgaXMgaW1wbGljaXRseSBsaW5rZWQgaW4gbW9yZSB0aGFuIG9uY2UgYnkgdGhlCisJICAgICAgIyBjb21waWxlciwgaXQgaXMgY29uc2lkZXJlZCBzcGVjaWFsLCBhbmQgbXVsdGlwbGUKKwkgICAgICAjIG9jY3VycmVuY2VzIHRoZXJlb2YgYXJlIG5vdCByZW1vdmVkLiAgQ29tcGFyZSB0aGlzCisJICAgICAgIyB3aXRoIGhhdmluZyB0aGUgc2FtZSBsaWJyYXJ5IGJlaW5nIGxpc3RlZCBhcyBhCisJICAgICAgIyBkZXBlbmRlbmN5IG9mIG11bHRpcGxlIG90aGVyIGxpYnJhcmllczogaW4gdGhpcyBjYXNlLAorCSAgICAgICMgd2Uga25vdyAocGVkYW50aWNhbGx5LCB3ZSBhc3N1bWUpIHRoZSBsaWJyYXJ5IGRvZXMgbm90CisJICAgICAgIyBuZWVkIHRvIGJlIGxpc3RlZCBtb3JlIHRoYW4gb25jZSwgc28gd2Uga2VlcCBvbmx5IHRoZQorCSAgICAgICMgbGFzdCBjb3B5LiAgVGhpcyBpcyBub3QgYWx3YXlzIHJpZ2h0LCBidXQgaXQgaXMgcmFyZQorCSAgICAgICMgZW5vdWdoIHRoYXQgd2UgcmVxdWlyZSB1c2VycyB0aGF0IHJlYWxseSBtZWFuIHRvIHBsYXkKKwkgICAgICAjIHN1Y2ggdW5wb3J0YWJsZSBsaW5raW5nIHRyaWNrcyB0byBsaW5rIHRoZSBsaWJyYXJ5CisJICAgICAgIyB1c2luZyAtV2wsLWxuYW1lLCBzbyB0aGF0IGxpYnRvb2wgZG9lcyBub3QgY29uc2lkZXIgaXQKKwkgICAgICAjIGZvciBkdXBsaWNhdGUgcmVtb3ZhbC4KKwkgICAgICBjYXNlICIgJHNwZWNpYWxkZXBsaWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisJICAgICAgKikKKwkJY2FzZSAiICRuZXdfbGlicyAiIGluCisJCSoiICRkZXBsaWIgIiopIDs7CisJCSopIG5ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIgOzsKKwkJZXNhYworCQk7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICBkb25lCisJICB0bXBfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJG5ld19saWJzOyBkbworCSAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgLUwqKQorCSAgICAgIGNhc2UgIiAkdG1wX2xpYnMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopIDs7CisJICAgICAgKikgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICAqKSB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwkgIGV2YWwgJHZhcj1cIiR0bXBfbGlic1wiCisJZG9uZSAjIGZvciB2YXIKKyAgICAgIGZpCisgICAgICAjIExhc3Qgc3RlcDogcmVtb3ZlIHJ1bnRpbWUgbGlicyBmcm9tIGRlcGVuZGVuY3lfbGlicworICAgICAgIyAodGhleSBzdGF5IGluIGRlcGxpYnMpCisgICAgICB0bXBfbGlicz0KKyAgICAgIGZvciBpIGluICRkZXBlbmRlbmN5X2xpYnMgOyBkbworCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCAiIGluCisJKiIgJGkgIiopCisJICBpPSIiCisJICA7OworCWVzYWMKKwlpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCisJICB0bXBfbGlicz0iJHRtcF9saWJzICRpIgorCWZpCisgICAgICBkb25lCisgICAgICBkZXBlbmRlbmN5X2xpYnM9JHRtcF9saWJzCisgICAgZG9uZSAjIGZvciBwYXNzCisgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKyAgICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorICAgIGZpCisgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorICAgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCisgICAgZmkKKworICAgIGNhc2UgJGxpbmttb2RlIGluCisgICAgb2xkbGliKQorICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KKwlmdW5jX3dhcm5pbmcgIlxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisgICAgICBmaQorCisgICAgICBjYXNlICIgJGRlcGxpYnMiIGluCisgICAgICAqXCAtbCogfCAqXCAtTCopCisJZnVuY193YXJuaW5nICJcYC1sJyBhbmQgXGAtTCcgYXJlIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiA7OworICAgICAgZXNhYworCisgICAgICB0ZXN0IC1uICIkcnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJwYXRoJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKworICAgICAgdGVzdCAtbiAiJHhycGF0aCIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtUicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvLy12ZXJzaW9uLW51bWJlcicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgIHRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKworICAgICAgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1leHBvcnQtc3ltYm9scycgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisgICAgICBvbGRsaWJzPSIkb3V0cHV0IgorICAgICAgb2Jqcz0iJG9ianMkb2xkX2RlcGxpYnMiCisgICAgICA7OworCisgICAgbGliKQorICAgICAgIyBNYWtlIHN1cmUgd2Ugb25seSBnZW5lcmF0ZSBsaWJyYXJpZXMgb2YgdGhlIGZvcm0gYGxpYk5BTUUubGEnLgorICAgICAgY2FzZSAkb3V0cHV0bmFtZSBpbgorICAgICAgbGliKikKKwlmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKKwlldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKKwk7OworICAgICAgKikKKwl0ZXN0ICIkbW9kdWxlIiA9IG5vICYmIFwKKwkgIGZ1bmNfZmF0YWxfaGVscCAibGlidG9vbCBsaWJyYXJ5IFxgJG91dHB1dCcgbXVzdCBiZWdpbiB3aXRoIFxgbGliJyIKKworCWlmIHRlc3QgIiRuZWVkX2xpYl9wcmVmaXgiICE9IG5vOyB0aGVuCisJICAjIEFkZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzIGlmIHJlcXVpcmVkCisJICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgIGV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisJICBldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKKwllbHNlCisJICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJICBsaWJuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwlmaQorCTs7CisgICAgICBlc2FjCisKKyAgICAgIGlmIHRlc3QgLW4gIiRvYmpzIjsgdGhlbgorCWlmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBidWlsZCBsaWJ0b29sIGxpYnJhcnkgXGAkb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMgb24gdGhpcyBob3N0OiRvYmpzIgorCWVsc2UKKwkgICRFQ0hPCisJICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUgbm9uLWxpYnRvb2wiCisJICAkRUNITyAiKioqIG9iamVjdHMgJG9ianMgaXMgbm90IHBvcnRhYmxlISIKKwkgIGxpYm9ianM9IiRsaWJvYmpzICRvYmpzIgorCWZpCisgICAgICBmaQorCisgICAgICB0ZXN0ICIkZGxzZWxmIiAhPSBubyAmJiBcCisJZnVuY193YXJuaW5nICJcYC1kbG9wZW4gc2VsZicgaXMgaWdub3JlZCBmb3IgbGlidG9vbCBsaWJyYXJpZXMiCisKKyAgICAgIHNldCBkdW1teSAkcnBhdGgKKyAgICAgIHNoaWZ0CisgICAgICB0ZXN0ICIkIyIgLWd0IDEgJiYgXAorCWZ1bmNfd2FybmluZyAiaWdub3JpbmcgbXVsdGlwbGUgXGAtcnBhdGgncyBmb3IgYSBsaWJ0b29sIGxpYnJhcnkiCisKKyAgICAgIGluc3RhbGxfbGliZGlyPSIkMSIKKworICAgICAgb2xkbGlicz0KKyAgICAgIGlmIHRlc3QgLXogIiRycGF0aCI7IHRoZW4KKwlpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorCSAgIyBCdWlsZGluZyBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeS4KKwkgICMgU29tZSBjb21waWxlcnMgaGF2ZSBwcm9ibGVtcyB3aXRoIGEgYC5hbCcgZXh0ZW5zaW9uIHNvCisJICAjIGNvbnZlbmllbmNlIGxpYnJhcmllcyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBleHRlbnNpb24gYW4KKwkgICMgYXJjaGl2ZSBub3JtYWxseSB3b3VsZC4KKwkgIG9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQgJG9sZGxpYnMiCisJICBidWlsZF9saWJ0b29sX2xpYnM9Y29udmVuaWVuY2UKKwkgIGJ1aWxkX29sZF9saWJzPXllcworCWZpCisKKwl0ZXN0IC1uICIkdmluZm8iICYmIFwKKwkgIGZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvLy12ZXJzaW9uLW51bWJlcicgaXMgaWdub3JlZCBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzIgorCisJdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwkgIGZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzIgorICAgICAgZWxzZQorCisJIyBQYXJzZSB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBhcmd1bWVudC4KKwlzYXZlX2lmcz0iJElGUyI7IElGUz0nOicKKwlzZXQgZHVtbXkgJHZpbmZvIDAgMCAwCisJc2hpZnQKKwlJRlM9IiRzYXZlX2lmcyIKKworCXRlc3QgLW4gIiQ3IiAmJiBcCisJICBmdW5jX2ZhdGFsX2hlbHAgInRvbyBtYW55IHBhcmFtZXRlcnMgdG8gXGAtdmVyc2lvbi1pbmZvJyIKKworCSMgY29udmVydCBhYnNvbHV0ZSB2ZXJzaW9uIG51bWJlcnMgdG8gbGlidG9vbCBhZ2VzCisJIyB0aGlzIHJldGFpbnMgY29tcGF0aWJpbGl0eSB3aXRoIC5sYSBmaWxlcyBhbmQgYXR0ZW1wdHMKKwkjIHRvIG1ha2UgdGhlIGNvZGUgYmVsb3cgYSBiaXQgbW9yZSBjb21wcmVoZW5zaWJsZQorCisJY2FzZSAkdmluZm9fbnVtYmVyIGluCisJeWVzKQorCSAgbnVtYmVyX21ham9yPSIkMSIKKwkgIG51bWJlcl9taW5vcj0iJDIiCisJICBudW1iZXJfcmV2aXNpb249IiQzIgorCSAgIworCSAgIyBUaGVyZSBhcmUgcmVhbGx5IG9ubHkgdHdvIGtpbmRzIC0tIHRob3NlIHRoYXQKKwkgICMgdXNlIHRoZSBjdXJyZW50IHJldmlzaW9uIGFzIHRoZSBtYWpvciB2ZXJzaW9uCisJICAjIGFuZCB0aG9zZSB0aGF0IHN1YnRyYWN0IGFnZSBhbmQgdXNlIGFnZSBhcworCSAgIyBhIG1pbm9yIHZlcnNpb24uICBCdXQsIHRoZW4gdGhlcmUgaXMgaXJpeAorCSAgIyB3aGljaCBoYXMgYW4gZXh0cmEgMSBhZGRlZCBqdXN0IGZvciBmdW4KKwkgICMKKwkgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorCSAgZGFyd2lufGxpbnV4fG9zZnx3aW5kb3dzfG5vbmUpCisJICAgIGZ1bmNfYXJpdGggJG51bWJlcl9tYWpvciArICRudW1iZXJfbWlub3IKKwkgICAgY3VycmVudD0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgYWdlPSIkbnVtYmVyX21pbm9yIgorCSAgICByZXZpc2lvbj0iJG51bWJlcl9yZXZpc2lvbiIKKwkgICAgOzsKKwkgIGZyZWVic2QtYW91dHxmcmVlYnNkLWVsZnxzdW5vcykKKwkgICAgY3VycmVudD0iJG51bWJlcl9tYWpvciIKKwkgICAgcmV2aXNpb249IiRudW1iZXJfbWlub3IiCisJICAgIGFnZT0iMCIKKwkgICAgOzsKKwkgIGlyaXh8bm9uc3RvcHV4KQorCSAgICBmdW5jX2FyaXRoICRudW1iZXJfbWFqb3IgKyAkbnVtYmVyX21pbm9yCisJICAgIGN1cnJlbnQ9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGFnZT0iJG51bWJlcl9taW5vciIKKwkgICAgcmV2aXNpb249IiRudW1iZXJfbWlub3IiCisJICAgIGx0X2lyaXhfaW5jcmVtZW50PW5vCisJICAgIDs7CisJICAqKQorCSAgICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gIiRtb2RlbmFtZTogdW5rbm93biBsaWJyYXJ5IHZlcnNpb24gdHlwZSBcYCR2ZXJzaW9uX3R5cGUnIgorCSAgICA7OworCSAgZXNhYworCSAgOzsKKwlubykKKwkgIGN1cnJlbnQ9IiQxIgorCSAgcmV2aXNpb249IiQyIgorCSAgYWdlPSIkMyIKKwkgIDs7CisJZXNhYworCisJIyBDaGVjayB0aGF0IGVhY2ggb2YgdGhlIHRoaW5ncyBhcmUgdmFsaWQgbnVtYmVycy4KKwljYXNlICRjdXJyZW50IGluCisJMHxbMS05XXxbMS05XVswLTldfFsxLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XVswLTldKSA7OworCSopCisJICBmdW5jX2Vycm9yICJDVVJSRU5UIFxgJGN1cnJlbnQnIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIgorCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgorCSAgOzsKKwllc2FjCisKKwljYXNlICRyZXZpc2lvbiBpbgorCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKKwkqKQorCSAgZnVuY19lcnJvciAiUkVWSVNJT04gXGAkcmV2aXNpb24nIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIgorCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgorCSAgOzsKKwllc2FjCisKKwljYXNlICRhZ2UgaW4KKwkwfFsxLTldfFsxLTldWzAtOV18WzEtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldWzAtOV0pIDs7CisJKikKKwkgIGZ1bmNfZXJyb3IgIkFHRSBcYCRhZ2UnIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIgorCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgorCSAgOzsKKwllc2FjCisKKwlpZiB0ZXN0ICIkYWdlIiAtZ3QgIiRjdXJyZW50IjsgdGhlbgorCSAgZnVuY19lcnJvciAiQUdFIFxgJGFnZScgaXMgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IGludGVyZmFjZSBudW1iZXIgXGAkY3VycmVudCciCisJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJZmkKKworCSMgQ2FsY3VsYXRlIHRoZSB2ZXJzaW9uIHZhcmlhYmxlcy4KKwltYWpvcj0KKwl2ZXJzdWZmaXg9CisJdmVyc3RyaW5nPQorCWNhc2UgJHZlcnNpb25fdHlwZSBpbgorCW5vbmUpIDs7CisKKwlkYXJ3aW4pCisJICAjIExpa2UgTGludXgsIGJ1dCB3aXRoIHRoZSBjdXJyZW50IHZlcnNpb24gYXZhaWxhYmxlIGluCisJICAjIHZlcnN0cmluZyBmb3IgY29kaW5nIGl0IGludG8gdGhlIGxpYnJhcnkgaGVhZGVyCisJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgdmVyc3VmZml4PSIkbWFqb3IuJGFnZS4kcmV2aXNpb24iCisJICAjIERhcndpbiBsZCBkb2Vzbid0IGxpa2UgMCBmb3IgdGhlc2Ugb3B0aW9ucy4uLgorCSAgZnVuY19hcml0aCAkY3VycmVudCArIDEKKwkgIG1pbm9yX2N1cnJlbnQ9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICB4bGN2ZXJzdHJpbmc9IiR7d2x9LWNvbXBhdGliaWxpdHlfdmVyc2lvbiAke3dsfSRtaW5vcl9jdXJyZW50ICR7d2x9LWN1cnJlbnRfdmVyc2lvbiAke3dsfSRtaW5vcl9jdXJyZW50LiRyZXZpc2lvbiIKKwkgIHZlcnN0cmluZz0iLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkbWlub3JfY3VycmVudCAtY3VycmVudF92ZXJzaW9uICRtaW5vcl9jdXJyZW50LiRyZXZpc2lvbiIKKwkgIDs7CisKKwlmcmVlYnNkLWFvdXQpCisJICBtYWpvcj0iLiRjdXJyZW50IgorCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQuJHJldmlzaW9uIjsKKwkgIDs7CisKKwlmcmVlYnNkLWVsZikKKwkgIG1ham9yPSIuJGN1cnJlbnQiCisJICB2ZXJzdWZmaXg9Ii4kY3VycmVudCIKKwkgIDs7CisKKwlpcml4IHwgbm9uc3RvcHV4KQorCSAgaWYgdGVzdCAiWCRsdF9pcml4X2luY3JlbWVudCIgPSAiWG5vIjsgdGhlbgorCSAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCSAgZWxzZQorCSAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZSArIDEKKwkgIGZpCisJICBtYWpvcj0kZnVuY19hcml0aF9yZXN1bHQKKworCSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisJICAgIG5vbnN0b3B1eCkgdmVyc3RyaW5nX3ByZWZpeD1ub25zdG9wdXggOzsKKwkgICAgKikgICAgICAgICB2ZXJzdHJpbmdfcHJlZml4PXNnaSA7OworCSAgZXNhYworCSAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nX3ByZWZpeCRtYWpvci4kcmV2aXNpb24iCisKKwkgICMgQWRkIGluIGFsbCB0aGUgaW50ZXJmYWNlcyB0aGF0IHdlIGFyZSBjb21wYXRpYmxlIHdpdGguCisJICBsb29wPSRyZXZpc2lvbgorCSAgd2hpbGUgdGVzdCAiJGxvb3AiIC1uZSAwOyBkbworCSAgICBmdW5jX2FyaXRoICRyZXZpc2lvbiAtICRsb29wCisJICAgIGlmYWNlPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICBmdW5jX2FyaXRoICRsb29wIC0gMQorCSAgICBsb29wPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmdfcHJlZml4JG1ham9yLiRpZmFjZTokdmVyc3RyaW5nIgorCSAgZG9uZQorCisJICAjIEJlZm9yZSB0aGlzIHBvaW50LCAkbWFqb3IgbXVzdCBub3QgY29udGFpbiBgLicuCisJICBtYWpvcj0uJG1ham9yCisJICB2ZXJzdWZmaXg9IiRtYWpvci4kcmV2aXNpb24iCisJICA7OworCisJbGludXgpCisJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgdmVyc3VmZml4PSIkbWFqb3IuJGFnZS4kcmV2aXNpb24iCisJICA7OworCisJb3NmKQorCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRhZ2UuJHJldmlzaW9uIgorCSAgdmVyc3RyaW5nPSIkY3VycmVudC4kYWdlLiRyZXZpc2lvbiIKKworCSAgIyBBZGQgaW4gYWxsIHRoZSBpbnRlcmZhY2VzIHRoYXQgd2UgYXJlIGNvbXBhdGlibGUgd2l0aC4KKwkgIGxvb3A9JGFnZQorCSAgd2hpbGUgdGVzdCAiJGxvb3AiIC1uZSAwOyBkbworCSAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGxvb3AKKwkgICAgaWZhY2U9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGZ1bmNfYXJpdGggJGxvb3AgLSAxCisJICAgIGxvb3A9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIHZlcnN0cmluZz0iJHZlcnN0cmluZzoke2lmYWNlfS4wIgorCSAgZG9uZQorCisJICAjIE1ha2UgZXhlY3V0YWJsZXMgZGVwZW5kIG9uIG91ciBjdXJyZW50IHZlcnNpb24uCisJICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmc6JHtjdXJyZW50fS4wIgorCSAgOzsKKworCXFueCkKKwkgIG1ham9yPSIuJGN1cnJlbnQiCisJICB2ZXJzdWZmaXg9Ii4kY3VycmVudCIKKwkgIDs7CisKKwlzdW5vcykKKwkgIG1ham9yPSIuJGN1cnJlbnQiCisJICB2ZXJzdWZmaXg9Ii4kY3VycmVudC4kcmV2aXNpb24iCisJICA7OworCisJd2luZG93cykKKwkgICMgVXNlICctJyByYXRoZXIgdGhhbiAnLicsIHNpbmNlIHdlIG9ubHkgd2FudCBvbmUKKwkgICMgZXh0ZW5zaW9uIG9uIERPUyA4LjMgZmlsZXN5c3RlbXMuCisJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCSAgbWFqb3I9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICB2ZXJzdWZmaXg9Ii0kbWFqb3IiCisJICA7OworCisJKikKKwkgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAidW5rbm93biBsaWJyYXJ5IHZlcnNpb24gdHlwZSBcYCR2ZXJzaW9uX3R5cGUnIgorCSAgOzsKKwllc2FjCisKKwkjIENsZWFyIHRoZSB2ZXJzaW9uIGluZm8gaWYgd2UgZGVmYXVsdGVkLCBhbmQgdGhleSBzcGVjaWZpZWQgYSByZWxlYXNlLgorCWlmIHRlc3QgLXogIiR2aW5mbyIgJiYgdGVzdCAtbiAiJHJlbGVhc2UiOyB0aGVuCisJICBtYWpvcj0KKwkgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorCSAgZGFyd2luKQorCSAgICAjIHdlIGNhbid0IGNoZWNrIGZvciAiMC4wIiBpbiBhcmNoaXZlX2NtZHMgZHVlIHRvIHF1b3RpbmcKKwkgICAgIyBwcm9ibGVtcywgc28gd2UgcmVzZXQgaXQgY29tcGxldGVseQorCSAgICB2ZXJzdHJpbmc9CisJICAgIDs7CisJICAqKQorCSAgICB2ZXJzdHJpbmc9IjAuMCIKKwkgICAgOzsKKwkgIGVzYWMKKwkgIGlmIHRlc3QgIiRuZWVkX3ZlcnNpb24iID0gbm87IHRoZW4KKwkgICAgdmVyc3VmZml4PQorCSAgZWxzZQorCSAgICB2ZXJzdWZmaXg9Ii4wLjAiCisJICBmaQorCWZpCisKKwkjIFJlbW92ZSB2ZXJzaW9uIGluZm8gZnJvbSBuYW1lIGlmIHZlcnNpb25pbmcgc2hvdWxkIGJlIGF2b2lkZWQKKwlpZiB0ZXN0ICIkYXZvaWRfdmVyc2lvbiIgPSB5ZXMgJiYgdGVzdCAiJG5lZWRfdmVyc2lvbiIgPSBubzsgdGhlbgorCSAgbWFqb3I9CisJICB2ZXJzdWZmaXg9CisJICB2ZXJzdHJpbmc9IiIKKwlmaQorCisJIyBDaGVjayB0byBzZWUgaWYgdGhlIGFyY2hpdmUgd2lsbCBoYXZlIHVuZGVmaW5lZCBzeW1ib2xzLgorCWlmIHRlc3QgIiRhbGxvd191bmRlZmluZWQiID0geWVzOyB0aGVuCisJICBpZiB0ZXN0ICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWciID0gdW5zdXBwb3J0ZWQ7IHRoZW4KKwkgICAgZnVuY193YXJuaW5nICJ1bmRlZmluZWQgc3ltYm9scyBub3QgYWxsb3dlZCBpbiAkaG9zdCBzaGFyZWQgbGlicmFyaWVzIgorCSAgICBidWlsZF9saWJ0b29sX2xpYnM9bm8KKwkgICAgYnVpbGRfb2xkX2xpYnM9eWVzCisJICBmaQorCWVsc2UKKwkgICMgRG9uJ3QgYWxsb3cgdW5kZWZpbmVkIHN5bWJvbHMuCisJICBhbGxvd191bmRlZmluZWRfZmxhZz0iJG5vX3VuZGVmaW5lZF9mbGFnIgorCWZpCisKKyAgICAgIGZpCisKKyAgICAgIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zICIkbGlibmFtZSIgIiRsaWJuYW1lIiAieWVzIgorICAgICAgbGlib2Jqcz0iJGxpYm9ianMgJHN5bWZpbGVvYmoiCisgICAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCisgICAgICBpZiB0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisJIyBSZW1vdmUgb3VyIG91dHB1dHMsIGJ1dCBkb24ndCByZW1vdmUgb2JqZWN0IGZpbGVzIHNpbmNlIHRoZXkKKwkjIG1heSBoYXZlIGJlZW4gY3JlYXRlZCB3aGVuIGNvbXBpbGluZyBQSUMgb2JqZWN0cy4KKwlyZW1vdmVsaXN0PQorCXRlbXByZW1vdmVsaXN0PWAkRUNITyAiJG91dHB1dF9vYmpkaXIvKiJgCisJZm9yIHAgaW4gJHRlbXByZW1vdmVsaXN0OyBkbworCSAgY2FzZSAkcCBpbgorCSAgICAqLiRvYmpleHQgfCAqLmdjbm8pCisJICAgICAgIDs7CisJICAgICRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIHwgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuKiB8ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0ke3JlbGVhc2V9LiopCisJICAgICAgIGlmIHRlc3QgIlgkcHJlY2lvdXNfZmlsZXNfcmVnZXgiICE9ICJYIjsgdGhlbgorCQkgaWYgJEVDSE8gIiRwIiB8ICRFR1JFUCAtZSAiJHByZWNpb3VzX2ZpbGVzX3JlZ2V4IiA+L2Rldi9udWxsIDI+JjEKKwkJIHRoZW4KKwkJICAgY29udGludWUKKwkJIGZpCisJICAgICAgIGZpCisJICAgICAgIHJlbW92ZWxpc3Q9IiRyZW1vdmVsaXN0ICRwIgorCSAgICAgICA7OworCSAgICAqKSA7OworCSAgZXNhYworCWRvbmUKKwl0ZXN0IC1uICIkcmVtb3ZlbGlzdCIgJiYgXAorCSAgZnVuY19zaG93X2V2YWwgIiR7Uk19ciBcJHJlbW92ZWxpc3QiCisgICAgICBmaQorCisgICAgICAjIE5vdyBzZXQgdGhlIHZhcmlhYmxlcyBmb3IgYnVpbGRpbmcgb2xkIGxpYnJhcmllcy4KKyAgICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0gY29udmVuaWVuY2UgOyB0aGVuCisJb2xkbGlicz0iJG9sZGxpYnMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKKworCSMgVHJhbnNmb3JtIC5sbyBmaWxlcyB0byAubyBmaWxlcy4KKwlvbGRvYmpzPSIkb2JqcyAiYCRFQ0hPICJYJGxpYm9ianMiIHwgJFNQMk5MIHwgJFhzZWQgLWUgJy9cLicke2xpYmV4dH0nJC9kJyAtZSAiJGxvMm8iIHwgJE5MMlNQYAorICAgICAgZmkKKworICAgICAgIyBFbGltaW5hdGUgYWxsIHRlbXBvcmFyeSBkaXJlY3Rvcmllcy4KKyAgICAgICNmb3IgcGF0aCBpbiAkbm90aW5zdF9wYXRoOyBkbworICAgICAgIwlsaWJfc2VhcmNoX3BhdGg9YCRFQ0hPICJYJGxpYl9zZWFyY2hfcGF0aCAiIHwgJFhzZWQgLWUgInMlICRwYXRoICUgJWciYAorICAgICAgIwlkZXBsaWJzPWAkRUNITyAiWCRkZXBsaWJzICIgfCAkWHNlZCAtZSAicyUgLUwkcGF0aCAlICVnImAKKyAgICAgICMJZGVwZW5kZW5jeV9saWJzPWAkRUNITyAiWCRkZXBlbmRlbmN5X2xpYnMgIiB8ICRYc2VkIC1lICJzJSAtTCRwYXRoICUgJWciYAorICAgICAgI2RvbmUKKworICAgICAgaWYgdGVzdCAtbiAiJHhycGF0aCI7IHRoZW4KKwkjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBhbnkgcnBhdGggZmxhZ3MsIHRoZW4gYWRkIHRoZW0uCisJdGVtcF94cnBhdGg9CisJZm9yIGxpYmRpciBpbiAkeHJwYXRoOyBkbworCSAgdGVtcF94cnBhdGg9IiR0ZW1wX3hycGF0aCAtUiRsaWJkaXIiCisJICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZpbmFsaXplX3JwYXRoPSIkZmluYWxpemVfcnBhdGggJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlkb25lCisJaWYgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgIT0geWVzIHx8IHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKwkgIGRlcGVuZGVuY3lfbGlicz0iJHRlbXBfeHJwYXRoICRkZXBlbmRlbmN5X2xpYnMiCisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgTWFrZSBzdXJlIGRsZmlsZXMgY29udGFpbnMgb25seSB1bmlxdWUgZmlsZXMgdGhhdCB3b24ndCBiZSBkbHByZW9wZW5lZAorICAgICAgb2xkX2RsZmlsZXM9IiRkbGZpbGVzIgorICAgICAgZGxmaWxlcz0KKyAgICAgIGZvciBsaWIgaW4gJG9sZF9kbGZpbGVzOyBkbworCWNhc2UgIiAkZGxwcmVmaWxlcyAkZGxmaWxlcyAiIGluCisJKiIgJGxpYiAiKikgOzsKKwkqKSBkbGZpbGVzPSIkZGxmaWxlcyAkbGliIiA7OworCWVzYWMKKyAgICAgIGRvbmUKKworICAgICAgIyBNYWtlIHN1cmUgZGxwcmVmaWxlcyBjb250YWlucyBvbmx5IHVuaXF1ZSBmaWxlcworICAgICAgb2xkX2RscHJlZmlsZXM9IiRkbHByZWZpbGVzIgorICAgICAgZGxwcmVmaWxlcz0KKyAgICAgIGZvciBsaWIgaW4gJG9sZF9kbHByZWZpbGVzOyBkbworCWNhc2UgIiRkbHByZWZpbGVzICIgaW4KKwkqIiAkbGliICIqKSA7OworCSopIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRsaWIiIDs7CisJZXNhYworICAgICAgZG9uZQorCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorCWlmIHRlc3QgLW4gIiRycGF0aCI7IHRoZW4KKwkgIGNhc2UgJGhvc3QgaW4KKwkgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi0qLWJlb3MqIHwgKi1jZWdjYyopCisJICAgICMgdGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgYyBsaWJyYXJ5IChhcyBzdWNoKSEKKwkgICAgOzsKKwkgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkgICAgIyBSaGFwc29keSBDIGxpYnJhcnkgaXMgaW4gdGhlIFN5c3RlbSBmcmFtZXdvcmsKKwkgICAgZGVwbGlicz0iJGRlcGxpYnMgU3lzdGVtLmx0ZnJhbWV3b3JrIgorCSAgICA7OworCSAgKi0qLW5ldGJzZCopCisJICAgICMgRG9uJ3QgbGluayB3aXRoIGxpYmMgdW50aWwgdGhlIGEub3V0IGxkLnNvIGlzIGZpeGVkLgorCSAgICA7OworCSAgKi0qLW9wZW5ic2QqIHwgKi0qLWZyZWVic2QqIHwgKi0qLWRyYWdvbmZseSopCisJICAgICMgRG8gbm90IGluY2x1ZGUgbGliYyBkdWUgdG8gdXMgaGF2aW5nIGxpYmMvbGliY19yLgorCSAgICA7OworCSAgKi0qLXNjbzMuMnY1KiB8ICotKi1zY281djYqKQorCSAgICAjIENhdXNlcyBwcm9ibGVtcyB3aXRoIF9fY3R5cGUKKwkgICAgOzsKKwkgICotKi1zeXN2NC4ydXcyKiB8ICotKi1zeXN2NSogfCAqLSotdW5peHdhcmUqIHwgKi0qLU9wZW5VTklYKikKKwkgICAgIyBDb21waWxlciBpbnNlcnRzIGxpYmMgaW4gdGhlIGNvcnJlY3QgcGxhY2UgZm9yIHRocmVhZHMgdG8gd29yaworCSAgICA7OworCSAgKikKKwkgICAgIyBBZGQgbGliYyB0byBkZXBsaWJzIG9uIGFsbCBvdGhlciBzeXN0ZW1zIGlmIG5lY2Vzc2FyeS4KKwkgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbmVlZF9sYyIgPSAieWVzIjsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWJzIC1sYyIKKwkgICAgZmkKKwkgICAgOzsKKwkgIGVzYWMKKwlmaQorCisJIyBUcmFuc2Zvcm0gZGVwbGlicyBpbnRvIG9ubHkgZGVwbGlicyB0aGF0IGNhbiBiZSBsaW5rZWQgaW4gc2hhcmVkLgorCW5hbWVfc2F2ZT0kbmFtZQorCWxpYm5hbWVfc2F2ZT0kbGlibmFtZQorCXJlbGVhc2Vfc2F2ZT0kcmVsZWFzZQorCXZlcnN1ZmZpeF9zYXZlPSR2ZXJzdWZmaXgKKwltYWpvcl9zYXZlPSRtYWpvcgorCSMgSSdtIG5vdCBzdXJlIGlmIEknbSB0cmVhdGluZyB0aGUgcmVsZWFzZSBjb3JyZWN0bHkuICBJIHRoaW5rCisJIyByZWxlYXNlIHNob3VsZCBzaG93IHVwIGluIHRoZSAtbCAoaWUgLWxnbXA1KSBzbyB3ZSBkb24ndCB3YW50IHRvCisJIyBhZGQgaXQgaW4gdHdpY2UuICBJcyB0aGF0IGNvcnJlY3Q/CisJcmVsZWFzZT0iIgorCXZlcnN1ZmZpeD0iIgorCW1ham9yPSIiCisJbmV3ZGVwbGlicz0KKwlkcm9wcGVkZGVwcz1ubworCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisJcGFzc19hbGwpCisJICAjIERvbid0IGNoZWNrIGZvciBzaGFyZWQvc3RhdGljLiAgRXZlcnl0aGluZyB3b3Jrcy4KKwkgICMgVGhpcyBtaWdodCBiZSBhIGxpdHRsZSBuYWl2ZS4gIFdlIG1pZ2h0IHdhbnQgdG8gY2hlY2sKKwkgICMgd2hldGhlciB0aGUgbGlicmFyeSBleGlzdHMgb3Igbm90LiAgQnV0IHRoaXMgaXMgb24KKwkgICMgb3NmMyAmIG9zZjQgYW5kIEknbSBub3QgcmVhbGx5IHN1cmUuLi4gSnVzdAorCSAgIyBpbXBsZW1lbnRpbmcgd2hhdCB3YXMgYWxyZWFkeSB0aGUgYmVoYXZpb3IuCisJICBuZXdkZXBsaWJzPSRkZXBsaWJzCisJICA7OworCXRlc3RfY29tcGlsZSkKKwkgICMgVGhpcyBjb2RlIHN0cmVzc2VzIHRoZSAibGlicmFyaWVzIGFyZSBwcm9ncmFtcyIgcGFyYWRpZ20gdG8gaXRzCisJICAjIGxpbWl0cy4gTWF5YmUgZXZlbiBicmVha3MgaXQuICBXZSBjb21waWxlIGEgcHJvZ3JhbSwgbGlua2luZyBpdAorCSAgIyBhZ2FpbnN0IHRoZSBkZXBsaWJzIGFzIGEgcHJveHkgZm9yIHRoZSBsaWJyYXJ5LiAgVGhlbiB3ZSBjYW4gY2hlY2sKKwkgICMgd2hldGhlciB0aGV5IGxpbmtlZCBpbiBzdGF0aWNhbGx5IG9yIGR5bmFtaWNhbGx5IHdpdGggbGRkLgorCSAgJG9wdF9kcnlfcnVuIHx8ICRSTSBjb25mdGVzdC5jCisJICBjYXQgPiBjb25mdGVzdC5jIDw8RU9GCisJICBpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0KK0VPRgorCSAgJG9wdF9kcnlfcnVuIHx8ICRSTSBjb25mdGVzdAorCSAgaWYgJExUQ0MgJExUQ0ZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgJGRlcGxpYnM7IHRoZW4KKwkgICAgbGRkX291dHB1dD1gbGRkIGNvbmZ0ZXN0YAorCSAgICBmb3IgaSBpbiAkZGVwbGliczsgZG8KKwkgICAgICBjYXNlICRpIGluCisJICAgICAgLWwqKQorCQlmdW5jX3N0cmlwbmFtZSAtbCAnJyAiJGkiCisJCW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCQlpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJCSAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJCSAgKiIgJGkgIiopCisJCSAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKwkJICAgIGk9IiIKKwkJICAgIDs7CisJCSAgZXNhYworCQlmaQorCQlpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCisJCSAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJCSAgZGVwbGliX21hdGNoZXM9YGV2YWwgIlxcJEVDSE8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCIiYAorCQkgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXM7IHNoaWZ0CisJCSAgZGVwbGliX21hdGNoPSQxCisJCSAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwIDsgdGhlbgorCQkgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJCSAgZWxzZQorCQkgICAgZHJvcHBlZGRlcHM9eWVzCisJCSAgICAkRUNITworCQkgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBkeW5hbWljIGxpbmtlciBkb2VzIG5vdCBhY2NlcHQgbmVlZGVkIGxpYnJhcnkgJGkuIgorCQkgICAgJEVDSE8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCSAgICAkRUNITyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJICAgICRFQ0hPICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIEkgYmVsaWV2ZSB5b3UgZG8gbm90IGhhdmUiCisJCSAgICAkRUNITyAiKioqIGJlY2F1c2UgYSB0ZXN0X2NvbXBpbGUgZGlkIHJldmVhbCB0aGF0IHRoZSBsaW5rZXIgZGlkIG5vdCB1c2UgaXQgZm9yIgorCQkgICAgJEVDSE8gIioqKiBpdHMgZHluYW1pYyBkZXBlbmRlbmN5IGxpc3QgdGhhdCBwcm9ncmFtcyBnZXQgcmVzb2x2ZWQgd2l0aCBhdCBydW50aW1lLiIKKwkJICBmaQorCQlmaQorCQk7OworCSAgICAgICopCisJCW5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgZWxzZQorCSAgICAjIEVycm9yIG9jY3VycmVkIGluIHRoZSBmaXJzdCBjb21waWxlLiAgTGV0J3MgdHJ5IHRvIHNhbHZhZ2UKKwkgICAgIyB0aGUgc2l0dWF0aW9uOiBDb21waWxlIGEgc2VwYXJhdGUgcHJvZ3JhbSBmb3IgZWFjaCBsaWJyYXJ5LgorCSAgICBmb3IgaSBpbiAkZGVwbGliczsgZG8KKwkgICAgICBjYXNlICRpIGluCisJICAgICAgLWwqKQorCQlmdW5jX3N0cmlwbmFtZSAtbCAnJyAiJGkiCisJCW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCQkkb3B0X2RyeV9ydW4gfHwgJFJNIGNvbmZ0ZXN0CisJCWlmICRMVENDICRMVENGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jICRpOyB0aGVuCisJCSAgbGRkX291dHB1dD1gbGRkIGNvbmZ0ZXN0YAorCQkgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkJICAgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCQkgICAgKiIgJGkgIiopCisJCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorCQkgICAgICBpPSIiCisJCSAgICAgIDs7CisJCSAgICBlc2FjCisJCSAgZmkKKwkJICBpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCisJCSAgICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkJICAgIGRlcGxpYl9tYXRjaGVzPWBldmFsICJcXCRFQ0hPIFwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiImAKKwkJICAgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXM7IHNoaWZ0CisJCSAgICBkZXBsaWJfbWF0Y2g9JDEKKwkJICAgIGlmIHRlc3QgYGV4cHIgIiRsZGRfb3V0cHV0IiA6ICIuKiRkZXBsaWJfbWF0Y2giYCAtbmUgMCA7IHRoZW4KKwkJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJCSAgICBlbHNlCisJCSAgICAgIGRyb3BwZWRkZXBzPXllcworCQkgICAgICAkRUNITworCQkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IGR5bmFtaWMgbGlua2VyIGRvZXMgbm90IGFjY2VwdCBuZWVkZWQgbGlicmFyeSAkaS4iCisJCSAgICAgICRFQ0hPICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQkgICAgICAkRUNITyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJICAgICAgJEVDSE8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJICAgICAgJEVDSE8gIioqKiBiZWNhdXNlIGEgdGVzdF9jb21waWxlIGRpZCByZXZlYWwgdGhhdCB0aGUgbGlua2VyIGRpZCBub3QgdXNlIHRoaXMgb25lIgorCQkgICAgICAkRUNITyAiKioqIGFzIGEgZHluYW1pYyBkZXBlbmRlbmN5IHRoYXQgcHJvZ3JhbXMgY2FuIGdldCByZXNvbHZlZCB3aXRoIGF0IHJ1bnRpbWUuIgorCQkgICAgZmkKKwkJICBmaQorCQllbHNlCisJCSAgZHJvcHBlZGRlcHM9eWVzCisJCSAgJEVDSE8KKwkJICAkRUNITyAiKioqIFdhcm5pbmchICBMaWJyYXJ5ICRpIGlzIG5lZWRlZCBieSB0aGlzIGxpYnJhcnkgYnV0IEkgd2FzIG5vdCBhYmxlIHRvIgorCQkgICRFQ0hPICIqKiogbWFrZSBpdCBsaW5rIGluISAgWW91IHdpbGwgcHJvYmFibHkgbmVlZCB0byBpbnN0YWxsIGl0IG9yIHNvbWUiCisJCSAgJEVDSE8gIioqKiBsaWJyYXJ5IHRoYXQgaXQgZGVwZW5kcyBvbiBiZWZvcmUgdGhpcyBsaWJyYXJ5IHdpbGwgYmUgZnVsbHkiCisJCSAgJEVDSE8gIioqKiBmdW5jdGlvbmFsLiAgSW5zdGFsbGluZyBpdCBiZWZvcmUgY29udGludWluZyB3b3VsZCBiZSBldmVuIGJldHRlci4iCisJCWZpCisJCTs7CisJICAgICAgKikKKwkJbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJCTs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICBmaQorCSAgOzsKKwlmaWxlX21hZ2ljKikKKwkgIHNldCBkdW1teSAkZGVwbGlic19jaGVja19tZXRob2Q7IHNoaWZ0CisJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCisJICBmb3IgYV9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJICAgIGNhc2UgJGFfZGVwbGliIGluCisJICAgIC1sKikKKwkgICAgICBmdW5jX3N0cmlwbmFtZSAtbCAnJyAiJGFfZGVwbGliIgorCSAgICAgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICAgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkJY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJCSoiICRhX2RlcGxpYiAiKikKKwkJICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisJCSAgYV9kZXBsaWI9IiIKKwkJICA7OworCQllc2FjCisJICAgICAgZmkKKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorCQlsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCisJCSAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lWy4tXSogMj4vZGV2L251bGxgCisJCSAgZm9yIHBvdGVudF9saWIgaW4gJHBvdGVudGlhbF9saWJzOyBkbworCQkgICAgICAjIEZvbGxvdyBzb2Z0IGxpbmtzLgorCQkgICAgICBpZiBscyAtbExkICIkcG90ZW50X2xpYiIgMj4vZGV2L251bGwgfAorCQkJICRHUkVQICIgLT4gIiA+L2Rldi9udWxsOyB0aGVuCisJCQljb250aW51ZQorCQkgICAgICBmaQorCQkgICAgICAjIFRoZSBzdGF0ZW1lbnQgYWJvdmUgdHJpZXMgdG8gYXZvaWQgZW50ZXJpbmcgYW4KKwkJICAgICAgIyBlbmRsZXNzIGxvb3AgYmVsb3csIGluIGNhc2Ugb2YgY3ljbGljIGxpbmtzLgorCQkgICAgICAjIFdlIG1pZ2h0IHN0aWxsIGVudGVyIGFuIGVuZGxlc3MgbG9vcCwgc2luY2UgYSBsaW5rCisJCSAgICAgICMgbG9vcCBjYW4gYmUgY2xvc2VkIHdoaWxlIHdlIGZvbGxvdyBsaW5rcywKKwkJICAgICAgIyBidXQgc28gd2hhdD8KKwkJICAgICAgcG90bGliPSIkcG90ZW50X2xpYiIKKwkJICAgICAgd2hpbGUgdGVzdCAtaCAiJHBvdGxpYiIgMj4vZGV2L251bGw7IGRvCisJCQlwb3RsaWJsaW5rPWBscyAtbGQgJHBvdGxpYiB8ICR7U0VEfSAncy8uKiAtPiAvLydgCisJCQljYXNlICRwb3RsaWJsaW5rIGluCisJCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIHBvdGxpYj0iJHBvdGxpYmxpbmsiOzsKKwkJCSopIHBvdGxpYj1gJEVDSE8gIlgkcG90bGliIiB8ICRYc2VkIC1lICdzLFteL10qJCwsJ2AiJHBvdGxpYmxpbmsiOzsKKwkJCWVzYWMKKwkJICAgICAgZG9uZQorCQkgICAgICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcIlwkcG90bGliXCIgMj4vZGV2L251bGwgfAorCQkJICRTRUQgLWUgMTBxIHwKKwkJCSAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCQkJbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCQkJYV9kZXBsaWI9IiIKKwkJCWJyZWFrIDIKKwkJICAgICAgZmkKKwkJICBkb25lCisJCWRvbmUKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCisJCWRyb3BwZWRkZXBzPXllcworCQkkRUNITworCQkkRUNITyAiKioqIFdhcm5pbmc6IGxpbmtlciBwYXRoIGRvZXMgbm90IGhhdmUgcmVhbCBmaWxlIGZvciBsaWJyYXJ5ICRhX2RlcGxpYi4iCisJCSRFQ0hPICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQkkRUNITyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJJEVDSE8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJJEVDSE8gIioqKiBiZWNhdXNlIEkgZGlkIGNoZWNrIHRoZSBsaW5rZXIgcGF0aCBsb29raW5nIGZvciBhIGZpbGUgc3RhcnRpbmciCisJCWlmIHRlc3QgLXogIiRwb3RsaWIiIDsgdGhlbgorCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBidXQgbm8gY2FuZGlkYXRlcyB3ZXJlIGZvdW5kLiAoLi4uZm9yIGZpbGUgbWFnaWMgdGVzdCkiCisJCWVsc2UKKwkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYW5kIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgcGFzc2VkIGEgZmlsZSBmb3JtYXQgdGVzdCIKKwkJICAkRUNITyAiKioqIHVzaW5nIGEgZmlsZSBtYWdpYy4gTGFzdCBmaWxlIGNoZWNrZWQ6ICRwb3RsaWIiCisJCWZpCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICAqKQorCSAgICAgICMgQWRkIGEgLUwgYXJndW1lbnQuCisJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGRvbmUgIyBHb25lIHRocm91Z2ggYWxsIGRlcGxpYnMuCisJICA7OworCW1hdGNoX3BhdHRlcm4qKQorCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKKwkgIG1hdGNoX3BhdHRlcm5fcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiJDEgXCguKlwpImAKKwkgIGZvciBhX2RlcGxpYiBpbiAkZGVwbGliczsgZG8KKwkgICAgY2FzZSAkYV9kZXBsaWIgaW4KKwkgICAgLWwqKQorCSAgICAgIGZ1bmNfc3RyaXBuYW1lIC1sICcnICIkYV9kZXBsaWIiCisJICAgICAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCQljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkJKiIgJGFfZGVwbGliICIqKQorCQkgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKwkJICBhX2RlcGxpYj0iIgorCQkgIDs7CisJCWVzYWMKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCisJCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KKwkJICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVbLi1dKiAyPi9kZXYvbnVsbGAKKwkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCisJCSAgICBwb3RsaWI9IiRwb3RlbnRfbGliIiAjIHNlZSBzeW1saW5rLWNoZWNrIGFib3ZlIGluIGZpbGVfbWFnaWMgdGVzdAorCQkgICAgaWYgZXZhbCAiXCRFQ0hPIFwiWCRwb3RlbnRfbGliXCIiIDI+L2Rldi9udWxsIHwgJFhzZWQgLWUgMTBxIHwgXAorCQkgICAgICAgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCQkgICAgICBhX2RlcGxpYj0iIgorCQkgICAgICBicmVhayAyCisJCSAgICBmaQorCQkgIGRvbmUKKwkJZG9uZQorCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKwkJZHJvcHBlZGRlcHM9eWVzCisJCSRFQ0hPCisJCSRFQ0hPICIqKiogV2FybmluZzogbGlua2VyIHBhdGggZG9lcyBub3QgaGF2ZSByZWFsIGZpbGUgZm9yIGxpYnJhcnkgJGFfZGVwbGliLiIKKwkJJEVDSE8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCSRFQ0hPICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCQkkRUNITyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCQkkRUNITyAiKioqIGJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKKwkJaWYgdGVzdCAteiAiJHBvdGxpYiIgOyB0aGVuCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgcmVnZXggcGF0dGVybiB0ZXN0KSIKKwkJZWxzZQorCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBhbmQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBwYXNzZWQgYSBmaWxlIGZvcm1hdCB0ZXN0IgorCQkgICRFQ0hPICIqKiogdXNpbmcgYSByZWdleCBwYXR0ZXJuLiBMYXN0IGZpbGUgY2hlY2tlZDogJHBvdGxpYiIKKwkJZmkKKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgICopCisJICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KKwkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZG9uZSAjIEdvbmUgdGhyb3VnaCBhbGwgZGVwbGlicy4KKwkgIDs7CisJbm9uZSB8IHVua25vd24gfCAqKQorCSAgbmV3ZGVwbGlicz0iIgorCSAgdG1wX2RlcGxpYnM9YCRFQ0hPICJYICRkZXBsaWJzIiB8ICRYc2VkIFwKKwkgICAgICAtZSAncy8gLWxjJC8vJyAtZSAncy8gLVtMUl1bXiBdKi8vZydgCisJICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJICAgIGZvciBpIGluICRwcmVkZXBzICRwb3N0ZGVwcyA7IGRvCisJICAgICAgIyBjYW4ndCB1c2UgWHNlZCBiZWxvdywgYmVjYXVzZSAkaSBtaWdodCBjb250YWluICcvJworCSAgICAgIHRtcF9kZXBsaWJzPWAkRUNITyAiWCAkdG1wX2RlcGxpYnMiIHwgJFhzZWQgLWUgInMsJGksLCJgCisJICAgIGRvbmUKKwkgIGZpCisJICBpZiAkRUNITyAiWCAkdG1wX2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MvWwkgXS8vZycgfAorCSAgICAgJEdSRVAgLiA+L2Rldi9udWxsOyB0aGVuCisJICAgICRFQ0hPCisJICAgIGlmIHRlc3QgIlgkZGVwbGlic19jaGVja19tZXRob2QiID0gIlhub25lIjsgdGhlbgorCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBwbGF0Zm9ybS4iCisJICAgIGVsc2UKKwkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBub3Qga25vd24gdG8gYmUgc3VwcG9ydGVkLiIKKwkgICAgZmkKKwkgICAgJEVDSE8gIioqKiBBbGwgZGVjbGFyZWQgaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIGJlaW5nIGRyb3BwZWQuIgorCSAgICBkcm9wcGVkZGVwcz15ZXMKKwkgIGZpCisJICA7OworCWVzYWMKKwl2ZXJzdWZmaXg9JHZlcnN1ZmZpeF9zYXZlCisJbWFqb3I9JG1ham9yX3NhdmUKKwlyZWxlYXNlPSRyZWxlYXNlX3NhdmUKKwlsaWJuYW1lPSRsaWJuYW1lX3NhdmUKKwluYW1lPSRuYW1lX3NhdmUKKworCWNhc2UgJGhvc3QgaW4KKwkqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCisJICAjIE9uIFJoYXBzb2R5IHJlcGxhY2UgdGhlIEMgbGlicmFyeSB3aXRoIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCisJICBuZXdkZXBsaWJzPWAkRUNITyAiWCAkbmV3ZGVwbGlicyIgfCAkWHNlZCAtZSAncy8gLWxjIC8gU3lzdGVtLmx0ZnJhbWV3b3JrIC8nYAorCSAgOzsKKwllc2FjCisKKwlpZiB0ZXN0ICIkZHJvcHBlZGRlcHMiID0geWVzOyB0aGVuCisJICBpZiB0ZXN0ICIkbW9kdWxlIiA9IHllczsgdGhlbgorCSAgICAkRUNITworCSAgICAkRUNITyAiKioqIFdhcm5pbmc6IGxpYnRvb2wgY291bGQgbm90IHNhdGlzZnkgYWxsIGRlY2xhcmVkIGludGVyLWxpYnJhcnkiCisJICAgICRFQ0hPICIqKiogZGVwZW5kZW5jaWVzIG9mIG1vZHVsZSAkbGlibmFtZS4gIFRoZXJlZm9yZSwgbGlidG9vbCB3aWxsIGNyZWF0ZSIKKwkgICAgJEVDSE8gIioqKiBhIHN0YXRpYyBtb2R1bGUsIHRoYXQgc2hvdWxkIHdvcmsgYXMgbG9uZyBhcyB0aGUgZGxvcGVuaW5nIgorCSAgICAkRUNITyAiKioqIGFwcGxpY2F0aW9uIGlzIGxpbmtlZCB3aXRoIHRoZSAtZGxvcGVuIGZsYWcuIgorCSAgICBpZiB0ZXN0IC16ICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorCSAgICAgICRFQ0hPCisJICAgICAgJEVDSE8gIioqKiBIb3dldmVyLCB0aGlzIHdvdWxkIG9ubHkgd29yayBpZiBsaWJ0b29sIHdhcyBhYmxlIHRvIGV4dHJhY3Qgc3ltYm9sIgorCSAgICAgICRFQ0hPICIqKiogbGlzdHMgZnJvbSBhIHByb2dyYW0sIHVzaW5nIFxgbm0nIG9yIGVxdWl2YWxlbnQsIGJ1dCBsaWJ0b29sIGNvdWxkIgorCSAgICAgICRFQ0hPICIqKiogbm90IGZpbmQgc3VjaCBhIHByb2dyYW0uICBTbywgdGhpcyBtb2R1bGUgaXMgcHJvYmFibHkgdXNlbGVzcy4iCisJICAgICAgJEVDSE8gIioqKiBcYG5tJyBmcm9tIEdOVSBiaW51dGlscyBhbmQgYSBmdWxsIHJlYnVpbGQgbWF5IGhlbHAuIgorCSAgICBmaQorCSAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0gbm87IHRoZW4KKwkgICAgICBvbGRsaWJzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgorCSAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1tb2R1bGUKKwkgICAgICBidWlsZF9vbGRfbGlicz15ZXMKKwkgICAgZWxzZQorCSAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICBmaQorCSAgZWxzZQorCSAgICAkRUNITyAiKioqIFRoZSBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyB0aGF0IGhhdmUgYmVlbiBkcm9wcGVkIGhlcmUgd2lsbCBiZSIKKwkgICAgJEVDSE8gIioqKiBhdXRvbWF0aWNhbGx5IGFkZGVkIHdoZW5ldmVyIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCB0aGlzIGxpYnJhcnkiCisJICAgICRFQ0hPICIqKiogb3IgaXMgZGVjbGFyZWQgdG8gLWRsb3BlbiBpdC4iCisKKwkgICAgaWYgdGVzdCAiJGFsbG93X3VuZGVmaW5lZCIgPSBubzsgdGhlbgorCSAgICAgICRFQ0hPCisJICAgICAgJEVDSE8gIioqKiBTaW5jZSB0aGlzIGxpYnJhcnkgbXVzdCBub3QgY29udGFpbiB1bmRlZmluZWQgc3ltYm9scywiCisJICAgICAgJEVDSE8gIioqKiBiZWNhdXNlIGVpdGhlciB0aGUgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCB0aGVtIG9yIgorCSAgICAgICRFQ0hPICIqKiogaXQgd2FzIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHdpdGggLW5vLXVuZGVmaW5lZCwiCisJICAgICAgJEVDSE8gIioqKiBsaWJ0b29sIHdpbGwgb25seSBjcmVhdGUgYSBzdGF0aWMgdmVyc2lvbiBvZiBpdC4iCisJICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IG5vOyB0aGVuCisJCW9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCisJCWJ1aWxkX2xpYnRvb2xfbGlicz1tb2R1bGUKKwkJYnVpbGRfb2xkX2xpYnM9eWVzCisJICAgICAgZWxzZQorCQlidWlsZF9saWJ0b29sX2xpYnM9bm8KKwkgICAgICBmaQorCSAgICBmaQorCSAgZmkKKwlmaQorCSMgRG9uZSBjaGVja2luZyBkZXBsaWJzIQorCWRlcGxpYnM9JG5ld2RlcGxpYnMKKyAgICAgIGZpCisgICAgICAjIFRpbWUgdG8gY2hhbmdlIGFsbCBvdXIgImZvby5sdGZyYW1ld29yayIgc3R1ZmYgYmFjayB0byAiLWZyYW1ld29yayBmb28iCisgICAgICBjYXNlICRob3N0IGluCisJKi0qLWRhcndpbiopCisJICBuZXdkZXBsaWJzPWAkRUNITyAiWCAkbmV3ZGVwbGlicyIgfCAkWHNlZCAtZSAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwkgIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPWAkRUNITyAiWCAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MiIHwgJFhzZWQgLWUgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJICBkZXBsaWJzPWAkRUNITyAiWCAkZGVwbGlicyIgfCAkWHNlZCAtZSAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwkgIDs7CisgICAgICBlc2FjCisKKyAgICAgICMgbW92ZSBsaWJyYXJ5IHNlYXJjaCBwYXRocyB0aGF0IGNvaW5jaWRlIHdpdGggcGF0aHMgdG8gbm90IHlldAorICAgICAgIyBpbnN0YWxsZWQgbGlicmFyaWVzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpYnJhcnkgc2VhcmNoIGxpc3QKKyAgICAgIG5ld19saWJzPQorICAgICAgZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KKwljYXNlICIgJG5ld19saWJzICIgaW4KKwkqIiAtTCRwYXRoLyRvYmpkaXIgIiopIDs7CisJKikKKwkgIGNhc2UgIiAkZGVwbGlicyAiIGluCisJICAqIiAtTCRwYXRoLyRvYmpkaXIgIiopCisJICAgIG5ld19saWJzPSIkbmV3X2xpYnMgLUwkcGF0aC8kb2JqZGlyIiA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbworCWNhc2UgJGRlcGxpYiBpbgorCS1MKikKKwkgIGNhc2UgIiAkbmV3X2xpYnMgIiBpbgorCSAgKiIgJGRlcGxpYiAiKikgOzsKKwkgICopIG5ld19saWJzPSIkbmV3X2xpYnMgJGRlcGxpYiIgOzsKKwkgIGVzYWMKKwkgIDs7CisJKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGRlcGxpYnM9IiRuZXdfbGlicyIKKworICAgICAgIyBBbGwgdGhlIGxpYnJhcnktc3BlY2lmaWMgdmFyaWFibGVzIChpbnN0YWxsX2xpYmRpciBpcyBzZXQgYWJvdmUpLgorICAgICAgbGlicmFyeV9uYW1lcz0KKyAgICAgIG9sZF9saWJyYXJ5PQorICAgICAgZGxuYW1lPQorCisgICAgICAjIFRlc3QgYWdhaW4sIHdlIG1heSBoYXZlIGRlY2lkZWQgbm90IHRvIGJ1aWxkIGl0IGFueSBtb3JlCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorCWlmIHRlc3QgIiRoYXJkY29kZV9pbnRvX2xpYnMiID0geWVzOyB0aGVuCisJICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGhzCisJICBoYXJkY29kZV9saWJkaXJzPQorCSAgZGVwX3JwYXRoPQorCSAgcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCIKKwkgIHRlc3QgIiRtb2RlIiAhPSByZWxpbmsgJiYgcnBhdGg9IiRjb21waWxlX3JwYXRoJHJwYXRoIgorCSAgZm9yIGxpYmRpciBpbiAkcnBhdGg7IGRvCisJICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorCSAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorCQlpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwkJICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorCQllbHNlCisJCSAgIyBKdXN0IGFjY3VtdWxhdGUgdGhlIHVuaXF1ZSBsaWJkaXJzLgorCQkgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCisJCSAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQorCQkgICAgOzsKKwkJICAqKQorCQkgICAgaGFyZGNvZGVfbGliZGlycz0iJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisJCSAgICA7OworCQkgIGVzYWMKKwkJZmkKKwkgICAgICBlbHNlCisJCWV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKwkJZGVwX3JwYXRoPSIkZGVwX3JwYXRoICRmbGFnIgorCSAgICAgIGZpCisJICAgIGVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCSAgICAgIGNhc2UgIiRwZXJtX3JwYXRoICIgaW4KKwkgICAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAgICopIHBlcm1fcnBhdGg9IiRwZXJtX3JwYXRoICRsaWJkaXIiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgZG9uZQorCSAgIyBTdWJzdGl0dXRlIHRoZSBoYXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBycGF0aC4KKwkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgorCSAgICAgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJICAgIGxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCisJICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIjsgdGhlbgorCSAgICAgIGV2YWwgZGVwX3JwYXRoPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRcIgorCSAgICBlbHNlCisJICAgICAgZXZhbCBkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisJICAgIGZpCisJICBmaQorCSAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkcGVybV9ycGF0aCI7IHRoZW4KKwkgICAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKwkgICAgcnBhdGg9CisJICAgIGZvciBkaXIgaW4gJHBlcm1fcnBhdGg7IGRvCisJICAgICAgcnBhdGg9IiRycGF0aCRkaXI6IgorCSAgICBkb25lCisJICAgIGV2YWwgIiRydW5wYXRoX3Zhcj0nJHJwYXRoXCQkcnVucGF0aF92YXInOyBleHBvcnQgJHJ1bnBhdGhfdmFyIgorCSAgZmkKKwkgIHRlc3QgLW4gIiRkZXBfcnBhdGgiICYmIGRlcGxpYnM9IiRkZXBfcnBhdGggJGRlcGxpYnMiCisJZmkKKworCXNobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCIKKwl0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rICYmIHNobGlicGF0aD0iJGNvbXBpbGVfc2hsaWJwYXRoJHNobGlicGF0aCIKKwlpZiB0ZXN0IC1uICIkc2hsaWJwYXRoIjsgdGhlbgorCSAgZXZhbCAiJHNobGlicGF0aF92YXI9JyRzaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyJzsgZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgorCWZpCisKKwkjIEdldCB0aGUgcmVhbCBhbmQgbGluayBuYW1lcyBvZiB0aGUgbGlicmFyeS4KKwlldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgorCWV2YWwgbGlicmFyeV9uYW1lcz1cIiRsaWJyYXJ5X25hbWVzX3NwZWNcIgorCXNldCBkdW1teSAkbGlicmFyeV9uYW1lcworCXNoaWZ0CisJcmVhbG5hbWU9IiQxIgorCXNoaWZ0CisKKwlpZiB0ZXN0IC1uICIkc29uYW1lX3NwZWMiOyB0aGVuCisJICBldmFsIHNvbmFtZT1cIiRzb25hbWVfc3BlY1wiCisJZWxzZQorCSAgc29uYW1lPSIkcmVhbG5hbWUiCisJZmkKKwlpZiB0ZXN0IC16ICIkZGxuYW1lIjsgdGhlbgorCSAgZGxuYW1lPSRzb25hbWUKKwlmaQorCisJbGliPSIkb3V0cHV0X29iamRpci8kcmVhbG5hbWUiCisJbGlua25hbWVzPQorCWZvciBsaW5rCisJZG8KKwkgIGxpbmtuYW1lcz0iJGxpbmtuYW1lcyAkbGluayIKKwlkb25lCisKKwkjIFVzZSBzdGFuZGFyZCBvYmplY3RzIGlmIHRoZXkgYXJlIHBpYworCXRlc3QgLXogIiRwaWNfZmxhZyIgJiYgbGlib2Jqcz1gJEVDSE8gIlgkbGlib2JqcyIgfCAkU1AyTkwgfCAkWHNlZCAtZSAiJGxvMm8iIHwgJE5MMlNQYAorCXRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisKKwlkZWxmaWxlcz0KKwlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAkb3B0X2RyeV9ydW4gfHwgY3AgIiRleHBvcnRfc3ltYm9scyIgIiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnVleHAiCisJICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudWV4cCIKKwkgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJGV4cG9ydF9zeW1ib2xzIgorCWZpCisKKwlvcmlnX2V4cG9ydF9zeW1ib2xzPQorCWNhc2UgJGhvc3Rfb3MgaW4KKwljeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC16ICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisJICAgICMgZXhwb3J0aW5nIHVzaW5nIHVzZXIgc3VwcGxpZWQgc3ltZmlsZQorCSAgICBpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgIT0geEVYUE9SVFM7IHRoZW4KKwkgICAgICAjIGFuZCBpdCdzIE5PVCBhbHJlYWR5IGEgLmRlZiBmaWxlLiBNdXN0IGZpZ3VyZSBvdXQKKwkgICAgICAjIHdoaWNoIG9mIHRoZSBnaXZlbiBzeW1ib2xzIGFyZSBkYXRhIHN5bWJvbHMgYW5kIHRhZworCSAgICAgICMgdGhlbSBhcyBzdWNoLiBTbywgdHJpZ2dlciB1c2Ugb2YgZXhwb3J0X3N5bWJvbHNfY21kcy4KKwkgICAgICAjIGV4cG9ydF9zeW1ib2xzIGdldHMgcmVhc3NpZ25lZCBpbnNpZGUgdGhlICJwcmVwYXJlCisJICAgICAgIyB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzIiBpZiBzdGF0ZW1lbnQsIHNvIHRoZQorCSAgICAgICMgaW5jbHVkZV9leHBzeW1zIGxvZ2ljIHN0aWxsIHdvcmtzLgorCSAgICAgIG9yaWdfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKKwkgICAgICBleHBvcnRfc3ltYm9scz0KKwkgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCisJICAgIGZpCisJICBmaQorCSAgOzsKKwllc2FjCisKKwkjIFByZXBhcmUgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scworCWlmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9scyI7IHRoZW4KKwkgIGlmIHRlc3QgIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiID0geWVzIHx8IHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKwkgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyIKKwkgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmV4cCIKKwkgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkZXhwb3J0X3N5bWJvbHMKKwkgICAgY21kcz0kZXhwb3J0X3N5bWJvbHNfY21kcworCSAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwkgICAgZm9yIGNtZCBpbiAkY21kczsgZG8KKwkgICAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgICBldmFsIGNtZD1cIiRjbWRcIgorCSAgICAgIGZ1bmNfbGVuICIgJGNtZCIKKwkgICAgICBsZW49JGZ1bmNfbGVuX3Jlc3VsdAorCSAgICAgIGlmIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgorCQlmdW5jX3Nob3dfZXZhbCAiJGNtZCIgJ2V4aXQgJD8nCisJCXNraXBwZWRfZXhwb3J0PWZhbHNlCisJICAgICAgZWxzZQorCQkjIFRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gZXhlY3V0ZSBpbiBvbmUgc3RlcC4KKwkJZnVuY192ZXJib3NlICJ1c2luZyByZWxvYWRhYmxlIG9iamVjdCBmaWxlIGZvciBleHBvcnQgbGlzdC4uLiIKKwkJc2tpcHBlZF9leHBvcnQ9OgorCQkjIEJyZWFrIG91dCBlYXJseSwgb3RoZXJ3aXNlIHNraXBwZWRfZXhwb3J0IG1heSBiZQorCQkjIHNldCB0byBmYWxzZSBieSBhIGxhdGVyIGJ1dCBzaG9ydGVyIGNtZC4KKwkJYnJlYWsKKwkgICAgICBmaQorCSAgICBkb25lCisJICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICYmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiI7IHRoZW4KKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkZXhwb3J0X3N5bWJvbHMiID4gIiR7ZXhwb3J0X3N5bWJvbHN9VCInCisJICAgICAgZnVuY19zaG93X2V2YWwgJyRNViAiJHtleHBvcnRfc3ltYm9sc31UIiAiJGV4cG9ydF9zeW1ib2xzIicKKwkgICAgZmkKKwkgIGZpCisJZmkKKworCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgIHRtcF9leHBvcnRfc3ltYm9scz0iJGV4cG9ydF9zeW1ib2xzIgorCSAgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiICYmIHRtcF9leHBvcnRfc3ltYm9scz0iJG9yaWdfZXhwb3J0X3N5bWJvbHMiCisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnJEVDSE8gIlgkaW5jbHVkZV9leHBzeW1zIiB8ICRYc2VkIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIicKKwlmaQorCisJaWYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KKwkgICMgVGhlIGdpdmVuIGV4cG9ydHNfc3ltYm9scyBmaWxlIGhhcyB0byBiZSBmaWx0ZXJlZCwgc28gZmlsdGVyIGl0LgorCSAgZnVuY192ZXJib3NlICJmaWx0ZXIgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIHRvIHRhZyBEQVRBIGV4cG9ydHMiCisJICAjIEZJWE1FOiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgcG90ZW50aWFsbHkgY29udGFpbnMgbG90cyBvZgorCSAgIyAncycgY29tbWFuZHMgd2hpY2ggbm90IGFsbCBzZWRzIGNhbiBoYW5kbGUuIEdOVSBzZWQgc2hvdWxkIGJlIGZpbmUKKwkgICMgdGhvdWdoLiBBbHNvLCB0aGUgZmlsdGVyIHNjYWxlcyBzdXBlcmxpbmVhcmx5IHdpdGggdGhlIG51bWJlciBvZgorCSAgIyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9ydHVuYXRlbHkKKwkgICMgaXNuJ3QgYSBibGVzc2VkIHRvb2wuCisJICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZSAnL1sgLF1EQVRBLyFkO3MsXCguKlwpXChbIFwsXS4qXCksc3xeXDEkfFwxXDJ8LCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIKKwkgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKKwkgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZgorCSAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWYgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIDwgJG9yaWdfZXhwb3J0X3N5bWJvbHMgPiAkZXhwb3J0X3N5bWJvbHMKKwlmaQorCisJdG1wX2RlcGxpYnM9CisJZm9yIHRlc3RfZGVwbGliIGluICRkZXBsaWJzOyBkbworCSAgY2FzZSAiICRjb252ZW5pZW5jZSAiIGluCisJICAqIiAkdGVzdF9kZXBsaWIgIiopIDs7CisJICAqKQorCSAgICB0bXBfZGVwbGlicz0iJHRtcF9kZXBsaWJzICR0ZXN0X2RlcGxpYiIKKwkgICAgOzsKKwkgIGVzYWMKKwlkb25lCisJZGVwbGlicz0iJHRtcF9kZXBsaWJzIgorCisJaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIiAmJgorCSAgICB0ZXN0ICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiA9IHllcyAmJgorCSAgICB0ZXN0IC16ICIkbGlib2JqcyI7IHRoZW4KKwkgICAgIyBleHRyYWN0IHRoZSBhcmNoaXZlcywgc28gd2UgaGF2ZSBvYmplY3RzIHRvIGxpc3QuCisJICAgICMgVE9ETzogY291bGQgb3B0aW1pemUgdGhpcyB0byBqdXN0IGV4dHJhY3Qgb25lIGFyY2hpdmUuCisJICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorCSAgZmkKKwkgIGlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgICAgc2F2ZV9saWJvYmpzPSRsaWJvYmpzCisJICAgIGV2YWwgbGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgorCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCSAgZWxzZQorCSAgICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCSAgICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKworCSAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkY29udmVuaWVuY2UKKwkgICAgbGlib2Jqcz0iJGxpYm9ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisJICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisJICBmaQorCWZpCisKKwlpZiB0ZXN0ICIkdGhyZWFkX3NhZmUiID0geWVzICYmIHRlc3QgLW4gIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWMiOyB0aGVuCisJICBldmFsIGZsYWc9XCIkdGhyZWFkX3NhZmVfZmxhZ19zcGVjXCIKKwkgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAkZmxhZyIKKwlmaQorCisJIyBNYWtlIGEgYmFja3VwIG9mIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IHdoZW4gcmVsaW5raW5nCisJaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVUgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVUpJyB8fCBleGl0ICQ/CisJZmkKKworCSMgRG8gZWFjaCBvZiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KKwlpZiB0ZXN0ICIkbW9kdWxlIiA9IHllcyAmJiB0ZXN0IC1uICIkbW9kdWxlX2NtZHMiIDsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkbW9kdWxlX2V4cHN5bV9jbWRzIjsgdGhlbgorCSAgICBldmFsIHRlc3RfY21kcz1cIiRtb2R1bGVfZXhwc3ltX2NtZHNcIgorCSAgICBjbWRzPSRtb2R1bGVfZXhwc3ltX2NtZHMKKwkgIGVsc2UKKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkbW9kdWxlX2NtZHNcIgorCSAgICBjbWRzPSRtb2R1bGVfY21kcworCSAgZmkKKwllbHNlCisJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRhcmNoaXZlX2V4cHN5bV9jbWRzIjsgdGhlbgorCSAgICBldmFsIHRlc3RfY21kcz1cIiRhcmNoaXZlX2V4cHN5bV9jbWRzXCIKKwkgICAgY21kcz0kYXJjaGl2ZV9leHBzeW1fY21kcworCSAgZWxzZQorCSAgICBldmFsIHRlc3RfY21kcz1cIiRhcmNoaXZlX2NtZHNcIgorCSAgICBjbWRzPSRhcmNoaXZlX2NtZHMKKwkgIGZpCisJZmkKKworCWlmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYKKwkgICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiICYmCisJICAgbGVuPSRmdW5jX2xlbl9yZXN1bHQgJiYKKwkgICB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KKwkgIDoKKwllbHNlCisJICAjIFRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gbGluayBpbiBvbmUgc3RlcCwgbGluayBwaWVjZXdpc2UKKwkgICMgb3IsIGlmIHVzaW5nIEdOVSBsZCBhbmQgc2tpcHBlZF9leHBvcnQgaXMgbm90IDosIHVzZSBhIGxpbmtlcgorCSAgIyBzY3JpcHQuCisKKwkgICMgU2F2ZSB0aGUgdmFsdWUgb2YgJG91dHB1dCBhbmQgJGxpYm9ianMgYmVjYXVzZSB3ZSB3YW50IHRvCisJICAjIHVzZSB0aGVtIGxhdGVyLiAgSWYgd2UgaGF2ZSB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgd2UKKwkgICMgd2FudCB0byB1c2Ugc2F2ZV9saWJvYmpzIGFzIGl0IHdhcyBiZWZvcmUKKwkgICMgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMgd2FzIGV4cGFuZGVkLCBiZWNhdXNlIHdlIGNhbid0CisJICAjIGFzc3VtZSB0aGUgbGlua2VyIHVuZGVyc3RhbmRzIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLgorCSAgIyBUaGlzIG1heSBoYXZlIHRvIGJlIHJldmlzaXRlZCwgaW4gY2FzZSB0b28gbWFueQorCSAgIyBjb252ZW5pZW5jZSBsaWJyYXJpZXMgZ2V0IGxpbmtlZCBpbiBhbmQgZW5kIHVwIGV4Y2VlZGluZworCSAgIyB0aGUgc3BlYy4KKwkgIGlmIHRlc3QgLXogIiRjb252ZW5pZW5jZSIgfHwgdGVzdCAteiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgICBzYXZlX2xpYm9ianM9JGxpYm9ianMKKwkgIGZpCisJICBzYXZlX291dHB1dD0kb3V0cHV0CisJICBvdXRwdXRfbGE9YCRFQ0hPICJYJG91dHB1dCIgfCAkWHNlZCAtZSAiJGJhc2VuYW1lImAKKworCSAgIyBDbGVhciB0aGUgcmVsb2FkYWJsZSBvYmplY3QgY3JlYXRpb24gY29tbWFuZCBxdWV1ZSBhbmQKKwkgICMgaW5pdGlhbGl6ZSBrIHRvIG9uZS4KKwkgIHRlc3RfY21kcz0KKwkgIGNvbmNhdF9jbWRzPQorCSAgb2JqbGlzdD0KKwkgIGxhc3Rfcm9iaj0KKwkgIGs9MQorCisJICBpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkgICAgb3V0cHV0PSR7b3V0cHV0X29iamRpcn0vJHtvdXRwdXRfbGF9Lmxua3NjcmlwdAorCSAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIEdOVSBsZCBzY3JpcHQ6ICRvdXRwdXQiCisJICAgICRFQ0hPICdJTlBVVCAoJyA+ICRvdXRwdXQKKwkgICAgZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzCisJICAgIGRvCisJICAgICAgJEVDSE8gIiRvYmoiID4+ICRvdXRwdXQKKwkgICAgZG9uZQorCSAgICAkRUNITyAnKScgPj4gJG91dHB1dAorCSAgICBkZWxmaWxlcz0iJGRlbGZpbGVzICRvdXRwdXQiCisJICBlbGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYgdGVzdCAiWCRmaWxlX2xpc3Rfc3BlYyIgIT0gWDsgdGhlbgorCSAgICBvdXRwdXQ9JHtvdXRwdXRfb2JqZGlyfS8ke291dHB1dF9sYX0ubG5rCisJICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgbGlua2VyIGlucHV0IGZpbGUgbGlzdDogJG91dHB1dCIKKwkgICAgOiA+ICRvdXRwdXQKKwkgICAgc2V0IHggJHNhdmVfbGlib2JqcworCSAgICBzaGlmdAorCSAgICBmaXJzdG9iaj0KKwkgICAgaWYgdGVzdCAiJGNvbXBpbGVyX25lZWRzX29iamVjdCIgPSB5ZXM7IHRoZW4KKwkgICAgICBmaXJzdG9iaj0iJDEgIgorCSAgICAgIHNoaWZ0CisJICAgIGZpCisJICAgIGZvciBvYmoKKwkgICAgZG8KKwkgICAgICAkRUNITyAiJG9iaiIgPj4gJG91dHB1dAorCSAgICBkb25lCisJICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJG91dHB1dCIKKwkgICAgb3V0cHV0PSRmaXJzdG9ialwiJGZpbGVfbGlzdF9zcGVjJG91dHB1dFwiCisJICBlbHNlCisJICAgIGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiOyB0aGVuCisJICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4uLiIKKwkgICAgICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKwkgICAgICBldmFsIHRlc3RfY21kcz1cIiRyZWxvYWRfY21kc1wiCisJICAgICAgZnVuY19sZW4gIiAkdGVzdF9jbWRzIgorCSAgICAgIGxlbjA9JGZ1bmNfbGVuX3Jlc3VsdAorCSAgICAgIGxlbj0kbGVuMAorCisJICAgICAgIyBMb29wIG92ZXIgdGhlIGxpc3Qgb2Ygb2JqZWN0cyB0byBiZSBsaW5rZWQuCisJICAgICAgZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzCisJICAgICAgZG8KKwkJZnVuY19sZW4gIiAkb2JqIgorCQlmdW5jX2FyaXRoICRsZW4gKyAkZnVuY19sZW5fcmVzdWx0CisJCWxlbj0kZnVuY19hcml0aF9yZXN1bHQKKwkJaWYgdGVzdCAiWCRvYmpsaXN0IiA9IFggfHwKKwkJICAgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iOyB0aGVuCisJCSAgZnVuY19hcHBlbmQgb2JqbGlzdCAiICRvYmoiCisJCWVsc2UKKwkJICAjIFRoZSBjb21tYW5kICR0ZXN0X2NtZHMgaXMgYWxtb3N0IHRvbyBsb25nLCBhZGQgYQorCQkgICMgY29tbWFuZCB0byB0aGUgcXVldWUuCisJCSAgaWYgdGVzdCAiJGsiIC1lcSAxIDsgdGhlbgorCQkgICAgIyBUaGUgZmlyc3QgZmlsZSBkb2Vzbid0IGhhdmUgYSBwcmV2aW91cyBjb21tYW5kIHRvIGFkZC4KKwkJICAgIGV2YWwgY29uY2F0X2NtZHM9XCIkcmVsb2FkX2NtZHMgJG9iamxpc3QgJGxhc3Rfcm9ialwiCisJCSAgZWxzZQorCQkgICAgIyBBbGwgc3Vic2VxdWVudCByZWxvYWRhYmxlIG9iamVjdCBmaWxlcyB3aWxsIGxpbmsgaW4KKwkJICAgICMgdGhlIGxhc3Qgb25lIGNyZWF0ZWQuCisJCSAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc34kcmVsb2FkX2NtZHMgJG9iamxpc3QgJGxhc3Rfcm9ian5cJFJNICRsYXN0X3JvYmpcIgorCQkgIGZpCisJCSAgbGFzdF9yb2JqPSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CisJCSAgZnVuY19hcml0aCAkayArIDEKKwkJICBrPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQkgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7a30uJG9iamV4dAorCQkgIG9iamxpc3Q9JG9iagorCQkgIGZ1bmNfbGVuICIgJGxhc3Rfcm9iaiIKKwkJICBmdW5jX2FyaXRoICRsZW4wICsgJGZ1bmNfbGVuX3Jlc3VsdAorCQkgIGxlbj0kZnVuY19hcml0aF9yZXN1bHQKKwkJZmkKKwkgICAgICBkb25lCisJICAgICAgIyBIYW5kbGUgdGhlIHJlbWFpbmluZyBvYmplY3RzIGJ5IGNyZWF0aW5nIG9uZSBsYXN0CisJICAgICAgIyByZWxvYWRhYmxlIG9iamVjdCBmaWxlLiAgQWxsIHN1YnNlcXVlbnQgcmVsb2FkYWJsZSBvYmplY3QKKwkgICAgICAjIGZpbGVzIHdpbGwgbGluayBpbiB0aGUgbGFzdCBvbmUgY3JlYXRlZC4KKwkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKwkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9JHJlbG9hZF9jbWRzICRvYmpsaXN0ICRsYXN0X3JvYmpcIgorCSAgICAgIGlmIHRlc3QgLW4gIiRsYXN0X3JvYmoiOyB0aGVuCisJICAgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9flwkUk0gJGxhc3Rfcm9ialwiCisJICAgICAgZmkKKwkgICAgICBkZWxmaWxlcz0iJGRlbGZpbGVzICRvdXRwdXQiCisKKwkgICAgZWxzZQorCSAgICAgIG91dHB1dD0KKwkgICAgZmkKKworCSAgICBpZiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYSciCisJICAgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmV4cCIKKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRleHBvcnRfc3ltYm9scworCSAgICAgIGxpYm9ianM9JG91dHB1dAorCSAgICAgICMgQXBwZW5kIHRoZSBjb21tYW5kIHRvIGNyZWF0ZSB0aGUgZXhwb3J0IGZpbGUuCisJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CisJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHMkZXhwb3J0X3N5bWJvbHNfY21kc1wiCisJICAgICAgaWYgdGVzdCAtbiAiJGxhc3Rfcm9iaiI7IHRoZW4KKwkJZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIKKwkgICAgICBmaQorCSAgICBmaQorCisJICAgIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmCisJICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBhIHRlbXBvcmFyeSByZWxvYWRhYmxlIG9iamVjdCBmaWxlOiAkb3V0cHV0IgorCisJICAgICMgTG9vcCB0aHJvdWdoIHRoZSBjb21tYW5kcyBnZW5lcmF0ZWQgYWJvdmUgYW5kIGV4ZWN1dGUgdGhlbS4KKwkgICAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJICAgIGZvciBjbWQgaW4gJGNvbmNhdF9jbWRzOyBkbworCSAgICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICAgICRvcHRfc2lsZW50IHx8IHsKKwkJICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRjbWQiCisJCSAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorCSAgICAgIH0KKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZCIgfHwgeworCQlsdF9leGl0PSQ/CisKKwkJIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CisJCWlmIHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorCQkgICggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiBcCisJCSAgICAkUk0gIiR7cmVhbG5hbWV9VCIgJiYgXAorCQkgICAgJE1WICIke3JlYWxuYW1lfVUiICIkcmVhbG5hbWUiICkKKwkJZmkKKworCQlleGl0ICRsdF9leGl0CisJICAgICAgfQorCSAgICBkb25lCisJICAgIElGUz0iJHNhdmVfaWZzIgorCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgJHtza2lwcGVkX2V4cG9ydC1mYWxzZX07IHRoZW4KKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkZXhwb3J0X3N5bWJvbHMiID4gIiR7ZXhwb3J0X3N5bWJvbHN9VCInCisJICAgICAgZnVuY19zaG93X2V2YWwgJyRNViAiJHtleHBvcnRfc3ltYm9sc31UIiAiJGV4cG9ydF9zeW1ib2xzIicKKwkgICAgZmkKKwkgIGZpCisKKyAgICAgICAgICBpZiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgorCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAgICAgdG1wX2V4cG9ydF9zeW1ib2xzPSIkZXhwb3J0X3N5bWJvbHMiCisJICAgICAgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiICYmIHRtcF9leHBvcnRfc3ltYm9scz0iJG9yaWdfZXhwb3J0X3N5bWJvbHMiCisJICAgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyRFQ0hPICJYJGluY2x1ZGVfZXhwc3ltcyIgfCAkWHNlZCB8ICRTUDJOTCA+PiAiJHRtcF9leHBvcnRfc3ltYm9scyInCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiOyB0aGVuCisJICAgICAgIyBUaGUgZ2l2ZW4gZXhwb3J0c19zeW1ib2xzIGZpbGUgaGFzIHRvIGJlIGZpbHRlcmVkLCBzbyBmaWx0ZXIgaXQuCisJICAgICAgZnVuY192ZXJib3NlICJmaWx0ZXIgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIHRvIHRhZyBEQVRBIGV4cG9ydHMiCisJICAgICAgIyBGSVhNRTogJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIHBvdGVudGlhbGx5IGNvbnRhaW5zIGxvdHMgb2YKKwkgICAgICAjICdzJyBjb21tYW5kcyB3aGljaCBub3QgYWxsIHNlZHMgY2FuIGhhbmRsZS4gR05VIHNlZCBzaG91bGQgYmUgZmluZQorCSAgICAgICMgdGhvdWdoLiBBbHNvLCB0aGUgZmlsdGVyIHNjYWxlcyBzdXBlcmxpbmVhcmx5IHdpdGggdGhlIG51bWJlciBvZgorCSAgICAgICMgZ2xvYmFsIHZhcmlhYmxlcy4gam9pbigxKSB3b3VsZCBiZSBuaWNlIGhlcmUsIGJ1dCB1bmZvcnR1bmF0ZWx5CisJICAgICAgIyBpc24ndCBhIGJsZXNzZWQgdG9vbC4KKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZSAnL1sgLF1EQVRBLyFkO3MsXCguKlwpXChbIFwsXS4qXCksc3xeXDEkfFwxXDJ8LCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIKKwkgICAgICBkZWxmaWxlcz0iJGRlbGZpbGVzICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIiCisJICAgICAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmCisJICAgICAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWYgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIDwgJG9yaWdfZXhwb3J0X3N5bWJvbHMgPiAkZXhwb3J0X3N5bWJvbHMKKwkgICAgZmkKKwkgIGZpCisKKwkgIGxpYm9ianM9JG91dHB1dAorCSAgIyBSZXN0b3JlIHRoZSB2YWx1ZSBvZiBvdXRwdXQuCisJICBvdXRwdXQ9JHNhdmVfb3V0cHV0CisKKwkgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSIgJiYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgICBldmFsIGxpYm9ianM9XCJcJGxpYm9ianMgJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKKwkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKwkgIGZpCisJICAjIEV4cGFuZCB0aGUgbGlicmFyeSBsaW5raW5nIGNvbW1hbmRzIGFnYWluIHRvIHJlc2V0IHRoZQorCSAgIyB2YWx1ZSBvZiAkbGlib2JqcyBmb3IgcGllY2V3aXNlIGxpbmtpbmcuCisKKwkgICMgRG8gZWFjaCBvZiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KKwkgIGlmIHRlc3QgIiRtb2R1bGUiID0geWVzICYmIHRlc3QgLW4gIiRtb2R1bGVfY21kcyIgOyB0aGVuCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJG1vZHVsZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgICBjbWRzPSRtb2R1bGVfZXhwc3ltX2NtZHMKKwkgICAgZWxzZQorCSAgICAgIGNtZHM9JG1vZHVsZV9jbWRzCisJICAgIGZpCisJICBlbHNlCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiOyB0aGVuCisJICAgICAgY21kcz0kYXJjaGl2ZV9leHBzeW1fY21kcworCSAgICBlbHNlCisJICAgICAgY21kcz0kYXJjaGl2ZV9jbWRzCisJICAgIGZpCisJICBmaQorCWZpCisKKwlpZiB0ZXN0IC1uICIkZGVsZmlsZXMiOyB0aGVuCisJICAjIEFwcGVuZCB0aGUgY29tbWFuZCB0byByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzIHRvICRjbWRzLgorCSAgZXZhbCBjbWRzPVwiXCRjbWRzflwkUk0gJGRlbGZpbGVzXCIKKwlmaQorCisJIyBBZGQgYW55IG9iamVjdHMgZnJvbSBwcmVsb2FkZWQgY29udmVuaWVuY2UgbGlicmFyaWVzCisJaWYgdGVzdCAtbiAiJGRscHJlZmlsZXMiOyB0aGVuCisJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCSAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisKKwkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRkbHByZWZpbGVzCisJICBsaWJvYmpzPSIkbGlib2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwkgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisJZmkKKworCXNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworCWZvciBjbWQgaW4gJGNtZHM7IGRvCisJICBJRlM9IiRzYXZlX2lmcyIKKwkgIGV2YWwgY21kPVwiJGNtZFwiCisJICAkb3B0X3NpbGVudCB8fCB7CisJICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJGNtZCIKKwkgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorCSAgfQorCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiRjbWQiIHx8IHsKKwkgICAgbHRfZXhpdD0kPworCisJICAgICMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAorCSAgICBpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgICAgICAoIGNkICIkb3V0cHV0X29iamRpciIgJiYgXAorCSAgICAgICAgJFJNICIke3JlYWxuYW1lfVQiICYmIFwKKwkJJE1WICIke3JlYWxuYW1lfVUiICIkcmVhbG5hbWUiICkKKwkgICAgZmkKKworCSAgICBleGl0ICRsdF9leGl0CisJICB9CisJZG9uZQorCUlGUz0iJHNhdmVfaWZzIgorCisJIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CisJaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVQgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVQgJiYgJE1WICR7cmVhbG5hbWV9VSAkcmVhbG5hbWUpJyB8fCBleGl0ICQ/CisKKwkgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKwkgICAgaWYgdGVzdCAteiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgICAgIGZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJworCSAgICBmaQorCSAgZmkKKworCSAgZXhpdCAkRVhJVF9TVUNDRVNTCisJZmkKKworCSMgQ3JlYXRlIGxpbmtzIHRvIHRoZSByZWFsIGxpYnJhcnkuCisJZm9yIGxpbmtuYW1lIGluICRsaW5rbmFtZXM7IGRvCisJICBpZiB0ZXN0ICIkcmVhbG5hbWUiICE9ICIkbGlua25hbWUiOyB0aGVuCisJICAgIGZ1bmNfc2hvd19ldmFsICcoY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiAkUk0gIiRsaW5rbmFtZSIgJiYgJExOX1MgIiRyZWFsbmFtZSIgIiRsaW5rbmFtZSIpJyAnZXhpdCAkPycKKwkgIGZpCisJZG9uZQorCisJIyBJZiAtbW9kdWxlIG9yIC1leHBvcnQtZHluYW1pYyB3YXMgc3BlY2lmaWVkLCBzZXQgdGhlIGRsbmFtZS4KKwlpZiB0ZXN0ICIkbW9kdWxlIiA9IHllcyB8fCB0ZXN0ICIkZXhwb3J0X2R5bmFtaWMiID0geWVzOyB0aGVuCisJICAjIE9uIGFsbCBrbm93biBvcGVyYXRpbmcgc3lzdGVtcywgdGhlc2UgYXJlIGlkZW50aWNhbC4KKwkgIGRsbmFtZT0iJHNvbmFtZSIKKwlmaQorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBvYmopCisgICAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgorCWZ1bmNfd2FybmluZyAiXGAtZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorICAgICAgZmkKKworICAgICAgY2FzZSAiICRkZXBsaWJzIiBpbgorICAgICAgKlwgLWwqIHwgKlwgLUwqKQorCWZ1bmNfd2FybmluZyAiXGAtbCcgYW5kIFxgLUwnIGFyZSBpZ25vcmVkIGZvciBvYmplY3RzIiA7OworICAgICAgZXNhYworCisgICAgICB0ZXN0IC1uICIkcnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJwYXRoJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorCisgICAgICB0ZXN0IC1uICIkeHJwYXRoIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1SJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorCisgICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXZlcnNpb24taW5mbycgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKworICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisKKyAgICAgIGNhc2UgJG91dHB1dCBpbgorICAgICAgKi5sbykKKwl0ZXN0IC1uICIkb2JqcyRvbGRfZGVwbGlicyIgJiYgXAorCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGJ1aWxkIGxpYnJhcnkgb2JqZWN0IFxgJG91dHB1dCcgZnJvbSBub24tbGlidG9vbCBvYmplY3RzIgorCisJbGlib2JqPSRvdXRwdXQKKwlmdW5jX2xvMm8gIiRsaWJvYmoiCisJb2JqPSRmdW5jX2xvMm9fcmVzdWx0CisJOzsKKyAgICAgICopCisJbGlib2JqPQorCW9iaj0iJG91dHB1dCIKKwk7OworICAgICAgZXNhYworCisgICAgICAjIERlbGV0ZSB0aGUgb2xkIG9iamVjdHMuCisgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRvYmogJGxpYm9iagorCisgICAgICAjIE9iamVjdHMgZnJvbSBjb252ZW5pZW5jZSBsaWJyYXJpZXMuICBUaGlzIGFzc3VtZXMKKyAgICAgICMgc2luZ2xlLXZlcnNpb24gY29udmVuaWVuY2UgbGlicmFyaWVzLiAgV2hlbmV2ZXIgd2UgY3JlYXRlCisgICAgICAjIGRpZmZlcmVudCBvbmVzIGZvciBQSUMvbm9uLVBJQywgdGhpcyB3ZSdsbCBoYXZlIHRvIGR1cGxpY2F0ZQorICAgICAgIyB0aGUgZXh0cmFjdGlvbi4KKyAgICAgIHJlbG9hZF9jb252X29ianM9CisgICAgICBnZW50b3A9CisgICAgICAjIHJlbG9hZF9jbWRzIHJ1bnMgJExEIGRpcmVjdGx5LCBzbyBsZXQgdXMgZ2V0IHJpZCBvZgorICAgICAgIyAtV2wgZnJvbSB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyBhbmQgaG9wZSB3ZSBjYW4gZ2V0IGJ5IHdpdGgKKyAgICAgICMgdHVybmluZyBjb21tYSBpbnRvIHNwYWNlLi4KKyAgICAgIHdsPQorCisgICAgICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCisJaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgZXZhbCB0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncz1cIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisJICByZWxvYWRfY29udl9vYmpzPSRyZWxvYWRfb2Jqc1wgYCRFQ0hPICJYJHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzIiB8ICRYc2VkIC1lICdzfCx8IHxnJ2AKKwllbHNlCisJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b2JqfXgiCisJICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKworCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGNvbnZlbmllbmNlCisJICByZWxvYWRfY29udl9vYmpzPSIkcmVsb2FkX29ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgQ3JlYXRlIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgorICAgICAgcmVsb2FkX29ianM9IiRvYmpzJG9sZF9kZXBsaWJzICJgJEVDSE8gIlgkbGlib2JqcyIgfCAkU1AyTkwgfCAkWHNlZCAtZSAnL1wuJyR7bGliZXh0fSQnL2QnIC1lICcvXC5saWIkL2QnIC1lICIkbG8ybyIgfCAkTkwyU1BgIiAkcmVsb2FkX2NvbnZfb2JqcyIgIyMjIHRlc3RzdWl0ZTogc2tpcCBuZXN0ZWQgcXVvdGluZyB0ZXN0CisKKyAgICAgIG91dHB1dD0iJG9iaiIKKyAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcmVsb2FkX2NtZHMiICdleGl0ICQ/JworCisgICAgICAjIEV4aXQgaWYgd2UgYXJlbid0IGRvaW5nIGEgbGlicmFyeSBvYmplY3QgZmlsZS4KKyAgICAgIGlmIHRlc3QgLXogIiRsaWJvYmoiOyB0aGVuCisJaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KKwkgIGZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJworCWZpCisKKwlleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllczsgdGhlbgorCWlmIHRlc3QgLW4gIiRnZW50b3AiOyB0aGVuCisJICBmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKKwlmaQorCisJIyBDcmVhdGUgYW4gaW52YWxpZCBsaWJ0b29sIG9iamVjdCBpZiBubyBQSUMsIHNvIHRoYXQgd2UgZG9uJ3QKKwkjIGFjY2lkZW50YWxseSBsaW5rIGl0IGludG8gYSBwcm9ncmFtLgorCSMgJHNob3cgImVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiIKKwkjICRvcHRfZHJ5X3J1biB8fCBldmFsICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiIHx8IGV4aXQgJD8KKwlleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRwaWNfZmxhZyIgfHwgdGVzdCAiJHBpY19tb2RlIiAhPSBkZWZhdWx0OyB0aGVuCisJIyBPbmx5IGRvIGNvbW1hbmRzIGlmIHdlIHJlYWxseSBoYXZlIGRpZmZlcmVudCBQSUMgb2JqZWN0cy4KKwlyZWxvYWRfb2Jqcz0iJGxpYm9ianMgJHJlbG9hZF9jb252X29ianMiCisJb3V0cHV0PSIkbGlib2JqIgorCWZ1bmNfZXhlY3V0ZV9jbWRzICIkcmVsb2FkX2NtZHMiICdleGl0ICQ/JworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KKwlmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKKyAgICAgIGZpCisKKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgOzsKKworICAgIHByb2cpCisgICAgICBjYXNlICRob3N0IGluCisJKmN5Z3dpbiopIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG91dHB1dCIKKwkgICAgICAgICAgb3V0cHV0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuZXhlOzsKKyAgICAgIGVzYWMKKyAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvJyBpcyBpZ25vcmVkIGZvciBwcm9ncmFtcyIKKworICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIHByb2dyYW1zIgorCisgICAgICB0ZXN0ICIkcHJlbG9hZCIgPSB5ZXMgXAorICAgICAgICAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0gdW5rbm93biBcCisJJiYgdGVzdCAiJGRsb3Blbl9zZWxmIiA9IHVua25vd24gXAorCSYmIHRlc3QgIiRkbG9wZW5fc2VsZl9zdGF0aWMiID0gdW5rbm93biAmJiBcCisJICBmdW5jX3dhcm5pbmcgIlxgTFRfSU5JVChbZGxvcGVuXSknIG5vdCB1c2VkLiBBc3N1bWluZyBubyBkbG9wZW4gc3VwcG9ydC4iCisKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkjIE9uIFJoYXBzb2R5IHJlcGxhY2UgdGhlIEMgbGlicmFyeSBpcyB0aGUgU3lzdGVtIGZyYW1ld29yaworCWNvbXBpbGVfZGVwbGlicz1gJEVDSE8gIlggJGNvbXBpbGVfZGVwbGlicyIgfCAkWHNlZCAtZSAncy8gLWxjIC8gU3lzdGVtLmx0ZnJhbWV3b3JrIC8nYAorCWZpbmFsaXplX2RlcGxpYnM9YCRFQ0hPICJYICRmaW5hbGl6ZV9kZXBsaWJzIiB8ICRYc2VkIC1lICdzLyAtbGMgLyBTeXN0ZW0ubHRmcmFtZXdvcmsgLydgCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKi0qLWRhcndpbiopCisJIyBEb24ndCBhbGxvdyBsYXp5IGxpbmtpbmcsIGl0IGJyZWFrcyBDKysgZ2xvYmFsIGNvbnN0cnVjdG9ycworCSMgQnV0IGlzIHN1cHBvc2VkbHkgZml4ZWQgb24gMTAuNCBvciBsYXRlciAoeWF5ISkuCisJaWYgdGVzdCAiJHRhZ25hbWUiID0gQ1hYIDsgdGhlbgorCSAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSBpbgorCSAgICAxMC5bMDEyM10pCisJICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICR7d2x9LWJpbmRfYXRfbG9hZCIKKwkgICAgICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAke3dsfS1iaW5kX2F0X2xvYWQiCisJICAgIDs7CisJICBlc2FjCisJZmkKKwkjIFRpbWUgdG8gY2hhbmdlIGFsbCBvdXIgImZvby5sdGZyYW1ld29yayIgc3R1ZmYgYmFjayB0byAiLWZyYW1ld29yayBmb28iCisJY29tcGlsZV9kZXBsaWJzPWAkRUNITyAiWCAkY29tcGlsZV9kZXBsaWJzIiB8ICRYc2VkIC1lICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCWZpbmFsaXplX2RlcGxpYnM9YCRFQ0hPICJYICRmaW5hbGl6ZV9kZXBsaWJzIiB8ICRYc2VkIC1lICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCTs7CisgICAgICBlc2FjCisKKworICAgICAgIyBtb3ZlIGxpYnJhcnkgc2VhcmNoIHBhdGhzIHRoYXQgY29pbmNpZGUgd2l0aCBwYXRocyB0byBub3QgeWV0CisgICAgICAjIGluc3RhbGxlZCBsaWJyYXJpZXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlicmFyeSBzZWFyY2ggbGlzdAorICAgICAgbmV3X2xpYnM9CisgICAgICBmb3IgcGF0aCBpbiAkbm90aW5zdF9wYXRoOyBkbworCWNhc2UgIiAkbmV3X2xpYnMgIiBpbgorCSoiIC1MJHBhdGgvJG9iamRpciAiKikgOzsKKwkqKQorCSAgY2FzZSAiICRjb21waWxlX2RlcGxpYnMgIiBpbgorCSAgKiIgLUwkcGF0aC8kb2JqZGlyICIqKQorCSAgICBuZXdfbGlicz0iJG5ld19saWJzIC1MJHBhdGgvJG9iamRpciIgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgZm9yIGRlcGxpYiBpbiAkY29tcGlsZV9kZXBsaWJzOyBkbworCWNhc2UgJGRlcGxpYiBpbgorCS1MKikKKwkgIGNhc2UgIiAkbmV3X2xpYnMgIiBpbgorCSAgKiIgJGRlcGxpYiAiKikgOzsKKwkgICopIG5ld19saWJzPSIkbmV3X2xpYnMgJGRlcGxpYiIgOzsKKwkgIGVzYWMKKwkgIDs7CisJKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGNvbXBpbGVfZGVwbGlicz0iJG5ld19saWJzIgorCisKKyAgICAgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkY29tcGlsZV9kZXBsaWJzIgorICAgICAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJGZpbmFsaXplX2RlcGxpYnMiCisKKyAgICAgIGlmIHRlc3QgLW4gIiRycGF0aCR4cnBhdGgiOyB0aGVuCisJIyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYW55IHJwYXRoIGZsYWdzLCB0aGVuIGFkZCB0aGVtLgorCWZvciBsaWJkaXIgaW4gJHJwYXRoICR4cnBhdGg7IGRvCisJICAjIFRoaXMgaXMgdGhlIG1hZ2ljIHRvIHVzZSAtcnBhdGguCisJICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZpbmFsaXplX3JwYXRoPSIkZmluYWxpemVfcnBhdGggJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlkb25lCisgICAgICBmaQorCisgICAgICAjIE5vdyBoYXJkY29kZSB0aGUgbGlicmFyeSBwYXRocworICAgICAgcnBhdGg9CisgICAgICBoYXJkY29kZV9saWJkaXJzPQorICAgICAgZm9yIGxpYmRpciBpbiAkY29tcGlsZV9ycGF0aCAkZmluYWxpemVfcnBhdGg7IGRvCisJaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKwkgICAgaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJICAgICAgaGFyZGNvZGVfbGliZGlycz0iJGxpYmRpciIKKwkgICAgZWxzZQorCSAgICAgICMgSnVzdCBhY2N1bXVsYXRlIHRoZSB1bmlxdWUgbGliZGlycy4KKwkgICAgICBjYXNlICRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBpbgorCSAgICAgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKKwkJOzsKKwkgICAgICAqKQorCQloYXJkY29kZV9saWJkaXJzPSIkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKwkJOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICBlbHNlCisJICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKwkgICAgcnBhdGg9IiRycGF0aCAkZmxhZyIKKwkgIGZpCisJZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisJICBjYXNlICIkcGVybV9ycGF0aCAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgcGVybV9ycGF0aD0iJHBlcm1fcnBhdGggJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlmaQorCWNhc2UgJGhvc3QgaW4KKwkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotY2VnY2MqKQorCSAgdGVzdGJpbmRpcj1gJHtFQ0hPfSAiJGxpYmRpciIgfCAke1NFRH0gLWUgJ3MqL2xpYiQqL2JpbionYAorCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisJICAqIjokbGliZGlyOiIqKSA7OworCSAgOjopIGRsbHNlYXJjaHBhdGg9JGxpYmRpcjs7CisJICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokbGliZGlyIjs7CisJICBlc2FjCisJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKwkgICoiOiR0ZXN0YmluZGlyOiIqKSA7OworCSAgOjopIGRsbHNlYXJjaHBhdGg9JHRlc3RiaW5kaXI7OworCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JHRlc3RiaW5kaXIiOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgIyBTdWJzdGl0dXRlIHRoZSBoYXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBycGF0aC4KKyAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgorCSB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwlsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgorCWV2YWwgcnBhdGg9XCIgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgZmkKKyAgICAgIGNvbXBpbGVfcnBhdGg9IiRycGF0aCIKKworICAgICAgcnBhdGg9CisgICAgICBoYXJkY29kZV9saWJkaXJzPQorICAgICAgZm9yIGxpYmRpciBpbiAkZmluYWxpemVfcnBhdGg7IGRvCisJaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKwkgICAgaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJICAgICAgaGFyZGNvZGVfbGliZGlycz0iJGxpYmRpciIKKwkgICAgZWxzZQorCSAgICAgICMgSnVzdCBhY2N1bXVsYXRlIHRoZSB1bmlxdWUgbGliZGlycy4KKwkgICAgICBjYXNlICRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBpbgorCSAgICAgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKKwkJOzsKKwkgICAgICAqKQorCQloYXJkY29kZV9saWJkaXJzPSIkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKwkJOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICBlbHNlCisJICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKwkgICAgcnBhdGg9IiRycGF0aCAkZmxhZyIKKwkgIGZpCisJZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisJICBjYXNlICIkZmluYWxpemVfcGVybV9ycGF0aCAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgZmluYWxpemVfcGVybV9ycGF0aD0iJGZpbmFsaXplX3Blcm1fcnBhdGggJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlmaQorICAgICAgZG9uZQorICAgICAgIyBTdWJzdGl0dXRlIHRoZSBoYXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBycGF0aC4KKyAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgorCSB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwlsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgorCWV2YWwgcnBhdGg9XCIgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgZmkKKyAgICAgIGZpbmFsaXplX3JwYXRoPSIkcnBhdGgiCisKKyAgICAgIGlmIHRlc3QgLW4gIiRsaWJvYmpzIiAmJiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisJIyBUcmFuc2Zvcm0gYWxsIHRoZSBsaWJyYXJ5IG9iamVjdHMgaW50byBzdGFuZGFyZCBvYmplY3RzLgorCWNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRYc2VkIC1lICIkbG8ybyIgfCAkTkwyU1BgCisJZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIlgkZmluYWxpemVfY29tbWFuZCIgfCAkU1AyTkwgfCAkWHNlZCAtZSAiJGxvMm8iIHwgJE5MMlNQYAorICAgICAgZmkKKworICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRvdXRwdXRuYW1lIiAiQFBST0dSQU1AIiAibm8iCisKKyAgICAgICMgdGVtcGxhdGUgcHJlbGlua2luZyBzdGVwCisgICAgICBpZiB0ZXN0IC1uICIkcHJlbGlua19jbWRzIjsgdGhlbgorCWZ1bmNfZXhlY3V0ZV9jbWRzICIkcHJlbGlua19jbWRzIiAnZXhpdCAkPycKKyAgICAgIGZpCisKKyAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPXllcworICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqICkKKyAgICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzOyB0aGVuCisgICAgICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9bm8KKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICpjZWdjYykKKyAgICAgICAgIyBEaXNhYmxlIHdyYXBwZXJzIGZvciBjZWdjYywgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyBhbnl3YXkuCisgICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPW5vCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBpZiB0ZXN0ICIkbmVlZF9yZWxpbmsiID0gbm8gfHwgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzOyB0aGVuCisgICAgICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9bm8KKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIGlmIHRlc3QgIiR3cmFwcGVyc19yZXF1aXJlZCIgPSBubzsgdGhlbgorCSMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KKwljb21waWxlX2NvbW1hbmQ9YCRFQ0hPICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkWHNlZCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJ2AKKwlsaW5rX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKKworCSMgV2UgaGF2ZSBubyB1bmluc3RhbGxlZCBsaWJyYXJ5IGRlcGVuZGVuY2llcywgc28gZmluYWxpemUgcmlnaHQgbm93LgorCWV4aXRfc3RhdHVzPTAKKwlmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXRfc3RhdHVzPSQ/JworCisJIyBEZWxldGUgdGhlIGdlbmVyYXRlZCBmaWxlcy4KKwlpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0iOyB0aGVuCisJICBmdW5jX3Nob3dfZXZhbCAnJFJNICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0iJworCWZpCisKKwlleGl0ICRleGl0X3N0YXR1cworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJGNvbXBpbGVfc2hsaWJwYXRoJGZpbmFsaXplX3NobGlicGF0aCI7IHRoZW4KKwljb21waWxlX2NvbW1hbmQ9IiRzaGxpYnBhdGhfdmFyPVwiJGNvbXBpbGVfc2hsaWJwYXRoJGZpbmFsaXplX3NobGlicGF0aFwkJHNobGlicGF0aF92YXJcIiAkY29tcGlsZV9jb21tYW5kIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLW4gIiRmaW5hbGl6ZV9zaGxpYnBhdGgiOyB0aGVuCisJZmluYWxpemVfY29tbWFuZD0iJHNobGlicGF0aF92YXI9XCIkZmluYWxpemVfc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3ZhclwiICRmaW5hbGl6ZV9jb21tYW5kIgorICAgICAgZmkKKworICAgICAgY29tcGlsZV92YXI9CisgICAgICBmaW5hbGl6ZV92YXI9CisgICAgICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisJaWYgdGVzdCAtbiAiJHBlcm1fcnBhdGgiOyB0aGVuCisJICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgorCSAgcnBhdGg9CisJICBmb3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbworCSAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisJICBkb25lCisJICBjb21waWxlX3Zhcj0iJHJ1bnBhdGhfdmFyPVwiJHJwYXRoXCQkcnVucGF0aF92YXJcIiAiCisJZmkKKwlpZiB0ZXN0IC1uICIkZmluYWxpemVfcGVybV9ycGF0aCI7IHRoZW4KKwkgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCisJICBycGF0aD0KKwkgIGZvciBkaXIgaW4gJGZpbmFsaXplX3Blcm1fcnBhdGg7IGRvCisJICAgIHJwYXRoPSIkcnBhdGgkZGlyOiIKKwkgIGRvbmUKKwkgIGZpbmFsaXplX3Zhcj0iJHJ1bnBhdGhfdmFyPVwiJHJwYXRoXCQkcnVucGF0aF92YXJcIiAiCisJZmkKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRub19pbnN0YWxsIiA9IHllczsgdGhlbgorCSMgV2UgZG9uJ3QgbmVlZCB0byBjcmVhdGUgYSB3cmFwcGVyIHNjcmlwdC4KKwlsaW5rX2NvbW1hbmQ9IiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKKwkjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisJbGlua19jb21tYW5kPWAkRUNITyAiWCRsaW5rX2NvbW1hbmQiIHwgJFhzZWQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZydgCisJIyBEZWxldGUgdGhlIG9sZCBvdXRwdXQgZmlsZS4KKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRvdXRwdXQKKwkjIExpbmsgdGhlIGV4ZWN1dGFibGUgYW5kIGV4aXQKKwlmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXQgJD8nCisJZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uIiA9IHJlbGluazsgdGhlbgorCSMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAorCWxpbmtfY29tbWFuZD0iJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgorCXJlbGlua19jb21tYW5kPSIkZmluYWxpemVfdmFyJGZpbmFsaXplX2NvbW1hbmQkZmluYWxpemVfcnBhdGgiCisKKwlmdW5jX3dhcm5pbmcgInRoaXMgcGxhdGZvcm0gZG9lcyBub3QgbGlrZSB1bmluc3RhbGxlZCBzaGFyZWQgbGlicmFyaWVzIgorCWZ1bmNfd2FybmluZyAiXGAkb3V0cHV0JyB3aWxsIGJlIHJlbGlua2VkIGR1cmluZyBpbnN0YWxsYXRpb24iCisgICAgICBlbHNlCisJaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgIT0gbm87IHRoZW4KKwkgIGxpbmtfY29tbWFuZD0iJGZpbmFsaXplX3ZhciRjb21waWxlX2NvbW1hbmQkZmluYWxpemVfcnBhdGgiCisJICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllczsgdGhlbgorCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIlgkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiIHwgJFhzZWQgLWUgJ3MlQE9VVFBVVEAlXCRwcm9nZGlyL1wkZmlsZSVnJ2AKKwkgIGVsc2UKKwkgICAgIyBmYXN0X2luc3RhbGwgaXMgc2V0IHRvIG5lZWRsZXNzCisJICAgIHJlbGlua19jb21tYW5kPQorCSAgZmkKKwllbHNlCisJICBsaW5rX2NvbW1hbmQ9IiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKKwkgIHJlbGlua19jb21tYW5kPSIkZmluYWxpemVfdmFyJGZpbmFsaXplX2NvbW1hbmQkZmluYWxpemVfcnBhdGgiCisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KKyAgICAgIGxpbmtfY29tbWFuZD1gJEVDSE8gIlgkbGlua19jb21tYW5kIiB8ICRYc2VkIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiJyVnJ2AKKworICAgICAgIyBEZWxldGUgdGhlIG9sZCBvdXRwdXQgZmlsZXMuCisgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRvdXRwdXQgJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUgJG91dHB1dF9vYmpkaXIvbHQtJG91dHB1dG5hbWUKKworICAgICAgZnVuY19zaG93X2V2YWwgIiRsaW5rX2NvbW1hbmQiICdleGl0ICQ/JworCisgICAgICAjIE5vdyBjcmVhdGUgdGhlIHdyYXBwZXIgc2NyaXB0LgorICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0IgorCisgICAgICAjIFF1b3RlIHRoZSByZWxpbmsgY29tbWFuZCBmb3Igc2hpcHBpbmcuCisgICAgICBpZiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJIyBQcmVzZXJ2ZSBhbnkgdmFyaWFibGVzIHRoYXQgbWF5IGFmZmVjdCBjb21waWxlciBiZWhhdmlvcgorCWZvciB2YXIgaW4gJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rOyBkbworCSAgaWYgZXZhbCB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCI7IHRoZW4KKwkgICAgcmVsaW5rX2NvbW1hbmQ9InsgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiIHx8ICRsdF91bnNldCAkdmFyIHx8IHsgJHZhcj07IGV4cG9ydCAkdmFyOyB9OyB9OyAkcmVsaW5rX2NvbW1hbmQiCisJICBlbGlmIGV2YWwgdmFyX3ZhbHVlPVwkJHZhcjsgdGVzdCAteiAiJHZhcl92YWx1ZSI7IHRoZW4KKwkgICAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorCSAgZWxzZQorCSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkdmFyX3ZhbHVlIgorCSAgICByZWxpbmtfY29tbWFuZD0iJHZhcj0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQ7IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCisJICBmaQorCWRvbmUKKwlyZWxpbmtfY29tbWFuZD0iKGNkIGBwd2RgOyAkcmVsaW5rX2NvbW1hbmQpIgorCXJlbGlua19jb21tYW5kPWAkRUNITyAiWCRyZWxpbmtfY29tbWFuZCIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgICBmaQorCisgICAgICAjIFF1b3RlICRFQ0hPIGZvciBzaGlwcGluZy4KKyAgICAgIGlmIHRlc3QgIlgkRUNITyIgPSAiWCRTSEVMTCAkcHJvZ3BhdGggLS1mYWxsYmFjay1lY2hvIjsgdGhlbgorCWNhc2UgJHByb2dwYXRoIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBxZWNobz0iJFNIRUxMICRwcm9ncGF0aCAtLWZhbGxiYWNrLWVjaG8iOzsKKwkqKSBxZWNobz0iJFNIRUxMIGBwd2RgLyRwcm9ncGF0aCAtLWZhbGxiYWNrLWVjaG8iOzsKKwllc2FjCisJcWVjaG89YCRFQ0hPICJYJHFlY2hvIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAgIGVsc2UKKwlxZWNobz1gJEVDSE8gIlgkRUNITyIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgICBmaQorCisgICAgICAjIE9ubHkgYWN0dWFsbHkgZG8gdGhpbmdzIGlmIG5vdCBpbiBkcnkgcnVuIG1vZGUuCisgICAgICAkb3B0X2RyeV9ydW4gfHwgeworCSMgd2luMzIgd2lsbCB0aGluayB0aGUgc2NyaXB0IGlzIGEgYmluYXJ5IGlmIGl0IGhhcworCSMgYSAuZXhlIHN1ZmZpeCwgc28gd2Ugc3RyaXAgaXQgb2ZmIGhlcmUuCisJY2FzZSAkb3V0cHV0IGluCisJICAqLmV4ZSkgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkb3V0cHV0IgorCSAgICAgICAgIG91dHB1dD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisJZXNhYworCSMgdGVzdCBmb3IgY3lnd2luIGJlY2F1c2UgbXYgZmFpbHMgdy9vIC5leGUgZXh0ZW5zaW9ucworCWNhc2UgJGhvc3QgaW4KKwkgICpjeWd3aW4qKQorCSAgICBleGVleHQ9LmV4ZQorCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRvdXRwdXRuYW1lIgorCSAgICBvdXRwdXRuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKwkgICopIGV4ZWV4dD0gOzsKKwllc2FjCisJY2FzZSAkaG9zdCBpbgorCSAgKmN5Z3dpbiogfCAqbWluZ3cqICkKKwkgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJG91dHB1dCIgIiIgIi4iCisJICAgIG91dHB1dF9uYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCSAgICBvdXRwdXRfcGF0aD0kZnVuY19kaXJuYW1lX3Jlc3VsdAorCSAgICBjd3JhcHBlcnNvdXJjZT0iJG91dHB1dF9wYXRoLyRvYmpkaXIvbHQtJG91dHB1dF9uYW1lLmMiCisJICAgIGN3cmFwcGVyPSIkb3V0cHV0X3BhdGgvJG91dHB1dF9uYW1lLmV4ZSIKKwkgICAgJFJNICRjd3JhcHBlcnNvdXJjZSAkY3dyYXBwZXIKKwkgICAgdHJhcCAiJFJNICRjd3JhcHBlcnNvdXJjZSAkY3dyYXBwZXI7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1CisKKwkgICAgZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYyA+ICRjd3JhcHBlcnNvdXJjZQorCisJICAgICMgVGhlIHdyYXBwZXIgZXhlY3V0YWJsZSBpcyBidWlsdCB1c2luZyB0aGUgJGhvc3QgY29tcGlsZXIsCisJICAgICMgYmVjYXVzZSBpdCBjb250YWlucyAkaG9zdCBwYXRocyBhbmQgZmlsZXMuIElmIGNyb3NzLQorCSAgICAjIGNvbXBpbGluZywgaXQsIGxpa2UgdGhlIHRhcmdldCBleGVjdXRhYmxlLCBtdXN0IGJlCisJICAgICMgZXhlY3V0ZWQgb24gdGhlICRob3N0IG9yIHVuZGVyIGFuIGVtdWxhdGlvbiBlbnZpcm9ubWVudC4KKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICAkTFRDQyAkTFRDRkxBR1MgLW8gJGN3cmFwcGVyICRjd3JhcHBlcnNvdXJjZQorCSAgICAgICRTVFJJUCAkY3dyYXBwZXIKKwkgICAgfQorCisJICAgICMgTm93LCBjcmVhdGUgdGhlIHdyYXBwZXIgc2NyaXB0IGZvciBmdW5jX3NvdXJjZSB1c2U6CisJICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgJGN3cmFwcGVyCisJICAgICRSTSAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgdHJhcCAiJFJNICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdDsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICAjIG5vdGU6IHRoaXMgc2NyaXB0IHdpbGwgbm90IGJlIGV4ZWN1dGVkLCBzbyBkbyBub3QgY2htb2QuCisJICAgICAgaWYgdGVzdCAieCRidWlsZCIgPSAieCRob3N0IiA7IHRoZW4KKwkJJGN3cmFwcGVyIC0tbHQtZHVtcC1zY3JpcHQgPiAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgICBlbHNlCisJCWZ1bmNfZW1pdF93cmFwcGVyIG5vID4gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgICAgZmkKKwkgICAgfQorCSAgOzsKKwkgICogKQorCSAgICAkUk0gJG91dHB1dAorCSAgICB0cmFwICIkUk0gJG91dHB1dDsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKKworCSAgICBmdW5jX2VtaXRfd3JhcHBlciBubyA+ICRvdXRwdXQKKwkgICAgY2htb2QgK3ggJG91dHB1dAorCSAgOzsKKwllc2FjCisgICAgICB9CisgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBTZWUgaWYgd2UgbmVlZCB0byBidWlsZCBhbiBvbGQtZmFzaGlvbmVkIGFyY2hpdmUuCisgICAgZm9yIG9sZGxpYiBpbiAkb2xkbGliczsgZG8KKworICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBjb252ZW5pZW5jZTsgdGhlbgorCW9sZG9ianM9IiRsaWJvYmpzX3NhdmUgJHN5bWZpbGVvYmoiCisJYWRkbGlicz0iJGNvbnZlbmllbmNlIgorCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworICAgICAgZWxzZQorCWlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbW9kdWxlOyB0aGVuCisJICBvbGRvYmpzPSIkbGlib2Jqc19zYXZlIgorCSAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisJZWxzZQorCSAgb2xkb2Jqcz0iJG9sZF9kZXBsaWJzICRub25fcGljX29iamVjdHMiCisJICBpZiB0ZXN0ICIkcHJlbG9hZCIgPSB5ZXMgJiYgdGVzdCAtZiAiJHN5bWZpbGVvYmoiOyB0aGVuCisJICAgIG9sZG9ianM9IiRvbGRvYmpzICRzeW1maWxlb2JqIgorCSAgZmkKKwlmaQorCWFkZGxpYnM9IiRvbGRfY29udmVuaWVuY2UiCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkYWRkbGlicyI7IHRoZW4KKwlnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCWdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorCisJZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGFkZGxpYnMKKwlvbGRvYmpzPSIkb2xkb2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKyAgICAgIGZpCisKKyAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgorICAgICAgaWYgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMiICYmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJY21kcz0kb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcworICAgICAgZWxzZQorCisJIyBBZGQgYW55IG9iamVjdHMgZnJvbSBwcmVsb2FkZWQgY29udmVuaWVuY2UgbGlicmFyaWVzCisJaWYgdGVzdCAtbiAiJGRscHJlZmlsZXMiOyB0aGVuCisJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCSAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisKKwkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRkbHByZWZpbGVzCisJICBvbGRvYmpzPSIkb2xkb2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwlmaQorCisJIyBQT1NJWCBkZW1hbmRzIG5vIHBhdGhzIHRvIGJlIGVuY29kZWQgaW4gYXJjaGl2ZXMuICBXZSBoYXZlCisJIyB0byBhdm9pZCBjcmVhdGluZyBhcmNoaXZlcyB3aXRoIGR1cGxpY2F0ZSBiYXNlbmFtZXMgaWYgd2UKKwkjIG1pZ2h0IGhhdmUgdG8gZXh0cmFjdCB0aGVtIGFmdGVyd2FyZHMsIGUuZy4sIHdoZW4gY3JlYXRpbmcgYQorCSMgc3RhdGljIGFyY2hpdmUgb3V0IG9mIGEgY29udmVuaWVuY2UgbGlicmFyeSwgb3Igd2hlbiBsaW5raW5nCisJIyB0aGUgZW50aXJldHkgb2YgYSBsaWJ0b29sIGFyY2hpdmUgaW50byBhbm90aGVyIChjdXJyZW50bHkKKwkjIG5vdCBzdXBwb3J0ZWQgYnkgbGlidG9vbCkuCisJaWYgKGZvciBvYmogaW4gJG9sZG9ianMKKwkgICAgZG8KKwkgICAgICBmdW5jX2Jhc2VuYW1lICIkb2JqIgorCSAgICAgICRFQ0hPICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAgIGRvbmUgfCBzb3J0IHwgc29ydCAtdWMgPi9kZXYvbnVsbCAyPiYxKTsgdGhlbgorCSAgOgorCWVsc2UKKwkgICRFQ0hPICJjb3B5aW5nIHNlbGVjdGVkIG9iamVjdCBmaWxlcyB0byBhdm9pZCBiYXNlbmFtZSBjb25mbGljdHMuLi4iCisJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCSAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisJICBmdW5jX21rZGlyX3AgIiRnZW50b3AiCisJICBzYXZlX29sZG9ianM9JG9sZG9ianMKKwkgIG9sZG9ianM9CisJICBjb3VudGVyPTEKKwkgIGZvciBvYmogaW4gJHNhdmVfb2xkb2JqcworCSAgZG8KKwkgICAgZnVuY19iYXNlbmFtZSAiJG9iaiIKKwkgICAgb2JqYmFzZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgICBjYXNlICIgJG9sZG9ianMgIiBpbgorCSAgICAiICIpIG9sZG9ianM9JG9iaiA7OworCSAgICAqW1wgL10iJG9iamJhc2UgIiopCisJICAgICAgd2hpbGUgOjsgZG8KKwkJIyBNYWtlIHN1cmUgd2UgZG9uJ3QgcGljayBhbiBhbHRlcm5hdGUgbmFtZSB0aGF0IGFsc28KKwkJIyBvdmVybGFwcy4KKwkJbmV3b2JqPWx0JGNvdW50ZXItJG9iamJhc2UKKwkJZnVuY19hcml0aCAkY291bnRlciArIDEKKwkJY291bnRlcj0kZnVuY19hcml0aF9yZXN1bHQKKwkJY2FzZSAiICRvbGRvYmpzICIgaW4KKwkJKltcIC9dIiRuZXdvYmogIiopIDs7CisJCSopIGlmIHRlc3QgISAtZiAiJGdlbnRvcC8kbmV3b2JqIjsgdGhlbiBicmVhazsgZmkgOzsKKwkJZXNhYworCSAgICAgIGRvbmUKKwkgICAgICBmdW5jX3Nob3dfZXZhbCAibG4gJG9iaiAkZ2VudG9wLyRuZXdvYmogfHwgY3AgJG9iaiAkZ2VudG9wLyRuZXdvYmoiCisJICAgICAgb2xkb2Jqcz0iJG9sZG9ianMgJGdlbnRvcC8kbmV3b2JqIgorCSAgICAgIDs7CisJICAgICopIG9sZG9ianM9IiRvbGRvYmpzICRvYmoiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwlmaQorCWV2YWwgY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKKworCWZ1bmNfbGVuICIgJGNtZHMiCisJbGVuPSRmdW5jX2xlbl9yZXN1bHQKKwlpZiB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KKwkgIGNtZHM9JG9sZF9hcmNoaXZlX2NtZHMKKwllbHNlCisJICAjIHRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gbGluayBpbiBvbmUgc3RlcCwgbGluayBpbiBwYXJ0cworCSAgZnVuY192ZXJib3NlICJ1c2luZyBwaWVjZXdpc2UgYXJjaGl2ZSBsaW5raW5nLi4uIgorCSAgc2F2ZV9SQU5MSUI9JFJBTkxJQgorCSAgUkFOTElCPToKKwkgIG9iamxpc3Q9CisJICBjb25jYXRfY21kcz0KKwkgIHNhdmVfb2xkb2Jqcz0kb2xkb2JqcworCSAgb2xkb2Jqcz0KKwkgICMgSXMgdGhlcmUgYSBiZXR0ZXIgd2F5IG9mIGZpbmRpbmcgdGhlIGxhc3Qgb2JqZWN0IGluIHRoZSBsaXN0PworCSAgZm9yIG9iaiBpbiAkc2F2ZV9vbGRvYmpzCisJICBkbworCSAgICBsYXN0X29sZG9iaj0kb2JqCisJICBkb25lCisJICBldmFsIHRlc3RfY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKKwkgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIKKwkgIGxlbjA9JGZ1bmNfbGVuX3Jlc3VsdAorCSAgbGVuPSRsZW4wCisJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKKwkgIGRvCisJICAgIGZ1bmNfbGVuICIgJG9iaiIKKwkgICAgZnVuY19hcml0aCAkbGVuICsgJGZ1bmNfbGVuX3Jlc3VsdAorCSAgICBsZW49JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGZ1bmNfYXBwZW5kIG9iamxpc3QgIiAkb2JqIgorCSAgICBpZiB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiI7IHRoZW4KKwkgICAgICA6CisJICAgIGVsc2UKKwkgICAgICAjIHRoZSBhYm92ZSBjb21tYW5kIHNob3VsZCBiZSB1c2VkIGJlZm9yZSBpdCBnZXRzIHRvbyBsb25nCisJICAgICAgb2xkb2Jqcz0kb2JqbGlzdAorCSAgICAgIGlmIHRlc3QgIiRvYmoiID0gIiRsYXN0X29sZG9iaiIgOyB0aGVuCisJCVJBTkxJQj0kc2F2ZV9SQU5MSUIKKwkgICAgICBmaQorCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgorCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kb2xkX2FyY2hpdmVfY21kc1wiCisJICAgICAgb2JqbGlzdD0KKwkgICAgICBsZW49JGxlbjAKKwkgICAgZmkKKwkgIGRvbmUKKwkgIFJBTkxJQj0kc2F2ZV9SQU5MSUIKKwkgIG9sZG9ianM9JG9iamxpc3QKKwkgIGlmIHRlc3QgIlgkb2xkb2JqcyIgPSAiWCIgOyB0aGVuCisJICAgIGV2YWwgY21kcz1cIlwkY29uY2F0X2NtZHNcIgorCSAgZWxzZQorCSAgICBldmFsIGNtZHM9XCJcJGNvbmNhdF9jbWRzflwkb2xkX2FyY2hpdmVfY21kc1wiCisJICBmaQorCWZpCisgICAgICBmaQorICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRjbWRzIiAnZXhpdCAkPycKKyAgICBkb25lCisKKyAgICB0ZXN0IC1uICIkZ2VuZXJhdGVkIiAmJiBcCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJHtSTX1yJGdlbmVyYXRlZCIKKworICAgICMgTm93IGNyZWF0ZSB0aGUgbGlidG9vbCBhcmNoaXZlLgorICAgIGNhc2UgJG91dHB1dCBpbgorICAgICoubGEpCisgICAgICBvbGRfbGlicmFyeT0KKyAgICAgIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgJiYgb2xkX2xpYnJhcnk9IiRsaWJuYW1lLiRsaWJleHQiCisgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXQiCisKKyAgICAgICMgUHJlc2VydmUgYW55IHZhcmlhYmxlcyB0aGF0IG1heSBhZmZlY3QgY29tcGlsZXIgYmVoYXZpb3IKKyAgICAgIGZvciB2YXIgaW4gJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rOyBkbworCWlmIGV2YWwgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiOyB0aGVuCisJICByZWxpbmtfY29tbWFuZD0ieyB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCIgfHwgJGx0X3Vuc2V0ICR2YXIgfHwgeyAkdmFyPTsgZXhwb3J0ICR2YXI7IH07IH07ICRyZWxpbmtfY29tbWFuZCIKKwllbGlmIGV2YWwgdmFyX3ZhbHVlPVwkJHZhcjsgdGVzdCAteiAiJHZhcl92YWx1ZSI7IHRoZW4KKwkgIHJlbGlua19jb21tYW5kPSIkdmFyPTsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwllbHNlCisJICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkdmFyX3ZhbHVlIgorCSAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorCWZpCisgICAgICBkb25lCisgICAgICAjIFF1b3RlIHRoZSBsaW5rIGNvbW1hbmQgZm9yIHNoaXBwaW5nLgorICAgICAgcmVsaW5rX2NvbW1hbmQ9IihjZCBgcHdkYDsgJFNIRUxMICRwcm9ncGF0aCAkcHJlc2VydmVfYXJncyAtLW1vZGU9cmVsaW5rICRsaWJ0b29sX2FyZ3MgQGluc3RfcHJlZml4X2RpckApIgorICAgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICJYJHJlbGlua19jb21tYW5kIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9hdXRvbWF0aWMiID0geWVzIDsgdGhlbgorCXJlbGlua19jb21tYW5kPQorICAgICAgZmkKKworICAgICAgIyBPbmx5IGNyZWF0ZSB0aGUgb3V0cHV0IGlmIG5vdCBhIGRyeSBydW4uCisgICAgICAkb3B0X2RyeV9ydW4gfHwgeworCWZvciBpbnN0YWxsZWQgaW4gbm8geWVzOyBkbworCSAgaWYgdGVzdCAiJGluc3RhbGxlZCIgPSB5ZXM7IHRoZW4KKwkgICAgaWYgdGVzdCAteiAiJGluc3RhbGxfbGliZGlyIjsgdGhlbgorCSAgICAgIGJyZWFrCisJICAgIGZpCisJICAgIG91dHB1dD0iJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiaQorCSAgICAjIFJlcGxhY2UgYWxsIHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzIHdpdGggdGhlIGluc3RhbGxlZCBvbmVzCisJICAgIG5ld2RlcGVuZGVuY3lfbGlicz0KKwkgICAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICAgIGNhc2UgJGRlcGxpYiBpbgorCSAgICAgICoubGEpCisJCWZ1bmNfYmFzZW5hbWUgIiRkZXBsaWIiCisJCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkJZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKKwkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCQluZXdkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMgJGxpYmRpci8kbmFtZSIKKwkJOzsKKwkgICAgICAqKSBuZXdkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMgJGRlcGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBuZXdkbGZpbGVzPQorCisJICAgIGZvciBsaWIgaW4gJGRsZmlsZXM7IGRvCisJICAgICAgY2FzZSAkbGliIGluCisJICAgICAgKi5sYSkKKwkgICAgICAgIGZ1bmNfYmFzZW5hbWUgIiRsaWIiCisJCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkJZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGxpYmAKKwkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCQluZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkbGliZGlyLyRuYW1lIgorCQk7OworCSAgICAgICopIG5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRsaWIiIDs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorCSAgICBuZXdkbHByZWZpbGVzPQorCSAgICBmb3IgbGliIGluICRkbHByZWZpbGVzOyBkbworCSAgICAgIGNhc2UgJGxpYiBpbgorCSAgICAgICoubGEpCisJCSMgT25seSBwYXNzIHByZW9wZW5lZCBmaWxlcyB0byB0aGUgcHNldWRvLWFyY2hpdmUgKGZvcgorCQkjIGV2ZW50dWFsIGxpbmtpbmcgd2l0aCB0aGUgYXBwLiB0aGF0IGxpbmtzIGl0KSBpZiB3ZQorCQkjIGRpZG4ndCBhbHJlYWR5IGxpbmsgdGhlIHByZW9wZW5lZCBvYmplY3RzIGRpcmVjdGx5IGludG8KKwkJIyB0aGUgbGlicmFyeToKKwkJZnVuY19iYXNlbmFtZSAiJGxpYiIKKwkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCW5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRsaWJkaXIvJG5hbWUiCisJCTs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIGRscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzIgorCSAgZWxzZQorCSAgICBuZXdkbGZpbGVzPQorCSAgICBmb3IgbGliIGluICRkbGZpbGVzOyBkbworCSAgICAgIGNhc2UgJGxpYiBpbgorCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFicz0iJGxpYiIgOzsKKwkJKikgYWJzPWBwd2RgIi8kbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgICBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkYWJzIgorCSAgICBkb25lCisJICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorCSAgICBuZXdkbHByZWZpbGVzPQorCSAgICBmb3IgbGliIGluICRkbHByZWZpbGVzOyBkbworCSAgICAgIGNhc2UgJGxpYiBpbgorCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFicz0iJGxpYiIgOzsKKwkJKikgYWJzPWBwd2RgIi8kbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkYWJzIgorCSAgICBkb25lCisJICAgIGRscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzIgorCSAgZmkKKwkgICRSTSAkb3V0cHV0CisJICAjIHBsYWNlIGRsbmFtZSBpbiBjb3JyZWN0IHBvc2l0aW9uIGZvciBjeWd3aW4KKwkgIHRkbG5hbWU9JGRsbmFtZQorCSAgY2FzZSAkaG9zdCwkb3V0cHV0LCRpbnN0YWxsZWQsJG1vZHVsZSwkZGxuYW1lIGluCisJICAgICpjeWd3aW4qLCpsYWkseWVzLG5vLCouZGxsIHwgKm1pbmd3KiwqbGFpLHllcyxubywqLmRsbCB8ICpjZWdjYyosKmxhaSx5ZXMsbm8sKi5kbGwpIHRkbG5hbWU9Li4vYmluLyRkbG5hbWUgOzsKKwkgIGVzYWMKKwkgICRFQ0hPID4gJG91dHB1dCAiXAorIyAkb3V0cHV0bmFtZSAtIGEgbGlidG9vbCBsaWJyYXJ5IGZpbGUKKyMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIworIyBQbGVhc2UgRE8gTk9UIGRlbGV0ZSB0aGlzIGZpbGUhCisjIEl0IGlzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyB0aGUgbGlicmFyeS4KKworIyBUaGUgbmFtZSB0aGF0IHdlIGNhbiBkbG9wZW4oMykuCitkbG5hbWU9JyR0ZGxuYW1lJworCisjIE5hbWVzIG9mIHRoaXMgbGlicmFyeS4KK2xpYnJhcnlfbmFtZXM9JyRsaWJyYXJ5X25hbWVzJworCisjIFRoZSBuYW1lIG9mIHRoZSBzdGF0aWMgYXJjaGl2ZS4KK29sZF9saWJyYXJ5PSckb2xkX2xpYnJhcnknCisKKyMgTGlua2VyIGZsYWdzIHRoYXQgY2FuIG5vdCBnbyBpbiBkZXBlbmRlbmN5X2xpYnMuCitpbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSckbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MnCisKKyMgTGlicmFyaWVzIHRoYXQgdGhpcyBvbmUgZGVwZW5kcyB1cG9uLgorZGVwZW5kZW5jeV9saWJzPSckZGVwZW5kZW5jeV9saWJzJworCisjIE5hbWVzIG9mIGFkZGl0aW9uYWwgd2VhayBsaWJyYXJpZXMgcHJvdmlkZWQgYnkgdGhpcyBsaWJyYXJ5Cit3ZWFrX2xpYnJhcnlfbmFtZXM9JyR3ZWFrX2xpYnMnCisKKyMgVmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgJGxpYm5hbWUuCitjdXJyZW50PSRjdXJyZW50CithZ2U9JGFnZQorcmV2aXNpb249JHJldmlzaW9uCisKKyMgSXMgdGhpcyBhbiBhbHJlYWR5IGluc3RhbGxlZCBsaWJyYXJ5PworaW5zdGFsbGVkPSRpbnN0YWxsZWQKKworIyBTaG91bGQgd2Ugd2FybiBhYm91dCBwb3J0YWJpbGl0eSB3aGVuIGxpbmtpbmcgYWdhaW5zdCAtbW9kdWxlcz8KK3Nob3VsZG5vdGxpbms9JG1vZHVsZQorCisjIEZpbGVzIHRvIGRsb3Blbi9kbHByZW9wZW4KK2Rsb3Blbj0nJGRsZmlsZXMnCitkbHByZW9wZW49JyRkbHByZWZpbGVzJworCisjIERpcmVjdG9yeSB0aGF0IHRoaXMgbGlicmFyeSBuZWVkcyB0byBiZSBpbnN0YWxsZWQgaW46CitsaWJkaXI9JyRpbnN0YWxsX2xpYmRpciciCisJICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IG5vICYmIHRlc3QgIiRuZWVkX3JlbGluayIgPSB5ZXM7IHRoZW4KKwkgICAgJEVDSE8gPj4gJG91dHB1dCAiXAorcmVsaW5rX2NvbW1hbmQ9XCIkcmVsaW5rX2NvbW1hbmRcIiIKKwkgIGZpCisJZG9uZQorICAgICAgfQorCisgICAgICAjIERvIGEgc3ltYm9saWMgbGluayBzbyB0aGF0IHRoZSBsaWJ0b29sIGFyY2hpdmUgY2FuIGJlIGZvdW5kIGluCisgICAgICAjIExEX0xJQlJBUllfUEFUSCBiZWZvcmUgdGhlIHByb2dyYW0gaXMgaW5zdGFsbGVkLgorICAgICAgZnVuY19zaG93X2V2YWwgJyggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiAkUk0gIiRvdXRwdXRuYW1lIiAmJiAkTE5fUyAiLi4vJG91dHB1dG5hbWUiICIkb3V0cHV0bmFtZSIgKScgJ2V4aXQgJD8nCisgICAgICA7OworICAgIGVzYWMKKyAgICBleGl0ICRFWElUX1NVQ0NFU1MKK30KKworeyB0ZXN0ICIkbW9kZSIgPSBsaW5rIHx8IHRlc3QgIiRtb2RlIiA9IHJlbGluazsgfSAmJgorICAgIGZ1bmNfbW9kZV9saW5rICR7MSsiJEAifQorCisKKyMgZnVuY19tb2RlX3VuaW5zdGFsbCBhcmcuLi4KK2Z1bmNfbW9kZV91bmluc3RhbGwgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgUk09IiRub25vcHQiCisgICAgZmlsZXM9CisgICAgcm1mb3JjZT0KKyAgICBleGl0X3N0YXR1cz0wCisKKyAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHZhcmlhYmxlcyByYXRoZXIKKyAgICAjIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KKyAgICBsaWJ0b29sX2luc3RhbGxfbWFnaWM9IiRtYWdpYyIKKworICAgIGZvciBhcmcKKyAgICBkbworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtZikgUk09IiRSTSAkYXJnIjsgcm1mb3JjZT15ZXMgOzsKKyAgICAgIC0qKSBSTT0iJFJNICRhcmciIDs7CisgICAgICAqKSBmaWxlcz0iJGZpbGVzICRhcmciIDs7CisgICAgICBlc2FjCisgICAgZG9uZQorCisgICAgdGVzdCAteiAiJFJNIiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYW4gUk0gcHJvZ3JhbSIKKworICAgIHJtZGlycz0KKworICAgIG9yaWdvYmpkaXI9IiRvYmpkaXIiCisgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbworICAgICAgZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCisgICAgICBkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorICAgICAgaWYgdGVzdCAiWCRkaXIiID0gWC47IHRoZW4KKwlvYmpkaXI9IiRvcmlnb2JqZGlyIgorICAgICAgZWxzZQorCW9iamRpcj0iJGRpci8kb3JpZ29iamRpciIKKyAgICAgIGZpCisgICAgICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKyAgICAgIG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICAgIHRlc3QgIiRtb2RlIiA9IHVuaW5zdGFsbCAmJiBvYmpkaXI9IiRkaXIiCisKKyAgICAgICMgUmVtZW1iZXIgb2JqZGlyIGZvciByZW1vdmFsIGxhdGVyLCBiZWluZyBjYXJlZnVsIHRvIGF2b2lkIGR1cGxpY2F0ZXMKKyAgICAgIGlmIHRlc3QgIiRtb2RlIiA9IGNsZWFuOyB0aGVuCisJY2FzZSAiICRybWRpcnMgIiBpbgorCSAgKiIgJG9iamRpciAiKikgOzsKKwkgICopIHJtZGlycz0iJHJtZGlycyAkb2JqZGlyIiA7OworCWVzYWMKKyAgICAgIGZpCisKKyAgICAgICMgRG9uJ3QgZXJyb3IgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCBhbmQgcm0gLWYgd2FzIHVzZWQuCisgICAgICBpZiB7IHRlc3QgLUwgIiRmaWxlIjsgfSA+L2Rldi9udWxsIDI+JjEgfHwKKwkgeyB0ZXN0IC1oICIkZmlsZSI7IH0gPi9kZXYvbnVsbCAyPiYxIHx8CisJIHRlc3QgLWYgIiRmaWxlIjsgdGhlbgorCToKKyAgICAgIGVsaWYgdGVzdCAtZCAiJGZpbGUiOyB0aGVuCisJZXhpdF9zdGF0dXM9MQorCWNvbnRpbnVlCisgICAgICBlbGlmIHRlc3QgIiRybWZvcmNlIiA9IHllczsgdGhlbgorCWNvbnRpbnVlCisgICAgICBmaQorCisgICAgICBybWZpbGVzPSIkZmlsZSIKKworICAgICAgY2FzZSAkbmFtZSBpbgorICAgICAgKi5sYSkKKwkjIFBvc3NpYmx5IGEgbGlidG9vbCBhcmNoaXZlLCBzbyB2ZXJpZnkgaXQuCisJaWYgZnVuY19sYWxpYl9wICIkZmlsZSI7IHRoZW4KKwkgIGZ1bmNfc291cmNlICRkaXIvJG5hbWUKKworCSAgIyBEZWxldGUgdGhlIGxpYnRvb2wgbGlicmFyaWVzIGFuZCBzeW1saW5rcy4KKwkgIGZvciBuIGluICRsaWJyYXJ5X25hbWVzOyBkbworCSAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRuIgorCSAgZG9uZQorCSAgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRvbGRfbGlicmFyeSIKKworCSAgY2FzZSAiJG1vZGUiIGluCisJICBjbGVhbikKKwkgICAgY2FzZSAiICAkbGlicmFyeV9uYW1lcyAiIGluCisJICAgICMgIiAgIiBpbiB0aGUgYmVnaW5uaW5nIGNhdGNoZXMgZW1wdHkgJGRsbmFtZQorCSAgICAqIiAkZGxuYW1lICIqKSA7OworCSAgICAqKSBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRkbG5hbWUiIDs7CisJICAgIGVzYWMKKwkgICAgdGVzdCAtbiAiJGxpYmRpciIgJiYgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kbmFtZSAkb2JqZGlyLyR7bmFtZX1pIgorCSAgICA7OworCSAgdW5pbnN0YWxsKQorCSAgICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyI7IHRoZW4KKwkgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdHVuaW5zdGFsbCBjb21tYW5kcy4KKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3R1bmluc3RhbGxfY21kcyIgJ3Rlc3QgIiRybWZvcmNlIiA9IHllcyB8fCBleGl0X3N0YXR1cz0xJworCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgb2xkX3Bvc3R1bmluc3RhbGwgY29tbWFuZHMuCisJICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIiAndGVzdCAiJHJtZm9yY2UiID0geWVzIHx8IGV4aXRfc3RhdHVzPTEnCisJICAgIGZpCisJICAgICMgRklYTUU6IHNob3VsZCByZWluc3RhbGwgdGhlIGJlc3QgcmVtYWluaW5nIHNoYXJlZCBsaWJyYXJ5LgorCSAgICA7OworCSAgZXNhYworCWZpCisJOzsKKworICAgICAgKi5sbykKKwkjIFBvc3NpYmx5IGEgbGlidG9vbCBvYmplY3QsIHNvIHZlcmlmeSBpdC4KKwlpZiBmdW5jX2xhbGliX3AgIiRmaWxlIjsgdGhlbgorCisJICAjIFJlYWQgdGhlIC5sbyBmaWxlCisJICBmdW5jX3NvdXJjZSAkZGlyLyRuYW1lCisKKwkgICMgQWRkIFBJQyBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gcmVtb3ZlLgorCSAgaWYgdGVzdCAtbiAiJHBpY19vYmplY3QiICYmCisJICAgICB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgICBybWZpbGVzPSIkcm1maWxlcyAkZGlyLyRwaWNfb2JqZWN0IgorCSAgZmkKKworCSAgIyBBZGQgbm9uLVBJQyBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gcmVtb3ZlLgorCSAgaWYgdGVzdCAtbiAiJG5vbl9waWNfb2JqZWN0IiAmJgorCSAgICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJICAgIHJtZmlsZXM9IiRybWZpbGVzICRkaXIvJG5vbl9waWNfb2JqZWN0IgorCSAgZmkKKwlmaQorCTs7CisKKyAgICAgICopCisJaWYgdGVzdCAiJG1vZGUiID0gY2xlYW4gOyB0aGVuCisJICBub2V4ZW5hbWU9JG5hbWUKKwkgIGNhc2UgJGZpbGUgaW4KKwkgICouZXhlKQorCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgorCSAgICBmaWxlPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkbmFtZSIKKwkgICAgbm9leGVuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgIyAkZmlsZSB3aXRoIC5leGUgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byBybWZpbGVzLAorCSAgICAjIGFkZCAkZmlsZSB3aXRob3V0IC5leGUKKwkgICAgcm1maWxlcz0iJHJtZmlsZXMgJGZpbGUiCisJICAgIDs7CisJICBlc2FjCisJICAjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyBhIGxpYnRvb2wgcHJvZ3JhbS4KKwkgIGlmIGZ1bmNfbHR3cmFwcGVyX3AgIiRmaWxlIjsgdGhlbgorCSAgICBpZiBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiRmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgorCSAgICAgIHJlbGlua19jb21tYW5kPQorCSAgICAgIGZ1bmNfc291cmNlICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICAgIHJtZmlsZXM9IiRybWZpbGVzICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdCIKKwkgICAgZWxzZQorCSAgICAgIHJlbGlua19jb21tYW5kPQorCSAgICAgIGZ1bmNfc291cmNlICRkaXIvJG5vZXhlbmFtZQorCSAgICBmaQorCisJICAgICMgbm90ZSAkbmFtZSBzdGlsbCBjb250YWlucyAuZXhlIGlmIGl0IHdhcyBpbiAkZmlsZSBvcmlnaW5hbGx5CisJICAgICMgYXMgZG9lcyB0aGUgdmVyc2lvbiBvZiAkZmlsZSB0aGF0IHdhcyBhZGRlZCBpbnRvICRybWZpbGVzCisJICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG5hbWUgJG9iamRpci8ke25hbWV9Uy4ke29iamV4dH0iCisJICAgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkgICAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyL2x0LSRuYW1lIgorCSAgICBmaQorCSAgICBpZiB0ZXN0ICJYJG5vZXhlbmFtZSIgIT0gIlgkbmFtZSIgOyB0aGVuCisJICAgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci9sdC0ke25vZXhlbmFtZX0uYyIKKwkgICAgZmkKKwkgIGZpCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgZnVuY19zaG93X2V2YWwgIiRSTSAkcm1maWxlcyIgJ2V4aXRfc3RhdHVzPTEnCisgICAgZG9uZQorICAgIG9iamRpcj0iJG9yaWdvYmpkaXIiCisKKyAgICAjIFRyeSB0byByZW1vdmUgdGhlICR7b2JqZGlyfXMgaW4gdGhlIGRpcmVjdG9yaWVzIHdoZXJlIHdlIGRlbGV0ZWQgZmlsZXMKKyAgICBmb3IgZGlyIGluICRybWRpcnM7IGRvCisgICAgICBpZiB0ZXN0IC1kICIkZGlyIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICJybWRpciAkZGlyID4vZGV2L251bGwgMj4mMSIKKyAgICAgIGZpCisgICAgZG9uZQorCisgICAgZXhpdCAkZXhpdF9zdGF0dXMKK30KKworeyB0ZXN0ICIkbW9kZSIgPSB1bmluc3RhbGwgfHwgdGVzdCAiJG1vZGUiID0gY2xlYW47IH0gJiYKKyAgICBmdW5jX21vZGVfdW5pbnN0YWxsICR7MSsiJEAifQorCit0ZXN0IC16ICIkbW9kZSIgJiYgeworICBoZWxwPSIkZ2VuZXJpY19oZWxwIgorICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBNT0RFIgorfQorCit0ZXN0IC16ICIkZXhlY19jbWQiICYmIFwKKyAgZnVuY19mYXRhbF9oZWxwICJpbnZhbGlkIG9wZXJhdGlvbiBtb2RlIFxgJG1vZGUnIgorCitpZiB0ZXN0IC1uICIkZXhlY19jbWQiOyB0aGVuCisgIGV2YWwgZXhlYyAiJGV4ZWNfY21kIgorICBleGl0ICRFWElUX0ZBSUxVUkUKK2ZpCisKK2V4aXQgJGV4aXRfc3RhdHVzCisKKworIyBUaGUgVEFHcyBiZWxvdyBhcmUgZGVmaW5lZCBzdWNoIHRoYXQgd2UgbmV2ZXIgZ2V0IGludG8gYSBzaXR1YXRpb24KKyMgaW4gd2hpY2ggd2UgZGlzYWJsZSBib3RoIGtpbmRzIG9mIGxpYnJhcmllcy4gIEdpdmVuIGNvbmZsaWN0aW5nCisjIGNob2ljZXMsIHdlIGdvIGZvciBhIHN0YXRpYyBsaWJyYXJ5LCB0aGF0IGlzIHRoZSBtb3N0IHBvcnRhYmxlLAorIyBzaW5jZSB3ZSBjYW4ndCB0ZWxsIHdoZXRoZXIgc2hhcmVkIGxpYnJhcmllcyB3ZXJlIGRpc2FibGVkIGJlY2F1c2UKKyMgdGhlIHVzZXIgYXNrZWQgZm9yIHRoYXQgb3IgYmVjYXVzZSB0aGUgcGxhdGZvcm0gZG9lc24ndCBzdXBwb3J0CisjIHRoZW0uICBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgb24gQUlYLCBiZWNhdXNlIHdlIGRvbid0CisjIHN1cHBvcnQgaGF2aW5nIGJvdGggc3RhdGljIGFuZCBzaGFyZWQgbGlicmFyaWVzIGVuYWJsZWQgYXQgdGhlIHNhbWUKKyMgdGltZSBvbiB0aGF0IHBsYXRmb3JtLCBzbyB3ZSBkZWZhdWx0IHRvIGEgc2hhcmVkLW9ubHkgY29uZmlndXJhdGlvbi4KKyMgSWYgYSBkaXNhYmxlLXNoYXJlZCB0YWcgaXMgZ2l2ZW4sIHdlJ2xsIGZhbGxiYWNrIHRvIGEgc3RhdGljLW9ubHkKKyMgY29uZmlndXJhdGlvbi4gIEJ1dCB3ZSdsbCBuZXZlciBnbyBmcm9tIHN0YXRpYy1vbmx5IHRvIHNoYXJlZC1vbmx5LgorCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc2hhcmVkCitidWlsZF9saWJ0b29sX2xpYnM9bm8KK2J1aWxkX29sZF9saWJzPXllcworIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zaGFyZWQKKworIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXN0YXRpYworYnVpbGRfb2xkX2xpYnM9YGNhc2UgJGJ1aWxkX2xpYnRvb2xfbGlicyBpbiB5ZXMpIGVjaG8gbm87OyAqKSBlY2hvIHllczs7IGVzYWNgCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXN0YXRpYworCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTpzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246MgorIyBFbmQ6CisjIHZpOnN3PTIKKwpkaWZmIC0tZ2l0IGEvbTQvTWFrZWZpbGUuYW0gYi9tNC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjg2NGUzCi0tLSAvZGV2L251bGwKKysrIGIvbTQvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSBAQAorRVhUUkFfRElTVCA9ICQod2lsZGNhcmQgKi5tNCkKZGlmZiAtLWdpdCBhL200L01ha2VmaWxlLmluIGIvbTQvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMxNWJmZAotLS0gL2Rldi9udWxsCisrKyBiL200L01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNTM3IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gbTQKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXB5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtc2NydWItaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOXyQoVikpCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF8kKFYpKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X2F0XzAgPSBACitTT1VSQ0VTID0KK0RJU1RfU09VUkNFUyA9CitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKK0NDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKK0NIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKK0NIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKK0NIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUiA9IEBEQVRBRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAorRExMVE9PTCA9IEBETExUT09MQAorRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKK0VSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACitFWEVFWFQgPSBARVhFRVhUQAorRkZMQUdTID0gQEZGTEFHU0AKK0ZHUkVQID0gQEZHUkVQQAorRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKK0dDT1YgPSBAR0NPVkAKK0dDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAorR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACitHTElCX0xJQlMgPSBAR0xJQl9MSUJTQAorR0xJQl9PTkxZX0NGTEFHUyA9IEBHTElCX09OTFlfQ0ZMQUdTQAorR0xJQl9PTkxZX0xJQlMgPSBAR0xJQl9PTkxZX0xJQlNACitHTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKK0dMSUJfUkVRID0gQEdMSUJfUkVRQAorR01QX0xJQlMgPSBAR01QX0xJQlNACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dSRVAgPSBAR1JFUEAKK0dTTF9MSUJTID0gQEdTTF9MSUJTQAorR1NUX0FHRSA9IEBHU1RfQUdFQAorR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACitHU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACitHU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAorR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKK0dTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAorR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORUAKK0dTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKK0dTVF9ESVNBQkxFX05FVF9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfTkVUX0RFRklORUAKK0dTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACitHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAorR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAorR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKK0dTVF9ESVNBQkxFX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkVACitHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACitHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACitHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORSA9IEBHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORUAKK0dTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAorR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACitHU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAorR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACitHU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKK0dTVF9NQUpPUk1JTk9SID0gQEdTVF9NQUpPUk1JTk9SQAorR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACitHU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACitHU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAorR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACitHU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACitHU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACitHU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAorR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAorR1NUX1BLR19ERVBTID0gQEdTVF9QS0dfREVQU0AKK0dTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACitHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FQAorR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORUAKK0dTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKK0dTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACitHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkUgPSBAR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FQAorR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKK0hBVkVfRE9DQk9PSzJIVE1MID0gQEhBVkVfRE9DQk9PSzJIVE1MQAorSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKK0hBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKK0hBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKK0hBVkVfRklHMkRFViA9IEBIQVZFX0ZJRzJERVZACitIQVZFX0dNUCA9IEBIQVZFX0dNUEAKK0hBVkVfR1NMID0gQEhBVkVfR1NMQAorSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKK0hBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKK0hBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACitIQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKK0hBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACitIT1NUX0NQVSA9IEBIT1NUX0NQVUAKK0hUTUxfRElSID0gQEhUTUxfRElSQAorSU5FVF9BVE9OX0xJQlMgPSBASU5FVF9BVE9OX0xJQlNACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCRElSID0gQExJQkRJUkAKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCTSA9IEBMSUJNQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTE9DQUxFRElSID0gQExPQ0FMRURJUkAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACitQQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAorUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKK1BBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAorUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BFUkxfUEFUSCA9IEBQRVJMX1BBVEhACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQTFVHSU5ESVIgPSBAUExVR0lORElSQAorUE9TVUIgPSBAUE9TVUJACitQUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAorVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAorVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACitXSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACitYTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKK1hTTFRQUk9DID0gQFhTTFRQUk9DQAorWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3BsdWdpbmRpciA9IEBwbHVnaW5kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorRVhUUkFfRElTVCA9ICQod2lsZGNhcmQgKi5tNCkKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IG00L01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251IG00L01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicwordGFnczogVEFHUworVEFHUzoKKworY3RhZ3M6IENUQUdTCitDVEFHUzoKKworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RkaXIgZHZpIFwKKwlkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gXAorCWluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBcCisJaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBcCisJaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgXAorCWluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbTQvY2hlY2stY2hlY2tzLm00IGIvbTQvY2hlY2stY2hlY2tzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOTk2Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9jaGVjay1jaGVja3MubTQKQEAgLTAsMCArMSw0MCBAQAorZG5sIENoZWNrIGZvciB0aGluZ3MgdGhhdCBjaGVjayBuZWVkcy93YW50cyBhbmQgdGhhdCB3ZSBkb24ndCBjaGVjayBmb3IgYWxyZWFkeQorZG5sIEFNX0dTVF9DSEVDS19DSEVDS1MoKQorCitBQ19ERUZVTihbQUdfR1NUX0NIRUNLX0NIRUNLU10sCitbCitBQ19NU0dfTk9USUNFKFtSdW5uaW5nIGNoZWNrIHVuaXQgdGVzdCBmcmFtZXdvcmsgY2hlY2tzIG5vdy4uLl0pCisKK0NIRUNLX01BSk9SX1ZFUlNJT049MAorQ0hFQ0tfTUlOT1JfVkVSU0lPTj05CitDSEVDS19NSUNST19WRVJTSU9OPTgKK0NIRUNLX1ZFUlNJT049JENIRUNLX01BSk9SX1ZFUlNJT04uJENIRUNLX01JTk9SX1ZFUlNJT04uJENIRUNLX01JQ1JPX1ZFUlNJT04KKworQUNfU1VCU1QoQ0hFQ0tfTUFKT1JfVkVSU0lPTikKK0FDX1NVQlNUKENIRUNLX01JTk9SX1ZFUlNJT04pCitBQ19TVUJTVChDSEVDS19NSUNST19WRVJTSU9OKQorQUNfU1VCU1QoQ0hFQ0tfVkVSU0lPTikKKworZG5sIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzIGFuZCBkZWNsYXJhdGlvbnMKK0FDX0NIRUNLX0hFQURFUlMoW3VuaXN0ZC5oIHN5cy93YWl0Lmggc3lzL3RpbWUuaF0pCisKK0FDX0NIRUNLX0ZVTkNTKFtsb2NhbHRpbWVfcl0pCisKKworZG5sIENyZWF0ZSBfc3RkaW50LmggaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkKK0FYX0NSRUFURV9TVERJTlRfSAorCitkbmwgRGlzYWJsZSBzdWJ1bml0IHN1cHBvcnQgZm9yIHRoZSB0aW1lIGJlaW5nCitlbmFibGVfc3VidW5pdD1mYWxzZQorCitpZiB0ZXN0IHhmYWxzZSA9IHgiJGVuYWJsZV9zdWJ1bml0IjsgdGhlbgorRU5BQkxFX1NVQlVOSVQ9IjAiCitlbHNlCitFTkFCTEVfU1VCVU5JVD0iMSIKK2ZpCitBQ19TVUJTVChFTkFCTEVfU1VCVU5JVCkKK0FDX0RFRklORV9VTlFVT1RFRChFTkFCTEVfU1VCVU5JVCwgJEVOQUJMRV9TVUJVTklULCBbU3VidW5pdCBwcm90b2NvbCByZXN1bHQgb3V0cHV0XSkKKworQU1fQ09ORElUSU9OQUwoU1VCVU5JVCwgdGVzdCB4IiRlbmFibGVfc3VidW5pdCIgIT0gInhmYWxzZSIpCisKK10pCmRpZmYgLS1naXQgYS9tNC9jb2Rlc2V0Lm00IGIvbTQvY29kZXNldC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjM5NTViCi0tLSAvZGV2L251bGwKKysrIGIvbTQvY29kZXNldC5tNApAQCAtMCwwICsxLDIxIEBACisjIGNvZGVzZXQubTQgc2VyaWFsIDIgKGdldHRleHQtMC4xNikKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgRnJvbSBCcnVubyBIYWlibGUuCisKK0FDX0RFRlVOKFtBTV9MQU5HSU5GT19DT0RFU0VUXSwKK1sKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBubF9sYW5naW5mbyBhbmQgQ09ERVNFVF0sIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQsCisgICAgW0FDX1RSWV9MSU5LKFsjaW5jbHVkZSA8bGFuZ2luZm8uaD5dLAorICAgICAgW2NoYXIqIGNzID0gbmxfbGFuZ2luZm8oQ09ERVNFVCk7IHJldHVybiAhY3M7XSwKKyAgICAgIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQ9eWVzLAorICAgICAgYW1fY3ZfbGFuZ2luZm9fY29kZXNldD1ubykKKyAgICBdKQorICBpZiB0ZXN0ICRhbV9jdl9sYW5naW5mb19jb2Rlc2V0ID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKEhBVkVfTEFOR0lORk9fQ09ERVNFVCwgMSwKKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgPGxhbmdpbmZvLmg+IGFuZCBubF9sYW5naW5mbyhDT0RFU0VUKS5dKQorICBmaQorXSkKZGlmZiAtLWdpdCBhL200L2dldHRleHQubTQgYi9tNC9nZXR0ZXh0Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YWUxZjcKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9nZXR0ZXh0Lm00CkBAIC0wLDAgKzEsMzgxIEBACisjIGdldHRleHQubTQgc2VyaWFsIDYwIChnZXR0ZXh0LTAuMTcpCitkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KK2RubAorZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKK2RubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCitkbmwgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorZG5sIGZ1bmN0aW9uYWxpdHkuCitkbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAorZG5sIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIEdOVQorZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorZG5sIFRoZXkgYXJlICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgorCitkbmwgQXV0aG9yczoKK2RubCAgIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAxOTk1LTIwMDAuCitkbmwgICBCcnVubyBIYWlibGUgPGhhaWJsZUBjbGlzcC5jb25zLm9yZz4sIDIwMDAtMjAwNi4KKworZG5sIE1hY3JvIHRvIGFkZCBmb3IgdXNpbmcgR05VIGdldHRleHQuCisKK2RubCBVc2FnZTogQU1fR05VX0dFVFRFWFQoW0lOVExTWU1CT0xdLCBbTkVFRFNZTUJPTF0sIFtJTlRMRElSXSkuCitkbmwgSU5UTFNZTUJPTCBjYW4gYmUgb25lIG9mICdleHRlcm5hbCcsICduby1saWJ0b29sJywgJ3VzZS1saWJ0b29sJy4gVGhlCitkbmwgICAgZGVmYXVsdCAoaWYgaXQgaXMgbm90IHNwZWNpZmllZCBvciBlbXB0eSkgaXMgJ25vLWxpYnRvb2wnLgorZG5sICAgIElOVExTWU1CT0wgc2hvdWxkIGJlICdleHRlcm5hbCcgZm9yIHBhY2thZ2VzIHdpdGggbm8gaW50bCBkaXJlY3RvcnksCitkbmwgICAgYW5kICduby1saWJ0b29sJyBvciAndXNlLWxpYnRvb2wnIGZvciBwYWNrYWdlcyB3aXRoIGFuIGludGwgZGlyZWN0b3J5LgorZG5sICAgIElmIElOVExTWU1CT0wgaXMgJ3VzZS1saWJ0b29sJywgdGhlbiBhIGxpYnRvb2wgbGlicmFyeQorZG5sICAgICQodG9wX2J1aWxkZGlyKS9pbnRsL2xpYmludGwubGEgd2lsbCBiZSBjcmVhdGVkIChzaGFyZWQgYW5kL29yIHN0YXRpYywKK2RubCAgICBkZXBlbmRpbmcgb24gLS17ZW5hYmxlLGRpc2FibGV9LXtzaGFyZWQsc3RhdGljfSBhbmQgb24gdGhlIHByZXNlbmNlIG9mCitkbmwgICAgQU0tRElTQUJMRS1TSEFSRUQpLiBJZiBJTlRMU1lNQk9MIGlzICduby1saWJ0b29sJywgYSBzdGF0aWMgbGlicmFyeQorZG5sICAgICQodG9wX2J1aWxkZGlyKS9pbnRsL2xpYmludGwuYSB3aWxsIGJlIGNyZWF0ZWQuCitkbmwgSWYgTkVFRFNZTUJPTCBpcyBzcGVjaWZpZWQgYW5kIGlzICduZWVkLW5nZXR0ZXh0JywgdGhlbiBHTlUgZ2V0dGV4dAorZG5sICAgIGltcGxlbWVudGF0aW9ucyAoaW4gbGliYyBvciBsaWJpbnRsKSB3aXRob3V0IHRoZSBuZ2V0dGV4dCgpIGZ1bmN0aW9uCitkbmwgICAgd2lsbCBiZSBpZ25vcmVkLiAgSWYgTkVFRFNZTUJPTCBpcyBzcGVjaWZpZWQgYW5kIGlzCitkbmwgICAgJ25lZWQtZm9ybWF0c3RyaW5nLW1hY3JvcycsIHRoZW4gR05VIGdldHRleHQgaW1wbGVtZW50YXRpb25zIHRoYXQgZG9uJ3QKK2RubCAgICBzdXBwb3J0IHRoZSBJU08gQyA5OSA8aW50dHlwZXMuaD4gZm9ybWF0c3RyaW5nIG1hY3JvcyB3aWxsIGJlIGlnbm9yZWQuCitkbmwgSU5UTERJUiBpcyB1c2VkIHRvIGZpbmQgdGhlIGludGwgbGlicmFyaWVzLiAgSWYgZW1wdHksCitkbmwgICAgdGhlIHZhbHVlIGAkKHRvcF9idWlsZGRpcikvaW50bC8nIGlzIHVzZWQuCitkbmwKK2RubCBUaGUgcmVzdWx0IG9mIHRoZSBjb25maWd1cmF0aW9uIGlzIG9uZSBvZiB0aHJlZSBjYXNlczoKK2RubCAxKSBHTlUgZ2V0dGV4dCwgYXMgaW5jbHVkZWQgaW4gdGhlIGludGwgc3ViZGlyZWN0b3J5LCB3aWxsIGJlIGNvbXBpbGVkCitkbmwgICAgYW5kIHVzZWQuCitkbmwgICAgQ2F0YWxvZyBmb3JtYXQ6IEdOVSAtLT4gaW5zdGFsbCBpbiAkKGRhdGFkaXIpCitkbmwgICAgQ2F0YWxvZyBleHRlbnNpb246IC5tbyBhZnRlciBpbnN0YWxsYXRpb24sIC5nbW8gaW4gc291cmNlIHRyZWUKK2RubCAyKSBHTlUgZ2V0dGV4dCBoYXMgYmVlbiBmb3VuZCBpbiB0aGUgc3lzdGVtJ3MgQyBsaWJyYXJ5LgorZG5sICAgIENhdGFsb2cgZm9ybWF0OiBHTlUgLS0+IGluc3RhbGwgaW4gJChkYXRhZGlyKQorZG5sICAgIENhdGFsb2cgZXh0ZW5zaW9uOiAubW8gYWZ0ZXIgaW5zdGFsbGF0aW9uLCAuZ21vIGluIHNvdXJjZSB0cmVlCitkbmwgMykgTm8gaW50ZXJuYXRpb25hbGl6YXRpb24sIGFsd2F5cyB1c2UgRW5nbGlzaCBtc2dpZC4KK2RubCAgICBDYXRhbG9nIGZvcm1hdDogbm9uZQorZG5sICAgIENhdGFsb2cgZXh0ZW5zaW9uOiBub25lCitkbmwgSWYgSU5UTFNZTUJPTCBpcyAnZXh0ZXJuYWwnLCBvbmx5IGNhc2VzIDIgYW5kIDMgY2FuIG9jY3VyLgorZG5sIFRoZSB1c2Ugb2YgLmdtbyBpcyBoaXN0b3JpY2FsIChpdCB3YXMgbmVlZGVkIHRvIGF2b2lkIG92ZXJ3cml0aW5nIHRoZQorZG5sIEdOVSBmb3JtYXQgY2F0YWxvZ3Mgd2hlbiBidWlsZGluZyBvbiBhIHBsYXRmb3JtIHdpdGggYW4gWC9PcGVuIGdldHRleHQpLAorZG5sIGJ1dCB3ZSBrZWVwIGl0IGluIG9yZGVyIG5vdCB0byBmb3JjZSBpcnJlbGV2YW50IGZpbGVuYW1lIGNoYW5nZXMgb24gdGhlCitkbmwgbWFpbnRhaW5lcnMuCitkbmwKK0FDX0RFRlVOKFtBTV9HTlVfR0VUVEVYVF0sCitbCisgIGRubCBBcmd1bWVudCBjaGVja2luZy4KKyAgaWZlbHNlKFskMV0sIFtdLCAsIFtpZmVsc2UoWyQxXSwgW2V4dGVybmFsXSwgLCBbaWZlbHNlKFskMV0sIFtuby1saWJ0b29sXSwgLCBbaWZlbHNlKFskMV0sIFt1c2UtbGlidG9vbF0sICwKKyAgICBbZXJycHJpbnQoW0VSUk9SOiBpbnZhbGlkIGZpcnN0IGFyZ3VtZW50IHRvIEFNX0dOVV9HRVRURVhUCitdKV0pXSldKV0pCisgIGlmZWxzZShbJDJdLCBbXSwgLCBbaWZlbHNlKFskMl0sIFtuZWVkLW5nZXR0ZXh0XSwgLCBbaWZlbHNlKFskMl0sIFtuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3NdLCAsCisgICAgW2VycnByaW50KFtFUlJPUjogaW52YWxpZCBzZWNvbmQgYXJndW1lbnQgdG8gQU1fR05VX0dFVFRFWFQKK10pXSldKV0pCisgIGRlZmluZShbZ3RfaW5jbHVkZWRfaW50bF0sCisgICAgaWZlbHNlKFskMV0sIFtleHRlcm5hbF0sCisgICAgICBpZmRlZihbQU1fR05VX0dFVFRFWFRfXVtJTlRMX1NVQkRJUl0sIFt5ZXNdLCBbbm9dKSwKKyAgICAgIFt5ZXNdKSkKKyAgZGVmaW5lKFtndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXhdLCBpZmVsc2UoWyQxXSwgW3VzZS1saWJ0b29sXSwgW2xdLCBbXSkpCisgIGd0X05FRURTX0lOSVQKKyAgQU1fR05VX0dFVFRFWFRfTkVFRChbJDJdKQorCisgIEFDX1JFUVVJUkUoW0FNX1BPX1NVQkRJUlNdKWRubAorICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCisgICAgQUNfUkVRVUlSRShbQU1fSU5UTF9TVUJESVJdKWRubAorICBdKQorCisgIGRubCBQcmVyZXF1aXNpdGVzIG9mIEFDX0xJQl9MSU5LRkxBR1NfQk9EWS4KKyAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKworICBkbmwgU29tZXRpbWVzIGxpYmludGwgcmVxdWlyZXMgbGliaWNvbnYsIHNvIGZpcnN0IHNlYXJjaCBmb3IgbGliaWNvbnYuCisgIGRubCBJZGVhbGx5IHdlIHdvdWxkIGRvIHRoaXMgc2VhcmNoIG9ubHkgYWZ0ZXIgdGhlCisgIGRubCAgICAgIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCisgIGRubCAgICAgICAgaWYgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmMiOyB0ZXN0ICIkZ3RfdmFsIiAhPSAieWVzIjsgfTsgdGhlbgorICBkbmwgdGVzdHMuIEJ1dCBpZiBjb25maWd1cmUuaW4gaW52b2tlcyBBTV9JQ09OViBhZnRlciBBTV9HTlVfR0VUVEVYVAorICBkbmwgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgd291bGQgbmVlZCB0byBjb250YWluIHRoZSBzYW1lIHNoZWxsIGNvZGUKKyAgZG5sIGFnYWluLCBvdXRzaWRlIGFueSAnaWYnLiBUaGVyZSBhcmUgdHdvIHNvbHV0aW9uczoKKyAgZG5sIC0gSW52b2tlIEFNX0lDT05WX0xJTktGTEFHU19CT0RZIGhlcmUsIG91dHNpZGUgYW55ICdpZicuCisgIGRubCAtIENvbnRyb2wgdGhlIGV4cGFuc2lvbnMgaW4gbW9yZSBkZXRhaWwgdXNpbmcgQUNfUFJPVklERV9JRkVMU0UuCisgIGRubCBTaW5jZSBBQ19QUk9WSURFX0lGRUxTRSBpcyBvbmx5IGluIGF1dG9jb25mID49IDIuNTIgYW5kIG5vdAorICBkbmwgZG9jdW1lbnRlZCwgd2UgYXZvaWQgaXQuCisgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsICwgWworICAgIEFDX1JFUVVJUkUoW0FNX0lDT05WX0xJTktGTEFHU19CT0RZXSkKKyAgXSkKKworICBkbmwgU29tZXRpbWVzLCBvbiBNYWNPUyBYLCBsaWJpbnRsIHJlcXVpcmVzIGxpbmtpbmcgd2l0aCBDb3JlRm91bmRhdGlvbi4KKyAgZ3RfSU5UTF9NQUNPU1gKKworICBkbmwgU2V0IFVTRV9OTFMuCisgIEFDX1JFUVVJUkUoW0FNX05MU10pCisKKyAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWworICAgIEJVSUxEX0lOQ0xVREVEX0xJQklOVEw9bm8KKyAgICBVU0VfSU5DTFVERURfTElCSU5UTD1ubworICBdKQorICBMSUJJTlRMPQorICBMVExJQklOVEw9CisgIFBPU1VCPQorCisgIGRubCBBZGQgYSB2ZXJzaW9uIG51bWJlciB0byB0aGUgY2FjaGUgbWFjcm9zLgorICBjYXNlICIgJGd0X25lZWRzICIgaW4KKyAgICAqIiBuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3MgIiopIGd0X2FwaV92ZXJzaW9uPTMgOzsKKyAgICAqIiBuZWVkLW5nZXR0ZXh0ICIqKSBndF9hcGlfdmVyc2lvbj0yIDs7CisgICAgKikgZ3RfYXBpX3ZlcnNpb249MSA7OworICBlc2FjCisgIGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjPSJndF9jdl9mdW5jX2dudWdldHRleHQke2d0X2FwaV92ZXJzaW9ufV9saWJjIgorICBndF9mdW5jX2dudWdldHRleHRfbGliaW50bD0iZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0JHtndF9hcGlfdmVyc2lvbn1fbGliaW50bCIKKworICBkbmwgSWYgd2UgdXNlIE5MUyBmaWd1cmUgb3V0IHdoYXQgbWV0aG9kCisgIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCisgICAgZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0PW5vCisgICAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWworICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIGluY2x1ZGVkIGdldHRleHQgaXMgcmVxdWVzdGVkXSkKKyAgICAgIEFDX0FSR19XSVRIKGluY2x1ZGVkLWdldHRleHQsCisgICAgICAgIFsgIC0td2l0aC1pbmNsdWRlZC1nZXR0ZXh0IHVzZSB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpbmNsdWRlZCBoZXJlXSwKKyAgICAgICAgbmxzX2N2X2ZvcmNlX3VzZV9nbnVfZ2V0dGV4dD0kd2l0aHZhbCwKKyAgICAgICAgbmxzX2N2X2ZvcmNlX3VzZV9nbnVfZ2V0dGV4dD1ubykKKyAgICAgIEFDX01TR19SRVNVTFQoJG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHQpCisKKyAgICAgIG5sc19jdl91c2VfZ251X2dldHRleHQ9IiRubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0IgorICAgICAgaWYgdGVzdCAiJG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHQiICE9ICJ5ZXMiOyB0aGVuCisgICAgXSkKKyAgICAgICAgZG5sIFVzZXIgZG9lcyBub3QgaW5zaXN0IG9uIHVzaW5nIEdOVSBOTFMgbGlicmFyeS4gIEZpZ3VyZSBvdXQgd2hhdAorICAgICAgICBkbmwgdG8gdXNlLiAgSWYgR05VIGdldHRleHQgaXMgYXZhaWxhYmxlIHdlIHVzZSB0aGlzLiAgRWxzZSB3ZSBoYXZlCisgICAgICAgIGRubCB0byBmYWxsIGJhY2sgdG8gR05VIE5MUyBsaWJyYXJ5LgorCisgICAgICAgIGlmIHRlc3QgJGd0X2FwaV92ZXJzaW9uIC1nZSAzOyB0aGVuCisgICAgICAgICAgZ3RfcmV2aXNpb25fdGVzdF9jb2RlPScKKyNpZm5kZWYgX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04KKyNkZWZpbmUgX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04obWFqb3IpICgobWFqb3IpID09IDAgPyAwIDogLTEpCisjZW5kaWYKK2NoYW5nZXF1b3RlKCwpZG5sCit0eXBlZGVmIGludCBhcnJheSBbMiAqIChfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTigwKSA+PSAxKSAtIDFdOworY2hhbmdlcXVvdGUoWyxdKWRubAorJworICAgICAgICBlbHNlCisgICAgICAgICAgZ3RfcmV2aXNpb25fdGVzdF9jb2RlPQorICAgICAgICBmaQorICAgICAgICBpZiB0ZXN0ICRndF9hcGlfdmVyc2lvbiAtZ2UgMjsgdGhlbgorICAgICAgICAgIGd0X2V4cHJlc3Npb25fdGVzdF9jb2RlPScgKyAqIG5nZXR0ZXh0ICgiIiwgIiIsIDApJworICAgICAgICBlbHNlCisgICAgICAgICAgZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGU9CisgICAgICAgIGZpCisKKyAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBHTlUgZ2V0dGV4dCBpbiBsaWJjXSwgWyRndF9mdW5jX2dudWdldHRleHRfbGliY10sCisgICAgICAgICBbQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxsaWJpbnRsLmg+CiskZ3RfcmV2aXNpb25fdGVzdF9jb2RlCitleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CitleHRlcm4gaW50ICpfbmxfZG9tYWluX2JpbmRpbmdzO10sCisgICAgICAgICAgICBbYmluZHRleHRkb21haW4gKCIiLCAiIik7CityZXR1cm4gKiBnZXR0ZXh0ICgiIikkZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGUgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9kb21haW5fYmluZGluZ3NdLAorICAgICAgICAgICAgW2V2YWwgIiRndF9mdW5jX2dudWdldHRleHRfbGliYz15ZXMiXSwKKyAgICAgICAgICAgIFtldmFsICIkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmM9bm8iXSldKQorCisgICAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjIjsgdGVzdCAiJGd0X3ZhbCIgIT0gInllcyI7IH07IHRoZW4KKyAgICAgICAgICBkbmwgU29tZXRpbWVzIGxpYmludGwgcmVxdWlyZXMgbGliaWNvbnYsIHNvIGZpcnN0IHNlYXJjaCBmb3IgbGliaWNvbnYuCisgICAgICAgICAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgLCBbCisgICAgICAgICAgICBBTV9JQ09OVl9MSU5LCisgICAgICAgICAgXSkKKyAgICAgICAgICBkbmwgU2VhcmNoIGZvciBsaWJpbnRsIGFuZCBkZWZpbmUgTElCSU5UTCwgTFRMSUJJTlRMIGFuZCBJTkNJTlRMCisgICAgICAgICAgZG5sIGFjY29yZGluZ2x5LiBEb24ndCB1c2UgQUNfTElCX0xJTktGTEFHU19CT0RZKFtpbnRsXSxbaWNvbnZdKQorICAgICAgICAgIGRubCBiZWNhdXNlIHRoYXQgd291bGQgYWRkICItbGljb252IiB0byBMSUJJTlRMIGFuZCBMVExJQklOVEwKKyAgICAgICAgICBkbmwgZXZlbiBpZiBsaWJpY29udiBkb2Vzbid0IGV4aXN0LgorICAgICAgICAgIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShbaW50bF0pCisgICAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBHTlUgZ2V0dGV4dCBpbiBsaWJpbnRsXSwKKyAgICAgICAgICAgIFskZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGxdLAorICAgICAgICAgICBbZ3Rfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICAgICAgICAgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkSU5DSU5UTCIKKyAgICAgICAgICAgIGd0X3NhdmVfTElCUz0iJExJQlMiCisgICAgICAgICAgICBMSUJTPSIkTElCUyAkTElCSU5UTCIKKyAgICAgICAgICAgIGRubCBOb3cgc2VlIHdoZXRoZXIgbGliaW50bCBleGlzdHMgYW5kIGRvZXMgbm90IGRlcGVuZCBvbiBsaWJpY29udi4KKyAgICAgICAgICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8bGliaW50bC5oPgorJGd0X3JldmlzaW9uX3Rlc3RfY29kZQorZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOworZXh0ZXJuCisjaWZkZWYgX19jcGx1c3BsdXMKKyJDIgorI2VuZGlmCitjb25zdCBjaGFyICpfbmxfZXhwYW5kX2FsaWFzIChjb25zdCBjaGFyICopO10sCisgICAgICAgICAgICAgIFtiaW5kdGV4dGRvbWFpbiAoIiIsICIiKTsKK3JldHVybiAqIGdldHRleHQgKCIiKSRndF9leHByZXNzaW9uX3Rlc3RfY29kZSArIF9ubF9tc2dfY2F0X2NudHIgKyAqX25sX2V4cGFuZF9hbGlhcyAoIiIpXSwKKyAgICAgICAgICAgICAgW2V2YWwgIiRndF9mdW5jX2dudWdldHRleHRfbGliaW50bD15ZXMiXSwKKyAgICAgICAgICAgICAgW2V2YWwgIiRndF9mdW5jX2dudWdldHRleHRfbGliaW50bD1ubyJdKQorICAgICAgICAgICAgZG5sIE5vdyBzZWUgd2hldGhlciBsaWJpbnRsIGV4aXN0cyBhbmQgZGVwZW5kcyBvbiBsaWJpY29udi4KKyAgICAgICAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsIjsgdGVzdCAiJGd0X3ZhbCIgIT0geWVzOyB9ICYmIHRlc3QgLW4gIiRMSUJJQ09OViI7IHRoZW4KKyAgICAgICAgICAgICAgTElCUz0iJExJQlMgJExJQklDT05WIgorICAgICAgICAgICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxpYmludGwuaD4KKyRndF9yZXZpc2lvbl90ZXN0X2NvZGUKK2V4dGVybiBpbnQgX25sX21zZ19jYXRfY250cjsKK2V4dGVybgorI2lmZGVmIF9fY3BsdXNwbHVzCisiQyIKKyNlbmRpZgorY29uc3QgY2hhciAqX25sX2V4cGFuZF9hbGlhcyAoY29uc3QgY2hhciAqKTtdLAorICAgICAgICAgICAgICAgIFtiaW5kdGV4dGRvbWFpbiAoIiIsICIiKTsKK3JldHVybiAqIGdldHRleHQgKCIiKSRndF9leHByZXNzaW9uX3Rlc3RfY29kZSArIF9ubF9tc2dfY2F0X2NudHIgKyAqX25sX2V4cGFuZF9hbGlhcyAoIiIpXSwKKyAgICAgICAgICAgICAgIFtMSUJJTlRMPSIkTElCSU5UTCAkTElCSUNPTlYiCisgICAgICAgICAgICAgICAgTFRMSUJJTlRMPSIkTFRMSUJJTlRMICRMVExJQklDT05WIgorICAgICAgICAgICAgICAgIGV2YWwgIiRndF9mdW5jX2dudWdldHRleHRfbGliaW50bD15ZXMiCisgICAgICAgICAgICAgICBdKQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIENQUEZMQUdTPSIkZ3Rfc2F2ZV9DUFBGTEFHUyIKKyAgICAgICAgICAgIExJQlM9IiRndF9zYXZlX0xJQlMiXSkKKyAgICAgICAgZmkKKworICAgICAgICBkbmwgSWYgYW4gYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZCBHTlUgZ2V0dGV4dCgpIGlzIGZvdW5kLAorICAgICAgICBkbmwgdXNlIGl0LiAgQnV0IGlmIHRoaXMgbWFjcm8gaXMgdXNlZCBpbiBHTlUgZ2V0dGV4dCwgYW5kIEdOVQorICAgICAgICBkbmwgZ2V0dGV4dCBpcyBhbHJlYWR5IHByZWluc3RhbGxlZCBpbiBsaWJpbnRsLCB3ZSB1cGRhdGUgdGhpcworICAgICAgICBkbmwgbGliaW50bC4gIChDZi4gdGhlIGluc3RhbGwgcnVsZSBpbiBpbnRsL01ha2VmaWxlLmluLikKKyAgICAgICAgaWYgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmMiOyB0ZXN0ICIkZ3RfdmFsIiA9ICJ5ZXMiOyB9IFwKKyAgICAgICAgICAgfHwgeyB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliaW50bCI7IHRlc3QgIiRndF92YWwiID0gInllcyI7IH0gXAorICAgICAgICAgICAgICAgICYmIHRlc3QgIiRQQUNLQUdFIiAhPSBnZXR0ZXh0LXJ1bnRpbWUgXAorICAgICAgICAgICAgICAgICYmIHRlc3QgIiRQQUNLQUdFIiAhPSBnZXR0ZXh0LXRvb2xzOyB9OyB0aGVuCisgICAgICAgICAgZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0PXllcworICAgICAgICBlbHNlCisgICAgICAgICAgZG5sIFJlc2V0IHRoZSB2YWx1ZXMgc2V0IGJ5IHNlYXJjaGluZyBmb3IgbGliaW50bC4KKyAgICAgICAgICBMSUJJTlRMPQorICAgICAgICAgIExUTElCSU5UTD0KKyAgICAgICAgICBJTkNJTlRMPQorICAgICAgICBmaQorCisgICAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWworICAgICAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiAhPSAieWVzIjsgdGhlbgorICAgICAgICAgIGRubCBHTlUgZ2V0dGV4dCBpcyBub3QgZm91bmQgaW4gdGhlIEMgbGlicmFyeS4KKyAgICAgICAgICBkbmwgRmFsbCBiYWNrIG9uIGluY2x1ZGVkIEdOVSBnZXR0ZXh0IGxpYnJhcnkuCisgICAgICAgICAgbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dD15ZXMKKyAgICAgICAgZmkKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgIGRubCBNYXJrIGFjdGlvbnMgdXNlZCB0byBnZW5lcmF0ZSBHTlUgTkxTIGxpYnJhcnkuCisgICAgICAgIEJVSUxEX0lOQ0xVREVEX0xJQklOVEw9eWVzCisgICAgICAgIFVTRV9JTkNMVURFRF9MSUJJTlRMPXllcworICAgICAgICBMSUJJTlRMPSJpZmVsc2UoWyQzXSxbXSxcJHt0b3BfYnVpbGRkaXJ9L2ludGwsWyQzXSkvbGliaW50bC5bXWd0X2xpYnRvb2xfc3VmZml4X3ByZWZpeFtdYSAkTElCSUNPTlYgJExJQlRIUkVBRCIKKyAgICAgICAgTFRMSUJJTlRMPSJpZmVsc2UoWyQzXSxbXSxcJHt0b3BfYnVpbGRkaXJ9L2ludGwsWyQzXSkvbGliaW50bC5bXWd0X2xpYnRvb2xfc3VmZml4X3ByZWZpeFtdYSAkTFRMSUJJQ09OViAkTFRMSUJUSFJFQUQiCisgICAgICAgIExJQlM9YGVjaG8gIiAkTElCUyAiIHwgc2VkIC1lICdzLyAtbGludGwgLyAvJyAtZSAncy9eIC8vJyAtZSAncy8gJC8vJ2AKKyAgICAgIGZpCisKKyAgICAgIENBVE9CSkVYVD0KKyAgICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyIgXAorICAgICAgICAgfHwgdGVzdCAiJG5sc19jdl91c2VfZ251X2dldHRleHQiID0gInllcyI7IHRoZW4KKyAgICAgICAgZG5sIE1hcmsgYWN0aW9ucyB0byB1c2UgR05VIGdldHRleHQgdG9vbHMuCisgICAgICAgIENBVE9CSkVYVD0uZ21vCisgICAgICBmaQorICAgIF0pCisKKyAgICBpZiB0ZXN0IC1uICIkSU5UTF9NQUNPU1hfTElCUyI7IHRoZW4KKyAgICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyIgXAorICAgICAgICAgfHwgdGVzdCAiJG5sc19jdl91c2VfZ251X2dldHRleHQiID0gInllcyI7IHRoZW4KKyAgICAgICAgZG5sIFNvbWUgZXh0cmEgZmxhZ3MgYXJlIG5lZWRlZCBkdXJpbmcgbGlua2luZy4KKyAgICAgICAgTElCSU5UTD0iJExJQklOVEwgJElOVExfTUFDT1NYX0xJQlMiCisgICAgICAgIExUTElCSU5UTD0iJExUTElCSU5UTCAkSU5UTF9NQUNPU1hfTElCUyIKKyAgICAgIGZpCisgICAgZmkKKworICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyIgXAorICAgICAgIHx8IHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICBBQ19ERUZJTkUoRU5BQkxFX05MUywgMSwKKyAgICAgICAgW0RlZmluZSB0byAxIGlmIHRyYW5zbGF0aW9uIG9mIHByb2dyYW0gbWVzc2FnZXMgdG8gdGhlIHVzZXIncyBuYXRpdmUgbGFuZ3VhZ2UKKyAgIGlzIHJlcXVlc3RlZC5dKQorICAgIGVsc2UKKyAgICAgIFVTRV9OTFM9bm8KKyAgICBmaQorICBmaQorCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byB1c2UgTkxTXSkKKyAgQUNfTVNHX1JFU1VMVChbJFVTRV9OTFNdKQorICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbd2hlcmUgdGhlIGdldHRleHQgZnVuY3Rpb24gY29tZXMgZnJvbV0pCisgICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgPSAieWVzIjsgdGhlbgorICAgICAgaWYgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiOyB0ZXN0ICIkZ3RfdmFsIiA9ICJ5ZXMiOyB9OyB0aGVuCisgICAgICAgIGd0X3NvdXJjZT0iZXh0ZXJuYWwgbGliaW50bCIKKyAgICAgIGVsc2UKKyAgICAgICAgZ3Rfc291cmNlPSJsaWJjIgorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBndF9zb3VyY2U9ImluY2x1ZGVkIGludGwgZGlyZWN0b3J5IgorICAgIGZpCisgICAgQUNfTVNHX1JFU1VMVChbJGd0X3NvdXJjZV0pCisgIGZpCisKKyAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KKworICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyI7IHRoZW4KKyAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsIjsgdGVzdCAiJGd0X3ZhbCIgPSAieWVzIjsgfTsgdGhlbgorICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBsaW5rIHdpdGggbGliaW50bF0pCisgICAgICAgIEFDX01TR19SRVNVTFQoWyRMSUJJTlRMXSkKKyAgICAgICAgQUNfTElCX0FQUEVORFRPVkFSKFtDUFBGTEFHU10sIFskSU5DSU5UTF0pCisgICAgICBmaQorCisgICAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgcGFja2FnZXMgbWF5IGJlIHVzaW5nIHRoaXMuCisgICAgICBBQ19ERUZJTkUoSEFWRV9HRVRURVhULCAxLAorICAgICAgIFtEZWZpbmUgaWYgdGhlIEdOVSBnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC5dKQorICAgICAgQUNfREVGSU5FKEhBVkVfRENHRVRURVhULCAxLAorICAgICAgIFtEZWZpbmUgaWYgdGhlIEdOVSBkY2dldHRleHQoKSBmdW5jdGlvbiBpcyBhbHJlYWR5IHByZXNlbnQgb3IgcHJlaW5zdGFsbGVkLl0pCisgICAgZmkKKworICAgIGRubCBXZSBuZWVkIHRvIHByb2Nlc3MgdGhlIHBvLyBkaXJlY3RvcnkuCisgICAgUE9TVUI9cG8KKyAgZmkKKworICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCisgICAgZG5sIElmIHRoaXMgaXMgdXNlZCBpbiBHTlUgZ2V0dGV4dCB3ZSBoYXZlIHRvIHNldCBCVUlMRF9JTkNMVURFRF9MSUJJTlRMCisgICAgZG5sIHRvICd5ZXMnIGJlY2F1c2Ugc29tZSBvZiB0aGUgdGVzdHN1aXRlIHJlcXVpcmVzIGl0LgorICAgIGlmIHRlc3QgIiRQQUNLQUdFIiA9IGdldHRleHQtcnVudGltZSB8fCB0ZXN0ICIkUEFDS0FHRSIgPSBnZXR0ZXh0LXRvb2xzOyB0aGVuCisgICAgICBCVUlMRF9JTkNMVURFRF9MSUJJTlRMPXllcworICAgIGZpCisKKyAgICBkbmwgTWFrZSBhbGwgdmFyaWFibGVzIHdlIHVzZSBrbm93biB0byBhdXRvY29uZi4KKyAgICBBQ19TVUJTVChCVUlMRF9JTkNMVURFRF9MSUJJTlRMKQorICAgIEFDX1NVQlNUKFVTRV9JTkNMVURFRF9MSUJJTlRMKQorICAgIEFDX1NVQlNUKENBVE9CSkVYVCkKKworICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBjb25maWd1cmUuaW5zIG1heSBiZSB1c2luZyB0aGlzLgorICAgIG5sc19jdl9oZWFkZXJfaW50bD0KKyAgICBubHNfY3ZfaGVhZGVyX2xpYmd0PQorCisgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KKyAgICBEQVRBRElSTkFNRT1zaGFyZQorICAgIEFDX1NVQlNUKERBVEFESVJOQU1FKQorCisgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KKyAgICBJTlNUT0JKRVhUPS5tbworICAgIEFDX1NVQlNUKElOU1RPQkpFWFQpCisKKyAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgorICAgIEdFTkNBVD1nZW5jYXQKKyAgICBBQ19TVUJTVChHRU5DQVQpCisKKyAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgorICAgIElOVExPQkpTPQorICAgIGlmIHRlc3QgIiRVU0VfSU5DTFVERURfTElCSU5UTCIgPSB5ZXM7IHRoZW4KKyAgICAgIElOVExPQkpTPSJcJChHRVRUT0JKUykiCisgICAgZmkKKyAgICBBQ19TVUJTVChJTlRMT0JKUykKKworICAgIGRubCBFbmFibGUgbGlidG9vbCBzdXBwb3J0IGlmIHRoZSBzdXJyb3VuZGluZyBwYWNrYWdlIHdpc2hlcyBpdC4KKyAgICBJTlRMX0xJQlRPT0xfU1VGRklYX1BSRUZJWD1ndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXgKKyAgICBBQ19TVUJTVChJTlRMX0xJQlRPT0xfU1VGRklYX1BSRUZJWCkKKyAgXSkKKworICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgorICBJTlRMTElCUz0iJExJQklOVEwiCisgIEFDX1NVQlNUKElOVExMSUJTKQorCisgIGRubCBNYWtlIGFsbCBkb2N1bWVudGVkIHZhcmlhYmxlcyBrbm93biB0byBhdXRvY29uZi4KKyAgQUNfU1VCU1QoTElCSU5UTCkKKyAgQUNfU1VCU1QoTFRMSUJJTlRMKQorICBBQ19TVUJTVChQT1NVQikKK10pCisKKworZG5sIGd0X05FRURTX0lOSVQgZW5zdXJlcyB0aGF0IHRoZSBndF9uZWVkcyB2YXJpYWJsZSBpcyBpbml0aWFsaXplZC4KK200X2RlZmluZShbZ3RfTkVFRFNfSU5JVF0sCitbCisgIG00X2RpdmVydF90ZXh0KFtERUZBVUxUU10sIFtndF9uZWVkcz1dKQorICBtNF9kZWZpbmUoW2d0X05FRURTX0lOSVRdLCBbXSkKK10pCisKKworZG5sIFVzYWdlOiBBTV9HTlVfR0VUVEVYVF9ORUVEKFtORUVEU1lNQk9MXSkKK0FDX0RFRlVOKFtBTV9HTlVfR0VUVEVYVF9ORUVEXSwKK1sKKyAgbTRfZGl2ZXJ0X3RleHQoW0lOSVRfUFJFUEFSRV0sIFtndF9uZWVkcz0iJGd0X25lZWRzICQxIl0pCitdKQorCisKK2RubCBVc2FnZTogQU1fR05VX0dFVFRFWFRfVkVSU0lPTihbZ2V0dGV4dC12ZXJzaW9uXSkKK0FDX0RFRlVOKFtBTV9HTlVfR0VUVEVYVF9WRVJTSU9OXSwgW10pCmRpZmYgLS1naXQgYS9tNC9nbGliYzIubTQgYi9tNC9nbGliYzIubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThmNWJmZQotLS0gL2Rldi9udWxsCisrKyBiL200L2dsaWJjMi5tNApAQCAtMCwwICsxLDMwIEBACisjIGdsaWJjMi5tNCBzZXJpYWwgMQorZG5sIENvcHlyaWdodCAoQykgMjAwMC0yMDAyLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGVzdCBmb3IgdGhlIEdOVSBDIExpYnJhcnksIHZlcnNpb24gMi4wIG9yIG5ld2VyLgorIyBGcm9tIEJydW5vIEhhaWJsZS4KKworQUNfREVGVU4oW2d0X0dMSUJDMl0sCisgIFsKKyAgICBBQ19DQUNIRV9DSEVDSyh3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgTGlicmFyeSAyIG9yIG5ld2VyLAorICAgICAgYWNfY3ZfZ251X2xpYnJhcnlfMiwKKyAgICAgIFtBQ19FR1JFUF9DUFAoW0x1Y2t5IEdOVSB1c2VyXSwKKwlbCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpZmRlZiBfX0dOVV9MSUJSQVJZX18KKyAjaWYgKF9fR0xJQkNfXyA+PSAyKQorICBMdWNreSBHTlUgdXNlcgorICNlbmRpZgorI2VuZGlmCisJXSwKKwlhY19jdl9nbnVfbGlicmFyeV8yPXllcywKKwlhY19jdl9nbnVfbGlicmFyeV8yPW5vKQorICAgICAgXQorICAgICkKKyAgICBBQ19TVUJTVChHTElCQzIpCisgICAgR0xJQkMyPSIkYWNfY3ZfZ251X2xpYnJhcnlfMiIKKyAgXQorKQpkaWZmIC0tZ2l0IGEvbTQvZ2xpYmMyMS5tNCBiL200L2dsaWJjMjEubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk1ZmQ5OAotLS0gL2Rldi9udWxsCisrKyBiL200L2dsaWJjMjEubTQKQEAgLTAsMCArMSwzMCBAQAorIyBnbGliYzIxLm00IHNlcmlhbCAzCitkbmwgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUZXN0IGZvciB0aGUgR05VIEMgTGlicmFyeSwgdmVyc2lvbiAyLjEgb3IgbmV3ZXIuCisjIEZyb20gQnJ1bm8gSGFpYmxlLgorCitBQ19ERUZVTihbZ2xfR0xJQkMyMV0sCisgIFsKKyAgICBBQ19DQUNIRV9DSEVDSyh3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgTGlicmFyeSAyLjEgb3IgbmV3ZXIsCisgICAgICBhY19jdl9nbnVfbGlicmFyeV8yXzEsCisgICAgICBbQUNfRUdSRVBfQ1BQKFtMdWNreSBHTlUgdXNlcl0sCisJWworI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaWZkZWYgX19HTlVfTElCUkFSWV9fCisgI2lmIChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMSkgfHwgKF9fR0xJQkNfXyA+IDIpCisgIEx1Y2t5IEdOVSB1c2VyCisgI2VuZGlmCisjZW5kaWYKKwldLAorCWFjX2N2X2dudV9saWJyYXJ5XzJfMT15ZXMsCisJYWNfY3ZfZ251X2xpYnJhcnlfMl8xPW5vKQorICAgICAgXQorICAgICkKKyAgICBBQ19TVUJTVChHTElCQzIxKQorICAgIEdMSUJDMjE9IiRhY19jdl9nbnVfbGlicmFyeV8yXzEiCisgIF0KKykKZGlmZiAtLWdpdCBhL200L2ljb252Lm00IGIvbTQvaWNvbnYubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZiYzc2ZgotLS0gL2Rldi9udWxsCisrKyBiL200L2ljb252Lm00CkBAIC0wLDAgKzEsMTgwIEBACisjIGljb252Lm00IHNlcmlhbCBBTTYgKGdldHRleHQtMC4xNykKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgRnJvbSBCcnVubyBIYWlibGUuCisKK0FDX0RFRlVOKFtBTV9JQ09OVl9MSU5LRkxBR1NfQk9EWV0sCitbCisgIGRubCBQcmVyZXF1aXNpdGVzIG9mIEFDX0xJQl9MSU5LRkxBR1NfQk9EWS4KKyAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKworICBkbmwgU2VhcmNoIGZvciBsaWJpY29udiBhbmQgZGVmaW5lIExJQklDT05WLCBMVExJQklDT05WIGFuZCBJTkNJQ09OVgorICBkbmwgYWNjb3JkaW5nbHkuCisgIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShbaWNvbnZdKQorXSkKKworQUNfREVGVU4oW0FNX0lDT05WX0xJTktdLAorWworICBkbmwgU29tZSBzeXN0ZW1zIGhhdmUgaWNvbnYgaW4gbGliYywgc29tZSBoYXZlIGl0IGluIGxpYmljb252IChPU0YvMSBhbmQKKyAgZG5sIHRob3NlIHdpdGggdGhlIHN0YW5kYWxvbmUgcG9ydGFibGUgR05VIGxpYmljb252IGluc3RhbGxlZCkuCisgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkgZG5sIGZvciBjcm9zcy1jb21waWxlcworCisgIGRubCBTZWFyY2ggZm9yIGxpYmljb252IGFuZCBkZWZpbmUgTElCSUNPTlYsIExUTElCSUNPTlYgYW5kIElOQ0lDT05WCisgIGRubCBhY2NvcmRpbmdseS4KKyAgQUNfUkVRVUlSRShbQU1fSUNPTlZfTElOS0ZMQUdTX0JPRFldKQorCisgIGRubCBBZGQgJElOQ0lDT05WIHRvIENQUEZMQUdTIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBmb2xsb3dpbmcgY2hlY2tzLAorICBkbmwgYmVjYXVzZSBpZiB0aGUgdXNlciBoYXMgaW5zdGFsbGVkIGxpYmljb252IGFuZCBub3QgZGlzYWJsZWQgaXRzIHVzZQorICBkbmwgdmlhIC0td2l0aG91dC1saWJpY29udi1wcmVmaXgsIGhlIHdhbnRzIHRvIHVzZSBpdC4gVGhlIGZpcnN0CisgIGRubCBBQ19UUllfTElOSyB3aWxsIHRoZW4gZmFpbCwgdGhlIHNlY29uZCBBQ19UUllfTElOSyB3aWxsIHN1Y2NlZWQuCisgIGFtX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgQUNfTElCX0FQUEVORFRPVkFSKFtDUFBGTEFHU10sIFskSU5DSUNPTlZdKQorCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgaWNvbnZdLCBhbV9jdl9mdW5jX2ljb252LCBbCisgICAgYW1fY3ZfZnVuY19pY29udj0ibm8sIGNvbnNpZGVyIGluc3RhbGxpbmcgR05VIGxpYmljb252IgorICAgIGFtX2N2X2xpYl9pY29udj1ubworICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8aWNvbnYuaD5dLAorICAgICAgW2ljb252X3QgY2QgPSBpY29udl9vcGVuKCIiLCIiKTsKKyAgICAgICBpY29udihjZCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICAgICBpY29udl9jbG9zZShjZCk7XSwKKyAgICAgIGFtX2N2X2Z1bmNfaWNvbnY9eWVzKQorICAgIGlmIHRlc3QgIiRhbV9jdl9mdW5jX2ljb252IiAhPSB5ZXM7IHRoZW4KKyAgICAgIGFtX3NhdmVfTElCUz0iJExJQlMiCisgICAgICBMSUJTPSIkTElCUyAkTElCSUNPTlYiCisgICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGljb252Lmg+XSwKKyAgICAgICAgW2ljb252X3QgY2QgPSBpY29udl9vcGVuKCIiLCIiKTsKKyAgICAgICAgIGljb252KGNkLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgICAgaWNvbnZfY2xvc2UoY2QpO10sCisgICAgICAgIGFtX2N2X2xpYl9pY29udj15ZXMKKyAgICAgICAgYW1fY3ZfZnVuY19pY29udj15ZXMpCisgICAgICBMSUJTPSIkYW1fc2F2ZV9MSUJTIgorICAgIGZpCisgIF0pCisgIGlmIHRlc3QgIiRhbV9jdl9mdW5jX2ljb252IiA9IHllczsgdGhlbgorICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igd29ya2luZyBpY29udl0sIGFtX2N2X2Z1bmNfaWNvbnZfd29ya3MsIFsKKyAgICAgIGRubCBUaGlzIHRlc3RzIGFnYWluc3QgYnVncyBpbiBBSVggNS4xIGFuZCBIUC1VWCAxMS4xMS4KKyAgICAgIGFtX3NhdmVfTElCUz0iJExJQlMiCisgICAgICBpZiB0ZXN0ICRhbV9jdl9saWJfaWNvbnYgPSB5ZXM7IHRoZW4KKyAgICAgICAgTElCUz0iJExJQlMgJExJQklDT05WIgorICAgICAgZmkKKyAgICAgIEFDX1RSWV9SVU4oWworI2luY2x1ZGUgPGljb252Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CitpbnQgbWFpbiAoKQoreworICAvKiBUZXN0IGFnYWluc3QgQUlYIDUuMSBidWc6IEZhaWx1cmVzIGFyZSBub3QgZGlzdGluZ3Vpc2hhYmxlIGZyb20gc3VjY2Vzc2Z1bAorICAgICByZXR1cm5zLiAgKi8KKyAgeworICAgIGljb252X3QgY2RfdXRmOF90b184ODU5MSA9IGljb252X29wZW4gKCJJU084ODU5LTEiLCAiVVRGLTgiKTsKKyAgICBpZiAoY2RfdXRmOF90b184ODU5MSAhPSAoaWNvbnZfdCkoLTEpKQorICAgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBpbnB1dFtdID0gIlwzNDJcMjAyXDI1NCI7IC8qIEVVUk8gU0lHTiAqLworICAgICAgICBjaGFyIGJ1ZlsxMF07CisgICAgICAgIGNvbnN0IGNoYXIgKmlucHRyID0gaW5wdXQ7CisgICAgICAgIHNpemVfdCBpbmJ5dGVzbGVmdCA9IHN0cmxlbiAoaW5wdXQpOworICAgICAgICBjaGFyICpvdXRwdHIgPSBidWY7CisgICAgICAgIHNpemVfdCBvdXRieXRlc2xlZnQgPSBzaXplb2YgKGJ1Zik7CisgICAgICAgIHNpemVfdCByZXMgPSBpY29udiAoY2RfdXRmOF90b184ODU5MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKikgJmlucHRyLCAmaW5ieXRlc2xlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dHB0ciwgJm91dGJ5dGVzbGVmdCk7CisgICAgICAgIGlmIChyZXMgPT0gMCkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgfQorI2lmIDAgLyogVGhpcyBidWcgY291bGQgYmUgd29ya2VkIGFyb3VuZCBieSB0aGUgY2FsbGVyLiAgKi8KKyAgLyogVGVzdCBhZ2FpbnN0IEhQLVVYIDExLjExIGJ1ZzogUG9zaXRpdmUgcmV0dXJuIHZhbHVlIGluc3RlYWQgb2YgMC4gICovCisgIHsKKyAgICBpY29udl90IGNkXzg4NTkxX3RvX3V0ZjggPSBpY29udl9vcGVuICgidXRmOCIsICJpc284ODU5MSIpOworICAgIGlmIChjZF84ODU5MV90b191dGY4ICE9IChpY29udl90KSgtMSkpCisgICAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIGlucHV0W10gPSAiXDMwNHJnZXIgbWl0IGJcMzY2c2VuIEJcMzc0YmNoZW4gb2huZSBBdWdlbm1hXDMzNyI7CisgICAgICAgIGNoYXIgYnVmWzUwXTsKKyAgICAgICAgY29uc3QgY2hhciAqaW5wdHIgPSBpbnB1dDsKKyAgICAgICAgc2l6ZV90IGluYnl0ZXNsZWZ0ID0gc3RybGVuIChpbnB1dCk7CisgICAgICAgIGNoYXIgKm91dHB0ciA9IGJ1ZjsKKyAgICAgICAgc2l6ZV90IG91dGJ5dGVzbGVmdCA9IHNpemVvZiAoYnVmKTsKKyAgICAgICAgc2l6ZV90IHJlcyA9IGljb252IChjZF84ODU5MV90b191dGY4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICoqKSAmaW5wdHIsICZpbmJ5dGVzbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0cHRyLCAmb3V0Ynl0ZXNsZWZ0KTsKKyAgICAgICAgaWYgKChpbnQpcmVzID4gMCkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgfQorI2VuZGlmCisgIC8qIFRlc3QgYWdhaW5zdCBIUC1VWCAxMS4xMSBidWc6IE5vIGNvbnZlcnRlciBmcm9tIEVVQy1KUCB0byBVVEYtOCBpcworICAgICBwcm92aWRlZC4gICovCisgIGlmICgvKiBUcnkgc3RhbmRhcmRpemVkIG5hbWVzLiAgKi8KKyAgICAgIGljb252X29wZW4gKCJVVEYtOCIsICJFVUMtSlAiKSA9PSAoaWNvbnZfdCkoLTEpCisgICAgICAvKiBUcnkgSVJJWCwgT1NGLzEgbmFtZXMuICAqLworICAgICAgJiYgaWNvbnZfb3BlbiAoIlVURi04IiwgImV1Y0pQIikgPT0gKGljb252X3QpKC0xKQorICAgICAgLyogVHJ5IEFJWCBuYW1lcy4gICovCisgICAgICAmJiBpY29udl9vcGVuICgiVVRGLTgiLCAiSUJNLWV1Y0pQIikgPT0gKGljb252X3QpKC0xKQorICAgICAgLyogVHJ5IEhQLVVYIG5hbWVzLiAgKi8KKyAgICAgICYmIGljb252X29wZW4gKCJ1dGY4IiwgImV1Y0pQIikgPT0gKGljb252X3QpKC0xKSkKKyAgICByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9XSwgW2FtX2N2X2Z1bmNfaWNvbnZfd29ya3M9eWVzXSwgW2FtX2N2X2Z1bmNfaWNvbnZfd29ya3M9bm9dLAorICAgICAgICBbY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgIGFpeCogfCBocHV4KikgYW1fY3ZfZnVuY19pY29udl93b3Jrcz0iZ3Vlc3Npbmcgbm8iIDs7CisgICAgICAgICAgICopICAgICAgICAgICAgYW1fY3ZfZnVuY19pY29udl93b3Jrcz0iZ3Vlc3NpbmcgeWVzIiA7OworICAgICAgICAgZXNhY10pCisgICAgICBMSUJTPSIkYW1fc2F2ZV9MSUJTIgorICAgIF0pCisgICAgY2FzZSAiJGFtX2N2X2Z1bmNfaWNvbnZfd29ya3MiIGluCisgICAgICAqbm8pIGFtX2Z1bmNfaWNvbnY9bm8gYW1fY3ZfbGliX2ljb252PW5vIDs7CisgICAgICAqKSAgIGFtX2Z1bmNfaWNvbnY9eWVzIDs7CisgICAgZXNhYworICBlbHNlCisgICAgYW1fZnVuY19pY29udj1ubyBhbV9jdl9saWJfaWNvbnY9bm8KKyAgZmkKKyAgaWYgdGVzdCAiJGFtX2Z1bmNfaWNvbnYiID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKEhBVkVfSUNPTlYsIDEsCisgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBpY29udigpIGZ1bmN0aW9uIGFuZCBpdCB3b3Jrcy5dKQorICBmaQorICBpZiB0ZXN0ICIkYW1fY3ZfbGliX2ljb252IiA9IHllczsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGxpbmsgd2l0aCBsaWJpY29udl0pCisgICAgQUNfTVNHX1JFU1VMVChbJExJQklDT05WXSkKKyAgZWxzZQorICAgIGRubCBJZiAkTElCSUNPTlYgZGlkbid0IGxlYWQgdG8gYSB1c2FibGUgbGlicmFyeSwgd2UgZG9uJ3QgbmVlZCAkSU5DSUNPTlYKKyAgICBkbmwgZWl0aGVyLgorICAgIENQUEZMQUdTPSIkYW1fc2F2ZV9DUFBGTEFHUyIKKyAgICBMSUJJQ09OVj0KKyAgICBMVExJQklDT05WPQorICBmaQorICBBQ19TVUJTVChMSUJJQ09OVikKKyAgQUNfU1VCU1QoTFRMSUJJQ09OVikKK10pCisKK0FDX0RFRlVOKFtBTV9JQ09OVl0sCitbCisgIEFNX0lDT05WX0xJTksKKyAgaWYgdGVzdCAiJGFtX2N2X2Z1bmNfaWNvbnYiID0geWVzOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgaWNvbnYgZGVjbGFyYXRpb25dKQorICAgIEFDX0NBQ0hFX1ZBTChhbV9jdl9wcm90b19pY29udiwgWworICAgICAgQUNfVFJZX0NPTVBJTEUoWworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGljb252Lmg+CitleHRlcm4KKyNpZmRlZiBfX2NwbHVzcGx1cworIkMiCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fU1REQ19fKSB8fCBkZWZpbmVkKF9fY3BsdXNwbHVzKQorc2l6ZV90IGljb252IChpY29udl90IGNkLCBjaGFyICogKmluYnVmLCBzaXplX3QgKmluYnl0ZXNsZWZ0LCBjaGFyICogKm91dGJ1Ziwgc2l6ZV90ICpvdXRieXRlc2xlZnQpOworI2Vsc2UKK3NpemVfdCBpY29udigpOworI2VuZGlmCitdLCBbXSwgYW1fY3ZfcHJvdG9faWNvbnZfYXJnMT0iIiwgYW1fY3ZfcHJvdG9faWNvbnZfYXJnMT0iY29uc3QiKQorICAgICAgYW1fY3ZfcHJvdG9faWNvbnY9ImV4dGVybiBzaXplX3QgaWNvbnYgKGljb252X3QgY2QsICRhbV9jdl9wcm90b19pY29udl9hcmcxIGNoYXIgKiAqaW5idWYsIHNpemVfdCAqaW5ieXRlc2xlZnQsIGNoYXIgKiAqb3V0YnVmLCBzaXplX3QgKm91dGJ5dGVzbGVmdCk7Il0pCisgICAgYW1fY3ZfcHJvdG9faWNvbnY9YGVjaG8gIlskXWFtX2N2X3Byb3RvX2ljb252IiB8IHRyIC1zICcgJyB8IHNlZCAtZSAncy8oIC8oLydgCisgICAgQUNfTVNHX1JFU1VMVChbJF17YWNfdDotCisgICAgICAgICB9WyRdYW1fY3ZfcHJvdG9faWNvbnYpCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKElDT05WX0NPTlNULCAkYW1fY3ZfcHJvdG9faWNvbnZfYXJnMSwKKyAgICAgIFtEZWZpbmUgYXMgY29uc3QgaWYgdGhlIGRlY2xhcmF0aW9uIG9mIGljb252KCkgbmVlZHMgY29uc3QuXSkKKyAgZmkKK10pCmRpZmYgLS1naXQgYS9tNC9pbnRkaXYwLm00IGIvbTQvaW50ZGl2MC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzhhNjcwCi0tLSAvZGV2L251bGwKKysrIGIvbTQvaW50ZGl2MC5tNApAQCAtMCwwICsxLDg0IEBACisjIGludGRpdjAubTQgc2VyaWFsIDIgKGdldHRleHQtMC4xNykKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorCitBQ19ERUZVTihbZ3RfSU5URElWMF0sCitbCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCisKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaW50ZWdlciBkaXZpc2lvbiBieSB6ZXJvIHJhaXNlcyBTSUdGUEVdLAorICAgIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlLAorICAgIFsKKyAgICAgIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPQorY2hhbmdlcXVvdGUoLClkbmwKKyAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICBtYWNvcyogfCBkYXJ3aW5bNi05XSogfCBkYXJ3aW5bMS05XVswLTldKikKKyAgICAgICAgICAjIE9uIE1hY09TIFggMTAuMiBvciBuZXdlciwganVzdCBhc3N1bWUgdGhlIHNhbWUgYXMgd2hlbiBjcm9zcy0KKyAgICAgICAgICAjIGNvbXBpbGluZy4gSWYgd2Ugd2VyZSB0byBwZXJmb3JtIHRoZSByZWFsIHRlc3QsIDEgQ3Jhc2ggUmVwb3J0CisgICAgICAgICAgIyBkaWFsb2cgd2luZG93IHdvdWxkIHBvcCB1cC4KKyAgICAgICAgICBjYXNlICIkaG9zdF9jcHUiIGluCisgICAgICAgICAgICBpWzM0NTY3XTg2IHwgeDg2XzY0KQorICAgICAgICAgICAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT0iZ3Vlc3NpbmcgeWVzIiA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgICA7OworICAgICAgZXNhYworY2hhbmdlcXVvdGUoWyxdKWRubAorICAgICAgaWYgdGVzdCAteiAiJGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlIjsgdGhlbgorICAgICAgICBBQ19UUllfUlVOKFsKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKworc3RhdGljIHZvaWQKK3NpZ2ZwZV9oYW5kbGVyIChpbnQgc2lnKQoreworICAvKiBFeGl0IHdpdGggY29kZSAwIGlmIFNJR0ZQRSwgd2l0aCBjb2RlIDEgaWYgYW55IG90aGVyIHNpZ25hbC4gICovCisgIGV4aXQgKHNpZyAhPSBTSUdGUEUpOworfQorCitpbnQgeCA9IDE7CitpbnQgeSA9IDA7CitpbnQgejsKK2ludCBuYW47CisKK2ludCBtYWluICgpCit7CisgIHNpZ25hbCAoU0lHRlBFLCBzaWdmcGVfaGFuZGxlcik7CisvKiBJUklYIGFuZCBBSVggKHdoZW4gInhsYyAtcWNoZWNrIiBpcyB1c2VkKSB5aWVsZCBzaWduYWwgU0lHVFJBUC4gICovCisjaWYgKGRlZmluZWQgKF9fc2dpKSB8fCBkZWZpbmVkIChfQUlYKSkgJiYgZGVmaW5lZCAoU0lHVFJBUCkKKyAgc2lnbmFsIChTSUdUUkFQLCBzaWdmcGVfaGFuZGxlcik7CisjZW5kaWYKKy8qIExpbnV4L1NQQVJDIHlpZWxkcyBzaWduYWwgU0lHSUxMLiAgKi8KKyNpZiBkZWZpbmVkIChfX3NwYXJjX18pICYmIGRlZmluZWQgKF9fbGludXhfXykKKyAgc2lnbmFsIChTSUdJTEwsIHNpZ2ZwZV9oYW5kbGVyKTsKKyNlbmRpZgorCisgIHogPSB4IC8geTsKKyAgbmFuID0geSAvIHk7CisgIGV4aXQgKDEpOworfQorXSwgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9eWVzLCBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT1ubywKKyAgICAgICAgICBbCisgICAgICAgICAgICAjIEd1ZXNzIGJhc2VkIG9uIHRoZSBDUFUuCitjaGFuZ2VxdW90ZSgsKWRubAorICAgICAgICAgICAgY2FzZSAiJGhvc3RfY3B1IiBpbgorICAgICAgICAgICAgICBhbHBoYSogfCBpWzM0NTY3XTg2IHwgeDg2XzY0IHwgbTY4ayB8IHMzOTAqKQorICAgICAgICAgICAgICAgIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT0iZ3Vlc3Npbmcgbm8iOzsKKyAgICAgICAgICAgIGVzYWMKK2NoYW5nZXF1b3RlKFssXSlkbmwKKyAgICAgICAgICBdKQorICAgICAgZmkKKyAgICBdKQorICBjYXNlICIkZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGUiIGluCisgICAgKnllcykgdmFsdWU9MTs7CisgICAgKikgdmFsdWU9MDs7CisgIGVzYWMKKyAgQUNfREVGSU5FX1VOUVVPVEVEKElOVERJVjBfUkFJU0VTX1NJR0ZQRSwgJHZhbHVlLAorICAgIFtEZWZpbmUgaWYgaW50ZWdlciBkaXZpc2lvbiBieSB6ZXJvIHJhaXNlcyBzaWduYWwgU0lHRlBFLl0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvaW50bC5tNCBiL200L2ludGwubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM0NDA4YgotLS0gL2Rldi9udWxsCisrKyBiL200L2ludGwubTQKQEAgLTAsMCArMSwyODUgQEAKKyMgaW50bC5tNCBzZXJpYWwgOCAoZ2V0dGV4dC0wLjE3KQorZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCitkbmwKK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCitkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKK2RubCBmdW5jdGlvbmFsaXR5LgorZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworZG5sIEF1dGhvcnM6CitkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS0yMDAwLgorZG5sICAgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAwLTIwMDYuCisKK0FDX1BSRVJFUSgyLjUyKQorCitkbmwgQ2hlY2tzIGZvciBhbGwgcHJlcmVxdWlzaXRlcyBvZiB0aGUgaW50bCBzdWJkaXJlY3RvcnksCitkbmwgZXhjZXB0IGZvciBJTlRMX0xJQlRPT0xfU1VGRklYX1BSRUZJWCAoYW5kIHBvc3NpYmx5IExJQlRPT0wpLCBJTlRMT0JKUywKK2RubCAgICAgICAgICAgIFVTRV9JTkNMVURFRF9MSUJJTlRMLCBCVUlMRF9JTkNMVURFRF9MSUJJTlRMLgorQUNfREVGVU4oW0FNX0lOVExfU1VCRElSXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19JTlNUQUxMXSlkbmwKKyAgQUNfUkVRVUlSRShbQU1fUFJPR19NS0RJUl9QXSlkbmwgZGVmaW5lZCBieSBhdXRvbWFrZQorICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorICBBQ19SRVFVSVJFKFtndF9HTElCQzJdKWRubAorICBBQ19SRVFVSVJFKFtBQ19QUk9HX1JBTkxJQl0pZG5sCisgIEFDX1JFUVVJUkUoW2dsX1ZJU0lCSUxJVFldKWRubAorICBBQ19SRVFVSVJFKFtndF9JTlRMX1NVQkRJUl9DT1JFXSlkbmwKKyAgQUNfUkVRVUlSRShbQUNfVFlQRV9MT05HX0xPTkdfSU5UXSlkbmwKKyAgQUNfUkVRVUlSRShbZ3RfVFlQRV9XQ0hBUl9UXSlkbmwKKyAgQUNfUkVRVUlSRShbZ3RfVFlQRV9XSU5UX1RdKWRubAorICBBQ19SRVFVSVJFKFtnbF9BQ19IRUFERVJfSU5UVFlQRVNfSF0pCisgIEFDX1JFUVVJUkUoW2d0X1RZUEVfSU5UTUFYX1RdKQorICBBQ19SRVFVSVJFKFtndF9QUklOVEZfUE9TSVhdKQorICBBQ19SRVFVSVJFKFtnbF9HTElCQzIxXSlkbmwKKyAgQUNfUkVRVUlSRShbZ2xfWFNJWkVdKWRubAorICBBQ19SRVFVSVJFKFtndF9JTlRMX01BQ09TWF0pZG5sCisKKyAgQUNfQ0hFQ0tfVFlQRShbcHRyZGlmZl90XSwgLAorICAgIFtBQ19ERUZJTkUoW3B0cmRpZmZfdF0sIFtsb25nXSwKKyAgICAgICBbRGVmaW5lIGFzIHRoZSB0eXBlIG9mIHRoZSByZXN1bHQgb2Ygc3VidHJhY3RpbmcgdHdvIHBvaW50ZXJzLCBpZiB0aGUgc3lzdGVtIGRvZXNuJ3QgZGVmaW5lIGl0Ll0pCisgICAgXSkKKyAgQUNfQ0hFQ0tfSEVBREVSUyhbc3RkZGVmLmggc3RkbGliLmggc3RyaW5nLmhdKQorICBBQ19DSEVDS19GVU5DUyhbYXNwcmludGYgZndwcmludGYgcHV0ZW52IHNldGVudiBzZXRsb2NhbGUgc25wcmludGYgd2NzbGVuXSkKKworICBkbmwgVXNlIHRoZSBfc25wcmludGYgZnVuY3Rpb24gb25seSBpZiBpdCBpcyBkZWNsYXJlZCAoYmVjYXVzZSBvbiBOZXRCU0QgaXQKKyAgZG5sIGlzIGRlZmluZWQgYXMgYSB3ZWFrIGFsaWFzIG9mIHNucHJpbnRmOyB3ZSBwcmVmZXIgdG8gdXNlIHRoZSBsYXR0ZXIpLgorICBndF9DSEVDS19ERUNMKF9zbnByaW50ZiwgWyNpbmNsdWRlIDxzdGRpby5oPl0pCisgIGd0X0NIRUNLX0RFQ0woX3Nud3ByaW50ZiwgWyNpbmNsdWRlIDxzdGRpby5oPl0pCisKKyAgZG5sIFVzZSB0aGUgKl91bmxvY2tlZCBmdW5jdGlvbnMgb25seSBpZiB0aGV5IGFyZSBkZWNsYXJlZC4KKyAgZG5sIChiZWNhdXNlIHNvbWUgb2YgdGhlbSB3ZXJlIGRlZmluZWQgd2l0aG91dCBiZWluZyBkZWNsYXJlZCBpbiBTb2xhcmlzCisgIGRubCAyLjUuMSBidXQgd2VyZSByZW1vdmVkIGluIFNvbGFyaXMgMi42LCB3aGVyZWFzIHdlIHdhbnQgYmluYXJpZXMgYnVpbHQKKyAgZG5sIG9uIFNvbGFyaXMgMi41LjEgdG8gcnVuIG9uIFNvbGFyaXMgMi42KS4KKyAgZG5sIERvbid0IHVzZSBBQ19DSEVDS19ERUNMUyBiZWNhdXNlIGl0IGlzbid0IHN1cHBvcnRlZCBpbiBhdXRvY29uZi0yLjEzLgorICBndF9DSEVDS19ERUNMKGdldGNfdW5sb2NrZWQsIFsjaW5jbHVkZSA8c3RkaW8uaD5dKQorCisgIGNhc2UgJGd0X2N2X2Z1bmNfcHJpbnRmX3Bvc2l4IGluCisgICAgKnllcykgSEFWRV9QT1NJWF9QUklOVEY9MSA7OworICAgICopIEhBVkVfUE9TSVhfUFJJTlRGPTAgOzsKKyAgZXNhYworICBBQ19TVUJTVChbSEFWRV9QT1NJWF9QUklOVEZdKQorICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19hc3ByaW50ZiIgPSB5ZXM7IHRoZW4KKyAgICBIQVZFX0FTUFJJTlRGPTEKKyAgZWxzZQorICAgIEhBVkVfQVNQUklOVEY9MAorICBmaQorICBBQ19TVUJTVChbSEFWRV9BU1BSSU5URl0pCisgIGlmIHRlc3QgIiRhY19jdl9mdW5jX3NucHJpbnRmIiA9IHllczsgdGhlbgorICAgIEhBVkVfU05QUklOVEY9MQorICBlbHNlCisgICAgSEFWRV9TTlBSSU5URj0wCisgIGZpCisgIEFDX1NVQlNUKFtIQVZFX1NOUFJJTlRGXSkKKyAgaWYgdGVzdCAiJGFjX2N2X2Z1bmNfd3ByaW50ZiIgPSB5ZXM7IHRoZW4KKyAgICBIQVZFX1dQUklOVEY9MQorICBlbHNlCisgICAgSEFWRV9XUFJJTlRGPTAKKyAgZmkKKyAgQUNfU1VCU1QoW0hBVkVfV1BSSU5URl0pCisKKyAgQU1fTEFOR0lORk9fQ09ERVNFVAorICBndF9MQ19NRVNTQUdFUworCisgIGRubCBDb21waWxhdGlvbiBvbiBtaW5ndyBhbmQgQ3lnd2luIG5lZWRzIHNwZWNpYWwgTWFrZWZpbGUgcnVsZXMsIGJlY2F1c2UKKyAgZG5sIDEuIHdoZW4gd2UgaW5zdGFsbCBhIHNoYXJlZCBsaWJyYXJ5LCB3ZSBtdXN0IGFycmFuZ2UgdG8gZXhwb3J0CisgIGRubCAgICBhdXhpbGlhcnkgcG9pbnRlciB2YXJpYWJsZXMgZm9yIGV2ZXJ5IGV4cG9ydGVkIHZhcmlhYmxlLAorICBkbmwgMi4gd2hlbiB3ZSBpbnN0YWxsIGEgc2hhcmVkIGxpYnJhcnkgYW5kIGEgc3RhdGljIGxpYnJhcnkgc2ltdWx0YW5lb3VzbHksCisgIGRubCAgICB0aGUgaW5jbHVkZSBmaWxlIHNwZWNpZmllcyBfX2RlY2xzcGVjKGRsbGltcG9ydCkgYW5kIHRoZXJlZm9yZSB3ZQorICBkbmwgICAgbXVzdCBhcnJhbmdlIHRvIGRlZmluZSB0aGUgYXV4aWxpYXJ5IHBvaW50ZXIgdmFyaWFibGVzIGZvciB0aGUKKyAgZG5sICAgIGV4cG9ydGVkIHZhcmlhYmxlcyBfYWxzb18gaW4gdGhlIHN0YXRpYyBsaWJyYXJ5LgorICBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXM7IHRoZW4KKyAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgIG1pbmd3KiB8IGN5Z3dpbiopIGlzX3dvZTMyZGxsPXllcyA7OworICAgICAgKikgaXNfd29lMzJkbGw9bm8gOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBpc193b2UzMmRsbD1ubworICBmaQorICBXT0UzMkRMTD0kaXNfd29lMzJkbGwKKyAgQUNfU1VCU1QoW1dPRTMyRExMXSkKKworICBkbmwgT24gbWluZ3cgYW5kIEN5Z3dpbiwgd2UgY2FuIGFjdGl2YXRlIHNwZWNpYWwgTWFrZWZpbGUgcnVsZXMgd2hpY2ggYWRkCisgIGRubCB2ZXJzaW9uIGluZm9ybWF0aW9uIHRvIHRoZSBzaGFyZWQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcy4KKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgbWluZ3cqIHwgY3lnd2luKikgaXNfd29lMzI9eWVzIDs7CisgICAgKikgaXNfd29lMzI9bm8gOzsKKyAgZXNhYworICBXT0UzMj0kaXNfd29lMzIKKyAgQUNfU1VCU1QoW1dPRTMyXSkKKyAgaWYgdGVzdCAkV09FMzIgPSB5ZXM7IHRoZW4KKyAgICBkbmwgQ2hlY2sgZm9yIGEgcHJvZ3JhbSB0aGF0IGNvbXBpbGVzIFdpbmRvd3MgcmVzb3VyY2UgZmlsZXMuCisgICAgQUNfQ0hFQ0tfVE9PTChbV0lORFJFU10sIFt3aW5kcmVzXSkKKyAgZmkKKworICBkbmwgRGV0ZXJtaW5lIHdoZXRoZXIgd2hlbiBjcmVhdGluZyBhIGxpYnJhcnksICItbGMiIHNob3VsZCBiZSBwYXNzZWQgdG8KKyAgZG5sIGxpYnRvb2wgb3Igbm90LiBPbiBtYW55IHBsYXRmb3JtcywgaXQgaXMgcmVxdWlyZWQgZm9yIHRoZSBsaWJ0b29sIG9wdGlvbgorICBkbmwgLW5vLXVuZGVmaW5lZCB0byB3b3JrLiBPbiBIUC1VWCwgaG93ZXZlciwgdGhlIC1sYyAtIHN0b3JlZCBieSBsaWJ0b29sCisgIGRubCBpbiB0aGUgKi5sYSBmaWxlcyAtIG1ha2VzIGl0IGltcG9zc2libGUgdG8gY3JlYXRlIG11bHRpdGhyZWFkZWQgcHJvZ3JhbXMsCisgIGRubCBiZWNhdXNlIGxpYnRvb2wgYWxzbyByZW9yZGVycyB0aGUgLWxjIHRvIGNvbWUgYmVmb3JlIHRoZSAtcHRocmVhZCwgYW5kCisgIGRubCB0aGlzIGRpc2FibGVzIHB0aHJlYWRfY3JlYXRlKCkgPGh0dHA6Ly9kb2NzLmhwLmNvbS9lbi8xODk2L3B0aHJlYWRzLmh0bWw+LgorICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBocHV4KikgTFRMSUJDPSIiIDs7CisgICAgKikgICAgIExUTElCQz0iLWxjIiA7OworICBlc2FjCisgIEFDX1NVQlNUKFtMVExJQkNdKQorCisgIGRubCBSZW5hbWUgc29tZSBtYWNyb3MgYW5kIGZ1bmN0aW9ucyB1c2VkIGZvciBsb2NraW5nLgorICBBSF9CT1RUT00oWworI2RlZmluZSBfX2xpYmNfbG9ja190ICAgICAgICAgICAgICAgICAgIGdsX2xvY2tfdAorI2RlZmluZSBfX2xpYmNfbG9ja19kZWZpbmUgICAgICAgICAgICAgIGdsX2xvY2tfZGVmaW5lCisjZGVmaW5lIF9fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZCAgZ2xfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQKKyNkZWZpbmUgX19saWJjX2xvY2tfaW5pdCAgICAgICAgICAgICAgICBnbF9sb2NrX2luaXQKKyNkZWZpbmUgX19saWJjX2xvY2tfbG9jayAgICAgICAgICAgICAgICBnbF9sb2NrX2xvY2sKKyNkZWZpbmUgX19saWJjX2xvY2tfdW5sb2NrICAgICAgICAgICAgICBnbF9sb2NrX3VubG9jaworI2RlZmluZSBfX2xpYmNfbG9ja19yZWN1cnNpdmVfdCAgICAgICAgICAgICAgICAgICBnbF9yZWN1cnNpdmVfbG9ja190CisjZGVmaW5lIF9fbGliY19sb2NrX2RlZmluZV9yZWN1cnNpdmUgICAgICAgICAgICAgIGdsX3JlY3Vyc2l2ZV9sb2NrX2RlZmluZQorI2RlZmluZSBfX2xpYmNfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWRfcmVjdXJzaXZlICBnbF9yZWN1cnNpdmVfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQKKyNkZWZpbmUgX19saWJjX2xvY2tfaW5pdF9yZWN1cnNpdmUgICAgICAgICAgICAgICAgZ2xfcmVjdXJzaXZlX2xvY2tfaW5pdAorI2RlZmluZSBfX2xpYmNfbG9ja19sb2NrX3JlY3Vyc2l2ZSAgICAgICAgICAgICAgICBnbF9yZWN1cnNpdmVfbG9ja19sb2NrCisjZGVmaW5lIF9fbGliY19sb2NrX3VubG9ja19yZWN1cnNpdmUgICAgICAgICAgICAgIGdsX3JlY3Vyc2l2ZV9sb2NrX3VubG9jaworI2RlZmluZSBnbHRocmVhZF9pbl91c2UgIGxpYmludGxfdGhyZWFkX2luX3VzZQorI2RlZmluZSBnbHRocmVhZF9sb2NrX2luaXQgICAgIGxpYmludGxfbG9ja19pbml0CisjZGVmaW5lIGdsdGhyZWFkX2xvY2tfbG9jayAgICAgbGliaW50bF9sb2NrX2xvY2sKKyNkZWZpbmUgZ2x0aHJlYWRfbG9ja191bmxvY2sgICBsaWJpbnRsX2xvY2tfdW5sb2NrCisjZGVmaW5lIGdsdGhyZWFkX2xvY2tfZGVzdHJveSAgbGliaW50bF9sb2NrX2Rlc3Ryb3kKKyNkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX2luaXQgICAgIGxpYmludGxfcndsb2NrX2luaXQKKyNkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX3JkbG9jayAgIGxpYmludGxfcndsb2NrX3JkbG9jaworI2RlZmluZSBnbHRocmVhZF9yd2xvY2tfd3Jsb2NrICAgbGliaW50bF9yd2xvY2tfd3Jsb2NrCisjZGVmaW5lIGdsdGhyZWFkX3J3bG9ja191bmxvY2sgICBsaWJpbnRsX3J3bG9ja191bmxvY2sKKyNkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX2Rlc3Ryb3kgIGxpYmludGxfcndsb2NrX2Rlc3Ryb3kKKyNkZWZpbmUgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfaW5pdCAgICAgbGliaW50bF9yZWN1cnNpdmVfbG9ja19pbml0CisjZGVmaW5lIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2xvY2sgICAgIGxpYmludGxfcmVjdXJzaXZlX2xvY2tfbG9jaworI2RlZmluZSBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja191bmxvY2sgICBsaWJpbnRsX3JlY3Vyc2l2ZV9sb2NrX3VubG9jaworI2RlZmluZSBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19kZXN0cm95ICBsaWJpbnRsX3JlY3Vyc2l2ZV9sb2NrX2Rlc3Ryb3kKKyNkZWZpbmUgZ2x0aHJlYWRfb25jZSAgICAgICAgICAgICAgICAgbGliaW50bF9vbmNlCisjZGVmaW5lIGdsdGhyZWFkX29uY2VfY2FsbCAgICAgICAgICAgIGxpYmludGxfb25jZV9jYWxsCisjZGVmaW5lIGdsdGhyZWFkX29uY2Vfc2luZ2xldGhyZWFkZWQgIGxpYmludGxfb25jZV9zaW5nbGV0aHJlYWRlZAorXSkKK10pCisKKworZG5sIENoZWNrcyBmb3IgdGhlIGNvcmUgZmlsZXMgb2YgdGhlIGludGwgc3ViZGlyZWN0b3J5OgorZG5sICAgZGNpZ2V0dGV4dC5jCitkbmwgICBldmFsLXBsdXJhbC5oCitkbmwgICBleHBsb2RlbmFtZS5jCitkbmwgICBmaW5kZG9tYWluLmMKK2RubCAgIGdldHRleHRQLmgKK2RubCAgIGdtby5oCitkbmwgICBoYXNoLXN0cmluZy5oIGhhc2gtc3RyaW5nLmMKK2RubCAgIGwxMG5mbGlzdC5jCitkbmwgICBsaWJnbnVpbnRsLmguaW4gKGV4Y2VwdCB0aGUgKnByaW50ZiBzdHVmZikKK2RubCAgIGxvYWRpbmZvLmgKK2RubCAgIGxvYWRtc2djYXQuYworZG5sICAgbG9jYWxlYWxpYXMuYworZG5sICAgbG9nLmMKK2RubCAgIHBsdXJhbC1leHAuaCBwbHVyYWwtZXhwLmMKK2RubCAgIHBsdXJhbC55CitkbmwgVXNlZCBieSBsaWJnbG9jYWxlLgorQUNfREVGVU4oW2d0X0lOVExfU1VCRElSX0NPUkVdLAorWworICBBQ19SRVFVSVJFKFtBQ19DX0lOTElORV0pZG5sCisgIEFDX1JFUVVJUkUoW0FDX1RZUEVfU0laRV9UXSlkbmwKKyAgQUNfUkVRVUlSRShbZ2xfQUNfSEVBREVSX1NURElOVF9IXSkKKyAgQUNfUkVRVUlSRShbQUNfRlVOQ19BTExPQ0FdKWRubAorICBBQ19SRVFVSVJFKFtBQ19GVU5DX01NQVBdKWRubAorICBBQ19SRVFVSVJFKFtndF9JTlRESVYwXSlkbmwKKyAgQUNfUkVRVUlSRShbZ2xfQUNfVFlQRV9VSU5UTUFYX1RdKWRubAorICBBQ19SRVFVSVJFKFtndF9JTlRUWVBFU19QUkldKWRubAorICBBQ19SRVFVSVJFKFtnbF9MT0NLXSlkbmwKKworICBBQ19UUllfTElOSygKKyAgICBbaW50IGZvbyAoaW50IGEpIHsgYSA9IF9fYnVpbHRpbl9leHBlY3QgKGEsIDEwKTsgcmV0dXJuIGEgPT0gMTAgPyAwIDogMTsgfV0sCisgICAgW10sCisgICAgW0FDX0RFRklORShbSEFWRV9CVUlMVElOX0VYUEVDVF0sIDEsCisgICAgICAgW0RlZmluZSB0byAxIGlmIHRoZSBjb21waWxlciB1bmRlcnN0YW5kcyBfX2J1aWx0aW5fZXhwZWN0Ll0pXSkKKworICBBQ19DSEVDS19IRUFERVJTKFthcmd6LmggaW50dHlwZXMuaCBsaW1pdHMuaCB1bmlzdGQuaCBzeXMvcGFyYW0uaF0pCisgIEFDX0NIRUNLX0ZVTkNTKFtnZXRjd2QgZ2V0ZWdpZCBnZXRldWlkIGdldGdpZCBnZXR1aWQgbWVtcGNweSBtdW5tYXAgXAorICAgIHN0cGNweSBzdHJjYXNlY21wIHN0cmR1cCBzdHJ0b3VsIHRzZWFyY2ggYXJnel9jb3VudCBhcmd6X3N0cmluZ2lmeSBcCisgICAgYXJnel9uZXh0IF9fZnNldGxvY2tpbmddKQorCisgIGRubCBVc2UgdGhlICpfdW5sb2NrZWQgZnVuY3Rpb25zIG9ubHkgaWYgdGhleSBhcmUgZGVjbGFyZWQuCisgIGRubCAoYmVjYXVzZSBzb21lIG9mIHRoZW0gd2VyZSBkZWZpbmVkIHdpdGhvdXQgYmVpbmcgZGVjbGFyZWQgaW4gU29sYXJpcworICBkbmwgMi41LjEgYnV0IHdlcmUgcmVtb3ZlZCBpbiBTb2xhcmlzIDIuNiwgd2hlcmVhcyB3ZSB3YW50IGJpbmFyaWVzIGJ1aWx0CisgIGRubCBvbiBTb2xhcmlzIDIuNS4xIHRvIHJ1biBvbiBTb2xhcmlzIDIuNikuCisgIGRubCBEb24ndCB1c2UgQUNfQ0hFQ0tfREVDTFMgYmVjYXVzZSBpdCBpc24ndCBzdXBwb3J0ZWQgaW4gYXV0b2NvbmYtMi4xMy4KKyAgZ3RfQ0hFQ0tfREVDTChmZW9mX3VubG9ja2VkLCBbI2luY2x1ZGUgPHN0ZGlvLmg+XSkKKyAgZ3RfQ0hFQ0tfREVDTChmZ2V0c191bmxvY2tlZCwgWyNpbmNsdWRlIDxzdGRpby5oPl0pCisKKyAgQU1fSUNPTlYKKworICBkbmwgZ2xpYmMgPj0gMi40IGhhcyBhIE5MX0xPQ0FMRV9OQU1FIG1hY3JvIHdoZW4gX0dOVV9TT1VSQ0UgaXMgZGVmaW5lZCwKKyAgZG5sIGFuZCBhIF9OTF9MT0NBTEVfTkFNRSBtYWNybyBhbHdheXMuCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgTkxfTE9DQUxFX05BTUUgbWFjcm9dLCBndF9jdl9ubF9sb2NhbGVfbmFtZSwKKyAgICBbQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxsYW5naW5mby5oPgorI2luY2x1ZGUgPGxvY2FsZS5oPl0sCisgICAgICBbY2hhciogY3MgPSBubF9sYW5naW5mbyhfTkxfTE9DQUxFX05BTUUoTENfTUVTU0FHRVMpKTsKKyAgICAgICByZXR1cm4gIWNzOworICAgICAgXSwKKyAgICAgIGd0X2N2X25sX2xvY2FsZV9uYW1lPXllcywKKyAgICAgIGd0X2N2X25sX2xvY2FsZV9uYW1lPW5vKQorICAgIF0pCisgIGlmIHRlc3QgJGd0X2N2X25sX2xvY2FsZV9uYW1lID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKEhBVkVfTkxfTE9DQUxFX05BTUUsIDEsCisgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIDxsYW5naW5mby5oPiBhbmQgaXQgZGVmaW5lcyB0aGUgTkxfTE9DQUxFX05BTUUgbWFjcm8gaWYgX0dOVV9TT1VSQ0UgaXMgZGVmaW5lZC5dKQorICBmaQorCisgIGRubCBpbnRsL3BsdXJhbC5jIGlzIGdlbmVyYXRlZCBmcm9tIGludGwvcGx1cmFsLnkuIEl0IHJlcXVpcmVzIGJpc29uLAorICBkbmwgYmVjYXVzZSBwbHVyYWwueSB1c2VzIGJpc29uIHNwZWNpZmljIGZlYXR1cmVzLiBJdCByZXF1aXJlcyBhdCBsZWFzdAorICBkbmwgYmlzb24tMS4yNiBiZWNhdXNlIGVhcmxpZXIgdmVyc2lvbnMgZ2VuZXJhdGUgYSBwbHVyYWwuYyB0aGF0IGRvZXNuJ3QKKyAgZG5sIGNvbXBpbGUuCisgIGRubCBiaXNvbiBpcyBvbmx5IG5lZWRlZCBmb3IgdGhlIG1haW50YWluZXIgKHdobyB0b3VjaGVzIHBsdXJhbC55KS4gQnV0IGluCisgIGRubCBvcmRlciB0byBhdm9pZCBzZXBhcmF0ZSBNYWtlZmlsZXMgb3IgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlLCB3ZSBwdXQKKyAgZG5sIHRoZSBydWxlIGluIGdlbmVyYWwgTWFrZWZpbGUuIE5vdywgc29tZSBwZW9wbGUgY2FyZWxlc3NseSB0b3VjaCB0aGUKKyAgZG5sIGZpbGVzIG9yIGhhdmUgYSBicm9rZW4gIm1ha2UiIHByb2dyYW0sIGhlbmNlIHRoZSBwbHVyYWwuYyBydWxlIHdpbGwKKyAgZG5sIHNvbWV0aW1lcyBmaXJlLiBUbyBhdm9pZCBhbiBlcnJvciwgZGVmaW5lcyBCSVNPTiB0byAiOiIgaWYgaXQgaXMgbm90CisgIGRubCBwcmVzZW50IG9yIHRvbyBvbGQuCisgIEFDX0NIRUNLX1BST0dTKFtJTlRMQklTT05dLCBbYmlzb25dKQorICBpZiB0ZXN0IC16ICIkSU5UTEJJU09OIjsgdGhlbgorICAgIGFjX3ZlcmNfZmFpbD15ZXMKKyAgZWxzZQorICAgIGRubCBGb3VuZCBpdCwgbm93IGNoZWNrIHRoZSB2ZXJzaW9uLgorICAgIEFDX01TR19DSEVDS0lORyhbdmVyc2lvbiBvZiBiaXNvbl0pCitjaGFuZ2VxdW90ZSg8PCw+PilkbmwKKyAgICBhY19wcm9nX3ZlcnNpb249YCRJTlRMQklTT04gLS12ZXJzaW9uIDI+JjEgfCBzZWQgLW4gJ3MvXi4qR05VIEJpc29uLiogXChbMC05XSpcLlswLTkuXSpcKS4qJC9cMS9wJ2AKKyAgICBjYXNlICRhY19wcm9nX3ZlcnNpb24gaW4KKyAgICAgICcnKSBhY19wcm9nX3ZlcnNpb249InYuID8uPz8sIGJhZCI7IGFjX3ZlcmNfZmFpbD15ZXM7OworICAgICAgMS4yWzYtOV0qIHwgMS5bMy05XVswLTldKiB8IFsyLTldLiopCitjaGFuZ2VxdW90ZShbLF0pZG5sCisgICAgICAgICBhY19wcm9nX3ZlcnNpb249IiRhY19wcm9nX3ZlcnNpb24sIG9rIjsgYWNfdmVyY19mYWlsPW5vOzsKKyAgICAgICopIGFjX3Byb2dfdmVyc2lvbj0iJGFjX3Byb2dfdmVyc2lvbiwgYmFkIjsgYWNfdmVyY19mYWlsPXllczs7CisgICAgZXNhYworICAgIEFDX01TR19SRVNVTFQoWyRhY19wcm9nX3ZlcnNpb25dKQorICBmaQorICBpZiB0ZXN0ICRhY192ZXJjX2ZhaWwgPSB5ZXM7IHRoZW4KKyAgICBJTlRMQklTT049OgorICBmaQorXSkKKworCitkbmwgZ3RfQ0hFQ0tfREVDTChGVU5DLCBJTkNMVURFUykKK2RubCBDaGVjayB3aGV0aGVyIGEgZnVuY3Rpb24gaXMgZGVjbGFyZWQuCitBQ19ERUZVTihbZ3RfQ0hFQ0tfREVDTF0sCitbCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyICQxIGlzIGRlY2xhcmVkXSwgYWNfY3ZfaGF2ZV9kZWNsXyQxLAorICAgIFtBQ19UUllfQ09NUElMRShbJDJdLCBbCisjaWZuZGVmICQxCisgIGNoYXIgKnAgPSAoY2hhciAqKSAkMTsKKyNlbmRpZgorXSwgYWNfY3ZfaGF2ZV9kZWNsXyQxPXllcywgYWNfY3ZfaGF2ZV9kZWNsXyQxPW5vKV0pCisgIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF8kMSA9IHllczsgdGhlbgorICAgIGd0X3ZhbHVlPTEKKyAgZWxzZQorICAgIGd0X3ZhbHVlPTAKKyAgZmkKKyAgQUNfREVGSU5FX1VOUVVPVEVEKFtIQVZFX0RFQ0xfXXRyYW5zbGl0KCQxLCBbYS16XSwgW0EtWl0pLCBbJGd0X3ZhbHVlXSwKKyAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGAkMScsIGFuZCB0byAwIGlmIHlvdSBkb24ndC5dKQorXSkKZGlmZiAtLWdpdCBhL200L2ludGxkaXIubTQgYi9tNC9pbnRsZGlyLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMjg4NDMKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9pbnRsZGlyLm00CkBAIC0wLDAgKzEsMTkgQEAKKyMgaW50bGRpci5tNCBzZXJpYWwgMSAoZ2V0dGV4dC0wLjE2KQorZG5sIENvcHlyaWdodCAoQykgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorZG5sCitkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CitkbmwgZnVuY3Rpb25hbGl0eS4KK2RubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCitkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCitkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCitkbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisKK0FDX1BSRVJFUSgyLjUyKQorCitkbmwgVGVsbHMgdGhlIEFNX0dOVV9HRVRURVhUIG1hY3JvIHRvIGNvbnNpZGVyIGFuIGludGwvIGRpcmVjdG9yeS4KK0FDX0RFRlVOKFtBTV9HTlVfR0VUVEVYVF9JTlRMX1NVQkRJUl0sIFtdKQpkaWZmIC0tZ2l0IGEvbTQvaW50bG1hY29zeC5tNCBiL200L2ludGxtYWNvc3gubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNmMGQ5MAotLS0gL2Rldi9udWxsCisrKyBiL200L2ludGxtYWNvc3gubTQKQEAgLTAsMCArMSw1MSBAQAorIyBpbnRsbWFjb3N4Lm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTcpCitkbmwgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KK2RubAorZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKK2RubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCitkbmwgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorZG5sIGZ1bmN0aW9uYWxpdHkuCitkbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAorZG5sIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIEdOVQorZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorZG5sIFRoZXkgYXJlICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgorCitkbmwgQ2hlY2tzIGZvciBzcGVjaWFsIG9wdGlvbnMgbmVlZGVkIG9uIE1hY09TIFguCitkbmwgRGVmaW5lcyBJTlRMX01BQ09TWF9MSUJTLgorQUNfREVGVU4oW2d0X0lOVExfTUFDT1NYXSwKK1sKKyAgZG5sIENoZWNrIGZvciBBUEkgaW50cm9kdWNlZCBpbiBNYWNPUyBYIDEwLjIuCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZV0sCisgICAgZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlLAorICAgIFtndF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBMSUJTPSIkTElCUyAtV2wsLWZyYW1ld29yayAtV2wsQ29yZUZvdW5kYXRpb24iCisgICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZQcmVmZXJlbmNlcy5oPl0sCisgICAgICAgW0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUoTlVMTCwgTlVMTCldLAorICAgICAgIFtndF9jdl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWU9eWVzXSwKKyAgICAgICBbZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlPW5vXSkKKyAgICAgTElCUz0iJGd0X3NhdmVfTElCUyJdKQorICBpZiB0ZXN0ICRndF9jdl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoW0hBVkVfQ0ZQUkVGRVJFTkNFU0NPUFlBUFBWQUxVRV0sIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIE1hY09TIFggZnVuY3Rpb24gQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSBpbiB0aGUgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLl0pCisgIGZpCisgIGRubCBDaGVjayBmb3IgQVBJIGludHJvZHVjZWQgaW4gTWFjT1MgWCAxMC4zLgorICBBQ19DQUNIRV9DSEVDSyhbZm9yIENGTG9jYWxlQ29weUN1cnJlbnRdLCBndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQsCisgICAgW2d0X3NhdmVfTElCUz0iJExJQlMiCisgICAgIExJQlM9IiRMSUJTIC1XbCwtZnJhbWV3b3JrIC1XbCxDb3JlRm91bmRhdGlvbiIKKyAgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRkxvY2FsZS5oPl0sIFtDRkxvY2FsZUNvcHlDdXJyZW50KCk7XSwKKyAgICAgICBbZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50PXllc10sCisgICAgICAgW2d0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudD1ub10pCisgICAgIExJQlM9IiRndF9zYXZlX0xJQlMiXSkKKyAgaWYgdGVzdCAkZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50ID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKFtIQVZFX0NGTE9DQUxFQ09QWUNVUlJFTlRdLCAxLAorICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBNYWNPUyBYIGZ1bmN0aW9uIENGTG9jYWxlQ29weUN1cnJlbnQgaW4gdGhlIENvcmVGb3VuZGF0aW9uIGZyYW1ld29yay5dKQorICBmaQorICBJTlRMX01BQ09TWF9MSUJTPQorICBpZiB0ZXN0ICRndF9jdl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUgPSB5ZXMgfHwgdGVzdCAkZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50ID0geWVzOyB0aGVuCisgICAgSU5UTF9NQUNPU1hfTElCUz0iLVdsLC1mcmFtZXdvcmsgLVdsLENvcmVGb3VuZGF0aW9uIgorICBmaQorICBBQ19TVUJTVChbSU5UTF9NQUNPU1hfTElCU10pCitdKQpkaWZmIC0tZ2l0IGEvbTQvaW50bWF4Lm00IGIvbTQvaW50bWF4Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlN2E4YTQKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9pbnRtYXgubTQKQEAgLTAsMCArMSwzMyBAQAorIyBpbnRtYXgubTQgc2VyaWFsIDMgKGdldHRleHQtMC4xNikKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgRnJvbSBCcnVubyBIYWlibGUuCitkbmwgVGVzdCB3aGV0aGVyIHRoZSBzeXN0ZW0gaGFzIHRoZSAnaW50bWF4X3QnIHR5cGUsIGJ1dCBkb24ndCBhdHRlbXB0IHRvCitkbmwgZmluZCBhIHJlcGxhY2VtZW50IGlmIGl0IGlzIGxhY2tpbmcuCisKK0FDX0RFRlVOKFtndF9UWVBFX0lOVE1BWF9UXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfQUNfSEVBREVSX0lOVFRZUEVTX0hdKQorICBBQ19SRVFVSVJFKFtnbF9BQ19IRUFERVJfU1RESU5UX0hdKQorICBBQ19DQUNIRV9DSEVDSyhmb3IgaW50bWF4X3QsIGd0X2N2X2NfaW50bWF4X3QsCisgICAgW0FDX1RSWV9DT01QSUxFKFsKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZiBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWAorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisjaWYgSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWAorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjZW5kaWYKK10sICAgICBbaW50bWF4X3QgeCA9IC0xOworICAgICAgICByZXR1cm4gIXg7XSwKKyAgICAgICBndF9jdl9jX2ludG1heF90PXllcywKKyAgICAgICBndF9jdl9jX2ludG1heF90PW5vKV0pCisgIGlmIHRlc3QgJGd0X2N2X2NfaW50bWF4X3QgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9JTlRNQVhfVCwgMSwKKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdpbnRtYXhfdCcgdHlwZSBpbiA8c3RkaW50Lmg+IG9yIDxpbnR0eXBlcy5oPi5dKQorICBmaQorXSkKZGlmZiAtLWdpdCBhL200L2ludHR5cGVzLXByaS5tNCBiL200L2ludHR5cGVzLXByaS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzdmODk0Ci0tLSAvZGV2L251bGwKKysrIGIvbTQvaW50dHlwZXMtcHJpLm00CkBAIC0wLDAgKzEsMzYgQEAKKyMgaW50dHlwZXMtcHJpLm00IHNlcmlhbCA0IChnZXR0ZXh0LTAuMTYpCitkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorCitBQ19QUkVSRVEoMi41MikKKworIyBEZWZpbmUgUFJJX01BQ1JPU19CUk9LRU4gaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZGVmaW5lcyB0aGUgUFJJKgorIyBtYWNyb3MgdG8gbm9uLXN0cmluZyB2YWx1ZXMuICBUaGlzIGlzIHRoZSBjYXNlIG9uIEFJWCA0LjMuMy4KKworQUNfREVGVU4oW2d0X0lOVFRZUEVTX1BSSV0sCitbCisgIEFDX0NIRUNLX0hFQURFUlMoW2ludHR5cGVzLmhdKQorICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHllczsgdGhlbgorICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBpbnR0eXBlcy5oIFBSSXhOTiBtYWNyb3MgYXJlIGJyb2tlbl0sCisgICAgICBndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuLAorICAgICAgWworICAgICAgICBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaWZkZWYgUFJJZDMyCitjaGFyICpwID0gUFJJZDMyOworI2VuZGlmCitdLCBbXSwgZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbj1ubywgZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbj15ZXMpCisgICAgICBdKQorICBmaQorICBpZiB0ZXN0ICIkZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbiIgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoUFJJX01BQ1JPU19CUk9LRU4sIDEsCisgICAgICBbRGVmaW5lIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMgYW5kIGRlZmluZXMgdW51c2FibGUgUFJJKiBtYWNyb3MuXSkKKyAgICBQUklfTUFDUk9TX0JST0tFTj0xCisgIGVsc2UKKyAgICBQUklfTUFDUk9TX0JST0tFTj0wCisgIGZpCisgIEFDX1NVQlNUKFtQUklfTUFDUk9TX0JST0tFTl0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvaW50dHlwZXNfaC5tNCBiL200L2ludHR5cGVzX2gubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRjOGVjYgotLS0gL2Rldi9udWxsCisrKyBiL200L2ludHR5cGVzX2gubTQKQEAgLTAsMCArMSwyNiBAQAorIyBpbnR0eXBlc19oLm00IHNlcmlhbCA3CitkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDQsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisKKyMgRGVmaW5lIEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVggaWYgPGludHR5cGVzLmg+IGV4aXN0cywKKyMgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4sIGFuZCBkZWNsYXJlcyB1aW50bWF4X3QuCisKK0FDX0RFRlVOKFtnbF9BQ19IRUFERVJfSU5UVFlQRVNfSF0sCitbCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgaW50dHlwZXMuaF0sIGdsX2N2X2hlYWRlcl9pbnR0eXBlc19oLAorICBbQUNfVFJZX0NPTVBJTEUoCisgICAgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPl0sCisgICAgW3VpbnRtYXhfdCBpID0gKHVpbnRtYXhfdCkgLTE7IHJldHVybiAhaTtdLAorICAgIGdsX2N2X2hlYWRlcl9pbnR0eXBlc19oPXllcywKKyAgICBnbF9jdl9oZWFkZXJfaW50dHlwZXNfaD1ubyldKQorICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHllczsgdGhlbgorICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYLCAxLAorICAgICAgW0RlZmluZSBpZiA8aW50dHlwZXMuaD4gZXhpc3RzLCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwKKyAgICAgICBhbmQgZGVjbGFyZXMgdWludG1heF90LiBdKQorICBmaQorXSkKZGlmZiAtLWdpdCBhL200L2xjbWVzc2FnZS5tNCBiL200L2xjbWVzc2FnZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWFhNzdlCi0tLSAvZGV2L251bGwKKysrIGIvbTQvbGNtZXNzYWdlLm00CkBAIC0wLDAgKzEsMzAgQEAKKyMgbGNtZXNzYWdlLm00IHNlcmlhbCA0IChnZXR0ZXh0LTAuMTQuMikKK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiwgMjAwNC0yMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCitkbmwKK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCitkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKK2RubCBmdW5jdGlvbmFsaXR5LgorZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworZG5sIEF1dGhvcnM6CitkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS4KKworIyBDaGVjayB3aGV0aGVyIExDX01FU1NBR0VTIGlzIGF2YWlsYWJsZSBpbiA8bG9jYWxlLmg+LgorCitBQ19ERUZVTihbZ3RfTENfTUVTU0FHRVNdLAorWworICBBQ19DQUNIRV9DSEVDSyhbZm9yIExDX01FU1NBR0VTXSwgZ3RfY3ZfdmFsX0xDX01FU1NBR0VTLAorICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxvY2FsZS5oPl0sIFtyZXR1cm4gTENfTUVTU0FHRVNdLAorICAgICAgIGd0X2N2X3ZhbF9MQ19NRVNTQUdFUz15ZXMsIGd0X2N2X3ZhbF9MQ19NRVNTQUdFUz1ubyldKQorICBpZiB0ZXN0ICRndF9jdl92YWxfTENfTUVTU0FHRVMgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9MQ19NRVNTQUdFUywgMSwKKyAgICAgIFtEZWZpbmUgaWYgeW91ciA8bG9jYWxlLmg+IGZpbGUgZGVmaW5lcyBMQ19NRVNTQUdFUy5dKQorICBmaQorXSkKZGlmZiAtLWdpdCBhL200L2xpYi1sZC5tNCBiL200L2xpYi1sZC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmM0ZTJjCi0tLSAvZGV2L251bGwKKysrIGIvbTQvbGliLWxkLm00CkBAIC0wLDAgKzEsMTEwIEBACisjIGxpYi1sZC5tNCBzZXJpYWwgMyAoZ2V0dGV4dC0wLjEzKQorZG5sIENvcHlyaWdodCAoQykgMTk5Ni0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBTdWJyb3V0aW5lcyBvZiBsaWJ0b29sLm00LAorZG5sIHdpdGggcmVwbGFjZW1lbnRzIHMvQUNfL0FDX0xJQi8gYW5kIHMvbHRfY3YvYWNsX2N2LyB0byBhdm9pZCBjb2xsaXNpb24KK2RubCB3aXRoIGxpYnRvb2wubTQuCisKK2RubCBGcm9tIGxpYnRvb2wtMS40LiBTZXRzIHRoZSB2YXJpYWJsZSB3aXRoX2dudV9sZCB0byB5ZXMgb3Igbm8uCitBQ19ERUZVTihbQUNfTElCX1BST0dfTERfR05VXSwKK1tBQ19DQUNIRV9DSEVDSyhbaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGRdLCBhY2xfY3ZfcHJvZ19nbnVfbGQsCitbIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGQncyBvbmx5IGFjY2VwdCAtdi4KK2Nhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgYWNsX2N2X3Byb2dfZ251X2xkPXllcyA7OworKikKKyAgYWNsX2N2X3Byb2dfZ251X2xkPW5vIDs7Citlc2FjXSkKK3dpdGhfZ251X2xkPSRhY2xfY3ZfcHJvZ19nbnVfbGQKK10pCisKK2RubCBGcm9tIGxpYnRvb2wtMS40LiBTZXRzIHRoZSB2YXJpYWJsZSBMRC4KK0FDX0RFRlVOKFtBQ19MSUJfUFJPR19MRF0sCitbQUNfQVJHX1dJVEgoZ251LWxkLAorWyAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXV0sCit0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMsIHdpdGhfZ251X2xkPW5vKQorQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCisjIFByZXBhcmUgUEFUSF9TRVBBUkFUT1IuCisjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKKyAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAorICBjaG1vZCAreCBjb25mJCQuc2gKKyAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBQQVRIX1NFUEFSQVRPUj0nOycKKyAgZWxzZQorICAgIFBBVEhfU0VQQVJBVE9SPToKKyAgZmkKKyAgcm0gLWYgY29uZiQkLnNoCitmaQorYWNfcHJvZz1sZAoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIEFDX01TR19DSEVDS0lORyhbZm9yIGxkIHVzZWQgYnkgR0NDXSkKKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqKQorICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisgICopCisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworICBlc2FjCisgIGNhc2UgJGFjX3Byb2cgaW4KKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKyAgICBbW1xcL10qIHwgW0EtWmEtel06W1xcL10qKV0KKyAgICAgIFtyZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nXQorICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGggb2YgbGQKKyAgICAgIGFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8IHNlZCAncyVcXFxcJS8lZydgCisgICAgICB3aGlsZSBlY2hvICRhY19wcm9nIHwgZ3JlcCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKwlhY19wcm9nPWBlY2hvICRhY19wcm9nfCBzZWQgInMlJHJlX2RpcmVsdCUvJSJgCisgICAgICBkb25lCisgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKKyAgICAgIDs7CisgICIiKQorICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorICAgIGFjX3Byb2c9bGQKKyAgICA7OworICAqKQorICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KKyAgICB3aXRoX2dudV9sZD11bmtub3duCisgICAgOzsKKyAgZXNhYworZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgIEFDX01TR19DSEVDS0lORyhbZm9yIEdOVSBsZF0pCitlbHNlCisgIEFDX01TR19DSEVDS0lORyhbZm9yIG5vbi1HTlUgbGRdKQorZmkKK0FDX0NBQ0hFX1ZBTChhY2xfY3ZfcGF0aF9MRCwKK1tpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCisgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSR7UEFUSF9TRVBBUkFUT1ItOn0iCisgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KKyAgICAgIGFjbF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgorICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAorICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZCdzIG9ubHkgYWNjZXB0IC12LgorICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCisgICAgICBjYXNlIGAiJGFjbF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwgL2Rldi9udWxsYCBpbgorICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhayA7OworICAgICAgKikKKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhayA7OworICAgICAgZXNhYworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCitlbHNlCisgIGFjbF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorZmldKQorTEQ9IiRhY2xfY3ZfcGF0aF9MRCIKK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCgkTEQpCitlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCitmaQordGVzdCAteiAiJExEIiAmJiBBQ19NU0dfRVJST1IoW25vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIXSkKK0FDX0xJQl9QUk9HX0xEX0dOVQorXSkKZGlmZiAtLWdpdCBhL200L2xpYi1saW5rLm00IGIvbTQvbGliLWxpbmsubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNkMjZmYwotLS0gL2Rldi9udWxsCisrKyBiL200L2xpYi1saW5rLm00CkBAIC0wLDAgKzEsNzA5IEBACisjIGxpYi1saW5rLm00IHNlcmlhbCAxMyAoZ2V0dGV4dC0wLjE3KQorZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKworQUNfUFJFUkVRKDIuNTQpCisKK2RubCBBQ19MSUJfTElOS0ZMQUdTKG5hbWUgWywgZGVwZW5kZW5jaWVzXSkgc2VhcmNoZXMgZm9yIGxpYm5hbWUgYW5kCitkbmwgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBkZXBlbmRlbmNpZXMuCitkbmwgU2V0cyBhbmQgQUNfU1VCU1RzIHRoZSBMSUIke05BTUV9IGFuZCBMVExJQiR7TkFNRX0gdmFyaWFibGVzIGFuZAorZG5sIGF1Z21lbnRzIHRoZSBDUFBGTEFHUyB2YXJpYWJsZS4KK2RubCBTZXRzIGFuZCBBQ19TVUJTVHMgdGhlIExJQiR7TkFNRX1fUFJFRklYIHZhcmlhYmxlIHRvIG5vbmVtcHR5IGlmIGxpYm5hbWUKK2RubCB3YXMgZm91bmQgaW4gJHtMSUIke05BTUV9X1BSRUZJWH0vJGFjbF9saWJkaXJzdGVtLgorQUNfREVGVU4oW0FDX0xJQl9MSU5LRkxBR1NdLAorWworICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorICBBQ19SRVFVSVJFKFtBQ19MSUJfUlBBVEhdKQorICBkZWZpbmUoW05hbWVdLFt0cmFuc2xpdChbJDFdLFsuLy1dLCBbX19fXSldKQorICBkZWZpbmUoW05BTUVdLFt0cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSldKQorICBBQ19DQUNIRV9DSEVDSyhbaG93IHRvIGxpbmsgd2l0aCBsaWJbXSQxXSwgW2FjX2N2X2xpYltdTmFtZVtdX2xpYnNdLCBbCisgICAgQUNfTElCX0xJTktGTEFHU19CT0RZKFskMV0sIFskMl0pCisgICAgYWNfY3ZfbGliW11OYW1lW11fbGlicz0iJExJQltdTkFNRSIKKyAgICBhY19jdl9saWJbXU5hbWVbXV9sdGxpYnM9IiRMVExJQltdTkFNRSIKKyAgICBhY19jdl9saWJbXU5hbWVbXV9jcHBmbGFncz0iJElOQ1tdTkFNRSIKKyAgICBhY19jdl9saWJbXU5hbWVbXV9wcmVmaXg9IiRMSUJbXU5BTUVbXV9QUkVGSVgiCisgIF0pCisgIExJQltdTkFNRT0iJGFjX2N2X2xpYltdTmFtZVtdX2xpYnMiCisgIExUTElCW11OQU1FPSIkYWNfY3ZfbGliW11OYW1lW11fbHRsaWJzIgorICBJTkNbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9jcHBmbGFncyIKKyAgTElCW11OQU1FW11fUFJFRklYPSIkYWNfY3ZfbGliW11OYW1lW11fcHJlZml4IgorICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNdTkFNRSkKKyAgQUNfU1VCU1QoW0xJQl1OQU1FKQorICBBQ19TVUJTVChbTFRMSUJdTkFNRSkKKyAgQUNfU1VCU1QoW0xJQl1OQU1FW19QUkVGSVhdKQorICBkbmwgQWxzbyBzZXQgSEFWRV9MSUJbXU5BTUUgc28gdGhhdCBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgY2FuIHJldXNlIHRoZQorICBkbmwgcmVzdWx0cyBvZiB0aGlzIHNlYXJjaCB3aGVuIHRoaXMgbGlicmFyeSBhcHBlYXJzIGFzIGEgZGVwZW5kZW5jeS4KKyAgSEFWRV9MSUJbXU5BTUU9eWVzCisgIHVuZGVmaW5lKFtOYW1lXSkKKyAgdW5kZWZpbmUoW05BTUVdKQorXSkKKworZG5sIEFDX0xJQl9IQVZFX0xJTktGTEFHUyhuYW1lLCBkZXBlbmRlbmNpZXMsIGluY2x1ZGVzLCB0ZXN0Y29kZSkKK2RubCBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZAorZG5sIGltcGxpY2l0IGRlcGVuZGVuY2llcywgdG9nZXRoZXIgd2l0aCB0aGUgc3BlY2lmaWVkIGluY2x1ZGUgZmlsZXMgYW5kCitkbmwgdGhlIGFiaWxpdHkgdG8gY29tcGlsZSBhbmQgbGluayB0aGUgc3BlY2lmaWVkIHRlc3Rjb2RlLiBJZiBmb3VuZCwgaXQKK2RubCBzZXRzIGFuZCBBQ19TVUJTVHMgSEFWRV9MSUIke05BTUV9PXllcyBhbmQgdGhlIExJQiR7TkFNRX0gYW5kCitkbmwgTFRMSUIke05BTUV9IHZhcmlhYmxlcyBhbmQgYXVnbWVudHMgdGhlIENQUEZMQUdTIHZhcmlhYmxlLCBhbmQKK2RubCAjZGVmaW5lcyBIQVZFX0xJQiR7TkFNRX0gdG8gMS4gT3RoZXJ3aXNlLCBpdCBzZXRzIGFuZCBBQ19TVUJTVHMKK2RubCBIQVZFX0xJQiR7TkFNRX09bm8gYW5kIExJQiR7TkFNRX0gYW5kIExUTElCJHtOQU1FfSB0byBlbXB0eS4KK2RubCBTZXRzIGFuZCBBQ19TVUJTVHMgdGhlIExJQiR7TkFNRX1fUFJFRklYIHZhcmlhYmxlIHRvIG5vbmVtcHR5IGlmIGxpYm5hbWUKK2RubCB3YXMgZm91bmQgaW4gJHtMSUIke05BTUV9X1BSRUZJWH0vJGFjbF9saWJkaXJzdGVtLgorQUNfREVGVU4oW0FDX0xJQl9IQVZFX0xJTktGTEFHU10sCitbCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9SUEFUSF0pCisgIGRlZmluZShbTmFtZV0sW3RyYW5zbGl0KFskMV0sWy4vLV0sIFtfX19dKV0pCisgIGRlZmluZShbTkFNRV0sW3RyYW5zbGl0KFskMV0sW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0pCisKKyAgZG5sIFNlYXJjaCBmb3IgbGliW11OYW1lIGFuZCBkZWZpbmUgTElCW11OQU1FLCBMVExJQltdTkFNRSBhbmQgSU5DW11OQU1FCisgIGRubCBhY2NvcmRpbmdseS4KKyAgQUNfTElCX0xJTktGTEFHU19CT0RZKFskMV0sIFskMl0pCisKKyAgZG5sIEFkZCAkSU5DW11OQU1FIHRvIENQUEZMQUdTIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBmb2xsb3dpbmcgY2hlY2tzLAorICBkbmwgYmVjYXVzZSBpZiB0aGUgdXNlciBoYXMgaW5zdGFsbGVkIGxpYltdTmFtZSBhbmQgbm90IGRpc2FibGVkIGl0cyB1c2UKKyAgZG5sIHZpYSAtLXdpdGhvdXQtbGliW11OYW1lLXByZWZpeCwgaGUgd2FudHMgdG8gdXNlIGl0LgorICBhY19zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ11OQU1FKQorCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbGliW10kMV0sIFthY19jdl9saWJbXU5hbWVdLCBbCisgICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICBMSUJTPSIkTElCUyAkTElCW11OQU1FIgorICAgIEFDX1RSWV9MSU5LKFskM10sIFskNF0sIFthY19jdl9saWJbXU5hbWU9eWVzXSwgW2FjX2N2X2xpYltdTmFtZT1ub10pCisgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKKyAgXSkKKyAgaWYgdGVzdCAiJGFjX2N2X2xpYltdTmFtZSIgPSB5ZXM7IHRoZW4KKyAgICBIQVZFX0xJQltdTkFNRT15ZXMKKyAgICBBQ19ERUZJTkUoW0hBVkVfTElCXU5BTUUsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICQxIGxpYnJhcnkuXSkKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBsaW5rIHdpdGggbGliW10kMV0pCisgICAgQUNfTVNHX1JFU1VMVChbJExJQltdTkFNRV0pCisgIGVsc2UKKyAgICBIQVZFX0xJQltdTkFNRT1ubworICAgIGRubCBJZiAkTElCW11OQU1FIGRpZG4ndCBsZWFkIHRvIGEgdXNhYmxlIGxpYnJhcnksIHdlIGRvbid0IG5lZWQKKyAgICBkbmwgJElOQ1tdTkFNRSBlaXRoZXIuCisgICAgQ1BQRkxBR1M9IiRhY19zYXZlX0NQUEZMQUdTIgorICAgIExJQltdTkFNRT0KKyAgICBMVExJQltdTkFNRT0KKyAgICBMSUJbXU5BTUVbXV9QUkVGSVg9CisgIGZpCisgIEFDX1NVQlNUKFtIQVZFX0xJQl1OQU1FKQorICBBQ19TVUJTVChbTElCXU5BTUUpCisgIEFDX1NVQlNUKFtMVExJQl1OQU1FKQorICBBQ19TVUJTVChbTElCXU5BTUVbX1BSRUZJWF0pCisgIHVuZGVmaW5lKFtOYW1lXSkKKyAgdW5kZWZpbmUoW05BTUVdKQorXSkKKworZG5sIERldGVybWluZSB0aGUgcGxhdGZvcm0gZGVwZW5kZW50IHBhcmFtZXRlcnMgbmVlZGVkIHRvIHVzZSBycGF0aDoKK2RubCAgIGFjbF9saWJleHQsCitkbmwgICBhY2xfc2hsaWJleHQsCitkbmwgICBhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywKK2RubCAgIGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLAorZG5sICAgYWNsX2hhcmRjb2RlX2RpcmVjdCwKK2RubCAgIGFjbF9oYXJkY29kZV9taW51c19MLgorQUNfREVGVU4oW0FDX0xJQl9SUEFUSF0sCitbCisgIGRubCBUZWxsIGF1dG9tYWtlID49IDEuMTAgdG8gY29tcGxhaW4gaWYgY29uZmlnLnJwYXRoIGlzIG1pc3NpbmcuCisgIG00X2lmZGVmKFtBQ19SRVFVSVJFX0FVWF9GSUxFXSwgW0FDX1JFUVVJUkVfQVVYX0ZJTEUoW2NvbmZpZy5ycGF0aF0pXSkKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pICAgICAgICAgICAgICAgIGRubCB3ZSB1c2UgJENDLCAkR0NDLCAkTERGTEFHUworICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJPR19MRF0pICAgICAgICAgICAgZG5sIHdlIHVzZSAkTEQsICR3aXRoX2dudV9sZAorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pICAgICAgICAgZG5sIHdlIHVzZSAkaG9zdAorICBBQ19SRVFVSVJFKFtBQ19DT05GSUdfQVVYX0RJUl9ERUZBVUxUXSkgZG5sIHdlIHVzZSAkYWNfYXV4X2RpcgorICBBQ19DQUNIRV9DSEVDSyhbZm9yIHNoYXJlZCBsaWJyYXJ5IHJ1biBwYXRoIG9yaWdpbl0sIGFjbF9jdl9ycGF0aCwgWworICAgIENDPSIkQ0MiIEdDQz0iJEdDQyIgTERGTEFHUz0iJExERkxBR1MiIExEPSIkTEQiIHdpdGhfZ251X2xkPSIkd2l0aF9nbnVfbGQiIFwKKyAgICAke0NPTkZJR19TSEVMTC0vYmluL3NofSAiJGFjX2F1eF9kaXIvY29uZmlnLnJwYXRoIiAiJGhvc3QiID4gY29uZnRlc3Quc2gKKyAgICAuIC4vY29uZnRlc3Quc2gKKyAgICBybSAtZiAuL2NvbmZ0ZXN0LnNoCisgICAgYWNsX2N2X3JwYXRoPWRvbmUKKyAgXSkKKyAgd2w9IiRhY2xfY3Zfd2wiCisgIGFjbF9saWJleHQ9IiRhY2xfY3ZfbGliZXh0IgorICBhY2xfc2hsaWJleHQ9IiRhY2xfY3Zfc2hsaWJleHQiCisgIGFjbF9saWJuYW1lX3NwZWM9IiRhY2xfY3ZfbGlibmFtZV9zcGVjIgorICBhY2xfbGlicmFyeV9uYW1lc19zcGVjPSIkYWNsX2N2X2xpYnJhcnlfbmFtZXNfc3BlYyIKKyAgYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIKKyAgYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIKKyAgYWNsX2hhcmRjb2RlX2RpcmVjdD0iJGFjbF9jdl9oYXJkY29kZV9kaXJlY3QiCisgIGFjbF9oYXJkY29kZV9taW51c19MPSIkYWNsX2N2X2hhcmRjb2RlX21pbnVzX0wiCisgIGRubCBEZXRlcm1pbmUgd2hldGhlciB0aGUgdXNlciB3YW50cyBycGF0aCBoYW5kbGluZyBhdCBhbGwuCisgIEFDX0FSR19FTkFCTEUocnBhdGgsCisgICAgWyAgLS1kaXNhYmxlLXJwYXRoICAgICAgICAgZG8gbm90IGhhcmRjb2RlIHJ1bnRpbWUgbGlicmFyeSBwYXRoc10sCisgICAgOiwgZW5hYmxlX3JwYXRoPXllcykKK10pCisKK2RubCBBQ19MSUJfTElOS0ZMQUdTX0JPRFkobmFtZSBbLCBkZXBlbmRlbmNpZXNdKSBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQKK2RubCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kIGltcGxpY2l0IGRlcGVuZGVuY2llcy4KK2RubCBTZXRzIHRoZSBMSUIke05BTUV9LCBMVExJQiR7TkFNRX0gYW5kIElOQyR7TkFNRX0gdmFyaWFibGVzLgorZG5sIEFsc28sIHNldHMgdGhlIExJQiR7TkFNRX1fUFJFRklYIHZhcmlhYmxlIHRvIG5vbmVtcHR5IGlmIGxpYm5hbWUgd2FzIGZvdW5kCitkbmwgaW4gJHtMSUIke05BTUV9X1BSRUZJWH0vJGFjbF9saWJkaXJzdGVtLgorQUNfREVGVU4oW0FDX0xJQl9MSU5LRkxBR1NfQk9EWV0sCitbCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX01VTFRJTElCXSkKKyAgZGVmaW5lKFtOQU1FXSxbdHJhbnNsaXQoWyQxXSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSkKKyAgZG5sIEF1dG9jb25mID49IDIuNjEgc3VwcG9ydHMgZG90cyBpbiAtLXdpdGggb3B0aW9ucy4KKyAgZGVmaW5lKFtOX0FfTV9FXSxbbTRfaWYobTRfdmVyc2lvbl9jb21wYXJlKG00X2RlZm4oW200X1BBQ0tBR0VfVkVSU0lPTl0pLFsyLjYxXSksWy0xXSxbdHJhbnNsaXQoWyQxXSxbLl0sW19dKV0sWyQxXSldKQorICBkbmwgQnkgZGVmYXVsdCwgbG9vayBpbiAkaW5jbHVkZWRpciBhbmQgJGxpYmRpci4KKyAgdXNlX2FkZGl0aW9uYWw9eWVzCisgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCisgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorICBdKQorICBBQ19MSUJfQVJHX1dJVEgoW2xpYl1OX0FfTV9FWy1wcmVmaXhdLAorWyAgLS13aXRoLWxpYl1OX0FfTV9FWy1wcmVmaXhbPURJUl0gIHNlYXJjaCBmb3IgbGliJDEgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKKyAgLS13aXRob3V0LWxpYl1OX0FfTV9FWy1wcmVmaXggICAgIGRvbid0IHNlYXJjaCBmb3IgbGliJDEgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyXSwKK1sKKyAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlhubyI7IHRoZW4KKyAgICAgIHVzZV9hZGRpdGlvbmFsPW5vCisgICAgZWxzZQorICAgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYIjsgdGhlbgorICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWworICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKyAgICAgICAgXSkKKyAgICAgIGVsc2UKKyAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkd2l0aHZhbC9pbmNsdWRlIgorICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvJGFjbF9saWJkaXJzdGVtIgorICAgICAgZmkKKyAgICBmaQorXSkKKyAgZG5sIFNlYXJjaCB0aGUgbGlicmFyeSBhbmQgaXRzIGRlcGVuZGVuY2llcyBpbiAkYWRkaXRpb25hbF9saWJkaXIgYW5kCisgIGRubCAkTERGTEFHUy4gVXNpbmcgYnJlYWR0aC1maXJzdC1zZWFjaC4KKyAgTElCW11OQU1FPQorICBMVExJQltdTkFNRT0KKyAgSU5DW11OQU1FPQorICBMSUJbXU5BTUVbXV9QUkVGSVg9CisgIHJwYXRoZGlycz0KKyAgbHRycGF0aGRpcnM9CisgIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0KKyAgbmFtZXNfbmV4dF9yb3VuZD0nJDEgJDInCisgIHdoaWxlIHRlc3QgLW4gIiRuYW1lc19uZXh0X3JvdW5kIjsgZG8KKyAgICBuYW1lc190aGlzX3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCIKKyAgICBuYW1lc19uZXh0X3JvdW5kPQorICAgIGZvciBuYW1lIGluICRuYW1lc190aGlzX3JvdW5kOyBkbworICAgICAgYWxyZWFkeV9oYW5kbGVkPQorICAgICAgZm9yIG4gaW4gJG5hbWVzX2FscmVhZHlfaGFuZGxlZDsgZG8KKyAgICAgICAgaWYgdGVzdCAiJG4iID0gIiRuYW1lIjsgdGhlbgorICAgICAgICAgIGFscmVhZHlfaGFuZGxlZD15ZXMKKyAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgICAgZG9uZQorICAgICAgaWYgdGVzdCAteiAiJGFscmVhZHlfaGFuZGxlZCI7IHRoZW4KKyAgICAgICAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPSIkbmFtZXNfYWxyZWFkeV9oYW5kbGVkICRuYW1lIgorICAgICAgICBkbmwgU2VlIGlmIGl0IHdhcyBhbHJlYWR5IGxvY2F0ZWQgYnkgYW4gZWFybGllciBBQ19MSUJfTElOS0ZMQUdTCisgICAgICAgIGRubCBvciBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgY2FsbC4KKyAgICAgICAgdXBwZXJuYW1lPWBlY2hvICIkbmFtZSIgfCBzZWQgLWUgJ3l8YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy18QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX198J2AKKyAgICAgICAgZXZhbCB2YWx1ZT1cIlwkSEFWRV9MSUIkdXBwZXJuYW1lXCIKKyAgICAgICAgaWYgdGVzdCAtbiAiJHZhbHVlIjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgIiR2YWx1ZSIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExJQiR1cHBlcm5hbWVcIgorICAgICAgICAgICAgdGVzdCAteiAiJHZhbHVlIiB8fCBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSR2YWx1ZSIKKyAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExUTElCJHVwcGVybmFtZVwiCisgICAgICAgICAgICB0ZXN0IC16ICIkdmFsdWUiIHx8IExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9JHZhbHVlIgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRubCBBbiBlYXJsaWVyIGNhbGwgdG8gQUNfTElCX0hBVkVfTElOS0ZMQUdTIGhhcyBkZXRlcm1pbmVkCisgICAgICAgICAgICBkbmwgdGhhdCB0aGlzIGxpYnJhcnkgZG9lc24ndCBleGlzdC4gU28ganVzdCBkcm9wIGl0LgorICAgICAgICAgICAgOgorICAgICAgICAgIGZpCisgICAgICAgIGVsc2UKKyAgICAgICAgICBkbmwgU2VhcmNoIHRoZSBsaWJyYXJ5IGxpYiRuYW1lIGluICRhZGRpdGlvbmFsX2xpYmRpciBhbmQgJExERkxBR1MKKyAgICAgICAgICBkbmwgYW5kIHRoZSBhbHJlYWR5IGNvbnN0cnVjdGVkICRMSUJOQU1FLyRMVExJQk5BTUUuCisgICAgICAgICAgZm91bmRfZGlyPQorICAgICAgICAgIGZvdW5kX2xhPQorICAgICAgICAgIGZvdW5kX3NvPQorICAgICAgICAgIGZvdW5kX2E9CisgICAgICAgICAgZXZhbCBsaWJuYW1lPVwiJGFjbF9saWJuYW1lX3NwZWNcIiAgICAjIHR5cGljYWxseTogbGlibmFtZT1saWIkbmFtZQorICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCisgICAgICAgICAgICBzaHJleHQ9Ii4kYWNsX3NobGliZXh0IiAgICAgICAgICAgICAjIHR5cGljYWxseTogc2hyZXh0PS5zbworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNocmV4dD0KKyAgICAgICAgICBmaQorICAgICAgICAgIGlmIHRlc3QgJHVzZV9hZGRpdGlvbmFsID0geWVzOyB0aGVuCisgICAgICAgICAgICBkaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKKyAgICAgICAgICAgIGRubCBUaGUgc2FtZSBjb2RlIGFzIGluIHRoZSBsb29wIGJlbG93OgorICAgICAgICAgICAgZG5sIEZpcnN0IGxvb2sgZm9yIGEgc2hhcmVkIGxpYnJhcnkuCisgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgorICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0IgorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWMiID0gJyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnOyB0aGVuCisgICAgICAgICAgICAgICAgICB2ZXI9YChjZCAiJGRpciIgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gIiRsaWJuYW1lJHNocmV4dCIuKjsgZG8gZWNobyAiJGYiOyBkb25lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICJzLF4kbGlibmFtZSRzaHJleHRcXFxcLiwsIiBcCisgICAgICAgICAgICAgICAgICAgICAgICB8IHNvcnQgLXQgJy4nIC1uIC1yIC1rMSwxIC1rMiwyIC1rMywzIC1rNCw0IC1rNSw1IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIDFxICkgMj4vZGV2L251bGxgCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkdmVyIiAmJiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIgorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBldmFsIGxpYnJhcnlfbmFtZXM9XCIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlY1wiCisgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAkbGlicmFyeV9uYW1lczsgZG8KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kZiI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGYiCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRubCBUaGVuIGxvb2sgZm9yIGEgc3RhdGljIGxpYnJhcnkuCisgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCIKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUubGEiOyB0aGVuCisgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvJGxpYm5hbWUubGEiCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCisgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJbXU5BTUU7IGRvCisgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisgICAgICAgICAgICAgIGNhc2UgIiR4IiBpbgorICAgICAgICAgICAgICAgIC1MKikKKyAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCR4IiB8IHNlZCAtZSAncy9eWC1MLy8nYAorICAgICAgICAgICAgICAgICAgZG5sIEZpcnN0IGxvb2sgZm9yIGEgc2hhcmVkIGxpYnJhcnkuCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0IgorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWMiID0gJyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICB2ZXI9YChjZCAiJGRpciIgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gIiRsaWJuYW1lJHNocmV4dCIuKjsgZG8gZWNobyAiJGYiOyBkb25lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICJzLF4kbGlibmFtZSRzaHJleHRcXFxcLiwsIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNvcnQgLXQgJy4nIC1uIC1yIC1rMSwxIC1rMiwyIC1rMywzIC1rNCw0IC1rNSw1IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIDFxICkgMj4vZGV2L251bGxgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkdmVyIiAmJiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIgorICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBldmFsIGxpYnJhcnlfbmFtZXM9XCIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlY1wiCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAkbGlicmFyeV9uYW1lczsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kZiI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGRubCBUaGVuIGxvb2sgZm9yIGEgc3RhdGljIGxpYnJhcnkuCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUubGEiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvJGxpYm5hbWUubGEiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICBmaQorICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgIGRubCBGb3VuZCB0aGUgbGlicmFyeS4KKyAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LUwkZm91bmRfZGlyIC1sJG5hbWUiCisgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX3NvIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgZG5sIExpbmtpbmcgd2l0aCBhIHNoYXJlZCBsaWJyYXJ5LiBXZSBhdHRlbXB0IHRvIGhhcmRjb2RlIGl0cworICAgICAgICAgICAgICBkbmwgZGlyZWN0b3J5IGludG8gdGhlIGV4ZWN1dGFibGUncyBydW5wYXRoLCB1bmxlc3MgaXQncyB0aGUKKyAgICAgICAgICAgICAgZG5sIHN0YW5kYXJkIC91c3IvbGliLgorICAgICAgICAgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiA9IG5vIHx8IHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisgICAgICAgICAgICAgICAgZG5sIE5vIGhhcmRjb2RpbmcgaXMgbmVlZGVkLgorICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZG5sIFVzZSBhbiBleHBsaWNpdCBvcHRpb24gdG8gaGFyZGNvZGUgRElSIGludG8gdGhlIHJlc3VsdGluZworICAgICAgICAgICAgICAgIGRubCBiaW5hcnkuCisgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gbHRycGF0aGRpcnMuCisgICAgICAgICAgICAgICAgZG5sIFRoZSBsdHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMVExJQk5BTUUgYXQgdGhlIGVuZC4KKyAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgZm9yIHggaW4gJGx0cnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGZvdW5kX2RpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgIGx0cnBhdGhkaXJzPSIkbHRycGF0aGRpcnMgJGZvdW5kX2RpciIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGRubCBUaGUgaGFyZGNvZGluZyBpbnRvICRMSUJOQU1FIGlzIHN5c3RlbSBkZXBlbmRlbnQuCisgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9oYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCisgICAgICAgICAgICAgICAgICBkbmwgVXNpbmcgRElSL2xpYk5BTUUuc28gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgZG5sIHJlc3VsdGluZyBiaW5hcnkuCisgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiICYmIHRlc3QgIiRhY2xfaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAgICBkbmwgVXNlIGFuIGV4cGxpY2l0IG9wdGlvbiB0byBoYXJkY29kZSBESVIgaW50byB0aGUgcmVzdWx0aW5nCisgICAgICAgICAgICAgICAgICAgIGRubCBiaW5hcnkuCisgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkIERJUiB0byBycGF0aGRpcnMuCisgICAgICAgICAgICAgICAgICAgIGRubCBUaGUgcnBhdGhkaXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJExJQk5BTUUgYXQgdGhlIGVuZC4KKyAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRmb3VuZF9kaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGZvdW5kX2RpciIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZG5sIFJlbHkgb24gIi1MJGZvdW5kX2RpciIuCisgICAgICAgICAgICAgICAgICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0IGlmIGl0J3MgYWxyZWFkeSBjb250YWluZWQgaW4gdGhlIExERkxBR1MKKyAgICAgICAgICAgICAgICAgICAgZG5sIG9yIHRoZSBhbHJlYWR5IGNvbnN0cnVjdGVkICRMSUJOQU1FCisgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExJQltdTkFNRTsgZG8KKyAgICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGZvdW5kX2RpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LUwkZm91bmRfZGlyIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2hhcmRjb2RlX21pbnVzX0wiICE9IG5vOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZG5sIEZJWE1FOiBOb3Qgc3VyZSB3aGV0aGVyIHdlIHNob3VsZCB1c2UKKyAgICAgICAgICAgICAgICAgICAgICBkbmwgIi1MJGZvdW5kX2RpciAtbCRuYW1lIiBvciAiLUwkZm91bmRfZGlyICRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgICAgICAgICBkbmwgaGVyZS4KKyAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIGRubCBXZSBjYW5ub3QgdXNlICRhY2xfaGFyZGNvZGVfcnVucGF0aF92YXIgYW5kIExEX1JVTl9QQVRICisgICAgICAgICAgICAgICAgICAgICAgZG5sIGhlcmUsIGJlY2F1c2UgdGhpcyBkb2Vzbid0IGZpdCBpbiBmbGFncyBwYXNzZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgZG5sIGNvbXBpbGVyLiBTbyBnaXZlIHVwLiBObyBoYXJkY29kaW5nLiBUaGlzIGFmZmVjdHMgb25seQorICAgICAgICAgICAgICAgICAgICAgIGRubCB2ZXJ5IG9sZCBzeXN0ZW1zLgorICAgICAgICAgICAgICAgICAgICAgIGRubCBGSVhNRTogTm90IHN1cmUgd2hldGhlciB3ZSBzaG91bGQgdXNlCisgICAgICAgICAgICAgICAgICAgICAgZG5sICItTCRmb3VuZF9kaXIgLWwkbmFtZSIgb3IgIi1MJGZvdW5kX2RpciAkZm91bmRfc28iCisgICAgICAgICAgICAgICAgICAgICAgZG5sIGhlcmUuCisgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tbCRuYW1lIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2EiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgIGRubCBMaW5raW5nIHdpdGggYSBzdGF0aWMgbGlicmFyeS4KKyAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9hIgorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZG5sIFdlIHNob3VsZG4ndCBjb21lIGhlcmUsIGJ1dCBhbnl3YXkgaXQncyBnb29kIHRvIGhhdmUgYQorICAgICAgICAgICAgICAgIGRubCBmYWxsYmFjay4KKyAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRubCBBc3N1bWUgdGhlIGluY2x1ZGUgZmlsZXMgYXJlIG5lYXJieS4KKyAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0KKyAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9kaXIiIGluCisgICAgICAgICAgICAgICovJGFjbF9saWJkaXJzdGVtIHwgKi8kYWNsX2xpYmRpcnN0ZW0vKQorICAgICAgICAgICAgICAgIGJhc2VkaXI9YGVjaG8gIlgkZm91bmRfZGlyIiB8IHNlZCAtZSAncyxeWCwsJyAtZSAicywvJGFjbF9saWJkaXJzdGVtLyInKiQsLCdgCisgICAgICAgICAgICAgICAgTElCW11OQU1FW11fUFJFRklYPSIkYmFzZWRpciIKKyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiRiYXNlZGlyL2luY2x1ZGUiCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRJTkNOQU1FLgorICAgICAgICAgICAgICBkbmwgQnV0IGRvbid0IGFkZCBpdAorICAgICAgICAgICAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2luY2x1ZGUsCisgICAgICAgICAgICAgIGRubCAgIDIuIGlmIGl0J3MgL3Vzci9sb2NhbC9pbmNsdWRlIGFuZCB3ZSBhcmUgdXNpbmcgR0NDIG9uIExpbnV4LAorICAgICAgICAgICAgICBkbmwgICAzLiBpZiBpdCdzIGFscmVhZHkgcHJlc2VudCBpbiAkQ1BQRkxBR1Mgb3IgdGhlIGFscmVhZHkKKyAgICAgICAgICAgICAgZG5sICAgICAgY29uc3RydWN0ZWQgJElOQ05BTUUsCisgICAgICAgICAgICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCisgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWC91c3IvaW5jbHVkZSI7IHRoZW4KKyAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiID0gIlgvdXNyL2xvY2FsL2luY2x1ZGUiOyB0aGVuCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICAgICAgICAgICAgICAgICAgbGludXgqIHwgZ251KiB8IGsqYnNkKi1nbnUpIGhhdmVpdD15ZXM7OworICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgIGZvciB4IGluICRDUFBGTEFHUyAkSU5DW11OQU1FOyBkbworICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2luY2x1ZGVkaXIgdG8gJElOQ05BTUUuCisgICAgICAgICAgICAgICAgICAgICAgSU5DW11OQU1FPSIke0lOQ1tdTkFNRX0ke0lOQ1tdTkFNRTorIH0tSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgZG5sIExvb2sgZm9yIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRmb3VuZF9sYSI7IHRoZW4KKyAgICAgICAgICAgICAgZG5sIFJlYWQgdGhlIC5sYSBmaWxlLiBJdCBkZWZpbmVzIHRoZSB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgZG5sIGRsbmFtZSwgbGlicmFyeV9uYW1lcywgb2xkX2xpYnJhcnksIGRlcGVuZGVuY3lfbGlicywgY3VycmVudCwKKyAgICAgICAgICAgICAgZG5sIGFnZSwgcmV2aXNpb24sIGluc3RhbGxlZCwgZGxvcGVuLCBkbHByZW9wZW4sIGxpYmRpci4KKyAgICAgICAgICAgICAgc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9sYSIgaW4KKyAgICAgICAgICAgICAgICAqLyogfCAqXFwqKSAuICIkZm91bmRfbGEiIDs7CisgICAgICAgICAgICAgICAgKikgLiAiLi8kZm91bmRfbGEiIDs7CisgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgbGliZGlyPSIkc2F2ZV9saWJkaXIiCisgICAgICAgICAgICAgIGRubCBXZSB1c2Ugb25seSBkZXBlbmRlbmN5X2xpYnMuCisgICAgICAgICAgICAgIGZvciBkZXAgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKyAgICAgICAgICAgICAgICBjYXNlICIkZGVwIiBpbgorICAgICAgICAgICAgICAgICAgLUwqKQorICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj1gZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLUwvLydgCisgICAgICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMSUJOQU1FIGFuZCAkTFRMSUJOQU1FLgorICAgICAgICAgICAgICAgICAgICBkbmwgQnV0IGRvbid0IGFkZCBpdAorICAgICAgICAgICAgICAgICAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2xpYiwKKyAgICAgICAgICAgICAgICAgICAgZG5sICAgMi4gaWYgaXQncyAvdXNyL2xvY2FsL2xpYiBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKyAgICAgICAgICAgICAgICAgICAgZG5sICAgMy4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJExERkxBR1Mgb3IgdGhlIGFscmVhZHkKKyAgICAgICAgICAgICAgICAgICAgZG5sICAgICAgY29uc3RydWN0ZWQgJExJQk5BTUUsCisgICAgICAgICAgICAgICAgICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiID0gIlgvdXNyL2xvY2FsLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW51eCogfCBnbnUqIHwgaypic2QqLWdudSkgaGF2ZWl0PXllczs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExJQltdTkFNRTsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMSUJOQU1FLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExUTElCW11OQU1FOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExUTElCTkFNRS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfS1MJGFkZGl0aW9uYWxfbGliZGlyIgorICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgLVIqKQorICAgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1SLy8nYAorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiAhPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgRElSIHRvIHJwYXRoZGlycy4KKyAgICAgICAgICAgICAgICAgICAgICBkbmwgVGhlIHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMSUJOQU1FIGF0IHRoZSBlbmQuCisgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRycGF0aGRpcnM7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgcnBhdGhkaXJzPSIkcnBhdGhkaXJzICRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkIERJUiB0byBsdHJwYXRoZGlycy4KKyAgICAgICAgICAgICAgICAgICAgICBkbmwgVGhlIGx0cnBhdGhkaXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJExUTElCTkFNRSBhdCB0aGUgZW5kLgorICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkbHRycGF0aGRpcnM7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgbHRycGF0aGRpcnM9IiRsdHJwYXRoZGlycyAkZGlyIgorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAtbCopCisgICAgICAgICAgICAgICAgICAgIGRubCBIYW5kbGUgdGhpcyBpbiB0aGUgbmV4dCByb3VuZC4KKyAgICAgICAgICAgICAgICAgICAgbmFtZXNfbmV4dF9yb3VuZD0iJG5hbWVzX25leHRfcm91bmQgImBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtbC8vJ2AKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICoubGEpCisgICAgICAgICAgICAgICAgICAgIGRubCBIYW5kbGUgdGhpcyBpbiB0aGUgbmV4dCByb3VuZC4gVGhyb3cgYXdheSB0aGUgLmxhJ3MKKyAgICAgICAgICAgICAgICAgICAgZG5sIGRpcmVjdG9yeTsgaXQgaXMgYWxyZWFkeSBjb250YWluZWQgaW4gYSBwcmVjZWRpbmcgLUwKKyAgICAgICAgICAgICAgICAgICAgZG5sIG9wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgbmFtZXNfbmV4dF9yb3VuZD0iJG5hbWVzX25leHRfcm91bmQgImBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MsXlguKi8sLCcgLWUgJ3MsXmxpYiwsJyAtZSAncyxcLmxhJCwsJ2AKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgIGRubCBNb3N0IGxpa2VseSBhbiBpbW1lZGlhdGUgbGlicmFyeSBuYW1lLgorICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRkZXAiCisgICAgICAgICAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9JGRlcCIKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZG5sIERpZG4ndCBmaW5kIHRoZSBsaWJyYXJ5OyBhc3N1bWUgaXQgaXMgaW4gdGhlIHN5c3RlbSBkaXJlY3RvcmllcworICAgICAgICAgICAgZG5sIGtub3duIHRvIHRoZSBsaW5rZXIgYW5kIHJ1bnRpbWUgbG9hZGVyLiAoQWxsIHRoZSBzeXN0ZW0KKyAgICAgICAgICAgIGRubCBkaXJlY3RvcmllcyBrbm93biB0byB0aGUgbGlua2VyIHNob3VsZCBhbHNvIGJlIGtub3duIHRvIHRoZQorICAgICAgICAgICAgZG5sIHJ1bnRpbWUgbG9hZGVyLCBvdGhlcndpc2UgdGhlIHN5c3RlbSBpcyBzZXZlcmVseSBtaXNjb25maWd1cmVkLikKKyAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LWwkbmFtZSIKKyAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LWwkbmFtZSIKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBkb25lCisgIGRvbmUKKyAgaWYgdGVzdCAiWCRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKyAgICAgIGRubCBXZWlyZCBwbGF0Zm9ybTogb25seSB0aGUgbGFzdCAtcnBhdGggb3B0aW9uIGNvdW50cywgdGhlIHVzZXIgbXVzdAorICAgICAgZG5sIHBhc3MgYWxsIHBhdGggZWxlbWVudHMgaW4gb25lIG9wdGlvbi4gV2UgY2FuIGFycmFuZ2UgdGhhdCBmb3IgYQorICAgICAgZG5sIHNpbmdsZSBsaWJyYXJ5LCBidXQgbm90IHdoZW4gbW9yZSB0aGFuIG9uZSAkTElCTkFNRXMgYXJlIHVzZWQuCisgICAgICBhbGxkaXJzPQorICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICBhbGxkaXJzPSIke2FsbGRpcnN9JHthbGxkaXJzOiskYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3J9JGZvdW5kX2RpciIKKyAgICAgIGRvbmUKKyAgICAgIGRubCBOb3RlOiBhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyB1c2VzICRsaWJkaXIgYW5kICR3bC4KKyAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKyAgICAgIGxpYmRpcj0iJGFsbGRpcnMiCisgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZmxhZyIKKyAgICBlbHNlCisgICAgICBkbmwgVGhlIC1ycGF0aCBvcHRpb25zIGFyZSBjdW11bGF0aXZlLgorICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICAgIGxpYmRpcj0iJGZvdW5kX2RpciIKKyAgICAgICAgZXZhbCBmbGFnPVwiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmbGFnIgorICAgICAgZG9uZQorICAgIGZpCisgIGZpCisgIGlmIHRlc3QgIlgkbHRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorICAgIGRubCBXaGVuIHVzaW5nIGxpYnRvb2wsIHRoZSBvcHRpb24gdGhhdCB3b3JrcyBmb3IgYm90aCBsaWJyYXJpZXMgYW5kCisgICAgZG5sIGV4ZWN1dGFibGVzIGlzIC1SLiBUaGUgLVIgb3B0aW9ucyBhcmUgY3VtdWxhdGl2ZS4KKyAgICBmb3IgZm91bmRfZGlyIGluICRsdHJwYXRoZGlyczsgZG8KKyAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LVIkZm91bmRfZGlyIgorICAgIGRvbmUKKyAgZmkKK10pCisKK2RubCBBQ19MSUJfQVBQRU5EVE9WQVIoVkFSLCBDT05URU5UUykgYXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgQ09OVEVOVFMgdG8gVkFSLAorZG5sIHVubGVzcyBhbHJlYWR5IHByZXNlbnQgaW4gVkFSLgorZG5sIFdvcmtzIG9ubHkgZm9yIENQUEZMQUdTLCBub3QgZm9yIExJQiogdmFyaWFibGVzIGJlY2F1c2UgdGhhdCBzb21ldGltZXMKK2RubCBjb250YWlucyB0d28gb3IgdGhyZWUgY29uc2VjdXRpdmUgZWxlbWVudHMgdGhhdCBiZWxvbmcgdG9nZXRoZXIuCitBQ19ERUZVTihbQUNfTElCX0FQUEVORFRPVkFSXSwKK1sKKyAgZm9yIGVsZW1lbnQgaW4gWyQyXTsgZG8KKyAgICBoYXZlaXQ9CisgICAgZm9yIHggaW4gJFskMV07IGRvCisgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGVsZW1lbnQiOyB0aGVuCisgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZG9uZQorICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICBbJDFdPSIke1skMV19JHtbJDFdOisgfSRlbGVtZW50IgorICAgIGZpCisgIGRvbmUKK10pCisKK2RubCBGb3IgdGhvc2UgY2FzZXMgd2hlcmUgYSB2YXJpYWJsZSBjb250YWlucyBzZXZlcmFsIC1MIGFuZCAtbCBvcHRpb25zCitkbmwgcmVmZXJyaW5nIHRvIHVua25vd24gbGlicmFyaWVzIGFuZCBkaXJlY3RvcmllcywgdGhpcyBtYWNybyBkZXRlcm1pbmVzIHRoZQorZG5sIG5lY2Vzc2FyeSBhZGRpdGlvbmFsIGxpbmtlciBvcHRpb25zIGZvciB0aGUgcnVudGltZSBwYXRoLgorZG5sIEFDX0xJQl9MSU5LRkxBR1NfRlJPTV9MSUJTKFtMREFERFZBUl0sIFtMSUJTVkFMVUVdLCBbVVNFLUxJQlRPT0xdKQorZG5sIHNldHMgTERBRERWQVIgdG8gbGlua2VyIG9wdGlvbnMgbmVlZGVkIHRvZ2V0aGVyIHdpdGggTElCU1ZBTFVFLgorZG5sIElmIFVTRS1MSUJUT09MIGV2YWx1YXRlcyB0byBub24tZW1wdHksIGxpbmtpbmcgd2l0aCBsaWJ0b29sIGlzIGFzc3VtZWQsCitkbmwgb3RoZXJ3aXNlIGxpbmtpbmcgd2l0aG91dCBsaWJ0b29sIGlzIGFzc3VtZWQuCitBQ19ERUZVTihbQUNfTElCX0xJTktGTEFHU19GUk9NX0xJQlNdLAorWworICBBQ19SRVFVSVJFKFtBQ19MSUJfUlBBVEhdKQorICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9NVUxUSUxJQl0pCisgICQxPQorICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiAhPSBubzsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgJiYgdGVzdCAiJGFjbF9oYXJkY29kZV9taW51c19MIiA9IG5vOyB0aGVuCisgICAgICBkbmwgVXNlIGFuIGV4cGxpY2l0IG9wdGlvbiB0byBoYXJkY29kZSBkaXJlY3RvcmllcyBpbnRvIHRoZSByZXN1bHRpbmcKKyAgICAgIGRubCBiaW5hcnkuCisgICAgICBycGF0aGRpcnM9CisgICAgICBuZXh0PQorICAgICAgZm9yIG9wdCBpbiAkMjsgZG8KKyAgICAgICAgaWYgdGVzdCAtbiAiJG5leHQiOyB0aGVuCisgICAgICAgICAgZGlyPSIkbmV4dCIKKyAgICAgICAgICBkbmwgTm8gbmVlZCB0byBoYXJkY29kZSB0aGUgc3RhbmRhcmQgL3Vzci9saWIuCisgICAgICAgICAgaWYgdGVzdCAiWCRkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGRpciIKKyAgICAgICAgICBmaQorICAgICAgICAgIG5leHQ9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBjYXNlICRvcHQgaW4KKyAgICAgICAgICAgIC1MKSBuZXh0PXllcyA7OworICAgICAgICAgICAgLUwqKSBkaXI9YGVjaG8gIlgkb3B0IiB8IHNlZCAtZSAncyxeWC1MLCwnYAorICAgICAgICAgICAgICAgICBkbmwgTm8gbmVlZCB0byBoYXJkY29kZSB0aGUgc3RhbmRhcmQgL3Vzci9saWIuCisgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZGlyIiAhPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgorICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZGlyIgorICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICBuZXh0PSA7OworICAgICAgICAgICAgKikgbmV4dD0gOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgICBpZiB0ZXN0ICJYJHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCisgICAgICAgIGlmIHRlc3QgLW4gIiIkMyIiOyB0aGVuCisgICAgICAgICAgZG5sIGxpYnRvb2wgaXMgdXNlZCBmb3IgbGlua2luZy4gVXNlIC1SIG9wdGlvbnMuCisgICAgICAgICAgZm9yIGRpciBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICAgICAgJDE9IiR7JDF9JHskMTorIH0tUiRkaXIiCisgICAgICAgICAgZG9uZQorICAgICAgICBlbHNlCisgICAgICAgICAgZG5sIFRoZSBsaW5rZXIgaXMgdXNlZCBmb3IgbGlua2luZyBkaXJlY3RseS4KKyAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisgICAgICAgICAgICBkbmwgV2VpcmQgcGxhdGZvcm06IG9ubHkgdGhlIGxhc3QgLXJwYXRoIG9wdGlvbiBjb3VudHMsIHRoZSB1c2VyCisgICAgICAgICAgICBkbmwgbXVzdCBwYXNzIGFsbCBwYXRoIGVsZW1lbnRzIGluIG9uZSBvcHRpb24uCisgICAgICAgICAgICBhbGxkaXJzPQorICAgICAgICAgICAgZm9yIGRpciBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICBhbGxkaXJzPSIke2FsbGRpcnN9JHthbGxkaXJzOiskYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3J9JGRpciIKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKyAgICAgICAgICAgIGxpYmRpcj0iJGFsbGRpcnMiCisgICAgICAgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorICAgICAgICAgICAgJDE9IiRmbGFnIgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRubCBUaGUgLXJwYXRoIG9wdGlvbnMgYXJlIGN1bXVsYXRpdmUuCisgICAgICAgICAgICBmb3IgZGlyIGluICRycGF0aGRpcnM7IGRvCisgICAgICAgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKyAgICAgICAgICAgICAgbGliZGlyPSIkZGlyIgorICAgICAgICAgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgICAgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCisgICAgICAgICAgICAgICQxPSIkeyQxfSR7JDE6KyB9JGZsYWciCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKKyAgQUNfU1VCU1QoWyQxXSkKK10pCmRpZmYgLS1naXQgYS9tNC9saWItcHJlZml4Lm00IGIvbTQvbGliLXByZWZpeC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODY4NGUxCi0tLSAvZGV2L251bGwKKysrIGIvbTQvbGliLXByZWZpeC5tNApAQCAtMCwwICsxLDE4NSBAQAorIyBsaWItcHJlZml4Lm00IHNlcmlhbCA1IChnZXR0ZXh0LTAuMTUpCitkbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorCitkbmwgQUNfTElCX0FSR19XSVRIIGlzIHN5bm9ueW1vdXMgdG8gQUNfQVJHX1dJVEggaW4gYXV0b2NvbmYtMi4xMywgYW5kCitkbmwgc2ltaWxhciB0byBBQ19BUkdfV0lUSCBpbiBhdXRvY29uZiAyLjUyLi4uMi41NyBleGNlcHQgdGhhdCBpcyBkb2Vzbid0CitkbmwgcmVxdWlyZSBleGNlc3NpdmUgYnJhY2tldGluZy4KK2lmZGVmKFtBQ19IRUxQX1NUUklOR10sCitbQUNfREVGVU4oW0FDX0xJQl9BUkdfV0lUSF0sIFtBQ19BUkdfV0lUSChbJDFdLFtbJDJdXSxbJDNdLFskNF0pXSldLAorW0FDX0RFRlVOKFtBQ19dW0xJQl9BUkdfV0lUSF0sIFtBQ19BUkdfV0lUSChbJDFdLFskMl0sWyQzXSxbJDRdKV0pXSkKKworZG5sIEFDX0xJQl9QUkVGSVggYWRkcyB0byB0aGUgQ1BQRkxBR1MgYW5kIExERkxBR1MgdGhlIGZsYWdzIHRoYXQgYXJlIG5lZWRlZAorZG5sIHRvIGFjY2VzcyBwcmV2aW91c2x5IGluc3RhbGxlZCBsaWJyYXJpZXMuIFRoZSBiYXNpYyBhc3N1bXB0aW9uIGlzIHRoYXQKK2RubCBhIHVzZXIgd2lsbCB3YW50IHBhY2thZ2VzIHRvIHVzZSBvdGhlciBwYWNrYWdlcyBoZSBwcmV2aW91c2x5IGluc3RhbGxlZAorZG5sIHdpdGggdGhlIHNhbWUgLS1wcmVmaXggb3B0aW9uLgorZG5sIFRoaXMgbWFjcm8gaXMgbm90IG5lZWRlZCBpZiBvbmx5IEFDX0xJQl9MSU5LRkxBR1MgaXMgdXNlZCB0byBsb2NhdGUKK2RubCBsaWJyYXJpZXMsIGJ1dCBpcyBvdGhlcndpc2UgdmVyeSBjb252ZW5pZW50LgorQUNfREVGVU4oW0FDX0xJQl9QUkVGSVhdLAorWworICBBQ19CRUZPUkUoWyQwXSwgW0FDX0xJQl9MSU5LRkxBR1NdKQorICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9NVUxUSUxJQl0pCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCisgIGRubCBCeSBkZWZhdWx0LCBsb29rIGluICRpbmNsdWRlZGlyIGFuZCAkbGliZGlyLgorICB1c2VfYWRkaXRpb25hbD15ZXMKKyAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKyAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKyAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisgIF0pCisgIEFDX0xJQl9BUkdfV0lUSChbbGliLXByZWZpeF0sCitbICAtLXdpdGgtbGliLXByZWZpeFs9RElSXSBzZWFyY2ggZm9yIGxpYnJhcmllcyBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorICAtLXdpdGhvdXQtbGliLXByZWZpeCAgICBkb24ndCBzZWFyY2ggZm9yIGxpYnJhcmllcyBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXJdLAorWworICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWG5vIjsgdGhlbgorICAgICAgdXNlX2FkZGl0aW9uYWw9bm8KKyAgICBlbHNlCisgICAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlgiOyB0aGVuCisgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCisgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorICAgICAgICBdKQorICAgICAgZWxzZQorICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiR3aXRodmFsL2luY2x1ZGUiCisgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPSIkd2l0aHZhbC8kYWNsX2xpYmRpcnN0ZW0iCisgICAgICBmaQorICAgIGZpCitdKQorICBpZiB0ZXN0ICR1c2VfYWRkaXRpb25hbCA9IHllczsgdGhlbgorICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkQ1BQRkxBR1MuCisgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKKyAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2luY2x1ZGUsCisgICAgZG5sICAgMi4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJENQUEZMQUdTLAorICAgIGRubCAgIDMuIGlmIGl0J3MgL3Vzci9sb2NhbC9pbmNsdWRlIGFuZCB3ZSBhcmUgdXNpbmcgR0NDIG9uIExpbnV4LAorICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCisgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYL3Vzci9pbmNsdWRlIjsgdGhlbgorICAgICAgaGF2ZWl0PQorICAgICAgZm9yIHggaW4gJENQUEZMQUdTOyBkbworICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgPSAiWC91c3IvbG9jYWwvaW5jbHVkZSI7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICAgICAgICBsaW51eCogfCBnbnUqIHwgaypic2QqLWdudSkgaGF2ZWl0PXllczs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkQ1BQRkxBR1MuCisgICAgICAgICAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30ke0NQUEZMQUdTOisgfS1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMREZMQUdTLgorICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0CisgICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9saWIsCisgICAgZG5sICAgMi4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJExERkxBR1MsCisgICAgZG5sICAgMy4gaWYgaXQncyAvdXNyL2xvY2FsL2xpYiBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKyAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisgICAgICBoYXZlaXQ9CisgICAgICBmb3IgeCBpbiAkTERGTEFHUzsgZG8KKyAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKyAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKyAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTERGTEFHUy4KKyAgICAgICAgICAgIExERkxBR1M9IiR7TERGTEFHU30ke0xERkxBR1M6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKK10pCisKK2RubCBBQ19MSUJfUFJFUEFSRV9QUkVGSVggY3JlYXRlcyB2YXJpYWJsZXMgYWNsX2ZpbmFsX3ByZWZpeCwKK2RubCBhY2xfZmluYWxfZXhlY19wcmVmaXgsIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyB0byB3aGljaCAkcHJlZml4IGFuZAorZG5sICRleGVjX3ByZWZpeCB3aWxsIGV4cGFuZCBhdCB0aGUgZW5kIG9mIHRoZSBjb25maWd1cmUgc2NyaXB0LgorQUNfREVGVU4oW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0sCitbCisgIGRubCBVbmZvcnR1bmF0ZWx5LCBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IGdldCBvbmx5IGZpbmFsbHkgZGV0ZXJtaW5lZAorICBkbmwgYXQgdGhlIGVuZCBvZiBjb25maWd1cmUuCisgIGlmIHRlc3QgIlgkcHJlZml4IiA9ICJYTk9ORSI7IHRoZW4KKyAgICBhY2xfZmluYWxfcHJlZml4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCisgIGVsc2UKKyAgICBhY2xfZmluYWxfcHJlZml4PSIkcHJlZml4IgorICBmaQorICBpZiB0ZXN0ICJYJGV4ZWNfcHJlZml4IiA9ICJYTk9ORSI7IHRoZW4KKyAgICBhY2xfZmluYWxfZXhlY19wcmVmaXg9JyR7cHJlZml4fScKKyAgZWxzZQorICAgIGFjbF9maW5hbF9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBmaQorICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGV2YWwgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PVwiJGFjbF9maW5hbF9leGVjX3ByZWZpeFwiCisgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKK10pCisKK2RubCBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW3N0YXRlbWVudF0pIGV2YWx1YXRlcyBzdGF0ZW1lbnQsIHdpdGggdGhlCitkbmwgdmFyaWFibGVzIHByZWZpeCBhbmQgZXhlY19wcmVmaXggYm91bmQgdG8gdGhlIHZhbHVlcyB0aGV5IHdpbGwgaGF2ZQorZG5sIGF0IHRoZSBlbmQgb2YgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCitBQ19ERUZVTihbQUNfTElCX1dJVEhfRklOQUxfUFJFRklYXSwKK1sKKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKyAgJDEKKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorXSkKKworZG5sIEFDX0xJQl9QUkVQQVJFX01VTFRJTElCIGNyZWF0ZXMgYSB2YXJpYWJsZSBhY2xfbGliZGlyc3RlbSwgY29udGFpbmluZworZG5sIHRoZSBiYXNlbmFtZSBvZiB0aGUgbGliZGlyLCBlaXRoZXIgImxpYiIgb3IgImxpYjY0Ii4KK0FDX0RFRlVOKFtBQ19MSUJfUFJFUEFSRV9NVUxUSUxJQl0sCitbCisgIGRubCBUaGVyZSBpcyBubyBmb3JtYWwgc3RhbmRhcmQgcmVnYXJkaW5nIGxpYiBhbmQgbGliNjQuIFRoZSBjdXJyZW50CisgIGRubCBwcmFjdGljZSBpcyB0aGF0IG9uIGEgc3lzdGVtIHN1cHBvcnRpbmcgMzItYml0IGFuZCA2NC1iaXQgaW5zdHJ1Y3Rpb24KKyAgZG5sIHNldHMgb3IgQUJJcywgNjQtYml0IGxpYnJhcmllcyBnbyB1bmRlciAkcHJlZml4L2xpYjY0IGFuZCAzMi1iaXQKKyAgZG5sIGxpYnJhcmllcyBnbyB1bmRlciAkcHJlZml4L2xpYi4gV2UgZGV0ZXJtaW5lIHRoZSBjb21waWxlcidzIGRlZmF1bHQKKyAgZG5sIG1vZGUgYnkgbG9va2luZyBhdCB0aGUgY29tcGlsZXIncyBsaWJyYXJ5IHNlYXJjaCBwYXRoLiBJZiBhdCBsZWFzdAorICBkbmwgb2YgaXRzIGVsZW1lbnRzIGVuZHMgaW4gL2xpYjY0IG9yIHBvaW50cyB0byBhIGRpcmVjdG9yeSB3aG9zZSBhYnNvbHV0ZQorICBkbmwgcGF0aG5hbWUgZW5kcyBpbiAvbGliNjQsIHdlIGFzc3VtZSBhIDY0LWJpdCBBQkkuIE90aGVyd2lzZSB3ZSB1c2UgdGhlCisgIGRubCBkZWZhdWx0LCBuYW1lbHkgImxpYiIuCisgIGFjbF9saWJkaXJzdGVtPWxpYgorICBzZWFyY2hwYXRoPWAoTENfQUxMPUMgJENDIC1wcmludC1zZWFyY2gtZGlycykgMj4vZGV2L251bGwgfCBzZWQgLW4gLWUgJ3MsXmxpYnJhcmllczogLCxwJyB8IHNlZCAtZSAncyxePSwsJ2AKKyAgaWYgdGVzdCAtbiAiJHNlYXJjaHBhdGgiOyB0aGVuCisgICAgYWNsX3NhdmVfSUZTPSIke0lGUz0gCX0iOyBJRlM9IjoiCisgICAgZm9yIHNlYXJjaGRpciBpbiAkc2VhcmNocGF0aDsgZG8KKyAgICAgIGlmIHRlc3QgLWQgIiRzZWFyY2hkaXIiOyB0aGVuCisgICAgICAgIGNhc2UgIiRzZWFyY2hkaXIiIGluCisgICAgICAgICAgKi9saWI2NC8gfCAqL2xpYjY0ICkgYWNsX2xpYmRpcnN0ZW09bGliNjQgOzsKKyAgICAgICAgICAqKSBzZWFyY2hkaXI9YGNkICIkc2VhcmNoZGlyIiAmJiBwd2RgCisgICAgICAgICAgICAgY2FzZSAiJHNlYXJjaGRpciIgaW4KKyAgICAgICAgICAgICAgICovbGliNjQgKSBhY2xfbGliZGlyc3RlbT1saWI2NCA7OworICAgICAgICAgICAgIGVzYWMgOzsKKyAgICAgICAgZXNhYworICAgICAgZmkKKyAgICBkb25lCisgICAgSUZTPSIkYWNsX3NhdmVfSUZTIgorICBmaQorXSkKZGlmZiAtLWdpdCBhL200L2xpYnRvb2wubTQgYi9tNC9saWJ0b29sLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZmVlNTMKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9saWJ0b29sLm00CkBAIC0wLDAgKzEsNzM3NyBAQAorIyBsaWJ0b29sLm00IC0gQ29uZmlndXJlIGxpYnRvb2wgZm9yIHRoZSBob3N0IHN5c3RlbS4gLSotQXV0b2NvbmYtKi0KKyMKKyMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCisjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCittNF9kZWZpbmUoW19MVF9DT1BZSU5HXSwgW2RubAorIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorIworIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgorIworIyBHTlUgTGlidG9vbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyBpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CisjIGlzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorIyBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgR05VIExpYnRvb2wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIEdOVSBMaWJ0b29sOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgYSBjb3B5CisjIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sLCBvcgorIyBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorXSkKKworIyBzZXJpYWwgNTYgTFRfSU5JVAorCisKKyMgTFRfUFJFUkVRKFZFUlNJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb21wbGFpbiBhbmQgZXhpdCBpZiB0aGlzIGxpYnRvb2wgdmVyc2lvbiBpcyBsZXNzIHRoYXQgVkVSU0lPTi4KK200X2RlZnVuKFtMVF9QUkVSRVFdLAorW200X2lmKG00X3ZlcnNpb25fY29tcGFyZShtNF9kZWZuKFtMVF9QQUNLQUdFX1ZFUlNJT05dKSwgWyQxXSksIC0xLAorICAgICAgIFttNF9kZWZhdWx0KFskM10sCisJCSAgIFttNF9mYXRhbChbTGlidG9vbCB2ZXJzaW9uICQxIG9yIGhpZ2hlciBpcyByZXF1aXJlZF0sCisJCSAgICAgICAgICAgICA2MyldKV0sCisgICAgICAgWyQyXSldKQorCisKKyMgX0xUX0NIRUNLX0JVSUxERElSCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb21wbGFpbiBpZiB0aGUgYWJzb2x1dGUgYnVpbGQgZGlyZWN0b3J5IG5hbWUgY29udGFpbnMgdW51c3VhbCBjaGFyYWN0ZXJzCittNF9kZWZ1bihbX0xUX0NIRUNLX0JVSUxERElSXSwKK1tjYXNlIGBwd2RgIGluCisgICpcICogfCAqXAkqKQorICAgIEFDX01TR19XQVJOKFtMaWJ0b29sIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHdoaXRlc3BhY2UgaW4gYHB3ZGBdKSA7OworZXNhYworXSkKKworCisjIExUX0lOSVQoW09QVElPTlNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9JTklUXSwKK1tBQ19QUkVSRVEoWzIuNThdKWRubCBXZSB1c2UgQUNfSU5DTFVERVNfREVGQVVMVAorQUNfQkVGT1JFKFskMF0sIFtMVF9MQU5HXSlkbmwKK0FDX0JFRk9SRShbJDBdLCBbTFRfT1VUUFVUXSlkbmwKK0FDX0JFRk9SRShbJDBdLCBbTFRETF9JTklUXSlkbmwKK200X3JlcXVpcmUoW19MVF9DSEVDS19CVUlMRERJUl0pZG5sCisKK2RubCBBdXRvY29uZiBkb2Vzbid0IGNhdGNoIHVuZXhwYW5kZWQgTFRfIG1hY3JvcyBieSBkZWZhdWx0OgorbTRfcGF0dGVybl9mb3JiaWQoW15fP0xUX1tBLVpfXSskXSlkbmwKK200X3BhdHRlcm5fYWxsb3coW14oX0xUX0VPRnxMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XfExUX01VTFRJX01PRFVMRSkkXSlkbmwKK2RubCBhY2xvY2FsIGRvZXNuJ3QgcHVsbCBsdG9wdGlvbnMubTQsIGx0c3VnYXIubTQsIG9yIGx0dmVyc2lvbi5tNAorZG5sIHVubGVzcyB3ZSByZXF1aXJlIGFuIEFDX0RFRlVOZWQgbWFjcm86CitBQ19SRVFVSVJFKFtMVE9QVElPTlNfVkVSU0lPTl0pZG5sCitBQ19SRVFVSVJFKFtMVFNVR0FSX1ZFUlNJT05dKWRubAorQUNfUkVRVUlSRShbTFRWRVJTSU9OX1ZFUlNJT05dKWRubAorQUNfUkVRVUlSRShbTFRPQlNPTEVURV9WRVJTSU9OXSlkbmwKK200X3JlcXVpcmUoW19MVF9QUk9HX0xUTUFJTl0pZG5sCisKK2RubCBQYXJzZSBPUFRJT05TCitfTFRfU0VUX09QVElPTlMoWyQwXSwgWyQxXSkKKworIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlYnVpbGQgbGlidG9vbCB3aGVuIG5lZWRlZAorTElCVE9PTF9ERVBTPSIkbHRtYWluIgorCisjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCitBQ19TVUJTVChMSUJUT09MKWRubAorCitfTFRfU0VUVVAKKworIyBPbmx5IGV4cGFuZCBvbmNlOgorbTRfZGVmaW5lKFtMVF9JTklUXSkKK10pIyBMVF9JTklUCisKKyMgT2xkIG5hbWVzOgorQVVfQUxJQVMoW0FDX1BST0dfTElCVE9PTF0sIFtMVF9JTklUXSkKK0FVX0FMSUFTKFtBTV9QUk9HX0xJQlRPT0xdLCBbTFRfSU5JVF0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX1BST0dfTElCVE9PTF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9QUk9HX0xJQlRPT0xdLCBbXSkKKworCisjIF9MVF9DQ19CQVNFTkFNRShDQykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDYWxjdWxhdGUgY2NfYmFzZW5hbWUuICBTa2lwIGtub3duIGNvbXBpbGVyIHdyYXBwZXJzIGFuZCBjcm9zcy1wcmVmaXguCittNF9kZWZ1bihbX0xUX0NDX0JBU0VOQU1FXSwKK1tmb3IgY2NfdGVtcCBpbiAkMSIiOyBkbworICBjYXNlICRjY190ZW1wIGluCisgICAgY29tcGlsZSB8ICpbW1xcL11dY29tcGlsZSB8IGNjYWNoZSB8ICpbW1xcL11dY2NhY2hlICkgOzsKKyAgICBkaXN0Y2MgfCAqW1tcXC9dXWRpc3RjYyB8IHB1cmlmeSB8ICpbW1xcL11dcHVyaWZ5ICkgOzsKKyAgICBcLSopIDs7CisgICAgKikgYnJlYWs7OworICBlc2FjCitkb25lCitjY19iYXNlbmFtZT1gJEVDSE8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKK10pCisKKworIyBfTFRfRklMRVVUSUxTX0RFRkFVTFRTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSXQgaXMgb2theSB0byB1c2UgdGhlc2UgZmlsZSBjb21tYW5kcyBhbmQgYXNzdW1lIHRoZXkgaGF2ZSBiZWVuIHNldAorIyBzZW5zaWJseSBhZnRlciBgbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pJy4KK200X2RlZnVuKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSwKK1s6ICR7Q1A9ImNwIC1mIn0KKzogJHtNVj0ibXYgLWYifQorOiAke1JNPSJybSAtZiJ9CitdKSMgX0xUX0ZJTEVVVElMU19ERUZBVUxUUworCisKKyMgX0xUX1NFVFVQCisjIC0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9TRVRVUF0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKK19MVF9ERUNMKFtdLCBbaG9zdF9hbGlhc10sIFswXSwgW1RoZSBob3N0IHN5c3RlbV0pZG5sCitfTFRfREVDTChbXSwgW2hvc3RdLCBbMF0pZG5sCitfTFRfREVDTChbXSwgW2hvc3Rfb3NdLCBbMF0pZG5sCitkbmwKK19MVF9ERUNMKFtdLCBbYnVpbGRfYWxpYXNdLCBbMF0sIFtUaGUgYnVpbGQgc3lzdGVtXSlkbmwKK19MVF9ERUNMKFtdLCBbYnVpbGRdLCBbMF0pZG5sCitfTFRfREVDTChbXSwgW2J1aWxkX29zXSwgWzBdKWRubAorZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCitkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfTE5fU10pZG5sCit0ZXN0IC16ICIkTE5fUyIgJiYgTE5fUz0ibG4gLXMiCitfTFRfREVDTChbXSwgW0xOX1NdLCBbMV0sIFtXaGV0aGVyIHdlIG5lZWQgc29mdCBvciBoYXJkIGxpbmtzXSlkbmwKK2RubAorQUNfUkVRVUlSRShbTFRfQ01EX01BWF9MRU5dKWRubAorX0xUX0RFQ0woW29iamV4dF0sIFthY19vYmpleHRdLCBbMF0sIFtPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIildKWRubAorX0xUX0RFQ0woW10sIFtleGVleHRdLCBbMF0sIFtFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIildKWRubAorZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10pZG5sCittNF9yZXF1aXJlKFtfTFRfQ01EX1JFTE9BRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9EXSlkbmwKK200X3JlcXVpcmUoW19MVF9DTURfT0xEX0FSQ0hJVkVdKWRubAorbTRfcmVxdWlyZShbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10pZG5sCisKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFsKKyMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKyMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzIElOSVQuCitpZiB0ZXN0IC1uICJcJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgIHNldG9wdCBOT19HTE9CX1NVQlNUCitmaQorXSkKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZmkKKworX0xUX0NIRUNLX09CSkRJUgorCittNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKK19MVF9QUk9HX0VDSE9fQkFDS1NMQVNICisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICAjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKKyAgIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCisgICMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KKyAgaWYgdGVzdCAiWCR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBYc2V0OyB0aGVuCisgICAgQ09MTEVDVF9OQU1FUz0KKyAgICBleHBvcnQgQ09MTEVDVF9OQU1FUworICBmaQorICA7OworZXNhYworCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCisjIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorc2VkX3F1b3RlX3N1YnN0PSdzL1woW1siYCRcXF1dXCkvXFxcMS9nJworCisjIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KK2RvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFtbImBcXF1dXCkvXFxcMS9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2hlbGwgdmFyaWFibGUgaW4gYQorIyBkb3VibGVfcXVvdGVfc3Vic3QnZWQgc3RyaW5nLgorZGVsYXlfdmFyaWFibGVfc3Vic3Q9J3MvXFxcXFxcXFxcXFwkL1xcXFxcXCQvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNpbmdsZSBxdW90ZS4KK2RlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdD0ncy8nXCcnLydcJ1xcXFxcXFwnXCcnL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBhdm9pZCBhY2NpZGVudGFsIGdsb2JiaW5nIGluIGV2YWxlZCBleHByZXNzaW9ucworbm9fZ2xvYl9zdWJzdD0ncy9cKi9cXFwqL2cnCisKKyMgR2xvYmFsIHZhcmlhYmxlczoKK29maWxlPWxpYnRvb2wKK2Nhbl9idWlsZF9zaGFyZWQ9eWVzCisKKyMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorIyB3aGljaCBuZWVkcyAnLmxpYicpLgorbGliZXh0PWEKKword2l0aF9nbnVfbGQ9IiRsdF9jdl9wcm9nX2dudV9sZCIKKworb2xkX0NDPSIkQ0MiCitvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorCisjIFNldCBzYW5lIGRlZmF1bHRzIGZvciB2YXJpb3VzIHZhcmlhYmxlcwordGVzdCAteiAiJENDIiAmJiBDQz1jYwordGVzdCAteiAiJExUQ0MiICYmIExUQ0M9JENDCit0ZXN0IC16ICIkTFRDRkxBR1MiICYmIExUQ0ZMQUdTPSRDRkxBR1MKK3Rlc3QgLXogIiRMRCIgJiYgTEQ9bGQKK3Rlc3QgLXogIiRhY19vYmpleHQiICYmIGFjX29iamV4dD1vCisKK19MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKworIyBPbmx5IHBlcmZvcm0gdGhlIGNoZWNrIGZvciBmaWxlLCBpZiB0aGUgY2hlY2sgbWV0aG9kIHJlcXVpcmVzIGl0Cit0ZXN0IC16ICIkTUFHSUNfQ01EIiAmJiBNQUdJQ19DTUQ9ZmlsZQorY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KK2ZpbGVfbWFnaWMqKQorICBpZiB0ZXN0ICIkZmlsZV9tYWdpY19jbWQiID0gJyRNQUdJQ19DTUQnOyB0aGVuCisgICAgX0xUX1BBVEhfTUFHSUMKKyAgZmkKKyAgOzsKK2VzYWMKKworIyBVc2UgQyBmb3IgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiB0aGUgbGlidG9vbCBzY3JpcHQKK0xUX1NVUFBPUlRFRF9UQUcoW0NDXSkKK19MVF9MQU5HX0NfQ09ORklHCitfTFRfTEFOR19ERUZBVUxUX0NPTkZJRworX0xUX0NPTkZJR19DT01NQU5EUworXSkjIF9MVF9TRVRVUAorCisKKyMgX0xUX1BST0dfTFRNQUlOCisjIC0tLS0tLS0tLS0tLS0tLQorIyBOb3RlIHRoYXQgdGhpcyBjb2RlIGlzIGNhbGxlZCBib3RoIGZyb20gYGNvbmZpZ3VyZScsIGFuZCBgY29uZmlnLnN0YXR1cycKKyMgbm93IHRoYXQgd2UgdXNlIEFDX0NPTkZJR19DT01NQU5EUyB0byBnZW5lcmF0ZSBsaWJ0b29sLiAgTm90YWJseSwKKyMgYGNvbmZpZy5zdGF0dXMnIGhhcyBubyB2YWx1ZSBmb3IgYWNfYXV4X2RpciB1bmxlc3Mgd2UgYXJlIHVzaW5nIEF1dG9tYWtlLAorIyBzbyB3ZSBwYXNzIGEgY29weSBhbG9uZyB0byBtYWtlIHN1cmUgaXQgaGFzIGEgc2Vuc2libGUgdmFsdWUgYW55d2F5LgorbTRfZGVmdW4oW19MVF9QUk9HX0xUTUFJTl0sCitbbTRfaWZkZWYoW0FDX1JFUVVJUkVfQVVYX0ZJTEVdLCBbQUNfUkVRVUlSRV9BVVhfRklMRShbbHRtYWluLnNoXSldKWRubAorX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW2FjX2F1eF9kaXI9JyRhY19hdXhfZGlyJ10pCitsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKK10pIyBfTFRfUFJPR19MVE1BSU4KKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBBY2N1bXVsYXRlIGNvZGUgZm9yIGNyZWF0aW5nIGxpYnRvb2wuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgU28gdGhhdCB3ZSBjYW4gcmVjcmVhdGUgYSBmdWxsIGxpYnRvb2wgc2NyaXB0IGluY2x1ZGluZyBhZGRpdGlvbmFsCisjIHRhZ3MsIHdlIGFjY3VtdWxhdGUgdGhlIGNodW5rcyBvZiBjb2RlIHRvIHNlbmQgdG8gQUNfQ09ORklHX0NPTU1BTkRTCisjIGluIG1hY3JvcyBhbmQgdGhlbiBtYWtlIGEgc2luZ2xlIGNhbGwgYXQgdGhlIGVuZCB1c2luZyB0aGUgYGxpYnRvb2wnCisjIGxhYmVsLgorCisKKyMgX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW0lOSVQtQ09NTUFORFNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlZ2lzdGVyIElOSVQtQ09NTUFORFMgdG8gYmUgcGFzc2VkIHRvIEFDX0NPTkZJR19DT01NQU5EUyBsYXRlci4KK200X2RlZmluZShbX0xUX0NPTkZJR19MSUJUT09MX0lOSVRdLAorW200X2lmdmFsKFskMV0sCisgICAgICAgICAgW200X2FwcGVuZChbX0xUX09VVFBVVF9MSUJUT09MX0lOSVRdLAorICAgICAgICAgICAgICAgICAgICAgWyQxCitdKV0pXSkKKworIyBJbml0aWFsaXplLgorbTRfZGVmaW5lKFtfTFRfT1VUUFVUX0xJQlRPT0xfSU5JVF0pCisKKworIyBfTFRfQ09ORklHX0xJQlRPT0woW0NPTU1BTkRTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlZ2lzdGVyIENPTU1BTkRTIHRvIGJlIHBhc3NlZCB0byBBQ19DT05GSUdfQ09NTUFORFMgbGF0ZXIuCittNF9kZWZpbmUoW19MVF9DT05GSUdfTElCVE9PTF0sCitbbTRfaWZ2YWwoWyQxXSwKKyAgICAgICAgICBbbTRfYXBwZW5kKFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNdLAorICAgICAgICAgICAgICAgICAgICAgWyQxCitdKV0pXSkKKworIyBJbml0aWFsaXplLgorbTRfZGVmaW5lKFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNdKQorCisKKyMgX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTKFtDT01NQU5EU10sIFtJTklUX0NPTU1BTkRTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ09ORklHX1NBVkVfQ09NTUFORFNdLAorW19MVF9DT05GSUdfTElCVE9PTChbJDFdKQorX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoWyQyXSkKK10pCisKKworIyBfTFRfRk9STUFUX0NPTU1FTlQoW0NPTU1FTlRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBZGQgbGVhZGluZyBjb21tZW50IG1hcmtzIHRvIHRoZSBzdGFydCBvZiBlYWNoIGxpbmUsIGFuZCBhIHRyYWlsaW5nCisjIGZ1bGwtc3RvcCB0byB0aGUgd2hvbGUgY29tbWVudCBpZiBvbmUgaXMgbm90IHByZXNlbnQgYWxyZWFkeS4KK200X2RlZmluZShbX0xUX0ZPUk1BVF9DT01NRU5UXSwKK1ttNF9pZnZhbChbJDFdLCBbCittNF9icGF0c3Vic3QoW200X2JwYXRzdWJzdChbJDFdLCBbXiAqXSwgWyMgXSldLAorICAgICAgICAgICAgICBbWydgJFxdXSwgW1xcXCZdKV1tNF9ibWF0Y2goWyQxXSwgW1shPy5dJF0sIFtdLCBbLl0pCispXSkKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRklYTUU6IEVsaW1pbmF0ZSBWQVJOQU1FICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIF9MVF9ERUNMKFtDT05GSUdOQU1FXSwgVkFSTkFNRSwgVkFMVUUsIFtERVNDUklQVElPTl0sIFtJUy1UQUdHRUQ/XSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDT05GSUdOQU1FIGlzIHRoZSBuYW1lIGdpdmVuIHRvIHRoZSB2YWx1ZSBpbiB0aGUgbGlidG9vbCBzY3JpcHQuCisjIFZBUk5BTUUgaXMgdGhlIChiYXNlKSBuYW1lIHVzZWQgaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisjIFZBTFVFIG1heSBiZSAwLCAxIG9yIDIgZm9yIGEgY29tcHV0ZWQgcXVvdGUgZXNjYXBlZCB2YWx1ZSBiYXNlZCBvbgorIyBWQVJOQU1FLiAgQW55IG90aGVyIHZhbHVlIHdpbGwgYmUgdXNlZCBkaXJlY3RseS4KK200X2RlZmluZShbX0xUX0RFQ0xdLAorW2x0X2lmX2FwcGVuZF91bmlxKFtsdF9kZWNsX3Zhcm5hbWVzXSwgWyQyXSwgWywgXSwKKyAgICBbbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLCBbbGlidG9vbF9uYW1lXSwKKwlbbTRfaWZ2YWwoWyQxXSwgWyQxXSwgWyQyXSldKQorICAgIGx0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwgW3ZhbHVlXSwgWyQzXSkKKyAgICBtNF9pZnZhbChbJDRdLAorCVtsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sIFtkZXNjcmlwdGlvbl0sIFskNF0pXSkKKyAgICBsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sCisJW3RhZ2dlZD9dLCBbbTRfaWZ2YWwoWyQ1XSwgW3llc10sIFtub10pXSldKQorXSkKKworCisjIF9MVF9UQUdERUNMKFtDT05GSUdOQU1FXSwgVkFSTkFNRSwgVkFMVUUsIFtERVNDUklQVElPTl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9UQUdERUNMXSwgW19MVF9ERUNMKFskMV0sIFskMl0sIFskM10sIFskNF0sIFt5ZXNdKV0pCisKKworIyBsdF9kZWNsX3RhZ192YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfdGFnX3Zhcm5hbWVzXSwKK1tfbHRfZGVjbF9maWx0ZXIoW3RhZ2dlZD9dLCBbeWVzXSwgJEApXSkKKworCisjIF9sdF9kZWNsX2ZpbHRlcihTVUJLRVksIFZBTFVFLCBbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX2x0X2RlY2xfZmlsdGVyXSwKK1ttNF9jYXNlKFskI10sCisgIFswXSwgW200X2ZhdGFsKFskMDogdG9vIGZldyBhcmd1bWVudHM6ICQjXSldLAorICBbMV0sIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkIzogJDFdKV0sCisgIFsyXSwgW2x0X2RpY3RfZmlsdGVyKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbJDJdLCBbXSwgbHRfZGVjbF92YXJuYW1lcyldLAorICBbM10sIFtsdF9kaWN0X2ZpbHRlcihbbHRfZGVjbF9kaWN0XSwgWyQxXSwgWyQyXSwgWyQzXSwgbHRfZGVjbF92YXJuYW1lcyldLAorICBbbHRfZGljdF9maWx0ZXIoW2x0X2RlY2xfZGljdF0sICRAKV0pW11kbmwKK10pCisKKworIyBsdF9kZWNsX3F1b3RlX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX3F1b3RlX3Zhcm5hbWVzXSwKK1tfbHRfZGVjbF9maWx0ZXIoW3ZhbHVlXSwgWzFdLCAkQCldKQorCisKKyMgbHRfZGVjbF9kcXVvdGVfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX2RxdW90ZV92YXJuYW1lc10sCitbX2x0X2RlY2xfZmlsdGVyKFt2YWx1ZV0sIFsyXSwgJEApXSkKKworCisjIGx0X2RlY2xfdmFybmFtZXNfdGFnZ2VkKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF92YXJuYW1lc190YWdnZWRdLAorW200X2Fzc2VydChbJCMgPD0gMl0pZG5sCitfJDAobTRfcXVvdGUobTRfZGVmYXVsdChbJDFdLCBbWywgXV0pKSwKKyAgICBtNF9pZnZhbChbJDJdLCBbWyQyXV0sIFttNF9kcXVvdGUobHRfZGVjbF90YWdfdmFybmFtZXMpXSksCisgICAgbTRfc3BsaXQobTRfbm9ybWFsaXplKG00X3F1b3RlKF9MVF9UQUdTKSksIFsgXSkpXSkKK200X2RlZmluZShbX2x0X2RlY2xfdmFybmFtZXNfdGFnZ2VkXSwKK1ttNF9pZnZhbChbJDNdLCBbbHRfY29tYmluZShbJDFdLCBbJDJdLCBbX10sICQzKV0pXSkKKworCisjIGx0X2RlY2xfYWxsX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF9hbGxfdmFybmFtZXNdLAorW18kMChtNF9xdW90ZShtNF9kZWZhdWx0KFskMV0sIFtbLCBdXSkpLAorICAgICBtNF9pZihbJDJdLCBbXSwKKwkgICBtNF9xdW90ZShsdF9kZWNsX3Zhcm5hbWVzKSwKKwltNF9xdW90ZShtNF9zaGlmdCgkQCkpKSlbXWRubAorXSkKK200X2RlZmluZShbX2x0X2RlY2xfYWxsX3Zhcm5hbWVzXSwKK1tsdF9qb2luKCRALCBsdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZChbJDFdLAorCQkJbHRfZGVjbF90YWdfdmFybmFtZXMoW1ssIF1dLCBtNF9zaGlmdCgkQCkpKSlkbmwKK10pCisKKworIyBfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJFKFtWQVJOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFF1b3RlIGEgdmFyaWFibGUgdmFsdWUsIGFuZCBmb3J3YXJkIGl0IHRvIGBjb25maWcuc3RhdHVzJyBzbyB0aGF0IGl0cworIyBkZWNsYXJhdGlvbiB0aGVyZSB3aWxsIGhhdmUgdGhlIHNhbWUgdmFsdWUgYXMgaW4gYGNvbmZpZ3VyZScuICBWQVJOQU1FCisjIG11c3QgaGF2ZSBhIHNpbmdsZSBxdW90ZSBkZWxpbWl0ZWQgdmFsdWUgZm9yIHRoaXMgdG8gd29yay4KK200X2RlZmluZShbX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSRV0sCitbJDE9J2AkRUNITyAiWCRdWyQxIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnXSkKKworCisjIF9MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkFUSU9OUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgV2UgZGVsaW1pdCBsaWJ0b29sIGNvbmZpZyB2YXJpYWJsZXMgd2l0aCBzaW5nbGUgcXVvdGVzLCBzbyB3aGVuCisjIHdlIHdyaXRlIHRoZW0gdG8gY29uZmlnLnN0YXR1cywgd2UgaGF2ZSB0byBiZSBzdXJlIHRvIHF1b3RlIGFsbAorIyBlbWJlZGRlZCBzaW5nbGUgcXVvdGVzIHByb3Blcmx5LiAgSW4gY29uZmlndXJlLCB0aGlzIG1hY3JvIGV4cGFuZHMKKyMgZWFjaCB2YXJpYWJsZSBkZWNsYXJlZCB3aXRoIF9MVF9ERUNMIChhbmQgX0xUX1RBR0RFQ0wpIGludG86CisjCisjICAgIDx2YXI+PSdgJEVDSE8gIlgkPHZhcj4iIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK200X2RlZnVuKFtfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJBVElPTlNdLAorW200X2ZvcmVhY2goW19sdF92YXJdLCBtNF9xdW90ZShsdF9kZWNsX2FsbF92YXJuYW1lcyksCisgICAgW200X24oW19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkUoX2x0X3ZhcildKV0pXSkKKworCisjIF9MVF9MSUJUT09MX1RBR1MKKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBPdXRwdXQgY29tbWVudCBhbmQgbGlzdCBvZiB0YWdzIHN1cHBvcnRlZCBieSB0aGUgc2NyaXB0CittNF9kZWZ1bihbX0xUX0xJQlRPT0xfVEFHU10sCitbX0xUX0ZPUk1BVF9DT01NRU5UKFtUaGUgbmFtZXMgb2YgdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHRdKWRubAorYXZhaWxhYmxlX3RhZ3M9Il9MVF9UQUdTImRubAorXSkKKworCisjIF9MVF9MSUJUT09MX0RFQ0xBUkUoVkFSTkFNRSwgW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4dHJhY3QgdGhlIGRpY3Rpb25hcnkgdmFsdWVzIGZvciBWQVJOQU1FIChvcHRpb25hbGx5IHdpdGggVEFHKSBhbmQKKyMgZXhwYW5kIHRvIGEgY29tbWVudGVkIHNoZWxsIHZhcmlhYmxlIHNldHRpbmc6CisjCisjICAgICMgU29tZSBjb21tZW50IGFib3V0IHdoYXQgVkFSIGlzIGZvci4KKyMgICAgdmlzaWJsZV9uYW1lPSRsdF9pbnRlcm5hbF9uYW1lCittNF9kZWZpbmUoW19MVF9MSUJUT09MX0RFQ0xBUkVdLAorW19MVF9GT1JNQVRfQ09NTUVOVChtNF9xdW90ZShsdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLAorCQkJCQkgICBbZGVzY3JpcHRpb25dKSkpW11kbmwKK200X3B1c2hkZWYoW19saWJ0b29sX25hbWVdLAorICAgIG00X3F1b3RlKGx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sIFtsaWJ0b29sX25hbWVdKSkpW11kbmwKK200X2Nhc2UobTRfcXVvdGUobHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwgW3ZhbHVlXSkpLAorICAgIFswXSwgW19saWJ0b29sX25hbWU9WyRdJDFdLAorICAgIFsxXSwgW19saWJ0b29sX25hbWU9JGx0X1tdJDFdLAorICAgIFsyXSwgW19saWJ0b29sX25hbWU9JGx0X1tdJDFdLAorICAgIFtfbGlidG9vbF9uYW1lPWx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sIFt2YWx1ZV0pXSlbXWRubAorbTRfaWZ2YWwoWyQyXSwgW18kMl0pW11tNF9wb3BkZWYoW19saWJ0b29sX25hbWVdKVtdZG5sCitdKQorCisKKyMgX0xUX0xJQlRPT0xfQ09ORklHX1ZBUlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBjb21tZW50ZWQgZGVjbGFyYXRpb25zIG9mIG5vbi10YWdnZWQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzCisjIHN1aXRhYmxlIGZvciBpbnNlcnRpb24gaW4gdGhlIExJQlRPT0wgQ09ORklHIHNlY3Rpb24gb2YgdGhlIGBsaWJ0b29sJworIyBzY3JpcHQuICBUYWdnZWQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzIChldmVuIGZvciB0aGUgTElCVE9PTCBDT05GSUcKKyMgc2VjdGlvbikgYXJlIHByb2R1Y2VkIGJ5IF9MVF9MSUJUT09MX1RBR19WQVJTLgorbTRfZGVmdW4oW19MVF9MSUJUT09MX0NPTkZJR19WQVJTXSwKK1ttNF9mb3JlYWNoKFtfbHRfdmFyXSwKKyAgICBtNF9xdW90ZShfbHRfZGVjbF9maWx0ZXIoW3RhZ2dlZD9dLCBbbm9dLCBbXSwgbHRfZGVjbF92YXJuYW1lcykpLAorICAgIFttNF9uKFtfTFRfTElCVE9PTF9ERUNMQVJFKF9sdF92YXIpXSldKV0pCisKKworIyBfTFRfTElCVE9PTF9UQUdfVkFSUyhUQUcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX0xJQlRPT0xfVEFHX1ZBUlNdLAorW200X2ZvcmVhY2goW19sdF92YXJdLCBtNF9xdW90ZShsdF9kZWNsX3RhZ192YXJuYW1lcyksCisgICAgW200X24oW19MVF9MSUJUT09MX0RFQ0xBUkUoX2x0X3ZhciwgWyQxXSldKV0pXSkKKworCisjIF9MVF9UQUdWQVIoVkFSTkFNRSwgW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX1RBR1ZBUl0sIFttNF9pZnZhbChbJDJdLCBbJDFfJDJdLCBbJDFdKV0pCisKKworIyBfTFRfQ09ORklHX0NPTU1BTkRTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2VuZCBhY2N1bXVsYXRlZCBvdXRwdXQgdG8gJENPTkZJR19TVEFUVVMuICBUaGFua3MgdG8gdGhlIGxpc3RzIG9mCisjIHZhcmlhYmxlcyBmb3Igc2luZ2xlIGFuZCBkb3VibGUgcXVvdGUgZXNjYXBpbmcgd2Ugc2F2ZWQgZnJvbSBjYWxscworIyB0byBfTFRfREVDTCwgd2UgY2FuIHB1dCBxdW90ZSBlc2NhcGVkIHZhcmlhYmxlcyBkZWNsYXJhdGlvbnMKKyMgaW50byBgY29uZmlnLnN0YXR1cycsIGFuZCB0aGVuIHRoZSBzaGVsbCBjb2RlIHRvIHF1b3RlIGVzY2FwZSB0aGVtIGluCisjIGZvciBsb29wcyBpbiBgY29uZmlnLnN0YXR1cycuICBGaW5hbGx5LCBhbnkgYWRkaXRpb25hbCBjb2RlIGFjY3VtdWxhdGVkCisjIGZyb20gY2FsbHMgdG8gX0xUX0NPTkZJR19MSUJUT09MX0lOSVQgaXMgZXhwYW5kZWQuCittNF9kZWZ1bihbX0xUX0NPTkZJR19DT01NQU5EU10sCitbQUNfUFJPVklERV9JRkVMU0UoW0xUX09VVFBVVF0sCisJZG5sIElmIHRoZSBsaWJ0b29sIGdlbmVyYXRpb24gY29kZSBoYXMgYmVlbiBwbGFjZWQgaW4gJENPTkZJR19MVCwKKwlkbmwgaW5zdGVhZCBvZiBkdXBsaWNhdGluZyBpdCBhbGwgb3ZlciBhZ2FpbiBpbnRvIGNvbmZpZy5zdGF0dXMsCisJZG5sIHRoZW4gd2Ugd2lsbCBoYXZlIGNvbmZpZy5zdGF0dXMgcnVuICRDT05GSUdfTFQgbGF0ZXIsIHNvIGl0CisJZG5sIG5lZWRzIHRvIGtub3cgd2hhdCBuYW1lIGlzIHN0b3JlZCB0aGVyZToKKyAgICAgICAgW0FDX0NPTkZJR19DT01NQU5EUyhbbGlidG9vbF0sCisgICAgICAgICAgICBbJFNIRUxMICRDT05GSUdfTFQgfHwgQVNfRVhJVCgxKV0sIFtDT05GSUdfTFQ9JyRDT05GSUdfTFQnXSldLAorICAgIGRubCBJZiB0aGUgbGlidG9vbCBnZW5lcmF0aW9uIGNvZGUgaXMgZGVzdGluZWQgZm9yIGNvbmZpZy5zdGF0dXMsCisgICAgZG5sIGV4cGFuZCB0aGUgYWNjdW11bGF0ZWQgY29tbWFuZHMgYW5kIGluaXQgY29kZSBub3c6CisgICAgW0FDX0NPTkZJR19DT01NQU5EUyhbbGlidG9vbF0sCisgICAgICAgIFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNdLCBbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTX0lOSVRdKV0pCitdKSNfTFRfQ09ORklHX0NPTU1BTkRTCisKKworIyBJbml0aWFsaXplLgorbTRfZGVmaW5lKFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNfSU5JVF0sCitbCisKKyMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0CisjIGlmIENEUEFUSCBpcyBzZXQuCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKK3NlZF9xdW90ZV9zdWJzdD0nJHNlZF9xdW90ZV9zdWJzdCcKK2RvdWJsZV9xdW90ZV9zdWJzdD0nJGRvdWJsZV9xdW90ZV9zdWJzdCcKK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSckZGVsYXlfdmFyaWFibGVfc3Vic3QnCitfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJBVElPTlMKK0xUQ0M9JyRMVENDJworTFRDRkxBR1M9JyRMVENGTEFHUycKK2NvbXBpbGVyPSckY29tcGlsZXJfREVGQVVMVCcKKworIyBRdW90ZSBldmFsZWQgc3RyaW5ncy4KK2ZvciB2YXIgaW4gbHRfZGVjbF9hbGxfdmFybmFtZXMoW1sgXAorXV0sIGx0X2RlY2xfcXVvdGVfdmFybmFtZXMpOyBkbworICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gIlhcXFxcXCRcJHZhciJcYCBpbgorICAgICpbW1xcXFxcXFxgXFwiXFxcJF1dKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiWFxcXCRcJHZhclxcIiB8IFxcXCRYc2VkIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgorICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKKyMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KK2ZvciB2YXIgaW4gbHRfZGVjbF9hbGxfdmFybmFtZXMoW1sgXAorXV0sIGx0X2RlY2xfZHF1b3RlX3Zhcm5hbWVzKTsgZG8KKyAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPICJYXFxcXFwkXCR2YXIiXGAgaW4KKyAgICAqW1tcXFxcXFxcYFxcIlxcXCRdXSopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlhcXFwkXCR2YXJcXCIgfCBcXFwkWHNlZCAtZSBcXCJcXFwkZG91YmxlX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCisjIEZpeC11cCBmYWxsYmFjayBlY2hvIGlmIGl0IHdhcyBtYW5nbGVkIGJ5IHRoZSBhYm92ZSBxdW90aW5nIHJ1bGVzLgorY2FzZSBcJGx0X0VDSE8gaW4KKyonXFxcWyRdMCAtLWZhbGxiYWNrLWVjaG8iJylkbmwgIgorICBsdF9FQ0hPPVxgXCRFQ0hPICJYXCRsdF9FQ0hPIiB8IFwkWHNlZCAtZSAncy9cXFxcXFxcXFxcXFxcXFxbJF0wIC0tZmFsbGJhY2stZWNobyJcWyRdL1xbJF0wIC0tZmFsbGJhY2stZWNobyIvJ1xgCisgIDs7Citlc2FjCisKK19MVF9PVVRQVVRfTElCVE9PTF9JTklUCitdKQorCisKKyMgTFRfT1VUUFVUCisjIC0tLS0tLS0tLQorIyBUaGlzIG1hY3JvIGFsbG93cyBlYXJseSBnZW5lcmF0aW9uIG9mIHRoZSBsaWJ0b29sIHNjcmlwdCAoYmVmb3JlCisjIEFDX09VVFBVVCBpcyBjYWxsZWQpLCBpbmNhc2UgaXQgaXMgdXNlZCBpbiBjb25maWd1cmUgZm9yIGNvbXBpbGF0aW9uCisjIHRlc3RzLgorQUNfREVGVU4oW0xUX09VVFBVVF0sCitbOiAke0NPTkZJR19MVD0uL2NvbmZpZy5sdH0KK0FDX01TR19OT1RJQ0UoW2NyZWF0aW5nICRDT05GSUdfTFRdKQorY2F0ID4iJENPTkZJR19MVCIgPDxfTFRFT0YKKyMhICRTSEVMTAorIyBHZW5lcmF0ZWQgYnkgJGFzX21lLgorIyBSdW4gdGhpcyBmaWxlIHRvIHJlY3JlYXRlIGEgbGlidG9vbCBzdHViIHdpdGggdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKworbHRfY2xfc2lsZW50PWZhbHNlCitTSEVMTD1cJHtDT05GSUdfU0hFTEwtJFNIRUxMfQorX0xURU9GCisKK2NhdCA+PiIkQ09ORklHX0xUIiA8PFxfTFRFT0YKK0FTX1NIRUxMX1NBTklUSVpFCitfQVNfUFJFUEFSRQorCitleGVjIEFTX01FU1NBR0VfRkQ+JjEKK2V4ZWMgQVNfTUVTU0FHRV9MT0dfRkQ+PmNvbmZpZy5sb2cKK3sKKyAgZWNobworICBBU19CT1goW1J1bm5pbmcgJGFzX21lLl0pCit9ID4mQVNfTUVTU0FHRV9MT0dfRkQKKworbHRfY2xfaGVscD0iXAorXGAkYXNfbWUnIGNyZWF0ZXMgYSBsb2NhbCBsaWJ0b29sIHN0dWIgZnJvbSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLAorZm9yIHVzZSBpbiBmdXJ0aGVyIGNvbmZpZ3VyZSB0aW1lIHRlc3RzIGJlZm9yZSB0aGUgcmVhbCBsaWJ0b29sIGlzCitnZW5lcmF0ZWQuCisKK1VzYWdlOiAkWzBdIFtbT1BUSU9OU11dCisKKyAgLWgsIC0taGVscCAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC1WLCAtLXZlcnNpb24gICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisgIC1xLCAtLXF1aWV0ICAgICBkbyBub3QgcHJpbnQgcHJvZ3Jlc3MgbWVzc2FnZXMKKyAgLWQsIC0tZGVidWcgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+LiIKKworbHRfY2xfdmVyc2lvbj0iXAorbTRfaWZzZXQoW0FDX1BBQ0tBR0VfTkFNRV0sIFtBQ19QQUNLQUdFX05BTUUgXSljb25maWcubHRbXWRubAorbTRfaWZzZXQoW0FDX1BBQ0tBR0VfVkVSU0lPTl0sIFsgQUNfUEFDS0FHRV9WRVJTSU9OXSkKK2NvbmZpZ3VyZWQgYnkgJFswXSwgZ2VuZXJhdGVkIGJ5IG00X1BBQ0tBR0VfU1RSSU5HLgorCitDb3B5cmlnaHQgKEMpIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitUaGlzIGNvbmZpZy5sdCBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuIgorCit3aGlsZSB0ZXN0ICRbI10gIT0gMAorZG8KKyAgY2FzZSAkWzFdIGluCisgICAgLS12ZXJzaW9uIHwgLS12KiB8IC1WICkKKyAgICAgIGVjaG8gIiRsdF9jbF92ZXJzaW9uIjsgZXhpdCAwIDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgIGVjaG8gIiRsdF9jbF9oZWxwIjsgZXhpdCAwIDs7CisgICAgLS1kZWJ1ZyB8IC0tZCogfCAtZCApCisgICAgICBkZWJ1Zz06IDs7CisgICAgLS1xdWlldCB8IC0tcSogfCAtLXNpbGVudCB8IC0tcyogfCAtcSApCisgICAgICBsdF9jbF9zaWxlbnQ9OiA7OworCisgICAgLSopIEFDX01TR19FUlJPUihbdW5yZWNvZ25pemVkIG9wdGlvbjogJFsxXQorVHJ5IFxgJFswXSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLl0pIDs7CisKKyAgICAqKSBBQ19NU0dfRVJST1IoW3VucmVjb2duaXplZCBhcmd1bWVudDogJFsxXQorVHJ5IFxgJFswXSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLl0pIDs7CisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworaWYgJGx0X2NsX3NpbGVudDsgdGhlbgorICBleGVjIEFTX01FU1NBR0VfRkQ+L2Rldi9udWxsCitmaQorX0xURU9GCisKK2NhdCA+PiIkQ09ORklHX0xUIiA8PF9MVEVPRgorX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTX0lOSVQKK19MVEVPRgorCitjYXQgPj4iJENPTkZJR19MVCIgPDxcX0xURU9GCitBQ19NU0dfTk9USUNFKFtjcmVhdGluZyAkb2ZpbGVdKQorX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTCitBU19FWElUKDApCitfTFRFT0YKK2NobW9kICt4ICIkQ09ORklHX0xUIgorCisjIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGJ1dCBjb25maWcubHQgZG9lcyBpdHMgb3duIHJlZGlyZWN0aW9uLAorIyBhcHBlbmRpbmcgdG8gY29uZmlnLmxvZywgd2hpY2ggZmFpbHMgb24gRE9TLCBhcyBjb25maWcubG9nIGlzIHN0aWxsIGtlcHQKKyMgb3BlbiBieSBjb25maWd1cmUuICBIZXJlIHdlIGV4ZWMgdGhlIEZEIHRvIC9kZXYvbnVsbCwgZWZmZWN0aXZlbHkgY2xvc2luZworIyBjb25maWcubG9nLCBzbyBpdCBjYW4gYmUgcHJvcGVybHkgKHJlKW9wZW5lZCBhbmQgYXBwZW5kZWQgdG8gYnkgY29uZmlnLmx0LgoraWYgdGVzdCAiJG5vX2NyZWF0ZSIgIT0geWVzOyB0aGVuCisgIGx0X2NsX3N1Y2Nlc3M9OgorICB0ZXN0ICIkc2lsZW50IiA9IHllcyAmJgorICAgIGx0X2NvbmZpZ19sdF9hcmdzPSIkbHRfY29uZmlnX2x0X2FyZ3MgLS1xdWlldCIKKyAgZXhlYyBBU19NRVNTQUdFX0xPR19GRD4vZGV2L251bGwKKyAgJFNIRUxMICIkQ09ORklHX0xUIiAkbHRfY29uZmlnX2x0X2FyZ3MgfHwgbHRfY2xfc3VjY2Vzcz1mYWxzZQorICBleGVjIEFTX01FU1NBR0VfTE9HX0ZEPj5jb25maWcubG9nCisgICRsdF9jbF9zdWNjZXNzIHx8IEFTX0VYSVQoMSkKK2ZpCitdKSMgTFRfT1VUUFVUCisKKworIyBfTFRfQ09ORklHKFRBRykKKyMgLS0tLS0tLS0tLS0tLS0tCisjIElmIFRBRyBpcyB0aGUgYnVpbHQtaW4gdGFnLCBjcmVhdGUgYW4gaW5pdGlhbCBsaWJ0b29sIHNjcmlwdCB3aXRoIGEKKyMgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gdGhlIHVudGFnZ2VkIGNvbmZpZyB2YXJzLiAgT3RoZXJ3aXNlIGFkZCBjb2RlCisjIHRvIGNvbmZpZy5zdGF0dXMgZm9yIGFwcGVuZGluZyB0aGUgY29uZmlndXJhdGlvbiBuYW1lZCBieSBUQUcgZnJvbSB0aGUKKyMgbWF0Y2hpbmcgdGFnZ2VkIGNvbmZpZyB2YXJzLgorbTRfZGVmdW4oW19MVF9DT05GSUddLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTKFsKKyAgbTRfZGVmaW5lKFtfTFRfVEFHXSwgbTRfaWYoWyQxXSwgW10sIFtDXSwgWyQxXSkpZG5sCisgIG00X2lmKF9MVF9UQUcsIFtDXSwgWworICAgICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKyAgICAjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KKyAgICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKyAgICBmaQorCisgICAgY2ZnZmlsZT0iJHtvZmlsZX1UIgorICAgIHRyYXAgIiRSTSBcIiRjZmdmaWxlXCI7IGV4aXQgMSIgMSAyIDE1CisgICAgJFJNICIkY2ZnZmlsZSIKKworICAgIGNhdCA8PF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyEgJFNIRUxMCisKKyMgYCRFQ0hPICIkb2ZpbGUiIHwgc2VkICdzJV4uKi8lJSdgIC0gUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRhc19tZSAoJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgorIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisjCitfTFRfQ09QWUlORworX0xUX0xJQlRPT0xfVEFHUworCisjICMjIyBCRUdJTiBMSUJUT09MIENPTkZJRworX0xUX0xJQlRPT0xfQ09ORklHX1ZBUlMKK19MVF9MSUJUT09MX1RBR19WQVJTCisjICMjIyBFTkQgTElCVE9PTCBDT05GSUcKKworX0xUX0VPRgorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgY2F0IDw8XF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKyMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KK2lmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgorICBDT0xMRUNUX05BTUVTPQorICBleHBvcnQgQ09MTEVDVF9OQU1FUworZmkKK19MVF9FT0YKKyAgICA7OworICBlc2FjCisKKyAgX0xUX1BST0dfTFRNQUlOCisKKyAgIyBXZSB1c2Ugc2VkIGluc3RlYWQgb2YgY2F0IGJlY2F1c2UgYmFzaCBvbiBESkdQUCBnZXRzIGNvbmZ1c2VkIGlmCisgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KKyAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKyAgc2VkICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlL3EnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorCisgIF9MVF9QUk9HX1hTSV9TSEVMTEZOUworCisgIHNlZCAtbiAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS8sJHAnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorCisgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICBjaG1vZCAreCAiJG9maWxlIgorXSwKK1tjYXQgPDxfTFRfRU9GID4+ICIkb2ZpbGUiCisKK2RubCBVbmZvcnR1bmF0ZWx5IHdlIGhhdmUgdG8gdXNlICQxIGhlcmUsIHNpbmNlIF9MVF9UQUcgaXMgbm90IGV4cGFuZGVkCitkbmwgaW4gYSBjb21tZW50IChpZSBhZnRlciBhICMpLgorIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkMQorX0xUX0xJQlRPT0xfVEFHX1ZBUlMoX0xUX1RBRykKKyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICQxCitfTFRfRU9GCitdKWRubCAvbTRfaWYKK10sCitbbTRfaWYoWyQxXSwgW10sIFsKKyAgICBQQUNLQUdFPSckUEFDS0FHRScKKyAgICBWRVJTSU9OPSckVkVSU0lPTicKKyAgICBUSU1FU1RBTVA9JyRUSU1FU1RBTVAnCisgICAgUk09JyRSTScKKyAgICBvZmlsZT0nJG9maWxlJ10sIFtdKQorXSlkbmwgL19MVF9DT05GSUdfU0FWRV9DT01NQU5EUworXSkjIF9MVF9DT05GSUcKKworCisjIExUX1NVUFBPUlRFRF9UQUcoVEFHKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJhY2UgdGhpcyBtYWNybyB0byBkaXNjb3ZlciB3aGF0IHRhZ3MgYXJlIHN1cHBvcnRlZCBieSB0aGUgbGlidG9vbAorIyAtLXRhZyBvcHRpb24sIHVzaW5nOgorIyAgICBhdXRvY29uZiAtLXRyYWNlICdMVF9TVVBQT1JURURfVEFHOiQxJworQUNfREVGVU4oW0xUX1NVUFBPUlRFRF9UQUddLCBbXSkKKworCisjIEMgc3VwcG9ydCBpcyBidWlsdC1pbiBmb3Igbm93CittNF9kZWZpbmUoW19MVF9MQU5HX0NfZW5hYmxlZF0sIFtdKQorbTRfZGVmaW5lKFtfTFRfVEFHU10sIFtdKQorCisKKyMgTFRfTEFORyhMQU5HKQorIyAtLS0tLS0tLS0tLS0tCisjIEVuYWJsZSBsaWJ0b29sIHN1cHBvcnQgZm9yIHRoZSBnaXZlbiBsYW5ndWFnZSBpZiBub3QgYWxyZWFkeSBlbmFibGVkLgorQUNfREVGVU4oW0xUX0xBTkddLAorW0FDX0JFRk9SRShbJDBdLCBbTFRfT1VUUFVUXSlkbmwKK200X2Nhc2UoWyQxXSwKKyAgW0NdLAkJCVtfTFRfTEFORyhDKV0sCisgIFtDKytdLAkJW19MVF9MQU5HKENYWCldLAorICBbSmF2YV0sCQlbX0xUX0xBTkcoR0NKKV0sCisgIFtGb3J0cmFuIDc3XSwJCVtfTFRfTEFORyhGNzcpXSwKKyAgW0ZvcnRyYW5dLAkJW19MVF9MQU5HKEZDKV0sCisgIFtXaW5kb3dzIFJlc291cmNlXSwJW19MVF9MQU5HKFJDKV0sCisgIFttNF9pZmRlZihbX0xUX0xBTkdfXSQxW19DT05GSUddLAorICAgIFtfTFRfTEFORygkMSldLAorICAgIFttNF9mYXRhbChbJDA6IHVuc3VwcG9ydGVkIGxhbmd1YWdlOiAiJDEiXSldKV0pZG5sCitdKSMgTFRfTEFORworCisKKyMgX0xUX0xBTkcoTEFOR05BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9MQU5HXSwKK1ttNF9pZmRlZihbX0xUX0xBTkdfXSQxW19lbmFibGVkXSwgW10sCisgIFtMVF9TVVBQT1JURURfVEFHKFskMV0pZG5sCisgIG00X2FwcGVuZChbX0xUX1RBR1NdLCBbJDEgXSlkbmwKKyAgbTRfZGVmaW5lKFtfTFRfTEFOR19dJDFbX2VuYWJsZWRdLCBbXSlkbmwKKyAgX0xUX0xBTkdfJDFfQ09ORklHKCQxKV0pZG5sCitdKSMgX0xUX0xBTkcKKworCisjIF9MVF9MQU5HX0RFRkFVTFRfQ09ORklHCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0xBTkdfREVGQVVMVF9DT05GSUddLAorW0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NYWF0sCisgIFtMVF9MQU5HKENYWCldLAorICBbbTRfZGVmaW5lKFtBQ19QUk9HX0NYWF0sIGRlZm4oW0FDX1BST0dfQ1hYXSlbTFRfTEFORyhDWFgpXSldKQorCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19GNzddLAorICBbTFRfTEFORyhGNzcpXSwKKyAgW200X2RlZmluZShbQUNfUFJPR19GNzddLCBkZWZuKFtBQ19QUk9HX0Y3N10pW0xUX0xBTkcoRjc3KV0pXSkKKworQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfRkNdLAorICBbTFRfTEFORyhGQyldLAorICBbbTRfZGVmaW5lKFtBQ19QUk9HX0ZDXSwgZGVmbihbQUNfUFJPR19GQ10pW0xUX0xBTkcoRkMpXSldKQorCitkbmwgVGhlIGNhbGwgdG8gW0FdW01fUFJPR19HQ0pdIGlzIHF1b3RlZCBsaWtlIHRoYXQgdG8gc3RvcCBhY2xvY2FsCitkbmwgcHVsbGluZyB0aGluZ3MgaW4gbmVlZGxlc3NseS4KK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0dDSl0sCisgIFtMVF9MQU5HKEdDSildLAorICBbQUNfUFJPVklERV9JRkVMU0UoW0FdW01fUFJPR19HQ0pdLAorICAgIFtMVF9MQU5HKEdDSildLAorICAgIFtBQ19QUk9WSURFX0lGRUxTRShbTFRfUFJPR19HQ0pdLAorICAgICAgW0xUX0xBTkcoR0NKKV0sCisgICAgICBbbTRfaWZkZWYoW0FDX1BST0dfR0NKXSwKKwlbbTRfZGVmaW5lKFtBQ19QUk9HX0dDSl0sIGRlZm4oW0FDX1BST0dfR0NKXSlbTFRfTEFORyhHQ0opXSldKQorICAgICAgIG00X2lmZGVmKFtBXVtNX1BST0dfR0NKXSwKKwlbbTRfZGVmaW5lKFtBXVtNX1BST0dfR0NKXSwgZGVmbihbQV1bTV9QUk9HX0dDSl0pW0xUX0xBTkcoR0NKKV0pXSkKKyAgICAgICBtNF9pZmRlZihbTFRfUFJPR19HQ0pdLAorCVttNF9kZWZpbmUoW0xUX1BST0dfR0NKXSwgZGVmbihbTFRfUFJPR19HQ0pdKVtMVF9MQU5HKEdDSildKV0pXSldKV0pCisKK0FDX1BST1ZJREVfSUZFTFNFKFtMVF9QUk9HX1JDXSwKKyAgW0xUX0xBTkcoUkMpXSwKKyAgW200X2RlZmluZShbTFRfUFJPR19SQ10sIGRlZm4oW0xUX1BST0dfUkNdKVtMVF9MQU5HKFJDKV0pXSkKK10pIyBfTFRfTEFOR19ERUZBVUxUX0NPTkZJRworCisjIE9ic29sZXRlIG1hY3JvczoKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0NYWF0sIFtMVF9MQU5HKEMrKyldKQorQVVfREVGVU4oW0FDX0xJQlRPT0xfRjc3XSwgW0xUX0xBTkcoRm9ydHJhbiA3NyldKQorQVVfREVGVU4oW0FDX0xJQlRPT0xfRkNdLCBbTFRfTEFORyhGb3J0cmFuKV0pCitBVV9ERUZVTihbQUNfTElCVE9PTF9HQ0pdLCBbTFRfTEFORyhKYXZhKV0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfQ1hYXSwgW10pCitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRjc3XSwgW10pCitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRkNdLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9HQ0pdLCBbXSkKKworCisjIF9MVF9UQUdfQ09NUElMRVIKKyMgLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9UQUdfQ09NUElMRVJdLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorCitfTFRfREVDTChbTFRDQ10sIFtDQ10sIFsxXSwgW0EgQyBjb21waWxlcl0pZG5sCitfTFRfREVDTChbTFRDRkxBR1NdLCBbQ0ZMQUdTXSwgWzFdLCBbTFRDQyBjb21waWxlciBmbGFnc10pZG5sCitfTFRfVEFHREVDTChbQ0NdLCBbY29tcGlsZXJdLCBbMV0sIFtBIGxhbmd1YWdlIHNwZWNpZmljIGNvbXBpbGVyXSlkbmwKK19MVF9UQUdERUNMKFt3aXRoX2djY10sIFtHQ0NdLCBbMF0sIFtJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBjb21waWxlcj9dKWRubAorCisjIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgorTFRDQz0ke0xUQ0MtIiRDQyJ9CisKKyMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KK0xUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorY29tcGlsZXI9JENDCitdKSMgX0xUX1RBR19DT01QSUxFUgorCisKKyMgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBmb3IgY29tcGlsZXIgYm9pbGVycGxhdGUgb3V0cHV0IG9yIHdhcm5pbmdzIHdpdGgKKyMgdGhlIHNpbXBsZSBjb21waWxlciB0ZXN0IGNvZGUuCittNF9kZWZ1bihbX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskUk0gY29uZnRlc3QqCitdKSMgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisKKworIyBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGxpbmtlciBib2lsZXJwbGF0ZSBvdXRwdXQgb3Igd2FybmluZ3Mgd2l0aAorIyB0aGUgc2ltcGxlIGxpbmsgdGVzdCBjb2RlLgorbTRfZGVmdW4oW19MVF9MSU5LRVJfQk9JTEVSUExBVEVdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskUk0gLXIgY29uZnRlc3QqCitdKSMgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisjIF9MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuX29uY2UoW19MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTXSxbCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICByaGFwc29keSogfCBkYXJ3aW4qKQorICAgIEFDX0NIRUNLX1RPT0woW0RTWU1VVElMXSwgW2RzeW11dGlsXSwgWzpdKQorICAgIEFDX0NIRUNLX1RPT0woW05NRURJVF0sIFtubWVkaXRdLCBbOl0pCisgICAgQUNfQ0hFQ0tfVE9PTChbTElQT10sIFtsaXBvXSwgWzpdKQorICAgIEFDX0NIRUNLX1RPT0woW09UT09MXSwgW290b29sXSwgWzpdKQorICAgIEFDX0NIRUNLX1RPT0woW09UT09MNjRdLCBbb3Rvb2w2NF0sIFs6XSkKKyAgICBfTFRfREVDTChbXSwgW0RTWU1VVElMXSwgWzFdLAorICAgICAgW1Rvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFhdKQorICAgIF9MVF9ERUNMKFtdLCBbTk1FRElUXSwgWzFdLAorICAgICAgW1Rvb2wgdG8gY2hhbmdlIGdsb2JhbCB0byBsb2NhbCBzeW1ib2xzIG9uIE1hYyBPUyBYXSkKKyAgICBfTFRfREVDTChbXSwgW0xJUE9dLCBbMV0sCisgICAgICBbVG9vbCB0byBtYW5pcHVsYXRlIGZhdCBvYmplY3RzIGFuZCBhcmNoaXZlcyBvbiBNYWMgT1MgWF0pCisgICAgX0xUX0RFQ0woW10sIFtPVE9PTF0sIFsxXSwKKyAgICAgIFtsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWF0pCisgICAgX0xUX0RFQ0woW10sIFtPVE9PTDY0XSwgWzFdLAorICAgICAgW2xkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgNjQgYml0IE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWCAxMC40XSkKKworICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWddLFtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kXSwKKyAgICAgIFtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPW5vCisgICAgICBpZiB0ZXN0IC16ICIke0xUX01VTFRJX01PRFVMRX0iOyB0aGVuCisJIyBCeSBkZWZhdWx0IHdlIHdpbGwgYWRkIHRoZSAtc2luZ2xlX21vZHVsZSBmbGFnLiBZb3UgY2FuIG92ZXJyaWRlCisJIyBieSBlaXRoZXIgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTFRfTVVMVElfTU9EVUxFCisJIyBub24tZW1wdHkgYXQgY29uZmlndXJlIHRpbWUsIG9yIGJ5IGFkZGluZyAtbXVsdGlfbW9kdWxlIHRvIHRoZQorCSMgbGluayBmbGFncy4KKwlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCisJZWNobyAiaW50IGZvbyh2b2lkKXtyZXR1cm4gMTt9IiA+IGNvbmZ0ZXN0LmMKKwllY2hvICIkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAorLWR5bmFtaWNsaWIgLVdsLC1zaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKwkkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAorCSAgLWR5bmFtaWNsaWIgLVdsLC1zaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmMgMj5jb25mdGVzdC5lcnIKKyAgICAgICAgX2x0X3Jlc3VsdD0kPworCWlmIHRlc3QgLWYgbGliY29uZnRlc3QuZHlsaWIgJiYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyciAmJiB0ZXN0ICRfbHRfcmVzdWx0ID0gMDsgdGhlbgorCSAgbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD15ZXMKKwllbHNlCisJICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKwlmaQorCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKKwlybSAtZiBjb25mdGVzdC4qCisgICAgICBmaV0pCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnXSwKKyAgICAgIFtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3RdLAorICAgICAgW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubworICAgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgICAgICBlY2hvICJfbWFpbiIgPiBjb25mdGVzdC5zeW0KKyAgICAgIExERkxBR1M9IiRMREZMQUdTIC1XbCwtZXhwb3J0ZWRfc3ltYm9sc19saXN0LGNvbmZ0ZXN0LnN5bSIKKyAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sW10pXSwKKwlbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PXllc10sCisJW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ub10pCisJTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKyAgICBdKQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICByaGFwc29keSogfCBkYXJ3aW4xLltbMDEyXV0pCisgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisgICAgZGFyd2luMS4qKQorICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbiopICMgZGFyd2luIDUueCBvbgorICAgICAgIyBpZiBydW5uaW5nIG9uIDEwLjUgb3IgbGF0ZXIsIHRoZSBkZXBsb3ltZW50IHRhcmdldCBkZWZhdWx0cworICAgICAgIyB0byB0aGUgT1MgdmVyc2lvbiwgaWYgb24geDg2LCBhbmQgMTAuNCwgdGhlIGRlcGxveW1lbnQKKyAgICAgICMgdGFyZ2V0IGRlZmF1bHRzIHRvIDEwLjQuIERvbid0IHlvdSBsb3ZlIGl0PworICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSwkaG9zdCBpbgorCTEwLjAsKjg2Ki1kYXJ3aW44KnwxMC4wLCotZGFyd2luW1s5MV1dKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKwkxMC5bWzAxMl1dKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKwkxMC4qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworICAgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPSAieWVzIjsgdGhlbgorICAgICAgX2x0X2Rhcl9zaW5nbGVfbW9kPSckc2luZ2xlX21vZHVsZScKKyAgICBmaQorICAgIGlmIHRlc3QgIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID0gInllcyI7IHRoZW4KKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9JyAke3dsfS1leHBvcnRlZF9zeW1ib2xzX2xpc3QsJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bScKKyAgICBlbHNlCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPSd+JE5NRURJVCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICBmaQorICAgIGlmIHRlc3QgIiREU1lNVVRJTCIgIT0gIjoiOyB0aGVuCisgICAgICBfbHRfZHN5bXV0aWw9J34kRFNZTVVUSUwgJGxpYiB8fCA6JworICAgIGVsc2UKKyAgICAgIF9sdF9kc3ltdXRpbD0KKyAgICBmaQorICAgIDs7CisgIGVzYWMKK10pCisKKworIyBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVja3MgZm9yIGxpbmtlciBhbmQgY29tcGlsZXIgZmVhdHVyZXMgb24gZGFyd2luCittNF9kZWZ1bihbX0xUX0RBUldJTl9MSU5LRVJfRkVBVFVSRVNdLAorWworICBtNF9yZXF1aXJlKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10pCisgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9eWVzCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCisgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJworICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSIkX2x0X2Rhcl9hbGxvd191bmRlZmluZWQiCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgIGlmb3J0KikgX2x0X2Rhcl9jYW5fc2hhcmVkPXllcyA7OworICAgICAqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9JEdDQyA7OworICBlc2FjCisgIGlmIHRlc3QgIiRfbHRfZGFyX2Nhbl9zaGFyZWQiID0gInllcyI7IHRoZW4KKyAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1lY2hvCisgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCR7X2x0X2RzeW11dGlsfSIKKyAgICBfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2RzeW11dGlsfSIKKyAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAke19sdF9kYXJfc2luZ2xlX21vZH0ke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorICAgIF9MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAtZSAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBtNF9pZihbJDFdLCBbQ1hYXSwKK1sgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgIT0gInllcyI7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9IlwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJHtsaWJ9LW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCR7bGlifS1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcke19sdF9kc3ltdXRpbH0iCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCR7bGlifS1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwke2xpYn0tbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBmaQorXSxbXSkKKyAgZWxzZQorICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgIGZpCitdKQorCisjIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExpbmtzIGEgbWluaW1hbCBwcm9ncmFtIGFuZCBjaGVja3MgdGhlIGV4ZWN1dGFibGUKKyMgZm9yIHRoZSBzeXN0ZW0gZGVmYXVsdCBoYXJkY29kZWQgbGlicmFyeSBwYXRoLiBJbiBtb3N0IGNhc2VzLAorIyB0aGlzIGlzIC91c3IvbGliOi9saWIsIGJ1dCB3aGVuIHRoZSBNUEkgY29tcGlsZXJzIGFyZSB1c2VkCisjIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29tbXVuaWNhdGlvbiBhbmQgTVBJIGxpYnMgYXJlIGluY2x1ZGVkIHRvby4KKyMgSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgdXNlIHRoZSBkZWZhdWx0IGxpYnJhcnkgcGF0aCBhY2NvcmRpbmcKKyMgdG8gdGhlIGFpeCBsZCBtYW51YWwuCittNF9kZWZ1bihbX0xUX1NZU19NT0RVTEVfUEFUSF9BSVhdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCitBQ19MSU5LX0lGRUxTRShBQ19MQU5HX1BST0dSQU0sWworbHRfYWl4X2xpYnBhdGhfc2VkPScKKyAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJL14wLyB7CisJICAgIHMvXjAgICpcKC4qXCkkL1wxLworCSAgICBwCisJfQorICAgIH0nCithaXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KK2lmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKyAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCitmaV0sW10pCitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKK10pIyBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorCisKKyMgX0xUX1NIRUxMX0lOSVQoQVJHKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9TSEVMTF9JTklUXSwKK1tpZmRlZihbQUNfRElWRVJTSU9OX05PVElDRV0sCisJICAgICBbQUNfRElWRVJUX1BVU0goQUNfRElWRVJTSU9OX05PVElDRSldLAorCSBbQUNfRElWRVJUX1BVU0goTk9USUNFKV0pCiskMQorQUNfRElWRVJUX1BPUAorXSkjIF9MVF9TSEVMTF9JTklUCisKKworIyBfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBZGQgc29tZSBjb2RlIHRvIHRoZSBzdGFydCBvZiB0aGUgZ2VuZXJhdGVkIGNvbmZpZ3VyZSBzY3JpcHQgd2hpY2gKKyMgd2lsbCBmaW5kIGFuIGVjaG8gY29tbWFuZCB3aGljaCBkb2Vzbid0IGludGVycHJldCBiYWNrc2xhc2hlcy4KK200X2RlZnVuKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0sCitbX0xUX1NIRUxMX0lOSVQoWworIyBDaGVjayB0aGF0IHdlIGFyZSBydW5uaW5nIHVuZGVyIHRoZSBjb3JyZWN0IHNoZWxsLgorU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KKworY2FzZSBYJGx0X0VDSE8gaW4KK1gqLS1mYWxsYmFjay1lY2hvKQorICAjIFJlbW92ZSBvbmUgbGV2ZWwgb2YgcXVvdGF0aW9uICh3aGljaCB3YXMgcmVxdWlyZWQgZm9yIE1ha2UpLgorICBFQ0hPPWBlY2hvICIkbHRfRUNITyIgfCBzZWQgJ3MsXFxcXFxbJF1cXFskXTAsJ1skXTAnLCdgCisgIDs7Citlc2FjCisKK0VDSE89JHtsdF9FQ0hPLWVjaG99CitpZiB0ZXN0ICJYWyRdMSIgPSBYLS1uby1yZWV4ZWM7IHRoZW4KKyAgIyBEaXNjYXJkIHRoZSAtLW5vLXJlZXhlYyBmbGFnLCBhbmQgY29udGludWUuCisgIHNoaWZ0CitlbGlmIHRlc3QgIlhbJF0xIiA9IFgtLWZhbGxiYWNrLWVjaG87IHRoZW4KKyAgIyBBdm9pZCBpbmxpbmUgZG9jdW1lbnQgaGVyZSwgaXQgbWF5IGJlIGxlZnQgb3ZlcgorICA6CitlbGlmIHRlc3QgIlhgeyAkRUNITyAnXHQnOyB9IDI+L2Rldi9udWxsYCIgPSAnWFx0JyA7IHRoZW4KKyAgIyBZaXBwZWUsICRFQ0hPIHdvcmtzIQorICA6CitlbHNlCisgICMgUmVzdGFydCB1bmRlciB0aGUgY29ycmVjdCBzaGVsbC4KKyAgZXhlYyAkU0hFTEwgIlskXTAiIC0tbm8tcmVleGVjICR7MSsiWyRdQCJ9CitmaQorCitpZiB0ZXN0ICJYWyRdMSIgPSBYLS1mYWxsYmFjay1lY2hvOyB0aGVuCisgICMgdXNlZCBhcyBmYWxsYmFjayBlY2hvCisgIHNoaWZ0CisgIGNhdCA8PF9MVF9FT0YKK1skXSoKK19MVF9FT0YKKyAgZXhpdCAwCitmaQorCisjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorIyBpZiBDRFBBVEggaXMgc2V0LgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCitpZiB0ZXN0IC16ICIkbHRfRUNITyI7IHRoZW4KKyAgaWYgdGVzdCAiWCR7ZWNob190ZXN0X3N0cmluZytzZXR9IiAhPSBYc2V0OyB0aGVuCisgICAgIyBmaW5kIGEgc3RyaW5nIGFzIGxhcmdlIGFzIHBvc3NpYmxlLCBhcyBsb25nIGFzIHRoZSBzaGVsbCBjYW4gY29wZSB3aXRoIGl0CisgICAgZm9yIGNtZCBpbiAnc2VkIDUwcSAiWyRdMCInICdzZWQgMjBxICJbJF0wIicgJ3NlZCAxMHEgIlskXTAiJyAnc2VkIDJxICJbJF0wIicgJ2VjaG8gdGVzdCc7IGRvCisgICAgICAjIGV4cGVjdGVkIHNpemVzOiBsZXNzIHRoYW4gMktiLCAxS2IsIDUxMiBieXRlcywgMTYgYnl0ZXMsIC4uLgorICAgICAgaWYgeyBlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRjbWRgOyB9IDI+L2Rldi9udWxsICYmCisJIHsgdGVzdCAiWCRlY2hvX3Rlc3Rfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB9IDI+L2Rldi9udWxsCisgICAgICB0aGVuCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGRvbmUKKyAgZmkKKworICBpZiB0ZXN0ICJYYHsgJEVDSE8gJ1x0JzsgfSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKKyAgICAgZWNob190ZXN0aW5nX3N0cmluZz1geyAkRUNITyAiJGVjaG9fdGVzdF9zdHJpbmciOyB9IDI+L2Rldi9udWxsYCAmJgorICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKyAgICA6CisgIGVsc2UKKyAgICAjIFRoZSBTb2xhcmlzLCBBSVgsIGFuZCBEaWdpdGFsIFVuaXggZGVmYXVsdCBlY2hvIHByb2dyYW1zIHVucXVvdGUKKyAgICAjIGJhY2tzbGFzaGVzLiAgVGhpcyBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIHF1b3RlIGJhY2tzbGFzaGVzIHVzaW5nCisgICAgIyAgIGVjaG8gIiRzb21ldGhpbmciIHwgc2VkICdzL1xcL1xcXFwvZycKKyAgICAjCisgICAgIyBTbywgZmlyc3Qgd2UgbG9vayBmb3IgYSB3b3JraW5nIGVjaG8gaW4gdGhlIHVzZXIncyBQQVRILgorCisgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgICAgZm9yIGRpciBpbiAkUEFUSCAvdXNyL3VjYjsgZG8KKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgaWYgKHRlc3QgLWYgJGRpci9lY2hvIHx8IHRlc3QgLWYgJGRpci9lY2hvJGFjX2V4ZWV4dCkgJiYKKyAgICAgICAgIHRlc3QgIlhgKCRkaXIvZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKKyAgICAgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkZGlyL2VjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCisgICAgICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKyAgICAgICAgRUNITz0iJGRpci9lY2hvIgorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBkb25lCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisKKyAgICBpZiB0ZXN0ICJYJEVDSE8iID0gWGVjaG87IHRoZW4KKyAgICAgICMgV2UgZGlkbid0IGZpbmQgYSBiZXR0ZXIgZWNobywgc28gbG9vayBmb3IgYWx0ZXJuYXRpdmVzLgorICAgICAgaWYgdGVzdCAiWGB7IHByaW50IC1yICdcdCc7IH0gMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCisgICAgICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWB7IHByaW50IC1yICIkZWNob190ZXN0X3N0cmluZyI7IH0gMj4vZGV2L251bGxgICYmCisgICAgICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKyAgICAgICAgIyBUaGlzIHNoZWxsIGhhcyBhIGJ1aWx0aW4gcHJpbnQgLXIgdGhhdCBkb2VzIHRoZSB0cmljay4KKyAgICAgICAgRUNITz0ncHJpbnQgLXInCisgICAgICBlbGlmIHsgdGVzdCAtZiAvYmluL2tzaCB8fCB0ZXN0IC1mIC9iaW4va3NoJGFjX2V4ZWV4dDsgfSAmJgorCSAgIHRlc3QgIlgkQ09ORklHX1NIRUxMIiAhPSBYL2Jpbi9rc2g7IHRoZW4KKyAgICAgICAgIyBJZiB3ZSBoYXZlIGtzaCwgdHJ5IHJ1bm5pbmcgY29uZmlndXJlIGFnYWluIHdpdGggaXQuCisgICAgICAgIE9SSUdJTkFMX0NPTkZJR19TSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorICAgICAgICBleHBvcnQgT1JJR0lOQUxfQ09ORklHX1NIRUxMCisgICAgICAgIENPTkZJR19TSEVMTD0vYmluL2tzaAorICAgICAgICBleHBvcnQgQ09ORklHX1NIRUxMCisgICAgICAgIGV4ZWMgJENPTkZJR19TSEVMTCAiWyRdMCIgLS1uby1yZWV4ZWMgJHsxKyJbJF1AIn0KKyAgICAgIGVsc2UKKyAgICAgICAgIyBUcnkgdXNpbmcgcHJpbnRmLgorICAgICAgICBFQ0hPPSdwcmludGYgJXNcbicKKyAgICAgICAgaWYgdGVzdCAiWGB7ICRFQ0hPICdcdCc7IH0gMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCisJICAgZWNob190ZXN0aW5nX3N0cmluZz1geyAkRUNITyAiJGVjaG9fdGVzdF9zdHJpbmciOyB9IDI+L2Rldi9udWxsYCAmJgorCSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorCSAgIyBDb29sLCBwcmludGYgd29ya3MKKwkgIDoKKyAgICAgICAgZWxpZiBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJE9SSUdJTkFMX0NPTkZJR19TSEVMTCAiWyRdMCIgLS1mYWxsYmFjay1lY2hvICdcdCcpIDI+L2Rldi9udWxsYCAmJgorCSAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICdYXHQnICYmCisJICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJE9SSUdJTkFMX0NPTkZJR19TSEVMTCAiWyRdMCIgLS1mYWxsYmFjay1lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgorCSAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisJICBDT05GSUdfU0hFTEw9JE9SSUdJTkFMX0NPTkZJR19TSEVMTAorCSAgZXhwb3J0IENPTkZJR19TSEVMTAorCSAgU0hFTEw9IiRDT05GSUdfU0hFTEwiCisJICBleHBvcnQgU0hFTEwKKwkgIEVDSE89IiRDT05GSUdfU0hFTEwgWyRdMCAtLWZhbGxiYWNrLWVjaG8iCisgICAgICAgIGVsaWYgZWNob190ZXN0aW5nX3N0cmluZz1gKCRDT05GSUdfU0hFTEwgIlskXTAiIC0tZmFsbGJhY2stZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAgJiYKKwkgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAnWFx0JyAmJgorCSAgICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRDT05GSUdfU0hFTEwgIlskXTAiIC0tZmFsbGJhY2stZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKKwkgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorCSAgRUNITz0iJENPTkZJR19TSEVMTCBbJF0wIC0tZmFsbGJhY2stZWNobyIKKyAgICAgICAgZWxzZQorCSAgIyBtYXliZSB3aXRoIGEgc21hbGxlciBzdHJpbmcuLi4KKwkgIHByZXY9OgorCisJICBmb3IgY21kIGluICdlY2hvIHRlc3QnICdzZWQgMnEgIlskXTAiJyAnc2VkIDEwcSAiWyRdMCInICdzZWQgMjBxICJbJF0wIicgJ3NlZCA1MHEgIlskXTAiJzsgZG8KKwkgICAgaWYgeyB0ZXN0ICJYJGVjaG9fdGVzdF9zdHJpbmciID0gIlhgZXZhbCAkY21kYCI7IH0gMj4vZGV2L251bGwKKwkgICAgdGhlbgorCSAgICAgIGJyZWFrCisJICAgIGZpCisJICAgIHByZXY9IiRjbWQiCisJICBkb25lCisKKwkgIGlmIHRlc3QgIiRwcmV2IiAhPSAnc2VkIDUwcSAiWyRdMCInOyB0aGVuCisJICAgIGVjaG9fdGVzdF9zdHJpbmc9YGV2YWwgJHByZXZgCisJICAgIGV4cG9ydCBlY2hvX3Rlc3Rfc3RyaW5nCisJICAgIGV4ZWMgJHtPUklHSU5BTF9DT05GSUdfU0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19ICJbJF0wIiAkezErIlskXUAifQorCSAgZWxzZQorCSAgICAjIE9vcHMuICBXZSBsb3N0IGNvbXBsZXRlbHksIHNvIGp1c3Qgc3RpY2sgd2l0aCBlY2hvLgorCSAgICBFQ0hPPWVjaG8KKwkgIGZpCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGZpCisgIGZpCitmaQorCisjIENvcHkgZWNobyBhbmQgcXVvdGUgdGhlIGNvcHkgc3VpdGFibHkgZm9yIHBhc3NpbmcgdG8gbGlidG9vbCBmcm9tCisjIHRoZSBNYWtlZmlsZSwgaW5zdGVhZCBvZiBxdW90aW5nIHRoZSBvcmlnaW5hbCwgd2hpY2ggaXMgdXNlZCBsYXRlci4KK2x0X0VDSE89JEVDSE8KK2lmIHRlc3QgIlgkbHRfRUNITyIgPSAiWCRDT05GSUdfU0hFTEwgWyRdMCAtLWZhbGxiYWNrLWVjaG8iOyB0aGVuCisgICBsdF9FQ0hPPSIkQ09ORklHX1NIRUxMIFxcXCRcWyRdMCAtLWZhbGxiYWNrLWVjaG8iCitmaQorCitBQ19TVUJTVChsdF9FQ0hPKQorXSkKK19MVF9ERUNMKFtdLCBbU0hFTExdLCBbMV0sIFtTaGVsbCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzXSkKK19MVF9ERUNMKFtdLCBbRUNIT10sIFsxXSwKKyAgICBbQW4gZWNobyBwcm9ncmFtIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzXSkKK10pIyBfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSAorCisKKyMgX0xUX0VOQUJMRV9MT0NLCisjIC0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9FTkFCTEVfTE9DS10sCitbQUNfQVJHX0VOQUJMRShbbGlidG9vbC1sb2NrXSwKKyAgW0FTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbGlidG9vbC1sb2NrXSwKKyAgICBbYXZvaWQgbG9ja2luZyAobWlnaHQgYnJlYWsgcGFyYWxsZWwgYnVpbGRzKV0pXSkKK3Rlc3QgIngkZW5hYmxlX2xpYnRvb2xfbG9jayIgIT0geG5vICYmIGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCisKKyMgU29tZSBmbGFncyBuZWVkIHRvIGJlIHByb3BhZ2F0ZWQgdG8gdGhlIGNvbXBpbGVyIG9yIGxpbmtlciBmb3IgZ29vZAorIyBsaWJ0b29sIHN1cHBvcnQuCitjYXNlICRob3N0IGluCitpYTY0LSotaHB1eCopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqRUxGLTMyKikKKwlIUFVYX0lBNjRfTU9ERT0iMzIiCisJOzsKKyAgICAgICpFTEYtNjQqKQorCUhQVVhfSUE2NF9NT0RFPSI2NCIKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworKi0qLWlyaXg2KikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdbI11saW5lIF9fb2xpbmVfXyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorICAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorCSozMi1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJic21pcCIKKwkgIDs7CisJKk4zMiopCisJICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJtaXBuMzIiCisJICA7OworCSo2NC1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmNjRibWlwIgorCTs7CisgICAgICBlc2FjCisgICAgZWxzZQorICAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorCSozMi1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC0zMiIKKwkgIDs7CisJKk4zMiopCisJICBMRD0iJHtMRC1sZH0gLW4zMiIKKwkgIDs7CisJKjY0LWJpdCopCisJICBMRD0iJHtMRC1sZH0gLTY0IgorCSAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKK3g4Nl82NC0qa2ZyZWVic2QqLWdudXx4ODZfNjQtKmxpbnV4KnxwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnwgXAorczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKnxzcGFyYyotKmxpbnV4KikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKyAgICAgICozMi1iaXQqKQorCWNhc2UgJGhvc3QgaW4KKwkgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2X2Zic2QiCisJICAgIDs7CisJICB4ODZfNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2IgorCSAgICA7OworCSAgcHBjNjQtKmxpbnV4Knxwb3dlcnBjNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMycHBjbGludXgiCisJICAgIDs7CisJICBzMzkweC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3MzOTAiCisJICAgIDs7CisJICBzcGFyYzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMl9zcGFyYyIKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgICo2NC1iaXQqKQorCWNhc2UgJGhvc3QgaW4KKwkgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjRfZmJzZCIKKwkgICAgOzsKKwkgIHg4Nl82NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKKwkgICAgOzsKKwkgIHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRwcGMiCisJICAgIDs7CisJICBzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfczM5MCIKKwkgICAgOzsKKwkgIHNwYXJjKi0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCisJICAgIDs7CisJZXNhYworCTs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKKyotKi1zY28zLjJ2NSopCisgICMgT24gU0NPIE9wZW5TZXJ2ZXIgNSwgd2UgbmVlZCAtYmVsZiB0byBnZXQgZnVsbC1mZWF0dXJlZCBiaW5hcmllcy4KKyAgU0FWRV9DRkxBR1M9IiRDRkxBR1MiCisgIENGTEFHUz0iJENGTEFHUyAtYmVsZiIKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGZdLCBsdF9jdl9jY19uZWVkc19iZWxmLAorICAgIFtBQ19MQU5HX1BVU0goQykKKyAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbW11dLFtbXV0pXSxbbHRfY3ZfY2NfbmVlZHNfYmVsZj15ZXNdLFtsdF9jdl9jY19uZWVkc19iZWxmPW5vXSkKKyAgICAgQUNfTEFOR19QT1BdKQorICBpZiB0ZXN0IHgiJGx0X2N2X2NjX25lZWRzX2JlbGYiICE9IHgieWVzIjsgdGhlbgorICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgorICAgIENGTEFHUz0iJFNBVkVfQ0ZMQUdTIgorICBmaQorICA7Oworc3BhcmMqLSpzb2xhcmlzKikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKyAgICAqNjQtYml0KikKKyAgICAgIGNhc2UgJGx0X2N2X3Byb2dfZ251X2xkIGluCisgICAgICB5ZXMqKSBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiIDs7CisgICAgICAqKQorCWlmICR7TEQtbGR9IC02NCAtciAtbyBjb25mdGVzdDIubyBjb25mdGVzdC5vID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgTEQ9IiR7TEQtbGR9IC02NCIKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworZXNhYworCituZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKK10pIyBfTFRfRU5BQkxFX0xPQ0sKKworCisjIF9MVF9DTURfT0xEX0FSQ0hJVkUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DTURfT0xEX0FSQ0hJVkVdLAorW0FDX0NIRUNLX1RPT0woQVIsIGFyLCBmYWxzZSkKK3Rlc3QgLXogIiRBUiIgJiYgQVI9YXIKK3Rlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CitfTFRfREVDTChbXSwgW0FSXSwgWzFdLCBbVGhlIGFyY2hpdmVyXSkKK19MVF9ERUNMKFtdLCBbQVJfRkxBR1NdLCBbMV0pCisKK0FDX0NIRUNLX1RPT0woU1RSSVAsIHN0cmlwLCA6KQordGVzdCAteiAiJFNUUklQIiAmJiBTVFJJUD06CitfTFRfREVDTChbXSwgW1NUUklQXSwgWzFdLCBbQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW1dKQorCitBQ19DSEVDS19UT09MKFJBTkxJQiwgcmFubGliLCA6KQordGVzdCAteiAiJFJBTkxJQiIgJiYgUkFOTElCPToKK19MVF9ERUNMKFtdLCBbUkFOTElCXSwgWzFdLAorICAgIFtDb21tYW5kcyB1c2VkIHRvIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmVdKQorCisjIERldGVybWluZSBjb21tYW5kcyB0byBjcmVhdGUgb2xkLXN0eWxlIHN0YXRpYyBhcmNoaXZlcy4KK29sZF9hcmNoaXZlX2NtZHM9JyRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJworb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0KKworaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBvcGVuYnNkKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIC10IFwkb2xkbGliIgorICAgIDs7CisgICopCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKKyAgICA7OworICBlc2FjCisgIG9sZF9hcmNoaXZlX2NtZHM9IiRvbGRfYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkb2xkbGliIgorZmkKK19MVF9ERUNMKFtdLCBbb2xkX3Bvc3RpbnN0YWxsX2NtZHNdLCBbMl0pCitfTFRfREVDTChbXSwgW29sZF9wb3N0dW5pbnN0YWxsX2NtZHNdLCBbMl0pCitfTFRfVEFHREVDTChbXSwgW29sZF9hcmNoaXZlX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmVdKQorXSkjIF9MVF9DTURfT0xEX0FSQ0hJVkUKKworCisjIF9MVF9DT01QSUxFUl9PUFRJT04oTUVTU0FHRSwgVkFSSUFCTEUtTkFNRSwgRkxBR1MsCisjCQlbT1VUUFVULUZJTEVdLCBbQUNUSU9OLVNVQ0NFU1NdLCBbQUNUSU9OLUZBSUxVUkVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGNvbXBpbGVyIG9wdGlvbiB3b3JrcworQUNfREVGVU4oW19MVF9DT01QSUxFUl9PUFRJT05dLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFskMV0sIFskMl0sCisgIFskMj1ubworICAgbTRfaWYoWyQ0XSwgLCBbYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0XSwgW2FjX291dGZpbGU9JDRdKQorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBsdF9jb21waWxlcl9mbGFnPSIkMyIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbW14gXV0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTpfX29saW5lX186ICRsdF9jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGVjaG8gIiRhc19tZTpfX29saW5lX186IFwkPyA9ICRhY19zdGF0dXMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgorICAgICAkRUNITyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgJDI9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIGNvbmZ0ZXN0KgorXSkKKworaWYgdGVzdCB4IlskXSQyIiA9IHh5ZXM7IHRoZW4KKyAgICBtNF9pZihbJDVdLCAsIDosIFskNV0pCitlbHNlCisgICAgbTRfaWYoWyQ2XSwgLCA6LCBbJDZdKQorZmkKK10pIyBfTFRfQ09NUElMRVJfT1BUSU9OCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfTElCVE9PTF9DT01QSUxFUl9PUFRJT05dLCBbX0xUX0NPTVBJTEVSX09QVElPTl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfQ09NUElMRVJfT1BUSU9OXSwgW10pCisKKworIyBfTFRfTElOS0VSX09QVElPTihNRVNTQUdFLCBWQVJJQUJMRS1OQU1FLCBGTEFHUywKKyMgICAgICAgICAgICAgICAgICBbQUNUSU9OLVNVQ0NFU1NdLCBbQUNUSU9OLUZBSUxVUkVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGxpbmtlciBvcHRpb24gd29ya3MKK0FDX0RFRlVOKFtfTFRfTElOS0VSX09QVElPTl0sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorQUNfQ0FDSEVfQ0hFQ0soWyQxXSwgWyQyXSwKKyAgWyQyPW5vCisgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgTERGTEFHUz0iJExERkxBR1MgJDMiCisgICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KKyAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgJEVDSE8gIlgkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gY29uZnRlc3QuZXhwCisgICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICQyPXllcworICAgICAgIGZpCisgICAgIGVsc2UKKyAgICAgICAkMj15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gLXIgY29uZnRlc3QqCisgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorXSkKKworaWYgdGVzdCB4IlskXSQyIiA9IHh5ZXM7IHRoZW4KKyAgICBtNF9pZihbJDRdLCAsIDosIFskNF0pCitlbHNlCisgICAgbTRfaWYoWyQ1XSwgLCA6LCBbJDVdKQorZmkKK10pIyBfTFRfTElOS0VSX09QVElPTgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sIFtfTFRfTElOS0VSX09QVElPTl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sIFtdKQorCisKKyMgTFRfQ01EX01BWF9MRU4KKyMtLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9DTURfTUFYX0xFTl0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorIyBmaW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzCitBQ19NU0dfQ0hFQ0tJTkcoW3RoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzXSkKK0FDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX21heF9jbWRfbGVuXSwgW2RubAorICBpPTAKKyAgdGVzdHN0cmluZz0iQUJDRCIKKworICBjYXNlICRidWlsZF9vcyBpbgorICBtc2Rvc2RqZ3BwKikKKyAgICAjIE9uIERKR1BQLCB0aGlzIHRlc3QgY2FuIGJsb3cgdXAgcHJldHR5IGJhZGx5IGR1ZSB0byBwcm9ibGVtcyBpbiBsaWJjCisgICAgIyAoYW55IHNpbmdsZSBhcmd1bWVudCBleGNlZWRpbmcgMjAwMCBieXRlcyBjYXVzZXMgYSBidWZmZXIgb3ZlcnJ1bgorICAgICMgZHVyaW5nIGdsb2IgZXhwYW5zaW9uKS4gIEV2ZW4gaWYgaXQgd2VyZSBmaXhlZCwgdGhlIHJlc3VsdCBvZiB0aGlzCisgICAgIyBjaGVjayB3b3VsZCBiZSBsYXJnZXIgdGhhbiBpdCBzaG91bGQgYmUuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEyMjg4OyAgICAjIDEySyBpcyBhYm91dCByaWdodAorICAgIDs7CisKKyAgZ251KikKKyAgICAjIFVuZGVyIEdOVSBIdXJkLCB0aGlzIHRlc3QgaXMgbm90IHJlcXVpcmVkIGJlY2F1c2UgdGhlcmUgaXMKKyAgICAjIG5vIGxpbWl0IHRvIHRoZSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KKyAgICAjIExpYnRvb2wgd2lsbCBpbnRlcnByZXQgLTEgYXMgbm8gbGltaXQgd2hhdHNvZXZlcgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMTsKKyAgICA7OworCisgIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCisgICAgIyBPbiBXaW45eC9NRSwgdGhpcyB0ZXN0IGJsb3dzIHVwIC0tIGl0IHN1Y2NlZWRzLCBidXQgdGFrZXMKKyAgICAjIGFib3V0IDUgbWludXRlcyBhcyB0aGUgdGVzdHN0cmluZyBncm93cyBleHBvbmVudGlhbGx5LgorICAgICMgV29yc2UsIHNpbmNlIDl4L01FIGFyZSBub3QgcHJlLWVtcHRpdmVseSBtdWx0aXRhc2tpbmcsCisgICAgIyB5b3UgZW5kIHVwIHdpdGggYSAiZnJvemVuIiBjb21wdXRlciwgZXZlbiB0aG91Z2ggd2l0aCBwYXRpZW5jZQorICAgICMgdGhlIHRlc3QgZXZlbnR1YWxseSBzdWNjZWVkcyAod2l0aCBhIG1heCBsaW5lIGxlbmd0aCBvZiAyNTZrKS4KKyAgICAjIEluc3RlYWQsIGxldCdzIGp1c3QgcHVudDogdXNlIHRoZSBtaW5pbXVtIGxpbmVsZW5ndGggcmVwb3J0ZWQgYnkKKyAgICAjIGFsbCBvZiB0aGUgc3VwcG9ydGVkIHBsYXRmb3JtczogODE5MiAob24gTlQvMksvWFApLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgYW1pZ2FvcyopCisgICAgIyBPbiBBbWlnYU9TIHdpdGggcGRrc2gsIHRoaXMgdGVzdCB0YWtlcyBob3VycywgbGl0ZXJhbGx5LgorICAgICMgU28gd2UganVzdCBwdW50IGFuZCB1c2UgYSBtaW5pbXVtIGxpbmUgbGVuZ3RoIG9mIDgxOTIuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBuZXRic2QqIHwgZnJlZWJzZCogfCBvcGVuYnNkKiB8IGRhcndpbiogfCBkcmFnb25mbHkqKQorICAgICMgVGhpcyBoYXMgYmVlbiBhcm91bmQgc2luY2UgMzg2QlNELCBhdCBsZWFzdC4gIExpa2VseSBmdXJ0aGVyLgorICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY3RsOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKKyAgICBlbGlmIHRlc3QgLXggL3Vzci9zYmluL3N5c2N0bDsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvdXNyL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAorICAgIGVsc2UKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj02NTUzNgkjIHVzYWJsZSBkZWZhdWx0IGZvciBhbGwgQlNEcworICAgIGZpCisgICAgIyBBbmQgYWRkIGEgc2FmZXR5IHpvbmUKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCisgICAgOzsKKworICBpbnRlcml4KikKKyAgICAjIFdlIGtub3cgdGhlIHZhbHVlIDI2MjE0NCBhbmQgaGFyZGNvZGUgaXQgd2l0aCBhIHNhZmV0eSB6b25lIChsaWtlIEJTRCkKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTk2NjA4CisgICAgOzsKKworICBvc2YqKQorICAgICMgRHIuIEhhbnMgRWtrZWhhcmQgUGxlc3NlciByZXBvcnRzIHNlZWluZyBhIGtlcm5lbCBwYW5pYyBydW5uaW5nIGNvbmZpZ3VyZQorICAgICMgZHVlIHRvIHRoaXMgdGVzdCB3aGVuIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXQgaXMgMSBvbiBUcnU2NC4gSXQgaXMgbm90CisgICAgIyBuaWNlIHRvIGNhdXNlIGtlcm5lbCBwYW5pY3Mgc28gbGV0cyBhdm9pZCB0aGUgbG9vcCBiZWxvdy4KKyAgICAjIEZpcnN0IHNldCBhIHJlYXNvbmFibGUgZGVmYXVsdC4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTYzODQKKyAgICAjCisgICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjb25maWc7IHRoZW4KKyAgICAgIGNhc2UgYC9zYmluL3N5c2NvbmZpZyAtcSBwcm9jIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXRgIGluCisgICAgICAgICoxKikgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICA7OworICBzY28zLjJ2NSopCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEwMjQwMAorICAgIDs7CisgIHN5c3Y1KiB8IHNjbzV2NiogfCBzeXN2NC4ydXcyKikKKyAgICBrYXJnbWF4PWBncmVwIEFSR19NQVggL2V0Yy9jb25mL2NmLmQvc3R1bmUgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAtbiAiJGthcmdtYXgiOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGVjaG8gJGthcmdtYXggfCBzZWQgJ3MvLipbWwkgXV0vLydgCisgICAgZWxzZQorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTMyNzY4CisgICAgZmkKKyAgICA7OworICAqKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gKGdldGNvbmYgQVJHX01BWCkgMj4gL2Rldi9udWxsYAorICAgIGlmIHRlc3QgLW4gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKyAgICBlbHNlCisgICAgICAjIE1ha2UgdGVzdHN0cmluZyBhIGxpdHRsZSBiaWdnZXIgYmVmb3JlIHdlIGRvIGFueXRoaW5nIHdpdGggaXQuCisgICAgICAjIGEgMUsgc3RyaW5nIHNob3VsZCBiZSBhIHJlYXNvbmFibGUgc3RhcnQuCisgICAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOyBkbworICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKKyAgICAgIGRvbmUKKyAgICAgIFNIRUxMPSR7U0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19CisgICAgICAjIElmIHRlc3QgaXMgbm90IGEgc2hlbGwgYnVpbHQtaW4sIHdlJ2xsIHByb2JhYmx5IGVuZCB1cCBjb21wdXRpbmcgYQorICAgICAgIyBtYXhpbXVtIGxlbmd0aCB0aGF0IGlzIG9ubHkgaGFsZiBvZiB0aGUgYWN0dWFsIG1heGltdW0gbGVuZ3RoLCBidXQKKyAgICAgICMgd2UgY2FuJ3QgdGVsbC4KKyAgICAgIHdoaWxlIHsgdGVzdCAiWCJgJFNIRUxMIFskXTAgLS1mYWxsYmFjay1lY2hvICJYJHRlc3RzdHJpbmckdGVzdHN0cmluZyIgMj4vZGV2L251bGxgIFwKKwkgICAgICAgICA9ICJYWCR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciOyB9ID4vZGV2L251bGwgMj4mMSAmJgorCSAgICAgIHRlc3QgJGkgIT0gMTcgIyAxLzIgTUIgc2hvdWxkIGJlIGVub3VnaAorICAgICAgZG8KKyAgICAgICAgaT1gZXhwciAkaSArIDFgCisgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworICAgICAgZG9uZQorICAgICAgIyBPbmx5IGNoZWNrIHRoZSBzdHJpbmcgbGVuZ3RoIG91dHNpZGUgdGhlIGxvb3AuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgIlgkdGVzdHN0cmluZyIgOiAiLioiIDI+JjFgCisgICAgICB0ZXN0c3RyaW5nPQorICAgICAgIyBBZGQgYSBzaWduaWZpY2FudCBzYWZldHkgZmFjdG9yIGJlY2F1c2UgQysrIGNvbXBpbGVycyBjYW4gdGFjayBvbgorICAgICAgIyBtYXNzaXZlIGFtb3VudHMgb2YgYWRkaXRpb25hbCBhcmd1bWVudHMgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB0aGUKKyAgICAgICMgbGlua2VyLiAgSXQgYXBwZWFycyBhcyB0aG91Z2ggMS8yIGlzIGEgdXNhYmxlIHZhbHVlLgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gMmAKKyAgICBmaQorICAgIDs7CisgIGVzYWMKK10pCitpZiB0ZXN0IC1uICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gOyB0aGVuCisgIEFDX01TR19SRVNVTFQoJGx0X2N2X3N5c19tYXhfY21kX2xlbikKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChub25lKQorZmkKK21heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KK19MVF9ERUNMKFtdLCBbbWF4X2NtZF9sZW5dLCBbMF0sCisgICAgW1doYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD9dKQorXSkjIExUX0NNRF9NQVhfTEVOCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU5dLCBbTFRfQ01EX01BWF9MRU5dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19NQVhfQ01EX0xFTl0sIFtdKQorCisKKyMgX0xUX0hFQURFUl9ETEZDTgorIyAtLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0hFQURFUl9ETEZDTl0sCitbQUNfQ0hFQ0tfSEVBREVSUyhbZGxmY24uaF0sIFtdLCBbXSwgW0FDX0lOQ0xVREVTX0RFRkFVTFRdKWRubAorXSkjIF9MVF9IRUFERVJfRExGQ04KKworCisjIF9MVF9UUllfRExPUEVOX1NFTEYgKEFDVElPTi1JRi1UUlVFLCBBQ1RJT04tSUYtVFJVRS1XLVVTQ09SRSwKKyMgICAgICAgICAgICAgICAgICAgICAgQUNUSU9OLUlGLUZBTFNFLCBBQ1RJT04tSUYtQ1JPU1MtQ09NUElMSU5HKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1RSWV9ETE9QRU5fU0VMRl0sCitbbTRfcmVxdWlyZShbX0xUX0hFQURFUl9ETEZDTl0pZG5sCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIFskNF0KK2Vsc2UKKyAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorWyNsaW5lIF9fb2xpbmVfXyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZiBIQVZFX0RMRkNOX0gKKyNpbmNsdWRlIDxkbGZjbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZkZWYgUlRMRF9HTE9CQUwKKyMgIGRlZmluZSBMVF9ETEdMT0JBTAkJUlRMRF9HTE9CQUwKKyNlbHNlCisjICBpZmRlZiBETF9HTE9CQUwKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQlETF9HTE9CQUwKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQkwCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdlIG1heSBoYXZlIHRvIGRlZmluZSBMVF9ETExBWllfT1JfTk9XIGluIHRoZSBjb21tYW5kIGxpbmUgaWYgd2UKKyAgIGZpbmQgb3V0IGl0IGRvZXMgbm90IHdvcmsgaW4gc29tZSBwbGF0Zm9ybS4gKi8KKyNpZm5kZWYgTFRfRExMQVpZX09SX05PVworIyAgaWZkZWYgUlRMRF9MQVpZCisjICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlSVExEX0xBWlkKKyMgIGVsc2UKKyMgICAgaWZkZWYgRExfTEFaWQorIyAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlETF9MQVpZCisjICAgIGVsc2UKKyMgICAgICBpZmRlZiBSVExEX05PVworIyAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJUlRMRF9OT1cKKyMgICAgICBlbHNlCisjICAgICAgICBpZmRlZiBETF9OT1cKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJRExfTk9XCisjICAgICAgICBlbHNlCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCTAKKyMgICAgICAgIGVuZGlmCisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKwordm9pZCBmbm9yZCgpIHsgaW50IGk9NDI7fQoraW50IG1haW4gKCkKK3sKKyAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CisgIGludCBzdGF0dXMgPSAkbHRfZGx1bmtub3duOworCisgIGlmIChzZWxmKQorICAgIHsKKyAgICAgIGlmIChkbHN5bSAoc2VsZiwiZm5vcmQiKSkgICAgICAgc3RhdHVzID0gJGx0X2Rsbm9fdXNjb3JlOworICAgICAgZWxzZSBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKKyAgICAgIC8qIGRsY2xvc2UgKHNlbGYpOyAqLworICAgIH0KKyAgZWxzZQorICAgIHB1dHMgKGRsZXJyb3IgKCkpOworCisgIHJldHVybiBzdGF0dXM7Cit9XQorX0xUX0VPRgorICBpZiBBQ19UUllfRVZBTChhY19saW5rKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9IDI+L2Rldi9udWxsOyB0aGVuCisgICAgKC4vY29uZnRlc3Q7IGV4aXQ7ICkgPiZBU19NRVNTQUdFX0xPR19GRCAyPi9kZXYvbnVsbAorICAgIGx0X3N0YXR1cz0kPworICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KKyAgICAgIHgkbHRfZGxub191c2NvcmUpICQxIDs7CisgICAgICB4JGx0X2RsbmVlZF91c2NvcmUpICQyIDs7CisgICAgICB4JGx0X2RsdW5rbm93bnx4KikgJDMgOzsKKyAgICBlc2FjCisgIGVsc2UgOgorICAgICMgY29tcGlsYXRpb24gZmFpbGVkCisgICAgJDMKKyAgZmkKK2ZpCitybSAtZnIgY29uZnRlc3QqCitdKSMgX0xUX1RSWV9ETE9QRU5fU0VMRgorCisKKyMgTFRfU1lTX0RMT1BFTl9TRUxGCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX1NZU19ETE9QRU5fU0VMRl0sCitbbTRfcmVxdWlyZShbX0xUX0hFQURFUl9ETEZDTl0pZG5sCitpZiB0ZXN0ICJ4JGVuYWJsZV9kbG9wZW4iICE9IHh5ZXM7IHRoZW4KKyAgZW5hYmxlX2Rsb3Blbj11bmtub3duCisgIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duCisgIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93bgorZWxzZQorICBsdF9jdl9kbG9wZW49bm8KKyAgbHRfY3ZfZGxvcGVuX2xpYnM9CisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBiZW9zKikKKyAgICBsdF9jdl9kbG9wZW49ImxvYWRfYWRkX29uIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcworICAgIDs7CisKKyAgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgbHRfY3ZfZGxvcGVuPSJMb2FkTGlicmFyeSIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICA7OworCisgIGN5Z3dpbiopCisgICAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgOzsKKworICBkYXJ3aW4qKQorICAjIGlmIGxpYmRsIGlzIGluc3RhbGxlZCB3ZSBuZWVkIHRvIGxpbmsgYWdhaW5zdCBpdAorICAgIEFDX0NIRUNLX0xJQihbZGxdLCBbZGxvcGVuXSwKKwkJW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCJdLFsKKyAgICBsdF9jdl9kbG9wZW49ImR5bGQiCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCisgICAgXSkKKyAgICA7OworCisgICopCisgICAgQUNfQ0hFQ0tfRlVOQyhbc2hsX2xvYWRdLAorCSAgW2x0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiXSwKKyAgICAgIFtBQ19DSEVDS19MSUIoW2RsZF0sIFtzaGxfbG9hZF0sCisJICAgIFtsdF9jdl9kbG9wZW49InNobF9sb2FkIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbGQiXSwKKwlbQUNfQ0hFQ0tfRlVOQyhbZGxvcGVuXSwKKwkgICAgICBbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iXSwKKwkgIFtBQ19DSEVDS19MSUIoW2RsXSwgW2Rsb3Blbl0sCisJCVtsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiXSwKKwkgICAgW0FDX0NIRUNLX0xJQihbc3ZsZF0sIFtkbG9wZW5dLAorCQkgIFtsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sc3ZsZCJdLAorCSAgICAgIFtBQ19DSEVDS19MSUIoW2RsZF0sIFtkbGRfbGlua10sCisJCSAgICBbbHRfY3ZfZGxvcGVuPSJkbGRfbGluayIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIl0pCisJICAgICAgXSkKKwkgICAgXSkKKwkgIF0pCisJXSkKKyAgICAgIF0pCisgICAgOzsKKyAgZXNhYworCisgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuIiAhPSB4bm87IHRoZW4KKyAgICBlbmFibGVfZGxvcGVuPXllcworICBlbHNlCisgICAgZW5hYmxlX2Rsb3Blbj1ubworICBmaQorCisgIGNhc2UgJGx0X2N2X2Rsb3BlbiBpbgorICBkbG9wZW4pCisgICAgc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICAgIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2RsZmNuX2giID0geHllcyAmJiBDUFBGTEFHUz0iJENQUEZMQUdTIC1ESEFWRV9ETEZDTl9IIgorCisgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiCisKKyAgICBzYXZlX0xJQlM9IiRMSUJTIgorICAgIExJQlM9IiRsdF9jdl9kbG9wZW5fbGlicyAkTElCUyIKKworICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZl0sCisJICBsdF9jdl9kbG9wZW5fc2VsZiwgW2RubAorCSAgX0xUX1RSWV9ETE9QRU5fU0VMRigKKwkgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzLCBsdF9jdl9kbG9wZW5fc2VsZj15ZXMsCisJICAgIGx0X2N2X2Rsb3Blbl9zZWxmPW5vLCBsdF9jdl9kbG9wZW5fc2VsZj1jcm9zcykKKyAgICBdKQorCisgICAgaWYgdGVzdCAieCRsdF9jdl9kbG9wZW5fc2VsZiIgPSB4eWVzOyB0aGVuCisgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljXCIKKyAgICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZl0sCisJICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMsIFtkbmwKKwkgIF9MVF9UUllfRExPUEVOX1NFTEYoCisJICAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMsIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMsCisJICAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1ubywgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1jcm9zcykKKyAgICAgIF0pCisgICAgZmkKKworICAgIENQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyIKKyAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorICAgIExJQlM9IiRzYXZlX0xJQlMiCisgICAgOzsKKyAgZXNhYworCisgIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmIGluCisgIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmPSRsdF9jdl9kbG9wZW5fc2VsZiA7OworICAqKSBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93biA7OworICBlc2FjCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIGluCisgIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz0kbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIDs7CisgICopIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93biA7OworICBlc2FjCitmaQorX0xUX0RFQ0woW2Rsb3Blbl9zdXBwb3J0XSwgW2VuYWJsZV9kbG9wZW5dLCBbMF0sCisJIFtXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWRdKQorX0xUX0RFQ0woW2Rsb3Blbl9zZWxmXSwgW2VuYWJsZV9kbG9wZW5fc2VsZl0sIFswXSwKKwkgW1doZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZF0pCitfTFRfREVDTChbZGxvcGVuX3NlbGZfc3RhdGljXSwgW2VuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWNdLCBbMF0sCisJIFtXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWRdKQorXSkjIExUX1NZU19ETE9QRU5fU0VMRgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xJQlRPT0xfRExPUEVOX1NFTEZdLCBbTFRfU1lTX0RMT1BFTl9TRUxGXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9ETE9QRU5fU0VMRl0sIFtdKQorCisKKyMgX0xUX0NPTVBJTEVSX0NfTyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB0byBzZWUgaWYgb3B0aW9ucyAtYyBhbmQgLW8gYXJlIHNpbXVsdGFuZW91c2x5IHN1cHBvcnRlZCBieSBjb21waWxlci4KKyMgVGhpcyBtYWNybyBkb2VzIG5vdCBoYXJkIGNvZGUgdGhlIGNvbXBpbGVyIGxpa2UgQUNfUFJPR19DQ19DX08uCittNF9kZWZ1bihbX0xUX0NPTVBJTEVSX0NfT10sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCitBQ19DQUNIRV9DSEVDSyhbaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dF0sCisgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSldLAorICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPW5vCisgICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgIG1rZGlyIGNvbmZ0ZXN0CisgICBjZCBjb25mdGVzdAorICAgbWtkaXIgb3V0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW1teIF1dKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6X19vbGluZV9fOiAkbHRfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGVjaG8gIiRhc19tZTpfX29saW5lX186IFwkPyA9ICRhY19zdGF0dXMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICAkRUNITyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT15ZXMKKyAgICAgZmkKKyAgIGZpCisgICBjaG1vZCB1K3cgLiAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgJFJNIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgJFJNIC1yIGNvbmZ0ZXN0CisgICAkUk0gY29uZnRlc3QqCitdKQorX0xUX1RBR0RFQ0woW2NvbXBpbGVyX2Nfb10sIFtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb10sIFsxXSwKKwlbRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zP10pCitdKSMgX0xUX0NPTVBJTEVSX0NfTworCisKKyMgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gZG8gaGFyZCBsaW5rcyB0byBsb2NrIHNvbWUgZmlsZXMgaWYgbmVlZGVkCittNF9kZWZ1bihbX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1NdLAorW200X3JlcXVpcmUoW19MVF9FTkFCTEVfTE9DS10pZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK19MVF9DT01QSUxFUl9DX08oWyQxXSkKKworaGFyZF9saW5rcz0ibm90dGVzdGVkIgoraWYgdGVzdCAiJF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKSIgPSBubyAmJiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KKyAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCisgIEFDX01TR19DSEVDS0lORyhbaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzXSkKKyAgaGFyZF9saW5rcz15ZXMKKyAgJFJNIGNvbmZ0ZXN0KgorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICB0b3VjaCBjb25mdGVzdC5hCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgQUNfTVNHX1JFU1VMVChbJGhhcmRfbGlua3NdKQorICBpZiB0ZXN0ICIkaGFyZF9saW5rcyIgPSBubzsgdGhlbgorICAgIEFDX01TR19XQVJOKFtgJENDJyBkb2VzIG5vdCBzdXBwb3J0IGAtYyAtbycsIHNvIGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlXSkKKyAgICBuZWVkX2xvY2tzPXdhcm4KKyAgZmkKK2Vsc2UKKyAgbmVlZF9sb2Nrcz1ubworZmkKK19MVF9ERUNMKFtdLCBbbmVlZF9sb2Nrc10sIFsxXSwgW011c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uP10pCitdKSMgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MKKworCisjIF9MVF9DSEVDS19PQkpESVIKKyMgLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DSEVDS19PQkpESVJdLAorW0FDX0NBQ0hFX0NIRUNLKFtmb3Igb2JqZGlyXSwgW2x0X2N2X29iamRpcl0sCitbcm0gLWYgLmxpYnMgMj4vZGV2L251bGwKK21rZGlyIC5saWJzIDI+L2Rldi9udWxsCitpZiB0ZXN0IC1kIC5saWJzOyB0aGVuCisgIGx0X2N2X29iamRpcj0ubGlicworZWxzZQorICAjIE1TLURPUyBkb2VzIG5vdCBhbGxvdyBmaWxlbmFtZXMgdGhhdCBiZWdpbiB3aXRoIGEgZG90LgorICBsdF9jdl9vYmpkaXI9X2xpYnMKK2ZpCitybWRpciAubGlicyAyPi9kZXYvbnVsbF0pCitvYmpkaXI9JGx0X2N2X29iamRpcgorX0xUX0RFQ0woW10sIFtvYmpkaXJdLCBbMF0sCisgICAgICAgICBbVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzXSlkbmwKK200X3BhdHRlcm5fYWxsb3coW0xUX09CSkRJUl0pZG5sCitBQ19ERUZJTkVfVU5RVU9URUQoTFRfT0JKRElSLCAiJGx0X2N2X29iamRpci8iLAorICBbRGVmaW5lIHRvIHRoZSBzdWItZGlyZWN0b3J5IGluIHdoaWNoIGxpYnRvb2wgc3RvcmVzIHVuaW5zdGFsbGVkIGxpYnJhcmllcy5dKQorXSkjIF9MVF9DSEVDS19PQkpESVIKKworCisjIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSChbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGhhcmRjb2RpbmcgYXR0cmlidXRlcy4KK200X2RlZnVuKFtfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEhdLAorW0FDX01TR19DSEVDS0lORyhbaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtc10pCitfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPQoraWYgdGVzdCAtbiAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIiB8fAorICAgdGVzdCAtbiAiJF9MVF9UQUdWQVIocnVucGF0aF92YXIsICQxKSIgfHwKKyAgIHRlc3QgIlgkX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKSIgPSAiWHllcyIgOyB0aGVuCisKKyAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgorICBpZiB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKSIgIT0gbm8gJiYKKyAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQorICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5CisgICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKKyAgICAgIyMgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpIiAhPSBubyAmJgorICAgICB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSkiICE9IG5vOyB0aGVuCisgICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KKyAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPXJlbGluaworICBlbHNlCisgICAgIyBXZSBjYW4gbGluayB3aXRob3V0IGhhcmRjb2RpbmcsIGFuZCB3ZSBjYW4gaGFyZGNvZGUgbm9uZXhpc3RpbmcgZGlycy4KKyAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPWltbWVkaWF0ZQorICBmaQorZWxzZQorICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZworICAjIGRpcmVjdG9yaWVzLgorICBfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPXVuc3VwcG9ydGVkCitmaQorQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSldKQorCitpZiB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKSIgPSByZWxpbmsgfHwKKyAgIHRlc3QgIiRfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKSIgPSB5ZXM7IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KK2VsaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgfHwKKyAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gbm87IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5CisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKK2ZpCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2FjdGlvbl0sIFswXSwKKyAgICBbSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGVdKQorXSkjIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSAorCisKKyMgX0xUX0NNRF9TVFJJUExJQgorIyAtLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NNRF9TVFJJUExJQl0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKQorc3RyaXBsaWI9CitvbGRfc3RyaXBsaWI9CitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZV0pCitpZiB0ZXN0IC1uICIkU1RSSVAiICYmICRTVFJJUCAtViAyPiYxIHwgJEdSRVAgIkdOVSBzdHJpcCIgPi9kZXYvbnVsbDsgdGhlbgorICB0ZXN0IC16ICIkb2xkX3N0cmlwbGliIiAmJiBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLWRlYnVnIgorICB0ZXN0IC16ICIkc3RyaXBsaWIiICYmIHN0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC11bm5lZWRlZCIKKyAgQUNfTVNHX1JFU1VMVChbeWVzXSkKK2Vsc2UKKyMgRklYTUUgLSBpbnNlcnQgc29tZSByZWFsIHRlc3RzLCBob3N0X29zIGlzbid0IHJlYWxseSBnb29kIGVub3VnaAorICBjYXNlICRob3N0X29zIGluCisgIGRhcndpbiopCisgICAgaWYgdGVzdCAtbiAiJFNUUklQIiA7IHRoZW4KKyAgICAgIHN0cmlwbGliPSIkU1RSSVAgLXgiCisgICAgICBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtUyIKKyAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgOzsKKyAgZXNhYworZmkKK19MVF9ERUNMKFtdLCBbb2xkX3N0cmlwbGliXSwgWzFdLCBbQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzXSkKK19MVF9ERUNMKFtdLCBbc3RyaXBsaWJdLCBbMV0pCitdKSMgX0xUX0NNRF9TVFJJUExJQgorCisKKyMgX0xUX1NZU19EWU5BTUlDX0xJTktFUihbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUE9SVE1FIEZpbGwgaW4geW91ciBsZC5zbyBjaGFyYWN0ZXJpc3RpY3MKK200X2RlZnVuKFtfTFRfU1lTX0RZTkFNSUNfTElOS0VSXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX09CSkRVTVBdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK0FDX01TR19DSEVDS0lORyhbZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzXSkKK200X2lmKFskMV0sCisJW10sIFsKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBkYXJ3aW4qKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovLC9MUi8iIDs7CisgICAgKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LyIgOzsKKyAgZXNhYworICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgYXdrICRsdF9hd2tfYXJnIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAorICBpZiAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJzsnID4vZGV2L251bGwgOyB0aGVuCisgICAgIyBpZiB0aGUgcGF0aCBjb250YWlucyAiOyIgdGhlbiB3ZSBhc3N1bWUgaXQgdG8gYmUgdGhlIHNlcGFyYXRvcgorICAgICMgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIHN0YW5kYXJkIHBhdGggc2VwYXJhdG9yIChpLmUuICI6IikgLSBpdCBpcworICAgICMgYXNzdW1lZCB0aGF0IG5vIHBhcnQgb2YgYSBub3JtYWwgcGF0aG5hbWUgY29udGFpbnMgIjsiIGJ1dCB0aGF0IHNob3VsZAorICAgICMgb2theSBpbiB0aGUgcmVhbCB3b3JsZCB3aGVyZSAiOyIgaW4gZGlycGF0aHMgaXMgaXRzZWxmIHByb2JsZW1hdGljLgorICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKyAgZWxzZQorICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgZmkKKyAgIyBPaywgbm93IHdlIGhhdmUgdGhlIHBhdGgsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHdlIGNhbiBzdGVwIHRocm91Z2ggaXQKKyAgIyBhbmQgYWRkIG11bHRpbGliIGRpciBpZiBuZWNlc3NhcnkuCisgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPQorICBsdF9tdWx0aV9vc19kaXI9YCRDQyAkQ1BQRkxBR1MgJENGTEFHUyAkTERGTEFHUyAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5IDI+L2Rldi9udWxsYAorICBmb3IgbHRfc3lzX3BhdGggaW4gJGx0X3NlYXJjaF9wYXRoX3NwZWM7IGRvCisgICAgaWYgdGVzdCAtZCAiJGx0X3N5c19wYXRoLyRsdF9tdWx0aV9vc19kaXIiOyB0aGVuCisgICAgICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aC8kbHRfbXVsdGlfb3NfZGlyIgorICAgIGVsc2UKKyAgICAgIHRlc3QgLWQgIiRsdF9zeXNfcGF0aCIgJiYgXAorCWx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoIgorICAgIGZpCisgIGRvbmUKKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjIHwgYXdrICcKK0JFR0lOIHtSUz0iICI7IEZTPSIvfFxuIjt9IHsKKyAgbHRfZm9vPSIiOworICBsdF9jb3VudD0wOworICBmb3IgKGx0X2kgPSBORjsgbHRfaSA+IDA7IGx0X2ktLSkgeworICAgIGlmICgkbHRfaSAhPSAiIiAmJiAkbHRfaSAhPSAiLiIpIHsKKyAgICAgIGlmICgkbHRfaSA9PSAiLi4iKSB7CisgICAgICAgIGx0X2NvdW50Kys7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAobHRfY291bnQgPT0gMCkgeworICAgICAgICAgIGx0X2Zvbz0iLyIgJGx0X2kgbHRfZm9vOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGx0X2NvdW50LS07CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgaWYgKGx0X2ZvbyAhPSAiIikgeyBsdF9mcmVxW1tsdF9mb29dXSsrOyB9CisgIGlmIChsdF9mcmVxW1tsdF9mb29dXSA9PSAxKSB7IHByaW50IGx0X2ZvbzsgfQorfSdgCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gJGx0X3NlYXJjaF9wYXRoX3NwZWNgCitlbHNlCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKK2ZpXSkKK2xpYnJhcnlfbmFtZXNfc3BlYz0KK2xpYm5hbWVfc3BlYz0nbGliJG5hbWUnCitzb25hbWVfc3BlYz0KK3NocmV4dF9jbWRzPSIuc28iCitwb3N0aW5zdGFsbF9jbWRzPQorcG9zdHVuaW5zdGFsbF9jbWRzPQorZmluaXNoX2NtZHM9CitmaW5pc2hfZXZhbD0KK3NobGlicGF0aF92YXI9CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgordmVyc2lvbl90eXBlPW5vbmUKK2R5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgorbmVlZF9saWJfcHJlZml4PXVua25vd24KK2hhcmRjb2RlX2ludG9fbGlicz1ubworCisjIHdoZW4geW91IHNldCBuZWVkX3ZlcnNpb24gdG8gbm8sIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBjYXVzZSAtc2V0X3ZlcnNpb24KKyMgZmxhZ3MgdG8gYmUgbGVmdCB3aXRob3V0IGFyZ3VtZW50cworbmVlZF92ZXJzaW9uPXVua25vd24KKworY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUuYScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisKKyAgIyBBSVggMyBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyB3ZSBhcHBlbmQgYSBtYWpvciB2ZXJzaW9uIHRvIHRoZSBuYW1lLgorICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICA7OworCithaXhbWzQtOV1dKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICMgQUlYIDUgc3VwcG9ydHMgSUE2NAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGVsc2UKKyAgICAjIFdpdGggR0NDIHVwIHRvIDIuOTUueCwgY29sbGVjdDIgd291bGQgY3JlYXRlIGFuIGltcG9ydCBmaWxlCisgICAgIyBmb3IgZGVwZW5kZW5jZSBsaWJyYXJpZXMuICBUaGUgaW1wb3J0IGZpbGUgd291bGQgc3RhcnQgd2l0aAorICAgICMgdGhlIGxpbmUgYCMhIC4nLiAgVGhpcyB3b3VsZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGxpYnJhcnkgdG8KKyAgICAjIGRlcGVuZCBvbiBgLicsIGFsd2F5cyBhbiBpbnZhbGlkIGxpYnJhcnkuICBUaGlzIHdhcyBmaXhlZCBpbgorICAgICMgZGV2ZWxvcG1lbnQgc25hcHNob3RzIG9mIEdDQyBwcmlvciB0byAzLjAuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4NCB8IGFpeDQuW1swMV1dIHwgYWl4NC5bWzAxXV0uKikKKyAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCisJICAgZWNobyAnIHllcyAnCisJICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCAkR1JFUCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKwk6CisgICAgICBlbHNlCisJY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW4gbm90IGhhcmRjb2RlIGNvcnJlY3QKKyAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCisgICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KKyAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbworICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKKyAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIGVsc2UKKyAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCisgICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJworICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBmaQorICAgIHNobGlicGF0aF92YXI9TElCUEFUSAorICBmaQorICA7OworCithbWlnYW9zKikKKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgcG93ZXJwYykKKyAgICAjIFNpbmNlIEp1bHkgMjAwNyBBbWlnYU9TNCBvZmZpY2lhbGx5IHN1cHBvcnRzIC5zbyBsaWJyYXJpZXMuCisgICAgIyBXaGVuIGNvbXBpbGluZyB0aGUgZXhlY3V0YWJsZSwgYWRkIC11c2UtZHlubGQgLUxzb2JqczogdG8gdGhlIGNvbXBpbGVsaW5lLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIDs7CisgIG02OGspCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKKyAgICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgorICAgIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gJEVDSE8gIlgkbGliIiB8ICRYc2VkIC1lICdcJydzJV4uKi9cKFtbXi9dXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgdGVzdCAkUk0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCisgICAgOzsKKyAgZXNhYworICA7OworCitiZW9zKikKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICA7OworCitic2RpW1s0NV1dKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9YMTEvbGliIC91c3IvY29udHJpYi9saWIgL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgIyB0aGUgZGVmYXVsdCBsZC5zby5jb25mIGFsc28gY29udGFpbnMgL3Vzci9jb250cmliL2xpYiBhbmQKKyAgIyAvdXNyL1gxMVI2L2xpYiAoL3Vzci9YMTEgaXMgYSBsaW5rIHRvIC91c3IvWDExUjYpLCBidXQgbGV0IHVzIGFsbG93CisgICMgbGlidG9vbCB0byBoYXJkLWNvZGUgdGhlc2UgaW50byBwcm9ncmFtcworICA7OworCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgIHZlcnNpb25fdHlwZT13aW5kb3dzCisgIHNocmV4dF9jbWRzPSIuZGxsIgorICBuZWVkX3ZlcnNpb249bm8KKyAgbmVlZF9saWJfcHJlZml4PW5vCisKKyAgY2FzZSAkR0NDLCRob3N0X29zIGluCisgIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKiB8IHllcyxjZWdjYyopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lfgorICAgICAgaWYgdGVzdCAtbiAnXCcnJHN0cmlwbWUnXCcnICYmIHRlc3QgLW4gJ1wnJyRzdHJpcGxpYidcJyc7IHRoZW4KKyAgICAgICAgZXZhbCAnXCcnJHN0cmlwbGliIFwkZGxkaXIvJGRsbmFtZSdcJycgfHwgZXhpdCBcJD87CisgICAgICBmaScKKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKyAgICAgICAkUk0gXCRkbHBhdGgnCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGN5Z3dpbiopCisgICAgICAjIEN5Z3dpbiBETExzIHVzZSAnY3lnJyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiAvbGliL3czMmFwaSAvbGliIC91c3IvbG9jYWwvbGliIgorICAgICAgOzsKKyAgICBtaW5ndyogfCBjZWdjYyopCisgICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAorICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCAkR1JFUCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAorICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgWyRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbF07IHRoZW4KKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSCBwcmludGVkIGJ5CisgICAgICAgICMgbWluZ3cgZ2NjLCBidXQgd2UgYXJlIHJ1bm5pbmcgb24gQ3lnd2luLiBHY2MgcHJpbnRzIGl0cyBzZWFyY2gKKyAgICAgICAgIyBwYXRoIHdpdGggOyBzZXBhcmF0b3JzLCBhbmQgd2l0aCBkcml2ZSBsZXR0ZXJzLiBXZSBjYW4gaGFuZGxlIHRoZQorICAgICAgICAjIGRyaXZlIGxldHRlcnMgKGN5Z3dpbiBmaWxldXRpbHMgdW5kZXJzdGFuZHMgdGhlbSksIHNvIGxlYXZlIHRoZW0sCisgICAgICAgICMgZXNwZWNpYWxseSBhcyB3ZSBtaWdodCBwYXNzIGZpbGVzIGZvdW5kIHRoZXJlIHRvIGEgbWluZ3cgb2JqZHVtcCwKKyAgICAgICAgIyB3aGljaCB3b3VsZG4ndCB1bmRlcnN0YW5kIGEgY3lnd2luaWZpZWQgcGF0aC4gQWhoLgorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorICAgICAgZWxzZQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgICAgZmkKKyAgICAgIDs7CisgICAgcHczMiopCisgICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKworICAqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisgICAgOzsKKyAgZXNhYworICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgc2hsaWJwYXRoX3Zhcj1QQVRICisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgorICB2ZXJzaW9uX3R5cGU9ZGFyd2luCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKKyAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCittNF9pZihbJDFdLCBbXSxbCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvdXNyL2xvY2FsL2xpYiJdKQorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYicKKyAgOzsKKworZGd1eCopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworZnJlZWJzZDEqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCitmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICMgRHJhZ29uRmx5IGRvZXMgbm90IGhhdmUgYW91dC4gIFdoZW4vaWYgdGhleSBpbXBsZW1lbnQgYSBuZXcKKyAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCisgIGlmIHRlc3QgLXggL3Vzci9iaW4vb2JqZm9ybWF0OyB0aGVuCisgICAgb2JqZm9ybWF0PWAvdXNyL2Jpbi9vYmpmb3JtYXRgCisgIGVsc2UKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgZnJlZWJzZFtbMTIzXV0qKSBvYmpmb3JtYXQ9YW91dCA7OworICAgICopIG9iamZvcm1hdD1lbGYgOzsKKyAgICBlc2FjCisgIGZpCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKKyAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisgICAgZnJlZWJzZC1lbGYqKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBmcmVlYnNkLSopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgICAgIG5lZWRfdmVyc2lvbj15ZXMKKyAgICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBmcmVlYnNkMiopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIDs7CisgIGZyZWVic2QzLltbMDFdXSogfCBmcmVlYnNkZWxmMy5bWzAxXV0qKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuW1syLTldXSogfCBmcmVlYnNkZWxmMy5bWzItOV1dKiB8IFwKKyAgZnJlZWJzZDQuW1swLTVdXSB8IGZyZWVic2RlbGY0LltbMC01XV0gfCBmcmVlYnNkNC4xLjEgfCBmcmVlYnNkZWxmNC4xLjEpCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgICopICMgZnJvbSA0LjYgb24sIGFuZCBEcmFnb25GbHkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGVzYWMKKyAgOzsKKworZ251KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2hwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCisgICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBzaHJleHRfY21kcz0nLnNvJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKKyAgICBlbHNlCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCisgICAgZmkKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgaHBwYSo2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgICopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICA7OworICBlc2FjCisgICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LgorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKKyAgOzsKKworaW50ZXJpeFtbMy05XV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKKyAgICAqKQorCWlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkJdmVyc2lvbl90eXBlPWxpbnV4CisJZWxzZQorCQl2ZXJzaW9uX3R5cGU9aXJpeAorCWZpIDs7CisgIGVzYWMKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgaXJpeDUqIHwgbm9uc3RvcHV4KikKKyAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CisgICAgOzsKKyAgKikKKyAgICBjYXNlICRMRCBpbiAjIGxpYnRvb2wubTQgd2lsbCBhZGQgb25lIG9mIHRoZXNlIHN3aXRjaGVzIHRvIExECisgICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikKKyAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9MzItYml0OzsKKyAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKQorICAgICAgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIGxpYm1hZ2ljPU4zMjs7CisgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpCisgICAgICBsaWJzdWZmPTY0IHNobGlic3VmZj02NCBsaWJtYWdpYz02NC1iaXQ7OworICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0iCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworIyBObyBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIExpbnV4IG9sZGxkLCBhb3V0LCBvciBjb2ZmLgorbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICMgU29tZSBiaW51dGlscyBsZCBhcmUgcGF0Y2hlZCB0byBzZXQgRFRfUlVOUEFUSAorICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgc2F2ZV9saWJkaXI9JGxpYmRpcgorICBldmFsICJsaWJkaXI9L2Zvbzsgd2w9XCIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSlcIjsgXAorICAgICAgIExERkxBR1M9XCJcJExERkxBR1MgJF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpXCIiCisgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sW10pXSwKKyAgICBbQVNfSUYoWyAoJE9CSkRVTVAgLXAgY29uZnRlc3QkYWNfZXhlZXh0KSAyPi9kZXYvbnVsbCB8IGdyZXAgIlJVTlBBVEguKiRsaWJkaXIiID4vZGV2L251bGxdLAorICAgICAgIFtzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzXSldKQorICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKyAgbGliZGlyPSRzYXZlX2xpYmRpcgorCisgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKyAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworCisgICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCisgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisgICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXFskXTIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFxbJF0wOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWwkgXSpod2NhcFsJIF0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAkbHRfbGRfZXh0cmEiCisgIGZpCisKKyAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCisgICMgcG93ZXJwYywgYmVjYXVzZSBNa0xpbnV4IG9ubHkgc3VwcG9ydGVkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB0aGUKKyAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCisgICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCisgICMgcGVvcGxlIGNhbiBhbHdheXMgLS1kaXNhYmxlLXNoYXJlZCwgdGhlIHRlc3Qgd2FzIHJlbW92ZWQsIGFuZCB3ZQorICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KKyAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKKyAgOzsKKworbmV0YnNkZWxmKi1nbnUpCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJworICA7OworCituZXRic2QqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCisgIGVsc2UKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCisgIGZpCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCituZXdzb3M2KQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgOzsKKworKm50byogfCAqcW54KikKKyAgdmVyc2lvbl90eXBlPXFueAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBkeW5hbWljX2xpbmtlcj0nbGRxbnguc28nCisgIDs7CisKK29wZW5ic2QqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIyBTb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5CU0QgKDMuMyBhdCBsZWFzdCkgKmRvKiBuZWVkIHZlcnNpb25lZCBsaWJzLgorICBjYXNlICRob3N0X29zIGluCisgICAgb3BlbmJzZDMuMyB8IG9wZW5ic2QzLjMuKikJbmVlZF92ZXJzaW9uPXllcyA7OworICAgICopCQkJCW5lZWRfdmVyc2lvbj1ubyAgOzsKKyAgZXNhYworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgb3BlbmJzZDIuW1s4OV1dIHwgb3BlbmJzZDIuW1s4OV1dLiopCisJc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisJOzsKKyAgICAgICopCisJc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworCTs7CisgICAgICBlc2FjCisgIGVsc2UKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGZpCisgIDs7CisKK29zMiopCisgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgIHNocmV4dF9jbWRzPSIuZGxsIgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUuYScKKyAgZHluYW1pY19saW5rZXI9J09TLzIgbGQuZXhlJworICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgOzsKKworb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICB2ZXJzaW9uX3R5cGU9b3NmCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9zaGxpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIvY21wbHJzL2NjIC91c3IvbGliIC91c3IvbG9jYWwvbGliIC92YXIvc2hsaWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgorICA7OworCityZG9zKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworc29sYXJpcyopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIyBsZGQgY29tcGxhaW5zIHVubGVzcyBsaWJyYXJpZXMgYXJlIGV4ZWN1dGFibGUKKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgK3ggJGxpYicKKyAgOzsKKworc3Vub3M0KikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3Vzci9ldGMiIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgIG5lZWRfbGliX3ByZWZpeD1ubworICBmaQorICBuZWVkX3ZlcnNpb249eWVzCisgIDs7CisKK3N5c3Y0IHwgc3lzdjQuMyopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgICBzbmkpCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICAgIDs7CisgICAgc2llbWVucykKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBtb3Rvcm9sYSkKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCisgICAgICA7OworICBlc2FjCisgIDs7CisKK3N5c3Y0Kk1QKikKKyAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorICAgIHZlcnNpb25fdHlwZT1saW51eAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3InCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgZmkKKyAgOzsKKworc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLWVsZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJworICBlbHNlCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgc2NvMy4ydjUqKQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL2xpYiIKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbGliJworICA7OworCit0cGYqKQorICAjIFRQRiBpcyBhIGNyb3NzLXRhcmdldCBvbmx5LiAgUHJlZmVycmVkIGNyb3NzLWhvc3QgPSBHTlUvTGludXguCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCit1dHM0KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCisqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworZXNhYworQUNfTVNHX1JFU1VMVChbJGR5bmFtaWNfbGlua2VyXSkKK3Rlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgorZmkKKworaWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgorZmkKK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIKK2ZpCisKK19MVF9ERUNMKFtdLCBbdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmtdLCBbMV0sCisgICAgW1ZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAorICAgIHJlc3RvcmVkIGF0IGxpbmsgdGltZV0pCitfTFRfREVDTChbXSwgW25lZWRfbGliX3ByZWZpeF0sIFswXSwKKyAgICBbRG8gd2UgbmVlZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzP10pCitfTFRfREVDTChbXSwgW25lZWRfdmVyc2lvbl0sIFswXSwgW0RvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/XSkKK19MVF9ERUNMKFtdLCBbdmVyc2lvbl90eXBlXSwgWzBdLCBbTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGVdKQorX0xUX0RFQ0woW10sIFtydW5wYXRoX3Zhcl0sIFswXSwgIFtTaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGVdKQorX0xUX0RFQ0woW10sIFtzaGxpYnBhdGhfdmFyXSwgWzBdLFtTaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlXSkKK19MVF9ERUNMKFtdLCBbc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoXSwgWzBdLAorICAgIFtJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/XSkKK19MVF9ERUNMKFtdLCBbbGlibmFtZV9zcGVjXSwgWzFdLCBbRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXhdKQorX0xUX0RFQ0woW10sIFtsaWJyYXJ5X25hbWVzX3NwZWNdLCBbMV0sCisgICAgW1tMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgorICAgIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUVdXSkKK19MVF9ERUNMKFtdLCBbc29uYW1lX3NwZWNdLCBbMV0sCisgICAgW1tUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZV1dKQorX0xUX0RFQ0woW10sIFtwb3N0aW5zdGFsbF9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kIHRvIHVzZSBhZnRlciBpbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfREVDTChbXSwgW3Bvc3R1bmluc3RhbGxfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZCB0byB1c2UgYWZ0ZXIgdW5pbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfREVDTChbXSwgW2ZpbmlzaF9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnldKQorX0xUX0RFQ0woW10sIFtmaW5pc2hfZXZhbF0sIFsxXSwKKyAgICBbW0FzICJmaW5pc2hfY21kcyIsIGV4Y2VwdCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dAorICAgIG5vdCBzaG93bl1dKQorX0xUX0RFQ0woW10sIFtoYXJkY29kZV9pbnRvX2xpYnNdLCBbMF0sCisgICAgW1doZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXNdKQorX0xUX0RFQ0woW10sIFtzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWNdLCBbMl0sCisgICAgW0NvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllc10pCitfTFRfREVDTChbXSwgW3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjXSwgWzJdLAorICAgIFtSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllc10pCitdKSMgX0xUX1NZU19EWU5BTUlDX0xJTktFUgorCisKKyMgX0xUX1BBVEhfVE9PTF9QUkVGSVgoVE9PTCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZmluZCBhIGZpbGUgcHJvZ3JhbSB3aGljaCBjYW4gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJ5CitBQ19ERUZVTihbX0xUX1BBVEhfVE9PTF9QUkVGSVhdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK0FDX01TR19DSEVDS0lORyhbZm9yICQxXSkKK0FDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX01BR0lDX0NNRCwKK1tjYXNlICRNQUdJQ19DTUQgaW4KK1tbXFwvKl0gfCAgPzpbXFwvXSpdKQorICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisqKQorICBsdF9zYXZlX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIKKyAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitkbmwgJGFjX2R1bW15IGZvcmNlcyBzcGxpdHRpbmcgb24gY29uc3RhbnQgdXNlci1zdXBwbGllZCBwYXRocy4KK2RubCBQT1NJWC4yIHdvcmQgc3BsaXR0aW5nIGlzIGRvbmUgb25seSBvbiB0aGUgb3V0cHV0IG9mIHdvcmQgZXhwYW5zaW9ucywKK2RubCBub3QgZXZlcnkgd29yZC4gIFRoaXMgY2xvc2VzIGEgbG9uZ3N0YW5kaW5nIHNoIHNlY3VyaXR5IGhvbGUuCisgIGFjX2R1bW15PSJtNF9pZihbJDJdLCAsICRQQVRILCBbJDJdKSIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvJDE7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkYWNfZGlyLyQxIgorICAgICAgaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfdGVzdF9maWxlIjsgdGhlbgorCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisJImZpbGVfbWFnaWMgIiopCisJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogImZpbGVfbWFnaWMgXCguKlwpImAKKwkgIE1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgorCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAorCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgIGNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAorKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgorKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCisqKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKKyoqKiBkZXBlbmQgb24gc2hhcmVkIGxpYnJhcmllcywgYnV0IHByb2dyYW1zIGxpbmtlZCB3aXRoIHN1Y2ggbGlidG9vbAorKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQorKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bworKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKKworX0xUX0VPRgorCSAgZmkgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorICBNQUdJQ19DTUQ9IiRsdF9zYXZlX01BR0lDX0NNRCIKKyAgOzsKK2VzYWNdKQorTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCitpZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKCRNQUdJQ19DTUQpCitlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCitmaQorX0xUX0RFQ0woW10sIFtNQUdJQ19DTURdLCBbMF0sCisJIFtVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdpY19jbWQgYmVnaW5zIHdpdGggImZpbGUiXSlkbmwKK10pIyBfTFRfUEFUSF9UT09MX1BSRUZJWAorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX1BBVEhfVE9PTF9QUkVGSVhdLCBbX0xUX1BBVEhfVE9PTF9QUkVGSVhdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19QQVRIX1RPT0xfUFJFRklYXSwgW10pCisKKworIyBfTFRfUEFUSF9NQUdJQworIyAtLS0tLS0tLS0tLS0tLQorIyBmaW5kIGEgZmlsZSBwcm9ncmFtIHdoaWNoIGNhbiByZWNvZ25pemUgYSBzaGFyZWQgbGlicmFyeQorbTRfZGVmdW4oW19MVF9QQVRIX01BR0lDXSwKK1tfTFRfUEFUSF9UT09MX1BSRUZJWCgke2FjX3Rvb2xfcHJlZml4fWZpbGUsIC91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgpCitpZiB0ZXN0IC16ICIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICBfTFRfUEFUSF9UT09MX1BSRUZJWChmaWxlLCAvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIKQorICBlbHNlCisgICAgTUFHSUNfQ01EPToKKyAgZmkKK2ZpCitdKSMgX0xUX1BBVEhfTUFHSUMKKworCisjIExUX1BBVEhfTEQKKyMgLS0tLS0tLS0tLQorIyBmaW5kIHRoZSBwYXRobmFtZSB0byB0aGUgR05VIG9yIG5vbi1HTlUgbGlua2VyCitBQ19ERUZVTihbTFRfUEFUSF9MRF0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfQlVJTERdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKKworQUNfQVJHX1dJVEgoW2dudS1sZF0sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtZ251LWxkXSwKKwlbYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIEA8OkBkZWZhdWx0PW5vQDo+QF0pXSwKKyAgICBbdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzXSwKKyAgICBbd2l0aF9nbnVfbGQ9bm9dKWRubAorCithY19wcm9nPWxkCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgbGQgdXNlZCBieSAkQ0NdKQorICBjYXNlICRob3N0IGluCisgICotKi1taW5ndyopCisgICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuIHdoaWNoIHVwc2V0cyBtaW5ndworICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKKyAgKikKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7CisgIGVzYWMKKyAgY2FzZSAkYWNfcHJvZyBpbgorICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgorICAgIFtbXFwvXV0qIHwgPzpbW1xcL11dKikKKyAgICAgIHJlX2RpcmVsdD0nL1tbXi9dXVtbXi9dXSovXC5cLi8nCisgICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUgb2YgbGQKKyAgICAgIGFjX3Byb2c9YCRFQ0hPICIkYWNfcHJvZyJ8ICRTRUQgJ3MlXFxcXCUvJWcnYAorICAgICAgd2hpbGUgJEVDSE8gIiRhY19wcm9nIiB8ICRHUkVQICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbworCWFjX3Byb2c9YCRFQ0hPICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAorICAgICAgZG9uZQorICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCisgICAgICA7OworICAiIikKKyAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKyAgICBhY19wcm9nPWxkCisgICAgOzsKKyAgKikKKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorICAgIDs7CisgIGVzYWMKK2VsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBHTlUgbGRdKQorZWxzZQorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBub24tR05VIGxkXSkKK2ZpCitBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9MRCwKK1tpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCisgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgorICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAorICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIHZhcmlhbnRzIG9mIEdOVSBsZCBvbmx5IGFjY2VwdCAtdi4KKyAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgorICAgICAgY2FzZSBgIiRsdF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwvZGV2L251bGxgIGluCisgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IG5vICYmIGJyZWFrCisJOzsKKyAgICAgICopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSB5ZXMgJiYgYnJlYWsKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkbHRfc2F2ZV9pZnMiCitlbHNlCisgIGx0X2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCitmaV0pCitMRD0iJGx0X2N2X3BhdGhfTEQiCitpZiB0ZXN0IC1uICIkTEQiOyB0aGVuCisgIEFDX01TR19SRVNVTFQoJExEKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vKQorZmkKK3Rlc3QgLXogIiRMRCIgJiYgQUNfTVNHX0VSUk9SKFtubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSF0pCitfTFRfUEFUSF9MRF9HTlUKK0FDX1NVQlNUKFtMRF0pCisKK19MVF9UQUdERUNMKFtdLCBbTERdLCBbMV0sIFtUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzXSkKK10pIyBMVF9QQVRIX0xECisKKyMgT2xkIG5hbWVzOgorQVVfQUxJQVMoW0FNX1BST0dfTERdLCBbTFRfUEFUSF9MRF0pCitBVV9BTElBUyhbQUNfUFJPR19MRF0sIFtMVF9QQVRIX0xEXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQU1fUFJPR19MRF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19QUk9HX0xEXSwgW10pCisKKworIyBfTFRfUEFUSF9MRF9HTlUKKyMtIC0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1BBVEhfTERfR05VXSwKK1tBQ19DQUNIRV9DSEVDSyhbaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGRdLCBsdF9jdl9wcm9nX2dudV9sZCwKK1sjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCitjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIGx0X2N2X3Byb2dfZ251X2xkPXllcworICA7OworKikKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9bm8KKyAgOzsKK2VzYWNdKQord2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCitdKSMgX0xUX1BBVEhfTERfR05VCisKKworIyBfTFRfQ01EX1JFTE9BRAorIyAtLS0tLS0tLS0tLS0tLQorIyBmaW5kIHJlbG9hZCBmbGFnIGZvciBsaW5rZXIKKyMgICAtLSBQT1JUTUUgU29tZSBsaW5rZXJzIG1heSBuZWVkIGEgZGlmZmVyZW50IHJlbG9hZCBmbGFnLgorbTRfZGVmdW4oW19MVF9DTURfUkVMT0FEXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlc10sCisgIGx0X2N2X2xkX3JlbG9hZF9mbGFnLAorICBbbHRfY3ZfbGRfcmVsb2FkX2ZsYWc9Jy1yJ10pCityZWxvYWRfZmxhZz0kbHRfY3ZfbGRfcmVsb2FkX2ZsYWcKK2Nhc2UgJHJlbG9hZF9mbGFnIGluCisiIiB8ICIgIiopIDs7CisqKSByZWxvYWRfZmxhZz0iICRyZWxvYWRfZmxhZyIgOzsKK2VzYWMKK3JlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgZGFyd2luKikKKyAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGVsc2UKKyAgICAgIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyAgICBmaQorICAgIDs7Citlc2FjCitfTFRfREVDTChbXSwgW3JlbG9hZF9mbGFnXSwgWzFdLCBbSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlc10pZG5sCitfTFRfREVDTChbXSwgW3JlbG9hZF9jbWRzXSwgWzJdKWRubAorXSkjIF9MVF9DTURfUkVMT0FECisKKworIyBfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9ECisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaG93IHRvIGNoZWNrIGZvciBsaWJyYXJ5IGRlcGVuZGVuY2llcworIyAgLS0gUE9SVE1FIGZpbGwgaW4gd2l0aCB0aGUgZHluYW1pYyBsaWJyYXJ5IGNoYXJhY3RlcmlzdGljcworbTRfZGVmdW4oW19MVF9DSEVDS19NQUdJQ19NRVRIT0RdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSkKK200X3JlcXVpcmUoW19MVF9ERUNMX09CSkRVTVBdKQorQUNfQ0FDSEVfQ0hFQ0soW2hvdyB0byByZWNvZ25pemUgZGVwZW5kZW50IGxpYnJhcmllc10sCitsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCwKK1tsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE1BR0lDX0NNRCcKK2x0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPQorbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J3Vua25vd24nCisjIE5lZWQgdG8gc2V0IHRoZSBwcmVjZWRpbmcgdmFyaWFibGUgb24gYWxsIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQKKyMgaW50ZXJsaWJyYXJ5IGRlcGVuZGVuY2llcy4KKyMgJ25vbmUnIC0tIGRlcGVuZGVuY2llcyBub3Qgc3VwcG9ydGVkLgorIyBgdW5rbm93bicgLS0gc2FtZSBhcyBub25lLCBidXQgZG9jdW1lbnRzIHRoYXQgd2UgcmVhbGx5IGRvbid0IGtub3cuCisjICdwYXNzX2FsbCcgLS0gYWxsIGRlcGVuZGVuY2llcyBwYXNzZWQgd2l0aCBubyBjaGVja3MuCisjICd0ZXN0X2NvbXBpbGUnIC0tIGNoZWNrIGJ5IG1ha2luZyB0ZXN0IHByb2dyYW0uCisjICdmaWxlX21hZ2ljIFtbcmVnZXhdXScgLS0gY2hlY2sgYnkgbG9va2luZyBmb3IgZmlsZXMgaW4gbGlicmFyeSBwYXRoCisjIHdoaWNoIHJlc3BvbmRzIHRvIHRoZSAkZmlsZV9tYWdpY19jbWQgd2l0aCBhIGdpdmVuIGV4dGVuZGVkIHJlZ2V4LgorIyBJZiB5b3UgaGF2ZSBgZmlsZScgb3IgZXF1aXZhbGVudCBvbiB5b3VyIHN5c3RlbSBhbmQgeW91J3JlIG5vdCBzdXJlCisjIHdoZXRoZXIgYHBhc3NfYWxsJyB3aWxsICphbHdheXMqIHdvcmssIHlvdSBwcm9iYWJseSB3YW50IHRoaXMgb25lLgorCitjYXNlICRob3N0X29zIGluCithaXhbWzQtOV1dKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworYmVvcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2JzZGlbWzQ1XV0qKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW01MXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiknCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvdXNyL2Jpbi9maWxlIC1MJworICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vc2hsaWIvbGliYy5zbworICA7OworCitjeWd3aW4qKQorICAjIGZ1bmNfd2luMzJfbGliaWQgaXMgYSBzaGVsbCBmdW5jdGlvbiBkZWZpbmVkIGluIGx0bWFpbi5zaAorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgOzsKKworbWluZ3cqIHwgcHczMiopCisgICMgQmFzZSBNU1lTL01pbkdXIGRvIG5vdCBwcm92aWRlIHRoZSAnZmlsZScgY29tbWFuZCBuZWVkZWQgYnkKKyAgIyBmdW5jX3dpbjMyX2xpYmlkIHNoZWxsIGZ1bmN0aW9uLCBzbyB1c2UgYSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcsCisgICMgdW5sZXNzIHdlIGZpbmQgJ2ZpbGUnLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHdlIGFyZSBjcm9zcy1jb21waWxpbmcuCisgIGlmICggZmlsZSAvICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgZmkKKyAgOzsKKworY2VnY2MpCisgICMgdXNlIHRoZSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcuIFNlZSBtaW5ndyouCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlLWFybS0uKmxpdHRsZSguKmFyY2hpdGVjdHVyZTogYXJtKT8nCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICBjYXNlICRob3N0X2NwdSBpbgorICAgIGkqODYgKQorICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHRoZSBwcmVzZW5jZSBvZiBPcGVuQlNEIGhlcmUgd2FzIGEgbWlzdGFrZS4KKyAgICAgICMgTGV0J3MgYWNjZXB0IGJvdGggb2YgdGhlbSB1bnRpbCB0aGlzIGlzIGNsZWFyZWQgdXAuCisgICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoRnJlZUJTRHxPcGVuQlNEfERyYWdvbkZseSkvaVtbMy05XV04NiAoY29tcGFjdCApP2RlbWFuZCBwYWdlZCBzaGFyZWQgbGlicmFyeScKKyAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28uKmAKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgZmkKKyAgOzsKKworZ251KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworaHB1eDEwLjIwKiB8IGhwdXgxMSopCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgaWE2NCopCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbWzAtOV1dW1swLTldXVtbMC05XV18RUxGLVtbMC05XV1bWzAtOV1dKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBJQTY0JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2hwdXgzMi9saWJjLnNvCisgICAgOzsKKyAgaHBwYSo2NCopCisgICAgW2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRi1bMC05XVswLTldKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBQQS1SSVNDIFswLTldLlswLTldJ10KKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9wYTIwXzY0L2xpYmMuc2wKKyAgICA7OworICAqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzW1swLTldXVtbMC05XV1bWzAtOV1dfFBBLVJJU0NbWzAtOV1dLltbMC05XV0pIHNoYXJlZCBsaWJyYXJ5JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYmMuc2wKKyAgICA7OworICBlc2FjCisgIDs7CisKK2ludGVyaXhbWzMtOV1dKikKKyAgIyBQSUMgY29kZSBpcyBicm9rZW4gb24gSW50ZXJpeCAzLngsIHRoYXQncyB3aHkgfFwuYSBub3QgfF9waWNcLmEgaGVyZQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvfFwuYSkkJworICA7OworCitpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICBjYXNlICRMRCBpbgorICAqLTMyfCoiLTMyICIpIGxpYm1hZ2ljPTMyLWJpdDs7CisgICotbjMyfCoiLW4zMiAiKSBsaWJtYWdpYz1OMzI7OworICAqLTY0fCoiLTY0ICIpIGxpYm1hZ2ljPTY0LWJpdDs7CisgICopIGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgZXNhYworICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCisjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCitsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK25ldGJzZCogfCBuZXRic2RlbGYqLWdudSkKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc298X3BpY1wuYSkkJworICBmaQorICA7OworCituZXdvczYqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW01MXV1TQiAoZXhlY3V0YWJsZXxkeW5hbWljIGxpYiknCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGlibmxzLnNvCisgIDs7CisKKypudG8qIHwgKnFueCopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK29wZW5ic2QqKQorICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfFwuc298X3BpY1wuYSkkJworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCityZG9zKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc29sYXJpcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICBjYXNlICRob3N0X3ZlbmRvciBpbgorICBtb3Rvcm9sYSkKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW01MXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYikgTVtbMC05XV1bWzAtOV1dKiBWZXJzaW9uIFtbMC05XV0nCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zbypgCisgICAgOzsKKyAgbmNyKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgc2VxdWVudCkKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTE1dXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliICknCisgICAgOzsKKyAgc25pKQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9ImZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tMTV1dU0IgZHluYW1pYyBsaWIiCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L2xpYi9saWJjLnNvCisgICAgOzsKKyAgc2llbWVucykKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIHBjKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgZXNhYworICA7OworCit0cGYqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworZXNhYworXSkKK2ZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCit0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKworX0xUX0RFQ0woW10sIFtkZXBsaWJzX2NoZWNrX21ldGhvZF0sIFsxXSwKKyAgICBbTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHNdKQorX0xUX0RFQ0woW10sIFtmaWxlX21hZ2ljX2NtZF0sIFsxXSwKKyAgICBbQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSAiZmlsZV9tYWdpYyJdKQorXSkjIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QKKworCisjIExUX1BBVEhfTk0KKyMgLS0tLS0tLS0tLQorIyBmaW5kIHRoZSBwYXRobmFtZSB0byBhIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlcgorQUNfREVGVU4oW0xUX1BBVEhfTk1dLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfQ0FDSEVfQ0hFQ0soW2ZvciBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIgKG5tKV0sIGx0X2N2X3BhdGhfTk0sCitbaWYgdGVzdCAtbiAiJE5NIjsgdGhlbgorICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgbHRfY3ZfcGF0aF9OTT0iJE5NIgorZWxzZQorICBsdF9ubV90b19jaGVjaz0iJHthY190b29sX3ByZWZpeH1ubSIKKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IiAmJiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorICAgIGx0X25tX3RvX2NoZWNrPSIkbHRfbm1fdG9fY2hlY2sgbm0iCisgIGZpCisgIGZvciBsdF90bXBfbm0gaW4gJGx0X25tX3RvX2NoZWNrOyBkbworICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAgIGZvciBhY19kaXIgaW4gJFBBVEggL3Vzci9jY3MvYmluL2VsZiAvdXNyL2Njcy9iaW4gL3Vzci91Y2IgL2JpbjsgZG8KKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICAgIHRtcF9ubT0iJGFjX2Rpci8kbHRfdG1wX25tIgorICAgICAgaWYgdGVzdCAtZiAiJHRtcF9ubSIgfHwgdGVzdCAtZiAiJHRtcF9ubSRhY19leGVleHQiIDsgdGhlbgorCSMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBubSBhY2NlcHRzIGEgQlNELWNvbXBhdCBmbGFnLgorCSMgQWRkaW5nIHRoZSBgc2VkIDFxJyBwcmV2ZW50cyBmYWxzZSBwb3NpdGl2ZXMgb24gSFAtVVgsIHdoaWNoIHNheXM6CisJIyAgIG5tOiB1bmtub3duIG9wdGlvbiAiQiIgaWdub3JlZAorCSMgVHJ1NjQncyBubSBjb21wbGFpbnMgdGhhdCAvZGV2L251bGwgaXMgYW4gaW52YWxpZCBvYmplY3QgZmlsZQorCWNhc2UgYCIkdG1wX25tIiAtQiAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorCSovZGV2L251bGwqIHwgKidJbnZhbGlkIGZpbGUgb3Igb2JqZWN0IHR5cGUnKikKKwkgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLUIiCisJICBicmVhaworCSAgOzsKKwkqKQorCSAgY2FzZSBgIiR0bXBfbm0iIC1wIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisJICAqL2Rldi9udWxsKikKKwkgICAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtcCIKKwkgICAgYnJlYWsKKwkgICAgOzsKKwkgICopCisJICAgIGx0X2N2X3BhdGhfTk09JHtsdF9jdl9wYXRoX05NPSIkdG1wX25tIn0gIyBrZWVwIHRoZSBmaXJzdCBtYXRjaCwgYnV0CisJICAgIGNvbnRpbnVlICMgc28gdGhhdCB3ZSBjYW4gdHJ5IHRvIGZpbmQgb25lIHRoYXQgc3VwcG9ydHMgQlNEIGZsYWdzCisJICAgIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgZG9uZQorICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICBkb25lCisgIDogJHtsdF9jdl9wYXRoX05NPW5vfQorZmldKQoraWYgdGVzdCAiJGx0X2N2X3BhdGhfTk0iICE9ICJubyI7IHRoZW4KKyAgTk09IiRsdF9jdl9wYXRoX05NIgorZWxzZQorICAjIERpZG4ndCBmaW5kIGFueSBCU0QgY29tcGF0aWJsZSBuYW1lIGxpc3RlciwgbG9vayBmb3IgZHVtcGJpbi4KKyAgQUNfQ0hFQ0tfVE9PTFMoRFVNUEJJTiwgWyJkdW1wYmluIC1zeW1ib2xzIiAibGluayAtZHVtcCAtc3ltYm9scyJdLCA6KQorICBBQ19TVUJTVChbRFVNUEJJTl0pCisgIGlmIHRlc3QgIiREVU1QQklOIiAhPSAiOiI7IHRoZW4KKyAgICBOTT0iJERVTVBCSU4iCisgIGZpCitmaQordGVzdCAteiAiJE5NIiAmJiBOTT1ubQorQUNfU1VCU1QoW05NXSkKK19MVF9ERUNMKFtdLCBbTk1dLCBbMV0sIFtBIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3Rlcl0pZG5sCisKK0FDX0NBQ0hFX0NIRUNLKFt0aGUgbmFtZSBsaXN0ZXIgKCROTSkgaW50ZXJmYWNlXSwgW2x0X2N2X25tX2ludGVyZmFjZV0sCisgIFtsdF9jdl9ubV9pbnRlcmZhY2U9IkJTRCBubSIKKyAgZWNobyAiaW50IHNvbWVfdmFyaWFibGUgPSAwOyIgPiBjb25mdGVzdC4kYWNfZXh0CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTpfX29saW5lX186ICRhY19jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgIChldmFsICIkYWNfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6X19vbGluZV9fOiAkTk0gXFxcImNvbmZ0ZXN0LiRhY19vYmpleHRcXFwiXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgIChldmFsICIkTk0gXCJjb25mdGVzdC4kYWNfb2JqZXh0XCIiIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0KQorICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOl9fb2xpbmVfXzogb3V0cHV0XCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgIGNhdCBjb25mdGVzdC5vdXQgPiZBU19NRVNTQUdFX0xPR19GRAorICBpZiAkR1JFUCAnRXh0ZXJuYWwuKnNvbWVfdmFyaWFibGUnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X25tX2ludGVyZmFjZT0iTVMgZHVtcGJpbiIKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QqXSkKK10pIyBMVF9QQVRIX05NCisKKyMgT2xkIG5hbWVzOgorQVVfQUxJQVMoW0FNX1BST0dfTk1dLCBbTFRfUEFUSF9OTV0pCitBVV9BTElBUyhbQUNfUFJPR19OTV0sIFtMVF9QQVRIX05NXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQU1fUFJPR19OTV0sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19QUk9HX05NXSwgW10pCisKKworIyBMVF9MSUJfTQorIyAtLS0tLS0tLQorIyBjaGVjayBmb3IgbWF0aCBsaWJyYXJ5CitBQ19ERUZVTihbTFRfTElCX01dLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0xJQk09CitjYXNlICRob3N0IGluCisqLSotYmVvcyogfCAqLSotY3lnd2luKiB8ICotKi1wdzMyKiB8ICotKi1kYXJ3aW4qKQorICAjIFRoZXNlIHN5c3RlbSBkb24ndCBoYXZlIGxpYm0sIG9yIGRvbid0IG5lZWQgaXQKKyAgOzsKKyotbmNyLXN5c3Y0LjMqKQorICBBQ19DSEVDS19MSUIobXcsIF9td3ZhbGlkY2hlY2tsLCBMSUJNPSItbG13IikKKyAgQUNfQ0hFQ0tfTElCKG0sIGNvcywgTElCTT0iJExJQk0gLWxtIikKKyAgOzsKKyopCisgIEFDX0NIRUNLX0xJQihtLCBjb3MsIExJQk09Ii1sbSIpCisgIDs7Citlc2FjCitBQ19TVUJTVChbTElCTV0pCitdKSMgTFRfTElCX00KKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19DSEVDS19MSUJNXSwgW0xUX0xJQl9NXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfQ0hFQ0tfTElCTV0sIFtdKQorCisKKyMgX0xUX0NPTVBJTEVSX05PX1JUVEkoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NPTVBJTEVSX05PX1JUVEldLAorW200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorCitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9CisKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1mbm8tYnVpbHRpbicKKworICBfTFRfQ09NUElMRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9uc10sCisgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMsCisgICAgWy1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnNdLCBbXSwKKyAgICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPSIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiXSkKK2ZpCitfTFRfVEFHREVDTChbbm9fYnVpbHRpbl9mbGFnXSwgW2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnXSwgWzFdLAorCVtDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zXSkKK10pIyBfTFRfQ09NUElMRVJfTk9fUlRUSQorCisKKyMgX0xUX0NNRF9HTE9CQUxfU1lNQk9MUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX05NXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorCisjIENoZWNrIGZvciBjb21tYW5kIHRvIGdyYWIgdGhlIHJhdyBzeW1ib2wgbmFtZSBmb2xsb3dlZCBieSBDIHN5bWJvbCBmcm9tIG5tLgorQUNfTVNHX0NIRUNLSU5HKFtjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0XSkKK0FDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZV0sCitbCisjIFRoZXNlIGFyZSBzYW5lIGRlZmF1bHRzIHRoYXQgd29yayBvbiBhdCBsZWFzdCBhIGZldyBvbGQgc3lzdGVtcy4KKyMgW1RoZXkgY29tZSBmcm9tIFVsdHJpeC4gIFdoYXQgY291bGQgYmUgb2xkZXIgdGhhbiBVbHRyaXg/ISEgOyldCisKKyMgQ2hhcmFjdGVyIGNsYXNzIGRlc2NyaWJpbmcgTk0gZ2xvYmFsIHN5bWJvbCBjb2Rlcy4KK3N5bWNvZGU9J1tbQkNERUdSU1RdXScKKworIyBSZWdleHAgdG8gbWF0Y2ggc3ltYm9scyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIEMuCitzeW1wYXQ9J1woW1tfQS1aYS16XV1bW19BLVphLXowLTldXSpcKScKKworIyBEZWZpbmUgc3lzdGVtLXNwZWNpZmljIHZhcmlhYmxlcy4KK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeCopCisgIHN5bWNvZGU9J1tbQkNEVF1dJworICA7OworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICBzeW1jb2RlPSdbW0FCQ0RHSVNUV11dJworICA7OworaHB1eCopCisgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgc3ltY29kZT0nW1tBQkNERUdSU1RdXScKKyAgZmkKKyAgOzsKK2lyaXgqIHwgbm9uc3RvcHV4KikKKyAgc3ltY29kZT0nW1tCQ0RFR1JTVF1dJworICA7Oworb3NmKikKKyAgc3ltY29kZT0nW1tCQ0RFR1FSU1RdXScKKyAgOzsKK3NvbGFyaXMqKQorICBzeW1jb2RlPSdbW0JEUlRdXScKKyAgOzsKK3NjbzMuMnY1KikKKyAgc3ltY29kZT0nW1tEVF1dJworICA7Oworc3lzdjQuMnV3MiopCisgIHN5bWNvZGU9J1tbRFRdXScKKyAgOzsKK3N5c3Y1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgIHN5bWNvZGU9J1tbQUJEVF1dJworICA7Oworc3lzdjQpCisgIHN5bWNvZGU9J1tbREZOU1RVXV0nCisgIDs7Citlc2FjCisKKyMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHVzZSBpdHMgc3RhbmRhcmQgc3ltYm9sIGNvZGVzLgorY2FzZSBgJE5NIC1WIDI+JjFgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgc3ltY29kZT0nW1tBQkNER0lSU1RXXV0nIDs7Citlc2FjCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24uCisjIFNvbWUgc3lzdGVtcyAoZXNwLiBvbiBpYTY0KSBsaW5rIGRhdGEgYW5kIGNvZGUgc3ltYm9scyBkaWZmZXJlbnRseSwKKyMgc28gdXNlIHRoaXMgZ2VuZXJhbCBhcHByb2FjaC4KK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwobGliW1teIF1dKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKworIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCitvcHRfY3I9CitjYXNlICRidWlsZF9vcyBpbgorbWluZ3cqKQorICBvcHRfY3I9YCRFQ0hPICd4XHswLDFcfScgfCB0ciB4ICdcMDE1J2AgIyBvcHRpb24gY3IgaW4gcmVnZXhwCisgIDs7Citlc2FjCisKKyMgVHJ5IHdpdGhvdXQgYSBwcmVmaXggdW5kZXJzY29yZSwgdGhlbiB3aXRoIGl0LgorZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworCisgICMgVHJhbnNmb3JtIHN5bWNvZGUsIHN5bXBhdCwgYW5kIHN5bXByZnggaW50byBhIHJhdyBzeW1ib2wgYW5kIGEgQyBzeW1ib2wuCisgIHN5bXhmcm09IlxcMSAkYWNfc3ltcHJmeFxcMiBcXDIiCisKKyAgIyBXcml0ZSB0aGUgcmF3IGFuZCBDIGlkZW50aWZpZXJzLgorICBpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorICAgICMgRmFrZSBpdCBmb3IgZHVtcGJpbiBhbmQgc2F5IFQgZm9yIGFueSBub24tc3RhdGljIGZ1bmN0aW9uCisgICAgIyBhbmQgRCBmb3IgYW55IGdsb2JhbCB2YXJpYWJsZS4KKyAgICAjIEFsc28gZmluZCBDKysgYW5kIF9fZmFzdGNhbGwgc3ltYm9scyBmcm9tIE1TVkMrKywKKyAgICAjIHdoaWNoIHN0YXJ0IHdpdGggQCBvciA/LgorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRBV0sgWyciXAorIiAgICAge2xhc3Rfc2VjdGlvbj1zZWN0aW9uOyBzZWN0aW9uPVwkIDN9OyJcCisiICAgICAvU2VjdGlvbiBsZW5ndGggLiojcmVsb2NzLioocGljayBhbnkpL3toaWRlW2xhc3Rfc2VjdGlvbl09MX07IlwKKyIgICAgIFwkIDAhfi9FeHRlcm5hbCAqXHwve25leHR9OyJcCisiICAgICAvIDArIFVOREVGIC97bmV4dH07IC8gVU5ERUYgXChbXnxdXCkqKCkve25leHR9OyJcCisiICAgICB7aWYoaGlkZVtzZWN0aW9uXSkgbmV4dH07IlwKKyIgICAgIHtmPTB9OyBcJCAwfi9cKFwpLipcfC97Zj0xfTsge3ByaW50ZiBmID8gXCJUIFwiIDogXCJEIFwifTsiXAorIiAgICAge3NwbGl0KFwkIDAsIGEsIC9cfHxcci8pOyBzcGxpdChhWzJdLCBzKX07IlwKKyIgICAgIHNbMV1+L15bQD9dL3twcmludCBzWzFdLCBzWzFdOyBuZXh0fTsiXAorIiAgICAgc1sxXX5wcmZ4IHtzcGxpdChzWzFdLHQsXCJAXCIpOyBwcmludCB0WzFdLCBzdWJzdHIodFsxXSxsZW5ndGgocHJmeCkpfSJcCisiICAgICAnIHByZng9XiRhY19zeW1wcmZ4XSIKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbWwkgXV1cKCRzeW1jb2RlJHN5bWNvZGUqXClbWwkgXV1bWwkgXV0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgIGZpCisKKyAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgIHBpcGVfd29ya3M9bm8KKworICBybSAtZiBjb25mdGVzdCoKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKK2NoYXIgbm1fdGVzdF92YXI7Cit2b2lkIG5tX3Rlc3RfZnVuYyh2b2lkKTsKK3ZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpe30KKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCitpbnQgbWFpbigpe25tX3Rlc3RfdmFyPSdhJztubV90ZXN0X2Z1bmMoKTtyZXR1cm4oMCk7fQorX0xUX0VPRgorCisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgIyBOb3cgdHJ5IHRvIGdyYWIgdGhlIHN5bWJvbHMuCisgICAgbmxpc3Q9Y29uZnRlc3Qubm0KKyAgICBpZiBBQ19UUllfRVZBTChOTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFw+ICRubGlzdCkgJiYgdGVzdCAtcyAiJG5saXN0IjsgdGhlbgorICAgICAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KKyAgICAgIGlmIHNvcnQgIiRubGlzdCIgfCB1bmlxID4gIiRubGlzdCJUOyB0aGVuCisJbXYgLWYgIiRubGlzdCJUICIkbmxpc3QiCisgICAgICBlbHNlCisJcm0gLWYgIiRubGlzdCJUCisgICAgICBmaQorCisgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdlIHNuYWdnZWQgYWxsIHRoZSBzeW1ib2xzIHdlIG5lZWQuCisgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworX0xUX0VPRgorCSAgIyBOb3cgZ2VuZXJhdGUgdGhlIHN5bWJvbCBmaWxlLgorCSAgZXZhbCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIicgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dCcKKworCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisKKy8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KK2NvbnN0IHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIHZvaWQgICAgICAgKmFkZHJlc3M7Cit9CitsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW1tdXSA9Cit7CisgIHsgIkBQUk9HUkFNQCIsICh2b2lkICopIDAgfSwKK19MVF9FT0YKKwkgICRTRUQgInMvXiRzeW1jb2RlJHN5bWNvZGUqIFwoLipcKSBcKC4qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sLyIgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dAorCSAgY2F0IDw8XF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorICB7MCwgKHZvaWQgKikgMH0KK307CisKKy8qIFRoaXMgd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBGcmVlQlNEIGxpbmtlciAqLworI2lmZGVmIEZSRUVCU0RfV09SS0FST1VORAorc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyAgcmV0dXJuIGx0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHM7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK19MVF9FT0YKKwkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKwkgIGx0X3NhdmVfTElCUz0iJExJQlMiCisJICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKwkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisJICBDRkxBR1M9IiRDRkxBR1MkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIgorCSAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorCSAgICBwaXBlX3dvcmtzPXllcworCSAgZmkKKwkgIExJQlM9IiRsdF9zYXZlX0xJQlMiCisJICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKKwllbHNlCisJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECisJZmkKKyAgICAgIGVsc2UKKwllY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X3ZhciBpbiAkbmxpc3QiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgZWNobyAiY2Fubm90IHJ1biAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgIGZpCisgIGVsc2UKKyAgICBlY2hvICIkcHJvZ25hbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mdHN0KgorCisgICMgRG8gbm90IHVzZSB0aGUgZ2xvYmFsX3N5bWJvbF9waXBlIHVubGVzcyBpdCB3b3Jrcy4KKyAgaWYgdGVzdCAiJHBpcGVfd29ya3MiID0geWVzOyB0aGVuCisgICAgYnJlYWsKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9CisgIGZpCitkb25lCitdKQoraWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPQorZmkKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKGZhaWxlZCkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChvaykKK2ZpCisKK19MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3BpcGVdLCBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZV0sIFsxXSwKKyAgICBbVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lc10pCitfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jZGVjbF0sIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbF0sIFsxXSwKKyAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbl0pCitfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc10sCisgICAgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzXSwgWzFdLAorICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXJdKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeF0sCisgICAgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLCBbMV0sCisgICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkXSkKK10pICMgX0xUX0NNRF9HTE9CQUxfU1lNQk9MUworCisKKyMgX0xUX0NPTVBJTEVSX1BJQyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9QSUNdLAorW200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9CitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9CisKK0FDX01TR19DSEVDS0lORyhbZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUNdKQorbTRfaWYoWyQxXSwgW0NYWF0sIFsKKyAgIyBDKysgc3BlY2lmaWMgY2FzZXMgZm9yIHBpYywgc3RhdGljLCB3bCwgZXRjLgorICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXgqKQorICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKyAgICAgICAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KKyAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgorICAgICAgOzsKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKKyAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCisgICAgICBtNF9pZihbJDFdLCBbR0NKXSwgW10sCisJW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCisgICAgICA7OworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKyAgICAqZGpncHAqKQorICAgICAgIyBESkdQUCBkb2VzIG5vdCBzdXBwb3J0IHNoYXJlZCBsaWJyYXJpZXMgYXQgYWxsCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisgICAgICA7OworICAgIGludGVyaXhbWzMtOV1dKikKKyAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCisgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KKyAgICAgIDs7CisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0tS2NvbmZvcm1fcGljCisgICAgICBmaQorICAgICAgOzsKKyAgICBocHV4KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciA2NC1iaXQgUEEgSFAtVVgsIGJ1dCBub3QgZm9yIDMyLWJpdAorICAgICAgIyBQQSBIUC1VWC4gIE9uIElBNjQgSFAtVVgsIFBJQyBpcyB0aGUgZGVmYXVsdCBidXQgdGhlIHBpYyBmbGFnCisgICAgICAjIHNldHMgdGhlIGRlZmF1bHQgVExTIG1vZGVsIGFuZCBhZmZlY3RzIGlubGluaW5nLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqKQorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgKnFueCogfCAqbnRvKikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworICAgICopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXhbWzQtOV1dKikKKwkjIEFsbCBBSVggY29kZSBpcyBQSUMuCisJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgICMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCWVsc2UKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworCWZpCisJOzsKKyAgICAgIGNob3J1cyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwljeGNoNjgqKQorCSAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICMgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSItLW5vX2F1dG9faW5zdGFudGlhdGlvbiAtdSBfX21haW4gLXUgX19wcmVtYWluIC11IF9hYm9ydCAtciAkQ09PTF9ESVIvbGliL2xpYk9yYi5hICRNVk1FX0RJUi9saWIvQ0MvbGliQy5hICRNVk1FX0RJUi9saWIvY2xhc3NpeC9saWJjeC5zLmEiCisJICA7OworCWVzYWMKKwk7OworICAgICAgZGd1eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGVjKysqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICA7OworCSAgZ2hjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisJIyBGcmVlQlNEIHVzZXMgR05VIEMrKworCTs7CisgICAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKwkgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKwkgICAgZmkKKwkgICAgOzsKKwkgIGFDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJworCSAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICBocHBhKjY0KnxpYTY0KikKKwkgICAgICAjICtaIHRoZSBkZWZhdWx0CisJICAgICAgOzsKKwkgICAgKikKKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JytaJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBpbnRlcml4KikKKwkjIFRoaXMgaXMgYzg5LCB3aGljaCBpcyBNUyBWaXN1YWwgQysrIChubyBzaGFyZWQgbGlicykKKwkjIEFueW9uZSB3YW50cyB0byBkbyBhIHBvcnQ/CisJOzsKKyAgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisJICAgICMgQ0MgcGljIGZsYWcgLUtQSUMgaXMgdGhlIGRlZmF1bHQuCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBLQ0MqKQorCSAgICAjIEtBSSBDKysgQ29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy0tYmFja2VuZCAtV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCSAgICA7OworCSAgZWNwYyogKQorCSAgICAjIG9sZCBJbnRlbCBDKysgZm9yIHg4Nl82NCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisJICAgIDs7CisJICBpY3BjKiApCisJICAgICMgSW50ZWwgQysrLCB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KKwkgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisJICAgIDs7CisJICBwZ0NDKiB8IHBnY3BwKikKKwkgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZwaWMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgIDs7CisJICBjeHgqKQorCSAgICAjIENvbXBhcSBDKysKKwkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQorCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKwkgICAgOzsKKwkgIHhsYyogfCB4bEMqKQorCSAgICAjIElCTSBYTCA4LjAgb24gUFBDCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1xcGljJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1xc3RhdGljbGluaycKKwkgICAgOzsKKwkgICopCisJICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSAgICAqU3VuXCBDKikKKwkgICAgICAjIFN1biBDKysgNS45CisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbHlueG9zKikKKwk7OworICAgICAgbTg4ayopCisJOzsKKyAgICAgIG12cyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGN4eCopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVcgYyxleHBvcnRhbGwnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQorCTs7CisgICAgICAqcW54KiB8ICpudG8qKQorICAgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgS0NDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy0tYmFja2VuZCAtV2wsJworCSAgICA7OworCSAgUkNDKikKKwkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworCSAgICA7OworCSAgY3h4KikKKwkgICAgIyBEaWdpdGFsL0NvbXBhcSBDKysKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKKwkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgcHNvcyopCisJOzsKKyAgICAgIHNvbGFyaXMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKKwkgICAgOzsKKwkgIGdjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBzdW5vczQqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgICMgU3VuIEMrKyA0LngKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICA7OworCSAgbGNjKikKKwkgICAgIyBMdWNpZAorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHRhbmRlbSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIE5DQyopCisJICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHZ4d29ya3MqKQorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKwk7OworICAgIGVzYWMKKyAgZmkKK10sCitbCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0CisgICAgICAgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICAgICAgICMgbGlrZSBgLW02ODA0MCcuCisgICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKKyAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCisgICAgICBtNF9pZihbJDFdLCBbR0NKXSwgW10sCisJW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCisgICAgICA7OworCisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZuby1jb21tb24nCisgICAgICA7OworCisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKKyAgICAgICMgUEEgSFAtVVguICBPbiBJQTY0IEhQLVVYLCBQSUMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBwaWMgZmxhZworICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGludGVyaXhbWzMtOV1dKikKKyAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCisgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KKyAgICAgIDs7CisKKyAgICBtc2Rvc2RqZ3BwKikKKyAgICAgICMgSnVzdCBiZWNhdXNlIHdlIHVzZSBHQ0MgZG9lc24ndCBtZWFuIHdlIHN1ZGRlbmx5IGdldCBzaGFyZWQgbGlicmFyaWVzCisgICAgICAjIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZW0uCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCisgICAgICBlbmFibGVfc2hhcmVkPW5vCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0tS2NvbmZvcm1fcGljCisgICAgICBmaQorICAgICAgOzsKKworICAgICopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICAjIFBPUlRNRSBDaGVjayBmb3IgZmxhZyB0byBwYXNzIGxpbmtlciBmbGFncyB0aHJvdWdoIHRoZSBzeXN0ZW0gY29tcGlsZXIuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgIG00X2lmKFskMV0sIFtHQ0pdLCBbXSwKKwlbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKyAgICAgIDs7CisKKyAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0CisgICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCp8aWE2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCisJOzsKKyAgICAgIGVzYWMKKyAgICAgICMgSXMgdGhlcmUgYSBiZXR0ZXIgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgdGhhdCB3b3JrcyB3aXRoIHRoZSBidW5kbGVkIENDPworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKyAgICAgIDs7CisKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAjIFBJQyAod2l0aCAtS1BJQykgaXMgdGhlIGRlZmF1bHQuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAjIG9sZCBJbnRlbCBmb3IgeDg2XzY0IHdoaWNoIHN0aWxsIHN1cHBvcnRlZCAtS1BJQy4KKyAgICAgIGVjYyopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisgICAgICAgIDs7CisgICAgICAjIGljYyB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KKyAgICAgICMgSUNDIDEwIGRvZXNuJ3QgYWNjZXB0IC1LUElDIGFueSBtb3JlLgorICAgICAgaWNjKiB8IGlmb3J0KikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgICMgTGFoZXkgRm9ydHJhbiA4LjEuCisgICAgICBsZjk1KikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy0tc2hhcmVkJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLS1zdGF0aWMnCisJOzsKKyAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqKQorICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZnBpYycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgICA7OworICAgICAgY2NjKikKKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAgICMgQWxsIEFscGhhIGNvZGUgaXMgUElDLgorICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgICA7OworICAgICAgeGwqKQorCSMgSUJNIFhMIEMgOC4wL0ZvcnRyYW4gMTAuMSBvbiBQUEMKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1xcGljJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXFzdGF0aWNsaW5rJworCTs7CisgICAgICAqKQorCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSpTdW5cIEMqKQorCSAgIyBTdW4gQyA1LjkKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICA7OworCSpTdW5cIEYqKQorCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nJworCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworCisgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAjIEFsbCBPU0YvMSBjb2RlIGlzIFBJQy4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgcmRvcyopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS2NvbmZvcm1fcGljJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHVuaWNvcyopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICB1dHM0KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKyAgICAgIDs7CisgICAgZXNhYworICBmaQorXSkKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgIyBGb3IgcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6CisgICpkamdwcCopCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorICAgIDs7CisgICopCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpQCZ0QG00X2lmKFskMV0sW10sWyAtRFBJQ10sW200X2lmKFskMV0sW0NYWF0sWyAtRFBJQ10sW10pXSkiCisgICAgOzsKK2VzYWMKK0FDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSldKQorX0xUX1RBR0RFQ0woW3dsXSwgW2x0X3Byb2dfY29tcGlsZXJfd2xdLCBbMV0sCisJW0hvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXJdKQorCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCitpZiB0ZXN0IC1uICIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIjsgdGhlbgorICBfTFRfQ09NUElMRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgUElDIGZsYWcgJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSB3b3Jrc10sCisgICAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MsICQxKV0sCisgICAgWyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSlAJnRAbTRfaWYoWyQxXSxbXSxbIC1EUElDXSxbbTRfaWYoWyQxXSxbQ1hYXSxbIC1EUElDXSxbXSldKV0sIFtdLAorICAgIFtjYXNlICRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkgaW4KKyAgICAgIiIgfCAiICIqKSA7OworICAgICAqKSBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9IiAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIiA7OworICAgICBlc2FjXSwKKyAgICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vXSkKK2ZpCitfTFRfVEFHREVDTChbcGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9waWNdLCBbMV0sCisJW0FkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0c10pCisKKyMKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyMKK3dsPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKSBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSlcIgorX0xUX0xJTktFUl9PUFRJT04oW2lmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzXSwKKyAgX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcywgJDEpLAorICAkbHRfdG1wX3N0YXRpY19mbGFnLAorICBbXSwKKyAgW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT1dKQorX0xUX1RBR0RFQ0woW2xpbmtfc3RhdGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9zdGF0aWNdLCBbMV0sCisJW0NvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmddKQorXSkjIF9MVF9DT01QSUxFUl9QSUMKKworCisjIF9MVF9MSU5LRVJfU0hMSUJTKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZWUgaWYgdGhlIGxpbmtlciBzdXBwb3J0cyBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgorbTRfZGVmdW4oW19MVF9MSU5LRVJfU0hMSUJTXSwKK1tBQ19SRVFVSVJFKFtMVF9QQVRIX0xEXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTk1dKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorbTRfcmVxdWlyZShbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10pZG5sCittNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKK200X2lmKFskMV0sIFtDWFhdLCBbCisgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4W1s0LTldXSopCisgICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCisgICAgIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQorICAgIGlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSkgJiYgKFtzdWJzdHJdKFwkIDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkIDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgZWxzZQorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSkgJiYgKFtzdWJzdHJdKFwkIDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkIDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgZmkKKyAgICA7OworICBwdzMyKikKKyAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0iJGx0ZGxsX2NtZHMiCisgIDs7CisgIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCisgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEgREFUQS87L14uKltbIF1dX19ubV9fL3MvXi4qW1sgXV1fX25tX19cKFtbXiBdXSpcKVtbIF1dW1teIF1dKi9cMSBEQVRBLzsvXklbWyBdXS9kOy9eW1tBSVRXXV1bWyBdXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICA7OworICBsaW51eCogfCBrKmJzZCotZ251KQorICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPW5vCisgIDs7CisgICopCisgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgOzsKKyAgZXNhYworICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJ10KK10sIFsKKyAgcnVucGF0aF92YXI9CisgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KKyAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPQorICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT1ubworICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9CisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAorICBfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCisgIF9MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUih0aHJlYWRfc2FmZV9mbGFnX3NwZWMsICQxKT0KKyAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorICAjIGluY2x1ZGVfZXhwc3ltcyBzaG91bGQgYmUgYSBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBzeW1ib2xzIHRvIGJlICphbHdheXMqCisgICMgaW5jbHVkZWQgaW4gdGhlIHN5bWJvbCBsaXN0CisgIF9MVF9UQUdWQVIoaW5jbHVkZV9leHBzeW1zLCAkMSk9CisgICMgZXhjbHVkZV9leHBzeW1zIGNhbiBiZSBhbiBleHRlbmRlZCByZWdleHAgb2Ygc3ltYm9scyB0byBleGNsdWRlCisgICMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5IGAgKCcgYW5kIGApJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKKyAgIyBlbmQgb2YgbGluZS4gIEV4YW1wbGU6IGBhfGJjfC4qZC4qJyB3aWxsIGV4Y2x1ZGUgdGhlIHN5bWJvbHMgYGEnIGFuZCBgYmMnLAorICAjIGFzIHdlbGwgYXMgYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zIGBkJy4KKyAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiddCisgICMgQWx0aG91Z2ggX0dMT0JBTF9PRkZTRVRfVEFCTEVfIGlzIGEgdmFsaWQgc3ltYm9sIEMgbmFtZSwgbW9zdCBhLm91dAorICAjIHBsYXRmb3JtcyAoYWIpdXNlIGl0IGluIFBJQyBjb2RlLCBidXQgdGhlaXIgbGlua2VycyBnZXQgY29uZnVzZWQgaWYKKyAgIyB0aGUgc3ltYm9sIGlzIGV4cGxpY2l0bHkgcmVmZXJlbmNlZC4gIFNpbmNlIHBvcnRhYmxlIGNvZGUgY2Fubm90CisgICMgcmVseSBvbiB0aGlzIHN5bWJvbCBuYW1lLCBpdCdzIHByb2JhYmx5IGZpbmUgdG8gbmV2ZXIgaW5jbHVkZSBpdCBpbgorICAjIHByZWxvYWRlZCBzeW1ib2wgdGFibGVzLgorICAjIEV4Y2x1ZGUgc2hhcmVkIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24vZmluYWxpemF0aW9uIHN5bWJvbHMuCitkbmwgTm90ZSBhbHNvIGFkanVzdCBleGNsdWRlX2V4cHN5bXMgZm9yIEMrKyBhYm92ZS4KKyAgZXh0cmFjdF9leHBzeW1zX2NtZHM9CisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQorICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgZmkKKyAgICA7OworICBpbnRlcml4KikKKyAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQorICAgIHdpdGhfZ251X2xkPXllcworICAgIDs7CisgIG9wZW5ic2QqKQorICAgIHdpdGhfZ251X2xkPW5vCisgICAgOzsKKyAgbGludXgqIHwgaypic2QqLWdudSkKKyAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT1ubworICAgIDs7CisgIGVzYWMKKworICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKKyAgICB3bGFyYz0nJHt3bH0nCisKKyAgICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQorICAgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQorICAgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KKyAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICBlbHNlCisgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICAgZmkKKyAgICBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9bm8KKyAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKyAgICAgICpHTlVcIGdvbGQqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7CisgICAgICAqXCBbWzAxXV0uKiB8ICpcIDIuW1swLTldXS4qIHwgKlwgMi4xMC4qKSA7OyAjIGNhdGNoIHZlcnNpb25zIDwgMi4xMQorICAgICAgKlwgMi4xMS45My4wLjJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBSSDcuMyAuLi4KKyAgICAgICpcIDIuMTEuOTIuMC4xMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIE1hbmRyYWtlIDguMiAuLi4KKyAgICAgICpcIDIuMTEuKikgOzsgIyBvdGhlciAyLjExIHZlcnNpb25zCisgICAgICAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7CisgICAgZXNhYworCisgICAgIyBTZWUgaWYgR05VIGxkIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeFtbMy05XV0qKQorICAgICAgIyBPbiBBSVgvUFBDLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIEdOVSBsaW5rZXIsIGF0IGxlYXN0IHVwIHRvIHJlbGVhc2UgMi45LjEsIGlzIHJlcG9ydGVkCisqKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KKyoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQorKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gbW9kaWZ5IHlvdXIgUEFUSAorKioqIHNvIHRoYXQgYSBub24tR05VIGxpbmtlciBpcyBmb3VuZCwgYW5kIHRoZW4gcmVzdGFydC4KKworX0xUX0VPRgorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYworCSMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bW0FJVFddXVtbIF1dL3MvLipbWyBdXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworCSMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKwkjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCWVsc2UKKwkgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCSAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwlmaX4KKwkkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIGludGVyaXhbWzMtOV1dKikKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCisgICAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5CisgICAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5CisgICAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCisgICAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCisgICAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIDs7CisKKyAgICBnbnUqIHwgbGludXgqIHwgdHBmKiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgIHRtcF9kaWV0PW5vCisgICAgICBpZiB0ZXN0ICIkaG9zdF9vcyIgPSBsaW51eC1kaWV0bGliYzsgdGhlbgorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBkaWV0XCAqKSB0bXBfZGlldD15ZXM7OwkjIGxpbnV4LWRpZXRsaWJjIHdpdGggc3RhdGljIGxpbmtpbmcgKCFkaWV0LWR5bikKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KKyAgICAgIHRoZW4KKwl0bXBfYWRkZmxhZz0KKwl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKKwljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkRUNITyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKwkgIDs7CisJcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqKQkjIFBvcnRsYW5kIEdyb3VwIGY3NyBhbmQgZjkwIGNvbXBpbGVycworCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkRUNITyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKKwllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJIyBJbnRlbCBDIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYycgOzsKKwllZmMqLGlhNjQqIHwgaWZvcnQqLGlhNjQqKQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIgb24gaWE2NAorCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljIC1ub2Zvcl9tYWluJyA7OworCWlmYyogfCBpZm9ydCopCQkJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyCisJICB0bXBfYWRkZmxhZz0nIC1ub2Zvcl9tYWluJyA7OworCWxmOTUqKQkJCQkjIExhaGV5IEZvcnRyYW4gOC4xCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisJICB0bXBfc2hhcmVkZmxhZz0nLS1zaGFyZWQnIDs7CisJeGxbW2NDXV0qKQkJCSMgSUJNIFhMIEMgOC4wIG9uIFBQQyAoZGVhbCB3aXRoIHhsZiBiZWxvdykKKwkgIHRtcF9zaGFyZWRmbGFnPSctcW1rc2hyb2JqJworCSAgdG1wX2FkZGZsYWc9IDs7CisJZXNhYworCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45CisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJEVDSE8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXMKKwkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKKwkqU3VuXCBGKikJCQkjIFN1biBGb3J0cmFuIDguMworCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OworCWVzYWMKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCisgICAgICAgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAgICAgICAgZmkKKworCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJeGxmKikKKwkgICMgSUJNIFhMIEZvcnRyYW4gMTAuMSBvbiBQUEMgY2Fubm90IGNyZWF0ZSBzaGFyZWQgbGlicyBpdHNlbGYKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9Jy1ycGF0aCAkbGliZGlyJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJICBmaQorCSAgOzsKKwllc2FjCisgICAgICBlbHNlCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJworCXdsYXJjPQorICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBpZiAkTEQgLXYgMj4mMSB8ICRHUkVQICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiBUaGUgcmVsZWFzZXMgMi44Liogb2YgdGhlIEdOVSBsaW5rZXIgY2Fubm90IHJlbGlhYmx5CisqKiogY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjkuMSBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitfTFRfRU9GCisgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICAgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAgICpcIFtbMDFdXS4qIHwgKlwgMi5bWzAtOV1dLiogfCAqXCAyLjFbWzAtNV1dLiopCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogUmVsZWFzZXMgb2YgdGhlIEdOVSBsaW5rZXIgcHJpb3IgdG8gMi4xNi45MS4wLjMgY2FuIG5vdAorKioqIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNDTyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjE2LjkxLjAuMyBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitfTFRfRU9GCisJOzsKKwkqKQorCSAgIyBGb3Igc2VjdXJpdHkgcmVhc29ucywgaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IGFsd2F5cworCSAgIyB1c2UgYWJzb2x1dGUgcGF0aHMgZm9yIG5hbWluZyBzaGFyZWQgbGlicmFyaWVzLCBhbmQgZXhjbHVkZSB0aGUKKwkgICMgRFRfUlVOUEFUSCB0YWcgZnJvbSBleGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzLiAgQnV0IGRvaW5nIHNvCisJICAjIHJlcXVpcmVzIHRoYXQgeW91IGNvbXBpbGUgZXZlcnl0aGluZyB0d2ljZSwgd2hpY2ggaXMgYSBwYWluLgorCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgZWxzZQorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICBmaQorCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICB3bGFyYz0KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3QgIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vOyB0aGVuCisgICAgICBydW5wYXRoX3Zhcj0KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KKyAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKyAgICBmaQorICBlbHNlCisgICAgIyBQT1JUTUUgZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgbGlua2VyIChub3QgR05VIGxkKQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXgzKikKKyAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckTEQgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1iRTokZXhwb3J0X3N5bWJvbHMgLVQ1MTIgLUg1MTIgLWJNOlNSRX4kQVIgJEFSX0ZMQUdTICRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKyAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCisgICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KKwkjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKKwkjIGJyb2tlbiBjb2xsZWN0Mi4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFpeFtbNC05XV0qKQorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisJIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCWV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCisJbm9fZW50cnlfZmxhZz0iIgorICAgICAgZWxzZQorCSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorCSMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KKwlpZiAkTk0gLVYgMj4mMSB8ICRHUkVQICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisJICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChbc3Vic3RyXShcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworCWVsc2UKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChbc3Vic3RyXShcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworCWZpCisJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCisJIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisJIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisJIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKwljYXNlICRob3N0X29zIGluIGFpeDQuW1syM11dfGFpeDQuW1syM11dLip8YWl4W1s1LTldXSopCisJICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKwkgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCisJICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisJICAgIGJyZWFrCisJICBmaQorCSAgZG9uZQorCSAgOzsKKwllc2FjCisKKwlleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKKyAgICAgIGZpCisKKyAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KKyAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQorICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KKyAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90CisgICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KKworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKKyAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPScke3dsfS1mLCcKKworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwljYXNlICRob3N0X29zIGluIGFpeDQuW1swMTJdXXxhaXg0LltbMDEyXV0uKikKKwkjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKKwkjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKKwkgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKwkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCisJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKwkgIHRoZW4KKwkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorCSAgOgorCSAgZWxzZQorCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAorCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAorCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKKwkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CisJICBmaQorCSAgOzsKKwllc2FjCisJc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCisJaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKKwlmaQorCV9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPW5vCisgICAgICBlbHNlCisJIyBub3QgdXNpbmcgZ2NjCisJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQorCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CisJICBzaGFyZWRfZmxhZz0nLUcnCisJZWxzZQorCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJworCSAgZWxzZQorCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJworCSAgZmkKKwlmaQorICAgICAgZmkKKworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmV4cGFsbCcKKyAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAorICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KKyAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisgICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKKwkjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSctYmVyb2snCisgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCisgICAgICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gJEVDSE8gIlgke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiB8ICRYc2VkOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgICBlbHNlCisJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iLXogbm9kZWZzIgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisJZWxzZQorCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKwkgIyBlbXB0eSBleGVjdXRhYmxlLgorCSBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorCSBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisJICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJub3RvaycKKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm9rJworCSAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKwkgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJworCWZpCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPScnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBic2RpW1s0NV1dKikKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9LXJkeW5hbWljCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisgICAgICBsaWJleHQ9bGliCisgICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKyAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGAkRUNITyAiWCRkZXBsaWJzIiB8ICRYc2VkIC1lICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisgICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J3RydWUnCisgICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKyAgICAgIF9MVF9UQUdWQVIoZml4X3NyY2ZpbGVfcGF0aCwgJDEpPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKKyAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworICAgICAgOzsKKworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUygkMSkKKyAgICAgIDs7CisKKyAgICBkZ3V4KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgIGZyZWVic2QxKikKKyAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAjIEZyZWVCU0QgMi4yLlswMTJdIGFsbG93cyB1cyB0byBpbmNsdWRlIGMrK3J0MC5vIHRvIGdldCBDKysgY29uc3RydWN0b3IKKyAgICAjIHN1cHBvcnQuICBGdXR1cmUgdmVyc2lvbnMgZG8gdGhpcyBhdXRvbWF0aWNhbGx5LCBidXQgYW4gZXhwbGljaXQgYysrcnQwLm8KKyAgICAjIGRvZXMgbm90IGJyZWFrIGFueXRoaW5nLCBhbmQgaGVscHMgc2lnbmlmaWNhbnRseSAoYXQgdGhlIGNvc3Qgb2YgYSBsaXR0bGUKKyAgICAjIGV4dHJhIHNwYWNlKS4KKyAgICBmcmVlYnNkMi4yKikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgL3Vzci9saWIvYysrcnQwLm8nCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgIyBVbmZvcnR1bmF0ZWx5LCBvbGRlciB2ZXJzaW9ucyBvZiBGcmVlQlNEIDIgZG8gbm90IGhhdmUgdGhpcyBmZWF0dXJlLgorICAgIGZyZWVic2QyKikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBocHV4OSopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKworICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKyAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworICAgICAgOzsKKworICAgIGhwdXgxMCopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0nK2IgJGxpYmRpcicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisJIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaHB1eDExKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIC1hICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWlhNjQqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwllc2FjCisgICAgICBlbHNlCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqfGlhNjQqKQorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwkgIDs7CisJKikKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKworCSAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCisgICAgICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKyAgICAgICAgQUNfTElOS19JRkVMU0UoaW50IGZvbyh2b2lkKSB7fSwKKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICAgKQorICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0nbm8nCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIDs7CisKKyAgICBuZXRic2QqIHwgbmV0YnNkZWxmKi1nbnUpCisgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAjIGEub3V0CisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgICAgICMgRUxGCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgIG5ld3NvczYpCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgIDs7CisKKyAgICBvcGVuYnNkKikKKyAgICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisJaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKwllbHNlCisJICBjYXNlICRob3N0X29zIGluCisJICAgb3BlbmJzZFtbMDFdXS4qIHwgb3BlbmJzZDIuW1swLTddXSB8IG9wZW5ic2QyLltbMC03XV0uKikKKwkgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworCSAgICAgOzsKKwkgICAqKQorCSAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgICA7OworCSAgZXNhYworCWZpCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBvczIqKQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckRUNITyAiTElCUkFSWSAkbGlibmFtZSBJTklUSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyBEQVRBID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyAiIFNJTkdMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lbXhleHAgJGxpYm9ianMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRDQyAtWmRsbCAtWmNydGRsbCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgOzsKKworICAgIG9zZjMqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIDs7CisKKyAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmU7IHByaW50ZiAiJXNcXG4iICItaGlkZGVuIj4+ICRsaWIuZXhwfgorCSRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHt3bH0taW5wdXQgJHt3bH0kbGliLmV4cCAkY29tcGlsZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+JFJNICRsaWIuZXhwJworCisJIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXogZGVmcycKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJd2xhcmM9JyR7d2x9JworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgZWxzZQorCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorCSoiQ29tcGlsZXJzIDUuMCIqKQorCSAgd2xhcmM9JycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKwkgIDs7CisJKikKKwkgIHdsYXJjPScke3dsfScKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CisgICAgICAqKQorCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCisJIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0IGAkd2wnLAorCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgorCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisJaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JworCWVsc2UKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgaWYgdGVzdCAieCRob3N0X3ZlbmRvciIgPSB4c2VxdWVudDsgdGhlbgorCSMgVXNlICRDQyB0byBsaW5rIHVuZGVyIHNlcXVlbnQsIGJlY2F1c2UgaXQgdGhyb3dzIGluIHNvbWUgZXh0cmEgLm8KKwkjIGZpbGVzIHRoYXQgbWFrZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yay4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgc3lzdjQpCisgICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgorCXNuaSkKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PworCTs7CisJc2llbWVucykKKwkgICMjIExEIGlzIGxkIGl0IG1ha2VzIGEgUExBTUxJQgorCSAgIyMgQ0MganVzdCBtYWtlcyBhIEdyb3NzTW9kdWxlLgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgICAgICAgIDs7CisJbW90b3JvbGEpCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKKwk7OworICAgICAgZXNhYworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NC4zKikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSctQmV4cG9ydCcKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKwloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bWzAxXV0uW1sxMF1dKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLltbMDI0XV0qKQorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKyAgICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisgICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCisgICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKyAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKyAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAorICAgICAgIyBhcyAteiBkZWZzLgorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosbm9kZWZzJworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIsJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1CZXhwb3J0JworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCB4JGhvc3RfdmVuZG9yID0geHNuaTsgdGhlbgorICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqIHwgc3lzdjUqKQorCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJsYXJnZWR5bnN5bScKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGZpCitdKQorQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSldKQordGVzdCAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCitfTFRfVEFHVkFSKHdpdGhfZ251X2xkLCAkMSk9JHdpdGhfZ251X2xkCisKK19MVF9ERUNMKFtdLCBbbGliZXh0XSwgWzBdLCBbT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpXSlkbmwKK19MVF9ERUNMKFtdLCBbc2hyZXh0X2NtZHNdLCBbMV0sIFtTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKV0pZG5sCitfTFRfREVDTChbXSwgW2V4dHJhY3RfZXhwc3ltc19jbWRzXSwgWzJdLAorICAgIFtUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlXSkKKworIworIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPworIworY2FzZSAieCRfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSkiIGluCit4fHh5ZXMpCisgICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKKyAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworCisgIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIGNhc2UgJF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgaW4KKyAgICAqJ34nKikKKyAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KKyAgICAgIDs7CisgICAgJyRDQyAnKikKKyAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKKyAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYworICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbl0pCisgICAgICAkUk0gY29uZnRlc3QqCisgICAgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgICAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAgc29uYW1lPWNvbmZ0ZXN0CisgICAgICAgIGxpYj1jb25mdGVzdAorICAgICAgICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgICAgICAgZGVwbGlicz0KKyAgICAgICAgd2w9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpCisJcGljX2ZsYWc9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKQorICAgICAgICBjb21waWxlcl9mbGFncz0tdgorICAgICAgICBsaW5rZXJfZmxhZ3M9LXYKKyAgICAgICAgdmVyc3RyaW5nPQorICAgICAgICBvdXRwdXRfb2JqZGlyPS4KKyAgICAgICAgbGlibmFtZT1jb25mdGVzdAorICAgICAgICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSkKKyAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorICAgICAgICBpZiBBQ19UUllfRVZBTChfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKQorICAgICAgICB0aGVuCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgICAgZWxzZQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworICAgICAgICBmaQorICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKyAgICAgIGVsc2UKKyAgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisgICAgICBmaQorICAgICAgJFJNIGNvbmZ0ZXN0KgorICAgICAgQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKV0pCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgOzsKK2VzYWMKKworX0xUX1RBR0RFQ0woW2J1aWxkX2xpYnRvb2xfbmVlZF9sY10sIFthcmNoaXZlX2NtZHNfbmVlZF9sY10sIFswXSwKKyAgICBbV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllc10pCitfTFRfVEFHREVDTChbYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzXSwKKyAgICBbZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc10sIFswXSwKKyAgICBbV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpY10pCitfTFRfVEFHREVDTChbXSwgW2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY10sIFsxXSwKKyAgICBbQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVuc10pCitfTFRfVEFHREVDTChbXSwgW3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjXSwgWzFdLAorICAgIFtDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXNdKQorX0xUX1RBR0RFQ0woW10sIFtjb21waWxlcl9uZWVkc19vYmplY3RdLCBbMV0sCisgICAgW1doZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5XSkKK19MVF9UQUdERUNMKFtdLCBbb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc10sIFsyXSwKKyAgICBbQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfVEFHREVDTChbXSwgW29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzXSwgWzJdLAorICAgIFtDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX1RBR0RFQ0woW10sIFthcmNoaXZlX2NtZHNdLCBbMl0sIFtDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX1RBR0RFQ0woW10sIFthcmNoaXZlX2V4cHN5bV9jbWRzXSwgWzJdKQorX0xUX1RBR0RFQ0woW10sIFttb2R1bGVfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSBpZiBkaWZmZXJlbnQgZnJvbSBidWlsZGluZworICAgIGEgc2hhcmVkIGFyY2hpdmUuXSkKK19MVF9UQUdERUNMKFtdLCBbbW9kdWxlX2V4cHN5bV9jbWRzXSwgWzJdKQorX0xUX1RBR0RFQ0woW10sIFt3aXRoX2dudV9sZF0sIFsxXSwKKyAgICBbV2hldGhlciB3ZSBhcmUgYnVpbGRpbmcgd2l0aCBHTlUgbGQgb3Igbm90XSkKK19MVF9UQUdERUNMKFtdLCBbYWxsb3dfdW5kZWZpbmVkX2ZsYWddLCBbMV0sCisgICAgW0ZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0XSkKK19MVF9UQUdERUNMKFtdLCBbbm9fdW5kZWZpbmVkX2ZsYWddLCBbMV0sCisgICAgW0ZsYWcgdGhhdCBlbmZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9sc10pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNdLCBbMV0sCisgICAgW0ZsYWcgdG8gaGFyZGNvZGUgJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorICAgIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgJGxpYmRpciBkb2VzIG5vdCBleGlzdF0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRdLCBbMV0sCisgICAgW1tJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSAkbGliZGlyIGludG8gYSBiaW5hcnkKKyAgICBkdXJpbmcgbGlua2luZy4gIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgJGxpYmRpciBkb2VzIG5vdCBleGlzdF1dKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yXSwgWzFdLAorICAgIFtXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgIi1ycGF0aCIgZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfZGlyZWN0XSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworICAgIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworICAgIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcworICAgICJhYnNvbHV0ZSIsIGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nICR7c2hsaWJwYXRoX3Zhcn0gaWYgdGhlCisgICAgbGlicmFyeSBpcyByZWxvY2F0ZWRdKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9taW51c19MXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorICAgIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnldKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9zaGxpYnBhdGhfdmFyXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorICAgIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnldKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9hdXRvbWF0aWNdLCBbMF0sCisgICAgW1NldCB0byAieWVzIiBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUgorICAgIGludG8gdGhlIGxpYnJhcnkgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkCisgICAgYWdhaW5zdCBpdF0pCitfTFRfVEFHREVDTChbXSwgW2luaGVyaXRfcnBhdGhdLCBbMF0sCisgICAgW1NldCB0byB5ZXMgaWYgbGlua2VyIGFkZHMgcnVudGltZSBwYXRocyBvZiBkZXBlbmRlbnQgbGlicmFyaWVzCisgICAgdG8gcnVudGltZSBwYXRoIGxpc3RdKQorX0xUX1RBR0RFQ0woW10sIFtsaW5rX2FsbF9kZXBsaWJzXSwgWzBdLAorICAgIFtXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXNdKQorX0xUX1RBR0RFQ0woW10sIFtmaXhfc3JjZmlsZV9wYXRoXSwgWzFdLAorICAgIFtGaXggdGhlIHNoZWxsIHZhcmlhYmxlICRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXJdKQorX0xUX1RBR0RFQ0woW10sIFthbHdheXNfZXhwb3J0X3N5bWJvbHNdLCBbMF0sCisgICAgW1NldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZF0pCitfTFRfVEFHREVDTChbXSwgW2V4cG9ydF9zeW1ib2xzX2NtZHNdLCBbMl0sCisgICAgW1RoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHNdKQorX0xUX1RBR0RFQ0woW10sIFtleGNsdWRlX2V4cHN5bXNdLCBbMV0sCisgICAgW1N5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHNdKQorX0xUX1RBR0RFQ0woW10sIFtpbmNsdWRlX2V4cHN5bXNdLCBbMV0sCisgICAgW1N5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZF0pCitfTFRfVEFHREVDTChbXSwgW3ByZWxpbmtfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXNdKQorX0xUX1RBR0RFQ0woW10sIFtmaWxlX2xpc3Rfc3BlY10sIFsxXSwKKyAgICBbU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzXSkKK2RubCBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAorZG5sIF9MVF9UQUdERUNMKFtdLCBbdGhyZWFkX3NhZmVfZmxhZ19zcGVjXSwgWzFdLAorZG5sICAgIFtDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHRocmVhZCBzYWZlIG9iamVjdHNdKQorXSkjIF9MVF9MSU5LRVJfU0hMSUJTCisKKworIyBfTFRfTEFOR19DX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBDIGNvbXBpbGVyIGFyZSBzdWl0YWJseQorIyBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHIHRvIHdyaXRlCisjIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19DX0NPTkZJR10sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbHRfc2F2ZV9DQz0iJENDIgorQUNfTEFOR19QVVNIKEMpCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1jCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oKXtyZXR1cm4oMCk7fScKKworX0xUX1RBR19DT01QSUxFUgorIyBTYXZlIHRoZSBkZWZhdWx0IGNvbXBpbGVyLCBzaW5jZSBpdCBnZXRzIG92ZXJ3cml0dGVuIHdoZW4gdGhlIG90aGVyCisjIHRhZ3MgYXJlIGJlaW5nIHRlc3RlZCwgYW5kIF9MVF9UQUdWQVIoY29tcGlsZXIsIFtdKSBpcyBhIE5PUC4KK2NvbXBpbGVyX0RFRkFVTFQ9JENDCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCitfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKK19MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyMgQ0FWRUFUIEVNUFRPUjoKKyMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgIF9MVF9DT01QSUxFUl9OT19SVFRJKCQxKQorICBfTFRfQ09NUElMRVJfUElDKCQxKQorICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCisgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKyAgTFRfU1lTX0RMT1BFTl9TRUxGCisgIF9MVF9DTURfU1RSSVBMSUIKKworICAjIFJlcG9ydCB3aGljaCBsaWJyYXJ5IHR5cGVzIHdpbGwgYWN0dWFsbHkgYmUgYnVpbHQKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCisKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorICB0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KKworICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKyAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgorICBjYXNlICRob3N0X29zIGluCisgIGFpeDMqKQorICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKyAgICBmaQorICAgIDs7CisKKyAgYWl4W1s0LTldXSopCisgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgorICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQorCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKKyAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCisgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCisKKyAgX0xUX0NPTkZJRygkMSkKK2ZpCitBQ19MQU5HX1BPUAorQ0M9IiRsdF9zYXZlX0NDIgorXSkjIF9MVF9MQU5HX0NfQ09ORklHCisKKworIyBfTFRfUFJPR19DWFgKKyMgLS0tLS0tLS0tLS0tCisjIFNpbmNlIEFDX1BST0dfQ1hYIGlzIGJyb2tlbiwgaW4gdGhhdCBpdCByZXR1cm5zIGcrKyBpZiB0aGVyZSBpcyBubyBjKysKKyMgY29tcGlsZXIsIHdlIGhhdmUgb3VyIG93biB2ZXJzaW9uIGhlcmUuCittNF9kZWZ1bihbX0xUX1BST0dfQ1hYXSwKK1sKK3B1c2hkZWYoW0FDX01TR19FUlJPUl0sIFtfbHRfY2F1Z2h0X0NYWF9lcnJvcj15ZXNdKQorQUNfUFJPR19DWFgKK2lmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCAiWCRDWFgiICE9ICJYbm8iICYmCisgICAgKCAodGVzdCAiWCRDWFgiID0gIlhnKysiICYmIGBnKysgLXYgPi9kZXYvbnVsbCAyPiYxYCApIHx8CisgICAgKHRlc3QgIlgkQ1hYIiAhPSAiWGcrKyIpKSkgOyB0aGVuCisgIEFDX1BST0dfQ1hYQ1BQCitlbHNlCisgIF9sdF9jYXVnaHRfQ1hYX2Vycm9yPXllcworZmkKK3BvcGRlZihbQUNfTVNHX0VSUk9SXSkKK10pIyBfTFRfUFJPR19DWFgKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtfTFRfUFJPR19DWFhdLCBbXSkKKworCisjIF9MVF9MQU5HX0NYWF9DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBDKysgY29tcGlsZXIgYXJlIHN1aXRhYmx5CisjIGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcgdG8gd3JpdGUKKyMgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0NYWF9DT05GSUddLAorW0FDX1JFUVVJUkUoW19MVF9QUk9HX0NYWF0pZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKKworQUNfTEFOR19QVVNIKEMrKykKK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPW5vCitfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCitfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCitfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQysrIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1jcHAKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMrKyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKKyMgdGhlIENYWCBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKKyMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGFwcGx5IHRvIGFsbCBjb21waWxlcnMgb24gdGhpcyBwbGF0Zm9ybSwKKyMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgoraWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKKyAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7IgorCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCisgIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oaW50LCBjaGFyICpbW11dKSB7IHJldHVybigwKTsgfScKKworICAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCisgIF9MVF9UQUdfQ09NUElMRVIKKworICAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorICBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKyAgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgIGx0X3NhdmVfQ0M9JENDCisgIGx0X3NhdmVfTEQ9JExECisgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgR0NDPSRHWFgKKyAgbHRfc2F2ZV93aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKKyAgbHRfc2F2ZV9wYXRoX0xEPSRsdF9jdl9wYXRoX0xECisgIGlmIHRlc3QgLW4gIiR7bHRfY3ZfcHJvZ19nbnVfbGRjeHgrc2V0fSI7IHRoZW4KKyAgICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGRjeHgKKyAgZWxzZQorICAgICRhc191bnNldCBsdF9jdl9wcm9nX2dudV9sZAorICBmaQorICBpZiB0ZXN0IC1uICIke2x0X2N2X3BhdGhfTERDWFgrc2V0fSI7IHRoZW4KKyAgICBsdF9jdl9wYXRoX0xEPSRsdF9jdl9wYXRoX0xEQ1hYCisgIGVsc2UKKyAgICAkYXNfdW5zZXQgbHRfY3ZfcGF0aF9MRAorICBmaQorICB0ZXN0IC16ICIke0xEQ1hYK3NldH0iIHx8IExEPSRMRENYWAorICBDQz0ke0NYWC0iYysrIn0KKyAgY29tcGlsZXI9JENDCisgIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKyAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisgIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgICAjIFdlIGRvbid0IHdhbnQgLWZuby1leGNlcHRpb24gd2hlbiBjb21waWxpbmcgQysrIGNvZGUsIHNvIHNldCB0aGUKKyAgICAjIG5vX2J1aWx0aW5fZmxhZyBzZXBhcmF0ZWx5CisgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1mbm8tYnVpbHRpbicKKyAgICBlbHNlCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9CisgICAgZmkKKworICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICAjIFNldCB1cCBkZWZhdWx0IEdOVSBDKysgY29uZmlndXJhdGlvbgorCisgICAgICBMVF9QQVRIX0xECisKKyAgICAgICMgQ2hlY2sgaWYgR05VIEMrKyB1c2VzIEdOVSBsZCBhcyB0aGUgdW5kZXJseWluZyBsaW5rZXIsIHNpbmNlIHRoZQorICAgICAgIyBhcmNoaXZpbmcgY29tbWFuZHMgYmVsb3cgYXNzdW1lIHRoYXQgR05VIGxkIGlzIGJlaW5nIHVzZWQuCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisKKyAgICAgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKKyAgICAgICAgIyBYWFggSSB0aGluayB3bGFyYyBjYW4gYmUgZWxpbWluYXRlZCBpbiBsdGNmLWN4eCwgYnV0IEkgbmVlZCB0bworICAgICAgICAjICAgICBpbnZlc3RpZ2F0ZSBpdCBhIGxpdHRsZSBiaXQgbW9yZS4gKE1NKQorICAgICAgICB3bGFyYz0nJHt3bH0nCisKKyAgICAgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgorICAgICAgICBpZiBldmFsICJgJENDIC1wcmludC1wcm9nLW5hbWU9bGRgIC0taGVscCAyPiYxIiB8CisJICAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisgICAgICAgIGVsc2UKKyAgICAgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICAgICAgIGZpCisgICAgICBlbHNlCisgICAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgICAgIHdsYXJjPQorCisgICAgICAgICMgQSBnZW5lcmljIGFuZCB2ZXJ5IHNpbXBsZSBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IGNyZWF0aW9uCisgICAgICAgICMgY29tbWFuZCBmb3IgR05VIEMrKyBmb3IgdGhlIGNhc2Ugd2hlcmUgaXQgdXNlcyB0aGUgbmF0aXZlCisgICAgICAgICMgbGlua2VyLCBpbnN0ZWFkIG9mIEdOVSBsZC4gIElmIHBvc3NpYmxlLCB0aGlzIHNldHRpbmcgc2hvdWxkCisgICAgICAgICMgb3ZlcnJpZGRlbiB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbmF0aXZlIGxpbmtlciBmZWF0dXJlcyBvbgorICAgICAgICAjIHRoZSBwbGF0Zm9ybSBpdCBpcyBiZWluZyB1c2VkIG9uLgorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCisgICAgICBmaQorCisgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKyAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgIlwtTCInCisKKyAgICBlbHNlCisgICAgICBHWFg9bm8KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgICB3bGFyYz0KKyAgICBmaQorCisgICAgIyBQT1JUTUU6IGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIEMrKyBsaW5rIGNoYXJhY3RlcmlzdGljcworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDMqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworICAgICAgYWl4W1s0LTldXSopCisgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorICAgICAgICAgICMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKyAgICAgICAgICBleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworICAgICAgICAgIG5vX2VudHJ5X2ZsYWc9IiIKKyAgICAgICAgZWxzZQorICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworICAgICAgICAgICMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorICAgICAgICAgICMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorICAgICAgICAgICMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeFtbNS05XV0qKQorCSAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKwkgICAgICBjYXNlICRsZF9mbGFnIGluCisJICAgICAgKi1icnRsKikKKwkgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisJICAgICAgICBicmVhaworCSAgICAgICAgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgOzsKKyAgICAgICAgICBlc2FjCisKKyAgICAgICAgICBleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JworICAgICAgICAgIG5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKKyAgICAgICAgZmkKKworICAgICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisgICAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQorICAgICAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bworICAgICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorICAgICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KKworICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPScnCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworICAgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPScke3dsfS1mLCcKKworICAgICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzAxMl1dfGFpeDQuW1swMTJdXS4qKQorICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjaworICAgICAgICAgICMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKworCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKKwkgICAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJICB0aGVuCisJICAgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorCSAgICA6CisJICBlbHNlCisJICAgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAorCSAgICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisJICAgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisJICAgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CisJICBmaQorICAgICAgICAgIGVzYWMKKyAgICAgICAgICBzaGFyZWRfZmxhZz0nLXNoYXJlZCcKKwkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKKwkgIGZpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAjIG5vdCB1c2luZyBnY2MKKyAgICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKwkgICMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CisJICBzaGFyZWRfZmxhZz0nLUcnCisgICAgICAgICAgZWxzZQorCSAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgICAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKKwkgICAgZWxzZQorCSAgICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCisJICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKworICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1iZXhwYWxsJworICAgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKKyAgICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvCisJIyBleHBvcnQuCisgICAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisgICAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgICAgICAgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAorICAgICAgICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKyAgICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Jy1iZXJvaycKKyAgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkKKyAgICAgICAgICAjIGV4ZWN1dGFibGUuCisgICAgICAgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKyAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKworICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiAkRUNITyAiWCR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iIHwgJFhzZWQ7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKyAgICAgICAgZWxzZQorICAgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwkgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSIteiBub2RlZnMiCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgorICAgICAgICAgIGVsc2UKKwkgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisJICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKwkgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisJICAgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisJICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwkgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVybm90b2snCisJICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm9rJworCSAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckY29udmVuaWVuY2UnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKwkgICAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkCisJICAgICMgbGlicmFyaWVzLgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJworICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICAgIDs7CisKKyAgICAgIGJlb3MqKQorCWlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorCSAgIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYworCSAgIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWVsc2UKKwkgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwlmaQorCTs7CisKKyAgICAgIGNob3J1cyopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgKikKKwkgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisgICAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCisgICAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworCisgICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgICAgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorICAgICAgICAgICMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCisgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisJICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgICAgICBlbHNlCisJICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCSAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICAgIGZpfgorICAgICAgICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKyAgICAgICAgZWxzZQorICAgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAgIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKCQxKQorCTs7CisKKyAgICAgIGRndXgqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIGVjKysqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgIGdoY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgZnJlZWJzZFtbMTJdXSopCisgICAgICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgcmVwb3J0ZWQgdG8gYmUgZmFpcmx5IGJyb2tlbiBiZWZvcmUKKwkjIHN3aXRjaCB0byBFTEYKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworCisgICAgICBmcmVlYnNkLWVsZiopCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgICAgICA7OworCisgICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICAgICMgRnJlZUJTRCAzIGFuZCBsYXRlciB1c2UgR05VIEMrKyBhbmQgR05VIGxkIHdpdGggc3RhbmRhcmQgRUxGCisgICAgICAgICMgY29udmVudGlvbnMKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKyAgICAgICAgOzsKKworICAgICAgZ251KikKKyAgICAgICAgOzsKKworICAgICAgaHB1eDkqKQorICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkJCQkgICAgICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKKwkJCQkgICAgICAgICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKworICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKyAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgICBhQ0MqKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1iICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisgICAgICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKyAgICAgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorICAgICAgICAgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKyAgICAgICAgICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKyAgICAgICAgICAgICMgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRFR1JFUCAiXC1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyAkRUNITyAiWCRsaXN0IiB8ICRYc2VkJworICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBocHV4MTAqfGhwdXgxMSopCisgICAgICAgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworICAgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICAgICAgICBocHBhKjY0KnxpYTY0KikKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisJICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgIGZpCisgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAorCQkJCQkgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdAorCQkJCQkgICAgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgIGFDQyopCisJICAgIGNhc2UgJGhvc3RfY3B1IGluCisJICAgICAgaHBwYSo2NCopCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICA7OworCSAgICAgIGlhNjQqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgICAqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICA7OworCSAgICBlc2FjCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRHUkVQICJcLUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7ICRFQ0hPICJYJGxpc3QiIHwgJFhzZWQnCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCisJICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICAgICAgICBocHBhKjY0KikKKwkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgICAgaWE2NCopCisJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIDs7CisJICAgICAgICAgICopCisJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgIGVzYWMKKwkgICAgICBmaQorCSAgICBlbHNlCisJICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGludGVyaXhbWzMtOV1dKikKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCSMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKwkjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5CisJIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorCSMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKwkjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCisJIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKwk7OworICAgICAgaXJpeDUqIHwgaXJpeDYqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBTR0kgQysrCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1hbGwgLW11bHRpZ290ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyAiQ0MgLWFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgSVJJWCBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1hciAtV1IsLXUgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorCSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICBlbHNlCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAtbyAkbGliJworCSAgICAgIGZpCisJICAgIGZpCisJICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgICAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9eWVzCisgICAgICAgIDs7CisKKyAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBLQ0MqKQorCSAgICAjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCisKKwkgICAgIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQorCSAgICAjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5CisJICAgICMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzOyBtdiBcJHRlbXBsaWIgJGxpYicKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxIHwgJEdSRVAgImxkImA7IHJtIC1mIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQ7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyAkRUNITyAiWCRsaXN0IiB8ICRYc2VkJworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC1Cc3RhdGljIiwgd2hlcmUgIkNDIiBpcyB0aGUgS0FJIEMrKyBjb21waWxlci4KKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworCSAgaWNwYyogfCBlY3BjKiApCisJICAgICMgSW50ZWwgQysrCisJICAgIHdpdGhfZ251X2xkPXllcworCSAgICAjIHZlcnNpb24gOC4wIGFuZCBhYm92ZSBvZiBpY3BjIGNob2tlIG9uIG11bHRpcGx5IGRlZmluZWQgc3ltYm9scworCSAgICAjIGlmIHdlIGFkZCAkcHJlZGVwX29iamVjdHMgYW5kICRwb3N0ZGVwX29iamVjdHMsIGhvd2V2ZXIgNy4xIGFuZAorCSAgICAjIGVhcmxpZXIgZG8gbm90IGFkZCB0aGUgb2JqZWN0cyB0aGVtc2VsdmVzLgorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKwkgICAgICAqIlZlcnNpb24gNy4iKikKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJCTs7CisJICAgICAgKikgICMgVmVyc2lvbiA4LjAgb3IgbmV3ZXIKKwkgICAgICAgIHRtcF9pZHluPQorCSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkJICBpYTY0KikgdG1wX2lkeW49JyAtaV9keW5hbWljJzs7CisJCWVzYWMKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkJOzsKKwkgICAgZXNhYworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgOzsKKyAgICAgICAgICBwZ0NDKiB8IHBnY3BwKikKKyAgICAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCisJICAgIGNhc2UgYCRDQyAtVmAgaW4KKwkgICAgKnBnQ0NcIFtbMS01XV0qIHwgKnBnY3BwXCBbWzEtNV1dKikKKwkgICAgICBfTFRfVEFHVkFSKHByZWxpbmtfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorCQlybSAtcmYgJHRwbGRpcn4KKwkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2JqcyAkbGlib2JqcyAkY29tcGlsZV9kZXBsaWJzfgorCQljb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgJE5MMlNQYCInCisJICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisJCXJtIC1yZiAkdHBsZGlyfgorCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvbGRvYmpzJG9sZF9kZXBsaWJzfgorCQkkQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgfgorCQkkUkFOTElCICRvbGRsaWInCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorCQlybSAtcmYgJHRwbGRpcn4KKwkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CisJCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgICA7OworCSAgICAqKSAjIFZlcnNpb24gNiB3aWxsIHVzZSB3ZWFrIHN5bWJvbHMKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgICA7OworCSAgICBlc2FjCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkRUNITyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisgICAgICAgICAgICA7OworCSAgY3h4KikKKwkgICAgIyBDb21wYXEgQysrCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICAtbyAkbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzJworCisJICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJsZCJgOyB0ZW1wbGlzdD1gJEVDSE8gIlgkdGVtcGxpc3QiIHwgJFhzZWQgLWUgInMvXCheLipsZC4qXClcKCAuKmxkIC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgJEVDSE8gIlgkbGlzdCIgfCAkWHNlZCcKKwkgICAgOzsKKwkgIHhsKikKKwkgICAgIyBJQk0gWEwgOC4wIG9uIFBQQywgd2l0aCBHTlUgbGQKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXFta3Nocm9iaiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCQljYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJCWVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCQkkQ0MgLXFta3Nocm9iaiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKwkgICAgZmkKKwkgICAgOzsKKwkgICopCisJICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSAgICAqU3VuXCBDKikKKwkgICAgICAjIFN1biBDKysgNS45CisJICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXpkZWZzJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMnCisJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKwkgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJEVDSE8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgICAgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzCisKKwkgICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgc29tZXRoaW5nIGJhc2VkIG9uCisJICAgICAgIyAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMQorCSAgICAgICMgd291bGQgYmUgYmV0dGVyLgorCSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJworCisJICAgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJICAgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJZXNhYworCTs7CisKKyAgICAgIGx5bnhvcyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwk7OworCisgICAgICBtODhrKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwk7OworCisgICAgICBtdnMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIGN4eCopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisJICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworCWVzYWMKKwk7OworCisgICAgICBuZXRic2QqKQorICAgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlICAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRsaW5rZXJfZmxhZ3MnCisJICB3bGFyYz0KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlmaQorCSMgV29ya2Fyb3VuZCBzb21lIGJyb2tlbiBwcmUtMS41IHRvb2xjaGFpbnMKKwlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCBjb25mdGVzdC4kb2JqZXh0IHwgJFNFRCAtZSAiczotbGdjYyAtbGMgLWxnY2M6OiInCisJOzsKKworICAgICAgKm50byogfCAqcW54KikKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKwk7OworCisgICAgICBvcGVuYnNkMiopCisgICAgICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGZhaXJseSBicm9rZW4KKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKworICAgICAgb3BlbmJzZCopCisJaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGZpCisJICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1lY2hvCisJZWxzZQorCSAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWZpCisJOzsKKworICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIEtDQyopCisJICAgICMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKKworCSAgICAjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCisJICAgICMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKKwkgICAgIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICIkbGliIiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyB0aGUgS0FJIEMrKyBjb21waWxlci4KKwkgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgIG9zZjMqKSBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnIDs7CisJICAgICAgKikgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkb2xkbGliICRvbGRvYmpzJyA7OworCSAgICBlc2FjCisJICAgIDs7CisgICAgICAgICAgUkNDKikKKwkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICBjeHgqKQorCSAgICBjYXNlICRob3N0IGluCisJICAgICAgb3NmMyopCisJICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkJOzsKKwkgICAgICAqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lfgorCSAgICAgICAgICBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgorCSAgICAgICAgICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lICR7d2x9LWlucHV0ICR7d2x9JGxpYi5leHAgIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+CisJICAgICAgICAgICRSTSAkbGliLmV4cCcKKwkgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKKwkJOzsKKwkgICAgZXNhYworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiIHwgJEdSRVAgLXYgImxkOiJgOyB0ZW1wbGlzdD1gJEVDSE8gIlgkdGVtcGxpc3QiIHwgJFhzZWQgLWUgInMvXCheLipsZC4qXClcKCAuKmxkLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyAkRUNITyAiWCRsaXN0IiB8ICRYc2VkJworCSAgICA7OworCSAgKikKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgICBvc2YzKikKKwkgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkJICA7OworCSAgICAgICAgKikKKwkgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJCSAgOzsKKwkgICAgICBlc2FjCisKKwkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAiXC1MIicKKworCSAgICBlbHNlCisJICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHBzb3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworCisgICAgICBzdW5vczQqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBTdW4gQysrIDQueAorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgIGxjYyopCisJICAgICMgTHVjaWQKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHNvbGFyaXMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywkMSk9eWVzCisJICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICAgICAkQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAke3dsfS1NICR7d2x9JGxpYi5leHAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKKwkgICAgICAqKQorCQkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAorCQkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLgorCSAgICAgICAgIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKKwkJX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JworCSAgICAgICAgOzsKKwkgICAgZXNhYworCSAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKworCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICBnY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisKKwkgICAgIyBUaGUgQysrIGNvbXBpbGVyIG11c3QgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGFyY2hpdmUuCisJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgJExERkxBR1MgLWFyY2hpdmUgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEdOVSBDKysgY29tcGlsZXIgd2l0aCBTb2xhcmlzIGxpbmtlcgorCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwkgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS16ICR7d2x9ZGVmcycKKwkgICAgICBpZiAkQ0MgLS12ZXJzaW9uIHwgJEdSRVAgLXYgJ14yXC43JyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJCSAgJENDIC1zaGFyZWQgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCisJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgIlwtTCInCisJICAgICAgZWxzZQorCSAgICAgICAgIyBnKysgMi43IGFwcGVhcnMgdG8gcmVxdWlyZSBgLUcnIE5PVCBgLXNoYXJlZCcgb24gdGhpcworCSAgICAgICAgIyBwbGF0Zm9ybS4KKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkJICAkQ0MgLUcgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCisJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtRyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJcLUwiJworCSAgICAgIGZpCisKKwkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkd2wkbGliZGlyJworCSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkJc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKKwkJKikKKwkJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKKwkJICA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuW1swMV1dLltbMTBdXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bWzAyNF1dKikKKyAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICBDQyopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisJIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKKwkjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCisJIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCisJIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAorCSMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAorCSMgYXMgLXogZGVmcy4KKwlfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosbm9kZWZzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIsJGxpYmRpcicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKKwlfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1CZXhwb3J0JworCXJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgOzsKKwkgICopCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgOzsKKwllc2FjCisgICAgICA7OworCisgICAgICB0YW5kZW0qKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIE5DQyopCisJICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgdnh3b3JrcyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIDs7CisKKyAgICAgICopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSldKQorICAgIHRlc3QgIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKworICAgIF9MVF9UQUdWQVIoR0NDLCAkMSk9IiRHWFgiCisgICAgX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCisKKyAgICAjIyBDQVZFQVQgRU1QVE9SOgorICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisgICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKyAgICBfTFRfU1lTX0hJRERFTl9MSUJERVBTKCQxKQorICAgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgICAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICAgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICAgIF9MVF9DT05GSUcoJDEpCisgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorCisgIENDPSRsdF9zYXZlX0NDCisgIExEQ1hYPSRMRAorICBMRD0kbHRfc2F2ZV9MRAorICBHQ0M9JGx0X3NhdmVfR0NDCisgIHdpdGhfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCisgIGx0X2N2X3BhdGhfTERDWFg9JGx0X2N2X3BhdGhfTEQKKyAgbHRfY3ZfcGF0aF9MRD0kbHRfc2F2ZV9wYXRoX0xECisgIGx0X2N2X3Byb2dfZ251X2xkY3h4PSRsdF9jdl9wcm9nX2dudV9sZAorICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAorZmkgIyB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllcworCitBQ19MQU5HX1BPUAorXSkjIF9MVF9MQU5HX0NYWF9DT05GSUcKKworCisjIF9MVF9TWVNfSElEREVOX0xJQkRFUFMoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmlndXJlIG91dCAiaGlkZGVuIiBsaWJyYXJ5IGRlcGVuZGVuY2llcyBmcm9tIHZlcmJvc2UKKyMgY29tcGlsZXIgb3V0cHV0IHdoZW4gbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKKyMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgorbTRfZGVmdW4oW19MVF9TWVNfSElEREVOX0xJQkRFUFNdLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0IGJlaW5nIGxpbmtlZDoKK19MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0KK19MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9CitfTFRfVEFHVkFSKHByZWRlcHMsICQxKT0KK19MVF9UQUdWQVIocG9zdGRlcHMsICQxKT0KK19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9CisKK2RubCB3ZSBjYW4ndCB1c2UgdGhlIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSBoZXJlLAorZG5sIGJlY2F1c2UgaXQgY29udGFpbnMgY29kZSBpbnRlbmRlZCBmb3IgYW4gZXhlY3V0YWJsZSwKK2RubCBub3QgYSBsaWJyYXJ5LiAgSXQncyBwb3NzaWJsZSB3ZSBzaG91bGQgbGV0IGVhY2gKK2RubCB0YWcgZGVmaW5lIGEgbmV3IGx0Xz8/Pz9fbGlua190ZXN0X2NvZGUgdmFyaWFibGUsCitkbmwgYnV0IGl0J3Mgb25seSB1c2VkIGhlcmUuLi4KK200X2lmKFskMV0sIFtdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKK2ludCBhOwordm9pZCBmb28gKHZvaWQpIHsgYSA9IDA7IH0KK19MVF9FT0YKK10sIFskMV0sIFtDWFhdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKK2NsYXNzIEZvbworeworcHVibGljOgorICBGb28gKHZvaWQpIHsgYSA9IDA7IH0KK3ByaXZhdGU6CisgIGludCBhOworfTsKK19MVF9FT0YKK10sIFskMV0sIFtGNzddLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyAgICAgIHN1YnJvdXRpbmUgZm9vCisgICAgICBpbXBsaWNpdCBub25lCisgICAgICBpbnRlZ2VyKjQgYQorICAgICAgYT0wCisgICAgICByZXR1cm4KKyAgICAgIGVuZAorX0xUX0VPRgorXSwgWyQxXSwgW0ZDXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisgICAgICBzdWJyb3V0aW5lIGZvbworICAgICAgaW1wbGljaXQgbm9uZQorICAgICAgaW50ZWdlciBhCisgICAgICBhPTAKKyAgICAgIHJldHVybgorICAgICAgZW5kCitfTFRfRU9GCitdLCBbJDFdLCBbR0NKXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitwdWJsaWMgY2xhc3MgZm9vIHsKKyAgcHJpdmF0ZSBpbnQgYTsKKyAgcHVibGljIHZvaWQgYmFyICh2b2lkKSB7CisgICAgYSA9IDA7CisgIH0KK307CitfTFRfRU9GCitdKQorZG5sIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorZG5sIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KK2lmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICMgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5CisgICMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgorCisgICMgU2VudGluZWwgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgb3Igbm90IHdlIGFyZSBiZWZvcmUKKyAgIyB0aGUgY29uZnRlc3Qgb2JqZWN0IGZpbGUuCisgIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9bm8KKworICBmb3IgcCBpbiBgZXZhbCAiJG91dHB1dF92ZXJib3NlX2xpbmtfY21kImA7IGRvCisgICAgY2FzZSAkcCBpbgorCisgICAgLUwqIHwgLVIqIHwgLWwqKQorICAgICAgICMgU29tZSBjb21waWxlcnMgcGxhY2Ugc3BhY2UgYmV0d2VlbiAiLXtMLFJ9IiBhbmQgdGhlIHBhdGguCisgICAgICAgIyBSZW1vdmUgdGhlIHNwYWNlLgorICAgICAgIGlmIHRlc3QgJHAgPSAiLUwiIHx8CisgICAgICAgICAgdGVzdCAkcCA9ICItUiI7IHRoZW4KKwkgcHJldj0kcAorCSBjb250aW51ZQorICAgICAgIGVsc2UKKwkgcHJldj0KKyAgICAgICBmaQorCisgICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KKwkgY2FzZSAkcCBpbgorCSAtTCogfCAtUiopCisJICAgIyBJbnRlcm5hbCBjb21waWxlciBsaWJyYXJ5IHBhdGhzIHNob3VsZCBjb21lIGFmdGVyIHRob3NlCisJICAgIyBwcm92aWRlZCB0aGUgdXNlci4gIFRoZSBwb3N0ZGVwcyBhbHJlYWR5IGNvbWUgYWZ0ZXIgdGhlCisJICAgIyB1c2VyIHN1cHBsaWVkIGxpYnMgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBwcm9jZXNzIHRoZW0uCisJICAgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSkiOyB0aGVuCisJICAgICBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPSIke3ByZXZ9JHtwfSIKKwkgICBlbHNlCisJICAgICBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPSIke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9ICR7cHJldn0ke3B9IgorCSAgIGZpCisJICAgOzsKKwkgIyBUaGUgIi1sIiBjYXNlIHdvdWxkIG5ldmVyIGNvbWUgYmVmb3JlIHRoZSBvYmplY3QgYmVpbmcKKwkgIyBsaW5rZWQsIHNvIGRvbid0IGJvdGhlciBoYW5kbGluZyB0aGlzIGNhc2UuCisJIGVzYWMKKyAgICAgICBlbHNlCisJIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSkiOyB0aGVuCisJICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSIke3ByZXZ9JHtwfSIKKwkgZWxzZQorCSAgIF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKT0iJHtfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSl9ICR7cHJldn0ke3B9IgorCSBmaQorICAgICAgIGZpCisgICAgICAgOzsKKworICAgICouJG9iamV4dCkKKyAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB0ZXN0IG9iamVjdCBmaWxlIG9ubHkgc2hvd3MgdXAKKyAgICAgICAjIG9uY2UgaW4gdGhlIGNvbXBpbGVyIG91dHB1dC4KKyAgICAgICBpZiB0ZXN0ICIkcCIgPSAiY29uZnRlc3QuJG9iamV4dCI7IHRoZW4KKwkgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT15ZXMKKwkgY29udGludWUKKyAgICAgICBmaQorCisgICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KKwkgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKSI7IHRoZW4KKwkgICBfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9IiRwIgorCSBlbHNlCisJICAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPSIkX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpICRwIgorCSBmaQorICAgICAgIGVsc2UKKwkgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkiOyB0aGVuCisJICAgX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0iJHAiCisJIGVsc2UKKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSIkX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSAkcCIKKwkgZmkKKyAgICAgICBmaQorICAgICAgIDs7CisKKyAgICAqKSA7OyAjIElnbm9yZSB0aGUgcmVzdC4KKworICAgIGVzYWMKKyAgZG9uZQorCisgICMgQ2xlYW4gdXAuCisgIHJtIC1mIGEub3V0IGEuZXhlCitlbHNlCisgIGVjaG8gImxpYnRvb2wubTQ6IGVycm9yOiBwcm9ibGVtIGNvbXBpbGluZyAkMSB0ZXN0IHByb2dyYW0iCitmaQorCiskUk0gLWYgY29uZmVzdC4kb2JqZXh0CisKKyMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCittNF9pZihbJDFdLCBbQ1hYXSwKK1tjYXNlICRob3N0X29zIGluCitpbnRlcml4W1szLTldXSopCisgICMgSW50ZXJpeCAzLjUgaW5zdGFsbHMgY29tcGxldGVseSBob3NlZCAubGEgZmlsZXMgZm9yIEMrKywgc28gcmF0aGVyIHRoYW4KKyAgIyBoYWNrIGFsbCBhcm91bmQgaXQsIGxldCdzIGp1c3QgdHJ1c3QgImcrKyIgdG8gRFRSVC4KKyAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywkMSk9CisgIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCQxKT0KKyAgX0xUX1RBR1ZBUihwb3N0ZGVwcywkMSk9CisgIDs7CisKK2xpbnV4KikKKyAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisgICpTdW5cIEMqKQorICAgICMgU3VuIEMrKyA1LjkKKworICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcworICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZworICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKKyAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCisgICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KKyAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKKyAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBpZiB0ZXN0ICIkc29sYXJpc191c2Vfc3RscG9ydDQiICE9IHllczsgdGhlbgorICAgICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywkMSk9Jy1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgOzsKKworc29sYXJpcyopCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgIENDKikKKyAgICAjIFRoZSBtb3JlIHN0YW5kYXJkcy1jb25mb3JtaW5nIHN0bHBvcnQ0IGxpYnJhcnkgaXMKKyAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKKyAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCisgICAgIyAtbGlicmFyeT1zdGxwb3J0NCBkZXBlbmRzIG9uIGl0LgorICAgIGNhc2UgIiAkQ1hYICRDWFhGTEFHUyAiIGluCisgICAgKiIgLWxpYnJhcnk9c3RscG9ydDQgIiopCisgICAgICBzb2xhcmlzX3VzZV9zdGxwb3J0ND15ZXMKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBBZGRpbmcgdGhpcyByZXF1aXJlcyBhIGtub3duLWdvb2Qgc2V0dXAgb2Ygc2hhcmVkIGxpYnJhcmllcyBmb3IKKyAgICAjIFN1biBjb21waWxlciB2ZXJzaW9ucyBiZWZvcmUgNS42LCBlbHNlIFBJQyBvYmplY3RzIGZyb20gYW4gb2xkCisgICAgIyBhcmNoaXZlIHdpbGwgYmUgbGlua2VkIGludG8gdGhlIG91dHB1dCwgbGVhZGluZyB0byBzdWJ0bGUgYnVncy4KKyAgICBpZiB0ZXN0ICIkc29sYXJpc191c2Vfc3RscG9ydDQiICE9IHllczsgdGhlbgorICAgICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywkMSk9Jy1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgOzsKK2VzYWMKK10pCisKK2Nhc2UgIiAkX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpICIgaW4KKyoiIC1sYyAiKikgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vIDs7Citlc2FjCisgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX2RpcnMsICQxKT0KK2lmIHRlc3QgLW4gIiR7X0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0iOyB0aGVuCisgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX2RpcnMsICQxKT1gZWNobyAiICR7X0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0iIHwgJHtTRUR9IC1lICdzISAtTCEgIWcnIC1lICdzIV4gISEnYAorZmkKK19MVF9UQUdERUNMKFtdLCBbY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzXSwgWzFdLAorICAgIFtUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkIGxpYnJhcnldKQorX0xUX1RBR0RFQ0woW10sIFtwcmVkZXBfb2JqZWN0c10sIFsxXSwKKyAgICBbRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvCisgICAgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnldKQorX0xUX1RBR0RFQ0woW10sIFtwb3N0ZGVwX29iamVjdHNdLCBbMV0pCitfTFRfVEFHREVDTChbXSwgW3ByZWRlcHNdLCBbMV0pCitfTFRfVEFHREVDTChbXSwgW3Bvc3RkZXBzXSwgWzFdKQorX0xUX1RBR0RFQ0woW10sIFtjb21waWxlcl9saWJfc2VhcmNoX3BhdGhdLCBbMV0sCisgICAgW1RoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCisgICAgYSBzaGFyZWQgbGlicmFyeV0pCitdKSMgX0xUX1NZU19ISURERU5fTElCREVQUworCisKKyMgX0xUX1BST0dfRjc3CisjIC0tLS0tLS0tLS0tLQorIyBTaW5jZSBBQ19QUk9HX0Y3NyBpcyBicm9rZW4sIGluIHRoYXQgaXQgcmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nCisjIGlmIHRoZXJlIGlzIG5vIGZvcnRyYW4gY29tcGlsZXIsIHdlIGhhdmUgb3VyIG93biB2ZXJzaW9uIGhlcmUuCittNF9kZWZ1bihbX0xUX1BST0dfRjc3XSwKK1sKK3B1c2hkZWYoW0FDX01TR19FUlJPUl0sIFtfbHRfZGlzYWJsZV9GNzc9eWVzXSkKK0FDX1BST0dfRjc3CitpZiB0ZXN0IC16ICIkRjc3IiB8fCB0ZXN0ICJYJEY3NyIgPSAiWG5vIjsgdGhlbgorICBfbHRfZGlzYWJsZV9GNzc9eWVzCitmaQorcG9wZGVmKFtBQ19NU0dfRVJST1JdKQorXSkjIF9MVF9QUk9HX0Y3NworCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW19MVF9QUk9HX0Y3N10sIFtdKQorCisKKyMgX0xUX0xBTkdfRjc3X0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEZvcnRyYW4gNzcgY29tcGlsZXIgYXJlCisjIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0Y3N19DT05GSUddLAorW0FDX1JFUVVJUkUoW19MVF9QUk9HX0Y3N10pZG5sCitBQ19MQU5HX1BVU0goRm9ydHJhbiA3NykKKworX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCitfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCitfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubworX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9bm8KK19MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCitfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIGY3NyB0ZXN0IHNvdXJjZXMuCithY19leHQ9ZgorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgZjc3IHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBObyBzZW5zZSBpbiBydW5uaW5nIGFsbCB0aGVzZSB0ZXN0cyBpZiB3ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdAorIyB0aGUgRjc3IGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQorIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAorIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCitpZiB0ZXN0ICIkX2x0X2Rpc2FibGVfRjc3IiAhPSB5ZXM7IHRoZW4KKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKKyAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJcCisgICAgICBzdWJyb3V0aW5lIHQKKyAgICAgIHJldHVybgorICAgICAgZW5kCisiCisKKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKKyAgbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSJcCisgICAgICBwcm9ncmFtIHQKKyAgICAgIGVuZAorIgorCisgICMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KKyAgX0xUX1RBR19DT01QSUxFUgorCisgICMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCisgIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorICBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyAgbHRfc2F2ZV9DQz0iJENDIgorICBsdF9zYXZlX0dDQz0kR0NDCisgIENDPSR7Rjc3LSJmNzcifQorICBjb21waWxlcj0kQ0MKKyAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworICBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisgIEdDQz0kRzc3CisgIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCisgICAgQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQorCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIHRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubworCisgICAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisgICAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDMqKQorICAgICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgICAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICAgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICBhaXhbWzQtOV1dKikKKwlpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCisJICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworCWZpCisgICAgICAgIDs7CisgICAgZXNhYworICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc2hhcmVkXSkKKworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKKyAgICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KKyAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCisKKyAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSIkRzc3IgorICAgIF9MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorCisgICAgIyMgQ0FWRUFUIEVNUFRPUjoKKyAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorICAgICMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisgICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCisgICAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICAgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICAgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICAgIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCisgICAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorCisgICAgX0xUX0NPTkZJRygkMSkKKyAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisKKyAgR0NDPSRsdF9zYXZlX0dDQworICBDQz0iJGx0X3NhdmVfQ0MiCitmaSAjIHRlc3QgIiRfbHRfZGlzYWJsZV9GNzciICE9IHllcworCitBQ19MQU5HX1BPUAorXSkjIF9MVF9MQU5HX0Y3N19DT05GSUcKKworCisjIF9MVF9QUk9HX0ZDCisjIC0tLS0tLS0tLS0tCisjIFNpbmNlIEFDX1BST0dfRkMgaXMgYnJva2VuLCBpbiB0aGF0IGl0IHJldHVybnMgdGhlIGVtcHR5IHN0cmluZworIyBpZiB0aGVyZSBpcyBubyBmb3J0cmFuIGNvbXBpbGVyLCB3ZSBoYXZlIG91ciBvd24gdmVyc2lvbiBoZXJlLgorbTRfZGVmdW4oW19MVF9QUk9HX0ZDXSwKK1sKK3B1c2hkZWYoW0FDX01TR19FUlJPUl0sIFtfbHRfZGlzYWJsZV9GQz15ZXNdKQorQUNfUFJPR19GQworaWYgdGVzdCAteiAiJEZDIiB8fCB0ZXN0ICJYJEZDIiA9ICJYbm8iOyB0aGVuCisgIF9sdF9kaXNhYmxlX0ZDPXllcworZmkKK3BvcGRlZihbQUNfTVNHX0VSUk9SXSkKK10pIyBfTFRfUFJPR19GQworCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW19MVF9QUk9HX0ZDXSwgW10pCisKKworIyBfTFRfTEFOR19GQ19DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEZvcnRyYW4gY29tcGlsZXIgYXJlCisjIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0ZDX0NPTkZJR10sCitbQUNfUkVRVUlSRShbX0xUX1BST0dfRkNdKWRubAorQUNfTEFOR19QVVNIKEZvcnRyYW4pCisKK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KK19MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPW5vCitfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKK19MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBmYyB0ZXN0IHNvdXJjZXMuCithY19leHQ9JHthY19mY19zcmNleHQtZn0KKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIGZjIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBObyBzZW5zZSBpbiBydW5uaW5nIGFsbCB0aGVzZSB0ZXN0cyBpZiB3ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdAorIyB0aGUgRkMgY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCisjIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCisjIGFuZCB3aWxsIGJlIGNvcnJ1cHRlZCBieSBzZXR0aW5nIHRoZW0gYmFzZWQgb24gYSBub24td29ya2luZyBjb21waWxlci4KK2lmIHRlc3QgIiRfbHRfZGlzYWJsZV9GQyIgIT0geWVzOyB0aGVuCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCisgIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iXAorICAgICAgc3Vicm91dGluZSB0CisgICAgICByZXR1cm4KKyAgICAgIGVuZAorIgorCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCisgIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iXAorICAgICAgcHJvZ3JhbSB0CisgICAgICBlbmQKKyIKKworICAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCisgIF9MVF9UQUdfQ09NUElMRVIKKworICAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorICBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKyAgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgIGx0X3NhdmVfQ0M9IiRDQyIKKyAgbHRfc2F2ZV9HQ0M9JEdDQworICBDQz0ke0ZDLSJmOTUifQorICBjb21waWxlcj0kQ0MKKyAgR0NDPSRhY19jdl9mY19jb21waWxlcl9nbnUKKworICBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCisgIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKworICBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIEFDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKKworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICB0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KKworICAgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorICAgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgzKikKKyAgICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICAgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICAgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgYWl4W1s0LTldXSopCisJaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgorCSAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKwlmaQorICAgICAgICA7OworICAgIGVzYWMKKyAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCisgICAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCisgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCisgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQorCisgICAgX0xUX1RBR1ZBUihHQ0MsICQxKT0iJGFjX2N2X2ZjX2NvbXBpbGVyX2dudSIKKyAgICBfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKKworICAgICMjIENBVkVBVCBFTVBUT1I6CisgICAgIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyAgICAjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorICAgICMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgorICAgIF9MVF9TWVNfSElEREVOX0xJQkRFUFMoJDEpCisgICAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICAgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICAgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICAgIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCisgICAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorCisgICAgX0xUX0NPTkZJRygkMSkKKyAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisKKyAgR0NDPSRsdF9zYXZlX0dDQworICBDQz0iJGx0X3NhdmVfQ0MiCitmaSAjIHRlc3QgIiRfbHRfZGlzYWJsZV9GQyIgIT0geWVzCisKK0FDX0xBTkdfUE9QCitdKSMgX0xUX0xBTkdfRkNfQ09ORklHCisKKworIyBfTFRfTEFOR19HQ0pfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIHRoZSBHTlUgSmF2YSBDb21waWxlciBjb21waWxlcgorIyBhcmUgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRworIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfR0NKX0NPTkZJR10sCitbQUNfUkVRVUlSRShbTFRfUFJPR19HQ0pdKWRubAorQUNfTEFOR19TQVZFCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBKYXZhIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1qYXZhCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBKYXZhIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iY2xhc3MgZm9vIHt9IgorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdwdWJsaWMgY2xhc3MgY29uZnRlc3QgeyBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbW11dIGFyZ3YpIHt9OyB9JworCisjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCitfTFRfVEFHX0NPTVBJTEVSCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCitfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKK19MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2x0X3NhdmVfQ0M9IiRDQyIKK2x0X3NhdmVfR0NDPSRHQ0MKK0dDQz15ZXMKK0NDPSR7R0NKLSJnY2oifQorY29tcGlsZXI9JENDCitfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCitfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKK19MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKworIyBHQ0ogZGlkIG5vdCBleGlzdCBhdCB0aGUgdGltZSBHQ0MgZGlkbid0IGltcGxpY2l0bHkgbGluayBsaWJjIGluLgorX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisKK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCisKKyMjIENBVkVBVCBFTVBUT1I6CisjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgoraWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICBfTFRfQ09NUElMRVJfTk9fUlRUSSgkMSkKKyAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKKyAgX0xUX0NPTkZJRygkMSkKK2ZpCisKK0FDX0xBTkdfUkVTVE9SRQorCitHQ0M9JGx0X3NhdmVfR0NDCitDQz0iJGx0X3NhdmVfQ0MiCitdKSMgX0xUX0xBTkdfR0NKX0NPTkZJRworCisKKyMgX0xUX0xBTkdfUkNfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIFdpbmRvd3MgcmVzb3VyY2UgY29tcGlsZXIKKyMgYXJlIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX1JDX0NPTkZJR10sCitbQUNfUkVRVUlSRShbTFRfUFJPR19SQ10pZG5sCitBQ19MQU5HX1NBVkUKKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIFJDIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1yYworCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgUkMgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSdzYW1wbGUgTUVOVSB7IE1FTlVJVEVNICImU291cCIsIDEwMCwgQ0hFQ0tFRCB9JworCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIgorCisjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCitfTFRfVEFHX0NPTVBJTEVSCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCitfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKK19MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2x0X3NhdmVfQ0M9IiRDQyIKK2x0X3NhdmVfR0NDPSRHQ0MKK0dDQz0KK0NDPSR7UkMtIndpbmRyZXMifQorY29tcGlsZXI9JENDCitfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCitfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCitfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9eWVzCisKK2lmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgOgorICBfTFRfQ09ORklHKCQxKQorZmkKKworR0NDPSRsdF9zYXZlX0dDQworQUNfTEFOR19SRVNUT1JFCitDQz0iJGx0X3NhdmVfQ0MiCitdKSMgX0xUX0xBTkdfUkNfQ09ORklHCisKKworIyBMVF9QUk9HX0dDSgorIyAtLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX1BST0dfR0NKXSwKK1ttNF9pZmRlZihbQUNfUFJPR19HQ0pdLCBbQUNfUFJPR19HQ0pdLAorICBbbTRfaWZkZWYoW0FdW01fUFJPR19HQ0pdLCBbQV1bTV9QUk9HX0dDSl0sCisgICAgW0FDX0NIRUNLX1RPT0woR0NKLCBnY2osKQorICAgICAgdGVzdCAieCR7R0NKRkxBR1Mrc2V0fSIgPSB4c2V0IHx8IEdDSkZMQUdTPSItZyAtTzIiCisgICAgICBBQ19TVUJTVChHQ0pGTEFHUyldKV0pW11kbmwKK10pCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbTFRfQUNfUFJPR19HQ0pdLCBbTFRfUFJPR19HQ0pdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtMVF9BQ19QUk9HX0dDSl0sIFtdKQorCisKKyMgTFRfUFJPR19SQworIyAtLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfUFJPR19SQ10sCitbQUNfQ0hFQ0tfVE9PTChSQywgd2luZHJlcywpCitdKQorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0xUX0FDX1BST0dfUkNdLCBbTFRfUFJPR19SQ10pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0xUX0FDX1BST0dfUkNdLCBbXSkKKworCisjIF9MVF9ERUNMX0VHUkVQCisjIC0tLS0tLS0tLS0tLS0tCisjIElmIHdlIGRvbid0IGhhdmUgYSBuZXcgZW5vdWdoIEF1dG9jb25mIHRvIGNob29zZSB0aGUgYmVzdCBncmVwCisjIGF2YWlsYWJsZSwgY2hvb3NlIHRoZSBvbmUgZmlyc3QgaW4gdGhlIHVzZXIncyBQQVRILgorbTRfZGVmdW4oW19MVF9ERUNMX0VHUkVQXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0VHUkVQXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfRkdSRVBdKWRubAordGVzdCAteiAiJEdSRVAiICYmIEdSRVA9Z3JlcAorX0xUX0RFQ0woW10sIFtHUkVQXSwgWzFdLCBbQSBncmVwIHByb2dyYW0gdGhhdCBoYW5kbGVzIGxvbmcgbGluZXNdKQorX0xUX0RFQ0woW10sIFtFR1JFUF0sIFsxXSwgW0FuIEVSRSBtYXRjaGVyXSkKK19MVF9ERUNMKFtdLCBbRkdSRVBdLCBbMV0sIFtBIGxpdGVyYWwgc3RyaW5nIG1hdGNoZXJdKQorZG5sIE5vbi1ibGVlZGluZy1lZGdlIGF1dG9jb25mIGRvZXNuJ3Qgc3Vic3QgR1JFUCwgc28gZG8gaXQgaGVyZSB0b28KK0FDX1NVQlNUKFtHUkVQXSkKK10pCisKKworIyBfTFRfREVDTF9PQkpEVU1QCisjIC0tLS0tLS0tLS0tLS0tCisjIElmIHdlIGRvbid0IGhhdmUgYSBuZXcgZW5vdWdoIEF1dG9jb25mIHRvIGNob29zZSB0aGUgYmVzdCBvYmpkdW1wCisjIGF2YWlsYWJsZSwgY2hvb3NlIHRoZSBvbmUgZmlyc3QgaW4gdGhlIHVzZXIncyBQQVRILgorbTRfZGVmdW4oW19MVF9ERUNMX09CSkRVTVBdLAorW0FDX0NIRUNLX1RPT0woT0JKRFVNUCwgb2JqZHVtcCwgZmFsc2UpCit0ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCitfTFRfREVDTChbXSwgW09CSkRVTVBdLCBbMV0sIFtBbiBvYmplY3Qgc3ltYm9sIGR1bXBlcl0pCitBQ19TVUJTVChbT0JKRFVNUF0pCitdKQorCisKKyMgX0xUX0RFQ0xfU0VECisjIC0tLS0tLS0tLS0tLQorIyBDaGVjayBmb3IgYSBmdWxseS1mdW5jdGlvbmFsIHNlZCBwcm9ncmFtLCB0aGF0IHRydW5jYXRlcworIyBhcyBmZXcgY2hhcmFjdGVycyBhcyBwb3NzaWJsZS4gIFByZWZlciBHTlUgc2VkIGlmIGZvdW5kLgorbTRfZGVmdW4oW19MVF9ERUNMX1NFRF0sCitbQUNfUFJPR19TRUQKK3Rlc3QgLXogIiRTRUQiICYmIFNFRD1zZWQKK1hzZWQ9IiRTRUQgLWUgMXMvXlgvLyIKK19MVF9ERUNMKFtdLCBbU0VEXSwgWzFdLCBbQSBzZWQgcHJvZ3JhbSB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dF0pCitfTFRfREVDTChbXSwgW1hzZWRdLCBbIlwkU0VEIC1lIDFzL15YLy8iXSwKKyAgICBbU2VkIHRoYXQgaGVscHMgdXMgYXZvaWQgYWNjaWRlbnRhbGx5IHRyaWdnZXJpbmcgZWNobygxKSBvcHRpb25zIGxpa2UgLW5dKQorXSkjIF9MVF9ERUNMX1NFRAorCittNF9pZm5kZWYoW0FDX1BST0dfU0VEXSwgWworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE5PVEU6IFRoaXMgbWFjcm8gaGFzIGJlZW4gc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW50byAgICMKKyMgIEdOVSBBdXRvY29uZiBhcyBBQ19QUk9HX1NFRC4gIFdoZW4gaXQgaXMgYXZhaWxhYmxlIGluICAgIworIyAgYSByZWxlYXNlZCB2ZXJzaW9uIG9mIEF1dG9jb25mIHdlIHNob3VsZCByZW1vdmUgdGhpcyAgICAjCisjICBtYWNybyBhbmQgdXNlIGl0IGluc3RlYWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCittNF9kZWZ1bihbQUNfUFJPR19TRURdLAorW0FDX01TR19DSEVDS0lORyhbZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0XSkKK0FDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX1NFRCwKK1sjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIHNlZCBhbmQgZ3NlZC4KKyMgVGhlbiB1c2UgdGhhdCBsaXN0IG9mIHNlZCdzIGFzIG9uZXMgdG8gdGVzdCBmb3IgdHJ1bmNhdGlvbi4KK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGx0X2FjX3Byb2cgaW4gc2VkIGdzZWQ7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgICAgICBsdF9hY19zZWRfbGlzdD0iJGx0X2FjX3NlZF9saXN0ICRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICBmaQorICAgIGRvbmUKKyAgZG9uZQorZG9uZQorSUZTPSRhc19zYXZlX0lGUworbHRfYWNfbWF4PTAKK2x0X2FjX2NvdW50PTAKKyMgQWRkIC91c3IveHBnNC9iaW4vc2VkIGFzIGl0IGlzIHR5cGljYWxseSBmb3VuZCBvbiBTb2xhcmlzCisjIGFsb25nIHdpdGggL2Jpbi9zZWQgdGhhdCB0cnVuY2F0ZXMgb3V0cHV0LgorZm9yIGx0X2FjX3NlZCBpbiAkbHRfYWNfc2VkX2xpc3QgL3Vzci94cGc0L2Jpbi9zZWQ7IGRvCisgIHRlc3QgISAtZiAkbHRfYWNfc2VkICYmIGNvbnRpbnVlCisgIGNhdCAvZGV2L251bGwgPiBjb25mdGVzdC5pbgorICBsdF9hY19jb3VudD0wCisgIGVjaG8gJEVDSE9fTiAiMDEyMzQ1Njc4OSRFQ0hPX0MiID5jb25mdGVzdC5pbgorICAjIENoZWNrIGZvciBHTlUgc2VkIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgIGlmICIkbHRfYWNfc2VkIiAtLXZlcnNpb24gMj4mMSA8IC9kZXYvbnVsbCB8IGdyZXAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9wYXRoX1NFRD0kbHRfYWNfc2VkCisgICAgYnJlYWsKKyAgZmkKKyAgd2hpbGUgdHJ1ZTsgZG8KKyAgICBjYXQgY29uZnRlc3QuaW4gY29uZnRlc3QuaW4gPmNvbmZ0ZXN0LnRtcAorICAgIG12IGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5pbgorICAgIGNwIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0Lm5sCisgICAgZWNobyA+PmNvbmZ0ZXN0Lm5sCisgICAgJGx0X2FjX3NlZCAtZSAncy9hJC8vJyA8IGNvbmZ0ZXN0Lm5sID5jb25mdGVzdC5vdXQgfHwgYnJlYWsKKyAgICBjbXAgLXMgY29uZnRlc3Qub3V0IGNvbmZ0ZXN0Lm5sIHx8IGJyZWFrCisgICAgIyAxMDAwMCBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkbHRfYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgICAgbHRfYWNfY291bnQ9YGV4cHIgJGx0X2FjX2NvdW50ICsgMWAKKyAgICBpZiB0ZXN0ICRsdF9hY19jb3VudCAtZ3QgJGx0X2FjX21heDsgdGhlbgorICAgICAgbHRfYWNfbWF4PSRsdF9hY19jb3VudAorICAgICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAorICAgIGZpCisgIGRvbmUKK2RvbmUKK10pCitTRUQ9JGx0X2N2X3BhdGhfU0VECitBQ19TVUJTVChbU0VEXSkKK0FDX01TR19SRVNVTFQoWyRTRURdKQorXSkjQUNfUFJPR19TRUQKK10pI200X2lmbmRlZgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0xUX0FDX1BST0dfU0VEXSwgW0FDX1BST0dfU0VEXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbTFRfQUNfUFJPR19TRURdLCBbXSkKKworCisjIF9MVF9DSEVDS19TSEVMTF9GRUFUVVJFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmluZCBvdXQgd2hldGhlciB0aGUgc2hlbGwgaXMgQm91cm5lIG9yIFhTSSBjb21wYXRpYmxlLAorIyBvciBoYXMgc29tZSBvdGhlciB1c2VmdWwgZmVhdHVyZXMuCittNF9kZWZ1bihbX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHNdKQorIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKK3hzaV9zaGVsbD1ubworKCBfbHRfZHVtbXk9ImEvYi9jIgorICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwiJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorICAgICAgPSBjLGEvYiwsIFwKKyAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgJiYgeHNpX3NoZWxsPXllcworQUNfTVNHX1JFU1VMVChbJHhzaV9zaGVsbF0pCitfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbeHNpX3NoZWxsPSckeHNpX3NoZWxsJ10pCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgIis9Il0pCitsdF9zaGVsbF9hcHBlbmQ9bm8KKyggZm9vPWJhcjsgc2V0IGZvbyBiYXo7IGV2YWwgIiRbMV0rPVwkWzJdIiAmJiB0ZXN0ICIkZm9vIiA9IGJhcmJheiApIFwKKyAgICA+L2Rldi9udWxsIDI+JjEgXAorICAmJiBsdF9zaGVsbF9hcHBlbmQ9eWVzCitBQ19NU0dfUkVTVUxUKFskbHRfc2hlbGxfYXBwZW5kXSkKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFtsdF9zaGVsbF9hcHBlbmQ9JyRsdF9zaGVsbF9hcHBlbmQnXSkKKworaWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGx0X3Vuc2V0PXVuc2V0CitlbHNlCisgIGx0X3Vuc2V0PWZhbHNlCitmaQorX0xUX0RFQ0woW10sIFtsdF91bnNldF0sIFswXSwgW3doZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzICJ1bnNldCJdKWRubAorCisjIHRlc3QgRUJDRElDIG9yIEFTQ0lJCitjYXNlIGBlY2hvIFh8dHIgWCAnXDEwMSdgIGluCisgQSkgIyBBU0NJSSBiYXNlZCBzeXN0ZW0KKyAgICAjIFxuIGlzIG5vdCBpbnRlcnByZXRlZCBjb3JyZWN0bHkgYnkgU29sYXJpcyA4IC91c3IvdWNiL3RyCisgIGx0X1NQMk5MPSd0ciBcMDQwIFwwMTInCisgIGx0X05MMlNQPSd0ciBcMDE1XDAxMiBcMDQwXDA0MCcKKyAgOzsKKyAqKSAjIEVCQ0RJQyBiYXNlZCBzeXN0ZW0KKyAgbHRfU1AyTkw9J3RyIFwxMDAgXG4nCisgIGx0X05MMlNQPSd0ciBcclxuIFwxMDBcMTAwJworICA7OworZXNhYworX0xUX0RFQ0woW1NQMk5MXSwgW2x0X1NQMk5MXSwgWzFdLCBbdHVybiBzcGFjZXMgaW50byBuZXdsaW5lc10pZG5sCitfTFRfREVDTChbTkwyU1BdLCBbbHRfTkwyU1BdLCBbMV0sIFt0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzXSlkbmwKK10pIyBfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVMKKworCisjIF9MVF9QUk9HX1hTSV9TSEVMTEZOUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQm91cm5lIGFuZCBYU0kgY29tcGF0aWJsZSB2YXJpYW50cyBvZiBzb21lIHVzZWZ1bCBzaGVsbCBmdW5jdGlvbnMuCittNF9kZWZ1bihbX0xUX1BST0dfWFNJX1NIRUxMRk5TXSwKK1tjYXNlICR4c2lfc2hlbGwgaW4KKyAgeWVzKQorICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisKKyMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCitmdW5jX2Rpcm5hbWUgKCkKK3sKKyAgY2FzZSAkezF9IGluCisgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKyAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CisgIGVzYWMKK30KKworIyBmdW5jX2Jhc2VuYW1lIGZpbGUKK2Z1bmNfYmFzZW5hbWUgKCkKK3sKKyAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorfQorCisjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CisjIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCisjIGNhbGw6CisjICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CisjICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKyMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyMgSW1wbGVtZW50YXRpb24gbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZCB3aXRoIGZ1bmNfZGlybmFtZQorIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bworIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCitmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCit7CisgIGNhc2UgJHsxfSBpbgorICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CisgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworICBlc2FjCisgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKK30KKworIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKyMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCisjIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCisjIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCitmdW5jX3N0cmlwbmFtZSAoKQoreworICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCisgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KKyAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M30KKyAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KKyAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In0KK30KKworIyBmdW5jX29wdF9zcGxpdAorZnVuY19vcHRfc3BsaXQgKCkKK3sKKyAgZnVuY19vcHRfc3BsaXRfb3B0PSR7MSUlPSp9CisgIGZ1bmNfb3B0X3NwbGl0X2FyZz0kezEjKj19Cit9CisKKyMgZnVuY19sbzJvIG9iamVjdAorZnVuY19sbzJvICgpCit7CisgIGNhc2UgJHsxfSBpbgorICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7CisgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7CisgIGVzYWMKK30KKworIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKK2Z1bmNfeGZvcm0gKCkKK3sKKyAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sbworfQorCisjIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCitmdW5jX2FyaXRoICgpCit7CisgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkWypdICkpCit9CisKKyMgZnVuY19sZW4gc3RyaW5nCisjIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCitmdW5jX2xlbiAoKQoreworICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KK30KKworX0xUX0VPRgorICAgIDs7CisgICopICMgQm91cm5lIGNvbXBhdGlibGUgZnVuY3Rpb25zLgorICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisKKyMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCitmdW5jX2Rpcm5hbWUgKCkKK3sKKyAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKyAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICIkZGlybmFtZSJgCisgIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCisgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKyAgZWxzZQorICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKyAgZmkKK30KKworIyBmdW5jX2Jhc2VuYW1lIGZpbGUKK2Z1bmNfYmFzZW5hbWUgKCkKK3sKKyAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJGJhc2VuYW1lImAKK30KKworZG5sIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUKK2RubCBBIHBvcnRhYmxlIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiBpcyBhbHJlYWR5IGRlZmluZWQgaW4gZ2VuZXJhbC5tNHNoCitkbmwgc28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgaXQgaGVyZS4KKworIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKyMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCisjIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCisjIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCisjIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCitmdW5jX3N0cmlwbmFtZSAoKQoreworICBjYXNlICR7Mn0gaW4KKyAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiWCR7M30iIFwKKyAgICAgICAgICAgfCAkWHNlZCAtZSAicyVeJHsxfSUlIiAtZSAicyVcXFxcJHsyfVwkJSUiYDs7CisgICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIlgkezN9IiBcCisgICAgICAgICAgIHwgJFhzZWQgLWUgInMlXiR7MX0lJSIgLWUgInMlJHsyfVwkJSUiYDs7CisgIGVzYWMKK30KKworIyBzZWQgc2NyaXB0czoKK215X3NlZF9sb25nX29wdD0nMXMvXlwoLVtbXj1dXSpcKT0uKi9cMS87cScKK215X3NlZF9sb25nX2FyZz0nMXMvXi1bW149XV0qPS8vJworCisjIGZ1bmNfb3B0X3NwbGl0CitmdW5jX29wdF9zcGxpdCAoKQoreworICBmdW5jX29wdF9zcGxpdF9vcHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJG15X3NlZF9sb25nX29wdCJgCisgIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICIkbXlfc2VkX2xvbmdfYXJnImAKK30KKworIyBmdW5jX2xvMm8gb2JqZWN0CitmdW5jX2xvMm8gKCkKK3sKKyAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICIkbG8ybyJgCit9CisKKyMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCitmdW5jX3hmb3JtICgpCit7CisgIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiWCR7MX0iIHwgJFhzZWQgLWUgJ3MvXC5bW14uXV0qJC8ubG8vJ2AKK30KKworIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorZnVuY19hcml0aCAoKQoreworICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJFtAXSJgCit9CisKKyMgZnVuY19sZW4gc3RyaW5nCisjIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCitmdW5jX2xlbiAoKQoreworICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiRbMV0iIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKK30KKworX0xUX0VPRgorZXNhYworCitjYXNlICRsdF9zaGVsbF9hcHBlbmQgaW4KKyAgeWVzKQorICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisKKyMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCisjIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KK2Z1bmNfYXBwZW5kICgpCit7CisgIGV2YWwgIiRbMV0rPVwkWzJdIgorfQorX0xUX0VPRgorICAgIDs7CisgICopCisgICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKworIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKyMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorZnVuY19hcHBlbmQgKCkKK3sKKyAgZXZhbCAiJFsxXT1cJCRbMV1cJFsyXSIKK30KKworX0xUX0VPRgorICAgIDs7CisgIGVzYWMKK10pCmRpZmYgLS1naXQgYS9tNC9sb2NrLm00IGIvbTQvbG9jay5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTExOTMzCi0tLSAvZGV2L251bGwKKysrIGIvbTQvbG9jay5tNApAQCAtMCwwICsxLDMxNiBAQAorIyBsb2NrLm00IHNlcmlhbCA3IChnZXR0ZXh0LTAuMTcpCitkbmwgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorCitkbmwgVGVzdHMgZm9yIGEgbXVsdGl0aHJlYWRpbmcgbGlicmFyeSB0byBiZSB1c2VkLgorZG5sIERlZmluZXMgYXQgbW9zdCBvbmUgb2YgdGhlIG1hY3JvcyBVU0VfUE9TSVhfVEhSRUFEUywgVVNFX1NPTEFSSVNfVEhSRUFEUywKK2RubCBVU0VfUFRIX1RIUkVBRFMsIFVTRV9XSU4zMl9USFJFQURTCitkbmwgU2V0cyB0aGUgdmFyaWFibGVzIExJQlRIUkVBRCBhbmQgTFRMSUJUSFJFQUQgdG8gdGhlIGxpbmtlciBvcHRpb25zIGZvciB1c2UKK2RubCBpbiBhIE1ha2VmaWxlIChMSUJUSFJFQUQgZm9yIHVzZSB3aXRob3V0IGxpYnRvb2wsIExUTElCVEhSRUFEIGZvciB1c2Ugd2l0aAorZG5sIGxpYnRvb2wpLgorZG5sIFNldHMgdGhlIHZhcmlhYmxlcyBMSUJNVUxUSVRIUkVBRCBhbmQgTFRMSUJNVUxUSVRIUkVBRCBzaW1pbGFybHksIGZvcgorZG5sIHByb2dyYW1zIHRoYXQgcmVhbGx5IG5lZWQgbXVsdGl0aHJlYWQgZnVuY3Rpb25hbGl0eS4gVGhlIGRpZmZlcmVuY2UKK2RubCBiZXR3ZWVuIExJQlRIUkVBRCBhbmQgTElCTVVMVElUSFJFQUQgaXMgdGhhdCBvbiBwbGF0Zm9ybXMgc3VwcG9ydGluZyB3ZWFrCitkbmwgc3ltYm9scywgdHlwaWNhbGx5IExJQlRIUkVBRD0iIiB3aGVyZWFzIExJQk1VTFRJVEhSRUFEPSItbHB0aHJlYWQiLgorZG5sIEFkZHMgdG8gQ1BQRkxBR1MgdGhlIGZsYWcgLURfUkVFTlRSQU5UIG9yIC1EX1RIUkVBRF9TQUZFIGlmIG5lZWRlZCBmb3IKK2RubCBtdWx0aXRocmVhZC1zYWZlIHByb2dyYW1zLgorCitBQ19ERUZVTihbZ2xfTE9DS19FQVJMWV0sCitbCisgIEFDX1JFUVVJUkUoW2dsX0xPQ0tfRUFSTFlfQk9EWV0pCitdKQorCitkbmwgVGhlIGd1dHMgb2YgZ2xfTE9DS19FQVJMWS4gTmVlZHMgdG8gYmUgZXhwYW5kZWQgb25seSBvbmNlLgorCitBQ19ERUZVTihbZ2xfTE9DS19FQVJMWV9CT0RZXSwKK1sKKyAgZG5sIE9yZGVyaW5nIGNvbnN0cmFpbnRzOiBUaGlzIG1hY3JvIG1vZGlmaWVzIENQUEZMQUdTIGluIGEgd2F5IHRoYXQKKyAgZG5sIGluZmx1ZW5jZXMgdGhlIHJlc3VsdCBvZiB0aGUgYXV0b2NvbmYgdGVzdHMgdGhhdCB0ZXN0IGZvciAqX3VubG9ja2VkCisgIGRubCBkZWNsYXJhdGlvbnMsIG9uIEFJWCA1IGF0IGxlYXN0LiBUaGVyZWZvcmUgaXQgbXVzdCBjb21lIGVhcmx5LgorICBBQ19CRUZPUkUoWyQwXSwgW2dsX0ZVTkNfR0xJQkNfVU5MT0NLRURfSU9dKWRubAorICBBQ19CRUZPUkUoWyQwXSwgW2dsX0FSR1BdKWRubAorCisgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKyAgZG5sIF9HTlVfU09VUkNFIGlzIG5lZWRlZCBmb3IgcHRocmVhZF9yd2xvY2tfdCBvbiBnbGliYyBzeXN0ZW1zLgorICBkbmwgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TIHdhcyBpbnRyb2R1Y2VkIGluIGF1dG9jb25mIDIuNjAgYW5kIG9ic29sZXRlcworICBkbmwgQUNfR05VX1NPVVJDRS4KKyAgbTRfaWZkZWYoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCisgICAgW0FDX1JFUVVJUkUoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10pXSwKKyAgICBbQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pXSkKKyAgZG5sIENoZWNrIGZvciBtdWx0aXRocmVhZGluZy4KKyAgQUNfQVJHX0VOQUJMRSh0aHJlYWRzLAorQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXRocmVhZHM9e3Bvc2l4fHNvbGFyaXN8cHRofHdpbjMyfV0sIFtzcGVjaWZ5IG11bHRpdGhyZWFkaW5nIEFQSV0pCitBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXRocmVhZHNdLCBbYnVpbGQgd2l0aG91dCBtdWx0aXRocmVhZCBzYWZldHldKSwKKyAgICBbZ2xfdXNlX3RocmVhZHM9JGVuYWJsZXZhbF0sCisgICAgW2Nhc2UgIiRob3N0X29zIiBpbgorICAgICAgIGRubCBEaXNhYmxlIG11bHRpdGhyZWFkaW5nIGJ5IGRlZmF1bHQgb24gT1NGLzEsIGJlY2F1c2UgaXQgaW50ZXJmZXJlcworICAgICAgIGRubCB3aXRoIGZvcmsoKS9leGVjKCk6IFdoZW4gbXNnZXhlYyBpcyBsaW5rZWQgd2l0aCAtbHB0aHJlYWQsIGl0cyBjaGlsZAorICAgICAgIGRubCBwcm9jZXNzIGdldHMgYW4gZW5kbGVzcyBzZWdtZW50YXRpb24gZmF1bHQgaW5zaWRlIGV4ZWN2cCgpLgorICAgICAgIG9zZiopIGdsX3VzZV90aHJlYWRzPW5vIDs7CisgICAgICAgKikgICAgZ2xfdXNlX3RocmVhZHM9eWVzIDs7CisgICAgIGVzYWMKKyAgICBdKQorICBpZiB0ZXN0ICIkZ2xfdXNlX3RocmVhZHMiID0geWVzIHx8IHRlc3QgIiRnbF91c2VfdGhyZWFkcyIgPSBwb3NpeDsgdGhlbgorICAgICMgRm9yIHVzaW5nIDxwdGhyZWFkLmg+OgorICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgb3NmKikKKyAgICAgICAgIyBPbiBPU0YvMSwgdGhlIGNvbXBpbGVyIG5lZWRzIHRoZSBmbGFnIC1EX1JFRU5UUkFOVCBzbyB0aGF0IGl0CisgICAgICAgICMgZ3Jva3MgPHB0aHJlYWQuaD4uIGNjIGFsc28gdW5kZXJzdGFuZHMgdGhlIGZsYWcgLXB0aHJlYWQsIGJ1dAorICAgICAgICAjIHdlIGRvbid0IHVzZSBpdCBiZWNhdXNlIDEuIGdjYy0yLjk1IGRvZXNuJ3QgdW5kZXJzdGFuZCAtcHRocmVhZCwKKyAgICAgICAgIyAyLiBwdXR0aW5nIGEgZmxhZyBpbnRvIENQUEZMQUdTIHRoYXQgaGFzIGFuIGVmZmVjdCBvbiB0aGUgbGlua2VyCisgICAgICAgICMgY2F1c2VzIHRoZSBBQ19UUllfTElOSyB0ZXN0IGJlbG93IHRvIHN1Y2NlZWQgdW5leHBlY3RlZGx5LAorICAgICAgICAjIGxlYWRpbmcgdG8gd3JvbmcgdmFsdWVzIG9mIExJQlRIUkVBRCBhbmQgTFRMSUJUSFJFQUQuCisgICAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURfUkVFTlRSQU5UIgorICAgICAgICA7OworICAgIGVzYWMKKyAgICAjIFNvbWUgc3lzdGVtcyBvcHRpbWl6ZSBmb3Igc2luZ2xlLXRocmVhZGVkIHByb2dyYW1zIGJ5IGRlZmF1bHQsIGFuZAorICAgICMgbmVlZCBzcGVjaWFsIGZsYWdzIHRvIGRpc2FibGUgdGhlc2Ugb3B0aW1pemF0aW9ucy4gRm9yIGV4YW1wbGUsIHRoZQorICAgICMgZGVmaW5pdGlvbiBvZiAnZXJybm8nIGluIDxlcnJuby5oPi4KKyAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgIGFpeCogfCBmcmVlYnNkKikgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9USFJFQURfU0FGRSIgOzsKKyAgICAgIHNvbGFyaXMqKSBDUFBGTEFHUz0iJENQUEZMQUdTIC1EX1JFRU5UUkFOVCIgOzsKKyAgICBlc2FjCisgIGZpCitdKQorCitkbmwgVGhlIGd1dHMgb2YgZ2xfTE9DSy4gTmVlZHMgdG8gYmUgZXhwYW5kZWQgb25seSBvbmNlLgorCitBQ19ERUZVTihbZ2xfTE9DS19CT0RZXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfTE9DS19FQVJMWV9CT0RZXSkKKyAgZ2xfdGhyZWFkc19hcGk9bm9uZQorICBMSUJUSFJFQUQ9CisgIExUTElCVEhSRUFEPQorICBMSUJNVUxUSVRIUkVBRD0KKyAgTFRMSUJNVUxUSVRIUkVBRD0KKyAgaWYgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiAhPSBubzsgdGhlbgorICAgIGRubCBDaGVjayB3aGV0aGVyIHRoZSBjb21waWxlciBhbmQgbGlua2VyIHN1cHBvcnQgd2VhayBkZWNsYXJhdGlvbnMuCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIGltcG9ydGVkIHN5bWJvbHMgY2FuIGJlIGRlY2xhcmVkIHdlYWtdKQorICAgIGdsX2hhdmVfd2Vhaz1ubworICAgIEFDX1RSWV9MSU5LKFtleHRlcm4gdm9pZCB4eXp6eSAoKTsKKyNwcmFnbWEgd2VhayB4eXp6eV0sIFt4eXp6eSgpO10sIFtnbF9oYXZlX3dlYWs9eWVzXSkKKyAgICBBQ19NU0dfUkVTVUxUKFskZ2xfaGF2ZV93ZWFrXSkKKyAgICBpZiB0ZXN0ICIkZ2xfdXNlX3RocmVhZHMiID0geWVzIHx8IHRlc3QgIiRnbF91c2VfdGhyZWFkcyIgPSBwb3NpeDsgdGhlbgorICAgICAgIyBPbiBPU0YvMSwgdGhlIGNvbXBpbGVyIG5lZWRzIHRoZSBmbGFnIC1wdGhyZWFkIG9yIC1EX1JFRU5UUkFOVCBzbyB0aGF0CisgICAgICAjIGl0IGdyb2tzIDxwdGhyZWFkLmg+LiBJdCdzIGFkZGVkIGFib3ZlLCBpbiBnbF9MT0NLX0VBUkxZX0JPRFkuCisgICAgICBBQ19DSEVDS19IRUFERVIocHRocmVhZC5oLCBnbF9oYXZlX3B0aHJlYWRfaD15ZXMsIGdsX2hhdmVfcHRocmVhZF9oPW5vKQorICAgICAgaWYgdGVzdCAiJGdsX2hhdmVfcHRocmVhZF9oIiA9IHllczsgdGhlbgorICAgICAgICAjIE90aGVyIHBvc3NpYmxlIHRlc3RzOgorICAgICAgICAjICAgLWxwdGhyZWFkcyAoRlNVIHRocmVhZHMsIFBDdGhyZWFkcykKKyAgICAgICAgIyAgIC1sZ3RocmVhZHMKKyAgICAgICAgZ2xfaGF2ZV9wdGhyZWFkPQorICAgICAgICAjIFRlc3Qgd2hldGhlciBib3RoIHB0aHJlYWRfbXV0ZXhfbG9jayBhbmQgcHRocmVhZF9tdXRleGF0dHJfaW5pdCBleGlzdAorICAgICAgICAjIGluIGxpYmMuIElSSVggNi41IGhhcyB0aGUgZmlyc3Qgb25lIGluIGJvdGggbGliYyBhbmQgbGlicHRocmVhZCwgYnV0CisgICAgICAgICMgdGhlIHNlY29uZCBvbmUgb25seSBpbiBsaWJwdGhyZWFkLCBhbmQgbG9jay5jIG5lZWRzIGl0LgorICAgICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPHB0aHJlYWQuaD5dLAorICAgICAgICAgIFtwdGhyZWFkX211dGV4X2xvY2soKHB0aHJlYWRfbXV0ZXhfdCopMCk7CisgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoKHB0aHJlYWRfbXV0ZXhhdHRyX3QqKTApO10sCisgICAgICAgICAgW2dsX2hhdmVfcHRocmVhZD15ZXNdKQorICAgICAgICAjIFRlc3QgZm9yIGxpYnB0aHJlYWQgYnkgbG9va2luZyBmb3IgcHRocmVhZF9raWxsLiAoTm90IHB0aHJlYWRfc2VsZiwKKyAgICAgICAgIyBzaW5jZSBpdCBpcyBkZWZpbmVkIGFzIGEgbWFjcm8gb24gT1NGLzEuKQorICAgICAgICBpZiB0ZXN0IC1uICIkZ2xfaGF2ZV9wdGhyZWFkIjsgdGhlbgorICAgICAgICAgICMgVGhlIHByb2dyYW0gbGlua3MgZmluZSB3aXRob3V0IGxpYnB0aHJlYWQuIEJ1dCBpdCBtYXkgYWN0dWFsbHkKKyAgICAgICAgICAjIG5lZWQgdG8gbGluayB3aXRoIGxpYnB0aHJlYWQgaW4gb3JkZXIgdG8gY3JlYXRlIG11bHRpcGxlIHRocmVhZHMuCisgICAgICAgICAgQUNfQ0hFQ0tfTElCKHB0aHJlYWQsIHB0aHJlYWRfa2lsbCwKKyAgICAgICAgICAgIFtMSUJNVUxUSVRIUkVBRD0tbHB0aHJlYWQgTFRMSUJNVUxUSVRIUkVBRD0tbHB0aHJlYWQKKyAgICAgICAgICAgICAjIE9uIFNvbGFyaXMgYW5kIEhQLVVYLCBtb3N0IHB0aHJlYWQgZnVuY3Rpb25zIGV4aXN0IGFsc28gaW4gbGliYy4KKyAgICAgICAgICAgICAjIFRoZXJlZm9yZSBwdGhyZWFkX2luX3VzZSgpIG5lZWRzIHRvIGFjdHVhbGx5IHRyeSB0byBjcmVhdGUgYQorICAgICAgICAgICAgICMgdGhyZWFkOiBwdGhyZWFkX2NyZWF0ZSBmcm9tIGxpYmMgd2lsbCBmYWlsLCB3aGVyZWFzCisgICAgICAgICAgICAgIyBwdGhyZWFkX2NyZWF0ZSB3aWxsIGFjdHVhbGx5IGNyZWF0ZSBhIHRocmVhZC4KKyAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgIHNvbGFyaXMqIHwgaHB1eCopCisgICAgICAgICAgICAgICAgIEFDX0RFRklORShbUFRIUkVBRF9JTl9VU0VfREVURUNUSU9OX0hBUkRdLCAxLAorICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgaWYgdGhlIHB0aHJlYWRfaW5fdXNlKCkgZGV0ZWN0aW9uIGlzIGhhcmQuXSkKKyAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBdKQorICAgICAgICBlbHNlCisgICAgICAgICAgIyBTb21lIGxpYnJhcnkgaXMgbmVlZGVkLiBUcnkgbGlicHRocmVhZCBhbmQgbGliY19yLgorICAgICAgICAgIEFDX0NIRUNLX0xJQihwdGhyZWFkLCBwdGhyZWFkX2tpbGwsCisgICAgICAgICAgICBbZ2xfaGF2ZV9wdGhyZWFkPXllcworICAgICAgICAgICAgIExJQlRIUkVBRD0tbHB0aHJlYWQgTFRMSUJUSFJFQUQ9LWxwdGhyZWFkCisgICAgICAgICAgICAgTElCTVVMVElUSFJFQUQ9LWxwdGhyZWFkIExUTElCTVVMVElUSFJFQUQ9LWxwdGhyZWFkXSkKKyAgICAgICAgICBpZiB0ZXN0IC16ICIkZ2xfaGF2ZV9wdGhyZWFkIjsgdGhlbgorICAgICAgICAgICAgIyBGb3IgRnJlZUJTRCA0LgorICAgICAgICAgICAgQUNfQ0hFQ0tfTElCKGNfciwgcHRocmVhZF9raWxsLAorICAgICAgICAgICAgICBbZ2xfaGF2ZV9wdGhyZWFkPXllcworICAgICAgICAgICAgICAgTElCVEhSRUFEPS1sY19yIExUTElCVEhSRUFEPS1sY19yCisgICAgICAgICAgICAgICBMSUJNVUxUSVRIUkVBRD0tbGNfciBMVExJQk1VTFRJVEhSRUFEPS1sY19yXSkKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICBpZiB0ZXN0IC1uICIkZ2xfaGF2ZV9wdGhyZWFkIjsgdGhlbgorICAgICAgICAgIGdsX3RocmVhZHNfYXBpPXBvc2l4CisgICAgICAgICAgQUNfREVGSU5FKFtVU0VfUE9TSVhfVEhSRUFEU10sIDEsCisgICAgICAgICAgICBbRGVmaW5lIGlmIHRoZSBQT1NJWCBtdWx0aXRocmVhZGluZyBsaWJyYXJ5IGNhbiBiZSB1c2VkLl0pCisgICAgICAgICAgaWYgdGVzdCAtbiAiJExJQk1VTFRJVEhSRUFEIiB8fCB0ZXN0IC1uICIkTFRMSUJNVUxUSVRIUkVBRCI7IHRoZW4KKyAgICAgICAgICAgIGlmIHRlc3QgJGdsX2hhdmVfd2VhayA9IHllczsgdGhlbgorICAgICAgICAgICAgICBBQ19ERUZJTkUoW1VTRV9QT1NJWF9USFJFQURTX1dFQUtdLCAxLAorICAgICAgICAgICAgICAgIFtEZWZpbmUgaWYgcmVmZXJlbmNlcyB0byB0aGUgUE9TSVggbXVsdGl0aHJlYWRpbmcgbGlicmFyeSBzaG91bGQgYmUgbWFkZSB3ZWFrLl0pCisgICAgICAgICAgICAgIExJQlRIUkVBRD0KKyAgICAgICAgICAgICAgTFRMSUJUSFJFQUQ9CisgICAgICAgICAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgICAgIyBPU0YvMSA0LjAgYW5kIE1hY09TIFggMTAuMSBsYWNrIHRoZSBwdGhyZWFkX3J3bG9ja190IHR5cGUgYW5kIHRoZQorICAgICAgICAgICMgcHRocmVhZF9yd2xvY2tfKiBmdW5jdGlvbnMuCisgICAgICAgICAgQUNfQ0hFQ0tfVFlQRShbcHRocmVhZF9yd2xvY2tfdF0sCisgICAgICAgICAgICBbQUNfREVGSU5FKFtIQVZFX1BUSFJFQURfUldMT0NLXSwgMSwKKyAgICAgICAgICAgICAgIFtEZWZpbmUgaWYgdGhlIFBPU0lYIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgaGFzIHJlYWQvd3JpdGUgbG9ja3MuXSldLAorICAgICAgICAgICAgW10sCisgICAgICAgICAgICBbI2luY2x1ZGUgPHB0aHJlYWQuaD5dKQorICAgICAgICAgICMgZ2xpYmMgZGVmaW5lcyBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSBhcyBlbnVtLCBub3QgYXMgYSBtYWNyby4KKyAgICAgICAgICBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHB0aHJlYWQuaD5dLAorICAgICAgICAgICAgWyNpZiBfX0ZyZWVCU0RfXyA9PSA0CitlcnJvciAiTm8sIGluIEZyZWVCU0QgNC4wIHJlY3Vyc2l2ZSBtdXRleGVzIGFjdHVhbGx5IGRvbid0IHdvcmsuIgorI2Vsc2UKK2ludCB4ID0gKGludClQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRTsKK3JldHVybiAheDsKKyNlbmRpZl0sCisgICAgICAgICAgICBbQUNfREVGSU5FKFtIQVZFX1BUSFJFQURfTVVURVhfUkVDVVJTSVZFXSwgMSwKKyAgICAgICAgICAgICAgIFtEZWZpbmUgaWYgdGhlIDxwdGhyZWFkLmg+IGRlZmluZXMgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUuXSldKQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorICAgIGlmIHRlc3QgLXogIiRnbF9oYXZlX3B0aHJlYWQiOyB0aGVuCisgICAgICBpZiB0ZXN0ICIkZ2xfdXNlX3RocmVhZHMiID0geWVzIHx8IHRlc3QgIiRnbF91c2VfdGhyZWFkcyIgPSBzb2xhcmlzOyB0aGVuCisgICAgICAgIGdsX2hhdmVfc29sYXJpc3RocmVhZD0KKyAgICAgICAgZ2xfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgICAgTElCUz0iJExJQlMgLWx0aHJlYWQiCisgICAgICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8dGhyZWFkLmg+CisjaW5jbHVkZSA8c3luY2guaD5dLAorICAgICAgICAgIFt0aHJfc2VsZigpO10sCisgICAgICAgICAgW2dsX2hhdmVfc29sYXJpc3RocmVhZD15ZXNdKQorICAgICAgICBMSUJTPSIkZ2xfc2F2ZV9MSUJTIgorICAgICAgICBpZiB0ZXN0IC1uICIkZ2xfaGF2ZV9zb2xhcmlzdGhyZWFkIjsgdGhlbgorICAgICAgICAgIGdsX3RocmVhZHNfYXBpPXNvbGFyaXMKKyAgICAgICAgICBMSUJUSFJFQUQ9LWx0aHJlYWQKKyAgICAgICAgICBMVExJQlRIUkVBRD0tbHRocmVhZAorICAgICAgICAgIExJQk1VTFRJVEhSRUFEPSIkTElCVEhSRUFEIgorICAgICAgICAgIExUTElCTVVMVElUSFJFQUQ9IiRMVExJQlRIUkVBRCIKKyAgICAgICAgICBBQ19ERUZJTkUoW1VTRV9TT0xBUklTX1RIUkVBRFNdLCAxLAorICAgICAgICAgICAgW0RlZmluZSBpZiB0aGUgb2xkIFNvbGFyaXMgbXVsdGl0aHJlYWRpbmcgbGlicmFyeSBjYW4gYmUgdXNlZC5dKQorICAgICAgICAgIGlmIHRlc3QgJGdsX2hhdmVfd2VhayA9IHllczsgdGhlbgorICAgICAgICAgICAgQUNfREVGSU5FKFtVU0VfU09MQVJJU19USFJFQURTX1dFQUtdLCAxLAorICAgICAgICAgICAgICBbRGVmaW5lIGlmIHJlZmVyZW5jZXMgdG8gdGhlIG9sZCBTb2xhcmlzIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgc2hvdWxkIGJlIG1hZGUgd2Vhay5dKQorICAgICAgICAgICAgTElCVEhSRUFEPQorICAgICAgICAgICAgTFRMSUJUSFJFQUQ9CisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkZ2xfdXNlX3RocmVhZHMiID0gcHRoOyB0aGVuCisgICAgICBnbF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgICBBQ19MSUJfTElOS0ZMQUdTKHB0aCkKKyAgICAgIGdsX2hhdmVfcHRoPQorICAgICAgZ2xfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgIExJQlM9IiRMSUJTIC1scHRoIgorICAgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxwdGguaD5dLCBbcHRoX3NlbGYoKTtdLCBnbF9oYXZlX3B0aD15ZXMpCisgICAgICBMSUJTPSIkZ2xfc2F2ZV9MSUJTIgorICAgICAgaWYgdGVzdCAtbiAiJGdsX2hhdmVfcHRoIjsgdGhlbgorICAgICAgICBnbF90aHJlYWRzX2FwaT1wdGgKKyAgICAgICAgTElCVEhSRUFEPSIkTElCUFRIIgorICAgICAgICBMVExJQlRIUkVBRD0iJExUTElCUFRIIgorICAgICAgICBMSUJNVUxUSVRIUkVBRD0iJExJQlRIUkVBRCIKKyAgICAgICAgTFRMSUJNVUxUSVRIUkVBRD0iJExUTElCVEhSRUFEIgorICAgICAgICBBQ19ERUZJTkUoW1VTRV9QVEhfVEhSRUFEU10sIDEsCisgICAgICAgICAgW0RlZmluZSBpZiB0aGUgR05VIFB0aCBtdWx0aXRocmVhZGluZyBsaWJyYXJ5IGNhbiBiZSB1c2VkLl0pCisgICAgICAgIGlmIHRlc3QgLW4gIiRMSUJNVUxUSVRIUkVBRCIgfHwgdGVzdCAtbiAiJExUTElCTVVMVElUSFJFQUQiOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAkZ2xfaGF2ZV93ZWFrID0geWVzOyB0aGVuCisgICAgICAgICAgICBBQ19ERUZJTkUoW1VTRV9QVEhfVEhSRUFEU19XRUFLXSwgMSwKKyAgICAgICAgICAgICAgW0RlZmluZSBpZiByZWZlcmVuY2VzIHRvIHRoZSBHTlUgUHRoIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgc2hvdWxkIGJlIG1hZGUgd2Vhay5dKQorICAgICAgICAgICAgTElCVEhSRUFEPQorICAgICAgICAgICAgTFRMSUJUSFJFQUQ9CisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgQ1BQRkxBR1M9IiRnbF9zYXZlX0NQUEZMQUdTIgorICAgICAgZmkKKyAgICBmaQorICAgIGlmIHRlc3QgLXogIiRnbF9oYXZlX3B0aHJlYWQiOyB0aGVuCisgICAgICBpZiB0ZXN0ICIkZ2xfdXNlX3RocmVhZHMiID0geWVzIHx8IHRlc3QgIiRnbF91c2VfdGhyZWFkcyIgPSB3aW4zMjsgdGhlbgorICAgICAgICBpZiB7IGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgbWluZ3cqKSB0cnVlOzsKKyAgICAgICAgICAgICAgICopIGZhbHNlOzsKKyAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgIH07IHRoZW4KKyAgICAgICAgICBnbF90aHJlYWRzX2FwaT13aW4zMgorICAgICAgICAgIEFDX0RFRklORShbVVNFX1dJTjMyX1RIUkVBRFNdLCAxLAorICAgICAgICAgICAgW0RlZmluZSBpZiB0aGUgV2luMzIgbXVsdGl0aHJlYWRpbmcgQVBJIGNhbiBiZSB1c2VkLl0pCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGZpCisgIGZpCisgIEFDX01TR19DSEVDS0lORyhbZm9yIG11bHRpdGhyZWFkIEFQSSB0byB1c2VdKQorICBBQ19NU0dfUkVTVUxUKFskZ2xfdGhyZWFkc19hcGldKQorICBBQ19TVUJTVChMSUJUSFJFQUQpCisgIEFDX1NVQlNUKExUTElCVEhSRUFEKQorICBBQ19TVUJTVChMSUJNVUxUSVRIUkVBRCkKKyAgQUNfU1VCU1QoTFRMSUJNVUxUSVRIUkVBRCkKK10pCisKK0FDX0RFRlVOKFtnbF9MT0NLXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfTE9DS19FQVJMWV0pCisgIEFDX1JFUVVJUkUoW2dsX0xPQ0tfQk9EWV0pCisgIGdsX1BSRVJFUV9MT0NLCitdKQorCisjIFByZXJlcXVpc2l0ZXMgb2YgbGliL2xvY2suYy4KK0FDX0RFRlVOKFtnbF9QUkVSRVFfTE9DS10sIFsKKyAgQUNfUkVRVUlSRShbQUNfQ19JTkxJTkVdKQorXSkKKworZG5sIFN1cnZleSBvZiBwbGF0Zm9ybXM6CitkbmwKK2RubCBQbGF0Zm9ybSAgICAgICAgICBBdmFpbGFibGUgICBDb21waWxlciAgICBTdXBwb3J0cyAgIHRlc3QtbG9jaworZG5sICAgICAgICAgICAgICAgICAgIGZsYXZvdXJzICAgIG9wdGlvbiAgICAgIHdlYWsgICAgICAgcmVzdWx0CitkbmwgLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tICAgLS0tLS0tLS0tICAgLS0tLS0tLS0gICAtLS0tLS0tLS0KK2RubCBMaW51eCAyLjQvZ2xpYmMgICBwb3NpeCAgICAgICAtbHB0aHJlYWQgICAgICAgWSAgICAgIE9LCitkbmwKK2RubCBHTlUgSHVyZC9nbGliYyAgICBwb3NpeAorZG5sCitkbmwgRnJlZUJTRCA1LjMgICAgICAgcG9zaXggICAgICAgLWxjX3IgICAgICAgICAgIFkKK2RubCAgICAgICAgICAgICAgICAgICBwb3NpeCAgICAgICAtbGtzZSA/ICAgICAgICAgWQorZG5sICAgICAgICAgICAgICAgICAgIHBvc2l4ICAgICAgIC1scHRocmVhZCA/ICAgICBZCitkbmwgICAgICAgICAgICAgICAgICAgcG9zaXggICAgICAgLWx0aHIgICAgICAgICAgIFkKK2RubAorZG5sIEZyZWVCU0QgNS4yICAgICAgIHBvc2l4ICAgICAgIC1sY19yICAgICAgICAgICBZCitkbmwgICAgICAgICAgICAgICAgICAgcG9zaXggICAgICAgLWxrc2UgICAgICAgICAgIFkKK2RubCAgICAgICAgICAgICAgICAgICBwb3NpeCAgICAgICAtbHRociAgICAgICAgICAgWQorZG5sCitkbmwgRnJlZUJTRCA0LjAsNC4xMCAgcG9zaXggICAgICAgLWxjX3IgICAgICAgICAgIFkgICAgICBPSworZG5sCitkbmwgTmV0QlNEIDEuNiAgICAgICAgLS0KK2RubAorZG5sIE9wZW5CU0QgMy40ICAgICAgIHBvc2l4ICAgICAgIC1scHRocmVhZCAgICAgICBZICAgICAgT0sKK2RubAorZG5sIE1hY09TIFggMTAuWzEyM10gIHBvc2l4ICAgICAgIC1scHRocmVhZCAgICAgICBZICAgICAgT0sKK2RubAorZG5sIFNvbGFyaXMgNyw4LDkgICAgIHBvc2l4ICAgICAgIC1scHRocmVhZCAgICAgICBZICAgICAgU29sIDcsODogMC4wOyBTb2wgOTogT0sKK2RubCAgICAgICAgICAgICAgICAgICBzb2xhcmlzICAgICAtbHRocmVhZCAgICAgICAgWSAgICAgIFNvbCA3LDg6IDAuMDsgU29sIDk6IE9LCitkbmwKK2RubCBIUC1VWCAxMSAgICAgICAgICBwb3NpeCAgICAgICAtbHB0aHJlYWQgICAgICAgTiAoY2MpIE9LCitkbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFkgKGdjYykKK2RubAorZG5sIElSSVggNi41ICAgICAgICAgIHBvc2l4ICAgICAgIC1scHRocmVhZCAgICAgICBZICAgICAgMC41CitkbmwKK2RubCBBSVggNC4zLDUuMSAgICAgICBwb3NpeCAgICAgICAtbHB0aHJlYWQgICAgICAgTiAgICAgIEFJWCA0OiAwLjU7IEFJWCA1OiBPSworZG5sCitkbmwgT1NGLzEgNC4wLDUuMSAgICAgcG9zaXggICAgICAgLXB0aHJlYWQgKGNjKSAgIE4gICAgICBPSworZG5sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1scHRocmVhZCAoZ2NjKSBZCitkbmwKK2RubCBDeWd3aW4gICAgICAgICAgICBwb3NpeCAgICAgICAtbHB0aHJlYWQgICAgICAgWSAgICAgIE9LCitkbmwKK2RubCBBbnkgb2YgdGhlIGFib3ZlICBwdGggICAgICAgICAtbHB0aCAgICAgICAgICAgICAgICAgIDAuMAorZG5sCitkbmwgTWluZ3cgICAgICAgICAgICAgd2luMzIgICAgICAgICAgICAgICAgICAgICAgIE4gICAgICBPSworZG5sCitkbmwgQmVPUyA1ICAgICAgICAgICAgLS0KK2RubAorZG5sIFRoZSB0ZXN0LWxvY2sgcmVzdWx0IHNob3dzIHdoYXQgaGFwcGVucyBpZiBpbiB0ZXN0LWxvY2suYyBFWFBMSUNJVF9ZSUVMRCBpcworZG5sIHR1cm5lZCBvZmY6CitkbmwgICBPSyBpZiBhbGwgdGhyZWUgdGVzdHMgdGVybWluYXRlIE9LLAorZG5sICAgMC41IGlmIHRoZSBmaXJzdCB0ZXN0IHRlcm1pbmF0ZXMgT0sgYnV0IHRoZSBzZWNvbmQgb25lIGxvb3BzIGVuZGxlc3NseSwKK2RubCAgIDAuMCBpZiB0aGUgZmlyc3QgdGVzdCBhbHJlYWR5IGxvb3BzIGVuZGxlc3NseS4KZGlmZiAtLWdpdCBhL200L2xvbmdsb25nLm00IGIvbTQvbG9uZ2xvbmcubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcyZTUzYgotLS0gL2Rldi9udWxsCisrKyBiL200L2xvbmdsb25nLm00CkBAIC0wLDAgKzEsMTA5IEBACisjIGxvbmdsb25nLm00IHNlcmlhbCAxMworZG5sIENvcHlyaWdodCAoQykgMTk5OS0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorCisjIERlZmluZSBIQVZFX0xPTkdfTE9OR19JTlQgaWYgJ2xvbmcgbG9uZyBpbnQnIHdvcmtzLgorIyBUaGlzIGZpeGVzIGEgYnVnIGluIEF1dG9jb25mIDIuNjEsIGJ1dCBjYW4gYmUgcmVtb3ZlZCBvbmNlIHdlCisjIGFzc3VtZSAyLjYyIGV2ZXJ5d2hlcmUuCisKKyMgTm90ZTogSWYgdGhlIHR5cGUgJ2xvbmcgbG9uZyBpbnQnIGV4aXN0cyBidXQgaXMgb25seSAzMiBiaXRzIGxhcmdlCisjIChhcyBvbiBzb21lIHZlcnkgb2xkIGNvbXBpbGVycyksIEhBVkVfTE9OR19MT05HX0lOVCB3aWxsIG5vdCBiZQorIyBkZWZpbmVkLiBJbiB0aGlzIGNhc2UgeW91IGNhbiB0cmVhdCAnbG9uZyBsb25nIGludCcgbGlrZSAnbG9uZyBpbnQnLgorCitBQ19ERUZVTihbQUNfVFlQRV9MT05HX0xPTkdfSU5UXSwKK1sKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBsb25nIGxvbmcgaW50XSwgW2FjX2N2X3R5cGVfbG9uZ19sb25nX2ludF0sCisgICAgW0FDX0xJTktfSUZFTFNFKAorICAgICAgIFtfQUNfVFlQRV9MT05HX0xPTkdfU05JUFBFVF0sCisgICAgICAgW2RubCBUaGlzIGNhdGNoZXMgYSBidWcgaW4gVGFuZGVtIE5vblN0b3AgS2VybmVsIChPU1MpIGNjIC1PIGNpcmNhIDIwMDQuCisJZG5sIElmIGNyb3NzIGNvbXBpbGluZywgYXNzdW1lIHRoZSBidWcgaXNuJ3QgaW1wb3J0YW50LCBzaW5jZQorCWRubCBub2JvZHkgY3Jvc3MgY29tcGlsZXMgZm9yIHRoaXMgcGxhdGZvcm0gYXMgZmFyIGFzIHdlIGtub3cuCisJQUNfUlVOX0lGRUxTRSgKKwkgIFtBQ19MQU5HX1BST0dSQU0oCisJICAgICBbW0AlOkBpbmNsdWRlIDxsaW1pdHMuaD4KKwkgICAgICAgQCU6QGlmbmRlZiBMTE9OR19NQVgKKwkgICAgICAgQCU6QCBkZWZpbmUgSEFMRiBcCisJCQkoMUxMIDw8IChzaXplb2YgKGxvbmcgbG9uZyBpbnQpICogQ0hBUl9CSVQgLSAyKSkKKwkgICAgICAgQCU6QCBkZWZpbmUgTExPTkdfTUFYIChIQUxGIC0gMSArIEhBTEYpCisJICAgICAgIEAlOkBlbmRpZl1dLAorCSAgICAgW1tsb25nIGxvbmcgaW50IG4gPSAxOworCSAgICAgICBpbnQgaTsKKwkgICAgICAgZm9yIChpID0gMDsgOyBpKyspCisJCSB7CisJCSAgIGxvbmcgbG9uZyBpbnQgbSA9IG4gPDwgaTsKKwkJICAgaWYgKG0gPj4gaSAhPSBuKQorCQkgICAgIHJldHVybiAxOworCQkgICBpZiAoTExPTkdfTUFYIC8gMiA8IG0pCisJCSAgICAgYnJlYWs7CisJCSB9CisJICAgICAgIHJldHVybiAwO11dKV0sCisJICBbYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50PXllc10sCisJICBbYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50PW5vXSwKKwkgIFthY19jdl90eXBlX2xvbmdfbG9uZ19pbnQ9eWVzXSldLAorICAgICAgIFthY19jdl90eXBlX2xvbmdfbG9uZ19pbnQ9bm9dKV0pCisgIGlmIHRlc3QgJGFjX2N2X3R5cGVfbG9uZ19sb25nX2ludCA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShbSEFWRV9MT05HX0xPTkdfSU5UXSwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgbG9uZyBsb25nIGludCcuXSkKKyAgZmkKK10pCisKKyMgRGVmaW5lIEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVCBpZiAndW5zaWduZWQgbG9uZyBsb25nIGludCcgd29ya3MuCisjIFRoaXMgZml4ZXMgYSBidWcgaW4gQXV0b2NvbmYgMi42MSwgYnV0IGNhbiBiZSByZW1vdmVkIG9uY2Ugd2UKKyMgYXNzdW1lIDIuNjIgZXZlcnl3aGVyZS4KKworIyBOb3RlOiBJZiB0aGUgdHlwZSAndW5zaWduZWQgbG9uZyBsb25nIGludCcgZXhpc3RzIGJ1dCBpcyBvbmx5IDMyIGJpdHMKKyMgbGFyZ2UgKGFzIG9uIHNvbWUgdmVyeSBvbGQgY29tcGlsZXJzKSwgQUNfVFlQRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UCisjIHdpbGwgbm90IGJlIGRlZmluZWQuIEluIHRoaXMgY2FzZSB5b3UgY2FuIHRyZWF0ICd1bnNpZ25lZCBsb25nIGxvbmcgaW50JworIyBsaWtlICd1bnNpZ25lZCBsb25nIGludCcuCisKK0FDX0RFRlVOKFtBQ19UWVBFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRdLAorWworICBBQ19DQUNIRV9DSEVDSyhbZm9yIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnRdLAorICAgIFthY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnRdLAorICAgIFtBQ19MSU5LX0lGRUxTRSgKKyAgICAgICBbX0FDX1RZUEVfTE9OR19MT05HX1NOSVBQRVRdLAorICAgICAgIFthY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQ9eWVzXSwKKyAgICAgICBbYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50PW5vXSldKQorICBpZiB0ZXN0ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoW0hBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVF0sIDEsCisgICAgICBbRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQnLl0pCisgIGZpCitdKQorCisjIEV4cGFuZHMgdG8gYSBDIHByb2dyYW0gdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0IGZvciBzaW11bHRhbmVvdXMgc3VwcG9ydAorIyBvZiAnbG9uZyBsb25nJyBhbmQgJ3Vuc2lnbmVkIGxvbmcgbG9uZycuIFdlIGRvbid0IHdhbnQgdG8gc2F5IHRoYXQKKyMgJ2xvbmcgbG9uZycgaXMgYXZhaWxhYmxlIGlmICd1bnNpZ25lZCBsb25nIGxvbmcnIGlzIG5vdCwgb3IgdmljZSB2ZXJzYSwKKyMgYmVjYXVzZSB0b28gbWFueSBwcm9ncmFtcyByZWx5IG9uIHRoZSBzeW1tZXRyeSBiZXR3ZWVuIHNpZ25lZCBhbmQgdW5zaWduZWQKKyMgaW50ZWdlciB0eXBlcyAoZXhjbHVkaW5nICdib29sJykuCitBQ19ERUZVTihbX0FDX1RZUEVfTE9OR19MT05HX1NOSVBQRVRdLAorWworICBBQ19MQU5HX1BST0dSQU0oCisgICAgW1svKiBUZXN0IHByZXByb2Nlc3Nvci4gICovCisgICAgICAjaWYgISAoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCA8IDAgJiYgMCA8IDkyMjMzNzIwMzY4NTQ3NzU4MDdsbCkKKyAgICAgICAgZXJyb3IgaW4gcHJlcHJvY2Vzc29yOworICAgICAgI2VuZGlmCisgICAgICAjaWYgISAoMTg0NDY3NDQwNzM3MDk1NTE2MTVVTEwgPD0gLTF1bGwpCisgICAgICAgIGVycm9yIGluIHByZXByb2Nlc3NvcjsKKyAgICAgICNlbmRpZgorICAgICAgLyogVGVzdCBsaXRlcmFscy4gICovCisgICAgICBsb25nIGxvbmcgaW50IGxsID0gOTIyMzM3MjAzNjg1NDc3NTgwN2xsOworICAgICAgbG9uZyBsb25nIGludCBubGwgPSAtOTIyMzM3MjAzNjg1NDc3NTgwN0xMOworICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGludCB1bGwgPSAxODQ0Njc0NDA3MzcwOTU1MTYxNVVMTDsKKyAgICAgIC8qIFRlc3QgY29uc3RhbnQgZXhwcmVzc2lvbnMuICAgKi8KKyAgICAgIHR5cGVkZWYgaW50IGFbKCgtOTIyMzM3MjAzNjg1NDc3NTgwN0xMIDwgMCAmJiAwIDwgOTIyMzM3MjAzNjg1NDc3NTgwN2xsKQorCQkgICAgID8gMSA6IC0xKV07CisgICAgICB0eXBlZGVmIGludCBiWygxODQ0Njc0NDA3MzcwOTU1MTYxNVVMTCA8PSAodW5zaWduZWQgbG9uZyBsb25nIGludCkgLTEKKwkJICAgICA/IDEgOiAtMSldOworICAgICAgaW50IGkgPSA2MztdXSwKKyAgICBbWy8qIFRlc3QgYXZhaWxhYmlsaXR5IG9mIHJ1bnRpbWUgcm91dGluZXMgZm9yIHNoaWZ0IGFuZCBkaXZpc2lvbi4gICovCisgICAgICBsb25nIGxvbmcgaW50IGxsbWF4ID0gOTIyMzM3MjAzNjg1NDc3NTgwN2xsOworICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGludCB1bGxtYXggPSAxODQ0Njc0NDA3MzcwOTU1MTYxNXVsbDsKKyAgICAgIHJldHVybiAoKGxsIDw8IDYzKSB8IChsbCA+PiA2MykgfCAobGwgPCBpKSB8IChsbCA+IGkpCisJICAgICAgfCAobGxtYXggLyBsbCkgfCAobGxtYXggJSBsbCkKKwkgICAgICB8ICh1bGwgPDwgNjMpIHwgKHVsbCA+PiA2MykgfCAodWxsIDw8IGkpIHwgKHVsbCA+PiBpKQorCSAgICAgIHwgKHVsbG1heCAvIHVsbCkgfCAodWxsbWF4ICUgdWxsKSk7XV0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvbHRvcHRpb25zLm00IGIvbTQvbHRvcHRpb25zLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MTUxYTMKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9sdG9wdGlvbnMubTQKQEAgLTAsMCArMSwzNjggQEAKKyMgSGVscGVyIGZ1bmN0aW9ucyBmb3Igb3B0aW9uIGhhbmRsaW5nLiAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIworIyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAwNAorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDYgbHRvcHRpb25zLm00CisKKyMgVGhpcyBpcyB0byBoZWxwIGFjbG9jYWwgZmluZCB0aGVzZSBtYWNyb3MsIGFzIGl0IGNhbid0IHNlZSBtNF9kZWZpbmUuCitBQ19ERUZVTihbTFRPUFRJT05TX1ZFUlNJT05dLCBbbTRfaWYoWzFdKV0pCisKKworIyBfTFRfTUFOR0xFX09QVElPTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9NQU5HTEVfT1BUSU9OXSwKK1tbX0xUX09QVElPTl9dbTRfYnBhdHN1YnN0KCQxX18kMiwgW1teYS16QS1aMC05X11dLCBbX10pXSkKKworCisjIF9MVF9TRVRfT1BUSU9OKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IG9wdGlvbiBPUFRJT04tTkFNRSBmb3IgbWFjcm8gTUFDUk8tTkFNRSwgYW5kIGlmIHRoZXJlIGlzIGEKKyMgbWF0Y2hpbmcgaGFuZGxlciBkZWZpbmVkLCBkaXNwYXRjaCB0byBpdC4gIE90aGVyIE9QVElPTi1OQU1FcyBhcmUKKyMgc2F2ZWQgYXMgYSBmbGFnLgorbTRfZGVmaW5lKFtfTFRfU0VUX09QVElPTl0sCitbbTRfZGVmaW5lKF9MVF9NQU5HTEVfT1BUSU9OKFskMV0sIFskMl0pKWRubAorbTRfaWZkZWYoX0xUX01BTkdMRV9ERUZVTihbJDFdLCBbJDJdKSwKKyAgICAgICAgX0xUX01BTkdMRV9ERUZVTihbJDFdLCBbJDJdKSwKKyAgICBbbTRfd2FybmluZyhbVW5rbm93biAkMSBvcHRpb24gYCQyJ10pXSlbXWRubAorXSkKKworCisjIF9MVF9JRl9PUFRJT04oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUsIElGLVNFVCwgW0lGLU5PVC1TRVRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhlY3V0ZSBJRi1TRVQgaWYgT1BUSU9OIGlzIHNldCwgSUYtTk9ULVNFVCBvdGhlcndpc2UuCittNF9kZWZpbmUoW19MVF9JRl9PUFRJT05dLAorW200X2lmZGVmKF9MVF9NQU5HTEVfT1BUSU9OKFskMV0sIFskMl0pLCBbJDNdLCBbJDRdKV0pCisKKworIyBfTFRfVU5MRVNTX09QVElPTlMoTUFDUk8tTkFNRSwgT1BUSU9OLUxJU1QsIElGLU5PVC1TRVQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhlY3V0ZSBJRi1OT1QtU0VUIHVubGVzcyBhbGwgb3B0aW9ucyBpbiBPUFRJT04tTElTVCBmb3IgTUFDUk8tTkFNRQorIyBhcmUgc2V0LgorbTRfZGVmaW5lKFtfTFRfVU5MRVNTX09QVElPTlNdLAorW200X2ZvcmVhY2goW19MVF9PcHRpb25dLCBtNF9zcGxpdChtNF9ub3JtYWxpemUoWyQyXSkpLAorCSAgICBbbTRfaWZkZWYoX0xUX01BTkdMRV9PUFRJT04oWyQxXSwgX0xUX09wdGlvbiksCisJCSAgICAgIFttNF9kZWZpbmUoWyQwX2ZvdW5kXSldKV0pW11kbmwKK200X2lmZGVmKFskMF9mb3VuZF0sIFttNF91bmRlZmluZShbJDBfZm91bmRdKV0sIFskMworXSlbXWRubAorXSkKKworCisjIF9MVF9TRVRfT1BUSU9OUyhNQUNSTy1OQU1FLCBPUFRJT04tTElTVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPUFRJT04tTElTVCBpcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIExpYnRvb2wgb3B0aW9ucyBhc3NvY2lhdGVkCisjIHdpdGggTUFDUk8tTkFNRS4gIElmIGFueSBPUFRJT04gaGFzIGEgbWF0Y2hpbmcgaGFuZGxlciBkZWNsYXJlZCB3aXRoCisjIExUX09QVElPTl9ERUZJTkUsIGRpc3BhdGNoIHRvIHRoYXQgbWFjcm87IG90aGVyd2lzZSBjb21wbGFpbiBhYm91dAorIyB0aGUgdW5rbm93biBvcHRpb24gYW5kIGV4aXQuCittNF9kZWZ1bihbX0xUX1NFVF9PUFRJT05TXSwKK1sjIFNldCBvcHRpb25zCittNF9mb3JlYWNoKFtfTFRfT3B0aW9uXSwgbTRfc3BsaXQobTRfbm9ybWFsaXplKFskMl0pKSwKKyAgICBbX0xUX1NFVF9PUFRJT04oWyQxXSwgX0xUX09wdGlvbildKQorCittNF9pZihbJDFdLFtMVF9JTklUXSxbCisgIGRubAorICBkbmwgU2ltcGx5IHNldCBzb21lIGRlZmF1bHQgdmFsdWVzIChpLmUgb2ZmKSBpZiBib29sZWFuIG9wdGlvbnMgd2VyZSBub3QKKyAgZG5sIHNwZWNpZmllZDoKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW2Rsb3Blbl0sIFtlbmFibGVfZGxvcGVuPW5vCisgIF0pCisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFt3aW4zMi1kbGxdLCBbZW5hYmxlX3dpbjMyX2RsbD1ubworICBdKQorICBkbmwKKyAgZG5sIElmIG5vIHJlZmVyZW5jZSB3YXMgbWFkZSB0byB2YXJpb3VzIHBhaXJzIG9mIG9wcG9zaW5nIG9wdGlvbnMsIHRoZW4KKyAgZG5sIHdlIHJ1biB0aGUgZGVmYXVsdCBtb2RlIGhhbmRsZXIgZm9yIHRoZSBwYWlyLiAgRm9yIGV4YW1wbGUsIGlmIG5laXRoZXIKKyAgZG5sIGBzaGFyZWQnIG5vciBgZGlzYWJsZS1zaGFyZWQnIHdhcyBwYXNzZWQsIHdlIGVuYWJsZSBidWlsZGluZyBvZiBzaGFyZWQKKyAgZG5sIGFyY2hpdmVzIGJ5IGRlZmF1bHQ6CisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtzaGFyZWQgZGlzYWJsZS1zaGFyZWRdLCBbX0xUX0VOQUJMRV9TSEFSRURdKQorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbc3RhdGljIGRpc2FibGUtc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDXSkKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3BpYy1vbmx5IG5vLXBpY10sIFtfTFRfV0lUSF9QSUNdKQorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbZmFzdC1pbnN0YWxsIGRpc2FibGUtZmFzdC1pbnN0YWxsXSwKKyAgCQkgICBbX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExdKQorICBdKQorXSkjIF9MVF9TRVRfT1BUSU9OUworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTWFjcm9zIHRvIGhhbmRsZSBMVF9JTklUIG9wdGlvbnMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBfTFRfTUFOR0xFX0RFRlVOKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfTUFOR0xFX0RFRlVOXSwKK1tbX0xUX09QVElPTl9ERUZVTl9dbTRfYnBhdHN1YnN0KG00X3RvdXBwZXIoWyQxX18kMl0pLCBbW15BLVowLTlfXV0sIFtfXSldKQorCisKKyMgTFRfT1BUSU9OX0RFRklORShNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSwgQ09ERSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbTFRfT1BUSU9OX0RFRklORV0sCitbbTRfZGVmaW5lKF9MVF9NQU5HTEVfREVGVU4oWyQxXSwgWyQyXSksIFskM10pW11kbmwKK10pIyBMVF9PUFRJT05fREVGSU5FCisKKworIyBkbG9wZW4KKyMgLS0tLS0tCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rsb3Blbl0sIFtlbmFibGVfZGxvcGVuPXllcworXSkKKworQVVfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkbG9wZW5dKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UKK3B1dCB0aGUgYGRsb3Blbicgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl0sIFtdKQorCisKKyMgd2luMzItZGxsCisjIC0tLS0tLS0tLQorIyBEZWNsYXJlIHBhY2thZ2Ugc3VwcG9ydCBmb3IgYnVpbGRpbmcgd2luMzIgZGxsJ3MuCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3dpbjMyLWRsbF0sCitbZW5hYmxlX3dpbjMyX2RsbD15ZXMKKworY2FzZSAkaG9zdCBpbgorKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi1jZWdjYyopCisgIEFDX0NIRUNLX1RPT0woQVMsIGFzLCBmYWxzZSkKKyAgQUNfQ0hFQ0tfVE9PTChETExUT09MLCBkbGx0b29sLCBmYWxzZSkKKyAgQUNfQ0hFQ0tfVE9PTChPQkpEVU1QLCBvYmpkdW1wLCBmYWxzZSkKKyAgOzsKK2VzYWMKKwordGVzdCAteiAiJEFTIiAmJiBBUz1hcworX0xUX0RFQ0woW10sIFtBU10sICAgICAgWzBdLCBbQXNzZW1ibGVyIHByb2dyYW1dKWRubAorCit0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCitfTFRfREVDTChbXSwgW0RMTFRPT0xdLCBbMF0sIFtETEwgY3JlYXRpb24gcHJvZ3JhbV0pZG5sCisKK3Rlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKK19MVF9ERUNMKFtdLCBbT0JKRFVNUF0sIFswXSwgW09iamVjdCBkdW1wZXIgcHJvZ3JhbV0pZG5sCitdKSMgd2luMzItZGxsCisKK0FVX0RFRlVOKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbd2luMzItZGxsXSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91CitwdXQgdGhlIGB3aW4zMi1kbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9XSU4zMl9ETExdLCBbXSkKKworCisjIF9MVF9FTkFCTEVfU0hBUkVEKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXNoYXJlZCBmbGFnLCBhbmQgc3VwcG9ydHMgdGhlIGBzaGFyZWQnIGFuZAorIyBgZGlzYWJsZS1zaGFyZWQnIExUX0lOSVQgb3B0aW9ucy4KKyMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgorbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NIQVJFRF0sCitbbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAorQUNfQVJHX0VOQUJMRShbc2hhcmVkXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXNoYXJlZEA8OkA9UEtHU0A6PkBdLAorCVtidWlsZCBzaGFyZWQgbGlicmFyaWVzIEA8OkBkZWZhdWx0PV1fTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUW0A6PkBdKV0sCisgICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc2hhcmVkPXllcyA7OworICAgIG5vKSBlbmFibGVfc2hhcmVkPW5vIDs7CisgICAgKikKKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfc2hhcmVkPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhY10sCisgICAgW2VuYWJsZV9zaGFyZWQ9XV9MVF9FTkFCTEVfU0hBUkVEX0RFRkFVTFQpCisKKyAgICBfTFRfREVDTChbYnVpbGRfbGlidG9vbF9saWJzXSwgW2VuYWJsZV9zaGFyZWRdLCBbMF0sCisJW1doZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorXSkjIF9MVF9FTkFCTEVfU0hBUkVECisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEKFtub10pXSkKKworIyBPbGQgbmFtZXM6CitBQ19ERUZVTihbQUNfRU5BQkxFX1NIQVJFRF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtzaGFyZWRdKQorXSkKKworQUNfREVGVU4oW0FDX0RJU0FCTEVfU0hBUkVEXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLXNoYXJlZF0pCitdKQorCitBVV9ERUZVTihbQU1fRU5BQkxFX1NIQVJFRF0sIFtBQ19FTkFCTEVfU0hBUkVEKCRAKV0pCitBVV9ERUZVTihbQU1fRElTQUJMRV9TSEFSRURdLCBbQUNfRElTQUJMRV9TSEFSRUQoJEApXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9FTkFCTEVfU0hBUkVEXSwgW10pCitkbmwgQUNfREVGVU4oW0FNX0RJU0FCTEVfU0hBUkVEXSwgW10pCisKKworCisjIF9MVF9FTkFCTEVfU1RBVElDKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXN0YXRpYyBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYHN0YXRpYycgYW5kCisjIGBkaXNhYmxlLXN0YXRpYycgTFRfSU5JVCBvcHRpb25zLgorIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCittNF9kZWZpbmUoW19MVF9FTkFCTEVfU1RBVElDXSwKK1ttNF9kZWZpbmUoW19MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCitBQ19BUkdfRU5BQkxFKFtzdGF0aWNdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtc3RhdGljQDw6QD1QS0dTQDo+QF0sCisJW2J1aWxkIHN0YXRpYyBsaWJyYXJpZXMgQDw6QGRlZmF1bHQ9XV9MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFRbQDo+QF0pXSwKKyAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9zdGF0aWM9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9zdGF0aWM9bm8gOzsKKyAgICAqKQorICAgICBlbmFibGVfc3RhdGljPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3N0YXRpYz15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtlbmFibGVfc3RhdGljPV1fTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUKQorCisgICAgX0xUX0RFQ0woW2J1aWxkX29sZF9saWJzXSwgW2VuYWJsZV9zdGF0aWNdLCBbMF0sCisJW1doZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorXSkjIF9MVF9FTkFCTEVfU1RBVElDCisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDKFtub10pXSkKKworIyBPbGQgbmFtZXM6CitBQ19ERUZVTihbQUNfRU5BQkxFX1NUQVRJQ10sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtzdGF0aWNdKQorXSkKKworQUNfREVGVU4oW0FDX0RJU0FCTEVfU1RBVElDXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLXN0YXRpY10pCitdKQorCitBVV9ERUZVTihbQU1fRU5BQkxFX1NUQVRJQ10sIFtBQ19FTkFCTEVfU1RBVElDKCRAKV0pCitBVV9ERUZVTihbQU1fRElTQUJMRV9TVEFUSUNdLCBbQUNfRElTQUJMRV9TVEFUSUMoJEApXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9FTkFCTEVfU1RBVElDXSwgW10pCitkbmwgQUNfREVGVU4oW0FNX0RJU0FCTEVfU1RBVElDXSwgW10pCisKKworCisjIF9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLWZhc3QtaW5zdGFsbCBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYGZhc3QtaW5zdGFsbCcKKyMgYW5kIGBkaXNhYmxlLWZhc3QtaW5zdGFsbCcgTFRfSU5JVCBvcHRpb25zLgorIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCittNF9kZWZpbmUoW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMXSwKK1ttNF9kZWZpbmUoW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCitBQ19BUkdfRU5BQkxFKFtmYXN0LWluc3RhbGxdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZmFzdC1pbnN0YWxsQDw6QD1QS0dTQDo+QF0sCisgICAgW29wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbiBAPDpAZGVmYXVsdD1dX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVFtAOj5AXSldLAorICAgIFtwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMgOzsKKyAgICBubykgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtlbmFibGVfZmFzdF9pbnN0YWxsPV1fTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUKQorCitfTFRfREVDTChbZmFzdF9pbnN0YWxsXSwgW2VuYWJsZV9mYXN0X2luc3RhbGxdLCBbMF0sCisJIFtXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb25dKWRubAorXSkjIF9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMCisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZmFzdC1pbnN0YWxsXSwgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtZmFzdC1pbnN0YWxsXSwgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFtub10pXSkKKworIyBPbGQgbmFtZXM6CitBVV9ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtmYXN0LWluc3RhbGxdKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UgcHV0Cit0aGUgYGZhc3QtaW5zdGFsbCcgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorXSkKKworQVVfREVGVU4oW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLWZhc3QtaW5zdGFsbF0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdSBwdXQKK3RoZSBgZGlzYWJsZS1mYXN0LWluc3RhbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9ESVNBQkxFX0ZBU1RfSU5TVEFMTF0sIFtdKQorCisKKyMgX0xUX1dJVEhfUElDKFtNT0RFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLXdpdGgtcGljIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSBgcGljLW9ubHknIGFuZCBgbm8tcGljJworIyBMVF9JTklUIG9wdGlvbnMuCisjIE1PREUgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgYm90aCcuCittNF9kZWZpbmUoW19MVF9XSVRIX1BJQ10sCitbQUNfQVJHX1dJVEgoW3BpY10sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtcGljXSwKKwlbdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgQDw6QGRlZmF1bHQ9dXNlIGJvdGhAOj5AXSldLAorICAgIFtwaWNfbW9kZT0iJHdpdGh2YWwiXSwKKyAgICBbcGljX21vZGU9ZGVmYXVsdF0pCisKK3Rlc3QgLXogIiRwaWNfbW9kZSIgJiYgcGljX21vZGU9bTRfZGVmYXVsdChbJDFdLCBbZGVmYXVsdF0pCisKK19MVF9ERUNMKFtdLCBbcGljX21vZGVdLCBbMF0sIFtXaGF0IHR5cGUgb2Ygb2JqZWN0cyB0byBidWlsZF0pZG5sCitdKSMgX0xUX1dJVEhfUElDCisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbcGljLW9ubHldLCBbX0xUX1dJVEhfUElDKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW25vLXBpY10sIFtfTFRfV0lUSF9QSUMoW25vXSldKQorCisjIE9sZCBuYW1lOgorQVVfREVGVU4oW0FDX0xJQlRPT0xfUElDTU9ERV0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbcGljLW9ubHldKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UKK3B1dCB0aGUgYHBpYy1vbmx5JyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitdKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfUElDTU9ERV0sIFtdKQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTFRETF9JTklUIE9wdGlvbnMgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisKK200X2RlZmluZShbX0xURExfTU9ERV0sIFtdKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW25vbnJlY3Vyc2l2ZV0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW25vbnJlY3Vyc2l2ZV0pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtyZWN1cnNpdmVdLAorCQkgW200X2RlZmluZShbX0xURExfTU9ERV0sIFtyZWN1cnNpdmVdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbc3VicHJvamVjdF0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW3N1YnByb2plY3RdKV0pCisKK200X2RlZmluZShbX0xURExfVFlQRV0sIFtdKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW2luc3RhbGxhYmxlXSwKKwkJIFttNF9kZWZpbmUoW19MVERMX1RZUEVdLCBbaW5zdGFsbGFibGVdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbY29udmVuaWVuY2VdLAorCQkgW200X2RlZmluZShbX0xURExfVFlQRV0sIFtjb252ZW5pZW5jZV0pXSkKZGlmZiAtLWdpdCBhL200L2x0c3VnYXIubTQgYi9tNC9sdHN1Z2FyLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMDBhMDUKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9sdHN1Z2FyLm00CkBAIC0wLDAgKzEsMTIzIEBACisjIGx0c3VnYXIubTQgLS0gbGlidG9vbCBtNCBiYXNlIGxheWVyLiAgICAgICAgICAgICAgICAgICAgICAgICAtKi1BdXRvY29uZi0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDA0CisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNiBsdHN1Z2FyLm00CisKKyMgVGhpcyBpcyB0byBoZWxwIGFjbG9jYWwgZmluZCB0aGVzZSBtYWNyb3MsIGFzIGl0IGNhbid0IHNlZSBtNF9kZWZpbmUuCitBQ19ERUZVTihbTFRTVUdBUl9WRVJTSU9OXSwgW200X2lmKFswLjFdKV0pCisKKworIyBsdF9qb2luKFNFUCwgQVJHMSwgW0FSRzIuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9kdWNlIEFSRzFTRVBBUkcyLi4uU0VQQVJHbiwgb21pdHRpbmcgW10gYXJndW1lbnRzIGFuZCB0aGVpcgorIyBhc3NvY2lhdGVkIHNlcGFyYXRvci4KKyMgTmVlZGVkIHVudGlsIHdlIGNhbiByZWx5IG9uIG00X2pvaW4gZnJvbSBBdXRvY29uZiAyLjYyLCBzaW5jZSBhbGwgZWFybGllcgorIyB2ZXJzaW9ucyBpbiBtNHN1Z2FyIGhhZCBidWdzLgorbTRfZGVmaW5lKFtsdF9qb2luXSwKK1ttNF9pZihbJCNdLCBbMV0sIFtdLAorICAgICAgIFskI10sIFsyXSwgW1skMl1dLAorICAgICAgIFttNF9pZihbJDJdLCBbXSwgW10sIFtbJDJdX10pJDAoWyQxXSwgbTRfc2hpZnQobTRfc2hpZnQoJEApKSldKV0pCittNF9kZWZpbmUoW19sdF9qb2luXSwKK1ttNF9pZihbJCMkMl0sIFsyXSwgW10sCisgICAgICAgW200X2lmKFskMl0sIFtdLCBbXSwgW1skMSQyXV0pJDAoWyQxXSwgbTRfc2hpZnQobTRfc2hpZnQoJEApKSldKV0pCisKKworIyBsdF9jYXIoTElTVCkKKyMgbHRfY2RyKExJU1QpCisjIC0tLS0tLS0tLS0tLQorIyBNYW5pcHVsYXRlIG00IGxpc3RzLgorIyBUaGVzZSBtYWNyb3MgYXJlIG5lY2Vzc2FyeSBhcyBsb25nIGFzIHdpbGwgc3RpbGwgbmVlZCB0byBzdXBwb3J0CisjIEF1dG9jb25mLTIuNTkgd2hpY2ggcXVvdGVzIGRpZmZlcmVudGx5LgorbTRfZGVmaW5lKFtsdF9jYXJdLCBbWyQxXV0pCittNF9kZWZpbmUoW2x0X2Nkcl0sCitbbTRfaWYoWyQjXSwgMCwgW200X2ZhdGFsKFskMDogY2Fubm90IGJlIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50c10pXSwKKyAgICAgICBbJCNdLCAxLCBbXSwKKyAgICAgICBbbTRfZHF1b3RlKG00X3NoaWZ0KCRAKSldKV0pCittNF9kZWZpbmUoW2x0X3VucXVvdGVdLCAkMSkKKworCisjIGx0X2FwcGVuZChNQUNSTy1OQU1FLCBTVFJJTkcsIFtTRVBBUkFUT1JdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVkZWZpbmUgTUFDUk8tTkFNRSB0byBob2xkIGl0cyBmb3JtZXIgY29udGVudCBwbHVzIGBTRVBBUkFUT1InYFNUUklORycuCisjIE5vdGUgdGhhdCBuZWl0aGVyIFNFUEFSQVRPUiBub3IgU1RSSU5HIGFyZSBleHBhbmRlZDsgdGhleSBhcmUgYXBwZW5kZWQKKyMgdG8gTUFDUk8tTkFNRSBhcyBpcyAobGVhdmluZyB0aGUgZXhwYW5zaW9uIGZvciB3aGVuIE1BQ1JPLU5BTUUgaXMgaW52b2tlZCkuCisjIE5vIFNFUEFSQVRPUiBpcyBvdXRwdXQgaWYgTUFDUk8tTkFNRSB3YXMgcHJldmlvdXNseSB1bmRlZmluZWQgKGRpZmZlcmVudAorIyB0aGFuIGRlZmluZWQgYW5kIGVtcHR5KS4KKyMKKyMgVGhpcyBtYWNybyBpcyBuZWVkZWQgdW50aWwgd2UgY2FuIHJlbHkgb24gQXV0b2NvbmYgMi42Miwgc2luY2UgZWFybGllcgorIyB2ZXJzaW9ucyBvZiBtNHN1Z2FyIG1pc3Rha2VubHkgZXhwYW5kZWQgU0VQQVJBVE9SIGJ1dCBub3QgU1RSSU5HLgorbTRfZGVmaW5lKFtsdF9hcHBlbmRdLAorW200X2RlZmluZShbJDFdLAorCSAgIG00X2lmZGVmKFskMV0sIFttNF9kZWZuKFskMV0pWyQzXV0pWyQyXSldKQorCisKKworIyBsdF9jb21iaW5lKFNFUCwgUFJFRklYLUxJU1QsIElORklYLCBTVUZGSVgxLCBbU1VGRklYMi4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBhIFNFUCBkZWxpbWl0ZWQgbGlzdCBvZiBhbGwgcGFpcmVkIGNvbWJpbmF0aW9ucyBvZiBlbGVtZW50cyBvZgorIyBQUkVGSVgtTElTVCB3aXRoIFNVRkZJWDEgdGhyb3VnaCBTVUZGSVhuLiAgRWFjaCBlbGVtZW50IG9mIHRoZSBsaXN0CisjIGhhcyB0aGUgZm9ybSBQUkVGSVhtSU5GSVhTVUZGSVhuLgorIyBOZWVkZWQgdW50aWwgd2UgY2FuIHJlbHkgb24gbTRfY29tYmluZSBhZGRlZCBpbiBBdXRvY29uZiAyLjYyLgorbTRfZGVmaW5lKFtsdF9jb21iaW5lXSwKK1ttNF9pZihtNF9ldmFsKFskIyA+IDNdKSwgWzFdLAorICAgICAgIFttNF9wdXNoZGVmKFtfTHRfc2VwXSwgW200X2RlZmluZShbX0x0X3NlcF0sIG00X2RlZm4oW2x0X2Nhcl0pKV0pXV1kbmwKK1tbbTRfZm9yZWFjaChbX0x0X3ByZWZpeF0sIFskMl0sCisJICAgICBbbTRfZm9yZWFjaChbX0x0X3N1ZmZpeF0sCisJCV1tNF9kcXVvdGUobTRfZHF1b3RlKG00X3NoaWZ0KG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpKSlbLAorCVtfTHRfc2VwKFskMV0pW11tNF9kZWZuKFtfTHRfcHJlZml4XSlbJDNdbTRfZGVmbihbX0x0X3N1ZmZpeF0pXSldKV0pXSkKKworCisjIGx0X2lmX2FwcGVuZF91bmlxKE1BQ1JPLU5BTUUsIFZBUk5BTUUsIFtTRVBBUkFUT1JdLCBbVU5JUV0sIFtOT1QtVU5JUV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmZiBNQUNSTy1OQU1FIGRvZXMgbm90IHlldCBjb250YWluIFZBUk5BTUUsIHRoZW4gYXBwZW5kIGl0IChkZWxpbWl0ZWQKKyMgYnkgU0VQQVJBVE9SIGlmIHN1cHBsaWVkKSBhbmQgZXhwYW5kIFVOSVEsIGVsc2UgTk9ULVVOSVEuCittNF9kZWZpbmUoW2x0X2lmX2FwcGVuZF91bmlxXSwKK1ttNF9pZmRlZihbJDFdLAorCSAgW200X2lmKG00X2luZGV4KFskM11tNF9kZWZuKFskMV0pWyQzXSwgWyQzJDIkM10pLCBbLTFdLAorCQkgW2x0X2FwcGVuZChbJDFdLCBbJDJdLCBbJDNdKSQ0XSwKKwkJIFskNV0pXSwKKwkgIFtsdF9hcHBlbmQoWyQxXSwgWyQyXSwgWyQzXSkkNF0pXSkKKworCisjIGx0X2RpY3RfYWRkKERJQ1QsIEtFWSwgVkFMVUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RpY3RfYWRkXSwKK1ttNF9kZWZpbmUoWyQxKCQyKV0sIFskM10pXSkKKworCisjIGx0X2RpY3RfYWRkX3N1YmtleShESUNULCBLRVksIFNVQktFWSwgVkFMVUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RpY3RfYWRkX3N1YmtleV0sCitbbTRfZGVmaW5lKFskMSgkMjokMyldLCBbJDRdKV0pCisKKworIyBsdF9kaWN0X2ZldGNoKERJQ1QsIEtFWSwgW1NVQktFWV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9mZXRjaF0sCitbbTRfaWZ2YWwoWyQzXSwKKwltNF9pZmRlZihbJDEoJDI6JDMpXSwgW200X2RlZm4oWyQxKCQyOiQzKV0pXSksCisgICAgbTRfaWZkZWYoWyQxKCQyKV0sIFttNF9kZWZuKFskMSgkMildKV0pKV0pCisKKworIyBsdF9pZl9kaWN0X2ZldGNoKERJQ1QsIEtFWSwgW1NVQktFWV0sIFZBTFVFLCBJRi1UUlVFLCBbSUYtRkFMU0VdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9pZl9kaWN0X2ZldGNoXSwKK1ttNF9pZihsdF9kaWN0X2ZldGNoKFskMV0sIFskMl0sIFskM10pLCBbJDRdLAorCVskNV0sCisgICAgWyQ2XSldKQorCisKKyMgbHRfZGljdF9maWx0ZXIoRElDVCwgW1NVQktFWV0sIFZBTFVFLCBbU0VQQVJBVE9SXSwgS0VZLCBbLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9maWx0ZXJdLAorW200X2lmKFskNV0sIFtdLCBbXSwKKyAgW2x0X2pvaW4obTRfcXVvdGUobTRfZGVmYXVsdChbJDRdLCBbWywgXV0pKSwKKyAgICAgICAgICAgbHRfdW5xdW90ZShtNF9zcGxpdChtNF9ub3JtYWxpemUobTRfZm9yZWFjaChfTHRfa2V5LCBsdF9jYXIoW200X3NoaWZ0big0LCAkQCldKSwKKwkJICAgICAgW2x0X2lmX2RpY3RfZmV0Y2goWyQxXSwgX0x0X2tleSwgWyQyXSwgWyQzXSwgW19MdF9rZXkgXSldKSkpKSldKVtdZG5sCitdKQpkaWZmIC0tZ2l0IGEvbTQvbHR2ZXJzaW9uLm00IGIvbTQvbHR2ZXJzaW9uLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYzUzMDkKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9sdHZlcnNpb24ubTQKQEAgLTAsMCArMSwyMyBAQAorIyBsdHZlcnNpb24ubTQgLS0gdmVyc2lvbiBudW1iZXJzCQkJLSotIEF1dG9jb25mIC0qLQorIworIyAgIENvcHlyaWdodCAoQykgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBXcml0dGVuIGJ5IFNjb3R0IEphbWVzIFJlbW5hbnQsIDIwMDQKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEdlbmVyYXRlZCBmcm9tIGx0dmVyc2lvbi5pbi4KKworIyBzZXJpYWwgMzAxNyBsdHZlcnNpb24ubTQKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wKKworbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1ZFUlNJT05dLCBbMi4yLjZiXSkKK200X2RlZmluZShbTFRfUEFDS0FHRV9SRVZJU0lPTl0sIFsxLjMwMTddKQorCitBQ19ERUZVTihbTFRWRVJTSU9OX1ZFUlNJT05dLAorW21hY3JvX3ZlcnNpb249JzIuMi42YicKK21hY3JvX3JldmlzaW9uPScxLjMwMTcnCitfTFRfREVDTCgsIG1hY3JvX3ZlcnNpb24sIDAsIFtXaGljaCByZWxlYXNlIG9mIGxpYnRvb2wubTQgd2FzIHVzZWQ/XSkKK19MVF9ERUNMKCwgbWFjcm9fcmV2aXNpb24sIDApCitdKQpkaWZmIC0tZ2l0IGEvbTQvbHR+b2Jzb2xldGUubTQgYi9tNC9sdH5vYnNvbGV0ZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzdiYjIwCi0tLSAvZGV2L251bGwKKysrIGIvbTQvbHR+b2Jzb2xldGUubTQKQEAgLTAsMCArMSw5MiBAQAorIyBsdH5vYnNvbGV0ZS5tNCAtLSBhY2xvY2FsIHNhdGlzZnlpbmcgb2Jzb2xldGUgZGVmaW5pdGlvbnMuICAgIC0qLUF1dG9jb25mLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgU2NvdHQgSmFtZXMgUmVtbmFudCwgMjAwNC4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA0IGx0fm9ic29sZXRlLm00CisKKyMgVGhlc2UgZXhpc3QgZW50aXJlbHkgdG8gZm9vbCBhY2xvY2FsIHdoZW4gYm9vdHN0cmFwcGluZyBsaWJ0b29sLgorIworIyBJbiB0aGUgcGFzdCBsaWJ0b29sLm00IGhhcyBwcm92aWRlZCBtYWNyb3MgdmlhIEFDX0RFRlVOIChvciBBVV9ERUZVTikKKyMgd2hpY2ggaGF2ZSBsYXRlciBiZWVuIGNoYW5nZWQgdG8gbTRfZGVmaW5lIGFzIHRoZXkgYXJlbid0IHBhcnQgb2YgdGhlCisjIGV4cG9ydGVkIEFQSSwgb3IgbW92ZWQgdG8gQXV0b2NvbmYgb3IgQXV0b21ha2Ugd2hlcmUgdGhleSBiZWxvbmcuCisjCisjIFRoZSB0cm91YmxlIGlzLCBhY2xvY2FsIGlzIGEgYml0IHRoaWNrLiAgSXQnbGwgc2VlIHRoZSBvbGQgQUNfREVGVU4KKyMgaW4gL3Vzci9zaGFyZS9hY2xvY2FsL2xpYnRvb2wubTQgYW5kIHJlbWVtYmVyIGl0LCB0aGVuIHdoZW4gaXQgc2VlcyB1cworIyB1c2luZyBhIG1hY3JvIHdpdGggdGhlIHNhbWUgbmFtZSBpbiBvdXIgbG9jYWwgbTQvbGlidG9vbC5tNCBpdCdsbAorIyBwdWxsIHRoZSBvbGQgbGlidG9vbC5tNCBpbiAoaXQgZG9lc24ndCBzZWUgb3VyIHNoaW55IG5ldyBtNF9kZWZpbmUKKyMgYW5kIGRvZXNuJ3Qga25vdyBhYm91dCBBdXRvY29uZiBtYWNyb3MgYXQgYWxsLikKKyMKKyMgU28gd2UgcHJvdmlkZSB0aGlzIGZpbGUsIHdoaWNoIGhhcyBhIHNpbGx5IGZpbGVuYW1lIHNvIGl0J3MgYWx3YXlzCisjIGluY2x1ZGVkIGFmdGVyIGV2ZXJ5dGhpbmcgZWxzZS4gIFRoaXMgcHJvdmlkZXMgYWNsb2NhbCB3aXRoIHRoZQorIyBBQ19ERUZVTnMgaXQgd2FudHMsIGJ1dCB3aGVuIG00IHByb2Nlc3NlcyBpdCwgaXQgZG9lc24ndCBkbyBhbnl0aGluZworIyBiZWNhdXNlIHRob3NlIG1hY3JvcyBhbHJlYWR5IGV4aXN0LCBvciB3aWxsIGJlIG92ZXJ3cml0dGVuIGxhdGVyLgorIyBXZSB1c2UgQUNfREVGVU4gb3ZlciBBVV9ERUZVTiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGFjbG9jYWwtMS42LiAKKyMKKyMgQW55dGltZSB3ZSB3aXRoZHJhdyBhbiBBQ19ERUZVTiBvciBBVV9ERUZVTiwgcmVtZW1iZXIgdG8gYWRkIGl0IGhlcmUuCisjIFllcywgdGhhdCBtZWFucyBldmVyeSBuYW1lIG9uY2UgdGFrZW4gd2lsbCBuZWVkIHRvIHJlbWFpbiBoZXJlIHVudGlsCisjIHdlIGdpdmUgdXAgY29tcGF0aWJpbGl0eSB3aXRoIHZlcnNpb25zIGJlZm9yZSAxLjcsIGF0IHdoaWNoIHBvaW50CisjIHdlIG5lZWQgdG8ga2VlcCBvbmx5IHRob3NlIG5hbWVzIHdoaWNoIHdlIHN0aWxsIHJlZmVyIHRvLgorCisjIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgorQUNfREVGVU4oW0xUT0JTT0xFVEVfVkVSU0lPTl0sIFttNF9pZihbMV0pXSkKKworbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0pXSkKK200X2lmbmRlZihbQUNfUFJPR19FR1JFUF0sCQlbQUNfREVGVU4oW0FDX1BST0dfRUdSRVBdKV0pCittNF9pZm5kZWYoW19MVF9BQ19QUk9HX0VDSE9fQkFDS1NMQVNIXSwJW0FDX0RFRlVOKFtfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pXSkKK200X2lmbmRlZihbX0xUX0FDX1NIRUxMX0lOSVRdLAkJW0FDX0RFRlVOKFtfTFRfQUNfU0hFTExfSU5JVF0pXSkKK200X2lmbmRlZihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0sCVtBQ19ERUZVTihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0pXSkKK200X2lmbmRlZihbX0xUX1BST0dfTFRNQUlOXSwJCVtBQ19ERUZVTihbX0xUX1BST0dfTFRNQUlOXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfVEFHVkFSXSwJCVtBQ19ERUZVTihbX0xUX0FDX1RBR1ZBUl0pXSkKK200X2lmbmRlZihbQUNfTFRETF9FTkFCTEVfSU5TVEFMTF0sCVtBQ19ERUZVTihbQUNfTFRETF9FTkFCTEVfSU5TVEFMTF0pXSkKK200X2lmbmRlZihbQUNfTFRETF9QUkVPUEVOXSwJCVtBQ19ERUZVTihbQUNfTFRETF9QUkVPUEVOXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSwJW0FDX0RFRlVOKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTE9DS10sCQlbQUNfREVGVU4oW19MVF9BQ19MT0NLXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19PTERfQVJDSElWRV0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfT0xEX0FSQ0hJVkVdKV0pCittNF9pZm5kZWYoW19MVF9BQ19UUllfRExPUEVOX1NFTEZdLAlbQUNfREVGVU4oW19MVF9BQ19UUllfRExPUEVOX1NFTEZdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLU10sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX09CSkRJUl0sCQlbQUNfREVGVU4oW0FDX0xJQlRPT0xfT0JKRElSXSldKQorbTRfaWZuZGVmKFtBQ19MVERMX09CSkRJUl0sCQlbQUNfREVGVU4oW0FDX0xURExfT0JKRElSXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSF0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEhdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUF0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfTElCX1NUUklQXSldKQorbTRfaWZuZGVmKFtBQ19QQVRIX01BR0lDXSwJCVtBQ19ERUZVTihbQUNfUEFUSF9NQUdJQ10pXSkKK200X2lmbmRlZihbQUNfUFJPR19MRF9HTlVdLAkJW0FDX0RFRlVOKFtBQ19QUk9HX0xEX0dOVV0pXSkKK200X2lmbmRlZihbQUNfUFJPR19MRF9SRUxPQURfRkxBR10sCVtBQ19ERUZVTihbQUNfUFJPR19MRF9SRUxPQURfRkxBR10pXSkKK200X2lmbmRlZihbQUNfREVQTElCU19DSEVDS19NRVRIT0RdLAlbQUNfREVGVU4oW0FDX0RFUExJQlNfQ0hFQ0tfTUVUSE9EXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSV0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEldKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRV0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfR0xPQkFMX1NZTUJPTF9QSVBFXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDXSwgW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQXSldKQorbTRfaWZuZGVmKFtMVF9BQ19QUk9HX0VHUkVQXSwJCVtBQ19ERUZVTihbTFRfQUNfUFJPR19FR1JFUF0pXSkKK200X2lmbmRlZihbTFRfQUNfUFJPR19TRURdLAkJW0FDX0RFRlVOKFtMVF9BQ19QUk9HX1NFRF0pXSkKK200X2lmbmRlZihbX0xUX0NDX0JBU0VOQU1FXSwJCVtBQ19ERUZVTihbX0xUX0NDX0JBU0VOQU1FXSldKQorbTRfaWZuZGVmKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdLAlbQUNfREVGVU4oW19MVF9DT01QSUxFUl9CT0lMRVJQTEFURV0pXSkKK200X2lmbmRlZihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0sCVtBQ19ERUZVTihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0pXSkKK200X2lmbmRlZihbX0FDX1BST0dfTElCVE9PTF0sCQlbQUNfREVGVU4oW19BQ19QUk9HX0xJQlRPT0xdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU0VUVVBdLAkJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NFVFVQXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfQ0hFQ0tfRExGQ05dLAkJW0FDX0RFRlVOKFtfTFRfQUNfQ0hFQ0tfRExGQ05dKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUl0pXSkKK200X2lmbmRlZihbX0xUX0FDX1RBR0NPTkZJR10sCQlbQUNfREVGVU4oW19MVF9BQ19UQUdDT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwJW0FDX0RFRlVOKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfQ1hYXSwJCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ1hYXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19GNzddLAkJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0dDSl0sCQlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0dDSl0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9SQ10sCQlbQUNfREVGVU4oW0FDX0xJQlRPT0xfUkNdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19DX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19DX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ19DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfQ1hYX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ1hYX0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19GNzdfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzdfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0dDSl9DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0dDSl9DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0dDSl9DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19SQ19DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19SQ19DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX1JDX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfUkNfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0NPTkZJR10sCQlbQUNfREVGVU4oW0FDX0xJQlRPT0xfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfRklMRV9MVERMTF9DXSwJW0FDX0RFRlVOKFtfTFRfQUNfRklMRV9MVERMTF9DXSldKQpkaWZmIC0tZ2l0IGEvbTQvbmxzLm00IGIvbTQvbmxzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NjdjYzIKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9ubHMubTQKQEAgLTAsMCArMSwzMSBAQAorIyBubHMubTQgc2VyaWFsIDMgKGdldHRleHQtMC4xNSkKK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMywgMjAwNS0yMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCitkbmwKK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCitkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKK2RubCBmdW5jdGlvbmFsaXR5LgorZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworZG5sIEF1dGhvcnM6CitkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS0yMDAwLgorZG5sICAgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAwLTIwMDMuCisKK0FDX1BSRVJFUSgyLjUwKQorCitBQ19ERUZVTihbQU1fTkxTXSwKK1sKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIE5MUyBpcyByZXF1ZXN0ZWRdKQorICBkbmwgRGVmYXVsdCBpcyBlbmFibGVkIE5MUworICBBQ19BUkdfRU5BQkxFKG5scywKKyAgICBbICAtLWRpc2FibGUtbmxzICAgICAgICAgICBkbyBub3QgdXNlIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0XSwKKyAgICBVU0VfTkxTPSRlbmFibGV2YWwsIFVTRV9OTFM9eWVzKQorICBBQ19NU0dfUkVTVUxUKCRVU0VfTkxTKQorICBBQ19TVUJTVChVU0VfTkxTKQorXSkKZGlmZiAtLWdpdCBhL200L3BvLm00IGIvbTQvcG8ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDczNDc2MgotLS0gL2Rldi9udWxsCisrKyBiL200L3BvLm00CkBAIC0wLDAgKzEsNDQ5IEBACisjIHBvLm00IHNlcmlhbCAxNSAoZ2V0dGV4dC0wLjE3KQorZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCitkbmwKK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCitkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKK2RubCBmdW5jdGlvbmFsaXR5LgorZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworZG5sIEF1dGhvcnM6CitkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS0yMDAwLgorZG5sICAgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAwLTIwMDMuCisKK0FDX1BSRVJFUSgyLjUwKQorCitkbmwgQ2hlY2tzIGZvciBhbGwgcHJlcmVxdWlzaXRlcyBvZiB0aGUgcG8gc3ViZGlyZWN0b3J5LgorQUNfREVGVU4oW0FNX1BPX1NVQkRJUlNdLAorWworICBBQ19SRVFVSVJFKFtBQ19QUk9HX01BS0VfU0VUXSlkbmwKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19JTlNUQUxMXSlkbmwKKyAgQUNfUkVRVUlSRShbQU1fUFJPR19NS0RJUl9QXSlkbmwgZGVmaW5lZCBieSBhdXRvbWFrZQorICBBQ19SRVFVSVJFKFtBTV9OTFNdKWRubAorCisgIGRubCBSZWxlYXNlIHZlcnNpb24gb2YgdGhlIGdldHRleHQgbWFjcm9zLiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQKKyAgZG5sIHRoZSBnZXR0ZXh0IG1hY3JvcyBhbmQgcG8vTWFrZWZpbGUuaW4uaW4gYXJlIGluIHN5bmMuCisgIEFDX1NVQlNUKFtHRVRURVhUX01BQ1JPX1ZFUlNJT05dLCBbMC4xN10pCisKKyAgZG5sIFBlcmZvcm0gdGhlIGZvbGxvd2luZyB0ZXN0cyBhbHNvIGlmIC0tZGlzYWJsZS1ubHMgaGFzIGJlZW4gZ2l2ZW4sCisgIGRubCBiZWNhdXNlIHRoZXkgYXJlIG5lZWRlZCBmb3IgIm1ha2UgZGlzdCIgdG8gd29yay4KKworICBkbmwgU2VhcmNoIGZvciBHTlUgbXNnZm10IGluIHRoZSBQQVRILgorICBkbmwgVGhlIGZpcnN0IHRlc3QgZXhjbHVkZXMgU29sYXJpcyBtc2dmbXQgYW5kIGVhcmx5IEdOVSBtc2dmbXQgdmVyc2lvbnMuCisgIGRubCBUaGUgc2Vjb25kIHRlc3QgZXhjbHVkZXMgRnJlZUJTRCBtc2dmbXQuCisgIEFNX1BBVEhfUFJPR19XSVRIX1RFU1QoTVNHRk1ULCBtc2dmbXQsCisgICAgWyRhY19kaXIvJGFjX3dvcmQgLS1zdGF0aXN0aWNzIC9kZXYvbnVsbCA+Jl1BU19NRVNTQUdFX0xPR19GRFsgMj4mMSAmJgorICAgICAoaWYgJGFjX2Rpci8kYWNfd29yZCAtLXN0YXRpc3RpY3MgL2Rldi9udWxsIDI+JjEgPi9kZXYvbnVsbCB8IGdyZXAgdXNhZ2UgPi9kZXYvbnVsbDsgdGhlbiBleGl0IDE7IGVsc2UgZXhpdCAwOyBmaSldLAorICAgIDopCisgIEFDX1BBVEhfUFJPRyhHTVNHRk1ULCBnbXNnZm10LCAkTVNHRk1UKQorCisgIGRubCBUZXN0IHdoZXRoZXIgaXQgaXMgR05VIG1zZ2ZtdCA+PSAwLjE1LgorY2hhbmdlcXVvdGUoLClkbmwKKyAgY2FzZSBgJE1TR0ZNVCAtLXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluCisgICAgJycgfCAwLlswLTldIHwgMC5bMC05XS4qIHwgMC4xWzAtNF0gfCAwLjFbMC00XS4qKSBNU0dGTVRfMDE1PTogOzsKKyAgICAqKSBNU0dGTVRfMDE1PSRNU0dGTVQgOzsKKyAgZXNhYworY2hhbmdlcXVvdGUoWyxdKWRubAorICBBQ19TVUJTVChbTVNHRk1UXzAxNV0pCitjaGFuZ2VxdW90ZSgsKWRubAorICBjYXNlIGAkR01TR0ZNVCAtLXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluCisgICAgJycgfCAwLlswLTldIHwgMC5bMC05XS4qIHwgMC4xWzAtNF0gfCAwLjFbMC00XS4qKSBHTVNHRk1UXzAxNT06IDs7CisgICAgKikgR01TR0ZNVF8wMTU9JEdNU0dGTVQgOzsKKyAgZXNhYworY2hhbmdlcXVvdGUoWyxdKWRubAorICBBQ19TVUJTVChbR01TR0ZNVF8wMTVdKQorCisgIGRubCBTZWFyY2ggZm9yIEdOVSB4Z2V0dGV4dCAwLjEyIG9yIG5ld2VyIGluIHRoZSBQQVRILgorICBkbmwgVGhlIGZpcnN0IHRlc3QgZXhjbHVkZXMgU29sYXJpcyB4Z2V0dGV4dCBhbmQgZWFybHkgR05VIHhnZXR0ZXh0IHZlcnNpb25zLgorICBkbmwgVGhlIHNlY29uZCB0ZXN0IGV4Y2x1ZGVzIEZyZWVCU0QgeGdldHRleHQuCisgIEFNX1BBVEhfUFJPR19XSVRIX1RFU1QoWEdFVFRFWFQsIHhnZXR0ZXh0LAorICAgIFskYWNfZGlyLyRhY193b3JkIC0tb21pdC1oZWFkZXIgLS1jb3B5cmlnaHQtaG9sZGVyPSAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0gL2Rldi9udWxsID4mXUFTX01FU1NBR0VfTE9HX0ZEWyAyPiYxICYmCisgICAgIChpZiAkYWNfZGlyLyRhY193b3JkIC0tb21pdC1oZWFkZXIgLS1jb3B5cmlnaHQtaG9sZGVyPSAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0gL2Rldi9udWxsIDI+JjEgPi9kZXYvbnVsbCB8IGdyZXAgdXNhZ2UgPi9kZXYvbnVsbDsgdGhlbiBleGl0IDE7IGVsc2UgZXhpdCAwOyBmaSldLAorICAgIDopCisgIGRubCBSZW1vdmUgbGVmdG92ZXIgZnJvbSBGcmVlQlNEIHhnZXR0ZXh0IGNhbGwuCisgIHJtIC1mIG1lc3NhZ2VzLnBvCisKKyAgZG5sIFRlc3Qgd2hldGhlciBpdCBpcyBHTlUgeGdldHRleHQgPj0gMC4xNS4KK2NoYW5nZXF1b3RlKCwpZG5sCisgIGNhc2UgYCRYR0VUVEVYVCAtLXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluCisgICAgJycgfCAwLlswLTldIHwgMC5bMC05XS4qIHwgMC4xWzAtNF0gfCAwLjFbMC00XS4qKSBYR0VUVEVYVF8wMTU9OiA7OworICAgICopIFhHRVRURVhUXzAxNT0kWEdFVFRFWFQgOzsKKyAgZXNhYworY2hhbmdlcXVvdGUoWyxdKWRubAorICBBQ19TVUJTVChbWEdFVFRFWFRfMDE1XSkKKworICBkbmwgU2VhcmNoIGZvciBHTlUgbXNnbWVyZ2UgMC4xMSBvciBuZXdlciBpbiB0aGUgUEFUSC4KKyAgQU1fUEFUSF9QUk9HX1dJVEhfVEVTVChNU0dNRVJHRSwgbXNnbWVyZ2UsCisgICAgWyRhY19kaXIvJGFjX3dvcmQgLS11cGRhdGUgLXEgL2Rldi9udWxsIC9kZXYvbnVsbCA+Jl1BU19NRVNTQUdFX0xPR19GRFsgMj4mMV0sIDopCisKKyAgZG5sIEluc3RhbGxhdGlvbiBkaXJlY3Rvcmllcy4KKyAgZG5sIEF1dG9jb25mID49IDIuNjAgZGVmaW5lcyBsb2NhbGVkaXIuIEZvciBvbGRlciB2ZXJzaW9ucyBvZiBhdXRvY29uZiwgd2UKKyAgZG5sIGhhdmUgdG8gZGVmaW5lIGl0IGhlcmUsIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgaW4gcG8vTWFrZWZpbGUuCisgIHRlc3QgLW4gIiRsb2NhbGVkaXIiIHx8IGxvY2FsZWRpcj0nJHtkYXRhZGlyfS9sb2NhbGUnCisgIEFDX1NVQlNUKFtsb2NhbGVkaXJdKQorCisgIGRubCBTdXBwb3J0IGZvciBBTV9YR0VUVEVYVF9PUFRJT04uCisgIHRlc3QgLW4gIiR7WEdFVFRFWFRfRVhUUkFfT1BUSU9OUytzZXR9IiB8fCBYR0VUVEVYVF9FWFRSQV9PUFRJT05TPQorICBBQ19TVUJTVChbWEdFVFRFWFRfRVhUUkFfT1BUSU9OU10pCisKKyAgQUNfQ09ORklHX0NPTU1BTkRTKFtwby1kaXJlY3Rvcmllc10sIFtbCisgICAgZm9yIGFjX2ZpbGUgaW4gJENPTkZJR19GSUxFUzsgZG8KKyAgICAgICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzppbmZpbGUuLi5dXSIKKyAgICAgIGNhc2UgIiRhY19maWxlIiBpbgorICAgICAgICAqOiopIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlOi4qJSUnYCA7OworICAgICAgZXNhYworICAgICAgIyBQTyBkaXJlY3RvcmllcyBoYXZlIGEgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGZyb20gTWFrZWZpbGUuaW4uaW4uCisgICAgICBjYXNlICIkYWNfZmlsZSIgaW4gKi9NYWtlZmlsZS5pbikKKyAgICAgICAgIyBBZGp1c3QgYSByZWxhdGl2ZSBzcmNkaXIuCisgICAgICAgIGFjX2Rpcj1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyUvW14vXVteL10qJCUlJ2AKKyAgICAgICAgYWNfZGlyX3N1ZmZpeD0iL2BlY2hvICIkYWNfZGlyInxzZWQgJ3MlXlwuLyUlJ2AiCisgICAgICAgIGFjX2RvdHM9YGVjaG8gIiRhY19kaXJfc3VmZml4InxzZWQgJ3MlL1teL10qJS4uLyVnJ2AKKyAgICAgICAgIyBJbiBhdXRvY29uZi0yLjEzIGl0IGlzIGNhbGxlZCAkYWNfZ2l2ZW5fc3JjZGlyLgorICAgICAgICAjIEluIGF1dG9jb25mLTIuNTAgaXQgaXMgY2FsbGVkICRzcmNkaXIuCisgICAgICAgIHRlc3QgLW4gIiRhY19naXZlbl9zcmNkaXIiIHx8IGFjX2dpdmVuX3NyY2Rpcj0iJHNyY2RpciIKKyAgICAgICAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KKyAgICAgICAgICAuKSAgdG9wX3NyY2Rpcj1gZWNobyAkYWNfZG90c3xzZWQgJ3MlLyQlJSdgIDs7CisgICAgICAgICAgLyopIHRvcF9zcmNkaXI9IiRhY19naXZlbl9zcmNkaXIiIDs7CisgICAgICAgICAgKikgIHRvcF9zcmNkaXI9IiRhY19kb3RzJGFjX2dpdmVuX3NyY2RpciIgOzsKKyAgICAgICAgZXNhYworICAgICAgICAjIFRyZWF0IGEgZGlyZWN0b3J5IGFzIGEgUE8gZGlyZWN0b3J5IGlmIGFuZCBvbmx5IGlmIGl0IGhhcyBhCisgICAgICAgICMgUE9URklMRVMuaW4gZmlsZS4gVGhpcyBhbGxvd3MgcGFja2FnZXMgdG8gaGF2ZSBtdWx0aXBsZSBQTworICAgICAgICAjIGRpcmVjdG9yaWVzIHVuZGVyIGRpZmZlcmVudCBuYW1lcyBvciBpbiBkaWZmZXJlbnQgbG9jYXRpb25zLgorICAgICAgICBpZiB0ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvUE9URklMRVMuaW4iOyB0aGVuCisgICAgICAgICAgcm0gLWYgIiRhY19kaXIvUE9URklMRVMiCisgICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19kaXIvUE9URklMRVMiIHx8IGVjaG8gImNyZWF0aW5nICRhY19kaXIvUE9URklMRVMiCisgICAgICAgICAgY2F0ICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvUE9URklMRVMuaW4iIHwgc2VkIC1lICIvXiMvZCIgLWUgIi9eWyAJXSpcJC9kIiAtZSAicywuKiwgICAgICR0b3Bfc3JjZGlyLyYgXFxcXCwiIHwgc2VkIC1lICJcJHMvXCguKlwpIFxcXFwvXDEvIiA+ICIkYWNfZGlyL1BPVEZJTEVTIgorICAgICAgICAgIFBPTUFLRUZJTEVERVBTPSJQT1RGSUxFUy5pbiIKKyAgICAgICAgICAjIEFMTF9MSU5HVUFTLCBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklMRVMsIEdNT0ZJTEVTIGRlcGVuZAorICAgICAgICAgICMgb24gJGFjX2RpciBidXQgZG9uJ3QgZGVwZW5kIG9uIHVzZXItc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAjIHBhcmFtZXRlcnMuCisgICAgICAgICAgaWYgdGVzdCAtZiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL0xJTkdVQVMiOyB0aGVuCisgICAgICAgICAgICAjIFRoZSBMSU5HVUFTIGZpbGUgY29udGFpbnMgdGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzLgorICAgICAgICAgICAgaWYgdGVzdCAtbiAiJE9CU09MRVRFX0FMTF9MSU5HVUFTIjsgdGhlbgorICAgICAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogc2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiIHx8IGVjaG8gInNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgLWUgInMvIy4qLy8iICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyJgCisgICAgICAgICAgICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbWVudCBmcm9tIGF1dG9tYWtlIDwgMS41LgorICAgICAgICAgICAgZXZhbCAnQUxMX0xJTkdVQVMnJz0kQUxMX0xJTkdVQVNfJworICAgICAgICAgICAgUE9NQUtFRklMRURFUFM9IiRQT01BS0VGSUxFREVQUyBMSU5HVUFTIgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICMgVGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzIHdhcyBnaXZlbiBpbiBjb25maWd1cmUuaW4uCisgICAgICAgICAgICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbWVudCBmcm9tIGF1dG9tYWtlIDwgMS41LgorICAgICAgICAgICAgZXZhbCAnQUxMX0xJTkdVQVMnJz0kT0JTT0xFVEVfQUxMX0xJTkdVQVMnCisgICAgICAgICAgZmkKKyAgICAgICAgICAjIENvbXB1dGUgUE9GSUxFUworICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLnBvKQorICAgICAgICAgICMgQ29tcHV0ZSBVUERBVEVQT0ZJTEVTCisgICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5wby11cGRhdGUpCisgICAgICAgICAgIyBDb21wdXRlIERVTU1ZUE9GSUxFUworICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQobGFuZykubm9wKQorICAgICAgICAgICMgQ29tcHV0ZSBHTU9GSUxFUworICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLmdtbykKKyAgICAgICAgICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgorICAgICAgICAgICAgLikgc3JjZGlycHJlPSA7OworICAgICAgICAgICAgKikgc3JjZGlycHJlPSckKHNyY2RpcikvJyA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgICBQT0ZJTEVTPQorICAgICAgICAgIFVQREFURVBPRklMRVM9CisgICAgICAgICAgRFVNTVlQT0ZJTEVTPQorICAgICAgICAgIEdNT0ZJTEVTPQorICAgICAgICAgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKyAgICAgICAgICAgIFBPRklMRVM9IiRQT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5wbyIKKyAgICAgICAgICAgIFVQREFURVBPRklMRVM9IiRVUERBVEVQT0ZJTEVTICRsYW5nLnBvLXVwZGF0ZSIKKyAgICAgICAgICAgIERVTU1ZUE9GSUxFUz0iJERVTU1ZUE9GSUxFUyAkbGFuZy5ub3AiCisgICAgICAgICAgICBHTU9GSUxFUz0iJEdNT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5nbW8iCisgICAgICAgICAgZG9uZQorICAgICAgICAgICMgQ0FUQUxPR1MgZGVwZW5kcyBvbiBib3RoICRhY19kaXIgYW5kIHRoZSB1c2VyJ3MgTElOR1VBUworICAgICAgICAgICMgZW52aXJvbm1lbnQgdmFyaWFibGUuCisgICAgICAgICAgSU5TVF9MSU5HVUFTPQorICAgICAgICAgIGlmIHRlc3QgLW4gIiRBTExfTElOR1VBUyI7IHRoZW4KKyAgICAgICAgICAgIGZvciBwcmVzZW50bGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisgICAgICAgICAgICAgIHVzZWl0PW5vCisgICAgICAgICAgICAgIGlmIHRlc3QgIiVVTlNFVCUiICE9ICIkTElOR1VBUyI7IHRoZW4KKyAgICAgICAgICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkTElOR1VBUyIKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRBTExfTElOR1VBUyIKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZm9yIGRlc2lyZWRsYW5nIGluICRkZXNpcmVkbGFuZ3VhZ2VzOyBkbworICAgICAgICAgICAgICAgICMgVXNlIHRoZSBwcmVzZW50bGFuZyBjYXRhbG9nIGlmIGRlc2lyZWRsYW5nIGlzCisgICAgICAgICAgICAgICAgIyAgIGEuIGVxdWFsIHRvIHByZXNlbnRsYW5nLCBvcgorICAgICAgICAgICAgICAgICMgICBiLiBhIHZhcmlhbnQgb2YgcHJlc2VudGxhbmcgKGJlY2F1c2UgaW4gdGhpcyBjYXNlLAorICAgICAgICAgICAgICAgICMgICAgICBwcmVzZW50bGFuZyBjYW4gYmUgdXNlZCBhcyBhIGZhbGxiYWNrIGZvciBtZXNzYWdlcworICAgICAgICAgICAgICAgICMgICAgICB3aGljaCBhcmUgbm90IHRyYW5zbGF0ZWQgaW4gdGhlIGRlc2lyZWRsYW5nIGNhdGFsb2cpLgorICAgICAgICAgICAgICAgIGNhc2UgIiRkZXNpcmVkbGFuZyIgaW4KKyAgICAgICAgICAgICAgICAgICIkcHJlc2VudGxhbmciKikgdXNlaXQ9eWVzOzsKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgaWYgdGVzdCAkdXNlaXQgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgICBJTlNUX0xJTkdVQVM9IiRJTlNUX0xJTkdVQVMgJHByZXNlbnRsYW5nIgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZG9uZQorICAgICAgICAgIGZpCisgICAgICAgICAgQ0FUQUxPR1M9CisgICAgICAgICAgaWYgdGVzdCAtbiAiJElOU1RfTElOR1VBUyI7IHRoZW4KKyAgICAgICAgICAgIGZvciBsYW5nIGluICRJTlNUX0xJTkdVQVM7IGRvCisgICAgICAgICAgICAgIENBVEFMT0dTPSIkQ0FUQUxPR1MgJGxhbmcuZ21vIgorICAgICAgICAgICAgZG9uZQorICAgICAgICAgIGZpCisgICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19kaXIvTWFrZWZpbGUiIHx8IGVjaG8gImNyZWF0aW5nICRhY19kaXIvTWFrZWZpbGUiCisgICAgICAgICAgc2VkIC1lICIvXlBPVEZJTEVTID0vciAkYWNfZGlyL1BPVEZJTEVTIiAtZSAiL14jIE1ha2V2YXJzL3IgJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL01ha2V2YXJzIiAtZSAic3xAUE9GSUxFU0B8JFBPRklMRVN8ZyIgLWUgInN8QFVQREFURVBPRklMRVNAfCRVUERBVEVQT0ZJTEVTfGciIC1lICJzfEBEVU1NWVBPRklMRVNAfCREVU1NWVBPRklMRVN8ZyIgLWUgInN8QEdNT0ZJTEVTQHwkR01PRklMRVN8ZyIgLWUgInN8QENBVEFMT0dTQHwkQ0FUQUxPR1N8ZyIgLWUgInN8QFBPTUFLRUZJTEVERVBTQHwkUE9NQUtFRklMRURFUFN8ZyIgIiRhY19kaXIvTWFrZWZpbGUuaW4iID4gIiRhY19kaXIvTWFrZWZpbGUiCisgICAgICAgICAgZm9yIGYgaW4gIiRhY19naXZlbl9zcmNkaXIvJGFjX2RpciIvUnVsZXMtKjsgZG8KKyAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgorICAgICAgICAgICAgICBjYXNlICIkZiIgaW4KKyAgICAgICAgICAgICAgICAqLm9yaWcgfCAqLmJhayB8ICp+KSA7OworICAgICAgICAgICAgICAgICopIGNhdCAiJGYiID4+ICIkYWNfZGlyL01ha2VmaWxlIiA7OworICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBmaQorICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lXV0sCisgICBbIyBDYXB0dXJlIHRoZSB2YWx1ZSBvZiBvYnNvbGV0ZSBBTExfTElOR1VBUyBiZWNhdXNlIHdlIG5lZWQgaXQgdG8gY29tcHV0ZQorICAgICMgUE9GSUxFUywgVVBEQVRFUE9GSUxFUywgRFVNTVlQT0ZJTEVTLCBHTU9GSUxFUywgQ0FUQUxPR1MuIEJ1dCBoaWRlIGl0CisgICAgIyBmcm9tIGF1dG9tYWtlIDwgMS41LgorICAgIGV2YWwgJ09CU09MRVRFX0FMTF9MSU5HVUFTJyc9IiRBTExfTElOR1VBUyInCisgICAgIyBDYXB0dXJlIHRoZSB2YWx1ZSBvZiBMSU5HVUFTIGJlY2F1c2Ugd2UgbmVlZCBpdCB0byBjb21wdXRlIENBVEFMT0dTLgorICAgIExJTkdVQVM9IiR7TElOR1VBUy0lVU5TRVQlfSIKKyAgIF0pCitdKQorCitkbmwgUG9zdHByb2Nlc3NlcyBhIE1ha2VmaWxlIGluIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgUE8gZmlsZXMuCitBQ19ERUZVTihbQU1fUE9TVFBST0NFU1NfUE9fTUFLRUZJTEVdLAorWworICAjIFdoZW4gdGhpcyBjb2RlIGlzIHJ1biwgaW4gY29uZmlnLnN0YXR1cywgdHdvIHZhcmlhYmxlcyBoYXZlIGFscmVhZHkgYmVlbgorICAjIHNldDoKKyAgIyAtIE9CU09MRVRFX0FMTF9MSU5HVUFTIGlzIHRoZSB2YWx1ZSBvZiBMSU5HVUFTIHNldCBpbiBjb25maWd1cmUuaW4sCisgICMgLSBMSU5HVUFTIGlzIHRoZSB2YWx1ZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTElOR1VBUyBhdCBjb25maWd1cmUKKyAgIyAgIHRpbWUuCisKK2NoYW5nZXF1b3RlKCwpZG5sCisgICMgQWRqdXN0IGEgcmVsYXRpdmUgc3JjZGlyLgorICBhY19kaXI9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlL1teL11bXi9dKiQlJSdgCisgIGFjX2Rpcl9zdWZmaXg9Ii9gZWNobyAiJGFjX2RpciJ8c2VkICdzJV5cLi8lJSdgIgorICBhY19kb3RzPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCJ8c2VkICdzJS9bXi9dKiUuLi8lZydgCisgICMgSW4gYXV0b2NvbmYtMi4xMyBpdCBpcyBjYWxsZWQgJGFjX2dpdmVuX3NyY2Rpci4KKyAgIyBJbiBhdXRvY29uZi0yLjUwIGl0IGlzIGNhbGxlZCAkc3JjZGlyLgorICB0ZXN0IC1uICIkYWNfZ2l2ZW5fc3JjZGlyIiB8fCBhY19naXZlbl9zcmNkaXI9IiRzcmNkaXIiCisgIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCisgICAgLikgIHRvcF9zcmNkaXI9YGVjaG8gJGFjX2RvdHN8c2VkICdzJS8kJSUnYCA7OworICAgIC8qKSB0b3Bfc3JjZGlyPSIkYWNfZ2l2ZW5fc3JjZGlyIiA7OworICAgICopICB0b3Bfc3JjZGlyPSIkYWNfZG90cyRhY19naXZlbl9zcmNkaXIiIDs7CisgIGVzYWMKKworICAjIEZpbmQgYSB3YXkgdG8gZWNobyBzdHJpbmdzIHdpdGhvdXQgaW50ZXJwcmV0aW5nIGJhY2tzbGFzaC4KKyAgaWYgdGVzdCAiWGAoZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCc7IHRoZW4KKyAgICBndF9lY2hvPSdlY2hvJworICBlbHNlCisgICAgaWYgdGVzdCAiWGAocHJpbnRmICclc1xuJyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCc7IHRoZW4KKyAgICAgIGd0X2VjaG89J3ByaW50ZiAlc1xuJworICAgIGVsc2UKKyAgICAgIGVjaG9fZnVuYyAoKSB7CisgICAgICAgIGNhdCA8PEVPVAorJCoKK0VPVAorICAgICAgfQorICAgICAgZ3RfZWNobz0nZWNob19mdW5jJworICAgIGZpCisgIGZpCisKKyAgIyBBIHNlZCBzY3JpcHQgdGhhdCBleHRyYWN0cyB0aGUgdmFsdWUgb2YgVkFSSUFCTEUgZnJvbSBhIE1ha2VmaWxlLgorICBzZWRfeF92YXJpYWJsZT0nCisjIFRlc3QgaWYgdGhlIGhvbGQgc3BhY2UgaXMgZW1wdHkuCit4CitzL1AvUC8KK3gKK3RhCisjIFllcyBpdCB3YXMgZW1wdHkuIExvb2sgaWYgd2UgaGF2ZSB0aGUgZXhwZWN0ZWQgdmFyaWFibGUgZGVmaW5pdGlvbi4KKy9eWwkgXSpWQVJJQUJMRVsJIF0qPS97CisgICMgU2VlbiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgdmFyaWFibGUgZGVmaW5pdGlvbi4KKyAgcy9eWwkgXSpWQVJJQUJMRVsJIF0qPS8vCisgIGJhCit9CitiZAorOmEKKyMgSGVyZSB3ZSBhcmUgcHJvY2Vzc2luZyBhIGxpbmUgZnJvbSB0aGUgdmFyaWFibGUgZGVmaW5pdGlvbi4KKyMgUmVtb3ZlIGNvbW1lbnQsIG1vcmUgcHJlY2lzZWx5IHJlcGxhY2UgaXQgd2l0aCBhIHNwYWNlLgorcy8jLiokLyAvCisjIFNlZSBpZiB0aGUgbGluZSBlbmRzIGluIGEgYmFja3NsYXNoLgordGIKKzpiCitzL1xcJC8vCisjIFByaW50IHRoZSBsaW5lLCB3aXRob3V0IHRoZSB0cmFpbGluZyBiYWNrc2xhc2guCitwCit0YworIyBUaGVyZSB3YXMgbm8gdHJhaWxpbmcgYmFja3NsYXNoLiBUaGUgZW5kIG9mIHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uIGlzCisjIHJlYWNoZWQuIENsZWFyIHRoZSBob2xkIHNwYWNlLgorcy9eLiokLy8KK3gKK2JkCis6YworIyBBIHRyYWlsaW5nIGJhY2tzbGFzaCBtZWFucyB0aGF0IHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uIGNvbnRpbnVlcyBpbiB0aGUKKyMgbmV4dCBsaW5lLiBQdXQgYSBub25lbXB0eSBzdHJpbmcgaW50byB0aGUgaG9sZCBzcGFjZSB0byBpbmRpY2F0ZSB0aGlzLgorcy9eLiokL1AvCit4Cis6ZAorJworY2hhbmdlcXVvdGUoWyxdKWRubAorCisgICMgU2V0IFBPVEZJTEVTIHRvIHRoZSB2YWx1ZSBvZiB0aGUgTWFrZWZpbGUgdmFyaWFibGUgUE9URklMRVMuCisgIHNlZF94X1BPVEZJTEVTPWAkZ3RfZWNobyAiJHNlZF94X3ZhcmlhYmxlIiB8IHNlZCAtZSAnL14gKiMvZCcgLWUgJ3MvVkFSSUFCTEUvUE9URklMRVMvZydgCisgIFBPVEZJTEVTPWBzZWQgLW4gLWUgIiRzZWRfeF9QT1RGSUxFUyIgPCAiJGFjX2ZpbGUiYAorICAjIENvbXB1dGUgUE9URklMRVNfREVQUyBhcworICAjICAgJChmb3JlYWNoIGZpbGUsICQoUE9URklMRVMpLCAkKHRvcF9zcmNkaXIpLyQoZmlsZSkpCisgIFBPVEZJTEVTX0RFUFM9CisgIGZvciBmaWxlIGluICRQT1RGSUxFUzsgZG8KKyAgICBQT1RGSUxFU19ERVBTPSIkUE9URklMRVNfREVQUyAiJyQodG9wX3NyY2RpcikvJyIkZmlsZSIKKyAgZG9uZQorICBQT01BS0VGSUxFREVQUz0iIgorCisgIGlmIHRlc3QgLW4gIiRPQlNPTEVURV9BTExfTElOR1VBUyI7IHRoZW4KKyAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogc2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiIHx8IGVjaG8gInNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIgorICBmaQorICBpZiB0ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyI7IHRoZW4KKyAgICAjIFRoZSBMSU5HVUFTIGZpbGUgY29udGFpbnMgdGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzLgorICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgLWUgInMvIy4qLy8iICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyJgCisgICAgUE9NQUtFRklMRURFUFM9IiRQT01BS0VGSUxFREVQUyBMSU5HVUFTIgorICBlbHNlCisgICAgIyBTZXQgQUxMX0xJTkdVQVMgdG8gdGhlIHZhbHVlIG9mIHRoZSBNYWtlZmlsZSB2YXJpYWJsZSBMSU5HVUFTLgorICAgIHNlZF94X0xJTkdVQVM9YCRndF9lY2hvICIkc2VkX3hfdmFyaWFibGUiIHwgc2VkIC1lICcvXiAqIy9kJyAtZSAncy9WQVJJQUJMRS9MSU5HVUFTL2cnYAorICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1uIC1lICIkc2VkX3hfTElOR1VBUyIgPCAiJGFjX2ZpbGUiYAorICBmaQorICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbWVudCBmcm9tIGF1dG9tYWtlIDwgMS41LgorICBldmFsICdBTExfTElOR1VBUycnPSRBTExfTElOR1VBU18nCisgICMgQ29tcHV0ZSBQT0ZJTEVTCisgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLnBvKQorICAjIENvbXB1dGUgVVBEQVRFUE9GSUxFUworICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLnBvLXVwZGF0ZSkKKyAgIyBDb21wdXRlIERVTU1ZUE9GSUxFUworICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLm5vcCkKKyAgIyBDb21wdXRlIEdNT0ZJTEVTCisgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLmdtbykKKyAgIyBDb21wdXRlIFBST1BFUlRJRVNGSUxFUworICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHRvcF9zcmNkaXIpLyQoRE9NQUlOKV8kKGxhbmcpLnByb3BlcnRpZXMpCisgICMgQ29tcHV0ZSBDTEFTU0ZJTEVTCisgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQodG9wX3NyY2RpcikvJChET01BSU4pXyQobGFuZykuY2xhc3MpCisgICMgQ29tcHV0ZSBRTUZJTEVTCisgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLnFtKQorICAjIENvbXB1dGUgTVNHRklMRVMKKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQoZnJvYiAkKGxhbmcpKS5tc2cpCisgICMgQ29tcHV0ZSBSRVNPVVJDRVNETExGSUxFUworICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChmcm9iICQobGFuZykpLyQoRE9NQUlOKS5yZXNvdXJjZXMuZGxsKQorICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgorICAgIC4pIHNyY2RpcnByZT0gOzsKKyAgICAqKSBzcmNkaXJwcmU9JyQoc3JjZGlyKS8nIDs7CisgIGVzYWMKKyAgUE9GSUxFUz0KKyAgVVBEQVRFUE9GSUxFUz0KKyAgRFVNTVlQT0ZJTEVTPQorICBHTU9GSUxFUz0KKyAgUFJPUEVSVElFU0ZJTEVTPQorICBDTEFTU0ZJTEVTPQorICBRTUZJTEVTPQorICBNU0dGSUxFUz0KKyAgUkVTT1VSQ0VTRExMRklMRVM9CisgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKyAgICBQT0ZJTEVTPSIkUE9GSUxFUyAkc3JjZGlycHJlJGxhbmcucG8iCisgICAgVVBEQVRFUE9GSUxFUz0iJFVQREFURVBPRklMRVMgJGxhbmcucG8tdXBkYXRlIgorICAgIERVTU1ZUE9GSUxFUz0iJERVTU1ZUE9GSUxFUyAkbGFuZy5ub3AiCisgICAgR01PRklMRVM9IiRHTU9GSUxFUyAkc3JjZGlycHJlJGxhbmcuZ21vIgorICAgIFBST1BFUlRJRVNGSUxFUz0iJFBST1BFUlRJRVNGSUxFUyBcJCh0b3Bfc3JjZGlyKS9cJChET01BSU4pXyRsYW5nLnByb3BlcnRpZXMiCisgICAgQ0xBU1NGSUxFUz0iJENMQVNTRklMRVMgXCQodG9wX3NyY2RpcikvXCQoRE9NQUlOKV8kbGFuZy5jbGFzcyIKKyAgICBRTUZJTEVTPSIkUU1GSUxFUyAkc3JjZGlycHJlJGxhbmcucW0iCisgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXC4uKiQvLycgLWUgJ3kvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovJ2AKKyAgICBNU0dGSUxFUz0iJE1TR0ZJTEVTICRzcmNkaXJwcmUkZnJvYmJlZGxhbmcubXNnIgorICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL18vLS9nJyAtZSAncy9ec3ItQ1Mvc3ItU1AvJyAtZSAncy9AbGF0aW4kLy1MYXRuLycgLWUgJ3MvQGN5cmlsbGljJC8tQ3lybC8nIC1lICdzL15zci1TUCQvc3ItU1AtTGF0bi8nIC1lICdzL151ei1VWiQvdXotVVotTGF0bi8nYAorICAgIFJFU09VUkNFU0RMTEZJTEVTPSIkUkVTT1VSQ0VTRExMRklMRVMgJHNyY2RpcnByZSRmcm9iYmVkbGFuZy9cJChET01BSU4pLnJlc291cmNlcy5kbGwiCisgIGRvbmUKKyAgIyBDQVRBTE9HUyBkZXBlbmRzIG9uIGJvdGggJGFjX2RpciBhbmQgdGhlIHVzZXIncyBMSU5HVUFTCisgICMgZW52aXJvbm1lbnQgdmFyaWFibGUuCisgIElOU1RfTElOR1VBUz0KKyAgaWYgdGVzdCAtbiAiJEFMTF9MSU5HVUFTIjsgdGhlbgorICAgIGZvciBwcmVzZW50bGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisgICAgICB1c2VpdD1ubworICAgICAgaWYgdGVzdCAiJVVOU0VUJSIgIT0gIiRMSU5HVUFTIjsgdGhlbgorICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkTElOR1VBUyIKKyAgICAgIGVsc2UKKyAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJEFMTF9MSU5HVUFTIgorICAgICAgZmkKKyAgICAgIGZvciBkZXNpcmVkbGFuZyBpbiAkZGVzaXJlZGxhbmd1YWdlczsgZG8KKyAgICAgICAgIyBVc2UgdGhlIHByZXNlbnRsYW5nIGNhdGFsb2cgaWYgZGVzaXJlZGxhbmcgaXMKKyAgICAgICAgIyAgIGEuIGVxdWFsIHRvIHByZXNlbnRsYW5nLCBvcgorICAgICAgICAjICAgYi4gYSB2YXJpYW50IG9mIHByZXNlbnRsYW5nIChiZWNhdXNlIGluIHRoaXMgY2FzZSwKKyAgICAgICAgIyAgICAgIHByZXNlbnRsYW5nIGNhbiBiZSB1c2VkIGFzIGEgZmFsbGJhY2sgZm9yIG1lc3NhZ2VzCisgICAgICAgICMgICAgICB3aGljaCBhcmUgbm90IHRyYW5zbGF0ZWQgaW4gdGhlIGRlc2lyZWRsYW5nIGNhdGFsb2cpLgorICAgICAgICBjYXNlICIkZGVzaXJlZGxhbmciIGluCisgICAgICAgICAgIiRwcmVzZW50bGFuZyIqKSB1c2VpdD15ZXM7OworICAgICAgICBlc2FjCisgICAgICBkb25lCisgICAgICBpZiB0ZXN0ICR1c2VpdCA9IHllczsgdGhlbgorICAgICAgICBJTlNUX0xJTkdVQVM9IiRJTlNUX0xJTkdVQVMgJHByZXNlbnRsYW5nIgorICAgICAgZmkKKyAgICBkb25lCisgIGZpCisgIENBVEFMT0dTPQorICBKQVZBQ0FUQUxPR1M9CisgIFFUQ0FUQUxPR1M9CisgIFRDTENBVEFMT0dTPQorICBDU0hBUlBDQVRBTE9HUz0KKyAgaWYgdGVzdCAtbiAiJElOU1RfTElOR1VBUyI7IHRoZW4KKyAgICBmb3IgbGFuZyBpbiAkSU5TVF9MSU5HVUFTOyBkbworICAgICAgQ0FUQUxPR1M9IiRDQVRBTE9HUyAkbGFuZy5nbW8iCisgICAgICBKQVZBQ0FUQUxPR1M9IiRKQVZBQ0FUQUxPR1MgXCQoRE9NQUlOKV8kbGFuZy5wcm9wZXJ0aWVzIgorICAgICAgUVRDQVRBTE9HUz0iJFFUQ0FUQUxPR1MgJGxhbmcucW0iCisgICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9cLi4qJC8vJyAtZSAneS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8nYAorICAgICAgVENMQ0FUQUxPR1M9IiRUQ0xDQVRBTE9HUyAkZnJvYmJlZGxhbmcubXNnIgorICAgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXy8tL2cnIC1lICdzL15zci1DUy9zci1TUC8nIC1lICdzL0BsYXRpbiQvLUxhdG4vJyAtZSAncy9AY3lyaWxsaWMkLy1DeXJsLycgLWUgJ3MvXnNyLVNQJC9zci1TUC1MYXRuLycgLWUgJ3MvXnV6LVVaJC91ei1VWi1MYXRuLydgCisgICAgICBDU0hBUlBDQVRBTE9HUz0iJENTSEFSUENBVEFMT0dTICRmcm9iYmVkbGFuZy9cJChET01BSU4pLnJlc291cmNlcy5kbGwiCisgICAgZG9uZQorICBmaQorCisgIHNlZCAtZSAic3xAUE9URklMRVNfREVQU0B8JFBPVEZJTEVTX0RFUFN8ZyIgLWUgInN8QFBPRklMRVNAfCRQT0ZJTEVTfGciIC1lICJzfEBVUERBVEVQT0ZJTEVTQHwkVVBEQVRFUE9GSUxFU3xnIiAtZSAic3xARFVNTVlQT0ZJTEVTQHwkRFVNTVlQT0ZJTEVTfGciIC1lICJzfEBHTU9GSUxFU0B8JEdNT0ZJTEVTfGciIC1lICJzfEBQUk9QRVJUSUVTRklMRVNAfCRQUk9QRVJUSUVTRklMRVN8ZyIgLWUgInN8QENMQVNTRklMRVNAfCRDTEFTU0ZJTEVTfGciIC1lICJzfEBRTUZJTEVTQHwkUU1GSUxFU3xnIiAtZSAic3xATVNHRklMRVNAfCRNU0dGSUxFU3xnIiAtZSAic3xAUkVTT1VSQ0VTRExMRklMRVNAfCRSRVNPVVJDRVNETExGSUxFU3xnIiAtZSAic3xAQ0FUQUxPR1NAfCRDQVRBTE9HU3xnIiAtZSAic3xASkFWQUNBVEFMT0dTQHwkSkFWQUNBVEFMT0dTfGciIC1lICJzfEBRVENBVEFMT0dTQHwkUVRDQVRBTE9HU3xnIiAtZSAic3xAVENMQ0FUQUxPR1NAfCRUQ0xDQVRBTE9HU3xnIiAtZSAic3xAQ1NIQVJQQ0FUQUxPR1NAfCRDU0hBUlBDQVRBTE9HU3xnIiAtZSAncyxeI2Rpc3RkaXI6LGRpc3RkaXI6LCcgPCAiJGFjX2ZpbGUiID4gIiRhY19maWxlLnRtcCIKKyAgaWYgZ3JlcCAtbCAnQFRDTENBVEFMT0dTQCcgIiRhY19maWxlIiA+IC9kZXYvbnVsbDsgdGhlbgorICAgICMgQWRkIGRlcGVuZGVuY2llcyB0aGF0IGNhbm5vdCBiZSBmb3JtdWxhdGVkIGFzIGEgc2ltcGxlIHN1ZmZpeCBydWxlLgorICAgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKyAgICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL1wuLiokLy8nIC1lICd5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LydgCisgICAgICBjYXQgPj4gIiRhY19maWxlLnRtcCIgPDxFT0YKKyRmcm9iYmVkbGFuZy5tc2c6ICRsYW5nLnBvCisJQGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS10Y2wgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8iOyBcCisJXCQoTVNHRk1UKSAtYyAtLXRjbCAtZCAiXCQoc3JjZGlyKSIgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIHx8IHsgcm0gLWYgIlwkKHNyY2RpcikvJGZyb2JiZWRsYW5nLm1zZyI7IGV4aXQgMTsgfQorRU9GCisgICAgZG9uZQorICBmaQorICBpZiBncmVwIC1sICdAQ1NIQVJQQ0FUQUxPR1NAJyAiJGFjX2ZpbGUiID4gL2Rldi9udWxsOyB0aGVuCisgICAgIyBBZGQgZGVwZW5kZW5jaWVzIHRoYXQgY2Fubm90IGJlIGZvcm11bGF0ZWQgYXMgYSBzaW1wbGUgc3VmZml4IHJ1bGUuCisgICAgZm9yIGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworICAgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXy8tL2cnIC1lICdzL15zci1DUy9zci1TUC8nIC1lICdzL0BsYXRpbiQvLUxhdG4vJyAtZSAncy9AY3lyaWxsaWMkLy1DeXJsLycgLWUgJ3MvXnNyLVNQJC9zci1TUC1MYXRuLycgLWUgJ3MvXnV6LVVaJC91ei1VWi1MYXRuLydgCisgICAgICBjYXQgPj4gIiRhY19maWxlLnRtcCIgPDxFT0YKKyRmcm9iYmVkbGFuZy9cJChET01BSU4pLnJlc291cmNlcy5kbGw6ICRsYW5nLnBvCisJQGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS1jc2hhcnAgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gLXIgXCQoRE9NQUlOKSI7IFwKKwlcJChNU0dGTVQpIC1jIC0tY3NoYXJwIC1kICJcJChzcmNkaXIpIiAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gLXIgIlwkKERPTUFJTikiIHx8IHsgcm0gLWYgIlwkKHNyY2RpcikvJGZyb2JiZWRsYW5nLm1zZyI7IGV4aXQgMTsgfQorRU9GCisgICAgZG9uZQorICBmaQorICBpZiB0ZXN0IC1uICIkUE9NQUtFRklMRURFUFMiOyB0aGVuCisgICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCitNYWtlZmlsZTogJFBPTUFLRUZJTEVERVBTCitFT0YKKyAgZmkKKyAgbXYgIiRhY19maWxlLnRtcCIgIiRhY19maWxlIgorXSkKKworZG5sIEluaXRpYWxpemVzIHRoZSBhY2N1bXVsYXRvciB1c2VkIGJ5IEFNX1hHRVRURVhUX09QVElPTi4KK0FDX0RFRlVOKFtBTV9YR0VUVEVYVF9PUFRJT05fSU5JVF0sCitbCisgIFhHRVRURVhUX0VYVFJBX09QVElPTlM9CitdKQorCitkbmwgUmVnaXN0ZXJzIGFuIG9wdGlvbiB0byBiZSBwYXNzZWQgdG8geGdldHRleHQgaW4gdGhlIHBvIHN1YmRpcmVjdG9yeS4KK0FDX0RFRlVOKFtBTV9YR0VUVEVYVF9PUFRJT05dLAorWworICBBQ19SRVFVSVJFKFtBTV9YR0VUVEVYVF9PUFRJT05fSU5JVF0pCisgIFhHRVRURVhUX0VYVFJBX09QVElPTlM9IiRYR0VUVEVYVF9FWFRSQV9PUFRJT05TICQxIgorXSkKZGlmZiAtLWdpdCBhL200L3ByaW50Zi1wb3NpeC5tNCBiL200L3ByaW50Zi1wb3NpeC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGJhNjEyCi0tLSAvZGV2L251bGwKKysrIGIvbTQvcHJpbnRmLXBvc2l4Lm00CkBAIC0wLDAgKzEsNDQgQEAKKyMgcHJpbnRmLXBvc2l4Lm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTcpCitkbmwgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KK2RubCBUZXN0IHdoZXRoZXIgdGhlIHByaW50ZigpIGZ1bmN0aW9uIHN1cHBvcnRzIFBPU0lYL1hTSSBmb3JtYXQgc3RyaW5ncyB3aXRoCitkbmwgcG9zaXRpb25zLgorCitBQ19ERUZVTihbZ3RfUFJJTlRGX1BPU0lYXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHByaW50ZigpIHN1cHBvcnRzIFBPU0lYL1hTSSBmb3JtYXQgc3RyaW5nc10sCisgICAgZ3RfY3ZfZnVuY19wcmludGZfcG9zaXgsCisgICAgWworICAgICAgQUNfVFJZX1JVTihbCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKy8qIFRoZSBzdHJpbmcgIiUyJGQgJTEkZCIsIHdpdGggZG9sbGFyIGNoYXJhY3RlcnMgcHJvdGVjdGVkIGZyb20gdGhlIHNoZWxsJ3MKKyAgIGRvbGxhciBleHBhbnNpb24gKHBvc3NpYmx5IGFuIGF1dG9jb25mIGJ1ZykuICAqLworc3RhdGljIGNoYXIgZm9ybWF0W10gPSB7ICclJywgJzInLCAnJCcsICdkJywgJyAnLCAnJScsICcxJywgJyQnLCAnZCcsICdcMCcgfTsKK3N0YXRpYyBjaGFyIGJ1ZlsxMDBdOworaW50IG1haW4gKCkKK3sKKyAgc3ByaW50ZiAoYnVmLCBmb3JtYXQsIDMzLCA1NSk7CisgIHJldHVybiAoc3RyY21wIChidWYsICI1NSAzMyIpICE9IDApOworfV0sIGd0X2N2X2Z1bmNfcHJpbnRmX3Bvc2l4PXllcywgZ3RfY3ZfZnVuY19wcmludGZfcG9zaXg9bm8sCisgICAgICBbCisgICAgICAgIEFDX0VHUkVQX0NQUChub3Rwb3NpeCwgWworI2lmIGRlZmluZWQgX19OZXRCU0RfXyB8fCBkZWZpbmVkIF9fQkVPU19fIHx8IGRlZmluZWQgX01TQ19WRVIgfHwgZGVmaW5lZCBfX01JTkdXMzJfXyB8fCBkZWZpbmVkIF9fQ1lHV0lOX18KKyAgbm90cG9zaXgKKyNlbmRpZgorICAgICAgICBdLCBndF9jdl9mdW5jX3ByaW50Zl9wb3NpeD0iZ3Vlc3Npbmcgbm8iLAorICAgICAgICAgICBndF9jdl9mdW5jX3ByaW50Zl9wb3NpeD0iZ3Vlc3NpbmcgeWVzIikKKyAgICAgIF0pCisgICAgXSkKKyAgY2FzZSAkZ3RfY3ZfZnVuY19wcmludGZfcG9zaXggaW4KKyAgICAqeWVzKQorICAgICAgQUNfREVGSU5FKEhBVkVfUE9TSVhfUFJJTlRGLCAxLAorICAgICAgICBbRGVmaW5lIGlmIHlvdXIgcHJpbnRmKCkgZnVuY3Rpb24gc3VwcG9ydHMgZm9ybWF0IHN0cmluZ3Mgd2l0aCBwb3NpdGlvbnMuXSkKKyAgICAgIDs7CisgIGVzYWMKK10pCmRpZmYgLS1naXQgYS9tNC9wcm9ndGVzdC5tNCBiL200L3Byb2d0ZXN0Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NjM2NWMKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9wcm9ndGVzdC5tNApAQCAtMCwwICsxLDkyIEBACisjIHByb2d0ZXN0Lm00IHNlcmlhbCA0IChnZXR0ZXh0LTAuMTQuMikKK2RubCBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMywgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorZG5sCitkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CitkbmwgZnVuY3Rpb25hbGl0eS4KK2RubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCitkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCitkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCitkbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisKK2RubCBBdXRob3JzOgorZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTYuCisKK0FDX1BSRVJFUSgyLjUwKQorCisjIFNlYXJjaCBwYXRoIGZvciBhIHByb2dyYW0gd2hpY2ggcGFzc2VzIHRoZSBnaXZlbiB0ZXN0LgorCitkbmwgQU1fUEFUSF9QUk9HX1dJVEhfVEVTVChWQVJJQUJMRSwgUFJPRy1UTy1DSEVDSy1GT1IsCitkbmwgICBURVNULVBFUkZPUk1FRC1PTi1GT1VORF9QUk9HUkFNIFssIFZBTFVFLUlGLU5PVC1GT1VORCBbLCBQQVRIXV0pCitBQ19ERUZVTihbQU1fUEFUSF9QUk9HX1dJVEhfVEVTVF0sCitbCisjIFByZXBhcmUgUEFUSF9TRVBBUkFUT1IuCisjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKKyAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAorICBjaG1vZCAreCBjb25mJCQuc2gKKyAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBQQVRIX1NFUEFSQVRPUj0nOycKKyAgZWxzZQorICAgIFBBVEhfU0VQQVJBVE9SPToKKyAgZmkKKyAgcm0gLWYgY29uZiQkLnNoCitmaQorCisjIEZpbmQgb3V0IGhvdyB0byB0ZXN0IGZvciBleGVjdXRhYmxlIGZpbGVzLiBEb24ndCB1c2UgYSB6ZXJvLWJ5dGUgZmlsZSwKKyMgYXMgc3lzdGVtcyBtYXkgdXNlIG1ldGhvZHMgb3RoZXIgdGhhbiBtb2RlIGJpdHMgdG8gZGV0ZXJtaW5lIGV4ZWN1dGFiaWxpdHkuCitjYXQgPmNvbmYkJC5maWxlIDw8X0FTRU9GCisjISAvYmluL3NoCitleGl0IDAKK19BU0VPRgorY2htb2QgK3ggY29uZiQkLmZpbGUKK2lmIHRlc3QgLXggY29uZiQkLmZpbGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFjX2V4ZWN1dGFibGVfcD0idGVzdCAteCIKK2Vsc2UKKyAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIgorZmkKK3JtIC1mIGNvbmYkJC5maWxlCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJDIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICQyOyBhY193b3JkPVskXTIKK0FDX01TR19DSEVDS0lORyhbZm9yICRhY193b3JkXSkKK0FDX0NBQ0hFX1ZBTChhY19jdl9wYXRoXyQxLAorW2Nhc2UgIlskXSQxIiBpbgorICBbW1xcL11dKiB8ID86W1tcXC9dXSopCisgICAgYWNfY3ZfcGF0aF8kMT0iWyRdJDEiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICAgIDs7CisgICopCisgICAgYWNfc2F2ZV9JRlM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgICAgZm9yIGFjX2RpciBpbiBpZmVsc2UoWyQ1XSwgLCAkUEFUSCwgWyQ1XSk7IGRvCisgICAgICBJRlM9IiRhY19zYXZlX0lGUyIKKyAgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgICAgaWYgJGFjX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICAgICAgICBlY2hvICIkYXNfbWU6IHRyeWluZyAkYWNfZGlyLyRhY193b3JkLi4uIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgICAgaWYgWyQzXTsgdGhlbgorICAgICAgICAgICAgYWNfY3ZfcGF0aF8kMT0iJGFjX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAgICAgICAgIGJyZWFrIDIKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZG9uZQorICAgIGRvbmUKKyAgICBJRlM9IiRhY19zYXZlX0lGUyIKK2RubCBJZiBubyA0dGggYXJnIGlzIGdpdmVuLCBsZWF2ZSB0aGUgY2FjaGUgdmFyaWFibGUgdW5zZXQsCitkbmwgc28gQUNfUEFUSF9QUk9HUyB3aWxsIGtlZXAgbG9va2luZy4KK2lmZWxzZShbJDRdLCAsICwgWyAgdGVzdCAteiAiWyRdYWNfY3ZfcGF0aF8kMSIgJiYgYWNfY3ZfcGF0aF8kMT0iJDQiCitdKWRubAorICAgIDs7Citlc2FjXSlkbmwKKyQxPSIkYWNfY3ZfcGF0aF8kMSIKK2lmIHRlc3QgaWZlbHNlKFskNF0sICwgWy1uICJbJF0kMSJdLCBbIlskXSQxIiAhPSAiJDQiXSk7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVChbJF0kMSkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKK2ZpCitBQ19TVUJTVCgkMSlkbmwKK10pCmRpZmYgLS1naXQgYS9tNC9zaXplX21heC5tNCBiL200L3NpemVfbWF4Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYjQ4NjgKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9zaXplX21heC5tNApAQCAtMCwwICsxLDY4IEBACisjIHNpemVfbWF4Lm00IHNlcmlhbCA2CitkbmwgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LTIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorCitBQ19ERUZVTihbZ2xfU0laRV9NQVhdLAorWworICBBQ19DSEVDS19IRUFERVJTKHN0ZGludC5oKQorICBkbmwgRmlyc3QgdGVzdCB3aGV0aGVyIHRoZSBzeXN0ZW0gYWxyZWFkeSBoYXMgU0laRV9NQVguCisgIEFDX01TR19DSEVDS0lORyhbZm9yIFNJWkVfTUFYXSkKKyAgQUNfQ0FDSEVfVkFMKFtnbF9jdl9zaXplX21heF0sIFsKKyAgICBnbF9jdl9zaXplX21heD0KKyAgICBBQ19FR1JFUF9DUFAoW0ZvdW5kIGl0XSwgWworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2lmIEhBVkVfU1RESU5UX0gKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorI2lmZGVmIFNJWkVfTUFYCitGb3VuZCBpdAorI2VuZGlmCitdLCBnbF9jdl9zaXplX21heD15ZXMpCisgICAgaWYgdGVzdCAteiAiJGdsX2N2X3NpemVfbWF4IjsgdGhlbgorICAgICAgZG5sIERlZmluZSBpdCBvdXJzZWx2ZXMuIEhlcmUgd2UgYXNzdW1lIHRoYXQgdGhlIHR5cGUgJ3NpemVfdCcgaXMgbm90IHdpZGVyCisgICAgICBkbmwgdGhhbiB0aGUgdHlwZSAndW5zaWduZWQgbG9uZycuIFRyeSBoYXJkIHRvIGZpbmQgYSBkZWZpbml0aW9uIHRoYXQgY2FuCisgICAgICBkbmwgYmUgdXNlZCBpbiBhIHByZXByb2Nlc3NvciAjaWYsIGkuZS4gZG9lc24ndCBjb250YWluIGEgY2FzdC4KKyAgICAgIEFDX0NPTVBVVEVfSU5UKFtzaXplX3RfYml0c19taW51c18xXSwgW3NpemVvZiAoc2l6ZV90KSAqIENIQVJfQklUIC0gMV0sCisgICAgICAgIFsjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+XSwgc2l6ZV90X2JpdHNfbWludXNfMT0pCisgICAgICBBQ19DT01QVVRFX0lOVChbZml0c19pbl91aW50XSwgW3NpemVvZiAoc2l6ZV90KSA8PSBzaXplb2YgKHVuc2lnbmVkIGludCldLAorICAgICAgICBbI2luY2x1ZGUgPHN0ZGRlZi5oPl0sIGZpdHNfaW5fdWludD0pCisgICAgICBpZiB0ZXN0IC1uICIkc2l6ZV90X2JpdHNfbWludXNfMSIgJiYgdGVzdCAtbiAiJGZpdHNfaW5fdWludCI7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAkZml0c19pbl91aW50ID0gMTsgdGhlbgorICAgICAgICAgIGRubCBFdmVuIHRob3VnaCBTSVpFX01BWCBmaXRzIGluIGFuIHVuc2lnbmVkIGludCwgaXQgbXVzdCBiZSBvZiB0eXBlCisgICAgICAgICAgZG5sICd1bnNpZ25lZCBsb25nJyBpZiB0aGUgdHlwZSAnc2l6ZV90JyBpcyB0aGUgc2FtZSBhcyAndW5zaWduZWQgbG9uZycuCisgICAgICAgICAgQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgICAgICAgICAgIGV4dGVybiBzaXplX3QgZm9vOworICAgICAgICAgICAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZm9vOworICAgICAgICAgICAgXSwgW10sIGZpdHNfaW5fdWludD0wKQorICAgICAgICBmaQorICAgICAgICBkbmwgV2UgY2Fubm90IHVzZSAnZXhwcicgdG8gc2ltcGxpZnkgdGhpcyBleHByZXNzaW9uLCBiZWNhdXNlICdleHByJworICAgICAgICBkbmwgd29ya3Mgb25seSB3aXRoICdsb25nJyBpbnRlZ2VycyBpbiB0aGUgaG9zdCBlbnZpcm9ubWVudCwgd2hpbGUgd2UKKyAgICAgICAgZG5sIG1pZ2h0IGJlIGNyb3NzLWNvbXBpbGluZyBmcm9tIGEgMzItYml0IHBsYXRmb3JtIHRvIGEgNjQtYml0IHBsYXRmb3JtLgorICAgICAgICBpZiB0ZXN0ICRmaXRzX2luX3VpbnQgPSAxOyB0aGVuCisgICAgICAgICAgZ2xfY3Zfc2l6ZV9tYXg9IigoKDFVIDw8ICRzaXplX3RfYml0c19taW51c18xKSAtIDEpICogMiArIDEpIgorICAgICAgICBlbHNlCisgICAgICAgICAgZ2xfY3Zfc2l6ZV9tYXg9IigoKDFVTCA8PCAkc2l6ZV90X2JpdHNfbWludXNfMSkgLSAxKSAqIDIgKyAxKSIKKyAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgZG5sIFNob3VsZG4ndCBoYXBwZW4sIGJ1dCB3aG8ga25vd3MuLi4KKyAgICAgICAgZ2xfY3Zfc2l6ZV9tYXg9Jygoc2l6ZV90KX4oc2l6ZV90KTApJworICAgICAgZmkKKyAgICBmaQorICBdKQorICBBQ19NU0dfUkVTVUxUKFskZ2xfY3Zfc2l6ZV9tYXhdKQorICBpZiB0ZXN0ICIkZ2xfY3Zfc2l6ZV9tYXgiICE9IHllczsgdGhlbgorICAgIEFDX0RFRklORV9VTlFVT1RFRChbU0laRV9NQVhdLCBbJGdsX2N2X3NpemVfbWF4XSwKKyAgICAgIFtEZWZpbmUgYXMgdGhlIG1heGltdW0gdmFsdWUgb2YgdHlwZSAnc2l6ZV90JywgaWYgdGhlIHN5c3RlbSBkb2Vzbid0IGRlZmluZSBpdC5dKQorICBmaQorXSkKKworZG5sIEF1dG9jb25mID49IDIuNjEgaGFzIEFDX0NPTVBVVEVfSU5UIGJ1aWx0LWluLgorZG5sIFJlbW92ZSB0aGlzIHdoZW4gd2UgY2FuIGFzc3VtZSBhdXRvY29uZiA+PSAyLjYxLgorbTRfaWZkZWYoW0FDX0NPTVBVVEVfSU5UXSwgW10sIFsKKyAgQUNfREVGVU4oW0FDX0NPTVBVVEVfSU5UXSwgW19BQ19DT01QVVRFX0lOVChbJDJdLFskMV0sWyQzXSxbJDRdKV0pCitdKQpkaWZmIC0tZ2l0IGEvbTQvc3RkaW50X2gubTQgYi9tNC9zdGRpbnRfaC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjlhOGFjCi0tLSAvZGV2L251bGwKKysrIGIvbTQvc3RkaW50X2gubTQKQEAgLTAsMCArMSwyNiBAQAorIyBzdGRpbnRfaC5tNCBzZXJpYWwgNgorZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDA0LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorCisjIERlZmluZSBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCBpZiA8c3RkaW50Lmg+IGV4aXN0cywKKyMgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4sIGFuZCBkZWNsYXJlcyB1aW50bWF4X3QuCisKK0FDX0RFRlVOKFtnbF9BQ19IRUFERVJfU1RESU5UX0hdLAorWworICBBQ19DQUNIRV9DSEVDSyhbZm9yIHN0ZGludC5oXSwgZ2xfY3ZfaGVhZGVyX3N0ZGludF9oLAorICBbQUNfVFJZX0NPTVBJTEUoCisgICAgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD5dLAorICAgIFt1aW50bWF4X3QgaSA9ICh1aW50bWF4X3QpIC0xOyByZXR1cm4gIWk7XSwKKyAgICBnbF9jdl9oZWFkZXJfc3RkaW50X2g9eWVzLAorICAgIGdsX2N2X2hlYWRlcl9zdGRpbnRfaD1ubyldKQorICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfc3RkaW50X2ggPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVgsIDEsCisgICAgICBbRGVmaW5lIGlmIDxzdGRpbnQuaD4gZXhpc3RzLCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwKKyAgICAgICBhbmQgZGVjbGFyZXMgdWludG1heF90LiBdKQorICBmaQorXSkKZGlmZiAtLWdpdCBhL200L3VpbnRtYXhfdC5tNCBiL200L3VpbnRtYXhfdC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDFjNDg5Ci0tLSAvZGV2L251bGwKKysrIGIvbTQvdWludG1heF90Lm00CkBAIC0wLDAgKzEsMzAgQEAKKyMgdWludG1heF90Lm00IHNlcmlhbCAxMAorZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDA0LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorCitBQ19QUkVSRVEoMi4xMykKKworIyBEZWZpbmUgdWludG1heF90IHRvICd1bnNpZ25lZCBsb25nJyBvciAndW5zaWduZWQgbG9uZyBsb25nJworIyBpZiBpdCBpcyBub3QgYWxyZWFkeSBkZWZpbmVkIGluIDxzdGRpbnQuaD4gb3IgPGludHR5cGVzLmg+LgorCitBQ19ERUZVTihbZ2xfQUNfVFlQRV9VSU5UTUFYX1RdLAorWworICBBQ19SRVFVSVJFKFtnbF9BQ19IRUFERVJfSU5UVFlQRVNfSF0pCisgIEFDX1JFUVVJUkUoW2dsX0FDX0hFQURFUl9TVERJTlRfSF0pCisgIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9pbnR0eXBlc19oID0gbm8gJiYgdGVzdCAkZ2xfY3ZfaGVhZGVyX3N0ZGludF9oID0gbm87IHRoZW4KKyAgICBBQ19SRVFVSVJFKFtBQ19UWVBFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRdKQorICAgIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludCA9IHllcyBcCisgICAgICAmJiBhY190eXBlPSd1bnNpZ25lZCBsb25nIGxvbmcnIFwKKyAgICAgIHx8IGFjX3R5cGU9J3Vuc2lnbmVkIGxvbmcnCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKHVpbnRtYXhfdCwgJGFjX3R5cGUsCisgICAgICBbRGVmaW5lIHRvIHVuc2lnbmVkIGxvbmcgb3IgdW5zaWduZWQgbG9uZyBsb25nCisgICAgICAgaWYgPHN0ZGludC5oPiBhbmQgPGludHR5cGVzLmg+IGRvbid0IGRlZmluZS5dKQorICBlbHNlCisgICAgQUNfREVGSU5FKEhBVkVfVUlOVE1BWF9ULCAxLAorICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3VpbnRtYXhfdCcgdHlwZSBpbiA8c3RkaW50Lmg+IG9yIDxpbnR0eXBlcy5oPi5dKQorICBmaQorXSkKZGlmZiAtLWdpdCBhL200L3Zpc2liaWxpdHkubTQgYi9tNC92aXNpYmlsaXR5Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZjYzMzAKLS0tIC9kZXYvbnVsbAorKysgYi9tNC92aXNpYmlsaXR5Lm00CkBAIC0wLDAgKzEsNTIgQEAKKyMgdmlzaWJpbGl0eS5tNCBzZXJpYWwgMSAoZ2V0dGV4dC0wLjE1KQorZG5sIENvcHlyaWdodCAoQykgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgRnJvbSBCcnVubyBIYWlibGUuCisKK2RubCBUZXN0cyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgY29tbWFuZC1saW5lIG9wdGlvbgorZG5sIC1mdmlzaWJpbGl0eT1oaWRkZW4gYW5kIHRoZSBmdW5jdGlvbiBhbmQgdmFyaWFibGUgYXR0cmlidXRlcworZG5sIF9fYXR0cmlidXRlX18oKF9fdmlzaWJpbGl0eV9fKCJoaWRkZW4iKSkpIGFuZAorZG5sIF9fYXR0cmlidXRlX18oKF9fdmlzaWJpbGl0eV9fKCJkZWZhdWx0IikpKS4KK2RubCBEb2VzICpub3QqIHRlc3QgZm9yIF9fdmlzaWJpbGl0eV9fKCJwcm90ZWN0ZWQiKSAtIHdoaWNoIGhhcyB0cmlja3kKK2RubCBzZW1hbnRpY3MgKHNlZSB0aGUgJ3Zpc21haW4nIHRlc3QgaW4gZ2xpYmMpIGFuZCBkb2VzIG5vdCBleGlzdCBlLmcuIG9uCitkbmwgTWFjT1MgWC4KK2RubCBEb2VzICpub3QqIHRlc3QgZm9yIF9fdmlzaWJpbGl0eV9fKCJpbnRlcm5hbCIpIC0gd2hpY2ggaGFzIHByb2Nlc3NvcgorZG5sIGRlcGVuZGVudCBzZW1hbnRpY3MuCitkbmwgRG9lcyAqbm90KiB0ZXN0IGZvciAjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHB1c2goaGlkZGVuKSAtIHdoaWNoIGlzCitkbmwgInJlYWxseSBvbmx5IHJlY29tbWVuZGVkIGZvciBsZWdhY3kgY29kZSIuCitkbmwgU2V0IHRoZSB2YXJpYWJsZSBDRkxBR19WSVNJQklMSVRZLgorZG5sIERlZmluZXMgYW5kIHNldHMgdGhlIHZhcmlhYmxlIEhBVkVfVklTSUJJTElUWS4KKworQUNfREVGVU4oW2dsX1ZJU0lCSUxJVFldLAorWworICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKKyAgQ0ZMQUdfVklTSUJJTElUWT0KKyAgSEFWRV9WSVNJQklMSVRZPTAKKyAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzaW1wbGUgdmlzaWJpbGl0eSBkZWNsYXJhdGlvbnNdKQorICAgIEFDX0NBQ0hFX1ZBTChnbF9jdl9jY192aXNpYmlsaXR5LCBbCisgICAgICBnbF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICAgIENGTEFHUz0iJENGTEFHUyAtZnZpc2liaWxpdHk9aGlkZGVuIgorICAgICAgQUNfVFJZX0NPTVBJTEUoCisgICAgICAgIFtleHRlcm4gX19hdHRyaWJ1dGVfXygoX192aXNpYmlsaXR5X18oImhpZGRlbiIpKSkgaW50IGhpZGRlbnZhcjsKKyAgICAgICAgIGV4dGVybiBfX2F0dHJpYnV0ZV9fKChfX3Zpc2liaWxpdHlfXygiZGVmYXVsdCIpKSkgaW50IGV4cG9ydGVkdmFyOworICAgICAgICAgZXh0ZXJuIF9fYXR0cmlidXRlX18oKF9fdmlzaWJpbGl0eV9fKCJoaWRkZW4iKSkpIGludCBoaWRkZW5mdW5jICh2b2lkKTsKKyAgICAgICAgIGV4dGVybiBfX2F0dHJpYnV0ZV9fKChfX3Zpc2liaWxpdHlfXygiZGVmYXVsdCIpKSkgaW50IGV4cG9ydGVkZnVuYyAodm9pZCk7XSwKKyAgICAgICAgW10sCisgICAgICAgIGdsX2N2X2NjX3Zpc2liaWxpdHk9eWVzLAorICAgICAgICBnbF9jdl9jY192aXNpYmlsaXR5PW5vKQorICAgICAgQ0ZMQUdTPSIkZ2xfc2F2ZV9DRkxBR1MiXSkKKyAgICBBQ19NU0dfUkVTVUxUKFskZ2xfY3ZfY2NfdmlzaWJpbGl0eV0pCisgICAgaWYgdGVzdCAkZ2xfY3ZfY2NfdmlzaWJpbGl0eSA9IHllczsgdGhlbgorICAgICAgQ0ZMQUdfVklTSUJJTElUWT0iLWZ2aXNpYmlsaXR5PWhpZGRlbiIKKyAgICAgIEhBVkVfVklTSUJJTElUWT0xCisgICAgZmkKKyAgZmkKKyAgQUNfU1VCU1QoW0NGTEFHX1ZJU0lCSUxJVFldKQorICBBQ19TVUJTVChbSEFWRV9WSVNJQklMSVRZXSkKKyAgQUNfREVGSU5FX1VOUVVPVEVEKFtIQVZFX1ZJU0lCSUxJVFldLCBbJEhBVkVfVklTSUJJTElUWV0sCisgICAgW0RlZmluZSB0byAxIG9yIDAsIGRlcGVuZGluZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyBzaW1wbGUgdmlzaWJpbGl0eSBkZWNsYXJhdGlvbnMuXSkKK10pCmRpZmYgLS1naXQgYS9tNC93Y2hhcl90Lm00IGIvbTQvd2NoYXJfdC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGUyMTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbTQvd2NoYXJfdC5tNApAQCAtMCwwICsxLDIwIEBACisjIHdjaGFyX3QubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMikKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgRnJvbSBCcnVubyBIYWlibGUuCitkbmwgVGVzdCB3aGV0aGVyIDxzdGRkZWYuaD4gaGFzIHRoZSAnd2NoYXJfdCcgdHlwZS4KK2RubCBQcmVyZXF1aXNpdGU6IEFDX1BST0dfQ0MKKworQUNfREVGVU4oW2d0X1RZUEVfV0NIQVJfVF0sCitbCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igd2NoYXJfdF0sIGd0X2N2X2Nfd2NoYXJfdCwKKyAgICBbQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgICAgICB3Y2hhcl90IGZvbyA9ICh3Y2hhcl90KSdcMCc7XSwgLAorICAgICAgIGd0X2N2X2Nfd2NoYXJfdD15ZXMsIGd0X2N2X2Nfd2NoYXJfdD1ubyldKQorICBpZiB0ZXN0ICRndF9jdl9jX3djaGFyX3QgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9XQ0hBUl9ULCAxLCBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnd2NoYXJfdCcgdHlwZS5dKQorICBmaQorXSkKZGlmZiAtLWdpdCBhL200L3dpbnRfdC5tNCBiL200L3dpbnRfdC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjVlZDkzCi0tLSAvZGV2L251bGwKKysrIGIvbTQvd2ludF90Lm00CkBAIC0wLDAgKzEsMjggQEAKKyMgd2ludF90Lm00IHNlcmlhbCAyIChnZXR0ZXh0LTAuMTcpCitkbmwgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KK2RubCBUZXN0IHdoZXRoZXIgPHdjaGFyLmg+IGhhcyB0aGUgJ3dpbnRfdCcgdHlwZS4KK2RubCBQcmVyZXF1aXNpdGU6IEFDX1BST0dfQ0MKKworQUNfREVGVU4oW2d0X1RZUEVfV0lOVF9UXSwKK1sKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3aW50X3RdLCBndF9jdl9jX3dpbnRfdCwKKyAgICBbQUNfVFJZX0NPTVBJTEUoWworLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQorICAgPHdjaGFyLmg+LgorICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlIGluY2x1ZGVkCisgICBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorICAgICAgIHdpbnRfdCBmb28gPSAod2NoYXJfdCknXDAnO10sICwKKyAgICAgICBndF9jdl9jX3dpbnRfdD15ZXMsIGd0X2N2X2Nfd2ludF90PW5vKV0pCisgIGlmIHRlc3QgJGd0X2N2X2Nfd2ludF90ID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKEhBVkVfV0lOVF9ULCAxLCBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnd2ludF90JyB0eXBlLl0pCisgIGZpCitdKQpkaWZmIC0tZ2l0IGEvbTQveHNpemUubTQgYi9tNC94c2l6ZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWJiNzIxCi0tLSAvZGV2L251bGwKKysrIGIvbTQveHNpemUubTQKQEAgLTAsMCArMSwxMyBAQAorIyB4c2l6ZS5tNCBzZXJpYWwgMworZG5sIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtnbF9YU0laRV0sCitbCisgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi94c2l6ZS5oLgorICBBQ19SRVFVSVJFKFtnbF9TSVpFX01BWF0pCisgIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSkKKyAgQUNfQ0hFQ0tfSEVBREVSUyhzdGRpbnQuaCkKK10pCmRpZmYgLS1naXQgYS9taXNzaW5nIGIvbWlzc2luZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yODA1NWQyCi0tLSAvZGV2L251bGwKKysrIGIvbWlzc2luZwpAQCAtMCwwICsxLDM3NiBAQAorIyEgL2Jpbi9zaAorIyBDb21tb24gc3R1YiBmb3IgYSBmZXcgbWlzc2luZyBHTlUgcHJvZ3JhbXMgd2hpbGUgaW5zdGFsbGluZy4KKworc2NyaXB0dmVyc2lvbj0yMDA5LTA0LTI4LjIxOyAjIFVUQworCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OSwgMjAwMCwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwKKyMgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgT3JpZ2luYWxseSBieSBGcmFuLGNvaXMgUGluYXJkIDxwaW5hcmRAaXJvLnVtb250cmVhbC5jYT4sIDE5OTYuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworaWYgdGVzdCAkIyAtZXEgMDsgdGhlbgorICBlY2hvIDE+JjIgIlRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCisgIGV4aXQgMQorZmkKKworcnVuPToKK3NlZF9vdXRwdXQ9J3MvLiogLS1vdXRwdXRbID1dXChbXiBdKlwpLiovXDEvcCcKK3NlZF9taW51c289J3MvLiogLW8gXChbXiBdKlwpLiovXDEvcCcKKworIyBJbiB0aGUgY2FzZXMgd2hlcmUgdGhpcyBtYXR0ZXJzLCBgbWlzc2luZycgaXMgYmVpbmcgcnVuIGluIHRoZQorIyBzcmNkaXIgYWxyZWFkeS4KK2lmIHRlc3QgLWYgY29uZmlndXJlLmFjOyB0aGVuCisgIGNvbmZpZ3VyZV9hYz1jb25maWd1cmUuYWMKK2Vsc2UKKyAgY29uZmlndXJlX2FjPWNvbmZpZ3VyZS5pbgorZmkKKworbXNnPSJtaXNzaW5nIG9uIHlvdXIgc3lzdGVtIgorCitjYXNlICQxIGluCistLXJ1bikKKyAgIyBUcnkgdG8gcnVuIHJlcXVlc3RlZCBwcm9ncmFtLCBhbmQganVzdCBleGl0IGlmIGl0IHN1Y2NlZWRzLgorICBydW49CisgIHNoaWZ0CisgICIkQCIgJiYgZXhpdCAwCisgICMgRXhpdCBjb2RlIDYzIG1lYW5zIHZlcnNpb24gbWlzbWF0Y2guICBUaGlzIG9mdGVuIGhhcHBlbnMKKyAgIyB3aGVuIHRoZSB1c2VyIHRyeSB0byB1c2UgYW4gYW5jaWVudCB2ZXJzaW9uIG9mIGEgdG9vbCBvbgorICAjIGEgZmlsZSB0aGF0IHJlcXVpcmVzIGEgbWluaW11bSB2ZXJzaW9uLiAgSW4gdGhpcyBjYXNlIHdlCisgICMgd2Ugc2hvdWxkIHByb2NlZWQgaGFzIGlmIHRoZSBwcm9ncmFtIGhhZCBiZWVuIGFic2VudCwgb3IKKyAgIyBpZiAtLXJ1biBoYWRuJ3QgYmVlbiBwYXNzZWQuCisgIGlmIHRlc3QgJD8gPSA2MzsgdGhlbgorICAgIHJ1bj06CisgICAgbXNnPSJwcm9iYWJseSB0b28gb2xkIgorICBmaQorICA7OworCisgIC1ofC0taHwtLWhlfC0taGVsfC0taGVscCkKKyAgICBlY2hvICJcCiskMCBbT1BUSU9OXS4uLiBQUk9HUkFNIFtBUkdVTUVOVF0uLi4KKworSGFuZGxlIFxgUFJPR1JBTSBbQVJHVU1FTlRdLi4uJyBmb3Igd2hlbiBQUk9HUkFNIGlzIG1pc3NpbmcsIG9yIHJldHVybiBhbgorZXJyb3Igc3RhdHVzIGlmIHRoZXJlIGlzIG5vIGtub3duIGhhbmRsaW5nIGZvciBQUk9HUkFNLgorCitPcHRpb25zOgorICAtaCwgLS1oZWxwICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQKKyAgLXYsIC0tdmVyc2lvbiAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisgIC0tcnVuICAgICAgICAgICB0cnkgdG8gcnVuIHRoZSBnaXZlbiBjb21tYW5kLCBhbmQgZW11bGF0ZSBpdCBpZiBpdCBmYWlscworCitTdXBwb3J0ZWQgUFJPR1JBTSB2YWx1ZXM6CisgIGFjbG9jYWwgICAgICB0b3VjaCBmaWxlIFxgYWNsb2NhbC5tNCcKKyAgYXV0b2NvbmYgICAgIHRvdWNoIGZpbGUgXGBjb25maWd1cmUnCisgIGF1dG9oZWFkZXIgICB0b3VjaCBmaWxlIFxgY29uZmlnLmguaW4nCisgIGF1dG9tNHRlICAgICB0b3VjaCB0aGUgb3V0cHV0IGZpbGUsIG9yIGNyZWF0ZSBhIHN0dWIgb25lCisgIGF1dG9tYWtlICAgICB0b3VjaCBhbGwgXGBNYWtlZmlsZS5pbicgZmlsZXMKKyAgYmlzb24gICAgICAgIGNyZWF0ZSBcYHkudGFiLltjaF0nLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuW2NoXQorICBmbGV4ICAgICAgICAgY3JlYXRlIFxgbGV4Lnl5LmMnLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuYworICBoZWxwMm1hbiAgICAgdG91Y2ggdGhlIG91dHB1dCBmaWxlCisgIGxleCAgICAgICAgICBjcmVhdGUgXGBsZXgueXkuYycsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5jCisgIG1ha2VpbmZvICAgICB0b3VjaCB0aGUgb3V0cHV0IGZpbGUKKyAgdGFyICAgICAgICAgIHRyeSB0YXIsIGdudXRhciwgZ3RhciwgdGhlbiB0YXIgd2l0aG91dCBub24tcG9ydGFibGUgZmxhZ3MKKyAgeWFjYyAgICAgICAgIGNyZWF0ZSBcYHkudGFiLltjaF0nLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuW2NoXQorCitWZXJzaW9uIHN1ZmZpeGVzIHRvIFBST0dSQU0gYXMgd2VsbCBhcyB0aGUgcHJlZml4ZXMgXGBnbnUtJywgXGBnbnUnLCBhbmQKK1xgZycgYXJlIGlnbm9yZWQgd2hlbiBjaGVja2luZyB0aGUgbmFtZS4KKworU2VuZCBidWcgcmVwb3J0cyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LiIKKyAgICBleGl0ICQ/CisgICAgOzsKKworICAtdnwtLXZ8LS12ZXwtLXZlcnwtLXZlcnN8LS12ZXJzaXwtLXZlcnNpb3wtLXZlcnNpb24pCisgICAgZWNobyAibWlzc2luZyAkc2NyaXB0dmVyc2lvbiAoR05VIEF1dG9tYWtlKSIKKyAgICBleGl0ICQ/CisgICAgOzsKKworICAtKikKKyAgICBlY2hvIDE+JjIgIiQwOiBVbmtub3duIFxgJDEnIG9wdGlvbiIKKyAgICBlY2hvIDE+JjIgIlRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCisgICAgZXhpdCAxCisgICAgOzsKKworZXNhYworCisjIG5vcm1hbGl6ZSBwcm9ncmFtIG5hbWUgdG8gY2hlY2sgZm9yLgorcHJvZ3JhbT1gZWNobyAiJDEiIHwgc2VkICcKKyAgcy9eZ251LS8vOyB0CisgIHMvXmdudS8vOyB0CisgIHMvXmcvLzsgdCdgCisKKyMgTm93IGV4aXQgaWYgd2UgaGF2ZSBpdCwgYnV0IGl0IGZhaWxlZC4gIEFsc28gZXhpdCBub3cgaWYgd2UKKyMgZG9uJ3QgaGF2ZSBpdCBhbmQgLS12ZXJzaW9uIHdhcyBwYXNzZWQgKG1vc3QgbGlrZWx5IHRvIGRldGVjdAorIyB0aGUgcHJvZ3JhbSkuICBUaGlzIGlzIGFib3V0IG5vbi1HTlUgcHJvZ3JhbXMsIHNvIHVzZSAkMSBub3QKKyMgJHByb2dyYW0uCitjYXNlICQxIGluCisgIGxleCp8eWFjYyopCisgICAgIyBOb3QgR05VIHByb2dyYW1zLCB0aGV5IGRvbid0IGhhdmUgLS12ZXJzaW9uLgorICAgIDs7CisKKyAgdGFyKikKKyAgICBpZiB0ZXN0IC1uICIkcnVuIjsgdGhlbgorICAgICAgIGVjaG8gMT4mMiAiRVJST1I6IFxgdGFyJyByZXF1aXJlcyAtLXJ1biIKKyAgICAgICBleGl0IDEKKyAgICBlbGlmIHRlc3QgIngkMiIgPSAieC0tdmVyc2lvbiIgfHwgdGVzdCAieCQyIiA9ICJ4LS1oZWxwIjsgdGhlbgorICAgICAgIGV4aXQgMQorICAgIGZpCisgICAgOzsKKworICAqKQorICAgIGlmIHRlc3QgLXogIiRydW4iICYmICgkMSAtLXZlcnNpb24pID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAjIFdlIGhhdmUgaXQsIGJ1dCBpdCBmYWlsZWQuCisgICAgICAgZXhpdCAxCisgICAgZWxpZiB0ZXN0ICJ4JDIiID0gIngtLXZlcnNpb24iIHx8IHRlc3QgIngkMiIgPSAieC0taGVscCI7IHRoZW4KKyAgICAgICAjIENvdWxkIG5vdCBydW4gLS12ZXJzaW9uIG9yIC0taGVscC4gIFRoaXMgaXMgcHJvYmFibHkgc29tZW9uZQorICAgICAgICMgcnVubmluZyBgJFRPT0wgLS12ZXJzaW9uJyBvciBgJFRPT0wgLS1oZWxwJyB0byBjaGVjayB3aGV0aGVyCisgICAgICAgIyAkVE9PTCBleGlzdHMgYW5kIG5vdCBrbm93aW5nICRUT09MIHVzZXMgbWlzc2luZy4KKyAgICAgICBleGl0IDEKKyAgICBmaQorICAgIDs7Citlc2FjCisKKyMgSWYgaXQgZG9lcyBub3QgZXhpc3QsIG9yIGZhaWxzIHRvIHJ1biAocG9zc2libHkgYW4gb3V0ZGF0ZWQgdmVyc2lvbiksCisjIHRyeSB0byBlbXVsYXRlIGl0LgorY2FzZSAkcHJvZ3JhbSBpbgorICBhY2xvY2FsKikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIFxgYWNpbmNsdWRlLm00JyBvciBcYCR7Y29uZmlndXJlX2FjfScuICBZb3UgbWlnaHQgd2FudAorICAgICAgICAgdG8gaW5zdGFsbCB0aGUgXGBBdXRvbWFrZScgYW5kIFxgUGVybCcgcGFja2FnZXMuICBHcmFiIHRoZW0gZnJvbQorICAgICAgICAgYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorICAgIHRvdWNoIGFjbG9jYWwubTQKKyAgICA7OworCisgIGF1dG9jb25mKikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIFxgJHtjb25maWd1cmVfYWN9Jy4gIFlvdSBtaWdodCB3YW50IHRvIGluc3RhbGwgdGhlCisgICAgICAgICBcYEF1dG9jb25mJyBhbmQgXGBHTlUgbTQnIHBhY2thZ2VzLiAgR3JhYiB0aGVtIGZyb20gYW55IEdOVQorICAgICAgICAgYXJjaGl2ZSBzaXRlLiIKKyAgICB0b3VjaCBjb25maWd1cmUKKyAgICA7OworCisgIGF1dG9oZWFkZXIqKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgXGBhY2NvbmZpZy5oJyBvciBcYCR7Y29uZmlndXJlX2FjfScuICBZb3UgbWlnaHQgd2FudAorICAgICAgICAgdG8gaW5zdGFsbCB0aGUgXGBBdXRvY29uZicgYW5kIFxgR05VIG00JyBwYWNrYWdlcy4gIEdyYWIgdGhlbQorICAgICAgICAgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgZmlsZXM9YHNlZCAtbiAncy9eWyBdKkFbQ01dX0NPTkZJR19IRUFERVIoXChbXildKlwpKS4qL1wxL3AnICR7Y29uZmlndXJlX2FjfWAKKyAgICB0ZXN0IC16ICIkZmlsZXMiICYmIGZpbGVzPSJjb25maWcuaCIKKyAgICB0b3VjaF9maWxlcz0KKyAgICBmb3IgZiBpbiAkZmlsZXM7IGRvCisgICAgICBjYXNlICRmIGluCisgICAgICAqOiopIHRvdWNoX2ZpbGVzPSIkdG91Y2hfZmlsZXMgImBlY2hvICIkZiIgfAorCQkJCSAgICAgICBzZWQgLWUgJ3MvXlteOl0qOi8vJyAtZSAncy86LiovLydgOzsKKyAgICAgICopIHRvdWNoX2ZpbGVzPSIkdG91Y2hfZmlsZXMgJGYuaW4iOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisgICAgdG91Y2ggJHRvdWNoX2ZpbGVzCisgICAgOzsKKworICBhdXRvbWFrZSopCisgICAgZWNobyAxPiYyICJcCitXQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKKyAgICAgICAgIHlvdSBtb2RpZmllZCBcYE1ha2VmaWxlLmFtJywgXGBhY2luY2x1ZGUubTQnIG9yIFxgJHtjb25maWd1cmVfYWN9Jy4KKyAgICAgICAgIFlvdSBtaWdodCB3YW50IHRvIGluc3RhbGwgdGhlIFxgQXV0b21ha2UnIGFuZCBcYFBlcmwnIHBhY2thZ2VzLgorICAgICAgICAgR3JhYiB0aGVtIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorICAgIGZpbmQgLiAtdHlwZSBmIC1uYW1lIE1ha2VmaWxlLmFtIC1wcmludCB8CisJICAgc2VkICdzL1wuYW0kLy5pbi8nIHwKKwkgICB3aGlsZSByZWFkIGY7IGRvIHRvdWNoICIkZiI7IGRvbmUKKyAgICA7OworCisgIGF1dG9tNHRlKikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzIG5lZWRlZCwgYnV0IGlzICRtc2cuCisgICAgICAgICBZb3UgbWlnaHQgaGF2ZSBtb2RpZmllZCBzb21lIGZpbGVzIHdpdGhvdXQgaGF2aW5nIHRoZQorICAgICAgICAgcHJvcGVyIHRvb2xzIGZvciBmdXJ0aGVyIGhhbmRsaW5nIHRoZW0uCisgICAgICAgICBZb3UgY2FuIGdldCBcYCQxJyBhcyBwYXJ0IG9mIFxgQXV0b2NvbmYnIGZyb20gYW55IEdOVQorICAgICAgICAgYXJjaGl2ZSBzaXRlLiIKKworICAgIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9vdXRwdXQiYAorICAgIHRlc3QgLXogIiRmaWxlIiAmJiBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gIiRzZWRfbWludXNvImAKKyAgICBpZiB0ZXN0IC1mICIkZmlsZSI7IHRoZW4KKwl0b3VjaCAkZmlsZQorICAgIGVsc2UKKwl0ZXN0IC16ICIkZmlsZSIgfHwgZXhlYyA+JGZpbGUKKwllY2hvICIjISAvYmluL3NoIgorCWVjaG8gIiMgQ3JlYXRlZCBieSBHTlUgQXV0b21ha2UgbWlzc2luZyBhcyBhIHJlcGxhY2VtZW50IG9mIgorCWVjaG8gIiMgICQgJEAiCisJZWNobyAiZXhpdCAwIgorCWNobW9kICt4ICRmaWxlCisJZXhpdCAxCisgICAgZmkKKyAgICA7OworCisgIGJpc29uKnx5YWNjKikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIGEgXGAueScgZmlsZS4gIFlvdSBtYXkgbmVlZCB0aGUgXGBCaXNvbicgcGFja2FnZQorICAgICAgICAgaW4gb3JkZXIgZm9yIHRob3NlIG1vZGlmaWNhdGlvbnMgdG8gdGFrZSBlZmZlY3QuICBZb3UgY2FuIGdldAorICAgICAgICAgXGBCaXNvbicgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgcm0gLWYgeS50YWIuYyB5LnRhYi5oCisgICAgaWYgdGVzdCAkIyAtbmUgMTsgdGhlbgorICAgICAgICBldmFsIExBU1RBUkc9IlwkeyQjfSIKKwljYXNlICRMQVNUQVJHIGluCisJKi55KQorCSAgICBTUkNGSUxFPWBlY2hvICIkTEFTVEFSRyIgfCBzZWQgJ3MveSQvYy8nYAorCSAgICBpZiB0ZXN0IC1mICIkU1JDRklMRSI7IHRoZW4KKwkgICAgICAgICBjcCAiJFNSQ0ZJTEUiIHkudGFiLmMKKwkgICAgZmkKKwkgICAgU1JDRklMRT1gZWNobyAiJExBU1RBUkciIHwgc2VkICdzL3kkL2gvJ2AKKwkgICAgaWYgdGVzdCAtZiAiJFNSQ0ZJTEUiOyB0aGVuCisJICAgICAgICAgY3AgIiRTUkNGSUxFIiB5LnRhYi5oCisJICAgIGZpCisJICA7OworCWVzYWMKKyAgICBmaQorICAgIGlmIHRlc3QgISAtZiB5LnRhYi5oOyB0aGVuCisJZWNobyA+eS50YWIuaAorICAgIGZpCisgICAgaWYgdGVzdCAhIC1mIHkudGFiLmM7IHRoZW4KKwllY2hvICdtYWluKCkgeyByZXR1cm4gMDsgfScgPnkudGFiLmMKKyAgICBmaQorICAgIDs7CisKKyAgbGV4KnxmbGV4KikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIGEgXGAubCcgZmlsZS4gIFlvdSBtYXkgbmVlZCB0aGUgXGBGbGV4JyBwYWNrYWdlCisgICAgICAgICBpbiBvcmRlciBmb3IgdGhvc2UgbW9kaWZpY2F0aW9ucyB0byB0YWtlIGVmZmVjdC4gIFlvdSBjYW4gZ2V0CisgICAgICAgICBcYEZsZXgnIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorICAgIHJtIC1mIGxleC55eS5jCisgICAgaWYgdGVzdCAkIyAtbmUgMTsgdGhlbgorICAgICAgICBldmFsIExBU1RBUkc9IlwkeyQjfSIKKwljYXNlICRMQVNUQVJHIGluCisJKi5sKQorCSAgICBTUkNGSUxFPWBlY2hvICIkTEFTVEFSRyIgfCBzZWQgJ3MvbCQvYy8nYAorCSAgICBpZiB0ZXN0IC1mICIkU1JDRklMRSI7IHRoZW4KKwkgICAgICAgICBjcCAiJFNSQ0ZJTEUiIGxleC55eS5jCisJICAgIGZpCisJICA7OworCWVzYWMKKyAgICBmaQorICAgIGlmIHRlc3QgISAtZiBsZXgueXkuYzsgdGhlbgorCWVjaG8gJ21haW4oKSB7IHJldHVybiAwOyB9JyA+bGV4Lnl5LmMKKyAgICBmaQorICAgIDs7CisKKyAgaGVscDJtYW4qKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisJIHlvdSBtb2RpZmllZCBhIGRlcGVuZGVuY3kgb2YgYSBtYW51YWwgcGFnZS4gIFlvdSBtYXkgbmVlZCB0aGUKKwkgXGBIZWxwMm1hbicgcGFja2FnZSBpbiBvcmRlciBmb3IgdGhvc2UgbW9kaWZpY2F0aW9ucyB0byB0YWtlCisJIGVmZmVjdC4gIFlvdSBjYW4gZ2V0IFxgSGVscDJtYW4nIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorCisgICAgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICIkc2VkX291dHB1dCJgCisgICAgdGVzdCAteiAiJGZpbGUiICYmIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9taW51c28iYAorICAgIGlmIHRlc3QgLWYgIiRmaWxlIjsgdGhlbgorCXRvdWNoICRmaWxlCisgICAgZWxzZQorCXRlc3QgLXogIiRmaWxlIiB8fCBleGVjID4kZmlsZQorCWVjaG8gIi5hYiBoZWxwMm1hbiBpcyByZXF1aXJlZCB0byBnZW5lcmF0ZSB0aGlzIHBhZ2UiCisJZXhpdCAkPworICAgIGZpCisgICAgOzsKKworICBtYWtlaW5mbyopCisgICAgZWNobyAxPiYyICJcCitXQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKKyAgICAgICAgIHlvdSBtb2RpZmllZCBhIFxgLnRleGknIG9yIFxgLnRleGluZm8nIGZpbGUsIG9yIGFueSBvdGhlciBmaWxlCisgICAgICAgICBpbmRpcmVjdGx5IGFmZmVjdGluZyB0aGUgYXNwZWN0IG9mIHRoZSBtYW51YWwuICBUaGUgc3B1cmlvdXMKKyAgICAgICAgIGNhbGwgbWlnaHQgYWxzbyBiZSB0aGUgY29uc2VxdWVuY2Ugb2YgdXNpbmcgYSBidWdneSBcYG1ha2UnIChBSVgsCisgICAgICAgICBEVSwgSVJJWCkuICBZb3UgbWlnaHQgd2FudCB0byBpbnN0YWxsIHRoZSBcYFRleGluZm8nIHBhY2thZ2Ugb3IKKyAgICAgICAgIHRoZSBcYEdOVSBtYWtlJyBwYWNrYWdlLiAgR3JhYiBlaXRoZXIgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgIyBUaGUgZmlsZSB0byB0b3VjaCBpcyB0aGF0IHNwZWNpZmllZCB3aXRoIC1vIC4uLgorICAgIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9vdXRwdXQiYAorICAgIHRlc3QgLXogIiRmaWxlIiAmJiBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gIiRzZWRfbWludXNvImAKKyAgICBpZiB0ZXN0IC16ICIkZmlsZSI7IHRoZW4KKyAgICAgICMgLi4uIG9yIGl0IGlzIHRoZSBvbmUgc3BlY2lmaWVkIHdpdGggQHNldGZpbGVuYW1lIC4uLgorICAgICAgaW5maWxlPWBlY2hvICIkKiIgfCBzZWQgJ3MvLiogXChbXiBdKlwpICokL1wxLydgCisgICAgICBmaWxlPWBzZWQgLW4gJworCS9eQHNldGZpbGVuYW1lL3sKKwkgIHMvLiogXChbXiBdKlwpICokL1wxLworCSAgcAorCSAgcQorCX0nICRpbmZpbGVgCisgICAgICAjIC4uLiBvciBpdCBpcyBkZXJpdmVkIGZyb20gdGhlIHNvdXJjZSBuYW1lIChkaXIvZi50ZXhpIGJlY29tZXMgZi5pbmZvKQorICAgICAgdGVzdCAteiAiJGZpbGUiICYmIGZpbGU9YGVjaG8gIiRpbmZpbGUiIHwgc2VkICdzLC4qLywsO3MsLlteLl0qJCwsJ2AuaW5mbworICAgIGZpCisgICAgIyBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgdGhlIHVzZXIgcmVhbGx5IG5lZWRzIG1ha2VpbmZvOworICAgICMgbGV0J3MgZmFpbCB3aXRob3V0IHRvdWNoaW5nIGFueXRoaW5nLgorICAgIHRlc3QgLWYgJGZpbGUgfHwgZXhpdCAxCisgICAgdG91Y2ggJGZpbGUKKyAgICA7OworCisgIHRhciopCisgICAgc2hpZnQKKworICAgICMgV2UgaGF2ZSBhbHJlYWR5IHRyaWVkIHRhciBpbiB0aGUgZ2VuZXJpYyBwYXJ0LgorICAgICMgTG9vayBmb3IgZ251dGFyL2d0YXIgYmVmb3JlIGludm9jYXRpb24gdG8gYXZvaWQgdWdseSBlcnJvcgorICAgICMgbWVzc2FnZXMuCisgICAgaWYgKGdudXRhciAtLXZlcnNpb24gPiAvZGV2L251bGwgMj4mMSk7IHRoZW4KKyAgICAgICBnbnV0YXIgIiRAIiAmJiBleGl0IDAKKyAgICBmaQorICAgIGlmIChndGFyIC0tdmVyc2lvbiA+IC9kZXYvbnVsbCAyPiYxKTsgdGhlbgorICAgICAgIGd0YXIgIiRAIiAmJiBleGl0IDAKKyAgICBmaQorICAgIGZpcnN0YXJnPSIkMSIKKyAgICBpZiBzaGlmdDsgdGhlbgorCWNhc2UgJGZpcnN0YXJnIGluCisJKm8qKQorCSAgICBmaXJzdGFyZz1gZWNobyAiJGZpcnN0YXJnIiB8IHNlZCBzL28vL2AKKwkgICAgdGFyICIkZmlyc3RhcmciICIkQCIgJiYgZXhpdCAwCisJICAgIDs7CisJZXNhYworCWNhc2UgJGZpcnN0YXJnIGluCisJKmgqKQorCSAgICBmaXJzdGFyZz1gZWNobyAiJGZpcnN0YXJnIiB8IHNlZCBzL2gvL2AKKwkgICAgdGFyICIkZmlyc3RhcmciICIkQCIgJiYgZXhpdCAwCisJICAgIDs7CisJZXNhYworICAgIGZpCisKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IEkgY2FuJ3Qgc2VlbSB0byBiZSBhYmxlIHRvIHJ1biBcYHRhcicgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLgorICAgICAgICAgWW91IG1heSB3YW50IHRvIGluc3RhbGwgR05VIHRhciBvciBGcmVlIHBheHV0aWxzLCBvciBjaGVjayB0aGUKKyAgICAgICAgIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuIgorICAgIGV4aXQgMQorICAgIDs7CisKKyAgKikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzIG5lZWRlZCwgYW5kIGlzICRtc2cuCisgICAgICAgICBZb3UgbWlnaHQgaGF2ZSBtb2RpZmllZCBzb21lIGZpbGVzIHdpdGhvdXQgaGF2aW5nIHRoZQorICAgICAgICAgcHJvcGVyIHRvb2xzIGZvciBmdXJ0aGVyIGhhbmRsaW5nIHRoZW0uICBDaGVjayB0aGUgXGBSRUFETUUnIGZpbGUsCisgICAgICAgICBpdCBvZnRlbiB0ZWxscyB5b3UgYWJvdXQgdGhlIG5lZWRlZCBwcmVyZXF1aXNpdGVzIGZvciBpbnN0YWxsaW5nCisgICAgICAgICB0aGlzIHBhY2thZ2UuICBZb3UgbWF5IGFsc28gcGVlayBhdCBhbnkgR05VIGFyY2hpdmUgc2l0ZSwgaW4gY2FzZQorICAgICAgICAgc29tZSBvdGhlciBwYWNrYWdlIHdvdWxkIGNvbnRhaW4gdGhpcyBtaXNzaW5nIFxgJDEnIHByb2dyYW0uIgorICAgIGV4aXQgMQorICAgIDs7Citlc2FjCisKK2V4aXQgMAorCisjIExvY2FsIHZhcmlhYmxlczoKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9wa2djb25maWcvTWFrZWZpbGUuYW0gYi9wa2djb25maWcvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkyOGYyNQotLS0gL2Rldi9udWxsCisrKyBiL3BrZ2NvbmZpZy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDU1IEBACisjIyMgYWxsIG9mIHRoZSBzdGFuZGFyZCBwYyBmaWxlcyB3ZSBuZWVkIHRvIGdlbmVyYXRlCitpZiBIQVZFX0NIRUNLCitDSEVDS19QQ19JID0gZ3N0cmVhbWVyLWNoZWNrLUBHU1RfTUFKT1JNSU5PUkAucGMKK0NIRUNLX1BDX1UgPSBnc3RyZWFtZXItY2hlY2stQEdTVF9NQUpPUk1JTk9SQC11bmluc3RhbGxlZC5wYworZWxzZQorQ0hFQ0tfUENfSSA9CitDSEVDS19QQ19VID0KK2VuZGlmCisKK3BjZmlsZXMgPSAJCQkJCQkJXAorCWdzdHJlYW1lci1AR1NUX01BSk9STUlOT1JALnBjCQkJCVwKKwlnc3RyZWFtZXItYmFzZS1AR1NUX01BSk9STUlOT1JALnBjCQkJXAorCSQoQ0hFQ0tfUENfSSkJCQkJCQlcCisJZ3N0cmVhbWVyLWNvbnRyb2xsZXItQEdTVF9NQUpPUk1JTk9SQC5wYwkJXAorCWdzdHJlYW1lci1kYXRhcHJvdG9jb2wtQEdTVF9NQUpPUk1JTk9SQC5wYwkJXAorCWdzdHJlYW1lci1uZXQtQEdTVF9NQUpPUk1JTk9SQC5wYworCitwY2ZpbGVzX3VuaW5zdGFsbGVkID0JCQkJCQlcCisJZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAtdW5pbnN0YWxsZWQucGMJCVwKKwlnc3RyZWFtZXItYmFzZS1AR1NUX01BSk9STUlOT1JALXVuaW5zdGFsbGVkLnBjCQlcCisJJChDSEVDS19QQ19VKQkJCQkJCVwKKwlnc3RyZWFtZXItY29udHJvbGxlci1AR1NUX01BSk9STUlOT1JALXVuaW5zdGFsbGVkLnBjCVwKKwlnc3RyZWFtZXItZGF0YXByb3RvY29sLUBHU1RfTUFKT1JNSU5PUkAtdW5pbnN0YWxsZWQucGMJXAorCWdzdHJlYW1lci1uZXQtQEdTVF9NQUpPUk1JTk9SQC11bmluc3RhbGxlZC5wYworCithbGwtbG9jYWw6ICQocGNmaWxlcykgJChwY2ZpbGVzX3VuaW5zdGFsbGVkKQorCitjcF92ZXJib3NlID0gJChjcF92ZXJib3NlXyQoVikpCitjcF92ZXJib3NlXyA9ICQoY3BfdmVyYm9zZV8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2NwX3ZlcmJvc2VfMCA9IEBlY2hvICIgIENQICAgICAkQCI7CisKKyMjIyBob3cgdG8gZ2VuZXJhdGUgcGMgZmlsZXMKKyUtQEdTVF9NQUpPUk1JTk9SQC5wYzogJS5wYworCSQoY3BfdmVyYm9zZV8wKWNwICQ8ICRACislLUBHU1RfTUFKT1JNSU5PUkAtdW5pbnN0YWxsZWQucGM6ICUtdW5pbnN0YWxsZWQucGMKKwkkKGNwX3ZlcmJvc2VfMCljcCAkPCAkQAorCitwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCitwa2djb25maWdfREFUQSA9ICQocGNmaWxlcykKKworRVhUUkFfRElTVCA9CQkJCQkJCVwKKwlnc3RyZWFtZXIucGMuaW4JCQkJCQlcCisJZ3N0cmVhbWVyLXVuaW5zdGFsbGVkLnBjLmluCQkJCVwKKwlnc3RyZWFtZXItYmFzZS5wYy5pbgkJCQkJXAorCWdzdHJlYW1lci1iYXNlLXVuaW5zdGFsbGVkLnBjLmluCQkJXAorCWdzdHJlYW1lci1jaGVjay5wYy5pbgkJCQkJXAorCWdzdHJlYW1lci1jaGVjay11bmluc3RhbGxlZC5wYy5pbgkJCVwKKwlnc3RyZWFtZXItY29udHJvbGxlci5wYy5pbgkJCQlcCisJZ3N0cmVhbWVyLWNvbnRyb2xsZXItdW5pbnN0YWxsZWQucGMuaW4JCQlcCisJZ3N0cmVhbWVyLWRhdGFwcm90b2NvbC5wYy5pbgkJCQlcCisJZ3N0cmVhbWVyLWRhdGFwcm90b2NvbC11bmluc3RhbGxlZC5wYy5pbgkJXAorCWdzdHJlYW1lci1uZXQucGMuaW4JCQkJCVwKKwlnc3RyZWFtZXItbmV0LXVuaW5zdGFsbGVkLnBjLmluCisKK0NMRUFORklMRVMgPSAkKHBjZmlsZXMpICQocGNmaWxlc191bmluc3RhbGxlZCkKZGlmZiAtLWdpdCBhL3BrZ2NvbmZpZy9NYWtlZmlsZS5pbiBiL3BrZ2NvbmZpZy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzZmZDkxCi0tLSAvZGV2L251bGwKKysrIGIvcGtnY29uZmlnL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNjc3IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSBwa2djb25maWcKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbiBcCisJJChzcmNkaXIpL2dzdHJlYW1lci1iYXNlLXVuaW5zdGFsbGVkLnBjLmluIFwKKwkkKHNyY2RpcikvZ3N0cmVhbWVyLWJhc2UucGMuaW4gXAorCSQoc3JjZGlyKS9nc3RyZWFtZXItY2hlY2stdW5pbnN0YWxsZWQucGMuaW4gXAorCSQoc3JjZGlyKS9nc3RyZWFtZXItY2hlY2sucGMuaW4gXAorCSQoc3JjZGlyKS9nc3RyZWFtZXItY29udHJvbGxlci11bmluc3RhbGxlZC5wYy5pbiBcCisJJChzcmNkaXIpL2dzdHJlYW1lci1jb250cm9sbGVyLnBjLmluIFwKKwkkKHNyY2RpcikvZ3N0cmVhbWVyLWRhdGFwcm90b2NvbC11bmluc3RhbGxlZC5wYy5pbiBcCisJJChzcmNkaXIpL2dzdHJlYW1lci1kYXRhcHJvdG9jb2wucGMuaW4gXAorCSQoc3JjZGlyKS9nc3RyZWFtZXItbmV0LXVuaW5zdGFsbGVkLnBjLmluIFwKKwkkKHNyY2RpcikvZ3N0cmVhbWVyLW5ldC5wYy5pbiBcCisJJChzcmNkaXIpL2dzdHJlYW1lci11bmluc3RhbGxlZC5wYy5pbiBcCisJJChzcmNkaXIpL2dzdHJlYW1lci5wYy5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXB5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtc2NydWItaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0gZ3N0cmVhbWVyLnBjIGdzdHJlYW1lci11bmluc3RhbGxlZC5wYyBcCisJZ3N0cmVhbWVyLWJhc2UucGMgZ3N0cmVhbWVyLWJhc2UtdW5pbnN0YWxsZWQucGMgXAorCWdzdHJlYW1lci1jaGVjay5wYyBnc3RyZWFtZXItY2hlY2stdW5pbnN0YWxsZWQucGMgXAorCWdzdHJlYW1lci1jb250cm9sbGVyLnBjIGdzdHJlYW1lci1jb250cm9sbGVyLXVuaW5zdGFsbGVkLnBjIFwKKwlnc3RyZWFtZXItZGF0YXByb3RvY29sLnBjIFwKKwlnc3RyZWFtZXItZGF0YXByb3RvY29sLXVuaW5zdGFsbGVkLnBjIGdzdHJlYW1lci1uZXQucGMgXAorCWdzdHJlYW1lci1uZXQtdW5pbnN0YWxsZWQucGMKK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOXyQoVikpCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF8kKFYpKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X2F0XzAgPSBACitTT1VSQ0VTID0KK0RJU1RfU09VUkNFUyA9CithbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKK2FtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCisgICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKyAgICAqKSBmPSQkcDs7IFwKKyAgZXNhYzsKK2FtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19pbnN0YWxsX21heCA9IDQwCithbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAorICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCithbV9fbm9iYXNlX3N0cmlwID0gXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKK2FtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKKyAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKKyAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAorICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKKyAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKKyAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCithbV9fYmFzZV9saXN0ID0gXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQocGtnY29uZmlnZGlyKSIKK0RBVEEgPSAkKHBrZ2NvbmZpZ19EQVRBKQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBUyA9IEBBU0AKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAorQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAorQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKK0NDID0gQENDQAorQ0NBUyA9IEBDQ0FTQAorQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACitDQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDSEVDS19NQUpPUl9WRVJTSU9OID0gQENIRUNLX01BSk9SX1ZFUlNJT05ACitDSEVDS19NSUNST19WRVJTSU9OID0gQENIRUNLX01JQ1JPX1ZFUlNJT05ACitDSEVDS19NSU5PUl9WRVJTSU9OID0gQENIRUNLX01JTk9SX1ZFUlNJT05ACitDSEVDS19WRVJTSU9OID0gQENIRUNLX1ZFUlNJT05ACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEFESVIgPSBAREFUQURJUkAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRU5BQkxFX1NVQlVOSVQgPSBARU5BQkxFX1NVQlVOSVRACitFUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZGTEFHUyA9IEBGRkxBR1NACitGR1JFUCA9IEBGR1JFUEAKK0ZMRVhfUEFUSCA9IEBGTEVYX1BBVEhACitHQ09WID0gQEdDT1ZACitHQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKK0dDT1ZfTElCUyA9IEBHQ09WX0xJQlNACitHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAorR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKK0dMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAorR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKK0dMSUJfT05MWV9DRkxBR1MgPSBAR0xJQl9PTkxZX0NGTEFHU0AKK0dMSUJfT05MWV9MSUJTID0gQEdMSUJfT05MWV9MSUJTQAorR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACitHTElCX1JFUSA9IEBHTElCX1JFUUAKK0dNUF9MSUJTID0gQEdNUF9MSUJTQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHUkVQID0gQEdSRVBACitHU0xfTElCUyA9IEBHU0xfTElCU0AKK0dTVF9BR0UgPSBAR1NUX0FHRUAKK0dTVF9BTExfQ0ZMQUdTID0gQEdTVF9BTExfQ0ZMQUdTQAorR1NUX0FMTF9DWFhGTEFHUyA9IEBHU1RfQUxMX0NYWEZMQUdTQAorR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKK0dTVF9BTExfTElCUyA9IEBHU1RfQUxMX0xJQlNACitHU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKK0dTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9ERUZJTkVACitHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkVACitHU1RfRElTQUJMRV9ORVRfREVGSU5FID0gQEdTVF9ESVNBQkxFX05FVF9ERUZJTkVACitHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAorR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKK0dTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKK0dTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACitHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfVFJBQ0VfREVGSU5FQAorR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAorR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAorR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTU19ERUZJTkUgPSBAR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTU19ERUZJTkVACitHU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKK0dTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAorR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKK0dTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAorR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACitHU1RfTUFKT1JNSU5PUiA9IEBHU1RfTUFKT1JNSU5PUkAKK0dTVF9PQkpfQ0ZMQUdTID0gQEdTVF9PQkpfQ0ZMQUdTQAorR1NUX09CSl9DWFhGTEFHUyA9IEBHU1RfT0JKX0NYWEZMQUdTQAorR1NUX09CSl9MSUJTID0gQEdTVF9PQkpfTElCU0AKK0dTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAorR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAorR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAorR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKK0dTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKK0dTVF9QS0dfREVQUyA9IEBHU1RfUEtHX0RFUFNACitHU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAorR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAorR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1BPSU5URVJfRk9STUFUX0RFRklORUAKK0dTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORSA9IEBHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkVACitHU1RfUkVHSVNUUllfRE9DX1RZUEVTID0gQEdTVF9SRUdJU1RSWV9ET0NfVFlQRVNACitHU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAorR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FID0gQEdTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OX0RFRklORUAKK0dUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACitIQVZFX0RPQ0JPT0sySFRNTCA9IEBIQVZFX0RPQ0JPT0sySFRNTEAKK0hBVkVfRE9DQk9PSzJQUyA9IEBIQVZFX0RPQ0JPT0syUFNACitIQVZFX0RWSVBTID0gQEhBVkVfRFZJUFNACitIQVZFX0VQU1RPUERGID0gQEhBVkVfRVBTVE9QREZACitIQVZFX0ZJRzJERVYgPSBASEFWRV9GSUcyREVWQAorSEFWRV9HTVAgPSBASEFWRV9HTVBACitIQVZFX0dTTCA9IEBIQVZFX0dTTEAKK0hBVkVfSkFERVRFWCA9IEBIQVZFX0pBREVURVhACitIQVZFX1BOR1RPUE5NID0gQEhBVkVfUE5HVE9QTk1ACitIQVZFX1BOTVRPUFMgPSBASEFWRV9QTk1UT1BTQAorSEFWRV9QUzJQREYgPSBASEFWRV9QUzJQREZACitIQVZFX1hNTExJTlQgPSBASEFWRV9YTUxMSU5UQAorSE9TVF9DUFUgPSBASE9TVF9DUFVACitIVE1MX0RJUiA9IEBIVE1MX0RJUkAKK0lORVRfQVRPTl9MSUJTID0gQElORVRfQVRPTl9MSUJTQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAorSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAorSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAorSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACitJTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAorSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAorSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkRJUiA9IEBMSUJESVJACitMSUJJQ09OViA9IEBMSUJJQ09OVkAKK0xJQklOVEwgPSBATElCSU5UTEAKK0xJQk0gPSBATElCTUAKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xPQ0FMRURJUiA9IEBMT0NBTEVESVJACitMVExJQklDT05WID0gQExUTElCSUNPTlZACitMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BSU5UID0gQE1BSU5UQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAorUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKK1BBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACitQQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKK1BBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMX1BBVEggPSBAUEVSTF9QQVRIQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUExVR0lORElSID0gQFBMVUdJTkRJUkAKK1BPU1VCID0gQFBPU1VCQAorUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACitQWVRIT04gPSBAUFlUSE9OQAorUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKK1BZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACitQWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACitQWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKK1ZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKK1ZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1dBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAorV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAorWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKK1hTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK2x0X0VDSE8gPSBAbHRfRUNIT0AKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKK3BrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACitwbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKK3B5dGhvbmRpciA9IEBweXRob25kaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK0BIQVZFX0NIRUNLX0ZBTFNFQENIRUNLX1BDX0kgPSAKKworIyMjIGFsbCBvZiB0aGUgc3RhbmRhcmQgcGMgZmlsZXMgd2UgbmVlZCB0byBnZW5lcmF0ZQorQEhBVkVfQ0hFQ0tfVFJVRUBDSEVDS19QQ19JID0gZ3N0cmVhbWVyLWNoZWNrLUBHU1RfTUFKT1JNSU5PUkAucGMKK0BIQVZFX0NIRUNLX0ZBTFNFQENIRUNLX1BDX1UgPSAKK0BIQVZFX0NIRUNLX1RSVUVAQ0hFQ0tfUENfVSA9IGdzdHJlYW1lci1jaGVjay1AR1NUX01BSk9STUlOT1JALXVuaW5zdGFsbGVkLnBjCitwY2ZpbGVzID0gXAorCWdzdHJlYW1lci1AR1NUX01BSk9STUlOT1JALnBjCQkJCVwKKwlnc3RyZWFtZXItYmFzZS1AR1NUX01BSk9STUlOT1JALnBjCQkJXAorCSQoQ0hFQ0tfUENfSSkJCQkJCQlcCisJZ3N0cmVhbWVyLWNvbnRyb2xsZXItQEdTVF9NQUpPUk1JTk9SQC5wYwkJXAorCWdzdHJlYW1lci1kYXRhcHJvdG9jb2wtQEdTVF9NQUpPUk1JTk9SQC5wYwkJXAorCWdzdHJlYW1lci1uZXQtQEdTVF9NQUpPUk1JTk9SQC5wYworCitwY2ZpbGVzX3VuaW5zdGFsbGVkID0gXAorCWdzdHJlYW1lci1AR1NUX01BSk9STUlOT1JALXVuaW5zdGFsbGVkLnBjCQlcCisJZ3N0cmVhbWVyLWJhc2UtQEdTVF9NQUpPUk1JTk9SQC11bmluc3RhbGxlZC5wYwkJXAorCSQoQ0hFQ0tfUENfVSkJCQkJCQlcCisJZ3N0cmVhbWVyLWNvbnRyb2xsZXItQEdTVF9NQUpPUk1JTk9SQC11bmluc3RhbGxlZC5wYwlcCisJZ3N0cmVhbWVyLWRhdGFwcm90b2NvbC1AR1NUX01BSk9STUlOT1JALXVuaW5zdGFsbGVkLnBjCVwKKwlnc3RyZWFtZXItbmV0LUBHU1RfTUFKT1JNSU5PUkAtdW5pbnN0YWxsZWQucGMKKworY3BfdmVyYm9zZSA9ICQoY3BfdmVyYm9zZV8kKFYpKQorY3BfdmVyYm9zZV8gPSAkKGNwX3ZlcmJvc2VfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCitjcF92ZXJib3NlXzAgPSBAZWNobyAiICBDUCAgICAgJEAiOworcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworcGtnY29uZmlnX0RBVEEgPSAkKHBjZmlsZXMpCitFWFRSQV9ESVNUID0gXAorCWdzdHJlYW1lci5wYy5pbgkJCQkJCVwKKwlnc3RyZWFtZXItdW5pbnN0YWxsZWQucGMuaW4JCQkJXAorCWdzdHJlYW1lci1iYXNlLnBjLmluCQkJCQlcCisJZ3N0cmVhbWVyLWJhc2UtdW5pbnN0YWxsZWQucGMuaW4JCQlcCisJZ3N0cmVhbWVyLWNoZWNrLnBjLmluCQkJCQlcCisJZ3N0cmVhbWVyLWNoZWNrLXVuaW5zdGFsbGVkLnBjLmluCQkJXAorCWdzdHJlYW1lci1jb250cm9sbGVyLnBjLmluCQkJCVwKKwlnc3RyZWFtZXItY29udHJvbGxlci11bmluc3RhbGxlZC5wYy5pbgkJCVwKKwlnc3RyZWFtZXItZGF0YXByb3RvY29sLnBjLmluCQkJCVwKKwlnc3RyZWFtZXItZGF0YXByb3RvY29sLXVuaW5zdGFsbGVkLnBjLmluCQlcCisJZ3N0cmVhbWVyLW5ldC5wYy5pbgkJCQkJXAorCWdzdHJlYW1lci1uZXQtdW5pbnN0YWxsZWQucGMuaW4KKworQ0xFQU5GSUxFUyA9ICQocGNmaWxlcykgJChwY2ZpbGVzX3VuaW5zdGFsbGVkKQorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgcGtnY29uZmlnL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251IHBrZ2NvbmZpZy9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKK2dzdHJlYW1lci5wYzogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL2dzdHJlYW1lci5wYy5pbgorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRACitnc3RyZWFtZXItdW5pbnN0YWxsZWQucGM6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9nc3RyZWFtZXItdW5pbnN0YWxsZWQucGMuaW4KKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQAorZ3N0cmVhbWVyLWJhc2UucGM6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9nc3RyZWFtZXItYmFzZS5wYy5pbgorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRACitnc3RyZWFtZXItYmFzZS11bmluc3RhbGxlZC5wYzogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL2dzdHJlYW1lci1iYXNlLXVuaW5zdGFsbGVkLnBjLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKK2dzdHJlYW1lci1jaGVjay5wYzogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL2dzdHJlYW1lci1jaGVjay5wYy5pbgorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRACitnc3RyZWFtZXItY2hlY2stdW5pbnN0YWxsZWQucGM6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9nc3RyZWFtZXItY2hlY2stdW5pbnN0YWxsZWQucGMuaW4KKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQAorZ3N0cmVhbWVyLWNvbnRyb2xsZXIucGM6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9nc3RyZWFtZXItY29udHJvbGxlci5wYy5pbgorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRACitnc3RyZWFtZXItY29udHJvbGxlci11bmluc3RhbGxlZC5wYzogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL2dzdHJlYW1lci1jb250cm9sbGVyLXVuaW5zdGFsbGVkLnBjLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKK2dzdHJlYW1lci1kYXRhcHJvdG9jb2wucGM6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9nc3RyZWFtZXItZGF0YXByb3RvY29sLnBjLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKK2dzdHJlYW1lci1kYXRhcHJvdG9jb2wtdW5pbnN0YWxsZWQucGM6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9nc3RyZWFtZXItZGF0YXByb3RvY29sLXVuaW5zdGFsbGVkLnBjLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKK2dzdHJlYW1lci1uZXQucGM6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9nc3RyZWFtZXItbmV0LnBjLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKK2dzdHJlYW1lci1uZXQtdW5pbnN0YWxsZWQucGM6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9nc3RyZWFtZXItbmV0LXVuaW5zdGFsbGVkLnBjLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKK2luc3RhbGwtcGtnY29uZmlnREFUQTogJChwa2djb25maWdfREFUQSkKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKHBrZ2NvbmZpZ2RpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikiCisJQGxpc3Q9JyQocGtnY29uZmlnX0RBVEEpJzsgdGVzdCAtbiAiJChwa2djb25maWdkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKHBrZ2NvbmZpZ2RpciknIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikiIHx8IGV4aXQgJCQ/OyBcCisJZG9uZQorCit1bmluc3RhbGwtcGtnY29uZmlnREFUQToKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKHBrZ2NvbmZpZ19EQVRBKSc7IHRlc3QgLW4gIiQocGtnY29uZmlnZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAorCXRlc3QgLW4gIiQkZmlsZXMiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiAoIGNkICckKERFU1RESVIpJChwa2djb25maWdkaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQocGtnY29uZmlnZGlyKSIgJiYgcm0gLWYgJCRmaWxlcwordGFnczogVEFHUworVEFHUzoKKworY3RhZ3M6IENUQUdTCitDVEFHUzoKKworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKERBVEEpIGFsbC1sb2NhbAoraW5zdGFsbGRpcnM6CisJZm9yIGRpciBpbiAiJChERVNURElSKSQocGtnY29uZmlnZGlyKSI7IGRvIFwKKwkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKKwlkb25lCitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChDTEVBTkZJTEVTKQorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtcGtnY29uZmlnREFUQQorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1wa2djb25maWdEQVRBCisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBhbGwgYWxsLWFtIGFsbC1sb2NhbCBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJ0b29sIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBcCisJaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCisJaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcGtnY29uZmlnREFUQSBpbnN0YWxsLXBzIFwKKwlpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBcCisJaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIFwKKwlwcyBwcy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1wa2djb25maWdEQVRBCisKKworYWxsLWxvY2FsOiAkKHBjZmlsZXMpICQocGNmaWxlc191bmluc3RhbGxlZCkKKworIyMjIGhvdyB0byBnZW5lcmF0ZSBwYyBmaWxlcworJS1AR1NUX01BSk9STUlOT1JALnBjOiAlLnBjCisJJChjcF92ZXJib3NlXzApY3AgJDwgJEAKKyUtQEdTVF9NQUpPUk1JTk9SQC11bmluc3RhbGxlZC5wYzogJS11bmluc3RhbGxlZC5wYworCSQoY3BfdmVyYm9zZV8wKWNwICQ8ICRACisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3BrZ2NvbmZpZy9nc3RyZWFtZXItYmFzZS11bmluc3RhbGxlZC5wYy5pbiBiL3BrZ2NvbmZpZy9nc3RyZWFtZXItYmFzZS11bmluc3RhbGxlZC5wYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmNmMGVjCi0tLSAvZGV2L251bGwKKysrIGIvcGtnY29uZmlnL2dzdHJlYW1lci1iYXNlLXVuaW5zdGFsbGVkLnBjLmluCkBAIC0wLDAgKzEsMTUgQEAKKyMgdGhlIHN0YW5kYXJkIHZhcmlhYmxlcyBkb24ndCBtYWtlIHNlbnNlIGZvciBhbiB1bmluc3RhbGxlZCBjb3B5CitwcmVmaXg9CitleGVjX3ByZWZpeD0KK2xpYmRpcj1AYWJzX3RvcF9idWlsZGRpckAvbGlicy9nc3QvYmFzZQoraW5jbHVkZWRpcj0KK2dpcmRpcj1AYWJzX3RvcF9idWlsZGRpckAvbGlicy9nc3QvYmFzZQordHlwZWxpYmRpcj1AYWJzX3RvcF9idWlsZGRpckAvbGlicy9nc3QvYmFzZQorCitOYW1lOiBHU3RyZWFtZXIgYmFzZSBjbGFzc2VzLCB1bmluc3RhbGxlZAorRGVzY3JpcHRpb246IEJhc2UgY2xhc3NlcyBmb3IgR1N0cmVhbWVyIGVsZW1lbnRzLCBOb3QgSW5zdGFsbGVkCitSZXF1aXJlczogZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAgPSBAVkVSU0lPTkAKK1ZlcnNpb246IEBWRVJTSU9OQAorCitMaWJzOiBAYWJzX3RvcF9idWlsZGRpckAvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEKK0NmbGFnczogLUlAYWJzX3RvcF9zcmNkaXJAL2xpYnMgLUlAYWJzX3RvcF9idWlsZGRpckAvbGlicwpkaWZmIC0tZ2l0IGEvcGtnY29uZmlnL2dzdHJlYW1lci1iYXNlLnBjLmluIGIvcGtnY29uZmlnL2dzdHJlYW1lci1iYXNlLnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NDcxYTgKLS0tIC9kZXYvbnVsbAorKysgYi9wa2djb25maWcvZ3N0cmVhbWVyLWJhc2UucGMuaW4KQEAgLTAsMCArMSwxNSBAQAorcHJlZml4PUBwcmVmaXhACitleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACitsaWJkaXI9QGxpYmRpckAKK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJAL2dzdHJlYW1lci1AR1NUX01BSk9STUlOT1JACitkYXRhcm9vdGRpcj0ke3ByZWZpeH0vc2hhcmUKK2RhdGFkaXI9JHtkYXRhcm9vdGRpcn0KK2dpcmRpcj0ke2RhdGFkaXJ9L2dpci0xLjAKK3R5cGVsaWJkaXI9JHtsaWJkaXJ9L2dpcmVwb3NpdG9yeS0xLjAKKworTmFtZTogR1N0cmVhbWVyIGJhc2UgY2xhc3NlcworRGVzY3JpcHRpb246IEJhc2UgY2xhc3NlcyBmb3IgR1N0cmVhbWVyIGVsZW1lbnRzCitSZXF1aXJlczogZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAKK1ZlcnNpb246IEBWRVJTSU9OQAorTGliczogLUwke2xpYmRpcn0gLWxnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAKK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CmRpZmYgLS1naXQgYS9wa2djb25maWcvZ3N0cmVhbWVyLWNoZWNrLXVuaW5zdGFsbGVkLnBjLmluIGIvcGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay11bmluc3RhbGxlZC5wYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTYyOWNkCi0tLSAvZGV2L251bGwKKysrIGIvcGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay11bmluc3RhbGxlZC5wYy5pbgpAQCAtMCwwICsxLDE1IEBACisjIHRoZSBzdGFuZGFyZCB2YXJpYWJsZXMgZG9uJ3QgbWFrZSBzZW5zZSBmb3IgYW4gdW5pbnN0YWxsZWQgY29weQorcHJlZml4PQorZXhlY19wcmVmaXg9CitsaWJkaXI9QGFic190b3BfYnVpbGRkaXJAL2xpYnMvZ3N0L2NoZWNrCitpbmNsdWRlZGlyPQorZ2lyZGlyPUBhYnNfdG9wX2J1aWxkZGlyQC9saWJzL2dzdC9jaGVjawordHlwZWxpYmRpcj1AYWJzX3RvcF9idWlsZGRpckAvbGlicy9nc3QvY2hlY2sKKworTmFtZTogR1N0cmVhbWVyIGNoZWNrIHVuaXQgdGVzdGluZywgdW5pbnN0YWxsZWQKK0Rlc2NyaXB0aW9uOiBVbml0IHRlc3RpbmcgaGVscGVyIGxpYnJhcnkgZm9yIEdTdHJlYW1lciBtb2R1bGVzLCBOb3QgSW5zdGFsbGVkCitSZXF1aXJlczogZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAgPSBAVkVSU0lPTkAKK1ZlcnNpb246IEBWRVJTSU9OQAorCitMaWJzOiBAYWJzX3RvcF9idWlsZGRpckAvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9NQUpPUk1JTk9SQC5sYSBATElCTUAKK0NmbGFnczogLUlAYWJzX3RvcF9zcmNkaXJAL2xpYnMgLUlAYWJzX3RvcF9idWlsZGRpckAvbGlicwpkaWZmIC0tZ2l0IGEvcGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay5wYy5pbiBiL3BrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2sucGMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMyYTJjMQotLS0gL2Rldi9udWxsCisrKyBiL3BrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2sucGMuaW4KQEAgLTAsMCArMSwxNSBAQAorcHJlZml4PUBwcmVmaXhACitleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACitsaWJkaXI9QGxpYmRpckAKK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJAL2dzdHJlYW1lci1AR1NUX01BSk9STUlOT1JACitkYXRhcm9vdGRpcj0ke3ByZWZpeH0vc2hhcmUKK2RhdGFkaXI9JHtkYXRhcm9vdGRpcn0KK2dpcmRpcj0ke2RhdGFkaXJ9L2dpci0xLjAKK3R5cGVsaWJkaXI9JHtsaWJkaXJ9L2dpcmVwb3NpdG9yeS0xLjAKKworTmFtZTogR1N0cmVhbWVyIGNoZWNrIHVuaXQgdGVzdGluZworRGVzY3JpcHRpb246IFVuaXQgdGVzdGluZyBoZWxwZXIgbGlicmFyeSBmb3IgR1N0cmVhbWVyIG1vZHVsZXMKK1JlcXVpcmVzOiBnc3RyZWFtZXItQEdTVF9NQUpPUk1JTk9SQAorVmVyc2lvbjogQFZFUlNJT05ACitMaWJzOiAtTCR7bGliZGlyfSAtbGdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAgQExJQk1ACitDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQpkaWZmIC0tZ2l0IGEvcGtnY29uZmlnL2dzdHJlYW1lci1jb250cm9sbGVyLXVuaW5zdGFsbGVkLnBjLmluIGIvcGtnY29uZmlnL2dzdHJlYW1lci1jb250cm9sbGVyLXVuaW5zdGFsbGVkLnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYjRmODgKLS0tIC9kZXYvbnVsbAorKysgYi9wa2djb25maWcvZ3N0cmVhbWVyLWNvbnRyb2xsZXItdW5pbnN0YWxsZWQucGMuaW4KQEAgLTAsMCArMSwxNSBAQAorIyB0aGUgc3RhbmRhcmQgdmFyaWFibGVzIGRvbid0IG1ha2Ugc2Vuc2UgZm9yIGFuIHVuaW5zdGFsbGVkIGNvcHkKK3ByZWZpeD0KK2V4ZWNfcHJlZml4PQorbGliZGlyPUBhYnNfdG9wX2J1aWxkZGlyQC9saWJzL2dzdC9jb250cm9sbGVyCitpbmNsdWRlZGlyPQorZ2lyZGlyPUBhYnNfdG9wX2J1aWxkZGlyQC9saWJzL2dzdC9jb250cm9sbGVyCit0eXBlbGliZGlyPUBhYnNfdG9wX2J1aWxkZGlyQC9saWJzL2dzdC9jb250cm9sbGVyCisKK05hbWU6IEdTdHJlYW1lciBjb250cm9sbGVyLCB1bmluc3RhbGxlZAorRGVzY3JpcHRpb246IER5bmFtaWMgcGFyYW1ldGVyIGNvbnRyb2wgZm9yIEdTdHJlYW1lciBlbGVtZW50cywgTm90IEluc3RhbGxlZAorUmVxdWlyZXM6IGdzdHJlYW1lci1AR1NUX01BSk9STUlOT1JAID0gQFZFUlNJT05ACitWZXJzaW9uOiBAVkVSU0lPTkAKKworTGliczogQGFic190b3BfYnVpbGRkaXJAL2xpYnMvZ3N0L2NvbnRyb2xsZXIvbGliZ3N0Y29udHJvbGxlci1AR1NUX01BSk9STUlOT1JALmxhCitDZmxhZ3M6IC1JQGFic190b3Bfc3JjZGlyQC9saWJzIC1JQGFic190b3BfYnVpbGRkaXJAL2xpYnMKZGlmZiAtLWdpdCBhL3BrZ2NvbmZpZy9nc3RyZWFtZXItY29udHJvbGxlci5wYy5pbiBiL3BrZ2NvbmZpZy9nc3RyZWFtZXItY29udHJvbGxlci5wYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDE5N2FiCi0tLSAvZGV2L251bGwKKysrIGIvcGtnY29uZmlnL2dzdHJlYW1lci1jb250cm9sbGVyLnBjLmluCkBAIC0wLDAgKzEsMTUgQEAKK3ByZWZpeD1AcHJlZml4QAorZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorbGliZGlyPUBsaWJkaXJACitpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQC9nc3RyZWFtZXItQEdTVF9NQUpPUk1JTk9SQAorZGF0YXJvb3RkaXI9JHtwcmVmaXh9L3NoYXJlCitkYXRhZGlyPSR7ZGF0YXJvb3RkaXJ9CitnaXJkaXI9JHtkYXRhZGlyfS9naXItMS4wCit0eXBlbGliZGlyPSR7bGliZGlyfS9naXJlcG9zaXRvcnktMS4wCisKK05hbWU6IEdTdHJlYW1lciBjb250cm9sbGVyCitEZXNjcmlwdGlvbjogRHluYW1pYyBwYXJhbWV0ZXIgY29udHJvbCBmb3IgR1N0cmVhbWVyIGVsZW1lbnRzCitSZXF1aXJlczogZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAKK1ZlcnNpb246IEBWRVJTSU9OQAorTGliczogLUwke2xpYmRpcn0gLWxnc3Rjb250cm9sbGVyLUBHU1RfTUFKT1JNSU5PUkAKK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CmRpZmYgLS1naXQgYS9wa2djb25maWcvZ3N0cmVhbWVyLWRhdGFwcm90b2NvbC11bmluc3RhbGxlZC5wYy5pbiBiL3BrZ2NvbmZpZy9nc3RyZWFtZXItZGF0YXByb3RvY29sLXVuaW5zdGFsbGVkLnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZjg1NmEKLS0tIC9kZXYvbnVsbAorKysgYi9wa2djb25maWcvZ3N0cmVhbWVyLWRhdGFwcm90b2NvbC11bmluc3RhbGxlZC5wYy5pbgpAQCAtMCwwICsxLDE1IEBACisjIHRoZSBzdGFuZGFyZCB2YXJpYWJsZXMgZG9uJ3QgbWFrZSBzZW5zZSBmb3IgYW4gdW5pbnN0YWxsZWQgY29weQorcHJlZml4PQorZXhlY19wcmVmaXg9CitsaWJkaXI9QGFic190b3BfYnVpbGRkaXJAL2xpYnMvZ3N0L2RhdGFwcm90b2NvbAoraW5jbHVkZWRpcj0KK2dpcmRpcj1AYWJzX3RvcF9idWlsZGRpckAvbGlicy9nc3QvZGF0YXByb3RvY29sCit0eXBlbGliZGlyPUBhYnNfdG9wX2J1aWxkZGlyQC9saWJzL2dzdC9kYXRhcHJvdG9jb2wKKworTmFtZTogR1N0cmVhbWVyIGRhdGEgcHJvdG9jb2wgbGlicmFyeSwgdW5pbnN0YWxsZWQKK0Rlc2NyaXB0aW9uOiBEYXRhIHByb3RvY29sIGZvciBwbHVnLWlucywgTm90IEluc3RhbGxlZAorUmVxdWlyZXM6IGdzdHJlYW1lci1AR1NUX01BSk9STUlOT1JAID0gQFZFUlNJT05ACitWZXJzaW9uOiBAVkVSU0lPTkAKKworTGliczogQGFic190b3BfYnVpbGRkaXJAL2xpYnMvZ3N0L2RhdGFwcm90b2NvbC9saWJnc3RkYXRhcHJvdG9jb2wtQEdTVF9NQUpPUk1JTk9SQC5sYQorQ2ZsYWdzOiAtSUBhYnNfdG9wX3NyY2RpckAvbGlicyAtSUBhYnNfdG9wX2J1aWxkZGlyQC9saWJzCmRpZmYgLS1naXQgYS9wa2djb25maWcvZ3N0cmVhbWVyLWRhdGFwcm90b2NvbC5wYy5pbiBiL3BrZ2NvbmZpZy9nc3RyZWFtZXItZGF0YXByb3RvY29sLnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNmI3ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9wa2djb25maWcvZ3N0cmVhbWVyLWRhdGFwcm90b2NvbC5wYy5pbgpAQCAtMCwwICsxLDE1IEBACitwcmVmaXg9QHByZWZpeEAKK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKK2xpYmRpcj1AbGliZGlyQAoraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAvZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAKK2RhdGFyb290ZGlyPSR7cHJlZml4fS9zaGFyZQorZGF0YWRpcj0ke2RhdGFyb290ZGlyfQorZ2lyZGlyPSR7ZGF0YWRpcn0vZ2lyLTEuMAordHlwZWxpYmRpcj0ke2xpYmRpcn0vZ2lyZXBvc2l0b3J5LTEuMAorCitOYW1lOiBHU3RyZWFtZXIgZGF0YSBwcm90b2NvbCBsaWJyYXJ5CitEZXNjcmlwdGlvbjogRGF0YSBwcm90b2NvbCBmb3IgcGx1Zy1pbnMKK1JlcXVpcmVzOiBnc3RyZWFtZXItQEdTVF9NQUpPUk1JTk9SQAorVmVyc2lvbjogQFZFUlNJT05ACitMaWJzOiAtTCR7bGliZGlyfSAtbGdzdGRhdGFwcm90b2NvbC1AR1NUX01BSk9STUlOT1JACitDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQpkaWZmIC0tZ2l0IGEvcGtnY29uZmlnL2dzdHJlYW1lci1uZXQtdW5pbnN0YWxsZWQucGMuaW4gYi9wa2djb25maWcvZ3N0cmVhbWVyLW5ldC11bmluc3RhbGxlZC5wYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGExNjkxCi0tLSAvZGV2L251bGwKKysrIGIvcGtnY29uZmlnL2dzdHJlYW1lci1uZXQtdW5pbnN0YWxsZWQucGMuaW4KQEAgLTAsMCArMSwxNSBAQAorIyB0aGUgc3RhbmRhcmQgdmFyaWFibGVzIGRvbid0IG1ha2Ugc2Vuc2UgZm9yIGFuIHVuaW5zdGFsbGVkIGNvcHkKK3ByZWZpeD0KK2V4ZWNfcHJlZml4PQorbGliZGlyPUBhYnNfdG9wX2J1aWxkZGlyQC9saWJzL2dzdC9uZXQKK2luY2x1ZGVkaXI9CitnaXJkaXI9QGFic190b3BfYnVpbGRkaXJAL2xpYnMvZ3N0L25ldAordHlwZWxpYmRpcj1AYWJzX3RvcF9idWlsZGRpckAvbGlicy9nc3QvbmV0CisKK05hbWU6IEdTdHJlYW1lciBuZXR3b3JraW5nIGxpYnJhcnksIHVuaW5zdGFsbGVkCitEZXNjcmlwdGlvbjogTmV0d29yay1lbmFibGVkIEdTdHJlYW1lciBwbHVnLWlucyBhbmQgY2xvY2tpbmcsIHVuaW5zdGFsbGVkCitSZXF1aXJlczogZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAgPSBAVkVSU0lPTkAKK1ZlcnNpb246IEBWRVJTSU9OQAorCitMaWJzOiBAYWJzX3RvcF9idWlsZGRpckAvbGlicy9nc3QvbmV0L2xpYmdzdG5ldC1AR1NUX01BSk9STUlOT1JALmxhCitDZmxhZ3M6IC1JQGFic190b3Bfc3JjZGlyQC9saWJzIC1JQGFic190b3BfYnVpbGRkaXJAL2xpYnMKZGlmZiAtLWdpdCBhL3BrZ2NvbmZpZy9nc3RyZWFtZXItbmV0LnBjLmluIGIvcGtnY29uZmlnL2dzdHJlYW1lci1uZXQucGMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhiNTEwYgotLS0gL2Rldi9udWxsCisrKyBiL3BrZ2NvbmZpZy9nc3RyZWFtZXItbmV0LnBjLmluCkBAIC0wLDAgKzEsMTUgQEAKK3ByZWZpeD1AcHJlZml4QAorZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorbGliZGlyPUBsaWJkaXJACitpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQC9nc3RyZWFtZXItQEdTVF9NQUpPUk1JTk9SQAorZGF0YXJvb3RkaXI9JHtwcmVmaXh9L3NoYXJlCitkYXRhZGlyPSR7ZGF0YXJvb3RkaXJ9CitnaXJkaXI9JHtkYXRhZGlyfS9naXItMS4wCit0eXBlbGliZGlyPSR7bGliZGlyfS9naXJlcG9zaXRvcnktMS4wCisKK05hbWU6IEdTdHJlYW1lciBuZXR3b3JraW5nIGxpYnJhcnkKK0Rlc2NyaXB0aW9uOiBOZXR3b3JrLWVuYWJsZWQgR1N0cmVhbWVyIHBsdWctaW5zIGFuZCBjbG9ja2luZworUmVxdWlyZXM6IGdzdHJlYW1lci1AR1NUX01BSk9STUlOT1JACitWZXJzaW9uOiBAVkVSU0lPTkAKK0xpYnM6IC1MJHtsaWJkaXJ9IC1sZ3N0bmV0LUBHU1RfTUFKT1JNSU5PUkAKK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CmRpZmYgLS1naXQgYS9wa2djb25maWcvZ3N0cmVhbWVyLXVuaW5zdGFsbGVkLnBjLmluIGIvcGtnY29uZmlnL2dzdHJlYW1lci11bmluc3RhbGxlZC5wYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODFmODFmCi0tLSAvZGV2L251bGwKKysrIGIvcGtnY29uZmlnL2dzdHJlYW1lci11bmluc3RhbGxlZC5wYy5pbgpAQCAtMCwwICsxLDE4IEBACisjIHRoZSBzdGFuZGFyZCB2YXJpYWJsZXMgZG9uJ3QgbWFrZSBzZW5zZSBmb3IgYW4gdW5pbnN0YWxsZWQgY29weQorcHJlZml4PQorZXhlY19wcmVmaXg9CitsaWJkaXI9QGFic190b3BfYnVpbGRkaXJAL2dzdAorIyBpbmNsdWRlZGlyIGlzIGJ1aWxkZGlyIGJlY2F1c2UgaXQgaXMgdXNlZCB0byBmaW5kIGdzdGNvbmZpZy5oIGluIHBsYWNlcworaW5jbHVkZWRpcj1AYWJzX3RvcF9idWlsZGRpckAKK3Rvb2xzZGlyPUBhYnNfdG9wX2J1aWxkZGlyQC90b29scworcGx1Z2luc2Rpcj1AYWJzX3RvcF9idWlsZGRpckAKK2dpcmRpcj1AYWJzX3RvcF9idWlsZGRpckAvZ3N0Cit0eXBlbGliZGlyPUBhYnNfdG9wX2J1aWxkZGlyQC9nc3QKKworTmFtZTogR1N0cmVhbWVyIFVuaW5zdGFsbGVkCitEZXNjcmlwdGlvbjogU3RyZWFtaW5nIG1lZGlhIGZyYW1ld29yaywgTm90IEluc3RhbGxlZAorVmVyc2lvbjogQFZFUlNJT05ACitSZXF1aXJlczogQEdTVF9QS0dfREVQU0AKK0xpYnM6IEBhYnNfdG9wX2J1aWxkZGlyQC9nc3QvbGliZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAubGEKKyMgRklYTUU6IHRoZSBsaWJzIGRpciBkb2Vzbid0IHJlYWxseSBiZWxvbmcgaGVyZQorQ2ZsYWdzOiAtSUBhYnNfdG9wX3NyY2RpckAgLUlAYWJzX3RvcF9zcmNkaXJAL2xpYnMgLUlAYWJzX3RvcF9idWlsZGRpckAgLUlAYWJzX3RvcF9idWlsZGRpckAvbGlicwpkaWZmIC0tZ2l0IGEvcGtnY29uZmlnL2dzdHJlYW1lci5wYy5pbiBiL3BrZ2NvbmZpZy9nc3RyZWFtZXIucGMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZmYjJmNAotLS0gL2Rldi9udWxsCisrKyBiL3BrZ2NvbmZpZy9nc3RyZWFtZXIucGMuaW4KQEAgLTAsMCArMSwxNyBAQAorcHJlZml4PUBwcmVmaXhACitleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACitsaWJkaXI9QGxpYmRpckAKK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJAL2dzdHJlYW1lci1AR1NUX01BSk9STUlOT1JACit0b29sc2Rpcj0ke2V4ZWNfcHJlZml4fS9iaW4KK3BsdWdpbnNkaXI9QGxpYmRpckAvZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAKK2RhdGFyb290ZGlyPSR7cHJlZml4fS9zaGFyZQorZGF0YWRpcj0ke2RhdGFyb290ZGlyfQorZ2lyZGlyPSR7ZGF0YWRpcn0vZ2lyLTEuMAordHlwZWxpYmRpcj0ke2xpYmRpcn0vZ2lyZXBvc2l0b3J5LTEuMAorCitOYW1lOiBHU3RyZWFtZXIKK0Rlc2NyaXB0aW9uOiBTdHJlYW1pbmcgbWVkaWEgZnJhbWV3b3JrCitSZXF1aXJlczogQEdTVF9QS0dfREVQU0AKK1ZlcnNpb246IEBWRVJTSU9OQAorTGliczogLUwke2xpYmRpcn0gLWxnc3RyZWFtZXItQEdTVF9NQUpPUk1JTk9SQAorQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvTWFrZWZpbGUuYW0gYi9wbHVnaW5zL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYzBhMWIKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsOCBAQAorU1VCRElSUyA9IGVsZW1lbnRzIGluZGV4ZXJzCisKK0RJU1RfU1VCRElSUyA9IGVsZW1lbnRzIGluZGV4ZXJzCisKK0FuZHJvaWQubWs6IE1ha2VmaWxlLmFtCisJYW5kcm9nZW5pemVyIC06UFJPSkVDVCBnc3RyZWFtZXIgXAorCSAtOlNVQkRJUiAkKHBhdHN1YnN0ICUscGx1Z2lucy8lLCAkKFNVQkRJUlMpKSBcCisJPiAkQApkaWZmIC0tZ2l0IGEvcGx1Z2lucy9NYWtlZmlsZS5pbiBiL3BsdWdpbnMvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QwOTFmMwotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw3NDQgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSBwbHVnaW5zCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1weXRob24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXNjcnViLWluY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorQU1fVl9HRU4gPSAkKGFtX192X0dFTl8kKFYpKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworQU1fVl9hdCA9ICQoYW1fX3ZfYXRfJChWKSkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9hdF8wID0gQAorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorUkVDVVJTSVZFX1RBUkdFVFMgPSBhbGwtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIFwKKwlodG1sLXJlY3Vyc2l2ZSBpbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWR2aS1yZWN1cnNpdmUgaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZSBpbnN0YWxsLWluZm8tcmVjdXJzaXZlIFwKKwlpbnN0YWxsLXBkZi1yZWN1cnNpdmUgaW5zdGFsbC1wcy1yZWN1cnNpdmUgaW5zdGFsbC1yZWN1cnNpdmUgXAorCWluc3RhbGxjaGVjay1yZWN1cnNpdmUgaW5zdGFsbGRpcnMtcmVjdXJzaXZlIHBkZi1yZWN1cnNpdmUgXAorCXBzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtcmVjdXJzaXZlCitSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyA9IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBjbGVhbi1yZWN1cnNpdmUJXAorICBkaXN0Y2xlYW4tcmVjdXJzaXZlIG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCitBTV9SRUNVUlNJVkVfVEFSR0VUUyA9ICQoUkVDVVJTSVZFX1RBUkdFVFM6LXJlY3Vyc2l2ZT0pIFwKKwkkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTOi1yZWN1cnNpdmU9KSB0YWdzIFRBR1MgY3RhZ3MgQ1RBR1MgXAorCWRpc3RkaXIKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCithbV9fcmVsYXRpdml6ZSA9IFwKKyAgZGlyMD1gcHdkYDsgXAorICBzZWRfZmlyc3Q9J3MsXlwoW14vXSpcKS8uKiQkLFwxLCc7IFwKKyAgc2VkX3Jlc3Q9J3MsXlteL10qLyosLCc7IFwKKyAgc2VkX2xhc3Q9J3MsXi4qL1woW14vXSpcKSQkLFwxLCc7IFwKKyAgc2VkX2J1dGxhc3Q9J3MsLypbXi9dKiQkLCwnOyBcCisgIHdoaWxlIHRlc3QgLW4gIiQkZGlyMSI7IGRvIFwKKyAgICBmaXJzdD1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAorICAgIGlmIHRlc3QgIiQkZmlyc3QiICE9ICIuIjsgdGhlbiBcCisgICAgICBpZiB0ZXN0ICIkJGZpcnN0IiA9ICIuLiI7IHRoZW4gXAorICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9sYXN0ImAvIiQkZGlyMiI7IFwKKyAgICAgICAgZGlyMD1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfYnV0bGFzdCJgOyBcCisgICAgICBlbHNlIFwKKyAgICAgICAgZmlyc3QyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCisgICAgICAgIGlmIHRlc3QgIiQkZmlyc3QyIiA9ICIkJGZpcnN0IjsgdGhlbiBcCisgICAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCisgICAgICAgIGVsc2UgXAorICAgICAgICAgIGRpcjI9Ii4uLyQkZGlyMiI7IFwKKyAgICAgICAgZmk7IFwKKyAgICAgICAgZGlyMD0iJCRkaXIwIi8iJCRmaXJzdCI7IFwKKyAgICAgIGZpOyBcCisgICAgZmk7IFwKKyAgICBkaXIxPWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKKyAgZG9uZTsgXAorICByZWxkaXI9IiQkZGlyMiIKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBUyA9IEBBU0AKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAorQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAorQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKK0NDID0gQENDQAorQ0NBUyA9IEBDQ0FTQAorQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACitDQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDSEVDS19NQUpPUl9WRVJTSU9OID0gQENIRUNLX01BSk9SX1ZFUlNJT05ACitDSEVDS19NSUNST19WRVJTSU9OID0gQENIRUNLX01JQ1JPX1ZFUlNJT05ACitDSEVDS19NSU5PUl9WRVJTSU9OID0gQENIRUNLX01JTk9SX1ZFUlNJT05ACitDSEVDS19WRVJTSU9OID0gQENIRUNLX1ZFUlNJT05ACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEFESVIgPSBAREFUQURJUkAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRU5BQkxFX1NVQlVOSVQgPSBARU5BQkxFX1NVQlVOSVRACitFUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZGTEFHUyA9IEBGRkxBR1NACitGR1JFUCA9IEBGR1JFUEAKK0ZMRVhfUEFUSCA9IEBGTEVYX1BBVEhACitHQ09WID0gQEdDT1ZACitHQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKK0dDT1ZfTElCUyA9IEBHQ09WX0xJQlNACitHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAorR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKK0dMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAorR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKK0dMSUJfT05MWV9DRkxBR1MgPSBAR0xJQl9PTkxZX0NGTEFHU0AKK0dMSUJfT05MWV9MSUJTID0gQEdMSUJfT05MWV9MSUJTQAorR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACitHTElCX1JFUSA9IEBHTElCX1JFUUAKK0dNUF9MSUJTID0gQEdNUF9MSUJTQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHUkVQID0gQEdSRVBACitHU0xfTElCUyA9IEBHU0xfTElCU0AKK0dTVF9BR0UgPSBAR1NUX0FHRUAKK0dTVF9BTExfQ0ZMQUdTID0gQEdTVF9BTExfQ0ZMQUdTQAorR1NUX0FMTF9DWFhGTEFHUyA9IEBHU1RfQUxMX0NYWEZMQUdTQAorR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKK0dTVF9BTExfTElCUyA9IEBHU1RfQUxMX0xJQlNACitHU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKK0dTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9ERUZJTkVACitHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkVACitHU1RfRElTQUJMRV9ORVRfREVGSU5FID0gQEdTVF9ESVNBQkxFX05FVF9ERUZJTkVACitHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAorR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKK0dTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKK0dTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACitHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfVFJBQ0VfREVGSU5FQAorR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAorR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAorR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTU19ERUZJTkUgPSBAR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTU19ERUZJTkVACitHU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKK0dTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAorR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKK0dTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAorR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACitHU1RfTUFKT1JNSU5PUiA9IEBHU1RfTUFKT1JNSU5PUkAKK0dTVF9PQkpfQ0ZMQUdTID0gQEdTVF9PQkpfQ0ZMQUdTQAorR1NUX09CSl9DWFhGTEFHUyA9IEBHU1RfT0JKX0NYWEZMQUdTQAorR1NUX09CSl9MSUJTID0gQEdTVF9PQkpfTElCU0AKK0dTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAorR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAorR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAorR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKK0dTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKK0dTVF9QS0dfREVQUyA9IEBHU1RfUEtHX0RFUFNACitHU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAorR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAorR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1BPSU5URVJfRk9STUFUX0RFRklORUAKK0dTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORSA9IEBHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkVACitHU1RfUkVHSVNUUllfRE9DX1RZUEVTID0gQEdTVF9SRUdJU1RSWV9ET0NfVFlQRVNACitHU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAorR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FID0gQEdTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OX0RFRklORUAKK0dUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACitIQVZFX0RPQ0JPT0sySFRNTCA9IEBIQVZFX0RPQ0JPT0sySFRNTEAKK0hBVkVfRE9DQk9PSzJQUyA9IEBIQVZFX0RPQ0JPT0syUFNACitIQVZFX0RWSVBTID0gQEhBVkVfRFZJUFNACitIQVZFX0VQU1RPUERGID0gQEhBVkVfRVBTVE9QREZACitIQVZFX0ZJRzJERVYgPSBASEFWRV9GSUcyREVWQAorSEFWRV9HTVAgPSBASEFWRV9HTVBACitIQVZFX0dTTCA9IEBIQVZFX0dTTEAKK0hBVkVfSkFERVRFWCA9IEBIQVZFX0pBREVURVhACitIQVZFX1BOR1RPUE5NID0gQEhBVkVfUE5HVE9QTk1ACitIQVZFX1BOTVRPUFMgPSBASEFWRV9QTk1UT1BTQAorSEFWRV9QUzJQREYgPSBASEFWRV9QUzJQREZACitIQVZFX1hNTExJTlQgPSBASEFWRV9YTUxMSU5UQAorSE9TVF9DUFUgPSBASE9TVF9DUFVACitIVE1MX0RJUiA9IEBIVE1MX0RJUkAKK0lORVRfQVRPTl9MSUJTID0gQElORVRfQVRPTl9MSUJTQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAorSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAorSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAorSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACitJTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAorSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAorSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkRJUiA9IEBMSUJESVJACitMSUJJQ09OViA9IEBMSUJJQ09OVkAKK0xJQklOVEwgPSBATElCSU5UTEAKK0xJQk0gPSBATElCTUAKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xPQ0FMRURJUiA9IEBMT0NBTEVESVJACitMVExJQklDT05WID0gQExUTElCSUNPTlZACitMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BSU5UID0gQE1BSU5UQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAorUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKK1BBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACitQQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKK1BBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMX1BBVEggPSBAUEVSTF9QQVRIQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUExVR0lORElSID0gQFBMVUdJTkRJUkAKK1BPU1VCID0gQFBPU1VCQAorUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACitQWVRIT04gPSBAUFlUSE9OQAorUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKK1BZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACitQWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACitQWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKK1ZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKK1ZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1dBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAorV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAorWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKK1hTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK2x0X0VDSE8gPSBAbHRfRUNIT0AKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKK3BrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACitwbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKK3B5dGhvbmRpciA9IEBweXRob25kaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1NVQkRJUlMgPSBlbGVtZW50cyBpbmRleGVycworRElTVF9TVUJESVJTID0gZWxlbWVudHMgaW5kZXhlcnMKK2FsbDogYWxsLXJlY3Vyc2l2ZQorCisuU1VGRklYRVM6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBwbHVnaW5zL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251IHBsdWdpbnMvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKKyMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCisjIGludG8gdGhlbSBhbmQgcnVuIGBtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KKyMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgYG1ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKKyMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gYGNvbmZpZy5zdGF0dXMnLCBlZGl0IGBjb25maWcuc3RhdHVzJworIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gYG1ha2UnKTsKKyMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlIGBtYWtlJyBjb21tYW5kIGxpbmUuCiskKFJFQ1VSU0lWRV9UQVJHRVRTKToKKwlAZmFpbD0gZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKwkgIGNhc2UgJCRmIGluIFwKKwkgICAgKj0qIHwgLS1bIWtdKik7OyBcCisJICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGRvdF9zZWVuPXllczsgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKKwlkb25lOyBcCisJaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCisJZmk7IHRlc3QgLXogIiQkZmFpbCIKKworJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyk6CisJQGZhaWw9IGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwljYXNlICIkQCIgaW4gXAorCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAorCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAorCWVzYWM7IFwKKwlyZXY9Jyc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gOjsgZWxzZSBcCisJICAgIHJldj0iJCRzdWJkaXIgJCRyZXYiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlyZXY9IiQkcmV2IC4iOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWZvciBzdWJkaXIgaW4gJCRyZXY7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmUgJiYgdGVzdCAteiAiJCRmYWlsIgordGFncy1yZWN1cnNpdmU6CisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8ICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdGFncyk7IFwKKwlkb25lCitjdGFncy1yZWN1cnNpdmU6CisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8ICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcCisJZG9uZQorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiB0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJc2V0IHg7IFwKKwloZXJlPWBwd2RgOyBcCisJaWYgKCQoRVRBR1MpIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD0uOyBcCisJZWxzZSBcCisJICBpbmNsdWRlX29wdGlvbj0tLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD07IFwKKwlmaTsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAhIC1mICQkc3ViZGlyL1RBR1MgfHwgXAorCSAgICAgIHNldCAiJCRAIiAiJCRpbmNsdWRlX29wdGlvbj0kJGhlcmUvJCRzdWJkaXIvVEFHUyI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogY3RhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgfHwgJChNS0RJUl9QKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJChkaXN0ZGlyKS8kJHN1YmRpciI7IFwKKwkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKKwkgICAgbmV3X2Rpc3RkaXI9JCRyZWxkaXI7IFwKKwkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJCh0b3BfZGlzdGRpcikiOyBcCisJICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCisJICAgIG5ld190b3BfZGlzdGRpcj0kJHJlbGRpcjsgXAorCSAgICBlY2hvICIgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXFwiOyBcCisJICAgIGVjaG8gIiAgICAgYW1fX3JlbW92ZV9kaXN0ZGlyPTogYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogYW1fX3NraXBfbW9kZV9maXg9OiBkaXN0ZGlyKSI7IFwKKwkgICAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiBcCisJICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBcCisJICAgICAgICBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcCisJCWFtX19yZW1vdmVfZGlzdGRpcj06IFwKKwkJYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogXAorCQlhbV9fc2tpcF9tb2RlX2ZpeD06IFwKKwkgICAgICAgIGRpc3RkaXIpIFwKKwkgICAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLXJlY3Vyc2l2ZQorYWxsLWFtOiBNYWtlZmlsZQoraW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQoraW5zdGFsbGRpcnMtYW06CitpbnN0YWxsOiBpbnN0YWxsLXJlY3Vyc2l2ZQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1yZWN1cnNpdmUKK3VuaW5zdGFsbDogdW5pbnN0YWxsLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tcmVjdXJzaXZlCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLXJlY3Vyc2l2ZQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtcmVjdXJzaXZlCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tcmVjdXJzaXZlCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1yZWN1cnNpdmUKKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLXJlY3Vyc2l2ZQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1yZWN1cnNpdmUKKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtcmVjdXJzaXZlCisKK3BkZi1hbToKKworcHM6IHBzLXJlY3Vyc2l2ZQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgY3RhZ3MtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAgdGFncy1yZWN1cnNpdmUKKworLlBIT05ZOiAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBDVEFHUyBHVEFHUyBcCisJYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgXAorCWN0YWdzIGN0YWdzLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKKwlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKKwlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKKwlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAorCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCisJaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKKwlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgaW5zdGFsbGRpcnMtYW0gbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtcmVjdXJzaXZlIFwKKwl1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisKKworQW5kcm9pZC5tazogTWFrZWZpbGUuYW0KKwlhbmRyb2dlbml6ZXIgLTpQUk9KRUNUIGdzdHJlYW1lciBcCisJIC06U1VCRElSICQocGF0c3Vic3QgJSxwbHVnaW5zLyUsICQoU1VCRElSUykpIFwKKwk+ICRACisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3BsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUuYW0gYi9wbHVnaW5zL2VsZW1lbnRzL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NDNjZjIKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL2VsZW1lbnRzL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNzEgQEAKKworcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0Y29yZWVsZW1lbnRzLmxhCisKK2xpYmdzdGNvcmVlbGVtZW50c19sYV9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvZ3N0L2xpYmdzdHJlYW1lci1AR1NUX01BSk9STUlOT1JALmxhCitsaWJnc3Rjb3JlZWxlbWVudHNfbGFfU09VUkNFUyA9CVwKKwlnc3RjYXBzZmlsdGVyLmMJCVwKKwlnc3RlbGVtZW50cy5jCQlcCisJZ3N0ZmFrZXNyYy5jCQlcCisJZ3N0ZmFrZXNpbmsuYwkJXAorCWdzdGZkc3JjLmMJCVwKKwlnc3RmZHNpbmsuYwkJXAorCWdzdGZpbGVzaW5rLmMJCVwKKwlnc3RmaWxlc3JjLmMJCVwKKwlnc3RmdW5uZWwuYwkJXAorCWdzdGlkZW50aXR5LmMJCVwKKwlnc3RpbnB1dHNlbGVjdG9yLmMJXAorCWdzdG91dHB1dHNlbGVjdG9yLmMJXAorCWdzdG11bHRpcXVldWUuYwkJXAorCWdzdHF1ZXVlLmMJCVwKKwlnc3RxdWV1ZTIuYwkJXAorCWdzdHRlZS5jCQlcCisJZ3N0dHlwZWZpbmRlbGVtZW50LmMJXAorCWdzdHZhbHZlLmMKKworbGliZ3N0Y29yZWVsZW1lbnRzX2xhX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCitsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTElCQUREID0gXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChHU1RfT0JKX0xJQlMpCitsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQorbGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUyA9IC0tdGFnPWRpc2FibGUtc3RhdGljCisKK25vaW5zdF9IRUFERVJTID0JCVwKKwlnc3RjYXBzZmlsdGVyLmgJCVwKKwlnc3RmYWtlc2luay5oCQlcCisJZ3N0ZmFrZXNyYy5oCQlcCisJZ3N0ZmRzcmMuaAkJXAorCWdzdGZkc2luay5oCQlcCisJZ3N0ZmlsZXNpbmsuaAkJXAorCWdzdGZpbGVzcmMuaAkJXAorCWdzdGZ1bm5lbC5oCQlcCisJZ3N0aWRlbnRpdHkuaAkJXAorCWdzdGlucHV0c2VsZWN0b3IuaAlcCisJZ3N0b3V0cHV0c2VsZWN0b3IuaAlcCisJZ3N0bXVsdGlxdWV1ZS5oCQlcCisJZ3N0cXVldWUuaAkJXAorCWdzdHF1ZXVlMi5oCQlcCisJZ3N0dGVlLmgJCVwKKwlnc3R0eXBlZmluZGVsZW1lbnQuaAlcCisJZ3N0dmFsdmUuaAorCitFWFRSQV9ESVNUID0gZ3N0ZmRzcmMuYyBcCisJICAgICBnc3RmZHNpbmsuYworCisKK0NMRUFORklMRVMgPSAqLmdjbm8gKi5nY2RhICouZ2NvdiAqLmdjb3Yub3V0CisKKyUuYy5nY292OiAubGlicy9saWJnc3Rjb3JlZWxlbWVudHNfbGEtJS5nY2RhICUuYworCSQoR0NPVikgLWIgLWYgLW8gJF4gPiAkQC5vdXQKKworZ2NvdjogJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfU09VUkNFUzo9Lmdjb3YpCisKK0FuZHJvaWQubWs6IE1ha2VmaWxlLmFtCisJYW5kcm9nZW5pemVyIC06UFJPSkVDVCBnc3RyZWFtZXIgLTpTSEFSRUQgbGliZ3N0Y29yZWVsZW1lbnRzIC06VEFHUyBlbmcgZGVidWcgXAorCSAtOlJFTF9UT1AgJCh0b3Bfc3JjZGlyKSAtOkFCU19UT1AgJChhYnNfdG9wX3NyY2RpcikgXAorCSAtOlNPVVJDRVMgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfU09VUkNFUykgXAorCSAtOkNGTEFHUyAkKERFRlMpICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0NGTEFHUykgXAorCSAtOkxERkxBR1MgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTERGTEFHUykgXAorCSAgICAgICAgICAgICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQkFERCkgXAorCSAtOlBBU1NUSFJPVUdIIExPQ0FMX0FSTV9NT0RFOj1hcm0gXAorCSAgICAgICAgICAgICAgIExPQ0FMX01PRFVMRV9QQVRIOj0kJFwoVEFSR0VUX09VVFwpL2xpYi9nc3RyZWFtZXItQEdTVF9NQUpPUk1JTk9SQCBcCisJPiAkQApkaWZmIC0tZ2l0IGEvcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZS5pbiBiL3BsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ5ZmQ0NQotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw5NjYgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gcGx1Z2lucy9lbGVtZW50cworRElTVF9DT01NT04gPSAkKG5vaW5zdF9IRUFERVJTKSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gXAorCSQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXB5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtc2NydWItaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CithbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKK2FtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCisgICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKyAgICAqKSBmPSQkcDs7IFwKKyAgZXNhYzsKK2FtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19pbnN0YWxsX21heCA9IDQwCithbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAorICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCithbV9fbm9iYXNlX3N0cmlwID0gXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKK2FtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKKyAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKKyAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAorICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKKyAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKKyAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCithbV9fYmFzZV9saXN0ID0gXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQocGx1Z2luZGlyKSIKK0xUTElCUkFSSUVTID0gJChwbHVnaW5fTFRMSUJSQVJJRVMpCithbV9fREVQRU5ERU5DSUVTXzEgPQorYW1fbGliZ3N0Y29yZWVsZW1lbnRzX2xhX09CSkVDVFMgPSAgXAorCWxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RjYXBzZmlsdGVyLmxvIFwKKwlsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZWxlbWVudHMubG8gXAorCWxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmYWtlc3JjLmxvIFwKKwlsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmFrZXNpbmsubG8gXAorCWxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmZHNyYy5sbyBcCisJbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZkc2luay5sbyBcCisJbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZpbGVzaW5rLmxvIFwKKwlsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmlsZXNyYy5sbyBcCisJbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZ1bm5lbC5sbyBcCisJbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGlkZW50aXR5LmxvIFwKKwlsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0aW5wdXRzZWxlY3Rvci5sbyBcCisJbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdG91dHB1dHNlbGVjdG9yLmxvIFwKKwlsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0bXVsdGlxdWV1ZS5sbyBcCisJbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHF1ZXVlLmxvIFwKKwlsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0cXVldWUyLmxvIFwKKwlsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0dGVlLmxvIFwKKwlsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0dHlwZWZpbmRlbGVtZW50LmxvIFwKKwlsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0dmFsdmUubG8KK2xpYmdzdGNvcmVlbGVtZW50c19sYV9PQkpFQ1RTID0gJChhbV9saWJnc3Rjb3JlZWxlbWVudHNfbGFfT0JKRUNUUykKK0FNX1ZfbHQgPSAkKGFtX192X2x0XyQoVikpCithbV9fdl9sdF8gPSAkKGFtX192X2x0XyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfbHRfMCA9IC0tc2lsZW50CitsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCisJJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1saW5rICQoQ0NMRCkgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKwkkKEFNX0NGTEFHUykgJChDRkxBR1MpCitBTV9WX0NDID0gJChhbV9fdl9DQ18kKFYpKQorYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ18kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAiICRAOworQU1fVl9hdCA9ICQoYW1fX3ZfYXRfJChWKSkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9hdF8wID0gQAorQ0NMRCA9ICQoQ0MpCitMSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitBTV9WX0NDTEQgPSAkKGFtX192X0NDTERfJChWKSkKK2FtX192X0NDTERfID0gJChhbV9fdl9DQ0xEXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgIiAkQDsKK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fJChWKSkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgIiAkQDsKK1NPVVJDRVMgPSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfU09VUkNFUykKK0hFQURFUlMgPSAkKG5vaW5zdF9IRUFERVJTKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBUyA9IEBBU0AKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAorQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAorQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKK0NDID0gQENDQAorQ0NBUyA9IEBDQ0FTQAorQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACitDQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDSEVDS19NQUpPUl9WRVJTSU9OID0gQENIRUNLX01BSk9SX1ZFUlNJT05ACitDSEVDS19NSUNST19WRVJTSU9OID0gQENIRUNLX01JQ1JPX1ZFUlNJT05ACitDSEVDS19NSU5PUl9WRVJTSU9OID0gQENIRUNLX01JTk9SX1ZFUlNJT05ACitDSEVDS19WRVJTSU9OID0gQENIRUNLX1ZFUlNJT05ACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEFESVIgPSBAREFUQURJUkAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRU5BQkxFX1NVQlVOSVQgPSBARU5BQkxFX1NVQlVOSVRACitFUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZGTEFHUyA9IEBGRkxBR1NACitGR1JFUCA9IEBGR1JFUEAKK0ZMRVhfUEFUSCA9IEBGTEVYX1BBVEhACitHQ09WID0gQEdDT1ZACitHQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKK0dDT1ZfTElCUyA9IEBHQ09WX0xJQlNACitHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAorR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKK0dMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAorR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKK0dMSUJfT05MWV9DRkxBR1MgPSBAR0xJQl9PTkxZX0NGTEFHU0AKK0dMSUJfT05MWV9MSUJTID0gQEdMSUJfT05MWV9MSUJTQAorR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACitHTElCX1JFUSA9IEBHTElCX1JFUUAKK0dNUF9MSUJTID0gQEdNUF9MSUJTQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHUkVQID0gQEdSRVBACitHU0xfTElCUyA9IEBHU0xfTElCU0AKK0dTVF9BR0UgPSBAR1NUX0FHRUAKK0dTVF9BTExfQ0ZMQUdTID0gQEdTVF9BTExfQ0ZMQUdTQAorR1NUX0FMTF9DWFhGTEFHUyA9IEBHU1RfQUxMX0NYWEZMQUdTQAorR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKK0dTVF9BTExfTElCUyA9IEBHU1RfQUxMX0xJQlNACitHU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKK0dTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9ERUZJTkVACitHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkVACitHU1RfRElTQUJMRV9ORVRfREVGSU5FID0gQEdTVF9ESVNBQkxFX05FVF9ERUZJTkVACitHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAorR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKK0dTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKK0dTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACitHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfVFJBQ0VfREVGSU5FQAorR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAorR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAorR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTU19ERUZJTkUgPSBAR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTU19ERUZJTkVACitHU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKK0dTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAorR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKK0dTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAorR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACitHU1RfTUFKT1JNSU5PUiA9IEBHU1RfTUFKT1JNSU5PUkAKK0dTVF9PQkpfQ0ZMQUdTID0gQEdTVF9PQkpfQ0ZMQUdTQAorR1NUX09CSl9DWFhGTEFHUyA9IEBHU1RfT0JKX0NYWEZMQUdTQAorR1NUX09CSl9MSUJTID0gQEdTVF9PQkpfTElCU0AKK0dTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAorR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAorR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAorR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKK0dTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKK0dTVF9QS0dfREVQUyA9IEBHU1RfUEtHX0RFUFNACitHU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAorR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAorR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1BPSU5URVJfRk9STUFUX0RFRklORUAKK0dTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORSA9IEBHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkVACitHU1RfUkVHSVNUUllfRE9DX1RZUEVTID0gQEdTVF9SRUdJU1RSWV9ET0NfVFlQRVNACitHU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAorR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FID0gQEdTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OX0RFRklORUAKK0dUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACitIQVZFX0RPQ0JPT0sySFRNTCA9IEBIQVZFX0RPQ0JPT0sySFRNTEAKK0hBVkVfRE9DQk9PSzJQUyA9IEBIQVZFX0RPQ0JPT0syUFNACitIQVZFX0RWSVBTID0gQEhBVkVfRFZJUFNACitIQVZFX0VQU1RPUERGID0gQEhBVkVfRVBTVE9QREZACitIQVZFX0ZJRzJERVYgPSBASEFWRV9GSUcyREVWQAorSEFWRV9HTVAgPSBASEFWRV9HTVBACitIQVZFX0dTTCA9IEBIQVZFX0dTTEAKK0hBVkVfSkFERVRFWCA9IEBIQVZFX0pBREVURVhACitIQVZFX1BOR1RPUE5NID0gQEhBVkVfUE5HVE9QTk1ACitIQVZFX1BOTVRPUFMgPSBASEFWRV9QTk1UT1BTQAorSEFWRV9QUzJQREYgPSBASEFWRV9QUzJQREZACitIQVZFX1hNTExJTlQgPSBASEFWRV9YTUxMSU5UQAorSE9TVF9DUFUgPSBASE9TVF9DUFVACitIVE1MX0RJUiA9IEBIVE1MX0RJUkAKK0lORVRfQVRPTl9MSUJTID0gQElORVRfQVRPTl9MSUJTQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAorSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAorSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAorSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACitJTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAorSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAorSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkRJUiA9IEBMSUJESVJACitMSUJJQ09OViA9IEBMSUJJQ09OVkAKK0xJQklOVEwgPSBATElCSU5UTEAKK0xJQk0gPSBATElCTUAKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xPQ0FMRURJUiA9IEBMT0NBTEVESVJACitMVExJQklDT05WID0gQExUTElCSUNPTlZACitMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BSU5UID0gQE1BSU5UQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAorUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKK1BBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACitQQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKK1BBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMX1BBVEggPSBAUEVSTF9QQVRIQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUExVR0lORElSID0gQFBMVUdJTkRJUkAKK1BPU1VCID0gQFBPU1VCQAorUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACitQWVRIT04gPSBAUFlUSE9OQAorUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKK1BZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACitQWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACitQWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKK1ZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKK1ZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1dBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAorV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAorWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKK1hTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK2x0X0VDSE8gPSBAbHRfRUNIT0AKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKK3BrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACitwbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKK3B5dGhvbmRpciA9IEBweXRob25kaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK3BsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdGNvcmVlbGVtZW50cy5sYQorbGliZ3N0Y29yZWVsZW1lbnRzX2xhX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9nc3QvbGliZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAubGEKK2xpYmdzdGNvcmVlbGVtZW50c19sYV9TT1VSQ0VTID0gXAorCWdzdGNhcHNmaWx0ZXIuYwkJXAorCWdzdGVsZW1lbnRzLmMJCVwKKwlnc3RmYWtlc3JjLmMJCVwKKwlnc3RmYWtlc2luay5jCQlcCisJZ3N0ZmRzcmMuYwkJXAorCWdzdGZkc2luay5jCQlcCisJZ3N0ZmlsZXNpbmsuYwkJXAorCWdzdGZpbGVzcmMuYwkJXAorCWdzdGZ1bm5lbC5jCQlcCisJZ3N0aWRlbnRpdHkuYwkJXAorCWdzdGlucHV0c2VsZWN0b3IuYwlcCisJZ3N0b3V0cHV0c2VsZWN0b3IuYwlcCisJZ3N0bXVsdGlxdWV1ZS5jCQlcCisJZ3N0cXVldWUuYwkJXAorCWdzdHF1ZXVlMi5jCQlcCisJZ3N0dGVlLmMJCVwKKwlnc3R0eXBlZmluZGVsZW1lbnQuYwlcCisJZ3N0dmFsdmUuYworCitsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykKK2xpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJBREQgPSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKEdTVF9PQkpfTElCUykKKworbGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKK2xpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJUT09MRkxBR1MgPSAtLXRhZz1kaXNhYmxlLXN0YXRpYworbm9pbnN0X0hFQURFUlMgPSBcCisJZ3N0Y2Fwc2ZpbHRlci5oCQlcCisJZ3N0ZmFrZXNpbmsuaAkJXAorCWdzdGZha2VzcmMuaAkJXAorCWdzdGZkc3JjLmgJCVwKKwlnc3RmZHNpbmsuaAkJXAorCWdzdGZpbGVzaW5rLmgJCVwKKwlnc3RmaWxlc3JjLmgJCVwKKwlnc3RmdW5uZWwuaAkJXAorCWdzdGlkZW50aXR5LmgJCVwKKwlnc3RpbnB1dHNlbGVjdG9yLmgJXAorCWdzdG91dHB1dHNlbGVjdG9yLmgJXAorCWdzdG11bHRpcXVldWUuaAkJXAorCWdzdHF1ZXVlLmgJCVwKKwlnc3RxdWV1ZTIuaAkJXAorCWdzdHRlZS5oCQlcCisJZ3N0dHlwZWZpbmRlbGVtZW50LmgJXAorCWdzdHZhbHZlLmgKKworRVhUUkFfRElTVCA9IGdzdGZkc3JjLmMgXAorCSAgICAgZ3N0ZmRzaW5rLmMKKworQ0xFQU5GSUxFUyA9ICouZ2NubyAqLmdjZGEgKi5nY292ICouZ2Nvdi5vdXQKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IHBsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbnUgcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKK2luc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQocGx1Z2luZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQocGx1Z2luZGlyKSIKKwlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAorCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCisJICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKKwkgIGVsc2UgOjsgZmk7IFwKKwlkb25lOyBcCisJdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAorCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBcCisJfQorCit1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgJChhbV9fc3RyaXBfZGlyKSBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmJyI7IFwKKwkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiI7IFwKKwlkb25lCisKK2NsZWFuLXBsdWdpbkxUTElCUkFSSUVTOgorCS10ZXN0IC16ICIkKHBsdWdpbl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQocGx1Z2luX0xUTElCUkFSSUVTKQorCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGRpcj0iYGVjaG8gJCRwIHwgc2VkIC1lICdzfC9bXi9dKiQkfHwnYCI7IFwKKwkgIHRlc3QgIiQkZGlyIiAhPSAiJCRwIiB8fCBkaXI9LjsgXAorCSAgZWNobyAicm0gLWYgXCIkJHtkaXJ9L3NvX2xvY2F0aW9uc1wiIjsgXAorCSAgcm0gLWYgIiQke2Rpcn0vc29fbG9jYXRpb25zIjsgXAorCWRvbmUKK2xpYmdzdGNvcmVlbGVtZW50cy5sYTogJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfT0JKRUNUUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfREVQRU5ERU5DSUVTKSAKKwkkKEFNX1ZfQ0NMRCkkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSU5LKSAtcnBhdGggJChwbHVnaW5kaXIpICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX09CSkVDVFMpICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQkFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGNhcHNmaWx0ZXIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZWxlbWVudHMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmFrZXNpbmsuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmFrZXNyYy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmZHNpbmsuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmRzcmMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmlsZXNpbmsuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmlsZXNyYy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmdW5uZWwuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0aWRlbnRpdHkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0aW5wdXRzZWxlY3Rvci5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RtdWx0aXF1ZXVlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdG91dHB1dHNlbGVjdG9yLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHF1ZXVlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHF1ZXVlMi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3R0ZWUuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0dHlwZWZpbmRlbGVtZW50LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHZhbHZlLlBsb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCitsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0Y2Fwc2ZpbHRlci5sbzogZ3N0Y2Fwc2ZpbHRlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGNhcHNmaWx0ZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RjYXBzZmlsdGVyLlRwbyAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0Y2Fwc2ZpbHRlci5sbyBgdGVzdCAtZiAnZ3N0Y2Fwc2ZpbHRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RjYXBzZmlsdGVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RjYXBzZmlsdGVyLlRwbyAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGNhcHNmaWx0ZXIuUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0Y2Fwc2ZpbHRlci5jJyBvYmplY3Q9J2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RjYXBzZmlsdGVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0Y2Fwc2ZpbHRlci5sbyBgdGVzdCAtZiAnZ3N0Y2Fwc2ZpbHRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RjYXBzZmlsdGVyLmMKKworbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGVsZW1lbnRzLmxvOiBnc3RlbGVtZW50cy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGVsZW1lbnRzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZWxlbWVudHMuVHBvIC1jIC1vIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RlbGVtZW50cy5sbyBgdGVzdCAtZiAnZ3N0ZWxlbWVudHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZWxlbWVudHMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGVsZW1lbnRzLlRwbyAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGVsZW1lbnRzLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdGVsZW1lbnRzLmMnIG9iamVjdD0nbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGVsZW1lbnRzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZWxlbWVudHMubG8gYHRlc3QgLWYgJ2dzdGVsZW1lbnRzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGVsZW1lbnRzLmMKKworbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZha2VzcmMubG86IGdzdGZha2VzcmMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmYWtlc3JjLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmFrZXNyYy5UcG8gLWMgLW8gbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZha2VzcmMubG8gYHRlc3QgLWYgJ2dzdGZha2VzcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZmFrZXNyYy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmFrZXNyYy5UcG8gJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmYWtlc3JjLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdGZha2VzcmMuYycgb2JqZWN0PSdsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmFrZXNyYy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZha2VzcmMubG8gYHRlc3QgLWYgJ2dzdGZha2VzcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZmFrZXNyYy5jCisKK2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmYWtlc2luay5sbzogZ3N0ZmFrZXNpbmsuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmYWtlc2luay5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZha2VzaW5rLlRwbyAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmFrZXNpbmsubG8gYHRlc3QgLWYgJ2dzdGZha2VzaW5rLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGZha2VzaW5rLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmYWtlc2luay5UcG8gJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmYWtlc2luay5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RmYWtlc2luay5jJyBvYmplY3Q9J2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmYWtlc2luay5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZha2VzaW5rLmxvIGB0ZXN0IC1mICdnc3RmYWtlc2luay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RmYWtlc2luay5jCisKK2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmZHNyYy5sbzogZ3N0ZmRzcmMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmZHNyYy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZkc3JjLlRwbyAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmRzcmMubG8gYHRlc3QgLWYgJ2dzdGZkc3JjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGZkc3JjLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmZHNyYy5UcG8gJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmZHNyYy5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RmZHNyYy5jJyBvYmplY3Q9J2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmZHNyYy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZkc3JjLmxvIGB0ZXN0IC1mICdnc3RmZHNyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RmZHNyYy5jCisKK2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmZHNpbmsubG86IGdzdGZkc2luay5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZkc2luay5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZkc2luay5UcG8gLWMgLW8gbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZkc2luay5sbyBgdGVzdCAtZiAnZ3N0ZmRzaW5rLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGZkc2luay5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmRzaW5rLlRwbyAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZkc2luay5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RmZHNpbmsuYycgb2JqZWN0PSdsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmRzaW5rLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmRzaW5rLmxvIGB0ZXN0IC1mICdnc3RmZHNpbmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZmRzaW5rLmMKKworbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZpbGVzaW5rLmxvOiBnc3RmaWxlc2luay5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZpbGVzaW5rLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmlsZXNpbmsuVHBvIC1jIC1vIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmaWxlc2luay5sbyBgdGVzdCAtZiAnZ3N0ZmlsZXNpbmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZmlsZXNpbmsuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZpbGVzaW5rLlRwbyAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZpbGVzaW5rLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdGZpbGVzaW5rLmMnIG9iamVjdD0nbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZpbGVzaW5rLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmlsZXNpbmsubG8gYHRlc3QgLWYgJ2dzdGZpbGVzaW5rLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGZpbGVzaW5rLmMKKworbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZpbGVzcmMubG86IGdzdGZpbGVzcmMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmaWxlc3JjLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmlsZXNyYy5UcG8gLWMgLW8gbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZpbGVzcmMubG8gYHRlc3QgLWYgJ2dzdGZpbGVzcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZmlsZXNyYy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmlsZXNyYy5UcG8gJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmaWxlc3JjLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdGZpbGVzcmMuYycgb2JqZWN0PSdsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmlsZXNyYy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZpbGVzcmMubG8gYHRlc3QgLWYgJ2dzdGZpbGVzcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZmlsZXNyYy5jCisKK2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmdW5uZWwubG86IGdzdGZ1bm5lbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZ1bm5lbC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZ1bm5lbC5UcG8gLWMgLW8gbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZ1bm5lbC5sbyBgdGVzdCAtZiAnZ3N0ZnVubmVsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGZ1bm5lbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZnVubmVsLlRwbyAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZ1bm5lbC5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RmdW5uZWwuYycgb2JqZWN0PSdsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZnVubmVsLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZnVubmVsLmxvIGB0ZXN0IC1mICdnc3RmdW5uZWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZnVubmVsLmMKKworbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGlkZW50aXR5LmxvOiBnc3RpZGVudGl0eS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGlkZW50aXR5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0aWRlbnRpdHkuVHBvIC1jIC1vIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RpZGVudGl0eS5sbyBgdGVzdCAtZiAnZ3N0aWRlbnRpdHkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0aWRlbnRpdHkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGlkZW50aXR5LlRwbyAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGlkZW50aXR5LlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdGlkZW50aXR5LmMnIG9iamVjdD0nbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGlkZW50aXR5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0aWRlbnRpdHkubG8gYHRlc3QgLWYgJ2dzdGlkZW50aXR5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGlkZW50aXR5LmMKKworbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGlucHV0c2VsZWN0b3IubG86IGdzdGlucHV0c2VsZWN0b3IuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RpbnB1dHNlbGVjdG9yLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0aW5wdXRzZWxlY3Rvci5UcG8gLWMgLW8gbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGlucHV0c2VsZWN0b3IubG8gYHRlc3QgLWYgJ2dzdGlucHV0c2VsZWN0b3IuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0aW5wdXRzZWxlY3Rvci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0aW5wdXRzZWxlY3Rvci5UcG8gJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RpbnB1dHNlbGVjdG9yLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdGlucHV0c2VsZWN0b3IuYycgb2JqZWN0PSdsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0aW5wdXRzZWxlY3Rvci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGlucHV0c2VsZWN0b3IubG8gYHRlc3QgLWYgJ2dzdGlucHV0c2VsZWN0b3IuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0aW5wdXRzZWxlY3Rvci5jCisKK2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RvdXRwdXRzZWxlY3Rvci5sbzogZ3N0b3V0cHV0c2VsZWN0b3IuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RvdXRwdXRzZWxlY3Rvci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdG91dHB1dHNlbGVjdG9yLlRwbyAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0b3V0cHV0c2VsZWN0b3IubG8gYHRlc3QgLWYgJ2dzdG91dHB1dHNlbGVjdG9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG91dHB1dHNlbGVjdG9yLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RvdXRwdXRzZWxlY3Rvci5UcG8gJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RvdXRwdXRzZWxlY3Rvci5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RvdXRwdXRzZWxlY3Rvci5jJyBvYmplY3Q9J2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RvdXRwdXRzZWxlY3Rvci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdG91dHB1dHNlbGVjdG9yLmxvIGB0ZXN0IC1mICdnc3RvdXRwdXRzZWxlY3Rvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RvdXRwdXRzZWxlY3Rvci5jCisKK2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RtdWx0aXF1ZXVlLmxvOiBnc3RtdWx0aXF1ZXVlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0bXVsdGlxdWV1ZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdG11bHRpcXVldWUuVHBvIC1jIC1vIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RtdWx0aXF1ZXVlLmxvIGB0ZXN0IC1mICdnc3RtdWx0aXF1ZXVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG11bHRpcXVldWUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdG11bHRpcXVldWUuVHBvICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0bXVsdGlxdWV1ZS5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3RtdWx0aXF1ZXVlLmMnIG9iamVjdD0nbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdG11bHRpcXVldWUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RtdWx0aXF1ZXVlLmxvIGB0ZXN0IC1mICdnc3RtdWx0aXF1ZXVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG11bHRpcXVldWUuYworCitsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0cXVldWUubG86IGdzdHF1ZXVlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0cXVldWUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RxdWV1ZS5UcG8gLWMgLW8gbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHF1ZXVlLmxvIGB0ZXN0IC1mICdnc3RxdWV1ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RxdWV1ZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0cXVldWUuVHBvICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0cXVldWUuUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0cXVldWUuYycgb2JqZWN0PSdsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0cXVldWUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RxdWV1ZS5sbyBgdGVzdCAtZiAnZ3N0cXVldWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cXVldWUuYworCitsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0cXVldWUyLmxvOiBnc3RxdWV1ZTIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RxdWV1ZTIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RxdWV1ZTIuVHBvIC1jIC1vIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RxdWV1ZTIubG8gYHRlc3QgLWYgJ2dzdHF1ZXVlMi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RxdWV1ZTIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHF1ZXVlMi5UcG8gJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RxdWV1ZTIuUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0cXVldWUyLmMnIG9iamVjdD0nbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHF1ZXVlMi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHF1ZXVlMi5sbyBgdGVzdCAtZiAnZ3N0cXVldWUyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHF1ZXVlMi5jCisKK2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3R0ZWUubG86IGdzdHRlZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHRlZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHRlZS5UcG8gLWMgLW8gbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHRlZS5sbyBgdGVzdCAtZiAnZ3N0dGVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHRlZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0dGVlLlRwbyAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHRlZS5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3R0ZWUuYycgb2JqZWN0PSdsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0dGVlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0dGVlLmxvIGB0ZXN0IC1mICdnc3R0ZWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dGVlLmMKKworbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHR5cGVmaW5kZWxlbWVudC5sbzogZ3N0dHlwZWZpbmRlbGVtZW50LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0dHlwZWZpbmRlbGVtZW50LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0dHlwZWZpbmRlbGVtZW50LlRwbyAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0dHlwZWZpbmRlbGVtZW50LmxvIGB0ZXN0IC1mICdnc3R0eXBlZmluZGVsZW1lbnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dHlwZWZpbmRlbGVtZW50LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3R0eXBlZmluZGVsZW1lbnQuVHBvICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0dHlwZWZpbmRlbGVtZW50LlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdHR5cGVmaW5kZWxlbWVudC5jJyBvYmplY3Q9J2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3R0eXBlZmluZGVsZW1lbnQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3R0eXBlZmluZGVsZW1lbnQubG8gYHRlc3QgLWYgJ2dzdHR5cGVmaW5kZWxlbWVudC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R0eXBlZmluZGVsZW1lbnQuYworCitsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0dmFsdmUubG86IGdzdHZhbHZlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0dmFsdmUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3R2YWx2ZS5UcG8gLWMgLW8gbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHZhbHZlLmxvIGB0ZXN0IC1mICdnc3R2YWx2ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R2YWx2ZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0dmFsdmUuVHBvICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0dmFsdmUuUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0dmFsdmUuYycgb2JqZWN0PSdsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0dmFsdmUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3R2YWx2ZS5sbyBgdGVzdCAtZiAnZ3N0dmFsdmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dmFsdmUuYworCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKEhFQURFUlMpCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKKwltb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUworCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCisJY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBjdGFncyBkaXN0Y2xlYW4gXAorCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUyBcCisJaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKKwlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCisKKworJS5jLmdjb3Y6IC5saWJzL2xpYmdzdGNvcmVlbGVtZW50c19sYS0lLmdjZGEgJS5jCisJJChHQ09WKSAtYiAtZiAtbyAkXiA+ICRALm91dAorCitnY292OiAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9TT1VSQ0VTOj0uZ2NvdikKKworQW5kcm9pZC5tazogTWFrZWZpbGUuYW0KKwlhbmRyb2dlbml6ZXIgLTpQUk9KRUNUIGdzdHJlYW1lciAtOlNIQVJFRCBsaWJnc3Rjb3JlZWxlbWVudHMgLTpUQUdTIGVuZyBkZWJ1ZyBcCisJIC06UkVMX1RPUCAkKHRvcF9zcmNkaXIpIC06QUJTX1RPUCAkKGFic190b3Bfc3JjZGlyKSBcCisJIC06U09VUkNFUyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9TT1VSQ0VTKSBcCisJIC06Q0ZMQUdTICQoREVGUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSBcCisJIC06TERGTEFHUyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MREZMQUdTKSBcCisJICAgICAgICAgICAgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTElCQUREKSBcCisJIC06UEFTU1RIUk9VR0ggTE9DQUxfQVJNX01PREU6PWFybSBcCisJICAgICAgICAgICAgICAgTE9DQUxfTU9EVUxFX1BBVEg6PSQkXChUQVJHRVRfT1VUXCkvbGliL2dzdHJlYW1lci1AR1NUX01BSk9STUlOT1JAIFwKKwk+ICRACisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYyNzhkYwotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jCkBAIC0wLDAgKzEsMzc0IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgorICogICAgICAgICAgICAgICAgICAgIDIwMDUgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKy8qKgorICogU0VDVElPTjplbGVtZW50LWNhcHNmaWx0ZXIKKyAqCisgKiBUaGUgZWxlbWVudCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBhcyBzdWNoLCBidXQgY2FuIGVuZm9yY2UgbGltaXRhdGlvbnMgb24gdGhlCisgKiBkYXRhIGZvcm1hdC4KKyAqCisgKiA8cmVmc2VjdDI+CisgKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+CisgKiB8WworICogZ3N0LWxhdW5jaCB2aWRlb3Rlc3RzcmMgISB2aWRlby94LXJhdy1ncmF5ICEgZmZtcGVnY29sb3JzcGFjZSAhIGF1dG92aWRlb3NpbmsKKyAqIF18IExpbWl0cyBhY2NlcHRhYmxlIHZpZGVvIGZyb20gdmlkZW90ZXN0c3JjIHRvIGJlIGdyYXlzY2FsZS4KKyAqIDwvcmVmc2VjdDI+CisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAiLi4vLi4vZ3N0L2dzdC1pMThuLWxpYi5oIgorI2luY2x1ZGUgImdzdGNhcHNmaWx0ZXIuaCIKKworZW51bQoreworICBQUk9QXzAsCisgIFBST1BfRklMVEVSX0NBUFMKK307CisKKworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCisgICAgR1NUX1BBRF9TSU5LLAorICAgIEdTVF9QQURfQUxXQVlTLAorICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOworCitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCisgICAgR1NUX1BBRF9TUkMsCisgICAgR1NUX1BBRF9BTFdBWVMsCisgICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7CisKKworR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X2NhcHNmaWx0ZXJfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X2NhcHNmaWx0ZXJfZGVidWcKKworI2RlZmluZSBfZG9faW5pdCBcCisgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9jYXBzZmlsdGVyX2RlYnVnLCAiY2Fwc2ZpbHRlciIsIDAsIFwKKyAgICAiY2Fwc2ZpbHRlciBlbGVtZW50Iik7CisjZGVmaW5lIGdzdF9jYXBzZmlsdGVyX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RDYXBzRmlsdGVyLCBnc3RfY2Fwc2ZpbHRlciwgR1NUX1RZUEVfQkFTRV9UUkFOU0ZPUk0sCisgICAgX2RvX2luaXQpOworCisKK3N0YXRpYyB2b2lkIGdzdF9jYXBzZmlsdGVyX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKK3N0YXRpYyB2b2lkIGdzdF9jYXBzZmlsdGVyX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKK3N0YXRpYyB2b2lkIGdzdF9jYXBzZmlsdGVyX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOworCitzdGF0aWMgR3N0Q2FwcyAqZ3N0X2NhcHNmaWx0ZXJfdHJhbnNmb3JtX2NhcHMgKEdzdEJhc2VUcmFuc2Zvcm0gKiBiYXNlLAorICAgIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdENhcHMgKiBjYXBzLCBHc3RDYXBzICogZmlsdGVyKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfY2Fwc2ZpbHRlcl9hY2NlcHRfY2FwcyAoR3N0QmFzZVRyYW5zZm9ybSAqIGJhc2UsCisgICAgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwgR3N0Q2FwcyAqIGNhcHMpOworc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2NhcHNmaWx0ZXJfdHJhbnNmb3JtX2lwIChHc3RCYXNlVHJhbnNmb3JtICogYmFzZSwKKyAgICBHc3RCdWZmZXIgKiBidWYpOworc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2NhcHNmaWx0ZXJfcHJlcGFyZV9idWYgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKKyAgICBHc3RCdWZmZXIgKiBpbnB1dCwgR3N0QnVmZmVyICoqIGJ1Zik7CisKK3N0YXRpYyB2b2lkCitnc3RfY2Fwc2ZpbHRlcl9jbGFzc19pbml0IChHc3RDYXBzRmlsdGVyQ2xhc3MgKiBrbGFzcykKK3sKKyAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOworICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7CisgIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqdHJhbnNfY2xhc3M7CisKKyAgZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7CisgIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9jYXBzZmlsdGVyX3NldF9wcm9wZXJ0eTsKKyAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2NhcHNmaWx0ZXJfZ2V0X3Byb3BlcnR5OworICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3N0X2NhcHNmaWx0ZXJfZGlzcG9zZTsKKworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0ZJTFRFUl9DQVBTLAorICAgICAgZ19wYXJhbV9zcGVjX2JveGVkICgiY2FwcyIsIF8oIkZpbHRlciBjYXBzIiksCisgICAgICAgICAgXygiUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuICIKKyAgICAgICAgICAgICAgIlNldHRpbmcgdGhpcyBwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyAiCisgICAgICAgICAgICAgICJvYmplY3QuIiksIEdTVF9UWVBFX0NBUFMsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisKKyAgZ3N0ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7CisgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZSAoZ3N0ZWxlbWVudF9jbGFzcywKKyAgICAgICJDYXBzRmlsdGVyIiwKKyAgICAgICJHZW5lcmljIiwKKyAgICAgICJQYXNzIGRhdGEgd2l0aG91dCBtb2RpZmljYXRpb24sIGxpbWl0aW5nIGZvcm1hdHMiLAorICAgICAgIkRhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPiIpOworICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAorICAgICAgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0ICgmc3JjdGVtcGxhdGUpKTsKKyAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKKyAgICAgIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoJnNpbmt0ZW1wbGF0ZSkpOworCisgIHRyYW5zX2NsYXNzID0gR1NUX0JBU0VfVFJBTlNGT1JNX0NMQVNTIChrbGFzcyk7CisgIHRyYW5zX2NsYXNzLT50cmFuc2Zvcm1fY2FwcyA9CisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2NhcHNmaWx0ZXJfdHJhbnNmb3JtX2NhcHMpOworICB0cmFuc19jbGFzcy0+dHJhbnNmb3JtX2lwID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9jYXBzZmlsdGVyX3RyYW5zZm9ybV9pcCk7CisgIHRyYW5zX2NsYXNzLT5hY2NlcHRfY2FwcyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfY2Fwc2ZpbHRlcl9hY2NlcHRfY2Fwcyk7CisgIHRyYW5zX2NsYXNzLT5wcmVwYXJlX291dHB1dF9idWZmZXIgPQorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9jYXBzZmlsdGVyX3ByZXBhcmVfYnVmKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9jYXBzZmlsdGVyX2luaXQgKEdzdENhcHNGaWx0ZXIgKiBmaWx0ZXIpCit7CisgIEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zID0gR1NUX0JBU0VfVFJBTlNGT1JNIChmaWx0ZXIpOworICBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2dhcF9hd2FyZSAodHJhbnMsIFRSVUUpOworICBmaWx0ZXItPmZpbHRlcl9jYXBzID0gZ3N0X2NhcHNfbmV3X2FueSAoKTsKK30KKworc3RhdGljIGdib29sZWFuCitjb3B5X2Z1bmMgKEdRdWFyayBmaWVsZF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdzdFN0cnVjdHVyZSAqIGRlc3QpCit7CisgIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlIChkZXN0LCBmaWVsZF9pZCwgdmFsdWUpOworCisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2NhcHNmaWx0ZXJfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIEdzdENhcHNGaWx0ZXIgKmNhcHNmaWx0ZXIgPSBHU1RfQ0FQU0ZJTFRFUiAob2JqZWN0KTsKKworICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfRklMVEVSX0NBUFM6eworICAgICAgR3N0Q2FwcyAqbmV3X2NhcHM7CisgICAgICBHc3RDYXBzICpvbGRfY2FwcywgKnN1Z2dlc3QsICpuZWdvOworICAgICAgY29uc3QgR3N0Q2FwcyAqbmV3X2NhcHNfdmFsID0gZ3N0X3ZhbHVlX2dldF9jYXBzICh2YWx1ZSk7CisKKyAgICAgIGlmIChuZXdfY2Fwc192YWwgPT0gTlVMTCkgeworICAgICAgICBuZXdfY2FwcyA9IGdzdF9jYXBzX25ld19hbnkgKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBuZXdfY2FwcyA9IChHc3RDYXBzICopIG5ld19jYXBzX3ZhbDsKKyAgICAgICAgZ3N0X2NhcHNfcmVmIChuZXdfY2Fwcyk7CisgICAgICB9CisKKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoY2Fwc2ZpbHRlcik7CisgICAgICBvbGRfY2FwcyA9IGNhcHNmaWx0ZXItPmZpbHRlcl9jYXBzOworICAgICAgY2Fwc2ZpbHRlci0+ZmlsdGVyX2NhcHMgPSBuZXdfY2FwczsKKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChjYXBzZmlsdGVyKTsKKworICAgICAgZ3N0X2NhcHNfdW5yZWYgKG9sZF9jYXBzKTsKKworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoY2Fwc2ZpbHRlciwgInNldCBuZXcgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgbmV3X2NhcHMpOworCisgICAgICAvKiBmaWx0ZXIgdGhlIGN1cnJlbnRseSBuZWdvdGlhdGVkIGZvcm1hdCBhZ2FpbnN0IHRoZSBuZXcgY2FwcyAqLworICAgICAgbmVnbyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAoR1NUX0JBU0VfVFJBTlNGT1JNX1NJTktfUEFEIChvYmplY3QpKTsKKyAgICAgIGlmIChuZWdvKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGNhcHNmaWx0ZXIsICJ3ZSBoYWQgbmVnb3RpYXRlZCBjYXBzICUiIEdTVF9QVFJfRk9STUFULAorICAgICAgICAgICAgbmVnbyk7CisKKyAgICAgICAgaWYgKEdfVU5MSUtFTFkgKGdzdF9jYXBzX2lzX2FueSAobmV3X2NhcHMpKSkgeworICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGNhcHNmaWx0ZXIsICJub3Qgc2V0dGluZ3MgYW55IHN1Z2dlc3Rpb24iKTsKKworICAgICAgICAgIHN1Z2dlc3QgPSBOVUxMOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIEdzdFN0cnVjdHVyZSAqczEsICpzMjsKKworICAgICAgICAgIC8qIGZpcnN0IGNoZWNrIGlmIHRoZSBuYW1lIGlzIHRoZSBzYW1lICovCisgICAgICAgICAgczEgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChuZWdvLCAwKTsKKyAgICAgICAgICBzMiA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKG5ld19jYXBzLCAwKTsKKworICAgICAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9uYW1lX2lkIChzMSkgPT0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZV9pZCAoczIpKSB7CisgICAgICAgICAgICAvKiBzYW1lIG5hbWUsIGNvcHkgYWxsIGZpZWxkcyBmcm9tIHRoZSBuZXcgY2FwcyBpbnRvIHRoZSBwcmV2aW91c2x5CisgICAgICAgICAgICAgKiBuZWdvdGlhdGVkIGNhcHMgKi8KKyAgICAgICAgICAgIHN1Z2dlc3QgPSBnc3RfY2Fwc19jb3B5IChuZWdvKTsKKyAgICAgICAgICAgIHMxID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoc3VnZ2VzdCwgMCk7CisgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2ZvcmVhY2ggKHMyLCAoR3N0U3RydWN0dXJlRm9yZWFjaEZ1bmMpIGNvcHlfZnVuYywgczEpOworICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoY2Fwc2ZpbHRlciwgImNvcGllZCBzdHJ1Y3R1cmUgZmllbGRzIik7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGNhcHNmaWx0ZXIsICJkaWZmZXJlbnQgc3RydWN0dXJlIG5hbWVzIik7CisgICAgICAgICAgICAvKiBkaWZmZXJlbnQgbmFtZXMsIHdlIGNhbiBvbmx5IHN1Z2dlc3QgdGhlIGNvbXBsZXRlIGNhcHMgKi8KKyAgICAgICAgICAgIHN1Z2dlc3QgPSBnc3RfY2Fwc19jb3B5IChuZXdfY2Fwcyk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGdzdF9jYXBzX3VucmVmIChuZWdvKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGNhcHNmaWx0ZXIsICJubyBuZWdvdGlhdGVkIGNhcHMiKTsKKyAgICAgICAgLyogU3VnZ2VzdCB0aGUgbmV3IGNhcHMsIHdlIGNhbid0IGp1c3QgcmVseSBvbiBfZ2V0X2NhcHMgYXMgdGhpcyBtYXkKKyAgICAgICAgICogYWxyZWFkeSBiZSBjYWxsZWQgYXQgdGhpcyBwb2ludCBldmVuIHRob3VnaCBubyBidWZmZXIgaGFzIGJlZW4KKyAgICAgICAgICogcHVzaGVkIHlldCAqLworICAgICAgICBzdWdnZXN0ID0gZ3N0X2NhcHNfY29weSAobmV3X2NhcHMpOworICAgICAgfQorCisgICAgICBHU1RfREVCVUdfT0JKRUNUIChjYXBzZmlsdGVyLCAic3VnZ2VzdGluZyBuZXcgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwKKyAgICAgICAgICBzdWdnZXN0KTsKKyAgICAgIGdzdF9iYXNlX3RyYW5zZm9ybV9zdWdnZXN0IChHU1RfQkFTRV9UUkFOU0ZPUk0gKG9iamVjdCksIHN1Z2dlc3QsIDApOworICAgICAgaWYgKHN1Z2dlc3QpCisgICAgICAgIGdzdF9jYXBzX3VucmVmIChzdWdnZXN0KTsKKworICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9jYXBzZmlsdGVyX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsCisgICAgR1BhcmFtU3BlYyAqIHBzcGVjKQoreworICBHc3RDYXBzRmlsdGVyICpjYXBzZmlsdGVyID0gR1NUX0NBUFNGSUxURVIgKG9iamVjdCk7CisKKyAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX0ZJTFRFUl9DQVBTOgorICAgICAgR1NUX09CSkVDVF9MT0NLIChjYXBzZmlsdGVyKTsKKyAgICAgIGdzdF92YWx1ZV9zZXRfY2FwcyAodmFsdWUsIGNhcHNmaWx0ZXItPmZpbHRlcl9jYXBzKTsKKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChjYXBzZmlsdGVyKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9jYXBzZmlsdGVyX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpCit7CisgIEdzdENhcHNGaWx0ZXIgKmZpbHRlciA9IEdTVF9DQVBTRklMVEVSIChvYmplY3QpOworCisgIGdzdF9jYXBzX3JlcGxhY2UgKCZmaWx0ZXItPmZpbHRlcl9jYXBzLCBOVUxMKTsKKworICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKK30KKworc3RhdGljIEdzdENhcHMgKgorZ3N0X2NhcHNmaWx0ZXJfdHJhbnNmb3JtX2NhcHMgKEdzdEJhc2VUcmFuc2Zvcm0gKiBiYXNlLAorICAgIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdENhcHMgKiBjYXBzLCBHc3RDYXBzICogZmlsdGVyKQoreworICBHc3RDYXBzRmlsdGVyICpjYXBzZmlsdGVyID0gR1NUX0NBUFNGSUxURVIgKGJhc2UpOworICBHc3RDYXBzICpyZXQsICpmaWx0ZXJfY2FwcywgKnRtcDsKKworICBHU1RfT0JKRUNUX0xPQ0sgKGNhcHNmaWx0ZXIpOworICBmaWx0ZXJfY2FwcyA9IGdzdF9jYXBzX3JlZiAoY2Fwc2ZpbHRlci0+ZmlsdGVyX2NhcHMpOworICBHU1RfT0JKRUNUX1VOTE9DSyAoY2Fwc2ZpbHRlcik7CisKKyAgaWYgKGZpbHRlcikgeworICAgIHRtcCA9CisgICAgICAgIGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChmaWx0ZXIsIGZpbHRlcl9jYXBzLCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOworICAgIGdzdF9jYXBzX3VucmVmIChmaWx0ZXJfY2Fwcyk7CisgICAgZmlsdGVyX2NhcHMgPSB0bXA7CisgIH0KKworICByZXQgPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyX2NhcHMsIGNhcHMsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoY2Fwc2ZpbHRlciwgImlucHV0OiAgICAgJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOworICBHU1RfREVCVUdfT0JKRUNUIChjYXBzZmlsdGVyLCAiZmlsdGVyOiAgICAlIiBHU1RfUFRSX0ZPUk1BVCwgZmlsdGVyKTsKKyAgR1NUX0RFQlVHX09CSkVDVCAoY2Fwc2ZpbHRlciwgImNhcHMgZmlsdGVyOiAgICAlIiBHU1RfUFRSX0ZPUk1BVCwKKyAgICAgIGZpbHRlcl9jYXBzKTsKKyAgR1NUX0RFQlVHX09CSkVDVCAoY2Fwc2ZpbHRlciwgImludGVyc2VjdDogJSIgR1NUX1BUUl9GT1JNQVQsIHJldCk7CisKKyAgZ3N0X2NhcHNfdW5yZWYgKGZpbHRlcl9jYXBzKTsKKworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9jYXBzZmlsdGVyX2FjY2VwdF9jYXBzIChHc3RCYXNlVHJhbnNmb3JtICogYmFzZSwKKyAgICBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBHc3RDYXBzICogY2FwcykKK3sKKyAgR3N0Q2Fwc0ZpbHRlciAqY2Fwc2ZpbHRlciA9IEdTVF9DQVBTRklMVEVSIChiYXNlKTsKKyAgR3N0Q2FwcyAqZmlsdGVyX2NhcHM7CisgIGdib29sZWFuIHJldDsKKworICBHU1RfT0JKRUNUX0xPQ0sgKGNhcHNmaWx0ZXIpOworICBmaWx0ZXJfY2FwcyA9IGdzdF9jYXBzX3JlZiAoY2Fwc2ZpbHRlci0+ZmlsdGVyX2NhcHMpOworICBHU1RfT0JKRUNUX1VOTE9DSyAoY2Fwc2ZpbHRlcik7CisKKyAgcmV0ID0gZ3N0X2NhcHNfY2FuX2ludGVyc2VjdCAoY2FwcywgZmlsdGVyX2NhcHMpOworICBHU1RfREVCVUdfT0JKRUNUIChjYXBzZmlsdGVyLCAiY2FuIGludGVyc2VjdDogJWQiLCByZXQpOworICBpZiAocmV0KSB7CisgICAgLyogaWYgd2UgY2FuIGludGVyc2VjdCwgc2VlIGlmIHRoZSBvdGhlciBlbmQgYWxzbyBhY2NlcHRzICovCisgICAgaWYgKGRpcmVjdGlvbiA9PSBHU1RfUEFEX1NSQykKKyAgICAgIHJldCA9IGdzdF9wYWRfcGVlcl9hY2NlcHRfY2FwcyAoR1NUX0JBU0VfVFJBTlNGT1JNX1NJTktfUEFEIChiYXNlKSwgY2Fwcyk7CisgICAgZWxzZQorICAgICAgcmV0ID0gZ3N0X3BhZF9wZWVyX2FjY2VwdF9jYXBzIChHU1RfQkFTRV9UUkFOU0ZPUk1fU1JDX1BBRCAoYmFzZSksIGNhcHMpOworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGNhcHNmaWx0ZXIsICJwZWVyIGFjY2VwdDogJWQiLCByZXQpOworICB9CisKKyAgZ3N0X2NhcHNfdW5yZWYgKGZpbHRlcl9jYXBzKTsKKworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgR3N0Rmxvd1JldHVybgorZ3N0X2NhcHNmaWx0ZXJfdHJhbnNmb3JtX2lwIChHc3RCYXNlVHJhbnNmb3JtICogYmFzZSwgR3N0QnVmZmVyICogYnVmKQoreworICAvKiBObyBhY3R1YWwgd29yayBoZXJlLiBJdCdzIGFsbCBkb25lIGluIHRoZSBwcmVwYXJlIG91dHB1dCBidWZmZXIKKyAgICogZnVuYy4gKi8KKyAgcmV0dXJuIEdTVF9GTE9XX09LOworfQorCisvKiBPdXRwdXQgYnVmZmVyIHByZXBhcmF0aW9uLi4uIGlmIHRoZSBidWZmZXIgaGFzIG5vIGNhcHMsIGFuZAorICogb3VyIGFsbG93ZWQgb3V0cHV0IGNhcHMgaXMgZml4ZWQsIHRoZW4gZ2l2ZSB0aGUgY2FwcyB0byB0aGUKKyAqIGJ1ZmZlci4KKyAqIFRoaXMgZW5zdXJlcyB0aGF0IG91dGdvaW5nIGJ1ZmZlcnMgaGF2ZSBjYXBzIGlmIHdlIGNhbiwgc28KKyAqIHRoYXQgcGlwZWxpbmVzIGxpa2U6CisgKiAgIGdzdC1sYXVuY2ggZmlsZXNyYyBsb2NhdGlvbj1yYXdzYW1wbGVzLnJhdyAhCisgKiAgICAgICBhdWRpby94LXJhdy1pbnQsd2lkdGg9MTYsZGVwdGg9MTYscmF0ZT00ODAwMCxjaGFubmVscz0yLAorICogICAgICAgZW5kaWFubmVzcz00MzIxLHNpZ25lZD0nKGJvb2xlYW4pJ3RydWUgISBhbHNhc2luaworICogd2lsbCB3b3JrLgorICovCitzdGF0aWMgR3N0Rmxvd1JldHVybgorZ3N0X2NhcHNmaWx0ZXJfcHJlcGFyZV9idWYgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0QnVmZmVyICogaW5wdXQsCisgICAgR3N0QnVmZmVyICoqIGJ1ZikKK3sKKyAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKKworICAvKiBhbHdheXMgcmV0dXJuIHRoZSBpbnB1dCBhcyBvdXRwdXQgYnVmZmVyICovCisgICpidWYgPSBpbnB1dDsKKworICBpZiAoIWdzdF9wYWRfaGFzX2N1cnJlbnRfY2FwcyAodHJhbnMtPnNpbmtwYWQpKSB7CisgICAgLyogQnVmZmVyIGhhcyBubyBjYXBzLiBTZWUgaWYgdGhlIG91dHB1dCBwYWQgb25seSBzdXBwb3J0cyBmaXhlZCBjYXBzICovCisgICAgR3N0Q2FwcyAqb3V0X2NhcHM7CisKKyAgICBHU1RfTE9HX09CSkVDVCAodHJhbnMsICJJbnB1dCBwYWQgZG9lcyBub3QgaGF2ZSBjYXBzIik7CisKKyAgICBvdXRfY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAodHJhbnMtPnNyY3BhZCk7CisgICAgaWYgKG91dF9jYXBzID09IE5VTEwpIHsKKyAgICAgIG91dF9jYXBzID0gZ3N0X3BhZF9nZXRfYWxsb3dlZF9jYXBzICh0cmFucy0+c3JjcGFkKTsKKyAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChvdXRfY2FwcyAhPSBOVUxMLCBHU1RfRkxPV19FUlJPUik7CisgICAgfQorCisgICAgb3V0X2NhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChvdXRfY2Fwcyk7CisgICAgZ3N0X2NhcHNfZG9fc2ltcGxpZnkgKG91dF9jYXBzKTsKKworICAgIGlmIChnc3RfY2Fwc19pc19maXhlZCAob3V0X2NhcHMpICYmICFnc3RfY2Fwc19pc19lbXB0eSAob3V0X2NhcHMpKSB7CisgICAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgIkhhdmUgZml4ZWQgb3V0cHV0IGNhcHMgJSIKKyAgICAgICAgICBHU1RfUFRSX0ZPUk1BVCAiIHRvIGFwcGx5IHRvIHNyY3BhZCIsIG91dF9jYXBzKTsKKworICAgICAgaWYgKCFnc3RfcGFkX2hhc19jdXJyZW50X2NhcHMgKHRyYW5zLT5zcmNwYWQpKQorICAgICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHRyYW5zLT5zcmNwYWQsIGdzdF9ldmVudF9uZXdfY2FwcyAob3V0X2NhcHMpKTsKKyAgICB9IGVsc2UgeworICAgICAgZ2NoYXIgKmNhcHNfc3RyID0gZ3N0X2NhcHNfdG9fc3RyaW5nIChvdXRfY2Fwcyk7CisKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiQ2Fubm90IGNob29zZSBjYXBzLiBIYXZlIHVuZml4ZWQgb3V0cHV0IGNhcHMgJSIKKyAgICAgICAgICBHU1RfUFRSX0ZPUk1BVCwgb3V0X2NhcHMpOworICAgICAgZ3N0X2NhcHNfdW5yZWYgKG91dF9jYXBzKTsKKworICAgICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7CisgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAodHJhbnMsIFNUUkVBTSwgRk9STUFULAorICAgICAgICAgICgiRmlsdGVyIGNhcHMgZG8gbm90IGNvbXBsZXRlbHkgc3BlY2lmeSB0aGUgb3V0cHV0IGZvcm1hdCIpLAorICAgICAgICAgICgiT3V0cHV0IGNhcHMgYXJlIHVuZml4ZWQ6ICVzIiwgY2Fwc19zdHIpKTsKKyAgICAgIGdfZnJlZSAoY2Fwc19zdHIpOworICAgIH0KKyAgfQorCisgIHJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuaCBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMzJlNjYKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuaApAQCAtMCwwICsxLDY3IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+CisgKgorICogZ3N0aWRlbnRpdHkuaDoKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKKyNpZm5kZWYgX19HU1RfQ0FQU0ZJTFRFUl9IX18KKyNkZWZpbmUgX19HU1RfQ0FQU0ZJTFRFUl9IX18KKworCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEdTVF9UWVBFX0NBUFNGSUxURVIgXAorICAoZ3N0X2NhcHNmaWx0ZXJfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgR1NUX0NBUFNGSUxURVIob2JqKSBcCisgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9DQVBTRklMVEVSLEdzdENhcHNGaWx0ZXIpKQorI2RlZmluZSBHU1RfQ0FQU0ZJTFRFUl9DTEFTUyhrbGFzcykgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9DQVBTRklMVEVSLEdzdENhcHNGaWx0ZXJDbGFzcykpCisjZGVmaW5lIEdTVF9JU19DQVBTRklMVEVSKG9iaikgXAorICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfQ0FQU0ZJTFRFUikpCisjZGVmaW5lIEdTVF9JU19DQVBTRklMVEVSX0NMQVNTKGtsYXNzKSBcCisgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0NBUFNGSUxURVIpKQorCit0eXBlZGVmIHN0cnVjdCBfR3N0Q2Fwc0ZpbHRlciBHc3RDYXBzRmlsdGVyOwordHlwZWRlZiBzdHJ1Y3QgX0dzdENhcHNGaWx0ZXJDbGFzcyBHc3RDYXBzRmlsdGVyQ2xhc3M7CisKKy8qKgorICogR3N0Q2Fwc0ZpbHRlcjoKKyAqCisgKiBUaGUgb3BhcXVlICNHc3RDYXBzRmlsdGVyIGRhdGEgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgX0dzdENhcHNGaWx0ZXIgeworICBHc3RCYXNlVHJhbnNmb3JtIHRyYW5zOworCisgIEdzdENhcHMgKmZpbHRlcl9jYXBzOworfTsKKworc3RydWN0IF9Hc3RDYXBzRmlsdGVyQ2xhc3MgeworICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgdHJhbnNfY2xhc3M7Cit9OworCitHVHlwZSBnc3RfY2Fwc2ZpbHRlcl9nZXRfdHlwZSAodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9DQVBTRklMVEVSX0hfXyAqLworCmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGVsZW1lbnRzLmMgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGVsZW1lbnRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQwMDcyOQotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYwpAQCAtMCwwICsxLDk4IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+CisgKgorICogZ3N0ZWxlbWVudHMuYzoKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCisjaW5jbHVkZSAiZ3N0Y2Fwc2ZpbHRlci5oIgorI2luY2x1ZGUgImdzdGZha2VzaW5rLmgiCisjaW5jbHVkZSAiZ3N0ZmFrZXNyYy5oIgorI2luY2x1ZGUgImdzdGZkc3JjLmgiCisjaW5jbHVkZSAiZ3N0ZmRzaW5rLmgiCisjaW5jbHVkZSAiZ3N0ZmlsZXNpbmsuaCIKKyNpbmNsdWRlICJnc3RmaWxlc3JjLmgiCisjaW5jbHVkZSAiZ3N0ZnVubmVsLmgiCisjaW5jbHVkZSAiZ3N0aWRlbnRpdHkuaCIKKyNpbmNsdWRlICJnc3RpbnB1dHNlbGVjdG9yLmgiCisjaW5jbHVkZSAiZ3N0b3V0cHV0c2VsZWN0b3IuaCIKKyNpbmNsdWRlICJnc3RtdWx0aXF1ZXVlLmgiCisjaW5jbHVkZSAiZ3N0cXVldWUuaCIKKyNpbmNsdWRlICJnc3RxdWV1ZTIuaCIKKyNpbmNsdWRlICJnc3R0ZWUuaCIKKyNpbmNsdWRlICJnc3R0eXBlZmluZGVsZW1lbnQuaCIKKyNpbmNsdWRlICJnc3R2YWx2ZS5oIgorCitzdHJ1Y3QgX2VsZW1lbnRzX2VudHJ5Cit7CisgIGNvbnN0IGdjaGFyICpuYW1lOworICBndWludCByYW5rOworICAgIEdUeXBlICgqdHlwZSkgKHZvaWQpOworfTsKKworCitzdGF0aWMgc3RydWN0IF9lbGVtZW50c19lbnRyeSBfZWxlbWVudHNbXSA9IHsKKyAgeyJjYXBzZmlsdGVyIiwgR1NUX1JBTktfTk9ORSwgZ3N0X2NhcHNmaWx0ZXJfZ2V0X3R5cGV9LAorICB7ImZha2VzcmMiLCBHU1RfUkFOS19OT05FLCBnc3RfZmFrZV9zcmNfZ2V0X3R5cGV9LAorICB7ImZha2VzaW5rIiwgR1NUX1JBTktfTk9ORSwgZ3N0X2Zha2Vfc2lua19nZXRfdHlwZX0sCisjaWYgZGVmaW5lZChIQVZFX1NZU19TT0NLRVRfSCkgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyAgeyJmZHNyYyIsIEdTVF9SQU5LX05PTkUsIGdzdF9mZF9zcmNfZ2V0X3R5cGV9LAorICB7ImZkc2luayIsIEdTVF9SQU5LX05PTkUsIGdzdF9mZF9zaW5rX2dldF90eXBlfSwKKyNlbmRpZgorICB7ImZpbGVzcmMiLCBHU1RfUkFOS19QUklNQVJZLCBnc3RfZmlsZV9zcmNfZ2V0X3R5cGV9LAorICB7ImZ1bm5lbCIsIEdTVF9SQU5LX05PTkUsIGdzdF9mdW5uZWxfZ2V0X3R5cGV9LAorICB7ImlkZW50aXR5IiwgR1NUX1JBTktfTk9ORSwgZ3N0X2lkZW50aXR5X2dldF90eXBlfSwKKyAgeyJpbnB1dC1zZWxlY3RvciIsIEdTVF9SQU5LX05PTkUsIGdzdF9pbnB1dF9zZWxlY3Rvcl9nZXRfdHlwZX0sCisgIHsib3V0cHV0LXNlbGVjdG9yIiwgR1NUX1JBTktfTk9ORSwgZ3N0X291dHB1dF9zZWxlY3Rvcl9nZXRfdHlwZX0sCisgIHsicXVldWUiLCBHU1RfUkFOS19OT05FLCBnc3RfcXVldWVfZ2V0X3R5cGV9LAorICB7InF1ZXVlMiIsIEdTVF9SQU5LX05PTkUsIGdzdF9xdWV1ZTJfZ2V0X3R5cGV9LAorICB7ImZpbGVzaW5rIiwgR1NUX1JBTktfUFJJTUFSWSwgZ3N0X2ZpbGVfc2lua19nZXRfdHlwZX0sCisgIHsidGVlIiwgR1NUX1JBTktfTk9ORSwgZ3N0X3RlZV9nZXRfdHlwZX0sCisgIHsidHlwZWZpbmQiLCBHU1RfUkFOS19OT05FLCBnc3RfdHlwZV9maW5kX2VsZW1lbnRfZ2V0X3R5cGV9LAorICB7Im11bHRpcXVldWUiLCBHU1RfUkFOS19OT05FLCBnc3RfbXVsdGlfcXVldWVfZ2V0X3R5cGV9LAorICB7InZhbHZlIiwgR1NUX1JBTktfTk9ORSwgZ3N0X3ZhbHZlX2dldF90eXBlfSwKKyAge05VTEwsIDB9LAorfTsKKworc3RhdGljIGdib29sZWFuCitwbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQoreworICBzdHJ1Y3QgX2VsZW1lbnRzX2VudHJ5ICpteV9lbGVtZW50cyA9IF9lbGVtZW50czsKKworICB3aGlsZSAoKCpteV9lbGVtZW50cykubmFtZSkgeworICAgIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgKCpteV9lbGVtZW50cykubmFtZSwgKCpteV9lbGVtZW50cykucmFuaywKKyAgICAgICAgICAgICgoKm15X2VsZW1lbnRzKS50eXBlKSAoKSkpCisgICAgICByZXR1cm4gRkFMU0U7CisgICAgbXlfZWxlbWVudHMrKzsKKyAgfQorCisgIHJldHVybiBUUlVFOworfQorCitHU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCisgICAgR1NUX1ZFUlNJT05fTUlOT1IsCisgICAgImNvcmVlbGVtZW50cyIsCisgICAgInN0YW5kYXJkIEdTdHJlYW1lciBlbGVtZW50cyIsCisgICAgcGx1Z2luX2luaXQsIFZFUlNJT04sIEdTVF9MSUNFTlNFLCBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pOwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZTZhNWMKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmMKQEAgLTAsMCArMSw2MDkgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+CisgKgorICogZ3N0ZmFrZXNpbmsuYzoKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworLyoqCisgKiBTRUNUSU9OOmVsZW1lbnQtZmFrZXNpbmsKKyAqIEBzZWVfYWxzbzogI0dzdEZha2VTcmMKKyAqCisgKiBEdW1teSBzaW5rIHRoYXQgc3dhbGxvd3MgZXZlcnl0aGluZy4KKyAqIAorICogPHJlZnNlY3QyPgorICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgorICogfFsKKyAqIGdzdC1sYXVuY2ggYXVkaW90ZXN0c3JjIG51bS1idWZmZXJzPTEwMDAgISBmYWtlc2luayBzeW5jPWZhbHNlCisgKiBdfCBSZW5kZXIgMTAwMCBhdWRpbyBidWZmZXJzIChvZiBkZWZhdWx0IHNpemUpIGFzIGZhc3QgYXMgcG9zc2libGUuCisgKiA8L3JlZnNlY3QyPgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAiZ3N0ZmFrZXNpbmsuaCIKKyNpbmNsdWRlIDxnc3QvZ3N0bWFyc2hhbC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKKyAgICBHU1RfUEFEX1NJTkssCisgICAgR1NUX1BBRF9BTFdBWVMsCisgICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7CisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9mYWtlX3NpbmtfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X2Zha2Vfc2lua19kZWJ1ZworCisvKiBGYWtlU2luayBzaWduYWxzIGFuZCBhcmdzICovCitlbnVtCit7CisgIC8qIEZJTEwgTUUgKi8KKyAgU0lHTkFMX0hBTkRPRkYsCisgIFNJR05BTF9QUkVST0xMX0hBTkRPRkYsCisgIExBU1RfU0lHTkFMCit9OworCisjZGVmaW5lIERFRkFVTFRfU1lOQyBGQUxTRQorCisjZGVmaW5lIERFRkFVTFRfU1RBVEVfRVJST1IgRkFLRV9TSU5LX1NUQVRFX0VSUk9SX05PTkUKKyNkZWZpbmUgREVGQVVMVF9TSUxFTlQgRkFMU0UKKyNkZWZpbmUgREVGQVVMVF9EVU1QIEZBTFNFCisjZGVmaW5lIERFRkFVTFRfU0lHTkFMX0hBTkRPRkZTIEZBTFNFCisjZGVmaW5lIERFRkFVTFRfTEFTVF9NRVNTQUdFIE5VTEwKKyNkZWZpbmUgREVGQVVMVF9DQU5fQUNUSVZBVEVfUFVTSCBUUlVFCisjZGVmaW5lIERFRkFVTFRfQ0FOX0FDVElWQVRFX1BVTEwgRkFMU0UKKyNkZWZpbmUgREVGQVVMVF9OVU1fQlVGRkVSUyAtMQorCitlbnVtCit7CisgIFBST1BfMCwKKyAgUFJPUF9TVEFURV9FUlJPUiwKKyAgUFJPUF9TSUxFTlQsCisgIFBST1BfRFVNUCwKKyAgUFJPUF9TSUdOQUxfSEFORE9GRlMsCisgIFBST1BfTEFTVF9NRVNTQUdFLAorICBQUk9QX0NBTl9BQ1RJVkFURV9QVVNILAorICBQUk9QX0NBTl9BQ1RJVkFURV9QVUxMLAorICBQUk9QX05VTV9CVUZGRVJTCit9OworCisjZGVmaW5lIEdTVF9UWVBFX0ZBS0VfU0lOS19TVEFURV9FUlJPUiAoZ3N0X2Zha2Vfc2lua19zdGF0ZV9lcnJvcl9nZXRfdHlwZSgpKQorc3RhdGljIEdUeXBlCitnc3RfZmFrZV9zaW5rX3N0YXRlX2Vycm9yX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgR1R5cGUgZmFrZXNpbmtfc3RhdGVfZXJyb3JfdHlwZSA9IDA7CisgIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIGZha2VzaW5rX3N0YXRlX2Vycm9yW10gPSB7CisgICAge0ZBS0VfU0lOS19TVEFURV9FUlJPUl9OT05FLCAiTm8gc3RhdGUgY2hhbmdlIGVycm9ycyIsICJub25lIn0sCisgICAge0ZBS0VfU0lOS19TVEFURV9FUlJPUl9OVUxMX1JFQURZLAorICAgICAgICAiRmFpbCBzdGF0ZSBjaGFuZ2UgZnJvbSBOVUxMIHRvIFJFQURZIiwgIm51bGwtdG8tcmVhZHkifSwKKyAgICB7RkFLRV9TSU5LX1NUQVRFX0VSUk9SX1JFQURZX1BBVVNFRCwKKyAgICAgICAgIkZhaWwgc3RhdGUgY2hhbmdlIGZyb20gUkVBRFkgdG8gUEFVU0VEIiwgInJlYWR5LXRvLXBhdXNlZCJ9LAorICAgIHtGQUtFX1NJTktfU1RBVEVfRVJST1JfUEFVU0VEX1BMQVlJTkcsCisgICAgICAgICJGYWlsIHN0YXRlIGNoYW5nZSBmcm9tIFBBVVNFRCB0byBQTEFZSU5HIiwgInBhdXNlZC10by1wbGF5aW5nIn0sCisgICAge0ZBS0VfU0lOS19TVEFURV9FUlJPUl9QTEFZSU5HX1BBVVNFRCwKKyAgICAgICAgIkZhaWwgc3RhdGUgY2hhbmdlIGZyb20gUExBWUlORyB0byBQQVVTRUQiLCAicGxheWluZy10by1wYXVzZWQifSwKKyAgICB7RkFLRV9TSU5LX1NUQVRFX0VSUk9SX1BBVVNFRF9SRUFEWSwKKyAgICAgICAgIkZhaWwgc3RhdGUgY2hhbmdlIGZyb20gUEFVU0VEIHRvIFJFQURZIiwgInBhdXNlZC10by1yZWFkeSJ9LAorICAgIHtGQUtFX1NJTktfU1RBVEVfRVJST1JfUkVBRFlfTlVMTCwKKyAgICAgICAgIkZhaWwgc3RhdGUgY2hhbmdlIGZyb20gUkVBRFkgdG8gTlVMTCIsICJyZWFkeS10by1udWxsIn0sCisgICAgezAsIE5VTEwsIE5VTEx9LAorICB9OworCisgIGlmICghZmFrZXNpbmtfc3RhdGVfZXJyb3JfdHlwZSkgeworICAgIGZha2VzaW5rX3N0YXRlX2Vycm9yX3R5cGUgPQorICAgICAgICBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0RmFrZVNpbmtTdGF0ZUVycm9yIiwgZmFrZXNpbmtfc3RhdGVfZXJyb3IpOworICB9CisgIHJldHVybiBmYWtlc2lua19zdGF0ZV9lcnJvcl90eXBlOworfQorCisjZGVmaW5lIF9kb19pbml0IFwKKyAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X2Zha2Vfc2lua19kZWJ1ZywgImZha2VzaW5rIiwgMCwgImZha2VzaW5rIGVsZW1lbnQiKTsKKyNkZWZpbmUgZ3N0X2Zha2Vfc2lua19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0RmFrZVNpbmssIGdzdF9mYWtlX3NpbmssIEdTVF9UWVBFX0JBU0VfU0lOSywKKyAgICBfZG9faW5pdCk7CisKK3N0YXRpYyB2b2lkIGdzdF9mYWtlX3Npbmtfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOworc3RhdGljIHZvaWQgZ3N0X2Zha2Vfc2lua19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7CitzdGF0aWMgdm9pZCBnc3RfZmFrZV9zaW5rX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqKTsKKworc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9mYWtlX3NpbmtfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKKyAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKKworc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2Zha2Vfc2lua19wcmVyb2xsIChHc3RCYXNlU2luayAqIGJzaW5rLAorICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7CitzdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfZmFrZV9zaW5rX3JlbmRlciAoR3N0QmFzZVNpbmsgKiBic2luaywKKyAgICBHc3RCdWZmZXIgKiBidWZmZXIpOworc3RhdGljIGdib29sZWFuIGdzdF9mYWtlX3NpbmtfZXZlbnQgKEdzdEJhc2VTaW5rICogYnNpbmssIEdzdEV2ZW50ICogZXZlbnQpOworCitzdGF0aWMgZ3VpbnQgZ3N0X2Zha2Vfc2lua19zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OworCitzdGF0aWMgR1BhcmFtU3BlYyAqcHNwZWNfbGFzdF9tZXNzYWdlID0gTlVMTDsKKworc3RhdGljIHZvaWQKK21hcnNoYWxfVk9JRF9fTUlOSU9CSkVDVF9PQkpFQ1QgKEdDbG9zdXJlICogY2xvc3VyZSwgR1ZhbHVlICogcmV0dXJuX3ZhbHVlLAorICAgIGd1aW50IG5fcGFyYW1fdmFsdWVzLCBjb25zdCBHVmFsdWUgKiBwYXJhbV92YWx1ZXMsIGdwb2ludGVyIGludm9jYXRpb25faGludCwKKyAgICBncG9pbnRlciBtYXJzaGFsX2RhdGEpCit7CisgIHR5cGVkZWYgdm9pZCAoKm1hcnNoYWxmdW5jX1ZPSURfX01JTklPQkpFQ1RfT0JKRUNUKSAoZ3BvaW50ZXIgb2JqLAorICAgICAgZ3BvaW50ZXIgYXJnMSwgZ3BvaW50ZXIgYXJnMiwgZ3BvaW50ZXIgZGF0YTIpOworICByZWdpc3RlciBtYXJzaGFsZnVuY19WT0lEX19NSU5JT0JKRUNUX09CSkVDVCBjYWxsYmFjazsKKyAgcmVnaXN0ZXIgR0NDbG9zdXJlICpjYyA9IChHQ0Nsb3N1cmUgKikgY2xvc3VyZTsKKyAgcmVnaXN0ZXIgZ3BvaW50ZXIgZGF0YTEsIGRhdGEyOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKG5fcGFyYW1fdmFsdWVzID09IDMpOworCisgIGlmIChHX0NDTE9TVVJFX1NXQVBfREFUQSAoY2xvc3VyZSkpIHsKKyAgICBkYXRhMSA9IGNsb3N1cmUtPmRhdGE7CisgICAgZGF0YTIgPSBnX3ZhbHVlX3BlZWtfcG9pbnRlciAocGFyYW1fdmFsdWVzICsgMCk7CisgIH0gZWxzZSB7CisgICAgZGF0YTEgPSBnX3ZhbHVlX3BlZWtfcG9pbnRlciAocGFyYW1fdmFsdWVzICsgMCk7CisgICAgZGF0YTIgPSBjbG9zdXJlLT5kYXRhOworICB9CisgIGNhbGxiYWNrID0KKyAgICAgIChtYXJzaGFsZnVuY19WT0lEX19NSU5JT0JKRUNUX09CSkVDVCkgKG1hcnNoYWxfZGF0YSA/IG1hcnNoYWxfZGF0YSA6CisgICAgICBjYy0+Y2FsbGJhY2spOworCisgIGNhbGxiYWNrIChkYXRhMSwgZ192YWx1ZV9nZXRfYm94ZWQgKHBhcmFtX3ZhbHVlcyArIDEpLAorICAgICAgZ192YWx1ZV9nZXRfb2JqZWN0IChwYXJhbV92YWx1ZXMgKyAyKSwgZGF0YTIpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2Zha2Vfc2lua19jbGFzc19pbml0IChHc3RGYWtlU2lua0NsYXNzICoga2xhc3MpCit7CisgIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKKyAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOworICBHc3RCYXNlU2lua0NsYXNzICpnc3RiYXNlX3NpbmtfY2xhc3M7CisKKyAgZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7CisgIGdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOworICBnc3RiYXNlX3NpbmtfY2xhc3MgPSBHU1RfQkFTRV9TSU5LX0NMQVNTIChrbGFzcyk7CisKKyAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2Zha2Vfc2lua19zZXRfcHJvcGVydHk7CisgIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9mYWtlX3NpbmtfZ2V0X3Byb3BlcnR5OworICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9mYWtlX3NpbmtfZmluYWxpemU7CisKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TVEFURV9FUlJPUiwKKyAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgic3RhdGUtZXJyb3IiLCAiU3RhdGUgRXJyb3IiLAorICAgICAgICAgICJHZW5lcmF0ZSBhIHN0YXRlIGNoYW5nZSBlcnJvciIsIEdTVF9UWVBFX0ZBS0VfU0lOS19TVEFURV9FUlJPUiwKKyAgICAgICAgICBERUZBVUxUX1NUQVRFX0VSUk9SLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKyAgcHNwZWNfbGFzdF9tZXNzYWdlID0gZ19wYXJhbV9zcGVjX3N0cmluZyAoImxhc3QtbWVzc2FnZSIsICJMYXN0IE1lc3NhZ2UiLAorICAgICAgIlRoZSBtZXNzYWdlIGRlc2NyaWJpbmcgY3VycmVudCBzdGF0dXMiLCBERUZBVUxUX0xBU1RfTUVTU0FHRSwKKyAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKTsKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9MQVNUX01FU1NBR0UsCisgICAgICBwc3BlY19sYXN0X21lc3NhZ2UpOworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NJR05BTF9IQU5ET0ZGUywKKyAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgic2lnbmFsLWhhbmRvZmZzIiwgIlNpZ25hbCBoYW5kb2ZmcyIsCisgICAgICAgICAgIlNlbmQgYSBzaWduYWwgYmVmb3JlIHVucmVmZmluZyB0aGUgYnVmZmVyIiwgREVGQVVMVF9TSUdOQUxfSEFORE9GRlMsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU0lMRU5ULAorICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJzaWxlbnQiLCAiU2lsZW50IiwKKyAgICAgICAgICAiRG9uJ3QgcHJvZHVjZSBsYXN0X21lc3NhZ2UgZXZlbnRzIiwgREVGQVVMVF9TSUxFTlQsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRFVNUCwKKyAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiZHVtcCIsICJEdW1wIiwgIkR1bXAgYnVmZmVyIGNvbnRlbnRzIHRvIHN0ZG91dCIsCisgICAgICAgICAgREVGQVVMVF9EVU1QLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywKKyAgICAgIFBST1BfQ0FOX0FDVElWQVRFX1BVU0gsCisgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImNhbi1hY3RpdmF0ZS1wdXNoIiwgIkNhbiBhY3RpdmF0ZSBwdXNoIiwKKyAgICAgICAgICAiQ2FuIGFjdGl2YXRlIGluIHB1c2ggbW9kZSIsIERFRkFVTFRfQ0FOX0FDVElWQVRFX1BVU0gsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsCisgICAgICBQUk9QX0NBTl9BQ1RJVkFURV9QVUxMLAorICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJjYW4tYWN0aXZhdGUtcHVsbCIsICJDYW4gYWN0aXZhdGUgcHVsbCIsCisgICAgICAgICAgIkNhbiBhY3RpdmF0ZSBpbiBwdWxsIG1vZGUiLCBERUZBVUxUX0NBTl9BQ1RJVkFURV9QVUxMLAorICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX05VTV9CVUZGRVJTLAorICAgICAgZ19wYXJhbV9zcGVjX2ludCAoIm51bS1idWZmZXJzIiwgIm51bS1idWZmZXJzIiwKKyAgICAgICAgICAiTnVtYmVyIG9mIGJ1ZmZlcnMgdG8gYWNjZXB0IGdvaW5nIEVPUyIsIC0xLCBHX01BWElOVCwKKyAgICAgICAgICBERUZBVUxUX05VTV9CVUZGRVJTLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKworICAvKioKKyAgICogR3N0RmFrZVNpbms6OmhhbmRvZmY6CisgICAqIEBmYWtlc2luazogdGhlIGZha2VzaW5rIGluc3RhbmNlCisgICAqIEBidWZmZXI6IHRoZSBidWZmZXIgdGhhdCBqdXN0IGhhcyBiZWVuIHJlY2VpdmVkCisgICAqIEBwYWQ6IHRoZSBwYWQgdGhhdCByZWNlaXZlZCBpdAorICAgKgorICAgKiBUaGlzIHNpZ25hbCBnZXRzIGVtaXR0ZWQgYmVmb3JlIHVucmVmZmluZyB0aGUgYnVmZmVyLgorICAgKi8KKyAgZ3N0X2Zha2Vfc2lua19zaWduYWxzW1NJR05BTF9IQU5ET0ZGXSA9CisgICAgICBnX3NpZ25hbF9uZXcgKCJoYW5kb2ZmIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICBHX1NUUlVDVF9PRkZTRVQgKEdzdEZha2VTaW5rQ2xhc3MsIGhhbmRvZmYpLCBOVUxMLCBOVUxMLAorICAgICAgbWFyc2hhbF9WT0lEX19NSU5JT0JKRUNUX09CSkVDVCwgR19UWVBFX05PTkUsIDIsCisgICAgICBHU1RfVFlQRV9CVUZGRVIsIEdTVF9UWVBFX1BBRCk7CisKKyAgLyoqCisgICAqIEdzdEZha2VTaW5rOjpwcmVyb2xsLWhhbmRvZmY6CisgICAqIEBmYWtlc2luazogdGhlIGZha2VzaW5rIGluc3RhbmNlCisgICAqIEBidWZmZXI6IHRoZSBidWZmZXIgdGhhdCBqdXN0IGhhcyBiZWVuIHJlY2VpdmVkCisgICAqIEBwYWQ6IHRoZSBwYWQgdGhhdCByZWNlaXZlZCBpdAorICAgKgorICAgKiBUaGlzIHNpZ25hbCBnZXRzIGVtaXR0ZWQgYmVmb3JlIHVucmVmZmluZyB0aGUgYnVmZmVyLgorICAgKgorICAgKiBTaW5jZTogMC4xMC43CisgICAqLworICBnc3RfZmFrZV9zaW5rX3NpZ25hbHNbU0lHTkFMX1BSRVJPTExfSEFORE9GRl0gPQorICAgICAgZ19zaWduYWxfbmV3ICgicHJlcm9sbC1oYW5kb2ZmIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKKyAgICAgIEdfU0lHTkFMX1JVTl9MQVNULCBHX1NUUlVDVF9PRkZTRVQgKEdzdEZha2VTaW5rQ2xhc3MsIHByZXJvbGxfaGFuZG9mZiksCisgICAgICBOVUxMLCBOVUxMLCBtYXJzaGFsX1ZPSURfX01JTklPQkpFQ1RfT0JKRUNULCBHX1RZUEVfTk9ORSwgMiwKKyAgICAgIEdTVF9UWVBFX0JVRkZFUiwgR1NUX1RZUEVfUEFEKTsKKworICBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlsc19zaW1wbGUgKGdzdGVsZW1lbnRfY2xhc3MsCisgICAgICAiRmFrZSBTaW5rIiwKKyAgICAgICJTaW5rIiwKKyAgICAgICJCbGFjayBob2xlIGZvciBkYXRhIiwKKyAgICAgICJFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PiwgIgorICAgICAgIldpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+LCAiCisgICAgICAiTXIuICdmcmFnLW1lLW1vcmUnIFZhbmRlcndpbmdvIDx3aW5nb0BmbHVlbmRvLmNvbT4iKTsKKyAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKKyAgICAgIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoJnNpbmt0ZW1wbGF0ZSkpOworCisgIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9CisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Zha2Vfc2lua19jaGFuZ2Vfc3RhdGUpOworCisgIGdzdGJhc2Vfc2lua19jbGFzcy0+ZXZlbnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Zha2Vfc2lua19ldmVudCk7CisgIGdzdGJhc2Vfc2lua19jbGFzcy0+cHJlcm9sbCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmFrZV9zaW5rX3ByZXJvbGwpOworICBnc3RiYXNlX3NpbmtfY2xhc3MtPnJlbmRlciA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmFrZV9zaW5rX3JlbmRlcik7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfZmFrZV9zaW5rX2luaXQgKEdzdEZha2VTaW5rICogZmFrZXNpbmspCit7CisgIGZha2VzaW5rLT5zaWxlbnQgPSBERUZBVUxUX1NJTEVOVDsKKyAgZmFrZXNpbmstPmR1bXAgPSBERUZBVUxUX0RVTVA7CisgIGZha2VzaW5rLT5sYXN0X21lc3NhZ2UgPSBnX3N0cmR1cCAoREVGQVVMVF9MQVNUX01FU1NBR0UpOworICBmYWtlc2luay0+c3RhdGVfZXJyb3IgPSBERUZBVUxUX1NUQVRFX0VSUk9SOworICBmYWtlc2luay0+c2lnbmFsX2hhbmRvZmZzID0gREVGQVVMVF9TSUdOQUxfSEFORE9GRlM7CisgIGZha2VzaW5rLT5udW1fYnVmZmVycyA9IERFRkFVTFRfTlVNX0JVRkZFUlM7CisjaWYgIUdMSUJfQ0hFQ0tfVkVSU0lPTigyLDI2LDApCisgIGdfc3RhdGljX3JlY19tdXRleF9pbml0ICgmZmFrZXNpbmstPm5vdGlmeV9sb2NrKTsKKyNlbmRpZgorCisgIGdzdF9iYXNlX3Npbmtfc2V0X3N5bmMgKEdTVF9CQVNFX1NJTksgKGZha2VzaW5rKSwgREVGQVVMVF9TWU5DKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9mYWtlX3NpbmtfZmluYWxpemUgKEdPYmplY3QgKiBvYmopCit7CisjaWYgIUdMSUJfQ0hFQ0tfVkVSU0lPTigyLDI2LDApCisgIEdzdEZha2VTaW5rICpzaW5rID0gR1NUX0ZBS0VfU0lOSyAob2JqKTsKKworICBnX3N0YXRpY19yZWNfbXV0ZXhfZnJlZSAoJnNpbmstPm5vdGlmeV9sb2NrKTsKKyNlbmRpZgorCisgIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9mYWtlX3Npbmtfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIEdzdEZha2VTaW5rICpzaW5rOworCisgIHNpbmsgPSBHU1RfRkFLRV9TSU5LIChvYmplY3QpOworCisgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9TVEFURV9FUlJPUjoKKyAgICAgIHNpbmstPnN0YXRlX2Vycm9yID0gZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NJTEVOVDoKKyAgICAgIHNpbmstPnNpbGVudCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9EVU1QOgorICAgICAgc2luay0+ZHVtcCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TSUdOQUxfSEFORE9GRlM6CisgICAgICBzaW5rLT5zaWduYWxfaGFuZG9mZnMgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0FOX0FDVElWQVRFX1BVU0g6CisgICAgICBHU1RfQkFTRV9TSU5LIChzaW5rKS0+Y2FuX2FjdGl2YXRlX3B1c2ggPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0FOX0FDVElWQVRFX1BVTEw6CisgICAgICBHU1RfQkFTRV9TSU5LIChzaW5rKS0+Y2FuX2FjdGl2YXRlX3B1bGwgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTlVNX0JVRkZFUlM6CisgICAgICBzaW5rLT5udW1fYnVmZmVycyA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICBicmVhazsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZ3N0X2Zha2Vfc2lua19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLAorICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgR3N0RmFrZVNpbmsgKnNpbms7CisKKyAgc2luayA9IEdTVF9GQUtFX1NJTksgKG9iamVjdCk7CisKKyAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX1NUQVRFX0VSUk9SOgorICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHNpbmstPnN0YXRlX2Vycm9yKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TSUxFTlQ6CisgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgc2luay0+c2lsZW50KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9EVU1QOgorICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHNpbmstPmR1bXApOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NJR05BTF9IQU5ET0ZGUzoKKyAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBzaW5rLT5zaWduYWxfaGFuZG9mZnMpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xBU1RfTUVTU0FHRToKKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc2luayk7CisgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBzaW5rLT5sYXN0X21lc3NhZ2UpOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmspOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NBTl9BQ1RJVkFURV9QVVNIOgorICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIEdTVF9CQVNFX1NJTksgKHNpbmspLT5jYW5fYWN0aXZhdGVfcHVzaCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0FOX0FDVElWQVRFX1BVTEw6CisgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgR1NUX0JBU0VfU0lOSyAoc2luayktPmNhbl9hY3RpdmF0ZV9wdWxsKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OVU1fQlVGRkVSUzoKKyAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHNpbmstPm51bV9idWZmZXJzKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9mYWtlX3Npbmtfbm90aWZ5X2xhc3RfbWVzc2FnZSAoR3N0RmFrZVNpbmsgKiBzaW5rKQoreworICAvKiBGSVhNRTogdGhpcyBoYWNrcyBhcm91bmQgYSBidWcgaW4gR0xpYi9HT2JqZWN0OiBkb2luZyBjb25jdXJyZW50CisgICAqIGdfb2JqZWN0X25vdGlmeSgpIG9uIHRoZSBzYW1lIG9iamVjdCBtaWdodCBsZWFkIHRvIGNyYXNoZXMsIHNlZQorICAgKiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYwMjAjYzYwIGFuZCBmb2xsb3ctdXBzLgorICAgKiBTbyB3ZSByZWFsbHkgZG9uJ3Qgd2FudCB0byBkbyBhIGdfb2JqZWN0X25vdGlmeSgpIGhlcmUgZm9yIG91dC1vZi1iYW5kCisgICAqIGV2ZW50cyB3aXRoIHRoZSBzdHJlYW1pbmcgdGhyZWFkIHBvc3NpYmx5IGFsc28gZG9pbmcgYSBnX29iamVjdF9ub3RpZnkoKQorICAgKiBmb3IgYW4gaW4tYmFuZCBidWZmZXIgb3IgZXZlbnQuIFRoaXMgaXMgZml4ZWQgaW4gR0xpYiA+PSAyLjI2ICovCisjaWYgIUdMSUJfQ0hFQ0tfVkVSU0lPTigyLDI2LDApCisgIGdfc3RhdGljX3JlY19tdXRleF9sb2NrICgmc2luay0+bm90aWZ5X2xvY2spOworICBnX29iamVjdF9ub3RpZnkgKChHT2JqZWN0ICopIHNpbmssICJsYXN0LW1lc3NhZ2UiKTsKKyAgZ19zdGF0aWNfcmVjX211dGV4X3VubG9jayAoJnNpbmstPm5vdGlmeV9sb2NrKTsKKyNlbHNlCisgIGdfb2JqZWN0X25vdGlmeV9ieV9wc3BlYyAoKEdPYmplY3QgKikgc2luaywgcHNwZWNfbGFzdF9tZXNzYWdlKTsKKyNlbmRpZgorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9mYWtlX3NpbmtfZXZlbnQgKEdzdEJhc2VTaW5rICogYnNpbmssIEdzdEV2ZW50ICogZXZlbnQpCit7CisgIEdzdEZha2VTaW5rICpzaW5rID0gR1NUX0ZBS0VfU0lOSyAoYnNpbmspOworCisgIGlmICghc2luay0+c2lsZW50KSB7CisgICAgY29uc3QgR3N0U3RydWN0dXJlICpzOworICAgIGdjaGFyICpzc3RyOworCisgICAgR1NUX09CSkVDVF9MT0NLIChzaW5rKTsKKyAgICBnX2ZyZWUgKHNpbmstPmxhc3RfbWVzc2FnZSk7CisKKyAgICBpZiAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfU0lOS19NRVNTQUdFKSB7CisgICAgICBHc3RNZXNzYWdlICptc2c7CisgICAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKKworICAgICAgZ3N0X2V2ZW50X3BhcnNlX3NpbmtfbWVzc2FnZSAoZXZlbnQsICZtc2cpOworICAgICAgc3RydWN0dXJlID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZSAobXNnKTsKKyAgICAgIHNzdHIgPSBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyAoc3RydWN0dXJlKTsKKyAgICAgIHNpbmstPmxhc3RfbWVzc2FnZSA9CisgICAgICAgICAgZ19zdHJkdXBfcHJpbnRmICgibWVzc2FnZSAqKioqKioqIE0gKHR5cGU6ICVkLCAlcykgJXAiLAorICAgICAgICAgIEdTVF9NRVNTQUdFX1RZUEUgKG1zZyksIHNzdHIsIG1zZyk7CisgICAgICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKChzID0gZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUgKGV2ZW50KSkpIHsKKyAgICAgICAgc3N0ciA9IGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChzKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHNzdHIgPSBnX3N0cmR1cCAoIiIpOworICAgICAgfQorCisgICAgICBzaW5rLT5sYXN0X21lc3NhZ2UgPQorICAgICAgICAgIGdfc3RyZHVwX3ByaW50ZiAoImV2ZW50ICAgKioqKioqKiBFICh0eXBlOiAlZCwgJXMpICVwIiwKKyAgICAgICAgICBHU1RfRVZFTlRfVFlQRSAoZXZlbnQpLCBzc3RyLCBldmVudCk7CisgICAgfQorICAgIGdfZnJlZSAoc3N0cik7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmspOworCisgICAgZ3N0X2Zha2Vfc2lua19ub3RpZnlfbGFzdF9tZXNzYWdlIChzaW5rKTsKKyAgfQorCisgIGlmIChHU1RfQkFTRV9TSU5LX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5ldmVudCkgeworICAgIHJldHVybiBHU1RfQkFTRV9TSU5LX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5ldmVudCAoYnNpbmssIGV2ZW50KTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorfQorCitzdGF0aWMgR3N0Rmxvd1JldHVybgorZ3N0X2Zha2Vfc2lua19wcmVyb2xsIChHc3RCYXNlU2luayAqIGJzaW5rLCBHc3RCdWZmZXIgKiBidWZmZXIpCit7CisgIEdzdEZha2VTaW5rICpzaW5rID0gR1NUX0ZBS0VfU0lOSyAoYnNpbmspOworCisgIGlmIChzaW5rLT5udW1fYnVmZmVyc19sZWZ0ID09IDApCisgICAgZ290byBlb3M7CisKKyAgaWYgKCFzaW5rLT5zaWxlbnQpIHsKKyAgICBHU1RfT0JKRUNUX0xPQ0sgKHNpbmspOworICAgIGdfZnJlZSAoc2luay0+bGFzdF9tZXNzYWdlKTsKKworICAgIHNpbmstPmxhc3RfbWVzc2FnZSA9IGdfc3RyZHVwX3ByaW50ZiAoInByZXJvbGwgICAqKioqKioqICIpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzaW5rKTsKKworICAgIGdzdF9mYWtlX3Npbmtfbm90aWZ5X2xhc3RfbWVzc2FnZSAoc2luayk7CisgIH0KKyAgaWYgKHNpbmstPnNpZ25hbF9oYW5kb2ZmcykgeworICAgIGdfc2lnbmFsX2VtaXQgKHNpbmssCisgICAgICAgIGdzdF9mYWtlX3Npbmtfc2lnbmFsc1tTSUdOQUxfUFJFUk9MTF9IQU5ET0ZGXSwgMCwgYnVmZmVyLAorICAgICAgICBic2luay0+c2lua3BhZCk7CisgIH0KKyAgcmV0dXJuIEdTVF9GTE9XX09LOworCisgIC8qIEVSUk9SUyAqLworZW9zOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgIndlIGFyZSBFT1MiKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfVU5FWFBFQ1RFRDsKKyAgfQorfQorCitzdGF0aWMgR3N0Rmxvd1JldHVybgorZ3N0X2Zha2Vfc2lua19yZW5kZXIgKEdzdEJhc2VTaW5rICogYnNpbmssIEdzdEJ1ZmZlciAqIGJ1ZikKK3sKKyAgR3N0RmFrZVNpbmsgKnNpbmsgPSBHU1RfRkFLRV9TSU5LX0NBU1QgKGJzaW5rKTsKKworICBpZiAoc2luay0+bnVtX2J1ZmZlcnNfbGVmdCA9PSAwKQorICAgIGdvdG8gZW9zOworCisgIGlmIChzaW5rLT5udW1fYnVmZmVyc19sZWZ0ICE9IC0xKQorICAgIHNpbmstPm51bV9idWZmZXJzX2xlZnQtLTsKKworICBpZiAoIXNpbmstPnNpbGVudCkgeworICAgIGdjaGFyIHRzX3N0cls2NF0sIGR1cl9zdHJbNjRdOworICAgIGdjaGFyIGZsYWdfc3RyWzEwMF07CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sgKHNpbmspOworICAgIGdfZnJlZSAoc2luay0+bGFzdF9tZXNzYWdlKTsKKworICAgIGlmIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7CisgICAgICBnX3NucHJpbnRmICh0c19zdHIsIHNpemVvZiAodHNfc3RyKSwgIiUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSkpOworICAgIH0gZWxzZSB7CisgICAgICBnX3N0cmxjcHkgKHRzX3N0ciwgIm5vbmUiLCBzaXplb2YgKHRzX3N0cikpOworICAgIH0KKworICAgIGlmIChHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpICE9IEdTVF9DTE9DS19USU1FX05PTkUpIHsKKyAgICAgIGdfc25wcmludGYgKGR1cl9zdHIsIHNpemVvZiAoZHVyX3N0ciksICIlIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSkpOworICAgIH0gZWxzZSB7CisgICAgICBnX3N0cmxjcHkgKGR1cl9zdHIsICJub25lIiwgc2l6ZW9mIChkdXJfc3RyKSk7CisgICAgfQorCisgICAgeworICAgICAgY29uc3QgY2hhciAqZmxhZ19saXN0WzEyXSA9IHsKKyAgICAgICAgInJvIiwgIm1lZGlhNCIsICIiLCAiIiwKKyAgICAgICAgInByZXJvbGwiLCAiZGlzY29udCIsICJpbmNhcHMiLCAiZ2FwIiwKKyAgICAgICAgImRlbHRhX3VuaXQiLCAibWVkaWExIiwgIm1lZGlhMiIsICJtZWRpYTMiCisgICAgICB9OworICAgICAgaW50IGk7CisgICAgICBjaGFyICplbmQgPSBmbGFnX3N0cjsKKyAgICAgIGVuZFswXSA9ICdcMCc7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykgeworICAgICAgICBpZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGJ1ZiktPmZsYWdzICYgKDEgPDwgaSkpIHsKKyAgICAgICAgICBzdHJjcHkgKGVuZCwgZmxhZ19saXN0W2ldKTsKKyAgICAgICAgICBlbmQgKz0gc3RybGVuIChlbmQpOworICAgICAgICAgIGVuZFswXSA9ICcgJzsKKyAgICAgICAgICBlbmRbMV0gPSAnXDAnOworICAgICAgICAgIGVuZCsrOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgc2luay0+bGFzdF9tZXNzYWdlID0KKyAgICAgICAgZ19zdHJkdXBfcHJpbnRmICgiY2hhaW4gICAqKioqKioqIDwgKCU1IiBHX0dTSVpFX0ZPUk1BVAorICAgICAgICAiIGJ5dGVzLCB0aW1lc3RhbXA6ICVzIiAiLCBkdXJhdGlvbjogJXMsIG9mZnNldDogJSIgR19HSU5UNjRfRk9STUFUCisgICAgICAgICIsIG9mZnNldF9lbmQ6ICUiIEdfR0lOVDY0X0ZPUk1BVCAiLCBmbGFnczogJWQgJXMpICVwIiwKKyAgICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKSwgdHNfc3RyLCBkdXJfc3RyLCBHU1RfQlVGRkVSX09GRlNFVCAoYnVmKSwKKyAgICAgICAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChidWYpLCBHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoYnVmKS0+ZmxhZ3MsCisgICAgICAgIGZsYWdfc3RyLCBidWYpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzaW5rKTsKKworICAgIGdzdF9mYWtlX3Npbmtfbm90aWZ5X2xhc3RfbWVzc2FnZSAoc2luayk7CisgIH0KKyAgaWYgKHNpbmstPnNpZ25hbF9oYW5kb2ZmcykKKyAgICBnX3NpZ25hbF9lbWl0IChzaW5rLCBnc3RfZmFrZV9zaW5rX3NpZ25hbHNbU0lHTkFMX0hBTkRPRkZdLCAwLCBidWYsCisgICAgICAgIGJzaW5rLT5zaW5rcGFkKTsKKworICBpZiAoc2luay0+ZHVtcCkgeworICAgIGd1aW50OCAqZGF0YTsKKyAgICBnc2l6ZSBzaXplOworCisgICAgZGF0YSA9IGdzdF9idWZmZXJfbWFwIChidWYsICZzaXplLCBOVUxMLCBHU1RfTUFQX1JFQUQpOworICAgIGdzdF91dGlsX2R1bXBfbWVtIChkYXRhLCBzaXplKTsKKyAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsIGRhdGEsIHNpemUpOworICB9CisgIGlmIChzaW5rLT5udW1fYnVmZmVyc19sZWZ0ID09IDApCisgICAgZ290byBlb3M7CisKKyAgcmV0dXJuIEdTVF9GTE9XX09LOworCisgIC8qIEVSUk9SUyAqLworZW9zOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgIndlIGFyZSBFT1MiKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfVU5FWFBFQ1RFRDsKKyAgfQorfQorCitzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KK2dzdF9mYWtlX3NpbmtfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKK3sKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOworICBHc3RGYWtlU2luayAqZmFrZXNpbmsgPSBHU1RfRkFLRV9TSU5LIChlbGVtZW50KTsKKworICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTlVMTF9UT19SRUFEWToKKyAgICAgIGlmIChmYWtlc2luay0+c3RhdGVfZXJyb3IgPT0gRkFLRV9TSU5LX1NUQVRFX0VSUk9SX05VTExfUkVBRFkpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgorICAgICAgaWYgKGZha2VzaW5rLT5zdGF0ZV9lcnJvciA9PSBGQUtFX1NJTktfU1RBVEVfRVJST1JfUkVBRFlfUEFVU0VEKQorICAgICAgICBnb3RvIGVycm9yOworICAgICAgZmFrZXNpbmstPm51bV9idWZmZXJzX2xlZnQgPSBmYWtlc2luay0+bnVtX2J1ZmZlcnM7CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1BMQVlJTkc6CisgICAgICBpZiAoZmFrZXNpbmstPnN0YXRlX2Vycm9yID09IEZBS0VfU0lOS19TVEFURV9FUlJPUl9QQVVTRURfUExBWUlORykKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOworCisgIHN3aXRjaCAodHJhbnNpdGlvbikgeworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRDoKKyAgICAgIGlmIChmYWtlc2luay0+c3RhdGVfZXJyb3IgPT0gRkFLRV9TSU5LX1NUQVRFX0VSUk9SX1BMQVlJTkdfUEFVU0VEKQorICAgICAgICBnb3RvIGVycm9yOworICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKKyAgICAgIGlmIChmYWtlc2luay0+c3RhdGVfZXJyb3IgPT0gRkFLRV9TSU5LX1NUQVRFX0VSUk9SX1BBVVNFRF9SRUFEWSkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOgorICAgICAgaWYgKGZha2VzaW5rLT5zdGF0ZV9lcnJvciA9PSBGQUtFX1NJTktfU1RBVEVfRVJST1JfUkVBRFlfTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoZmFrZXNpbmspOworICAgICAgZ19mcmVlIChmYWtlc2luay0+bGFzdF9tZXNzYWdlKTsKKyAgICAgIGZha2VzaW5rLT5sYXN0X21lc3NhZ2UgPSBOVUxMOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGZha2VzaW5rKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiByZXQ7CisKKyAgLyogRVJST1IgKi8KK2Vycm9yOgorICBHU1RfRUxFTUVOVF9FUlJPUiAoZWxlbWVudCwgQ09SRSwgU1RBVEVfQ0hBTkdFLCAoTlVMTCksCisgICAgICAoIkVycm9yaW5nIG91dCBvbiBzdGF0ZSBjaGFuZ2UgYXMgcmVxdWVzdGVkIikpOworICByZXR1cm4gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOworfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5oIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMTY1YWYKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KKyAqCisgKiBnc3RmYWtlc2luay5oOgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworI2lmbmRlZiBfX0dTVF9GQUtFX1NJTktfSF9fCisjZGVmaW5lIF9fR1NUX0ZBS0VfU0lOS19IX18KKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNlc2luay5oPgorCitHX0JFR0lOX0RFQ0xTCisKKworI2RlZmluZSBHU1RfVFlQRV9GQUtFX1NJTksgXAorICAoZ3N0X2Zha2Vfc2lua19nZXRfdHlwZSgpKQorI2RlZmluZSBHU1RfRkFLRV9TSU5LKG9iaikgXAorICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfRkFLRV9TSU5LLEdzdEZha2VTaW5rKSkKKyNkZWZpbmUgR1NUX0ZBS0VfU0lOS19DTEFTUyhrbGFzcykgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9GQUtFX1NJTkssR3N0RmFrZVNpbmtDbGFzcykpCisjZGVmaW5lIEdTVF9JU19GQUtFX1NJTksob2JqKSBcCisgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9GQUtFX1NJTkspKQorI2RlZmluZSBHU1RfSVNfRkFLRV9TSU5LX0NMQVNTKGtsYXNzKSBcCisgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0ZBS0VfU0lOSykpCisjZGVmaW5lIEdTVF9GQUtFX1NJTktfQ0FTVChvYmopICgoR3N0RmFrZVNpbmsgKilvYmopCisKKy8qKgorICogR3N0RmFrZVNpbmtTdGF0ZUVycm9yOgorICogQEZBS0VfU0lOS19TVEFURV9FUlJPUl9OT05FOiBubyBlcnJvcgorICogQEZBS0VfU0lOS19TVEFURV9FUlJPUl9OVUxMX1JFQURZOiBjYXVzZSB0aGUgTlVMTCB0byBSRUFEWSBzdGF0ZSBjaGFuZ2UgdG8gZmFpbAorICogQEZBS0VfU0lOS19TVEFURV9FUlJPUl9SRUFEWV9QQVVTRUQ6IGNhdXNlIHRoZSBSRUFEWSB0byBQQVVTRUQgc3RhdGUgY2hhbmdlIHRvIGZhaWw6CisgKiBARkFLRV9TSU5LX1NUQVRFX0VSUk9SX1BBVVNFRF9QTEFZSU5HOiBjYXVzZSB0aGUgUEFVU0VEIHRvIFBMQVlJTkcgc3RhdGUgY2hhbmdlIHRvIGZhaWw6CisgKiBARkFLRV9TSU5LX1NUQVRFX0VSUk9SX1BMQVlJTkdfUEFVU0VEOiBjYXVzZSB0aGUgUExBWUlORyB0byBQQVVTRUQgc3RhdGUgY2hhbmdlIHRvIGZhaWw6CisgKiBARkFLRV9TSU5LX1NUQVRFX0VSUk9SX1BBVVNFRF9SRUFEWTogY2F1c2UgdGhlIFBBVVNFRCB0byBSRUFEWSBzdGF0ZSBjaGFuZ2UgdG8gZmFpbDoKKyAqIEBGQUtFX1NJTktfU1RBVEVfRVJST1JfUkVBRFlfTlVMTDogY2F1c2UgdGhlIFJFQURZIHRvIE5VTEwgc3RhdGUgY2hhbmdlIHRvIGZhaWw6CisgKgorICogUG9zc2libGUgc3RhdGUgY2hhbmdlIGVycm9ycyBmb3IgdGhlIHN0YXRlLWVycm9yIHByb3BlcnR5LgorICovCit0eXBlZGVmIGVudW0geworICBGQUtFX1NJTktfU1RBVEVfRVJST1JfTk9ORSA9IDAsCisgIEZBS0VfU0lOS19TVEFURV9FUlJPUl9OVUxMX1JFQURZLAorICBGQUtFX1NJTktfU1RBVEVfRVJST1JfUkVBRFlfUEFVU0VELAorICBGQUtFX1NJTktfU1RBVEVfRVJST1JfUEFVU0VEX1BMQVlJTkcsCisgIEZBS0VfU0lOS19TVEFURV9FUlJPUl9QTEFZSU5HX1BBVVNFRCwKKyAgRkFLRV9TSU5LX1NUQVRFX0VSUk9SX1BBVVNFRF9SRUFEWSwKKyAgRkFLRV9TSU5LX1NUQVRFX0VSUk9SX1JFQURZX05VTEwKK30gR3N0RmFrZVNpbmtTdGF0ZUVycm9yOworCit0eXBlZGVmIHN0cnVjdCBfR3N0RmFrZVNpbmsgR3N0RmFrZVNpbms7Cit0eXBlZGVmIHN0cnVjdCBfR3N0RmFrZVNpbmtDbGFzcyBHc3RGYWtlU2lua0NsYXNzOworCisvKioKKyAqIEdzdEZha2VTaW5rOgorICoKKyAqIFRoZSBvcGFxdWUgI0dzdEZha2VTaW5rIGRhdGEgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgX0dzdEZha2VTaW5rIHsKKyAgR3N0QmFzZVNpbmsJCWVsZW1lbnQ7CisKKyAgZ2Jvb2xlYW4JCXNpbGVudDsKKyAgZ2Jvb2xlYW4JCWR1bXA7CisgIGdib29sZWFuCQlzaWduYWxfaGFuZG9mZnM7CisgIEdzdEZha2VTaW5rU3RhdGVFcnJvciBzdGF0ZV9lcnJvcjsKKyAgZ2NoYXIJCQkqbGFzdF9tZXNzYWdlOworICBnaW50ICAgICAgICAgICAgICAgICAgbnVtX2J1ZmZlcnM7CisgIGdpbnQgICAgICAgICAgICAgICAgICBudW1fYnVmZmVyc19sZWZ0OworI2lmICFHTElCX0NIRUNLX1ZFUlNJT04oMiwyNiwwKQorICBHU3RhdGljUmVjTXV0ZXggICAgICAgbm90aWZ5X2xvY2s7CisjZW5kaWYKK307CisKK3N0cnVjdCBfR3N0RmFrZVNpbmtDbGFzcyB7CisgIEdzdEJhc2VTaW5rQ2xhc3MgcGFyZW50X2NsYXNzOworCisgIC8qIHNpZ25hbHMgKi8KKyAgdm9pZCAoKmhhbmRvZmYpIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RCdWZmZXIgKmJ1ZiwgR3N0UGFkICpwYWQpOworICB2b2lkICgqcHJlcm9sbF9oYW5kb2ZmKSAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0QnVmZmVyICpidWYsIEdzdFBhZCAqcGFkKTsKK307CisKK0dUeXBlIGdzdF9mYWtlX3NpbmtfZ2V0X3R5cGUgKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HU1RfRkFLRV9TSU5LX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmMgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjQ2ZDE4Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmMKQEAgLTAsMCArMSw5MjEgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+CisgKgorICogZ3N0ZmFrZXNyYy5jOgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisvKioKKyAqIFNFQ1RJT046ZWxlbWVudC1mYWtlc3JjCisgKiBAc2VlX2Fsc286ICNHc3RGYWtlU2luaworICoKKyAqIFRoZSBmYWtlc3JjIGVsZW1lbnQgaXMgYSBtdWx0aXB1cnBvc2UgZWxlbWVudCB0aGF0IGNhbiBnZW5lcmF0ZQorICogYSB3aWRlIHJhbmdlIG9mIGJ1ZmZlcnMgYW5kIGNhbiBvcGVyYXRlIGluIHZhcmlvdXMgc2NoZWR1bGluZyBtb2Rlcy4KKyAqCisgKiBJdCBpcyBtb3N0bHkgdXNlZCBhcyBhIHRlc3RpbmcgZWxlbWVudCwgb25lIHRyaXZpYWwgZXhhbXBsZSBmb3IgdGVzdGluZworICogYmFzaWMgPGFwcGxpY2F0aW9uPkdTdHJlYW1lcjwvYXBwbGljYXRpb24+IGNvcmUgZnVuY3Rpb25hbGl0eSBpczoKKyAqCisgKiA8cmVmc2VjdDI+CisgKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+CisgKiB8WworICogZ3N0LWxhdW5jaCAtdiBmYWtlc3JjIG51bS1idWZmZXJzPTUgISBmYWtlc2luaworICogXXwgVGhpcyBwaXBlbGluZSB3aWxsIHB1c2ggNSBlbXB0eSBidWZmZXJzIHRvIHRoZSBmYWtlc2luayBlbGVtZW50IGFuZCB0aGVuCisgKiBzZW5kcyBhbiBFT1MuCisgKiA8L3JlZnNlY3QyPgorICoKKyAqIExhc3QgcmV2aWV3ZWQgb24gMjAwOC0wNi0yMCAoMC4xMC4yMSkKKyAqLworCisvKiBGSVhNRTogdGhpcyBpZ25vcmVzIGJhc2VzcmM6OmJsb2Nrc2l6ZSBwcm9wZXJ0eSwgd2hpY2ggY291bGQgYmUgdXNlZCBhcyBhbgorICogYWxpYXMgdG8gOjpzaXplbWF4IChzZWUgZ3N0X2Jhc2Vfc3JjX2dldF9ibG9ja3NpemUoKSkuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImdzdGZha2VzcmMuaCIKKyNpbmNsdWRlIDxnc3QvZ3N0bWFyc2hhbC5oPgorCitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCisgICAgR1NUX1BBRF9TUkMsCisgICAgR1NUX1BBRF9BTFdBWVMsCisgICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7CisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9mYWtlX3NyY19kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfZmFrZV9zcmNfZGVidWcKKworLyogRmFrZVNyYyBzaWduYWxzIGFuZCBhcmdzICovCitlbnVtCit7CisgIC8qIEZJTEwgTUUgKi8KKyAgU0lHTkFMX0hBTkRPRkYsCisgIExBU1RfU0lHTkFMCit9OworCisjZGVmaW5lIERFRkFVTFRfT1VUUFVUICAgICAgICAgIEZBS0VfU1JDX0ZJUlNUX0xBU1RfTE9PUAorI2RlZmluZSBERUZBVUxUX0RBVEEgICAgICAgICAgICBGQUtFX1NSQ19EQVRBX0FMTE9DQVRFCisjZGVmaW5lIERFRkFVTFRfU0laRVRZUEUgICAgICAgIEZBS0VfU1JDX1NJWkVUWVBFX0VNUFRZCisjZGVmaW5lIERFRkFVTFRfU0laRU1JTiAgICAgICAgIDAKKyNkZWZpbmUgREVGQVVMVF9TSVpFTUFYICAgICAgICAgNDA5NgorI2RlZmluZSBERUZBVUxUX0ZJTExUWVBFICAgICAgICBGQUtFX1NSQ19GSUxMVFlQRV9aRVJPCisjZGVmaW5lIERFRkFVTFRfREFUQVJBVEUgICAgICAgIDAKKyNkZWZpbmUgREVGQVVMVF9TWU5DICAgICAgICAgICAgRkFMU0UKKyNkZWZpbmUgREVGQVVMVF9QQVRURVJOICAgICAgICAgTlVMTAorI2RlZmluZSBERUZBVUxUX0VPUyAgICAgICAgICAgICBGQUxTRQorI2RlZmluZSBERUZBVUxUX1NJR05BTF9IQU5ET0ZGUyBGQUxTRQorI2RlZmluZSBERUZBVUxUX1NJTEVOVCAgICAgICAgICBGQUxTRQorI2RlZmluZSBERUZBVUxUX0RVTVAgICAgICAgICAgICBGQUxTRQorI2RlZmluZSBERUZBVUxUX1BBUkVOVFNJWkUgICAgICA0MDk2KjEwCisjZGVmaW5lIERFRkFVTFRfQ0FOX0FDVElWQVRFX1BVTEwgVFJVRQorI2RlZmluZSBERUZBVUxUX0NBTl9BQ1RJVkFURV9QVVNIIFRSVUUKKyNkZWZpbmUgREVGQVVMVF9GT1JNQVQgICAgICAgICAgR1NUX0ZPUk1BVF9CWVRFUworCitlbnVtCit7CisgIFBST1BfMCwKKyAgUFJPUF9PVVRQVVQsCisgIFBST1BfREFUQSwKKyAgUFJPUF9TSVpFVFlQRSwKKyAgUFJPUF9TSVpFTUlOLAorICBQUk9QX1NJWkVNQVgsCisgIFBST1BfRklMTFRZUEUsCisgIFBST1BfREFUQVJBVEUsCisgIFBST1BfU1lOQywKKyAgUFJPUF9QQVRURVJOLAorICBQUk9QX0VPUywKKyAgUFJPUF9TSUdOQUxfSEFORE9GRlMsCisgIFBST1BfU0lMRU5ULAorICBQUk9QX0RVTVAsCisgIFBST1BfUEFSRU5UU0laRSwKKyAgUFJPUF9MQVNUX01FU1NBR0UsCisgIFBST1BfQ0FOX0FDVElWQVRFX1BVTEwsCisgIFBST1BfQ0FOX0FDVElWQVRFX1BVU0gsCisgIFBST1BfSVNfTElWRSwKKyAgUFJPUF9GT1JNQVQsCisgIFBST1BfTEFTVCwKK307CisKKy8qIG5vdCBpbXBsZW1lbnRlZAorI2RlZmluZSBHU1RfVFlQRV9GQUtFX1NSQ19PVVRQVVQgKGdzdF9mYWtlX3NyY19vdXRwdXRfZ2V0X3R5cGUoKSkKK3N0YXRpYyBHVHlwZQorZ3N0X2Zha2Vfc3JjX291dHB1dF9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIEdUeXBlIGZha2VzcmNfb3V0cHV0X3R5cGUgPSAwOworICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSBmYWtlc3JjX291dHB1dFtdID0geworICAgIHtGQUtFX1NSQ19GSVJTVF9MQVNUX0xPT1AsICIxIiwgIkZpcnN0LUxhc3QgbG9vcCJ9LAorICAgIHtGQUtFX1NSQ19MQVNUX0ZJUlNUX0xPT1AsICIyIiwgIkxhc3QtRmlyc3QgbG9vcCJ9LAorICAgIHtGQUtFX1NSQ19QSU5HX1BPTkcsICIzIiwgIlBpbmctUG9uZyJ9LAorICAgIHtGQUtFX1NSQ19PUkRFUkVEX1JBTkRPTSwgIjQiLCAiT3JkZXJlZCBSYW5kb20ifSwKKyAgICB7RkFLRV9TUkNfUkFORE9NLCAiNSIsICJSYW5kb20ifSwKKyAgICB7RkFLRV9TUkNfUEFUVEVSTl9MT09QLCAiNiIsICJQYXR0dGVybiBsb29wIn0sCisgICAge0ZBS0VfU1JDX1BJTkdfUE9OR19QQVRURVJOLCAiNyIsICJQaW5nLVBvbmcgUGF0dGVybiJ9LAorICAgIHtGQUtFX1NSQ19HRVRfQUxXQVlTX1NVQ0VFRFMsICI4IiwgIidfZ2V0JyBBbHdheXMgc3VjY2VlZHMifSwKKyAgICB7MCwgTlVMTCwgTlVMTH0sCisgIH07CisKKyAgaWYgKCFmYWtlc3JjX291dHB1dF90eXBlKSB7CisgICAgZmFrZXNyY19vdXRwdXRfdHlwZSA9CisgICAgICAgIGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RGYWtlU3JjT3V0cHV0IiwgZmFrZXNyY19vdXRwdXQpOworICB9CisgIHJldHVybiBmYWtlc3JjX291dHB1dF90eXBlOworfQorKi8KKworI2RlZmluZSBHU1RfVFlQRV9GQUtFX1NSQ19EQVRBIChnc3RfZmFrZV9zcmNfZGF0YV9nZXRfdHlwZSgpKQorc3RhdGljIEdUeXBlCitnc3RfZmFrZV9zcmNfZGF0YV9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIEdUeXBlIGZha2VzcmNfZGF0YV90eXBlID0gMDsKKyAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgZmFrZXNyY19kYXRhW10gPSB7CisgICAge0ZBS0VfU1JDX0RBVEFfQUxMT0NBVEUsICJBbGxvY2F0ZSBkYXRhIiwgImFsbG9jYXRlIn0sCisgICAge0ZBS0VfU1JDX0RBVEFfU1VCQlVGRkVSLCAiU3ViYnVmZmVyIGRhdGEiLCAic3ViYnVmZmVyIn0sCisgICAgezAsIE5VTEwsIE5VTEx9LAorICB9OworCisgIGlmICghZmFrZXNyY19kYXRhX3R5cGUpIHsKKyAgICBmYWtlc3JjX2RhdGFfdHlwZSA9CisgICAgICAgIGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RGYWtlU3JjRGF0YVR5cGUiLCBmYWtlc3JjX2RhdGEpOworICB9CisgIHJldHVybiBmYWtlc3JjX2RhdGFfdHlwZTsKK30KKworI2RlZmluZSBHU1RfVFlQRV9GQUtFX1NSQ19TSVpFVFlQRSAoZ3N0X2Zha2Vfc3JjX3NpemV0eXBlX2dldF90eXBlKCkpCitzdGF0aWMgR1R5cGUKK2dzdF9mYWtlX3NyY19zaXpldHlwZV9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIEdUeXBlIGZha2VzcmNfc2l6ZXR5cGVfdHlwZSA9IDA7CisgIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIGZha2VzcmNfc2l6ZXR5cGVbXSA9IHsKKyAgICB7RkFLRV9TUkNfU0laRVRZUEVfRU1QVFksICJTZW5kIGVtcHR5IGJ1ZmZlcnMiLCAiZW1wdHkifSwKKyAgICB7RkFLRV9TUkNfU0laRVRZUEVfRklYRUQsICJGaXhlZCBzaXplIGJ1ZmZlcnMgKHNpemVtYXggc2l6ZWQpIiwgImZpeGVkIn0sCisgICAge0ZBS0VfU1JDX1NJWkVUWVBFX1JBTkRPTSwKKyAgICAgICAgIlJhbmRvbSBzaXplZCBidWZmZXJzIChzaXplbWluIDw9IHNpemUgPD0gc2l6ZW1heCkiLCAicmFuZG9tIn0sCisgICAgezAsIE5VTEwsIE5VTEx9LAorICB9OworCisgIGlmICghZmFrZXNyY19zaXpldHlwZV90eXBlKSB7CisgICAgZmFrZXNyY19zaXpldHlwZV90eXBlID0KKyAgICAgICAgZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdEZha2VTcmNTaXplVHlwZSIsIGZha2VzcmNfc2l6ZXR5cGUpOworICB9CisgIHJldHVybiBmYWtlc3JjX3NpemV0eXBlX3R5cGU7Cit9CisKKyNkZWZpbmUgR1NUX1RZUEVfRkFLRV9TUkNfRklMTFRZUEUgKGdzdF9mYWtlX3NyY19maWxsdHlwZV9nZXRfdHlwZSgpKQorc3RhdGljIEdUeXBlCitnc3RfZmFrZV9zcmNfZmlsbHR5cGVfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBHVHlwZSBmYWtlc3JjX2ZpbGx0eXBlX3R5cGUgPSAwOworICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSBmYWtlc3JjX2ZpbGx0eXBlW10gPSB7CisgICAge0ZBS0VfU1JDX0ZJTExUWVBFX05PVEhJTkcsICJMZWF2ZSBkYXRhIGFzIG1hbGxvY2VkIiwgIm5vdGhpbmcifSwKKyAgICB7RkFLRV9TUkNfRklMTFRZUEVfWkVSTywgIkZpbGwgYnVmZmVycyB3aXRoIHplcm9zIiwgInplcm8ifSwKKyAgICB7RkFLRV9TUkNfRklMTFRZUEVfUkFORE9NLCAiRmlsbCBidWZmZXJzIHdpdGggcmFuZG9tIGNyYXAiLCAicmFuZG9tIn0sCisgICAge0ZBS0VfU1JDX0ZJTExUWVBFX1BBVFRFUk4sICJGaWxsIGJ1ZmZlcnMgd2l0aCBwYXR0ZXJuIDB4MDAgLT4gMHhmZiIsCisgICAgICAgICJwYXR0ZXJuIn0sCisgICAge0ZBS0VfU1JDX0ZJTExUWVBFX1BBVFRFUk5fQ09OVCwKKyAgICAgICAgICAiRmlsbCBidWZmZXJzIHdpdGggcGF0dGVybiAweDAwIC0+IDB4ZmYgdGhhdCBzcGFucyBidWZmZXJzIiwKKyAgICAgICAgInBhdHRlcm4tc3BhbiJ9LAorICAgIHswLCBOVUxMLCBOVUxMfSwKKyAgfTsKKworICBpZiAoIWZha2VzcmNfZmlsbHR5cGVfdHlwZSkgeworICAgIGZha2VzcmNfZmlsbHR5cGVfdHlwZSA9CisgICAgICAgIGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RGYWtlU3JjRmlsbFR5cGUiLCBmYWtlc3JjX2ZpbGx0eXBlKTsKKyAgfQorICByZXR1cm4gZmFrZXNyY19maWxsdHlwZV90eXBlOworfQorCisjZGVmaW5lIF9kb19pbml0IFwKKyAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X2Zha2Vfc3JjX2RlYnVnLCAiZmFrZXNyYyIsIDAsICJmYWtlc3JjIGVsZW1lbnQiKTsKKyNkZWZpbmUgZ3N0X2Zha2Vfc3JjX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RGYWtlU3JjLCBnc3RfZmFrZV9zcmMsIEdTVF9UWVBFX0JBU0VfU1JDLCBfZG9faW5pdCk7CisKK3N0YXRpYyB2b2lkIGdzdF9mYWtlX3NyY19maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7CitzdGF0aWMgdm9pZCBnc3RfZmFrZV9zcmNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOworc3RhdGljIHZvaWQgZ3N0X2Zha2Vfc3JjX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKKworc3RhdGljIGdib29sZWFuIGdzdF9mYWtlX3NyY19zdGFydCAoR3N0QmFzZVNyYyAqIGJhc2VzcmMpOworc3RhdGljIGdib29sZWFuIGdzdF9mYWtlX3NyY19zdG9wIChHc3RCYXNlU3JjICogYmFzZXNyYyk7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Zha2Vfc3JjX2lzX3NlZWthYmxlIChHc3RCYXNlU3JjICogYmFzZXNyYyk7CisKK3N0YXRpYyBnYm9vbGVhbiBnc3RfZmFrZV9zcmNfZXZlbnRfaGFuZGxlciAoR3N0QmFzZVNyYyAqIHNyYywgR3N0RXZlbnQgKiBldmVudCk7CitzdGF0aWMgdm9pZCBnc3RfZmFrZV9zcmNfZ2V0X3RpbWVzIChHc3RCYXNlU3JjICogYmFzZXNyYywgR3N0QnVmZmVyICogYnVmZmVyLAorICAgIEdzdENsb2NrVGltZSAqIHN0YXJ0LCBHc3RDbG9ja1RpbWUgKiBlbmQpOworc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2Zha2Vfc3JjX2NyZWF0ZSAoR3N0QmFzZVNyYyAqIHNyYywgZ3VpbnQ2NCBvZmZzZXQsCisgICAgZ3VpbnQgbGVuZ3RoLCBHc3RCdWZmZXIgKiogYnVmKTsKKworc3RhdGljIGd1aW50IGdzdF9mYWtlX3NyY19zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OworCitzdGF0aWMgR1BhcmFtU3BlYyAqcHNwZWNfbGFzdF9tZXNzYWdlID0gTlVMTDsKKworc3RhdGljIHZvaWQKK21hcnNoYWxfVk9JRF9fTUlOSU9CSkVDVF9PQkpFQ1QgKEdDbG9zdXJlICogY2xvc3VyZSwgR1ZhbHVlICogcmV0dXJuX3ZhbHVlLAorICAgIGd1aW50IG5fcGFyYW1fdmFsdWVzLCBjb25zdCBHVmFsdWUgKiBwYXJhbV92YWx1ZXMsIGdwb2ludGVyIGludm9jYXRpb25faGludCwKKyAgICBncG9pbnRlciBtYXJzaGFsX2RhdGEpCit7CisgIHR5cGVkZWYgdm9pZCAoKm1hcnNoYWxmdW5jX1ZPSURfX01JTklPQkpFQ1RfT0JKRUNUKSAoZ3BvaW50ZXIgb2JqLAorICAgICAgZ3BvaW50ZXIgYXJnMSwgZ3BvaW50ZXIgYXJnMiwgZ3BvaW50ZXIgZGF0YTIpOworICByZWdpc3RlciBtYXJzaGFsZnVuY19WT0lEX19NSU5JT0JKRUNUX09CSkVDVCBjYWxsYmFjazsKKyAgcmVnaXN0ZXIgR0NDbG9zdXJlICpjYyA9IChHQ0Nsb3N1cmUgKikgY2xvc3VyZTsKKyAgcmVnaXN0ZXIgZ3BvaW50ZXIgZGF0YTEsIGRhdGEyOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKG5fcGFyYW1fdmFsdWVzID09IDMpOworCisgIGlmIChHX0NDTE9TVVJFX1NXQVBfREFUQSAoY2xvc3VyZSkpIHsKKyAgICBkYXRhMSA9IGNsb3N1cmUtPmRhdGE7CisgICAgZGF0YTIgPSBnX3ZhbHVlX3BlZWtfcG9pbnRlciAocGFyYW1fdmFsdWVzICsgMCk7CisgIH0gZWxzZSB7CisgICAgZGF0YTEgPSBnX3ZhbHVlX3BlZWtfcG9pbnRlciAocGFyYW1fdmFsdWVzICsgMCk7CisgICAgZGF0YTIgPSBjbG9zdXJlLT5kYXRhOworICB9CisgIGNhbGxiYWNrID0KKyAgICAgIChtYXJzaGFsZnVuY19WT0lEX19NSU5JT0JKRUNUX09CSkVDVCkgKG1hcnNoYWxfZGF0YSA/IG1hcnNoYWxfZGF0YSA6CisgICAgICBjYy0+Y2FsbGJhY2spOworCisgIGNhbGxiYWNrIChkYXRhMSwgZ192YWx1ZV9nZXRfYm94ZWQgKHBhcmFtX3ZhbHVlcyArIDEpLAorICAgICAgZ192YWx1ZV9nZXRfb2JqZWN0IChwYXJhbV92YWx1ZXMgKyAyKSwgZGF0YTIpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2Zha2Vfc3JjX2NsYXNzX2luaXQgKEdzdEZha2VTcmNDbGFzcyAqIGtsYXNzKQoreworICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7CisgIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKKyAgR3N0QmFzZVNyY0NsYXNzICpnc3RiYXNlX3NyY19jbGFzczsKKworICBnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKKyAgZ3N0ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7CisgIGdzdGJhc2Vfc3JjX2NsYXNzID0gR1NUX0JBU0VfU1JDX0NMQVNTIChrbGFzcyk7CisKKyAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfZmFrZV9zcmNfZmluYWxpemU7CisKKyAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2Zha2Vfc3JjX3NldF9wcm9wZXJ0eTsKKyAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2Zha2Vfc3JjX2dldF9wcm9wZXJ0eTsKKworLyoKKyAgRklYTUU6IHRoaXMgaXMgbm90IGltcGxlbWVudGVkOyB3b3VsZCBtYWtlIHNlbnNlIG9uY2UgYmFzZXNyYyBhbmQgZmFrZXNyYworICBzdXBwb3J0IG11bHRpcGxlIHBhZHMKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9PVVRQVVQsCisgICAgICBnX3BhcmFtX3NwZWNfZW51bSAoIm91dHB1dCIsICJvdXRwdXQiLCAiT3V0cHV0IG1ldGhvZCAoY3VycmVudGx5IHVudXNlZCkiLAorICAgICAgICAgIEdTVF9UWVBFX0ZBS0VfU1JDX09VVFBVVCwgREVGQVVMVF9PVVRQVVQsIEdfUEFSQU1fUkVBRFdSSVRFKSk7CisqLworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0RBVEEsCisgICAgICBnX3BhcmFtX3NwZWNfZW51bSAoImRhdGEiLCAiZGF0YSIsICJEYXRhIGFsbG9jYXRpb24gbWV0aG9kIiwKKyAgICAgICAgICBHU1RfVFlQRV9GQUtFX1NSQ19EQVRBLCBERUZBVUxUX0RBVEEsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfU0laRVRZUEUsCisgICAgICBnX3BhcmFtX3NwZWNfZW51bSAoInNpemV0eXBlIiwgInNpemV0eXBlIiwKKyAgICAgICAgICAiSG93IHRvIGRldGVybWluZSBidWZmZXIgc2l6ZXMiLCBHU1RfVFlQRV9GQUtFX1NSQ19TSVpFVFlQRSwKKyAgICAgICAgICBERUZBVUxUX1NJWkVUWVBFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TSVpFTUlOLAorICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInNpemVtaW4iLCAic2l6ZW1pbiIsICJNaW5pbXVtIGJ1ZmZlciBzaXplIiwgMCwKKyAgICAgICAgICBHX01BWElOVCwgREVGQVVMVF9TSVpFTUlOLAorICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NJWkVNQVgsCisgICAgICBnX3BhcmFtX3NwZWNfaW50ICgic2l6ZW1heCIsICJzaXplbWF4IiwgIk1heGltdW0gYnVmZmVyIHNpemUiLCAwLAorICAgICAgICAgIEdfTUFYSU5ULCBERUZBVUxUX1NJWkVNQVgsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUEFSRU5UU0laRSwKKyAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJwYXJlbnRzaXplIiwgInBhcmVudHNpemUiLAorICAgICAgICAgICJTaXplIG9mIHBhcmVudCBidWZmZXIgZm9yIHN1Yi1idWZmZXJlZCBhbGxvY2F0aW9uIiwgMCwgR19NQVhJTlQsCisgICAgICAgICAgREVGQVVMVF9QQVJFTlRTSVpFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9GSUxMVFlQRSwKKyAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgiZmlsbHR5cGUiLCAiZmlsbHR5cGUiLAorICAgICAgICAgICJIb3cgdG8gZmlsbCB0aGUgYnVmZmVyLCBpZiBhdCBhbGwiLCBHU1RfVFlQRV9GQUtFX1NSQ19GSUxMVFlQRSwKKyAgICAgICAgICBERUZBVUxUX0ZJTExUWVBFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9EQVRBUkFURSwKKyAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJkYXRhcmF0ZSIsICJEYXRhcmF0ZSIsCisgICAgICAgICAgIlRpbWVzdGFtcHMgYnVmZmVycyB3aXRoIG51bWJlciBvZiBieXRlcyBwZXIgc2Vjb25kICgwID0gbm9uZSkiLCAwLAorICAgICAgICAgIEdfTUFYSU5ULCBERUZBVUxUX0RBVEFSQVRFLAorICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NZTkMsCisgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInN5bmMiLCAiU3luYyIsICJTeW5jIHRvIHRoZSBjbG9jayB0byB0aGUgZGF0YXJhdGUiLAorICAgICAgICAgIERFRkFVTFRfU1lOQywgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUEFUVEVSTiwKKyAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJwYXR0ZXJuIiwgInBhdHRlcm4iLCAicGF0dGVybiIsIERFRkFVTFRfUEFUVEVSTiwKKyAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKyAgcHNwZWNfbGFzdF9tZXNzYWdlID0gZ19wYXJhbV9zcGVjX3N0cmluZyAoImxhc3QtbWVzc2FnZSIsICJsYXN0LW1lc3NhZ2UiLAorICAgICAgIlRoZSBsYXN0IHN0YXR1cyBtZXNzYWdlIiwgTlVMTCwKKyAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKTsKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9MQVNUX01FU1NBR0UsCisgICAgICBwc3BlY19sYXN0X21lc3NhZ2UpOworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NJTEVOVCwKKyAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgic2lsZW50IiwgIlNpbGVudCIsCisgICAgICAgICAgIkRvbid0IHByb2R1Y2UgbGFzdF9tZXNzYWdlIGV2ZW50cyIsIERFRkFVTFRfU0lMRU5ULAorICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NJR05BTF9IQU5ET0ZGUywKKyAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgic2lnbmFsLWhhbmRvZmZzIiwgIlNpZ25hbCBoYW5kb2ZmcyIsCisgICAgICAgICAgIlNlbmQgYSBzaWduYWwgYmVmb3JlIHB1c2hpbmcgdGhlIGJ1ZmZlciIsIERFRkFVTFRfU0lHTkFMX0hBTkRPRkZTLAorICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0RVTVAsCisgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImR1bXAiLCAiRHVtcCIsICJEdW1wIGJ1ZmZlciBjb250ZW50cyB0byBzdGRvdXQiLAorICAgICAgICAgIERFRkFVTFRfRFVNUCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ0FOX0FDVElWQVRFX1BVU0gsCisgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImNhbi1hY3RpdmF0ZS1wdXNoIiwgIkNhbiBhY3RpdmF0ZSBwdXNoIiwKKyAgICAgICAgICAiQ2FuIGFjdGl2YXRlIGluIHB1c2ggbW9kZSIsIERFRkFVTFRfQ0FOX0FDVElWQVRFX1BVU0gsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVCB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DQU5fQUNUSVZBVEVfUFVMTCwKKyAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiY2FuLWFjdGl2YXRlLXB1bGwiLCAiQ2FuIGFjdGl2YXRlIHB1bGwiLAorICAgICAgICAgICJDYW4gYWN0aXZhdGUgaW4gcHVsbCBtb2RlIiwgREVGQVVMVF9DQU5fQUNUSVZBVEVfUFVMTCwKKyAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0lTX0xJVkUsCisgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImlzLWxpdmUiLCAiSXMgdGhpcyBhIGxpdmUgc291cmNlIiwKKyAgICAgICAgICAiVHJ1ZSBpZiB0aGUgZWxlbWVudCBjYW5ub3QgcHJvZHVjZSBkYXRhIGluIFBBVVNFRCIsIEZBTFNFLAorICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1QgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIC8qKgorICAgKiBHc3RGYWtlU3JjOmZvcm1hdAorICAgKgorICAgKiBTZXQgdGhlIGZvcm1hdCBvZiB0aGUgbmV3c2VnbWVudCBldmVudHMgdG8gcHJvZHVjZS4KKyAgICoKKyAgICogU2luY2U6IDAuMTAuMjAKKyAgICovCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRk9STUFULAorICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJmb3JtYXQiLCAiRm9ybWF0IiwKKyAgICAgICAgICAiVGhlIGZvcm1hdCBvZiB0aGUgc2VnbWVudCBldmVudHMiLCBHU1RfVFlQRV9GT1JNQVQsCisgICAgICAgICAgREVGQVVMVF9GT1JNQVQsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworCisgIC8qKgorICAgKiBHc3RGYWtlU3JjOjpoYW5kb2ZmOgorICAgKiBAZmFrZXNyYzogdGhlIGZha2VzcmMgaW5zdGFuY2UKKyAgICogQGJ1ZmZlcjogdGhlIGJ1ZmZlciB0aGF0IHdpbGwgYmUgcHVzaGVkCisgICAqIEBwYWQ6IHRoZSBwYWQgdGhhdCB3aWxsIHNlbnQgaXQKKyAgICoKKyAgICogVGhpcyBzaWduYWwgZ2V0cyBlbWl0dGVkIGJlZm9yZSBzZW5kaW5nIHRoZSBidWZmZXIuCisgICAqLworICBnc3RfZmFrZV9zcmNfc2lnbmFsc1tTSUdOQUxfSEFORE9GRl0gPQorICAgICAgZ19zaWduYWxfbmV3ICgiaGFuZG9mZiIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgR19TVFJVQ1RfT0ZGU0VUIChHc3RGYWtlU3JjQ2xhc3MsIGhhbmRvZmYpLCBOVUxMLCBOVUxMLAorICAgICAgbWFyc2hhbF9WT0lEX19NSU5JT0JKRUNUX09CSkVDVCwgR19UWVBFX05PTkUsIDIsIEdTVF9UWVBFX0JVRkZFUiwKKyAgICAgIEdTVF9UWVBFX1BBRCk7CisKKyAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2ltcGxlIChnc3RlbGVtZW50X2NsYXNzLAorICAgICAgIkZha2UgU291cmNlIiwKKyAgICAgICJTb3VyY2UiLAorICAgICAgIlB1c2ggZW1wdHkgKG5vIGRhdGEpIGJ1ZmZlcnMgYXJvdW5kIiwKKyAgICAgICJFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PiwgIiAiV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4iKTsKKyAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKKyAgICAgIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoJnNyY3RlbXBsYXRlKSk7CisKKyAgZ3N0YmFzZV9zcmNfY2xhc3MtPmlzX3NlZWthYmxlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mYWtlX3NyY19pc19zZWVrYWJsZSk7CisgIGdzdGJhc2Vfc3JjX2NsYXNzLT5zdGFydCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmFrZV9zcmNfc3RhcnQpOworICBnc3RiYXNlX3NyY19jbGFzcy0+c3RvcCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmFrZV9zcmNfc3RvcCk7CisgIGdzdGJhc2Vfc3JjX2NsYXNzLT5ldmVudCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmFrZV9zcmNfZXZlbnRfaGFuZGxlcik7CisgIGdzdGJhc2Vfc3JjX2NsYXNzLT5nZXRfdGltZXMgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Zha2Vfc3JjX2dldF90aW1lcyk7CisgIGdzdGJhc2Vfc3JjX2NsYXNzLT5jcmVhdGUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Zha2Vfc3JjX2NyZWF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfZmFrZV9zcmNfaW5pdCAoR3N0RmFrZVNyYyAqIGZha2VzcmMpCit7CisgIGZha2VzcmMtPm91dHB1dCA9IEZBS0VfU1JDX0ZJUlNUX0xBU1RfTE9PUDsKKyAgZmFrZXNyYy0+YnVmZmVyX2NvdW50ID0gMDsKKyAgZmFrZXNyYy0+c2lsZW50ID0gREVGQVVMVF9TSUxFTlQ7CisgIGZha2VzcmMtPnNpZ25hbF9oYW5kb2ZmcyA9IERFRkFVTFRfU0lHTkFMX0hBTkRPRkZTOworICBmYWtlc3JjLT5kdW1wID0gREVGQVVMVF9EVU1QOworICBmYWtlc3JjLT5wYXR0ZXJuX2J5dGUgPSAweDAwOworICBmYWtlc3JjLT5kYXRhID0gRkFLRV9TUkNfREFUQV9BTExPQ0FURTsKKyAgZmFrZXNyYy0+c2l6ZXR5cGUgPSBGQUtFX1NSQ19TSVpFVFlQRV9FTVBUWTsKKyAgZmFrZXNyYy0+ZmlsbHR5cGUgPSBGQUtFX1NSQ19GSUxMVFlQRV9OT1RISU5HOworICBmYWtlc3JjLT5zaXplbWluID0gREVGQVVMVF9TSVpFTUlOOworICBmYWtlc3JjLT5zaXplbWF4ID0gREVGQVVMVF9TSVpFTUFYOworICBmYWtlc3JjLT5wYXJlbnQgPSBOVUxMOworICBmYWtlc3JjLT5wYXJlbnRzaXplID0gREVGQVVMVF9QQVJFTlRTSVpFOworICBmYWtlc3JjLT5sYXN0X21lc3NhZ2UgPSBOVUxMOworICBmYWtlc3JjLT5kYXRhcmF0ZSA9IERFRkFVTFRfREFUQVJBVEU7CisgIGZha2VzcmMtPnN5bmMgPSBERUZBVUxUX1NZTkM7CisgIGZha2VzcmMtPmZvcm1hdCA9IERFRkFVTFRfRk9STUFUOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2Zha2Vfc3JjX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQoreworICBHc3RGYWtlU3JjICpzcmM7CisKKyAgc3JjID0gR1NUX0ZBS0VfU1JDIChvYmplY3QpOworCisgIGdfZnJlZSAoc3JjLT5sYXN0X21lc3NhZ2UpOworICBpZiAoc3JjLT5wYXJlbnQpIHsKKyAgICBnc3RfYnVmZmVyX3VucmVmIChzcmMtPnBhcmVudCk7CisgICAgc3JjLT5wYXJlbnQgPSBOVUxMOworICB9CisKKyAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9mYWtlX3NyY19ldmVudF9oYW5kbGVyIChHc3RCYXNlU3JjICogYmFzZXNyYywgR3N0RXZlbnQgKiBldmVudCkKK3sKKyAgR3N0RmFrZVNyYyAqc3JjOworCisgIHNyYyA9IEdTVF9GQUtFX1NSQyAoYmFzZXNyYyk7CisKKyAgaWYgKCFzcmMtPnNpbGVudCkgeworICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqczsKKyAgICBnY2hhciAqc3N0cjsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKKyAgICBnX2ZyZWUgKHNyYy0+bGFzdF9tZXNzYWdlKTsKKworICAgIGlmICgocyA9IGdzdF9ldmVudF9nZXRfc3RydWN0dXJlIChldmVudCkpKQorICAgICAgc3N0ciA9IGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChzKTsKKyAgICBlbHNlCisgICAgICBzc3RyID0gZ19zdHJkdXAgKCIiKTsKKworICAgIHNyYy0+bGFzdF9tZXNzYWdlID0KKyAgICAgICAgZ19zdHJkdXBfcHJpbnRmICgiZXZlbnQgICAqKioqKioqIEUgKHR5cGU6ICVkLCAlcykgJXAiLAorICAgICAgICBHU1RfRVZFTlRfVFlQRSAoZXZlbnQpLCBzc3RyLCBldmVudCk7CisgICAgZ19mcmVlIChzc3RyKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKKworI2lmICFHTElCX0NIRUNLX1ZFUlNJT04oMiwyNiwwKQorICAgIGdfb2JqZWN0X25vdGlmeSAoKEdPYmplY3QgKikgc3JjLCAibGFzdC1tZXNzYWdlIik7CisjZWxzZQorICAgIGdfb2JqZWN0X25vdGlmeV9ieV9wc3BlYyAoKEdPYmplY3QgKikgc3JjLCBwc3BlY19sYXN0X21lc3NhZ2UpOworI2VuZGlmCisgIH0KKworICByZXR1cm4gR1NUX0JBU0VfU1JDX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5ldmVudCAoYmFzZXNyYywgZXZlbnQpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2Zha2Vfc3JjX2FsbG9jX3BhcmVudCAoR3N0RmFrZVNyYyAqIHNyYykKK3sKKyAgR3N0QnVmZmVyICpidWY7CisKKyAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIHNyYy0+cGFyZW50c2l6ZSwgMCk7CisKKyAgc3JjLT5wYXJlbnQgPSBidWY7CisgIHNyYy0+cGFyZW50b2Zmc2V0ID0gMDsKK30KKworc3RhdGljIHZvaWQKK2dzdF9mYWtlX3NyY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgR3N0RmFrZVNyYyAqc3JjOworICBHc3RCYXNlU3JjICpiYXNlc3JjOworCisgIHNyYyA9IEdTVF9GQUtFX1NSQyAob2JqZWN0KTsKKyAgYmFzZXNyYyA9IEdTVF9CQVNFX1NSQyAob2JqZWN0KTsKKworICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfT1VUUFVUOgorICAgICAgZ193YXJuaW5nICgibm90IHlldCBpbXBsZW1lbnRlZCIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RBVEE6CisgICAgICBzcmMtPmRhdGEgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7CisKKyAgICAgIGlmIChzcmMtPmRhdGEgPT0gRkFLRV9TUkNfREFUQV9TVUJCVUZGRVIpIHsKKyAgICAgICAgaWYgKCFzcmMtPnBhcmVudCkKKyAgICAgICAgICBnc3RfZmFrZV9zcmNfYWxsb2NfcGFyZW50IChzcmMpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNyYy0+cGFyZW50KSB7CisgICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoc3JjLT5wYXJlbnQpOworICAgICAgICAgIHNyYy0+cGFyZW50ID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NJWkVUWVBFOgorICAgICAgc3JjLT5zaXpldHlwZSA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TSVpFTUlOOgorICAgICAgc3JjLT5zaXplbWluID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0laRU1BWDoKKyAgICAgIHNyYy0+c2l6ZW1heCA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BBUkVOVFNJWkU6CisgICAgICBzcmMtPnBhcmVudHNpemUgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GSUxMVFlQRToKKyAgICAgIHNyYy0+ZmlsbHR5cGUgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREFUQVJBVEU6CisgICAgICBzcmMtPmRhdGFyYXRlID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1lOQzoKKyAgICAgIHNyYy0+c3luYyA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QQVRURVJOOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NJTEVOVDoKKyAgICAgIHNyYy0+c2lsZW50ID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NJR05BTF9IQU5ET0ZGUzoKKyAgICAgIHNyYy0+c2lnbmFsX2hhbmRvZmZzID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RVTVA6CisgICAgICBzcmMtPmR1bXAgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0FOX0FDVElWQVRFX1BVU0g6CisgICAgICBnX3JldHVybl9pZl9mYWlsICghR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAob2JqZWN0LCBHU1RfQkFTRV9TUkNfU1RBUlRFRCkpOworICAgICAgR1NUX0JBU0VfU1JDIChzcmMpLT5jYW5fYWN0aXZhdGVfcHVzaCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DQU5fQUNUSVZBVEVfUFVMTDoKKyAgICAgIGdfcmV0dXJuX2lmX2ZhaWwgKCFHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChvYmplY3QsIEdTVF9CQVNFX1NSQ19TVEFSVEVEKSk7CisgICAgICBzcmMtPmNhbl9hY3RpdmF0ZV9wdWxsID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0lTX0xJVkU6CisgICAgICBnc3RfYmFzZV9zcmNfc2V0X2xpdmUgKGJhc2VzcmMsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRk9STUFUOgorICAgICAgc3JjLT5mb3JtYXQgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfZmFrZV9zcmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKKyAgICBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIEdzdEZha2VTcmMgKnNyYzsKKyAgR3N0QmFzZVNyYyAqYmFzZXNyYzsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRkFLRV9TUkMgKG9iamVjdCkpOworCisgIHNyYyA9IEdTVF9GQUtFX1NSQyAob2JqZWN0KTsKKyAgYmFzZXNyYyA9IEdTVF9CQVNFX1NSQyAob2JqZWN0KTsKKworICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfT1VUUFVUOgorICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHNyYy0+b3V0cHV0KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9EQVRBOgorICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHNyYy0+ZGF0YSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0laRVRZUEU6CisgICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgc3JjLT5zaXpldHlwZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0laRU1JTjoKKyAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHNyYy0+c2l6ZW1pbik7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0laRU1BWDoKKyAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHNyYy0+c2l6ZW1heCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUEFSRU5UU0laRToKKyAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHNyYy0+cGFyZW50c2l6ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRklMTFRZUEU6CisgICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgc3JjLT5maWxsdHlwZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREFUQVJBVEU6CisgICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBzcmMtPmRhdGFyYXRlKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TWU5DOgorICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHNyYy0+c3luYyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUEFUVEVSTjoKKyAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHNyYy0+cGF0dGVybik7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0lMRU5UOgorICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHNyYy0+c2lsZW50KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TSUdOQUxfSEFORE9GRlM6CisgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgc3JjLT5zaWduYWxfaGFuZG9mZnMpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RVTVA6CisgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgc3JjLT5kdW1wKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MQVNUX01FU1NBR0U6CisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHNyYyk7CisgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBzcmMtPmxhc3RfbWVzc2FnZSk7CisgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DQU5fQUNUSVZBVEVfUFVTSDoKKyAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBHU1RfQkFTRV9TUkMgKHNyYyktPmNhbl9hY3RpdmF0ZV9wdXNoKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DQU5fQUNUSVZBVEVfUFVMTDoKKyAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBzcmMtPmNhbl9hY3RpdmF0ZV9wdWxsKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9JU19MSVZFOgorICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGdzdF9iYXNlX3NyY19pc19saXZlIChiYXNlc3JjKSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRk9STUFUOgorICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHNyYy0+Zm9ybWF0KTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9mYWtlX3NyY19wcmVwYXJlX2J1ZmZlciAoR3N0RmFrZVNyYyAqIHNyYywgZ3VpbnQ4ICogZGF0YSwgZ3NpemUgc2l6ZSkKK3sKKyAgaWYgKHNpemUgPT0gMCkKKyAgICByZXR1cm47CisKKyAgc3dpdGNoIChzcmMtPmZpbGx0eXBlKSB7CisgICAgY2FzZSBGQUtFX1NSQ19GSUxMVFlQRV9aRVJPOgorICAgICAgbWVtc2V0IChkYXRhLCAwLCBzaXplKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRkFLRV9TUkNfRklMTFRZUEVfUkFORE9NOgorICAgIHsKKyAgICAgIGdpbnQgaTsKKyAgICAgIGd1aW50OCAqcHRyID0gZGF0YTsKKworICAgICAgZm9yIChpID0gc2l6ZTsgaTsgaS0tKSB7CisgICAgICAgICpwdHIrKyA9IGdfcmFuZG9tX2ludF9yYW5nZSAoMCwgMjU2KTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEZBS0VfU1JDX0ZJTExUWVBFX1BBVFRFUk46CisgICAgICBzcmMtPnBhdHRlcm5fYnl0ZSA9IDB4MDA7CisgICAgY2FzZSBGQUtFX1NSQ19GSUxMVFlQRV9QQVRURVJOX0NPTlQ6CisgICAgeworICAgICAgZ2ludCBpOworICAgICAgZ3VpbnQ4ICpwdHIgPSBkYXRhOworCisgICAgICBmb3IgKGkgPSBzaXplOyBpOyBpLS0pIHsKKyAgICAgICAgKnB0cisrID0gc3JjLT5wYXR0ZXJuX2J5dGUrKzsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEZBS0VfU1JDX0ZJTExUWVBFX05PVEhJTkc6CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYyBHc3RCdWZmZXIgKgorZ3N0X2Zha2Vfc3JjX2FsbG9jX2J1ZmZlciAoR3N0RmFrZVNyYyAqIHNyYywgZ3VpbnQgc2l6ZSkKK3sKKyAgR3N0QnVmZmVyICpidWY7CisgIGdwb2ludGVyIGRhdGE7CisgIGdib29sZWFuIGRvX3ByZXBhcmUgPSBGQUxTRTsKKworICBidWYgPSBnc3RfYnVmZmVyX25ldyAoKTsKKworICBpZiAoc2l6ZSAhPSAwKSB7CisgICAgc3dpdGNoIChzcmMtPmZpbGx0eXBlKSB7CisgICAgICBjYXNlIEZBS0VfU1JDX0ZJTExUWVBFX05PVEhJTkc6CisgICAgICAgIGRhdGEgPSBnX21hbGxvYyAoc2l6ZSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGQUtFX1NSQ19GSUxMVFlQRV9aRVJPOgorICAgICAgICBkYXRhID0gZ19tYWxsb2MwIChzaXplKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEZBS0VfU1JDX0ZJTExUWVBFX1JBTkRPTToKKyAgICAgIGNhc2UgRkFLRV9TUkNfRklMTFRZUEVfUEFUVEVSTjoKKyAgICAgIGNhc2UgRkFLRV9TUkNfRklMTFRZUEVfUEFUVEVSTl9DT05UOgorICAgICAgZGVmYXVsdDoKKyAgICAgICAgZGF0YSA9IGdfbWFsbG9jIChzaXplKTsKKyAgICAgICAgZG9fcHJlcGFyZSA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoZG9fcHJlcGFyZSkKKyAgICAgIGdzdF9mYWtlX3NyY19wcmVwYXJlX2J1ZmZlciAoc3JjLCBkYXRhLCBzaXplKTsKKworICAgIGdzdF9idWZmZXJfdGFrZV9tZW1vcnkgKGJ1ZiwgLTEsCisgICAgICAgIGdzdF9tZW1vcnlfbmV3X3dyYXBwZWQgKDAsIGRhdGEsIGdfZnJlZSwgc2l6ZSwgMCwgc2l6ZSkpOworICB9CisKKyAgcmV0dXJuIGJ1ZjsKK30KKworc3RhdGljIGd1aW50Citnc3RfZmFrZV9zcmNfZ2V0X3NpemUgKEdzdEZha2VTcmMgKiBzcmMpCit7CisgIGd1aW50IHNpemU7CisKKyAgc3dpdGNoIChzcmMtPnNpemV0eXBlKSB7CisgICAgY2FzZSBGQUtFX1NSQ19TSVpFVFlQRV9GSVhFRDoKKyAgICAgIHNpemUgPSBzcmMtPnNpemVtYXg7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZBS0VfU1JDX1NJWkVUWVBFX1JBTkRPTToKKyAgICAgIHNpemUgPSBnX3JhbmRvbV9pbnRfcmFuZ2UgKHNyYy0+c2l6ZW1pbiwgc3JjLT5zaXplbWF4KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRkFLRV9TUkNfU0laRVRZUEVfRU1QVFk6CisgICAgZGVmYXVsdDoKKyAgICAgIHNpemUgPSAwOworICAgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIEdzdEJ1ZmZlciAqCitnc3RfZmFrZV9zcmNfY3JlYXRlX2J1ZmZlciAoR3N0RmFrZVNyYyAqIHNyYywgZ3NpemUgKiBidWZzaXplKQoreworICBHc3RCdWZmZXIgKmJ1ZjsKKyAgZ3NpemUgc2l6ZSA9IGdzdF9mYWtlX3NyY19nZXRfc2l6ZSAoc3JjKTsKKyAgZ2Jvb2xlYW4gZHVtcCA9IHNyYy0+ZHVtcDsKKyAgZ3VpbnQ4ICpkYXRhOworCisgICpidWZzaXplID0gc2l6ZTsKKworICBzd2l0Y2ggKHNyYy0+ZGF0YSkgeworICAgIGNhc2UgRkFLRV9TUkNfREFUQV9BTExPQ0FURToKKyAgICAgIGJ1ZiA9IGdzdF9mYWtlX3NyY19hbGxvY19idWZmZXIgKHNyYywgc2l6ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZBS0VfU1JDX0RBVEFfU1VCQlVGRkVSOgorICAgICAgLyogc2VlIGlmIHdlIGhhdmUgYSBwYXJlbnQgdG8gc3ViYnVmZmVyICovCisgICAgICBpZiAoIXNyYy0+cGFyZW50KSB7CisgICAgICAgIGdzdF9mYWtlX3NyY19hbGxvY19wYXJlbnQgKHNyYyk7CisgICAgICAgIGdfYXNzZXJ0IChzcmMtPnBhcmVudCk7CisgICAgICB9CisgICAgICAvKiBzZWUgaWYgaXQncyBsYXJnZSBlbm91Z2ggKi8KKyAgICAgIGlmICgoc3JjLT5wYXJlbnRzaXplIC0gc3JjLT5wYXJlbnRvZmZzZXQpID49IHNpemUpIHsKKyAgICAgICAgYnVmID0KKyAgICAgICAgICAgIGdzdF9idWZmZXJfY29weV9yZWdpb24gKHNyYy0+cGFyZW50LCBHU1RfQlVGRkVSX0NPUFlfQUxMLAorICAgICAgICAgICAgc3JjLT5wYXJlbnRvZmZzZXQsIHNpemUpOworICAgICAgICBzcmMtPnBhcmVudG9mZnNldCArPSBzaXplOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgLyogdGhlIHBhcmVudCBpcyB1c2VsZXNzIG5vdyAqLworICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChzcmMtPnBhcmVudCk7CisgICAgICAgIHNyYy0+cGFyZW50ID0gTlVMTDsKKyAgICAgICAgLyogdHJ5IGFnYWluICh0aGlzIHdpbGwgYWxsb2NhdGUgYSBuZXcgcGFyZW50KSAqLworICAgICAgICByZXR1cm4gZ3N0X2Zha2Vfc3JjX2NyZWF0ZV9idWZmZXIgKHNyYywgYnVmc2l6ZSk7CisgICAgICB9CisgICAgICBkYXRhID0gZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJnNpemUsIE5VTEwsIEdTVF9NQVBfV1JJVEUpOworICAgICAgZ3N0X2Zha2Vfc3JjX3ByZXBhcmVfYnVmZmVyIChzcmMsIGRhdGEsIHNpemUpOworICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCBkYXRhLCBzaXplKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBnX3dhcm5pbmcgKCJmYWtlc3JjOiBkdW5ubyBob3cgdG8gYWxsb2NhdGUgYnVmZmVycyAhIik7CisgICAgICBidWYgPSBnc3RfYnVmZmVyX25ldyAoKTsKKyAgICAgIGJyZWFrOworICB9CisgIGlmIChkdW1wKSB7CisgICAgZGF0YSA9IGdzdF9idWZmZXJfbWFwIChidWYsICZzaXplLCBOVUxMLCBHU1RfTUFQX1JFQUQpOworICAgIGdzdF91dGlsX2R1bXBfbWVtIChkYXRhLCBzaXplKTsKKyAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsIGRhdGEsIHNpemUpOworICB9CisKKyAgcmV0dXJuIGJ1ZjsKK30KKworc3RhdGljIHZvaWQKK2dzdF9mYWtlX3NyY19nZXRfdGltZXMgKEdzdEJhc2VTcmMgKiBiYXNlc3JjLCBHc3RCdWZmZXIgKiBidWZmZXIsCisgICAgR3N0Q2xvY2tUaW1lICogc3RhcnQsIEdzdENsb2NrVGltZSAqIGVuZCkKK3sKKyAgR3N0RmFrZVNyYyAqc3JjOworCisgIHNyYyA9IEdTVF9GQUtFX1NSQyAoYmFzZXNyYyk7CisKKyAgLyogc3luYyBvbiB0aGUgdGltZXN0YW1wIG9mIHRoZSBidWZmZXIgaWYgcmVxdWVzdGVkLiAqLworICBpZiAoc3JjLT5zeW5jKSB7CisgICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpOworCisgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lc3RhbXApKSB7CisgICAgICAvKiBnZXQgZHVyYXRpb24gdG8gY2FsY3VsYXRlIGVuZCB0aW1lICovCisgICAgICBHc3RDbG9ja1RpbWUgZHVyYXRpb24gPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpOworCisgICAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGR1cmF0aW9uKSkgeworICAgICAgICAqZW5kID0gdGltZXN0YW1wICsgZHVyYXRpb247CisgICAgICB9CisgICAgICAqc3RhcnQgPSB0aW1lc3RhbXA7CisgICAgfQorICB9IGVsc2UgeworICAgICpzdGFydCA9IC0xOworICAgICplbmQgPSAtMTsKKyAgfQorfQorCitzdGF0aWMgR3N0Rmxvd1JldHVybgorZ3N0X2Zha2Vfc3JjX2NyZWF0ZSAoR3N0QmFzZVNyYyAqIGJhc2VzcmMsIGd1aW50NjQgb2Zmc2V0LCBndWludCBsZW5ndGgsCisgICAgR3N0QnVmZmVyICoqIHJldCkKK3sKKyAgR3N0RmFrZVNyYyAqc3JjOworICBHc3RCdWZmZXIgKmJ1ZjsKKyAgR3N0Q2xvY2tUaW1lIHRpbWU7CisgIGdzaXplIHNpemU7CisKKyAgc3JjID0gR1NUX0ZBS0VfU1JDIChiYXNlc3JjKTsKKworICBidWYgPSBnc3RfZmFrZV9zcmNfY3JlYXRlX2J1ZmZlciAoc3JjLCAmc2l6ZSk7CisgIEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpID0gc3JjLT5idWZmZXJfY291bnQrKzsKKworICBpZiAoc3JjLT5kYXRhcmF0ZSA+IDApIHsKKyAgICB0aW1lID0gKHNyYy0+Ynl0ZXNfc2VudCAqIEdTVF9TRUNPTkQpIC8gc3JjLT5kYXRhcmF0ZTsKKworICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikgPSBzaXplICogR1NUX1NFQ09ORCAvIHNyYy0+ZGF0YXJhdGU7CisgIH0gZWxzZSBpZiAoZ3N0X2Jhc2Vfc3JjX2lzX2xpdmUgKGJhc2VzcmMpKSB7CisgICAgR3N0Q2xvY2sgKmNsb2NrOworCisgICAgY2xvY2sgPSBnc3RfZWxlbWVudF9nZXRfY2xvY2sgKEdTVF9FTEVNRU5UIChzcmMpKTsKKworICAgIGlmIChjbG9jaykgeworICAgICAgdGltZSA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOworICAgICAgdGltZSAtPSBnc3RfZWxlbWVudF9nZXRfYmFzZV90aW1lIChHU1RfRUxFTUVOVCAoc3JjKSk7CisgICAgICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIG5vdCBhbiBlcnJvciBub3QgdG8gaGF2ZSBhIGNsb2NrICovCisgICAgICB0aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgdGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgIH0KKworICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSA9IHRpbWU7CisKKyAgaWYgKCFzcmMtPnNpbGVudCkgeworICAgIGdjaGFyIHRzX3N0cls2NF0sIGR1cl9zdHJbNjRdOworCisgICAgR1NUX09CSkVDVF9MT0NLIChzcmMpOworICAgIGdfZnJlZSAoc3JjLT5sYXN0X21lc3NhZ2UpOworCisgICAgaWYgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpICE9IEdTVF9DTE9DS19USU1FX05PTkUpIHsKKyAgICAgIGdfc25wcmludGYgKHRzX3N0ciwgc2l6ZW9mICh0c19zdHIpLCAiJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGdfc3RybGNweSAodHNfc3RyLCAibm9uZSIsIHNpemVvZiAodHNfc3RyKSk7CisgICAgfQorCisgICAgaWYgKEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkgeworICAgICAgZ19zbnByaW50ZiAoZHVyX3N0ciwgc2l6ZW9mIChkdXJfc3RyKSwgIiUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGdfc3RybGNweSAoZHVyX3N0ciwgIm5vbmUiLCBzaXplb2YgKGR1cl9zdHIpKTsKKyAgICB9CisKKyAgICBzcmMtPmxhc3RfbWVzc2FnZSA9CisgICAgICAgIGdfc3RyZHVwX3ByaW50ZiAoImdldCAgICAgICoqKioqKiogPiAoJTVkIGJ5dGVzLCB0aW1lc3RhbXA6ICVzIgorICAgICAgICAiLCBkdXJhdGlvbjogJXMsIG9mZnNldDogJSIgR19HSU5UNjRfRk9STUFUICIsIG9mZnNldF9lbmQ6ICUiCisgICAgICAgIEdfR0lOVDY0X0ZPUk1BVCAiLCBmbGFnczogJWQpICVwIiwgKGdpbnQpIHNpemUsIHRzX3N0ciwKKyAgICAgICAgZHVyX3N0ciwgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZiksIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoYnVmKSwKKyAgICAgICAgR1NUX01JTklfT0JKRUNUX0NBU1QgKGJ1ZiktPmZsYWdzLCBidWYpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmMpOworCisjaWYgIUdMSUJfQ0hFQ0tfVkVSU0lPTigyLDI2LDApCisgICAgZ19vYmplY3Rfbm90aWZ5ICgoR09iamVjdCAqKSBzcmMsICJsYXN0LW1lc3NhZ2UiKTsKKyNlbHNlCisgICAgZ19vYmplY3Rfbm90aWZ5X2J5X3BzcGVjICgoR09iamVjdCAqKSBzcmMsIHBzcGVjX2xhc3RfbWVzc2FnZSk7CisjZW5kaWYKKyAgfQorCisgIGlmIChzcmMtPnNpZ25hbF9oYW5kb2ZmcykgeworICAgIEdTVF9MT0dfT0JKRUNUIChzcmMsICJwcmUgaGFuZG9mZiBlbWl0Iik7CisgICAgZ19zaWduYWxfZW1pdCAoc3JjLCBnc3RfZmFrZV9zcmNfc2lnbmFsc1tTSUdOQUxfSEFORE9GRl0sIDAsIGJ1ZiwKKyAgICAgICAgYmFzZXNyYy0+c3JjcGFkKTsKKyAgICBHU1RfTE9HX09CSkVDVCAoc3JjLCAicG9zdCBoYW5kb2ZmIGVtaXQiKTsKKyAgfQorCisgIHNyYy0+Ynl0ZXNfc2VudCArPSBzaXplOworCisgICpyZXQgPSBidWY7CisgIHJldHVybiBHU1RfRkxPV19PSzsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfZmFrZV9zcmNfc3RhcnQgKEdzdEJhc2VTcmMgKiBiYXNlc3JjKQoreworICBHc3RGYWtlU3JjICpzcmM7CisKKyAgc3JjID0gR1NUX0ZBS0VfU1JDIChiYXNlc3JjKTsKKworICBzcmMtPmJ1ZmZlcl9jb3VudCA9IDA7CisgIHNyYy0+cGF0dGVybl9ieXRlID0gMHgwMDsKKyAgc3JjLT5ieXRlc19zZW50ID0gMDsKKworICBnc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdCAoYmFzZXNyYywgc3JjLT5mb3JtYXQpOworCisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9mYWtlX3NyY19zdG9wIChHc3RCYXNlU3JjICogYmFzZXNyYykKK3sKKyAgR3N0RmFrZVNyYyAqc3JjOworCisgIHNyYyA9IEdTVF9GQUtFX1NSQyAoYmFzZXNyYyk7CisKKyAgR1NUX09CSkVDVF9MT0NLIChzcmMpOworICBpZiAoc3JjLT5wYXJlbnQpIHsKKyAgICBnc3RfYnVmZmVyX3VucmVmIChzcmMtPnBhcmVudCk7CisgICAgc3JjLT5wYXJlbnQgPSBOVUxMOworICB9CisgIGdfZnJlZSAoc3JjLT5sYXN0X21lc3NhZ2UpOworICBzcmMtPmxhc3RfbWVzc2FnZSA9IE5VTEw7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmMpOworCisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9mYWtlX3NyY19pc19zZWVrYWJsZSAoR3N0QmFzZVNyYyAqIGJhc2VzcmMpCit7CisgIEdzdEZha2VTcmMgKnNyYyA9IEdTVF9GQUtFX1NSQyAoYmFzZXNyYyk7CisKKyAgcmV0dXJuIHNyYy0+Y2FuX2FjdGl2YXRlX3B1bGw7Cit9CmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuaCBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNjc1YzIKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuaApAQCAtMCwwICsxLDE2OSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgorICoKKyAqIGdzdGZha2VzcmMuaDoKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKKyNpZm5kZWYgX19HU1RfRkFLRV9TUkNfSF9fCisjZGVmaW5lIF9fR1NUX0ZBS0VfU1JDX0hfXworCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2VzcmMuaD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAqIEdzdEZha2VTcmNPdXRwdXRUeXBlOgorICogQEZBS0VfU1JDX0ZJUlNUX0xBU1RfTE9PUDogZmlyc3QgcGFkIHRoZW4gbGFzdCBwYWQKKyAqIEBGQUtFX1NSQ19MQVNUX0ZJUlNUX0xPT1A6IGxhc3QgcGFkIHRoZW4gZmlyc3QgcGFkCisgKiBARkFLRV9TUkNfUElOR19QT05HOiBwaW5nIHBvbmcgYmV0d2VlbiBwYWRzCisgKiBARkFLRV9TUkNfT1JERVJFRF9SQU5ET006IG9yZGVyZWQgcmFuZG9tIHBhZAorICogQEZBS0VfU1JDX1JBTkRPTTogcmFuZG9tIHBhZAorICogQEZBS0VfU1JDX1BBVFRFUk5fTE9PUDogbG9vcCBiZXR3ZWVuIHBhZHMgaW4gYSBwYXJ0aWN1bGFyIHBhdHRlcm4KKyAqIEBGQUtFX1NSQ19QSU5HX1BPTkdfUEFUVEVSTjogcGluZyBwb25nIGJhc2VkIG9uIGEgcGF0dGVybgorICogQEZBS0VfU1JDX0dFVF9BTFdBWVNfU1VDRUVEUzogYSBnZXQgYWx3YXlzIHN1Y2NlZWRzIG9uIGEgcGFkCisgKgorICogVGhlIGRpZmZlcmVudCBvdXRwdXQgdHlwZXMuIFVudXNlZCBjdXJyZW50bHkuCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIEZBS0VfU1JDX0ZJUlNUX0xBU1RfTE9PUCA9IDEsCisgIEZBS0VfU1JDX0xBU1RfRklSU1RfTE9PUCwKKyAgRkFLRV9TUkNfUElOR19QT05HLAorICBGQUtFX1NSQ19PUkRFUkVEX1JBTkRPTSwKKyAgRkFLRV9TUkNfUkFORE9NLAorICBGQUtFX1NSQ19QQVRURVJOX0xPT1AsCisgIEZBS0VfU1JDX1BJTkdfUE9OR19QQVRURVJOLAorICBGQUtFX1NSQ19HRVRfQUxXQVlTX1NVQ0VFRFMKK30gR3N0RmFrZVNyY091dHB1dFR5cGU7CisKKy8qKgorICogR3N0RmFrZVNyY0RhdGFUeXBlOgorICogQEZBS0VfU1JDX0RBVEFfQUxMT0NBVEU6IGFsbG9jYXRlIGJ1ZmZlcnMKKyAqIEBGQUtFX1NSQ19EQVRBX1NVQkJVRkZFUjogc3ViYnVmZmVyIGVhY2ggYnVmZmVyCisgKgorICogVGhlIGRpZmZlcmVudCB3YXlzIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZC4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgRkFLRV9TUkNfREFUQV9BTExPQ0FURSA9IDEsCisgIEZBS0VfU1JDX0RBVEFfU1VCQlVGRkVSCit9IEdzdEZha2VTcmNEYXRhVHlwZTsKKworLyoqCisgKiBHc3RGYWtlU3JjU2l6ZVR5cGU6CisgKiBARkFLRV9TUkNfU0laRVRZUEVfRU1QVFk6IGNyZWF0ZSBlbXB0eSBidWZmZXJzCisgKiBARkFLRV9TUkNfU0laRVRZUEVfRklYRUQ6IGZpeGVkIGJ1ZmZlciBzaXplIChzaXplbWF4IHNpemVkKQorICogQEZBS0VfU1JDX1NJWkVUWVBFX1JBTkRPTTogcmFuZG9tIGJ1ZmZlciBzaXplIChzaXplbWluIDw9IHNpemUgPD0gc2l6ZW1heCkKKyAqCisgKiBUaGUgZGlmZmVyZW50IHNpemUgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXJzLgorICovCit0eXBlZGVmIGVudW0geworICBGQUtFX1NSQ19TSVpFVFlQRV9FTVBUWSA9IDEsCisgIEZBS0VfU1JDX1NJWkVUWVBFX0ZJWEVELAorICBGQUtFX1NSQ19TSVpFVFlQRV9SQU5ET00KK30gR3N0RmFrZVNyY1NpemVUeXBlOworCisvKioKKyAqIEdzdEZha2VTcmNGaWxsVHlwZToKKyAqIEBGQUtFX1NSQ19GSUxMVFlQRV9OT1RISU5HOiBkbyBub3QgZmlsbCBidWZmZXJzIAorICogQEZBS0VfU1JDX0ZJTExUWVBFX1pFUk86IGZpbGwgYnVmZmVycyB3aXRoIDAKKyAqIEBGQUtFX1NSQ19GSUxMVFlQRV9SQU5ET006IGZpbGwgYnVmZmVycyB3aXRoIHJhbmRvbSBieXRlcworICogQEZBS0VfU1JDX0ZJTExUWVBFX1BBVFRFUk46IGZpbGwgYnVmZmVycyB3aXRoIGEgcGF0dGVybgorICogQEZBS0VfU1JDX0ZJTExUWVBFX1BBVFRFUk5fQ09OVDogZmlsbCBidWZmZXJzIHdpdGggYSBjb250aW51b3VzIHBhdHRlcm4KKyAqCisgKiBUaGUgZGlmZmVyZW50IHdheXMgb2YgZmlsbGluZyB0aGUgYnVmZmVycy4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgRkFLRV9TUkNfRklMTFRZUEVfTk9USElORyA9IDEsCisgIEZBS0VfU1JDX0ZJTExUWVBFX1pFUk8sCisgIEZBS0VfU1JDX0ZJTExUWVBFX1JBTkRPTSwKKyAgRkFLRV9TUkNfRklMTFRZUEVfUEFUVEVSTiwKKyAgRkFLRV9TUkNfRklMTFRZUEVfUEFUVEVSTl9DT05UCit9IEdzdEZha2VTcmNGaWxsVHlwZTsKKworI2RlZmluZSBHU1RfVFlQRV9GQUtFX1NSQyBcCisgIChnc3RfZmFrZV9zcmNfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgR1NUX0ZBS0VfU1JDKG9iaikgXAorICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfRkFLRV9TUkMsR3N0RmFrZVNyYykpCisjZGVmaW5lIEdTVF9GQUtFX1NSQ19DTEFTUyhrbGFzcykgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9GQUtFX1NSQyxHc3RGYWtlU3JjQ2xhc3MpKQorI2RlZmluZSBHU1RfSVNfRkFLRV9TUkMob2JqKSBcCisgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9GQUtFX1NSQykpCisjZGVmaW5lIEdTVF9JU19GQUtFX1NSQ19DTEFTUyhrbGFzcykgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9GQUtFX1NSQykpCisKK3R5cGVkZWYgc3RydWN0IF9Hc3RGYWtlU3JjIEdzdEZha2VTcmM7Cit0eXBlZGVmIHN0cnVjdCBfR3N0RmFrZVNyY0NsYXNzIEdzdEZha2VTcmNDbGFzczsKKworLyoqCisgKiBHc3RGYWtlU3JjOgorICoKKyAqIE9wYXF1ZSAjR3N0RmFrZVNyYyBkYXRhIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IF9Hc3RGYWtlU3JjIHsKKyAgR3N0QmFzZVNyYyAgICAgZWxlbWVudDsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgZ2Jvb2xlYW4JIGhhc19sb29wOworICBnYm9vbGVhbgkgaGFzX2dldHJhbmdlOworCisgIEdzdEZha2VTcmNPdXRwdXRUeXBlIG91dHB1dDsKKyAgR3N0RmFrZVNyY0RhdGFUeXBlICAgZGF0YTsKKyAgR3N0RmFrZVNyY1NpemVUeXBlICAgc2l6ZXR5cGU7CisgIEdzdEZha2VTcmNGaWxsVHlwZSAgIGZpbGx0eXBlOworCisgIGd1aW50CQlzaXplbWluOworICBndWludAkJc2l6ZW1heDsKKyAgR3N0QnVmZmVyCSpwYXJlbnQ7CisgIGd1aW50CQlwYXJlbnRzaXplOworICBndWludAkJcGFyZW50b2Zmc2V0OworICBndWludDgJIHBhdHRlcm5fYnl0ZTsKKyAgZ2NoYXIJCSpwYXR0ZXJuOworICBHTGlzdAkJKnBhdHRlcm5saXN0OworICBnaW50CQkgZGF0YXJhdGU7CisgIGdib29sZWFuCSBzeW5jOworICBHc3RDbG9jawkqY2xvY2s7CisKKyAgZ2ludAkJIG51bV9idWZmZXJzOworICBnaW50CQkgcnRfbnVtX2J1ZmZlcnM7IC8qIHdlIGFyZSBnb2luZyB0byBjaGFuZ2UgdGhpcyBhdCBydW50aW1lICovCisgIGdpbnQ2NAkgYnVmZmVyX2NvdW50OworICBnYm9vbGVhbgkgc2lsZW50OworICBnYm9vbGVhbgkgc2lnbmFsX2hhbmRvZmZzOworICBnYm9vbGVhbgkgZHVtcDsKKyAgZ2Jvb2xlYW4JIGNhbl9hY3RpdmF0ZV9wdWxsOworICBHc3RGb3JtYXQgICAgICBmb3JtYXQ7CisKKyAgZ3VpbnQ2NCAgICAgICAgYnl0ZXNfc2VudDsKKworICBnY2hhcgkJKmxhc3RfbWVzc2FnZTsKK307CisKK3N0cnVjdCBfR3N0RmFrZVNyY0NsYXNzIHsKKyAgR3N0QmFzZVNyY0NsYXNzIHBhcmVudF9jbGFzczsKKworICAvKjwgcHVibGljID4qLworICAvKiBzaWduYWxzICovCisgIHZvaWQgKCpoYW5kb2ZmKSAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0QnVmZmVyICpidWYsIEdzdFBhZCAqcGFkKTsKK307CisKK0dUeXBlIGdzdF9mYWtlX3NyY19nZXRfdHlwZSAodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9GQUtFX1NSQ19IX18gKi8KZGlmZiAtLWdpdCBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmMgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZWRiM2YKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jCkBAIC0wLDAgKzEsNjM0IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+CisgKgorICogZ3N0ZmRzaW5rLmM6CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoqCisgKiBTRUNUSU9OOmVsZW1lbnQtZmRzaW5rCisgKiBAc2VlX2Fsc286ICNHc3RGZFNyYworICoKKyAqIFdyaXRlIGRhdGEgdG8gYSB1bml4IGZpbGUgZGVzY3JpcHRvci4KKyAqCisgKiBUaGlzIGVsZW1lbnQgd2lsbCBzeW5jaHJvbml6ZSBvbiB0aGUgY2xvY2sgYmVmb3JlIHdyaXRpbmcgdGhlIGRhdGEgb24gdGhlCisgKiBzb2NrZXQuIEZvciBmaWxlIGRlc2NyaXB0b3JzIHdoZXJlIHRoaXMgZG9lcyBub3QgbWFrZSBzZW5zZSAoZmlsZXMsIC4uLikgdGhlCisgKiAjR3N0QmFzZVNpbms6c3luYyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBkaXNhYmxlIHN5bmNocm9uaXNhdGlvbi4KKyAqCisgKiBMYXN0IHJldmlld2VkIG9uIDIwMDYtMDQtMjggKDAuMTAuNikKKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgIi4uLy4uL2dzdC9nc3QtaTE4bi1saWIuaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaWZkZWYgR19PU19XSU4zMgorI2luY2x1ZGUgPGlvLmg+ICAgICAgICAgICAgICAgICAvKiBsc2Vlaywgb3BlbiwgY2xvc2UsIHJlYWQgKi8KKyN1bmRlZiBsc2VlaworI2RlZmluZSBsc2VlayBfbHNlZWtpNjQKKyN1bmRlZiBvZmZfdAorI2RlZmluZSBvZmZfdCBndWludDY0CisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgX01TQ19WRVIKKyN1bmRlZiBzdGF0CisjZGVmaW5lIHN0YXQgX3N0YXQKKyNkZWZpbmUgZnN0YXQgX2ZzdGF0CisjZGVmaW5lIFNfSVNSRUcobSkJKCgobSkmU19JRlJFRyk9PVNfSUZSRUcpCisjZW5kaWYKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiZ3N0ZmRzaW5rLmgiCisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAorICAgIEdTVF9QQURfU0lOSywKKyAgICBHU1RfUEFEX0FMV0FZUywKKyAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKKworR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X2ZkX3NpbmtfX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9mZF9zaW5rX19kZWJ1ZworCisKKy8qIEZkU2luayBzaWduYWxzIGFuZCBhcmdzICovCitlbnVtCit7CisgIC8qIEZJTEwgTUUgKi8KKyAgTEFTVF9TSUdOQUwKK307CisKK2VudW0KK3sKKyAgQVJHXzAsCisgIEFSR19GRAorfTsKKworc3RhdGljIHZvaWQgZ3N0X2ZkX3NpbmtfdXJpX2hhbmRsZXJfaW5pdCAoZ3BvaW50ZXIgZ19pZmFjZSwKKyAgICBncG9pbnRlciBpZmFjZV9kYXRhKTsKKworI2RlZmluZSBfZG9faW5pdCBcCisgIEdfSU1QTEVNRU5UX0lOVEVSRkFDRSAoR1NUX1RZUEVfVVJJX0hBTkRMRVIsIGdzdF9mZF9zaW5rX3VyaV9oYW5kbGVyX2luaXQpOyBcCisgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfZmRfc2lua19fZGVidWcsICJmZHNpbmsiLCAwLCAiZmRzaW5rIGVsZW1lbnQiKTsKKyNkZWZpbmUgZ3N0X2ZkX3NpbmtfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdEZkU2luaywgZ3N0X2ZkX3NpbmssIEdTVF9UWVBFX0JBU0VfU0lOSywgX2RvX2luaXQpOworCitzdGF0aWMgdm9pZCBnc3RfZmRfc2lua19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7CitzdGF0aWMgdm9pZCBnc3RfZmRfc2lua19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7CitzdGF0aWMgdm9pZCBnc3RfZmRfc2lua19kaXNwb3NlIChHT2JqZWN0ICogb2JqKTsKKworc3RhdGljIGdib29sZWFuIGdzdF9mZF9zaW5rX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdFF1ZXJ5ICogcXVlcnkpOworc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2ZkX3NpbmtfcmVuZGVyIChHc3RCYXNlU2luayAqIHNpbmssCisgICAgR3N0QnVmZmVyICogYnVmZmVyKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfZmRfc2lua19zdGFydCAoR3N0QmFzZVNpbmsgKiBiYXNlc2luayk7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2ZkX3Npbmtfc3RvcCAoR3N0QmFzZVNpbmsgKiBiYXNlc2luayk7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2ZkX3NpbmtfdW5sb2NrIChHc3RCYXNlU2luayAqIGJhc2VzaW5rKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfZmRfc2lua191bmxvY2tfc3RvcCAoR3N0QmFzZVNpbmsgKiBiYXNlc2luayk7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2ZkX3NpbmtfZXZlbnQgKEdzdEJhc2VTaW5rICogc2luaywgR3N0RXZlbnQgKiBldmVudCk7CisKK3N0YXRpYyBnYm9vbGVhbiBnc3RfZmRfc2lua19kb19zZWVrIChHc3RGZFNpbmsgKiBmZHNpbmssIGd1aW50NjQgbmV3X29mZnNldCk7CisKK3N0YXRpYyB2b2lkCitnc3RfZmRfc2lua19jbGFzc19pbml0IChHc3RGZFNpbmtDbGFzcyAqIGtsYXNzKQoreworICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7CisgIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKKyAgR3N0QmFzZVNpbmtDbGFzcyAqZ3N0YmFzZXNpbmtfY2xhc3M7CisKKyAgZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7CisgIGdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOworICBnc3RiYXNlc2lua19jbGFzcyA9IEdTVF9CQVNFX1NJTktfQ0xBU1MgKGtsYXNzKTsKKworICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfZmRfc2lua19zZXRfcHJvcGVydHk7CisgIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9mZF9zaW5rX2dldF9wcm9wZXJ0eTsKKyAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF9mZF9zaW5rX2Rpc3Bvc2U7CisKKyAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2ltcGxlIChnc3RlbGVtZW50X2NsYXNzLAorICAgICAgIkZpbGVkZXNjcmlwdG9yIFNpbmsiLAorICAgICAgIlNpbmsvRmlsZSIsCisgICAgICAiV3JpdGUgZGF0YSB0byBhIGZpbGUgZGVzY3JpcHRvciIsICJFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PiIpOworICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAorICAgICAgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0ICgmc2lua3RlbXBsYXRlKSk7CisKKyAgZ3N0YmFzZXNpbmtfY2xhc3MtPnJlbmRlciA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmRfc2lua19yZW5kZXIpOworICBnc3RiYXNlc2lua19jbGFzcy0+c3RhcnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZkX3Npbmtfc3RhcnQpOworICBnc3RiYXNlc2lua19jbGFzcy0+c3RvcCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmRfc2lua19zdG9wKTsKKyAgZ3N0YmFzZXNpbmtfY2xhc3MtPnVubG9jayA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmRfc2lua191bmxvY2spOworICBnc3RiYXNlc2lua19jbGFzcy0+dW5sb2NrX3N0b3AgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZkX3NpbmtfdW5sb2NrX3N0b3ApOworICBnc3RiYXNlc2lua19jbGFzcy0+ZXZlbnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZkX3NpbmtfZXZlbnQpOworCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIEFSR19GRCwKKyAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJmZCIsICJmZCIsICJBbiBvcGVuIGZpbGUgZGVzY3JpcHRvciB0byB3cml0ZSB0byIsCisgICAgICAgICAgMCwgR19NQVhJTlQsIDEsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2ZkX3NpbmtfaW5pdCAoR3N0RmRTaW5rICogZmRzaW5rKQoreworICBHc3RQYWQgKnBhZDsKKworICBwYWQgPSBHU1RfQkFTRV9TSU5LX1BBRCAoZmRzaW5rKTsKKyAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKHBhZCwgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mZF9zaW5rX3F1ZXJ5KSk7CisKKyAgZmRzaW5rLT5mZCA9IDE7CisgIGZkc2luay0+dXJpID0gZ19zdHJkdXBfcHJpbnRmICgiZmQ6Ly8lZCIsIGZkc2luay0+ZmQpOworICBmZHNpbmstPmJ5dGVzX3dyaXR0ZW4gPSAwOworICBmZHNpbmstPmN1cnJlbnRfcG9zID0gMDsKKworICBnc3RfYmFzZV9zaW5rX3NldF9zeW5jIChHU1RfQkFTRV9TSU5LIChmZHNpbmspLCBGQUxTRSk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfZmRfc2lua19kaXNwb3NlIChHT2JqZWN0ICogb2JqKQoreworICBHc3RGZFNpbmsgKmZkc2luayA9IEdTVF9GRF9TSU5LIChvYmopOworCisgIGdfZnJlZSAoZmRzaW5rLT51cmkpOworICBmZHNpbmstPnVyaSA9IE5VTEw7CisKKyAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iaik7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2ZkX3NpbmtfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0UXVlcnkgKiBxdWVyeSkKK3sKKyAgR3N0RmRTaW5rICpmZHNpbms7CisgIEdzdEZvcm1hdCBmb3JtYXQ7CisKKyAgZmRzaW5rID0gR1NUX0ZEX1NJTksgKEdTVF9QQURfUEFSRU5UIChwYWQpKTsKKworICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKKyAgICBjYXNlIEdTVF9RVUVSWV9QT1NJVElPTjoKKyAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbiAocXVlcnksICZmb3JtYXQsIE5VTEwpOworICAgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICAgICAgY2FzZSBHU1RfRk9STUFUX0RFRkFVTFQ6CisgICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9CWVRFUzoKKyAgICAgICAgICBnc3RfcXVlcnlfc2V0X3Bvc2l0aW9uIChxdWVyeSwgR1NUX0ZPUk1BVF9CWVRFUywgZmRzaW5rLT5jdXJyZW50X3Bvcyk7CisgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgfQorCisgICAgY2FzZSBHU1RfUVVFUllfRk9STUFUUzoKKyAgICAgIGdzdF9xdWVyeV9zZXRfZm9ybWF0cyAocXVlcnksIDIsIEdTVF9GT1JNQVRfREVGQVVMVCwgR1NUX0ZPUk1BVF9CWVRFUyk7CisgICAgICByZXR1cm4gVFJVRTsKKworICAgIGNhc2UgR1NUX1FVRVJZX1VSSToKKyAgICAgIGdzdF9xdWVyeV9zZXRfdXJpIChxdWVyeSwgZmRzaW5rLT51cmkpOworICAgICAgcmV0dXJuIFRSVUU7CisKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBxdWVyeSk7CisgIH0KK30KKworc3RhdGljIEdzdEZsb3dSZXR1cm4KK2dzdF9mZF9zaW5rX3JlbmRlciAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RCdWZmZXIgKiBidWZmZXIpCit7CisgIEdzdEZkU2luayAqZmRzaW5rOworICBndWludDggKmRhdGEsICpwdHI7CisgIGdzaXplIHNpemUsIGxlZnQ7CisgIGdpbnQgd3JpdHRlbjsKKworI2lmbmRlZiBIQVZFX1dJTjMyCisgIGdpbnQgcmV0dmFsOworI2VuZGlmCisKKyAgZmRzaW5rID0gR1NUX0ZEX1NJTksgKHNpbmspOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmZHNpbmstPmZkID49IDAsIEdTVF9GTE9XX0VSUk9SKTsKKworICBkYXRhID0gZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJnNpemUsIE5VTEwsIEdTVF9NQVBfUkVBRCk7CisKKyAgcHRyID0gZGF0YTsKKyAgbGVmdCA9IHNpemU7CisKK2FnYWluOgorI2lmbmRlZiBIQVZFX1dJTjMyCisgIGRvIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChmZHNpbmssICJnb2luZyBpbnRvIHNlbGVjdCwgaGF2ZSAlIiBHX0dTSVpFX0ZPUk1BVAorICAgICAgICAiIGJ5dGVzIHRvIHdyaXRlIiwgc2l6ZSk7CisgICAgcmV0dmFsID0gZ3N0X3BvbGxfd2FpdCAoZmRzaW5rLT5mZHNldCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisgIH0gd2hpbGUgKHJldHZhbCA9PSAtMSAmJiAoZXJybm8gPT0gRUlOVFIgfHwgZXJybm8gPT0gRUFHQUlOKSk7CisKKyAgaWYgKHJldHZhbCA9PSAtMSkgeworICAgIGlmIChlcnJubyA9PSBFQlVTWSkKKyAgICAgIGdvdG8gc3RvcHBlZDsKKyAgICBlbHNlCisgICAgICBnb3RvIHNlbGVjdF9lcnJvcjsKKyAgfQorI2VuZGlmCisKKyAgR1NUX0RFQlVHX09CSkVDVCAoZmRzaW5rLCAid3JpdGluZyAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIHRvIgorICAgICAgIiBmaWxlIGRlc2NyaXB0b3IgJWQiLCBzaXplLCBmZHNpbmstPmZkKTsKKworICB3cml0dGVuID0gd3JpdGUgKGZkc2luay0+ZmQsIHB0ciwgbGVmdCk7CisKKyAgLyogY2hlY2sgZm9yIGVycm9ycyAqLworICBpZiAoR19VTkxJS0VMWSAod3JpdHRlbiA8IDApKSB7CisgICAgLyogdHJ5IHRvIHdyaXRlIGFnYWluIG9uIG5vbi1mYXRhbCBlcnJvcnMgKi8KKyAgICBpZiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVJTlRSKQorICAgICAgZ290byBhZ2FpbjsKKworICAgIC8qIGVsc2UgZ28gdG8gb3VyIGVycm9yIGhhbmRsZXIgKi8KKyAgICBnb3RvIHdyaXRlX2Vycm9yOworICB9CisKKyAgLyogYWxsIGlzIGZpbmUgd2hlbiB3ZSBnZXQgaGVyZSAqLworICBsZWZ0IC09IHdyaXR0ZW47CisgIHB0ciArPSB3cml0dGVuOworICBmZHNpbmstPmJ5dGVzX3dyaXR0ZW4gKz0gd3JpdHRlbjsKKyAgZmRzaW5rLT5jdXJyZW50X3BvcyArPSB3cml0dGVuOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKGZkc2luaywgIndyb3RlICVkIGJ5dGVzLCAlIiBHX0dTSVpFX0ZPUk1BVCAiIGxlZnQiLCB3cml0dGVuLAorICAgICAgbGVmdCk7CisKKyAgLyogc2hvcnQgd3JpdGUsIHNlbGVjdCBhbmQgdHJ5IHRvIHdyaXRlIHRoZSByZW1haW5kZXIgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKGxlZnQgPiAwKSkKKyAgICBnb3RvIGFnYWluOworCisgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgZGF0YSwgc2l6ZSk7CisKKyAgcmV0dXJuIEdTVF9GTE9XX09LOworCisjaWZuZGVmIEhBVkVfV0lOMzIKK3NlbGVjdF9lcnJvcjoKKyAgeworICAgIEdTVF9FTEVNRU5UX0VSUk9SIChmZHNpbmssIFJFU09VUkNFLCBSRUFELCAoTlVMTCksCisgICAgICAgICgic2VsZWN0IG9uIGZpbGUgZGVzY3JpcHRvcjogJXMuIiwgZ19zdHJlcnJvciAoZXJybm8pKSk7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoZmRzaW5rLCAiRXJyb3IgZHVyaW5nIHNlbGVjdCIpOworICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgZGF0YSwgc2l6ZSk7CisgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOworICB9CitzdG9wcGVkOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoZmRzaW5rLCAiU2VsZWN0IHN0b3BwZWQiKTsKKyAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsIGRhdGEsIHNpemUpOworICAgIHJldHVybiBHU1RfRkxPV19XUk9OR19TVEFURTsKKyAgfQorI2VuZGlmCisKK3dyaXRlX2Vycm9yOgorICB7CisgICAgc3dpdGNoIChlcnJubykgeworICAgICAgY2FzZSBFTk9TUEM6CisgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChmZHNpbmssIFJFU09VUkNFLCBOT19TUEFDRV9MRUZULCAoTlVMTCksIChOVUxMKSk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDp7CisgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChmZHNpbmssIFJFU09VUkNFLCBXUklURSwgKE5VTEwpLAorICAgICAgICAgICAgKCJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgZGVzY3JpcHRvciAlZDogJXMiLAorICAgICAgICAgICAgICAgIGZkc2luay0+ZmQsIGdfc3RyZXJyb3IgKGVycm5vKSkpOworICAgICAgfQorICAgIH0KKyAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsIGRhdGEsIHNpemUpOworICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9mZF9zaW5rX2NoZWNrX2ZkIChHc3RGZFNpbmsgKiBmZHNpbmssIGludCBmZCkKK3sKKyAgc3RydWN0IHN0YXQgc3RhdF9yZXN1bHRzOworICBvZmZfdCByZXN1bHQ7CisKKyAgLyogc2VlIHRoYXQgaXQgaXMgYSB2YWxpZCBmaWxlIGRlc2NyaXB0b3IgKi8KKyAgaWYgKGZzdGF0IChmZCwgJnN0YXRfcmVzdWx0cykgPCAwKQorICAgIGdvdG8gaW52YWxpZDsKKworICBpZiAoIVNfSVNSRUcgKHN0YXRfcmVzdWx0cy5zdF9tb2RlKSkKKyAgICBnb3RvIG5vdF9zZWVrYWJsZTsKKworICAvKiBzZWUgaWYgaXQgaXMgYSBzZWVrYWJsZSBzdHJlYW0gKi8KKyAgcmVzdWx0ID0gbHNlZWsgKGZkLCAwLCBTRUVLX0NVUik7CisgIGlmIChyZXN1bHQgPT0gLTEpIHsKKyAgICBzd2l0Y2ggKGVycm5vKSB7CisgICAgICBjYXNlIEVJTlZBTDoKKyAgICAgIGNhc2UgRUJBREY6CisgICAgICAgIGdvdG8gaW52YWxpZDsKKworICAgICAgY2FzZSBFU1BJUEU6CisgICAgICAgIGdvdG8gbm90X3NlZWthYmxlOworICAgIH0KKyAgfSBlbHNlCisgICAgR1NUX0RFQlVHX09CSkVDVCAoZmRzaW5rLCAiRmlsZSBkZXNjcmlwdG9yICVkIGlzIHNlZWthYmxlIiwgZmQpOworCisgIHJldHVybiBUUlVFOworCitpbnZhbGlkOgorICB7CisgICAgR1NUX0VMRU1FTlRfRVJST1IgKGZkc2luaywgUkVTT1VSQ0UsIFdSSVRFLCAoTlVMTCksCisgICAgICAgICgiRmlsZSBkZXNjcmlwdG9yICVkIGlzIG5vdCB2YWxpZDogJXMiLCBmZCwgZ19zdHJlcnJvciAoZXJybm8pKSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Citub3Rfc2Vla2FibGU6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChmZHNpbmssICJGaWxlIGRlc2NyaXB0b3IgJWQgaXMgYSBwaXBlIiwgZmQpOworICAgIHJldHVybiBUUlVFOworICB9Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2ZkX3Npbmtfc3RhcnQgKEdzdEJhc2VTaW5rICogYmFzZXNpbmspCit7CisgIEdzdEZkU2luayAqZmRzaW5rOworICBHc3RQb2xsRkQgZmQgPSBHU1RfUE9MTF9GRF9JTklUOworCisgIGZkc2luayA9IEdTVF9GRF9TSU5LIChiYXNlc2luayk7CisgIGlmICghZ3N0X2ZkX3NpbmtfY2hlY2tfZmQgKGZkc2luaywgZmRzaW5rLT5mZCkpCisgICAgcmV0dXJuIEZBTFNFOworCisgIGlmICgoZmRzaW5rLT5mZHNldCA9IGdzdF9wb2xsX25ldyAoVFJVRSkpID09IE5VTEwpCisgICAgZ290byBzb2NrZXRfcGFpcjsKKworICBmZC5mZCA9IGZkc2luay0+ZmQ7CisgIGdzdF9wb2xsX2FkZF9mZCAoZmRzaW5rLT5mZHNldCwgJmZkKTsKKyAgZ3N0X3BvbGxfZmRfY3RsX3dyaXRlIChmZHNpbmstPmZkc2V0LCAmZmQsIFRSVUUpOworCisgIGZkc2luay0+Ynl0ZXNfd3JpdHRlbiA9IDA7CisgIGZkc2luay0+Y3VycmVudF9wb3MgPSAwOworCisgIHJldHVybiBUUlVFOworCisgIC8qIEVSUk9SUyAqLworc29ja2V0X3BhaXI6CisgIHsKKyAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZmRzaW5rLCBSRVNPVVJDRSwgT1BFTl9SRUFEX1dSSVRFLCAoTlVMTCksCisgICAgICAgIEdTVF9FUlJPUl9TWVNURU0pOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9mZF9zaW5rX3N0b3AgKEdzdEJhc2VTaW5rICogYmFzZXNpbmspCit7CisgIEdzdEZkU2luayAqZmRzaW5rID0gR1NUX0ZEX1NJTksgKGJhc2VzaW5rKTsKKworICBpZiAoZmRzaW5rLT5mZHNldCkgeworICAgIGdzdF9wb2xsX2ZyZWUgKGZkc2luay0+ZmRzZXQpOworICAgIGZkc2luay0+ZmRzZXQgPSBOVUxMOworICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2ZkX3NpbmtfdW5sb2NrIChHc3RCYXNlU2luayAqIGJhc2VzaW5rKQoreworICBHc3RGZFNpbmsgKmZkc2luayA9IEdTVF9GRF9TSU5LIChiYXNlc2luayk7CisKKyAgR1NUX0xPR19PQkpFQ1QgKGZkc2luaywgIkZsdXNoaW5nIik7CisgIEdTVF9PQkpFQ1RfTE9DSyAoZmRzaW5rKTsKKyAgZ3N0X3BvbGxfc2V0X2ZsdXNoaW5nIChmZHNpbmstPmZkc2V0LCBUUlVFKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKGZkc2luayk7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2ZkX3NpbmtfdW5sb2NrX3N0b3AgKEdzdEJhc2VTaW5rICogYmFzZXNpbmspCit7CisgIEdzdEZkU2luayAqZmRzaW5rID0gR1NUX0ZEX1NJTksgKGJhc2VzaW5rKTsKKworICBHU1RfTE9HX09CSkVDVCAoZmRzaW5rLCAiTm8gbG9uZ2VyIGZsdXNoaW5nIik7CisgIEdTVF9PQkpFQ1RfTE9DSyAoZmRzaW5rKTsKKyAgZ3N0X3BvbGxfc2V0X2ZsdXNoaW5nIChmZHNpbmstPmZkc2V0LCBGQUxTRSk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChmZHNpbmspOworCisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9mZF9zaW5rX3VwZGF0ZV9mZCAoR3N0RmRTaW5rICogZmRzaW5rLCBpbnQgbmV3X2ZkKQoreworICBpZiAobmV3X2ZkIDwgMCkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgaWYgKCFnc3RfZmRfc2lua19jaGVja19mZCAoZmRzaW5rLCBuZXdfZmQpKQorICAgIGdvdG8gaW52YWxpZDsKKworICAvKiBhc3NpZ24gdGhlIGZkICovCisgIEdTVF9PQkpFQ1RfTE9DSyAoZmRzaW5rKTsKKyAgaWYgKGZkc2luay0+ZmRzZXQpIHsKKyAgICBHc3RQb2xsRkQgZmQgPSBHU1RfUE9MTF9GRF9JTklUOworCisgICAgZmQuZmQgPSBmZHNpbmstPmZkOworICAgIGdzdF9wb2xsX3JlbW92ZV9mZCAoZmRzaW5rLT5mZHNldCwgJmZkKTsKKworICAgIGZkLmZkID0gbmV3X2ZkOworICAgIGdzdF9wb2xsX2FkZF9mZCAoZmRzaW5rLT5mZHNldCwgJmZkKTsKKyAgICBnc3RfcG9sbF9mZF9jdGxfd3JpdGUgKGZkc2luay0+ZmRzZXQsICZmZCwgVFJVRSk7CisgIH0KKyAgZmRzaW5rLT5mZCA9IG5ld19mZDsKKyAgZ19mcmVlIChmZHNpbmstPnVyaSk7CisgIGZkc2luay0+dXJpID0gZ19zdHJkdXBfcHJpbnRmICgiZmQ6Ly8lZCIsIGZkc2luay0+ZmQpOworCisgIEdTVF9PQkpFQ1RfVU5MT0NLIChmZHNpbmspOworCisgIHJldHVybiBUUlVFOworCitpbnZhbGlkOgorICB7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfZmRfc2lua19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgR3N0RmRTaW5rICpmZHNpbms7CisKKyAgZmRzaW5rID0gR1NUX0ZEX1NJTksgKG9iamVjdCk7CisKKyAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBBUkdfRkQ6eworICAgICAgaW50IGZkOworCisgICAgICBmZCA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOworICAgICAgZ3N0X2ZkX3NpbmtfdXBkYXRlX2ZkIChmZHNpbmssIGZkKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfZmRfc2lua19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLAorICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgR3N0RmRTaW5rICpmZHNpbms7CisKKyAgZmRzaW5rID0gR1NUX0ZEX1NJTksgKG9iamVjdCk7CisKKyAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBBUkdfRkQ6CisgICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBmZHNpbmstPmZkKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KK30KKworc3RhdGljIGdib29sZWFuCitnc3RfZmRfc2lua19kb19zZWVrIChHc3RGZFNpbmsgKiBmZHNpbmssIGd1aW50NjQgbmV3X29mZnNldCkKK3sKKyAgb2ZmX3QgcmVzdWx0OworCisgIHJlc3VsdCA9IGxzZWVrIChmZHNpbmstPmZkLCBuZXdfb2Zmc2V0LCBTRUVLX1NFVCk7CisKKyAgaWYgKHJlc3VsdCA9PSAtMSkKKyAgICBnb3RvIHNlZWtfZmFpbGVkOworCisgIGZkc2luay0+Y3VycmVudF9wb3MgPSBuZXdfb2Zmc2V0OworCisgIEdTVF9ERUJVR19PQkpFQ1QgKGZkc2luaywgIkZpbGUgZGVzY3JpcHRvciAlZCB0byBzZWVrIHRvIHBvc2l0aW9uICIKKyAgICAgICIlIiBHX0dVSU5UNjRfRk9STUFULCBmZHNpbmstPmZkLCBmZHNpbmstPmN1cnJlbnRfcG9zKTsKKworICByZXR1cm4gVFJVRTsKKworICAvKiBFUlJPUlMgKi8KK3NlZWtfZmFpbGVkOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoZmRzaW5rLCAiRmlsZSBkZXNjcmlwdG9yICVkIGZhaWxlZCB0byBzZWVrIHRvIHBvc2l0aW9uICIKKyAgICAgICAgIiUiIEdfR1VJTlQ2NF9GT1JNQVQsIGZkc2luay0+ZmQsIG5ld19vZmZzZXQpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9mZF9zaW5rX2V2ZW50IChHc3RCYXNlU2luayAqIHNpbmssIEdzdEV2ZW50ICogZXZlbnQpCit7CisgIEdzdEV2ZW50VHlwZSB0eXBlOworICBHc3RGZFNpbmsgKmZkc2luazsKKworICBmZHNpbmsgPSBHU1RfRkRfU0lOSyAoc2luayk7CisKKyAgdHlwZSA9IEdTVF9FVkVOVF9UWVBFIChldmVudCk7CisKKyAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVDoKKyAgICB7CisgICAgICBjb25zdCBHc3RTZWdtZW50ICpzZWdtZW50OworCisgICAgICBnc3RfZXZlbnRfcGFyc2Vfc2VnbWVudCAoZXZlbnQsICZzZWdtZW50KTsKKworICAgICAgaWYgKHNlZ21lbnQtPmZvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTKSB7CisgICAgICAgIC8qIG9ubHkgdHJ5IHRvIHNlZWsgYW5kIGZhaWwgd2hlbiB3ZSBhcmUgZ29pbmcgdG8gYSBkaWZmZXJlbnQKKyAgICAgICAgICogcG9zaXRpb24gKi8KKyAgICAgICAgaWYgKGZkc2luay0+Y3VycmVudF9wb3MgIT0gc2VnbWVudC0+c3RhcnQpIHsKKyAgICAgICAgICAvKiBGSVhNRSwgdGhlIHNlZWsgc2hvdWxkIGJlIHBlcmZvcm1lZCBvbiB0aGUgcG9zIGZpZWxkLCBzdGFydC9zdG9wIGFyZQorICAgICAgICAgICAqIGp1c3QgYm91bmRhcmllcyBmb3IgdmFsaWQgYnl0ZXMgb2Zmc2V0cy4gV2Ugc2hvdWxkIGFsc28gZmlsbCB0aGUgZmlsZQorICAgICAgICAgICAqIHdpdGggemVyb2VzIGlmIHRoZSBuZXcgcG9zaXRpb24gZXh0ZW5kcyB0aGUgY3VycmVudCBFT0YgKHNwYXJzZSBzdHJlYW1zCisgICAgICAgICAgICogYW5kIHNlZ21lbnQgYWNjdW11bGF0aW9uKS4gKi8KKyAgICAgICAgICBpZiAoIWdzdF9mZF9zaW5rX2RvX3NlZWsgKGZkc2luaywgKGd1aW50NjQpIHNlZ21lbnQtPnN0YXJ0KSkKKyAgICAgICAgICAgIGdvdG8gc2Vla19mYWlsZWQ7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZkc2luaywKKyAgICAgICAgICAgICJJZ25vcmVkIFNFR01FTlQgZXZlbnQgb2YgZm9ybWF0ICV1ICglcykiLCAoZ3VpbnQpIHNlZ21lbnQtPmZvcm1hdCwKKyAgICAgICAgICAgIGdzdF9mb3JtYXRfZ2V0X25hbWUgKHNlZ21lbnQtPmZvcm1hdCkpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiBUUlVFOworCitzZWVrX2ZhaWxlZDoKKyAgeworICAgIEdTVF9FTEVNRU5UX0VSUk9SIChmZHNpbmssIFJFU09VUkNFLCBTRUVLLCAoTlVMTCksCisgICAgICAgICgiRXJyb3Igd2hpbGUgc2Vla2luZyBvbiBmaWxlIGRlc2NyaXB0b3IgJWQ6ICVzIiwKKyAgICAgICAgICAgIGZkc2luay0+ZmQsIGdfc3RyZXJyb3IgKGVycm5vKSkpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorCit9CisKKy8qKiogR1NUVVJJSEFORExFUiBJTlRFUkZBQ0UgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIEdzdFVSSVR5cGUKK2dzdF9mZF9zaW5rX3VyaV9nZXRfdHlwZSAoR1R5cGUgdHlwZSkKK3sKKyAgcmV0dXJuIEdTVF9VUklfU0lOSzsKK30KKworc3RhdGljIGdjaGFyICoqCitnc3RfZmRfc2lua191cmlfZ2V0X3Byb3RvY29scyAoR1R5cGUgdHlwZSkKK3sKKyAgc3RhdGljIGdjaGFyICpwcm90b2NvbHNbXSA9IHsgKGNoYXIgKikgImZkIiwgTlVMTCB9OworCisgIHJldHVybiBwcm90b2NvbHM7Cit9CisKK3N0YXRpYyBjb25zdCBnY2hhciAqCitnc3RfZmRfc2lua191cmlfZ2V0X3VyaSAoR3N0VVJJSGFuZGxlciAqIGhhbmRsZXIpCit7CisgIEdzdEZkU2luayAqc2luayA9IEdTVF9GRF9TSU5LIChoYW5kbGVyKTsKKworICByZXR1cm4gc2luay0+dXJpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9mZF9zaW5rX3VyaV9zZXRfdXJpIChHc3RVUklIYW5kbGVyICogaGFuZGxlciwgY29uc3QgZ2NoYXIgKiB1cmkpCit7CisgIGdjaGFyICpwcm90b2NvbDsKKyAgR3N0RmRTaW5rICpzaW5rID0gR1NUX0ZEX1NJTksgKGhhbmRsZXIpOworICBnaW50IGZkOworCisgIHByb3RvY29sID0gZ3N0X3VyaV9nZXRfcHJvdG9jb2wgKHVyaSk7CisgIGlmIChzdHJjbXAgKHByb3RvY29sLCAiZmQiKSAhPSAwKSB7CisgICAgZ19mcmVlIChwcm90b2NvbCk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisgIGdfZnJlZSAocHJvdG9jb2wpOworCisgIGlmIChzc2NhbmYgKHVyaSwgImZkOi8vJWQiLCAmZmQpICE9IDEpCisgICAgcmV0dXJuIEZBTFNFOworCisgIHJldHVybiBnc3RfZmRfc2lua191cGRhdGVfZmQgKHNpbmssIGZkKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9mZF9zaW5rX3VyaV9oYW5kbGVyX2luaXQgKGdwb2ludGVyIGdfaWZhY2UsIGdwb2ludGVyIGlmYWNlX2RhdGEpCit7CisgIEdzdFVSSUhhbmRsZXJJbnRlcmZhY2UgKmlmYWNlID0gKEdzdFVSSUhhbmRsZXJJbnRlcmZhY2UgKikgZ19pZmFjZTsKKworICBpZmFjZS0+Z2V0X3R5cGUgPSBnc3RfZmRfc2lua191cmlfZ2V0X3R5cGU7CisgIGlmYWNlLT5nZXRfcHJvdG9jb2xzID0gZ3N0X2ZkX3NpbmtfdXJpX2dldF9wcm90b2NvbHM7CisgIGlmYWNlLT5nZXRfdXJpID0gZ3N0X2ZkX3NpbmtfdXJpX2dldF91cmk7CisgIGlmYWNlLT5zZXRfdXJpID0gZ3N0X2ZkX3NpbmtfdXJpX3NldF91cmk7Cit9CmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5oIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDkxM2I0Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuaApAQCAtMCwwICsxLDcyIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+CisgKgorICogZ3N0ZmRzaW5rLmg6CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworCisjaWZuZGVmIF9fR1NUX0ZEX1NJTktfSF9fCisjZGVmaW5lIF9fR1NUX0ZEX1NJTktfSF9fCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaD4KKworR19CRUdJTl9ERUNMUworCisKKyNkZWZpbmUgR1NUX1RZUEVfRkRfU0lOSyBcCisgIChnc3RfZmRfc2lua19nZXRfdHlwZSgpKQorI2RlZmluZSBHU1RfRkRfU0lOSyhvYmopIFwKKyAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0ZEX1NJTkssR3N0RmRTaW5rKSkKKyNkZWZpbmUgR1NUX0ZEX1NJTktfQ0xBU1Moa2xhc3MpIFwKKyAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfRkRfU0lOSyxHc3RGZFNpbmtDbGFzcykpCisjZGVmaW5lIEdTVF9JU19GRF9TSU5LKG9iaikgXAorICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfRkRfU0lOSykpCisjZGVmaW5lIEdTVF9JU19GRF9TSU5LX0NMQVNTKGtsYXNzKSBcCisgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0ZEX1NJTkspKQorCit0eXBlZGVmIHN0cnVjdCBfR3N0RmRTaW5rIEdzdEZkU2luazsKK3R5cGVkZWYgc3RydWN0IF9Hc3RGZFNpbmtDbGFzcyBHc3RGZFNpbmtDbGFzczsKKworLyoqCisgKiBHc3RGZFNpbms6CisgKgorICogVGhlIG9wYXF1ZSAjR3N0RmRTaW5rIGRhdGEgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgX0dzdEZkU2luayB7CisgIEdzdEJhc2VTaW5rIHBhcmVudDsKKworICBnY2hhciAqdXJpOworCisgIEdzdFBvbGwgKmZkc2V0OworCisgIGludCBmZDsKKyAgZ3VpbnQ2NCBieXRlc193cml0dGVuOworICBndWludDY0IGN1cnJlbnRfcG9zOworfTsKKworc3RydWN0IF9Hc3RGZFNpbmtDbGFzcyB7CisgIEdzdEJhc2VTaW5rQ2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworR1R5cGUgZ3N0X2ZkX3NpbmtfZ2V0X3R5cGUodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9GRF9TSU5LX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMTJkNTIKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmMKQEAgLTAsMCArMSw2NzkgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDA1IFBoaWxpcHBlIEtoYWxhZiA8YnVyZ2VyQHNwZWVkeS5vcmc+CisgKgorICogZ3N0ZmRzcmMuYzoKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworLyoqCisgKiBTRUNUSU9OOmVsZW1lbnQtZmRzcmMKKyAqIEBzZWVfYWxzbzogI0dzdEZkU2luaworICoKKyAqIFJlYWQgZGF0YSBmcm9tIGEgdW5peCBmaWxlIGRlc2NyaXB0b3IuCisgKiAKKyAqIFRvIGdlbmVyYXRlIGRhdGEsIGVudGVyIHNvbWUgZGF0YSBvbiB0aGUgY29uc29sZSBmb2xvd2VkIGJ5IGVudGVyLgorICogVGhlIGFib3ZlIG1lbnRpb25lZCBwaXBlbGluZSBzaG91bGQgZHVtcCBkYXRhIHBhY2tldHMgdG8gdGhlIGNvbnNvbGUuCisgKiAKKyAqIElmIHRoZSAjR3N0RmRTcmM6dGltZW91dCBwcm9wZXJ0eSBpcyBzZXQgdG8gYSB2YWx1ZSBiaWdnZXIgdGhhbiAwLCBmZHNyYyB3aWxsCisgKiBnZW5lcmF0ZSBhbiBlbGVtZW50IG1lc3NhZ2UgbmFtZWQKKyAqIDxjbGFzc25hbWU+JnF1b3Q7R3N0RmRTcmNUaW1lb3V0JnF1b3Q7PC9jbGFzc25hbWU+CisgKiBpZiBubyBkYXRhIHdhcyByZWNpZXZlZCBpbiB0aGUgZ2l2ZW4gdGltZW91dC4KKyAqIFRoZSBtZXNzYWdlJ3Mgc3RydWN0dXJlIGNvbnRhaW5zIG9uZSBmaWVsZDoKKyAqIDxpdGVtaXplZGxpc3Q+CisgKiA8bGlzdGl0ZW0+CisgKiAgIDxwYXJhPgorICogICAjZ3VpbnQ2NAorICogICA8Y2xhc3NuYW1lPiZxdW90O3RpbWVvdXQmcXVvdDs8L2NsYXNzbmFtZT46IHRoZSB0aW1lb3V0IGluIG1pY3Jvc2Vjb25kcyB0aGF0CisgKiAgIGV4cGlyZWQgd2hlbiB3YWl0aW5nIGZvciBkYXRhLgorICogICA8L3BhcmE+CisgKiA8L2xpc3RpdGVtPgorICogPC9pdGVtaXplZGxpc3Q+CisgKiAKKyAqIDxyZWZzZWN0Mj4KKyAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KKyAqIHxbCisgKiBlY2hvICJIZWxsbyBHU3RyZWFtZXIiIHwgZ3N0LWxhdW5jaCAtdiBmZHNyYyAhIGZha2VzaW5rIGR1bXA9dHJ1ZQorICogXXwgQSBzaW1wbGUgcGlwZWxpbmUgdG8gcmVhZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCBhbmQgZHVtcCB0aGUgZGF0YQorICogd2l0aCBhIGZha2VzaW5rIGFzIGhleCBhc2NpaSBibG9jay4KKyAqIDwvcmVmc2VjdDI+CisgKiAKKyAqIExhc3QgcmV2aWV3ZWQgb24gMjAwOC0wNi0yMCAoMC4xMC4yMSkKKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKyNpbmNsdWRlICJnc3QvZ3N0X3ByaXZhdGUuaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaWZkZWYgR19PU19XSU4zMgorI2luY2x1ZGUgPGlvLmg+ICAgICAgICAgICAgICAgICAvKiBsc2Vlaywgb3BlbiwgY2xvc2UsIHJlYWQgKi8KKyN1bmRlZiBsc2VlaworI2RlZmluZSBsc2VlayBfbHNlZWtpNjQKKyN1bmRlZiBvZmZfdAorI2RlZmluZSBvZmZfdCBndWludDY0CisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgX01TQ19WRVIKKyN1bmRlZiBzdGF0CisjZGVmaW5lIHN0YXQgX3N0YXQKKyNkZWZpbmUgZnN0YXQgX2ZzdGF0CisjZGVmaW5lIFNfSVNSRUcobSkJKCgobSkmU19JRlJFRyk9PVNfSUZSRUcpCisjZW5kaWYKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiZ3N0ZmRzcmMuaCIKKworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAorICAgIEdTVF9QQURfU1JDLAorICAgIEdTVF9QQURfQUxXQVlTLAorICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOworCitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfZmRfc3JjX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9mZF9zcmNfZGVidWcKKworI2RlZmluZSBERUZBVUxUX0ZEICAgICAgICAgICAgICAwCisjZGVmaW5lIERFRkFVTFRfVElNRU9VVCAgICAgICAgIDAKKworZW51bQoreworICBQUk9QXzAsCisKKyAgUFJPUF9GRCwKKyAgUFJPUF9USU1FT1VULAorCisgIFBST1BfTEFTVAorfTsKKworc3RhdGljIHZvaWQgZ3N0X2ZkX3NyY191cmlfaGFuZGxlcl9pbml0IChncG9pbnRlciBnX2lmYWNlLCBncG9pbnRlciBpZmFjZV9kYXRhKTsKKworI2RlZmluZSBfZG9faW5pdCBcCisgIEdfSU1QTEVNRU5UX0lOVEVSRkFDRSAoR1NUX1RZUEVfVVJJX0hBTkRMRVIsIGdzdF9mZF9zcmNfdXJpX2hhbmRsZXJfaW5pdCk7IFwKKyAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9mZF9zcmNfZGVidWcsICJmZHNyYyIsIDAsICJmZHNyYyBlbGVtZW50Iik7CisjZGVmaW5lIGdzdF9mZF9zcmNfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdEZkU3JjLCBnc3RfZmRfc3JjLCBHU1RfVFlQRV9QVVNIX1NSQywgX2RvX2luaXQpOworCitzdGF0aWMgdm9pZCBnc3RfZmRfc3JjX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKK3N0YXRpYyB2b2lkIGdzdF9mZF9zcmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOworc3RhdGljIHZvaWQgZ3N0X2ZkX3NyY19kaXNwb3NlIChHT2JqZWN0ICogb2JqKTsKKworc3RhdGljIGdib29sZWFuIGdzdF9mZF9zcmNfc3RhcnQgKEdzdEJhc2VTcmMgKiBic3JjKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfZmRfc3JjX3N0b3AgKEdzdEJhc2VTcmMgKiBic3JjKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfZmRfc3JjX3VubG9jayAoR3N0QmFzZVNyYyAqIGJzcmMpOworc3RhdGljIGdib29sZWFuIGdzdF9mZF9zcmNfdW5sb2NrX3N0b3AgKEdzdEJhc2VTcmMgKiBic3JjKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfZmRfc3JjX2lzX3NlZWthYmxlIChHc3RCYXNlU3JjICogYnNyYyk7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2ZkX3NyY19nZXRfc2l6ZSAoR3N0QmFzZVNyYyAqIHNyYywgZ3VpbnQ2NCAqIHNpemUpOworc3RhdGljIGdib29sZWFuIGdzdF9mZF9zcmNfZG9fc2VlayAoR3N0QmFzZVNyYyAqIHNyYywgR3N0U2VnbWVudCAqIHNlZ21lbnQpOworc3RhdGljIGdib29sZWFuIGdzdF9mZF9zcmNfcXVlcnkgKEdzdEJhc2VTcmMgKiBzcmMsIEdzdFF1ZXJ5ICogcXVlcnkpOworCitzdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfZmRfc3JjX2NyZWF0ZSAoR3N0UHVzaFNyYyAqIHBzcmMsIEdzdEJ1ZmZlciAqKiBvdXRidWYpOworCitzdGF0aWMgdm9pZAorZ3N0X2ZkX3NyY19jbGFzc19pbml0IChHc3RGZFNyY0NsYXNzICoga2xhc3MpCit7CisgIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKKyAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOworICBHc3RCYXNlU3JjQ2xhc3MgKmdzdGJhc2VzcmNfY2xhc3M7CisgIEdzdFB1c2hTcmNDbGFzcyAqZ3N0cHVzaF9zcmNfY2xhc3M7CisKKyAgZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7CisgIGdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOworICBnc3RiYXNlc3JjX2NsYXNzID0gR1NUX0JBU0VfU1JDX0NMQVNTIChrbGFzcyk7CisgIGdzdHB1c2hfc3JjX2NsYXNzID0gR1NUX1BVU0hfU1JDX0NMQVNTIChrbGFzcyk7CisKKyAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2ZkX3NyY19zZXRfcHJvcGVydHk7CisgIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9mZF9zcmNfZ2V0X3Byb3BlcnR5OworICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3N0X2ZkX3NyY19kaXNwb3NlOworCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRkQsCisgICAgICBnX3BhcmFtX3NwZWNfaW50ICgiZmQiLCAiZmQiLCAiQW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IgdG8gcmVhZCBmcm9tIiwKKyAgICAgICAgICAwLCBHX01BWElOVCwgREVGQVVMVF9GRCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIC8qKgorICAgKiBHc3RGZFNyYzp0aW1lb3V0CisgICAqCisgICAqIFBvc3QgYSBtZXNzYWdlIGFmdGVyIHRpbWVvdXQgbWljcm9zZWNvbmRzCisgICAqCisgICAqIFNpbmNlOiAwLjEwLjIxCisgICAqLworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX1RJTUVPVVQsCisgICAgICBnX3BhcmFtX3NwZWNfdWludDY0ICgidGltZW91dCIsICJUaW1lb3V0IiwKKyAgICAgICAgICAiUG9zdCBhIG1lc3NhZ2UgYWZ0ZXIgdGltZW91dCBtaWNyb3NlY29uZHMgKDAgPSBkaXNhYmxlZCkiLCAwLAorICAgICAgICAgIEdfTUFYVUlOVDY0LCBERUZBVUxUX1RJTUVPVVQsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisKKyAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2ltcGxlIChnc3RlbGVtZW50X2NsYXNzLAorICAgICAgIkZpbGVkZXNjcmlwdG9yIFNvdXJjZSIsCisgICAgICAiU291cmNlL0ZpbGUiLAorICAgICAgIlJlYWQgZnJvbSBhIGZpbGUgZGVzY3JpcHRvciIsICJFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PiIpOworICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAorICAgICAgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0ICgmc3JjdGVtcGxhdGUpKTsKKworICBnc3RiYXNlc3JjX2NsYXNzLT5zdGFydCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmRfc3JjX3N0YXJ0KTsKKyAgZ3N0YmFzZXNyY19jbGFzcy0+c3RvcCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmRfc3JjX3N0b3ApOworICBnc3RiYXNlc3JjX2NsYXNzLT51bmxvY2sgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZkX3NyY191bmxvY2spOworICBnc3RiYXNlc3JjX2NsYXNzLT51bmxvY2tfc3RvcCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmRfc3JjX3VubG9ja19zdG9wKTsKKyAgZ3N0YmFzZXNyY19jbGFzcy0+aXNfc2Vla2FibGUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZkX3NyY19pc19zZWVrYWJsZSk7CisgIGdzdGJhc2VzcmNfY2xhc3MtPmdldF9zaXplID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mZF9zcmNfZ2V0X3NpemUpOworICBnc3RiYXNlc3JjX2NsYXNzLT5kb19zZWVrID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mZF9zcmNfZG9fc2Vlayk7CisgIGdzdGJhc2VzcmNfY2xhc3MtPnF1ZXJ5ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mZF9zcmNfcXVlcnkpOworCisgIGdzdHB1c2hfc3JjX2NsYXNzLT5jcmVhdGUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZkX3NyY19jcmVhdGUpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2ZkX3NyY19pbml0IChHc3RGZFNyYyAqIGZkc3JjKQoreworICBmZHNyYy0+bmV3X2ZkID0gREVGQVVMVF9GRDsKKyAgZmRzcmMtPnNlZWthYmxlX2ZkID0gRkFMU0U7CisgIGZkc3JjLT5mZCA9IC0xOworICBmZHNyYy0+c2l6ZSA9IC0xOworICBmZHNyYy0+dGltZW91dCA9IERFRkFVTFRfVElNRU9VVDsKKyAgZmRzcmMtPnVyaSA9IGdfc3RyZHVwX3ByaW50ZiAoImZkOi8vMCIpOworICBmZHNyYy0+Y3Vyb2Zmc2V0ID0gMDsKK30KKworc3RhdGljIHZvaWQKK2dzdF9mZF9zcmNfZGlzcG9zZSAoR09iamVjdCAqIG9iaikKK3sKKyAgR3N0RmRTcmMgKnNyYyA9IEdTVF9GRF9TUkMgKG9iaik7CisKKyAgZ19mcmVlIChzcmMtPnVyaSk7CisgIHNyYy0+dXJpID0gTlVMTDsKKworICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9mZF9zcmNfdXBkYXRlX2ZkIChHc3RGZFNyYyAqIHNyYywgZ3VpbnQ2NCBzaXplKQoreworICBzdHJ1Y3Qgc3RhdCBzdGF0X3Jlc3VsdHM7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiZmRzZXQgJXAsIG9sZF9mZCAlZCwgbmV3X2ZkICVkIiwgc3JjLT5mZHNldCwgc3JjLT5mZCwKKyAgICAgIHNyYy0+bmV3X2ZkKTsKKworICAvKiB3ZSBuZWVkIHRvIGFsd2F5cyB1cGRhdGUgdGhlIGZkc2V0IHNpbmNlIGl0IG1heSBub3QgaGF2ZSBleGlzdGVkIHdoZW4KKyAgICogZ3N0X2ZkX3NyY191cGRhdGVfZmQgKCkgd2FzIGNhbGxlZCBlYXJsaWVyICovCisgIGlmIChzcmMtPmZkc2V0ICE9IE5VTEwpIHsKKyAgICBHc3RQb2xsRkQgZmQgPSBHU1RfUE9MTF9GRF9JTklUOworCisgICAgaWYgKHNyYy0+ZmQgPj0gMCkgeworICAgICAgZmQuZmQgPSBzcmMtPmZkOworICAgICAgLyogdGhpcyB3aWxsIGxvZyBhIGhhcm1sZXNzIHdhcm5pbmcsIGlmIGl0IHdhcyBuZXZlciBhZGRlZCAqLworICAgICAgZ3N0X3BvbGxfcmVtb3ZlX2ZkIChzcmMtPmZkc2V0LCAmZmQpOworICAgIH0KKworICAgIGZkLmZkID0gc3JjLT5uZXdfZmQ7CisgICAgZ3N0X3BvbGxfYWRkX2ZkIChzcmMtPmZkc2V0LCAmZmQpOworICAgIGdzdF9wb2xsX2ZkX2N0bF9yZWFkIChzcmMtPmZkc2V0LCAmZmQsIFRSVUUpOworICB9CisKKworICBpZiAoc3JjLT5mZCAhPSBzcmMtPm5ld19mZCkgeworICAgIEdTVF9JTkZPX09CSkVDVCAoc3JjLCAiVXBkYXRpbmcgdG8gZmQgJWQiLCBzcmMtPm5ld19mZCk7CisKKyAgICBzcmMtPmZkID0gc3JjLT5uZXdfZmQ7CisKKyAgICBHU1RfSU5GT19PQkpFQ1QgKHNyYywgIlNldHRpbmcgc2l6ZSB0byBmZCAlIiBHX0dVSU5UNjRfRk9STUFULCBzaXplKTsKKyAgICBzcmMtPnNpemUgPSBzaXplOworCisgICAgZ19mcmVlIChzcmMtPnVyaSk7CisgICAgc3JjLT51cmkgPSBnX3N0cmR1cF9wcmludGYgKCJmZDovLyVkIiwgc3JjLT5mZCk7CisKKyAgICBpZiAoZnN0YXQgKHNyYy0+ZmQsICZzdGF0X3Jlc3VsdHMpIDwgMCkKKyAgICAgIGdvdG8gbm90X3NlZWthYmxlOworCisgICAgaWYgKCFTX0lTUkVHIChzdGF0X3Jlc3VsdHMuc3RfbW9kZSkpCisgICAgICBnb3RvIG5vdF9zZWVrYWJsZTsKKworICAgIC8qIFRyeSBhIHNlZWsgb2YgMCBieXRlcyBvZmZzZXQgdG8gY2hlY2sgZm9yIHNlZWthYmlsaXR5ICovCisgICAgaWYgKGxzZWVrIChzcmMtPmZkLCAwLCBTRUVLX0NVUikgPCAwKQorICAgICAgZ290byBub3Rfc2Vla2FibGU7CisKKyAgICBHU1RfSU5GT19PQkpFQ1QgKHNyYywgIm1hcmtpbmcgZmQgJWQgYXMgc2Vla2FibGUiLCBzcmMtPmZkKTsKKyAgICBzcmMtPnNlZWthYmxlX2ZkID0gVFJVRTsKKworICAgIGdzdF9iYXNlX3NyY19zZXRfZHluYW1pY19zaXplIChHU1RfQkFTRV9TUkMgKHNyYyksIFRSVUUpOworICB9CisgIHJldHVybjsKKworbm90X3NlZWthYmxlOgorICB7CisgICAgR1NUX0lORk9fT0JKRUNUIChzcmMsICJtYXJraW5nIGZkICVkIGFzIE5PVCBzZWVrYWJsZSIsIHNyYy0+ZmQpOworICAgIHNyYy0+c2Vla2FibGVfZmQgPSBGQUxTRTsKKyAgICBnc3RfYmFzZV9zcmNfc2V0X2R5bmFtaWNfc2l6ZSAoR1NUX0JBU0VfU1JDIChzcmMpLCBGQUxTRSk7CisgIH0KK30KKworc3RhdGljIGdib29sZWFuCitnc3RfZmRfc3JjX3N0YXJ0IChHc3RCYXNlU3JjICogYnNyYykKK3sKKyAgR3N0RmRTcmMgKnNyYyA9IEdTVF9GRF9TUkMgKGJzcmMpOworCisgIHNyYy0+Y3Vyb2Zmc2V0ID0gMDsKKworICBpZiAoKHNyYy0+ZmRzZXQgPSBnc3RfcG9sbF9uZXcgKFRSVUUpKSA9PSBOVUxMKQorICAgIGdvdG8gc29ja2V0X3BhaXI7CisKKyAgZ3N0X2ZkX3NyY191cGRhdGVfZmQgKHNyYywgLTEpOworCisgIHJldHVybiBUUlVFOworCisgIC8qIEVSUk9SUyAqLworc29ja2V0X3BhaXI6CisgIHsKKyAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgT1BFTl9SRUFEX1dSSVRFLCAoTlVMTCksCisgICAgICAgIEdTVF9FUlJPUl9TWVNURU0pOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9mZF9zcmNfc3RvcCAoR3N0QmFzZVNyYyAqIGJzcmMpCit7CisgIEdzdEZkU3JjICpzcmMgPSBHU1RfRkRfU1JDIChic3JjKTsKKworICBpZiAoc3JjLT5mZHNldCkgeworICAgIGdzdF9wb2xsX2ZyZWUgKHNyYy0+ZmRzZXQpOworICAgIHNyYy0+ZmRzZXQgPSBOVUxMOworICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2ZkX3NyY191bmxvY2sgKEdzdEJhc2VTcmMgKiBic3JjKQoreworICBHc3RGZFNyYyAqc3JjID0gR1NUX0ZEX1NSQyAoYnNyYyk7CisKKyAgR1NUX0xPR19PQkpFQ1QgKHNyYywgIkZsdXNoaW5nIik7CisgIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKKyAgZ3N0X3BvbGxfc2V0X2ZsdXNoaW5nIChzcmMtPmZkc2V0LCBUUlVFKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyYyk7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2ZkX3NyY191bmxvY2tfc3RvcCAoR3N0QmFzZVNyYyAqIGJzcmMpCit7CisgIEdzdEZkU3JjICpzcmMgPSBHU1RfRkRfU1JDIChic3JjKTsKKworICBHU1RfTE9HX09CSkVDVCAoc3JjLCAiTm8gbG9uZ2VyIGZsdXNoaW5nIik7CisgIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKKyAgZ3N0X3BvbGxfc2V0X2ZsdXNoaW5nIChzcmMtPmZkc2V0LCBGQUxTRSk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmMpOworCisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2ZkX3NyY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLAorICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgR3N0RmRTcmMgKnNyYyA9IEdTVF9GRF9TUkMgKG9iamVjdCk7CisKKyAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX0ZEOgorICAgICAgc3JjLT5uZXdfZmQgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKKworICAgICAgLyogSWYgc3RhdGUgaXMgcmVhZHkgb3IgYmVsb3csIHVwZGF0ZSB0aGUgY3VycmVudCBmZCBpbW1lZGlhdGVseQorICAgICAgICogc28gaXQgaXMgcmVmbGVjdGVkIGluIGdldF9wcm9wZXJ0aWVzIGFuZCB1cmkgKi8KKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAob2JqZWN0KTsKKyAgICAgIGlmIChHU1RfU1RBVEUgKEdTVF9FTEVNRU5UIChzcmMpKSA8PSBHU1RfU1RBVEVfUkVBRFkpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAic3RhdGUgcmVhZHkgb3IgbG93ZXIsIHVwZGF0aW5nIHRvIHVzZSBuZXcgZmQiKTsKKyAgICAgICAgZ3N0X2ZkX3NyY191cGRhdGVfZmQgKHNyYywgLTEpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAic3RhdGUgYWJvdmUgcmVhZHksIG5vdCB1cGRhdGluZyB0byBuZXcgZmQgeWV0Iik7CisgICAgICB9CisgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAob2JqZWN0KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9USU1FT1VUOgorICAgICAgc3JjLT50aW1lb3V0ID0gZ192YWx1ZV9nZXRfdWludDY0ICh2YWx1ZSk7CisgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJwb2xsIHRpbWVvdXQgc2V0IHRvICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgICAgICBHU1RfVElNRV9BUkdTIChzcmMtPnRpbWVvdXQpKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9mZF9zcmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKKyAgICBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIEdzdEZkU3JjICpzcmMgPSBHU1RfRkRfU1JDIChvYmplY3QpOworCisgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9GRDoKKyAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHNyYy0+ZmQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RJTUVPVVQ6CisgICAgICBnX3ZhbHVlX3NldF91aW50NjQgKHZhbHVlLCBzcmMtPnRpbWVvdXQpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICBicmVhazsKKyAgfQorfQorCitzdGF0aWMgR3N0Rmxvd1JldHVybgorZ3N0X2ZkX3NyY19jcmVhdGUgKEdzdFB1c2hTcmMgKiBwc3JjLCBHc3RCdWZmZXIgKiogb3V0YnVmKQoreworICBHc3RGZFNyYyAqc3JjOworICBHc3RCdWZmZXIgKmJ1ZjsKKyAgZ3NzaXplIHJlYWRieXRlczsKKyAgZ3VpbnQgYmxvY2tzaXplOworICBHc3RDbG9ja1RpbWUgdGltZW91dDsKKyAgZ3VpbnQ4ICpkYXRhOworICBnc2l6ZSBtYXhzaXplOworCisjaWZuZGVmIEhBVkVfV0lOMzIKKyAgZ2Jvb2xlYW4gdHJ5X2FnYWluOworICBnaW50IHJldHZhbDsKKyNlbmRpZgorCisgIHNyYyA9IEdTVF9GRF9TUkMgKHBzcmMpOworCisgIGlmIChzcmMtPnRpbWVvdXQgPiAwKSB7CisgICAgdGltZW91dCA9IHNyYy0+dGltZW91dCAqIEdTVF9VU0VDT05EOworICB9IGVsc2UgeworICAgIHRpbWVvdXQgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICB9CisKKyNpZm5kZWYgSEFWRV9XSU4zMgorICBkbyB7CisgICAgdHJ5X2FnYWluID0gRkFMU0U7CisKKyAgICBHU1RfTE9HX09CSkVDVCAoc3JjLCAiZG9pbmcgcG9sbCwgdGltZW91dCAlIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICAgIEdTVF9USU1FX0FSR1MgKHNyYy0+dGltZW91dCkpOworCisgICAgcmV0dmFsID0gZ3N0X3BvbGxfd2FpdCAoc3JjLT5mZHNldCwgdGltZW91dCk7CisgICAgR1NUX0xPR19PQkpFQ1QgKHNyYywgInBvbGwgcmV0dXJuZWQgJWQiLCByZXR2YWwpOworCisgICAgaWYgKEdfVU5MSUtFTFkgKHJldHZhbCA9PSAtMSkpIHsKKyAgICAgIGlmIChlcnJubyA9PSBFSU5UUiB8fCBlcnJubyA9PSBFQUdBSU4pIHsKKyAgICAgICAgLyogcmV0cnkgaWYgaW50ZXJydXB0ZWQgKi8KKyAgICAgICAgdHJ5X2FnYWluID0gVFJVRTsKKyAgICAgIH0gZWxzZSBpZiAoZXJybm8gPT0gRUJVU1kpIHsKKyAgICAgICAgZ290byBzdG9wcGVkOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZ290byBwb2xsX2Vycm9yOworICAgICAgfQorICAgIH0gZWxzZSBpZiAoR19VTkxJS0VMWSAocmV0dmFsID09IDApKSB7CisgICAgICB0cnlfYWdhaW4gPSBUUlVFOworICAgICAgLyogdGltZW91dCwgcG9zdCBlbGVtZW50IG1lc3NhZ2UgKi8KKyAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoc3JjKSwKKyAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfZWxlbWVudCAoR1NUX09CSkVDVF9DQVNUIChzcmMpLAorICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX25ldyAoIkdzdEZkU3JjVGltZW91dCIsCisgICAgICAgICAgICAgICAgICAidGltZW91dCIsIEdfVFlQRV9VSU5UNjQsIHNyYy0+dGltZW91dCwgTlVMTCkpKTsKKyAgICB9CisgIH0gd2hpbGUgKEdfVU5MSUtFTFkgKHRyeV9hZ2FpbikpOyAgICAgLyogcmV0cnkgaWYgaW50ZXJydXB0ZWQgb3IgdGltZW91dCAqLworI2VuZGlmCisKKyAgYmxvY2tzaXplID0gR1NUX0JBU0VfU1JDIChzcmMpLT5ibG9ja3NpemU7CisKKyAgLyogY3JlYXRlIHRoZSBidWZmZXIgKi8KKyAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIGJsb2Nrc2l6ZSwgMCk7CisgIGlmIChHX1VOTElLRUxZIChidWYgPT0gTlVMTCkpCisgICAgZ290byBhbGxvY19mYWlsZWQ7CisKKyAgZGF0YSA9IGdzdF9idWZmZXJfbWFwIChidWYsIE5VTEwsICZtYXhzaXplLCBHU1RfTUFQX1dSSVRFKTsKKworICBkbyB7CisgICAgcmVhZGJ5dGVzID0gcmVhZCAoc3JjLT5mZCwgZGF0YSwgYmxvY2tzaXplKTsKKyAgICBHU1RfTE9HX09CSkVDVCAoc3JjLCAicmVhZCAlIiBHX0dTU0laRV9GT1JNQVQsIHJlYWRieXRlcyk7CisgIH0gd2hpbGUgKHJlYWRieXRlcyA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7ICAvKiByZXRyeSBpZiBpbnRlcnJ1cHRlZCAqLworCisgIGlmIChyZWFkYnl0ZXMgPCAwKQorICAgIGdvdG8gcmVhZF9lcnJvcjsKKworICBnc3RfYnVmZmVyX3VubWFwIChidWYsIGRhdGEsIHJlYWRieXRlcyk7CisKKyAgaWYgKHJlYWRieXRlcyA9PSAwKQorICAgIGdvdG8gZW9zOworCisgIEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpID0gc3JjLT5jdXJvZmZzZXQ7CisgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgc3JjLT5jdXJvZmZzZXQgKz0gcmVhZGJ5dGVzOworCisgIEdTVF9MT0dfT0JKRUNUIChwc3JjLCAiUmVhZCBidWZmZXIgb2Ygc2l6ZSAlIiBHX0dTU0laRV9GT1JNQVQsIHJlYWRieXRlcyk7CisKKyAgLyogd2UncmUgZG9uZSwgcmV0dXJuIHRoZSBidWZmZXIgKi8KKyAgKm91dGJ1ZiA9IGJ1ZjsKKworICByZXR1cm4gR1NUX0ZMT1dfT0s7CisKKyAgLyogRVJST1JTICovCisjaWZuZGVmIEhBVkVfV0lOMzIKK3BvbGxfZXJyb3I6CisgIHsKKyAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgUkVBRCwgKE5VTEwpLAorICAgICAgICAoInBvbGwgb24gZmlsZSBkZXNjcmlwdG9yOiAlcy4iLCBnX3N0cmVycm9yIChlcnJubykpKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChwc3JjLCAiRXJyb3IgZHVyaW5nIHBvbGwiKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7CisgIH0KK3N0b3BwZWQ6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChwc3JjLCAiUG9sbCBzdG9wcGVkIik7CisgICAgcmV0dXJuIEdTVF9GTE9XX1dST05HX1NUQVRFOworICB9CisjZW5kaWYKK2FsbG9jX2ZhaWxlZDoKKyAgeworICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHNyYywgIkZhaWxlZCB0byBhbGxvY2F0ZSAldSBieXRlcyIsIGJsb2Nrc2l6ZSk7CisgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOworICB9Citlb3M6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChwc3JjLCAiUmVhZCAwIGJ5dGVzLiBFT1MuIik7CisgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfVU5FWFBFQ1RFRDsKKyAgfQorcmVhZF9lcnJvcjoKKyAgeworICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBSRUFELCAoTlVMTCksCisgICAgICAgICgicmVhZCBvbiBmaWxlIGRlc2NyaXB0b3I6ICVzLiIsIGdfc3RyZXJyb3IgKGVycm5vKSkpOworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBzcmMsICJFcnJvciByZWFkaW5nIGZyb20gZmQiKTsKKyAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsIGRhdGEsIDApOworICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7CisgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOworICB9Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2ZkX3NyY19xdWVyeSAoR3N0QmFzZVNyYyAqIGJhc2VzcmMsIEdzdFF1ZXJ5ICogcXVlcnkpCit7CisgIGdib29sZWFuIHJldCA9IEZBTFNFOworICBHc3RGZFNyYyAqc3JjID0gR1NUX0ZEX1NSQyAoYmFzZXNyYyk7CisKKyAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7CisgICAgY2FzZSBHU1RfUVVFUllfVVJJOgorICAgICAgZ3N0X3F1ZXJ5X3NldF91cmkgKHF1ZXJ5LCBzcmMtPnVyaSk7CisgICAgICByZXQgPSBUUlVFOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldCA9IEZBTFNFOworICAgICAgYnJlYWs7CisgIH0KKworICBpZiAoIXJldCkKKyAgICByZXQgPSBHU1RfQkFTRV9TUkNfQ0xBU1MgKHBhcmVudF9jbGFzcyktPnF1ZXJ5IChiYXNlc3JjLCBxdWVyeSk7CisKKyAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfZmRfc3JjX2lzX3NlZWthYmxlIChHc3RCYXNlU3JjICogYnNyYykKK3sKKyAgR3N0RmRTcmMgKnNyYyA9IEdTVF9GRF9TUkMgKGJzcmMpOworCisgIHJldHVybiBzcmMtPnNlZWthYmxlX2ZkOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9mZF9zcmNfZ2V0X3NpemUgKEdzdEJhc2VTcmMgKiBic3JjLCBndWludDY0ICogc2l6ZSkKK3sKKyAgR3N0RmRTcmMgKnNyYyA9IEdTVF9GRF9TUkMgKGJzcmMpOworICBzdHJ1Y3Qgc3RhdCBzdGF0X3Jlc3VsdHM7CisKKyAgaWYgKHNyYy0+c2l6ZSAhPSAtMSkgeworICAgICpzaXplID0gc3JjLT5zaXplOworICAgIHJldHVybiBUUlVFOworICB9CisKKyAgaWYgKCFzcmMtPnNlZWthYmxlX2ZkKSB7CisgICAgLyogSWYgaXQgaXNuJ3Qgc2Vla2FibGUsIHdlIHdvbid0IGtub3cgdGhlIGxlbmd0aCAoYnV0IGZzdGF0IHdpbGwgc3RpbGwKKyAgICAgKiBzdWNjZWVkLCBhbmQgd3JvbmdseSBzYXkgb3VyIGxlbmd0aCBpcyB6ZXJvLiAqLworICAgIHJldHVybiBGQUxTRTsKKyAgfQorCisgIGlmIChmc3RhdCAoc3JjLT5mZCwgJnN0YXRfcmVzdWx0cykgPCAwKQorICAgIGdvdG8gY291bGRfbm90X3N0YXQ7CisKKyAgKnNpemUgPSBzdGF0X3Jlc3VsdHMuc3Rfc2l6ZTsKKworICByZXR1cm4gVFJVRTsKKworICAvKiBFUlJPUiAqLworY291bGRfbm90X3N0YXQ6CisgIHsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworc3RhdGljIGdib29sZWFuCitnc3RfZmRfc3JjX2RvX3NlZWsgKEdzdEJhc2VTcmMgKiBic3JjLCBHc3RTZWdtZW50ICogc2VnbWVudCkKK3sKKyAgZ2ludCByZXM7CisgIGdpbnQ2NCBvZmZzZXQ7CisgIEdzdEZkU3JjICpzcmMgPSBHU1RfRkRfU1JDIChic3JjKTsKKworICBvZmZzZXQgPSBzZWdtZW50LT5zdGFydDsKKworICAvKiBObyBuZWVkIHRvIHNlZWsgdG8gdGhlIGN1cnJlbnQgcG9zaXRpb24gKi8KKyAgaWYgKG9mZnNldCA9PSBzcmMtPmN1cm9mZnNldCkKKyAgICByZXR1cm4gVFJVRTsKKworICByZXMgPSBsc2VlayAoc3JjLT5mZCwgb2Zmc2V0LCBTRUVLX1NFVCk7CisgIGlmIChHX1VOTElLRUxZIChyZXMgPCAwIHx8IHJlcyAhPSBvZmZzZXQpKQorICAgIGdvdG8gc2Vla19mYWlsZWQ7CisKKyAgc2VnbWVudC0+cG9zaXRpb24gPSBzZWdtZW50LT5zdGFydDsKKyAgc2VnbWVudC0+dGltZSA9IHNlZ21lbnQtPnN0YXJ0OworCisgIHJldHVybiBUUlVFOworCitzZWVrX2ZhaWxlZDoKKyAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAibHNlZWsgcmV0dXJuZWQgJSIgR19HSU5UNjRfRk9STUFULCBvZmZzZXQpOworICByZXR1cm4gRkFMU0U7Cit9CisKKy8qKiogR1NUVVJJSEFORExFUiBJTlRFUkZBQ0UgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIEdzdFVSSVR5cGUKK2dzdF9mZF9zcmNfdXJpX2dldF90eXBlIChHVHlwZSB0eXBlKQoreworICByZXR1cm4gR1NUX1VSSV9TUkM7Cit9CisKK3N0YXRpYyBnY2hhciAqKgorZ3N0X2ZkX3NyY191cmlfZ2V0X3Byb3RvY29scyAoR1R5cGUgdHlwZSkKK3sKKyAgc3RhdGljIGdjaGFyICpwcm90b2NvbHNbXSA9IHsgKGNoYXIgKikgImZkIiwgTlVMTCB9OworCisgIHJldHVybiBwcm90b2NvbHM7Cit9CisKK3N0YXRpYyBjb25zdCBnY2hhciAqCitnc3RfZmRfc3JjX3VyaV9nZXRfdXJpIChHc3RVUklIYW5kbGVyICogaGFuZGxlcikKK3sKKyAgR3N0RmRTcmMgKnNyYyA9IEdTVF9GRF9TUkMgKGhhbmRsZXIpOworCisgIHJldHVybiBzcmMtPnVyaTsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfZmRfc3JjX3VyaV9zZXRfdXJpIChHc3RVUklIYW5kbGVyICogaGFuZGxlciwgY29uc3QgZ2NoYXIgKiB1cmkpCit7CisgIGdjaGFyICpwcm90b2NvbCwgKnE7CisgIEdzdEZkU3JjICpzcmMgPSBHU1RfRkRfU1JDIChoYW5kbGVyKTsKKyAgZ2ludCBmZDsKKyAgZ3VpbnQ2NCBzaXplID0gLTE7CisKKyAgR1NUX0lORk9fT0JKRUNUIChzcmMsICJjaGVja2luZyB1cmkgJXMiLCB1cmkpOworCisgIHByb3RvY29sID0gZ3N0X3VyaV9nZXRfcHJvdG9jb2wgKHVyaSk7CisgIGlmIChzdHJjbXAgKHByb3RvY29sLCAiZmQiKSAhPSAwKSB7CisgICAgZ19mcmVlIChwcm90b2NvbCk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisgIGdfZnJlZSAocHJvdG9jb2wpOworCisgIGlmIChzc2NhbmYgKHVyaSwgImZkOi8vJWQiLCAmZmQpICE9IDEgfHwgZmQgPCAwKQorICAgIHJldHVybiBGQUxTRTsKKworICBpZiAoKHEgPSBnX3N0cnN0cl9sZW4gKHVyaSwgLTEsICI/IikpKSB7CisgICAgZ2NoYXIgKnNwOworCisgICAgR1NUX0lORk9fT0JKRUNUIChzcmMsICJmb3VuZCA/Iik7CisKKyAgICBpZiAoKHNwID0gZ19zdHJzdHJfbGVuIChxLCAtMSwgInNpemU9IikpKSB7CisgICAgICBpZiAoc3NjYW5mIChzcCwgInNpemU9JSIgR19HVUlOVDY0X0ZPUk1BVCwgJnNpemUpICE9IDEpIHsKKyAgICAgICAgR1NUX0lORk9fT0JKRUNUIChzcmMsICJwYXJzaW5nIHNpemUgZmFpbGVkIik7CisgICAgICAgIHNpemUgPSAtMTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIEdTVF9JTkZPX09CSkVDVCAoc3JjLCAiZm91bmQgc2l6ZSAlIiBHX0dVSU5UNjRfRk9STUFULCBzaXplKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBzcmMtPm5ld19mZCA9IGZkOworCisgIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKKyAgaWYgKEdTVF9TVEFURSAoR1NUX0VMRU1FTlQgKHNyYykpIDw9IEdTVF9TVEFURV9SRUFEWSkgeworICAgIGdzdF9mZF9zcmNfdXBkYXRlX2ZkIChzcmMsIHNpemUpOworICB9CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmMpOworCisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2ZkX3NyY191cmlfaGFuZGxlcl9pbml0IChncG9pbnRlciBnX2lmYWNlLCBncG9pbnRlciBpZmFjZV9kYXRhKQoreworICBHc3RVUklIYW5kbGVySW50ZXJmYWNlICppZmFjZSA9IChHc3RVUklIYW5kbGVySW50ZXJmYWNlICopIGdfaWZhY2U7CisKKyAgaWZhY2UtPmdldF90eXBlID0gZ3N0X2ZkX3NyY191cmlfZ2V0X3R5cGU7CisgIGlmYWNlLT5nZXRfcHJvdG9jb2xzID0gZ3N0X2ZkX3NyY191cmlfZ2V0X3Byb3RvY29sczsKKyAgaWZhY2UtPmdldF91cmkgPSBnc3RfZmRfc3JjX3VyaV9nZXRfdXJpOworICBpZmFjZS0+c2V0X3VyaSA9IGdzdF9mZF9zcmNfdXJpX3NldF91cmk7Cit9CmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmggYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFjMWQ1MgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuaApAQCAtMCwwICsxLDg3IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwNSBQaGlsaXBwZSBLaGFsYWYgPGJ1cmdlckBzcGVlZHkub3JnPgorICoKKyAqIGdzdGZkc3JjLmg6CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworCisjaWZuZGVmIF9fR1NUX0ZEX1NSQ19IX18KKyNkZWZpbmUgX19HU1RfRkRfU1JDX0hfXworCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdzdC9iYXNlL2dzdHB1c2hzcmMuaD4KKworR19CRUdJTl9ERUNMUworCisKKyNkZWZpbmUgR1NUX1RZUEVfRkRfU1JDIFwKKyAgKGdzdF9mZF9zcmNfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgR1NUX0ZEX1NSQyhvYmopIFwKKyAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0ZEX1NSQyxHc3RGZFNyYykpCisjZGVmaW5lIEdTVF9GRF9TUkNfQ0xBU1Moa2xhc3MpIFwKKyAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfRkRfU1JDLEdzdEZkU3JjQ2xhc3MpKQorI2RlZmluZSBHU1RfSVNfRkRfU1JDKG9iaikgXAorICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfRkRfU1JDKSkKKyNkZWZpbmUgR1NUX0lTX0ZEX1NSQ19DTEFTUyhrbGFzcykgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9GRF9TUkMpKQorCisKK3R5cGVkZWYgc3RydWN0IF9Hc3RGZFNyYyBHc3RGZFNyYzsKK3R5cGVkZWYgc3RydWN0IF9Hc3RGZFNyY0NsYXNzIEdzdEZkU3JjQ2xhc3M7CisKKy8qKgorICogR3N0RmRTcmM6CisgKgorICogT3BhcXVlICNHc3RGZFNyYyBkYXRhIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IF9Hc3RGZFNyYyB7CisgIEdzdFB1c2hTcmMgZWxlbWVudDsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgLyogbmV3X2ZkIGlzIGNvcGllZCB0byBmZCBvbiBSRUFEWS0+UEFVU0VEICovCisgIGdpbnQgbmV3X2ZkOworCisgIC8qIGZkIGFuZCBmbGFnIGluZGljYXRpbmcgd2hldGhlciBmZCBpcyBzZWVrYWJsZSAqLworICBnaW50IGZkOworICBnYm9vbGVhbiBzZWVrYWJsZV9mZDsKKyAgZ3VpbnQ2NCBzaXplOworCisgIC8qIHBvbGwgdGltZW91dCAqLworICBndWludDY0IHRpbWVvdXQ7CisKKyAgZ2NoYXIgKnVyaTsKKworICBHc3RQb2xsICpmZHNldDsKKworICBndWxvbmcgY3Vyb2Zmc2V0OyAvKiBjdXJyZW50IG9mZnNldCBpbiBmaWxlICovCit9OworCitzdHJ1Y3QgX0dzdEZkU3JjQ2xhc3MgeworICBHc3RQdXNoU3JjQ2xhc3MgcGFyZW50X2NsYXNzOworCisgIC8qIHNpZ25hbHMgKi8KKyAgdm9pZCAoKnRpbWVvdXQpIChHc3RFbGVtZW50ICplbGVtZW50KTsKK307CisKK0dUeXBlIGdzdF9mZF9zcmNfZ2V0X3R5cGUodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9GRF9TUkNfSF9fICovCmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmMgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJmZWU5MgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYwpAQCAtMCwwICsxLDc2MSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgorICogICAgICAgICAgICAgICAgICAgIDIwMDYgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KKyAqCisgKiBnc3RmaWxlc2luay5jOgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisvKioKKyAqIFNFQ1RJT046ZWxlbWVudC1maWxlc2luaworICogQHNlZV9hbHNvOiAjR3N0RmlsZVNyYworICoKKyAqIFdyaXRlIGluY29taW5nIGRhdGEgdG8gYSBmaWxlIGluIHRoZSBsb2NhbCBmaWxlIHN5c3RlbS4KKyAqCisgKiA8cmVmc2VjdDI+CisgKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+CisgKiB8WworICogZ3N0LWxhdW5jaCB2NGwyc3JjIG51bS1idWZmZXJzPTEgISBqcGVnZW5jICEgZmlsZXNpbmsgbG9jYXRpb249Y2FwdHVyZTEuanBlZworICogXXwgQ2FwdHVyZSBvbmUgZnJhbWUgZnJvbSBhIHY0bDIgY2FtZXJhIGFuZCBzYXZlIGFzIGpwZWcgaW1hZ2UuCisgKiA8L3JlZnNlY3QyPgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAiLi4vLi4vZ3N0L2dzdC1pMThuLWxpYi5oIgorCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+ICAgICAgICAgICAgICAvKiBmb3IgZnNlZWtvKCkgKi8KKyNpZmRlZiBIQVZFX1NURElPX0VYVF9ICisjaW5jbHVkZSA8c3RkaW9fZXh0Lmg+ICAgICAgICAgIC8qIGZvciBfX2ZidWZzaXplLCBmb3IgZGVidWdnaW5nICovCisjZW5kaWYKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgImdzdGZpbGVzaW5rLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpZmRlZiBHX09TX1dJTjMyCisjaW5jbHVkZSA8aW8uaD4gICAgICAgICAgICAgICAgIC8qIGxzZWVrLCBvcGVuLCBjbG9zZSwgcmVhZCAqLworI3VuZGVmIGxzZWVrCisjZGVmaW5lIGxzZWVrIF9sc2Vla2k2NAorI3VuZGVmIG9mZl90CisjZGVmaW5lIG9mZl90IGd1aW50NjQKKyNpZmRlZiBfTVNDX1ZFUiAgICAgICAgICAgICAgICAgLyogQ2hlY2sgaWYgd2UgYXJlIHVzaW5nIE1TVkMsIGZpbGVubyBpcyBkZXByZWNhdGVkIGluIGZhdm91ciAqLworI2RlZmluZSBmaWxlbm8gX2ZpbGVubyAgICAgICAgICAvKiBvZiBfZmlsZW5vICovCisjZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCisgICAgR1NUX1BBRF9TSU5LLAorICAgIEdTVF9QQURfQUxXQVlTLAorICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOworCisjZGVmaW5lIEdTVF9UWVBFX0JVRkZFUl9NT0RFIChidWZmZXJfbW9kZV9nZXRfdHlwZSAoKSkKK3N0YXRpYyBHVHlwZQorYnVmZmVyX21vZGVfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBHVHlwZSBidWZmZXJfbW9kZV90eXBlID0gMDsKKyAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgYnVmZmVyX21vZGVbXSA9IHsKKyAgICB7LTEsICJEZWZhdWx0IGJ1ZmZlcmluZyIsICJkZWZhdWx0In0sCisgICAge19JT0ZCRiwgIkZ1bGx5IGJ1ZmZlcmVkIiwgImZ1bGwifSwKKyAgICB7X0lPTEJGLCAiTGluZSBidWZmZXJlZCIsICJsaW5lIn0sCisgICAge19JT05CRiwgIlVuYnVmZmVyZWQiLCAidW5idWZmZXJlZCJ9LAorICAgIHswLCBOVUxMLCBOVUxMfSwKKyAgfTsKKworICBpZiAoIWJ1ZmZlcl9tb2RlX3R5cGUpIHsKKyAgICBidWZmZXJfbW9kZV90eXBlID0KKyAgICAgICAgZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdEZpbGVTaW5rQnVmZmVyTW9kZSIsIGJ1ZmZlcl9tb2RlKTsKKyAgfQorICByZXR1cm4gYnVmZmVyX21vZGVfdHlwZTsKK30KKworR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X2ZpbGVfc2lua19kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfZmlsZV9zaW5rX2RlYnVnCisKKyNkZWZpbmUgREVGQVVMVF9MT0NBVElPTiAJTlVMTAorI2RlZmluZSBERUZBVUxUX0JVRkZFUl9NT0RFIAktMQorI2RlZmluZSBERUZBVUxUX0JVRkZFUl9TSVpFIAk2NCAqIDEwMjQKKyNkZWZpbmUgREVGQVVMVF9BUFBFTkQJCUZBTFNFCisKK2VudW0KK3sKKyAgUFJPUF8wLAorICBQUk9QX0xPQ0FUSU9OLAorICBQUk9QX0JVRkZFUl9NT0RFLAorICBQUk9QX0JVRkZFUl9TSVpFLAorICBQUk9QX0FQUEVORCwKKyAgUFJPUF9MQVNUCit9OworCisvKiBDb3B5IG9mIGdsaWIncyBnX2ZvcGVuIGR1ZSB0byB3aW4zMiBsaWJjL2Nyb3NzLURMTCBicm9rZW5uZXNzOiB3ZSBjYW4ndAorICogdXNlIHRoZSAnZmlsZSBwb2ludGVyJyBvcGVuZWQgaW4gZ2xpYiAoYW5kIHJldHVybmVkIGZyb20gdGhpcyBmdW5jdGlvbikKKyAqIGluIHRoaXMgbGlicmFyeSwgYXMgdGhleSBtYXkgaGF2ZSB1bnJlbGF0ZWQgQyBydW50aW1lcy4gKi8KK3N0YXRpYyBGSUxFICoKK2dzdF9mb3BlbiAoY29uc3QgZ2NoYXIgKiBmaWxlbmFtZSwgY29uc3QgZ2NoYXIgKiBtb2RlKQoreworI2lmZGVmIEdfT1NfV0lOMzIKKyAgd2NoYXJfdCAqd2ZpbGVuYW1lID0gZ191dGY4X3RvX3V0ZjE2IChmaWxlbmFtZSwgLTEsIE5VTEwsIE5VTEwsIE5VTEwpOworICB3Y2hhcl90ICp3bW9kZTsKKyAgRklMRSAqcmV0dmFsOworICBpbnQgc2F2ZV9lcnJubzsKKworICBpZiAod2ZpbGVuYW1lID09IE5VTEwpIHsKKyAgICBlcnJubyA9IEVJTlZBTDsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIHdtb2RlID0gZ191dGY4X3RvX3V0ZjE2IChtb2RlLCAtMSwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKyAgaWYgKHdtb2RlID09IE5VTEwpIHsKKyAgICBnX2ZyZWUgKHdmaWxlbmFtZSk7CisgICAgZXJybm8gPSBFSU5WQUw7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICByZXR2YWwgPSBfd2ZvcGVuICh3ZmlsZW5hbWUsIHdtb2RlKTsKKyAgc2F2ZV9lcnJubyA9IGVycm5vOworCisgIGdfZnJlZSAod2ZpbGVuYW1lKTsKKyAgZ19mcmVlICh3bW9kZSk7CisKKyAgZXJybm8gPSBzYXZlX2Vycm5vOworICByZXR1cm4gcmV0dmFsOworI2Vsc2UKKyAgcmV0dXJuIGZvcGVuIChmaWxlbmFtZSwgbW9kZSk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgZ3N0X2ZpbGVfc2lua19kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KTsKKworc3RhdGljIHZvaWQgZ3N0X2ZpbGVfc2lua19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7CitzdGF0aWMgdm9pZCBnc3RfZmlsZV9zaW5rX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKKworc3RhdGljIGdib29sZWFuIGdzdF9maWxlX3Npbmtfb3Blbl9maWxlIChHc3RGaWxlU2luayAqIHNpbmspOworc3RhdGljIHZvaWQgZ3N0X2ZpbGVfc2lua19jbG9zZV9maWxlIChHc3RGaWxlU2luayAqIHNpbmspOworCitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2ZpbGVfc2lua19zdGFydCAoR3N0QmFzZVNpbmsgKiBzaW5rKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfZmlsZV9zaW5rX3N0b3AgKEdzdEJhc2VTaW5rICogc2luayk7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2ZpbGVfc2lua19ldmVudCAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RFdmVudCAqIGV2ZW50KTsKK3N0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9maWxlX3NpbmtfcmVuZGVyIChHc3RCYXNlU2luayAqIHNpbmssCisgICAgR3N0QnVmZmVyICogYnVmZmVyKTsKKworc3RhdGljIGdib29sZWFuIGdzdF9maWxlX3NpbmtfZG9fc2VlayAoR3N0RmlsZVNpbmsgKiBmaWxlc2luaywKKyAgICBndWludDY0IG5ld19vZmZzZXQpOworc3RhdGljIGdib29sZWFuIGdzdF9maWxlX3NpbmtfZ2V0X2N1cnJlbnRfb2Zmc2V0IChHc3RGaWxlU2luayAqIGZpbGVzaW5rLAorICAgIGd1aW50NjQgKiBwX3Bvcyk7CisKK3N0YXRpYyBnYm9vbGVhbiBnc3RfZmlsZV9zaW5rX3F1ZXJ5IChHc3RCYXNlU2luayAqIGJzaW5rLCBHc3RRdWVyeSAqIHF1ZXJ5KTsKKworc3RhdGljIHZvaWQgZ3N0X2ZpbGVfc2lua191cmlfaGFuZGxlcl9pbml0IChncG9pbnRlciBnX2lmYWNlLAorICAgIGdwb2ludGVyIGlmYWNlX2RhdGEpOworCisjZGVmaW5lIF9kb19pbml0IFwKKyAgR19JTVBMRU1FTlRfSU5URVJGQUNFIChHU1RfVFlQRV9VUklfSEFORExFUiwgZ3N0X2ZpbGVfc2lua191cmlfaGFuZGxlcl9pbml0KTsgXAorICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X2ZpbGVfc2lua19kZWJ1ZywgImZpbGVzaW5rIiwgMCwgImZpbGVzaW5rIGVsZW1lbnQiKTsKKyNkZWZpbmUgZ3N0X2ZpbGVfc2lua19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0RmlsZVNpbmssIGdzdF9maWxlX3NpbmssIEdTVF9UWVBFX0JBU0VfU0lOSywKKyAgICBfZG9faW5pdCk7CisKK3N0YXRpYyB2b2lkCitnc3RfZmlsZV9zaW5rX2NsYXNzX2luaXQgKEdzdEZpbGVTaW5rQ2xhc3MgKiBrbGFzcykKK3sKKyAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKKyAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKKyAgR3N0QmFzZVNpbmtDbGFzcyAqZ3N0YmFzZXNpbmtfY2xhc3MgPSBHU1RfQkFTRV9TSU5LX0NMQVNTIChrbGFzcyk7CisKKyAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF9maWxlX3NpbmtfZGlzcG9zZTsKKworICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfZmlsZV9zaW5rX3NldF9wcm9wZXJ0eTsKKyAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2ZpbGVfc2lua19nZXRfcHJvcGVydHk7CisKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9MT0NBVElPTiwKKyAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJsb2NhdGlvbiIsICJGaWxlIExvY2F0aW9uIiwKKyAgICAgICAgICAiTG9jYXRpb24gb2YgdGhlIGZpbGUgdG8gd3JpdGUiLCBOVUxMLAorICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQlVGRkVSX01PREUsCisgICAgICBnX3BhcmFtX3NwZWNfZW51bSAoImJ1ZmZlci1tb2RlIiwgIkJ1ZmZlcmluZyBtb2RlIiwKKyAgICAgICAgICAiVGhlIGJ1ZmZlcmluZyBtb2RlIHRvIHVzZSIsIEdTVF9UWVBFX0JVRkZFUl9NT0RFLAorICAgICAgICAgIERFRkFVTFRfQlVGRkVSX01PREUsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQlVGRkVSX1NJWkUsCisgICAgICBnX3BhcmFtX3NwZWNfdWludCAoImJ1ZmZlci1zaXplIiwgIkJ1ZmZlcmluZyBzaXplIiwKKyAgICAgICAgICAiU2l6ZSBvZiBidWZmZXIgaW4gbnVtYmVyIG9mIGJ5dGVzIGZvciBsaW5lIG9yIGZ1bGwgYnVmZmVyLW1vZGUiLCAwLAorICAgICAgICAgIEdfTUFYVUlOVCwgREVGQVVMVF9CVUZGRVJfU0laRSwKKyAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKworICAvKioKKyAgICogR3N0RmlsZVNpbms6YXBwZW5kCisgICAqIAorICAgKiBBcHBlbmQgdG8gYW4gYWxyZWFkeSBleGlzdGluZyBmaWxlLgorICAgKgorICAgKiBTaW5jZTogMC4xMC4yNQorICAgKi8KKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9BUFBFTkQsCisgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImFwcGVuZCIsICJBcHBlbmQiLAorICAgICAgICAgICJBcHBlbmQgdG8gYW4gYWxyZWFkeSBleGlzdGluZyBmaWxlIiwgREVGQVVMVF9BUFBFTkQsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisKKyAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2ltcGxlIChnc3RlbGVtZW50X2NsYXNzLAorICAgICAgIkZpbGUgU2luayIsCisgICAgICAiU2luay9GaWxlIiwgIldyaXRlIHN0cmVhbSB0byBhIGZpbGUiLAorICAgICAgIlRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4iKTsKKyAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKKyAgICAgIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoJnNpbmt0ZW1wbGF0ZSkpOworCisgIGdzdGJhc2VzaW5rX2NsYXNzLT5zdGFydCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmlsZV9zaW5rX3N0YXJ0KTsKKyAgZ3N0YmFzZXNpbmtfY2xhc3MtPnN0b3AgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZpbGVfc2lua19zdG9wKTsKKyAgZ3N0YmFzZXNpbmtfY2xhc3MtPnF1ZXJ5ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9maWxlX3NpbmtfcXVlcnkpOworICBnc3RiYXNlc2lua19jbGFzcy0+cmVuZGVyID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9maWxlX3NpbmtfcmVuZGVyKTsKKyAgZ3N0YmFzZXNpbmtfY2xhc3MtPmV2ZW50ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9maWxlX3NpbmtfZXZlbnQpOworCisgIGlmIChzaXplb2YgKG9mZl90KSA8IDgpIHsKKyAgICBHU1RfTE9HICgiTm8gbGFyZ2UgZmlsZSBzdXBwb3J0LCBzaXplb2YgKG9mZl90KSA9ICUiIEdfR1NJWkVfRk9STUFUICIhIiwKKyAgICAgICAgc2l6ZW9mIChvZmZfdCkpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfZmlsZV9zaW5rX2luaXQgKEdzdEZpbGVTaW5rICogZmlsZXNpbmspCit7CisgIGZpbGVzaW5rLT5maWxlbmFtZSA9IE5VTEw7CisgIGZpbGVzaW5rLT5maWxlID0gTlVMTDsKKyAgZmlsZXNpbmstPmJ1ZmZlcl9tb2RlID0gREVGQVVMVF9CVUZGRVJfTU9ERTsKKyAgZmlsZXNpbmstPmJ1ZmZlcl9zaXplID0gREVGQVVMVF9CVUZGRVJfU0laRTsKKyAgZmlsZXNpbmstPmJ1ZmZlciA9IE5VTEw7CisgIGZpbGVzaW5rLT5hcHBlbmQgPSBGQUxTRTsKKworICBnc3RfYmFzZV9zaW5rX3NldF9zeW5jIChHU1RfQkFTRV9TSU5LIChmaWxlc2luayksIEZBTFNFKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9maWxlX3NpbmtfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCkKK3sKKyAgR3N0RmlsZVNpbmsgKnNpbmsgPSBHU1RfRklMRV9TSU5LIChvYmplY3QpOworCisgIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChvYmplY3QpOworCisgIGdfZnJlZSAoc2luay0+dXJpKTsKKyAgc2luay0+dXJpID0gTlVMTDsKKyAgZ19mcmVlIChzaW5rLT5maWxlbmFtZSk7CisgIHNpbmstPmZpbGVuYW1lID0gTlVMTDsKKyAgZ19mcmVlIChzaW5rLT5idWZmZXIpOworICBzaW5rLT5idWZmZXIgPSBOVUxMOworICBzaW5rLT5idWZmZXJfc2l6ZSA9IDA7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2ZpbGVfc2lua19zZXRfbG9jYXRpb24gKEdzdEZpbGVTaW5rICogc2luaywgY29uc3QgZ2NoYXIgKiBsb2NhdGlvbikKK3sKKyAgaWYgKHNpbmstPmZpbGUpCisgICAgZ290byB3YXNfb3BlbjsKKworICBnX2ZyZWUgKHNpbmstPmZpbGVuYW1lKTsKKyAgZ19mcmVlIChzaW5rLT51cmkpOworICBpZiAobG9jYXRpb24gIT0gTlVMTCkgeworICAgIC8qIHdlIHN0b3JlIHRoZSBmaWxlbmFtZSBhcyB3ZSByZWNlaXZlZCBpdCBmcm9tIHRoZSBhcHBsaWNhdGlvbi4gT24gV2luZG93cworICAgICAqIHRoaXMgc2hvdWxkIGJlIGluIFVURjggKi8KKyAgICBzaW5rLT5maWxlbmFtZSA9IGdfc3RyZHVwIChsb2NhdGlvbik7CisgICAgc2luay0+dXJpID0gZ3N0X2ZpbGVuYW1lX3RvX3VyaSAobG9jYXRpb24sIE5VTEwpOworICAgIEdTVF9JTkZPICgiZmlsZW5hbWUgOiAlcyIsIHNpbmstPmZpbGVuYW1lKTsKKyAgICBHU1RfSU5GTyAoInVyaSAgICAgIDogJXMiLCBzaW5rLT51cmkpOworICB9IGVsc2UgeworICAgIHNpbmstPmZpbGVuYW1lID0gTlVMTDsKKyAgICBzaW5rLT51cmkgPSBOVUxMOworICB9CisKKyAgcmV0dXJuIFRSVUU7CisKKyAgLyogRVJST1JTICovCit3YXNfb3BlbjoKKyAgeworICAgIGdfd2FybmluZyAoIkNoYW5naW5nIHRoZSBgbG9jYXRpb24nIHByb3BlcnR5IG9uIGZpbGVzaW5rIHdoZW4gYSBmaWxlIGlzICIKKyAgICAgICAgIm9wZW4gaXMgbm90IHN1cHBvcnRlZC4iKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9maWxlX3Npbmtfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIEdzdEZpbGVTaW5rICpzaW5rID0gR1NUX0ZJTEVfU0lOSyAob2JqZWN0KTsKKworICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfTE9DQVRJT046CisgICAgICBnc3RfZmlsZV9zaW5rX3NldF9sb2NhdGlvbiAoc2luaywgZ192YWx1ZV9nZXRfc3RyaW5nICh2YWx1ZSkpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0JVRkZFUl9NT0RFOgorICAgICAgc2luay0+YnVmZmVyX21vZGUgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQlVGRkVSX1NJWkU6CisgICAgICBzaW5rLT5idWZmZXJfc2l6ZSA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BUFBFTkQ6CisgICAgICBzaW5rLT5hcHBlbmQgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfZmlsZV9zaW5rX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsCisgICAgR1BhcmFtU3BlYyAqIHBzcGVjKQoreworICBHc3RGaWxlU2luayAqc2luayA9IEdTVF9GSUxFX1NJTksgKG9iamVjdCk7CisKKyAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX0xPQ0FUSU9OOgorICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgc2luay0+ZmlsZW5hbWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0JVRkZFUl9NT0RFOgorICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHNpbmstPmJ1ZmZlcl9tb2RlKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9CVUZGRVJfU0laRToKKyAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBzaW5rLT5idWZmZXJfc2l6ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVBQRU5EOgorICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHNpbmstPmFwcGVuZCk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2ZpbGVfc2lua19vcGVuX2ZpbGUgKEdzdEZpbGVTaW5rICogc2luaykKK3sKKyAgZ2ludCBtb2RlOworCisgIC8qIG9wZW4gdGhlIGZpbGUgKi8KKyAgaWYgKHNpbmstPmZpbGVuYW1lID09IE5VTEwgfHwgc2luay0+ZmlsZW5hbWVbMF0gPT0gJ1wwJykKKyAgICBnb3RvIG5vX2ZpbGVuYW1lOworCisgIGlmIChzaW5rLT5hcHBlbmQpCisgICAgc2luay0+ZmlsZSA9IGdzdF9mb3BlbiAoc2luay0+ZmlsZW5hbWUsICJhYiIpOworICBlbHNlCisgICAgc2luay0+ZmlsZSA9IGdzdF9mb3BlbiAoc2luay0+ZmlsZW5hbWUsICJ3YiIpOworICBpZiAoc2luay0+ZmlsZSA9PSBOVUxMKQorICAgIGdvdG8gb3Blbl9mYWlsZWQ7CisKKyAgLyogc2VlIGlmIHdlIGFyZSBhc2tlZCB0byBwZXJmb3JtIGEgc3BlY2lmaWMga2luZCBvZiBidWZmZXJpbmcgKi8KKyAgaWYgKChtb2RlID0gc2luay0+YnVmZmVyX21vZGUpICE9IC0xKSB7CisgICAgZ3VpbnQgYnVmZmVyX3NpemU7CisKKyAgICAvKiBmcmVlIHByZXZpb3VzIGJ1ZmZlciBpZiBhbnkgKi8KKyAgICBnX2ZyZWUgKHNpbmstPmJ1ZmZlcik7CisKKyAgICBpZiAobW9kZSA9PSBfSU9OQkYpIHsKKyAgICAgIC8qIG5vIGJ1ZmZlcmluZyAqLworICAgICAgc2luay0+YnVmZmVyID0gTlVMTDsKKyAgICAgIGJ1ZmZlcl9zaXplID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgLyogYWxsb2NhdGUgYnVmZmVyICovCisgICAgICBzaW5rLT5idWZmZXIgPSBnX21hbGxvYyAoc2luay0+YnVmZmVyX3NpemUpOworICAgICAgYnVmZmVyX3NpemUgPSBzaW5rLT5idWZmZXJfc2l6ZTsKKyAgICB9CisjaWZkZWYgSEFWRV9TVERJT19FWFRfSAorICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJjaGFuZ2UgYnVmZmVyIHNpemUgJXUgdG8gJXUsIG1vZGUgJWQiLAorICAgICAgICAoZ3VpbnQpIF9fZmJ1ZnNpemUgKHNpbmstPmZpbGUpLCBidWZmZXJfc2l6ZSwgbW9kZSk7CisjZWxzZQorICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJjaGFuZ2UgIGJ1ZmZlciBzaXplIHRvICV1LCBtb2RlICVkIiwKKyAgICAgICAgc2luay0+YnVmZmVyX3NpemUsIG1vZGUpOworI2VuZGlmCisgICAgaWYgKHNldHZidWYgKHNpbmstPmZpbGUsIHNpbmstPmJ1ZmZlciwgbW9kZSwgYnVmZmVyX3NpemUpICE9IDApIHsKKyAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc2luaywgIndhcm5pbmc6IHNldHZidWYgZmFpbGVkOiAlcyIsCisgICAgICAgICAgZ19zdHJlcnJvciAoZXJybm8pKTsKKyAgICB9CisgIH0KKworICBzaW5rLT5jdXJyZW50X3BvcyA9IDA7CisgIC8qIHRyeSB0byBzZWVrIGluIHRoZSBmaWxlIHRvIGZpZ3VyZSBvdXQgaWYgaXQgaXMgc2Vla2FibGUgKi8KKyAgc2luay0+c2Vla2FibGUgPSBnc3RfZmlsZV9zaW5rX2RvX3NlZWsgKHNpbmssIDApOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJvcGVuZWQgZmlsZSAlcywgc2Vla2FibGUgJWQiLAorICAgICAgc2luay0+ZmlsZW5hbWUsIHNpbmstPnNlZWthYmxlKTsKKworICByZXR1cm4gVFJVRTsKKworICAvKiBFUlJPUlMgKi8KK25vX2ZpbGVuYW1lOgorICB7CisgICAgR1NUX0VMRU1FTlRfRVJST1IgKHNpbmssIFJFU09VUkNFLCBOT1RfRk9VTkQsCisgICAgICAgIChfKCJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIpKSwgKE5VTEwpKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK29wZW5fZmFpbGVkOgorICB7CisgICAgR1NUX0VMRU1FTlRfRVJST1IgKHNpbmssIFJFU09VUkNFLCBPUEVOX1dSSVRFLAorICAgICAgICAoXygiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHdyaXRpbmcuIiksIHNpbmstPmZpbGVuYW1lKSwKKyAgICAgICAgR1NUX0VSUk9SX1NZU1RFTSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfZmlsZV9zaW5rX2Nsb3NlX2ZpbGUgKEdzdEZpbGVTaW5rICogc2luaykKK3sKKyAgaWYgKHNpbmstPmZpbGUpIHsKKyAgICBpZiAoZmNsb3NlIChzaW5rLT5maWxlKSAhPSAwKQorICAgICAgZ290byBjbG9zZV9mYWlsZWQ7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAiY2xvc2VkIGZpbGUiKTsKKyAgICBzaW5rLT5maWxlID0gTlVMTDsKKworICAgIGdfZnJlZSAoc2luay0+YnVmZmVyKTsKKyAgICBzaW5rLT5idWZmZXIgPSBOVUxMOworICB9CisgIHJldHVybjsKKworICAvKiBFUlJPUlMgKi8KK2Nsb3NlX2ZhaWxlZDoKKyAgeworICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzaW5rLCBSRVNPVVJDRSwgQ0xPU0UsCisgICAgICAgIChfKCJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIpLCBzaW5rLT5maWxlbmFtZSksIEdTVF9FUlJPUl9TWVNURU0pOworICAgIHJldHVybjsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9maWxlX3NpbmtfcXVlcnkgKEdzdEJhc2VTaW5rICogYnNpbmssIEdzdFF1ZXJ5ICogcXVlcnkpCit7CisgIGdib29sZWFuIHJlczsKKyAgR3N0RmlsZVNpbmsgKnNlbGY7CisgIEdzdEZvcm1hdCBmb3JtYXQ7CisKKyAgc2VsZiA9IEdTVF9GSUxFX1NJTksgKGJzaW5rKTsKKworICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKKyAgICBjYXNlIEdTVF9RVUVSWV9QT1NJVElPTjoKKyAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbiAocXVlcnksICZmb3JtYXQsIE5VTEwpOworCisgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICBjYXNlIEdTVF9GT1JNQVRfREVGQVVMVDoKKyAgICAgICAgY2FzZSBHU1RfRk9STUFUX0JZVEVTOgorICAgICAgICAgIGdzdF9xdWVyeV9zZXRfcG9zaXRpb24gKHF1ZXJ5LCBHU1RfRk9STUFUX0JZVEVTLCBzZWxmLT5jdXJyZW50X3Bvcyk7CisgICAgICAgICAgcmVzID0gVFJVRTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICByZXMgPSBGQUxTRTsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHU1RfUVVFUllfRk9STUFUUzoKKyAgICAgIGdzdF9xdWVyeV9zZXRfZm9ybWF0cyAocXVlcnksIDIsIEdTVF9GT1JNQVRfREVGQVVMVCwgR1NUX0ZPUk1BVF9CWVRFUyk7CisgICAgICByZXMgPSBUUlVFOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdTVF9RVUVSWV9VUkk6CisgICAgICBnc3RfcXVlcnlfc2V0X3VyaSAocXVlcnksIHNlbGYtPnVyaSk7CisgICAgICByZXMgPSBUUlVFOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgcmVzID0gR1NUX0JBU0VfU0lOS19DTEFTUyAocGFyZW50X2NsYXNzKS0+cXVlcnkgKGJzaW5rLCBxdWVyeSk7CisgICAgICBicmVhazsKKyAgfQorICByZXR1cm4gcmVzOworfQorCisjaWZkZWYgSEFWRV9GU0VFS08KKyMgZGVmaW5lIF9fR1NUX1NURElPX1NFRUtfRlVOQ1RJT04gImZzZWVrbyIKKyNlbGlmIGRlZmluZWQgKEdfT1NfVU5JWCkgfHwgZGVmaW5lZCAoR19PU19XSU4zMikKKyMgZGVmaW5lIF9fR1NUX1NURElPX1NFRUtfRlVOQ1RJT04gImxzZWVrIgorI2Vsc2UKKyMgZGVmaW5lIF9fR1NUX1NURElPX1NFRUtfRlVOQ1RJT04gImZzZWVrIgorI2VuZGlmCisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2ZpbGVfc2lua19kb19zZWVrIChHc3RGaWxlU2luayAqIGZpbGVzaW5rLCBndWludDY0IG5ld19vZmZzZXQpCit7CisgIEdTVF9ERUJVR19PQkpFQ1QgKGZpbGVzaW5rLCAiU2Vla2luZyB0byBvZmZzZXQgJSIgR19HVUlOVDY0X0ZPUk1BVAorICAgICAgIiB1c2luZyAiIF9fR1NUX1NURElPX1NFRUtfRlVOQ1RJT04sIG5ld19vZmZzZXQpOworCisgIGlmIChmZmx1c2ggKGZpbGVzaW5rLT5maWxlKSkKKyAgICBnb3RvIGZsdXNoX2ZhaWxlZDsKKworI2lmZGVmIEhBVkVfRlNFRUtPCisgIGlmIChmc2Vla28gKGZpbGVzaW5rLT5maWxlLCAob2ZmX3QpIG5ld19vZmZzZXQsIFNFRUtfU0VUKSAhPSAwKQorICAgIGdvdG8gc2Vla19mYWlsZWQ7CisjZWxpZiBkZWZpbmVkIChHX09TX1VOSVgpIHx8IGRlZmluZWQgKEdfT1NfV0lOMzIpCisgIGlmIChsc2VlayAoZmlsZW5vIChmaWxlc2luay0+ZmlsZSksIChvZmZfdCkgbmV3X29mZnNldCwKKyAgICAgICAgICBTRUVLX1NFVCkgPT0gKG9mZl90KSAtIDEpCisgICAgZ290byBzZWVrX2ZhaWxlZDsKKyNlbHNlCisgIGlmIChmc2VlayAoZmlsZXNpbmstPmZpbGUsIChsb25nKSBuZXdfb2Zmc2V0LCBTRUVLX1NFVCkgIT0gMCkKKyAgICBnb3RvIHNlZWtfZmFpbGVkOworI2VuZGlmCisKKyAgLyogYWRqdXN0IHBvc2l0aW9uIHJlcG9ydGluZyBhZnRlciBzZWVrOworICAgKiBwcmVzdW1hYmx5IHRoaXMgc2hvdWxkIGJhc2ljYWxseSB5aWVsZCBuZXdfb2Zmc2V0ICovCisgIGdzdF9maWxlX3NpbmtfZ2V0X2N1cnJlbnRfb2Zmc2V0IChmaWxlc2luaywgJmZpbGVzaW5rLT5jdXJyZW50X3Bvcyk7CisKKyAgcmV0dXJuIFRSVUU7CisKKyAgLyogRVJST1JTICovCitmbHVzaF9mYWlsZWQ6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChmaWxlc2luaywgIkZsdXNoIGZhaWxlZDogJXMiLCBnX3N0cmVycm9yIChlcnJubykpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorc2Vla19mYWlsZWQ6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChmaWxlc2luaywgIlNlZWtpbmcgZmFpbGVkOiAlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKKy8qIGhhbmRsZSBldmVudHMgKHNlYXJjaCkgKi8KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2ZpbGVfc2lua19ldmVudCAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RFdmVudCAqIGV2ZW50KQoreworICBHc3RFdmVudFR5cGUgdHlwZTsKKyAgR3N0RmlsZVNpbmsgKmZpbGVzaW5rOworCisgIGZpbGVzaW5rID0gR1NUX0ZJTEVfU0lOSyAoc2luayk7CisKKyAgdHlwZSA9IEdTVF9FVkVOVF9UWVBFIChldmVudCk7CisKKyAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVDoKKyAgICB7CisgICAgICBjb25zdCBHc3RTZWdtZW50ICpzZWdtZW50OworCisgICAgICBnc3RfZXZlbnRfcGFyc2Vfc2VnbWVudCAoZXZlbnQsICZzZWdtZW50KTsKKworICAgICAgaWYgKHNlZ21lbnQtPmZvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTKSB7CisgICAgICAgIC8qIG9ubHkgdHJ5IHRvIHNlZWsgYW5kIGZhaWwgd2hlbiB3ZSBhcmUgZ29pbmcgdG8gYSBkaWZmZXJlbnQKKyAgICAgICAgICogcG9zaXRpb24gKi8KKyAgICAgICAgaWYgKGZpbGVzaW5rLT5jdXJyZW50X3BvcyAhPSBzZWdtZW50LT5zdGFydCkgeworICAgICAgICAgIC8qIEZJWE1FLCB0aGUgc2VlayBzaG91bGQgYmUgcGVyZm9ybWVkIG9uIHRoZSBwb3MgZmllbGQsIHN0YXJ0L3N0b3AgYXJlCisgICAgICAgICAgICoganVzdCBib3VuZGFyaWVzIGZvciB2YWxpZCBieXRlcyBvZmZzZXRzLiBXZSBzaG91bGQgYWxzbyBmaWxsIHRoZSBmaWxlCisgICAgICAgICAgICogd2l0aCB6ZXJvZXMgaWYgdGhlIG5ldyBwb3NpdGlvbiBleHRlbmRzIHRoZSBjdXJyZW50IEVPRiAoc3BhcnNlIHN0cmVhbXMKKyAgICAgICAgICAgKiBhbmQgc2VnbWVudCBhY2N1bXVsYXRpb24pLiAqLworICAgICAgICAgIGlmICghZ3N0X2ZpbGVfc2lua19kb19zZWVrIChmaWxlc2luaywgKGd1aW50NjQpIHNlZ21lbnQtPnN0YXJ0KSkKKyAgICAgICAgICAgIGdvdG8gc2Vla19mYWlsZWQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZmlsZXNpbmssICJJZ25vcmVkIFNFR01FTlQsIG5vIHNlZWsgbmVlZGVkIik7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZpbGVzaW5rLAorICAgICAgICAgICAgIklnbm9yZWQgU0VHTUVOVCBldmVudCBvZiBmb3JtYXQgJXUgKCVzKSIsIChndWludCkgc2VnbWVudC0+Zm9ybWF0LAorICAgICAgICAgICAgZ3N0X2Zvcm1hdF9nZXRfbmFtZSAoc2VnbWVudC0+Zm9ybWF0KSk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfRVZFTlRfRU9TOgorICAgICAgaWYgKGZmbHVzaCAoZmlsZXNpbmstPmZpbGUpKQorICAgICAgICBnb3RvIGZsdXNoX2ZhaWxlZDsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiBUUlVFOworCisgIC8qIEVSUk9SUyAqLworc2Vla19mYWlsZWQ6CisgIHsKKyAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZmlsZXNpbmssIFJFU09VUkNFLCBTRUVLLAorICAgICAgICAoXygiRXJyb3Igd2hpbGUgc2Vla2luZyBpbiBmaWxlIFwiJXNcIi4iKSwgZmlsZXNpbmstPmZpbGVuYW1lKSwKKyAgICAgICAgR1NUX0VSUk9SX1NZU1RFTSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CitmbHVzaF9mYWlsZWQ6CisgIHsKKyAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZmlsZXNpbmssIFJFU09VUkNFLCBXUklURSwKKyAgICAgICAgKF8oIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIiksIGZpbGVzaW5rLT5maWxlbmFtZSksCisgICAgICAgIEdTVF9FUlJPUl9TWVNURU0pOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9maWxlX3NpbmtfZ2V0X2N1cnJlbnRfb2Zmc2V0IChHc3RGaWxlU2luayAqIGZpbGVzaW5rLCBndWludDY0ICogcF9wb3MpCit7CisgIG9mZl90IHJldCA9IC0xOworCisjaWZkZWYgSEFWRV9GVEVMTE8KKyAgcmV0ID0gZnRlbGxvIChmaWxlc2luay0+ZmlsZSk7CisjZWxpZiBkZWZpbmVkIChHX09TX1VOSVgpIHx8IGRlZmluZWQgKEdfT1NfV0lOMzIpCisgIGlmIChmZmx1c2ggKGZpbGVzaW5rLT5maWxlKSkgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZpbGVzaW5rLCAiRmx1c2ggZmFpbGVkOiAlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSk7CisgICAgLyogaWdub3JlIGFuZCBjb250aW51ZSAqLworICB9CisgIHJldCA9IGxzZWVrIChmaWxlbm8gKGZpbGVzaW5rLT5maWxlKSwgMCwgU0VFS19DVVIpOworI2Vsc2UKKyAgcmV0ID0gKG9mZl90KSBmdGVsbCAoZmlsZXNpbmstPmZpbGUpOworI2VuZGlmCisKKyAgaWYgKHJldCAhPSAob2ZmX3QpIC0gMSkKKyAgICAqcF9wb3MgPSAoZ3VpbnQ2NCkgcmV0OworCisgIHJldHVybiAocmV0ICE9IChvZmZfdCkgLSAxKTsKK30KKworc3RhdGljIEdzdEZsb3dSZXR1cm4KK2dzdF9maWxlX3NpbmtfcmVuZGVyIChHc3RCYXNlU2luayAqIHNpbmssIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKK3sKKyAgR3N0RmlsZVNpbmsgKmZpbGVzaW5rOworICBnc2l6ZSBzaXplOworICBndWludDggKmRhdGE7CisKKyAgZmlsZXNpbmsgPSBHU1RfRklMRV9TSU5LIChzaW5rKTsKKworICBkYXRhID0gZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJnNpemUsIE5VTEwsIEdTVF9NQVBfUkVBRCk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoZmlsZXNpbmssCisgICAgICAid3JpdGluZyAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIGF0ICUiIEdfR1VJTlQ2NF9GT1JNQVQsCisgICAgICBzaXplLCBmaWxlc2luay0+Y3VycmVudF9wb3MpOworCisgIGlmIChzaXplID4gMCAmJiBkYXRhICE9IE5VTEwpIHsKKyAgICBpZiAoZndyaXRlIChkYXRhLCBzaXplLCAxLCBmaWxlc2luay0+ZmlsZSkgIT0gMSkKKyAgICAgIGdvdG8gaGFuZGxlX2Vycm9yOworCisgICAgZmlsZXNpbmstPmN1cnJlbnRfcG9zICs9IHNpemU7CisgIH0KKyAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCBkYXRhLCBzaXplKTsKKworICByZXR1cm4gR1NUX0ZMT1dfT0s7CisKK2hhbmRsZV9lcnJvcjoKKyAgeworICAgIHN3aXRjaCAoZXJybm8pIHsKKyAgICAgIGNhc2UgRU5PU1BDOnsKKyAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKGZpbGVzaW5rLCBSRVNPVVJDRSwgTk9fU1BBQ0VfTEVGVCwgKE5VTEwpLCAoTlVMTCkpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGRlZmF1bHQ6eworICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZmlsZXNpbmssIFJFU09VUkNFLCBXUklURSwKKyAgICAgICAgICAgIChfKCJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIpLCBmaWxlc2luay0+ZmlsZW5hbWUpLAorICAgICAgICAgICAgKCIlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSkpOworICAgICAgfQorICAgIH0KKyAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsIGRhdGEsIHNpemUpOworICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9maWxlX3Npbmtfc3RhcnQgKEdzdEJhc2VTaW5rICogYmFzZXNpbmspCit7CisgIHJldHVybiBnc3RfZmlsZV9zaW5rX29wZW5fZmlsZSAoR1NUX0ZJTEVfU0lOSyAoYmFzZXNpbmspKTsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfZmlsZV9zaW5rX3N0b3AgKEdzdEJhc2VTaW5rICogYmFzZXNpbmspCit7CisgIGdzdF9maWxlX3NpbmtfY2xvc2VfZmlsZSAoR1NUX0ZJTEVfU0lOSyAoYmFzZXNpbmspKTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qKiogR1NUVVJJSEFORExFUiBJTlRFUkZBQ0UgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIEdzdFVSSVR5cGUKK2dzdF9maWxlX3NpbmtfdXJpX2dldF90eXBlIChHVHlwZSB0eXBlKQoreworICByZXR1cm4gR1NUX1VSSV9TSU5LOworfQorCitzdGF0aWMgZ2NoYXIgKioKK2dzdF9maWxlX3NpbmtfdXJpX2dldF9wcm90b2NvbHMgKEdUeXBlIHR5cGUpCit7CisgIHN0YXRpYyBnY2hhciAqcHJvdG9jb2xzW10gPSB7IChjaGFyICopICJmaWxlIiwgTlVMTCB9OworCisgIHJldHVybiBwcm90b2NvbHM7Cit9CisKK3N0YXRpYyBjb25zdCBnY2hhciAqCitnc3RfZmlsZV9zaW5rX3VyaV9nZXRfdXJpIChHc3RVUklIYW5kbGVyICogaGFuZGxlcikKK3sKKyAgR3N0RmlsZVNpbmsgKnNpbmsgPSBHU1RfRklMRV9TSU5LIChoYW5kbGVyKTsKKworICByZXR1cm4gc2luay0+dXJpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9maWxlX3NpbmtfdXJpX3NldF91cmkgKEdzdFVSSUhhbmRsZXIgKiBoYW5kbGVyLCBjb25zdCBnY2hhciAqIHVyaSkKK3sKKyAgZ2NoYXIgKnByb3RvY29sLCAqbG9jYXRpb247CisgIGdib29sZWFuIHJldDsKKyAgR3N0RmlsZVNpbmsgKnNpbmsgPSBHU1RfRklMRV9TSU5LIChoYW5kbGVyKTsKKworICBwcm90b2NvbCA9IGdzdF91cmlfZ2V0X3Byb3RvY29sICh1cmkpOworICBpZiAoc3RyY21wIChwcm90b2NvbCwgImZpbGUiKSAhPSAwKSB7CisgICAgZ19mcmVlIChwcm90b2NvbCk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisgIGdfZnJlZSAocHJvdG9jb2wpOworCisgIC8qIGFsbG93IGZpbGU6Ly9sb2NhbGhvc3QvZm9vL2JhciBieSBzdHJpcHBpbmcgbG9jYWxob3N0IGJ1dCBmYWlsCisgICAqIGZvciBldmVyeSBvdGhlciBob3N0bmFtZSAqLworICBpZiAoZ19zdHJfaGFzX3ByZWZpeCAodXJpLCAiZmlsZTovL2xvY2FsaG9zdC8iKSkgeworICAgIGNoYXIgKnRtcDsKKworICAgIC8qIDE2ID09IHN0cmxlbiAoImZpbGU6Ly9sb2NhbGhvc3QiKSAqLworICAgIHRtcCA9IGdfc3RyY29uY2F0ICgiZmlsZTovLyIsIHVyaSArIDE2LCBOVUxMKTsKKyAgICAvKiB3ZSB1c2UgZ3N0X3VyaV9nZXRfbG9jYXRpb24oKSBhbHRob3VnaCB3ZSBhbHJlYWR5IGhhdmUgdGhlCisgICAgICogImxvY2F0aW9uIiB3aXRoIHVyaSArIDE2IGJlY2F1c2UgaXQgcHJvdmlkZXMgdW5lc2NhcGluZyAqLworICAgIGxvY2F0aW9uID0gZ3N0X3VyaV9nZXRfbG9jYXRpb24gKHRtcCk7CisgICAgZ19mcmVlICh0bXApOworICB9IGVsc2UgaWYgKHN0cmNtcCAodXJpLCAiZmlsZTovLyIpID09IDApIHsKKyAgICAvKiBTcGVjaWFsIGNhc2UgZm9yICJmaWxlOi8vIiBhcyB0aGlzIGlzIHVzZWQgYnkgc29tZSBhcHBsaWNhdGlvbnMKKyAgICAgKiAgdG8gdGVzdCB3aXRoIGdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkgaWYgdGhlcmUncyBhbiBlbGVtZW50CisgICAgICogIHRoYXQgc3VwcG9ydHMgdGhlIFVSSSBwcm90b2NvbC4gKi8KKyAgICBnc3RfZmlsZV9zaW5rX3NldF9sb2NhdGlvbiAoc2luaywgTlVMTCk7CisgICAgcmV0dXJuIFRSVUU7CisgIH0gZWxzZSB7CisgICAgbG9jYXRpb24gPSBnc3RfdXJpX2dldF9sb2NhdGlvbiAodXJpKTsKKyAgfQorCisgIGlmICghbG9jYXRpb24pCisgICAgcmV0dXJuIEZBTFNFOworICBpZiAoIWdfcGF0aF9pc19hYnNvbHV0ZSAobG9jYXRpb24pKSB7CisgICAgZ19mcmVlIChsb2NhdGlvbik7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgcmV0ID0gZ3N0X2ZpbGVfc2lua19zZXRfbG9jYXRpb24gKHNpbmssIGxvY2F0aW9uKTsKKyAgZ19mcmVlIChsb2NhdGlvbik7CisKKyAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK2dzdF9maWxlX3NpbmtfdXJpX2hhbmRsZXJfaW5pdCAoZ3BvaW50ZXIgZ19pZmFjZSwgZ3BvaW50ZXIgaWZhY2VfZGF0YSkKK3sKKyAgR3N0VVJJSGFuZGxlckludGVyZmFjZSAqaWZhY2UgPSAoR3N0VVJJSGFuZGxlckludGVyZmFjZSAqKSBnX2lmYWNlOworCisgIGlmYWNlLT5nZXRfdHlwZSA9IGdzdF9maWxlX3NpbmtfdXJpX2dldF90eXBlOworICBpZmFjZS0+Z2V0X3Byb3RvY29scyA9IGdzdF9maWxlX3NpbmtfdXJpX2dldF9wcm90b2NvbHM7CisgIGlmYWNlLT5nZXRfdXJpID0gZ3N0X2ZpbGVfc2lua191cmlfZ2V0X3VyaTsKKyAgaWZhY2UtPnNldF91cmkgPSBnc3RfZmlsZV9zaW5rX3VyaV9zZXRfdXJpOworfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5oIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMGQ2Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmgKQEAgLTAsMCArMSw3OSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgorICoKKyAqIGdzdGZpbGVzaW5rLmg6CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworCisjaWZuZGVmIF9fR1NUX0ZJTEVfU0lOS19IX18KKyNkZWZpbmUgX19HU1RfRklMRV9TSU5LX0hfXworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNlc2luay5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgR1NUX1RZUEVfRklMRV9TSU5LIFwKKyAgKGdzdF9maWxlX3NpbmtfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgR1NUX0ZJTEVfU0lOSyhvYmopIFwKKyAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0ZJTEVfU0lOSyxHc3RGaWxlU2luaykpCisjZGVmaW5lIEdTVF9GSUxFX1NJTktfQ0xBU1Moa2xhc3MpIFwKKyAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfRklMRV9TSU5LLEdzdEZpbGVTaW5rQ2xhc3MpKQorI2RlZmluZSBHU1RfSVNfRklMRV9TSU5LKG9iaikgXAorICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfRklMRV9TSU5LKSkKKyNkZWZpbmUgR1NUX0lTX0ZJTEVfU0lOS19DTEFTUyhrbGFzcykgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9GSUxFX1NJTkspKQorCit0eXBlZGVmIHN0cnVjdCBfR3N0RmlsZVNpbmsgR3N0RmlsZVNpbms7Cit0eXBlZGVmIHN0cnVjdCBfR3N0RmlsZVNpbmtDbGFzcyBHc3RGaWxlU2lua0NsYXNzOworCisvKioKKyAqIEdzdEZpbGVTaW5rOgorICoKKyAqIE9wYXF1ZSAjR3N0RmlsZVNpbmsgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgX0dzdEZpbGVTaW5rIHsKKyAgR3N0QmFzZVNpbmsgcGFyZW50OworCisgIC8qPCBwcml2YXRlID4qLworICBnY2hhciAqZmlsZW5hbWU7CisgIGdjaGFyICp1cmk7CisgIEZJTEUgKmZpbGU7CisKKyAgZ2Jvb2xlYW4gc2Vla2FibGU7CisgIGd1aW50NjQgY3VycmVudF9wb3M7CisKKyAgZ2ludCAgICBidWZmZXJfbW9kZTsKKyAgZ3VpbnQgICBidWZmZXJfc2l6ZTsKKyAgZ2NoYXIgICpidWZmZXI7CisgIAorICBnYm9vbGVhbiBhcHBlbmQ7Cit9OworCitzdHJ1Y3QgX0dzdEZpbGVTaW5rQ2xhc3MgeworICBHc3RCYXNlU2lua0NsYXNzIHBhcmVudF9jbGFzczsKK307CisKK0dUeXBlIGdzdF9maWxlX3NpbmtfZ2V0X3R5cGUodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9GSUxFX1NJTktfSF9fICovCmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMzUzMGYKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYwpAQCAtMCwwICsxLDY2NSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAyMDAwLDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KKyAqCisgKiBnc3RmaWxlc3JjLmM6CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKy8qKgorICogU0VDVElPTjplbGVtZW50LWZpbGVzcmMKKyAqIEBzZWVfYWxzbzogI0dzdEZpbGVTcmMKKyAqCisgKiBSZWFkIGRhdGEgZnJvbSBhIGZpbGUgaW4gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLgorICoKKyAqIDxyZWZzZWN0Mj4KKyAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KKyAqIHxbCisgKiBnc3QtbGF1bmNoIGZpbGVzcmMgbG9jYXRpb249c29uZy5vZ2cgISBkZWNvZGViaW4yICEgYXV0b2F1ZGlvc2luaworICogXXwgUGxheSBhIHNvbmcub2dnIGZyb20gbG9jYWwgZGlyLgorICogPC9yZWZzZWN0Mj4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlICJnc3RmaWxlc3JjLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEdfT1NfV0lOMzIKKyNpbmNsdWRlIDxpby5oPiAgICAgICAgICAgICAgICAgLyogbHNlZWssIG9wZW4sIGNsb3NlLCByZWFkICovCisvKiBPbiB3aW4zMiwgc3RhdCogZGVmYXVsdCB0byAzMiBiaXQ7IHdlIG5lZWQgdGhlIDY0LWJpdAorICogdmFyaWFudHMsIHNvIGV4cGxpY2l0bHkgZGVmaW5lIGl0IHRoYXQgd2F5LiAqLworI2RlZmluZSBzdGF0IF9fc3RhdDY0CisjZGVmaW5lIGZzdGF0IF9mc3RhdDY0CisjdW5kZWYgbHNlZWsKKyNkZWZpbmUgbHNlZWsgX2xzZWVraTY0CisjdW5kZWYgb2ZmX3QKKyNkZWZpbmUgb2ZmX3QgZ3VpbnQ2NAorLyogUHJldmVudCBzdGF0LmggZnJvbSBkZWZpbmluZyB0aGUgc3RhdCogZnVuY3Rpb25zIGFzCisgKiBfc3RhdCosIHNpbmNlIHdlJ3JlIGV4cGxpY2l0bHkgb3ZlcnJpZGluZyB0aGF0ICovCisjdW5kZWYgX0lOQ19TVEFUX0lOTAorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaWZkZWYgSEFWRV9VTklTVERfSAorIyAgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICIuLi8uLi9nc3QvZ3N0LWkxOG4tbGliLmgiCisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKKyAgICBHU1RfUEFEX1NSQywKKyAgICBHU1RfUEFEX0FMV0FZUywKKyAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKKworLyogRklYTUUgd2Ugc2hvdWxkIGJlIHVzaW5nIGdsaWIgZm9yIHRoaXMgKi8KKyNpZm5kZWYgU19JU1JFRworI2RlZmluZSBTX0lTUkVHKG1vZGUpICgobW9kZSkmX1NfSUZSRUcpCisjZW5kaWYKKyNpZm5kZWYgU19JU0RJUgorI2RlZmluZSBTX0lTRElSKG1vZGUpICgobW9kZSkmX1NfSUZESVIpCisjZW5kaWYKKyNpZm5kZWYgU19JU1NPQ0sKKyNkZWZpbmUgU19JU1NPQ0soeCkgKDApCisjZW5kaWYKKyNpZm5kZWYgT19CSU5BUlkKKyNkZWZpbmUgT19CSU5BUlkgKDApCisjZW5kaWYKKworLyogQ29weSBvZiBnbGliJ3MgZ19vcGVuIGR1ZSB0byB3aW4zMiBsaWJjL2Nyb3NzLURMTCBicm9rZW5uZXNzOiB3ZSBjYW4ndAorICogdXNlIHRoZSAnZmlsZSBkZXNjcmlwdG9yJyBvcGVuZWQgaW4gZ2xpYiAoYW5kIHJldHVybmVkIGZyb20gdGhpcyBmdW5jdGlvbikKKyAqIGluIHRoaXMgbGlicmFyeSwgYXMgdGhleSBtYXkgaGF2ZSB1bnJlbGF0ZWQgQyBydW50aW1lcy4gKi8KK3N0YXRpYyBpbnQKK2dzdF9vcGVuIChjb25zdCBnY2hhciAqIGZpbGVuYW1lLCBpbnQgZmxhZ3MsIGludCBtb2RlKQoreworI2lmZGVmIEdfT1NfV0lOMzIKKyAgd2NoYXJfdCAqd2ZpbGVuYW1lID0gZ191dGY4X3RvX3V0ZjE2IChmaWxlbmFtZSwgLTEsIE5VTEwsIE5VTEwsIE5VTEwpOworICBpbnQgcmV0dmFsOworICBpbnQgc2F2ZV9lcnJubzsKKworICBpZiAod2ZpbGVuYW1lID09IE5VTEwpIHsKKyAgICBlcnJubyA9IEVJTlZBTDsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICByZXR2YWwgPSBfd29wZW4gKHdmaWxlbmFtZSwgZmxhZ3MsIG1vZGUpOworICBzYXZlX2Vycm5vID0gZXJybm87CisKKyAgZ19mcmVlICh3ZmlsZW5hbWUpOworCisgIGVycm5vID0gc2F2ZV9lcnJubzsKKyAgcmV0dXJuIHJldHZhbDsKKyNlbHNlCisgIHJldHVybiBvcGVuIChmaWxlbmFtZSwgZmxhZ3MsIG1vZGUpOworI2VuZGlmCit9CisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9maWxlX3NyY19kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfZmlsZV9zcmNfZGVidWcKKworLyogRmlsZVNyYyBzaWduYWxzIGFuZCBhcmdzICovCitlbnVtCit7CisgIC8qIEZJTEwgTUUgKi8KKyAgTEFTVF9TSUdOQUwKK307CisKKyNkZWZpbmUgREVGQVVMVF9CTE9DS1NJWkUgICAgICAgNCoxMDI0CisKK2VudW0KK3sKKyAgUFJPUF8wLAorICBQUk9QX0xPQ0FUSU9OLAorICBQUk9QX0ZECit9OworCitzdGF0aWMgdm9pZCBnc3RfZmlsZV9zcmNfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOworCitzdGF0aWMgdm9pZCBnc3RfZmlsZV9zcmNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOworc3RhdGljIHZvaWQgZ3N0X2ZpbGVfc3JjX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKKworc3RhdGljIGdib29sZWFuIGdzdF9maWxlX3NyY19zdGFydCAoR3N0QmFzZVNyYyAqIGJhc2VzcmMpOworc3RhdGljIGdib29sZWFuIGdzdF9maWxlX3NyY19zdG9wIChHc3RCYXNlU3JjICogYmFzZXNyYyk7CisKK3N0YXRpYyBnYm9vbGVhbiBnc3RfZmlsZV9zcmNfaXNfc2Vla2FibGUgKEdzdEJhc2VTcmMgKiBzcmMpOworc3RhdGljIGdib29sZWFuIGdzdF9maWxlX3NyY19nZXRfc2l6ZSAoR3N0QmFzZVNyYyAqIHNyYywgZ3VpbnQ2NCAqIHNpemUpOworc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2ZpbGVfc3JjX2ZpbGwgKEdzdEJhc2VTcmMgKiBzcmMsIGd1aW50NjQgb2Zmc2V0LAorICAgIGd1aW50IGxlbmd0aCwgR3N0QnVmZmVyICogYnVmKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfZmlsZV9zcmNfcXVlcnkgKEdzdEJhc2VTcmMgKiBzcmMsIEdzdFF1ZXJ5ICogcXVlcnkpOworCitzdGF0aWMgdm9pZCBnc3RfZmlsZV9zcmNfdXJpX2hhbmRsZXJfaW5pdCAoZ3BvaW50ZXIgZ19pZmFjZSwKKyAgICBncG9pbnRlciBpZmFjZV9kYXRhKTsKKworI2RlZmluZSBfZG9faW5pdCBcCisgIEdfSU1QTEVNRU5UX0lOVEVSRkFDRSAoR1NUX1RZUEVfVVJJX0hBTkRMRVIsIGdzdF9maWxlX3NyY191cmlfaGFuZGxlcl9pbml0KTsgXAorICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X2ZpbGVfc3JjX2RlYnVnLCAiZmlsZXNyYyIsIDAsICJmaWxlc3JjIGVsZW1lbnQiKTsKKyNkZWZpbmUgZ3N0X2ZpbGVfc3JjX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RGaWxlU3JjLCBnc3RfZmlsZV9zcmMsIEdTVF9UWVBFX0JBU0VfU1JDLCBfZG9faW5pdCk7CisKK3N0YXRpYyB2b2lkCitnc3RfZmlsZV9zcmNfY2xhc3NfaW5pdCAoR3N0RmlsZVNyY0NsYXNzICoga2xhc3MpCit7CisgIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKKyAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOworICBHc3RCYXNlU3JjQ2xhc3MgKmdzdGJhc2VzcmNfY2xhc3M7CisKKyAgZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7CisgIGdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOworICBnc3RiYXNlc3JjX2NsYXNzID0gR1NUX0JBU0VfU1JDX0NMQVNTIChrbGFzcyk7CisKKyAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2ZpbGVfc3JjX3NldF9wcm9wZXJ0eTsKKyAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2ZpbGVfc3JjX2dldF9wcm9wZXJ0eTsKKworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0ZELAorICAgICAgZ19wYXJhbV9zcGVjX2ludCAoImZkIiwgIkZpbGUtZGVzY3JpcHRvciIsCisgICAgICAgICAgIkZpbGUtZGVzY3JpcHRvciBmb3IgdGhlIGZpbGUgYmVpbmcgbW1hcCgpZCIsIDAsIEdfTUFYSU5ULCAwLAorICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTE9DQVRJT04sCisgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgibG9jYXRpb24iLCAiRmlsZSBMb2NhdGlvbiIsCisgICAgICAgICAgIkxvY2F0aW9uIG9mIHRoZSBmaWxlIHRvIHJlYWQiLCBOVUxMLAorICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8CisgICAgICAgICAgR1NUX1BBUkFNX01VVEFCTEVfUkVBRFkpKTsKKworICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9maWxlX3NyY19maW5hbGl6ZTsKKworICBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlsc19zaW1wbGUgKGdzdGVsZW1lbnRfY2xhc3MsCisgICAgICAiRmlsZSBTb3VyY2UiLAorICAgICAgIlNvdXJjZS9GaWxlIiwKKyAgICAgICJSZWFkIGZyb20gYXJiaXRyYXJ5IHBvaW50IGluIGEgZmlsZSIsCisgICAgICAiRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4iKTsKKyAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKKyAgICAgIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoJnNyY3RlbXBsYXRlKSk7CisKKyAgZ3N0YmFzZXNyY19jbGFzcy0+c3RhcnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZpbGVfc3JjX3N0YXJ0KTsKKyAgZ3N0YmFzZXNyY19jbGFzcy0+c3RvcCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmlsZV9zcmNfc3RvcCk7CisgIGdzdGJhc2VzcmNfY2xhc3MtPmlzX3NlZWthYmxlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9maWxlX3NyY19pc19zZWVrYWJsZSk7CisgIGdzdGJhc2VzcmNfY2xhc3MtPmdldF9zaXplID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9maWxlX3NyY19nZXRfc2l6ZSk7CisgIGdzdGJhc2VzcmNfY2xhc3MtPmZpbGwgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZpbGVfc3JjX2ZpbGwpOworICBnc3RiYXNlc3JjX2NsYXNzLT5xdWVyeSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmlsZV9zcmNfcXVlcnkpOworCisgIGlmIChzaXplb2YgKG9mZl90KSA8IDgpIHsKKyAgICBHU1RfTE9HICgiTm8gbGFyZ2UgZmlsZSBzdXBwb3J0LCBzaXplb2YgKG9mZl90KSA9ICUiIEdfR1NJWkVfRk9STUFUICIhIiwKKyAgICAgICAgc2l6ZW9mIChvZmZfdCkpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfZmlsZV9zcmNfaW5pdCAoR3N0RmlsZVNyYyAqIHNyYykKK3sKKyAgc3JjLT5maWxlbmFtZSA9IE5VTEw7CisgIHNyYy0+ZmQgPSAwOworICBzcmMtPnVyaSA9IE5VTEw7CisKKyAgc3JjLT5pc19yZWd1bGFyID0gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfZmlsZV9zcmNfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCit7CisgIEdzdEZpbGVTcmMgKnNyYzsKKworICBzcmMgPSBHU1RfRklMRV9TUkMgKG9iamVjdCk7CisKKyAgZ19mcmVlIChzcmMtPmZpbGVuYW1lKTsKKyAgZ19mcmVlIChzcmMtPnVyaSk7CisKKyAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9maWxlX3NyY19zZXRfbG9jYXRpb24gKEdzdEZpbGVTcmMgKiBzcmMsIGNvbnN0IGdjaGFyICogbG9jYXRpb24pCit7CisgIEdzdFN0YXRlIHN0YXRlOworCisgIC8qIHRoZSBlbGVtZW50IG11c3QgYmUgc3RvcHBlZCBpbiBvcmRlciB0byBkbyB0aGlzICovCisgIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKKyAgc3RhdGUgPSBHU1RfU1RBVEUgKHNyYyk7CisgIGlmIChzdGF0ZSAhPSBHU1RfU1RBVEVfUkVBRFkgJiYgc3RhdGUgIT0gR1NUX1NUQVRFX05VTEwpCisgICAgZ290byB3cm9uZ19zdGF0ZTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyYyk7CisKKyAgZ19mcmVlIChzcmMtPmZpbGVuYW1lKTsKKyAgZ19mcmVlIChzcmMtPnVyaSk7CisKKyAgLyogY2xlYXIgdGhlIGZpbGVuYW1lIGlmIHdlIGdldCBhIE5VTEwgKGlzIHRoYXQgcG9zc2libGU/KSAqLworICBpZiAobG9jYXRpb24gPT0gTlVMTCkgeworICAgIHNyYy0+ZmlsZW5hbWUgPSBOVUxMOworICAgIHNyYy0+dXJpID0gTlVMTDsKKyAgfSBlbHNlIHsKKyAgICAvKiB3ZSBzdG9yZSB0aGUgZmlsZW5hbWUgYXMgcmVjZWl2ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLiBPbiBXaW5kb3dzIHRoaXMKKyAgICAgKiBzaG91bGQgYmUgVVRGOCAqLworICAgIHNyYy0+ZmlsZW5hbWUgPSBnX3N0cmR1cCAobG9jYXRpb24pOworICAgIHNyYy0+dXJpID0gZ3N0X2ZpbGVuYW1lX3RvX3VyaSAobG9jYXRpb24sIE5VTEwpOworICAgIEdTVF9JTkZPICgiZmlsZW5hbWUgOiAlcyIsIHNyYy0+ZmlsZW5hbWUpOworICAgIEdTVF9JTkZPICgidXJpICAgICAgOiAlcyIsIHNyYy0+dXJpKTsKKyAgfQorICBnX29iamVjdF9ub3RpZnkgKEdfT0JKRUNUIChzcmMpLCAibG9jYXRpb24iKTsKKyAgZ3N0X3VyaV9oYW5kbGVyX25ld191cmkgKEdTVF9VUklfSEFORExFUiAoc3JjKSwgc3JjLT51cmkpOworCisgIHJldHVybiBUUlVFOworCisgIC8qIEVSUk9SICovCit3cm9uZ19zdGF0ZToKKyAgeworICAgIGdfd2FybmluZyAoIkNoYW5naW5nIHRoZSBgbG9jYXRpb24nIHByb3BlcnR5IG9uIGZpbGVzcmMgd2hlbiBhIGZpbGUgaXMgIgorICAgICAgICAib3BlbiBpcyBub3Qgc3VwcG9ydGVkLiIpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmMpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZ3N0X2ZpbGVfc3JjX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQoreworICBHc3RGaWxlU3JjICpzcmM7CisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0ZJTEVfU1JDIChvYmplY3QpKTsKKworICBzcmMgPSBHU1RfRklMRV9TUkMgKG9iamVjdCk7CisKKyAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX0xPQ0FUSU9OOgorICAgICAgZ3N0X2ZpbGVfc3JjX3NldF9sb2NhdGlvbiAoc3JjLCBnX3ZhbHVlX2dldF9zdHJpbmcgKHZhbHVlKSk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfZmlsZV9zcmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKKyAgICBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIEdzdEZpbGVTcmMgKnNyYzsKKworICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRklMRV9TUkMgKG9iamVjdCkpOworCisgIHNyYyA9IEdTVF9GSUxFX1NSQyAob2JqZWN0KTsKKworICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfTE9DQVRJT046CisgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBzcmMtPmZpbGVuYW1lKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GRDoKKyAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHNyYy0+ZmQpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICBicmVhazsKKyAgfQorfQorCisvKioqCisgKiByZWFkIGNvZGUgYmVsb3cKKyAqIHRoYXQgaXMgdG8gc2F5LCB5b3Ugc2hvdWxkbid0IHJlYWQgdGhlIGNvZGUgYmVsb3csIGJ1dCB0aGUgY29kZSB0aGF0IHJlYWRzCisgKiBzdHVmZiBpcyBiZWxvdy4gIFdlbGwsIHlvdSBzaG91bGRuJ3Qgbm90IHJlYWQgdGhlIGNvZGUgYmVsb3csIGZlZWwgZnJlZQorICogdG8gcmVhZCBpdCBvZiBjb3Vyc2UuICBJdCdzIGp1c3QgdGhhdCAicmVhZCBjb2RlIGJlbG93IiBpcyBhIHByZXR0eSBjcmFwcHkKKyAqIGRvY3VtZW50YXRpb24gc3RyaW5nIGJlY2F1c2UgaXQgc291bmRzIGxpa2Ugd2UncmUgZXhwZWN0aW5nIHlvdSB0byByZWFkCisgKiB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHdoYXQgaXQgZG9lcywgd2hpY2gsIHdoaWxlIHRydWUsIGlzIHJlYWxseSBub3QKKyAqIHRoZSBzb3J0IG9mIGF0dGl0dWRlIHdlIHdhbnQgdG8gYmUgYWR2ZXJ0aXNpbmcuICBObyBzaXIuCisgKgorICovCitzdGF0aWMgR3N0Rmxvd1JldHVybgorZ3N0X2ZpbGVfc3JjX2ZpbGwgKEdzdEJhc2VTcmMgKiBiYXNlc3JjLCBndWludDY0IG9mZnNldCwgZ3VpbnQgbGVuZ3RoLAorICAgIEdzdEJ1ZmZlciAqIGJ1ZikKK3sKKyAgR3N0RmlsZVNyYyAqc3JjOworICBpbnQgcmV0OworICBndWludDggKmRhdGE7CisKKyAgc3JjID0gR1NUX0ZJTEVfU1JDX0NBU1QgKGJhc2VzcmMpOworCisgIGlmIChHX1VOTElLRUxZIChzcmMtPnJlYWRfcG9zaXRpb24gIT0gb2Zmc2V0KSkgeworICAgIG9mZl90IHJlczsKKworICAgIHJlcyA9IGxzZWVrIChzcmMtPmZkLCBvZmZzZXQsIFNFRUtfU0VUKTsKKyAgICBpZiAoR19VTkxJS0VMWSAocmVzIDwgMCB8fCByZXMgIT0gb2Zmc2V0KSkKKyAgICAgIGdvdG8gc2Vla19mYWlsZWQ7CisKKyAgICBzcmMtPnJlYWRfcG9zaXRpb24gPSBvZmZzZXQ7CisgIH0KKworICBkYXRhID0gZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgTlVMTCwgTlVMTCwgR1NUX01BUF9XUklURSk7CisKKyAgR1NUX0xPR19PQkpFQ1QgKHNyYywgIlJlYWRpbmcgJWQgYnl0ZXMgYXQgb2Zmc2V0IDB4JSIgR19HSU5UNjRfTU9ESUZJRVIgIngiLAorICAgICAgbGVuZ3RoLCBvZmZzZXQpOworCisgIHJldCA9IHJlYWQgKHNyYy0+ZmQsIGRhdGEsIGxlbmd0aCk7CisgIGlmIChHX1VOTElLRUxZIChyZXQgPCAwKSkKKyAgICBnb3RvIGNvdWxkX25vdF9yZWFkOworCisgIC8qIHNlZWthYmxlIHJlZ3VsYXIgZmlsZXMgc2hvdWxkIGhhdmUgZ2l2ZW4gdXMgd2hhdCB3ZSBleHBlY3RlZCAqLworICBpZiAoR19VTkxJS0VMWSAoKGd1aW50KSByZXQgPCBsZW5ndGggJiYgc3JjLT5zZWVrYWJsZSkpCisgICAgZ290byB1bmV4cGVjdGVkX2VvczsKKworICAvKiBvdGhlciBmaWxlcyBzaG91bGQgZW9zIGlmIHRoZXkgcmVhZCAwIGFuZCBtb3JlIHdhcyByZXF1ZXN0ZWQgKi8KKyAgaWYgKEdfVU5MSUtFTFkgKHJldCA9PSAwKSkKKyAgICBnb3RvIGVvczsKKworICBsZW5ndGggPSByZXQ7CisKKyAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCBkYXRhLCBsZW5ndGgpOworCisgIEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpID0gb2Zmc2V0OworICBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKGJ1ZikgPSBvZmZzZXQgKyBsZW5ndGg7CisKKyAgc3JjLT5yZWFkX3Bvc2l0aW9uICs9IGxlbmd0aDsKKworICByZXR1cm4gR1NUX0ZMT1dfT0s7CisKKyAgLyogRVJST1IgKi8KK3NlZWtfZmFpbGVkOgorICB7CisgICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIFJFQUQsIChOVUxMKSwgR1NUX0VSUk9SX1NZU1RFTSk7CisgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOworICB9Citjb3VsZF9ub3RfcmVhZDoKKyAgeworICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBSRUFELCAoTlVMTCksIEdTVF9FUlJPUl9TWVNURU0pOworICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgZGF0YSwgMCk7CisgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOworICB9Cit1bmV4cGVjdGVkX2VvczoKKyAgeworICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBSRUFELCAoTlVMTCksCisgICAgICAgICgidW5leHBlY3RlZCBlbmQgb2YgZmlsZS4iKSk7CisgICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCBkYXRhLCAwKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7CisgIH0KK2VvczoKKyAgeworICAgIEdTVF9ERUJVRyAoIm5vbi1yZWd1bGFyIGZpbGUgaGl0cyBFT1MiKTsKKyAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsIGRhdGEsIDApOworICAgIHJldHVybiBHU1RfRkxPV19VTkVYUEVDVEVEOworICB9Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2ZpbGVfc3JjX3F1ZXJ5IChHc3RCYXNlU3JjICogYmFzZXNyYywgR3N0UXVlcnkgKiBxdWVyeSkKK3sKKyAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7CisgIEdzdEZpbGVTcmMgKnNyYyA9IEdTVF9GSUxFX1NSQyAoYmFzZXNyYyk7CisKKyAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7CisgICAgY2FzZSBHU1RfUVVFUllfVVJJOgorICAgICAgZ3N0X3F1ZXJ5X3NldF91cmkgKHF1ZXJ5LCBzcmMtPnVyaSk7CisgICAgICByZXQgPSBUUlVFOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldCA9IEZBTFNFOworICAgICAgYnJlYWs7CisgIH0KKworICBpZiAoIXJldCkKKyAgICByZXQgPSBHU1RfQkFTRV9TUkNfQ0xBU1MgKHBhcmVudF9jbGFzcyktPnF1ZXJ5IChiYXNlc3JjLCBxdWVyeSk7CisKKyAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfZmlsZV9zcmNfaXNfc2Vla2FibGUgKEdzdEJhc2VTcmMgKiBiYXNlc3JjKQoreworICBHc3RGaWxlU3JjICpzcmMgPSBHU1RfRklMRV9TUkMgKGJhc2VzcmMpOworCisgIHJldHVybiBzcmMtPnNlZWthYmxlOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9maWxlX3NyY19nZXRfc2l6ZSAoR3N0QmFzZVNyYyAqIGJhc2VzcmMsIGd1aW50NjQgKiBzaXplKQoreworICBzdHJ1Y3Qgc3RhdCBzdGF0X3Jlc3VsdHM7CisgIEdzdEZpbGVTcmMgKnNyYzsKKworICBzcmMgPSBHU1RfRklMRV9TUkMgKGJhc2VzcmMpOworCisgIGlmICghc3JjLT5zZWVrYWJsZSkgeworICAgIC8qIElmIGl0IGlzbid0IHNlZWthYmxlLCB3ZSB3b24ndCBrbm93IHRoZSBsZW5ndGggKGJ1dCBmc3RhdCB3aWxsIHN0aWxsCisgICAgICogc3VjY2VlZCwgYW5kIHdyb25nbHkgc2F5IG91ciBsZW5ndGggaXMgemVyby4gKi8KKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKworICBpZiAoZnN0YXQgKHNyYy0+ZmQsICZzdGF0X3Jlc3VsdHMpIDwgMCkKKyAgICBnb3RvIGNvdWxkX25vdF9zdGF0OworCisgICpzaXplID0gc3RhdF9yZXN1bHRzLnN0X3NpemU7CisKKyAgcmV0dXJuIFRSVUU7CisKKyAgLyogRVJST1IgKi8KK2NvdWxkX25vdF9zdGF0OgorICB7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKKy8qIG9wZW4gdGhlIGZpbGUgYW5kIG1tYXAgaXQsIG5lY2Vzc2FyeSB0byBnbyB0byBSRUFEWSBzdGF0ZSAqLworc3RhdGljIGdib29sZWFuCitnc3RfZmlsZV9zcmNfc3RhcnQgKEdzdEJhc2VTcmMgKiBiYXNlc3JjKQoreworICBHc3RGaWxlU3JjICpzcmMgPSBHU1RfRklMRV9TUkMgKGJhc2VzcmMpOworICBzdHJ1Y3Qgc3RhdCBzdGF0X3Jlc3VsdHM7CisKKyAgaWYgKHNyYy0+ZmlsZW5hbWUgPT0gTlVMTCB8fCBzcmMtPmZpbGVuYW1lWzBdID09ICdcMCcpCisgICAgZ290byBub19maWxlbmFtZTsKKworICBHU1RfSU5GT19PQkpFQ1QgKHNyYywgIm9wZW5pbmcgZmlsZSAlcyIsIHNyYy0+ZmlsZW5hbWUpOworCisgIC8qIG9wZW4gdGhlIGZpbGUgKi8KKyAgc3JjLT5mZCA9IGdzdF9vcGVuIChzcmMtPmZpbGVuYW1lLCBPX1JET05MWSB8IE9fQklOQVJZLCAwKTsKKworICBpZiAoc3JjLT5mZCA8IDApCisgICAgZ290byBvcGVuX2ZhaWxlZDsKKworICAvKiBjaGVjayBpZiBpdCBpcyBhIHJlZ3VsYXIgZmlsZSwgb3RoZXJ3aXNlIGJhaWwgb3V0ICovCisgIGlmIChmc3RhdCAoc3JjLT5mZCwgJnN0YXRfcmVzdWx0cykgPCAwKQorICAgIGdvdG8gbm9fc3RhdDsKKworICBpZiAoU19JU0RJUiAoc3RhdF9yZXN1bHRzLnN0X21vZGUpKQorICAgIGdvdG8gd2FzX2RpcmVjdG9yeTsKKworICBpZiAoU19JU1NPQ0sgKHN0YXRfcmVzdWx0cy5zdF9tb2RlKSkKKyAgICBnb3RvIHdhc19zb2NrZXQ7CisKKyAgc3JjLT5yZWFkX3Bvc2l0aW9uID0gMDsKKworICAvKiByZWNvcmQgaWYgaXQncyBhIHJlZ3VsYXIgKGhlbmNlIHNlZWthYmxlIGFuZCBsZW5ndGhhYmxlKSBmaWxlICovCisgIGlmIChTX0lTUkVHIChzdGF0X3Jlc3VsdHMuc3RfbW9kZSkpCisgICAgc3JjLT5pc19yZWd1bGFyID0gVFJVRTsKKworICAvKiBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSB1bmRlcmx5aW5nIGZpbGUgaXMgc2Vla2FibGUuICovCisgIHsKKyAgICBvZmZfdCByZXMgPSBsc2VlayAoc3JjLT5mZCwgMCwgU0VFS19FTkQpOworCisgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgIEdTVF9MT0dfT0JKRUNUIChzcmMsICJkaXNhYmxpbmcgc2Vla2luZywgbm90IGluIG1tYXAgbW9kZSBhbmQgbHNlZWsgIgorICAgICAgICAgICJmYWlsZWQ6ICVzIiwgZ19zdHJlcnJvciAoZXJybm8pKTsKKyAgICAgIHNyYy0+c2Vla2FibGUgPSBGQUxTRTsKKyAgICB9IGVsc2UgeworICAgICAgc3JjLT5zZWVrYWJsZSA9IFRSVUU7CisgICAgfQorICAgIGxzZWVrIChzcmMtPmZkLCAwLCBTRUVLX1NFVCk7CisgIH0KKworICAvKiBXZSBjYW4gb25seSByZWFsbHkgZG8gc2Vla2luZyBvbiByZWd1bGFyIGZpbGVzIC0gZm9yIG90aGVyIGZpbGUgdHlwZXMsIHdlCisgICAqIGRvbid0IGtub3cgdGhlaXIgbGVuZ3RoLCBzbyBzZWVraW5nIGlzbid0IHVzZWZ1bC9tZWFuaW5nZnVsICovCisgIHNyYy0+c2Vla2FibGUgPSBzcmMtPnNlZWthYmxlICYmIHNyYy0+aXNfcmVndWxhcjsKKworICBnc3RfYmFzZV9zcmNfc2V0X2R5bmFtaWNfc2l6ZSAoYmFzZXNyYywgc3JjLT5zZWVrYWJsZSk7CisKKyAgcmV0dXJuIFRSVUU7CisKKyAgLyogRVJST1IgKi8KK25vX2ZpbGVuYW1lOgorICB7CisgICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIE5PVF9GT1VORCwKKyAgICAgICAgKF8oIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHJlYWRpbmcuIikpLCAoTlVMTCkpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorb3Blbl9mYWlsZWQ6CisgIHsKKyAgICBzd2l0Y2ggKGVycm5vKSB7CisgICAgICBjYXNlIEVOT0VOVDoKKyAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIE5PVF9GT1VORCwgKE5VTEwpLAorICAgICAgICAgICAgKCJObyBzdWNoIGZpbGUgXCIlc1wiIiwgc3JjLT5maWxlbmFtZSkpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBPUEVOX1JFQUQsCisgICAgICAgICAgICAoXygiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIiksIHNyYy0+ZmlsZW5hbWUpLAorICAgICAgICAgICAgR1NUX0VSUk9SX1NZU1RFTSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK25vX3N0YXQ6CisgIHsKKyAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgT1BFTl9SRUFELAorICAgICAgICAoXygiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iKSwgc3JjLT5maWxlbmFtZSksIChOVUxMKSk7CisgICAgY2xvc2UgKHNyYy0+ZmQpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQord2FzX2RpcmVjdG9yeToKKyAgeworICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBPUEVOX1JFQUQsCisgICAgICAgIChfKCJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIiksIHNyYy0+ZmlsZW5hbWUpLCAoTlVMTCkpOworICAgIGNsb3NlIChzcmMtPmZkKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK3dhc19zb2NrZXQ6CisgIHsKKyAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgT1BFTl9SRUFELAorICAgICAgICAoXygiRmlsZSBcIiVzXCIgaXMgYSBzb2NrZXQuIiksIHNyYy0+ZmlsZW5hbWUpLCAoTlVMTCkpOworICAgIGNsb3NlIChzcmMtPmZkKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworLyogdW5tYXAgYW5kIGNsb3NlIHRoZSBmaWxlICovCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9maWxlX3NyY19zdG9wIChHc3RCYXNlU3JjICogYmFzZXNyYykKK3sKKyAgR3N0RmlsZVNyYyAqc3JjID0gR1NUX0ZJTEVfU1JDIChiYXNlc3JjKTsKKworICAvKiBjbG9zZSB0aGUgZmlsZSAqLworICBjbG9zZSAoc3JjLT5mZCk7CisKKyAgLyogemVybyBvdXQgYSBsb3Qgb2Ygb3VyIHN0YXRlICovCisgIHNyYy0+ZmQgPSAwOworICBzcmMtPmlzX3JlZ3VsYXIgPSBGQUxTRTsKKworICByZXR1cm4gVFJVRTsKK30KKworLyoqKiBHU1RVUklIQU5ETEVSIElOVEVSRkFDRSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgR3N0VVJJVHlwZQorZ3N0X2ZpbGVfc3JjX3VyaV9nZXRfdHlwZSAoR1R5cGUgdHlwZSkKK3sKKyAgcmV0dXJuIEdTVF9VUklfU1JDOworfQorCitzdGF0aWMgZ2NoYXIgKioKK2dzdF9maWxlX3NyY191cmlfZ2V0X3Byb3RvY29scyAoR1R5cGUgdHlwZSkKK3sKKyAgc3RhdGljIGdjaGFyICpwcm90b2NvbHNbXSA9IHsgKGNoYXIgKikgImZpbGUiLCBOVUxMIH07CisKKyAgcmV0dXJuIHByb3RvY29sczsKK30KKworc3RhdGljIGNvbnN0IGdjaGFyICoKK2dzdF9maWxlX3NyY191cmlfZ2V0X3VyaSAoR3N0VVJJSGFuZGxlciAqIGhhbmRsZXIpCit7CisgIEdzdEZpbGVTcmMgKnNyYyA9IEdTVF9GSUxFX1NSQyAoaGFuZGxlcik7CisKKyAgcmV0dXJuIHNyYy0+dXJpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9maWxlX3NyY191cmlfc2V0X3VyaSAoR3N0VVJJSGFuZGxlciAqIGhhbmRsZXIsIGNvbnN0IGdjaGFyICogdXJpKQoreworICBnY2hhciAqbG9jYXRpb24sICpob3N0bmFtZSA9IE5VTEw7CisgIGdib29sZWFuIHJldCA9IEZBTFNFOworICBHc3RGaWxlU3JjICpzcmMgPSBHU1RfRklMRV9TUkMgKGhhbmRsZXIpOworICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKworICBpZiAoc3RyY21wICh1cmksICJmaWxlOi8vIikgPT0gMCkgeworICAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgImZpbGU6Ly8iIGFzIHRoaXMgaXMgdXNlZCBieSBzb21lIGFwcGxpY2F0aW9ucworICAgICAqICB0byB0ZXN0IHdpdGggZ3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaSBpZiB0aGVyZSdzIGFuIGVsZW1lbnQKKyAgICAgKiAgdGhhdCBzdXBwb3J0cyB0aGUgVVJJIHByb3RvY29sLiAqLworICAgIGdzdF9maWxlX3NyY19zZXRfbG9jYXRpb24gKHNyYywgTlVMTCk7CisgICAgcmV0dXJuIFRSVUU7CisgIH0KKworICBsb2NhdGlvbiA9IGdfZmlsZW5hbWVfZnJvbV91cmkgKHVyaSwgJmhvc3RuYW1lLCAmZXJyb3IpOworCisgIGlmICghbG9jYXRpb24gfHwgZXJyb3IpIHsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc3JjLCAiSW52YWxpZCBVUkkgJyVzJyBmb3IgZmlsZXNyYzogJXMiLCB1cmksCisgICAgICAgICAgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgZ19lcnJvcl9mcmVlIChlcnJvcik7CisgICAgfSBlbHNlIHsKKyAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc3JjLCAiSW52YWxpZCBVUkkgJyVzJyBmb3IgZmlsZXNyYyIsIHVyaSk7CisgICAgfQorICAgIGdvdG8gYmVhY2g7CisgIH0KKworICBpZiAoKGhvc3RuYW1lKSAmJiAoc3RyY21wIChob3N0bmFtZSwgImxvY2FsaG9zdCIpKSkgeworICAgIC8qIE9ubHkgJ2xvY2FsaG9zdCcgaXMgcGVybWl0dGVkICovCisgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzcmMsICJJbnZhbGlkIGhvc3RuYW1lICclcycgZm9yIGZpbGVzcmMiLCBob3N0bmFtZSk7CisgICAgZ290byBiZWFjaDsKKyAgfQorI2lmZGVmIEdfT1NfV0lOMzIKKyAgLyogVW5mb3J0dW5hdGVseSwgZ19maWxlbmFtZV9mcm9tX3VyaSgpIGRvZXNuJ3QgaGFuZGxlIHNvbWUgVU5DIHBhdGhzCisgICAqIGNvcnJlY3RseSBvbiB3aW5kb3dzLCBpdCBsZWF2ZXMgdGhlbSB3aXRoIGFuIGV4dHJhIGJhY2tzbGFzaAorICAgKiBhdCB0aGUgc3RhcnQgaWYgdGhleSdyZSBvZiB0aGUgbW96aWxsYS1zdHlsZSBmaWxlOi8vLy8vaG9zdC9wYXRoL2ZpbGUgCisgICAqIGZvcm0uIENvcnJlY3QgdGhpcy4KKyAgICovCisgIGlmIChsb2NhdGlvblswXSA9PSAnXFwnICYmIGxvY2F0aW9uWzFdID09ICdcXCcgJiYgbG9jYXRpb25bMl0gPT0gJ1xcJykKKyAgICBnX21lbW1vdmUgKGxvY2F0aW9uLCBsb2NhdGlvbiArIDEsIHN0cmxlbiAobG9jYXRpb24gKyAxKSArIDEpOworI2VuZGlmCisKKyAgcmV0ID0gZ3N0X2ZpbGVfc3JjX3NldF9sb2NhdGlvbiAoc3JjLCBsb2NhdGlvbik7CisKK2JlYWNoOgorICBpZiAobG9jYXRpb24pCisgICAgZ19mcmVlIChsb2NhdGlvbik7CisgIGlmIChob3N0bmFtZSkKKyAgICBnX2ZyZWUgKGhvc3RuYW1lKTsKKworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAorZ3N0X2ZpbGVfc3JjX3VyaV9oYW5kbGVyX2luaXQgKGdwb2ludGVyIGdfaWZhY2UsIGdwb2ludGVyIGlmYWNlX2RhdGEpCit7CisgIEdzdFVSSUhhbmRsZXJJbnRlcmZhY2UgKmlmYWNlID0gKEdzdFVSSUhhbmRsZXJJbnRlcmZhY2UgKikgZ19pZmFjZTsKKworICBpZmFjZS0+Z2V0X3R5cGUgPSBnc3RfZmlsZV9zcmNfdXJpX2dldF90eXBlOworICBpZmFjZS0+Z2V0X3Byb3RvY29scyA9IGdzdF9maWxlX3NyY191cmlfZ2V0X3Byb3RvY29sczsKKyAgaWZhY2UtPmdldF91cmkgPSBnc3RfZmlsZV9zcmNfdXJpX2dldF91cmk7CisgIGlmYWNlLT5zZXRfdXJpID0gZ3N0X2ZpbGVfc3JjX3VyaV9zZXRfdXJpOworfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmggYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWE5Zjg3Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmgKQEAgLTAsMCArMSw3NiBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgorICogICAgICAgICAgICAgICAgICAgIDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KKyAqCisgKiBnc3RmaWxlc3JjLmg6CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0dTVF9GSUxFX1NSQ19IX18KKyNkZWZpbmUgX19HU1RfRklMRV9TUkNfSF9fCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNlc3JjLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBHU1RfVFlQRV9GSUxFX1NSQyBcCisgIChnc3RfZmlsZV9zcmNfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgR1NUX0ZJTEVfU1JDKG9iaikgXAorICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfRklMRV9TUkMsR3N0RmlsZVNyYykpCisjZGVmaW5lIEdTVF9GSUxFX1NSQ19DTEFTUyhrbGFzcykgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9GSUxFX1NSQyxHc3RGaWxlU3JjQ2xhc3MpKQorI2RlZmluZSBHU1RfSVNfRklMRV9TUkMob2JqKSBcCisgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9GSUxFX1NSQykpCisjZGVmaW5lIEdTVF9JU19GSUxFX1NSQ19DTEFTUyhrbGFzcykgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9GSUxFX1NSQykpCisjZGVmaW5lIEdTVF9GSUxFX1NSQ19DQVNUKG9iaikgKChHc3RGaWxlU3JjKikgb2JqKQorCit0eXBlZGVmIHN0cnVjdCBfR3N0RmlsZVNyYyBHc3RGaWxlU3JjOwordHlwZWRlZiBzdHJ1Y3QgX0dzdEZpbGVTcmNDbGFzcyBHc3RGaWxlU3JjQ2xhc3M7CisKKy8qKgorICogR3N0RmlsZVNyYzoKKyAqCisgKiBPcGFxdWUgI0dzdEZpbGVTcmMgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgX0dzdEZpbGVTcmMgeworICBHc3RCYXNlU3JjIGVsZW1lbnQ7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIGdjaGFyICpmaWxlbmFtZTsJCQkvKiBmaWxlbmFtZSAqLworICBnY2hhciAqdXJpOwkJCQkvKiBjYWNoaW5nIHRoZSBVUkkgKi8KKyAgZ2ludCBmZDsJCQkJLyogb3BlbiBmaWxlIGRlc2NyaXB0b3IgKi8KKyAgZ3VpbnQ2NCByZWFkX3Bvc2l0aW9uOwkJLyogcG9zaXRpb24gb2YgZmQgKi8KKworICBnYm9vbGVhbiBzZWVrYWJsZTsgICAgICAgICAgICAgICAgICAgIC8qIHdoZXRoZXIgdGhlIGZpbGUgaXMgc2Vla2FibGUgKi8KKyAgZ2Jvb2xlYW4gaXNfcmVndWxhcjsgICAgICAgICAgICAgICAgICAvKiB3aGV0aGVyIGl0J3MgYSAoc3ltbGluayB0byBhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3VsYXIgZmlsZSAqLworfTsKKworc3RydWN0IF9Hc3RGaWxlU3JjQ2xhc3MgeworICBHc3RCYXNlU3JjQ2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworR1R5cGUgZ3N0X2ZpbGVfc3JjX2dldF90eXBlICh2b2lkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fR1NUX0ZJTEVfU1JDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9lbGVtZW50cy9nc3RmdW5uZWwuYyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIzN2U3MgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmMKQEAgLTAsMCArMSw0MzUgQEAKKy8qCisgKiBHU3RyZWFtZXIgRnVubmVsIGVsZW1lbnQKKyAqCisgKiBDb3B5cmlnaHQgMjAwNyBDb2xsYWJvcmEgTHRkLgorICogIEBhdXRob3I6IE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgorICogQ29weXJpZ2h0IDIwMDcgTm9raWEgQ29ycC4KKyAqCisgKiBnc3RmdW5uZWwuYzogU2ltcGxlIEZ1bm5lbCBlbGVtZW50CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxIFVTQQorICovCisKKy8qKgorICogU0VDVElPTjplbGVtZW50LWZ1bm5lbAorICoKKyAqIFRha2VzIHBhY2tldHMgZnJvbSB2YXJpb3VzIGlucHV0IHNpbmtzIGludG8gb25lIG91dHB1dCBzb3VyY2UuCisgKgorICogZnVubmVsIGFsd2F5cyBvdXRwdXRzIGEgc2luZ2xlLCBvcGVuIGVuZGVkIHNlZ21lbnQgZnJvbQorICogMCB3aXRoIGluICVHU1RfRk9STUFUX1RJTUUgYW5kIG91dHB1dHMgdGhlIGJ1ZmZlcnMgb2YgdGhlCisgKiBkaWZmZXJlbnQgc2lua3BhZHMgd2l0aCB0aW1lc3RhbXBzIHRoYXQgYXJlIHNldCB0byB0aGUKKyAqIHJ1bm5pbmcgdGltZSBmb3IgdGhhdCBzdHJlYW0uIGZ1bm5lbCBkb2VzIG5vdCBzeW5jaHJvbml6ZQorICogdGhlIGRpZmZlcmVudCBpbnB1dCBzdHJlYW1zIGJ1dCBzaW1wbHkgZm9yd2FyZHMgYWxsIGJ1ZmZlcnMKKyAqIGltbWVkaWF0ZWx5IHdoZW4gdGhleSBhcnJpdmUuCisgKgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgImdzdGZ1bm5lbC5oIgorCitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfZnVubmVsX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9mdW5uZWxfZGVidWcKKworR1R5cGUgZ3N0X2Z1bm5lbF9wYWRfZ2V0X3R5cGUgKHZvaWQpOworI2RlZmluZSBHU1RfVFlQRV9GVU5ORUxfUEFEIFwKKyAgKGdzdF9mdW5uZWxfcGFkX2dldF90eXBlKCkpCisjZGVmaW5lIEdTVF9GVU5ORUxfUEFEKG9iaikgXAorICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9GVU5ORUxfUEFELCBHc3RGdW5uZWxQYWQpKQorI2RlZmluZSBHU1RfRlVOTkVMX1BBRF9DTEFTUyhrbGFzcykgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX0ZVTk5FTF9QQUQsIEdzdEZ1bm5lbFBhZENsYXNzKSkKKyNkZWZpbmUgR1NUX0lTX0ZVTk5FTF9QQUQob2JqKSBcCisgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX0ZVTk5FTF9QQUQpKQorI2RlZmluZSBHU1RfSVNfRlVOTkVMX1BBRF9DTEFTUyhrbGFzcykgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX0ZVTk5FTF9QQUQpKQorI2RlZmluZSBHU1RfRlVOTkVMX1BBRF9DQVNUKG9iaikgXAorICAoKEdzdEZ1bm5lbFBhZCAqKShvYmopKQorCit0eXBlZGVmIHN0cnVjdCBfR3N0RnVubmVsUGFkIEdzdEZ1bm5lbFBhZDsKK3R5cGVkZWYgc3RydWN0IF9Hc3RGdW5uZWxQYWRDbGFzcyBHc3RGdW5uZWxQYWRDbGFzczsKKworc3RydWN0IF9Hc3RGdW5uZWxQYWQKK3sKKyAgR3N0UGFkIHBhcmVudDsKKworICBHc3RTZWdtZW50IHNlZ21lbnQ7Cit9OworCitzdHJ1Y3QgX0dzdEZ1bm5lbFBhZENsYXNzCit7CisgIEdzdFBhZENsYXNzIHBhcmVudDsKK307CisKK0dfREVGSU5FX1RZUEUgKEdzdEZ1bm5lbFBhZCwgZ3N0X2Z1bm5lbF9wYWQsIEdTVF9UWVBFX1BBRCk7CisKK3N0YXRpYyB2b2lkCitnc3RfZnVubmVsX3BhZF9jbGFzc19pbml0IChHc3RGdW5uZWxQYWRDbGFzcyAqIGtsYXNzKQoreworfQorCitzdGF0aWMgdm9pZAorZ3N0X2Z1bm5lbF9wYWRfcmVzZXQgKEdzdEZ1bm5lbFBhZCAqIHBhZCkKK3sKKyAgZ3N0X3NlZ21lbnRfaW5pdCAoJnBhZC0+c2VnbWVudCwgR1NUX0ZPUk1BVF9VTkRFRklORUQpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2Z1bm5lbF9wYWRfaW5pdCAoR3N0RnVubmVsUGFkICogcGFkKQoreworICBnc3RfZnVubmVsX3BhZF9yZXNldCAocGFkKTsKK30KKworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGZ1bm5lbF9zaW5rX3RlbXBsYXRlID0KK0dTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayVkIiwKKyAgICBHU1RfUEFEX1NJTkssCisgICAgR1NUX1BBRF9SRVFVRVNULAorICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOworCitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZnVubmVsX3NyY190ZW1wbGF0ZSA9CitHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCisgICAgR1NUX1BBRF9TUkMsCisgICAgR1NUX1BBRF9BTFdBWVMsCisgICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7CisKKyNkZWZpbmUgX2RvX2luaXQgXAorICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X2Z1bm5lbF9kZWJ1ZywgImZ1bm5lbCIsIDAsICJmdW5uZWwgZWxlbWVudCIpOworI2RlZmluZSBnc3RfZnVubmVsX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RGdW5uZWwsIGdzdF9mdW5uZWwsIEdTVF9UWVBFX0VMRU1FTlQsIF9kb19pbml0KTsKKworc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9mdW5uZWxfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKKyAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKK3N0YXRpYyBHc3RQYWQgKmdzdF9mdW5uZWxfcmVxdWVzdF9uZXdfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwKKyAgICBHc3RQYWRUZW1wbGF0ZSAqIHRlbXBsLCBjb25zdCBnY2hhciAqIG5hbWUsIGNvbnN0IEdzdENhcHMgKiBjYXBzKTsKK3N0YXRpYyB2b2lkIGdzdF9mdW5uZWxfcmVsZWFzZV9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RQYWQgKiBwYWQpOworCitzdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfZnVubmVsX3NpbmtfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0QnVmZmVyICogYnVmZmVyKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfZnVubmVsX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiBldmVudCk7CitzdGF0aWMgR3N0Q2FwcyAqZ3N0X2Z1bm5lbF9zaW5rX2dldGNhcHMgKEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGZpbHRlcik7CisKK3N0YXRpYyBnYm9vbGVhbiBnc3RfZnVubmVsX3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KTsKKworc3RhdGljIHZvaWQKK2dzdF9mdW5uZWxfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCkKK3sKKyAgR0xpc3QgKml0ZW07CisKK3Jlc3RhcnQ6CisgIGZvciAoaXRlbSA9IEdTVF9FTEVNRU5UX1BBRFMgKG9iamVjdCk7IGl0ZW07IGl0ZW0gPSBnX2xpc3RfbmV4dCAoaXRlbSkpIHsKKyAgICBHc3RQYWQgKnBhZCA9IEdTVF9QQUQgKGl0ZW0tPmRhdGEpOworCisgICAgaWYgKEdTVF9QQURfSVNfU0lOSyAocGFkKSkgeworICAgICAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAoR1NUX0VMRU1FTlQgKG9iamVjdCksIHBhZCk7CisgICAgICBnb3RvIHJlc3RhcnQ7CisgICAgfQorICB9CisKKyAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfZnVubmVsX2NsYXNzX2luaXQgKEdzdEZ1bm5lbENsYXNzICoga2xhc3MpCit7CisgIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7CisgIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7CisKKyAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZnVubmVsX2Rpc3Bvc2UpOworCisgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZSAoZ3N0ZWxlbWVudF9jbGFzcywKKyAgICAgICJGdW5uZWwgcGlwZSBmaXR0aW5nIiwgIkdlbmVyaWMiLCAiTi10by0xIHBpcGUgZml0dGluZyIsCisgICAgICAiT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Iik7CisKKyAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKKyAgICAgIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoJmZ1bm5lbF9zaW5rX3RlbXBsYXRlKSk7CisgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCisgICAgICBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgKCZmdW5uZWxfc3JjX3RlbXBsYXRlKSk7CisKKyAgZ3N0ZWxlbWVudF9jbGFzcy0+cmVxdWVzdF9uZXdfcGFkID0KKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZnVubmVsX3JlcXVlc3RfbmV3X3BhZCk7CisgIGdzdGVsZW1lbnRfY2xhc3MtPnJlbGVhc2VfcGFkID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mdW5uZWxfcmVsZWFzZV9wYWQpOworICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Z1bm5lbF9jaGFuZ2Vfc3RhdGUpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2Z1bm5lbF9pbml0IChHc3RGdW5uZWwgKiBmdW5uZWwpCit7CisgIGZ1bm5lbC0+c3JjcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZmdW5uZWxfc3JjX3RlbXBsYXRlLAorICAgICAgInNyYyIpOworICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAoZnVubmVsLT5zcmNwYWQsIGdzdF9mdW5uZWxfc3JjX2V2ZW50KTsKKyAgZ3N0X3BhZF91c2VfZml4ZWRfY2FwcyAoZnVubmVsLT5zcmNwYWQpOworICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoZnVubmVsKSwgZnVubmVsLT5zcmNwYWQpOworfQorCitzdGF0aWMgR3N0UGFkICoKK2dzdF9mdW5uZWxfcmVxdWVzdF9uZXdfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCwKKyAgICBjb25zdCBnY2hhciAqIG5hbWUsIGNvbnN0IEdzdENhcHMgKiBjYXBzKQoreworICBHc3RQYWQgKnNpbmtwYWQ7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoZWxlbWVudCwgInJlcXVlc3RpbmcgcGFkIik7CisKKyAgc2lua3BhZCA9IEdTVF9QQURfQ0FTVCAoZ19vYmplY3RfbmV3IChHU1RfVFlQRV9GVU5ORUxfUEFELAorICAgICAgICAgICJuYW1lIiwgbmFtZSwgImRpcmVjdGlvbiIsIHRlbXBsLT5kaXJlY3Rpb24sICJ0ZW1wbGF0ZSIsIHRlbXBsLAorICAgICAgICAgIE5VTEwpKTsKKworICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoc2lua3BhZCwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZnVubmVsX3NpbmtfY2hhaW4pKTsKKyAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHNpbmtwYWQsCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Z1bm5lbF9zaW5rX2V2ZW50KSk7CisgIGdzdF9wYWRfc2V0X2dldGNhcHNfZnVuY3Rpb24gKHNpbmtwYWQsCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Z1bm5lbF9zaW5rX2dldGNhcHMpKTsKKworICBnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmtwYWQsIFRSVUUpOworCisgIGdzdF9lbGVtZW50X2FkZF9wYWQgKGVsZW1lbnQsIHNpbmtwYWQpOworCisgIHJldHVybiBzaW5rcGFkOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2Z1bm5lbF9yZWxlYXNlX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFBhZCAqIHBhZCkKK3sKKyAgR3N0RnVubmVsICpmdW5uZWwgPSBHU1RfRlVOTkVMIChlbGVtZW50KTsKKworICBHU1RfREVCVUdfT0JKRUNUIChmdW5uZWwsICJyZWxlYXNpbmcgcGFkIik7CisKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlIChwYWQsIEZBTFNFKTsKKworICBnc3RfZWxlbWVudF9yZW1vdmVfcGFkIChHU1RfRUxFTUVOVF9DQVNUIChmdW5uZWwpLCBwYWQpOworfQorCitzdGF0aWMgR3N0Q2FwcyAqCitnc3RfZnVubmVsX3NpbmtfZ2V0Y2FwcyAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogZmlsdGVyKQoreworICBHc3RGdW5uZWwgKmZ1bm5lbCA9IEdTVF9GVU5ORUwgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7CisgIEdzdENhcHMgKmNhcHM7CisKKyAgaWYgKEdfVU5MSUtFTFkgKGZ1bm5lbCA9PSBOVUxMKSkKKyAgICByZXR1cm4gZ3N0X2NhcHNfbmV3X2FueSAoKTsKKworICBjYXBzID0gZ3N0X3BhZF9wZWVyX2dldF9jYXBzIChmdW5uZWwtPnNyY3BhZCwgZmlsdGVyKTsKKyAgaWYgKGNhcHMgPT0gTlVMTCkKKyAgICBjYXBzID0gKGZpbHRlciA/IGdzdF9jYXBzX3JlZiAoZmlsdGVyKSA6IGdzdF9jYXBzX25ld19hbnkgKCkpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKGZ1bm5lbCk7CisKKyAgcmV0dXJuIGNhcHM7Cit9CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuCitnc3RfZnVubmVsX3NpbmtfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0QnVmZmVyICogYnVmZmVyKQoreworICBHc3RGbG93UmV0dXJuIHJlczsKKyAgR3N0RnVubmVsICpmdW5uZWwgPSBHU1RfRlVOTkVMIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOworICBHc3RGdW5uZWxQYWQgKmZwYWQgPSBHU1RfRlVOTkVMX1BBRF9DQVNUIChwYWQpOworICBHc3RFdmVudCAqZXZlbnQgPSBOVUxMOworICBHc3RDbG9ja1RpbWUgbmV3dHM7CisjaWYgMAorICBHc3RDYXBzICpwYWRjYXBzOworI2VuZGlmCisKKyAgR1NUX0RFQlVHX09CSkVDVCAoZnVubmVsLCAicmVjZWl2ZWQgYnVmZmVyICVwIiwgYnVmZmVyKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKGZ1bm5lbCk7CisgIGlmIChmcGFkLT5zZWdtZW50LmZvcm1hdCA9PSBHU1RfRk9STUFUX1VOREVGSU5FRCkgeworICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZnVubmVsLCAiR290IGJ1ZmZlciB3aXRob3V0IHNlZ21lbnQsIgorICAgICAgICAiIHNldHRpbmcgc2VnbWVudCBbMCxpbmZbIik7CisgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJmZwYWQtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7CisgIH0KKworICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpKSkKKyAgICBmcGFkLT5zZWdtZW50LnBvc2l0aW9uID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcik7CisKKyAgbmV3dHMgPSBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZmcGFkLT5zZWdtZW50LAorICAgICAgZnBhZC0+c2VnbWVudC5mb3JtYXQsIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpKTsKKyAgaWYgKG5ld3RzICE9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpKSB7CisgICAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChidWZmZXIpOworICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gbmV3dHM7CisgIH0KKworICBpZiAoIWZ1bm5lbC0+aGFzX3NlZ21lbnQpIHsKKyAgICBHc3RTZWdtZW50IHNlZ21lbnQ7CisKKyAgICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKKyAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpOworICAgIGZ1bm5lbC0+aGFzX3NlZ21lbnQgPSBUUlVFOworICB9CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChmdW5uZWwpOworCisgIGlmIChldmVudCkgeworICAgIGlmICghZ3N0X3BhZF9wdXNoX2V2ZW50IChmdW5uZWwtPnNyY3BhZCwgZXZlbnQpKQorICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChmdW5uZWwsICJDb3VsZCBub3QgcHVzaCBvdXQgbmV3c2VnbWVudCBldmVudCIpOworICB9CisjaWYgMAorICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7CisgIHBhZGNhcHMgPSBHU1RfUEFEX0NBUFMgKGZ1bm5lbC0+c3JjcGFkKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisKKyAgaWYgKEdTVF9CVUZGRVJfQ0FQUyAoYnVmZmVyKSAmJiBHU1RfQlVGRkVSX0NBUFMgKGJ1ZmZlcikgIT0gcGFkY2FwcykgeworICAgIGlmICghZ3N0X3BhZF9zZXRfY2FwcyAoZnVubmVsLT5zcmNwYWQsIEdTVF9CVUZGRVJfQ0FQUyAoYnVmZmVyKSkpIHsKKyAgICAgIHJlcyA9IEdTVF9GTE9XX05PVF9ORUdPVElBVEVEOworICAgICAgZ290byBvdXQ7CisgICAgfQorICB9CisjZW5kaWYKKworICByZXMgPSBnc3RfcGFkX3B1c2ggKGZ1bm5lbC0+c3JjcGFkLCBidWZmZXIpOworCisgIEdTVF9MT0dfT0JKRUNUIChmdW5uZWwsICJoYW5kbGVkIGJ1ZmZlciAlcyIsIGdzdF9mbG93X2dldF9uYW1lIChyZXMpKTsKKworI2lmIDAKK291dDoKKyNlbmRpZgorICBnc3Rfb2JqZWN0X3VucmVmIChmdW5uZWwpOworCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2Z1bm5lbF9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpCit7CisgIEdzdEZ1bm5lbCAqZnVubmVsID0gR1NUX0ZVTk5FTCAoZ3N0X3BhZF9nZXRfcGFyZW50IChwYWQpKTsKKyAgR3N0RnVubmVsUGFkICpmcGFkID0gR1NUX0ZVTk5FTF9QQURfQ0FTVCAocGFkKTsKKyAgZ2Jvb2xlYW4gZm9yd2FyZCA9IFRSVUU7CisgIGdib29sZWFuIHJlcyA9IFRSVUU7CisKKyAgaWYgKEdfVU5MSUtFTFkgKGZ1bm5lbCA9PSBOVUxMKSkgeworICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorCisgIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgeworICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6CisgICAgeworICAgICAgR1NUX09CSkVDVF9MT0NLIChmdW5uZWwpOworICAgICAgZ3N0X2V2ZW50X2NvcHlfc2VnbWVudCAoZXZlbnQsICZmcGFkLT5zZWdtZW50KTsKKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChmdW5uZWwpOworCisgICAgICBmb3J3YXJkID0gRkFMU0U7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKKyAgICB7CisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGZ1bm5lbCk7CisgICAgICBnc3Rfc2VnbWVudF9pbml0ICgmZnBhZC0+c2VnbWVudCwgR1NUX0ZPUk1BVF9VTkRFRklORUQpOworICAgICAgZnVubmVsLT5oYXNfc2VnbWVudCA9IEZBTFNFOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGZ1bm5lbCk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgaWYgKGZvcndhcmQpCisgICAgcmVzID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChmdW5uZWwtPnNyY3BhZCwgZXZlbnQpOworICBlbHNlCisgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAoZnVubmVsKTsKKworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9mdW5uZWxfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpCit7CisgIEdzdEVsZW1lbnQgKmZ1bm5lbDsKKyAgR3N0SXRlcmF0b3IgKml0ZXI7CisgIEdzdFBhZCAqc2lua3BhZDsKKyAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisgIGdib29sZWFuIGRvbmUgPSBGQUxTRTsKKyAgR1ZhbHVlIHZhbHVlID0geyAwLCB9OworCisgIGZ1bm5lbCA9IGdzdF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50IChwYWQpOworICBpZiAoR19VTkxJS0VMWSAoZnVubmVsID09IE5VTEwpKSB7CisgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgaXRlciA9IGdzdF9lbGVtZW50X2l0ZXJhdGVfc2lua19wYWRzIChmdW5uZWwpOworCisgIHdoaWxlICghZG9uZSkgeworICAgIHN3aXRjaCAoZ3N0X2l0ZXJhdG9yX25leHQgKGl0ZXIsICZ2YWx1ZSkpIHsKKyAgICAgIGNhc2UgR1NUX0lURVJBVE9SX09LOgorICAgICAgICBzaW5rcGFkID0gZ192YWx1ZV9nZXRfb2JqZWN0ICgmdmFsdWUpOworICAgICAgICBnc3RfZXZlbnRfcmVmIChldmVudCk7CisgICAgICAgIHJlc3VsdCB8PSBnc3RfcGFkX3B1c2hfZXZlbnQgKHNpbmtwYWQsIGV2ZW50KTsKKyAgICAgICAgZ192YWx1ZV9yZXNldCAoJnZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6CisgICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0ZXIpOworICAgICAgICByZXN1bHQgPSBGQUxTRTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9FUlJPUjoKKyAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChmdW5uZWwsICJFcnJvciBpdGVyYXRpbmcgc2lua3BhZHMiKTsKKyAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0RPTkU6CisgICAgICAgIGRvbmUgPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgZ192YWx1ZV91bnNldCAoJnZhbHVlKTsKKyAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0ZXIpOworICBnc3Rfb2JqZWN0X3VucmVmIChmdW5uZWwpOworICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorcmVzZXRfcGFkIChjb25zdCBHVmFsdWUgKiBkYXRhLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIEdzdFBhZCAqcGFkID0gZ192YWx1ZV9nZXRfb2JqZWN0IChkYXRhKTsKKyAgR3N0RnVubmVsUGFkICpmcGFkID0gR1NUX0ZVTk5FTF9QQURfQ0FTVCAocGFkKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7CisgIGdzdF9mdW5uZWxfcGFkX3Jlc2V0IChmcGFkKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Cit9CisKK3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgorZ3N0X2Z1bm5lbF9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQoreworICBHc3RGdW5uZWwgKmZ1bm5lbCA9IEdTVF9GVU5ORUwgKGVsZW1lbnQpOworICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7CisKKyAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKKyAgICB7CisgICAgICBHc3RJdGVyYXRvciAqaXRlciA9IGdzdF9lbGVtZW50X2l0ZXJhdGVfc2lua19wYWRzIChlbGVtZW50KTsKKyAgICAgIEdzdEl0ZXJhdG9yUmVzdWx0IHJlczsKKworICAgICAgZG8geworICAgICAgICByZXMgPSBnc3RfaXRlcmF0b3JfZm9yZWFjaCAoaXRlciwgcmVzZXRfcGFkLCBOVUxMKTsKKyAgICAgIH0gd2hpbGUgKHJlcyA9PSBHU1RfSVRFUkFUT1JfUkVTWU5DKTsKKworICAgICAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0ZXIpOworCisgICAgICBpZiAocmVzID09IEdTVF9JVEVSQVRPUl9FUlJPUikKKyAgICAgICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKKworICAgICAgR1NUX09CSkVDVF9MT0NLIChmdW5uZWwpOworICAgICAgZnVubmVsLT5oYXNfc2VnbWVudCA9IEZBTFNFOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGZ1bm5lbCk7CisgICAgfQorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7CisKKyAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmggYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OGE2NTEKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBHU3RyZWFtZXIgRnVubmVsIGVsZW1lbnQKKyAqCisgKiBDb3B5cmlnaHQgMjAwNyBDb2xsYWJvcmEgTHRkLgorICogIEBhdXRob3I6IE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgorICogQ29weXJpZ2h0IDIwMDcgTm9raWEgQ29ycC4KKyAqCisgKiBnc3RmdW5uZWwuaDogU2ltcGxlIEZ1bm5lbCBlbGVtZW50CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxIFVTQQorICovCisKKworI2lmbmRlZiBfX0dTVF9GVU5ORUxfSF9fCisjZGVmaW5lIF9fR1NUX0ZVTk5FTF9IX18KKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEdTVF9UWVBFX0ZVTk5FTCBcCisgIChnc3RfZnVubmVsX2dldF90eXBlICgpKQorI2RlZmluZSBHU1RfRlVOTkVMKG9iaikgXAorICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfRlVOTkVMLEdzdEZ1bm5lbCkpCisjZGVmaW5lIEdTVF9GVU5ORUxfQ0xBU1Moa2xhc3MpIFwKKyAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfRlVOTkVMLEdzdEZ1bm5lbENsYXNzKSkKKyNkZWZpbmUgR1NUX0lTX0ZVTk5FTChvYmopIFwKKyAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0ZVTk5FTCkpCisjZGVmaW5lIEdTVF9JU19GVU5ORUxfQ0xBU1Moa2xhc3MpIFwKKyAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfRlVOTkVMKSkKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdEZ1bm5lbCAgICAgICAgICBHc3RGdW5uZWw7Cit0eXBlZGVmIHN0cnVjdCBfR3N0RnVubmVsQ2xhc3MgICAgIEdzdEZ1bm5lbENsYXNzOworCisvKioKKyAqIEdzdEZ1bm5lbDoKKyAqCisgKiBPcGFxdWUgI0dzdEZ1bm5lbCBkYXRhIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IF9Hc3RGdW5uZWwgeworICBHc3RFbGVtZW50ICAgICAgZWxlbWVudDsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgR3N0UGFkICAgICAgICAgKnNyY3BhZDsKKworICBnYm9vbGVhbiBoYXNfc2VnbWVudDsKK307CisKK3N0cnVjdCBfR3N0RnVubmVsQ2xhc3MgeworICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworR1R5cGUgICBnc3RfZnVubmVsX2dldF90eXBlICAgICAgICAodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9GVU5ORUxfSF9fICovCmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmMgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYwNjYwZgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYwpAQCAtMCwwICsxLDgzOSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgorICogICAgICAgICAgICAgICAgICAgIDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KKyAqCisgKiBnc3RpZGVudGl0eS5jOgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisvKioKKyAqIFNFQ1RJT046ZWxlbWVudC1pZGVudGl0eQorICoKKyAqIER1bW15IGVsZW1lbnQgdGhhdCBwYXNzZXMgaW5jb21pbmcgZGF0YSB0aHJvdWdoIHVubW9kaWZpZWQuIEl0IGhhcyBzb21lCisgKiB1c2VmdWwgZGlhZ25vc3RpYyBmdW5jdGlvbnMsIHN1Y2ggYXMgb2Zmc2V0IGFuZCB0aW1lc3RhbXAgY2hlY2tpbmcuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgIi4uLy4uL2dzdC9nc3QtaTE4bi1saWIuaCIKKyNpbmNsdWRlICJnc3RpZGVudGl0eS5oIgorI2luY2x1ZGUgPGdzdC9nc3RtYXJzaGFsLmg+CisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAorICAgIEdTVF9QQURfU0lOSywKKyAgICBHU1RfUEFEX0FMV0FZUywKKyAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKKworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAorICAgIEdTVF9QQURfU1JDLAorICAgIEdTVF9QQURfQUxXQVlTLAorICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOworCitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfaWRlbnRpdHlfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X2lkZW50aXR5X2RlYnVnCisKKy8qIElkZW50aXR5IHNpZ25hbHMgYW5kIGFyZ3MgKi8KK2VudW0KK3sKKyAgU0lHTkFMX0hBTkRPRkYsCisgIC8qIEZJTEwgTUUgKi8KKyAgTEFTVF9TSUdOQUwKK307CisKKyNkZWZpbmUgREVGQVVMVF9TTEVFUF9USU1FICAgICAgICAgICAgICAwCisjZGVmaW5lIERFRkFVTFRfRFVQTElDQVRFICAgICAgICAgICAgICAgMQorI2RlZmluZSBERUZBVUxUX0VSUk9SX0FGVEVSICAgICAgICAgICAgIC0xCisjZGVmaW5lIERFRkFVTFRfRFJPUF9QUk9CQUJJTElUWSAgICAgICAgMC4wCisjZGVmaW5lIERFRkFVTFRfREFUQVJBVEUgICAgICAgICAgICAgICAgMAorI2RlZmluZSBERUZBVUxUX1NJTEVOVCAgICAgICAgICAgICAgICAgIEZBTFNFCisjZGVmaW5lIERFRkFVTFRfU0lOR0xFX1NFR01FTlQgICAgICAgICAgRkFMU0UKKyNkZWZpbmUgREVGQVVMVF9EVU1QICAgICAgICAgICAgICAgICAgICBGQUxTRQorI2RlZmluZSBERUZBVUxUX1NZTkMgICAgICAgICAgICAgICAgICAgIEZBTFNFCisjZGVmaW5lIERFRkFVTFRfQ0hFQ0tfUEVSRkVDVCAgICAgICAgICAgRkFMU0UKKyNkZWZpbmUgREVGQVVMVF9DSEVDS19JTVBFUkZFQ1RfVElNRVNUQU1QIEZBTFNFCisjZGVmaW5lIERFRkFVTFRfQ0hFQ0tfSU1QRVJGRUNUX09GRlNFVCAgICBGQUxTRQorI2RlZmluZSBERUZBVUxUX1NJR05BTF9IQU5ET0ZGUyAgICAgICAgICAgVFJVRQorCitlbnVtCit7CisgIFBST1BfMCwKKyAgUFJPUF9TTEVFUF9USU1FLAorICBQUk9QX0VSUk9SX0FGVEVSLAorICBQUk9QX0RST1BfUFJPQkFCSUxJVFksCisgIFBST1BfREFUQVJBVEUsCisgIFBST1BfU0lMRU5ULAorICBQUk9QX1NJTkdMRV9TRUdNRU5ULAorICBQUk9QX0xBU1RfTUVTU0FHRSwKKyAgUFJPUF9EVU1QLAorICBQUk9QX1NZTkMsCisgIFBST1BfQ0hFQ0tfUEVSRkVDVCwKKyAgUFJPUF9DSEVDS19JTVBFUkZFQ1RfVElNRVNUQU1QLAorICBQUk9QX0NIRUNLX0lNUEVSRkVDVF9PRkZTRVQsCisgIFBST1BfU0lHTkFMX0hBTkRPRkZTCit9OworCisKKyNkZWZpbmUgX2RvX2luaXQgXAorICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfaWRlbnRpdHlfZGVidWcsICJpZGVudGl0eSIsIDAsICJpZGVudGl0eSBlbGVtZW50Iik7CisjZGVmaW5lIGdzdF9pZGVudGl0eV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0SWRlbnRpdHksIGdzdF9pZGVudGl0eSwgR1NUX1RZUEVfQkFTRV9UUkFOU0ZPUk0sCisgICAgX2RvX2luaXQpOworCitzdGF0aWMgdm9pZCBnc3RfaWRlbnRpdHlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOworc3RhdGljIHZvaWQgZ3N0X2lkZW50aXR5X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKK3N0YXRpYyB2b2lkIGdzdF9pZGVudGl0eV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7CisKK3N0YXRpYyBnYm9vbGVhbiBnc3RfaWRlbnRpdHlfc2lua19ldmVudCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAorICAgIEdzdEV2ZW50ICogZXZlbnQpOworc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2lkZW50aXR5X3RyYW5zZm9ybV9pcCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAorICAgIEdzdEJ1ZmZlciAqIGJ1Zik7CitzdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfaWRlbnRpdHlfcHJlcGFyZV9vdXRwdXRfYnVmZmVyIChHc3RCYXNlVHJhbnNmb3JtICoKKyAgICB0cmFucywgR3N0QnVmZmVyICogaW5fYnVmLCBHc3RCdWZmZXIgKiogb3V0X2J1Zik7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X2lkZW50aXR5X3N0YXJ0IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpOworc3RhdGljIGdib29sZWFuIGdzdF9pZGVudGl0eV9zdG9wIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpOworCitzdGF0aWMgZ3VpbnQgZ3N0X2lkZW50aXR5X3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07CisKK3N0YXRpYyBHUGFyYW1TcGVjICpwc3BlY19sYXN0X21lc3NhZ2UgPSBOVUxMOworCitzdGF0aWMgdm9pZAorZ3N0X2lkZW50aXR5X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQoreworICBHc3RJZGVudGl0eSAqaWRlbnRpdHk7CisKKyAgaWRlbnRpdHkgPSBHU1RfSURFTlRJVFkgKG9iamVjdCk7CisKKyAgZ19mcmVlIChpZGVudGl0eS0+bGFzdF9tZXNzYWdlKTsKKworI2lmICFHTElCX0NIRUNLX1ZFUlNJT04oMiwyNiwwKQorICBnX3N0YXRpY19yZWNfbXV0ZXhfZnJlZSAoJmlkZW50aXR5LT5ub3RpZnlfbG9jayk7CisjZW5kaWYKKworICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Cit9CisKKy8qIGZpeG1lOiBkbyBzb21ldGhpbmcgYWJvdXQgdGhpcyAqLworc3RhdGljIHZvaWQKK21hcnNoYWxfVk9JRF9fTUlOSU9CSkVDVCAoR0Nsb3N1cmUgKiBjbG9zdXJlLCBHVmFsdWUgKiByZXR1cm5fdmFsdWUsCisgICAgZ3VpbnQgbl9wYXJhbV92YWx1ZXMsIGNvbnN0IEdWYWx1ZSAqIHBhcmFtX3ZhbHVlcywgZ3BvaW50ZXIgaW52b2NhdGlvbl9oaW50LAorICAgIGdwb2ludGVyIG1hcnNoYWxfZGF0YSkKK3sKKyAgdHlwZWRlZiB2b2lkICgqbWFyc2hhbGZ1bmNfVk9JRF9fTUlOSU9CSkVDVCkgKGdwb2ludGVyIG9iaiwgZ3BvaW50ZXIgYXJnMSwKKyAgICAgIGdwb2ludGVyIGRhdGEyKTsKKyAgcmVnaXN0ZXIgbWFyc2hhbGZ1bmNfVk9JRF9fTUlOSU9CSkVDVCBjYWxsYmFjazsKKyAgcmVnaXN0ZXIgR0NDbG9zdXJlICpjYyA9IChHQ0Nsb3N1cmUgKikgY2xvc3VyZTsKKyAgcmVnaXN0ZXIgZ3BvaW50ZXIgZGF0YTEsIGRhdGEyOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKG5fcGFyYW1fdmFsdWVzID09IDIpOworCisgIGlmIChHX0NDTE9TVVJFX1NXQVBfREFUQSAoY2xvc3VyZSkpIHsKKyAgICBkYXRhMSA9IGNsb3N1cmUtPmRhdGE7CisgICAgZGF0YTIgPSBnX3ZhbHVlX3BlZWtfcG9pbnRlciAocGFyYW1fdmFsdWVzICsgMCk7CisgIH0gZWxzZSB7CisgICAgZGF0YTEgPSBnX3ZhbHVlX3BlZWtfcG9pbnRlciAocGFyYW1fdmFsdWVzICsgMCk7CisgICAgZGF0YTIgPSBjbG9zdXJlLT5kYXRhOworICB9CisgIGNhbGxiYWNrID0KKyAgICAgIChtYXJzaGFsZnVuY19WT0lEX19NSU5JT0JKRUNUKSAobWFyc2hhbF9kYXRhID8gbWFyc2hhbF9kYXRhIDoKKyAgICAgIGNjLT5jYWxsYmFjayk7CisKKyAgY2FsbGJhY2sgKGRhdGExLCBnX3ZhbHVlX2dldF9ib3hlZCAocGFyYW1fdmFsdWVzICsgMSksIGRhdGEyKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9pZGVudGl0eV9jbGFzc19pbml0IChHc3RJZGVudGl0eUNsYXNzICoga2xhc3MpCit7CisgIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKKyAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOworICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKmdzdGJhc2V0cmFuc19jbGFzczsKKworICBnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKKyAgZ3N0ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7CisgIGdzdGJhc2V0cmFuc19jbGFzcyA9IEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyAoa2xhc3MpOworCisgIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9pZGVudGl0eV9zZXRfcHJvcGVydHk7CisgIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9pZGVudGl0eV9nZXRfcHJvcGVydHk7CisKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TTEVFUF9USU1FLAorICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJzbGVlcC10aW1lIiwgIlNsZWVwIHRpbWUiLAorICAgICAgICAgICJNaWNyb3NlY29uZHMgdG8gc2xlZXAgYmV0d2VlbiBwcm9jZXNzaW5nIiwgMCwgR19NQVhVSU5ULAorICAgICAgICAgIERFRkFVTFRfU0xFRVBfVElNRSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRVJST1JfQUZURVIsCisgICAgICBnX3BhcmFtX3NwZWNfaW50ICgiZXJyb3ItYWZ0ZXIiLCAiRXJyb3IgQWZ0ZXIiLCAiRXJyb3IgYWZ0ZXIgTiBidWZmZXJzIiwKKyAgICAgICAgICBHX01JTklOVCwgR19NQVhJTlQsIERFRkFVTFRfRVJST1JfQUZURVIsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRFJPUF9QUk9CQUJJTElUWSwKKyAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCAoImRyb3AtcHJvYmFiaWxpdHkiLCAiRHJvcCBQcm9iYWJpbGl0eSIsCisgICAgICAgICAgIlRoZSBQcm9iYWJpbGl0eSBhIGJ1ZmZlciBpcyBkcm9wcGVkIiwgMC4wLCAxLjAsCisgICAgICAgICAgREVGQVVMVF9EUk9QX1BST0JBQklMSVRZLAorICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0RBVEFSQVRFLAorICAgICAgZ19wYXJhbV9zcGVjX2ludCAoImRhdGFyYXRlIiwgIkRhdGFyYXRlIiwKKyAgICAgICAgICAiKFJlKXRpbWVzdGFtcHMgYnVmZmVycyB3aXRoIG51bWJlciBvZiBieXRlcyBwZXIgc2Vjb25kICgwID0gaW5hY3RpdmUpIiwKKyAgICAgICAgICAwLCBHX01BWElOVCwgREVGQVVMVF9EQVRBUkFURSwKKyAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TSUxFTlQsCisgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInNpbGVudCIsICJzaWxlbnQiLCAic2lsZW50IiwgREVGQVVMVF9TSUxFTlQsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU0lOR0xFX1NFR01FTlQsCisgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInNpbmdsZS1zZWdtZW50IiwgIlNpbmdsZSBTZWdtZW50IiwKKyAgICAgICAgICAiVGltZXN0YW1wIGJ1ZmZlcnMgYW5kIGVhdCBzZWdtZW50cyBzbyBhcyB0byBhcHBlYXIgYXMgb25lIHNlZ21lbnQiLAorICAgICAgICAgIERFRkFVTFRfU0lOR0xFX1NFR01FTlQsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworICBwc3BlY19sYXN0X21lc3NhZ2UgPSBnX3BhcmFtX3NwZWNfc3RyaW5nICgibGFzdC1tZXNzYWdlIiwgImxhc3QtbWVzc2FnZSIsCisgICAgICAibGFzdC1tZXNzYWdlIiwgTlVMTCwgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpOworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0xBU1RfTUVTU0FHRSwKKyAgICAgIHBzcGVjX2xhc3RfbWVzc2FnZSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRFVNUCwKKyAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiZHVtcCIsICJEdW1wIiwgIkR1bXAgYnVmZmVyIGNvbnRlbnRzIHRvIHN0ZG91dCIsCisgICAgICAgICAgREVGQVVMVF9EVU1QLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TWU5DLAorICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJzeW5jIiwgIlN5bmNocm9uaXplIiwKKyAgICAgICAgICAiU3luY2hyb25pemUgdG8gcGlwZWxpbmUgY2xvY2siLCBERUZBVUxUX1NZTkMsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ0hFQ0tfUEVSRkVDVCwKKyAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiY2hlY2stcGVyZmVjdCIsICJDaGVjayBGb3IgUGVyZmVjdCBTdHJlYW0iLAorICAgICAgICAgICJWZXJpZnkgdGhhdCB0aGUgc3RyZWFtIGlzIHRpbWUtIGFuZCBkYXRhLWNvbnRpZ3VvdXMuICIKKyAgICAgICAgICAiVGhpcyBvbmx5IGxvZ3MgaW4gdGhlIGRlYnVnIGxvZy4gIFRoaXMgd2lsbCBiZSBkZXByZWNhdGVkIGluIGZhdm9yICIKKyAgICAgICAgICAib2YgdGhlIGNoZWNrLWltcGVyZmVjdC10aW1lc3RhbXAvb2Zmc2V0IHByb3BlcnRpZXMuIiwKKyAgICAgICAgICBERUZBVUxUX0NIRUNLX1BFUkZFQ1QsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLAorICAgICAgUFJPUF9DSEVDS19JTVBFUkZFQ1RfVElNRVNUQU1QLAorICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJjaGVjay1pbXBlcmZlY3QtdGltZXN0YW1wIiwKKyAgICAgICAgICAiQ2hlY2sgZm9yIGRpc2NvbnRpZ3VvdXMgdGltZXN0YW1wcyIsCisgICAgICAgICAgIlNlbmQgZWxlbWVudCBtZXNzYWdlcyBpZiB0aW1lc3RhbXBzIGFuZCBkdXJhdGlvbnMgZG8gbm90IG1hdGNoIHVwIiwKKyAgICAgICAgICBERUZBVUxUX0NIRUNLX0lNUEVSRkVDVF9USU1FU1RBTVAsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ0hFQ0tfSU1QRVJGRUNUX09GRlNFVCwKKyAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiY2hlY2staW1wZXJmZWN0LW9mZnNldCIsCisgICAgICAgICAgIkNoZWNrIGZvciBkaXNjb250aWd1b3VzIG9mZnNldCIsCisgICAgICAgICAgIlNlbmQgZWxlbWVudCBtZXNzYWdlcyBpZiBvZmZzZXQgYW5kIG9mZnNldF9lbmQgZG8gbm90IG1hdGNoIHVwIiwKKyAgICAgICAgICBERUZBVUxUX0NIRUNLX0lNUEVSRkVDVF9PRkZTRVQsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisKKyAgLyoqCisgICAqIEdzdElkZW50aXR5OnNpZ25hbC1oYW5kb2ZmcworICAgKgorICAgKiBJZiBzZXQgdG8gI1RSVUUsIHRoZSBpZGVudGl0eSB3aWxsIGVtaXQgYSBoYW5kb2ZmIHNpZ25hbCB3aGVuIGhhbmRsaW5nIGEgYnVmZmVyLgorICAgKiBXaGVuIHNldCB0byAjRkFMU0UsIG5vIHNpZ25hbCB3aWxsIGJlIGVtaXRlZCwgd2hpY2ggbWlnaHQgaW1wcm92ZSBwZXJmb3JtYW5jZS4KKyAgICoKKyAgICogU2luY2U6IDAuMTAuMTYKKyAgICovCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU0lHTkFMX0hBTkRPRkZTLAorICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJzaWduYWwtaGFuZG9mZnMiLAorICAgICAgICAgICJTaWduYWwgaGFuZG9mZnMiLCAiU2VuZCBhIHNpZ25hbCBiZWZvcmUgcHVzaGluZyB0aGUgYnVmZmVyIiwKKyAgICAgICAgICBERUZBVUxUX1NJR05BTF9IQU5ET0ZGUywgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisKKyAgLyoqCisgICAqIEdzdElkZW50aXR5OjpoYW5kb2ZmOgorICAgKiBAaWRlbnRpdHk6IHRoZSBpZGVudGl0eSBpbnN0YW5jZQorICAgKiBAYnVmZmVyOiB0aGUgYnVmZmVyIHRoYXQganVzdCBoYXMgYmVlbiByZWNlaXZlZAorICAgKiBAcGFkOiB0aGUgcGFkIHRoYXQgcmVjZWl2ZWQgaXQKKyAgICoKKyAgICogVGhpcyBzaWduYWwgZ2V0cyBlbWl0dGVkIGJlZm9yZSBwYXNzaW5nIHRoZSBidWZmZXIgZG93bnN0cmVhbS4KKyAgICovCisgIGdzdF9pZGVudGl0eV9zaWduYWxzW1NJR05BTF9IQU5ET0ZGXSA9CisgICAgICBnX3NpZ25hbF9uZXcgKCJoYW5kb2ZmIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICBHX1NUUlVDVF9PRkZTRVQgKEdzdElkZW50aXR5Q2xhc3MsIGhhbmRvZmYpLCBOVUxMLCBOVUxMLAorICAgICAgbWFyc2hhbF9WT0lEX19NSU5JT0JKRUNULCBHX1RZUEVfTk9ORSwgMSwgR1NUX1RZUEVfQlVGRkVSKTsKKworICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9pZGVudGl0eV9maW5hbGl6ZTsKKworICBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlsc19zaW1wbGUgKGdzdGVsZW1lbnRfY2xhc3MsCisgICAgICAiSWRlbnRpdHkiLAorICAgICAgIkdlbmVyaWMiLAorICAgICAgIlBhc3MgZGF0YSB3aXRob3V0IG1vZGlmaWNhdGlvbiIsICJFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PiIpOworICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAorICAgICAgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0ICgmc3JjdGVtcGxhdGUpKTsKKyAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKKyAgICAgIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoJnNpbmt0ZW1wbGF0ZSkpOworCisgIGdzdGJhc2V0cmFuc19jbGFzcy0+c2lua19ldmVudCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfaWRlbnRpdHlfc2lua19ldmVudCk7CisgIGdzdGJhc2V0cmFuc19jbGFzcy0+dHJhbnNmb3JtX2lwID0KKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfaWRlbnRpdHlfdHJhbnNmb3JtX2lwKTsKKyAgZ3N0YmFzZXRyYW5zX2NsYXNzLT5wcmVwYXJlX291dHB1dF9idWZmZXIgPQorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9pZGVudGl0eV9wcmVwYXJlX291dHB1dF9idWZmZXIpOworICBnc3RiYXNldHJhbnNfY2xhc3MtPnN0YXJ0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9pZGVudGl0eV9zdGFydCk7CisgIGdzdGJhc2V0cmFuc19jbGFzcy0+c3RvcCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfaWRlbnRpdHlfc3RvcCk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfaWRlbnRpdHlfaW5pdCAoR3N0SWRlbnRpdHkgKiBpZGVudGl0eSkKK3sKKyAgaWRlbnRpdHktPnNsZWVwX3RpbWUgPSBERUZBVUxUX1NMRUVQX1RJTUU7CisgIGlkZW50aXR5LT5lcnJvcl9hZnRlciA9IERFRkFVTFRfRVJST1JfQUZURVI7CisgIGlkZW50aXR5LT5kcm9wX3Byb2JhYmlsaXR5ID0gREVGQVVMVF9EUk9QX1BST0JBQklMSVRZOworICBpZGVudGl0eS0+ZGF0YXJhdGUgPSBERUZBVUxUX0RBVEFSQVRFOworICBpZGVudGl0eS0+c2lsZW50ID0gREVGQVVMVF9TSUxFTlQ7CisgIGlkZW50aXR5LT5zaW5nbGVfc2VnbWVudCA9IERFRkFVTFRfU0lOR0xFX1NFR01FTlQ7CisgIGlkZW50aXR5LT5zeW5jID0gREVGQVVMVF9TWU5DOworICBpZGVudGl0eS0+Y2hlY2tfcGVyZmVjdCA9IERFRkFVTFRfQ0hFQ0tfUEVSRkVDVDsKKyAgaWRlbnRpdHktPmNoZWNrX2ltcGVyZmVjdF90aW1lc3RhbXAgPSBERUZBVUxUX0NIRUNLX0lNUEVSRkVDVF9USU1FU1RBTVA7CisgIGlkZW50aXR5LT5jaGVja19pbXBlcmZlY3Rfb2Zmc2V0ID0gREVGQVVMVF9DSEVDS19JTVBFUkZFQ1RfT0ZGU0VUOworICBpZGVudGl0eS0+ZHVtcCA9IERFRkFVTFRfRFVNUDsKKyAgaWRlbnRpdHktPmxhc3RfbWVzc2FnZSA9IE5VTEw7CisgIGlkZW50aXR5LT5zaWduYWxfaGFuZG9mZnMgPSBERUZBVUxUX1NJR05BTF9IQU5ET0ZGUzsKKworI2lmICFHTElCX0NIRUNLX1ZFUlNJT04oMiwyNiwwKQorICBnX3N0YXRpY19yZWNfbXV0ZXhfaW5pdCAoJmlkZW50aXR5LT5ub3RpZnlfbG9jayk7CisjZW5kaWYKKworICBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2dhcF9hd2FyZSAoR1NUX0JBU0VfVFJBTlNGT1JNX0NBU1QgKGlkZW50aXR5KSwgVFJVRSk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfaWRlbnRpdHlfbm90aWZ5X2xhc3RfbWVzc2FnZSAoR3N0SWRlbnRpdHkgKiBpZGVudGl0eSkKK3sKKyAgLyogRklYTUU6IHRoaXMgaGFja3MgYXJvdW5kIGEgYnVnIGluIEdMaWIvR09iamVjdDogZG9pbmcgY29uY3VycmVudAorICAgKiBnX29iamVjdF9ub3RpZnkoKSBvbiB0aGUgc2FtZSBvYmplY3QgbWlnaHQgbGVhZCB0byBjcmFzaGVzLCBzZWUKKyAgICogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDIwI2M2MCBhbmQgZm9sbG93LXVwcy4KKyAgICogU28gd2UgcmVhbGx5IGRvbid0IHdhbnQgdG8gZG8gYSBnX29iamVjdF9ub3RpZnkoKSBoZXJlIGZvciBvdXQtb2YtYmFuZAorICAgKiBldmVudHMgd2l0aCB0aGUgc3RyZWFtaW5nIHRocmVhZCBwb3NzaWJseSBhbHNvIGRvaW5nIGEgZ19vYmplY3Rfbm90aWZ5KCkKKyAgICogZm9yIGFuIGluLWJhbmQgYnVmZmVyIG9yIGV2ZW50LiBUaGlzIGlzIGZpeGVkIGluIEdMaWIgPj0gMi4yNiAqLworI2lmICFHTElCX0NIRUNLX1ZFUlNJT04oMiwyNiwwKQorICBnX3N0YXRpY19yZWNfbXV0ZXhfbG9jayAoJmlkZW50aXR5LT5ub3RpZnlfbG9jayk7CisgIGdfb2JqZWN0X25vdGlmeSAoKEdPYmplY3QgKikgaWRlbnRpdHksICJsYXN0LW1lc3NhZ2UiKTsKKyAgZ19zdGF0aWNfcmVjX211dGV4X3VubG9jayAoJmlkZW50aXR5LT5ub3RpZnlfbG9jayk7CisjZWxzZQorICBnX29iamVjdF9ub3RpZnlfYnlfcHNwZWMgKChHT2JqZWN0ICopIGlkZW50aXR5LCBwc3BlY19sYXN0X21lc3NhZ2UpOworI2VuZGlmCit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2lkZW50aXR5X3NpbmtfZXZlbnQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0RXZlbnQgKiBldmVudCkKK3sKKyAgR3N0SWRlbnRpdHkgKmlkZW50aXR5OworICBnYm9vbGVhbiByZXQgPSBUUlVFOworCisgIGlkZW50aXR5ID0gR1NUX0lERU5USVRZICh0cmFucyk7CisKKyAgaWYgKCFpZGVudGl0eS0+c2lsZW50KSB7CisgICAgY29uc3QgR3N0U3RydWN0dXJlICpzOworICAgIGdjaGFyICpzc3RyOworCisgICAgR1NUX09CSkVDVF9MT0NLIChpZGVudGl0eSk7CisgICAgZ19mcmVlIChpZGVudGl0eS0+bGFzdF9tZXNzYWdlKTsKKworICAgIGlmICgocyA9IGdzdF9ldmVudF9nZXRfc3RydWN0dXJlIChldmVudCkpKQorICAgICAgc3N0ciA9IGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChzKTsKKyAgICBlbHNlCisgICAgICBzc3RyID0gZ19zdHJkdXAgKCIiKTsKKworICAgIGlkZW50aXR5LT5sYXN0X21lc3NhZ2UgPQorICAgICAgICBnX3N0cmR1cF9wcmludGYgKCJldmVudCAgICoqKioqKiogKCVzOiVzKSBFICh0eXBlOiAlZCwgJXMpICVwIiwKKyAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FICh0cmFucy0+c2lua3BhZCksIEdTVF9FVkVOVF9UWVBFIChldmVudCksIHNzdHIsCisgICAgICAgIGV2ZW50KTsKKyAgICBnX2ZyZWUgKHNzdHIpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChpZGVudGl0eSk7CisKKyAgICBnc3RfaWRlbnRpdHlfbm90aWZ5X2xhc3RfbWVzc2FnZSAoaWRlbnRpdHkpOworICB9CisKKyAgaWYgKGlkZW50aXR5LT5zaW5nbGVfc2VnbWVudCAmJiAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfU0VHTUVOVCkpIHsKKyAgICBpZiAodHJhbnMtPmhhdmVfc2VnbWVudCA9PSBGQUxTRSkgeworICAgICAgR3N0RXZlbnQgKm5ld3M7CisgICAgICBHc3RTZWdtZW50IHNlZ21lbnQ7CisKKyAgICAgIGdzdF9ldmVudF9jb3B5X3NlZ21lbnQgKGV2ZW50LCAmc2VnbWVudCk7CisgICAgICBnc3RfZXZlbnRfY29weV9zZWdtZW50IChldmVudCwgJnRyYW5zLT5zZWdtZW50KTsKKyAgICAgIHRyYW5zLT5oYXZlX3NlZ21lbnQgPSBUUlVFOworCisgICAgICAvKiBUaGlzIGlzIHRoZSBmaXJzdCBzZWdtZW50LCBzZW5kIG91dCBhICgwLCAtMSkgc2VnbWVudCAqLworICAgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIHNlZ21lbnQuZm9ybWF0KTsKKyAgICAgIG5ld3MgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KTsKKworICAgICAgZ3N0X3BhZF9ldmVudF9kZWZhdWx0ICh0cmFucy0+c2lua3BhZCwgbmV3cyk7CisgICAgfQorICB9CisKKyAgLyogUmVzZXQgcHJldmlvdXMgdGltZXN0YW1wLCBkdXJhdGlvbiBhbmQgb2Zmc2V0cyBvbiBORVdTRUdNRU5UCisgICAqIHRvIHByZXZlbnQgZmFsc2Ugd2FybmluZ3Mgd2hlbiBjaGVja2luZyBmb3IgcGVyZmVjdCBzdHJlYW1zICovCisgIGlmIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9TRUdNRU5UKSB7CisgICAgaWRlbnRpdHktPnByZXZfdGltZXN0YW1wID0gaWRlbnRpdHktPnByZXZfZHVyYXRpb24gPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICAgIGlkZW50aXR5LT5wcmV2X29mZnNldCA9IGlkZW50aXR5LT5wcmV2X29mZnNldF9lbmQgPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FOworICB9CisKKworICBpZiAoaWRlbnRpdHktPnNpbmdsZV9zZWdtZW50ICYmIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9TRUdNRU5UKSkgeworICAgIC8qIGVhdCB1cCBzZWdtZW50cyAqLworICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworICAgIHJldCA9IFRSVUU7CisgIH0gZWxzZSB7CisgICAgcmV0ID0gR1NUX0JBU0VfVFJBTlNGT1JNX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5zaW5rX2V2ZW50ICh0cmFucywgZXZlbnQpOworICB9CisKKyAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIEdzdEZsb3dSZXR1cm4KK2dzdF9pZGVudGl0eV9wcmVwYXJlX291dHB1dF9idWZmZXIgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKKyAgICBHc3RCdWZmZXIgKiBpbl9idWYsIEdzdEJ1ZmZlciAqKiBvdXRfYnVmKQoreworICBHc3RJZGVudGl0eSAqaWRlbnRpdHkgPSBHU1RfSURFTlRJVFkgKHRyYW5zKTsKKworICAvKiBvbmx5IGJvdGhlciBpZiB3ZSBtYXkgaGF2ZSB0byBhbHRlciBtZXRhZGF0YSAqLworICBpZiAoaWRlbnRpdHktPmRhdGFyYXRlID4gMCB8fCBpZGVudGl0eS0+c2luZ2xlX3NlZ21lbnQpIHsKKyAgICBpZiAoZ3N0X2J1ZmZlcl9pc193cml0YWJsZSAoaW5fYnVmKSkKKyAgICAgIC8qIHJldXNlICovCisgICAgICAqb3V0X2J1ZiA9IGluX2J1ZjsKKyAgICBlbHNlIHsKKyAgICAgIC8qIGNvcHkgKi8KKyAgICAgICpvdXRfYnVmID0gZ3N0X2J1ZmZlcl9jb3B5IChpbl9idWYpOworICAgIH0KKyAgfSBlbHNlCisgICAgKm91dF9idWYgPSBpbl9idWY7CisKKyAgcmV0dXJuIEdTVF9GTE9XX09LOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2lkZW50aXR5X2NoZWNrX3BlcmZlY3QgKEdzdElkZW50aXR5ICogaWRlbnRpdHksIEdzdEJ1ZmZlciAqIGJ1ZikKK3sKKyAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKKworICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKTsKKworICAvKiBzZWUgaWYgd2UgbmVlZCB0byBkbyBwZXJmZWN0IHN0cmVhbSBjaGVja2luZyAqLworICAvKiBpbnZhbGlkIHRpbWVzdGFtcCBkcm9wcyB1cyBvdXQgb2YgY2hlY2suICBGSVhNRTogbWF5YmUgd2FybiA/ICovCisgIGlmICh0aW1lc3RhbXAgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkgeworICAgIC8qIGNoZWNrIGlmIHdlIGhhZCBhIHByZXZpb3VzIGJ1ZmZlciB0byBjb21wYXJlIHRvICovCisgICAgaWYgKGlkZW50aXR5LT5wcmV2X3RpbWVzdGFtcCAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FICYmCisgICAgICAgIGlkZW50aXR5LT5wcmV2X2R1cmF0aW9uICE9IEdTVF9DTE9DS19USU1FX05PTkUpIHsKKyAgICAgIGd1aW50NjQgb2Zmc2V0LCB0X2V4cGVjdGVkOworICAgICAgZ2ludDY0IGR0OworCisgICAgICB0X2V4cGVjdGVkID0gaWRlbnRpdHktPnByZXZfdGltZXN0YW1wICsgaWRlbnRpdHktPnByZXZfZHVyYXRpb247CisgICAgICBkdCA9IHRpbWVzdGFtcCAtIHRfZXhwZWN0ZWQ7CisgICAgICBpZiAoZHQgIT0gMCkgeworICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGlkZW50aXR5LAorICAgICAgICAgICAgIkJ1ZmZlciBub3QgdGltZS1jb250aWd1b3VzIHdpdGggcHJldmlvdXMgb25lOiAiICJwcmV2IHRzICUiCisgICAgICAgICAgICBHU1RfVElNRV9GT1JNQVQgIiwgcHJldiBkdXIgJSIgR1NUX1RJTUVfRk9STUFUICIsIG5ldyB0cyAlIgorICAgICAgICAgICAgR1NUX1RJTUVfRk9STUFUICIgKGV4cGVjdGVkIHRzICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBkZWx0YT0lYyUiCisgICAgICAgICAgICBHU1RfVElNRV9GT1JNQVQgIikiLCBHU1RfVElNRV9BUkdTIChpZGVudGl0eS0+cHJldl90aW1lc3RhbXApLAorICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAoaWRlbnRpdHktPnByZXZfZHVyYXRpb24pLCBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXApLAorICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAodF9leHBlY3RlZCksIChkdCA8IDApID8gJy0nIDogJysnLAorICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAoKGR0IDwgMCkgPyAoR3N0Q2xvY2tUaW1lKSAoLWR0KSA6IGR0KSk7CisgICAgICB9CisKKyAgICAgIG9mZnNldCA9IEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpOworICAgICAgaWYgKGlkZW50aXR5LT5wcmV2X29mZnNldF9lbmQgIT0gb2Zmc2V0ICYmCisgICAgICAgICAgaWRlbnRpdHktPnByZXZfb2Zmc2V0X2VuZCAhPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FICYmCisgICAgICAgICAgb2Zmc2V0ICE9IEdTVF9CVUZGRVJfT0ZGU0VUX05PTkUpIHsKKyAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChpZGVudGl0eSwKKyAgICAgICAgICAgICJCdWZmZXIgbm90IGRhdGEtY29udGlndW91cyB3aXRoIHByZXZpb3VzIG9uZTogIgorICAgICAgICAgICAgInByZXYgb2Zmc2V0X2VuZCAlIiBHX0dJTlQ2NF9GT1JNQVQgIiwgbmV3IG9mZnNldCAlIgorICAgICAgICAgICAgR19HSU5UNjRfRk9STUFULCBpZGVudGl0eS0+cHJldl9vZmZzZXRfZW5kLCBvZmZzZXQpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBHU1RfREVCVUdfT0JKRUNUIChpZGVudGl0eSwgImNhbid0IGNoZWNrIHRpbWUtY29udGlndWl0eSwgbm8gdGltZXN0YW1wICIKKyAgICAgICAgICAiYW5kL29yIGR1cmF0aW9uIHdlcmUgc2V0IG9uIHByZXZpb3VzIGJ1ZmZlciIpOworICAgIH0KKyAgfQorfQorCitzdGF0aWMgdm9pZAorZ3N0X2lkZW50aXR5X2NoZWNrX2ltcGVyZmVjdF90aW1lc3RhbXAgKEdzdElkZW50aXR5ICogaWRlbnRpdHksIEdzdEJ1ZmZlciAqIGJ1ZikKK3sKKyAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpOworCisgIC8qIGludmFsaWQgdGltZXN0YW1wIGRyb3BzIHVzIG91dCBvZiBjaGVjay4gIEZJWE1FOiBtYXliZSB3YXJuID8gKi8KKyAgaWYgKHRpbWVzdGFtcCAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7CisgICAgLyogY2hlY2sgaWYgd2UgaGFkIGEgcHJldmlvdXMgYnVmZmVyIHRvIGNvbXBhcmUgdG8gKi8KKyAgICBpZiAoaWRlbnRpdHktPnByZXZfdGltZXN0YW1wICE9IEdTVF9DTE9DS19USU1FX05PTkUgJiYKKyAgICAgICAgaWRlbnRpdHktPnByZXZfZHVyYXRpb24gIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkgeworICAgICAgR3N0Q2xvY2tUaW1lIHRfZXhwZWN0ZWQ7CisgICAgICBHc3RDbG9ja1RpbWVEaWZmIGR0OworCisgICAgICB0X2V4cGVjdGVkID0gaWRlbnRpdHktPnByZXZfdGltZXN0YW1wICsgaWRlbnRpdHktPnByZXZfZHVyYXRpb247CisgICAgICBkdCA9IEdTVF9DTE9DS19ESUZGICh0X2V4cGVjdGVkLCB0aW1lc3RhbXApOworICAgICAgaWYgKGR0ICE9IDApIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogImltcGVyZmVjdC10aW1lc3RhbXAiIGJ1cyBtZXNzYWdlOgorICAgICAgICAgKiBAaWRlbnRpdHk6ICAgICAgICB0aGUgaWRlbnRpdHkgaW5zdGFuY2UKKyAgICAgICAgICogQHByZXYtdGltZXN0YW1wOiAgdGhlIHByZXZpb3VzIGJ1ZmZlciB0aW1lc3RhbXAKKyAgICAgICAgICogQHByZXYtZHVyYXRpb246ICAgdGhlIHByZXZpb3VzIGJ1ZmZlciBkdXJhdGlvbgorICAgICAgICAgKiBAcHJldi1vZmZzZXQ6ICAgICB0aGUgcHJldmlvdXMgYnVmZmVyIG9mZnNldAorICAgICAgICAgKiBAcHJldi1vZmZzZXQtZW5kOiB0aGUgcHJldmlvdXMgYnVmZmVyIG9mZnNldCBlbmQKKyAgICAgICAgICogQGN1ci10aW1lc3RhbXA6ICAgdGhlIGN1cnJlbnQgYnVmZmVyIHRpbWVzdGFtcAorICAgICAgICAgKiBAY3VyLWR1cmF0aW9uOiAgICB0aGUgY3VycmVudCBidWZmZXIgZHVyYXRpb24KKyAgICAgICAgICogQGN1ci1vZmZzZXQ6ICAgICAgdGhlIGN1cnJlbnQgYnVmZmVyIG9mZnNldAorICAgICAgICAgKiBAY3VyLW9mZnNldC1lbmQ6ICB0aGUgY3VycmVudCBidWZmZXIgb2Zmc2V0IGVuZAorICAgICAgICAgKgorICAgICAgICAgKiBUaGlzIGJ1cyBtZXNzYWdlIGdldHMgZW1pdHRlZCBpZiB0aGUgY2hlY2staW1wZXJmZWN0LXRpbWVzdGFtcAorICAgICAgICAgKiBwcm9wZXJ0eSBpcyBzZXQgYW5kIHRoZXJlIGlzIGEgZ2FwIGluIHRpbWUgYmV0d2VlbiB0aGUKKyAgICAgICAgICogbGFzdCBidWZmZXIgYW5kIHRoZSBuZXdseSByZWNlaXZlZCBidWZmZXIuCisgICAgICAgICAqLworICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UIChpZGVudGl0eSksCisgICAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfZWxlbWVudCAoR1NUX09CSkVDVCAoaWRlbnRpdHkpLAorICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3ICgiaW1wZXJmZWN0LXRpbWVzdGFtcCIsCisgICAgICAgICAgICAgICAgICAgICJwcmV2LXRpbWVzdGFtcCIsIEdfVFlQRV9VSU5UNjQsCisgICAgICAgICAgICAgICAgICAgIGlkZW50aXR5LT5wcmV2X3RpbWVzdGFtcCwgInByZXYtZHVyYXRpb24iLCBHX1RZUEVfVUlOVDY0LAorICAgICAgICAgICAgICAgICAgICBpZGVudGl0eS0+cHJldl9kdXJhdGlvbiwgInByZXYtb2Zmc2V0IiwgR19UWVBFX1VJTlQ2NCwKKyAgICAgICAgICAgICAgICAgICAgaWRlbnRpdHktPnByZXZfb2Zmc2V0LCAicHJldi1vZmZzZXQtZW5kIiwgR19UWVBFX1VJTlQ2NCwKKyAgICAgICAgICAgICAgICAgICAgaWRlbnRpdHktPnByZXZfb2Zmc2V0X2VuZCwgImN1ci10aW1lc3RhbXAiLCBHX1RZUEVfVUlOVDY0LAorICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAsICJjdXItZHVyYXRpb24iLCBHX1RZUEVfVUlOVDY0LAorICAgICAgICAgICAgICAgICAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpLCAiY3VyLW9mZnNldCIsIEdfVFlQRV9VSU5UNjQsCisgICAgICAgICAgICAgICAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpLCAiY3VyLW9mZnNldC1lbmQiLCBHX1RZUEVfVUlOVDY0LAorICAgICAgICAgICAgICAgICAgICBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKGJ1ZiksIE5VTEwpKSk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGlkZW50aXR5LCAiY2FuJ3QgY2hlY2sgZGF0YS1jb250aWd1aXR5LCBubyAiCisgICAgICAgICAgIm9mZnNldF9lbmQgd2FzIHNldCBvbiBwcmV2aW91cyBidWZmZXIiKTsKKyAgICB9CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9pZGVudGl0eV9jaGVja19pbXBlcmZlY3Rfb2Zmc2V0IChHc3RJZGVudGl0eSAqIGlkZW50aXR5LCBHc3RCdWZmZXIgKiBidWYpCit7CisgIGd1aW50NjQgb2Zmc2V0OworCisgIG9mZnNldCA9IEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpOworCisgIGlmIChpZGVudGl0eS0+cHJldl9vZmZzZXRfZW5kICE9IG9mZnNldCAmJgorICAgICAgaWRlbnRpdHktPnByZXZfb2Zmc2V0X2VuZCAhPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FICYmCisgICAgICBvZmZzZXQgIT0gR1NUX0JVRkZFUl9PRkZTRVRfTk9ORSkgeworICAgIC8qCisgICAgICogImltcGVyZmVjdC1vZmZzZXQiIGJ1cyBtZXNzYWdlOgorICAgICAqIEBpZGVudGl0eTogICAgICAgIHRoZSBpZGVudGl0eSBpbnN0YW5jZQorICAgICAqIEBwcmV2LXRpbWVzdGFtcDogIHRoZSBwcmV2aW91cyBidWZmZXIgdGltZXN0YW1wCisgICAgICogQHByZXYtZHVyYXRpb246ICAgdGhlIHByZXZpb3VzIGJ1ZmZlciBkdXJhdGlvbgorICAgICAqIEBwcmV2LW9mZnNldDogICAgIHRoZSBwcmV2aW91cyBidWZmZXIgb2Zmc2V0CisgICAgICogQHByZXYtb2Zmc2V0LWVuZDogdGhlIHByZXZpb3VzIGJ1ZmZlciBvZmZzZXQgZW5kCisgICAgICogQGN1ci10aW1lc3RhbXA6ICAgdGhlIGN1cnJlbnQgYnVmZmVyIHRpbWVzdGFtcAorICAgICAqIEBjdXItZHVyYXRpb246ICAgIHRoZSBjdXJyZW50IGJ1ZmZlciBkdXJhdGlvbgorICAgICAqIEBjdXItb2Zmc2V0OiAgICAgIHRoZSBjdXJyZW50IGJ1ZmZlciBvZmZzZXQKKyAgICAgKiBAY3VyLW9mZnNldC1lbmQ6ICB0aGUgY3VycmVudCBidWZmZXIgb2Zmc2V0IGVuZAorICAgICAqCisgICAgICogVGhpcyBidXMgbWVzc2FnZSBnZXRzIGVtaXR0ZWQgaWYgdGhlIGNoZWNrLWltcGVyZmVjdC1vZmZzZXQKKyAgICAgKiBwcm9wZXJ0eSBpcyBzZXQgYW5kIHRoZXJlIGlzIGEgZ2FwIGluIG9mZnNldHMgYmV0d2VlbiB0aGUKKyAgICAgKiBsYXN0IGJ1ZmZlciBhbmQgdGhlIG5ld2x5IHJlY2VpdmVkIGJ1ZmZlci4KKyAgICAgKi8KKyAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UIChpZGVudGl0eSksCisgICAgICAgIGdzdF9tZXNzYWdlX25ld19lbGVtZW50IChHU1RfT0JKRUNUIChpZGVudGl0eSksCisgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX25ldyAoImltcGVyZmVjdC1vZmZzZXQiLCAicHJldi10aW1lc3RhbXAiLAorICAgICAgICAgICAgICAgIEdfVFlQRV9VSU5UNjQsIGlkZW50aXR5LT5wcmV2X3RpbWVzdGFtcCwgInByZXYtZHVyYXRpb24iLAorICAgICAgICAgICAgICAgIEdfVFlQRV9VSU5UNjQsIGlkZW50aXR5LT5wcmV2X2R1cmF0aW9uLCAicHJldi1vZmZzZXQiLAorICAgICAgICAgICAgICAgIEdfVFlQRV9VSU5UNjQsIGlkZW50aXR5LT5wcmV2X29mZnNldCwgInByZXYtb2Zmc2V0LWVuZCIsCisgICAgICAgICAgICAgICAgR19UWVBFX1VJTlQ2NCwgaWRlbnRpdHktPnByZXZfb2Zmc2V0X2VuZCwgImN1ci10aW1lc3RhbXAiLAorICAgICAgICAgICAgICAgIEdfVFlQRV9VSU5UNjQsIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpLCAiY3VyLWR1cmF0aW9uIiwKKyAgICAgICAgICAgICAgICBHX1RZUEVfVUlOVDY0LCBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpLCAiY3VyLW9mZnNldCIsCisgICAgICAgICAgICAgICAgR19UWVBFX1VJTlQ2NCwgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZiksICJjdXItb2Zmc2V0LWVuZCIsCisgICAgICAgICAgICAgICAgR19UWVBFX1VJTlQ2NCwgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChidWYpLCBOVUxMKSkpOworICB9IGVsc2UgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKGlkZW50aXR5LCAiY2FuJ3QgY2hlY2sgb2Zmc2V0IGNvbnRpZ3VpdHksIG5vIG9mZnNldCAiCisgICAgICAgICJhbmQvb3Igb2Zmc2V0X2VuZCB3ZXJlIHNldCBvbiBwcmV2aW91cyBidWZmZXIiKTsKKyAgfQorfQorCitzdGF0aWMgY29uc3QgZ2NoYXIgKgorcHJpbnRfcHJldHR5X3RpbWUgKGdjaGFyICogdHNfc3RyLCBnc2l6ZSB0c19zdHJfbGVuLCBHc3RDbG9ja1RpbWUgdHMpCit7CisgIGlmICh0cyA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKQorICAgIHJldHVybiAibm9uZSI7CisKKyAgZ19zbnByaW50ZiAodHNfc3RyLCB0c19zdHJfbGVuLCAiJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTICh0cykpOworICByZXR1cm4gdHNfc3RyOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2lkZW50aXR5X3VwZGF0ZV9sYXN0X21lc3NhZ2VfZm9yX2J1ZmZlciAoR3N0SWRlbnRpdHkgKiBpZGVudGl0eSwKKyAgICBjb25zdCBnY2hhciAqIGFjdGlvbiwgR3N0QnVmZmVyICogYnVmLCBnc2l6ZSBzaXplKQoreworICBnY2hhciB0c19zdHJbNjRdLCBkdXJfc3RyWzY0XTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKGlkZW50aXR5KTsKKworICBnX2ZyZWUgKGlkZW50aXR5LT5sYXN0X21lc3NhZ2UpOworICBpZGVudGl0eS0+bGFzdF9tZXNzYWdlID0gZ19zdHJkdXBfcHJpbnRmICgiJXMgICAqKioqKioqICglczolcylpICIKKyAgICAgICIoJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcywgdGltZXN0YW1wOiAlcywgZHVyYXRpb246ICVzLCBvZmZzZXQ6ICUiCisgICAgICBHX0dJTlQ2NF9GT1JNQVQgIiwgIiAib2Zmc2V0X2VuZDogJSAiIEdfR0lOVDY0X0ZPUk1BVCAiLCBmbGFnczogJWQpICVwIiwKKyAgICAgIGFjdGlvbiwgR1NUX0RFQlVHX1BBRF9OQU1FIChHU1RfQkFTRV9UUkFOU0ZPUk1fQ0FTVCAoaWRlbnRpdHkpLT5zaW5rcGFkKSwKKyAgICAgIHNpemUsIHByaW50X3ByZXR0eV90aW1lICh0c19zdHIsIHNpemVvZiAodHNfc3RyKSwKKyAgICAgICAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSksIHByaW50X3ByZXR0eV90aW1lIChkdXJfc3RyLAorICAgICAgICAgIHNpemVvZiAoZHVyX3N0ciksIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikpLCBHU1RfQlVGRkVSX09GRlNFVCAoYnVmKSwKKyAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoYnVmKSwgR1NUX0JVRkZFUl9GTEFHUyAoYnVmKSwgYnVmKTsKKworICBHU1RfT0JKRUNUX1VOTE9DSyAoaWRlbnRpdHkpOworCisgIGdzdF9pZGVudGl0eV9ub3RpZnlfbGFzdF9tZXNzYWdlIChpZGVudGl0eSk7Cit9CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuCitnc3RfaWRlbnRpdHlfdHJhbnNmb3JtX2lwIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdEJ1ZmZlciAqIGJ1ZikKK3sKKyAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKKyAgR3N0SWRlbnRpdHkgKmlkZW50aXR5ID0gR1NUX0lERU5USVRZICh0cmFucyk7CisgIEdzdENsb2NrVGltZSBydW50aW1lc3RhbXAgPSBHX0dJTlQ2NF9DT05TVEFOVCAoMCk7CisgIGd1aW50OCAqZGF0YTsKKyAgZ3NpemUgc2l6ZTsKKworICBkYXRhID0gZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJnNpemUsIE5VTEwsIEdTVF9NQVBfUkVBRCk7CisKKyAgaWYgKGlkZW50aXR5LT5jaGVja19wZXJmZWN0KQorICAgIGdzdF9pZGVudGl0eV9jaGVja19wZXJmZWN0IChpZGVudGl0eSwgYnVmKTsKKyAgaWYgKGlkZW50aXR5LT5jaGVja19pbXBlcmZlY3RfdGltZXN0YW1wKQorICAgIGdzdF9pZGVudGl0eV9jaGVja19pbXBlcmZlY3RfdGltZXN0YW1wIChpZGVudGl0eSwgYnVmKTsKKyAgaWYgKGlkZW50aXR5LT5jaGVja19pbXBlcmZlY3Rfb2Zmc2V0KQorICAgIGdzdF9pZGVudGl0eV9jaGVja19pbXBlcmZlY3Rfb2Zmc2V0IChpZGVudGl0eSwgYnVmKTsKKworICAvKiB1cGRhdGUgcHJldiB2YWx1ZXMgKi8KKyAgaWRlbnRpdHktPnByZXZfdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1Zik7CisgIGlkZW50aXR5LT5wcmV2X2R1cmF0aW9uID0gR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKTsKKyAgaWRlbnRpdHktPnByZXZfb2Zmc2V0X2VuZCA9IEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoYnVmKTsKKyAgaWRlbnRpdHktPnByZXZfb2Zmc2V0ID0gR1NUX0JVRkZFUl9PRkZTRVQgKGJ1Zik7CisKKyAgaWYgKGlkZW50aXR5LT5lcnJvcl9hZnRlciA+PSAwKSB7CisgICAgaWRlbnRpdHktPmVycm9yX2FmdGVyLS07CisgICAgaWYgKGlkZW50aXR5LT5lcnJvcl9hZnRlciA9PSAwKQorICAgICAgZ290byBlcnJvcl9hZnRlcjsKKyAgfQorCisgIGlmIChpZGVudGl0eS0+ZHJvcF9wcm9iYWJpbGl0eSA+IDAuMCkgeworICAgIGlmICgoZ2Zsb2F0KSAoMS4wICogcmFuZCAoKSAvIChSQU5EX01BWCkpIDwgaWRlbnRpdHktPmRyb3BfcHJvYmFiaWxpdHkpCisgICAgICBnb3RvIGRyb3BwZWQ7CisgIH0KKworICBpZiAoaWRlbnRpdHktPmR1bXApIHsKKyAgICBnc3RfdXRpbF9kdW1wX21lbSAoZGF0YSwgc2l6ZSk7CisgIH0KKworICBpZiAoIWlkZW50aXR5LT5zaWxlbnQpIHsKKyAgICBnc3RfaWRlbnRpdHlfdXBkYXRlX2xhc3RfbWVzc2FnZV9mb3JfYnVmZmVyIChpZGVudGl0eSwgImNoYWluIiwgYnVmLCBzaXplKTsKKyAgfQorCisgIGlmIChpZGVudGl0eS0+ZGF0YXJhdGUgPiAwKSB7CisgICAgR3N0Q2xvY2tUaW1lIHRpbWUgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChpZGVudGl0eS0+b2Zmc2V0LAorICAgICAgICBHU1RfU0VDT05ELCBpZGVudGl0eS0+ZGF0YXJhdGUpOworCisgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZikgPSB0aW1lOworICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikgPSBzaXplICogR1NUX1NFQ09ORCAvIGlkZW50aXR5LT5kYXRhcmF0ZTsKKyAgfQorCisgIGlmIChpZGVudGl0eS0+c2lnbmFsX2hhbmRvZmZzKQorICAgIGdfc2lnbmFsX2VtaXQgKGlkZW50aXR5LCBnc3RfaWRlbnRpdHlfc2lnbmFsc1tTSUdOQUxfSEFORE9GRl0sIDAsIGJ1Zik7CisKKyAgaWYgKHRyYW5zLT5zZWdtZW50LmZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpCisgICAgcnVudGltZXN0YW1wID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmdHJhbnMtPnNlZ21lbnQsCisgICAgICAgIEdTVF9GT1JNQVRfVElNRSwgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZikpOworCisgIGlmICgoaWRlbnRpdHktPnN5bmMpICYmICh0cmFucy0+c2VnbWVudC5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKSkgeworICAgIEdzdENsb2NrICpjbG9jazsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyAoaWRlbnRpdHkpOworICAgIGlmICgoY2xvY2sgPSBHU1RfRUxFTUVOVCAoaWRlbnRpdHkpLT5jbG9jaykpIHsKKyAgICAgIEdzdENsb2NrUmV0dXJuIGNyZXQ7CisgICAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wOworCisgICAgICB0aW1lc3RhbXAgPSBydW50aW1lc3RhbXAgKyBHU1RfRUxFTUVOVCAoaWRlbnRpdHkpLT5iYXNlX3RpbWU7CisKKyAgICAgIC8qIHNhdmUgaWQgaWYgd2UgbmVlZCB0byB1bmxvY2sgKi8KKyAgICAgIC8qIEZJWE1FOiBhY3R1YWxseSB1bmxvY2sgdGhpcyBzb21ld2hlcmUgaW4gdGhlIHN0YXRlIGNoYW5nZXMgKi8KKyAgICAgIGlkZW50aXR5LT5jbG9ja19pZCA9IGdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKGNsb2NrLCB0aW1lc3RhbXApOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGlkZW50aXR5KTsKKworICAgICAgY3JldCA9IGdzdF9jbG9ja19pZF93YWl0IChpZGVudGl0eS0+Y2xvY2tfaWQsIE5VTEwpOworCisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGlkZW50aXR5KTsKKyAgICAgIGlmIChpZGVudGl0eS0+Y2xvY2tfaWQpIHsKKyAgICAgICAgZ3N0X2Nsb2NrX2lkX3VucmVmIChpZGVudGl0eS0+Y2xvY2tfaWQpOworICAgICAgICBpZGVudGl0eS0+Y2xvY2tfaWQgPSBOVUxMOworICAgICAgfQorICAgICAgaWYgKGNyZXQgPT0gR1NUX0NMT0NLX1VOU0NIRURVTEVEKQorICAgICAgICByZXQgPSBHU1RfRkxPV19VTkVYUEVDVEVEOworICAgIH0KKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAoaWRlbnRpdHkpOworICB9CisKKyAgaWRlbnRpdHktPm9mZnNldCArPSBzaXplOworCisgIGlmIChpZGVudGl0eS0+c2xlZXBfdGltZSAmJiByZXQgPT0gR1NUX0ZMT1dfT0spCisgICAgZ191c2xlZXAgKGlkZW50aXR5LT5zbGVlcF90aW1lKTsKKworICBpZiAoaWRlbnRpdHktPnNpbmdsZV9zZWdtZW50ICYmICh0cmFucy0+c2VnbWVudC5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKQorICAgICAgJiYgKHJldCA9PSBHU1RfRkxPV19PSykpIHsKKyAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSA9IHJ1bnRpbWVzdGFtcDsKKyAgICBHU1RfQlVGRkVSX09GRlNFVCAoYnVmKSA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgICAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChidWYpID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgfQorCisgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgZGF0YSwgc2l6ZSk7CisKKyAgcmV0dXJuIHJldDsKKworICAvKiBFUlJPUlMgKi8KK2Vycm9yX2FmdGVyOgorICB7CisgICAgR1NUX0VMRU1FTlRfRVJST1IgKGlkZW50aXR5LCBDT1JFLCBGQUlMRUQsCisgICAgICAgIChfKCJGYWlsZWQgYWZ0ZXIgaXRlcmF0aW9ucyBhcyByZXF1ZXN0ZWQuIikpLCAoTlVMTCkpOworICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgZGF0YSwgc2l6ZSk7CisgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOworICB9Citkcm9wcGVkOgorICB7CisgICAgaWYgKCFpZGVudGl0eS0+c2lsZW50KSB7CisgICAgICBnc3RfaWRlbnRpdHlfdXBkYXRlX2xhc3RfbWVzc2FnZV9mb3JfYnVmZmVyIChpZGVudGl0eSwgImRyb3BwaW5nIiwgYnVmLAorICAgICAgICAgIHNpemUpOworICAgIH0KKyAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsIGRhdGEsIHNpemUpOworICAgIC8qIHJldHVybiBEUk9QUEVEIHRvIGJhc2V0cmFuc2Zvcm0uICovCisgICAgcmV0dXJuIEdTVF9CQVNFX1RSQU5TRk9STV9GTE9XX0RST1BQRUQ7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9pZGVudGl0eV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgR3N0SWRlbnRpdHkgKmlkZW50aXR5OworCisgIGlkZW50aXR5ID0gR1NUX0lERU5USVRZIChvYmplY3QpOworCisgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9TTEVFUF9USU1FOgorICAgICAgaWRlbnRpdHktPnNsZWVwX3RpbWUgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0lMRU5UOgorICAgICAgaWRlbnRpdHktPnNpbGVudCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TSU5HTEVfU0VHTUVOVDoKKyAgICAgIGlkZW50aXR5LT5zaW5nbGVfc2VnbWVudCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9EVU1QOgorICAgICAgaWRlbnRpdHktPmR1bXAgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRVJST1JfQUZURVI6CisgICAgICBpZGVudGl0eS0+ZXJyb3JfYWZ0ZXIgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9EUk9QX1BST0JBQklMSVRZOgorICAgICAgaWRlbnRpdHktPmRyb3BfcHJvYmFiaWxpdHkgPSBnX3ZhbHVlX2dldF9mbG9hdCAodmFsdWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RBVEFSQVRFOgorICAgICAgaWRlbnRpdHktPmRhdGFyYXRlID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1lOQzoKKyAgICAgIGlkZW50aXR5LT5zeW5jID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NIRUNLX1BFUkZFQ1Q6CisgICAgICBpZGVudGl0eS0+Y2hlY2tfcGVyZmVjdCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DSEVDS19JTVBFUkZFQ1RfVElNRVNUQU1QOgorICAgICAgaWRlbnRpdHktPmNoZWNrX2ltcGVyZmVjdF90aW1lc3RhbXAgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0hFQ0tfSU1QRVJGRUNUX09GRlNFVDoKKyAgICAgIGlkZW50aXR5LT5jaGVja19pbXBlcmZlY3Rfb2Zmc2V0ID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NJR05BTF9IQU5ET0ZGUzoKKyAgICAgIGlkZW50aXR5LT5zaWduYWxfaGFuZG9mZnMgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfaWRlbnRpdHlfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKKyAgICBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIEdzdElkZW50aXR5ICppZGVudGl0eTsKKworICBpZGVudGl0eSA9IEdTVF9JREVOVElUWSAob2JqZWN0KTsKKworICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfU0xFRVBfVElNRToKKyAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBpZGVudGl0eS0+c2xlZXBfdGltZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRVJST1JfQUZURVI6CisgICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBpZGVudGl0eS0+ZXJyb3JfYWZ0ZXIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RST1BfUFJPQkFCSUxJVFk6CisgICAgICBnX3ZhbHVlX3NldF9mbG9hdCAodmFsdWUsIGlkZW50aXR5LT5kcm9wX3Byb2JhYmlsaXR5KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9EQVRBUkFURToKKyAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIGlkZW50aXR5LT5kYXRhcmF0ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0lMRU5UOgorICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGlkZW50aXR5LT5zaWxlbnQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NJTkdMRV9TRUdNRU5UOgorICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGlkZW50aXR5LT5zaW5nbGVfc2VnbWVudCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRFVNUDoKKyAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBpZGVudGl0eS0+ZHVtcCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTEFTVF9NRVNTQUdFOgorICAgICAgR1NUX09CSkVDVF9MT0NLIChpZGVudGl0eSk7CisgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBpZGVudGl0eS0+bGFzdF9tZXNzYWdlKTsKKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChpZGVudGl0eSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1lOQzoKKyAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBpZGVudGl0eS0+c3luYyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0hFQ0tfUEVSRkVDVDoKKyAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBpZGVudGl0eS0+Y2hlY2tfcGVyZmVjdCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0hFQ0tfSU1QRVJGRUNUX1RJTUVTVEFNUDoKKyAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBpZGVudGl0eS0+Y2hlY2tfaW1wZXJmZWN0X3RpbWVzdGFtcCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0hFQ0tfSU1QRVJGRUNUX09GRlNFVDoKKyAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBpZGVudGl0eS0+Y2hlY2tfaW1wZXJmZWN0X29mZnNldCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0lHTkFMX0hBTkRPRkZTOgorICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGlkZW50aXR5LT5zaWduYWxfaGFuZG9mZnMpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICBicmVhazsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9pZGVudGl0eV9zdGFydCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zKQoreworICBHc3RJZGVudGl0eSAqaWRlbnRpdHk7CisKKyAgaWRlbnRpdHkgPSBHU1RfSURFTlRJVFkgKHRyYW5zKTsKKworICBpZGVudGl0eS0+b2Zmc2V0ID0gMDsKKyAgaWRlbnRpdHktPnByZXZfdGltZXN0YW1wID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgaWRlbnRpdHktPnByZXZfZHVyYXRpb24gPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICBpZGVudGl0eS0+cHJldl9vZmZzZXRfZW5kID0gR1NUX0JVRkZFUl9PRkZTRVRfTk9ORTsKKyAgaWRlbnRpdHktPnByZXZfb2Zmc2V0ID0gR1NUX0JVRkZFUl9PRkZTRVRfTk9ORTsKKworICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfaWRlbnRpdHlfc3RvcCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zKQoreworICBHc3RJZGVudGl0eSAqaWRlbnRpdHk7CisKKyAgaWRlbnRpdHkgPSBHU1RfSURFTlRJVFkgKHRyYW5zKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKGlkZW50aXR5KTsKKyAgZ19mcmVlIChpZGVudGl0eS0+bGFzdF9tZXNzYWdlKTsKKyAgaWRlbnRpdHktPmxhc3RfbWVzc2FnZSA9IE5VTEw7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChpZGVudGl0eSk7CisKKyAgcmV0dXJuIFRSVUU7Cit9CmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmggYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYwOGQyYgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuaApAQCAtMCwwICsxLDkzIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+CisgKgorICogZ3N0aWRlbnRpdHkuaDoKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKKyNpZm5kZWYgX19HU1RfSURFTlRJVFlfSF9fCisjZGVmaW5lIF9fR1NUX0lERU5USVRZX0hfXworCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKworI2RlZmluZSBHU1RfVFlQRV9JREVOVElUWSBcCisgIChnc3RfaWRlbnRpdHlfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgR1NUX0lERU5USVRZKG9iaikgXAorICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfSURFTlRJVFksR3N0SWRlbnRpdHkpKQorI2RlZmluZSBHU1RfSURFTlRJVFlfQ0xBU1Moa2xhc3MpIFwKKyAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfSURFTlRJVFksR3N0SWRlbnRpdHlDbGFzcykpCisjZGVmaW5lIEdTVF9JU19JREVOVElUWShvYmopIFwKKyAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0lERU5USVRZKSkKKyNkZWZpbmUgR1NUX0lTX0lERU5USVRZX0NMQVNTKGtsYXNzKSBcCisgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0lERU5USVRZKSkKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdElkZW50aXR5IEdzdElkZW50aXR5OwordHlwZWRlZiBzdHJ1Y3QgX0dzdElkZW50aXR5Q2xhc3MgR3N0SWRlbnRpdHlDbGFzczsKKworLyoqCisgKiBHc3RJZGVudGl0eToKKyAqCisgKiBPcGFxdWUgI0dzdElkZW50aXR5IGRhdGEgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBfR3N0SWRlbnRpdHkgeworICBHc3RCYXNlVHJhbnNmb3JtIAkgZWxlbWVudDsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgR3N0Q2xvY2tJRCAgICAgY2xvY2tfaWQ7CisgIGdpbnQgCSAJIGVycm9yX2FmdGVyOworICBnZmxvYXQgCSBkcm9wX3Byb2JhYmlsaXR5OworICBnaW50CQkgZGF0YXJhdGU7CisgIGd1aW50IAkgc2xlZXBfdGltZTsKKyAgZ2Jvb2xlYW4gCSBzaWxlbnQ7CisgIGdib29sZWFuIAkgZHVtcDsKKyAgZ2Jvb2xlYW4gCSBzeW5jOworICBnYm9vbGVhbiAJIGNoZWNrX3BlcmZlY3Q7CisgIGdib29sZWFuIAkgY2hlY2tfaW1wZXJmZWN0X3RpbWVzdGFtcDsKKyAgZ2Jvb2xlYW4gCSBjaGVja19pbXBlcmZlY3Rfb2Zmc2V0OworICBnYm9vbGVhbgkgc2luZ2xlX3NlZ21lbnQ7CisgIEdzdENsb2NrVGltZSAgIHByZXZfdGltZXN0YW1wOworICBHc3RDbG9ja1RpbWUgICBwcmV2X2R1cmF0aW9uOworICBndWludDY0ICAgICAgICBwcmV2X29mZnNldDsKKyAgZ3VpbnQ2NCAgICAgICAgcHJldl9vZmZzZXRfZW5kOworICBnY2hhciAJKmxhc3RfbWVzc2FnZTsKKyAgZ3VpbnQ2NCAgICAgICAgb2Zmc2V0OworICBnYm9vbGVhbiAgICAgICBzaWduYWxfaGFuZG9mZnM7CisKKyNpZiAhR0xJQl9DSEVDS19WRVJTSU9OKDIsMjYsMCkKKyAgR1N0YXRpY1JlY011dGV4ICBub3RpZnlfbG9jazsKKyNlbmRpZgorfTsKKworc3RydWN0IF9Hc3RJZGVudGl0eUNsYXNzIHsKKyAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzIHBhcmVudF9jbGFzczsKKworICAvKiBzaWduYWxzICovCisgIHZvaWQgKCpoYW5kb2ZmKSAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0QnVmZmVyICpidWYpOworfTsKKworR1R5cGUgZ3N0X2lkZW50aXR5X2dldF90eXBlKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HU1RfSURFTlRJVFlfSF9fICovCmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMzVhNDcKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYwpAQCAtMCwwICsxLDE0MjMgQEAKKy8qIEdTdHJlYW1lciBpbnB1dCBzZWxlY3RvcgorICogQ29weXJpZ2h0IChDKSAyMDAzIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgorICogQ29weXJpZ2h0IChDKSAyMDA1IFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbi4gKGNvbnRhY3QgPHN0ZWZhbi5rb3N0QG5va2lhLmNvbT4pCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoqCisgKiBTRUNUSU9OOmVsZW1lbnQtaW5wdXQtc2VsZWN0b3IKKyAqIEBzZWVfYWxzbzogI0dzdE91dHB1dFNlbGVjdG9yCisgKgorICogRGlyZWN0IG9uZSBvdXQgb2YgTiBpbnB1dCBzdHJlYW1zIHRvIHRoZSBvdXRwdXQgcGFkLgorICoKKyAqIFRoZSBpbnB1dCBwYWRzIGFyZSBmcm9tIGEgR3N0UGFkIHN1YmNsYXNzIGFuZCBoYXZlIGFkZGl0aW9uYWwKKyAqIHByb3BlcnRpZXMsIHdoaWNoIHVzZXJzIG1heSBmaW5kIHVzZWZ1bCwgbmFtZWx5OgorICoKKyAqIDxpdGVtaXplZGxpc3Q+CisgKiA8bGlzdGl0ZW0+CisgKiAicnVubmluZy10aW1lIjogUnVubmluZyB0aW1lIG9mIHN0cmVhbSBvbiBwYWQgKCNnaW50NjQpCisgKiA8L2xpc3RpdGVtPgorICogPGxpc3RpdGVtPgorICogInRhZ3MiOiBUaGUgY3VycmVudGx5IGFjdGl2ZSB0YWdzIG9uIHRoZSBwYWQgKCNHc3RUYWdMaXN0LCBib3hlZCB0eXBlKQorICogPC9saXN0aXRlbT4KKyAqIDxsaXN0aXRlbT4KKyAqICJhY3RpdmUiOiBJZiB0aGUgcGFkIGlzIGN1cnJlbnRseSBhY3RpdmUgKCNnYm9vbGVhbikKKyAqIDwvbGlzdGl0ZW0+CisgKiA8bGlzdGl0ZW0+CisgKiAiYWx3YXlzLW9rIiA6IE1ha2UgYW4gaW5hY3RpdmUgcGFkcyByZXR1cm4gI0dTVF9GTE9XX09LIGluc3RlYWQgb2YKKyAqICNHU1RfRkxPV19OT1RfTElOS0VECisgKiA8L2xpc3RpdGVtPgorICogPC9pdGVtaXplZGxpc3Q+CisgKgorICogU2luY2U6IDAuMTAuMzIKKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImdzdGlucHV0c2VsZWN0b3IuaCIKKworR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoaW5wdXRfc2VsZWN0b3JfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgaW5wdXRfc2VsZWN0b3JfZGVidWcKKworI2lmIEdMSUJfQ0hFQ0tfVkVSU0lPTigyLCAyNiwgMCkKKyNkZWZpbmUgTk9USUZZX01VVEVYX0xPQ0soKQorI2RlZmluZSBOT1RJRllfTVVURVhfVU5MT0NLKCkKKyNlbHNlCitzdGF0aWMgR1N0YXRpY1JlY011dGV4IG5vdGlmeV9tdXRleCA9IEdfU1RBVElDX1JFQ19NVVRFWF9JTklUOworI2RlZmluZSBOT1RJRllfTVVURVhfTE9DSygpIGdfc3RhdGljX3JlY19tdXRleF9sb2NrICgmbm90aWZ5X211dGV4KQorI2RlZmluZSBOT1RJRllfTVVURVhfVU5MT0NLKCkgZ19zdGF0aWNfcmVjX211dGV4X3VubG9jayAoJm5vdGlmeV9tdXRleCkKKyNlbmRpZgorCisjZGVmaW5lIEdTVF9JTlBVVF9TRUxFQ1RPUl9HRVRfTE9DSyhzZWwpICgoKEdzdElucHV0U2VsZWN0b3IqKShzZWwpKS0+bG9jaykKKyNkZWZpbmUgR1NUX0lOUFVUX1NFTEVDVE9SX0dFVF9DT05EKHNlbCkgKCgoR3N0SW5wdXRTZWxlY3RvciopKHNlbCkpLT5jb25kKQorI2RlZmluZSBHU1RfSU5QVVRfU0VMRUNUT1JfTE9DSyhzZWwpIChnX211dGV4X2xvY2sgKEdTVF9JTlBVVF9TRUxFQ1RPUl9HRVRfTE9DSyhzZWwpKSkKKyNkZWZpbmUgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyhzZWwpIChnX211dGV4X3VubG9jayAoR1NUX0lOUFVUX1NFTEVDVE9SX0dFVF9MT0NLKHNlbCkpKQorI2RlZmluZSBHU1RfSU5QVVRfU0VMRUNUT1JfV0FJVChzZWwpIChnX2NvbmRfd2FpdCAoR1NUX0lOUFVUX1NFTEVDVE9SX0dFVF9DT05EKHNlbCksIFwKKwkJCUdTVF9JTlBVVF9TRUxFQ1RPUl9HRVRfTE9DSyhzZWwpKSkKKyNkZWZpbmUgR1NUX0lOUFVUX1NFTEVDVE9SX0JST0FEQ0FTVChzZWwpIChnX2NvbmRfYnJvYWRjYXN0IChHU1RfSU5QVVRfU0VMRUNUT1JfR0VUX0NPTkQoc2VsKSkpCisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfaW5wdXRfc2VsZWN0b3Jfc2lua19mYWN0b3J5ID0KK0dTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayVkIiwKKyAgICBHU1RfUEFEX1NJTkssCisgICAgR1NUX1BBRF9SRVFVRVNULAorICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOworCitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X2lucHV0X3NlbGVjdG9yX3NyY19mYWN0b3J5ID0KK0dTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKKyAgICBHU1RfUEFEX1NSQywKKyAgICBHU1RfUEFEX0FMV0FZUywKKyAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKKworZW51bQoreworICBQUk9QXzAsCisgIFBST1BfTl9QQURTLAorICBQUk9QX0FDVElWRV9QQUQsCisgIFBST1BfU1lOQ19TVFJFQU1TCit9OworCisjZGVmaW5lIERFRkFVTFRfU1lOQ19TVFJFQU1TIEZBTFNFCisKKyNkZWZpbmUgREVGQVVMVF9QQURfQUxXQVlTX09LIFRSVUUKKworZW51bQoreworICBQUk9QX1BBRF8wLAorICBQUk9QX1BBRF9SVU5OSU5HX1RJTUUsCisgIFBST1BfUEFEX1RBR1MsCisgIFBST1BfUEFEX0FDVElWRSwKKyAgUFJPUF9QQURfQUxXQVlTX09LCit9OworCitlbnVtCit7CisgIC8qIG1ldGhvZHMgKi8KKyAgU0lHTkFMX0JMT0NLLAorICBTSUdOQUxfU1dJVENILAorICBMQVNUX1NJR05BTAorfTsKK3N0YXRpYyBndWludCBnc3RfaW5wdXRfc2VsZWN0b3Jfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKKworc3RhdGljIGlubGluZSBnYm9vbGVhbiBnc3RfaW5wdXRfc2VsZWN0b3JfaXNfYWN0aXZlX3NpbmtwYWQgKEdzdElucHV0U2VsZWN0b3IgKgorICAgIHNlbCwgR3N0UGFkICogcGFkKTsKK3N0YXRpYyBHc3RQYWQgKmdzdF9pbnB1dF9zZWxlY3Rvcl9hY3RpdmF0ZV9zaW5rcGFkIChHc3RJbnB1dFNlbGVjdG9yICogc2VsLAorICAgIEdzdFBhZCAqIHBhZCk7CitzdGF0aWMgR3N0UGFkICpnc3RfaW5wdXRfc2VsZWN0b3JfZ2V0X2xpbmtlZF9wYWQgKEdzdElucHV0U2VsZWN0b3IgKiBzZWwsCisgICAgR3N0UGFkICogcGFkLCBnYm9vbGVhbiBzdHJpY3QpOworCisjZGVmaW5lIEdTVF9UWVBFX1NFTEVDVE9SX1BBRCBcCisgIChnc3Rfc2VsZWN0b3JfcGFkX2dldF90eXBlKCkpCisjZGVmaW5lIEdTVF9TRUxFQ1RPUl9QQUQob2JqKSBcCisgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX1NFTEVDVE9SX1BBRCwgR3N0U2VsZWN0b3JQYWQpKQorI2RlZmluZSBHU1RfU0VMRUNUT1JfUEFEX0NMQVNTKGtsYXNzKSBcCisgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfU0VMRUNUT1JfUEFELCBHc3RTZWxlY3RvclBhZENsYXNzKSkKKyNkZWZpbmUgR1NUX0lTX1NFTEVDVE9SX1BBRChvYmopIFwKKyAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfU0VMRUNUT1JfUEFEKSkKKyNkZWZpbmUgR1NUX0lTX1NFTEVDVE9SX1BBRF9DTEFTUyhrbGFzcykgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX1NFTEVDVE9SX1BBRCkpCisjZGVmaW5lIEdTVF9TRUxFQ1RPUl9QQURfQ0FTVChvYmopIFwKKyAgKChHc3RTZWxlY3RvclBhZCAqKShvYmopKQorCit0eXBlZGVmIHN0cnVjdCBfR3N0U2VsZWN0b3JQYWQgR3N0U2VsZWN0b3JQYWQ7Cit0eXBlZGVmIHN0cnVjdCBfR3N0U2VsZWN0b3JQYWRDbGFzcyBHc3RTZWxlY3RvclBhZENsYXNzOworCitzdHJ1Y3QgX0dzdFNlbGVjdG9yUGFkCit7CisgIEdzdFBhZCBwYXJlbnQ7CisKKyAgZ2Jvb2xlYW4gYWN0aXZlOyAgICAgICAgICAgICAgLyogd2hlbiBidWZmZXIgaGF2ZSBwYXNzZWQgdGhlIHBhZCAqLworICBnYm9vbGVhbiBwdXNoZWQ7ICAgICAgICAgICAgICAvKiB3aGVuIGJ1ZmZlciB3YXMgcHVzaGVkIGRvd25zdHJlYW0gc2luY2UgYWN0aXZhdGlvbiAqLworICBnYm9vbGVhbiBlb3M7ICAgICAgICAgICAgICAgICAvKiB3aGVuIEVPUyBoYXMgYmVlbiByZWNlaXZlZCAqLworICBnYm9vbGVhbiBlb3Nfc2VudDsgICAgICAgICAgICAvKiB3aGVuIEVPUyB3YXMgc2VudCBkb3duc3RyZWFtICovCisgIGdib29sZWFuIGRpc2NvbnQ7ICAgICAgICAgICAgIC8qIGFmdGVyIHN3aXRjaGluZyB3ZSBjcmVhdGUgYSBkaXNjb250ICovCisgIGdib29sZWFuIGZsdXNoaW5nOyAgICAgICAgICAgIC8qIHNldCBhZnRlciBmbHVzaC1zdGFydCBhbmQgYmVmb3JlIGZsdXNoLXN0b3AgKi8KKyAgZ2Jvb2xlYW4gYWx3YXlzX29rOworICBHc3RUYWdMaXN0ICp0YWdzOyAgICAgICAgICAgICAvKiBsYXN0IHRhZ3MgcmVjZWl2ZWQgb24gdGhlIHBhZCAqLworCisgIEdzdENsb2NrVGltZSBwb3NpdGlvbjsgICAgICAgIC8qIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBzZWdtZW50ICovCisgIEdzdFNlZ21lbnQgc2VnbWVudDsgICAgICAgICAgIC8qIHRoZSBjdXJyZW50IHNlZ21lbnQgb24gdGhlIHBhZCAqLworICBndWludDMyIHNlZ21lbnRfc2VxbnVtOyAgICAgICAvKiBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIGN1cnJlbnQgc2VnbWVudCAqLworCisgIGdib29sZWFuIHNlZ21lbnRfcGVuZGluZzsKK307CisKK3N0cnVjdCBfR3N0U2VsZWN0b3JQYWRDbGFzcworeworICBHc3RQYWRDbGFzcyBwYXJlbnQ7Cit9OworCitHVHlwZSBnc3Rfc2VsZWN0b3JfcGFkX2dldF90eXBlICh2b2lkKTsKK3N0YXRpYyB2b2lkIGdzdF9zZWxlY3Rvcl9wYWRfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOworc3RhdGljIHZvaWQgZ3N0X3NlbGVjdG9yX3BhZF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCisgICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7CitzdGF0aWMgdm9pZCBnc3Rfc2VsZWN0b3JfcGFkX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKKyAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKKworc3RhdGljIGdpbnQ2NCBnc3Rfc2VsZWN0b3JfcGFkX2dldF9ydW5uaW5nX3RpbWUgKEdzdFNlbGVjdG9yUGFkICogcGFkKTsKK3N0YXRpYyB2b2lkIGdzdF9zZWxlY3Rvcl9wYWRfcmVzZXQgKEdzdFNlbGVjdG9yUGFkICogcGFkKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3Rfc2VsZWN0b3JfcGFkX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpOworc3RhdGljIEdzdENhcHMgKmdzdF9zZWxlY3Rvcl9wYWRfZ2V0Y2FwcyAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogZmlsdGVyKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3Rfc2VsZWN0b3JfcGFkX2FjY2VwdGNhcHMgKEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGNhcHMpOworc3RhdGljIEdzdEl0ZXJhdG9yICpnc3Rfc2VsZWN0b3JfcGFkX2l0ZXJhdGVfbGlua2VkX3BhZHMgKEdzdFBhZCAqIHBhZCk7CitzdGF0aWMgR3N0Rmxvd1JldHVybiBnc3Rfc2VsZWN0b3JfcGFkX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdEJ1ZmZlciAqIGJ1Zik7CisKK0dfREVGSU5FX1RZUEUgKEdzdFNlbGVjdG9yUGFkLCBnc3Rfc2VsZWN0b3JfcGFkLCBHU1RfVFlQRV9QQUQpOworCitzdGF0aWMgdm9pZAorZ3N0X3NlbGVjdG9yX3BhZF9jbGFzc19pbml0IChHc3RTZWxlY3RvclBhZENsYXNzICoga2xhc3MpCit7CisgIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKKworICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKKworICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9zZWxlY3Rvcl9wYWRfZmluYWxpemU7CisKKyAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3NlbGVjdG9yX3BhZF9nZXRfcHJvcGVydHk7CisgIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9zZWxlY3Rvcl9wYWRfc2V0X3Byb3BlcnR5OworCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUEFEX1JVTk5JTkdfVElNRSwKKyAgICAgIGdfcGFyYW1fc3BlY19pbnQ2NCAoInJ1bm5pbmctdGltZSIsICJSdW5uaW5nIHRpbWUiLAorICAgICAgICAgICJSdW5uaW5nIHRpbWUgb2Ygc3RyZWFtIG9uIHBhZCIsIDAsIEdfTUFYSU5UNjQsIDAsCisgICAgICAgICAgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9QQURfVEFHUywKKyAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCAoInRhZ3MiLCAiVGFncyIsCisgICAgICAgICAgIlRoZSBjdXJyZW50bHkgYWN0aXZlIHRhZ3Mgb24gdGhlIHBhZCIsIEdTVF9UWVBFX1RBR19MSVNULAorICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUEFEX0FDVElWRSwKKyAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiYWN0aXZlIiwgIkFjdGl2ZSIsCisgICAgICAgICAgIklmIHRoZSBwYWQgaXMgY3VycmVudGx5IGFjdGl2ZSIsIEZBTFNFLAorICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIC8qIEZJWE1FOiBiZXR0ZXIgcHJvcGVydHkgbmFtZT8gKi8KKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9QQURfQUxXQVlTX09LLAorICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJhbHdheXMtb2siLCAiQWx3YXlzIE9LIiwKKyAgICAgICAgICAiTWFrZSBhbiBpbmFjdGl2ZSBwYWQgcmV0dXJuIE9LIGluc3RlYWQgb2YgTk9UX0xJTktFRCIsCisgICAgICAgICAgREVGQVVMVF9QQURfQUxXQVlTX09LLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9zZWxlY3Rvcl9wYWRfaW5pdCAoR3N0U2VsZWN0b3JQYWQgKiBwYWQpCit7CisgIHBhZC0+YWx3YXlzX29rID0gREVGQVVMVF9QQURfQUxXQVlTX09LOworICBnc3Rfc2VsZWN0b3JfcGFkX3Jlc2V0IChwYWQpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3NlbGVjdG9yX3BhZF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKK3sKKyAgR3N0U2VsZWN0b3JQYWQgKnBhZDsKKworICBwYWQgPSBHU1RfU0VMRUNUT1JfUEFEX0NBU1QgKG9iamVjdCk7CisKKyAgaWYgKHBhZC0+dGFncykKKyAgICBnc3RfdGFnX2xpc3RfZnJlZSAocGFkLT50YWdzKTsKKworICBHX09CSkVDVF9DTEFTUyAoZ3N0X3NlbGVjdG9yX3BhZF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9zZWxlY3Rvcl9wYWRfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIEdzdFNlbGVjdG9yUGFkICpzcGFkID0gR1NUX1NFTEVDVE9SX1BBRF9DQVNUIChvYmplY3QpOworCisgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9QQURfQUxXQVlTX09LOgorICAgICAgR1NUX09CSkVDVF9MT0NLIChvYmplY3QpOworICAgICAgc3BhZC0+YWx3YXlzX29rID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKG9iamVjdCk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3Rfc2VsZWN0b3JfcGFkX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQoreworICBHc3RTZWxlY3RvclBhZCAqc3BhZCA9IEdTVF9TRUxFQ1RPUl9QQURfQ0FTVCAob2JqZWN0KTsKKworICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfUEFEX1JVTk5JTkdfVElNRToKKyAgICAgIGdfdmFsdWVfc2V0X2ludDY0ICh2YWx1ZSwgZ3N0X3NlbGVjdG9yX3BhZF9nZXRfcnVubmluZ190aW1lIChzcGFkKSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUEFEX1RBR1M6CisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKG9iamVjdCk7CisgICAgICBnX3ZhbHVlX3NldF9ib3hlZCAodmFsdWUsIHNwYWQtPnRhZ3MpOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKG9iamVjdCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUEFEX0FDVElWRToKKyAgICB7CisgICAgICBHc3RJbnB1dFNlbGVjdG9yICpzZWw7CisKKyAgICAgIHNlbCA9IEdTVF9JTlBVVF9TRUxFQ1RPUiAoZ3N0X3BhZF9nZXRfcGFyZW50IChzcGFkKSk7CisgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgZ3N0X2lucHV0X3NlbGVjdG9yX2lzX2FjdGl2ZV9zaW5rcGFkIChzZWwsCisgICAgICAgICAgICAgIEdTVF9QQURfQ0FTVCAoc3BhZCkpKTsKKyAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHNlbCk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1BBRF9BTFdBWVNfT0s6CisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKG9iamVjdCk7CisgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgc3BhZC0+YWx3YXlzX29rKTsKKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChvYmplY3QpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICBicmVhazsKKyAgfQorfQorCitzdGF0aWMgZ2ludDY0Citnc3Rfc2VsZWN0b3JfcGFkX2dldF9ydW5uaW5nX3RpbWUgKEdzdFNlbGVjdG9yUGFkICogcGFkKQoreworICBnaW50NjQgcmV0ID0gMDsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7CisgIGlmIChwYWQtPmFjdGl2ZSkgeworICAgIGd1aW50NjQgcG9zaXRpb24gPSBwYWQtPnBvc2l0aW9uOworICAgIEdzdEZvcm1hdCBmb3JtYXQgPSBwYWQtPnNlZ21lbnQuZm9ybWF0OworCisgICAgcmV0ID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmcGFkLT5zZWdtZW50LCBmb3JtYXQsIHBvc2l0aW9uKTsKKyAgfQorICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKworICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJydW5uaW5nIHRpbWU6ICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgIEdTVF9USU1FX0FSR1MgKHJldCkpOworCisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCitnc3Rfc2VsZWN0b3JfcGFkX3Jlc2V0IChHc3RTZWxlY3RvclBhZCAqIHBhZCkKK3sKKyAgR1NUX09CSkVDVF9MT0NLIChwYWQpOworICBwYWQtPmFjdGl2ZSA9IEZBTFNFOworICBwYWQtPnB1c2hlZCA9IEZBTFNFOworICBwYWQtPmVvcyA9IEZBTFNFOworICBwYWQtPmVvc19zZW50ID0gRkFMU0U7CisgIHBhZC0+c2VnbWVudF9wZW5kaW5nID0gRkFMU0U7CisgIHBhZC0+ZGlzY29udCA9IEZBTFNFOworICBwYWQtPmZsdXNoaW5nID0gRkFMU0U7CisgIHBhZC0+cG9zaXRpb24gPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICBnc3Rfc2VnbWVudF9pbml0ICgmcGFkLT5zZWdtZW50LCBHU1RfRk9STUFUX1VOREVGSU5FRCk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOworfQorCisvKiBzdHJpY3RseSBnZXQgdGhlIGxpbmtlZCBwYWQgZnJvbSB0aGUgc2lua3BhZC4gSWYgdGhlIHBhZCBpcyBhY3RpdmUgd2UgcmV0dXJuCisgKiB0aGUgc3JjcGFkIGVsc2Ugd2UgcmV0dXJuIE5VTEwgKi8KK3N0YXRpYyBHc3RJdGVyYXRvciAqCitnc3Rfc2VsZWN0b3JfcGFkX2l0ZXJhdGVfbGlua2VkX3BhZHMgKEdzdFBhZCAqIHBhZCkKK3sKKyAgR3N0SW5wdXRTZWxlY3RvciAqc2VsOworICBHc3RQYWQgKm90aGVycGFkOworICBHc3RJdGVyYXRvciAqaXQgPSBOVUxMOworICBHVmFsdWUgdmFsID0geyAwLCB9OworCisgIHNlbCA9IEdTVF9JTlBVVF9TRUxFQ1RPUiAoZ3N0X3BhZF9nZXRfcGFyZW50IChwYWQpKTsKKyAgaWYgKEdfVU5MSUtFTFkgKHNlbCA9PSBOVUxMKSkKKyAgICByZXR1cm4gTlVMTDsKKworICBvdGhlcnBhZCA9IGdzdF9pbnB1dF9zZWxlY3Rvcl9nZXRfbGlua2VkX3BhZCAoc2VsLCBwYWQsIFRSVUUpOworICBpZiAob3RoZXJwYWQpIHsKKyAgICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdTVF9UWVBFX1BBRCk7CisgICAgZ192YWx1ZV9zZXRfb2JqZWN0ICgmdmFsLCBvdGhlcnBhZCk7CisgICAgaXQgPSBnc3RfaXRlcmF0b3JfbmV3X3NpbmdsZSAoR1NUX1RZUEVfUEFELCAmdmFsKTsKKyAgICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChvdGhlcnBhZCk7CisgIH0KKyAgZ3N0X29iamVjdF91bnJlZiAoc2VsKTsKKworICByZXR1cm4gaXQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3NlbGVjdG9yX3BhZF9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KQoreworICBnYm9vbGVhbiByZXMgPSBUUlVFOworICBnYm9vbGVhbiBmb3J3YXJkOworICBHc3RJbnB1dFNlbGVjdG9yICpzZWw7CisgIEdzdFNlbGVjdG9yUGFkICpzZWxwYWQ7CisgIEdzdFBhZCAqcHJldl9hY3RpdmVfc2lua3BhZDsKKyAgR3N0UGFkICphY3RpdmVfc2lua3BhZDsKKworICBzZWwgPSBHU1RfSU5QVVRfU0VMRUNUT1IgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7CisgIGlmIChHX1VOTElLRUxZIChzZWwgPT0gTlVMTCkpIHsKKyAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKyAgc2VscGFkID0gR1NUX1NFTEVDVE9SX1BBRF9DQVNUIChwYWQpOworCisgIEdTVF9JTlBVVF9TRUxFQ1RPUl9MT0NLIChzZWwpOworICBwcmV2X2FjdGl2ZV9zaW5rcGFkID0gc2VsLT5hY3RpdmVfc2lua3BhZDsKKyAgYWN0aXZlX3NpbmtwYWQgPSBnc3RfaW5wdXRfc2VsZWN0b3JfYWN0aXZhdGVfc2lua3BhZCAoc2VsLCBwYWQpOworCisgIC8qIG9ubHkgZm9yd2FyZCBpZiB3ZSBhcmUgZGVhbGluZyB3aXRoIHRoZSBhY3RpdmUgc2lua3BhZCAqLworICBmb3J3YXJkID0gKHBhZCA9PSBhY3RpdmVfc2lua3BhZCk7CisgIEdTVF9JTlBVVF9TRUxFQ1RPUl9VTkxPQ0sgKHNlbCk7CisKKyAgaWYgKHByZXZfYWN0aXZlX3NpbmtwYWQgIT0gYWN0aXZlX3NpbmtwYWQgJiYgcGFkID09IGFjdGl2ZV9zaW5rcGFkKSB7CisgICAgTk9USUZZX01VVEVYX0xPQ0sgKCk7CisgICAgZ19vYmplY3Rfbm90aWZ5IChHX09CSkVDVCAoc2VsKSwgImFjdGl2ZS1wYWQiKTsKKyAgICBOT1RJRllfTVVURVhfVU5MT0NLICgpOworICB9CisKKyAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7CisgICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RBUlQ6CisgICAgICAvKiBVbmJsb2NrIHRoZSBwYWQgaWYgaXQncyB3YWl0aW5nICovCisgICAgICBHU1RfSU5QVVRfU0VMRUNUT1JfTE9DSyAoc2VsKTsKKyAgICAgIHNlbHBhZC0+Zmx1c2hpbmcgPSBUUlVFOworICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0JST0FEQ0FTVCAoc2VsKTsKKyAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9VTkxPQ0sgKHNlbCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVE9QOgorICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0sgKHNlbCk7CisgICAgICBnc3Rfc2VsZWN0b3JfcGFkX3Jlc2V0IChzZWxwYWQpOworICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6CisgICAgeworICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0sgKHNlbCk7CisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHNlbHBhZCk7CisgICAgICBnc3RfZXZlbnRfY29weV9zZWdtZW50IChldmVudCwgJnNlbHBhZC0+c2VnbWVudCk7CisgICAgICBzZWxwYWQtPnNlZ21lbnRfc2VxbnVtID0gZ3N0X2V2ZW50X2dldF9zZXFudW0gKGV2ZW50KTsKKworICAgICAgLyogVXBkYXRlIHRoZSBwb3NpdGlvbiAqLworICAgICAgaWYgKHNlbHBhZC0+cG9zaXRpb24gPT0gR1NUX0NMT0NLX1RJTUVfTk9ORQorICAgICAgICAgIHx8IHNlbHBhZC0+c2VnbWVudC5wb3NpdGlvbiA+IHNlbHBhZC0+cG9zaXRpb24pIHsKKyAgICAgICAgc2VscGFkLT5wb3NpdGlvbiA9IHNlbHBhZC0+c2VnbWVudC5wb3NpdGlvbjsKKyAgICAgIH0gZWxzZSBpZiAoc2VscGFkLT5wb3NpdGlvbiAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FCisgICAgICAgICAgJiYgc2VscGFkLT5wb3NpdGlvbiA+IHNlbHBhZC0+c2VnbWVudC5wb3NpdGlvbikgeworICAgICAgICBzZWxwYWQtPnNlZ21lbnQucG9zaXRpb24gPSBzZWxwYWQtPnBvc2l0aW9uOworCisgICAgICAgIGlmIChmb3J3YXJkKSB7CisgICAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgICAgICAgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWxwYWQtPnNlZ21lbnQpOworICAgICAgICAgIGdzdF9ldmVudF9zZXRfc2VxbnVtIChldmVudCwgc2VscGFkLT5zZWdtZW50X3NlcW51bSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImNvbmZpZ3VyZWQgU0VHTUVOVCAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsCisgICAgICAgICAgJnNlbHBhZC0+c2VnbWVudCk7CisKKyAgICAgIC8qIElmIHdlIGFyZW4ndCBmb3J3YXJkaW5nIHRoZSBldmVudCBiZWNhdXNlIHRoZSBwYWQgaXMgbm90IHRoZQorICAgICAgICogYWN0aXZlX3NpbmtwYWQsIHRoZW4gc2V0IHRoZSBmbGFnIG9uIHRoZSBwYWQKKyAgICAgICAqIHRoYXQgc2F5cyBhIHNlZ21lbnQgbmVlZHMgc2VuZGluZyBpZi93aGVuIHRoYXQgcGFkIGlzIGFjdGl2YXRlZC4KKyAgICAgICAqIEZvciBhbGwgb3RoZXIgY2FzZXMsIHdlIHNlbmQgdGhlIGV2ZW50IGltbWVkaWF0ZWx5LCB3aGljaCBtYWtlcworICAgICAgICogc3BhcnNlIHN0cmVhbXMgYW5kIG90aGVyIHNlZ21lbnQgdXBkYXRlcyB3b3JrIGNvcnJlY3RseSBkb3duc3RyZWFtLgorICAgICAgICovCisgICAgICBpZiAoIWZvcndhcmQpCisgICAgICAgIHNlbHBhZC0+c2VnbWVudF9wZW5kaW5nID0gVFJVRTsKKworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNlbHBhZCk7CisgICAgICBHU1RfSU5QVVRfU0VMRUNUT1JfVU5MT0NLIChzZWwpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX0VWRU5UX1RBRzoKKyAgICB7CisgICAgICBHc3RUYWdMaXN0ICp0YWdzLCAqb2xkdGFncywgKm5ld3RhZ3M7CisKKyAgICAgIGdzdF9ldmVudF9wYXJzZV90YWcgKGV2ZW50LCAmdGFncyk7CisKKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc2VscGFkKTsKKyAgICAgIG9sZHRhZ3MgPSBzZWxwYWQtPnRhZ3M7CisKKyAgICAgIG5ld3RhZ3MgPSBnc3RfdGFnX2xpc3RfbWVyZ2UgKG9sZHRhZ3MsIHRhZ3MsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSk7CisgICAgICBzZWxwYWQtPnRhZ3MgPSBuZXd0YWdzOworICAgICAgaWYgKG9sZHRhZ3MpCisgICAgICAgIGdzdF90YWdfbGlzdF9mcmVlIChvbGR0YWdzKTsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInJlY2VpdmVkIHRhZ3MgJSIgR1NUX1BUUl9GT1JNQVQsIG5ld3RhZ3MpOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNlbHBhZCk7CisKKyAgICAgIGdfb2JqZWN0X25vdGlmeSAoR19PQkpFQ1QgKHNlbHBhZCksICJ0YWdzIik7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfRVZFTlRfRU9TOgorICAgICAgc2VscGFkLT5lb3MgPSBUUlVFOworCisgICAgICBpZiAoZm9yd2FyZCkgeworICAgICAgICBzZWxwYWQtPmVvc19zZW50ID0gVFJVRTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIEdzdFNlbGVjdG9yUGFkICp0bXA7CisKKyAgICAgICAgLyogSWYgdGhlIGFjdGl2ZSBzaW5rcGFkIGlzIGluIEVPUyBzdGF0ZSBidXQgRU9TCisgICAgICAgICAqIHdhcyBub3Qgc2VudCBkb3duc3RyZWFtIHRoaXMgbWVhbnMgdGhhdCB0aGUgcGFkCisgICAgICAgICAqIGdvdCBFT1MgYmVmb3JlIGl0IHdhcyBzZXQgYXMgYWN0aXZlIHBhZCBhbmQgdGhhdAorICAgICAgICAgKiB0aGUgcHJldmlvdXNseSBhY3RpdmUgcGFkIGdvdCBFT1MgYWZ0ZXIgaXQgd2FzCisgICAgICAgICAqIGFjdGl2ZQorICAgICAgICAgKi8KKyAgICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0sgKHNlbCk7CisgICAgICAgIGFjdGl2ZV9zaW5rcGFkID0gZ3N0X2lucHV0X3NlbGVjdG9yX2FjdGl2YXRlX3NpbmtwYWQgKHNlbCwgcGFkKTsKKyAgICAgICAgdG1wID0gR1NUX1NFTEVDVE9SX1BBRCAoYWN0aXZlX3NpbmtwYWQpOworICAgICAgICBmb3J3YXJkID0gKHRtcC0+ZW9zICYmICF0bXAtPmVvc19zZW50KTsKKyAgICAgICAgdG1wLT5lb3Nfc2VudCA9IFRSVUU7CisgICAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9VTkxPQ0sgKHNlbCk7CisgICAgICB9CisgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJyZWNlaXZlZCBFT1MiKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorICBpZiAoZm9yd2FyZCkgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImZvcndhcmRpbmcgZXZlbnQiKTsKKyAgICByZXMgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHNlbC0+c3JjcGFkLCBldmVudCk7CisgIH0gZWxzZQorICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHNlbCk7CisKKyAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIEdzdENhcHMgKgorZ3N0X3NlbGVjdG9yX3BhZF9nZXRjYXBzIChHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBmaWx0ZXIpCit7CisgIEdzdElucHV0U2VsZWN0b3IgKnNlbDsKKyAgR3N0Q2FwcyAqY2FwczsKKworICBzZWwgPSBHU1RfSU5QVVRfU0VMRUNUT1IgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7CisgIGlmIChHX1VOTElLRUxZIChzZWwgPT0gTlVMTCkpCisgICAgcmV0dXJuIChmaWx0ZXIgPyBnc3RfY2Fwc19yZWYgKGZpbHRlcikgOiBnc3RfY2Fwc19uZXdfYW55ICgpKTsKKworICBHU1RfREVCVUdfT0JKRUNUIChzZWwsICJHZXR0aW5nIGNhcHMgb2Ygc3JjcGFkIHBlZXIiKTsKKyAgY2FwcyA9IGdzdF9wYWRfcGVlcl9nZXRfY2FwcyAoc2VsLT5zcmNwYWQsIGZpbHRlcik7CisgIGlmIChjYXBzID09IE5VTEwpCisgICAgY2FwcyA9IChmaWx0ZXIgPyBnc3RfY2Fwc19yZWYgKGZpbHRlcikgOiBnc3RfY2Fwc19uZXdfYW55ICgpKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChzZWwpOworCisgIHJldHVybiBjYXBzOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9zZWxlY3Rvcl9wYWRfYWNjZXB0Y2FwcyAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogY2FwcykKK3sKKyAgR3N0SW5wdXRTZWxlY3RvciAqc2VsOworICBnYm9vbGVhbiByZXM7CisKKyAgc2VsID0gR1NUX0lOUFVUX1NFTEVDVE9SIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOworICBpZiAoR19VTkxJS0VMWSAoc2VsID09IE5VTEwpKQorICAgIHJldHVybiBGQUxTRTsKKworICBHU1RfREVCVUdfT0JKRUNUIChzZWwsICJDaGVja2luZyBhY2NlcHRjYXBzIG9mIHNyY3BhZCBwZWVyIik7CisgIHJlcyA9IGdzdF9wYWRfcGVlcl9hY2NlcHRfY2FwcyAoc2VsLT5zcmNwYWQsIGNhcHMpOworICBnc3Rfb2JqZWN0X3VucmVmIChzZWwpOworCisgIHJldHVybiByZXM7Cit9CisKKy8qIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIFNFTEVDVE9SX0xPQ0ssIHdpbGwgYmxvY2sgd2hpbGUgdGhlIHBhZCBpcyBibG9ja2VkIAorICogb3IgcmV0dXJuIFRSVUUgd2hlbiBmbHVzaGluZyAqLworc3RhdGljIGdib29sZWFuCitnc3RfaW5wdXRfc2VsZWN0b3Jfd2FpdCAoR3N0SW5wdXRTZWxlY3RvciAqIHNlbGYsIEdzdFNlbGVjdG9yUGFkICogcGFkKQoreworICB3aGlsZSAoc2VsZi0+YmxvY2tlZCAmJiAhc2VsZi0+Zmx1c2hpbmcgJiYgIXBhZC0+Zmx1c2hpbmcpIHsKKyAgICAvKiB3ZSBjYW4gYmUgdW5sb2NrZWQgaGVyZSB3aGVuIHdlIGFyZSBzaHV0dGluZyBkb3duIChmbHVzaGluZykgb3Igd2hlbiB3ZQorICAgICAqIGdldCB1bmJsb2NrZWQgKi8KKyAgICBHU1RfSU5QVVRfU0VMRUNUT1JfV0FJVCAoc2VsZik7CisgIH0KKyAgcmV0dXJuIHNlbGYtPmZsdXNoaW5nOworfQorCisvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBTRUxFQ1RPUl9MT0NLLCB3aWxsIGJsb2NrIHVudGlsIHRoZSBydW5uaW5nIHRpbWUKKyAqIG9mIHRoZSBhY3RpdmUgcGFkIGlzIGFmdGVyIHRoaXMgcGFkIG9yIHJldHVybiBUUlVFIHdoZW4gZmx1c2hpbmcgKi8KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2lucHV0X3NlbGVjdG9yX3dhaXRfcnVubmluZ190aW1lIChHc3RJbnB1dFNlbGVjdG9yICogc2VsLAorICAgIEdzdFNlbGVjdG9yUGFkICogcGFkLCBHc3RCdWZmZXIgKiBidWYpCit7CisgIEdzdFBhZCAqYWN0aXZlX3NpbmtwYWQ7CisgIEdzdFNlbGVjdG9yUGFkICphY3RpdmVfc2VscGFkOworICBHc3RTZWdtZW50ICpzZWcsICphY3RpdmVfc2VnOworICBHc3RDbG9ja1RpbWUgcnVubmluZ190aW1lLCBhY3RpdmVfcnVubmluZ190aW1lID0gLTE7CisKKyAgc2VnID0gJnBhZC0+c2VnbWVudDsKKworICBhY3RpdmVfc2lua3BhZCA9CisgICAgICBnc3RfaW5wdXRfc2VsZWN0b3JfYWN0aXZhdGVfc2lua3BhZCAoc2VsLCBHU1RfUEFEX0NBU1QgKHBhZCkpOworICBhY3RpdmVfc2VscGFkID0gR1NUX1NFTEVDVE9SX1BBRF9DQVNUIChhY3RpdmVfc2lua3BhZCk7CisgIGFjdGl2ZV9zZWcgPSAmYWN0aXZlX3NlbHBhZC0+c2VnbWVudDsKKworICAvKiBXZSBjYW4gb25seSBzeW5jIGlmIHRoZSBzZWdtZW50cyBhcmUgaW4gdGltZSBmb3JtYXQgb3IKKyAgICogaWYgdGhlIGFjdGl2ZSBwYWQgaGFkIG5vIG5ld3NlZ21lbnQgZXZlbnQgeWV0ICovCisgIGlmIChzZWctPmZvcm1hdCAhPSBHU1RfRk9STUFUX1RJTUUgfHwKKyAgICAgIChhY3RpdmVfc2VnLT5mb3JtYXQgIT0gR1NUX0ZPUk1BVF9USU1FCisgICAgICAgICAgJiYgYWN0aXZlX3NlZy0+Zm9ybWF0ICE9IEdTVF9GT1JNQVRfVU5ERUZJTkVEKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgLyogSWYgd2UgaGF2ZSBubyB2YWxpZCB0aW1lc3RhbXAgd2UgY2FuJ3Qgc3luYyB0aGlzIGJ1ZmZlciAqLworICBpZiAoIUdTVF9CVUZGRVJfVElNRVNUQU1QX0lTX1ZBTElEIChidWYpKQorICAgIHJldHVybiBGQUxTRTsKKworICBydW5uaW5nX3RpbWUgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKTsKKyAgLyogSWYgcG9zc2libGUgdHJ5IHRvIGdldCB0aGUgcnVubmluZyB0aW1lIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAqLworICBpZiAoR1NUX0JVRkZFUl9EVVJBVElPTl9JU19WQUxJRCAoYnVmKSkKKyAgICBydW5uaW5nX3RpbWUgKz0gR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKTsKKyAgaWYgKHJ1bm5pbmdfdGltZSA+IHNlZy0+c3RvcCkKKyAgICBydW5uaW5nX3RpbWUgPSBzZWctPnN0b3A7CisgIHJ1bm5pbmdfdGltZSA9CisgICAgICBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKHNlZywgR1NUX0ZPUk1BVF9USU1FLCBydW5uaW5nX3RpbWUpOworICAvKiBJZiB0aGlzIGlzIG91dHNpZGUgdGhlIHNlZ21lbnQgZG9uJ3Qgc3luYyAqLworICBpZiAocnVubmluZ190aW1lID09IC0xKQorICAgIHJldHVybiBGQUxTRTsKKworICAvKiBHZXQgYWN0aXZlIHBhZCdzIHJ1bm5pbmcgdGltZSwgaWYgbm8gY29uZmlndXJlZCBzZWdtZW50IHlldCBrZWVwIGF0IC0xICovCisgIGlmIChhY3RpdmVfc2VnLT5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKQorICAgIGFjdGl2ZV9ydW5uaW5nX3RpbWUgPQorICAgICAgICBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKGFjdGl2ZV9zZWcsIEdTVF9GT1JNQVRfVElNRSwKKyAgICAgICAgYWN0aXZlX3NlbHBhZC0+cG9zaXRpb24pOworCisgIC8qIFdhaXQgdW50aWwKKyAgICogICBhKSB0aGlzIGlzIHRoZSBhY3RpdmUgcGFkCisgICAqICAgYikgdGhlIHBhZCBvciB0aGUgc2VsZWN0b3IgaXMgZmx1c2hpbmcKKyAgICogICBjKSB0aGUgc2VsZWN0b3IgaXMgbm90IGJsb2NrZWQKKyAgICogICBkKSB0aGUgYWN0aXZlIHBhZCBoYXMgbm8gcnVubmluZyB0aW1lIG9yIHRoZSBhY3RpdmUKKyAgICogICAgICBwYWQncyBydW5uaW5nIHRpbWUgaXMgYmVmb3JlIHRoaXMgcnVubmluZyB0aW1lCisgICAqICAgZSkgdGhlIGFjdGl2ZSBwYWQgaGFzIGEgbm9uLXRpbWUgc2VnbWVudAorICAgKi8KKyAgd2hpbGUgKHBhZCAhPSBhY3RpdmVfc2VscGFkICYmICFzZWwtPmZsdXNoaW5nICYmICFwYWQtPmZsdXNoaW5nICYmCisgICAgICAoc2VsLT5ibG9ja2VkIHx8IGFjdGl2ZV9ydW5uaW5nX3RpbWUgPT0gLTEKKyAgICAgICAgICB8fCBydW5uaW5nX3RpbWUgPj0gYWN0aXZlX3J1bm5pbmdfdGltZSkpIHsKKyAgICBpZiAoIXNlbC0+YmxvY2tlZCkKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwKKyAgICAgICAgICAiV2FpdGluZyBmb3IgYWN0aXZlIHN0cmVhbXMgdG8gYWR2YW5jZS4gJSIgR1NUX1RJTUVfRk9STUFUICIgPj0gJSIKKyAgICAgICAgICBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKHJ1bm5pbmdfdGltZSksCisgICAgICAgICAgR1NUX1RJTUVfQVJHUyAoYWN0aXZlX3J1bm5pbmdfdGltZSkpOworCisgICAgR1NUX0lOUFVUX1NFTEVDVE9SX1dBSVQgKHNlbCk7CisKKyAgICAvKiBHZXQgbmV3IGFjdGl2ZSBwYWQsIGl0IG1pZ2h0IGhhdmUgY2hhbmdlZCAqLworICAgIGFjdGl2ZV9zaW5rcGFkID0KKyAgICAgICAgZ3N0X2lucHV0X3NlbGVjdG9yX2FjdGl2YXRlX3NpbmtwYWQgKHNlbCwgR1NUX1BBRF9DQVNUIChwYWQpKTsKKyAgICBhY3RpdmVfc2VscGFkID0gR1NUX1NFTEVDVE9SX1BBRF9DQVNUIChhY3RpdmVfc2lua3BhZCk7CisgICAgYWN0aXZlX3NlZyA9ICZhY3RpdmVfc2VscGFkLT5zZWdtZW50OworCisgICAgLyogSWYgdGhlIGFjdGl2ZSBzZWdtZW50IGlzIGNvbmZpZ3VyZWQgYnV0IG5vdCB0byB0aW1lIGZvcm1hdAorICAgICAqIHdlIGNhbid0IGRvIGFueSBzeW5jaW5nIGF0IGFsbCAqLworICAgIGlmIChhY3RpdmVfc2VnLT5mb3JtYXQgIT0gR1NUX0ZPUk1BVF9USU1FCisgICAgICAgICYmIGFjdGl2ZV9zZWctPmZvcm1hdCAhPSBHU1RfRk9STUFUX1VOREVGSU5FRCkKKyAgICAgIGJyZWFrOworCisgICAgLyogR2V0IHRoZSBuZXcgYWN0aXZlIHBhZCBydW5uaW5nIHRpbWUgKi8KKyAgICBpZiAoYWN0aXZlX3NlZy0+Zm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSkKKyAgICAgIGFjdGl2ZV9ydW5uaW5nX3RpbWUgPQorICAgICAgICAgIGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoYWN0aXZlX3NlZywgR1NUX0ZPUk1BVF9USU1FLAorICAgICAgICAgIGFjdGl2ZV9zZWxwYWQtPnBvc2l0aW9uKTsKKyAgICBlbHNlCisgICAgICBhY3RpdmVfcnVubmluZ190aW1lID0gLTE7CisKKyAgICBpZiAoIXNlbC0+YmxvY2tlZCkKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwKKyAgICAgICAgICAiV2FpdGVkIGZvciBhY3RpdmUgc3RyZWFtcyB0byBhZHZhbmNlLiAlIiBHU1RfVElNRV9GT1JNQVQgIiA+PSAlIgorICAgICAgICAgIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAocnVubmluZ190aW1lKSwKKyAgICAgICAgICBHU1RfVElNRV9BUkdTIChhY3RpdmVfcnVubmluZ190aW1lKSk7CisKKyAgfQorCisgIC8qIFJldHVybiBUUlVFIGlmIHRoZSBzZWxlY3RvciBvciB0aGUgcGFkIGlzIGZsdXNoaW5nICovCisgIHJldHVybiAoc2VsLT5mbHVzaGluZyB8fCBwYWQtPmZsdXNoaW5nKTsKK30KKworCitzdGF0aWMgR3N0Rmxvd1JldHVybgorZ3N0X3NlbGVjdG9yX3BhZF9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RCdWZmZXIgKiBidWYpCit7CisgIEdzdElucHV0U2VsZWN0b3IgKnNlbDsKKyAgR3N0Rmxvd1JldHVybiByZXM7CisgIEdzdFBhZCAqYWN0aXZlX3NpbmtwYWQ7CisgIEdzdFBhZCAqcHJldl9hY3RpdmVfc2lua3BhZDsKKyAgR3N0U2VsZWN0b3JQYWQgKnNlbHBhZDsKKyAgR3N0Q2xvY2tUaW1lIHN0YXJ0X3RpbWU7CisgIEdzdFNlZ21lbnQgKnNlZzsKKyAgR3N0RXZlbnQgKnN0YXJ0X2V2ZW50ID0gTlVMTDsKKworICBzZWwgPSBHU1RfSU5QVVRfU0VMRUNUT1IgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7CisgIHNlbHBhZCA9IEdTVF9TRUxFQ1RPUl9QQURfQ0FTVCAocGFkKTsKKyAgc2VnID0gJnNlbHBhZC0+c2VnbWVudDsKKworICBHU1RfSU5QVVRfU0VMRUNUT1JfTE9DSyAoc2VsKTsKKyAgLyogd2FpdCBvciBjaGVjayBmb3IgZmx1c2hpbmcgKi8KKyAgaWYgKGdzdF9pbnB1dF9zZWxlY3Rvcl93YWl0IChzZWwsIHNlbHBhZCkpCisgICAgZ290byBmbHVzaGluZzsKKworICBHU1RfTE9HX09CSkVDVCAocGFkLCAiZ2V0dGluZyBhY3RpdmUgcGFkIik7CisKKyAgcHJldl9hY3RpdmVfc2lua3BhZCA9IHNlbC0+YWN0aXZlX3NpbmtwYWQ7CisgIGFjdGl2ZV9zaW5rcGFkID0gZ3N0X2lucHV0X3NlbGVjdG9yX2FjdGl2YXRlX3NpbmtwYWQgKHNlbCwgcGFkKTsKKworICAvKiBJbiBzeW5jIG1vZGUgd2FpdCB1bnRpbCB0aGUgYWN0aXZlIHBhZCBoYXMgYWR2YW5jZWQKKyAgICogYWZ0ZXIgdGhlIHJ1bm5pbmcgdGltZSBvZiB0aGUgY3VycmVudCBidWZmZXIgKi8KKyAgaWYgKHNlbC0+c3luY19zdHJlYW1zICYmIGFjdGl2ZV9zaW5rcGFkICE9IHBhZCkgeworICAgIGlmIChnc3RfaW5wdXRfc2VsZWN0b3Jfd2FpdF9ydW5uaW5nX3RpbWUgKHNlbCwgc2VscGFkLCBidWYpKQorICAgICAgZ290byBmbHVzaGluZzsKKyAgfQorCisgIC8qIE1pZ2h0IGhhdmUgY2hhbmdlZCB3aGlsZSB3YWl0aW5nICovCisgIGFjdGl2ZV9zaW5rcGFkID0gZ3N0X2lucHV0X3NlbGVjdG9yX2FjdGl2YXRlX3NpbmtwYWQgKHNlbCwgcGFkKTsKKworICAvKiB1cGRhdGUgdGhlIHNlZ21lbnQgb24gdGhlIHNyY3BhZCAqLworICBzdGFydF90aW1lID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1Zik7CisgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoc3RhcnRfdGltZSkpIHsKKyAgICBHU1RfTE9HX09CSkVDVCAocGFkLCAicmVjZWl2ZWQgc3RhcnQgdGltZSAlIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICAgIEdTVF9USU1FX0FSR1MgKHN0YXJ0X3RpbWUpKTsKKyAgICBpZiAoR1NUX0JVRkZFUl9EVVJBVElPTl9JU19WQUxJRCAoYnVmKSkKKyAgICAgIEdTVF9MT0dfT0JKRUNUIChwYWQsICJyZWNlaXZlZCBlbmQgdGltZSAlIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICAgICAgR1NUX1RJTUVfQVJHUyAoc3RhcnRfdGltZSArIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikpKTsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKKyAgICBzZWxwYWQtPnBvc2l0aW9uID0gc3RhcnRfdGltZTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKKyAgfQorCisgIC8qIElnbm9yZSBidWZmZXJzIGZyb20gcGFkcyBleGNlcHQgdGhlIHNlbGVjdGVkIG9uZSAqLworICBpZiAocGFkICE9IGFjdGl2ZV9zaW5rcGFkKQorICAgIGdvdG8gaWdub3JlOworCisgIC8qIFRlbGwgYWxsIG5vbi1hY3RpdmUgcGFkcyB0aGF0IHdlIGFkdmFuY2VkIHRoZSBydW5uaW5nIHRpbWUgKi8KKyAgaWYgKHNlbC0+c3luY19zdHJlYW1zKQorICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9CUk9BRENBU1QgKHNlbCk7CisKKyAgLyogaWYgd2UgaGF2ZSBhIHBlbmRpbmcgc2VnbWVudCwgcHVzaCBpdCBvdXQgbm93ICovCisgIGlmIChHX1VOTElLRUxZIChwcmV2X2FjdGl2ZV9zaW5rcGFkICE9IGFjdGl2ZV9zaW5rcGFkCisgICAgICAgICAgfHwgc2VscGFkLT5zZWdtZW50X3BlbmRpbmcpKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLAorICAgICAgICAicHVzaGluZyBwZW5kaW5nIE5FV1NFR01FTlQgdXBkYXRlICVkLCByYXRlICVsZiwgYXBwbGllZCByYXRlICVsZiwgIgorICAgICAgICAiZm9ybWF0ICVkLCAiICIlIiBHX0dJTlQ2NF9GT1JNQVQgIiAtLSAlIiBHX0dJTlQ2NF9GT1JNQVQgIiwgdGltZSAlIgorICAgICAgICBHX0dJTlQ2NF9GT1JNQVQsIEZBTFNFLCBzZWctPnJhdGUsIHNlZy0+YXBwbGllZF9yYXRlLCBzZWctPmZvcm1hdCwKKyAgICAgICAgc2VnLT5zdGFydCwgc2VnLT5zdG9wLCBzZWctPnRpbWUpOworCisgICAgc3RhcnRfZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKHNlZyk7CisgICAgZ3N0X2V2ZW50X3NldF9zZXFudW0gKHN0YXJ0X2V2ZW50LCBzZWxwYWQtPnNlZ21lbnRfc2VxbnVtKTsKKworICAgIHNlbHBhZC0+c2VnbWVudF9wZW5kaW5nID0gRkFMU0U7CisgIH0KKyAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsKTsKKworICBpZiAocHJldl9hY3RpdmVfc2lua3BhZCAhPSBhY3RpdmVfc2lua3BhZCAmJiBwYWQgPT0gYWN0aXZlX3NpbmtwYWQpIHsKKyAgICBOT1RJRllfTVVURVhfTE9DSyAoKTsKKyAgICBnX29iamVjdF9ub3RpZnkgKEdfT0JKRUNUIChzZWwpLCAiYWN0aXZlLXBhZCIpOworICAgIE5PVElGWV9NVVRFWF9VTkxPQ0sgKCk7CisgIH0KKworICBpZiAoc3RhcnRfZXZlbnQpCisgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzZWwtPnNyY3BhZCwgc3RhcnRfZXZlbnQpOworCisgIGlmIChzZWxwYWQtPmRpc2NvbnQpIHsKKyAgICBidWYgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKGJ1Zik7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJNYXJraW5nIGRpc2NvbnQgYnVmZmVyICVwIiwgYnVmKTsKKyAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWYsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKTsKKyAgICBzZWxwYWQtPmRpc2NvbnQgPSBGQUxTRTsKKyAgfQorCisgIC8qIGZvcndhcmQgKi8KKyAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgIkZvcndhcmRpbmcgYnVmZmVyICVwIiwgYnVmKTsKKworICByZXMgPSBnc3RfcGFkX3B1c2ggKHNlbC0+c3JjcGFkLCBidWYpOworICBzZWxwYWQtPnB1c2hlZCA9IFRSVUU7CisKK2RvbmU6CisgIGdzdF9vYmplY3RfdW5yZWYgKHNlbCk7CisgIHJldHVybiByZXM7CisKKyAgLyogZHJvcHBlZCBidWZmZXJzICovCitpZ25vcmU6CisgIHsKKyAgICBnYm9vbGVhbiBhY3RpdmVfcGFkX3B1c2hlZCA9IEdTVF9TRUxFQ1RPUl9QQURfQ0FTVCAoYWN0aXZlX3NpbmtwYWQpLT5wdXNoZWQ7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJQYWQgbm90IGFjdGl2ZSwgZGlzY2FyZCBidWZmZXIgJXAiLCBidWYpOworICAgIC8qIHdoZW4gd2UgZHJvcCBhIGJ1ZmZlciwgd2UncmUgY3JlYXRpbmcgYSBkaXNjb250IG9uIHRoaXMgcGFkICovCisgICAgc2VscGFkLT5kaXNjb250ID0gVFJVRTsKKyAgICBHU1RfSU5QVVRfU0VMRUNUT1JfVU5MT0NLIChzZWwpOworICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7CisKKyAgICAvKiBmaWd1cmUgb3V0IHdoYXQgdG8gcmV0dXJuIHVwc3RyZWFtICovCisgICAgR1NUX09CSkVDVF9MT0NLIChzZWxwYWQpOworICAgIGlmIChzZWxwYWQtPmFsd2F5c19vayB8fCAhYWN0aXZlX3BhZF9wdXNoZWQpCisgICAgICByZXMgPSBHU1RfRkxPV19PSzsKKyAgICBlbHNlCisgICAgICByZXMgPSBHU1RfRkxPV19OT1RfTElOS0VEOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzZWxwYWQpOworCisgICAgZ290byBkb25lOworICB9CitmbHVzaGluZzoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIldlIGFyZSBmbHVzaGluZywgZGlzY2FyZCBidWZmZXIgJXAiLCBidWYpOworICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9VTkxPQ0sgKHNlbCk7CisgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKKyAgICByZXMgPSBHU1RfRkxPV19XUk9OR19TVEFURTsKKyAgICBnb3RvIGRvbmU7CisgIH0KK30KKworc3RhdGljIHZvaWQgZ3N0X2lucHV0X3NlbGVjdG9yX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOworCitzdGF0aWMgdm9pZCBnc3RfaW5wdXRfc2VsZWN0b3Jfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAorICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOworc3RhdGljIHZvaWQgZ3N0X2lucHV0X3NlbGVjdG9yX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKKyAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKKworc3RhdGljIEdzdFBhZCAqZ3N0X2lucHV0X3NlbGVjdG9yX3JlcXVlc3RfbmV3X3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCisgICAgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCwgY29uc3QgZ2NoYXIgKiB1bnVzZWQsIGNvbnN0IEdzdENhcHMgKiBjYXBzKTsKK3N0YXRpYyB2b2lkIGdzdF9pbnB1dF9zZWxlY3Rvcl9yZWxlYXNlX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFBhZCAqIHBhZCk7CisKK3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfaW5wdXRfc2VsZWN0b3JfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICoKKyAgICBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKKworc3RhdGljIEdzdENhcHMgKmdzdF9pbnB1dF9zZWxlY3Rvcl9nZXRjYXBzIChHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBmaWx0ZXIpOworc3RhdGljIGdib29sZWFuIGdzdF9pbnB1dF9zZWxlY3Rvcl9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfaW5wdXRfc2VsZWN0b3JfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0UXVlcnkgKiBxdWVyeSk7CitzdGF0aWMgZ2ludDY0IGdzdF9pbnB1dF9zZWxlY3Rvcl9ibG9jayAoR3N0SW5wdXRTZWxlY3RvciAqIHNlbGYpOworCisvKiBGSVhNRTogY3JlYXRlIHRoZXNlIG1hcnNoYWxsZXJzIHVzaW5nIGdsaWItZ2VubWFyc2hhbCAqLworc3RhdGljIHZvaWQKK2dzdF9pbnB1dF9zZWxlY3Rvcl9tYXJzaGFsX0lOVDY0X19WT0lEIChHQ2xvc3VyZSAqIGNsb3N1cmUsCisgICAgR1ZhbHVlICogcmV0dXJuX3ZhbHVlIEdfR05VQ19VTlVTRUQsCisgICAgZ3VpbnQgbl9wYXJhbV92YWx1ZXMsCisgICAgY29uc3QgR1ZhbHVlICogcGFyYW1fdmFsdWVzLAorICAgIGdwb2ludGVyIGludm9jYXRpb25faGludCBHX0dOVUNfVU5VU0VELCBncG9pbnRlciBtYXJzaGFsX2RhdGEpCit7CisgIHR5cGVkZWYgZ2ludDY0ICgqR01hcnNoYWxGdW5jX0lOVDY0X19WT0lEKSAoZ3BvaW50ZXIgZGF0YTEsIGdwb2ludGVyIGRhdGEyKTsKKyAgcmVnaXN0ZXIgR01hcnNoYWxGdW5jX0lOVDY0X19WT0lEIGNhbGxiYWNrOworICByZWdpc3RlciBHQ0Nsb3N1cmUgKmNjID0gKEdDQ2xvc3VyZSAqKSBjbG9zdXJlOworICByZWdpc3RlciBncG9pbnRlciBkYXRhMSwgZGF0YTI7CisgIGdpbnQ2NCB2X3JldHVybjsKKworICBnX3JldHVybl9pZl9mYWlsIChyZXR1cm5fdmFsdWUgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKG5fcGFyYW1fdmFsdWVzID09IDEpOworCisgIGlmIChHX0NDTE9TVVJFX1NXQVBfREFUQSAoY2xvc3VyZSkpIHsKKyAgICBkYXRhMSA9IGNsb3N1cmUtPmRhdGE7CisgICAgZGF0YTIgPSBnX3ZhbHVlX3BlZWtfcG9pbnRlciAocGFyYW1fdmFsdWVzICsgMCk7CisgIH0gZWxzZSB7CisgICAgZGF0YTEgPSBnX3ZhbHVlX3BlZWtfcG9pbnRlciAocGFyYW1fdmFsdWVzICsgMCk7CisgICAgZGF0YTIgPSBjbG9zdXJlLT5kYXRhOworICB9CisgIGNhbGxiYWNrID0KKyAgICAgIChHTWFyc2hhbEZ1bmNfSU5UNjRfX1ZPSUQpIChtYXJzaGFsX2RhdGEgPyBtYXJzaGFsX2RhdGEgOiBjYy0+Y2FsbGJhY2spOworCisgIHZfcmV0dXJuID0gY2FsbGJhY2sgKGRhdGExLCBkYXRhMik7CisKKyAgZ192YWx1ZV9zZXRfaW50NjQgKHJldHVybl92YWx1ZSwgdl9yZXR1cm4pOworfQorCisjZGVmaW5lIF9kb19pbml0IFwKKyAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoaW5wdXRfc2VsZWN0b3JfZGVidWcsIFwKKyAgICAgICAgImlucHV0LXNlbGVjdG9yIiwgMCwgIkFuIGlucHV0IHN0cmVhbSBzZWxlY3RvciBlbGVtZW50Iik7CisjZGVmaW5lIGdzdF9pbnB1dF9zZWxlY3Rvcl9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0SW5wdXRTZWxlY3RvciwgZ3N0X2lucHV0X3NlbGVjdG9yLCBHU1RfVFlQRV9FTEVNRU5ULAorICAgIF9kb19pbml0KTsKKworc3RhdGljIHZvaWQKK2dzdF9pbnB1dF9zZWxlY3Rvcl9jbGFzc19pbml0IChHc3RJbnB1dFNlbGVjdG9yQ2xhc3MgKiBrbGFzcykKK3sKKyAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKKyAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKKworICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3N0X2lucHV0X3NlbGVjdG9yX2Rpc3Bvc2U7CisKKyAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2lucHV0X3NlbGVjdG9yX3NldF9wcm9wZXJ0eTsKKyAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2lucHV0X3NlbGVjdG9yX2dldF9wcm9wZXJ0eTsKKworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX05fUEFEUywKKyAgICAgIGdfcGFyYW1fc3BlY191aW50ICgibi1wYWRzIiwgIk51bWJlciBvZiBQYWRzIiwKKyAgICAgICAgICAiVGhlIG51bWJlciBvZiBzaW5rIHBhZHMiLCAwLCBHX01BWFVJTlQsIDAsCisgICAgICAgICAgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0FDVElWRV9QQUQsCisgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0ICgiYWN0aXZlLXBhZCIsICJBY3RpdmUgcGFkIiwKKyAgICAgICAgICAiVGhlIGN1cnJlbnRseSBhY3RpdmUgc2luayBwYWQiLCBHU1RfVFlQRV9QQUQsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisKKyAgLyoqCisgICAqIEdzdElucHV0U2VsZWN0b3I6c3luYy1zdHJlYW1zCisgICAqCisgICAqIElmIHNldCB0byAlVFJVRSBhbGwgaW5hY3RpdmUgc3RyZWFtcyB3aWxsIGJlIHN5bmNlZCB0byB0aGUKKyAgICogcnVubmluZyB0aW1lIG9mIHRoZSBhY3RpdmUgc3RyZWFtLiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBubworICAgKiBidWZmZXJzIGFyZSBkcm9wcGVkIGJ5IGlucHV0LXNlbGVjdG9yIHRoYXQgbWlnaHQgYmUgbmVlZGVkCisgICAqIHdoZW4gc3dpdGNoaW5nIHRoZSBhY3RpdmUgcGFkLgorICAgKgorICAgKiBTaW5jZTogMC4xMC4zNQorICAgKi8KKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TWU5DX1NUUkVBTVMsCisgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInN5bmMtc3RyZWFtcyIsICJTeW5jIFN0cmVhbXMiLAorICAgICAgICAgICJTeW5jaHJvbml6ZSBpbmFjdGl2ZSBzdHJlYW1zIHRvIHRoZSBydW5uaW5nIHRpbWUgb2YgdGhlIGFjdGl2ZSBzdHJlYW0iLAorICAgICAgICAgIERFRkFVTFRfU1lOQ19TVFJFQU1TLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKworICAvKioKKyAgICogR3N0SW5wdXRTZWxlY3Rvcjo6YmxvY2s6CisgICAqIEBpbnB1dHNlbGVjdG9yOiB0aGUgI0dzdElucHV0U2VsZWN0b3IKKyAgICoKKyAgICogQmxvY2sgYWxsIHNpbmsgcGFkcyBpbiBwcmVwYXJhdGlvbiBmb3IgYSBzd2l0Y2guIFJldHVybnMgdGhlIHN0b3AgdGltZSBvZgorICAgKiB0aGUgY3VycmVudCBzd2l0Y2ggc2VnbWVudCwgYXMgYSBydW5uaW5nIHRpbWUsIG9yIDAgaWYgdGhlcmUgaXMgbm8gY3VycmVudAorICAgKiBhY3RpdmUgcGFkIG9yIHRoZSBjdXJyZW50IGFjdGl2ZSBwYWQgbmV2ZXIgcmVjZWl2ZWQgZGF0YS4KKyAgICovCisgIGdzdF9pbnB1dF9zZWxlY3Rvcl9zaWduYWxzW1NJR05BTF9CTE9DS10gPQorICAgICAgZ19zaWduYWxfbmV3ICgiYmxvY2siLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAorICAgICAgR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04sCisgICAgICBHX1NUUlVDVF9PRkZTRVQgKEdzdElucHV0U2VsZWN0b3JDbGFzcywgYmxvY2spLCBOVUxMLCBOVUxMLAorICAgICAgZ3N0X2lucHV0X3NlbGVjdG9yX21hcnNoYWxfSU5UNjRfX1ZPSUQsIEdfVFlQRV9JTlQ2NCwgMCk7CisKKyAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2ltcGxlIChnc3RlbGVtZW50X2NsYXNzLCAiSW5wdXQgc2VsZWN0b3IiLAorICAgICAgIkdlbmVyaWMiLCAiTi10by0xIGlucHV0IHN0cmVhbSBzZWxlY3RvciIsCisgICAgICAiSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+LCAiCisgICAgICAiSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+LCAiCisgICAgICAiV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4iKTsKKyAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKKyAgICAgIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoJmdzdF9pbnB1dF9zZWxlY3Rvcl9zaW5rX2ZhY3RvcnkpKTsKKyAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKKyAgICAgIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoJmdzdF9pbnB1dF9zZWxlY3Rvcl9zcmNfZmFjdG9yeSkpOworCisgIGdzdGVsZW1lbnRfY2xhc3MtPnJlcXVlc3RfbmV3X3BhZCA9IGdzdF9pbnB1dF9zZWxlY3Rvcl9yZXF1ZXN0X25ld19wYWQ7CisgIGdzdGVsZW1lbnRfY2xhc3MtPnJlbGVhc2VfcGFkID0gZ3N0X2lucHV0X3NlbGVjdG9yX3JlbGVhc2VfcGFkOworICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBnc3RfaW5wdXRfc2VsZWN0b3JfY2hhbmdlX3N0YXRlOworCisgIGtsYXNzLT5ibG9jayA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfaW5wdXRfc2VsZWN0b3JfYmxvY2spOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2lucHV0X3NlbGVjdG9yX2luaXQgKEdzdElucHV0U2VsZWN0b3IgKiBzZWwpCit7CisgIHNlbC0+c3JjcGFkID0gZ3N0X3BhZF9uZXcgKCJzcmMiLCBHU1RfUEFEX1NSQyk7CisgIGdzdF9wYWRfc2V0X2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZnVuY3Rpb24gKHNlbC0+c3JjcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zZWxlY3Rvcl9wYWRfaXRlcmF0ZV9saW5rZWRfcGFkcykpOworICBnc3RfcGFkX3NldF9nZXRjYXBzX2Z1bmN0aW9uIChzZWwtPnNyY3BhZCwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfaW5wdXRfc2VsZWN0b3JfZ2V0Y2FwcykpOworICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAoc2VsLT5zcmNwYWQsCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2lucHV0X3NlbGVjdG9yX3F1ZXJ5KSk7CisgIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChzZWwtPnNyY3BhZCwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfaW5wdXRfc2VsZWN0b3JfZXZlbnQpKTsKKyAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKHNlbCksIHNlbC0+c3JjcGFkKTsKKyAgLyogc2lua3BhZCBtYW5hZ2VtZW50ICovCisgIHNlbC0+YWN0aXZlX3NpbmtwYWQgPSBOVUxMOworICBzZWwtPnBhZGNvdW50ID0gMDsKKyAgc2VsLT5zeW5jX3N0cmVhbXMgPSBERUZBVUxUX1NZTkNfU1RSRUFNUzsKKworICBzZWwtPmxvY2sgPSBnX211dGV4X25ldyAoKTsKKyAgc2VsLT5jb25kID0gZ19jb25kX25ldyAoKTsKKyAgc2VsLT5ibG9ja2VkID0gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfaW5wdXRfc2VsZWN0b3JfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCkKK3sKKyAgR3N0SW5wdXRTZWxlY3RvciAqc2VsID0gR1NUX0lOUFVUX1NFTEVDVE9SIChvYmplY3QpOworCisgIGlmIChzZWwtPmFjdGl2ZV9zaW5rcGFkKSB7CisgICAgZ3N0X29iamVjdF91bnJlZiAoc2VsLT5hY3RpdmVfc2lua3BhZCk7CisgICAgc2VsLT5hY3RpdmVfc2lua3BhZCA9IE5VTEw7CisgIH0KKyAgaWYgKHNlbC0+bG9jaykgeworICAgIGdfbXV0ZXhfZnJlZSAoc2VsLT5sb2NrKTsKKyAgICBzZWwtPmxvY2sgPSBOVUxMOworICB9CisgIGlmIChzZWwtPmNvbmQpIHsKKyAgICBnX2NvbmRfZnJlZSAoc2VsLT5jb25kKTsKKyAgICBzZWwtPmNvbmQgPSBOVUxMOworICB9CisKKyAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iamVjdCk7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgU0VMRUNUT1JfTE9DSy4gSXQgcmV0dXJucyBUUlVFIHdoZW4gdGhlCisgKiBhY3RpdmUgcGFkIGNoYW5nZWQuICovCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9pbnB1dF9zZWxlY3Rvcl9zZXRfYWN0aXZlX3BhZCAoR3N0SW5wdXRTZWxlY3RvciAqIHNlbGYsIEdzdFBhZCAqIHBhZCkKK3sKKyAgR3N0U2VsZWN0b3JQYWQgKm9sZCwgKm5ldzsKKyAgR3N0UGFkICoqYWN0aXZlX3BhZF9wOworCisgIGlmIChwYWQgPT0gc2VsZi0+YWN0aXZlX3NpbmtwYWQpCisgICAgcmV0dXJuIEZBTFNFOworCisgIG9sZCA9IEdTVF9TRUxFQ1RPUl9QQURfQ0FTVCAoc2VsZi0+YWN0aXZlX3NpbmtwYWQpOworICBuZXcgPSBHU1RfU0VMRUNUT1JfUEFEX0NBU1QgKHBhZCk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgInNldHRpbmcgYWN0aXZlIHBhZCB0byAlczolcyIsCisgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKG5ldykpOworCisgIGlmIChvbGQpCisgICAgb2xkLT5wdXNoZWQgPSBGQUxTRTsKKyAgaWYgKG5ldykKKyAgICBuZXctPnB1c2hlZCA9IEZBTFNFOworCisgIC8qIFNlbmQgYSBuZXcgU0VHTUVOVCBldmVudCBvbiB0aGUgbmV3IHBhZCBuZXh0ICovCisgIGlmIChvbGQgIT0gbmV3ICYmIG5ldykKKyAgICBuZXctPnNlZ21lbnRfcGVuZGluZyA9IFRSVUU7CisKKyAgYWN0aXZlX3BhZF9wID0gJnNlbGYtPmFjdGl2ZV9zaW5rcGFkOworICBnc3Rfb2JqZWN0X3JlcGxhY2UgKChHc3RPYmplY3QgKiopIGFjdGl2ZV9wYWRfcCwgR1NUX09CSkVDVF9DQVNUIChwYWQpKTsKKworICAvKiBXYWtlIHVwIGFsbCBub24tYWN0aXZlIHBhZHMgaW4gc3luYyBtb2RlLCB0aGV5IG1pZ2h0IGJlCisgICAqIHRoZSBhY3RpdmUgcGFkIG5vdyAqLworICBpZiAoc2VsZi0+c3luY19zdHJlYW1zKQorICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9CUk9BRENBU1QgKHNlbGYpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJOZXcgYWN0aXZlIHBhZCBpcyAlIiBHU1RfUFRSX0ZPUk1BVCwKKyAgICAgIHNlbGYtPmFjdGl2ZV9zaW5rcGFkKTsKKworICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9pbnB1dF9zZWxlY3Rvcl9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgR3N0SW5wdXRTZWxlY3RvciAqc2VsID0gR1NUX0lOUFVUX1NFTEVDVE9SIChvYmplY3QpOworCisgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9BQ1RJVkVfUEFEOgorICAgIHsKKyAgICAgIEdzdFBhZCAqcGFkOworCisgICAgICBwYWQgPSBnX3ZhbHVlX2dldF9vYmplY3QgKHZhbHVlKTsKKworICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0sgKHNlbCk7CisgICAgICBnc3RfaW5wdXRfc2VsZWN0b3Jfc2V0X2FjdGl2ZV9wYWQgKHNlbCwgcGFkKTsKKyAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9VTkxPQ0sgKHNlbCk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1NZTkNfU1RSRUFNUzoKKyAgICB7CisgICAgICBHU1RfSU5QVVRfU0VMRUNUT1JfTE9DSyAoc2VsKTsKKyAgICAgIHNlbC0+c3luY19zdHJlYW1zID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOworICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfaW5wdXRfc2VsZWN0b3JfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIEdzdElucHV0U2VsZWN0b3IgKnNlbCA9IEdTVF9JTlBVVF9TRUxFQ1RPUiAob2JqZWN0KTsKKworICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfTl9QQURTOgorICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0sgKG9iamVjdCk7CisgICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgc2VsLT5uX3BhZHMpOworICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAob2JqZWN0KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BQ1RJVkVfUEFEOgorICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0sgKG9iamVjdCk7CisgICAgICBnX3ZhbHVlX3NldF9vYmplY3QgKHZhbHVlLCBzZWwtPmFjdGl2ZV9zaW5rcGFkKTsKKyAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9VTkxPQ0sgKG9iamVjdCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1lOQ19TVFJFQU1TOgorICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0sgKG9iamVjdCk7CisgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgc2VsLT5zeW5jX3N0cmVhbXMpOworICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAob2JqZWN0KTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KK30KKworc3RhdGljIEdzdFBhZCAqCitnc3RfaW5wdXRfc2VsZWN0b3JfZ2V0X2xpbmtlZF9wYWQgKEdzdElucHV0U2VsZWN0b3IgKiBzZWwsIEdzdFBhZCAqIHBhZCwKKyAgICBnYm9vbGVhbiBzdHJpY3QpCit7CisgIEdzdFBhZCAqb3RoZXJwYWQgPSBOVUxMOworCisgIEdTVF9JTlBVVF9TRUxFQ1RPUl9MT0NLIChzZWwpOworICBpZiAocGFkID09IHNlbC0+c3JjcGFkKQorICAgIG90aGVycGFkID0gc2VsLT5hY3RpdmVfc2lua3BhZDsKKyAgZWxzZSBpZiAocGFkID09IHNlbC0+YWN0aXZlX3NpbmtwYWQgfHwgIXN0cmljdCkKKyAgICBvdGhlcnBhZCA9IHNlbC0+c3JjcGFkOworICBpZiAob3RoZXJwYWQpCisgICAgZ3N0X29iamVjdF9yZWYgKG90aGVycGFkKTsKKyAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsKTsKKworICByZXR1cm4gb3RoZXJwYWQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2lucHV0X3NlbGVjdG9yX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpCit7CisgIEdzdElucHV0U2VsZWN0b3IgKnNlbDsKKyAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisgIEdzdEl0ZXJhdG9yICppdGVyOworICBnYm9vbGVhbiBkb25lID0gRkFMU0U7CisgIEdWYWx1ZSBpdGVtID0geyAwLCB9OworICBHc3RQYWQgKmV2ZW50cGFkOworICBHTGlzdCAqcHVzaGVkX3BhZHMgPSBOVUxMOworCisgIHNlbCA9IEdTVF9JTlBVVF9TRUxFQ1RPUiAoZ3N0X3BhZF9nZXRfcGFyZW50IChwYWQpKTsKKyAgaWYgKEdfVU5MSUtFTFkgKHNlbCA9PSBOVUxMKSkgeworICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorCisgIC8qIFNlbmQgdXBzdHJlYW0gZXZlbnRzIHRvIGFsbCBzaW5rcGFkcyAqLworICBpdGVyID0gZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zaW5rX3BhZHMgKEdTVF9FTEVNRU5UX0NBU1QgKHNlbCkpOworCisgIC8qIFRoaXMgaXMgbm93IGVzc2VudGlhbGx5IGEgY29weSBvZiBnc3RfcGFkX2V2ZW50X2RlZmF1bHRfZGlzcGF0Y2gKKyAgICogd2l0aCBhIGRpZmZlcmVudCBpdGVyYXRvciAqLworICB3aGlsZSAoIWRvbmUpIHsKKyAgICBzd2l0Y2ggKGdzdF9pdGVyYXRvcl9uZXh0IChpdGVyLCAmaXRlbSkpIHsKKyAgICAgIGNhc2UgR1NUX0lURVJBVE9SX09LOgorICAgICAgICBldmVudHBhZCA9IGdfdmFsdWVfZ2V0X29iamVjdCAoJml0ZW0pOworCisgICAgICAgIC8qIGlmIGFscmVhZHkgcHVzaGVkLCAgc2tpcCAqLworICAgICAgICBpZiAoZ19saXN0X2ZpbmQgKHB1c2hlZF9wYWRzLCBldmVudHBhZCkpIHsKKyAgICAgICAgICBnX3ZhbHVlX3Jlc2V0ICgmaXRlbSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBnc3RfZXZlbnRfcmVmIChldmVudCk7CisgICAgICAgIHJlc3VsdCB8PSBnc3RfcGFkX3B1c2hfZXZlbnQgKGV2ZW50cGFkLCBldmVudCk7CisKKyAgICAgICAgZ192YWx1ZV9yZXNldCAoJml0ZW0pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR1NUX0lURVJBVE9SX1JFU1lOQzoKKyAgICAgICAgLyogV2UgZG9uJ3QgcmVzZXQgdGhlIHJlc3VsdCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgcHVzaCB0aGUgZXZlbnQKKyAgICAgICAgICogYWdhaW4gb24gcGFkcyB0aGF0IGdvdCB0aGUgZXZlbnQgYWxyZWFkeSBhbmQgYmVjYXVzZSB3ZSBuZWVkCisgICAgICAgICAqIHRvIGNvbnNpZGVyIHRoZSByZXN1bHQgb2YgdGhlIHByZXZpb3VzIHB1c2hlcyAqLworICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jIChpdGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9FUlJPUjoKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVCAocGFkLCAiQ291bGQgbm90IGl0ZXJhdGUgb3ZlciBzaW5rcGFkcyIpOworICAgICAgICBkb25lID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgorICAgICAgICBkb25lID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGdfdmFsdWVfdW5zZXQgKCZpdGVtKTsKKyAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0ZXIpOworCisgIGdfbGlzdF9mcmVlIChwdXNoZWRfcGFkcyk7CisKKyAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogcXVlcnkgb24gdGhlIHNyY3BhZC4gV2Ugb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiBiZWNhdXNlIGJ5IGRlZmF1bHQgaXQgd2lsbAorICogb25seSBmb3J3YXJkIHRoZSBxdWVyeSB0byBvbmUgcmFuZG9tIHNpbmtwYWQgKi8KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2lucHV0X3NlbGVjdG9yX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdFF1ZXJ5ICogcXVlcnkpCit7CisgIGdib29sZWFuIHJlcyA9IFRSVUU7CisgIEdzdElucHV0U2VsZWN0b3IgKnNlbDsKKyAgR3N0UGFkICpvdGhlcnBhZDsKKworICBzZWwgPSBHU1RfSU5QVVRfU0VMRUNUT1IgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7CisgIGlmIChHX1VOTElLRUxZIChzZWwgPT0gTlVMTCkpCisgICAgcmV0dXJuIEZBTFNFOworCisgIG90aGVycGFkID0gZ3N0X2lucHV0X3NlbGVjdG9yX2dldF9saW5rZWRfcGFkIChzZWwsIHBhZCwgVFJVRSk7CisKKyAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7CisgICAgY2FzZSBHU1RfUVVFUllfTEFURU5DWToKKyAgICB7CisgICAgICBHTGlzdCAqd2FsazsKKyAgICAgIEdzdENsb2NrVGltZSByZXNtaW4sIHJlc21heDsKKyAgICAgIGdib29sZWFuIHJlc2xpdmU7CisKKyAgICAgIHJlc21pbiA9IDA7CisgICAgICByZXNtYXggPSAtMTsKKyAgICAgIHJlc2xpdmUgPSBGQUxTRTsKKworICAgICAgLyogYXNzdW1lIEZBTFNFLCB3ZSBiZWNvbWUgVFJVRSBpZiBvbmUgcXVlcnkgc3VjY2VlZHMgKi8KKyAgICAgIHJlcyA9IEZBTFNFOworCisgICAgICAvKiBwZXJmb3JtIHRoZSBxdWVyeSBvbiBhbGwgc2lua3BhZHMgYW5kIGNvbWJpbmUgdGhlIHJlc3VsdHMuIFdlIHRha2UgdGhlCisgICAgICAgKiBtYXggb2YgbWluIGFuZCB0aGUgbWluIG9mIG1heCBmb3IgdGhlIHJlc3VsdCBsYXRlbmN5LiAqLworICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0sgKHNlbCk7CisgICAgICBmb3IgKHdhbGsgPSBHU1RfRUxFTUVOVF9DQVNUIChzZWwpLT5zaW5rcGFkczsgd2FsazsKKyAgICAgICAgICB3YWxrID0gZ19saXN0X25leHQgKHdhbGspKSB7CisgICAgICAgIEdzdFBhZCAqc2lua3BhZCA9IEdTVF9QQURfQ0FTVCAod2Fsay0+ZGF0YSk7CisKKyAgICAgICAgaWYgKGdzdF9wYWRfcGVlcl9xdWVyeSAoc2lua3BhZCwgcXVlcnkpKSB7CisgICAgICAgICAgR3N0Q2xvY2tUaW1lIG1pbiwgbWF4OworICAgICAgICAgIGdib29sZWFuIGxpdmU7CisKKyAgICAgICAgICAvKiBvbmUgcXVlcnkgc3VjY2VlZGVkLCB3ZSBzdWNjZWVkIHRvbyAqLworICAgICAgICAgIHJlcyA9IFRSVUU7CisKKyAgICAgICAgICBnc3RfcXVlcnlfcGFyc2VfbGF0ZW5jeSAocXVlcnksICZsaXZlLCAmbWluLCAmbWF4KTsKKworICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmtwYWQsCisgICAgICAgICAgICAgICJwZWVyIGxhdGVuY3kgbWluICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBtYXggJSIgR1NUX1RJTUVfRk9STUFUCisgICAgICAgICAgICAgICIsIGxpdmUgJWQiLCBHU1RfVElNRV9BUkdTIChtaW4pLCBHU1RfVElNRV9BUkdTIChtYXgpLCBsaXZlKTsKKworICAgICAgICAgIGlmIChsaXZlKSB7CisgICAgICAgICAgICBpZiAobWluID4gcmVzbWluKQorICAgICAgICAgICAgICByZXNtaW4gPSBtaW47CisgICAgICAgICAgICBpZiAocmVzbWF4ID09IC0xKQorICAgICAgICAgICAgICByZXNtYXggPSBtYXg7CisgICAgICAgICAgICBlbHNlIGlmIChtYXggPCByZXNtYXgpCisgICAgICAgICAgICAgIHJlc21heCA9IG1heDsKKyAgICAgICAgICAgIGlmIChyZXNsaXZlID09IEZBTFNFKQorICAgICAgICAgICAgICByZXNsaXZlID0gbGl2ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9VTkxPQ0sgKHNlbCk7CisgICAgICBpZiAocmVzKSB7CisgICAgICAgIGdzdF9xdWVyeV9zZXRfbGF0ZW5jeSAocXVlcnksIHJlc2xpdmUsIHJlc21pbiwgcmVzbWF4KTsKKworICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWwsCisgICAgICAgICAgICAidG90YWwgbGF0ZW5jeSBtaW4gJSIgR1NUX1RJTUVfRk9STUFUICIsIG1heCAlIiBHU1RfVElNRV9GT1JNQVQKKyAgICAgICAgICAgICIsIGxpdmUgJWQiLCBHU1RfVElNRV9BUkdTIChyZXNtaW4pLCBHU1RfVElNRV9BUkdTIChyZXNtYXgpLAorICAgICAgICAgICAgcmVzbGl2ZSk7CisgICAgICB9CisKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgaWYgKG90aGVycGFkKQorICAgICAgICByZXMgPSBnc3RfcGFkX3BlZXJfcXVlcnkgKG90aGVycGFkLCBxdWVyeSk7CisgICAgICBicmVhazsKKyAgfQorICBpZiAob3RoZXJwYWQpCisgICAgZ3N0X29iamVjdF91bnJlZiAob3RoZXJwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChzZWwpOworCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBHc3RDYXBzICoKK2dzdF9pbnB1dF9zZWxlY3Rvcl9nZXRjYXBzIChHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBmaWx0ZXIpCit7CisgIEdzdFBhZCAqb3RoZXJwYWQ7CisgIEdzdElucHV0U2VsZWN0b3IgKnNlbDsKKyAgR3N0Q2FwcyAqY2FwczsKKworICBzZWwgPSBHU1RfSU5QVVRfU0VMRUNUT1IgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7CisgIGlmIChHX1VOTElLRUxZIChzZWwgPT0gTlVMTCkpCisgICAgcmV0dXJuIChmaWx0ZXIgPyBnc3RfY2Fwc19yZWYgKGZpbHRlcikgOiBnc3RfY2Fwc19uZXdfYW55ICgpKTsKKworICBvdGhlcnBhZCA9IGdzdF9pbnB1dF9zZWxlY3Rvcl9nZXRfbGlua2VkX3BhZCAoc2VsLCBwYWQsIEZBTFNFKTsKKworICBpZiAoIW90aGVycGFkKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiUGFkIG5vdCBsaW5rZWQsIHJldHVybmluZyBBTlkiKTsKKyAgICBjYXBzID0gKGZpbHRlciA/IGdzdF9jYXBzX3JlZiAoZmlsdGVyKSA6IGdzdF9jYXBzX25ld19hbnkgKCkpOworICB9IGVsc2UgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIlBhZCBpcyBsaW5rZWQgKHRvICVzOiVzKSwgcmV0dXJuaW5nIHBlZXIgY2FwcyIsCisgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAob3RoZXJwYWQpKTsKKyAgICAvKiBpZiB0aGUgcGVlciBoYXMgY2FwcywgdXNlIHRob3NlLiBJZiB0aGUgcGFkIGlzIG5vdCBsaW5rZWQsIHRoaXMgZnVuY3Rpb24KKyAgICAgKiByZXR1cm5zIE5VTEwgYW5kIHdlIHJldHVybiBBTlkgKi8KKyAgICBpZiAoIShjYXBzID0gZ3N0X3BhZF9wZWVyX2dldF9jYXBzIChvdGhlcnBhZCwgZmlsdGVyKSkpCisgICAgICBjYXBzID0gKGZpbHRlciA/IGdzdF9jYXBzX3JlZiAoZmlsdGVyKSA6IGdzdF9jYXBzX25ld19hbnkgKCkpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKG90aGVycGFkKTsKKyAgfQorCisgIGdzdF9vYmplY3RfdW5yZWYgKHNlbCk7CisgIHJldHVybiBjYXBzOworfQorCisvKiBjaGVjayBpZiB0aGUgcGFkIGlzIHRoZSBhY3RpdmUgc2lua3BhZCAqLworc3RhdGljIGlubGluZSBnYm9vbGVhbgorZ3N0X2lucHV0X3NlbGVjdG9yX2lzX2FjdGl2ZV9zaW5rcGFkIChHc3RJbnB1dFNlbGVjdG9yICogc2VsLCBHc3RQYWQgKiBwYWQpCit7CisgIGdib29sZWFuIHJlczsKKworICBHU1RfSU5QVVRfU0VMRUNUT1JfTE9DSyAoc2VsKTsKKyAgcmVzID0gKHBhZCA9PSBzZWwtPmFjdGl2ZV9zaW5rcGFkKTsKKyAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsKTsKKworICByZXR1cm4gcmVzOworfQorCisvKiBHZXQgb3IgY3JlYXRlIHRoZSBhY3RpdmUgc2lua3BhZCwgbXVzdCBiZSBjYWxsZWQgd2l0aCBTRUxFQ1RPUl9MT0NLICovCitzdGF0aWMgR3N0UGFkICoKK2dzdF9pbnB1dF9zZWxlY3Rvcl9hY3RpdmF0ZV9zaW5rcGFkIChHc3RJbnB1dFNlbGVjdG9yICogc2VsLCBHc3RQYWQgKiBwYWQpCit7CisgIEdzdFBhZCAqYWN0aXZlX3NpbmtwYWQ7CisgIEdzdFNlbGVjdG9yUGFkICpzZWxwYWQ7CisKKyAgc2VscGFkID0gR1NUX1NFTEVDVE9SX1BBRF9DQVNUIChwYWQpOworCisgIHNlbHBhZC0+YWN0aXZlID0gVFJVRTsKKyAgYWN0aXZlX3NpbmtwYWQgPSBzZWwtPmFjdGl2ZV9zaW5rcGFkOworICBpZiAoYWN0aXZlX3NpbmtwYWQgPT0gTlVMTCkgeworICAgIC8qIGZpcnN0IHBhZCB3ZSBnZXQgYWN0aXZpdHkgb24gYmVjb21lcyB0aGUgYWN0aXZhdGVkIHBhZCBieSBkZWZhdWx0ICovCisgICAgaWYgKHNlbC0+YWN0aXZlX3NpbmtwYWQpCisgICAgICBnc3Rfb2JqZWN0X3VucmVmIChzZWwtPmFjdGl2ZV9zaW5rcGFkKTsKKyAgICBhY3RpdmVfc2lua3BhZCA9IHNlbC0+YWN0aXZlX3NpbmtwYWQgPSBnc3Rfb2JqZWN0X3JlZiAocGFkKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChzZWwsICJBY3RpdmF0aW5nIHBhZCAlczolcyIsIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7CisgIH0KKworICByZXR1cm4gYWN0aXZlX3NpbmtwYWQ7Cit9CisKK3N0YXRpYyBHc3RQYWQgKgorZ3N0X2lucHV0X3NlbGVjdG9yX3JlcXVlc3RfbmV3X3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCisgICAgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCwgY29uc3QgZ2NoYXIgKiB1bnVzZWQsIGNvbnN0IEdzdENhcHMgKiBjYXBzKQoreworICBHc3RJbnB1dFNlbGVjdG9yICpzZWw7CisgIGdjaGFyICpuYW1lID0gTlVMTDsKKyAgR3N0UGFkICpzaW5rcGFkID0gTlVMTDsKKworICBnX3JldHVybl92YWxfaWZfZmFpbCAodGVtcGwtPmRpcmVjdGlvbiA9PSBHU1RfUEFEX1NJTkssIE5VTEwpOworCisgIHNlbCA9IEdTVF9JTlBVVF9TRUxFQ1RPUiAoZWxlbWVudCk7CisKKyAgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0sgKHNlbCk7CisKKyAgR1NUX0xPR19PQkpFQ1QgKHNlbCwgIkNyZWF0aW5nIG5ldyBwYWQgJWQiLCBzZWwtPnBhZGNvdW50KTsKKyAgbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoInNpbmslZCIsIHNlbC0+cGFkY291bnQrKyk7CisgIHNpbmtwYWQgPSBnX29iamVjdF9uZXcgKEdTVF9UWVBFX1NFTEVDVE9SX1BBRCwKKyAgICAgICJuYW1lIiwgbmFtZSwgImRpcmVjdGlvbiIsIHRlbXBsLT5kaXJlY3Rpb24sICJ0ZW1wbGF0ZSIsIHRlbXBsLCBOVUxMKTsKKyAgZ19mcmVlIChuYW1lKTsKKworICBzZWwtPm5fcGFkcysrOworCisgIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChzaW5rcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zZWxlY3Rvcl9wYWRfZXZlbnQpKTsKKyAgZ3N0X3BhZF9zZXRfZ2V0Y2Fwc19mdW5jdGlvbiAoc2lua3BhZCwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc2VsZWN0b3JfcGFkX2dldGNhcHMpKTsKKyAgZ3N0X3BhZF9zZXRfYWNjZXB0Y2Fwc19mdW5jdGlvbiAoc2lua3BhZCwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc2VsZWN0b3JfcGFkX2FjY2VwdGNhcHMpKTsKKyAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHNpbmtwYWQsCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3NlbGVjdG9yX3BhZF9jaGFpbikpOworICBnc3RfcGFkX3NldF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2Z1bmN0aW9uIChzaW5rcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zZWxlY3Rvcl9wYWRfaXRlcmF0ZV9saW5rZWRfcGFkcykpOworCisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2lua3BhZCwgVFJVRSk7CisgIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChzZWwpLCBzaW5rcGFkKTsKKyAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsKTsKKworICByZXR1cm4gc2lua3BhZDsKK30KKworc3RhdGljIHZvaWQKK2dzdF9pbnB1dF9zZWxlY3Rvcl9yZWxlYXNlX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFBhZCAqIHBhZCkKK3sKKyAgR3N0SW5wdXRTZWxlY3RvciAqc2VsOworCisgIHNlbCA9IEdTVF9JTlBVVF9TRUxFQ1RPUiAoZWxlbWVudCk7CisgIEdTVF9MT0dfT0JKRUNUIChzZWwsICJSZWxlYXNpbmcgcGFkICVzOiVzIiwgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKKworICBHU1RfSU5QVVRfU0VMRUNUT1JfTE9DSyAoc2VsKTsKKyAgLyogaWYgdGhlIHBhZCB3YXMgdGhlIGFjdGl2ZSBwYWQsIG1ha2VzIHVzIHNlbGVjdCBhIG5ldyBvbmUgKi8KKyAgaWYgKHNlbC0+YWN0aXZlX3NpbmtwYWQgPT0gcGFkKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsLCAiRGVhY3RpdmF0aW5nIHBhZCAlczolcyIsIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7CisgICAgZ3N0X29iamVjdF91bnJlZiAoc2VsLT5hY3RpdmVfc2lua3BhZCk7CisgICAgc2VsLT5hY3RpdmVfc2lua3BhZCA9IE5VTEw7CisgIH0KKyAgc2VsLT5uX3BhZHMtLTsKKworICBnc3RfcGFkX3NldF9hY3RpdmUgKHBhZCwgRkFMU0UpOworICBnc3RfZWxlbWVudF9yZW1vdmVfcGFkIChHU1RfRUxFTUVOVCAoc2VsKSwgcGFkKTsKKyAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9pbnB1dF9zZWxlY3Rvcl9yZXNldCAoR3N0SW5wdXRTZWxlY3RvciAqIHNlbCkKK3sKKyAgR0xpc3QgKndhbGs7CisKKyAgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0sgKHNlbCk7CisgIC8qIGNsZWFyIGFjdGl2ZSBwYWQgKi8KKyAgaWYgKHNlbC0+YWN0aXZlX3NpbmtwYWQpIHsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChzZWwtPmFjdGl2ZV9zaW5rcGFkKTsKKyAgICBzZWwtPmFjdGl2ZV9zaW5rcGFkID0gTlVMTDsKKyAgfQorICAvKiByZXNldCBlYWNoIG9mIG91ciBzaW5rcGFkcyBzdGF0ZSAqLworICBmb3IgKHdhbGsgPSBHU1RfRUxFTUVOVF9DQVNUIChzZWwpLT5zaW5rcGFkczsgd2Fsazsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgeworICAgIEdzdFNlbGVjdG9yUGFkICpzZWxwYWQgPSBHU1RfU0VMRUNUT1JfUEFEX0NBU1QgKHdhbGstPmRhdGEpOworCisgICAgZ3N0X3NlbGVjdG9yX3BhZF9yZXNldCAoc2VscGFkKTsKKworICAgIGlmIChzZWxwYWQtPnRhZ3MpIHsKKyAgICAgIGdzdF90YWdfbGlzdF9mcmVlIChzZWxwYWQtPnRhZ3MpOworICAgICAgc2VscGFkLT50YWdzID0gTlVMTDsKKyAgICB9CisgIH0KKyAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsKTsKK30KKworc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCitnc3RfaW5wdXRfc2VsZWN0b3JfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKKyAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQoreworICBHc3RJbnB1dFNlbGVjdG9yICpzZWxmID0gR1NUX0lOUFVUX1NFTEVDVE9SIChlbGVtZW50KTsKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmVzdWx0OworCisgIHN3aXRjaCAodHJhbnNpdGlvbikgeworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6CisgICAgICBHU1RfSU5QVVRfU0VMRUNUT1JfTE9DSyAoc2VsZik7CisgICAgICBzZWxmLT5ibG9ja2VkID0gRkFMU0U7CisgICAgICBzZWxmLT5mbHVzaGluZyA9IEZBTFNFOworICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsZik7CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgorICAgICAgLyogZmlyc3QgdW5sb2NrIGJlZm9yZSB3ZSBjYWxsIHRoZSBwYXJlbnQgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uLCB3aGljaAorICAgICAgICogdHJpZXMgdG8gYWNxdWlyZSB0aGUgc3RyZWFtIGxvY2sgd2hlbiBnb2luZyB0byByZWFkeS4gKi8KKyAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9MT0NLIChzZWxmKTsKKyAgICAgIHNlbGYtPmJsb2NrZWQgPSBGQUxTRTsKKyAgICAgIHNlbGYtPmZsdXNoaW5nID0gVFJVRTsKKyAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9CUk9BRENBU1QgKHNlbGYpOworICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsZik7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKworICByZXN1bHQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKKworICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgorICAgICAgZ3N0X2lucHV0X3NlbGVjdG9yX3Jlc2V0IChzZWxmKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnaW50NjQKK2dzdF9pbnB1dF9zZWxlY3Rvcl9ibG9jayAoR3N0SW5wdXRTZWxlY3RvciAqIHNlbGYpCit7CisgIGdpbnQ2NCByZXQgPSAwOworICBHc3RTZWxlY3RvclBhZCAqc3BhZDsKKworICBHU1RfSU5QVVRfU0VMRUNUT1JfTE9DSyAoc2VsZik7CisKKyAgaWYgKHNlbGYtPmJsb2NrZWQpCisgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzZWxmLCAic3dpdGNoIGFscmVhZHkgYmxvY2tlZCIpOworCisgIHNlbGYtPmJsb2NrZWQgPSBUUlVFOworICBzcGFkID0gR1NUX1NFTEVDVE9SX1BBRF9DQVNUIChzZWxmLT5hY3RpdmVfc2lua3BhZCk7CisKKyAgaWYgKHNwYWQpCisgICAgcmV0ID0gZ3N0X3NlbGVjdG9yX3BhZF9nZXRfcnVubmluZ190aW1lIChzcGFkKTsKKyAgZWxzZQorICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJubyBhY3RpdmUgcGFkIHdoaWxlIGJsb2NraW5nIik7CisKKyAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsZik7CisKKyAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5oIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE2YzMxYwotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDAzIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgorICogQ29weXJpZ2h0IChDKSAyMDA1IFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbi4gKGNvbnRhY3QgPHN0ZWZhbi5rb3N0QG5va2lhLmNvbT4pCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKyAKKyNpZm5kZWYgX19HU1RfSU5QVVRfU0VMRUNUT1JfSF9fCisjZGVmaW5lIF9fR1NUX0lOUFVUX1NFTEVDVE9SX0hfXworCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgR1NUX1RZUEVfSU5QVVRfU0VMRUNUT1IgXAorICAoZ3N0X2lucHV0X3NlbGVjdG9yX2dldF90eXBlKCkpCisjZGVmaW5lIEdTVF9JTlBVVF9TRUxFQ1RPUihvYmopIFwKKyAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfSU5QVVRfU0VMRUNUT1IsIEdzdElucHV0U2VsZWN0b3IpKQorI2RlZmluZSBHU1RfSU5QVVRfU0VMRUNUT1JfQ0xBU1Moa2xhc3MpIFwKKyAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9JTlBVVF9TRUxFQ1RPUiwgR3N0SW5wdXRTZWxlY3RvckNsYXNzKSkKKyNkZWZpbmUgR1NUX0lTX0lOUFVUX1NFTEVDVE9SKG9iaikgXAorICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9JTlBVVF9TRUxFQ1RPUikpCisjZGVmaW5lIEdTVF9JU19JTlBVVF9TRUxFQ1RPUl9DTEFTUyhrbGFzcykgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX0lOUFVUX1NFTEVDVE9SKSkKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdElucHV0U2VsZWN0b3IgR3N0SW5wdXRTZWxlY3RvcjsKK3R5cGVkZWYgc3RydWN0IF9Hc3RJbnB1dFNlbGVjdG9yQ2xhc3MgR3N0SW5wdXRTZWxlY3RvckNsYXNzOworCisjZGVmaW5lIEdTVF9JTlBVVF9TRUxFQ1RPUl9HRVRfTE9DSyhzZWwpICgoKEdzdElucHV0U2VsZWN0b3IqKShzZWwpKS0+bG9jaykKKyNkZWZpbmUgR1NUX0lOUFVUX1NFTEVDVE9SX0dFVF9DT05EKHNlbCkgKCgoR3N0SW5wdXRTZWxlY3RvciopKHNlbCkpLT5jb25kKQorI2RlZmluZSBHU1RfSU5QVVRfU0VMRUNUT1JfTE9DSyhzZWwpIChnX211dGV4X2xvY2sgKEdTVF9JTlBVVF9TRUxFQ1RPUl9HRVRfTE9DSyhzZWwpKSkKKyNkZWZpbmUgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyhzZWwpIChnX211dGV4X3VubG9jayAoR1NUX0lOUFVUX1NFTEVDVE9SX0dFVF9MT0NLKHNlbCkpKQorI2RlZmluZSBHU1RfSU5QVVRfU0VMRUNUT1JfV0FJVChzZWwpIChnX2NvbmRfd2FpdCAoR1NUX0lOUFVUX1NFTEVDVE9SX0dFVF9DT05EKHNlbCksIFwKKwkJCUdTVF9JTlBVVF9TRUxFQ1RPUl9HRVRfTE9DSyhzZWwpKSkKKyNkZWZpbmUgR1NUX0lOUFVUX1NFTEVDVE9SX0JST0FEQ0FTVChzZWwpIChnX2NvbmRfYnJvYWRjYXN0IChHU1RfSU5QVVRfU0VMRUNUT1JfR0VUX0NPTkQoc2VsKSkpCisKK3N0cnVjdCBfR3N0SW5wdXRTZWxlY3RvciB7CisgIEdzdEVsZW1lbnQgZWxlbWVudDsKKworICBHc3RQYWQgKnNyY3BhZDsKKworICBHc3RQYWQgKmFjdGl2ZV9zaW5rcGFkOworICBndWludCBuX3BhZHM7CisgIGd1aW50IHBhZGNvdW50OworICBnYm9vbGVhbiBzeW5jX3N0cmVhbXM7CisKKyAgR011dGV4ICpsb2NrOworICBHQ29uZCAqY29uZDsKKyAgZ2Jvb2xlYW4gYmxvY2tlZDsKKyAgZ2Jvb2xlYW4gZmx1c2hpbmc7Cit9OworCitzdHJ1Y3QgX0dzdElucHV0U2VsZWN0b3JDbGFzcyB7CisgIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgZ2ludDY0ICgqYmxvY2spCShHc3RJbnB1dFNlbGVjdG9yICpzZWxmKTsKK307CisKK0dUeXBlIGdzdF9pbnB1dF9zZWxlY3Rvcl9nZXRfdHlwZSAodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9JTlBVVF9TRUxFQ1RPUl9IX18gKi8KZGlmZiAtLWdpdCBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUwODNlYgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jCkBAIC0wLDAgKzEsMTk5NSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGZsdWVuZG8uY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEphbiBTY2htaWR0IDxqYW5AZmx1ZW5kby5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKyAqCisgKiBnc3RtdWx0aXF1ZXVlLmM6CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoqCisgKiBTRUNUSU9OOmVsZW1lbnQtbXVsdGlxdWV1ZQorICogQHNlZV9hbHNvOiAjR3N0UXVldWUKKyAqCisgKiA8cmVmc2VjdDI+CisgKiA8cGFyYT4KKyAqIE11bHRpcXVldWUgaXMgc2ltaWxhciB0byBhIG5vcm1hbCAjR3N0UXVldWUgd2l0aCB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwKKyAqIGZlYXR1cmVzOgorICogPG9yZGVyZWRsaXN0PgorICogPGxpc3RpdGVtPgorICogICA8aXRlbWl6ZWRsaXN0Pjx0aXRsZT5NdWx0aXBsZSBzdHJlYW1oYW5kbGluZzwvdGl0bGU+CisgKiAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICBUaGUgZWxlbWVudCBoYW5kbGVzIHF1ZXVlaW5nIGRhdGEgb24gbW9yZSB0aGFuIG9uZSBzdHJlYW0gYXQgb25jZS4gVG8KKyAqICAgICBhY2hpZXZlIHN1Y2ggYSBmZWF0dXJlIGl0IGhhcyByZXF1ZXN0IHNpbmsgcGFkcyAoc2luayZwZXJjbnQ7ZCkgYW5kCisgKiAgICAgJ3NvbWV0aW1lcycgc3JjIHBhZHMgKHNyYyZwZXJjbnQ7ZCkuCisgKiAgIDwvcGFyYT48cGFyYT4KKyAqICAgICBXaGVuIHJlcXVlc3RpbmcgYSBnaXZlbiBzaW5rcGFkIHdpdGggZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkKCksCisgKiAgICAgdGhlIGFzc29jaWF0ZWQgc3JjcGFkIGZvciB0aGF0IHN0cmVhbSB3aWxsIGJlIGNyZWF0ZWQuCisgKiAgICAgRXhhbXBsZTogcmVxdWVzdGluZyBzaW5rMSB3aWxsIGdlbmVyYXRlIHNyYzEuCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogICA8L2l0ZW1pemVkbGlzdD4KKyAqIDwvbGlzdGl0ZW0+CisgKiA8bGlzdGl0ZW0+CisgKiAgIDxpdGVtaXplZGxpc3Q+PHRpdGxlPk5vbi1zdGFydmF0aW9uIG9uIG11bHRpcGxlIHN0cmVhbXM8L3RpdGxlPgorICogICA8bGlzdGl0ZW0+PHBhcmE+CisgKiAgICAgSWYgbW9yZSB0aGFuIG9uZSBzdHJlYW0gaXMgdXNlZCB3aXRoIHRoZSBlbGVtZW50LCB0aGUgc3RyZWFtcycgcXVldWVzCisgKiAgICAgd2lsbCBiZSBkeW5hbWljYWxseSBncm93biAodXAgdG8gYSBsaW1pdCksIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IG5vCisgKiAgICAgc3RyZWFtIGlzIHJpc2tpbmcgZGF0YSBzdGFydmF0aW9uLiBUaGlzIGd1YXJhbnRlZXMgdGhhdCBhdCBhbnkgZ2l2ZW4KKyAqICAgICB0aW1lIHRoZXJlIGFyZSBhdCBsZWFzdCBOIGJ5dGVzIHF1ZXVlZCBhbmQgYXZhaWxhYmxlIGZvciBlYWNoIGluZGl2aWR1YWwKKyAqICAgICBzdHJlYW0uCisgKiAgIDwvcGFyYT48cGFyYT4KKyAqICAgICBJZiBhbiBFT1MgZXZlbnQgY29tZXMgdGhyb3VnaCBhIHNyY3BhZCwgdGhlIGFzc29jaWF0ZWQgcXVldWUgd2lsbCBiZQorICogICAgIGNvbnNpZGVyZWQgYXMgJ25vdC1lbXB0eScgaW4gdGhlIHF1ZXVlLXNpemUtZ3Jvd2luZyBhbGdvcml0aG0uCisgKiAgIDwvcGFyYT48L2xpc3RpdGVtPgorICogICA8L2l0ZW1pemVkbGlzdD4KKyAqIDwvbGlzdGl0ZW0+CisgKiA8bGlzdGl0ZW0+CisgKiAgIDxpdGVtaXplZGxpc3Q+PHRpdGxlPk5vbi1saW5rZWQgc3JjcGFkcyBncmFjZWZ1bCBoYW5kbGluZzwvdGl0bGU+CisgKiAgIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgICBJbiBvcmRlciB0byBiZXR0ZXIgc3VwcG9ydCBkeW5hbWljIHN3aXRjaGluZyBiZXR3ZWVuIHN0cmVhbXMsIHRoZSBtdWx0aXF1ZXVlCisgKiAgICAgKHVubGlrZSB0aGUgY3VycmVudCBHU3RyZWFtZXIgcXVldWUpIGNvbnRpbnVlcyB0byBwdXNoIGJ1ZmZlcnMgb24gbm9uLWxpbmtlZAorICogICAgIHBhZHMgcmF0aGVyIHRoYW4gc2h1dHRpbmcgZG93bi4KKyAqICAgPC9wYXJhPjxwYXJhPgorICogICAgIEluIGFkZGl0aW9uLCB0byBwcmV2ZW50IGEgbm9uLWxpbmtlZCBzdHJlYW0gZnJvbSB2ZXJ5IHF1aWNrbHkgY29uc3VtaW5nIGFsbAorICogICAgIGF2YWlsYWJsZSBidWZmZXJzIGFuZCB0aHVzICdyYWNpbmcgYWhlYWQnIG9mIHRoZSBvdGhlciBzdHJlYW1zLCB0aGUgZWxlbWVudAorICogICAgIG11c3QgZW5zdXJlIHRoYXQgYnVmZmVycyBhbmQgaW5saW5lZCBldmVudHMgZm9yIGEgbm9uLWxpbmtlZCBzdHJlYW0gYXJlIHB1c2hlZAorICogICAgIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZXkgd2VyZSByZWNlaXZlZCwgcmVsYXRpdmUgdG8gdGhlIG90aGVyIHN0cmVhbXMKKyAqICAgICBjb250cm9sbGVkIGJ5IHRoZSBlbGVtZW50LiBUaGlzIG1lYW5zIHRoYXQgYSBidWZmZXIgY2Fubm90IGJlIHB1c2hlZCB0byBhCisgKiAgICAgbm9uLWxpbmtlZCBwYWQgYW55IHNvb25lciB0aGFuIGJ1ZmZlcnMgaW4gYW55IG90aGVyIHN0cmVhbSB3aGljaCB3ZXJlIHJlY2VpdmVkCisgKiAgICAgYmVmb3JlIGl0LgorICogICA8L3BhcmE+PC9saXN0aXRlbT4KKyAqICAgPC9pdGVtaXplZGxpc3Q+CisgKiA8L2xpc3RpdGVtPgorICogPC9vcmRlcmVkbGlzdD4KKyAqIDwvcGFyYT4KKyAqIDxwYXJhPgorICogICBEYXRhIGlzIHF1ZXVlZCB1bnRpbCBvbmUgb2YgdGhlIGxpbWl0cyBzcGVjaWZpZWQgYnkgdGhlCisgKiAgICNHc3RNdWx0aVF1ZXVlOm1heC1zaXplLWJ1ZmZlcnMsICNHc3RNdWx0aVF1ZXVlOm1heC1zaXplLWJ5dGVzIGFuZC9vcgorICogICAjR3N0TXVsdGlRdWV1ZTptYXgtc2l6ZS10aW1lIHByb3BlcnRpZXMgaGFzIGJlZW4gcmVhY2hlZC4gQW55IGF0dGVtcHQgdG8gcHVzaAorICogICBtb3JlIGJ1ZmZlcnMgaW50byB0aGUgcXVldWUgd2lsbCBibG9jayB0aGUgcHVzaGluZyB0aHJlYWQgdW50aWwgbW9yZSBzcGFjZQorICogICBiZWNvbWVzIGF2YWlsYWJsZS4gI0dzdE11bHRpUXVldWU6ZXh0cmEtc2l6ZS1idWZmZXJzLAorICogPC9wYXJhPgorICogPHBhcmE+CisgKiAgICNHc3RNdWx0aVF1ZXVlOmV4dHJhLXNpemUtYnl0ZXMgYW5kICNHc3RNdWx0aVF1ZXVlOmV4dHJhLXNpemUtdGltZSBhcmUKKyAqICAgY3VycmVudGx5IHVudXNlZC4KKyAqIDwvcGFyYT4KKyAqIDxwYXJhPgorICogICBUaGUgZGVmYXVsdCBxdWV1ZSBzaXplIGxpbWl0cyBhcmUgNSBidWZmZXJzLCAxME1CIG9mIGRhdGEsIG9yCisgKiAgIHR3byBzZWNvbmQgd29ydGggb2YgZGF0YSwgd2hpY2hldmVyIGlzIHJlYWNoZWQgZmlyc3QuIE5vdGUgdGhhdCB0aGUgbnVtYmVyCisgKiAgIG9mIGJ1ZmZlcnMgd2lsbCBkeW5hbWljYWxseSBncm93IGRlcGVuZGluZyBvbiB0aGUgZmlsbCBsZXZlbCBvZiAKKyAqICAgb3RoZXIgcXVldWVzLgorICogPC9wYXJhPgorICogPHBhcmE+CisgKiAgIFRoZSAjR3N0TXVsdGlRdWV1ZTo6dW5kZXJydW4gc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiBhbGwgb2YgdGhlIHF1ZXVlcworICogICBhcmUgZW1wdHkuIFRoZSAjR3N0TXVsdGlRdWV1ZTo6b3ZlcnJ1biBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIG9uZSBvZiB0aGUKKyAqICAgcXVldWVzIGlzIGZpbGxlZC4KKyAqICAgQm90aCBzaWduYWxzIGFyZSBlbWl0dGVkIGZyb20gdGhlIGNvbnRleHQgb2YgdGhlIHN0cmVhbWluZyB0aHJlYWQuCisgKiA8L3BhcmE+CisgKiA8L3JlZnNlY3QyPgorICoKKyAqIExhc3QgcmV2aWV3ZWQgb24gMjAwOC0wMS0yNSAoMC4xMC4xNykKKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImdzdG11bHRpcXVldWUuaCIKKyNpbmNsdWRlIDxnc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oPgorCisvKioKKyAqIEdzdFNpbmdsZVF1ZXVlOgorICogQHNpbmtwYWQ6IGFzc29jaWF0ZWQgc2luayAjR3N0UGFkCisgKiBAc3JjcGFkOiBhc3NvY2lhdGVkIHNvdXJjZSAjR3N0UGFkCisgKgorICogU3RydWN0dXJlIGNvbnRhaW5pbmcgYWxsIGluZm9ybWF0aW9uIGFuZCBwcm9wZXJ0aWVzIGFib3V0CisgKiBhIHNpbmdsZSBxdWV1ZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX0dzdFNpbmdsZVF1ZXVlIEdzdFNpbmdsZVF1ZXVlOworCitzdHJ1Y3QgX0dzdFNpbmdsZVF1ZXVlCit7CisgIC8qIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBxdWV1ZSAqLworICBndWludCBpZDsKKworICBHc3RNdWx0aVF1ZXVlICptcXVldWU7CisKKyAgR3N0UGFkICpzaW5rcGFkOworICBHc3RQYWQgKnNyY3BhZDsKKworICAvKiBmbG93cmV0dXJuIG9mIHByZXZpb3VzIHNyY3BhZCBwdXNoICovCisgIEdzdEZsb3dSZXR1cm4gc3JjcmVzdWx0OworCisgIC8qIHNlZ21lbnRzICovCisgIEdzdFNlZ21lbnQgc2lua19zZWdtZW50OworICBHc3RTZWdtZW50IHNyY19zZWdtZW50OworCisgIC8qIHBvc2l0aW9uIG9mIHNyYy9zaW5rICovCisgIEdzdENsb2NrVGltZSBzaW5rdGltZSwgc3JjdGltZTsKKyAgLyogVFJVRSBpZiBlaXRoZXIgcG9zaXRpb24gbmVlZHMgdG8gYmUgcmVjYWxjdWxhdGVkICovCisgIGdib29sZWFuIHNpbmtfdGFpbnRlZCwgc3JjX3RhaW50ZWQ7CisKKyAgLyogcXVldWUgb2YgZGF0YSAqLworICBHc3REYXRhUXVldWUgKnF1ZXVlOworICBHc3REYXRhUXVldWVTaXplIG1heF9zaXplLCBleHRyYV9zaXplOworICBHc3RDbG9ja1RpbWUgY3VyX3RpbWU7CisgIGdib29sZWFuIGlzX2VvczsKKyAgZ2Jvb2xlYW4gZmx1c2hpbmc7CisKKyAgLyogUHJvdGVjdGVkIGJ5IGdsb2JhbCBsb2NrICovCisgIGd1aW50MzIgbmV4dGlkOyAgICAgICAgICAgICAgIC8qIElEIG9mIHRoZSBuZXh0IG9iamVjdCB3YWl0aW5nIHRvIGJlIHB1c2hlZCAqLworICBndWludDMyIG9sZGlkOyAgICAgICAgICAgICAgICAvKiBJRCBvZiB0aGUgbGFzdCBvYmplY3QgcHVzaGVkIChsYXN0IGluIGEgc2VyaWVzKSAqLworICBndWludDMyIGxhc3Rfb2xkaWQ7ICAgICAgICAgICAvKiBQcmV2aW91c2x5IG9ic2VydmVkIG9sZF9pZCwgcmVzZXQgdG8gTUFYVUlOVDMyIG9uIGZsdXNoICovCisgIEdzdENsb2NrVGltZSBuZXh0X3RpbWU7ICAgICAgIC8qIEVuZCBydW5uaW5nIHRpbWUgb2YgbmV4dCBidWZmZXIgdG8gYmUgcHVzaGVkICovCisgIEdzdENsb2NrVGltZSBsYXN0X3RpbWU7ICAgICAgIC8qIFN0YXJ0IHJ1bm5pbmcgdGltZSBvZiBsYXN0IHB1c2hlZCBidWZmZXIgKi8KKyAgR0NvbmQgKnR1cm47ICAgICAgICAgICAgICAgICAgLyogU2luZ2xlUXVldWUgdHVybiB3YWl0aW5nIGNvbmRpdGlvbmFsICovCit9OworCisKKy8qIEV4dGVuc2lvbiBvZiBHc3REYXRhUXVldWVJdGVtIHN0cnVjdHVyZSBmb3Igb3VyIHVzYWdlICovCit0eXBlZGVmIHN0cnVjdCBfR3N0TXVsdGlRdWV1ZUl0ZW0gR3N0TXVsdGlRdWV1ZUl0ZW07CisKK3N0cnVjdCBfR3N0TXVsdGlRdWV1ZUl0ZW0KK3sKKyAgR3N0TWluaU9iamVjdCAqb2JqZWN0OworICBndWludCBzaXplOworICBndWludDY0IGR1cmF0aW9uOworICBnYm9vbGVhbiB2aXNpYmxlOworCisgIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3k7CisgIGd1aW50MzIgcG9zaWQ7Cit9OworCitzdGF0aWMgR3N0U2luZ2xlUXVldWUgKmdzdF9zaW5nbGVfcXVldWVfbmV3IChHc3RNdWx0aVF1ZXVlICogbXF1ZXVlLCBnaW50IGlkKTsKK3N0YXRpYyB2b2lkIGdzdF9zaW5nbGVfcXVldWVfZnJlZSAoR3N0U2luZ2xlUXVldWUgKiBzcXVldWUpOworCitzdGF0aWMgdm9pZCB3YWtlX3VwX25leHRfbm9uX2xpbmtlZCAoR3N0TXVsdGlRdWV1ZSAqIG1xKTsKK3N0YXRpYyB2b2lkIGNvbXB1dGVfaGlnaF9pZCAoR3N0TXVsdGlRdWV1ZSAqIG1xKTsKK3N0YXRpYyB2b2lkIGNvbXB1dGVfaGlnaF90aW1lIChHc3RNdWx0aVF1ZXVlICogbXEpOworc3RhdGljIHZvaWQgc2luZ2xlX3F1ZXVlX292ZXJydW5fY2IgKEdzdERhdGFRdWV1ZSAqIGRxLCBHc3RTaW5nbGVRdWV1ZSAqIHNxKTsKK3N0YXRpYyB2b2lkIHNpbmdsZV9xdWV1ZV91bmRlcnJ1bl9jYiAoR3N0RGF0YVF1ZXVlICogZHEsIEdzdFNpbmdsZVF1ZXVlICogc3EpOworCitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rJWQiLAorICAgIEdTVF9QQURfU0lOSywKKyAgICBHU1RfUEFEX1JFUVVFU1QsCisgICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7CisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjJWQiLAorICAgIEdTVF9QQURfU1JDLAorICAgIEdTVF9QQURfU09NRVRJTUVTLAorICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOworCitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChtdWx0aV9xdWV1ZV9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAobXVsdGlfcXVldWVfZGVidWcpCisKKy8qIFNpZ25hbHMgYW5kIGFyZ3MgKi8KK2VudW0KK3sKKyAgU0lHTkFMX1VOREVSUlVOLAorICBTSUdOQUxfT1ZFUlJVTiwKKyAgTEFTVF9TSUdOQUwKK307CisKKy8qIGRlZmF1bHQgbGltaXRzLCB3ZSB0cnkgdG8ga2VlcCB1cCB0byAyIHNlY29uZHMgb2YgZGF0YSBhbmQgaWYgdGhlcmUgaXMgbm90CisgKiB0aW1lLCB1cCB0byAxMCBNQi4gVGhlIG51bWJlciBvZiBidWZmZXJzIGlzIGR5bmFtaWNhbGx5IHNjYWxlZCB0byBtYWtlIHN1cmUKKyAqIHRoZXJlIGlzIGRhdGEgaW4gdGhlIHF1ZXVlcy4gTm9ybWFsbHksIHRoZSBieXRlIGFuZCB0aW1lIGxpbWl0cyBhcmUgbm90IGhpdAorICogaW4gdGhlc2VzIGNvbmRpdGlvbnMuICovCisjZGVmaW5lIERFRkFVTFRfTUFYX1NJWkVfQllURVMgMTAgKiAxMDI0ICogMTAyNCAvKiAxMCBNQiAqLworI2RlZmluZSBERUZBVUxUX01BWF9TSVpFX0JVRkZFUlMgNQorI2RlZmluZSBERUZBVUxUX01BWF9TSVpFX1RJTUUgMiAqIEdTVF9TRUNPTkQKKworLyogc2Vjb25kIGxpbWl0cy4gV2hlbiB3ZSBoaXQgb25lIG9mIHRoZSBhYm92ZSBsaW1pdHMgd2UgYXJlIHByb2JhYmx5IGRlYWxpbmcKKyAqIHdpdGggYSBiYWRseSBtdXhlZCBmaWxlIGFuZCB3ZSBzY2FsZSB0aGUgbGltaXRzIHRvIHRoZXNlIGVtZXJnZW5jeSB2YWx1ZXMuCisgKiBUaGlzIGlzIGN1cnJlbnRseSBub3QgeWV0IGltcGxlbWVudGVkLgorICogU2luY2Ugd2UgZHluYW1pY2FsbHkgc2NhbGUgdGhlIHF1ZXVlIGJ1ZmZlciBzaXplIHVwIHRvIHRoZSBsaW1pdHMgYnV0IGF2b2lkCisgKiBnb2luZyBhYm92ZSB0aGUgbWF4LXNpemUtYnVmZmVycyB3aGVuIHdlIGNhbiwgd2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcworICogYWRpdGlvbmFsIGV4dHJhIHNpemUuICovCisjZGVmaW5lIERFRkFVTFRfRVhUUkFfU0laRV9CWVRFUyAxMCAqIDEwMjQgKiAxMDI0ICAgICAgIC8qIDEwIE1CICovCisjZGVmaW5lIERFRkFVTFRfRVhUUkFfU0laRV9CVUZGRVJTIDUKKyNkZWZpbmUgREVGQVVMVF9FWFRSQV9TSVpFX1RJTUUgMyAqIEdTVF9TRUNPTkQKKworI2RlZmluZSBERUZBVUxUX1VTRV9CVUZGRVJJTkcgRkFMU0UKKyNkZWZpbmUgREVGQVVMVF9MT1dfUEVSQ0VOVCAgIDEwCisjZGVmaW5lIERFRkFVTFRfSElHSF9QRVJDRU5UICA5OQorI2RlZmluZSBERUZBVUxUX1NZTkNfQllfUlVOTklOR19USU1FIEZBTFNFCisKK2VudW0KK3sKKyAgUFJPUF8wLAorICBQUk9QX0VYVFJBX1NJWkVfQllURVMsCisgIFBST1BfRVhUUkFfU0laRV9CVUZGRVJTLAorICBQUk9QX0VYVFJBX1NJWkVfVElNRSwKKyAgUFJPUF9NQVhfU0laRV9CWVRFUywKKyAgUFJPUF9NQVhfU0laRV9CVUZGRVJTLAorICBQUk9QX01BWF9TSVpFX1RJTUUsCisgIFBST1BfVVNFX0JVRkZFUklORywKKyAgUFJPUF9MT1dfUEVSQ0VOVCwKKyAgUFJPUF9ISUdIX1BFUkNFTlQsCisgIFBST1BfU1lOQ19CWV9SVU5OSU5HX1RJTUUsCisgIFBST1BfTEFTVAorfTsKKworI2RlZmluZSBHU1RfTVVMVElfUVVFVUVfTVVURVhfTE9DSyhxKSBHX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBnX211dGV4X2xvY2sgKHEtPnFsb2NrKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSBHX1NUTVRfRU5ECisKKyNkZWZpbmUgR1NUX01VTFRJX1FVRVVFX01VVEVYX1VOTE9DSyhxKSBHX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZ19tdXRleF91bmxvY2sgKHEtPnFsb2NrKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gR19TVE1UX0VORAorCitzdGF0aWMgdm9pZCBnc3RfbXVsdGlfcXVldWVfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOworc3RhdGljIHZvaWQgZ3N0X211bHRpX3F1ZXVlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKKyAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKK3N0YXRpYyB2b2lkIGdzdF9tdWx0aV9xdWV1ZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCisgICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7CisKK3N0YXRpYyBHc3RQYWQgKmdzdF9tdWx0aV9xdWV1ZV9yZXF1ZXN0X25ld19wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAorICAgIEdzdFBhZFRlbXBsYXRlICogdGVtcCwgY29uc3QgZ2NoYXIgKiBuYW1lLCBjb25zdCBHc3RDYXBzICogY2Fwcyk7CitzdGF0aWMgdm9pZCBnc3RfbXVsdGlfcXVldWVfcmVsZWFzZV9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RQYWQgKiBwYWQpOworc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9tdWx0aV9xdWV1ZV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKgorICAgIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOworCitzdGF0aWMgdm9pZCBnc3RfbXVsdGlfcXVldWVfbG9vcCAoR3N0UGFkICogcGFkKTsKKworI2RlZmluZSBfZG9faW5pdCBcCisgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChtdWx0aV9xdWV1ZV9kZWJ1ZywgIm11bHRpcXVldWUiLCAwLCAibXVsdGlxdWV1ZSBlbGVtZW50Iik7CisjZGVmaW5lIGdzdF9tdWx0aV9xdWV1ZV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0TXVsdGlRdWV1ZSwgZ3N0X211bHRpX3F1ZXVlLCBHU1RfVFlQRV9FTEVNRU5ULAorICAgIF9kb19pbml0KTsKKworc3RhdGljIGd1aW50IGdzdF9tdWx0aV9xdWV1ZV9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OworCitzdGF0aWMgdm9pZAorZ3N0X211bHRpX3F1ZXVlX2NsYXNzX2luaXQgKEdzdE11bHRpUXVldWVDbGFzcyAqIGtsYXNzKQoreworICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOworICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOworCisgIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9tdWx0aV9xdWV1ZV9zZXRfcHJvcGVydHk7CisgIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9tdWx0aV9xdWV1ZV9nZXRfcHJvcGVydHk7CisKKyAgLyogU0lHTkFMUyAqLworCisgIC8qKgorICAgKiBHc3RNdWx0aVF1ZXVlOjp1bmRlcnJ1bjoKKyAgICogQG11bHRpcXVldWU6IHRoZSBtdWx0cXVldWUgaW5zdGFuY2UKKyAgICoKKyAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCBmcm9tIHRoZSBzdHJlYW1pbmcgdGhyZWFkIHdoZW4gdGhlcmUgaXMKKyAgICogbm8gZGF0YSBpbiBhbnkgb2YgdGhlIHF1ZXVlcyBpbnNpZGUgdGhlIG11bHRpcXVldWUgaW5zdGFuY2UgKHVuZGVycnVuKS4KKyAgICoKKyAgICogVGhpcyBpbmRpY2F0ZXMgZWl0aGVyIHN0YXJ2YXRpb24gb3IgRU9TIGZyb20gdGhlIHVwc3RyZWFtIGRhdGEgc291cmNlcy4KKyAgICovCisgIGdzdF9tdWx0aV9xdWV1ZV9zaWduYWxzW1NJR05BTF9VTkRFUlJVTl0gPQorICAgICAgZ19zaWduYWxfbmV3ICgidW5kZXJydW4iLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLCBHX1NJR05BTF9SVU5fRklSU1QsCisgICAgICBHX1NUUlVDVF9PRkZTRVQgKEdzdE11bHRpUXVldWVDbGFzcywgdW5kZXJydW4pLCBOVUxMLCBOVUxMLAorICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsIEdfVFlQRV9OT05FLCAwKTsKKworICAvKioKKyAgICogR3N0TXVsdGlRdWV1ZTo6b3ZlcnJ1bjoKKyAgICogQG11bHRpcXVldWU6IHRoZSBtdWx0aXF1ZXVlIGluc3RhbmNlCisgICAqCisgICAqIFJlcG9ydHMgdGhhdCBvbmUgb2YgdGhlIHF1ZXVlcyBpbiB0aGUgbXVsdGlxdWV1ZSBpcyBmdWxsIChvdmVycnVuKS4KKyAgICogQSBxdWV1ZSBpcyBmdWxsIGlmIHRoZSB0b3RhbCBhbW91bnQgb2YgZGF0YSBpbnNpZGUgaXQgKG51bS1idWZmZXJzLCB0aW1lLAorICAgKiBzaXplKSBpcyBoaWdoZXIgdGhhbiB0aGUgYm91bmRhcnkgdmFsdWVzIHdoaWNoIGNhbiBiZSBzZXQgdGhyb3VnaCB0aGUKKyAgICogR09iamVjdCBwcm9wZXJ0aWVzLgorICAgKgorICAgKiBUaGlzIGNhbiBiZSB1c2VkIGFzIGFuIGluZGljYXRvciBvZiBwcmUtcm9sbC4gCisgICAqLworICBnc3RfbXVsdGlfcXVldWVfc2lnbmFsc1tTSUdOQUxfT1ZFUlJVTl0gPQorICAgICAgZ19zaWduYWxfbmV3ICgib3ZlcnJ1biIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksIEdfU0lHTkFMX1JVTl9GSVJTVCwKKyAgICAgIEdfU1RSVUNUX09GRlNFVCAoR3N0TXVsdGlRdWV1ZUNsYXNzLCBvdmVycnVuKSwgTlVMTCwgTlVMTCwKKyAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELCBHX1RZUEVfTk9ORSwgMCk7CisKKyAgLyogUFJPUEVSVElFUyAqLworCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTUFYX1NJWkVfQllURVMsCisgICAgICBnX3BhcmFtX3NwZWNfdWludCAoIm1heC1zaXplLWJ5dGVzIiwgIk1heC4gc2l6ZSAoa0IpIiwKKyAgICAgICAgICAiTWF4LiBhbW91bnQgb2YgZGF0YSBpbiB0aGUgcXVldWUgKGJ5dGVzLCAwPWRpc2FibGUpIiwKKyAgICAgICAgICAwLCBHX01BWFVJTlQsIERFRkFVTFRfTUFYX1NJWkVfQllURVMsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTUFYX1NJWkVfQlVGRkVSUywKKyAgICAgIGdfcGFyYW1fc3BlY191aW50ICgibWF4LXNpemUtYnVmZmVycyIsICJNYXguIHNpemUgKGJ1ZmZlcnMpIiwKKyAgICAgICAgICAiTWF4LiBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgcXVldWUgKDA9ZGlzYWJsZSkiLCAwLCBHX01BWFVJTlQsCisgICAgICAgICAgREVGQVVMVF9NQVhfU0laRV9CVUZGRVJTLAorICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01BWF9TSVpFX1RJTUUsCisgICAgICBnX3BhcmFtX3NwZWNfdWludDY0ICgibWF4LXNpemUtdGltZSIsICJNYXguIHNpemUgKG5zKSIsCisgICAgICAgICAgIk1heC4gYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIChpbiBucywgMD1kaXNhYmxlKSIsIDAsIEdfTUFYVUlOVDY0LAorICAgICAgICAgIERFRkFVTFRfTUFYX1NJWkVfVElNRSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9FWFRSQV9TSVpFX0JZVEVTLAorICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJleHRyYS1zaXplLWJ5dGVzIiwgIkV4dHJhIFNpemUgKGtCKSIsCisgICAgICAgICAgIkFtb3VudCBvZiBkYXRhIHRoZSBxdWV1ZXMgY2FuIGdyb3cgaWYgb25lIG9mIHRoZW0gaXMgZW1wdHkgKGJ5dGVzLCAwPWRpc2FibGUpIgorICAgICAgICAgICIgKE5PVCBJTVBMRU1FTlRFRCkiLAorICAgICAgICAgIDAsIEdfTUFYVUlOVCwgREVGQVVMVF9FWFRSQV9TSVpFX0JZVEVTLAorICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0VYVFJBX1NJWkVfQlVGRkVSUywKKyAgICAgIGdfcGFyYW1fc3BlY191aW50ICgiZXh0cmEtc2l6ZS1idWZmZXJzIiwgIkV4dHJhIFNpemUgKGJ1ZmZlcnMpIiwKKyAgICAgICAgICAiQW1vdW50IG9mIGJ1ZmZlcnMgdGhlIHF1ZXVlcyBjYW4gZ3JvdyBpZiBvbmUgb2YgdGhlbSBpcyBlbXB0eSAoMD1kaXNhYmxlKSIKKyAgICAgICAgICAiIChOT1QgSU1QTEVNRU5URUQpIiwKKyAgICAgICAgICAwLCBHX01BWFVJTlQsIERFRkFVTFRfRVhUUkFfU0laRV9CVUZGRVJTLAorICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0VYVFJBX1NJWkVfVElNRSwKKyAgICAgIGdfcGFyYW1fc3BlY191aW50NjQgKCJleHRyYS1zaXplLXRpbWUiLCAiRXh0cmEgU2l6ZSAobnMpIiwKKyAgICAgICAgICAiQW1vdW50IG9mIHRpbWUgdGhlIHF1ZXVlcyBjYW4gZ3JvdyBpZiBvbmUgb2YgdGhlbSBpcyBlbXB0eSAoaW4gbnMsIDA9ZGlzYWJsZSkiCisgICAgICAgICAgIiAoTk9UIElNUExFTUVOVEVEKSIsCisgICAgICAgICAgMCwgR19NQVhVSU5UNjQsIERFRkFVTFRfRVhUUkFfU0laRV9USU1FLAorICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworCisgIC8qKgorICAgKiBHc3RNdWx0aVF1ZXVlOnVzZS1idWZmZXJpbmcKKyAgICogCisgICAqIEVuYWJsZSB0aGUgYnVmZmVyaW5nIG9wdGlvbiBpbiBtdWx0aXF1ZXVlIHNvIHRoYXQgQlVGRkVSSU5HIG1lc3NhZ2VzIGFyZQorICAgKiBlbWl0ZWQgYmFzZWQgb24gbG93LS9oaWdoLXBlcmNlbnQgdGhyZXNob2xkcy4KKyAgICoKKyAgICogU2luY2U6IDAuMTAuMjYKKyAgICovCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfVVNFX0JVRkZFUklORywKKyAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgidXNlLWJ1ZmZlcmluZyIsICJVc2UgYnVmZmVyaW5nIiwKKyAgICAgICAgICAiRW1pdCBHU1RfTUVTU0FHRV9CVUZGRVJJTkcgYmFzZWQgb24gbG93LS9oaWdoLXBlcmNlbnQgdGhyZXNob2xkcyIsCisgICAgICAgICAgREVGQVVMVF9VU0VfQlVGRkVSSU5HLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKyAgLyoqCisgICAqIEdzdE11bHRpUXVldWU6bG93LXBlcmNlbnQKKyAgICogCisgICAqIExvdyB0aHJlc2hvbGQgcGVyY2VudCBmb3IgYnVmZmVyaW5nIHRvIHN0YXJ0LgorICAgKgorICAgKiBTaW5jZTogMC4xMC4yNgorICAgKi8KKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9MT1dfUEVSQ0VOVCwKKyAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJsb3ctcGVyY2VudCIsICJMb3cgcGVyY2VudCIsCisgICAgICAgICAgIkxvdyB0aHJlc2hvbGQgZm9yIGJ1ZmZlcmluZyB0byBzdGFydCIsIDAsIDEwMCwKKyAgICAgICAgICBERUZBVUxUX0xPV19QRVJDRU5ULCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKyAgLyoqCisgICAqIEdzdE11bHRpUXVldWU6aGlnaC1wZXJjZW50CisgICAqIAorICAgKiBIaWdoIHRocmVzaG9sZCBwZXJjZW50IGZvciBidWZmZXJpbmcgdG8gZmluaXNoLgorICAgKgorICAgKiBTaW5jZTogMC4xMC4yNgorICAgKi8KKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9ISUdIX1BFUkNFTlQsCisgICAgICBnX3BhcmFtX3NwZWNfaW50ICgiaGlnaC1wZXJjZW50IiwgIkhpZ2ggcGVyY2VudCIsCisgICAgICAgICAgIkhpZ2ggdGhyZXNob2xkIGZvciBidWZmZXJpbmcgdG8gZmluaXNoIiwgMCwgMTAwLAorICAgICAgICAgIERFRkFVTFRfSElHSF9QRVJDRU5ULCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKworICAvKioKKyAgICogR3N0TXVsdGlRdWV1ZTpzeW5jLWJ5LXJ1bm5pbmctdGltZQorICAgKiAKKyAgICogSWYgZW5hYmxlZCBtdWx0aXF1ZXVlIHdpbGwgc3luY2hyb25pemUgZGVhY3RpdmF0ZWQgb3Igbm90LWxpbmtlZCBzdHJlYW1zCisgICAqIHRvIHRoZSBhY3RpdmF0ZWQgYW5kIGxpbmtlZCBzdHJlYW1zIGJ5IHRha2luZyB0aGUgcnVubmluZyB0aW1lLgorICAgKiBPdGhlcndpc2UgbXVsdGlxdWV1ZSB3aWxsIHN5bmNocm9uaXplIHRoZSBkZWFjdGl2YXRlZCBvciBub3QtbGlua2VkCisgICAqIHN0cmVhbXMgYnkga2VlcGluZyB0aGUgb3JkZXIgaW4gd2hpY2ggYnVmZmVycyBhbmQgZXZlbnRzIGFycml2ZWQgY29tcGFyZWQKKyAgICogdG8gYWN0aXZlIGFuZCBsaW5rZWQgc3RyZWFtcy4KKyAgICoKKyAgICogU2luY2U6IDAuMTAuMzUKKyAgICovCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU1lOQ19CWV9SVU5OSU5HX1RJTUUsCisgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInN5bmMtYnktcnVubmluZy10aW1lIiwgIlN5bmMgQnkgUnVubmluZyBUaW1lIiwKKyAgICAgICAgICAiU3luY2hyb25pemUgZGVhY3RpdmF0ZWQgb3Igbm90LWxpbmtlZCBzdHJlYW1zIGJ5IHJ1bm5pbmcgdGltZSIsCisgICAgICAgICAgREVGQVVMVF9TWU5DX0JZX1JVTk5JTkdfVElNRSwKKyAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKworICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9tdWx0aV9xdWV1ZV9maW5hbGl6ZTsKKworICBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlsc19zaW1wbGUgKGdzdGVsZW1lbnRfY2xhc3MsCisgICAgICAiTXVsdGlRdWV1ZSIsCisgICAgICAiR2VuZXJpYyIsICJNdWx0aXBsZSBkYXRhIHF1ZXVlIiwgIkVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBmbHVlbmRvLmNvbT4iKTsKKyAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKKyAgICAgIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoJnNpbmt0ZW1wbGF0ZSkpOworICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAorICAgICAgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0ICgmc3JjdGVtcGxhdGUpKTsKKworICBnc3RlbGVtZW50X2NsYXNzLT5yZXF1ZXN0X25ld19wYWQgPQorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tdWx0aV9xdWV1ZV9yZXF1ZXN0X25ld19wYWQpOworICBnc3RlbGVtZW50X2NsYXNzLT5yZWxlYXNlX3BhZCA9CisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X211bHRpX3F1ZXVlX3JlbGVhc2VfcGFkKTsKKyAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0KKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbXVsdGlfcXVldWVfY2hhbmdlX3N0YXRlKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9tdWx0aV9xdWV1ZV9pbml0IChHc3RNdWx0aVF1ZXVlICogbXF1ZXVlKQoreworICBtcXVldWUtPm5icXVldWVzID0gMDsKKyAgbXF1ZXVlLT5xdWV1ZXMgPSBOVUxMOworCisgIG1xdWV1ZS0+bWF4X3NpemUuYnl0ZXMgPSBERUZBVUxUX01BWF9TSVpFX0JZVEVTOworICBtcXVldWUtPm1heF9zaXplLnZpc2libGUgPSBERUZBVUxUX01BWF9TSVpFX0JVRkZFUlM7CisgIG1xdWV1ZS0+bWF4X3NpemUudGltZSA9IERFRkFVTFRfTUFYX1NJWkVfVElNRTsKKworICBtcXVldWUtPmV4dHJhX3NpemUuYnl0ZXMgPSBERUZBVUxUX0VYVFJBX1NJWkVfQllURVM7CisgIG1xdWV1ZS0+ZXh0cmFfc2l6ZS52aXNpYmxlID0gREVGQVVMVF9FWFRSQV9TSVpFX0JVRkZFUlM7CisgIG1xdWV1ZS0+ZXh0cmFfc2l6ZS50aW1lID0gREVGQVVMVF9FWFRSQV9TSVpFX1RJTUU7CisKKyAgbXF1ZXVlLT51c2VfYnVmZmVyaW5nID0gREVGQVVMVF9VU0VfQlVGRkVSSU5HOworICBtcXVldWUtPmxvd19wZXJjZW50ID0gREVGQVVMVF9MT1dfUEVSQ0VOVDsKKyAgbXF1ZXVlLT5oaWdoX3BlcmNlbnQgPSBERUZBVUxUX0hJR0hfUEVSQ0VOVDsKKworICBtcXVldWUtPnN5bmNfYnlfcnVubmluZ190aW1lID0gREVGQVVMVF9TWU5DX0JZX1JVTk5JTkdfVElNRTsKKworICBtcXVldWUtPmNvdW50ZXIgPSAxOworICBtcXVldWUtPmhpZ2hpZCA9IC0xOworICBtcXVldWUtPmhpZ2hfdGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7CisKKyAgbXF1ZXVlLT5xbG9jayA9IGdfbXV0ZXhfbmV3ICgpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X211bHRpX3F1ZXVlX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQoreworICBHc3RNdWx0aVF1ZXVlICptcXVldWUgPSBHU1RfTVVMVElfUVVFVUUgKG9iamVjdCk7CisKKyAgZ19saXN0X2ZvcmVhY2ggKG1xdWV1ZS0+cXVldWVzLCAoR0Z1bmMpIGdzdF9zaW5nbGVfcXVldWVfZnJlZSwgTlVMTCk7CisgIGdfbGlzdF9mcmVlIChtcXVldWUtPnF1ZXVlcyk7CisgIG1xdWV1ZS0+cXVldWVzID0gTlVMTDsKKyAgbXF1ZXVlLT5xdWV1ZXNfY29va2llKys7CisKKyAgLyogZnJlZS91bnJlZiBpbnN0YW5jZSBkYXRhICovCisgIGdfbXV0ZXhfZnJlZSAobXF1ZXVlLT5xbG9jayk7CisKKyAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOworfQorCisjZGVmaW5lIFNFVF9DSElMRF9QUk9QRVJUWShtcSxmb3JtYXQpIEdfU1RNVF9TVEFSVCB7CSAgICAgICAgXAorICAgIEdMaXN0ICogdG1wID0gbXEtPnF1ZXVlczsJCQkJCVwKKyAgICB3aGlsZSAodG1wKSB7CQkJCQkJXAorICAgICAgR3N0U2luZ2xlUXVldWUgKnEgPSAoR3N0U2luZ2xlUXVldWUqKXRtcC0+ZGF0YTsJCVwKKyAgICAgIHEtPm1heF9zaXplLmZvcm1hdCA9IG1xLT5tYXhfc2l6ZS5mb3JtYXQ7ICAgICAgICAgICAgICAgICBcCisgICAgICB0bXAgPSBnX2xpc3RfbmV4dCh0bXApOwkJCQkJXAorICAgIH07CQkJCQkJCQlcCit9IEdfU1RNVF9FTkQKKworc3RhdGljIHZvaWQKK2dzdF9tdWx0aV9xdWV1ZV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgR3N0TXVsdGlRdWV1ZSAqbXEgPSBHU1RfTVVMVElfUVVFVUUgKG9iamVjdCk7CisKKyAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX01BWF9TSVpFX0JZVEVTOgorICAgICAgR1NUX01VTFRJX1FVRVVFX01VVEVYX0xPQ0sgKG1xKTsKKyAgICAgIG1xLT5tYXhfc2l6ZS5ieXRlcyA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKKyAgICAgIFNFVF9DSElMRF9QUk9QRVJUWSAobXEsIGJ5dGVzKTsKKyAgICAgIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9VTkxPQ0sgKG1xKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVhfU0laRV9CVUZGRVJTOgorICAgICAgR1NUX01VTFRJX1FVRVVFX01VVEVYX0xPQ0sgKG1xKTsKKyAgICAgIG1xLT5tYXhfc2l6ZS52aXNpYmxlID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOworICAgICAgU0VUX0NISUxEX1BST1BFUlRZIChtcSwgdmlzaWJsZSk7CisgICAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUFYX1NJWkVfVElNRToKKyAgICAgIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9MT0NLIChtcSk7CisgICAgICBtcS0+bWF4X3NpemUudGltZSA9IGdfdmFsdWVfZ2V0X3VpbnQ2NCAodmFsdWUpOworICAgICAgU0VUX0NISUxEX1BST1BFUlRZIChtcSwgdGltZSk7CisgICAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRVhUUkFfU0laRV9CWVRFUzoKKyAgICAgIG1xLT5leHRyYV9zaXplLmJ5dGVzID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0VYVFJBX1NJWkVfQlVGRkVSUzoKKyAgICAgIG1xLT5leHRyYV9zaXplLnZpc2libGUgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRVhUUkFfU0laRV9USU1FOgorICAgICAgbXEtPmV4dHJhX3NpemUudGltZSA9IGdfdmFsdWVfZ2V0X3VpbnQ2NCAodmFsdWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1VTRV9CVUZGRVJJTkc6CisgICAgICBtcS0+dXNlX2J1ZmZlcmluZyA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MT1dfUEVSQ0VOVDoKKyAgICAgIG1xLT5sb3dfcGVyY2VudCA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hJR0hfUEVSQ0VOVDoKKyAgICAgIG1xLT5oaWdoX3BlcmNlbnQgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TWU5DX0JZX1JVTk5JTkdfVElNRToKKyAgICAgIG1xLT5zeW5jX2J5X3J1bm5pbmdfdGltZSA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9tdWx0aV9xdWV1ZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgR3N0TXVsdGlRdWV1ZSAqbXEgPSBHU1RfTVVMVElfUVVFVUUgKG9iamVjdCk7CisKKyAgR1NUX01VTFRJX1FVRVVFX01VVEVYX0xPQ0sgKG1xKTsKKworICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfRVhUUkFfU0laRV9CWVRFUzoKKyAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBtcS0+ZXh0cmFfc2l6ZS5ieXRlcyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRVhUUkFfU0laRV9CVUZGRVJTOgorICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIG1xLT5leHRyYV9zaXplLnZpc2libGUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0VYVFJBX1NJWkVfVElNRToKKyAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAodmFsdWUsIG1xLT5leHRyYV9zaXplLnRpbWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01BWF9TSVpFX0JZVEVTOgorICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIG1xLT5tYXhfc2l6ZS5ieXRlcyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUFYX1NJWkVfQlVGRkVSUzoKKyAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBtcS0+bWF4X3NpemUudmlzaWJsZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUFYX1NJWkVfVElNRToKKyAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAodmFsdWUsIG1xLT5tYXhfc2l6ZS50aW1lKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9VU0VfQlVGRkVSSU5HOgorICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIG1xLT51c2VfYnVmZmVyaW5nKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MT1dfUEVSQ0VOVDoKKyAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIG1xLT5sb3dfcGVyY2VudCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSElHSF9QRVJDRU5UOgorICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgbXEtPmhpZ2hfcGVyY2VudCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1lOQ19CWV9SVU5OSU5HX1RJTUU6CisgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgbXEtPnN5bmNfYnlfcnVubmluZ190aW1lKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KKworICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcSk7Cit9CisKK3N0YXRpYyBHc3RJdGVyYXRvciAqCitnc3RfbXVsdGlfcXVldWVfaXRlcmF0ZV9pbnRlcm5hbF9saW5rcyAoR3N0UGFkICogcGFkKQoreworICBHc3RJdGVyYXRvciAqaXQgPSBOVUxMOworICBHc3RQYWQgKm9wYWQ7CisgIEdzdFNpbmdsZVF1ZXVlICpzcXVldWU7CisgIEdzdE11bHRpUXVldWUgKm1xID0gR1NUX01VTFRJX1FVRVVFIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOworICBHVmFsdWUgdmFsID0geyAwLCB9OworCisgIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9MT0NLIChtcSk7CisgIHNxdWV1ZSA9IGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkKTsKKyAgaWYgKCFzcXVldWUpCisgICAgZ290byBvdXQ7CisKKyAgaWYgKHNxdWV1ZS0+c2lua3BhZCA9PSBwYWQpCisgICAgb3BhZCA9IGdzdF9vYmplY3RfcmVmIChzcXVldWUtPnNyY3BhZCk7CisgIGVsc2UgaWYgKHNxdWV1ZS0+c3JjcGFkID09IHBhZCkKKyAgICBvcGFkID0gZ3N0X29iamVjdF9yZWYgKHNxdWV1ZS0+c2lua3BhZCk7CisgIGVsc2UKKyAgICBnb3RvIG91dDsKKworICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdTVF9UWVBFX1BBRCk7CisgIGdfdmFsdWVfc2V0X29iamVjdCAoJnZhbCwgb3BhZCk7CisgIGl0ID0gZ3N0X2l0ZXJhdG9yX25ld19zaW5nbGUgKEdTVF9UWVBFX1BBRCwgJnZhbCk7CisgIGdfdmFsdWVfdW5zZXQgKCZ2YWwpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKG9wYWQpOworCitvdXQ6CisgIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9VTkxPQ0sgKG1xKTsKKyAgZ3N0X29iamVjdF91bnJlZiAobXEpOworCisgIHJldHVybiBpdDsKK30KKworCisvKgorICogR3N0RWxlbWVudCBtZXRob2RzCisgKi8KKworc3RhdGljIEdzdFBhZCAqCitnc3RfbXVsdGlfcXVldWVfcmVxdWVzdF9uZXdfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wLAorICAgIGNvbnN0IGdjaGFyICogbmFtZSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMpCit7CisgIEdzdE11bHRpUXVldWUgKm1xdWV1ZSA9IEdTVF9NVUxUSV9RVUVVRSAoZWxlbWVudCk7CisgIEdzdFNpbmdsZVF1ZXVlICpzcXVldWU7CisgIGdpbnQgdGVtcF9pZCA9IC0xOworCisgIGlmIChuYW1lKSB7CisgICAgc3NjYW5mIChuYW1lICsgNCwgIiVkIiwgJnRlbXBfaWQpOworICAgIEdTVF9MT0dfT0JKRUNUIChlbGVtZW50LCAibmFtZSA6ICVzIChpZCAlZCkiLCBHU1RfU1RSX05VTEwgKG5hbWUpLCB0ZW1wX2lkKTsKKyAgfQorCisgIC8qIENyZWF0ZSBhIG5ldyBzaW5nbGUgcXVldWUsIGFkZCB0aGUgc2luayBhbmQgc291cmNlIHBhZCBhbmQgcmV0dXJuIHRoZSBzaW5rIHBhZCAqLworICBzcXVldWUgPSBnc3Rfc2luZ2xlX3F1ZXVlX25ldyAobXF1ZXVlLCB0ZW1wX2lkKTsKKworICBHU1RfREVCVUdfT0JKRUNUIChtcXVldWUsICJSZXR1cm5pbmcgcGFkICVzOiVzIiwKKyAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAoc3F1ZXVlLT5zaW5rcGFkKSk7CisKKyAgcmV0dXJuIHNxdWV1ZSA/IHNxdWV1ZS0+c2lua3BhZCA6IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfbXVsdGlfcXVldWVfcmVsZWFzZV9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RQYWQgKiBwYWQpCit7CisgIEdzdE11bHRpUXVldWUgKm1xdWV1ZSA9IEdTVF9NVUxUSV9RVUVVRSAoZWxlbWVudCk7CisgIEdzdFNpbmdsZVF1ZXVlICpzcSA9IE5VTEw7CisgIEdMaXN0ICp0bXA7CisKKyAgR1NUX0xPR19PQkpFQ1QgKGVsZW1lbnQsICJwYWQgJXM6JXMiLCBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOworCisgIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9MT0NLIChtcXVldWUpOworICAvKiBGaW5kIHdoaWNoIHNpbmdsZSBxdWV1ZSBpdCBiZWxvbmdzIHRvLCBrbm93aW5nIHRoYXQgaXQgc2hvdWxkIGJlIGEgc2lua3BhZCAqLworICBmb3IgKHRtcCA9IG1xdWV1ZS0+cXVldWVzOyB0bXA7IHRtcCA9IGdfbGlzdF9uZXh0ICh0bXApKSB7CisgICAgc3EgPSAoR3N0U2luZ2xlUXVldWUgKikgdG1wLT5kYXRhOworCisgICAgaWYgKHNxLT5zaW5rcGFkID09IHBhZCkKKyAgICAgIGJyZWFrOworICB9CisKKyAgaWYgKCF0bXApIHsKKyAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG1xdWV1ZSwgIlRoYXQgcGFkIGRvZXNuJ3QgYmVsb25nIHRvIHRoaXMgZWxlbWVudCA/Pz8iKTsKKyAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcXVldWUpOworICAgIHJldHVybjsKKyAgfQorCisgIC8qIEZJWE1FOiBUaGUgcmVtb3ZhbCBvZiB0aGUgc2luZ2xlcXVldWUgc2hvdWxkIHByb2JhYmx5IG5vdCBoYXBwZW4gdW50aWwgaXQKKyAgICogZmluaXNoZXMgZHJhaW5pbmcgKi8KKworICAvKiByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCAqLworICBtcXVldWUtPnF1ZXVlcyA9IGdfbGlzdF9kZWxldGVfbGluayAobXF1ZXVlLT5xdWV1ZXMsIHRtcCk7CisgIG1xdWV1ZS0+cXVldWVzX2Nvb2tpZSsrOworCisgIC8qIEZJWE1FIDogcmVjb21wdXRlIG5leHQtbm9uLWxpbmtlZCAqLworICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcXVldWUpOworCisgIC8qIGRlbGV0ZSBTaW5nbGVRdWV1ZSAqLworICBnc3RfZGF0YV9xdWV1ZV9zZXRfZmx1c2hpbmcgKHNxLT5xdWV1ZSwgVFJVRSk7CisKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzcS0+c3JjcGFkLCBGQUxTRSk7CisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3EtPnNpbmtwYWQsIEZBTFNFKTsKKyAgZ3N0X3BhZF9zZXRfZWxlbWVudF9wcml2YXRlIChzcS0+c3JjcGFkLCBOVUxMKTsKKyAgZ3N0X3BhZF9zZXRfZWxlbWVudF9wcml2YXRlIChzcS0+c2lua3BhZCwgTlVMTCk7CisgIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQgKGVsZW1lbnQsIHNxLT5zcmNwYWQpOworICBnc3RfZWxlbWVudF9yZW1vdmVfcGFkIChlbGVtZW50LCBzcS0+c2lua3BhZCk7CisgIGdzdF9zaW5nbGVfcXVldWVfZnJlZSAoc3EpOworfQorCitzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KK2dzdF9tdWx0aV9xdWV1ZV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQoreworICBHc3RNdWx0aVF1ZXVlICptcXVldWUgPSBHU1RfTVVMVElfUVVFVUUgKGVsZW1lbnQpOworICBHc3RTaW5nbGVRdWV1ZSAqc3EgPSBOVUxMOworICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXN1bHQ7CisKKyAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDp7CisgICAgICBHTGlzdCAqdG1wOworCisgICAgICAvKiBTZXQgYWxsIHBhZHMgdG8gbm9uLWZsdXNoaW5nICovCisgICAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfTE9DSyAobXF1ZXVlKTsKKyAgICAgIGZvciAodG1wID0gbXF1ZXVlLT5xdWV1ZXM7IHRtcDsgdG1wID0gZ19saXN0X25leHQgKHRtcCkpIHsKKyAgICAgICAgc3EgPSAoR3N0U2luZ2xlUXVldWUgKikgdG1wLT5kYXRhOworICAgICAgICBzcS0+Zmx1c2hpbmcgPSBGQUxTRTsKKyAgICAgIH0KKyAgICAgIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9VTkxPQ0sgKG1xdWV1ZSk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWTp7CisgICAgICBHTGlzdCAqdG1wOworCisgICAgICAvKiBVbi13YWl0IGFsbCB3YWl0aW5nIHBhZHMgKi8KKyAgICAgIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9MT0NLIChtcXVldWUpOworICAgICAgZm9yICh0bXAgPSBtcXVldWUtPnF1ZXVlczsgdG1wOyB0bXAgPSBnX2xpc3RfbmV4dCAodG1wKSkgeworICAgICAgICBzcSA9IChHc3RTaW5nbGVRdWV1ZSAqKSB0bXAtPmRhdGE7CisgICAgICAgIHNxLT5mbHVzaGluZyA9IFRSVUU7CisgICAgICAgIGdfY29uZF9zaWduYWwgKHNxLT50dXJuKTsKKyAgICAgIH0KKyAgICAgIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9VTkxPQ0sgKG1xdWV1ZSk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgcmVzdWx0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7CisKKyAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKKworCisKK30KKworc3RhdGljIGdib29sZWFuCitnc3Rfc2luZ2xlX3F1ZXVlX2ZsdXNoIChHc3RNdWx0aVF1ZXVlICogbXEsIEdzdFNpbmdsZVF1ZXVlICogc3EsIGdib29sZWFuIGZsdXNoKQoreworICBnYm9vbGVhbiByZXN1bHQ7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAobXEsICJmbHVzaCAlcyBxdWV1ZSAlZCIsIChmbHVzaCA/ICJzdGFydCIgOiAic3RvcCIpLAorICAgICAgc3EtPmlkKTsKKworICBpZiAoZmx1c2gpIHsKKyAgICBzcS0+c3JjcmVzdWx0ID0gR1NUX0ZMT1dfV1JPTkdfU1RBVEU7CisgICAgZ3N0X2RhdGFfcXVldWVfc2V0X2ZsdXNoaW5nIChzcS0+cXVldWUsIFRSVUUpOworCisgICAgc3EtPmZsdXNoaW5nID0gVFJVRTsKKworICAgIC8qIHdha2UgdXAgbm9uLWxpbmtlZCB0YXNrICovCisgICAgR1NUX0xPR19PQkpFQ1QgKG1xLCAiU2luZ2xlUXVldWUgJWQgOiB3YWtpbmcgdXAgZXZlbnR1YWxseSB3YWl0aW5nIHRhc2siLAorICAgICAgICBzcS0+aWQpOworICAgIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9MT0NLIChtcSk7CisgICAgZ19jb25kX3NpZ25hbCAoc3EtPnR1cm4pOworICAgIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9VTkxPQ0sgKG1xKTsKKworICAgIEdTVF9MT0dfT0JKRUNUIChtcSwgIlNpbmdsZVF1ZXVlICVkIDogcGF1c2luZyB0YXNrIiwgc3EtPmlkKTsKKyAgICByZXN1bHQgPSBnc3RfcGFkX3BhdXNlX3Rhc2sgKHNxLT5zcmNwYWQpOworICAgIHNxLT5zaW5rX3RhaW50ZWQgPSBzcS0+c3JjX3RhaW50ZWQgPSBUUlVFOworICB9IGVsc2UgeworICAgIGdzdF9kYXRhX3F1ZXVlX2ZsdXNoIChzcS0+cXVldWUpOworICAgIGdzdF9zZWdtZW50X2luaXQgKCZzcS0+c2lua19zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOworICAgIGdzdF9zZWdtZW50X2luaXQgKCZzcS0+c3JjX3NlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7CisgICAgLyogQWxsIHBhZHMgc3RhcnQgb2ZmIG5vdC1saW5rZWQgZm9yIGEgc21vb3RoIGtpY2stb2ZmICovCisgICAgc3EtPnNyY3Jlc3VsdCA9IEdTVF9GTE9XX09LOworICAgIHNxLT5jdXJfdGltZSA9IDA7CisgICAgc3EtPm1heF9zaXplLnZpc2libGUgPSBtcS0+bWF4X3NpemUudmlzaWJsZTsKKyAgICBzcS0+aXNfZW9zID0gRkFMU0U7CisgICAgc3EtPm5leHRpZCA9IDA7CisgICAgc3EtPm9sZGlkID0gMDsKKyAgICBzcS0+bGFzdF9vbGRpZCA9IEdfTUFYVUlOVDMyOworICAgIHNxLT5uZXh0X3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICAgIHNxLT5sYXN0X3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICAgIGdzdF9kYXRhX3F1ZXVlX3NldF9mbHVzaGluZyAoc3EtPnF1ZXVlLCBGQUxTRSk7CisKKyAgICAvKiBSZXNldCBoaWdoIHRpbWUgdG8gYmUgcmVjb21wdXRlZCBuZXh0ICovCisgICAgR1NUX01VTFRJX1FVRVVFX01VVEVYX0xPQ0sgKG1xKTsKKyAgICBtcS0+aGlnaF90aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcSk7CisKKyAgICBzcS0+Zmx1c2hpbmcgPSBGQUxTRTsKKworICAgIEdTVF9MT0dfT0JKRUNUIChtcSwgIlNpbmdsZVF1ZXVlICVkIDogc3RhcnRpbmcgdGFzayIsIHNxLT5pZCk7CisgICAgcmVzdWx0ID0KKyAgICAgICAgZ3N0X3BhZF9zdGFydF90YXNrIChzcS0+c3JjcGFkLCAoR3N0VGFza0Z1bmN0aW9uKSBnc3RfbXVsdGlfcXVldWVfbG9vcCwKKyAgICAgICAgc3EtPnNyY3BhZCk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK3VwZGF0ZV9idWZmZXJpbmcgKEdzdE11bHRpUXVldWUgKiBtcSwgR3N0U2luZ2xlUXVldWUgKiBzcSkKK3sKKyAgR3N0RGF0YVF1ZXVlU2l6ZSBzaXplOworICBnaW50IHBlcmNlbnQsIHRtcDsKKyAgZ2Jvb2xlYW4gcG9zdCA9IEZBTFNFOworCisgIC8qIG5vdGhpbmcgdG8gZG93aGVuIHdlIGFyZSBub3QgaW4gYnVmZmVyaW5nIG1vZGUgKi8KKyAgaWYgKCFtcS0+dXNlX2J1ZmZlcmluZykKKyAgICByZXR1cm47CisKKyAgZ3N0X2RhdGFfcXVldWVfZ2V0X2xldmVsIChzcS0+cXVldWUsICZzaXplKTsKKworICBHU1RfREVCVUdfT0JKRUNUIChtcSwKKyAgICAgICJxdWV1ZSAlZDogdmlzaWJsZSAldS8ldSwgYnl0ZXMgJXUvJXUsIHRpbWUgJSIgR19HVUlOVDY0X0ZPUk1BVCAiLyUiCisgICAgICBHX0dVSU5UNjRfRk9STUFULCBzcS0+aWQsIHNpemUudmlzaWJsZSwgc3EtPm1heF9zaXplLnZpc2libGUsCisgICAgICBzaXplLmJ5dGVzLCBzcS0+bWF4X3NpemUuYnl0ZXMsIHNxLT5jdXJfdGltZSwgc3EtPm1heF9zaXplLnRpbWUpOworCisgIC8qIGdldCBieXRlcyBhbmQgdGltZSBwZXJjZW50YWdlcyBhbmQgdGFrZSB0aGUgbWF4ICovCisgIGlmIChzcS0+aXNfZW9zKSB7CisgICAgcGVyY2VudCA9IDEwMDsKKyAgfSBlbHNlIHsKKyAgICBwZXJjZW50ID0gMDsKKyAgICBpZiAoc3EtPm1heF9zaXplLnRpbWUgPiAwKSB7CisgICAgICB0bXAgPSAoc3EtPmN1cl90aW1lICogMTAwKSAvIHNxLT5tYXhfc2l6ZS50aW1lOworICAgICAgcGVyY2VudCA9IE1BWCAocGVyY2VudCwgdG1wKTsKKyAgICB9CisgICAgaWYgKHNxLT5tYXhfc2l6ZS5ieXRlcyA+IDApIHsKKyAgICAgIHRtcCA9IChzaXplLmJ5dGVzICogMTAwKSAvIHNxLT5tYXhfc2l6ZS5ieXRlczsKKyAgICAgIHBlcmNlbnQgPSBNQVggKHBlcmNlbnQsIHRtcCk7CisgICAgfQorICB9CisKKyAgaWYgKG1xLT5idWZmZXJpbmcpIHsKKyAgICBwb3N0ID0gVFJVRTsKKyAgICBpZiAocGVyY2VudCA+PSBtcS0+aGlnaF9wZXJjZW50KSB7CisgICAgICBtcS0+YnVmZmVyaW5nID0gRkFMU0U7CisgICAgfQorICAgIC8qIG1ha2Ugc3VyZSBpdCBpbmNyZWFzZXMgKi8KKyAgICBwZXJjZW50ID0gTUFYIChtcS0+cGVyY2VudCwgcGVyY2VudCk7CisKKyAgICBpZiAocGVyY2VudCA9PSBtcS0+cGVyY2VudCkKKyAgICAgIC8qIGRvbid0IHBvc3QgaWYgbm90aGluZyBjaGFuZ2VkICovCisgICAgICBwb3N0ID0gRkFMU0U7CisgICAgZWxzZQorICAgICAgLyogZWxzZSBrZWVwIGxhc3QgdmFsdWUgd2UgcG9zdGVkICovCisgICAgICBtcS0+cGVyY2VudCA9IHBlcmNlbnQ7CisgIH0gZWxzZSB7CisgICAgaWYgKHBlcmNlbnQgPCBtcS0+bG93X3BlcmNlbnQpIHsKKyAgICAgIG1xLT5idWZmZXJpbmcgPSBUUlVFOworICAgICAgbXEtPnBlcmNlbnQgPSBwZXJjZW50OworICAgICAgcG9zdCA9IFRSVUU7CisgICAgfQorICB9CisgIGlmIChwb3N0KSB7CisgICAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKKworICAgIC8qIHNjYWxlIHRvIGhpZ2ggcGVyY2VudCBzbyB0aGF0IGl0IGJlY29tZXMgdGhlIDEwMCUgbWFyayAqLworICAgIHBlcmNlbnQgPSBwZXJjZW50ICogMTAwIC8gbXEtPmhpZ2hfcGVyY2VudDsKKyAgICAvKiBjbGlwICovCisgICAgaWYgKHBlcmNlbnQgPiAxMDApCisgICAgICBwZXJjZW50ID0gMTAwOworCisgICAgR1NUX0RFQlVHX09CSkVDVCAobXEsICJidWZmZXJpbmcgJWQgcGVyY2VudCIsIHBlcmNlbnQpOworICAgIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfYnVmZmVyaW5nIChHU1RfT0JKRUNUX0NBU1QgKG1xKSwgcGVyY2VudCk7CisKKyAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKG1xKSwgbWVzc2FnZSk7CisgIH0gZWxzZSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAobXEsICJmaWxsZWQgJWQgcGVyY2VudCIsIHBlcmNlbnQpOworICB9Cit9CisKKy8qIGNhbGN1bGF0ZSB0aGUgZGlmZiBiZXR3ZWVuIHJ1bm5pbmcgdGltZSBvbiB0aGUgc2luayBhbmQgc3JjIG9mIHRoZSBxdWV1ZS4KKyAqIFRoaXMgaXMgdGhlIHRvdGFsIGFtb3VudCBvZiB0aW1lIGluIHRoZSBxdWV1ZS4gCisgKiBXSVRIIExPQ0sgVEFLRU4gKi8KK3N0YXRpYyB2b2lkCit1cGRhdGVfdGltZV9sZXZlbCAoR3N0TXVsdGlRdWV1ZSAqIG1xLCBHc3RTaW5nbGVRdWV1ZSAqIHNxKQoreworICBnaW50NjQgc2lua190aW1lLCBzcmNfdGltZTsKKworICBpZiAoc3EtPnNpbmtfdGFpbnRlZCkgeworICAgIHNpbmtfdGltZSA9IHNxLT5zaW5rdGltZSA9CisgICAgICAgIGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnNxLT5zaW5rX3NlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwKKyAgICAgICAgc3EtPnNpbmtfc2VnbWVudC5wb3NpdGlvbik7CisKKyAgICBpZiAoR19VTkxJS0VMWSAoc2lua190aW1lICE9IEdTVF9DTE9DS19USU1FX05PTkUpKQorICAgICAgLyogaWYgd2UgaGF2ZSBhIHRpbWUsIHdlIGJlY29tZSB1bnRhaW50ZWQgYW5kIHVzZSB0aGUgdGltZSAqLworICAgICAgc3EtPnNpbmtfdGFpbnRlZCA9IEZBTFNFOworICB9IGVsc2UKKyAgICBzaW5rX3RpbWUgPSBzcS0+c2lua3RpbWU7CisKKyAgaWYgKHNxLT5zcmNfdGFpbnRlZCkgeworICAgIHNyY190aW1lID0gc3EtPnNyY3RpbWUgPQorICAgICAgICBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZzcS0+c3JjX3NlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwKKyAgICAgICAgc3EtPnNyY19zZWdtZW50LnBvc2l0aW9uKTsKKyAgICAvKiBpZiB3ZSBoYXZlIGEgdGltZSwgd2UgYmVjb21lIHVudGFpbnRlZCBhbmQgdXNlIHRoZSB0aW1lICovCisgICAgaWYgKEdfVU5MSUtFTFkgKHNyY190aW1lICE9IEdTVF9DTE9DS19USU1FX05PTkUpKQorICAgICAgc3EtPnNyY190YWludGVkID0gRkFMU0U7CisgIH0gZWxzZQorICAgIHNyY190aW1lID0gc3EtPnNyY3RpbWU7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAobXEsCisgICAgICAicXVldWUgJWQsIHNpbmsgJSIgR1NUX1RJTUVfRk9STUFUICIsIHNyYyAlIiBHU1RfVElNRV9GT1JNQVQsIHNxLT5pZCwKKyAgICAgIEdTVF9USU1FX0FSR1MgKHNpbmtfdGltZSksIEdTVF9USU1FX0FSR1MgKHNyY190aW1lKSk7CisKKyAgLyogVGhpcyBhbGxvd3MgZm9yIHN0cmVhbXMgd2l0aCBvdXQgb2Ygb3JkZXIgdGltZXN0YW1waW5nIC0gc29tZXRpbWVzIHRoZQorICAgKiBlbWVyZ2luZyB0aW1lc3RhbXAgaXMgbGF0ZXIgdGhhbiB0aGUgYXJyaXZpbmcgb25lKHMpICovCisgIGlmIChHX0xJS0VMWSAoc2lua190aW1lICE9IC0xICYmIHNyY190aW1lICE9IC0xICYmIHNpbmtfdGltZSA+IHNyY190aW1lKSkKKyAgICBzcS0+Y3VyX3RpbWUgPSBzaW5rX3RpbWUgLSBzcmNfdGltZTsKKyAgZWxzZQorICAgIHNxLT5jdXJfdGltZSA9IDA7CisKKyAgLyogdXBkYXRpbmcgdGhlIHRpbWUgbGV2ZWwgY2FuIGNoYW5nZSB0aGUgYnVmZmVyaW5nIHN0YXRlICovCisgIHVwZGF0ZV9idWZmZXJpbmcgKG1xLCBzcSk7CisKKyAgcmV0dXJuOworfQorCisvKiB0YWtlIGEgU0VHTUVOVCBldmVudCBhbmQgYXBwbHkgdGhlIHZhbHVlcyB0byBzZWdtZW50LCB1cGRhdGluZyB0aGUgdGltZQorICogbGV2ZWwgb2YgcXVldWUuICovCitzdGF0aWMgdm9pZAorYXBwbHlfc2VnbWVudCAoR3N0TXVsdGlRdWV1ZSAqIG1xLCBHc3RTaW5nbGVRdWV1ZSAqIHNxLCBHc3RFdmVudCAqIGV2ZW50LAorICAgIEdzdFNlZ21lbnQgKiBzZWdtZW50KQoreworICBnc3RfZXZlbnRfY29weV9zZWdtZW50IChldmVudCwgc2VnbWVudCk7CisKKyAgLyogbm93IGNvbmZpZ3VyZSB0aGUgdmFsdWVzLCB3ZSB1c2UgdGhlc2UgdG8gdHJhY2sgdGltZXN0YW1wcyBvbiB0aGUKKyAgICogc2lua3BhZC4gKi8KKyAgaWYgKHNlZ21lbnQtPmZvcm1hdCAhPSBHU1RfRk9STUFUX1RJTUUpIHsKKyAgICAvKiBub24tdGltZSBmb3JtYXQsIHByZXRlbnQgdGhlIGN1cnJlbnQgdGltZSBzZWdtZW50IGlzIGNsb3NlZCB3aXRoIGEKKyAgICAgKiAwIHN0YXJ0IGFuZCB1bmtub3duIHN0b3AgdGltZS4gKi8KKyAgICBzZWdtZW50LT5mb3JtYXQgPSBHU1RfRk9STUFUX1RJTUU7CisgICAgc2VnbWVudC0+c3RhcnQgPSAwOworICAgIHNlZ21lbnQtPnN0b3AgPSAtMTsKKyAgICBzZWdtZW50LT50aW1lID0gMDsKKyAgfQorICBHU1RfTVVMVElfUVVFVUVfTVVURVhfTE9DSyAobXEpOworCisgIGlmIChzZWdtZW50ID09ICZzcS0+c2lua19zZWdtZW50KQorICAgIHNxLT5zaW5rX3RhaW50ZWQgPSBUUlVFOworICBlbHNlCisgICAgc3EtPnNyY190YWludGVkID0gVFJVRTsKKworICBHU1RfREVCVUdfT0JKRUNUIChtcSwKKyAgICAgICJxdWV1ZSAlZCwgY29uZmlndXJlZCBTRUdNRU5UICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwgc3EtPmlkLCBzZWdtZW50KTsKKworICAvKiBzZWdtZW50IGNhbiB1cGRhdGUgdGhlIHRpbWUgbGV2ZWwgb2YgdGhlIHF1ZXVlICovCisgIHVwZGF0ZV90aW1lX2xldmVsIChtcSwgc3EpOworCisgIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9VTkxPQ0sgKG1xKTsKK30KKworLyogdGFrZSBhIGJ1ZmZlciBhbmQgdXBkYXRlIHNlZ21lbnQsIHVwZGF0aW5nIHRoZSB0aW1lIGxldmVsIG9mIHRoZSBxdWV1ZS4gKi8KK3N0YXRpYyB2b2lkCithcHBseV9idWZmZXIgKEdzdE11bHRpUXVldWUgKiBtcSwgR3N0U2luZ2xlUXVldWUgKiBzcSwgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwKKyAgICBHc3RDbG9ja1RpbWUgZHVyYXRpb24sIEdzdFNlZ21lbnQgKiBzZWdtZW50KQoreworICBHU1RfTVVMVElfUVVFVUVfTVVURVhfTE9DSyAobXEpOworCisgIC8qIGlmIG5vIHRpbWVzdGFtcCBpcyBzZXQsIGFzc3VtZSBpdCdzIGNvbnRpbnVvdXMgd2l0aCB0aGUgcHJldmlvdXMgCisgICAqIHRpbWUgKi8KKyAgaWYgKHRpbWVzdGFtcCA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKQorICAgIHRpbWVzdGFtcCA9IHNlZ21lbnQtPnBvc2l0aW9uOworCisgIC8qIGFkZCBkdXJhdGlvbiAqLworICBpZiAoZHVyYXRpb24gIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKKyAgICB0aW1lc3RhbXAgKz0gZHVyYXRpb247CisKKyAgR1NUX0RFQlVHX09CSkVDVCAobXEsICJxdWV1ZSAlZCwgcG9zaXRpb24gdXBkYXRlZCB0byAlIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICBzcS0+aWQsIEdTVF9USU1FX0FSR1MgKHRpbWVzdGFtcCkpOworCisgIHNlZ21lbnQtPnBvc2l0aW9uID0gdGltZXN0YW1wOworCisgIGlmIChzZWdtZW50ID09ICZzcS0+c2lua19zZWdtZW50KQorICAgIHNxLT5zaW5rX3RhaW50ZWQgPSBUUlVFOworICBlbHNlCisgICAgc3EtPnNyY190YWludGVkID0gVFJVRTsKKworICAvKiBjYWxjIGRpZmYgd2l0aCBvdGhlciBlbmQgKi8KKyAgdXBkYXRlX3RpbWVfbGV2ZWwgKG1xLCBzcSk7CisgIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9VTkxPQ0sgKG1xKTsKK30KKworc3RhdGljIEdzdENsb2NrVGltZQorZ2V0X3J1bm5pbmdfdGltZSAoR3N0U2VnbWVudCAqIHNlZ21lbnQsIEdzdE1pbmlPYmplY3QgKiBvYmplY3QsIGdib29sZWFuIGVuZCkKK3sKKyAgR3N0Q2xvY2tUaW1lIHRpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworCisgIGlmIChHU1RfSVNfQlVGRkVSIChvYmplY3QpKSB7CisgICAgR3N0QnVmZmVyICpidWYgPSBHU1RfQlVGRkVSX0NBU1QgKG9iamVjdCk7CisKKyAgICBpZiAoR1NUX0JVRkZFUl9USU1FU1RBTVBfSVNfVkFMSUQgKGJ1ZikpIHsKKyAgICAgIHRpbWUgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKTsKKyAgICAgIGlmIChlbmQgJiYgR1NUX0JVRkZFUl9EVVJBVElPTl9JU19WQUxJRCAoYnVmKSkKKyAgICAgICAgdGltZSArPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpOworICAgICAgaWYgKHRpbWUgPiBzZWdtZW50LT5zdG9wKQorICAgICAgICB0aW1lID0gc2VnbWVudC0+c3RvcDsKKyAgICAgIHRpbWUgPSBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKHNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgdGltZSk7CisgICAgfQorICB9IGVsc2UgaWYgKEdTVF9JU19CVUZGRVJfTElTVCAob2JqZWN0KSkgeworICAgIEdzdEJ1ZmZlckxpc3QgKmxpc3QgPSBHU1RfQlVGRkVSX0xJU1RfQ0FTVCAob2JqZWN0KTsKKyAgICBnaW50IGksIG47CisgICAgR3N0QnVmZmVyICpidWY7CisKKyAgICBuID0gZ3N0X2J1ZmZlcl9saXN0X2xlbiAobGlzdCk7CisgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgYnVmID0gZ3N0X2J1ZmZlcl9saXN0X2dldCAobGlzdCwgaSk7CisgICAgICBpZiAoR1NUX0JVRkZFUl9USU1FU1RBTVBfSVNfVkFMSUQgKGJ1ZikpIHsKKyAgICAgICAgdGltZSA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpOworICAgICAgICBpZiAoZW5kICYmIEdTVF9CVUZGRVJfRFVSQVRJT05fSVNfVkFMSUQgKGJ1ZikpCisgICAgICAgICAgdGltZSArPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpOworICAgICAgICBpZiAodGltZSA+IHNlZ21lbnQtPnN0b3ApCisgICAgICAgICAgdGltZSA9IHNlZ21lbnQtPnN0b3A7CisgICAgICAgIHRpbWUgPSBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKHNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgdGltZSk7CisgICAgICAgIGlmICghZW5kKQorICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgIH0gZWxzZSBpZiAoIWVuZCkgeworICAgICAgICBnb3RvIGRvbmU7CisgICAgICB9CisgICAgfQorICB9IGVsc2UgaWYgKEdTVF9JU19FVkVOVCAob2JqZWN0KSkgeworICAgIEdzdEV2ZW50ICpldmVudCA9IEdTVF9FVkVOVF9DQVNUIChvYmplY3QpOworCisgICAgLyogRm9yIG5ld3NlZ21lbnQgZXZlbnRzIHJldHVybiB0aGUgcnVubmluZyB0aW1lIG9mIHRoZSBzdGFydCBwb3NpdGlvbiAqLworICAgIGlmIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9TRUdNRU5UKSB7CisgICAgICBjb25zdCBHc3RTZWdtZW50ICpuZXdfc2VnbWVudDsKKworICAgICAgZ3N0X2V2ZW50X3BhcnNlX3NlZ21lbnQgKGV2ZW50LCAmbmV3X3NlZ21lbnQpOworICAgICAgaWYgKG5ld19zZWdtZW50LT5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKSB7CisgICAgICAgIHRpbWUgPQorICAgICAgICAgICAgZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lIChuZXdfc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLAorICAgICAgICAgICAgbmV3X3NlZ21lbnQtPnN0YXJ0KTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworZG9uZToKKyAgcmV0dXJuIHRpbWU7Cit9CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuCitnc3Rfc2luZ2xlX3F1ZXVlX3B1c2hfb25lIChHc3RNdWx0aVF1ZXVlICogbXEsIEdzdFNpbmdsZVF1ZXVlICogc3EsCisgICAgR3N0TWluaU9iamVjdCAqIG9iamVjdCkKK3sKKyAgR3N0Rmxvd1JldHVybiByZXN1bHQgPSBHU1RfRkxPV19PSzsKKworICBpZiAoR1NUX0lTX0JVRkZFUiAob2JqZWN0KSkgeworICAgIEdzdEJ1ZmZlciAqYnVmZmVyOworICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIGR1cmF0aW9uOworI2lmIDAKKyAgICBHc3RDYXBzICpjYXBzOworI2VuZGlmCisKKyAgICBidWZmZXIgPSBHU1RfQlVGRkVSX0NBU1QgKG9iamVjdCk7CisgICAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcik7CisgICAgZHVyYXRpb24gPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpOworI2lmIDAKKyAgICBjYXBzID0gR1NUX0JVRkZFUl9DQVBTIChidWZmZXIpOworI2VuZGlmCisKKyAgICBhcHBseV9idWZmZXIgKG1xLCBzcSwgdGltZXN0YW1wLCBkdXJhdGlvbiwgJnNxLT5zcmNfc2VnbWVudCk7CisKKyAgICAvKiBBcHBseWluZyB0aGUgYnVmZmVyIG1heSBoYXZlIG1hZGUgdGhlIHF1ZXVlIG5vbi1mdWxsIGFnYWluLCB1bmJsb2NrIGl0IGlmIG5lZWRlZCAqLworICAgIGdzdF9kYXRhX3F1ZXVlX2xpbWl0c19jaGFuZ2VkIChzcS0+cXVldWUpOworCisgICAgR1NUX0RFQlVHX09CSkVDVCAobXEsCisgICAgICAgICJTaW5nbGVRdWV1ZSAlZCA6IFB1c2hpbmcgYnVmZmVyICVwIHdpdGggdHMgJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgICBzcS0+aWQsIGJ1ZmZlciwgR1NUX1RJTUVfQVJHUyAodGltZXN0YW1wKSk7CisKKyNpZiAwCisgICAgLyogU2V0IGNhcHMgb24gcGFkIGJlZm9yZSBwdXNoaW5nLCB0aGlzIGF2b2lkcyBjb3JlIGNhbGxpbmcgdGhlIGFjY2VwdGNhcHMKKyAgICAgKiBmdW5jdGlvbiBvbiB0aGUgc3JjcGFkLCB3aGljaCB3aWxsIGNhbGwgYWNjZXB0Y2FwcyB1cHN0cmVhbSwgd2hpY2ggbWlnaHQKKyAgICAgKiBub3QgYWNjZXB0IHRoZXNlIGNhcHMgKGFueW1vcmUpLiAqLworICAgIGlmIChjYXBzICYmIGNhcHMgIT0gR1NUX1BBRF9DQVBTIChzcS0+c3JjcGFkKSkKKyAgICAgIGdzdF9wYWRfc2V0X2NhcHMgKHNxLT5zcmNwYWQsIGNhcHMpOworI2VuZGlmCisKKyAgICByZXN1bHQgPSBnc3RfcGFkX3B1c2ggKHNxLT5zcmNwYWQsIGJ1ZmZlcik7CisgIH0gZWxzZSBpZiAoR1NUX0lTX0VWRU5UIChvYmplY3QpKSB7CisgICAgR3N0RXZlbnQgKmV2ZW50OworCisgICAgZXZlbnQgPSBHU1RfRVZFTlRfQ0FTVCAob2JqZWN0KTsKKworICAgIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgeworICAgICAgY2FzZSBHU1RfRVZFTlRfRU9TOgorICAgICAgICByZXN1bHQgPSBHU1RfRkxPV19VTkVYUEVDVEVEOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6CisgICAgICAgIGFwcGx5X3NlZ21lbnQgKG1xLCBzcSwgZXZlbnQsICZzcS0+c3JjX3NlZ21lbnQpOworICAgICAgICAvKiBBcHBseWluZyB0aGUgc2VnbWVudCBtYXkgaGF2ZSBtYWRlIHRoZSBxdWV1ZSBub24tZnVsbCBhZ2FpbiwgdW5ibG9jayBpdCBpZiBuZWVkZWQgKi8KKyAgICAgICAgZ3N0X2RhdGFfcXVldWVfbGltaXRzX2NoYW5nZWQgKHNxLT5xdWV1ZSk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgR1NUX0RFQlVHX09CSkVDVCAobXEsCisgICAgICAgICJTaW5nbGVRdWV1ZSAlZCA6IFB1c2hpbmcgZXZlbnQgJXAgb2YgdHlwZSAlcyIsCisgICAgICAgIHNxLT5pZCwgZXZlbnQsIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7CisKKyAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHNxLT5zcmNwYWQsIGV2ZW50KTsKKyAgfSBlbHNlIHsKKyAgICBnX3dhcm5pbmcgKCJVbmV4cGVjdGVkIG9iamVjdCBpbiBzaW5nbGVxdWV1ZSAlZCAocmVmY291bnRpbmcgcHJvYmxlbT8pIiwKKyAgICAgICAgc3EtPmlkKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworCisgIC8qIEVSUk9SUyAqLworfQorCitzdGF0aWMgR3N0TWluaU9iamVjdCAqCitnc3RfbXVsdGlfcXVldWVfaXRlbV9zdGVhbF9vYmplY3QgKEdzdE11bHRpUXVldWVJdGVtICogaXRlbSkKK3sKKyAgR3N0TWluaU9iamVjdCAqcmVzOworCisgIHJlcyA9IGl0ZW0tPm9iamVjdDsKKyAgaXRlbS0+b2JqZWN0ID0gTlVMTDsKKworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZAorZ3N0X211bHRpX3F1ZXVlX2l0ZW1fZGVzdHJveSAoR3N0TXVsdGlRdWV1ZUl0ZW0gKiBpdGVtKQoreworICBpZiAoaXRlbS0+b2JqZWN0KQorICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAoaXRlbS0+b2JqZWN0KTsKKyAgZ19zbGljZV9mcmVlIChHc3RNdWx0aVF1ZXVlSXRlbSwgaXRlbSk7Cit9CisKKy8qIHRha2VzIG93bmVyc2hpcCBvZiBwYXNzZWQgbWluaSBvYmplY3QhICovCitzdGF0aWMgR3N0TXVsdGlRdWV1ZUl0ZW0gKgorZ3N0X211bHRpX3F1ZXVlX2J1ZmZlcl9pdGVtX25ldyAoR3N0TWluaU9iamVjdCAqIG9iamVjdCwgZ3VpbnQzMiBjdXJpZCkKK3sKKyAgR3N0TXVsdGlRdWV1ZUl0ZW0gKml0ZW07CisKKyAgaXRlbSA9IGdfc2xpY2VfbmV3IChHc3RNdWx0aVF1ZXVlSXRlbSk7CisgIGl0ZW0tPm9iamVjdCA9IG9iamVjdDsKKyAgaXRlbS0+ZGVzdHJveSA9IChHRGVzdHJveU5vdGlmeSkgZ3N0X211bHRpX3F1ZXVlX2l0ZW1fZGVzdHJveTsKKyAgaXRlbS0+cG9zaWQgPSBjdXJpZDsKKworICBpdGVtLT5zaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoR1NUX0JVRkZFUl9DQVNUIChvYmplY3QpKTsKKyAgaXRlbS0+ZHVyYXRpb24gPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChvYmplY3QpOworICBpZiAoaXRlbS0+ZHVyYXRpb24gPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKKyAgICBpdGVtLT5kdXJhdGlvbiA9IDA7CisgIGl0ZW0tPnZpc2libGUgPSBUUlVFOworICByZXR1cm4gaXRlbTsKK30KKworc3RhdGljIEdzdE11bHRpUXVldWVJdGVtICoKK2dzdF9tdWx0aV9xdWV1ZV9ldmVudF9pdGVtX25ldyAoR3N0TWluaU9iamVjdCAqIG9iamVjdCwgZ3VpbnQzMiBjdXJpZCkKK3sKKyAgR3N0TXVsdGlRdWV1ZUl0ZW0gKml0ZW07CisKKyAgaXRlbSA9IGdfc2xpY2VfbmV3IChHc3RNdWx0aVF1ZXVlSXRlbSk7CisgIGl0ZW0tPm9iamVjdCA9IG9iamVjdDsKKyAgaXRlbS0+ZGVzdHJveSA9IChHRGVzdHJveU5vdGlmeSkgZ3N0X211bHRpX3F1ZXVlX2l0ZW1fZGVzdHJveTsKKyAgaXRlbS0+cG9zaWQgPSBjdXJpZDsKKworICBpdGVtLT5zaXplID0gMDsKKyAgaXRlbS0+ZHVyYXRpb24gPSAwOworICBpdGVtLT52aXNpYmxlID0gRkFMU0U7CisgIHJldHVybiBpdGVtOworfQorCisvKiBFYWNoIG1haW4gbG9vcCBhdHRlbXB0cyB0byBwdXNoIGJ1ZmZlcnMgdW50aWwgdGhlIHJldHVybiB2YWx1ZQorICogaXMgbm90LWxpbmtlZC4gbm90LWxpbmtlZCBwYWRzIGFyZSBub3QgYWxsb3dlZCB0byBwdXNoIGRhdGEgYmV5b25kCisgKiBhbnkgbGlua2VkIHBhZHMsIHNvIHRoZXkgZG9uJ3QgJ3J1c2ggYWhlYWQgb2YgdGhlIHBhY2snLgorICovCitzdGF0aWMgdm9pZAorZ3N0X211bHRpX3F1ZXVlX2xvb3AgKEdzdFBhZCAqIHBhZCkKK3sKKyAgR3N0U2luZ2xlUXVldWUgKnNxOworICBHc3RNdWx0aVF1ZXVlSXRlbSAqaXRlbTsKKyAgR3N0RGF0YVF1ZXVlSXRlbSAqc2l0ZW07CisgIEdzdE11bHRpUXVldWUgKm1xOworICBHc3RNaW5pT2JqZWN0ICpvYmplY3QgPSBOVUxMOworICBndWludDMyIG5ld2lkOworICBHc3RGbG93UmV0dXJuIHJlc3VsdDsKKyAgR3N0Q2xvY2tUaW1lIG5leHRfdGltZTsKKworICBzcSA9IChHc3RTaW5nbGVRdWV1ZSAqKSBnc3RfcGFkX2dldF9lbGVtZW50X3ByaXZhdGUgKHBhZCk7CisgIG1xID0gc3EtPm1xdWV1ZTsKKworICBHU1RfREVCVUdfT0JKRUNUIChtcSwgIlNpbmdsZVF1ZXVlICVkIDogdHJ5aW5nIHRvIHBvcCBhbiBvYmplY3QiLCBzcS0+aWQpOworCisgIGlmIChzcS0+Zmx1c2hpbmcpCisgICAgZ290byBvdXRfZmx1c2hpbmc7CisKKyAgLyogR2V0IHNvbWV0aGluZyBmcm9tIHRoZSBxdWV1ZSwgYmxvY2tpbmcgdW50aWwgdGhhdCBoYXBwZW5zLCBvciB3ZSBnZXQKKyAgICogZmx1c2hlZCAqLworICBpZiAoIShnc3RfZGF0YV9xdWV1ZV9wb3AgKHNxLT5xdWV1ZSwgJnNpdGVtKSkpCisgICAgZ290byBvdXRfZmx1c2hpbmc7CisKKyAgaXRlbSA9IChHc3RNdWx0aVF1ZXVlSXRlbSAqKSBzaXRlbTsKKyAgbmV3aWQgPSBpdGVtLT5wb3NpZDsKKworICAvKiBzdGVhbCB0aGUgb2JqZWN0IGFuZCBkZXN0cm95IHRoZSBpdGVtICovCisgIG9iamVjdCA9IGdzdF9tdWx0aV9xdWV1ZV9pdGVtX3N0ZWFsX29iamVjdCAoaXRlbSk7CisgIGdzdF9tdWx0aV9xdWV1ZV9pdGVtX2Rlc3Ryb3kgKGl0ZW0pOworCisgIC8qIEdldCBydW5uaW5nIHRpbWUgb2YgdGhlIGl0ZW0uIEV2ZW50cyB3aWxsIGhhdmUgR1NUX0NMT0NLX1RJTUVfTk9ORSAqLworICBuZXh0X3RpbWUgPSBnZXRfcnVubmluZ190aW1lICgmc3EtPnNyY19zZWdtZW50LCBvYmplY3QsIFRSVUUpOworCisgIEdTVF9MT0dfT0JKRUNUIChtcSwgIlNpbmdsZVF1ZXVlICVkIDogbmV3aWQ6JWQgLCBvbGRpZDolZCIsCisgICAgICBzcS0+aWQsIG5ld2lkLCBzcS0+bGFzdF9vbGRpZCk7CisKKyAgLyogSWYgd2UncmUgbm90LWxpbmtlZCwgd2UgZG8gc29tZSBleHRyYSB3b3JrIGJlY2F1c2Ugd2UgbWlnaHQgbmVlZCB0bworICAgKiB3YWl0IGJlZm9yZSBwdXNoaW5nLiBJZiB3ZSdyZSBsaW5rZWQgYnV0IHRoZXJlJ3MgYSBnYXAgaW4gdGhlIElEcywKKyAgICogb3IgaXQncyB0aGUgZmlyc3QgbG9vcCwgb3Igd2UganVzdCBwYXNzZWQgdGhlIHByZXZpb3VzIGhpZ2hpZCwgCisgICAqIHdlIG1pZ2h0IG5lZWQgdG8gd2FrZSBzb21lIHNsZWVwaW5nIHBhZCB1cCwgc28gdGhlcmUncyBleHRyYSB3b3JrIAorICAgKiB0aGVyZSB0b28gKi8KKyAgaWYgKHNxLT5zcmNyZXN1bHQgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRAorICAgICAgfHwgKHNxLT5sYXN0X29sZGlkID09IEdfTUFYVUlOVDMyKSB8fCAobmV3aWQgIT0gKHNxLT5sYXN0X29sZGlkICsgMSkpCisgICAgICB8fCBzcS0+bGFzdF9vbGRpZCA+IG1xLT5oaWdoaWQpIHsKKyAgICBHU1RfTE9HX09CSkVDVCAobXEsICJDSEVDS0lORyBzcS0+c3JjcmVzdWx0OiAlcyIsCisgICAgICAgIGdzdF9mbG93X2dldF9uYW1lIChzcS0+c3JjcmVzdWx0KSk7CisKKyAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfTE9DSyAobXEpOworCisgICAgLyogQ2hlY2sgYWdhaW4gaWYgd2UncmUgZmx1c2hpbmcgYWZ0ZXIgdGhlIGxvY2sgaXMgdGFrZW4sCisgICAgICogdGhlIGZsdXNoIGZsYWcgbWlnaHQgaGF2ZSBiZWVuIGNoYW5nZWQgaW4gdGhlIG1lYW50aW1lICovCisgICAgaWYgKHNxLT5mbHVzaGluZykgeworICAgICAgR1NUX01VTFRJX1FVRVVFX01VVEVYX1VOTE9DSyAobXEpOworICAgICAgZ290byBvdXRfZmx1c2hpbmc7CisgICAgfQorCisgICAgLyogVXBkYXRlIHRoZSBuZXh0aWQgc28gb3RoZXIgdGhyZWFkcyBrbm93IHdoZW4gdG8gd2FrZSB1cyB1cCAqLworICAgIHNxLT5uZXh0aWQgPSBuZXdpZDsKKyAgICBzcS0+bmV4dF90aW1lID0gbmV4dF90aW1lOworCisgICAgLyogVXBkYXRlIHRoZSBvbGRpZCAodGhlIGxhc3QgSUQgd2Ugb3V0cHV0KSBmb3IgaGlnaGlkIHRyYWNraW5nICovCisgICAgaWYgKHNxLT5sYXN0X29sZGlkICE9IEdfTUFYVUlOVDMyKQorICAgICAgc3EtPm9sZGlkID0gc3EtPmxhc3Rfb2xkaWQ7CisKKyAgICBpZiAoc3EtPnNyY3Jlc3VsdCA9PSBHU1RfRkxPV19OT1RfTElOS0VEKSB7CisgICAgICAvKiBHbyB0byBzbGVlcCB1bnRpbCBpdCdzIHRpbWUgdG8gcHVzaCB0aGlzIGJ1ZmZlciAqLworCisgICAgICAvKiBSZWNvbXB1dGUgdGhlIGhpZ2hpZCAqLworICAgICAgY29tcHV0ZV9oaWdoX2lkIChtcSk7CisgICAgICAvKiBSZWNvbXB1dGUgdGhlIGhpZ2ggdGltZSAqLworICAgICAgY29tcHV0ZV9oaWdoX3RpbWUgKG1xKTsKKworICAgICAgd2hpbGUgKCgobXEtPnN5bmNfYnlfcnVubmluZ190aW1lICYmIG5leHRfdGltZSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FICYmCisgICAgICAgICAgICAgICAgICAobXEtPmhpZ2hfdGltZSA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FCisgICAgICAgICAgICAgICAgICAgICAgfHwgbmV4dF90aW1lID49IG1xLT5oaWdoX3RpbWUpKQorICAgICAgICAgICAgICB8fCAoIW1xLT5zeW5jX2J5X3J1bm5pbmdfdGltZSAmJiBuZXdpZCA+IG1xLT5oaWdoaWQpKQorICAgICAgICAgICYmIHNxLT5zcmNyZXN1bHQgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCkgeworCisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG1xLAorICAgICAgICAgICAgInF1ZXVlICVkIHNsZWVwaW5nIGZvciBub3QtbGlua2VkIHdha2V1cCB3aXRoICIKKyAgICAgICAgICAgICJuZXdpZCAldSwgaGlnaGlkICV1LCBuZXh0X3RpbWUgJSIgR1NUX1RJTUVfRk9STUFUCisgICAgICAgICAgICAiLCBoaWdoX3RpbWUgJSIgR1NUX1RJTUVfRk9STUFULCBzcS0+aWQsIG5ld2lkLCBtcS0+aGlnaGlkLAorICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAobmV4dF90aW1lKSwgR1NUX1RJTUVfQVJHUyAobXEtPmhpZ2hfdGltZSkpOworCisgICAgICAgIC8qIFdha2UgdXAgYWxsIG5vbi1saW5rZWQgcGFkcyBiZWZvcmUgd2Ugc2xlZXAgKi8KKyAgICAgICAgd2FrZV91cF9uZXh0X25vbl9saW5rZWQgKG1xKTsKKworICAgICAgICBtcS0+bnVtd2FpdGluZysrOworICAgICAgICBnX2NvbmRfd2FpdCAoc3EtPnR1cm4sIG1xLT5xbG9jayk7CisgICAgICAgIG1xLT5udW13YWl0aW5nLS07CisKKyAgICAgICAgaWYgKHNxLT5mbHVzaGluZykgeworICAgICAgICAgIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9VTkxPQ0sgKG1xKTsKKyAgICAgICAgICBnb3RvIG91dF9mbHVzaGluZzsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFJlY29tcHV0ZSB0aGUgaGlnaCB0aW1lICovCisgICAgICAgIGNvbXB1dGVfaGlnaF90aW1lIChtcSk7CisKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAobXEsICJxdWV1ZSAlZCB3b2tlbiBmcm9tIHNsZWVwaW5nIGZvciBub3QtbGlua2VkICIKKyAgICAgICAgICAgICJ3YWtldXAgd2l0aCBuZXdpZCAldSwgaGlnaGlkICV1LCBuZXh0X3RpbWUgJSIgR1NUX1RJTUVfRk9STUFUCisgICAgICAgICAgICAiLCBoaWdoX3RpbWUgJSIgR1NUX1RJTUVfRk9STUFULCBzcS0+aWQsIG5ld2lkLCBtcS0+aGlnaGlkLAorICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAobmV4dF90aW1lKSwgR1NUX1RJTUVfQVJHUyAobXEtPmhpZ2hfdGltZSkpOworICAgICAgfQorCisgICAgICAvKiBSZS1jb21wdXRlIHRoZSBoaWdoX2lkIGluIGNhc2Ugc29tZW9uZSBlbHNlIHB1c2hlZCAqLworICAgICAgY29tcHV0ZV9oaWdoX2lkIChtcSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGNvbXB1dGVfaGlnaF9pZCAobXEpOworICAgICAgLyogV2FrZSB1cCBhbGwgbm9uLWxpbmtlZCBwYWRzICovCisgICAgICB3YWtlX3VwX25leHRfbm9uX2xpbmtlZCAobXEpOworICAgIH0KKyAgICAvKiBXZSdyZSBkb25lIHdhaXRpbmcsIHdlIGNhbiBjbGVhciB0aGUgbmV4dGlkIGFuZCBuZXh0dGltZSAqLworICAgIHNxLT5uZXh0aWQgPSAwOworICAgIHNxLT5uZXh0X3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworCisgICAgR1NUX01VTFRJX1FVRVVFX01VVEVYX1VOTE9DSyAobXEpOworICB9CisKKyAgaWYgKHNxLT5mbHVzaGluZykKKyAgICBnb3RvIG91dF9mbHVzaGluZzsKKworICBHU1RfTE9HX09CSkVDVCAobXEsICJCRUZPUkUgUFVTSElORyBzcS0+c3JjcmVzdWx0OiAlcyIsCisgICAgICBnc3RfZmxvd19nZXRfbmFtZSAoc3EtPnNyY3Jlc3VsdCkpOworCisgIC8qIFVwZGF0ZSB0aW1lIHN0YXRzICovCisgIG5leHRfdGltZSA9IGdldF9ydW5uaW5nX3RpbWUgKCZzcS0+c3JjX3NlZ21lbnQsIG9iamVjdCwgRkFMU0UpOworICBpZiAobmV4dF90aW1lICE9IEdTVF9DTE9DS19USU1FX05PTkUpIHsKKyAgICBpZiAoc3EtPmxhc3RfdGltZSA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FIHx8IHNxLT5sYXN0X3RpbWUgPCBuZXh0X3RpbWUpCisgICAgICBzcS0+bGFzdF90aW1lID0gbmV4dF90aW1lOworICAgIGlmIChtcS0+aGlnaF90aW1lID09IEdTVF9DTE9DS19USU1FX05PTkUgfHwgbXEtPmhpZ2hfdGltZSA8PSBuZXh0X3RpbWUpIHsKKyAgICAgIC8qIFdha2UgdXAgYWxsIG5vbi1saW5rZWQgcGFkcyBub3cgdGhhdCB3ZSBhZHZhbmNlZCB0aGUgaGlnaCB0aW1lICovCisgICAgICBtcS0+aGlnaF90aW1lID0gbmV4dF90aW1lOworICAgICAgd2FrZV91cF9uZXh0X25vbl9saW5rZWQgKG1xKTsKKyAgICB9CisgIH0KKworICAvKiBUcnkgdG8gcHVzaCBvdXQgdGhlIG5ldyBvYmplY3QgKi8KKyAgcmVzdWx0ID0gZ3N0X3NpbmdsZV9xdWV1ZV9wdXNoX29uZSAobXEsIHNxLCBvYmplY3QpOworICBzcS0+c3JjcmVzdWx0ID0gcmVzdWx0OworICBvYmplY3QgPSBOVUxMOworCisgIGlmIChyZXN1bHQgIT0gR1NUX0ZMT1dfT0sgJiYgcmVzdWx0ICE9IEdTVF9GTE9XX05PVF9MSU5LRUQKKyAgICAgICYmIHJlc3VsdCAhPSBHU1RfRkxPV19VTkVYUEVDVEVEKQorICAgIGdvdG8gb3V0X2ZsdXNoaW5nOworCisgIEdTVF9MT0dfT0JKRUNUIChtcSwgIkFGVEVSIFBVU0hJTkcgc3EtPnNyY3Jlc3VsdDogJXMiLAorICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKHNxLT5zcmNyZXN1bHQpKTsKKworICBzcS0+bGFzdF9vbGRpZCA9IG5ld2lkOworCisgIHJldHVybjsKKworb3V0X2ZsdXNoaW5nOgorICB7CisgICAgaWYgKG9iamVjdCkKKyAgICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAob2JqZWN0KTsKKworICAgIC8qIE5lZWQgdG8gbWFrZSBzdXJlIHdha2UgdXAgYW55IHNsZWVwaW5nIHBhZHMgd2hlbiB3ZSBleGl0ICovCisgICAgR1NUX01VTFRJX1FVRVVFX01VVEVYX0xPQ0sgKG1xKTsKKyAgICBjb21wdXRlX2hpZ2hfaWQgKG1xKTsKKyAgICB3YWtlX3VwX25leHRfbm9uX2xpbmtlZCAobXEpOworICAgIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9VTkxPQ0sgKG1xKTsKKworICAgIC8qIHVwc3RyZWFtIG5lZWRzIHRvIHNlZSBmYXRhbCByZXN1bHQgQVNBUCB0byBzaHV0IHRoaW5ncyBkb3duLAorICAgICAqIGJ1dCBtaWdodCBiZSBzdHVjayBpbiBvbmUgb2Ygb3VyIG90aGVyIGZ1bGwgcXVldWVzOworICAgICAqIHNvIGVtcHR5IHRoaXMgb25lIGFuZCB0cmlnZ2VyIGR5bmFtaWMgcXVldWUgZ3Jvd3RoLiBBdAorICAgICAqIHRoaXMgcG9pbnQgdGhlIHNyY3Jlc3VsdCBpcyBub3QgT0ssIE5PVF9MSU5LRUQKKyAgICAgKiBvciBVTkVYUEVDVEVELCBpLmUuIGEgcmVhbCBmYWlsdXJlICovCisgICAgZ3N0X2RhdGFfcXVldWVfZmx1c2ggKHNxLT5xdWV1ZSk7CisgICAgc2luZ2xlX3F1ZXVlX3VuZGVycnVuX2NiIChzcS0+cXVldWUsIHNxKTsKKyAgICBnc3RfZGF0YV9xdWV1ZV9zZXRfZmx1c2hpbmcgKHNxLT5xdWV1ZSwgVFJVRSk7CisgICAgZ3N0X3BhZF9wYXVzZV90YXNrIChzcS0+c3JjcGFkKTsKKyAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKG11bHRpX3F1ZXVlX2RlYnVnLCBtcSwKKyAgICAgICAgIlNpbmdsZVF1ZXVlWyVkXSB0YXNrIHBhdXNlZCwgcmVhc29uOiVzIiwKKyAgICAgICAgc3EtPmlkLCBnc3RfZmxvd19nZXRfbmFtZSAoc3EtPnNyY3Jlc3VsdCkpOworICAgIHJldHVybjsKKyAgfQorfQorCisvKioKKyAqIGdzdF9tdWx0aV9xdWV1ZV9jaGFpbjoKKyAqCisgKiBUaGlzIGlzIHNpbWlsYXIgdG8gR3N0UXVldWUncyBjaGFpbiBmdW5jdGlvbiwgZXhjZXB0OgorICogXyB3ZSBkb24ndCBoYXZlIGxlYWsgYmVoYXZpb3VycywKKyAqIF8gd2UgcHVzaCB3aXRoIGEgdW5pcXVlIGlkIChjdXJpZCkKKyAqLworc3RhdGljIEdzdEZsb3dSZXR1cm4KK2dzdF9tdWx0aV9xdWV1ZV9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RCdWZmZXIgKiBidWZmZXIpCit7CisgIEdzdFNpbmdsZVF1ZXVlICpzcTsKKyAgR3N0TXVsdGlRdWV1ZSAqbXE7CisgIEdzdE11bHRpUXVldWVJdGVtICppdGVtOworICBndWludDMyIGN1cmlkOworICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBkdXJhdGlvbjsKKworICBzcSA9IGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkKTsKKyAgbXEgPSBzcS0+bXF1ZXVlOworCisgIC8qIGlmIGVvcywgd2UgYXJlIGFsd2F5cyBmdWxsLCBzbyBhdm9pZCBoYW5naW5nIGluY29taW5nIGluZGVmaW5pdGVseSAqLworICBpZiAoc3EtPmlzX2VvcykKKyAgICBnb3RvIHdhc19lb3M7CisKKyAgLyogR2V0IGEgdW5pcXVlIGluY3JlbWVudGluZyBpZCAqLworICBjdXJpZCA9IEdfQVRPTUlDX0lOVF9BREQgKChnaW50ICopICYgbXEtPmNvdW50ZXIsIDEpOworCisgIEdTVF9MT0dfT0JKRUNUIChtcSwgIlNpbmdsZVF1ZXVlICVkIDogYWJvdXQgdG8gZW5xdWV1ZSBidWZmZXIgJXAgd2l0aCBpZCAlZCIsCisgICAgICBzcS0+aWQsIGJ1ZmZlciwgY3VyaWQpOworCisgIGl0ZW0gPSBnc3RfbXVsdGlfcXVldWVfYnVmZmVyX2l0ZW1fbmV3IChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoYnVmZmVyKSwgY3VyaWQpOworCisgIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpOworICBkdXJhdGlvbiA9IEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcik7CisKKyAgaWYgKCEoZ3N0X2RhdGFfcXVldWVfcHVzaCAoc3EtPnF1ZXVlLCAoR3N0RGF0YVF1ZXVlSXRlbSAqKSBpdGVtKSkpCisgICAgZ290byBmbHVzaGluZzsKKworICAvKiB1cGRhdGUgdGltZSBsZXZlbCwgd2UgbXVzdCBkbyB0aGlzIGFmdGVyIHB1c2hpbmcgdGhlIGRhdGEgaW4gdGhlIHF1ZXVlIHNvCisgICAqIHRoYXQgd2UgbmV2ZXIgZW5kIHVwIGZpbGxpbmcgdGhlIHF1ZXVlIGZpcnN0LiAqLworICBhcHBseV9idWZmZXIgKG1xLCBzcSwgdGltZXN0YW1wLCBkdXJhdGlvbiwgJnNxLT5zaW5rX3NlZ21lbnQpOworCitkb25lOgorICByZXR1cm4gc3EtPnNyY3Jlc3VsdDsKKworICAvKiBFUlJPUlMgKi8KK2ZsdXNoaW5nOgorICB7CisgICAgR1NUX0xPR19PQkpFQ1QgKG1xLCAiU2luZ2xlUXVldWUgJWQgOiBleGl0IGJlY2F1c2UgdGFzayBwYXVzZWQsIHJlYXNvbjogJXMiLAorICAgICAgICBzcS0+aWQsIGdzdF9mbG93X2dldF9uYW1lIChzcS0+c3JjcmVzdWx0KSk7CisgICAgZ3N0X211bHRpX3F1ZXVlX2l0ZW1fZGVzdHJveSAoaXRlbSk7CisgICAgZ290byBkb25lOworICB9Cit3YXNfZW9zOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAobXEsICJ3ZSBhcmUgRU9TLCBkcm9wcGluZyBidWZmZXIsIHJldHVybiBVTkVYUEVDVEVEIik7CisgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfVU5FWFBFQ1RFRDsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9tdWx0aV9xdWV1ZV9zaW5rX2FjdGl2YXRlX3B1c2ggKEdzdFBhZCAqIHBhZCwgZ2Jvb2xlYW4gYWN0aXZlKQoreworICBHc3RTaW5nbGVRdWV1ZSAqc3E7CisKKyAgc3EgPSAoR3N0U2luZ2xlUXVldWUgKikgZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlIChwYWQpOworCisgIGlmIChhY3RpdmUpIHsKKyAgICAvKiBBbGwgcGFkcyBzdGFydCBvZmYgbGlua2VkIHVudGlsIHRoZXkgcHVzaCBvbmUgYnVmZmVyICovCisgICAgc3EtPnNyY3Jlc3VsdCA9IEdTVF9GTE9XX09LOworICB9IGVsc2UgeworICAgIHNxLT5zcmNyZXN1bHQgPSBHU1RfRkxPV19XUk9OR19TVEFURTsKKyAgICBnc3RfZGF0YV9xdWV1ZV9mbHVzaCAoc3EtPnF1ZXVlKTsKKyAgfQorICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfbXVsdGlfcXVldWVfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KQoreworICBHc3RTaW5nbGVRdWV1ZSAqc3E7CisgIEdzdE11bHRpUXVldWUgKm1xOworICBndWludDMyIGN1cmlkOworICBHc3RNdWx0aVF1ZXVlSXRlbSAqaXRlbTsKKyAgZ2Jvb2xlYW4gcmVzOworICBHc3RFdmVudFR5cGUgdHlwZTsKKyAgR3N0RXZlbnQgKnNyZWYgPSBOVUxMOworCisgIHNxID0gKEdzdFNpbmdsZVF1ZXVlICopIGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkKTsKKyAgbXEgPSAoR3N0TXVsdGlRdWV1ZSAqKSBnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCk7CisKKyAgdHlwZSA9IEdTVF9FVkVOVF9UWVBFIChldmVudCk7CisKKyAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RBUlQ6CisgICAgICBHU1RfREVCVUdfT0JKRUNUIChtcSwgIlNpbmdsZVF1ZXVlICVkIDogcmVjZWl2ZWQgZmx1c2ggc3RhcnQgZXZlbnQiLAorICAgICAgICAgIHNxLT5pZCk7CisKKyAgICAgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAoc3EtPnNyY3BhZCwgZXZlbnQpOworCisgICAgICBnc3Rfc2luZ2xlX3F1ZXVlX2ZsdXNoIChtcSwgc3EsIFRSVUUpOworICAgICAgZ290byBkb25lOworCisgICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG1xLCAiU2luZ2xlUXVldWUgJWQgOiByZWNlaXZlZCBmbHVzaCBzdG9wIGV2ZW50IiwKKyAgICAgICAgICBzcS0+aWQpOworCisgICAgICByZXMgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHNxLT5zcmNwYWQsIGV2ZW50KTsKKworICAgICAgZ3N0X3NpbmdsZV9xdWV1ZV9mbHVzaCAobXEsIHNxLCBGQUxTRSk7CisgICAgICBnb3RvIGRvbmU7CisgICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVDoKKyAgICAgIC8qIHRha2UgcmVmIGJlY2F1c2UgdGhlIHF1ZXVlIHdpbGwgdGFrZSBvd25lcnNoaXAgYW5kIHdlIG5lZWQgdGhlIGV2ZW50CisgICAgICAgKiBhZnRlcndhcmRzIHRvIHVwZGF0ZSB0aGUgc2VnbWVudCAqLworICAgICAgc3JlZiA9IGdzdF9ldmVudF9yZWYgKGV2ZW50KTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGlmICghKEdTVF9FVkVOVF9JU19TRVJJQUxJWkVEIChldmVudCkpKSB7CisgICAgICAgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAoc3EtPnNyY3BhZCwgZXZlbnQpOworICAgICAgICBnb3RvIGRvbmU7CisgICAgICB9CisgICAgICBicmVhazsKKyAgfQorCisgIC8qIGlmIGVvcywgd2UgYXJlIGFsd2F5cyBmdWxsLCBzbyBhdm9pZCBoYW5naW5nIGluY29taW5nIGluZGVmaW5pdGVseSAqLworICBpZiAoc3EtPmlzX2VvcykKKyAgICBnb3RvIHdhc19lb3M7CisKKyAgLyogR2V0IGFuIHVuaXF1ZSBpbmNyZW1lbnRpbmcgaWQuICovCisgIGN1cmlkID0gR19BVE9NSUNfSU5UX0FERCAoKGdpbnQgKikgJiBtcS0+Y291bnRlciwgMSk7CisKKyAgaXRlbSA9IGdzdF9tdWx0aV9xdWV1ZV9ldmVudF9pdGVtX25ldyAoKEdzdE1pbmlPYmplY3QgKikgZXZlbnQsIGN1cmlkKTsKKworICBHU1RfREVCVUdfT0JKRUNUIChtcSwKKyAgICAgICJTaW5nbGVRdWV1ZSAlZCA6IEVucXVldWluZyBldmVudCAlcCBvZiB0eXBlICVzIHdpdGggaWQgJWQiLAorICAgICAgc3EtPmlkLCBldmVudCwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpLCBjdXJpZCk7CisKKyAgaWYgKCEocmVzID0gZ3N0X2RhdGFfcXVldWVfcHVzaCAoc3EtPnF1ZXVlLCAoR3N0RGF0YVF1ZXVlSXRlbSAqKSBpdGVtKSkpCisgICAgZ290byBmbHVzaGluZzsKKworICAvKiBtYXJrIEVPUyB3aGVuIHdlIHJlY2VpdmVkIG9uZSwgd2UgbXVzdCBkbyB0aGF0IGFmdGVyIHB1dHRpbmcgdGhlCisgICAqIGJ1ZmZlciBpbiB0aGUgcXVldWUgYmVjYXVzZSBFT1MgbWFya3MgdGhlIGJ1ZmZlciBhcyBmaWxsZWQuIE5vIG5lZWQgdG8gdGFrZQorICAgKiBhIGxvY2ssIHRoZSBfY2hlY2tfZnVsbCBoYXBwZW5zIGZyb20gdGhpcyB0aHJlYWQgb25seSwgcmlnaHQgYmVmb3JlIHB1c2hpbmcKKyAgICogaW50byBkYXRhcXVldWUuICovCisgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKKyAgICAgIHNxLT5pc19lb3MgPSBUUlVFOworICAgICAgLyogRU9TIGFmZmVjdHMgdGhlIGJ1ZmZlcmluZyBzdGF0ZSAqLworICAgICAgdXBkYXRlX2J1ZmZlcmluZyAobXEsIHNxKTsKKyAgICAgIHNpbmdsZV9xdWV1ZV9vdmVycnVuX2NiIChzcS0+cXVldWUsIHNxKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6CisgICAgICBhcHBseV9zZWdtZW50IChtcSwgc3EsIHNyZWYsICZzcS0+c2lua19zZWdtZW50KTsKKyAgICAgIGdzdF9ldmVudF91bnJlZiAoc3JlZik7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KK2RvbmU6CisgIGdzdF9vYmplY3RfdW5yZWYgKG1xKTsKKyAgcmV0dXJuIHJlczsKKworZmx1c2hpbmc6CisgIHsKKyAgICBHU1RfTE9HX09CSkVDVCAobXEsICJTaW5nbGVRdWV1ZSAlZCA6IGV4aXQgYmVjYXVzZSB0YXNrIHBhdXNlZCwgcmVhc29uOiAlcyIsCisgICAgICAgIHNxLT5pZCwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHNxLT5zcmNyZXN1bHQpKTsKKyAgICBpZiAoc3JlZikKKyAgICAgIGdzdF9ldmVudF91bnJlZiAoc3JlZik7CisgICAgZ3N0X211bHRpX3F1ZXVlX2l0ZW1fZGVzdHJveSAoaXRlbSk7CisgICAgZ290byBkb25lOworICB9Cit3YXNfZW9zOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAobXEsICJ3ZSBhcmUgRU9TLCBkcm9wcGluZyBldmVudCwgcmV0dXJuIEZBTFNFIik7CisgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgICAgcmVzID0gRkFMU0U7CisgICAgZ290byBkb25lOworICB9Cit9CisKK3N0YXRpYyBHc3RDYXBzICoKK2dzdF9tdWx0aV9xdWV1ZV9nZXRjYXBzIChHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBmaWx0ZXIpCit7CisgIEdzdFNpbmdsZVF1ZXVlICpzcSA9IGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkKTsKKyAgR3N0UGFkICpvdGhlcnBhZDsKKyAgR3N0Q2FwcyAqcmVzdWx0OworCisgIG90aGVycGFkID0gKHBhZCA9PSBzcS0+c3JjcGFkKSA/IHNxLT5zaW5rcGFkIDogc3EtPnNyY3BhZDsKKworICBHU1RfTE9HX09CSkVDVCAob3RoZXJwYWQsICJHZXR0aW5nIGNhcHMgZnJvbSB0aGUgcGVlciBvZiB0aGlzIHBhZCIpOworCisgIHJlc3VsdCA9IGdzdF9wYWRfcGVlcl9nZXRfY2FwcyAob3RoZXJwYWQsIGZpbHRlcik7CisgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICByZXN1bHQgPSAoZmlsdGVyID8gZ3N0X2NhcHNfcmVmIChmaWx0ZXIpIDogZ3N0X2NhcHNfbmV3X2FueSAoKSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfbXVsdGlfcXVldWVfYWNjZXB0Y2FwcyAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogY2FwcykKK3sKKyAgR3N0U2luZ2xlUXVldWUgKnNxID0gZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlIChwYWQpOworICBHc3RQYWQgKm90aGVycGFkOworICBnYm9vbGVhbiByZXN1bHQ7CisKKyAgb3RoZXJwYWQgPSAocGFkID09IHNxLT5zcmNwYWQpID8gc3EtPnNpbmtwYWQgOiBzcS0+c3JjcGFkOworCisgIEdTVF9MT0dfT0JKRUNUIChvdGhlcnBhZCwgIkFjY2VwdCBjYXBzIGZyb20gdGhlIHBlZXIgb2YgdGhpcyBwYWQiKTsKKworICByZXN1bHQgPSBnc3RfcGFkX3BlZXJfYWNjZXB0X2NhcHMgKG90aGVycGFkLCBjYXBzKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9tdWx0aV9xdWV1ZV9zcmNfYWN0aXZhdGVfcHVzaCAoR3N0UGFkICogcGFkLCBnYm9vbGVhbiBhY3RpdmUpCit7CisgIEdzdE11bHRpUXVldWUgKm1xOworICBHc3RTaW5nbGVRdWV1ZSAqc3E7CisgIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOworCisgIHNxID0gKEdzdFNpbmdsZVF1ZXVlICopIGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkKTsKKyAgbXEgPSBzcS0+bXF1ZXVlOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKG1xLCAiU2luZ2xlUXVldWUgJWQiLCBzcS0+aWQpOworCisgIGlmIChhY3RpdmUpIHsKKyAgICByZXN1bHQgPSBnc3Rfc2luZ2xlX3F1ZXVlX2ZsdXNoIChtcSwgc3EsIEZBTFNFKTsKKyAgfSBlbHNlIHsKKyAgICByZXN1bHQgPSBnc3Rfc2luZ2xlX3F1ZXVlX2ZsdXNoIChtcSwgc3EsIFRSVUUpOworICAgIC8qIG1ha2Ugc3VyZSBzdHJlYW1pbmcgZmluaXNoZXMgKi8KKyAgICByZXN1bHQgfD0gZ3N0X3BhZF9zdG9wX3Rhc2sgKHBhZCk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfbXVsdGlfcXVldWVfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpCit7CisgIEdzdFNpbmdsZVF1ZXVlICpzcSA9IGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkKTsKKworICByZXR1cm4gZ3N0X3BhZF9wdXNoX2V2ZW50IChzcS0+c2lua3BhZCwgZXZlbnQpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9tdWx0aV9xdWV1ZV9zcmNfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0UXVlcnkgKiBxdWVyeSkKK3sKKyAgR3N0U2luZ2xlUXVldWUgKnNxID0gZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlIChwYWQpOworICBHc3RQYWQgKnBlZXJwYWQ7CisgIGdib29sZWFuIHJlczsKKworICAvKiBGSVhNRSwgSGFuZGxlIHBvc2l0aW9uIG9mZnNldCBkZXBlbmRpbmcgb24gcXVldWUgc2l6ZSAqLworCisgIC8qIGRlZmF1bHQgaGFuZGxpbmcgKi8KKyAgaWYgKCEocGVlcnBhZCA9IGdzdF9wYWRfZ2V0X3BlZXIgKHNxLT5zaW5rcGFkKSkpCisgICAgZ290byBub19wZWVyOworCisgIHJlcyA9IGdzdF9wYWRfcXVlcnkgKHBlZXJwYWQsIHF1ZXJ5KTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChwZWVycGFkKTsKKworICByZXR1cm4gcmVzOworCisgIC8qIEVSUk9SUyAqLworbm9fcGVlcjoKKyAgeworICAgIEdTVF9MT0dfT0JKRUNUIChzcS0+c2lua3BhZCwgIkNvdWxkbid0IHNlbmQgcXVlcnkgYmVjYXVzZSB3ZSBoYXZlIG5vIHBlZXIiKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworLyoKKyAqIE5leHQtbm9uLWxpbmtlZCBmdW5jdGlvbnMKKyAqLworCisvKiBXSVRIIExPQ0sgVEFLRU4gKi8KK3N0YXRpYyB2b2lkCit3YWtlX3VwX25leHRfbm9uX2xpbmtlZCAoR3N0TXVsdGlRdWV1ZSAqIG1xKQoreworICBHTGlzdCAqdG1wOworCisgIC8qIG1heWJlIG5vLW9uZSBpcyB3YWl0aW5nICovCisgIGlmIChtcS0+bnVtd2FpdGluZyA8IDEpCisgICAgcmV0dXJuOworCisgIC8qIEVsc2UgZmlndXJlIG91dCB3aGljaCBzaW5nbGVxdWV1ZShzKSBuZWVkIHdha2luZyB1cCAqLworICBmb3IgKHRtcCA9IG1xLT5xdWV1ZXM7IHRtcDsgdG1wID0gZ19saXN0X25leHQgKHRtcCkpIHsKKyAgICBHc3RTaW5nbGVRdWV1ZSAqc3EgPSAoR3N0U2luZ2xlUXVldWUgKikgdG1wLT5kYXRhOworCisgICAgaWYgKHNxLT5zcmNyZXN1bHQgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCkgeworICAgICAgaWYgKChtcS0+c3luY19ieV9ydW5uaW5nX3RpbWUgJiYgbXEtPmhpZ2hfdGltZSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FCisgICAgICAgICAgICAgICYmIHNxLT5uZXh0X3RpbWUgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORQorICAgICAgICAgICAgICAmJiBzcS0+bmV4dF90aW1lID49IG1xLT5oaWdoX3RpbWUpCisgICAgICAgICAgfHwgKHNxLT5uZXh0aWQgIT0gMCAmJiBzcS0+bmV4dGlkIDw9IG1xLT5oaWdoaWQpKSB7CisgICAgICAgIEdTVF9MT0dfT0JKRUNUIChtcSwgIldha2luZyB1cCBzaW5nbGVxdWV1ZSAlZCIsIHNxLT5pZCk7CisgICAgICAgIGdfY29uZF9zaWduYWwgKHNxLT50dXJuKTsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworLyogV0lUSCBMT0NLIFRBS0VOICovCitzdGF0aWMgdm9pZAorY29tcHV0ZV9oaWdoX2lkIChHc3RNdWx0aVF1ZXVlICogbXEpCit7CisgIC8qIFRoZSBoaWdoLWlkIGlzIGVpdGhlciB0aGUgaGlnaGVzdCBpZCBhbW9uZyB0aGUgbGlua2VkIHBhZHMsIG9yIGlmIGFsbAorICAgKiBwYWRzIGFyZSBub3QtbGlua2VkLCBpdCdzIHRoZSBsb3dlc3Qgbm90LWxpbmtlZCBwYWQgKi8KKyAgR0xpc3QgKnRtcDsKKyAgZ3VpbnQzMiBsb3dlc3QgPSBHX01BWFVJTlQzMjsKKyAgZ3VpbnQzMiBoaWdoaWQgPSBHX01BWFVJTlQzMjsKKworICBmb3IgKHRtcCA9IG1xLT5xdWV1ZXM7IHRtcDsgdG1wID0gZ19saXN0X25leHQgKHRtcCkpIHsKKyAgICBHc3RTaW5nbGVRdWV1ZSAqc3EgPSAoR3N0U2luZ2xlUXVldWUgKikgdG1wLT5kYXRhOworCisgICAgR1NUX0xPR19PQkpFQ1QgKG1xLCAiaW5zcGVjdGluZyBzcTolZCAsIG5leHRpZDolZCwgb2xkaWQ6JWQsIHNyY3Jlc3VsdDolcyIsCisgICAgICAgIHNxLT5pZCwgc3EtPm5leHRpZCwgc3EtPm9sZGlkLCBnc3RfZmxvd19nZXRfbmFtZSAoc3EtPnNyY3Jlc3VsdCkpOworCisgICAgaWYgKHNxLT5zcmNyZXN1bHQgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCkgeworICAgICAgLyogTm8gbmVlZCB0byBjb25zaWRlciBxdWV1ZXMgd2hpY2ggYXJlIG5vdCB3YWl0aW5nICovCisgICAgICBpZiAoc3EtPm5leHRpZCA9PSAwKSB7CisgICAgICAgIEdTVF9MT0dfT0JKRUNUIChtcSwgInNxOiVkIGlzIG5vdCB3YWl0aW5nIC0gaWdub3JpbmciLCBzcS0+aWQpOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgaWYgKHNxLT5uZXh0aWQgPCBsb3dlc3QpCisgICAgICAgIGxvd2VzdCA9IHNxLT5uZXh0aWQ7CisgICAgfSBlbHNlIGlmIChzcS0+c3JjcmVzdWx0ICE9IEdTVF9GTE9XX1VORVhQRUNURUQpIHsKKyAgICAgIC8qIElmIHdlIGRvbid0IGhhdmUgYSBnbG9iYWwgaGlnaGlkLCBvciB0aGUgZ2xvYmFsIGhpZ2hpZCBpcyBsb3dlciB0aGFuCisgICAgICAgKiB0aGlzIHNpbmdsZSBxdWV1ZSdzIGxhc3Qgb3V0cHV0dGVkIGlkLCBzdG9yZSB0aGUgcXVldWUncyBvbmUsIAorICAgICAgICogdW5sZXNzIHRoZSBzaW5nbGVxdWV1ZSBpcyBhdCBFT1MgKHNyY3Jlc3VsdCA9IFVORVhQRUNURUQpICovCisgICAgICBpZiAoKGhpZ2hpZCA9PSBHX01BWFVJTlQzMikgfHwgKHNxLT5vbGRpZCA+IGhpZ2hpZCkpCisgICAgICAgIGhpZ2hpZCA9IHNxLT5vbGRpZDsKKyAgICB9CisgIH0KKworICBpZiAoaGlnaGlkID09IEdfTUFYVUlOVDMyIHx8IGxvd2VzdCA8IGhpZ2hpZCkKKyAgICBtcS0+aGlnaGlkID0gbG93ZXN0OworICBlbHNlCisgICAgbXEtPmhpZ2hpZCA9IGhpZ2hpZDsKKworICBHU1RfTE9HX09CSkVDVCAobXEsICJIaWdoaWQgaXMgbm93IDogJXUsIGxvd2VzdCBub24tbGlua2VkICV1IiwgbXEtPmhpZ2hpZCwKKyAgICAgIGxvd2VzdCk7Cit9CisKKy8qIFdJVEggTE9DSyBUQUtFTiAqLworc3RhdGljIHZvaWQKK2NvbXB1dGVfaGlnaF90aW1lIChHc3RNdWx0aVF1ZXVlICogbXEpCit7CisgIC8qIFRoZSBoaWdoLWlkIGlzIGVpdGhlciB0aGUgaGlnaGVzdCBpZCBhbW9uZyB0aGUgbGlua2VkIHBhZHMsIG9yIGlmIGFsbAorICAgKiBwYWRzIGFyZSBub3QtbGlua2VkLCBpdCdzIHRoZSBsb3dlc3Qgbm90LWxpbmtlZCBwYWQgKi8KKyAgR0xpc3QgKnRtcDsKKyAgR3N0Q2xvY2tUaW1lIGhpZ2hlc3QgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICBHc3RDbG9ja1RpbWUgbG93ZXN0ID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKworICBmb3IgKHRtcCA9IG1xLT5xdWV1ZXM7IHRtcDsgdG1wID0gZ19saXN0X25leHQgKHRtcCkpIHsKKyAgICBHc3RTaW5nbGVRdWV1ZSAqc3EgPSAoR3N0U2luZ2xlUXVldWUgKikgdG1wLT5kYXRhOworCisgICAgR1NUX0xPR19PQkpFQ1QgKG1xLAorICAgICAgICAiaW5zcGVjdGluZyBzcTolZCAsIG5leHRfdGltZTolIiBHU1RfVElNRV9GT1JNQVQgIiwgbGFzdF90aW1lOiUiCisgICAgICAgIEdTVF9USU1FX0ZPUk1BVCAiLCBzcmNyZXN1bHQ6JXMiLCBzcS0+aWQsIEdTVF9USU1FX0FSR1MgKHNxLT5uZXh0X3RpbWUpLAorICAgICAgICBHU1RfVElNRV9BUkdTIChzcS0+bGFzdF90aW1lKSwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHNxLT5zcmNyZXN1bHQpKTsKKworICAgIGlmIChzcS0+c3JjcmVzdWx0ID09IEdTVF9GTE9XX05PVF9MSU5LRUQpIHsKKyAgICAgIC8qIE5vIG5lZWQgdG8gY29uc2lkZXIgcXVldWVzIHdoaWNoIGFyZSBub3Qgd2FpdGluZyAqLworICAgICAgaWYgKHNxLT5uZXh0X3RpbWUgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkgeworICAgICAgICBHU1RfTE9HX09CSkVDVCAobXEsICJzcTolZCBpcyBub3Qgd2FpdGluZyAtIGlnbm9yaW5nIiwgc3EtPmlkKTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGlmIChsb3dlc3QgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSB8fCBzcS0+bmV4dF90aW1lIDwgbG93ZXN0KQorICAgICAgICBsb3dlc3QgPSBzcS0+bmV4dF90aW1lOworICAgIH0gZWxzZSBpZiAoc3EtPnNyY3Jlc3VsdCAhPSBHU1RfRkxPV19VTkVYUEVDVEVEKSB7CisgICAgICAvKiBJZiB3ZSBkb24ndCBoYXZlIGEgZ2xvYmFsIGhpZ2hpZCwgb3IgdGhlIGdsb2JhbCBoaWdoaWQgaXMgbG93ZXIgdGhhbgorICAgICAgICogdGhpcyBzaW5nbGUgcXVldWUncyBsYXN0IG91dHB1dHRlZCBpZCwgc3RvcmUgdGhlIHF1ZXVlJ3Mgb25lLCAKKyAgICAgICAqIHVubGVzcyB0aGUgc2luZ2xlcXVldWUgaXMgYXQgRU9TIChzcmNyZXN1bHQgPSBVTkVYUEVDVEVEKSAqLworICAgICAgaWYgKGhpZ2hlc3QgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSB8fCBzcS0+bGFzdF90aW1lID4gaGlnaGVzdCkKKyAgICAgICAgaGlnaGVzdCA9IHNxLT5sYXN0X3RpbWU7CisgICAgfQorICB9CisKKyAgbXEtPmhpZ2hfdGltZSA9IGhpZ2hlc3Q7CisKKyAgR1NUX0xPR19PQkpFQ1QgKG1xLAorICAgICAgIkhpZ2ggdGltZSBpcyBub3cgOiAlIiBHU1RfVElNRV9GT1JNQVQgIiwgbG93ZXN0IG5vbi1saW5rZWQgJSIKKyAgICAgIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAobXEtPmhpZ2hfdGltZSksIEdTVF9USU1FX0FSR1MgKGxvd2VzdCkpOworfQorCisjZGVmaW5lIElTX0ZJTExFRChxLCBmb3JtYXQsIHZhbHVlKSAoKChxKS0+bWF4X3NpemUuZm9ybWF0KSAhPSAwICYmIFwKKyAgICAgKChxKS0+bWF4X3NpemUuZm9ybWF0KSA8PSAodmFsdWUpKQorCisvKgorICogR3N0U2luZ2xlUXVldWUgZnVuY3Rpb25zCisgKi8KK3N0YXRpYyB2b2lkCitzaW5nbGVfcXVldWVfb3ZlcnJ1bl9jYiAoR3N0RGF0YVF1ZXVlICogZHEsIEdzdFNpbmdsZVF1ZXVlICogc3EpCit7CisgIEdzdE11bHRpUXVldWUgKm1xID0gc3EtPm1xdWV1ZTsKKyAgR0xpc3QgKnRtcDsKKyAgR3N0RGF0YVF1ZXVlU2l6ZSBzaXplOworICBnYm9vbGVhbiBmaWxsZWQgPSBGQUxTRTsKKworICBnc3RfZGF0YV9xdWV1ZV9nZXRfbGV2ZWwgKHNxLT5xdWV1ZSwgJnNpemUpOworCisgIEdTVF9MT0dfT0JKRUNUIChtcSwgIlNpbmdsZSBRdWV1ZSAlZCBpcyBmdWxsIiwgc3EtPmlkKTsKKworICBHU1RfTVVMVElfUVVFVUVfTVVURVhfTE9DSyAobXEpOworICBmb3IgKHRtcCA9IG1xLT5xdWV1ZXM7IHRtcDsgdG1wID0gZ19saXN0X25leHQgKHRtcCkpIHsKKyAgICBHc3RTaW5nbGVRdWV1ZSAqb3EgPSAoR3N0U2luZ2xlUXVldWUgKikgdG1wLT5kYXRhOworICAgIEdzdERhdGFRdWV1ZVNpemUgc3NpemU7CisKKyAgICBHU1RfTE9HX09CSkVDVCAobXEsICJDaGVja2luZyBRdWV1ZSAlZCIsIG9xLT5pZCk7CisKKyAgICBpZiAoZ3N0X2RhdGFfcXVldWVfaXNfZW1wdHkgKG9xLT5xdWV1ZSkpIHsKKyAgICAgIEdTVF9MT0dfT0JKRUNUIChtcSwgIlF1ZXVlICVkIGlzIGVtcHR5Iiwgb3EtPmlkKTsKKyAgICAgIGlmIChJU19GSUxMRUQgKHNxLCB2aXNpYmxlLCBzaXplLnZpc2libGUpKSB7CisgICAgICAgIHNxLT5tYXhfc2l6ZS52aXNpYmxlID0gc2l6ZS52aXNpYmxlICsgMTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAobXEsCisgICAgICAgICAgICAiQW5vdGhlciBxdWV1ZSBpcyBlbXB0eSwgYnVtcGluZyBzaW5nbGUgcXVldWUgJWQgbWF4IHZpc2libGUgdG8gJWQiLAorICAgICAgICAgICAgc3EtPmlkLCBzcS0+bWF4X3NpemUudmlzaWJsZSk7CisgICAgICB9CisgICAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcSk7CisgICAgICBnb3RvIGJlYWNoOworICAgIH0KKyAgICAvKiBjaGVjayBpZiB3ZSByZWFjaGVkIHRoZSBoYXJkIHRpbWUvYnl0ZXMgbGltaXRzICovCisgICAgZ3N0X2RhdGFfcXVldWVfZ2V0X2xldmVsIChvcS0+cXVldWUsICZzc2l6ZSk7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUIChtcSwKKyAgICAgICAgInF1ZXVlICVkOiB2aXNpYmxlICV1LyV1LCBieXRlcyAldS8ldSwgdGltZSAlIiBHX0dVSU5UNjRfRk9STUFUICIvJSIKKyAgICAgICAgR19HVUlOVDY0X0ZPUk1BVCwgb3EtPmlkLCBzc2l6ZS52aXNpYmxlLCBvcS0+bWF4X3NpemUudmlzaWJsZSwKKyAgICAgICAgc3NpemUuYnl0ZXMsIG9xLT5tYXhfc2l6ZS5ieXRlcywgb3EtPmN1cl90aW1lLCBvcS0+bWF4X3NpemUudGltZSk7CisKKyAgICAvKiBpZiB0aGlzIHF1ZXVlIGlzIGZpbGxlZCBjb21wbGV0ZWx5IHdlIG11c3Qgc2lnbmFsIG92ZXJydW4uCisgICAgICogRklYTUUsIHRoaXMgc2VlbXMgd3JvbmcgaW4gbWFueSB3YXlzCisgICAgICogIC0gd2UncmUgY29tcGFyaW5nIHRoZSBmaWxsZWQgbGV2ZWwgb2YgdGhpcyBxdWV1ZSBhZ2FpbnN0IHRoZQorICAgICAqICAgIHZhbHVlcyBvZiB0aGUgb3RoZXIgb25lCisgICAgICogIC0gd2Ugc2hvdWxkIG9ubHkgZG8gdGhpcyBhZnRlciB3ZSBmb3VuZCBubyBlbXB0eSBxdWV1ZXMsIGllLCBtb3ZlCisgICAgICogICAgdGhpcyBjaGVjayBvdXRzaWRlIG9mIHRoZSBsb29wCisgICAgICogIC0gdGhlIGRlYnVnIHN0YXRlbWVudCB0YWxrcyBhYm91dCBhIGRpZmZlcmVudCBxdWV1ZSB0aGFuIHRoZSBvbmUKKyAgICAgKiAgICB3ZSBhcmUgY2hlY2tpbmcgaGVyZS4KKyAgICAgKi8KKyAgICBpZiAoc3EtPmlzX2VvcyB8fCBJU19GSUxMRUQgKHNxLCBieXRlcywgc3NpemUuYnl0ZXMpIHx8CisgICAgICAgIElTX0ZJTExFRCAoc3EsIHRpbWUsIHNxLT5jdXJfdGltZSkpIHsKKyAgICAgIEdTVF9MT0dfT0JKRUNUIChtcSwgIlF1ZXVlICVkIGlzIGZpbGxlZCIsIG9xLT5pZCk7CisgICAgICBmaWxsZWQgPSBUUlVFOworICAgIH0KKyAgfQorICAvKiBubyBxdWV1ZXMgd2VyZSBlbXB0eSAqLworICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcSk7CisKKyAgLyogT3ZlcnJ1biBpcyBhbHdheXMgZm9yd2FyZGVkLCBzaW5jZSB0aGlzIGlzIGJsb2NraW5nIHRoZSB1cHN0cmVhbSBlbGVtZW50ICovCisgIGlmIChmaWxsZWQpIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChtcSwgIkEgcXVldWUgaXMgZmlsbGVkLCBzaWduYWxsaW5nIG92ZXJydW4iKTsKKyAgICBnX3NpZ25hbF9lbWl0IChtcSwgZ3N0X211bHRpX3F1ZXVlX3NpZ25hbHNbU0lHTkFMX09WRVJSVU5dLCAwKTsKKyAgfQorCitiZWFjaDoKKyAgcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAorc2luZ2xlX3F1ZXVlX3VuZGVycnVuX2NiIChHc3REYXRhUXVldWUgKiBkcSwgR3N0U2luZ2xlUXVldWUgKiBzcSkKK3sKKyAgZ2Jvb2xlYW4gZW1wdHkgPSBUUlVFOworICBHc3RNdWx0aVF1ZXVlICptcSA9IHNxLT5tcXVldWU7CisgIEdMaXN0ICp0bXA7CisKKyAgR1NUX0xPR19PQkpFQ1QgKG1xLAorICAgICAgIlNpbmdsZSBRdWV1ZSAlZCBpcyBlbXB0eSwgQ2hlY2tpbmcgb3RoZXIgc2luZ2xlIHF1ZXVlcyIsIHNxLT5pZCk7CisKKyAgR1NUX01VTFRJX1FVRVVFX01VVEVYX0xPQ0sgKG1xKTsKKyAgZm9yICh0bXAgPSBtcS0+cXVldWVzOyB0bXA7IHRtcCA9IGdfbGlzdF9uZXh0ICh0bXApKSB7CisgICAgR3N0U2luZ2xlUXVldWUgKm9xID0gKEdzdFNpbmdsZVF1ZXVlICopIHRtcC0+ZGF0YTsKKworICAgIGlmIChnc3RfZGF0YV9xdWV1ZV9pc19mdWxsIChvcS0+cXVldWUpKSB7CisgICAgICBHc3REYXRhUXVldWVTaXplIHNpemU7CisKKyAgICAgIGdzdF9kYXRhX3F1ZXVlX2dldF9sZXZlbCAob3EtPnF1ZXVlLCAmc2l6ZSk7CisgICAgICBpZiAoSVNfRklMTEVEIChvcSwgdmlzaWJsZSwgc2l6ZS52aXNpYmxlKSkgeworICAgICAgICBvcS0+bWF4X3NpemUudmlzaWJsZSA9IHNpemUudmlzaWJsZSArIDE7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG1xLAorICAgICAgICAgICAgInF1ZXVlICVkIGlzIGZpbGxlZCwgYnVtcGluZyBpdHMgbWF4IHZpc2libGUgdG8gJWQiLCBvcS0+aWQsCisgICAgICAgICAgICBvcS0+bWF4X3NpemUudmlzaWJsZSk7CisgICAgICAgIGdzdF9kYXRhX3F1ZXVlX2xpbWl0c19jaGFuZ2VkIChvcS0+cXVldWUpOworICAgICAgfQorICAgIH0KKyAgICBpZiAoIWdzdF9kYXRhX3F1ZXVlX2lzX2VtcHR5IChvcS0+cXVldWUpKQorICAgICAgZW1wdHkgPSBGQUxTRTsKKyAgfQorICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcSk7CisKKyAgaWYgKGVtcHR5KSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAobXEsICJBbGwgcXVldWVzIGFyZSBlbXB0eSwgc2lnbmFsbGluZyBpdCIpOworICAgIGdfc2lnbmFsX2VtaXQgKG1xLCBnc3RfbXVsdGlfcXVldWVfc2lnbmFsc1tTSUdOQUxfVU5ERVJSVU5dLCAwKTsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3NpbmdsZV9xdWV1ZV9jaGVja19mdWxsIChHc3REYXRhUXVldWUgKiBkYXRhcSwgZ3VpbnQgdmlzaWJsZSwgZ3VpbnQgYnl0ZXMsCisgICAgZ3VpbnQ2NCB0aW1lLCBHc3RTaW5nbGVRdWV1ZSAqIHNxKQoreworICBnYm9vbGVhbiByZXM7CisgIEdzdE11bHRpUXVldWUgKm1xID0gc3EtPm1xdWV1ZTsKKworICBHU1RfREVCVUdfT0JKRUNUIChtcSwKKyAgICAgICJxdWV1ZSAlZDogdmlzaWJsZSAldS8ldSwgYnl0ZXMgJXUvJXUsIHRpbWUgJSIgR19HVUlOVDY0X0ZPUk1BVCAiLyUiCisgICAgICBHX0dVSU5UNjRfRk9STUFULCBzcS0+aWQsIHZpc2libGUsIHNxLT5tYXhfc2l6ZS52aXNpYmxlLCBieXRlcywKKyAgICAgIHNxLT5tYXhfc2l6ZS5ieXRlcywgc3EtPmN1cl90aW1lLCBzcS0+bWF4X3NpemUudGltZSk7CisKKyAgLyogd2UgYXJlIGFsd2F5cyBmaWxsZWQgb24gRU9TICovCisgIGlmIChzcS0+aXNfZW9zKQorICAgIHJldHVybiBUUlVFOworCisgIC8qIHdlIG5ldmVyIGdvIHBhc3QgdGhlIG1heCB2aXNpYmxlIGl0ZW1zIHVubGVzcyB3ZSBhcmUgaW4gYnVmZmVyaW5nIG1vZGUgKi8KKyAgaWYgKCFtcS0+dXNlX2J1ZmZlcmluZyAmJiBJU19GSUxMRUQgKHNxLCB2aXNpYmxlLCB2aXNpYmxlKSkKKyAgICByZXR1cm4gVFJVRTsKKworICAvKiBjaGVjayB0aW1lIG9yIGJ5dGVzICovCisgIHJlcyA9IElTX0ZJTExFRCAoc3EsIHRpbWUsIHNxLT5jdXJfdGltZSkgfHwgSVNfRklMTEVEIChzcSwgYnl0ZXMsIGJ5dGVzKTsKKworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3NpbmdsZV9xdWV1ZV9mcmVlIChHc3RTaW5nbGVRdWV1ZSAqIHNxKQoreworICAvKiBEUkFJTiBRVUVVRSAqLworICBnc3RfZGF0YV9xdWV1ZV9mbHVzaCAoc3EtPnF1ZXVlKTsKKyAgZ19vYmplY3RfdW5yZWYgKHNxLT5xdWV1ZSk7CisgIGdfY29uZF9mcmVlIChzcS0+dHVybik7CisgIGdfZnJlZSAoc3EpOworfQorCitzdGF0aWMgR3N0U2luZ2xlUXVldWUgKgorZ3N0X3NpbmdsZV9xdWV1ZV9uZXcgKEdzdE11bHRpUXVldWUgKiBtcXVldWUsIGdpbnQgaWQpCit7CisgIEdzdFNpbmdsZVF1ZXVlICpzcTsKKyAgZ2NoYXIgKm5hbWU7CisgIEdMaXN0ICp0bXA7CisgIGdpbnQgdGVtcF9pZCA9IChpZCA9PSAtMSkgPyAwIDogaWQ7CisKKyAgR1NUX01VTFRJX1FVRVVFX01VVEVYX0xPQ0sgKG1xdWV1ZSk7CisKKyAgLyogRmluZCBhbiB1bnVzZWQgcXVldWUgSUQsIGlmIHBvc3NpYmxlIHRoZSBwYXNzZWQgb25lICovCisgIGZvciAodG1wID0gbXF1ZXVlLT5xdWV1ZXM7IHRtcDsgdG1wID0gZ19saXN0X25leHQgKHRtcCkpIHsKKyAgICBHc3RTaW5nbGVRdWV1ZSAqc3EyID0gKEdzdFNpbmdsZVF1ZXVlICopIHRtcC0+ZGF0YTsKKyAgICAvKiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhlIElEcyBhcmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlciAqLworICAgIGlmIChzcTItPmlkID09IHRlbXBfaWQpIHsKKyAgICAgIC8qIElmIHRoaXMgSUQgd2FzIHJlcXVlc3RlZCBieSB0aGUgY2FsbGVyIHJldHVybiBOVUxMLAorICAgICAgICogb3RoZXJ3aXNlIGp1c3QgZ2V0IHVzIHRoZSBuZXh0IG9uZSAqLworICAgICAgaWYgKGlkID09IC0xKQorICAgICAgICB0ZW1wX2lkID0gc3EyLT5pZCArIDE7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0gZWxzZSBpZiAoc3EyLT5pZCA+IHRlbXBfaWQpIHsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIHNxID0gZ19uZXcwIChHc3RTaW5nbGVRdWV1ZSwgMSk7CisgIG1xdWV1ZS0+bmJxdWV1ZXMrKzsKKyAgc3EtPmlkID0gdGVtcF9pZDsKKworICBtcXVldWUtPnF1ZXVlcyA9IGdfbGlzdF9pbnNlcnRfYmVmb3JlIChtcXVldWUtPnF1ZXVlcywgdG1wLCBzcSk7CisgIG1xdWV1ZS0+cXVldWVzX2Nvb2tpZSsrOworCisgIC8qIGNvcHkgb3ZlciBtYXhfc2l6ZSBhbmQgZXh0cmFfc2l6ZSBzbyB3ZSBkb24ndCBuZWVkIHRvIHRha2UgdGhlIGxvY2sKKyAgICogYW55IGxvbmdlciB3aGVuIGNoZWNraW5nIGlmIHRoZSBxdWV1ZSBpcyBmdWxsLiAqLworICBzcS0+bWF4X3NpemUudmlzaWJsZSA9IG1xdWV1ZS0+bWF4X3NpemUudmlzaWJsZTsKKyAgc3EtPm1heF9zaXplLmJ5dGVzID0gbXF1ZXVlLT5tYXhfc2l6ZS5ieXRlczsKKyAgc3EtPm1heF9zaXplLnRpbWUgPSBtcXVldWUtPm1heF9zaXplLnRpbWU7CisKKyAgc3EtPmV4dHJhX3NpemUudmlzaWJsZSA9IG1xdWV1ZS0+ZXh0cmFfc2l6ZS52aXNpYmxlOworICBzcS0+ZXh0cmFfc2l6ZS5ieXRlcyA9IG1xdWV1ZS0+ZXh0cmFfc2l6ZS5ieXRlczsKKyAgc3EtPmV4dHJhX3NpemUudGltZSA9IG1xdWV1ZS0+ZXh0cmFfc2l6ZS50aW1lOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKG1xdWV1ZSwgIkNyZWF0aW5nIEdzdFNpbmdsZVF1ZXVlIGlkOiVkIiwgc3EtPmlkKTsKKworICBzcS0+bXF1ZXVlID0gbXF1ZXVlOworICBzcS0+c3JjcmVzdWx0ID0gR1NUX0ZMT1dfV1JPTkdfU1RBVEU7CisgIHNxLT5xdWV1ZSA9IGdzdF9kYXRhX3F1ZXVlX25ld19mdWxsICgoR3N0RGF0YVF1ZXVlQ2hlY2tGdWxsRnVuY3Rpb24pCisgICAgICBzaW5nbGVfcXVldWVfY2hlY2tfZnVsbCwKKyAgICAgIChHc3REYXRhUXVldWVGdWxsQ2FsbGJhY2spIHNpbmdsZV9xdWV1ZV9vdmVycnVuX2NiLAorICAgICAgKEdzdERhdGFRdWV1ZUVtcHR5Q2FsbGJhY2spIHNpbmdsZV9xdWV1ZV91bmRlcnJ1bl9jYiwgc3EpOworICBzcS0+aXNfZW9zID0gRkFMU0U7CisgIHNxLT5mbHVzaGluZyA9IEZBTFNFOworICBnc3Rfc2VnbWVudF9pbml0ICgmc3EtPnNpbmtfc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKKyAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNxLT5zcmNfc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKKworICBzcS0+bmV4dGlkID0gMDsKKyAgc3EtPm9sZGlkID0gMDsKKyAgc3EtPm5leHRfdGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgIHNxLT5sYXN0X3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICBzcS0+dHVybiA9IGdfY29uZF9uZXcgKCk7CisKKyAgc3EtPnNpbmt0aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgc3EtPnNyY3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICBzcS0+c2lua190YWludGVkID0gVFJVRTsKKyAgc3EtPnNyY190YWludGVkID0gVFJVRTsKKworICBuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgic2luayVkIiwgc3EtPmlkKTsKKyAgc3EtPnNpbmtwYWQgPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJnNpbmt0ZW1wbGF0ZSwgbmFtZSk7CisgIGdfZnJlZSAobmFtZSk7CisKKyAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHNxLT5zaW5rcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tdWx0aV9xdWV1ZV9jaGFpbikpOworICBnc3RfcGFkX3NldF9hY3RpdmF0ZXB1c2hfZnVuY3Rpb24gKHNxLT5zaW5rcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tdWx0aV9xdWV1ZV9zaW5rX2FjdGl2YXRlX3B1c2gpKTsKKyAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHNxLT5zaW5rcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tdWx0aV9xdWV1ZV9zaW5rX2V2ZW50KSk7CisgIGdzdF9wYWRfc2V0X2dldGNhcHNfZnVuY3Rpb24gKHNxLT5zaW5rcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tdWx0aV9xdWV1ZV9nZXRjYXBzKSk7CisgIGdzdF9wYWRfc2V0X2FjY2VwdGNhcHNfZnVuY3Rpb24gKHNxLT5zaW5rcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tdWx0aV9xdWV1ZV9hY2NlcHRjYXBzKSk7CisgIGdzdF9wYWRfc2V0X2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZnVuY3Rpb24gKHNxLT5zaW5rcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tdWx0aV9xdWV1ZV9pdGVyYXRlX2ludGVybmFsX2xpbmtzKSk7CisKKyAgbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoInNyYyVkIiwgc3EtPmlkKTsKKyAgc3EtPnNyY3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc3JjdGVtcGxhdGUsIG5hbWUpOworICBnX2ZyZWUgKG5hbWUpOworCisgIGdzdF9wYWRfc2V0X2FjdGl2YXRlcHVzaF9mdW5jdGlvbiAoc3EtPnNyY3BhZCwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbXVsdGlfcXVldWVfc3JjX2FjdGl2YXRlX3B1c2gpKTsKKyAgZ3N0X3BhZF9zZXRfZ2V0Y2Fwc19mdW5jdGlvbiAoc3EtPnNyY3BhZCwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbXVsdGlfcXVldWVfZ2V0Y2FwcykpOworICBnc3RfcGFkX3NldF9hY2NlcHRjYXBzX2Z1bmN0aW9uIChzcS0+c3JjcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tdWx0aV9xdWV1ZV9hY2NlcHRjYXBzKSk7CisgIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChzcS0+c3JjcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tdWx0aV9xdWV1ZV9zcmNfZXZlbnQpKTsKKyAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKHNxLT5zcmNwYWQsCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X211bHRpX3F1ZXVlX3NyY19xdWVyeSkpOworICBnc3RfcGFkX3NldF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2Z1bmN0aW9uIChzcS0+c3JjcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tdWx0aV9xdWV1ZV9pdGVyYXRlX2ludGVybmFsX2xpbmtzKSk7CisKKyAgZ3N0X3BhZF9zZXRfZWxlbWVudF9wcml2YXRlIChzcS0+c2lua3BhZCwgKGdwb2ludGVyKSBzcSk7CisgIGdzdF9wYWRfc2V0X2VsZW1lbnRfcHJpdmF0ZSAoc3EtPnNyY3BhZCwgKGdwb2ludGVyKSBzcSk7CisKKyAgR1NUX01VTFRJX1FVRVVFX01VVEVYX1VOTE9DSyAobXF1ZXVlKTsKKworICAvKiBvbmx5IGFjdGl2YXRlIHRoZSBwYWRzIHdoZW4gd2UgYXJlIG5vdCBpbiB0aGUgTlVMTCBzdGF0ZQorICAgKiBhbmQgYWRkIHRoZSBwYWQgdW5kZXIgdGhlIHN0YXRlX2xvY2sgdG8gcHJldmVuZCBzdGF0ZSBjaGFuZ2VzCisgICAqIGJldHdlZW4gYWN0aXZhdGluZyBhbmQgYWRkaW5nICovCisgIGdfc3RhdGljX3JlY19tdXRleF9sb2NrIChHU1RfU1RBVEVfR0VUX0xPQ0sgKG1xdWV1ZSkpOworICBpZiAoR1NUX1NUQVRFX1RBUkdFVCAobXF1ZXVlKSAhPSBHU1RfU1RBVEVfTlVMTCkgeworICAgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3EtPnNyY3BhZCwgVFJVRSk7CisgICAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzcS0+c2lua3BhZCwgVFJVRSk7CisgIH0KKyAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKG1xdWV1ZSksIHNxLT5zcmNwYWQpOworICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAobXF1ZXVlKSwgc3EtPnNpbmtwYWQpOworICBnX3N0YXRpY19yZWNfbXV0ZXhfdW5sb2NrIChHU1RfU1RBVEVfR0VUX0xPQ0sgKG1xdWV1ZSkpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKG1xdWV1ZSwgIkdzdFNpbmdsZVF1ZXVlIFslZF0gY3JlYXRlZCBhbmQgcGFkcyBhZGRlZCIsCisgICAgICBzcS0+aWQpOworCisgIHJldHVybiBzcTsKK30KZGlmZiAtLWdpdCBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5oIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIzZDg0MAotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA2IEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBmbHVlbmRvLmNvbT4KKyAqCisgKiBnc3RtdWx0aXF1ZXVlLmg6CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworCisjaWZuZGVmIF9fR1NUX01VTFRJX1FVRVVFX0hfXworI2RlZmluZSBfX0dTVF9NVUxUSV9RVUVVRV9IX18KKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDxnc3QvYmFzZS9nc3RkYXRhcXVldWUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEdTVF9UWVBFX01VTFRJX1FVRVVFIFwKKyAgKGdzdF9tdWx0aV9xdWV1ZV9nZXRfdHlwZSgpKQorI2RlZmluZSBHU1RfTVVMVElfUVVFVUUob2JqKSBcCisgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9NVUxUSV9RVUVVRSxHc3RNdWx0aVF1ZXVlKSkKKyNkZWZpbmUgR1NUX01VTFRJX1FVRVVFX0NMQVNTKGtsYXNzKSBcCisgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX01VTFRJX1FVRVVFLEdzdE11bHRpUXVldWVDbGFzcykpCisjZGVmaW5lIEdTVF9JU19NVUxUSV9RVUVVRShvYmopIFwKKyAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX01VTFRJX1FVRVVFKSkKKyNkZWZpbmUgR1NUX0lTX01VTFRJX1FVRVVFX0NMQVNTKG9iaikgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9NVUxUSV9RVUVVRSkpCisKK3R5cGVkZWYgc3RydWN0IF9Hc3RNdWx0aVF1ZXVlIEdzdE11bHRpUXVldWU7Cit0eXBlZGVmIHN0cnVjdCBfR3N0TXVsdGlRdWV1ZUNsYXNzIEdzdE11bHRpUXVldWVDbGFzczsKKworLyoqCisgKiBHc3RNdWx0aVF1ZXVlOgorICoKKyAqIE9wYXF1ZSAjR3N0TXVsdGlRdWV1ZSBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBfR3N0TXVsdGlRdWV1ZSB7CisgIEdzdEVsZW1lbnQgZWxlbWVudDsKKworICBnYm9vbGVhbiBzeW5jX2J5X3J1bm5pbmdfdGltZTsKKworICAvKiBudW1iZXIgb2YgcXVldWVzICovCisgIGd1aW50CW5icXVldWVzOworCisgIC8qIFRoZSBsaXN0IG9mIGluZGl2aWR1YWwgcXVldWVzICovCisgIEdMaXN0ICpxdWV1ZXM7CisgIGd1aW50MzIgcXVldWVzX2Nvb2tpZTsKKworICBHc3REYXRhUXVldWVTaXplICBtYXhfc2l6ZSwgZXh0cmFfc2l6ZTsKKyAgZ2Jvb2xlYW4gdXNlX2J1ZmZlcmluZzsKKyAgZ2ludCBsb3dfcGVyY2VudCwgaGlnaF9wZXJjZW50OworICBnYm9vbGVhbiBidWZmZXJpbmc7CisgIGdpbnQgcGVyY2VudDsKKworICBndWludDMyICBjb3VudGVyOwkvKiBpbmNvbWluZyBvYmplY3QgY291bnRlciwgdXNlIGF0b21pYyBhY2Nlc3NlcyAqLworICBndWludDMyICBoaWdoaWQ7CS8qIGNvbnRhaW5zIGhpZ2hlc3QgaWQgb2YgbGFzdCBvdXRwdXR0ZWQgb2JqZWN0ICovCisgIEdzdENsb2NrVGltZSBoaWdoX3RpbWU7IC8qIGhpZ2hlc3Qgc3RhcnQgcnVubmluZyB0aW1lICovCisKKyAgR011dGV4ICogcWxvY2s7CS8qIEdsb2JhbCBxdWV1ZSBsb2NrICh2cyBvYmplY3QgbG9jayBvciBpbmRpdmlkdWFsICovCisJCQkvKiBxdWV1ZXMgbG9jaykuIFByb3RlY3RzIG5icXVldWVzLCBxdWV1ZXMsIGdsb2JhbCAqLworCQkJLyogR3N0TXVsdGlRdWV1ZVNpemUsIGNvdW50ZXIgYW5kIGhpZ2hpZCAqLworCisgIGdpbnQgbnVtd2FpdGluZzsJLyogbnVtYmVyIG9mIG5vdC1saW5rZWQgcGFkcyB3YWl0aW5nICovCit9OworCitzdHJ1Y3QgX0dzdE11bHRpUXVldWVDbGFzcyB7CisgIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgLyogc2lnbmFscyBlbWl0dGVkIHdoZW4gQUxMIHF1ZXVlcyBhcmUgZWl0aGVyIGZ1bGwgb3IgZW1wdHkgKi8KKyAgdm9pZCAoKnVuZGVycnVuKQkoR3N0TXVsdGlRdWV1ZSAqcXVldWUpOworICB2b2lkICgqb3ZlcnJ1bikJKEdzdE11bHRpUXVldWUgKnF1ZXVlKTsKK307CisKK0dUeXBlIGdzdF9tdWx0aV9xdWV1ZV9nZXRfdHlwZSAodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKworI2VuZGlmIC8qIF9fR1NUX01VTFRJX1FVRVVFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkYjc2NjAKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmMKQEAgLTAsMCArMSw2MDIgQEAKKy8qIEdTdHJlYW1lciBvdXRwdXQgc2VsZWN0b3IKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbi4gKGNvbnRhY3QgPHN0ZWZhbi5rb3N0QG5va2lhLmNvbT4pCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoqCisgKiBTRUNUSU9OOmVsZW1lbnQtb3V0cHV0LXNlbGVjdG9yCisgKiBAc2VlX2Fsc286ICNHc3RPdXRwdXRTZWxlY3RvciwgI0dzdElucHV0U2VsZWN0b3IKKyAqCisgKiBEaXJlY3QgaW5wdXQgc3RyZWFtIHRvIG9uZSBvdXQgb2YgTiBvdXRwdXQgcGFkcy4KKyAqCisgKiBTaW5jZTogMC4xMC4zMgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiZ3N0b3V0cHV0c2VsZWN0b3IuaCIKKworR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAob3V0cHV0X3NlbGVjdG9yX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIG91dHB1dF9zZWxlY3Rvcl9kZWJ1ZworCitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X291dHB1dF9zZWxlY3Rvcl9zaW5rX2ZhY3RvcnkgPQorR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKKyAgICBHU1RfUEFEX1NJTkssCisgICAgR1NUX1BBRF9BTFdBWVMsCisgICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7CisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3Rfb3V0cHV0X3NlbGVjdG9yX3NyY19mYWN0b3J5ID0KK0dTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjJWQiLAorICAgIEdTVF9QQURfU1JDLAorICAgIEdTVF9QQURfUkVRVUVTVCwKKyAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKKworZW51bSBHc3RPdXRwdXRTZWxlY3RvclBhZE5lZ290aWF0aW9uTW9kZQoreworICBHU1RfT1VUUFVUX1NFTEVDVE9SX1BBRF9ORUdPVElBVElPTl9NT0RFX05PTkUsCisgIEdTVF9PVVRQVVRfU0VMRUNUT1JfUEFEX05FR09USUFUSU9OX01PREVfQUxMLAorICBHU1RfT1VUUFVUX1NFTEVDVE9SX1BBRF9ORUdPVElBVElPTl9NT0RFX0FDVElWRQorfTsKKyNkZWZpbmUgR1NUX1RZUEVfT1VUUFVUX1NFTEVDVE9SX1BBRF9ORUdPVElBVElPTl9NT0RFIChnc3Rfb3V0cHV0X3NlbGVjdG9yX3BhZF9uZWdvdGlhdGlvbl9tb2RlX2dldF90eXBlKCkpCitzdGF0aWMgR1R5cGUKK2dzdF9vdXRwdXRfc2VsZWN0b3JfcGFkX25lZ290aWF0aW9uX21vZGVfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBHVHlwZSBwYWRfbmVnb3RpYXRpb25fbW9kZV90eXBlID0gMDsKKyAgc3RhdGljIEdFbnVtVmFsdWUgcGFkX25lZ290aWF0aW9uX21vZGVzW10gPSB7CisgICAge0dTVF9PVVRQVVRfU0VMRUNUT1JfUEFEX05FR09USUFUSU9OX01PREVfTk9ORSwgIk5vbmUiLCAibm9uZSJ9LAorICAgIHtHU1RfT1VUUFVUX1NFTEVDVE9SX1BBRF9ORUdPVElBVElPTl9NT0RFX0FMTCwgIkFsbCIsICJhbGwifSwKKyAgICB7R1NUX09VVFBVVF9TRUxFQ1RPUl9QQURfTkVHT1RJQVRJT05fTU9ERV9BQ1RJVkUsICJBY3RpdmUiLCAiYWN0aXZlIn0sCisgICAgezAsIE5VTEwsIE5VTEx9CisgIH07CisKKyAgaWYgKCFwYWRfbmVnb3RpYXRpb25fbW9kZV90eXBlKSB7CisgICAgcGFkX25lZ290aWF0aW9uX21vZGVfdHlwZSA9CisgICAgICAgIGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RPdXRwdXRTZWxlY3RvclBhZE5lZ290aWF0aW9uTW9kZSIsCisgICAgICAgIHBhZF9uZWdvdGlhdGlvbl9tb2Rlcyk7CisgIH0KKyAgcmV0dXJuIHBhZF9uZWdvdGlhdGlvbl9tb2RlX3R5cGU7Cit9CisKKworZW51bQoreworICBQUk9QXzAsCisgIFBST1BfQUNUSVZFX1BBRCwKKyAgUFJPUF9SRVNFTkRfTEFURVNULAorICBQUk9QX1BBRF9ORUdPVElBVElPTl9NT0RFCit9OworCisjZGVmaW5lIERFRkFVTFRfUEFEX05FR09USUFUSU9OX01PREUgR1NUX09VVFBVVF9TRUxFQ1RPUl9QQURfTkVHT1RJQVRJT05fTU9ERV9BTEwKKworI2RlZmluZSBfZG9faW5pdCBcCitHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAob3V0cHV0X3NlbGVjdG9yX2RlYnVnLCBcCisgICAgICAgICJvdXRwdXQtc2VsZWN0b3IiLCAwLCAiT3V0cHV0IHN0cmVhbSBzZWxlY3RvciIpOworI2RlZmluZSBnc3Rfb3V0cHV0X3NlbGVjdG9yX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RPdXRwdXRTZWxlY3RvciwgZ3N0X291dHB1dF9zZWxlY3RvciwKKyAgICBHU1RfVFlQRV9FTEVNRU5ULCBfZG9faW5pdCk7CisKK3N0YXRpYyB2b2lkIGdzdF9vdXRwdXRfc2VsZWN0b3JfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7CitzdGF0aWMgdm9pZCBnc3Rfb3V0cHV0X3NlbGVjdG9yX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKKyAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKK3N0YXRpYyB2b2lkIGdzdF9vdXRwdXRfc2VsZWN0b3JfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAorICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOworc3RhdGljIEdzdFBhZCAqZ3N0X291dHB1dF9zZWxlY3Rvcl9yZXF1ZXN0X25ld19wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAorICAgIEdzdFBhZFRlbXBsYXRlICogdGVtcGwsIGNvbnN0IGdjaGFyICogdW51c2VkLCBjb25zdCBHc3RDYXBzICogY2Fwcyk7CitzdGF0aWMgdm9pZCBnc3Rfb3V0cHV0X3NlbGVjdG9yX3JlbGVhc2VfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwKKyAgICBHc3RQYWQgKiBwYWQpOworc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X291dHB1dF9zZWxlY3Rvcl9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RCdWZmZXIgKiBidWYpOworc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9vdXRwdXRfc2VsZWN0b3JfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICoKKyAgICBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3Rfb3V0cHV0X3NlbGVjdG9yX2hhbmRsZV9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsCisgICAgR3N0RXZlbnQgKiBldmVudCk7CitzdGF0aWMgdm9pZCBnc3Rfb3V0cHV0X3NlbGVjdG9yX3N3aXRjaF9wYWRfbmVnb3RpYXRpb25fbW9kZSAoR3N0T3V0cHV0U2VsZWN0b3IgKgorICAgIHNlbCwgZ2ludCBtb2RlKTsKKworc3RhdGljIHZvaWQKK2dzdF9vdXRwdXRfc2VsZWN0b3JfY2xhc3NfaW5pdCAoR3N0T3V0cHV0U2VsZWN0b3JDbGFzcyAqIGtsYXNzKQoreworICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOworICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOworCisgIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnc3Rfb3V0cHV0X3NlbGVjdG9yX2Rpc3Bvc2U7CisKKyAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X291dHB1dF9zZWxlY3Rvcl9zZXRfcHJvcGVydHk7CisgIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9vdXRwdXRfc2VsZWN0b3JfZ2V0X3Byb3BlcnR5OworCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQUNUSVZFX1BBRCwKKyAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QgKCJhY3RpdmUtcGFkIiwgIkFjdGl2ZSBwYWQiLAorICAgICAgICAgICJDdXJyZW50bHkgYWN0aXZlIHNyYyBwYWQiLCBHU1RfVFlQRV9QQUQsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUkVTRU5EX0xBVEVTVCwKKyAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgicmVzZW5kLWxhdGVzdCIsICJSZXNlbmQgbGF0ZXN0IGJ1ZmZlciIsCisgICAgICAgICAgIlJlc2VuZCBsYXRlc3QgYnVmZmVyIGFmdGVyIGEgc3dpdGNoIHRvIGEgbmV3IHBhZCIsIEZBTFNFLAorICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1BBRF9ORUdPVElBVElPTl9NT0RFLAorICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJwYWQtbmVnb3RpYXRpb24tbW9kZSIsICJQYWQgbmVnb3RpYXRpb24gbW9kZSIsCisgICAgICAgICAgIlRoZSBtb2RlIHRvIGJlIHVzZWQgZm9yIHBhZCBuZWdvdGlhdGlvbiIsCisgICAgICAgICAgR1NUX1RZUEVfT1VUUFVUX1NFTEVDVE9SX1BBRF9ORUdPVElBVElPTl9NT0RFLAorICAgICAgICAgIERFRkFVTFRfUEFEX05FR09USUFUSU9OX01PREUsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisKKyAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2ltcGxlIChnc3RlbGVtZW50X2NsYXNzLCAiT3V0cHV0IHNlbGVjdG9yIiwKKyAgICAgICJHZW5lcmljIiwgIjEtdG8tTiBvdXRwdXQgc3RyZWFtIHNlbGVjdG9yIiwKKyAgICAgICJTdGVmYW4gS29zdCA8c3RlZmFuLmtvc3RAbm9raWEuY29tPiIpOworICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAorICAgICAgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0ICgmZ3N0X291dHB1dF9zZWxlY3Rvcl9zaW5rX2ZhY3RvcnkpKTsKKyAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKKyAgICAgIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoJmdzdF9vdXRwdXRfc2VsZWN0b3Jfc3JjX2ZhY3RvcnkpKTsKKworICBnc3RlbGVtZW50X2NsYXNzLT5yZXF1ZXN0X25ld19wYWQgPQorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9vdXRwdXRfc2VsZWN0b3JfcmVxdWVzdF9uZXdfcGFkKTsKKyAgZ3N0ZWxlbWVudF9jbGFzcy0+cmVsZWFzZV9wYWQgPQorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9vdXRwdXRfc2VsZWN0b3JfcmVsZWFzZV9wYWQpOworCisgIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IGdzdF9vdXRwdXRfc2VsZWN0b3JfY2hhbmdlX3N0YXRlOworfQorCitzdGF0aWMgdm9pZAorZ3N0X291dHB1dF9zZWxlY3Rvcl9pbml0IChHc3RPdXRwdXRTZWxlY3RvciAqIHNlbCkKK3sKKyAgc2VsLT5zaW5rcGFkID0KKyAgICAgIGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmZ3N0X291dHB1dF9zZWxlY3Rvcl9zaW5rX2ZhY3RvcnksCisgICAgICAic2luayIpOworICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoc2VsLT5zaW5rcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9vdXRwdXRfc2VsZWN0b3JfY2hhaW4pKTsKKyAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHNlbC0+c2lua3BhZCwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfb3V0cHV0X3NlbGVjdG9yX2hhbmRsZV9zaW5rX2V2ZW50KSk7CisKKyAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKHNlbCksIHNlbC0+c2lua3BhZCk7CisKKyAgLyogc3JjcGFkIG1hbmFnZW1lbnQgKi8KKyAgc2VsLT5hY3RpdmVfc3JjcGFkID0gTlVMTDsKKyAgc2VsLT5uYl9zcmNwYWRzID0gMDsKKyAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlbC0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKKyAgc2VsLT5wZW5kaW5nX3NyY3BhZCA9IE5VTEw7CisKKyAgc2VsLT5yZXNlbmRfbGF0ZXN0ID0gRkFMU0U7CisgIHNlbC0+bGF0ZXN0X2J1ZmZlciA9IE5VTEw7CisgIGdzdF9vdXRwdXRfc2VsZWN0b3Jfc3dpdGNoX3BhZF9uZWdvdGlhdGlvbl9tb2RlIChzZWwsCisgICAgICBERUZBVUxUX1BBRF9ORUdPVElBVElPTl9NT0RFKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9vdXRwdXRfc2VsZWN0b3JfcmVzZXQgKEdzdE91dHB1dFNlbGVjdG9yICogb3NlbCkKK3sKKyAgaWYgKG9zZWwtPnBlbmRpbmdfc3JjcGFkICE9IE5VTEwpIHsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChvc2VsLT5wZW5kaW5nX3NyY3BhZCk7CisgICAgb3NlbC0+cGVuZGluZ19zcmNwYWQgPSBOVUxMOworICB9CisgIGlmIChvc2VsLT5sYXRlc3RfYnVmZmVyICE9IE5VTEwpIHsKKyAgICBnc3RfYnVmZmVyX3VucmVmIChvc2VsLT5sYXRlc3RfYnVmZmVyKTsKKyAgICBvc2VsLT5sYXRlc3RfYnVmZmVyID0gTlVMTDsKKyAgfQorICBnc3Rfc2VnbWVudF9pbml0ICgmb3NlbC0+c2VnbWVudCwgR1NUX0ZPUk1BVF9VTkRFRklORUQpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X291dHB1dF9zZWxlY3Rvcl9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQoreworICBHc3RPdXRwdXRTZWxlY3RvciAqb3NlbCA9IEdTVF9PVVRQVVRfU0VMRUNUT1IgKG9iamVjdCk7CisKKyAgZ3N0X291dHB1dF9zZWxlY3Rvcl9yZXNldCAob3NlbCk7CisKKyAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3Rfb3V0cHV0X3NlbGVjdG9yX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQoreworICBHc3RPdXRwdXRTZWxlY3RvciAqc2VsID0gR1NUX09VVFBVVF9TRUxFQ1RPUiAob2JqZWN0KTsKKworICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfQUNUSVZFX1BBRDoKKyAgICB7CisgICAgICBHc3RQYWQgKm5leHRfcGFkOworCisgICAgICBuZXh0X3BhZCA9IGdfdmFsdWVfZ2V0X29iamVjdCAodmFsdWUpOworCisgICAgICBHU1RfSU5GT19PQkpFQ1QgKHNlbCwgIkFjdGl2YXRpbmcgcGFkICVzOiVzIiwKKyAgICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKG5leHRfcGFkKSk7CisKKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAob2JqZWN0KTsKKyAgICAgIGlmIChuZXh0X3BhZCAhPSBzZWwtPmFjdGl2ZV9zcmNwYWQpIHsKKyAgICAgICAgLyogc3dpdGNoIHRvIG5ldyBzcmNwYWQgaW4gbmV4dCBjaGFpbiBydW4gKi8KKyAgICAgICAgaWYgKHNlbC0+cGVuZGluZ19zcmNwYWQgIT0gTlVMTCkgeworICAgICAgICAgIEdTVF9JTkZPICgicmVwbGFjaW5nIHBlbmRpbmcgc3dpdGNoIik7CisgICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAoc2VsLT5wZW5kaW5nX3NyY3BhZCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5leHRfcGFkKQorICAgICAgICAgIGdzdF9vYmplY3RfcmVmIChuZXh0X3BhZCk7CisgICAgICAgIHNlbC0+cGVuZGluZ19zcmNwYWQgPSBuZXh0X3BhZDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIEdTVF9JTkZPICgicGFkIGFscmVhZHkgYWN0aXZlIik7CisgICAgICAgIGlmIChzZWwtPnBlbmRpbmdfc3JjcGFkICE9IE5VTEwpIHsKKyAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChzZWwtPnBlbmRpbmdfc3JjcGFkKTsKKyAgICAgICAgICBzZWwtPnBlbmRpbmdfc3JjcGFkID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKG9iamVjdCk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1JFU0VORF9MQVRFU1Q6eworICAgICAgc2VsLT5yZXNlbmRfbGF0ZXN0ID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9QQURfTkVHT1RJQVRJT05fTU9ERTp7CisgICAgICBnc3Rfb3V0cHV0X3NlbGVjdG9yX3N3aXRjaF9wYWRfbmVnb3RpYXRpb25fbW9kZSAoc2VsLAorICAgICAgICAgIGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKSk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICBicmVhazsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZ3N0X291dHB1dF9zZWxlY3Rvcl9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgR3N0T3V0cHV0U2VsZWN0b3IgKnNlbCA9IEdTVF9PVVRQVVRfU0VMRUNUT1IgKG9iamVjdCk7CisKKyAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX0FDVElWRV9QQUQ6CisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKG9iamVjdCk7CisgICAgICBnX3ZhbHVlX3NldF9vYmplY3QgKHZhbHVlLAorICAgICAgICAgIHNlbC0+cGVuZGluZ19zcmNwYWQgPyBzZWwtPnBlbmRpbmdfc3JjcGFkIDogc2VsLT5hY3RpdmVfc3JjcGFkKTsKKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChvYmplY3QpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JFU0VORF9MQVRFU1Q6eworICAgICAgR1NUX09CSkVDVF9MT0NLIChvYmplY3QpOworICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHNlbC0+cmVzZW5kX2xhdGVzdCk7CisgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAob2JqZWN0KTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfUEFEX05FR09USUFUSU9OX01PREU6CisgICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgc2VsLT5wYWRfbmVnb3RpYXRpb25fbW9kZSk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYyBHc3RDYXBzICoKK2dzdF9vdXRwdXRfc2VsZWN0b3Jfc2lua19nZXRjYXBzIChHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBmaWx0ZXIpCit7CisgIEdzdE91dHB1dFNlbGVjdG9yICpzZWwgPSBHU1RfT1VUUFVUX1NFTEVDVE9SIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOworICBHc3RQYWQgKmFjdGl2ZSA9IE5VTEw7CisgIEdzdENhcHMgKmNhcHMgPSBOVUxMOworCisgIGlmIChHX1VOTElLRUxZIChzZWwgPT0gTlVMTCkpCisgICAgcmV0dXJuIChmaWx0ZXIgPyBnc3RfY2Fwc19yZWYgKGZpbHRlcikgOiBnc3RfY2Fwc19uZXdfYW55ICgpKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHNlbCk7CisgIGlmIChzZWwtPnBlbmRpbmdfc3JjcGFkKQorICAgIGFjdGl2ZSA9IGdzdF9vYmplY3RfcmVmIChzZWwtPnBlbmRpbmdfc3JjcGFkKTsKKyAgZWxzZSBpZiAoc2VsLT5hY3RpdmVfc3JjcGFkKQorICAgIGFjdGl2ZSA9IGdzdF9vYmplY3RfcmVmIChzZWwtPmFjdGl2ZV9zcmNwYWQpOworICBHU1RfT0JKRUNUX1VOTE9DSyAoc2VsKTsKKworICBpZiAoYWN0aXZlKSB7CisgICAgY2FwcyA9IGdzdF9wYWRfcGVlcl9nZXRfY2FwcyAoYWN0aXZlLCBmaWx0ZXIpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKGFjdGl2ZSk7CisgIH0KKyAgaWYgKGNhcHMgPT0gTlVMTCkgeworICAgIGNhcHMgPSAoZmlsdGVyID8gZ3N0X2NhcHNfcmVmIChmaWx0ZXIpIDogZ3N0X2NhcHNfbmV3X2FueSAoKSk7CisgIH0KKworICBnc3Rfb2JqZWN0X3VucmVmIChzZWwpOworICByZXR1cm4gY2FwczsKK30KKworc3RhdGljIHZvaWQKK2dzdF9vdXRwdXRfc2VsZWN0b3Jfc3dpdGNoX3BhZF9uZWdvdGlhdGlvbl9tb2RlIChHc3RPdXRwdXRTZWxlY3RvciAqIHNlbCwKKyAgICBnaW50IG1vZGUpCit7CisgIHNlbC0+cGFkX25lZ290aWF0aW9uX21vZGUgPSBtb2RlOworICBpZiAobW9kZSA9PSBHU1RfT1VUUFVUX1NFTEVDVE9SX1BBRF9ORUdPVElBVElPTl9NT0RFX0FMTCkgeworICAgIGdzdF9wYWRfc2V0X2dldGNhcHNfZnVuY3Rpb24gKHNlbC0+c2lua3BhZCwgZ3N0X3BhZF9wcm94eV9nZXRjYXBzKTsKKyAgfSBlbHNlIGlmIChtb2RlID09IEdTVF9PVVRQVVRfU0VMRUNUT1JfUEFEX05FR09USUFUSU9OX01PREVfTk9ORSkgeworICAgIGdzdF9wYWRfc2V0X2dldGNhcHNfZnVuY3Rpb24gKHNlbC0+c2lua3BhZCwgTlVMTCk7CisgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIGFjdGl2ZSAqLworICAgIGdzdF9wYWRfc2V0X2dldGNhcHNfZnVuY3Rpb24gKHNlbC0+c2lua3BhZCwKKyAgICAgICAgZ3N0X291dHB1dF9zZWxlY3Rvcl9zaW5rX2dldGNhcHMpOworICB9Cit9CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuCitmb3J3YXJkX3N0aWNreV9ldmVudHMgKEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiBldmVudCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBHc3RQYWQgKnNyY3BhZCA9IEdTVF9QQURfQ0FTVCAodXNlcl9kYXRhKTsKKworICBnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwgZ3N0X2V2ZW50X3JlZiAoZXZlbnQpKTsKKworICByZXR1cm4gR1NUX0ZMT1dfT0s7Cit9CisKK3N0YXRpYyBHc3RQYWQgKgorZ3N0X291dHB1dF9zZWxlY3Rvcl9yZXF1ZXN0X25ld19wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAorICAgIEdzdFBhZFRlbXBsYXRlICogdGVtcGwsIGNvbnN0IGdjaGFyICogbmFtZSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMpCit7CisgIGdjaGFyICpwYWRuYW1lOworICBHc3RQYWQgKnNyY3BhZDsKKyAgR3N0T3V0cHV0U2VsZWN0b3IgKm9zZWw7CisKKyAgb3NlbCA9IEdTVF9PVVRQVVRfU0VMRUNUT1IgKGVsZW1lbnQpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKG9zZWwsICJyZXF1ZXN0aW5nIHBhZCIpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAob3NlbCk7CisgIHBhZG5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJzcmMlZCIsIG9zZWwtPm5iX3NyY3BhZHMrKyk7CisgIHNyY3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHRlbXBsLCBwYWRuYW1lKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKG9zZWwpOworCisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjcGFkLCBUUlVFKTsKKworICAvKiBGb3J3YXJkIHN0aWNreSBldmVudHMgdG8gdGhlIG5ldyBzcmNwYWQgKi8KKyAgZ3N0X3BhZF9zdGlja3lfZXZlbnRzX2ZvcmVhY2ggKG9zZWwtPnNpbmtwYWQsIGZvcndhcmRfc3RpY2t5X2V2ZW50cywgc3JjcGFkKTsKKworICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAob3NlbCksIHNyY3BhZCk7CisKKyAgLyogU2V0IHRoZSBmaXJzdCByZXF1ZXN0ZWQgc3JjIHBhZCBhcyBhY3RpdmUgYnkgZGVmYXVsdCAqLworICBpZiAob3NlbC0+YWN0aXZlX3NyY3BhZCA9PSBOVUxMKSB7CisgICAgb3NlbC0+YWN0aXZlX3NyY3BhZCA9IHNyY3BhZDsKKyAgfQorICBnX2ZyZWUgKHBhZG5hbWUpOworCisgIHJldHVybiBzcmNwYWQ7Cit9CisKK3N0YXRpYyB2b2lkCitnc3Rfb3V0cHV0X3NlbGVjdG9yX3JlbGVhc2VfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkICogcGFkKQoreworICBHc3RPdXRwdXRTZWxlY3RvciAqb3NlbDsKKworICBvc2VsID0gR1NUX09VVFBVVF9TRUxFQ1RPUiAoZWxlbWVudCk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAob3NlbCwgInJlbGVhc2luZyBwYWQiKTsKKworICBnc3RfcGFkX3NldF9hY3RpdmUgKHBhZCwgRkFMU0UpOworCisgIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKG9zZWwpLCBwYWQpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9vdXRwdXRfc2VsZWN0b3Jfc3dpdGNoIChHc3RPdXRwdXRTZWxlY3RvciAqIG9zZWwpCit7CisgIGdib29sZWFuIHJlcyA9IEZBTFNFOworICBHc3RFdmVudCAqZXYgPSBOVUxMOworICBHc3RTZWdtZW50ICpzZWcgPSBOVUxMOworICBnaW50NjQgc3RhcnQgPSAwLCBwb3NpdGlvbiA9IDA7CisKKyAgLyogU3dpdGNoICovCisgIEdTVF9PQkpFQ1RfTE9DSyAoR1NUX09CSkVDVCAob3NlbCkpOworICBHU1RfSU5GTyAoInN3aXRjaGluZyB0byBwYWQgJSIgR1NUX1BUUl9GT1JNQVQsIG9zZWwtPnBlbmRpbmdfc3JjcGFkKTsKKyAgaWYgKGdzdF9wYWRfaXNfbGlua2VkIChvc2VsLT5wZW5kaW5nX3NyY3BhZCkpIHsKKyAgICBvc2VsLT5hY3RpdmVfc3JjcGFkID0gb3NlbC0+cGVuZGluZ19zcmNwYWQ7CisgICAgcmVzID0gVFJVRTsKKyAgfQorICBnc3Rfb2JqZWN0X3VucmVmIChvc2VsLT5wZW5kaW5nX3NyY3BhZCk7CisgIG9zZWwtPnBlbmRpbmdfc3JjcGFkID0gTlVMTDsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKEdTVF9PQkpFQ1QgKG9zZWwpKTsKKworICAvKiBTZW5kIFNFR01FTlQgZXZlbnQgYW5kIGxhdGVzdCBidWZmZXIgaWYgc3dpdGNoaW5nIHN1Y2NlZWRlZCAqLworICBpZiAocmVzKSB7CisgICAgLyogU2VuZCBTRUdNRU5UIHRvIHRoZSBwYWQgd2UgYXJlIGdvaW5nIHRvIHN3aXRjaCB0byAqLworICAgIHNlZyA9ICZvc2VsLT5zZWdtZW50OworICAgIC8qIElmIHJlc2VuZGluZyB0aGVuIG1hcmsgc2VnbWVudCBzdGFydCBhbmQgcG9zaXRpb24gYWNjb3JkaW5nbHkgKi8KKyAgICBpZiAob3NlbC0+cmVzZW5kX2xhdGVzdCAmJiBvc2VsLT5sYXRlc3RfYnVmZmVyICYmCisgICAgICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QX0lTX1ZBTElEIChvc2VsLT5sYXRlc3RfYnVmZmVyKSkgeworICAgICAgc3RhcnQgPSBwb3NpdGlvbiA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChvc2VsLT5sYXRlc3RfYnVmZmVyKTsKKyAgICB9IGVsc2UgeworICAgICAgc3RhcnQgPSBwb3NpdGlvbiA9IHNlZy0+cG9zaXRpb247CisgICAgfQorCisgICAgc2VnLT5zdGFydCA9IHN0YXJ0OworICAgIHNlZy0+cG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICBldiA9IGdzdF9ldmVudF9uZXdfc2VnbWVudCAoc2VnKTsKKworICAgIGlmICghZ3N0X3BhZF9wdXNoX2V2ZW50IChvc2VsLT5hY3RpdmVfc3JjcGFkLCBldikpIHsKKyAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAob3NlbCwKKyAgICAgICAgICAibmV3c2VnbWVudCBoYW5kbGluZyBmYWlsZWQgaW4gJSIgR1NUX1BUUl9GT1JNQVQsCisgICAgICAgICAgb3NlbC0+YWN0aXZlX3NyY3BhZCk7CisgICAgfQorCisgICAgLyogUmVzZW5kIGxhdGVzdCBidWZmZXIgdG8gbmV3bHkgc3dpdGNoZWQgcGFkICovCisgICAgaWYgKG9zZWwtPnJlc2VuZF9sYXRlc3QgJiYgb3NlbC0+bGF0ZXN0X2J1ZmZlcikgeworICAgICAgR1NUX0lORk8gKCJyZXNlbmRpbmcgbGF0ZXN0IGJ1ZmZlciIpOworICAgICAgZ3N0X3BhZF9wdXNoIChvc2VsLT5hY3RpdmVfc3JjcGFkLCBnc3RfYnVmZmVyX3JlZiAob3NlbC0+bGF0ZXN0X2J1ZmZlcikpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG9zZWwsICJzd2l0Y2ggZmFpbGVkLCBwYWQgbm90IGxpbmtlZCIpOworICB9CisKKyAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIEdzdEZsb3dSZXR1cm4KK2dzdF9vdXRwdXRfc2VsZWN0b3JfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0QnVmZmVyICogYnVmKQoreworICBHc3RGbG93UmV0dXJuIHJlczsKKyAgR3N0T3V0cHV0U2VsZWN0b3IgKm9zZWw7CisgIEdzdENsb2NrVGltZSBwb3NpdGlvbiwgZHVyYXRpb247CisKKyAgb3NlbCA9IEdTVF9PVVRQVVRfU0VMRUNUT1IgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7CisKKyAgLyoKKyAgICogVGhlIF9zd2l0Y2ggZnVuY3Rpb24gbWlnaHQgcHVzaCBhIGJ1ZmZlciBpZiAncmVzZW5kLWxhdGVzdCcgaXMgdHJ1ZS4KKyAgICoKKyAgICogRWxlbWVudHMvQXBwbGljYXRpb25zIChlLmcuIGNhbWVyYWJpbikgbWlnaHQgdXNlIHBhZCBwcm9iZXMgdG8KKyAgICogc3dpdGNoIG91dHB1dC1zZWxlY3RvcidzIGFjdGl2ZSBwYWQuIElmIHdlIHNpbXBseSBzd2l0Y2ggYW5kIGRvbid0CisgICAqIHJlY2hlY2sgYW55IHBlbmRpbmcgcGFkIHN3aXRjaCB0aGUgZm9sbG93aW5nIGNvZGVwYXRoIGNvdWxkIGVuZAorICAgKiB1cCBwdXNoaW5nIGEgYnVmZmVyIG9uIGEgbm9uLWFjdGl2ZSBwYWQuIFRoaXMgaXMgYmFkLgorICAgKgorICAgKiBTbyB3ZSBhbHdheXMgc2hvdWxkIGNoZWNrIHRoZSBwZW5kaW5nX3NyY3BhZCBiZWZvcmUgZ29pbmcgZnVydGhlciBkb3duCisgICAqIHRoZSBjaGFpbiBhbmQgcHVzaGluZyB0aGUgbmV3IGJ1ZmZlcgorICAgKi8KKyAgd2hpbGUgKG9zZWwtPnBlbmRpbmdfc3JjcGFkKSB7CisgICAgLyogRG8gdGhlIHN3aXRjaCAqLworICAgIGdzdF9vdXRwdXRfc2VsZWN0b3Jfc3dpdGNoIChvc2VsKTsKKyAgfQorCisgIGlmIChvc2VsLT5sYXRlc3RfYnVmZmVyKSB7CisgICAgZ3N0X2J1ZmZlcl91bnJlZiAob3NlbC0+bGF0ZXN0X2J1ZmZlcik7CisgICAgb3NlbC0+bGF0ZXN0X2J1ZmZlciA9IE5VTEw7CisgIH0KKworICBpZiAob3NlbC0+cmVzZW5kX2xhdGVzdCkgeworICAgIC8qIEtlZXAgcmVmZXJlbmNlIHRvIGxhdGVzdCBidWZmZXIgdG8gcmVzZW5kIGl0IGFmdGVyIHN3aXRjaCAqLworICAgIG9zZWwtPmxhdGVzdF9idWZmZXIgPSBnc3RfYnVmZmVyX3JlZiAoYnVmKTsKKyAgfQorCisgIC8qIEtlZXAgdHJhY2sgb2YgbGFzdCBzdG9wIGFuZCB1c2UgaXQgaW4gTkVXU0VHTUVOVCBzdGFydCBhZnRlciAKKyAgICAgc3dpdGNoaW5nIHRvIGEgbmV3IHNyYyBwYWQgKi8KKyAgcG9zaXRpb24gPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKTsKKyAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChwb3NpdGlvbikpIHsKKyAgICBkdXJhdGlvbiA9IEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1Zik7CisgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChkdXJhdGlvbikpIHsKKyAgICAgIHBvc2l0aW9uICs9IGR1cmF0aW9uOworICAgIH0KKyAgICBHU1RfTE9HX09CSkVDVCAob3NlbCwgInNldHRpbmcgbGFzdCBzdG9wICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgICAgR1NUX1RJTUVfQVJHUyAocG9zaXRpb24pKTsKKyAgICBvc2VsLT5zZWdtZW50LnBvc2l0aW9uID0gcG9zaXRpb247CisgIH0KKworICBHU1RfTE9HX09CSkVDVCAob3NlbCwgInB1c2hpbmcgYnVmZmVyIHRvICUiIEdTVF9QVFJfRk9STUFULAorICAgICAgb3NlbC0+YWN0aXZlX3NyY3BhZCk7CisgIHJlcyA9IGdzdF9wYWRfcHVzaCAob3NlbC0+YWN0aXZlX3NyY3BhZCwgYnVmKTsKKyAgZ3N0X29iamVjdF91bnJlZiAob3NlbCk7CisKKyAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCitnc3Rfb3V0cHV0X3NlbGVjdG9yX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCisgICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKK3sKKyAgR3N0T3V0cHV0U2VsZWN0b3IgKnNlbDsKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmVzdWx0OworCisgIHNlbCA9IEdTVF9PVVRQVVRfU0VMRUNUT1IgKGVsZW1lbnQpOworCisgIHN3aXRjaCAodHJhbnNpdGlvbikgeworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKworICByZXN1bHQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKKworICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgorICAgICAgZ3N0X291dHB1dF9zZWxlY3Rvcl9yZXNldCAoc2VsKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X291dHB1dF9zZWxlY3Rvcl9oYW5kbGVfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KQoreworICBnYm9vbGVhbiByZXMgPSBUUlVFOworICBHc3RPdXRwdXRTZWxlY3RvciAqc2VsOworICBHc3RQYWQgKmFjdGl2ZSA9IE5VTEw7CisKKyAgc2VsID0gR1NUX09VVFBVVF9TRUxFQ1RPUiAoZ3N0X3BhZF9nZXRfcGFyZW50IChwYWQpKTsKKyAgaWYgKEdfVU5MSUtFTFkgKHNlbCA9PSBOVUxMKSkgeworICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorCisgIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgeworICAgIGNhc2UgR1NUX0VWRU5UX0NBUFM6CisgICAgeworICAgICAgc3dpdGNoIChzZWwtPnBhZF9uZWdvdGlhdGlvbl9tb2RlKSB7CisgICAgICAgIGNhc2UgR1NUX09VVFBVVF9TRUxFQ1RPUl9QQURfTkVHT1RJQVRJT05fTU9ERV9BTEw6CisgICAgICAgICAgLyogU2VuZCBjYXBzIHRvIGFsbCBzcmMgcGFkcyAqLworICAgICAgICAgIHJlcyA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBldmVudCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR1NUX09VVFBVVF9TRUxFQ1RPUl9QQURfTkVHT1RJQVRJT05fTU9ERV9OT05FOgorICAgICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc2VsKTsKKyAgICAgICAgICBpZiAoc2VsLT5wZW5kaW5nX3NyY3BhZCkKKyAgICAgICAgICAgIGFjdGl2ZSA9IGdzdF9vYmplY3RfcmVmIChzZWwtPnBlbmRpbmdfc3JjcGFkKTsKKyAgICAgICAgICBlbHNlIGlmIChzZWwtPmFjdGl2ZV9zcmNwYWQpCisgICAgICAgICAgICBhY3RpdmUgPSBnc3Rfb2JqZWN0X3JlZiAoc2VsLT5hY3RpdmVfc3JjcGFkKTsKKyAgICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc2VsKTsKKworICAgICAgICAgIGlmIChhY3RpdmUpIHsKKyAgICAgICAgICAgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAoYWN0aXZlLCBldmVudCk7CisgICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChhY3RpdmUpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVDoKKyAgICB7CisgICAgICBnc3RfZXZlbnRfY29weV9zZWdtZW50IChldmVudCwgJnNlbC0+c2VnbWVudCk7CisKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbCwgImNvbmZpZ3VyZWQgU0VHTUVOVCAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsCisgICAgICAgICAgJnNlbC0+c2VnbWVudCk7CisKKyAgICAgIC8qIFNlbmQgbmV3c2VnbWVudCB0byBhbGwgc3JjIHBhZHMgKi8KKyAgICAgIHJlcyA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBldmVudCk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfRVZFTlRfRU9TOgorICAgICAgLyogU2VuZCBlb3MgdG8gYWxsIHNyYyBwYWRzICovCisgICAgICByZXMgPSBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgZXZlbnQpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICB7CisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHNlbCk7CisgICAgICBpZiAoc2VsLT5wZW5kaW5nX3NyY3BhZCkKKyAgICAgICAgYWN0aXZlID0gZ3N0X29iamVjdF9yZWYgKHNlbC0+cGVuZGluZ19zcmNwYWQpOworICAgICAgZWxzZSBpZiAoc2VsLT5hY3RpdmVfc3JjcGFkKQorICAgICAgICBhY3RpdmUgPSBnc3Rfb2JqZWN0X3JlZiAoc2VsLT5hY3RpdmVfc3JjcGFkKTsKKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzZWwpOworCisgICAgICAvKiBTZW5kIG90aGVyIGV2ZW50cyB0byBwZW5kaW5nIG9yIGFjdGl2ZSBzcmMgcGFkICovCisgICAgICBpZiAoYWN0aXZlKSB7CisgICAgICAgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAoYWN0aXZlLCBldmVudCk7CisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGFjdGl2ZSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIGdzdF9vYmplY3RfdW5yZWYgKHNlbCk7CisKKyAgcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuaCBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzU1YjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5oCkBAIC0wLDAgKzEsNjggQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uLiAoY29udGFjdCA8c3RlZmFuLmtvc3RAbm9raWEuY29tPikKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworIAorI2lmbmRlZiBfX0dTVF9PVVRQVVRfU0VMRUNUT1JfSF9fCisjZGVmaW5lIF9fR1NUX09VVFBVVF9TRUxFQ1RPUl9IX18KKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEdTVF9UWVBFX09VVFBVVF9TRUxFQ1RPUiBcCisgIChnc3Rfb3V0cHV0X3NlbGVjdG9yX2dldF90eXBlKCkpCisjZGVmaW5lIEdTVF9PVVRQVVRfU0VMRUNUT1Iob2JqKSBcCisgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX09VVFBVVF9TRUxFQ1RPUiwgR3N0T3V0cHV0U2VsZWN0b3IpKQorI2RlZmluZSBHU1RfT1VUUFVUX1NFTEVDVE9SX0NMQVNTKGtsYXNzKSBcCisgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfT1VUUFVUX1NFTEVDVE9SLCBHc3RPdXRwdXRTZWxlY3RvckNsYXNzKSkKKyNkZWZpbmUgR1NUX0lTX09VVFBVVF9TRUxFQ1RPUihvYmopIFwKKyAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfT1VUUFVUX1NFTEVDVE9SKSkKKyNkZWZpbmUgR1NUX0lTX09VVFBVVF9TRUxFQ1RPUl9DTEFTUyhrbGFzcykgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX09VVFBVVF9TRUxFQ1RPUikpCisKK3R5cGVkZWYgc3RydWN0IF9Hc3RPdXRwdXRTZWxlY3RvciBHc3RPdXRwdXRTZWxlY3RvcjsKK3R5cGVkZWYgc3RydWN0IF9Hc3RPdXRwdXRTZWxlY3RvckNsYXNzIEdzdE91dHB1dFNlbGVjdG9yQ2xhc3M7CisKK3N0cnVjdCBfR3N0T3V0cHV0U2VsZWN0b3IgeworICBHc3RFbGVtZW50IGVsZW1lbnQ7CisKKyAgR3N0UGFkICpzaW5rcGFkOworCisgIEdzdFBhZCAqYWN0aXZlX3NyY3BhZDsKKyAgR3N0UGFkICpwZW5kaW5nX3NyY3BhZDsKKyAgZ3VpbnQgbmJfc3JjcGFkczsKKworICBnaW50IHBhZF9uZWdvdGlhdGlvbl9tb2RlOworCisgIEdzdFNlZ21lbnQgc2VnbWVudDsKKworICAvKiByZXNlbmQgbGF0ZXN0IGJ1ZmZlciBhZnRlciBzd2l0Y2ggKi8KKyAgZ2Jvb2xlYW4gcmVzZW5kX2xhdGVzdDsKKyAgR3N0QnVmZmVyICpsYXRlc3RfYnVmZmVyOworCit9OworCitzdHJ1Y3QgX0dzdE91dHB1dFNlbGVjdG9yQ2xhc3MgeworICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworR1R5cGUgZ3N0X291dHB1dF9zZWxlY3Rvcl9nZXRfdHlwZSAodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0dTVF9PVVRQVVRfU0VMRUNUT1JfSF9fICovCmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmMgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTljY2Y4ZgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYwpAQCAtMCwwICsxLDE1MzkgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDAzIENvbGluIFdhbHRlcnMgPGN3YWx0ZXJzQGdub21lLm9yZz4KKyAqICAgICAgICAgICAgICAgICAgICAyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+CisgKgorICogZ3N0cXVldWUuYzoKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKioKKyAqIFNFQ1RJT046ZWxlbWVudC1xdWV1ZQorICoKKyAqIERhdGEgaXMgcXVldWVkIHVudGlsIG9uZSBvZiB0aGUgbGltaXRzIHNwZWNpZmllZCBieSB0aGUKKyAqICNHc3RRdWV1ZTptYXgtc2l6ZS1idWZmZXJzLCAjR3N0UXVldWU6bWF4LXNpemUtYnl0ZXMgYW5kL29yCisgKiAjR3N0UXVldWU6bWF4LXNpemUtdGltZSBwcm9wZXJ0aWVzIGhhcyBiZWVuIHJlYWNoZWQuIEFueSBhdHRlbXB0IHRvIHB1c2gKKyAqIG1vcmUgYnVmZmVycyBpbnRvIHRoZSBxdWV1ZSB3aWxsIGJsb2NrIHRoZSBwdXNoaW5nIHRocmVhZCB1bnRpbCBtb3JlIHNwYWNlCisgKiBiZWNvbWVzIGF2YWlsYWJsZS4KKyAqCisgKiBUaGUgcXVldWUgd2lsbCBjcmVhdGUgYSBuZXcgdGhyZWFkIG9uIHRoZSBzb3VyY2UgcGFkIHRvIGRlY291cGxlIHRoZQorICogcHJvY2Vzc2luZyBvbiBzaW5rIGFuZCBzb3VyY2UgcGFkLgorICoKKyAqIFlvdSBjYW4gcXVlcnkgaG93IG1hbnkgYnVmZmVycyBhcmUgcXVldWVkIGJ5IHJlYWRpbmcgdGhlCisgKiAjR3N0UXVldWU6Y3VycmVudC1sZXZlbC1idWZmZXJzIHByb3BlcnR5LiBZb3UgY2FuIHRyYWNrIGNoYW5nZXMKKyAqIGJ5IGNvbm5lY3RpbmcgdG8gdGhlIG5vdGlmeTo6Y3VycmVudC1sZXZlbC1idWZmZXJzIHNpZ25hbCAod2hpY2gKKyAqIGxpa2UgYWxsIHNpZ25hbHMgd2lsbCBiZSBlbWl0dGVkIGZyb20gdGhlIHN0cmVhbWluZyB0aHJlYWQpLiBUaGUgc2FtZQorICogYXBwbGllcyB0byB0aGUgI0dzdFF1ZXVlOmN1cnJlbnQtbGV2ZWwtdGltZSBhbmQKKyAqICNHc3RRdWV1ZTpjdXJyZW50LWxldmVsLWJ5dGVzIHByb3BlcnRpZXMuCisgKgorICogVGhlIGRlZmF1bHQgcXVldWUgc2l6ZSBsaW1pdHMgYXJlIDIwMCBidWZmZXJzLCAxME1CIG9mIGRhdGEsIG9yCisgKiBvbmUgc2Vjb25kIHdvcnRoIG9mIGRhdGEsIHdoaWNoZXZlciBpcyByZWFjaGVkIGZpcnN0LgorICoKKyAqIEFzIHNhaWQgZWFybGllciwgdGhlIHF1ZXVlIGJsb2NrcyBieSBkZWZhdWx0IHdoZW4gb25lIG9mIHRoZSBzcGVjaWZpZWQKKyAqIG1heGltdW1zIChieXRlcywgdGltZSwgYnVmZmVycykgaGFzIGJlZW4gcmVhY2hlZC4gWW91IGNhbiBzZXQgdGhlCisgKiAjR3N0UXVldWU6bGVha3kgcHJvcGVydHkgdG8gc3BlY2lmeSB0aGF0IGluc3RlYWQgb2YgYmxvY2tpbmcgaXQgc2hvdWxkCisgKiBsZWFrIChkcm9wKSBuZXcgb3Igb2xkIGJ1ZmZlcnMuCisgKgorICogVGhlICNHc3RRdWV1ZTo6dW5kZXJydW4gc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiB0aGUgcXVldWUgaGFzIGxlc3MgZGF0YSB0aGFuCisgKiB0aGUgc3BlY2lmaWVkIG1pbmltdW0gdGhyZXNob2xkcyByZXF1aXJlIChieSBkZWZhdWx0OiB3aGVuIHRoZSBxdWV1ZSBpcworICogZW1wdHkpLiBUaGUgI0dzdFF1ZXVlOjpvdmVycnVuIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gdGhlIHF1ZXVlIGlzIGZpbGxlZAorICogdXAuIEJvdGggc2lnbmFscyBhcmUgZW1pdHRlZCBmcm9tIHRoZSBjb250ZXh0IG9mIHRoZSBzdHJlYW1pbmcgdGhyZWFkLgorICovCisKKyNpbmNsdWRlICJnc3QvZ3N0X3ByaXZhdGUuaCIKKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlICJnc3RxdWV1ZS5oIgorCisjaW5jbHVkZSAiLi4vLi4vZ3N0L2dzdC1pMThuLWxpYi5oIgorCitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKKyAgICBHU1RfUEFEX1NJTkssCisgICAgR1NUX1BBRF9BTFdBWVMsCisgICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7CisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKKyAgICBHU1RfUEFEX1NSQywKKyAgICBHU1RfUEFEX0FMV0FZUywKKyAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKKworR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocXVldWVfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKHF1ZXVlX2RlYnVnKQorR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocXVldWVfZGF0YWZsb3cpOworCisjZGVmaW5lIFNUQVRVUyhxdWV1ZSwgcGFkLCBtc2cpIFwKKyAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAiKCVzOiVzKSAiIG1zZyAiOiAldSBvZiAldS0ldSBidWZmZXJzLCAldSBvZiAldS0ldSAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAiYnl0ZXMsICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBvZiAlIiBHX0dVSU5UNjRfRk9STUFUIFwKKyAgICAgICAgICAgICAgICAgICAgICAiLSUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBucywgJXUgaXRlbXMiLCBcCisgICAgICAgICAgICAgICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgcXVldWUtPmN1cl9sZXZlbC5idWZmZXJzLCBcCisgICAgICAgICAgICAgICAgICAgICAgcXVldWUtPm1pbl90aHJlc2hvbGQuYnVmZmVycywgXAorICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLT5tYXhfc2l6ZS5idWZmZXJzLCBcCisgICAgICAgICAgICAgICAgICAgICAgcXVldWUtPmN1cl9sZXZlbC5ieXRlcywgXAorICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLT5taW5fdGhyZXNob2xkLmJ5dGVzLCBcCisgICAgICAgICAgICAgICAgICAgICAgcXVldWUtPm1heF9zaXplLmJ5dGVzLCBcCisgICAgICAgICAgICAgICAgICAgICAgcXVldWUtPmN1cl9sZXZlbC50aW1lLCBcCisgICAgICAgICAgICAgICAgICAgICAgcXVldWUtPm1pbl90aHJlc2hvbGQudGltZSwgXAorICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLT5tYXhfc2l6ZS50aW1lLCBcCisgICAgICAgICAgICAgICAgICAgICAgcXVldWUtPnF1ZXVlLT5sZW5ndGgpCisKKy8qIFF1ZXVlIHNpZ25hbHMgYW5kIGFyZ3MgKi8KK2VudW0KK3sKKyAgU0lHTkFMX1VOREVSUlVOLAorICBTSUdOQUxfUlVOTklORywKKyAgU0lHTkFMX09WRVJSVU4sCisgIFNJR05BTF9QVVNISU5HLAorICBMQVNUX1NJR05BTAorfTsKKworZW51bQoreworICBQUk9QXzAsCisgIC8qIEZJWE1FOiBkb24ndCB3ZSBoYXZlIGFub3RoZXIgd2F5IG9mIGRvaW5nIHRoaXMKKyAgICogIkdzdHJlYW1lciBmb3JtYXQiIChmcmFtZS9ieXRlL3RpbWUpIHF1ZXJpZXM/ICovCisgIFBST1BfQ1VSX0xFVkVMX0JVRkZFUlMsCisgIFBST1BfQ1VSX0xFVkVMX0JZVEVTLAorICBQUk9QX0NVUl9MRVZFTF9USU1FLAorICBQUk9QX01BWF9TSVpFX0JVRkZFUlMsCisgIFBST1BfTUFYX1NJWkVfQllURVMsCisgIFBST1BfTUFYX1NJWkVfVElNRSwKKyAgUFJPUF9NSU5fVEhSRVNIT0xEX0JVRkZFUlMsCisgIFBST1BfTUlOX1RIUkVTSE9MRF9CWVRFUywKKyAgUFJPUF9NSU5fVEhSRVNIT0xEX1RJTUUsCisgIFBST1BfTEVBS1ksCisgIFBST1BfU0lMRU5UCit9OworCisvKiBkZWZhdWx0IHByb3BlcnR5IHZhbHVlcyAqLworI2RlZmluZSBERUZBVUxUX01BWF9TSVpFX0JVRkZFUlMgIDIwMCAgIC8qIDIwMCBidWZmZXJzICovCisjZGVmaW5lIERFRkFVTFRfTUFYX1NJWkVfQllURVMgICAgKDEwICogMTAyNCAqIDEwMjQpICAgIC8qIDEwIE1CICAgICAgICovCisjZGVmaW5lIERFRkFVTFRfTUFYX1NJWkVfVElNRSAgICAgR1NUX1NFQ09ORCAgICAvKiAxIHNlY29uZCAgICAqLworCisjZGVmaW5lIEdTVF9RVUVVRV9NVVRFWF9MT0NLKHEpIEdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGdfbXV0ZXhfbG9jayAocS0+cWxvY2spOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IEdfU1RNVF9FTkQKKworI2RlZmluZSBHU1RfUVVFVUVfTVVURVhfTE9DS19DSEVDSyhxLGxhYmVsKSBHX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgXAorICBHU1RfUVVFVUVfTVVURVhfTE9DSyAocSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAocS0+c3JjcmVzdWx0ICE9IEdTVF9GTE9XX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdvdG8gbGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSBHX1NUTVRfRU5ECisKKyNkZWZpbmUgR1NUX1FVRVVFX01VVEVYX1VOTE9DSyhxKSBHX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZ19tdXRleF91bmxvY2sgKHEtPnFsb2NrKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gR19TVE1UX0VORAorCisjZGVmaW5lIEdTVF9RVUVVRV9XQUlUX0RFTF9DSEVDSyhxLCBsYWJlbCkgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICBcCisgIFNUQVRVUyAocSwgcS0+c2lua3BhZCwgIndhaXQgZm9yIERFTCIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHEtPndhaXRpbmdfZGVsID0gVFJVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGdfY29uZF93YWl0IChxLT5pdGVtX2RlbCwgcS0+cWxvY2spOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHEtPndhaXRpbmdfZGVsID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmIChxLT5zcmNyZXN1bHQgIT0gR1NUX0ZMT1dfT0spIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgU1RBVFVTIChxLCBxLT5zcmNwYWQsICJyZWNlaXZlZCBERUwgd2FrZXVwIik7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ290byBsYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIFNUQVRVUyAocSwgcS0+c2lua3BhZCwgInJlY2VpdmVkIERFTCIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IEdfU1RNVF9FTkQKKworI2RlZmluZSBHU1RfUVVFVUVfV0FJVF9BRERfQ0hFQ0socSwgbGFiZWwpIEdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgXAorICBTVEFUVVMgKHEsIHEtPnNyY3BhZCwgIndhaXQgZm9yIEFERCIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBxLT53YWl0aW5nX2FkZCA9IFRSVUU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBnX2NvbmRfd2FpdCAocS0+aXRlbV9hZGQsIHEtPnFsb2NrKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBxLT53YWl0aW5nX2FkZCA9IEZBTFNFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAocS0+c3JjcmVzdWx0ICE9IEdTVF9GTE9XX09LKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFNUQVRVUyAocSwgcS0+c3JjcGFkLCAicmVjZWl2ZWQgQUREIHdha2V1cCIpOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdvdG8gbGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBTVEFUVVMgKHEsIHEtPnNyY3BhZCwgInJlY2VpdmVkIEFERCIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSBHX1NUTVRfRU5ECisKKyNkZWZpbmUgR1NUX1FVRVVFX1NJR05BTF9ERUwocSkgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYgKHEtPndhaXRpbmdfZGVsKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBTVEFUVVMgKHEsIHEtPnNyY3BhZCwgInNpZ25hbCBERUwiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnX2NvbmRfc2lnbmFsIChxLT5pdGVtX2RlbCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gR19TVE1UX0VORAorCisjZGVmaW5lIEdTVF9RVUVVRV9TSUdOQUxfQUREKHEpIEdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmIChxLT53YWl0aW5nX2FkZCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgU1RBVFVTIChxLCBxLT5zaW5rcGFkLCAic2lnbmFsIEFERCIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ19jb25kX3NpZ25hbCAocS0+aXRlbV9hZGQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IEdfU1RNVF9FTkQKKworI2RlZmluZSBfZG9faW5pdCBcCisgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHF1ZXVlX2RlYnVnLCAicXVldWUiLCAwLCAicXVldWUgZWxlbWVudCIpOyBcCisgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHF1ZXVlX2RhdGFmbG93LCAicXVldWVfZGF0YWZsb3ciLCAwLCBcCisgICAgICAgICJkYXRhZmxvdyBpbnNpZGUgdGhlIHF1ZXVlIGVsZW1lbnQiKTsKKyNkZWZpbmUgZ3N0X3F1ZXVlX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RRdWV1ZSwgZ3N0X3F1ZXVlLCBHU1RfVFlQRV9FTEVNRU5ULCBfZG9faW5pdCk7CisKK3N0YXRpYyB2b2lkIGdzdF9xdWV1ZV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7CisKK3N0YXRpYyB2b2lkIGdzdF9xdWV1ZV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCisgICAgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7CitzdGF0aWMgdm9pZCBnc3RfcXVldWVfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAorICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOworCitzdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcXVldWVfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0QnVmZmVyICogYnVmZmVyKTsKK3N0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9xdWV1ZV9wdXNoX29uZSAoR3N0UXVldWUgKiBxdWV1ZSk7CitzdGF0aWMgdm9pZCBnc3RfcXVldWVfbG9vcCAoR3N0UGFkICogcGFkKTsKKworc3RhdGljIGdib29sZWFuIGdzdF9xdWV1ZV9oYW5kbGVfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KTsKKworc3RhdGljIGdib29sZWFuIGdzdF9xdWV1ZV9oYW5kbGVfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpOworc3RhdGljIGdib29sZWFuIGdzdF9xdWV1ZV9oYW5kbGVfc3JjX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdFF1ZXJ5ICogcXVlcnkpOworCitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X3F1ZXVlX2FjY2VwdGNhcHMgKEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGNhcHMpOworc3RhdGljIEdzdENhcHMgKmdzdF9xdWV1ZV9nZXRjYXBzIChHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBmaWx0ZXIpOworc3RhdGljIEdzdFBhZExpbmtSZXR1cm4gZ3N0X3F1ZXVlX2xpbmtfc2luayAoR3N0UGFkICogcGFkLCBHc3RQYWQgKiBwZWVyKTsKK3N0YXRpYyBHc3RQYWRMaW5rUmV0dXJuIGdzdF9xdWV1ZV9saW5rX3NyYyAoR3N0UGFkICogcGFkLCBHc3RQYWQgKiBwZWVyKTsKK3N0YXRpYyB2b2lkIGdzdF9xdWV1ZV9sb2NrZWRfZmx1c2ggKEdzdFF1ZXVlICogcXVldWUpOworCitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X3F1ZXVlX3NyY19hY3RpdmF0ZV9wdXNoIChHc3RQYWQgKiBwYWQsIGdib29sZWFuIGFjdGl2ZSk7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X3F1ZXVlX3NpbmtfYWN0aXZhdGVfcHVzaCAoR3N0UGFkICogcGFkLCBnYm9vbGVhbiBhY3RpdmUpOworCitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X3F1ZXVlX2lzX2VtcHR5IChHc3RRdWV1ZSAqIHF1ZXVlKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfcXVldWVfaXNfZmlsbGVkIChHc3RRdWV1ZSAqIHF1ZXVlKTsKKworI2RlZmluZSBHU1RfVFlQRV9RVUVVRV9MRUFLWSAocXVldWVfbGVha3lfZ2V0X3R5cGUgKCkpCisKK3N0YXRpYyBHVHlwZQorcXVldWVfbGVha3lfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBHVHlwZSBxdWV1ZV9sZWFreV90eXBlID0gMDsKKyAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgcXVldWVfbGVha3lbXSA9IHsKKyAgICB7R1NUX1FVRVVFX05PX0xFQUssICJOb3QgTGVha3kiLCAibm8ifSwKKyAgICB7R1NUX1FVRVVFX0xFQUtfVVBTVFJFQU0sICJMZWFreSBvbiB1cHN0cmVhbSAobmV3IGJ1ZmZlcnMpIiwgInVwc3RyZWFtIn0sCisgICAge0dTVF9RVUVVRV9MRUFLX0RPV05TVFJFQU0sICJMZWFreSBvbiBkb3duc3RyZWFtIChvbGQgYnVmZmVycykiLAorICAgICAgICAiZG93bnN0cmVhbSJ9LAorICAgIHswLCBOVUxMLCBOVUxMfSwKKyAgfTsKKworICBpZiAoIXF1ZXVlX2xlYWt5X3R5cGUpIHsKKyAgICBxdWV1ZV9sZWFreV90eXBlID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFF1ZXVlTGVha3kiLCBxdWV1ZV9sZWFreSk7CisgIH0KKyAgcmV0dXJuIHF1ZXVlX2xlYWt5X3R5cGU7Cit9CisKK3N0YXRpYyBndWludCBnc3RfcXVldWVfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKKworc3RhdGljIHZvaWQKK2dzdF9xdWV1ZV9jbGFzc19pbml0IChHc3RRdWV1ZUNsYXNzICoga2xhc3MpCit7CisgIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7CisgIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7CisKKyAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3F1ZXVlX3NldF9wcm9wZXJ0eTsKKyAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3F1ZXVlX2dldF9wcm9wZXJ0eTsKKworICAvKiBzaWduYWxzICovCisgIC8qKgorICAgKiBHc3RRdWV1ZTo6dW5kZXJydW46CisgICAqIEBxdWV1ZTogdGhlIHF1ZXVlIGluc3RhbmNlCisgICAqCisgICAqIFJlcG9ydHMgdGhhdCB0aGUgYnVmZmVyIGJlY2FtZSBlbXB0eSAodW5kZXJydW4pLgorICAgKiBBIGJ1ZmZlciBpcyBlbXB0eSBpZiB0aGUgdG90YWwgYW1vdW50IG9mIGRhdGEgaW5zaWRlIGl0IChudW0tYnVmZmVycywgdGltZSwKKyAgICogc2l6ZSkgaXMgbG93ZXIgdGhhbiB0aGUgYm91bmRhcnkgdmFsdWVzIHdoaWNoIGNhbiBiZSBzZXQgdGhyb3VnaCB0aGUKKyAgICogR09iamVjdCBwcm9wZXJ0aWVzLgorICAgKi8KKyAgZ3N0X3F1ZXVlX3NpZ25hbHNbU0lHTkFMX1VOREVSUlVOXSA9CisgICAgICBnX3NpZ25hbF9uZXcgKCJ1bmRlcnJ1biIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksIEdfU0lHTkFMX1JVTl9GSVJTVCwKKyAgICAgIEdfU1RSVUNUX09GRlNFVCAoR3N0UXVldWVDbGFzcywgdW5kZXJydW4pLCBOVUxMLCBOVUxMLAorICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsIEdfVFlQRV9OT05FLCAwKTsKKyAgLyoqCisgICAqIEdzdFF1ZXVlOjpydW5uaW5nOgorICAgKiBAcXVldWU6IHRoZSBxdWV1ZSBpbnN0YW5jZQorICAgKgorICAgKiBSZXBvcnRzIHRoYXQgZW5vdWdoIChtaW4tdGhyZXNob2xkKSBkYXRhIGlzIGluIHRoZSBxdWV1ZS4gVXNlIHRoaXMgc2lnbmFsCisgICAqIHRvZ2V0aGVyIHdpdGggdGhlIHVuZGVycnVuIHNpZ25hbCB0byBwYXVzZSB0aGUgcGlwZWxpbmUgb24gdW5kZXJydW4gYW5kCisgICAqIHdhaXQgZm9yIHRoZSBxdWV1ZSB0byBmaWxsLXVwIGJlZm9yZSByZXN1bWUgcGxheWJhY2suCisgICAqLworICBnc3RfcXVldWVfc2lnbmFsc1tTSUdOQUxfUlVOTklOR10gPQorICAgICAgZ19zaWduYWxfbmV3ICgicnVubmluZyIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksIEdfU0lHTkFMX1JVTl9GSVJTVCwKKyAgICAgIEdfU1RSVUNUX09GRlNFVCAoR3N0UXVldWVDbGFzcywgcnVubmluZyksIE5VTEwsIE5VTEwsCisgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwgR19UWVBFX05PTkUsIDApOworICAvKioKKyAgICogR3N0UXVldWU6Om92ZXJydW46CisgICAqIEBxdWV1ZTogdGhlIHF1ZXVlIGluc3RhbmNlCisgICAqCisgICAqIFJlcG9ydHMgdGhhdCB0aGUgYnVmZmVyIGJlY2FtZSBmdWxsIChvdmVycnVuKS4KKyAgICogQSBidWZmZXIgaXMgZnVsbCBpZiB0aGUgdG90YWwgYW1vdW50IG9mIGRhdGEgaW5zaWRlIGl0IChudW0tYnVmZmVycywgdGltZSwKKyAgICogc2l6ZSkgaXMgaGlnaGVyIHRoYW4gdGhlIGJvdW5kYXJ5IHZhbHVlcyB3aGljaCBjYW4gYmUgc2V0IHRocm91Z2ggdGhlCisgICAqIEdPYmplY3QgcHJvcGVydGllcy4KKyAgICovCisgIGdzdF9xdWV1ZV9zaWduYWxzW1NJR05BTF9PVkVSUlVOXSA9CisgICAgICBnX3NpZ25hbF9uZXcgKCJvdmVycnVuIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwgR19TSUdOQUxfUlVOX0ZJUlNULAorICAgICAgR19TVFJVQ1RfT0ZGU0VUIChHc3RRdWV1ZUNsYXNzLCBvdmVycnVuKSwgTlVMTCwgTlVMTCwKKyAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELCBHX1RZUEVfTk9ORSwgMCk7CisgIC8qKgorICAgKiBHc3RRdWV1ZTo6cHVzaGluZzoKKyAgICogQHF1ZXVlOiB0aGUgcXVldWUgaW5zdGFuY2UKKyAgICoKKyAgICogUmVwb3J0cyB3aGVuIHRoZSBxdWV1ZSBoYXMgZW5vdWdoIGRhdGEgdG8gc3RhcnQgcHVzaGluZyBkYXRhIGFnYWluIG9uIHRoZQorICAgKiBzb3VyY2UgcGFkLgorICAgKi8KKyAgZ3N0X3F1ZXVlX3NpZ25hbHNbU0lHTkFMX1BVU0hJTkddID0KKyAgICAgIGdfc2lnbmFsX25ldyAoInB1c2hpbmciLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLCBHX1NJR05BTF9SVU5fRklSU1QsCisgICAgICBHX1NUUlVDVF9PRkZTRVQgKEdzdFF1ZXVlQ2xhc3MsIHB1c2hpbmcpLCBOVUxMLCBOVUxMLAorICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsIEdfVFlQRV9OT05FLCAwKTsKKworICAvKiBwcm9wZXJ0aWVzICovCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ1VSX0xFVkVMX0JZVEVTLAorICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJjdXJyZW50LWxldmVsLWJ5dGVzIiwgIkN1cnJlbnQgbGV2ZWwgKGtCKSIsCisgICAgICAgICAgIkN1cnJlbnQgYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIChieXRlcykiLAorICAgICAgICAgIDAsIEdfTUFYVUlOVCwgMCwgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DVVJfTEVWRUxfQlVGRkVSUywKKyAgICAgIGdfcGFyYW1fc3BlY191aW50ICgiY3VycmVudC1sZXZlbC1idWZmZXJzIiwgIkN1cnJlbnQgbGV2ZWwgKGJ1ZmZlcnMpIiwKKyAgICAgICAgICAiQ3VycmVudCBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgcXVldWUiLAorICAgICAgICAgIDAsIEdfTUFYVUlOVCwgMCwgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DVVJfTEVWRUxfVElNRSwKKyAgICAgIGdfcGFyYW1fc3BlY191aW50NjQgKCJjdXJyZW50LWxldmVsLXRpbWUiLCAiQ3VycmVudCBsZXZlbCAobnMpIiwKKyAgICAgICAgICAiQ3VycmVudCBhbW91bnQgb2YgZGF0YSBpbiB0aGUgcXVldWUgKGluIG5zKSIsCisgICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAsIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NQVhfU0laRV9CWVRFUywKKyAgICAgIGdfcGFyYW1fc3BlY191aW50ICgibWF4LXNpemUtYnl0ZXMiLCAiTWF4LiBzaXplIChrQikiLAorICAgICAgICAgICJNYXguIGFtb3VudCBvZiBkYXRhIGluIHRoZSBxdWV1ZSAoYnl0ZXMsIDA9ZGlzYWJsZSkiLAorICAgICAgICAgIDAsIEdfTUFYVUlOVCwgREVGQVVMVF9NQVhfU0laRV9CWVRFUywKKyAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NQVhfU0laRV9CVUZGRVJTLAorICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJtYXgtc2l6ZS1idWZmZXJzIiwgIk1heC4gc2l6ZSAoYnVmZmVycykiLAorICAgICAgICAgICJNYXguIG51bWJlciBvZiBidWZmZXJzIGluIHRoZSBxdWV1ZSAoMD1kaXNhYmxlKSIsIDAsIEdfTUFYVUlOVCwKKyAgICAgICAgICBERUZBVUxUX01BWF9TSVpFX0JVRkZFUlMsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTUFYX1NJWkVfVElNRSwKKyAgICAgIGdfcGFyYW1fc3BlY191aW50NjQgKCJtYXgtc2l6ZS10aW1lIiwgIk1heC4gc2l6ZSAobnMpIiwKKyAgICAgICAgICAiTWF4LiBhbW91bnQgb2YgZGF0YSBpbiB0aGUgcXVldWUgKGluIG5zLCAwPWRpc2FibGUpIiwgMCwgR19NQVhVSU5UNjQsCisgICAgICAgICAgREVGQVVMVF9NQVhfU0laRV9USU1FLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01JTl9USFJFU0hPTERfQllURVMsCisgICAgICBnX3BhcmFtX3NwZWNfdWludCAoIm1pbi10aHJlc2hvbGQtYnl0ZXMiLCAiTWluLiB0aHJlc2hvbGQgKGtCKSIsCisgICAgICAgICAgIk1pbi4gYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIHRvIGFsbG93IHJlYWRpbmcgKGJ5dGVzLCAwPWRpc2FibGUpIiwKKyAgICAgICAgICAwLCBHX01BWFVJTlQsIDAsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01JTl9USFJFU0hPTERfQlVGRkVSUywKKyAgICAgIGdfcGFyYW1fc3BlY191aW50ICgibWluLXRocmVzaG9sZC1idWZmZXJzIiwgIk1pbi4gdGhyZXNob2xkIChidWZmZXJzKSIsCisgICAgICAgICAgIk1pbi4gbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdGhlIHF1ZXVlIHRvIGFsbG93IHJlYWRpbmcgKDA9ZGlzYWJsZSkiLAorICAgICAgICAgIDAsIEdfTUFYVUlOVCwgMCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTUlOX1RIUkVTSE9MRF9USU1FLAorICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCAoIm1pbi10aHJlc2hvbGQtdGltZSIsICJNaW4uIHRocmVzaG9sZCAobnMpIiwKKyAgICAgICAgICAiTWluLiBhbW91bnQgb2YgZGF0YSBpbiB0aGUgcXVldWUgdG8gYWxsb3cgcmVhZGluZyAoaW4gbnMsIDA9ZGlzYWJsZSkiLAorICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCAwLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0xFQUtZLAorICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJsZWFreSIsICJMZWFreSIsCisgICAgICAgICAgIldoZXJlIHRoZSBxdWV1ZSBsZWFrcywgaWYgYXQgYWxsIiwKKyAgICAgICAgICBHU1RfVFlQRV9RVUVVRV9MRUFLWSwgR1NUX1FVRVVFX05PX0xFQUssCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisKKyAgLyoqCisgICAqIEdzdFF1ZXVlOnNpbGVudAorICAgKgorICAgKiBEb24ndCBlbWl0IHF1ZXVlIHNpZ25hbHMuIE1ha2VzIHF1ZXVlcyBtb3JlIGxpZ2h0d2VpZ2h0IGlmIG5vIHNpZ25hbHMgYXJlCisgICAqIG5lZWRlZC4KKyAgICoKKyAgICogU2luY2U6IDAuMTAuMzEKKyAgICovCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU0lMRU5ULAorICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJzaWxlbnQiLCAiU2lsZW50IiwKKyAgICAgICAgICAiRG9uJ3QgZW1pdCBxdWV1ZSBzaWduYWxzIiwgRkFMU0UsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisKKyAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfcXVldWVfZmluYWxpemU7CisKKyAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2ltcGxlIChnc3RlbGVtZW50X2NsYXNzLAorICAgICAgIlF1ZXVlIiwKKyAgICAgICJHZW5lcmljIiwgIlNpbXBsZSBkYXRhIHF1ZXVlIiwgIkVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Iik7CisgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCisgICAgICBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgKCZzcmN0ZW1wbGF0ZSkpOworICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAorICAgICAgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0ICgmc2lua3RlbXBsYXRlKSk7CisKKyAgLyogUmVnaXN0ZXJpbmcgZGVidWcgc3ltYm9scyBmb3IgZnVuY3Rpb24gcG9pbnRlcnMgKi8KKyAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9xdWV1ZV9jaGFpbik7CisgIEdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSIChnc3RfcXVldWVfc2lua19hY3RpdmF0ZV9wdXNoKTsKKyAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9xdWV1ZV9oYW5kbGVfc2lua19ldmVudCk7CisgIEdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSIChnc3RfcXVldWVfbGlua19zaW5rKTsKKyAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9xdWV1ZV9nZXRjYXBzKTsKKyAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9xdWV1ZV9hY2NlcHRjYXBzKTsKKyAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9xdWV1ZV9zcmNfYWN0aXZhdGVfcHVzaCk7CisgIEdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSIChnc3RfcXVldWVfbGlua19zcmMpOworICBHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUiAoZ3N0X3F1ZXVlX2hhbmRsZV9zcmNfZXZlbnQpOworICBHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUiAoZ3N0X3F1ZXVlX2hhbmRsZV9zcmNfcXVlcnkpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3F1ZXVlX2luaXQgKEdzdFF1ZXVlICogcXVldWUpCit7CisgIHF1ZXVlLT5zaW5rcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzaW5rdGVtcGxhdGUsICJzaW5rIik7CisKKyAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHF1ZXVlLT5zaW5rcGFkLCBnc3RfcXVldWVfY2hhaW4pOworICBnc3RfcGFkX3NldF9hY3RpdmF0ZXB1c2hfZnVuY3Rpb24gKHF1ZXVlLT5zaW5rcGFkLAorICAgICAgZ3N0X3F1ZXVlX3NpbmtfYWN0aXZhdGVfcHVzaCk7CisgIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChxdWV1ZS0+c2lua3BhZCwgZ3N0X3F1ZXVlX2hhbmRsZV9zaW5rX2V2ZW50KTsKKyAgZ3N0X3BhZF9zZXRfbGlua19mdW5jdGlvbiAocXVldWUtPnNpbmtwYWQsIGdzdF9xdWV1ZV9saW5rX3NpbmspOworICBnc3RfcGFkX3NldF9nZXRjYXBzX2Z1bmN0aW9uIChxdWV1ZS0+c2lua3BhZCwgZ3N0X3F1ZXVlX2dldGNhcHMpOworICBnc3RfcGFkX3NldF9hY2NlcHRjYXBzX2Z1bmN0aW9uIChxdWV1ZS0+c2lua3BhZCwgZ3N0X3F1ZXVlX2FjY2VwdGNhcHMpOworICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAocXVldWUpLCBxdWV1ZS0+c2lua3BhZCk7CisKKyAgcXVldWUtPnNyY3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc3JjdGVtcGxhdGUsICJzcmMiKTsKKworICBnc3RfcGFkX3NldF9hY3RpdmF0ZXB1c2hfZnVuY3Rpb24gKHF1ZXVlLT5zcmNwYWQsCisgICAgICBnc3RfcXVldWVfc3JjX2FjdGl2YXRlX3B1c2gpOworICBnc3RfcGFkX3NldF9saW5rX2Z1bmN0aW9uIChxdWV1ZS0+c3JjcGFkLCBnc3RfcXVldWVfbGlua19zcmMpOworICBnc3RfcGFkX3NldF9hY2NlcHRjYXBzX2Z1bmN0aW9uIChxdWV1ZS0+c3JjcGFkLCBnc3RfcXVldWVfYWNjZXB0Y2Fwcyk7CisgIGdzdF9wYWRfc2V0X2dldGNhcHNfZnVuY3Rpb24gKHF1ZXVlLT5zcmNwYWQsIGdzdF9xdWV1ZV9nZXRjYXBzKTsKKyAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHF1ZXVlLT5zcmNwYWQsIGdzdF9xdWV1ZV9oYW5kbGVfc3JjX2V2ZW50KTsKKyAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKHF1ZXVlLT5zcmNwYWQsIGdzdF9xdWV1ZV9oYW5kbGVfc3JjX3F1ZXJ5KTsKKyAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKHF1ZXVlKSwgcXVldWUtPnNyY3BhZCk7CisKKyAgR1NUX1FVRVVFX0NMRUFSX0xFVkVMIChxdWV1ZS0+Y3VyX2xldmVsKTsKKyAgcXVldWUtPm1heF9zaXplLmJ1ZmZlcnMgPSBERUZBVUxUX01BWF9TSVpFX0JVRkZFUlM7CisgIHF1ZXVlLT5tYXhfc2l6ZS5ieXRlcyA9IERFRkFVTFRfTUFYX1NJWkVfQllURVM7CisgIHF1ZXVlLT5tYXhfc2l6ZS50aW1lID0gREVGQVVMVF9NQVhfU0laRV9USU1FOworICBHU1RfUVVFVUVfQ0xFQVJfTEVWRUwgKHF1ZXVlLT5taW5fdGhyZXNob2xkKTsKKyAgR1NUX1FVRVVFX0NMRUFSX0xFVkVMIChxdWV1ZS0+b3JpZ19taW5fdGhyZXNob2xkKTsKKyAgZ3N0X3NlZ21lbnRfaW5pdCAoJnF1ZXVlLT5zaW5rX3NlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7CisgIGdzdF9zZWdtZW50X2luaXQgKCZxdWV1ZS0+c3JjX3NlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7CisgIHF1ZXVlLT5oZWFkX25lZWRzX2Rpc2NvbnQgPSBxdWV1ZS0+dGFpbF9uZWVkc19kaXNjb250ID0gRkFMU0U7CisKKyAgcXVldWUtPmxlYWt5ID0gR1NUX1FVRVVFX05PX0xFQUs7CisgIHF1ZXVlLT5zcmNyZXN1bHQgPSBHU1RfRkxPV19XUk9OR19TVEFURTsKKworICBxdWV1ZS0+cWxvY2sgPSBnX211dGV4X25ldyAoKTsKKyAgcXVldWUtPml0ZW1fYWRkID0gZ19jb25kX25ldyAoKTsKKyAgcXVldWUtPml0ZW1fZGVsID0gZ19jb25kX25ldyAoKTsKKyAgcXVldWUtPnF1ZXVlID0gZ19xdWV1ZV9uZXcgKCk7CisKKyAgcXVldWUtPnNpbmt0aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgcXVldWUtPnNyY3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworCisgIHF1ZXVlLT5zaW5rX3RhaW50ZWQgPSBUUlVFOworICBxdWV1ZS0+c3JjX3RhaW50ZWQgPSBUUlVFOworCisgIHF1ZXVlLT5uZXdzZWdfYXBwbGllZF90b19zcmMgPSBGQUxTRTsKKworICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwKKyAgICAgICJpbml0aWFsaXplZCBxdWV1ZSdzIG5vdF9lbXB0eSAmIG5vdF9mdWxsIGNvbmRpdGlvbnMiKTsKK30KKworLyogY2FsbGVkIG9ubHkgb25jZSwgYXMgb3Bwb3NlZCB0byBkaXNwb3NlICovCitzdGF0aWMgdm9pZAorZ3N0X3F1ZXVlX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQoreworICBHc3RRdWV1ZSAqcXVldWUgPSBHU1RfUVVFVUUgKG9iamVjdCk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJmaW5hbGl6aW5nIHF1ZXVlIik7CisKKyAgd2hpbGUgKCFnX3F1ZXVlX2lzX2VtcHR5IChxdWV1ZS0+cXVldWUpKSB7CisgICAgR3N0TWluaU9iamVjdCAqZGF0YSA9IGdfcXVldWVfcG9wX2hlYWQgKHF1ZXVlLT5xdWV1ZSk7CisKKyAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKGRhdGEpOworICB9CisgIGdfcXVldWVfZnJlZSAocXVldWUtPnF1ZXVlKTsKKyAgZ19tdXRleF9mcmVlIChxdWV1ZS0+cWxvY2spOworICBnX2NvbmRfZnJlZSAocXVldWUtPml0ZW1fYWRkKTsKKyAgZ19jb25kX2ZyZWUgKHF1ZXVlLT5pdGVtX2RlbCk7CisKKyAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9xdWV1ZV9hY2NlcHRjYXBzIChHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBjYXBzKQoreworICBnYm9vbGVhbiByZXN1bHQ7CisgIEdzdFF1ZXVlICpxdWV1ZTsKKyAgR3N0UGFkICpvdGhlcnBhZDsKKworICBxdWV1ZSA9IEdTVF9RVUVVRSAoZ3N0X3BhZF9nZXRfcGFyZW50IChwYWQpKTsKKyAgaWYgKEdfVU5MSUtFTFkgKHF1ZXVlID09IE5VTEwpKQorICAgIHJldHVybiBGQUxTRTsKKworICBvdGhlcnBhZCA9IChwYWQgPT0gcXVldWUtPnNyY3BhZCA/IHF1ZXVlLT5zaW5rcGFkIDogcXVldWUtPnNyY3BhZCk7CisgIHJlc3VsdCA9IGdzdF9wYWRfcGVlcl9hY2NlcHRfY2FwcyAob3RoZXJwYWQsIGNhcHMpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHF1ZXVlKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgR3N0Q2FwcyAqCitnc3RfcXVldWVfZ2V0Y2FwcyAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogZmlsdGVyKQoreworICBHc3RRdWV1ZSAqcXVldWU7CisgIEdzdFBhZCAqb3RoZXJwYWQ7CisgIEdzdENhcHMgKnJlc3VsdDsKKworICBxdWV1ZSA9IEdTVF9RVUVVRSAoZ3N0X3BhZF9nZXRfcGFyZW50IChwYWQpKTsKKyAgaWYgKEdfVU5MSUtFTFkgKHF1ZXVlID09IE5VTEwpKQorICAgIHJldHVybiAoZmlsdGVyID8gZ3N0X2NhcHNfcmVmIChmaWx0ZXIpIDogZ3N0X2NhcHNfbmV3X2FueSAoKSk7CisKKyAgb3RoZXJwYWQgPSAocGFkID09IHF1ZXVlLT5zcmNwYWQgPyBxdWV1ZS0+c2lua3BhZCA6IHF1ZXVlLT5zcmNwYWQpOworICByZXN1bHQgPSBnc3RfcGFkX3BlZXJfZ2V0X2NhcHMgKG90aGVycGFkLCBmaWx0ZXIpOworICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgcmVzdWx0ID0gKGZpbHRlciA/IGdzdF9jYXBzX3JlZiAoZmlsdGVyKSA6IGdzdF9jYXBzX25ld19hbnkgKCkpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHF1ZXVlKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgR3N0UGFkTGlua1JldHVybgorZ3N0X3F1ZXVlX2xpbmtfc2luayAoR3N0UGFkICogcGFkLCBHc3RQYWQgKiBwZWVyKQoreworICByZXR1cm4gR1NUX1BBRF9MSU5LX09LOworfQorCitzdGF0aWMgR3N0UGFkTGlua1JldHVybgorZ3N0X3F1ZXVlX2xpbmtfc3JjIChHc3RQYWQgKiBwYWQsIEdzdFBhZCAqIHBlZXIpCit7CisgIEdzdFBhZExpbmtSZXR1cm4gcmVzdWx0ID0gR1NUX1BBRF9MSU5LX09LOworICBHc3RRdWV1ZSAqcXVldWU7CisKKyAgcXVldWUgPSBHU1RfUVVFVUUgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJxdWV1ZSBsaW5raW5nIHNvdXJjZSBwYWQiKTsKKworICBpZiAoR1NUX1BBRF9MSU5LRlVOQyAocGVlcikpIHsKKyAgICByZXN1bHQgPSBHU1RfUEFEX0xJTktGVU5DIChwZWVyKSAocGVlciwgcGFkKTsKKyAgfQorCisgIGlmIChHU1RfUEFEX0xJTktfU1VDQ0VTU0ZVTCAocmVzdWx0KSkgeworICAgIEdTVF9RVUVVRV9NVVRFWF9MT0NLIChxdWV1ZSk7CisgICAgaWYgKHF1ZXVlLT5zcmNyZXN1bHQgPT0gR1NUX0ZMT1dfT0spIHsKKyAgICAgIHF1ZXVlLT5wdXNoX25ld3NlZ21lbnQgPSBUUlVFOworICAgICAgZ3N0X3BhZF9zdGFydF90YXNrIChwYWQsIChHc3RUYXNrRnVuY3Rpb24pIGdzdF9xdWV1ZV9sb29wLCBwYWQpOworICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJzdGFydGluZyB0YXNrIGFzIHBhZCBpcyBsaW5rZWQiKTsKKyAgICB9IGVsc2UgeworICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJub3Qgc3RhcnRpbmcgdGFzayByZWFzb24gJXMiLAorICAgICAgICAgIGdzdF9mbG93X2dldF9uYW1lIChxdWV1ZS0+c3JjcmVzdWx0KSk7CisgICAgfQorICAgIEdTVF9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKKyAgfQorICBnc3Rfb2JqZWN0X3VucmVmIChxdWV1ZSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogY2FsY3VsYXRlIHRoZSBkaWZmIGJldHdlZW4gcnVubmluZyB0aW1lIG9uIHRoZSBzaW5rIGFuZCBzcmMgb2YgdGhlIHF1ZXVlLgorICogVGhpcyBpcyB0aGUgdG90YWwgYW1vdW50IG9mIHRpbWUgaW4gdGhlIHF1ZXVlLiAqLworc3RhdGljIHZvaWQKK3VwZGF0ZV90aW1lX2xldmVsIChHc3RRdWV1ZSAqIHF1ZXVlKQoreworICBnaW50NjQgc2lua190aW1lLCBzcmNfdGltZTsKKworICBpZiAocXVldWUtPnNpbmtfdGFpbnRlZCkgeworICAgIEdTVF9MT0dfT0JKRUNUIChxdWV1ZSwgInVwZGF0ZSBzaW5rIHRpbWUiKTsKKyAgICBxdWV1ZS0+c2lua3RpbWUgPQorICAgICAgICBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZxdWV1ZS0+c2lua19zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsCisgICAgICAgIHF1ZXVlLT5zaW5rX3NlZ21lbnQucG9zaXRpb24pOworICAgIHF1ZXVlLT5zaW5rX3RhaW50ZWQgPSBGQUxTRTsKKyAgfQorICBzaW5rX3RpbWUgPSBxdWV1ZS0+c2lua3RpbWU7CisKKyAgaWYgKHF1ZXVlLT5zcmNfdGFpbnRlZCkgeworICAgIEdTVF9MT0dfT0JKRUNUIChxdWV1ZSwgInVwZGF0ZSBzcmMgdGltZSIpOworICAgIHF1ZXVlLT5zcmN0aW1lID0KKyAgICAgICAgZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmcXVldWUtPnNyY19zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsCisgICAgICAgIHF1ZXVlLT5zcmNfc2VnbWVudC5wb3NpdGlvbik7CisgICAgcXVldWUtPnNyY190YWludGVkID0gRkFMU0U7CisgIH0KKyAgc3JjX3RpbWUgPSBxdWV1ZS0+c3JjdGltZTsKKworICBHU1RfTE9HX09CSkVDVCAocXVldWUsICJzaW5rICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBzcmMgJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgR1NUX1RJTUVfQVJHUyAoc2lua190aW1lKSwgR1NUX1RJTUVfQVJHUyAoc3JjX3RpbWUpKTsKKworICBpZiAoc2lua190aW1lID49IHNyY190aW1lKQorICAgIHF1ZXVlLT5jdXJfbGV2ZWwudGltZSA9IHNpbmtfdGltZSAtIHNyY190aW1lOworICBlbHNlCisgICAgcXVldWUtPmN1cl9sZXZlbC50aW1lID0gMDsKK30KKworLyogdGFrZSBhIFNFR01FTlQgZXZlbnQgYW5kIGFwcGx5IHRoZSB2YWx1ZXMgdG8gc2VnbWVudCwgdXBkYXRpbmcgdGhlIHRpbWUKKyAqIGxldmVsIG9mIHF1ZXVlLiAqLworc3RhdGljIHZvaWQKK2FwcGx5X3NlZ21lbnQgKEdzdFF1ZXVlICogcXVldWUsIEdzdEV2ZW50ICogZXZlbnQsIEdzdFNlZ21lbnQgKiBzZWdtZW50LAorICAgIGdib29sZWFuIHNpbmspCit7CisgIGdzdF9ldmVudF9jb3B5X3NlZ21lbnQgKGV2ZW50LCBzZWdtZW50KTsKKworICAvKiBub3cgY29uZmlndXJlIHRoZSB2YWx1ZXMsIHdlIHVzZSB0aGVzZSB0byB0cmFjayB0aW1lc3RhbXBzIG9uIHRoZQorICAgKiBzaW5rcGFkLiAqLworICBpZiAoc2VnbWVudC0+Zm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSkgeworICAgIC8qIG5vbi10aW1lIGZvcm1hdCwgcHJldGVudCB0aGUgY3VycmVudCB0aW1lIHNlZ21lbnQgaXMgY2xvc2VkIHdpdGggYQorICAgICAqIDAgc3RhcnQgYW5kIHVua25vd24gc3RvcCB0aW1lLiAqLworICAgIHNlZ21lbnQtPmZvcm1hdCA9IEdTVF9GT1JNQVRfVElNRTsKKyAgICBzZWdtZW50LT5zdGFydCA9IDA7CisgICAgc2VnbWVudC0+c3RvcCA9IC0xOworICAgIHNlZ21lbnQtPnRpbWUgPSAwOworICB9CisgIGlmIChzaW5rKQorICAgIHF1ZXVlLT5zaW5rX3RhaW50ZWQgPSBUUlVFOworICBlbHNlCisgICAgcXVldWUtPnNyY190YWludGVkID0gVFJVRTsKKworICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgImNvbmZpZ3VyZWQgU0VHTUVOVCAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsIHNlZ21lbnQpOworCisgIC8qIHNlZ21lbnQgY2FuIHVwZGF0ZSB0aGUgdGltZSBsZXZlbCBvZiB0aGUgcXVldWUgKi8KKyAgdXBkYXRlX3RpbWVfbGV2ZWwgKHF1ZXVlKTsKK30KKworLyogdGFrZSBhIGJ1ZmZlciBhbmQgdXBkYXRlIHNlZ21lbnQsIHVwZGF0aW5nIHRoZSB0aW1lIGxldmVsIG9mIHRoZSBxdWV1ZS4gKi8KK3N0YXRpYyB2b2lkCithcHBseV9idWZmZXIgKEdzdFF1ZXVlICogcXVldWUsIEdzdEJ1ZmZlciAqIGJ1ZmZlciwgR3N0U2VnbWVudCAqIHNlZ21lbnQsCisgICAgZ2Jvb2xlYW4gd2l0aF9kdXJhdGlvbiwgZ2Jvb2xlYW4gc2luaykKK3sKKyAgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uLCB0aW1lc3RhbXA7CisKKyAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcik7CisgIGR1cmF0aW9uID0gR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKTsKKworICAvKiBpZiBubyB0aW1lc3RhbXAgaXMgc2V0LCBhc3N1bWUgaXQncyBjb250aW51b3VzIHdpdGggdGhlIHByZXZpb3VzCisgICAqIHRpbWUgKi8KKyAgaWYgKHRpbWVzdGFtcCA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKQorICAgIHRpbWVzdGFtcCA9IHNlZ21lbnQtPnBvc2l0aW9uOworCisgIC8qIGFkZCBkdXJhdGlvbiAqLworICBpZiAod2l0aF9kdXJhdGlvbiAmJiBkdXJhdGlvbiAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKQorICAgIHRpbWVzdGFtcCArPSBkdXJhdGlvbjsKKworICBHU1RfTE9HX09CSkVDVCAocXVldWUsICJwb3NpdGlvbiB1cGRhdGVkIHRvICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWVzdGFtcCkpOworCisgIHNlZ21lbnQtPnBvc2l0aW9uID0gdGltZXN0YW1wOworICBpZiAoc2luaykKKyAgICBxdWV1ZS0+c2lua190YWludGVkID0gVFJVRTsKKyAgZWxzZQorICAgIHF1ZXVlLT5zcmNfdGFpbnRlZCA9IFRSVUU7CisKKworICAvKiBjYWxjIGRpZmYgd2l0aCBvdGhlciBlbmQgKi8KKyAgdXBkYXRlX3RpbWVfbGV2ZWwgKHF1ZXVlKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9xdWV1ZV9sb2NrZWRfZmx1c2ggKEdzdFF1ZXVlICogcXVldWUpCit7CisgIHdoaWxlICghZ19xdWV1ZV9pc19lbXB0eSAocXVldWUtPnF1ZXVlKSkgeworICAgIEdzdE1pbmlPYmplY3QgKmRhdGEgPSBnX3F1ZXVlX3BvcF9oZWFkIChxdWV1ZS0+cXVldWUpOworCisgICAgLyogVGhlbiBsb3NlIGFub3RoZXIgcmVmZXJlbmNlIGJlY2F1c2Ugd2UgYXJlIHN1cHBvc2VkIHRvIGRlc3Ryb3kgdGhhdAorICAgICAgIGRhdGEgd2hlbiBmbHVzaGluZyAqLworICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAoZGF0YSk7CisgIH0KKyAgR1NUX1FVRVVFX0NMRUFSX0xFVkVMIChxdWV1ZS0+Y3VyX2xldmVsKTsKKyAgcXVldWUtPm1pbl90aHJlc2hvbGQuYnVmZmVycyA9IHF1ZXVlLT5vcmlnX21pbl90aHJlc2hvbGQuYnVmZmVyczsKKyAgcXVldWUtPm1pbl90aHJlc2hvbGQuYnl0ZXMgPSBxdWV1ZS0+b3JpZ19taW5fdGhyZXNob2xkLmJ5dGVzOworICBxdWV1ZS0+bWluX3RocmVzaG9sZC50aW1lID0gcXVldWUtPm9yaWdfbWluX3RocmVzaG9sZC50aW1lOworICBnc3Rfc2VnbWVudF9pbml0ICgmcXVldWUtPnNpbmtfc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKKyAgZ3N0X3NlZ21lbnRfaW5pdCAoJnF1ZXVlLT5zcmNfc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKKyAgcXVldWUtPmhlYWRfbmVlZHNfZGlzY29udCA9IHF1ZXVlLT50YWlsX25lZWRzX2Rpc2NvbnQgPSBGQUxTRTsKKworICBxdWV1ZS0+c2lua3RpbWUgPSBxdWV1ZS0+c3JjdGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgIHF1ZXVlLT5zaW5rX3RhaW50ZWQgPSBxdWV1ZS0+c3JjX3RhaW50ZWQgPSBUUlVFOworCisgIC8qIHdlIGRlbGV0ZWQgYSBsb3Qgb2Ygc29tZXRoaW5nICovCisgIEdTVF9RVUVVRV9TSUdOQUxfREVMIChxdWV1ZSk7Cit9CisKKy8qIGVucXVldWUgYW4gaXRlbSBhbiB1cGRhdGUgdGhlIGxldmVsIHN0YXRzLCB3aXRoIFFVRVVFX0xPQ0sgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZ3N0X3F1ZXVlX2xvY2tlZF9lbnF1ZXVlX2J1ZmZlciAoR3N0UXVldWUgKiBxdWV1ZSwgZ3BvaW50ZXIgaXRlbSkKK3sKKyAgR3N0QnVmZmVyICpidWZmZXIgPSBHU1RfQlVGRkVSX0NBU1QgKGl0ZW0pOworCisgIC8qIGFkZCBidWZmZXIgdG8gdGhlIHN0YXRpc3RpY3MgKi8KKyAgcXVldWUtPmN1cl9sZXZlbC5idWZmZXJzKys7CisgIHF1ZXVlLT5jdXJfbGV2ZWwuYnl0ZXMgKz0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKTsKKyAgYXBwbHlfYnVmZmVyIChxdWV1ZSwgYnVmZmVyLCAmcXVldWUtPnNpbmtfc2VnbWVudCwgVFJVRSwgVFJVRSk7CisKKyAgZ19xdWV1ZV9wdXNoX3RhaWwgKHF1ZXVlLT5xdWV1ZSwgaXRlbSk7CisgIEdTVF9RVUVVRV9TSUdOQUxfQUREIChxdWV1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ3N0X3F1ZXVlX2xvY2tlZF9lbnF1ZXVlX2V2ZW50IChHc3RRdWV1ZSAqIHF1ZXVlLCBncG9pbnRlciBpdGVtKQoreworICBHc3RFdmVudCAqZXZlbnQgPSBHU1RfRVZFTlRfQ0FTVCAoaXRlbSk7CisKKyAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7CisgICAgY2FzZSBHU1RfRVZFTlRfRU9TOgorICAgICAgLyogWmVybyB0aGUgdGhyZXNob2xkcywgdGhpcyBtYWtlcyBzdXJlIHRoZSBxdWV1ZSBpcyBjb21wbGV0ZWx5CisgICAgICAgKiBmaWxsZWQgYW5kIHdlIGNhbiByZWFkIGFsbCBkYXRhIGZyb20gdGhlIHF1ZXVlLiAqLworICAgICAgR1NUX1FVRVVFX0NMRUFSX0xFVkVMIChxdWV1ZS0+bWluX3RocmVzaG9sZCk7CisgICAgICAvKiBtYXJrIHRoZSBxdWV1ZSBhcyBFT1MuIFRoaXMgcHJldmVudHMgdXMgZnJvbSBhY2NlcHRpbmcgbW9yZSBkYXRhLiAqLworICAgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsICJnb3QgRU9TIGZyb20gdXBzdHJlYW0iKTsKKyAgICAgIHF1ZXVlLT5lb3MgPSBUUlVFOworICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVDoKKyAgICAgIGFwcGx5X3NlZ21lbnQgKHF1ZXVlLCBldmVudCwgJnF1ZXVlLT5zaW5rX3NlZ21lbnQsIFRSVUUpOworICAgICAgLyogaWYgdGhlIHF1ZXVlIGlzIGVtcHR5LCBhcHBseSBzaW5rIHNlZ21lbnQgb24gdGhlIHNvdXJjZSAqLworICAgICAgaWYgKHF1ZXVlLT5xdWV1ZS0+bGVuZ3RoID09IDApIHsKKyAgICAgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsICJBcHBseSBzZWdtZW50IG9uIHNyY3BhZCIpOworICAgICAgICBhcHBseV9zZWdtZW50IChxdWV1ZSwgZXZlbnQsICZxdWV1ZS0+c3JjX3NlZ21lbnQsIEZBTFNFKTsKKyAgICAgICAgcXVldWUtPm5ld3NlZ19hcHBsaWVkX3RvX3NyYyA9IFRSVUU7CisgICAgICB9CisgICAgICAvKiBhIG5ldyBzZWdtZW50IGFsbG93cyB1cyB0byBhY2NlcHQgbW9yZSBidWZmZXJzIGlmIHdlIGdvdCBVTkVYUEVDVEVECisgICAgICAgKiBmcm9tIGRvd25zdHJlYW0gKi8KKyAgICAgIHF1ZXVlLT51bmV4cGVjdGVkID0gRkFMU0U7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKworICBnX3F1ZXVlX3B1c2hfdGFpbCAocXVldWUtPnF1ZXVlLCBpdGVtKTsKKyAgR1NUX1FVRVVFX1NJR05BTF9BREQgKHF1ZXVlKTsKK30KKworLyogZGVxdWV1ZSBhbiBpdGVtIGZyb20gdGhlIHF1ZXVlIGFuZCB1cGRhdGUgbGV2ZWwgc3RhdHMsIHdpdGggUVVFVUVfTE9DSyAqLworc3RhdGljIEdzdE1pbmlPYmplY3QgKgorZ3N0X3F1ZXVlX2xvY2tlZF9kZXF1ZXVlIChHc3RRdWV1ZSAqIHF1ZXVlLCBnYm9vbGVhbiAqIGlzX2J1ZmZlcikKK3sKKyAgR3N0TWluaU9iamVjdCAqaXRlbTsKKworICBpdGVtID0gZ19xdWV1ZV9wb3BfaGVhZCAocXVldWUtPnF1ZXVlKTsKKyAgaWYgKGl0ZW0gPT0gTlVMTCkKKyAgICBnb3RvIG5vX2l0ZW07CisKKyAgaWYgKEdTVF9JU19CVUZGRVIgKGl0ZW0pKSB7CisgICAgR3N0QnVmZmVyICpidWZmZXIgPSBHU1RfQlVGRkVSX0NBU1QgKGl0ZW0pOworCisgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsCisgICAgICAgICJyZXRyaWV2ZWQgYnVmZmVyICVwIGZyb20gcXVldWUiLCBidWZmZXIpOworCisgICAgcXVldWUtPmN1cl9sZXZlbC5idWZmZXJzLS07CisgICAgcXVldWUtPmN1cl9sZXZlbC5ieXRlcyAtPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpOworICAgIGFwcGx5X2J1ZmZlciAocXVldWUsIGJ1ZmZlciwgJnF1ZXVlLT5zcmNfc2VnbWVudCwgVFJVRSwgRkFMU0UpOworCisgICAgLyogaWYgdGhlIHF1ZXVlIGlzIGVtcHR5IG5vdywgdXBkYXRlIHRoZSBvdGhlciBzaWRlICovCisgICAgaWYgKHF1ZXVlLT5jdXJfbGV2ZWwuYnVmZmVycyA9PSAwKQorICAgICAgcXVldWUtPmN1cl9sZXZlbC50aW1lID0gMDsKKworICAgICppc19idWZmZXIgPSBUUlVFOworICB9IGVsc2UgaWYgKEdTVF9JU19FVkVOVCAoaXRlbSkpIHsKKyAgICBHc3RFdmVudCAqZXZlbnQgPSBHU1RfRVZFTlRfQ0FTVCAoaXRlbSk7CisKKyAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwKKyAgICAgICAgInJldHJpZXZlZCBldmVudCAlcCBmcm9tIHF1ZXVlIiwgZXZlbnQpOworCisgICAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7CisgICAgICBjYXNlIEdTVF9FVkVOVF9FT1M6CisgICAgICAgIC8qIHF1ZXVlIGlzIGVtcHR5IG5vdyB0aGF0IHdlIGRlcXVldWVkIHRoZSBFT1MgKi8KKyAgICAgICAgR1NUX1FVRVVFX0NMRUFSX0xFVkVMIChxdWV1ZS0+Y3VyX2xldmVsKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9FVkVOVF9TRUdNRU5UOgorICAgICAgICAvKiBhcHBseSBuZXdzZWdtZW50IGlmIGl0IGhhcyBub3QgYWxyZWFkeSBiZWVuIGFwcGxpZWQgKi8KKyAgICAgICAgaWYgKEdfTElLRUxZICghcXVldWUtPm5ld3NlZ19hcHBsaWVkX3RvX3NyYykpIHsKKyAgICAgICAgICBhcHBseV9zZWdtZW50IChxdWV1ZSwgZXZlbnQsICZxdWV1ZS0+c3JjX3NlZ21lbnQsIEZBTFNFKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBxdWV1ZS0+bmV3c2VnX2FwcGxpZWRfdG9fc3JjID0gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAqaXNfYnVmZmVyID0gRkFMU0U7CisgIH0gZWxzZSB7CisgICAgZ193YXJuaW5nCisgICAgICAgICgiVW5leHBlY3RlZCBpdGVtICVwIGRlcXVldWVkIGZyb20gcXVldWUgJXMgKHJlZmNvdW50aW5nIHByb2JsZW0/KSIsCisgICAgICAgIGl0ZW0sIEdTVF9PQkpFQ1RfTkFNRSAocXVldWUpKTsKKyAgICBpdGVtID0gTlVMTDsKKyAgfQorICBHU1RfUVVFVUVfU0lHTkFMX0RFTCAocXVldWUpOworCisgIHJldHVybiBpdGVtOworCisgIC8qIEVSUk9SUyAqLworbm9faXRlbToKKyAgeworICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsICJ0aGUgcXVldWUgaXMgZW1wdHkiKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9xdWV1ZV9oYW5kbGVfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KQoreworICBHc3RRdWV1ZSAqcXVldWU7CisKKyAgcXVldWUgPSBHU1RfUVVFVUUgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7CisgIGlmIChHX1VOTElLRUxZIChxdWV1ZSA9PSBOVUxMKSkgeworICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorCisgIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgeworICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUQVJUOgorICAgIHsKKyAgICAgIFNUQVRVUyAocXVldWUsIHBhZCwgInJlY2VpdmVkIGZsdXNoIHN0YXJ0IGV2ZW50Iik7CisgICAgICAvKiBmb3J3YXJkIGV2ZW50ICovCisgICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHF1ZXVlLT5zcmNwYWQsIGV2ZW50KTsKKworICAgICAgLyogbm93IHVuYmxvY2sgdGhlIGNoYWluIGZ1bmN0aW9uICovCisgICAgICBHU1RfUVVFVUVfTVVURVhfTE9DSyAocXVldWUpOworICAgICAgcXVldWUtPnNyY3Jlc3VsdCA9IEdTVF9GTE9XX1dST05HX1NUQVRFOworICAgICAgLyogdW5ibG9jayB0aGUgbG9vcCBhbmQgY2hhaW4gZnVuY3Rpb25zICovCisgICAgICBHU1RfUVVFVUVfU0lHTkFMX0FERCAocXVldWUpOworICAgICAgR1NUX1FVRVVFX1NJR05BTF9ERUwgKHF1ZXVlKTsKKyAgICAgIEdTVF9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKKworICAgICAgLyogbWFrZSBzdXJlIGl0IHBhdXNlcywgdGhpcyBzaG91bGQgaGFwcGVuIHNpbmNlIHdlIHNlbnQKKyAgICAgICAqIGZsdXNoX3N0YXJ0IGRvd25zdHJlYW0uICovCisgICAgICBnc3RfcGFkX3BhdXNlX3Rhc2sgKHF1ZXVlLT5zcmNwYWQpOworICAgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsICJsb29wIHN0b3BwZWQiKTsKKyAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisgICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKKyAgICB7CisgICAgICBTVEFUVVMgKHF1ZXVlLCBwYWQsICJyZWNlaXZlZCBmbHVzaCBzdG9wIGV2ZW50Iik7CisgICAgICAvKiBmb3J3YXJkIGV2ZW50ICovCisgICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHF1ZXVlLT5zcmNwYWQsIGV2ZW50KTsKKworICAgICAgR1NUX1FVRVVFX01VVEVYX0xPQ0sgKHF1ZXVlKTsKKyAgICAgIGdzdF9xdWV1ZV9sb2NrZWRfZmx1c2ggKHF1ZXVlKTsKKyAgICAgIHF1ZXVlLT5zcmNyZXN1bHQgPSBHU1RfRkxPV19PSzsKKyAgICAgIHF1ZXVlLT5lb3MgPSBGQUxTRTsKKyAgICAgIHF1ZXVlLT51bmV4cGVjdGVkID0gRkFMU0U7CisgICAgICBpZiAoZ3N0X3BhZF9pc19saW5rZWQgKHF1ZXVlLT5zcmNwYWQpKSB7CisgICAgICAgIGdzdF9wYWRfc3RhcnRfdGFzayAocXVldWUtPnNyY3BhZCwgKEdzdFRhc2tGdW5jdGlvbikgZ3N0X3F1ZXVlX2xvb3AsCisgICAgICAgICAgICBxdWV1ZS0+c3JjcGFkKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIEdTVF9JTkZPX09CSkVDVCAocXVldWUsICJub3QgcmUtc3RhcnRpbmcgdGFzayBhcyBwYWQgaXMgbm90IGxpbmtlZCIpOworICAgICAgfQorICAgICAgR1NUX1FVRVVFX01VVEVYX1VOTE9DSyAocXVldWUpOworCisgICAgICBTVEFUVVMgKHF1ZXVlLCBwYWQsICJhZnRlciBmbHVzaCIpOworICAgICAgZ290byBkb25lOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgaWYgKEdTVF9FVkVOVF9JU19TRVJJQUxJWkVEIChldmVudCkpIHsKKyAgICAgICAgLyogc2VyaWFsaXplZCBldmVudHMgZ28gaW4gdGhlIHF1ZXVlICovCisgICAgICAgIEdTVF9RVUVVRV9NVVRFWF9MT0NLX0NIRUNLIChxdWV1ZSwgb3V0X2ZsdXNoaW5nKTsKKyAgICAgICAgLyogcmVmdXNlIG1vcmUgZXZlbnRzIG9uIEVPUyAqLworICAgICAgICBpZiAocXVldWUtPmVvcykKKyAgICAgICAgICBnb3RvIG91dF9lb3M7CisgICAgICAgIGdzdF9xdWV1ZV9sb2NrZWRfZW5xdWV1ZV9ldmVudCAocXVldWUsIGV2ZW50KTsKKyAgICAgICAgR1NUX1FVRVVFX01VVEVYX1VOTE9DSyAocXVldWUpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgLyogbm9uLXNlcmlhbGl6ZWQgZXZlbnRzIGFyZSBwYXNzZWQgdXBzdHJlYW0uICovCisgICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAocXVldWUtPnNyY3BhZCwgZXZlbnQpOworICAgICAgfQorICAgICAgYnJlYWs7CisgIH0KK2RvbmU6CisgIGdzdF9vYmplY3RfdW5yZWYgKHF1ZXVlKTsKKyAgcmV0dXJuIFRSVUU7CisKKyAgLyogRVJST1JTICovCitvdXRfZmx1c2hpbmc6CisgIHsKKyAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwKKyAgICAgICAgInJlZnVzaW5nIGV2ZW50LCB3ZSBhcmUgZmx1c2hpbmciKTsKKyAgICBHU1RfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7CisgICAgZ3N0X29iamVjdF91bnJlZiAocXVldWUpOworICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorb3V0X2VvczoKKyAgeworICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLCAicmVmdXNpbmcgZXZlbnQsIHdlIGFyZSBFT1MiKTsKKyAgICBHU1RfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7CisgICAgZ3N0X29iamVjdF91bnJlZiAocXVldWUpOworICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9xdWV1ZV9pc19lbXB0eSAoR3N0UXVldWUgKiBxdWV1ZSkKK3sKKyAgaWYgKHF1ZXVlLT5xdWV1ZS0+bGVuZ3RoID09IDApCisgICAgcmV0dXJuIFRSVUU7CisKKyAgLyogSXQgaXMgcG9zc2libGUgdGhhdCBhIG1heCBzaXplIGlzIHJlYWNoZWQgYmVmb3JlIGFsbCBtaW4gdGhyZXNob2xkcyBhcmUuCisgICAqIFRoZXJlZm9yZSwgb25seSBjb25zaWRlciBpdCBlbXB0eSBpZiBpdCBpcyBub3QgZmlsbGVkLiAqLworICByZXR1cm4gKChxdWV1ZS0+bWluX3RocmVzaG9sZC5idWZmZXJzID4gMCAmJgorICAgICAgICAgIHF1ZXVlLT5jdXJfbGV2ZWwuYnVmZmVycyA8IHF1ZXVlLT5taW5fdGhyZXNob2xkLmJ1ZmZlcnMpIHx8CisgICAgICAocXVldWUtPm1pbl90aHJlc2hvbGQuYnl0ZXMgPiAwICYmCisgICAgICAgICAgcXVldWUtPmN1cl9sZXZlbC5ieXRlcyA8IHF1ZXVlLT5taW5fdGhyZXNob2xkLmJ5dGVzKSB8fAorICAgICAgKHF1ZXVlLT5taW5fdGhyZXNob2xkLnRpbWUgPiAwICYmCisgICAgICAgICAgcXVldWUtPmN1cl9sZXZlbC50aW1lIDwgcXVldWUtPm1pbl90aHJlc2hvbGQudGltZSkpICYmCisgICAgICAhZ3N0X3F1ZXVlX2lzX2ZpbGxlZCAocXVldWUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9xdWV1ZV9pc19maWxsZWQgKEdzdFF1ZXVlICogcXVldWUpCit7CisgIHJldHVybiAoKChxdWV1ZS0+bWF4X3NpemUuYnVmZmVycyA+IDAgJiYKKyAgICAgICAgICAgICAgcXVldWUtPmN1cl9sZXZlbC5idWZmZXJzID49IHF1ZXVlLT5tYXhfc2l6ZS5idWZmZXJzKSB8fAorICAgICAgICAgIChxdWV1ZS0+bWF4X3NpemUuYnl0ZXMgPiAwICYmCisgICAgICAgICAgICAgIHF1ZXVlLT5jdXJfbGV2ZWwuYnl0ZXMgPj0gcXVldWUtPm1heF9zaXplLmJ5dGVzKSB8fAorICAgICAgICAgIChxdWV1ZS0+bWF4X3NpemUudGltZSA+IDAgJiYKKyAgICAgICAgICAgICAgcXVldWUtPmN1cl9sZXZlbC50aW1lID49IHF1ZXVlLT5tYXhfc2l6ZS50aW1lKSkpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3F1ZXVlX2xlYWtfZG93bnN0cmVhbSAoR3N0UXVldWUgKiBxdWV1ZSkKK3sKKyAgLyogZm9yIGFzIGxvbmcgYXMgdGhlIHF1ZXVlIGlzIGZpbGxlZCwgZGVxdWV1ZSBhbiBpdGVtIGFuZCBkaXNjYXJkIGl0ICovCisgIHdoaWxlIChnc3RfcXVldWVfaXNfZmlsbGVkIChxdWV1ZSkpIHsKKyAgICBHc3RNaW5pT2JqZWN0ICpsZWFrOworICAgIGdib29sZWFuIGlzX2J1ZmZlcjsKKworICAgIGxlYWsgPSBnc3RfcXVldWVfbG9ja2VkX2RlcXVldWUgKHF1ZXVlLCAmaXNfYnVmZmVyKTsKKyAgICAvKiB0aGVyZSBpcyBub3RoaW5nIHRvIGRlcXVldWUgYW5kIHRoZSBxdWV1ZSBpcyBzdGlsbCBmaWxsZWQuLiBUaGlzIHNob3VsZAorICAgICAqIG5vdCBoYXBwZW4gKi8KKyAgICBnX2Fzc2VydCAobGVhayAhPSBOVUxMKTsKKworICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsCisgICAgICAgICJxdWV1ZSBpcyBmdWxsLCBsZWFraW5nIGl0ZW0gJXAgb24gZG93bnN0cmVhbSBlbmQiLCBsZWFrKTsKKyAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKGxlYWspOworCisgICAgLyogbGFzdCBidWZmZXIgbmVlZHMgdG8gZ2V0IGEgRElTQ09OVCBmbGFnICovCisgICAgcXVldWUtPmhlYWRfbmVlZHNfZGlzY29udCA9IFRSVUU7CisgIH0KK30KKworc3RhdGljIEdzdEZsb3dSZXR1cm4KK2dzdF9xdWV1ZV9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RCdWZmZXIgKiBidWZmZXIpCit7CisgIEdzdFF1ZXVlICpxdWV1ZTsKKyAgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uLCB0aW1lc3RhbXA7CisKKyAgcXVldWUgPSAoR3N0UXVldWUgKikgR1NUX09CSkVDVF9QQVJFTlQgKHBhZCk7CisKKyAgLyogd2UgaGF2ZSB0byBsb2NrIHRoZSBxdWV1ZSBzaW5jZSB3ZSBzcGFuIHRocmVhZHMgKi8KKyAgR1NUX1FVRVVFX01VVEVYX0xPQ0tfQ0hFQ0sgKHF1ZXVlLCBvdXRfZmx1c2hpbmcpOworICAvKiB3aGVuIHdlIHJlY2VpdmVkIEVPUywgd2UgcmVmdXNlIGFueSBtb3JlIGRhdGEgKi8KKyAgaWYgKHF1ZXVlLT5lb3MpCisgICAgZ290byBvdXRfZW9zOworICBpZiAocXVldWUtPnVuZXhwZWN0ZWQpCisgICAgZ290byBvdXRfdW5leHBlY3RlZDsKKworICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKTsKKyAgZHVyYXRpb24gPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpOworCisgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLCAicmVjZWl2ZWQgYnVmZmVyICVwIG9mIHNpemUgJSIKKyAgICAgIEdfR1NJWkVfRk9STUFUICIsIHRpbWUgJSIgR1NUX1RJTUVfRk9STUFUICIsIGR1cmF0aW9uICUiCisgICAgICBHU1RfVElNRV9GT1JNQVQsIGJ1ZmZlciwgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSwKKyAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWVzdGFtcCksIEdTVF9USU1FX0FSR1MgKGR1cmF0aW9uKSk7CisKKyAgLyogV2UgbWFrZSBzcGFjZSBhdmFpbGFibGUgaWYgd2UncmUgImZ1bGwiIGFjY29yZGluZyB0byB3aGF0ZXZlcgorICAgKiB0aGUgdXNlciBkZWZpbmVkIGFzICJmdWxsIi4gTm90ZSB0aGF0IHRoaXMgb25seSBhcHBsaWVzIHRvIGJ1ZmZlcnMuCisgICAqIFdlIGFsd2F5cyBoYW5kbGUgZXZlbnRzIGFuZCB0aGV5IGRvbid0IGNvdW50IGluIG91ciBzdGF0aXN0aWNzLiAqLworICB3aGlsZSAoZ3N0X3F1ZXVlX2lzX2ZpbGxlZCAocXVldWUpKSB7CisgICAgaWYgKCFxdWV1ZS0+c2lsZW50KSB7CisgICAgICBHU1RfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7CisgICAgICBnX3NpZ25hbF9lbWl0IChxdWV1ZSwgZ3N0X3F1ZXVlX3NpZ25hbHNbU0lHTkFMX09WRVJSVU5dLCAwKTsKKyAgICAgIEdTVF9RVUVVRV9NVVRFWF9MT0NLX0NIRUNLIChxdWV1ZSwgb3V0X2ZsdXNoaW5nKTsKKyAgICAgIC8qIHdlIHJlY2hlY2ssIHRoZSBzaWduYWwgY291bGQgaGF2ZSBjaGFuZ2VkIHRoZSB0aHJlc2hvbGRzICovCisgICAgICBpZiAoIWdzdF9xdWV1ZV9pc19maWxsZWQgKHF1ZXVlKSkKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLyogaG93IGFyZSB3ZSBnb2luZyB0byBtYWtlIHNwYWNlIGZvciB0aGlzIGJ1ZmZlcj8gKi8KKyAgICBzd2l0Y2ggKHF1ZXVlLT5sZWFreSkgeworICAgICAgY2FzZSBHU1RfUVVFVUVfTEVBS19VUFNUUkVBTToKKyAgICAgICAgLyogbmV4dCBidWZmZXIgbmVlZHMgdG8gZ2V0IGEgRElTQ09OVCBmbGFnICovCisgICAgICAgIHF1ZXVlLT50YWlsX25lZWRzX2Rpc2NvbnQgPSBUUlVFOworICAgICAgICAvKiBsZWFrIGN1cnJlbnQgYnVmZmVyICovCisgICAgICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsCisgICAgICAgICAgICAicXVldWUgaXMgZnVsbCwgbGVha2luZyBidWZmZXIgb24gdXBzdHJlYW0gZW5kIik7CisgICAgICAgIC8qIG5vdyB3ZSBjYW4gY2xlYW4gdXAgYW5kIGV4aXQgcmlnaHQgYXdheSAqLworICAgICAgICBnb3RvIG91dF91bnJlZjsKKyAgICAgIGNhc2UgR1NUX1FVRVVFX0xFQUtfRE9XTlNUUkVBTToKKyAgICAgICAgZ3N0X3F1ZXVlX2xlYWtfZG93bnN0cmVhbSAocXVldWUpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGdfd2FybmluZyAoIlVua25vd24gbGVha3kgdHlwZSwgdXNpbmcgZGVmYXVsdCIpOworICAgICAgICAvKiBmYWxsLXRocm91Z2ggKi8KKyAgICAgIGNhc2UgR1NUX1FVRVVFX05PX0xFQUs6CisgICAgICB7CisgICAgICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsCisgICAgICAgICAgICAicXVldWUgaXMgZnVsbCwgd2FpdGluZyBmb3IgZnJlZSBzcGFjZSIpOworCisgICAgICAgIC8qIGRvbid0IGxlYWsuIEluc3RlYWQsIHdhaXQgZm9yIHNwYWNlIHRvIGJlIGF2YWlsYWJsZSAqLworICAgICAgICBkbyB7CisgICAgICAgICAgLyogZm9yIGFzIGxvbmcgYXMgdGhlIHF1ZXVlIGlzIGZpbGxlZCwgd2FpdCB0aWxsIGFuIGl0ZW0gd2FzIGRlbGV0ZWQuICovCisgICAgICAgICAgR1NUX1FVRVVFX1dBSVRfREVMX0NIRUNLIChxdWV1ZSwgb3V0X2ZsdXNoaW5nKTsKKyAgICAgICAgfSB3aGlsZSAoZ3N0X3F1ZXVlX2lzX2ZpbGxlZCAocXVldWUpKTsKKworICAgICAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLCAicXVldWUgaXMgbm90IGZ1bGwiKTsKKworICAgICAgICBpZiAoIXF1ZXVlLT5zaWxlbnQpIHsKKyAgICAgICAgICBHU1RfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7CisgICAgICAgICAgZ19zaWduYWxfZW1pdCAocXVldWUsIGdzdF9xdWV1ZV9zaWduYWxzW1NJR05BTF9SVU5OSU5HXSwgMCk7CisgICAgICAgICAgR1NUX1FVRVVFX01VVEVYX0xPQ0tfQ0hFQ0sgKHF1ZXVlLCBvdXRfZmx1c2hpbmcpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChxdWV1ZS0+dGFpbF9uZWVkc19kaXNjb250KSB7CisgICAgR3N0QnVmZmVyICpzdWJidWZmZXIgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKGJ1ZmZlcik7CisKKyAgICBpZiAoc3ViYnVmZmVyKSB7CisgICAgICBidWZmZXIgPSBzdWJidWZmZXI7CisgICAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWZmZXIsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKTsKKyAgICB9IGVsc2UgeworICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJDb3VsZCBub3QgbWFyayBidWZmZXIgYXMgRElTQ09OVCIpOworICAgIH0KKyAgICBxdWV1ZS0+dGFpbF9uZWVkc19kaXNjb250ID0gRkFMU0U7CisgIH0KKworICAvKiBwdXQgYnVmZmVyIGluIHF1ZXVlIG5vdyAqLworICBnc3RfcXVldWVfbG9ja2VkX2VucXVldWVfYnVmZmVyIChxdWV1ZSwgYnVmZmVyKTsKKyAgR1NUX1FVRVVFX01VVEVYX1VOTE9DSyAocXVldWUpOworCisgIHJldHVybiBHU1RfRkxPV19PSzsKKworICAvKiBzcGVjaWFsIGNvbmRpdGlvbnMgKi8KK291dF91bnJlZjoKKyAgeworICAgIEdTVF9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKKworICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7CisKKyAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisgIH0KK291dF9mbHVzaGluZzoKKyAgeworICAgIEdzdEZsb3dSZXR1cm4gcmV0ID0gcXVldWUtPnNyY3Jlc3VsdDsKKworICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLAorICAgICAgICAiZXhpdCBiZWNhdXNlIHRhc2sgcGF1c2VkLCByZWFzb246ICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOworICAgIEdTVF9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKKyAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworCisgICAgcmV0dXJuIHJldDsKKyAgfQorb3V0X2VvczoKKyAgeworICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLCAiZXhpdCBiZWNhdXNlIHdlIHJlY2VpdmVkIEVPUyIpOworICAgIEdTVF9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKKworICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7CisKKyAgICByZXR1cm4gR1NUX0ZMT1dfVU5FWFBFQ1RFRDsKKyAgfQorb3V0X3VuZXhwZWN0ZWQ6CisgIHsKKyAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwKKyAgICAgICAgImV4aXQgYmVjYXVzZSB3ZSByZWNlaXZlZCBVTkVYUEVDVEVEIik7CisgICAgR1NUX1FVRVVFX01VVEVYX1VOTE9DSyAocXVldWUpOworCisgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKworICAgIHJldHVybiBHU1RfRkxPV19VTkVYUEVDVEVEOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfcXVldWVfcHVzaF9uZXdzZWdtZW50IChHc3RRdWV1ZSAqIHF1ZXVlKQoreworICBHc3RFdmVudCAqZXZlbnQ7CisKKyAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZxdWV1ZS0+c3JjX3NlZ21lbnQpOworICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwgInB1c2hpbmcgcmVhbCBuZXdzZWdtZW50IGV2ZW50Iik7CisgIGdzdF9wYWRfcHVzaF9ldmVudCAocXVldWUtPnNyY3BhZCwgZXZlbnQpOworfQorCisvKiBkZXF1ZXVlIGFuIGl0ZW0gZnJvbSB0aGUgcXVldWUgYW4gcHVzaCBpdCBkb3duc3RyZWFtLiBUaGlzIGZ1bmN0aW9ucyByZXR1cm5zCisgKiB0aGUgcmVzdWx0IG9mIHRoZSBwdXNoLiAqLworc3RhdGljIEdzdEZsb3dSZXR1cm4KK2dzdF9xdWV1ZV9wdXNoX29uZSAoR3N0UXVldWUgKiBxdWV1ZSkKK3sKKyAgR3N0Rmxvd1JldHVybiByZXN1bHQgPSBHU1RfRkxPV19PSzsKKyAgR3N0TWluaU9iamVjdCAqZGF0YTsKKyAgZ2Jvb2xlYW4gaXNfYnVmZmVyOworCisgIGRhdGEgPSBnc3RfcXVldWVfbG9ja2VkX2RlcXVldWUgKHF1ZXVlLCAmaXNfYnVmZmVyKTsKKyAgaWYgKGRhdGEgPT0gTlVMTCkKKyAgICBnb3RvIG5vX2l0ZW07CisKK25leHQ6CisgIGlmIChpc19idWZmZXIpIHsKKyAgICBHc3RCdWZmZXIgKmJ1ZmZlcjsKKyNpZiAwCisgICAgR3N0Q2FwcyAqY2FwczsKKyNlbmRpZgorCisgICAgYnVmZmVyID0gR1NUX0JVRkZFUl9DQVNUIChkYXRhKTsKKworICAgIGlmIChxdWV1ZS0+aGVhZF9uZWVkc19kaXNjb250KSB7CisgICAgICBHc3RCdWZmZXIgKnN1YmJ1ZmZlciA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAoYnVmZmVyKTsKKworICAgICAgaWYgKHN1YmJ1ZmZlcikgeworICAgICAgICBidWZmZXIgPSBzdWJidWZmZXI7CisgICAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKGJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJDb3VsZCBub3QgbWFyayBidWZmZXIgYXMgRElTQ09OVCIpOworICAgICAgfQorICAgICAgcXVldWUtPmhlYWRfbmVlZHNfZGlzY29udCA9IEZBTFNFOworICAgIH0KKyNpZiAwCisgICAgY2FwcyA9IEdTVF9CVUZGRVJfQ0FQUyAoYnVmZmVyKTsKKyNlbmRpZgorCisgICAgR1NUX1FVRVVFX01VVEVYX1VOTE9DSyAocXVldWUpOworI2lmIDAKKyAgICAvKiBzZXQgdGhlIHJpZ2h0IGNhcHMgb24gdGhlIHBhZCBub3cuIFdlIGRvIHRoaXMgYmVmb3JlIHB1c2hpbmcgdGhlIGJ1ZmZlcgorICAgICAqIGJlY2F1c2UgdGhlIHBhZF9wdXNoIGNhbGwgd2lsbCBjaGVjayAodXNpbmcgYWNjZXB0Y2FwcykgaWYgdGhlIGJ1ZmZlciBjYW4KKyAgICAgKiBiZSBzZXQgb24gdGhlIHBhZCwgd2hpY2ggbWlnaHQgZmFpbCBiZWNhdXNlIHRoaXMgd2lsbCBiZSBwcm9wYWdhdGVkCisgICAgICogdXBzdHJlYW0uIEFsc28gbm90ZSB0aGF0IGlmIHRoZSBidWZmZXIgaGFzIE5VTEwgY2FwcywgaXQgbWVhbnMgdGhhdCB0aGUKKyAgICAgKiBjYXBzIGRpZCBub3QgY2hhbmdlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGNoYW5nZSBjYXBzIG9uIHRoZSBwYWQuICovCisgICAgaWYgKGNhcHMgJiYgY2FwcyAhPSBHU1RfUEFEX0NBUFMgKHF1ZXVlLT5zcmNwYWQpKQorICAgICAgZ3N0X3BhZF9zZXRfY2FwcyAocXVldWUtPnNyY3BhZCwgY2Fwcyk7CisjZW5kaWYKKworICAgIGlmIChxdWV1ZS0+cHVzaF9uZXdzZWdtZW50KSB7CisgICAgICBnc3RfcXVldWVfcHVzaF9uZXdzZWdtZW50IChxdWV1ZSk7CisgICAgfQorICAgIHJlc3VsdCA9IGdzdF9wYWRfcHVzaCAocXVldWUtPnNyY3BhZCwgYnVmZmVyKTsKKworICAgIC8qIG5lZWQgdG8gY2hlY2sgZm9yIHNyY3Jlc3VsdCBoZXJlIGFzIHdlbGwgKi8KKyAgICBHU1RfUVVFVUVfTVVURVhfTE9DS19DSEVDSyAocXVldWUsIG91dF9mbHVzaGluZyk7CisKKyAgICBpZiAocmVzdWx0ID09IEdTVF9GTE9XX1VORVhQRUNURUQpIHsKKyAgICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLAorICAgICAgICAgICJnb3QgVU5FWFBFQ1RFRCBmcm9tIGRvd25zdHJlYW0iKTsKKyAgICAgIC8qIHN0b3AgcHVzaGluZyBidWZmZXJzLCB3ZSBkZXF1ZXVlIGFsbCBpdGVtcyB1bnRpbCB3ZSBzZWUgYW4gaXRlbSB0aGF0IHdlCisgICAgICAgKiBjYW4gcHVzaCBhZ2Fpbiwgd2hpY2ggaXMgRU9TIG9yIFNFR01FTlQuIElmIHRoZXJlIGlzIG5vdGhpbmcgaW4gdGhlCisgICAgICAgKiBxdWV1ZSB3ZSBjYW4gcHVzaCwgd2Ugc2V0IGEgZmxhZyB0byBtYWtlIHRoZSBzaW5rcGFkIHJlZnVzZSBtb3JlCisgICAgICAgKiBidWZmZXJzIHdpdGggYW4gVU5FWFBFQ1RFRCByZXR1cm4gdmFsdWUuICovCisgICAgICB3aGlsZSAoKGRhdGEgPSBnc3RfcXVldWVfbG9ja2VkX2RlcXVldWUgKHF1ZXVlLCAmaXNfYnVmZmVyKSkpIHsKKyAgICAgICAgaWYgKGlzX2J1ZmZlcikgeworICAgICAgICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLAorICAgICAgICAgICAgICAiZHJvcHBpbmcgVU5FWFBFQ1RFRCBidWZmZXIgJXAiLCBkYXRhKTsKKyAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChHU1RfQlVGRkVSX0NBU1QgKGRhdGEpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBHc3RFdmVudCAqZXZlbnQgPSBHU1RfRVZFTlRfQ0FTVCAoZGF0YSk7CisgICAgICAgICAgR3N0RXZlbnRUeXBlIHR5cGUgPSBHU1RfRVZFTlRfVFlQRSAoZXZlbnQpOworCisgICAgICAgICAgaWYgKHR5cGUgPT0gR1NUX0VWRU5UX0VPUyB8fCB0eXBlID09IEdTVF9FVkVOVF9TRUdNRU5UKSB7CisgICAgICAgICAgICAvKiB3ZSBmb3VuZCBhIHB1c2hhYmxlIGl0ZW0gaW4gdGhlIHF1ZXVlLCBwdXNoIGl0IG91dCAqLworICAgICAgICAgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsCisgICAgICAgICAgICAgICAgInB1c2hpbmcgcHVzaGFibGUgZXZlbnQgJXMgYWZ0ZXIgVU5FWFBFQ1RFRCIsCisgICAgICAgICAgICAgICAgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKKyAgICAgICAgICAgIGdvdG8gbmV4dDsKKyAgICAgICAgICB9CisgICAgICAgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsCisgICAgICAgICAgICAgICJkcm9wcGluZyBVTkVYUEVDVEVEIGV2ZW50ICVwIiwgZXZlbnQpOworICAgICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworICAgICAgICB9CisgICAgICB9CisgICAgICAvKiBubyBtb3JlIGl0ZW1zIGluIHRoZSBxdWV1ZS4gU2V0IHRoZSB1bmV4cGVjdGVkIGZsYWcgc28gdGhhdCB1cHN0cmVhbQorICAgICAgICogbWFrZSB1cyByZWZ1c2UgYW55IG1vcmUgYnVmZmVycyBvbiB0aGUgc2lua3BhZC4gU2luY2Ugd2Ugd2lsbCBzdGlsbAorICAgICAgICogYWNjZXB0IEVPUyBhbmQgU0VHTUVOVCB3ZSByZXR1cm4gX0ZMT1dfT0sgdG8gdGhlIGNhbGxlciBzbyB0aGF0IHRoZQorICAgICAgICogdGFzayBmdW5jdGlvbiBkb2VzIG5vdCBzaHV0IGRvd24uICovCisgICAgICBxdWV1ZS0+dW5leHBlY3RlZCA9IFRSVUU7CisgICAgICByZXN1bHQgPSBHU1RfRkxPV19PSzsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgR3N0RXZlbnQgKmV2ZW50ID0gR1NUX0VWRU5UX0NBU1QgKGRhdGEpOworICAgIEdzdEV2ZW50VHlwZSB0eXBlID0gR1NUX0VWRU5UX1RZUEUgKGV2ZW50KTsKKworICAgIEdTVF9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKKworICAgIGlmIChxdWV1ZS0+cHVzaF9uZXdzZWdtZW50ICYmIHR5cGUgIT0gR1NUX0VWRU5UX1NFR01FTlQpIHsKKyAgICAgIGdzdF9xdWV1ZV9wdXNoX25ld3NlZ21lbnQgKHF1ZXVlKTsKKyAgICB9CisgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChxdWV1ZS0+c3JjcGFkLCBldmVudCk7CisKKyAgICBHU1RfUVVFVUVfTVVURVhfTE9DS19DSEVDSyAocXVldWUsIG91dF9mbHVzaGluZyk7CisgICAgLyogaWYgd2UncmUgRU9TLCByZXR1cm4gVU5FWFBFQ1RFRCBzbyB0aGF0IHRoZSB0YXNrIHBhdXNlcy4gKi8KKyAgICBpZiAodHlwZSA9PSBHU1RfRVZFTlRfRU9TKSB7CisgICAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwKKyAgICAgICAgICAicHVzaGVkIEVPUyBldmVudCAlcCwgcmV0dXJuIFVORVhQRUNURUQiLCBldmVudCk7CisgICAgICByZXN1bHQgPSBHU1RfRkxPV19VTkVYUEVDVEVEOworICAgIH0KKyAgfQorICByZXR1cm4gcmVzdWx0OworCisgIC8qIEVSUk9SUyAqLworbm9faXRlbToKKyAgeworICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLAorICAgICAgICAiZXhpdCBiZWNhdXNlIHdlIGhhdmUgbm8gaXRlbSBpbiB0aGUgcXVldWUiKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7CisgIH0KK291dF9mbHVzaGluZzoKKyAgeworICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLCAiZXhpdCBiZWNhdXNlIHdlIGFyZSBmbHVzaGluZyIpOworICAgIHJldHVybiBHU1RfRkxPV19XUk9OR19TVEFURTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZ3N0X3F1ZXVlX2xvb3AgKEdzdFBhZCAqIHBhZCkKK3sKKyAgR3N0UXVldWUgKnF1ZXVlOworICBHc3RGbG93UmV0dXJuIHJldDsKKworICBxdWV1ZSA9IChHc3RRdWV1ZSAqKSBHU1RfUEFEX1BBUkVOVCAocGFkKTsKKworICAvKiBoYXZlIHRvIGxvY2sgZm9yIHRocmVhZC1zYWZldHkgKi8KKyAgR1NUX1FVRVVFX01VVEVYX0xPQ0tfQ0hFQ0sgKHF1ZXVlLCBvdXRfZmx1c2hpbmcpOworCisgIHdoaWxlIChnc3RfcXVldWVfaXNfZW1wdHkgKHF1ZXVlKSkgeworICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsICJxdWV1ZSBpcyBlbXB0eSIpOworICAgIGlmICghcXVldWUtPnNpbGVudCkgeworICAgICAgR1NUX1FVRVVFX01VVEVYX1VOTE9DSyAocXVldWUpOworICAgICAgZ19zaWduYWxfZW1pdCAocXVldWUsIGdzdF9xdWV1ZV9zaWduYWxzW1NJR05BTF9VTkRFUlJVTl0sIDApOworICAgICAgR1NUX1FVRVVFX01VVEVYX0xPQ0tfQ0hFQ0sgKHF1ZXVlLCBvdXRfZmx1c2hpbmcpOworICAgIH0KKworICAgIC8qIHdlIHJlY2hlY2ssIHRoZSBzaWduYWwgY291bGQgaGF2ZSBjaGFuZ2VkIHRoZSB0aHJlc2hvbGRzICovCisgICAgd2hpbGUgKGdzdF9xdWV1ZV9pc19lbXB0eSAocXVldWUpKSB7CisgICAgICBHU1RfUVVFVUVfV0FJVF9BRERfQ0hFQ0sgKHF1ZXVlLCBvdXRfZmx1c2hpbmcpOworICAgIH0KKworICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsICJxdWV1ZSBpcyBub3QgZW1wdHkiKTsKKyAgICBpZiAoIXF1ZXVlLT5zaWxlbnQpIHsKKyAgICAgIEdTVF9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKKyAgICAgIGdfc2lnbmFsX2VtaXQgKHF1ZXVlLCBnc3RfcXVldWVfc2lnbmFsc1tTSUdOQUxfUlVOTklOR10sIDApOworICAgICAgZ19zaWduYWxfZW1pdCAocXVldWUsIGdzdF9xdWV1ZV9zaWduYWxzW1NJR05BTF9QVVNISU5HXSwgMCk7CisgICAgICBHU1RfUVVFVUVfTVVURVhfTE9DS19DSEVDSyAocXVldWUsIG91dF9mbHVzaGluZyk7CisgICAgfQorICB9CisKKyAgcmV0ID0gZ3N0X3F1ZXVlX3B1c2hfb25lIChxdWV1ZSk7CisgIHF1ZXVlLT5wdXNoX25ld3NlZ21lbnQgPSBGQUxTRTsKKyAgcXVldWUtPnNyY3Jlc3VsdCA9IHJldDsKKyAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKKyAgICBnb3RvIG91dF9mbHVzaGluZzsKKworICBHU1RfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7CisKKyAgcmV0dXJuOworCisgIC8qIEVSUk9SUyAqLworb3V0X2ZsdXNoaW5nOgorICB7CisgICAgZ2Jvb2xlYW4gZW9zID0gcXVldWUtPmVvczsKKyAgICBHc3RGbG93UmV0dXJuIHJldCA9IHF1ZXVlLT5zcmNyZXN1bHQ7CisKKyAgICBnc3RfcGFkX3BhdXNlX3Rhc2sgKHF1ZXVlLT5zcmNwYWQpOworICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLAorICAgICAgICAicGF1c2UgdGFzaywgcmVhc29uOiAgJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7CisgICAgR1NUX1FVRVVFX1NJR05BTF9ERUwgKHF1ZXVlKTsKKyAgICBHU1RfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7CisgICAgLyogbGV0IGFwcCBrbm93IGFib3V0IHVzIGdpdmluZyB1cCBpZiB1cHN0cmVhbSBpcyBub3QgZXhwZWN0ZWQgdG8gZG8gc28gKi8KKyAgICAvKiBVTkVYUEVDVEVEIGlzIGFscmVhZHkgdGFrZW4gY2FyZSBvZiBlbHNld2hlcmUgKi8KKyAgICBpZiAoZW9zICYmIChyZXQgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCB8fCByZXQgPCBHU1RfRkxPV19VTkVYUEVDVEVEKSkgeworICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHF1ZXVlLCBTVFJFQU0sIEZBSUxFRCwKKyAgICAgICAgICAoXygiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIpKSwKKyAgICAgICAgICAoInN0cmVhbWluZyB0YXNrIHBhdXNlZCwgcmVhc29uICVzICglZCkiLAorICAgICAgICAgICAgICBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSwgcmV0KSk7CisgICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHF1ZXVlLT5zcmNwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKKyAgICB9CisgICAgcmV0dXJuOworICB9Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3F1ZXVlX2hhbmRsZV9zcmNfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiBldmVudCkKK3sKKyAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKKyAgR3N0UXVldWUgKnF1ZXVlID0gR1NUX1FVRVVFIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOworCisgIGlmIChHX1VOTElLRUxZIChxdWV1ZSA9PSBOVUxMKSkgeworICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKyAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwgImdvdCBldmVudCAlcCAoJWQpIiwKKyAgICAgIGV2ZW50LCBHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKTsKKyNlbmRpZgorCisgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAocXVldWUtPnNpbmtwYWQsIGV2ZW50KTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChxdWV1ZSk7CisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3F1ZXVlX2hhbmRsZV9zcmNfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0UXVlcnkgKiBxdWVyeSkKK3sKKyAgR3N0UXVldWUgKnF1ZXVlID0gR1NUX1FVRVVFIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOworICBHc3RQYWQgKnBlZXI7CisgIGdib29sZWFuIHJlczsKKworICBpZiAoR19VTkxJS0VMWSAocXVldWUgPT0gTlVMTCkpCisgICAgcmV0dXJuIEZBTFNFOworCisgIGlmICghKHBlZXIgPSBnc3RfcGFkX2dldF9wZWVyIChxdWV1ZS0+c2lua3BhZCkpKSB7CisgICAgZ3N0X29iamVjdF91bnJlZiAocXVldWUpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorCisgIHJlcyA9IGdzdF9wYWRfcXVlcnkgKHBlZXIsIHF1ZXJ5KTsKKyAgZ3N0X29iamVjdF91bnJlZiAocGVlcik7CisgIGlmICghcmVzKSB7CisgICAgZ3N0X29iamVjdF91bnJlZiAocXVldWUpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorCisgIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgeworICAgIGNhc2UgR1NUX1FVRVJZX1BPU0lUSU9OOgorICAgIHsKKyAgICAgIGdpbnQ2NCBwZWVyX3BvczsKKyAgICAgIEdzdEZvcm1hdCBmb3JtYXQ7CisKKyAgICAgIC8qIGdldCBwZWVyIHBvc2l0aW9uICovCisgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24gKHF1ZXJ5LCAmZm9ybWF0LCAmcGVlcl9wb3MpOworCisgICAgICAvKiBGSVhNRTogdGhpcyBjb2RlIGFzc3VtZXMgdGhhdCB0aGVyZSdzIG5vIGRpc2NvbnQgaW4gdGhlIHF1ZXVlICovCisgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICBjYXNlIEdTVF9GT1JNQVRfQllURVM6CisgICAgICAgICAgcGVlcl9wb3MgLT0gcXVldWUtPmN1cl9sZXZlbC5ieXRlczsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHU1RfRk9STUFUX1RJTUU6CisgICAgICAgICAgcGVlcl9wb3MgLT0gcXVldWUtPmN1cl9sZXZlbC50aW1lOworICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAiQ2FuJ3QgYWRqdXN0IHF1ZXJ5IGluICVzIGZvcm1hdCwgZG9uJ3QgIgorICAgICAgICAgICAgICAia25vdyBob3cgdG8gYWRqdXN0IHZhbHVlIiwgZ3N0X2Zvcm1hdF9nZXRfbmFtZSAoZm9ybWF0KSk7CisgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICB9CisgICAgICAvKiBzZXQgdXBkYXRlZCBwb3NpdGlvbiAqLworICAgICAgZ3N0X3F1ZXJ5X3NldF9wb3NpdGlvbiAocXVlcnksIGZvcm1hdCwgcGVlcl9wb3MpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX1FVRVJZX0xBVEVOQ1k6CisgICAgeworICAgICAgZ2Jvb2xlYW4gbGl2ZTsKKyAgICAgIEdzdENsb2NrVGltZSBtaW4sIG1heDsKKworICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2xhdGVuY3kgKHF1ZXJ5LCAmbGl2ZSwgJm1pbiwgJm1heCk7CisKKyAgICAgIC8qIHdlIGNhbiBkZWxheSB1cCB0byB0aGUgbGltaXQgb2YgdGhlIHF1ZXVlIGluIHRpbWUuIElmIHdlIGhhdmUgbm8gdGltZQorICAgICAgICogbGltaXQsIHRoZSBiZXN0IHRoaW5nIHdlIGNhbiBkbyBpcyB0byByZXR1cm4gYW4gaW5maW5pdGUgZGVsYXkuIEluCisgICAgICAgKiByZWFsaXR5IGEgYmV0dGVyIGVzdGltYXRlIHdvdWxkIGJlIHRoZSBieXRlL2J1ZmZlciByYXRlIGJ1dCB0aGF0IGlzIG5vdAorICAgICAgICogcG9zc2libGUgcmlnaHQgbm93LiAqLworICAgICAgaWYgKHF1ZXVlLT5tYXhfc2l6ZS50aW1lID4gMCAmJiBtYXggIT0gLTEpCisgICAgICAgIG1heCArPSBxdWV1ZS0+bWF4X3NpemUudGltZTsKKyAgICAgIGVsc2UKKyAgICAgICAgbWF4ID0gLTE7CisKKyAgICAgIC8qIGFkanVzdCBmb3IgbWluLXRocmVzaG9sZCAqLworICAgICAgaWYgKHF1ZXVlLT5taW5fdGhyZXNob2xkLnRpbWUgPiAwICYmIG1pbiAhPSAtMSkKKyAgICAgICAgbWluICs9IHF1ZXVlLT5taW5fdGhyZXNob2xkLnRpbWU7CisKKyAgICAgIGdzdF9xdWVyeV9zZXRfbGF0ZW5jeSAocXVlcnksIGxpdmUsIG1pbiwgbWF4KTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgLyogcGVlciBoYW5kbGVkIG90aGVyIHF1ZXJpZXMgKi8KKyAgICAgIGJyZWFrOworICB9CisKKyAgZ3N0X29iamVjdF91bnJlZiAocXVldWUpOworICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfcXVldWVfc2lua19hY3RpdmF0ZV9wdXNoIChHc3RQYWQgKiBwYWQsIGdib29sZWFuIGFjdGl2ZSkKK3sKKyAgZ2Jvb2xlYW4gcmVzdWx0ID0gVFJVRTsKKyAgR3N0UXVldWUgKnF1ZXVlOworCisgIHF1ZXVlID0gR1NUX1FVRVVFIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOworCisgIGlmIChhY3RpdmUpIHsKKyAgICBHU1RfUVVFVUVfTVVURVhfTE9DSyAocXVldWUpOworICAgIHF1ZXVlLT5zcmNyZXN1bHQgPSBHU1RfRkxPV19PSzsKKyAgICBxdWV1ZS0+ZW9zID0gRkFMU0U7CisgICAgcXVldWUtPnVuZXhwZWN0ZWQgPSBGQUxTRTsKKyAgICBHU1RfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7CisgIH0gZWxzZSB7CisgICAgLyogc3RlcCAxLCB1bmJsb2NrIGNoYWluIGZ1bmN0aW9uICovCisgICAgR1NUX1FVRVVFX01VVEVYX0xPQ0sgKHF1ZXVlKTsKKyAgICBxdWV1ZS0+c3JjcmVzdWx0ID0gR1NUX0ZMT1dfV1JPTkdfU1RBVEU7CisgICAgZ3N0X3F1ZXVlX2xvY2tlZF9mbHVzaCAocXVldWUpOworICAgIEdTVF9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKKyAgfQorCisgIGdzdF9vYmplY3RfdW5yZWYgKHF1ZXVlKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9xdWV1ZV9zcmNfYWN0aXZhdGVfcHVzaCAoR3N0UGFkICogcGFkLCBnYm9vbGVhbiBhY3RpdmUpCit7CisgIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOworICBHc3RRdWV1ZSAqcXVldWU7CisKKyAgcXVldWUgPSBHU1RfUVVFVUUgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7CisKKyAgaWYgKGFjdGl2ZSkgeworICAgIEdTVF9RVUVVRV9NVVRFWF9MT0NLIChxdWV1ZSk7CisgICAgcXVldWUtPnNyY3Jlc3VsdCA9IEdTVF9GTE9XX09LOworICAgIHF1ZXVlLT5lb3MgPSBGQUxTRTsKKyAgICBxdWV1ZS0+dW5leHBlY3RlZCA9IEZBTFNFOworICAgIC8qIHdlIGRvIG5vdCBzdGFydCB0aGUgdGFzayB5ZXQgaWYgdGhlIHBhZCBpcyBub3QgY29ubmVjdGVkICovCisgICAgaWYgKGdzdF9wYWRfaXNfbGlua2VkIChwYWQpKQorICAgICAgcmVzdWx0ID0gZ3N0X3BhZF9zdGFydF90YXNrIChwYWQsIChHc3RUYXNrRnVuY3Rpb24pIGdzdF9xdWV1ZV9sb29wLCBwYWQpOworICAgIGVsc2UgeworICAgICAgR1NUX0lORk9fT0JKRUNUIChxdWV1ZSwgIm5vdCBzdGFydGluZyB0YXNrIGFzIHBhZCBpcyBub3QgbGlua2VkIik7CisgICAgICByZXN1bHQgPSBUUlVFOworICAgIH0KKyAgICBHU1RfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7CisgIH0gZWxzZSB7CisgICAgLyogc3RlcCAxLCB1bmJsb2NrIGxvb3AgZnVuY3Rpb24gKi8KKyAgICBHU1RfUVVFVUVfTVVURVhfTE9DSyAocXVldWUpOworICAgIHF1ZXVlLT5zcmNyZXN1bHQgPSBHU1RfRkxPV19XUk9OR19TVEFURTsKKyAgICAvKiB0aGUgaXRlbSBhZGQgc2lnbmFsIHdpbGwgdW5ibG9jayAqLworICAgIGdfY29uZF9zaWduYWwgKHF1ZXVlLT5pdGVtX2FkZCk7CisgICAgR1NUX1FVRVVFX01VVEVYX1VOTE9DSyAocXVldWUpOworCisgICAgLyogc3RlcCAyLCBtYWtlIHN1cmUgc3RyZWFtaW5nIGZpbmlzaGVzICovCisgICAgcmVzdWx0ID0gZ3N0X3BhZF9zdG9wX3Rhc2sgKHBhZCk7CisgIH0KKworICBnc3Rfb2JqZWN0X3VucmVmIChxdWV1ZSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK3F1ZXVlX2NhcGFjaXR5X2NoYW5nZSAoR3N0UXVldWUgKiBxdWV1ZSkKK3sKKyAgaWYgKHF1ZXVlLT5sZWFreSA9PSBHU1RfUVVFVUVfTEVBS19ET1dOU1RSRUFNKSB7CisgICAgZ3N0X3F1ZXVlX2xlYWtfZG93bnN0cmVhbSAocXVldWUpOworICB9CisKKyAgLyogY2hhbmdpbmcgdGhlIGNhcGFjaXR5IG9mIHRoZSBxdWV1ZSBtdXN0IHdha2UgdXAKKyAgICogdGhlIF9jaGFpbiBmdW5jdGlvbiwgaXQgbWlnaHQgaGF2ZSBtb3JlIHJvb20gbm93CisgICAqIHRvIHN0b3JlIHRoZSBidWZmZXIvZXZlbnQgaW4gdGhlIHF1ZXVlICovCisgIEdTVF9RVUVVRV9TSUdOQUxfREVMIChxdWV1ZSk7Cit9CisKKy8qIENoYW5naW5nIHRoZSBtaW5pbXVtIHJlcXVpcmVkIGZpbGwgbGV2ZWwgbXVzdAorICogd2FrZSB1cCB0aGUgX2xvb3AgZnVuY3Rpb24gYXMgaXQgbWlnaHQgbm93CisgKiBiZSBhYmxlIHRvIHByZWNlZWQuCisgKi8KKyNkZWZpbmUgUVVFVUVfVEhSRVNIT0xEX0NIQU5HRShxKVwKKyAgR1NUX1FVRVVFX1NJR05BTF9BREQgKHEpOworCitzdGF0aWMgdm9pZAorZ3N0X3F1ZXVlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKKyAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQoreworICBHc3RRdWV1ZSAqcXVldWUgPSBHU1RfUVVFVUUgKG9iamVjdCk7CisKKyAgLyogc29tZW9uZSBjb3VsZCBjaGFuZ2UgbGV2ZWxzIGhlcmUsIGFuZCBzaW5jZSB0aGlzCisgICAqIGFmZmVjdHMgdGhlIGdldC9wdXQgZnVuY3MsIHdlIG5lZWQgdG8gbG9jayBmb3Igc2FmZXR5LiAqLworICBHU1RfUVVFVUVfTVVURVhfTE9DSyAocXVldWUpOworCisgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9NQVhfU0laRV9CWVRFUzoKKyAgICAgIHF1ZXVlLT5tYXhfc2l6ZS5ieXRlcyA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKKyAgICAgIHF1ZXVlX2NhcGFjaXR5X2NoYW5nZSAocXVldWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01BWF9TSVpFX0JVRkZFUlM6CisgICAgICBxdWV1ZS0+bWF4X3NpemUuYnVmZmVycyA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKKyAgICAgIHF1ZXVlX2NhcGFjaXR5X2NoYW5nZSAocXVldWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01BWF9TSVpFX1RJTUU6CisgICAgICBxdWV1ZS0+bWF4X3NpemUudGltZSA9IGdfdmFsdWVfZ2V0X3VpbnQ2NCAodmFsdWUpOworICAgICAgcXVldWVfY2FwYWNpdHlfY2hhbmdlIChxdWV1ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUlOX1RIUkVTSE9MRF9CWVRFUzoKKyAgICAgIHF1ZXVlLT5taW5fdGhyZXNob2xkLmJ5dGVzID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOworICAgICAgcXVldWUtPm9yaWdfbWluX3RocmVzaG9sZC5ieXRlcyA9IHF1ZXVlLT5taW5fdGhyZXNob2xkLmJ5dGVzOworICAgICAgUVVFVUVfVEhSRVNIT0xEX0NIQU5HRSAocXVldWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01JTl9USFJFU0hPTERfQlVGRkVSUzoKKyAgICAgIHF1ZXVlLT5taW5fdGhyZXNob2xkLmJ1ZmZlcnMgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7CisgICAgICBxdWV1ZS0+b3JpZ19taW5fdGhyZXNob2xkLmJ1ZmZlcnMgPSBxdWV1ZS0+bWluX3RocmVzaG9sZC5idWZmZXJzOworICAgICAgUVVFVUVfVEhSRVNIT0xEX0NIQU5HRSAocXVldWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01JTl9USFJFU0hPTERfVElNRToKKyAgICAgIHF1ZXVlLT5taW5fdGhyZXNob2xkLnRpbWUgPSBnX3ZhbHVlX2dldF91aW50NjQgKHZhbHVlKTsKKyAgICAgIHF1ZXVlLT5vcmlnX21pbl90aHJlc2hvbGQudGltZSA9IHF1ZXVlLT5taW5fdGhyZXNob2xkLnRpbWU7CisgICAgICBRVUVVRV9USFJFU0hPTERfQ0hBTkdFIChxdWV1ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTEVBS1k6CisgICAgICBxdWV1ZS0+bGVha3kgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0lMRU5UOgorICAgICAgcXVldWUtPnNpbGVudCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KKworICBHU1RfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfcXVldWVfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAorICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIEdzdFF1ZXVlICpxdWV1ZSA9IEdTVF9RVUVVRSAob2JqZWN0KTsKKworICBHU1RfUVVFVUVfTVVURVhfTE9DSyAocXVldWUpOworCisgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9DVVJfTEVWRUxfQllURVM6CisgICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgcXVldWUtPmN1cl9sZXZlbC5ieXRlcyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ1VSX0xFVkVMX0JVRkZFUlM6CisgICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgcXVldWUtPmN1cl9sZXZlbC5idWZmZXJzKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DVVJfTEVWRUxfVElNRToKKyAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAodmFsdWUsIHF1ZXVlLT5jdXJfbGV2ZWwudGltZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUFYX1NJWkVfQllURVM6CisgICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgcXVldWUtPm1heF9zaXplLmJ5dGVzKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVhfU0laRV9CVUZGRVJTOgorICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHF1ZXVlLT5tYXhfc2l6ZS5idWZmZXJzKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVhfU0laRV9USU1FOgorICAgICAgZ192YWx1ZV9zZXRfdWludDY0ICh2YWx1ZSwgcXVldWUtPm1heF9zaXplLnRpbWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01JTl9USFJFU0hPTERfQllURVM6CisgICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgcXVldWUtPm1pbl90aHJlc2hvbGQuYnl0ZXMpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01JTl9USFJFU0hPTERfQlVGRkVSUzoKKyAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBxdWV1ZS0+bWluX3RocmVzaG9sZC5idWZmZXJzKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NSU5fVEhSRVNIT0xEX1RJTUU6CisgICAgICBnX3ZhbHVlX3NldF91aW50NjQgKHZhbHVlLCBxdWV1ZS0+bWluX3RocmVzaG9sZC50aW1lKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MRUFLWToKKyAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBxdWV1ZS0+bGVha3kpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NJTEVOVDoKKyAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBxdWV1ZS0+c2lsZW50KTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KKworICBHU1RfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7Cit9CmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmggYi9wbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFiODYxNwotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuaApAQCAtMCwwICsxLDE1MSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgorICoKKyAqIGdzdHF1ZXVlLmg6CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworCisjaWZuZGVmIF9fR1NUX1FVRVVFX0hfXworI2RlZmluZSBfX0dTVF9RVUVVRV9IX18KKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEdTVF9UWVBFX1FVRVVFIFwKKyAgKGdzdF9xdWV1ZV9nZXRfdHlwZSgpKQorI2RlZmluZSBHU1RfUVVFVUUob2JqKSBcCisgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9RVUVVRSxHc3RRdWV1ZSkpCisjZGVmaW5lIEdTVF9RVUVVRV9DTEFTUyhrbGFzcykgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9RVUVVRSxHc3RRdWV1ZUNsYXNzKSkKKyNkZWZpbmUgR1NUX0lTX1FVRVVFKG9iaikgXAorICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUVVFVUUpKQorI2RlZmluZSBHU1RfSVNfUVVFVUVfQ0xBU1Moa2xhc3MpIFwKKyAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUVVFVUUpKQorCit0eXBlZGVmIHN0cnVjdCBfR3N0UXVldWUgR3N0UXVldWU7Cit0eXBlZGVmIHN0cnVjdCBfR3N0UXVldWVTaXplIEdzdFF1ZXVlU2l6ZTsKK3R5cGVkZWYgZW51bSBfR3N0UXVldWVMZWFreSBHc3RRdWV1ZUxlYWt5OwordHlwZWRlZiBzdHJ1Y3QgX0dzdFF1ZXVlQ2xhc3MgR3N0UXVldWVDbGFzczsKKworLyoqCisgKiBHc3RRdWV1ZUxlYWt5OgorICogQEdTVF9RVUVVRV9OT19MRUFLOiBOb3QgTGVha3kKKyAqIEBHU1RfUVVFVUVfTEVBS19VUFNUUkVBTTogTGVha3kgb24gdXBzdHJlYW0gKG5ldyBidWZmZXJzKQorICogQEdTVF9RVUVVRV9MRUFLX0RPV05TVFJFQU06IExlYWt5IG9uIGRvd25zdHJlYW0gKG9sZCBidWZmZXJzKQorICoKKyAqIEJ1ZmZlciBkcm9wcGluZyBzY2hlbWUgdG8gYXZvaWQgdGhlIHF1ZXVlIHRvIGJsb2NrIHdoZW4gZnVsbC4KKyAqLworZW51bSBfR3N0UXVldWVMZWFreSB7CisgIEdTVF9RVUVVRV9OT19MRUFLICAgICAgICAgICAgID0gMCwKKyAgR1NUX1FVRVVFX0xFQUtfVVBTVFJFQU0gICAgICAgPSAxLAorICBHU1RfUVVFVUVfTEVBS19ET1dOU1RSRUFNICAgICA9IDIKK307CisKKy8qCisgKiBHc3RRdWV1ZVNpemU6CisgKiBAYnVmZmVyczogbnVtYmVyIG9mIGJ1ZmZlcnMKKyAqIEBieXRlczogbnVtYmVyIG9mIGJ5dGVzCisgKiBAdGltZTogYW1vdW50IG9mIHRpbWUKKyAqCisgKiBTdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgc2l6ZSBvZiBhIHF1ZXVlLgorICovCitzdHJ1Y3QgX0dzdFF1ZXVlU2l6ZSB7CisgICAgZ3VpbnQgICBidWZmZXJzOworICAgIGd1aW50ICAgYnl0ZXM7CisgICAgZ3VpbnQ2NCB0aW1lOworfTsKKworI2RlZmluZSBHU1RfUVVFVUVfQ0xFQVJfTEVWRUwobCkgR19TVE1UX1NUQVJUIHsgICAgICAgICBcCisgIGwuYnVmZmVycyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgbC5ieXRlcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBsLnRpbWUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IEdfU1RNVF9FTkQKKworLyoqCisgKiBHc3RRdWV1ZToKKyAqCisgKiBPcGFxdWUgI0dzdFF1ZXVlIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IF9Hc3RRdWV1ZSB7CisgIEdzdEVsZW1lbnQgZWxlbWVudDsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgR3N0UGFkICpzaW5rcGFkOworICBHc3RQYWQgKnNyY3BhZDsKKworICAvKiBzZWdtZW50cyB0byBrZWVwIHRyYWNrIG9mIHRpbWVzdGFtcHMgKi8KKyAgR3N0U2VnbWVudCBzaW5rX3NlZ21lbnQ7CisgIEdzdFNlZ21lbnQgc3JjX3NlZ21lbnQ7CisKKyAgLyogcG9zaXRpb24gb2Ygc3JjL3NpbmsgKi8KKyAgR3N0Q2xvY2tUaW1lIHNpbmt0aW1lLCBzcmN0aW1lOworICAvKiBUUlVFIGlmIGVpdGhlciBwb3NpdGlvbiBuZWVkcyB0byBiZSByZWNhbGN1bGF0ZWQgKi8KKyAgZ2Jvb2xlYW4gc2lua190YWludGVkLCBzcmNfdGFpbnRlZDsKKworICAvKiBmbG93cmV0dXJuIHdoZW4gc3JjcGFkIGlzIHBhdXNlZCAqLworICBHc3RGbG93UmV0dXJuIHNyY3Jlc3VsdDsKKyAgZ2Jvb2xlYW4gICAgICB1bmV4cGVjdGVkOworICBnYm9vbGVhbiAgICAgIGVvczsKKworICAvKiB0aGUgcXVldWUgb2YgZGF0YSB3ZSdyZSBrZWVwaW5nIG91ciBncnViYnkgaGFuZHMgb24gKi8KKyAgR1F1ZXVlICpxdWV1ZTsKKworICBHc3RRdWV1ZVNpemUKKyAgICBjdXJfbGV2ZWwsICAgICAgICAgIC8qIGN1cnJlbnRseSBpbiB0aGUgcXVldWUgKi8KKyAgICBtYXhfc2l6ZSwgICAgICAgICAgIC8qIG1heC4gYW1vdW50IG9mIGRhdGEgYWxsb3dlZCBpbiB0aGUgcXVldWUgKi8KKyAgICBtaW5fdGhyZXNob2xkLCAgICAgIC8qIG1pbi4gYW1vdW50IG9mIGRhdGEgcmVxdWlyZWQgdG8gd2FrZSByZWFkZXIgKi8KKyAgICBvcmlnX21pbl90aHJlc2hvbGQ7IC8qIE9yaWdpbmFsIG1pbi50aHJlc2hvbGQsIGZvciByZXNldCBpbiBFT1MgKi8KKworICAvKiB3aGV0aGVyIHdlIGxlYWsgZGF0YSwgYW5kIGF0IHdoaWNoIGVuZCAqLworICBnaW50IGxlYWt5OworCisgIEdNdXRleCAqcWxvY2s7ICAgICAgICAvKiBsb2NrIGZvciBxdWV1ZSAodnMgb2JqZWN0IGxvY2spICovCisgIGdib29sZWFuIHdhaXRpbmdfYWRkOworICBHQ29uZCAqaXRlbV9hZGQ7ICAgICAgLyogc2lnbmFscyBidWZmZXJzIG5vdyBhdmFpbGFibGUgZm9yIHJlYWRpbmcgKi8KKyAgZ2Jvb2xlYW4gd2FpdGluZ19kZWw7CisgIEdDb25kICppdGVtX2RlbDsgICAgICAvKiBzaWduYWxzIHNwYWNlIG5vdyBhdmFpbGFibGUgZm9yIHdyaXRpbmcgKi8KKworICBnYm9vbGVhbiBoZWFkX25lZWRzX2Rpc2NvbnQsIHRhaWxfbmVlZHNfZGlzY29udDsKKyAgZ2Jvb2xlYW4gcHVzaF9uZXdzZWdtZW50OworCisgIGdib29sZWFuIHNpbGVudDsgICAgICAvKiBkb24ndCBlbWl0IHNpZ25hbHMgKi8KKworICAvKiB3aGV0aGVyIHRoZSBmaXJzdCBuZXcgc2VnbWVudCBoYXMgYmVlbiBhcHBsaWVkIHRvIHNyYyAqLworICBnYm9vbGVhbiBuZXdzZWdfYXBwbGllZF90b19zcmM7Cit9OworCitzdHJ1Y3QgX0dzdFF1ZXVlQ2xhc3MgeworICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworCisgIC8qIHNpZ25hbHMgLSAncnVubmluZycgaXMgY2FsbGVkIGZyb20gYm90aCBzaWRlcworICAgKiB3aGljaCBtaWdodCBtYWtlIGl0IHNvcnQgb2Ygbm9uLXVzZWZ1bC4uLiAqLworICB2b2lkICgqdW5kZXJydW4pICAgICAgKEdzdFF1ZXVlICpxdWV1ZSk7CisgIHZvaWQgKCpydW5uaW5nKSAgICAgICAoR3N0UXVldWUgKnF1ZXVlKTsKKyAgdm9pZCAoKm92ZXJydW4pICAgICAgIChHc3RRdWV1ZSAqcXVldWUpOworCisgIHZvaWQgKCpwdXNoaW5nKSAgICAgICAoR3N0UXVldWUgKnF1ZXVlKTsKK307CisKK0dUeXBlIGdzdF9xdWV1ZV9nZXRfdHlwZSAodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKworI2VuZGlmIC8qIF9fR1NUX1FVRVVFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg5YzZjZAotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmMKQEAgLTAsMCArMSwzMDYzIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwMyBDb2xpbiBXYWx0ZXJzIDxjd2FsdGVyc0Bnbm9tZS5vcmc+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwMCwyMDA1LDIwMDcgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKyAqICAgICAgICAgICAgICAgICAgICAyMDA3IFRoaWFnbyBTb3VzYSBTYW50b3MgPHRoaWFnb3NzQGxjYy51ZmNnLmVkdS5icj4KKyAqICAgICAgICAgICAgICAgICBTQSAyMDEwIFNULUVyaWNzc29uIDxiZW5qYW1pbi5nYWlnbmFyZEBzdGVyaWNzc29uLmNvbT4KKyAqCisgKiBnc3RxdWV1ZTIuYzoKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKioKKyAqIFNFQ1RJT046ZWxlbWVudC1xdWV1ZTIKKyAqCisgKiBEYXRhIGlzIHF1ZXVlZCB1bnRpbCBvbmUgb2YgdGhlIGxpbWl0cyBzcGVjaWZpZWQgYnkgdGhlCisgKiAjR3N0UXVldWUyOm1heC1zaXplLWJ1ZmZlcnMsICNHc3RRdWV1ZTI6bWF4LXNpemUtYnl0ZXMgYW5kL29yCisgKiAjR3N0UXVldWUyOm1heC1zaXplLXRpbWUgcHJvcGVydGllcyBoYXMgYmVlbiByZWFjaGVkLiBBbnkgYXR0ZW1wdCB0byBwdXNoCisgKiBtb3JlIGJ1ZmZlcnMgaW50byB0aGUgcXVldWUgd2lsbCBibG9jayB0aGUgcHVzaGluZyB0aHJlYWQgdW50aWwgbW9yZSBzcGFjZQorICogYmVjb21lcyBhdmFpbGFibGUuCisgKgorICogVGhlIHF1ZXVlIHdpbGwgY3JlYXRlIGEgbmV3IHRocmVhZCBvbiB0aGUgc291cmNlIHBhZCB0byBkZWNvdXBsZSB0aGUKKyAqIHByb2Nlc3Npbmcgb24gc2luayBhbmQgc291cmNlIHBhZC4KKyAqCisgKiBZb3UgY2FuIHF1ZXJ5IGhvdyBtYW55IGJ1ZmZlcnMgYXJlIHF1ZXVlZCBieSByZWFkaW5nIHRoZQorICogI0dzdFF1ZXVlMjpjdXJyZW50LWxldmVsLWJ1ZmZlcnMgcHJvcGVydHkuCisgKgorICogVGhlIGRlZmF1bHQgcXVldWUgc2l6ZSBsaW1pdHMgYXJlIDEwMCBidWZmZXJzLCAyTUIgb2YgZGF0YSwgb3IKKyAqIHR3byBzZWNvbmRzIHdvcnRoIG9mIGRhdGEsIHdoaWNoZXZlciBpcyByZWFjaGVkIGZpcnN0LgorICoKKyAqIElmIHlvdSBzZXQgdGVtcC10bXBsIHRvIGEgdmFsdWUgc3VjaCBhcyAvdG1wL2dzdHJlYW1lci1YWFhYWFgsIHRoZSBlbGVtZW50CisgKiB3aWxsIGFsbG9jYXRlIGEgcmFuZG9tIGZyZWUgZmlsZW5hbWUgYW5kIGJ1ZmZlciBkYXRhIGluIHRoZSBmaWxlLgorICogQnkgdXNpbmcgdGhpcywgaXQgd2lsbCBidWZmZXIgdGhlIGVudGlyZSBzdHJlYW0gZGF0YSBvbiB0aGUgZmlsZSBpbmRlcGVuZGVudGx5CisgKiBvZiB0aGUgcXVldWUgc2l6ZSBsaW1pdHMsIHRoZXkgd2lsbCBvbmx5IGJlIHVzZWQgZm9yIGJ1ZmZlcmluZyBzdGF0aXN0aWNzLgorICoKKyAqIFNpbmNlIDAuMTAuMjQsIHNldHRpbmcgdGhlIHRlbXAtbG9jYXRpb24gcHJvcGVydHkgd2l0aCBhIGZpbGVuYW1lIGlzIGRlcHJlY2F0ZWQKKyAqIGJlY2F1c2UgaXQncyBpbXBvc3NpYmxlIHRvIHNlY3VyZWx5IG9wZW4gYSB0ZW1wb3JhcnkgZmlsZSBpbiB0aGlzIHdheS4gVGhlCisgKiBwcm9wZXJ0eSB3aWxsIHN0aWxsIGJlIHVzZWQgdG8gbm90aWZ5IHRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgYWxsb2NhdGVkCisgKiBmaWxlbmFtZSwgdGhvdWdoLgorICoKKyAqIExhc3QgcmV2aWV3ZWQgb24gMjAwOS0wNy0xMCAoMC4xMC4yNCkKKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJnc3RxdWV1ZTIuaCIKKworI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisKKyNpbmNsdWRlICJnc3QvZ3N0LWkxOG4tbGliLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmZGVmIEdfT1NfV0lOMzIKKyNpbmNsdWRlIDxpby5oPiAgICAgICAgICAgICAgICAgLyogbHNlZWssIG9wZW4sIGNsb3NlLCByZWFkICovCisjdW5kZWYgbHNlZWsKKyNkZWZpbmUgbHNlZWsgX2xzZWVraTY0CisjdW5kZWYgb2ZmX3QKKyNkZWZpbmUgb2ZmX3QgZ3VpbnQ2NAorI2Vsc2UKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKKyAgICBHU1RfUEFEX1NJTkssCisgICAgR1NUX1BBRF9BTFdBWVMsCisgICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7CisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKKyAgICBHU1RfUEFEX1NSQywKKyAgICBHU1RfUEFEX0FMV0FZUywKKyAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKKworR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocXVldWVfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKHF1ZXVlX2RlYnVnKQorR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocXVldWVfZGF0YWZsb3cpOworCitlbnVtCit7CisgIExBU1RfU0lHTkFMCit9OworCisvKiBvdGhlciBkZWZpbmVzICovCisjZGVmaW5lIERFRkFVTFRfQlVGRkVSX1NJWkUgNDA5NgorI2RlZmluZSBRVUVVRV9JU19VU0lOR19URU1QX0ZJTEUocXVldWUpICgocXVldWUpLT50ZW1wX2xvY2F0aW9uX3NldCB8fCAocXVldWUpLT50ZW1wX3RlbXBsYXRlICE9IE5VTEwpCisjZGVmaW5lIFFVRVVFX0lTX1VTSU5HX1JJTkdfQlVGRkVSKHF1ZXVlKSAoKHF1ZXVlKS0+cmluZ19idWZmZXJfbWF4X3NpemUgIT0gMCkgIC8qIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBhYm92ZSBtYWNybyAqLworI2RlZmluZSBRVUVVRV9JU19VU0lOR19RVUVVRShxdWV1ZSkgKCFRVUVVRV9JU19VU0lOR19URU1QX0ZJTEUocXVldWUpICYmICFRVUVVRV9JU19VU0lOR19SSU5HX0JVRkZFUiAocXVldWUpKQorCisjZGVmaW5lIFFVRVVFX01BWF9CWVRFUyhxdWV1ZSkgTUlOKChxdWV1ZSktPm1heF9sZXZlbC5ieXRlcywgKHF1ZXVlKS0+cmluZ19idWZmZXJfbWF4X3NpemUpCisKKy8qIGRlZmF1bHQgcHJvcGVydHkgdmFsdWVzICovCisjZGVmaW5lIERFRkFVTFRfTUFYX1NJWkVfQlVGRkVSUyAgIDEwMCAgLyogMTAwIGJ1ZmZlcnMgKi8KKyNkZWZpbmUgREVGQVVMVF9NQVhfU0laRV9CWVRFUyAgICAgKDIgKiAxMDI0ICogMTAyNCkgICAgLyogMiBNQiAqLworI2RlZmluZSBERUZBVUxUX01BWF9TSVpFX1RJTUUgICAgICAyICogR1NUX1NFQ09ORCAgICAgICAvKiAyIHNlY29uZHMgKi8KKyNkZWZpbmUgREVGQVVMVF9VU0VfQlVGRkVSSU5HICAgICAgRkFMU0UKKyNkZWZpbmUgREVGQVVMVF9VU0VfUkFURV9FU1RJTUFURSAgVFJVRQorI2RlZmluZSBERUZBVUxUX0xPV19QRVJDRU5UICAgICAgICAxMAorI2RlZmluZSBERUZBVUxUX0hJR0hfUEVSQ0VOVCAgICAgICA5OQorI2RlZmluZSBERUZBVUxUX1RFTVBfUkVNT1ZFICAgICAgICBUUlVFCisjZGVmaW5lIERFRkFVTFRfUklOR19CVUZGRVJfTUFYX1NJWkUgMAorCitlbnVtCit7CisgIFBST1BfMCwKKyAgUFJPUF9DVVJfTEVWRUxfQlVGRkVSUywKKyAgUFJPUF9DVVJfTEVWRUxfQllURVMsCisgIFBST1BfQ1VSX0xFVkVMX1RJTUUsCisgIFBST1BfTUFYX1NJWkVfQlVGRkVSUywKKyAgUFJPUF9NQVhfU0laRV9CWVRFUywKKyAgUFJPUF9NQVhfU0laRV9USU1FLAorICBQUk9QX1VTRV9CVUZGRVJJTkcsCisgIFBST1BfVVNFX1JBVEVfRVNUSU1BVEUsCisgIFBST1BfTE9XX1BFUkNFTlQsCisgIFBST1BfSElHSF9QRVJDRU5ULAorICBQUk9QX1RFTVBfVEVNUExBVEUsCisgIFBST1BfVEVNUF9MT0NBVElPTiwKKyAgUFJPUF9URU1QX1JFTU9WRSwKKyAgUFJPUF9SSU5HX0JVRkZFUl9NQVhfU0laRSwKKyAgUFJPUF9MQVNUCit9OworCisjZGVmaW5lIEdTVF9RVUVVRTJfQ0xFQVJfTEVWRUwobCkgR19TVE1UX1NUQVJUIHsgICAgICAgICBcCisgIGwuYnVmZmVycyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgbC5ieXRlcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBsLnRpbWUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGwucmF0ZV90aW1lID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gR19TVE1UX0VORAorCisjZGVmaW5lIFNUQVRVUyhxdWV1ZSwgcGFkLCBtc2cpIFwKKyAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAiKCVzOiVzKSAiIG1zZyAiOiAldSBvZiAldSBidWZmZXJzLCAldSBvZiAldSAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAiYnl0ZXMsICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBvZiAlIiBHX0dVSU5UNjRfRk9STUFUIFwKKyAgICAgICAgICAgICAgICAgICAgICAiIG5zLCAlIkdfR1VJTlQ2NF9GT1JNQVQiIGl0ZW1zIiwgXAorICAgICAgICAgICAgICAgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSwgXAorICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLT5jdXJfbGV2ZWwuYnVmZmVycywgXAorICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLT5tYXhfbGV2ZWwuYnVmZmVycywgXAorICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLT5jdXJfbGV2ZWwuYnl0ZXMsIFwKKyAgICAgICAgICAgICAgICAgICAgICBxdWV1ZS0+bWF4X2xldmVsLmJ5dGVzLCBcCisgICAgICAgICAgICAgICAgICAgICAgcXVldWUtPmN1cl9sZXZlbC50aW1lLCBcCisgICAgICAgICAgICAgICAgICAgICAgcXVldWUtPm1heF9sZXZlbC50aW1lLCBcCisgICAgICAgICAgICAgICAgICAgICAgKGd1aW50NjQpICghUVVFVUVfSVNfVVNJTkdfUVVFVUUocXVldWUpID8gXAorICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUtPmN1cnJlbnQtPndyaXRpbmdfcG9zIC0gcXVldWUtPmN1cnJlbnQtPm1heF9yZWFkaW5nX3BvcyA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLT5xdWV1ZS0+bGVuZ3RoKSkKKworI2RlZmluZSBHU1RfUVVFVUUyX01VVEVYX0xPQ0socSkgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZ19tdXRleF9sb2NrIChxLT5xbG9jayk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gR19TVE1UX0VORAorCisjZGVmaW5lIEdTVF9RVUVVRTJfTVVURVhfTE9DS19DSEVDSyhxLHJlcyxsYWJlbCkgR19TVE1UX1NUQVJUIHsgICAgICAgICBcCisgIEdTVF9RVUVVRTJfTVVURVhfTE9DSyAocSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmIChyZXMgIT0gR1NUX0ZMT1dfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ290byBsYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IEdfU1RNVF9FTkQKKworI2RlZmluZSBHU1RfUVVFVUUyX01VVEVYX1VOTE9DSyhxKSBHX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZ19tdXRleF91bmxvY2sgKHEtPnFsb2NrKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gR19TVE1UX0VORAorCisjZGVmaW5lIEdTVF9RVUVVRTJfV0FJVF9ERUxfQ0hFQ0socSwgcmVzLCBsYWJlbCkgR19TVE1UX1NUQVJUIHsgICAgICAgICBcCisgIFNUQVRVUyAocXVldWUsIHEtPnNpbmtwYWQsICJ3YWl0IGZvciBERUwiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHEtPndhaXRpbmdfZGVsID0gVFJVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGdfY29uZF93YWl0IChxLT5pdGVtX2RlbCwgcXVldWUtPnFsb2NrKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHEtPndhaXRpbmdfZGVsID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmIChyZXMgIT0gR1NUX0ZMT1dfT0spIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgU1RBVFVTIChxdWV1ZSwgcS0+c3JjcGFkLCAicmVjZWl2ZWQgREVMIHdha2V1cCIpOyAgICAgICAgICAgICAgICAgICBcCisgICAgZ290byBsYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIFNUQVRVUyAocXVldWUsIHEtPnNpbmtwYWQsICJyZWNlaXZlZCBERUwiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IEdfU1RNVF9FTkQKKworI2RlZmluZSBHU1RfUVVFVUUyX1dBSVRfQUREX0NIRUNLKHEsIHJlcywgbGFiZWwpIEdfU1RNVF9TVEFSVCB7ICAgICAgICAgXAorICBTVEFUVVMgKHF1ZXVlLCBxLT5zcmNwYWQsICJ3YWl0IGZvciBBREQiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBxLT53YWl0aW5nX2FkZCA9IFRSVUU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBnX2NvbmRfd2FpdCAocS0+aXRlbV9hZGQsIHEtPnFsb2NrKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBxLT53YWl0aW5nX2FkZCA9IEZBTFNFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAocmVzICE9IEdTVF9GTE9XX09LKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFNUQVRVUyAocXVldWUsIHEtPnNyY3BhZCwgInJlY2VpdmVkIEFERCB3YWtldXAiKTsgICAgICAgICAgICAgICAgICAgXAorICAgIGdvdG8gbGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBTVEFUVVMgKHF1ZXVlLCBxLT5zcmNwYWQsICJyZWNlaXZlZCBBREQiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSBHX1NUTVRfRU5ECisKKyNkZWZpbmUgR1NUX1FVRVVFMl9TSUdOQUxfREVMKHEpIEdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmIChxLT53YWl0aW5nX2RlbCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgU1RBVFVTIChxLCBxLT5zcmNwYWQsICJzaWduYWwgREVMIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ19jb25kX3NpZ25hbCAocS0+aXRlbV9kZWwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IEdfU1RNVF9FTkQKKworI2RlZmluZSBHU1RfUVVFVUUyX1NJR05BTF9BREQocSkgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYgKHEtPndhaXRpbmdfYWRkKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBTVEFUVVMgKHEsIHEtPnNpbmtwYWQsICJzaWduYWwgQUREIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnX2NvbmRfc2lnbmFsIChxLT5pdGVtX2FkZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gR19TVE1UX0VORAorCisjZGVmaW5lIF9kb19pbml0IFwKKyAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAocXVldWVfZGVidWcsICJxdWV1ZTIiLCAwLCAicXVldWUgZWxlbWVudCIpOyBcCisgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHF1ZXVlX2RhdGFmbG93LCAicXVldWUyX2RhdGFmbG93IiwgMCwgXAorICAgICAgICAiZGF0YWZsb3cgaW5zaWRlIHRoZSBxdWV1ZSBlbGVtZW50Iik7CisjZGVmaW5lIGdzdF9xdWV1ZTJfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdFF1ZXVlMiwgZ3N0X3F1ZXVlMiwgR1NUX1RZUEVfRUxFTUVOVCwgX2RvX2luaXQpOworCitzdGF0aWMgdm9pZCBnc3RfcXVldWUyX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKKworc3RhdGljIHZvaWQgZ3N0X3F1ZXVlMl9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCisgICAgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7CitzdGF0aWMgdm9pZCBnc3RfcXVldWUyX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKKyAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKKworc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3F1ZXVlMl9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RCdWZmZXIgKiBidWZmZXIpOworc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3F1ZXVlMl9wdXNoX29uZSAoR3N0UXVldWUyICogcXVldWUpOworc3RhdGljIHZvaWQgZ3N0X3F1ZXVlMl9sb29wIChHc3RQYWQgKiBwYWQpOworCitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X3F1ZXVlMl9oYW5kbGVfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KTsKKworc3RhdGljIGdib29sZWFuIGdzdF9xdWV1ZTJfaGFuZGxlX3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfcXVldWUyX2hhbmRsZV9zcmNfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0UXVlcnkgKiBxdWVyeSk7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X3F1ZXVlMl9oYW5kbGVfcXVlcnkgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAorICAgIEdzdFF1ZXJ5ICogcXVlcnkpOworCitzdGF0aWMgR3N0Q2FwcyAqZ3N0X3F1ZXVlMl9nZXRjYXBzIChHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBmaWx0ZXIpOworc3RhdGljIGdib29sZWFuIGdzdF9xdWV1ZTJfYWNjZXB0Y2FwcyAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogY2Fwcyk7CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9xdWV1ZTJfZ2V0X3JhbmdlIChHc3RQYWQgKiBwYWQsIGd1aW50NjQgb2Zmc2V0LAorICAgIGd1aW50IGxlbmd0aCwgR3N0QnVmZmVyICoqIGJ1ZmZlcik7CisKK3N0YXRpYyBnYm9vbGVhbiBnc3RfcXVldWUyX3NyY19hY3RpdmF0ZV9wdWxsIChHc3RQYWQgKiBwYWQsIGdib29sZWFuIGFjdGl2ZSk7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X3F1ZXVlMl9zcmNfYWN0aXZhdGVfcHVzaCAoR3N0UGFkICogcGFkLCBnYm9vbGVhbiBhY3RpdmUpOworc3RhdGljIGdib29sZWFuIGdzdF9xdWV1ZTJfc2lua19hY3RpdmF0ZV9wdXNoIChHc3RQYWQgKiBwYWQsIGdib29sZWFuIGFjdGl2ZSk7CitzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3F1ZXVlMl9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAorICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOworCitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X3F1ZXVlMl9pc19lbXB0eSAoR3N0UXVldWUyICogcXVldWUpOworc3RhdGljIGdib29sZWFuIGdzdF9xdWV1ZTJfaXNfZmlsbGVkIChHc3RRdWV1ZTIgKiBxdWV1ZSk7CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9jdXJfbGV2ZWwgKEdzdFF1ZXVlMiAqIHF1ZXVlLCBHc3RRdWV1ZTJSYW5nZSAqIHJhbmdlKTsKKworLyogc3RhdGljIGd1aW50IGdzdF9xdWV1ZTJfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsgKi8KKworc3RhdGljIHZvaWQKK2dzdF9xdWV1ZTJfY2xhc3NfaW5pdCAoR3N0UXVldWUyQ2xhc3MgKiBrbGFzcykKK3sKKyAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKKyAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKKworICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfcXVldWUyX3NldF9wcm9wZXJ0eTsKKyAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3F1ZXVlMl9nZXRfcHJvcGVydHk7CisKKyAgLyogcHJvcGVydGllcyAqLworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NVUl9MRVZFTF9CWVRFUywKKyAgICAgIGdfcGFyYW1fc3BlY191aW50ICgiY3VycmVudC1sZXZlbC1ieXRlcyIsICJDdXJyZW50IGxldmVsIChrQikiLAorICAgICAgICAgICJDdXJyZW50IGFtb3VudCBvZiBkYXRhIGluIHRoZSBxdWV1ZSAoYnl0ZXMpIiwKKyAgICAgICAgICAwLCBHX01BWFVJTlQsIDAsIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ1VSX0xFVkVMX0JVRkZFUlMsCisgICAgICBnX3BhcmFtX3NwZWNfdWludCAoImN1cnJlbnQtbGV2ZWwtYnVmZmVycyIsICJDdXJyZW50IGxldmVsIChidWZmZXJzKSIsCisgICAgICAgICAgIkN1cnJlbnQgbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdGhlIHF1ZXVlIiwKKyAgICAgICAgICAwLCBHX01BWFVJTlQsIDAsIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ1VSX0xFVkVMX1RJTUUsCisgICAgICBnX3BhcmFtX3NwZWNfdWludDY0ICgiY3VycmVudC1sZXZlbC10aW1lIiwgIkN1cnJlbnQgbGV2ZWwgKG5zKSIsCisgICAgICAgICAgIkN1cnJlbnQgYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIChpbiBucykiLAorICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCAwLCBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTUFYX1NJWkVfQllURVMsCisgICAgICBnX3BhcmFtX3NwZWNfdWludCAoIm1heC1zaXplLWJ5dGVzIiwgIk1heC4gc2l6ZSAoa0IpIiwKKyAgICAgICAgICAiTWF4LiBhbW91bnQgb2YgZGF0YSBpbiB0aGUgcXVldWUgKGJ5dGVzLCAwPWRpc2FibGUpIiwKKyAgICAgICAgICAwLCBHX01BWFVJTlQsIERFRkFVTFRfTUFYX1NJWkVfQllURVMsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTUFYX1NJWkVfQlVGRkVSUywKKyAgICAgIGdfcGFyYW1fc3BlY191aW50ICgibWF4LXNpemUtYnVmZmVycyIsICJNYXguIHNpemUgKGJ1ZmZlcnMpIiwKKyAgICAgICAgICAiTWF4LiBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgcXVldWUgKDA9ZGlzYWJsZSkiLCAwLCBHX01BWFVJTlQsCisgICAgICAgICAgREVGQVVMVF9NQVhfU0laRV9CVUZGRVJTLAorICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01BWF9TSVpFX1RJTUUsCisgICAgICBnX3BhcmFtX3NwZWNfdWludDY0ICgibWF4LXNpemUtdGltZSIsICJNYXguIHNpemUgKG5zKSIsCisgICAgICAgICAgIk1heC4gYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIChpbiBucywgMD1kaXNhYmxlKSIsIDAsIEdfTUFYVUlOVDY0LAorICAgICAgICAgIERFRkFVTFRfTUFYX1NJWkVfVElNRSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9VU0VfQlVGRkVSSU5HLAorICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJ1c2UtYnVmZmVyaW5nIiwgIlVzZSBidWZmZXJpbmciLAorICAgICAgICAgICJFbWl0IEdTVF9NRVNTQUdFX0JVRkZFUklORyBiYXNlZCBvbiBsb3ctL2hpZ2gtcGVyY2VudCB0aHJlc2hvbGRzIiwKKyAgICAgICAgICBERUZBVUxUX1VTRV9CVUZGRVJJTkcsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1VTRV9SQVRFX0VTVElNQVRFLAorICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJ1c2UtcmF0ZS1lc3RpbWF0ZSIsICJVc2UgUmF0ZSBFc3RpbWF0ZSIsCisgICAgICAgICAgIkVzdGltYXRlIHRoZSBiaXRyYXRlIG9mIHRoZSBzdHJlYW0gdG8gY2FsY3VsYXRlIHRpbWUgbGV2ZWwiLAorICAgICAgICAgIERFRkFVTFRfVVNFX1JBVEVfRVNUSU1BVEUsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTE9XX1BFUkNFTlQsCisgICAgICBnX3BhcmFtX3NwZWNfaW50ICgibG93LXBlcmNlbnQiLCAiTG93IHBlcmNlbnQiLAorICAgICAgICAgICJMb3cgdGhyZXNob2xkIGZvciBidWZmZXJpbmcgdG8gc3RhcnQuIE9ubHkgdXNlZCBpZiB1c2UtYnVmZmVyaW5nIGlzIFRydWUiLAorICAgICAgICAgIDAsIDEwMCwgREVGQVVMVF9MT1dfUEVSQ0VOVCwKKyAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9ISUdIX1BFUkNFTlQsCisgICAgICBnX3BhcmFtX3NwZWNfaW50ICgiaGlnaC1wZXJjZW50IiwgIkhpZ2ggcGVyY2VudCIsCisgICAgICAgICAgIkhpZ2ggdGhyZXNob2xkIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLiBPbmx5IHVzZWQgaWYgdXNlLWJ1ZmZlcmluZyBpcyBUcnVlIiwKKyAgICAgICAgICAwLCAxMDAsIERFRkFVTFRfSElHSF9QRVJDRU5ULAorICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfVEVNUF9URU1QTEFURSwKKyAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJ0ZW1wLXRlbXBsYXRlIiwgIlRlbXBvcmFyeSBGaWxlIFRlbXBsYXRlIiwKKyAgICAgICAgICAiRmlsZSB0ZW1wbGF0ZSB0byBzdG9yZSB0ZW1wb3JhcnkgZmlsZXMgaW4sIHNob3VsZCBjb250YWluIGRpcmVjdG9yeSAiCisgICAgICAgICAgImFuZCBYWFhYWFguIChOVUxMID09IGRpc2FibGVkKSIsCisgICAgICAgICAgTlVMTCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9URU1QX0xPQ0FUSU9OLAorICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoInRlbXAtbG9jYXRpb24iLCAiVGVtcG9yYXJ5IEZpbGUgTG9jYXRpb24iLAorICAgICAgICAgICJMb2NhdGlvbiB0byBzdG9yZSB0ZW1wb3JhcnkgZmlsZXMgaW4gKERlcHJlY2F0ZWQ6IE9ubHkgcmVhZCB0aGlzICIKKyAgICAgICAgICAicHJvcGVydHksIHVzZSB0ZW1wLXRlbXBsYXRlIHRvIGNvbmZpZ3VyZSB0aGUgbmFtZSB0ZW1wbGF0ZSkiLAorICAgICAgICAgIE5VTEwsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworCisgIC8qKgorICAgKiBHc3RRdWV1ZTI6dGVtcC1yZW1vdmUKKyAgICoKKyAgICogV2hlbiB0ZW1wLXRlbXBsYXRlIGlzIHNldCwgcmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZmlsZSB3aGVuIGdvaW5nIHRvIFJFQURZLgorICAgKgorICAgKiBTaW5jZTogMC4xMC4yNgorICAgKi8KKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9URU1QX1JFTU9WRSwKKyAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgidGVtcC1yZW1vdmUiLCAiUmVtb3ZlIHRoZSBUZW1wb3JhcnkgRmlsZSIsCisgICAgICAgICAgIlJlbW92ZSB0aGUgdGVtcC1sb2NhdGlvbiBhZnRlciB1c2UiLAorICAgICAgICAgIERFRkFVTFRfVEVNUF9SRU1PVkUsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworCisgIC8qKgorICAgKiBHc3RRdWV1ZTI6cmluZy1idWZmZXItbWF4LXNpemUKKyAgICoKKyAgICogVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgcmluZyBidWZmZXIgaW4gYnl0ZXMuIElmIHNldCB0byAwLCB0aGUgcmluZworICAgKiBidWZmZXIgaXMgZGlzYWJsZWQuIERlZmF1bHQgMC4KKyAgICoKKyAgICogU2luY2U6IDAuMTAuMzEKKyAgICovCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUklOR19CVUZGRVJfTUFYX1NJWkUsCisgICAgICBnX3BhcmFtX3NwZWNfdWludDY0ICgicmluZy1idWZmZXItbWF4LXNpemUiLAorICAgICAgICAgICJNYXguIHJpbmcgYnVmZmVyIHNpemUgKGJ5dGVzKSIsCisgICAgICAgICAgIk1heC4gYW1vdW50IG9mIGRhdGEgaW4gdGhlIHJpbmcgYnVmZmVyIChieXRlcywgMCA9IGRpc2FibGVkKSIsCisgICAgICAgICAgMCwgR19NQVhVSU5UNjQsIERFRkFVTFRfUklOR19CVUZGRVJfTUFYX1NJWkUsCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisKKyAgLyogc2V0IHNldmVyYWwgcGFyZW50IGNsYXNzIHZpcnR1YWwgZnVuY3Rpb25zICovCisgIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3F1ZXVlMl9maW5hbGl6ZTsKKworICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAorICAgICAgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0ICgmc3JjdGVtcGxhdGUpKTsKKyAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKKyAgICAgIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoJnNpbmt0ZW1wbGF0ZSkpOworCisgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZSAoZ3N0ZWxlbWVudF9jbGFzcywgIlF1ZXVlIDIiLAorICAgICAgIkdlbmVyaWMiLAorICAgICAgIlNpbXBsZSBkYXRhIHF1ZXVlIiwKKyAgICAgICJFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PiwgIgorICAgICAgIldpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Iik7CisKKyAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9xdWV1ZTJfY2hhbmdlX3N0YXRlKTsKKyAgZ3N0ZWxlbWVudF9jbGFzcy0+cXVlcnkgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3F1ZXVlMl9oYW5kbGVfcXVlcnkpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3F1ZXVlMl9pbml0IChHc3RRdWV1ZTIgKiBxdWV1ZSkKK3sKKyAgcXVldWUtPnNpbmtwYWQgPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJnNpbmt0ZW1wbGF0ZSwgInNpbmsiKTsKKworICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAocXVldWUtPnNpbmtwYWQsCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3F1ZXVlMl9jaGFpbikpOworICBnc3RfcGFkX3NldF9hY3RpdmF0ZXB1c2hfZnVuY3Rpb24gKHF1ZXVlLT5zaW5rcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9xdWV1ZTJfc2lua19hY3RpdmF0ZV9wdXNoKSk7CisgIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChxdWV1ZS0+c2lua3BhZCwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcXVldWUyX2hhbmRsZV9zaW5rX2V2ZW50KSk7CisgIGdzdF9wYWRfc2V0X2dldGNhcHNfZnVuY3Rpb24gKHF1ZXVlLT5zaW5rcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9xdWV1ZTJfZ2V0Y2FwcykpOworICBnc3RfcGFkX3NldF9hY2NlcHRjYXBzX2Z1bmN0aW9uIChxdWV1ZS0+c2lua3BhZCwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcXVldWUyX2FjY2VwdGNhcHMpKTsKKyAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKHF1ZXVlKSwgcXVldWUtPnNpbmtwYWQpOworCisgIHF1ZXVlLT5zcmNwYWQgPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJnNyY3RlbXBsYXRlLCAic3JjIik7CisKKyAgZ3N0X3BhZF9zZXRfYWN0aXZhdGVwdWxsX2Z1bmN0aW9uIChxdWV1ZS0+c3JjcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9xdWV1ZTJfc3JjX2FjdGl2YXRlX3B1bGwpKTsKKyAgZ3N0X3BhZF9zZXRfYWN0aXZhdGVwdXNoX2Z1bmN0aW9uIChxdWV1ZS0+c3JjcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9xdWV1ZTJfc3JjX2FjdGl2YXRlX3B1c2gpKTsKKyAgZ3N0X3BhZF9zZXRfZ2V0cmFuZ2VfZnVuY3Rpb24gKHF1ZXVlLT5zcmNwYWQsCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3F1ZXVlMl9nZXRfcmFuZ2UpKTsKKyAgZ3N0X3BhZF9zZXRfZ2V0Y2Fwc19mdW5jdGlvbiAocXVldWUtPnNyY3BhZCwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcXVldWUyX2dldGNhcHMpKTsKKyAgZ3N0X3BhZF9zZXRfYWNjZXB0Y2Fwc19mdW5jdGlvbiAocXVldWUtPnNyY3BhZCwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcXVldWUyX2FjY2VwdGNhcHMpKTsKKyAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHF1ZXVlLT5zcmNwYWQsCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3F1ZXVlMl9oYW5kbGVfc3JjX2V2ZW50KSk7CisgIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChxdWV1ZS0+c3JjcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9xdWV1ZTJfaGFuZGxlX3NyY19xdWVyeSkpOworICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAocXVldWUpLCBxdWV1ZS0+c3JjcGFkKTsKKworICAvKiBsZXZlbHMgKi8KKyAgR1NUX1FVRVVFMl9DTEVBUl9MRVZFTCAocXVldWUtPmN1cl9sZXZlbCk7CisgIHF1ZXVlLT5tYXhfbGV2ZWwuYnVmZmVycyA9IERFRkFVTFRfTUFYX1NJWkVfQlVGRkVSUzsKKyAgcXVldWUtPm1heF9sZXZlbC5ieXRlcyA9IERFRkFVTFRfTUFYX1NJWkVfQllURVM7CisgIHF1ZXVlLT5tYXhfbGV2ZWwudGltZSA9IERFRkFVTFRfTUFYX1NJWkVfVElNRTsKKyAgcXVldWUtPm1heF9sZXZlbC5yYXRlX3RpbWUgPSBERUZBVUxUX01BWF9TSVpFX1RJTUU7CisgIHF1ZXVlLT51c2VfYnVmZmVyaW5nID0gREVGQVVMVF9VU0VfQlVGRkVSSU5HOworICBxdWV1ZS0+dXNlX3JhdGVfZXN0aW1hdGUgPSBERUZBVUxUX1VTRV9SQVRFX0VTVElNQVRFOworICBxdWV1ZS0+bG93X3BlcmNlbnQgPSBERUZBVUxUX0xPV19QRVJDRU5UOworICBxdWV1ZS0+aGlnaF9wZXJjZW50ID0gREVGQVVMVF9ISUdIX1BFUkNFTlQ7CisKKyAgZ3N0X3NlZ21lbnRfaW5pdCAoJnF1ZXVlLT5zaW5rX3NlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7CisgIGdzdF9zZWdtZW50X2luaXQgKCZxdWV1ZS0+c3JjX3NlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7CisKKyAgcXVldWUtPnNpbmt0aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgcXVldWUtPnNyY3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICBxdWV1ZS0+c2lua190YWludGVkID0gVFJVRTsKKyAgcXVldWUtPnNyY190YWludGVkID0gVFJVRTsKKworICBxdWV1ZS0+c3JjcmVzdWx0ID0gR1NUX0ZMT1dfV1JPTkdfU1RBVEU7CisgIHF1ZXVlLT5zaW5rcmVzdWx0ID0gR1NUX0ZMT1dfV1JPTkdfU1RBVEU7CisgIHF1ZXVlLT5pc19lb3MgPSBGQUxTRTsKKyAgcXVldWUtPmluX3RpbWVyID0gZ190aW1lcl9uZXcgKCk7CisgIHF1ZXVlLT5vdXRfdGltZXIgPSBnX3RpbWVyX25ldyAoKTsKKworICBxdWV1ZS0+cWxvY2sgPSBnX211dGV4X25ldyAoKTsKKyAgcXVldWUtPndhaXRpbmdfYWRkID0gRkFMU0U7CisgIHF1ZXVlLT5pdGVtX2FkZCA9IGdfY29uZF9uZXcgKCk7CisgIHF1ZXVlLT53YWl0aW5nX2RlbCA9IEZBTFNFOworICBxdWV1ZS0+aXRlbV9kZWwgPSBnX2NvbmRfbmV3ICgpOworICBxdWV1ZS0+cXVldWUgPSBnX3F1ZXVlX25ldyAoKTsKKworICBxdWV1ZS0+YnVmZmVyaW5nX3BlcmNlbnQgPSAxMDA7CisKKyAgLyogdGVtcGZpbGUgcmVsYXRlZCAqLworICBxdWV1ZS0+dGVtcF90ZW1wbGF0ZSA9IE5VTEw7CisgIHF1ZXVlLT50ZW1wX2xvY2F0aW9uID0gTlVMTDsKKyAgcXVldWUtPnRlbXBfbG9jYXRpb25fc2V0ID0gRkFMU0U7CisgIHF1ZXVlLT50ZW1wX3JlbW92ZSA9IERFRkFVTFRfVEVNUF9SRU1PVkU7CisKKyAgcXVldWUtPnJpbmdfYnVmZmVyID0gTlVMTDsKKyAgcXVldWUtPnJpbmdfYnVmZmVyX21heF9zaXplID0gREVGQVVMVF9SSU5HX0JVRkZFUl9NQVhfU0laRTsKKworICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwKKyAgICAgICJpbml0aWFsaXplZCBxdWV1ZSdzIG5vdF9lbXB0eSAmIG5vdF9mdWxsIGNvbmRpdGlvbnMiKTsKK30KKworLyogY2FsbGVkIG9ubHkgb25jZSwgYXMgb3Bwb3NlZCB0byBkaXNwb3NlICovCitzdGF0aWMgdm9pZAorZ3N0X3F1ZXVlMl9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKK3sKKyAgR3N0UXVldWUyICpxdWV1ZSA9IEdTVF9RVUVVRTIgKG9iamVjdCk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJmaW5hbGl6aW5nIHF1ZXVlIik7CisKKyAgd2hpbGUgKCFnX3F1ZXVlX2lzX2VtcHR5IChxdWV1ZS0+cXVldWUpKSB7CisgICAgR3N0TWluaU9iamVjdCAqZGF0YSA9IGdfcXVldWVfcG9wX2hlYWQgKHF1ZXVlLT5xdWV1ZSk7CisKKyAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKGRhdGEpOworICB9CisKKyAgZ19xdWV1ZV9mcmVlIChxdWV1ZS0+cXVldWUpOworICBnX211dGV4X2ZyZWUgKHF1ZXVlLT5xbG9jayk7CisgIGdfY29uZF9mcmVlIChxdWV1ZS0+aXRlbV9hZGQpOworICBnX2NvbmRfZnJlZSAocXVldWUtPml0ZW1fZGVsKTsKKyAgZ190aW1lcl9kZXN0cm95IChxdWV1ZS0+aW5fdGltZXIpOworICBnX3RpbWVyX2Rlc3Ryb3kgKHF1ZXVlLT5vdXRfdGltZXIpOworCisgIC8qIHRlbXBfZmlsZSBwYXRoIGNsZWFudXAgICovCisgIGdfZnJlZSAocXVldWUtPnRlbXBfdGVtcGxhdGUpOworICBnX2ZyZWUgKHF1ZXVlLT50ZW1wX2xvY2F0aW9uKTsKKworICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkCitkZWJ1Z19yYW5nZXMgKEdzdFF1ZXVlMiAqIHF1ZXVlKQoreworICBHc3RRdWV1ZTJSYW5nZSAqd2FsazsKKworICBmb3IgKHdhbGsgPSBxdWV1ZS0+cmFuZ2VzOyB3YWxrOyB3YWxrID0gd2Fsay0+bmV4dCkgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLAorICAgICAgICAicmFuZ2UgWyUiIEdfR1VJTlQ2NF9GT1JNQVQgIi0lIiBHX0dVSU5UNjRfRk9STUFUICJdIChyYiBbJSIKKyAgICAgICAgR19HVUlOVDY0X0ZPUk1BVCAiLSUiIEdfR1VJTlQ2NF9GT1JNQVQgIl0pLCByZWFkaW5nICUiIEdfR1VJTlQ2NF9GT1JNQVQKKyAgICAgICAgIiBjdXJyZW50IHJhbmdlPyAlcyIsIHdhbGstPm9mZnNldCwgd2Fsay0+d3JpdGluZ19wb3MsIHdhbGstPnJiX29mZnNldCwKKyAgICAgICAgd2Fsay0+cmJfd3JpdGluZ19wb3MsIHdhbGstPnJlYWRpbmdfcG9zLAorICAgICAgICB3YWxrID09IHF1ZXVlLT5jdXJyZW50ID8gIioqeSoqIiA6ICIgIG4gICIpOworICB9Cit9CisKKy8qIGNsZWFyIGFsbCB0aGUgZG93bmxvYWRlZCByYW5nZXMgKi8KK3N0YXRpYyB2b2lkCitjbGVhbl9yYW5nZXMgKEdzdFF1ZXVlMiAqIHF1ZXVlKQoreworICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgImNsZWFuIHF1ZXVlIHJhbmdlcyIpOworCisgIGdfc2xpY2VfZnJlZV9jaGFpbiAoR3N0UXVldWUyUmFuZ2UsIHF1ZXVlLT5yYW5nZXMsIG5leHQpOworICBxdWV1ZS0+cmFuZ2VzID0gTlVMTDsKKyAgcXVldWUtPmN1cnJlbnQgPSBOVUxMOworfQorCisvKiBmaW5kIGEgcmFuZ2UgdGhhdCBjb250YWlucyBAb2Zmc2V0IG9yIE5VTEwgd2hlbiBub3RoaW5nIGRvZXMgKi8KK3N0YXRpYyBHc3RRdWV1ZTJSYW5nZSAqCitmaW5kX3JhbmdlIChHc3RRdWV1ZTIgKiBxdWV1ZSwgZ3VpbnQ2NCBvZmZzZXQpCit7CisgIEdzdFF1ZXVlMlJhbmdlICpyYW5nZSA9IE5VTEw7CisgIEdzdFF1ZXVlMlJhbmdlICp3YWxrOworCisgIC8qIGZpcnN0IGRvIGEgcXVpY2sgY2hlY2sgZm9yIHRoZSBjdXJyZW50IHJhbmdlICovCisgIGZvciAod2FsayA9IHF1ZXVlLT5yYW5nZXM7IHdhbGs7IHdhbGsgPSB3YWxrLT5uZXh0KSB7CisgICAgaWYgKG9mZnNldCA+PSB3YWxrLT5vZmZzZXQgJiYgb2Zmc2V0IDw9IHdhbGstPndyaXRpbmdfcG9zKSB7CisgICAgICAvKiB3ZSBjYW4gcmV1c2UgYW4gZXhpc3RpbmcgcmFuZ2UgKi8KKyAgICAgIHJhbmdlID0gd2FsazsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBpZiAocmFuZ2UpIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwKKyAgICAgICAgImZvdW5kIHJhbmdlIGZvciAlIiBHX0dVSU5UNjRfRk9STUFUICI6IFslIiBHX0dVSU5UNjRfRk9STUFUICItJSIKKyAgICAgICAgR19HVUlOVDY0X0ZPUk1BVCAiXSIsIG9mZnNldCwgcmFuZ2UtPm9mZnNldCwgcmFuZ2UtPndyaXRpbmdfcG9zKTsKKyAgfSBlbHNlIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgIm5vIHJhbmdlIGZvciAlIiBHX0dVSU5UNjRfRk9STUFULCBvZmZzZXQpOworICB9CisgIHJldHVybiByYW5nZTsKK30KKworc3RhdGljIHZvaWQKK3VwZGF0ZV9jdXJfbGV2ZWwgKEdzdFF1ZXVlMiAqIHF1ZXVlLCBHc3RRdWV1ZTJSYW5nZSAqIHJhbmdlKQoreworICBndWludDY0IG1heF9yZWFkaW5nX3Bvcywgd3JpdGluZ19wb3M7CisKKyAgd3JpdGluZ19wb3MgPSByYW5nZS0+d3JpdGluZ19wb3M7CisgIG1heF9yZWFkaW5nX3BvcyA9IHJhbmdlLT5tYXhfcmVhZGluZ19wb3M7CisKKyAgaWYgKHdyaXRpbmdfcG9zID4gbWF4X3JlYWRpbmdfcG9zKQorICAgIHF1ZXVlLT5jdXJfbGV2ZWwuYnl0ZXMgPSB3cml0aW5nX3BvcyAtIG1heF9yZWFkaW5nX3BvczsKKyAgZWxzZQorICAgIHF1ZXVlLT5jdXJfbGV2ZWwuYnl0ZXMgPSAwOworfQorCisvKiBtYWtlIGEgbmV3IHJhbmdlIGZvciBAb2Zmc2V0IG9yIHJldXNlIGFuIGV4aXN0aW5nIHJhbmdlICovCitzdGF0aWMgR3N0UXVldWUyUmFuZ2UgKgorYWRkX3JhbmdlIChHc3RRdWV1ZTIgKiBxdWV1ZSwgZ3VpbnQ2NCBvZmZzZXQpCit7CisgIEdzdFF1ZXVlMlJhbmdlICpyYW5nZSwgKnByZXYsICpuZXh0OworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAiZmluZCByYW5nZSBmb3IgJSIgR19HVUlOVDY0X0ZPUk1BVCwgb2Zmc2V0KTsKKworICBpZiAoKHJhbmdlID0gZmluZF9yYW5nZSAocXVldWUsIG9mZnNldCkpKSB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsCisgICAgICAgICJyZXVzaW5nIHJhbmdlICUiIEdfR1VJTlQ2NF9GT1JNQVQgIi0lIiBHX0dVSU5UNjRfRk9STUFULCByYW5nZS0+b2Zmc2V0LAorICAgICAgICByYW5nZS0+d3JpdGluZ19wb3MpOworICAgIHJhbmdlLT53cml0aW5nX3BvcyA9IG9mZnNldDsKKyAgfSBlbHNlIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwKKyAgICAgICAgIm5ldyByYW5nZSAlIiBHX0dVSU5UNjRfRk9STUFUICItJSIgR19HVUlOVDY0X0ZPUk1BVCwgb2Zmc2V0LCBvZmZzZXQpOworCisgICAgcmFuZ2UgPSBnX3NsaWNlX25ldzAgKEdzdFF1ZXVlMlJhbmdlKTsKKyAgICByYW5nZS0+b2Zmc2V0ID0gb2Zmc2V0OworICAgIC8qIHdlIHdhbnQgdG8gd3JpdGUgdG8gdGhlIG5leHQgbG9jYXRpb24gaW4gdGhlIHJpbmcgYnVmZmVyICovCisgICAgcmFuZ2UtPnJiX29mZnNldCA9IHF1ZXVlLT5jdXJyZW50ID8gcXVldWUtPmN1cnJlbnQtPnJiX3dyaXRpbmdfcG9zIDogMDsKKyAgICByYW5nZS0+d3JpdGluZ19wb3MgPSBvZmZzZXQ7CisgICAgcmFuZ2UtPnJiX3dyaXRpbmdfcG9zID0gcmFuZ2UtPnJiX29mZnNldDsKKyAgICByYW5nZS0+cmVhZGluZ19wb3MgPSBvZmZzZXQ7CisgICAgcmFuZ2UtPm1heF9yZWFkaW5nX3BvcyA9IG9mZnNldDsKKworICAgIC8qIGluc2VydCBzb3J0ZWQgKi8KKyAgICBwcmV2ID0gTlVMTDsKKyAgICBuZXh0ID0gcXVldWUtPnJhbmdlczsKKyAgICB3aGlsZSAobmV4dCkgeworICAgICAgaWYgKG5leHQtPm9mZnNldCA+IG9mZnNldCkgeworICAgICAgICAvKiBpbnNlcnQgYmVmb3JlIG5leHQgKi8KKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsCisgICAgICAgICAgICAiaW5zZXJ0IGJlZm9yZSByYW5nZSAlcCwgb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG5leHQsCisgICAgICAgICAgICBuZXh0LT5vZmZzZXQpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIC8qIHRyeSBuZXh0ICovCisgICAgICBwcmV2ID0gbmV4dDsKKyAgICAgIG5leHQgPSBuZXh0LT5uZXh0OworICAgIH0KKyAgICByYW5nZS0+bmV4dCA9IG5leHQ7CisgICAgaWYgKHByZXYpCisgICAgICBwcmV2LT5uZXh0ID0gcmFuZ2U7CisgICAgZWxzZQorICAgICAgcXVldWUtPnJhbmdlcyA9IHJhbmdlOworICB9CisgIGRlYnVnX3JhbmdlcyAocXVldWUpOworCisgIC8qIHVwZGF0ZSB0aGUgc3RhdHMgZm9yIHRoaXMgcmFuZ2UgKi8KKyAgdXBkYXRlX2N1cl9sZXZlbCAocXVldWUsIHJhbmdlKTsKKworICByZXR1cm4gcmFuZ2U7Cit9CisKKworLyogY2xlYXIgYW5kIGluaXQgdGhlIGRvd25sb2FkIHJhbmdlcyBmb3Igb2Zmc2V0IDAgKi8KK3N0YXRpYyB2b2lkCitpbml0X3JhbmdlcyAoR3N0UXVldWUyICogcXVldWUpCit7CisgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAiaW5pdCBxdWV1ZSByYW5nZXMiKTsKKworICAvKiBnZXQgcmlkIG9mIGFsbCB0aGUgY3VycmVudCByYW5nZXMgKi8KKyAgY2xlYW5fcmFuZ2VzIChxdWV1ZSk7CisgIC8qIG1ha2UgYSByYW5nZSBmb3Igb2Zmc2V0IDAgKi8KKyAgcXVldWUtPmN1cnJlbnQgPSBhZGRfcmFuZ2UgKHF1ZXVlLCAwKTsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfcXVldWUyX2FjY2VwdGNhcHMgKEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGNhcHMpCit7CisgIEdzdFF1ZXVlMiAqcXVldWU7CisgIEdzdFBhZCAqb3RoZXJwYWQ7CisgIGdib29sZWFuIHJlc3VsdDsKKworICBxdWV1ZSA9IEdTVF9RVUVVRTIgKEdTVF9QQURfUEFSRU5UIChwYWQpKTsKKworICBvdGhlcnBhZCA9IChwYWQgPT0gcXVldWUtPnNyY3BhZCA/IHF1ZXVlLT5zaW5rcGFkIDogcXVldWUtPnNyY3BhZCk7CisgIHJlc3VsdCA9IGdzdF9wYWRfcGVlcl9hY2NlcHRfY2FwcyAob3RoZXJwYWQsIGNhcHMpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBHc3RDYXBzICoKK2dzdF9xdWV1ZTJfZ2V0Y2FwcyAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogZmlsdGVyKQoreworICBHc3RRdWV1ZTIgKnF1ZXVlOworICBHc3RQYWQgKm90aGVycGFkOworICBHc3RDYXBzICpyZXN1bHQ7CisKKyAgcXVldWUgPSBHU1RfUVVFVUUyIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOworICBpZiAoR19VTkxJS0VMWSAocXVldWUgPT0gTlVMTCkpCisgICAgcmV0dXJuIChmaWx0ZXIgPyBnc3RfY2Fwc19yZWYgKGZpbHRlcikgOiBnc3RfY2Fwc19uZXdfYW55ICgpKTsKKworICBvdGhlcnBhZCA9IChwYWQgPT0gcXVldWUtPnNyY3BhZCA/IHF1ZXVlLT5zaW5rcGFkIDogcXVldWUtPnNyY3BhZCk7CisgIHJlc3VsdCA9IGdzdF9wYWRfcGVlcl9nZXRfY2FwcyAob3RoZXJwYWQsIGZpbHRlcik7CisgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICByZXN1bHQgPSAoZmlsdGVyID8gZ3N0X2NhcHNfcmVmIChmaWx0ZXIpIDogZ3N0X2NhcHNfbmV3X2FueSAoKSk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAocXVldWUpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIGNhbGN1bGF0ZSB0aGUgZGlmZiBiZXR3ZWVuIHJ1bm5pbmcgdGltZSBvbiB0aGUgc2luayBhbmQgc3JjIG9mIHRoZSBxdWV1ZS4KKyAqIFRoaXMgaXMgdGhlIHRvdGFsIGFtb3VudCBvZiB0aW1lIGluIHRoZSBxdWV1ZS4gKi8KK3N0YXRpYyB2b2lkCit1cGRhdGVfdGltZV9sZXZlbCAoR3N0UXVldWUyICogcXVldWUpCit7CisgIGlmIChxdWV1ZS0+c2lua190YWludGVkKSB7CisgICAgcXVldWUtPnNpbmt0aW1lID0KKyAgICAgICAgZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmcXVldWUtPnNpbmtfc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLAorICAgICAgICBxdWV1ZS0+c2lua19zZWdtZW50LnBvc2l0aW9uKTsKKyAgICBxdWV1ZS0+c2lua190YWludGVkID0gRkFMU0U7CisgIH0KKworICBpZiAocXVldWUtPnNyY190YWludGVkKSB7CisgICAgcXVldWUtPnNyY3RpbWUgPQorICAgICAgICBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZxdWV1ZS0+c3JjX3NlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwKKyAgICAgICAgcXVldWUtPnNyY19zZWdtZW50LnBvc2l0aW9uKTsKKyAgICBxdWV1ZS0+c3JjX3RhaW50ZWQgPSBGQUxTRTsKKyAgfQorCisgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAic2luayAlIiBHU1RfVElNRV9GT1JNQVQgIiwgc3JjICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgIEdTVF9USU1FX0FSR1MgKHF1ZXVlLT5zaW5rdGltZSksIEdTVF9USU1FX0FSR1MgKHF1ZXVlLT5zcmN0aW1lKSk7CisKKyAgaWYgKHF1ZXVlLT5zaW5rdGltZSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FCisgICAgICAmJiBxdWV1ZS0+c3JjdGltZSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FCisgICAgICAmJiBxdWV1ZS0+c2lua3RpbWUgPj0gcXVldWUtPnNyY3RpbWUpCisgICAgcXVldWUtPmN1cl9sZXZlbC50aW1lID0gcXVldWUtPnNpbmt0aW1lIC0gcXVldWUtPnNyY3RpbWU7CisgIGVsc2UKKyAgICBxdWV1ZS0+Y3VyX2xldmVsLnRpbWUgPSAwOworfQorCisvKiB0YWtlIGEgU0VHTUVOVCBldmVudCBhbmQgYXBwbHkgdGhlIHZhbHVlcyB0byBzZWdtZW50LCB1cGRhdGluZyB0aGUgdGltZQorICogbGV2ZWwgb2YgcXVldWUuICovCitzdGF0aWMgdm9pZAorYXBwbHlfc2VnbWVudCAoR3N0UXVldWUyICogcXVldWUsIEdzdEV2ZW50ICogZXZlbnQsIEdzdFNlZ21lbnQgKiBzZWdtZW50LAorICAgIGdib29sZWFuIGlzX3NpbmspCit7CisgIGdzdF9ldmVudF9jb3B5X3NlZ21lbnQgKGV2ZW50LCBzZWdtZW50KTsKKworICBpZiAoc2VnbWVudC0+Zm9ybWF0ID09IEdTVF9GT1JNQVRfQllURVMpIHsKKyAgICBpZiAoUVVFVUVfSVNfVVNJTkdfVEVNUF9GSUxFIChxdWV1ZSkpIHsKKyAgICAgIC8qIHN0YXJ0IGlzIHdoZXJlIHdlJ2xsIGJlIGdldHRpbmcgZnJvbSBhbmQgYXMgc3VjaCB3cml0aW5nIG5leHQgKi8KKyAgICAgIHF1ZXVlLT5jdXJyZW50ID0gYWRkX3JhbmdlIChxdWV1ZSwgc2VnbWVudC0+c3RhcnQpOworICAgICAgLyogdXBkYXRlIHRoZSBzdGF0cyBmb3IgdGhpcyByYW5nZSAqLworICAgICAgdXBkYXRlX2N1cl9sZXZlbCAocXVldWUsIHF1ZXVlLT5jdXJyZW50KTsKKyAgICB9CisgIH0KKworICAvKiBub3cgY29uZmlndXJlIHRoZSB2YWx1ZXMsIHdlIHVzZSB0aGVzZSB0byB0cmFjayB0aW1lc3RhbXBzIG9uIHRoZQorICAgKiBzaW5rcGFkLiAqLworICBpZiAoc2VnbWVudC0+Zm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSkgeworICAgIC8qIG5vbi10aW1lIGZvcm1hdCwgcHJldGVudCB0aGUgY3VycmVudCB0aW1lIHNlZ21lbnQgaXMgY2xvc2VkIHdpdGggYQorICAgICAqIDAgc3RhcnQgYW5kIHVua25vd24gc3RvcCB0aW1lLiAqLworICAgIHNlZ21lbnQtPmZvcm1hdCA9IEdTVF9GT1JNQVRfVElNRTsKKyAgICBzZWdtZW50LT5zdGFydCA9IDA7CisgICAgc2VnbWVudC0+c3RvcCA9IC0xOworICAgIHNlZ21lbnQtPnRpbWUgPSAwOworICB9CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJjb25maWd1cmVkIFNFR01FTlQgJSIgR1NUX1NFR01FTlRfRk9STUFULCBzZWdtZW50KTsKKworICBpZiAoaXNfc2luaykKKyAgICBxdWV1ZS0+c2lua190YWludGVkID0gVFJVRTsKKyAgZWxzZQorICAgIHF1ZXVlLT5zcmNfdGFpbnRlZCA9IFRSVUU7CisKKyAgLyogc2VnbWVudCBjYW4gdXBkYXRlIHRoZSB0aW1lIGxldmVsIG9mIHRoZSBxdWV1ZSAqLworICB1cGRhdGVfdGltZV9sZXZlbCAocXVldWUpOworfQorCisvKiB0YWtlIGEgYnVmZmVyIGFuZCB1cGRhdGUgc2VnbWVudCwgdXBkYXRpbmcgdGhlIHRpbWUgbGV2ZWwgb2YgdGhlIHF1ZXVlLiAqLworc3RhdGljIHZvaWQKK2FwcGx5X2J1ZmZlciAoR3N0UXVldWUyICogcXVldWUsIEdzdEJ1ZmZlciAqIGJ1ZmZlciwgR3N0U2VnbWVudCAqIHNlZ21lbnQsCisgICAgZ2Jvb2xlYW4gaXNfc2luaykKK3sKKyAgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uLCB0aW1lc3RhbXA7CisKKyAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcik7CisgIGR1cmF0aW9uID0gR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKTsKKworICAvKiBpZiBubyB0aW1lc3RhbXAgaXMgc2V0LCBhc3N1bWUgaXQncyBjb250aW51b3VzIHdpdGggdGhlIHByZXZpb3VzCisgICAqIHRpbWUgKi8KKyAgaWYgKHRpbWVzdGFtcCA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKQorICAgIHRpbWVzdGFtcCA9IHNlZ21lbnQtPnBvc2l0aW9uOworCisgIC8qIGFkZCBkdXJhdGlvbiAqLworICBpZiAoZHVyYXRpb24gIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKKyAgICB0aW1lc3RhbXAgKz0gZHVyYXRpb247CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJwb3NpdGlvbiB1cGRhdGVkIHRvICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWVzdGFtcCkpOworCisgIHNlZ21lbnQtPnBvc2l0aW9uID0gdGltZXN0YW1wOworCisgIGlmIChpc19zaW5rKQorICAgIHF1ZXVlLT5zaW5rX3RhaW50ZWQgPSBUUlVFOworICBlbHNlCisgICAgcXVldWUtPnNyY190YWludGVkID0gVFJVRTsKKworICAvKiBjYWxjIGRpZmYgd2l0aCBvdGhlciBlbmQgKi8KKyAgdXBkYXRlX3RpbWVfbGV2ZWwgKHF1ZXVlKTsKK30KKworc3RhdGljIHZvaWQKK3VwZGF0ZV9idWZmZXJpbmcgKEdzdFF1ZXVlMiAqIHF1ZXVlKQoreworICBnaW50NjQgcGVyY2VudDsKKyAgZ2Jvb2xlYW4gcG9zdCA9IEZBTFNFOworCisgIGlmIChxdWV1ZS0+aGlnaF9wZXJjZW50IDw9IDApCisgICAgcmV0dXJuOworCisjZGVmaW5lIEdFVF9QRVJDRU5UKGZvcm1hdCxhbHRfbWF4KSAoKHF1ZXVlLT5tYXhfbGV2ZWwuZm9ybWF0KSA+IDAgPyAocXVldWUtPmN1cl9sZXZlbC5mb3JtYXQpICogMTAwIC8gKChhbHRfbWF4KSA+IDAgPyBNSU4gKChhbHRfbWF4KSwgKHF1ZXVlLT5tYXhfbGV2ZWwuZm9ybWF0KSkgOiAocXVldWUtPm1heF9sZXZlbC5mb3JtYXQpKSA6IDApCisKKyAgaWYgKHF1ZXVlLT5pc19lb3MpIHsKKyAgICAvKiBvbiBFT1Mgd2UgYXJlIGFsd2F5cyAxMDAlIGZ1bGwsIHdlIHNldCB0aGUgdmFyIGhlcmUgc28gdGhhdCBpdCB3ZSBjYW4KKyAgICAgKiByZXVzZSB0aGUgbG9naWMgYmVsb3cgdG8gc3RvcCBidWZmZXJpbmcgKi8KKyAgICBwZXJjZW50ID0gMTAwOworICAgIEdTVF9MT0dfT0JKRUNUIChxdWV1ZSwgIndlIGFyZSBFT1MiKTsKKyAgfSBlbHNlIHsKKyAgICAvKiBmaWd1cmUgb3V0IHRoZSBwZXJjZW50IHdlIGFyZSBmaWxsZWQsIHdlIHRha2UgdGhlIG1heCBvZiBhbGwgZm9ybWF0cy4gKi8KKworICAgIGlmICghUVVFVUVfSVNfVVNJTkdfUklOR19CVUZGRVIgKHF1ZXVlKSkgeworICAgICAgcGVyY2VudCA9IEdFVF9QRVJDRU5UIChieXRlcywgMCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGd1aW50NjQgcmJfc2l6ZSA9IHF1ZXVlLT5yaW5nX2J1ZmZlcl9tYXhfc2l6ZTsKKyAgICAgIHBlcmNlbnQgPSBHRVRfUEVSQ0VOVCAoYnl0ZXMsIHJiX3NpemUpOworICAgIH0KKyAgICBwZXJjZW50ID0gTUFYIChwZXJjZW50LCBHRVRfUEVSQ0VOVCAodGltZSwgMCkpOworICAgIHBlcmNlbnQgPSBNQVggKHBlcmNlbnQsIEdFVF9QRVJDRU5UIChidWZmZXJzLCAwKSk7CisKKyAgICAvKiBhbHNvIGFwcGx5IHRoZSByYXRlIGVzdGltYXRlIHdoZW4gd2UgbmVlZCB0byAqLworICAgIGlmIChxdWV1ZS0+dXNlX3JhdGVfZXN0aW1hdGUpCisgICAgICBwZXJjZW50ID0gTUFYIChwZXJjZW50LCBHRVRfUEVSQ0VOVCAocmF0ZV90aW1lLCAwKSk7CisgIH0KKworICBpZiAocXVldWUtPmlzX2J1ZmZlcmluZykgeworICAgIHBvc3QgPSBUUlVFOworICAgIC8qIGlmIHdlIHdlcmUgYnVmZmVyaW5nIHNlZSBpZiB3ZSByZWFjaGVkIHRoZSBoaWdoIHdhdGVybWFyayAqLworICAgIGlmIChwZXJjZW50ID49IHF1ZXVlLT5oaWdoX3BlcmNlbnQpCisgICAgICBxdWV1ZS0+aXNfYnVmZmVyaW5nID0gRkFMU0U7CisgIH0gZWxzZSB7CisgICAgLyogd2Ugd2VyZSBub3QgYnVmZmVyaW5nLCBjaGVjayBpZiB3ZSBuZWVkIHRvIHN0YXJ0IGJ1ZmZlcmluZyBpZiB3ZSBkcm9wCisgICAgICogYmVsb3cgdGhlIGxvdyB0aHJlc2hvbGQgKi8KKyAgICBpZiAocGVyY2VudCA8IHF1ZXVlLT5sb3dfcGVyY2VudCkgeworICAgICAgcXVldWUtPmlzX2J1ZmZlcmluZyA9IFRSVUU7CisgICAgICBxdWV1ZS0+YnVmZmVyaW5nX2l0ZXJhdGlvbisrOworICAgICAgcG9zdCA9IFRSVUU7CisgICAgfQorICB9CisgIGlmIChwb3N0KSB7CisgICAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKKyAgICBHc3RCdWZmZXJpbmdNb2RlIG1vZGU7CisgICAgZ2ludDY0IGJ1ZmZlcmluZ19sZWZ0ID0gLTE7CisKKyAgICAvKiBzY2FsZSB0byBoaWdoIHBlcmNlbnQgc28gdGhhdCBpdCBiZWNvbWVzIHRoZSAxMDAlIG1hcmsgKi8KKyAgICBwZXJjZW50ID0gcGVyY2VudCAqIDEwMCAvIHF1ZXVlLT5oaWdoX3BlcmNlbnQ7CisgICAgLyogY2xpcCAqLworICAgIGlmIChwZXJjZW50ID4gMTAwKQorICAgICAgcGVyY2VudCA9IDEwMDsKKworICAgIGlmIChwZXJjZW50ICE9IHF1ZXVlLT5idWZmZXJpbmdfcGVyY2VudCkgeworICAgICAgcXVldWUtPmJ1ZmZlcmluZ19wZXJjZW50ID0gcGVyY2VudDsKKworICAgICAgaWYgKCFRVUVVRV9JU19VU0lOR19RVUVVRSAocXVldWUpKSB7CisgICAgICAgIGdpbnQ2NCBkdXJhdGlvbjsKKworICAgICAgICBpZiAoUVVFVUVfSVNfVVNJTkdfUklOR19CVUZGRVIgKHF1ZXVlKSkKKyAgICAgICAgICBtb2RlID0gR1NUX0JVRkZFUklOR19USU1FU0hJRlQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBtb2RlID0gR1NUX0JVRkZFUklOR19ET1dOTE9BRDsKKworICAgICAgICBpZiAocXVldWUtPmJ5dGVfaW5fcmF0ZSA+IDApIHsKKyAgICAgICAgICBpZiAoZ3N0X3BhZF9xdWVyeV9wZWVyX2R1cmF0aW9uIChxdWV1ZS0+c2lua3BhZCwgR1NUX0ZPUk1BVF9CWVRFUywKKyAgICAgICAgICAgICAgICAgICZkdXJhdGlvbikpIHsKKyAgICAgICAgICAgIGJ1ZmZlcmluZ19sZWZ0ID0KKyAgICAgICAgICAgICAgICAoZ2RvdWJsZSkgKChkdXJhdGlvbiAtCisgICAgICAgICAgICAgICAgICAgIHF1ZXVlLT5jdXJyZW50LT53cml0aW5nX3BvcykgKiAxMDAwKSAvIHF1ZXVlLT5ieXRlX2luX3JhdGU7CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGJ1ZmZlcmluZ19sZWZ0ID0gR19NQVhJTlQ2NDsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgbW9kZSA9IEdTVF9CVUZGRVJJTkdfU1RSRUFNOworICAgICAgfQorCisgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgImJ1ZmZlcmluZyAlZCBwZXJjZW50IiwgKGdpbnQpIHBlcmNlbnQpOworICAgICAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19idWZmZXJpbmcgKEdTVF9PQkpFQ1RfQ0FTVCAocXVldWUpLAorICAgICAgICAgIChnaW50KSBwZXJjZW50KTsKKyAgICAgIGdzdF9tZXNzYWdlX3NldF9idWZmZXJpbmdfc3RhdHMgKG1lc3NhZ2UsIG1vZGUsCisgICAgICAgICAgcXVldWUtPmJ5dGVfaW5fcmF0ZSwgcXVldWUtPmJ5dGVfb3V0X3JhdGUsIGJ1ZmZlcmluZ19sZWZ0KTsKKworICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChxdWV1ZSksIG1lc3NhZ2UpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgImZpbGxlZCAlZCBwZXJjZW50IiwgKGdpbnQpIHBlcmNlbnQpOworICB9CisKKyN1bmRlZiBHRVRfUEVSQ0VOVAorfQorCitzdGF0aWMgdm9pZAorcmVzZXRfcmF0ZV90aW1lciAoR3N0UXVldWUyICogcXVldWUpCit7CisgIHF1ZXVlLT5ieXRlc19pbiA9IDA7CisgIHF1ZXVlLT5ieXRlc19vdXQgPSAwOworICBxdWV1ZS0+Ynl0ZV9pbl9yYXRlID0gMC4wOworICBxdWV1ZS0+Ynl0ZV9pbl9wZXJpb2QgPSAwOworICBxdWV1ZS0+Ynl0ZV9vdXRfcmF0ZSA9IDAuMDsKKyAgcXVldWUtPmxhc3RfaW5fZWxhcHNlZCA9IDAuMDsKKyAgcXVldWUtPmxhc3Rfb3V0X2VsYXBzZWQgPSAwLjA7CisgIHF1ZXVlLT5pbl90aW1lcl9zdGFydGVkID0gRkFMU0U7CisgIHF1ZXVlLT5vdXRfdGltZXJfc3RhcnRlZCA9IEZBTFNFOworfQorCisvKiB0aGUgaW50ZXJ2YWwgaW4gc2Vjb25kcyB0byByZWNhbGN1bGF0ZSB0aGUgcmF0ZSAqLworI2RlZmluZSBSQVRFX0lOVEVSVkFMICAgIDAuMgorLyogVHVuaW5nIGZvciByYXRlIGVzdGltYXRpb24uIFdlIHVzZSBhIGxhcmdlIHdpbmRvdyBmb3IgdGhlIGlucHV0IHJhdGUgYmVjYXVzZQorICogaXQgc2hvdWxkIGJlIHN0YWJsZSB3aGVuIGNvbm5lY3RlZCB0byBhIG5ldHdvcmsuIFRoZSBvdXRwdXQgcmF0ZSBpcyBsZXNzCisgKiBzdGFibGUgKHRoZSBlbGVtZW50cyBwcmVyb2xsLCBxdWV1ZXMgYmVoaW5kIGEgZGVtdXhlciBmaWxsLCAuLi4pIGFuZCBzaG91bGQKKyAqIHRoZXJlZm9yZSBhZGFwdCBtb3JlIHF1aWNrbHkuCisgKiBIb3dldmVyLCBpbml0aWFsIGlucHV0IHJhdGUgbWF5IGJlIHN1YmplY3QgdG8gYSBidXJzdCwgYW5kIHNob3VsZCB0aGVyZWZvcmUKKyAqIGluaXRpYWxseSBhbHNvIGFkYXB0IG1vcmUgcXVpY2tseSB0byBjaGFuZ2VzLCBhbmQgb25seSBsYXRlciBvbiBnaXZlIGhpZ2hlcgorICogd2VpZ2h0IHRvIHByZXZpb3VzIHZhbHVlcy4gKi8KKyNkZWZpbmUgQVZHX0lOKGF2Zyx2YWwsdzEsdzIpICAoKGF2ZykgKiAodzEpICsgKHZhbCkgKiAodzIpKSAvICgodzEpICsgKHcyKSkKKyNkZWZpbmUgQVZHX09VVChhdmcsdmFsKSAoKGF2ZykgKiAzLjAgKyAodmFsKSkgLyA0LjAKKworc3RhdGljIHZvaWQKK3VwZGF0ZV9pbl9yYXRlcyAoR3N0UXVldWUyICogcXVldWUpCit7CisgIGdkb3VibGUgZWxhcHNlZCwgcGVyaW9kOworICBnZG91YmxlIGJ5dGVfaW5fcmF0ZTsKKworICBpZiAoIXF1ZXVlLT5pbl90aW1lcl9zdGFydGVkKSB7CisgICAgcXVldWUtPmluX3RpbWVyX3N0YXJ0ZWQgPSBUUlVFOworICAgIGdfdGltZXJfc3RhcnQgKHF1ZXVlLT5pbl90aW1lcik7CisgICAgcmV0dXJuOworICB9CisKKyAgZWxhcHNlZCA9IGdfdGltZXJfZWxhcHNlZCAocXVldWUtPmluX3RpbWVyLCBOVUxMKTsKKworICAvKiByZWNhbGMgYWZ0ZXIgZWFjaCBpbnRlcnZhbC4gKi8KKyAgaWYgKHF1ZXVlLT5sYXN0X2luX2VsYXBzZWQgKyBSQVRFX0lOVEVSVkFMIDwgZWxhcHNlZCkgeworICAgIHBlcmlvZCA9IGVsYXBzZWQgLSBxdWV1ZS0+bGFzdF9pbl9lbGFwc2VkOworCisgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsCisgICAgICAgICJyYXRlczogcGVyaW9kICVmLCBpbiAlIiBHX0dVSU5UNjRfRk9STUFUICIsIGdsb2JhbCBwZXJpb2QgJWYiLAorICAgICAgICBwZXJpb2QsIHF1ZXVlLT5ieXRlc19pbiwgcXVldWUtPmJ5dGVfaW5fcGVyaW9kKTsKKworICAgIGJ5dGVfaW5fcmF0ZSA9IHF1ZXVlLT5ieXRlc19pbiAvIHBlcmlvZDsKKworICAgIGlmIChxdWV1ZS0+Ynl0ZV9pbl9yYXRlID09IDAuMCkKKyAgICAgIHF1ZXVlLT5ieXRlX2luX3JhdGUgPSBieXRlX2luX3JhdGU7CisgICAgZWxzZQorICAgICAgcXVldWUtPmJ5dGVfaW5fcmF0ZSA9IEFWR19JTiAocXVldWUtPmJ5dGVfaW5fcmF0ZSwgYnl0ZV9pbl9yYXRlLAorICAgICAgICAgIChkb3VibGUpIHF1ZXVlLT5ieXRlX2luX3BlcmlvZCwgcGVyaW9kKTsKKworICAgIC8qIGFub3RoZXIgZGF0YSBwb2ludCwgY2FwIGF0IDE2IGZvciBsb25nIHRpbWUgcnVubmluZyBhdmVyYWdlICovCisgICAgaWYgKHF1ZXVlLT5ieXRlX2luX3BlcmlvZCA8IDE2ICogUkFURV9JTlRFUlZBTCkKKyAgICAgIHF1ZXVlLT5ieXRlX2luX3BlcmlvZCArPSBwZXJpb2Q7CisKKyAgICAvKiByZXNldCB0aGUgdmFsdWVzIHRvIGNhbGN1bGF0ZSByYXRlIG92ZXIgdGhlIG5leHQgaW50ZXJ2YWwgKi8KKyAgICBxdWV1ZS0+bGFzdF9pbl9lbGFwc2VkID0gZWxhcHNlZDsKKyAgICBxdWV1ZS0+Ynl0ZXNfaW4gPSAwOworICB9CisKKyAgaWYgKHF1ZXVlLT5ieXRlX2luX3JhdGUgPiAwLjApIHsKKyAgICBxdWV1ZS0+Y3VyX2xldmVsLnJhdGVfdGltZSA9CisgICAgICAgIHF1ZXVlLT5jdXJfbGV2ZWwuYnl0ZXMgLyBxdWV1ZS0+Ynl0ZV9pbl9yYXRlICogR1NUX1NFQ09ORDsKKyAgfQorICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgInJhdGVzOiBpbiAlZiwgdGltZSAlIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICBxdWV1ZS0+Ynl0ZV9pbl9yYXRlLCBHU1RfVElNRV9BUkdTIChxdWV1ZS0+Y3VyX2xldmVsLnJhdGVfdGltZSkpOworfQorCitzdGF0aWMgdm9pZAordXBkYXRlX291dF9yYXRlcyAoR3N0UXVldWUyICogcXVldWUpCit7CisgIGdkb3VibGUgZWxhcHNlZCwgcGVyaW9kOworICBnZG91YmxlIGJ5dGVfb3V0X3JhdGU7CisKKyAgaWYgKCFxdWV1ZS0+b3V0X3RpbWVyX3N0YXJ0ZWQpIHsKKyAgICBxdWV1ZS0+b3V0X3RpbWVyX3N0YXJ0ZWQgPSBUUlVFOworICAgIGdfdGltZXJfc3RhcnQgKHF1ZXVlLT5vdXRfdGltZXIpOworICAgIHJldHVybjsKKyAgfQorCisgIGVsYXBzZWQgPSBnX3RpbWVyX2VsYXBzZWQgKHF1ZXVlLT5vdXRfdGltZXIsIE5VTEwpOworCisgIC8qIHJlY2FsYyBhZnRlciBlYWNoIGludGVydmFsLiAqLworICBpZiAocXVldWUtPmxhc3Rfb3V0X2VsYXBzZWQgKyBSQVRFX0lOVEVSVkFMIDwgZWxhcHNlZCkgeworICAgIHBlcmlvZCA9IGVsYXBzZWQgLSBxdWV1ZS0+bGFzdF9vdXRfZWxhcHNlZDsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLAorICAgICAgICAicmF0ZXM6IHBlcmlvZCAlZiwgb3V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHBlcmlvZCwgcXVldWUtPmJ5dGVzX291dCk7CisKKyAgICBieXRlX291dF9yYXRlID0gcXVldWUtPmJ5dGVzX291dCAvIHBlcmlvZDsKKworICAgIGlmIChxdWV1ZS0+Ynl0ZV9vdXRfcmF0ZSA9PSAwLjApCisgICAgICBxdWV1ZS0+Ynl0ZV9vdXRfcmF0ZSA9IGJ5dGVfb3V0X3JhdGU7CisgICAgZWxzZQorICAgICAgcXVldWUtPmJ5dGVfb3V0X3JhdGUgPSBBVkdfT1VUIChxdWV1ZS0+Ynl0ZV9vdXRfcmF0ZSwgYnl0ZV9vdXRfcmF0ZSk7CisKKyAgICAvKiByZXNldCB0aGUgdmFsdWVzIHRvIGNhbGN1bGF0ZSByYXRlIG92ZXIgdGhlIG5leHQgaW50ZXJ2YWwgKi8KKyAgICBxdWV1ZS0+bGFzdF9vdXRfZWxhcHNlZCA9IGVsYXBzZWQ7CisgICAgcXVldWUtPmJ5dGVzX291dCA9IDA7CisgIH0KKyAgaWYgKHF1ZXVlLT5ieXRlX2luX3JhdGUgPiAwLjApIHsKKyAgICBxdWV1ZS0+Y3VyX2xldmVsLnJhdGVfdGltZSA9CisgICAgICAgIHF1ZXVlLT5jdXJfbGV2ZWwuYnl0ZXMgLyBxdWV1ZS0+Ynl0ZV9pbl9yYXRlICogR1NUX1NFQ09ORDsKKyAgfQorICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgInJhdGVzOiBvdXQgJWYsIHRpbWUgJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgcXVldWUtPmJ5dGVfb3V0X3JhdGUsIEdTVF9USU1FX0FSR1MgKHF1ZXVlLT5jdXJfbGV2ZWwucmF0ZV90aW1lKSk7Cit9CisKK3N0YXRpYyB2b2lkCit1cGRhdGVfY3VyX3BvcyAoR3N0UXVldWUyICogcXVldWUsIEdzdFF1ZXVlMlJhbmdlICogcmFuZ2UsIGd1aW50NjQgcG9zKQoreworICBndWludDY0IHJlYWRpbmdfcG9zLCBtYXhfcmVhZGluZ19wb3M7CisKKyAgcmVhZGluZ19wb3MgPSBwb3M7CisgIG1heF9yZWFkaW5nX3BvcyA9IHJhbmdlLT5tYXhfcmVhZGluZ19wb3M7CisKKyAgbWF4X3JlYWRpbmdfcG9zID0gTUFYIChtYXhfcmVhZGluZ19wb3MsIHJlYWRpbmdfcG9zKTsKKworICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwKKyAgICAgICJ1cGRhdGluZyBtYXhfcmVhZGluZ19wb3MgZnJvbSAlIiBHX0dVSU5UNjRfRk9STUFUICIgdG8gJSIKKyAgICAgIEdfR1VJTlQ2NF9GT1JNQVQsIHJhbmdlLT5tYXhfcmVhZGluZ19wb3MsIG1heF9yZWFkaW5nX3Bvcyk7CisgIHJhbmdlLT5tYXhfcmVhZGluZ19wb3MgPSBtYXhfcmVhZGluZ19wb3M7CisKKyAgdXBkYXRlX2N1cl9sZXZlbCAocXVldWUsIHJhbmdlKTsKK30KKworc3RhdGljIGdib29sZWFuCitwZXJmb3JtX3NlZWtfdG9fb2Zmc2V0IChHc3RRdWV1ZTIgKiBxdWV1ZSwgZ3VpbnQ2NCBvZmZzZXQpCit7CisgIEdzdEV2ZW50ICpldmVudDsKKyAgZ2Jvb2xlYW4gcmVzOworCisgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJTZWVraW5nIHRvICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG9mZnNldCk7CisKKyAgZXZlbnQgPQorICAgICAgZ3N0X2V2ZW50X25ld19zZWVrICgxLjAsIEdTVF9GT1JNQVRfQllURVMsCisgICAgICBHU1RfU0VFS19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxBR19BQ0NVUkFURSwgR1NUX1NFRUtfVFlQRV9TRVQsIG9mZnNldCwKKyAgICAgIEdTVF9TRUVLX1RZUEVfTk9ORSwgLTEpOworCisgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAocXVldWUtPnNpbmtwYWQsIGV2ZW50KTsKKyAgR1NUX1FVRVVFMl9NVVRFWF9MT0NLIChxdWV1ZSk7CisKKyAgaWYgKHJlcykKKyAgICBxdWV1ZS0+Y3VycmVudCA9IGFkZF9yYW5nZSAocXVldWUsIG9mZnNldCk7CisKKyAgcmV0dXJuIHJlczsKK30KKworLyogc2VlIGlmIHRoZXJlIGlzIGVub3VnaCBkYXRhIGluIHRoZSBmaWxlIHRvIHJlYWQgYSBmdWxsIGJ1ZmZlciAqLworc3RhdGljIGdib29sZWFuCitnc3RfcXVldWUyX2hhdmVfZGF0YSAoR3N0UXVldWUyICogcXVldWUsIGd1aW50NjQgb2Zmc2V0LCBndWludCBsZW5ndGgpCit7CisgIEdzdFF1ZXVlMlJhbmdlICpyYW5nZTsKKworICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgImxvb2tpbmcgZm9yIG9mZnNldCAlIiBHX0dVSU5UNjRfRk9STUFUICIsIGxlbiAldSIsCisgICAgICBvZmZzZXQsIGxlbmd0aCk7CisKKyAgaWYgKChyYW5nZSA9IGZpbmRfcmFuZ2UgKHF1ZXVlLCBvZmZzZXQpKSkgeworICAgIGlmIChxdWV1ZS0+Y3VycmVudCAhPSByYW5nZSkgeworICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJzd2l0Y2hpbmcgcmFuZ2VzLCBkbyBzZWVrIHRvIHJhbmdlIHBvc2l0aW9uIik7CisgICAgICBwZXJmb3JtX3NlZWtfdG9fb2Zmc2V0IChxdWV1ZSwgcmFuZ2UtPndyaXRpbmdfcG9zKTsKKyAgICB9CisKKyAgICBHU1RfSU5GT19PQkpFQ1QgKHF1ZXVlLCAiY3VyX2xldmVsLmJ5dGVzICV1IChtYXggJSIgR19HVUlOVDY0X0ZPUk1BVCAiKSIsCisgICAgICAgIHF1ZXVlLT5jdXJfbGV2ZWwuYnl0ZXMsIFFVRVVFX01BWF9CWVRFUyAocXVldWUpKTsKKworICAgIC8qIHdlIGhhdmUgYSByYW5nZSBmb3Igb2Zmc2V0ICovCisgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsCisgICAgICAgICJ3ZSBoYXZlIGEgcmFuZ2UgJXAsIG9mZnNldCAlIiBHX0dVSU5UNjRfRk9STUFUICIsIHdyaXRpbmdfcG9zICUiCisgICAgICAgIEdfR1VJTlQ2NF9GT1JNQVQsIHJhbmdlLCByYW5nZS0+b2Zmc2V0LCByYW5nZS0+d3JpdGluZ19wb3MpOworCisgICAgaWYgKCFRVUVVRV9JU19VU0lOR19SSU5HX0JVRkZFUiAocXVldWUpICYmIHF1ZXVlLT5pc19lb3MpCisgICAgICByZXR1cm4gVFJVRTsKKworICAgIGlmIChvZmZzZXQgKyBsZW5ndGggPD0gcmFuZ2UtPndyaXRpbmdfcG9zKQorICAgICAgcmV0dXJuIFRSVUU7CisgICAgZWxzZQorICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsCisgICAgICAgICAgIk5lZWQgbW9yZSBkYXRhICglIiBHX0dVSU5UNjRfRk9STUFUICIgYnl0ZXMgbW9yZSkiLAorICAgICAgICAgIChvZmZzZXQgKyBsZW5ndGgpIC0gcmFuZ2UtPndyaXRpbmdfcG9zKTsKKworICB9IGVsc2UgeworICAgIEdTVF9JTkZPX09CSkVDVCAocXVldWUsICJub3QgZm91bmQgaW4gYW55IHJhbmdlIik7CisgICAgLyogd2UgZG9uJ3QgaGF2ZSB0aGUgcmFuZ2UsIHNlZSBob3cgZmFyIGF3YXkgd2UgYXJlLCBGSVhNRSwgZmluZCBhIGdvb2QKKyAgICAgKiB0aHJlc2hvbGQgYmFzZWQgb24gdGhlIGluY29taW5nIHJhdGUuICovCisgICAgaWYgKCFxdWV1ZS0+aXNfZW9zICYmIHF1ZXVlLT5jdXJyZW50KSB7CisgICAgICBpZiAoUVVFVUVfSVNfVVNJTkdfUklOR19CVUZGRVIgKHF1ZXVlKSkgeworICAgICAgICBpZiAob2Zmc2V0IDwgcXVldWUtPmN1cnJlbnQtPm9mZnNldCB8fCBvZmZzZXQgPgorICAgICAgICAgICAgcXVldWUtPmN1cnJlbnQtPndyaXRpbmdfcG9zICsgUVVFVUVfTUFYX0JZVEVTIChxdWV1ZSkgLQorICAgICAgICAgICAgcXVldWUtPmN1cl9sZXZlbC5ieXRlcykgeworICAgICAgICAgIHBlcmZvcm1fc2Vla190b19vZmZzZXQgKHF1ZXVlLCBvZmZzZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIEdTVF9JTkZPX09CSkVDVCAocXVldWUsCisgICAgICAgICAgICAgICJyZXF1ZXN0ZWQgZGF0YSBpcyB3aXRoaW4gcmFuZ2UsIHdhaXQgZm9yIGRhdGEiKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIGlmIChvZmZzZXQgPCBxdWV1ZS0+Y3VycmVudC0+d3JpdGluZ19wb3MgKyAyMDAwMDApIHsKKyAgICAgICAgdXBkYXRlX2N1cl9wb3MgKHF1ZXVlLCBxdWV1ZS0+Y3VycmVudCwgb2Zmc2V0ICsgbGVuZ3RoKTsKKyAgICAgICAgR1NUX0lORk9fT0JKRUNUIChxdWV1ZSwgIndhaXQgZm9yIGRhdGEiKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgfQorICAgIH0KKworICAgIC8qIHRvbyBmYXIgYXdheSwgZG8gYSBzZWVrICovCisgICAgcGVyZm9ybV9zZWVrX3RvX29mZnNldCAocXVldWUsIG9mZnNldCk7CisgIH0KKworICByZXR1cm4gRkFMU0U7Cit9CisKKyNpZmRlZiBIQVZFX0ZTRUVLTworI2RlZmluZSBGU0VFS19GSUxFKGZpbGUsb2Zmc2V0KSAgKGZzZWVrbyAoZmlsZSwgKG9mZl90KSBvZmZzZXQsIFNFRUtfU0VUKSAhPSAwKQorI2VsaWYgZGVmaW5lZCAoR19PU19VTklYKSB8fCBkZWZpbmVkIChHX09TX1dJTjMyKQorI2RlZmluZSBGU0VFS19GSUxFKGZpbGUsb2Zmc2V0KSAgKGxzZWVrIChmaWxlbm8gKGZpbGUpLCAob2ZmX3QpIG9mZnNldCwgU0VFS19TRVQpID09IChvZmZfdCkgLTEpCisjZWxzZQorI2RlZmluZSBGU0VFS19GSUxFKGZpbGUsb2Zmc2V0KSAgKGZzZWVrIChmaWxlLCBvZmZzZXQsIFNFRUtfU0VUKSAhPSAwKQorI2VuZGlmCisKK3N0YXRpYyBHc3RGbG93UmV0dXJuCitnc3RfcXVldWUyX3JlYWRfZGF0YV9hdF9vZmZzZXQgKEdzdFF1ZXVlMiAqIHF1ZXVlLCBndWludDY0IG9mZnNldCwgZ3VpbnQgbGVuZ3RoLAorICAgIGd1aW50OCAqIGRzdCwgZ2ludDY0ICogcmVhZF9yZXR1cm4pCit7CisgIGd1aW50OCAqcmluZ19idWZmZXI7CisgIHNpemVfdCByZXM7CisKKyAgcmluZ19idWZmZXIgPSBxdWV1ZS0+cmluZ19idWZmZXI7CisKKyAgaWYgKFFVRVVFX0lTX1VTSU5HX1RFTVBfRklMRSAocXVldWUpICYmIEZTRUVLX0ZJTEUgKHF1ZXVlLT50ZW1wX2ZpbGUsIG9mZnNldCkpCisgICAgZ290byBzZWVrX2ZhaWxlZDsKKworICAvKiB0aGlzIHNob3VsZCBub3QgYmxvY2sgKi8KKyAgR1NUX0xPR19PQkpFQ1QgKHF1ZXVlLCAiUmVhZGluZyAlZCBieXRlcyBmcm9tIG9mZnNldCAlIiBHX0dVSU5UNjRfRk9STUFULAorICAgICAgbGVuZ3RoLCBvZmZzZXQpOworICBpZiAoUVVFVUVfSVNfVVNJTkdfVEVNUF9GSUxFIChxdWV1ZSkpIHsKKyAgICByZXMgPSBmcmVhZCAoZHN0LCAxLCBsZW5ndGgsIHF1ZXVlLT50ZW1wX2ZpbGUpOworICB9IGVsc2UgeworICAgIG1lbWNweSAoZHN0LCByaW5nX2J1ZmZlciArIG9mZnNldCwgbGVuZ3RoKTsKKyAgICByZXMgPSBsZW5ndGg7CisgIH0KKworICBHU1RfTE9HX09CSkVDVCAocXVldWUsICJyZWFkICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMiLCByZXMpOworCisgIGlmIChHX1VOTElLRUxZIChyZXMgPCBsZW5ndGgpKSB7CisgICAgaWYgKCFRVUVVRV9JU19VU0lOR19URU1QX0ZJTEUgKHF1ZXVlKSkKKyAgICAgIGdvdG8gY291bGRfbm90X3JlYWQ7CisgICAgLyogY2hlY2sgZm9yIGVycm9ycyBvciBFT0YgKi8KKyAgICBpZiAoZmVycm9yIChxdWV1ZS0+dGVtcF9maWxlKSkKKyAgICAgIGdvdG8gY291bGRfbm90X3JlYWQ7CisgICAgaWYgKGZlb2YgKHF1ZXVlLT50ZW1wX2ZpbGUpICYmIGxlbmd0aCA+IDApCisgICAgICBnb3RvIGVvczsKKyAgfQorCisgICpyZWFkX3JldHVybiA9IHJlczsKKworICByZXR1cm4gR1NUX0ZMT1dfT0s7CisKK3NlZWtfZmFpbGVkOgorICB7CisgICAgR1NUX0VMRU1FTlRfRVJST1IgKHF1ZXVlLCBSRVNPVVJDRSwgU0VFSywgKE5VTEwpLCBHU1RfRVJST1JfU1lTVEVNKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7CisgIH0KK2NvdWxkX25vdF9yZWFkOgorICB7CisgICAgR1NUX0VMRU1FTlRfRVJST1IgKHF1ZXVlLCBSRVNPVVJDRSwgUkVBRCwgKE5VTEwpLCBHU1RfRVJST1JfU1lTVEVNKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7CisgIH0KK2VvczoKKyAgeworICAgIEdTVF9ERUJVRyAoIm5vbi1yZWd1bGFyIGZpbGUgaGl0cyBFT1MiKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfVU5FWFBFQ1RFRDsKKyAgfQorfQorCitzdGF0aWMgR3N0Rmxvd1JldHVybgorZ3N0X3F1ZXVlMl9jcmVhdGVfcmVhZCAoR3N0UXVldWUyICogcXVldWUsIGd1aW50NjQgb2Zmc2V0LCBndWludCBsZW5ndGgsCisgICAgR3N0QnVmZmVyICoqIGJ1ZmZlcikKK3sKKyAgR3N0QnVmZmVyICpidWY7CisgIGd1aW50OCAqZGF0YTsKKyAgZ3VpbnQ2NCBmaWxlX29mZnNldDsKKyAgZ3VpbnQgYmxvY2tfbGVuZ3RoLCByZW1haW5pbmcsIHJlYWRfbGVuZ3RoOworICBndWludDY0IHJiX3NpemU7CisgIGd1aW50NjQgcnBvczsKKyAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKKworICAvKiBhbGxvY2F0ZSB0aGUgb3V0cHV0IGJ1ZmZlciBvZiB0aGUgcmVxdWVzdGVkIHNpemUgKi8KKyAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIGxlbmd0aCwgMCk7CisgIGRhdGEgPSBnc3RfYnVmZmVyX21hcCAoYnVmLCBOVUxMLCBOVUxMLCBHU1RfTUFQX1dSSVRFKTsKKworICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgIlJlYWRpbmcgJXUgYnl0ZXMgZnJvbSAlIiBHX0dVSU5UNjRfRk9STUFULCBsZW5ndGgsCisgICAgICBvZmZzZXQpOworCisgIHJwb3MgPSBvZmZzZXQ7CisgIHJiX3NpemUgPSBxdWV1ZS0+cmluZ19idWZmZXJfbWF4X3NpemU7CisKKyAgcmVtYWluaW5nID0gbGVuZ3RoOworICB3aGlsZSAocmVtYWluaW5nID4gMCkgeworICAgIC8qIGNvbmZpZ3VyZSBob3cgbXVjaC93aGV0aGVyIHRvIHJlYWQgKi8KKyAgICBpZiAoIWdzdF9xdWV1ZTJfaGF2ZV9kYXRhIChxdWV1ZSwgcnBvcywgcmVtYWluaW5nKSkgeworICAgICAgcmVhZF9sZW5ndGggPSAwOworCisgICAgICBpZiAoUVVFVUVfSVNfVVNJTkdfUklOR19CVUZGRVIgKHF1ZXVlKSkgeworICAgICAgICBndWludDY0IGxldmVsOworCisgICAgICAgIC8qIGNhbGN1bGF0ZSBob3cgZmFyIGF3YXkgdGhlIG9mZnNldCBpcyAqLworICAgICAgICBpZiAocXVldWUtPmN1cnJlbnQtPndyaXRpbmdfcG9zID4gcnBvcykKKyAgICAgICAgICBsZXZlbCA9IHF1ZXVlLT5jdXJyZW50LT53cml0aW5nX3BvcyAtIHJwb3M7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBsZXZlbCA9IDA7CisKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsCisgICAgICAgICAgICAicmVhZGluZyAlIiBHX0dVSU5UNjRfRk9STUFUICIsIHdyaXRpbmcgJSIgR19HVUlOVDY0X0ZPUk1BVAorICAgICAgICAgICAgIiwgbGV2ZWwgJSIgR19HVUlOVDY0X0ZPUk1BVCwKKyAgICAgICAgICAgIHJwb3MsIHF1ZXVlLT5jdXJyZW50LT53cml0aW5nX3BvcywgbGV2ZWwpOworCisgICAgICAgIGlmIChsZXZlbCA+PSByYl9zaXplKSB7CisgICAgICAgICAgLyogd2UgZG9uJ3QgaGF2ZSB0aGUgZGF0YSBidXQgaWYgd2UgaGF2ZSBhIHJpbmcgYnVmZmVyIHRoYXQgaXMgZnVsbCwgd2UKKyAgICAgICAgICAgKiBuZWVkIHRvIHJlYWQgKi8KKyAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwKKyAgICAgICAgICAgICAgInJpbmcgYnVmZmVyIGZ1bGwsIHJlYWRpbmcgcmluZy1idWZmZXItbWF4LXNpemUgJSIKKyAgICAgICAgICAgICAgR19HVUlOVDY0X0ZPUk1BVCAiIGJ5dGVzIiwgcmJfc2l6ZSk7CisgICAgICAgICAgcmVhZF9sZW5ndGggPSByYl9zaXplOworICAgICAgICB9IGVsc2UgaWYgKHF1ZXVlLT5pc19lb3MpIHsKKyAgICAgICAgICAvKiB3b24ndCBnZXQgYW55IG1vcmUgZGF0YSBzbyByZWFkIGFueSBkYXRhIHdlIGhhdmUgKi8KKyAgICAgICAgICBpZiAobGV2ZWwpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLAorICAgICAgICAgICAgICAgICJFT1MgaGl0IGJ1dCByZWFkICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBieXRlcyB0aGF0IHdlIGhhdmUiLAorICAgICAgICAgICAgICAgIGxldmVsKTsKKyAgICAgICAgICAgIHJlYWRfbGVuZ3RoID0gbGV2ZWw7CisgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBnb3RvIGhpdF9lb3M7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKHJlYWRfbGVuZ3RoID09IDApIHsKKyAgICAgICAgaWYgKFFVRVVFX0lTX1VTSU5HX1JJTkdfQlVGRkVSIChxdWV1ZSkKKyAgICAgICAgICAgICYmIHF1ZXVlLT5jdXJyZW50LT5tYXhfcmVhZGluZ19wb3MgPiBycG9zKSB7CisgICAgICAgICAgLyogcHJvdGVjdCBjYWNoZWQgZGF0YSAoZGF0YSBiZXR3ZWVuIG9mZnNldCBhbmQgbWF4X3JlYWRpbmdfcG9zKQorICAgICAgICAgICAqIGFuZCB1cGRhdGUgY3VycmVudCBsZXZlbCAqLworICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLAorICAgICAgICAgICAgICAicHJvdGVjdGluZyBjYWNoZWQgZGF0YSBbJSIgR19HVUlOVDY0X0ZPUk1BVCAiLSUiIEdfR1VJTlQ2NF9GT1JNQVQKKyAgICAgICAgICAgICAgIl0iLCBycG9zLCBxdWV1ZS0+Y3VycmVudC0+bWF4X3JlYWRpbmdfcG9zKTsKKyAgICAgICAgICBxdWV1ZS0+Y3VycmVudC0+bWF4X3JlYWRpbmdfcG9zID0gcnBvczsKKyAgICAgICAgICB1cGRhdGVfY3VyX2xldmVsIChxdWV1ZSwgcXVldWUtPmN1cnJlbnQpOworICAgICAgICB9CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAid2FpdGluZyBmb3IgYWRkIik7CisgICAgICAgIEdTVF9RVUVVRTJfV0FJVF9BRERfQ0hFQ0sgKHF1ZXVlLCBxdWV1ZS0+c3JjcmVzdWx0LCBvdXRfZmx1c2hpbmcpOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgLyogd2UgaGF2ZSB0aGUgcmVxdWVzdGVkIGRhdGEgc28gcmVhZCBpdCAqLworICAgICAgcmVhZF9sZW5ndGggPSByZW1haW5pbmc7CisgICAgfQorCisgICAgLyogc2V0IHJhbmdlIHJlYWRpbmdfcG9zIHRvIGFjdHVhbCByZWFkaW5nIHBvc2l0aW9uIGZvciB0aGlzIHJlYWQgKi8KKyAgICBxdWV1ZS0+Y3VycmVudC0+cmVhZGluZ19wb3MgPSBycG9zOworCisgICAgLyogY29uZmlndXJlIGhvdyBtdWNoIGFuZCBmcm9tIHdoZXJlIHRvIHJlYWQgKi8KKyAgICBpZiAoUVVFVUVfSVNfVVNJTkdfUklOR19CVUZGRVIgKHF1ZXVlKSkgeworICAgICAgZmlsZV9vZmZzZXQgPQorICAgICAgICAgIChxdWV1ZS0+Y3VycmVudC0+cmJfb2Zmc2V0ICsgKHJwb3MgLQorICAgICAgICAgICAgICBxdWV1ZS0+Y3VycmVudC0+b2Zmc2V0KSkgJSByYl9zaXplOworICAgICAgaWYgKGZpbGVfb2Zmc2V0ICsgcmVhZF9sZW5ndGggPiByYl9zaXplKSB7CisgICAgICAgIGJsb2NrX2xlbmd0aCA9IHJiX3NpemUgLSBmaWxlX29mZnNldDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGJsb2NrX2xlbmd0aCA9IHJlYWRfbGVuZ3RoOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBmaWxlX29mZnNldCA9IHJwb3M7CisgICAgICBibG9ja19sZW5ndGggPSByZWFkX2xlbmd0aDsKKyAgICB9CisKKyAgICAvKiB3aGlsZSB3ZSBzdGlsbCBoYXZlIGRhdGEgdG8gcmVhZCwgd2UgbG9vcCAqLworICAgIHdoaWxlIChyZWFkX2xlbmd0aCA+IDApIHsKKyAgICAgIGdpbnQ2NCByZWFkX3JldHVybjsKKworICAgICAgcmV0ID0KKyAgICAgICAgICBnc3RfcXVldWUyX3JlYWRfZGF0YV9hdF9vZmZzZXQgKHF1ZXVlLCBmaWxlX29mZnNldCwgYmxvY2tfbGVuZ3RoLAorICAgICAgICAgIGRhdGEsICZyZWFkX3JldHVybik7CisgICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQorICAgICAgICBnb3RvIHJlYWRfZXJyb3I7CisKKyAgICAgIGZpbGVfb2Zmc2V0ICs9IHJlYWRfcmV0dXJuOworICAgICAgaWYgKFFVRVVFX0lTX1VTSU5HX1JJTkdfQlVGRkVSIChxdWV1ZSkpCisgICAgICAgIGZpbGVfb2Zmc2V0ICU9IHJiX3NpemU7CisKKyAgICAgIGRhdGEgKz0gcmVhZF9yZXR1cm47CisgICAgICByZWFkX2xlbmd0aCAtPSByZWFkX3JldHVybjsKKyAgICAgIGJsb2NrX2xlbmd0aCA9IHJlYWRfbGVuZ3RoOworICAgICAgcmVtYWluaW5nIC09IHJlYWRfcmV0dXJuOworCisgICAgICBycG9zID0gKHF1ZXVlLT5jdXJyZW50LT5yZWFkaW5nX3BvcyArPSByZWFkX3JldHVybik7CisgICAgICB1cGRhdGVfY3VyX3BvcyAocXVldWUsIHF1ZXVlLT5jdXJyZW50LCBxdWV1ZS0+Y3VycmVudC0+cmVhZGluZ19wb3MpOworICAgIH0KKyAgICBHU1RfUVVFVUUyX1NJR05BTF9ERUwgKHF1ZXVlKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgIiV1IGJ5dGVzIGxlZnQgdG8gcmVhZCIsIHJlbWFpbmluZyk7CisgIH0KKworICBnc3RfYnVmZmVyX3VubWFwIChidWYsIGRhdGEsIGxlbmd0aCk7CisKKyAgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZikgPSBvZmZzZXQ7CisgIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoYnVmKSA9IG9mZnNldCArIGxlbmd0aDsKKworICAqYnVmZmVyID0gYnVmOworCisgIHJldHVybiByZXQ7CisKKyAgLyogRVJST1JTICovCitoaXRfZW9zOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJFT1MgaGl0IGFuZCB3ZSBkb24ndCBoYXZlIGFueSByZXF1ZXN0ZWQgZGF0YSIpOworICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7CisgICAgcmV0dXJuIEdTVF9GTE9XX1VORVhQRUNURUQ7CisgIH0KK291dF9mbHVzaGluZzoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAid2UgYXJlIGZsdXNoaW5nIik7CisgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfV1JPTkdfU1RBVEU7CisgIH0KK3JlYWRfZXJyb3I6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgIndlIGhhdmUgYSByZWFkIGVycm9yIik7CisgICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCBkYXRhLCAwKTsKKyAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOworICAgIHJldHVybiByZXQ7CisgIH0KK30KKworLyogc2hvdWxkIGJlIGNhbGxlZCB3aXRoIFFVRVVFX0xPQ0sgKi8KK3N0YXRpYyBHc3RNaW5pT2JqZWN0ICoKK2dzdF9xdWV1ZTJfcmVhZF9pdGVtX2Zyb21fZmlsZSAoR3N0UXVldWUyICogcXVldWUpCit7CisgIEdzdE1pbmlPYmplY3QgKml0ZW07CisKKyAgaWYgKHF1ZXVlLT5zdGFydGluZ19zZWdtZW50ICE9IE5VTEwpIHsKKyAgICBpdGVtID0gR1NUX01JTklfT0JKRUNUX0NBU1QgKHF1ZXVlLT5zdGFydGluZ19zZWdtZW50KTsKKyAgICBxdWV1ZS0+c3RhcnRpbmdfc2VnbWVudCA9IE5VTEw7CisgIH0gZWxzZSB7CisgICAgR3N0Rmxvd1JldHVybiByZXQ7CisgICAgR3N0QnVmZmVyICpidWZmZXI7CisgICAgZ3VpbnQ2NCByZWFkaW5nX3BvczsKKworICAgIHJlYWRpbmdfcG9zID0gcXVldWUtPmN1cnJlbnQtPnJlYWRpbmdfcG9zOworCisgICAgcmV0ID0KKyAgICAgICAgZ3N0X3F1ZXVlMl9jcmVhdGVfcmVhZCAocXVldWUsIHJlYWRpbmdfcG9zLCBERUZBVUxUX0JVRkZFUl9TSVpFLAorICAgICAgICAmYnVmZmVyKTsKKworICAgIHN3aXRjaCAocmV0KSB7CisgICAgICBjYXNlIEdTVF9GTE9XX09LOgorICAgICAgICBpdGVtID0gR1NUX01JTklfT0JKRUNUX0NBU1QgKGJ1ZmZlcik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHU1RfRkxPV19VTkVYUEVDVEVEOgorICAgICAgICBpdGVtID0gR1NUX01JTklfT0JKRUNUX0NBU1QgKGdzdF9ldmVudF9uZXdfZW9zICgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBpdGVtID0gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIHJldHVybiBpdGVtOworfQorCisvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIE1VVEVYX0xPQ0suIFdpbGwgYnJpZWZseSByZWxlYXNlIHRoZSBsb2NrIHdoZW4gbm90aWZ5aW5nCisgKiB0aGUgdGVtcCBmaWxlbmFtZS4gKi8KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3F1ZXVlMl9vcGVuX3RlbXBfbG9jYXRpb25fZmlsZSAoR3N0UXVldWUyICogcXVldWUpCit7CisgIGdpbnQgZmQgPSAtMTsKKyAgZ2NoYXIgKm5hbWUgPSBOVUxMOworCisgIGlmIChxdWV1ZS0+dGVtcF9maWxlKQorICAgIGdvdG8gYWxyZWFkeV9vcGVuZWQ7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJvcGVuaW5nIHRlbXAgZmlsZSAlcyIsIHF1ZXVlLT50ZW1wX3RlbXBsYXRlKTsKKworICAvKiB3ZSBoYXZlIHR3byBjYXNlczoKKyAgICogLSB0ZW1wX2xvY2F0aW9uIHdhcyBzZXQgdG8gc29tZXRoaW5nICFOVUxMIChEZXByZWNhdGVkKS4gaW4gdGhpcyBjYXNlIHdlCisgICAqICAgb3BlbiB0aGUgc3BlY2lmaWVkIGZpbGVuYW1lLgorICAgKiAtIHRlbXBfdGVtcGxhdGUgd2FzIHNldCwgYWxsb2NhdGUgYSBmaWxlbmFtZSBhbmQgb3BlbiB0aGF0IGZpbGVuYW1lCisgICAqLworICBpZiAoIXF1ZXVlLT50ZW1wX2xvY2F0aW9uX3NldCkgeworICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KKyAgICBpZiAocXVldWUtPnRlbXBfdGVtcGxhdGUgPT0gTlVMTCkKKyAgICAgIGdvdG8gbm9fZGlyZWN0b3J5OworCisgICAgLyogbWFrZSBjb3B5IG9mIHRoZSB0ZW1wbGF0ZSwgd2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhpcyAqLworICAgIG5hbWUgPSBnX3N0cmR1cCAocXVldWUtPnRlbXBfdGVtcGxhdGUpOworICAgIGZkID0gZ19ta3N0ZW1wIChuYW1lKTsKKyAgICBpZiAoZmQgPT0gLTEpCisgICAgICBnb3RvIG1rc3RlbXBfZmFpbGVkOworCisgICAgLyogb3BlbiB0aGUgZmlsZSBmb3IgdXBkYXRlL3dyaXRpbmcgKi8KKyAgICBxdWV1ZS0+dGVtcF9maWxlID0gZmRvcGVuIChmZCwgIndiKyIpOworICAgIC8qIGVycm9yIGNyZWF0aW5nIGZpbGUgKi8KKyAgICBpZiAocXVldWUtPnRlbXBfZmlsZSA9PSBOVUxMKQorICAgICAgZ290byBvcGVuX2ZhaWxlZDsKKworICAgIGdfZnJlZSAocXVldWUtPnRlbXBfbG9jYXRpb24pOworICAgIHF1ZXVlLT50ZW1wX2xvY2F0aW9uID0gbmFtZTsKKworICAgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7CisKKyAgICAvKiB3ZSBjYW4ndCBlbWl0IHRoZSBub3RpZnkgd2l0aCB0aGUgbG9jayAqLworICAgIGdfb2JqZWN0X25vdGlmeSAoR19PQkpFQ1QgKHF1ZXVlKSwgInRlbXAtbG9jYXRpb24iKTsKKworICAgIEdTVF9RVUVVRTJfTVVURVhfTE9DSyAocXVldWUpOworICB9IGVsc2UgeworICAgIC8qIG9wZW4gdGhlIGZpbGUgZm9yIHVwZGF0ZS93cml0aW5nLCB0aGlzIGlzIGRlcHJlY2F0ZWQgYnV0IHdlIHN0aWxsIG5lZWQgdG8KKyAgICAgKiBzdXBwb3J0IGl0IGZvciBBUEkvQUJJIGNvbXBhdGliaWxpdHkgKi8KKyAgICBxdWV1ZS0+dGVtcF9maWxlID0gZ19mb3BlbiAocXVldWUtPnRlbXBfbG9jYXRpb24sICJ3YisiKTsKKyAgICAvKiBlcnJvciBjcmVhdGluZyBmaWxlICovCisgICAgaWYgKHF1ZXVlLT50ZW1wX2ZpbGUgPT0gTlVMTCkKKyAgICAgIGdvdG8gb3Blbl9mYWlsZWQ7CisgIH0KKyAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJvcGVuZWQgdGVtcCBmaWxlICVzIiwgcXVldWUtPnRlbXBfdGVtcGxhdGUpOworCisgIHJldHVybiBUUlVFOworCisgIC8qIEVSUk9SUyAqLworYWxyZWFkeV9vcGVuZWQ6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgInRlbXAgZmlsZSB3YXMgYWxyZWFkeSBvcGVuIik7CisgICAgcmV0dXJuIFRSVUU7CisgIH0KK25vX2RpcmVjdG9yeToKKyAgeworICAgIEdTVF9FTEVNRU5UX0VSUk9SIChxdWV1ZSwgUkVTT1VSQ0UsIE5PVF9GT1VORCwKKyAgICAgICAgKF8oIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iKSksIChOVUxMKSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Citta3N0ZW1wX2ZhaWxlZDoKKyAgeworICAgIEdTVF9FTEVNRU5UX0VSUk9SIChxdWV1ZSwgUkVTT1VSQ0UsIE9QRU5fUkVBRCwKKyAgICAgICAgKF8oIkNvdWxkIG5vdCBjcmVhdGUgdGVtcCBmaWxlIFwiJXNcIi4iKSwgcXVldWUtPnRlbXBfdGVtcGxhdGUpLAorICAgICAgICBHU1RfRVJST1JfU1lTVEVNKTsKKyAgICBnX2ZyZWUgKG5hbWUpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorb3Blbl9mYWlsZWQ6CisgIHsKKyAgICBHU1RfRUxFTUVOVF9FUlJPUiAocXVldWUsIFJFU09VUkNFLCBPUEVOX1JFQUQsCisgICAgICAgIChfKCJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iKSwgbmFtZSksIEdTVF9FUlJPUl9TWVNURU0pOworICAgIGdfZnJlZSAobmFtZSk7CisgICAgaWYgKGZkICE9IC0xKQorICAgICAgY2xvc2UgKGZkKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9xdWV1ZTJfY2xvc2VfdGVtcF9sb2NhdGlvbl9maWxlIChHc3RRdWV1ZTIgKiBxdWV1ZSkKK3sKKyAgLyogbm90aGluZyB0byBkbyAqLworICBpZiAocXVldWUtPnRlbXBfZmlsZSA9PSBOVUxMKQorICAgIHJldHVybjsKKworICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgImNsb3NpbmcgdGVtcCBmaWxlIik7CisKKyAgZmZsdXNoIChxdWV1ZS0+dGVtcF9maWxlKTsKKyAgZmNsb3NlIChxdWV1ZS0+dGVtcF9maWxlKTsKKworICBpZiAocXVldWUtPnRlbXBfcmVtb3ZlKQorICAgIHJlbW92ZSAocXVldWUtPnRlbXBfbG9jYXRpb24pOworCisgIHF1ZXVlLT50ZW1wX2ZpbGUgPSBOVUxMOworICBjbGVhbl9yYW5nZXMgKHF1ZXVlKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9xdWV1ZTJfZmx1c2hfdGVtcF9maWxlIChHc3RRdWV1ZTIgKiBxdWV1ZSkKK3sKKyAgaWYgKHF1ZXVlLT50ZW1wX2ZpbGUgPT0gTlVMTCkKKyAgICByZXR1cm47CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJmbHVzaGluZyB0ZW1wIGZpbGUiKTsKKworICBxdWV1ZS0+dGVtcF9maWxlID0gZ19mcmVvcGVuIChxdWV1ZS0+dGVtcF9sb2NhdGlvbiwgIndiKyIsIHF1ZXVlLT50ZW1wX2ZpbGUpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3F1ZXVlMl9sb2NrZWRfZmx1c2ggKEdzdFF1ZXVlMiAqIHF1ZXVlKQoreworICBpZiAoIVFVRVVFX0lTX1VTSU5HX1FVRVVFIChxdWV1ZSkpIHsKKyAgICBpZiAoUVVFVUVfSVNfVVNJTkdfVEVNUF9GSUxFIChxdWV1ZSkpCisgICAgICBnc3RfcXVldWUyX2ZsdXNoX3RlbXBfZmlsZSAocXVldWUpOworICAgIGluaXRfcmFuZ2VzIChxdWV1ZSk7CisgIH0gZWxzZSB7CisgICAgd2hpbGUgKCFnX3F1ZXVlX2lzX2VtcHR5IChxdWV1ZS0+cXVldWUpKSB7CisgICAgICBHc3RNaW5pT2JqZWN0ICpkYXRhID0gZ19xdWV1ZV9wb3BfaGVhZCAocXVldWUtPnF1ZXVlKTsKKworICAgICAgLyogVGhlbiBsb3NlIGFub3RoZXIgcmVmZXJlbmNlIGJlY2F1c2Ugd2UgYXJlIHN1cHBvc2VkIHRvIGRlc3Ryb3kgdGhhdAorICAgICAgICAgZGF0YSB3aGVuIGZsdXNoaW5nICovCisgICAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKGRhdGEpOworICAgIH0KKyAgfQorICBHU1RfUVVFVUUyX0NMRUFSX0xFVkVMIChxdWV1ZS0+Y3VyX2xldmVsKTsKKyAgZ3N0X3NlZ21lbnRfaW5pdCAoJnF1ZXVlLT5zaW5rX3NlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7CisgIGdzdF9zZWdtZW50X2luaXQgKCZxdWV1ZS0+c3JjX3NlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7CisgIHF1ZXVlLT5zaW5rdGltZSA9IHF1ZXVlLT5zcmN0aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgcXVldWUtPnNpbmtfdGFpbnRlZCA9IHF1ZXVlLT5zcmNfdGFpbnRlZCA9IFRSVUU7CisgIGlmIChxdWV1ZS0+c3RhcnRpbmdfc2VnbWVudCAhPSBOVUxMKQorICAgIGdzdF9ldmVudF91bnJlZiAocXVldWUtPnN0YXJ0aW5nX3NlZ21lbnQpOworICBxdWV1ZS0+c3RhcnRpbmdfc2VnbWVudCA9IE5VTEw7CisgIHF1ZXVlLT5zZWdtZW50X2V2ZW50X3JlY2VpdmVkID0gRkFMU0U7CisKKyAgLyogd2UgZGVsZXRlZCBhIGxvdCBvZiBzb21ldGhpbmcgKi8KKyAgR1NUX1FVRVVFMl9TSUdOQUxfREVMIChxdWV1ZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3F1ZXVlMl93YWl0X2ZyZWVfc3BhY2UgKEdzdFF1ZXVlMiAqIHF1ZXVlKQoreworICAvKiBXZSBtYWtlIHNwYWNlIGF2YWlsYWJsZSBpZiB3ZSdyZSAiZnVsbCIgYWNjb3JkaW5nIHRvIHdoYXRldmVyCisgICAqIHRoZSB1c2VyIGRlZmluZWQgYXMgImZ1bGwiLiAqLworICBpZiAoZ3N0X3F1ZXVlMl9pc19maWxsZWQgKHF1ZXVlKSkgeworICAgIGdib29sZWFuIHN0YXJ0ZWQ7CisKKyAgICAvKiBwYXVzZSB0aGUgdGltZXIgd2hpbGUgd2Ugd2FpdC4gVGhlIGZhY3QgdGhhdCB3ZSBhcmUgd2FpdGluZyBkb2VzIG5vdCBtZWFuCisgICAgICogdGhlIGJ5dGVyYXRlIG9uIHRoZSBpbnB1dCBwYWQgaXMgbG93ZXIgKi8KKyAgICBpZiAoKHN0YXJ0ZWQgPSBxdWV1ZS0+aW5fdGltZXJfc3RhcnRlZCkpCisgICAgICBnX3RpbWVyX3N0b3AgKHF1ZXVlLT5pbl90aW1lcik7CisKKyAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLAorICAgICAgICAicXVldWUgaXMgZnVsbCwgd2FpdGluZyBmb3IgZnJlZSBzcGFjZSIpOworICAgIGRvIHsKKyAgICAgIC8qIFdhaXQgZm9yIHNwYWNlIHRvIGJlIGF2YWlsYWJsZSwgd2UgY291bGQgYmUgdW5sb2NrZWQgYmVjYXVzZSBvZiBhIGZsdXNoLiAqLworICAgICAgR1NUX1FVRVVFMl9XQUlUX0RFTF9DSEVDSyAocXVldWUsIHF1ZXVlLT5zaW5rcmVzdWx0LCBvdXRfZmx1c2hpbmcpOworICAgIH0KKyAgICB3aGlsZSAoZ3N0X3F1ZXVlMl9pc19maWxsZWQgKHF1ZXVlKSk7CisKKyAgICAvKiBhbmQgY29udGludWUgaWYgd2Ugd2VyZSBydW5uaW5nIGJlZm9yZSAqLworICAgIGlmIChzdGFydGVkKQorICAgICAgZ190aW1lcl9jb250aW51ZSAocXVldWUtPmluX3RpbWVyKTsKKyAgfQorICByZXR1cm4gVFJVRTsKKworICAvKiBFUlJPUlMgKi8KK291dF9mbHVzaGluZzoKKyAgeworICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsICJxdWV1ZSBpcyBmbHVzaGluZyIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9xdWV1ZTJfY3JlYXRlX3dyaXRlIChHc3RRdWV1ZTIgKiBxdWV1ZSwgR3N0QnVmZmVyICogYnVmZmVyKQoreworICBndWludDggKm9kYXRhLCAqZGF0YSwgKnJpbmdfYnVmZmVyOworICBndWludCBzaXplLCByYl9zaXplOworICBnc2l6ZSBvc2l6ZTsKKyAgZ3VpbnQ2NCB3cml0aW5nX3BvcywgbmV3X3dyaXRpbmdfcG9zOworICBHc3RRdWV1ZTJSYW5nZSAqcmFuZ2UsICpwcmV2LCAqbmV4dDsKKworICBpZiAoUVVFVUVfSVNfVVNJTkdfUklOR19CVUZGRVIgKHF1ZXVlKSkKKyAgICB3cml0aW5nX3BvcyA9IHF1ZXVlLT5jdXJyZW50LT5yYl93cml0aW5nX3BvczsKKyAgZWxzZQorICAgIHdyaXRpbmdfcG9zID0gcXVldWUtPmN1cnJlbnQtPndyaXRpbmdfcG9zOworICByaW5nX2J1ZmZlciA9IHF1ZXVlLT5yaW5nX2J1ZmZlcjsKKyAgcmJfc2l6ZSA9IHF1ZXVlLT5yaW5nX2J1ZmZlcl9tYXhfc2l6ZTsKKworICBvZGF0YSA9IGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZvc2l6ZSwgTlVMTCwgR1NUX01BUF9SRUFEKTsKKworICBzaXplID0gb3NpemU7CisgIGRhdGEgPSBvZGF0YTsKKworICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgIldyaXRpbmcgJXUgYnl0ZXMgdG8gJSIgR19HVUlOVDY0X0ZPUk1BVCwgc2l6ZSwKKyAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUIChidWZmZXIpKTsKKworICB3aGlsZSAoc2l6ZSA+IDApIHsKKyAgICBndWludCB0b193cml0ZTsKKworICAgIGlmIChRVUVVRV9JU19VU0lOR19SSU5HX0JVRkZFUiAocXVldWUpKSB7CisgICAgICBnaW50NjQgc3BhY2U7CisKKyAgICAgIC8qIGNhbGN1bGF0ZSB0aGUgc3BhY2UgaW4gdGhlIHJpbmcgYnVmZmVyIG5vdCB1c2VkIGJ5IGRhdGEgZnJvbQorICAgICAgICogdGhlIGN1cnJlbnQgcmFuZ2UgKi8KKyAgICAgIHdoaWxlIChRVUVVRV9NQVhfQllURVMgKHF1ZXVlKSA8PSBxdWV1ZS0+Y3VyX2xldmVsLmJ5dGVzKSB7CisgICAgICAgIC8qIHdhaXQgdW50aWwgdGhlcmUgaXMgc29tZSBmcmVlIHNwYWNlICovCisgICAgICAgIEdTVF9RVUVVRTJfV0FJVF9ERUxfQ0hFQ0sgKHF1ZXVlLCBxdWV1ZS0+c2lua3Jlc3VsdCwgb3V0X2ZsdXNoaW5nKTsKKyAgICAgIH0KKyAgICAgIC8qIGdldCB0aGUgYW1vdW50IG9mIHNwYWNlIHdlIGhhdmUgKi8KKyAgICAgIHNwYWNlID0gUVVFVUVfTUFYX0JZVEVTIChxdWV1ZSkgLSBxdWV1ZS0+Y3VyX2xldmVsLmJ5dGVzOworCisgICAgICAvKiBjYWxjdWxhdGUgaWYgd2UgbmVlZCB0byBzcGxpdCBvciBpZiB3ZSBjYW4gd3JpdGUgdGhlIGVudGlyZQorICAgICAgICogYnVmZmVyIG5vdyAqLworICAgICAgdG9fd3JpdGUgPSBNSU4gKHNpemUsIHNwYWNlKTsKKworICAgICAgLyogdGhlIHdyaXRpbmcgcG9zaXRpb24gaW4gdGhlIHJpbmcgYnVmZmVyIGFmdGVyIHdyaXRpbmcgKHBhcnQKKyAgICAgICAqIG9yIGFsbCBvZikgdGhlIGJ1ZmZlciAqLworICAgICAgbmV3X3dyaXRpbmdfcG9zID0gKHdyaXRpbmdfcG9zICsgdG9fd3JpdGUpICUgcmJfc2l6ZTsKKworICAgICAgcHJldiA9IE5VTEw7CisgICAgICByYW5nZSA9IHF1ZXVlLT5yYW5nZXM7CisKKyAgICAgIC8qIGlmIHdlIG5lZWQgdG8gb3ZlcndyaXRlIGRhdGEgaW4gdGhlIHJpbmcgYnVmZmVyLCB3ZSBuZWVkIHRvCisgICAgICAgKiB1cGRhdGUgdGhlIHJhbmdlcworICAgICAgICoKKyAgICAgICAqIHdhcm5pbmc6IHRoaXMgY29kZSBpcyBjb21wbGljYXRlZCBhbmQgaW5jbHVkZXMgc29tZQorICAgICAgICogc2ltcGxpZmljYXRpb25zIC0gcGVuLCBwYXBlciBhbmQgZGlhZ3JhbXMgZm9yIHRoZSBjYXNlcworICAgICAgICogcmVjb21tZW5kZWQhICovCisgICAgICB3aGlsZSAocmFuZ2UpIHsKKyAgICAgICAgZ3VpbnQ2NCByYW5nZV9kYXRhX3N0YXJ0LCByYW5nZV9kYXRhX2VuZDsKKyAgICAgICAgR3N0UXVldWUyUmFuZ2UgKnJhbmdlX3RvX2Rlc3Ryb3kgPSBOVUxMOworCisgICAgICAgIHJhbmdlX2RhdGFfc3RhcnQgPSByYW5nZS0+cmJfb2Zmc2V0OworICAgICAgICByYW5nZV9kYXRhX2VuZCA9IHJhbmdlLT5yYl93cml0aW5nX3BvczsKKworICAgICAgICAvKiBoYW5kbGUgdGhlIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGUgcmFuZ2UgaGFzIG5vIGRhdGEgaW4gaXQgKi8KKyAgICAgICAgaWYgKHJhbmdlLT53cml0aW5nX3BvcyA9PSByYW5nZS0+b2Zmc2V0KSB7CisgICAgICAgICAgaWYgKHJhbmdlICE9IHF1ZXVlLT5jdXJyZW50KSB7CisgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwKKyAgICAgICAgICAgICAgICAiUmVtb3ZpbmcgcmFuZ2U6IG9mZnNldCAlIiBHX0dVSU5UNjRfRk9STUFUICIsIHdwb3MgJSIKKyAgICAgICAgICAgICAgICBHX0dVSU5UNjRfRk9STUFULCByYW5nZS0+b2Zmc2V0LCByYW5nZS0+d3JpdGluZ19wb3MpOworICAgICAgICAgICAgLyogcmVtb3ZlIHJhbmdlICovCisgICAgICAgICAgICByYW5nZV90b19kZXN0cm95ID0gcmFuZ2U7CisgICAgICAgICAgICBpZiAocHJldikKKyAgICAgICAgICAgICAgcHJldi0+bmV4dCA9IHJhbmdlLT5uZXh0OworICAgICAgICAgIH0KKyAgICAgICAgICBnb3RvIG5leHRfcmFuZ2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmFuZ2VfZGF0YV9lbmQgPiByYW5nZV9kYXRhX3N0YXJ0KSB7CisgICAgICAgICAgaWYgKHdyaXRpbmdfcG9zID49IHJhbmdlX2RhdGFfZW5kICYmIG5ld193cml0aW5nX3BvcyA+PSB3cml0aW5nX3BvcykKKyAgICAgICAgICAgIGdvdG8gbmV4dF9yYW5nZTsKKworICAgICAgICAgIGlmIChuZXdfd3JpdGluZ19wb3MgPiByYW5nZV9kYXRhX3N0YXJ0KSB7CisgICAgICAgICAgICBpZiAobmV3X3dyaXRpbmdfcG9zID49IHJhbmdlX2RhdGFfZW5kKSB7CisgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLAorICAgICAgICAgICAgICAgICAgIlJlbW92aW5nIHJhbmdlOiBvZmZzZXQgJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCB3cG9zICUiCisgICAgICAgICAgICAgICAgICBHX0dVSU5UNjRfRk9STUFULCByYW5nZS0+b2Zmc2V0LCByYW5nZS0+d3JpdGluZ19wb3MpOworICAgICAgICAgICAgICAvKiByZW1vdmUgcmFuZ2UgKi8KKyAgICAgICAgICAgICAgcmFuZ2VfdG9fZGVzdHJveSA9IHJhbmdlOworICAgICAgICAgICAgICBpZiAocHJldikKKyAgICAgICAgICAgICAgICBwcmV2LT5uZXh0ID0gcmFuZ2UtPm5leHQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwKKyAgICAgICAgICAgICAgICAgICJhZHZhbmNpbmcgb2Zmc2V0cyBmcm9tICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiAoJSIKKyAgICAgICAgICAgICAgICAgIEdfR1VJTlQ2NF9GT1JNQVQgIikgdG8gJSIgR19HVUlOVDY0X0ZPUk1BVCAiICglIgorICAgICAgICAgICAgICAgICAgR19HVUlOVDY0X0ZPUk1BVCAiKSIsIHJhbmdlLT5vZmZzZXQsIHJhbmdlLT5yYl9vZmZzZXQsCisgICAgICAgICAgICAgICAgICByYW5nZS0+b2Zmc2V0ICsgbmV3X3dyaXRpbmdfcG9zIC0gcmFuZ2VfZGF0YV9zdGFydCwKKyAgICAgICAgICAgICAgICAgIG5ld193cml0aW5nX3Bvcyk7CisgICAgICAgICAgICAgIHJhbmdlLT5vZmZzZXQgKz0gKG5ld193cml0aW5nX3BvcyAtIHJhbmdlX2RhdGFfc3RhcnQpOworICAgICAgICAgICAgICByYW5nZS0+cmJfb2Zmc2V0ID0gbmV3X3dyaXRpbmdfcG9zOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBndWludDY0IG5ld193cG9zX3ZpcnQgPSB3cml0aW5nX3BvcyArIHRvX3dyaXRlOworCisgICAgICAgICAgaWYgKG5ld193cG9zX3ZpcnQgPD0gcmFuZ2VfZGF0YV9zdGFydCkKKyAgICAgICAgICAgIGdvdG8gbmV4dF9yYW5nZTsKKworICAgICAgICAgIGlmIChuZXdfd3Bvc192aXJ0ID4gcmJfc2l6ZSAmJiBuZXdfd3JpdGluZ19wb3MgPj0gcmFuZ2VfZGF0YV9lbmQpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLAorICAgICAgICAgICAgICAgICJSZW1vdmluZyByYW5nZTogb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgd3BvcyAlIgorICAgICAgICAgICAgICAgIEdfR1VJTlQ2NF9GT1JNQVQsIHJhbmdlLT5vZmZzZXQsIHJhbmdlLT53cml0aW5nX3Bvcyk7CisgICAgICAgICAgICAvKiByZW1vdmUgcmFuZ2UgKi8KKyAgICAgICAgICAgIHJhbmdlX3RvX2Rlc3Ryb3kgPSByYW5nZTsKKyAgICAgICAgICAgIGlmIChwcmV2KQorICAgICAgICAgICAgICBwcmV2LT5uZXh0ID0gcmFuZ2UtPm5leHQ7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLAorICAgICAgICAgICAgICAgICJhZHZhbmNpbmcgb2Zmc2V0cyBmcm9tICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiAoJSIKKyAgICAgICAgICAgICAgICBHX0dVSU5UNjRfRk9STUFUICIpIHRvICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiAoJSIKKyAgICAgICAgICAgICAgICBHX0dVSU5UNjRfRk9STUFUICIpIiwgcmFuZ2UtPm9mZnNldCwgcmFuZ2UtPnJiX29mZnNldCwKKyAgICAgICAgICAgICAgICByYW5nZS0+b2Zmc2V0ICsgbmV3X3dyaXRpbmdfcG9zIC0gcmFuZ2VfZGF0YV9zdGFydCwKKyAgICAgICAgICAgICAgICBuZXdfd3JpdGluZ19wb3MpOworICAgICAgICAgICAgcmFuZ2UtPm9mZnNldCArPSAobmV3X3dwb3NfdmlydCAtIHJhbmdlX2RhdGFfc3RhcnQpOworICAgICAgICAgICAgcmFuZ2UtPnJiX29mZnNldCA9IG5ld193cml0aW5nX3BvczsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgbmV4dF9yYW5nZToKKyAgICAgICAgaWYgKCFyYW5nZV90b19kZXN0cm95KQorICAgICAgICAgIHByZXYgPSByYW5nZTsKKworICAgICAgICByYW5nZSA9IHJhbmdlLT5uZXh0OworICAgICAgICBpZiAocmFuZ2VfdG9fZGVzdHJveSkgeworICAgICAgICAgIGlmIChyYW5nZV90b19kZXN0cm95ID09IHF1ZXVlLT5yYW5nZXMpCisgICAgICAgICAgICBxdWV1ZS0+cmFuZ2VzID0gcmFuZ2U7CisgICAgICAgICAgZ19zbGljZV9mcmVlIChHc3RRdWV1ZTJSYW5nZSwgcmFuZ2VfdG9fZGVzdHJveSk7CisgICAgICAgICAgcmFuZ2VfdG9fZGVzdHJveSA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgdG9fd3JpdGUgPSBzaXplOworICAgICAgbmV3X3dyaXRpbmdfcG9zID0gd3JpdGluZ19wb3MgKyB0b193cml0ZTsKKyAgICB9CisKKyAgICBpZiAoUVVFVUVfSVNfVVNJTkdfVEVNUF9GSUxFIChxdWV1ZSkKKyAgICAgICAgJiYgRlNFRUtfRklMRSAocXVldWUtPnRlbXBfZmlsZSwgd3JpdGluZ19wb3MpKQorICAgICAgZ290byBzZWVrX2ZhaWxlZDsKKworICAgIGlmIChuZXdfd3JpdGluZ19wb3MgPiB3cml0aW5nX3BvcykgeworICAgICAgR1NUX0lORk9fT0JKRUNUIChxdWV1ZSwKKyAgICAgICAgICAid3JpdGluZyAldSBieXRlcyB0byByYW5nZSBbJSIgR19HVUlOVDY0X0ZPUk1BVCAiLSUiIEdfR1VJTlQ2NF9GT1JNQVQKKyAgICAgICAgICAiXSAocmIgd3BvcyAlIiBHX0dVSU5UNjRfRk9STUFUICIpIiwgdG9fd3JpdGUsIHF1ZXVlLT5jdXJyZW50LT5vZmZzZXQsCisgICAgICAgICAgcXVldWUtPmN1cnJlbnQtPndyaXRpbmdfcG9zLCBxdWV1ZS0+Y3VycmVudC0+cmJfd3JpdGluZ19wb3MpOworICAgICAgLyogZWl0aGVyIG5vdCB1c2luZyByaW5nIGJ1ZmZlciBvciBubyB3cmFwcGluZywganVzdCB3cml0ZSAqLworICAgICAgaWYgKFFVRVVFX0lTX1VTSU5HX1RFTVBfRklMRSAocXVldWUpKSB7CisgICAgICAgIGlmIChmd3JpdGUgKGRhdGEsIHRvX3dyaXRlLCAxLCBxdWV1ZS0+dGVtcF9maWxlKSAhPSAxKQorICAgICAgICAgIGdvdG8gaGFuZGxlX2Vycm9yOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbWVtY3B5IChyaW5nX2J1ZmZlciArIHdyaXRpbmdfcG9zLCBkYXRhLCB0b193cml0ZSk7CisgICAgICB9CisKKyAgICAgIGlmICghUVVFVUVfSVNfVVNJTkdfUklOR19CVUZGRVIgKHF1ZXVlKSkgeworICAgICAgICAvKiB0cnkgdG8gbWVyZ2Ugd2l0aCBuZXh0IHJhbmdlICovCisgICAgICAgIHdoaWxlICgobmV4dCA9IHF1ZXVlLT5jdXJyZW50LT5uZXh0KSkgeworICAgICAgICAgIEdTVF9JTkZPX09CSkVDVCAocXVldWUsCisgICAgICAgICAgICAgICJjaGVja2luZyBtZXJnZSB3aXRoIG5leHQgcmFuZ2UgJSIgR19HVUlOVDY0X0ZPUk1BVCAiIDwgJSIKKyAgICAgICAgICAgICAgR19HVUlOVDY0X0ZPUk1BVCwgbmV3X3dyaXRpbmdfcG9zLCBuZXh0LT5vZmZzZXQpOworICAgICAgICAgIGlmIChuZXdfd3JpdGluZ19wb3MgPCBuZXh0LT5vZmZzZXQpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAibWVyZ2luZyByYW5nZXMgJSIgR19HVUlOVDY0X0ZPUk1BVCwKKyAgICAgICAgICAgICAgbmV4dC0+d3JpdGluZ19wb3MpOworCisgICAgICAgICAgLyogcmVtb3ZlIHRoZSBncm91cCwgd2UgY291bGQgY2hvb3NlIHRvIG5vdCByZWFkIHRoZSBkYXRhIGluIHRoaXMgcmFuZ2UKKyAgICAgICAgICAgKiBhZ2Fpbi4gVGhpcyB3b3VsZCBpbnZvbHZlIHVzIGRvaW5nIGEgc2VlayB0byB0aGUgY3VycmVudCB3cml0aW5nIHBvc2l0aW9uCisgICAgICAgICAgICogaW4gdGhlIHJhbmdlLiBGSVhNRSwgSXQgd291bGQgcHJvYmFibHkgbWFrZSBzZW5zZSB0byBkbyBhIHNlZWsgd2hlbiB0aGVyZQorICAgICAgICAgICAqIGlzIGEgbG90IG9mIGRhdGEgaW4gdGhlIHJhbmdlIHdlIG1lcmdlZCB3aXRoIHRvIGF2b2lkIHJlYWRpbmcgaXQgYWxsCisgICAgICAgICAgICogYWdhaW4uICovCisgICAgICAgICAgcXVldWUtPmN1cnJlbnQtPm5leHQgPSBuZXh0LT5uZXh0OworICAgICAgICAgIGdfc2xpY2VfZnJlZSAoR3N0UXVldWUyUmFuZ2UsIG5leHQpOworCisgICAgICAgICAgZGVidWdfcmFuZ2VzIChxdWV1ZSk7CisgICAgICAgIH0KKyAgICAgICAgZ290byB1cGRhdGVfYW5kX3NpZ25hbDsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgLyogd3JhcHBpbmcgKi8KKyAgICAgIGd1aW50IGJsb2NrX29uZSwgYmxvY2tfdHdvOworCisgICAgICBibG9ja19vbmUgPSByYl9zaXplIC0gd3JpdGluZ19wb3M7CisgICAgICBibG9ja190d28gPSB0b193cml0ZSAtIGJsb2NrX29uZTsKKworICAgICAgaWYgKGJsb2NrX29uZSA+IDApIHsKKyAgICAgICAgR1NUX0lORk9fT0JKRUNUIChxdWV1ZSwgIndyaXRpbmcgJXUgYnl0ZXMiLCBibG9ja19vbmUpOworICAgICAgICAvKiB3cml0ZSBkYXRhIHRvIGVuZCBvZiByaW5nIGJ1ZmZlciAqLworICAgICAgICBpZiAoUVVFVUVfSVNfVVNJTkdfVEVNUF9GSUxFIChxdWV1ZSkpIHsKKyAgICAgICAgICBpZiAoZndyaXRlIChkYXRhLCBibG9ja19vbmUsIDEsIHF1ZXVlLT50ZW1wX2ZpbGUpICE9IDEpCisgICAgICAgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBtZW1jcHkgKHJpbmdfYnVmZmVyICsgd3JpdGluZ19wb3MsIGRhdGEsIGJsb2NrX29uZSk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKFFVRVVFX0lTX1VTSU5HX1RFTVBfRklMRSAocXVldWUpICYmIEZTRUVLX0ZJTEUgKHF1ZXVlLT50ZW1wX2ZpbGUsIDApKQorICAgICAgICBnb3RvIHNlZWtfZmFpbGVkOworCisgICAgICBpZiAoYmxvY2tfdHdvID4gMCkgeworICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHF1ZXVlLCAid3JpdGluZyAldSBieXRlcyIsIGJsb2NrX3R3byk7CisgICAgICAgIGlmIChRVUVVRV9JU19VU0lOR19URU1QX0ZJTEUgKHF1ZXVlKSkgeworICAgICAgICAgIGlmIChmd3JpdGUgKGRhdGEgKyBibG9ja19vbmUsIGJsb2NrX3R3bywgMSwgcXVldWUtPnRlbXBfZmlsZSkgIT0gMSkKKyAgICAgICAgICAgIGdvdG8gaGFuZGxlX2Vycm9yOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIG1lbWNweSAocmluZ19idWZmZXIsIGRhdGEgKyBibG9ja19vbmUsIGJsb2NrX3R3byk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgdXBkYXRlX2FuZF9zaWduYWw6CisgICAgLyogdXBkYXRlIHRoZSB3cml0aW5nIHBvc2l0aW9ucyAqLworICAgIHNpemUgLT0gdG9fd3JpdGU7CisgICAgR1NUX0lORk9fT0JKRUNUIChxdWV1ZSwKKyAgICAgICAgIndyb3RlICV1IGJ5dGVzIHRvICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiAoJXUgYnl0ZXMgcmVtYWluaW5nIHRvIHdyaXRlKSIsCisgICAgICAgIHRvX3dyaXRlLCB3cml0aW5nX3Bvcywgc2l6ZSk7CisKKyAgICBpZiAoUVVFVUVfSVNfVVNJTkdfUklOR19CVUZGRVIgKHF1ZXVlKSkgeworICAgICAgZGF0YSArPSB0b193cml0ZTsKKyAgICAgIHF1ZXVlLT5jdXJyZW50LT53cml0aW5nX3BvcyArPSB0b193cml0ZTsKKyAgICAgIHF1ZXVlLT5jdXJyZW50LT5yYl93cml0aW5nX3BvcyA9IHdyaXRpbmdfcG9zID0gbmV3X3dyaXRpbmdfcG9zOworICAgIH0gZWxzZSB7CisgICAgICBxdWV1ZS0+Y3VycmVudC0+d3JpdGluZ19wb3MgPSB3cml0aW5nX3BvcyA9IG5ld193cml0aW5nX3BvczsKKyAgICB9CisgICAgdXBkYXRlX2N1cl9sZXZlbCAocXVldWUsIHF1ZXVlLT5jdXJyZW50KTsKKworICAgIC8qIHVwZGF0ZSB0aGUgYnVmZmVyaW5nIHN0YXR1cyAqLworICAgIGlmIChxdWV1ZS0+dXNlX2J1ZmZlcmluZykKKyAgICAgIHVwZGF0ZV9idWZmZXJpbmcgKHF1ZXVlKTsKKworICAgIEdTVF9JTkZPX09CSkVDVCAocXVldWUsICJjdXJfbGV2ZWwuYnl0ZXMgJXUgKG1heCAlIiBHX0dVSU5UNjRfRk9STUFUICIpIiwKKyAgICAgICAgcXVldWUtPmN1cl9sZXZlbC5ieXRlcywgUVVFVUVfTUFYX0JZVEVTIChxdWV1ZSkpOworCisgICAgR1NUX1FVRVVFMl9TSUdOQUxfQUREIChxdWV1ZSk7CisgIH0KKworICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsIG9kYXRhLCBvc2l6ZSk7CisKKyAgcmV0dXJuIFRSVUU7CisKKyAgLyogRVJST1JTICovCitvdXRfZmx1c2hpbmc6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgIndlIGFyZSBmbHVzaGluZyIpOworICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgb2RhdGEsIG9zaXplKTsKKyAgICAvKiBGSVhNRSAtIEdTVF9GTE9XX1VORVhQRUNURUQgPyAqLworICAgIHJldHVybiBGQUxTRTsKKyAgfQorc2Vla19mYWlsZWQ6CisgIHsKKyAgICBHU1RfRUxFTUVOVF9FUlJPUiAocXVldWUsIFJFU09VUkNFLCBTRUVLLCAoTlVMTCksIEdTVF9FUlJPUl9TWVNURU0pOworICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgb2RhdGEsIG9zaXplKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KK2hhbmRsZV9lcnJvcjoKKyAgeworICAgIHN3aXRjaCAoZXJybm8pIHsKKyAgICAgIGNhc2UgRU5PU1BDOnsKKyAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHF1ZXVlLCBSRVNPVVJDRSwgTk9fU1BBQ0VfTEVGVCwgKE5VTEwpLCAoTlVMTCkpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGRlZmF1bHQ6eworICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAocXVldWUsIFJFU09VUkNFLCBXUklURSwKKyAgICAgICAgICAgIChfKCJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIikpLAorICAgICAgICAgICAgKCIlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSkpOworICAgICAgfQorICAgIH0KKyAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsIG9kYXRhLCBvc2l6ZSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKKy8qIGVucXVldWUgYW4gaXRlbSBhbiB1cGRhdGUgdGhlIGxldmVsIHN0YXRzICovCitzdGF0aWMgdm9pZAorZ3N0X3F1ZXVlMl9sb2NrZWRfZW5xdWV1ZSAoR3N0UXVldWUyICogcXVldWUsIGdwb2ludGVyIGl0ZW0sIGdib29sZWFuIGlzYnVmZmVyKQoreworICBpZiAoaXNidWZmZXIpIHsKKyAgICBHc3RCdWZmZXIgKmJ1ZmZlcjsKKyAgICBndWludCBzaXplOworCisgICAgYnVmZmVyID0gR1NUX0JVRkZFUl9DQVNUIChpdGVtKTsKKyAgICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKTsKKworICAgIC8qIGFkZCBidWZmZXIgdG8gdGhlIHN0YXRpc3RpY3MgKi8KKyAgICBpZiAoUVVFVUVfSVNfVVNJTkdfUVVFVUUgKHF1ZXVlKSkgeworICAgICAgcXVldWUtPmN1cl9sZXZlbC5idWZmZXJzKys7CisgICAgICBxdWV1ZS0+Y3VyX2xldmVsLmJ5dGVzICs9IHNpemU7CisgICAgfQorICAgIHF1ZXVlLT5ieXRlc19pbiArPSBzaXplOworCisgICAgLyogYXBwbHkgbmV3IGJ1ZmZlciB0byBzZWdtZW50IHN0YXRzICovCisgICAgYXBwbHlfYnVmZmVyIChxdWV1ZSwgYnVmZmVyLCAmcXVldWUtPnNpbmtfc2VnbWVudCwgVFJVRSk7CisgICAgLyogdXBkYXRlIHRoZSBieXRlcmF0ZSBzdGF0cyAqLworICAgIHVwZGF0ZV9pbl9yYXRlcyAocXVldWUpOworCisgICAgaWYgKCFRVUVVRV9JU19VU0lOR19RVUVVRSAocXVldWUpKSB7CisgICAgICAvKiBGSVhNRSAtIGNoZWNrIHJldHVybiB2YWx1ZT8gKi8KKyAgICAgIGdzdF9xdWV1ZTJfY3JlYXRlX3dyaXRlIChxdWV1ZSwgYnVmZmVyKTsKKyAgICB9CisgIH0gZWxzZSBpZiAoR1NUX0lTX0VWRU5UIChpdGVtKSkgeworICAgIEdzdEV2ZW50ICpldmVudDsKKworICAgIGV2ZW50ID0gR1NUX0VWRU5UX0NBU1QgKGl0ZW0pOworCisgICAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7CisgICAgICBjYXNlIEdTVF9FVkVOVF9FT1M6CisgICAgICAgIC8qIFplcm8gdGhlIHRocmVzaG9sZHMsIHRoaXMgbWFrZXMgc3VyZSB0aGUgcXVldWUgaXMgY29tcGxldGVseQorICAgICAgICAgKiBmaWxsZWQgYW5kIHdlIGNhbiByZWFkIGFsbCBkYXRhIGZyb20gdGhlIHF1ZXVlLiAqLworICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgIndlIGhhdmUgRU9TIik7CisgICAgICAgIHF1ZXVlLT5pc19lb3MgPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6CisgICAgICAgIGFwcGx5X3NlZ21lbnQgKHF1ZXVlLCBldmVudCwgJnF1ZXVlLT5zaW5rX3NlZ21lbnQsIFRSVUUpOworICAgICAgICAvKiBUaGlzIGlzIG91ciBmaXJzdCBuZXcgc2VnbWVudCwgd2UgaG9sZCBpdAorICAgICAgICAgKiBhcyB3ZSBjYW4ndCBzYXZlIGl0IG9uIHRoZSB0ZW1wIGZpbGUgKi8KKyAgICAgICAgaWYgKCFRVUVVRV9JU19VU0lOR19RVUVVRSAocXVldWUpKSB7CisgICAgICAgICAgaWYgKHF1ZXVlLT5zZWdtZW50X2V2ZW50X3JlY2VpdmVkKQorICAgICAgICAgICAgZ290byB1bmV4cGVjdGVkX2V2ZW50OworCisgICAgICAgICAgcXVldWUtPnNlZ21lbnRfZXZlbnRfcmVjZWl2ZWQgPSBUUlVFOworICAgICAgICAgIGlmIChxdWV1ZS0+c3RhcnRpbmdfc2VnbWVudCAhPSBOVUxMKQorICAgICAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChxdWV1ZS0+c3RhcnRpbmdfc2VnbWVudCk7CisgICAgICAgICAgcXVldWUtPnN0YXJ0aW5nX3NlZ21lbnQgPSBldmVudDsKKyAgICAgICAgICBpdGVtID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICAvKiBhIG5ldyBzZWdtZW50IGFsbG93cyB1cyB0byBhY2NlcHQgbW9yZSBidWZmZXJzIGlmIHdlIGdvdCBVTkVYUEVDVEVECisgICAgICAgICAqIGZyb20gZG93bnN0cmVhbSAqLworICAgICAgICBxdWV1ZS0+dW5leHBlY3RlZCA9IEZBTFNFOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGlmICghUVVFVUVfSVNfVVNJTkdfUVVFVUUgKHF1ZXVlKSkKKyAgICAgICAgICBnb3RvIHVuZXhwZWN0ZWRfZXZlbnQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBnX3dhcm5pbmcgKCJVbmV4cGVjdGVkIGl0ZW0gJXAgYWRkZWQgaW4gcXVldWUgJXMgKHJlZmNvdW50aW5nIHByb2JsZW0/KSIsCisgICAgICAgIGl0ZW0sIEdTVF9PQkpFQ1RfTkFNRSAocXVldWUpKTsKKyAgICAvKiB3ZSBjYW4ndCByZWFsbHkgdW5yZWYgc2luY2Ugd2UgZG9uJ3Qga25vdyB3aGF0IGl0IGlzICovCisgICAgaXRlbSA9IE5VTEw7CisgIH0KKworICBpZiAoaXRlbSkgeworICAgIC8qIHVwZGF0ZSB0aGUgYnVmZmVyaW5nIHN0YXR1cyAqLworICAgIGlmIChxdWV1ZS0+dXNlX2J1ZmZlcmluZykKKyAgICAgIHVwZGF0ZV9idWZmZXJpbmcgKHF1ZXVlKTsKKworICAgIGlmIChRVUVVRV9JU19VU0lOR19RVUVVRSAocXVldWUpKSB7CisgICAgICBnX3F1ZXVlX3B1c2hfdGFpbCAocXVldWUtPnF1ZXVlLCBpdGVtKTsKKyAgICB9IGVsc2UgeworICAgICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoaXRlbSkpOworICAgIH0KKworICAgIEdTVF9RVUVVRTJfU0lHTkFMX0FERCAocXVldWUpOworICB9CisKKyAgcmV0dXJuOworCisgIC8qIEVSUk9SUyAqLwordW5leHBlY3RlZF9ldmVudDoKKyAgeworICAgIGdfd2FybmluZworICAgICAgICAoIlVuZXhwZWN0ZWQgZXZlbnQgb2Yga2luZCAlcyBjYW4ndCBiZSBhZGRlZCBpbiB0ZW1wIGZpbGUgb2YgcXVldWUgJXMgIiwKKyAgICAgICAgZ3N0X2V2ZW50X3R5cGVfZ2V0X25hbWUgKEdTVF9FVkVOVF9UWVBFIChpdGVtKSksCisgICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAocXVldWUpKTsKKyAgICBnc3RfZXZlbnRfdW5yZWYgKEdTVF9FVkVOVF9DQVNUIChpdGVtKSk7CisgICAgcmV0dXJuOworICB9Cit9CisKKy8qIGRlcXVldWUgYW4gaXRlbSBmcm9tIHRoZSBxdWV1ZSBhbmQgdXBkYXRlIGxldmVsIHN0YXRzICovCitzdGF0aWMgR3N0TWluaU9iamVjdCAqCitnc3RfcXVldWUyX2xvY2tlZF9kZXF1ZXVlIChHc3RRdWV1ZTIgKiBxdWV1ZSwgZ2Jvb2xlYW4gKiBpc19idWZmZXIpCit7CisgIEdzdE1pbmlPYmplY3QgKml0ZW07CisKKyAgaWYgKCFRVUVVRV9JU19VU0lOR19RVUVVRSAocXVldWUpKQorICAgIGl0ZW0gPSBnc3RfcXVldWUyX3JlYWRfaXRlbV9mcm9tX2ZpbGUgKHF1ZXVlKTsKKyAgZWxzZQorICAgIGl0ZW0gPSBnX3F1ZXVlX3BvcF9oZWFkIChxdWV1ZS0+cXVldWUpOworCisgIGlmIChpdGVtID09IE5VTEwpCisgICAgZ290byBub19pdGVtOworCisgIGlmIChHU1RfSVNfQlVGRkVSIChpdGVtKSkgeworICAgIEdzdEJ1ZmZlciAqYnVmZmVyOworICAgIGd1aW50IHNpemU7CisKKyAgICBidWZmZXIgPSBHU1RfQlVGRkVSX0NBU1QgKGl0ZW0pOworICAgIHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpOworICAgICppc19idWZmZXIgPSBUUlVFOworCisgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsCisgICAgICAgICJyZXRyaWV2ZWQgYnVmZmVyICVwIGZyb20gcXVldWUiLCBidWZmZXIpOworCisgICAgaWYgKFFVRVVFX0lTX1VTSU5HX1FVRVVFIChxdWV1ZSkpIHsKKyAgICAgIHF1ZXVlLT5jdXJfbGV2ZWwuYnVmZmVycy0tOworICAgICAgcXVldWUtPmN1cl9sZXZlbC5ieXRlcyAtPSBzaXplOworICAgIH0KKyAgICBxdWV1ZS0+Ynl0ZXNfb3V0ICs9IHNpemU7CisKKyAgICBhcHBseV9idWZmZXIgKHF1ZXVlLCBidWZmZXIsICZxdWV1ZS0+c3JjX3NlZ21lbnQsIEZBTFNFKTsKKyAgICAvKiB1cGRhdGUgdGhlIGJ5dGVyYXRlIHN0YXRzICovCisgICAgdXBkYXRlX291dF9yYXRlcyAocXVldWUpOworICAgIC8qIHVwZGF0ZSB0aGUgYnVmZmVyaW5nICovCisgICAgaWYgKHF1ZXVlLT51c2VfYnVmZmVyaW5nKQorICAgICAgdXBkYXRlX2J1ZmZlcmluZyAocXVldWUpOworCisgIH0gZWxzZSBpZiAoR1NUX0lTX0VWRU5UIChpdGVtKSkgeworICAgIEdzdEV2ZW50ICpldmVudCA9IEdTVF9FVkVOVF9DQVNUIChpdGVtKTsKKworICAgICppc19idWZmZXIgPSBGQUxTRTsKKworICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLAorICAgICAgICAicmV0cmlldmVkIGV2ZW50ICVwIGZyb20gcXVldWUiLCBldmVudCk7CisKKyAgICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKKyAgICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKKyAgICAgICAgLyogcXVldWUgaXMgZW1wdHkgbm93IHRoYXQgd2UgZGVxdWV1ZWQgdGhlIEVPUyAqLworICAgICAgICBHU1RfUVVFVUUyX0NMRUFSX0xFVkVMIChxdWV1ZS0+Y3VyX2xldmVsKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9FVkVOVF9TRUdNRU5UOgorICAgICAgICBhcHBseV9zZWdtZW50IChxdWV1ZSwgZXZlbnQsICZxdWV1ZS0+c3JjX3NlZ21lbnQsIEZBTFNFKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgZ193YXJuaW5nCisgICAgICAgICgiVW5leHBlY3RlZCBpdGVtICVwIGRlcXVldWVkIGZyb20gcXVldWUgJXMgKHJlZmNvdW50aW5nIHByb2JsZW0/KSIsCisgICAgICAgIGl0ZW0sIEdTVF9PQkpFQ1RfTkFNRSAocXVldWUpKTsKKyAgICBpdGVtID0gTlVMTDsKKyAgfQorICBHU1RfUVVFVUUyX1NJR05BTF9ERUwgKHF1ZXVlKTsKKworICByZXR1cm4gaXRlbTsKKworICAvKiBFUlJPUlMgKi8KK25vX2l0ZW06CisgIHsKKyAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwgInRoZSBxdWV1ZSBpcyBlbXB0eSIpOworICAgIHJldHVybiBOVUxMOworICB9Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3F1ZXVlMl9oYW5kbGVfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KQoreworICBHc3RRdWV1ZTIgKnF1ZXVlOworCisgIHF1ZXVlID0gR1NUX1FVRVVFMiAoR1NUX09CSkVDVF9QQVJFTlQgKHBhZCkpOworCisgIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgeworICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUQVJUOgorICAgIHsKKyAgICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLCAicmVjZWl2ZWQgZmx1c2ggc3RhcnQgZXZlbnQiKTsKKyAgICAgIGlmIChRVUVVRV9JU19VU0lOR19RVUVVRSAocXVldWUpKSB7CisgICAgICAgIC8qIGZvcndhcmQgZXZlbnQgKi8KKyAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChxdWV1ZS0+c3JjcGFkLCBldmVudCk7CisKKyAgICAgICAgLyogbm93IHVuYmxvY2sgdGhlIGNoYWluIGZ1bmN0aW9uICovCisgICAgICAgIEdTVF9RVUVVRTJfTVVURVhfTE9DSyAocXVldWUpOworICAgICAgICBxdWV1ZS0+c3JjcmVzdWx0ID0gR1NUX0ZMT1dfV1JPTkdfU1RBVEU7CisgICAgICAgIHF1ZXVlLT5zaW5rcmVzdWx0ID0gR1NUX0ZMT1dfV1JPTkdfU1RBVEU7CisgICAgICAgIC8qIHVuYmxvY2sgdGhlIGxvb3AgYW5kIGNoYWluIGZ1bmN0aW9ucyAqLworICAgICAgICBHU1RfUVVFVUUyX1NJR05BTF9BREQgKHF1ZXVlKTsKKyAgICAgICAgR1NUX1FVRVVFMl9TSUdOQUxfREVMIChxdWV1ZSk7CisgICAgICAgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7CisKKyAgICAgICAgLyogbWFrZSBzdXJlIGl0IHBhdXNlcywgdGhpcyBzaG91bGQgaGFwcGVuIHNpbmNlIHdlIHNlbnQKKyAgICAgICAgICogZmx1c2hfc3RhcnQgZG93bnN0cmVhbS4gKi8KKyAgICAgICAgZ3N0X3BhZF9wYXVzZV90YXNrIChxdWV1ZS0+c3JjcGFkKTsKKyAgICAgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsICJsb29wIHN0b3BwZWQiKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIEdTVF9RVUVVRTJfTVVURVhfTE9DSyAocXVldWUpOworICAgICAgICAvKiBmbHVzaCB0aGUgc2luayBwYWQgKi8KKyAgICAgICAgcXVldWUtPnNpbmtyZXN1bHQgPSBHU1RfRkxPV19XUk9OR19TVEFURTsKKyAgICAgICAgR1NUX1FVRVVFMl9TSUdOQUxfREVMIChxdWV1ZSk7CisgICAgICAgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7CisKKyAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgICAgICB9CisgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6CisgICAgeworICAgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsICJyZWNlaXZlZCBmbHVzaCBzdG9wIGV2ZW50Iik7CisKKyAgICAgIGlmIChRVUVVRV9JU19VU0lOR19RVUVVRSAocXVldWUpKSB7CisgICAgICAgIC8qIGZvcndhcmQgZXZlbnQgKi8KKyAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChxdWV1ZS0+c3JjcGFkLCBldmVudCk7CisKKyAgICAgICAgR1NUX1FVRVVFMl9NVVRFWF9MT0NLIChxdWV1ZSk7CisgICAgICAgIGdzdF9xdWV1ZTJfbG9ja2VkX2ZsdXNoIChxdWV1ZSk7CisgICAgICAgIHF1ZXVlLT5zcmNyZXN1bHQgPSBHU1RfRkxPV19PSzsKKyAgICAgICAgcXVldWUtPnNpbmtyZXN1bHQgPSBHU1RfRkxPV19PSzsKKyAgICAgICAgcXVldWUtPmlzX2VvcyA9IEZBTFNFOworICAgICAgICBxdWV1ZS0+dW5leHBlY3RlZCA9IEZBTFNFOworICAgICAgICAvKiByZXNldCByYXRlIGNvdW50ZXJzICovCisgICAgICAgIHJlc2V0X3JhdGVfdGltZXIgKHF1ZXVlKTsKKyAgICAgICAgZ3N0X3BhZF9zdGFydF90YXNrIChxdWV1ZS0+c3JjcGFkLCAoR3N0VGFza0Z1bmN0aW9uKSBnc3RfcXVldWUyX2xvb3AsCisgICAgICAgICAgICBxdWV1ZS0+c3JjcGFkKTsKKyAgICAgICAgR1NUX1FVRVVFMl9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIEdTVF9RVUVVRTJfTVVURVhfTE9DSyAocXVldWUpOworICAgICAgICBxdWV1ZS0+c2VnbWVudF9ldmVudF9yZWNlaXZlZCA9IEZBTFNFOworICAgICAgICBxdWV1ZS0+aXNfZW9zID0gRkFMU0U7CisgICAgICAgIHF1ZXVlLT51bmV4cGVjdGVkID0gRkFMU0U7CisgICAgICAgIHF1ZXVlLT5zaW5rcmVzdWx0ID0gR1NUX0ZMT1dfT0s7CisgICAgICAgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7CisKKyAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgICAgICB9CisgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICBpZiAoR1NUX0VWRU5UX0lTX1NFUklBTElaRUQgKGV2ZW50KSkgeworICAgICAgICAvKiBzZXJpYWxpemVkIGV2ZW50cyBnbyBpbiB0aGUgcXVldWUgKi8KKyAgICAgICAgR1NUX1FVRVVFMl9NVVRFWF9MT0NLX0NIRUNLIChxdWV1ZSwgcXVldWUtPnNpbmtyZXN1bHQsIG91dF9mbHVzaGluZyk7CisgICAgICAgIC8qIHJlZnVzZSBtb3JlIGV2ZW50cyBvbiBFT1MgKi8KKyAgICAgICAgaWYgKHF1ZXVlLT5pc19lb3MpCisgICAgICAgICAgZ290byBvdXRfZW9zOworICAgICAgICBnc3RfcXVldWUyX2xvY2tlZF9lbnF1ZXVlIChxdWV1ZSwgZXZlbnQsIEZBTFNFKTsKKyAgICAgICAgR1NUX1FVRVVFMl9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8qIG5vbi1zZXJpYWxpemVkIGV2ZW50cyBhcmUgcGFzc2VkIHVwc3RyZWFtLiAqLworICAgICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHF1ZXVlLT5zcmNwYWQsIGV2ZW50KTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICB9Citkb25lOgorICByZXR1cm4gVFJVRTsKKworICAvKiBFUlJPUlMgKi8KK291dF9mbHVzaGluZzoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAicmVmdXNpbmcgZXZlbnQsIHdlIGFyZSBmbHVzaGluZyIpOworICAgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7CisgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CitvdXRfZW9zOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJyZWZ1c2luZyBldmVudCwgd2UgYXJlIEVPUyIpOworICAgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7CisgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3F1ZXVlMl9pc19lbXB0eSAoR3N0UXVldWUyICogcXVldWUpCit7CisgIC8qIG5ldmVyIGVtcHR5IG9uIEVPUyAqLworICBpZiAocXVldWUtPmlzX2VvcykKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgaWYgKCFRVUVVRV9JU19VU0lOR19RVUVVRSAocXVldWUpICYmIHF1ZXVlLT5jdXJyZW50KSB7CisgICAgcmV0dXJuIHF1ZXVlLT5jdXJyZW50LT53cml0aW5nX3BvcyA8PSBxdWV1ZS0+Y3VycmVudC0+bWF4X3JlYWRpbmdfcG9zOworICB9IGVsc2UgeworICAgIGlmIChxdWV1ZS0+cXVldWUtPmxlbmd0aCA9PSAwKQorICAgICAgcmV0dXJuIFRSVUU7CisgIH0KKworICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3F1ZXVlMl9pc19maWxsZWQgKEdzdFF1ZXVlMiAqIHF1ZXVlKQoreworICBnYm9vbGVhbiByZXM7CisKKyAgLyogYWx3YXlzIGZpbGxlZCBvbiBFT1MgKi8KKyAgaWYgKHF1ZXVlLT5pc19lb3MpCisgICAgcmV0dXJuIFRSVUU7CisKKyNkZWZpbmUgQ0hFQ0tfRklMTEVEKGZvcm1hdCxhbHRfbWF4KSAoKHF1ZXVlLT5tYXhfbGV2ZWwuZm9ybWF0KSA+IDAgJiYgXAorICAgIChxdWV1ZS0+Y3VyX2xldmVsLmZvcm1hdCkgPj0gKChhbHRfbWF4KSA/IFwKKyAgICAgIE1JTiAoKHF1ZXVlLT5tYXhfbGV2ZWwuZm9ybWF0KSwgKGFsdF9tYXgpKSA6IChxdWV1ZS0+bWF4X2xldmVsLmZvcm1hdCkpKQorCisgIC8qIGlmIHVzaW5nIGEgcmluZyBidWZmZXIgd2UncmUgZmlsbGVkIGlmIGFsbCByaW5nIGJ1ZmZlciBzcGFjZSBpcyB1c2VkCisgICAqIF9ieSB0aGUgY3VycmVudCByYW5nZV8gKi8KKyAgaWYgKFFVRVVFX0lTX1VTSU5HX1JJTkdfQlVGRkVSIChxdWV1ZSkpIHsKKyAgICBndWludDY0IHJiX3NpemUgPSBxdWV1ZS0+cmluZ19idWZmZXJfbWF4X3NpemU7CisgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsCisgICAgICAgICJtYXggYnl0ZXMgJXUsIHJiIHNpemUgJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBjdXIgYnl0ZXMgJXUiLAorICAgICAgICBxdWV1ZS0+bWF4X2xldmVsLmJ5dGVzLCByYl9zaXplLCBxdWV1ZS0+Y3VyX2xldmVsLmJ5dGVzKTsKKyAgICByZXR1cm4gQ0hFQ0tfRklMTEVEIChieXRlcywgcmJfc2l6ZSk7CisgIH0KKworICAvKiBpZiB1c2luZyBmaWxlLCB3ZSdyZSBuZXZlciBmaWxsZWQgaWYgd2UgZG9uJ3QgaGF2ZSBFT1MgKi8KKyAgaWYgKFFVRVVFX0lTX1VTSU5HX1RFTVBfRklMRSAocXVldWUpKQorICAgIHJldHVybiBGQUxTRTsKKworICAvKiB3ZSBhcmUgbmV2ZXIgZmlsbGVkIHdoZW4gd2UgaGF2ZSBubyBidWZmZXJzIGF0IGFsbCAqLworICBpZiAocXVldWUtPmN1cl9sZXZlbC5idWZmZXJzID09IDApCisgICAgcmV0dXJuIEZBTFNFOworCisgIC8qIHdlIGFyZSBmaWxsZWQgaWYgb25lIG9mIHRoZSBjdXJyZW50IGxldmVscyBleGNlZWRzIHRoZSBtYXggKi8KKyAgcmVzID0gQ0hFQ0tfRklMTEVEIChidWZmZXJzLCAwKSB8fCBDSEVDS19GSUxMRUQgKGJ5dGVzLCAwKQorICAgICAgfHwgQ0hFQ0tfRklMTEVEICh0aW1lLCAwKTsKKworICAvKiBpZiB3ZSBuZWVkIHRvLCB1c2UgdGhlIHJhdGUgZXN0aW1hdGUgdG8gY2hlY2sgYWdhaW5zdCB0aGUgbWF4IHRpbWUgd2UgYXJlCisgICAqIGFsbG93ZWQgdG8gcXVldWUgKi8KKyAgaWYgKHF1ZXVlLT51c2VfcmF0ZV9lc3RpbWF0ZSkKKyAgICByZXMgfD0gQ0hFQ0tfRklMTEVEIChyYXRlX3RpbWUsIDApOworCisjdW5kZWYgQ0hFQ0tfRklMTEVECisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuCitnc3RfcXVldWUyX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKK3sKKyAgR3N0UXVldWUyICpxdWV1ZTsKKworICBxdWV1ZSA9IEdTVF9RVUVVRTIgKEdTVF9PQkpFQ1RfUEFSRU5UIChwYWQpKTsKKworICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwgInJlY2VpdmVkIGJ1ZmZlciAlcCBvZiBzaXplICUiCisgICAgICBHX0dTSVpFX0ZPUk1BVCAiLCB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBkdXJhdGlvbiAlIgorICAgICAgR1NUX1RJTUVfRk9STUFULCBidWZmZXIsIGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlciksCisgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSksCisgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpKSk7CisKKyAgLyogd2UgaGF2ZSB0byBsb2NrIHRoZSBxdWV1ZSBzaW5jZSB3ZSBzcGFuIHRocmVhZHMgKi8KKyAgR1NUX1FVRVVFMl9NVVRFWF9MT0NLX0NIRUNLIChxdWV1ZSwgcXVldWUtPnNpbmtyZXN1bHQsIG91dF9mbHVzaGluZyk7CisgIC8qIHdoZW4gd2UgcmVjZWl2ZWQgRU9TLCB3ZSByZWZ1c2UgbW9yZSBkYXRhICovCisgIGlmIChxdWV1ZS0+aXNfZW9zKQorICAgIGdvdG8gb3V0X2VvczsKKyAgLyogd2hlbiB3ZSByZWNlaXZlZCB1bmV4cGVjdGVkIGZyb20gZG93bnN0cmVhbSwgcmVmdXNlIG1vcmUgYnVmZmVycyAqLworICBpZiAocXVldWUtPnVuZXhwZWN0ZWQpCisgICAgZ290byBvdXRfdW5leHBlY3RlZDsKKworICBpZiAoIWdzdF9xdWV1ZTJfd2FpdF9mcmVlX3NwYWNlIChxdWV1ZSkpCisgICAgZ290byBvdXRfZmx1c2hpbmc7CisKKyAgLyogcHV0IGJ1ZmZlciBpbiBxdWV1ZSBub3cgKi8KKyAgZ3N0X3F1ZXVlMl9sb2NrZWRfZW5xdWV1ZSAocXVldWUsIGJ1ZmZlciwgVFJVRSk7CisgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7CisKKyAgcmV0dXJuIEdTVF9GTE9XX09LOworCisgIC8qIHNwZWNpYWwgY29uZGl0aW9ucyAqLworb3V0X2ZsdXNoaW5nOgorICB7CisgICAgR3N0Rmxvd1JldHVybiByZXQgPSBxdWV1ZS0+c2lua3Jlc3VsdDsKKworICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLAorICAgICAgICAiZXhpdCBiZWNhdXNlIHRhc2sgcGF1c2VkLCByZWFzb246ICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOworICAgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7CisgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKworICAgIHJldHVybiByZXQ7CisgIH0KK291dF9lb3M6CisgIHsKKyAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwgImV4aXQgYmVjYXVzZSB3ZSByZWNlaXZlZCBFT1MiKTsKKyAgICBHU1RfUVVFVUUyX01VVEVYX1VOTE9DSyAocXVldWUpOworICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7CisKKyAgICByZXR1cm4gR1NUX0ZMT1dfVU5FWFBFQ1RFRDsKKyAgfQorb3V0X3VuZXhwZWN0ZWQ6CisgIHsKKyAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwKKyAgICAgICAgImV4aXQgYmVjYXVzZSB3ZSByZWNlaXZlZCBVTkVYUEVDVEVEIik7CisgICAgR1NUX1FVRVVFMl9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKKyAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworCisgICAgcmV0dXJuIEdTVF9GTE9XX1VORVhQRUNURUQ7CisgIH0KK30KKworLyogZGVxdWV1ZSBhbiBpdGVtIGZyb20gdGhlIHF1ZXVlIGFuIHB1c2ggaXQgZG93bnN0cmVhbS4gVGhpcyBmdW5jdGlvbnMgcmV0dXJucworICogdGhlIHJlc3VsdCBvZiB0aGUgcHVzaC4gKi8KK3N0YXRpYyBHc3RGbG93UmV0dXJuCitnc3RfcXVldWUyX3B1c2hfb25lIChHc3RRdWV1ZTIgKiBxdWV1ZSkKK3sKKyAgR3N0Rmxvd1JldHVybiByZXN1bHQgPSBHU1RfRkxPV19PSzsKKyAgR3N0TWluaU9iamVjdCAqZGF0YTsKKyAgZ2Jvb2xlYW4gaXNfYnVmZmVyID0gRkFMU0U7CisKKyAgZGF0YSA9IGdzdF9xdWV1ZTJfbG9ja2VkX2RlcXVldWUgKHF1ZXVlLCAmaXNfYnVmZmVyKTsKKyAgaWYgKGRhdGEgPT0gTlVMTCkKKyAgICBnb3RvIG5vX2l0ZW07CisKK25leHQ6CisgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7CisKKyAgaWYgKGlzX2J1ZmZlcikgeworICAgIEdzdEJ1ZmZlciAqYnVmZmVyOworI2lmIDAKKyAgICBHc3RDYXBzICpjYXBzOworI2VuZGlmCisKKyAgICBidWZmZXIgPSBHU1RfQlVGRkVSX0NBU1QgKGRhdGEpOworI2lmIDAKKyAgICBjYXBzID0gR1NUX0JVRkZFUl9DQVBTIChidWZmZXIpOworI2VuZGlmCisKKyNpZiAwCisgICAgLyogc2V0IGNhcHMgYmVmb3JlIHB1c2hpbmcgdGhlIGJ1ZmZlciBzbyB0aGF0IGNvcmUgZG9lcyBub3QgdHJ5IHRvIGRvCisgICAgICogc29tZXRoaW5nIGZhbmN5IHRvIGNoZWNrIGlmIHRoaXMgaXMgcG9zc2libGUuICovCisgICAgaWYgKGNhcHMgJiYgY2FwcyAhPSBHU1RfUEFEX0NBUFMgKHF1ZXVlLT5zcmNwYWQpKQorICAgICAgZ3N0X3BhZF9zZXRfY2FwcyAocXVldWUtPnNyY3BhZCwgY2Fwcyk7CisjZW5kaWYKKworICAgIHJlc3VsdCA9IGdzdF9wYWRfcHVzaCAocXVldWUtPnNyY3BhZCwgYnVmZmVyKTsKKworICAgIC8qIG5lZWQgdG8gY2hlY2sgZm9yIHNyY3Jlc3VsdCBoZXJlIGFzIHdlbGwgKi8KKyAgICBHU1RfUVVFVUUyX01VVEVYX0xPQ0tfQ0hFQ0sgKHF1ZXVlLCBxdWV1ZS0+c3JjcmVzdWx0LCBvdXRfZmx1c2hpbmcpOworICAgIGlmIChyZXN1bHQgPT0gR1NUX0ZMT1dfVU5FWFBFQ1RFRCkgeworICAgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsCisgICAgICAgICAgImdvdCBVTkVYUEVDVEVEIGZyb20gZG93bnN0cmVhbSIpOworICAgICAgLyogc3RvcCBwdXNoaW5nIGJ1ZmZlcnMsIHdlIGRlcXVldWUgYWxsIGl0ZW1zIHVudGlsIHdlIHNlZSBhbiBpdGVtIHRoYXQgd2UKKyAgICAgICAqIGNhbiBwdXNoIGFnYWluLCB3aGljaCBpcyBFT1Mgb3IgU0VHTUVOVC4gSWYgdGhlcmUgaXMgbm90aGluZyBpbiB0aGUKKyAgICAgICAqIHF1ZXVlIHdlIGNhbiBwdXNoLCB3ZSBzZXQgYSBmbGFnIHRvIG1ha2UgdGhlIHNpbmtwYWQgcmVmdXNlIG1vcmUKKyAgICAgICAqIGJ1ZmZlcnMgd2l0aCBhbiBVTkVYUEVDVEVEIHJldHVybiB2YWx1ZSB1bnRpbCB3ZSByZWNlaXZlIHNvbWV0aGluZworICAgICAgICogcHVzaGFibGUgYWdhaW4gb3Igd2UgZ2V0IGZsdXNoZWQuICovCisgICAgICB3aGlsZSAoKGRhdGEgPSBnc3RfcXVldWUyX2xvY2tlZF9kZXF1ZXVlIChxdWV1ZSwgJmlzX2J1ZmZlcikpKSB7CisgICAgICAgIGlmIChpc19idWZmZXIpIHsKKyAgICAgICAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwKKyAgICAgICAgICAgICAgImRyb3BwaW5nIFVORVhQRUNURUQgYnVmZmVyICVwIiwgZGF0YSk7CisgICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoR1NUX0JVRkZFUl9DQVNUIChkYXRhKSk7CisgICAgICAgIH0gZWxzZSBpZiAoR1NUX0lTX0VWRU5UIChkYXRhKSkgeworICAgICAgICAgIEdzdEV2ZW50ICpldmVudCA9IEdTVF9FVkVOVF9DQVNUIChkYXRhKTsKKyAgICAgICAgICBHc3RFdmVudFR5cGUgdHlwZSA9IEdTVF9FVkVOVF9UWVBFIChldmVudCk7CisKKyAgICAgICAgICBpZiAodHlwZSA9PSBHU1RfRVZFTlRfRU9TIHx8IHR5cGUgPT0gR1NUX0VWRU5UX1NFR01FTlQpIHsKKyAgICAgICAgICAgIC8qIHdlIGZvdW5kIGEgcHVzaGFibGUgaXRlbSBpbiB0aGUgcXVldWUsIHB1c2ggaXQgb3V0ICovCisgICAgICAgICAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwKKyAgICAgICAgICAgICAgICAicHVzaGluZyBwdXNoYWJsZSBldmVudCAlcyBhZnRlciBVTkVYUEVDVEVEIiwKKyAgICAgICAgICAgICAgICBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCkpOworICAgICAgICAgICAgZ290byBuZXh0OworICAgICAgICAgIH0KKyAgICAgICAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwKKyAgICAgICAgICAgICAgImRyb3BwaW5nIFVORVhQRUNURUQgZXZlbnQgJXAiLCBldmVudCk7CisgICAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIC8qIG5vIG1vcmUgaXRlbXMgaW4gdGhlIHF1ZXVlLiBTZXQgdGhlIHVuZXhwZWN0ZWQgZmxhZyBzbyB0aGF0IHVwc3RyZWFtCisgICAgICAgKiBtYWtlIHVzIHJlZnVzZSBhbnkgbW9yZSBidWZmZXJzIG9uIHRoZSBzaW5rcGFkLiBTaW5jZSB3ZSB3aWxsIHN0aWxsCisgICAgICAgKiBhY2NlcHQgRU9TIGFuZCBTRUdNRU5UIHdlIHJldHVybiBfRkxPV19PSyB0byB0aGUgY2FsbGVyIHNvIHRoYXQgdGhlCisgICAgICAgKiB0YXNrIGZ1bmN0aW9uIGRvZXMgbm90IHNodXQgZG93bi4gKi8KKyAgICAgIHF1ZXVlLT51bmV4cGVjdGVkID0gVFJVRTsKKyAgICAgIHJlc3VsdCA9IEdTVF9GTE9XX09LOworICAgIH0KKyAgfSBlbHNlIGlmIChHU1RfSVNfRVZFTlQgKGRhdGEpKSB7CisgICAgR3N0RXZlbnQgKmV2ZW50ID0gR1NUX0VWRU5UX0NBU1QgKGRhdGEpOworICAgIEdzdEV2ZW50VHlwZSB0eXBlID0gR1NUX0VWRU5UX1RZUEUgKGV2ZW50KTsKKworICAgIGdzdF9wYWRfcHVzaF9ldmVudCAocXVldWUtPnNyY3BhZCwgZXZlbnQpOworCisgICAgLyogaWYgd2UncmUgRU9TLCByZXR1cm4gVU5FWFBFQ1RFRCBzbyB0aGF0IHRoZSB0YXNrIHBhdXNlcy4gKi8KKyAgICBpZiAodHlwZSA9PSBHU1RfRVZFTlRfRU9TKSB7CisgICAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwKKyAgICAgICAgICAicHVzaGVkIEVPUyBldmVudCAlcCwgcmV0dXJuIFVORVhQRUNURUQiLCBldmVudCk7CisgICAgICByZXN1bHQgPSBHU1RfRkxPV19VTkVYUEVDVEVEOworICAgIH0KKworICAgIEdTVF9RVUVVRTJfTVVURVhfTE9DS19DSEVDSyAocXVldWUsIHF1ZXVlLT5zcmNyZXN1bHQsIG91dF9mbHVzaGluZyk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKKworICAvKiBFUlJPUlMgKi8KK25vX2l0ZW06CisgIHsKKyAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwKKyAgICAgICAgImV4aXQgYmVjYXVzZSB3ZSBoYXZlIG5vIGl0ZW0gaW4gdGhlIHF1ZXVlIik7CisgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOworICB9CitvdXRfZmx1c2hpbmc6CisgIHsKKyAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwgImV4aXQgYmVjYXVzZSB3ZSBhcmUgZmx1c2hpbmciKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfV1JPTkdfU1RBVEU7CisgIH0KK30KKworLyogY2FsbGVkIHJlcGVhdGVkbHkgd2l0aCBAcGFkIGFzIHRoZSBzb3VyY2UgcGFkLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBwdXNoIG91dAorICogZGF0YSB0byB0aGUgcGVlciBlbGVtZW50LiAqLworc3RhdGljIHZvaWQKK2dzdF9xdWV1ZTJfbG9vcCAoR3N0UGFkICogcGFkKQoreworICBHc3RRdWV1ZTIgKnF1ZXVlOworICBHc3RGbG93UmV0dXJuIHJldDsKKworICBxdWV1ZSA9IEdTVF9RVUVVRTIgKEdTVF9QQURfUEFSRU5UIChwYWQpKTsKKworICAvKiBoYXZlIHRvIGxvY2sgZm9yIHRocmVhZC1zYWZldHkgKi8KKyAgR1NUX1FVRVVFMl9NVVRFWF9MT0NLX0NIRUNLIChxdWV1ZSwgcXVldWUtPnNyY3Jlc3VsdCwgb3V0X2ZsdXNoaW5nKTsKKworICBpZiAoZ3N0X3F1ZXVlMl9pc19lbXB0eSAocXVldWUpKSB7CisgICAgZ2Jvb2xlYW4gc3RhcnRlZDsKKworICAgIC8qIHBhdXNlIHRoZSB0aW1lciB3aGlsZSB3ZSB3YWl0LiBUaGUgZmFjdCB0aGF0IHdlIGFyZSB3YWl0aW5nIGRvZXMgbm90IG1lYW4KKyAgICAgKiB0aGUgYnl0ZXJhdGUgb24gdGhlIG91dHB1dCBwYWQgaXMgbG93ZXIgKi8KKyAgICBpZiAoKHN0YXJ0ZWQgPSBxdWV1ZS0+b3V0X3RpbWVyX3N0YXJ0ZWQpKQorICAgICAgZ190aW1lcl9zdG9wIChxdWV1ZS0+b3V0X3RpbWVyKTsKKworICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsCisgICAgICAgICJxdWV1ZSBpcyBlbXB0eSwgd2FpdGluZyBmb3IgbmV3IGRhdGEiKTsKKyAgICBkbyB7CisgICAgICAvKiBXYWl0IGZvciBkYXRhIHRvIGJlIGF2YWlsYWJsZSwgd2UgY291bGQgYmUgdW5sb2NrZWQgYmVjYXVzZSBvZiBhIGZsdXNoLiAqLworICAgICAgR1NUX1FVRVVFMl9XQUlUX0FERF9DSEVDSyAocXVldWUsIHF1ZXVlLT5zcmNyZXN1bHQsIG91dF9mbHVzaGluZyk7CisgICAgfQorICAgIHdoaWxlIChnc3RfcXVldWUyX2lzX2VtcHR5IChxdWV1ZSkpOworCisgICAgLyogYW5kIGNvbnRpbnVlIGlmIHdlIHdlcmUgcnVubmluZyBiZWZvcmUgKi8KKyAgICBpZiAoc3RhcnRlZCkKKyAgICAgIGdfdGltZXJfY29udGludWUgKHF1ZXVlLT5vdXRfdGltZXIpOworICB9CisgIHJldCA9IGdzdF9xdWV1ZTJfcHVzaF9vbmUgKHF1ZXVlKTsKKyAgcXVldWUtPnNyY3Jlc3VsdCA9IHJldDsKKyAgcXVldWUtPnNpbmtyZXN1bHQgPSByZXQ7CisgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCisgICAgZ290byBvdXRfZmx1c2hpbmc7CisKKyAgR1NUX1FVRVVFMl9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKKworICByZXR1cm47CisKKyAgLyogRVJST1JTICovCitvdXRfZmx1c2hpbmc6CisgIHsKKyAgICBnYm9vbGVhbiBlb3MgPSBxdWV1ZS0+aXNfZW9zOworICAgIEdzdEZsb3dSZXR1cm4gcmV0ID0gcXVldWUtPnNyY3Jlc3VsdDsKKworICAgIGdzdF9wYWRfcGF1c2VfdGFzayAocXVldWUtPnNyY3BhZCk7CisgICAgR1NUX1FVRVVFMl9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKKyAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwKKyAgICAgICAgInBhdXNlIHRhc2ssIHJlYXNvbjogICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHF1ZXVlLT5zcmNyZXN1bHQpKTsKKyAgICAvKiBsZXQgYXBwIGtub3cgYWJvdXQgdXMgZ2l2aW5nIHVwIGlmIHVwc3RyZWFtIGlzIG5vdCBleHBlY3RlZCB0byBkbyBzbyAqLworICAgIC8qIFVORVhQRUNURUQgaXMgYWxyZWFkeSB0YWtlbiBjYXJlIG9mIGVsc2V3aGVyZSAqLworICAgIGlmIChlb3MgJiYgKHJldCA9PSBHU1RfRkxPV19OT1RfTElOS0VEIHx8IHJldCA8IEdTVF9GTE9XX1VORVhQRUNURUQpKSB7CisgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAocXVldWUsIFNUUkVBTSwgRkFJTEVELAorICAgICAgICAgIChfKCJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIikpLAorICAgICAgICAgICgic3RyZWFtaW5nIHRhc2sgcGF1c2VkLCByZWFzb24gJXMgKCVkKSIsCisgICAgICAgICAgICAgIGdzdF9mbG93X2dldF9uYW1lIChyZXQpLCByZXQpKTsKKyAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAocXVldWUtPnNyY3BhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpOworICAgIH0KKyAgICByZXR1cm47CisgIH0KK30KKworc3RhdGljIGdib29sZWFuCitnc3RfcXVldWUyX2hhbmRsZV9zcmNfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiBldmVudCkKK3sKKyAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKKyAgR3N0UXVldWUyICpxdWV1ZSA9IEdTVF9RVUVVRTIgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7CisKKyAgaWYgKEdfVU5MSUtFTFkgKHF1ZXVlID09IE5VTEwpKSB7CisgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLCAiZ290IGV2ZW50ICVwICglcykiLAorICAgICAgZXZlbnQsIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7CisjZW5kaWYKKworICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKKyAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVEFSVDoKKyAgICAgIGlmIChRVUVVRV9JU19VU0lOR19RVUVVRSAocXVldWUpKSB7CisgICAgICAgIC8qIGp1c3QgZm9yd2FyZCB1cHN0cmVhbSAqLworICAgICAgICByZXMgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHF1ZXVlLT5zaW5rcGFkLCBldmVudCk7CisgICAgICB9IGVsc2UgeworICAgICAgICAvKiBub3cgdW5ibG9jayB0aGUgZ2V0cmFuZ2UgZnVuY3Rpb24gKi8KKyAgICAgICAgR1NUX1FVRVVFMl9NVVRFWF9MT0NLIChxdWV1ZSk7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAiZmx1c2hpbmciKTsKKyAgICAgICAgcXVldWUtPnNyY3Jlc3VsdCA9IEdTVF9GTE9XX1dST05HX1NUQVRFOworICAgICAgICBHU1RfUVVFVUUyX1NJR05BTF9BREQgKHF1ZXVlKTsKKyAgICAgICAgR1NUX1FVRVVFMl9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKKworICAgICAgICAvKiB3aGVuIHVzaW5nIGEgdGVtcCBmaWxlLCB3ZSBlYXQgdGhlIGV2ZW50ICovCisgICAgICAgIHJlcyA9IFRSVUU7CisgICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKKyAgICAgIGlmIChRVUVVRV9JU19VU0lOR19RVUVVRSAocXVldWUpKSB7CisgICAgICAgIC8qIGp1c3QgZm9yd2FyZCB1cHN0cmVhbSAqLworICAgICAgICByZXMgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHF1ZXVlLT5zaW5rcGFkLCBldmVudCk7CisgICAgICB9IGVsc2UgeworICAgICAgICAvKiBub3cgdW5ibG9jayB0aGUgZ2V0cmFuZ2UgZnVuY3Rpb24gKi8KKyAgICAgICAgR1NUX1FVRVVFMl9NVVRFWF9MT0NLIChxdWV1ZSk7CisgICAgICAgIHF1ZXVlLT5zcmNyZXN1bHQgPSBHU1RfRkxPV19PSzsKKyAgICAgICAgaWYgKHF1ZXVlLT5jdXJyZW50KSB7CisgICAgICAgICAgLyogZm9yZ2V0IHRoZSBoaWdoZXN0IHJlYWQgb2Zmc2V0LCB3ZSdsbCBjYWxjdWxhdGUgYSBuZXcgb25lIHdoZW4gd2UKKyAgICAgICAgICAgKiBnZXQgdGhlIG5leHQgZ2V0cmFuZ2UgcmVxdWVzdC4gV2UgbmVlZCB0byBkbyB0aGlzIGluIG9yZGVyIHRvIHJlc2V0CisgICAgICAgICAgICogdGhlIGJ1ZmZlcmluZyBwZXJjZW50YWdlICovCisgICAgICAgICAgcXVldWUtPmN1cnJlbnQtPm1heF9yZWFkaW5nX3BvcyA9IDA7CisgICAgICAgIH0KKyAgICAgICAgR1NUX1FVRVVFMl9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKKworICAgICAgICAvKiB3aGVuIHVzaW5nIGEgdGVtcCBmaWxlLCB3ZSBlYXQgdGhlIGV2ZW50ICovCisgICAgICAgIHJlcyA9IFRSVUU7CisgICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAocXVldWUtPnNpbmtwYWQsIGV2ZW50KTsKKyAgICAgIGJyZWFrOworICB9CisKKyAgZ3N0X29iamVjdF91bnJlZiAocXVldWUpOworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9xdWV1ZTJfcGVlcl9xdWVyeSAoR3N0UXVldWUyICogcXVldWUsIEdzdFBhZCAqIHBhZCwgR3N0UXVlcnkgKiBxdWVyeSkKK3sKKyAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7CisgIEdzdFBhZCAqcGVlcjsKKworICBpZiAoKHBlZXIgPSBnc3RfcGFkX2dldF9wZWVyIChwYWQpKSkgeworICAgIHJldCA9IGdzdF9wYWRfcXVlcnkgKHBlZXIsIHF1ZXJ5KTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChwZWVyKTsKKyAgfQorICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9xdWV1ZTJfaGFuZGxlX3NyY19xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RRdWVyeSAqIHF1ZXJ5KQoreworICBHc3RRdWV1ZTIgKnF1ZXVlOworCisgIHF1ZXVlID0gR1NUX1FVRVVFMiAoZ3N0X3BhZF9nZXRfcGFyZW50IChwYWQpKTsKKyAgaWYgKEdfVU5MSUtFTFkgKHF1ZXVlID09IE5VTEwpKQorICAgIHJldHVybiBGQUxTRTsKKworICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKKyAgICBjYXNlIEdTVF9RVUVSWV9QT1NJVElPTjoKKyAgICB7CisgICAgICBnaW50NjQgcGVlcl9wb3M7CisgICAgICBHc3RGb3JtYXQgZm9ybWF0OworCisgICAgICBpZiAoIWdzdF9xdWV1ZTJfcGVlcl9xdWVyeSAocXVldWUsIHF1ZXVlLT5zaW5rcGFkLCBxdWVyeSkpCisgICAgICAgIGdvdG8gcGVlcl9mYWlsZWQ7CisKKyAgICAgIC8qIGdldCBwZWVyIHBvc2l0aW9uICovCisgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24gKHF1ZXJ5LCAmZm9ybWF0LCAmcGVlcl9wb3MpOworCisgICAgICAvKiBGSVhNRTogdGhpcyBjb2RlIGFzc3VtZXMgdGhhdCB0aGVyZSdzIG5vIGRpc2NvbnQgaW4gdGhlIHF1ZXVlICovCisgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICBjYXNlIEdTVF9GT1JNQVRfQllURVM6CisgICAgICAgICAgcGVlcl9wb3MgLT0gcXVldWUtPmN1cl9sZXZlbC5ieXRlczsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHU1RfRk9STUFUX1RJTUU6CisgICAgICAgICAgcGVlcl9wb3MgLT0gcXVldWUtPmN1cl9sZXZlbC50aW1lOworICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXVldWUsICJkcm9wcGluZyBxdWVyeSBpbiAlcyBmb3JtYXQsIGRvbid0ICIKKyAgICAgICAgICAgICAgImtub3cgaG93IHRvIGFkanVzdCB2YWx1ZSIsIGdzdF9mb3JtYXRfZ2V0X25hbWUgKGZvcm1hdCkpOworICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgIH0KKyAgICAgIC8qIHNldCB1cGRhdGVkIHBvc2l0aW9uICovCisgICAgICBnc3RfcXVlcnlfc2V0X3Bvc2l0aW9uIChxdWVyeSwgZm9ybWF0LCBwZWVyX3Bvcyk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfUVVFUllfRFVSQVRJT046CisgICAgeworICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJkb2luZyBwZWVyIHF1ZXJ5Iik7CisKKyAgICAgIGlmICghZ3N0X3F1ZXVlMl9wZWVyX3F1ZXJ5IChxdWV1ZSwgcXVldWUtPnNpbmtwYWQsIHF1ZXJ5KSkKKyAgICAgICAgZ290byBwZWVyX2ZhaWxlZDsKKworICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJwZWVyIHF1ZXJ5IHN1Y2Nlc3MiKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9RVUVSWV9CVUZGRVJJTkc6CisgICAgeworICAgICAgR3N0Rm9ybWF0IGZvcm1hdDsKKworICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJxdWVyeSBidWZmZXJpbmciKTsKKworICAgICAgLyogRklYTUUgLSBpcyB0aGlzIGNvbmRpdGlvbiBjb3JyZWN0PyB3aGF0IHNob3VsZCByaW5nIGJ1ZmZlciBkbz8gKi8KKyAgICAgIGlmIChRVUVVRV9JU19VU0lOR19RVUVVRSAocXVldWUpKSB7CisgICAgICAgIC8qIG5vIHRlbXAgZmlsZSwganVzdCBmb3J3YXJkIHRvIHRoZSBwZWVyICovCisgICAgICAgIGlmICghZ3N0X3F1ZXVlMl9wZWVyX3F1ZXJ5IChxdWV1ZSwgcXVldWUtPnNpbmtwYWQsIHF1ZXJ5KSkKKyAgICAgICAgICBnb3RvIHBlZXJfZmFpbGVkOworICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgImJ1ZmZlcmluZyBmb3J3YXJkZWQgdG8gcGVlciIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZ2ludDY0IHN0YXJ0LCBzdG9wLCByYW5nZV9zdGFydCwgcmFuZ2Vfc3RvcDsKKyAgICAgICAgZ3VpbnQ2NCB3cml0aW5nX3BvczsKKyAgICAgICAgZ2ludCBwZXJjZW50OworICAgICAgICBnaW50NjQgZXN0aW1hdGVkX3RvdGFsLCBidWZmZXJpbmdfbGVmdDsKKyAgICAgICAgZ2ludDY0IGR1cmF0aW9uOworICAgICAgICBnYm9vbGVhbiBwZWVyX3JlcywgaXNfYnVmZmVyaW5nLCBpc19lb3M7CisgICAgICAgIGdkb3VibGUgYnl0ZV9pbl9yYXRlLCBieXRlX291dF9yYXRlOworICAgICAgICBHc3RRdWV1ZTJSYW5nZSAqcXVldWVkX3JhbmdlczsKKworICAgICAgICAvKiB3ZSBuZWVkIGEgY3VycmVudCBkb3dubG9hZCByZWdpb24gKi8KKyAgICAgICAgaWYgKHF1ZXVlLT5jdXJyZW50ID09IE5VTEwpCisgICAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgICAgIHdyaXRpbmdfcG9zID0gcXVldWUtPmN1cnJlbnQtPndyaXRpbmdfcG9zOworICAgICAgICBieXRlX2luX3JhdGUgPSBxdWV1ZS0+Ynl0ZV9pbl9yYXRlOworICAgICAgICBieXRlX291dF9yYXRlID0gcXVldWUtPmJ5dGVfb3V0X3JhdGU7CisgICAgICAgIGlzX2J1ZmZlcmluZyA9IHF1ZXVlLT5pc19idWZmZXJpbmc7CisgICAgICAgIGlzX2VvcyA9IHF1ZXVlLT5pc19lb3M7CisgICAgICAgIHBlcmNlbnQgPSBxdWV1ZS0+YnVmZmVyaW5nX3BlcmNlbnQ7CisKKyAgICAgICAgaWYgKGlzX2VvcykgeworICAgICAgICAgIC8qIHdlJ3JlIEVPUywgd2Uga25vdyB0aGUgZHVyYXRpb24gaW4gYnl0ZXMgbm93ICovCisgICAgICAgICAgcGVlcl9yZXMgPSBUUlVFOworICAgICAgICAgIGR1cmF0aW9uID0gd3JpdGluZ19wb3M7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgLyogZ2V0IGR1cmF0aW9uIG9mIHVwc3RyZWFtIGluIGJ5dGVzICovCisgICAgICAgICAgcGVlcl9yZXMgPSBnc3RfcGFkX3F1ZXJ5X3BlZXJfZHVyYXRpb24gKHF1ZXVlLT5zaW5rcGFkLAorICAgICAgICAgICAgICBHU1RfRk9STUFUX0JZVEVTLCAmZHVyYXRpb24pOworICAgICAgICB9CisKKyAgICAgICAgLyogY2FsY3VsYXRlIHJlbWFpbmluZyBhbmQgdG90YWwgZG93bmxvYWQgdGltZSAqLworICAgICAgICBpZiAocGVlcl9yZXMgJiYgYnl0ZV9pbl9yYXRlID4gMC4wKSB7CisgICAgICAgICAgZXN0aW1hdGVkX3RvdGFsID0gKGR1cmF0aW9uICogMTAwMCkgLyBieXRlX2luX3JhdGU7CisgICAgICAgICAgYnVmZmVyaW5nX2xlZnQgPSAoKGR1cmF0aW9uIC0gd3JpdGluZ19wb3MpICogMTAwMCkgLyBieXRlX2luX3JhdGU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgZXN0aW1hdGVkX3RvdGFsID0gLTE7CisgICAgICAgICAgYnVmZmVyaW5nX2xlZnQgPSAtMTsKKyAgICAgICAgfQorICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgImVzdGltYXRlZCAlIiBHX0dJTlQ2NF9GT1JNQVQgIiwgbGVmdCAlIgorICAgICAgICAgICAgR19HSU5UNjRfRk9STUFULCBlc3RpbWF0ZWRfdG90YWwsIGJ1ZmZlcmluZ19sZWZ0KTsKKworICAgICAgICBnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3JhbmdlIChxdWVyeSwgJmZvcm1hdCwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICAgICAgICBjYXNlIEdTVF9GT1JNQVRfUEVSQ0VOVDoKKyAgICAgICAgICAgIC8qIHdlIG5lZWQgZHVyYXRpb24gKi8KKyAgICAgICAgICAgIGlmICghcGVlcl9yZXMpCisgICAgICAgICAgICAgIGdvdG8gcGVlcl9mYWlsZWQ7CisKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLAorICAgICAgICAgICAgICAgICJkdXJhdGlvbiAlIiBHX0dJTlQ2NF9GT1JNQVQgIiwgd3JpdGluZyAlIiBHX0dJTlQ2NF9GT1JNQVQsCisgICAgICAgICAgICAgICAgZHVyYXRpb24sIHdyaXRpbmdfcG9zKTsKKworICAgICAgICAgICAgc3RhcnQgPSAwOworICAgICAgICAgICAgLyogZ2V0IG91ciBhdmFpbGFibGUgZGF0YSByZWxhdGl2ZSB0byB0aGUgZHVyYXRpb24gKi8KKyAgICAgICAgICAgIGlmIChkdXJhdGlvbiAhPSAtMSkKKyAgICAgICAgICAgICAgc3RvcCA9IEdTVF9GT1JNQVRfUEVSQ0VOVF9NQVggKiB3cml0aW5nX3BvcyAvIGR1cmF0aW9uOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBzdG9wID0gLTE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdTVF9GT1JNQVRfQllURVM6CisgICAgICAgICAgICBzdGFydCA9IDA7CisgICAgICAgICAgICBzdG9wID0gd3JpdGluZ19wb3M7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc3RhcnQgPSAtMTsKKyAgICAgICAgICAgIHN0b3AgPSAtMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyogZmlsbCBvdXQgdGhlIGJ1ZmZlcmVkIHJhbmdlcyAqLworICAgICAgICBmb3IgKHF1ZXVlZF9yYW5nZXMgPSBxdWV1ZS0+cmFuZ2VzOyBxdWV1ZWRfcmFuZ2VzOworICAgICAgICAgICAgcXVldWVkX3JhbmdlcyA9IHF1ZXVlZF9yYW5nZXMtPm5leHQpIHsKKyAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICAgICAgY2FzZSBHU1RfRk9STUFUX1BFUkNFTlQ6CisgICAgICAgICAgICAgIGlmIChkdXJhdGlvbiA9PSAtMSkgeworICAgICAgICAgICAgICAgIHJhbmdlX3N0YXJ0ID0gMDsKKyAgICAgICAgICAgICAgICByYW5nZV9zdG9wID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICByYW5nZV9zdGFydCA9IDEwMCAqIHF1ZXVlZF9yYW5nZXMtPm9mZnNldCAvIGR1cmF0aW9uOworICAgICAgICAgICAgICByYW5nZV9zdG9wID0gMTAwICogcXVldWVkX3Jhbmdlcy0+d3JpdGluZ19wb3MgLyBkdXJhdGlvbjsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEdTVF9GT1JNQVRfQllURVM6CisgICAgICAgICAgICAgIHJhbmdlX3N0YXJ0ID0gcXVldWVkX3Jhbmdlcy0+b2Zmc2V0OworICAgICAgICAgICAgICByYW5nZV9zdG9wID0gcXVldWVkX3Jhbmdlcy0+d3JpdGluZ19wb3M7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgcmFuZ2Vfc3RhcnQgPSAtMTsKKyAgICAgICAgICAgICAgcmFuZ2Vfc3RvcCA9IC0xOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKHJhbmdlX3N0YXJ0ID09IHJhbmdlX3N0b3ApCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwKKyAgICAgICAgICAgICAgInJhbmdlIHN0YXJ0aW5nIGF0ICUiIEdfR0lOVDY0X0ZPUk1BVCAiIGFuZCBmaW5pc2hpbmcgYXQgJSIKKyAgICAgICAgICAgICAgR19HSU5UNjRfRk9STUFULCByYW5nZV9zdGFydCwgcmFuZ2Vfc3RvcCk7CisgICAgICAgICAgZ3N0X3F1ZXJ5X2FkZF9idWZmZXJpbmdfcmFuZ2UgKHF1ZXJ5LCByYW5nZV9zdGFydCwgcmFuZ2Vfc3RvcCk7CisgICAgICAgIH0KKworICAgICAgICBnc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19wZXJjZW50IChxdWVyeSwgaXNfYnVmZmVyaW5nLCBwZXJjZW50KTsKKyAgICAgICAgZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfcmFuZ2UgKHF1ZXJ5LCBmb3JtYXQsIHN0YXJ0LCBzdG9wLAorICAgICAgICAgICAgZXN0aW1hdGVkX3RvdGFsKTsKKyAgICAgICAgZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfc3RhdHMgKHF1ZXJ5LCBHU1RfQlVGRkVSSU5HX0RPV05MT0FELAorICAgICAgICAgICAgYnl0ZV9pbl9yYXRlLCBieXRlX291dF9yYXRlLCBidWZmZXJpbmdfbGVmdCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfUVVFUllfU0NIRURVTElORzoKKyAgICB7CisgICAgICBnYm9vbGVhbiBwdWxsX21vZGU7CisKKyAgICAgIC8qIHdlIGNhbiBvcGVyYXRlIGluIHB1bGwgbW9kZSB3aGVuIHdlIGFyZSB1c2luZyBhIHRlbXBmaWxlICovCisgICAgICBwdWxsX21vZGUgPSAhUVVFVUVfSVNfVVNJTkdfUVVFVUUgKHF1ZXVlKTsKKworICAgICAgZ3N0X3F1ZXJ5X3NldF9zY2hlZHVsaW5nIChxdWVyeSwgcHVsbF9tb2RlLCBwdWxsX21vZGUsIEZBTFNFLCAwLCAtMSwgMSk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgIC8qIHBlZXIgaGFuZGxlZCBvdGhlciBxdWVyaWVzICovCisgICAgICBpZiAoIWdzdF9xdWV1ZTJfcGVlcl9xdWVyeSAocXVldWUsIHF1ZXVlLT5zaW5rcGFkLCBxdWVyeSkpCisgICAgICAgIGdvdG8gcGVlcl9mYWlsZWQ7CisgICAgICBicmVhazsKKyAgfQorCisgIGdzdF9vYmplY3RfdW5yZWYgKHF1ZXVlKTsKKyAgcmV0dXJuIFRSVUU7CisKKyAgLyogRVJST1JTICovCitwZWVyX2ZhaWxlZDoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAiZmFpbGVkIHBlZXIgcXVlcnkiKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChxdWV1ZSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3F1ZXVlMl9oYW5kbGVfcXVlcnkgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KQoreworICAvKiBzaW1wbHkgZm9yd2FyZCB0byB0aGUgc3JjcGFkIHF1ZXJ5IGZ1bmN0aW9uICovCisgIHJldHVybiBnc3RfcXVldWUyX2hhbmRsZV9zcmNfcXVlcnkgKEdTVF9RVUVVRTJfQ0FTVCAoZWxlbWVudCktPnNyY3BhZCwgcXVlcnkpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3F1ZXVlMl91cGRhdGVfdXBzdHJlYW1fc2l6ZSAoR3N0UXVldWUyICogcXVldWUpCit7CisgIGdpbnQ2NCB1cHN0cmVhbV9zaXplID0gLTE7CisKKyAgaWYgKGdzdF9wYWRfcXVlcnlfcGVlcl9kdXJhdGlvbiAocXVldWUtPnNpbmtwYWQsIEdTVF9GT1JNQVRfQllURVMsCisgICAgICAgICAgJnVwc3RyZWFtX3NpemUpKSB7CisgICAgR1NUX0lORk9fT0JKRUNUIChxdWV1ZSwgInVwc3RyZWFtIHNpemU6ICUiIEdfR0lOVDY0X0ZPUk1BVCwgdXBzdHJlYW1fc2l6ZSk7CisgICAgcXVldWUtPnVwc3RyZWFtX3NpemUgPSB1cHN0cmVhbV9zaXplOworICB9Cit9CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuCitnc3RfcXVldWUyX2dldF9yYW5nZSAoR3N0UGFkICogcGFkLCBndWludDY0IG9mZnNldCwgZ3VpbnQgbGVuZ3RoLAorICAgIEdzdEJ1ZmZlciAqKiBidWZmZXIpCit7CisgIEdzdFF1ZXVlMiAqcXVldWU7CisgIEdzdEZsb3dSZXR1cm4gcmV0OworCisgIHF1ZXVlID0gR1NUX1FVRVVFMl9DQVNUIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOworCisgIGxlbmd0aCA9IChsZW5ndGggPT0gLTEpID8gREVGQVVMVF9CVUZGRVJfU0laRSA6IGxlbmd0aDsKKyAgR1NUX1FVRVVFMl9NVVRFWF9MT0NLX0NIRUNLIChxdWV1ZSwgcXVldWUtPnNyY3Jlc3VsdCwgb3V0X2ZsdXNoaW5nKTsKKyAgb2Zmc2V0ID0gKG9mZnNldCA9PSAtMSkgPyBxdWV1ZS0+Y3VycmVudC0+cmVhZGluZ19wb3MgOiBvZmZzZXQ7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsCisgICAgICAiR2V0dGluZyByYW5nZTogb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgbGVuZ3RoICV1Iiwgb2Zmc2V0LCBsZW5ndGgpOworCisgIC8qIGNhdGNoIGFueSByZWFkcyBiZXlvbmQgdGhlIHNpemUgb2YgdGhlIGZpbGUgaGVyZSB0byBtYWtlIHN1cmUgcXVldWUyCisgICAqIGRvZXNuJ3Qgc2VuZCBzZWVrIGV2ZW50cyBiZXlvbmQgdGhlIHNpemUgb2YgdGhlIGZpbGUgdXBzdHJlYW0sIHNpbmNlCisgICAqIHRoYXQgd291bGQgY29uZnVzZSBlbGVtZW50cyBzdWNoIGFzIHNvdXBodHRwc3JjIGFuZC9vciBodHRwIHNlcnZlcnMuCisgICAqIERlbXV4ZXJzIG9mdGVuIGp1c3QgbG9vcCB1bnRpbCBFT1MgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSB0byBmaWd1cmUgb3V0CisgICAqIHdoZW4gdGhleSd2ZSByZWFkIGFsbCB0aGUgZW5kLWhlYWRlcnMgb3IgaW5kZXggY2h1bmtzLiAqLworICBpZiAoR19VTkxJS0VMWSAob2Zmc2V0ID49IHF1ZXVlLT51cHN0cmVhbV9zaXplKSkgeworICAgIGdzdF9xdWV1ZTJfdXBkYXRlX3Vwc3RyZWFtX3NpemUgKHF1ZXVlKTsKKyAgICBpZiAocXVldWUtPnVwc3RyZWFtX3NpemUgPiAwICYmIG9mZnNldCA+PSBxdWV1ZS0+dXBzdHJlYW1fc2l6ZSkKKyAgICAgIGdvdG8gb3V0X3VuZXhwZWN0ZWQ7CisgIH0KKworICBpZiAoR19VTkxJS0VMWSAob2Zmc2V0ICsgbGVuZ3RoID4gcXVldWUtPnVwc3RyZWFtX3NpemUpKSB7CisgICAgZ3N0X3F1ZXVlMl91cGRhdGVfdXBzdHJlYW1fc2l6ZSAocXVldWUpOworICAgIGlmIChxdWV1ZS0+dXBzdHJlYW1fc2l6ZSA+IDAgJiYgb2Zmc2V0ICsgbGVuZ3RoID49IHF1ZXVlLT51cHN0cmVhbV9zaXplKSB7CisgICAgICBsZW5ndGggPSBxdWV1ZS0+dXBzdHJlYW1fc2l6ZSAtIG9mZnNldDsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAiYWRqdXN0aW5nIGxlbmd0aCBkb3dudG8gJWQiLCBsZW5ndGgpOworICAgIH0KKyAgfQorCisgIC8qIEZJWE1FIC0gZnVuY3Rpb24gd2lsbCBibG9jayB3aGVuIHRoZSByYW5nZSBpcyBub3QgeWV0IGF2YWlsYWJsZSAqLworICByZXQgPSBnc3RfcXVldWUyX2NyZWF0ZV9yZWFkIChxdWV1ZSwgb2Zmc2V0LCBsZW5ndGgsIGJ1ZmZlcik7CisgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAocXVldWUpOworCisgIHJldHVybiByZXQ7CisKKyAgLyogRVJST1JTICovCitvdXRfZmx1c2hpbmc6CisgIHsKKyAgICByZXQgPSBxdWV1ZS0+c3JjcmVzdWx0OworCisgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJ3ZSBhcmUgZmx1c2hpbmciKTsKKyAgICBHU1RfUVVFVUUyX01VVEVYX1VOTE9DSyAocXVldWUpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKHF1ZXVlKTsKKyAgICByZXR1cm4gcmV0OworICB9CitvdXRfdW5leHBlY3RlZDoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAicmVhZCBiZXlvbmQgZW5kIG9mIGZpbGUiKTsKKyAgICBHU1RfUVVFVUUyX01VVEVYX1VOTE9DSyAocXVldWUpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKHF1ZXVlKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfVU5FWFBFQ1RFRDsKKyAgfQorfQorCisvKiBzaW5rIGN1cnJlbnRseSBvbmx5IG9wZXJhdGVzIGluIHB1c2ggbW9kZSAqLworc3RhdGljIGdib29sZWFuCitnc3RfcXVldWUyX3NpbmtfYWN0aXZhdGVfcHVzaCAoR3N0UGFkICogcGFkLCBnYm9vbGVhbiBhY3RpdmUpCit7CisgIGdib29sZWFuIHJlc3VsdCA9IFRSVUU7CisgIEdzdFF1ZXVlMiAqcXVldWU7CisKKyAgcXVldWUgPSBHU1RfUVVFVUUyIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOworCisgIGlmIChhY3RpdmUpIHsKKyAgICBHU1RfUVVFVUUyX01VVEVYX0xPQ0sgKHF1ZXVlKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgImFjdGl2YXRpbmcgcHVzaCBtb2RlIik7CisgICAgcXVldWUtPnNyY3Jlc3VsdCA9IEdTVF9GTE9XX09LOworICAgIHF1ZXVlLT5zaW5rcmVzdWx0ID0gR1NUX0ZMT1dfT0s7CisgICAgcXVldWUtPmlzX2VvcyA9IEZBTFNFOworICAgIHF1ZXVlLT51bmV4cGVjdGVkID0gRkFMU0U7CisgICAgcmVzZXRfcmF0ZV90aW1lciAocXVldWUpOworICAgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7CisgIH0gZWxzZSB7CisgICAgLyogdW5ibG9jayBjaGFpbiBmdW5jdGlvbiAqLworICAgIEdTVF9RVUVVRTJfTVVURVhfTE9DSyAocXVldWUpOworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAiZGVhY3RpdmF0aW5nIHB1c2ggbW9kZSIpOworICAgIHF1ZXVlLT5zcmNyZXN1bHQgPSBHU1RfRkxPV19XUk9OR19TVEFURTsKKyAgICBxdWV1ZS0+c2lua3Jlc3VsdCA9IEdTVF9GTE9XX1dST05HX1NUQVRFOworICAgIGdzdF9xdWV1ZTJfbG9ja2VkX2ZsdXNoIChxdWV1ZSk7CisgICAgR1NUX1FVRVVFMl9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKKyAgfQorCisgIGdzdF9vYmplY3RfdW5yZWYgKHF1ZXVlKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBzcmMgb3BlcmF0aW5nIGluIHB1c2ggbW9kZSwgd2Ugc3RhcnQgYSB0YXNrIG9uIHRoZSBzb3VyY2UgcGFkIHRoYXQgcHVzaGVzIG91dAorICogYnVmZmVycyBmcm9tIHRoZSBxdWV1ZSAqLworc3RhdGljIGdib29sZWFuCitnc3RfcXVldWUyX3NyY19hY3RpdmF0ZV9wdXNoIChHc3RQYWQgKiBwYWQsIGdib29sZWFuIGFjdGl2ZSkKK3sKKyAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisgIEdzdFF1ZXVlMiAqcXVldWU7CisKKyAgcXVldWUgPSBHU1RfUVVFVUUyIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOworCisgIGlmIChhY3RpdmUpIHsKKyAgICBHU1RfUVVFVUUyX01VVEVYX0xPQ0sgKHF1ZXVlKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgImFjdGl2YXRpbmcgcHVzaCBtb2RlIik7CisgICAgcXVldWUtPnNyY3Jlc3VsdCA9IEdTVF9GTE9XX09LOworICAgIHF1ZXVlLT5zaW5rcmVzdWx0ID0gR1NUX0ZMT1dfT0s7CisgICAgcXVldWUtPmlzX2VvcyA9IEZBTFNFOworICAgIHF1ZXVlLT51bmV4cGVjdGVkID0gRkFMU0U7CisgICAgcmVzdWx0ID0gZ3N0X3BhZF9zdGFydF90YXNrIChwYWQsIChHc3RUYXNrRnVuY3Rpb24pIGdzdF9xdWV1ZTJfbG9vcCwgcGFkKTsKKyAgICBHU1RfUVVFVUUyX01VVEVYX1VOTE9DSyAocXVldWUpOworICB9IGVsc2UgeworICAgIC8qIHVuYmxvY2sgbG9vcCBmdW5jdGlvbiAqLworICAgIEdTVF9RVUVVRTJfTVVURVhfTE9DSyAocXVldWUpOworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAiZGVhY3RpdmF0aW5nIHB1c2ggbW9kZSIpOworICAgIHF1ZXVlLT5zcmNyZXN1bHQgPSBHU1RfRkxPV19XUk9OR19TVEFURTsKKyAgICBxdWV1ZS0+c2lua3Jlc3VsdCA9IEdTVF9GTE9XX1dST05HX1NUQVRFOworICAgIC8qIHRoZSBpdGVtIGFkZCBzaWduYWwgd2lsbCB1bmJsb2NrICovCisgICAgR1NUX1FVRVVFMl9TSUdOQUxfQUREIChxdWV1ZSk7CisgICAgR1NUX1FVRVVFMl9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKKworICAgIC8qIHN0ZXAgMiwgbWFrZSBzdXJlIHN0cmVhbWluZyBmaW5pc2hlcyAqLworICAgIHJlc3VsdCA9IGdzdF9wYWRfc3RvcF90YXNrIChwYWQpOworICB9CisKKyAgZ3N0X29iamVjdF91bnJlZiAocXVldWUpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIHB1bGwgbW9kZSwgZG93bnN0cmVhbSB3aWxsIGNhbGwgb3VyIGdldHJhbmdlIGZ1bmN0aW9uICovCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF9xdWV1ZTJfc3JjX2FjdGl2YXRlX3B1bGwgKEdzdFBhZCAqIHBhZCwgZ2Jvb2xlYW4gYWN0aXZlKQoreworICBnYm9vbGVhbiByZXN1bHQ7CisgIEdzdFF1ZXVlMiAqcXVldWU7CisKKyAgcXVldWUgPSBHU1RfUVVFVUUyIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOworCisgIGlmIChhY3RpdmUpIHsKKyAgICBHU1RfUVVFVUUyX01VVEVYX0xPQ0sgKHF1ZXVlKTsKKyAgICBpZiAoIVFVRVVFX0lTX1VTSU5HX1FVRVVFIChxdWV1ZSkpIHsKKyAgICAgIGlmIChRVUVVRV9JU19VU0lOR19URU1QX0ZJTEUgKHF1ZXVlKSkgeworICAgICAgICAvKiBvcGVuIHRoZSB0ZW1wIGZpbGUgbm93ICovCisgICAgICAgIHJlc3VsdCA9IGdzdF9xdWV1ZTJfb3Blbl90ZW1wX2xvY2F0aW9uX2ZpbGUgKHF1ZXVlKTsKKyAgICAgIH0gZWxzZSBpZiAoIXF1ZXVlLT5yaW5nX2J1ZmZlcikgeworICAgICAgICBxdWV1ZS0+cmluZ19idWZmZXIgPSBnX21hbGxvYyAocXVldWUtPnJpbmdfYnVmZmVyX21heF9zaXplKTsKKyAgICAgICAgcmVzdWx0ID0gISAhcXVldWUtPnJpbmdfYnVmZmVyOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0ID0gVFJVRTsKKyAgICAgIH0KKworICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJhY3RpdmF0aW5nIHB1bGwgbW9kZSIpOworICAgICAgaW5pdF9yYW5nZXMgKHF1ZXVlKTsKKyAgICAgIHF1ZXVlLT5zcmNyZXN1bHQgPSBHU1RfRkxPV19PSzsKKyAgICAgIHF1ZXVlLT5zaW5rcmVzdWx0ID0gR1NUX0ZMT1dfT0s7CisgICAgICBxdWV1ZS0+aXNfZW9zID0gRkFMU0U7CisgICAgICBxdWV1ZS0+dW5leHBlY3RlZCA9IEZBTFNFOworICAgICAgcXVldWUtPnVwc3RyZWFtX3NpemUgPSAwOworICAgIH0gZWxzZSB7CisgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgIm5vIHRlbXAgZmlsZSwgY2Fubm90IGFjdGl2YXRlIHB1bGwgbW9kZSIpOworICAgICAgLyogdGhpcyBpcyBub3QgYWxsb3dlZCwgd2UgY2Fubm90IG9wZXJhdGUgaW4gcHVsbCBtb2RlIHdpdGhvdXQgYSB0ZW1wCisgICAgICAgKiBmaWxlLiAqLworICAgICAgcXVldWUtPnNyY3Jlc3VsdCA9IEdTVF9GTE9XX1dST05HX1NUQVRFOworICAgICAgcXVldWUtPnNpbmtyZXN1bHQgPSBHU1RfRkxPV19XUk9OR19TVEFURTsKKyAgICAgIHJlc3VsdCA9IEZBTFNFOworICAgIH0KKyAgICBHU1RfUVVFVUUyX01VVEVYX1VOTE9DSyAocXVldWUpOworICB9IGVsc2UgeworICAgIEdTVF9RVUVVRTJfTVVURVhfTE9DSyAocXVldWUpOworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAiZGVhY3RpdmF0aW5nIHB1bGwgbW9kZSIpOworICAgIHF1ZXVlLT5zcmNyZXN1bHQgPSBHU1RfRkxPV19XUk9OR19TVEFURTsKKyAgICBxdWV1ZS0+c2lua3Jlc3VsdCA9IEdTVF9GTE9XX1dST05HX1NUQVRFOworICAgIC8qIHRoaXMgd2lsbCB1bmxvY2sgZ2V0cmFuZ2UgKi8KKyAgICBHU1RfUVVFVUUyX1NJR05BTF9BREQgKHF1ZXVlKTsKKyAgICByZXN1bHQgPSBUUlVFOworICAgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7CisgIH0KKyAgZ3N0X29iamVjdF91bnJlZiAocXVldWUpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgorZ3N0X3F1ZXVlMl9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQoreworICBHc3RRdWV1ZTIgKnF1ZXVlOworICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7CisKKyAgcXVldWUgPSBHU1RfUVVFVUUyIChlbGVtZW50KTsKKworICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTlVMTF9UT19SRUFEWToKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6CisgICAgICBHU1RfUVVFVUUyX01VVEVYX0xPQ0sgKHF1ZXVlKTsKKyAgICAgIGlmICghUVVFVUVfSVNfVVNJTkdfUVVFVUUgKHF1ZXVlKSkgeworICAgICAgICBpZiAoUVVFVUVfSVNfVVNJTkdfVEVNUF9GSUxFIChxdWV1ZSkpIHsKKyAgICAgICAgICBpZiAoIWdzdF9xdWV1ZTJfb3Blbl90ZW1wX2xvY2F0aW9uX2ZpbGUgKHF1ZXVlKSkKKyAgICAgICAgICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpZiAocXVldWUtPnJpbmdfYnVmZmVyKSB7CisgICAgICAgICAgICBnX2ZyZWUgKHF1ZXVlLT5yaW5nX2J1ZmZlcik7CisgICAgICAgICAgICBxdWV1ZS0+cmluZ19idWZmZXIgPSBOVUxMOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoIShxdWV1ZS0+cmluZ19idWZmZXIgPSBnX21hbGxvYyAocXVldWUtPnJpbmdfYnVmZmVyX21heF9zaXplKSkpCisgICAgICAgICAgICByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU7CisgICAgICAgIH0KKyAgICAgICAgaW5pdF9yYW5nZXMgKHF1ZXVlKTsKKyAgICAgIH0KKyAgICAgIHF1ZXVlLT5zZWdtZW50X2V2ZW50X3JlY2VpdmVkID0gRkFMU0U7CisgICAgICBxdWV1ZS0+c3RhcnRpbmdfc2VnbWVudCA9IE5VTEw7CisgICAgICBHU1RfUVVFVUUyX01VVEVYX1VOTE9DSyAocXVldWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19QTEFZSU5HOgorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpCisgICAgcmV0dXJuIHJldDsKKworICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKKworICBpZiAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkKKyAgICByZXR1cm4gcmV0OworCisgIHN3aXRjaCAodHJhbnNpdGlvbikgeworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRDoKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6CisgICAgICBHU1RfUVVFVUUyX01VVEVYX0xPQ0sgKHF1ZXVlKTsKKyAgICAgIGlmICghUVVFVUVfSVNfVVNJTkdfUVVFVUUgKHF1ZXVlKSkgeworICAgICAgICBpZiAoUVVFVUVfSVNfVVNJTkdfVEVNUF9GSUxFIChxdWV1ZSkpIHsKKyAgICAgICAgICBnc3RfcXVldWUyX2Nsb3NlX3RlbXBfbG9jYXRpb25fZmlsZSAocXVldWUpOworICAgICAgICB9IGVsc2UgaWYgKHF1ZXVlLT5yaW5nX2J1ZmZlcikgeworICAgICAgICAgIGdfZnJlZSAocXVldWUtPnJpbmdfYnVmZmVyKTsKKyAgICAgICAgICBxdWV1ZS0+cmluZ19idWZmZXIgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIGNsZWFuX3JhbmdlcyAocXVldWUpOworICAgICAgfQorICAgICAgaWYgKHF1ZXVlLT5zdGFydGluZ19zZWdtZW50ICE9IE5VTEwpIHsKKyAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChxdWV1ZS0+c3RhcnRpbmdfc2VnbWVudCk7CisgICAgICAgIHF1ZXVlLT5zdGFydGluZ19zZWdtZW50ID0gTlVMTDsKKyAgICAgIH0KKyAgICAgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiByZXQ7Cit9CisKKy8qIGNoYW5naW5nIHRoZSBjYXBhY2l0eSBvZiB0aGUgcXVldWUgbXVzdCB3YWtlIHVwCisgKiB0aGUgX2NoYWluIGZ1bmN0aW9uLCBpdCBtaWdodCBoYXZlIG1vcmUgcm9vbSBub3cKKyAqIHRvIHN0b3JlIHRoZSBidWZmZXIvZXZlbnQgaW4gdGhlIHF1ZXVlICovCisjZGVmaW5lIFFVRVVFX0NBUEFDSVRZX0NIQU5HRShxKVwKKyAgR1NUX1FVRVVFMl9TSUdOQUxfREVMIChxdWV1ZSk7CisKKy8qIENoYW5naW5nIHRoZSBtaW5pbXVtIHJlcXVpcmVkIGZpbGwgbGV2ZWwgbXVzdAorICogd2FrZSB1cCB0aGUgX2xvb3AgZnVuY3Rpb24gYXMgaXQgbWlnaHQgbm93CisgKiBiZSBhYmxlIHRvIHByZWNlZWQuCisgKi8KKyNkZWZpbmUgUVVFVUVfVEhSRVNIT0xEX0NIQU5HRShxKVwKKyAgR1NUX1FVRVVFMl9TSUdOQUxfQUREIChxdWV1ZSk7CisKK3N0YXRpYyB2b2lkCitnc3RfcXVldWUyX3NldF90ZW1wX3RlbXBsYXRlIChHc3RRdWV1ZTIgKiBxdWV1ZSwgY29uc3QgZ2NoYXIgKiB0ZW1wbGF0ZSkKK3sKKyAgR3N0U3RhdGUgc3RhdGU7CisKKyAgLyogdGhlIGVsZW1lbnQgbXVzdCBiZSBzdG9wcGVkIGluIG9yZGVyIHRvIGRvIHRoaXMgKi8KKyAgR1NUX09CSkVDVF9MT0NLIChxdWV1ZSk7CisgIHN0YXRlID0gR1NUX1NUQVRFIChxdWV1ZSk7CisgIGlmIChzdGF0ZSAhPSBHU1RfU1RBVEVfUkVBRFkgJiYgc3RhdGUgIT0gR1NUX1NUQVRFX05VTEwpCisgICAgZ290byB3cm9uZ19zdGF0ZTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHF1ZXVlKTsKKworICAvKiBzZXQgbmV3IGxvY2F0aW9uICovCisgIGdfZnJlZSAocXVldWUtPnRlbXBfdGVtcGxhdGUpOworICBxdWV1ZS0+dGVtcF90ZW1wbGF0ZSA9IGdfc3RyZHVwICh0ZW1wbGF0ZSk7CisKKyAgcmV0dXJuOworCisvKiBFUlJPUiAqLword3Jvbmdfc3RhdGU6CisgIHsKKyAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF1ZXVlLCAic2V0dGluZyB0ZW1wLXRlbXBsYXRlIHByb3BlcnR5IGluIHdyb25nIHN0YXRlIik7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHF1ZXVlKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZ3N0X3F1ZXVlMl9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCisgICAgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgR3N0UXVldWUyICpxdWV1ZSA9IEdTVF9RVUVVRTIgKG9iamVjdCk7CisKKyAgLyogc29tZW9uZSBjb3VsZCBjaGFuZ2UgbGV2ZWxzIGhlcmUsIGFuZCBzaW5jZSB0aGlzCisgICAqIGFmZmVjdHMgdGhlIGdldC9wdXQgZnVuY3MsIHdlIG5lZWQgdG8gbG9jayBmb3Igc2FmZXR5LiAqLworICBHU1RfUVVFVUUyX01VVEVYX0xPQ0sgKHF1ZXVlKTsKKworICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfTUFYX1NJWkVfQllURVM6CisgICAgICBxdWV1ZS0+bWF4X2xldmVsLmJ5dGVzID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOworICAgICAgUVVFVUVfQ0FQQUNJVFlfQ0hBTkdFIChxdWV1ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUFYX1NJWkVfQlVGRkVSUzoKKyAgICAgIHF1ZXVlLT5tYXhfbGV2ZWwuYnVmZmVycyA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKKyAgICAgIFFVRVVFX0NBUEFDSVRZX0NIQU5HRSAocXVldWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01BWF9TSVpFX1RJTUU6CisgICAgICBxdWV1ZS0+bWF4X2xldmVsLnRpbWUgPSBnX3ZhbHVlX2dldF91aW50NjQgKHZhbHVlKTsKKyAgICAgIC8qIHNldCByYXRlX3RpbWUgdG8gdGhlIHNhbWUgdmFsdWUuIFdlIHVzZSBhbiBleHRyYSBmaWVsZCBpbiB0aGUgbGV2ZWwKKyAgICAgICAqIHN0cnVjdHVyZSBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgYWNjZXNzIGFuZCBjb21wYXJlIGl0ICovCisgICAgICBxdWV1ZS0+bWF4X2xldmVsLnJhdGVfdGltZSA9IHF1ZXVlLT5tYXhfbGV2ZWwudGltZTsKKyAgICAgIFFVRVVFX0NBUEFDSVRZX0NIQU5HRSAocXVldWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1VTRV9CVUZGRVJJTkc6CisgICAgICBxdWV1ZS0+dXNlX2J1ZmZlcmluZyA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9VU0VfUkFURV9FU1RJTUFURToKKyAgICAgIHF1ZXVlLT51c2VfcmF0ZV9lc3RpbWF0ZSA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MT1dfUEVSQ0VOVDoKKyAgICAgIHF1ZXVlLT5sb3dfcGVyY2VudCA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hJR0hfUEVSQ0VOVDoKKyAgICAgIHF1ZXVlLT5oaWdoX3BlcmNlbnQgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9URU1QX1RFTVBMQVRFOgorICAgICAgZ3N0X3F1ZXVlMl9zZXRfdGVtcF90ZW1wbGF0ZSAocXVldWUsIGdfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9URU1QX0xPQ0FUSU9OOgorICAgICAgZ19mcmVlIChxdWV1ZS0+dGVtcF9sb2NhdGlvbik7CisgICAgICBxdWV1ZS0+dGVtcF9sb2NhdGlvbiA9IGdfdmFsdWVfZHVwX3N0cmluZyAodmFsdWUpOworICAgICAgLyogeW91IGNhbiBzZXQgdGhlIHByb3BlcnR5IGJhY2sgdG8gTlVMTCB0byBtYWtlIGl0IHVzZSB0aGUgdGVtcC10bXBsCisgICAgICAgKiBwcm9wZXJ0eS4gKi8KKyAgICAgIHF1ZXVlLT50ZW1wX2xvY2F0aW9uX3NldCA9IHF1ZXVlLT50ZW1wX2xvY2F0aW9uICE9IE5VTEw7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVEVNUF9SRU1PVkU6CisgICAgICBxdWV1ZS0+dGVtcF9yZW1vdmUgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUklOR19CVUZGRVJfTUFYX1NJWkU6CisgICAgICBxdWV1ZS0+cmluZ19idWZmZXJfbWF4X3NpemUgPSBnX3ZhbHVlX2dldF91aW50NjQgKHZhbHVlKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KKworICBHU1RfUVVFVUUyX01VVEVYX1VOTE9DSyAocXVldWUpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3F1ZXVlMl9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCisgICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgR3N0UXVldWUyICpxdWV1ZSA9IEdTVF9RVUVVRTIgKG9iamVjdCk7CisKKyAgR1NUX1FVRVVFMl9NVVRFWF9MT0NLIChxdWV1ZSk7CisKKyAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX0NVUl9MRVZFTF9CWVRFUzoKKyAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBxdWV1ZS0+Y3VyX2xldmVsLmJ5dGVzKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DVVJfTEVWRUxfQlVGRkVSUzoKKyAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBxdWV1ZS0+Y3VyX2xldmVsLmJ1ZmZlcnMpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NVUl9MRVZFTF9USU1FOgorICAgICAgZ192YWx1ZV9zZXRfdWludDY0ICh2YWx1ZSwgcXVldWUtPmN1cl9sZXZlbC50aW1lKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVhfU0laRV9CWVRFUzoKKyAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBxdWV1ZS0+bWF4X2xldmVsLmJ5dGVzKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVhfU0laRV9CVUZGRVJTOgorICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHF1ZXVlLT5tYXhfbGV2ZWwuYnVmZmVycyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUFYX1NJWkVfVElNRToKKyAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAodmFsdWUsIHF1ZXVlLT5tYXhfbGV2ZWwudGltZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVVNFX0JVRkZFUklORzoKKyAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBxdWV1ZS0+dXNlX2J1ZmZlcmluZyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVVNFX1JBVEVfRVNUSU1BVEU6CisgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgcXVldWUtPnVzZV9yYXRlX2VzdGltYXRlKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MT1dfUEVSQ0VOVDoKKyAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHF1ZXVlLT5sb3dfcGVyY2VudCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSElHSF9QRVJDRU5UOgorICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgcXVldWUtPmhpZ2hfcGVyY2VudCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVEVNUF9URU1QTEFURToKKyAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHF1ZXVlLT50ZW1wX3RlbXBsYXRlKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9URU1QX0xPQ0FUSU9OOgorICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgcXVldWUtPnRlbXBfbG9jYXRpb24pOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RFTVBfUkVNT1ZFOgorICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHF1ZXVlLT50ZW1wX3JlbW92ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUklOR19CVUZGRVJfTUFYX1NJWkU6CisgICAgICBnX3ZhbHVlX3NldF91aW50NjQgKHZhbHVlLCBxdWV1ZS0+cmluZ19idWZmZXJfbWF4X3NpemUpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICBicmVhazsKKyAgfQorCisgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7Cit9CmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5oIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2JlYWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuaApAQCAtMCwwICsxLDE2MCBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAgICAgIDIwMDMgQ29saW4gV2FsdGVycyA8Y3dhbHRlcnNAZ25vbWUub3JnPgorICogICAgICAgICAgICAgICAgICAgIDIwMDAsMjAwNSwyMDA3IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwNyBUaGlhZ28gU291c2EgU2FudG9zIDx0aGlhZ29zc0BsY2MudWZjZy5lZHUuYnI+CisgKgorICogZ3N0cXVldWUyLmg6CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKyNpZm5kZWYgX19HU1RfUVVFVUUyX0hfXworI2RlZmluZSBfX0dTVF9RVUVVRTJfSF9fCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEdTVF9UWVBFX1FVRVVFMiBcCisgIChnc3RfcXVldWUyX2dldF90eXBlKCkpCisjZGVmaW5lIEdTVF9RVUVVRTIob2JqKSBcCisgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9RVUVVRTIsR3N0UXVldWUyKSkKKyNkZWZpbmUgR1NUX1FVRVVFMl9DTEFTUyhrbGFzcykgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9RVUVVRTIsR3N0UXVldWUyQ2xhc3MpKQorI2RlZmluZSBHU1RfSVNfUVVFVUUyKG9iaikgXAorICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUVVFVUUyKSkKKyNkZWZpbmUgR1NUX0lTX1FVRVVFMl9DTEFTUyhrbGFzcykgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9RVUVVRTIpKQorI2RlZmluZSBHU1RfUVVFVUUyX0NBU1Qob2JqKSBcCisgICgoR3N0UXVldWUyICopKG9iaikpCisKK3R5cGVkZWYgc3RydWN0IF9Hc3RRdWV1ZTIgR3N0UXVldWUyOwordHlwZWRlZiBzdHJ1Y3QgX0dzdFF1ZXVlMlNpemUgR3N0UXVldWUyU2l6ZTsKK3R5cGVkZWYgc3RydWN0IF9Hc3RRdWV1ZTJDbGFzcyBHc3RRdWV1ZTJDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9Hc3RRdWV1ZTJSYW5nZSBHc3RRdWV1ZTJSYW5nZTsKKworLyogdXNlZCB0byBrZWVwIHRyYWNrIG9mIHNpemVzIChjdXJyZW50IGFuZCBtYXgpICovCitzdHJ1Y3QgX0dzdFF1ZXVlMlNpemUKK3sKKyAgZ3VpbnQgYnVmZmVyczsKKyAgZ3VpbnQgYnl0ZXM7CisgIGd1aW50NjQgdGltZTsKKyAgZ3VpbnQ2NCByYXRlX3RpbWU7Cit9OworCitzdHJ1Y3QgX0dzdFF1ZXVlMlJhbmdlCit7CisgIEdzdFF1ZXVlMlJhbmdlICpuZXh0OworCisgIGd1aW50NjQgb2Zmc2V0OyAgICAgICAgICAvKiBvZmZzZXQgb2YgcmFuZ2Ugc3RhcnQgaW4gc291cmNlICovCisgIGd1aW50NjQgcmJfb2Zmc2V0OyAgICAgICAvKiBvZmZzZXQgb2YgcmFuZ2Ugc3RhcnQgaW4gcmluZyBidWZmZXIgKi8KKyAgZ3VpbnQ2NCB3cml0aW5nX3BvczsgICAgIC8qIHdyaXRpbmcgcG9zaXRpb24gaW4gc291cmNlICovCisgIGd1aW50NjQgcmJfd3JpdGluZ19wb3M7ICAvKiB3cml0aW5nIHBvc2l0aW9uIGluIHJpbmcgYnVmZmVyICovCisgIGd1aW50NjQgcmVhZGluZ19wb3M7ICAgICAvKiByZWFkaW5nIHBvc2l0aW9uIGluIHNvdXJjZSAqLworICBndWludDY0IG1heF9yZWFkaW5nX3BvczsgLyogbGF0ZXN0IHJlcXVlc3RlZCBvZmZzZXQgaW4gc291cmNlICovCit9OworCitzdHJ1Y3QgX0dzdFF1ZXVlMgoreworICBHc3RFbGVtZW50IGVsZW1lbnQ7CisKKyAgLyo8IHByaXZhdGUgPiAqLworICBHc3RQYWQgKnNpbmtwYWQ7CisgIEdzdFBhZCAqc3JjcGFkOworCisgIC8qIHVwc3RyZWFtIHNpemUgaW4gYnl0ZXMgKGlmIGRvd25zdHJlYW0gaXMgb3BlcmF0aW5nIGluIHB1bGwgbW9kZSkgKi8KKyAgZ3VpbnQ2NCB1cHN0cmVhbV9zaXplOworCisgIC8qIHNlZ21lbnRzIHRvIGtlZXAgdHJhY2sgb2YgdGltZXN0YW1wcyAqLworICBHc3RTZWdtZW50IHNpbmtfc2VnbWVudDsKKyAgR3N0U2VnbWVudCBzcmNfc2VnbWVudDsKKworICAvKiBQb3NpdGlvbiBvZiBzcmMvc2luayAqLworICBHc3RDbG9ja1RpbWUgc2lua3RpbWUsIHNyY3RpbWU7CisgIC8qIFRSVUUgaWYgZWl0aGVyIHBvc2l0aW9uIG5lZWRzIHRvIGJlIHJlY2FsY3VsYXRlZCAqLworICBnYm9vbGVhbiBzaW5rX3RhaW50ZWQsIHNyY190YWludGVkOworCisgIC8qIGZsb3dyZXR1cm4gd2hlbiBzcmNwYWQgaXMgcGF1c2VkICovCisgIEdzdEZsb3dSZXR1cm4gc3JjcmVzdWx0OworICBHc3RGbG93UmV0dXJuIHNpbmtyZXN1bHQ7CisgIGdib29sZWFuIGlzX2VvczsKKyAgZ2Jvb2xlYW4gdW5leHBlY3RlZDsKKworICAvKiB0aGUgcXVldWUgb2YgZGF0YSB3ZSdyZSBrZWVwaW5nIG91ciBoYW5kcyBvbiAqLworICBHUXVldWUgKnF1ZXVlOworCisgIEdzdFF1ZXVlMlNpemUgY3VyX2xldmVsOyAgICAgICAvKiBjdXJyZW50bHkgaW4gdGhlIHF1ZXVlICovCisgIEdzdFF1ZXVlMlNpemUgbWF4X2xldmVsOyAgICAgICAvKiBtYXguIGFtb3VudCBvZiBkYXRhIGFsbG93ZWQgaW4gdGhlIHF1ZXVlICovCisgIGdib29sZWFuIHVzZV9idWZmZXJpbmc7CisgIGdib29sZWFuIHVzZV9yYXRlX2VzdGltYXRlOworICBHc3RDbG9ja1RpbWUgYnVmZmVyaW5nX2ludGVydmFsOworICBnaW50IGxvd19wZXJjZW50OyAgICAgICAgICAgICAvKiBsb3cvaGlnaCB3YXRlcm1hcmtzIGZvciBidWZmZXJpbmcgKi8KKyAgZ2ludCBoaWdoX3BlcmNlbnQ7CisKKyAgLyogY3VycmVudCBidWZmZXJpbmcgc3RhdGUgKi8KKyAgZ2Jvb2xlYW4gaXNfYnVmZmVyaW5nOworICBnaW50IGJ1ZmZlcmluZ19wZXJjZW50OworICBndWludCBidWZmZXJpbmdfaXRlcmF0aW9uOworCisgIC8qIGZvciBtZWFzdXJpbmcgaW5wdXQvb3V0cHV0IHJhdGVzICovCisgIEdUaW1lciAqaW5fdGltZXI7CisgIGdib29sZWFuIGluX3RpbWVyX3N0YXJ0ZWQ7CisgIGdkb3VibGUgbGFzdF9pbl9lbGFwc2VkOworICBndWludDY0IGJ5dGVzX2luOworICBnZG91YmxlIGJ5dGVfaW5fcmF0ZTsKKyAgZ2RvdWJsZSBieXRlX2luX3BlcmlvZDsKKworICBHVGltZXIgKm91dF90aW1lcjsKKyAgZ2Jvb2xlYW4gb3V0X3RpbWVyX3N0YXJ0ZWQ7CisgIGdkb3VibGUgbGFzdF9vdXRfZWxhcHNlZDsKKyAgZ3VpbnQ2NCBieXRlc19vdXQ7CisgIGdkb3VibGUgYnl0ZV9vdXRfcmF0ZTsKKworICBHTXV0ZXggKnFsb2NrOyAgICAgICAgICAgICAgICAvKiBsb2NrIGZvciBxdWV1ZSAodnMgb2JqZWN0IGxvY2spICovCisgIGdib29sZWFuIHdhaXRpbmdfYWRkOworICBHQ29uZCAqaXRlbV9hZGQ7ICAgICAgICAgICAgICAvKiBzaWduYWxzIGJ1ZmZlcnMgbm93IGF2YWlsYWJsZSBmb3IgcmVhZGluZyAqLworICBnYm9vbGVhbiB3YWl0aW5nX2RlbDsKKyAgR0NvbmQgKml0ZW1fZGVsOyAgICAgICAgICAgICAgLyogc2lnbmFscyBzcGFjZSBub3cgYXZhaWxhYmxlIGZvciB3cml0aW5nICovCisKKyAgLyogdGVtcCBsb2NhdGlvbiBzdHVmZiAqLworICBnY2hhciAqdGVtcF90ZW1wbGF0ZTsKKyAgZ2Jvb2xlYW4gdGVtcF9sb2NhdGlvbl9zZXQ7CisgIGdjaGFyICp0ZW1wX2xvY2F0aW9uOworICBnYm9vbGVhbiB0ZW1wX3JlbW92ZTsKKyAgRklMRSAqdGVtcF9maWxlOworICAvKiBsaXN0IG9mIGRvd25sb2FkZWQgYXJlYXMgYW5kIHRoZSBjdXJyZW50IGFyZWEgKi8KKyAgR3N0UXVldWUyUmFuZ2UgKnJhbmdlczsKKyAgR3N0UXVldWUyUmFuZ2UgKmN1cnJlbnQ7CisgIC8qIHdlIG5lZWQgdGhpcyB0byBzZW5kIHRoZSBmaXJzdCBuZXcgc2VnbWVudCBldmVudCBvZiB0aGUgc3RyZWFtCisgICAqIGJlY2F1c2Ugd2UgY2FuJ3Qgc2F2ZSBpdCBvbiB0aGUgZmlsZSAqLworICBnYm9vbGVhbiBzZWdtZW50X2V2ZW50X3JlY2VpdmVkOworICBHc3RFdmVudCAqc3RhcnRpbmdfc2VnbWVudDsKKworICBndWludDY0IHJpbmdfYnVmZmVyX21heF9zaXplOworICBndWludDggKiByaW5nX2J1ZmZlcjsKK307CisKK3N0cnVjdCBfR3N0UXVldWUyQ2xhc3MKK3sKKyAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK0dUeXBlIGdzdF9xdWV1ZTJfZ2V0X3R5cGUgKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HU1RfUVVFVUUyX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA2NzhjNgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmMKQEAgLTAsMCArMSw5MzMgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgMjAwMCwyMDAxLDIwMDIsMjAwMywyMDA0LDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KKyAqICAgICAgICAgICAgICAgMjAwNyBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorICoKKyAqIGdzdHRlZS5jOiBUZWUgZWxlbWVudCwgb25lIGluIE4gb3V0CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoqCisgKiBTRUNUSU9OOmVsZW1lbnQtdGVlCisgKiBAc2VlX2Fsc286ICNHc3RJZGVudGl0eQorICoKKyAqIFNwbGl0IGRhdGEgdG8gbXVsdGlwbGUgcGFkcy4gQnJhbmNoaW5nIHRoZSBkYXRhIGZsb3cgaXMgdXNlZnVsIHdoZW4gZS5nLgorICogY2FwdHVyaW5nIGEgdmlkZW8gd2hlcmUgdGhlIHZpZGVvIGlzIHNob3duIG9uIHRoZSBzY3JlZW4gYW5kIGFsc28gZW5jb2RlZCBhbmQKKyAqIHdyaXR0ZW4gdG8gYSBmaWxlLiBBbm90aGVyIGV4YW1wbGUgaXMgcGxheWluZyBtdXNpYyBhbmQgaG9va2luZyB1cCBhCisgKiB2aXN1YWxpc2F0aW9uIG1vZHVsZS4KKyAqCisgKiBPbmUgbmVlZHMgdG8gdXNlIHNlcGFyYXRlIHF1ZXVlIGVsZW1lbnRzIChvciBhIG11bHRpcXVldWUpIGluIGVhY2ggYnJhbmNoIHRvCisgKiBwcm92aWRlIHNlcGFyYXRlIHRocmVhZHMgZm9yIGVhY2ggYnJhbmNoLiBPdGhlcndpc2UgYSBibG9ja2VkIGRhdGFmbG93IGluIG9uZQorICogYnJhbmNoIHdvdWxkIHN0YWxsIHRoZSBvdGhlciBicmFuY2hlcy4KKyAqCisgKiA8cmVmc2VjdDI+CisgKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+CisgKiB8WworICogZ3N0LWxhdW5jaCBmaWxlc3JjIGxvY2F0aW9uPXNvbmcub2dnICEgZGVjb2RlYmluMiAhIHRlZSBuYW1lPXQgISBxdWV1ZSAhIGF1dG9hdWRpb3NpbmsgdC4gISBxdWV1ZSAhIGF1ZGlvY29udmVydCAhIGdvb20gISBmZm1wZWdjb2xvcnNwYWNlICEgYXV0b3ZpZGVvc2luaworICogXXwgUGxheSBhIHNvbmcub2dnIGZyb20gbG9jYWwgZGlyIGFuZCByZW5kZXIgdmlzdWFsaXNhdGlvbnMgdXNpbmcgdGhlIGdvb20KKyAqIGVsZW1lbnQuCisgKiA8L3JlZnNlY3QyPgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAiZ3N0dGVlLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCisgICAgR1NUX1BBRF9TSU5LLAorICAgIEdTVF9QQURfQUxXQVlTLAorICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOworCitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfdGVlX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF90ZWVfZGVidWcKKworI2RlZmluZSBHU1RfVFlQRV9URUVfUFVMTF9NT0RFIChnc3RfdGVlX3B1bGxfbW9kZV9nZXRfdHlwZSgpKQorc3RhdGljIEdUeXBlCitnc3RfdGVlX3B1bGxfbW9kZV9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIEdUeXBlIHR5cGUgPSAwOworICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSBkYXRhW10gPSB7CisgICAge0dTVF9URUVfUFVMTF9NT0RFX05FVkVSLCAiTmV2ZXIgYWN0aXZhdGUgaW4gcHVsbCBtb2RlIiwgIm5ldmVyIn0sCisgICAge0dTVF9URUVfUFVMTF9NT0RFX1NJTkdMRSwgIk9ubHkgb25lIHNyYyBwYWQgY2FuIGJlIGFjdGl2ZSBpbiBwdWxsIG1vZGUiLAorICAgICAgICAic2luZ2xlIn0sCisgICAgezAsIE5VTEwsIE5VTEx9LAorICB9OworCisgIGlmICghdHlwZSkgeworICAgIHR5cGUgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0VGVlUHVsbE1vZGUiLCBkYXRhKTsKKyAgfQorICByZXR1cm4gdHlwZTsKK30KKworLyogbG9jayB0byBwcm90ZWN0IHJlcXVlc3QgcGFkcyBmcm9tIGJlaW5nIHJlbW92ZWQgd2hpbGUgZG93bnN0cmVhbSAqLworI2RlZmluZSBHU1RfVEVFX0RZTl9MT0NLKHRlZSkgZ19tdXRleF9sb2NrICgodGVlKS0+ZHluX2xvY2spCisjZGVmaW5lIEdTVF9URUVfRFlOX1VOTE9DSyh0ZWUpIGdfbXV0ZXhfdW5sb2NrICgodGVlKS0+ZHluX2xvY2spCisKKyNkZWZpbmUgREVGQVVMVF9QUk9QX05VTV9TUkNfUEFEUwkwCisjZGVmaW5lIERFRkFVTFRfUFJPUF9IQVNfU0lOS19MT09QCUZBTFNFCisjZGVmaW5lIERFRkFVTFRfUFJPUF9IQVNfQ0hBSU4JCVRSVUUKKyNkZWZpbmUgREVGQVVMVF9QUk9QX1NJTEVOVAkJVFJVRQorI2RlZmluZSBERUZBVUxUX1BST1BfTEFTVF9NRVNTQUdFCU5VTEwKKyNkZWZpbmUgREVGQVVMVF9QVUxMX01PREUJCUdTVF9URUVfUFVMTF9NT0RFX05FVkVSCisKK2VudW0KK3sKKyAgUFJPUF8wLAorICBQUk9QX05VTV9TUkNfUEFEUywKKyAgUFJPUF9IQVNfU0lOS19MT09QLAorICBQUk9QX0hBU19DSEFJTiwKKyAgUFJPUF9TSUxFTlQsCisgIFBST1BfTEFTVF9NRVNTQUdFLAorICBQUk9QX1BVTExfTU9ERSwKKyAgUFJPUF9BTExPQ19QQUQsCit9OworCitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgdGVlX3NyY190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjJWQiLAorICAgIEdTVF9QQURfU1JDLAorICAgIEdTVF9QQURfUkVRVUVTVCwKKyAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKKworLyogc3RydWN0dXJlIGFuZCBxdWFyayB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIHBhZHMgaGF2ZSBiZWVuIHB1c2hlZCAqLworc3RhdGljIEdRdWFyayBwdXNoX2RhdGE7CisKKyNkZWZpbmUgX2RvX2luaXQgXAorICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfdGVlX2RlYnVnLCAidGVlIiwgMCwgInRlZSBlbGVtZW50Iik7IFwKKyAgICBwdXNoX2RhdGEgPSBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoInRlZS1wdXNoLWRhdGEiKTsKKyNkZWZpbmUgZ3N0X3RlZV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0VGVlLCBnc3RfdGVlLCBHU1RfVFlQRV9FTEVNRU5ULCBfZG9faW5pdCk7CisKK3N0YXRpYyBHUGFyYW1TcGVjICpwc3BlY19sYXN0X21lc3NhZ2UgPSBOVUxMOworc3RhdGljIEdQYXJhbVNwZWMgKnBzcGVjX2FsbG9jX3BhZCA9IE5VTEw7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGdib29sZWFuIHB1c2hlZDsKKyAgR3N0Rmxvd1JldHVybiByZXN1bHQ7CisgIGdib29sZWFuIHJlbW92ZWQ7Cit9IFB1c2hEYXRhOworCitzdGF0aWMgR3N0UGFkICpnc3RfdGVlX3JlcXVlc3RfbmV3X3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCisgICAgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wLCBjb25zdCBnY2hhciAqIHVudXNlZCwgY29uc3QgR3N0Q2FwcyAqIGNhcHMpOworc3RhdGljIHZvaWQgZ3N0X3RlZV9yZWxlYXNlX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFBhZCAqIHBhZCk7CisKK3N0YXRpYyB2b2lkIGdzdF90ZWVfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOworc3RhdGljIHZvaWQgZ3N0X3RlZV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7CitzdGF0aWMgdm9pZCBnc3RfdGVlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKK3N0YXRpYyB2b2lkIGdzdF90ZWVfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF90ZWVfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0QnVmZmVyICogYnVmZmVyKTsKK3N0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF90ZWVfY2hhaW5fbGlzdCAoR3N0UGFkICogcGFkLCBHc3RCdWZmZXJMaXN0ICogbGlzdCk7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X3RlZV9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpOworc3RhdGljIGdib29sZWFuIGdzdF90ZWVfc2lua19hY2NlcHRjYXBzIChHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBjYXBzKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfdGVlX3NpbmtfYWN0aXZhdGVfcHVzaCAoR3N0UGFkICogcGFkLCBnYm9vbGVhbiBhY3RpdmUpOworc3RhdGljIGdib29sZWFuIGdzdF90ZWVfc3JjX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdFF1ZXJ5ICogcXVlcnkpOworc3RhdGljIGdib29sZWFuIGdzdF90ZWVfc3JjX2FjdGl2YXRlX3B1bGwgKEdzdFBhZCAqIHBhZCwgZ2Jvb2xlYW4gYWN0aXZlKTsKK3N0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF90ZWVfc3JjX2dldF9yYW5nZSAoR3N0UGFkICogcGFkLCBndWludDY0IG9mZnNldCwKKyAgICBndWludCBsZW5ndGgsIEdzdEJ1ZmZlciAqKiBidWYpOworCitzdGF0aWMgdm9pZAorZ3N0X3RlZV9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQoreworICBHTGlzdCAqaXRlbTsKKworcmVzdGFydDoKKyAgZm9yIChpdGVtID0gR1NUX0VMRU1FTlRfUEFEUyAob2JqZWN0KTsgaXRlbTsgaXRlbSA9IGdfbGlzdF9uZXh0IChpdGVtKSkgeworICAgIEdzdFBhZCAqcGFkID0gR1NUX1BBRCAoaXRlbS0+ZGF0YSk7CisgICAgaWYgKEdTVF9QQURfSVNfU1JDIChwYWQpKSB7CisgICAgICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkIChHU1RfRUxFTUVOVCAob2JqZWN0KSwgcGFkKTsKKyAgICAgIGdvdG8gcmVzdGFydDsKKyAgICB9CisgIH0KKworICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQKK2dzdF90ZWVfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCit7CisgIEdzdFRlZSAqdGVlOworCisgIHRlZSA9IEdTVF9URUUgKG9iamVjdCk7CisKKyAgZ19mcmVlICh0ZWUtPmxhc3RfbWVzc2FnZSk7CisKKyAgZ19tdXRleF9mcmVlICh0ZWUtPmR5bl9sb2NrKTsKKworICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfdGVlX2NsYXNzX2luaXQgKEdzdFRlZUNsYXNzICoga2xhc3MpCit7CisgIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKKyAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOworCisgIGdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOworICBnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKKworICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF90ZWVfZmluYWxpemU7CisgIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF90ZWVfc2V0X3Byb3BlcnR5OworICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfdGVlX2dldF9wcm9wZXJ0eTsKKyAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF90ZWVfZGlzcG9zZTsKKworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX05VTV9TUkNfUEFEUywKKyAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJudW0tc3JjLXBhZHMiLCAiTnVtIFNyYyBQYWRzIiwKKyAgICAgICAgICAiVGhlIG51bWJlciBvZiBzb3VyY2UgcGFkcyIsIDAsIEdfTUFYSU5ULCBERUZBVUxUX1BST1BfTlVNX1NSQ19QQURTLAorICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfSEFTX1NJTktfTE9PUCwKKyAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiaGFzLXNpbmstbG9vcCIsICJIYXMgU2luayBMb29wIiwKKyAgICAgICAgICAiSWYgdGhlIGVsZW1lbnQgc2hvdWxkIHNwYXduIGEgdGhyZWFkICh1bmltcGxlbWVudGVkIGFuZCBkZXByZWNhdGVkKSIsCisgICAgICAgICAgREVGQVVMVF9QUk9QX0hBU19TSU5LX0xPT1AsCisgICAgICAgICAgR19QQVJBTV9DT05TVFJVQ1QgfCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9IQVNfQ0hBSU4sCisgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImhhcy1jaGFpbiIsICJIYXMgQ2hhaW4iLAorICAgICAgICAgICJJZiB0aGUgZWxlbWVudCBjYW4gb3BlcmF0ZSBpbiBwdXNoIG1vZGUiLCBERUZBVUxUX1BST1BfSEFTX0NIQUlOLAorICAgICAgICAgIEdfUEFSQU1fQ09OU1RSVUNUIHwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU0lMRU5ULAorICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJzaWxlbnQiLCAiU2lsZW50IiwKKyAgICAgICAgICAiRG9uJ3QgcHJvZHVjZSBsYXN0X21lc3NhZ2UgZXZlbnRzIiwgREVGQVVMVF9QUk9QX1NJTEVOVCwKKyAgICAgICAgICBHX1BBUkFNX0NPTlNUUlVDVCB8IEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworICBwc3BlY19sYXN0X21lc3NhZ2UgPSBnX3BhcmFtX3NwZWNfc3RyaW5nICgibGFzdC1tZXNzYWdlIiwgIkxhc3QgTWVzc2FnZSIsCisgICAgICAiVGhlIG1lc3NhZ2UgZGVzY3JpYmluZyBjdXJyZW50IHN0YXR1cyIsIERFRkFVTFRfUFJPUF9MQVNUX01FU1NBR0UsCisgICAgICBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTEFTVF9NRVNTQUdFLAorICAgICAgcHNwZWNfbGFzdF9tZXNzYWdlKTsKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9QVUxMX01PREUsCisgICAgICBnX3BhcmFtX3NwZWNfZW51bSAoInB1bGwtbW9kZSIsICJQdWxsIG1vZGUiLAorICAgICAgICAgICJCZWhhdmlvciBvZiB0ZWUgaW4gcHVsbCBtb2RlIiwgR1NUX1RZUEVfVEVFX1BVTExfTU9ERSwKKyAgICAgICAgICBERUZBVUxUX1BVTExfTU9ERSwKKyAgICAgICAgICBHX1BBUkFNX0NPTlNUUlVDVCB8IEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOworICBwc3BlY19hbGxvY19wYWQgPSBnX3BhcmFtX3NwZWNfb2JqZWN0ICgiYWxsb2MtcGFkIiwgIkFsbG9jYXRpb24gU3JjIFBhZCIsCisgICAgICAiVGhlIHBhZCB1c2VkIGZvciBnc3RfcGFkX2FsbG9jX2J1ZmZlciIsIEdTVF9UWVBFX1BBRCwKKyAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQUxMT0NfUEFELAorICAgICAgcHNwZWNfYWxsb2NfcGFkKTsKKworICBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlsc19zaW1wbGUgKGdzdGVsZW1lbnRfY2xhc3MsCisgICAgICAiVGVlIHBpcGUgZml0dGluZyIsCisgICAgICAiR2VuZXJpYyIsCisgICAgICAiMS10by1OIHBpcGUgZml0dGluZyIsCisgICAgICAiRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4sICIgIldpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Iik7CisgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCisgICAgICBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgKCZzaW5rdGVtcGxhdGUpKTsKKyAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKKyAgICAgIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoJnRlZV9zcmNfdGVtcGxhdGUpKTsKKworICBnc3RlbGVtZW50X2NsYXNzLT5yZXF1ZXN0X25ld19wYWQgPQorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF90ZWVfcmVxdWVzdF9uZXdfcGFkKTsKKyAgZ3N0ZWxlbWVudF9jbGFzcy0+cmVsZWFzZV9wYWQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3RlZV9yZWxlYXNlX3BhZCk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfdGVlX2luaXQgKEdzdFRlZSAqIHRlZSkKK3sKKyAgdGVlLT5keW5fbG9jayA9IGdfbXV0ZXhfbmV3ICgpOworCisgIHRlZS0+c2lua3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc2lua3RlbXBsYXRlLCAic2luayIpOworICB0ZWUtPnNpbmtfbW9kZSA9IEdTVF9BQ1RJVkFURV9OT05FOworCisgIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uICh0ZWUtPnNpbmtwYWQsCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3RlZV9zaW5rX2V2ZW50KSk7CisgIGdzdF9wYWRfc2V0X2dldGNhcHNfZnVuY3Rpb24gKHRlZS0+c2lua3BhZCwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcGFkX3Byb3h5X2dldGNhcHMpKTsKKyAgZ3N0X3BhZF9zZXRfYWNjZXB0Y2Fwc19mdW5jdGlvbiAodGVlLT5zaW5rcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF90ZWVfc2lua19hY2NlcHRjYXBzKSk7CisgIGdzdF9wYWRfc2V0X2FjdGl2YXRlcHVzaF9mdW5jdGlvbiAodGVlLT5zaW5rcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF90ZWVfc2lua19hY3RpdmF0ZV9wdXNoKSk7CisgIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uICh0ZWUtPnNpbmtwYWQsIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdGVlX2NoYWluKSk7CisgIGdzdF9wYWRfc2V0X2NoYWluX2xpc3RfZnVuY3Rpb24gKHRlZS0+c2lua3BhZCwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdGVlX2NoYWluX2xpc3QpKTsKKyAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKHRlZSksIHRlZS0+c2lua3BhZCk7CisKKyAgdGVlLT5sYXN0X21lc3NhZ2UgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3RlZV9ub3RpZnlfYWxsb2NfcGFkIChHc3RUZWUgKiB0ZWUpCit7CisjaWYgIUdMSUJfQ0hFQ0tfVkVSU0lPTigyLDI2LDApCisgIGdfb2JqZWN0X25vdGlmeSAoKEdPYmplY3QgKikgdGVlLCAiYWxsb2MtcGFkIik7CisjZWxzZQorICBnX29iamVjdF9ub3RpZnlfYnlfcHNwZWMgKChHT2JqZWN0ICopIHRlZSwgcHNwZWNfYWxsb2NfcGFkKTsKKyNlbmRpZgorfQorCitzdGF0aWMgR3N0Rmxvd1JldHVybgorZm9yd2FyZF9zdGlja3lfZXZlbnRzIChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgR3N0UGFkICpzcmNwYWQgPSBHU1RfUEFEX0NBU1QgKHVzZXJfZGF0YSk7CisKKyAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsIGdzdF9ldmVudF9yZWYgKGV2ZW50KSk7CisKKyAgcmV0dXJuIEdTVF9GTE9XX09LOworfQorCitzdGF0aWMgR3N0UGFkICoKK2dzdF90ZWVfcmVxdWVzdF9uZXdfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCwKKyAgICBjb25zdCBnY2hhciAqIHVudXNlZCwgY29uc3QgR3N0Q2FwcyAqIGNhcHMpCit7CisgIGdjaGFyICpuYW1lOworICBHc3RQYWQgKnNyY3BhZDsKKyAgR3N0VGVlICp0ZWU7CisgIEdzdEFjdGl2YXRlTW9kZSBtb2RlOworICBnYm9vbGVhbiByZXM7CisgIFB1c2hEYXRhICpkYXRhOworCisgIHRlZSA9IEdTVF9URUUgKGVsZW1lbnQpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHRlZSwgInJlcXVlc3RpbmcgcGFkIik7CisKKyAgR1NUX09CSkVDVF9MT0NLICh0ZWUpOworICBuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgic3JjJWQiLCB0ZWUtPnBhZF9jb3VudGVyKyspOworCisgIHNyY3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHRlbXBsLCBuYW1lKTsKKyAgZ19mcmVlIChuYW1lKTsKKworICBtb2RlID0gdGVlLT5zaW5rX21vZGU7CisKKyAgLyogaW5zdGFsbCB0aGUgZGF0YSwgd2UgYXV0b21hdGljYWxseSBmcmVlIGl0IHdoZW4gdGhlIHBhZCBpcyBkaXNwb3NlZCBiZWNhdXNlCisgICAqIG9mIF9yZWxlYXNlX3BhZCBvciB3aGVuIHRoZSBlbGVtZW50IGdvZXMgYXdheS4gKi8KKyAgZGF0YSA9IGdfbmV3MCAoUHVzaERhdGEsIDEpOworICBkYXRhLT5wdXNoZWQgPSBGQUxTRTsKKyAgZGF0YS0+cmVzdWx0ID0gR1NUX0ZMT1dfTk9UX0xJTktFRDsKKyAgZGF0YS0+cmVtb3ZlZCA9IEZBTFNFOworICBnX29iamVjdF9zZXRfcWRhdGFfZnVsbCAoR19PQkpFQ1QgKHNyY3BhZCksIHB1c2hfZGF0YSwgZGF0YSwgZ19mcmVlKTsKKworICBHU1RfT0JKRUNUX1VOTE9DSyAodGVlKTsKKworICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEdTVF9BQ1RJVkFURV9QVUxMOgorICAgICAgLyogd2UgYWxyZWFkeSBoYXZlIGEgc3JjIHBhZCBpbiBwdWxsIG1vZGUsIGFuZCBvdXIgcHVsbCBtb2RlIGNhbiBvbmx5IGJlCisgICAgICAgICBTSU5HTEUsIHNvIGZhbGwgdGhyb3VnaCB0byBhY3RpdmF0ZSB0aGlzIG5ldyBwYWQgaW4gcHVzaCBtb2RlICovCisgICAgY2FzZSBHU1RfQUNUSVZBVEVfUFVTSDoKKyAgICAgIHJlcyA9IGdzdF9wYWRfYWN0aXZhdGVfcHVzaCAoc3JjcGFkLCBUUlVFKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICByZXMgPSBUUlVFOworICAgICAgYnJlYWs7CisgIH0KKworICBpZiAoIXJlcykKKyAgICBnb3RvIGFjdGl2YXRlX2ZhaWxlZDsKKworICBnc3RfcGFkX3NldF9nZXRjYXBzX2Z1bmN0aW9uIChzcmNwYWQsCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3BhZF9wcm94eV9nZXRjYXBzKSk7CisgIGdzdF9wYWRfc2V0X2FjdGl2YXRlcHVsbF9mdW5jdGlvbiAoc3JjcGFkLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF90ZWVfc3JjX2FjdGl2YXRlX3B1bGwpKTsKKyAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKHNyY3BhZCwgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF90ZWVfc3JjX3F1ZXJ5KSk7CisgIGdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uIChzcmNwYWQsCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3RlZV9zcmNfZ2V0X3JhbmdlKSk7CisgIC8qIEZvcndhcmQgc3RpY2t5IGV2ZW50cyB0byB0aGUgbmV3IHNyY3BhZCAqLworICBnc3RfcGFkX3N0aWNreV9ldmVudHNfZm9yZWFjaCAodGVlLT5zaW5rcGFkLCBmb3J3YXJkX3N0aWNreV9ldmVudHMsIHNyY3BhZCk7CisgIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKHRlZSksIHNyY3BhZCk7CisKKyAgcmV0dXJuIHNyY3BhZDsKKworICAvKiBFUlJPUlMgKi8KK2FjdGl2YXRlX2ZhaWxlZDoKKyAgeworICAgIGdib29sZWFuIGNoYW5nZWQgPSBGQUxTRTsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyAodGVlKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUICh0ZWUsICJ3YXJuaW5nIGZhaWxlZCB0byBhY3RpdmF0ZSByZXF1ZXN0IHBhZCIpOworICAgIGlmICh0ZWUtPmFsbG9jcGFkID09IHNyY3BhZCkgeworICAgICAgdGVlLT5hbGxvY3BhZCA9IE5VTEw7CisgICAgICBjaGFuZ2VkID0gVFJVRTsKKyAgICB9CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHRlZSk7CisgICAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKKyAgICBpZiAoY2hhbmdlZCkgeworICAgICAgZ3N0X3RlZV9ub3RpZnlfYWxsb2NfcGFkICh0ZWUpOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZ3N0X3RlZV9yZWxlYXNlX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFBhZCAqIHBhZCkKK3sKKyAgR3N0VGVlICp0ZWU7CisgIFB1c2hEYXRhICpkYXRhOworICBnYm9vbGVhbiBjaGFuZ2VkID0gRkFMU0U7CisKKyAgdGVlID0gR1NUX1RFRSAoZWxlbWVudCk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAodGVlLCAicmVsZWFzaW5nIHBhZCIpOworCisgIC8qIHdhaXQgZm9yIHBlbmRpbmcgcGFkX2FsbG9jIHRvIGZpbmlzaCAqLworICBHU1RfVEVFX0RZTl9MT0NLICh0ZWUpOworICBkYXRhID0gZ19vYmplY3RfZ2V0X3FkYXRhIChHX09CSkVDVCAocGFkKSwgcHVzaF9kYXRhKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHRlZSk7CisgIC8qIG1hcmsgdGhlIHBhZCBhcyByZW1vdmVkIHNvIHRoYXQgZnV0dXJlIHBhZF9hbGxvYyBmYWlscyB3aXRoIE5PVF9MSU5LRUQuICovCisgIGRhdGEtPnJlbW92ZWQgPSBUUlVFOworICBpZiAodGVlLT5hbGxvY3BhZCA9PSBwYWQpIHsKKyAgICB0ZWUtPmFsbG9jcGFkID0gTlVMTDsKKyAgICBjaGFuZ2VkID0gVFJVRTsKKyAgfQorICBHU1RfT0JKRUNUX1VOTE9DSyAodGVlKTsKKworICBnc3Rfb2JqZWN0X3JlZiAocGFkKTsKKyAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAodGVlKSwgcGFkKTsKKworICBnc3RfcGFkX3NldF9hY3RpdmUgKHBhZCwgRkFMU0UpOworICBHU1RfVEVFX0RZTl9VTkxPQ0sgKHRlZSk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKKworICBpZiAoY2hhbmdlZCkgeworICAgIGdzdF90ZWVfbm90aWZ5X2FsbG9jX3BhZCAodGVlKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZ3N0X3RlZV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLAorICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgR3N0VGVlICp0ZWUgPSBHU1RfVEVFIChvYmplY3QpOworCisgIEdTVF9PQkpFQ1RfTE9DSyAodGVlKTsKKyAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX0hBU19TSU5LX0xPT1A6CisgICAgICB0ZWUtPmhhc19zaW5rX2xvb3AgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7CisgICAgICBpZiAodGVlLT5oYXNfc2lua19sb29wKSB7CisgICAgICAgIGdfd2FybmluZyAoInRlZSB3aWxsIG5ldmVyIGltcGxlbWVudCBoYXMtc2luay1sb29wPT1UUlVFIik7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSEFTX0NIQUlOOgorICAgICAgdGVlLT5oYXNfY2hhaW4gPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0lMRU5UOgorICAgICAgdGVlLT5zaWxlbnQgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUFVMTF9NT0RFOgorICAgICAgdGVlLT5wdWxsX21vZGUgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQUxMT0NfUEFEOgorICAgIHsKKyAgICAgIEdzdFBhZCAqcGFkID0gZ192YWx1ZV9nZXRfb2JqZWN0ICh2YWx1ZSk7CisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7CisgICAgICBpZiAoR1NUX09CSkVDVF9QQVJFTlQgKHBhZCkgPT0gR1NUX09CSkVDVF9DQVNUIChvYmplY3QpKQorICAgICAgICB0ZWUtPmFsbG9jcGFkID0gcGFkOworICAgICAgZWxzZQorICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG9iamVjdCwgIlRyaWVkIHRvIHNldCBhbGxvYyBwYWQgJXMgd2hpY2giCisgICAgICAgICAgICAiIGlzIG5vdCBteSBwYWQiLCBHU1RfT0JKRUNUX05BTUUgKHBhZCkpOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICBicmVhazsKKyAgfQorICBHU1RfT0JKRUNUX1VOTE9DSyAodGVlKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF90ZWVfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKKyAgICBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIEdzdFRlZSAqdGVlID0gR1NUX1RFRSAob2JqZWN0KTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHRlZSk7CisgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9OVU1fU1JDX1BBRFM6CisgICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBHU1RfRUxFTUVOVCAodGVlKS0+bnVtc3JjcGFkcyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSEFTX1NJTktfTE9PUDoKKyAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCB0ZWUtPmhhc19zaW5rX2xvb3ApOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hBU19DSEFJTjoKKyAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCB0ZWUtPmhhc19jaGFpbik7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0lMRU5UOgorICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHRlZS0+c2lsZW50KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MQVNUX01FU1NBR0U6CisgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCB0ZWUtPmxhc3RfbWVzc2FnZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUFVMTF9NT0RFOgorICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHRlZS0+cHVsbF9tb2RlKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BTExPQ19QQUQ6CisgICAgICBnX3ZhbHVlX3NldF9vYmplY3QgKHZhbHVlLCB0ZWUtPmFsbG9jcGFkKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHRlZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3RlZV9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpCit7CisgIGdib29sZWFuIHJlczsKKworICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKKyAgICBkZWZhdWx0OgorICAgICAgcmVzID0gZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChwYWQsIGV2ZW50KTsKKyAgICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIHJlczsKK30KKworLyogb24gdGhlIHNpbmsgd2UgYWNjZXB0IGNhcHMgdGhhdCBhcmUgYWNjZXB0YWJsZSB0byBhbGwgc3JjcGFkcyAqLworc3RhdGljIGdib29sZWFuCitnc3RfdGVlX3NpbmtfYWNjZXB0Y2FwcyAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogY2FwcykKK3sKKyAgR3N0VGVlICp0ZWU7CisgIGdib29sZWFuIHJlcywgZG9uZTsKKyAgR3N0SXRlcmF0b3IgKml0OworICBHVmFsdWUgaXRlbSA9IHsgMCwgfTsKKworICB0ZWUgPSBHU1RfVEVFX0NBU1QgKEdTVF9QQURfUEFSRU5UIChwYWQpKTsKKworICBpdCA9IGdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMgKEdTVF9FTEVNRU5UX0NBU1QgKHRlZSkpOworCisgIHJlcyA9IFRSVUU7CisgIGRvbmUgPSBGQUxTRTsKKyAgd2hpbGUgKCFkb25lICYmIHJlcykgeworICAgIHN3aXRjaCAoZ3N0X2l0ZXJhdG9yX25leHQgKGl0LCAmaXRlbSkpIHsKKyAgICAgIGNhc2UgR1NUX0lURVJBVE9SX09LOgorICAgICAgICByZXMgJj0gZ3N0X3BhZF9wZWVyX2FjY2VwdF9jYXBzIChnX3ZhbHVlX2dldF9vYmplY3QgKCZpdGVtKSwgY2Fwcyk7CisgICAgICAgIGdfdmFsdWVfcmVzZXQgKCZpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6CisgICAgICAgIHJlcyA9IFRSVUU7CisgICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9FUlJPUjoKKyAgICAgICAgcmVzID0gRkFMU0U7CisgICAgICAgIGRvbmUgPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0RPTkU6CisgICAgICAgIGRvbmUgPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgZ192YWx1ZV91bnNldCAoJml0ZW0pOworICBnc3RfaXRlcmF0b3JfZnJlZSAoaXQpOworCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfdGVlX2RvX21lc3NhZ2UgKEdzdFRlZSAqIHRlZSwgR3N0UGFkICogcGFkLCBncG9pbnRlciBkYXRhLCBnYm9vbGVhbiBpc19saXN0KQoreworICBHU1RfT0JKRUNUX0xPQ0sgKHRlZSk7CisgIGdfZnJlZSAodGVlLT5sYXN0X21lc3NhZ2UpOworICBpZiAoaXNfbGlzdCkgeworICAgIHRlZS0+bGFzdF9tZXNzYWdlID0KKyAgICAgICAgZ19zdHJkdXBfcHJpbnRmICgiY2hhaW4tbGlzdCAgICoqKioqKiogKCVzOiVzKXQgJXAiLAorICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCksIGRhdGEpOworICB9IGVsc2UgeworICAgIHRlZS0+bGFzdF9tZXNzYWdlID0KKyAgICAgICAgZ19zdHJkdXBfcHJpbnRmICgiY2hhaW4gICAgICAgICoqKioqKiogKCVzOiVzKXQgKCUiIEdfR1NJWkVfRk9STUFUCisgICAgICAgICIgYnl0ZXMsICUiIEdfR1VJTlQ2NF9GT1JNQVQgIikgJXAiLCBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCksCisgICAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKGRhdGEpLCBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoZGF0YSksIGRhdGEpOworICB9CisgIEdTVF9PQkpFQ1RfVU5MT0NLICh0ZWUpOworCisjaWYgIUdMSUJfQ0hFQ0tfVkVSU0lPTigyLDI2LDApCisgIGdfb2JqZWN0X25vdGlmeSAoKEdPYmplY3QgKikgdGVlLCAibGFzdC1tZXNzYWdlIik7CisjZWxzZQorICBnX29iamVjdF9ub3RpZnlfYnlfcHNwZWMgKChHT2JqZWN0ICopIHRlZSwgcHNwZWNfbGFzdF9tZXNzYWdlKTsKKyNlbmRpZgorfQorCitzdGF0aWMgR3N0Rmxvd1JldHVybgorZ3N0X3RlZV9kb19wdXNoIChHc3RUZWUgKiB0ZWUsIEdzdFBhZCAqIHBhZCwgZ3BvaW50ZXIgZGF0YSwgZ2Jvb2xlYW4gaXNfbGlzdCkKK3sKKyAgR3N0Rmxvd1JldHVybiByZXM7CisKKyAgLyogUHVzaCAqLworICBpZiAocGFkID09IHRlZS0+cHVsbF9wYWQpIHsKKyAgICAvKiBkb24ndCBwdXNoIG9uIHRoZSBwYWQgd2UncmUgcHVsbGluZyBmcm9tICovCisgICAgcmVzID0gR1NUX0ZMT1dfT0s7CisgIH0gZWxzZSBpZiAoaXNfbGlzdCkgeworICAgIHJlcyA9CisgICAgICAgIGdzdF9wYWRfcHVzaF9saXN0IChwYWQsCisgICAgICAgIGdzdF9idWZmZXJfbGlzdF9yZWYgKEdTVF9CVUZGRVJfTElTVF9DQVNUIChkYXRhKSkpOworICB9IGVsc2UgeworICAgIHJlcyA9IGdzdF9wYWRfcHVzaCAocGFkLCBnc3RfYnVmZmVyX3JlZiAoR1NUX0JVRkZFUl9DQVNUIChkYXRhKSkpOworICB9CisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkCitjbGVhcl9wYWRzIChHc3RQYWQgKiBwYWQsIEdzdFRlZSAqIHRlZSkKK3sKKyAgUHVzaERhdGEgKmRhdGE7CisKKyAgZGF0YSA9IGdfb2JqZWN0X2dldF9xZGF0YSAoKEdPYmplY3QgKikgcGFkLCBwdXNoX2RhdGEpOworCisgIC8qIHRoZSBkYXRhIG11c3QgYmUgdGhlcmUgb3Igd2UgaGF2ZSBhIHNjcmV3ZWQgdXAgaW50ZXJuYWwgc3RhdGUgKi8KKyAgZ19hc3NlcnQgKGRhdGEgIT0gTlVMTCk7CisKKyAgZGF0YS0+cHVzaGVkID0gRkFMU0U7CisgIGRhdGEtPnJlc3VsdCA9IEdTVF9GTE9XX05PVF9MSU5LRUQ7Cit9CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuCitnc3RfdGVlX2hhbmRsZV9kYXRhIChHc3RUZWUgKiB0ZWUsIGdwb2ludGVyIGRhdGEsIGdib29sZWFuIGlzX2xpc3QpCit7CisgIEdMaXN0ICpwYWRzOworICBndWludDMyIGNvb2tpZTsKKyAgR3N0Rmxvd1JldHVybiByZXQsIGNyZXQ7CisKKyAgaWYgKEdfVU5MSUtFTFkgKCF0ZWUtPnNpbGVudCkpCisgICAgZ3N0X3RlZV9kb19tZXNzYWdlICh0ZWUsIHRlZS0+c2lua3BhZCwgZGF0YSwgaXNfbGlzdCk7CisKKyAgR1NUX09CSkVDVF9MT0NLICh0ZWUpOworICBwYWRzID0gR1NUX0VMRU1FTlRfQ0FTVCAodGVlKS0+c3JjcGFkczsKKworICAvKiBzcGVjaWFsIGNhc2UgZm9yIHplcm8gcGFkcyAqLworICBpZiAoR19VTkxJS0VMWSAoIXBhZHMpKQorICAgIGdvdG8gbm9fcGFkczsKKworICAvKiBzcGVjaWFsIGNhc2UgZm9yIGp1c3Qgb25lIHBhZCB0aGF0IGF2b2lkcyByZWZmaW5nIHRoZSBidWZmZXIgKi8KKyAgaWYgKCFwYWRzLT5uZXh0KSB7CisgICAgR3N0UGFkICpwYWQgPSBHU1RfUEFEX0NBU1QgKHBhZHMtPmRhdGEpOworCisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHRlZSk7CisKKyAgICBpZiAocGFkID09IHRlZS0+cHVsbF9wYWQpIHsKKyAgICAgIHJldCA9IEdTVF9GTE9XX09LOworICAgIH0gZWxzZSBpZiAoaXNfbGlzdCkgeworICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2xpc3QgKHBhZCwgR1NUX0JVRkZFUl9MSVNUX0NBU1QgKGRhdGEpKTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoIChwYWQsIEdTVF9CVUZGRVJfQ0FTVCAoZGF0YSkpOworICAgIH0KKyAgICByZXR1cm4gcmV0OworICB9CisKKyAgLyogbWFyayBhbGwgcGFkcyBhcyAnbm90IHB1c2hlZCBvbiB5ZXQnICovCisgIGdfbGlzdF9mb3JlYWNoIChwYWRzLCAoR0Z1bmMpIGNsZWFyX3BhZHMsIHRlZSk7CisKK3Jlc3RhcnQ6CisgIGNyZXQgPSBHU1RfRkxPV19OT1RfTElOS0VEOworICBwYWRzID0gR1NUX0VMRU1FTlRfQ0FTVCAodGVlKS0+c3JjcGFkczsKKyAgY29va2llID0gR1NUX0VMRU1FTlRfQ0FTVCAodGVlKS0+cGFkc19jb29raWU7CisKKyAgd2hpbGUgKHBhZHMpIHsKKyAgICBHc3RQYWQgKnBhZDsKKyAgICBQdXNoRGF0YSAqcGRhdGE7CisKKyAgICBwYWQgPSBHU1RfUEFEX0NBU1QgKHBhZHMtPmRhdGEpOworCisgICAgLyogZ2V0IHRoZSBwcml2YXRlIGRhdGEsIHNvbWV0aGluZyBpcyByZWFsbHkgd3Jvbmcgd2l0aCB0aGUgaW50ZXJuYWwgc3RhdGUKKyAgICAgKiB3aGVuIGl0IGlzIG5vdCB0aGVyZSAqLworICAgIHBkYXRhID0gZ19vYmplY3RfZ2V0X3FkYXRhICgoR09iamVjdCAqKSBwYWQsIHB1c2hfZGF0YSk7CisgICAgZ19hc3NlcnQgKHBkYXRhICE9IE5VTEwpOworCisgICAgaWYgKEdfTElLRUxZICghcGRhdGEtPnB1c2hlZCkpIHsKKyAgICAgIC8qIG5vdCB5ZXQgcHVzaGVkLCByZWxlYXNlIGxvY2sgYW5kIHN0YXJ0IHB1c2hpbmcgKi8KKyAgICAgIGdzdF9vYmplY3RfcmVmIChwYWQpOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHRlZSk7CisKKyAgICAgIEdTVF9MT0dfT0JKRUNUICh0ZWUsICJTdGFydGluZyB0byBwdXNoICVzICVwIiwKKyAgICAgICAgICBpc19saXN0ID8gImxpc3QiIDogImJ1ZmZlciIsIGRhdGEpOworCisgICAgICByZXQgPSBnc3RfdGVlX2RvX3B1c2ggKHRlZSwgcGFkLCBkYXRhLCBpc19saXN0KTsKKworICAgICAgR1NUX0xPR19PQkpFQ1QgKHRlZSwgIlB1c2hpbmcgaXRlbSAlcCB5aWVsZGVkIHJlc3VsdCAlcyIsIGRhdGEsCisgICAgICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOworCisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHRlZSk7CisgICAgICAvKiBrZWVwIHRyYWNrIG9mIHdoaWNoIHBhZCB3ZSBwdXNoZWQgYW5kIHRoZSByZXN1bHQgdmFsdWUuIFdlIG5lZWQgdG8gZG8KKyAgICAgICAqIHRoaXMgYmVmb3JlIHdlIHJlbGVhc2UgdGhlIHJlZmNvdW50IG9uIHRoZSBwYWQsIHRoZSBQdXNoRGF0YSBpcworICAgICAgICogZGVzdHJveWVkIHdoZW4gdGhlIGxhc3QgcmVmIG9mIHRoZSBwYWQgZ29lcyBhd2F5LiAqLworICAgICAgcGRhdGEtPnB1c2hlZCA9IFRSVUU7CisgICAgICBwZGF0YS0+cmVzdWx0ID0gcmV0OworICAgICAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKKyAgICB9IGVsc2UgeworICAgICAgLyogYWxyZWFkeSBwdXNoZWQsIHVzZSBwcmV2aW91cyByZXR1cm4gdmFsdWUgKi8KKyAgICAgIHJldCA9IHBkYXRhLT5yZXN1bHQ7CisgICAgICBHU1RfTE9HX09CSkVDVCAodGVlLCAicGFkIGFscmVhZHkgcHVzaGVkIHdpdGggJXMiLAorICAgICAgICAgIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKKyAgICB9CisKKyAgICAvKiBiZWZvcmUgd2UgZ28gY29tYmluaW5nIHRoZSByZXR1cm4gdmFsdWUsIGNoZWNrIGlmIHRoZSBwYWQgbGlzdCBpcyBzdGlsbAorICAgICAqIHRoZSBzYW1lLiBJdCBjb3VsZCBiZSBwb3NzaWJsZSB0aGF0IHRoZSBwYWQgd2UganVzdCBwdXNoZWQgd2FzIHJlbW92ZWQKKyAgICAgKiBhbmQgdGhlIHJldHVybiB2YWx1ZSBpdCBub3QgdmFsaWQgYW55bW9yZSAqLworICAgIGlmIChHX1VOTElLRUxZIChHU1RfRUxFTUVOVF9DQVNUICh0ZWUpLT5wYWRzX2Nvb2tpZSAhPSBjb29raWUpKSB7CisgICAgICBHU1RfTE9HX09CSkVDVCAodGVlLCAicGFkIGxpc3QgY2hhbmdlZCIpOworICAgICAgLyogdGhlIGxpc3Qgb2YgcGFkcyBjaGFuZ2VkLCByZXN0YXJ0IGl0ZXJhdGlvbi4gUGFkcyB0aGF0IHdlIGFscmVhZHkKKyAgICAgICAqIHB1c2hlZCBvbiBhbmQgYXJlIHN0aWxsIGluIHRoZSBuZXcgbGlzdCwgd2lsbCBub3QgYmUgcHVzaGVkIG9uCisgICAgICAgKiBhZ2Fpbi4gKi8KKyAgICAgIGdvdG8gcmVzdGFydDsKKyAgICB9CisKKyAgICAvKiBzdG9wIHB1c2hpbmcgbW9yZSBidWZmZXJzIHdoZW4gd2UgaGF2ZSBhIGZhdGFsIGVycm9yICovCisgICAgaWYgKEdfVU5MSUtFTFkgKHJldCAhPSBHU1RfRkxPV19PSyAmJiByZXQgIT0gR1NUX0ZMT1dfTk9UX0xJTktFRCkpCisgICAgICBnb3RvIGVycm9yOworCisgICAgLyoga2VlcCBhbGwgb3RoZXIgcmV0dXJuIHZhbHVlcywgb3ZlcndyaXRpbmcgdGhlIHByZXZpb3VzIG9uZS4gKi8KKyAgICBpZiAoR19MSUtFTFkgKHJldCAhPSBHU1RfRkxPV19OT1RfTElOS0VEKSkgeworICAgICAgR1NUX0xPR19PQkpFQ1QgKHRlZSwgIlJlcGxhY2luZyByZXQgdmFsICVkIHdpdGggJWQiLCBjcmV0LCByZXQpOworICAgICAgY3JldCA9IHJldDsKKyAgICB9CisgICAgcGFkcyA9IGdfbGlzdF9uZXh0IChwYWRzKTsKKyAgfQorICBHU1RfT0JKRUNUX1VOTE9DSyAodGVlKTsKKworICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChkYXRhKSk7CisKKyAgLyogbm8gbmVlZCB0byB1bnNldCBndmFsdWUgKi8KKyAgcmV0dXJuIGNyZXQ7CisKKyAgLyogRVJST1JTICovCitub19wYWRzOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAodGVlLCAidGhlcmUgYXJlIG5vIHBhZHMsIHJldHVybiBub3QtbGlua2VkIik7CisgICAgcmV0ID0gR1NUX0ZMT1dfTk9UX0xJTktFRDsKKyAgICBnb3RvIGVycm9yOworICB9CitlcnJvcjoKKyAgeworICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRlZSwgInJlY2VpdmVkIGVycm9yICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh0ZWUpOworICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGRhdGEpKTsKKyAgICByZXR1cm4gcmV0OworICB9Cit9CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuCitnc3RfdGVlX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKK3sKKyAgR3N0Rmxvd1JldHVybiByZXM7CisgIEdzdFRlZSAqdGVlOworCisgIHRlZSA9IEdTVF9URUVfQ0FTVCAoR1NUX09CSkVDVF9QQVJFTlQgKHBhZCkpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHRlZSwgInJlY2VpdmVkIGJ1ZmZlciAlcCIsIGJ1ZmZlcik7CisKKyAgcmVzID0gZ3N0X3RlZV9oYW5kbGVfZGF0YSAodGVlLCBidWZmZXIsIEZBTFNFKTsKKworICBHU1RfREVCVUdfT0JKRUNUICh0ZWUsICJoYW5kbGVkIGJ1ZmZlciAlcyIsIGdzdF9mbG93X2dldF9uYW1lIChyZXMpKTsKKworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgR3N0Rmxvd1JldHVybgorZ3N0X3RlZV9jaGFpbl9saXN0IChHc3RQYWQgKiBwYWQsIEdzdEJ1ZmZlckxpc3QgKiBsaXN0KQoreworICBHc3RGbG93UmV0dXJuIHJlczsKKyAgR3N0VGVlICp0ZWU7CisKKyAgdGVlID0gR1NUX1RFRV9DQVNUIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHRlZSwgInJlY2VpdmVkIGxpc3QgJXAiLCBsaXN0KTsKKworICByZXMgPSBnc3RfdGVlX2hhbmRsZV9kYXRhICh0ZWUsIGxpc3QsIFRSVUUpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHRlZSwgImhhbmRsZWQgbGlzdCAlcyIsIGdzdF9mbG93X2dldF9uYW1lIChyZXMpKTsKKworICBnc3Rfb2JqZWN0X3VucmVmICh0ZWUpOworCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3RlZV9zaW5rX2FjdGl2YXRlX3B1c2ggKEdzdFBhZCAqIHBhZCwgZ2Jvb2xlYW4gYWN0aXZlKQoreworICBHc3RUZWUgKnRlZTsKKworICB0ZWUgPSBHU1RfVEVFIChHU1RfT0JKRUNUX1BBUkVOVCAocGFkKSk7CisKKyAgR1NUX09CSkVDVF9MT0NLICh0ZWUpOworICB0ZWUtPnNpbmtfbW9kZSA9IGFjdGl2ZSAmJiBHU1RfQUNUSVZBVEVfUFVTSDsKKworICBpZiAoYWN0aXZlICYmICF0ZWUtPmhhc19jaGFpbikKKyAgICBnb3RvIG5vX2NoYWluOworICBHU1RfT0JKRUNUX1VOTE9DSyAodGVlKTsKKworICByZXR1cm4gVFJVRTsKKworICAvKiBFUlJPUlMgKi8KK25vX2NoYWluOgorICB7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHRlZSk7CisgICAgR1NUX0lORk9fT0JKRUNUICh0ZWUsCisgICAgICAgICJUZWUgY2Fubm90IG9wZXJhdGUgaW4gcHVzaCBtb2RlIHdpdGggaGFzLWNoYWluPT1GQUxTRSIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF90ZWVfc3JjX2FjdGl2YXRlX3B1bGwgKEdzdFBhZCAqIHBhZCwgZ2Jvb2xlYW4gYWN0aXZlKQoreworICBHc3RUZWUgKnRlZTsKKyAgZ2Jvb2xlYW4gcmVzOworICBHc3RQYWQgKnNpbmtwYWQ7CisKKyAgdGVlID0gR1NUX1RFRSAoZ3N0X3BhZF9nZXRfcGFyZW50IChwYWQpKTsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHRlZSk7CisKKyAgaWYgKHRlZS0+cHVsbF9tb2RlID09IEdTVF9URUVfUFVMTF9NT0RFX05FVkVSKQorICAgIGdvdG8gY2Fubm90X3B1bGw7CisKKyAgaWYgKHRlZS0+cHVsbF9tb2RlID09IEdTVF9URUVfUFVMTF9NT0RFX1NJTkdMRSAmJiBhY3RpdmUgJiYgdGVlLT5wdWxsX3BhZCkKKyAgICBnb3RvIGNhbm5vdF9wdWxsX211bHRpcGxlX3NyY3M7CisKKyAgc2lua3BhZCA9IGdzdF9vYmplY3RfcmVmICh0ZWUtPnNpbmtwYWQpOworCisgIEdTVF9PQkpFQ1RfVU5MT0NLICh0ZWUpOworCisgIHJlcyA9IGdzdF9wYWRfYWN0aXZhdGVfcHVsbCAoc2lua3BhZCwgYWN0aXZlKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7CisKKyAgaWYgKCFyZXMpCisgICAgZ290byBzaW5rX2FjdGl2YXRlX2ZhaWxlZDsKKworICBHU1RfT0JKRUNUX0xPQ0sgKHRlZSk7CisgIGlmIChhY3RpdmUpIHsKKyAgICBpZiAodGVlLT5wdWxsX21vZGUgPT0gR1NUX1RFRV9QVUxMX01PREVfU0lOR0xFKQorICAgICAgdGVlLT5wdWxsX3BhZCA9IHBhZDsKKyAgfSBlbHNlIHsKKyAgICBpZiAocGFkID09IHRlZS0+cHVsbF9wYWQpCisgICAgICB0ZWUtPnB1bGxfcGFkID0gTlVMTDsKKyAgfQorICB0ZWUtPnNpbmtfbW9kZSA9IGFjdGl2ZSAmIEdTVF9BQ1RJVkFURV9QVUxMOworICBHU1RfT0JKRUNUX1VOTE9DSyAodGVlKTsKKworICBnc3Rfb2JqZWN0X3VucmVmICh0ZWUpOworCisgIHJldHVybiByZXM7CisKKyAgLyogRVJST1JTICovCitjYW5ub3RfcHVsbDoKKyAgeworICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh0ZWUpOworICAgIEdTVF9JTkZPX09CSkVDVCAodGVlLCAiQ2Fubm90IGFjdGl2YXRlIGluIHB1bGwgbW9kZSwgcHVsbC1tb2RlICIKKyAgICAgICAgInNldCB0byBORVZFUiIpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKHRlZSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CitjYW5ub3RfcHVsbF9tdWx0aXBsZV9zcmNzOgorICB7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHRlZSk7CisgICAgR1NUX0lORk9fT0JKRUNUICh0ZWUsICJDYW5ub3QgYWN0aXZhdGUgbXVsdGlwbGUgc3JjIHBhZHMgaW4gcHVsbCBtb2RlLCAiCisgICAgICAgICJwdWxsLW1vZGUgc2V0IHRvIFNJTkdMRSIpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKHRlZSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CitzaW5rX2FjdGl2YXRlX2ZhaWxlZDoKKyAgeworICAgIEdTVF9JTkZPX09CSkVDVCAodGVlLCAiRmFpbGVkIHRvICVzYWN0aXZhdGUgc2luayBwYWQgaW4gcHVsbCBtb2RlIiwKKyAgICAgICAgYWN0aXZlID8gIiIgOiAiZGUiKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmICh0ZWUpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF90ZWVfc3JjX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdFF1ZXJ5ICogcXVlcnkpCit7CisgIEdzdFRlZSAqdGVlOworICBnYm9vbGVhbiByZXM7CisgIEdzdFBhZCAqc2lua3BhZDsKKworICB0ZWUgPSBHU1RfVEVFIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOworCisgIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgeworICAgIGNhc2UgR1NUX1FVRVJZX1NDSEVEVUxJTkc6CisgICAgeworICAgICAgZ2Jvb2xlYW4gcHVsbF9tb2RlOworCisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHRlZSk7CisgICAgICBwdWxsX21vZGUgPSBUUlVFOworICAgICAgaWYgKHRlZS0+cHVsbF9tb2RlID09IEdTVF9URUVfUFVMTF9NT0RFX05FVkVSKSB7CisgICAgICAgIEdTVF9JTkZPX09CSkVDVCAodGVlLCAiQ2Fubm90IGFjdGl2YXRlIGluIHB1bGwgbW9kZSwgcHVsbC1tb2RlICIKKyAgICAgICAgICAgICJzZXQgdG8gTkVWRVIiKTsKKyAgICAgICAgcHVsbF9tb2RlID0gRkFMU0U7CisgICAgICB9IGVsc2UgaWYgKHRlZS0+cHVsbF9tb2RlID09IEdTVF9URUVfUFVMTF9NT0RFX1NJTkdMRSAmJiB0ZWUtPnB1bGxfcGFkKSB7CisgICAgICAgIEdTVF9JTkZPX09CSkVDVCAodGVlLCAiQ2Fubm90IGFjdGl2YXRlIG11bHRpcGxlIHNyYyBwYWRzIGluIHB1bGwgbW9kZSwgIgorICAgICAgICAgICAgInB1bGwtbW9kZSBzZXQgdG8gU0lOR0xFIik7CisgICAgICAgIHB1bGxfbW9kZSA9IEZBTFNFOworICAgICAgfQorCisgICAgICBzaW5rcGFkID0gZ3N0X29iamVjdF9yZWYgKHRlZS0+c2lua3BhZCk7CisgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAodGVlKTsKKworICAgICAgaWYgKHB1bGxfbW9kZSkgeworICAgICAgICAvKiBhc2sgcGVlciBpZiB3ZSBjYW4gb3BlcmF0ZSBpbiBwdWxsIG1vZGUgKi8KKyAgICAgICAgcmVzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5IChzaW5rcGFkLCBxdWVyeSk7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXMgPSBUUlVFOworICAgICAgfQorICAgICAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBxdWVyeSk7CisgICAgICBicmVhazsKKyAgfQorCisgIGdzdF9vYmplY3RfdW5yZWYgKHRlZSk7CisKKyAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQKK2dzdF90ZWVfcHVzaF9lb3MgKGNvbnN0IEdWYWx1ZSAqIHZwYWQsIEdzdFRlZSAqIHRlZSkKK3sKKyAgR3N0UGFkICpwYWQgPSBnX3ZhbHVlX2dldF9vYmplY3QgKHZwYWQpOworCisgIGlmIChwYWQgIT0gdGVlLT5wdWxsX3BhZCkKKyAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3RlZV9wdWxsX2VvcyAoR3N0VGVlICogdGVlKQoreworICBHc3RJdGVyYXRvciAqaXRlcjsKKworICBpdGVyID0gZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zcmNfcGFkcyAoR1NUX0VMRU1FTlQgKHRlZSkpOworICBnc3RfaXRlcmF0b3JfZm9yZWFjaCAoaXRlciwgKEdzdEl0ZXJhdG9yRm9yZWFjaEZ1bmN0aW9uKSBnc3RfdGVlX3B1c2hfZW9zLAorICAgICAgdGVlKTsKKyAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0ZXIpOworfQorCitzdGF0aWMgR3N0Rmxvd1JldHVybgorZ3N0X3RlZV9zcmNfZ2V0X3JhbmdlIChHc3RQYWQgKiBwYWQsIGd1aW50NjQgb2Zmc2V0LCBndWludCBsZW5ndGgsCisgICAgR3N0QnVmZmVyICoqIGJ1ZikKK3sKKyAgR3N0VGVlICp0ZWU7CisgIEdzdEZsb3dSZXR1cm4gcmV0OworCisgIHRlZSA9IEdTVF9URUUgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7CisKKyAgcmV0ID0gZ3N0X3BhZF9wdWxsX3JhbmdlICh0ZWUtPnNpbmtwYWQsIG9mZnNldCwgbGVuZ3RoLCBidWYpOworCisgIGlmIChyZXQgPT0gR1NUX0ZMT1dfT0spCisgICAgcmV0ID0gZ3N0X3RlZV9oYW5kbGVfZGF0YSAodGVlLCBnc3RfYnVmZmVyX3JlZiAoKmJ1ZiksIEZBTFNFKTsKKyAgZWxzZSBpZiAocmV0ID09IEdTVF9GTE9XX1VORVhQRUNURUQpCisgICAgZ3N0X3RlZV9wdWxsX2VvcyAodGVlKTsKKworICBnc3Rfb2JqZWN0X3VucmVmICh0ZWUpOworCisgIHJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5oIGIvcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjZkNzUwCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuaApAQCAtMCwwICsxLDk0IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+CisgKgorICogZ3N0dGVlLmg6IEhlYWRlciBmb3IgR3N0VGVlIGVsZW1lbnQKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKKyNpZm5kZWYgX19HU1RfVEVFX0hfXworI2RlZmluZSBfX0dTVF9URUVfSF9fCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKK0dfQkVHSU5fREVDTFMKKworCisjZGVmaW5lIEdTVF9UWVBFX1RFRSBcCisgIChnc3RfdGVlX2dldF90eXBlKCkpCisjZGVmaW5lIEdTVF9URUUob2JqKSBcCisgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9URUUsR3N0VGVlKSkKKyNkZWZpbmUgR1NUX1RFRV9DTEFTUyhrbGFzcykgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9URUUsR3N0VGVlQ2xhc3MpKQorI2RlZmluZSBHU1RfSVNfVEVFKG9iaikgXAorICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfVEVFKSkKKyNkZWZpbmUgR1NUX0lTX1RFRV9DTEFTUyhrbGFzcykgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9URUUpKQorI2RlZmluZSBHU1RfVEVFX0NBU1Qob2JqKSAoKEdzdFRlZSopIG9iaikKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdFRlZSAJCUdzdFRlZTsKK3R5cGVkZWYgc3RydWN0IF9Hc3RUZWVDbGFzcyAJR3N0VGVlQ2xhc3M7CisKKy8qKgorICogR3N0VGVlUHVsbE1vZGU6CisgKiBAR1NUX1RFRV9QVUxMX01PREVfTkVWRVI6IE5ldmVyIGFjdGl2YXRlIGluIHB1bGwgbW9kZS4KKyAqIEBHU1RfVEVFX1BVTExfTU9ERV9TSU5HTEU6IE9ubHkgb25lIHNyYyBwYWQgY2FuIGJlIGFjdGl2ZSBpbiBwdWxsIG1vZGUuCisgKgorICogVGhlIGRpZmZlcmVudCB3YXlzIHRoYXQgdGVlIGNhbiBiZWhhdmUgaW4gcHVsbCBtb2RlLiBAVEVFX1BVTExfTU9ERV9ORVZFUgorICogZGlzYWJsZXMgcHVsbCBtb2RlLgorICovCit0eXBlZGVmIGVudW0geworICBHU1RfVEVFX1BVTExfTU9ERV9ORVZFUiwKKyAgR1NUX1RFRV9QVUxMX01PREVfU0lOR0xFLAorfSBHc3RUZWVQdWxsTW9kZTsKKworLyoqCisgKiBHc3RUZWU6CisgKgorICogT3BhcXVlICNHc3RUZWUgZGF0YSBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBfR3N0VGVlIHsKKyAgR3N0RWxlbWVudCAgICAgIGVsZW1lbnQ7CisKKyAgLyo8IHByaXZhdGUgPiovCisgIC8qIGxvY2sgcHJvdGVjdGluZyBkeW5hbWljIHBhZHMgKi8KKyAgR011dGV4ICAgICAgICAgKmR5bl9sb2NrOworCisgIEdzdFBhZCAgICAgICAgICpzaW5rcGFkOworICBHc3RQYWQgICAgICAgICAqYWxsb2NwYWQ7CisgIGdpbnQgICAgICAgICAgICBwYWRfY291bnRlcjsKKworICBnYm9vbGVhbiAgICAgICAgaGFzX2NoYWluOworICBnYm9vbGVhbiAgICAgICAgaGFzX3NpbmtfbG9vcDsKKyAgZ2Jvb2xlYW4gICAgICAgIHNpbGVudDsKKyAgZ2NoYXIgICAgICAgICAgKmxhc3RfbWVzc2FnZTsKKworICBHc3RBY3RpdmF0ZU1vZGUgc2lua19tb2RlOworICBHc3RUZWVQdWxsTW9kZSAgcHVsbF9tb2RlOworICBHc3RQYWQgICAgICAgICAqcHVsbF9wYWQ7Cit9OworCitzdHJ1Y3QgX0dzdFRlZUNsYXNzIHsKKyAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK0dUeXBlIAlnc3RfdGVlX2dldF90eXBlCSh2b2lkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fR1NUX1RFRV9IX18gKi8KZGlmZiAtLWdpdCBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmMgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZDBiZGYKLS0tIC9kZXYvbnVsbAorKysgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jCkBAIC0wLDAgKzEsMTA1OCBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgQmVuamFtaW4gT3R0ZSA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+CisgKgorICogZ3N0dHlwZWZpbmRlbGVtZW50LmM6IGVsZW1lbnQgdGhhdCBkZXRlY3RzIHR5cGUgb2Ygc3RyZWFtCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKy8qKgorICogU0VDVElPTjplbGVtZW50LXR5cGVmaW5kCisgKgorICogRGV0ZXJtaW5lcyB0aGUgbWVkaWEtdHlwZSBvZiBhIHN0cmVhbS4gSXQgYXBwbGllcyB0eXBlZmluZCBmdW5jdGlvbnMgaW4gdGhlCisgKiBvcmRlciBvZiB0aGVpciByYW5rLiBPbmUgdGhlIHR5cGUgaGFzIGJlZW4gZGV0ZXRlZCBpdCBzZXRzIGl0cyBzcmMgcGFkIGNhcHMKKyAqIHRvIHRoZSBmb3VuZCBtZWRpYSB0eXBlLgorICoKKyAqIFdoZW5ldmVyIGEgdHlwZSBpcyBmb3VuZCB0aGUgI0dzdFR5cGVGaW5kRWxlbWVudDo6aGF2ZS10eXBlIHNpZ25hbCBpcworICogZW1pdHRlZCwgZWl0aGVyIGZyb20gdGhlIHN0cmVhbWluZyB0aHJlYWQgb3IgdGhlIGFwcGxpY2F0aW9uIHRocmVhZAorICogKHRoZSBsYXR0ZXIgbWF5IGhhcHBlbiB3aGVuIHR5cGVmaW5kaW5nIGlzIGRvbmUgcHVsbC1iYXNlZCBmcm9tIHRoZQorICogc3RhdGUgY2hhbmdlIGZ1bmN0aW9uKS4KKyAqCisgKiBQbHVnaW5zIGNhbiByZWdpc3RlciBjdXN0b20gdHlwZWZpbmRlcnMgYnkgdXNpbmcgI0dzdFR5cGVGaW5kRmFjdG9yeS4KKyAqLworCisvKiBGSVhNRTogbmVlZCBhIGJldHRlciBzb2x1dGlvbiBmb3Igbm9uLXNlZWthYmxlIHN0cmVhbXMgKi8KKworLyogd2F5IG9mIG9wZXJhdGlvbjoKKyAqIDEpIGdldCBhIGxpc3Qgb2YgYWxsIHR5cGVmaW5kIGZ1bmN0aW9ucyBzb3J0ZWQgYmVzdCB0byB3b3JzdAorICogMikgaWYgYWxsIGVsZW1lbnRzIGhhdmUgYmVlbiBjYWxsZWQgd2l0aCBhbGwgcmVxdWVzdGVkIGRhdGEgZ290byA4CisgKiAzKSBjYWxsIGFsbCBmdW5jdGlvbnMgb25jZSB3aXRoIGFsbCBhdmFpbGFibGUgZGF0YQorICogNCkgaWYgYSBmdW5jdGlvbiByZXR1cm5zIGEgdmFsdWUgPj0gUFJPUF9NQVhJTVVNIGdvdG8gOAorICogNSkgYWxsIGZ1bmN0aW9ucyB3aXRoIGEgcmVzdWx0ID4gUFJPUF9NSU5JTVVNIG9yIGZ1bmN0aW9ucyB0aGF0IGRpZCBub3QgZ2V0CisgKiAgICBhbGwgcmVxdWVzdGVkIGRhdGEgKHdoZXJlIHBlZWsgcmV0dXJuZWQgTlVMTCkgc3RheSBpbiBsaXN0CisgKiA2KSBzZWVrIHRvIHJlcXVlc3RlZCBvZmZzZXQgb2YgYmVzdCBmdW5jdGlvbiB0aGF0IHN0aWxsIGhhcyBvcGVuIGRhdGEKKyAqICAgIHJlcXVlc3RzCisgKiA3KSBnb3RvIDIKKyAqIDgpIHRha2UgYmVzdCBhdmFpbGFibGUgcmVzdWx0IGFuZCB1c2UgaXRzIGNhcHMKKyAqCisgKiBUaGUgZWxlbWVudCBoYXMgdHdvIHNjaGVkdWxpbmcgbW9kZXM6CisgKgorICogMSkgY2hhaW4gYmFzZWQsIGl0IHdpbGwgY29sbGVjdCBidWZmZXJzIGFuZCBydW4gdGhlIHR5cGVmaW5kIGZ1bmN0aW9uIG9uCisgKiAgICB0aGUgYnVmZmVyIHVudGlsIHNvbWV0aGluZyBpcyBmb3VuZC4KKyAqIDIpIGdldHJhbmdlIGJhc2VkLCBpdCB3aWxsIHByb3h5IHRoZSBnZXRyYW5nZSBmdW5jdGlvbiB0byB0aGUgc2lua3BhZC4gSXQKKyAqICAgIGlzIGFzc3VtZWQgdGhhdCB0aGUgcGVlciBlbGVtZW50IGlzIGhhcHB5IHdpdGggd2hhdGV2ZXIgZm9ybWF0IHdlCisgKiAgICBldmVudHVhbGx5IHJlYWQuCisgKgorICogQnkgZGVmYXVsdCBpdCB0cmllcyB0byBkbyBwdWxsIGJhc2VkIHR5cGVmaW5kaW5nICh0aGlzIGF2b2lkcyBqb2luaW5nCisgKiByZWNlaXZlZCBidWZmZXJzIGFuZCBob2xkaW5nIHRoZW0gYmFjayBpbiBzdG9yZS4pCisgKgorICogV2hlbiB0aGUgZWxlbWVudCBoYXMgbm8gY29ubmVjdGVkIHNyY3BhZCwgYW5kIHRoZSBzaW5rcGFkIGNhbiBvcGVyYXRlIGluCisgKiBnZXRyYW5nZSBiYXNlZCBtb2RlLCB0aGUgZWxlbWVudCBzdGFydHMgaXRzIG93biB0YXNrIHRvIGZpZ3VyZSBvdXQgdGhlCisgKiB0eXBlIG9mIHRoZSBzdHJlYW0uCisgKgorICogTW9zdCBvZiB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIGlzIGluIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYy4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgImdzdC9nc3RfcHJpdmF0ZS5oIgorCisjaW5jbHVkZSAiZ3N0dHlwZWZpbmRlbGVtZW50LmgiCisjaW5jbHVkZSAiZ3N0L2dzdC1pMThuLWxpYi5oIgorI2luY2x1ZGUgImdzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmgiCisKKyNpbmNsdWRlIDxnc3QvZ3N0dHlwZWZpbmQuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0dXRpbHMuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0ZXJyb3IuaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF90eXBlX2ZpbmRfZWxlbWVudF9kZWJ1ZworCisvKiBnZW5lcmljIHRlbXBsYXRlcyAqLworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHR5cGVfZmluZF9lbGVtZW50X3NpbmtfdGVtcGxhdGUgPQorR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKKyAgICBHU1RfUEFEX1NJTkssCisgICAgR1NUX1BBRF9BTFdBWVMsCisgICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7CisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSB0eXBlX2ZpbmRfZWxlbWVudF9zcmNfdGVtcGxhdGUgPQorR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAorICAgIEdTVF9QQURfU1JDLAorICAgIEdTVF9QQURfQUxXQVlTLAorICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOworCisvKiBSZXF1aXJlIGF0IGxlYXN0IDJrQiBvZiBkYXRhIGJlZm9yZSB3ZSBhdHRlbXB0IHR5cGVmaW5kaW5nIGluIGNoYWluLW1vZGUuCisgKiAxMjhrQiBpcyBtYXNzaXZlIG92ZXJraWxsIGZvciB0aGUgbWF4aW11bSwgYnV0IGRvZXNuJ3QgZG8gYW55IGhhcm0gKi8KKyNkZWZpbmUgVFlQRV9GSU5EX01JTl9TSVpFICAgKDIqMTAyNCkKKyNkZWZpbmUgVFlQRV9GSU5EX01BWF9TSVpFICgxMjgqMTAyNCkKKworLyogVHlwZUZpbmQgc2lnbmFscyBhbmQgYXJncyAqLworZW51bQoreworICBIQVZFX1RZUEUsCisgIExBU1RfU0lHTkFMCit9OworZW51bQoreworICBQUk9QXzAsCisgIFBST1BfQ0FQUywKKyAgUFJPUF9NSU5JTVVNLAorICBQUk9QX01BWElNVU0sCisgIFBST1BfRk9SQ0VfQ0FQUywKKyAgUFJPUF9MQVNUCit9OworZW51bQoreworICBNT0RFX05PUk1BTCwgICAgICAgICAgICAgICAgICAvKiBhY3QgYXMgaWRlbnRpdHkgKi8KKyAgTU9ERV9UWVBFRklORCwgICAgICAgICAgICAgICAgLyogZG8gdHlwZWZpbmRpbmcgICovCisgIE1PREVfRVJST1IgICAgICAgICAgICAgICAgICAgIC8qIGhhZCBmYXRhbCBlcnJvciAqLworfTsKKworCisjZGVmaW5lIF9kb19pbml0IFwKKyAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2RlYnVnLCAidHlwZWZpbmQiLCAgICAgICAgICAgXAorICAgICAgICBHU1RfREVCVUdfQkdfWUVMTE9XIHwgR1NUX0RFQlVHX0ZHX0dSRUVOLCAidHlwZSBmaW5kaW5nIGVsZW1lbnQiKTsKKyNkZWZpbmUgZ3N0X3R5cGVfZmluZF9lbGVtZW50X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RUeXBlRmluZEVsZW1lbnQsIGdzdF90eXBlX2ZpbmRfZWxlbWVudCwKKyAgICBHU1RfVFlQRV9FTEVNRU5ULCBfZG9faW5pdCk7CisKK3N0YXRpYyB2b2lkIGdzdF90eXBlX2ZpbmRfZWxlbWVudF9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KTsKK3N0YXRpYyB2b2lkIGdzdF90eXBlX2ZpbmRfZWxlbWVudF9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCisgICAgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7CitzdGF0aWMgdm9pZCBnc3RfdHlwZV9maW5kX2VsZW1lbnRfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAorICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOworCisjaWYgMAorc3RhdGljIGNvbnN0IEdzdEV2ZW50TWFzayAqZ3N0X3R5cGVfZmluZF9lbGVtZW50X3NyY19ldmVudF9tYXNrIChHc3RQYWQgKiBwYWQpOworI2VuZGlmCisKK3N0YXRpYyBnYm9vbGVhbiBnc3RfdHlwZV9maW5kX2VsZW1lbnRfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsCisgICAgR3N0RXZlbnQgKiBldmVudCk7CitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X3R5cGVfZmluZF9oYW5kbGVfc3JjX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdFF1ZXJ5ICogcXVlcnkpOworCitzdGF0aWMgZ2Jvb2xlYW4gZ3N0X3R5cGVfZmluZF9lbGVtZW50X3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwKKyAgICBHc3RFdmVudCAqIGV2ZW50KTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfdHlwZV9maW5kX2VsZW1lbnRfc2V0Y2FwcyAoR3N0VHlwZUZpbmRFbGVtZW50ICogdHlwZWZpbmQsCisgICAgR3N0Q2FwcyAqIGNhcHMpOworc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NoYWluIChHc3RQYWQgKiBzaW5rcGFkLAorICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7CitzdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfdHlwZV9maW5kX2VsZW1lbnRfZ2V0cmFuZ2UgKEdzdFBhZCAqIHNyY3BhZCwKKyAgICBndWludDY0IG9mZnNldCwgZ3VpbnQgbGVuZ3RoLCBHc3RCdWZmZXIgKiogYnVmZmVyKTsKKworc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCitnc3RfdHlwZV9maW5kX2VsZW1lbnRfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKKyAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKK3N0YXRpYyBnYm9vbGVhbiBnc3RfdHlwZV9maW5kX2VsZW1lbnRfYWN0aXZhdGUgKEdzdFBhZCAqIHBhZCk7CitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF90eXBlX2ZpbmRfZWxlbWVudF9hY3RpdmF0ZV9zcmNfcHVsbCAoR3N0UGFkICogcGFkLCBnYm9vbGVhbiBhY3RpdmUpOworc3RhdGljIEdzdEZsb3dSZXR1cm4KK2dzdF90eXBlX2ZpbmRfZWxlbWVudF9jaGFpbl9kb190eXBlZmluZGluZyAoR3N0VHlwZUZpbmRFbGVtZW50ICogdHlwZWZpbmQsCisgICAgZ2Jvb2xlYW4gY2hlY2tfYXZhaWwpOworc3RhdGljIHZvaWQgZ3N0X3R5cGVfZmluZF9lbGVtZW50X3NlbmRfY2FjaGVkX2V2ZW50cyAoR3N0VHlwZUZpbmRFbGVtZW50ICoKKyAgICB0eXBlZmluZCk7CisKK3N0YXRpYyBndWludCBnc3RfdHlwZV9maW5kX2VsZW1lbnRfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKKworc3RhdGljIHZvaWQKK2dzdF90eXBlX2ZpbmRfZWxlbWVudF9oYXZlX3R5cGUgKEdzdFR5cGVGaW5kRWxlbWVudCAqIHR5cGVmaW5kLAorICAgIGd1aW50IHByb2JhYmlsaXR5LCBjb25zdCBHc3RDYXBzICogY2FwcykKK3sKKyAgR3N0Q2FwcyAqY29weTsKKworICBnX2Fzc2VydCAoY2FwcyAhPSBOVUxMKTsKKworICBHU1RfSU5GT19PQkpFQ1QgKHR5cGVmaW5kLCAiZm91bmQgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCAiLCBwcm9iYWJpbGl0eT0ldSIsCisgICAgICBjYXBzLCBwcm9iYWJpbGl0eSk7CisKKyAgR1NUX09CSkVDVF9MT0NLICh0eXBlZmluZCk7CisgIGlmICh0eXBlZmluZC0+Y2FwcykKKyAgICBnc3RfY2Fwc191bnJlZiAodHlwZWZpbmQtPmNhcHMpOworICB0eXBlZmluZC0+Y2FwcyA9IGdzdF9jYXBzX2NvcHkgKGNhcHMpOworICBjb3B5ID0gZ3N0X2NhcHNfcmVmICh0eXBlZmluZC0+Y2Fwcyk7CisgIEdTVF9PQkpFQ1RfVU5MT0NLICh0eXBlZmluZCk7CisKKyAgZ3N0X3BhZF9wdXNoX2V2ZW50ICh0eXBlZmluZC0+c3JjLCBnc3RfZXZlbnRfbmV3X2NhcHMgKGNvcHkpKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGNvcHkpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NsYXNzX2luaXQgKEdzdFR5cGVGaW5kRWxlbWVudENsYXNzICogdHlwZWZpbmRfY2xhc3MpCit7CisgIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTICh0eXBlZmluZF9jbGFzcyk7CisgIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTICh0eXBlZmluZF9jbGFzcyk7CisKKyAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3R5cGVfZmluZF9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3R5cGVfZmluZF9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKyAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF90eXBlX2ZpbmRfZWxlbWVudF9kaXNwb3NlOworCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ0FQUywKKyAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCAoImNhcHMiLCBfKCJjYXBzIiksCisgICAgICAgICAgXygiZGV0ZWN0ZWQgY2FwYWJpbGl0aWVzIGluIHN0cmVhbSIpLCBHU1RfVFlQRV9DQVBTLAorICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTUlOSU1VTSwKKyAgICAgIGdfcGFyYW1fc3BlY191aW50ICgibWluaW11bSIsIF8oIm1pbmltdW0iKSwKKyAgICAgICAgICAibWluaW11bSBwcm9iYWJpbGl0eSByZXF1aXJlZCB0byBhY2NlcHQgY2FwcyIsIEdTVF9UWVBFX0ZJTkRfTUlOSU1VTSwKKyAgICAgICAgICBHU1RfVFlQRV9GSU5EX01BWElNVU0sIEdTVF9UWVBFX0ZJTkRfTUlOSU1VTSwKKyAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NQVhJTVVNLAorICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJtYXhpbXVtIiwgXygibWF4aW11bSIpLAorICAgICAgICAgICJwcm9iYWJpbGl0eSB0byBzdG9wIHR5cGVmaW5kaW5nIChkZXByZWNhdGVkOyBub24tZnVuY3Rpb25hbCkiLAorICAgICAgICAgIEdTVF9UWVBFX0ZJTkRfTUlOSU1VTSwgR1NUX1RZUEVfRklORF9NQVhJTVVNLCBHU1RfVFlQRV9GSU5EX01BWElNVU0sCisgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7CisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRk9SQ0VfQ0FQUywKKyAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCAoImZvcmNlLWNhcHMiLCBfKCJmb3JjZSBjYXBzIiksCisgICAgICAgICAgXygiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiKSwgR1NUX1RZUEVfQ0FQUywKKyAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKyAgLyoqCisgICAqIEdzdFR5cGVGaW5kRWxlbWVudDo6aGF2ZS10eXBlOgorICAgKiBAdHlwZWZpbmQ6IHRoZSB0eXBlZmluZCBpbnN0YW5jZQorICAgKiBAcHJvYmFiaWxpdHk6IHRoZSBwcm9iYWJpbGl0eSBvZiB0aGUgdHlwZSBmb3VuZAorICAgKiBAY2FwczogdGhlIGNhcHMgb2YgdGhlIHR5cGUgZm91bmQKKyAgICoKKyAgICogVGhpcyBzaWduYWwgZ2V0cyBlbWl0dGVkIHdoZW4gdGhlIHR5cGUgYW5kIGl0cyBwcm9iYWJpbGl0eSBoYXMKKyAgICogYmVlbiBmb3VuZC4KKyAgICovCisgIGdzdF90eXBlX2ZpbmRfZWxlbWVudF9zaWduYWxzW0hBVkVfVFlQRV0gPSBnX3NpZ25hbF9uZXcgKCJoYXZlLXR5cGUiLAorICAgICAgR19UWVBFX0ZST01fQ0xBU1MgKHR5cGVmaW5kX2NsYXNzKSwgR19TSUdOQUxfUlVOX0ZJUlNULAorICAgICAgR19TVFJVQ1RfT0ZGU0VUIChHc3RUeXBlRmluZEVsZW1lbnRDbGFzcywgaGF2ZV90eXBlKSwgTlVMTCwgTlVMTCwKKyAgICAgIGdzdF9tYXJzaGFsX1ZPSURfX1VJTlRfQk9YRUQsIEdfVFlQRV9OT05FLCAyLAorICAgICAgR19UWVBFX1VJTlQsIEdTVF9UWVBFX0NBUFMgfCBHX1NJR05BTF9UWVBFX1NUQVRJQ19TQ09QRSk7CisKKyAgdHlwZWZpbmRfY2xhc3MtPmhhdmVfdHlwZSA9CisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2hhdmVfdHlwZSk7CisKKyAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2ltcGxlIChnc3RlbGVtZW50X2NsYXNzLAorICAgICAgIlR5cGVGaW5kIiwKKyAgICAgICJHZW5lcmljIiwKKyAgICAgICJGaW5kcyB0aGUgbWVkaWEgdHlwZSBvZiBhIHN0cmVhbSIsCisgICAgICAiQmVuamFtaW4gT3R0ZSA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Iik7CisgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCisgICAgICBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgKCZ0eXBlX2ZpbmRfZWxlbWVudF9zcmNfdGVtcGxhdGUpKTsKKyAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKKyAgICAgIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoJnR5cGVfZmluZF9lbGVtZW50X3NpbmtfdGVtcGxhdGUpKTsKKworICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPQorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9jaGFuZ2Vfc3RhdGUpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3R5cGVfZmluZF9lbGVtZW50X2luaXQgKEdzdFR5cGVGaW5kRWxlbWVudCAqIHR5cGVmaW5kKQoreworICAvKiBzaW5rcGFkICovCisgIHR5cGVmaW5kLT5zaW5rID0KKyAgICAgIGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmdHlwZV9maW5kX2VsZW1lbnRfc2lua190ZW1wbGF0ZSwKKyAgICAgICJzaW5rIik7CisKKyAgZ3N0X3BhZF9zZXRfYWN0aXZhdGVfZnVuY3Rpb24gKHR5cGVmaW5kLT5zaW5rLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9hY3RpdmF0ZSkpOworICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAodHlwZWZpbmQtPnNpbmssCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NoYWluKSk7CisgIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uICh0eXBlZmluZC0+c2luaywKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfc2lua19ldmVudCkpOworICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAodHlwZWZpbmQpLCB0eXBlZmluZC0+c2luayk7CisKKyAgLyogc3JjcGFkICovCisgIHR5cGVmaW5kLT5zcmMgPQorICAgICAgZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZ0eXBlX2ZpbmRfZWxlbWVudF9zcmNfdGVtcGxhdGUsICJzcmMiKTsKKworICBnc3RfcGFkX3NldF9hY3RpdmF0ZXB1bGxfZnVuY3Rpb24gKHR5cGVmaW5kLT5zcmMsCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2FjdGl2YXRlX3NyY19wdWxsKSk7CisgIGdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uICh0eXBlZmluZC0+c3JjLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9nZXRyYW5nZSkpOworICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAodHlwZWZpbmQtPnNyYywKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfc3JjX2V2ZW50KSk7CisgIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uICh0eXBlZmluZC0+c3JjLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF90eXBlX2ZpbmRfaGFuZGxlX3NyY19xdWVyeSkpOworICBnc3RfcGFkX3VzZV9maXhlZF9jYXBzICh0eXBlZmluZC0+c3JjKTsKKyAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKHR5cGVmaW5kKSwgdHlwZWZpbmQtPnNyYyk7CisKKyAgdHlwZWZpbmQtPm1vZGUgPSBNT0RFX1RZUEVGSU5EOworICB0eXBlZmluZC0+Y2FwcyA9IE5VTEw7CisgIHR5cGVmaW5kLT5taW5fcHJvYmFiaWxpdHkgPSAxOworICB0eXBlZmluZC0+bWF4X3Byb2JhYmlsaXR5ID0gR1NUX1RZUEVfRklORF9NQVhJTVVNOworCisgIHR5cGVmaW5kLT5hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3R5cGVfZmluZF9lbGVtZW50X2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpCit7CisgIEdzdFR5cGVGaW5kRWxlbWVudCAqdHlwZWZpbmQgPSBHU1RfVFlQRV9GSU5EX0VMRU1FTlQgKG9iamVjdCk7CisKKyAgaWYgKHR5cGVmaW5kLT5hZGFwdGVyKSB7CisgICAgZ19vYmplY3RfdW5yZWYgKHR5cGVmaW5kLT5hZGFwdGVyKTsKKyAgICB0eXBlZmluZC0+YWRhcHRlciA9IE5VTEw7CisgIH0KKworICBpZiAodHlwZWZpbmQtPmZvcmNlX2NhcHMpIHsKKyAgICBnc3RfY2Fwc191bnJlZiAodHlwZWZpbmQtPmZvcmNlX2NhcHMpOworICAgIHR5cGVmaW5kLT5mb3JjZV9jYXBzID0gTlVMTDsKKyAgfQorCisgIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChvYmplY3QpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3R5cGVfZmluZF9lbGVtZW50X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQoreworICBHc3RUeXBlRmluZEVsZW1lbnQgKnR5cGVmaW5kOworCisgIHR5cGVmaW5kID0gR1NUX1RZUEVfRklORF9FTEVNRU5UIChvYmplY3QpOworCisgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9NSU5JTVVNOgorICAgICAgdHlwZWZpbmQtPm1pbl9wcm9iYWJpbGl0eSA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVhJTVVNOgorICAgICAgdHlwZWZpbmQtPm1heF9wcm9iYWJpbGl0eSA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GT1JDRV9DQVBTOgorICAgICAgR1NUX09CSkVDVF9MT0NLICh0eXBlZmluZCk7CisgICAgICBpZiAodHlwZWZpbmQtPmZvcmNlX2NhcHMpCisgICAgICAgIGdzdF9jYXBzX3VucmVmICh0eXBlZmluZC0+Zm9yY2VfY2Fwcyk7CisgICAgICB0eXBlZmluZC0+Zm9yY2VfY2FwcyA9IGdfdmFsdWVfZHVwX2JveGVkICh2YWx1ZSk7CisgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAodHlwZWZpbmQpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICBicmVhazsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZ3N0X3R5cGVfZmluZF9lbGVtZW50X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQoreworICBHc3RUeXBlRmluZEVsZW1lbnQgKnR5cGVmaW5kOworCisgIHR5cGVmaW5kID0gR1NUX1RZUEVfRklORF9FTEVNRU5UIChvYmplY3QpOworCisgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9DQVBTOgorICAgICAgR1NUX09CSkVDVF9MT0NLICh0eXBlZmluZCk7CisgICAgICBnX3ZhbHVlX3NldF9ib3hlZCAodmFsdWUsIHR5cGVmaW5kLT5jYXBzKTsKKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh0eXBlZmluZCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUlOSU1VTToKKyAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCB0eXBlZmluZC0+bWluX3Byb2JhYmlsaXR5KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVhJTVVNOgorICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHR5cGVmaW5kLT5tYXhfcHJvYmFiaWxpdHkpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZPUkNFX0NBUFM6CisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHR5cGVmaW5kKTsKKyAgICAgIGdfdmFsdWVfc2V0X2JveGVkICh2YWx1ZSwgdHlwZWZpbmQtPmZvcmNlX2NhcHMpOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHR5cGVmaW5kKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KK30KKworc3RhdGljIGdib29sZWFuCitnc3RfdHlwZV9maW5kX2hhbmRsZV9zcmNfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0UXVlcnkgKiBxdWVyeSkKK3sKKyAgR3N0VHlwZUZpbmRFbGVtZW50ICp0eXBlZmluZDsKKyAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7CisgIEdzdFBhZCAqcGVlcjsKKworICB0eXBlZmluZCA9IEdTVF9UWVBFX0ZJTkRfRUxFTUVOVCAoR1NUX1BBRF9QQVJFTlQgKHBhZCkpOworCisgIHBlZXIgPSBnc3RfcGFkX2dldF9wZWVyICh0eXBlZmluZC0+c2luayk7CisgIGlmIChwZWVyID09IE5VTEwpCisgICAgcmV0dXJuIEZBTFNFOworCisgIHJlcyA9IGdzdF9wYWRfcXVlcnkgKHBlZXIsIHF1ZXJ5KTsKKyAgaWYgKCFyZXMpCisgICAgZ290byBvdXQ7CisKKyAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7CisgICAgY2FzZSBHU1RfUVVFUllfUE9TSVRJT046CisgICAgeworICAgICAgZ2ludDY0IHBlZXJfcG9zOworICAgICAgR3N0Rm9ybWF0IGZvcm1hdDsKKworICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uIChxdWVyeSwgJmZvcm1hdCwgJnBlZXJfcG9zKTsKKworICAgICAgR1NUX09CSkVDVF9MT0NLICh0eXBlZmluZCk7CisgICAgICAvKiBGSVhNRTogdGhpcyBjb2RlIGFzc3VtZXMgdGhhdCB0aGVyZSdzIG5vIGRpc2NvbnQgaW4gdGhlIHF1ZXVlICovCisgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICBjYXNlIEdTVF9GT1JNQVRfQllURVM6CisgICAgICAgICAgcGVlcl9wb3MgLT0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlICh0eXBlZmluZC0+YWRhcHRlcik7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgLyogRklYTUUgKi8KKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh0eXBlZmluZCk7CisgICAgICBnc3RfcXVlcnlfc2V0X3Bvc2l0aW9uIChxdWVyeSwgZm9ybWF0LCBwZWVyX3Bvcyk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKK291dDoKKyAgZ3N0X29iamVjdF91bnJlZiAocGVlcik7CisgIHJldHVybiByZXM7Cit9CisKKyNpZiAwCitzdGF0aWMgY29uc3QgR3N0RXZlbnRNYXNrICoKK2dzdF90eXBlX2ZpbmRfZWxlbWVudF9zcmNfZXZlbnRfbWFzayAoR3N0UGFkICogcGFkKQoreworICBzdGF0aWMgY29uc3QgR3N0RXZlbnRNYXNrIG1hc2tbXSA9IHsKKyAgICB7R1NUX0VWRU5UX1NFRUssCisgICAgICAgIEdTVF9TRUVLX01FVEhPRF9TRVQgfCBHU1RfU0VFS19NRVRIT0RfQ1VSIHwgR1NUX1NFRUtfTUVUSE9EX0VORCB8CisgICAgICAgICAgR1NUX1NFRUtfRkxBR19GTFVTSH0sCisgICAgLyogYWRkIG1vcmUgaWYgeW91IHdhbnQsIGV2ZW50IG1hc2tzIHN1Y2sgYW5kIG5lZWQgdG8gZGllIGFueXdheSAqLworICAgIHswLH0KKyAgfTsKKworICByZXR1cm4gbWFzazsKK30KKyNlbmRpZgorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF90eXBlX2ZpbmRfZWxlbWVudF9zcmNfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiBldmVudCkKK3sKKyAgR3N0VHlwZUZpbmRFbGVtZW50ICp0eXBlZmluZCA9IEdTVF9UWVBFX0ZJTkRfRUxFTUVOVCAoR1NUX1BBRF9QQVJFTlQgKHBhZCkpOworCisgIGlmICh0eXBlZmluZC0+bW9kZSAhPSBNT0RFX05PUk1BTCkgeworICAgIC8qIG5lZWQgdG8gZG8gbW9yZT8gKi8KKyAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChldmVudCkpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorICByZXR1cm4gZ3N0X3BhZF9wdXNoX2V2ZW50ICh0eXBlZmluZC0+c2luaywgZXZlbnQpOworfQorCitzdGF0aWMgdm9pZAorc3RhcnRfdHlwZWZpbmRpbmcgKEdzdFR5cGVGaW5kRWxlbWVudCAqIHR5cGVmaW5kKQoreworICBHU1RfREVCVUdfT0JKRUNUICh0eXBlZmluZCwgInN0YXJ0aW5nIHR5cGVmaW5kaW5nIik7CisKKyAgR1NUX09CSkVDVF9MT0NLICh0eXBlZmluZCk7CisgIGlmICh0eXBlZmluZC0+Y2FwcykKKyAgICBnc3RfY2Fwc19yZXBsYWNlICgmdHlwZWZpbmQtPmNhcHMsIE5VTEwpOworICBHU1RfT0JKRUNUX1VOTE9DSyAodHlwZWZpbmQpOworCisgIHR5cGVmaW5kLT5tb2RlID0gTU9ERV9UWVBFRklORDsKK30KKworc3RhdGljIHZvaWQKK3N0b3BfdHlwZWZpbmRpbmcgKEdzdFR5cGVGaW5kRWxlbWVudCAqIHR5cGVmaW5kKQoreworICBHc3RTdGF0ZSBzdGF0ZTsKKyAgZ2Jvb2xlYW4gcHVzaF9jYWNoZWRfYnVmZmVyczsKKyAgZ3NpemUgYXZhaWw7CisgIEdzdEJ1ZmZlciAqYnVmZmVyOworCisgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKHR5cGVmaW5kKSwgJnN0YXRlLCBOVUxMLCAwKTsKKworICBwdXNoX2NhY2hlZF9idWZmZXJzID0gKHN0YXRlID49IEdTVF9TVEFURV9QQVVTRUQpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHR5cGVmaW5kLCAic3RvcHBpbmcgdHlwZWZpbmRpbmclcyIsCisgICAgICBwdXNoX2NhY2hlZF9idWZmZXJzID8gIiBhbmQgcHVzaGluZyBjYWNoZWQgYnVmZmVycyIgOiAiIik7CisKKyAgR1NUX09CSkVDVF9MT0NLICh0eXBlZmluZCk7CisgIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlICh0eXBlZmluZC0+YWRhcHRlcik7CisgIGlmIChhdmFpbCA9PSAwKQorICAgIGdvdG8gbm9fZGF0YTsKKworICBidWZmZXIgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAodHlwZWZpbmQtPmFkYXB0ZXIsIGF2YWlsKTsKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHR5cGVmaW5kKTsKKworICBpZiAoIXB1c2hfY2FjaGVkX2J1ZmZlcnMpIHsKKyAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworICB9IGVsc2UgeworICAgIEdzdFBhZCAqcGVlciA9IGdzdF9wYWRfZ2V0X3BlZXIgKHR5cGVmaW5kLT5zcmMpOworCisgICAgdHlwZWZpbmQtPm1vZGUgPSBNT0RFX05PUk1BTDsKKworICAgIC8qIG1ha2Ugc3VyZSB0aGUgdXNlciBnZXRzIGEgbWVhbmluZ2Z1bCBlcnJvciBtZXNzYWdlIGluIHRoaXMgY2FzZSwKKyAgICAgKiB3aGljaCBpcyBub3QgYSBjb3JlIGJ1ZyBvciBidWcgb2YgYW55IGtpbmQgKGFzIHRoZSBkZWZhdWx0IGVycm9yCisgICAgICogbWVzc2FnZSBlbWl0dGVkIGJ5IGdzdHBhZC5jIG90aGVyd2lzZSB3b3VsZCBtYWtlIHlvdSB0aGluaykgKi8KKyAgICBpZiAocGVlciAmJiBHU1RfUEFEX0NIQUlORlVOQyAocGVlcikgPT0gTlVMTCkgeworICAgICAgR1NUX0RFQlVHX09CSkVDVCAodHlwZWZpbmQsICJ1cHN0cmVhbSBvbmx5IHN1cHBvcnRzIHB1c2ggbW9kZSwgd2hpbGUgIgorICAgICAgICAgICJkb3duc3RyZWFtIGVsZW1lbnQgb25seSB3b3JrcyBpbiBwdWxsIG1vZGUsIGVycm9yaW5nIG91dCIpOworICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHR5cGVmaW5kLCBTVFJFQU0sIEZBSUxFRCwKKyAgICAgICAgICAoIiVzIGNhbm5vdCB3b3JrIGluIHB1c2ggbW9kZS4gVGhlIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkICIKKyAgICAgICAgICAgICAgIndpdGggdGhpcyBzb3VyY2UgZWxlbWVudCBvciBwcm90b2NvbC4iLAorICAgICAgICAgICAgICBHX09CSkVDVF9UWVBFX05BTUUgKEdTVF9QQURfUEFSRU5UIChwZWVyKSkpLAorICAgICAgICAgICgiRG93bnN0cmVhbSBwYWQgJXM6JXMgaGFzIG5vIGNoYWluZnVuY3Rpb24sIGFuZCB0aGUgdXBzdHJlYW0gIgorICAgICAgICAgICAgICAiZWxlbWVudCBkb2VzIG5vdCBzdXBwb3J0IHB1bGwgbW9kZSIsIEdTVF9ERUJVR19QQURfTkFNRSAocGVlcikpKTsKKyAgICAgIHR5cGVmaW5kLT5tb2RlID0gTU9ERV9FUlJPUjsgICAgICAvKiBtYWtlIHRoZSBjaGFpbiBmdW5jdGlvbiBlcnJvciBvdXQgKi8KKyAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7CisgICAgfSBlbHNlIHsKKyAgICAgIGdzdF90eXBlX2ZpbmRfZWxlbWVudF9zZW5kX2NhY2hlZF9ldmVudHMgKHR5cGVmaW5kKTsKKyAgICAgIGdzdF9wYWRfcHVzaCAodHlwZWZpbmQtPnNyYywgYnVmZmVyKTsKKyAgICB9CisgICAgaWYgKHBlZXIpCisgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwZWVyKTsKKyAgfQorICByZXR1cm47CisKKyAgLyogRVJST1JTICovCitub19kYXRhOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAodHlwZWZpbmQsICJ3ZSBoYXZlIG5vIGRhdGEgdG8gdHlwZWZpbmQiKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAodHlwZWZpbmQpOworICAgIHJldHVybjsKKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF90eXBlX2ZpbmRfZWxlbWVudF9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpCit7CisgIGdib29sZWFuIHJlcyA9IEZBTFNFOworICBHc3RUeXBlRmluZEVsZW1lbnQgKnR5cGVmaW5kID0gR1NUX1RZUEVfRklORF9FTEVNRU5UIChHU1RfUEFEX1BBUkVOVCAocGFkKSk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAodHlwZWZpbmQsICJnb3QgJXMgZXZlbnQgaW4gbW9kZSAlZCIsCisgICAgICBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCksIHR5cGVmaW5kLT5tb2RlKTsKKworICBzd2l0Y2ggKHR5cGVmaW5kLT5tb2RlKSB7CisgICAgY2FzZSBNT0RFX1RZUEVGSU5EOgorICAgICAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7CisgICAgICAgIGNhc2UgR1NUX0VWRU5UX0NBUFM6CisgICAgICAgIHsKKyAgICAgICAgICBHc3RDYXBzICpjYXBzOworCisgICAgICAgICAgLyogZmlyc3QgcGFzcyB0aGUgY2FwcyBldmVudCBkb3duc3RyZWFtICovCisgICAgICAgICAgcmVzID0gZ3N0X3BhZF9wdXNoX2V2ZW50ICh0eXBlZmluZC0+c3JjLCBnc3RfZXZlbnRfcmVmIChldmVudCkpOworCisgICAgICAgICAgLyogdGhlbiBwYXJzZSBhbmQgcHVzaCBvdXQgb3VyIGRhdGEgKi8KKyAgICAgICAgICBnc3RfZXZlbnRfcGFyc2VfY2FwcyAoZXZlbnQsICZjYXBzKTsKKyAgICAgICAgICByZXMgPSBnc3RfdHlwZV9maW5kX2VsZW1lbnRfc2V0Y2FwcyAodHlwZWZpbmQsIGNhcHMpOworCisgICAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHU1RfRVZFTlRfRU9TOgorICAgICAgICB7CisgICAgICAgICAgR1NUX0lORk9fT0JKRUNUICh0eXBlZmluZCwgIkdvdCBFT1MgYW5kIG5vIHR5cGUgZm91bmQgeWV0Iik7CisgICAgICAgICAgZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NoYWluX2RvX3R5cGVmaW5kaW5nICh0eXBlZmluZCwgRkFMU0UpOworCisgICAgICAgICAgcmVzID0gZ3N0X3BhZF9wdXNoX2V2ZW50ICh0eXBlZmluZC0+c3JjLCBldmVudCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKKyAgICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHR5cGVmaW5kKTsKKyAgICAgICAgICBnX2xpc3RfZm9yZWFjaCAodHlwZWZpbmQtPmNhY2hlZF9ldmVudHMsCisgICAgICAgICAgICAgIChHRnVuYykgZ3N0X21pbmlfb2JqZWN0X3VucmVmLCBOVUxMKTsKKyAgICAgICAgICBnX2xpc3RfZnJlZSAodHlwZWZpbmQtPmNhY2hlZF9ldmVudHMpOworICAgICAgICAgIHR5cGVmaW5kLT5jYWNoZWRfZXZlbnRzID0gTlVMTDsKKyAgICAgICAgICBnc3RfYWRhcHRlcl9jbGVhciAodHlwZWZpbmQtPmFkYXB0ZXIpOworICAgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh0eXBlZmluZCk7CisgICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUQVJUOgorICAgICAgICAgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAodHlwZWZpbmQtPnNyYywgZXZlbnQpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHR5cGVmaW5kLCAiU2F2aW5nICVzIGV2ZW50IHRvIHNlbmQgbGF0ZXIiLAorICAgICAgICAgICAgICBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCkpOworICAgICAgICAgIEdTVF9PQkpFQ1RfTE9DSyAodHlwZWZpbmQpOworICAgICAgICAgIHR5cGVmaW5kLT5jYWNoZWRfZXZlbnRzID0KKyAgICAgICAgICAgICAgZ19saXN0X2FwcGVuZCAodHlwZWZpbmQtPmNhY2hlZF9ldmVudHMsIGV2ZW50KTsKKyAgICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAodHlwZWZpbmQpOworICAgICAgICAgIHJlcyA9IFRSVUU7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIE1PREVfTk9STUFMOgorICAgICAgcmVzID0gZ3N0X3BhZF9wdXNoX2V2ZW50ICh0eXBlZmluZC0+c3JjLCBldmVudCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIE1PREVfRVJST1I6CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7CisgIH0KKyAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQKK2dzdF90eXBlX2ZpbmRfZWxlbWVudF9zZW5kX2NhY2hlZF9ldmVudHMgKEdzdFR5cGVGaW5kRWxlbWVudCAqIHR5cGVmaW5kKQoreworICBHTGlzdCAqbCwgKmNhY2hlZF9ldmVudHM7CisKKyAgR1NUX09CSkVDVF9MT0NLICh0eXBlZmluZCk7CisgIGNhY2hlZF9ldmVudHMgPSB0eXBlZmluZC0+Y2FjaGVkX2V2ZW50czsKKyAgdHlwZWZpbmQtPmNhY2hlZF9ldmVudHMgPSBOVUxMOworICBHU1RfT0JKRUNUX1VOTE9DSyAodHlwZWZpbmQpOworCisgIGZvciAobCA9IGNhY2hlZF9ldmVudHM7IGwgIT0gTlVMTDsgbCA9IGwtPm5leHQpIHsKKyAgICBHc3RFdmVudCAqZXZlbnQgPSBHU1RfRVZFTlQgKGwtPmRhdGEpOworCisgICAgR1NUX0RFQlVHX09CSkVDVCAodHlwZWZpbmQsICJzZW5kaW5nIGNhY2hlZCAlcyBldmVudCIsCisgICAgICAgIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7CisgICAgZ3N0X3BhZF9wdXNoX2V2ZW50ICh0eXBlZmluZC0+c3JjLCBldmVudCk7CisgIH0KKyAgZ19saXN0X2ZyZWUgKGNhY2hlZF9ldmVudHMpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2dzdF90eXBlX2ZpbmRfZWxlbWVudF9zZXRjYXBzIChHc3RUeXBlRmluZEVsZW1lbnQgKiB0eXBlZmluZCwgR3N0Q2FwcyAqIGNhcHMpCit7CisgIC8qIGRvbid0IG9wZXJhdGUgb24gQU5ZIGNhcHMgKi8KKyAgaWYgKGdzdF9jYXBzX2lzX2FueSAoY2FwcykpCisgICAgcmV0dXJuIFRSVUU7CisKKyAgZ19zaWduYWxfZW1pdCAodHlwZWZpbmQsIGdzdF90eXBlX2ZpbmRfZWxlbWVudF9zaWduYWxzW0hBVkVfVFlQRV0sIDAsCisgICAgICBHU1RfVFlQRV9GSU5EX01BWElNVU0sIGNhcHMpOworCisgIC8qIFNob3J0Y2lyY3VpdCB0eXBlZmluZGluZyBpZiB3ZSBnZXQgY2FwcyAqLworICBpZiAodHlwZWZpbmQtPm1vZGUgPT0gTU9ERV9UWVBFRklORCkgeworICAgIEdzdEJ1ZmZlciAqYnVmZmVyOworICAgIGdzaXplIGF2YWlsOworCisgICAgR1NUX0RFQlVHX09CSkVDVCAodHlwZWZpbmQsICJTa2lwcGluZyB0eXBlZmluZGluZywgdXNpbmcgY2FwcyBmcm9tICIKKyAgICAgICAgInVwc3RyZWFtIGJ1ZmZlcjogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOworICAgIHR5cGVmaW5kLT5tb2RlID0gTU9ERV9OT1JNQUw7CisKKyAgICBnc3RfdHlwZV9maW5kX2VsZW1lbnRfc2VuZF9jYWNoZWRfZXZlbnRzICh0eXBlZmluZCk7CisgICAgR1NUX09CSkVDVF9MT0NLICh0eXBlZmluZCk7CisgICAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHR5cGVmaW5kLT5hZGFwdGVyKTsKKyAgICBpZiAoYXZhaWwgPT0gMCkKKyAgICAgIGdvdG8gbm9fZGF0YTsKKworICAgIGJ1ZmZlciA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyICh0eXBlZmluZC0+YWRhcHRlciwgYXZhaWwpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh0eXBlZmluZCk7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUICh0eXBlZmluZCwgIlB1c2hpbmcgYnVmZmVyOiAlIiBHX0dTSVpFX0ZPUk1BVCwgYXZhaWwpOworICAgIGdzdF9wYWRfcHVzaCAodHlwZWZpbmQtPnNyYywgYnVmZmVyKTsKKyAgfQorCisgIHJldHVybiBUUlVFOworCitub19kYXRhOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAodHlwZWZpbmQsICJubyBkYXRhIHRvIHB1c2giKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAodHlwZWZpbmQpOworICAgIHJldHVybiBUUlVFOworICB9Cit9CisKK3N0YXRpYyBnY2hhciAqCitnc3RfdHlwZV9maW5kX2dldF9leHRlbnNpb24gKEdzdFR5cGVGaW5kRWxlbWVudCAqIHR5cGVmaW5kLCBHc3RQYWQgKiBwYWQpCit7CisgIEdzdFF1ZXJ5ICpxdWVyeTsKKyAgZ2NoYXIgKnVyaSwgKnJlc3VsdDsKKyAgc2l6ZV90IGxlbjsKKyAgZ2ludCBmaW5kOworCisgIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld191cmkgKCk7CisKKyAgLyogdHJ5IGdldHRpbmcgdGhlIGNhcHMgd2l0aCBhbiB1cmkgcXVlcnkgYW5kIGZyb20gdGhlIGV4dGVuc2lvbiAqLworICBpZiAoIWdzdF9wYWRfcGVlcl9xdWVyeSAocGFkLCBxdWVyeSkpCisgICAgZ290byBwZWVyX3F1ZXJ5X2ZhaWxlZDsKKworICBnc3RfcXVlcnlfcGFyc2VfdXJpIChxdWVyeSwgJnVyaSk7CisgIGlmICh1cmkgPT0gTlVMTCkKKyAgICBnb3RvIG5vX3VyaTsKKworICBHU1RfREVCVUdfT0JKRUNUICh0eXBlZmluZCwgImZpbmRpbmcgZXh0ZW5zaW9uIG9mICVzIiwgdXJpKTsKKworICAvKiBmaW5kIHRoZSBleHRlbnNpb24gb24gdGhlIHVyaSwgdGhpcyBpcyBldmVyeXRoaW5nIGFmdGVyIGEgJy4nICovCisgIGxlbiA9IHN0cmxlbiAodXJpKTsKKyAgZmluZCA9IGxlbiAtIDE7CisKKyAgd2hpbGUgKGZpbmQgPj0gMCkgeworICAgIGlmICh1cmlbZmluZF0gPT0gJy4nKQorICAgICAgYnJlYWs7CisgICAgZmluZC0tOworICB9CisgIGlmIChmaW5kIDwgMCkKKyAgICBnb3RvIG5vX2V4dGVuc2lvbjsKKworICByZXN1bHQgPSBnX3N0cmR1cCAoJnVyaVtmaW5kICsgMV0pOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHR5cGVmaW5kLCAiZm91bmQgZXh0ZW5zaW9uICVzIiwgcmVzdWx0KTsKKyAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7CisgIGdfZnJlZSAodXJpKTsKKworICByZXR1cm4gcmVzdWx0OworCisgIC8qIEVSUk9SUyAqLworcGVlcl9xdWVyeV9mYWlsZWQ6CisgIHsKKyAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHR5cGVmaW5kLCAiZmFpbGVkIHRvIHF1ZXJ5IHBlZXIgdXJpIik7CisgICAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KK25vX3VyaToKKyAgeworICAgIEdTVF9XQVJOSU5HX09CSkVDVCAodHlwZWZpbmQsICJjb3VsZCBub3QgcGFyc2UgdGhlIHBlZXIgdXJpIik7CisgICAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KK25vX2V4dGVuc2lvbjoKKyAgeworICAgIEdTVF9XQVJOSU5HX09CSkVDVCAodHlwZWZpbmQsICJjb3VsZCBub3QgZmluZCB1cmkgZXh0ZW5zaW9uIGluICVzIiwgdXJpKTsKKyAgICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKKyAgICBnX2ZyZWUgKHVyaSk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KK30KKworc3RhdGljIEdzdENhcHMgKgorZ3N0X3R5cGVfZmluZF9ndWVzc19ieV9leHRlbnNpb24gKEdzdFR5cGVGaW5kRWxlbWVudCAqIHR5cGVmaW5kLCBHc3RQYWQgKiBwYWQsCisgICAgR3N0VHlwZUZpbmRQcm9iYWJpbGl0eSAqIHByb2JhYmlsaXR5KQoreworICBnY2hhciAqZXh0OworICBHc3RDYXBzICpjYXBzOworCisgIGV4dCA9IGdzdF90eXBlX2ZpbmRfZ2V0X2V4dGVuc2lvbiAodHlwZWZpbmQsIHBhZCk7CisgIGlmICghZXh0KQorICAgIHJldHVybiBOVUxMOworCisgIGNhcHMgPSBnc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfZXh0ZW5zaW9uIChHU1RfT0JKRUNUX0NBU1QgKHR5cGVmaW5kKSwgZXh0KTsKKyAgaWYgKGNhcHMpCisgICAgKnByb2JhYmlsaXR5ID0gR1NUX1RZUEVfRklORF9NQVhJTVVNOworCisgIGdfZnJlZSAoZXh0KTsKKworICByZXR1cm4gY2FwczsKK30KKworc3RhdGljIEdzdEZsb3dSZXR1cm4KK2dzdF90eXBlX2ZpbmRfZWxlbWVudF9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RCdWZmZXIgKiBidWZmZXIpCit7CisgIEdzdFR5cGVGaW5kRWxlbWVudCAqdHlwZWZpbmQ7CisgIEdzdEZsb3dSZXR1cm4gcmVzID0gR1NUX0ZMT1dfT0s7CisKKyAgdHlwZWZpbmQgPSBHU1RfVFlQRV9GSU5EX0VMRU1FTlQgKEdTVF9QQURfUEFSRU5UIChwYWQpKTsKKworICBHU1RfTE9HX09CSkVDVCAodHlwZWZpbmQsICJoYW5kbGluZyBidWZmZXIgaW4gbW9kZSAlZCIsIHR5cGVmaW5kLT5tb2RlKTsKKworICBzd2l0Y2ggKHR5cGVmaW5kLT5tb2RlKSB7CisgICAgY2FzZSBNT0RFX0VSUk9SOgorICAgICAgLyogd2Ugc2hvdWxkIGFscmVhZHkgaGF2ZSBjYWxsZWQgR1NUX0VMRU1FTlRfRVJST1IgKi8KKyAgICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKKyAgICBjYXNlIE1PREVfTk9STUFMOgorICAgICAgLyogZG9uJ3QgdGFrZSBvYmplY3QgbG9jayBhcyB0eXBlZmluZC0+Y2FwcyBzaG91bGQgbm90IGNoYW5nZSBhbnltb3JlICovCisgICAgICByZXR1cm4gZ3N0X3BhZF9wdXNoICh0eXBlZmluZC0+c3JjLCBidWZmZXIpOworICAgIGNhc2UgTU9ERV9UWVBFRklORDoKKyAgICB7CisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHR5cGVmaW5kKTsKKyAgICAgIGdzdF9hZGFwdGVyX3B1c2ggKHR5cGVmaW5kLT5hZGFwdGVyLCBidWZmZXIpOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHR5cGVmaW5kKTsKKworICAgICAgcmVzID0gZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NoYWluX2RvX3R5cGVmaW5kaW5nICh0eXBlZmluZCwgVFJVRSk7CisKKyAgICAgIGlmICh0eXBlZmluZC0+bW9kZSA9PSBNT0RFX0VSUk9SKQorICAgICAgICByZXMgPSBHU1RfRkxPV19FUlJPUjsKKworICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKKyAgICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKKyAgfQorCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuCitnc3RfdHlwZV9maW5kX2VsZW1lbnRfY2hhaW5fZG9fdHlwZWZpbmRpbmcgKEdzdFR5cGVGaW5kRWxlbWVudCAqIHR5cGVmaW5kLAorICAgIGdib29sZWFuIGNoZWNrX2F2YWlsKQoreworICBHc3RUeXBlRmluZFByb2JhYmlsaXR5IHByb2JhYmlsaXR5OworICBHc3RDYXBzICpjYXBzOworICBnc2l6ZSBhdmFpbDsKKyAgY29uc3QgZ3VpbnQ4ICpkYXRhOworICBnYm9vbGVhbiBoYXZlX21pbiwgaGF2ZV9tYXg7CisKKyAgR1NUX09CSkVDVF9MT0NLICh0eXBlZmluZCk7CisgIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlICh0eXBlZmluZC0+YWRhcHRlcik7CisKKyAgaWYgKGNoZWNrX2F2YWlsKSB7CisgICAgaGF2ZV9taW4gPSBhdmFpbCA+PSBUWVBFX0ZJTkRfTUlOX1NJWkU7CisgICAgaGF2ZV9tYXggPSBhdmFpbCA+PSBUWVBFX0ZJTkRfTUFYX1NJWkU7CisgIH0gZWxzZSB7CisgICAgaGF2ZV9taW4gPSBUUlVFOworICAgIGhhdmVfbWF4ID0gVFJVRTsKKyAgfQorCisgIGlmICghaGF2ZV9taW4pCisgICAgZ290byBub3RfZW5vdWdoX2RhdGE7CisKKyAgLyogbWFwIGFsbCBhdmFpbGFibGUgZGF0YSAqLworICBkYXRhID0gZ3N0X2FkYXB0ZXJfbWFwICh0eXBlZmluZC0+YWRhcHRlciwgYXZhaWwpOworICBjYXBzID0gZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2RhdGEgKEdTVF9PQkpFQ1QgKHR5cGVmaW5kKSwKKyAgICAgIGRhdGEsIGF2YWlsLCAmcHJvYmFiaWxpdHkpOworICBnc3RfYWRhcHRlcl91bm1hcCAodHlwZWZpbmQtPmFkYXB0ZXIsIDApOworCisgIGlmIChjYXBzID09IE5VTEwgJiYgaGF2ZV9tYXgpCisgICAgZ290byBub190eXBlX2ZvdW5kOworICBlbHNlIGlmIChjYXBzID09IE5VTEwpCisgICAgZ290byB3YWl0X2Zvcl9kYXRhOworCisgIC8qIGZvdW5kIGEgdHlwZSAqLworICBpZiAocHJvYmFiaWxpdHkgPCB0eXBlZmluZC0+bWluX3Byb2JhYmlsaXR5KQorICAgIGdvdG8gbG93X3Byb2JhYmlsaXR5OworICBHU1RfT0JKRUNUX1VOTE9DSyAodHlwZWZpbmQpOworCisgIC8qIHByb2JhYmlsaXR5IGlzIGdvb2QgZW5vdWdoIHRvbywgc28gbGV0J3MgbWFrZSBpdCBrbm93biAuLi4gZW1pdGluZyB0aGlzCisgICAqIHNpZ25hbCBjYWxscyBvdXIgb2JqZWN0IGhhbmRsZXIgd2hpY2ggc2V0cyB0aGUgY2Fwcy4gKi8KKyAgZ19zaWduYWxfZW1pdCAodHlwZWZpbmQsIGdzdF90eXBlX2ZpbmRfZWxlbWVudF9zaWduYWxzW0hBVkVfVFlQRV0sIDAsCisgICAgICBwcm9iYWJpbGl0eSwgY2Fwcyk7CisKKyAgLyogLi4gYW5kIHNlbmQgb3V0IHRoZSBhY2N1bXVsYXRlZCBkYXRhICovCisgIHN0b3BfdHlwZWZpbmRpbmcgKHR5cGVmaW5kKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOworCisgIHJldHVybiBHU1RfRkxPV19PSzsKKworbm90X2Vub3VnaF9kYXRhOgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAodHlwZWZpbmQsICJub3QgZW5vdWdoIGRhdGEgZm9yIHR5cGVmaW5kaW5nIHlldCAiCisgICAgICAgICIoJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcykiLCBhdmFpbCk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHR5cGVmaW5kKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisgIH0KK25vX3R5cGVfZm91bmQ6CisgIHsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAodHlwZWZpbmQpOworICAgIEdTVF9FTEVNRU5UX0VSUk9SICh0eXBlZmluZCwgU1RSRUFNLCBUWVBFX05PVF9GT1VORCwgKE5VTEwpLCAoTlVMTCkpOworICAgIHN0b3BfdHlwZWZpbmRpbmcgKHR5cGVmaW5kKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7CisgIH0KK3dhaXRfZm9yX2RhdGE6CisgIHsKKyAgICBHU1RfREVCVUdfT0JKRUNUICh0eXBlZmluZCwKKyAgICAgICAgIm5vIGNhcHMgZm91bmQgd2l0aCAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIG9mIGRhdGEsICIKKyAgICAgICAgIndhaXRpbmcgZm9yIG1vcmUgZGF0YSIsIGF2YWlsKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAodHlwZWZpbmQpOworICAgIHJldHVybiBHU1RfRkxPV19PSzsKKyAgfQorbG93X3Byb2JhYmlsaXR5OgorICB7CisgICAgR1NUX0RFQlVHX09CSkVDVCAodHlwZWZpbmQsICJmb3VuZCBjYXBzICUiIEdTVF9QVFJfRk9STUFUICIsIGJ1dCAiCisgICAgICAgICJwcm9iYWJpbGl0eSBpcyAldSB3aGljaCBpcyBsb3dlciB0aGFuIHRoZSByZXF1aXJlZCBtaW5pbXVtIG9mICV1IiwKKyAgICAgICAgY2FwcywgcHJvYmFiaWxpdHksIHR5cGVmaW5kLT5taW5fcHJvYmFiaWxpdHkpOworCisgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOworCisgICAgaWYgKGhhdmVfbWF4KQorICAgICAgZ290byBub190eXBlX2ZvdW5kOworCisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHR5cGVmaW5kKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUICh0eXBlZmluZCwgIndhaXRpbmcgZm9yIG1vcmUgZGF0YSB0byB0cnkgYWdhaW4iKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisgIH0KK30KKworc3RhdGljIEdzdEZsb3dSZXR1cm4KK2dzdF90eXBlX2ZpbmRfZWxlbWVudF9nZXRyYW5nZSAoR3N0UGFkICogc3JjcGFkLAorICAgIGd1aW50NjQgb2Zmc2V0LCBndWludCBsZW5ndGgsIEdzdEJ1ZmZlciAqKiBidWZmZXIpCit7CisgIEdzdFR5cGVGaW5kRWxlbWVudCAqdHlwZWZpbmQ7CisgIEdzdEZsb3dSZXR1cm4gcmV0OworCisgIHR5cGVmaW5kID0gR1NUX1RZUEVfRklORF9FTEVNRU5UIChHU1RfUEFEX1BBUkVOVCAoc3JjcGFkKSk7CisKKyAgcmV0ID0gZ3N0X3BhZF9wdWxsX3JhbmdlICh0eXBlZmluZC0+c2luaywgb2Zmc2V0LCBsZW5ndGgsIGJ1ZmZlcik7CisKKyAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGdib29sZWFuCitnc3RfdHlwZV9maW5kX2VsZW1lbnRfYWN0aXZhdGVfc3JjX3B1bGwgKEdzdFBhZCAqIHBhZCwgZ2Jvb2xlYW4gYWN0aXZlKQoreworICBHc3RUeXBlRmluZEVsZW1lbnQgKnR5cGVmaW5kOworCisgIHR5cGVmaW5kID0gR1NUX1RZUEVfRklORF9FTEVNRU5UIChHU1RfT0JKRUNUX1BBUkVOVCAocGFkKSk7CisKKyAgcmV0dXJuIGdzdF9wYWRfYWN0aXZhdGVfcHVsbCAodHlwZWZpbmQtPnNpbmssIGFjdGl2ZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3R5cGVfZmluZF9lbGVtZW50X2FjdGl2YXRlIChHc3RQYWQgKiBwYWQpCit7CisgIEdzdFR5cGVGaW5kUHJvYmFiaWxpdHkgcHJvYmFiaWxpdHkgPSBHU1RfVFlQRV9GSU5EX05PTkU7CisgIEdzdENhcHMgKmZvdW5kX2NhcHMgPSBOVUxMOworICBHc3RUeXBlRmluZEVsZW1lbnQgKnR5cGVmaW5kOworICBHc3RRdWVyeSAqcXVlcnk7CisgIGdib29sZWFuIHB1bGxfbW9kZTsKKworICB0eXBlZmluZCA9IEdTVF9UWVBFX0ZJTkRfRUxFTUVOVCAoR1NUX09CSkVDVF9QQVJFTlQgKHBhZCkpOworCisgIC8qIGlmIHdlIGhhdmUgZm9yY2UgY2FwcywgdXNlIHRob3NlICovCisgIEdTVF9PQkpFQ1RfTE9DSyAodHlwZWZpbmQpOworICBpZiAodHlwZWZpbmQtPmZvcmNlX2NhcHMpIHsKKyAgICBmb3VuZF9jYXBzID0gZ3N0X2NhcHNfcmVmICh0eXBlZmluZC0+Zm9yY2VfY2Fwcyk7CisgICAgcHJvYmFiaWxpdHkgPSBHU1RfVFlQRV9GSU5EX01BWElNVU07CisgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHR5cGVmaW5kKTsKKyAgICBnb3RvIGRvbmU7CisgIH0KKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHR5cGVmaW5kKTsKKworICAvKiAxLiB0cnkgdG8gYWN0aXZhdGUgaW4gcHVsbCBtb2RlLiBpZiBub3QsIHN3aXRjaCB0byBwdXNoIGFuZCBzdWNjZWVkLgorICAgICAyLiB0cnkgdG8gcHVsbCB0eXBlIGZpbmQuCisgICAgIDMuIGRlYWN0aXZhdGUgcHVsbCBtb2RlLgorICAgICA0LiBzcmMgcGFkIG1pZ2h0IGhhdmUgYmVlbiBhY3RpdmF0ZWQgcHVzaCBieSB0aGUgc3RhdGUgY2hhbmdlLiBkZWFjdGl2YXRlLgorICAgICA1LiBpZiB3ZSBkaWRuJ3QgZmluZCBhbnkgY2FwcywgdHJ5IGdldHRpbmcgdGhlIHVyaSBleHRlbnNpb24gYnkgZG9pbmcgYW4gdXJpCisgICAgIHF1ZXJ5LgorICAgICA2LiBpZiB3ZSBkaWRuJ3QgZmluZCBhbnkgY2FwcywgZmFpbC4KKyAgICAgNy4gZW1pdCBoYXZlLXR5cGU7IG1heWJlIHRoZSBhcHAgY29ubmVjdGVkIHRoZSBzb3VyY2UgcGFkIHRvIHNvbWV0aGluZy4KKyAgICAgOC4gaWYgdGhlIHNpbmsgcGFkIGlzIGFjdGl2YXRlZCwgd2UgYXJlIGluIHB1bGwgbW9kZS4gc3VjY2VlZC4KKyAgICAgb3RoZXJ3aXNlIGFjdGl2YXRlIGJvdGggcGFkcyBpbiBwdXNoIG1vZGUgYW5kIHN1Y2NlZWQuCisgICAqLworCisgIC8qIDEgKi8KKyAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X3NjaGVkdWxpbmcgKCk7CisKKyAgaWYgKCFnc3RfcGFkX3BlZXJfcXVlcnkgKHBhZCwgcXVlcnkpKSB7CisgICAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7CisgICAgZ290byB0eXBlZmluZF9wdXNoOworICB9CisKKyAgZ3N0X3F1ZXJ5X3BhcnNlX3NjaGVkdWxpbmcgKHF1ZXJ5LCAmcHVsbF9tb2RlLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7CisKKyAgaWYgKCFwdWxsX21vZGUpCisgICAgZ290byB0eXBlZmluZF9wdXNoOworCisgIGlmICghZ3N0X3BhZF9hY3RpdmF0ZV9wdWxsIChwYWQsIFRSVUUpKQorICAgIGdvdG8gdHlwZWZpbmRfcHVzaDsKKworICAvKiAyICovCisgIEdTVF9ERUJVR19PQkpFQ1QgKHR5cGVmaW5kLCAiZmluZCB0eXBlIGluIHB1bGwgbW9kZSIpOworCisgIHsKKyAgICBHc3RQYWQgKnBlZXI7CisKKyAgICBwZWVyID0gZ3N0X3BhZF9nZXRfcGVlciAocGFkKTsKKyAgICBpZiAocGVlcikgeworICAgICAgZ2ludDY0IHNpemU7CisgICAgICBnY2hhciAqZXh0OworCisgICAgICBpZiAoIWdzdF9wYWRfcXVlcnlfZHVyYXRpb24gKHBlZXIsIEdTVF9GT1JNQVRfQllURVMsICZzaXplKSkgeworICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHR5cGVmaW5kLCAiQ291bGQgbm90IHF1ZXJ5IHVwc3RyZWFtIGxlbmd0aCEiKTsKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZiAocGVlcik7CisgICAgICAgIGdzdF9wYWRfYWN0aXZhdGVfcHVsbCAocGFkLCBGQUxTRSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgIH0KKworICAgICAgLyogdGhlIHNpemUgaWYgMCwgd2UgY2Fubm90IGNvbnRpbnVlICovCisgICAgICBpZiAoc2l6ZSA9PSAwKSB7CisgICAgICAgIC8qIGtlZXAgbWVzc2FnZSBpbiBzeW5jIHdpdGggbWVzc2FnZSBpbiBzaW5rIGV2ZW50IGhhbmRsZXIgKi8KKyAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHR5cGVmaW5kLCBTVFJFQU0sIFRZUEVfTk9UX0ZPVU5ELAorICAgICAgICAgICAgKF8oIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIpKSwgKCJDYW4ndCB0eXBlZmluZCBlbXB0eSBzdHJlYW0iKSk7CisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBlZXIpOworICAgICAgICBnc3RfcGFkX2FjdGl2YXRlX3B1bGwgKHBhZCwgRkFMU0UpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICB9CisgICAgICBleHQgPSBnc3RfdHlwZV9maW5kX2dldF9leHRlbnNpb24gKHR5cGVmaW5kLCBwYWQpOworCisgICAgICBmb3VuZF9jYXBzID0gZ3N0X3R5cGVfZmluZF9oZWxwZXJfZ2V0X3JhbmdlX2V4dCAoR1NUX09CSkVDVF9DQVNUIChwZWVyKSwKKyAgICAgICAgICAoR3N0VHlwZUZpbmRIZWxwZXJHZXRSYW5nZUZ1bmN0aW9uKSAoR1NUX1BBRF9HRVRSQU5HRUZVTkMgKHBlZXIpKSwKKyAgICAgICAgICAoZ3VpbnQ2NCkgc2l6ZSwgZXh0LCAmcHJvYmFiaWxpdHkpOworICAgICAgZ19mcmVlIChleHQpOworCisgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwZWVyKTsKKyAgICB9CisgIH0KKworICAvKiB0aGUgdHlwZSBmaW5kIGhlbHBlcnMgbWlnaHQgaGF2ZSB0cmlnZ2VyZWQgc2V0Y2FwcyBoZXJlIChkdWUgdG8gdXBzdHJlYW0pCisgICAqIHNldHRpbmcgY2FwcyBvbiBidWZmZXJzLCB3aGljaCBlbWl0cyB0eXBlZm91bmQgc2lnbmFsIGFuZCBhbiBlbGVtZW50CisgICAqIGNvdWxkIGhhdmUgYmVlbiBsaW5rZWQgYW5kIGhhdmUgaXRzIHBhZHMgYWN0aXZhdGVkCisgICAqCisgICAqIElmIHdlIGRlYWN0aXZhdGUgdGhlIHBhZHMgaW4gdGhlIGZvbGxvd2luZyBzdGVwcyB3ZSBtaWdodCBtZXNzIHVwCisgICAqIGRvd25zdHJlYW0gZWxlbWVudC4gV2Ugc2hvdWxkIHByZXZlbnQgdGhhdC4KKyAgICovCisgIGlmICh0eXBlZmluZC0+bW9kZSA9PSBNT0RFX05PUk1BTCkgeworICAgIC8qIHRoaXMgbWVhbnMgd2UgYWxyZWFkeSBlbWl0dGVkIHR5cGVmb3VuZCAqLworICAgIEdTVF9ERUJVRyAoIkFscmVhZHkgbWFuYWdlZCB0byB0eXBlZmluZCAhIik7CisgICAgZ290byByZWFsbHlfZG9uZTsKKyAgfQorCisgIC8qIDMgKi8KKyAgZ3N0X3BhZF9hY3RpdmF0ZV9wdWxsIChwYWQsIEZBTFNFKTsKKworICAvKiA0ICovCisgIGdzdF9wYWRfYWN0aXZhdGVfcHVzaCAodHlwZWZpbmQtPnNyYywgRkFMU0UpOworCisgIC8qIDUgKi8KKyAgaWYgKCFmb3VuZF9jYXBzIHx8IHByb2JhYmlsaXR5IDwgdHlwZWZpbmQtPm1pbl9wcm9iYWJpbGl0eSkgeworICAgIGZvdW5kX2NhcHMgPSBnc3RfdHlwZV9maW5kX2d1ZXNzX2J5X2V4dGVuc2lvbiAodHlwZWZpbmQsIHBhZCwgJnByb2JhYmlsaXR5KTsKKyAgfQorCisgIC8qIDYgKi8KKyAgaWYgKCFmb3VuZF9jYXBzIHx8IHByb2JhYmlsaXR5IDwgdHlwZWZpbmQtPm1pbl9wcm9iYWJpbGl0eSkgeworICAgIEdTVF9FTEVNRU5UX0VSUk9SICh0eXBlZmluZCwgU1RSRUFNLCBUWVBFX05PVF9GT1VORCwgKE5VTEwpLCAoTlVMTCkpOworICAgIGdzdF9jYXBzX3JlcGxhY2UgKCZmb3VuZF9jYXBzLCBOVUxMKTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKworZG9uZToKKyAgLyogNyAqLworICBnX3NpZ25hbF9lbWl0ICh0eXBlZmluZCwgZ3N0X3R5cGVfZmluZF9lbGVtZW50X3NpZ25hbHNbSEFWRV9UWVBFXSwKKyAgICAgIDAsIHByb2JhYmlsaXR5LCBmb3VuZF9jYXBzKTsKKyAgdHlwZWZpbmQtPm1vZGUgPSBNT0RFX05PUk1BTDsKK3JlYWxseV9kb25lOgorICBnc3RfY2Fwc191bnJlZiAoZm91bmRfY2Fwcyk7CisKKyAgLyogOCAqLworICBpZiAoZ3N0X3BhZF9pc19hY3RpdmUgKHBhZCkpCisgICAgcmV0dXJuIFRSVUU7CisgIGVsc2UgeworICAgIGdib29sZWFuIHJldDsKKworICAgIHJldCA9IGdzdF9wYWRfYWN0aXZhdGVfcHVzaCAodHlwZWZpbmQtPnNyYywgVFJVRSk7CisgICAgcmV0ICY9IGdzdF9wYWRfYWN0aXZhdGVfcHVzaCAocGFkLCBUUlVFKTsKKyAgICByZXR1cm4gcmV0OworICB9Cit0eXBlZmluZF9wdXNoOgorICB7CisgICAgc3RhcnRfdHlwZWZpbmRpbmcgKHR5cGVmaW5kKTsKKyAgICByZXR1cm4gZ3N0X3BhZF9hY3RpdmF0ZV9wdXNoIChwYWQsIFRSVUUpOworICB9Cit9CisKK3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgorZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCisgICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKK3sKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OworICBHc3RUeXBlRmluZEVsZW1lbnQgKnR5cGVmaW5kOworCisgIHR5cGVmaW5kID0gR1NUX1RZUEVfRklORF9FTEVNRU5UIChlbGVtZW50KTsKKworCisgIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOworCisgIHN3aXRjaCAodHJhbnNpdGlvbikgeworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEw6CisgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHR5cGVmaW5kKTsKKyAgICAgIGdzdF9jYXBzX3JlcGxhY2UgKCZ0eXBlZmluZC0+Y2FwcywgTlVMTCk7CisKKyAgICAgIGdfbGlzdF9mb3JlYWNoICh0eXBlZmluZC0+Y2FjaGVkX2V2ZW50cywKKyAgICAgICAgICAoR0Z1bmMpIGdzdF9taW5pX29iamVjdF91bnJlZiwgTlVMTCk7CisgICAgICBnX2xpc3RfZnJlZSAodHlwZWZpbmQtPmNhY2hlZF9ldmVudHMpOworICAgICAgdHlwZWZpbmQtPmNhY2hlZF9ldmVudHMgPSBOVUxMOworICAgICAgdHlwZWZpbmQtPm1vZGUgPSBNT0RFX1RZUEVGSU5EOworICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHR5cGVmaW5kKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5oIGIvcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzM0NzU4Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuaApAQCAtMCwwICsxLDc3IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwMyBCZW5qYW1pbiBPdHRlIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KKyAqCisgKiBnc3R0eXBlZmluZGVsZW1lbnQuaDogZWxlbWVudCB0aGF0IGRldGVjdHMgdHlwZSBvZiBzdHJlYW0KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKKyNpZm5kZWYgX19HU1RfVFlQRV9GSU5EX0VMRU1FTlRfSF9fCisjZGVmaW5lIF9fR1NUX1RZUEVfRklORF9FTEVNRU5UX0hfXworCisjaW5jbHVkZSA8Z3N0L2dzdGluZm8uaD4KKyNpbmNsdWRlIDxnc3QvZ3N0ZWxlbWVudC5oPgorI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGFkYXB0ZXIuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEdTVF9UWVBFX1RZUEVfRklORF9FTEVNRU5UCQkoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2dldF90eXBlICgpKQorI2RlZmluZSBHU1RfVFlQRV9GSU5EX0VMRU1FTlQob2JqKSAJCShHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX1RZUEVfRklORF9FTEVNRU5ULCBHc3RUeXBlRmluZEVsZW1lbnQpKQorI2RlZmluZSBHU1RfSVNfVFlQRV9GSU5EX0VMRU1FTlQob2JqKSAJCShHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX1RZUEVfRklORF9FTEVNRU5UKSkKKyNkZWZpbmUgR1NUX1RZUEVfRklORF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAJKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9UWVBFX0ZJTkRfRUxFTUVOVCwgR3N0VHlwZUZpbmRFbGVtZW50Q2xhc3MpKQorI2RlZmluZSBHU1RfSVNfVFlQRV9GSU5EX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIAkoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX1RZUEVfRklORF9FTEVNRU5UKSkKKyNkZWZpbmUgR1NUX1RZUEVfRklORF9FTEVNRU5UX0dFVF9DTEFTUyhvYmopIAkoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIEdTVF9UWVBFX1RZUEVfRklORF9FTEVNRU5ULCBHc3RUeXBlRmluZEVsZW1lbnRDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9Hc3RUeXBlRmluZEVsZW1lbnQgCQlHc3RUeXBlRmluZEVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfR3N0VHlwZUZpbmRFbGVtZW50Q2xhc3MgCUdzdFR5cGVGaW5kRWxlbWVudENsYXNzOworCisvKioKKyAqIEdzdFR5cGVGaW5kRWxlbWVudDoKKyAqCisgKiBPcGFxdWUgI0dzdFR5cGVGaW5kRWxlbWVudCBkYXRhIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgX0dzdFR5cGVGaW5kRWxlbWVudCB7CisgIEdzdEVsZW1lbnQJCWVsZW1lbnQ7CisKKyAgR3N0UGFkICoJCXNpbms7CisgIEdzdFBhZCAqCQlzcmM7CisKKyAgZ3VpbnQJCQltaW5fcHJvYmFiaWxpdHk7CisgIGd1aW50CQkJbWF4X3Byb2JhYmlsaXR5OworICBHc3RDYXBzICoJCWNhcHM7CisKKyAgZ3VpbnQJCQltb2RlOworICBHc3RBZGFwdGVyICoJCWFkYXB0ZXI7CisKKyAgR0xpc3QgKiAgICAgICAgICAgICAgIGNhY2hlZF9ldmVudHM7CisgIEdzdENhcHMgKiAgICAgICAgICAgICBmb3JjZV9jYXBzOworfTsKKworc3RydWN0IF9Hc3RUeXBlRmluZEVsZW1lbnRDbGFzcyB7CisgIEdzdEVsZW1lbnRDbGFzcyAJcGFyZW50X2NsYXNzOworCisgIC8qIHNpZ25hbHMgKi8KKyAgdm9pZCAJCQkoKmhhdmVfdHlwZSkgCShHc3RUeXBlRmluZEVsZW1lbnQgKmVsZW1lbnQsCisJCQkJCSBndWludAkJcHJvYmFiaWxpdHksCisJCQkJCSBjb25zdCBHc3RDYXBzICoJY2Fwcyk7Cit9OworCitHVHlwZSBnc3RfdHlwZV9maW5kX2VsZW1lbnRfZ2V0X3R5cGUgKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HU1RfVFlQRV9GSU5EX0VMRU1FTlRfSF9fICovCmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmMgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc3ZDUxZQotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuYwpAQCAtMCwwICsxLDIzMyBAQAorLyogR1N0cmVhbWVyIHZhbHZlIGVsZW1lbnQKKyAqICBDb3B5cmlnaHQgMjAwNy0yMDA5IENvbGxhYm9yYSBMdGQKKyAqICAgQGF1dGhvcjogT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+CisgKiAgQ29weXJpZ2h0IDIwMDctMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisvKioKKyAqIFNFQ1RJT046ZWxlbWVudC12YWx2ZQorICoKKyAqIFRoZSB2YWx2ZSBpcyBhIHNpbXBsZSBlbGVtZW50IHRoYXQgZHJvcHMgYnVmZmVycyB3aGVuIHRoZSAjR3N0VmFsdmU6ZHJvcAorICogcHJvcGVydHkgaXMgc2V0IHRvICVUUlVFIGFuZCBsZXRzIHRoZW4gdGhyb3VnaCBvdGhlcndpc2UuCisgKgorICogQW55IGRvd25zdHJlYW0gZXJyb3IgcmVjZWl2ZWQgd2hpbGUgdGhlICNHc3RWYWx2ZTpkcm9wIHByb3BlcnR5IGlzICVGQUxTRQorICogaXMgaWdub3JlZC4gU28gZG93bnN0cmVhbSBlbGVtZW50IGNhbiBiZSBzZXQgdG8gICVHU1RfU1RBVEVfTlVMTCBhbmQgcmVtb3ZlZCwKKyAqIHdpdGhvdXQgdXNpbmcgcGFkIGJsb2NraW5nLgorICoKKyAqIFRoaXMgZWxlbWVudCB3YXMgcHJldmlvdXNseSBwYXJ0IG9mIGdzdC1wbHVnaW5zLWZhcnNpZ2h0LCBhbmQgdGhlbgorICogZ3N0LXBsdWdpbnMtYmFkLgorICoKKyAqIERvY3VtZW50YXRpb24gbGFzdCByZXZpZXdlZCBvbiAyMDEwLTEyLTMwICgwLjEwLjMxKQorICoKKyAqIFNpbmNlOiAwLjEwLjMyCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAiZ3N0dmFsdmUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDICh2YWx2ZV9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAodmFsdmVfZGVidWcpCisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAorICAgIEdTVF9QQURfU0lOSywKKyAgICBHU1RfUEFEX0FMV0FZUywKKyAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKKworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAorICAgIEdTVF9QQURfU1JDLAorICAgIEdTVF9QQURfQUxXQVlTLAorICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOworCitlbnVtCit7CisgIFBST1BfMCwKKyAgUFJPUF9EUk9QCit9OworCisjZGVmaW5lIERFRkFVTFRfRFJPUCBGQUxTRQorCitzdGF0aWMgdm9pZCBnc3RfdmFsdmVfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAorICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOworc3RhdGljIHZvaWQgZ3N0X3ZhbHZlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKKyAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKKworc3RhdGljIGdib29sZWFuIGdzdF92YWx2ZV9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KTsKK3N0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF92YWx2ZV9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RCdWZmZXIgKiBidWZmZXIpOworc3RhdGljIEdzdENhcHMgKmdzdF92YWx2ZV9nZXRjYXBzIChHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBmaWx0ZXIpOworCisjZGVmaW5lIF9kb19pbml0IFwKKyAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHZhbHZlX2RlYnVnLCAidmFsdmUiLCAwLCAiVmFsdmUiKTsKKyNkZWZpbmUgZ3N0X3ZhbHZlX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RWYWx2ZSwgZ3N0X3ZhbHZlLCBHU1RfVFlQRV9FTEVNRU5ULCBfZG9faW5pdCk7CisKK3N0YXRpYyB2b2lkCitnc3RfdmFsdmVfY2xhc3NfaW5pdCAoR3N0VmFsdmVDbGFzcyAqIGtsYXNzKQoreworICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7CisgIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKKworICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKKyAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikgKGtsYXNzKTsKKworICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfdmFsdmVfc2V0X3Byb3BlcnR5OworICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfdmFsdmVfZ2V0X3Byb3BlcnR5OworCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRFJPUCwKKyAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiZHJvcCIsICJEcm9wIGJ1ZmZlcnMgYW5kIGV2ZW50cyIsCisgICAgICAgICAgIldoZXRoZXIgdG8gZHJvcCBidWZmZXJzIGFuZCBldmVudHMgb3IgbGV0IHRoZW0gdGhyb3VnaCIsCisgICAgICAgICAgREVGQVVMVF9EUk9QLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKKworICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAorICAgICAgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0ICgmc3JjdGVtcGxhdGUpKTsKKyAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKKyAgICAgIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoJnNpbmt0ZW1wbGF0ZSkpOworCisgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZSAoZ3N0ZWxlbWVudF9jbGFzcywgIlZhbHZlIGVsZW1lbnQiLAorICAgICAgIkZpbHRlciIsICJEcm9wcyBidWZmZXJzIGFuZCBldmVudHMgb3IgbGV0cyB0aGVtIHRocm91Z2giLAorICAgICAgIk9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPiIpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3ZhbHZlX2luaXQgKEdzdFZhbHZlICogdmFsdmUpCit7CisgIHZhbHZlLT5kcm9wID0gRkFMU0U7CisgIHZhbHZlLT5kaXNjb250ID0gRkFMU0U7CisKKyAgdmFsdmUtPnNyY3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc3JjdGVtcGxhdGUsICJzcmMiKTsKKyAgZ3N0X3BhZF9zZXRfZ2V0Y2Fwc19mdW5jdGlvbiAodmFsdmUtPnNyY3BhZCwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdmFsdmVfZ2V0Y2FwcykpOworICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAodmFsdmUpLCB2YWx2ZS0+c3JjcGFkKTsKKworICB2YWx2ZS0+c2lua3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc2lua3RlbXBsYXRlLCAic2luayIpOworICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAodmFsdmUtPnNpbmtwYWQsCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3ZhbHZlX2NoYWluKSk7CisgIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uICh2YWx2ZS0+c2lua3BhZCwKKyAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdmFsdmVfZXZlbnQpKTsKKyAgZ3N0X3BhZF9zZXRfZ2V0Y2Fwc19mdW5jdGlvbiAodmFsdmUtPnNpbmtwYWQsCisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3ZhbHZlX2dldGNhcHMpKTsKKyAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKHZhbHZlKSwgdmFsdmUtPnNpbmtwYWQpOworfQorCisKK3N0YXRpYyB2b2lkCitnc3RfdmFsdmVfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAorICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIEdzdFZhbHZlICp2YWx2ZSA9IEdTVF9WQUxWRSAob2JqZWN0KTsKKworICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfRFJPUDoKKyAgICAgIGdfYXRvbWljX2ludF9zZXQgKCZ2YWx2ZS0+ZHJvcCwgZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF92YWx2ZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCisgICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgR3N0VmFsdmUgKnZhbHZlID0gR1NUX1ZBTFZFIChvYmplY3QpOworCisgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9EUk9QOgorICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGdfYXRvbWljX2ludF9nZXQgKCZ2YWx2ZS0+ZHJvcCkpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICBicmVhazsKKyAgfQorfQorCitzdGF0aWMgR3N0Rmxvd1JldHVybgorZ3N0X3ZhbHZlX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKK3sKKyAgR3N0VmFsdmUgKnZhbHZlID0gR1NUX1ZBTFZFIChHU1RfT0JKRUNUX1BBUkVOVCAocGFkKSk7CisgIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7CisKKyAgaWYgKGdfYXRvbWljX2ludF9nZXQgKCZ2YWx2ZS0+ZHJvcCkpIHsKKyAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworICAgIHZhbHZlLT5kaXNjb250ID0gVFJVRTsKKyAgfSBlbHNlIHsKKyAgICBpZiAodmFsdmUtPmRpc2NvbnQpIHsKKyAgICAgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAoYnVmZmVyKTsKKyAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKGJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpOworICAgICAgdmFsdmUtPmRpc2NvbnQgPSBGQUxTRTsKKyAgICB9CisKKyAgICByZXQgPSBnc3RfcGFkX3B1c2ggKHZhbHZlLT5zcmNwYWQsIGJ1ZmZlcik7CisgIH0KKworCisgIC8qIElnbm9yZSBlcnJvcnMgaWYgImRyb3AiIHdhcyBjaGFuZ2VkIHdoaWxlIHRoZSB0aHJlYWQgd2FzIGJsb2NrZWQKKyAgICogZG93bndhcmRzCisgICAqLworICBpZiAoZ19hdG9taWNfaW50X2dldCAoJnZhbHZlLT5kcm9wKSkKKyAgICByZXQgPSBHU1RfRkxPV19PSzsKKworICByZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3ZhbHZlX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpCit7CisgIEdzdFZhbHZlICp2YWx2ZSA9IEdTVF9WQUxWRSAoZ3N0X3BhZF9nZXRfcGFyZW50X2VsZW1lbnQgKHBhZCkpOworICBnYm9vbGVhbiByZXQgPSBUUlVFOworCisgIGlmIChnX2F0b21pY19pbnRfZ2V0ICgmdmFsdmUtPmRyb3ApKQorICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworICBlbHNlCisgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50ICh2YWx2ZS0+c3JjcGFkLCBldmVudCk7CisKKyAgLyogSWdub3JlIGVycm9ycyBpZiAiZHJvcCIgd2FzIGNoYW5nZWQgd2hpbGUgdGhlIHRocmVhZCB3YXMgYmxvY2tlZAorICAgKiBkb3dud2FyZHMuCisgICAqLworICBpZiAoZ19hdG9taWNfaW50X2dldCAoJnZhbHZlLT5kcm9wKSkKKyAgICByZXQgPSBUUlVFOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHZhbHZlKTsKKyAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIEdzdENhcHMgKgorZ3N0X3ZhbHZlX2dldGNhcHMgKEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGZpbHRlcikKK3sKKyAgR3N0VmFsdmUgKnZhbHZlID0gR1NUX1ZBTFZFIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOworICBHc3RDYXBzICpjYXBzOworCisgIGlmIChwYWQgPT0gdmFsdmUtPnNpbmtwYWQpCisgICAgY2FwcyA9IGdzdF9wYWRfcGVlcl9nZXRfY2FwcyAodmFsdmUtPnNyY3BhZCwgZmlsdGVyKTsKKyAgZWxzZQorICAgIGNhcHMgPSBnc3RfcGFkX3BlZXJfZ2V0X2NhcHMgKHZhbHZlLT5zaW5rcGFkLCBmaWx0ZXIpOworCisgIGlmIChjYXBzID09IE5VTEwpCisgICAgY2FwcyA9IChmaWx0ZXIgPyBnc3RfY2Fwc19yZWYgKGZpbHRlcikgOiBnc3RfY2Fwc19uZXdfYW55ICgpKTsKKworICBnc3Rfb2JqZWN0X3VucmVmICh2YWx2ZSk7CisKKyAgcmV0dXJuIGNhcHM7Cit9CmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmggYi9wbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU2NzU3YwotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuaApAQCAtMCwwICsxLDc4IEBACisvKiBHU3RyZWFtZXIgdmFsdmUgZWxlbWVudAorICoKKyAqICBDb3B5cmlnaHQgMjAwNyBDb2xsYWJvcmEgTHRkLCAKKyAqICBDb3B5cmlnaHQgMjAwNyBOb2tpYSBDb3Jwb3JhdGlvbgorICogICBAYXV0aG9yOiBPbGl2aWVyIENyZXRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0dTVF9WQUxWRV9IX18KKyNkZWZpbmUgX19HU1RfVkFMVkVfSF9fCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKK0dfQkVHSU5fREVDTFMKKy8qICNkZWZpbmUncyBkb24ndCBsaWtlIHdoaXRlc3BhY2V5IGJpdHMgKi8KKyNkZWZpbmUgR1NUX1RZUEVfVkFMVkUgXAorICAoZ3N0X3ZhbHZlX2dldF90eXBlKCkpCisjZGVmaW5lIEdTVF9WQUxWRShvYmopIFwKKyAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBcCisgIEdTVF9UWVBFX1ZBTFZFLEdzdFZhbHZlKSkKKyNkZWZpbmUgR1NUX1ZBTFZFX0NMQVNTKGtsYXNzKSBcCisgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBcCisgIEdTVF9UWVBFX1ZBTFZFLEdzdFZhbHZlQ2xhc3MpKQorI2RlZmluZSBHU1RfSVNfVkFMVkUob2JqKSBcCisgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9WQUxWRSkpCisjZGVmaW5lIEdTVF9JU19WQUxWRV9DTEFTUyhvYmopIFwKKyAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfVkFMVkUpKQorCit0eXBlZGVmIHN0cnVjdCBfR3N0VmFsdmUgR3N0VmFsdmU7Cit0eXBlZGVmIHN0cnVjdCBfR3N0VmFsdmVDbGFzcyBHc3RWYWx2ZUNsYXNzOworCisvKioKKyAqIEdzdFZhbHZlOgorICoKKyAqIFRoZSBwcml2YXRlIHZhbHZlIHN0cnVjdHVyZQorICoKKyAqIFNpbmNlOiAwLjEwLjMyCisgKi8KK3N0cnVjdCBfR3N0VmFsdmUKK3sKKyAgLyo8IHByaXZhdGUgPiovCisgIEdzdEVsZW1lbnQgcGFyZW50OworCisgIC8qIGF0b21pYyBib29sZWFuICovCisgIHZvbGF0aWxlIGdpbnQgZHJvcDsKKworICAvKiBQcm90ZWN0ZWQgYnkgdGhlIHN0cmVhbSBsb2NrICovCisgIGdib29sZWFuIGRpc2NvbnQ7CisKKyAgR3N0UGFkICpzcmNwYWQ7CisgIEdzdFBhZCAqc2lua3BhZDsKK307CisKK3N0cnVjdCBfR3N0VmFsdmVDbGFzcworeworICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworR1R5cGUgZ3N0X3ZhbHZlX2dldF90eXBlICh2b2lkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fR1NUX1ZBTFZFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9pbmRleGVycy9NYWtlZmlsZS5hbSBiL3BsdWdpbnMvaW5kZXhlcnMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY2MTVkZAotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvaW5kZXhlcnMvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwzMCBAQAorcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0Y29yZWluZGV4ZXJzLmxhCisKKyMgRklYTUUgMC4xMTogZ3N0ZmlsZWluZGV4LmMgdXNlZCBsaWJ4bWwgYW5kIG1tYXAsIHJld3JpdGUgdXNpbmcgc29tZXRoaW5nIGVsc2Ugb3IgcmVtb3ZlCisKK25vaW5zdF9IRUFERVJTID0JCVwKKwlnc3RpbmRleGVycy5oCisKK2xpYmdzdGNvcmVpbmRleGVyc19sYV9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvZ3N0L2xpYmdzdHJlYW1lci1AR1NUX01BSk9STUlOT1JALmxhCitsaWJnc3Rjb3JlaW5kZXhlcnNfbGFfU09VUkNFUyA9IGdzdGluZGV4ZXJzLmMgZ3N0bWVtaW5kZXguYworbGliZ3N0Y29yZWluZGV4ZXJzX2xhX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCitsaWJnc3Rjb3JlaW5kZXhlcnNfbGFfTElCQUREID0gJChHU1RfT0JKX0xJQlMpICQoR1NUX0ZJTEVJTkRFWF9MSUJTKQorbGliZ3N0Y29yZWluZGV4ZXJzX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKK2xpYmdzdGNvcmVpbmRleGVyc19sYV9MSUJUT09MRkxBR1MgPSAtLXRhZz1kaXNhYmxlLXN0YXRpYworCislLmMuZ2NvdjogLmxpYnMvbGliZ3N0Y29yZWluZGV4ZXJzX2xhLSUuZ2NkYSAlLmMKKwkkKEdDT1YpIC1iIC1mIC1vICReID4gJEAub3V0CisKK2djb3Y6ICQobGliZ3N0Y29yZWluZGV4ZXJzX2xhX1NPVVJDRVM6PS5nY292KQorCitBbmRyb2lkLm1rOiBNYWtlZmlsZS5hbQorCWFuZHJvZ2VuaXplciAtOlBST0pFQ1QgZ3N0cmVhbWVyIC06U0hBUkVEIGxpYmdzdGNvcmVpbmRleGVycyAtOlRBR1MgZW5nIGRlYnVnIFwKKwkgLTpSRUxfVE9QICQodG9wX3NyY2RpcikgLTpBQlNfVE9QICQoYWJzX3RvcF9zcmNkaXIpIFwKKwkgLTpTT1VSQ0VTICQobGliZ3N0Y29yZWluZGV4ZXJzX2xhX1NPVVJDRVMpIFwKKwkgLTpDRkxBR1MgJChERUZTKSAkKGxpYmdzdGNvcmVpbmRleGVyc19sYV9DRkxBR1MpIFwKKwkgLTpMREZMQUdTICQobGliZ3N0Y29yZWluZGV4ZXJzX2xhX0xERkxBR1MpIFwKKwkgICAgICAgICAgICQobGliZ3N0Y29yZWluZGV4ZXJzX2xhX0xJQkFERCkgXAorCSAtOlBBU1NUSFJPVUdIIExPQ0FMX0FSTV9NT0RFOj1hcm0gXAorCSAgICAgICAgICAgICAgIExPQ0FMX01PRFVMRV9QQVRIOj0kJFwoVEFSR0VUX09VVFwpL2xpYi9nc3RyZWFtZXItQEdTVF9NQUpPUk1JTk9SQCBcCisJPiAkQAorCmRpZmYgLS1naXQgYS9wbHVnaW5zL2luZGV4ZXJzL01ha2VmaWxlLmluIGIvcGx1Z2lucy9pbmRleGVycy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTZiMjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9pbmRleGVycy9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDc2NSBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4xIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSBwbHVnaW5zL2luZGV4ZXJzCitESVNUX0NPTU1PTiA9ICQobm9pbnN0X0hFQURFUlMpICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCisJJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtcHl0aG9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1zY3J1Yi1pbmNsdWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZnVuY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYXJzZXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2ludHJvc3BlY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jaGVjay1jaGVja3MubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ljb252Lm00ICQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00ICQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L25scy5tNCAkKHRvcF9zcmNkaXIpL200L3BvLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxfbWF4ID0gNDAKK2FtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCisgIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKK2FtX19ub2Jhc2Vfc3RyaXAgPSBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgorYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCisgICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAorICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAorICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKK2FtX19iYXNlX2xpc3QgPSBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKK2FtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwbHVnaW5kaXIpIgorTFRMSUJSQVJJRVMgPSAkKHBsdWdpbl9MVExJQlJBUklFUykKK2FtX19ERVBFTkRFTkNJRVNfMSA9CithbV9saWJnc3Rjb3JlaW5kZXhlcnNfbGFfT0JKRUNUUyA9ICBcCisJbGliZ3N0Y29yZWluZGV4ZXJzX2xhLWdzdGluZGV4ZXJzLmxvIFwKKwlsaWJnc3Rjb3JlaW5kZXhlcnNfbGEtZ3N0bWVtaW5kZXgubG8KK2xpYmdzdGNvcmVpbmRleGVyc19sYV9PQkpFQ1RTID0gJChhbV9saWJnc3Rjb3JlaW5kZXhlcnNfbGFfT0JKRUNUUykKK0FNX1ZfbHQgPSAkKGFtX192X2x0XyQoVikpCithbV9fdl9sdF8gPSAkKGFtX192X2x0XyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfbHRfMCA9IC0tc2lsZW50CitsaWJnc3Rjb3JlaW5kZXhlcnNfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCisJJChsaWJnc3Rjb3JlaW5kZXhlcnNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1saW5rICQoQ0NMRCkgJChsaWJnc3Rjb3JlaW5kZXhlcnNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQobGliZ3N0Y29yZWluZGV4ZXJzX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKwkkKEFNX0NGTEFHUykgJChDRkxBR1MpCitBTV9WX0NDID0gJChhbV9fdl9DQ18kKFYpKQorYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ18kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAiICRAOworQU1fVl9hdCA9ICQoYW1fX3ZfYXRfJChWKSkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9hdF8wID0gQAorQ0NMRCA9ICQoQ0MpCitMSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitBTV9WX0NDTEQgPSAkKGFtX192X0NDTERfJChWKSkKK2FtX192X0NDTERfID0gJChhbV9fdl9DQ0xEXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgIiAkQDsKK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fJChWKSkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgIiAkQDsKK1NPVVJDRVMgPSAkKGxpYmdzdGNvcmVpbmRleGVyc19sYV9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChsaWJnc3Rjb3JlaW5kZXhlcnNfbGFfU09VUkNFUykKK0hFQURFUlMgPSAkKG5vaW5zdF9IRUFERVJTKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBUyA9IEBBU0AKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAorQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAorQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKK0NDID0gQENDQAorQ0NBUyA9IEBDQ0FTQAorQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACitDQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDSEVDS19NQUpPUl9WRVJTSU9OID0gQENIRUNLX01BSk9SX1ZFUlNJT05ACitDSEVDS19NSUNST19WRVJTSU9OID0gQENIRUNLX01JQ1JPX1ZFUlNJT05ACitDSEVDS19NSU5PUl9WRVJTSU9OID0gQENIRUNLX01JTk9SX1ZFUlNJT05ACitDSEVDS19WRVJTSU9OID0gQENIRUNLX1ZFUlNJT05ACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEFESVIgPSBAREFUQURJUkAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRU5BQkxFX1NVQlVOSVQgPSBARU5BQkxFX1NVQlVOSVRACitFUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZGTEFHUyA9IEBGRkxBR1NACitGR1JFUCA9IEBGR1JFUEAKK0ZMRVhfUEFUSCA9IEBGTEVYX1BBVEhACitHQ09WID0gQEdDT1ZACitHQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKK0dDT1ZfTElCUyA9IEBHQ09WX0xJQlNACitHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAorR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKK0dMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAorR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKK0dMSUJfT05MWV9DRkxBR1MgPSBAR0xJQl9PTkxZX0NGTEFHU0AKK0dMSUJfT05MWV9MSUJTID0gQEdMSUJfT05MWV9MSUJTQAorR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACitHTElCX1JFUSA9IEBHTElCX1JFUUAKK0dNUF9MSUJTID0gQEdNUF9MSUJTQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHUkVQID0gQEdSRVBACitHU0xfTElCUyA9IEBHU0xfTElCU0AKK0dTVF9BR0UgPSBAR1NUX0FHRUAKK0dTVF9BTExfQ0ZMQUdTID0gQEdTVF9BTExfQ0ZMQUdTQAorR1NUX0FMTF9DWFhGTEFHUyA9IEBHU1RfQUxMX0NYWEZMQUdTQAorR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKK0dTVF9BTExfTElCUyA9IEBHU1RfQUxMX0xJQlNACitHU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKK0dTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9ERUZJTkVACitHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkVACitHU1RfRElTQUJMRV9ORVRfREVGSU5FID0gQEdTVF9ESVNBQkxFX05FVF9ERUZJTkVACitHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAorR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKK0dTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKK0dTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACitHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfVFJBQ0VfREVGSU5FQAorR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAorR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAorR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTU19ERUZJTkUgPSBAR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTU19ERUZJTkVACitHU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKK0dTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAorR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKK0dTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAorR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACitHU1RfTUFKT1JNSU5PUiA9IEBHU1RfTUFKT1JNSU5PUkAKK0dTVF9PQkpfQ0ZMQUdTID0gQEdTVF9PQkpfQ0ZMQUdTQAorR1NUX09CSl9DWFhGTEFHUyA9IEBHU1RfT0JKX0NYWEZMQUdTQAorR1NUX09CSl9MSUJTID0gQEdTVF9PQkpfTElCU0AKK0dTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAorR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAorR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAorR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKK0dTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKK0dTVF9QS0dfREVQUyA9IEBHU1RfUEtHX0RFUFNACitHU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAorR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAorR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1BPSU5URVJfRk9STUFUX0RFRklORUAKK0dTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORSA9IEBHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkVACitHU1RfUkVHSVNUUllfRE9DX1RZUEVTID0gQEdTVF9SRUdJU1RSWV9ET0NfVFlQRVNACitHU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAorR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FID0gQEdTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OX0RFRklORUAKK0dUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACitIQVZFX0RPQ0JPT0sySFRNTCA9IEBIQVZFX0RPQ0JPT0sySFRNTEAKK0hBVkVfRE9DQk9PSzJQUyA9IEBIQVZFX0RPQ0JPT0syUFNACitIQVZFX0RWSVBTID0gQEhBVkVfRFZJUFNACitIQVZFX0VQU1RPUERGID0gQEhBVkVfRVBTVE9QREZACitIQVZFX0ZJRzJERVYgPSBASEFWRV9GSUcyREVWQAorSEFWRV9HTVAgPSBASEFWRV9HTVBACitIQVZFX0dTTCA9IEBIQVZFX0dTTEAKK0hBVkVfSkFERVRFWCA9IEBIQVZFX0pBREVURVhACitIQVZFX1BOR1RPUE5NID0gQEhBVkVfUE5HVE9QTk1ACitIQVZFX1BOTVRPUFMgPSBASEFWRV9QTk1UT1BTQAorSEFWRV9QUzJQREYgPSBASEFWRV9QUzJQREZACitIQVZFX1hNTExJTlQgPSBASEFWRV9YTUxMSU5UQAorSE9TVF9DUFUgPSBASE9TVF9DUFVACitIVE1MX0RJUiA9IEBIVE1MX0RJUkAKK0lORVRfQVRPTl9MSUJTID0gQElORVRfQVRPTl9MSUJTQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAorSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAorSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAorSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACitJTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAorSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAorSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkRJUiA9IEBMSUJESVJACitMSUJJQ09OViA9IEBMSUJJQ09OVkAKK0xJQklOVEwgPSBATElCSU5UTEAKK0xJQk0gPSBATElCTUAKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xPQ0FMRURJUiA9IEBMT0NBTEVESVJACitMVExJQklDT05WID0gQExUTElCSUNPTlZACitMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BSU5UID0gQE1BSU5UQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAorUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKK1BBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACitQQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKK1BBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMX1BBVEggPSBAUEVSTF9QQVRIQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUExVR0lORElSID0gQFBMVUdJTkRJUkAKK1BPU1VCID0gQFBPU1VCQAorUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACitQWVRIT04gPSBAUFlUSE9OQAorUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKK1BZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACitQWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACitQWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKK1ZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKK1ZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1dBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAorV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAorWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKK1hTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK2x0X0VDSE8gPSBAbHRfRUNIT0AKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKK3BrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACitwbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKK3B5dGhvbmRpciA9IEBweXRob25kaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK3BsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdGNvcmVpbmRleGVycy5sYQorCisjIEZJWE1FIDAuMTE6IGdzdGZpbGVpbmRleC5jIHVzZWQgbGlieG1sIGFuZCBtbWFwLCByZXdyaXRlIHVzaW5nIHNvbWV0aGluZyBlbHNlIG9yIHJlbW92ZQorbm9pbnN0X0hFQURFUlMgPSBcCisJZ3N0aW5kZXhlcnMuaAorCitsaWJnc3Rjb3JlaW5kZXhlcnNfbGFfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2dzdC9saWJnc3RyZWFtZXItQEdTVF9NQUpPUk1JTk9SQC5sYQorbGliZ3N0Y29yZWluZGV4ZXJzX2xhX1NPVVJDRVMgPSBnc3RpbmRleGVycy5jIGdzdG1lbWluZGV4LmMKK2xpYmdzdGNvcmVpbmRleGVyc19sYV9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQorbGliZ3N0Y29yZWluZGV4ZXJzX2xhX0xJQkFERCA9ICQoR1NUX09CSl9MSUJTKSAkKEdTVF9GSUxFSU5ERVhfTElCUykKK2xpYmdzdGNvcmVpbmRleGVyc19sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCitsaWJnc3Rjb3JlaW5kZXhlcnNfbGFfTElCVE9PTEZMQUdTID0gLS10YWc9ZGlzYWJsZS1zdGF0aWMKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IHBsdWdpbnMvaW5kZXhlcnMvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbnUgcGx1Z2lucy9pbmRleGVycy9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKK2luc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQocGx1Z2luZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQocGx1Z2luZGlyKSIKKwlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAorCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCisJICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKKwkgIGVsc2UgOjsgZmk7IFwKKwlkb25lOyBcCisJdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAorCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBcCisJfQorCit1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgJChhbV9fc3RyaXBfZGlyKSBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmJyI7IFwKKwkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiI7IFwKKwlkb25lCisKK2NsZWFuLXBsdWdpbkxUTElCUkFSSUVTOgorCS10ZXN0IC16ICIkKHBsdWdpbl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQocGx1Z2luX0xUTElCUkFSSUVTKQorCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGRpcj0iYGVjaG8gJCRwIHwgc2VkIC1lICdzfC9bXi9dKiQkfHwnYCI7IFwKKwkgIHRlc3QgIiQkZGlyIiAhPSAiJCRwIiB8fCBkaXI9LjsgXAorCSAgZWNobyAicm0gLWYgXCIkJHtkaXJ9L3NvX2xvY2F0aW9uc1wiIjsgXAorCSAgcm0gLWYgIiQke2Rpcn0vc29fbG9jYXRpb25zIjsgXAorCWRvbmUKK2xpYmdzdGNvcmVpbmRleGVycy5sYTogJChsaWJnc3Rjb3JlaW5kZXhlcnNfbGFfT0JKRUNUUykgJChsaWJnc3Rjb3JlaW5kZXhlcnNfbGFfREVQRU5ERU5DSUVTKSAKKwkkKEFNX1ZfQ0NMRCkkKGxpYmdzdGNvcmVpbmRleGVyc19sYV9MSU5LKSAtcnBhdGggJChwbHVnaW5kaXIpICQobGliZ3N0Y29yZWluZGV4ZXJzX2xhX09CSkVDVFMpICQobGliZ3N0Y29yZWluZGV4ZXJzX2xhX0xJQkFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Y29yZWluZGV4ZXJzX2xhLWdzdGluZGV4ZXJzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Y29yZWluZGV4ZXJzX2xhLWdzdG1lbWluZGV4LlBsb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCitsaWJnc3Rjb3JlaW5kZXhlcnNfbGEtZ3N0aW5kZXhlcnMubG86IGdzdGluZGV4ZXJzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JlaW5kZXhlcnNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZWluZGV4ZXJzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rjb3JlaW5kZXhlcnNfbGEtZ3N0aW5kZXhlcnMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGNvcmVpbmRleGVyc19sYS1nc3RpbmRleGVycy5UcG8gLWMgLW8gbGliZ3N0Y29yZWluZGV4ZXJzX2xhLWdzdGluZGV4ZXJzLmxvIGB0ZXN0IC1mICdnc3RpbmRleGVycy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RpbmRleGVycy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rjb3JlaW5kZXhlcnNfbGEtZ3N0aW5kZXhlcnMuVHBvICQoREVQRElSKS9saWJnc3Rjb3JlaW5kZXhlcnNfbGEtZ3N0aW5kZXhlcnMuUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0aW5kZXhlcnMuYycgb2JqZWN0PSdsaWJnc3Rjb3JlaW5kZXhlcnNfbGEtZ3N0aW5kZXhlcnMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JlaW5kZXhlcnNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZWluZGV4ZXJzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGNvcmVpbmRleGVyc19sYS1nc3RpbmRleGVycy5sbyBgdGVzdCAtZiAnZ3N0aW5kZXhlcnMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0aW5kZXhlcnMuYworCitsaWJnc3Rjb3JlaW5kZXhlcnNfbGEtZ3N0bWVtaW5kZXgubG86IGdzdG1lbWluZGV4LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JlaW5kZXhlcnNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZWluZGV4ZXJzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rjb3JlaW5kZXhlcnNfbGEtZ3N0bWVtaW5kZXgubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGNvcmVpbmRleGVyc19sYS1nc3RtZW1pbmRleC5UcG8gLWMgLW8gbGliZ3N0Y29yZWluZGV4ZXJzX2xhLWdzdG1lbWluZGV4LmxvIGB0ZXN0IC1mICdnc3RtZW1pbmRleC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RtZW1pbmRleC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rjb3JlaW5kZXhlcnNfbGEtZ3N0bWVtaW5kZXguVHBvICQoREVQRElSKS9saWJnc3Rjb3JlaW5kZXhlcnNfbGEtZ3N0bWVtaW5kZXguUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0bWVtaW5kZXguYycgb2JqZWN0PSdsaWJnc3Rjb3JlaW5kZXhlcnNfbGEtZ3N0bWVtaW5kZXgubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JlaW5kZXhlcnNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZWluZGV4ZXJzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGNvcmVpbmRleGVyc19sYS1nc3RtZW1pbmRleC5sbyBgdGVzdCAtZiAnZ3N0bWVtaW5kZXguYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0bWVtaW5kZXguYworCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKEhFQURFUlMpCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBcCisJbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgY3RhZ3MgZGlzdGNsZWFuIFwKKwlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCisJaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgXAorCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCisJaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKKwltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisJdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUworCisKKyUuYy5nY292OiAubGlicy9saWJnc3Rjb3JlaW5kZXhlcnNfbGEtJS5nY2RhICUuYworCSQoR0NPVikgLWIgLWYgLW8gJF4gPiAkQC5vdXQKKworZ2NvdjogJChsaWJnc3Rjb3JlaW5kZXhlcnNfbGFfU09VUkNFUzo9Lmdjb3YpCisKK0FuZHJvaWQubWs6IE1ha2VmaWxlLmFtCisJYW5kcm9nZW5pemVyIC06UFJPSkVDVCBnc3RyZWFtZXIgLTpTSEFSRUQgbGliZ3N0Y29yZWluZGV4ZXJzIC06VEFHUyBlbmcgZGVidWcgXAorCSAtOlJFTF9UT1AgJCh0b3Bfc3JjZGlyKSAtOkFCU19UT1AgJChhYnNfdG9wX3NyY2RpcikgXAorCSAtOlNPVVJDRVMgJChsaWJnc3Rjb3JlaW5kZXhlcnNfbGFfU09VUkNFUykgXAorCSAtOkNGTEFHUyAkKERFRlMpICQobGliZ3N0Y29yZWluZGV4ZXJzX2xhX0NGTEFHUykgXAorCSAtOkxERkxBR1MgJChsaWJnc3Rjb3JlaW5kZXhlcnNfbGFfTERGTEFHUykgXAorCSAgICAgICAgICAgJChsaWJnc3Rjb3JlaW5kZXhlcnNfbGFfTElCQUREKSBcCisJIC06UEFTU1RIUk9VR0ggTE9DQUxfQVJNX01PREU6PWFybSBcCisJICAgICAgICAgICAgICAgTE9DQUxfTU9EVUxFX1BBVEg6PSQkXChUQVJHRVRfT1VUXCkvbGliL2dzdHJlYW1lci1AR1NUX01BSk9STUlOT1JAIFwKKwk+ICRACisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3BsdWdpbnMvaW5kZXhlcnMvZ3N0aW5kZXhlcnMuYyBiL3BsdWdpbnMvaW5kZXhlcnMvZ3N0aW5kZXhlcnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzE3YzMyCi0tLSAvZGV2L251bGwKKysrIGIvcGx1Z2lucy9pbmRleGVycy9nc3RpbmRleGVycy5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Z3N0L2dzdF9wcml2YXRlLmg+CisjaW5jbHVkZSA8Z3N0L2dzdHZlcnNpb24uaD4KKyNpbmNsdWRlIDxnc3QvZ3N0cGx1Z2luLmg+CisKKyNpbmNsdWRlICJnc3RpbmRleGVycy5oIgorCitzdGF0aWMgZ2Jvb2xlYW4KK3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCit7CisgIGdib29sZWFuIHJlcyA9IFRSVUU7CisKKyAgcmVzICY9IGdzdF9tZW1faW5kZXhfcGx1Z2luX2luaXQgKHBsdWdpbik7CisKKyAgLyogRklYTUUgMC4xMTogZml4IG9yIHJlbW92ZSBHc3RGaWxlSW5kZXgsIHdoaWNoIHVzZWQgbW1hcCBhbmQgbGlieG1sICovCisgIC8qIHJlcyAmPSBnc3RfZmlsZV9pbmRleF9wbHVnaW5faW5pdCAocGx1Z2luKTsgKi8KKworICByZXR1cm4gcmVzOworfQorCitHU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCisgICAgR1NUX1ZFUlNJT05fTUlOT1IsCisgICAgImNvcmVpbmRleGVycyIsCisgICAgIkdTdHJlYW1lciBjb3JlIGluZGV4ZXJzIiwKKyAgICBwbHVnaW5faW5pdCwgVkVSU0lPTiwgR1NUX0xJQ0VOU0UsIEdTVF9QQUNLQUdFX05BTUUsIEdTVF9QQUNLQUdFX09SSUdJTik7CmRpZmYgLS1naXQgYS9wbHVnaW5zL2luZGV4ZXJzL2dzdGluZGV4ZXJzLmggYi9wbHVnaW5zL2luZGV4ZXJzL2dzdGluZGV4ZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE4MGY4ZgotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvaW5kZXhlcnMvZ3N0aW5kZXhlcnMuaApAQCAtMCwwICsxLDMzIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0dTVF9JTkRFWEVSU19IX18KKyNkZWZpbmUgX19HU1RfSU5ERVhFUlNfSF9fCisKK0dfQkVHSU5fREVDTFMKKworCitnYm9vbGVhbiBnc3RfbWVtX2luZGV4X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOworCisvKiBnYm9vbGVhbiBnc3RfZmlsZV9pbmRleF9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsgKi8KKworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HU1RfSU5ERVhFUlNfSF9fICovCmRpZmYgLS1naXQgYS9wbHVnaW5zL2luZGV4ZXJzL2dzdG1lbWluZGV4LmMgYi9wbHVnaW5zL2luZGV4ZXJzL2dzdG1lbWluZGV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQyNzZmYQotLS0gL2Rldi9udWxsCisrKyBiL3BsdWdpbnMvaW5kZXhlcnMvZ3N0bWVtaW5kZXguYwpAQCAtMCwwICsxLDQ0NCBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKKyNpbmNsdWRlICJnc3RpbmRleGVycy5oIgorCisjZGVmaW5lIEdTVF9UWVBFX01FTV9JTkRFWCAgICAgICAgICAgICAgXAorICAoZ3N0X2luZGV4X2dldF90eXBlICgpKQorI2RlZmluZSBHU1RfTUVNX0lOREVYKG9iaikgICAgICAgICAgICAgIFwKKyAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfTUVNX0lOREVYLCBHc3RNZW1JbmRleCkpCisjZGVmaW5lIEdTVF9NRU1fSU5ERVhfQ0xBU1Moa2xhc3MpICAgICAgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX01FTV9JTkRFWCwgR3N0TWVtSW5kZXhDbGFzcykpCisjZGVmaW5lIEdTVF9JU19NRU1fSU5ERVgob2JqKSAgICAgICAgICAgXAorICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9NRU1fSU5ERVgpKQorI2RlZmluZSBHU1RfSVNfTUVNX0lOREVYX0NMQVNTKGtsYXNzKSAgICAgXAorICAoR1NUX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfTUVNX0lOREVYKSkKKworLyoKKyAqIE9iamVjdCBtb2RlbDoKKyAqCisgKiBBbGwgZW50cmllcyBhcmUgc2ltcGx5IGFkZGVkIHRvIGEgR0xpc3QgZmlyc3QuIFRoZW4gd2UgYnVpbGQKKyAqIGFuIGluZGV4IHRvIGVhY2ggZW50cnkgZm9yIGVhY2ggaWQvZm9ybWF0CisgKgorICoKKyAqICBtZW1pbmRleAorICogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uLi4KKyAqICAgICEgICAgICAgICAgICAgICAgICAhCisgKiAgIGlkMSAgICAgICAgICAgICAgICAgaWQyCisgKiAgICAtLS0tLS0tLS0tLS0KKyAqICAgICEgICAgICAgICAgIQorICogICBmb3JtYXQxICBmb3JtYXQyCisgKiAgICAhICAgICAgICAgICEKKyAqICAgR1RyZWUgICAgICBHVHJlZQorICoKKyAqCisgKiBUaGUgbWVtaW5kZXggY3JlYXRlcyBhIE1lbUluZGV4SWQgb2JqZWN0IGZvciBlYWNoIHdyaXRlciBpZCwgYQorICogSGFzaHRhYmxlIGlzIGtlcHQgdG8gbWFwIHRoZSBpZCB0byB0aGUgTWVtSW5kZXhJZAorICoKKyAqIFRoZSBNZW1JbmRleElkIGtlZXBzIGEgTWVtSW5kZXhGb3JtYXRJbmRleCBmb3IgZWFjaCBmb3JtYXQgdGhlCisgKiBzcGVjaWZpYyB3cml0ZXIgd2FudHMgaW5kZXhlZC4KKyAqCisgKiBUaGUgTWVtSW5kZXhGb3JtYXRJbmRleCBrZWVwcyBhbGwgdGhlIHZhbHVlcyBvZiB0aGUgcGFydGljdWxhcgorICogZm9ybWF0IGluIGEgR1RyZWUsIFRoZSB2YWx1ZXMgb2YgdGhlIEdUcmVlIHBvaW50IGJhY2sgdG8gdGhlIGVudHJ5LgorICoKKyAqIEZpbmRpbmcgYSB2YWx1ZSBmb3IgYW4gaWQvZm9ybWF0IHJlcXVpcmVzIGxvY2F0aW5nIHRoZSBjb3JyZWN0IEdUcmVlLAorICogdGhlbiBkbyBhIGxvb2t1cCBpbiB0aGUgVHJlZSB0byBnZXQgdGhlIHJlcXVpcmVkIHZhbHVlLgorICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIEdzdEZvcm1hdCBmb3JtYXQ7CisgIGdpbnQgb2Zmc2V0OworICBHVHJlZSAqdHJlZTsKK30KK0dzdE1lbUluZGV4Rm9ybWF0SW5kZXg7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGdpbnQgaWQ7CisgIEdIYXNoVGFibGUgKmZvcm1hdF9pbmRleDsKK30KK0dzdE1lbUluZGV4SWQ7CisKK3R5cGVkZWYgc3RydWN0IF9Hc3RNZW1JbmRleCBHc3RNZW1JbmRleDsKK3R5cGVkZWYgc3RydWN0IF9Hc3RNZW1JbmRleENsYXNzIEdzdE1lbUluZGV4Q2xhc3M7CisKK3N0cnVjdCBfR3N0TWVtSW5kZXgKK3sKKyAgR3N0SW5kZXggcGFyZW50OworCisgIEdMaXN0ICphc3NvY2lhdGlvbnM7CisKKyAgR0hhc2hUYWJsZSAqaWRfaW5kZXg7Cit9OworCitzdHJ1Y3QgX0dzdE1lbUluZGV4Q2xhc3MKK3sKKyAgR3N0SW5kZXhDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCisvKiBJbmRleCBzaWduYWxzIGFuZCBhcmdzICovCitlbnVtCit7CisgIExBU1RfU0lHTkFMCit9OworCitlbnVtCit7CisgIEFSR18wLAorICAvKiBGSUxMIE1FICovCit9OworCitzdGF0aWMgdm9pZCBnc3RfbWVtX2luZGV4X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKKworc3RhdGljIHZvaWQgZ3N0X21lbV9pbmRleF9hZGRfZW50cnkgKEdzdEluZGV4ICogaW5kZXgsIEdzdEluZGV4RW50cnkgKiBlbnRyeSk7CitzdGF0aWMgR3N0SW5kZXhFbnRyeSAqZ3N0X21lbV9pbmRleF9nZXRfYXNzb2NfZW50cnkgKEdzdEluZGV4ICogaW5kZXgsIGdpbnQgaWQsCisgICAgR3N0SW5kZXhMb29rdXBNZXRob2QgbWV0aG9kLCBHc3RBc3NvY0ZsYWdzIGZsYWdzLAorICAgIEdzdEZvcm1hdCBmb3JtYXQsIGdpbnQ2NCB2YWx1ZSwgR0NvbXBhcmVEYXRhRnVuYyBmdW5jLCBncG9pbnRlciB1c2VyX2RhdGEpOworCisjZGVmaW5lIENMQVNTKG1lbV9pbmRleCkgIEdTVF9NRU1fSU5ERVhfQ0xBU1MgKEdfT0JKRUNUX0dFVF9DTEFTUyAobWVtX2luZGV4KSkKKworLypzdGF0aWMgZ3VpbnQgZ3N0X21lbV9pbmRleF9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OyAqLworCitHVHlwZSBnc3RfbWVtX2luZGV4X2dldF90eXBlICh2b2lkKTsKKworR19ERUZJTkVfVFlQRSAoR3N0TWVtSW5kZXgsIGdzdF9tZW1faW5kZXgsIEdTVF9UWVBFX0lOREVYKTsKKworc3RhdGljIHZvaWQKK2dzdF9tZW1faW5kZXhfY2xhc3NfaW5pdCAoR3N0TWVtSW5kZXhDbGFzcyAqIGtsYXNzKQoreworICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7CisgIEdzdEluZGV4Q2xhc3MgKmdzdGluZGV4X2NsYXNzOworCisgIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOworICBnc3RpbmRleF9jbGFzcyA9IChHc3RJbmRleENsYXNzICopIGtsYXNzOworCisgIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X21lbV9pbmRleF9maW5hbGl6ZTsKKworICBnc3RpbmRleF9jbGFzcy0+YWRkX2VudHJ5ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tZW1faW5kZXhfYWRkX2VudHJ5KTsKKyAgZ3N0aW5kZXhfY2xhc3MtPmdldF9hc3NvY19lbnRyeSA9CisgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X21lbV9pbmRleF9nZXRfYXNzb2NfZW50cnkpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X21lbV9pbmRleF9pbml0IChHc3RNZW1JbmRleCAqIGluZGV4KQoreworICBHU1RfREVCVUcgKCJjcmVhdGVkIG5ldyBtZW0gaW5kZXgiKTsKKworICBpbmRleC0+YXNzb2NpYXRpb25zID0gTlVMTDsKKyAgaW5kZXgtPmlkX2luZGV4ID0gZ19oYXNoX3RhYmxlX25ldyAoZ19pbnRfaGFzaCwgZ19pbnRfZXF1YWwpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X21lbV9pbmRleF9mcmVlX2Zvcm1hdCAoZ3BvaW50ZXIga2V5LCBncG9pbnRlciB2YWx1ZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBHc3RNZW1JbmRleEZvcm1hdEluZGV4ICppbmRleCA9IChHc3RNZW1JbmRleEZvcm1hdEluZGV4ICopIHZhbHVlOworCisgIGlmIChpbmRleC0+dHJlZSkgeworICAgIGdfdHJlZV9kZXN0cm95IChpbmRleC0+dHJlZSk7CisgIH0KKworICBnX3NsaWNlX2ZyZWUgKEdzdE1lbUluZGV4Rm9ybWF0SW5kZXgsIGluZGV4KTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9tZW1faW5kZXhfZnJlZV9pZCAoZ3BvaW50ZXIga2V5LCBncG9pbnRlciB2YWx1ZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBHc3RNZW1JbmRleElkICppZF9pbmRleCA9IChHc3RNZW1JbmRleElkICopIHZhbHVlOworCisgIGlmIChpZF9pbmRleC0+Zm9ybWF0X2luZGV4KSB7CisgICAgZ19oYXNoX3RhYmxlX2ZvcmVhY2ggKGlkX2luZGV4LT5mb3JtYXRfaW5kZXgsIGdzdF9tZW1faW5kZXhfZnJlZV9mb3JtYXQsCisgICAgICAgIE5VTEwpOworICAgIGdfaGFzaF90YWJsZV9kZXN0cm95IChpZF9pbmRleC0+Zm9ybWF0X2luZGV4KTsKKyAgICBpZF9pbmRleC0+Zm9ybWF0X2luZGV4ID0gTlVMTDsKKyAgfQorCisgIGdfc2xpY2VfZnJlZSAoR3N0TWVtSW5kZXhJZCwgaWRfaW5kZXgpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X21lbV9pbmRleF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKK3sKKyAgR3N0TWVtSW5kZXggKm1lbWluZGV4ID0gR1NUX01FTV9JTkRFWCAob2JqZWN0KTsKKworICAvKiBEZWxldGUgdGhlIHRyZWVzIHJlZmVyZW5jaW5nIHRoZSBhc3NvY2lhdGlvbnMgZmlyc3QgKi8KKyAgaWYgKG1lbWluZGV4LT5pZF9pbmRleCkgeworICAgIGdfaGFzaF90YWJsZV9mb3JlYWNoIChtZW1pbmRleC0+aWRfaW5kZXgsIGdzdF9tZW1faW5kZXhfZnJlZV9pZCwgTlVMTCk7CisgICAgZ19oYXNoX3RhYmxlX2Rlc3Ryb3kgKG1lbWluZGV4LT5pZF9pbmRleCk7CisgICAgbWVtaW5kZXgtPmlkX2luZGV4ID0gTlVMTDsKKyAgfQorCisgIC8qIFRoZW4gZGVsZXRlIHRoZSBhc3NvY2lhdGlvbnMgdGhlbXNlbHZlcyAqLworICBpZiAobWVtaW5kZXgtPmFzc29jaWF0aW9ucykgeworICAgIGdfbGlzdF9mb3JlYWNoIChtZW1pbmRleC0+YXNzb2NpYXRpb25zLCAoR0Z1bmMpIGdzdF9pbmRleF9lbnRyeV9mcmVlLCBOVUxMKTsKKyAgICBnX2xpc3RfZnJlZSAobWVtaW5kZXgtPmFzc29jaWF0aW9ucyk7CisgICAgbWVtaW5kZXgtPmFzc29jaWF0aW9ucyA9IE5VTEw7CisgIH0KKworICBHX09CSkVDVF9DTEFTUyAoZ3N0X21lbV9pbmRleF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9tZW1faW5kZXhfYWRkX2lkIChHc3RJbmRleCAqIGluZGV4LCBHc3RJbmRleEVudHJ5ICogZW50cnkpCit7CisgIEdzdE1lbUluZGV4ICptZW1pbmRleCA9IEdTVF9NRU1fSU5ERVggKGluZGV4KTsKKyAgR3N0TWVtSW5kZXhJZCAqaWRfaW5kZXg7CisKKyAgaWRfaW5kZXggPSBnX2hhc2hfdGFibGVfbG9va3VwIChtZW1pbmRleC0+aWRfaW5kZXgsICZlbnRyeS0+aWQpOworCisgIGlmICghaWRfaW5kZXgpIHsKKyAgICBpZF9pbmRleCA9IGdfc2xpY2VfbmV3MCAoR3N0TWVtSW5kZXhJZCk7CisKKyAgICBpZF9pbmRleC0+aWQgPSBlbnRyeS0+aWQ7CisgICAgaWRfaW5kZXgtPmZvcm1hdF9pbmRleCA9IGdfaGFzaF90YWJsZV9uZXcgKGdfaW50X2hhc2gsIGdfaW50X2VxdWFsKTsKKyAgICBnX2hhc2hfdGFibGVfaW5zZXJ0IChtZW1pbmRleC0+aWRfaW5kZXgsICZpZF9pbmRleC0+aWQsIGlkX2luZGV4KTsKKyAgfQorfQorCitzdGF0aWMgZ2ludAorbWVtX2luZGV4X2NvbXBhcmUgKGdjb25zdHBvaW50ZXIgYSwgZ2NvbnN0cG9pbnRlciBiLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIEdzdE1lbUluZGV4Rm9ybWF0SW5kZXggKmluZGV4ID0gdXNlcl9kYXRhOworICBnaW50NjQgdmFsMSwgdmFsMjsKKyAgZ2ludDY0IGRpZmY7CisKKyAgdmFsMSA9IEdTVF9JTkRFWF9BU1NPQ19WQUxVRSAoKChHc3RJbmRleEVudHJ5ICopIGEpLCBpbmRleC0+b2Zmc2V0KTsKKyAgdmFsMiA9IEdTVF9JTkRFWF9BU1NPQ19WQUxVRSAoKChHc3RJbmRleEVudHJ5ICopIGIpLCBpbmRleC0+b2Zmc2V0KTsKKworICBkaWZmID0gKHZhbDIgLSB2YWwxKTsKKworICByZXR1cm4gKGRpZmYgPT0gMCA/IDAgOiAoZGlmZiA+IDAgPyAxIDogLTEpKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9tZW1faW5kZXhfaW5kZXhfZm9ybWF0IChHc3RNZW1JbmRleElkICogaWRfaW5kZXgsIEdzdEluZGV4RW50cnkgKiBlbnRyeSwKKyAgICBnaW50IGFzc29jKQoreworICBHc3RNZW1JbmRleEZvcm1hdEluZGV4ICppbmRleDsKKyAgR3N0Rm9ybWF0ICpmb3JtYXQ7CisKKyAgZm9ybWF0ID0gJkdTVF9JTkRFWF9BU1NPQ19GT1JNQVQgKGVudHJ5LCBhc3NvYyk7CisKKyAgaW5kZXggPSBnX2hhc2hfdGFibGVfbG9va3VwIChpZF9pbmRleC0+Zm9ybWF0X2luZGV4LCBmb3JtYXQpOworCisgIGlmICghaW5kZXgpIHsKKyAgICBpbmRleCA9IGdfc2xpY2VfbmV3MCAoR3N0TWVtSW5kZXhGb3JtYXRJbmRleCk7CisKKyAgICBpbmRleC0+Zm9ybWF0ID0gKmZvcm1hdDsKKyAgICBpbmRleC0+b2Zmc2V0ID0gYXNzb2M7CisgICAgaW5kZXgtPnRyZWUgPSBnX3RyZWVfbmV3X3dpdGhfZGF0YSAobWVtX2luZGV4X2NvbXBhcmUsIGluZGV4KTsKKworICAgIGdfaGFzaF90YWJsZV9pbnNlcnQgKGlkX2luZGV4LT5mb3JtYXRfaW5kZXgsICZpbmRleC0+Zm9ybWF0LCBpbmRleCk7CisgIH0KKworICBnX3RyZWVfaW5zZXJ0IChpbmRleC0+dHJlZSwgZW50cnksIGVudHJ5KTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9tZW1faW5kZXhfYWRkX2Fzc29jaWF0aW9uIChHc3RJbmRleCAqIGluZGV4LCBHc3RJbmRleEVudHJ5ICogZW50cnkpCit7CisgIEdzdE1lbUluZGV4ICptZW1pbmRleCA9IEdTVF9NRU1fSU5ERVggKGluZGV4KTsKKyAgR3N0TWVtSW5kZXhJZCAqaWRfaW5kZXg7CisKKyAgbWVtaW5kZXgtPmFzc29jaWF0aW9ucyA9IGdfbGlzdF9wcmVwZW5kIChtZW1pbmRleC0+YXNzb2NpYXRpb25zLCBlbnRyeSk7CisKKyAgaWRfaW5kZXggPSBnX2hhc2hfdGFibGVfbG9va3VwIChtZW1pbmRleC0+aWRfaW5kZXgsICZlbnRyeS0+aWQpOworICBpZiAoaWRfaW5kZXgpIHsKKyAgICBnaW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgR1NUX0lOREVYX05BU1NPQ1MgKGVudHJ5KTsgaSsrKSB7CisgICAgICBnc3RfbWVtX2luZGV4X2luZGV4X2Zvcm1hdCAoaWRfaW5kZXgsIGVudHJ5LCBpKTsKKyAgICB9CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF9tZW1faW5kZXhfYWRkX29iamVjdCAoR3N0SW5kZXggKiBpbmRleCwgR3N0SW5kZXhFbnRyeSAqIGVudHJ5KQoreworfQorCitzdGF0aWMgdm9pZAorZ3N0X21lbV9pbmRleF9hZGRfZm9ybWF0IChHc3RJbmRleCAqIGluZGV4LCBHc3RJbmRleEVudHJ5ICogZW50cnkpCit7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfbWVtX2luZGV4X2FkZF9lbnRyeSAoR3N0SW5kZXggKiBpbmRleCwgR3N0SW5kZXhFbnRyeSAqIGVudHJ5KQoreworICBHU1RfTE9HX09CSkVDVCAoaW5kZXgsICJhZGRlZCB0aGlzIGVudHJ5Iik7CisKKyAgc3dpdGNoIChlbnRyeS0+dHlwZSkgeworICAgIGNhc2UgR1NUX0lOREVYX0VOVFJZX0lEOgorICAgICAgZ3N0X21lbV9pbmRleF9hZGRfaWQgKGluZGV4LCBlbnRyeSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9JTkRFWF9FTlRSWV9BU1NPQ0lBVElPTjoKKyAgICAgIGdzdF9tZW1faW5kZXhfYWRkX2Fzc29jaWF0aW9uIChpbmRleCwgZW50cnkpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfSU5ERVhfRU5UUllfT0JKRUNUOgorICAgICAgZ3N0X21lbV9pbmRleF9hZGRfb2JqZWN0IChpbmRleCwgZW50cnkpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfSU5ERVhfRU5UUllfRk9STUFUOgorICAgICAgZ3N0X21lbV9pbmRleF9hZGRfZm9ybWF0IChpbmRleCwgZW50cnkpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9Cit9CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGdpbnQ2NCB2YWx1ZTsKKyAgR3N0TWVtSW5kZXhGb3JtYXRJbmRleCAqaW5kZXg7CisgIGdib29sZWFuIGV4YWN0OworICBHc3RJbmRleEVudHJ5ICpsb3dlcjsKKyAgZ2ludDY0IGxvd19kaWZmOworICBHc3RJbmRleEVudHJ5ICpoaWdoZXI7CisgIGdpbnQ2NCBoaWdoX2RpZmY7Cit9CitHc3RNZW1JbmRleFNlYXJjaERhdGE7CisKK3N0YXRpYyBnaW50CittZW1faW5kZXhfc2VhcmNoIChnY29uc3Rwb2ludGVyIGEsIGdjb25zdHBvaW50ZXIgYikKK3sKKyAgR3N0TWVtSW5kZXhTZWFyY2hEYXRhICpkYXRhID0gKEdzdE1lbUluZGV4U2VhcmNoRGF0YSAqKSBiOworICBHc3RNZW1JbmRleEZvcm1hdEluZGV4ICppbmRleCA9IGRhdGEtPmluZGV4OworICBnaW50NjQgdmFsMSwgdmFsMjsKKyAgZ2ludDY0IGRpZmY7CisKKyAgdmFsMSA9IEdTVF9JTkRFWF9BU1NPQ19WQUxVRSAoKChHc3RJbmRleEVudHJ5ICopIGEpLCBpbmRleC0+b2Zmc2V0KTsKKyAgdmFsMiA9IGRhdGEtPnZhbHVlOworCisgIGRpZmYgPSAodmFsMSAtIHZhbDIpOworICBpZiAoZGlmZiA9PSAwKQorICAgIHJldHVybiAwOworCisgIC8qIGV4YWN0IG1hdGNoaW5nLCBkb24ndCB1cGRhdGUgbG93L2hpZ2ggKi8KKyAgaWYgKGRhdGEtPmV4YWN0KQorICAgIHJldHVybiAoZGlmZiA+IDAgPyAxIDogLTEpOworCisgIGlmIChkaWZmIDwgMCkgeworICAgIGlmIChkaWZmID4gZGF0YS0+bG93X2RpZmYpIHsKKyAgICAgIGRhdGEtPmxvd19kaWZmID0gZGlmZjsKKyAgICAgIGRhdGEtPmxvd2VyID0gKEdzdEluZGV4RW50cnkgKikgYTsKKyAgICB9CisgICAgZGlmZiA9IC0xOworICB9IGVsc2UgeworICAgIGlmIChkaWZmIDwgZGF0YS0+aGlnaF9kaWZmKSB7CisgICAgICBkYXRhLT5oaWdoX2RpZmYgPSBkaWZmOworICAgICAgZGF0YS0+aGlnaGVyID0gKEdzdEluZGV4RW50cnkgKikgYTsKKyAgICB9CisgICAgZGlmZiA9IDE7CisgIH0KKworICByZXR1cm4gZGlmZjsKK30KKworc3RhdGljIEdzdEluZGV4RW50cnkgKgorZ3N0X21lbV9pbmRleF9nZXRfYXNzb2NfZW50cnkgKEdzdEluZGV4ICogaW5kZXgsIGdpbnQgaWQsCisgICAgR3N0SW5kZXhMb29rdXBNZXRob2QgbWV0aG9kLAorICAgIEdzdEFzc29jRmxhZ3MgZmxhZ3MsCisgICAgR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0IHZhbHVlLCBHQ29tcGFyZURhdGFGdW5jIGZ1bmMsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgR3N0TWVtSW5kZXggKm1lbWluZGV4ID0gR1NUX01FTV9JTkRFWCAoaW5kZXgpOworICBHc3RNZW1JbmRleElkICppZF9pbmRleDsKKyAgR3N0TWVtSW5kZXhGb3JtYXRJbmRleCAqZm9ybWF0X2luZGV4OworICBHc3RJbmRleEVudHJ5ICplbnRyeTsKKyAgR3N0TWVtSW5kZXhTZWFyY2hEYXRhIGRhdGE7CisKKyAgaWRfaW5kZXggPSBnX2hhc2hfdGFibGVfbG9va3VwIChtZW1pbmRleC0+aWRfaW5kZXgsICZpZCk7CisgIGlmICghaWRfaW5kZXgpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgZm9ybWF0X2luZGV4ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoaWRfaW5kZXgtPmZvcm1hdF9pbmRleCwgJmZvcm1hdCk7CisgIGlmICghZm9ybWF0X2luZGV4KQorICAgIHJldHVybiBOVUxMOworCisgIGRhdGEudmFsdWUgPSB2YWx1ZTsKKyAgZGF0YS5pbmRleCA9IGZvcm1hdF9pbmRleDsKKyAgZGF0YS5leGFjdCA9IChtZXRob2QgPT0gR1NUX0lOREVYX0xPT0tVUF9FWEFDVCk7CisKKyAgLyogc2V0dXAgZGF0YSBmb3IgbG93L2hpZ2ggY2hlY2tzIGlmIHdlIGFyZSBub3QgbG9va2luZworICAgKiBmb3IgYW4gZXhhY3QgbWF0Y2ggKi8KKyAgaWYgKCFkYXRhLmV4YWN0KSB7CisgICAgZGF0YS5sb3dfZGlmZiA9IEdfTUlOSU5UNjQ7CisgICAgZGF0YS5sb3dlciA9IE5VTEw7CisgICAgZGF0YS5oaWdoX2RpZmYgPSBHX01BWElOVDY0OworICAgIGRhdGEuaGlnaGVyID0gTlVMTDsKKyAgfQorCisgIGVudHJ5ID0gZ190cmVlX3NlYXJjaCAoZm9ybWF0X2luZGV4LT50cmVlLCBtZW1faW5kZXhfc2VhcmNoLCAmZGF0YSk7CisKKyAgLyogZ2V0IHRoZSBsb3cvaGlnaCB2YWx1ZXMgaWYgd2UncmUgbm90IGV4YWN0ICovCisgIGlmIChlbnRyeSA9PSBOVUxMICYmICFkYXRhLmV4YWN0KSB7CisgICAgaWYgKG1ldGhvZCA9PSBHU1RfSU5ERVhfTE9PS1VQX0JFRk9SRSkKKyAgICAgIGVudHJ5ID0gZGF0YS5sb3dlcjsKKyAgICBlbHNlIGlmIChtZXRob2QgPT0gR1NUX0lOREVYX0xPT0tVUF9BRlRFUikgeworICAgICAgZW50cnkgPSBkYXRhLmhpZ2hlcjsKKyAgICB9CisgIH0KKworICBpZiAoZW50cnkgJiYgKChHU1RfSU5ERVhfQVNTT0NfRkxBR1MgKGVudHJ5KSAmIGZsYWdzKSAhPSBmbGFncykpIHsKKyAgICBpZiAobWV0aG9kICE9IEdTVF9JTkRFWF9MT09LVVBfRVhBQ1QpIHsKKyAgICAgIEdMaXN0ICpsX2VudHJ5ID0gZ19saXN0X2ZpbmQgKG1lbWluZGV4LT5hc3NvY2lhdGlvbnMsIGVudHJ5KTsKKworICAgICAgZW50cnkgPSBOVUxMOworCisgICAgICB3aGlsZSAobF9lbnRyeSkgeworICAgICAgICBlbnRyeSA9IChHc3RJbmRleEVudHJ5ICopIGxfZW50cnktPmRhdGE7CisKKyAgICAgICAgaWYgKGVudHJ5LT5pZCA9PSBpZCAmJiAoR1NUX0lOREVYX0FTU09DX0ZMQUdTIChlbnRyeSkgJiBmbGFncykgPT0gZmxhZ3MpCisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKG1ldGhvZCA9PSBHU1RfSU5ERVhfTE9PS1VQX0JFRk9SRSkKKyAgICAgICAgICBsX2VudHJ5ID0gZ19saXN0X25leHQgKGxfZW50cnkpOworICAgICAgICBlbHNlIGlmIChtZXRob2QgPT0gR1NUX0lOREVYX0xPT0tVUF9BRlRFUikgeworICAgICAgICAgIGxfZW50cnkgPSBnX2xpc3RfcHJldmlvdXMgKGxfZW50cnkpOworICAgICAgICB9CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGVudHJ5ID0gTlVMTDsKKyAgICB9CisgIH0KKworICByZXR1cm4gZW50cnk7Cit9CisKK2dib29sZWFuCitnc3RfbWVtX2luZGV4X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCit7CisgIEdzdEluZGV4RmFjdG9yeSAqZmFjdG9yeTsKKworICBmYWN0b3J5ID0gZ3N0X2luZGV4X2ZhY3RvcnlfbmV3ICgibWVtaW5kZXgiLAorICAgICAgIkEgaW5kZXggdGhhdCBzdG9yZXMgZW50cmllcyBpbiBtZW1vcnkiLCBnc3RfbWVtX2luZGV4X2dldF90eXBlICgpKTsKKworICBpZiAoZmFjdG9yeSA9PSBOVUxMKSB7CisgICAgZ193YXJuaW5nICgiZmFpbGVkIHRvIGNyZWF0ZSBtZW1pbmRleCBmYWN0b3J5Iik7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgR1NUX1BMVUdJTl9GRUFUVVJFIChmYWN0b3J5KS0+cGx1Z2luX25hbWUgPSBwbHVnaW4tPmRlc2MubmFtZTsKKyAgR1NUX1BMVUdJTl9GRUFUVVJFIChmYWN0b3J5KS0+bG9hZGVkID0gVFJVRTsKKworICBnc3RfcmVnaXN0cnlfYWRkX2ZlYXR1cmUgKGdzdF9yZWdpc3RyeV9nZXRfZGVmYXVsdCAoKSwKKyAgICAgIEdTVF9QTFVHSU5fRkVBVFVSRSAoZmFjdG9yeSkpOworCisgIHJldHVybiBUUlVFOworfQpkaWZmIC0tZ2l0IGEvcG8vTElOR1VBUyBiL3BvL0xJTkdVQVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzljYjVlNwotLS0gL2Rldi9udWxsCisrKyBiL3BvL0xJTkdVQVMKQEAgLTAsMCArMSBAQAorYWYgYXogYmUgYmcgY2EgY3MgZGEgZGUgZW5fR0IgZXMgZWwgZXUgZmkgZnIgZ2wgaHUgaWQgaXQgamEgbHQgbmIgbmwgcGwgcHRfQlIgcm8gcnUgcncgc2sgc2wgc3Egc3Igc3YgdHIgdWsgdmkgemhfQ04gemhfVFcKZGlmZiAtLWdpdCBhL3BvL01ha2VmaWxlLmluLmluIGIvcG8vTWFrZWZpbGUuaW4uaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI4M2MzMgotLS0gL2Rldi9udWxsCisrKyBiL3BvL01ha2VmaWxlLmluLmluCkBAIC0wLDAgKzEsNDMyIEBACisjIE1ha2VmaWxlIGZvciBQTyBkaXJlY3RvcnkgaW4gYW55IHBhY2thZ2UgdXNpbmcgR05VIGdldHRleHQuCisjIENvcHlyaWdodCAoQykgMTk5NS0xOTk3LCAyMDAwLTIwMDcgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+CisjCisjIFRoaXMgZmlsZSBjYW4gYmUgY29waWVkIGFuZCB1c2VkIGZyZWVseSB3aXRob3V0IHJlc3RyaWN0aW9ucy4gIEl0IGNhbgorIyBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorIyBmdW5jdGlvbmFsaXR5LgorIyBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiBHTlUgZ2V0dGV4dCBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgaXMgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisjCisjIE9yaWdpbjogZ2V0dGV4dC0wLjE3CitHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSAwLjE3CisKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorCisjIHRob21hczogYWRkIEdFVFRFWFRfUEFDS0FHRSBzdWJzdGl0dXRpb24gYXMgdXNlZCBpbiBNYWtldmFycworR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKKworU0hFTEwgPSAvYmluL3NoCitAU0VUX01BS0VACisKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACisKK3ByZWZpeCA9IEBwcmVmaXhACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2dldHRleHRzcmNkaXIgPSAkKGRhdGFkaXIpL2dldHRleHQvcG8KKworSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKKworIyBXZSB1c2UgJChta2Rpcl9wKS4KKyMgSW4gYXV0b21ha2UgPD0gMS45LngsICQobWtkaXJfcCkgaXMgZGVmaW5lZCBlaXRoZXIgYXMgIm1rZGlyIC1wIC0tIiBvciBhcworIyAiJChta2luc3RhbGxkaXJzKSIgb3IgYXMgIiQoaW5zdGFsbF9zaCkgLWQiLiBGb3IgdGhlc2UgYXV0b21ha2UgdmVyc2lvbnMsCisjIEBpbnN0YWxsX3NoQCBkb2VzIG5vdCBzdGFydCB3aXRoICQoU0hFTEwpLCBzbyB3ZSBhZGQgaXQuCisjIEluIGF1dG9tYWtlID49IDEuMTAsIEBta2Rpcl9wQCBpcyBkZXJpdmVkIGZyb20gJHtNS0RJUl9QfSwgd2hpY2ggaXMgZGVmaW5lZAorIyBlaXRoZXIgYXMgIi9wYXRoL3RvL21rZGlyIC1wIiBvciAiLi4uL2luc3RhbGwtc2ggLWMgLWQiLiBGb3IgdGhlc2UgYXV0b21ha2UKKyMgdmVyc2lvbnMsICQobWtpbnN0YWxsZGlycykgYW5kICQoaW5zdGFsbF9zaCkgYXJlIHVudXNlZC4KK21raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSBAaW5zdGFsbF9zaEAgLWQKK2luc3RhbGxfc2ggPSAkKFNIRUxMKSBAaW5zdGFsbF9zaEAKK01LRElSX1AgPSBATUtESVJfUEAKK21rZGlyX3AgPSBAbWtkaXJfcEAKKworR01TR0ZNVF8gPSBAR01TR0ZNVEAKK0dNU0dGTVRfbm8gPSBAR01TR0ZNVEAKK0dNU0dGTVRfeWVzID0gQEdNU0dGTVRfMDE1QAorR01TR0ZNVCA9ICQoR01TR0ZNVF8kKFVTRV9NU0dDVFhUKSkKK01TR0ZNVF8gPSBATVNHRk1UQAorTVNHRk1UX25vID0gQE1TR0ZNVEAKK01TR0ZNVF95ZXMgPSBATVNHRk1UXzAxNUAKK01TR0ZNVCA9ICQoTVNHRk1UXyQoVVNFX01TR0NUWFQpKQorWEdFVFRFWFRfID0gQFhHRVRURVhUQAorWEdFVFRFWFRfbm8gPSBAWEdFVFRFWFRACitYR0VUVEVYVF95ZXMgPSBAWEdFVFRFWFRfMDE1QAorWEdFVFRFWFQgPSAkKFhHRVRURVhUXyQoVVNFX01TR0NUWFQpKQorTVNHTUVSR0UgPSBtc2dtZXJnZQorTVNHTUVSR0VfVVBEQVRFID0gQE1TR01FUkdFQCAtLXVwZGF0ZQorTVNHSU5JVCA9IG1zZ2luaXQKK01TR0NPTlYgPSBtc2djb252CitNU0dGSUxURVIgPSBtc2dmaWx0ZXIKKworUE9GSUxFUyA9IEBQT0ZJTEVTQAorR01PRklMRVMgPSBAR01PRklMRVNACitVUERBVEVQT0ZJTEVTID0gQFVQREFURVBPRklMRVNACitEVU1NWVBPRklMRVMgPSBARFVNTVlQT0ZJTEVTQAorRElTVEZJTEVTLmNvbW1vbiA9IE1ha2VmaWxlLmluLmluIHJlbW92ZS1wb3RjZGF0ZS5zaW4gXAorJChESVNURklMRVMuY29tbW9uLmV4dHJhMSkgJChESVNURklMRVMuY29tbW9uLmV4dHJhMikgJChESVNURklMRVMuY29tbW9uLmV4dHJhMykKK0RJU1RGSUxFUyA9ICQoRElTVEZJTEVTLmNvbW1vbikgTWFrZXZhcnMgUE9URklMRVMuaW4gXAorJChQT0ZJTEVTKSAkKEdNT0ZJTEVTKSBcCiskKERJU1RGSUxFUy5leHRyYTEpICQoRElTVEZJTEVTLmV4dHJhMikgJChESVNURklMRVMuZXh0cmEzKQorCitQT1RGSUxFUyA9IFwKKworQ0FUQUxPR1MgPSBAQ0FUQUxPR1NACisKKyMgTWFrZXZhcnMgZ2V0cyBpbnNlcnRlZCBoZXJlLiAoRG9uJ3QgcmVtb3ZlIHRoaXMgbGluZSEpCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLnBvIC5nbW8gLm1vIC5zZWQgLnNpbiAubm9wIC5wby1jcmVhdGUgLnBvLXVwZGF0ZQorCisucG8ubW86CisJQGVjaG8gIiQoTVNHRk1UKSAtYyAtbyAkQCAkPCI7IFwKKwkkKE1TR0ZNVCkgLWMgLW8gdC0kQCAkPCAmJiBtdiB0LSRAICRACisKKy5wby5nbW86CisJQGxhbmc9YGVjaG8gJCogfCBzZWQgLWUgJ3MsLiovLCwnYDsgXAorCXRlc3QgIiQoc3JjZGlyKSIgPSAuICYmIGNkY21kPSIiIHx8IGNkY21kPSJjZCAkKHNyY2RpcikgJiYgIjsgXAorCWVjaG8gIiQke2NkY21kfXJtIC1mICQke2xhbmd9LmdtbyAmJiAkKEdNU0dGTVQpIC1jIC0tc3RhdGlzdGljcyAtbyAkJHtsYW5nfS5nbW8gJCR7bGFuZ30ucG8iOyBcCisJY2QgJChzcmNkaXIpICYmIHJtIC1mICQke2xhbmd9LmdtbyAmJiAkKEdNU0dGTVQpIC1jIC0tc3RhdGlzdGljcyAtbyB0LSQke2xhbmd9LmdtbyAkJHtsYW5nfS5wbyAmJiBtdiB0LSQke2xhbmd9LmdtbyAkJHtsYW5nfS5nbW8KKworLnNpbi5zZWQ6CisJc2VkIC1lICcvXiMvZCcgJDwgPiB0LSRACisJbXYgdC0kQCAkQAorCisKK2FsbDogY2hlY2stbWFjcm8tdmVyc2lvbiBhbGwtQFVTRV9OTFNACisKK2FsbC15ZXM6IHN0YW1wLXBvCithbGwtbm86CisKKyMgRW5zdXJlIHRoYXQgdGhlIGdldHRleHQgbWFjcm9zIGFuZCB0aGlzIE1ha2VmaWxlLmluLmluIGFyZSBpbiBzeW5jLgorY2hlY2stbWFjcm8tdmVyc2lvbjoKKwlAdGVzdCAiJChHRVRURVhUX01BQ1JPX1ZFUlNJT04pIiA9ICJAR0VUVEVYVF9NQUNST19WRVJTSU9OQCIgXAorCSAgfHwgeyBlY2hvICIqKiogZXJyb3I6IGdldHRleHQgaW5mcmFzdHJ1Y3R1cmUgbWlzbWF0Y2g6IHVzaW5nIGEgTWFrZWZpbGUuaW4uaW4gZnJvbSBnZXR0ZXh0IHZlcnNpb24gJChHRVRURVhUX01BQ1JPX1ZFUlNJT04pIGJ1dCB0aGUgYXV0b2NvbmYgbWFjcm9zIGFyZSBmcm9tIGdldHRleHQgdmVyc2lvbiBAR0VUVEVYVF9NQUNST19WRVJTSU9OQCIgMT4mMjsgXAorCSAgICAgICBleGl0IDE7IFwKKwkgICAgIH0KKworIyAkKHNyY2RpcikvJChET01BSU4pLnBvdCBpcyBvbmx5IGNyZWF0ZWQgd2hlbiBuZWVkZWQuIFdoZW4geGdldHRleHQgZmluZHMgbm8KKyMgaW50ZXJuYXRpb25hbGl6ZWQgbWVzc2FnZXMsIG5vICQoc3JjZGlyKS8kKERPTUFJTikucG90IGlzIGNyZWF0ZWQgKGJlY2F1c2UKKyMgd2UgZG9uJ3Qgd2FudCB0byBib3RoZXIgdHJhbnNsYXRvcnMgd2l0aCBlbXB0eSBQT1QgZmlsZXMpLiBXZSBhc3N1bWUgdGhhdAorIyBMSU5HVUFTIGlzIGVtcHR5IGluIHRoaXMgY2FzZSwgaS5lLiAkKFBPRklMRVMpIGFuZCAkKEdNT0ZJTEVTKSBhcmUgZW1wdHkuCisjIEluIHRoaXMgY2FzZSwgc3RhbXAtcG8gaXMgYSBub3AgKGkuZS4gYSBwaG9ueSB0YXJnZXQpLgorCisjIHN0YW1wLXBvIGlzIGEgdGltZXN0YW1wIGRlbm90aW5nIHRoZSBsYXN0IHRpbWUgYXQgd2hpY2ggdGhlIENBVEFMT0dTIGhhdmUKKyMgYmVlbiBsb29zZWx5IHVwZGF0ZWQuIEl0cyBwdXJwb3NlIGlzIHRoYXQgd2hlbiBhIGRldmVsb3BlciBvciB0cmFuc2xhdG9yCisjIGNoZWNrcyBvdXQgdGhlIHBhY2thZ2UgdmlhIENWUywgYW5kIHRoZSAkKERPTUFJTikucG90IGZpbGUgaXMgbm90IGluIENWUywKKyMgIm1ha2UiIHdpbGwgdXBkYXRlIHRoZSAkKERPTUFJTikucG90IGFuZCB0aGUgJChDQVRBTE9HUyksIGJ1dCBzdWJzZXF1ZW50CisjIGludm9jYXRpb25zIG9mICJtYWtlIiB3aWxsIGRvIG5vdGhpbmcuIFRoaXMgdGltZXN0YW1wIHdvdWxkIG5vdCBiZSBuZWNlc3NhcnkKKyMgaWYgdXBkYXRpbmcgdGhlICQoQ0FUQUxPR1MpIHdvdWxkIGFsd2F5cyB0b3VjaCB0aGVtOyBob3dldmVyLCB0aGUgcnVsZSBmb3IKKyMgJChQT0ZJTEVTKSBoYXMgYmVlbiBkZXNpZ25lZCB0byBub3QgdG91Y2ggZmlsZXMgdGhhdCBkb24ndCBuZWVkIHRvIGJlCisjIGNoYW5nZWQuCitzdGFtcC1wbzogJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QKKwl0ZXN0ICEgLWYgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgfHwgXAorCSAgdGVzdCAteiAiJChHTU9GSUxFUykiIHx8ICQoTUFLRSkgJChHTU9GSUxFUykKKwlAdGVzdCAhIC1mICQoc3JjZGlyKS8kKERPTUFJTikucG90IHx8IHsgXAorCSAgZWNobyAidG91Y2ggc3RhbXAtcG8iICYmIFwKKwkgIGVjaG8gdGltZXN0YW1wID4gc3RhbXAtcG9UICYmIFwKKwkgIG12IHN0YW1wLXBvVCBzdGFtcC1wbzsgXAorCX0KKworIyBOb3RlOiBUYXJnZXQgJ2FsbCcgbXVzdCBub3QgZGVwZW5kIG9uIHRhcmdldCAnJChET01BSU4pLnBvdC11cGRhdGUnLAorIyBvdGhlcndpc2UgcGFja2FnZXMgbGlrZSBHQ0MgY2FuIG5vdCBiZSBidWlsdCBpZiBvbmx5IHBhcnRzIG9mIHRoZSBzb3VyY2UKKyMgaGF2ZSBiZWVuIGRvd25sb2FkZWQuCisKKyMgVGhpcyB0YXJnZXQgcmVidWlsZHMgJChET01BSU4pLnBvdDsgaXQgaXMgYW4gZXhwZW5zaXZlIG9wZXJhdGlvbi4KKyMgTm90ZSB0aGF0ICQoRE9NQUlOKS5wb3QgaXMgbm90IHRvdWNoZWQgaWYgaXQgZG9lc24ndCBuZWVkIHRvIGJlIGNoYW5nZWQuCiskKERPTUFJTikucG90LXVwZGF0ZTogJChQT1RGSUxFUykgJChzcmNkaXIpL1BPVEZJTEVTLmluIHJlbW92ZS1wb3RjZGF0ZS5zZWQKKwlpZiBMQ19BTEw9QyBncmVwICdHTlUgQFBBQ0tBR0VAJyAkKHRvcF9zcmNkaXIpLyogMj4vZGV2L251bGwgfCBncmVwIC12ICdsaWJ0b29sOicgPi9kZXYvbnVsbDsgdGhlbiBcCisJICBwYWNrYWdlX2dudT0nR05VICc7IFwKKwllbHNlIFwKKwkgIHBhY2thZ2VfZ251PScnOyBcCisJZmk7IFwKKwlpZiB0ZXN0IC1uICckKE1TR0lEX0JVR1NfQUREUkVTUyknIHx8IHRlc3QgJyQoUEFDS0FHRV9CVUdSRVBPUlQpJyA9ICdAJ1BBQ0tBR0VfQlVHUkVQT1JUJ0AnOyB0aGVuIFwKKwkgIG1zZ2lkX2J1Z3NfYWRkcmVzcz0nJChNU0dJRF9CVUdTX0FERFJFU1MpJzsgXAorCWVsc2UgXAorCSAgbXNnaWRfYnVnc19hZGRyZXNzPSckKFBBQ0tBR0VfQlVHUkVQT1JUKSc7IFwKKwlmaTsgXAorCWNhc2UgYCQoWEdFVFRFWFQpIC0tdmVyc2lvbiB8IHNlZCAxcSB8IHNlZCAtZSAncyxeW14wLTldKiwsJ2AgaW4gXAorCSAgJycgfCAwLlswLTldIHwgMC5bMC05XS4qIHwgMC4xWzAtNV0gfCAwLjFbMC01XS4qIHwgMC4xNiB8IDAuMTYuWzAtMV0qKSBcCisJICAgICQoWEdFVFRFWFQpIC0tZGVmYXVsdC1kb21haW49JChET01BSU4pIC0tZGlyZWN0b3J5PSQodG9wX3NyY2RpcikgXAorCSAgICAgIC0tYWRkLWNvbW1lbnRzPVRSQU5TTEFUT1JTOiAkKFhHRVRURVhUX09QVElPTlMpIEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQCBcCisJICAgICAgLS1maWxlcy1mcm9tPSQoc3JjZGlyKS9QT1RGSUxFUy5pbiBcCisJICAgICAgLS1jb3B5cmlnaHQtaG9sZGVyPSckKENPUFlSSUdIVF9IT0xERVIpJyBcCisJICAgICAgLS1tc2dpZC1idWdzLWFkZHJlc3M9IiQkbXNnaWRfYnVnc19hZGRyZXNzIiBcCisJICAgIDs7IFwKKwkgICopIFwKKwkgICAgJChYR0VUVEVYVCkgLS1kZWZhdWx0LWRvbWFpbj0kKERPTUFJTikgLS1kaXJlY3Rvcnk9JCh0b3Bfc3JjZGlyKSBcCisJICAgICAgLS1hZGQtY29tbWVudHM9VFJBTlNMQVRPUlM6ICQoWEdFVFRFWFRfT1BUSU9OUykgQFhHRVRURVhUX0VYVFJBX09QVElPTlNAIFwKKwkgICAgICAtLWZpbGVzLWZyb209JChzcmNkaXIpL1BPVEZJTEVTLmluIFwKKwkgICAgICAtLWNvcHlyaWdodC1ob2xkZXI9JyQoQ09QWVJJR0hUX0hPTERFUiknIFwKKwkgICAgICAtLXBhY2thZ2UtbmFtZT0iJCR7cGFja2FnZV9nbnV9QFBBQ0tBR0VAIiBcCisJICAgICAgLS1wYWNrYWdlLXZlcnNpb249J0BWRVJTSU9OQCcgXAorCSAgICAgIC0tbXNnaWQtYnVncy1hZGRyZXNzPSIkJG1zZ2lkX2J1Z3NfYWRkcmVzcyIgXAorCSAgICA7OyBcCisJZXNhYworCXRlc3QgISAtZiAkKERPTUFJTikucG8gfHwgeyBcCisJICBpZiB0ZXN0IC1mICQoc3JjZGlyKS8kKERPTUFJTikucG90OyB0aGVuIFwKKwkgICAgc2VkIC1mIHJlbW92ZS1wb3RjZGF0ZS5zZWQgPCAkKHNyY2RpcikvJChET01BSU4pLnBvdCA+ICQoRE9NQUlOKS4xcG8gJiYgXAorCSAgICBzZWQgLWYgcmVtb3ZlLXBvdGNkYXRlLnNlZCA8ICQoRE9NQUlOKS5wbyA+ICQoRE9NQUlOKS4ycG8gJiYgXAorCSAgICBpZiBjbXAgJChET01BSU4pLjFwbyAkKERPTUFJTikuMnBvID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICAgICAgcm0gLWYgJChET01BSU4pLjFwbyAkKERPTUFJTikuMnBvICQoRE9NQUlOKS5wbzsgXAorCSAgICBlbHNlIFwKKwkgICAgICBybSAtZiAkKERPTUFJTikuMXBvICQoRE9NQUlOKS4ycG8gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgJiYgXAorCSAgICAgIG12ICQoRE9NQUlOKS5wbyAkKHNyY2RpcikvJChET01BSU4pLnBvdDsgXAorCSAgICBmaTsgXAorCSAgZWxzZSBcCisJICAgIG12ICQoRE9NQUlOKS5wbyAkKHNyY2RpcikvJChET01BSU4pLnBvdDsgXAorCSAgZmk7IFwKKwl9CisKKyMgVGhpcyBydWxlIGhhcyBubyBkZXBlbmRlbmNpZXM6IHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlICQoRE9NQUlOKS5wb3QgYXQKKyMgZXZlcnkgIm1ha2UiIGludm9jYXRpb24sIG9ubHkgY3JlYXRlIGl0IHdoZW4gaXQgaXMgbWlzc2luZy4KKyMgT25seSAibWFrZSAkKERPTUFJTikucG90LXVwZGF0ZSIgb3IgIm1ha2UgZGlzdCIgd2lsbCBmb3JjZSBhbiB1cGRhdGUuCiskKHNyY2RpcikvJChET01BSU4pLnBvdDoKKwkkKE1BS0UpICQoRE9NQUlOKS5wb3QtdXBkYXRlCisKKyMgVGhpcyB0YXJnZXQgcmVidWlsZHMgYSBQTyBmaWxlIGlmICQoRE9NQUlOKS5wb3QgaGFzIGNoYW5nZWQuCisjIE5vdGUgdGhhdCBhIFBPIGZpbGUgaXMgbm90IHRvdWNoZWQgaWYgaXQgZG9lc24ndCBuZWVkIHRvIGJlIGNoYW5nZWQuCiskKFBPRklMRVMpOiAkKHNyY2RpcikvJChET01BSU4pLnBvdAorCUBsYW5nPWBlY2hvICRAIHwgc2VkIC1lICdzLC4qLywsJyAtZSAncy9cLnBvJCQvLydgOyBcCisJaWYgdGVzdCAtZiAiJChzcmNkaXIpLyQke2xhbmd9LnBvIjsgdGhlbiBcCisJICB0ZXN0ICIkKHNyY2RpcikiID0gLiAmJiBjZGNtZD0iIiB8fCBjZGNtZD0iY2QgJChzcmNkaXIpICYmICI7IFwKKwkgIGVjaG8gIiQke2NkY21kfSQoTVNHTUVSR0VfVVBEQVRFKSAkJHtsYW5nfS5wbyAkKERPTUFJTikucG90IjsgXAorCSAgY2QgJChzcmNkaXIpICYmICQoTVNHTUVSR0VfVVBEQVRFKSAkJHtsYW5nfS5wbyAkKERPTUFJTikucG90OyBcCisJZWxzZSBcCisJICAkKE1BS0UpICQke2xhbmd9LnBvLWNyZWF0ZTsgXAorCWZpCisKKworaW5zdGFsbDogaW5zdGFsbC1leGVjIGluc3RhbGwtZGF0YQoraW5zdGFsbC1leGVjOgoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtQFVTRV9OTFNACisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorCSAgJChta2Rpcl9wKSAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKTsgXAorCSAgZm9yIGZpbGUgaW4gJChESVNURklMRVMuY29tbW9uKSBNYWtldmFycy50ZW1wbGF0ZTsgZG8gXAorCSAgICAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpLyQkZmlsZSBcCisJCQkgICAgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisJICBkb25lOyBcCisJICBmb3IgZmlsZSBpbiBNYWtldmFyczsgZG8gXAorCSAgICBybSAtZiAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKKwkgIGRvbmU7IFwKKwllbHNlIFwKKwkgIDogOyBcCisJZmkKK2luc3RhbGwtZGF0YS1ubzogYWxsCitpbnN0YWxsLWRhdGEteWVzOiBhbGwKKwkkKG1rZGlyX3ApICQoREVTVERJUikkKGRhdGFkaXIpCisJQGNhdGFsb2dzPSckKENBVEFMT0dTKSc7IFwKKwlmb3IgY2F0IGluICQkY2F0YWxvZ3M7IGRvIFwKKwkgIGNhdD1gYmFzZW5hbWUgJCRjYXRgOyBcCisJICBsYW5nPWBlY2hvICQkY2F0IHwgc2VkIC1lICdzL1wuZ21vJCQvLydgOyBcCisJICBkaXI9JChsb2NhbGVkaXIpLyQkbGFuZy9MQ19NRVNTQUdFUzsgXAorCSAgJChta2Rpcl9wKSAkKERFU1RESVIpJCRkaXI7IFwKKwkgIGlmIHRlc3QgLXIgJCRjYXQ7IHRoZW4gcmVhbGNhdD0kJGNhdDsgZWxzZSByZWFsY2F0PSQoc3JjZGlyKS8kJGNhdDsgZmk7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJHJlYWxjYXQgJChERVNURElSKSQkZGlyLyQoRE9NQUlOKS5tbzsgXAorCSAgZWNobyAiaW5zdGFsbGluZyAkJHJlYWxjYXQgYXMgJChERVNURElSKSQkZGlyLyQoRE9NQUlOKS5tbyI7IFwKKwkgIGZvciBsYyBpbiAnJyAkKEVYVFJBX0xPQ0FMRV9DQVRFR09SSUVTKTsgZG8gXAorCSAgICBpZiB0ZXN0IC1uICIkJGxjIjsgdGhlbiBcCisJICAgICAgaWYgKGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nICYmIExDX0FMTD1DIGxzIC1sIC1kICQkbGMgMj4vZGV2L251bGwpIHwgZ3JlcCAnIC0+ICcgPi9kZXYvbnVsbDsgdGhlbiBcCisJICAgICAgICBsaW5rPWBjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZyAmJiBMQ19BTEw9QyBscyAtbCAtZCAkJGxjIHwgc2VkIC1lICdzL14uKiAtPiAvLydgOyBcCisJICAgICAgICBtdiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkOyBcCisJICAgICAgICBta2RpciAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICAoY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy5vbGQgJiYgXAorCSAgICAgICAgIGZvciBmaWxlIGluICo7IGRvIFwKKwkgICAgICAgICAgIGlmIHRlc3QgLWYgJCRmaWxlOyB0aGVuIFwKKwkgICAgICAgICAgICAgbG4gLXMgLi4vJCRsaW5rLyQkZmlsZSAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQkZmlsZTsgXAorCSAgICAgICAgICAgZmk7IFwKKwkgICAgICAgICBkb25lKTsgXAorCSAgICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy5vbGQ7IFwKKwkgICAgICBlbHNlIFwKKwkgICAgICAgIGlmIHRlc3QgLWQgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgdGhlbiBcCisJICAgICAgICAgIDo7IFwKKwkgICAgICAgIGVsc2UgXAorCSAgICAgICAgICBybSAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICAgIG1rZGlyICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IFwKKwkgICAgICAgIGZpOyBcCisJICAgICAgZmk7IFwKKwkgICAgICBybSAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbzsgXAorCSAgICAgIGxuIC1zIC4uL0xDX01FU1NBR0VTLyQoRE9NQUlOKS5tbyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbyAyPi9kZXYvbnVsbCB8fCBcCisJICAgICAgbG4gJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVMvJChET01BSU4pLm1vICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vIDI+L2Rldi9udWxsIHx8IFwKKwkgICAgICBjcCAtcCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy9MQ19NRVNTQUdFUy8kKERPTUFJTikubW8gJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW87IFwKKwkgICAgICBlY2hvICJpbnN0YWxsaW5nICQkcmVhbGNhdCBsaW5rIGFzICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vIjsgXAorCSAgICBmaTsgXAorCSAgZG9uZTsgXAorCWRvbmUKKworaW5zdGFsbC1zdHJpcDogaW5zdGFsbAorCitpbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtZXhlYyBpbnN0YWxsZGlycy1kYXRhCitpbnN0YWxsZGlycy1leGVjOgoraW5zdGFsbGRpcnMtZGF0YTogaW5zdGFsbGRpcnMtZGF0YS1AVVNFX05MU0AKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisJICAkKG1rZGlyX3ApICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCitpbnN0YWxsZGlycy1kYXRhLW5vOgoraW5zdGFsbGRpcnMtZGF0YS15ZXM6CisJJChta2Rpcl9wKSAkKERFU1RESVIpJChkYXRhZGlyKQorCUBjYXRhbG9ncz0nJChDQVRBTE9HUyknOyBcCisJZm9yIGNhdCBpbiAkJGNhdGFsb2dzOyBkbyBcCisJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorCSAgbGFuZz1gZWNobyAkJGNhdCB8IHNlZCAtZSAncy9cLmdtbyQkLy8nYDsgXAorCSAgZGlyPSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVM7IFwKKwkgICQobWtkaXJfcCkgJChERVNURElSKSQkZGlyOyBcCisJICBmb3IgbGMgaW4gJycgJChFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyk7IGRvIFwKKwkgICAgaWYgdGVzdCAtbiAiJCRsYyI7IHRoZW4gXAorCSAgICAgIGlmIChjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZyAmJiBMQ19BTEw9QyBscyAtbCAtZCAkJGxjIDI+L2Rldi9udWxsKSB8IGdyZXAgJyAtPiAnID4vZGV2L251bGw7IHRoZW4gXAorCSAgICAgICAgbGluaz1gY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcgJiYgTENfQUxMPUMgbHMgLWwgLWQgJCRsYyB8IHNlZCAtZSAncy9eLiogLT4gLy8nYDsgXAorCSAgICAgICAgbXYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZDsgXAorCSAgICAgICAgbWtkaXIgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgKGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkICYmIFwKKwkgICAgICAgICBmb3IgZmlsZSBpbiAqOyBkbyBcCisJICAgICAgICAgICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBcCisJICAgICAgICAgICAgIGxuIC1zIC4uLyQkbGluay8kJGZpbGUgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kJGZpbGU7IFwKKwkgICAgICAgICAgIGZpOyBcCisJICAgICAgICAgZG9uZSk7IFwKKwkgICAgICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkOyBcCisJICAgICAgZWxzZSBcCisJICAgICAgICBpZiB0ZXN0IC1kICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IHRoZW4gXAorCSAgICAgICAgICA6OyBcCisJICAgICAgICBlbHNlIFwKKwkgICAgICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgICBta2RpciAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICBmaTsgXAorCSAgICAgIGZpOyBcCisJICAgIGZpOyBcCisJICBkb25lOyBcCisJZG9uZQorCisjIERlZmluZSB0aGlzIGFzIGVtcHR5IHVudGlsIEkgZm91bmQgYSB1c2VmdWwgYXBwbGljYXRpb24uCitpbnN0YWxsY2hlY2s6CisKK3VuaW5zdGFsbDogdW5pbnN0YWxsLWV4ZWMgdW5pbnN0YWxsLWRhdGEKK3VuaW5zdGFsbC1leGVjOgordW5pbnN0YWxsLWRhdGE6IHVuaW5zdGFsbC1kYXRhLUBVU0VfTkxTQAorCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKwkgIGZvciBmaWxlIGluICQoRElTVEZJTEVTLmNvbW1vbikgTWFrZXZhcnMudGVtcGxhdGU7IGRvIFwKKwkgICAgcm0gLWYgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisJICBkb25lOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCit1bmluc3RhbGwtZGF0YS1ubzoKK3VuaW5zdGFsbC1kYXRhLXllczoKKwljYXRhbG9ncz0nJChDQVRBTE9HUyknOyBcCisJZm9yIGNhdCBpbiAkJGNhdGFsb2dzOyBkbyBcCisJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorCSAgbGFuZz1gZWNobyAkJGNhdCB8IHNlZCAtZSAncy9cLmdtbyQkLy8nYDsgXAorCSAgZm9yIGxjIGluIExDX01FU1NBR0VTICQoRVhUUkFfTE9DQUxFX0NBVEVHT1JJRVMpOyBkbyBcCisJICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vOyBcCisJICBkb25lOyBcCisJZG9uZQorCitjaGVjazogYWxsCisKK2luZm8gZHZpIHBzIHBkZiBodG1sIHRhZ3MgVEFHUyBjdGFncyBDVEFHUyBJRDoKKworbW9zdGx5Y2xlYW46CisJcm0gLWYgcmVtb3ZlLXBvdGNkYXRlLnNlZAorCXJtIC1mIHN0YW1wLXBvVAorCXJtIC1mIGNvcmUgY29yZS4qICQoRE9NQUlOKS5wbyAkKERPTUFJTikuMXBvICQoRE9NQUlOKS4ycG8gKi5uZXcucG8KKwlybSAtZnIgKi5vCisKK2NsZWFuOiBtb3N0bHljbGVhbgorCitkaXN0Y2xlYW46IGNsZWFuCisJcm0gLWYgTWFrZWZpbGUgTWFrZWZpbGUuaW4gUE9URklMRVMgKi5tbworCittYWludGFpbmVyLWNsZWFuOiBkaXN0Y2xlYW4KKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2U7IgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKKwlybSAtZiBzdGFtcC1wbyAkKEdNT0ZJTEVTKQorCitkaXN0ZGlyID0gJCh0b3BfYnVpbGRkaXIpLyQoUEFDS0FHRSktJChWRVJTSU9OKS8kKHN1YmRpcikKK2Rpc3QgZGlzdGRpcjoKKwkkKE1BS0UpIHVwZGF0ZS1wbworCUAkKE1BS0UpIGRpc3QyCisjIFRoaXMgaXMgYSBzZXBhcmF0ZSB0YXJnZXQgYmVjYXVzZSAndXBkYXRlLXBvJyBtdXN0IGJlIGV4ZWN1dGVkIGJlZm9yZS4KK2Rpc3QyOiBzdGFtcC1wbyAkKERJU1RGSUxFUykKKwlkaXN0cz0iJChESVNURklMRVMpIjsgXAorCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKwkgIGRpc3RzPSIkJGRpc3RzIE1ha2V2YXJzLnRlbXBsYXRlIjsgXAorCWZpOyBcCisJaWYgdGVzdCAtZiAkKHNyY2RpcikvJChET01BSU4pLnBvdDsgdGhlbiBcCisJICBkaXN0cz0iJCRkaXN0cyAkKERPTUFJTikucG90IHN0YW1wLXBvIjsgXAorCWZpOyBcCisJaWYgdGVzdCAtZiAkKHNyY2RpcikvQ2hhbmdlTG9nOyB0aGVuIFwKKwkgIGRpc3RzPSIkJGRpc3RzIENoYW5nZUxvZyI7IFwKKwlmaTsgXAorCWZvciBpIGluIDAgMSAyIDMgNCA1IDYgNyA4IDk7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJChzcmNkaXIpL0NoYW5nZUxvZy4kJGk7IHRoZW4gXAorCSAgICBkaXN0cz0iJCRkaXN0cyBDaGFuZ2VMb2cuJCRpIjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJaWYgdGVzdCAtZiAkKHNyY2RpcikvTElOR1VBUzsgdGhlbiBkaXN0cz0iJCRkaXN0cyBMSU5HVUFTIjsgZmk7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBcCisJICAgIGNwIC1wICQkZmlsZSAkKGRpc3RkaXIpIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIGNwIC1wICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCit1cGRhdGUtcG86IE1ha2VmaWxlCisJJChNQUtFKSAkKERPTUFJTikucG90LXVwZGF0ZQorCXRlc3QgLXogIiQoVVBEQVRFUE9GSUxFUykiIHx8ICQoTUFLRSkgJChVUERBVEVQT0ZJTEVTKQorCSQoTUFLRSkgdXBkYXRlLWdtbworCisjIEdlbmVyYWwgcnVsZSBmb3IgY3JlYXRpbmcgUE8gZmlsZXMuCisKKy5ub3AucG8tY3JlYXRlOgorCUBsYW5nPWBlY2hvICRAIHwgc2VkIC1lICdzL1wucG8tY3JlYXRlJCQvLydgOyBcCisJZWNobyAiRmlsZSAkJGxhbmcucG8gZG9lcyBub3QgZXhpc3QuIElmIHlvdSBhcmUgYSB0cmFuc2xhdG9yLCB5b3UgY2FuIGNyZWF0ZSBpdCB0aHJvdWdoICdtc2dpbml0Jy4iIDE+JjI7IFwKKwlleGl0IDEKKworIyBHZW5lcmFsIHJ1bGUgZm9yIHVwZGF0aW5nIFBPIGZpbGVzLgorCisubm9wLnBvLXVwZGF0ZToKKwlAbGFuZz1gZWNobyAkQCB8IHNlZCAtZSAncy9cLnBvLXVwZGF0ZSQkLy8nYDsgXAorCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFBBVEg9YHB3ZGAvLi4vc3JjOiQkUEFUSDsgZmk7IFwKKwl0bXBkaXI9YHB3ZGA7IFwKKwllY2hvICIkJGxhbmc6IjsgXAorCXRlc3QgIiQoc3JjZGlyKSIgPSAuICYmIGNkY21kPSIiIHx8IGNkY21kPSJjZCAkKHNyY2RpcikgJiYgIjsgXAorCWVjaG8gIiQke2NkY21kfSQoTVNHTUVSR0UpICQkbGFuZy5wbyAkKERPTUFJTikucG90IC1vICQkbGFuZy5uZXcucG8iOyBcCisJY2QgJChzcmNkaXIpOyBcCisJaWYgJChNU0dNRVJHRSkgJCRsYW5nLnBvICQoRE9NQUlOKS5wb3QgLW8gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbzsgdGhlbiBcCisJICBpZiBjbXAgJCRsYW5nLnBvICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgICAgcm0gLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbzsgXAorCSAgZWxzZSBcCisJICAgIGlmIG12IC1mICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gJCRsYW5nLnBvOyB0aGVuIFwKKwkgICAgICA6OyBcCisJICAgIGVsc2UgXAorCSAgICAgIGVjaG8gIm1zZ21lcmdlIGZvciAkJGxhbmcucG8gZmFpbGVkOiBjYW5ub3QgbW92ZSAkJHRtcGRpci8kJGxhbmcubmV3LnBvIHRvICQkbGFuZy5wbyIgMT4mMjsgXAorCSAgICAgIGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgZmk7IFwKKwllbHNlIFwKKwkgIGVjaG8gIm1zZ21lcmdlIGZvciAkJGxhbmcucG8gZmFpbGVkISIgMT4mMjsgXAorCSAgcm0gLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbzsgXAorCWZpCisKKyQoRFVNTVlQT0ZJTEVTKToKKwordXBkYXRlLWdtbzogTWFrZWZpbGUgJChHTU9GSUxFUykKKwlAOgorCitNYWtlZmlsZTogTWFrZWZpbGUuaW4uaW4gTWFrZXZhcnMgJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgQFBPTUFLRUZJTEVERVBTQAorCWNkICQodG9wX2J1aWxkZGlyKSBcCisJICAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRALmluIHBvLWRpcmVjdG9yaWVzCisKK2ZvcmNlOgorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2Ugbm90IHRvIGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9wby9NYWtldmFycyBiL3BvL01ha2V2YXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZWQ5ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9wby9NYWtldmFycwpAQCAtMCwwICsxLDQ3IEBACisjIE1ha2VmaWxlIHZhcmlhYmxlcyBmb3IgUE8gZGlyZWN0b3J5IGluIGFueSBwYWNrYWdlIHVzaW5nIEdOVSBnZXR0ZXh0LgorCisjIFVzdWFsbHkgdGhlIG1lc3NhZ2UgZG9tYWluIGlzIHRoZSBzYW1lIGFzIHRoZSBwYWNrYWdlIG5hbWUuCitET01BSU4gPSAkKEdFVFRFWFRfUEFDS0FHRSkKKworIyBUaGVzZSB0d28gdmFyaWFibGVzIGRlcGVuZCBvbiB0aGUgbG9jYXRpb24gb2YgdGhpcyBkaXJlY3RvcnkuCitzdWJkaXIgPSBwbwordG9wX2J1aWxkZGlyID0gLi4KKworIyBUaGVzZSBvcHRpb25zIGdldCBwYXNzZWQgdG8geGdldHRleHQuCitYR0VUVEVYVF9PUFRJT05TID0gLS1rZXl3b3JkPV8gLS1rZXl3b3JkPU5fCisKKyMgVGhpcyBpcyB0aGUgY29weXJpZ2h0IGhvbGRlciB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byB0aGUgaGVhZGVyIG9mIHRoZQorIyAkKERPTUFJTikucG90IGZpbGUuICBTZXQgdGhpcyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgc3Vycm91bmRpbmcKKyMgcGFja2FnZS4gIChOb3RlIHRoYXQgdGhlIG1zZ3N0ciBzdHJpbmdzLCBleHRyYWN0ZWQgZnJvbSB0aGUgcGFja2FnZSdzCisjIHNvdXJjZXMsIGJlbG9uZyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgcGFja2FnZS4pICBUcmFuc2xhdG9ycyBhcmUKKyMgZXhwZWN0ZWQgdG8gdHJhbnNmZXIgdGhlIGNvcHlyaWdodCBmb3IgdGhlaXIgdHJhbnNsYXRpb25zIHRvIHRoaXMgcGVyc29uCisjIG9yIGVudGl0eSwgb3IgdG8gZGlzY2xhaW0gdGhlaXIgY29weXJpZ2h0LiAgVGhlIGVtcHR5IHN0cmluZyBzdGFuZHMgZm9yCisjIHRoZSBwdWJsaWMgZG9tYWluOyBpbiB0aGlzIGNhc2UgdGhlIHRyYW5zbGF0b3JzIGFyZSBleHBlY3RlZCB0byBkaXNjbGFpbQorIyB0aGVpciBjb3B5cmlnaHQuCitDT1BZUklHSFRfSE9MREVSID0KKworIyBUaGlzIGlzIHRoZSBlbWFpbCBhZGRyZXNzIG9yIFVSTCB0byB3aGljaCB0aGUgdHJhbnNsYXRvcnMgc2hhbGwgcmVwb3J0CisjIGJ1Z3MgaW4gdGhlIHVudHJhbnNsYXRlZCBzdHJpbmdzOgorIyAtIFN0cmluZ3Mgd2hpY2ggYXJlIG5vdCBlbnRpcmUgc2VudGVuY2VzLCBzZWUgdGhlIG1haW50YWluZXIgZ3VpZGVsaW5lcworIyAgIGluIHRoZSBHTlUgZ2V0dGV4dCBkb2N1bWVudGF0aW9uLCBzZWN0aW9uICdQcmVwYXJpbmcgU3RyaW5ncycuCisjIC0gU3RyaW5ncyB3aGljaCB1c2UgdW5jbGVhciB0ZXJtcyBvciByZXF1aXJlIGFkZGl0aW9uYWwgY29udGV4dCB0byBiZQorIyAgIHVuZGVyc3Rvb2QuCisjIC0gU3RyaW5ncyB3aGljaCBtYWtlIGludmFsaWQgYXNzdW1wdGlvbnMgYWJvdXQgbm90YXRpb24gb2YgZGF0ZSwgdGltZSBvcgorIyAgIG1vbmV5LgorIyAtIFBsdXJhbGlzYXRpb24gcHJvYmxlbXMuCisjIC0gSW5jb3JyZWN0IEVuZ2xpc2ggc3BlbGxpbmcuCisjIC0gSW5jb3JyZWN0IGZvcm1hdHRpbmcuCisjIEl0IGNhbiBiZSB5b3VyIGVtYWlsIGFkZHJlc3MsIG9yIGEgbWFpbGluZyBsaXN0IGFkZHJlc3Mgd2hlcmUgdHJhbnNsYXRvcnMKKyMgY2FuIHdyaXRlIHRvIHdpdGhvdXQgYmVpbmcgc3Vic2NyaWJlZCwgb3IgdGhlIFVSTCBvZiBhIHdlYiBwYWdlIHRocm91Z2gKKyMgd2hpY2ggdGhlIHRyYW5zbGF0b3JzIGNhbiBjb250YWN0IHlvdS4KK01TR0lEX0JVR1NfQUREUkVTUyA9IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvCisKKyMgVGhpcyBpcyB0aGUgbGlzdCBvZiBsb2NhbGUgY2F0ZWdvcmllcywgYmV5b25kIExDX01FU1NBR0VTLCBmb3Igd2hpY2ggdGhlCisjIG1lc3NhZ2UgY2F0YWxvZ3Mgc2hhbGwgYmUgdXNlZC4gIEl0IGlzIHVzdWFsbHkgZW1wdHkuCitFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyA9CisKKyMgQXZvaWQgbGluZSBudW1iZXJzIGluICoucG8sIGJ1dCBrZWVwIHRoZW0gaW4gKi5wb3QuCitNU0dNRVJHRSA9IG1zZ21lcmdlIC0tbm8tbG9jYXRpb24KK01TR01FUkdFX1VQREFURSA9IG1zZ21lcmdlIC0tbm8tbG9jYXRpb24gLS11cGRhdGUgLS1iYWNrdXA9b2ZmCitNU0dGSUxURVIgPSBtc2dmaWx0ZXIgLS1uby1sb2NhdGlvbgorCmRpZmYgLS1naXQgYS9wby9QT1RGSUxFUy5pbiBiL3BvL1BPVEZJTEVTLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYzljNzUKLS0tIC9kZXYvbnVsbAorKysgYi9wby9QT1RGSUxFUy5pbgpAQCAtMCwwICsxLDI0IEBACisjIEZpbGVzIGZyb20gdGhlIEdTdHJlYW1lciBkaXN0cmlidXRpb24gd2hpY2ggaGF2ZSBhbHJlYWR5IGJlZW4KKyMgbWFya2VkIHRvIGFsbG93IHJ1bnRpbWUgdHJhbnNsYXRpb25zIG9mIG1lc3NhZ2VzCisKK2dzdC9nc3QuYworZ3N0L2dzdGVsZW1lbnQuYworZ3N0L2dzdGVycm9yLmMKK2dzdC9nc3RwaXBlbGluZS5jCitnc3QvZ3N0dGFnbGlzdC5jCitnc3QvZ3N0dHJhY2UuYworZ3N0L2dzdHV0aWxzLmMKK2dzdC9wYXJzZS9ncmFtbWFyLnkKK2xpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jCitsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmMKK3BsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jCitwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmMKK3BsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmMKK3BsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYworcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmMKK3BsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYworcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jCitwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jCitwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jCit0b29scy9nc3QtaW5zcGVjdC5jCit0b29scy9nc3QtbGF1bmNoLmMKZGlmZiAtLWdpdCBhL3BvL1J1bGVzLXF1b3QgYi9wby9SdWxlcy1xdW90Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMmE5OTUKLS0tIC9kZXYvbnVsbAorKysgYi9wby9SdWxlcy1xdW90CkBAIC0wLDAgKzEsNDcgQEAKKyMgU3BlY2lhbCBNYWtlZmlsZSBydWxlcyBmb3IgRW5nbGlzaCBtZXNzYWdlIGNhdGFsb2dzIHdpdGggcXVvdGF0aW9uIG1hcmtzLgorCitESVNURklMRVMuY29tbW9uLmV4dHJhMSA9IHF1b3Quc2VkIGJvbGRxdW90LnNlZCBlbkBxdW90LmhlYWRlciBlbkBib2xkcXVvdC5oZWFkZXIgaW5zZXJ0LWhlYWRlci5zaW4gUnVsZXMtcXVvdAorCisuU1VGRklYRVM6IC5pbnNlcnQtaGVhZGVyIC5wby11cGRhdGUtZW4KKworZW5AcXVvdC5wby1jcmVhdGU6CisJJChNQUtFKSBlbkBxdW90LnBvLXVwZGF0ZQorZW5AYm9sZHF1b3QucG8tY3JlYXRlOgorCSQoTUFLRSkgZW5AYm9sZHF1b3QucG8tdXBkYXRlCisKK2VuQHF1b3QucG8tdXBkYXRlOiBlbkBxdW90LnBvLXVwZGF0ZS1lbgorZW5AYm9sZHF1b3QucG8tdXBkYXRlOiBlbkBib2xkcXVvdC5wby11cGRhdGUtZW4KKworLmluc2VydC1oZWFkZXIucG8tdXBkYXRlLWVuOgorCUBsYW5nPWBlY2hvICRAIHwgc2VkIC1lICdzL1wucG8tdXBkYXRlLWVuJCQvLydgOyBcCisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dCI7IHRoZW4gUEFUSD1gcHdkYC8uLi9zcmM6JCRQQVRIOyBHRVRURVhUTElCRElSPWBjZCAkKHRvcF9zcmNkaXIpL3NyYyAmJiBwd2RgOyBleHBvcnQgR0VUVEVYVExJQkRJUjsgZmk7IFwKKwl0bXBkaXI9YHB3ZGA7IFwKKwllY2hvICIkJGxhbmc6IjsgXAorCWxsPWBlY2hvICQkbGFuZyB8IHNlZCAtZSAncy9ALiovLydgOyBcCisJTENfQUxMPUM7IGV4cG9ydCBMQ19BTEw7IFwKKwljZCAkKHNyY2Rpcik7IFwKKwlpZiAkKE1TR0lOSVQpIC1pICQoRE9NQUlOKS5wb3QgLS1uby10cmFuc2xhdG9yIC1sICQkbGwgLW8gLSAyPi9kZXYvbnVsbCB8IHNlZCAtZiAkJHRtcGRpci8kJGxhbmcuaW5zZXJ0LWhlYWRlciB8ICQoTVNHQ09OVikgLXQgVVRGLTggfCAkKE1TR0ZJTFRFUikgc2VkIC1mIGBlY2hvICQkbGFuZyB8IHNlZCAtZSAncy8uKkAvLydgLnNlZCAyPi9kZXYvbnVsbCA+ICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IHRoZW4gXAorCSAgaWYgY21wICQkbGFuZy5wbyAkJHRtcGRpci8kJGxhbmcubmV3LnBvID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICAgIHJtIC1mICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IFwKKwkgIGVsc2UgXAorCSAgICBpZiBtdiAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvICQkbGFuZy5wbzsgdGhlbiBcCisJICAgICAgOjsgXAorCSAgICBlbHNlIFwKKwkgICAgICBlY2hvICJjcmVhdGlvbiBvZiAkJGxhbmcucG8gZmFpbGVkOiBjYW5ub3QgbW92ZSAkJHRtcGRpci8kJGxhbmcubmV3LnBvIHRvICQkbGFuZy5wbyIgMT4mMjsgXAorCSAgICAgIGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgZmk7IFwKKwllbHNlIFwKKwkgIGVjaG8gImNyZWF0aW9uIG9mICQkbGFuZy5wbyBmYWlsZWQhIiAxPiYyOyBcCisJICBybSAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyBcCisJZmkKKworZW5AcXVvdC5pbnNlcnQtaGVhZGVyOiBpbnNlcnQtaGVhZGVyLnNpbgorCXNlZCAtZSAnL14jL2QnIC1lICdzL0hFQURFUi9lbkBxdW90LmhlYWRlci9nJyAkKHNyY2RpcikvaW5zZXJ0LWhlYWRlci5zaW4gPiBlbkBxdW90Lmluc2VydC1oZWFkZXIKKworZW5AYm9sZHF1b3QuaW5zZXJ0LWhlYWRlcjogaW5zZXJ0LWhlYWRlci5zaW4KKwlzZWQgLWUgJy9eIy9kJyAtZSAncy9IRUFERVIvZW5AYm9sZHF1b3QuaGVhZGVyL2cnICQoc3JjZGlyKS9pbnNlcnQtaGVhZGVyLnNpbiA+IGVuQGJvbGRxdW90Lmluc2VydC1oZWFkZXIKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXF1b3QKK21vc3RseWNsZWFuLXF1b3Q6CisJcm0gLWYgKi5pbnNlcnQtaGVhZGVyCmRpZmYgLS1naXQgYS9wby9hZi5nbW8gYi9wby9hZi5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVlZWU0NwotLS0gL2Rldi9udWxsCisrKyBiL3BvL2FmLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9hZi5wbyBiL3BvL2FmLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYjMzMDgKLS0tIC9kZXYvbnVsbAorKysgYi9wby9hZi5wbwpAQCAtMCwwICsxLDEyNTMgQEAKKyMgVHJhbnNsYXRpb24gb2YgZ3N0cmVhbWVyIG1lc3NhZ2VzIHRvIEFmcmlrYWFucy4KKyMgQ29weXJpZ2h0IChDKSAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgorIyBQZXRyaSBKb29zdGUgPHJrd2pwakBwdWsuYWMuemE+LCAyMDA0LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDAuOS43XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDktMjkgMTQ6NTUrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDUtMTItMDUgMTE6NDUrMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogUGV0cmkgSm9vc3RlIDxya3dqcGpAcHVrLmFjLnphPlxuIgorIkxhbmd1YWdlLVRlYW06IEFmcmlrYWFucyA8aTE4bkBhZi5vcmcuemE+XG4iCisiTGFuZ3VhZ2U6IGFmXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKK21zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCittc2dzdHIgIlZlcnRvb24gZGllIEdTdHJlYW1lciB3ZWVyZ2F3ZSIKKworbXNnaWQgIk1ha2UgYWxsIHdhcm5pbmdzIGZhdGFsIgorbXNnc3RyICJNYWFrIGFsbGUgd2FhcnNrdXdpbmdzIGZhdGFhbCIKKworbXNnaWQgIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IgorbXNnc3RyICJWZXJ0b29uIGJlc2tpa2JhcmUgb250Zm91dGthdGVnb3Jpw6sgZW4gc3RvcCIKKworbXNnaWQgIiIKKyJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gNSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKK21zZ3N0ciAiIgorIlZlcnN0ZWsgb250Zm91dHZsYWsgdmFuYWYgMSAoc2xlZ3MgZm91dCkgdG90IDUgKGVuaWdpZXRzKSBvZiAwIHZpciBnZWVuICIKKyJhZnZvZXIiCisKK21zZ2lkICJMRVZFTCIKK21zZ3N0ciAiVkxBSyIKKworbXNnaWQgIiIKKyJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yICIKKyJ0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCittc2dzdHIgIiIKKyJLb21tYS1nZXNrZWlkZSBseXMgdmFuIGthdGVnb3JpZV9uYWFtOnZsYWsgcGFyZSBvbSBkaWUgaW5kaXZpZHVlbGUgIgorImthdGVnb3JpZcOrIG9wIHRlIHN0ZWwuIEJ5dm9vcmJlZWxkOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCisKK21zZ2lkICJMSVNUIgorbXNnc3RyICJMWVMiCisKK21zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKK21zZ3N0ciAiU2tha2VsIGdla2xldXJkZSBvbnRmb3V0LWFmdm9lciBhZiIKKworbXNnaWQgIkRpc2FibGUgZGVidWdnaW5nIgorbXNnc3RyICJTa2FrZWwgb250Zm91dGluZyBhZiIKKworbXNnaWQgIkVuYWJsZSB2ZXJib3NlIHBsdWdpbiBsb2FkaW5nIGRpYWdub3N0aWNzIgorbXNnc3RyICJBa3RpdmVlciB2b2xsZWRpZ2UgZGlhZ25vc3RpZXNlIGJvb2Rza2FwcGUgdmlyIGlucHJvcGxhYWlpbmciCisKK21zZ2lkICJDb2xvbi1zZXBhcmF0ZWQgcGF0aHMgY29udGFpbmluZyBwbHVnaW5zIgorbXNnc3RyICJEdWJiZWxwdW50LWdlc2tlaWRlIHBhYWllIHdhdCBpbnByb3BwZSBiZXZhdCIKKworbXNnaWQgIlBBVEhTIgorbXNnc3RyICJQQUFJRSIKKworbXNnaWQgIiIKKyJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwbHVnaW5zIHRvIHByZWxvYWQgaW4gYWRkaXRpb24gdG8gdGhlIGxpc3Qgc3RvcmVkIGluICIKKyJlbnZpcm9ubWVudCB2YXJpYWJsZSBHU1RfUExVR0lOX1BBVEgiCittc2dzdHIgIiIKKyJLb21tYS1nZXNrZWlkZSBseXMgdmFuIGlucHJvcHBlIG9tIHZvb3JhZiB0ZSBsYWFpIGJ5IGRpZSBseXMgZ2VzdG9vciBpbiBkaWUgIgorIm9tZ2V3aW5nc3ZlcmFuZGVybGlrZSBHU1RfUExVR0lOX1BBVEgiCisKK21zZ2lkICJQTFVHSU5TIgorbXNnc3RyICJJTlBST1BQRSIKKworbXNnaWQgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCittc2dzdHIgIk1vZW5pZSBzZWdtZW50ZXJpbmdzZm91dGUgdHlkZW5zIGlucHJvcGxhYWlpbmcgb25kZXJ2YW5nIG5pZSIKKworbXNnaWQgIkRpc2FibGUgdXBkYXRpbmcgdGhlIHJlZ2lzdHJ5IgorbXNnc3RyICIiCisKK21zZ2lkICJEaXNhYmxlIHNwYXduaW5nIGEgaGVscGVyIHByb2Nlc3Mgd2hpbGUgc2Nhbm5pbmcgdGhlIHJlZ2lzdHJ5IgorbXNnc3RyICIiCisKK21zZ2lkICJHU3RyZWFtZXIgT3B0aW9ucyIKK21zZ3N0ciAiR1N0cmVhbWVyIE9wc2llcyIKKworbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgIld5cyBHU3RyZWFtZXIgb3BzaWVzIgorCittc2dpZCAiVW5rbm93biBvcHRpb24iCittc2dzdHIgIk9uYmVrZW5kZSBvcHNpZSIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgY29yZSBsaWJyYXJ5IGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIGhldCAnbiBmb3V0IHRlw6tnZWtvbSBpbiBkaWUgYWxnZW1lbmUga2VybmJpYmxpb3RlZWsuIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyBlcnJvci4iCittc2dzdHIgIiIKKyJHU3RyZWFtZXIgb250d2lra2VsYWFycyB3YXMgdGUgbHVpIG9tICduIGZvdXRrb2RlIHZpciBoaWVyZGllIGZvdXQgdG9lIHRlICIKKyJrZW4uICAiCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKK21zZ3N0ciAiSW50ZXJuZSBHU3RyZWFtZXItZm91dDogY29kZSBub3QgaW1wbGVtZW50ZWQuIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgorInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHBhZCBwcm9ibGVtLiIKK21zZ3N0ciAiSW50ZXJuZSBHU3RyZWFtZXItZm91dDogcGFkIHByb2JsZW0uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iCittc2dzdHIgIkludGVybmUgR1N0cmVhbWVyLWZvdXQ6IHRocmVhZCBwcm9ibGVtLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCittc2dzdHIgIkludGVybmUgR1N0cmVhbWVyLWZvdXQ6IG5lZ290aWF0aW9uIHByb2JsZW0uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBldmVudCBwcm9ibGVtLiIKK21zZ3N0ciAiSW50ZXJuZSBHU3RyZWFtZXItZm91dDogZXZlbnQgcHJvYmxlbS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4iCittc2dzdHIgIkludGVybmUgR1N0cmVhbWVyLWZvdXQ6IHNlZWsgcHJvYmxlbS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNhcHMgcHJvYmxlbS4iCittc2dzdHIgIkludGVybmUgR1N0cmVhbWVyLWZvdXQ6IGNhcHMgcHJvYmxlbS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKK21zZ3N0ciAiSW50ZXJuZSBHU3RyZWFtZXItZm91dDogdGFnIHByb2JsZW0uIgorCittc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKK21zZ3N0ciAiSm91IEdTdHJlYW1lci1pbnN0YWxsYXNpZSBrb3J0ICduIGlucHJvcC4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIgorbXNnc3RyICJJbnRlcm5lIEdTdHJlYW1lci1mb3V0OiBzZWVrIHByb2JsZW0uIgorCittc2dpZCAiIgorIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGhhcyBiZWVuICIKKyJkaXNhYmxlZC4iCittc2dzdHIgIiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3VwcG9ydGluZyBsaWJyYXJ5IGVycm9yLiIKK21zZ3N0ciAiIgorIkdTdHJlYW1lciBoZXQgJ24gZm91dCB0ZcOrZ2Vrb20gaW4gJ24gYWxnZW1lbmUgb25kZXJzdGV1bmluZ3NiaWJsaW90ZWVrLiIKKworbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIk9uZGVyc3RldW5pbmdzYmlibGlvdGVlayBrb24gbmllIGFhbiBkaWUgZ2FuZyBnZXNpdCB3b3JkIG5pZS4iCisKK21zZ2lkICJDb3VsZCBub3QgY2xvc2Ugc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiS29uIG5pZSBvbmRlcnN0ZXVuZW5kZSBiaWJsaW90ZWVrIHRvZW1hYWsgbmllLiIKKworIywgZnV6enkKK21zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIktvbiBuaWUgb25kZXJzdGV1bmVuZGUgYmlibGlvdGVlayB0b2VtYWFrIG5pZS4iCisKK21zZ2lkICJFbmNvZGluZyBlcnJvci4iCittc2dzdHIgIiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIgaGV0ICduIGFsZ2VtZW5lIGh1bHBicm9uZm91dCB0ZcOrZ2Vrb20uIgorCittc2dpZCAiUmVzb3VyY2Ugbm90IGZvdW5kLiIKK21zZ3N0ciAiSHVscGJyb24gbmllIGdldmluZCBuaWUuIgorCittc2dpZCAiUmVzb3VyY2UgYnVzeSBvciBub3QgYXZhaWxhYmxlLiIKK21zZ3N0ciAiSHVscGJyb24gaXMgYmVzaWcgb2YgbmllIGJlc2tpa2JhYXIgbmllLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiS29uIG5pZSBodWxwYnJvbiBvb3BtYWFrIG9tIHRlIGxlZXMgbmllLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiS29uIG5pZSBodWxwYnJvbiBvb3BtYWFrIG9tIHRlIHNrcnlmIG5pZS4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCittc2dzdHIgIktvbiBuaWUgaHVscGJyb24gb29wbWFhayB2aXIgbGVlcyBlbiBza3J5ZiBuaWUuIgorCittc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKK21zZ3N0ciAiS29uIG5pZSBodWxwYnJvbiB0b2VtYWFrIG5pZS4iCisKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIHJlc291cmNlLiIKK21zZ3N0ciAiS29uIG5pZSB1aXQgaHVscGJyb24gbGVlcyBuaWUuIgorCittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKK21zZ3N0ciAiS29uIG5pZSBuYSBodWxwYnJvbiBza3J5ZiBuaWUuIgorCittc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCittc2dzdHIgIktvbiBuaWUgc29la29wZHJhZyB1aXR2b2VyIG9wIGh1bHBicm9uIG5pZS4iCisKK21zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgorbXNnc3RyICJLb24gbmllIGh1bHBicm9uIHNpbmtyb25pc2VlciBuaWUuIgorCittc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCittc2dzdHIgIktvbiBuaWUgaHVscGJyb25zdGVsbGluZ3MgdmVya3J5L3ZlcmFuZGVyIG5pZS4iCisKK21zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCittc2dzdHIgIiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIGhldCAnbiBhbGdlbWVuZSBzdHJvb21mb3V0IHRlw6tnZWtvbS4iCisKK21zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCittc2dzdHIgIiIKKyJFbGVtZW50IGltcGxlbWVudGVlciBuaWUgZGllIGhhbnRlcmluZyB2YW4gaGllcmRpZSBzdHJvb20gbmllLiAgTWVsZCBhc2IuICduICIKKyJmb3V0IGFhbi4iCisKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIHR5cGUgb2Ygc3RyZWFtLiIKK21zZ3N0ciAiS29uIG5pZSBkaWUgc3Ryb29tdGlwZSBiZXBhYWwgbmllLiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKK21zZ3N0ciAiIgorIkRpZSBzdHJvb20gaXMgbmllIHZhbiBkaWVzZWxmZGUgdGlwZSBhcyB3YXQgZGV1ciBkaWUgZWxlbWVudCBoYW50ZWVyIHdvcmQgIgorIm5pZS4iCisKK21zZ2lkICJUaGVyZSBpcyBubyBjb2RlYyBwcmVzZW50IHRoYXQgY2FuIGhhbmRsZSB0aGUgc3RyZWFtJ3MgdHlwZS4iCittc2dzdHIgIiIKKyJEYWFyIGlzIG5pZSAnbiBrb2RlayBiZXNraWtiYWFyIG9tIGhpZXJkaWUgc3Ryb29tIHNlIHRpcGUgdGUgaGFudGVlciBuaWUuIgorCittc2dpZCAiQ291bGQgbm90IGRlY29kZSBzdHJlYW0uIgorbXNnc3RyICJLb24gbmllIHN0cm9vbSBkZWtvZGVlciBuaWUuIgorCittc2dpZCAiQ291bGQgbm90IGVuY29kZSBzdHJlYW0uIgorbXNnc3RyICJLb24gbmllIHN0cm9vbSBlbmtvZGVlciBuaWUuIgorCittc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIktvbiBuaWUgc3Ryb29tIGRlbXVsdGlwbGVrc2VlciBuaWUuIgorCittc2dpZCAiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIgorbXNnc3RyICJLb24gbmllIHN0cm9vbSBtdWx0aXBsZWtzZWVyIG5pZS4iCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIgorbXNnc3RyICIiCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKKyJiZWVuIHN1cHBsaWVkLiIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCittc2dzdHIgIkdlZW4gZm91dGJvb2Rza2FwIHZpciBkb21laW4gJXMuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcyBhbmQgY29kZSAlZC4iCittc2dzdHIgIkdlZW4gc3RhbmRhYXJkIGZvdXRib29kc2thcCB2aXIgZG9tZWluICVzIGVuIGtvZGUgJWQuIgorCittc2dpZCAiU2VsZWN0ZWQgY2xvY2sgY2Fubm90IGJlIHVzZWQgaW4gcGlwZWxpbmUuIgorbXNnc3RyICIiCisKK21zZ2lkICJ0aXRsZSIKK21zZ3N0ciAidGl0ZWwiCisKK21zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIgorbXNnc3RyICJhbGdlbWVlbmJla2VuZGUgdGl0ZWwiCisKK21zZ2lkICJ0aXRsZSBzb3J0bmFtZSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgImFsZ2VtZWVuYmVrZW5kZSB0aXRlbCIKKworbXNnaWQgImFydGlzdCIKK21zZ3N0ciAia3Vuc3RlbmFhciIKKworbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAicGVyc29vbihlKSB2ZXJhbnR3b29yZGVsaWsgdmlyIGRpZSBvcG5hbWUiCisKK21zZ2lkICJhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgInBlcnNvb24oZSkgdmVyYW50d29vcmRlbGlrIHZpciBkaWUgb3BuYW1lIgorCittc2dpZCAiYWxidW0iCittc2dzdHIgImFsYnVtIgorCittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiCittc2dzdHIgImFsYnVtIHdhdCBoaWVyZGllIGRhdGEgYmV2YXQiCisKK21zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJhbGJ1bSB3YXQgaGllcmRpZSBkYXRhIGJldmF0IgorCisjLCBmdXp6eQorbXNnaWQgImFsYnVtIGFydGlzdCIKK21zZ3N0ciAia3Vuc3RlbmFhciIKKworbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIGRpc3BsYXllZCIKK21zZ3N0ciAiIgorCittc2dpZCAiYWxidW0gYXJ0aXN0IHNvcnRuYW1lIgorbXNnc3RyICIiCisKK21zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiCittc2dzdHIgIiIKKworbXNnaWQgImRhdGUiCittc2dzdHIgImRhdHVtIgorCittc2dpZCAiZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHRGF0ZSBzdHJ1Y3R1cmUpIgorbXNnc3RyICJkaWUgZGF0dW0gd2Fhcm9wIGRpZSBkYXRhIGdlc2tlcCBpcyAoYXMgJ24gR0RhdGUtc3RydWt0dXVyKSIKKworIywgZnV6enkKK21zZ2lkICJkYXRldGltZSIKK21zZ3N0ciAiZGF0dW0iCisKKyMsIGZ1enp5Cittc2dpZCAiZGF0ZSBhbmQgdGltZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHc3REYXRlVGltZSBzdHJ1Y3R1cmUpIgorbXNnc3RyICJkaWUgZGF0dW0gd2Fhcm9wIGRpZSBkYXRhIGdlc2tlcCBpcyAoYXMgJ24gR0RhdGUtc3RydWt0dXVyKSIKKworbXNnaWQgImdlbnJlIgorbXNnc3RyICJnZW5yZSIKKworbXNnaWQgImdlbnJlIHRoaXMgZGF0YSBiZWxvbmdzIHRvIgorbXNnc3RyICJnZW5yZSB3YWFydG9lIGhpZXJkaWUgZGF0YSBiZWhvb3J0IgorCittc2dpZCAiY29tbWVudCIKK21zZ3N0ciAia29tbWVudGFhciIKKworbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIgorbXNnc3RyICJ2cnllIHRla3MgbWV0IGtvbW1lbnRhYXIgb3AgZGllIGRhdGEiCisKKyMsIGZ1enp5Cittc2dpZCAiZXh0ZW5kZWQgY29tbWVudCIKK21zZ3N0ciAia29tbWVudGFhciIKKworIywgZnV6enkKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCittc2dzdHIgInZyeWUgdGVrcyBtZXQga29tbWVudGFhciBvcCBkaWUgZGF0YSIKKworbXNnaWQgInRyYWNrIG51bWJlciIKK21zZ3N0ciAic25pdG5vbW1lciIKKworbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICJzbml0bm9tbWVyIGJpbm5lIGRpZSB2ZXJzYW1lbGluZyIKKworbXNnaWQgInRyYWNrIGNvdW50IgorbXNnc3RyICJhYW50YWwgc25pdHRlIgorCittc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKK21zZ3N0ciAiYWFudGFsIHNuaXR0ZSBpbiBkaWUgdmVyc2FtZWxpbmcgd2FhcnVpdCBoaWVyZGllIHNuaXQga29tIgorCittc2dpZCAiZGlzYyBudW1iZXIiCittc2dzdHIgInNreWZub21tZXIiCisKK21zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICJza3lmbm9tbWVyIGJpbm5lICduIHZlcnNhbWVsaW5nIgorCittc2dpZCAiZGlzYyBjb3VudCIKK21zZ3N0ciAiYWFudGFsIHNreXdlIgorCittc2dpZCAiY291bnQgb2YgZGlzY3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyBkaXNjIGJlbG9uZ3MgdG8iCittc2dzdHIgImFhbnRhbCBza3l3ZSBpbiBkaWUgdmVyc2FtZWxpbmcgd2FhcnVpdCBoaWVyZGllIHNreWYga29tIgorCittc2dpZCAibG9jYXRpb24iCittc2dzdHIgImxpZ2dpbmciCisKK21zZ2lkICIiCisiT3JpZ2luIG9mIG1lZGlhIGFzIGEgVVJJIChsb2NhdGlvbiwgd2hlcmUgdGhlIG9yaWdpbmFsIG9mIHRoZSBmaWxlIG9yIHN0cmVhbSAiCisiaXMgaG9zdGVkKSIKK21zZ3N0ciAiIgorCittc2dpZCAiaG9tZXBhZ2UiCittc2dzdHIgIiIKKworbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCittc2dzdHIgIiIKKworbXNnaWQgImRlc2NyaXB0aW9uIgorbXNnc3RyICJiZXNrcnl3aW5nIgorCittc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgorbXNnc3RyICJrb3J0IHRla3Mgd2F0IGRpZSBpbmhvdWQgdmFuIGRpZSBkYXRhIGJlc2tyeWYiCisKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICJ3ZWVyZ2F3ZSIKKworbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgorbXNnc3RyICJ3ZWVyZ2F3ZSB2YW4gaGllcmRpZSBkYXRhIgorCittc2dpZCAiSVNSQyIKK21zZ3N0ciAiSVNSQyIKKworbXNnaWQgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKK21zZ3N0ciAiSW50ZXJuYXNpb25hbGUgU3RhbmRhYXJkIE9wbmFtZWtvZGUgLSBzaWVuIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCisKK21zZ2lkICJvcmdhbml6YXRpb24iCittc2dzdHIgIm9yZ2FuaXphdGlvbiIKKworbXNnaWQgImNvcHlyaWdodCIKK21zZ3N0ciAia29waWVyZWciCisKK21zZ2lkICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJrb3BpZXJlZ25vdGEgdmFuIGRpZSBkYXRhIgorCisjLCBmdXp6eQorbXNnaWQgImNvcHlyaWdodCB1cmkiCittc2dzdHIgImtvcGllcmVnIgorCisjLCBmdXp6eQorbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAia29waWVyZWdub3RhIHZhbiBkaWUgZGF0YSIKKworIywgZnV6enkKK21zZ2lkICJlbmNvZGVkIGJ5IgorbXNnc3RyICJlbmtvZGVlcmRlciIKKworbXNnaWQgIm5hbWUgb2YgdGhlIGVuY29kaW5nIHBlcnNvbiBvciBvcmdhbml6YXRpb24iCittc2dzdHIgIiIKKworbXNnaWQgImNvbnRhY3QiCittc2dzdHIgImtvbnRhayIKKworbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCittc2dzdHIgImtvbnRha2luZm9ybWFzaWUiCisKK21zZ2lkICJsaWNlbnNlIgorbXNnc3RyICJsaXNlbnNpZSIKKworbXNnaWQgImxpY2Vuc2Ugb2YgZGF0YSIKK21zZ3N0ciAiZGF0YWxpc2Vuc2llIgorCisjLCBmdXp6eQorbXNnaWQgImxpY2Vuc2UgdXJpIgorbXNnc3RyICJsaXNlbnNpZSIKKworIywgZnV6enkKK21zZ2lkICJVUkkgdG8gdGhlIGxpY2Vuc2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgImRhdGFsaXNlbnNpZSIKKworbXNnaWQgInBlcmZvcm1lciIKK21zZ3N0ciAia3Vuc3RlbmFhciIKKworbXNnaWQgInBlcnNvbihzKSBwZXJmb3JtaW5nIgorbXNnc3RyICJrdW5zdGVuYWFyKHMpIgorCittc2dpZCAiY29tcG9zZXIiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciCittc2dzdHIgInBlcnNvb24oZSkgdmVyYW50d29vcmRlbGlrIHZpciBkaWUgb3BuYW1lIgorCittc2dpZCAiZHVyYXRpb24iCittc2dzdHIgImR1dXIiCisKK21zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKK21zZ3N0ciAibGVuZ3RlIGluIEdTdHJlYW1lciB0eWRlZW5oZWRlIChuYW5vc2Vrb25kZXMpIgorCittc2dpZCAiY29kZWMiCittc2dzdHIgImtvZGVrIgorCittc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJrb2RlayB3YWFybWVlIGRpZSBkYXRhIGdlc3Rvb3IgaXMiCisKK21zZ2lkICJ2aWRlbyBjb2RlYyIKK21zZ3N0ciAidmlkZW8ta29kZWsiCisKK21zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImtvZGVrIHdhYXJtZWUgZGllIHZpZGVvZGF0YSBnZXN0b29yIGlzIgorCittc2dpZCAiYXVkaW8gY29kZWMiCittc2dzdHIgIm91ZGlvLWtvZGVrIgorCittc2dpZCAiY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJrb2RlayB3YWFybWVlIGRpZSBvdWRpb2RhdGEgZ2VzdG9vciBpcyIKKworIywgZnV6enkKK21zZ2lkICJzdWJ0aXRsZSBjb2RlYyIKK21zZ3N0ciAidmlkZW8ta29kZWsiCisKKyMsIGZ1enp5Cittc2dpZCAiY29kZWMgdGhlIHN1YnRpdGxlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJrb2RlayB3YWFybWVlIGRpZSB2aWRlb2RhdGEgZ2VzdG9vciBpcyIKKworIywgZnV6enkKK21zZ2lkICJjb250YWluZXIgZm9ybWF0IgorbXNnc3RyICJrb250YWtpbmZvcm1hc2llIgorCisjLCBmdXp6eQorbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJrb2RlayB3YWFybWVlIGRpZSBkYXRhIGdlc3Rvb3IgaXMiCisKK21zZ2lkICJiaXRyYXRlIgorbXNnc3RyICJiaXN0ZW1wbyIKKworbXNnaWQgImV4YWN0IG9yIGF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgInByZXNpZXNlIG9mIGdpbWlkZGVsZGUgYmlzdGVtcG8gaW4gYmlzc2Uvc2Vrb25kZSIKKworbXNnaWQgIm5vbWluYWwgYml0cmF0ZSIKK21zZ3N0ciAibm9taW5hbGUgYmlzdGVtcG8iCisKK21zZ2lkICJub21pbmFsIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJub21taW5hbGUgYmlzdGVtcG8gaXMgYmlzc2Uvc2Vrb25kZSIKKworbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKK21zZ3N0ciAibWluaW11bSBiaXN0ZW1wbyIKKworbXNnaWQgIm1pbmltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgIm1pbmltdW0gYmlzdGVtcG8gaXMgYmlzc2UvcyIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSIKK21zZ3N0ciAibWFrc2ltdW0gYmlzdGVtcG8iCisKK21zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJtYWtzaW11bSBiaXN0ZW1wbyBpbiBiaXNzZS9zZWtvbmRlIgorCittc2dpZCAiZW5jb2RlciIKK21zZ3N0ciAiZW5rb2RlZXJkZXIiCisKK21zZ2lkICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgorbXNnc3RyICJlbmtvZGVlcmRlciB3YXQgaGllcmRpZSBzdHJvb20gZW5rb2RlZXIiCisKK21zZ2lkICJlbmNvZGVyIHZlcnNpb24iCittc2dzdHIgImVua29kZWVyZGVyd2Vlcmdhd2UiCisKK21zZ2lkICJ2ZXJzaW9uIG9mIHRoZSBlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgorbXNnc3RyICJ3ZWVyZ2F3ZSB2YW4gZGllIGVua29kZWVyZGVyIHdhdCBoaWVyZGllIHN0cm9vbSBlbmtvZGVlciIKKworbXNnaWQgInNlcmlhbCIKK21zZ3N0ciAicmVla3MiCisKK21zZ2lkICJzZXJpYWwgbnVtYmVyIG9mIHRyYWNrIgorbXNnc3RyICJzZXJpZW5vbW1lciB2YW4gc25pdCIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKK21zZ3N0ciAidGVydWdzcGVlbHZlcnN0ZXJraW5nIHNuaXR2ZXJzdGVya2luZyIKKworbXNnaWQgInRyYWNrIGdhaW4gaW4gZGIiCittc2dzdHIgInNuaXR2ZXJzdGVya2luZyAoaW4gZGIpIgorCittc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBwZWFrIgorbXNnc3RyICJ0ZXJ1Z3NwZWVsdmVyc3Rlcmtpbmcgc25pdHRvcHB1bnQiCisKK21zZ2lkICJwZWFrIG9mIHRoZSB0cmFjayIKK21zZ3N0ciAidG9wcHVudCB2YW4gZGllIHNuaXQiCisKK21zZ2lkICJyZXBsYXlnYWluIGFsYnVtIGdhaW4iCittc2dzdHIgInRlcnVnc3BlZWx2ZXJzdGVya2luZyBhbGJ1bXZlcnN0ZXJraW5nIgorCittc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKK21zZ3N0ciAiYWxidW12ZXJzdGVya2luZyAoaW4gZGIpIgorCittc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBwZWFrIgorbXNnc3RyICJ0ZXJ1Z3NwZWVsdmVyc3RlcmtpbmcgYWxidW10b3BwdW50IgorCittc2dpZCAicGVhayBvZiB0aGUgYWxidW0iCittc2dzdHIgInRvcHB1bnQgdmFuIGRpZSBhbGJ1bSIKKworIywgZnV6enkKK21zZ2lkICJyZXBsYXlnYWluIHJlZmVyZW5jZSBsZXZlbCIKK21zZ3N0ciAidGVydWdzcGVlbHZlcnN0ZXJraW5nIHNuaXR0b3BwdW50IgorCittc2dpZCAicmVmZXJlbmNlIGxldmVsIG9mIHRyYWNrIGFuZCBhbGJ1bSBnYWluIHZhbHVlcyIKK21zZ3N0ciAiIgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSIKK21zZ3N0ciAidGFhbGtvZGUiCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIGZvciB0aGlzIHN0cmVhbSwgY29uZm9ybWluZyB0byBJU08tNjM5LTEiCittc2dzdHIgInRhYWxrb2RlIHZpciBoaWVyZGllIHN0cm9vbSwgd2F0IHZvbGRvZW4gYWFuIElTTy02MzktMSIKKworbXNnaWQgImltYWdlIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiZW5rb2RlZXJkZXIgd2F0IGhpZXJkaWUgc3Ryb29tIGVua29kZWVyIgorCisjLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKK21zZ2lkICJwcmV2aWV3IGltYWdlIgorbXNnc3RyICIiCisKK21zZ2lkICJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgIiIKKworbXNnaWQgImF0dGFjaG1lbnQiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJmaWxlIGF0dGFjaGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICJlbmtvZGVlcmRlciB3YXQgaGllcmRpZSBzdHJvb20gZW5rb2RlZXIiCisKK21zZ2lkICJiZWF0cyBwZXIgbWludXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKK21zZ3N0ciAiIgorCittc2dpZCAia2V5d29yZHMiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKK21zZ3N0ciAia29ydCB0ZWtzIHdhdCBkaWUgaW5ob3VkIHZhbiBkaWUgZGF0YSBiZXNrcnlmIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBuYW1lIgorbXNnc3RyICJsaWdnaW5nIgorCittc2dpZCAiIgorImh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aXZlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciAiCisicHJvZHVjZWQiCittc2dzdHIgIiIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBsYXRpdHVkZSIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorImdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yICIKKyJzb3V0aGVybiBsYXRpdHVkZXMpIgorbXNnc3RyICIiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbG9uZ2l0dWRlIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCisibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgorbXNnc3RyICIiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gZWxldmF0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKKyJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIGNvdW50cnkiCittc2dzdHIgImxpZ2dpbmciCisKK21zZ2lkICJjb3VudHJ5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBjaXR5IgorbXNnc3RyICJsaWdnaW5nIgorCittc2dpZCAiY2l0eSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gc3VibG9jYXRpb24iCittc2dzdHIgImxpZ2dpbmciCisKK21zZ2lkICIiCisiYSBsb2NhdGlvbiB3aGl0aGluIGEgY2l0eSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgb3IgY3JlYXRlZCAoZS5nLiAiCisidGhlIG5laWdoYm9yaG9vZCkiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gaG9yaXpvbnRhbCBlcnJvciIKK21zZ3N0ciAibGlnZ2luZyIKKworbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgorbXNnc3RyICJsaWdnaW5nIgorCittc2dpZCAiIgorIm1vdmVtZW50IHNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgaW4gbS9zIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKK21zZ3N0ciAibGlnZ2luZyIKKworbXNnaWQgIiIKKyJpbmRpY2F0ZXMgdGhlIG1vdmVtZW50IGRpcmVjdGlvbiBvZiB0aGUgZGV2aWNlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgb2YgYSAiCisibWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sIDAgIgorIm1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBjYXB0dXJlIGRpcmVjdGlvbiIKK21zZ3N0ciAibGlnZ2luZyIKKworbXNnaWQgIiIKKyJpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nICBhIG1lZGlhLiAiCisiSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCAgcmVwcmVzZW50YXRpb24sIDAgbWVhbnMgdGhlICIKKyJnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKK21zZ2lkICJzaG93IG5hbWUiCittc2dzdHIgIiIKKworbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICdzaG93IHNvcnRuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZSBhcyB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzJyBoZXJlCittc2dpZCAic2hvdyBzb3J0bmFtZSIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20sIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZXBpc29kZSBudW1iZXIiCittc2dzdHIgInNreWZub21tZXIiCisKK21zZ2lkICJUaGUgZXBpc29kZSBudW1iZXIgaW4gdGhlIHNlYXNvbiB0aGUgbWVkaWEgaXMgcGFydCBvZiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgInNlYXNvbiBudW1iZXIiCittc2dzdHIgInNreWZub21tZXIiCisKK21zZ2lkICJUaGUgc2Vhc29uIG51bWJlciBvZiB0aGUgc2hvdyB0aGUgbWVkaWEgaXMgcGFydCBvZiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImx5cmljcyIKK21zZ3N0ciAibGlzZW5zaWUiCisKK21zZ2lkICJUaGUgbHlyaWNzIG9mIHRoZSBtZWRpYSwgY29tbW9ubHkgdXNlZCBmb3Igc29uZ3MiCittc2dzdHIgIiIKKworbXNnaWQgImNvbXBvc2VyIHNvcnRuYW1lIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAicGVyc29vbihlKSB2ZXJhbnR3b29yZGVsaWsgdmlyIGRpZSBvcG5hbWUiCisKK21zZ2lkICJncm91cGluZyIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKKyJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAidXNlciByYXRpbmciCittc2dzdHIgImR1dXIiCisKK21zZ2lkICIiCisiUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCisidGhpcyBtZWRpYSIKK21zZ3N0ciAiIgorCittc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIk1hbnVmYWN0dXJlciBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCittc2dzdHIgIndlZXJnYXdlIHZhbiBkaWUgZW5rb2RlZXJkZXIgd2F0IGhpZXJkaWUgc3Ryb29tIGVua29kZWVyIgorCittc2dpZCAiZGV2aWNlIG1vZGVsIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICJ3ZWVyZ2F3ZSB2YW4gZGllIGVua29kZWVyZGVyIHdhdCBoaWVyZGllIHN0cm9vbSBlbmtvZGVlciIKKworIywgZnV6enkKK21zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgorbXNnc3RyICJsaWdnaW5nIgorCisjLCBmdXp6eQorbXNnaWQgIkFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSIKK21zZ3N0ciAid2Vlcmdhd2UgdmFuIGRpZSBlbmtvZGVlcmRlciB3YXQgaGllcmRpZSBzdHJvb20gZW5rb2RlZXIiCisKK21zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgorbXNnc3RyICIiCisKK21zZ2lkICJBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIG1lZGlhIgorbXNnc3RyICIiCisKK21zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKK21zZ3N0ciAiIgorCittc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgorbXNnc3RyICIiCisKK21zZ2lkICIsICIKK21zZ3N0ciAiLCAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAiRk9VVDogdmFuYWYgZWxlbWVudCAlczogJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQWRkaXRpb25hbCBkZWJ1ZyBpbmZvOlxuIgorIiVzXG4iCittc2dzdHIgIiIKKyJBZGRpc2lvbmVsZSBvbnRmb3V0LWlubGlndGluZzpcbiIKKyIlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgInNwZWNpZmllZCBlbXB0eSBiaW4gXCIlc1wiLCBub3QgYWxsb3dlZCIKK21zZ3N0ciAiZ2VzcGVzaWZpc2VlcmRlIGxlw6sgaG91ZXIgXCIlc1wiIGlzIG9udG9lbGFhdGJhYXIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYmluIFwiJXNcIiwgc2tpcHBpbmciCittc2dzdHIgImdlZW4gaG91ZXIgXCIlc1wiLCBkaXQgd29yZCBvb3JnZXNsYWFuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiIKK21zZ3N0ciAiR2VlbiBlaWVuc2thcCBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgorbXNnc3RyICJrb24gbmllIGVpZW5za2FwIFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiBzdGVsIG5hIFwiJXNcIiBuaWUiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxpbmsgJXMgdG8gJXMiCittc2dzdHIgIktvbiBuaWUgJXMgYWFuICVzIHZlcmJpbmQgbmllIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICJnZWVuIGVsZW1lbnQgXCIlc1wiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKK21zZ3N0ciAia29uIG5pZSBjYXBzIFwiJXNcIiBvbnRsZWVkIG5pZSIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIKK21zZ3N0ciAidmVyYmluZGluZyBzb25kZXIgYnJvbi1lbGVtZW50IgorCittc2dpZCAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKK21zZ3N0ciAidmVyYmluZGluZyBzb25kZXIgYmVzdGVtbWluZy1lbGVtZW50IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNvdXJjZSBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJnZWVuIGJyb25lbGVtZW50IHZpciBVUkkgXCIlc1wiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGVsZW1lbnQgdG8gbGluayBVUkkgXCIlc1wiIHRvIgorbXNnc3RyICJnZWVuIGVsZW1lbnQgdmlyIFVSSSBcIiVzXCIgb20gaGVlbiB0ZSBza2FrZWwgbmllIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAiZ2VlbiBiZXN0ZW1taW5nLWVsZW1lbnQgdmlyIFVSSSBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxpbmsgc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJrb24gbmllIGFhbiBiZXN0ZW1taW5nLWVsZW1lbnQgdmlyICBVUkkgXCIlc1wiIHZlcmJpbmQgbmllIgorCittc2dpZCAiZW1wdHkgcGlwZWxpbmUgbm90IGFsbG93ZWQiCittc2dzdHIgImxlw6sgcHlwbHluIHdvcmQgbmllIHRvZWdlbGFhdCBuaWUiCisKKyMsIGZ1enp5Cittc2dpZCAiSW50ZXJuYWwgY2xvY2sgZXJyb3IuIgorbXNnc3RyICJJbnRlcm5lIGRhdGF2bG9laWZvdXQuIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKK21zZ3N0ciAiSW50ZXJuZSBkYXRhdmxvZWlmb3V0LiIKKworbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCittc2dzdHIgIkludGVybmUgZGF0YXZsb2VpcHJvYmxlZW0uIgorCisjLCBmdXp6eQorbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiSW50ZXJuZSBkYXRhdmxvZWlmb3V0LiIKKworbXNnaWQgIkZpbHRlciBjYXBzIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCisicHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKK21zZ3N0ciAiIgorCittc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3Igd3JpdGluZy4iCittc2dzdHIgIkdlZW4gbMOqZXJuYWFtIG9tIGhlZW4gdGUgc2tyeWYgbmllLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCittc2dzdHIgIktvbiBuaWUgbMOqZXIgXCIlc1wiIG9vcG1hYWsgb20gaW4gdGUgc2tyeWYgbmllLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiRm91dCBtZXQgdG9lbWFhayB2YW4gbMOqZXIgXCIlc1wiLiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Vla2luZyBpbiBmaWxlIFwiJXNcIi4iCittc2dzdHIgIkZvdXQgdHlkZW5zIHNrcnlmIG5hIGzDqmVyIFwiJXNcIi4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIFwiJXNcIi4iCittc2dzdHIgIkZvdXQgdHlkZW5zIHNrcnlmIG5hIGzDqmVyIFwiJXNcIi4iCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiR2VlbiBsw6plcm5hYW0gb20gdWl0IHRlIGxlZXMgbmllLiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgorbXNnc3RyICJLb24gbmllIGzDqmVyIFwiJXNcIiBvb3BtYWFrIG9tIHRlIGxlZXMgbmllLiAlcy4iCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgaW5mbyBvbiBcIiVzXCIuIgorbXNnc3RyICJrb24gbmllIGlubGlndGluZyBvb3IgXCIlc1wiIGtyeSBuaWUuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIlwiJXNcIiBpcyBhIGRpcmVjdG9yeS4iCittc2dzdHIgIlwiJXNcIiBpcyAnbiBnaWRzLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFwiJXNcIiBpcyBhIHNvY2tldC4iCittc2dzdHIgIkzDqmVyIFwiJXNcIiBpcyAnbiBzb2suIgorCittc2dpZCAiRmFpbGVkIGFmdGVyIGl0ZXJhdGlvbnMgYXMgcmVxdWVzdGVkLiIKK21zZ3N0ciAiTWlzbHVra2luZyBuYSBkaWUgdmFzZ2VzdGVsZGUgYWFudGFsIHByb2JlZXJzbGFlLiIKKworbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCittc2dzdHIgIiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAia29uIG5pZSBpbmxpZ3Rpbmcgb29yIFwiJXNcIiBrcnkgbmllLiIKKworIywgZnV6enkKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIgorbXNnc3RyICJGb3V0IHR5ZGVucyBza3J5ZiBuYSBsw6plciBcIiVzXCIuIgorCittc2dpZCAiY2FwcyIKK21zZ3N0ciAiY2FwcyIKKworbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCittc2dzdHIgInZlcm1vw6tucyB3YXQgYmVzcGV1ciBrb24gd29yZCBpbiBkaWUgc3Ryb29tIgorCittc2dpZCAibWluaW11bSIKK21zZ3N0ciAibWluaW11bSIKKworbXNnaWQgIm1heGltdW0iCittc2dzdHIgIm1ha3NpbXVtIgorCittc2dpZCAiZm9yY2UgY2FwcyIKK21zZ3N0ciAiIgorCittc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJTdHJlYW0gY29udGFpbnMgbm8gZGF0YS4iCittc2dzdHIgImFsYnVtIHdhdCBoaWVyZGllIGRhdGEgYmV2YXQiCisKK21zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJyZWFkYWJsZSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIndyaXRhYmxlIgorbXNnc3RyICJ0aXRlbCIKKworbXNnaWQgImNvbnRyb2xsYWJsZSIKK21zZ3N0ciAiIgorCittc2dpZCAiY2hhbmdlYWJsZSBpbiBOVUxMLCBSRUFEWSwgUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUiCittc2dzdHIgIiIKKworbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiCittc2dzdHIgIiIKKworbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMIG9yIFJFQURZIHN0YXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJCbGFja2xpc3RlZCBmaWxlczoiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJUb3RhbCBjb3VudDogIgorbXNnc3RyICJhYW50YWwgc25pdHRlIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdGVkIGZpbGUiCittc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdGVkIGZpbGVzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBwbHVnaW4iCittc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdCBlbnRyeSIKK21zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0IGVudHJpZXMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGZlYXR1cmUiCittc2dpZF9wbHVyYWwgIiVkIGZlYXR1cmVzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKK21zZ3N0ciAiRHJ1ayBhbGxlIGVsZW1lbnRlIgorCittc2dpZCAiUHJpbnQgbGlzdCBvZiBibGFja2xpc3RlZCBmaWxlcyIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorIlByaW50IGEgbWFjaGluZS1wYXJzYWJsZSBsaXN0IG9mIGZlYXR1cmVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIG9yIGFsbCAiCisicGx1Z2lucyBwcm92aWRlLlxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBpbiBjb25uZWN0aW9uIHdpdGggZXh0ZXJuYWwgIgorImF1dG9tYXRpYyBwbHVnaW4gaW5zdGFsbGF0aW9uIG1lY2hhbmlzbXMiCittc2dzdHIgIiIKKworbXNnaWQgIkxpc3QgdGhlIHBsdWdpbiBjb250ZW50cyIKK21zZ3N0ciAiIgorCittc2dpZCAiUHJpbnQgc3VwcG9ydGVkIFVSSSBzY2hlbWVzLCB3aXRoIHRoZSBlbGVtZW50cyB0aGF0IGltcGxlbWVudCB0aGVtIgorbXNnc3RyICIiCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgorbXNnc3RyICJLb24gbmllIGzDqmVyIFwiJXNcIiBvb3BtYWFrIG9tIGluIHRlIHNrcnlmIG5pZS4iCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgorbXNnc3RyICJnZWVuIGJyb25lbGVtZW50IHZpciBVUkkgXCIlc1wiIgorCittc2dpZCAiSW5kZXggc3RhdGlzdGljcyIKK21zZ3N0ciAiIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBlbGVtZW50IFwiJXNcIiAoJXMpOiAiCittc2dzdHIgIkJvb2Rza2FwIHZhbmFmIGVsZW1lbnQgXCIlc1wiICglcyk6IgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKK21zZ3N0ciAiQm9vZHNrYXAgdmFuYWYgZWxlbWVudCBcIiVzXCIgKCVzKToiCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICJCb29kc2thcCB2YW5hZiBlbGVtZW50IFwiJXNcIiAoJXMpOiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKK21zZ3N0ciAiQm9vZHNrYXAgdmFuYWYgZWxlbWVudCBcIiVzXCIgKCVzKToiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIgorbXNnc3RyICJFT1MgZ2VrcnkgdmFuYWYgZWxlbWVudCBcIiVzXCIuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKK21zZ3N0ciAiRVRJS0VUIEdFVklORCAgOiBnZXZpbmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgcGFkIFwiJXM6JXNcIi5cbiIKK21zZ3N0ciAiRVRJS0VUIEdFVklORCAgOiBnZXZpbmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKK21zZ3N0ciAiRVRJS0VUIEdFVklORCAgOiBnZXZpbmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCisKK21zZ2lkICJGT1VORCBUQUdcbiIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJTkZPOlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgorbXNnc3RyICJGT1VUOiB2YW5hZiBlbGVtZW50ICVzOiAlc1xuIgorCittc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgImJ1ZmZlcmluZy4uLiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIlB5cGx5biB3b3JkIGdlc3RlbCBuYSBTUEVFTCAuLi5cbiIKKworIywgZnV6enkKK21zZ2lkICJCdWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgorbXNnc3RyICJTdGVsIHB5cGx5biBuYSBQT1VTRUVSIC4uLlxuIgorCittc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJJbnRlcnJ1cHQ6IFN0b3BwaW5nIHBpcGVsaW5lIC4uLlxuIgorbXNnc3RyICJQeXBseW4gd29yZCBnZXN0ZWwgbmEgTlVMTCAuLi5cbiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBlbGVtZW50OiAlc1xuIgorbXNnc3RyICJnZWVuIGVsZW1lbnQgXCIlc1wiIgorCittc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgorbXNnc3RyICJXeXMgZXRpa2V0dGUgKG9vayBiZWtlbmQgYXMgbWV0YWRhdGEpIgorCittc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKK21zZ3N0ciAiV3lzIHN0YXR1c2lubGlndGluZyBlbiBrZW5uaXNnZXdpbmdzIHZhbiBlaWVuc2thcHBlIgorCisjLCBmdXp6eQorbXNnaWQgIkRvIG5vdCBwcmludCBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24iCittc2dzdHIgIk1vZW5pZSBzdGF0dXNpbmxpZ3RpbmcgdmFuIFRJUEUgd3lzIG5pZSIKKworbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKK21zZ3N0ciAiQWZ2b2VyYm9vZHNrYXBwZSIKKworbXNnaWQgIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIFRZUEUiCittc2dzdHIgIk1vZW5pZSBzdGF0dXNpbmxpZ3RpbmcgdmFuIFRJUEUgd3lzIG5pZSIKKworbXNnaWQgIlRZUEUxLFRZUEUyLC4uLiIKK21zZ3N0ciAiVElQRTEsIFRJUEUyLC4uLiIKKworbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKK21zZ3N0ciAiTW9lbmllICduIGZvdXRoYW50ZWVyZGVyIGluc3RhbGxlZXIgbmllIgorCittc2dpZCAiUHJpbnQgYWxsb2MgdHJhY2UgKGlmIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lKSIKK21zZ3N0ciAiRHJ1ayBcImFsbG9jIHRyYWNlXCIgKGluZGllbiBhYW5nZXNrYWtlbCB0eWRlbnMga29tcGlsZXJpbmcpIgorCittc2dpZCAiRm9yY2UgRU9TIG9uIHNvdXJjZXMgYmVmb3JlIHNodXR0aW5nIHRoZSBwaXBlbGluZSBkb3duIgorbXNnc3RyICIiCisKK21zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKK21zZ3N0ciAiRk9VVDogcHlwbHluIGtvbiBuaWUgb3BnZXN0ZWwgd29yZCBuaWU6ICVzLlxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKK21zZ3N0ciAiRk9VVDogcHlwbHluIGtvbiBuaWUgb3BnZXN0ZWwgd29yZCBuaWUuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogZXJyb25lb3VzIHBpcGVsaW5lOiAlc1xuIgorbXNnc3RyICJXQUFSU0tVV0lORzogZm91dGlld2UgcHlwbHluOiAlc1xuIgorCittc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgorbXNnc3RyICJGT1VUOiBkaWUgcHlwbHluZWxlbWVudCBrb24gbmllIGdldmluZCB3b3JkIG5pZS5cbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgorbXNnc3RyICJTdGVsIHB5cGx5biBuYSBQT1VTRUVSIC4uLlxuIgorCittc2dpZCAiRVJST1I6IFBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwYXVzZS5cbiIKK21zZ3N0ciAiRk9VVDogcHlwbHluIHdpbCBuaWUgcG91c2VlciBuaWUuXG4iCisKKyMsIGZ1enp5Cittc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgorbXNnc3RyICJQeXBseW4gaXMgVk9PUkdFUk9MIC4uLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTElORyAuLi5cbiIKK21zZ3N0ciAiUHlwbHluIGRvZW4gVk9PUlJPTExJTkcgLi4uXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHByZXJvbGwuXG4iCittc2dzdHIgIkZPVVQ6IHB5cGx5biB3aWwgbmllIHZvb3Jyb2wgbmllLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgorbXNnc3RyICJQeXBseW4gaXMgVk9PUkdFUk9MIC4uLlxuIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgorbXNnc3RyICJQeXBseW4gd29yZCBnZXN0ZWwgbmEgU1BFRUwgLi4uXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBsYXkuXG4iCittc2dzdHIgIkZPVVQ6IHB5cGx5biB3aWwgbmllIHNwZWVsIG5pZS5cbiIKKworbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIEZvcmNpbmcgRU9TIG9uIHRoZSBwaXBlbGluZVxuIgorbXNnc3RyICIiCisKK21zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiRU9TIHJlY2VpdmVkIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgd2FpdGluZyBmb3IgRU9TXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgorbXNnc3RyICJVaXR2b2VyaW5nIGhldCBnZcOraW5kaWcgbmEgJSIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUkVBRFkgLi4uXG4iCittc2dzdHIgIlB5cGx5biB3b3JkIGdlc3RlbCBuYSBHRVJFRUQgLi4uXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIE5VTEwgLi4uXG4iCittc2dzdHIgIlB5cGx5biB3b3JkIGdlc3RlbCBuYSBOVUxMIC4uLlxuIgorCisjLCBmdXp6eQorbXNnaWQgIkZyZWVpbmcgcGlwZWxpbmUgLi4uXG4iCittc2dzdHIgIlB5cGx5biB3b3JkIGdlc3RlbCBuYSBOVUxMIC4uLlxuIgorCisjfiBtc2dpZCAiVXNhZ2U6IGdzdC14bWxsYXVuY2ggPGZpbGUueG1sPiBbIGVsZW1lbnQucHJvcGVydHk9dmFsdWUgLi4uIF1cbiIKKyN+IG1zZ3N0ciAiIgorI34gIkdlYnJ1aWsgc286IGdzdC14bWxsYXVuY2ggPGzDqmVyLnhtbD4gWyBlbGVtZW50LmVpZW5za2FwPXdhYXJkZSAuLi4gXVxuIgorCisjfiBtc2dpZCAiRVJST1I6IHBhcnNlIG9mIHhtbCBmaWxlICclcycgZmFpbGVkLlxuIgorI34gbXNnc3RyICJGT1VUOiBvbnRsZWRpbmcgdmFuIHhtbC1sw6plciAnJXMnIGhldCBtaXNsdWsuXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogbm8gdG9wbGV2ZWwgcGlwZWxpbmUgZWxlbWVudCBpbiBmaWxlICclcycuXG4iCisjfiBtc2dzdHIgIkZPVVQ6IGdlZW4gdG9wdmxhayBweXBseW5lbGVtZW50IGluIGzDqmVyICclcycgbmllLlxuIgorCisjLCBmdXp6eQorI34gbXNnaWQgIldBUk5JTkc6IG9ubHkgb25lIHRvcGxldmVsIGVsZW1lbnQgaXMgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS5cbiIKKyN+IG1zZ3N0ciAiV0FBUlNLVVdJTkc6IHNsZWdzIGVlbiB0b3B2bGFrIGVsZW1lbnQgd29yZCB0YW5zIG9uZGVyc3RldW4uIgorCisjfiBtc2dpZCAiRVJST1I6IGNvdWxkIG5vdCBwYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgJWQ6ICVzLlxuIgorI34gbXNnc3RyICJGT1VUOiBvbnZlcnN0YWFuYmFyZSBiZXZlbGx5bnBhcmFtZXRlciAlZDogJXMuXG4iCisKKyN+IG1zZ2lkICJXQVJOSU5HOiBlbGVtZW50IG5hbWVkICclcycgbm90IGZvdW5kLlxuIgorI34gbXNnc3RyICJXQUFSU0tVV0lORzogZWxlbWVudCBnZW5hYW1kICclcycgbmllIGdldmluZCBuaWUuXG4iCisKKyN+IG1zZ2lkICJTYXZlIHhtbCByZXByZXNlbnRhdGlvbiBvZiBwaXBlbGluZSB0byBGSUxFIGFuZCBleGl0IgorI34gbXNnc3RyICJTdG9vciB4bWwtdm9vcnN0ZWxsaW5nIHZhbiBweXBseW4gbmEgTMOKRVIgZW4gc3RvcCIKKworI34gbXNnaWQgIkZJTEUiCisjfiBtc2dzdHIgIkzDikVSIgorCisjLCBmdXp6eQorI34gbXNnaWQgIkRvIG5vdCBpbnN0YWxsIHNpZ25hbCBoYW5kbGVycyBmb3IgU0lHVVNSMSBhbmQgU0lHVVNSMiIKKyN+IG1zZ3N0ciAiTW9lbmllICduIGZvdXRoYW50ZWVyZGVyIGluc3RhbGxlZXIgbmllIgorCisjfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkLiIKKyN+IG1zZ3N0ciAiSW50ZXJuZSBHU3RyZWFtZXItZm91dDogc3RhdGUgY2hhbmdlIGZhaWxlZC4iCisKKyN+IG1zZ2lkICJvcmlnaW5hbCBsb2NhdGlvbiBvZiBmaWxlIGFzIGEgVVJJIgorI34gbXNnc3RyICJvb3JzcHJvbmcgdmFuIGzDqmVyIGdlZ2VlIGFzICduIFVSSSIKKworI34gbXNnaWQgIkVsZW1lbnQgXCIlc1wiIGhhcyBnb25lIGZyb20gUExBWUlORyB0byBQQVVTRUQsIHF1aXR0aW5nLlxuIgorI34gbXNnc3RyICJFbGVtZW50IFwiJXNcIiBoZXQgdmVyYW5kZXIgdmFuIFNQRUVMIG5hIFBPVVNFLCB2ZXJsYWF0IGR1cy5cbiIKKworI34gbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBjYW4ndCBQUkVST0xMIC4uLlxuIgorI34gbXNnc3RyICJGT1VUOiBweXBseW4ga2FuIG5pZSBWT09SUk9MIG5pZSAuLi5cbiIKKworI34gbXNnaWQgIiBucy5cbiIKKyN+IG1zZ3N0ciAiIG5zLlxuIgorCisjfiBtc2dpZCAiRlJFRUlORyBwaXBlbGluZSAuLi5cbiIKKyN+IG1zZ3N0ciAicHlwbHluIHdvcmQgVlJZR0VNQUFLIC4uLlxuIgpkaWZmIC0tZ2l0IGEvcG8vYXouZ21vIGIvcG8vYXouZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5OWExMjgKLS0tIC9kZXYvbnVsbAorKysgYi9wby9hei5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vYXoucG8gYi9wby9hei5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzA2MzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vYXoucG8KQEAgLTAsMCArMSwxMTY1IEBACisjIFRyYW5zbGF0aW9uIG9mICdnc3RyZWFtZXInIG1lc3NhZ2VzIHRvIEF6ZXJiYWlqYW5pLgorIyBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBwdXQgaW4gdGhlIHB1YmxpYyBkb21haW4uCisjIE3JmXRpbiDGj21pcm92IDxtZXRpbkBrYXJlZ2VuLmNvbT4sIDIwMDQuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnc3RyZWFtZXItMC44LjBcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wOS0yOSAxNDo1NSswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwNC0wMy0xOSAxODo0MCswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBNZXRpbiBBbWlyb2ZmIDxtZXRpbkBrYXJlZ2VuLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBBemVyYmFpamFuaSA8dHJhbnNsYXRpb24tdGVhbS1hekBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCisiTGFuZ3VhZ2U6IGF6XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiWC1HZW5lcmF0b3I6IEtCYWJlbCAxLjAuMlxuIgorCittc2dpZCAiUHJpbnQgdGhlIEdTdHJlYW1lciB2ZXJzaW9uIgorbXNnc3RyICJHU3RyZWFtZXIgYnVyYXjEsWzEscWfxLFuxLEgZ8O2c3TJmXIiCisKK21zZ2lkICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKK21zZ3N0ciAiQsO8dMO8biB4yZl0YWxhcsSxIMO2bMO8bWPDvGwgZXQiCisKK21zZ2lkICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorIkRlZmF1bHQgZGVidWcgbGV2ZWwgZnJvbSAxIChvbmx5IGVycm9yKSB0byA1IChhbnl0aGluZykgb3IgMCBmb3Igbm8gb3V0cHV0IgorbXNnc3RyICIiCisKK21zZ2lkICJMRVZFTCIKK21zZ3N0ciAiU8aPVsSwWVnGjyIKKworbXNnaWQgIiIKKyJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yICIKKyJ0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCittc2dzdHIgIiIKKworbXNnaWQgIkxJU1QiCittc2dzdHIgIlPEsFlBSEkiCisKK21zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKK21zZ3N0ciAiIgorCittc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCittc2dzdHIgIljJmXRhIGF5xLFybWFzxLFuxLEgYmHEn2xhIgorCittc2dpZCAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCittc2dzdHIgIiIKKworbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCittc2dzdHIgIiIKKworbXNnaWQgIlBBVEhTIgorbXNnc3RyICJDScSeSVJMQVIiCisKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCisiZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgorbXNnc3RyICIiCisKK21zZ2lkICJQTFVHSU5TIgorbXNnc3RyICLGj0xBVsaPTMaPUiIKKworbXNnaWQgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCittc2dzdHIgIiIKKworbXNnaWQgIkRpc2FibGUgdXBkYXRpbmcgdGhlIHJlZ2lzdHJ5IgorbXNnc3RyICIiCisKK21zZ2lkICJEaXNhYmxlIHNwYXduaW5nIGEgaGVscGVyIHByb2Nlc3Mgd2hpbGUgc2Nhbm5pbmcgdGhlIHJlZ2lzdHJ5IgorbXNnc3RyICIiCisKK21zZ2lkICJHU3RyZWFtZXIgT3B0aW9ucyIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgIkdTdHJlYW1lciBidXJheMSxbMSxxZ/EsW7EsSBnw7ZzdMmZciIKKworbXNnaWQgIlVua25vd24gb3B0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIGNvcmUgbGlicmFyeSBlcnJvci4iCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgorInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHBhZCBwcm9ibGVtLiIKK21zZ3N0ciAiIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iCittc2dzdHIgIiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCittc2dzdHIgIiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogZXZlbnQgcHJvYmxlbS4iCittc2dzdHIgIiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2VlayBwcm9ibGVtLiIKK21zZ3N0ciAiIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKK21zZ3N0ciAiIgorCittc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKK21zZ3N0ciAiIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGhhcyBiZWVuICIKKyJkaXNhYmxlZC4iCittc2dzdHIgIiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3VwcG9ydGluZyBsaWJyYXJ5IGVycm9yLiIKK21zZ3N0ciAiIgorCittc2dpZCAiQ291bGQgbm90IGluaXRpYWxpemUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiIgorCittc2dpZCAiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIiIKKworbXNnaWQgIkNvdWxkIG5vdCBjb25maWd1cmUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiIgorCittc2dpZCAiRW5jb2RpbmcgZXJyb3IuIgorbXNnc3RyICIiCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHJlc291cmNlIGVycm9yLiIKK21zZ3N0ciAiIgorCittc2dpZCAiUmVzb3VyY2Ugbm90IGZvdW5kLiIKK21zZ3N0ciAiIgorCittc2dpZCAiUmVzb3VyY2UgYnVzeSBvciBub3QgYXZhaWxhYmxlLiIKK21zZ3N0ciAiIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcuIgorbXNnc3RyICIiCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCittc2dzdHIgIiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKK21zZ3N0ciAiIgorCittc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKK21zZ3N0ciAiIgorCittc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCittc2dzdHIgIiIKKworbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iCittc2dzdHIgIiIKKworbXNnaWQgIkNvdWxkIG5vdCBwZXJmb3JtIHNlZWsgb24gcmVzb3VyY2UuIgorbXNnc3RyICIiCisKK21zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgorbXNnc3RyICIiCisKK21zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKK21zZ3N0ciAiIgorCittc2dpZCAiTm8gc3BhY2UgbGVmdCBvbiB0aGUgcmVzb3VyY2UuIgorbXNnc3RyICIiCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN0cmVhbSBlcnJvci4iCittc2dzdHIgIiIKKworbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKK21zZ3N0ciAiIgorCittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCittc2dzdHIgIiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKK21zZ3N0ciAiIgorCittc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgorbXNnc3RyICIiCisKK21zZ2lkICJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iCittc2dzdHIgIiIKKworbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKK21zZ3N0ciAiIgorCittc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIiIKKworbXNnaWQgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKK21zZ3N0ciAiIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiIKK21zZ3N0ciAiIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgY2FuJ3QgYmUgZGVjcnlwdGVkIGJlY2F1c2Ugbm8gc3VpdGFibGUga2V5IGhhcyAiCisiYmVlbiBzdXBwbGllZC4iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKK21zZ3N0ciAiIgorCittc2dpZCAiU2VsZWN0ZWQgY2xvY2sgY2Fubm90IGJlIHVzZWQgaW4gcGlwZWxpbmUuIgorbXNnc3RyICIiCisKK21zZ2lkICJ0aXRsZSIKK21zZ3N0ciAiIgorCittc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKK21zZ3N0ciAiIgorCittc2dpZCAidGl0bGUgc29ydG5hbWUiCittc2dzdHIgIiIKKworbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIiIKKworbXNnaWQgImFydGlzdCIKK21zZ3N0ciAiIgorCittc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIgorbXNnc3RyICIiCisKK21zZ2lkICJhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgIiIKKworbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiIgorCittc2dpZCAiYWxidW0iCittc2dzdHIgIiIKKworbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgorbXNnc3RyICIiCisKK21zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKK21zZ3N0ciAiIgorCittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIiIKKworbXNnaWQgImFsYnVtIGFydGlzdCIKK21zZ3N0ciAiIgorCittc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgorbXNnc3RyICIiCisKK21zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgIiIKKworbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCIKK21zZ3N0ciAiIgorCittc2dpZCAiZGF0ZSIKK21zZ3N0ciAidGFyaXgiCisKK21zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJkYXRldGltZSIKK21zZ3N0ciAidGFyaXgiCisKK21zZ2lkICJkYXRlIGFuZCB0aW1lIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdzdERhdGVUaW1lIHN0cnVjdHVyZSkiCittc2dzdHIgIiIKKworbXNnaWQgImdlbnJlIgorbXNnc3RyICIiCisKK21zZ2lkICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKK21zZ3N0ciAiIgorCittc2dpZCAiY29tbWVudCIKK21zZ3N0ciAixZ/JmXJoIgorCittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJleHRlbmRlZCBjb21tZW50IgorbXNnc3RyICLFn8mZcmgiCisKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCittc2dzdHIgIiIKKworbXNnaWQgInRyYWNrIG51bWJlciIKK21zZ3N0ciAiIgorCittc2dpZCAidHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgIiIKKworbXNnaWQgInRyYWNrIGNvdW50IgorbXNnc3RyICIiCisKK21zZ2lkICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgorbXNnc3RyICIiCisKK21zZ2lkICJkaXNjIG51bWJlciIKK21zZ3N0ciAiIgorCittc2dpZCAiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKK21zZ3N0ciAiIgorCittc2dpZCAiZGlzYyBjb3VudCIKK21zZ3N0ciAiIgorCittc2dpZCAiY291bnQgb2YgZGlzY3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyBkaXNjIGJlbG9uZ3MgdG8iCittc2dzdHIgIiIKKworbXNnaWQgImxvY2F0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiT3JpZ2luIG9mIG1lZGlhIGFzIGEgVVJJIChsb2NhdGlvbiwgd2hlcmUgdGhlIG9yaWdpbmFsIG9mIHRoZSBmaWxlIG9yIHN0cmVhbSAiCisiaXMgaG9zdGVkKSIKK21zZ3N0ciAiIgorCittc2dpZCAiaG9tZXBhZ2UiCittc2dzdHIgIiIKKworbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCittc2dzdHIgIiIKKworbXNnaWQgImRlc2NyaXB0aW9uIgorbXNnc3RyICJpemFoYXQiCisKK21zZ2lkICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCittc2dzdHIgIiIKKworbXNnaWQgInZlcnNpb24iCittc2dzdHIgImJ1cmF4xLFsxLHFnyIKKworbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgorbXNnc3RyICIiCisKK21zZ2lkICJJU1JDIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCittc2dzdHIgIiIKKworbXNnaWQgIm9yZ2FuaXphdGlvbiIKK21zZ3N0ciAiIgorCittc2dpZCAiY29weXJpZ2h0IgorbXNnc3RyICJtw7zJmWxsaWYgaMO8cXVxdSIKKworbXNnaWQgImNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgIm3JmSdsdW1hdMSxbiBtw7zJmWxsaWYgaMO8cXVxdSBxZXlkaSIKKworIywgZnV6enkKK21zZ2lkICJjb3B5cmlnaHQgdXJpIgorbXNnc3RyICJtw7zJmWxsaWYgaMO8cXVxdSIKKworIywgZnV6enkKK21zZ2lkICJVUkkgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgIm3JmSdsdW1hdMSxbiBtw7zJmWxsaWYgaMO8cXVxdSBxZXlkaSIKKworbXNnaWQgImVuY29kZWQgYnkiCittc2dzdHIgIiIKKworbXNnaWQgIm5hbWUgb2YgdGhlIGVuY29kaW5nIHBlcnNvbiBvciBvcmdhbml6YXRpb24iCittc2dzdHIgIiIKKworbXNnaWQgImNvbnRhY3QiCittc2dzdHIgIsmZbGFxyZkiCisKK21zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgorbXNnc3RyICLJmWxhccmZIG3JmSdsdW1hdMSxIgorCittc2dpZCAibGljZW5zZSIKK21zZ3N0ciAibGlzZW56aXlhIgorCittc2dpZCAibGljZW5zZSBvZiBkYXRhIgorbXNnc3RyICJtyZknbHVtYXTEsW4gbGlzZW56aXlhc8SxIgorCisjLCBmdXp6eQorbXNnaWQgImxpY2Vuc2UgdXJpIgorbXNnc3RyICJsaXNlbnppeWEiCisKKyMsIGZ1enp5Cittc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJtyZknbHVtYXTEsW4gbGlzZW56aXlhc8SxIgorCittc2dpZCAicGVyZm9ybWVyIgorbXNnc3RyICJpZmHDp8SxIgorCittc2dpZCAicGVyc29uKHMpIHBlcmZvcm1pbmciCittc2dzdHIgImlmYSBlZMmZbiDFn8mZeHMobMmZcikiCisKK21zZ2lkICJjb21wb3NlciIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAiaWZhIGVkyZluIMWfyZl4cyhsyZlyKSIKKworbXNnaWQgImR1cmF0aW9uIgorbXNnc3RyICJzw7xyyZlrbGlrIgorCittc2dpZCAibGVuZ3RoIGluIEdTdHJlYW1lciB0aW1lIHVuaXRzIChuYW5vc2Vjb25kcykiCittc2dzdHIgIiIKKworbXNnaWQgImNvZGVjIgorbXNnc3RyICIiCisKK21zZ2lkICJjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgIiIKKworbXNnaWQgInZpZGVvIGNvZGVjIgorbXNnc3RyICIiCisKK21zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgIiIKKworbXNnaWQgImF1ZGlvIGNvZGVjIgorbXNnc3RyICIiCisKK21zZ2lkICJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgIiIKKworbXNnaWQgInN1YnRpdGxlIGNvZGVjIgorbXNnc3RyICIiCisKK21zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJjb250YWluZXIgZm9ybWF0IgorbXNnc3RyICLJmWxhccmZIG3JmSdsdW1hdMSxIgorCittc2dpZCAiY29udGFpbmVyIGZvcm1hdCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgIiIKKworbXNnaWQgImJpdHJhdGUiCittc2dzdHIgIiIKKworbXNnaWQgImV4YWN0IG9yIGF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgIiIKKworbXNnaWQgIm5vbWluYWwgYml0cmF0ZSIKK21zZ3N0ciAiIgorCittc2dpZCAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAiIgorCittc2dpZCAibWluaW11bSBiaXRyYXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICIiCisKK21zZ2lkICJtYXhpbXVtIGJpdHJhdGUiCittc2dzdHIgIiIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgIiIKKworbXNnaWQgImVuY29kZXIiCittc2dzdHIgIiIKKworbXNnaWQgImVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCittc2dzdHIgIiIKKworbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKK21zZ3N0ciAiIgorCittc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiIgorCittc2dpZCAic2VyaWFsIgorbXNnc3RyICJzZXJpeWEgbsO2bXLJmXNpIgorCittc2dpZCAic2VyaWFsIG51bWJlciBvZiB0cmFjayIKK21zZ3N0ciAibWFobsSxbsSxbiBzZXJpeWEgbsO2bXLJmXNpIgorCittc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgorbXNnc3RyICIiCisKK21zZ2lkICJ0cmFjayBnYWluIGluIGRiIgorbXNnc3RyICIiCisKK21zZ2lkICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCittc2dzdHIgIiIKKworbXNnaWQgInBlYWsgb2YgdGhlIHRyYWNrIgorbXNnc3RyICIiCisKK21zZ2lkICJyZXBsYXlnYWluIGFsYnVtIGdhaW4iCittc2dzdHIgIiIKKworbXNnaWQgImFsYnVtIGdhaW4gaW4gZGIiCittc2dzdHIgIiIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKK21zZ3N0ciAiIgorCittc2dpZCAicGVhayBvZiB0aGUgYWxidW0iCittc2dzdHIgIiIKKworbXNnaWQgInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIgorbXNnc3RyICIiCisKK21zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgorbXNnc3RyICIiCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIgorbXNnc3RyICIiCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIGZvciB0aGlzIHN0cmVhbSwgY29uZm9ybWluZyB0byBJU08tNjM5LTEiCittc2dzdHIgIiIKKworbXNnaWQgImltYWdlIgorbXNnc3RyICIiCisKK21zZ2lkICJpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAncHJldmlldyBpbWFnZScgPSBpbWFnZSB0aGF0IHNob3dzIGEgcHJldmlldyBvZiB0aGUgZnVsbCBpbWFnZQorbXNnaWQgInByZXZpZXcgaW1hZ2UiCittc2dzdHIgIiIKKworbXNnaWQgInByZXZpZXcgaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiIgorCittc2dpZCAiYXR0YWNobWVudCIKK21zZ3N0ciAiIgorCittc2dpZCAiZmlsZSBhdHRhY2hlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiIgorCittc2dpZCAiYmVhdHMgcGVyIG1pbnV0ZSIKK21zZ3N0ciAiIgorCittc2dpZCAibnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8iCittc2dzdHIgIiIKKworbXNnaWQgImtleXdvcmRzIgorbXNnc3RyICIiCisKK21zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKK21zZ3N0ciAiIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIG5hbWUiCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgorInByb2R1Y2VkIgorbXNnc3RyICIiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCisic291dGhlcm4gbGF0aXR1ZGVzKSIKK21zZ3N0ciAiIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorImdlbyBsb25naXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgcHJpbWUgbWVyaWRpYW4gaW4gR3JlZW53aWNoL1VLLCAgIgorIm5lZ2F0aXZlIHZhbHVlcyBmb3Igd2VzdGVybiBsb25naXR1ZGVzKSIKK21zZ3N0ciAiIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCisiYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKK21zZ3N0ciAiIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNvdW50cnkiCittc2dzdHIgIiIKKworbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICIiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKK21zZ3N0ciAiIgorCittc2dpZCAiY2l0eSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCittc2dzdHIgIiIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorImEgbG9jYXRpb24gd2hpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgorInRoZSBuZWlnaGJvcmhvb2QpIgorbXNnc3RyICIiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gaG9yaXpvbnRhbCBlcnJvciIKK21zZ3N0ciAiIgorCittc2dpZCAiZXhwZWN0ZWQgZXJyb3Igb2YgdGhlIGhvcml6b250YWwgcG9zaXRpb25pbmcgbWVhc3VyZXMgKGluIG1ldGVycykiCittc2dzdHIgIiIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorIm1vdmVtZW50IHNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgaW4gbS9zIgorbXNnc3RyICIiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgorIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKKyJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBjYXB0dXJlIGRpcmVjdGlvbiIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorImluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcgIGEgbWVkaWEuICIKKyJJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50ICByZXByZXNlbnRhdGlvbiwgMCBtZWFucyB0aGUgIgorImdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZScgaGVyZQorbXNnaWQgInNob3cgbmFtZSIKK21zZ3N0ciAiIgorCittc2dpZCAiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogJ3Nob3cgc29ydG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lIGFzIHVzZWQgZm9yIHNvcnRpbmcgcHVycG9zZXMnIGhlcmUKK21zZ2lkICJzaG93IHNvcnRuYW1lIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIiIKKworbXNnaWQgImVwaXNvZGUgbnVtYmVyIgorbXNnc3RyICIiCisKK21zZ2lkICJUaGUgZXBpc29kZSBudW1iZXIgaW4gdGhlIHNlYXNvbiB0aGUgbWVkaWEgaXMgcGFydCBvZiIKK21zZ3N0ciAiIgorCittc2dpZCAic2Vhc29uIG51bWJlciIKK21zZ3N0ciAiIgorCittc2dpZCAiVGhlIHNlYXNvbiBudW1iZXIgb2YgdGhlIHNob3cgdGhlIG1lZGlhIGlzIHBhcnQgb2YiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJseXJpY3MiCittc2dzdHIgImxpc2Vueml5YSIKKworbXNnaWQgIlRoZSBseXJpY3Mgb2YgdGhlIG1lZGlhLCBjb21tb25seSB1c2VkIGZvciBzb25ncyIKK21zZ3N0ciAiIgorCittc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJpZmEgZWTJmW4gxZ/JmXhzKGzJmXIpIgorCittc2dpZCAiZ3JvdXBpbmciCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJHcm91cHMgcmVsYXRlZCBtZWRpYSB0aGF0IHNwYW5zIG11bHRpcGxlIHRyYWNrcywgbGlrZSB0aGUgZGlmZmVyZW50IHBpZWNlcyAiCisib2YgYSBjb25jZXJ0by4gSXQgaXMgYSBoaWdoZXIgbGV2ZWwgdGhhbiBhIHRyYWNrLCBidXQgbG93ZXIgdGhhbiBhbiBhbGJ1bSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgInVzZXIgcmF0aW5nIgorbXNnc3RyICJzw7xyyZlrbGlrIgorCittc2dpZCAiIgorIlJhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgdXNlci4gVGhlIGhpZ2hlciB0aGUgcmFuaywgdGhlIG1vcmUgdGhlIHVzZXIgbGlrZXMgIgorInRoaXMgbWVkaWEiCittc2dzdHIgIiIKKworbXNnaWQgImRldmljZSBtYW51ZmFjdHVyZXIiCittc2dzdHIgIiIKKworbXNnaWQgIk1hbnVmYWN0dXJlciBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCittc2dzdHIgIiIKKworbXNnaWQgImRldmljZSBtb2RlbCIKK21zZ3N0ciAiIgorCittc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICIiCisKK21zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgorbXNnc3RyICIiCisKK21zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCittc2dzdHIgIiIKKworbXNnaWQgImFwcGxpY2F0aW9uIGRhdGEiCittc2dzdHIgIiIKKworbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCittc2dzdHIgIiIKKworbXNnaWQgImltYWdlIG9yaWVudGF0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICJIb3cgdGhlIGltYWdlIHNob3VsZCBiZSByb3RhdGVkIG9yIGZsaXBwZWQgYmVmb3JlIGRpc3BsYXkiCittc2dzdHIgIiIKKworbXNnaWQgIiwgIgorbXNnc3RyICIsICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYmluIFwiJXNcIiwgc2tpcHBpbmciCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc2V0IHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiB0byBcIiVzXCIiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbGluayAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNhcHMgXCIlc1wiIgorbXNnc3RyICIiCisKK21zZ2lkICJsaW5rIHdpdGhvdXQgc291cmNlIGVsZW1lbnQiCittc2dzdHIgIiIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzaW5rIGVsZW1lbnQiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGVsZW1lbnQgdG8gbGluayBVUkkgXCIlc1wiIHRvIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxpbmsgc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICIiCisKK21zZ2lkICJlbXB0eSBwaXBlbGluZSBub3QgYWxsb3dlZCIKK21zZ3N0ciAiIgorCittc2dpZCAiSW50ZXJuYWwgY2xvY2sgZXJyb3IuIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgorbXNnc3RyICIiCisKK21zZ2lkICJBIGxvdCBvZiBidWZmZXJzIGFyZSBiZWluZyBkcm9wcGVkLiIKK21zZ3N0ciAiIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IHByb2JsZW0uIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCittc2dzdHIgIiIKKworbXNnaWQgIkZpbHRlciBjYXBzIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCisicHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKK21zZ3N0ciAiIgorCittc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3Igd3JpdGluZy4iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIFwiJXNcIi4iCittc2dzdHIgIiIKKworbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHJlYWRpbmcuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZSBcIiVzXCIgaXMgYSBzb2NrZXQuIgorbXNnc3RyICIiCisKK21zZ2lkICJGYWlsZWQgYWZ0ZXIgaXRlcmF0aW9ucyBhcyByZXF1ZXN0ZWQuIgorbXNnc3RyICIiCisKK21zZ2lkICJObyBUZW1wIGRpcmVjdG9yeSBzcGVjaWZpZWQuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiIgorCittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKK21zZ3N0ciAiIgorCittc2dpZCAiY2FwcyIKK21zZ3N0ciAiIgorCittc2dpZCAiZGV0ZWN0ZWQgY2FwYWJpbGl0aWVzIGluIHN0cmVhbSIKK21zZ3N0ciAiIgorCittc2dpZCAibWluaW11bSIKK21zZ3N0ciAibWluaW1hbCIKKworbXNnaWQgIm1heGltdW0iCittc2dzdHIgIm1ha3NpbWFsIgorCittc2dpZCAiZm9yY2UgY2FwcyIKK21zZ3N0ciAiIgorCittc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCittc2dzdHIgIiIKKworbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKK21zZ3N0ciAiIgorCittc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKK21zZ3N0ciAiIgorCittc2dpZCAicmVhZGFibGUiCittc2dzdHIgIiIKKworbXNnaWQgIndyaXRhYmxlIgorbXNnc3RyICIiCisKK21zZ2lkICJjb250cm9sbGFibGUiCittc2dzdHIgIiIKKworbXNnaWQgImNoYW5nZWFibGUgaW4gTlVMTCwgUkVBRFksIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCwgUkVBRFkgb3IgUEFVU0VEIHN0YXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKK21zZ3N0ciAiIgorCittc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgorbXNnc3RyICIiCisKK21zZ2lkICJUb3RhbCBjb3VudDogIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxhY2tsaXN0ZWQgZmlsZSIKK21zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIHBsdWdpbiIKK21zZ2lkX3BsdXJhbCAiJWQgcGx1Z2lucyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgorbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgZmVhdHVyZSIKK21zZ2lkX3BsdXJhbCAiJWQgZmVhdHVyZXMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCittc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgorbXNnc3RyICIiCisKK21zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiUHJpbnQgYSBtYWNoaW5lLXBhcnNhYmxlIGxpc3Qgb2YgZmVhdHVyZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4gb3IgYWxsICIKKyJwbHVnaW5zIHByb3ZpZGUuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIGluIGNvbm5lY3Rpb24gd2l0aCBleHRlcm5hbCAiCisiYXV0b21hdGljIHBsdWdpbiBpbnN0YWxsYXRpb24gbWVjaGFuaXNtcyIKK21zZ3N0ciAiIgorCittc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgorbXNnc3RyICIiCisKK21zZ2lkICJQcmludCBzdXBwb3J0ZWQgVVJJIHNjaGVtZXMsIHdpdGggdGhlIGVsZW1lbnRzIHRoYXQgaW1wbGVtZW50IHRoZW0iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmlsZTogJXNcbiIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgorbXNnc3RyICIiCisKK21zZ2lkICJJbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSAoJXMpOiAiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgRU9TIGZyb20gZWxlbWVudCBcIiVzXCIuXG4iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBwYWQgXCIlczolc1wiLlxuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJGT1VORCBUQUdcbiIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJTkZPOlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCittc2dzdHIgIiIKKworbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJidWZmZXJpbmcuLi4iCittc2dzdHIgIiIKKworbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcnJ1cHQ6IFN0b3BwaW5nIHBpcGVsaW5lIC4uLlxuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBlbGVtZW50OiAlc1xuIgorbXNnc3RyICIiCisKK21zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCittc2dzdHIgIiIKKworbXNnaWQgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCittc2dzdHIgIiIKKworbXNnaWQgIkRvIG5vdCBwcmludCBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKK21zZ3N0ciAiIgorCittc2dpZCAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKK21zZ3N0ciAiIgorCittc2dpZCAiVFlQRTEsVFlQRTIsLi4uIgorbXNnc3RyICIiCisKK21zZ2lkICJEbyBub3QgaW5zdGFsbCBhIGZhdWx0IGhhbmRsZXIiCittc2dzdHIgIiIKKworbXNnaWQgIlByaW50IGFsbG9jIHRyYWNlIChpZiBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSkiCittc2dzdHIgIiIKKworbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKK21zZ3N0ciAiIgorCittc2dpZCAiR2F0aGVyIGFuZCBwcmludCBpbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZDogJXMuXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXG4iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkVSUk9SOiB0aGUgJ3BpcGVsaW5lJyBlbGVtZW50IHdhc24ndCBmb3VuZC5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCittc2dzdHIgIiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIGxpdmUgYW5kIGRvZXMgbm90IG5lZWQgUFJFUk9MTCAuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTElORyAuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMRUQgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKK21zZ3N0ciAiIgorCittc2dpZCAiV2FpdGluZyBmb3IgRU9TLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgorbXNnc3RyICIiCisKK21zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKK21zZ3N0ciAiIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIgorbXNnc3RyICIiCisKKyN+IG1zZ2lkICJGSUxFIgorI34gbXNnc3RyICJGQVlMIgorCisjfiBtc2dpZCAiJykiCisjfiBtc2dzdHIgIicpIgorCisjfiBtc2dpZCAiU0NIRURVTEVSIgorI34gbXNnc3RyICJWQVhUTEHFnkRJUklDSSIKKworI34gbXNnaWQgIlJlZ2lzdHJ5IHRvIHVzZSIKKyN+IG1zZ3N0ciAixLDFn2zJmWRpbMmZY8mZayBxZXlkIGJhemFzxLEiCisKKyN+IG1zZ2lkICJSRUdJU1RSWSIKKyN+IG1zZ3N0ciAiUUVZREJBWkFTSSIKZGlmZiAtLWdpdCBhL3BvL2JlLmdtbyBiL3BvL2JlLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDMwNDkxCi0tLSAvZGV2L251bGwKKysrIGIvcG8vYmUuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2JlLnBvIGIvcG8vYmUucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY1NTY1ZQotLS0gL2Rldi9udWxsCisrKyBiL3BvL2JlLnBvCkBAIC0wLDAgKzEsMTE1OSBAQAorIyBCZWxhcnVzaWFuIHRyYW5zbGF0aW9uIG9mIGdzdHJlYW1lci4KKyMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyMgQWxlcyBOeWFraGF5Y2h5ayA8bmFiQG1haWwuYnk+LCAyMDA2LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDAuOS43XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDktMjkgMTQ6NTUrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDYtMDEtMTggMjI6MjYrMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogQWxlcyBOeWFraGF5Y2h5ayA8bmFiQG1haWwuYnk+XG4iCisiTGFuZ3VhZ2UtVGVhbTogQmVsYXJ1c2lhbiA8aTE4bkBtb3ZhLm9yZz5cbiIKKyJMYW5ndWFnZTogYmVcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworbXNnaWQgIlByaW50IHRoZSBHU3RyZWFtZXIgdmVyc2lvbiIKK21zZ3N0ciAi0JTRgNGD0LrRg9C1INCy0Y3RgNGB0YvRjiBHU3RyZWFtZXIiCisKK21zZ2lkICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKK21zZ3N0ciAi0KDQvtCx0ZbRhtGMINGD0YHQtSDQv9Cw0L/Rj9GA0Y3QtNC20LDQvdGM0L3RliDRhNCw0YLQsNC70YzQvdGL0LzRliIKKworbXNnaWQgIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IgorbXNnc3RyICLQlNGA0YPQutGD0LUg0L3QsNGP0Z7QvdGL0Y8g0LrQsNGC0Y3Qs9C+0YDRi9GWINCw0LTQu9Cw0LTQutGWINC5INCy0YvRhdC+0LTQt9GW0YbRjCIKKworbXNnaWQgIiIKKyJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gNSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKK21zZ3N0ciAiIgorItCf0YDQsNC00LLRi9C30L3QsNGH0LDQvdGLINGe0LfRgNC+0LLQtdC90Ywg0LDQtNC70LDQtNC60ZYg0LDQtCAxICjRgtC+0LvRjNC60ZYg0L/QsNC80YvQu9C60ZYpINC00LAgNSAo0YPRgdGRKSDRhtGWIDAg0LrQsNCxICIKKyLQstGL0LrQu9GO0YfRi9GG0Ywg0LLRi9Cy0LDQtCIKKworbXNnaWQgIkxFVkVMIgorbXNnc3RyICLQo9CX0KDQntCS0JXQndCsIgorCittc2dpZCAiIgorIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5X25hbWU6bGV2ZWwgcGFpcnMgdG8gc2V0IHNwZWNpZmljIGxldmVscyBmb3IgIgorInRoZSBpbmRpdmlkdWFsIGNhdGVnb3JpZXMuIEV4YW1wbGU6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKK21zZ3N0ciAiIgorItCg0LDQt9GM0LzQtdC20LDQstCw0L3RiyDQutC+0YHQutCw0LzRliDRgdGM0L/RltGBINC/0LDRgCBjYXRlZ29yX25hbWU6bGV2ZWwg0LTQu9GPINCy0YvRgdGC0LDRntC70LXQvdGM0L3RjyAiCisi0LDQtNC80YvRgdC70L7QstGL0YUg0YPQt9GA0L7RntC90Y/RniDQtNC70Y8g0LDRgdC+0LHQvdGL0YUg0LrQsNGC0Y3Qs9C+0YDRi9GP0Z4uINCd0LDQv9GA0YvQutC70LDQtCwgR1NUX0FVVE9QTFVHOjUsIgorIkdTVF9FTEVNRU5UXyo6MyIKKworbXNnaWQgIkxJU1QiCittc2dzdHIgItCh0KzQn9CG0KEiCisKK21zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKK21zZ3N0ciAi0JLRi9C60LvRjtGH0LDQtSDQutCw0LvRj9GA0L7QstGLINCy0YvQstCw0LQg0LDQtNC70LDQtNC60ZYiCisKK21zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKK21zZ3N0ciAi0JLRi9C60LvRjtGH0LDQtSDQsNC00LvQsNC00LrRgyIKKworbXNnaWQgIkVuYWJsZSB2ZXJib3NlIHBsdWdpbiBsb2FkaW5nIGRpYWdub3N0aWNzIgorbXNnc3RyICLQo9C60LvRjtGH0LDQtSDRiNC80LDRgtGB0LvQvtGe0L3Rg9GOINC00YvRj9Cz0L3QvtGB0YLRi9C60YMg0LfQsNCz0YDRg9C30LrRliDRntGC0YPQu9Cw0LoiCisKK21zZ2lkICJDb2xvbi1zZXBhcmF0ZWQgcGF0aHMgY29udGFpbmluZyBwbHVnaW5zIgorbXNnc3RyICLQn9Cw0LTQt9C10LvQtdC90Ysg0LTQstGD0LrRgNC+0L8n0Y/QvNGWINGB0YzQv9GW0YEg0YjQu9GP0YXQvtGeLCDQtNC30LUg0LzQtdGB0YzRhtGP0YbRhtCwINGe0YLRg9C70LrRliIKKworbXNnaWQgIlBBVEhTIgorbXNnc3RyICLQqNCb0K/QpdCGIgorCittc2dpZCAiIgorIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgorImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKK21zZ3N0ciAiIgorCittc2dpZCAiUExVR0lOUyIKK21zZ3N0ciAiIgorCittc2dpZCAiRGlzYWJsZSB0cmFwcGluZyBvZiBzZWdtZW50YXRpb24gZmF1bHRzIGR1cmluZyBwbHVnaW4gbG9hZGluZyIKK21zZ3N0ciAiIgorCittc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIiIKKworbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIiIKKworbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgorbXNnc3RyICIiCisKK21zZ2lkICJTaG93IEdTdHJlYW1lciBPcHRpb25zIgorbXNnc3RyICIiCisKK21zZ2lkICJVbmtub3duIG9wdGlvbiIKK21zZ3N0ciAiIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiR1N0cmVhbWVyIGRldmVsb3BlcnMgd2VyZSB0b28gbGF6eSB0byBhc3NpZ24gYW4gZXJyb3IgY29kZSB0byB0aGlzIGVycm9yLiIKK21zZ3N0ciAiIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjb2RlIG5vdCBpbXBsZW1lbnRlZC4iCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQgYW5kIHNvbWUgZWxlbWVudCBmYWlsZWQgdG8gcG9zdCBhICIKKyJwcm9wZXIgZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLiIKK21zZ3N0ciAiIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCittc2dzdHIgIiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGhyZWFkIHByb2JsZW0uIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4iCittc2dzdHIgIiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2FwcyBwcm9ibGVtLiIKK21zZ3N0ciAiIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4iCittc2dzdHIgIiIKKworbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCittc2dzdHIgIiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2xvY2sgcHJvYmxlbS4iCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCisiZGlzYWJsZWQuIgorbXNnc3RyICIiCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN1cHBvcnRpbmcgbGlicmFyeSBlcnJvci4iCittc2dzdHIgIiIKKworbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIiIKKworbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICLQndC10LzQsNCz0YfRi9C80LAg0LDQtNGH0YvQvdGW0YbRjCDRgNCw0YHRg9GA0YEg0LTQu9GPINC30LDQv9GW0YHRgy4iCisKK21zZ2lkICJFbmNvZGluZyBlcnJvci4iCittc2dzdHIgIiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgorbXNnc3RyICIiCisKK21zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgorbXNnc3RyICLQoNCw0YHRg9GA0YEg0L3RjyDQt9C90L7QudC00LfQtdC90YsuIgorCittc2dpZCAiUmVzb3VyY2UgYnVzeSBvciBub3QgYXZhaWxhYmxlLiIKK21zZ3N0ciAi0KDQsNGB0YPRgNGBINC30LDQvdGP0YLRiyDRhtGWINC90LXQtNCw0YHRgtGD0L/QvdGLLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKK21zZ3N0ciAi0J3QtdC80LDQs9GH0YvQvNCwINCw0LTRh9GL0L3RltGG0Ywg0YDQsNGB0YPRgNGBINC00LvRjyDRh9GL0YLQsNC90YzQvdGPLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKK21zZ3N0ciAi0J3QtdC80LDQs9GH0YvQvNCwINCw0LTRh9GL0L3RltGG0Ywg0YDQsNGB0YPRgNGBINC00LvRjyDQt9Cw0L/RltGB0YMuIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgorbXNnc3RyICLQndC10LzQsNCz0YfRi9C80LAg0LDQtNGH0YvQvdGW0YbRjCDRgNCw0YHRg9GA0YEg0LTQu9GPINGH0YvRgtCw0L3RjNC90Y8g0ZYg0LfQsNC/0ZbRgdGDLiIKKworbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSByZXNvdXJjZS4iCittc2dzdHIgItCd0LXQvNCw0LPRh9GL0LzQsCDQt9Cw0YfRi9C90ZbRhtGMINGA0LDRgdGD0YDRgS4iCisKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIHJlc291cmNlLiIKK21zZ3N0ciAi0J3QtdC80LDQs9GH0YvQvNCwINC/0YDQsNGH0YvRgtCw0YbRjCDQtyDRgNCw0YHRg9GA0YHRgy4iCisKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gcmVzb3VyY2UuIgorbXNnc3RyICLQndC10LzQsNCz0YfRi9C80LAg0LfQsNC/0ZbRgdCw0YbRjCDRgyDRgNCw0YHRg9GA0YEuIgorCittc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCittc2dzdHIgIiIKKworbXNnaWQgIkNvdWxkIG5vdCBzeW5jaHJvbml6ZSBvbiByZXNvdXJjZS4iCittc2dzdHIgIiIKKworbXNnaWQgIkNvdWxkIG5vdCBnZXQvc2V0IHNldHRpbmdzIGZyb20vb24gcmVzb3VyY2UuIgorbXNnc3RyICIiCisKK21zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCittc2dzdHIgIiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiIgorCittc2dpZCAiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBoYW5kbGluZyBvZiB0aGlzIHN0cmVhbS4gUGxlYXNlIGZpbGUgYSBidWcuIgorbXNnc3RyICIiCisKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIHR5cGUgb2Ygc3RyZWFtLiIKK21zZ3N0ciAi0J3QtdC80LDQs9GH0YvQvNCwINCy0YvQt9C90LDRh9GL0YbRjCDRgtGL0L8g0L/Qu9GL0L3Rli4iCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgZWxlbWVudC4iCittc2dzdHIgIiIKKworbXNnaWQgIlRoZXJlIGlzIG5vIGNvZGVjIHByZXNlbnQgdGhhdCBjYW4gaGFuZGxlIHRoZSBzdHJlYW0ncyB0eXBlLiIKK21zZ3N0ciAiIgorCittc2dpZCAiQ291bGQgbm90IGRlY29kZSBzdHJlYW0uIgorbXNnc3RyICLQndC10LzQsNCz0YfRi9C80LAg0LTRjdC60LDQtNCw0LLQsNGG0Ywg0L/Qu9GL0L3Rji4iCisKK21zZ2lkICJDb3VsZCBub3QgZW5jb2RlIHN0cmVhbS4iCittc2dzdHIgItCd0LXQvNCw0LPRh9GL0LzQsCDQt9Cw0LrQsNC00LDQstCw0YbRjCDQv9C70YvQvdGOLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZW11bHRpcGxleCBzdHJlYW0uIgorbXNnc3RyICIiCisKK21zZ2lkICJDb3VsZCBub3QgbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgaW4gdGhlIHdyb25nIGZvcm1hdC4iCittc2dzdHIgIiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBkZWNyeXB0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGNhbid0IGJlIGRlY3J5cHRlZCBiZWNhdXNlIG5vIHN1aXRhYmxlIGtleSBoYXMgIgorImJlZW4gc3VwcGxpZWQuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzLiIKK21zZ3N0ciAi0JDQtNGB0YPRgtC90ZbRh9Cw0LUg0L/QsNCy0LXQtNCw0LzQu9C10L3RjNC90LUg0LDQsSDQv9Cw0LzRi9C70YbRiyDQtNC70Y8g0LzQsNGR0L3RgtC60LAgJXMiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKK21zZ3N0ciAiIgorCittc2dpZCAiU2VsZWN0ZWQgY2xvY2sgY2Fubm90IGJlIHVzZWQgaW4gcGlwZWxpbmUuIgorbXNnc3RyICIiCisKK21zZ2lkICJ0aXRsZSIKK21zZ3N0ciAi0LfQsNCz0LDQu9C+0LLQsNC6IgorCittc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKK21zZ3N0ciAi0LDQs9GD0LvRjNC90LAg0Z7QttGL0LLQsNC70YzQvdCw0Y8g0L3QsNC30LLQsCIKKworbXNnaWQgInRpdGxlIHNvcnRuYW1lIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAi0LDQs9GD0LvRjNC90LAg0Z7QttGL0LLQsNC70YzQvdCw0Y8g0L3QsNC30LLQsCIKKworbXNnaWQgImFydGlzdCIKK21zZ3N0ciAi0LLRi9C60LDQvdCw0Z7RhtCwIgorCittc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIgorbXNnc3RyICLQsNGB0L7QsdCwKNGLKSDQsNC00LrQsNC30L3Ri9GPINC30LAg0LfQsNC/0ZbRgSIKKworbXNnaWQgImFydGlzdCBzb3J0bmFtZSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAi0LDRgdC+0LHQsCjRiykg0LDQtNC60LDQt9C90YvRjyDQt9CwINC30LDQv9GW0YEiCisKK21zZ2lkICJhbGJ1bSIKK21zZ3N0ciAi0LDQu9GM0LHQvtC8IgorCittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiCittc2dzdHIgItCw0LvRjNCx0L7QvCwg0Y/QutGW0Y8g0LfRjNC80Y/RiNGH0LDQtSDQs9GN0YLRi9GPINC00LDQvdGM0ZYiCisKK21zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICLQsNC70YzQsdC+0LwsINGP0LrRltGPINC30YzQvNGP0YjRh9Cw0LUg0LPRjdGC0YvRjyDQtNCw0L3RjNGWIgorCisjLCBmdXp6eQorbXNnaWQgImFsYnVtIGFydGlzdCIKK21zZ3N0ciAi0LLRi9C60LDQvdCw0Z7RhtCwIgorCittc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgorbXNnc3RyICIiCisKK21zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgIiIKKworbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCIKK21zZ3N0ciAiIgorCittc2dpZCAiZGF0ZSIKK21zZ3N0ciAi0LTQsNGC0LAiCisKK21zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCittc2dzdHIgItC00LDRgtCwLCDQutCw0LvRliDQs9GN0YLRi9GPINC00LDQvdGM0L3RliDQsdGL0LvRliDRgdGC0LLQvtGA0LDQvdCwICjRj9C6INGB0YLRgNGD0LrRgtGD0YDQsCBHRGF0ZSkiCisKKyMsIGZ1enp5Cittc2dpZCAiZGF0ZXRpbWUiCittc2dzdHIgItC00LDRgtCwIgorCisjLCBmdXp6eQorbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKK21zZ3N0ciAi0LTQsNGC0LAsINC60LDQu9GWINCz0Y3RgtGL0Y8g0LTQsNC90YzQvdGWINCx0YvQu9GWINGB0YLQstC+0YDQsNC90LAgKNGP0Log0YHRgtGA0YPQutGC0YPRgNCwIEdEYXRlKSIKKworbXNnaWQgImdlbnJlIgorbXNnc3RyICLQttCw0L3RgCIKKworbXNnaWQgImdlbnJlIHRoaXMgZGF0YSBiZWxvbmdzIHRvIgorbXNnc3RyICLQttCw0L3RgCDQtNCwINGP0LPQvtC60LAg0L3QsNC70LXQttCw0YbRjCDQs9GN0YLRi9GPINC00LDQvdGM0L3RliIKKworbXNnaWQgImNvbW1lbnQiCittc2dzdHIgItC60LDQvNGN0L3RgtCw0YAiCisKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKK21zZ3N0ciAi0LvRjtCx0Ysg0YLRjdC60YEsINGP0LrRliDQutCw0LzRjdC90YLRg9C1INCz0Y3RgtGL0Y8g0LTQsNC90YzQvdGWIgorCisjLCBmdXp6eQorbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCittc2dzdHIgItC60LDQvNGN0L3RgtCw0YAiCisKKyMsIGZ1enp5Cittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgorbXNnc3RyICLQu9GO0LHRiyDRgtGN0LrRgSwg0Y/QutGWINC60LDQvNGN0L3RgtGD0LUg0LPRjdGC0YvRjyDQtNCw0L3RjNC90ZYiCisKK21zZ2lkICJ0cmFjayBudW1iZXIiCittc2dzdHIgItC90YPQvNGAINC30LDQv9GW0YHRgyIKKworbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICLQvdGD0LzQsNGAINC30LDQv9GW0YHRgyDRniDQvNC10LbQsNGFINC60LDQu9C10LrRhtGL0ZYiCisKK21zZ2lkICJ0cmFjayBjb3VudCIKK21zZ3N0ciAi0LrQvtC70YzQutCw0YHRjNGG0Ywg0LfQsNC/0ZbRgdCw0Z4iCisKK21zZ2lkICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgorbXNnc3RyICLQutC+0LvRjNC60LDRgdGM0YbRjCDQt9Cw0L/RltGB0LDRniDRniDQvNC10LbQsNGFINC60LDQu9C10LrRhtGL0ZYg0LTQsCDRj9C60L7QuSDQs9GN0YLRiyDQt9Cw0L/RltGBINC90LDQu9C10LbRi9GG0YwiCisKK21zZ2lkICJkaXNjIG51bWJlciIKK21zZ3N0ciAi0L3Rg9C80LDRgCDQtNGL0YHQutCwIgorCittc2dpZCAiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKK21zZ3N0ciAi0L3Rg9C80LDRgCDQtNGL0YHQutCwINGeINC80LXQttCw0YUg0LrQsNC70LXQutGG0YvRliIKKworbXNnaWQgImRpc2MgY291bnQiCittc2dzdHIgIiIKKworbXNnaWQgImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIgorbXNnc3RyICIiCisKK21zZ2lkICJsb2NhdGlvbiIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgorImlzIGhvc3RlZCkiCittc2dzdHIgIiIKKworbXNnaWQgImhvbWVwYWdlIgorbXNnc3RyICIiCisKK21zZ2lkICJIb21lcGFnZSBmb3IgdGhpcyBtZWRpYSAoaS5lLiBhcnRpc3Qgb3IgbW92aWUgaG9tZXBhZ2UpIgorbXNnc3RyICIiCisKK21zZ2lkICJkZXNjcmlwdGlvbiIKK21zZ3N0ciAiIgorCittc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgorbXNnc3RyICIiCisKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICIiCisKK21zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKK21zZ3N0ciAiIgorCittc2dpZCAiSVNSQyIKK21zZ3N0ciAiIgorCittc2dpZCAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgorbXNnc3RyICIiCisKK21zZ2lkICJvcmdhbml6YXRpb24iCittc2dzdHIgIiIKKworbXNnaWQgImNvcHlyaWdodCIKK21zZ3N0ciAiIgorCittc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiIgorCittc2dpZCAiY29weXJpZ2h0IHVyaSIKK21zZ3N0ciAiIgorCittc2dpZCAiVVJJIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICIiCisKK21zZ2lkICJlbmNvZGVkIGJ5IgorbXNnc3RyICIiCisKK21zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICJjb250YWN0IgorbXNnc3RyICIiCisKK21zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICJsaWNlbnNlIgorbXNnc3RyICIiCisKK21zZ2lkICJsaWNlbnNlIG9mIGRhdGEiCittc2dzdHIgIiIKKworbXNnaWQgImxpY2Vuc2UgdXJpIgorbXNnc3RyICIiCisKK21zZ2lkICJVUkkgdG8gdGhlIGxpY2Vuc2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgIiIKKworbXNnaWQgInBlcmZvcm1lciIKK21zZ3N0ciAiIgorCittc2dpZCAicGVyc29uKHMpIHBlcmZvcm1pbmciCittc2dzdHIgIiIKKworbXNnaWQgImNvbXBvc2VyIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nIgorbXNnc3RyICLQsNGB0L7QsdCwKNGLKSDQsNC00LrQsNC30L3Ri9GPINC30LAg0LfQsNC/0ZbRgSIKKworbXNnaWQgImR1cmF0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKK21zZ3N0ciAiIgorCittc2dpZCAiY29kZWMiCittc2dzdHIgIiIKKworbXNnaWQgImNvZGVjIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiIgorCittc2dpZCAidmlkZW8gY29kZWMiCittc2dzdHIgIiIKKworbXNnaWQgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiIgorCittc2dpZCAiYXVkaW8gY29kZWMiCittc2dzdHIgIiIKKworbXNnaWQgImNvZGVjIHRoZSBhdWRpbyBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiIgorCittc2dpZCAic3VidGl0bGUgY29kZWMiCittc2dzdHIgIiIKKworbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiIgorCittc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKK21zZ3N0ciAiIgorCittc2dpZCAiY29udGFpbmVyIGZvcm1hdCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgIiIKKworbXNnaWQgImJpdHJhdGUiCittc2dzdHIgIiIKKworbXNnaWQgImV4YWN0IG9yIGF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgIiIKKworbXNnaWQgIm5vbWluYWwgYml0cmF0ZSIKK21zZ3N0ciAiIgorCittc2dpZCAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAiIgorCittc2dpZCAibWluaW11bSBiaXRyYXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICIiCisKK21zZ2lkICJtYXhpbXVtIGJpdHJhdGUiCittc2dzdHIgIiIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgIiIKKworbXNnaWQgImVuY29kZXIiCittc2dzdHIgIiIKKworbXNnaWQgImVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCittc2dzdHIgIiIKKworbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKK21zZ3N0ciAiIgorCittc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiIgorCittc2dpZCAic2VyaWFsIgorbXNnc3RyICIiCisKK21zZ2lkICJzZXJpYWwgbnVtYmVyIG9mIHRyYWNrIgorbXNnc3RyICIiCisKK21zZ2lkICJyZXBsYXlnYWluIHRyYWNrIGdhaW4iCittc2dzdHIgIiIKKworbXNnaWQgInRyYWNrIGdhaW4gaW4gZGIiCittc2dzdHIgIiIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgcGVhayIKK21zZ3N0ciAiIgorCittc2dpZCAicGVhayBvZiB0aGUgdHJhY2siCittc2dzdHIgIiIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKK21zZ3N0ciAiIgorCittc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKK21zZ3N0ciAiIgorCittc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBwZWFrIgorbXNnc3RyICIiCisKK21zZ2lkICJwZWFrIG9mIHRoZSBhbGJ1bSIKK21zZ3N0ciAiIgorCittc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCittc2dzdHIgIiIKKworbXNnaWQgInJlZmVyZW5jZSBsZXZlbCBvZiB0cmFjayBhbmQgYWxidW0gZ2FpbiB2YWx1ZXMiCittc2dzdHIgIiIKKworbXNnaWQgImxhbmd1YWdlIGNvZGUiCittc2dzdHIgIiIKKworbXNnaWQgImxhbmd1YWdlIGNvZGUgZm9yIHRoaXMgc3RyZWFtLCBjb25mb3JtaW5nIHRvIElTTy02MzktMSIKK21zZ3N0ciAiIgorCittc2dpZCAiaW1hZ2UiCittc2dzdHIgIiIKKworbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCittc2dpZCAicHJldmlldyBpbWFnZSIKK21zZ3N0ciAiIgorCittc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICIiCisKK21zZ2lkICJhdHRhY2htZW50IgorbXNnc3RyICIiCisKK21zZ2lkICJmaWxlIGF0dGFjaGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICIiCisKK21zZ2lkICJiZWF0cyBwZXIgbWludXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKK21zZ3N0ciAiIgorCittc2dpZCAia2V5d29yZHMiCittc2dzdHIgIiIKKworbXNnaWQgImNvbW1hIHNlcGFyYXRlZCBrZXl3b3JkcyBkZXNjcmliaW5nIHRoZSBjb250ZW50IgorbXNnc3RyICIiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorImh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aXZlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciAiCisicHJvZHVjZWQiCittc2dzdHIgIiIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBsYXRpdHVkZSIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorImdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yICIKKyJzb3V0aGVybiBsYXRpdHVkZXMpIgorbXNnc3RyICIiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbG9uZ2l0dWRlIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCisibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgorbXNnc3RyICIiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gZWxldmF0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKKyJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgorbXNnc3RyICIiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gY291bnRyeSIKK21zZ3N0ciAiIgorCittc2dpZCAiY291bnRyeSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCittc2dzdHIgIiIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBjaXR5IgorbXNnc3RyICIiCisKK21zZ2lkICJjaXR5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKK21zZ3N0ciAiIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIHN1YmxvY2F0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiYSBsb2NhdGlvbiB3aGl0aGluIGEgY2l0eSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgb3IgY3JlYXRlZCAoZS5nLiAiCisidGhlIG5laWdoYm9yaG9vZCkiCittc2dzdHIgIiIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgorbXNnc3RyICIiCisKK21zZ2lkICJleHBlY3RlZCBlcnJvciBvZiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbmluZyBtZWFzdXJlcyAoaW4gbWV0ZXJzKSIKK21zZ3N0ciAiIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBpbiBtL3MiCittc2dzdHIgIiIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBkaXJlY3Rpb24iCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJpbmRpY2F0ZXMgdGhlIG1vdmVtZW50IGRpcmVjdGlvbiBvZiB0aGUgZGV2aWNlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgb2YgYSAiCisibWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sIDAgIgorIm1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKK21zZ3N0ciAiIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGRldmljZSBpcyBwb2ludGluZyB0byB3aGVuIGNhcHR1cmluZyAgYSBtZWRpYS4gIgorIkl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIHJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSAiCisiZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICdzaG93IG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lJyBoZXJlCittc2dpZCAic2hvdyBuYW1lIgorbXNnc3RyICIiCisKK21zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQorbXNnaWQgInNob3cgc29ydG5hbWUiCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImVwaXNvZGUgbnVtYmVyIgorbXNnc3RyICLQvdGD0LzQsNGAINC00YvRgdC60LAiCisKK21zZ2lkICJUaGUgZXBpc29kZSBudW1iZXIgaW4gdGhlIHNlYXNvbiB0aGUgbWVkaWEgaXMgcGFydCBvZiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgInNlYXNvbiBudW1iZXIiCittc2dzdHIgItC90YPQvNCw0YAg0LTRi9GB0LrQsCIKKworbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICIiCisKK21zZ2lkICJseXJpY3MiCittc2dzdHIgIiIKKworbXNnaWQgIlRoZSBseXJpY3Mgb2YgdGhlIG1lZGlhLCBjb21tb25seSB1c2VkIGZvciBzb25ncyIKK21zZ3N0ciAiIgorCittc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICLQsNGB0L7QsdCwKNGLKSDQsNC00LrQsNC30L3Ri9GPINC30LAg0LfQsNC/0ZbRgSIKKworbXNnaWQgImdyb3VwaW5nIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiR3JvdXBzIHJlbGF0ZWQgbWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSB0cmFja3MsIGxpa2UgdGhlIGRpZmZlcmVudCBwaWVjZXMgIgorIm9mIGEgY29uY2VydG8uIEl0IGlzIGEgaGlnaGVyIGxldmVsIHRoYW4gYSB0cmFjaywgYnV0IGxvd2VyIHRoYW4gYW4gYWxidW0iCittc2dzdHIgIiIKKworbXNnaWQgInVzZXIgcmF0aW5nIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCisidGhpcyBtZWRpYSIKK21zZ3N0ciAiIgorCittc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKK21zZ3N0ciAiIgorCittc2dpZCAiTWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKK21zZ3N0ciAiIgorCittc2dpZCAiZGV2aWNlIG1vZGVsIgorbXNnc3RyICIiCisKK21zZ2lkICJNb2RlbCBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCittc2dzdHIgIiIKKworbXNnaWQgImFwcGxpY2F0aW9uIG5hbWUiCittc2dzdHIgIiIKKworbXNnaWQgIkFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSIKK21zZ3N0ciAiIgorCittc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKK21zZ3N0ciAiIgorCittc2dpZCAiQXJiaXRyYXJ5IGFwcGxpY2F0aW9uIGRhdGEgdG8gYmUgc2VyaWFsaXplZCBpbnRvIHRoZSBtZWRpYSIKK21zZ3N0ciAiIgorCittc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCittc2dzdHIgIiIKKworbXNnaWQgIkhvdyB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCBiZWZvcmUgZGlzcGxheSIKK21zZ3N0ciAiIgorCittc2dpZCAiLCAiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKKyIlc1xuIgorbXNnc3RyICIiCisi0JTQsNC00LDRgtC60L7QstCw0Y8g0LDQtNC70LDQtNCw0YfQvdCw0Y8g0ZbQvdGE0LDRgNC80LDRhtGL0Y86XG4iCisiJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJzcGVjaWZpZWQgZW1wdHkgYmluIFwiJXNcIiwgbm90IGFsbG93ZWQiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBiaW4gXCIlc1wiLCBza2lwcGluZyIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCittc2dzdHIgIiIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIKK21zZ3N0ciAiIgorCittc2dpZCAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNvdXJjZSBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCB0byBsaW5rIFVSSSBcIiVzXCIgdG8iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbGluayBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgIiIKKworbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBjbG9jayBlcnJvci4iCittc2dzdHIgIiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCittc2dzdHIgIiIKKworbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCittc2dzdHIgIiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiIgorCittc2dpZCAiRmlsdGVyIGNhcHMiCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKKyJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgorbXNnc3RyICIiCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNsb3NpbmcgZmlsZSBcIiVzXCIuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Vla2luZyBpbiBmaWxlIFwiJXNcIi4iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiIgorCittc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCittc2dzdHIgIiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgorbXNnc3RyICLQndC10LzQsNCz0YfRi9C80LAg0LDQtNGH0YvQvdGW0YbRjCDRgNCw0YHRg9GA0YEg0LTQu9GPINGH0YvRgtCw0L3RjNC90Y8uIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGluZm8gb24gXCIlc1wiLiIKK21zZ3N0ciAi0J3QtdC80LDQs9GH0YvQvNCwINC30LDQutCw0LTQsNCy0LDRhtGMINC/0LvRi9C90Y4uIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIlwiJXNcIiBpcyBhIGRpcmVjdG9yeS4iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFwiJXNcIiBpcyBhIHNvY2tldC4iCittc2dzdHIgIiIKKworbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCittc2dzdHIgIiIKKworbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCittc2dzdHIgIiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAi0J3QtdC80LDQs9GH0YvQvNCwINC30LDQutCw0LTQsNCy0LDRhtGMINC/0LvRi9C90Y4uIgorCittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKK21zZ3N0ciAiIgorCittc2dpZCAiY2FwcyIKK21zZ3N0ciAiIgorCittc2dpZCAiZGV0ZWN0ZWQgY2FwYWJpbGl0aWVzIGluIHN0cmVhbSIKK21zZ3N0ciAiIgorCittc2dpZCAibWluaW11bSIKK21zZ3N0ciAiIgorCittc2dpZCAibWF4aW11bSIKK21zZ3N0ciAiIgorCittc2dpZCAiZm9yY2UgY2FwcyIKK21zZ3N0ciAiIgorCittc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJTdHJlYW0gY29udGFpbnMgbm8gZGF0YS4iCittc2dzdHIgItCw0LvRjNCx0L7QvCwg0Y/QutGW0Y8g0LfRjNC80Y/RiNGH0LDQtSDQs9GN0YLRi9GPINC00LDQvdGM0ZYiCisKK21zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJyZWFkYWJsZSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIndyaXRhYmxlIgorbXNnc3RyICLQt9Cw0LPQsNC70L7QstCw0LoiCisKK21zZ2lkICJjb250cm9sbGFibGUiCittc2dzdHIgIiIKKworbXNnaWQgImNoYW5nZWFibGUgaW4gTlVMTCwgUkVBRFksIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCwgUkVBRFkgb3IgUEFVU0VEIHN0YXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKK21zZ3N0ciAiIgorCittc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiVG90YWwgY291bnQ6ICIKK21zZ3N0ciAi0LrQvtC70YzQutCw0YHRjNGG0Ywg0LfQsNC/0ZbRgdCw0Z4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxhY2tsaXN0ZWQgZmlsZSIKK21zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIHBsdWdpbiIKK21zZ2lkX3BsdXJhbCAiJWQgcGx1Z2lucyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgorbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgZmVhdHVyZSIKK21zZ2lkX3BsdXJhbCAiJWQgZmVhdHVyZXMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCittc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgorbXNnc3RyICIiCisKK21zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiUHJpbnQgYSBtYWNoaW5lLXBhcnNhYmxlIGxpc3Qgb2YgZmVhdHVyZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4gb3IgYWxsICIKKyJwbHVnaW5zIHByb3ZpZGUuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIGluIGNvbm5lY3Rpb24gd2l0aCBleHRlcm5hbCAiCisiYXV0b21hdGljIHBsdWdpbiBpbnN0YWxsYXRpb24gbWVjaGFuaXNtcyIKK21zZ3N0ciAiIgorCittc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgorbXNnc3RyICIiCisKK21zZ2lkICJQcmludCBzdXBwb3J0ZWQgVVJJIHNjaGVtZXMsIHdpdGggdGhlIGVsZW1lbnRzIHRoYXQgaW1wbGVtZW50IHRoZW0iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmlsZTogJXNcbiIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgorbXNnc3RyICIiCisKK21zZ2lkICJJbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSAoJXMpOiAiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgRU9TIGZyb20gZWxlbWVudCBcIiVzXCIuXG4iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBwYWQgXCIlczolc1wiLlxuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJGT1VORCBUQUdcbiIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJTkZPOlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCittc2dzdHIgIiIKKworbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJidWZmZXJpbmcuLi4iCittc2dzdHIgIiIKKworbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcnJ1cHQ6IFN0b3BwaW5nIHBpcGVsaW5lIC4uLlxuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBlbGVtZW50OiAlc1xuIgorbXNnc3RyICIiCisKK21zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCittc2dzdHIgIiIKKworbXNnaWQgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCittc2dzdHIgIiIKKworbXNnaWQgIkRvIG5vdCBwcmludCBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKK21zZ3N0ciAiIgorCittc2dpZCAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKK21zZ3N0ciAiIgorCittc2dpZCAiVFlQRTEsVFlQRTIsLi4uIgorbXNnc3RyICIiCisKK21zZ2lkICJEbyBub3QgaW5zdGFsbCBhIGZhdWx0IGhhbmRsZXIiCittc2dzdHIgIiIKKworbXNnaWQgIlByaW50IGFsbG9jIHRyYWNlIChpZiBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSkiCittc2dzdHIgIiIKKworbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKK21zZ3N0ciAiIgorCittc2dpZCAiR2F0aGVyIGFuZCBwcmludCBpbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZDogJXMuXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXG4iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkVSUk9SOiB0aGUgJ3BpcGVsaW5lJyBlbGVtZW50IHdhc24ndCBmb3VuZC5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCittc2dzdHIgIiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIGxpdmUgYW5kIGRvZXMgbm90IG5lZWQgUFJFUk9MTCAuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTElORyAuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMRUQgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKK21zZ3N0ciAiIgorCittc2dpZCAiV2FpdGluZyBmb3IgRU9TLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgorbXNnc3RyICIiCisKK21zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKK21zZ3N0ciAiIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIgorbXNnc3RyICIiCmRpZmYgLS1naXQgYS9wby9iZy5nbW8gYi9wby9iZy5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzViMjQyNwotLS0gL2Rldi9udWxsCisrKyBiL3BvL2JnLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9iZy5wbyBiL3BvL2JnLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxOTlmM2EKLS0tIC9kZXYvbnVsbAorKysgYi9wby9iZy5wbwpAQCAtMCwwICsxLDEyMzMgQEAKKyMgQnVsZ2FyaWFuIHRyYW5zbGF0aW9uIG9mIGdzdHJlYW1lci4KKyMgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm9uZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnc3RyZWFtZXIgcGFja2FnZS4KKyMgQWxleGFuZGVyIFNob3BvdiA8YXNoQGNvbnRhY3QuYmc+LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLgorIworIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDAuMTAuMzIuMlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTA5LTI5IDE0OjU1KzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDExLTA0LTI2IDIyOjQwKzAzMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEFsZXhhbmRlciBTaG9wb3YgPGFzaEBrYW1iYW5hcmlhLm9yZz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBCdWxnYXJpYW4gPGRpY3RAZnNhLWJnLm9yZz5cbiIKKyJMYW5ndWFnZTogYmdcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD1uICE9IDE7XG4iCisKK21zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCittc2dzdHIgItCe0YLQv9C10YfQsNGC0LLQsNC90LUg0L3QsCDQstC10YDRgdC40Y/RgtCwINC90LAgR1N0cmVhbWVyIgorCittc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCittc2dzdHIgItCS0YHQuNGH0LrQuCDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNGPINC00LAg0YHQsCDRhNCw0YLQsNC70L3QuCIKKworbXNnaWQgIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IgorbXNnc3RyICLQntGC0L/QtdGH0LDRgtCy0LDQvdC1INC90LAg0L3QsNC70LjRh9C90LjRgtC1INC60LDRgtC10LPQvtGA0LjQuCDQt9CwINC40LfRh9C40YHRgtCy0LDQvdC1INC90LAg0LPRgNC10YjQutC4INC4INC40LfRhdC+0LQiCisKK21zZ2lkICIiCisiRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmcm9tIDEgKG9ubHkgZXJyb3IpIHRvIDUgKGFueXRoaW5nKSBvciAwIGZvciBubyBvdXRwdXQiCittc2dzdHIgIiIKKyLQodGC0LDQvdC00LDRgNGC0L3QvtGC0L4g0L3QuNCy0L4g0LfQsCDQuNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINCz0YDQtdGI0LrQuCDigJQg0L7RgiAxICjRgdCw0LzQviDQs9GA0LXRiNC60LgpINC00L4gNSAo0LLRgdC40YfQutC+KSAiCisi0LjQu9C4IDAg4oCUINCx0LXQtyDQvdC40LrQsNC60LLQuCDRgdGK0L7QsdGJ0LXQvdC40Y8g0LfQsCDQuNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINCz0YDQtdGI0LrQuCIKKworbXNnaWQgIkxFVkVMIgorbXNnc3RyICLQndCY0JLQniIKKworbXNnaWQgIiIKKyJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yICIKKyJ0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCittc2dzdHIgIiIKKyLQodC/0LjRgdGK0Log0L7RgiDQtNCy0L7QudC60Lgg0LjQvNC1X9C90LBf0LrQsNGC0LXQs9C+0YDQuNGPOtC90LjQstC+INGA0LDQt9C00LXQu9C10L3QuCDRgdGK0YEg0LfQsNC/0LXRgtCw0LguINCi0L7QuSDRg9C60LDQt9Cy0LAgIgorItC60L7QvdC60YDQtdGC0L3QuNGC0LUg0L3QuNCy0LAg0LfQsCDRgdGK0L7QsdGJ0LXQvdC40Y8g0LfQsCDQuNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINCz0YDQtdGI0LrQuCDQvdCwINC+0YLQtNC10LvQvdC40YLQtSAiCisi0LrQsNGC0LXQs9C+0YDQuNC4LiDQndCw0L/RgNC40LzQtdGAOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCisKK21zZ2lkICJMSVNUIgorbXNnc3RyICLQodCf0JjQodCq0JoiCisKK21zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKK21zZ3N0ciAi0KHQv9C40YDQsNC90LUg0L3QsCDQvtGG0LLQtdGC0LXQvdC40YLQtSDRgdGK0L7QsdGJ0LXQvdC40Y8g0LfQsCDQuNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINCz0YDQtdGI0LrQuCIKKworbXNnaWQgIkRpc2FibGUgZGVidWdnaW5nIgorbXNnc3RyICLQodC/0LjRgNCw0L3QtSDQvdCwINGB0YrQvtCx0YnQtdC90LjRj9GC0LAg0LfQsCDQuNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINCz0YDQtdGI0LrQuCIKKworbXNnaWQgIkVuYWJsZSB2ZXJib3NlIHBsdWdpbiBsb2FkaW5nIGRpYWdub3N0aWNzIgorbXNnc3RyICLQktC60LvRjtGH0LLQsNC90LUg0L3QsCDQv9C+0LTRgNC+0LHQvdC4INGB0YrQvtCx0YnQtdC90LjRjyDQv9GA0Lgg0LfQsNGA0LXQttC00LDQvdC1INC90LAg0L/RgNC40YHRgtCw0LLQutCwIgorCittc2dpZCAiQ29sb24tc2VwYXJhdGVkIHBhdGhzIGNvbnRhaW5pbmcgcGx1Z2lucyIKK21zZ3N0ciAi0J/RitGC0LjRidCwINGBINC/0YDQuNGB0YLQsNCy0LrQuCwg0YDQsNC30LTQtdC70LXQvdC4INGBINC00LLQvtC10YLQvtGH0LjQtSIKKworbXNnaWQgIlBBVEhTIgorbXNnc3RyICLQn9Cq0KLQmNCp0JAiCisKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCisiZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgorbXNnc3RyICIiCisi0KHQv9C40YHRitC6INC+0YIg0L/RgNC40YHRgtCw0LLQutC4LCDRgNCw0LfQtNC10LvQtdC90Lgg0YHRitGBINC30LDQv9C10YLQsNGPLCDQutC+0LjRgtC+INC00LAg0LHRitC00LDRgiDQv9GA0LXQtNCy0LDRgNC40YLQtdC70L3QviAiCisi0LfQsNGA0LXQtNC10L3QuCDQsiDQtNC+0L/RitC70L3QtdC90LjQtSDQutGK0Lwg0YLQtdC30Lgg0L7RgiDRgdC/0LjRgdGK0LrQsCDQsiDQv9GA0L7QvNC10L3Qu9C40LLQsNGC0LAg0L3QsCDRgdGA0LXQtNCw0YLQsCAiCisiR1NUX1BQTFVHSU5fUEFUSCIKKworbXNnaWQgIlBMVUdJTlMiCittc2dzdHIgItCf0KDQmNCh0KLQkNCS0JrQmCIKKworbXNnaWQgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCittc2dzdHIgIiIKKyLQodC/0LjRgNCw0L3QtSDQvdCwINC/0YDQuNGF0LLQsNGJ0LDQvdC10YLQviDQvdCwINGB0LXQs9C80LXQvdGC0LDRhtC40L7QvdC90Lgg0LPRgNC10YjQutC4INC/0L4g0LLRgNC10LzQtdGC0L4g0L3QsCDQt9Cw0YDQtdC20LTQsNC90LUg0L3QsCAiCisi0L/RgNC40YHRgtCw0LLQutCwIgorCittc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgItCg0LXQs9C40YHRgtGK0YDRitGCINC00LAg0L3QtSDRgdC1INC/0YDQvtGH0LjRgtCwIgorCittc2dpZCAiRGlzYWJsZSBzcGF3bmluZyBhIGhlbHBlciBwcm9jZXNzIHdoaWxlIHNjYW5uaW5nIHRoZSByZWdpc3RyeSIKK21zZ3N0ciAi0JHQtdC3INGB0YLQsNGA0YLQuNGA0LDQvdC10YLQviDQvdCwINGB0L/QvtC80LDQs9Cw0YLQtdC70LXQvSDQv9GA0L7RhtC10YEg0L/RgNC4INC40LfRh9C40YLQsNC90LXRgtC+INC90LAg0YDQtdCz0LjRgdGC0YrRgNCwIgorCittc2dpZCAiR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgItCd0LDRgdGC0YDQvtC50LrQuCDQvdCwIEdTdHJlYW1lciIKKworbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgItCf0L7QutCw0LfQstCw0L3QtSDQvdCwINC+0L/RhtC40LjRgtC1INC90LAgR1N0cmVhbWVyIgorCittc2dpZCAiVW5rbm93biBvcHRpb24iCittc2dzdHIgItCd0LXQv9C+0LfQvdCw0YLQsCDQvtC/0YbQuNGPIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIg0L/QvtC70YPRh9C4INC+0LHRidCwINCz0YDQtdGI0LrQsCDQsiDQvtGB0L3QvtCy0L3QsCDQsdC40LHQu9C40L7RgtC10LrQsC4iCisKK21zZ2lkICIiCisiR1N0cmVhbWVyIGRldmVsb3BlcnMgd2VyZSB0b28gbGF6eSB0byBhc3NpZ24gYW4gZXJyb3IgY29kZSB0byB0aGlzIGVycm9yLiIKK21zZ3N0ciAiIgorItCg0LDQt9GA0LDQsdC+0YLRh9C40YbQuNGC0LUg0L3QsCBHU3RyZWFtZXIg0YHQsCDQsdC40LvQuCDQv9GA0LXQutCw0LvQtdC90L4g0LzRitGA0LfQtdC70LjQstC4INC4INC90LUg0YHQsCDQt9Cw0LTQsNC70Lgg0LrQvtC0ICIKKyLQt9CwINCz0YDQtdGI0LrQsCDQvdCwINGC0L7Qt9C4INC/0YDQvtCx0LvQtdC8LiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY29kZSBub3QgaW1wbGVtZW50ZWQuIgorbXNnc3RyICLQktGK0YLRgNC10YjQvdCwINCz0YDQtdGI0LrQsCDQvdCwIEdTdHJlYW1lcjog0LrQvtC00YrRgiDQvdC1INC1INGA0LXQsNC70LjQt9C40YDQsNC9LiIKKworbXNnaWQgIiIKKyJHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQgYW5kIHNvbWUgZWxlbWVudCBmYWlsZWQgdG8gcG9zdCBhICIKKyJwcm9wZXIgZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLiIKK21zZ3N0ciAiIgorItCT0YDQtdGI0LrQsCDQvdCwIEdTdHJlYW1lcjog0L3QtdGD0YHQv9C10YjQvdCwINC/0YDQvtC80Y/QvdCwINC90LAg0YHRitGB0YLQvtGP0L3QuNC10YLQviwg0LAg0L3Rj9C60L7QuSDQvtGCINC10LvQtdC80LXQvdGC0LjRgtC1ICIKKyLQv9GA0L7Qv9GD0YHQvdCwINC00LAg0L/QvtC00LDQtNC1INGB0YrQvtCx0YnQtdC90LjQtSDQt9CwINCz0YDQtdGI0LrQsCDRgSDQv9GA0LjRh9C40L3QsNGC0LAg0LfQsCDRgtC+0LLQsC4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHBhZCBwcm9ibGVtLiIKK21zZ3N0ciAi0JLRitGC0YDQtdGI0L3QsCDQs9GA0LXRiNC60LAg0L3QsCBHU3RyZWFtZXI6INC/0YDQvtCx0LvQtdC8INCyINC00L7Qv9GK0LvQstCw0L3QtdGC0L4uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iCittc2dzdHIgItCS0YrRgtGA0LXRiNC90LAg0LPRgNC10YjQutCwINC90LAgR1N0cmVhbWVyOiDQv9GA0L7QsdC70LXQvCDRgSDQvdC40YjQutC40YLQtS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uIgorbXNnc3RyICLQktGK0YLRgNC10YjQvdCwINCz0YDQtdGI0LrQsCDQvdCwIEdTdHJlYW1lcjog0L/RgNC+0LHQu9C10Lwg0YEg0LTQvtCz0L7QstCw0YDRj9C90LXRgtC+LiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogZXZlbnQgcHJvYmxlbS4iCittc2dzdHIgItCS0YrRgtGA0LXRiNC90LAg0LPRgNC10YjQutCwINC90LAgR1N0cmVhbWVyOiDQv9GA0L7QsdC70LXQvCDRgdGK0YEg0YHRitCx0LjRgtC40Y/RgtCwLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2VlayBwcm9ibGVtLiIKK21zZ3N0ciAi0JLRitGC0YDQtdGI0L3QsCDQs9GA0LXRiNC60LAg0L3QsCBHU3RyZWFtZXI6INC/0YDQvtCx0LvQtdC8INC/0YDQuCDQv9C+0LfQuNGG0LjQvtC90LjRgNCw0L3QtdGC0L4uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgorbXNnc3RyICLQktGK0YLRgNC10YjQvdCwINCz0YDQtdGI0LrQsCDQvdCwIEdTdHJlYW1lcjog0L/RgNC+0LHQu9C10Lwg0YEg0LLRitC30LzQvtC20L3QvtGB0YLQuNGC0LUuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4iCittc2dzdHIgItCS0YrRgtGA0LXRiNC90LAg0LPRgNC10YjQutCwINC90LAgR1N0cmVhbWVyOiDQv9GA0L7QsdC70LXQvCDRgSDQtdGC0LjQutC10YLQuNGC0LUuIgorCittc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKK21zZ3N0ciAi0JvQuNC/0YHQstCwINC90LXQvtCx0YXQvtC00LjQvNCwINC/0YDQuNGB0YLQsNCy0LrQsCDQsiDRgtCw0LfQuCDQuNC90YHRgtCw0LvQsNGG0LjRjyDQvdCwIEdTdHJlYW1lciIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2xvY2sgcHJvYmxlbS4iCittc2dzdHIgItCS0YrRgtGA0LXRiNC90LAg0LPRgNC10YjQutCwINC90LAgR1N0cmVhbWVyOiDQv9GA0L7QsdC70LXQvCDRgSDRh9Cw0YHQvtCy0L3QuNC60LAuIgorCittc2dpZCAiIgorIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGhhcyBiZWVuICIKKyJkaXNhYmxlZC4iCittc2dzdHIgIiIKKyLQotC+0LLQsCDQv9GA0LjQu9C+0LbQtdC90LjQtSDRgdC1INC+0L/QuNGC0LLQsCDQtNCwINC/0L7Qu9C30LLQsCDRhNGD0L3QutGG0LjQvtC90LDQu9C90L7RgdGCINC90LAgR1N0cmVhbWVyLCDQutC+0Y/RgtC+INC1ICIKKyLQuNC30LrQu9GO0YfQtdC90LAuIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIg0L/QvtC70YPRh9C4INC+0LHRidCwINCz0YDQtdGI0LrQsCDQsiDQv9C+0LzQvtGJ0L3QsCDQsdC40LHQu9C40L7RgtC10LrQsC4iCisKK21zZ2lkICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICLQn9C+0LzQvtGJ0L3QsNGC0LAg0LHQuNCx0LvQuNC+0YLQtdC60LAg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40L3QuNGG0LjQsNC70LjQt9C40YDQsNC90LAuIgorCittc2dpZCAiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgItCf0L7QvNC+0YnQvdCw0YLQsCDQsdC40LHQu9C40L7RgtC10LrQsCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNGC0LLQvtGA0LXQvdCwLiIKKworbXNnaWQgIkNvdWxkIG5vdCBjb25maWd1cmUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAi0J/QvtC80L7RidC90LDRgtCwINCx0LjQsdC70LjQvtGC0LXQutCwINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvdCw0YHRgtGA0L7QtdC90LAuIgorCittc2dpZCAiRW5jb2RpbmcgZXJyb3IuIgorbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INC60L7QtNC40YDQsNC90LUuIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCByZXNvdXJjZSBlcnJvci4iCittc2dzdHIgIkdTdHJlYW1lciDQv9C+0LvRg9GH0Lgg0L7QsdGJ0LAg0LPRgNC10YjQutCwINCyINGA0LXRgdGD0YDRgS4iCisKK21zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgorbXNnc3RyICLQoNC10YHRg9GA0YHRitGCINC90LUg0LUg0L7RgtC60YDQuNGCLiIKKworbXNnaWQgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCittc2dzdHIgItCg0LXRgdGD0YDRgdGK0YIg0LUg0LfQsNC10YIg0LjQu9C4INC90LUg0LUg0LTQvtGB0YLRitC/0LXQvS4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCittc2dzdHIgItCg0LXRgdGD0YDRgdGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQstC+0YDQtdC9INC30LAg0YfQtdGC0LXQvdC1LiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKK21zZ3N0ciAi0KDQtdGB0YPRgNGB0YrRgiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtCy0L7RgNC10L0g0LfQsCDQt9Cw0L/QuNGBLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKK21zZ3N0ciAi0KDQtdGB0YPRgNGB0YrRgiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtCy0L7RgNC10L0g0LfQsCDRh9C10YLQtdC90LUg0Lgg0LfQsNC/0LjRgS4iCisKK21zZ2lkICJDb3VsZCBub3QgY2xvc2UgcmVzb3VyY2UuIgorbXNnc3RyICLQoNC10YHRg9GA0YHRitGCINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0YLQstC+0YDQtdC9LiIKKworbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gcmVzb3VyY2UuIgorbXNnc3RyICLQndC1INC80L7QttC1INC00LAg0YHQtSDRh9C10YLQtSDQvtGCINGA0LXRgdGD0YDRgdCwLiIKKworbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iCittc2dzdHIgItCd0LUg0LzQvtC20LUg0LTQsCDRgdC1INC30LDQv9C40YHQstCwINCyINGA0LXRgdGD0YDRgdCwLiIKKworbXNnaWQgIkNvdWxkIG5vdCBwZXJmb3JtIHNlZWsgb24gcmVzb3VyY2UuIgorbXNnc3RyICLQndC1INC80L7QttC1INC00LAg0YHQtSDQv9C+0LfQuNGG0LjQvtC90LjRgNCwINCyINGA0LXRgdGD0YDRgdCwLiIKKworbXNnaWQgIkNvdWxkIG5vdCBzeW5jaHJvbml6ZSBvbiByZXNvdXJjZS4iCittc2dzdHIgItCd0LUg0LzQvtC20LUg0LTQsCDRgdC1INGB0LjQvdGF0YDQvtC90LjQt9C40YDQsCDQv9C+INGA0LXRgdGD0YDRgdCwLiIKKworbXNnaWQgIkNvdWxkIG5vdCBnZXQvc2V0IHNldHRpbmdzIGZyb20vb24gcmVzb3VyY2UuIgorbXNnc3RyICLQndC1INC80L7QttC1INC00LAg0YHQtSDQv9C+0LvRg9GH0Lgv0LfQsNC00LDQtNC1INC90LDRgdGC0YDQvtC50LrQsCDQvtGCL9C90LAg0YDQtdGB0YPRgNGB0LAuIgorCittc2dpZCAiTm8gc3BhY2UgbGVmdCBvbiB0aGUgcmVzb3VyY2UuIgorbXNnc3RyICLQktGK0YDRhdGDINGA0LXRgdGD0YDRgdCwINC90LUg0LUg0L7RgdGC0LDQvdCw0LvQviDRgdCy0L7QsdC+0LTQvdC+INC80Y/RgdGC0L4uIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdHJlYW0gZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIg0L/QvtC70YPRh9C4INC+0LHRidCwINCz0YDQtdGI0LrQsCDQsiDQv9C+0YLQvtC60LAg0L7RgiDQtNCw0L3QvdC4LiIKKworbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKK21zZ3N0ciAiIgorItCV0LvQtdC80LXQvdGC0YrRgiDQvdC1INC+0YHRitGJ0LXRgdGC0LLRj9Cy0LAg0L7QsdGA0LDQsdC+0YLQutCw0YLQsCDQvdCwINGC0L7Qt9C4INC/0L7RgtC+0LouINCc0L7Qu9GPLCDQv9C+0LTQsNC50YLQtSDQtNC+0LrQu9Cw0LQg0LfQsCAiCisi0LPRgNC10YjQutCwLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgorbXNnc3RyICLQktC40LTRitGCINC90LAg0L/QvtGC0L7QutCwINC+0YIg0LTQsNC90L3QuCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7Qv9GA0LXQtNC10LvQtdC9LiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKK21zZ3N0ciAi0J/QvtGC0L7QutGK0YIg0L7RgiDQtNCw0L3QvdC4INC90LUg0LUg0L7RgiDQstC40LTQsCwg0LrQvtC50YLQviDRgdC1INC+0LHRgNCw0LHQvtGC0LLQsCDQvtGCINC10LvQtdC80LXQvdGC0LAuIgorCittc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgorbXNnc3RyICLQndGP0LzQsCDQutC+0LTQtdGAINC30LAg0L7QsdGA0LDQsdC+0YLQutCw0YLQsCDQvdCwINGC0L7Qt9C4INCy0LjQtCDQv9C+0YLQvtC6INC+0YIg0LTQsNC90L3QuC4iCisKK21zZ2lkICJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iCittc2dzdHIgItCf0L7RgtC+0LrRitGCINC+0YIg0LTQsNC90L3QuCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LTQtdC60L7QtNC40YDQsNC9LiIKKworbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKK21zZ3N0ciAi0J/QvtGC0L7QutGK0YIg0L7RgiDQtNCw0L3QvdC4INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQutC+0LTQuNGA0LDQvS4iCisKK21zZ2lkICJDb3VsZCBub3QgZGVtdWx0aXBsZXggc3RyZWFtLiIKK21zZ3N0ciAi0J/QvtGC0L7QutGK0YIg0L7RgiDQtNCw0L3QvdC4INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgNCw0LfQtNC10LvQtdC9ICjQtNC10LzRg9C70YLQuNC/0LvQtdC60YHQuNGA0LDQvSkuIgorCittc2dpZCAiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIgorbXNnc3RyICLQn9C+0YLQvtC60YrRgiDQvtGCINC00LDQvdC90Lgg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGD0L/Qu9GK0YLQvdC10L0gKNC80YPQu9GC0LjQv9C70LXQutGB0LjRgNCw0L0pLiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgaW4gdGhlIHdyb25nIGZvcm1hdC4iCittc2dzdHIgItCf0L7RgtC+0LrRitGCINC1INGBINCz0YDQtdGI0LXQvSDRhNC+0YDQvNCw0YIuIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iCittc2dzdHIgItCf0L7RgtC+0LrRitGCINC1INGI0LjRhNGA0LjRgNCw0L0uINCU0LXRiNC40YTRgNC40YDQsNC90LXRgtC+INC80YMg0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LAuIgorCittc2dpZCAiIgorIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKKyJiZWVuIHN1cHBsaWVkLiIKK21zZ3N0ciAiIgorItCf0L7RgtC+0LrRitGCINC1INGI0LjRhNGA0LjRgNCw0L0uINCU0LXRiNC40YTRgNC40YDQsNC90LXRgtC+INC80YMg0LUg0L3QtdCy0YrQt9C80L7QttC90L4sINC30LDRidC+0YLQviDQvdC1INC1INC/0L7QtNCw0LTQtdC9ICIKKyLQv9C+0LTRhdC+0LTRj9GJINC60LvRjtGHLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMuIgorbXNnc3RyICLQndGP0LzQsCDRgdGK0L7QsdGJ0LXQvdC40LUg0LfQsCDQs9GA0LXRiNC60LAg0LfQsCDQvtCx0LvQsNGB0YLRgtCwICVzLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMgYW5kIGNvZGUgJWQuIgorbXNnc3RyICLQndGP0LzQsCDRgdGC0LDQvdC00LDRgNGC0L3QviDRgdGK0L7QsdGJ0LXQvdC40LUg0LfQsCDQs9GA0LXRiNC60LAg0LfQsCDQvtCx0LvQsNGB0YLRgtCwICVzINGBINC60L7QtCAlZC4iCisKK21zZ2lkICJTZWxlY3RlZCBjbG9jayBjYW5ub3QgYmUgdXNlZCBpbiBwaXBlbGluZS4iCittc2dzdHIgItCY0LfQsdGA0LDQvdC40Y/RgiDRh9Cw0YHQvtCy0L3QuNC6INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQv9C+0LvQt9Cy0LAg0LIg0LrQvtC90LLQtdC50LXRgC4iCisKK21zZ2lkICJ0aXRsZSIKK21zZ3N0ciAi0LfQsNCz0LvQsNCy0LjQtSIKKworbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUiCittc2dzdHIgItC/0L7Qv9GD0LvRj9GA0L3QviDQt9Cw0LPQu9Cw0LLQuNC1IgorCittc2dpZCAidGl0bGUgc29ydG5hbWUiCittc2dzdHIgItC30LDQs9C70LDQstC40LUsINC/0L7Qu9C30LLQsCDRgdC1INC/0YDQuCDQv9C+0LTRgNC10LbQtNCw0L3QtSIKKworbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgItC/0L7Qv9GD0LvRj9GA0L3QviDQt9Cw0LPQu9Cw0LLQuNC1LCDQv9C+0LvQt9Cy0LAg0YHQtSDQv9GA0Lgg0L/QvtC00YDQtdC20LTQsNC90LUiCisKK21zZ2lkICJhcnRpc3QiCittc2dzdHIgItC40LfQv9GK0LvQvdC40YLQtdC7IgorCittc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIgorbXNnc3RyICLQvtGC0LPQvtCy0L7RgNC90LjQui/RhtC4INC30LAg0LfQsNC/0LjRgdCwIgorCittc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgorbXNnc3RyICLQuNC80LUg0L3QsCDQuNC30L/RitC70L3QuNGC0LXQuywg0L/QvtC70LfQstCwINGB0LUg0L/RgNC4INC/0L7QtNGA0LXQttC00LDQvdC1IgorCittc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICLQvtGC0LPQvtCy0L7RgNC90LjQui/RhtC4INC30LAg0LfQsNC/0LjRgdCwLCDQv9C+0LvQt9Cy0LAg0YHQtSDQv9GA0Lgg0L/QvtC00YDQtdC20LTQsNC90LUiCisKK21zZ2lkICJhbGJ1bSIKK21zZ3N0ciAi0LDQu9Cx0YPQvCIKKworbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgorbXNnc3RyICLQsNC70LHRg9C8INGB0YrQtNGK0YDQttCw0Ykg0YLQtdC30Lgg0LTQsNC90L3QuCIKKworbXNnaWQgImFsYnVtIHNvcnRuYW1lIgorbXNnc3RyICLQsNC70LHRg9C8LCDQv9C+0LvQt9Cy0LAg0YHQtSDQv9GA0Lgg0L/QvtC00YDQtdC20LTQsNC90LUiCisKK21zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAi0LDQu9Cx0YPQvCDRgdGK0LTRitGA0LbQsNGJINGC0LXQt9C4INC00LDQvdC90LgsINC/0L7Qu9C30LLQsCDRgdC1INC/0YDQuCDQv9C+0LTRgNC10LbQtNCw0L3QtSIKKworbXNnaWQgImFsYnVtIGFydGlzdCIKK21zZ3N0ciAi0LjQt9C/0YrQu9C90LjRgtC10Lsg0L3QsCDQsNC70LHRg9C8IgorCittc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgorbXNnc3RyICLQuNC30L/RitC70L3QuNGC0LXQuyDQvdCwINGG0LXQu9C40Y8g0LDQu9Cx0YPQvCwg0L/QvtC70LfQstCwINGB0LUg0L/RgNC4INC/0L7QutCw0LfQstCw0L3QtSIKKworbXNnaWQgImFsYnVtIGFydGlzdCBzb3J0bmFtZSIKK21zZ3N0ciAi0LjQt9C/0YrQu9C90LjRgtC10Lsg0L3QsCDQsNC70LHRg9C8LCDQv9C+0LvQt9Cy0LAg0YHQtSDQv9GA0Lgg0L/QvtC00YDQtdC20LTQsNC90LUiCisKK21zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiCittc2dzdHIgItC40LfQv9GK0LvQvdC40YLQtdC7INC90LAg0YbQtdC70LjRjyDQsNC70LHRg9C8LCDQv9C+0LvQt9Cy0LAg0YHQtSDQv9GA0Lgg0L/QvtC00YDQtdC20LTQsNC90LUiCisKK21zZ2lkICJkYXRlIgorbXNnc3RyICLQtNCw0YLQsCIKKworbXNnaWQgImRhdGUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR0RhdGUgc3RydWN0dXJlKSIKK21zZ3N0ciAi0LTQsNGC0LAg0L3QsCDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQtNCw0L3QvdC40YLQtSAo0LrQsNGC0L4g0YHRgtGA0YPQutGC0YPRgNCwIEdEYXRlKSIKKworbXNnaWQgImRhdGV0aW1lIgorbXNnc3RyICLQvNC+0LzQtdC90YIiCisKK21zZ2lkICJkYXRlIGFuZCB0aW1lIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdzdERhdGVUaW1lIHN0cnVjdHVyZSkiCittc2dzdHIgItC80L7QvNC10L3RgiDQvdCwINGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC00LDQvdC90LjRgtC1ICjQutCw0YLQviDRgdGC0YDRg9C60YLRg9GA0LAgR3N0RGF0ZVRpbWUpIgorCittc2dpZCAiZ2VucmUiCittc2dzdHIgItC20LDQvdGAIgorCittc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCittc2dzdHIgItC20LDQvdGAINC90LAg0YLQtdC30Lgg0LTQsNC90L3QuCIKKworbXNnaWQgImNvbW1lbnQiCittc2dzdHIgItC60L7QvNC10L3RgtCw0YAiCisKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKK21zZ3N0ciAi0YHQstC+0LHQvtC00LXQvSDRgtC10LrRgdGCINC+0YLQvdC+0YHQvdC+INC00LDQvdC90LjRgtC1IgorCittc2dpZCAiZXh0ZW5kZWQgY29tbWVudCIKK21zZ3N0ciAi0LTQvtC/0YrQu9C90LjRgtC10LvQtdC9INC60L7QvNC10L3RgtCw0YAiCisKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCittc2dzdHIgIiIKKyLRgdCy0L7QsdC+0LTQtdC9INGC0LXQutGB0YIg0L7RgtC90L7RgdC90L4g0LTQsNC90L3QuNGC0LUg0LLRitCyINGE0L7RgNC80LDRgiDQutC70Y7Rhz3RgdGC0L7QudC90L7RgdGCINC40LvQuCDQutC70Y7Rh1vQtdC30LjQul0iCisiPdC60L7QvNC10L3RgtCw0YAiCisKK21zZ2lkICJ0cmFjayBudW1iZXIiCittc2dzdHIgItC90L7QvNC10YAg0L3QsCDQv9C10YHQtdC90YLQsCIKKworbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICLQvdC+0LzQtdGAINC90LAg0L/QtdGB0LXQvdGC0LAg0LIg0LrQvtC70LXQutGG0LjRjyIKKworbXNnaWQgInRyYWNrIGNvdW50IgorbXNnc3RyICLQsdGA0L7QuSDQv9C10YHQvdC4IgorCittc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKK21zZ3N0ciAi0LHRgNC+0Lkg0L/QtdGB0L3QuNGC0LUg0LIg0LrQvtC70LXQutGG0LjRj9GC0LAsINC60YrQvCDQutC+0Y/RgtC+INC/0YDQuNC90LDQtNC70LXQttC4INGC0LDQt9C4INC/0LXRgdC10L0iCisKK21zZ2lkICJkaXNjIG51bWJlciIKK21zZ3N0ciAi0L3QvtC80LXRgCDQvdCwINC00LjRgdC60LAiCisKK21zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICLQvdC+0LzQtdGAINC90LAg0LTQuNGB0LrQsCDQvtGCINC60L7Qu9C10LrRhtC40Y8iCisKK21zZ2lkICJkaXNjIGNvdW50IgorbXNnc3RyICLQsdGA0L7QuSDQtNC40YHQutC+0LLQtSIKKworbXNnaWQgImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIgorbXNnc3RyICLQsdGA0L7QuSDQtNC40YHQutC+0LLQtSDQsiDQutC+0LvQtdC60YbQuNGPLCDQutGK0Lwg0LrQvtGP0YLQviDQv9GA0LjQvdCw0LTQu9C10LbQuCDRgtC+0LfQuCDQtNC40YHQuiIKKworbXNnaWQgImxvY2F0aW9uIgorbXNnc3RyICLQsNC00YDQtdGBIgorCittc2dpZCAiIgorIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgorImlzIGhvc3RlZCkiCittc2dzdHIgIiIKKyLQn9GA0L7QuNC30YXQvtC0INC90LAg0LzQtdC00LjRj9GC0LAg0LrQsNGC0L4g0LDQtNGA0LXRgSAo0LzRj9GB0YLQvtGC0L4g0LIg0JjQvdGC0LXRgNC90LXRgiwg0L7RgtC60YrQtNC10YLQviDQtSDQvtGA0LjQs9C40L3QsNC70L3QuNGP0YIgIgorItGE0LDQudC7KSIKKworbXNnaWQgImhvbWVwYWdlIgorbXNnc3RyICLRgdCw0LnRgiIKKworbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCittc2dzdHIgItCh0YLRgNCw0L3QuNGG0LAg0LIg0JjQvdGC0LXRgNC90LXRgiDQt9CwINGC0LDQt9C4INC80LXQtNC40Y8gKNC90LDQv9GALiDRgdCw0LnRgiDQvdCwINC40LfQv9GK0LvQvdC40YLQtdC7L9GE0LjQu9C8KSIKKworbXNnaWQgImRlc2NyaXB0aW9uIgorbXNnc3RyICLQvtC/0LjRgdCw0L3QuNC1IgorCittc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgorbXNnc3RyICLQutGA0LDRgtGK0Log0YLQtdC60YHRgiDigJQg0YHRitC00YrRgNC20LDQvdC40LUiCisKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICLQstC10YDRgdC40Y8iCisKK21zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKK21zZ3N0ciAi0LLQtdGA0YHQuNGPINC90LAg0YLQtdC30Lgg0LTQsNC90L3QuCIKKworbXNnaWQgIklTUkMiCittc2dzdHIgIklTUkMiCisKK21zZ2lkICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCittc2dzdHIgItCh0YLQsNC90LTQsNGA0YLQtdC9LCDQvNC10LbQtNGD0L3QsNGA0L7QtNC10L0g0LrQvtC0INC90LAg0LfQsNC/0LjRgSDigJQgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKKworbXNnaWQgIm9yZ2FuaXphdGlvbiIKK21zZ3N0ciAi0L7RgNCz0LDQvdC40LfQsNGG0LjRjyIKKworbXNnaWQgImNvcHlyaWdodCIKK21zZ3N0ciAi0LDQstGC0L7RgNGB0LrQuCDQv9GA0LDQstCwIgorCittc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAi0L7Qt9C90LDRh9C10L3QuNC1INC90LAg0LDQstGC0L7RgNGB0LrQuNGC0LUg0L/RgNCw0LLQsCDQvdCwINC00LDQvdC90LjRgtC1IgorCittc2dpZCAiY29weXJpZ2h0IHVyaSIKK21zZ3N0ciAi0LDQtNGA0LXRgSDQt9CwINCw0LLRgtC+0YDRgdC60Lgg0L/RgNCw0LLQsCIKKworbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAi0LDQtNGA0LXRgSDQvdCwINC+0LfQvdCw0YfQtdC90LjQtdGC0L4g0L3QsCDQsNCy0YLQvtGA0YHQutC40YLQtSDQv9GA0LDQstCwINC90LAg0LTQsNC90L3QuNGC0LUiCisKK21zZ2lkICJlbmNvZGVkIGJ5IgorbXNnc3RyICLQutC+0LTQuNGA0LDQvdC+INC+0YIiCisKK21zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgorbXNnc3RyICLQuNC80LUg0L3QsCDRh9C+0LLQtdC60LAg0LjQu9C4INC+0YDQs9Cw0L3QuNC30LDRhtC40Y/RgtCwINC40LfQstGK0YDRiNCy0LDRidC4INC60L7QtNC40YDQsNC90LXRgtC+IgorCittc2dpZCAiY29udGFjdCIKK21zZ3N0ciAi0LrQvtC90YLQsNC60YIiCisKK21zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgorbXNnc3RyICLQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINC60L7QvdGC0LDQutGCIgorCittc2dpZCAibGljZW5zZSIKK21zZ3N0ciAi0LvQuNGG0LXQvdC3IgorCittc2dpZCAibGljZW5zZSBvZiBkYXRhIgorbXNnc3RyICLQu9C40YbQtdC90Lcg0L3QsCDQtNCw0L3QvdC40YLQtSIKKworbXNnaWQgImxpY2Vuc2UgdXJpIgorbXNnc3RyICLQsNC00YDQtdGBINC90LAg0LvQuNGG0LXQvdC30LAiCisKK21zZ2lkICJVUkkgdG8gdGhlIGxpY2Vuc2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgItCw0LTRgNC10YEg0L3QsCDQu9C40YbQtdC90LfQsCDQvdCwINC00LDQvdC90LjRgtC1IgorCittc2dpZCAicGVyZm9ybWVyIgorbXNnc3RyICLQuNC30L/RitC70L3QuNGC0LXQuyIKKworbXNnaWQgInBlcnNvbihzKSBwZXJmb3JtaW5nIgorbXNnc3RyICLQutC+0Lkg0LjQt9C/0YrQu9C90Y/QstCwINC00LDQvdC90LjRgtC1IgorCittc2dpZCAiY29tcG9zZXIiCittc2dzdHIgItC60L7QvNC/0L7Qt9C40YLQvtGAIgorCittc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nIgorbXNnc3RyICLQutC+0LzQv9C+0LfQuNGC0L7RgC/QuCDQvdCwINC30LDQv9C40YHQsCIKKworbXNnaWQgImR1cmF0aW9uIgorbXNnc3RyICLQv9GA0L7QtNGK0LvQttC40YLQtdC70L3QvtGB0YIiCisKK21zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKK21zZ3N0ciAi0L/RgNC+0LTRitC70LbQuNGC0LXQu9C90L7RgdGCINCyINC10LTQuNC90LjRhtC4INC90LAgR1N0cmVhbWVyICjQvdCw0L3QvtGB0LXQutGD0L3QtNC4KSIKKworbXNnaWQgImNvZGVjIgorbXNnc3RyICLQutC+0LTQtdGAIgorCittc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICLQutC+0LTQtdGALCDRh9GA0LXQtyDQutC+0LnRgtC+INGB0LAg0YHRitGF0YDQsNC90LXQvdC4INC00LDQvdC90LjRgtC1IgorCittc2dpZCAidmlkZW8gY29kZWMiCittc2dzdHIgItCy0LjQtNC10L4g0LrQvtC00LXRgCIKKworbXNnaWQgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAi0LrQvtC00LXRgCwg0YfRgNC10Lcg0LrQvtC50YLQviDRgdCwINGB0YrRhdGA0LDQvdC10L3QuCDQstC40LTQtdC+INC00LDQvdC90LjRgtC1IgorCittc2dpZCAiYXVkaW8gY29kZWMiCittc2dzdHIgItCw0YPQtNC40L4g0LrQvtC00LXRgCIKKworbXNnaWQgImNvZGVjIHRoZSBhdWRpbyBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAi0LrQvtC00LXRgCwg0YfRgNC10Lcg0LrQvtC50YLQviDRgdCwINGB0YrRhdGA0LDQvdC10L3QuCDQsNGD0LTQuNC+INC00LDQvdC90LjRgtC1IgorCittc2dpZCAic3VidGl0bGUgY29kZWMiCittc2dzdHIgItC60L7QtNC10YAg0LfQsCDRgdGD0LHRgtC40YLRgNC40YLQtSIKKworbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAi0LrQvtC00LXRgCwg0YfRgNC10Lcg0LrQvtC50YLQviDRgdCwINGB0YrRhdGA0LDQvdC10L3QuCDQtNCw0L3QvdC40YLQtSDQvdCwINGB0YPQsdGC0LjRgtGA0LjRgtC1IgorCittc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKK21zZ3N0ciAi0LjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDQutC+0L3RgtC10LnQvdC10YDQsCIKKworbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICLRhNC+0YDQvNCw0YIg0L3QsCDQutC+0L3RgtC10LnQvdC10YDQsCwg0LIg0LrQvtC50YLQviDRgdCwINGB0YrRhdGA0LDQvdC10L3QuCDQtNCw0L3QvdC40YLQtSIKKworbXNnaWQgImJpdHJhdGUiCittc2dzdHIgItGB0LrQvtGA0L7RgdGCINC90LAg0LHQuNGC0L7QstC10YLQtSIKKworbXNnaWQgImV4YWN0IG9yIGF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgItGC0L7Rh9C90LAg0LjQu9C4INGD0YHRgNC10LTQvdC10L3QsCDRgdC60L7RgNC+0YHRgiDQvdCwINCx0LjRgtC+0LLQtdGC0LUiCisKK21zZ2lkICJub21pbmFsIGJpdHJhdGUiCittc2dzdHIgItC90L7QvNC40L3QsNC70L3QsCDRgdC60L7RgNC+0YHRgiDQvdCwINCx0LjRgtC+0LLQtdGC0LUiCisKK21zZ2lkICJub21pbmFsIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICLQvdC+0LzQuNC90LDQu9C90LAg0YHQutC+0YDQvtGB0YIg0L3QsCDQsdC40YLQvtCy0LXRgtC1INCyIGJwcyIKKworbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKK21zZ3N0ciAi0LzQuNC90LjQvNCw0LvQvdCwINGB0LrQvtGA0L7RgdGCINC90LAg0LHQuNGC0L7QstC10YLQtSIKKworbXNnaWQgIm1pbmltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgItC80LjQvdC40LzQsNC70L3QsCDRgdC60L7RgNC+0YHRgiDQvdCwINCx0LjRgtC+0LLQtdGC0LUg0LIgYnBzIgorCittc2dpZCAibWF4aW11bSBiaXRyYXRlIgorbXNnc3RyICLQvNCw0LrRgdC40LzQsNC70L3QsCDRgdC60L7RgNC+0YHRgiDQvdCwINCx0LjRgtC+0LLQtdGC0LUiCisKK21zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICLQvNCw0LrRgdC40LzQsNC70L3QsCDRgdC60L7RgNC+0YHRgiDQvdCwINCx0LjRgtC+0LLQtdGC0LUg0LIgYnBzIgorCittc2dpZCAiZW5jb2RlciIKK21zZ3N0ciAi0LrQvtC00LXRgCIKKworbXNnaWQgImVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCittc2dzdHIgItC60L7QtNC10YAsINGH0YDQtdC3INC60L7QudGC0L4g0LUg0LrQvtC00LjRgNCw0L0g0YLQvtC30Lgg0L/QvtGC0L7QuiIKKworbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKK21zZ3N0ciAi0LLQtdGA0YHQuNGPINC90LAg0LrQvtC00LXRgNCwIgorCittc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAi0LLQtdGA0YHQuNGPINC90LAg0LrQvtC00LXRgNCwLCDRh9GA0LXQtyDQutC+0LnRgtC+INC1INC60L7QtNC40YDQsNC9INGC0L7Qt9C4INC/0L7RgtC+0LoiCisKK21zZ2lkICJzZXJpYWwiCittc2dzdHIgItGB0LXRgC4g4oSWIgorCittc2dpZCAic2VyaWFsIG51bWJlciBvZiB0cmFjayIKK21zZ3N0ciAi0YHQtdGA0LjQtdC9INC90L7QvNC10YAg0L3QsCDQv9C10YHQtdC90YLQsCIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKK21zZ3N0ciAi0YPRgdC40LvQstCw0L3QtSDQvdCwINC/0LXRgdC10L3RgtCwINC/0YDQuCDQuNC30L/RitC70L3QtdC90LjQtSIKKworbXNnaWQgInRyYWNrIGdhaW4gaW4gZGIiCittc2dzdHIgItGD0YHQuNC70LLQsNC90LUg0L3QsCDQv9C10YHQtdC90YLQsCDQsiBkYiIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgcGVhayIKK21zZ3N0ciAi0LzQsNC60YHQuNC80LDQu9C90L4g0YPRgdC40LvQstCw0L3QtSDQvdCwINC/0LXRgdC10L3RgtCwINC/0YDQuCDQuNC30L/RitC70L3QtdC90LjQtSIKKworbXNnaWQgInBlYWsgb2YgdGhlIHRyYWNrIgorbXNnc3RyICLQvNCw0LrRgdC40LzQsNC70L3QviDRg9GB0LjQu9Cy0LDQvdC1INC90LAg0L/QtdGB0LXQvdGC0LAiCisKK21zZ2lkICJyZXBsYXlnYWluIGFsYnVtIGdhaW4iCittc2dzdHIgItGD0YHQuNC70LLQsNC90LUg0L3QsCDQsNC70LHRg9C80LAg0L/RgNC4INC40LfQv9GK0LvQvdC10L3QuNC1IgorCittc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKK21zZ3N0ciAi0YPRgdC40LvQstCw0L3QtSDQvdCwINCw0LvQsdGD0LzQsCDQsiBkYiIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKK21zZ3N0ciAi0LzQsNC60YHQuNC80LDQu9C90L4g0YPRgdC40LvQstCw0L3QtSDQvdCwINCw0LvQsdGD0LzQsCDQv9GA0Lgg0LjQt9C/0YrQu9C90LXQvdC40LUiCisKK21zZ2lkICJwZWFrIG9mIHRoZSBhbGJ1bSIKK21zZ3N0ciAi0LzQsNC60YHQuNC80LDQu9C90L4g0YPRgdC40LvQstCw0L3QtSDQvdCwINCw0LvQsdGD0LzQsCIKKworbXNnaWQgInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIgorbXNnc3RyICLQtdGC0LDQu9C+0L3QvdC+INC80LDQutGB0LjQvNCw0LvQvdC+INGD0YHQuNC70LLQsNC90LUg0L3QsCDQv9C10YHQtdC90YLQsCDQv9GA0Lgg0LjQt9C/0YrQu9C90LXQvdC40LUiCisKK21zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgorbXNnc3RyICLQtdGC0LDQu9C+0L3QvdC+INC90LjQstC+INC90LAg0YPRgdC40LvQstCw0L3QtdGC0L4g0L3QsCDQv9C10YHQvdC40YLQtSDQuCDQsNC70LHRg9C80LjRgtC1IgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSIKK21zZ3N0ciAi0LXQt9C40LrQvtCyINC60L7QtCIKKworbXNnaWQgImxhbmd1YWdlIGNvZGUgZm9yIHRoaXMgc3RyZWFtLCBjb25mb3JtaW5nIHRvIElTTy02MzktMSIKK21zZ3N0ciAi0LXQt9C40LrQvtCy0LjRj9GCINC60L7QtCDQvdCwINGC0L7Qt9C4INC/0L7RgtC+0Log0YHQv9C+0YDQtdC0IElTTy02MzktMSIKKworbXNnaWQgImltYWdlIgorbXNnc3RyICLQuNC30L7QsdGA0LDQttC10L3QuNC1IgorCittc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAi0LjQt9C+0LHRgNCw0LbQtdC90LjQtSDRgdCy0YrRgNC30LDQvdC+INGBINGC0L7Qt9C4INC/0L7RgtC+0LoiCisKKyMuIFRSQU5TTEFUT1JTOiAncHJldmlldyBpbWFnZScgPSBpbWFnZSB0aGF0IHNob3dzIGEgcHJldmlldyBvZiB0aGUgZnVsbCBpbWFnZQorbXNnaWQgInByZXZpZXcgaW1hZ2UiCittc2dzdHIgItC40LfQvtCx0YDQsNC20LXQvdC40LUg0LfQsCDQv9GA0LXQs9C70LXQtCIKKworbXNnaWQgInByZXZpZXcgaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAi0LjQt9C+0LHRgNCw0LbQtdC90LjQtSDQt9CwINC/0YDQtdCz0LvQtdC0INGB0LLRitGA0LfQsNC90L4g0YEg0YLQvtC30Lgg0L/QvtGC0L7QuiIKKworbXNnaWQgImF0dGFjaG1lbnQiCittc2dzdHIgItC/0YDQuNGC0YPRgNC60LAiCisKK21zZ2lkICJmaWxlIGF0dGFjaGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICLRhNCw0LnQuyDQv9GA0LjQutCw0YfQtdC9INC60YrQvCDRgtC+0LfQuCDQv9C+0YLQvtC6IgorCittc2dpZCAiYmVhdHMgcGVyIG1pbnV0ZSIKK21zZ3N0ciAi0YLQsNC60YLQsCDQsiDQvNC40L3Rg9GC0LAiCisKK21zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKK21zZ3N0ciAi0LHRgNC+0Lkg0YLQsNC60YLQvtCy0LUg0LIg0LzQuNC90YPRgtCwINCyINCw0YPQtNC40L4iCisKK21zZ2lkICJrZXl3b3JkcyIKK21zZ3N0ciAi0LrQu9GO0YfQvtCy0Lgg0LTRg9C80LgiCisKK21zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKK21zZ3N0ciAi0LrQu9GO0YfQvtCy0Lgg0LTRg9C80Lgg0LfQsCDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4sINGA0LDQt9C00LXQu9C10L3QuCDRgdGK0YEg0LfQsNC/0LXRgtCw0LgiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKK21zZ3N0ciAi0LzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjQtSIKKworbXNnaWQgIiIKKyJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgorInByb2R1Y2VkIgorbXNnc3RyICLRgNCw0LfQsdC40YDQsNC10LzQviDQvtC/0LjRgdCw0L3QuNC1INC90LAg0LzRj9GB0YLQvtGC0L4g0L3QsCDQt9Cw0L/QuNGBINC40LvQuCDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQvNC10LTQuNGP0YLQsCIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBsYXRpdHVkZSIKK21zZ3N0ciAi0LPQtdC+0LPRgNCw0YTRgdC60LAg0YjQuNGA0L7Rh9C40L3QsCIKKworbXNnaWQgIiIKKyJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCisic291dGhlcm4gbGF0aXR1ZGVzKSIKK21zZ3N0ciAiIgorItCz0LXQvtCz0YDQsNGE0YHQutCwINGI0LjRgNC+0YfQuNC90LAg0L3QsCDQvNGP0YHRgtC+0YLQviDQvdCwINC30LDQv9C40YEg0LjQu9C4INGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC80LXQtNC40Y/RgtCwINCyINCz0YDQsNC00YPRgdC4ICIKKyLRgdC/0L7RgNC10LQgV0dTODQgKDAg0L/RgNC4INC10LrQstCw0YLQvtGA0LAsINC+0YLRgNC40YbQsNGC0LXQu9C90LAg0LIg0Y7QttC90L7RgtC+INC/0L7Qu9GD0LrRitC70LHQvikiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbG9uZ2l0dWRlIgorbXNnc3RyICLQs9C10L7Qs9GA0LDRhNGB0LrQsCDQtNGK0LvQttC40L3QsCIKKworbXNnaWQgIiIKKyJnZW8gbG9uZ2l0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCisiZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIHByaW1lIG1lcmlkaWFuIGluIEdyZWVud2ljaC9VSywgICIKKyJuZWdhdGl2ZSB2YWx1ZXMgZm9yIHdlc3Rlcm4gbG9uZ2l0dWRlcykiCittc2dzdHIgIiIKKyLQs9C10L7Qs9GA0LDRhNGB0LrQsCDQtNGK0LvQttC40L3QsCDQvdCwINC80Y/RgdGC0L7RgtC+INC90LAg0LfQsNC/0LjRgSDQuNC70Lgg0YHRitC30LTQsNCy0LDQvdC1INC90LAg0LzQtdC00LjRj9GC0LAg0LIg0LPRgNCw0LTRg9GB0LggIgorItGB0L/QvtGA0LXQtCBXR1M4NCAoMCDQv9GA0Lgg0JPRgNC40L3Rg9C40YcsINCS0LXQu9C40LrQvtCx0YDQuNGC0LDQvdC40Y8sINC+0YLRgNC40YbQsNGC0LXQu9C90LAg0LIg0LfQsNC/0LDQtNC90L7RgtC+ICIKKyLQv9C+0LvRg9C60YrQu9Cx0L4pIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKK21zZ3N0ciAi0L3QsNC00LzQvtGA0YHQutCwINCy0LjRgdC+0YfQuNC90LAiCisKK21zZ2lkICIiCisiZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKKyJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgorbXNnc3RyICIiCisi0L3QsNC00LzQvtGA0YHQutCwINCy0LjRgdC+0YfQuNC90LAg0L3QsCDQvNGP0YHRgtC+0YLQviDQvdCwINC30LDQv9C40YEg0LjQu9C4INGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC80LXQtNC40Y/RgtCwINCyINC80LXRgtGA0LggIgorItGB0L/QvtGA0LXQtCBXR1M4NCAoMCDQv9GA0Lgg0YHRgNC10LTQvdC+0YLQviDQvNC+0YDRgdC60L4g0YDQsNCy0L3QuNGJ0LUpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNvdW50cnkiCittc2dzdHIgItC00YrRgNC20LDQstCwINC/0L4g0LrQvtC+0YDQtNC40L3QsNGC0LgiCisKK21zZ2lkICJjb3VudHJ5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKK21zZ3N0ciAi0LTRitGA0LbQsNCy0LDRgtCwINC90LAg0LfQsNC/0LjRgSDQuNC70Lgg0YHRitC30LTQsNCy0LDQvdC1INC90LAg0LzQtdC00LjRj9GC0LAgKNC90LAg0LDQvdCz0LvQuNC50YHQutC4KSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBjaXR5IgorbXNnc3RyICLQs9GA0LDQtCDQv9C+INC60L7QvtGA0LTQuNC90LDRgtC4IgorCittc2dpZCAiY2l0eSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCittc2dzdHIgItCz0YDQsNC0INC90LAg0LfQsNC/0LjRgSDQuNC70Lgg0YHRitC30LTQsNCy0LDQvdC1INC90LAg0LzQtdC00LjRj9GC0LAgKNC90LAg0LDQvdCz0LvQuNC50YHQutC4KSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKK21zZ3N0ciAi0LrQstCw0YDRgtCw0Lsg0L/QviDQutC+0L7RgNC00LjQvdCw0YLQuCIKKworbXNnaWQgIiIKKyJhIGxvY2F0aW9uIHdoaXRoaW4gYSBjaXR5IHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZCBvciBjcmVhdGVkIChlLmcuICIKKyJ0aGUgbmVpZ2hib3Job29kKSIKK21zZ3N0ciAi0LrQstCw0YDRgtCw0Lsg0LIg0LPRgNCw0LTQsCDQvdCwINC30LDQv9C40YEg0LjQu9C4INGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC80LXQtNC40Y/RgtCwIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGhvcml6b250YWwgZXJyb3IiCittc2dzdHIgItGF0L7RgNC40LfQvtC90YLQsNC70L3QsCDQs9GA0LXRiNC60LAg0L/QviDQutC+0L7RgNC00LjQvdCw0YLQuCIKKworbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgorbXNnc3RyICLQvtGH0LDQutCy0LDQvdCwINCz0YDQtdGI0LrQsCDQv9C+INGF0L7RgNC40LfQvtC90YLQsNC7ICjQsiDQvNC10YLRgNC4KSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKK21zZ3N0ciAi0YHQutC+0YDQvtGB0YIg0L/QviDQutC+0L7RgNC00LjQvdCw0YLQuCIKKworbXNnaWQgIiIKKyJtb3ZlbWVudCBzcGVlZCBvZiB0aGUgY2FwdHVyaW5nIGRldmljZSB3aGlsZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIGluIG0vcyIKK21zZ3N0ciAi0YHQutC+0YDQvtGB0YIg0L3QsCDQtNCy0LjQttC10L3QuNC1INC90LAg0LLRhdC+0LTQvdC+0YLQviDRg9GB0YLRgNC+0LnRgdGC0LLQviDQv9GA0Lgg0LfQsNC/0LjRgdCwIFttL3NdIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKK21zZ3N0ciAi0L/QvtGB0L7QutCwINC90LAg0LTQstC40LbQtdC90LjQtSDQv9C+INC60L7QvtGA0LTQuNC90LDRgtC4IgorCittc2dpZCAiIgorImluZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBvZiBhICIKKyJtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgMCAiCisibWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgorbXNnc3RyICIiCisi0L/QvtGB0L7QutCwINC90LAg0LTQstC40LbQtdC90LjQtSDQvdCwINCy0YXQvtC00L3QvtGC0L4g0YPRgdGC0YDQvtC50YHRgtCy0L4g0L/RgNC4INC30LDQv9C40YHQsC4g0KHRgtC+0LnQvdC+0YHRgtGC0LAg0LUg0LIg0LPRgNCw0LTRg9GB0LggIgorItCyINC00LXRgdC10YLQuNGH0L3QviDQv9GA0LXQtNGB0YLQsNCy0Y/QvdC1LiAwINC1INCz0LXQvtCz0YDQsNGE0YHQutC40Y/RgiDRgdC10LLQtdGALiDQodGC0L7QudC90L7RgdGC0YLQsCDRgNCw0YHRgtC1INC/0L4g0L/QvtGB0L7QutCwICIKKyLQvdCwINGH0LDRgdC+0LLQvdC40LrQvtCy0LDRgtCwINGB0YLRgNC10LvQutCwIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgorbXNnc3RyICLQv9C+0YHQvtC60LAg0L3QsCDQt9Cw0YHQvdC10LzQsNC90LUg0L/QviDQutC+0L7RgNC00LjQvdCw0YLQuCIKKworbXNnaWQgIiIKKyJpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nICBhIG1lZGlhLiAiCisiSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCAgcmVwcmVzZW50YXRpb24sIDAgbWVhbnMgdGhlICIKKyJnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKK21zZ3N0ciAiIgorItC/0L7RgdC+0LrQsCDQvdCwINCy0YXQvtC00L3QvtGC0L4g0YPRgdGC0YDQvtC50YHRgtCy0L4g0L/RgNC4INC30LDQv9C40YHQsC4g0KHRgtC+0LnQvdC+0YHRgtGC0LAg0LUg0LIg0LPRgNCw0LTRg9GB0Lgg0LIg0LTQtdGB0LXRgtC40YfQvdC+ICIKKyLQv9GA0LXQtNGB0YLQsNCy0Y/QvdC1LiAwINC1INCz0LXQvtCz0YDQsNGE0YHQutC40Y/RgiDRgdC10LLQtdGALiDQodGC0L7QudC90L7RgdGC0YLQsCDRgNCw0YHRgtC1INC/0L4g0L/QvtGB0L7QutCwINC90LAgIgorItGH0LDRgdC+0LLQvdC40LrQvtCy0LDRgtCwINGB0YLRgNC10LvQutCwIgorCisjLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKK21zZ2lkICJzaG93IG5hbWUiCittc2dzdHIgItC40LzQtSDQvdCwINGI0L7RgyIKKworbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCittc2dzdHIgIiIKKyLQmNC80LXRgtC+INGC0LXQu9C10LLQuNC30LjQvtC90L3QviDQuNC70Lgg0JjQvdGC0LXRgNC90LXRgiDRiNC+0YMsINC/0L7RgNC10LTQuNGG0LAg0L7RgiDRgdC10YDQuNC4LCDQvtGCINC60L7QtdGC0L4g0LUg0LzQtdC00LjRj9GC0LAiCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQorbXNnaWQgInNob3cgc29ydG5hbWUiCittc2dzdHIgItC40LzQtSDQvdCwINGI0L7RgyDQt9CwINC/0L7QtNGA0LXQttC00LDQvdC1IgorCittc2dpZCAiIgorIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20sIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICIiCisi0JjQvNC10YLQviDRgtC10LvQtdCy0LjQt9C40L7QvdC90L4g0LjQu9C4INCY0L3RgtC10YDQvdC10YIg0YjQvtGDLCDQv9C+0YDQtdC00LjRhtCwINC+0YIg0YHQtdGA0LjQuCwg0L7RgiDQutC+0LXRgtC+INC1INC80LXQtNC40Y/RgtCwLCAiCisi0L/QvtC70LfQstCwINGB0LUg0L/RgNC4INC/0L7QtNGA0LXQttC00LDQvdC1IgorCittc2dpZCAiZXBpc29kZSBudW1iZXIiCittc2dzdHIgItC90L7QvNC10YAg0L3QsCDQtdC/0LjQt9C+0LTQsCIKKworbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICLQndC+0LzQtdGA0YrRgiDQvdCwINC10L/QuNC30L7QtNCwINCyINC/0L7RgNC10LTQuNGG0LDRgtCwINC30LAg0YHQtdC30L7QvdCwIgorCittc2dpZCAic2Vhc29uIG51bWJlciIKK21zZ3N0ciAi0L3QvtC80LXRgCDQvdCwINGB0LXQt9C+0L3QsCIKKworbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICLQndC+0LzQtdGA0YrRgiDQvdCwINGB0LXQt9C+0L3QsCDQsiDQv9C+0YDQtdC00LjRhtCw0YLQsCwg0L7RgiDQutC+0Y/RgtC+INC1INC80LXQtNC40Y/RgtCwIgorCittc2dpZCAibHlyaWNzIgorbXNnc3RyICLRgtC10LrRgdGCIgorCittc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgorbXNnc3RyICLQotC10LrRgdGC0YrRgiDQvdCwINC80LXQtNC40Y/RgtCwLCDRh9C10YHRgtC+INGB0LUg0LjQt9C/0L7Qu9C30LLQsCDQt9CwINC/0LXRgdC90LgiCisKK21zZ2lkICJjb21wb3NlciBzb3J0bmFtZSIKK21zZ3N0ciAi0LrQvtC80L/QvtC30LjRgtC+0YAg0L/RgNC4INC/0L7QtNGA0LXQttC00LDQvdC1IgorCittc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAi0JrQvtC80L/QvtC30LjRgtC+0YAv0Lgg0LfQsCDQt9Cw0L/QuNGB0LAsINC/0L7Qu9C30LLQsCDRgdC1INC/0YDQuCDQv9C+0LTRgNC10LbQtNCw0L3QtSIKKworbXNnaWQgImdyb3VwaW5nIgorbXNnc3RyICLQs9GA0YPQv9C40YDQsNC90LUiCisKK21zZ2lkICIiCisiR3JvdXBzIHJlbGF0ZWQgbWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSB0cmFja3MsIGxpa2UgdGhlIGRpZmZlcmVudCBwaWVjZXMgIgorIm9mIGEgY29uY2VydG8uIEl0IGlzIGEgaGlnaGVyIGxldmVsIHRoYW4gYSB0cmFjaywgYnV0IGxvd2VyIHRoYW4gYW4gYWxidW0iCittc2dzdHIgIiIKKyLQodCx0LjRgNCwINCyINC10LTQvdCwINCz0YDRg9C/0LAg0L/RgNC+0LjQt9Cy0LXQtNC10L3QuNC1LCDQutC+0LXRgtC+INC1INC+0YIg0L3Rj9C60L7Qu9C60L4g0YfQsNGB0YLQuCwg0L3QsNC/0YAuINGH0LDRgdGC0LjRgtC1INC90LAgIgorItC60L7QvdGG0LXRgNGCLiDQotC+0LLQsCDQvdC40LLQviDQtSDQv9C+LdCy0LjRgdC+0LrQviDQvtGCINC/0LXRgdC10L0sINC90L4g0L/Qvi3QvdC40YHQutC+INC+0YIg0LDQu9Cx0YPQvC4iCisKK21zZ2lkICJ1c2VyIHJhdGluZyIKK21zZ3N0ciAi0L7RhtC10L3QutCwIgorCittc2dpZCAiIgorIlJhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgdXNlci4gVGhlIGhpZ2hlciB0aGUgcmFuaywgdGhlIG1vcmUgdGhlIHVzZXIgbGlrZXMgIgorInRoaXMgbWVkaWEiCittc2dzdHIgIiIKKyLQntGG0LXQvdC60LAg0YHQv9C+0YDQtdC0INC/0L7RgtGA0LXQsdC40YLQtdC70Y8uINCf0L4t0LLQuNGB0L7QutCwINGB0YLQvtC50L3QvtGB0YIg0L7Qt9C90LDRh9Cw0LLQsCDQv9C+LdGB0LjQu9C90L4g0L/RgNC10LTQv9C+0YfQuNGC0LDQvdC40LUiCisKK21zZ2lkICJkZXZpY2UgbWFudWZhY3R1cmVyIgorbXNnc3RyICLQv9GA0L7QuNC30LLQvtC00LjRgtC10Lsg0L3QsCDRg9GB0YLRgNC+0LnRgdGC0LLQviIKKworbXNnaWQgIk1hbnVmYWN0dXJlciBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCittc2dzdHIgItCf0YDQvtC40LfQstC+0LTQuNGC0LXQuyDQvdCwINGD0YHRgtGA0L7QudGB0YLQstC+0YLQviwg0YEg0LrQvtC10YLQviDQtSDRgdGK0LfQtNCw0LTQtdC90LAg0LzQtdC00LjRj9GC0LAiCisKK21zZ2lkICJkZXZpY2UgbW9kZWwiCittc2dzdHIgItC80L7QtNC10Lsg0L3QsCDRg9GB0YLRgNC+0LnRgdGC0LLQviIKKworbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKK21zZ3N0ciAi0JzQvtC00LXQuyDQvdCwINGD0YHRgtGA0L7QudGB0YLQstC+0YLQviwg0YEg0LrQvtC10YLQviDQtSDRgdGK0LfQtNCw0LTQtdC90LAg0LzQtdC00LjRj9GC0LAiCisKK21zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgorbXNnc3RyICLQuNC80LUg0L3QsCDQv9GA0L7Qs9GA0LDQvNCwIgorCittc2dpZCAiQXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIgorbXNnc3RyICLQn9GA0L7Qs9GA0LDQvNCw0YLQsCwg0YEg0LrQvtC10YLQviDQtSDRgdGK0LfQtNCw0LTQtdC90LAg0LzQtdC00LjRj9GC0LAiCisKK21zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgorbXNnc3RyICLQtNCw0L3QvdC4INC+0YIg0L/RgNC+0LPRgNCw0LzQsNGC0LAiCisKK21zZ2lkICJBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIG1lZGlhIgorbXNnc3RyICLQn9GA0L7QuNC30LLQvtC70L3QuCDQtNCw0L3QvdC4INC+0YIg0L/RgNC+0LPRgNCw0LzQsCwg0L/QvtGB0YLQsNCy0LXQvdC4INCyINC80LXQtNC40Y/RgtCwIgorCittc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCittc2dzdHIgItC+0YDQuNC10L3RgtCw0YbQuNGPIgorCittc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgorbXNnc3RyICLQmtCw0Log0LTQsCDRgdC1INC30LDQstGK0YDRgtC4INC40LfQvtCx0YDQsNC20LXQvdC40LXRgtC+INC/0YDQuCDQv9C+0LrQsNC30LLQsNC90LUiCisKK21zZ2lkICIsICIKK21zZ3N0ciAiLCAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAi0JPQoNCV0KjQmtCQOiDQvtGCINC10LvQtdC80LXQvdGCICVzOiAlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorItCU0L7Qv9GK0LvQvdC40YLQtdC70L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINC40LfRh9C40YHRgtCy0LDQvdC1INC90LAg0LPRgNC10YjQutC4OlxuIgorIiVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgorbXNnc3RyICLRg9C60LDQt9Cw0L0g0LUg0L/RgNCw0LfQtdC9INGA0LXQt9C10YDQstC+0LDRgCDigJ4lc+KAnCwg0YLQvtCy0LAg0LUg0LfQsNCx0YDQsNC90LXQvdC+IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHNraXBwaW5nIgorbXNnc3RyICLQvdGP0LzQsCDRgNC10LfQtdGA0LLQvtCw0YAg0L3QsCDQuNC80LUg4oCeJXPigJwsINC/0YDQvtC/0YPRgdC60LAg0YHQtSIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCittc2dzdHIgItC10LvQtdC80LXQvdGC0YrRgiDigJ4yJCVz4oCcINC90Y/QvNCwINGB0LLQvtC50YHRgtCy0L7RgtC+IOKAnjEkJXPigJwiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgorbXNnc3RyICLRgdCy0L7QudGB0YLQstC+0YLQviDigJ4lc+KAnCDQvdCwINC10LvQtdC80LXQvdGC0LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNC00LDQtNC1INC00LAg0LUg4oCeJXPigJwiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxpbmsgJXMgdG8gJXMiCittc2dzdHIgIiVzINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGB0LLRitGA0LbQtSDQutGK0LwgJXMiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCittc2dzdHIgItC10LvQtdC80LXQvdGC0YrRgiDigJ4lc+KAnCDQu9C40L/RgdCy0LAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNhcHMgXCIlc1wiIgorbXNnc3RyICLQstGK0LfQvNC+0LbQvdC+0YHRgtC40YLQtSDigJ4lc+KAnCDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINCw0L3QsNC70LjQt9C40YDQsNC90LgiCisKK21zZ2lkICJsaW5rIHdpdGhvdXQgc291cmNlIGVsZW1lbnQiCittc2dzdHIgItCy0YDRitC30LrQsCDQsdC10Lcg0LXQu9C10LzQtdC90YIt0LjQt9GC0L7Rh9C90LjQuiIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzaW5rIGVsZW1lbnQiCittc2dzdHIgItCy0YDRitC30LrQsCDQsdC10Lcg0LXQu9C10LzQtdC90YIt0L/RgNC40LXQvNC90LjQuiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAi0L3Rj9C80LAg0LXQu9C10LzQtdC90YIt0LjQt9GC0L7Rh9C90LjQuiDQt9CwINCw0LTRgNC10YEg4oCeJXPigJwiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCB0byBsaW5rIFVSSSBcIiVzXCIgdG8iCittc2dzdHIgItC90Y/QvNCwINC10LvQtdC80LXQvdGCLdCy0YDRitC30LrQsCDQvtGCINCw0LTRgNC10YEg4oCeJXPigJwg0LrRitC8IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAi0L3Rj9C80LAg0LXQu9C10LzQtdC90YIt0L/RgNC40LXQvNC90LjQuiDQt9CwINCw0LTRgNC10YEg4oCeJXPigJwiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxpbmsgc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDRgdCy0YrRgNC20LUg0LXQu9C10LzQtdC90YIt0L/RgNC40LXQvNC90LjQuiDQutGK0Lwg0LDQtNGA0LXRgSDigJ4lc+KAnCIKKworbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgorbXNnc3RyICLQvdC1INC1INC/0L7Qt9Cy0L7Qu9C10L0g0L/RgNCw0LfQtdC9INC60L7QvdCy0LXQudC10YAiCisKK21zZ2lkICJJbnRlcm5hbCBjbG9jayBlcnJvci4iCittc2dzdHIgItCS0YrRgtGA0LXRiNC90LAg0LPRgNC10YjQutCwINC90LAg0YfQsNGB0L7QstC90LjQutCwLiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCittc2dzdHIgItCS0YrRgtGA0LXRiNC90LAg0LPRgNC10YjQutCwINC90LAg0L/QvtGC0L7QutCwINC+0YIg0LTQsNC90L3QuC4iCisKK21zZ2lkICJBIGxvdCBvZiBidWZmZXJzIGFyZSBiZWluZyBkcm9wcGVkLiIKK21zZ3N0ciAi0JzQvdC+0LPQviDQsdGD0YTQtdGA0Lgg0YHQtSDQv9GA0L7Qv9GD0YHQutCw0YIuIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IHByb2JsZW0uIgorbXNnc3RyICLQktGK0YLRgNC10YjQtdC9INC/0YDQvtCx0LvQtdC8INC90LAg0L/QvtGC0L7QutCwINC+0YIg0LTQsNC90L3QuC4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCittc2dzdHIgItCS0YrRgtGA0LXRiNC90LAg0LPRgNC10YjQutCwINC90LAg0L/QvtGC0L7QutCwINC+0YIg0LTQsNC90L3QuC4iCisKK21zZ2lkICJGaWx0ZXIgY2FwcyIKK21zZ3N0ciAi0JLRitC30LzQvtC20L3QvtGB0YLQuCDQvdCwINGE0LjQu9GC0YrRgCIKKworbXNnaWQgIiIKKyJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKKyJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgorbXNnc3RyICIiCisi0J7Qs9GA0LDQvdC40YfQsNCy0LDQvdC1INC90LAg0L/QvtC30LLQvtC70LXQvdC40YLQtSDQstGK0LfQvNC+0LbQvdC+0YHRgtC4ICjigJ5OVUxM4oCcINC+0LfQvdCw0YfQsNCy0LAg0LLRgdGP0LrQsNC60LLQuCkuICIKKyLQl9Cw0LTQsNCy0LDQvdC10YLQviDQvdCwINGC0L7QstCwINGB0LLQvtC50YHRgtCy0L4g0L/QvtC10LzQsCDRg9C60LDQt9Cw0YLQtdC7INC60YrQvCDQv9C+0LTQsNC00LXQvdC40Y8g0L7QsdC10LrRgiBHc3RDYXBzLiIKKworbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHdyaXRpbmcuIgorbXNnc3RyICLQndC1INC1INGD0LrQsNC30LDQvdC+INC40LzQtSDQvdCwINGE0LDQudC7INC30LAg0LfQsNC/0LjRgS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgorbXNnc3RyICLQpNCw0LnQu9GK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtCy0L7RgNC4INC30LAg0LfQsNC/0LjRgS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0LfQsNGC0LLQsNGA0Y/QvdC10YLQviDQvdCwINGE0LDQudC70LAg4oCeJXPigJwuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIgorbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INC/0L7Qt9C40YbQuNC+0L3QuNGA0LDQvdC1INCy0YrQsiDRhNCw0LnQuyDigJ4lc+KAnC4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIFwiJXNcIi4iCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0LfQsNC/0LjRgSDQstGK0LIg0YTQsNC50Lsg4oCeJXPigJwuIgorCittc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCittc2dzdHIgItCd0LUg0LUg0YPQutCw0LfQsNC90L4g0LjQvNC1INC90LAg0YTQsNC50Lsg0LfQsCDRh9C10YLQtdC90LUuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKK21zZ3N0ciAi0KTQsNC50LvRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0YLQstC+0YDQuCDQt9CwINGH0LXRgtC10L3QtS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCittc2dzdHIgItCd0LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7Qu9GD0YfQuCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwIOKAniVz4oCcLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIgorbXNnc3RyICLigJ4lc+KAnCDQtSDQv9Cw0L/QutCwLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFwiJXNcIiBpcyBhIHNvY2tldC4iCittc2dzdHIgItCk0LDQudC70YrRgiDigJ4lc+KAnCDQtSDQs9C90LXQt9C00L4uIgorCittc2dpZCAiRmFpbGVkIGFmdGVyIGl0ZXJhdGlvbnMgYXMgcmVxdWVzdGVkLiIKK21zZ3N0ciAi0JPRgNC10YjQutCwINGB0LvQtdC0INC30LDRj9Cy0LXQvdC40Y8g0LHRgNC+0Lkg0L/QvtCy0YLQvtGA0LXQvdC40Y8uIgorCittc2dpZCAiTm8gVGVtcCBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIKK21zZ3N0ciAi0J3QtSDQtSDRg9C60LDQt9Cw0L3QsCDQstGA0LXQvNC10L3QvdCwINC/0LDQv9C60LAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAi0J3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YHRitC30LTQsNC00LUg0LLRgNC10LzQtdC90L3QuNGP0YIg0YTQsNC50Lsg4oCeJXPigJwuIgorCittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKK21zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDQt9Cw0L/QuNGBINCyINGB0LLQsNC70LXQvdC40Y8g0YTQsNC50LsuIgorCittc2dpZCAiY2FwcyIKK21zZ3N0ciAi0LLRitC30LzQvtC20L3QvtGB0YLQuCIKKworbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCittc2dzdHIgItC30LDRgdC10YfQtdC90LjRgtC1INCy0YrQt9C80L7QttC90L7RgdGC0Lgg0L3QsCDQv9C+0YLQvtC60LAiCisKK21zZ2lkICJtaW5pbXVtIgorbXNnc3RyICLQvNC40L3QuNC80YPQvCIKKworbXNnaWQgIm1heGltdW0iCittc2dzdHIgItC80LDQutGB0LjQvNGD0LwiCisKK21zZ2lkICJmb3JjZSBjYXBzIgorbXNnc3RyICLQv9GA0LjQvdGD0LTQuNGC0LXQu9C90L4g0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0LLRitC30LzQvtC20L3QvtGB0YLQuCIKKworbXNnaWQgImZvcmNlIGNhcHMgd2l0aG91dCBkb2luZyBhIHR5cGVmaW5kIgorbXNnc3RyICLQv9GA0LjQvdGD0LTQuNGC0LXQu9C90L4g0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0LLRitC30LzQvtC20L3QvtGB0YLQuCDQsdC10Lcg0YLRitGA0YHQtdC90LUg0L3QsCDQstC40LTQvtCy0LXRgtC1IgorCittc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgorbXNnc3RyICLQn9C+0YLQvtC60YrRgiDQvdC1INGB0YrQtNGK0YDQttCwINC90LjQutCw0LrQstC4INC00LDQvdC90LgiCisKK21zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgorbXNnc3RyICLQoNC10LDQu9C40LfQuNGA0LDQvdC4INC40L3RgtC10YDRhNC10LnRgdC4OlxuIgorCittc2dpZCAicmVhZGFibGUiCittc2dzdHIgItGBINC/0YDQsNCy0LAg0LfQsCDRh9C10YLQtdC90LUiCisKK21zZ2lkICJ3cml0YWJsZSIKK21zZ3N0ciAi0YEg0L/RgNCw0LLQsCDQt9CwINC30LDQv9C40YEiCisKK21zZ2lkICJjb250cm9sbGFibGUiCittc2dzdHIgItC80L7QttC1INC00LAg0YHQtSDQutC+0L3RgtGA0L7Qu9C40YDQsCIKKworbXNnaWQgImNoYW5nZWFibGUgaW4gTlVMTCwgUkVBRFksIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlIgorbXNnc3RyICIiCisi0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQvtC80LXQvdGPINGB0LDQvNC+INCyINGB0YrRgdGC0L7Rj9C90LjRj9GC0LAgTlVMTCAo0LfQsNC90YPQu9GP0LLQsNC90LUpLCBSRUFEWSAo0LPQvtGC0L7QstC90L7RgdGCKSwgIgorIlBBVVNFRCAo0L3QsCDQv9Cw0YPQt9CwKSDQuNC70LggUExBWUlORyAo0LjQt9C/0YrQu9C90LXQvdC40LUpIgorCittc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwsIFJFQURZIG9yIFBBVVNFRCBzdGF0ZSIKK21zZ3N0ciAiIgorItC80L7QttC1INC00LAg0YHQtSDQv9GA0L7QvNC10L3RjyDRgdCw0LzQviDQsiDRgdGK0YHRgtC+0Y/QvdC40Y/RgtCwIE5VTEwgKNC30LDQvdGD0LvRj9Cy0LDQvdC1KSwgUkVBRFkgKNCz0L7RgtC+0LLQvdC+0YHRgikgIgorItC40LvQuCBQQVVTRUQgKNC90LAg0L/QsNGD0LfQsCkiCisKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKK21zZ3N0ciAiIgorItC80L7QttC1INC00LAg0YHQtSDQv9GA0L7QvNC10L3RjyDRgdCw0LzQviDQsiDRgdGK0YHRgtC+0Y/QvdC40Y/RgtCwIE5VTEwgKNC30LDQvdGD0LvRj9Cy0LDQvdC1KSDQuNC70LggUkVBRFkgKNCz0L7RgtC+0LLQvdC+0YHRgikiCisKK21zZ2lkICJCbGFja2xpc3RlZCBmaWxlczoiCittc2dzdHIgItCX0LDQsdGA0LDQvdC10L3QuCDRhNCw0LnQu9C+0LLQtToiCisKK21zZ2lkICJUb3RhbCBjb3VudDogIgorbXNnc3RyICLQntCx0Ykg0LHRgNC+0Lk6IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdGVkIGZpbGUiCittc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdGVkIGZpbGVzIgorbXNnc3RyWzBdICIlZCDQt9Cw0LHRgNCw0L3QtdC9INGE0LDQudC7IgorbXNnc3RyWzFdICIlZCDQt9Cw0LHRgNCw0L3QtdC90Lgg0YTQsNC50LvQsCIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBwbHVnaW4iCittc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCittc2dzdHJbMF0gIiVkINC/0YDQuNGB0YLQsNCy0LrQsCIKK21zZ3N0clsxXSAiJWQg0L/RgNC40YHRgtCw0LLQutC4IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdCBlbnRyeSIKK21zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0IGVudHJpZXMiCittc2dzdHJbMF0gIiVkINC30LDQsdGA0LDQvdC10L0g0LfQsNC/0LjRgSIKK21zZ3N0clsxXSAiJWQg0LfQsNCx0YDQsNC90LXQvdC4INC30LDQv9C40YHQsCIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBmZWF0dXJlIgorbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKK21zZ3N0clswXSAiJWQg0YHQstC+0LnRgdGC0LLQviIKK21zZ3N0clsxXSAiJWQg0YHQstC+0LnRgdGC0LLQsCIKKworbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKK21zZ3N0ciAi0J7RgtC/0LXRh9Cw0YLQstCw0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDQtdC70LXQvNC10L3RgtC4IgorCittc2dpZCAiUHJpbnQgbGlzdCBvZiBibGFja2xpc3RlZCBmaWxlcyIKK21zZ3N0ciAi0J7RgtC/0LXRh9Cw0YLQstCw0L3QtSDQvdCwINGB0L/QuNGB0YrQutCwINGB0YrRgSDQt9Cw0LHRgNCw0L3QtdC90LjRgtC1INGE0LDQudC70L7QstC1IgorCittc2dpZCAiIgorIlByaW50IGEgbWFjaGluZS1wYXJzYWJsZSBsaXN0IG9mIGZlYXR1cmVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIG9yIGFsbCAiCisicGx1Z2lucyBwcm92aWRlLlxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBpbiBjb25uZWN0aW9uIHdpdGggZXh0ZXJuYWwgIgorImF1dG9tYXRpYyBwbHVnaW4gaW5zdGFsbGF0aW9uIG1lY2hhbmlzbXMiCittc2dzdHIgIiIKKyLQntGC0L/QtdGH0LDRgtCy0LDQvdC1INC90LAg0YHQv9C40YHRitC6INGBINCy0YrQt9C80L7QttC90L7RgdGC0LjRgtC1INC90LAg0YPQutCw0LfQsNC90LDRgtCwINC/0YDQuNGB0YLQsNCy0LrQsCDQuNC70Lgg0LLRgdC40YfQutC4ICIKKyLQv9GA0LjRgdGC0LDQstC60LguXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg0KPQtNC+0LHQvdC+INCy0YrQsiDQstGA0YrQt9C60LAg0YEg0LLRitC90YjQvdC4INC80LXRhdCw0L3QuNC30LzQuCAiCisi0LfQsCDQsNCy0YLQvtC80LDRgtC40YfQvdC+INC40L3RgdGC0LDQu9C40YDQsNC90LUg0L3QsCDQv9GA0LjRgdGC0LDQstC60LgiCisKK21zZ2lkICJMaXN0IHRoZSBwbHVnaW4gY29udGVudHMiCittc2dzdHIgItCe0YLQv9C10YfQsNGC0LLQsNC90LUg0L3QsCDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0L3QsCDQv9GA0LjRgdGC0LDQstC60LjRgtC1IgorCittc2dpZCAiUHJpbnQgc3VwcG9ydGVkIFVSSSBzY2hlbWVzLCB3aXRoIHRoZSBlbGVtZW50cyB0aGF0IGltcGxlbWVudCB0aGVtIgorbXNnc3RyICIiCisi0J7RgtC/0LXRh9Cw0YLQstCw0L3QtSDQvdCwINC/0L7QtNC00YrRgNC20LDQvdC40YLQtSDRgdGF0LXQvNC4INC30LAgVVJJLCDQutCw0LrRgtC+INC4INC10LvQtdC80LXQvdGC0LjRgtC1INGBINGC0Y/RhdC90LAgIgorItGA0LXQsNC70LjQt9Cw0YbQuNGPIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgorbXNnc3RyICLQpNCw0LnQu9GK0YIg0L3QsCDQv9GA0LjRgdGC0LDQstC60LDRgtCwINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0YDQtdC00LXQvTogJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIGVsZW1lbnQgb3IgcGx1Z2luICclcydcbiIKK21zZ3N0ciAi0J3Rj9C80LAg0YLQsNC60YrQsiDQtdC70LXQvNC10L3RgiDQuNC70Lgg0L/RgNC40YHRgtCw0LLQutCwIOKAniVz4oCcXG4iCisKK21zZ2lkICJJbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICLQodGC0LDRgtC40YHRgtC40LrQsCDQvdCwINC40L3QtNC10LrRgdCwIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIGVsZW1lbnQgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAi0J/QvtC70YPRh9C10L3QviDQtSDRgdGK0L7QsdGJ0LXQvdC40LUgIyV1INC+0YIg0LXQu9C10LzQtdC90YIg4oCeJXPigJwgKCVzKTogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIHBhZCBcIiVzOiVzXCIgKCVzKTogIgorbXNnc3RyICLQn9C+0LvRg9GH0LXQvdC+INC1INGB0YrQvtCx0YnQtdC90LjQtSAjJXUg0L7RgiDQtNC+0L/RitC70LLQsNC90LXRgtC+IOKAniVzOiVz4oCcICglcyk6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAi0J/QvtC70YPRh9C10L3QviDQtSDRgdGK0L7QsdGJ0LXQvdC40LUgIyV1INC+0YIg0L7QsdC10LrRgiDigJ4lc+KAnCAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKK21zZ3N0ciAi0J/QvtC70YPRh9C10L3QviDQtSDRgdGK0L7QsdGJ0LXQvdC40LUgIyV1ICglcyk6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgRU9TIGZyb20gZWxlbWVudCBcIiVzXCIuXG4iCittc2dzdHIgItCf0L7Qu9GD0YfQtdC9INC1IEVPUyAo0LrRgNCw0Lkg0L3QsCDQv9C+0YLQvtC60LApINC+0YIg0LXQu9C10LzQtdC90YIg4oCeJXPigJwuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKK21zZ3N0ciAi0J7QotCa0KDQmNCiINCV0KLQmNCa0JXQoiAgICAgIDog0L7RgtC60YDQuNGCINC+0LrQvtC70L4g0LXQu9C10LzQtdC90YIg4oCeJXPigJwuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBwYWQgXCIlczolc1wiLlxuIgorbXNnc3RyICLQntCi0JrQoNCY0KIg0JXQotCY0JrQldCiICAgICAgOiDQvtGC0LrRgNC40YIg0L7QutC+0LvQviDQtNC+0L/RitC70LLQsNC90LXRgtC+IOKAniVzOiVz4oCcLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKK21zZ3N0ciAi0J7QotCa0KDQmNCiINCV0KLQmNCa0JXQoiAgICAgIDog0L7RgtC60YDQuNGCINC+0LrQvtC70L4g0L7QsdC10LrRgiDigJ4lc+KAnC5cbiIKKworbXNnaWQgIkZPVU5EIFRBR1xuIgorbXNnc3RyICLQntCi0JrQoNCY0KIg0JXQotCY0JrQldCiXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklORk86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorItCY0J3QpNCe0KDQnNCQ0KbQmNCvOlxuIgorIiVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgorbXNnc3RyICLQn9Cg0JXQlNCj0J/QoNCV0JbQlNCV0J3QmNCVOiDQvtGCINC10LvQtdC80LXQvdGCICVzOiAlc1xuIgorCittc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLi4uXG4iCittc2dzdHIgItCR0YPRhNC10YDQuNGA0LDQvSwg0LjQt9GH0LDQutCy0LAg0YHQtSDQt9Cw0LLRitGA0YjQstCw0L3QtdGC0L4g0L3QsCDQsdGD0YTQtdGA0LjRgNCw0L3QtdGC0L7igKZcbiIKKworbXNnaWQgImJ1ZmZlcmluZy4uLiIKK21zZ3N0ciAi0LHRg9GE0LXRgNC40YDQsNC90LXigKYiCisKK21zZ2lkICJEb25lIGJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgorbXNnc3RyICLQkdGD0YTQtdGA0LjRgNCw0L3QtdGC0L4g0LfQsNCy0YrRgNGI0LgsINC60L7QvdCy0LXQudC10YDRitGCINGB0LUg0LTQsNCy0LAg0LfQsCDQmNCX0J/QqtCb0J3QldCd0JjQleKAplxuIgorCittc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAi0JHRg9GE0LXRgNC40YDQsNC90LUsINC60L7QvdCy0LXQudC10YDRitGCINGB0LUg0LTQsNCy0LAg0J3QkCDQn9CQ0KPQl9CQ4oCmXG4iCisKK21zZ2lkICJSZWRpc3RyaWJ1dGUgbGF0ZW5jeS4uLlxuIgorbXNnc3RyICLQn9GA0LXRgNCw0LfQv9GA0LXQtNC10LvRj9C90LUg0L3QsCDQu9Cw0YLQtdC90YLQvdC+0YHRgtGC0LDigKZcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgorbXNnc3RyICLQl9Cw0LTQsNCy0LDQvdC1INC90LAg0YHRitGB0YLQvtGP0L3QuNC10YLQviDQvdCwICVzINC/0L4g0LfQsNGP0LLQutCwINC90LAgJXPigKZcbiIKKworbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCittc2dzdHIgItCf0YDQtdC60YrRgdCy0LDQvdC1OiDQmtC+0L3QstC10LnQtdGA0YrRgiDRgdC1INGB0L/QuNGA0LDigKZcbiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBlbGVtZW50OiAlc1xuIgorbXNnc3RyICLQtdC70LXQvNC10L3RgtGK0YIg4oCeJXPigJwg0LvQuNC/0YHQstCwIgorCittc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgorbXNnc3RyICLQmNC30YXQvtC00L3QuCDRgdGK0L7QsdGJ0LXQvdC40Y8g0LfQsCDQtdGC0LjQutC10YLQuNGC0LUgKNC80LXRgtCw0LTQsNC90L3QuNGC0LUpIgorCittc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKK21zZ3N0ciAi0JTQsCDRgdC1INC00LDQstCw0YIg0LjQt9GF0L7QtNC90Lgg0YHRitC+0LHRidC10L3QuNGPINC30LAg0YHRitGB0YLQvtGP0L3QuNC10YLQviDQuCDQv9GA0L7QvNGP0L3QsNGC0LAg0L3QsCDRgdCy0L7QudGB0YLQstCwIgorCittc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi0JTQsCDQvdC1INGB0LUg0L7RgtC/0LXRh9Cw0YLQstCwINC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0L3QsNC/0YDQtdC00YrQutCwIgorCittc2dpZCAiT3V0cHV0IG1lc3NhZ2VzIgorbXNnc3RyICLQmNC30YXQvtC00L3QuCDRgdGK0L7QsdGJ0LXQvdC40Y8iCisKK21zZ2lkICJEbyBub3Qgb3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBvZiBUWVBFIgorbXNnc3RyICLQlNCwINC90LUg0YHQtSDQtNCw0LLQsNGCINC40LfRhdC+0LTQvdC4INGB0YrQvtCx0YnQtdC90LjRjyDQvtGCINGB0LvQtdC00L3QuNGC0LUg0JLQmNCU0L7QstC1INC30LAg0YHRitGB0YLQvtGP0L3QuNC10YLQviAiCisKK21zZ2lkICJUWVBFMSxUWVBFMiwuLi4iCittc2dzdHIgItCS0JjQlDEs0JLQmNCUMizigKYiCisKK21zZ2lkICJEbyBub3QgaW5zdGFsbCBhIGZhdWx0IGhhbmRsZXIiCittc2dzdHIgItCU0LAg0L3QtSDRgdC1INC40L3RgdGC0LDQu9C40YDQsCDQvNC+0LTRg9C7INC30LAg0L7QsdGA0LDQsdC+0YLQutCwINC90LAg0LPRgNC10YjQutC4IgorCittc2dpZCAiUHJpbnQgYWxsb2MgdHJhY2UgKGlmIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lKSIKK21zZ3N0ciAiIgorItCe0YLQv9C10YfQsNGC0LLQsNC90LUg0L3QsCDQt9Cw0LTQtdC70Y/QvdC10YLQviDQvdCwINC/0LDQvNC10YIgKNCw0LrQviDQtSDQsdC40LvQviDQstC60LvRjtGH0LXQvdC+INC/0YDQuCDQutC+0LzQv9C40LvQuNGA0LDQvdC1INC90LAgIgorItC/0YDQvtCz0YDQsNC80LDRgtCwKSIKKworbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKK21zZ3N0ciAiIgorItCf0YDQuNC90YPQtNC40YLQtdC70L3QviDQuNC30LLQtdC20LTQsNC90LUg0L3QsCBFT1Mg0LfQsCDQuNC30YLQvtGH0L3QuNGG0LjRgtC1INC/0YDQtdC00Lgg0YHQv9C40YDQsNC90LXRgtC+INC90LAg0LrQvtC90LLQtdC50LXRgNCwIgorCittc2dpZCAiR2F0aGVyIGFuZCBwcmludCBpbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICLQodGK0LHQuNGA0LDQvdC1INC4INC/0L7QutCw0LfQstCw0L3QtSDQvdCwINGB0YLQsNGC0LjRgdGC0LjQutCwINC30LAg0LjQvdC00LXQutGB0LAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZDogJXMuXG4iCittc2dzdHIgItCT0KDQldCo0JrQkDog0LrQvtC90LLQtdC50LXRgNGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC60L7QvdGB0YLRgNGD0LjRgNCw0L06ICVzLlxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKK21zZ3N0ciAi0JPQoNCV0KjQmtCQOiDQutC+0L3QstC10LnQtdGA0YrRgiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LrQvtC90YHRgtGA0YPQuNGA0LDQvS5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCittc2dzdHIgItCf0KDQldCU0KPQn9Cg0JXQltCU0JXQndCY0JU6INC60L7QvdCy0LXQudC10YAg0YEg0LPRgNC10YjQutC4OiAlc1xuIgorCittc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgorbXNnc3RyICLQk9Cg0JXQqNCa0JA6INC90LUg0LUg0L7RgtC60YDQuNGCINC10LvQtdC80LXQvdGCINC30LAg0LrQvtC90LLQtdC50LXRgCDigJQg4oCecGlwZWxpbmXigJwuXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAi0JrQvtC90LLQtdC50LXRgNGK0YIg0YHQtSDQtNCw0LLQsCDQndCQINCf0JDQo9CX0JDigKZcbiIKKworbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCittc2dzdHIgItCT0KDQldCo0JrQkDog0LrQvtC90LLQtdC50LXRgNGK0YIg0L3QtSDQuNC30L/RitC70L3Rj9Cy0LAg0LTQsNCy0LDQvdC10YLQviDQvdCwINC/0LDRg9C30LAuXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCittc2dzdHIgItCa0L7QvdCy0LXQudC10YDRitGCINGA0LDQsdC+0YLQuCDQuCDQvdC1INGB0LUg0L3Rg9C20LTQsNC1INC+0YIg0JHQo9Ck0JXQoNCY0KDQkNCd0JXigKZcbiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCittc2dzdHIgItCa0L7QvdCy0LXQudC10YDRitGCINGB0LUg0JHQo9Ck0JXQoNCY0KDQkOKAplxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgorbXNnc3RyICLQk9Cg0JXQqNCa0JA6INC60L7QvdCy0LXQudC10YDRitGCINC90LUg0LjRgdC60LAg0LTQsCDQv9GA0LXQstGK0YDRgtC4INC90LDQv9GA0LXQtC5cbiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExFRCAuLi5cbiIKK21zZ3N0ciAi0JrQvtC90LLQtdC50LXRgNGK0YIg0LUg0JHQo9Ck0JXQoNCY0KDQkNCd4oCmXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgItCa0L7QvdCy0LXQudC10YDRitGCINGB0LUg0LTQsNCy0LAg0LfQsCDQmNCX0J/QqtCb0J3QldCd0JjQleKAplxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIgorbXNnc3RyICLQk9Cg0JXQqNCa0JA6INC60L7QvdCy0LXQudC10YDRitGCINC90LUg0LjRgdC60LAg0LTQsCDQv9GA0L7RgNCw0LHQvtGC0LguXG4iCisKK21zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKK21zZ3N0ciAi0JLQutC70Y7Rh9C10L0g0LUgRU9TINC/0YDQuCDRgdC/0LjRgNCw0L3QtSDigJQg0LjQt9Cy0LXQttC00LDQvdC1INC90LAgRU9TINC/0L4g0LrQvtC90LLQtdC50LXRgNCwXG4iCisKK21zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKK21zZ3N0ciAi0JjQt9GH0LDQutCy0LDQvdC1INC90LAgRU9T4oCmXG4iCisKK21zZ2lkICJFT1MgcmVjZWl2ZWQgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgorbXNnc3RyICLQn9C+0LvRg9GH0LXQvSDQtSDQutGA0LDQuSDQvdCwINC/0L7RgtC+0Lo6INC60L7QvdCy0LXQudC10YDRitGCINGB0LUg0YHQv9C40YDQsOKAplxuIgorCittc2dpZCAiQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgd2FpdGluZyBmb3IgRU9TXG4iCittc2dzdHIgItCS0YrQt9C90LjQutC90LAg0LPRgNC10YjQutCwINC/0YDQuCDQuNC30YfQsNC60LLQsNC90LXRgtC+INC90LAgRU9TXG4iCisKK21zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKK21zZ3N0ciAi0JjQt9C/0YrQu9C90LXQvdC40LXRgtC+INC30LDQstGK0YDRiNC4INGB0LvQtdC0ICUiCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIC4uLlxuIgorbXNnc3RyICLQmtC+0L3QstC10LnQtdGA0YrRgiDQtSDQsiDQk9Ce0KLQntCS0J3QntCh0KLigKZcbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCAuLi5cbiIKK21zZ3N0ciAi0JrQvtC90LLQtdC50LXRgNGK0YIg0YHQtSDQl9CQ0J3Qo9Cb0K/QktCQ4oCmXG4iCisKK21zZ2lkICJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIgorbXNnc3RyICLQmtC+0L3QstC10LnQtdGA0YrRgiDRgdC1INC+0YHQstC+0LHQvtC20LTQsNCy0LDigKZcbiIKKworI34gbXNnaWQgIlVzYWdlOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLiBdXG4iCisjfiBtc2dzdHIgIiIKKyN+ICLQo9C/0L7RgtGA0LXQsdCwOiBnc3QteG1sbGF1bmNoIDzRhNCw0LnQuy54bWw+IFsg0LXQu9C10LzQtdC90YIu0YHQstC+0LnRgdGC0LLQvj3RgdGC0L7QudC90L7RgdGCIOKApiBdXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogcGFyc2Ugb2YgeG1sIGZpbGUgJyVzJyBmYWlsZWQuXG4iCisjfiBtc2dzdHIgItCT0KDQldCo0JrQkDog0YTQsNC50LvRitGCINGBIHhtbCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LDQvdCw0LvQuNC30LjRgNCw0L0uXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogbm8gdG9wbGV2ZWwgcGlwZWxpbmUgZWxlbWVudCBpbiBmaWxlICclcycuXG4iCisjfiBtc2dzdHIgItCT0KDQldCo0JrQkDog0L3Rj9C80LAg0L3QsNC5LdCz0L7RgNC10L0g0LXQu9C10LzQtdC90YIg0LfQsCDQutC+0L3QstC10LnQtdGAINCy0YrQsiDRhNCw0LnQu9CwIOKAniVz4oCcLlxuIgorCisjfiBtc2dpZCAiV0FSTklORzogb25seSBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLlxuIgorI34gbXNnc3RyICLQn9Cg0JXQlNCj0J/QoNCV0JbQlNCV0J3QmNCVOiDQt9Cw0YHQtdCz0LAg0LUg0L/QvtC30LLQvtC70LXQvSDRgdCw0LzQviDQtdC00LjQvSDQvdCw0Lkt0LPQvtGA0LXQvSDQtdC70LXQvNC10L3Rgi5cbiIKKworI34gbXNnaWQgIkVSUk9SOiBjb3VsZCBub3QgcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50ICVkOiAlcy5cbiIKKyN+IG1zZ3N0ciAiIgorI34gItCT0KDQldCo0JrQkDog0LDRgNCz0YPQvNC10L3RgtGK0YIg0L/QvtC00LDQtNC10L0g0L3QsCDQutC+0LzQsNC90LTQvdC40Y8g0YDQtdC0INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQsNC90LDQu9C40LfQuNGA0LDQvSAiCisjfiAiJWQ6ICVzLlxuIgorCisjfiBtc2dpZCAiV0FSTklORzogZWxlbWVudCBuYW1lZCAnJXMnIG5vdCBmb3VuZC5cbiIKKyN+IG1zZ3N0ciAi0J/QoNCV0JTQo9Cf0KDQldCW0JTQldCd0JjQlTog0LXQu9C10LzQtdC90YLRitGCINC90LAg0LjQvNC1IOKAniVz4oCcINC90LUg0LUg0L7RgtC60YDQuNGCLlxuIgorCisjfiBtc2dpZCAiU2F2ZSB4bWwgcmVwcmVzZW50YXRpb24gb2YgcGlwZWxpbmUgdG8gRklMRSBhbmQgZXhpdCIKKyN+IG1zZ3N0ciAi0JfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0LrQvtC90LLQtdC50LXRgNCwINCy0YrQsiDQstC40LQg0L3QsCBYTUwg0LLRitCyINCk0JDQmdCb0LAg0Lgg0LjQt9GF0L7QtCIKKworI34gbXNnaWQgIkZJTEUiCisjfiBtc2dzdHIgItCk0JDQmdCbIgorCisjfiBtc2dpZCAiRG8gbm90IGluc3RhbGwgc2lnbmFsIGhhbmRsZXJzIGZvciBTSUdVU1IxIGFuZCBTSUdVU1IyIgorI34gbXNnc3RyICIiCisjfiAi0JTQsCDQvdC1INGB0LUg0LLQutC70Y7Rh9Cy0LDRgiDRhNGD0L3QutGG0LjQuCDQt9CwINC+0LHRgNCw0LHQvtGC0LrQsCDQvdCwINGB0LjQs9C90LDQu9C40YLQtSBTSUdVU1IxINC4IFNJR1VTUjIiCmRpZmYgLS1naXQgYS9wby9ib2xkcXVvdC5zZWQgYi9wby9ib2xkcXVvdC5zZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI5MzdhYQotLS0gL2Rldi9udWxsCisrKyBiL3BvL2JvbGRxdW90LnNlZApAQCAtMCwwICsxLDEwIEBACitzLyJcKFteIl0qXCkiL+KAnFwx4oCdL2cKK3MvYFwoW15gJ10qXCknL+KAmFwx4oCZL2cKK3MvICdcKFteYCddKlwpJyAvIOKAmFwx4oCZIC9nCitzLyAnXChbXmAnXSpcKSckLyDigJhcMeKAmS9nCitzL14nXChbXmAnXSpcKScgL+KAmFwx4oCZIC9nCitzL+KAnOKAnS8iIi9nCitzL+KAnC/igJwbWzFtL2cKK3Mv4oCdLxtbMG3igJ0vZworcy/igJgv4oCYG1sxbS9nCitzL+KAmS8bWzBt4oCZL2cKZGlmZiAtLWdpdCBhL3BvL2NhLmdtbyBiL3BvL2NhLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjc4MzIzCi0tLSAvZGV2L251bGwKKysrIGIvcG8vY2EuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2NhLnBvIGIvcG8vY2EucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlhOTlkYQotLS0gL2Rldi9udWxsCisrKyBiL3BvL2NhLnBvCkBAIC0wLDAgKzEsMTQyOSBAQAorIyBDYXRhbGFuIHRyYW5zbGF0aW9uIGZvciBnc3RyZWFtZXIuCisjIENvcHlyaWdodCDCqSAyMDA0LCAyMDA1LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5jZSBhcyB0aGUgZ3N0cmVhbWVyIHBhY2thZ2UuCisjIEpvcmRpIE1hbGxhY2ggPGpvcmRpQHNpbmRvbWluaW8ubmV0PiwgMjAwNCwgMjAwNSwgMjAxMC4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdzdHJlYW1lciAwLjEwLjMwLjNcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wOS0yOSAxNDo1NSswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0xMS0wNCAxOTo0MSswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBKb3JkaSBNYWxsYWNoIDxqb3JkaUBzaW5kb21pbmlvLm5ldD5cbiIKKyJMYW5ndWFnZS1UZWFtOiBDYXRhbGFuIDxjYUBkb2Rkcy5uZXQ+XG4iCisiTGFuZ3VhZ2U6IGNhXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9biE9MTtcbiIKKworbXNnaWQgIlByaW50IHRoZSBHU3RyZWFtZXIgdmVyc2lvbiIKK21zZ3N0ciAiSW1wcmltZWl4IGxhIHZlcnNpw7MgZGUgR1N0cmVhbWVyIgorCittc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCittc2dzdHIgIkZlcyBmYXRhbHMgdG90cyBlbHMgYXZpc29zIgorCittc2dpZCAiUHJpbnQgYXZhaWxhYmxlIGRlYnVnIGNhdGVnb3JpZXMgYW5kIGV4aXQiCittc2dzdHIgIkltcHJpbWVpeCBsZXMgY2F0ZWdvcmllcyBkZSBkZXB1cmFjacOzIGRpc3BvbmlibGVzIGkgc3VydCIKKworbXNnaWQgIiIKKyJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gNSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKK21zZ3N0ciAiIgorIk5pdmVsbCBkZSBkZXB1cmFjacOzIHBlciBkZWZlY3RlIGRlcyBkZSAxIChub23DqXMgZXJyb3JzKSBhIDUgKHRvdCkgbyAwIHBlciBhICIKKyJjYXAgc29ydGlkYSIKKworbXNnaWQgIkxFVkVMIgorbXNnc3RyICJOSVZFTEwiCisKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCisidGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgorbXNnc3RyICIiCisiTGxpc3RhIHNlcGFyYWRhIHBlciBjb21lcyBkZSBwYXJlbGxlcyBub21fY2F0ZWdvcmlhOm5pdmVsbCBwZXIgYSBlc3RhYmxpciAiCisibml2ZWxscyBlc3BlY8OtZmljcyBwZXIgYSBsZXMgY2F0ZWdvcmllcyBpbmRpdmlkdWFscy4gUGVyIGV4ZW1wbGU6ICIKKyJHU1RfQVVUT1BMVUc6NSwgR1NUX0VMRU1FTlRfKjozIgorCittc2dpZCAiTElTVCIKK21zZ3N0ciAiTExJU1RBIgorCittc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCittc2dzdHIgIkluaGFiaWxpdGEgbGEgc29ydGlkYSBkZSBkZXB1cmFjacOzIGNvbG9yZWphZGEiCisKK21zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKK21zZ3N0ciAiSW5oYWJpbGl0YSBsYSBkZXB1cmFjacOzIgorCittc2dpZCAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCittc2dzdHIgIkhhYmlsaXRhIGVscyBkaWFnbsOyc3RpY3MgZGV0YWxsYXRzIGRlIGPDoHJyZWdhIGRlIGNvbm5lY3RvcnMiCisKK21zZ2lkICJDb2xvbi1zZXBhcmF0ZWQgcGF0aHMgY29udGFpbmluZyBwbHVnaW5zIgorbXNnc3RyICJDYW1pbnMgc2VwYXJhdHMgcGVyIGRvcyBwdW50cyBxdWUgY29udGVuZW4gY29ubmVjdG9ycyIKKworbXNnaWQgIlBBVEhTIgorbXNnc3RyICJDQU1JTlMiCisKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCisiZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgorbXNnc3RyICIiCisiTGxpc3RhIHNlcGFyYWRhIHBlciBjb21lcyBkZSBjb25uZWN0b3JzIGEgcHJlY2FycmVnYXIgYSBtw6lzIGRlIGxhIGxsaXN0YSAiCisiZW1tYWdhdHplbWFkYSBlbiBsYSB2YXJpYWJsZSBkJ2VudG9ybiBHU1RfUExVR0lOX1BBVEgiCisKK21zZ2lkICJQTFVHSU5TIgorbXNnc3RyICJDT05ORUNUT1JTIgorCittc2dpZCAiRGlzYWJsZSB0cmFwcGluZyBvZiBzZWdtZW50YXRpb24gZmF1bHRzIGR1cmluZyBwbHVnaW4gbG9hZGluZyIKK21zZ3N0ciAiIgorIkluaGFiaWxpdGEgbGEgY2FwdHVyYSBkZSB2aW9sYWNpb25zIGRlIHNlZ21lbnQgZHVyYW50IGxhIGPDoHJyZWdhIGRlICIKKyJjb25uZWN0b3JzIgorCittc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIkluaGFiaWxpdGEgbCdhY3R1YWxpdHphY2nDsyBkZWwgcmVnaXN0cmUiCisKK21zZ2lkICJEaXNhYmxlIHNwYXduaW5nIGEgaGVscGVyIHByb2Nlc3Mgd2hpbGUgc2Nhbm5pbmcgdGhlIHJlZ2lzdHJ5IgorbXNnc3RyICIiCisiSW5oYWJpbGl0YSBlbCBsbGFuw6dhbWVudCBkJ3VuIHByb2PDqXMgYXV4aWxpYXIgbWVudHJlIHMnYW5hbGl0emEgZWwgcmVnaXN0cmUiCisKK21zZ2lkICJHU3RyZWFtZXIgT3B0aW9ucyIKK21zZ3N0ciAiT3BjaW9ucyBkZWwgR1N0cmVhbWVyIgorCittc2dpZCAiU2hvdyBHU3RyZWFtZXIgT3B0aW9ucyIKK21zZ3N0ciAiTW9zdHJhIGxlcyBvcGNpb25zIGRlbCBHU3RyZWFtZXIiCisKK21zZ2lkICJVbmtub3duIG9wdGlvbiIKK21zZ3N0ciAiT3BjacOzIGRlc2NvbmVndWRhIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIgaGEgdHJvYmF0IHVuIGVycm9yIGdlbmVyYWwgZGUgbGEgYmlibGlvdGVjYSBwcmluY2lwYWwuIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyBlcnJvci4iCittc2dzdHIgIiIKKyJFbHMgZGVzZW52b2x1cGFkb3JzIGRlIEdTdHJlYW1lcnMgaGFuIHNpZ3V0IHRhbiBnYW5kdWxzIHF1ZSBubyBoYW4gYXNzaWduYXQgIgorInVuIGNvZGkgZCdlcnJvciBwZXIgYSBhcXVlc3QgZXJyb3IuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjb2RlIG5vdCBpbXBsZW1lbnRlZC4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgaW50ZXJuIGRlIEdTdHJlYW1lcjogY29kaSBubyBpbXBsZW1lbnRhdC4iCisKK21zZ2lkICIiCisiR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkIGFuZCBzb21lIGVsZW1lbnQgZmFpbGVkIHRvIHBvc3QgYSAiCisicHJvcGVyIGVycm9yIG1lc3NhZ2Ugd2l0aCB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZS4iCittc2dzdHIgIiIKKyJTJ2hhIHByb2R1w690IHVuIGVycm9yIGRlbCBHU3RyZWFtZXI6IGVsIGNhbnZpIGQnZXN0YXQgaGEgZmFsbGF0IGkgYWxndW4gIgorImVsZW1lbnQgbm8gaGEgcG9ndXQgZW52aWFyIHVuIG1pc3NhdGdlIGQnZXJyb3IgYW1iIGxhIHJhw7MgZGUgbGEgZmFsbGlkYS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHBhZCBwcm9ibGVtLiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBpbnRlcm4gZGUgR1N0cmVhbWVyOiBwcm9ibGVtYSBkZSBjZcWAbGEuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgaW50ZXJuIGRlIEdTdHJlYW1lcjogcHJvYmxlbWEgZGUgZmlscy4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGludGVybiBkZSBHU3RyZWFtZXI6IHByb2JsZW1hIGRlIG5lZ29jaWFjacOzLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogZXZlbnQgcHJvYmxlbS4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgaW50ZXJuIGRlIEdTdHJlYW1lcjogcHJvYmxlbWEgZCdlc2RldmVuaW1lbnQuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGludGVybiBkZSBHU3RyZWFtZXI6IHByb2JsZW1hIGRlIGNlcmNhLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2FwcyBwcm9ibGVtLiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBpbnRlcm4gZGUgR1N0cmVhbWVyOiBwcm9ibGVtYSBkZSBjYXBhY2l0YXRzLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGFnIHByb2JsZW0uIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGludGVybiBkZSBHU3RyZWFtZXI6IHByb2JsZW1hIGQnZXRpcXVldGEuIgorCittc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKK21zZ3N0ciAiTGEgdm9zdHJhIGluc3RhbMK3bGFjacOzIGRlbCBHU3RyZWFtZXIgbWFuY2EgdW4gY29ubmVjdG9yLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2xvY2sgcHJvYmxlbS4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgaW50ZXJuIGRlIEdTdHJlYW1lcjogcHJvYmxlbWEgZGUgcmVsbG90Z2UuIgorCittc2dpZCAiIgorIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGhhcyBiZWVuICIKKyJkaXNhYmxlZC4iCittc2dzdHIgIiIKKyJBcXVlc3RhIGFwbGljYWNpw7MgZXN0w6AgdHJhY3RhbnQgZCdlbXByYXIgZnVuY2lvbmFsaXRhdCBkZWwgR1N0cmVhbWVyIHF1ZSAiCisicydoYSBpbmhhYmlsaXRhdC4iCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN1cHBvcnRpbmcgbGlicmFyeSBlcnJvci4iCittc2dzdHIgIkdTdHJlYW1lciBoYSB0cm9iYXQgdW4gZXJyb3IgZ2VuZXJhbCBkZSBsYSBiaWJsaW90ZWNhIGRlIHJlY29semFtZW50LiIKKworbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgaW5pY2lhbGl0emFyIGxhIGJpYmxpb3RlY2EgZGUgcmVjb2x6YW1lbnQuIgorCittc2dpZCAiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgdGFuY2FyIGxhIGJpYmxpb3RlY2EgZGUgcmVjb2x6YW1lbnQuIgorCittc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGNvbmZpZ3VyYXIgbGEgYmlibGlvdGVjYSBkZSByZWNvbHphbWVudC4iCisKK21zZ2lkICJFbmNvZGluZyBlcnJvci4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZGUgY29kaWZpY2FjacOzLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIgaGEgdHJvYmF0IHVuIGVycm9yIGdlbmVyYWwgZGUgcmVjdXJzb3MuIgorCittc2dpZCAiUmVzb3VyY2Ugbm90IGZvdW5kLiIKK21zZ3N0ciAiTm8gcydoYSB0cm9iYXQgZWwgcmVjdXJzLiIKKworbXNnaWQgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCittc2dzdHIgIkVsIHJlY3VycyBlc3TDoCBvY3VwYXQgbyBubyBlc3TDoCBkaXNwb25pYmxlLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBvYnJpciBlbCByZWN1cnMgcGVyIGEgbGEgbGVjdHVyYS4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgb2JyaXIgZWwgcmVjdXJzIHBlciBhIGwnZXNjcmlwdHVyYS4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgb2JyaXIgZWwgcmVjdXJzIHBlciBhIGwnZXNjcmlwdHVyYSBpIGxhIGxlY3R1cmEuIgorCittc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCB0YW5jYXIgZWwgcmVjdXJzLiIKKworbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gcmVzb3VyY2UuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGxsZWdpciBkZXMgZGVsIHJlY3Vycy4iCisKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gcmVzb3VyY2UuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIGFsIHJlY3Vycy4iCisKK21zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBmZXIgdW5hIGNlcmNhIGFsIHJlY3Vycy4iCisKK21zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IHNpbmNyb25pdHphciBhbCByZWN1cnMuIgorCittc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgb2J0ZW5pci9lc3RhYmxpciBlbHMgcGFyw6BtZXRyZXMgZGVzIGRlbC9hbCByZWN1cnMuIgorCittc2dpZCAiTm8gc3BhY2UgbGVmdCBvbiB0aGUgcmVzb3VyY2UuIgorbXNnc3RyICJObyByZXN0YSBlc3BhaSBhbCByZWN1cnMuIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdHJlYW0gZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIgaGEgdHJvYmF0IHVuIGVycm9yIGdlbmVyYWwgZGUgZmx1eC4iCisKK21zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCittc2dzdHIgIiIKKyJMJ2VsZW1lbnQgbm8gaW1wbGVtZW50YSBsYSBnZXN0acOzIGQnYXF1ZXN0IGZsdXguIEVudmlldSB1biBpbmZvcm1lIGQnZXJyb3IuIgorCittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgZGV0ZXJtaW5hciBlbCB0aXB1cyBkZSBmbHV4LiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKK21zZ3N0ciAiIgorIkVsIGZsdXggw6lzIGQndW4gdGlwdXMgZGlmZXJlbnQgZGVsIHF1YWwgw6lzIGdlc3Rpb25hdCBwZXIgYXF1ZXN0IGVsZW1lbnQuIgorCittc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgorbXNnc3RyICJObyBoaSBoYSBjYXAgY8OyZGVjIHByZXNlbnQgcXVlIHB1Z2EgZ2VzdGlvbmFyIGVsIHRpcHVzIGRlbCBmbHV4LiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZWNvZGUgc3RyZWFtLiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBkZWNvZGlmaWNhciBlbCBmbHV4LiIKKworbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBjb2RpZmljYXIgZWwgZmx1eC4iCisKK21zZ2lkICJDb3VsZCBub3QgZGVtdWx0aXBsZXggc3RyZWFtLiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBkZW11bHRpcGxleGFyIGVsIGZsdXguIgorCittc2dpZCAiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IG11bHRpcGxleGFyIGVsIGZsdXguIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiIKK21zZ3N0ciAiRWwgZmx1eCDDqXMgZW4gZWwgZm9ybWF0IGVycm9uaS4iCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiRWwgZmx1eCDDqXMgeGlmcmF0IGkgbm8gcydoYSBpbXBsZW1lbnRhdCBlbCBkZXN4aWZyYXRnZS4iCisKK21zZ2lkICIiCisiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGNhbid0IGJlIGRlY3J5cHRlZCBiZWNhdXNlIG5vIHN1aXRhYmxlIGtleSBoYXMgIgorImJlZW4gc3VwcGxpZWQuIgorbXNnc3RyICIiCisiRWwgZmx1eCDDqXMgeGlmcmF0IGkgbm8gZXMgcG90IGRlc3hpZnJhciBwZXJxdcOoIG5vIHMnaGEgcHJvdmXDr3QgdW5hIGNsYXUgIgorImFkZXF1YWRhLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMuIgorbXNnc3RyICJObyBoaSBoYSBjYXAgbWlzc2F0Z2UgZCdlcnJvciBwZXIgYWwgZG9taW5pICVzLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMgYW5kIGNvZGUgJWQuIgorbXNnc3RyICIiCisiTm8gcydoYSB0cm9iYXQgY2FwIG1pc3NhdGdlIGQnZXJyb3IgZXN0w6BuZGFyZCBwZXIgYWwgZG9taW5pICVzIGkgZWwgY29kaSAlZC4iCisKK21zZ2lkICJTZWxlY3RlZCBjbG9jayBjYW5ub3QgYmUgdXNlZCBpbiBwaXBlbGluZS4iCittc2dzdHIgIkVsIHJlbGxvdGdlIHNlbGVjY2lvbmF0IG5vIGVzIHBvdCBlbXByYXIgYWwgY29uZHVjdGUuIgorCittc2dpZCAidGl0bGUiCittc2dzdHIgInTDrXRvbCIKKworbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUiCittc2dzdHIgInTDrXRvbCB1c2F0IGhhYml0dWFsbWVudCIKKworbXNnaWQgInRpdGxlIHNvcnRuYW1lIgorbXNnc3RyICJub20gZCdvcmRlbmFjacOzIGRlbCB0w610b2wiCisKK21zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJ0w610b2wgdXNhdCBoYWJpdHVhbG1lbnQgcGVyIGEgbCdvcmRlbmFjacOzIgorCittc2dpZCAiYXJ0aXN0IgorbXNnc3RyICJhcnRpc3RhIgorCittc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIgorbXNnc3RyICJwZXJzb25lcyByZXNwb25zYWJsZXMgZGUgbGEgZ3JhdmFjacOzIgorCittc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgorbXNnc3RyICJub20gZCdvcmRlbmFjacOzIGRlIGwnYXJ0aXN0YSIKKworbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAicGVyc29uZXMgcmVzcG9uc2FibGVzIGRlIGxhIGdyYXZhY2nDsyBwZXIgYSBsJ29yZGVuYWNpw7MiCisKK21zZ2lkICJhbGJ1bSIKK21zZ3N0ciAiw6BsYnVtIgorCittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiCittc2dzdHIgIsOgbGJ1bSBxdWUgY29udMOpIGFxdWVzdGEgZGFkZXMiCisKK21zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKK21zZ3N0ciAibm9tIGQnb3JkZW5hY2nDsyBkZSBsJ8OgbGJ1bSIKKworbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICLDoGxidW0gcXVlIGNvbnTDqSBhcXVlc3RhIGRhZGVzIHBlciBhIGwnb3JkZW5hY2nDsyIKKworbXNnaWQgImFsYnVtIGFydGlzdCIKK21zZ3N0ciAiYXJ0aXN0YSBkZSBsJ8OgbGJ1bSIKKworbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIGRpc3BsYXllZCIKK21zZ3N0ciAiTCdhcnRpc3RhIGRlIGwnw6BsYnVtIHNlbmNlciwgdGFsIGkgY29tIHMnaGF1cmlhIGRlIG1vc3RyYXIiCisKK21zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgIm5vbSBkJ29yZGVuYWNpw7MgZGUgbCdhcnRpc3RhIGRlIGwnw6BsYnVtIgorCittc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkIgorbXNnc3RyICJMJ2FydGlzdGEgZGUgbCfDoGxidW0gc2VuY2VyLCB0YWwgaSBjb20gcydoYXVyaWEgZCdvcmRlbmFyIgorCittc2dpZCAiZGF0ZSIKK21zZ3N0ciAiZGF0YSIKKworbXNnaWQgImRhdGUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR0RhdGUgc3RydWN0dXJlKSIKK21zZ3N0ciAiZGF0YSBlbiBsYSBxdWFsIGVzIHZhbiBjcmVhciBsZXMgZGFkZXMgKGNvbSBhIHVuYSBlc3RydWN0dXJhIEdEYXRlKSIKKworbXNnaWQgImRhdGV0aW1lIgorbXNnc3RyICJkYXRhaG9yYSIKKworbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKK21zZ3N0ciAiIgorImRhdGEgaSBob3JhIGVuIHF1w6ggZXMgdmFuIGNyZWFyIGxlcyBkYWRlcyAoY29tIGEgdW5hIGVzdHJ1Y3R1cmEgR3N0RGF0ZVRpbWUpIgorCittc2dpZCAiZ2VucmUiCittc2dzdHIgImfDqG5lcmUiCisKK21zZ2lkICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKK21zZ3N0ciAiZ8OobmVyZSBhbCBxdWFsIHBlcnRhbnllbiBhcXVlc3RlcyBkYWRlcyIKKworbXNnaWQgImNvbW1lbnQiCittc2dzdHIgImNvbWVudGFyaSIKKworbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIgorbXNnc3RyICJ0ZXh0IGxsaXVyZSBjb21lbnRhbnQgbGVzIGRhZGVzIgorCittc2dpZCAiZXh0ZW5kZWQgY29tbWVudCIKK21zZ3N0ciAiY29tZW50YXJpIGVzdMOpcyIKKworbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIGluIGtleT12YWx1ZSBvciBrZXlbZW5dPWNvbW1lbnQgZm9ybSIKK21zZ3N0ciAiIgorInRleHQgbGxpdXJlIGNvbWVudGFudCBsZXMgZGFkZXMgZW4gZm9ybWEgY2xhdT12YWxvciBvIGNsYXVbY2FdPWNvbWVudGFyaSIKKworbXNnaWQgInRyYWNrIG51bWJlciIKK21zZ3N0ciAibsO6bWVybyBkZSBwaXN0YSIKKworbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICJuw7ptZXJvIGRlIHBpc3RhIGRpbnMgZCd1bmEgY29swrdsZWNjacOzIgorCittc2dpZCAidHJhY2sgY291bnQiCittc2dzdHIgImNvbXB0ZSBkZSBwaXN0ZXMiCisKK21zZ2lkICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgorbXNnc3RyICJjb21wdGUgZGUgcGlzdGVzIGRpbnMgZGUgbGEgY29swrdsZWNjacOzIGEgbGEgcXVhbCBwZXJ0YW55IGFxdWVzdGEgcGlzdGEiCisKK21zZ2lkICJkaXNjIG51bWJlciIKK21zZ3N0ciAibsO6bWVybyBkZSBkaXNjIgorCittc2dpZCAiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKK21zZ3N0ciAibsO6bWVybyBkZSBkaXNjIGRpbnMgZCd1bmEgY29swrdsZWNjacOzIgorCittc2dpZCAiZGlzYyBjb3VudCIKK21zZ3N0ciAiY29tcHRlIGRlIGRpc2MiCisKK21zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKK21zZ3N0ciAiY29tdGUgZGUgZGlzY3MgZGlucyBkZSBsYSBjb2zCt2xlY2Npw7MgYSBsYSBxdWFsIHBlcnRhbnkgYXF1ZXN0IGRpc2MiCisKK21zZ2lkICJsb2NhdGlvbiIKK21zZ3N0ciAidWJpY2FjacOzIgorCittc2dpZCAiIgorIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgorImlzIGhvc3RlZCkiCittc2dzdHIgIiIKKyJPcmlnZW4gZGVsIG1lZGkgY29tIGEgVVJJICh1YmljYWNpw7MsIG9uIHMnYWxsb3RqYSBlbCBmaXR4ZXIgbyBmbHV4IG9yaWdpbmFsKSIKKworbXNnaWQgImhvbWVwYWdlIgorbXNnc3RyICJww6BnaW5hIHByaW5jaXBhbCIKKworbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCittc2dzdHIgIiIKKyJQw6BnaW5hIHByaW5jaXBhbCBkJ2FxdWVzdCBtZWRpIChwLiBleC4gbGEgcMOgZ2luYSBwcmluY2lwYWwgZGUgbCdhcnRpc3RhIG8gIgorInBlxYBsw61jdWxhKSIKKworbXNnaWQgImRlc2NyaXB0aW9uIgorbXNnc3RyICJkZXNjcmlwY2nDsyIKKworbXNnaWQgInNob3J0IHRleHQgZGVzY3JpYmluZyB0aGUgY29udGVudCBvZiB0aGUgZGF0YSIKK21zZ3N0ciAidGV4dCBjdXJ0IGRlc2NyaXZpbnQgZWwgY29udGluZ3V0IGRlIGxlcyBkYWRlcyIKKworbXNnaWQgInZlcnNpb24iCittc2dzdHIgInZlcnNpw7MiCisKK21zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKK21zZ3N0ciAidmVyc2nDsyBkJ2FxdWVzdGVzIGRhZGVzIgorCittc2dpZCAiSVNSQyIKK21zZ3N0ciAiSVNSQyIKKworbXNnaWQgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKK21zZ3N0ciAiIgorIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSB2ZWdldSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgorCittc2dpZCAib3JnYW5pemF0aW9uIgorbXNnc3RyICJvcmdhbml0emFjacOzIgorCittc2dpZCAiY29weXJpZ2h0IgorbXNnc3RyICJjb3B5cmlnaHQiCisKK21zZ2lkICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJub3RhIGRlIGNvcHlyaWdodCBkZSBsZXMgZGFkZXMiCisKK21zZ2lkICJjb3B5cmlnaHQgdXJpIgorbXNnc3RyICJ1cmkgZGVsIGNvcHlyaWdodCIKKworbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiVVJJIGEgbGEgbm90YSBkZWwgY29weXJpZ2h0IGRlIGxlcyBkYWRlcyIKKworIywgZnV6enkKK21zZ2lkICJlbmNvZGVkIGJ5IgorbXNnc3RyICJjb2RpZmljYWRvciIKKworbXNnaWQgIm5hbWUgb2YgdGhlIGVuY29kaW5nIHBlcnNvbiBvciBvcmdhbml6YXRpb24iCittc2dzdHIgIiIKKworbXNnaWQgImNvbnRhY3QiCittc2dzdHIgImNvbnRhY3RlIgorCittc2dpZCAiY29udGFjdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiaW5mb3JtYWNpw7MgZGUgY29udGFjdGUiCisKK21zZ2lkICJsaWNlbnNlIgorbXNnc3RyICJsbGljw6huY2lhIgorCittc2dpZCAibGljZW5zZSBvZiBkYXRhIgorbXNnc3RyICJsbGljw6huY2lhIGRlIGxlcyBkYWRlcyIKKworbXNnaWQgImxpY2Vuc2UgdXJpIgorbXNnc3RyICJ1cmkgZGUgbGEgbGxpY8OobmNpYSIKKworbXNnaWQgIlVSSSB0byB0aGUgbGljZW5zZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiVVJJIGEgbGEgbGxpY8OobmNpYSBkZSBsZXMgZGFkZXMiCisKK21zZ2lkICJwZXJmb3JtZXIiCittc2dzdHIgIm3DunNpYyIKKworbXNnaWQgInBlcnNvbihzKSBwZXJmb3JtaW5nIgorbXNnc3RyICJwZXJzb25lcyBxdWUgdG9xdWVuIgorCittc2dpZCAiY29tcG9zZXIiCittc2dzdHIgImNvbXBvc2l0b3IiCisKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciCittc2dzdHIgInBlcnNvbmVzIHF1ZSBjb21wb3NhcmVuIGxhIGdyYXZhY2nDsyIKKworbXNnaWQgImR1cmF0aW9uIgorbXNnc3RyICJkdXJhZGEiCisKK21zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKK21zZ3N0ciAiZHVyYWRhIGVuIGxhIHVuaXRhdCBkZSB0ZW1wcyBkZSBHU3RyZWFtZXIgKG5hbm9zZWdvbnMpIgorCittc2dpZCAiY29kZWMiCittc2dzdHIgImPDsmRlYyIKKworbXNnaWQgImNvZGVjIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiY8OyZGVjIGVuIGVsIHF1YWwgZXN0YW4gZW1tYWdhdHplbWFkZXMgbGVzIGRhZGVzIgorCittc2dpZCAidmlkZW8gY29kZWMiCittc2dzdHIgImPDsmRlYyBkZSB2w61kZW8iCisKK21zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImPDsmRlbCBlbiBlbCBxdWFsIGVzdGFuIGVtbWFnYXR6ZW1hZGVzIGxlcyBkYWRlcyBkZSB2w61kZW8iCisKK21zZ2lkICJhdWRpbyBjb2RlYyIKK21zZ3N0ciAiY8OyZGVjIGQnw6B1ZGlvIgorCittc2dpZCAiY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJjw7JkZWMgZW4gZWwgcXVhbCBlc3RhbiBlbW1hZ2F0emVtYWRlcyBsZXMgZGFkZXMgZCfDoHVkaW8iCisKK21zZ2lkICJzdWJ0aXRsZSBjb2RlYyIKK21zZ3N0ciAiY8OyZGVjIGRlIHN1YnTDrXRvbHMiCisKK21zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImPDsmRlbCBlbiBlbCBxdWFsIGVzdGFuIGVtbWFnYXR6ZW1hZGVzIGxlcyBkYWRlcyBkZSBzdWJ0w610b2xzIgorCittc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKK21zZ3N0ciAiZm9ybWF0IGRlbCBjb250ZW5pZG9yIgorCittc2dpZCAiY29udGFpbmVyIGZvcm1hdCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImZvcm1hdCBkZSBjb250ZW5pZG9yIGVuIHF1w6ggZXN0YW4gZW1tYWdhdHplbWFkZXMgbGVzIGRhZGVzIgorCittc2dpZCAiYml0cmF0ZSIKK21zZ3N0ciAicsOgdGlvIGRlIGJpdHMiCisKK21zZ2lkICJleGFjdCBvciBhdmVyYWdlIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJtaXRqYSBvIHZhbG9yIGV4YWN0ZSBkZSByw6B0aW8gZGUgYml0cyBlbiBiaXRzL3MiCisKK21zZ2lkICJub21pbmFsIGJpdHJhdGUiCittc2dzdHIgInLDoHRpbyBkZSBiaXRzIG5vbWluYWwiCisKK21zZ2lkICJub21pbmFsIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJyw6B0aW8gZGUgYml0cyBub21pbmFsIGVuIGJpdHMvcyIKKworbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKK21zZ3N0ciAicsOgdGlvIGRlIGJpdHMgbcOtbmltIgorCittc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAicsOgdGlvIGRlIGJpdHMgbcOtbmltIGVuIGJpdHMvcyIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSIKK21zZ3N0ciAicsOgdGlvIGRlIGJpdHMgbcOgeGltIgorCittc2dpZCAibWF4aW11bSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAicsOgdGlvIGRlIGJpdHMgbcOgeGltIGVuIGJpdHMvcyIKKworbXNnaWQgImVuY29kZXIiCittc2dzdHIgImNvZGlmaWNhZG9yIgorCittc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiY29kaWZpY2Fkb3IgdXRpbGl0emF0IHBlciBhIGNvZGlmaWNhciBhcXVlc3QgZmx1eCIKKworbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKK21zZ3N0ciAidmVyc2nDsyBkZWwgY29kaWZpY2Fkb3IiCisKK21zZ2lkICJ2ZXJzaW9uIG9mIHRoZSBlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgorbXNnc3RyICJ2ZXJzacOzIGRlbCBjb2RpZmljYWRvciB1dGlsaXR6YXQgcGVyIGEgY29kaWZpY2FyIGFxdWVzdCBmbHV4IgorCittc2dpZCAic2VyaWFsIgorbXNnc3RyICJuw7ptZXJvIGRlIHPDqHJpZSIKKworbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCittc2dzdHIgIm7Dum1lcm8gZGUgc8OocmllIGRlIGxhIHBpc3RhIgorCittc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgorbXNnc3RyICJnYW7DoG5jaWEgZGUgcmVwbGF5Z2FpbiBkZSBsYSBwaXN0YSIKKworbXNnaWQgInRyYWNrIGdhaW4gaW4gZGIiCittc2dzdHIgImdhbsOgbmNpYSBkZSBsYSBwaXN0YSBlbiBkYiIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgcGVhayIKK21zZ3N0ciAiY2ltIGRlIGxlcyBwaXN0ZXMgZGVsIHJlcGxheWdhaW4iCisKK21zZ2lkICJwZWFrIG9mIHRoZSB0cmFjayIKK21zZ3N0ciAiY2ltIGRlIGxlcyBwaXN0ZXMiCisKK21zZ2lkICJyZXBsYXlnYWluIGFsYnVtIGdhaW4iCittc2dzdHIgImdhbsOgbmNpYSBkZSBsJ8OgbGJ1bSBkZWwgcmVwbGF5Z2FpbiIKKworbXNnaWQgImFsYnVtIGdhaW4gaW4gZGIiCittc2dzdHIgImdhbsOgbmNpYSBkZSBsJ8OgbGJ1bSBlbiBkYiIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKK21zZ3N0ciAiY2ltIGRlIGwnw6BsYnVtIGRlbCByZXBsYXlnYWluIgorCittc2dpZCAicGVhayBvZiB0aGUgYWxidW0iCittc2dzdHIgImNpbSBkZSBsJ8OgbGJ1bSIKKworbXNnaWQgInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIgorbXNnc3RyICJuaXZlbGwgZGUgcmVmZXLDqG5jaWEgZGVsIHJlcGxheWdhaW4iCisKK21zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgorbXNnc3RyICJuaXZlbGwgZGUgcmVmZXLDqG5jaWEgZGVscyB2YWxvcnMgZGUgZ3VhbnkgZGUgbGEgcGlzdGEgaSDDoGxidW0iCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIgorbXNnc3RyICJjb2RpIGRlIGxhIGxsZW5ndWEiCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIGZvciB0aGlzIHN0cmVhbSwgY29uZm9ybWluZyB0byBJU08tNjM5LTEiCittc2dzdHIgImNvZGkgZGUgbGEgbGxlbmd1YSBwZXIgYSBhcXVlc3QgZmx1eCwgY29uZm9ybWFudCBhbWIgSVNPLTYzOS0xIgorCittc2dpZCAiaW1hZ2UiCittc2dzdHIgImltYXRnZSIKKworbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgImltYXRnZSByZWxhY2lvbmFkYSBhbWIgYXF1ZXN0IGZsdXgiCisKKyMuIFRSQU5TTEFUT1JTOiAncHJldmlldyBpbWFnZScgPSBpbWFnZSB0aGF0IHNob3dzIGEgcHJldmlldyBvZiB0aGUgZnVsbCBpbWFnZQorbXNnaWQgInByZXZpZXcgaW1hZ2UiCittc2dzdHIgInByZXZpc3VhbGl0emFjacOzIGRlIGxhIGltYXRnZSIKKworbXNnaWQgInByZXZpZXcgaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAicHJldmlzdWFsaXR6YWNpw7MgZGUgbGEgaW1hdGdlIHJlbGFjaW9uYWRhIGFtYiBhcXVlc3QgZmx1eCIKKworbXNnaWQgImF0dGFjaG1lbnQiCittc2dzdHIgImFkanVudCIKKworbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgImZpdHhlciBhZGp1bnRhdCBhIGFxdWVzdCBmbHV4IgorCittc2dpZCAiYmVhdHMgcGVyIG1pbnV0ZSIKK21zZ3N0ciAiY29wcyBwZXIgbWludXQiCisKK21zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKK21zZ3N0ciAibm9tYnJlIGRlIGNvcHMgcGVyIG1pbnV0IGEgbCfDoHVkaW8iCisKK21zZ2lkICJrZXl3b3JkcyIKK21zZ3N0ciAicGFyYXVsZXMgY2xhdSIKKworbXNnaWQgImNvbW1hIHNlcGFyYXRlZCBrZXl3b3JkcyBkZXNjcmliaW5nIHRoZSBjb250ZW50IgorbXNnc3RyICJwYXJhdWxlcyBjbGF1IHNlcGFyYWRlcyBwZXIgY29tZXMgcXVlIGRlc2NyaXVlbiBlbCBjb250aW5ndXQiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKK21zZ3N0ciAibm9tIGRlIGxhIGdlb2xvY2FsaXR6YWNpw7MiCisKK21zZ2lkICIiCisiaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpdmUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yICIKKyJwcm9kdWNlZCIKK21zZ3N0ciAiIgorInViaWNhY2nDsyBkZXNjcmlwdGl2YSBsbGVnaWJsZSBwZWxzIGh1bWFucyBkZWwgbGxvYyBvbiBzJ2hhIGVucmVnaXN0cmF0IG8gIgorInByb2R1w690IGVsIG1lZGkiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCittc2dzdHIgImxhdGl0dWQgZGUgbGEgZ2VvbG9jYWxpdHphY2nDsyIKKworbXNnaWQgIiIKKyJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCisic291dGhlcm4gbGF0aXR1ZGVzKSIKK21zZ3N0ciAiIgorImxhdGl0dWQgZGUgbGEgZ2VvbG9jYWxpdHphY2nDsyBkZWwgbGxvYyBvbiBzJ2hhIGVucmVnaXN0cmF0IG8gcHJvZHXDr3QgZWwgIgorIm1lZGksIGVuIGdyYXVzIGNvbmNvcmRhbnRzIGEgV0dTODQgKHplcm8gYSBsJ2VxdWFkb3IsIHZhbG9ycyBuZWdhdGl1cyBwZXIgYSAiCisibGF0aXR1ZHMgYWwgc3VkKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBsb25naXR1ZGUiCittc2dzdHIgImxvbmdpdHVkIGRlIGxhIGdlb2xvY2FsaXR6YWNpw7MiCisKK21zZ2lkICIiCisiZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCisibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgorbXNnc3RyICIiCisibG9uZ2l0dWQgZGUgbGEgZ2VvbG9jYWxpdHphY2nDsyBkZWwgbGxvYyBvbiBzJ2hhIGVucmVnaXN0cmF0IG8gcHJvZHXDr3QgZWwgIgorIm1lZGksIGVuIGdyYXVzIGNvbmNvcmRhbnRzIGEgV0dTODQgKHplcm8gYWwgbWVyaWRpw6AgaW5pY2lhbCBhIEdyZWVud2ljaC9VSywgIgorInZhbG9ycyBuZWdhdGl1cyBwZXIgYSBsb25naXR1ZHMgb2NjaWRlbnRhbHMpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKK21zZ3N0ciAiZWxldmFjacOzIGRlIGxhIGdlb2xvY2FsaXR6YWNpw7MiCisKK21zZ2lkICIiCisiZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKKyJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgorbXNnc3RyICIiCisiZWxldmFjacOzIGRlIGxhIGdlb2xvY2FsaXR6YWNpw7MgZGVsIGxsb2Mgb24gcydoYSBlbnJlZ2lzdHJhdCBvIHByb2R1w690IGVsICIKKyJtZWRpLCBlbiBncmF1cyBjb25jb3JkYW50cyBhIFdHUzg0ICh6ZXJvIMOpcyBlbCBuaXZlbGwgZGVsIG1hciBtaXRqw6ApIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNvdW50cnkiCittc2dzdHIgImVzdGF0IGRlIGxhIGdlb2xvY2FsaXR6YWNpw7MiCisKK21zZ2lkICJjb3VudHJ5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKK21zZ3N0ciAiZXN0YXQgKG5vbSBlbiBhbmdsw6hzKSBkZWwgbGxvYyBvbiBzJ2hhIGVucmVnaXN0cmF0IG8gcHJvZHXDr3QgZWwgbWVkaSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBjaXR5IgorbXNnc3RyICJjaXV0YXQgZGUgbGEgZ2VvbG9jYWxpdHphY2nDsyIKKworbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICJjaXV0YXQgKG5vbSBlbiBhbmdsw6hzKSBkZWwgbGxvYyBvbiBzJ2hhIGVucmVnaXN0cmF0IG8gcHJvZHXDr3QgZWwgbWVkaSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKK21zZ3N0ciAic3VidWJpY2FjacOzIGRlIGxhIGdlb2xvY2FsaXR6YWNpw7MiCisKK21zZ2lkICIiCisiYSBsb2NhdGlvbiB3aGl0aGluIGEgY2l0eSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgb3IgY3JlYXRlZCAoZS5nLiAiCisidGhlIG5laWdoYm9yaG9vZCkiCittc2dzdHIgIiIKKyJ1bmEgdWJpY2FjacOzIGRpbnMgZGUgbGEgY2l1dGF0IG9uIHMnaGEgZW5yZWdpc3RyYXQgbyBwcm9kdcOvdCBlbCBtZWRpIChwLiBleC4gIgorImVsIGJhcnJpKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgorbXNnc3RyICJlcnJvciBob3JpdHpvbnRhbCBkZSBsYSBnZW9sb2NhbGl0emFjacOzIgorCittc2dpZCAiZXhwZWN0ZWQgZXJyb3Igb2YgdGhlIGhvcml6b250YWwgcG9zaXRpb25pbmcgbWVhc3VyZXMgKGluIG1ldGVycykiCittc2dzdHIgImVycm9yIGVzcGVyYXQgZGUgbGVzIG1lc3VyZXMgZGUgcG9zaWNpb25hbWVudCBob3JpdHpvbmF0IChlbiBtZXRyZXMpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgorbXNnc3RyICJ2ZWxvY2l0YXQgZGVsIG1vdmltZW50IGRlIGxhIGdlb2xvY2FsaXR6YWNpw7MiCisKK21zZ2lkICIiCisibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBpbiBtL3MiCittc2dzdHIgIiIKKyJ2ZWxvY2l0YXQgZGVsIG1vdmltZW50IGRlbCBkaXNwb3NpdGl1IGRlIGNhcHR1cmEgbWVudHJlIGVzIHByZW5pYSBsYSBjYXB0dXJhICIKKyJlbiBtL3MiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgorbXNnc3RyICJkaXJlY2Npw7MgZGVsIG1vdmltZW50IGRlIGxhIGdlb2xvY2FsaXR6YWNpw7MiCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgorIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKKyJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKyJpbmRpY2EgbGEgZGlyZWNjacOzIGRlbCBtb3ZpbWVudCBkZWwgZGlzcG9zaXRpdSBxdWUgcHJlbmlhIGxhIGNhcHR1cmEgZCd1biAiCisibWVkaS4gRXMgcmVwcmVzZW50YSBlbiBncmF1cyBlbiByZXByZXNlbnRhY2nDsyBkZSBjb21hIGZsb3RhbnQsIDAgdm9sIGRpciBlbCAiCisibm9yZCBnZW9ncsOgZmljLCBpIGF1Z21lbnRhIGVuIHNlbnRpdCBkZSBsZXMgYWd1bGxlcyBkZWwgcmVsbG90Z2UiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCittc2dzdHIgImRpcmVjY2nDsyBkZSBsYSBjYXB0dXJhIGRlIGxhIGdlb2xvY2FsaXR6YWNpw7MiCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGRldmljZSBpcyBwb2ludGluZyB0byB3aGVuIGNhcHR1cmluZyAgYSBtZWRpYS4gIgorIkl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIHJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSAiCisiZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKyJpbmRpY2EgbGEgZGlyZWNjacOzIG9uIGFwdW50YSBlbCBkaXNwb3NpdGl1IG1lbnRyZSBjYXB0dXJhIHVuIG1lZGkuIEVzICIKKyJyZXByZXNlbnRhIGVuIGdyYXVzIGVuIHJlcHJlc2VudGFjacOzIGRlIGNvbWEgZmxvdGFudCwgMCB2b2wgZGlyIGVsIG5vcmQgIgorImdlb2dyw6BmaWMsIGkgYXVnbWVudGEgZW4gc2VudGl0IGRlIGxlcyBhZ3VsbGVzIGRlbCByZWxsb3RnZSIKKworIy4gVFJBTlNMQVRPUlM6ICdzaG93IG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lJyBoZXJlCittc2dpZCAic2hvdyBuYW1lIgorbXNnc3RyICJub20gZGVsIHByb2dyYW1hIgorCittc2dpZCAiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSIKK21zZ3N0ciAiTm9tIGRlbCBwcm9ncmFtYSBkZSBUVi9wb2RjYXN0L3PDqHJpZSBhbCBxdWFsIHBlcnRhbnkgZWwgbWVkaSIKKworIy4gVFJBTlNMQVRPUlM6ICdzaG93IHNvcnRuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZSBhcyB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzJyBoZXJlCittc2dpZCAic2hvdyBzb3J0bmFtZSIKK21zZ3N0ciAibm9tIGQnb3JkZW5hY2nDsyBkZWwgcHJvZ3JhbWEiCisKK21zZ2lkICIiCisiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIiIKKyJOb20gcHJvZ3JhbWEgZGUgVFYvcG9kY2FzdC9zw6hyaWUgYWwgcXVhbCBwZXJ0YW55IGVsIG1lZGksIHBlciBhIGwnb3JkZW5hY2nDsyIKKworbXNnaWQgImVwaXNvZGUgbnVtYmVyIgorbXNnc3RyICJuw7ptZXJvIGQnZXBpc29kaSIKKworbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICJFbCBuw7ptZXJvIGQnZXBpc29kaSBkZSBsYSB0ZW1wb3JhZGEgYWwgcXVhbCBwZXJ0YW55IGVsIG1lZGkiCisKK21zZ2lkICJzZWFzb24gbnVtYmVyIgorbXNnc3RyICJuw7ptZXJvIGRlIHRlbXBvcmFkYSIKKworbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICJFbCBuw7ptZXJvIGRlIHRlbXBvcmFkYSBkZWwgcHJvZ3JhbWEgYWwgcXVhbCBwZXJ0YW55IGVsIG1lZGkiCisKK21zZ2lkICJseXJpY3MiCittc2dzdHIgImxsZXRyZXMiCisKK21zZ2lkICJUaGUgbHlyaWNzIG9mIHRoZSBtZWRpYSwgY29tbW9ubHkgdXNlZCBmb3Igc29uZ3MiCittc2dzdHIgIkxlcyBsbGV0cmVzIGRlbCBtZWRpLCBoYWJpdHVhbG1lbnQgZW1wcmF0IHBlciBhIGNhbsOnb25zIgorCittc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCittc2dzdHIgIm5vbSBkJ29yZGVuYWNpw7MgZGVsIGNvbXBvc2l0b3IiCisKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJwZXJzb25lcyBxdWUgY29tcG9zYXJlbiBsYSBncmF2YWNpw7MsIHBlciBhIGwnb3JkZW5hY2nDsyIKKworbXNnaWQgImdyb3VwaW5nIgorbXNnc3RyICJhZ3J1cGFjacOzIgorCittc2dpZCAiIgorIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKKyJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgorbXNnc3RyICIiCisibWVkaXMgYWdydXBhdHMgcXVlIGVzIGNvbXBvc2VuIGRlIGRpdmVyc2VzIHBpc3RlcywgY29tIGxlcyBkaWZlcmVudHMgcGVjZXMgIgorImQndW4gY29uY2VydC4gw4lzIGRlIG5pdmVsbCBtw6lzIGFsdCBxdWUgdW5hIHBpc3RhLCBwZXLDsiBtw6lzIGJhaXggcXVlIHVuIMOgbGJ1bSIKKworbXNnaWQgInVzZXIgcmF0aW5nIgorbXNnc3RyICJ2YWxvcmFjacOzIGRlIGwndXN1YXJpIgorCittc2dpZCAiIgorIlJhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgdXNlci4gVGhlIGhpZ2hlciB0aGUgcmFuaywgdGhlIG1vcmUgdGhlIHVzZXIgbGlrZXMgIgorInRoaXMgbWVkaWEiCittc2dzdHIgIiIKKyJWYWxvcmFjacOzIGF0cmlidcOvZGEgcGVyIHVuIHVzdWFyaS4gQ29tIG3DqXMgYWx0YSDDqXMsIG3DqXMgbGkgYWdyYWRhIGVsIG1lZGkgYSAiCisibCd1c3VhcmkiCisKK21zZ2lkICJkZXZpY2UgbWFudWZhY3R1cmVyIgorbXNnc3RyICJmYWJyaWNhbnQgZGVsIGRpc3Bvc2l0aXUiCisKK21zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICJGYWJyaWNhbnQgZGVsIGRpc3Bvc2l0aXUgZW1wcmF0IHBlciBhIGNyZWFyIGFxdWVzdCBtZWRpIgorCittc2dpZCAiZGV2aWNlIG1vZGVsIgorbXNnc3RyICJtb2RlbCBkZWwgZGlzcG9zaXRpdSIKKworbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKK21zZ3N0ciAiTW9kZWwgZGVsIGRpc3Bvc2l0aXUgZW1wcmF0IHBlciBhIGNyZWFyIGFxdWVzdCBtZWRpIgorCittc2dpZCAiYXBwbGljYXRpb24gbmFtZSIKK21zZ3N0ciAibm9tIGRlIGwnYXBsaWNhY2nDsyIKKworbXNnaWQgIkFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSIKK21zZ3N0ciAiQXBsaWNhY2nDsyBlbXByYWRhIHBlciBhIGNyZWFyIGVsIG1lZGkiCisKK21zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgorbXNnc3RyICJkYWRlcyBkZSBsJ2FwbGljYWNpw7MiCisKK21zZ2lkICJBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIG1lZGlhIgorbXNnc3RyICJEYWRlcyBhcmJpdHLDoHJpZXMgZGUgbCdhcGxpY2FjacOzIGEgc2VyaWFsaXR6YXIgYWwgbWVkaSIKKworbXNnaWQgImltYWdlIG9yaWVudGF0aW9uIgorbXNnc3RyICJvcmllbnRhY2nDsyBkZSBsYSBpbWF0Z2UiCisKK21zZ2lkICJIb3cgdGhlIGltYWdlIHNob3VsZCBiZSByb3RhdGVkIG9yIGZsaXBwZWQgYmVmb3JlIGRpc3BsYXkiCittc2dzdHIgIkNvbSBzJ2hhdXJpYSBkZSByb3RhciBvIGdpcmFyIGxhIGltYXRnZSBhYmFucyBkZSBtb3N0cmFyLWxhIgorCittc2dpZCAiLCAiCittc2dzdHIgIiwgIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCittc2dzdHIgIkVSUk9SOiBkZXMgZGUgbCdlbGVtZW50ICVzOiAlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorIkluZm9ybWFjacOzIGRlIGRlcHVyYWNpw7MgYWRkaWNpb25hbDpcbiIKKyIlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgInNwZWNpZmllZCBlbXB0eSBiaW4gXCIlc1wiLCBub3QgYWxsb3dlZCIKK21zZ3N0ciAiZWwgYmluYXJpIGVzcGVjaWZpY2F0IMKrJXPCuyDDqXMgYnVpdCwgbm8gZXMgcGVybWV0IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHNraXBwaW5nIgorbXNnc3RyICJlbCBiaW5hcmkgwqslc8K7IG5vIGV4aXN0ZWl4LCBlcyBkZXNjYXJ0YSIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCittc2dzdHIgIm5vIGhpIGhhIGNhcCBwcm9waWV0YXQgwqslc8K7IGVuIGwnZWxlbWVudCDCqyVzwrsiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzdGFibGlyIGxhIHByb3BpZXRhdCDCqyVzwrsgZW4gbCdlbGVtZW50IMKrJXPCuyBhIMKrJXPCuyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbGluayAlcyB0byAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlbmxsYcOnYXIgJXMgYSAlcyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKK21zZ3N0ciAibm8gaGkgaGEgY2FwIGVsZW1lbnQgwqslc8K7IgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKK21zZ3N0ciAibm8gcydoYW4gcG9ndXQgYW5hbGl0emFyIGxlcyBjYXBhY2l0YXRzIMKrJXPCuyIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIKK21zZ3N0ciAibCdlbmxsYcOnIG5vIHTDqSB1biBlbGVtZW50IGZvbnQiCisKK21zZ2lkICJsaW5rIHdpdGhvdXQgc2luayBlbGVtZW50IgorbXNnc3RyICJsJ2VubGxhw6cgbm8gdMOpIHVuIGVsZW1lbnQgc29ydGlkYSIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAibm8gaGkgaGEgY2FwIGVsZW1lbnQgZm9udCBwZXIgYSBsJ1VSSSDCqyVzwrsiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCB0byBsaW5rIFVSSSBcIiVzXCIgdG8iCittc2dzdHIgIm5vIGhpIGhhIGNhcCBlbGVtZW50IGVsIHF1YWwgZW5sbGHDp2FyIGEgbCdVUkkgwqslc8K7IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAibm8gaGkgaGEgY2FwIGVsZW1lbnQgZGUgc29ydGlkYSBwZXIgYSBsJ1VSSSDCqyVzwrsiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxpbmsgc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGVubGxhw6dhciBsJ2VsZW1lbnQgZGUgc29ydGlkYSBwZXIgYSBsJ1VSSSDCqyVzwrsiCisKK21zZ2lkICJlbXB0eSBwaXBlbGluZSBub3QgYWxsb3dlZCIKK21zZ3N0ciAibm8gZXMgcGVybWV0IHVuIGNvbmR1Y3RlIGJ1aXQiCisKK21zZ2lkICJJbnRlcm5hbCBjbG9jayBlcnJvci4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgaW50ZXJuIGRlbCByZWxsb3RnZS4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGludGVybiBkZSBmbHV4IGRlIGRhZGVzLiIKKworbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgorbXNnc3RyICJTJ2VzdGFuIGRlc2NhcnRhbnQgbW9sdGVzIG1lbcOycmllcyBpbnRlcm3DqGRpZXMuIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IHByb2JsZW0uIgorbXNnc3RyICJIaSBoYSB1biBwcm9ibGVtYSBpbnRlcm4gZGUgZmx1eCBkZSBkYWRlcy4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgaW50ZXJuIGRlIGZsdXggZGUgZGFkZXMuIgorCittc2dpZCAiRmlsdGVyIGNhcHMiCittc2dzdHIgIkZpbHRyYSBsZXMgY2FwYWNpdGF0cyIKKworbXNnaWQgIiIKKyJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKKyJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgorbXNnc3RyICIiCisiUmVzdHJpbmdlaXggbGVzIGNhcGFjaXRhdHMgcXVlIGVzIHBvZGVuIHBlcm1ldHJlIChOVUwgdm9sIGRpciBRVUFMU0VWT0wpLiAiCisiRXN0YWJsaXIgYXF1ZXN0YSBwcm9waWV0YXQgcHJlbiB1bmEgcmVmZXLDqG5jaWEgYSBsJ29iamVjdGUgR3N0Q2FwcyBwcm92ZcOvdC4iCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiTm8gcydoYSBlc3BlY2lmaWNhdCBjYXAgbm9tIGRlIGZpdHhlciBwZXIgYSBsJ2VzY3JpcHR1cmEuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBvYnJpciDCqyVzwrsgcGVyIGEgbCdlc2NyaXB0dXJhLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiB0YW5jYXIgZWwgZml0eGVyIMKrJXPCuy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Vla2luZyBpbiBmaWxlIFwiJXNcIi4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gY2VyY2FyIGFsIGZpdHhlciDCqyVzwrsuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGVzY3JpdXJlIGFsIGZpdHhlciDCqyVzwrsuIgorCittc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCittc2dzdHIgIk5vIHMnaGEgZXNwZWNpZmljYXQgY2FwIGZpdHhlciBwZXIgYSBsbGVnaXIuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBvYnJpciBlbCBmaXR4ZXIgwqslc8K7IHBlciBhIGxhIGxlY3R1cmEuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgaW5mbyBvbiBcIiVzXCIuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IG9idGVuaXIgaW5mb3JtYWNpw7Mgc29icmUgwqslc8K7LiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIgorbXNnc3RyICLCqyVzwrsgw6lzIHVuIGRpcmVjdG9yaS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZSBcIiVzXCIgaXMgYSBzb2NrZXQuIgorbXNnc3RyICJFbCBmaXR4ZXIgwqslc8K7IMOpcyB1biBzw7Jjb2wuIgorCittc2dpZCAiRmFpbGVkIGFmdGVyIGl0ZXJhdGlvbnMgYXMgcmVxdWVzdGVkLiIKK21zZ3N0ciAiSGEgZmFsbGF0IGRlc3Byw6lzIGRlIGxlcyBpdGVyYWNpb25zIGNvbSBzJ2hhIGRlbWFuYXQuIgorCittc2dpZCAiTm8gVGVtcCBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIKK21zZ3N0ciAiTm8gcydoYSBlc3BlY2lmaWNhdCB1biBkaXJlY3RvcmkgdGVtcG9yYWwuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcCBmaWxlIFwiJXNcIi4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgY3JlYXIgZWwgZml0eGVyIHRlbXBvcmFsIMKrJXPCuy4iCisKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIgorbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGVzY3JpdXJlIGFsIGZpdHhlciBkZSBiYWl4YWRhLiIKKworbXNnaWQgImNhcHMiCittc2dzdHIgImNhcGFjaXRhdHMiCisKK21zZ2lkICJkZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtIgorbXNnc3RyICJjYXBhY2l0YXRzIGRldGVjdGFkZXMgYWwgZmx1eCIKKworbXNnaWQgIm1pbmltdW0iCittc2dzdHIgIm3DrW5pbSIKKworbXNnaWQgIm1heGltdW0iCittc2dzdHIgIm3DoHhpbSIKKworbXNnaWQgImZvcmNlIGNhcHMiCittc2dzdHIgImZvcsOnYSBsZXMgY2FwYWNpdGF0cyIKKworbXNnaWQgImZvcmNlIGNhcHMgd2l0aG91dCBkb2luZyBhIHR5cGVmaW5kIgorbXNnc3RyICJmb3LDp2EgbGVzIGNhcGFjaXRhdHMgc2Vuc2UgZmVyIHVuIMKrdHlwZWZpbmTCuyIKKworbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKK21zZ3N0ciAiRWwgZmx1eCBubyBjb250w6kgZGFkZXMuIgorCittc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKK21zZ3N0ciAiSW50ZXJmw61jaWVzIGltcGxlbWVudGFkZXM6XG4iCisKK21zZ2lkICJyZWFkYWJsZSIKK21zZ3N0ciAibGxlZ2libGUiCisKK21zZ2lkICJ3cml0YWJsZSIKK21zZ3N0ciAiZXNjcml2aWJsZSIKKworbXNnaWQgImNvbnRyb2xsYWJsZSIKK21zZ3N0ciAiY29udHJvbGFibGUiCisKK21zZ2lkICJjaGFuZ2VhYmxlIGluIE5VTEwsIFJFQURZLCBQQVVTRUQgb3IgUExBWUlORyBzdGF0ZSIKK21zZ3N0ciAiZXMgcG90IGNhbnZpYXIgYWxzIGVzdGF0cyBOVUwsIFBSRVBBUkFULCBFTiBQQVVTQSBvIFJFUFJPRFVJTlQiCisKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCwgUkVBRFkgb3IgUEFVU0VEIHN0YXRlIgorbXNnc3RyICJlcyBwb3QgY2FudmlhciBhbHMgZXN0YXRzIE5VTCwgUFJFUEFSQVQgbyBFTiBQQVVTQSIKKworbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMIG9yIFJFQURZIHN0YXRlIgorbXNnc3RyICJlcyBwb3QgY2FudmlhciBhbHMgZXN0YXRzIE5VTCBvIFBSRVBBUkFUIgorCittc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgorbXNnc3RyICJGaXR4ZXJzIGEgbGEgbGxpc3RhIG5lZ3JhOiIKKworbXNnaWQgIlRvdGFsIGNvdW50OiAiCittc2dzdHIgIkNvbXB0ZSB0b3RhbDogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdGVkIGZpbGUiCittc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdGVkIGZpbGVzIgorbXNnc3RyWzBdICIlZCBmaXR4ZXIgYSBsYSBsbGlzdGEgbmVncmEiCittc2dzdHJbMV0gIiVkIGZpdHhlcnMgYSBsYSBsbGlzdGEgbmVncmEiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgcGx1Z2luIgorbXNnaWRfcGx1cmFsICIlZCBwbHVnaW5zIgorbXNnc3RyWzBdICIlZCBjb25uZWN0b3IiCittc2dzdHJbMV0gIiVkIGNvbm5lY3RvcnMiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgorbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKK21zZ3N0clswXSAiJWQgZW50cmFkYSBkZSBsYSBsbGlzdGEgbmVncmEiCittc2dzdHJbMV0gIiVkIGVudHJhZGVzIGRlIGxhIGxsaXN0YSBuZWdyYSIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBmZWF0dXJlIgorbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKK21zZ3N0clswXSAiJWQgZnVuY2lvbmFsaXRhdCIKK21zZ3N0clsxXSAiJWQgZnVuY2lvbmFsaXRhdHMiCisKK21zZ2lkICJQcmludCBhbGwgZWxlbWVudHMiCittc2dzdHIgIkltcHJpbWVpeCB0b3RzIGVscyBlbGVtZW50cyIKKworbXNnaWQgIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHIgIk1vc3RyYSB1bmEgbGxpc3RhIGRlIGZpdHhlcnMgYSBsYSBsbGlzdGEgbmVncmEiCisKK21zZ2lkICIiCisiUHJpbnQgYSBtYWNoaW5lLXBhcnNhYmxlIGxpc3Qgb2YgZmVhdHVyZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4gb3IgYWxsICIKKyJwbHVnaW5zIHByb3ZpZGUuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIGluIGNvbm5lY3Rpb24gd2l0aCBleHRlcm5hbCAiCisiYXV0b21hdGljIHBsdWdpbiBpbnN0YWxsYXRpb24gbWVjaGFuaXNtcyIKK21zZ3N0ciAiIgorIk1vc3RyYSB1bmEgbGxpc3RhIGFuYWxpdHphYmxlIHBlciBtw6BxdWluZXMgZGUgZnVuY2lvbmFsaXRhdHMgcXVlIHByb3ZlZWl4ZW4gIgorImVsIGNvbm5lY3RvciBvIGVzcGVjaWZpY2F0LCBvIHRvdHMgZWxzIGNvbm5lY3RvcnMuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgw5p0aWwgYW1iIGNvbm5leGlvbnMgYW1iIG1lY2FuaXNtZXMgIgorImV4dGVybnMgZCdpbnN0YcWAbGFjacOzIGRlIGNvbm5lY3RvcnMiCisKK21zZ2lkICJMaXN0IHRoZSBwbHVnaW4gY29udGVudHMiCittc2dzdHIgIk1vc3RyYSBlbCBjb250aW5ndXQgZCd1biBjb25uZWN0b3IiCisKK21zZ2lkICJQcmludCBzdXBwb3J0ZWQgVVJJIHNjaGVtZXMsIHdpdGggdGhlIGVsZW1lbnRzIHRoYXQgaW1wbGVtZW50IHRoZW0iCittc2dzdHIgIiIKKyJNb3N0cmEgZWxzIGVzcXVlbWVzIGQnVVJJIGltcGxlbWVudGF0cywgYW1iIGVscyBlbGVtZW50cyBxdWUgZWxzIGltcGxlbWVudGVuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGNhcnJlZ2FyIGVsIGZpdHhlciBkZSBjb25uZWN0b3I6ICVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iCittc2dzdHIgIkwnZWxlbWVudCBvIGNvbm5lY3RvciDCqyVzwrsgbm8gZXhpc3RlaXhcbiIKKworbXNnaWQgIkluZGV4IHN0YXRpc3RpY3MiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBlbGVtZW50IFwiJXNcIiAoJXMpOiAiCittc2dzdHIgIlMnaGEgcmVidXQgZWwgbWlzc2F0Z2UgIyV1IGRlIGwnZWxlbWVudCDCqyVzwrsgKCVzKTogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIHBhZCBcIiVzOiVzXCIgKCVzKTogIgorbXNnc3RyICJTJ2hhIHJlYnV0IGVsIG1pc3NhdGdlICMldSBkZSBsYSBjZcWAbGEgwqslczolc8K7ICglcyk6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAiUydoYSByZWJ1dCBlbCBtaXNzYXRnZSAjJXUgZGUgbCdvYmplY3RlIMKrJXPCuyAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKK21zZ3N0ciAiUydoYSByZWJ1dCBlbCBtaXNzYXRnZSAldTogKCVzKTogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKK21zZ3N0ciAiUydoYSBvYnRpbmd1dCB1biBmaW5hbCBkZWwgZmx1eCBkZSBsJ2VsZW1lbnQgwqslc8K7LlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCittc2dzdHIgIk1BUkNBRE9SIFRST0JBVDogdHJvYmF0IHBlciBsJ2VsZW1lbnQgwqslc8K7LlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgcGFkIFwiJXM6JXNcIi5cbiIKK21zZ3N0ciAiTUFSQ0FET1IgVFJPQkFUOiB0cm9iYXQgcGVyIGxhIGNlxYBsYSDCqyVzOiVzwrsuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgorbXNnc3RyICJNQVJDQURPUiBUUk9CQVQ6IHRyb2JhdCBwZXIgbCdvYmplY3RlIMKrJXPCuy5cbiIKKworbXNnaWQgIkZPVU5EIFRBR1xuIgorbXNnc3RyICJNQVJDQURPUiBUUk9CQVRcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSU5GTzpcbiIKKyIlc1xuIgorbXNnc3RyICIiCisiSU5GTzpcbiIKKyIlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAiQVbDjVM6IGRlcyBkZSBsJ2VsZW1lbnQgJXM6ICVzXG4iCisKK21zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIGJ1ZmZlcmluZyB0byBmaW5pc2guLi5cbiIKK21zZ3N0ciAiIgorIlMnaGEgcHJlcGFyYXQsIHMnZXN0w6AgZXNwZXJhbnQgYSBxdWUgcyfDsm1wbGlnYSBsYSBtZW3DsnJpYSBpbnRlcm3DqGRpYWzigKZcbiIKKworbXNnaWQgImJ1ZmZlcmluZy4uLiIKK21zZ3N0ciAicydlc3TDoCBvbXBsaW50IGxhIG1lbcOycmlhIGludGVybcOoZGlh4oCmIgorCittc2dpZCAiRG9uZSBidWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKK21zZ3N0ciAiIgorIlMnZXN0w6Agb21wbGVydCBsYSBtZW3DsnJpYSBpbnRlcm3DqGRpYSwgcydlc3RhYmxlaXggZWwgY29uZHVjdGUgUkVQUk9EVUlOVOKAplxuIgorCittc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAiIgorIlMnZXN0w6Agb21wbGludCBsYSBtZW3DsnJpYSBpbnRlcm3DqGRpYSwgcydlc3RhYmxlaXggZWwgY29uZHVjdGUgYSBFTiBQQVVTQeKAplxuIgorCisjIFMnZXN0w6AgcmVkaXN0cmlidWludD8gam0KK21zZ2lkICJSZWRpc3RyaWJ1dGUgbGF0ZW5jeS4uLlxuIgorbXNnc3RyICJSZWRpc3RyaWJ1Y2nDsyBkZSBsYSBsYXTDqG5jaWHigKZcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgorbXNnc3RyICJTJ2VzdMOgIGVzdGFibGludCBsJ2VzdGF0IGEgJXMgYSBwZXRpY2nDsyBkZSAlc+KAplxuIgorCittc2dpZCAiSW50ZXJydXB0OiBTdG9wcGluZyBwaXBlbGluZSAuLi5cbiIKK21zZ3N0ciAiSW50ZXJydXBjacOzOiBTJ2VzdMOgIGF0dXJhbnQgZWwgY29uZHVjdGXigKZcbiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBlbGVtZW50OiAlc1xuIgorbXNnc3RyICJubyBoaSBoYSBjYXAgZWxlbWVudCDCqyVzwrsiCisKK21zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCittc2dzdHIgIk1vc3RyYSBlbHMgbWFyY2Fkb3JzICh0YW1iw6kgY29uZWd1dHMgY29tIG1ldGFkYWRlcykiCisKK21zZ2lkICJPdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBwcm9wZXJ0eSBub3RpZmljYXRpb25zIgorbXNnc3RyICJNb3N0cmEgbGEgaW5mb3JtYWNpw7MgZCdlc3RhdCBpIG5vdGlmaWNhY2lvbnMgZGUgcHJvcGlldGF0cyIKKworbXNnaWQgIkRvIG5vdCBwcmludCBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24iCittc2dzdHIgIk5vIG1vc3RyZXMgaW5mb3JtYWNpw7MgZGVsIHByb2dyw6lzIgorCittc2dpZCAiT3V0cHV0IG1lc3NhZ2VzIgorbXNnc3RyICJNaXNzYXRnZXMgZGUgc29ydGlkYSIKKworbXNnaWQgIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIFRZUEUiCittc2dzdHIgIk5vIG1vc3RyZXMgaW5mb3JtYWNpw7MgZCdlc3RhdCBkZSBUSVBVUyIKKworbXNnaWQgIlRZUEUxLFRZUEUyLC4uLiIKK21zZ3N0ciAiVElQVVMxLFRJUFVTMizigKYiCisKK21zZ2lkICJEbyBub3QgaW5zdGFsbCBhIGZhdWx0IGhhbmRsZXIiCittc2dzdHIgIk5vIGluc3RhbMK3bGVzIHVuIGdlc3RvciBkZSBmYWxsYWRlcyIKKworbXNnaWQgIlByaW50IGFsbG9jIHRyYWNlIChpZiBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSkiCittc2dzdHIgIkltcHJpbWVpeCB1bmEgdHJhw6dhIGQnYWxsb2MgKHNpIHMnaGEgaGFiaWxpdGF0IGFsIGNvbXBpbGFyKSIKKworbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKK21zZ3N0ciAiRm9yw6dhIGVsIGZpbmFsIGRlbCBmbHV4IGFiYW5zIGRlIHRhbmNhciBlbCBjb25kdWN0ZSIKKworbXNnaWQgIkdhdGhlciBhbmQgcHJpbnQgaW5kZXggc3RhdGlzdGljcyIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQ6ICVzLlxuIgorbXNnc3RyICJFUlJPUjogbm8gcydoYSBwb2d1dCBjb25zdHJ1aXIgZWwgY29uZHVjdGU6ICVzLlxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKK21zZ3N0ciAiRVJST1I6IG5vIHMnaGEgcG9ndXQgY29uc3RydWlyIGVsIGNvbmR1Y3RlLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGVycm9uZW91cyBwaXBlbGluZTogJXNcbiIKK21zZ3N0ciAiQVbDjVM6IGVsIGNvbmR1Y3RlIMOpcyBlcnJvbmk6ICVzXG4iCisKK21zZ2lkICJFUlJPUjogdGhlICdwaXBlbGluZScgZWxlbWVudCB3YXNuJ3QgZm91bmQuXG4iCittc2dzdHIgIkVSUk9SOiBsJ2VsZW1lbnQgwqtjb25kdWN0ZcK7IG5vIHMnaGEgdHJvYmF0LlxuIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCittc2dzdHIgIlMnZXN0w6AgZXN0YWJsaW50IGVsIGNvbmR1Y3RlIGEgRU4gUEFVU0HigKZcbiIKKworbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCittc2dzdHIgIkVSUk9SOiBlbCBjb25kdWN0ZSBubyBlcyB2b2wgcG9zYXIgZW4gcGF1c2EuXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCittc2dzdHIgIkVsIGNvbmR1Y3RlIMOpcyBlbiBkaXJlY3RlIGkgbm8gbmVjZXNzaXRhIFBSRVBBUkFDScOT4oCmXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMSU5HIC4uLlxuIgorbXNnc3RyICJFbCBjb25kdWN0ZSBzJ2VzdMOgIFBSRVBBUkFOVOKAplxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgorbXNnc3RyICJFUlJPUjogZWwgY29uZHVjdGUgbm8gdm9sIHByZXBhcmFyLXNlLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgorbXNnc3RyICJFbCBjb25kdWN0ZSBzJ2hhIFBSRVBBUkFU4oCmXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIlMnZXN0w6AgZXN0YWJsaW50IGVsIGNvbmR1Y3RlIGEgUkVQUk9EVUlOVOKAplxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIgorbXNnc3RyICJFUlJPUjogZWwgY29uZHVjdGUgbm8gdm9sIHJlcHJvZHVpci1zZS5cbiIKKworbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIEZvcmNpbmcgRU9TIG9uIHRoZSBwaXBlbGluZVxuIgorbXNnc3RyICIiCisiUydoYSBoYWJpbGl0YXQgZWwgZmluYWwgZGVsIGZsdXggZW4gdGFuY2FyIC0tIFMnZXN0w6AgZm9yw6dhbnQgdW4gZmluYWwgZGVsICIKKyJmbHV4IGFsIGNvbmR1Y3RlXG4iCisKK21zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKK21zZ3N0ciAiUydlc3TDoCBlc3BlcmFudCBhbCBmaW5hbCBkZWwgZmx1eOKAplxuIgorCittc2dpZCAiRU9TIHJlY2VpdmVkIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKK21zZ3N0ciAiUydoYSByZWJ1dCB1biBmaW5hbCBkZWwgZmx1eCAtIHMnZXN0w6AgYXR1cmFudCBlbCBjb25kdWN0ZeKAplxuIgorCittc2dpZCAiQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgd2FpdGluZyBmb3IgRU9TXG4iCittc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZXNwZXJhciBhbCBmaW5hbCBkZWwgZmx1eFxuIgorCittc2dpZCAiRXhlY3V0aW9uIGVuZGVkIGFmdGVyICUiCittc2dzdHIgIkwnZXhlY3VjacOzIGhhIGZpbmFsaXR6YXQgZGVzcHLDqXMgZGUgJSIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUkVBRFkgLi4uXG4iCittc2dzdHIgIlMnZXN0w6AgZXN0YWJsaW50IGVsIGNvbmR1Y3RlIGEgUFJFUEFSQVTigKZcbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCAuLi5cbiIKK21zZ3N0ciAiUydlc3TDoCBlc3RhYmxpbnQgZWwgY29uZHVjdGUgYSBOVUzigKZcbiIKKworbXNnaWQgIkZyZWVpbmcgcGlwZWxpbmUgLi4uXG4iCittc2dzdHIgIlMnZXN0w6AgYWxsaWJlcmFudCBlbCBjb25kdWN0ZeKAplxuIgorCisjfiBtc2dpZCAiVXNhZ2U6IGdzdC14bWxsYXVuY2ggPGZpbGUueG1sPiBbIGVsZW1lbnQucHJvcGVydHk9dmFsdWUgLi4uIF1cbiIKKyN+IG1zZ3N0ciAiIgorI34gIkZvcm1hIGQnw7pzOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BpZXRhdD12YWxvciDigKYgXVxuIgorCisjfiBtc2dpZCAiRVJST1I6IHBhcnNlIG9mIHhtbCBmaWxlICclcycgZmFpbGVkLlxuIgorI34gbXNnc3RyICJFUlJPUjogbCdhbsOgbGlzaSBkZWwgZml0eGVyIHhtbCDCqyVzwrsgaGEgZmFsbGF0LlxuIgorCisjfiBtc2dpZCAiRVJST1I6IG5vIHRvcGxldmVsIHBpcGVsaW5lIGVsZW1lbnQgaW4gZmlsZSAnJXMnLlxuIgorI34gbXNnc3RyICIiCisjfiAiRVJST1I6IG5vIGhpIGhhIGNhcCBjb25kdWN0ZSBkZSBuaXZlbGwgc3VwZXJpb3IgZW4gZWwgZml0eGVyIMKrJXPCuy5cbiIKKworI34gbXNnaWQgIldBUk5JTkc6IG9ubHkgb25lIHRvcGxldmVsIGVsZW1lbnQgaXMgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS5cbiIKKyN+IG1zZ3N0ciAiQVbDjVM6IG5vbcOpcyBlcyBnZXN0aW9uYSB1biBlbGVtZW50IGRlIHByaW1lciBuaXZlbGwgYXJhIG1hdGVpeC5cbiIKKworI34gbXNnaWQgIkVSUk9SOiBjb3VsZCBub3QgcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50ICVkOiAlcy5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIkVSUk9SOiBubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsJ2FyZ3VtZW50IGRlIGxhIGzDrW5pYSBkJ29yZHJlcyAlZDogJXMuXG4iCisKKyN+IG1zZ2lkICJXQVJOSU5HOiBlbGVtZW50IG5hbWVkICclcycgbm90IGZvdW5kLlxuIgorI34gbXNnc3RyICJBVsONUzogbm8gcydoYSB0cm9iYXQgbCdlbGVtZW50IGFub21lbmF0IMKrJXPCuy5cbiIKKworI34gbXNnaWQgIlNhdmUgeG1sIHJlcHJlc2VudGF0aW9uIG9mIHBpcGVsaW5lIHRvIEZJTEUgYW5kIGV4aXQiCisjfiBtc2dzdHIgIkRlc2EgbGEgcmVwcmVzZW50YWNpw7MgeG1sIGRlbCBjb25kdWN0ZSBhIEZJVFhFUiBpIHN1cnQiCisKKyN+IG1zZ2lkICJGSUxFIgorI34gbXNnc3RyICJGSVRYRVIiCisKKyN+IG1zZ2lkICJEbyBub3QgaW5zdGFsbCBzaWduYWwgaGFuZGxlcnMgZm9yIFNJR1VTUjEgYW5kIFNJR1VTUjIiCisjfiBtc2dzdHIgIk5vIGluc3RhxYBsZXMgZ2VzdG9ycyBkZSBzZW55YWxzIHBlciBhIFNJR1VTUjEgaSBTSUdVU1IyIgorCisjfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkLiIKKyN+IG1zZ3N0ciAiIgorI34gIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgaW50ZXJuIGRlIEdTdHJlYW1lcjogaGEgZmFsbGF0IGVsIGNhbnZpIGQnZXN0YXQuIgorCisjfiBtc2dpZCAib3JpZ2luYWwgbG9jYXRpb24gb2YgZmlsZSBhcyBhIFVSSSIKKyN+IG1zZ3N0ciAidWJpY2FjacOzIG9yaWdpbmFsIGRlbCBmaXR4ZXIgY29tIHVuYSBVUkkiCisKKyN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZzogJXMuIgorI34gbXNnc3RyICJObyBzJ2hhIHBvZ3V0IG9icmlyIGVsIGZpdHhlciDCqyVzwrsgcGVyIGEgbGEgbGVjdHVyYTogJXMuIgorCisjfiBtc2dpZCAiRWxlbWVudCBcIiVzXCIgaGFzIGdvbmUgZnJvbSBQTEFZSU5HIHRvIFBBVVNFRCwgcXVpdHRpbmcuXG4iCisjfiBtc2dzdHIgIkwnZWxlbWVudCDCqyVzwrsgaGEgY2FudmlhdCBkZSBSRVBST0RVSU5UIGEgUEFVU0FULCBzJ2VzdMOgIHNvcnRpbnQuXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogUGlwZWxpbmUgY2FuJ3QgUFJFUk9MTCAuLi5cbiIKKyN+IG1zZ3N0ciAiRVJST1I6IGVsIGNvbmR1Y3RlIG5vIHBvdCBQUkVQQVJBUi1TRS5cbiIKKworI34gbXNnaWQgIiBucy5cbiIKKyN+IG1zZ3N0ciAiIG5zLlxuIgorCisjfiBtc2dpZCAiRlJFRUlORyBwaXBlbGluZSAuLi5cbiIKKyN+IG1zZ3N0ciAiUydFU1TDgCBBTExJQkVSQU5UIGVsIGNvbmR1Y3Rl4oCmXG4iCisKKyN+IG1zZ2lkICJOT19QUkVST0xMIHBpcGVsaW5lIC4uLlxuIgorI34gbXNnc3RyICJDb25kdWN0ZSBTRU5TRSBQUkVQQVJBQ0nDk+KAplxuIgorCisjfiBtc2dpZCAiUFJFUk9MTCBwaXBlbGluZSAuLi5cbiIKKyN+IG1zZ3N0ciAiQ29uZHVjdGUgZW4gUFJFUEFSQUNJw5PigKZcbiIKKworIyBBcmdoLCBQUkVST0xMRUQgdnMgUkVBRFkuIGptCisjfiBtc2dpZCAiUFJFUk9MTEVEIHBpcGVsaW5lIC4uLlxuIgorI34gbXNnc3RyICJDb25kdWN0ZSBQUkVQQVJBVOKAplxuIgorCisjfiBtc2dpZCAiUlVOTklORyBwaXBlbGluZSAuLi5cbiIKKyN+IG1zZ3N0ciAiQ29uZHVjdGUgRU4gRVhFQ1VDScOT4oCmXG4iCisKKyN+IG1zZ2lkICJSRUFEWSBwaXBlbGluZSAuLi5cbiIKKyN+IG1zZ3N0ciAiQ29uZHVjdGUgUFJFUEFSQVTigKZcbiIKKworI34gbXNnaWQgIk5VTEwgcGlwZWxpbmUgLi4uXG4iCisjfiBtc2dzdHIgIkNvbmR1Y3RlIE5VTOKAplxuIgorCisjfiBtc2dpZCAiIgorI34gIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyAiCisjfiAiZXJyb3IuICBQbGVhc2UgZmlsZSBhIGJ1Zy4iCisjfiBtc2dzdHIgIiIKKyN+ICJFbHMgZGVzZW52b2x1cGFkb3JzIGRlIEdTdHJlYW1lcnMgaGFuIHNpZ3V0IHRhbiBnYW5kdWxzIHF1ZSBubyBoYW4gIgorI34gImFzc2lnbmF0IHVuIGNvZGkgZCdlcnJvciBwZXIgYSBhcXVlc3QgZXJyb3IuIFNpIHVzIHBsYXUsIGVudmlldSB1biAiCisjfiAiaW5mb3JtZSBkJ2Vycm9yLiIKKworI34gbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY29kZSBub3QgaW1wbGVtZW50ZWQuICBGaWxlIGEgYnVnLiIKKyN+IG1zZ3N0ciAiIgorI34gIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgaW50ZXJuIGRlIEdTdHJlYW1lcjogY29kaSBubyBpbXBsZW1lbnRhdC4gRW52aWV1IHVuICIKKyN+ICJpbmZvcm1lIGQnZXJyb3IuIgorCisjfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkLiAgRmlsZSBhIGJ1Zy4iCisjfiBtc2dzdHIgIiIKKyN+ICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGludGVybiBkZSBHU3RyZWFtZXI6IGhhIGZhbGxhdCBlbCBjYW52aSBkJ2VzdGF0LiAiCisjfiAiRW52aWV1IHVuIGluZm9ybWUgZCdlcnJvci4iCisKKyN+IG1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiAgRmlsZSBhIGJ1Zy4iCisjfiBtc2dzdHIgIiIKKyN+ICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGludGVybiBkZSBHU3RyZWFtZXI6IHByb2JsZW1hIGRlIGZpbHMuIEVudmlldSB1biAiCisjfiAiaW5mb3JtZSBkJ2Vycm9yLiIKKworI34gbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4gIEZpbGUgYSBidWcuIgorI34gbXNnc3RyICIiCisjfiAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBpbnRlcm4gZGUgR1N0cmVhbWVyOiBwcm9ibGVtYSBkZSBuZWdvY2lhY2nDsy4gRW52aWV1ICIKKyN+ICJ1biBpbmZvcm1lIGQnZXJyb3IuIgorCisjfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBldmVudCBwcm9ibGVtLiAgRmlsZSBhIGJ1Zy4iCisjfiBtc2dzdHIgIiIKKyN+ICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGludGVybiBkZSBHU3RyZWFtZXI6IHByb2JsZW1hIGQnZXNkZXZlbmltZW50LiAiCisjfiAiRW52aWV1IHVuIGluZm9ybWUgZCdlcnJvci4iCisKKyN+IG1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4gIEZpbGUgYSBidWcuIgorI34gbXNnc3RyICIiCisjfiAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBpbnRlcm4gZGUgR1N0cmVhbWVyOiBwcm9ibGVtYSBkZSBjZXJjYS4gRW52aWV1IHVuICIKKyN+ICJpbmZvcm1lIGQnZXJyb3IuIgorCisjfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBhYmlsaXRpZXMgcHJvYmxlbS4gIEZpbGUgYSBidWcuIgorI34gbXNnc3RyICIiCisjfiAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBpbnRlcm4gZGUgR1N0cmVhbWVyOiBwcm9ibGVtYSBkZSBjYXBhY2l0YXRzLiBFbnZpZXUgIgorI34gInVuIGluZm9ybWUgZCdlcnJvci4iCisKKyN+IG1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiAgRmlsZSBhIGJ1Zy4iCisjfiBtc2dzdHIgIiIKKyN+ICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGludGVybiBkZSBHU3RyZWFtZXI6IHByb2JsZW1hIGQnZXRpcXVldGEuIEVudmlldSB1biAiCisjfiAiaW5mb3JtZSBkJ2Vycm9yLiIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBzZXQgc2V0dGluZ3MuIgorI34gbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGVzdGFibGlyIGVscyBwYXLDoG1ldHJlcy4iCisKKyN+IG1zZ2lkICJGYWlsZWQgdG8gZW5jb2RlIGltYWdlLiIKKyN+IG1zZ3N0ciAiTm8gcydoYSBwb2d1dCBjb2RpZmljYXIgbGEgaW1hdGdlLiIKKworI34gbXNnaWQgImRhdGUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGluIEp1bGlhbiBjYWxlbmRhciBkYXlzKSIKKyN+IG1zZ3N0ciAiIgorI34gImRhdGEgZW4gbGEgcXVhbCBlcyB2YW4gY3JlYXIgbGVzIGRhZGVzIChlbiBkaWVzIGRlbCBjYWxlbmRhcmkgSnVsacOgKSIKKworI34gbXNnaWQgInN0cmVhbSB0eXBlIgorI34gbXNnc3RyICJ0aXB1cyBkZSBmbHV4IgorCisjfiBtc2dpZCAiZGV0ZWN0ZWQgdHlwZSBvZiBzdHJlYW0iCisjfiBtc2dzdHIgInMnaGEgZGV0ZWN0YXQgZWwgdGlwdXMgZGUgZmx1eCIKKworI34gbXNnaWQgIkFkZGVkIHBsdWdpbiAlcyB3aXRoICVkIGZlYXR1cmUuXG4iCisjfiBtc2dpZF9wbHVyYWwgIkFkZGVkIHBsdWdpbiAlcyB3aXRoICVkIGZlYXR1cmVzLlxuIgorI34gbXNnc3RyWzBdICJTJ2hhIGFmZWdpdCBlbCBjb25uZWN0b3IgJXMgYW1iICVkIGZ1bmNpb25hbGl0YXQuXG4iCisjfiBtc2dzdHJbMV0gIlMnaGEgYWZlZ2l0IGVsIGNvbm5lY3RvciAlcyBhbWIgJWQgZnVuY2lvbmFsaXRhdHMuXG4iCisKKyN+IG1zZ2lkICJMb2FkZWQgJWQgcGx1Z2lucyB3aXRoICVkIGZlYXR1cmUuXG4iCisjfiBtc2dpZF9wbHVyYWwgIkxvYWRlZCAlZCBwbHVnaW5zIHdpdGggJWQgZmVhdHVyZXMuXG4iCisjfiBtc2dzdHJbMF0gIlMnaGFuIGNhcnJlZ2F0ICVkIGNvbm5lY3RvcnMgYW1iICVkIGZ1bmNpb25hbGl0YXQuXG4iCisjfiBtc2dzdHJbMV0gIlMnaGFuIGNhcnJlZ2F0ICVkIGNvbm5lY3RvcnMgYW1iICVkIGZ1bmNpb25hbGl0YXRzLlxuIgorCisjfiBtc2dpZCAicHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdCIKKyN+IG1zZ3N0ciAiaW1wcmltZWl4IGxhIGluZm9ybWFjacOzIHNvYnJlIGxhIHZlcnNpw7MgaSBzdXJ0IgorCisjfiBtc2dpZCAiRGlzYWJsZSBhY2NlbGVyYXRlZCBDUFUgaW5zdHJ1Y3Rpb25zIgorI34gbXNnc3RyICJJbmhhYmlsaXRhIGxlcyBpbnRydWNjaW9ucyBkJ1VDUCBhY2NlbGVyYWRlcyIKKworI34gbXNnaWQgIlNDSEVEVUxFUiIKKyN+IG1zZ3N0ciAiUExBTklGSUNBRE9SIgorCisjfiBtc2dpZCAiUmVnaXN0cnkgdG8gdXNlIgorI34gbXNnc3RyICJSZWdpc3RyZSBhIHV0aWxpdHphciIKKworI34gbXNnaWQgIlJFR0lTVFJZIgorI34gbXNnc3RyICJSRUdJU1RSRSIKKworI34gbXNnaWQgInBhdGggbGlzdCBmb3IgbG9hZGluZyBwbHVnaW5zIChzZXBhcmF0ZWQgYnkgJyVzJykiCisjfiBtc2dzdHIgImxsaXN0YSBkZSBjYW1pbnMgcGVyIGEgY2FycmVnYXIgY29ubmVjdG9ycyAoc2VwYXJhdHMgcGVyIMKrJXPCuykiCisKKyN+IG1zZ2lkICJTY2hlZHVsZXIgdG8gdXNlIChkZWZhdWx0IGlzICclcycpIgorI34gbXNnc3RyICJQbGFuaWZpY2Fkb3IgYSB1dGlsaXR6YXIgKHBlciBkZWZlY3RlIMOpcyDCqyVzwrspIgorCisjfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzY2hlZHVsZXIgcHJvYmxlbS4gIEZpbGUgYSBidWcuIgorI34gbXNnc3RyICIiCisjfiAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBpbnRlcm4gZGUgR1N0cmVhbWVyOiBwcm9ibGVtYSBkZWwgcGxhbmlmaWNhZG9yLiAiCisjfiAiRW52aWV1IHVuIGluZm9ybWUgZCdlcnJvci4iCisKKyN+IG1zZ2lkICJUaGVyZSBpcyBubyBlbGVtZW50IHByZXNlbnQgdG8gaGFuZGxlIHRoZSBzdHJlYW0ncyBtaW1lIHR5cGUgJXMuIgorI34gbXNnc3RyICIiCisjfiAiTm8gaGkgaGEgY2FwIGVsZW1lbnQgcHJlc2VudCBwZXIgYSBnZXN0aW9uYXIgZWwgdGlwdXMgbWltZSAlcyBkZWwgZmx1eC4iCisKKyN+IG1zZ2lkICIiCisjfiAiRXhlY3V0aW9uIGVuZGVkIGFmdGVyICVzIGl0ZXJhdGlvbnMgKHN1bSAlcyBucywgYXZlcmFnZSAlcyBucywgbWluICVzIG5zLCAiCisjfiAibWF4ICVzIG5zKS5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIkwnZXhlY3VjacOzIGhhIGZpbmFsaXR6YXQgZGVzcHLDqXMgZGUgJXMgaXRlcmFjaW9ucyAoc3VtYSAlcyBucywgbWl0amEgJXMgIgorI34gIm5zLCBtw61uICVzLCBtw6B4ICVzKS5cbiIKKworI34gbXNnaWQgIk51bWJlciBvZiB0aW1lcyB0byBpdGVyYXRlIHBpcGVsaW5lIgorI34gbXNnc3RyICJOb21icmUgZGUgdmVnYWRlcyBhIGl0ZXJhciBlbCBjb25kdWN0ZSIKKworI34gbXNnaWQgIiAgICAgICAgIFRyeWluZyB0byBydW4gYW55d2F5LlxuIgorI34gbXNnc3RyICIgICAgICAgICBTJ2VzdMOgIGludGVudGFudCBleGVjdXRhciB0b3QgaSBhaXjDrS5cbiIKKworI34gbXNnaWQgIkFkZGVkIHBsdWdpbiAlcyB3aXRoICVkICVzLlxuIgorI34gbXNnc3RyICJTJ2hhIGFmZWdpdCBlbCBjb25uZWN0b3IgJXMgYW1iICVkICVzLlxuIgorCisjfiBtc2dpZCAiQWRkZWQgcGF0aCAgICVzIHRvICVzIFxuIgorI34gbXNnc3RyICJTJ2hhIGFmZWdpdCBlbCBjYW3DrSAlcyBhICVzXG4iCisKKyN+IG1zZ2lkICJSZWJ1aWxkaW5nICVzICglcykgLi4uXG4iCisjfiBtc2dzdHIgIlMnZXN0w6AgcmVjb25zdHJ1aW50ICVzICglcynigKZcbiIKKworI34gbXNnaWQgIlRyeWluZyB0byBsb2FkICVzIC4uLlxuIgorI34gbXNnc3RyICJTJ2VzdMOgIGludGVudGFudCBjYXJyZWdhciAlc+KAplxuIgorCisjfiBtc2dpZCAiRXJyb3IgbG9hZGluZyAlc1xuIgorI34gbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGNhcnJlZ2FyICVzXG4iCisKKyN+IG1zZ2lkICJMb2FkZWQgJWQgcGx1Z2lucyB3aXRoICVkICVzLlxuIgorI34gbXNnc3RyICJTJ2hhbiBjYXJyZWdhdCAlZCBjb25uZWN0b3JzIGFtYiAlZCAlcy5cbiIKKworI34gbXNnaWQgIiBpdGVyYXRpb25zIChzdW0gJSIKKyN+IG1zZ3N0ciAiaXRlcmFjaW9ucyAoc3VtYSAlIgorCisjfiBtc2dpZCAiIG5zLCBhdmVyYWdlICUiCisjfiBtc2dzdHIgIiBucywgbWl0amEgJSIKKworI34gbXNnaWQgIiBucywgbWluICUiCisjfiBtc2dzdHIgIiBucywgbcOtbmltICUiCisKKyN+IG1zZ2lkICIgbnMsIG1heCAlIgorI34gbXNnc3RyICIgbnMsIG3DoHhpbSAlIgorCisjfiBtc2dpZCAiIG5zKS5cbiIKKyN+IG1zZ3N0ciAiIG5zKS5cbiIKZGlmZiAtLWdpdCBhL3BvL2NzLmdtbyBiL3BvL2NzLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmJiYmU4Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vY3MuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2NzLnBvIGIvcG8vY3MucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM5NTZhNgotLS0gL2Rldi9udWxsCisrKyBiL3BvL2NzLnBvCkBAIC0wLDAgKzEsMTMyNSBAQAorIyBDemVjaCB0cmFuc2xhdGlvbiBvZiBnc3RyZWFtZXIuCisjIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCBnc3RyZWFtZXIncyBDT1BZUklHSFQgSE9MREVSCisjIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCBNaWxvc2xhdiBUcm1hYyA8bWl0ckB2b2xueS5jej4KKyMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyMgTWlsb3NsYXYgVHJtYWMgPG1pdHJAdm9sbnkuY3o+LCAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDAuMTAuMjAuM1xuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTA5LTI5IDE0OjU1KzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA4LTEwLTEyIDEyOjEyKzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IE1pbG9zbGF2IFRybWFjIDxtaXRyQHZvbG55LmN6PlxuIgorIkxhbmd1YWdlLVRlYW06IEN6ZWNoIDx0cmFuc2xhdGlvbi10ZWFtLWNzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJMYW5ndWFnZTogY3NcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTM7IHBsdXJhbD0obiUxMD09MSAmJiBuJTEwMCE9MTEgPyAwIDogbiUxMD49MiAmJiBuIgorIiUxMDw9NCAmJiAobiUxMDA8MTAgfHwgbiUxMDA+PTIwKSA/IDEgOiAyKTtcbiIKKworbXNnaWQgIlByaW50IHRoZSBHU3RyZWFtZXIgdmVyc2lvbiIKK21zZ3N0ciAiVnlwc2F0IHZlcnppIEdTdHJlYW1lciIKKworbXNnaWQgIk1ha2UgYWxsIHdhcm5pbmdzIGZhdGFsIgorbXNnc3RyICJDaMOhcGF0IHbFoWVjaG5hIHZhcm92w6Fuw60gamFrbyBmYXTDoWxuw60iCisKK21zZ2lkICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKK21zZ3N0ciAiVnlwc2F0IGRvc3R1cG7DqSBrYXRlZ29yaWUgbGFkxJtuw60gYSBza29uxI1pdCIKKworbXNnaWQgIiIKKyJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gNSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKK21zZ3N0ciAiIgorIkltcGxpY2l0bsOtIMO6cm92ZcWIIGxhZMSbbsOtIG9kIDEgKGplbiBjaHlieSkgZG8gNSAodsWhZSkgbmVibyAwIHBybyDFvsOhZG7DvSB2w71zdHVwIgorCittc2dpZCAiTEVWRUwiCittc2dzdHIgIsOaUk9WRcWHIgorCittc2dpZCAiIgorIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5X25hbWU6bGV2ZWwgcGFpcnMgdG8gc2V0IHNwZWNpZmljIGxldmVscyBmb3IgIgorInRoZSBpbmRpdmlkdWFsIGNhdGVnb3JpZXMuIEV4YW1wbGU6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKK21zZ3N0ciAiIgorIsSMw6Fya2FtaSBvZGTEm2xlbsO9IHNlem5hbSBkdm9qaWMgbsOhemV2X2thdGVnb3JpZTrDunJvdmXFiCBwcm8gbmFzdGF2ZW7DrSAiCisia29ua3LDqXRuw61jaCDDunJvdm7DrSBwcm8gamVkbm90bGl2w6kga2F0ZWdvcmllLiBQxZnDrWtsYWQ6IEdTVF9BVVRPUExVRzo1LCIKKyJHU1RfRUxFTUVOVF8qOjMiCisKK21zZ2lkICJMSVNUIgorbXNnc3RyICJTRVpOQU0iCisKK21zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKK21zZ3N0ciAiWmFrw6F6YXQgb2JhcnZlbsO9IGxhZGljw60gdsO9c3R1cCIKKworbXNnaWQgIkRpc2FibGUgZGVidWdnaW5nIgorbXNnc3RyICJaYWvDoXphdCBsYWTEm27DrSIKKworbXNnaWQgIkVuYWJsZSB2ZXJib3NlIHBsdWdpbiBsb2FkaW5nIGRpYWdub3N0aWNzIgorbXNnc3RyICJQb3ZvbGl0IHBvZHJvYm5vdSBkaWFnbm9zdGlrdSBuYcSNw610w6Fuw60gbW9kdWzFryIKKworbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCittc2dzdHIgIkR2b2p0ZcSNa291IG9kZMSbbGVuw6kgY2VzdHkgb2JzYWh1asOtY8OtIG1vZHVseSIKKworbXNnaWQgIlBBVEhTIgorbXNnc3RyICJDRVNUWSIKKworbXNnaWQgIiIKKyJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwbHVnaW5zIHRvIHByZWxvYWQgaW4gYWRkaXRpb24gdG8gdGhlIGxpc3Qgc3RvcmVkIGluICIKKyJlbnZpcm9ubWVudCB2YXJpYWJsZSBHU1RfUExVR0lOX1BBVEgiCittc2dzdHIgIiIKKyLEjMOhcmthbWkgb2RkxJtsZW7DvSBzZXpuYW0gbW9kdWzFrywga3RlcsOpIHDFmWVkbmHEjcOtc3Qga3JvbcSbIHNlem5hbXUgdWxvxb5lbsOpbSB2ICIKKyJwcm9txJtubsOpIHByb3N0xZllZMOtIEdTVF9QTFVHSU5fUEFUSCIKKworbXNnaWQgIlBMVUdJTlMiCittc2dzdHIgIk1PRFVMWSIKKworbXNnaWQgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCittc2dzdHIgIlpha8OhemF0IHphY2h5Y292w6Fuw60gcG9ydcWhZW7DrSBzZWdtZW50YWNlIHDFmWkgbmHEjcOtdMOhbsOtIG1vZHVsxa8iCisKK21zZ2lkICJEaXNhYmxlIHVwZGF0aW5nIHRoZSByZWdpc3RyeSIKK21zZ3N0ciAiWmFrw6F6YXQgYWt0dWFsaXphY2kgcmVnaXN0cnUiCisKKyMsIGZ1enp5Cittc2dpZCAiRGlzYWJsZSBzcGF3bmluZyBhIGhlbHBlciBwcm9jZXNzIHdoaWxlIHNjYW5uaW5nIHRoZSByZWdpc3RyeSIKK21zZ3N0ciAiWmFrw6F6YXQgcG91xb7DrXbDoW7DrSBmb3JrKCkgcMWZaSBwcm9obGVkw6F2w6Fuw60gcmVnaXN0cnUiCisKK21zZ2lkICJHU3RyZWFtZXIgT3B0aW9ucyIKK21zZ3N0ciAiUMWZZXDDrW5hxI1lIEdTdHJlYW1lcnUiCisKK21zZ2lkICJTaG93IEdTdHJlYW1lciBPcHRpb25zIgorbXNnc3RyICJab2JyYXppdCBwxZllcMOtbmHEjWUgR1N0cmVhbWVydSIKKworbXNnaWQgIlVua25vd24gb3B0aW9uIgorbXNnc3RyICJOZXpuw6Ftw70gcMWZZXDDrW5hxI0iCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIGNvcmUgbGlicmFyeSBlcnJvci4iCittc2dzdHIgIlYgR1N0cmVhbWVyIGRvxaFsbyBrIG9iZWNuw6kgY2h5YsSbIGhsYXZuw60ga25paG92bnkuIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyBlcnJvci4iCittc2dzdHIgIiIKKyJWw712b2rDocWZaSBHU3RyZWFtZXJ1IGJ5bGkgcMWZw61sacWhIGzDrW7DrSBuYSB0bywgYWJ5IHTDqXRvIGNoeWLEmyBwxZlpxZlhZGlsaSBrw7NkLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY29kZSBub3QgaW1wbGVtZW50ZWQuIgorbXNnc3RyICJJbnRlcm7DrSBjaHliYSBHU3RyZWFtZXJ1OiBrw7NkIG5laW1wbGVtZW50b3bDoW4uIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgorInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHBhZCBwcm9ibGVtLiIKK21zZ3N0ciAiSW50ZXJuw60gY2h5YmEgR1N0cmVhbWVydTogcHJvYmzDqW0gcMWZaSB2eXBsxYhvdsOhbsOtLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGhyZWFkIHByb2JsZW0uIgorbXNnc3RyICJJbnRlcm7DrSBjaHliYSBHU3RyZWFtZXJ1OiBwcm9ibMOpbSBzIHZsw6FrbnkuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBuZWdvdGlhdGlvbiBwcm9ibGVtLiIKK21zZ3N0ciAiSW50ZXJuw60gY2h5YmEgR1N0cmVhbWVydTogcHJvYmzDqW0gcMWZaSB2eWplZG7DoXbDoW7DrS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgorbXNnc3RyICJJbnRlcm7DrSBjaHliYSBHU3RyZWFtZXJ1OiBwcm9ibMOpbSBzIHVkw6Fsb3N0bWkuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uIgorbXNnc3RyICJJbnRlcm7DrSBjaHliYSBHU3RyZWFtZXJ1OiBwcm9ibMOpbSBzIHBvc3VuZW0uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgorbXNnc3RyICJJbnRlcm7DrSBjaHliYSBHU3RyZWFtZXJ1OiBwcm9ibMOpbSBzZSBzY2hvcG5vc3RtaS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKK21zZ3N0ciAiSW50ZXJuw60gY2h5YmEgR1N0cmVhbWVydTogcHJvYmzDqW0gcyB0YWd5LiIKKworbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCittc2dzdHIgIlZhxaHDrSBpbnN0YWxhY2kgR1N0cmVhbWVydSBjaHliw60gbW9kdWwuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKK21zZ3N0ciAiSW50ZXJuw60gY2h5YmEgR1N0cmVhbWVydTogcHJvYmzDqW0gcyBob2RpbmFtaS4iCisKK21zZ2lkICIiCisiVGhpcyBhcHBsaWNhdGlvbiBpcyB0cnlpbmcgdG8gdXNlIEdTdHJlYW1lciBmdW5jdGlvbmFsaXR5IHRoYXQgaGFzIGJlZW4gIgorImRpc2FibGVkLiIKK21zZ3N0ciAiIgorIlRhdG8gYXBsaWthY2Ugc2UgcG9rb3XFocOtIHBvdcW+w612YXQgZnVua2NlIEdTdHJlYW1lcnUsIGt0ZXLDqSBieWx5IHpha8OhesOhbnkuIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICJWIEdTdHJlYW1lciBkb8WhbG8gayBjaHlixJsgb2JlY27DqSBwb2Rwxa9ybsOpIGtuaWhvdm55LiIKKworbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIk5lbW9odSBpbmljaWFsaXpvdmF0IHBvZHDFr3Jub3Uga25paG92bnUuIgorCittc2dpZCAiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIk5lbW9odSB6YXbFmcOtdCBwb2Rwxa9yb3Uga25paG92bnUuIgorCittc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJOZW1vaHUgbmFzdGF2aXQgcG9kcMWvcm91IGtuaWhvdm51LiIKKworbXNnaWQgIkVuY29kaW5nIGVycm9yLiIKK21zZ3N0ciAiIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCByZXNvdXJjZSBlcnJvci4iCittc2dzdHIgIlYgR1N0cmVhbWVydSBkb8WhbG8gayBvYmVjbsOpIGNoeWLEmyB6ZHJvasWvLiIKKworbXNnaWQgIlJlc291cmNlIG5vdCBmb3VuZC4iCittc2dzdHIgIlpkcm9qIG5lbmFsZXplbi4iCisKK21zZ2lkICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgorbXNnc3RyICJaZHJvaiBzZSBwb3XFvsOtdsOhIG5lYm8gbmVuw60gayBkaXNwb3ppY2kuIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcuIgorbXNnc3RyICJOZW1vaHUgb3RldsWZw610IHpkcm9qIHBybyDEjXRlbsOtLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiTmVtb2h1IG90ZXbFmcOtdCB6ZHJvaiBwcm8gesOhcGlzLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKK21zZ3N0ciAiTmVtb2h1IG90ZXbFmcOtdCB6ZHJvaiBwcm8gxI10ZW7DrSBhIHrDoXBpcy4iCisKK21zZ2lkICJDb3VsZCBub3QgY2xvc2UgcmVzb3VyY2UuIgorbXNnc3RyICJOZW1vaHUgemF2xZnDrXQgemRyb2ouIgorCittc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCittc2dzdHIgIk5lbW9odSDEjcOtc3QgemUgemRyb2plLiIKKworbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iCittc2dzdHIgIk5lbW9odSB6YXBpc292YXQgZG8gemRyb2plLiIKKworbXNnaWQgIkNvdWxkIG5vdCBwZXJmb3JtIHNlZWsgb24gcmVzb3VyY2UuIgorbXNnc3RyICJOZW1vaHUgc2UgcG9zdW5vdmF0IHZlIHpkcm9qaS4iCisKK21zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgorbXNnc3RyICJOZW1vaHUgc2Ugc3luY2hyb25pem92YXQgc2UgemRyb2plbS4iCisKK21zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKK21zZ3N0ciAiTmVtb2h1IHrDrXNrYXQvem3Em25pdCBuYXN0YXZlbsOtIHpkcm9qZS4iCisKK21zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCittc2dzdHIgIlZlIHpkcm9qaSBuZXpiw712w6EgbcOtc3RvLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiViBHU3RyZWFtZXJ1IGRvxaFsbyBrIG9iZWNuw6kgY2h5YsSbIHByb3VkdS4iCisKK21zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCittc2dzdHIgIiIKKyJFbGVtZW50IG5laW1wbGVtZW50dWplIG9ic2x1aHUgdG9ob3RvIHByb3VkdS4gT2hsYXN0ZSBwcm9zw61tIHR1dG8gY2h5YnUuIgorCittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCittc2dzdHIgIk5lbW9odSB6amlzdGl0IHR5cCBwcm91ZHUuIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBvZiBhIGRpZmZlcmVudCB0eXBlIHRoYW4gaGFuZGxlZCBieSB0aGlzIGVsZW1lbnQuIgorbXNnc3RyICJQcm91ZCBqZSBqaW7DqWhvIHR5cHUsIG5lxb4ga3RlcsO9IHRlbnRvIGVsZW1lbnQgb2JzbHVodWplLiIKKworbXNnaWQgIlRoZXJlIGlzIG5vIGNvZGVjIHByZXNlbnQgdGhhdCBjYW4gaGFuZGxlIHRoZSBzdHJlYW0ncyB0eXBlLiIKK21zZ3N0ciAiTmVuw60gcMWZw610b21lbiDFvsOhZG7DvSBrb2Rlaywga3RlcsO9IHVtw60gb2JzbG91xb5pdCB0eXAgdG9ob3RvIHByb3VkdS4iCisKK21zZ2lkICJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iCittc2dzdHIgIk5lbW9odSBkZWvDs2RvdmF0IHByb3VkLiIKKworbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKK21zZ3N0ciAiTmVtb2h1IGvDs2RvdmF0IHByb3VkLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZW11bHRpcGxleCBzdHJlYW0uIgorbXNnc3RyICJOZW1vaHUgZGVtdWx0aXBsZXhvdmF0IHByb3VkLiIKKworbXNnaWQgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKK21zZ3N0ciAiTmVtb2h1IG11bHRpcGxleG92YXQgcHJvdWQuIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiIKK21zZ3N0ciAiUHJvdWQgamUgdmUgxaFwYXRuw6ltIGZvcm3DoXR1LiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBkZWNyeXB0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIgorbXNnc3RyICJQcm91ZCBqZSB6YcWhaWZyb3bDoW4gYSBkZcWhaWZyb3bDoW7DrSBuZW7DrSBwb2Rwb3JvdsOhbm8uIgorCittc2dpZCAiIgorIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKKyJiZWVuIHN1cHBsaWVkLiIKK21zZ3N0ciAiIgorIlByb3VkIGplIHphxaFpZnJvdsOhbiBhIG5lbHplIGplaiBkZcWhaWZyb3bDoXQsIHByb3Rvxb5lIG5lYnlsIGRvZMOhbiB2aG9kbsO9IGtsw63EjS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzLiIKK21zZ3N0ciAiUHJvIGRvbcOpbnUgJXMgbmVuw60genByw6F2YSBvIGNoeWLEmy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKK21zZ3N0ciAiUHJvIGRvbcOpbnUgJXMgYSBrw7NkICVkIG5lbsOtIHN0YW5kYXJkbsOtIHpwcsOhdmEgbyBjaHlixJsuIgorCittc2dpZCAiU2VsZWN0ZWQgY2xvY2sgY2Fubm90IGJlIHVzZWQgaW4gcGlwZWxpbmUuIgorbXNnc3RyICJWeWJyYW7DqSBob2RpbnkgbmVsemUgcG91xb7DrXQgdiByb3XFmWUuIgorCittc2dpZCAidGl0bGUiCittc2dzdHIgIm7DoXpldiIKKworbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUiCittc2dzdHIgIm9iZWNuxJsgcG91xb7DrXZhbsO9IG7DoXpldiIKKworbXNnaWQgInRpdGxlIHNvcnRuYW1lIgorbXNnc3RyICJuw6F6ZXYgcHJvIMWZYXplbsOtIgorCittc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAib2JlY27EmyBwb3XFvsOtdmFuw70gbsOhemV2IHBybyDFmWF6ZW7DrSIKKworbXNnaWQgImFydGlzdCIKK21zZ3N0ciAidW3Em2xlYyIKKworbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAib3NvYnkgb2Rwb3bEm2Ruw6kgemEgbmFocsOhdmt1IgorCittc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgorbXNnc3RyICJ1bcSbbGVjIHBybyDFmWF6ZW7DrSIKKworbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAib3NvYnkgb2Rwb3bEm2Ruw6kgemEgbmFocsOhdmt1IHBybyDFmWF6ZW7DrSIKKworbXNnaWQgImFsYnVtIgorbXNnc3RyICJhbGJ1bSIKKworbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgorbXNnc3RyICJhbGJ1bSBvYnNhaHVqw61jw60gdGF0byBkYXRhIgorCittc2dpZCAiYWxidW0gc29ydG5hbWUiCittc2dzdHIgImFsYnVtIHBybyDFmWF6ZW7DrSIKKworbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJhbGJ1bSBvYnNhaHVqw61jw60gdGF0byBkYXRhIHBybyDFmWF6ZW7DrSIKKworIywgZnV6enkKK21zZ2lkICJhbGJ1bSBhcnRpc3QiCittc2dzdHIgInVtxJtsZWMiCisKK21zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgInVtxJtsZWMgcHJvIMWZYXplbsOtIgorCittc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkIgorbXNnc3RyICIiCisKK21zZ2lkICJkYXRlIgorbXNnc3RyICJkYXR1bSIKKworbXNnaWQgImRhdGUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR0RhdGUgc3RydWN0dXJlKSIKK21zZ3N0ciAiZGF0dW0sIGtkeSBieWxhIGRhdGEgdnl0dm/FmWVuYSAoamFrbyBzdHJ1a3R1cmEgR0RhdGUpIgorCisjLCBmdXp6eQorbXNnaWQgImRhdGV0aW1lIgorbXNnc3RyICJkYXR1bSIKKworIywgZnV6enkKK21zZ2lkICJkYXRlIGFuZCB0aW1lIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdzdERhdGVUaW1lIHN0cnVjdHVyZSkiCittc2dzdHIgImRhdHVtLCBrZHkgYnlsYSBkYXRhIHZ5dHZvxZllbmEgKGpha28gc3RydWt0dXJhIEdEYXRlKSIKKworbXNnaWQgImdlbnJlIgorbXNnc3RyICLFvsOhbnIiCisKK21zZ2lkICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKK21zZ3N0ciAixb7DoW5yLCBkbyBrdGVyw6lobyB0YXRvIGRhdGEgcGF0xZnDrSIKKworbXNnaWQgImNvbW1lbnQiCittc2dzdHIgInBvem7DoW1rYSIKKworbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIgorbXNnc3RyICJ2b2xuw70gdGV4dCBrb21lbnR1asOtY8OtIGRhdGEiCisKK21zZ2lkICJleHRlbmRlZCBjb21tZW50IgorbXNnc3RyICJyb3rFocOtxZllbsOhIHBvem7DoW1rYSIKKworbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIGluIGtleT12YWx1ZSBvciBrZXlbZW5dPWNvbW1lbnQgZm9ybSIKK21zZ3N0ciAiIgorInZvbG7DvSB0ZXh0IGtvbWVudHVqw61jw60gZGF0YSB2ZSB0dmFydSBrbMOtxI09aG9kbm90YSBuZWJvIGtsw63EjVtjc109cG96bsOhbWthIgorCittc2dpZCAidHJhY2sgbnVtYmVyIgorbXNnc3RyICLEjcOtc2xvIHN0b3B5IgorCittc2dpZCAidHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgIsSNw61zbG8gc3RvcHkgdiBzb3Vib3J1IgorCittc2dpZCAidHJhY2sgY291bnQiCittc2dzdHIgInBvxI1ldCBzdG9wIgorCittc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKK21zZ3N0ciAicG/EjWV0IHN0b3AgdiBzb3Vib3J1LCBkbyBrdGVyw6lobyB0YXRvIHN0b3BhIHBhdMWZw60iCisKK21zZ2lkICJkaXNjIG51bWJlciIKK21zZ3N0ciAixI3DrXNsbyBkaXNrdSIKKworbXNnaWQgImRpc2MgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgIsSNw61zbG8gZGlza3UgdiBzb3Vib3J1IgorCittc2dpZCAiZGlzYyBjb3VudCIKK21zZ3N0ciAicG/EjWV0IGRpc2vFryIKKworbXNnaWQgImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIgorbXNnc3RyICJwb8SNZXQgZGlza8WvIHYgc291Ym9ydSwgZG8ga3RlcsOpaG8gdGVudG8gZGlzayBwYXTFmcOtIgorCittc2dpZCAibG9jYXRpb24iCittc2dzdHIgInVtw61zdMSbbsOtIgorCittc2dpZCAiIgorIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgorImlzIGhvc3RlZCkiCittc2dzdHIgIiIKKyJQxa92b2QgbcOpZGlhIGpha28gVVJJICh1bcOtc3TEm27DrSwga2RlIGplIG5hYsOtemVuIG9yaWdpbsOhbCBzb3Vib3J1IG5lYm8gcHJvdWR1KSIKKworIywgZnV6enkKK21zZ2lkICJob21lcGFnZSIKK21zZ3N0ciAib2Jyw6F6ZWsiCisKK21zZ2lkICJIb21lcGFnZSBmb3IgdGhpcyBtZWRpYSAoaS5lLiBhcnRpc3Qgb3IgbW92aWUgaG9tZXBhZ2UpIgorbXNnc3RyICIiCisKK21zZ2lkICJkZXNjcmlwdGlvbiIKK21zZ3N0ciAicG9waXMiCisKK21zZ2lkICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCittc2dzdHIgImtyw6F0a8O9IHRleHQgcG9waXN1asOtY8OtIG9ic2FoIGRhdCIKKworbXNnaWQgInZlcnNpb24iCittc2dzdHIgInZlcnplIgorCittc2dpZCAidmVyc2lvbiBvZiB0aGlzIGRhdGEiCittc2dzdHIgInZlcnplIHTEm2NodG8gZGF0IgorCittc2dpZCAiSVNSQyIKK21zZ3N0ciAiSVNSQyIKKworbXNnaWQgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKK21zZ3N0ciAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHZpeiBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgorCittc2dpZCAib3JnYW5pemF0aW9uIgorbXNnc3RyICJvcmdhbml6YWNlIgorCittc2dpZCAiY29weXJpZ2h0IgorbXNnc3RyICJjb3B5cmlnaHQiCisKK21zZ2lkICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJvem7DoW1lbsOtIG8gY29weXJpZ2h0dSBkYXQiCisKK21zZ2lkICJjb3B5cmlnaHQgdXJpIgorbXNnc3RyICJ1cmkgY29weXJpZ2h0dSIKKworbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiVVJJIG96bsOhbWVuw60gbyBjb3B5cmlnaHR1IGRhdCIKKworIywgZnV6enkKK21zZ2lkICJlbmNvZGVkIGJ5IgorbXNnc3RyICJrb2TDqXIiCisKK21zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICJjb250YWN0IgorbXNnc3RyICJrb250YWt0IgorCittc2dpZCAiY29udGFjdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAia29udGFrdG7DrSBpbmZvcm1hY2UiCisKK21zZ2lkICJsaWNlbnNlIgorbXNnc3RyICJsaWNlbmNlIgorCittc2dpZCAibGljZW5zZSBvZiBkYXRhIgorbXNnc3RyICJsaWNlbmNlIGRhdCIKKworbXNnaWQgImxpY2Vuc2UgdXJpIgorbXNnc3RyICJ1cmkgbGljZW5jZSIKKworbXNnaWQgIlVSSSB0byB0aGUgbGljZW5zZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiVVJJIGxpY2VuY2UgZGF0IgorCittc2dpZCAicGVyZm9ybWVyIgorbXNnc3RyICJ2w71rb25uw70gdW3Em2xlYyIKKworbXNnaWQgInBlcnNvbihzKSBwZXJmb3JtaW5nIgorbXNnc3RyICJ2eXN0dXB1asOtY8OtIG9zb2J5ICIKKworbXNnaWQgImNvbXBvc2VyIgorbXNnc3RyICJza2xhZGF0ZWwiCisKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciCittc2dzdHIgIm9zb2J5LCBrdGVyw6kgc2xvxb5pbHkgbmFocsOhdmt1IgorCittc2dpZCAiZHVyYXRpb24iCittc2dzdHIgInRydsOhbsOtIgorCittc2dpZCAibGVuZ3RoIGluIEdTdHJlYW1lciB0aW1lIHVuaXRzIChuYW5vc2Vjb25kcykiCittc2dzdHIgImTDqWxrYSB2IGplZG5vdGvDoWNoIMSNYXN1IEdTdHJlYW1lciAobmFub3Nla3VuZMOhY2gpIgorCittc2dpZCAiY29kZWMiCittc2dzdHIgImtvZGVrIgorCittc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJrb2RlaywgdmUga3RlcsOpbSBqc291IHVsb8W+ZW5hIGRhdGEiCisKK21zZ2lkICJ2aWRlbyBjb2RlYyIKK21zZ3N0ciAia29kZWsgdmlkZWEiCisKK21zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImtvZGVrLCB2ZSBrdGVyw6ltIGpzb3UgdWxvxb5lbmEgZGF0YSB2aWRlYSIKKworbXNnaWQgImF1ZGlvIGNvZGVjIgorbXNnc3RyICJrb2RlayB6dnVrdSIKKworbXNnaWQgImNvZGVjIHRoZSBhdWRpbyBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAia29kZWssIHZlIGt0ZXLDqW0ganNvdSB1bG/FvmVuYSBkYXRhIHp2dWt1IgorCisjLCBmdXp6eQorbXNnaWQgInN1YnRpdGxlIGNvZGVjIgorbXNnc3RyICJrb2RlayB2aWRlYSIKKworIywgZnV6enkKK21zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImtvZGVrLCB2ZSBrdGVyw6ltIGpzb3UgdWxvxb5lbmEgZGF0YSB2aWRlYSIKKworIywgZnV6enkKK21zZ2lkICJjb250YWluZXIgZm9ybWF0IgorbXNnc3RyICJrb250YWt0bsOtIGluZm9ybWFjZSIKKworIywgZnV6enkKK21zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAia29kZWssIHZlIGt0ZXLDqW0ganNvdSB1bG/FvmVuYSBkYXRhIgorCittc2dpZCAiYml0cmF0ZSIKK21zZ3N0ciAiYml0cmF0ZSIKKworbXNnaWQgImV4YWN0IG9yIGF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgInDFmWVzbsOhIG5lYm8gcHLFr23Em3Juw6EgYml0cmF0ZSB2IGJpdGVjaC9zIgorCittc2dpZCAibm9taW5hbCBiaXRyYXRlIgorbXNnc3RyICJub21pbsOhbG7DrSBiaXRyYXRlIgorCittc2dpZCAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAibm9taW7DoWxuw60gYml0cmF0ZSB2IGJpdGVjaC9zIgorCittc2dpZCAibWluaW11bSBiaXRyYXRlIgorbXNnc3RyICJtaW5pbcOhbG7DrSBiaXRyYXRlIgorCittc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAibWluaW3DoWxuw60gYml0cmF0ZSB2IGJpdGVjaC9zIgorCittc2dpZCAibWF4aW11bSBiaXRyYXRlIgorbXNnc3RyICJtYXhpbcOhbG7DrSBiaXRyYXRlIgorCittc2dpZCAibWF4aW11bSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAibWF4aW3DoWxuw60gYml0cmF0ZSB2IGJpdGVjaC9zIgorCittc2dpZCAiZW5jb2RlciIKK21zZ3N0ciAia29kw6lyIgorCittc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAia29kw6lyIHBvdcW+w612YW7DvSBwcm8ga8OzZG92w6Fuw60gdG9ob3RvIHByb3VkdSIKKworbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKK21zZ3N0ciAidmVyemUga29kw6lydSIKKworbXNnaWQgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCittc2dzdHIgInZlcnplIGtvZMOpcnUgcG91xb7DrXZhbsOpaG8gcHJvIGvDs2RvdsOhbsOtIHRvaG90byBwcm91ZHUiCisKK21zZ2lkICJzZXJpYWwiCittc2dzdHIgInPDqXJpb3bDqSIKKworbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCittc2dzdHIgInPDqXJpb3bDqSDEjcOtc2xvIHN0b3B5IgorCittc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgorbXNnc3RyICJyZXBsYXlnYWluIHppc2sgcMWZZWhyw6F2w6Fuw60gc3RvcHkiCisKK21zZ2lkICJ0cmFjayBnYWluIGluIGRiIgorbXNnc3RyICJ6aXNrIHDFmWVocsOhdsOhbsOtIHN0b3B5IHYgZGIiCisKK21zZ2lkICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCittc2dzdHIgInJlcGxheWdhaW4gdnJjaG9sIHN0b3B5IgorCittc2dpZCAicGVhayBvZiB0aGUgdHJhY2siCittc2dzdHIgInZyY2hvbCBzdG9weSIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKK21zZ3N0ciAicmVwbGF5Z2FpbiB6aXNrIGFsYmEiCisKK21zZ2lkICJhbGJ1bSBnYWluIGluIGRiIgorbXNnc3RyICJ6aXNrIGFsYmEgdiBkYiIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKK21zZ3N0ciAicmVwbGF5Z2FpbiB2cmNob2wgYWxiYSIKKworbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgorbXNnc3RyICJ2cmNob2wgYWxiYSIKKworbXNnaWQgInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIgorbXNnc3RyICJyZWZlcmVuxI1uw60gw7pyb3ZlxYggcmVwbGF5Z2FpbiIKKworbXNnaWQgInJlZmVyZW5jZSBsZXZlbCBvZiB0cmFjayBhbmQgYWxidW0gZ2FpbiB2YWx1ZXMiCittc2dzdHIgInJlZmVyZW7EjW7DrSDDunJvdmXFiCBob2Rub3Qgemlza3Ugc3RvcHkgYSBhbGJhIgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSIKK21zZ3N0ciAia8OzZCBqYXp5a2EiCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIGZvciB0aGlzIHN0cmVhbSwgY29uZm9ybWluZyB0byBJU08tNjM5LTEiCittc2dzdHIgImvDs2QgamF6eWthIHBybyB0ZW50byBwcm91ZCwgc3BsxYh1asOtY8OtIElTTy02MzktMSIKKworbXNnaWQgImltYWdlIgorbXNnc3RyICJvYnLDoXplayIKKworbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgIm9icsOhemVrIHNvdXZpc2Vqw61jw60gcyB0w61tdG8gcHJvdWRlbSIKKworIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCittc2dpZCAicHJldmlldyBpbWFnZSIKK21zZ3N0ciAib2Jyw6F6ZWsgbsOhaGxlZHUiCisKK21zZ2lkICJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgIm9icsOhemVrIG7DoWhsZWR1IHNvdXZpc2Vqw61jw60gcyB0w61tdG8gcHJvdWRlbSIKKworbXNnaWQgImF0dGFjaG1lbnQiCittc2dzdHIgInDFmcOtbG9oYSIKKworbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgInNvdWJvciBwxZlpcG9qZW7DvSBrIHRvbXV0byBwcm91ZHUiCisKK21zZ2lkICJiZWF0cyBwZXIgbWludXRlIgorbXNnc3RyICJ0YWt0xa8gemEgbWludXR1IgorCittc2dpZCAibnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8iCittc2dzdHIgInBvxI1ldCB0YWt0xa8gdmUgenZ1a3UgemEgbWludXR1IgorCittc2dpZCAia2V5d29yZHMiCittc2dzdHIgImtsw63EjW92w6Egc2xvdmEiCisKK21zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKK21zZ3N0ciAixI1hcmthbWkgb2RkxJtsZW7DoSBrbMOtxI1vdsOhIHNsb3ZhIHBvcGlzdWrDrWPDrSBvYnNhaCIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBuYW1lIgorbXNnc3RyICJuw6F6ZXYgbcOtc3RhIgorCisjLCBmdXp6eQorbXNnaWQgIiIKKyJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgorInByb2R1Y2VkIgorbXNnc3RyICIiCisicG9waXNuw6kgbcOtc3RvIMSNaXRlbG7DqSDEjWxvdsSba2VtIG5lYm8ga2RlIGJ5bG8gbcOpZGl1bSBuYWhyw6FubyBuZWJvIHZ5dHZvxZllbm8iCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCittc2dzdHIgInplbcSbcGlzbsOhIMWhw63FmWthIG3DrXN0YSIKKworbXNnaWQgIiIKKyJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCisic291dGhlcm4gbGF0aXR1ZGVzKSIKK21zZ3N0ciAiIgorInplbcSbcGlzbsOhIMWhw63FmWthIG3DrXN0YSwga2RlIGJ5bG8gbcOpZGl1bSBuYWhyw6FubyBuZWJvIHZ5dHZvxZllbm8sIHZlIHN0dXBuw61jaCAiCisicG9kbGUgV0dTODQgKG51bGEgbmEgcm92bsOta3UsIHrDoXBvcm7DqSBob2Rub3R5IHBybyBqacW+bsOtIHBvbG9rb3VsaSkiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbG9uZ2l0dWRlIgorbXNnc3RyICJ6ZW3Em3Bpc27DoSBkw6lsa2EgbcOtc3RhIgorCittc2dpZCAiIgorImdlbyBsb25naXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgcHJpbWUgbWVyaWRpYW4gaW4gR3JlZW53aWNoL1VLLCAgIgorIm5lZ2F0aXZlIHZhbHVlcyBmb3Igd2VzdGVybiBsb25naXR1ZGVzKSIKK21zZ3N0ciAiIgorInplbcSbcGlzbsOhIGTDqWxrYSBtw61zdGEsIGtkZSBieWxvIG3DqWRpdW0gbmFocsOhbm8gbmVibyB2eXR2b8WZZW5vLCB2ZSBzdHVwbsOtY2ggIgorInBvZGxlIFdHUzg0IChudWxhIG5hIGhsYXZuw61tIHBvbGVkbsOta3UgdiBHcmVlbndpY2hpLCB6w6Fwb3Juw6kgaG9kbm90eSBwcm8gIgorInrDoXBhZG7DrSBwb2xva291bGkpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKK21zZ3N0ciAiemVtxJtwaXNuw6EgdsO9xaFrYSBtw61zdGEiCisKK21zZ2lkICIiCisiZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKKyJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgorbXNnc3RyICIiCisiemVtxJtwaXNuw6EgdsO9xaFrYSBtw61zdGEsIGtkZSBieWxvIG3DqWRpdW0gbmFocsOhbm8gbmVibyB2eXR2b8WZZW5vLCB2IG1ldHJlY2ggIgorInBvZGxlIFdHUzg0IChudWxhIGplIHByxa9txJtybsOhIGhsYWRpbmEgbW/FmWUpIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBjb3VudHJ5IgorbXNnc3RyICJ6ZW3Em3Bpc27DoSBkw6lsa2EgbcOtc3RhIgorCisjLCBmdXp6eQorbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICIiCisicG9waXNuw6kgbcOtc3RvIMSNaXRlbG7DqSDEjWxvdsSba2VtIG5lYm8ga2RlIGJ5bG8gbcOpZGl1bSBuYWhyw6FubyBuZWJvIHZ5dHZvxZllbm8iCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCittc2dzdHIgInplbcSbcGlzbsOhIMWhw63FmWthIG3DrXN0YSIKKworIywgZnV6enkKK21zZ2lkICJjaXR5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKK21zZ3N0ciAiIgorInBvcGlzbsOpIG3DrXN0byDEjWl0ZWxuw6kgxI1sb3bEm2tlbSBuZWJvIGtkZSBieWxvIG3DqWRpdW0gbmFocsOhbm8gbmVibyB2eXR2b8WZZW5vIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKK21zZ3N0ciAiemVtxJtwaXNuw6EgdsO9xaFrYSBtw61zdGEiCisKK21zZ2lkICIiCisiYSBsb2NhdGlvbiB3aGl0aGluIGEgY2l0eSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgb3IgY3JlYXRlZCAoZS5nLiAiCisidGhlIG5laWdoYm9yaG9vZCkiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gaG9yaXpvbnRhbCBlcnJvciIKK21zZ3N0ciAibsOhemV2IG3DrXN0YSIKKworbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgorbXNnc3RyICJ6ZW3Em3Bpc27DoSBkw6lsa2EgbcOtc3RhIgorCittc2dpZCAiIgorIm1vdmVtZW50IHNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgaW4gbS9zIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKK21zZ3N0ciAiemVtxJtwaXNuw6EgdsO9xaFrYSBtw61zdGEiCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgorIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKKyJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCittc2dzdHIgInplbcSbcGlzbsOhIHbDvcWha2EgbcOtc3RhIgorCittc2dpZCAiIgorImluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcgIGEgbWVkaWEuICIKKyJJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50ICByZXByZXNlbnRhdGlvbiwgMCBtZWFucyB0aGUgIgorImdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZScgaGVyZQorbXNnaWQgInNob3cgbmFtZSIKK21zZ3N0ciAiIgorCittc2dpZCAiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogJ3Nob3cgc29ydG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lIGFzIHVzZWQgZm9yIHNvcnRpbmcgcHVycG9zZXMnIGhlcmUKKyMsIGZ1enp5Cittc2dpZCAic2hvdyBzb3J0bmFtZSIKK21zZ3N0ciAidW3Em2xlYyBwcm8gxZlhemVuw60iCisKK21zZ2lkICIiCisiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJlcGlzb2RlIG51bWJlciIKK21zZ3N0ciAixI3DrXNsbyBkaXNrdSIKKworbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAic2Vhc29uIG51bWJlciIKK21zZ3N0ciAixI3DrXNsbyBkaXNrdSIKKworbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAibHlyaWNzIgorbXNnc3RyICJsaWNlbmNlIgorCittc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCittc2dzdHIgIm7DoXpldiBwcm8gxZlhemVuw60iCisKKyMsIGZ1enp5Cittc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAib3NvYnkgb2Rwb3bEm2Ruw6kgemEgbmFocsOhdmt1IHBybyDFmWF6ZW7DrSIKKworbXNnaWQgImdyb3VwaW5nIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiR3JvdXBzIHJlbGF0ZWQgbWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSB0cmFja3MsIGxpa2UgdGhlIGRpZmZlcmVudCBwaWVjZXMgIgorIm9mIGEgY29uY2VydG8uIEl0IGlzIGEgaGlnaGVyIGxldmVsIHRoYW4gYSB0cmFjaywgYnV0IGxvd2VyIHRoYW4gYW4gYWxidW0iCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJ1c2VyIHJhdGluZyIKK21zZ3N0ciAidHJ2w6Fuw60iCisKK21zZ2lkICIiCisiUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCisidGhpcyBtZWRpYSIKK21zZ3N0ciAiIgorCittc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIk1hbnVmYWN0dXJlciBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCittc2dzdHIgInZlcnplIGtvZMOpcnUgcG91xb7DrXZhbsOpaG8gcHJvIGvDs2RvdsOhbsOtIHRvaG90byBwcm91ZHUiCisKK21zZ2lkICJkZXZpY2UgbW9kZWwiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJNb2RlbCBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCittc2dzdHIgInZlcnplIGtvZMOpcnUgcG91xb7DrXZhbsOpaG8gcHJvIGvDs2RvdsOhbsOtIHRvaG90byBwcm91ZHUiCisKKyMsIGZ1enp5Cittc2dpZCAiYXBwbGljYXRpb24gbmFtZSIKK21zZ3N0ciAibsOhemV2IG3DrXN0YSIKKworIywgZnV6enkKK21zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCittc2dzdHIgInZlcnplIGtvZMOpcnUgcG91xb7DrXZhbsOpaG8gcHJvIGvDs2RvdsOhbsOtIHRvaG90byBwcm91ZHUiCisKK21zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgorbXNnc3RyICIiCisKK21zZ2lkICJBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIG1lZGlhIgorbXNnc3RyICIiCisKK21zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKK21zZ3N0ciAiIgorCittc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgorbXNnc3RyICIiCisKK21zZ2lkICIsICIKK21zZ3N0ciAiLCAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAiQ0hZQkE6IG9kIGVsZW1lbnR1ICVzOiAlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorIlDFmcOtZGF2bsOpIGxhZGljw60gaW5mb3JtYWNlOlxuIgorIiVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgorbXNnc3RyICJ6YWTDoW4gcHLDoXpkbsO9IHrDoXNvYm7DrWsgXCIlc1wiLCBuZWRvdm9sZW5vIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHNraXBwaW5nIgorbXNnc3RyICJ6w6Fzb2Juw61rIFwiJXNcIiBuZWV4aXN0dWplLCBwxZllc2tha3VqaSIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCittc2dzdHIgInYgZWxlbWVudHUgXCIlMiRzXCIgbmVuw60gdmxhc3Rub3N0IFwiJTEkc1wiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKK21zZ3N0ciAibmVtb2h1IG5hc3Rhdml0IHZsYXN0bm9zdCBcIiVzXCIgdiBlbGVtZW50dSBcIiVzXCIgbmEgXCIlc1wiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgorbXNnc3RyICJuZW1vaHUgcMWZaXBvaml0ICVzIGsgJXMiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCittc2dzdHIgImVsZW1lbnQgXCIlc1wiIG5lZXhpc3R1amUiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNhcHMgXCIlc1wiIgorbXNnc3RyICJuZW1vaHUgenByYWNvdmF0IHNjaG9wbm9zdGkgXCIlc1wiIgorCittc2dpZCAibGluayB3aXRob3V0IHNvdXJjZSBlbGVtZW50IgorbXNnc3RyICJwcm9wb2plbsOtIGJleiBlbGVtZW50dSB6ZHJvamUiCisKK21zZ2lkICJsaW5rIHdpdGhvdXQgc2luayBlbGVtZW50IgorbXNnc3RyICJwcm9wb2plbsOtIGJleiBlbGVtZW50dSBzcG90xZllYmnEjWUiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgIm5lZXhpc3R1amUgZWxlbWVudCB6ZHJvamUgcHJvIFVSSSBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCB0byBsaW5rIFVSSSBcIiVzXCIgdG8iCittc2dzdHIgIm5lZXhpc3R1amUgZWxlbWVudCwga2Uga3RlcsOpbXUgcMWZaXBvaml0IFVSSSBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJuZWV4aXN0dWplIGVsZW1lbnQgc3BvdMWZZWJpxI1lIHBybyBVUkkgXCIlc1wiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAibmVtb2h1IHDFmWlwb2ppdCBlbGVtZW50IHNwb3TFmWViacSNZSBwcm8gVVJJIFwiJXNcIiIKKworbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgorbXNnc3RyICJwcsOhemRuw6Egcm91cmEgbmVuw60gcG92b2xlbmEiCisKK21zZ2lkICJJbnRlcm5hbCBjbG9jayBlcnJvci4iCittc2dzdHIgIkludGVybsOtIGNoeWJhIGhvZGluLiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCittc2dzdHIgIkludGVybsOtIGNoeWJhIHRva3UgZGF0LiIKKworbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCittc2dzdHIgIkludGVybsOtIHByb2Jsw6ltIHRva3UgZGF0LiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiSW50ZXJuw60gY2h5YmEgcHJvdWR1IGRhdC4iCisKK21zZ2lkICJGaWx0ZXIgY2FwcyIKK21zZ3N0ciAiRmlsdHJvdmF0IHNjaG9wbm9zdGkiCisKK21zZ2lkICIiCisiUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCisicHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKK21zZ3N0ciAiIgorIk9tZXppdCBwb3ZvbGVuw6kgc2Nob3Bub3N0aSAoTlVMTCB6bmFtZW7DoSBWxaBFQ0hOWSkuIE5hc3RhdmVuw60gdMOpdG8gdmxhc3Rub3N0aSAiCisiYmVyZSBvZGtheiBuYSB6YWRhbsO9IG9iamVrdCBHc3RDYXBzLiIKKworbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJOZXphZMOhbiBuw6F6ZXYgc291Ym9ydSBwcm8gesOhcGlzLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCittc2dzdHIgIk5lbW9odSBvdGV2xZnDrXQgc291Ym9yIFwiJXNcIiBwcm8gesOhcGlzLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiQ2h5YmEgcMWZaSB6YXbDrXLDoW7DrSBzb3Vib3J1IFwiJXNcIi4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Vla2luZyBpbiBmaWxlIFwiJXNcIi4iCittc2dzdHIgIkNoeWJhIHDFmWkgcG9zdW51IHYgc291Ym9ydSBcIiVzXCIuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgorbXNnc3RyICJDaHliYSBwxZlpIHrDoXBpc3UgZG8gc291Ym9ydSBcIiVzXCIuIgorCittc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCittc2dzdHIgIk5lemFkw6FuIG7DoXpldiBzb3Vib3J1IHBybyDEjXRlbsOtLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCittc2dzdHIgIk5lbW9odSBvdGV2xZnDrXQgc291Ym9yIFwiJXNcIiBwcm8gxI10ZW7DrS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCittc2dzdHIgIk5lbW9odSB6w61za2F0IGluZm9ybWFjZSBvIFwiJXNcIi4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiXCIlc1wiIGlzIGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiXCIlc1wiIGplIGFkcmVzw6HFmS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZSBcIiVzXCIgaXMgYSBzb2NrZXQuIgorbXNnc3RyICJTb3Vib3IgXCIlc1wiIGplIHNvY2tldC4iCisKK21zZ2lkICJGYWlsZWQgYWZ0ZXIgaXRlcmF0aW9ucyBhcyByZXF1ZXN0ZWQuIgorbXNnc3RyICJTZWxow6Fuw60gcG8gaXRlcmFjw61jaCBwb2RsZSBwb8W+YWRhdmt1LiIKKworbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCittc2dzdHIgIiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiTmVtb2h1IHrDrXNrYXQgaW5mb3JtYWNlIG8gXCIlc1wiLiIKKworIywgZnV6enkKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIgorbXNnc3RyICJDaHliYSBwxZlpIHrDoXBpc3UgZG8gc291Ym9ydSBcIiVzXCIuIgorCittc2dpZCAiY2FwcyIKK21zZ3N0ciAic2Nob3Bub3N0aSIKKworbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCittc2dzdHIgImRldGVrb3ZhbsOpIHNjaG9wbm9zdGkgdiBwcm91ZHUiCisKK21zZ2lkICJtaW5pbXVtIgorbXNnc3RyICJtaW5pbXVtIgorCittc2dpZCAibWF4aW11bSIKK21zZ3N0ciAibWF4aW11bSIKKworbXNnaWQgImZvcmNlIGNhcHMiCittc2dzdHIgInZ5bnV0aXQgc2Nob3Bub3N0aSIKKworbXNnaWQgImZvcmNlIGNhcHMgd2l0aG91dCBkb2luZyBhIHR5cGVmaW5kIgorbXNnc3RyICJ2eW51dGl0IHNjaG9wbm9zdGkgYmV6IGhsZWTDoW7DrSB0eXB1IgorCittc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgorbXNnc3RyICJQcm91ZCBuZW9ic2FodWplIMW+w6FkbsOhIGRhdGEuIgorCittc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKK21zZ3N0ciAiSW1wbGVtZW50b3ZhbsOhIHJvemhyYW7DrTpcbiIKKworbXNnaWQgInJlYWRhYmxlIgorbXNnc3RyICJsemUgxI3DrXN0IgorCittc2dpZCAid3JpdGFibGUiCittc2dzdHIgImx6ZSB6YXBpc292YXQiCisKK21zZ2lkICJjb250cm9sbGFibGUiCittc2dzdHIgImx6ZSBvdmzDoWRhdCIKKworbXNnaWQgImNoYW5nZWFibGUgaW4gTlVMTCwgUkVBRFksIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCwgUkVBRFkgb3IgUEFVU0VEIHN0YXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKK21zZ3N0ciAiIgorCittc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgorbXNnc3RyICIiCisKK21zZ2lkICJUb3RhbCBjb3VudDogIgorbXNnc3RyICJDZWxrb3bDvSBwb8SNZXQ6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgorbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCittc2dzdHJbMl0gIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBwbHVnaW4iCittc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCittc2dzdHJbMF0gIiVkIG1vZHVsIgorbXNnc3RyWzFdICIlZCBtb2R1bHkiCittc2dzdHJbMl0gIiVkIG1vZHVsxa8iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgorbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCittc2dzdHJbMl0gIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBmZWF0dXJlIgorbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKK21zZ3N0clswXSAiJWQgZnVua2NlIgorbXNnc3RyWzFdICIlZCBmdW5rY2UiCittc2dzdHJbMl0gIiVkIGZ1bmtjw60iCisKK21zZ2lkICJQcmludCBhbGwgZWxlbWVudHMiCittc2dzdHIgIlZ5cHNhdCB2xaFlY2hueSBlbGVtZW50eSIKKworbXNnaWQgIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICIiCisiUHJpbnQgYSBtYWNoaW5lLXBhcnNhYmxlIGxpc3Qgb2YgZmVhdHVyZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4gb3IgYWxsICIKKyJwbHVnaW5zIHByb3ZpZGUuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIGluIGNvbm5lY3Rpb24gd2l0aCBleHRlcm5hbCAiCisiYXV0b21hdGljIHBsdWdpbiBpbnN0YWxsYXRpb24gbWVjaGFuaXNtcyIKK21zZ3N0ciAiIgorIlZ5cHNhdCBzdHJvamVtIHpwcmFjb3ZhdGVsbsO9IHNlem5hbSBmdW5rY8OtLCBrdGVyw6kgcG9za3l0dWplIHphZGFuw70gbW9kdWwuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVcW+aXRlxI1uw6kgc3BvbHUgcyBleHRlcm7DrW1pIG1lY2hhbmlzbXkgIgorInBybyBhdXRvbWF0aWNrb3UgaW5zdGxhY2kgbW9kdWzFryIKKworbXNnaWQgIkxpc3QgdGhlIHBsdWdpbiBjb250ZW50cyIKK21zZ3N0ciAiIgorCittc2dpZCAiUHJpbnQgc3VwcG9ydGVkIFVSSSBzY2hlbWVzLCB3aXRoIHRoZSBlbGVtZW50cyB0aGF0IGltcGxlbWVudCB0aGVtIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGxvYWQgcGx1Z2luIGZpbGU6ICVzXG4iCittc2dzdHIgIk5lbW9odSBuYcSNw61zdCBzb3Vib3IgbW9kdWx1OiAlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgorbXNnc3RyICJFbGVtZW50IG5lYm8gbW9kdWwgJyVzJyBuZWV4aXN0dWplXG4iCisKK21zZ2lkICJJbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICIiCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIGVsZW1lbnQgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAiRG9zdGFsIGpzZW0genByw6F2dSBlbGVtZW50dSBcIiVzXCIgKCVzKTogIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKK21zZ3N0ciAiRG9zdGFsIGpzZW0genByw6F2dSBlbGVtZW50dSBcIiVzXCIgKCVzKTogIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAiRG9zdGFsIGpzZW0genByw6F2dSBlbGVtZW50dSBcIiVzXCIgKCVzKTogIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgKCVzKTogIgorbXNnc3RyICJEb3N0YWwganNlbSB6cHLDoXZ1IGVsZW1lbnR1IFwiJXNcIiAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIgorbXNnc3RyICJEb3N0YWwganNlbSBFT1Mgb2QgZWxlbWVudHUgXCIlc1wiLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCittc2dzdHIgIk5BTEVaRU4gVEFHICAgIDogbmFsZXplbiBlbGVtZW50ZW0gXCIlc1wiLlxuIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCittc2dzdHIgIk5BTEVaRU4gVEFHICAgIDogbmFsZXplbiBlbGVtZW50ZW0gXCIlc1wiLlxuIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCittc2dzdHIgIk5BTEVaRU4gVEFHICAgIDogbmFsZXplbiBlbGVtZW50ZW0gXCIlc1wiLlxuIgorCittc2dpZCAiRk9VTkQgVEFHXG4iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSU5GTzpcbiIKKyIlc1xuIgorbXNnc3RyICIiCisiSU5GT1JNQUNFOlxuIgorIiVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgorbXNnc3RyICJWQVJPVsOBTsONOiBvZCBlbGVtZW50dSAlczogJXNcbiIKKworbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgorbXNnc3RyICJQxZllZHRvxI1lbm8sIMSNZWvDoW0gbmEgZG9rb27EjWVuw60gdWtsw6Fkw6Fuw60gZG8gdnlyb3Zuw6F2w6Fjw60gcGFtxJt0aS4uLlxuIgorCisjLCBmdXp6eQorbXNnaWQgImJ1ZmZlcmluZy4uLiIKK21zZ3N0ciAidWtsw6Fkw6FtIGRvIHZ5cm92bsOhdmFjw60gcGFtxJt0aS4uLiAlZCAgXG4iCisKK21zZ2lkICJEb25lIGJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgorbXNnc3RyICIiCisiVWtsw6Fkw6Fuw60gZG8gdnlyb3Zuw6F2YWPDrSBwYW3Em3RpIGhvdG92bywgbmFzdGF2dWppIHJvdXJ1IG5hIFDFmEVIUsOBVsOBIC4uLlxuIgorCittc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAiIgorIlVrbMOhZMOhbSBkbyB2eXJvdm7DoXZhY8OtIHBhbcSbdGkgaG90b3ZvLCBuYXN0YXZ1amkgcm91cnUgbmEgUE9aQVNUQVZFTkEgLi4uXG4iCisKK21zZ2lkICJSZWRpc3RyaWJ1dGUgbGF0ZW5jeS4uLlxuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBzdGF0ZSB0byAlcyBhcyByZXF1ZXN0ZWQgYnkgJXMuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiSW50ZXJydXB0OiBTdG9wcGluZyBwaXBlbGluZSAuLi5cbiIKK21zZ3N0ciAiUMWZZXJ1xaFlbsOtOiBaYXN0YXZ1amkgcm91cnUgLi4uXG4iCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKK21zZ3N0ciAiZWxlbWVudCBcIiVzXCIgbmVleGlzdHVqZSIKKworbXNnaWQgIk91dHB1dCB0YWdzIChhbHNvIGtub3duIGFzIG1ldGFkYXRhKSIKK21zZ3N0ciAiVnlwc2F0IHRhZ3kgKHRha8OpIHpuw6Ftw6kgamFrbyBtZXRhZGF0YSkiCisKK21zZ2lkICJPdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBwcm9wZXJ0eSBub3RpZmljYXRpb25zIgorbXNnc3RyICJWeXBzYXQgaW5mb3JtYWNlIG8gc3RhdnUgYSB1cG96b3JuxJtuw60gbmEgdmxhc3Rub3N0aSIKKworIywgZnV6enkKK21zZ2lkICJEbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uIgorbXNnc3RyICJOZXZ5cGlzb3ZhdCBpbmZvcm1hY2UgbyBzdGF2dSBzIFRZUEVNIgorCittc2dpZCAiT3V0cHV0IG1lc3NhZ2VzIgorbXNnc3RyICJacHLDoXZ5IHbDvXN0dXB1IgorCittc2dpZCAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKK21zZ3N0ciAiTmV2eXBpc292YXQgaW5mb3JtYWNlIG8gc3RhdnUgcyBUWVBFTSIKKworbXNnaWQgIlRZUEUxLFRZUEUyLC4uLiIKK21zZ3N0ciAiVFlQMSxUWVAyLC4uLiIKKworbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKK21zZ3N0ciAiTmVpbnN0YWxvdmF0IG9ic2x1aHUgdsO9amltZWsiCisKK21zZ2lkICJQcmludCBhbGxvYyB0cmFjZSAoaWYgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUpIgorbXNnc3RyICJWeXBpc292YXQgc3RvcHUgYWxva2FjZSAoamUtbGkgcG92b2xlbm8gcMWZaSBrb21waWxhY2kpIgorCittc2dpZCAiRm9yY2UgRU9TIG9uIHNvdXJjZXMgYmVmb3JlIHNodXR0aW5nIHRoZSBwaXBlbGluZSBkb3duIgorbXNnc3RyICIiCisKK21zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKK21zZ3N0ciAiQ0hZQkE6IG5lbHplIHZ5dHZvxZlpdCByb3VydTogJXMuXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlxuIgorbXNnc3RyICJDSFlCQTogbmVsemUgdnl0dm/FmWl0IHJvdXJ1LlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGVycm9uZW91cyBwaXBlbGluZTogJXNcbiIKK21zZ3N0ciAiVkFST1bDgU7DjTogY2h5Ym7DoSByb3VyYTogJXNcbiIKKworbXNnaWQgIkVSUk9SOiB0aGUgJ3BpcGVsaW5lJyBlbGVtZW50IHdhc24ndCBmb3VuZC5cbiIKK21zZ3N0ciAiQ0hZQkE6IGVsZW1lbnQgJ3BpcGVsaW5lJyBuZWJ5bCBuYWxlemVuLlxuIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCittc2dzdHIgIk5hc3RhdnVqaSByb3VydSBuYSBQT1pBU1RBVkVOQSAuLi5cbiIKKworIyBPbiBzdHJpa2U/Cittc2dpZCAiRVJST1I6IFBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwYXVzZS5cbiIKK21zZ3N0ciAiQ0hZQkE6IFJvdXJhIG5lY2hjZSBwb3phc3Rhdml0LlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgorbXNnc3RyICJSb3VyYSDFvmlqZSBhIG5lcG90xZllYnVqZSBQxZhFRFRPxIxFTsONIC4uLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTElORyAuLi5cbiIKK21zZ3N0ciAiUm91cmEgc2UgUMWYRURUw4HEjMONIC4uLlxuIgorCisjIE9uIHN0cmlrZT8KK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHByZXJvbGwuXG4iCittc2dzdHIgIkNIWUJBOiByb3VyYSBuZWNoY2UgcMWZZWR0w6HEjWV0LlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgorbXNnc3RyICJSb3VyYSBqZSBQxZhFRFRPxIxFTkEgLi4uXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIk5hc3RhdnVqaSByb3VybyBuYSBQxZhFSFLDgVbDgSAuLi5cbiIKKworIyBPbiBzdHJpa2U/Cittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIgorbXNnc3RyICJDSFlCQTogcm91cmEgbmVjaGNlIGhyw6F0LlxuIgorCittc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gRm9yY2luZyBFT1Mgb24gdGhlIHBpcGVsaW5lXG4iCittc2dzdHIgIiIKKworbXNnaWQgIldhaXRpbmcgZm9yIEVPUy4uLlxuIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiRU9TIHJlY2VpdmVkIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKK21zZ3N0ciAiUMWZZXJ1xaFlbsOtOiBaYXN0YXZ1amkgcm91cnUgLi4uXG4iCisKK21zZ2lkICJBbiBlcnJvciBoYXBwZW5lZCB3aGlsZSB3YWl0aW5nIGZvciBFT1NcbiIKK21zZ3N0ciAiIgorCittc2dpZCAiRXhlY3V0aW9uIGVuZGVkIGFmdGVyICUiCittc2dzdHIgIlByb3bDoWTEm27DrSBza29uxI1pbG8gcG8gJSIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUkVBRFkgLi4uXG4iCittc2dzdHIgIk5hc3RhdnVqaSByb3VydSBuYSBQxZhJUFJBVkVOQSAuLi5cbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCAuLi5cbiIKK21zZ3N0ciAiTmFzdGF2dWppIHJvdXJ1IG5hIE5VTEwgLi4uXG4iCisKKyMsIGZ1enp5Cittc2dpZCAiRnJlZWluZyBwaXBlbGluZSAuLi5cbiIKK21zZ3N0ciAiTmFzdGF2dWppIHJvdXJ1IG5hIE5VTEwgLi4uXG4iCisKKyN+IG1zZ2lkICJVc2FnZTogZ3N0LXhtbGxhdW5jaCA8ZmlsZS54bWw+IFsgZWxlbWVudC5wcm9wZXJ0eT12YWx1ZSAuLi4gXVxuIgorI34gbXNnc3RyICIiCisjfiAiUG91xb5pdMOtOiBnc3QteG1sbGF1bmNoIDxzb3Vib3IueG1sPiBbIGVsZW1lbnQudmxhc3Rub3N0PWhvZG5vdGEgLi4uIF1cbiIKKworI34gbXNnaWQgIkVSUk9SOiBwYXJzZSBvZiB4bWwgZmlsZSAnJXMnIGZhaWxlZC5cbiIKKyN+IG1zZ3N0ciAiQ0hZQkE6IHpwcmFjb3bDoXbDoW7DrSB4bWwgc291Ym9ydSAnJXMnIHNlbGhhbG8uXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogbm8gdG9wbGV2ZWwgcGlwZWxpbmUgZWxlbWVudCBpbiBmaWxlICclcycuXG4iCisjfiBtc2dzdHIgIkNIWUJBOiB2IHNvdWJvcnUgJyVzJyBuZW7DrSBlbGVtZW50IG5lanZ5xaHFocOtIMO6cm92bsSbIHBpcGVsaW5lLlxuIgorCisjLCBmdXp6eQorI34gbXNnaWQgIldBUk5JTkc6IG9ubHkgb25lIHRvcGxldmVsIGVsZW1lbnQgaXMgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIlZBUk9Ww4FOw406IHYgc291xI1hc27DqSBkb2LEmyBqZSBwb2Rwb3JvdsOhbiBqZW4gamVkZW4gZWxlbWVudCBuZWp2ecWhxaHDrSDDunJvdm7Emy4iCisKKyN+IG1zZ2lkICJFUlJPUjogY291bGQgbm90IHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAlZDogJXMuXG4iCisjfiBtc2dzdHIgIkNIWUJBOiBuZW1vaHUgenByYWNvdmF0IGFyZ3VtZW50ICVkIG5hIHDFmcOta2F6b3bDqW0gxZnDoWRrdTogJXMuXG4iCisKKyN+IG1zZ2lkICJXQVJOSU5HOiBlbGVtZW50IG5hbWVkICclcycgbm90IGZvdW5kLlxuIgorI34gbXNnc3RyICJWQVJPVsOBTsONOiBlbGVtZW50IG5henZhbsO9ICclcycgbmVuYWxlemVuLlxuIgorCisjfiBtc2dpZCAiU2F2ZSB4bWwgcmVwcmVzZW50YXRpb24gb2YgcGlwZWxpbmUgdG8gRklMRSBhbmQgZXhpdCIKKyN+IG1zZ3N0ciAiVWxvxb5pdCByZXByZXplbnRhY2kgcm91cnkgdiB4bWwgZG8gU09VQk9SdSBhIHNrb27EjWl0IgorCisjfiBtc2dpZCAiRklMRSIKKyN+IG1zZ3N0ciAiU09VQk9SIgorCisjLCBmdXp6eQorI34gbXNnaWQgIkRvIG5vdCBpbnN0YWxsIHNpZ25hbCBoYW5kbGVycyBmb3IgU0lHVVNSMSBhbmQgU0lHVVNSMiIKKyN+IG1zZ3N0ciAiTmVpbnN0YWxvdmF0IG9ic2x1aHUgdsO9amltZWsiCisKKyN+IG1zZ2lkICJFcnJvciB3cml0aW5nIHJlZ2lzdHJ5IGNhY2hlIHRvICVzOiAlcyIKKyN+IG1zZ3N0ciAiQ2h5YmEgcMWZaSB6YXBpc292w6Fuw60gY2FjaGUgcmVnaXN0cnUgZG8gJXM6ICVzIgorCisjfiBtc2dpZCAiRXJyb3IgcmUtc2Nhbm5pbmcgcmVnaXN0cnkgJXM6ICVzIgorI34gbXNnc3RyICJDaHliYSBwxZlpIG9wxJt0b3Zuw6ltIHByb2hsZWTDoXbDoW7DrSByZWdpc3RydSAlczogJXMiCisKKyN+IG1zZ2lkICJFcnJvciByZS1zY2FubmluZyByZWdpc3RyeSAlcyIKKyN+IG1zZ3N0ciAiQ2h5YmEgcMWZaSBvcMSbdG92bsOpbSBwcm9obGVkw6F2w6Fuw60gcmVnaXN0cnUgJXMiCisKKyN+IG1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQuIgorI34gbXNnc3RyICJJbnRlcm7DrSBjaHliYSBHU3RyZWFtZXJ1OiB6bcSbbmEgc3RhdnUgc2VsaGFsYS4iCisKKyN+IG1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgZGVzY3JpcHRvciBcIiVkXCIuIgorI34gbXNnc3RyICJDaHliYSBwxZlpIHrDoXBpc3UgZG8gZGVrc3JpcHRvcnUgc291Ym9ydSBcIiVkXCIuIgorCisjfiBtc2dpZCAiRmlsZSBkZXNjcmlwdG9yIFwiJWRcIiBpcyBub3QgdmFsaWQuIgorI34gbXNnc3RyICJEZXNrcmlwdG9yIHNvdWJvcnUgXCIlZFwiIG5lbsOtIHBsYXRuw70uIgorCisjfiBtc2dpZCAiRlJFRUlORyBwaXBlbGluZSAuLi5cbiIKKyN+IG1zZ3N0ciAiVVZPTMWHVUpJIHJvdXJ1IC4uLlxuIgorCisjfiBtc2dpZCAib3JpZ2luYWwgbG9jYXRpb24gb2YgZmlsZSBhcyBhIFVSSSIKKyN+IG1zZ3N0ciAicMWvdm9kbsOtIHVtw61zdMSbbsOtIHNvdWJvcnUgamFrbyBVUkkiCisKKyN+IG1zZ2lkICJEaXNhYmxlIGFjY2VsZXJhdGVkIENQVSBpbnN0cnVjdGlvbnMiCisjfiBtc2dzdHIgIlpha8OhemF0IGFrY2VsZXJvdmFuw6kgaW5zdHJ1a2NlIENQVSIKKworI34gbXNnaWQgIlNDSEVEVUxFUiIKKyN+IG1zZ3N0ciAiUEzDgU5PVkHEjCIKKworI34gbXNnaWQgIlJlZ2lzdHJ5IHRvIHVzZSIKKyN+IG1zZ3N0ciAiUmVnaXN0ciwga3RlcsO9IHBvdcW+w612YXQiCisKKyN+IG1zZ2lkICJSRUdJU1RSWSIKKyN+IG1zZ3N0ciAiUkVHSVNUUiIKKworI34gbXNnaWQgInBhdGggbGlzdCBmb3IgbG9hZGluZyBwbHVnaW5zIChzZXBhcmF0ZWQgYnkgJyVzJykiCisjfiBtc2dzdHIgInNlem5hbSBjZXN0IHBybyBuYcSNw610w6Fuw60gbW9kdWzFryAob2RkxJtsZW7DvSAnJXMnKSIKKworI34gbXNnaWQgIlNjaGVkdWxlciB0byB1c2UgKGRlZmF1bHQgaXMgJyVzJykiCisjfiBtc2dzdHIgIlBsw6Fub3ZhxI0sIGt0ZXLDvSBwb3XFvsOtdmF0IChpbXBsaWNpdG7DrSBqZSAnJXMnKSIKKworI34gbXNnaWQgIlRoZXJlIGlzIG5vIGVsZW1lbnQgcHJlc2VudCB0byBoYW5kbGUgdGhlIHN0cmVhbSdzIG1pbWUgdHlwZSAlcy4iCisjfiBtc2dzdHIgIk5lbsOtIHDFmcOtdG9tZW4gxb7DoWTDvSBlbGVtZW50IHBybyBvYnNsb3XFvmVuw60gcHJvdWR1IHMgdHlwZW0gbWltZSAlcy4iCisKKyN+IG1zZ2lkICIiCisjfiAiRXhlY3V0aW9uIGVuZGVkIGFmdGVyICVzIGl0ZXJhdGlvbnMgKHN1bSAlcyBucywgYXZlcmFnZSAlcyBucywgbWluICVzIG5zLCAiCisjfiAibWF4ICVzIG5zKS5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIlByb3bDoWTEm27DrSBza29uxI1pbG8gcG8gJXMgaXRlcmFjw61jaCAoY2Vsa2VtICVzIG5zLCBwcsWvbcSbciAlcyBucywgbWluICVzICIKKyN+ICJucywgbWF4ICVzIG5zKS5cbiIKKworI34gbXNnaWQgIk51bWJlciBvZiB0aW1lcyB0byBpdGVyYXRlIHBpcGVsaW5lIgorI34gbXNnc3RyICJLb2xpa3LDoXQgaXRlcm92YXQgcm91cnUiCisKKyN+IG1zZ2lkICIgICAgICAgICBUcnlpbmcgdG8gcnVuIGFueXdheS5cbiIKKyN+IG1zZ3N0ciAiICAgICAgICAgUMWZZXN0byBzZSBqaSBwb2tvdcWhw61tIHNwdXN0aXQuXG4iCisKKyN+IG1zZ2lkICJBZGRlZCBwbHVnaW4gJXMgd2l0aCAlZCAlcy5cbiIKKyN+IG1zZ3N0ciAiUMWZaWTDoW4gbW9kdWwgJXMgcyAlZCAlcy5cbiIKKworI34gbXNnaWQgIkFkZGVkIHBhdGggICAlcyB0byAlcyBcbiIKKyN+IG1zZ3N0ciAiUMWZaWTDoW5hIGNlc3RhICVzIGRvICVzIFxuIgorCisjfiBtc2dpZCAiUmVidWlsZGluZyAlcyAoJXMpIC4uLlxuIgorI34gbXNnc3RyICJabm92dSBzZXN0YXZ1amkgJXMgKCVzKSAuLi5cbiIKKworI34gbXNnaWQgIlRyeWluZyB0byBsb2FkICVzIC4uLlxuIgorI34gbXNnc3RyICJQb2tvdcWhw61tIHNlIG5hxI3DrXN0ICVzIC4uLlxuIgorCisjfiBtc2dpZCAiRXJyb3IgbG9hZGluZyAlc1xuIgorI34gbXNnc3RyICJDaHliYSBwxZlpIG5hxI3DrXTDoW7DrSAlc1xuIgorCisjfiBtc2dpZCAiTG9hZGVkICVkIHBsdWdpbnMgd2l0aCAlZCAlcy5cbiIKKyN+IG1zZ3N0ciAiTmHEjXRlbm8gJWQgbW9kdWzFryBzICVkICVzLlxuIgpkaWZmIC0tZ2l0IGEvcG8vZGEuZ21vIGIvcG8vZGEuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NGU0MjQKLS0tIC9kZXYvbnVsbAorKysgYi9wby9kYS5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vZGEucG8gYi9wby9kYS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDc0ZGFjCi0tLSAvZGV2L251bGwKKysrIGIvcG8vZGEucG8KQEAgLTAsMCArMSwxMjU1IEBACisjIHRyYW5zbGF0aW9uIG9mIGdzdHJlYW1lciB0byBEYW5pc2gKKyMgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ3N0cmVhbWVyIHBhY2thZ2UuCisjCisjIE1vZ2VucyBKw6ZnZXIgPG1vZ2Vuc2phZWdlckBnbWFpbC5jb20+LCAyMDEwLgorIyBNb2dlbnMgSmFlZ2VyIDxtb2dlbnNqYWVnZXJAZ21haWwuY29tPiwgMjAwNywgMjAxMC4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdzdHJlYW1lciAwLjEwLjMwLjNcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wOS0yOSAxNDo1NSswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0xMS0wNiAyMjo1MiswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBNb2dlbnMgSmFlZ2VyIDxtb2dlbnNqYWVnZXJAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IERhbmlzaCA8ZGFuc2tAZGFuc2stZ3J1cHBlbi5kaz5cbiIKKyJMYW5ndWFnZTogZGFcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyI+XG4iCisiXG4iCisiPlxuIgorIlBsdXJhbC1Gb3JtczogIG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKyJYLUdlbmVyYXRvcjogTG9rYWxpemUgMS4wXG4iCisKK21zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCittc2dzdHIgIlVkc2tyaXYgR3N0cmVhbWVyIHZlcnNpb25zbnVtbWVyIgorCittc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCittc2dzdHIgIkfDuHIgYWxsZSBhZHZhcnNsZXIgZmF0YWxlIgorCittc2dpZCAiUHJpbnQgYXZhaWxhYmxlIGRlYnVnIGNhdGVnb3JpZXMgYW5kIGV4aXQiCittc2dzdHIgIlVkc2tyaXYgdGlsZ8OmbmdlbGlnZSBmZWpsc8O4Z25pbmdza2F0ZWdvcmllciBvZyBhZnNsdXQiCisKK21zZ2lkICIiCisiRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmcm9tIDEgKG9ubHkgZXJyb3IpIHRvIDUgKGFueXRoaW5nKSBvciAwIGZvciBubyBvdXRwdXQiCittc2dzdHIgIiIKKyJTdGFuZGFyZCBmZWpsc8O4Z25pbmdzbml2ZWF1IGZyYSAxIChrdW4gZmVqbCkgdGlsIDUgKGFsdCkgZWxsZXIgMCBmb3IgaW5nZW4gIgorInVkZGF0YSIKKworbXNnaWQgIkxFVkVMIgorbXNnc3RyICJOSVZFQVUiCisKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCisidGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgorbXNnc3RyICIiCisiS29tbWFzZXBhcmVyZXQgbGlzdGUgbWVkIGthdGVnb3JpX25hdm46bml2ZWF1cGFyIHRpbCBhdCBpbmRzdGlsbGUgc3BlY2lmaWtrZSAiCisibml2ZWF1ZXIgZm9yIGRlIGluZGl2aWR1ZWxsZSBrYXRlZ29yaWVyLiBFa3NlbXBlbDogR1NUX0FVVE9QTFVHOjUsIgorIkdTVF9FTEVNRU5UXyo6MyIKKworbXNnaWQgIkxJU1QiCittc2dzdHIgIkxJU1RFIgorCittc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCittc2dzdHIgIkTDqWFrdGl2ZXIgYnJ1ZyBhZiBmYXJ2ZXIgdmVkIGZlamxzw7hnbmluZ3MgdWRkYXRhIgorCittc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCittc2dzdHIgIkTDqWFrdGl2ZXIgZmVqbHPDuGduaW5nIgorCittc2dpZCAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCittc2dzdHIgIkFrdGl2w6lyIHVkZsO4cmxpZyBkaWFnbm9zdGlrIHZlZCBpbmRsw6ZzbmluZyBhZiBtb2R1bGVyIgorCittc2dpZCAiQ29sb24tc2VwYXJhdGVkIHBhdGhzIGNvbnRhaW5pbmcgcGx1Z2lucyIKK21zZ3N0ciAiS29sb24tc2VwYXJlcmVkZSBzdGllciBkZXIgaW5kZWhvbGRlciBtb2R1bGVyIgorCittc2dpZCAiUEFUSFMiCittc2dzdHIgIlPDmEdFU1RJRVIiCisKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCisiZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgorbXNnc3RyICIiCisiS29tbWFzZXBhcmVyZXQgbGlzdGUgYWYgbW9kdWxlciBkZXIgc2thbCBpbmRsw6ZzZXMgcMOlIGZvcmjDpW5kIHVkIG92ZXIgZGVtIGRlciAiCisiZXIgZ2VtdCBpIGxpc3RlbiBtZWQgbWlsasO4dmFyaWFibGVyIEdTVF9QTFVHSU5fUEFUSCIKKworbXNnaWQgIlBMVUdJTlMiCittc2dzdHIgIk1PRFVMRVIiCisKK21zZ2lkICJEaXNhYmxlIHRyYXBwaW5nIG9mIHNlZ21lbnRhdGlvbiBmYXVsdHMgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIgorbXNnc3RyICJEw6lha3RpdmVyIGluZGZhbmduaW5nIGFmIHNlZ21lbnRmZWpsIHVuZGVyIGluZGzDpnNuaW5nIGFmIG1vZHVsZXIiCisKK21zZ2lkICJEaXNhYmxlIHVwZGF0aW5nIHRoZSByZWdpc3RyeSIKK21zZ3N0ciAiRMOpYWt0aXZlciBvcGRhdGVyaW5nIGFmIHJlZ2lzdHJhdHVyIgorCittc2dpZCAiRGlzYWJsZSBzcGF3bmluZyBhIGhlbHBlciBwcm9jZXNzIHdoaWxlIHNjYW5uaW5nIHRoZSByZWdpc3RyeSIKK21zZ3N0ciAiRMOpYWt0aXZlciBmb3JncmVuaW5nIGFmIGhqw6ZscGVwcm9jZXMgdW5kZXIgc2thbm5pbmcgYWYgcmVnaXN0cmF0dXIiCisKK21zZ2lkICJHU3RyZWFtZXIgT3B0aW9ucyIKK21zZ3N0ciAiR1N0cmVhbWVyIGluZHN0aWxsaW5nZXIiCisKK21zZ2lkICJTaG93IEdTdHJlYW1lciBPcHRpb25zIgorbXNnc3RyICJWaXMgR3N0cmVhbWVyIGluZHN0aWxsaW5nZXIiCisKK21zZ2lkICJVbmtub3duIG9wdGlvbiIKK21zZ3N0ciAiVWtlbmR0IGluZHN0aWxsaW5nIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIgb3BkYWdlZGUgZW4gZ2VuZXJlbCBmZWpsIGkga2VybmViaWJsaW90ZWtldC4iCisKK21zZ2lkICIiCisiR1N0cmVhbWVyIGRldmVsb3BlcnMgd2VyZSB0b28gbGF6eSB0byBhc3NpZ24gYW4gZXJyb3IgY29kZSB0byB0aGlzIGVycm9yLiIKK21zZ3N0ciAiIgorIkdTdHJlYW1lci11ZHZpa2xlcm5lIGhhciBlbmRudSBpa2tlIG7DpWV0IGF0IHRpbGRlbGUgZGVubmUgZmVqbCBlbiBmZWpsa29kZS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKK21zZ3N0ciAiSW50ZXJuIEdTdHJlYW1lci1mZWpsOiBrb2RlIGlra2UgaW1wbGVtZW50ZXJldC4iCisKK21zZ2lkICIiCisiR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkIGFuZCBzb21lIGVsZW1lbnQgZmFpbGVkIHRvIHBvc3QgYSAiCisicHJvcGVyIGVycm9yIG1lc3NhZ2Ugd2l0aCB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZS4iCittc2dzdHIgIiIKKyJHU3RyZWFtZXIgZmVqbDogdGlsc3RhbmRzc2tpZnQgZmVqbGVkZSwgb2cgZGV0IG1pc2x5a2tlZGVzIG5vZ2xlIHByb2Nlc3NlciAiCisiYXQgc2VuZGUgZW4gb3JkZW50bGlnIGZlamxtZWRkZWxlbHNlIG1lZCBiZWdydW5kZWxzZSBmb3IgZmVqbGVuLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogcGFkIHByb2JsZW0uIgorbXNnc3RyICJJbnRlcm4gR1N0cmVhbWVyIGZlamw6IGtvbnRha3Rwcm9ibGVtLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGhyZWFkIHByb2JsZW0uIgorbXNnc3RyICJJbnRlcm4gR1N0cmVhbWVyIGZlamw6IHByb2JsZW0gbWVkIHRyw6VkLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCittc2dzdHIgIkludGVybiBHU3RyZWFtZXIgZmVqbDogZm9yaGFuZGxpbmdzcHJvYmxlbS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgorbXNnc3RyICJJbnRlcm4gR1N0cmVhbWVyIGZlamw6IGjDpm5kZWxzZXNwcm9ibGVtLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2VlayBwcm9ibGVtLiIKK21zZ3N0ciAiSW50ZXJuIEdTdHJlYW1lciBmZWpsOiBzw7hnZXByb2JsZW0uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgorbXNnc3RyICJJbnRlcm4gR1N0cmVhbWVyIGZlamw6IGthcGFiaWxpdGV0c3Byb2JsZW0uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4iCittc2dzdHIgIkludGVybiBHU3RyZWFtZXIgZmVqbDogbcOmcmthdHByb2JsZW0uIgorCittc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKK21zZ3N0ciAiRGluIEdTdHJlYW1lci1pbnN0YWxsYXRpb24gbWFuZ2xlciBldCBtb2R1bC4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIgorbXNnc3RyICJJbnRlcm4gR1N0cmVhbWVyIGZlamw6IHRpZHNwcm9ibGVtLiIKKworbXNnaWQgIiIKKyJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCisiZGlzYWJsZWQuIgorbXNnc3RyICIiCisiRGVubmUgdGlsZsO4amVsc2UgcHLDuHZlciBhdCBicnVnZSBHU3RyZWFtZXItZnVua3Rpb25hbGl0ZXQsIGRlciBlciBibGV2ZXQgIgorImZyYXZhbGd0LiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3VwcG9ydGluZyBsaWJyYXJ5IGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIG9wZGFnZWRlIGVuIGZlamwgaSBkZXQgZ2VuZXJlbGxlIGhqw6ZscGViaWJsaW90ZWsuIgorCittc2dpZCAiQ291bGQgbm90IGluaXRpYWxpemUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiS3VubmUgaWtrZSBpbml0aWVyZSBoasOmbHBlYmlibGlvdGVrZXQuIgorCittc2dpZCAiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIkt1bm5lIGlra2UgbHVra2UgaGrDpmxwZWJpYmxpb3Rla2V0LiIKKworbXNnaWQgIkNvdWxkIG5vdCBjb25maWd1cmUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiS3VubmUgaWtrZSBrb25maWd1cmVyZSBoasOmbHBlYmlibGlvdGVrZXQuIgorCittc2dpZCAiRW5jb2RpbmcgZXJyb3IuIgorbXNnc3RyICJLb2RuaW5nc2ZlamwuIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCByZXNvdXJjZSBlcnJvci4iCittc2dzdHIgIkdTdHJlYW1lciBvcGRhZ2VkZSBlbiBnZW5lcmVsIHJlc3NvdXJjZWZlamwuIgorCittc2dpZCAiUmVzb3VyY2Ugbm90IGZvdW5kLiIKK21zZ3N0ciAiUmVzc291cmNlIGlra2UgZnVuZGV0LiIKKworbXNnaWQgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCittc2dzdHIgIlJlc3NvdXJjZSBvcHRhZ2V0IGVsbGVyIGlra2UgdGlsIHLDpWRpZ2hlZC4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCittc2dzdHIgIkt1bm5lIGlra2Ugw6VibmUgcmVzc291cmNlIGZvciBsw6ZzbmluZy4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCittc2dzdHIgIkt1bm5lIGlra2Ugw6VibmUgcmVzc291cmNlIGZvciBza3Jpdm5pbmcuIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgorbXNnc3RyICJLdW5uZSBpa2tlIMOlYm5lIHJlc3NvdXJjZSBmb3IgbMOmc25pbmcgb2cgc2tyaXZuaW5nLiIKKworbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSByZXNvdXJjZS4iCittc2dzdHIgIkt1bm5lIGlra2UgbHVra2UgcmVzc291cmNlLiIKKworbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gcmVzb3VyY2UuIgorbXNnc3RyICJLdW5uZSBpa2tlIGzDpnNlIGZyYSByZXNzb3VyY2UuIgorCittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKK21zZ3N0ciAiS3VubmUgaWtrZSBza3JpdmUgdGlsIHJlc3NvdXJjZS4iCisKK21zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKK21zZ3N0ciAiS3VubmUgaWtrZSB1ZGbDuHJlIHPDuGduaW5nIHDDpSByZXNzb3VyY2UuIgorCittc2dpZCAiQ291bGQgbm90IHN5bmNocm9uaXplIG9uIHJlc291cmNlLiIKK21zZ3N0ciAiS3VubmUgaWtrZSBzeW5rcm9uaXNlcmUgcMOlIHJlc3NvdXJjZS4iCisKK21zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKK21zZ3N0ciAiS3VubmUgaWtrZSBoZW50ZS9zw6Z0dGUgaW5kc3RpbGxpbmdlciBmcmEvcMOlIHJlc3NvdXJjZS4iCisKK21zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCittc2dzdHIgIkRlciBlciBpa2tlIG1lcmUgbGVkaWcgcGxhZHMgcMOlIHJlc3NvdXJjZW4uIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdHJlYW0gZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIgb3BkYWdlZGUgZW4gZ2VuZXJlbCBmZWpsIGkgbWVkaWVzdHLDuG1tZW4uIgorCittc2dpZCAiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBoYW5kbGluZyBvZiB0aGlzIHN0cmVhbS4gUGxlYXNlIGZpbGUgYSBidWcuIgorbXNnc3RyICIiCisiRWxlbWVudGV0IGhhciBpa2tlIGltcGxlbWVudGVyZXQgaMOlbmR0ZXJpbmcgYWYgZGVubmUgbWVkaWVzdHLDuG0uIFNlbmQgZW4gIgorImZlamxyYXBwb3J0LiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgorbXNnc3RyICJLdW5uZSBpa2tlIGJlc3RlbW1lIG1lZGllc3Ryw7htdHlwZS4iCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgZWxlbWVudC4iCittc2dzdHIgIk1lZGllc3Ryw7htbWVuIGVyIGVuIGFuZGVuIHR5cGUgZW5kIGRlbiwgZGV0dGUgZWxlbWVudCBrYW4gaMOlbmR0ZXJlLiIKKworbXNnaWQgIlRoZXJlIGlzIG5vIGNvZGVjIHByZXNlbnQgdGhhdCBjYW4gaGFuZGxlIHRoZSBzdHJlYW0ncyB0eXBlLiIKK21zZ3N0ciAiIgorIkRlciBlciBpa2tlIG5vZ2V0IGtvZGVmb3JtYXQgdGlsc3RlZGUsIGRlciBrYW4gaMOlbmR0ZXJlIGVuIG1lZGllc3Ryw7htIGFmICIKKyJkZW5uZSB0eXBlLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZWNvZGUgc3RyZWFtLiIKK21zZ3N0ciAiS3VubmUgaWtrZSBhZmtvZGUgbWVkaWVzdHLDuG1tZW4uIgorCittc2dpZCAiQ291bGQgbm90IGVuY29kZSBzdHJlYW0uIgorbXNnc3RyICJLdW5uZSBpa2tlIGluZGtvZGUgbWVkaWVzdHLDuG1tZW4uIgorCittc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIkt1bm5lIGlra2UgYWZtdWx0aXBsZWtzZSBtZWRpZXN0csO4bW1lbi4iCisKK21zZ2lkICJDb3VsZCBub3QgbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIkt1bm5lIGlra2UgbXVsdGlwbGVrc2UgbWVkaWVzdHLDuG1tZW4uIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiIKK21zZ3N0ciAiTWVkaWVzdHLDuG1tZW4gZXIgaSBldCBmb3JrZXJ0IGZvcm1hdC4iCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiTWVkaWVzdHLDuG1tZW4gZXIga29kZXQgb2cgYWZrb2RuaW5nIGVyIGlra2UgdW5kZXJzdMO4dHRldC4iCisKK21zZ2lkICIiCisiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGNhbid0IGJlIGRlY3J5cHRlZCBiZWNhdXNlIG5vIHN1aXRhYmxlIGtleSBoYXMgIgorImJlZW4gc3VwcGxpZWQuIgorbXNnc3RyICIiCisiTWVkaWVzdHLDuG1tZW4gZXIga29kZXQgb2cga2FuIGlra2UgYWZrb2RlcyBmb3JkaSBkZXIgaWtrZSBlciBnaXZldCBlbiAiCisicGFzc2VuZGUgbsO4Z2xlLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMuIgorbXNnc3RyICJJbmdlbiBmZWpsbWVkZGVsZWxzZSBmb3IgZG9tw6ZuZSAlcy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKK21zZ3N0ciAiSW5nZW4gc3RhbmRhcmQgZmVqbG1lZGRlbGVsc2UgZm9yIGRvbcOmbmUgJXMgb2cga29kZSAlZC4iCisKK21zZ2lkICJTZWxlY3RlZCBjbG9jayBjYW5ub3QgYmUgdXNlZCBpbiBwaXBlbGluZS4iCittc2dzdHIgIlZhbGd0IHRpZCBrYW4gaWtrZSBicnVnZXMgaSByw7hybGVkbmluZ2VuLiIKKworbXNnaWQgInRpdGxlIgorbXNnc3RyICJ0aXRlbCIKKworbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUiCittc2dzdHIgImFsbWluZGVsaWd0IGJydWd0IHRpdGVsIgorCittc2dpZCAidGl0bGUgc29ydG5hbWUiCittc2dzdHIgInNvcnRlcmluZ3NzdHJlbmcgZm9yIHRpdGVsIgorCittc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiYWxtaW5kZWxpZ3QgYnJ1Z3QgdGl0ZWwgdGlsIHNvcnRlcmluZ3NicnVnIgorCittc2dpZCAiYXJ0aXN0IgorbXNnc3RyICJrdW5zdG5lciIKKworbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAicGVyc29uZXIgYW5zdmFybGlnZSBmb3Igb3B0YWdlbHNlbiIKKworbXNnaWQgImFydGlzdCBzb3J0bmFtZSIKK21zZ3N0ciAic29ydGVyaW5nc3N0cmVuZyBmb3Iga3Vuc3RuZXIiCisKK21zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgInBlcnNvbiwgZGVyIGVyIGFuc3ZhcmxpZyBmb3Igb3B0YWdlbHNlbiwgdGlsIHNvcnRlcmluZ3NicnVnIgorCittc2dpZCAiYWxidW0iCittc2dzdHIgImFsYnVtIgorCittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiCittc2dzdHIgImFsYnVtIGRlciBpbmRlaG9sZGVyIGRpc3NlIGRhdGEiCisKK21zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKK21zZ3N0ciAic29ydGVyaW5nc3N0cmVuZyBmb3IgYWxidW0iCisKK21zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiYWxidW0gZGVyIGluZGVob2xkZXIgZGlzc2UgZGF0YSwgdGlsIHNvcnRlcmluZ3NicnVnIgorCittc2dpZCAiYWxidW0gYXJ0aXN0IgorbXNnc3RyICJhbGJ1bWt1bnN0bmVyIgorCittc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgorbXNnc3RyICJLdW5zdG5lcmVuIGZvciBoZWxlIGFsYnVtbWV0LCBzb20gZGV0IHNrYWwgdmlzZXMiCisKK21zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgInNvcnRlcmluZ3NzdHJlbmcgZm9yIGFsYnVta3Vuc3RuZXIiCisKK21zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiCittc2dzdHIgIkt1bnN0bmVyZW4gZm9yIGhlbGUgYWxidW1tZXQsIHRpbCBzb3J0ZXJpbmdzYnJ1ZyIKKworbXNnaWQgImRhdGUiCittc2dzdHIgImRhdG8iCisKK21zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCittc2dzdHIgImRhdG8gZm9yIG9wcmV0dGVsc2UgYWYgZGF0YSAoc29tIGkgZW4gR3JlZ29yaWFuc2sgZGF0b3N0cnVrdHVyKSIKKworbXNnaWQgImRhdGV0aW1lIgorbXNnc3RyICJkYXRvIG9nIHRpZCIKKworbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKK21zZ3N0ciAiZGF0byBvZyB0aWQgZm9yIG9wcmV0dGVsc2UgYWYgZGF0YSAoc29tIGVuIEdzdERhdGUgVGltZS1zdHJ1a3R1cikiCisKK21zZ2lkICJnZW5yZSIKK21zZ3N0ciAiZ2VucmUiCisKK21zZ2lkICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKK21zZ3N0ciAiZ2VucmUgZGlzc2UgZGF0YSB0aWxow7hyZXIiCisKK21zZ2lkICJjb21tZW50IgorbXNnc3RyICJrb21tZW50YXIiCisKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKK21zZ3N0ciAiZnJpIGtvbW1lbnRhcnRla3N0IHRpbCBkYXRhZW5lIgorCittc2dpZCAiZXh0ZW5kZWQgY29tbWVudCIKK21zZ3N0ciAidWR2aWRldCBrb21tZW50YXIiCisKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCittc2dzdHIgIiIKKyJmcmkga29tbWVudGFydGVrc3QgdGlsIGRhdGFlbmUgaSB0YXN0ZT12w6ZyZGkgZWxsZXIgdGFzdGVbZW5dPWtvbW1lbnRhciBmb3JtIgorCittc2dpZCAidHJhY2sgbnVtYmVyIgorbXNnc3RyICJzcG9ybnVtbWVyIgorCittc2dpZCAidHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgInNwb3JudW1tZXIgaW5kZW4gZm9yIGVuIHNhbWxpbmciCisKK21zZ2lkICJ0cmFjayBjb3VudCIKK21zZ3N0ciAic3BvcnTDpmxsaW5nIgorCittc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKK21zZ3N0ciAidMOmbGxpbmcgYWYgc3BvciBpbmRlbiBmb3IgZGVuIHNhbWxpbmcgZGV0dGUgc3BvciB0aWxow7hyZXIiCisKK21zZ2lkICJkaXNjIG51bWJlciIKK21zZ3N0ciAic2tpdmVudW1tZXIiCisKK21zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICJza2l2ZW51bW1lciBpbmRlbiBmb3IgZW4gc2FtbGluZyIKKworbXNnaWQgImRpc2MgY291bnQiCittc2dzdHIgInNraXZldMOmbGxpbmciCisKK21zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKK21zZ3N0ciAidMOmbGxpbmcgYWYgc2tpdmVyIGluZGVuZm9yIGRlbiBzYW1saW5nIGRlbm5lIHNraXZlIHRpbGjDuHJlciIKKworbXNnaWQgImxvY2F0aW9uIgorbXNnc3RyICJzdGVkIgorCittc2dpZCAiIgorIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgorImlzIGhvc3RlZCkiCittc2dzdHIgIiIKKyJNZWRpZXRzIG9wcmluZGVsc2Ugc29tIGVuIFVSSSAoYWRyZXNzZW4sIGh2b3IgZGVuIG9yaWdpbmFsZSBmaWwgZWxsZXIgc3Ryw7htICIKKyJlcikiCisKK21zZ2lkICJob21lcGFnZSIKK21zZ3N0ciAiaGplbW1lc2lkZSIKKworbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCittc2dzdHIgIk1lZGlldHMgaGplbW1lc2lkZSAoZHZzLiBoamVtbWVzaWRlIGZvciBrdW5zdG5lciBlbGxlciBmaWxtKSIKKworbXNnaWQgImRlc2NyaXB0aW9uIgorbXNnc3RyICJiZXNrcml2ZWxzZSIKKworbXNnaWQgInNob3J0IHRleHQgZGVzY3JpYmluZyB0aGUgY29udGVudCBvZiB0aGUgZGF0YSIKK21zZ3N0ciAia29ydCB0ZWtzdCBkZXIgYmVza3JpdmVyIGluZGhvbGRldCBpIGRhdGFlbmUiCisKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICJ2ZXJzaW9uIgorCittc2dpZCAidmVyc2lvbiBvZiB0aGlzIGRhdGEiCittc2dzdHIgInZlcnNpb24gYWYgZGlzc2UgZGF0YSIKKworbXNnaWQgIklTUkMiCittc2dzdHIgIklTUkMiCisKK21zZ2lkICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCittc2dzdHIgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgorCittc2dpZCAib3JnYW5pemF0aW9uIgorbXNnc3RyICJvcmdhbmlzYXRpb24iCisKK21zZ2lkICJjb3B5cmlnaHQiCittc2dzdHIgIm9waGF2c3JldCIKKworbXNnaWQgImNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgIm9waGF2c3JldHNub3RpdHMgZm9yIGRhdGFlbmUiCisKK21zZ2lkICJjb3B5cmlnaHQgdXJpIgorbXNnc3RyICJVUkkgbWVkIG9waGF2c3JldCIKKworbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiVVJJIHRpbCBvcGhhdnNyZXRzbm90aXRzIGZvciBkYXRhZW5lIgorCisjLCBmdXp6eQorbXNnaWQgImVuY29kZWQgYnkiCittc2dzdHIgImluZGtvZGVyIgorCittc2dpZCAibmFtZSBvZiB0aGUgZW5jb2RpbmcgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiIKK21zZ3N0ciAiIgorCittc2dpZCAiY29udGFjdCIKK21zZ3N0ciAia29udGFrdCIKKworbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCittc2dzdHIgImtvbnRha3RpbmZvcm1hdGlvbiIKKworbXNnaWQgImxpY2Vuc2UiCittc2dzdHIgImxpY2VucyIKKworbXNnaWQgImxpY2Vuc2Ugb2YgZGF0YSIKK21zZ3N0ciAibGljZW5zIGZvciBkYXRhIgorCittc2dpZCAibGljZW5zZSB1cmkiCittc2dzdHIgIlVSSSBtZWQgbGljZW5zIgorCittc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJVUkkgdGlsIGxpY2VucyBmb3IgZGF0YSIKKworbXNnaWQgInBlcmZvcm1lciIKK21zZ3N0ciAib3B0csOmZGVuZGUiCisKK21zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKK21zZ3N0ciAicGVyc29uZXIgZGVyIG9wdHLDpmRlciIKKworbXNnaWQgImNvbXBvc2VyIgorbXNnc3RyICJrb21wb25pc3QiCisKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciCittc2dzdHIgInBlcnNvbihlcikgZGVyIGtvbXBvbmVyZWRlIG9wdGFnZWxzZW4iCisKK21zZ2lkICJkdXJhdGlvbiIKK21zZ3N0ciAidmFyaWdoZWQiCisKK21zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKK21zZ3N0ciAibMOmbmdkZSBpIEdTdHJlYW1lci10aWRzZW5oZWRlciAobmFub3Nla3VuZGVyKSIKKworbXNnaWQgImNvZGVjIgorbXNnc3RyICJrb2RlZm9ybWF0IgorCittc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJkZXQga29kZWZvcm1hdCBkYXRhZW5lIGVyIGdlbXQgaSIKKworbXNnaWQgInZpZGVvIGNvZGVjIgorbXNnc3RyICJrb2RuaW5nc2Zvcm1hdCBmb3IgYmlsbGVkZXIiCisKK21zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImRldCBrb2RlZm9ybWF0IHZpZGVvZGF0YWVuZSBlciBnZW10IGkiCisKK21zZ2lkICJhdWRpbyBjb2RlYyIKK21zZ3N0ciAia29kbmluZ3Nmb3JtYXQgZm9yIGx5ZCIKKworbXNnaWQgImNvZGVjIHRoZSBhdWRpbyBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiZGV0IGx5ZGtvZGVmb3JtYXQgZGF0YWVuZSBlciBnZW10IGkiCisKK21zZ2lkICJzdWJ0aXRsZSBjb2RlYyIKK21zZ3N0ciAia29kbmluZ3Nmb3JtYXQgZm9yIHVuZGVydGVrc3RlciIKKworbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiZGV0IGtvZGVmb3JtYXQsIHVuZGVydGVrc3Rlcm5lIGVyIGdlbXQgaSIKKworbXNnaWQgImNvbnRhaW5lciBmb3JtYXQiCittc2dzdHIgImJlaG9sZGVyZm9ybWF0IgorCittc2dpZCAiY29udGFpbmVyIGZvcm1hdCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImRldCBiZWhvbGRlcmZvcm1hdCBkYXRhZW5lIGVyIGdlbXQgaSIKKworbXNnaWQgImJpdHJhdGUiCittc2dzdHIgImJpdGhhc3RpZ2hlZCIKKworbXNnaWQgImV4YWN0IG9yIGF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgInByw6ZjaXMgZWxsZXIgZ2VubmVtc25pdGxpZyBiaXRoYXN0aWdoZWQgaSBiaXQvc2VrdW5kIgorCittc2dpZCAibm9taW5hbCBiaXRyYXRlIgorbXNnc3RyICJmYWt0aXNrIGJpdGhhc3RpZ2hlZCIKKworbXNnaWQgIm5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgImZha3Rpc2sgYml0aGFzdGlnaGVkIGkgYml0L3Nla3VuZCIKKworbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKK21zZ3N0ciAibWluaW1hbCBiaXRoYXN0aWdoZWQiCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJtaW5pbWFsIGJpdGhhc3RpZ2hlZCBpIGJpdC9zZWt1bmQiCisKK21zZ2lkICJtYXhpbXVtIGJpdHJhdGUiCittc2dzdHIgIm1ha3NpbWFsIGJpdGhhc3RpZ2hlZCIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgIm1ha3NpbWFsIGJpdGhhc3RpZ2hlZCBpIGJpdC9zZWt1bmQiCisKK21zZ2lkICJlbmNvZGVyIgorbXNnc3RyICJpbmRrb2RlciIKKworbXNnaWQgImVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCittc2dzdHIgImluZGtvZGVyIGRlciBicnVnZXMgdGlsIGRlbm5lIG1lZGllc3Ryw7htIgorCittc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgorbXNnc3RyICJpbmRrb2RlciB2ZXJzaW9uIgorCittc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAia29kZXJ2ZXJzaW9uIGJydWd0IHRpbCBpbmRrb2RuaW5nIGFmIGRlbm5lIG1lZGllc3Ryw7htIgorCittc2dpZCAic2VyaWFsIgorbXNnc3RyICJzZXJpZSIKKworbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCittc2dzdHIgInNlcmllbnVtbWVyIHDDpSBzcG9yIgorCittc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgorbXNnc3RyICJnZW5zcGlsbmluZ3Nmb3JzdMOmcmtuaW5nIHNwb3Jmb3JzdMOmcmtuaW5nIgorCittc2dpZCAidHJhY2sgZ2FpbiBpbiBkYiIKK21zZ3N0ciAic3BvcmZvcnN0w6Zya25pbmcgaSBkQiIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgcGVhayIKK21zZ3N0ciAiZ2Vuc3BpbG5pbmdzZm9yc3TDpnJrbmluZyBzcG9yIG1ha3NpbXVtIgorCittc2dpZCAicGVhayBvZiB0aGUgdHJhY2siCittc2dzdHIgInNwb3JldHMgbWFrc2ltdW0iCisKK21zZ2lkICJyZXBsYXlnYWluIGFsYnVtIGdhaW4iCittc2dzdHIgImdlbnNwaWxuaW5nc2ZvcnN0w6Zya25pbmcgYWxidW1mb3JzdMOmcmtuaW5nIgorCittc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKK21zZ3N0ciAiYWxidW1mb3JzdMOmcmtuaW5nIGkgZEIiCisKK21zZ2lkICJyZXBsYXlnYWluIGFsYnVtIHBlYWsiCittc2dzdHIgImdlbnNwaWxuaW5nc2ZvcnN0w6Zya25pbmcgYWxidW0gbWFrc2ltdW0iCisKK21zZ2lkICJwZWFrIG9mIHRoZSBhbGJ1bSIKK21zZ3N0ciAiYWxidW1tZXRzIG1ha3NpbXVtIgorCittc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCittc2dzdHIgImdlbnNwaWxuaW5nc2ZvcnN0w6Zya25pbmcgcmVmZXJlbmNlbml2ZWF1IgorCittc2dpZCAicmVmZXJlbmNlIGxldmVsIG9mIHRyYWNrIGFuZCBhbGJ1bSBnYWluIHZhbHVlcyIKK21zZ3N0ciAicmVmZXJlbmNlbml2ZWF1IGZvciBzcG9yIG9nIGFsYnVtcyBmb3JzdMOmcmtuaW5nc3bDpnJkaWVyIgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSIKK21zZ3N0ciAic3Byb2drb2RlIgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIgorbXNnc3RyICJzcHJvZ2tvZGUgZm9yIGRlbm5lIG1lZGllc3Ryw7htLCBpIG92ZXJlbnNzdGVtbWVsc2UgbWVkIElTTy02MzktMSIKKworbXNnaWQgImltYWdlIgorbXNnc3RyICJiaWxsZWRlIgorCittc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiYmlsbGVkZSByZWxhdGVyZXQgdGlsIGRlbm5lIG1lZGllc3Ryw7htIgorCisjLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKK21zZ2lkICJwcmV2aWV3IGltYWdlIgorbXNnc3RyICJmb3Jow6VuZHN2aXMgYmlsbGVkZSIKKworbXNnaWQgInByZXZpZXcgaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiZm9yaMOlbmRzdmlzIGJpbGxlZGUgcmVsYXRlcmV0IHRpbCBkZW5uZSBtZWRpZXN0csO4bSIKKworbXNnaWQgImF0dGFjaG1lbnQiCittc2dzdHIgInZlZGjDpmZ0bmluZyIKKworbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgImZpbCB2ZWRow6ZmdGV0IGRlbm5lIG1lZGllc3Ryw7htIgorCittc2dpZCAiYmVhdHMgcGVyIG1pbnV0ZSIKK21zZ3N0ciAic2xhZyBwci4gbWludXQiCisKK21zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKK21zZ3N0ciAiYW50YWwgc2xhZyBwci4gbWludXQgdmVkIGF1ZGlvIgorCittc2dpZCAia2V5d29yZHMiCittc2dzdHIgIm7DuGdsZW9yZCIKKworbXNnaWQgImNvbW1hIHNlcGFyYXRlZCBrZXl3b3JkcyBkZXNjcmliaW5nIHRoZSBjb250ZW50IgorbXNnc3RyICJrb21tYXNlcGFyZXJlZGUgbsO4Z2xlb3JkIGRlciBiZXNrcml2ZXIgaW5kaG9sZGV0IgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIG5hbWUiCittc2dzdHIgImdlb2dyYWZpc2sgc3RlZG5hdm4iCisKK21zZ2lkICIiCisiaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpdmUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yICIKKyJwcm9kdWNlZCIKK21zZ3N0ciAiIgorImzDpnNiYXIgc3RlZGJlc2tyaXZlbHNlIGFmIGh2b3IgbWVkaWV0IGVyIGJsZXZldCBvcHRhZ2V0IGVsbGVyIHByb2R1Y2VyZXQiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCittc2dzdHIgImdlb2dyYWZpc2sgYnJlZGRlZ3JhZCIKKworbXNnaWQgIiIKKyJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCisic291dGhlcm4gbGF0aXR1ZGVzKSIKK21zZ3N0ciAiIgorImdlb2dyYWZpc2sgYnJlZGRlZ3JhZCBodm9yIG1lZGlldCBlciBibGV2ZXQgb3B0YWdldCBlbGxlciBwcm9kdWNlcmV0LCBpICIKKyJncmFkZXIgZWZ0ZXIgV0dTODQgKMOma3ZhdG9yIGVyIG51bCwgb2cgc3lkbGlnZSBicmVkZGVncmFkZXIgZXIgbmVnYXRpdmUpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKK21zZ3N0ciAiZ2VvZ3JhZmlzayBsw6ZuZ2RlZ3JhZCIKKworbXNnaWQgIiIKKyJnZW8gbG9uZ2l0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCisiZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIHByaW1lIG1lcmlkaWFuIGluIEdyZWVud2ljaC9VSywgICIKKyJuZWdhdGl2ZSB2YWx1ZXMgZm9yIHdlc3Rlcm4gbG9uZ2l0dWRlcykiCittc2dzdHIgIiIKKyJnZW9ncmFmaXNrIGzDpm5nZGVncmFkIGh2b3IgbWVkaWV0IGVyIGJsZXZldCBvcHRhZ2V0IGVsbGVyIHByb2R1Y2VyZXQsIGkgIgorImdyYWRlciBlZnRlciBXR1M4NCAoR3JlZW53aWNoL1VLIGVyIG51bCwgb2cgdmVzdGxpZ2UgbMOmbmdkZWdyYWRlciBlciAiCisibmVnYXRpdmUpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKK21zZ3N0ciAiZ2VvZ3JhZmlzayBow7hqZGUiCisKK21zZ2lkICIiCisiZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKKyJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgorbXNnc3RyICIiCisiZ2VvZ3JhZmlzayBow7hqZGUgaHZvciBtZWRpZXQgZXIgYmxldmV0IG9wdGFnZXQgZWxsZXIgcHJvZHVjZXJldCwgaSBtZXRlciAiCisiZWZ0ZXIgV0dTODQgKGdlbm5lbXNuaXRsaWcgdmFuZHN0YW5kIGVyIG51bCkiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gY291bnRyeSIKK21zZ3N0ciAiZ2VvZ3JhZmlzayBwbGFjZXJpbmcgbGFuZCIKKworbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICJsYW5kIChkYW5zayBuYXZuKSBodm9yIG1lZGlldCBlciBibGV2ZXQgb3B0YWdldCBlbGxlciBwcm9kdWNlcmV0IgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCittc2dzdHIgImdlb2dyYWZpc2sgYnkiCisKK21zZ2lkICJjaXR5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKK21zZ3N0ciAiYnkgKGRhbnNrIG5hdm4pIGh2b3IgbWVkaWV0IGVyIGJsZXZldCBvcHRhZ2V0IGVsbGVyIHByb2R1Y2VyZXQiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gc3VibG9jYXRpb24iCittc2dzdHIgImdlb2dyYWZpc2sgdW5kZXJpbmRkZWxpbmciCisKK21zZ2lkICIiCisiYSBsb2NhdGlvbiB3aGl0aGluIGEgY2l0eSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgb3IgY3JlYXRlZCAoZS5nLiAiCisidGhlIG5laWdoYm9yaG9vZCkiCittc2dzdHIgIiIKKyJlbiBzdGVkYW5naXZlbHNlIGluZGVuIGZvciBlbiBieSBodm9yIG1lZGlldCBlciBibGV2ZXQgb3B0YWdldCBlbGxlciAiCisicHJvZHVjZXJldCIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgorbXNnc3RyICJnZW9ncmFmaXNrIHBsYWNlcmluZyBob3Jpc29udGFsZmVqbCIKKworbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgorbXNnc3RyICJmb3J2ZW50ZXQgZmVqbCBpIGRlbiBob3Jpc29udGFsZSBwb3NpdGlvbnNhbmdpdmVsc2UgKGkgbWV0ZXIpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgorbXNnc3RyICJnZW9ncmFmaXNrIGJldsOmZ2Vsc2VzaGFzdGlnaGVkIgorCittc2dpZCAiIgorIm1vdmVtZW50IHNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgaW4gbS9zIgorbXNnc3RyICJiZXbDpmdlbHNlc2hhc3RpZ2hlZCBhZiBkZXQgb3B0YWdlbmRlIHVkc3R5ciB1bmRlciBvcHRhZ2Vsc2VuIGkgbS9zIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKK21zZ3N0ciAiZ2VvZ3JhZmlzayBiZXbDpmdlbHNlc3JldG5pbmciCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgorIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKKyJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKyJhbmdpdmVyIG9wdGFnZXJldG5pbmdlbiBmb3IgdWRzdHlyZXQgZGVyIG9wdG9nIG1lZGlldC4gRGV0IGFuZ2l2ZXMgbWVkICIKKyJrb21tYXRhbCwgaHZvciAwIGVyIGdlb2dyYWZpc2sgbm9yZCwgb2cga29tbWF0YWxsZXQgw7hnZXMgbWVkIHVyZXRzIHJldG5pbmciCisKK21zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCittc2dzdHIgImdlb2dyYWZpc2sgb3B0YWdlbHNlc3JldG5pbmciCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGRldmljZSBpcyBwb2ludGluZyB0byB3aGVuIGNhcHR1cmluZyAgYSBtZWRpYS4gIgorIkl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIHJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSAiCisiZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKyJhbmdpdmVyIG9wdGFnZXJldG5pbmdlbiBmb3IgdWRzdHlyZXQgZGVyIG9wdG9nIG1lZGlldC4gRGV0IGFuZ2l2ZXMgbWVkICIKKyJrb21tYXRhbCwgaHZvciAwIGVyIGdlb2dyYWZpc2sgbm9yZCwgb2cga29tbWF0YWxsZXQgw7hnZXMgbWVkIHVyZXRzIHJldG5pbmciCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZScgaGVyZQorbXNnaWQgInNob3cgbmFtZSIKK21zZ3N0ciAiVWRzZW5kZWxzZW5zIG5hdm4iCisKK21zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgorbXNnc3RyICJOYXZuZXQgcMOlIHNlcmllbiB0di0gZWxsZXIgcG9kY2FzdHVkc2VuZGVsc2VuIG1lZGlldCBzdGFtbWVyIGZyYSIKKworIy4gVFJBTlNMQVRPUlM6ICdzaG93IHNvcnRuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZSBhcyB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzJyBoZXJlCittc2dpZCAic2hvdyBzb3J0bmFtZSIKK21zZ3N0ciAic29ydGVyaW5nc3N0cmVuZyBmb3IgdWRzZW5kZWxzZW4iCisKK21zZ2lkICIiCisiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIiIKKyJOYXZuZXQgcMOlIHNlcmllbiB0di0gZWxsZXIgcG9kY2FzdHVkc2VuZGVsc2VuIG1lZGlldCBzdGFtbWVyIGZyYSwgdGlsICIKKyJzb3J0ZXJpbmdzYnJ1ZyIKKworbXNnaWQgImVwaXNvZGUgbnVtYmVyIgorbXNnc3RyICJlcGlzb2RlbnVtbWVyIgorCittc2dpZCAiVGhlIGVwaXNvZGUgbnVtYmVyIGluIHRoZSBzZWFzb24gdGhlIG1lZGlhIGlzIHBhcnQgb2YiCittc2dzdHIgIkVwaXNvZGVudW1tZSBpIGRlbiDDpXJnYW5nIG1lZGlldCBzdGFtbWVyIGZyYSIKKworbXNnaWQgInNlYXNvbiBudW1iZXIiCittc2dzdHIgIlPDpnNvbm51bW1lciIKKworbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICJTw6Zzb25udW1tZXJldCBzb20gdWRzZW5kZWxzZW4gaSBtZWRpZXQgc3RhbW1lciBmcmEiCisKK21zZ2lkICJseXJpY3MiCittc2dzdHIgInNhbmd0ZWtzdCIKKworbXNnaWQgIlRoZSBseXJpY3Mgb2YgdGhlIG1lZGlhLCBjb21tb25seSB1c2VkIGZvciBzb25ncyIKK21zZ3N0ciAiU2FuZ3Rla3N0ZW4gaSBtZWRpZXQsIGFsbWluZGVsaWd0IGJydWd0IGZvciBzYW5nZSIKKworbXNnaWQgImNvbXBvc2VyIHNvcnRuYW1lIgorbXNnc3RyICJzb3J0ZXJpbmdzc3RyZW5nIGZvciBrb21wb25pc3QiCisKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJwZXJzb24oZXIpIGRlciBrb21wb25lcmVkZSBvcHRhZ2Vsc2VuLCB0aWwgc29ydGVyaW5nc2JydWciCisKK21zZ2lkICJncm91cGluZyIKK21zZ3N0ciAiZ3J1cHBlcmluZyIKKworbXNnaWQgIiIKKyJHcm91cHMgcmVsYXRlZCBtZWRpYSB0aGF0IHNwYW5zIG11bHRpcGxlIHRyYWNrcywgbGlrZSB0aGUgZGlmZmVyZW50IHBpZWNlcyAiCisib2YgYSBjb25jZXJ0by4gSXQgaXMgYSBoaWdoZXIgbGV2ZWwgdGhhbiBhIHRyYWNrLCBidXQgbG93ZXIgdGhhbiBhbiBhbGJ1bSIKK21zZ3N0ciAiIgorIkdydXBwZXJlbGF0ZXJldCBtZWRpZSBkZXIgc3DDpm5kZXIgb3ZlciBmbGVyZSBudW1yZSwgc29tIGYuZWtzLiBkZSAiCisiZm9yc2tlbGxpZ2Ugc2F0c2VyIGkgZW4ga29uY2VydC4gRGV0IGhhciBow7hqZXJlIG5pdmVhdSBlbmQgZXQgc3Bvciwgb2cgIgorImxhdmVyZSBlbmQgZXQgYWxidW0iCisKK21zZ2lkICJ1c2VyIHJhdGluZyIKK21zZ3N0ciAiYnJ1Z2VydnVyZGVyaW5nIgorCittc2dpZCAiIgorIlJhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgdXNlci4gVGhlIGhpZ2hlciB0aGUgcmFuaywgdGhlIG1vcmUgdGhlIHVzZXIgbGlrZXMgIgorInRoaXMgbWVkaWEiCittc2dzdHIgIiIKKyJWdXJkZXJpbmcgdGlsZGVsdCBhZiBlbiBicnVnZXIuIEpvIGjDuGplcmUgcmFuZ2VyaW5nLCBkZXN0byBiZWRyZSBrYW4gIgorImJydWdlcmVuIGxpZGUgbWVkaWV0IgorCittc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKK21zZ3N0ciAiZnJlbXN0aWxsZXIgYWYgdWRzdHlyZXQiCisKK21zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICJGcmVtc3RpbGxlciBhZiB1ZHN0eXJldCBkZXIgZXIgYnJ1Z3QgdGlsIGF0IG9wcmV0dGUgZGV0dGUgbWVkaWUiCisKK21zZ2lkICJkZXZpY2UgbW9kZWwiCittc2dzdHIgInVkc3R5cmV0cyBtb2RlbCIKKworbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKK21zZ3N0ciAiTW9kZWwgYWYgZGV0IHVkc3R5ciBkZXIgZXIgYnJ1Z3QgdGlsIGF0IGZyZW1zdGlsbGUgbWVkaWV0IgorCittc2dpZCAiYXBwbGljYXRpb24gbmFtZSIKK21zZ3N0ciAicHJvZ3JhbW5hdm4iCisKK21zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCittc2dzdHIgIlByb2dyYW0gYnJ1Z3QgdGlsIGF0IG9wcmV0dGUgbWVkaWV0IgorCittc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKK21zZ3N0ciAicHJvZ3JhbWRhdGEiCisKK21zZ2lkICJBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIG1lZGlhIgorbXNnc3RyICJ2aWxrw6VybGlnZSBwcm9ncmFtZGF0YSBkZXIgc2thbCBnZW1tZXMgaSBtZWRpZXQiCisKK21zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKK21zZ3N0ciAiYmlsbGVkZXRzIG9yaWVudGVyaW5nIgorCittc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgorbXNnc3RyICJIdm9yZGFuIGV0IGJpbGxlZGUgc2thbCByb3RlcmVzIGVsbGVyIHZlbmRlcyBmw7hyIHZpc25pbmciCisKK21zZ2lkICIsICIKK21zZ3N0ciAiLCAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAiRkVKTDogZnJhIGVsZW1lbnQgJXM6ICVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKKyIlc1xuIgorbXNnc3RyICIiCisiWWRlcmxpZ2VyZSBmZWpsc8O4Z25pbmdzaW5mb3JtYXRpb246XG4iCisiJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJzcGVjaWZpZWQgZW1wdHkgYmluIFwiJXNcIiwgbm90IGFsbG93ZWQiCittc2dzdHIgInNwZWNpZmljZXJldCB0b210IGxhZ2VyIFwiJXNcIiwgZXIgaWtrZSB0aWxsYWR0IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHNraXBwaW5nIgorbXNnc3RyICJpbnRldCBsYWdlciBcIiVzXCIsIHNwcnVuZ2V0IG92ZXIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICJpbmdlbiBlZ2Vuc2thYiBcIiVzXCIgZm9yIGVsZW1lbnQgXCIlc1wiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKK21zZ3N0ciAia3VubmUgaWtrZSBzw6Z0dGUgZWdlbnNrYWIgXCIlc1wiIGZvciBlbGVtZW50IFwiJXNcIiB0aWwgXCIlc1wiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgorbXNnc3RyICJrdW5uZSBpa2tlIGzDpm5rZSAlcyB0aWwgJXMiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCittc2dzdHIgImludGV0IGVsZW1lbnQgXCIlc1wiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKK21zZ3N0ciAia3VubmUgaWtrZSB0b2xrZSBrYXBhYmlsaXRldGVuIFwiJXNcIiIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIKK21zZ3N0ciAibMOmbmtlIHVkZW4ga2lsZGUtZWxlbWVudCIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzaW5rIGVsZW1lbnQiCittc2dzdHIgImzDpm5rZSB1ZGVuIHVkZ2FuZ3NlbGVtZW50IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNvdXJjZSBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJpbnRldCBraWxkZWVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCB0byBsaW5rIFVSSSBcIiVzXCIgdG8iCittc2dzdHIgImludGV0IGVsZW1lbnQgYXQgbMOmbmtlIFVSSSBcIiVzXCIgdGlsIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAiaW50ZXQgdWRnYW5nc2VsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxpbmsgc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJrdW5uZSBpa2tlIGzDpm5rZSB1ZGdhbmdzZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKKworbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgorbXNnc3RyICJ0b20gcsO4cmxlZG5pbmcgaWtrZSB0aWxsYWR0IgorCittc2dpZCAiSW50ZXJuYWwgY2xvY2sgZXJyb3IuIgorbXNnc3RyICJGZWpsIGkgaW50ZXJudCB1ci4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgorbXNnc3RyICJJbnRlcm4gZGF0YXN0csO4bXNmZWpsLiIKKworbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgorbXNnc3RyICJFbiBtYXNzZSBhZiBidWZmZXJlbnMgaW5kaG9sZCBzbWlkZXMgdsOmay4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCittc2dzdHIgIkludGVybiBkYXRhc3Ryw7htc3Byb2JsZW0uIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBzdHJlYW0gZXJyb3IuIgorbXNnc3RyICJJbnRlcm4gZGF0YXN0csO4bXNmZWpsLiIKKworbXNnaWQgIkZpbHRlciBjYXBzIgorbXNnc3RyICJGaWx0ZXJrYXBhYmlsaXRldCIKKworbXNnaWQgIiIKKyJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKKyJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgorbXNnc3RyICIiCisiQmVncsOmbnMgZGVuIG11bGlnZSB0aWxsYWR0ZSBrYXBhYmlsaXRldCAoTlVMIGJldHlkZXIgQUxUKS4gU8OmdHRlcyBkZW5uZSAiCisiZWdlbnNrYWIgZ2l2ZXMgZW4gcmVmZXJlbmNlIHRpbCBkZXQgbGV2ZXJlZGUgR3N0Q2FwcyBvYmpla3QuIgorCittc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3Igd3JpdGluZy4iCittc2dzdHIgIkludGV0IGZpbG5hdm4gc3BlY2lmaWNlcmV0IGZvciBza3Jpdm5pbmcuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiS3VubmUgaWtrZSDDpWJuZSBmaWxlbiBcIiVzXCIgZm9yIHNrcml2bmluZy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCittc2dzdHIgIkZlamwgdmVkIGx1a25pbmcgYWYgZmlsZW4gXCIlc1wiLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiRmVqbCB1bmRlciBzw7hnbmluZyBpIGZpbGVuIFwiJXNcIi4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIFwiJXNcIi4iCittc2dzdHIgIkZlamwgdW5kZXIgc2tyaXZuaW5nIHRpbCBmaWxlbiBcIiVzXCIuIgorCittc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCittc2dzdHIgIkludGV0IGZpbG5hdm4gc3BlY2lmaWNlcmV0IGZvciBsw6ZzbmluZy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgorbXNnc3RyICJLdW5uZSBpa2tlIMOlYm5lIGZpbGVuIFwiJXNcIiBmb3IgbMOmc25pbmcuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgaW5mbyBvbiBcIiVzXCIuIgorbXNnc3RyICJLdW5uZSBpa2tlIGhlbnRlIGluZm8gdGlsIFwiJXNcIi4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiXCIlc1wiIGlzIGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiXCIlc1wiIGVyIGV0IGthdGFsb2cuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKK21zZ3N0ciAiRmlsZW4gXCIlc1wiIGVyIGVuIHNva2tlbC4iCisKK21zZ2lkICJGYWlsZWQgYWZ0ZXIgaXRlcmF0aW9ucyBhcyByZXF1ZXN0ZWQuIgorbXNnc3RyICJGZWpsZWRlIGVmdGVyIGl0ZXJhdGlvbmVyIHNvbSBmb3Jlc3B1cmd0LiIKKworbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCittc2dzdHIgIkRlciBlciBpa2tlIGFuZ2l2ZXQgZW4gbWFwcGUgdGlsIG1pZGxlcnRpZGlnZSBmaWxlci4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiS3VubmUgaWtrZSBvcHJldHRlIGRlbiBtaWRsZXJ0aWRpZ2UgZmlsIFwiJXNcIi4iCisKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIgorbXNnc3RyICJGZWpsIHVuZGVyIHNrcml2bmluZyB0aWwgZG93bmxvYWRmaWxlbi4iCisKK21zZ2lkICJjYXBzIgorbXNnc3RyICJrYXBhYmlsaXRldGVyIgorCittc2dpZCAiZGV0ZWN0ZWQgY2FwYWJpbGl0aWVzIGluIHN0cmVhbSIKK21zZ3N0ciAia29uc3RhdGVyZXQga2FwYWJpbGl0ZXQgaSBtZWRpZXN0csO4bSIKKworbXNnaWQgIm1pbmltdW0iCittc2dzdHIgIm1pbmltdW0iCisKK21zZ2lkICJtYXhpbXVtIgorbXNnc3RyICJtYWtzaW11bSIKKworbXNnaWQgImZvcmNlIGNhcHMiCittc2dzdHIgImdlbm5lbXR2aW5nIGthcGFiaWxpdGV0ZXIiCisKKyMgdHlwZWZpbmQgLSBvdmVyc8OmdHRlcyBtZWQgPz8/Pz8KK21zZ2lkICJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIKK21zZ3N0ciAiZ2VubmVtdHZpbmcga2FwYWJpbGl0ZXRlciB1ZGVuIGF0IGdlbm5lbWbDuHJlIGVuIHR5cGVmaW5kIgorCittc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgorbXNnc3RyICJNZWRpZXN0csO4bSBpbmRlaG9sZGVyIGluZ2VuIGRhdGEiCisKK21zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgorbXNnc3RyICJJbXBsZW1lbnRlcmVkZSBHcsOmbnNlZmxhZGVyOlxuIgorCittc2dpZCAicmVhZGFibGUiCittc2dzdHIgImzDpnNlbGlnIgorCittc2dpZCAid3JpdGFibGUiCittc2dzdHIgInNvbSBrYW4gc2tyaXZlcyIKKworbXNnaWQgImNvbnRyb2xsYWJsZSIKK21zZ3N0ciAia29udHJvbGxlcmJhciIKKworbXNnaWQgImNoYW5nZWFibGUgaW4gTlVMTCwgUkVBRFksIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlIgorbXNnc3RyICJrYW4gw6ZuZHJlcyBpIHRpbHN0YW5kZW5lIE5VTEwsIFJFQURZLCBQQVVTRUQgZWxsZXIgUExBWUlORyIKKworbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiCittc2dzdHIgImthbiBrdW4gw6ZuZHJlcyBpIHRpbHN0YW5kZW5lIE5VTEwsIFJFQURZIGVsbGVyIFBBVVNFRCIKKworbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMIG9yIFJFQURZIHN0YXRlIgorbXNnc3RyICJrYW4ga3VuIMOmbmRyZXMgaSB0aWxzdGFuZGVuZSBOVUxMIGVsbGVyIFJFQURZIgorCittc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgorbXNnc3RyICJTb3J0bGlzdGVkZSBmaWxlcjoiCisKK21zZ2lkICJUb3RhbCBjb3VudDogIgorbXNnc3RyICJUb3RhbCBvcHTDpmxsaW5nOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxhY2tsaXN0ZWQgZmlsZSIKK21zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHJbMF0gIiVkIHNvcnRsaXN0ZXQgZmlsIgorbXNnc3RyWzFdICIlZCBzb3J0bGlzdGVkZSBmaWxlciIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBwbHVnaW4iCittc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCittc2dzdHJbMF0gIiVkIHBsdWdpbiIKK21zZ3N0clsxXSAiJWQgcGx1Z2luIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdCBlbnRyeSIKK21zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0IGVudHJpZXMiCittc2dzdHJbMF0gIiVkIHNvcnRsaXN0ZXQgaW5kZ2FuZyIKK21zZ3N0clsxXSAiJWQgc29ydGxpc3RlZGUgaW5kZ2FuZ2UiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgZmVhdHVyZSIKK21zZ2lkX3BsdXJhbCAiJWQgZmVhdHVyZXMiCittc2dzdHJbMF0gIiVkIGVnZW5za2FiIgorbXNnc3RyWzFdICIlZCBlZ2Vuc2thYmVyIgorCittc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgorbXNnc3RyICJVZHNrcml2IGFsbGUgZWxlbWVudGVyIgorCittc2dpZCAiUHJpbnQgbGlzdCBvZiBibGFja2xpc3RlZCBmaWxlcyIKK21zZ3N0ciAiVWRza3JpdiBzb3J0bGlzdGVkZSBmaWxlciIKKworbXNnaWQgIiIKKyJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgorInBsdWdpbnMgcHJvdmlkZS5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKKyJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgorbXNnc3RyICIiCisiVWRza3JpdiBlbiBsaXN0ZSBvdmVyIGVnZW5za2FiZXIsIHNvbSBkZXQgYW5naXZuZSB1ZHZpZGVsc2Vtb2R1bCBlbGxlciBhbGxlICIKKyJ1ZHZpZGVsc2VzbW9kdWxlciB0aWxieWRlciwgaSBldCBmb3JtYXQgZGVyIGthbiBmb3J0b2xrZXMgYWYgYW5kcmUgIgorInByb2dyYW1tZXIuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJydWdlcyBpIGZvcmJpbmRlbHNlIG1lZCBhdXRvbWF0aXNrICIKKyJpbnN0YWxsYXRpb24gYWYgdWR2aWRlbHNlc21vZHVsZXIuIgorCittc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgorbXNnc3RyICJPcGxpc3QgdWR2aWRlbHNlc21vZHVsZXRzIGluZGhvbGQiCisKK21zZ2lkICJQcmludCBzdXBwb3J0ZWQgVVJJIHNjaGVtZXMsIHdpdGggdGhlIGVsZW1lbnRzIHRoYXQgaW1wbGVtZW50IHRoZW0iCittc2dzdHIgIiIKKyJWaXMgaHZpbGtlIFVSSS1za2VtYWVyIGRlciB1bmRlcnN0w7h0dGVzLCBzYW1tZW4gbWVkIGRlIGVsZW1lbnRlciwgZGVyICIKKyJpbXBsZW1lbnRlcmVyIGRlbS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGxvYWQgcGx1Z2luIGZpbGU6ICVzXG4iCittc2dzdHIgIkt1bm5lIGlra2UgaW5kbMOmc2UgcGx1Z2luZmlsZW46ICVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iCittc2dzdHIgIkV0IHPDpWRhbnQgZWxlbWVudCBlbGxlciBwbHVnaW4gZmluZGVzIGlra2UgJyVzJ1xuIgorCittc2dpZCAiSW5kZXggc3RhdGlzdGljcyIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIGVsZW1lbnQgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAiTW9kdG9nIGJlc2tlZGVuICMldSBmcmEgZWxlbWVudGV0IFwiJXNcIiAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCittc2dzdHIgIk1vZHRvZyBiZXNrZWRlbiAjJXUgZnJhIGVuaGVkZW4gXCIlczolc1wiICglcyk6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAiTW9kdG9nIGJlc2tlZGVuICMldSBmcmEgb2JqZWt0ZXQgXCIlc1wiICglcyk6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgKCVzKTogIgorbXNnc3RyICJNb2R0b2cgYmVza2VkZW4gIyV1ICglcyk6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgRU9TIGZyb20gZWxlbWVudCBcIiVzXCIuXG4iCittc2dzdHIgIk1vZHRvZyBtZWRpZXNsdXQgZnJhIGVsZW1lbnQgXCIlc1wiLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCittc2dzdHIgIkZVTkRFVCBNw4ZSS0FUICAgICAgIDogZnVuZGV0IGFmIGVsZW1lbnQgXCIlc1wiLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgcGFkIFwiJXM6JXNcIi5cbiIKK21zZ3N0ciAiRlVOREVUIE3DhlJLQVQgICAgICAgOiBmdW5kZXQgYWYgZW5oZWRlbiBcIiVzOiVzXCIuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgorbXNnc3RyICJGVU5ERVQgTcOGUktBVCAgICAgICA6IGZ1bmRldCBhZiBvYmpla3RldCBcIiVzXCIuXG4iCisKK21zZ2lkICJGT1VORCBUQUdcbiIKK21zZ3N0ciAiRlVOREVUIE3DhlJLQVRcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSU5GTzpcbiIKKyIlc1xuIgorbXNnc3RyICIiCisiSU5GTzpcbiIKKyIlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAiQURWQVJTRUw6IGZyYSBlbGVtZW50ICVzOiAlc1xuIgorCisjIEluZ2VuIGFuZWxzZQorbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgorbXNnc3RyICJQcmVyb2xsZWQsIHZlbnRlciBww6UgYXQgYnVmZmVyaW5nZW4gc2x1dHRlci4uLlxuIgorCittc2dpZCAiYnVmZmVyaW5nLi4uIgorbXNnc3RyICJpbmRsw6ZzZXIgaSBidWZmZXIuLi4iCisKK21zZ2lkICJEb25lIGJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgorbXNnc3RyICJCdWZmZXJpbmcgZsOmcmRpZywgc8OmdHRlciByw7hybGVkbmluZyB0aWwgUExBWUlORyAuLi5cbiIKKworbXNnaWQgIkJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCittc2dzdHIgIkluZGzDpnNlciBpIGJ1ZmZlciwgc8OmdHRlciByw7hybGVkbmluZyB0aWwgUEFVU0VEIC4uLlxuIgorCittc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKK21zZ3N0ciAiT21sw6ZnZ2VyIHZlbnRldGlkLi4uXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBzdGF0ZSB0byAlcyBhcyByZXF1ZXN0ZWQgYnkgJXMuLi5cbiIKK21zZ3N0ciAiU8OmdHRlciB0aWxzdGFuZCB0aWwgJXMgc29tIGtyw6Z2ZXQgYWYgJXMuLi5cbiIKKworbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCittc2dzdHIgIkFmYnJ5ZGVsc2U6IFN0b3BwZXIgcsO4cmxlZG5pbmcuLi5cbiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBlbGVtZW50OiAlc1xuIgorbXNnc3RyICJpbnRldCBlbGVtZW50IFwiJXNcIiIKKworbXNnaWQgIk91dHB1dCB0YWdzIChhbHNvIGtub3duIGFzIG1ldGFkYXRhKSIKK21zZ3N0ciAiVWRkYXRhbcOmcmthdGVyIChvZ3PDpSBrZW5kdCBzb20gbWV0YWRhdGEpIgorCittc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKK21zZ3N0ciAiVWRkYXRhIHN0YXR1c2luZm9ybWF0aW9uIG9nIGVnZW5za2Fic21lZGRlbGVsc2VyIgorCittc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiVWRza3JpdiBpa2tlIGluZm9ybWF0aW9uIG9tIGZyZW1za3JpZHQiCisKK21zZ2lkICJPdXRwdXQgbWVzc2FnZXMiCittc2dzdHIgIlVkZGF0YW1lZGRlbGVsc2VyIgorCittc2dpZCAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKK21zZ3N0ciAiU2VuZCBpa2tlIHN0YXR1c2luZm9ybWF0aW9uIGFmIFRZUEUgdWQiCisKK21zZ2lkICJUWVBFMSxUWVBFMiwuLi4iCittc2dzdHIgIlRZUEUxLFRZUEUyLC4uLiIKKworbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKK21zZ3N0ciAiSW5zdGFsbMOpciBpa2tlIGVuIGZlamxow6VuZHRlcmVyIgorCittc2dpZCAiUHJpbnQgYWxsb2MgdHJhY2UgKGlmIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lKSIKK21zZ3N0ciAiVWRza3JpdiBhbGxva2VyaW5nc3Nwb3IgKGh2aXMgdGlsbGFkdCBww6Ugb3ZlcnPDpnR0ZWxzZXN0aWRzcHVua3RldCkiCisKK21zZ2lkICJGb3JjZSBFT1Mgb24gc291cmNlcyBiZWZvcmUgc2h1dHRpbmcgdGhlIHBpcGVsaW5lIGRvd24iCittc2dzdHIgIkdlbm5lbXR2aW5nIG1lZGllc2x1dCBww6Uga2lsZGVyIGbDuHIgbmVkbHVrbmluZyBhZiByw7hybGVkbmluZyIKKworbXNnaWQgIkdhdGhlciBhbmQgcHJpbnQgaW5kZXggc3RhdGlzdGljcyIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQ6ICVzLlxuIgorbXNnc3RyICJGRUpMOiByw7hybGVkbmluZ2VuIGt1bm5lIGlra2UgZGFubmVzOiAlcy5cbiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXG4iCittc2dzdHIgIkZFSkw6IHLDuHJsZWRuaW5nZW4ga3VubmUgaWtrZSBkYW5uZXMuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogZXJyb25lb3VzIHBpcGVsaW5lOiAlc1xuIgorbXNnc3RyICJBRFZBUlNFTDogZm9ya2VydCByw7hybGVkbmluZzogJXNcbiIKKworbXNnaWQgIkVSUk9SOiB0aGUgJ3BpcGVsaW5lJyBlbGVtZW50IHdhc24ndCBmb3VuZC5cbiIKK21zZ3N0ciAiRkVKTDogZWxlbWVudGV0ICdyw7hybGVkbmluZycgYmxldiBpa2tlIGZ1bmRldC5cbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgorbXNnc3RyICJQQVVTRVJFUiByw7hybGVkbmluZyAuLi5cbiIKKworbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCittc2dzdHIgIkZFSkw6IHLDuHJsZWRuaW5nIMO4bnNrZXIgaWtrZSBhdCBwYXVzZXJlLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgorbXNnc3RyICJSw7hybGVkbmluZ2VuIGvDuHJlciwgb2cgYmVow7h2ZXIgaWtrZSBhdCBibGl2ZSBQUkVST0xMJ2VkIC4uLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTElORyAuLi5cbiIKK21zZ3N0ciAiUsO4cmxlZG5pbmdlbiBQUkVST0xMJ2VyIC4uLlxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgorbXNnc3RyICJGRUpMOiByw7hybGVkbmluZyDDuG5za2VyIGlra2UgYXQgcHJlcm9sbC5cbiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExFRCAuLi5cbiIKK21zZ3N0ciAiUsO4cmxlZG5pbmdlbiBlciBQUkVST0xMJ2VkIC4uLlxuIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgorbXNnc3RyICJSw7hybGVkbmluZyBzw6Z0dGVzIHRpbCBBRlNQSUwgLi4uXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBsYXkuXG4iCittc2dzdHIgIkZFSkw6IHLDuHJsZWRuaW5nIMO4bnNrZXIgaWtrZSBhdCBzcGlsbGUuXG4iCisKK21zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKK21zZ3N0ciAiIgorIk1lZGllc2x1dCB2ZWQgbmVkbHVrbmluZyBha3RpdmVyZXQgLS0gR2VubmVtdHZpbmcgbWVkaWVzbHV0IHDDpSByw7hybGVkbmluZ2VuXG4iCisKK21zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKK21zZ3N0ciAiVmVudGVyIHDDpSBtZWRpZXNsdXQuLi5cbiIKKworbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCittc2dzdHIgIk1lZGllc2x1dCBtb2R0YWdldCAtIHN0b3BwZXIgcsO4cmxlZG5pbmcuLi5cbiIKKworbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgorbXNnc3RyICJFbiBmZWpsIG9wc3RvZCBtZW5zIGRlciB2ZW50ZWRlcyBww6UgbWVkaWVzbHV0XG4iCisKK21zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKK21zZ3N0ciAiVWRmw7hyc2VsIGFmc2x1dHRldCBlZnRlciAlIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKK21zZ3N0ciAiUsO4cmxlZG5pbmcgc8OmdHRlcyB0aWwgS0xBUiAuLi5cbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCAuLi5cbiIKK21zZ3N0ciAiUsO4cmxlZG5pbmcgc8OmdHRlcyB0aWwgTlVMIC4uLlxuIgorCittc2dpZCAiRnJlZWluZyBwaXBlbGluZSAuLi5cbiIKK21zZ3N0ciAiUsO4cmxlZG5pbmcgZnJpZ8O4cmVzIC4uLlxuIgorCisjfiBtc2dpZCAiVXNhZ2U6IGdzdC14bWxsYXVuY2ggPGZpbGUueG1sPiBbIGVsZW1lbnQucHJvcGVydHk9dmFsdWUgLi4uIF1cbiIKKyN+IG1zZ3N0ciAiQnJ1ZzogZ3N0LXhtbGxhdW5jaCA8ZmlsZS54bWw+IFsgZWxlbWVudC5wcm9wZXJ0eT12YWx1ZSAuLi4gXVxuIgorCisjfiBtc2dpZCAiRVJST1I6IHBhcnNlIG9mIHhtbCBmaWxlICclcycgZmFpbGVkLlxuIgorI34gbXNnc3RyICJGRUpMOiB0b2xrbmluZyBhZiBYTUwgZmlsICclcycgbWlzbHlra2VkZXMuXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogbm8gdG9wbGV2ZWwgcGlwZWxpbmUgZWxlbWVudCBpbiBmaWxlICclcycuXG4iCisjfiBtc2dzdHIgIkZFSkw6IGludGV0IHRvcG5pdmVhdSByw7hybGVkbmluZ3NlbGVtZW50IGkgZmlsICclcycuXG4iCisKKyN+IG1zZ2lkICJXQVJOSU5HOiBvbmx5IG9uZSB0b3BsZXZlbCBlbGVtZW50IGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJBRFZBUlNFTDogZGVyIHVuZGVyc3TDuHR0ZXMga3VuIMOpdCB0b3BuaXZlYXVlbGVtZW50IHDDpSBudXbDpnJlbmRlICIKKyN+ICJ0aWRzcHVua3QuXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogY291bGQgbm90IHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAlZDogJXMuXG4iCisjfiBtc2dzdHIgIkZFSkw6IGt1bm5lIGlra2UgdG9sa2Uga29tbWFuZG9saW5pZWFyZ3VtZW5ldGV0ICVkOiAlcy5cbiIKKworI34gbXNnaWQgIldBUk5JTkc6IGVsZW1lbnQgbmFtZWQgJyVzJyBub3QgZm91bmQuXG4iCisjfiBtc2dzdHIgIkFEVkFSU0VMOiBlbGVtZW50ZXQgdmVkIG5hdm4gJyVzJyBibGV2IGlra2UgZnVuZGV0LlxuIgorCisjfiBtc2dpZCAiU2F2ZSB4bWwgcmVwcmVzZW50YXRpb24gb2YgcGlwZWxpbmUgdG8gRklMRSBhbmQgZXhpdCIKKyN+IG1zZ3N0ciAiR2VtIFhNTC1yZXByw6ZzZW50YXRpb24gYWYgcsO4cmxlZG5pbmcgdGlsIEZJTCBvZyBhZnNsdXQiCisKKyN+IG1zZ2lkICJGSUxFIgorI34gbXNnc3RyICJGSUwiCisKKyN+IG1zZ2lkICJEbyBub3QgaW5zdGFsbCBzaWduYWwgaGFuZGxlcnMgZm9yIFNJR1VTUjEgYW5kIFNJR1VTUjIiCisjfiBtc2dzdHIgIlVuZGxhZCBpbnN0YWxsZXJpbmcgYWYgc2lnbmFsaMOlbmR0ZXJpbmcgZm9yIFNJR1VTUjEgb2cgU0lHVVNSMiIKKworI34gbXNnaWQgIkVycm9yIHdyaXRpbmcgcmVnaXN0cnkgY2FjaGUgdG8gJXM6ICVzIgorI34gbXNnc3RyICJLdW5uZSBpa2tlIHNrcml2ZSByZWdpc3RyYXR1cmNhY2hlIHRpbCAlczogJXMiCisKKyN+IG1zZ2lkICJFcnJvciByZS1zY2FubmluZyByZWdpc3RyeSAlczogJXMiCisjfiBtc2dzdHIgIkt1bm5lIGlra2UgZ2Vuc2thbm5lIHJlZ2lzdHJhdHVyICVzOiAlcyIKKworI34gbXNnaWQgIkVycm9yIHJlLXNjYW5uaW5nIHJlZ2lzdHJ5ICVzIgorI34gbXNnc3RyICJLdW5uZSBpa2tlIGdlbnNrYW5uZSByZWdpc3RyYXR1ciAlcyIKKworI34gbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZC4iCisjfiBtc2dzdHIgIkludGVybiBHU3RyZWFtZXIgZmVqbDogdGlsc3RhbmRzw6ZuZHJpbmcgbWlzbHlra2VkZXMuIgorCisjfiBtc2dpZCAib3JpZ2luYWwgbG9jYXRpb24gb2YgZmlsZSBhcyBhIFVSSSIKKyN+IG1zZ3N0ciAib3ByaW5kZWxpZ3Qgc3RlZCBmb3IgZW4gZmlsIHNvbSBlbiBVUkkiCisKKyN+IG1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgZGVzY3JpcHRvciBcIiVkXCIuIgorI34gbXNnc3RyICJGZWpsIHVuZGVyIHNrcml2bmluZyB0aWwgZmlsYmVza3JpdmVyIFwiJWRcIi4iCisKKyN+IG1zZ2lkICJGaWxlIGRlc2NyaXB0b3IgXCIlZFwiIGlzIG5vdCB2YWxpZC4iCisjfiBtc2dzdHIgIkZpbGJlc2tyaXZlciBcIiVkXCIgZXIgdWd5bGRpZy4iCisKKyN+IG1zZ2lkICJGUkVFSU5HIHBpcGVsaW5lIC4uLlxuIgorI34gbXNnc3RyICJSw7hybGVkbmluZyByZW5zZXMgLi4uXG4iCmRpZmYgLS1naXQgYS9wby9kZS5nbW8gYi9wby9kZS5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdmNjAyZQotLS0gL2Rldi9udWxsCisrKyBiL3BvL2RlLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9kZS5wbyBiL3BvL2RlLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZDc5MmYKLS0tIC9kZXYvbnVsbAorKysgYi9wby9kZS5wbwpAQCAtMCwwICsxLDEzMzcgQEAKKyMgR2VybWFuIHRyYW5zbGF0aW9uIGZvciBnc3RyZWFtZXIgMC4xMC4zMC4zCisjIENvcHlyaWdodCAoQykgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdzdHJlYW1lciBwYWNrYWdlLgorIworIyBSb2xhbmQgSWxsaWcgPHJvbGFuZC5pbGxpZ0BnbXguZGU+LCAyMDA0LgorIyBDaHJpc3RpYW4gS2lyYmFjaCA8Y2hyaXN0aWFuLmtpcmJhY2hAZ29vZ2xlbWFpbC5jb20+LCAyMDA5LCAyMDEwLCAyMDExLgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDAuMTAuMzIuMlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTA5LTI5IDE0OjU1KzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDExLTA0LTI3IDIzOjQ0KzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IENocmlzdGlhbiBLaXJiYWNoIDxjaHJpc3RpYW4ua2lyYmFjaEBnb29nbGVtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBHZXJtYW4gPHRyYW5zbGF0aW9uLXRlYW0tZGVAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlOiBkZVxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorCittc2dpZCAiUHJpbnQgdGhlIEdTdHJlYW1lciB2ZXJzaW9uIgorbXNnc3RyICJEaWUgVmVyc2lvbiB2b24gR1N0cmVhbWVyIGF1c2dlYmVuIgorCittc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCittc2dzdHIgIkFsbGUgV2FybnVuZ2VuIHdpZSBGZWhsZXIgYmVoYW5kZWxuIgorCittc2dpZCAiUHJpbnQgYXZhaWxhYmxlIGRlYnVnIGNhdGVnb3JpZXMgYW5kIGV4aXQiCittc2dzdHIgIlZlcmbDvGdiYXJlIEZlaGxlcmRpYWdub3Nla2F0ZWdvcmllbiBhdXNnZWJlbiB1bmQgUHJvZ3JhbW0gYmVlbmRlbiIKKworbXNnaWQgIiIKKyJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gNSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKK21zZ3N0ciAiIgorIlZvcmdlZ2ViZW5lIEZlaGxlcmRpYWdub3Nlc3R1ZmUgdm9uIDEgKG51ciBGZWhsZXIpIGJpcyA1IChBbGxlcykgb2RlciAwIGbDvHIgIgorImtlaW5lIEF1c2dhYmUiCisKK21zZ2lkICJMRVZFTCIKK21zZ3N0ciAiU1RVRkUiCisKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCisidGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgorbXNnc3RyICIiCisiRHVyY2ggS29tbWF0YSBnZXRyZW5udGUgTGlzdGUgdm9uIFBhYXJlbiDCu0thdGVnb3JpZV9OYW1lOkxldmVswqssIHVtICIKKyJiZXN0aW1tdGVuIEthdGVnb3JpZW4gZWlnZW5lIFN0dWZlbiAgenV6dW9yZG5lbi4gQmVpc3BpZWw6IEdTVF9BVVRPUExVRzo1LCIKKyJHU1RfRUxFTUVOVF8qOjMiCisKK21zZ2lkICJMSVNUIgorbXNnc3RyICJMSVNURSIKKworbXNnaWQgIkRpc2FibGUgY29sb3JlZCBkZWJ1Z2dpbmcgb3V0cHV0IgorbXNnc3RyICJGYXJiaWdlIEZlaGxlcmRpYWdub3NlYXVzZ2FiZSBkZWFrdGl2aWVyZW4iCisKK21zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKK21zZ3N0ciAiRmVobGVyZGlhZ25vc2UgZGVha3RpdmllcmVuIgorCittc2dpZCAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCittc2dzdHIgIkF1c2bDvGhybGljaGUgTWVsZHVuZ2VuIGJlaW0gTGFkZW4gdm9uIFBsdWdpbnMgYWt0aXZpZXJlbiIKKworbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCittc2dzdHIgIkR1cmNoIERvcHBlbHB1bmt0ZSBnZXRyZW5udGUgUGZhZGUgenUgZGVuIFBsdWdpbnMiCisKK21zZ2lkICJQQVRIUyIKK21zZ3N0ciAiUEZBREUiCisKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCisiZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgorbXNnc3RyICIiCisiRHVyY2ggS29tbWF0YSBnZXRyZW5udGUgTGlzdGUgdm9uIFBsdWdpbnMsIGRpZSB6dXPDpHR6bGljaCB6dSBkZW4gUGx1Z2lucyBpbiAiCisiZGVyIFVtZ2VidW5nc3ZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCBnZWxhZGVuIHdlcmRlbiIKKworbXNnaWQgIlBMVUdJTlMiCittc2dzdHIgIlBMVUdJTlMiCisKK21zZ2lkICJEaXNhYmxlIHRyYXBwaW5nIG9mIHNlZ21lbnRhdGlvbiBmYXVsdHMgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIgorbXNnc3RyICIiCisiVmVyZm9sZ2VuIHZvbiBTcGVpY2hlcnp1Z3JpZmZzZmVobGVybiBiZWltIExhZGVuIHZvbiBQbHVnaW5zIGRlYWt0aXZpZXJlbiIKKworbXNnaWQgIkRpc2FibGUgdXBkYXRpbmcgdGhlIHJlZ2lzdHJ5IgorbXNnc3RyICJBa3R1YWxpc2llcmVuIGRlciBSZWdpc3RyeSBkZWFrdGl2aWVyZW4iCisKK21zZ2lkICJEaXNhYmxlIHNwYXduaW5nIGEgaGVscGVyIHByb2Nlc3Mgd2hpbGUgc2Nhbm5pbmcgdGhlIHJlZ2lzdHJ5IgorbXNnc3RyICIiCisiRGllIEVyc3RlbGx1bmcgZWluZXMgSGlsZnNwcm96ZXNzZXMgYmVpbSBFaW5sZXNlbiBkZXIgUmVnaXN0cnkgZGVha3RpdmllcmVuIgorCittc2dpZCAiR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgIk9wdGlvbmVuIHZvbiBHU3RyZWFtZXIiCisKK21zZ2lkICJTaG93IEdTdHJlYW1lciBPcHRpb25zIgorbXNnc3RyICJEaWUgT3B0aW9uZW4gdm9uIEdTdHJlYW1lciBhbnplaWdlbiIKKworbXNnaWQgIlVua25vd24gb3B0aW9uIgorbXNnc3RyICJVbmJla2FubnRlIE9wdGlvbiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgY29yZSBsaWJyYXJ5IGVycm9yLiIKK21zZ3N0ciAiIgorIkdTdHJlYW1lciBoYXQgZWluZW4gYWxsZ2VtZWluZW4gRmVobGVyIGluIGVpbmVyIEtlcm5iaWJsaW90aGVrIGZlc3RnZXN0ZWxsdC4iCisKK21zZ2lkICIiCisiR1N0cmVhbWVyIGRldmVsb3BlcnMgd2VyZSB0b28gbGF6eSB0byBhc3NpZ24gYW4gZXJyb3IgY29kZSB0byB0aGlzIGVycm9yLiIKK21zZ3N0ciAiIgorIkRpZSBFbnR3aWNrbGVyIHZvbiBHU3RyZWFtZXIgd2FyZW4genUgZmF1bCwgZGllc2VtIEZlaGxlciBlaW5lIE51bW1lciB6dSAiCisiZ2ViZW4uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjb2RlIG5vdCBpbXBsZW1lbnRlZC4iCittc2dzdHIgIkludGVybmVyIEdTdHJlYW1lci1GZWhsZXI6IENvZGUgbmljaHQgaW1wbGVtZW50aWVydC4iCisKK21zZ2lkICIiCisiR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkIGFuZCBzb21lIGVsZW1lbnQgZmFpbGVkIHRvIHBvc3QgYSAiCisicHJvcGVyIGVycm9yIG1lc3NhZ2Ugd2l0aCB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZS4iCittc2dzdHIgIiIKKyJHU3RyZWFtZXItRmVobGVyOiBadXN0YW5kc3dlY2hzZWwgc2NobHVnIGZlaGwgdW5kIGVpbmlnZSBFbGVtZW50ZSBnYWJlbiAiCisia2VpbmUgcmljaHRpZ2UgRmVobGVybmFjaHJpY2h0IG1pdCBlaW5lciBVcnNhY2hlbmJlZ3LDvG5kdW5nLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogcGFkIHByb2JsZW0uIgorbXNnc3RyICJJbnRlcm5lciBHU3RyZWFtZXItRmVobGVyOiBQYWRkaW5nLVByb2JsZW0uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iCittc2dzdHIgIkludGVybmVyIEdTdHJlYW1lci1GZWhsZXI6IFRocmVhZC1Qcm9ibGVtLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCittc2dzdHIgIkludGVybmVyIEdTdHJlYW1lci1GZWhsZXI6IFZlcmhhbmRsdW5nc3Byb2JsZW0uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBldmVudCBwcm9ibGVtLiIKK21zZ3N0ciAiSW50ZXJuZXIgR1N0cmVhbWVyLUZlaGxlcjogRXJlaWduaXNwcm9ibGVtLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2VlayBwcm9ibGVtLiIKK21zZ3N0ciAiSW50ZXJuZXIgR1N0cmVhbWVyLUZlaGxlcjogU3VjaGxhdWYtUHJvYmxlbS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNhcHMgcHJvYmxlbS4iCittc2dzdHIgIkludGVybmVyIEdTdHJlYW1lci1GZWhsZXI6IEbDpGhpZ2tlaXRzcHJvYmxlbS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKK21zZ3N0ciAiSW50ZXJuZXIgR1N0cmVhbWVyLUZlaGxlcjogS2VubnplaWNobnVuZ3Nwcm9ibGVtLiIKKworbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCittc2dzdHIgIklocmVyIEluc3RhbGxhdGlvbiB2b24gR1N0cmVhbWVyIGZlaGx0IGVpbiBQbHVnaW4uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKK21zZ3N0ciAiSW50ZXJuZXIgR1N0cmVhbWVyLUZlaGxlcjogWmVpdHByb2JsZW0uIgorCittc2dpZCAiIgorIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGhhcyBiZWVuICIKKyJkaXNhYmxlZC4iCittc2dzdHIgIiIKKyJEaWVzZSBBbndlbmR1bmcgdmVyc3VjaHQgRnVua3Rpb25hbGl0w6R0IHZvbiBHU3RyZWFtZXIgenUgdmVyd2VuZGVuLCBkaWUgIgorImRlYWt0aXZpZXJ0IHdvcmRlbiBpc3QuIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICIiCisiSW50ZXJuZXQgR1N0cmVhbWVyLUZlaGxlcjogUHJvYmxlbSBtaXQgZGVyIFVudGVyc3TDvHR6dW5nc2JpYmxpb3RoZWsuIEJpdHRlICIKKyJzY2hpY2tlbiBTaWUgZWluZW4gRmVobGVyYmVyaWNodC4iCisKK21zZ2lkICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJEaWUgVW50ZXJzdMO8dHp1bmdzYmlibGlvdGhlayBrb25udGUgbmljaHQgaW5pdGlhbGlzaWVydCB3ZXJkZW4uIgorCittc2dpZCAiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIkRpZSBVbnRlcnN0w7x0enVuZ3NiaWJsaW90aGVrIGtvbm50ZSBuaWNodCBnZXNjaGxvc3NlbiB3ZXJkZW4uIgorCittc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJEaWUgVW50ZXJzdMO8dHp1bmdzYmlibGlvdGhlayBrb25udGUgbmljaHQga29uZmlndXJpZXJ0IHdlcmRlbi4iCisKK21zZ2lkICJFbmNvZGluZyBlcnJvci4iCittc2dzdHIgIkZlaGxlciBiZWkgZGVyIEtvZGllcnVuZy4iCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHJlc291cmNlIGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIGhhdCBlaW5lbiBhbGxnZW1laW5lbiBSZXNzb3VyY2VuZmVobGVyIGZlc3RnZXN0ZWxsdC4iCisKK21zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgorbXNnc3RyICJSZXNzb3VyY2UgbmljaHQgZ2VmdW5kZW4uIgorCittc2dpZCAiUmVzb3VyY2UgYnVzeSBvciBub3QgYXZhaWxhYmxlLiIKK21zZ3N0ciAiUmVzc291cmNlIGluIEJlbnV0enVuZyBvZGVyIG5pY2h0IHZlcmbDvGdiYXIuIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcuIgorbXNnc3RyICJEaWUgUmVzc291cmNlIGtvbm50ZSBuaWNodCB6dW0gTGVzZW4gZ2XDtmZmbmV0IHdlcmRlbi4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCittc2dzdHIgIkRpZSBSZXNzb3VyY2Uga29ubnRlIG5pY2h0IHp1bSBTY2hyZWliZW4gZ2XDtmZmbmV0IHdlcmRlbi4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCittc2dzdHIgIkRpZSBSZXNzb3VyY2Uga29ubnRlIG5pY2h0IHp1bSBMZXNlbiB1bmQgU2NocmVpYmVuIGdlw7ZmZm5ldCB3ZXJkZW4uIgorCittc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKK21zZ3N0ciAiRGllIFJlc3NvdXJjZSBrb25udGUgbmljaHQgZ2VzY2hsb3NzZW4gd2VyZGVuLiIKKworbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gcmVzb3VyY2UuIgorbXNnc3RyICJBdXMgZGVyIFJlc3NvdXJjZSBrb25udGUgbmljaHQgZ2VsZXNlbiB3ZXJkZW4uIgorCittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKK21zZ3N0ciAiSW4gZGllIFJlc3NvdXJjZSBrb25udGUgbmljaHQgZ2VzY2hyaWViZW4gd2VyZGVuLiIKKworbXNnaWQgIkNvdWxkIG5vdCBwZXJmb3JtIHNlZWsgb24gcmVzb3VyY2UuIgorbXNnc3RyICJJbiBkZXIgUmVzc291cmNlIGtvbm50ZSBrZWluIFN1Y2hsYXVmIGF1c2dlZsO8aHJ0IHdlcmRlbi4iCisKK21zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgorbXNnc3RyICJEaWUgUmVzc291cmNlIGtvbm50ZSBuaWNodCBhYmdlZ2xpY2hlbiB3ZXJkZW4uIgorCittc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCittc2dzdHIgIiIKKyJEaWUgRWluc3RlbGx1bmdlbiBrb25udGVuIG5pY2h0IGF1cyBkZXIgUmVzc291cmNlIGdlbGVzZW4gb2RlciBpbiBkaWUgIgorIlJlc3NvdXJjZSBnZXNjaHJpZWJlbiB3ZXJkZW4uIgorCittc2dpZCAiTm8gc3BhY2UgbGVmdCBvbiB0aGUgcmVzb3VyY2UuIgorbXNnc3RyICJLZWluIFBsYXR6IGluIGRlciBSZXNzb3VyY2Ugw7xicmlnLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIGhhdCBlaW5lbiBhbGxnZW1laW5lbiBEYXRlbnN0cm9tZmVobGVyIGZlc3RnZXN0ZWxsdC4iCisKK21zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCittc2dzdHIgIiIKKyJEYXMgRWxlbWVudCBrYW5uIGRpZXNlbiBEYXRlbnN0cm9tIG5pY2h0IHZlcmFyYmVpdGVuLiBCaXR0ZSBzY2hpY2tlbiBTaWUgIgorImVpbmVuIEZlaGxlcmJlcmljaHQuIgorCittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCittc2dzdHIgIkRpZSBBcnQgZGVzIERhdGVuc3Ryb21zIGtvbm50ZSBuaWNodCBlcm1pdHRlbHQgd2VyZGVuLiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKK21zZ3N0ciAiIgorIkRlciBEYXRlbnN0cm9tIGlzdCB2b24gZWluZXIgYW5kZXJlbiBBcnQgYWxzIGRlciB2b24gZGllc2VtIEVsZW1lbnQgIgorInZlcmFyYmVpdGV0ZS4iCisKK21zZ2lkICJUaGVyZSBpcyBubyBjb2RlYyBwcmVzZW50IHRoYXQgY2FuIGhhbmRsZSB0aGUgc3RyZWFtJ3MgdHlwZS4iCittc2dzdHIgIiIKKyJFcyBpc3Qga2VpbiBDb2RlYyB2ZXJmw7xnYmFyLCBkZXIgZGllc2UgQXJ0IHZvbiBEYXRlbnN0csO2bWVuIHZlcmFyYmVpdGVuIGthbm4uIgorCittc2dpZCAiQ291bGQgbm90IGRlY29kZSBzdHJlYW0uIgorbXNnc3RyICJEZXIgRGF0ZW5zdHJvbSBrb25udGUgbmljaHQgZGVrb2RpZXJ0IHdlcmRlbi4iCisKK21zZ2lkICJDb3VsZCBub3QgZW5jb2RlIHN0cmVhbS4iCittc2dzdHIgIkRlciBEYXRlbnN0cm9tIGtvbm50ZSBuaWNodCBrb2RpZXJ0IHdlcmRlbi4iCisKK21zZ2lkICJDb3VsZCBub3QgZGVtdWx0aXBsZXggc3RyZWFtLiIKK21zZ3N0ciAiRGVyIERhdGVuc3Ryb20ga29ubnRlIG5pY2h0IGRlbXVsdGlwbGV4dCB3ZXJkZW4uIgorCittc2dpZCAiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIgorbXNnc3RyICJEZXIgRGF0ZW5zdHJvbSBrb25udGUgbmljaHQgbXVsdGlwbGV4dCB3ZXJkZW4uIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiIKK21zZ3N0ciAiRGVyIERhdGVuc3Ryb20gaGF0IGRhcyBmYWxzY2hlIEZvcm1hdC4iCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorIkRlciBEYXRlbnN0cm9tIGlzdCB2ZXJzY2hsw7xzc2VsdCwgYWJlciBFbnRzY2hsw7xzc2VsdW5nIHdpcmQgbmljaHQgIgorInVudGVyc3TDvHR6dC4iCisKK21zZ2lkICIiCisiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGNhbid0IGJlIGRlY3J5cHRlZCBiZWNhdXNlIG5vIHN1aXRhYmxlIGtleSBoYXMgIgorImJlZW4gc3VwcGxpZWQuIgorbXNnc3RyICIiCisiRGVyIERhdGVuc3Ryb20gaXN0IHZlcnNjaGzDvHNzZWx0LCBrYW5uIGFiZXIgbmljaHQgZW50c2NobMO8c3NlbHQgd2VyZGVuLCB3ZWlsICIKKyJrZWluIHBhc3NlbmRlciBTY2hsw7xzc2VsIHZvcmhhbmRlbiBpc3QuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCittc2dzdHIgIktlaW5lIEZlaGxlcm1lbGR1bmcgZsO8ciBkZW4gQmVyZWljaCAlcy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKK21zZ3N0ciAiS2VpbmUgU3RhbmRhcmRmZWhsZXJtZWxkdW5nIGbDvHIgZGVuIEJlcmVpY2ggJXMgdW5kIEZlaGxlcmNvZGUgJWQuIgorCittc2dpZCAiU2VsZWN0ZWQgY2xvY2sgY2Fubm90IGJlIHVzZWQgaW4gcGlwZWxpbmUuIgorbXNnc3RyICIiCisiRGVyIGF1c2dld8OkaGx0ZSBSZWZlcmVuenRha3Qga2FubiBuaWNodCBpbiBkZXIgUGlwZWxpbmUgdmVyd2VuZGV0IHdlcmRlbi4iCisKK21zZ2lkICJ0aXRsZSIKK21zZ3N0ciAiVGl0ZWwiCisKK21zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIgorbXNnc3RyICLDnGJsaWNoZXIgVGl0ZWwiCisKK21zZ2lkICJ0aXRsZSBzb3J0bmFtZSIKK21zZ3N0ciAiU29ydGllcm5hbWUgZGVzIFRpdGVscyIKKworbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIsOcYmxpY2hlciBUaXRlbCB6dSBTb3J0aWVyendlY2tlbiIKKworbXNnaWQgImFydGlzdCIKK21zZ3N0ciAiSW50ZXJwcmV0IgorCittc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIgorbXNnc3RyICJGw7xyIGRpZSBBdWZuYWhtZSB2ZXJhbnR3b3J0bGljaGUgUGVyc29uKGVuKSIKKworbXNnaWQgImFydGlzdCBzb3J0bmFtZSIKK21zZ3N0ciAiU29ydGllcm5hbWUgZGVzIEludGVycHJldGVuIgorCittc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJGw7xyIGRpZSBBdWZuYWhtZSB2ZXJhbnR3b3J0bGljaGUgUGVyc29uKGVuKSB6dSBTb3J0aWVyendlY2tlbiIKKworbXNnaWQgImFsYnVtIgorbXNnc3RyICJBbGJ1bSIKKworbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgorbXNnc3RyICJBbGJ1bSwgZGFzIGRpZXNlIERhdGVuIGVudGjDpGx0IgorCittc2dpZCAiYWxidW0gc29ydG5hbWUiCittc2dzdHIgIlNvcnRpZXJuYW1lIGRlcyBBbGJ1bXMiCisKK21zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiQWxidW0sIGRhcyBkaWVzZSBEYXRlbiBlbnRow6RsdCwgenUgU29ydGllcnp3ZWNrZW4iCisKK21zZ2lkICJhbGJ1bSBhcnRpc3QiCittc2dzdHIgIkludGVycHJldCBkZXMgQWxidW1zIgorCittc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgorbXNnc3RyICJEZXIgSW50ZXJwcmV0IGRlcyBnZXNhbXRlbiBBbGJ1bXMsIHNvIHdpZSBlciBhbmdlemVpZ3Qgd2VyZGVuIHNvbGwiCisKK21zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgIlNvcnRpZXJuYW1lIGRlcyBBbGJlbmludGVycHJldGVuIgorCittc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkIgorbXNnc3RyICJEZXIgSW50ZXJwcmV0IGRlcyBnZXNhbXRlbiBBbGJ1bXMsIHNvIHdpZSBlciBlaW5zb3J0aWVydCB3ZXJkZW4gc29sbCIKKworbXNnaWQgImRhdGUiCittc2dzdHIgIkRhdHVtIgorCittc2dpZCAiZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHRGF0ZSBzdHJ1Y3R1cmUpIgorbXNnc3RyICJEYXR1bSwgYW4gZGVtIGRpZSBEYXRlbiBlcnpldWd0IHd1cmRlbiAoYWxzIEdEYXRlLVN0cnVrdHVyKSIKKworbXNnaWQgImRhdGV0aW1lIgorbXNnc3RyICJEYXR1bVVocnplaXQiCisKK21zZ2lkICJkYXRlIGFuZCB0aW1lIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdzdERhdGVUaW1lIHN0cnVjdHVyZSkiCittc2dzdHIgIiIKKyJEYXR1bSB1bmQgVWhyemVpdCwgYW4gZGVuZW4gZGllIERhdGVuIGVyemV1Z3Qgd3VyZGVuIChhbHMgR3N0RGF0ZVRpbWUtIgorIlN0cnVrdHVyKSIKKworbXNnaWQgImdlbnJlIgorbXNnc3RyICJHZW5yZSIKKworbXNnaWQgImdlbnJlIHRoaXMgZGF0YSBiZWxvbmdzIHRvIgorbXNnc3RyICJHZW5yZSwgenUgZGVtIGRpZXNlIERhdGVuIGdlaMO2cmVuIgorCittc2dpZCAiY29tbWVudCIKK21zZ3N0ciAiS29tbWVudGFyIgorCittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCittc2dzdHIgIkVpbiBmcmVpZXIgVGV4dCwgZGVyIGRpZSBEYXRlbiBiZXNjaHJlaWJ0IgorCittc2dpZCAiZXh0ZW5kZWQgY29tbWVudCIKK21zZ3N0ciAiRXJ3ZWl0ZXJ0ZXIgS29tbWVudGFyIgorCittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgorbXNnc3RyICIiCisiRWluIGJlbGllYmlnZXIgVGV4dCwgZGVyIGRpZSBEYXRlbiBiZXNjaHJlaWJ0LCBpbiBkZXIgRm9ybSDCu1NjaGzDvHNzZWw9V2VydMKrICIKKyJvZGVyIMK7U2NobMO8c3NlbFtkZV09S29tbWVudGFywqsiCisKK21zZ2lkICJ0cmFjayBudW1iZXIiCittc2dzdHIgIlRpdGVsbnVtbWVyIgorCittc2dpZCAidHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgIlRpdGVsbnVtbWVyIGlubmVyaGFsYiBkZXIgU2FtbWx1bmciCisKK21zZ2lkICJ0cmFjayBjb3VudCIKK21zZ3N0ciAiQW56YWhsIGRlciBUaXRlbCIKKworbXNnaWQgImNvdW50IG9mIHRyYWNrcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIHRyYWNrIGJlbG9uZ3MgdG8iCittc2dzdHIgIkFuemFobCBkZXIgVGl0ZWwgaW4gZGVyIFNhbW1sdW5nLCB6dSBkZXIgZGllc2VzIFN0w7xjayBnZWjDtnJ0IgorCittc2dpZCAiZGlzYyBudW1iZXIiCittc2dzdHIgIk51bW1lciBkZXIgUGxhdHRlIgorCittc2dpZCAiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKK21zZ3N0ciAiTnVtbWVyIGRlciBQbGF0dGUgaW5uZXJoYWxiIGRlciBTYW1tbHVuZyIKKworbXNnaWQgImRpc2MgY291bnQiCittc2dzdHIgIkFuemFobCBkZXIgUGxhdHRlbiIKKworbXNnaWQgImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIgorbXNnc3RyICJBbnphaGwgZGVyIFBsYXR0ZW4gaW5uZXJoYWxiIGRlciBTYW1tbHVuZywgenUgZGVyIGRpZXNlIFBsYXR0ZSBnZWjDtnJ0IgorCittc2dpZCAibG9jYXRpb24iCittc2dzdHIgIk9ydCIKKworbXNnaWQgIiIKKyJPcmlnaW4gb2YgbWVkaWEgYXMgYSBVUkkgKGxvY2F0aW9uLCB3aGVyZSB0aGUgb3JpZ2luYWwgb2YgdGhlIGZpbGUgb3Igc3RyZWFtICIKKyJpcyBob3N0ZWQpIgorbXNnc3RyICIiCisiVXJzcHJ1bmcgZGVzIE1lZGl1bXMgYWxzIFVSSSAoT3J0LCB3byBkYXMgT3JpZ2luYWwgZGVyIERhdGVpIG9kZXIgZGVzICIKKyJEYXRlbnN0cm9tcyBiZXJlaXQgc3RlaHQpIgorCittc2dpZCAiaG9tZXBhZ2UiCittc2dzdHIgIkhvbWVwYWdlIgorCittc2dpZCAiSG9tZXBhZ2UgZm9yIHRoaXMgbWVkaWEgKGkuZS4gYXJ0aXN0IG9yIG1vdmllIGhvbWVwYWdlKSIKK21zZ3N0ciAiSG9tZXBhZ2UgZGllc2VzIE1lZGl1bXMgKHouQi4gSW50ZXJwcmV0IG9kZXIgRmlsbSkiCisKK21zZ2lkICJkZXNjcmlwdGlvbiIKK21zZ3N0ciAiQmVzY2hyZWlidW5nIgorCittc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgorbXNnc3RyICJFaW5lIGt1cnplIEJlc2NocmVpYnVuZyBkZXMgSW5oYWx0cyIKKworbXNnaWQgInZlcnNpb24iCittc2dzdHIgIlZlcnNpb24iCisKK21zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKK21zZ3N0ciAiVmVyc2lvbiBkaWVzZXIgRGF0ZW4iCisKK21zZ2lkICJJU1JDIgorbXNnc3RyICJJU1JDIgorCittc2dpZCAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgorbXNnc3RyICIiCisiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNpZWhlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCisKK21zZ2lkICJvcmdhbml6YXRpb24iCittc2dzdHIgIk9yZ2FuaXNhdGlvbiIKKworbXNnaWQgImNvcHlyaWdodCIKK21zZ3N0ciAiQ29weXJpZ2h0IgorCittc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiQ29weXJpZ2h0YW5nYWJlIGRlciBEYXRlbiIKKworbXNnaWQgImNvcHlyaWdodCB1cmkiCittc2dzdHIgIkNvcHlyaWdodC1VUkkiCisKK21zZ2lkICJVUkkgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgIlVSSSB6dSBkZXIgQ29weXJpZ2h0YW5nYWJlIGRlciBEYXRlbiIKKworbXNnaWQgImVuY29kZWQgYnkiCittc2dzdHIgImNvZGllcnQgZHVyY2giCisKK21zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgorbXNnc3RyICJEZXIgTmFtZSBkZXIgY29kaWVyZW5kZW4gUGVyc29uIG9kZXIgT3JnYW5pc2F0aW9uIgorCittc2dpZCAiY29udGFjdCIKK21zZ3N0ciAiS29udGFrdCIKKworbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCittc2dzdHIgIktvbnRha3RpbmZvcm1hdGlvbiIKKworbXNnaWQgImxpY2Vuc2UiCittc2dzdHIgIkxpemVueiIKKworbXNnaWQgImxpY2Vuc2Ugb2YgZGF0YSIKK21zZ3N0ciAiTGl6ZW56IGRlciBEYXRlbiIKKworbXNnaWQgImxpY2Vuc2UgdXJpIgorbXNnc3RyICJMaXplbnotVVJJIgorCittc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJVUkkgenVyIExpemVueiBkZXIgRGF0ZW4iCisKK21zZ2lkICJwZXJmb3JtZXIiCittc2dzdHIgIkRhcnN0ZWxsZXIiCisKK21zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKK21zZ3N0ciAiRGllIGRhcyBTdMO8Y2sgYXVmZsO8aHJlbmRlIFBlcnNvbihlbikiCisKK21zZ2lkICJjb21wb3NlciIKK21zZ3N0ciAiS29tcG9uaXN0IgorCittc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nIgorbXNnc3RyICJGw7xyIGRpZSBBdWZuYWhtZSB2ZXJhbnR3b3J0bGljaGUgUGVyc29uKGVuKSIKKworbXNnaWQgImR1cmF0aW9uIgorbXNnc3RyICJEYXVlciIKKworbXNnaWQgImxlbmd0aCBpbiBHU3RyZWFtZXIgdGltZSB1bml0cyAobmFub3NlY29uZHMpIgorbXNnc3RyICJMw6RuZ2UgZGVzIFN0w7xja3MgaW4gR1N0cmVhbWVyLVplaXRlaW5oZWl0ZW4gKE5hbm9zZWt1bmRlbikiCisKK21zZ2lkICJjb2RlYyIKK21zZ3N0ciAiQ29kZWMiCisKK21zZ2lkICJjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgIkRhdGVuZm9ybWF0LCBpbiBkZW0gZGllIERhdGVuIGdlc3BlaWNoZXJ0IHNpbmQiCisKK21zZ2lkICJ2aWRlbyBjb2RlYyIKK21zZ3N0ciAiVmlkZW8tQ29kZWMiCisKK21zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgIkRhdGVuZm9ybWF0LCBpbiBkZW0gZGllIFZpZGVvZGF0ZW4gZ2VzcGVpY2hlcnQgc2luZCIKKworbXNnaWQgImF1ZGlvIGNvZGVjIgorbXNnc3RyICJBdWRpby1Db2RlYyIKKworbXNnaWQgImNvZGVjIHRoZSBhdWRpbyBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiRGF0ZW5mb3JtYXQsIGluIGRlbSBkaWUgQXVkaW9kYXRlbiBnZXNwZWljaGVydCBzaW5kIgorCittc2dpZCAic3VidGl0bGUgY29kZWMiCittc2dzdHIgIlVudGVydGl0ZWwtQ29kZWMiCisKK21zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgIkRhdGVuZm9ybWF0LCBpbiBkZW0gZGVyIFVudGVydGl0ZWwgZ2VzcGVpY2hlcnQgc2luZCIKKworIyBIaWVyIGlzdCBlaW4gQ29udGFpbmVyZm9ybWF0IHdpZSBBVkkgb2RlciBNUEVHIGdlbWVpbnQuCittc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKK21zZ3N0ciAiQ29udGFpbmVyZm9ybWF0IgorCittc2dpZCAiY29udGFpbmVyIGZvcm1hdCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgIkNvbnRhaW5lcmZvcm1hdCwgaW4gZGVtIGRpZSBEYXRlbiBnZXNwZWljaGVydCBzaW5kIgorCittc2dpZCAiYml0cmF0ZSIKK21zZ3N0ciAiQml0cmF0ZSIKKworbXNnaWQgImV4YWN0IG9yIGF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgIkdlbmF1ZSBvZGVyIGR1cmNoc2Nobml0dGxpY2hlIEJpdHJhdGUgaW4gQml0cy9TZWt1bmRlIgorCittc2dpZCAibm9taW5hbCBiaXRyYXRlIgorbXNnc3RyICJOb3JtYWxlIEJpdHJhdGUiCisKK21zZ2lkICJub21pbmFsIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJCZWkgdmFyaWFibGVyIEJpdHJhdGUgZWluZSBtaXR0bGVyZSBCaXRyYXRlIGluIEJpdHMvU2VrdW5kZSIKKworbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKK21zZ3N0ciAiTWluaW1hbGUgQml0cmF0ZSIKKworbXNnaWQgIm1pbmltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgIk1pbmltYWxlIEJpdHJhdGUgaW4gQml0cy9TZWt1bmRlIgorCittc2dpZCAibWF4aW11bSBiaXRyYXRlIgorbXNnc3RyICJNYXhpbWFsZSBCaXRyYXRlIgorCittc2dpZCAibWF4aW11bSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAiTWF4aW1hbGUgQml0cmF0ZSBpbiBCaXRzL1Nla3VuZGUiCisKK21zZ2lkICJlbmNvZGVyIgorbXNnc3RyICJDb2RpZXJlciIKKworbXNnaWQgImVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCittc2dzdHIgIkNvZGllcmVyIGbDvHIgZGllc2VuIERhdGVuc3Ryb20iCisKK21zZ2lkICJlbmNvZGVyIHZlcnNpb24iCittc2dzdHIgIlZlcnNpb24gZGVzIENvZGllcmVycyIKKworbXNnaWQgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCittc2dzdHIgIlZlcnNpb24gZGVzIENvZGllcmVycyBmw7xyIGRpZXNlbiBEYXRlbnN0cm9tIgorCittc2dpZCAic2VyaWFsIgorbXNnc3RyICJTZXJpZW5udW1tZXIiCisKK21zZ2lkICJzZXJpYWwgbnVtYmVyIG9mIHRyYWNrIgorbXNnc3RyICJTZXJpZW5udW1tZXIgZGVzIFRpdGVscyIKKworIyBodHRwOi8vd3d3LmF1ZGlvaHEuZGUvaW5kZXgucGhwP3Nob3d0b3BpYz0yMyNSZWZlcmVuemxhdXRzdGFlcmtlCittc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgorbXNnc3RyICJMYXV0c3TDpHJrZWFucGFzc3VuZyBkZXMgVGl0ZWxwZWdlbHMiCisKK21zZ2lkICJ0cmFjayBnYWluIGluIGRiIgorbXNnc3RyICJQZWdlbGFucGFzc3VuZyBkZXMgVGl0ZWxzIGluIGRCIgorCittc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBwZWFrIgorbXNnc3RyICJMYXV0c3TDpHJrZWFucGFzc3VuZyBkZXMgU3BpdHplbnBlZ2VscyIKKworbXNnaWQgInBlYWsgb2YgdGhlIHRyYWNrIgorbXNnc3RyICJTcGl0emVucGVnZWwgZGVzIFRpdGVscyIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKK21zZ3N0ciAiTGF1dHN0w6Rya2VhbnBhc3N1bmcgZGVzIEFsYmVucGVnZWxzIgorCittc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKK21zZ3N0ciAiUGVnZWxhbnBhc3N1bmcgZGVzIEFsYnVtcyBpbiBkQiIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKK21zZ3N0ciAiTGF1dHN0w6Rya2VhbnBhc3N1bmcgZGVzIEFsYmVuc3BpdHplbnBlZ2VscyIKKworbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgorbXNnc3RyICJTcGl0emVucGVnZWwgZGVzIEFsYnVtcyIKKworbXNnaWQgInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIgorbXNnc3RyICJSZWZlcmVuenBlZ2VsIGRlciBMYXV0c3TDpHJrZWFucGFzc3VuZyIKKworbXNnaWQgInJlZmVyZW5jZSBsZXZlbCBvZiB0cmFjayBhbmQgYWxidW0gZ2FpbiB2YWx1ZXMiCittc2dzdHIgIlJlZmVyZW56cGVnZWwgZsO8ciBkaWUgUGVnZWxhbnBhc3N1bmdlbiB2b24gVGl0ZWwgdW5kIEFsYnVtIgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSIKK21zZ3N0ciAiU3ByYWNoY29kZSIKKworbXNnaWQgImxhbmd1YWdlIGNvZGUgZm9yIHRoaXMgc3RyZWFtLCBjb25mb3JtaW5nIHRvIElTTy02MzktMSIKK21zZ3N0ciAiU3ByYWNoY29kZSBmw7xyIGRpZXNlbiBEYXRlbnN0cm9tIG5hY2ggSVNPLTYzOS0xIgorCittc2dpZCAiaW1hZ2UiCittc2dzdHIgIkJpbGQiCisKK21zZ2lkICJpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICJCaWxkIGbDvHIgZGllc2VuIERhdGVuc3Ryb20iCisKKyMuIFRSQU5TTEFUT1JTOiAncHJldmlldyBpbWFnZScgPSBpbWFnZSB0aGF0IHNob3dzIGEgcHJldmlldyBvZiB0aGUgZnVsbCBpbWFnZQorbXNnaWQgInByZXZpZXcgaW1hZ2UiCittc2dzdHIgIlZvcnNjaGF1YmlsZCIKKworbXNnaWQgInByZXZpZXcgaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiVm9yc2NoYXViaWxkIGbDvHIgZGllc2VuIERhdGVuc3Ryb20iCisKK21zZ2lkICJhdHRhY2htZW50IgorbXNnc3RyICJBbmhhbmciCisKK21zZ2lkICJmaWxlIGF0dGFjaGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICJBbiBkaWVzZW4gRGF0ZW5zdHJvbSBhbmdlaGFuZ2VuZSBEYXRlaSIKKworbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCittc2dzdHIgIlNjaGzDpGdlIHBybyBNaW51dGUiCisKK21zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKK21zZ3N0ciAiQW56YWhsIGRlciBTY2hsw6RnZSBwcm8gTWludXRlIGltIEjDtnJzdMO8Y2siCisKK21zZ2lkICJrZXl3b3JkcyIKK21zZ3N0ciAiU2NobGFnd29ydGUiCisKK21zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKK21zZ3N0ciAiRHVyY2ggS29tbWEgZ2V0cmVubnRlIFNjaGzDvHNzZWx3w7ZydGVyLCBkaWUgZGVuIEluaGFsdCBiZXNjaHJlaWJlbiIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBuYW1lIgorbXNnc3RyICJnZW9sb2dpc2NoZXIgT3J0IgorCittc2dpZCAiIgorImh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aXZlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciAiCisicHJvZHVjZWQiCittc2dzdHIgIiIKKyJMZXNiYXJlIE9ydHNiZXNjaHJlaWJ1bmcsIHdvIGRhcyBNZWRpdW0gYXVmZ2V6ZWljaG5ldCBvZGVyIHByb2R1emllcnQgd3VyZGUiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCittc2dzdHIgImdlb2dyYWZpc2NoZXIgQnJlaXRlbmdyYWQiCisKK21zZ2lkICIiCisiZ2VvIGxhdGl0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCisiZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIGVxdWF0b3IsIG5lZ2F0aXZlIHZhbHVlcyBmb3IgIgorInNvdXRoZXJuIGxhdGl0dWRlcykiCittc2dzdHIgIiIKKyJnZW9ncmFmaXNjaGVyIEJyZWl0ZW5ncmFkIGRlcyBPcnRlcyBpbiBHcmFkIG5hY2ggV0dTODQgKE51bGwgYW0gw4RxdWF0b3IsICIKKyJuZWdhdGl2ZSBXZXJ0ZSBmw7xyIGRpZSBzw7xkbGljaGVuIEJyZWl0ZW5ncmFkZSksIGFuIGRlbSBkYXMgTWVkaXVtICIKKyJhdWZnZXplaWNobmV0IG9kZXIgcHJvZHV6aWVydCB3dXJkZSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBsb25naXR1ZGUiCittc2dzdHIgImdlb2dyYWZpc2NoZXIgTMOkbmdlbmdyYWQiCisKK21zZ2lkICIiCisiZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCisibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgorbXNnc3RyICIiCisiZ2VvZ3JhZmlzY2hlciBMw6RuZ2VuZ3JhZCBkZXMgT3J0ZXMgaW4gR3JhZCBuYWNoIFdHUzg0IChOdWxsIGbDvHIgZGVuICIKKyJIYXVwdG1lcmlkaWFuIGR1cmNoIEdyZWVud2ljaC9Hcm/Dn2JyaXRhbm5pZW4sIG5lZ2F0aXZlIFdlcnRlIGbDvHIgZGllICIKKyJ3ZXN0bGljaGVuIEzDpG5nZW5ncmFkZSkiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gZWxldmF0aW9uIgorbXNnc3RyICJnZW9ncmFmaXNjaGUgSMO2aGUiCisKK21zZ2lkICIiCisiZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKKyJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgorbXNnc3RyICIiCisiZ2VvZ3JhZmlzY2hlIEjDtmhlIGRlcyBPcnRlcyBpbiBNZXRlcm4gbmFjaCBXR1M4NCAoSMO2aGUgTnVsbCBlbnRzcHJpY2h0IGRlbSAiCisiTWVlcmVzc3BpZWdlbCkiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gY291bnRyeSIKK21zZ3N0ciAiZ2VvZ3JhZmlzY2hlcyBMYW5kIgorCittc2dpZCAiY291bnRyeSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCittc2dzdHIgIiIKKyJEYXMgTGFuZCAoZW5nbGlzY2hlciBOYW1lKSwgaW4gZGVtIGRhcyBNZWRpdW0gYXVmZ2V6ZWljaG5ldCBvZGVyIHByb2R1emllcnQgIgorInd1cmRlIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCittc2dzdHIgImdlb2dyYWZpc2NoZSBTdGFkdCIKKworbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICIiCisiRGllIFN0YWR0IChlbmdsaXNjaGVyIE5hbWUpLCBpbiBkZXIgZGFzIE1lZGl1bSBhdWZnZXplaWNobmV0IG9kZXIgcHJvZHV6aWVydCAiCisid3VyZGUiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gc3VibG9jYXRpb24iCittc2dzdHIgImdlb2dyYWZpc2NoZXIgT3J0c3RlaWwiCisKK21zZ2lkICIiCisiYSBsb2NhdGlvbiB3aGl0aGluIGEgY2l0eSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgb3IgY3JlYXRlZCAoZS5nLiAiCisidGhlIG5laWdoYm9yaG9vZCkiCittc2dzdHIgIiIKKyJlaW4gT3J0IGlubmVyaGFsYiBlaW5lciBTdGFkdCwgaW4gZGVtIGRhcyBNZWRpdW0gYXVmZ2V6ZWljaG5ldCBvZGVyICIKKyJwcm9kdXppZXJ0IHd1cmRlIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGhvcml6b250YWwgZXJyb3IiCittc2dzdHIgIkdlb2dyYWZpc2NoZXIgaG9yaXpvbnRhbGVyIEZlaGxlciIKKworbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgorbXNnc3RyICJFcndhcnRldGVyIEZlaGxlciBkZXIgaG9yaXpvbnRhbGVuIFBvc2l0aW9uc21lc3N1bmcgKGluIE1ldGVyKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKK21zZ3N0ciAiR2VvZ3JhZmlzY2hlIEJld2VndW5nc2dlc2Nod2luZGlna2VpdCIKKworbXNnaWQgIiIKKyJtb3ZlbWVudCBzcGVlZCBvZiB0aGUgY2FwdHVyaW5nIGRldmljZSB3aGlsZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIGluIG0vcyIKK21zZ3N0ciAiIgorIkJld2VndW5nc2dlc2Nod2luZGlna2VpdCBkZXMgQXVmemVpY2hudW5nc2dlcsOkdHMgd8OkaHJlbmQgZGVyIEF1ZnplaWNobnVuZyAiCisibWl0IG0vcyIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBkaXJlY3Rpb24iCittc2dzdHIgIkdlb2dyYWZpc2NoZSBCZXdlZ3VuZ3NyaWNodHVuZyIKKworbXNnaWQgIiIKKyJpbmRpY2F0ZXMgdGhlIG1vdmVtZW50IGRpcmVjdGlvbiBvZiB0aGUgZGV2aWNlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgb2YgYSAiCisibWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sIDAgIgorIm1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKK21zZ3N0ciAiIgorIlplaWd0IGRpZSBCZXdlZ3VuZ3NyaWNodHVuZyBkZXMgQXVmemVpY2hudW5nc2dlcsOkdHMgd8OkaHJlbmQgZGVyIEF1ZnplaWNobnVuZyAiCisiZWluZXMgTWVkaXVtcyBhbi4gRGllIERhcnN0ZWxsdW5nIGVyZm9sZ3QgaW4gR3JhZCBhbHMgRmxpZcOfa29tbWF6YWhsLiAwICIKKyJlbnRzcHJpY2h0IGRlbSBnZW9ncmFmaXNjaGVuIE5vcmRlbiB1bmQgZGllIFphaGwgd8OkY2hzdCBpbSBVaHJ6ZWlnZXJzaW5uIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgorbXNnc3RyICJHZW9ncmFmaXNjaGUgQXVmemVpY2hudW5nc3JpY2h0dW5nIgorCittc2dpZCAiIgorImluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcgIGEgbWVkaWEuICIKKyJJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50ICByZXByZXNlbnRhdGlvbiwgMCBtZWFucyB0aGUgIgorImdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgorbXNnc3RyICIiCisiWmVpZ3QgZGllIFJpY2h0dW5nIGRlcyBHZXLDpHRzIHfDpGhyZW5kIGRlciBBdWZ6ZWljaG51bmcgZWluZXMgTWVkaXVtcyBhbi4gRGllICIKKyJEYXJzdGVsbHVuZyBlcmZvbGd0IGluIEdyYWQgYWxzIEZsaWXDn2tvbW1hemFobC4gMCBlbnRzcHJpY2h0IGRlbSAiCisiZ2VvZ3JhZmlzY2hlbiBOb3JkZW4gdW5kIGRpZSBaYWhsIHfDpGNoc3QgaW0gVWhyemVpZ2Vyc2lubiIKKworIy4gVFJBTlNMQVRPUlM6ICdzaG93IG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lJyBoZXJlCittc2dpZCAic2hvdyBuYW1lIgorbXNnc3RyICJOYW1lIHplaWdlbiIKKworbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCittc2dzdHIgIk5hbWUgZGVzIFRWL1BvZGNhc3QvZGVyIFNlcmllLCB2b24gZGVtIGRhcyBNZWRpdW0gc3RhbW10IgorCisjLiBUUkFOU0xBVE9SUzogJ3Nob3cgc29ydG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lIGFzIHVzZWQgZm9yIHNvcnRpbmcgcHVycG9zZXMnIGhlcmUKK21zZ2lkICJzaG93IHNvcnRuYW1lIgorbXNnc3RyICJTb3J0aWVybmFtZSB6ZWlnZW4iCisKK21zZ2lkICIiCisiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIiIKKyJOYW1lIGRlcyBUVi9Qb2RjYXN0L2RlciBTZXJpZSwgdm9uIGRlbSBkYXMgTWVkaXVtIHN0YW1tdCwgenVtIFNvcnRpZXJlbiIKKworbXNnaWQgImVwaXNvZGUgbnVtYmVyIgorbXNnc3RyICJOdW1tZXIgZGVyIEZvbGdlIgorCittc2dpZCAiVGhlIGVwaXNvZGUgbnVtYmVyIGluIHRoZSBzZWFzb24gdGhlIG1lZGlhIGlzIHBhcnQgb2YiCittc2dzdHIgIkRpZSBOdW1tZXIgZGVyIEZvbGdlIGluIGRlciBTZXJpZSwgdm9uIGRlciBkYXMgTWVkaXVtIGVpbiBUZWlsIGlzdCIKKworbXNnaWQgInNlYXNvbiBudW1iZXIiCittc2dzdHIgIk51bW1lciBkZXIgU2VyaWUiCisKK21zZ2lkICJUaGUgc2Vhc29uIG51bWJlciBvZiB0aGUgc2hvdyB0aGUgbWVkaWEgaXMgcGFydCBvZiIKK21zZ3N0ciAiRGllIE51bW1lciBkZXIgU2VyaWUgZGVyIFNlbmR1bmcsIHZvbiBkZXIgZGFzIE1lZGl1bSBlaW4gVGVpbCBpc3QiCisKK21zZ2lkICJseXJpY3MiCittc2dzdHIgIkxpZWR0ZXh0IgorCittc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgorbXNnc3RyICJEZXIgTGllZHRleHQgZGVzIE1lZGl1bXMsIGdld8O2aG5saWNoIGbDvHIgTGllZGVyIHZlcndlbmRldCIKKworbXNnaWQgImNvbXBvc2VyIHNvcnRuYW1lIgorbXNnc3RyICJTb3J0aWVybmFtZSBkZXMgS29tcG9uaXN0ZW4iCisKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJGw7xyIGRpZSBBdWZuYWhtZSB2ZXJhbnR3b3J0bGljaGUgUGVyc29uKGVuKSwgZsO8ciBTb3J0aWVyendlY2tlIgorCittc2dpZCAiZ3JvdXBpbmciCittc2dzdHIgIkdydXBwaWVyZW4iCisKK21zZ2lkICIiCisiR3JvdXBzIHJlbGF0ZWQgbWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSB0cmFja3MsIGxpa2UgdGhlIGRpZmZlcmVudCBwaWVjZXMgIgorIm9mIGEgY29uY2VydG8uIEl0IGlzIGEgaGlnaGVyIGxldmVsIHRoYW4gYSB0cmFjaywgYnV0IGxvd2VyIHRoYW4gYW4gYWxidW0iCittc2dzdHIgIiIKKyJHcnVwcGVuYmV6b2dlbmVzIE1lZGl1bSwgZGFzICBtZWhyZXJlIFRpdGVsIHVtZmFzc3QsIMOkaG5saWNoIGRlciAiCisidmVyc2NoaWVkZW5lbiBTdMO8Y2tlIGVpbmVzIEtvbnplcnRlcy4gRXMgaXN0IGVpbmUgRWJlbmUgaMO2aGVyIGFscyBlaW4gVGl0ZWwsICIKKyJhYmVyIG5pZWRyaWdlciBhbHMgZWluIEFsYnVtIgorCittc2dpZCAidXNlciByYXRpbmciCittc2dzdHIgIkJlbnV0emVyYmV3ZXJ0dW5nIgorCittc2dpZCAiIgorIlJhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgdXNlci4gVGhlIGhpZ2hlciB0aGUgcmFuaywgdGhlIG1vcmUgdGhlIHVzZXIgbGlrZXMgIgorInRoaXMgbWVkaWEiCittc2dzdHIgIiIKKyJCZXdlcnRldCBkdXJjaCBlaW5lbiBCZW51dHplci4gSmUgaMO2aGVyIGRpZSBCZXdlcnR1bmcsIGRlc3RvIGJlbGllYnRlciBpc3QgIgorImRhcyBNZWRpdW0gYmVpbSBCZW51dHplciIKKworbXNnaWQgImRldmljZSBtYW51ZmFjdHVyZXIiCittc2dzdHIgIkdlcsOkdGVoZXJzdGVsbGVyIgorCittc2dpZCAiTWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKK21zZ3N0ciAiRGVyIEhlcnN0ZWxsZXIgZGVzIEdlcsOkdHMgenVyIEVyc3RlbGx1bmcgZGllc2VzIE1lZGl1bXMiCisKK21zZ2lkICJkZXZpY2UgbW9kZWwiCittc2dzdHIgIkdlcsOkdGVtb2RlbGwiCisKK21zZ2lkICJNb2RlbCBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCittc2dzdHIgIkRhcyBNb2RlbGwgZGVzIEdlcsOkdHMgenVyIEVyc3RlbGx1bmcgZGllc2VzIE1lZGl1bXMiCisKK21zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgorbXNnc3RyICJBbndlbmR1bmdzbmFtZSIKKworbXNnaWQgIkFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSIKK21zZ3N0ciAiRGllIHp1ciBFcnN0ZWxsdW5nIGRpZXNlcyBNZWRpdW1zIHZlcndlbmRldGUgQW53ZW5kdW5nIgorCittc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKK21zZ3N0ciAiQW53ZW5kdW5nc2RhdGVuIgorCittc2dpZCAiQXJiaXRyYXJ5IGFwcGxpY2F0aW9uIGRhdGEgdG8gYmUgc2VyaWFsaXplZCBpbnRvIHRoZSBtZWRpYSIKK21zZ3N0ciAiQmVsaWViaWdlIEFud2VuZHVuZ3NkYXRlbiB6dXIgU2VyaWFsaXNpZXJ1bmcgaW4gZGFzIE1lZGl1bSIKKworbXNnaWQgImltYWdlIG9yaWVudGF0aW9uIgorbXNnc3RyICJCaWxkb3JpZW50aWVydW5nIgorCittc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgorbXNnc3RyICJXaWUgZGFzIEJpbGQgdm9yIGRlciBEYXJzdGVsbHVuZyBnZWRyZWh0IG9kZXIgZ2VzcGllZ2VsdCB3ZXJkZW4gc29sbCIKKworbXNnaWQgIiwgIgorbXNnc3RyICIsICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgorbXNnc3RyICJGRUhMRVI6IFZvbiBFbGVtZW50ICVzOiAlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorIlp1c8OkdHpsaWNoZSBGZWhsZXJkaWFnbm9zZWluZm9ybWF0aW9uOlxuIgorIiVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgorbXNnc3RyICJMZWVyZW4gQmVow6RsdGVyIMK7JXPCqyBhbmdlZ2ViZW4gLS0gbmljaHQgZXJsYXVidCIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBiaW4gXCIlc1wiLCBza2lwcGluZyIKK21zZ3N0ciAiS2VpbiBCZWjDpGx0ZXIgwrslc8KrIC0tIMO8YmVyc3ByaW5nZW4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICJLZWluZSBFaWdlbnNjaGFmdCDCuyVzwqsgaW0gRWxlbWVudCDCuyVzwqsiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgorbXNnc3RyICIiCisiRGllIEVpZ2Vuc2NoYWZ0IMK7JXPCqyBpbSBFbGVtZW50IMK7JXPCqyBrb25udGUgbmljaHQgYXVmIMK7JXPCqyBnZXNldHp0IHdlcmRlbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbGluayAlcyB0byAlcyIKK21zZ3N0ciAiJXMga29ubnRlIG5pY2h0IG1pdCAlcyB2ZXJrbsO8cGZ0IHdlcmRlbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKK21zZ3N0ciAiS2VpbiBFbGVtZW50IMK7JXPCqyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCittc2dzdHIgIkRpZSBGw6RoaWdrZWl0ZW4gdm9uIMK7JXPCqyBrb25udGVuIG5pY2h0IGF1c2dlbGVzZW4gd2VyZGVuIgorCittc2dpZCAibGluayB3aXRob3V0IHNvdXJjZSBlbGVtZW50IgorbXNnc3RyICJWZXJrbsO8cGZ1bmcgb2huZSBRdWVsbGVsZW1lbnQiCisKK21zZ2lkICJsaW5rIHdpdGhvdXQgc2luayBlbGVtZW50IgorbXNnc3RyICJWZXJrbsO8cGZ1bmcgb2huZSBaaWVsZWxlbWVudCIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAiS2VpbiBRdWVsbGVsZW1lbnQgZsO8ciBVUkkgwrslc8KrIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGVsZW1lbnQgdG8gbGluayBVUkkgXCIlc1wiIHRvIgorbXNnc3RyICJLZWluIEVsZW1lbnQsIHVtIFVSSSDCuyVzwqsgenUgdmVyYmluZGVuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAiS2VpbiBaaWVsZWxlbWVudCBmw7xyIFVSSSDCuyVzwqsiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxpbmsgc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJaaWVsZWxlbWVudCBmw7xyIFVSSSDCuyVzwqsgbmljaHQgdmVya27DvHBmdCB3ZXJkZW4iCisKK21zZ2lkICJlbXB0eSBwaXBlbGluZSBub3QgYWxsb3dlZCIKK21zZ3N0ciAiTGVlcmUgTGVpdHVuZyBpc3QgbmljaHQgZXJsYXVidCIKKworbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKK21zZ3N0ciAiSW50ZXJuZXIgWmVpdGZlaGxlciIKKworbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCittc2dzdHIgIkludGVybmVyIEZlaGxlciBpbSBEYXRlbmZsdXNzLiIKKworbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgorbXNnc3RyICJFcyB3ZXJkZW4gdmllbGUgUHVmZmVyIHZlcndvcmZlbi4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCittc2dzdHIgIkludGVybmVzIFByb2JsZW0gaW0gRGF0ZW5mbHVzcy4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCittc2dzdHIgIkludGVybmVyIEZlaGxlciBpbSBEYXRlbnN0cm9tLiIKKworbXNnaWQgIkZpbHRlciBjYXBzIgorbXNnc3RyICJGaWx0ZXJmw6RoaWdrZWl0ZW4iCisKK21zZ2lkICIiCisiUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCisicHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKK21zZ3N0ciAiIgorIkJlc2NocsOkbmt0IGRpZSBtw7ZnbGljaGVuIEZpbHRlcmbDpGhpZ2tlaXRlbiAoTlVMTCBiZWRldXRldCBBTExFKS4gU2V0emVuICIKKyJkaWVzZXIgRWlnZW5zY2hhZnQgcmVmZXJlbnppZXJ0IGVpbiBoaW56dWdlZsO8Z3RlcyBHc3RDYXBzLU9iamVrdC4iCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiS2VpbiBEYXRlaW5hbWUgenVtIFNjaHJlaWJlbiBhbmdlZ2ViZW4uIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiRGF0ZWkgwrslc8KrIGtvbm50ZSBuaWNodCB6dW0gU2NocmVpYmVuIGdlw7ZmZm5ldCB3ZXJkZW4uIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNsb3NpbmcgZmlsZSBcIiVzXCIuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hsaWXDn2VuIGRlciBEYXRlaSDCuyVzwqsuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBEdXJjaHN1Y2hlbiBkZXIgRGF0ZW4gwrslc8KrLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gU2NocmVpYmVuIGRlciBEYXRlbiDCuyVzwqsuIgorCittc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCittc2dzdHIgIktlaW4gRGF0ZWluYW1lIHp1bSBMZXNlbiBhbmdlZ2ViZW4uIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiRGllIERhdGVpIMK7JXPCqyBrb25udGUgbmljaHQgenVtIExlc2VuIGdlw7ZmZm5ldCB3ZXJkZW4uIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgaW5mbyBvbiBcIiVzXCIuIgorbXNnc3RyICJJbmZvcm1hdGlvbmVuIHp1IMK7JXPCqyBrb25udGVuIG5pY2h0IGdlbGVzZW4gd2VyZGVuLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIgorbXNnc3RyICLCuyVzwqsgaXN0IGVpbiBPcmRuZXIuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKK21zZ3N0ciAiRGllIERhdGVpIMK7JXPCqyBpc3QgZWluIFNvY2tldC4iCisKK21zZ2lkICJGYWlsZWQgYWZ0ZXIgaXRlcmF0aW9ucyBhcyByZXF1ZXN0ZWQuIgorbXNnc3RyICJOYWNoIGRlbSBEdXJjaGxhdWZlbiBmZWhsZ2VzY2hsYWdlbi4gV2llIGdld8O8bnNjaHQuIgorCittc2dpZCAiTm8gVGVtcCBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIKK21zZ3N0ciAiS2VpbiB0ZW1wb3LDpHJlciBPcmRuZXIgYW5nZWdlYmVuLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIgorbXNnc3RyICJEaWUgdGVtcG9yw6RyZSBEYXRlaSDCuyVzwqsga29ubnRlIG5pY2h0IGFuZ2VsZWd0IHdlcmRlbi4iCisKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hyZWliZW4gaW4gZGllIERvd25sb2FkLURhdGVpLiIKKworbXNnaWQgImNhcHMiCittc2dzdHIgIkbDpGhpZ2tlaXRlbiIKKworbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCittc2dzdHIgIkVya2FubnRlIEbDpGhpZ2tlaXRlbiBpbSBEYXRlbnN0cm9tIgorCittc2dpZCAibWluaW11bSIKK21zZ3N0ciAiTWluaW11bSIKKworbXNnaWQgIm1heGltdW0iCittc2dzdHIgIk1heGltdW0iCisKK21zZ2lkICJmb3JjZSBjYXBzIgorbXNnc3RyICJGw6RoaWdrZWl0ZW4gZXJ6d2luZ2VuIgorCittc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCittc2dzdHIgIkbDpGhpZ2tlaXRlbiBvaG5lIFR5cGVuc3VjaGUgZXJ6d2luZ2VuIgorCittc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgorbXNnc3RyICJEZXIgRGF0ZW5zdHJvbSBlbnRow6RsdCBrZWluZSBEYXRlbi4iCisKK21zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgorbXNnc3RyICJJbXBsZW1lbnRpZXJ0ZSBTY2huaXR0c3RlbGxlbjpcbiIKKworbXNnaWQgInJlYWRhYmxlIgorbXNnc3RyICJsZXNiYXIiCisKK21zZ2lkICJ3cml0YWJsZSIKK21zZ3N0ciAic2NocmVpYmJhciIKKworbXNnaWQgImNvbnRyb2xsYWJsZSIKK21zZ3N0ciAicmVnZWxiYXIiCisKK21zZ2lkICJjaGFuZ2VhYmxlIGluIE5VTEwsIFJFQURZLCBQQVVTRUQgb3IgUExBWUlORyBzdGF0ZSIKK21zZ3N0ciAiw6RuZGVyYmFyIGluIGRlbiBTdGF0dXMgTlVMTCwgQkVSRUlULCBQQVVTSUVSVCBvZGVyIEFCU1BJRUxFTiIKKworbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiCittc2dzdHIgIsOkbmRlcmJhciBudXIgaW4gZGVuIFN0YXR1cyBOVUxMLCBCRVJFSVQgb2RlciBQQVVTSUVSVCIKKworbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMIG9yIFJFQURZIHN0YXRlIgorbXNnc3RyICLDpG5kZXJiYXIgbnVyIGluIGRlbiBTdGF0dXMgTlVMTCBvZGVyIEJFUkVJVCIKKworbXNnaWQgIkJsYWNrbGlzdGVkIGZpbGVzOiIKK21zZ3N0ciAiRGF0ZWllbiBhdWYgZGVyIHNjaHdhcnplbiBMaXN0ZToiCisKK21zZ2lkICJUb3RhbCBjb3VudDogIgorbXNnc3RyICJHZXNhbXR6YWhsOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxhY2tsaXN0ZWQgZmlsZSIKK21zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHJbMF0gIiVkIERhdGVpIGF1ZiBkZXIgc2Nod2FyemVuIExpc3RlIgorbXNnc3RyWzFdICIlZCBEYXRlaWVuIGF1ZiBkZXIgc2Nod2FyemVuIExpc3RlIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIHBsdWdpbiIKK21zZ2lkX3BsdXJhbCAiJWQgcGx1Z2lucyIKK21zZ3N0clswXSAiJWQgUGx1Z2luIgorbXNnc3RyWzFdICIlZCBQbHVnaW5zIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdCBlbnRyeSIKK21zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0IGVudHJpZXMiCittc2dzdHJbMF0gIiVkIEVpbnRyYWcgaW4gZGVyIHNjaHdhcnplbiBMaXN0ZSIKK21zZ3N0clsxXSAiJWQgRWludHLDpGdlIGluIGRlciBzY2h3YXJ6ZW4gTGlzdGUiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgZmVhdHVyZSIKK21zZ2lkX3BsdXJhbCAiJWQgZmVhdHVyZXMiCittc2dzdHJbMF0gIiVkIE1lcmttYWwiCittc2dzdHJbMV0gIiVkIE1lcmttYWxlIgorCittc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgorbXNnc3RyICJBbGxlIEVsZW1lbnRlIGF1c2dlYmVuIgorCittc2dpZCAiUHJpbnQgbGlzdCBvZiBibGFja2xpc3RlZCBmaWxlcyIKK21zZ3N0ciAiRGF0ZWllbiBpbiBkZXIgc2Nod2FyemVuIExpc3RlIGF1c2dlYmVuIgorCittc2dpZCAiIgorIlByaW50IGEgbWFjaGluZS1wYXJzYWJsZSBsaXN0IG9mIGZlYXR1cmVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIG9yIGFsbCAiCisicGx1Z2lucyBwcm92aWRlLlxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBpbiBjb25uZWN0aW9uIHdpdGggZXh0ZXJuYWwgIgorImF1dG9tYXRpYyBwbHVnaW4gaW5zdGFsbGF0aW9uIG1lY2hhbmlzbXMiCittc2dzdHIgIiIKKyJFaW5lIG1hc2NoaW5lbmxlc2JhcmUgTGlzdGUgZGVyIE1lcmttYWxlLCBkaWUgZGFzIGFuZ2VnZWJlbmUgb2RlciBhbGxlICIKKyJQbHVnaW5zIGJlcmVpdCBzdGVsbGVuLlxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE7DvHR6bGljaCBpbiBWZXJiaW5kdW5nIG1pdCBleHRlcm5lbiAiCisiTWVjaGFuaXNtZW4genVyIGF1dG9tYXRpc2NoZW4gSW5zdGFsbGF0aW9uIHZvbiBQbHVnaW5zIgorCittc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgorbXNnc3RyICJEaWUgSW5oYWx0ZSBkZXMgUGx1Z2lucyBhdWZsaXN0ZW4iCisKK21zZ2lkICJQcmludCBzdXBwb3J0ZWQgVVJJIHNjaGVtZXMsIHdpdGggdGhlIGVsZW1lbnRzIHRoYXQgaW1wbGVtZW50IHRoZW0iCittc2dzdHIgIiIKKyJVbnRlcnN0w7x0enRlIFVSSS1TY2hlbWF0YSBtaXQgZGVuIEVsZW1lbnRlbiBhdXNnZWJlbiwgZGllIHNpZSBpbXBsZW1lbnRpZXJlbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmlsZTogJXNcbiIKK21zZ3N0ciAiRGllIFBsdWdpbi1EYXRlaSBrb25udGUgbmljaHQgZ2VsYWRlbiB3ZXJkZW46ICVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iCittc2dzdHIgIktlaW4gc29sY2hlcyBFbGVtZW50IG9kZXIgUGx1Z2luIMK7JXPCq1xuIgorCittc2dpZCAiSW5kZXggc3RhdGlzdGljcyIKK21zZ3N0ciAiSW5kZXgtU3RhdGlzdGlrZW4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICJOYWNocmljaHQgIyV1IHd1cmRlIHZvbiBFbGVtZW50IMK7JXPCqyAoJXMpIGVyaGFsdGVuOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCittc2dzdHIgIk5hY2hyaWNodCAjJXUgd3VyZGUgdm9uIFBhZGRpbmcgwrslczolc8KrICglcykgZXJoYWx0ZW46ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAiTmFjaHJpY2h0ICMldSB3dXJkZSB2b24gT2JqZWt0IMK7JXPCqyAoJXMpIGVyaGFsdGVuOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKK21zZ3N0ciAiTmFjaHJpY2h0ICMldSAoJXMpIHd1cmRlIGVyaGFsdGVuOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIgorbXNnc3RyICJFT1Mgd3VyZGUgdm9uIEVsZW1lbnQgwrslc8KrIGVyaGFsdGVuLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCittc2dzdHIgIktFTk5aRUlDSEVOIEdFRlVOREVOOiBHZWZ1bmRlbiB2b24gRWxlbWVudCDCuyVzwqsuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBwYWQgXCIlczolc1wiLlxuIgorbXNnc3RyICJLRU5OWkVJQ0hFTiBHRUZVTkRFTjogR2VmdW5kZW4gdm9uIFBhZGRpbmcgwrslczolc8KrLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKK21zZ3N0ciAiS0VOTlpFSUNIRU4gR0VGVU5ERU46IEdlZnVuZGVuIHZvbiBPYmpla3Qgwrslc8KrLlxuIgorCittc2dpZCAiRk9VTkQgVEFHXG4iCittc2dzdHIgIktFTk5aRUlDSEVOIEdFRlVOREVOXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklORk86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorIklORk86XG4iCisiJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCittc2dzdHIgIldBUk5VTkc6IFZvbiBFbGVtZW50ICVzOiAlc1xuIgorCittc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLi4uXG4iCittc2dzdHIgIlZvcmdlbGF1ZmVuLCBhdWYgRW5kZSBkZXMgWndpc2NoZW5zcGVpY2hlcm5zIHdhcnRlbiDigKZcbiIKKworbXNnaWQgImJ1ZmZlcmluZy4uLiIKK21zZ3N0ciAiWndpc2NoZW5zcGVpY2hlcm4gbMOkdWZ0IOKApiIKKworbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIiIKKyJad2lzY2hlbnNwZWljaGVybiBhYmdlc2NobG9zc2VuLCBMZWl0dW5nIHdpcmQgYXVmIEFCU1BJRUxFTiBnZXNldHp0IOKAplxuIgorCittc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAiIgorIlp3aXNjaGVuc3BlaWNoZXJuLCBMZWl0dW5nIHdpcmQgYXVmIFBBVVNJRVJUIGdlc2V0enQg4oCmXG4iCisiXG4iCisKK21zZ2lkICJSZWRpc3RyaWJ1dGUgbGF0ZW5jeS4uLlxuIgorbXNnc3RyICJWZXJ6w7ZnZXJ1bmcgbmV1IHZlcnRlaWxlbiDigKZcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgorbXNnc3RyICJTdGF0dXMgd2lyZCBhdWYgJXMgZ2VzZXR6dCB3aWUgdm9uICVzIGdld8O8bnNjaHQuLi5cbiIKKworbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCittc2dzdHIgIkludGVycnVwdDogTGVpdHVuZyB3aXJkIGdlc3RvcHB0IC4uLlxuIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nIGVsZW1lbnQ6ICVzXG4iCittc2dzdHIgIktlaW4gRWxlbWVudCDCuyVzwqsiCisKK21zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCittc2dzdHIgIktlbm56ZWljaGVuIChhdWNoIGJla2FubnQgYWxzIE1ldGFkYXRlbikgYXVzZ2ViZW4iCisKK21zZ2lkICJPdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBwcm9wZXJ0eSBub3RpZmljYXRpb25zIgorbXNnc3RyICJadXN0YW5kc2luZm9ybWF0aW9uIHVuZCBFaWdlbnNjaGFmdHNtaXR0ZWlsdW5nZW4gYXVzZ2ViZW4iCisKK21zZ2lkICJEbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uIgorbXNnc3RyICJLZWluZSBGb3J0c2Nocml0dHNpbmZvcm1hdGlvbmVuIGF1c2dlYmVuIgorCittc2dpZCAiT3V0cHV0IG1lc3NhZ2VzIgorbXNnc3RyICJBdXNnYWJlbmFjaHJpY2h0ZW4iCisKK21zZ2lkICJEbyBub3Qgb3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBvZiBUWVBFIgorbXNnc3RyICJadXN0YW5kc2luZm9ybWF0aW9uIGRlciBBcnQgQVJUIG5pY2h0IGF1c2dlYmVuIgorCittc2dpZCAiVFlQRTEsVFlQRTIsLi4uIgorbXNnc3RyICJBUlQxLEFSVDIsLi4uIgorCittc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgorbXNnc3RyICJLZWluZSBSb3V0aW5lIHp1bSBBYmZhbmdlbiB2b24gRmVobGVybiBpbnN0YWxsaWVyZW4iCisKK21zZ2lkICJQcmludCBhbGxvYyB0cmFjZSAoaWYgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUpIgorbXNnc3RyICIiCisiU3BlaWNoZXJ6dW9yZG51bmdzdmVyZm9sZ3VuZyBhdXNnZWJlbiAoZmFsbHMgenVyIEtvbXBpbGllcnplaXQgYWt0aXZpZXJ0KSIKKworbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKK21zZ3N0ciAiRU9TIGF1ZiBRdWVsbGUgdm9yIGRlbSBCZWVuZGVuIGRlciBMZWl0dW5nIGVyendpbmdlbiIKKworbXNnaWQgIkdhdGhlciBhbmQgcHJpbnQgaW5kZXggc3RhdGlzdGljcyIKK21zZ3N0ciAiSW5kZXgtU3RhdGlzdGlrZW4gc2FtbWVsbiB1bmQgYXVzZ2ViZW4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZDogJXMuXG4iCittc2dzdHIgIkZFSExFUjogTGVpdHVuZyBrb25udGUgbmljaHQga29uc3RydWllcnQgd2VyZGVuOiAlcy5cbiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXG4iCittc2dzdHIgIkZFSExFUjogTGVpdHVuZyBrb25udGUgbmljaHQga29uc3RydWllcnQgd2VyZGVuLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGVycm9uZW91cyBwaXBlbGluZTogJXNcbiIKK21zZ3N0ciAiV0FSTlVORzogRmVobGVyaGFmdGUgTGVpdHVuZzogJXNcbiIKKworbXNnaWQgIkVSUk9SOiB0aGUgJ3BpcGVsaW5lJyBlbGVtZW50IHdhc24ndCBmb3VuZC5cbiIKK21zZ3N0ciAiRkVITEVSOiBEYXMgRWxlbWVudCDCu0xlaXR1bmfCqyB3dXJkZSBuaWNodCBnZWZ1bmRlbi5cbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgorbXNnc3RyICJMZWl0dW5nIHdpcmQgYXVmIFBBVVNJRVJUIGdlc2V0enQgLi4uXG4iCisKK21zZ2lkICJFUlJPUjogUGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBhdXNlLlxuIgorbXNnc3RyICJGRUhMRVI6IExlaXR1bmcgbcO2Y2h0ZSBuaWNodCBwYXVzaWVydCB3ZXJkZW4uXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCittc2dzdHIgIkxlaXR1bmcgaXN0IGFrdGl2IHVuZCBlcmZvcmRlcnQga2VpbmVuIFZPUkxBVUYg4oCmXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMSU5HIC4uLlxuIgorbXNnc3RyICJMZWl0dW5nIGzDpHVmdCB2b3Ig4oCmXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHByZXJvbGwuXG4iCittc2dzdHIgIkZFSExFUjogTGVpdHVuZyBsw6R1ZnQgbmljaHQgdm9yLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgorbXNnc3RyICJMZWl0dW5nIGlzdCB2b3JnZWxhdWZlbiDigKZcbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKK21zZ3N0ciAiTGVpdHVuZyB3aXJkIGF1ZiBBQlNQSUVMRU4gZ2VzZXR6dCAuLi5cbiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKK21zZ3N0ciAiRkVITEVSOiBMZWl0dW5nIHNwaWVsdCBuaWNodCBhYi5cbiIKKworbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIEZvcmNpbmcgRU9TIG9uIHRoZSBwaXBlbGluZVxuIgorbXNnc3RyICIiCisiRU9TIGJlaSBCZWVuZGVuIGlzdCBlaW5nZXNjaGFsdGV0IC0tIEVPUyB3aXJkIGF1ZiBkaWUgTGVpdHVuZyBlcnp3dW5nZW5cbiIKKworbXNnaWQgIldhaXRpbmcgZm9yIEVPUy4uLlxuIgorbXNnc3RyICJBdWYgRU9TIHdpcmQgZ2V3YXJ0ZXQg4oCmXG4iCisKK21zZ2lkICJFT1MgcmVjZWl2ZWQgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgorbXNnc3RyICJFT1MgZXJoYWx0ZW4gLSBMZWl0dW5nIHdpcmQgYW5nZWhhbHRlbiDigKZcbiIKKworbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgorbXNnc3RyICJFaW4gRmVobGVyIGlzdCBiZWltIFdhcnRlbiBhdWYgRU9TIGF1ZmdldHJldGVuXG4iCisKK21zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKK21zZ3N0ciAiQXVzZsO8aHJ1bmcgYmVlbmRldCBuYWNoICUiCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIC4uLlxuIgorbXNnc3RyICJMZWl0dW5nIHdpcmQgYXVmIEJFUkVJVCBnZXNldHp0IC4uLlxuIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgorbXNnc3RyICJMZWl0dW5nIHdpcmQgYXVmIE5VTEwgZ2VzZXR6dCAuLi5cbiIKKworbXNnaWQgIkZyZWVpbmcgcGlwZWxpbmUgLi4uXG4iCittc2dzdHIgIkxlaXR1bmcgd2lyZCBnZWxlZXJ0IC4uLlxuIgorCisjfiBtc2dpZCAiVXNhZ2U6IGdzdC14bWxsYXVuY2ggPGZpbGUueG1sPiBbIGVsZW1lbnQucHJvcGVydHk9dmFsdWUgLi4uIF1cbiIKKyN+IG1zZ3N0ciAiQXVmcnVmOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LmVpZ2Vuc2NoYWZ0PXdlcnQgLi4uXVxuIgorCisjfiBtc2dpZCAiRVJST1I6IHBhcnNlIG9mIHhtbCBmaWxlICclcycgZmFpbGVkLlxuIgorI34gbXNnc3RyICJGRUhMRVI6IEF1c2xlc2VuIGRlciBYTUwtRGF0ZWkgwrslc8KrIGZlaGxnZXNjaGxhZ2VuLlxuIgorCisjfiBtc2dpZCAiRVJST1I6IG5vIHRvcGxldmVsIHBpcGVsaW5lIGVsZW1lbnQgaW4gZmlsZSAnJXMnLlxuIgorI34gbXNnc3RyICJGRUhMRVI6IEtlaW4gSGF1cHRsZWl0dW5nc2VsZW1lbnQgaW4gRGF0ZWkgwrslc8KrLlxuIgorCisjfiBtc2dpZCAiV0FSTklORzogb25seSBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLlxuIgorI34gbXNnc3RyICJXQVJOVU5HOiBadXIgWmVpdCB3aXJkIG51ciBlaW4gSGF1cHRlbGVtZW50IHVudGVyc3TDvHR6dC5cbiIKKworI34gbXNnaWQgIkVSUk9SOiBjb3VsZCBub3QgcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50ICVkOiAlcy5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIkZFSExFUjogRGFzIEJlZmVobHN6ZWlsZW5hcmd1bWVudCDCuyVkwqsga29ubnRlIG5pY2h0IGF1c2dlbGVzZW4gd2VyZGVuOiAiCisjfiAiJXMuXG4iCisKKyN+IG1zZ2lkICJXQVJOSU5HOiBlbGVtZW50IG5hbWVkICclcycgbm90IGZvdW5kLlxuIgorI34gbXNnc3RyICJXQVJOVU5HOiBFbGVtZW50IG5hbWVucyDCuyVzwqsgbmljaHQgZ2VmdW5kZW4uXG4iCisKKyN+IG1zZ2lkICJTYXZlIHhtbCByZXByZXNlbnRhdGlvbiBvZiBwaXBlbGluZSB0byBGSUxFIGFuZCBleGl0IgorI34gbXNnc3RyICJYTUwtUmVwcsOkc2VudGF0aW9uIGRlciBMZWl0dW5nIGluIERBVEVJIHNwZWljaGVybiB1bmQgYmVlbmRlbiIKKworI34gbXNnaWQgIkZJTEUiCisjfiBtc2dzdHIgIkRBVEVJIgorCisjfiBtc2dpZCAiRG8gbm90IGluc3RhbGwgc2lnbmFsIGhhbmRsZXJzIGZvciBTSUdVU1IxIGFuZCBTSUdVU1IyIgorI34gbXNnc3RyICJLZWluZSBSb3V0aW5lbiBmw7xyIFNJR1VTUjEgdW5kIFNJR1VTUjIgaW5zdGFsbGllcmVuIgorCisjfiBtc2dpZCAiRXJyb3Igd3JpdGluZyByZWdpc3RyeSBjYWNoZSB0byAlczogJXMiCisjfiBtc2dzdHIgIiIKKyN+ICJGZWhsZXIgYmVpbSBTY2hyZWliZW4gZGVzIFp3aXNjaGVuc3BlaWNoZXJzIGRlciBSZWdpc3RyeSBuYWNoICVzOiAlcyIKKworI34gbXNnaWQgIkVycm9yIHJlLXNjYW5uaW5nIHJlZ2lzdHJ5ICVzOiAlcyIKKyN+IG1zZ3N0ciAiRmVobGVyIGJlaW0gZXJuZXV0ZW4gRWlubGVzZW4gZGVyIFJlZ2lzdHJ5ICVzIDogJXMiCisKKyN+IG1zZ2lkICJFcnJvciByZS1zY2FubmluZyByZWdpc3RyeSAlcyIKKyN+IG1zZ3N0ciAiRmVobGVyIGJlaW0gZXJuZXV0ZW4gRWlubGVzZW4gZGVyIFJlZ2lzdHJ5ICVzIgorCisjfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkLiIKKyN+IG1zZ3N0ciAiSW50ZXJuZXIgR1N0cmVhbWVyLUZlaGxlcjogWnVzdGFuZHN3ZWNoc2VsIGZlaGxnZXNjaGxhZ2VuLiIKKworI34gbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBkZXNjcmlwdG9yIFwiJWRcIi4iCisjfiBtc2dzdHIgIkZlaGxlciBiZWltIFNjaHJlaWJlbiBpbiBkZW4gRGF0ZWlkZXNrcmlwdG9yIMK7JWTCqy4iCisKKyN+IG1zZ2lkICJGaWxlIGRlc2NyaXB0b3IgXCIlZFwiIGlzIG5vdCB2YWxpZC4iCisjfiBtc2dzdHIgIkRlciBEYXRlaWRlc2tyaXB0b3IgwrslZMKrIGlzdCBuaWNodCBnw7xsdGlnLiIKKworI34gbXNnaWQgIkRpc2FibGUgYWNjZWxlcmF0ZWQgQ1BVIGluc3RydWN0aW9ucyIKKyN+IG1zZ3N0ciAiQmVzY2hsZXVuaWd0ZSBDUFUtQmVmZWhsZSBkZWFrdGl2aWVyZW4iCisKKyN+IG1zZ2lkICJTQ0hFRFVMRVIiCisjfiBtc2dzdHIgIlNDSEVEVUxFUiIKKworI34gbXNnaWQgIlJlZ2lzdHJ5IHRvIHVzZSIKKyN+IG1zZ3N0ciAiWnUgYmVudXR6ZW5kZSBSZWdpc3RyeSIKKworI34gbXNnaWQgIlJFR0lTVFJZIgorI34gbXNnc3RyICJSRUdJU1RSWSIKKworI34gbXNnaWQgInBhdGggbGlzdCBmb3IgbG9hZGluZyBwbHVnaW5zIChzZXBhcmF0ZWQgYnkgJyVzJykiCisjfiBtc2dzdHIgIlBmYWRsaXN0ZSB6dW0gTGFkZW4gdm9uIFBsdWdpbnMgKER1cmNoIMK7JXPCqyBnZXRyZW5udCkiCisKKyN+IG1zZ2lkICJTY2hlZHVsZXIgdG8gdXNlIChkZWZhdWx0IGlzICclcycpIgorI34gbXNnc3RyICJadSBiZW51dHplbmRlciBTY2hlZHVsZXIgKFN0YW5kYXJkOiDCuyVzwqspIgorCisjfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzY2hlZHVsZXIgcHJvYmxlbS4gIEZpbGUgYSBidWcuIgorI34gbXNnc3RyICIiCisjfiAiSW50ZXJuZXQgR1N0cmVhbWVyLUZlaGxlcjogU2NoZWR1bGVycHJvYmxlbS4gQml0dGUgc2NoaWNrZW4gU2llIGVpbmVuICIKKyN+ICJGZWhsZXJiZXJpY2h0LiIKKworI34gbXNnaWQgIm9yaWdpbmFsIGxvY2F0aW9uIG9mIGZpbGUgYXMgYSBVUkkiCisjfiBtc2dzdHIgIk9yaWdpbmFsb3J0IGRlciBEYXRlaSBhbHMgVVJJIgorCisjfiBtc2dpZCAiVGhlcmUgaXMgbm8gZWxlbWVudCBwcmVzZW50IHRvIGhhbmRsZSB0aGUgc3RyZWFtJ3MgbWltZSB0eXBlICVzLiIKKyN+IG1zZ3N0ciAiIgorI34gIkVzIGdpYnQga2VpbiBFbGVtZW50LCBkYXMgZGVuIE1JTUUtVHlwIMK7JXPCqyBkaWVzZXMgRGF0ZW5zdHJvbXMgIgorI34gInZlcmFyYmVpdGVuIGthbm4uIgorCisjfiBtc2dpZCAiIgorI34gImNvdWxkIG5vdCBjb252ZXJ0IFwiJXNcIiBzbyB0aGF0IGl0IGZpdHMgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgorI34gbXNnc3RyICIiCisjfiAiS29ubnRlIMK7JXPCqyBuaWNodCBzbyBrb252ZXJ0aWVyZW4sIGRhc3MgZXMgenVyIEVpZ2Vuc2NoYWZ0IMK7JXPCqyBpbSAiCisjfiAiRWxlbWVudCDCuyVzwqsgcGFzc3QiCisKKyN+IG1zZ2lkICJTaG93IHBsdWdpbiBkZXRhaWxzIgorI34gbXNnc3RyICJQbHVnaW5kZXRhaWxzIGFuemVpZ2VuIgorCisjfiBtc2dpZCAiU2hvdyBzY2hlZHVsZXIgZGV0YWlscyIKKyN+IG1zZ3N0ciAiU2NoZWR1bGVyZGV0YWlscyBhbnplaWdlbiIKKworI34gbXNnaWQgIiBpdGVyYXRpb25zIChzdW0gJSIKKyN+IG1zZ3N0ciAiIEl0ZXJhdGlvbmVuIChTdW1tZSAlIgorCisjfiBtc2dpZCAiIG5zLCBhdmVyYWdlICUiCisjfiBtc2dzdHIgIiBOYW5vc2VrdW5kZW4sIGR1cmNoc2Nobml0dGxpY2ggJSIKKworI34gbXNnaWQgIiBucywgbWluICUiCisjfiBtc2dzdHIgIiBOYW5vc2VrdW5kZW4sIG1pbmltYWwgJSIKKworI34gbXNnaWQgIiBucywgbWF4ICUiCisjfiBtc2dzdHIgIiBOYW5vc2VrdW5kZW4sIG1heGltYWwgJSIKKworI34gbXNnaWQgIiBucykuXG4iCisjfiBtc2dzdHIgIiBOYW5vc2VrdW5kZW4uXG4iCisKKyN+IG1zZ2lkICJOdW1iZXIgb2YgdGltZXMgdG8gaXRlcmF0ZSBwaXBlbGluZSIKKyN+IG1zZ3N0ciAiQW56YWhsLCB3aWUgb2Z0IGRpZSBMZWl0dW5nIGR1cmNobGF1ZmVuIHdpcmQiCisKKyN+IG1zZ2lkICIgICAgICAgICBUcnlpbmcgdG8gcnVuIGFueXdheS5cbiIKKyN+IG1zZ3N0ciAiICAgICAgICAgVmVyc3VjaGUgdHJvdHpkZW0genUgbGF1ZmVuLlxuIgpkaWZmIC0tZ2l0IGEvcG8vZWwuZ21vIGIvcG8vZWwuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZjgyMzQKLS0tIC9kZXYvbnVsbAorKysgYi9wby9lbC5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vZWwucG8gYi9wby9lbC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWJkZDhkCi0tLSAvZGV2L251bGwKKysrIGIvcG8vZWwucG8KQEAgLTAsMCArMSwxMjQ4IEBACisjIEdyZWVrIHRyYW5zbGF0aW9uIGZvciBnc3RyZWFtZXIuCisjIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdzdHJlYW1lciBwYWNrYWdlLiAKKyMgTWljaGFlbCBLb3RzYXJpbmlzIDxtazczNjI4QGdtYWlsLmNvbT4sIDIwMTAKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdzdHJlYW1lci0wLjEwLjMwLjNcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wOS0yOSAxNDo1NSswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0xMS0yOSAxMToxNCswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBNaWNoYWVsIEtvdHNhcmluaXMgPG1rNzM2MjhAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IEdyZWVrIDx0ZWFtQGxpc3RzLmdub21lLmdyPlxuIgorIkxhbmd1YWdlOiBlbFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuIT0gMSlcbiIKKyJYLVBvZWRpdC1MYW5ndWFnZTogR3JlZWtcbiIKKyJYLVBvZWRpdC1Db3VudHJ5OiBHUkVFQ0VcbiIKKworbXNnaWQgIlByaW50IHRoZSBHU3RyZWFtZXIgdmVyc2lvbiIKK21zZ3N0ciAizpXOvM+GzqzOvc65z4POtyDPhM63z4Igzq3Ous60zr/Pg863z4Igz4TOv8+FIEdTdHJlYW1lciIKKworbXNnaWQgIk1ha2UgYWxsIHdhcm5pbmdzIGZhdGFsIgorbXNnc3RyICLOnc6xIM6zzq/Ovc6/z4XOvSDPjM67zrXPgiDOv865IM+Az4HOv861zrnOtM6/z4DOv865zq7Pg861zrnPgiDOus+Bzq/Pg865zrzOtc+CIgorCittc2dpZCAiUHJpbnQgYXZhaWxhYmxlIGRlYnVnIGNhdGVnb3JpZXMgYW5kIGV4aXQiCittc2dzdHIgIs6VzrzPhs6szr3Ouc+DzrcgzrTOuc6xzrjOrc+DzrnOvM+Jzr0gzrrOsc+EzrfOs86/z4HOuc+Ozr0gz4PPhs6xzrvOvM6sz4TPic69IM66zrHOuSDOrc6+zr/OtM6/z4IiCisKK21zZ2lkICIiCisiRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmcm9tIDEgKG9ubHkgZXJyb3IpIHRvIDUgKGFueXRoaW5nKSBvciAwIGZvciBubyBvdXRwdXQiCittc2dzdHIgIiIKKyLOoM+Bzr/Otc+AzrnOu861zrPOvM6tzr3OvyDOtc+Azq/PgM61zrTOvyDOsc+Azr/Pg8+GzrHOu868zqzPhM+Jz4POt8+CIM6xz4DPjCAxICjOvM+Mzr3OvyDOu86szrjOv8+CKSDOrc+Jz4IgNSAozr/PhM65zrTOrs+Azr/PhM61KSDOriAiCisiMCDOs865zrEgzrrOsc64z4zOu86/z4UgzrHPgM6/z4TOrc67zrXPg868zrEiCisKK21zZ2lkICJMRVZFTCIKK21zZ3N0ciAiTEVWRUwiCisKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCisidGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgorbXNnc3RyICIiCisizpvOr8+Dz4TOsSDOtM65zrHPh8+Jz4HOuc+DzrzOrc69zrcgzrzOtSDOus+MzrzOvM6xz4TOsSDPhM+Jzr0gzrbOtc+FzrPOsc+BzrnPjs69IM+Mzr3Ov868zrEgzrrOsc+EzrfOs86/z4HOr86xz4I6zrXPgM6vz4DOtc60zr8gIgorIihjYXRlZ29yeV9uYW1lOmxldmVsKSDOs865zrEgzrrOsc64zr/Pgc65z4POvM+MIM+Dz4XOs866zrXOus+BzrnOvM6tzr3Pic69IM61z4DOuc+Azq3OtM+Jzr0gzrPOuc6xIM66zrHOuM61zrzOuc6sICIKKyLOus6xz4TOt86zzr/Pgc6vzrEuIM6gzrHPgc6szrTOtc65zrPOvM6xOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCisKK21zZ2lkICJMSVNUIgorbXNnc3RyICJMSVNUIgorCittc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCittc2dzdHIgIs6Rz4DOtc69zrXPgc6zzr/PgM6/zq/Ot8+Dzrcgzq3Os8+Hz4HPic68z4nOvSDOsc+Azr/PhM61zrvOtc+DzrzOrM+Ez4nOvSDOsc+Azr/Pg8+GzrHOu868zqzPhM+Jz4POt8+CIgorCittc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCittc2dzdHIgIs6Rz4DOtc69zrXPgc6zzr/PgM6/zq/Ot8+DzrcgzrHPgM6/z4PPhs6xzrvOvM6sz4TPic+DzrfPgiIKKworbXNnaWQgIkVuYWJsZSB2ZXJib3NlIHBsdWdpbiBsb2FkaW5nIGRpYWdub3N0aWNzIgorbXNnc3RyICLOlc69zrXPgc6zzr/PgM6/zq/Ot8+DzrcgzrHOvc6xzrvPhc+EzrnOus+Ozr0gzrTOuc6xzrPOvc+Jz4PPhM65zrrPjs69IM+Gz4zPgc+Ez4nPg863z4Igz4DPgc+Mz4POuM61z4TOv8+FIgorCittc2dpZCAiQ29sb24tc2VwYXJhdGVkIHBhdGhzIGNvbnRhaW5pbmcgcGx1Z2lucyIKK21zZ3N0ciAizpTOuc6xz4fPic+BzrnPg868zq3Ovc61z4IgzrzOtSDOrM69z4ktzrrOrM+Ez4kgz4TOtc67zrXOr86xIM60zrnOsc60z4HOv868zq3PgiDPgM6/z4Ugz4DOtc+BzrnOrc+Hzr/Phc69IM+Az4HPjM+DzrjOtc+EzrEiCisKK21zZ2lkICJQQVRIUyIKK21zZ3N0ciAiUEFUSFMiCisKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCisiZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgorbXNnc3RyICIiCisizpTOuc6xz4fPic+BzrnPg868zq3Ovc63IM68zrUgzrrPjM68zrzOsSDOu86vz4PPhM6xIM+Az4HOv8+DzrjOrc+Ez4nOvSDOs865zrEgz4DPgc6/z4bPjM+Bz4TPic+DzrcgzrXPgM65z4DOu86tzr/OvSDPhM63z4IgzrvOr8+Dz4TOsc+CIM+Azr/PhSAiCisizrXOr869zrHOuSDOsc+Azr/OuM63zrrOtc+FzrzOrc69zrcgz4PPhM63IM68zrXPhM6xzrLOu863z4TOriDPgM61z4HOuc6yzqzOu867zr/Ovc+Ezr/PgiBHU1RfUExVR0lOX1BBVEgiCisKK21zZ2lkICJQTFVHSU5TIgorbXNnc3RyICJQTFVHSU5TIgorCittc2dpZCAiRGlzYWJsZSB0cmFwcGluZyBvZiBzZWdtZW50YXRpb24gZmF1bHRzIGR1cmluZyBwbHVnaW4gbG9hZGluZyIKK21zZ3N0ciAiIgorIs6Rz4DOtc69zrXPgc6zzr/PgM6/zq/Ot8+Dzrcgz4DOsc6zzq/OtM61z4XPg863z4Igz4PPhs6xzrvOvM6sz4TPic69IM60zrnOsc+Hz4nPgc65z4POvM6/z40gzrrOsc+Ezqwgz4TOtyDPhs+Mz4HPhM+Jz4POtyDPgM+Bzr/Pg864zq3PhM6/z4UiCisKK21zZ2lkICJEaXNhYmxlIHVwZGF0aW5nIHRoZSByZWdpc3RyeSIKK21zZ3N0ciAizpHPgM61zr3Otc+BzrPOv8+Azr/Or863z4POtyDOtc69zrfOvM6tz4HPic+DzrfPgiDPhM6/z4UgzrzOt8+Ez4HPjs6/z4UiCisKK21zZ2lkICJEaXNhYmxlIHNwYXduaW5nIGEgaGVscGVyIHByb2Nlc3Mgd2hpbGUgc2Nhbm5pbmcgdGhlIHJlZ2lzdHJ5IgorbXNnc3RyICIiCisizpHPgM61zr3Otc+BzrPOv8+Azr/Or863z4POtyDOtc66zrrOr869zrfPg863z4IgzrLOv863zrjOt8+EzrnOus6uz4IgzrTOuc61z4HOs86xz4POr86xz4IgzrrOsc+Ezqwgz4TOtyDPg86sz4HPic+Dzrcgz4TOv8+FIM68zrfPhM+Bz47Ov8+FIgorCittc2dpZCAiR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgIs6Vz4DOuc67zr/Os86tz4Igz4TOv8+FIEdTdHJlYW1lciIKKworbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgIs6VzrzPhs6szr3Ouc+DzrcgzrXPgM65zrvOv86zz47OvSDPhM6/z4UgR1N0cmVhbWVyIgorCittc2dpZCAiVW5rbm93biBvcHRpb24iCittc2dzdHIgIs6GzrPOvc+Jz4PPhM63IM61z4DOuc67zr/Os86uIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICLOpM6/IEdTdHJlYW1lciDOsc69z4TOuc68zrXPhM+Oz4DOuc+DzrUgzq3Ovc6xIM6zzrXOvc65zrrPjCDPg8+GzqzOu868zrEgzrLOsc+DzrnOus6uz4IgzrLOuc6yzrvOuc6/zrjOrs66zrfPgi4iCisKK21zZ2lkICIiCisiR1N0cmVhbWVyIGRldmVsb3BlcnMgd2VyZSB0b28gbGF6eSB0byBhc3NpZ24gYW4gZXJyb3IgY29kZSB0byB0aGlzIGVycm9yLiIKK21zZ3N0ciAiIgorIs6fzrkgz4DPgc6/zrPPgc6xzrzOvM6xz4TOuc+Dz4TOrc+CIM+Ezr/PhSBHU3RyZWFtZXIgz4TOtc68z4DOrc67zrnOsc+DzrHOvSDOus6xzrkgzrTOtc69IM6xzr3PhM65z4PPhM6/zq/Ph865z4POsc69IM66z4nOtM65zrrPjCAiCisiz4PPhs6szrvOvM6xz4TOv8+CIM+Dz4TOvyDPg8+GzqzOu868zrEgzrHPhc+Ez4wuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjb2RlIG5vdCBpbXBsZW1lbnRlZC4iCittc2dzdHIgIs6Vz4PPic+EzrXPgc65zrrPjCDPg8+GzqzOu868zrEgR1N0cmVhbWVyOiDOvyDOus+OzrTOuc66zrHPgiDOtM61zr0gz4XOu86/z4DOv865zq7OuM63zrrOtS4iCisKK21zZ2lkICIiCisiR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkIGFuZCBzb21lIGVsZW1lbnQgZmFpbGVkIHRvIHBvc3QgYSAiCisicHJvcGVyIGVycm9yIG1lc3NhZ2Ugd2l0aCB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZS4iCittc2dzdHIgIiIKKyLOo8+GzqzOu868zrEgR1N0cmVhbWVyOiDOsc+Azr/PhM+Fz4fOr86xIM6xzrvOu86xzrPOrs+CIM66zrHPhM6sz4PPhM6xz4POt8+CIM66zrHOuSDOus6sz4DOv865zr8gz4PPhM6/zrnPh861zq/OvyDOsc+Azq3PhM+Fz4fOtSDOvc6xICIKKyLOsc69zrHPgc+Ezq7Pg861zrkgz4PPic+Dz4TPjCDOvM6uzr3Phc68zrEgz4PPhs6szrvOvM6xz4TOv8+CIM68zrUgz4TOt869IM6xzrnPhM6vzrEgz4TOt8+CIM6xz4DOv8+Ez4XPh86vzrHPgi4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHBhZCBwcm9ibGVtLiIKK21zZ3N0ciAizpXPg8+Jz4TOtc+BzrnOus+MIM+Dz4bOrM67zrzOsSBHU3RyZWFtZXI6IM+Az4HPjM6yzrvOt868zrEgcGFkLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGhyZWFkIHByb2JsZW0uIgorbXNnc3RyICLOlc+Dz4nPhM61z4HOuc66z4wgz4PPhs6szrvOvM6xIEdTdHJlYW1lcjogz4DPgc+MzrLOu863zrzOsSDOvc6uzrzOsc+Ezr/Pgi4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uIgorbXNnc3RyICLOlc+Dz4nPhM61z4HOuc66z4wgz4PPhs6szrvOvM6xIEdTdHJlYW1lcjogz4DPgc+MzrLOu863zrzOsSDPg8+Fzr3Otc69zr3PjM63z4POt8+CLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogZXZlbnQgcHJvYmxlbS4iCittc2dzdHIgIs6Vz4PPic+EzrXPgc65zrrPjCDPg8+GzqzOu868zrEgR1N0cmVhbWVyOiDPgM+Bz4zOss67zrfOvM6xIM6zzrXOs86/zr3PjM+Ezr/Pgi4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4iCittc2dzdHIgIs6Vz4PPic+EzrXPgc65zrrPjCDPg8+GzqzOu868zrEgR1N0cmVhbWVyOiDPgM+Bz4zOss67zrfOvM6xIM6xzr3Osc62zq7PhM63z4POt8+CLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2FwcyBwcm9ibGVtLiIKK21zZ3N0ciAizpXPg8+Jz4TOtc+BzrnOus+MIM+Dz4bOrM67zrzOsSBHU3RyZWFtZXI6IM+Az4HPjM6yzrvOt868zrEgzrTPhc69zrHPhM6/z4TOrs+Ez4nOvS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKK21zZ3N0ciAizpXPg8+Jz4TOtc+BzrnOus+MIM+Dz4bOrM67zrzOsSBHU3RyZWFtZXI6IM+Az4HPjM6yzrvOt868zrEgzrXPhM65zrrOrc+EzrHPgi4iCisKK21zZ2lkICJZb3VyIEdTdHJlYW1lciBpbnN0YWxsYXRpb24gaXMgbWlzc2luZyBhIHBsdWctaW4uIgorbXNnc3RyICLOkc+Az4wgz4TOt869IM61zrPOus6xz4TOrM+Dz4TOsc+Dzq4gz4POsc+CIM+Ezr/PhSBHU3RyZWFtZXIgzrvOtc6vz4DOtc65IM6tzr3OsSDPgM+Bz4zPg864zrXPhM6/LiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2xvY2sgcHJvYmxlbS4iCittc2dzdHIgIs6Vz4PPic+EzrXPgc65zrrPjCDPg8+GzqzOu868zrEgR1N0cmVhbWVyOiDPgM+Bz4zOss67zrfOvM6xIM+Bzr/Ou86/zrPOuc6/z40uIgorCittc2dpZCAiIgorIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGhhcyBiZWVuICIKKyJkaXNhYmxlZC4iCittc2dzdHIgIiIKKyLOkc+Fz4TOriDOtyDOtc+GzrHPgc68zr/Os86uIM+Az4HOv8+Dz4DOsc64zrXOryDOvc6xIM+Hz4HOt8+DzrnOvM6/z4DOv865zq7Pg861zrkgzrvOtc65z4TOv8+Fz4HOs86vzrEgz4TOv8+FIEdTdHJlYW1lciDPgM6/z4UgIgorIs6tz4fOtc65IM6xz4DOtc69zrXPgc6zzr/PgM6/zrnOt864zrXOry4iCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN1cHBvcnRpbmcgbGlicmFyeSBlcnJvci4iCittc2dzdHIgIs6kzr8gR1N0cmVhbWVyIM+Dz4XOvc6szr3PhM63z4POtSDOrc69zrEgzrPOtc69zrnOus+MIM+Dz4bOrM67zrzOsSDOss65zrLOu865zr/OuM6uzrrOt8+CIM+Fz4DOv8+Dz4TOrs+BzrnOvs63z4IuIgorCittc2dpZCAiQ291bGQgbm90IGluaXRpYWxpemUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAizpHOtM+Fzr3Osc68zq/OsSDOsc+Bz4fOuc66zr/PgM6/zq/Ot8+DzrfPgiDPhc+Azr/Pg8+EzrfPgc65zrrPhM65zrrOrs+CIM6yzrnOss67zrnOv864zq7Ous63z4IuIgorCittc2dpZCAiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrrOu861zrnPg86vzrzOsc+Ezr/PgiDPhc+Azr/Pg8+EzrfPgc65zrrPhM65zrrOrs+CIM6yzrnOss67zrnOv864zq7Ous63z4IuIgorCittc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICLOkc60z4XOvc6xzrzOr86xIM60zrnOsc68z4zPgc+Gz4nPg863z4Igz4XPgM6/z4PPhM63z4HOuc66z4TOuc66zq7PgiDOss65zrLOu865zr/OuM6uzrrOt8+CLiIKKworbXNnaWQgIkVuY29kaW5nIGVycm9yLiIKK21zZ3N0ciAizqPPhs6szrvOvM6xIM66z4nOtM65zrrOv8+Azr/Or863z4POt8+CLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgorbXNnc3RyICLOpM6/IEdTdHJlYW1lciDPg8+Fzr3OrM69z4TOt8+DzrUgzq3Ovc6xIM6zzrXOvc65zrrPjCDPg8+GzqzOu868zrEgz4DPjM+Bz4nOvS4iCisKK21zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgorbXNnc3RyICLOlM61zr0gzrLPgc6tzrjOt866zrUgzr8gz4DPjM+Bzr/Pgi4iCisKK21zZ2lkICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgorbXNnc3RyICLOnyDPgM+Mz4HOv8+CIM61zq/Ovc6xzrkgzrHPgM6xz4PPh86/zrvOt868zq3Ovc6/z4Igzq4gzrzOtyDOtM65zrHOuM6tz4POuc68zr/Pgi4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCittc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrHOvc6/zq/Os868zrHPhM6/z4Igz4DPjM+Bzr/PhSDOs865zrEgzrHOvc6szrPOvc+Jz4POty4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCittc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrHOvc6/zq/Os868zrHPhM6/z4Igz4DPjM+Bzr/PhSDOs865zrEgzrXOs86zz4HOsc+Gzq4uIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgorbXNnc3RyICLOkc60z4XOvc6xzrzOr86xIM6xzr3Ov86vzrPOvM6xz4TOv8+CIM+Az4zPgc6/z4UgzrPOuc6xIM6xzr3OrM6zzr3Pic+DzrcgzrrOsc65IM61zrPOs8+BzrHPhs6uLiIKKworbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSByZXNvdXJjZS4iCittc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrrOu861zrnPg86vzrzOsc+Ezr/PgiDPgM+Mz4HOv8+FLiIKKworbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gcmVzb3VyY2UuIgorbXNnc3RyICLOkc60z4XOvc6xzrzOr86xIM6xzr3OrM6zzr3Pic+DzrfPgiDOsc+Az4wgz4TOv869IM+Az4zPgc6/LiIKKworbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iCittc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrXOs86zz4HOsc+Gzq7PgiDPg8+Ezr/OvSDPgM+Mz4HOvy4iCisKK21zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKK21zZ3N0ciAizpHOtM+Fzr3Osc68zq/OsSDOtc66z4TOrc67zrXPg863z4IgzrHOvc6xzrbOrs+EzrfPg863z4Igz4PPhM6/zr0gz4DPjM+Bzr8uIgorCittc2dpZCAiQ291bGQgbm90IHN5bmNocm9uaXplIG9uIHJlc291cmNlLiIKK21zZ3N0ciAizpHOtM+Fzr3Osc68zq/OsSDPg8+FzrPPh8+Bzr/Ovc65z4POvM6/z40gzrzOtSDPhM6/zr0gz4DPjM+Bzr8uIgorCittc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCittc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrvOrs+IzrfPgi/Ov8+BzrnPg868zr/PjSDPgc+FzrjOvM6vz4POtc+Jzr0gzrHPgM+MIM+Ezr/OvS/Pg8+Ezr/OvSDPgM+Mz4HOvy4iCisKK21zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCittc2dzdHIgIs6UzrXOvSDOrc+HzrXOuSDOvM61zq/Ovc61zrkgz4fPjs+Bzr/PgiDPg8+Ezr/OvSDPgM+Mz4HOvy4iCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN0cmVhbSBlcnJvci4iCittc2dzdHIgIs6kzr8gR1N0cmVhbWVyIM+Dz4XOvc6szr3PhM63z4POtSDOrc69zrEgzrPOtc69zrnOus+MIM+Dz4bOrM67zrzOsSDPgc6/zq7Pgi4iCisKK21zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCittc2dzdHIgIiIKKyLOpM6/IM+Dz4TOv865z4fOtc6vzr8gzrTOtc69IM+FzrvOv8+Azr/Ouc61zq8gz4fOtc65z4HOuc+DzrzPjCDOsc+Fz4TOriDPhM63z4Igz4HOv86uz4IuIM6gzrHPgc6xzrrOsc67zr/Pjc68zrUgzrHOvc6xz4bOrc+BzrXPhM61IM+Ezr8gIgorIs+Dz4bOrM67zrzOsS4iCisKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIHR5cGUgb2Ygc3RyZWFtLiIKK21zZ3N0ciAizpHOtM+Fzr3Osc68zq/OsSDOus6xzrjOv8+BzrnPg868zr/PjSDPhM6/z4Ugz4TPjc+Azr/PhSDPhM63z4Igz4HOv86uz4IuIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBvZiBhIGRpZmZlcmVudCB0eXBlIHRoYW4gaGFuZGxlZCBieSB0aGlzIGVsZW1lbnQuIgorbXNnc3RyICIiCisizpcgz4HOv86uIM61zq/Ovc6xzrkgzrTOuc6xz4bOv8+BzrXPhM65zrrOv8+NIM+Ez43PgM6/z4UgzrHPgM+MIM6xz4XPhM+Mzr0gz4DOv8+FIM+HzrXOuc+Bzq/Ots61z4TOsc65IM6xz4XPhM+MIM+Ezr8gz4PPhM6/zrnPh861zq/Ovy4iCisKK21zZ2lkICJUaGVyZSBpcyBubyBjb2RlYyBwcmVzZW50IHRoYXQgY2FuIGhhbmRsZSB0aGUgc3RyZWFtJ3MgdHlwZS4iCittc2dzdHIgIiIKKyLOlM61zr0gz4XPgM6sz4HPh861zrkgz4DOsc+Bz47OvSDOus+JzrTOuc66zr/PgM6/zrnOt8+Ezq7PgiDPgM6/z4Ugzr3OsSDOvM+Azr/Pgc61zq8gzr3OsSDPh861zrnPgc65z4PPhM61zq8gz4TOv869IM+Ez43PgM6/IM+EzrfPgiDPgc6/zq7Pgi4iCisKK21zZ2lkICJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iCittc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrHPgM6/zrrPic60zrnOus6/z4DOv86vzrfPg863z4Igz4HOv86uz4IuIgorCittc2dpZCAiQ291bGQgbm90IGVuY29kZSBzdHJlYW0uIgorbXNnc3RyICLOkc60z4XOvc6xzrzOr86xIM66z4nOtM65zrrOv8+Azr/Or863z4POt8+CIM+Bzr/Ors+CLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZW11bHRpcGxleCBzdHJlYW0uIgorbXNnc3RyICLOkc60z4XOvc6xzrzOr86xIM6xz4DPjC3PgM6/zrvPjc+AzrvOtc6+zrfPgiDPgc6/zq7Pgi4iCisKK21zZ2lkICJDb3VsZCBub3QgbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgz4DOv867z43PgM67zrXOvs63z4Igz4HOv86uz4IuIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiIKK21zZ3N0ciAizpcgz4HOv86uIM61zq/Ovc6xzrkgzrvOsc69zrjOsc+DzrzOrc69zrfPgiDOvM6/z4HPhs6uz4IuIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iCittc2dzdHIgIs6XIM+Bzr/OriDOtc6vzr3Osc65IM66z4HPhc+Az4TOv86zz4HOsc+GzrfOvM6tzr3OtyDOus6xzrkgzrTOtc69IM+Fz4DOv8+Dz4TOt8+Bzq/Ots61z4TOsc65IM6xz4DOv866z4HPhc+Az4TOv86zz4HOrM+GzrfPg863LiIKKworbXNnaWQgIiIKKyJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgY2FuJ3QgYmUgZGVjcnlwdGVkIGJlY2F1c2Ugbm8gc3VpdGFibGUga2V5IGhhcyAiCisiYmVlbiBzdXBwbGllZC4iCittc2dzdHIgIiIKKyLOlyDPgc6/zq4gzrXOr869zrHOuSDOus+Bz4XPgM+Ezr/Os8+BzrHPhs63zrzOrc69zrcgzrrOsc65IM60zrXOvSDOvM+Azr/Pgc61zq8gzr3OsSDOsc+Azr/Ous+Bz4XPgM+Ezr/Os8+BzrHPhs63zrjOtc6vIM61z4DOtc65zrTOriDOtM61zr0gIgorIs6tz4fOtc65IM60zr/OuM61zq8gzrrOsc+EzqzOu867zrfOu86/z4IgzrrPic60zrnOus+Mz4IuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCittc2dzdHIgIs6UzrXOvSDPhc+AzqzPgc+HzrXOuSDOvM6uzr3Phc68zrEgz4PPhs6szrvOvM6xz4TOv8+CIM6zzrnOsSDPhM6/zr0gz4TOv868zq3OsSAlcy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKK21zZ3N0ciAiIgorIs6UzrXOvSDPhc+AzqzPgc+HzrXOuSDPhM+Fz4DOv8+Azr/Ouc63zrzOrc69zr8gzrzOrs69z4XOvM6xIM+Dz4bOrM67zrzOsc+Ezr/PgiDOs865zrEgz4TOv869IM+Ezr/OvM6tzrEgJXMgzrrOsc65IM+Ezr/OvSDOus+OzrTOuc66zrEgJWQuIgorCittc2dpZCAiU2VsZWN0ZWQgY2xvY2sgY2Fubm90IGJlIHVzZWQgaW4gcGlwZWxpbmUuIgorbXNnc3RyICLOpM6/IM61z4DOuc67zrXOs868zq3Ovc6/IM+Bzr/Ou8+MzrkgzrTOtc69IM68z4DOv8+BzrXOryDOvc6xIM+Hz4HOt8+DzrnOvM6/z4DOv865zrfOuM61zq8gz4PPhM63IM60zrnOsc+Dz4nOu86uzr3Pic+DzrcuIgorCittc2dpZCAidGl0bGUiCittc2dzdHIgIs+Ezq/PhM67zr/PgiIKKworbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUiCittc2dzdHIgIs6/IM+Ezq/PhM67zr/PgiDPgM6/z4Ugz4PPhc69zq7OuM+Jz4Igz4fPgc63z4POuc68zr/PgM6/zrnOtc6vz4TOsc65IgorCittc2dpZCAidGl0bGUgc29ydG5hbWUiCittc2dzdHIgIs+Mzr3Ov868zrEgz4TOsc6+zrnOvc+MzrzOt8+DzrfPgiDPhM6vz4TOu86/z4UiCisKK21zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICLOvyDPg8+Fzr3Ors64zrfPgiDPhM6vz4TOu86/z4IgzrPOuc6xIM+DzrrOv8+Azr/Pjc+CIM+EzrHOvs65zr3PjM68zrfPg863z4IiCisKK21zZ2lkICJhcnRpc3QiCittc2dzdHIgIs66zrHOu867zrnPhM6tz4fOvc63z4IiCisKK21zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmciCittc2dzdHIgIs+Az4HPjM+Dz4nPgM6/KM6xKSDPhc+AzrXPjc64z4XOvc6/IM6zzrnOsSDPhM63zr0gzrfPh86/zrPPgc6sz4bOt8+DzrciCisKK21zZ2lkICJhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgIs+Mzr3Ov868zrEgz4TOsc6+zrnOvc+MzrzOt8+DzrfPgiDOus6xzrvOu865z4TOrc+Hzr3OtyIKKworbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiz4DPgc+Mz4PPic+Azr8ozrEpIM+Fz4DOtc+NzrjPhc69zr8gzrPOuc6xIM+EzrfOvSDOtc6zzrPPgc6xz4bOriDOs865zrEgz4POus6/z4DOv8+Nz4Igz4TOsc6+zrnOvc+MzrzOt8+DzrfPgiIKKworbXNnaWQgImFsYnVtIgorbXNnc3RyICLOtM6vz4POus6/z4IiCisKK21zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSIKK21zZ3N0ciAizrTOr8+DzrrOv8+CIM+Azr/PhSDPgM61z4HOuc6tz4fOtc65IM6xz4XPhM6sIM+EzrEgzrTOtc60zr/OvM6tzr3OsSIKKworbXNnaWQgImFsYnVtIHNvcnRuYW1lIgorbXNnc3RyICLPjM69zr/OvM6xIM+EzrHOvs65zr3PjM68zrfPg863z4IgzrTOr8+DzrrOv8+FIgorCittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIs60zq/Pg866zr/PgiDPgM6/z4Ugz4DOtc+BzrnOrc+HzrXOuSDOsc+Fz4TOrCDPhM6xIM60zrXOtM6/zrzOrc69zrEgzrPOuc6xIM+DzrrOv8+Azr/Pjc+CIM+EzrHOvs65zr3PjM68zrfPg863z4IiCisKK21zZ2lkICJhbGJ1bSBhcnRpc3QiCittc2dzdHIgIs66zrHOu867zrnPhM6tz4fOvc63z4IgzrTOr8+DzrrOv8+FIgorCittc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgorbXNnc3RyICLOnyDOus6xzrvOu865z4TOrc+Hzr3Ot8+CIM6/zrvPjM66zrvOt8+Bzr/PhSDPhM6/z4UgzrTOr8+DzrrOv8+FLCDPjM+Az4nPgiDOuM6xIM+Az4HOrc+AzrXOuSDOvc6xIM61zrzPhs6xzr3Or862zrXPhM6xzrkiCisKK21zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgIs+Mzr3Ov868zrEgz4TOsc6+zrnOvc+MzrzOt8+DzrfPgiDOus6xzrvOu865z4TOrc+Hzr3OtyDOtM6vz4POus6/z4UiCisKK21zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiCittc2dzdHIgIs6fIM66zrHOu867zrnPhM6tz4fOvc63z4Igzr/Ou8+MzrrOu863z4HOv8+FIM+Ezr/PhSDOtM6vz4POus6/z4UsIM+Mz4DPic+CIM64zrEgz4DPgc6tz4DOtc65IM69zrEgz4TOsc6+zrnOvc6/zrzOtc6vz4TOsc65LiIKKworbXNnaWQgImRhdGUiCittc2dzdHIgIs63zrzOtc+Bzr/OvM63zr3Or86xIgorCittc2dpZCAiZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHRGF0ZSBzdHJ1Y3R1cmUpIgorbXNnc3RyICLOt868zrXPgc6/zrzOt869zq/OsSDOtM63zrzOuc6/z4XPgc6zzq/Osc+CIM+Ez4nOvSDOtM61zrTOv868zq3Ovc+Jzr0gKM+Jz4IgzrzOuc6xIM60zr/OvM6uIEdEYXRlKSIKKworbXNnaWQgImRhdGV0aW1lIgorbXNnc3RyICJkYXRldGltZSIKKworbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKK21zZ3N0ciAizrfOvM61z4HOv868zrfOvc6vzrEgzrrOsc65IM+Oz4HOsSDOtM63zrzOuc6/z4XPgc6vzrHPgiDPhM+Jzr0gzrTOtc60zr/OvM6tzr3Pic69ICjOtM6/zrzOt868zq3Ovc61z4Igz4nPgiBHc3REYXRlVGltZSkiCisKK21zZ2lkICJnZW5yZSIKK21zZ3N0ciAizrXOr860zr/PgiIKKworbXNnaWQgImdlbnJlIHRoaXMgZGF0YSBiZWxvbmdzIHRvIgorbXNnc3RyICLOtc6vzrTOv8+CIM+Azr/PhSDOsc69zq7Ous6/z4XOvSDOsc+Fz4TOrCDPhM6xIM60zrXOtM6/zrzOrc69zrEiCisKK21zZ2lkICJjb21tZW50IgorbXNnc3RyICLPg8+Hz4zOu865zr8iCisKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKK21zZ3N0ciAizrXOu861z43OuM61z4HOvyDOus61zq/OvM61zr3OvyDPg8+Hzr/Ou865zrHPg868zr/PjSDPhM+Jzr0gzrTOtc60zr/OvM6tzr3Pic69IgorCittc2dpZCAiZXh0ZW5kZWQgY29tbWVudCIKK21zZ3N0ciAizrXOus+EzrXPhM6xzrzOrc69zr8gz4PPh8+MzrvOuc6/IgorCittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgorbXNnc3RyICIiCisizrXOu861z43OuM61z4HOvyDOus61zq/OvM61zr3OvyDPg8+Hzr/Ou865zrHPg868zr/PjSDPhM+Jzr0gzrTOtc60zr/OvM6tzr3Pic69IM+EzrfPgiDOvM6/z4HPhs6uz4Iga2V5PXZhbHVlIM6uIGtleVtlbl0iCisiPWNvbW1lbnQiCisKK21zZ2lkICJ0cmFjayBudW1iZXIiCittc2dzdHIgIs6xz4HOuc64zrzPjM+CIM66zr/OvM68zrHPhM65zr/PjSIKKworbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICLOsc+BzrnOuM68z4zPgiDOus6/zrzOvM6xz4TOuc+Ozr0gzrzOrc+DzrEgz4POtSDOvM65zrEgz4PPhc67zrvOv86zzq4iCisKK21zZ2lkICJ0cmFjayBjb3VudCIKK21zZ3N0ciAizrrOsc+EzrHOvM6tz4TPgc63z4POtyDOus6/zrzOvM6xz4TOuc+Ozr0iCisKK21zZ2lkICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgorbXNnc3RyICIiCisizrcgzrrOsc+EzrHOvM6tz4TPgc63z4POtyDPhM+Jzr0gzrrOv868zrzOsc+EzrnPjs69IM68zq3Pg86xIM+Dz4TOtyDPg8+FzrvOu86/zrPOriDPg8+EzrfOvSDOv8+Azr/Or86xIM6xzr3Ors66zrXOuSDOsc+Fz4TPjCDPhM6/ICIKKyLOus6/zrzOvM6sz4TOuSIKKworbXNnaWQgImRpc2MgbnVtYmVyIgorbXNnc3RyICLOsc+BzrnOuM68z4zPgiDOtM6vz4POus6/z4UiCisKK21zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICLOsc+BzrnOuM68z4zPgiDOtM6vz4POus6/z4UgzrzOrc+DzrEgz4POtSDOvM65zrEgz4PPhc67zrvOv86zzq4iCisKK21zZ2lkICJkaXNjIGNvdW50IgorbXNnc3RyICLOus6xz4TOsc68zq3PhM+BzrfPg863IM60zq/Pg866z4nOvSIKKworbXNnaWQgImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIgorbXNnc3RyICLOtyDOus6xz4TOsc68zq3PhM+BzrfPg863IM+Ez4nOvSDOtM6vz4POus+Jzr0gzrzOrc+DzrEgz4PPhM63IM+Dz4XOu867zr/Os86uIM+Azr/PhSDOsc69zq7Ous61zrkgzrHPhc+Ez4zPgiDOvyDOtM6vz4POus6/z4IiCisKK21zZ2lkICJsb2NhdGlvbiIKK21zZ3N0ciAiz4TOv8+Azr/OuM61z4POr86xIgorCittc2dpZCAiIgorIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgorImlzIGhvc3RlZCkiCittc2dzdHIgIiIKKyLOoM+Bzr/Orc67zrXPhc+Dzrcgz4TOv8+FIM68zq3Pg86/z4Ugz4nPgiBVUkkgKM+Ezr/PgM6/zrjOtc+Dzq/OsSwgz4zPgM6/z4Ugz4bOuc67zr/Ovs61zr3Otc6vz4TOsc65IM+Ezr8gz4DPgc+Jz4TPjM+Ez4XPgM6/IM+Ezr/PhSAiCisizrHPgc+HzrXOr86/z4Ugzq4gz4TOt8+CIM+Bzr/Ors+CKSIKKworbXNnaWQgImhvbWVwYWdlIgorbXNnc3RyICLOsc+Bz4fOuc66zq4gz4POtc67zq/OtM6xIgorCittc2dpZCAiSG9tZXBhZ2UgZm9yIHRoaXMgbWVkaWEgKGkuZS4gYXJ0aXN0IG9yIG1vdmllIGhvbWVwYWdlKSIKK21zZ3N0ciAiIgorIs6XIM6xz4HPh865zrrOriDPg861zrvOr860zrEgzrPOuc6xIM6xz4XPhM+MIM+Ezr8gzrzOrc+Dzr8gKM+ALs+HLiDOtyDOsc+Bz4fOuc66zq4gz4POtc67zq/OtM6xIM+EzrfPgiDPhM6xzrnOvc6vzrHPgiDOriDPhM6/z4UgIgorIs66zrHOu867zrnPhM6tz4fOvc63KSIKKworbXNnaWQgImRlc2NyaXB0aW9uIgorbXNnc3RyICLPgM61z4HOuc6zz4HOsc+Gzq4iCisKK21zZ2lkICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCittc2dzdHIgIs+Dz43Ovc+Ezr/OvM6/IM66zrXOr868zrXOvc6/IM+Azr/PhSDPgM61z4HOuc6zz4HOrM+GzrXOuSDPhM6/IM+AzrXPgc65zrXPh8+MzrzOtc69zr8gz4TPic69IM60zrXOtM6/zrzOrc69z4nOvSIKKworbXNnaWQgInZlcnNpb24iCittc2dzdHIgIs6tzrrOtM6/z4POtyIKKworbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgorbXNnc3RyICLOrc66zrTOv8+DzrcgzrHPhc+Ez47OvSDPhM+Jzr0gzrTOtc60zr/OvM6tzr3Pic69IgorCittc2dpZCAiSVNSQyIKK21zZ3N0ciAiSVNSQyIKKworbXNnaWQgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKK21zZ3N0ciAiIgorIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSDOss67zq3PgM61IGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCisKK21zZ2lkICJvcmdhbml6YXRpb24iCittc2dzdHIgIs6/z4HOs86xzr3Ouc+DzrzPjM+CIgorCittc2dpZCAiY29weXJpZ2h0IgorbXNnc3RyICLPgM69zrXPhc68zrHPhM65zrrOrCDOtM65zrrOsc65z47OvM6xz4TOsSIKKworbXNnaWQgImNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgIs+DzrfOvM61zq/Pic68zrEgz4DOvc61z4XOvM6xz4TOuc66z47OvSDOtM65zrrOsc65z4nOvM6sz4TPic69IM+Ez4nOvSDOtM61zrTOv868zrXOvc+Jzr0iCisKK21zZ2lkICJjb3B5cmlnaHQgdXJpIgorbXNnc3RyICJ1cmkgz4DOvc61z4XOvM6xz4TOuc66z47OvSDOtM65zrrOsc65z4nOvM6sz4TPic69IgorCittc2dpZCAiVVJJIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJVUkkgzrPOuc6xIM+Ezr8gz4POt868zrXOr8+JzrzOsSDPgM69zrXPhc68zrHPhM65zrrPjs69IM60zrnOus6xzrnPic68zqzPhM+Jzr0gz4TPic69IM60zrXOtM6/zrzOrc69z4nOvSIKKworIywgZnV6enkKK21zZ2lkICJlbmNvZGVkIGJ5IgorbXNnc3RyICLOus+JzrTOuc66zr/PgM6/zrnOt8+Ezq7PgiIKKworbXNnaWQgIm5hbWUgb2YgdGhlIGVuY29kaW5nIHBlcnNvbiBvciBvcmdhbml6YXRpb24iCittc2dzdHIgIiIKKworbXNnaWQgImNvbnRhY3QiCittc2dzdHIgIs61z4DOuc66zr/Ouc69z4nOvc6vzrEiCisKK21zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgorbXNnc3RyICLPgM67zrfPgc6/z4bOv8+Bzq/Otc+CIM61z4DOuc66zr/Ouc69z4nOvc6vzrHPgiIKKworbXNnaWQgImxpY2Vuc2UiCittc2dzdHIgIs6szrTOtc65zrEiCisKK21zZ2lkICJsaWNlbnNlIG9mIGRhdGEiCittc2dzdHIgIs6szrTOtc65zrEgz4TPic69IM60zrXOtM6/zrzOrc69z4nOvSIKKworbXNnaWQgImxpY2Vuc2UgdXJpIgorbXNnc3RyICJ1cmkgzqzOtM61zrnOsc+CIgorCittc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJVUkkgz4TOt8+CIM6szrTOtc65zrHPgiDPhM+Jzr0gzrTOtc60zr/OvM6tzr3Pic69IgorCittc2dpZCAicGVyZm9ybWVyIgorbXNnc3RyICLOtc66z4TOtc67zrXPg8+Ezq7PgiIKKworbXNnaWQgInBlcnNvbihzKSBwZXJmb3JtaW5nIgorbXNnc3RyICLPgM+Bz4zPg8+Jz4DOvyjOsSkgz4DOv8+FIM+AzrHOr862zrXOuSIKKworbXNnaWQgImNvbXBvc2VyIgorbXNnc3RyICLPg8+Fzr3OuM6tz4TOt8+CIgorCittc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nIgorbXNnc3RyICLPgM+Bz4zPg8+Jz4DOvyjOsSkgz4DOv8+FIM+Dz4XOvc6tzrjOtc+DzrUgz4TOt869IM63z4fOv86zz4HOrM+GzrfPg863LiIKKworbXNnaWQgImR1cmF0aW9uIgorbXNnc3RyICLOtM65zqzPgc66zrXOuc6xIgorCittc2dpZCAibGVuZ3RoIGluIEdTdHJlYW1lciB0aW1lIHVuaXRzIChuYW5vc2Vjb25kcykiCittc2dzdHIgIs68zq7Ous6/z4Igz4POtSDOvM6/zr3OrM60zrXPgiDPh8+Bz4zOvc6/z4Ugz4TOv8+FIEdTdHJlYW1lciAobmFub3NlY29uZHMpIgorCittc2dpZCAiY29kZWMiCittc2dzdHIgIs66z4nOtM65zrrOv8+Azr/Ouc63z4TOrs+CIgorCittc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICLOtyDOus+JzrTOuc66zr/PgM6/zq/Ot8+DzrcgzrHPgM6/zrjOrs66zrXPhc+DzrfPgiDPhM+Jzr0gzrTOtc60zr/OvM6tzr3Pic69IgorCittc2dpZCAidmlkZW8gY29kZWMiCittc2dzdHIgIs66z4nOtM65zrrOv8+Azr/Ouc63z4TOrs+CIM6yzq/Ovc+EzrXOvyIKKworbXNnaWQgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAizrrPic60zrnOus6/z4DOv865zrfPhM6uz4IgzrLOr869z4TOtc6/IM+EzrfPgiDOsc+Azr/OuM6uzrrOtc+Fz4POt8+CICDPhM+Jzr0gzrTOtc60zr/OvM6tzr3Pic69IgorCittc2dpZCAiYXVkaW8gY29kZWMiCittc2dzdHIgIs66z4nOtM65zrrOv8+Azr/Ouc63z4TOrs+CIM6uz4fOv8+FIgorCittc2dpZCAiY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICLOus+JzrTOuc66zr/PgM6/zrnOt8+Ezq7PgiDOsc+Azr/OuM6uzrrOtc+Fz4POt8+CIM+Ez4nOvSDOt8+HzrfPhM65zrrPjs69IM60zrXOtM6/zrzOrc69z4nOvSIKKworbXNnaWQgInN1YnRpdGxlIGNvZGVjIgorbXNnc3RyICLOus+JzrTOuc66zr/PgM6/zrnOt8+Ezq7PgiDPhc+Azr/PhM6vz4TOu8+Jzr0iCisKK21zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgIs66z4nOtM65zrrOv8+Azr/Ouc63z4TOrs+CIM6xz4DOv864zq7Ous61z4XPg863z4Igz4TPic69IM+Fz4DOv8+Ezq/PhM67z4nOvSIKKworbXNnaWQgImNvbnRhaW5lciBmb3JtYXQiCittc2dzdHIgIs+Ez43PgM6/z4Igz4DOtc+BzrnOrc66z4TOtyIKKworbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICLOvyDPhM+Nz4DOv8+CIM+Ezr/PhSDPgM61z4HOuc6tzrrPhM63IM+Dz4TOv869IM6/z4DOv86vzr8gzrHPgM6/zrjOt866zrXPjc6/zr3PhM6xzrkgz4TOsSDOtM61zrTOv868zq3Ovc6xIgorCittc2dpZCAiYml0cmF0ZSIKK21zZ3N0ciAiz4HPhc64zrzPjM+CIM68zrXPhM6szrTOv8+DzrfPgiIKKworbXNnaWQgImV4YWN0IG9yIGF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgIs6xzrrPgc65zrLOrs+CIM6uIM68zq3Pg86/z4Igz4HPhc64zrzPjM+CIM+DzrUgYml0cy9zIgorCittc2dpZCAibm9taW5hbCBiaXRyYXRlIgorbXNnc3RyICLOv869zr/OvM6xz4PPhM65zrrPjM+CIM+Bz4XOuM68z4zPgiIKKworbXNnaWQgIm5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgIs6/zr3Ov868zrHPg8+EzrnOus+Mz4Igz4HPhc64zrzPjM+CIM+DzrUgYml0cy9zIgorCittc2dpZCAibWluaW11bSBiaXRyYXRlIgorbXNnc3RyICLOtc67zqzPh865z4PPhM6/z4Igz4HPhc64zrzPjM+CIgorCittc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAizrXOu86sz4fOuc+Dz4TOv8+CIM+Bz4XOuM68z4zPgiDPg861IGJpdHMvcyIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSIKK21zZ3N0ciAizrzOrc6zzrnPg8+Ezr/PgiDPgc+FzrjOvM+Mz4IiCisKK21zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICLOvM6tzrPOuc+Dz4TOv8+CIM+Bz4XOuM68z4zPgiDPg861IGJpdHMvcyIKKworbXNnaWQgImVuY29kZXIiCittc2dzdHIgIs66z4nOtM65zrrOv8+Azr/Ouc63z4TOrs+CIgorCittc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAizrrPic60zrnOus6/z4DOv865zrfPhM6uz4Igz4DOv8+FIM+Hz4HOt8+DzrnOvM6/z4DOv865zq7OuM63zrrOtSDOs865zrEgz4TOt869IM66z4nOtM65zrrOv8+Azr/Or863z4POtyDOsc+Fz4TOrs+CIM+EzrfPgiDPgc6/zq7PgiIKKworbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKK21zZ3N0ciAizq3Ous60zr/Pg863IM66z4nOtM65zrrOv8+Azr/Ouc63z4TOriIKKworbXNnaWQgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCittc2dzdHIgIiIKKyLOrc66zrTOv8+Dzrcgz4TOv8+FIM66z4nOtM65zrrOv8+Azr/Ouc63z4TOriDPgM6/z4Ugz4fPgc63z4POuc68zr/PgM6/zrnOrs64zrfOus61IM6zzrnOsSDPhM63zr0gzrrPic60zrnOus6/z4DOv86vzrfPg863IM6xz4XPhM6uz4Igz4TOt8+CICIKKyLPgc6/zq7PgiIKKworbXNnaWQgInNlcmlhbCIKK21zZ3N0ciAiz4POtc65z4HOuc6xzrrPjM+CIgorCittc2dpZCAic2VyaWFsIG51bWJlciBvZiB0cmFjayIKK21zZ3N0ciAiz4POtc65z4HOuc6xzrrPjM+CIM6xz4HOuc64zrzPjM+CIM+Ezr/PhSDOus6/zrzOvM6xz4TOuc6/z40iCisKK21zZ2lkICJyZXBsYXlnYWluIHRyYWNrIGdhaW4iCittc2dzdHIgIs66zq3Pgc60zr/PgiDOus6/zrzOvM6xz4TOuc6/z40gcmVwbGF5Z2FpbiIKKworbXNnaWQgInRyYWNrIGdhaW4gaW4gZGIiCittc2dzdHIgIs66zq3Pgc60zr/PgiDOus6/zrzOvM6xz4TOuc6/z40gz4POtSBkYiIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgcGVhayIKK21zZ3N0ciAizrrOv8+Bz4XPhs6uIM66zr/OvM68zrHPhM65zr/PjSByZXBsYXlnYWluIgorCittc2dpZCAicGVhayBvZiB0aGUgdHJhY2siCittc2dzdHIgIs66zr/Pgc+Nz4bPic+Dzrcgz4TOv8+FIM66zr/OvM68zrHPhM65zr/PjSIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKK21zZ3N0ciAizrrOrc+BzrTOv8+CIM60zq/Pg866zr/PhSByZXBsYXlnYWluIgorCittc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKK21zZ3N0ciAizrrOrc+BzrTOv8+CIM60zq/Pg866zr/PhSDPg861IGRiIgorCittc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBwZWFrIgorbXNnc3RyICLOus6/z4HPhc+Gzq4gzrTOr8+DzrrOv8+FIHJlcGxheWdhaW4iCisKK21zZ2lkICJwZWFrIG9mIHRoZSBhbGJ1bSIKK21zZ3N0ciAizrrOv8+Bz43Phs+Jz4POtyDPhM6/z4UgzrTOr8+DzrrOv8+FIgorCittc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCittc2dzdHIgIs61z4DOr8+AzrXOtM6/IM6xzr3Osc+Gzr/Pgc6sz4IgcmVwbGF5Z2FpbiIKKworbXNnaWQgInJlZmVyZW5jZSBsZXZlbCBvZiB0cmFjayBhbmQgYWxidW0gZ2FpbiB2YWx1ZXMiCittc2dzdHIgIs61z4DOr8+AzrXOtM6/IM6xzr3Osc+Gzr/Pgc6sz4Igz4TPic69IM+EzrnOvM+Ozr0gzrrOrc+BzrTOv8+Fz4IgzrrOv868zrzOsc+EzrnOv8+NIM66zrHOuSDOtM6vz4POus6/z4UiCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIgorbXNnc3RyICLOus+JzrTOuc66z4zPgiDOs867z47Pg8+DzrHPgiIKKworbXNnaWQgImxhbmd1YWdlIGNvZGUgZm9yIHRoaXMgc3RyZWFtLCBjb25mb3JtaW5nIHRvIElTTy02MzktMSIKK21zZ3N0ciAizrrPic60zrnOus+Mz4IgzrPOu8+Oz4PPg86xz4IgzrPOuScgzrHPhc+Ezq4gz4TOtyDPgc6/zq4sIM+Dz4XOvM68zr/Pgc+Gzr/Pjc68zrXOvc6/z4IgzrzOtSDPhM6/IElTTy02MzktMSIKKworbXNnaWQgImltYWdlIgorbXNnc3RyICLOtc65zrrPjM69zrEiCisKK21zZ2lkICJpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICLOtc65zrrPjM69zrEgz4DOv8+FIM+Dz4fOtc+Ezq/Ots61z4TOsc65IM68zrUgzrHPhc+Ezq4gz4TOtyDPgc6/zq4iCisKKyMuIFRSQU5TTEFUT1JTOiAncHJldmlldyBpbWFnZScgPSBpbWFnZSB0aGF0IHNob3dzIGEgcHJldmlldyBvZiB0aGUgZnVsbCBpbWFnZQorbXNnaWQgInByZXZpZXcgaW1hZ2UiCittc2dzdHIgIs61zrnOus+Mzr3OsSDPgM+Bzr/Otc+AzrnPg866z4zPgM63z4POt8+CIgorCittc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICLOtc65zrrPjM69zrEgz4DPgc6/zrXPgM65z4POus+Mz4DOt8+DzrfPgiDPgM6/z4Ugz4PPh861z4TOr862zrXPhM6xzrkgzrzOtSDOsc+Fz4TOriDPhM63IM+Bzr/OriIKKworbXNnaWQgImF0dGFjaG1lbnQiCittc2dzdHIgIs+Dz4XOvc63zrzOvM6tzr3OvyIKKworbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgIs6xz4HPh861zq/OvyDPg8+Fzr3Ot868zrzOrc69zr8gz4POtSDOsc+Fz4TOriDPhM63IM+Bzr/OriIKKworbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCittc2dzdHIgIs+Hz4TPjc+Azr/OuSDOsc69zqwgzrvOtc+Az4TPjCIKKworbXNnaWQgIm51bWJlciBvZiBiZWF0cyBwZXIgbWludXRlIGluIGF1ZGlvIgorbXNnc3RyICLOsc+BzrnOuM68z4zPgiDPhM+Jzr0gz4fPhM+Nz4DPic69IM6xzr3OrCDOu861z4DPhM+MIM+Dz4TOv869IM6uz4fOvyIKKworbXNnaWQgImtleXdvcmRzIgorbXNnc3RyICLOu86tzr7Otc65z4IgzrrOu861zrnOtM65zqwiCisKK21zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKK21zZ3N0ciAiIgorIs67zq3Ovs61zrnPgiDOus67zrXOuc60zrnOrCDOtM65zrHPh8+Jz4HOuc+DzrzOrc69zrXPgiDOvM61IM66z4zOvM68zrHPhM6xLCDPgM6/z4Ugz4DOtc+BzrnOs8+BzqzPhs6/z4XOvSDPhM6/IM+AzrXPgc65zrXPh8+MzrzOtc69zr8iCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKK21zZ3N0ciAiz4zOvc6/zrzOsSDOs861z4nOs8+BzrHPhs65zrrOv8+NIM61zr3PhM6/z4DOuc+DzrzOv8+NIgorCittc2dpZCAiIgorImh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aXZlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciAiCisicHJvZHVjZWQiCittc2dzdHIgIs6xzr3OuM+Bz47PgM65zr3OsSDOus6xz4TOsc69zr/Ot8+Ezq4gz4DOtc+BzrnOs8+BzrHPhs6uIM+Ezr/PgM6/zrjOtc+Dzq/Osc+CIM61zrPOs8+BzrHPhs6uz4Igzq4gz4DOsc+BzrHOs8+JzrPOrs+CIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGxhdGl0dWRlIgorbXNnc3RyICLOs861z4nOs8+BzrHPhs65zrrPjM+CIM61zr3PhM6/z4DOuc+DzrzPjM+CIM+AzrvOrM+Ezr/Phc+CIgorCittc2dpZCAiIgorImdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yICIKKyJzb3V0aGVybiBsYXRpdHVkZXMpIgorbXNnc3RyICIiCisizrPOtc+JzrPPgc6xz4bOuc66z4wgz4DOu86sz4TOv8+CIM+EzrfPgiDPhM6/z4DOv864zrXPg86vzrHPgiwgz4zPgM6/z4UgzrXOs86zz4HOrM+GzrfOus61IM6uIM+AzrHPgc6uz4fOuM63IM+Ezr8gzrzOrc+Dzr8sIM+DzrUgIgorIs68zr/Or8+BzrXPgiDPg8+NzrzPhs+Jzr3OsSDOvM61IM+Ezr8gV0dTODQgKM68zrfOtM6tzr0gz4PPhM6/zr0gzrnPg863zrzOtc+BzrnOvc+MLCDOsc+Bzr3Ot8+EzrnOus6tz4Igz4TOuc68zq3PgiDOs865zrEgz4DOu86sz4TOtyAiCisiz4PPhM6/IM69z4zPhM65zr8gzrfOvM65z4PPhs6xzq/Pgc65zr8pIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKK21zZ3N0ciAizrPOtc+JzrPPgc6xz4bOuc66z4zPgiDOtc69z4TOv8+AzrnPg868z4zPgiDOvM6uzrrOv8+Fz4IiCisKK21zZ2lkICIiCisiZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCisibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgorbXNnc3RyICIiCisizrPOtc+JzrPPgc6xz4bOuc66z4wgzrzOrs66zr/PgiDPhM63z4Igz4TOv8+Azr/OuM61z4POr86xz4IsIM+Mz4DOv8+FIM61zrPOs8+BzqzPhs63zrrOtSDOriDPgM6xz4HOrs+HzrjOtyDPhM6/IM68zq3Pg86/LCDPg861IM68zr/Or8+BzrXPgiAiCisiz4PPjc68z4bPic69zrEgzrzOtSDPhM6/IFdHUzg0ICjOvM63zrTOrc69IM+Dz4TOv869IM+Az4HPjs+Ezr8gzrzOtc+DzrfOvM6yz4HOuc69z4wgz4PPhM6/IEdyZWVud2ljaC9VSywgzrHPgc69zrfPhM65zrrOrc+CICIKKyLPhM65zrzOrc+CIM6zzrnOsSDOvM6uzrrOtyDPg8+Ezr8gzrTPhc+EzrnOus+MIM63zrzOuc+Dz4bOsc6vz4HOuc6/KSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBlbGV2YXRpb24iCittc2dzdHIgIs6zzrXPic6zz4HOsc+GzrnOus+Mz4IgzrXOvc+Ezr/PgM65z4POvM+Mz4Igz4XPiM6/zrzOrc+Ez4HOv8+FIgorCittc2dpZCAiIgorImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCisiYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKK21zZ3N0ciAiIgorIs+Fz4jPjM68zrXPhM+Bzr8gz4TOt8+CIM+Ezr/PgM6/zrjOtc+Dzq/Osc+CLCDPjM+Azr/PhSDOtc6zzrPPgc6sz4bOt866zrUgzq4gz4DOsc+Bzq7Ph864zrcgz4TOvyDOvM6tz4POvywgz4POtSDOvM6tz4TPgc6xIM+Dz43OvM+Gz4nOvc6xICIKKyLOvM61IM+Ezr8gV0dTODQgKM68zrfOtM6tzr0gz4PPhM6/IM61z4DOr8+AzrXOtM6/IM+EzrfPgiDOuM6szrvOsc+Dz4POsc+CKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBjb3VudHJ5IgorbXNnc3RyICLOs861z4nOs8+BzrHPhs65zrrPjM+CIM61zr3PhM6/z4DOuc+DzrzPjM+CIM+Hz47Pgc6xz4IiCisKK21zZ2lkICJjb3VudHJ5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKK21zZ3N0ciAiz4fPjs+BzrEgKM6xzrPOs867zrnOus+MIM+Mzr3Ov868zrEpIM+Mz4DOv8+FIM6tz4fOtc65IM61zrPOs8+BzrHPhs61zq8gzq4gz4DOsc+BzrHPh864zrXOryDPhM6/IM68zq3Pg86/IgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCittc2dzdHIgIs6zzrXPic6zz4HOsc+GzrnOus+Mz4IgzrXOvc+Ezr/PgM65z4POvM+Mz4Igz4DPjM67zrfPgiIKKworbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICLPgM+MzrvOtyAozrHOs86zzrvOuc66z4wgz4zOvc6/zrzOsSkgz4zPgM6/z4Ugz4TOvyDOvM6tz4POvyDOtc6zzrPPgc6sz4bOt866zrUgzq4gz4DOsc+Bzq7Ph864zrciCisKK21zZ2lkICJnZW8gbG9jYXRpb24gc3VibG9jYXRpb24iCittc2dzdHIgIs6zzrXPic6zz4HOsc+GzrnOus+Mz4IgzrXOvc+Ezr/PgM65z4POvM+Mz4Igz4XPgM6/z4TOv8+Azr/OuM61z4POr86xz4IiCisKK21zZ2lkICIiCisiYSBsb2NhdGlvbiB3aGl0aGluIGEgY2l0eSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgb3IgY3JlYXRlZCAoZS5nLiAiCisidGhlIG5laWdoYm9yaG9vZCkiCittc2dzdHIgIiIKKyLPhM6/z4DOv864zrXPg86vzrEgzrzOrc+DzrEgz4POtSDOvM65zrEgz4DPjM67zrcgz4zPgM6/z4Ugz4TOvyDOvM6tz4POvyDPgM6xz4HOrs+HzrjOtyDOriDOtM63zrzOuc6/z4XPgc6zzq7OuM63zrrOtSAoz4Auz4cuIM63ICIKKyLOs861zrnPhM6/zr3Ouc6sKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgorbXNnc3RyICLOs861z4nOs8+BzrHPhs65zrrPjM+CIM61zr3PhM6/z4DOuc+DzrzPjM+CIM6/z4HOuc62z4zOvc+EzrnOv8+FIM+Dz4bOrM67zrzOsc+Ezr/PgiIKKworbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgorbXNnc3RyICLOsc69zrHOvM61zr3PjM68zrXOvc6/IM+Dz4bOrM67zrzOsSDPhM+Jzr0gzrzOtc+Ez4HOrs+DzrXPic69IM6/z4HOuc62z4zOvc+EzrnOsc+CIM+Ezr/PgM6/zrjOrc+EzrfPg863z4IgKM+DzrUgzrzOrc+Ez4HOsSkiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgc3BlZWQiCittc2dzdHIgIs6zzrXPic6zz4HOsc+GzrnOus+Mz4IgzrXOvc+Ezr/PgM65z4POvM+Mz4Igz4TOsc+Hz43PhM63z4TOsc+CIM66zq/Ovc63z4POt8+CICIKKworbXNnaWQgIiIKKyJtb3ZlbWVudCBzcGVlZCBvZiB0aGUgY2FwdHVyaW5nIGRldmljZSB3aGlsZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIGluIG0vcyIKK21zZ3N0ciAiIgorIs+EzrHPh8+Nz4TOt8+EzrEgzrrOr869zrfPg863z4Igz4TOt8+CIM+Dz4XPg866zrXPhc6uz4Igz4PPjc67zrvOt8+IzrfPgiDOus6xz4TOrCDPhM63IM60zrnOrM+BzrrOtc65zrEgzrXOs86zz4HOsc+Gzq7PgiDPg861IG0vcyIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBkaXJlY3Rpb24iCittc2dzdHIgIs6zzrXPic6zz4HOsc+GzrnOus+Mz4IgzrXOvc+Ezr/PgM65z4POvM+Mz4IgzrTOuc61z43OuM+Fzr3Pg863z4IgzrrOr869zrfPg863z4IgIgorCittc2dpZCAiIgorImluZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBvZiBhICIKKyJtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgMCAiCisibWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgorbXNnc3RyICIiCisiz4XPgM6/zrTOtc65zrrOvc+NzrXOuSDPhM63zr0gzrrOsc+EzrXPjc64z4XOvc+DzrcgzrrOr869zrfPg863z4Igz4TOt8+CIM+Dz4XPg866zrXPhc6uz4Igz4DOv8+FIM+Dz4XOu867zrHOvM6yzqzOvc61zrkgzq3Ovc6xIM68zq3Pg86/LiAiCisizpHOvc6xzrPPgc6sz4bOtc+EzrHOuSDPic+CIM68zr/Or8+BzrXPgiDOvM61IM60zrXOus6xzrTOuc66zqwsIM+Ezr8gMCDOtM61zq/Ph869zrXOuSDPhM6/IM6zzrXPic6zz4HOsc+GzrnOus+MIM6yzr/Pgc+BzqwgzrrOsc65ICIKKyLOsc+Fzr7OrM69zrXOuSDOtM61zr7Ouc+Mz4PPhM+Bzr/Phs6xIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgorbXNnc3RyICLOs861z4nOs8+BzrHPhs65zrrPjM+CIM61zr3PhM6/z4DOuc+DzrzPjM+CIM66zrHPhM61z43OuM+Fzr3Pg863z4Igz4PPjc67zrvOt8+IzrfPgiIKKworbXNnaWQgIiIKKyJpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nICBhIG1lZGlhLiAiCisiSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCAgcmVwcmVzZW50YXRpb24sIDAgbWVhbnMgdGhlICIKKyJnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKK21zZ3N0ciAiIgorIs+Fz4DOv860zrXOuc66zr3Pjc61zrkgz4TOt869IM66zrHPhM61z43OuM+Fzr3Pg863IM+Azr/PhSDOtM61zq/Ph869zrXOuSDOtyDPg8+Fz4POus61z4XOriDOus6xz4TOrCDPhM63IM+Dz43Ou867zrfPiM63IM61zr3PjM+CIM68zq3Pg86/z4UuICIKKyLOkc69zrHOs8+BzqzPhs61z4TOsc65IM+DzrUgzrzOv86vz4HOtc+CIM68zrUgzrTOtc66zrHOtM65zrrOrCwgz4TOvyAwIM+Fz4DOv860zrXOuc66zr3Pjc61zrkgz4TOvyDOs861z4nOs8+BzrHPhs65zrrPjCDOss6/z4HPgc6sIM66zrHOuSAiCisizrHPhc6+zqzOvc61zrkgzrTOtc6+zrnPjM+Dz4TPgc6/z4bOsSIKKworIy4gVFJBTlNMQVRPUlM6ICdzaG93IG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lJyBoZXJlCittc2dpZCAic2hvdyBuYW1lIgorbXNnc3RyICLPjM69zr/OvM6xIM61zrrPgM6/zrzPgM6uz4IiCisKK21zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgorbXNnc3RyICIiCisizozOvc6/zrzOsSDPhM63z4Igz4TOt867zrXOv8+Az4TOuc66zq7Pgi/Phs6/z4HOt8+Ezq7PgiAocG9kY2FzdCkvz4POtc65z4HOrM+CIM61zrrPgM6/zrzPgM6uz4IgzrHPgM+MIM+EzrfOvSDOv8+Azr/Or86xIM61zq/Ovc6xzrkgIgorIs+Ezr8gzrzOrc+Dzr8iCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQorbXNnaWQgInNob3cgc29ydG5hbWUiCittc2dzdHIgIs+Mzr3Ov868zrEgz4TOsc6+zrnOvc+MzrzOt8+DzrfPgiDOtc66z4DOv868z4DOrs+CIgorCittc2dpZCAiIgorIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20sIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICIiCisizozOvc6/zrzOsSDPhM63z4Igz4TOt867zrXOv8+Az4TOuc66zq7Pgi/Phs6/z4HOt8+Ezq7PgiAocG9kY2FzdCkvz4POtc65z4HOrM+CIM61zrrPgM6/zrzPgM6uz4IgzrHPgM+MIM+EzrfOvSDOv8+Azr/Or86xIM61zq/Ovc6xzrkgIgorIs+Ezr8gzrzOrc+Dzr8sIM6zzrnOsSDPg866zr/PgM6/z43PgiDPhM6xzr7Ouc69z4zOvM63z4POt8+CIgorCittc2dpZCAiZXBpc29kZSBudW1iZXIiCittc2dzdHIgIs6xz4HOuc64zrzPjM+CIM61z4DOtc65z4POv860zq/Ov8+FIgorCittc2dpZCAiVGhlIGVwaXNvZGUgbnVtYmVyIGluIHRoZSBzZWFzb24gdGhlIG1lZGlhIGlzIHBhcnQgb2YiCittc2dzdHIgIs6fIM6xz4HOuc64zrzPjM+CIM61z4DOtc65z4POv860zq/Ov8+FIM+Ezr/PhSDOus+NzrrOu86/z4Ugz4PPhM6/IM6/z4DOv86vzr8gzrHOvc6uzrrOtc65IM+Ezr8gzrzOrc+Dzr8iCisKK21zZ2lkICJzZWFzb24gbnVtYmVyIgorbXNnc3RyICLOsc+BzrnOuM68z4zPgiDOus+NzrrOu86/z4UiCisKK21zZ2lkICJUaGUgc2Vhc29uIG51bWJlciBvZiB0aGUgc2hvdyB0aGUgbWVkaWEgaXMgcGFydCBvZiIKK21zZ3N0ciAizp8gzrHPgc65zrjOvM+Mz4IgzrrPjc66zrvOv8+FIM+EzrfPgiDOtc66z4DOv868z4DOrs+CIM+Dz4TOt869IM6/z4DOv86vzrEgzrHOvc6uzrrOtc65IM+Ezr8gzrzOrc+Dzr8iCisKK21zZ2lkICJseXJpY3MiCittc2dzdHIgIs+Dz4TOr8+Hzr/OuSIKKworbXNnaWQgIlRoZSBseXJpY3Mgb2YgdGhlIG1lZGlhLCBjb21tb25seSB1c2VkIGZvciBzb25ncyIKK21zZ3N0ciAizp/OuSDPg8+Ezq/Ph86/zrkgz4TOv8+FIM68zq3Pg86/z4UsIM+Dz4XOvc6uzrjPic+CIM+Hz4HOt8+DzrnOvM6/z4DOv865zrXOr8+EzrHOuSDOs865zrEgz4TPgc6xzrPOv8+NzrTOuc6xIgorCittc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCittc2dzdHIgIs+Mzr3Ov868zrEgz4TOsc6+zrnOvc+MzrzOt8+DzrfPgiDPg8+Fzr3OuM6tz4TOtyIKKworbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZywgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIs+Az4HPjM+Dz4nPgM6/KM6xKSDPgM6/z4Ugz4PPhc69zq3OuM61z4POtSDPhM63zr0gzrfPh86/zrPPgc6sz4bOt8+DzrcsIM6zzrnOsSDPg866zr/PgM6/z43PgiDPhM6xzr7Ouc69z4zOvM63z4POt8+CIgorCittc2dpZCAiZ3JvdXBpbmciCittc2dzdHIgIs6/zrzOsc60zr/PgM6/zq/Ot8+DzrciCisKK21zZ2lkICIiCisiR3JvdXBzIHJlbGF0ZWQgbWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSB0cmFja3MsIGxpa2UgdGhlIGRpZmZlcmVudCBwaWVjZXMgIgorIm9mIGEgY29uY2VydG8uIEl0IGlzIGEgaGlnaGVyIGxldmVsIHRoYW4gYSB0cmFjaywgYnV0IGxvd2VyIHRoYW4gYW4gYWxidW0iCittc2dzdHIgIiIKKyLOn868zrHOtM6/z4DOv865zrXOryDPg8+HzrXPhM65zrbPjM68zrXOvc6xIM68zq3Pg86xIM+Azr/PhSDOus6xzrvPjc+Az4TOv8+Fzr0gz4DOv867zrvOsc+AzrvOrCDOus6/zrzOvM6sz4TOuc6xLCDPjM+Az4nPgiDPhM6xICIKKyLOtM65zrHPhs6/z4HOtc+EzrnOus6sIM68zq3Pgc63IM61zr3PjM+CIM66zr/Ovc+Dzq3Pgc+Ezr/PhS4gzpXOr869zrHOuSDPhc+IzrfOu8+Mz4TOtc+Bzr8gzrXPgM6vz4DOtc60zr8gzrHPgM+MIM+Ezr8gzrrOv868zrzOrM+EzrkgzrHOu867zqwgIgorIs+HzrHOvM63zrvPjM+EzrXPgc6/IM6xz4DPjCDPhM6/IM60zq/Pg866zr8iCisKK21zZ2lkICJ1c2VyIHJhdGluZyIKK21zZ3N0ciAizrLOsc64zrzOv867zr/Os86vzrEgz4fPgc6uz4PPhM63IgorCittc2dpZCAiIgorIlJhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgdXNlci4gVGhlIGhpZ2hlciB0aGUgcmFuaywgdGhlIG1vcmUgdGhlIHVzZXIgbGlrZXMgIgorInRoaXMgbWVkaWEiCittc2dzdHIgIiIKKyLOlyDOss6xzrjOvM6/zrvOv86zzq/OsSDPgM6/z4UgzrHPgM6/zr3Otc68zq7OuM63zrrOtSDOsc+Az4wgzq3Ovc6xIM+Hz4HOrs+Dz4TOty4gzozPg86/IM+Fz4jOt867z4zPhM61z4HOtywgz4TPjM+Dzr8gz4DOtc+BzrnPg8+Dz4zPhM61z4HOvyAiCisizrHPgc6tz4POtc65IM+Dz4TOvyDPh8+Bzq7Pg8+Ezrcgz4TOvyDOvM6tz4POvyIKKworbXNnaWQgImRldmljZSBtYW51ZmFjdHVyZXIiCittc2dzdHIgIs66zrHPhM6xz4POus61z4XOsc+Dz4TOrs+CIM+Dz4XPg866zrXPhc6uz4IiCisKK21zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICIiCisizprOsc+EzrHPg866zrXPhc6xz4PPhM6uz4Igz4TOt8+CIM+Dz4XPg866zrXPhc6uz4Igz4DOv8+FIM+Hz4HOt8+DzrnOvM6/z4DOv865zq7OuM63zrrOtSDOs865zrEgz4TOtyDOtM63zrzOuc6/z4XPgc6zzq/OsSDOsc+Fz4TOv8+NIM+Ezr/PhSAiCisizrzOrc+Dzr/PhSIKKworbXNnaWQgImRldmljZSBtb2RlbCIKK21zZ3N0ciAizrzOv869z4TOrc67zr8gz4PPhc+DzrrOtc+Fzq7PgiIKKworbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKK21zZ3N0ciAizpzOv869z4TOrc67zr8gz4TOt8+CIM+Dz4XPg866zrXPhc6uz4Igz4DOv8+FIM+Hz4HOt8+DzrnOvM6/z4DOv865zq7OuM63zrrOtSDOs865zrEgz4TOtyDOtM63zrzOuc6/z4XPgc6zzq/OsSDPhM6/z4UgzrzOrc+Dzr/PhSIKKworbXNnaWQgImFwcGxpY2F0aW9uIG5hbWUiCittc2dzdHIgIs+Mzr3Ov868zrEgzrXPhs6xz4HOvM6/zrPOrs+CIgorCittc2dpZCAiQXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIgorbXNnc3RyICLOlyDOtc+GzrHPgc68zr/Os86uIM+Azr/PhSDPh8+BzrfPg865zrzOv8+Azr/Ouc6uzrjOt866zrUgzrPOuc6xIM+EzrcgzrTOt868zrnOv8+Fz4HOs86vzrEgIM+Ezr/PhSDOvM6tz4POv8+FIgorCittc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKK21zZ3N0ciAizrTOtc60zr/OvM6tzr3OsSDOtc+GzrHPgc68zr/Os86uz4IiCisKK21zZ2lkICJBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIG1lZGlhIgorbXNnc3RyICLOkc+FzrjOsc6vz4HOtc+EzrEgzrTOtc60zr/OvM6tzr3OsSDOtc+GzrHPgc68zr/Os86uz4Igzr3OsSDOtc69z4PPic68zrHPhM+JzrjOv8+Nzr0gz4POtc65z4HOuc6xzrrOrCDPg8+Ezr8gzrzOrc+Dzr8iCisKK21zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKK21zZ3N0ciAiz4DPgc6/z4POsc69zrHPhM6/zrvOuc+DzrzPjM+CIM61zrnOus+Mzr3Osc+CIgorCittc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgorbXNnc3RyICIiCisizqDPic+CIM64zrEgz4DPgc6tz4DOtc65IM69zrEgz4DOtc+BzrnPg8+Ez4HOsc+GzrXOryDOriDOus6xzrjPgc61z4bPhM65z4PPhM61zq8gzrcgzrXOuc66z4zOvc6xIM+Az4HOuc69IM+EzrfOvSDOtc68z4bOrM69zrnPg86uIM+EzrfPgiIKKworbXNnaWQgIiwgIgorbXNnc3RyICIsICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgorbXNnc3RyICJFUlJPUjogzrHPgM+MIM+Dz4TOv865z4fOtc6vzr8gJXM6ICVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKKyIlc1xuIgorbXNnc3RyICIiCisizpXPgM65z4DOu86tzr/OvSDPgM67zrfPgc6/z4bOv8+Bzq/Otc+CIM6xz4DOv8+Dz4bOsc67zrzOrM+Ez4nPg863z4I6XG4iCisiJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJzcGVjaWZpZWQgZW1wdHkgYmluIFwiJXNcIiwgbm90IGFsbG93ZWQiCittc2dzdHIgIs6/IM66zrHOuM6/z4HOuc+DzrzOrc69zr/PgiDOrM60zrXOuc6/z4Igz4DOtc+BzrnOrc66z4TOt8+CIMKrJXPCuywgzrTOtc69IM61z4DOuc+Ez4HOrc+AzrXPhM6xzrkiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYmluIFwiJXNcIiwgc2tpcHBpbmciCittc2dzdHIgIs60zrXOvSDPhc+AzqzPgc+HzrXOuSDPgM61z4HOuc6tzrrPhM63z4Igwqslc8K7LCDPgM6xz4HOrM6yzrvOtc+IzrciCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICLOtM61zr0gz4XPgM6sz4HPh861zrkgzrnOtM65z4zPhM63z4TOsSDCqyVzwrsgz4PPhM6/IM+Dz4TOv865z4fOtc6vzr8gwqslc8K7IgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKK21zZ3N0ciAizrHOtM+Fzr3Osc68zq/OsSDOv8+BzrnPg868zr/PjSDOuc60zrnPjM+EzrfPhM6xz4Igwqslc8K7IM+Dz4TOvyDPg8+Ezr/Ouc+HzrXOr86/IMKrJXPCuyDPg861IMKrJXPCuyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbGluayAlcyB0byAlcyIKK21zZ3N0ciAizrHOtM+Fzr3Osc68zq/OsSDPg8+Nzr3OtM61z4POt8+CICVzIM+DzrUgJXMiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCittc2dzdHIgIs60zrXOvSDPhc+AzqzPgc+HzrXOuSDPg8+Ezr/Ouc+HzrXOr86/IMKrJXPCuyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCittc2dzdHIgIs6xzrTPhc69zrHOvM6vzrEgzrHOvc6szrvPhc+DzrfPgiDOtM+Fzr3Osc+Ezr/PhM6uz4TPic69IMKrJXPCuyIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIKK21zZ3N0ciAiz4PPjc69zrTOtc+Dzrcgz4fPic+Bzq/PgiDPg8+Ezr/Ouc+HzrXOr86/IM+Az4HOv86tzrvOtc+Fz4POt8+CIgorCittc2dpZCAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKK21zZ3N0ciAiz4PPjc69zrTOtc+Dzrcgz4fPic+Bzq/PgiDPg8+Ezr/Ouc+HzrXOr86/IM+Az4HOv86/z4HOuc+DzrzOv8+NIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNvdXJjZSBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICLOtM61zr0gz4XPgM6sz4HPh861zrkgz4PPhM6/zrnPh861zq/OvyDPgM+Bzr/Orc67zrXPhc+DzrfPgiDOs865zrEgz4TOvyBVUkkgwqslc8K7IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGVsZW1lbnQgdG8gbGluayBVUkkgXCIlc1wiIHRvIgorbXNnc3RyICLOtM61zr0gz4XPgM6sz4HPh861zrkgz4PPhM6/zrnPh861zq/OvyDOs865zrEgz4TOtyDPg8+Nzr3OtM61z4POtyDPhM6/z4UgVVJJIMKrJXPCuyDPg861IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAizrTOtc69IM+Fz4DOrM+Bz4fOtc65IM+Dz4TOv865z4fOtc6vzr8gz4DPgc6/zr/Pgc65z4POvM6/z40gzrPOuc6xIM+Ezr8gVVJJIMKrJXPCuyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbGluayBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgIs6xzrTPhc69zrHOvM6vzrEgz4PPjc69zrTOtc+DzrfPgiDPg8+Ezr/Ouc+HzrXOr86/z4Ugz4DPgc6/zr/Pgc65z4POvM6/z40gzrPOuc6xIM+Ezr8gVVJJIMKrJXPCuyIKKworbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgorbXNnc3RyICLOtM61zr0gzrXPgM65z4TPgc6tz4DOtc+EzrHOuSDOus61zr3OriDOtM65zrHPg8+JzrvOrs69z4nPg863IgorCittc2dpZCAiSW50ZXJuYWwgY2xvY2sgZXJyb3IuIgorbXNnc3RyICLOo8+GzqzOu868zrEgzrXPg8+Jz4TOtc+BzrnOus6/z40gz4HOv867zr/Os865zr/PjS4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgorbXNnc3RyICLOlc+Dz4nPhM61z4HOuc66z4wgz4PPhs6szrvOvM6xIM+Bzr/Ors+CIM60zrXOtM6/zrzOrc69z4nOvS4iCisKK21zZ2lkICJBIGxvdCBvZiBidWZmZXJzIGFyZSBiZWluZyBkcm9wcGVkLiIKK21zZ3N0ciAizqDOv867zrvOrc+CIM61zr3OtM65zqzOvM61z4POtc+CIM6xz4DOv864zrfOus61z43Pg861zrnPgiDOsc+Azr/Pgc+Bzq/PgM+Ezr/Ovc+EzrHOuS4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCittc2dzdHIgIs6Vz4PPic+EzrXPgc65zrrPjCDPgM+Bz4zOss67zrfOvM6xIM+Bzr/Ors+CIM60zrXOtM6/zrzOrc69z4nOvS4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCittc2dzdHIgIs6Vz4PPic+EzrXPgc65zrrPjCDPg8+GzqzOu868zrEgz4HOv86uz4IgzrTOtc60zr/OvM6tzr3Pic69LiIKKworbXNnaWQgIkZpbHRlciBjYXBzIgorbXNnc3RyICLOps65zrvPhM+BzqzPgc65z4POvM6xIM60z4XOvc6xz4TOv8+Ezq7PhM+Jzr0iCisKK21zZ2lkICIiCisiUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCisicHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKK21zZ3N0ciAiIgorIs6gzrXPgc65zr/Pgc65z4POvM+Mz4Igz4TPic69IM+AzrnOuM6xzr3Pjs69IM61z4DOuc+Ez4HOtc+Az4zOvM61zr3Pic69IM60z4XOvc6xz4TOv8+Ezq7PhM+Jzr0gKE5VTEwgz4POt868zrHOr869zrXOuSBBTlkpLiDOlyAiCisiz4HPjc64zrzOuc+DzrcgzrHPhc+Ezq7PgiDPhM63z4IgzrnOtM65z4zPhM63z4TOsc+CIM6xz4DOsc65z4TOtc6vIM68zrnOsSDOsc69zrHPhs6/z4HOrCDPg8+Ezr8gz4DOsc+BzrXPh8+MzrzOtc69zr8gzrHOvc+EzrnOus61zq/OvM61zr3OvyAiCisiR3N0Q2Fwcy4iCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKK21zZ3N0ciAizpTOtc69IM6tz4fOtc65IM66zrHOuM6/z4HOuc+DzrjOtc6vIM+Mzr3Ov868zrEgzrHPgc+HzrXOr86/z4UgzrPOuc6xIM61zrPOs8+BzrHPhs6uLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCittc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrHOvc6/zq/Os868zrHPhM6/z4IgzrHPgc+HzrXOr86/z4Ugwqslc8K7IM6zzrnOsSDOtc6zzrPPgc6xz4bOri4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCittc2dzdHIgIs6jz4bOrM67zrzOsSDOus67zrXOuc+Dzq/OvM6xz4TOv8+CIM6xz4HPh861zq/Ov8+FIMKrJXPCuy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Vla2luZyBpbiBmaWxlIFwiJXNcIi4iCittc2dzdHIgIs6jz4bOrM67zrzOsSDOus6xz4TOrCDPhM63zr0gzrHOvc6xzrbOrs+EzrfPg863IM+Dz4TOvyDOsc+Bz4fOtc6vzr8gwqslc8K7LiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAizqPPhs6szrvOvM6xIM66zrHPhM6sIM+EzrfOvSDOtc6zzrPPgc6xz4bOriDPg8+Ezr8gzrHPgc+HzrXOr86/IMKrJXPCuy4iCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKK21zZ3N0ciAizpTOtc69IM66zrHOuM6/z4HOr8+DzrjOt866zrUgz4zOvc6/zrzOsSDOsc+Bz4fOtc6vzr/PhSDOs865zrEgzrHOvc6szrPOvc+Jz4POty4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgorbXNnc3RyICLOkc60z4XOvc6xzrzOr86xIM6xzr3Ov86vzrPOvM6xz4TOv8+CIM6xz4HPh861zq/Ov8+FIMKrJXPCuyDOs865zrEgzrHOvc6szrPOvc+Jz4POty4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCittc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrvOrs+IzrfPgiDPgM67zrfPgc6/z4bOv8+BzrnPjs69IM6zzrnOsSDCqyVzwrsuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIlwiJXNcIiBpcyBhIGRpcmVjdG9yeS4iCittc2dzdHIgIs6kzr8gwqslc8K7IM61zq/Ovc6xzrkgzrrOsc+EzqzOu86/zrPOv8+CLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFwiJXNcIiBpcyBhIHNvY2tldC4iCittc2dzdHIgIs6kzr8gzrHPgc+HzrXOr86/IMKrJXPCuyDOtc6vzr3Osc65IM68zrnOsSDPhc+Azr/OtM6/z4fOri4iCisKK21zZ2lkICJGYWlsZWQgYWZ0ZXIgaXRlcmF0aW9ucyBhcyByZXF1ZXN0ZWQuIgorbXNnc3RyICLOkc+Azr/PhM+Fz4fOr86xIM66zrHPhM+Mz4DOuc69IM61z4DOsc69zrHOu86uz4jOtc+Jzr0gz4nPgiDOts63z4TOrs64zrfOus61LiIKKworbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCittc2dzdHIgIs6UzrXOvSDOv8+Bzq/Pg864zrfOus61IM+Az4HOv8+Dz4nPgc65zr3PjM+CIM66zrHPhM6szrvOv86zzr/PgiAoVGVtcCkuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcCBmaWxlIFwiJXNcIi4iCittc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrTOt868zrnOv8+Fz4HOs86vzrHPgiDPgM+Bzr/Pg8+Jz4HOuc69zr/PjSDOsc+Bz4fOtc6vzr/PhSAodGVtcCkgwqslc8K7LiIKKworbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZG93bmxvYWQgZmlsZS4iCittc2dzdHIgIs6jz4bOrM67zrzOsSDOus6xz4TOrCDPhM63zr0gzrXOs86zz4HOsc+Gzq4gz4PPhM6/IM6xz4HPh861zq/OvyDOvM61z4TOsc+Gz4zPgc+Ez4nPg863z4IuIgorCittc2dpZCAiY2FwcyIKK21zZ3N0ciAizrTPhc69zrHPhM+Mz4TOt8+EzrXPgiIKKworbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCittc2dzdHIgIs6xzr3Ouc+Hzr3Otc+NzrjOt866zrHOvSDOtM+Fzr3Osc+Ez4zPhM63z4TOtc+CIM+Dz4TOtyDPgc6/zq4iCisKK21zZ2lkICJtaW5pbXVtIgorbXNnc3RyICLOtc67zqzPh865z4PPhM6/IgorCittc2dpZCAibWF4aW11bSIKK21zZ3N0ciAizrzOrc6zzrnPg8+Ezr8iCisKK21zZ2lkICJmb3JjZSBjYXBzIgorbXNnc3RyICLOtc+AzrnOss6/zrvOriDOtM+Fzr3Osc+Ezr/PhM6uz4TPic69IgorCittc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCittc2dzdHIgIs61z4DOuc6yzr/Ou86uIM60z4XOvc6xz4TOv8+Ezq7PhM+Jzr0gz4fPic+Bzq/PgiDOtc66z4TOrc67zrXPg863IHR5cGVmaW5kIgorCittc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgorbXNnc3RyICLOlyDPgc6/zq4gzrTOtc69IM+AzrXPgc65zq3Ph861zrkgzrTOtc60zr/OvM6tzr3OsS4iCisKK21zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgorbXNnc3RyICLOpc67zr/PgM6/zrnOt868zq3Ovc61z4IgzrTOuc61z4DOsc+Gzq3PgjpcbiIKKworbXNnaWQgInJlYWRhYmxlIgorbXNnc3RyICLOsc69zrHOs869z47Pg865zrzOvyIKKworbXNnaWQgIndyaXRhYmxlIgorbXNnc3RyICLOtc6zzrPPgc6sz4jOuc68zr8iCisKK21zZ2lkICJjb250cm9sbGFibGUiCittc2dzdHIgIs61zrvOtc6zz4fPjM68zrXOvc6/IgorCittc2dpZCAiY2hhbmdlYWJsZSBpbiBOVUxMLCBSRUFEWSwgUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUiCittc2dzdHIgIs68z4DOv8+BzrXOryDOvc6xIM6xzrvOu86szr7Otc65IM+DzrUgzrrOsc+EzqzPg8+EzrHPg863IE5VTEwsIFJFQURZLCBQQVVTRUQgzq4gUExBWUlORyIKKworbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiCittc2dzdHIgIs68z4DOv8+BzrXOryDOvc6xIM6xzrvOu86szr7Otc65IM68z4zOvc6/IM+DzrUgzrrOsc+EzqzPg8+EzrHPg863IE5VTEwsIFJFQURZIM6uIFBBVVNFRCIKKworbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMIG9yIFJFQURZIHN0YXRlIgorbXNnc3RyICLOvM+Azr/Pgc61zq8gzr3OsSDOsc67zrvOrM6+zrXOuSDOvM+Mzr3OvyDPg861IM66zrHPhM6sz4PPhM6xz4POtyBOVUxMIM6uIFJFQURZIgorCittc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgorbXNnc3RyICLOkc+Bz4fOtc6vzrEgz4PPhM63IM68zrHPjc+BzrcgzrvOr8+Dz4TOsToiCisKK21zZ2lkICJUb3RhbCBjb3VudDogIgorbXNnc3RyICLOo8+Fzr3Ov867zrnOus6uIM66zrHPhM6xzrzOrc+Ez4HOt8+Dzrc6IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdGVkIGZpbGUiCittc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdGVkIGZpbGVzIgorbXNnc3RyWzBdICIlZCDOsc+Bz4fOtc6vzr8gz4PPhM63IM68zrHPjc+BzrcgzrvOr8+Dz4TOsSIKK21zZ3N0clsxXSAiJWQgzrHPgc+HzrXOr86xIM+Dz4TOtyDOvM6xz43Pgc63IM67zq/Pg8+EzrEiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgcGx1Z2luIgorbXNnaWRfcGx1cmFsICIlZCBwbHVnaW5zIgorbXNnc3RyWzBdICIlZCDPgM+Bz4zPg864zrXPhM6/IgorbXNnc3RyWzFdICIlZCDPgM+Bz4zPg864zrXPhM6xIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdCBlbnRyeSIKK21zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0IGVudHJpZXMiCittc2dzdHJbMF0gIiVkIM66zrHPhM6xz4fPjs+BzrfPg863IM+Dz4TOtyDOvM6xz43Pgc63IM67zq/Pg8+EzrEiCittc2dzdHJbMV0gIiVkIM66zrHPhM6xz4fPic+Bzq7Pg861zrnPgiDPg8+EzrcgzrzOsc+Nz4HOtyDOu86vz4PPhM6xIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGZlYXR1cmUiCittc2dpZF9wbHVyYWwgIiVkIGZlYXR1cmVzIgorbXNnc3RyWzBdICIlZCDPh86xz4HOsc66z4TOt8+BzrnPg8+EzrnOus+MIgorbXNnc3RyWzFdICIlZCDPh86xz4HOsc66z4TOt8+BzrnPg8+EzrnOus6sIgorCittc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgorbXNnc3RyICLOlc68z4bOrM69zrnPg863IM+MzrvPic69IM+Ez4nOvSDPg8+Ezr/Ouc+HzrXOr8+Jzr0iCisKK21zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgorbXNnc3RyICLOlc68z4bOrM69zrnPg863IM67zq/Pg8+EzrHPgiDPhM+Jzr0gzrHPgc+HzrXOr8+Jzr0gz4PPhM63IM68zrHPjc+BzrcgzrvOr8+Dz4TOsSIKKworbXNnaWQgIiIKKyJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgorInBsdWdpbnMgcHJvdmlkZS5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKKyJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgorbXNnc3RyICIiCisizpXOvM+GzqzOvc65z4POtyDOvM65zrHPgiDOu86vz4PPhM6xz4Igz4DOv8+FIM68z4DOv8+BzrXOryDOvc6xIM6xzr3Osc67z4XOuM61zq8gzrHPgM+MIM+Fz4DOv867zr/Os865z4PPhM6uIM68zrUgz4TOsSAiCisiz4fOsc+BzrHOus+EzrfPgc65z4PPhM65zrrOrCDPgM6/z4Ugz4DOsc+Bzq3Ph861zrkgz4TOvyDOtc+AzrnOu861zrPOvM6tzr3OvyDPgM+Bz4zPg864zrXPhM6/IM6uIM+MzrvOsSDPhM6xIM+Az4HPjM+DzrjOtc+EzrEuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgzqfPgc6uz4POuc68zr8gz4POtSDPg8+Fzr3OtM+FzrHPg868z4wgzrzOtSDOtc6+z4nPhM61z4HOuc66zr/Pjc+CICIKKyLOvM63z4fOsc69zrnPg868zr/Pjc+CIM6xz4XPhM+MzrzOsc+EzrfPgiDOtc6zzrrOsc+EzqzPg8+EzrHPg863z4Igz4DPgc6/z4POuM6tz4TPic69IgorCittc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgorbXNnc3RyICLOkc+AzrHPgc6vzrjOvM63z4POtyDPhM+Jzr0gz4DOtc+BzrnOtc+Hzr/OvM6tzr3Pic69IM+Ezr/PhSDPgM+Bzr/Pg864zq3PhM6/z4UiCisKK21zZ2lkICJQcmludCBzdXBwb3J0ZWQgVVJJIHNjaGVtZXMsIHdpdGggdGhlIGVsZW1lbnRzIHRoYXQgaW1wbGVtZW50IHRoZW0iCittc2dzdHIgIs6VzrzPhs6szr3Ouc+Dzrcgz4XPgM6/z4PPhM63z4HOuc62z4zOvM61zr3Pic69IM68zr/Pgc+Gz47OvSBVUkksIM68zrUgz4TOsSDPg8+Ezr/Ouc+HzrXOr86xIM+Azr/PhSDPhM65z4Igz4XOu86/z4DOv865zr/Pjc69IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgorbXNnc3RyICLOkc60z4XOvc6xzrzOr86xIM+Gz4zPgc+Ez4nPg863z4IgzrHPgc+HzrXOr86/z4Ugz4DPgc6/z4POuM6tz4TOv8+FOiAlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgorbXNnc3RyICLOlM61zr0gz4XPgM6sz4HPh861zrkgz4TOrc+Ezr/Ouc6/IM+Dz4TOv865z4fOtc6vzr8gzq4gz4DPgc+Mz4POuM61z4TOvyAnJXMnXG4iCisKK21zZ2lkICJJbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICLOlc67zq7Phs64zrcgz4TOvyDOvM6uzr3Phc68zrEgICMldSDOsc+Az4wgz4TOvyDPg8+Ezr/Ouc+HzrXOr86/IMKrJXPCuyAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCittc2dzdHIgIs6VzrvOrs+GzrjOtyDPhM6/IM68zq7Ovc+FzrzOsSAgIyV1IM6xz4DPjCDPhM6/IHBhZCDCqyVzOiVzwrsgKCVzKTogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICLOlc67zq7Phs64zrcgz4TOvyDOvM6uzr3Phc68zrEgICMldSDOsc+Az4wgz4TOvyDOsc69z4TOuc66zrXOr868zrXOvc6/IMKrJXPCuyAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKK21zZ3N0ciAizpXOu86uz4bOuM63IM+Ezr8gzrzOrs69z4XOvM6xICAjJXUgKCVzKTogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKK21zZ3N0ciAizpXOu86uz4bOuM63IEVPUyDOsc+Az4wgz4TOvyDPg8+Ezr/Ouc+HzrXOr86/IMKrJXPCuy5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgorbXNnc3RyICJGT1VORCBUQUcgICAgICA6IM61z43Pgc61z4POtyDOus6xz4TOrCDPg8+Ezr/Ouc+HzrXOr86/IMKrJXPCuy5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCittc2dzdHIgIkZPVU5EIFRBRyAgICAgIDogzrXPjc+BzrXPg863IM66zrHPhM6sIHBhZCDCqyVzOiVzwrsuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgorbXNnc3RyICJGT1VORCBUQUcgICAgICA6IM61z43Pgc61z4POtyDOus6xz4TOrCDOsc69z4TOuc66zrXOr868zrXOvc6/IMKrJXPCuy5cbiIKKworbXNnaWQgIkZPVU5EIFRBR1xuIgorbXNnc3RyICJGT1VORCBUQUdcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSU5GTzpcbiIKKyIlc1xuIgorbXNnc3RyICIiCisiSU5GTzpcbiIKKyIlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAiV0FSTklORzogzrHPgM+MIM+Ezr8gz4PPhM6/zrnPh861zq/OvyAlczogJXNcbiIKKworbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgorbXNnc3RyICLOoM+Bzr/PhM+FzrvOuc6zzrzOrc69zr8sIM6xzr3Osc68zr/Ovc6uIM6zzrnOsSDOv867zr/Ous67zq7Pgc+Jz4POtyDOtyDOsc+Azr/OuM6uzrrOtc+Fz4POtyDPgc6/zq7PguKAplxuIgorCittc2dpZCAiYnVmZmVyaW5nLi4uIgorbXNnc3RyICLPgM+Bzr/Pg8+Jz4HOuc69zq4gzrHPgM6/zrjOrs66zrXPhc+DzrfigKYiCisKK21zZ2lkICJEb25lIGJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgorbXNnc3RyICLOkc+Azr/OuM6uzrrOtc+Fz4POtyDOv867zr/Ous67zrfPgc+OzrjOt866zrUsIM6/z4HOuc+DzrzPjM+CIM60zrnOsc+Dz4nOu86uzr3Pic+DzrfPgiDPg861IFBMQVlJTkcg4oCmXG4iCisKK21zZ2lkICJCdWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgorbXNnc3RyICLOkc+Azr/OuM6uzrrOtc+Fz4POtywgzr/Pgc65z4POvM+Mz4IgzrTOuc6xz4PPic67zq7Ovc+Jz4POt8+CIM+DzrUgUEFVU0VEIOKAplxuIgorCittc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKK21zZ3N0ciAizprOsc64z4XPg8+Ezq3Pgc63z4POtyDOsc69zrHOtM65zrHOvc6/zrzOrs+C4oCmXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBzdGF0ZSB0byAlcyBhcyByZXF1ZXN0ZWQgYnkgJXMuLi5cbiIKK21zZ3N0ciAizp/Pgc65z4POvM+Mz4IgzrrOsc+EzqzPg8+EzrHPg863z4Igz4POtSAlcyDPjM+Az4nPgiDOts63z4TOrs64zrfOus61IM6xz4DPjCAlc+KAplxuIgorCittc2dpZCAiSW50ZXJydXB0OiBTdG9wcGluZyBwaXBlbGluZSAuLi5cbiIKK21zZ3N0ciAizpTOuc6xzrrOv8+Azq46IM6kzrXPgc68zrHPhM65z4POvM+Mz4IgzrTOuc6xz4PPic67zq7Ovc+Jz4POt8+C4oCmXG4iCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKK21zZ3N0ciAizrTOtc69IM+Fz4DOrM+Bz4fOtc65IM+Dz4TOv865z4fOtc6vzr8gwqslc8K7IgorCittc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgorbXNnc3RyICLOlc+EzrnOus6tz4TOtc+CIM61zr7PjM60zr/PhSAozrXPgM6vz4POt8+CIM6zzr3Pic+Dz4TOrc+CIM+Jz4IgzrzOtc+EzrHOtM61zrTOv868zq3Ovc6xKSIKKworbXNnaWQgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCittc2dzdHIgIs6gzrvOt8+Bzr/Phs6/z4HOr861z4IgzrrOsc+EzqzPg8+EzrHPg863z4IgzrXOvs+MzrTOv8+FIM66zrHOuSDOtc65zrTOv8+Azr/Ouc6uz4POtc65z4IgzrnOtM65zr/PhM6uz4TPic69IgorCittc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAizp3OsSDOvM63zr0gzrXOvM+GzrHOvc65z4POuM61zq8gzrrOsc68zrzOr86xIM+AzrvOt8+Bzr/Phs6/z4HOr86xIM+Az4HOv8+MzrTOv8+FIgorCittc2dpZCAiT3V0cHV0IG1lc3NhZ2VzIgorbXNnc3RyICLOnM63zr3Pjc68zrHPhM6xIM61zr7PjM60zr/PhSIKKworbXNnaWQgIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIFRZUEUiCittc2dzdHIgIs6dzrEgzrzOt869IM61zr7OrM6zzrXPhM6xzrkgz4DOu863z4HOv8+Gzr/Pgc6vzrEgzrrOsc+EzqzPg8+EzrHPg863z4IgzrXOvs+MzrTOv8+FIM+Ezr/PhSBUWVBFIgorCittc2dpZCAiVFlQRTEsVFlQRTIsLi4uIgorbXNnc3RyICJUWVBFMSxUWVBFMizigKYiCisKK21zZ2lkICJEbyBub3QgaW5zdGFsbCBhIGZhdWx0IGhhbmRsZXIiCittc2dzdHIgIs6dzrEgzrzOt869IM61zrPOus6xz4TOsc+Dz4TOsc64zrXOryDPh861zrnPgc65z4PPhM6uz4Igz4PPhs6xzrvOvM6sz4TPic69IgorCittc2dpZCAiUHJpbnQgYWxsb2MgdHJhY2UgKGlmIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lKSIKK21zZ3N0ciAiIgorIs6VzrzPhs6szr3Ouc+Dzrcgzq/Ph869zr/Phc+CIM6xzr3PhM65z4PPhM6/zq/Ph865z4POt8+CICjOsc69IM61zq/Ovc6xzrkgzrXOvc61z4HOs86/z4DOv865zrfOvM6tzr3OvyDOus6xz4TOrCDPhM63IM68zrXPhM6xzrPOu8+Oz4TPhM65z4POtyAiCisizrrPjs60zrnOus6xKSIKKworbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKK21zZ3N0ciAizpXOvs6xzr3Osc6zzrrOsc+DzrzPjM+CIM+Ezr/PhSBFT1Mgz4PPhM65z4Igz4DOt86zzq3PgiDPgM+BzrnOvSDPhM6/IM66zrvOtc6vz4POuc68zr8gz4TOt8+CIM60zrnOsc+Dz4nOu86uzr3Pic+DzrfPgiIKKworbXNnaWQgIkdhdGhlciBhbmQgcHJpbnQgaW5kZXggc3RhdGlzdGljcyIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQ6ICVzLlxuIgorbXNnc3RyICJFUlJPUjogzrHOtM+Fzr3Osc68zq/OsSDOus6xz4TOsc+DzrrOtc+Fzq7PgiDOtM65zrHPg8+JzrvOrs69z4nPg863z4I6ICVzLlxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKK21zZ3N0ciAiRVJST1I6IM6xzrTPhc69zrHOvM6vzrEgzrrOsc+EzrHPg866zrXPhc6uz4IgzrTOuc6xz4PPic67zq7Ovc+Jz4POt8+CLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGVycm9uZW91cyBwaXBlbGluZTogJXNcbiIKK21zZ3N0ciAiV0FSTklORzogzrXPg8+GzrHOu868zq3Ovc63IM60zrnOsc+Dz4nOu86uzr3Pic+Dzrc6ICVzXG4iCisKK21zZ2lkICJFUlJPUjogdGhlICdwaXBlbGluZScgZWxlbWVudCB3YXNuJ3QgZm91bmQuXG4iCittc2dzdHIgIkVSUk9SOiDPhM6/IM+Dz4TOv865z4fOtc6vzr8gJ860zrnOsc+Dz4nOu86uzr3Pic+DzrcnIM60zrXOvSDOss+Bzq3OuM63zrrOtS5cbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgorbXNnc3RyICLOn8+BzrnPg868z4zPgiDOtM65zrHPg8+JzrvOrs69z4nPg863z4Igz4POtSBQQVVTRUQg4oCmXG4iCisKK21zZ2lkICJFUlJPUjogUGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBhdXNlLlxuIgorbXNnc3RyICJFUlJPUjogzpcgzrTOuc6xz4PPic67zq7Ovc+Jz4POtyDOtM61zr0gzrjOrc67zrXOuSDOvc6xIM+AzrHPjc+DzrXOuS5cbiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIGxpdmUgYW5kIGRvZXMgbm90IG5lZWQgUFJFUk9MTCAuLi5cbiIKK21zZ3N0ciAizpcgzrTOuc6xz4PPic67zq7Ovc+Jz4POtyDOtc6vzr3Osc65IM61zr3Otc+BzrPOriDOus6xzrkgzrTOtc69IM+Hz4HOtc65zqzOts61z4TOsc65IFBSRVJPTEwg4oCmIFxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTElORyAuLi5cbiIKK21zZ3N0ciAizpcgzrTOuc6xz4PPic67zq7Ovc+Jz4POtyDOtc6vzr3Osc65IM+DzrUgUFJFUk9MTElORyDigKZcbiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcHJlcm9sbC5cbiIKK21zZ3N0ciAiRVJST1I6IM63IM60zrnOsc+Dz4nOu86uzr3Pic+DzrcgzrTOtc69IM64zq3Ou861zrkgzr3OsSDPgM+Bzr/PhM+FzrvOuc+HzrjOtc6vLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgorbXNnc3RyICLOlyDOtM65zrHPg8+JzrvOrs69z4nPg863IM61zq/Ovc6xzrkgUFJFUk9MTEVEIOKAplxuIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgorbXNnc3RyICLOn8+BzrnPg868z4zPgiDOtM65zrHPg8+JzrvOrs69z4nPg863z4Igz4POtSBQTEFZSU5HIOKAplxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIgorbXNnc3RyICJFUlJPUjogzrcgzrTOuc6xz4PPic67zq7Ovc+Jz4POtyDOtM61zr0gzrjOrc67zrXOuSDOvc6xIM6xzr3Osc+AzrHPgc6xz4fOuM61zq8uXG4iCisKK21zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKK21zZ3N0ciAiIgorIs6Vzr3Otc+BzrPOv8+Azr/Or863z4POtyDPhM6/z4UgRU9TIM66zrHPhM6sIM+Ezr/OvSDPhM61z4HOvM6xz4TOuc+DzrzPjCAtLSDOlc+AzrnOss6/zrvOriDPhM6/z4UgRU9TIM+Dz4TOtyDOtM65zrHPg8+JzrvOrs69z4nPg863XG4iCisKK21zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKK21zZ3N0ciAizpHOvc6xzrzOv869zq4gzrPOuc6xIEVPU+KAplxuIgorCittc2dpZCAiRU9TIHJlY2VpdmVkIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKK21zZ3N0ciAizpvOrs+IzrcgRU9TIC0gzrTOuc6xzrrOv8+Azq4gzrTOuc6xz4PPic67zq7Ovc+Jz4POt8+C4oCmXG4iCisKK21zZ2lkICJBbiBlcnJvciBoYXBwZW5lZCB3aGlsZSB3YWl0aW5nIGZvciBFT1NcbiIKK21zZ3N0ciAizqDPgc6/zq3Ous+Fz4jOtSDPg8+GzqzOu868zrEgzrrOsc+Ezqwgz4TOt869IM6xzr3Osc68zr/Ovc6uIM6zzrnOsSBFT1NcbiIKKworbXNnaWQgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgorbXNnc3RyICLOlyDOtc66z4TOrc67zrXPg863IM+EzrXOu861zq/Pic+DzrUgzrzOtc+EzqwgJSIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUkVBRFkgLi4uXG4iCittc2dzdHIgIs6fz4HOuc+DzrzPjM+CIM60zrnOsc+Dz4nOu86uzr3Pic+DzrfPgiDPg861IFJFQURZIOKAplxuIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgorbXNnc3RyICLOn8+BzrnPg868z4zPgiDOtM65zrHPg8+JzrvOrs69z4nPg863z4Igz4POtSBOVUxMIOKAplxuIgorCittc2dpZCAiRnJlZWluZyBwaXBlbGluZSAuLi5cbiIKK21zZ3N0ciAizpHPgM6/zrTOrc+DzrzOtc+Fz4POtyDPhM63z4IgzrTOuc6xz4PPic67zq7Ovc+Jz4POt8+CIOKAplxuIgorCisjfiBtc2dpZCAiVXNhZ2U6IGdzdC14bWxsYXVuY2ggPGZpbGUueG1sPiBbIGVsZW1lbnQucHJvcGVydHk9dmFsdWUgLi4uIF1cbiIKKyN+IG1zZ3N0ciAizqfPgc6uz4POtzogZ3N0LXhtbGxhdW5jaCA8ZmlsZS54bWw+IFsgZWxlbWVudC5wcm9wZXJ0eT12YWx1ZSAuLi4gXVxuIgorCisjfiBtc2dpZCAiRVJST1I6IHBhcnNlIG9mIHhtbCBmaWxlICclcycgZmFpbGVkLlxuIgorI34gbXNnc3RyICJFUlJPUjogzrHPgM6/z4TPhc+Hzq/OsSDOsc69zqzOu8+Fz4POt8+CIM6xz4HPh861zq/Ov8+FIHhtbCAnJXMnLlxuIgorCisjfiBtc2dpZCAiRVJST1I6IG5vIHRvcGxldmVsIHBpcGVsaW5lIGVsZW1lbnQgaW4gZmlsZSAnJXMnLlxuIgorI34gbXNnc3RyICIiCisjfiAiRVJST1I6IM60zrXOvSDPhc+AzqzPgc+HzrXOuSDPg8+Ezr/Ouc+HzrXOr86/IM60zrnOsc+Dz4nOu86uzr3Pic+DzrfPgiDPg8+Ezr8gzrHOvc+Oz4TOtc+Bzr8gzrXPgM6vz4DOtc60zr8gz4PPhM6/IM6xz4HPh861zq/OvyAiCisjfiAiJyVzJy5cbiIKKworI34gbXNnaWQgIldBUk5JTkc6IG9ubHkgb25lIHRvcGxldmVsIGVsZW1lbnQgaXMgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIldBUk5JTkc6IM68z4zOvc6/IM6tzr3OsSDPg8+Ezr/Ouc+HzrXOr86/IM+DzrUgzrHOvc+Oz4TOtc+Bzr8gzrXPgM6vz4DOtc60zr8gz4XPgM6/z4PPhM63z4HOr862zrXPhM6xzrkgzrHPhc+Ezq4gz4TOtyAiCisjfiAiz4PPhM65zrPOvM6uLlxuIgorCisjfiBtc2dpZCAiRVJST1I6IGNvdWxkIG5vdCBwYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgJWQ6ICVzLlxuIgorI34gbXNnc3RyICJFUlJPUjogzrHOtM+Fzr3Osc68zq/OsSDOsc69zqzOu8+Fz4POt8+CIM6/z4HOr8+DzrzOsc+Ezr/PgiDOs8+BzrHOvM68zq7PgiDOtc69z4TOv867zq7PgiAlZDogJXMuXG4iCisKKyN+IG1zZ2lkICJXQVJOSU5HOiBlbGVtZW50IG5hbWVkICclcycgbm90IGZvdW5kLlxuIgorI34gbXNnc3RyICJXQVJOSU5HOiDPhM6/IM+Dz4TOv865z4fOtc6vzr8gzrzOtSDPhM6/IM+Mzr3Ov868zrEgJyVzJyDOtM61zr0gzrLPgc6tzrjOt866zrUuXG4iCisKKyN+IG1zZ2lkICJTYXZlIHhtbCByZXByZXNlbnRhdGlvbiBvZiBwaXBlbGluZSB0byBGSUxFIGFuZCBleGl0IgorI34gbXNnc3RyICLOkc+Azr/OuM6uzrrOtc+Fz4POtyB4bWwgzrHOvc6xz4DOsc+BzqzPg8+EzrHPg863z4Igz4TOt8+CIM60zrnOsc+Dz4nOu86uzr3Pic+DzrfPgiDPg8+Ezr8gRklMRSDOus6xzrkgzq3Ovs6/zrTOv8+CIgorCisjfiBtc2dpZCAiRklMRSIKKyN+IG1zZ3N0ciAiRklMRSIKKworI34gbXNnaWQgIkRvIG5vdCBpbnN0YWxsIHNpZ25hbCBoYW5kbGVycyBmb3IgU0lHVVNSMSBhbmQgU0lHVVNSMiIKKyN+IG1zZ3N0ciAizp3OsSDOvM63zr0gzrXOs866zrHPhM6xz4PPhM6xzrjOv8+Nzr0gz4fOtc65z4HOuc+Dz4TOrc+CIM+DzrfOvM6sz4TPic69IM6zzrnOsSBTSUdVU1IxIM66zrHOuSBTSUdVU1IyIgpkaWZmIC0tZ2l0IGEvcG8vZW5AYm9sZHF1b3QuaGVhZGVyIGIvcG8vZW5AYm9sZHF1b3QuaGVhZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZGI2YTAKLS0tIC9kZXYvbnVsbAorKysgYi9wby9lbkBib2xkcXVvdC5oZWFkZXIKQEAgLTAsMCArMSwyNSBAQAorIyBBbGwgdGhpcyBjYXRhbG9nICJ0cmFuc2xhdGVzIiBhcmUgcXVvdGF0aW9uIGNoYXJhY3RlcnMuCisjIFRoZSBtc2dpZHMgbXVzdCBiZSBBU0NJSSBhbmQgdGhlcmVmb3JlIGNhbm5vdCBjb250YWluIHJlYWwgcXVvdGF0aW9uCisjIGNoYXJhY3RlcnMsIG9ubHkgc3Vic3RpdHV0ZXMgbGlrZSBncmF2ZSBhY2NlbnQgKDB4NjApLCBhcG9zdHJvcGhlICgweDI3KQorIyBhbmQgZG91YmxlIHF1b3RlICgweDIyKS4gVGhlc2Ugc3Vic3RpdHV0ZXMgbG9vayBzdHJhbmdlOyBzZWUKKyMgaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L3Vjcy9xdW90ZXMuaHRtbAorIworIyBUaGlzIGNhdGFsb2cgdHJhbnNsYXRlcyBncmF2ZSBhY2NlbnQgKDB4NjApIGFuZCBhcG9zdHJvcGhlICgweDI3KSB0bworIyBsZWZ0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE4KSBhbmQgcmlnaHQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTkpLgorIyBJdCBhbHNvIHRyYW5zbGF0ZXMgcGFpcnMgb2YgYXBvc3Ryb3BoZSAoMHgyNykgdG8KKyMgbGVmdCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOCkgYW5kIHJpZ2h0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE5KQorIyBhbmQgcGFpcnMgb2YgcXVvdGF0aW9uIG1hcmsgKDB4MjIpIHRvCisjIGxlZnQgZG91YmxlIHF1b3RhdGlvbiBtYXJrIChVKzIwMUMpIGFuZCByaWdodCBkb3VibGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxRCkuCisjCisjIFdoZW4gb3V0cHV0IHRvIGFuIFVURi04IHRlcm1pbmFsLCB0aGUgcXVvdGF0aW9uIGNoYXJhY3RlcnMgYXBwZWFyIHBlcmZlY3RseS4KKyMgV2hlbiBvdXRwdXQgdG8gYW4gSVNPLTg4NTktMSB0ZXJtaW5hbCwgdGhlIHNpbmdsZSBxdW90YXRpb24gbWFya3MgYXJlCisjIHRyYW5zbGl0ZXJhdGVkIHRvIGFwb3N0cm9waGVzIChieSBpY29udiBpbiBnbGliYyAyLjIgb3IgbmV3ZXIpIG9yIHRvCisjIGdyYXZlL2FjdXRlIGFjY2VudCAoYnkgbGliaWNvbnYpLCBhbmQgdGhlIGRvdWJsZSBxdW90YXRpb24gbWFya3MgYXJlCisjIHRyYW5zbGl0ZXJhdGVkIHRvIDB4MjIuCisjIFdoZW4gb3V0cHV0IHRvIGFuIEFTQ0lJIHRlcm1pbmFsLCB0aGUgc2luZ2xlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKyMgdHJhbnNsaXRlcmF0ZWQgdG8gYXBvc3Ryb3BoZXMsIGFuZCB0aGUgZG91YmxlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKyMgdHJhbnNsaXRlcmF0ZWQgdG8gMHgyMi4KKyMKKyMgVGhpcyBjYXRhbG9nIGZ1cnRoZXJtb3JlIGRpc3BsYXlzIHRoZSB0ZXh0IGJldHdlZW4gdGhlIHF1b3RhdGlvbiBtYXJrcyBpbgorIyBib2xkIGZhY2UsIGFzc3VtaW5nIHRoZSBWVDEwMC9YVGVybSBlc2NhcGUgc2VxdWVuY2VzLgorIwpkaWZmIC0tZ2l0IGEvcG8vZW5AcXVvdC5oZWFkZXIgYi9wby9lbkBxdW90LmhlYWRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTY0N2ZjCi0tLSAvZGV2L251bGwKKysrIGIvcG8vZW5AcXVvdC5oZWFkZXIKQEAgLTAsMCArMSwyMiBAQAorIyBBbGwgdGhpcyBjYXRhbG9nICJ0cmFuc2xhdGVzIiBhcmUgcXVvdGF0aW9uIGNoYXJhY3RlcnMuCisjIFRoZSBtc2dpZHMgbXVzdCBiZSBBU0NJSSBhbmQgdGhlcmVmb3JlIGNhbm5vdCBjb250YWluIHJlYWwgcXVvdGF0aW9uCisjIGNoYXJhY3RlcnMsIG9ubHkgc3Vic3RpdHV0ZXMgbGlrZSBncmF2ZSBhY2NlbnQgKDB4NjApLCBhcG9zdHJvcGhlICgweDI3KQorIyBhbmQgZG91YmxlIHF1b3RlICgweDIyKS4gVGhlc2Ugc3Vic3RpdHV0ZXMgbG9vayBzdHJhbmdlOyBzZWUKKyMgaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L3Vjcy9xdW90ZXMuaHRtbAorIworIyBUaGlzIGNhdGFsb2cgdHJhbnNsYXRlcyBncmF2ZSBhY2NlbnQgKDB4NjApIGFuZCBhcG9zdHJvcGhlICgweDI3KSB0bworIyBsZWZ0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE4KSBhbmQgcmlnaHQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTkpLgorIyBJdCBhbHNvIHRyYW5zbGF0ZXMgcGFpcnMgb2YgYXBvc3Ryb3BoZSAoMHgyNykgdG8KKyMgbGVmdCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOCkgYW5kIHJpZ2h0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE5KQorIyBhbmQgcGFpcnMgb2YgcXVvdGF0aW9uIG1hcmsgKDB4MjIpIHRvCisjIGxlZnQgZG91YmxlIHF1b3RhdGlvbiBtYXJrIChVKzIwMUMpIGFuZCByaWdodCBkb3VibGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxRCkuCisjCisjIFdoZW4gb3V0cHV0IHRvIGFuIFVURi04IHRlcm1pbmFsLCB0aGUgcXVvdGF0aW9uIGNoYXJhY3RlcnMgYXBwZWFyIHBlcmZlY3RseS4KKyMgV2hlbiBvdXRwdXQgdG8gYW4gSVNPLTg4NTktMSB0ZXJtaW5hbCwgdGhlIHNpbmdsZSBxdW90YXRpb24gbWFya3MgYXJlCisjIHRyYW5zbGl0ZXJhdGVkIHRvIGFwb3N0cm9waGVzIChieSBpY29udiBpbiBnbGliYyAyLjIgb3IgbmV3ZXIpIG9yIHRvCisjIGdyYXZlL2FjdXRlIGFjY2VudCAoYnkgbGliaWNvbnYpLCBhbmQgdGhlIGRvdWJsZSBxdW90YXRpb24gbWFya3MgYXJlCisjIHRyYW5zbGl0ZXJhdGVkIHRvIDB4MjIuCisjIFdoZW4gb3V0cHV0IHRvIGFuIEFTQ0lJIHRlcm1pbmFsLCB0aGUgc2luZ2xlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKyMgdHJhbnNsaXRlcmF0ZWQgdG8gYXBvc3Ryb3BoZXMsIGFuZCB0aGUgZG91YmxlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKyMgdHJhbnNsaXRlcmF0ZWQgdG8gMHgyMi4KKyMKZGlmZiAtLWdpdCBhL3BvL2VuX0dCLmdtbyBiL3BvL2VuX0dCLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODcyNmJlCi0tLSAvZGV2L251bGwKKysrIGIvcG8vZW5fR0IuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2VuX0dCLnBvIGIvcG8vZW5fR0IucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZlMGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3BvL2VuX0dCLnBvCkBAIC0wLDAgKzEsMTMwNyBAQAorIyBUcmFuc2xhdGlvbiBvZiBnc3RyZWFtZXIgbWVzc2FnZXMgdG8gRW5nbGlzaCAoQnJpdGlzaCkuCisjIENvcHlyaWdodCAoQykgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgR2FyZXRoIE93ZW4gPGdvd2VuNzJAeWFob28uY29tPiwgMjAwNC4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdzdHJlYW1lciAwLjguMVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTA5LTI5IDE0OjU1KzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA0LTA0LTI2IDEwOjM2LTA0MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEdhcmV0aCBPd2VuIDxnb3dlbjcyQHlhaG9vLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBFbmdsaXNoIChCcml0aXNoKSA8ZW5fZ2JAbGkub3JnPlxuIgorIkxhbmd1YWdlOiBlbl9HQlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCittc2dpZCAiUHJpbnQgdGhlIEdTdHJlYW1lciB2ZXJzaW9uIgorbXNnc3RyICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCisKK21zZ2lkICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKK21zZ3N0ciAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCisKK21zZ2lkICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKK21zZ3N0ciAiUHJpbnQgYXZhaWxhYmxlIGRlYnVnIGNhdGVnb3JpZXMgYW5kIGV4aXQiCisKK21zZ2lkICIiCisiRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmcm9tIDEgKG9ubHkgZXJyb3IpIHRvIDUgKGFueXRoaW5nKSBvciAwIGZvciBubyBvdXRwdXQiCittc2dzdHIgIiIKKyJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gNSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKKworbXNnaWQgIkxFVkVMIgorbXNnc3RyICJMRVZFTCIKKworbXNnaWQgIiIKKyJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yICIKKyJ0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCittc2dzdHIgIiIKKyJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yICIKKyJ0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCisKK21zZ2lkICJMSVNUIgorbXNnc3RyICJMSVNUIgorCittc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCittc2dzdHIgIkRpc2FibGUgY29sb3VyZWQgZGVidWdnaW5nIG91dHB1dCIKKworbXNnaWQgIkRpc2FibGUgZGVidWdnaW5nIgorbXNnc3RyICJEaXNhYmxlIGRlYnVnZ2luZyIKKworbXNnaWQgIkVuYWJsZSB2ZXJib3NlIHBsdWdpbiBsb2FkaW5nIGRpYWdub3N0aWNzIgorbXNnc3RyICJFbmFibGUgdmVyYm9zZSBwbHVnaW4gbG9hZGluZyBkaWFnbm9zdGljcyIKKworbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCittc2dzdHIgIiIKKworbXNnaWQgIlBBVEhTIgorbXNnc3RyICJQQVRIUyIKKworIywgZnV6enkKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCisiZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgorbXNnc3RyICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCisiZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgorCittc2dpZCAiUExVR0lOUyIKK21zZ3N0ciAiUExVR0lOUyIKKworbXNnaWQgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCittc2dzdHIgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCisKK21zZ2lkICJEaXNhYmxlIHVwZGF0aW5nIHRoZSByZWdpc3RyeSIKK21zZ3N0ciAiIgorCittc2dpZCAiRGlzYWJsZSBzcGF3bmluZyBhIGhlbHBlciBwcm9jZXNzIHdoaWxlIHNjYW5uaW5nIHRoZSByZWdpc3RyeSIKK21zZ3N0ciAiIgorCittc2dpZCAiR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJTaG93IEdTdHJlYW1lciBPcHRpb25zIgorbXNnc3RyICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCisKK21zZ2lkICJVbmtub3duIG9wdGlvbiIKK21zZ3N0ciAiIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIGNvcmUgbGlicmFyeSBlcnJvci4iCisKKyMsIGZ1enp5Cittc2dpZCAiIgorIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyBlcnJvci4iCittc2dzdHIgIiIKKyJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuICAiCisiUGxlYXNlIGZpbGUgYSBidWcuIgorCisjLCBmdXp6eQorbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY29kZSBub3QgaW1wbGVtZW50ZWQuIgorbXNnc3RyICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiAgRmlsZSBhIGJ1Zy4iCisKK21zZ2lkICIiCisiR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkIGFuZCBzb21lIGVsZW1lbnQgZmFpbGVkIHRvIHBvc3QgYSAiCisicHJvcGVyIGVycm9yIG1lc3NhZ2Ugd2l0aCB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZS4iCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHBhZCBwcm9ibGVtLiIKK21zZ3N0ciAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4gIEZpbGUgYSBidWcuIgorCisjLCBmdXp6eQorbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGhyZWFkIHByb2JsZW0uIgorbXNnc3RyICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiAgRmlsZSBhIGJ1Zy4iCisKKyMsIGZ1enp5Cittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBuZWdvdGlhdGlvbiBwcm9ibGVtLiIKK21zZ3N0ciAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBuZWdvdGlhdGlvbiBwcm9ibGVtLiAgRmlsZSBhIGJ1Zy4iCisKKyMsIGZ1enp5Cittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBldmVudCBwcm9ibGVtLiIKK21zZ3N0ciAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBldmVudCBwcm9ibGVtLiAgRmlsZSBhIGJ1Zy4iCisKKyMsIGZ1enp5Cittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uIgorbXNnc3RyICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4gIEZpbGUgYSBidWcuIgorCisjLCBmdXp6eQorbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2FwcyBwcm9ibGVtLiIKK21zZ3N0ciAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uICBGaWxlIGEgYnVnLiIKKworIywgZnV6enkKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKK21zZ3N0ciAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4gIEZpbGUgYSBidWcuIgorCittc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2xvY2sgcHJvYmxlbS4iCittc2dzdHIgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2VlayBwcm9ibGVtLiAgRmlsZSBhIGJ1Zy4iCisKK21zZ2lkICIiCisiVGhpcyBhcHBsaWNhdGlvbiBpcyB0cnlpbmcgdG8gdXNlIEdTdHJlYW1lciBmdW5jdGlvbmFsaXR5IHRoYXQgaGFzIGJlZW4gIgorImRpc2FibGVkLiIKK21zZ3N0ciAiIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN1cHBvcnRpbmcgbGlicmFyeSBlcnJvci4iCisKK21zZ2lkICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJDb3VsZCBub3QgaW5pdGlhbGlzZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorCittc2dpZCAiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorCisjLCBmdXp6eQorbXNnaWQgIkNvdWxkIG5vdCBjb25maWd1cmUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iCisKK21zZ2lkICJFbmNvZGluZyBlcnJvci4iCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHJlc291cmNlIGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgorCittc2dpZCAiUmVzb3VyY2Ugbm90IGZvdW5kLiIKK21zZ3N0ciAiUmVzb3VyY2Ugbm90IGZvdW5kLiIKKworbXNnaWQgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCittc2dzdHIgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCittc2dzdHIgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHdyaXRpbmcuIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgorbXNnc3RyICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCisKK21zZ2lkICJDb3VsZCBub3QgY2xvc2UgcmVzb3VyY2UuIgorbXNnc3RyICJDb3VsZCBub3QgY2xvc2UgcmVzb3VyY2UuIgorCittc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCittc2dzdHIgIkNvdWxkIG5vdCByZWFkIGZyb20gcmVzb3VyY2UuIgorCittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKK21zZ3N0ciAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKKworbXNnaWQgIkNvdWxkIG5vdCBwZXJmb3JtIHNlZWsgb24gcmVzb3VyY2UuIgorbXNnc3RyICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKKworbXNnaWQgIkNvdWxkIG5vdCBzeW5jaHJvbml6ZSBvbiByZXNvdXJjZS4iCittc2dzdHIgIkNvdWxkIG5vdCBzeW5jaHJvbmlzZSBvbiByZXNvdXJjZS4iCisKK21zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKK21zZ3N0ciAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCisKK21zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN0cmVhbSBlcnJvci4iCittc2dzdHIgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgY29yZSBsaWJyYXJ5IGVycm9yLiIKKworbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKK21zZ3N0ciAiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBoYW5kbGluZyBvZiB0aGlzIHN0cmVhbS4gUGxlYXNlIGZpbGUgYSBidWcuIgorCittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCittc2dzdHIgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBvZiBhIGRpZmZlcmVudCB0eXBlIHRoYW4gaGFuZGxlZCBieSB0aGlzIGVsZW1lbnQuIgorbXNnc3RyICJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgZWxlbWVudC4iCisKK21zZ2lkICJUaGVyZSBpcyBubyBjb2RlYyBwcmVzZW50IHRoYXQgY2FuIGhhbmRsZSB0aGUgc3RyZWFtJ3MgdHlwZS4iCittc2dzdHIgIlRoZXJlIGlzIG5vIGNvZGVjIHByZXNlbnQgdGhhdCBjYW4gaGFuZGxlIHRoZSBzdHJlYW0ncyB0eXBlLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZWNvZGUgc3RyZWFtLiIKK21zZ3N0ciAiQ291bGQgbm90IGRlY29kZSBzdHJlYW0uIgorCittc2dpZCAiQ291bGQgbm90IGVuY29kZSBzdHJlYW0uIgorbXNnc3RyICJDb3VsZCBub3QgZW5jb2RlIHN0cmVhbS4iCisKK21zZ2lkICJDb3VsZCBub3QgZGVtdWx0aXBsZXggc3RyZWFtLiIKK21zZ3N0ciAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCisKK21zZ2lkICJDb3VsZCBub3QgbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKKworIywgZnV6enkKK21zZ2lkICJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIgorbXNnc3RyICJTdHJlYW0gaXMgb2YgdGhlIHdyb25nIGZvcm1hdC4iCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKKyJiZWVuIHN1cHBsaWVkLiIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCittc2dzdHIgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKK21zZ3N0ciAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKKworbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKK21zZ3N0ciAiIgorCittc2dpZCAidGl0bGUiCittc2dzdHIgInRpdGxlIgorCittc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKK21zZ3N0ciAiY29tbW9ubHkgdXNlZCB0aXRsZSIKKworbXNnaWQgInRpdGxlIHNvcnRuYW1lIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiY29tbW9ubHkgdXNlZCB0aXRsZSIKKworbXNnaWQgImFydGlzdCIKK21zZ3N0ciAiYXJ0aXN0IgorCittc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIgorbXNnc3RyICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmciCisKK21zZ2lkICJhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKKworbXNnaWQgImFsYnVtIgorbXNnc3RyICJhbGJ1bSIKKworbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgorbXNnc3RyICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSIKKworbXNnaWQgImFsYnVtIHNvcnRuYW1lIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgorCisjLCBmdXp6eQorbXNnaWQgImFsYnVtIGFydGlzdCIKK21zZ3N0ciAiYXJ0aXN0IgorCittc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgorbXNnc3RyICIiCisKK21zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgIiIKKworbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCIKK21zZ3N0ciAiIgorCittc2dpZCAiZGF0ZSIKK21zZ3N0ciAiZGF0ZSIKKworIywgZnV6enkKK21zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCittc2dzdHIgImRhdGUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGluIEp1bGlhbiBjYWxlbmRhciBkYXlzKSIKKworIywgZnV6enkKK21zZ2lkICJkYXRldGltZSIKK21zZ3N0ciAiZGF0ZSIKKworIywgZnV6enkKK21zZ2lkICJkYXRlIGFuZCB0aW1lIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdzdERhdGVUaW1lIHN0cnVjdHVyZSkiCittc2dzdHIgImRhdGUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGluIEp1bGlhbiBjYWxlbmRhciBkYXlzKSIKKworbXNnaWQgImdlbnJlIgorbXNnc3RyICJnZW5yZSIKKworbXNnaWQgImdlbnJlIHRoaXMgZGF0YSBiZWxvbmdzIHRvIgorbXNnc3RyICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKKworbXNnaWQgImNvbW1lbnQiCittc2dzdHIgImNvbW1lbnQiCisKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKK21zZ3N0ciAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCisKKyMsIGZ1enp5Cittc2dpZCAiZXh0ZW5kZWQgY29tbWVudCIKK21zZ3N0ciAiY29tbWVudCIKKworIywgZnV6enkKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCittc2dzdHIgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIgorCittc2dpZCAidHJhY2sgbnVtYmVyIgorbXNnc3RyICJ0cmFjayBudW1iZXIiCisKK21zZ2lkICJ0cmFjayBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKK21zZ3N0ciAidHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCisKK21zZ2lkICJ0cmFjayBjb3VudCIKK21zZ3N0ciAidHJhY2sgY291bnQiCisKK21zZ2lkICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgorbXNnc3RyICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgorCittc2dpZCAiZGlzYyBudW1iZXIiCittc2dzdHIgImRpc2MgbnVtYmVyIgorCittc2dpZCAiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKK21zZ3N0ciAiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKKworbXNnaWQgImRpc2MgY291bnQiCittc2dzdHIgImRpc2MgY291bnQiCisKK21zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKK21zZ3N0ciAiY291bnQgb2YgZGlzY3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyBkaXNjIGJlbG9uZ3MgdG8iCisKK21zZ2lkICJsb2NhdGlvbiIKK21zZ3N0ciAibG9jYXRpb24iCisKK21zZ2lkICIiCisiT3JpZ2luIG9mIG1lZGlhIGFzIGEgVVJJIChsb2NhdGlvbiwgd2hlcmUgdGhlIG9yaWdpbmFsIG9mIHRoZSBmaWxlIG9yIHN0cmVhbSAiCisiaXMgaG9zdGVkKSIKK21zZ3N0ciAiIgorCittc2dpZCAiaG9tZXBhZ2UiCittc2dzdHIgIiIKKworbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCittc2dzdHIgIiIKKworbXNnaWQgImRlc2NyaXB0aW9uIgorbXNnc3RyICJkZXNjcmlwdGlvbiIKKworbXNnaWQgInNob3J0IHRleHQgZGVzY3JpYmluZyB0aGUgY29udGVudCBvZiB0aGUgZGF0YSIKK21zZ3N0ciAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgorCittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAidmVyc2lvbiIKKworbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgorbXNnc3RyICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKKworbXNnaWQgIklTUkMiCittc2dzdHIgIklTUkMiCisKK21zZ2lkICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCittc2dzdHIgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKKworbXNnaWQgIm9yZ2FuaXphdGlvbiIKK21zZ3N0ciAib3JnYW5pc2F0aW9uIgorCittc2dpZCAiY29weXJpZ2h0IgorbXNnc3RyICJjb3B5cmlnaHQiCisKK21zZ2lkICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgorCisjLCBmdXp6eQorbXNnaWQgImNvcHlyaWdodCB1cmkiCittc2dzdHIgImNvcHlyaWdodCIKKworIywgZnV6enkKK21zZ2lkICJVUkkgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgImNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCisKKyMsIGZ1enp5Cittc2dpZCAiZW5jb2RlZCBieSIKK21zZ3N0ciAiZW5jb2RlciIKKworbXNnaWQgIm5hbWUgb2YgdGhlIGVuY29kaW5nIHBlcnNvbiBvciBvcmdhbml6YXRpb24iCittc2dzdHIgIiIKKworbXNnaWQgImNvbnRhY3QiCittc2dzdHIgImNvbnRhY3QiCisKK21zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgorbXNnc3RyICJjb250YWN0IGluZm9ybWF0aW9uIgorCittc2dpZCAibGljZW5zZSIKK21zZ3N0ciAibGljZW5jZSIKKworbXNnaWQgImxpY2Vuc2Ugb2YgZGF0YSIKK21zZ3N0ciAibGljZW5jZSBvZiBkYXRhIgorCisjLCBmdXp6eQorbXNnaWQgImxpY2Vuc2UgdXJpIgorbXNnc3RyICJsaWNlbmNlIgorCisjLCBmdXp6eQorbXNnaWQgIlVSSSB0byB0aGUgbGljZW5zZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAibGljZW5jZSBvZiBkYXRhIgorCittc2dpZCAicGVyZm9ybWVyIgorbXNnc3RyICJwZXJmb3JtZXIiCisKK21zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKK21zZ3N0ciAicGVyc29uKHMpIHBlcmZvcm1pbmciCisKK21zZ2lkICJjb21wb3NlciIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIgorCittc2dpZCAiZHVyYXRpb24iCittc2dzdHIgImR1cmF0aW9uIgorCittc2dpZCAibGVuZ3RoIGluIEdTdHJlYW1lciB0aW1lIHVuaXRzIChuYW5vc2Vjb25kcykiCittc2dzdHIgImxlbmd0aCBpbiBHU3RyZWFtZXIgdGltZSB1bml0cyAobmFub3NlY29uZHMpIgorCittc2dpZCAiY29kZWMiCittc2dzdHIgImNvZGVjIgorCittc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCisKK21zZ2lkICJ2aWRlbyBjb2RlYyIKK21zZ3N0ciAidmlkZW8gY29kZWMiCisKK21zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKKworbXNnaWQgImF1ZGlvIGNvZGVjIgorbXNnc3RyICJhdWRpbyBjb2RlYyIKKworbXNnaWQgImNvZGVjIHRoZSBhdWRpbyBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIgorCisjLCBmdXp6eQorbXNnaWQgInN1YnRpdGxlIGNvZGVjIgorbXNnc3RyICJ2aWRlbyBjb2RlYyIKKworIywgZnV6enkKK21zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKKworIywgZnV6enkKK21zZ2lkICJjb250YWluZXIgZm9ybWF0IgorbXNnc3RyICJjb250YWN0IGluZm9ybWF0aW9uIgorCisjLCBmdXp6eQorbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCisKK21zZ2lkICJiaXRyYXRlIgorbXNnc3RyICJiaXRyYXRlIgorCittc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKKworbXNnaWQgIm5vbWluYWwgYml0cmF0ZSIKK21zZ3N0ciAibm9taW5hbCBiaXRyYXRlIgorCittc2dpZCAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKKworbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKK21zZ3N0ciAibWluaW11bSBiaXRyYXRlIgorCittc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSIKK21zZ3N0ciAibWF4aW11bSBiaXRyYXRlIgorCittc2dpZCAibWF4aW11bSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAibWF4aW11bSBiaXRyYXRlIGluIGJpdHMvcyIKKworbXNnaWQgImVuY29kZXIiCittc2dzdHIgImVuY29kZXIiCisKK21zZ2lkICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgorbXNnc3RyICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgorCittc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgorbXNnc3RyICJlbmNvZGVyIHZlcnNpb24iCisKK21zZ2lkICJ2ZXJzaW9uIG9mIHRoZSBlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgorbXNnc3RyICJ2ZXJzaW9uIG9mIHRoZSBlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgorCittc2dpZCAic2VyaWFsIgorbXNnc3RyICJzZXJpYWwiCisKK21zZ2lkICJzZXJpYWwgbnVtYmVyIG9mIHRyYWNrIgorbXNnc3RyICJzZXJpYWwgbnVtYmVyIG9mIHRyYWNrIgorCittc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgorbXNnc3RyICJyZXBsYXlnYWluIHRyYWNrIGdhaW4iCisKK21zZ2lkICJ0cmFjayBnYWluIGluIGRiIgorbXNnc3RyICJ0cmFjayBnYWluIGluIGRiIgorCittc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBwZWFrIgorbXNnc3RyICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCisKK21zZ2lkICJwZWFrIG9mIHRoZSB0cmFjayIKK21zZ3N0ciAicGVhayBvZiB0aGUgdHJhY2siCisKK21zZ2lkICJyZXBsYXlnYWluIGFsYnVtIGdhaW4iCittc2dzdHIgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKKworbXNnaWQgImFsYnVtIGdhaW4gaW4gZGIiCittc2dzdHIgImFsYnVtIGdhaW4gaW4gZGIiCisKK21zZ2lkICJyZXBsYXlnYWluIGFsYnVtIHBlYWsiCittc2dzdHIgInJlcGxheWdhaW4gYWxidW0gcGVhayIKKworbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgorbXNnc3RyICJwZWFrIG9mIHRoZSBhbGJ1bSIKKworIywgZnV6enkKK21zZ2lkICJyZXBsYXlnYWluIHJlZmVyZW5jZSBsZXZlbCIKK21zZ3N0ciAicmVwbGF5Z2FpbiB0cmFjayBwZWFrIgorCittc2dpZCAicmVmZXJlbmNlIGxldmVsIG9mIHRyYWNrIGFuZCBhbGJ1bSBnYWluIHZhbHVlcyIKK21zZ3N0ciAiIgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSIKK21zZ3N0ciAiIgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIgorbXNnc3RyICIiCisKK21zZ2lkICJpbWFnZSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgImVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCisKKyMuIFRSQU5TTEFUT1JTOiAncHJldmlldyBpbWFnZScgPSBpbWFnZSB0aGF0IHNob3dzIGEgcHJldmlldyBvZiB0aGUgZnVsbCBpbWFnZQorbXNnaWQgInByZXZpZXcgaW1hZ2UiCittc2dzdHIgIiIKKworbXNnaWQgInByZXZpZXcgaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiIgorCittc2dpZCAiYXR0YWNobWVudCIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgImVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCisKK21zZ2lkICJiZWF0cyBwZXIgbWludXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKK21zZ3N0ciAiIgorCittc2dpZCAia2V5d29yZHMiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKK21zZ3N0ciAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBuYW1lIgorbXNnc3RyICJsb2NhdGlvbiIKKworbXNnaWQgIiIKKyJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgorInByb2R1Y2VkIgorbXNnc3RyICIiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCisic291dGhlcm4gbGF0aXR1ZGVzKSIKK21zZ3N0ciAiIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorImdlbyBsb25naXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgcHJpbWUgbWVyaWRpYW4gaW4gR3JlZW53aWNoL1VLLCAgIgorIm5lZ2F0aXZlIHZhbHVlcyBmb3Igd2VzdGVybiBsb25naXR1ZGVzKSIKK21zZ3N0ciAiIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCisiYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBjb3VudHJ5IgorbXNnc3RyICJsb2NhdGlvbiIKKworbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCittc2dzdHIgImxvY2F0aW9uIgorCittc2dpZCAiY2l0eSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gc3VibG9jYXRpb24iCittc2dzdHIgImxvY2F0aW9uIgorCittc2dpZCAiIgorImEgbG9jYXRpb24gd2hpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgorInRoZSBuZWlnaGJvcmhvb2QpIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIGhvcml6b250YWwgZXJyb3IiCittc2dzdHIgImxvY2F0aW9uIgorCittc2dpZCAiZXhwZWN0ZWQgZXJyb3Igb2YgdGhlIGhvcml6b250YWwgcG9zaXRpb25pbmcgbWVhc3VyZXMgKGluIG1ldGVycykiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgc3BlZWQiCittc2dzdHIgImxvY2F0aW9uIgorCittc2dpZCAiIgorIm1vdmVtZW50IHNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgaW4gbS9zIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKK21zZ3N0ciAibG9jYXRpb24iCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgorIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKKyJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCittc2dzdHIgImxvY2F0aW9uIgorCittc2dpZCAiIgorImluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcgIGEgbWVkaWEuICIKKyJJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50ICByZXByZXNlbnRhdGlvbiwgMCBtZWFucyB0aGUgIgorImdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZScgaGVyZQorbXNnaWQgInNob3cgbmFtZSIKK21zZ3N0ciAiIgorCittc2dpZCAiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogJ3Nob3cgc29ydG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lIGFzIHVzZWQgZm9yIHNvcnRpbmcgcHVycG9zZXMnIGhlcmUKK21zZ2lkICJzaG93IHNvcnRuYW1lIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJlcGlzb2RlIG51bWJlciIKK21zZ3N0ciAiZGlzYyBudW1iZXIiCisKK21zZ2lkICJUaGUgZXBpc29kZSBudW1iZXIgaW4gdGhlIHNlYXNvbiB0aGUgbWVkaWEgaXMgcGFydCBvZiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgInNlYXNvbiBudW1iZXIiCittc2dzdHIgImRpc2MgbnVtYmVyIgorCittc2dpZCAiVGhlIHNlYXNvbiBudW1iZXIgb2YgdGhlIHNob3cgdGhlIG1lZGlhIGlzIHBhcnQgb2YiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJseXJpY3MiCittc2dzdHIgImxpY2VuY2UiCisKK21zZ2lkICJUaGUgbHlyaWNzIG9mIHRoZSBtZWRpYSwgY29tbW9ubHkgdXNlZCBmb3Igc29uZ3MiCittc2dzdHIgIiIKKworbXNnaWQgImNvbXBvc2VyIHNvcnRuYW1lIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIgorCittc2dpZCAiZ3JvdXBpbmciCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJHcm91cHMgcmVsYXRlZCBtZWRpYSB0aGF0IHNwYW5zIG11bHRpcGxlIHRyYWNrcywgbGlrZSB0aGUgZGlmZmVyZW50IHBpZWNlcyAiCisib2YgYSBjb25jZXJ0by4gSXQgaXMgYSBoaWdoZXIgbGV2ZWwgdGhhbiBhIHRyYWNrLCBidXQgbG93ZXIgdGhhbiBhbiBhbGJ1bSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgInVzZXIgcmF0aW5nIgorbXNnc3RyICJkdXJhdGlvbiIKKworbXNnaWQgIiIKKyJSYXRpbmcgYXR0cmlidXRlZCBieSBhIHVzZXIuIFRoZSBoaWdoZXIgdGhlIHJhbmssIHRoZSBtb3JlIHRoZSB1c2VyIGxpa2VzICIKKyJ0aGlzIG1lZGlhIgorbXNnc3RyICIiCisKK21zZ2lkICJkZXZpY2UgbWFudWZhY3R1cmVyIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiTWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKK21zZ3N0ciAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKKworbXNnaWQgImRldmljZSBtb2RlbCIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKK21zZ3N0ciAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKKworIywgZnV6enkKK21zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgorbXNnc3RyICJsb2NhdGlvbiIKKworIywgZnV6enkKK21zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCittc2dzdHIgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCisKK21zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgorbXNnc3RyICIiCisKK21zZ2lkICJBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIG1lZGlhIgorbXNnc3RyICIiCisKK21zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKK21zZ3N0ciAiIgorCittc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgorbXNnc3RyICIiCisKK21zZ2lkICIsICIKK21zZ3N0ciAiLCAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQWRkaXRpb25hbCBkZWJ1ZyBpbmZvOlxuIgorIiVzXG4iCittc2dzdHIgIiIKKyJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCisiJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJzcGVjaWZpZWQgZW1wdHkgYmluIFwiJXNcIiwgbm90IGFsbG93ZWQiCittc2dzdHIgInNwZWNpZmllZCBlbXB0eSBiaW4gXCIlc1wiLCBub3QgYWxsb3dlZCIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBiaW4gXCIlc1wiLCBza2lwcGluZyIKK21zZ3N0ciAibm8gYmluIFwiJXNcIiwgc2tpcHBpbmciCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICJubyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgorbXNnc3RyICJjb3VsZCBub3Qgc2V0IHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiB0byBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxpbmsgJXMgdG8gJXMiCittc2dzdHIgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICJubyBlbGVtZW50IFwiJXNcIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCittc2dzdHIgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIKK21zZ3N0ciAibGluayB3aXRob3V0IHNvdXJjZSBlbGVtZW50IgorCittc2dpZCAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKK21zZ3N0ciAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCB0byBsaW5rIFVSSSBcIiVzXCIgdG8iCittc2dzdHIgIm5vIGVsZW1lbnQgdG8gbGluayBVUkkgXCIlc1wiIHRvIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAibm8gc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAiY291bGQgbm90IGxpbmsgc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorCittc2dpZCAiZW1wdHkgcGlwZWxpbmUgbm90IGFsbG93ZWQiCittc2dzdHIgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgorCittc2dpZCAiSW50ZXJuYWwgY2xvY2sgZXJyb3IuIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgorbXNnc3RyICIiCisKK21zZ2lkICJBIGxvdCBvZiBidWZmZXJzIGFyZSBiZWluZyBkcm9wcGVkLiIKK21zZ3N0ciAiIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IHByb2JsZW0uIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCittc2dzdHIgIiIKKworbXNnaWQgIkZpbHRlciBjYXBzIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCisicHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKK21zZ3N0ciAiIgorCittc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3Igd3JpdGluZy4iCittc2dzdHIgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHdyaXRpbmcuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNsb3NpbmcgZmlsZSBcIiVzXCIuIgorbXNnc3RyICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Vla2luZyBpbiBmaWxlIFwiJXNcIi4iCittc2dzdHIgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgorbXNnc3RyICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKKworbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHJlYWRpbmcuIgorbXNnc3RyICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCittc2dzdHIgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCittc2dzdHIgIkNvdWxkIG5vdCBnZXQvc2V0IHNldHRpbmdzIGZyb20vb24gcmVzb3VyY2UuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIlwiJXNcIiBpcyBhIGRpcmVjdG9yeS4iCittc2dzdHIgIiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmlsZSBcIiVzXCIgaXMgYSBzb2NrZXQuIgorbXNnc3RyICJGaWxlIFwiJXNcIiBpc24ndCBhIHJlZ3VsYXIgZmlsZS4iCisKK21zZ2lkICJGYWlsZWQgYWZ0ZXIgaXRlcmF0aW9ucyBhcyByZXF1ZXN0ZWQuIgorbXNnc3RyICJGYWlsZWQgYWZ0ZXIgaXRlcmF0aW9ucyBhcyByZXF1ZXN0ZWQuIgorCittc2dpZCAiTm8gVGVtcCBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIgorbXNnc3RyICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKKworIywgZnV6enkKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIgorbXNnc3RyICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKKworbXNnaWQgImNhcHMiCittc2dzdHIgImNhcHMiCisKK21zZ2lkICJkZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtIgorbXNnc3RyICJkZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtIgorCittc2dpZCAibWluaW11bSIKK21zZ3N0ciAibWluaW11bSIKKworbXNnaWQgIm1heGltdW0iCittc2dzdHIgIm1heGltdW0iCisKK21zZ2lkICJmb3JjZSBjYXBzIgorbXNnc3RyICIiCisKK21zZ2lkICJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKK21zZ3N0ciAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiCisKK21zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJyZWFkYWJsZSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIndyaXRhYmxlIgorbXNnc3RyICJ0aXRsZSIKKworbXNnaWQgImNvbnRyb2xsYWJsZSIKK21zZ3N0ciAiIgorCittc2dpZCAiY2hhbmdlYWJsZSBpbiBOVUxMLCBSRUFEWSwgUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUiCittc2dzdHIgIiIKKworbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiCittc2dzdHIgIiIKKworbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMIG9yIFJFQURZIHN0YXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJCbGFja2xpc3RlZCBmaWxlczoiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJUb3RhbCBjb3VudDogIgorbXNnc3RyICJ0cmFjayBjb3VudCIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgorbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgcGx1Z2luIgorbXNnaWRfcGx1cmFsICIlZCBwbHVnaW5zIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBibGFja2xpc3QgZW50cnkiCittc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdCBlbnRyaWVzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBmZWF0dXJlIgorbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyMsIGZ1enp5Cittc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgorbXNnc3RyICJubyBlbGVtZW50IFwiJXNcIiIKKworbXNnaWQgIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgorInBsdWdpbnMgcHJvdmlkZS5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKKyJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgorbXNnc3RyICIiCisKK21zZ2lkICJMaXN0IHRoZSBwbHVnaW4gY29udGVudHMiCittc2dzdHIgIiIKKworbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmlsZTogJXNcbiIKK21zZ3N0ciAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIGVsZW1lbnQgb3IgcGx1Z2luICclcydcbiIKK21zZ3N0ciAibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCisKK21zZ2lkICJJbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSAoJXMpOiAiCittc2dzdHIgIiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIgorbXNnc3RyICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCittc2dzdHIgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgcGFkIFwiJXM6JXNcIi5cbiIKK21zZ3N0ciAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgorbXNnc3RyICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgorCittc2dpZCAiRk9VTkQgVEFHXG4iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSU5GTzpcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKKworbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJidWZmZXJpbmcuLi4iCittc2dzdHIgIiIKKworbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcnJ1cHQ6IFN0b3BwaW5nIHBpcGVsaW5lIC4uLlxuIgorbXNnc3RyICIiCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKK21zZ3N0ciAibm8gZWxlbWVudCBcIiVzXCIiCisKK21zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCittc2dzdHIgIk91dHB1dCB0YWdzIChhbHNvIGtub3duIGFzIG1ldGFkYXRhKSIKKworbXNnaWQgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCittc2dzdHIgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCisKKyMsIGZ1enp5Cittc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKKworbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKK21zZ3N0ciAiIgorCittc2dpZCAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKK21zZ3N0ciAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKKworbXNnaWQgIlRZUEUxLFRZUEUyLC4uLiIKK21zZ3N0ciAiVFlQRTEsVFlQRTIsLi4uIgorCittc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgorbXNnc3RyICJEbyBub3QgaW5zdGFsbCBhIGZhdWx0IGhhbmRsZXIiCisKK21zZ2lkICJQcmludCBhbGxvYyB0cmFjZSAoaWYgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUpIgorbXNnc3RyICJQcmludCBhbGxvYyB0cmFjZSAoaWYgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUpIgorCittc2dpZCAiRm9yY2UgRU9TIG9uIHNvdXJjZXMgYmVmb3JlIHNodXR0aW5nIHRoZSBwaXBlbGluZSBkb3duIgorbXNnc3RyICIiCisKK21zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKK21zZ3N0ciAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZDogJXMuXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlxuIgorbXNnc3RyICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGVycm9uZW91cyBwaXBlbGluZTogJXNcbiIKK21zZ3N0ciAiV0FSTklORzogZXJyb25lb3VzIHBpcGVsaW5lOiAlc1xuIgorCittc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgorbXNnc3RyICJFUlJPUjogdGhlICdwaXBlbGluZScgZWxlbWVudCB3YXNuJ3QgZm91bmQuXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCittc2dzdHIgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIGxpdmUgYW5kIGRvZXMgbm90IG5lZWQgUFJFUk9MTCAuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTElORyAuLi5cbiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcHJlcm9sbC5cbiIKK21zZ3N0ciAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKK21zZ3N0ciAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIgorCittc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gRm9yY2luZyBFT1Mgb24gdGhlIHBpcGVsaW5lXG4iCittc2dzdHIgIiIKKworbXNnaWQgIldhaXRpbmcgZm9yIEVPUy4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJFT1MgcmVjZWl2ZWQgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJBbiBlcnJvciBoYXBwZW5lZCB3aGlsZSB3YWl0aW5nIGZvciBFT1NcbiIKK21zZ3N0ciAiIgorCittc2dpZCAiRXhlY3V0aW9uIGVuZGVkIGFmdGVyICUiCittc2dzdHIgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiRnJlZWluZyBwaXBlbGluZSAuLi5cbiIKK21zZ3N0ciAiUlVOTklORyBwaXBlbGluZSAuLi5cbiIKKworI34gbXNnaWQgIlVzYWdlOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLiBdXG4iCisjfiBtc2dzdHIgIlVzYWdlOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLiBdXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogcGFyc2Ugb2YgeG1sIGZpbGUgJyVzJyBmYWlsZWQuXG4iCisjfiBtc2dzdHIgIkVSUk9SOiBwYXJzaW5nIG9mIHhtbCBmaWxlICclcycgZmFpbGVkLlxuIgorCisjfiBtc2dpZCAiRVJST1I6IG5vIHRvcGxldmVsIHBpcGVsaW5lIGVsZW1lbnQgaW4gZmlsZSAnJXMnLlxuIgorI34gbXNnc3RyICJFUlJPUjogbm8gdG9wbGV2ZWwgcGlwZWxpbmUgZWxlbWVudCBpbiBmaWxlICclcycuXG4iCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiV0FSTklORzogb25seSBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLlxuIgorI34gbXNnc3RyICJXQVJOSU5HOiBvbmx5IG9uZSB0b3BsZXZlbCBlbGVtZW50IGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuIgorCisjfiBtc2dpZCAiRVJST1I6IGNvdWxkIG5vdCBwYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgJWQ6ICVzLlxuIgorI34gbXNnc3RyICJFUlJPUjogY291bGQgbm90IHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAlZDogJXMuXG4iCisKKyN+IG1zZ2lkICJXQVJOSU5HOiBlbGVtZW50IG5hbWVkICclcycgbm90IGZvdW5kLlxuIgorI34gbXNnc3RyICJXQVJOSU5HOiBlbGVtZW50IG5hbWVkICclcycgbm90IGZvdW5kLlxuIgorCisjfiBtc2dpZCAiU2F2ZSB4bWwgcmVwcmVzZW50YXRpb24gb2YgcGlwZWxpbmUgdG8gRklMRSBhbmQgZXhpdCIKKyN+IG1zZ3N0ciAiU2F2ZSB4bWwgcmVwcmVzZW50YXRpb24gb2YgcGlwZWxpbmUgdG8gRklMRSBhbmQgZXhpdCIKKworI34gbXNnaWQgIkZJTEUiCisjfiBtc2dzdHIgIkZJTEUiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiRG8gbm90IGluc3RhbGwgc2lnbmFsIGhhbmRsZXJzIGZvciBTSUdVU1IxIGFuZCBTSUdVU1IyIgorI34gbXNnc3RyICJEbyBub3QgaW5zdGFsbCBhIGZhdWx0IGhhbmRsZXIiCisKKyN+IG1zZ2lkICJEaXNhYmxlIGFjY2VsZXJhdGVkIENQVSBpbnN0cnVjdGlvbnMiCisjfiBtc2dzdHIgIkRpc2FibGUgYWNjZWxlcmF0ZWQgQ1BVIGluc3RydWN0aW9ucyIKKworI34gbXNnaWQgIlNDSEVEVUxFUiIKKyN+IG1zZ3N0ciAiU0NIRURVTEVSIgorCisjfiBtc2dpZCAiUmVnaXN0cnkgdG8gdXNlIgorI34gbXNnc3RyICJSZWdpc3RyeSB0byB1c2UiCisKKyN+IG1zZ2lkICJSRUdJU1RSWSIKKyN+IG1zZ3N0ciAiUkVHSVNUUlkiCisKKyN+IG1zZ2lkICJwYXRoIGxpc3QgZm9yIGxvYWRpbmcgcGx1Z2lucyAoc2VwYXJhdGVkIGJ5ICclcycpIgorI34gbXNnc3RyICJwYXRoIGxpc3QgZm9yIGxvYWRpbmcgcGx1Z2lucyAoc2VwYXJhdGVkIGJ5ICclcycpIgorCisjfiBtc2dpZCAiU2NoZWR1bGVyIHRvIHVzZSAoZGVmYXVsdCBpcyAnJXMnKSIKKyN+IG1zZ3N0ciAiU2NoZWR1bGVyIHRvIHVzZSAoZGVmYXVsdCBpcyAnJXMnKSIKKworI34gbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZC4gIEZpbGUgYSBidWcuIgorI34gbXNnc3RyICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQuICBGaWxlIGEgYnVnLiIKKworI34gbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2NoZWR1bGVyIHByb2JsZW0uICBGaWxlIGEgYnVnLiIKKyN+IG1zZ3N0ciAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzY2hlZHVsZXIgcHJvYmxlbS4gIEZpbGUgYSBidWcuIgorCisjfiBtc2dpZCAib3JpZ2luYWwgbG9jYXRpb24gb2YgZmlsZSBhcyBhIFVSSSIKKyN+IG1zZ3N0ciAib3JpZ2luYWwgbG9jYXRpb24gb2YgZmlsZSBhcyBhIFVSSSIKKworI34gbXNnaWQgIlRoZXJlIGlzIG5vIGVsZW1lbnQgcHJlc2VudCB0byBoYW5kbGUgdGhlIHN0cmVhbSdzIG1pbWUgdHlwZSAlcy4iCisjfiBtc2dzdHIgIlRoZXJlIGlzIG5vIGVsZW1lbnQgcHJlc2VudCB0byBoYW5kbGUgdGhlIHN0cmVhbSdzIG1pbWUgdHlwZSAlcy4iCisKKyN+IG1zZ2lkICIiCisjfiAiY291bGQgbm90IGNvbnZlcnQgXCIlc1wiIHNvIHRoYXQgaXQgZml0cyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCisjfiBtc2dzdHIgIiIKKyN+ICJjb3VsZCBub3QgY29udmVydCBcIiVzXCIgc28gdGhhdCBpdCBmaXRzIHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiIKKworI34gbXNnaWQgIlNob3cgcGx1Z2luIGRldGFpbHMiCisjfiBtc2dzdHIgIlNob3cgcGx1Z2luIGRldGFpbHMiCisKKyN+IG1zZ2lkICJTaG93IHNjaGVkdWxlciBkZXRhaWxzIgorI34gbXNnc3RyICJTaG93IHNjaGVkdWxlciBkZXRhaWxzIgorCisjfiBtc2dpZCAiIGl0ZXJhdGlvbnMgKHN1bSAlIgorI34gbXNnc3RyICIgaXRlcmF0aW9ucyAoc3VtICUiCisKKyN+IG1zZ2lkICIgbnMsIGF2ZXJhZ2UgJSIKKyN+IG1zZ3N0ciAiIG5zLCBhdmVyYWdlICUiCisKKyN+IG1zZ2lkICIgbnMsIG1pbiAlIgorI34gbXNnc3RyICIgbnMsIG1pbiAlIgorCisjfiBtc2dpZCAiIG5zLCBtYXggJSIKKyN+IG1zZ3N0ciAiIG5zLCBtYXggJSIKKworI34gbXNnaWQgIiBucykuXG4iCisjfiBtc2dzdHIgIiBucykuXG4iCisKKyN+IG1zZ2lkICJOdW1iZXIgb2YgdGltZXMgdG8gaXRlcmF0ZSBwaXBlbGluZSIKKyN+IG1zZ3N0ciAiTnVtYmVyIG9mIHRpbWVzIHRvIGl0ZXJhdGUgcGlwZWxpbmUiCisKKyN+IG1zZ2lkICIgICAgICAgICBUcnlpbmcgdG8gcnVuIGFueXdheS5cbiIKKyN+IG1zZ3N0ciAiICAgICAgICAgVHJ5aW5nIHRvIHJ1biBhbnl3YXkuXG4iCisKKyN+IG1zZ2lkICInKSIKKyN+IG1zZ3N0ciAiJykiCisKKyN+IG1zZ2lkICInIGlzIHRoZSBkZWZhdWx0KSIKKyN+IG1zZ3N0ciAiJyBpcyB0aGUgZGVmYXVsdCkiCmRpZmYgLS1naXQgYS9wby9lcy5nbW8gYi9wby9lcy5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU3ZDUzYgotLS0gL2Rldi9udWxsCisrKyBiL3BvL2VzLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9lcy5wbyBiL3BvL2VzLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZmRlODkKLS0tIC9kZXYvbnVsbAorKysgYi9wby9lcy5wbwpAQCAtMCwwICsxLDEyNjYgQEAKKyMgdHJhbnNsYXRpb24gb2YgZ3N0cmVhbWVyLTAuMTAuMzAuMy5wbyB0byBFc3Bhw7FvbAorIyBzcGFuaXNoIHRyYW5zbGF0aW9uIGZvciBnc3RyZWFtZXIKKyMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyMgSm9yZ2UgR29uesOhbGV6IEdvbnrDoWxleiA8YWxvcmllbEBnbWFpbC5jb20+LCAyMDA5LCAyMDEwLgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDAuMTAuMzAuM1xuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTA5LTI5IDE0OjU1KzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTExLTAxIDE4OjExKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEpvcmdlIEdvbnrDoWxleiBHb256w6FsZXogPGFsb3JpZWxAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IFNwYW5pc2ggPGVzQGxpLm9yZz5cbiIKKyJMYW5ndWFnZTogZXNcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKworbXNnaWQgIlByaW50IHRoZSBHU3RyZWFtZXIgdmVyc2lvbiIKK21zZ3N0ciAiSW1wcmltaXIgbGEgdmVyc2nDs24gZGUgR1N0cmVhbWVyIgorCittc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCittc2dzdHIgIkhhY2VyIHRvZGFzIGxhcyBhZHZlcnRlbmNpYXMgZmF0YWxlcyIKKworbXNnaWQgIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IgorbXNnc3RyICJJbXByaW1pciBjYXRlZ29yw61hcyBkZSBkZXB1cmFjacOzbiBkaXNwb25pYmxlcyB5IHNhbGlyIgorCittc2dpZCAiIgorIkRlZmF1bHQgZGVidWcgbGV2ZWwgZnJvbSAxIChvbmx5IGVycm9yKSB0byA1IChhbnl0aGluZykgb3IgMCBmb3Igbm8gb3V0cHV0IgorbXNnc3RyICIiCisiTml2ZWwgZGUgZGVwdXJhY2nDs24gcHJlZGV0ZXJtaW5hZG8gZGVzZGUgMSAoc8OzbG8gZXJyb3IpIGhhc3RhIDUgKHRvZG8pIG8gMCAiCisic2luIHNhbGlkYSIKKworbXNnaWQgIkxFVkVMIgorbXNnc3RyICJOSVZFTCIKKworbXNnaWQgIiIKKyJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yICIKKyJ0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCittc2dzdHIgIiIKKyJMaXN0YSBkZSBwYXJlcyBjYXRlZ29yw61hX25vbWJyZTpuaXZlbCBzZXBhcmFkb3MgcG9yIGNvbWFzIHBhcmEgZXN0YWJsZWNlciAiCisibml2ZWxlcyBlc3BlY8OtZmljb3MgcGFyYSBsYXMgY2F0ZWdvcsOtYXMgaW5kaXZpZHVhbGVzLiBFamVtcGxvOiAiCisiR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgorCittc2dpZCAiTElTVCIKK21zZ3N0ciAiTElTVEEiCisKK21zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKK21zZ3N0ciAiRGVzYWN0aXZhciBsYSBjb2xvcmFjacOzbiBkZSBsYSBzYWxpZGEgZGVwdXJhZGEiCisKK21zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKK21zZ3N0ciAiRGVzYWN0aXZhciBkZXB1cmFjacOzbiIKKworbXNnaWQgIkVuYWJsZSB2ZXJib3NlIHBsdWdpbiBsb2FkaW5nIGRpYWdub3N0aWNzIgorbXNnc3RyICJBY3RpdmFyIGxhIHNhbGlkYSBkZXRhbGxhZGEgZGVsIGRpYWduw7NzdGljbyBkZSBjYXJnYSBkZSBjb21wbGVtZW50b3MiCisKK21zZ2lkICJDb2xvbi1zZXBhcmF0ZWQgcGF0aHMgY29udGFpbmluZyBwbHVnaW5zIgorbXNnc3RyICJSdXRhcyBzZXBhcmFkYXMgcG9yIHB1bnRvIHkgY29tYSBjb250ZW5pZW5kbyBsb3MgY29tcGxlbWVudG9zIgorCittc2dpZCAiUEFUSFMiCittc2dzdHIgIlJVVEFTIgorCittc2dpZCAiIgorIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgorImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKK21zZ3N0ciAiIgorIkxpc3RhIGRlIGNvbXBsZW1lbnRvcyBwYXJhIHByZWdhcmNhciBzZXBhcmFkb3MgcG9yIGNvbWFzIGFkZW3DoXMgZGUgbGEgbGlzdGEgIgorImFsbWFjZW5hZGEgZW4gbGEgdmFyaWFibGUgZGUgZW50b3JubyBHU1RfUExVR0lOX1BBVEgiCisKK21zZ2lkICJQTFVHSU5TIgorbXNnc3RyICJDT01QTEVNRU5UT1MiCisKK21zZ2lkICJEaXNhYmxlIHRyYXBwaW5nIG9mIHNlZ21lbnRhdGlvbiBmYXVsdHMgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIgorbXNnc3RyICIiCisiRGVzYWN0aXZhciBsYSBjYXB0dXJhIGRlIGZhbGxvcyBkZSBzZWdtZW50YWNpw7NuIGR1cmFudGUgbGEgY2FyZ2EgZGUgIgorImNvbXBsZW1lbnRvcyIKKworbXNnaWQgIkRpc2FibGUgdXBkYXRpbmcgdGhlIHJlZ2lzdHJ5IgorbXNnc3RyICJEZXNhY3RpdmFyIGxhIGFjdHVhbGl6YWNpw7NuIGRlbCByZWdpc3RybyIKKworbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIiIKKyJEZXNhY3RpdmFyIGVsIGxhbnphbWllbnRvIGRlIHVuIHByb2Nlc28gZGUgYXl1ZGEgYWwgZXNjYW5lYXIgZWwgcmVnaXN0cm8iCisKK21zZ2lkICJHU3RyZWFtZXIgT3B0aW9ucyIKK21zZ3N0ciAiT3BjaW9uZXMgZGUgR1N0cmVhbWVyIgorCittc2dpZCAiU2hvdyBHU3RyZWFtZXIgT3B0aW9ucyIKK21zZ3N0ciAiTW9zdHJhciBsYXMgb3BjaW9uZXMgZGUgR1N0cmVhbWVyIgorCittc2dpZCAiVW5rbm93biBvcHRpb24iCittc2dzdHIgIk9wY2nDs24gZGVzY29ub2NpZGEiCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIGNvcmUgbGlicmFyeSBlcnJvci4iCittc2dzdHIgIkdTdHJlYW1lciBlbmNvbnRyw7MgdW4gZXJyb3IgZ2VuZXJhbCBlbiBlbCBuw7pjbGVvIGRlIGxhIGJpYmxpb3RlY2EuIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyBlcnJvci4iCittc2dzdHIgIiIKKyJMb3MgZGVzYXJyb2xsYWRvcmVzIGRlIEdTdHJlYW1lciBmdWVyb24gZGVtYXNpYWRvIHZhZ29zIHBhcmEgYcOxYWRpciB1biAiCisiY8OzZGlnbyBkZSBlcnJvciBhIGVzdGUgZXJyb3IuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjb2RlIG5vdCBpbXBsZW1lbnRlZC4iCittc2dzdHIgIkVycm9yIGludGVybm8gZGUgR1N0cmVhbWVyOiBjw7NkaWdvIG5vIGltcGxlbWVudGFkbyIKKworbXNnaWQgIiIKKyJHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQgYW5kIHNvbWUgZWxlbWVudCBmYWlsZWQgdG8gcG9zdCBhICIKKyJwcm9wZXIgZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLiIKK21zZ3N0ciAiIgorIkVycm9yIGRlIEdTdHJlYW1lcjogZmFsbMOzIGVsIGNhbWJpbyBkZSBlc3RhZG8geSBhbGfDum4gZWxlbWVudG8gZmFsbMOzIGFsICIKKyJwdWJsaWNhciBlbCBlcnJvciBkZSBtZW5zYWplIGNvcnJlc3BvbmRpZW50ZSBjb24gZWwgbW90aXZvIGRlbCBmYWxsby4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHBhZCBwcm9ibGVtLiIKK21zZ3N0ciAiICIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGhyZWFkIHByb2JsZW0uIgorbXNnc3RyICJFcnJvciBpbnRlcm5vIGRlIEdTdHJlYW1lcjogcHJvYmxlbWEgY29uIGxhcyBoZWJyYXMuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBuZWdvdGlhdGlvbiBwcm9ibGVtLiIKK21zZ3N0ciAiRXJyb3IgaW50ZXJubyBkZSBHU3RyZWFtZXI6IHByb2JsZW1hIGNvbiBsYSBuZWdvY2lhY2nDs24uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBldmVudCBwcm9ibGVtLiIKK21zZ3N0ciAiRXJyb3IgaW50ZXJubyBkZSBHU3RyZWFtZXI6IHByb2JsZW1hIGNvbiBsb3MgZXZlbnRvcy4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4iCittc2dzdHIgIkVycm9yIGludGVybm8gZGUgR1N0cmVhbWVyOiBwcm9ibGVtYSBjb24gbGEgYsO6c3F1ZWRhLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2FwcyBwcm9ibGVtLiIKK21zZ3N0ciAiRXJyb3IgaW50ZXJubyBkZSBHU3RyZWFtZXI6IHByb2JsZW1hIGNvbiBsYXMgY2FwYWNpZGFkZXMuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4iCittc2dzdHIgIkVycm9yIGludGVybm8gZGUgR1N0cmVhbWVyOiBwcm9ibGVtYSBjb24gbGFzIGV0aXF1ZXRhcy4iCisKK21zZ2lkICJZb3VyIEdTdHJlYW1lciBpbnN0YWxsYXRpb24gaXMgbWlzc2luZyBhIHBsdWctaW4uIgorbXNnc3RyICJBIGxhIGluc3RhbGFjacOzbiBkZSBHU3RyZWFtZXIgbGUgZmFsdGEgdW4gY29tcGxlbWVudG8uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKK21zZ3N0ciAiRXJyb3IgaW50ZXJubyBkZSBHU3RyZWFtZXI6IHByb2JsZW1hIGNvbiBlbCByZWxvai4iCisKK21zZ2lkICIiCisiVGhpcyBhcHBsaWNhdGlvbiBpcyB0cnlpbmcgdG8gdXNlIEdTdHJlYW1lciBmdW5jdGlvbmFsaXR5IHRoYXQgaGFzIGJlZW4gIgorImRpc2FibGVkLiIKK21zZ3N0ciAiIgorIkVzdGEgYXBsaWNhY2nDs24gZXN0w6EgdHJhdGFuZG8gZGUgdXNhciB1bmEgZnVuY2lvbmFsaWRhZCBkZSBHU3RyZWFtZXIgcXVlIHNlICIKKyJoYSBkZXNoYWJpbGl0YWRvLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3VwcG9ydGluZyBsaWJyYXJ5IGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIGVuY29udHLDsyB1biBlcnJvciBkZSBzb3BvcnRlIGdlbmVyYWwgZW4gbGEgYmlibGlvdGVjYS4iCisKK21zZ2lkICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJObyBzZSBwdWRvIGluaWNpYWxpemFyIGxhIGJpYmxpb3RlY2EgZGUgc29wb3J0ZS4iCisKK21zZ2lkICJDb3VsZCBub3QgY2xvc2Ugc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiTm8gc2UgcHVkbyBjZXJyYXIgbGEgYmlibGlvdGVjYSBkZSBzb3BvcnRlLiIKKworbXNnaWQgIkNvdWxkIG5vdCBjb25maWd1cmUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiTm8gc2UgcHVkbyBjb25maWd1cmFyIGxhIGJpYmxpb3RlY2EgZGUgc29wb3J0ZS4iCisKK21zZ2lkICJFbmNvZGluZyBlcnJvci4iCittc2dzdHIgIkVycm9yIGRlIGNvZGlmaWNhY2nDs24uIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCByZXNvdXJjZSBlcnJvci4iCittc2dzdHIgIkdTdHJlYW1lciBlbmNvbnRyw7MgdW4gZXJyb3IgZ2VuZXJhbCBkZSByZWN1cnNvLiIKKworbXNnaWQgIlJlc291cmNlIG5vdCBmb3VuZC4iCittc2dzdHIgIlJlY3Vyc28gbm8gZW5jb250cmFkby4iCisKK21zZ2lkICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgorbXNnc3RyICJFbCByZWN1cnNvIGVzdMOhIG9jdXBhZG8gbyBubyBkaXNwb25pYmxlLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiTm8gc2UgcHVkbyBhYnJpciBlbCByZWN1cnNvIHBhcmEgc3UgbGVjdHVyYS4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCittc2dzdHIgIk5vIHNlIHB1ZG8gYWJyaXIgZWwgcmVjdXJzbyBwYXJhIHN1IGVzY3JpdHVyYS4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCittc2dzdHIgIk5vIHNlIHB1ZG8gYWJyaXIgZWwgcmVjdXJzbyBwYXJhIHN1IGxlY3R1cmEgeSBlc2NyaXR1cmEuIgorCittc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKK21zZ3N0ciAiTm8gc2UgcHVkbyBjZXJyYXIgZWwgcmVjdXJzby4iCisKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIHJlc291cmNlLiIKK21zZ3N0ciAiTm8gc2UgcHVkbyBsZWVyIGRlbCByZWN1cnNvLiIKKworbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iCittc2dzdHIgIk5vIHNlIHB1ZG8gZXNjcmliaXIgZW4gZWwgcmVjdXJzby4iCisKK21zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKK21zZ3N0ciAiTm8gc2UgcHVkbyByZWFsaXphciB1bmEgYsO6c3F1ZWRhIGVuIGVsIHJlY3Vyc28uIgorCittc2dpZCAiQ291bGQgbm90IHN5bmNocm9uaXplIG9uIHJlc291cmNlLiIKK21zZ3N0ciAiTm8gc2UgcHVkbyBzaW5jcm9uaXphciBlbCByZWN1cnNvLiIKKworbXNnaWQgIkNvdWxkIG5vdCBnZXQvc2V0IHNldHRpbmdzIGZyb20vb24gcmVzb3VyY2UuIgorbXNnc3RyICJObyBzZSBwdWRpZXJvbiBvYnRlbmVyL2VzdGFibGVjZXIgbG9zIGFqdXN0ZXMgZGUvZW4gZWwgcmVjdXJzby4iCisKK21zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCittc2dzdHIgIk5vIHF1ZWRhIGVzcGFjaW8gZGlzcG9uaWJsZSBlbiBlbCByZWN1cnNvLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIGVuY29udHLDsyB1biBlcnJvciBnZW5lcmFsIGRlIGZsdWpvLiIKKworbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKK21zZ3N0ciAiIgorIkVsIGVsZW1lbnRvIG5vIGltcGxlbWVudGEgdW4gbWFuZWphZG9yIGRlIGVzdGUgZmx1am8uIFBvciBmYXZvciwgcmVsbGVuZSB1biAiCisiaW5mb3JtZSBkZSBlcnJvci4iCisKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIHR5cGUgb2Ygc3RyZWFtLiIKK21zZ3N0ciAiTm8gc2UgcHVkbyBkZXRlcm1pbmFyIGVsIHRpcG8gZGUgZmx1am8uIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBvZiBhIGRpZmZlcmVudCB0eXBlIHRoYW4gaGFuZGxlZCBieSB0aGlzIGVsZW1lbnQuIgorbXNnc3RyICJFbCBmbHVqbyBlcyBkZSB1biB0aXBvIGRpZmVyZW50ZSBxdWUgZWwgbWFuZWphZG8gcG9yIGVzdGUgZWxlbWVudG8uIgorCittc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgorbXNnc3RyICJObyBoYXkgdW4gY8OzZGVjIGRpc3BvbmlibGUgcXVlIHB1ZWRhIG1hbmVqYXIgZWwgdGlwbyBkZWwgZmx1am8uIgorCittc2dpZCAiQ291bGQgbm90IGRlY29kZSBzdHJlYW0uIgorbXNnc3RyICJObyBzZSBwdWRvIGRlY29kaWZpY2FyIGVsIGZsdWpvLiIKKworbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKK21zZ3N0ciAiTm8gc2UgcHVkbyBjb2RpZmljYXIgZWwgZmx1am8uIgorCittc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIk5vIHNlIHB1ZG8gZGVtdWx0aXBsZXhhciBlbCBmbHVqby4iCisKK21zZ2lkICJDb3VsZCBub3QgbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIk5vIHNlIHB1ZG8gbXVsdGlwbGV4YXIgZWwgZmx1am8uIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiIKK21zZ3N0ciAiRWwgZmx1am8gZXN0w6EgZW4gZWwgZm9ybWF0byBpbmNvcnJlY3RvLiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBkZWNyeXB0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIgorbXNnc3RyICJFbCBmbHVqbyBlc3TDoSBjaWZyYWRvIHkgZWwgZGVzY2lmcmFkbyBubyBlc3TDoSBzb3BvcnRhZG8uIgorCittc2dpZCAiIgorIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKKyJiZWVuIHN1cHBsaWVkLiIKK21zZ3N0ciAiIgorIkVsIGZsdWpvIGVzdMOhIGNpZnJhZG8geSBubyBzZSBwdWVkZSBkZXNjaWZyYXIgcG9ycXVlIG5vIHNlIGhhIHByb3BvcmNpb25hZG8gIgorInVuYSBjbGF2ZSBhZGVjdWFkYS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzLiIKK21zZ3N0ciAiTm8gaGF5IHVuIG1lbnNhamUgZGUgZXJyb3IgcGFyYSBlbCBkb21pbmlvICVzLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMgYW5kIGNvZGUgJWQuIgorbXNnc3RyICJObyBoYXkgdW4gbWVuc2FqZSBkZSBlcnJvciBlc3TDoW5kYXIgcGFyYSBlbCBkb21pbmlvICVzIHkgY8OzZGlnbyAlZC4iCisKK21zZ2lkICJTZWxlY3RlZCBjbG9jayBjYW5ub3QgYmUgdXNlZCBpbiBwaXBlbGluZS4iCittc2dzdHIgIkVsIHJlbG9qIHNlbGVjY2lvbmFkbyBubyBzZSBwdWVkZSB1c2FyIGVuIGxhIHNlZ21lbnRhY2nDs24uIgorCittc2dpZCAidGl0bGUiCittc2dzdHIgInTDrXR1bG8iCisKK21zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIgorbXNnc3RyICJ0w610dWxvIHVzYWRvIGNvbcO6bm1lbnRlIgorCittc2dpZCAidGl0bGUgc29ydG5hbWUiCittc2dzdHIgIm5vbWJyZSBkZSBvcmRlbmFjacOzbiBkZWwgdMOtdHVsbyIKKworbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgInTDrXR1bG8gdXNhZG8gY29tw7pubWVudGUgcGFyYSBwcm9ww7NzaXRvcyBkZSBvcmRlbmFtaWVudG8iCisKK21zZ2lkICJhcnRpc3QiCittc2dzdHIgImFydGlzdGEiCisKK21zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmciCittc2dzdHIgInBlcnNvbmEocykgcmVzcG9uc2FibGVzIGRlIGxhIGdyYWJhY2nDs24iCisKK21zZ2lkICJhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgIm5vbWJyZSBkZSBvcmRlbmFjacOzbiBkZWwgYXJ0aXN0YSIKKworbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiIgorInBlcnNvbmEocykgcmVzcG9uc2FibGUocykgZGUgbGEgZ3JhYmFjacOzbiBwYXJhIHByb3DDs3NpdG9zIGRlIG9yZGVuYW1pZW50byIKKworbXNnaWQgImFsYnVtIgorbXNnc3RyICLDoWxidW0iCisKK21zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSIKK21zZ3N0ciAiZWwgw6FsYnVtIHF1ZSBjb250aWVuZSBlc3RvcyBkYXRvcyIKKworbXNnaWQgImFsYnVtIHNvcnRuYW1lIgorbXNnc3RyICJub21icmUgZGUgb3JkZW5hY2nDs24gZGVsIMOhbGJ1bSIKKworbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJlbCDDoWxidW0gcXVlIGNvbnRpZW5lIGVzdG9zIGRhdG9zIHBhcmEgcHJvcMOzc2l0b3MgZGUgb3JkZW5hbWllbnRvIgorCittc2dpZCAiYWxidW0gYXJ0aXN0IgorbXNnc3RyICJhcnRpc3RhIGRlbCDDoWxidW0iCisKK21zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQiCittc2dzdHIgIkVsIGFydGlzdGEgZGVsIMOhbGJ1bSBlbnRlcm8sIGNvbW8gc2UgZGViZXLDrWEgbW9zdHJhciIKKworbXNnaWQgImFsYnVtIGFydGlzdCBzb3J0bmFtZSIKK21zZ3N0ciAibm9tYnJlIGRlIG9yZGVuYWNpw7NuIGRlbCBhcnRpc3RhIGRlbCDDoWxidW0iCisKK21zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiCittc2dzdHIgIkVsIGFydGlzdGEgZGVsIMOhbGJ1bSBlbnRlcm8sIGNvbW8gc2UgZGViZXLDrWEgb3JkZW5hciIKKworbXNnaWQgImRhdGUiCittc2dzdHIgImZlY2hhIgorCittc2dpZCAiZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHRGF0ZSBzdHJ1Y3R1cmUpIgorbXNnc3RyICJmZWNoYSBlbiBsYSBxdWUgc2UgY3JlYXJvbiBsb3MgZGF0b3MgKGNvbW8gZXN0cnVjdHVyYSBHRGF0ZSkiCisKK21zZ2lkICJkYXRldGltZSIKK21zZ3N0ciAiZmVjaGEgeSBob3JhIgorCittc2dpZCAiZGF0ZSBhbmQgdGltZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHc3REYXRlVGltZSBzdHJ1Y3R1cmUpIgorbXNnc3RyICIiCisiZmVjaGEgeSBob3JhIGVuIGxhIHF1ZSBzZSBjcmVhcm9uIGxvcyBkYXRvcyAoY29tbyBlc3RydWN0dXJhIEdzdERhdGVUaW1lKSIKKworbXNnaWQgImdlbnJlIgorbXNnc3RyICJnw6luZXJvIgorCittc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCittc2dzdHIgImfDqW5lcm8gYWwgcXVlIHBlcnRlbmVjZW4gZXN0b3MgZGF0b3MiCisKK21zZ2lkICJjb21tZW50IgorbXNnc3RyICJjb21lbnRhcmlvIgorCittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCittc2dzdHIgImNvbWVudGFyaW8gZGUgdGV4dG8gc29icmUgbG9zIGRhdG9zIgorCittc2dpZCAiZXh0ZW5kZWQgY29tbWVudCIKK21zZ3N0ciAiY29tZW50YXJpbyBleHRlbmRpZG8iCisKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCittc2dzdHIgIiIKKyJ0ZXh0byBsaWJyZSBjb21lbnRhbmRvIGxvcyBkYXRvcyBjb21vIGtleT12YWxvciBvIGtleVtlc109Zm9ybXVsYXJpbyBkZSAiCisiY29tZW50YXJpbyIKKworbXNnaWQgInRyYWNrIG51bWJlciIKK21zZ3N0ciAibsO6bWVybyBkZSBwaXN0YSIKKworbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICJuw7ptZXJvIGRlIHBpc3RhIGVuIHVuYSBjb2xlY2Npw7NuIgorCittc2dpZCAidHJhY2sgY291bnQiCittc2dzdHIgIm7Dum1lcm8gZGUgcGlzdGEiCisKK21zZ2lkICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgorbXNnc3RyICJuw7ptZXJvIGRlIHBpc3RhcyBlbiBsYSBjb2xlY2Npw7NuIGEgbGEgcXVlIHBlcnRlbmVjZSBsYSBwaXN0YSIKKworbXNnaWQgImRpc2MgbnVtYmVyIgorbXNnc3RyICJuw7ptZXJvIGRlIGRpc2NvIgorCittc2dpZCAiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKK21zZ3N0ciAibsO6bWVybyBkZWwgZGlzY28gZGVudHJvIGRlIHVuYSBjb2xlY2Npw7NuIgorCittc2dpZCAiZGlzYyBjb3VudCIKK21zZ3N0ciAibsO6bWVybyBkZSBkaXNjb3MiCisKK21zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKK21zZ3N0ciAibsO6bWVybyBkZSBkaXNjb3MgZW4gbGEgY29sZWNjacOzbiBhIGxhIHF1ZSBwZXJ0ZW5lY2UgZWwgZGlzY28iCisKK21zZ2lkICJsb2NhdGlvbiIKK21zZ3N0ciAidWJpY2FjacOzbiIKKworbXNnaWQgIiIKKyJPcmlnaW4gb2YgbWVkaWEgYXMgYSBVUkkgKGxvY2F0aW9uLCB3aGVyZSB0aGUgb3JpZ2luYWwgb2YgdGhlIGZpbGUgb3Igc3RyZWFtICIKKyJpcyBob3N0ZWQpIgorbXNnc3RyICIiCisiT3JpZ2VuIGRlbCBtZWRpbyBjb21vIHVuIFVSSSAodWJpY2FjacOzbiwgZG9uZGUgZXN0w6EgYWxvamFkbyBlbCBhcmNoaXZvIG8gIgorImZsdWpvIG9yaWdpbmFsKSIKKworbXNnaWQgImhvbWVwYWdlIgorbXNnc3RyICJww6FnaW5hIHByaW5jaXBhbCIKKworbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCittc2dzdHIgIiIKKyJQw6FnaW5hIHByaW5jaXBhbCBwYXJhIGVzdGUgc29wb3J0ZSAoZWouIHDDoWdpbmEgcHJpbmNpcGFsIGRlbCBhcnRpc3RhIG8gIgorInBlbMOtY3VsYSkiCisKK21zZ2lkICJkZXNjcmlwdGlvbiIKK21zZ3N0ciAiZGVzY3JpcGNpw7NuIgorCittc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgorbXNnc3RyICJ0ZXh0byBjb3J0byBkZXNjcmliaWVuZG8gZWwgY29udGVuaWRvIGRlIGxvcyBkYXRvcyIKKworbXNnaWQgInZlcnNpb24iCittc2dzdHIgInZlcnNpw7NuIgorCittc2dpZCAidmVyc2lvbiBvZiB0aGlzIGRhdGEiCittc2dzdHIgInZlcnNpw7NuIGRlIGVzdG9zIGRhdG9zIgorCittc2dpZCAiSVNSQyIKK21zZ3N0ciAiSVNSQyIKKworbXNnaWQgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKK21zZ3N0ciAiIgorIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGU7IGNvbnN1bHRlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCisKK21zZ2lkICJvcmdhbml6YXRpb24iCittc2dzdHIgIm9yZ2FuaXphY2nDs24iCisKK21zZ2lkICJjb3B5cmlnaHQiCittc2dzdHIgImNvcHlyaWdodCIKKworbXNnaWQgImNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgIm5vdGEgZGUgZGVyZWNob3MgZGUgYXV0b3IgZGUgbG9zIGRhdG9zIgorCittc2dpZCAiY29weXJpZ2h0IHVyaSIKK21zZ3N0ciAiVVJJIGEgbG9zIGRlcmVjaG9zIGRlIGF1dG9yIgorCittc2dpZCAiVVJJIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJVUkkgYSBsYSBub3RhIGRlIGRlcmVjaG9zIGRlIGF1dG9yIGRlIGxvcyBkYXRvcyIKKworIywgZnV6enkKK21zZ2lkICJlbmNvZGVkIGJ5IgorbXNnc3RyICJjb2RpZmljYWRvciIKKworbXNnaWQgIm5hbWUgb2YgdGhlIGVuY29kaW5nIHBlcnNvbiBvciBvcmdhbml6YXRpb24iCittc2dzdHIgIiIKKworbXNnaWQgImNvbnRhY3QiCittc2dzdHIgImNvbnRhY3RvIgorCittc2dpZCAiY29udGFjdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiaW5mb3JtYWNpw7NuIGRlIGNvbnRhY3RvIgorCittc2dpZCAibGljZW5zZSIKK21zZ3N0ciAibGljZW5jaWEiCisKK21zZ2lkICJsaWNlbnNlIG9mIGRhdGEiCittc2dzdHIgImxpY2VuY2lhIGRlIGxvcyBkYXRvcyIKKworbXNnaWQgImxpY2Vuc2UgdXJpIgorbXNnc3RyICJVUkkgYSBsYSBsaWNlbmNpYSIKKworbXNnaWQgIlVSSSB0byB0aGUgbGljZW5zZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiVVJJIGEgbGEgbGljZW5jaWEgZGUgbG9zIGRhdG9zIgorCittc2dpZCAicGVyZm9ybWVyIgorbXNnc3RyICJpbnTDqXJwcmV0ZSIKKworbXNnaWQgInBlcnNvbihzKSBwZXJmb3JtaW5nIgorbXNnc3RyICJwZXJzb25hKHMpIGludGVycHJldGFuZG8iCisKK21zZ2lkICJjb21wb3NlciIKK21zZ3N0ciAiY29tcG9zaXRvciIKKworbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAicGVyc29uYShzKSBxdWUgY29tcHVzaWVyb24gbGEgZ3JhYmFjacOzbiIKKworbXNnaWQgImR1cmF0aW9uIgorbXNnc3RyICJkdXJhY2lvIgorCittc2dpZCAibGVuZ3RoIGluIEdTdHJlYW1lciB0aW1lIHVuaXRzIChuYW5vc2Vjb25kcykiCittc2dzdHIgImR1cmFjacOzbiBlbiB1bmlkYWRlcyBkZSB0aWVtcG8gR1N0cmVhbWVyIChuYW5vc2VndW5kb3MpIgorCittc2dpZCAiY29kZWMiCittc2dzdHIgImPDrWRlYyIKKworbXNnaWQgImNvZGVjIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiY8OzZGVjIGVuIGVsIHF1ZSBlc3TDoW4gYWxtYWNlbmFkb3MgbG9zIGRhdG9zIgorCittc2dpZCAidmlkZW8gY29kZWMiCittc2dzdHIgImPDs2RlYyBkZSB2w61kZW8iCisKK21zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImPDs2RlYyBlbiBlbCBxdWUgZXN0w6FuIGFsbWFjZW5hZG9zIGxvcyBkYXRvcyBkZWwgdsOtZGVvIgorCittc2dpZCAiYXVkaW8gY29kZWMiCittc2dzdHIgImPDs2RlYyBkZSBzb25pZG8iCisKK21zZ2lkICJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImPDs2RlYyBlbiBlbCBxdWUgZXN0w6FuIGFsbWFjZW5hZG9zIGxvcyBkYXRvcyBkZWwgc29uaWRvIgorCittc2dpZCAic3VidGl0bGUgY29kZWMiCittc2dzdHIgImPDs2RlYyBkZWwgc3VidMOtdHVsbyIKKworbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiY8OzZGVjIGVuIGVsIHF1ZSBlc3TDoW4gYWxtYWNlbmFkb3MgbG9zIGRhdG9zIGRlbCBzdWJ0w610dWxvIgorCittc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKK21zZ3N0ciAiZm9ybWF0byBkZWwgY29udGVuZWRvciIKKworbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJmb3JtYXRvIGRlbCBjb250ZW5lZG9yIGVuIGVsIHF1ZSBlc3TDoW4gYWxtYWNlbmFkb3MgbG9zIGRhdG9zIgorCittc2dpZCAiYml0cmF0ZSIKK21zZ3N0ciAidGFzYSBkZSBiaXRzIgorCittc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAidGFzYSBkZSBiaXRzIGV4YWN0YSBvIG1lZGlhIGVuIGJpdHMvcyIKKworbXNnaWQgIm5vbWluYWwgYml0cmF0ZSIKK21zZ3N0ciAidGFzYSBkZSBiaXRzIG5vbWluYWwiCisKK21zZ2lkICJub21pbmFsIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJ0YXNhIGRlIGJpdHMgbm9taW5hbCBlbiBiaXRzL3MiCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCittc2dzdHIgIm3DrW5pbWEgdGFzYSBkZSBiaXRzIgorCittc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAibcOtbmltYSB0YXNhIGRlIGJpdHMgZW4gYml0cy9zIgorCittc2dpZCAibWF4aW11bSBiaXRyYXRlIgorbXNnc3RyICJtw6F4aW1hIHRhc2EgZGUgYml0cyIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgIm3DoXhpbWEgdGFzYSBkZSBiaXRzIGVuIGJpdHMvcyIKKworbXNnaWQgImVuY29kZXIiCittc2dzdHIgImNvZGlmaWNhZG9yIgorCittc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiY29kaWZpY2Fkb3IgdXNhZG8gcGFyYSBjb2RpZmljYXIgZXN0ZSBmbHVqbyIKKworbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKK21zZ3N0ciAidmVyc2nDs24gZGVsIGNvZGlmaWNhZG9yIgorCittc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAidmVyc2nDs24gZGVsIGNvZGlmaWNhZG9yIHVzYWRvIHBhcmEgY29kaWZpY2FyIGVzdGUgZmx1am8iCisKK21zZ2lkICJzZXJpYWwiCittc2dzdHIgInNlcmllIgorCittc2dpZCAic2VyaWFsIG51bWJlciBvZiB0cmFjayIKK21zZ3N0ciAibsO6bWVybyBkZSBzZXJpZSBkZSBsYSBwaXN0YSIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKK21zZ3N0ciAicmVwcm9kdWNpZW5kbyBnYW5hbmNpYSBkZSBsYSBwaXN0YSIKKworbXNnaWQgInRyYWNrIGdhaW4gaW4gZGIiCittc2dzdHIgImdhbmFuY2lhIGRlIGxhIHBpc3RhIGVuIGRCIgorCittc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBwZWFrIgorbXNnc3RyICJyZXByb2R1Y2llbmRvIHBpY28gZGUgbGEgcGlzdGEiCisKK21zZ2lkICJwZWFrIG9mIHRoZSB0cmFjayIKK21zZ3N0ciAicGljbyBkZSBsYSBwaXN0YSIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKK21zZ3N0ciAicmVwcm9kdWNpZW5kbyBnYW5hbmNpYSBkZWwgw6FsYnVtIgorCittc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKK21zZ3N0ciAiZ2FuYW5jaWEgZGVsIMOhbGJ1bSBlbiBkQiIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKK21zZ3N0ciAicmVwcm9kdWNpZW5kbyBlbCBwaWNvIGRlbCDDoWxidW0iCisKK21zZ2lkICJwZWFrIG9mIHRoZSBhbGJ1bSIKK21zZ3N0ciAicGljbyBkZWwgw6FsYnVtIgorCittc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCittc2dzdHIgIm5pdmVsIGRlIHJlZmVyZW5jaWEgZGUgbGEgZ2FuYW5jaWEiCisKK21zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgorbXNnc3RyICJ2YWxvciBkZWwgbml2ZWwgZGUgcmVmZXJlbmNpYSBkZSBnYW5hbmNpYSBkZSBsYSBwaXN0YSB5IGRlbCDDoWxidW0iCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIgorbXNnc3RyICJjw7NkaWdvIGRlIGlkaW9tYSIKKworbXNnaWQgImxhbmd1YWdlIGNvZGUgZm9yIHRoaXMgc3RyZWFtLCBjb25mb3JtaW5nIHRvIElTTy02MzktMSIKK21zZ3N0ciAiY8OzZGlnbyBkZSBpZGlvbWEgcGFyYSBlc3RlIGZsdWpvLCBhanVzdMOhbmRvc2UgYSBJU08tNjM5LTEiCisKK21zZ2lkICJpbWFnZSIKK21zZ3N0ciAiaW1hZ2VuIgorCittc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiaW1hZ2VuIHJlbGFjaW9uYWRhIGNvbiBlc3RlIGZsdWpvIgorCisjLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKK21zZ2lkICJwcmV2aWV3IGltYWdlIgorbXNnc3RyICJwcmV2aXN1YWxpemFyIGltYWdlbiIKKworbXNnaWQgInByZXZpZXcgaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAicHJldmlzdWFsaXphciBsYSBpbWFnZW4gcmVsYWNpb25hZGEgY29uIGVzdGUgZmx1am8iCisKK21zZ2lkICJhdHRhY2htZW50IgorbXNnc3RyICJhZGp1bnRvIgorCittc2dpZCAiZmlsZSBhdHRhY2hlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiYXJjaGl2byBhZGp1bnRvIGEgZXN0ZSBmbHVqbyIKKworbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCittc2dzdHIgImdvbHBlcyBwb3IgbWludXRvIChicG0pIgorCittc2dpZCAibnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8iCittc2dzdHIgIm7Dum1lcm8gZGUgZ29scGVzIHBvciBtaW51dG8gKGJwbSkgZW4gZWwgc29uaWRvIgorCittc2dpZCAia2V5d29yZHMiCittc2dzdHIgInBhbGFicmFzIGNsYXZlIgorCittc2dpZCAiY29tbWEgc2VwYXJhdGVkIGtleXdvcmRzIGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQiCittc2dzdHIgInBhbGFicmFzIGNsYXZlIHNlcGFyYWRhcyBwb3IgY29tYXMgZGVzY3JpYmllbmRvIGVsIGNvbnRlbmlkbyIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBuYW1lIgorbXNnc3RyICJub21icmUgZGUgbGEgZ2VvdWJpY2FjacOzbiIKKworbXNnaWQgIiIKKyJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgorInByb2R1Y2VkIgorbXNnc3RyICIiCisiZGVzY3JpcGNpw7NuIGRlIGxhIHViaWNhY2nDs24gZW50ZW5kaWJsZSBwb3IgaHVtYW5vcyBkZSBkw7NuZGUgc2UgaGEgZ3JhYmFkbyBvICIKKyJwcm9kdWNpZG8gZWwgbWVkaW8iCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCittc2dzdHIgImxhdGl0dWQgZGUgbGEgZ2VvbG9jYWxpemFjacOzbiIKKworbXNnaWQgIiIKKyJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCisic291dGhlcm4gbGF0aXR1ZGVzKSIKK21zZ3N0ciAiIgorImxhdGl0dWQgZ2VvZ3LDoWZpY2EgZG9uZGUgc2UgaGEgZ3JhYmFkbyBvIHByb2R1Y2lkbyBlbCBtZWRpbywgZW4gZ3JhZG9zIGRlICIKKyJhY3VlcmRvIGNvbiBXR1M4NCAoY2VybyBlcyBlbCBlY3VhZG9yLCB2YWxvcmVzIG5lZ2F0aXZvcyBwYXJhIGxhdGl0dWRlcyAiCisibWVyaWRpb25hbGVzKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBsb25naXR1ZGUiCittc2dzdHIgImxvbmdpdHVkIGRlIGxhIGdlb2xvY2FsaXphY2nDs24iCisKK21zZ2lkICIiCisiZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCisibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgorbXNnc3RyICIiCisibG9uZ2l0dWQgZ2VvZ3LDoWZpY2EgZG9uZGUgc2UgaGEgZ3JhYmFkbyBvIHByb2R1Y2lkbyBlbCBtZWRpbywgZW4gZ3JhZG9zIGRlICIKKyJhY3VlcmRvIGNvbiBXR1M4NCAoY2VybyBlcyBlbCBwcmltZXIgbWVyaWRpYW5vIGVuIEdyZWVud2ljaC9HQiwgdmFsb3JlcyAiCisibmVnYXRpdm9zIHBhcmEgbG9uZ2l0dWRlcyBvY2NpZGVudGFsZXMpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKK21zZ3N0ciAiZWxldmFjacOzbiBkZSBsYSBnZW9sb2NhbGl6YWNpw7NuIgorCittc2dpZCAiIgorImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCisiYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKK21zZ3N0ciAiIgorImVsZXZhY2nDs24gZ2VvZ3LDoWZpY2EgZG9uZGUgc2UgaGEgZ3JhYmFkbyBvIHByb2R1Y2lkbyBlbCBtZWRpbywgZW4gbWV0cm9zIGRlICIKKyJhY3VlcmRvIGNvbiBXR1M4NCAoY2VybyBlcyBlbCBuaXZlbCBtZWRpbyBkZWwgbWFyKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBjb3VudHJ5IgorbXNnc3RyICJwYcOtcyBkZSBsYSBnZW9sb2NhbGl6YWNpw7NuIgorCittc2dpZCAiY291bnRyeSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCittc2dzdHIgInBhw61zIChub21icmUgZW4gaW5nbGXMgXMpIGRvbmRlIHNlIGhhIGdyYWJhZG8gbyBwcm9kdWNpZG8gZWwgbWVkaW8iCisKK21zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKK21zZ3N0ciAiY2l1ZGFkIGRlIGxhIGdlb2xvY2FsaXphY2nDs24iCisKK21zZ2lkICJjaXR5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKK21zZ3N0ciAiY2l1ZGFkIChub21icmUgZW4gaW5nbMOpcykgZG9uZGUgc2UgaGEgZ3JhYmFkbyBvIHByb2R1Y2lkbyBlbCBtZWRpbyIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKK21zZ3N0ciAic3VidWJpY2FjacOzbiBkZSBsYSBnZW9sb2NhbGl6YWNpw7NuIgorCittc2dpZCAiIgorImEgbG9jYXRpb24gd2hpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgorInRoZSBuZWlnaGJvcmhvb2QpIgorbXNnc3RyICIiCisidW5hIHViaWNhY2nDs24gZW4gdW5hIGNpdWRhZCBkb25kZSBzZSBoYSBwcm9kdWNpZG8gbyBjcmVhZG8gZWwgbWVkaW8gKGVqLiBlbCAiCisiYmFycmlvKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgorbXNnc3RyICJlcnJvciBob3Jpem9udGFsIGRlIGdlb2xvY2FsaXphY2nDs24iCisKK21zZ2lkICJleHBlY3RlZCBlcnJvciBvZiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbmluZyBtZWFzdXJlcyAoaW4gbWV0ZXJzKSIKK21zZ3N0ciAiIgorImVycm9yIGVzcGVyYWRvIGRlIGxhcyBtZWRpZGFzIGRlIHBvc2ljaW9uYW1pZW50byBob3Jpem9udGFsIChlbiBtZXRyb3MpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgorbXNnc3RyICJ2ZWxvY2lkYWQgZGUgbW92aW1pZW50byBkZSBsYSBnZW9sb2NhbGl6YWNpw7NuIgorCittc2dpZCAiIgorIm1vdmVtZW50IHNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgaW4gbS9zIgorbXNnc3RyICIiCisidmVsb2NpZGFkIGRlIG1vdmltaWVudG8gZGVsIGRpc3Bvc2l0aXZvIGRlIGNhcHR1cmEgbWllbnRyYXMgcmVhbGl6YSBsYSAiCisiY2FwdHVyYSwgZW4gbS9zIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKK21zZ3N0ciAiZGlyZWNjacOzbiBkZSBtb3ZpbWllbnRvIGRlIGxhIGdlb2xvY2FsaXphY2lvzIFuIgorCittc2dpZCAiIgorImluZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBvZiBhICIKKyJtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgMCAiCisibWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgorbXNnc3RyICIiCisiaW5kaWNhIGxhIGRpcmVjY2nDs24gZGUgbW92aW1pZW50byBkZWwgZGlzcG9zaXRpdm8gcXVlIHJlYWxpemEgbGEgY2FwdHVyYSBkZSAiCisidW4gbWVkaW8uIFNlIHJlcHJlc2VudGEgZW4gZ3JhZG9zIG8gZW4gdW5hIHJlcHJlc2VudGFjacOzbiBlbiBjb21hIGZsb3RhbnRlLCAiCisiMCBzaWduaWZpY2EgZWwgbm9ydGUgZ2VvZ3LDoWZpY28geSBhdW1lbnRhIGRlIGZvcm1hIGhvcmFyaWEuIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgorbXNnc3RyICJkaXJlY2Npb8yBbiBkZSBjYXB0dXJhIGRlIGxhIGdlb2xvY2FsaXphY2lvzIFuIgorCittc2dpZCAiIgorImluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcgIGEgbWVkaWEuICIKKyJJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50ICByZXByZXNlbnRhdGlvbiwgMCBtZWFucyB0aGUgIgorImdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgorbXNnc3RyICIiCisiaW5kaWNhIGxhIGRpcmVjY2nDs24gYSBsYSBxdWUgYXB1bnRhIGVsIGRpc3Bvc2l0aXZvIHF1ZSByZWFsaXphIGxhIGNhcHR1cmEgZGUgIgorInVuIG1lZGlvLiBTZSByZXByZXNlbnRhIGVuIGdyYWRvcyBvIGVuIHVuYSByZXByZXNlbnRhY2nDs24gZW4gY29tYSBmbG90YW50ZSwgIgorIjAgc2lnbmlmaWNhIGVsIG5vcnRlIGdlb2dyw6FmaWNvIHkgYXVtZW50YSBkZSBmb3JtYSBob3JhcmlhLiIKKworIy4gVFJBTlNMQVRPUlM6ICdzaG93IG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lJyBoZXJlCittc2dpZCAic2hvdyBuYW1lIgorbXNnc3RyICJub21icmUgZGVsIHByb2dyYW1hIgorCittc2dpZCAiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSIKK21zZ3N0ciAiTm9tYnJlIGRlbCBwcm9ncmFtYS9wb2RjYXN0L3NlcmllIgorCisjLiBUUkFOU0xBVE9SUzogJ3Nob3cgc29ydG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lIGFzIHVzZWQgZm9yIHNvcnRpbmcgcHVycG9zZXMnIGhlcmUKK21zZ2lkICJzaG93IHNvcnRuYW1lIgorbXNnc3RyICJub21icmUgZGUgb3JkZW5hY2nDs24gZGVsIHByb2dyYW1hIgorCittc2dpZCAiIgorIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20sIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJOb21icmUgZGVsIHByb2dyYW1hL3BvZGNhc3Qvc2VyaWUsIHBhcmEgcHJvcMOzc2l0b3MgZGUgb3JkZW5hY2nDs24iCisKK21zZ2lkICJlcGlzb2RlIG51bWJlciIKK21zZ3N0ciAibsO6bWVybyBkZSBlcGlzb2RpbyIKKworbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICJFbCBuw7ptZXJvIGRlIGVwaXNvZGlvIGVuIGxhIHRlbXBvcmFkYSAiCisKK21zZ2lkICJzZWFzb24gbnVtYmVyIgorbXNnc3RyICJuw7ptZXJvIGRlIHRlbXBvcmFkYSIKKworbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICJFbCBuw7ptZXJvIGRlIHRlbXBvcmFkYSBkZWwgcHJvZ3JhbWEiCisKK21zZ2lkICJseXJpY3MiCittc2dzdHIgImxldHJhcyIKKworbXNnaWQgIlRoZSBseXJpY3Mgb2YgdGhlIG1lZGlhLCBjb21tb25seSB1c2VkIGZvciBzb25ncyIKK21zZ3N0ciAiTGFzIGxldHJhcyBkZWwgYXJjaGl2byBtdWx0aW1lZGlhLCBnZW5lcmFsbWVudGUgdXNhZG8gcGFyYSBjYW5jaW9uZXMiCisKK21zZ2lkICJjb21wb3NlciBzb3J0bmFtZSIKK21zZ3N0ciAibm9tYnJlIGNvcnRvIGRlbCBjb21wb3NpdG9yIgorCittc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiIgorInBlcnNvbmEocykgcXVlIGNvbXB1c2llcm9uIGxhIGdyYWJhY2nDs24sIHBhcmEgcHJvcMOzc2l0b3MgZGUgb3JkZW5hbWllbnRvIgorCittc2dpZCAiZ3JvdXBpbmciCittc2dzdHIgImFncnVwYWNpw7NuIgorCittc2dpZCAiIgorIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKKyJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgorbXNnc3RyICIiCisiQWdydXBhIHRlbWFzIHJlbGFjaW9uYWRvcyBxdWUgc2UgZXhwYW5kZW4gdmFyaWFzIHBpc3RhcywgY29tbyBsYXMgZGlmZXJlbnRlcyAiCisicGFydGVzIGRlIHVuIGNvbmNpZXJ0by4gRXMgdW4gbml2ZWwgbcOhcyBhbHRvIHF1ZSBlbCBkZSB1bmEgcGlzdGEsIHBlcm8gbcOhcyAiCisiYmFqbyBxdWUgZWwgZGUgdW4gw6FsYnVtLiIKKworbXNnaWQgInVzZXIgcmF0aW5nIgorbXNnc3RyICJwdW50dWFjacOzbiBkZSB1c3VhcmlvIgorCittc2dpZCAiIgorIlJhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgdXNlci4gVGhlIGhpZ2hlciB0aGUgcmFuaywgdGhlIG1vcmUgdGhlIHVzZXIgbGlrZXMgIgorInRoaXMgbWVkaWEiCittc2dzdHIgIiIKKyJQdW50dWFjacOzbiBhdHJpYnVpZGEgcG9yIHVuIHVzdWFyaW8uIEN1YW50byBtYXlvciBzZWEgbGEgcHVudHVhY2nDs24gbcOhcyBsZSAiCisiZ3VzdGFyw6EgYWwgdXN1YXJpby4iCisKK21zZ2lkICJkZXZpY2UgbWFudWZhY3R1cmVyIgorbXNnc3RyICJmYWJyaWNhbnRlIGRlbCBkaXNwb3NpdGl2byIKKworbXNnaWQgIk1hbnVmYWN0dXJlciBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCittc2dzdHIgIkZhYnJpY2FudGUgZGVsIGRpc3Bvc2l0aXZvIHVzYWRvIHBhcmEgY3JlYXIgZXN0ZSBtZWRpbyIKKworbXNnaWQgImRldmljZSBtb2RlbCIKK21zZ3N0ciAibW9kZWxvIGRlbCBkaXNwb3NpdGl2byIKKworbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKK21zZ3N0ciAiTW9kZWxvIGRlbCBkaXNwb3NpdGl2byB1c2FkbyBwYXJhIGNyZWFyIGVzdGUgbWVkaW8iCisKK21zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgorbXNnc3RyICJub21icmUgZGUgbGEgYXBsaWNhY2nDs24iCisKK21zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCittc2dzdHIgIkFwbGljYWNpw7NuIHVzYWRhIHBhcmEgY3JlYXIgZWwgbWVkaW8iCisKK21zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgorbXNnc3RyICJkYXRvcyBkZSBsYSBhcGxpY2FjacOzbiIKKworbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCittc2dzdHIgIkRhdG9zIGFyYml0cmFyaW9zIGRlIGxhIGFwbGljYWNpw7NuIHBhcmEgc2VyaWFsaXphcmxvcyBlbiBlbCBtZWRpbyIKKworbXNnaWQgImltYWdlIG9yaWVudGF0aW9uIgorbXNnc3RyICJvcmllbnRhY2nDs24gZGUgbGEgaW1hZ2VuIgorCittc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgorbXNnc3RyICJDw7NtbyBzZSBkZWJlcsOtYSByb3RhciBvIHZvbHRlYXIgbGEgaW1hZ2VuIGFudGVzIGRlIG1vc3RyYXJsYSIKKworbXNnaWQgIiwgIgorbXNnc3RyICIsICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgorbXNnc3RyICJFUlJPUjogZGVsIGVsZW1lbnRvICVzOiAlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorIkluZm9ybWFjacOzbiBhZGljaW9uYWwgZGUgZGVwdXJhY2nDs246XG4iCisiJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJzcGVjaWZpZWQgZW1wdHkgYmluIFwiJXNcIiwgbm90IGFsbG93ZWQiCittc2dzdHIgImVsIGJpbmFyaW8gZXNwZWNpZmljYWRvIMKrJXPCuyBlc3TDoSB2YWPDrW8sIG5vIGVzdMOhIHBlcm1pdGlkbyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBiaW4gXCIlc1wiLCBza2lwcGluZyIKK21zZ3N0ciAibm8gZXhpc3RlIGVsIGJpbmFyaW8gwqslc8K7LCBvbWl0aWVuZG8iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICJubyBoYXkgdW5hIHByb3BpZWRhZCDCqyVzwrsgZW4gZWwgZWxlbWVudG8gwqslc8K7IgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKK21zZ3N0ciAibm8gc2UgcHVkbyBlc3RhYmxlY2VyIGxhIHByb3BpZWRhZCDCqyVzwrsgZW4gZWwgZWxlbWVudG8gwqslc8K7IGEgwqslc8K7IgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGVubGF6YXIgJXMgYSAlcyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKK21zZ3N0ciAibm8gaGF5IHVuIGVsZW1lbnRvIMKrJXPCuyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCittc2dzdHIgIm5vIHNlIHB1ZGllcm9uIGFuYWxpemFyIGxhcyBjYXBhY2lkYWRlcyDCqyVzwrsiCisKK21zZ2lkICJsaW5rIHdpdGhvdXQgc291cmNlIGVsZW1lbnQiCittc2dzdHIgImVubGFjZSBzaW4gZWxlbWVudG8gb3JpZ2VuIgorCittc2dpZCAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKK21zZ3N0ciAiZW5sYWNlIHNpbiBlbGVtZW50byBzdW1pZGVybyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAibm8gZXhpc3RlIHVuIGVsZW1lbnRvIG9yaWdlbiBwYXJhIGVsIFVSSSDCqyVzwrsiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCB0byBsaW5rIFVSSSBcIiVzXCIgdG8iCittc2dzdHIgIm5vIGV4aXN0ZSB1biBlbGVtZW50byBjb24gZWwgcXVlIGVubGF6YXIgZWwgVVJJIMKrJXPCuyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgIm5vIGV4aXN0ZSBlbCBlbGVtZW50byBzdW1pZGVybyBwYXJhIGVsIFVSSSDCqyVzwrsiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxpbmsgc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJubyBzZSBwdWRvIGVubGF6YXIgZWwgZWxlbWVudG8gc3VtaWRlcm8gcGFyYSBlbCBVUkkgwqslc8K7IgorCittc2dpZCAiZW1wdHkgcGlwZWxpbmUgbm90IGFsbG93ZWQiCittc2dzdHIgIm5vIHNlIHBlcm1pdGUgdW4gY29uZHVjdG8gdmFjw61vIgorCittc2dpZCAiSW50ZXJuYWwgY2xvY2sgZXJyb3IuIgorbXNnc3RyICJFcnJvciBlbiBlbCByZWxvaiBpbnRlcm5vLiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCittc2dzdHIgIkVycm9yIGVuIGVsIGZsdWpvIGRlIGRhdG9zIGludGVybm8uIgorCittc2dpZCAiQSBsb3Qgb2YgYnVmZmVycyBhcmUgYmVpbmcgZHJvcHBlZC4iCittc2dzdHIgIlNlIGVzdMOhbiBkZXNlY2hhbmRvIG11Y2hvcyBiw7pmZXJlcy4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCittc2dzdHIgIlByb2JsZW1hIGVuIGVsIGZsdWpvIGRlIGRhdG9zIGludGVybm8uIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBzdHJlYW0gZXJyb3IuIgorbXNnc3RyICJFcnJvciBpbnRlcm5vIGRlIGZsdWpvIGRlIGRhdG9zLiIKKworbXNnaWQgIkZpbHRlciBjYXBzIgorbXNnc3RyICJGaWx0cm8gZGUgY2FwYWNpZGFkZXMiCisKK21zZ2lkICIiCisiUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCisicHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKK21zZ3N0ciAiIgorIlJlc3RyaW5naXIgbGFzIHBvc2libGVzIGNhcGFjaWRhZGVzIHBlcm1pdGlkYXMgKE5VTEwgc2lnbmlmaWNhIENVQUxRVUlFUkEpLiAiCisiQWwgZXN0YWJsZWNlciBlc3RhIHByb3BpZWRhZCBzZSBvYnRpZW5lIHVuYSByZWZlcmVuY2lhIGRlbCBvYmpldG8gR3N0Q2FwcyAiCisicHJvcG9yY2lvbmFkby4iCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiTm8gc2UgZXNwZWNpZmljw7MgdW4gbm9tYnJlIGRlIGFyY2hpdm8gcGFyYSBlc2NyaXR1cmEuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiTm8gc2UgcHVkbyBhYnJpciDCqyVzwrsgcGFyYSBlc2NyaWJpci4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCittc2dzdHIgIkVycm9yIGFsIGNlcnJhciBlbCBhcmNoaXZvIMKrJXPCuy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Vla2luZyBpbiBmaWxlIFwiJXNcIi4iCittc2dzdHIgIkVycm9yIGFsIGJ1c2NhciBlbiBlbCBhcmNoaXZvIMKrJXPCuy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIFwiJXNcIi4iCittc2dzdHIgIkVycm9yIGFsIGVzY3JpYmlyIGFsIGFyY2hpdm8gwqslc8K7LiIKKworbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHJlYWRpbmcuIgorbXNnc3RyICJObyBzZSBlc3BlY2lmaWPDsyB1biBub21icmUgZGUgYXJjaGl2byBwYXJhIGxhIGxlY3R1cmEuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiTm8gc2UgcHVkbyBhYnJpciBlbCBhcmNoaXZvIMKrJXPCuyBwYXJhIGxlZXIuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgaW5mbyBvbiBcIiVzXCIuIgorbXNnc3RyICJObyBzZSBwdWRvIG9idGVuZXIgbGEgaW5mb3JtYWNpw7NuIGRlIMKrJXPCuy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiXCIlc1wiIGlzIGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiwqslc8K7IGVzIHVuIGRpcmVjdG9yaW8uIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKK21zZ3N0ciAiRWwgYXJjaGl2byDCqyVzwrsgZXMgdW4gc29ja2V0LiIKKworbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCittc2dzdHIgIkZhbGzDsyBkZXNwdcOpcyBkZSBsYXMgaXRlcmFjaW9uZXMsIGNvbW8gc2UgcGlkacOzLiIKKworbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCittc2dzdHIgIk5vIHNlIGVzcGVjaWZpY8OzIHVuIGRpcmVjdG9yaW8gdGVtcG9yYWwuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcCBmaWxlIFwiJXNcIi4iCittc2dzdHIgIk5vIHNlIHB1ZG8gY3JlYXIgZWwgYXJjaGl2byB0ZW1wb3JhbCDCqyVzwrsuIgorCittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKK21zZ3N0ciAiRXJyb3IgYWwgZXNjcmliaXIgcGFyYSBkZXNjYXJnYXIgZWwgYXJjaGl2by4iCisKK21zZ2lkICJjYXBzIgorbXNnc3RyICJjYXBhY2lkYWRlcyIKKworbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCittc2dzdHIgImNhcGFjaWRhZGVzIGRldGVjdGFkYXMgZW4gZWwgZmx1am8iCisKK21zZ2lkICJtaW5pbXVtIgorbXNnc3RyICJtw61uaW1vIgorCittc2dpZCAibWF4aW11bSIKK21zZ3N0ciAibcOheGltbyIKKworbXNnaWQgImZvcmNlIGNhcHMiCittc2dzdHIgImZvcnphciBsYXMgY2FwYWNpZGFkZXMiCisKK21zZ2lkICJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIKK21zZ3N0ciAiZm9yemFyIGxhcyBjYXBhY2lkYWRlcyBzaW4gaGFjZXIgdW4gwqt0eXBlZmluZMK7IgorCittc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgorbXNnc3RyICJFbCBmbHVqbyBubyBjb250aWVuZSBkYXRvcy4iCisKK21zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgorbXNnc3RyICJJbnRlcmZhY2VzIGltcGxlbWVudGFkb3M6XG4iCisKK21zZ2lkICJyZWFkYWJsZSIKK21zZ3N0ciAibGVnaWJsZSIKKworbXNnaWQgIndyaXRhYmxlIgorbXNnc3RyICJlc2NyaWJpYmxlIgorCittc2dpZCAiY29udHJvbGxhYmxlIgorbXNnc3RyICJjb250cm9sYWJsZSIKKworbXNnaWQgImNoYW5nZWFibGUgaW4gTlVMTCwgUkVBRFksIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlIgorbXNnc3RyICJpbnRlcmNhbWJpYWJsZSBlbnRyZSBsb3MgZXN0YWRvcyBOVUxMLCBSRUFEWSwgUEFVU0VEIG8gUExBWUlORyIKKworbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiCittc2dzdHIgImludGVyY2FtYmlhYmxlIHPDs2xvIGVudHJlIGxvcyBlc3RhZG9zIE5VTEwsIFJFQURZIG8gUEFVU0VEIgorCittc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwgb3IgUkVBRFkgc3RhdGUiCittc2dzdHIgImludGVyY2FtYmlhYmxlIHPDs2xvIGVudHJlIGxvcyBlc3RhZG9zIE5VTEwgbyBSRUFEWSIKKworbXNnaWQgIkJsYWNrbGlzdGVkIGZpbGVzOiIKK21zZ3N0ciAiQXJjaGl2b3MgZW4gbGEgbGlzdGEgbmVncmE6IgorCittc2dpZCAiVG90YWwgY291bnQ6ICIKK21zZ3N0ciAiQ29udGVvIHRvdGFsOiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgorbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKK21zZ3N0clswXSAiJWQgYXJjaGl2byBlbiBsYSBsaXN0YSBuZWdyYSIKK21zZ3N0clsxXSAiJWQgYXJjaGl2b3MgZW4gbGEgbGlzdGEgbmVncmEiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgcGx1Z2luIgorbXNnaWRfcGx1cmFsICIlZCBwbHVnaW5zIgorbXNnc3RyWzBdICIlZCBjb21wbGVtZW50byIKK21zZ3N0clsxXSAiJWQgY29tcGxlbWVudG9zIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdCBlbnRyeSIKK21zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0IGVudHJpZXMiCittc2dzdHJbMF0gIiVkIGVudHJhZGEgZW4gbGEgbGlzdGEgbmVncmEiCittc2dzdHJbMV0gIiVkIGVudHJhZGFzIGVuIGxhIGxpc3RhIG5lZ3JhIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGZlYXR1cmUiCittc2dpZF9wbHVyYWwgIiVkIGZlYXR1cmVzIgorbXNnc3RyWzBdICIlZCBjYXJhY3RlcsOtc3RpY2EiCittc2dzdHJbMV0gIiVkIGNhcmFjdGVyw61zdGljYXMiCisKK21zZ2lkICJQcmludCBhbGwgZWxlbWVudHMiCittc2dzdHIgIkltcHJpbWlyIHRvZG9zIGxvcyBlbGVtZW50b3MiCisKK21zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgorbXNnc3RyICJJbXByaW1pciBsaXN0YSBkZSBsb3MgYXJjaGl2b3MgZW4gbGEgbGlzdGEgbmVncmEiCisKK21zZ2lkICIiCisiUHJpbnQgYSBtYWNoaW5lLXBhcnNhYmxlIGxpc3Qgb2YgZmVhdHVyZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4gb3IgYWxsICIKKyJwbHVnaW5zIHByb3ZpZGUuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIGluIGNvbm5lY3Rpb24gd2l0aCBleHRlcm5hbCAiCisiYXV0b21hdGljIHBsdWdpbiBpbnN0YWxsYXRpb24gbWVjaGFuaXNtcyIKK21zZ3N0ciAiIgorIkltcHJpbWlyIHVuYSBsaXN0YSBkZSBjYXJhY3RlcsOtc3RpY2FzIGFuYWxpemFibGVzIHBvciB1bmEgbcOhcXVpbmEgcXVlIGVsICIKKyJjb21wbGVtZW50byBlc3BlY2lmaWNhZG8gcHJvcG9yY2lvbmEuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgw5p0aWwganVudG8gY29uIG1lY2FuaXNtb3MgZGUgIgorImluc3RhbGFjacOzbiBleHRlcm5hIGF1dG9tw6F0aWNhIGRlIGNvbXBsZW1lbnRvcy4iCisKK21zZ2lkICJMaXN0IHRoZSBwbHVnaW4gY29udGVudHMiCittc2dzdHIgIkxpc3RhciBlbCBjb250ZW5pZG8gZGVsIGNvbXBsZW1lbnRvIgorCittc2dpZCAiUHJpbnQgc3VwcG9ydGVkIFVSSSBzY2hlbWVzLCB3aXRoIHRoZSBlbGVtZW50cyB0aGF0IGltcGxlbWVudCB0aGVtIgorbXNnc3RyICIiCisiSW1wcmltaXIgbG9zIGVzcXVlbWFzIFVSSSBzb3BvcnRhZG9zLCBjb24gbG9zIGVsZW1lbnRvcyBxdWUgbG9zIGltcGxlbWVudGFuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgorbXNnc3RyICJObyBzZSBwdWRvIGNhcmdhciBlbCBhcmNoaXZvIGRlIGNvbXBsZW1lbnRvOiAlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgorbXNnc3RyICJObyBleGlzdGUgZWwgZWxlbWVudG8gbyBjb21wbGVtZW50byDCqyVzwrtcbiIKKworbXNnaWQgIkluZGV4IHN0YXRpc3RpY3MiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBlbGVtZW50IFwiJXNcIiAoJXMpOiAiCittc2dzdHIgIlNlIG9idHV2byBlbCBtZW5zYWplIG7CuiAldSBkZWwgZWxlbWVudG8gwqslc8K7ICglcyk6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKK21zZ3N0ciAiU2Ugb2J0dXZvIGVsIG1lbnNhamUgbsK6ICV1IGRlIGxhIGNlbGRhIMKrJXM6JXPCuyAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gb2JqZWN0IFwiJXNcIiAoJXMpOiAiCittc2dzdHIgIlNlIHJlY2liacOzIGVsIG1lbnNhamUgbsK6ICV1IGRlbCBvYmpldG8gwqslc8K7ICglcyk6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgKCVzKTogIgorbXNnc3RyICJTZSBvYnR1dm8gZWwgbWVuc2FqZSBuwrogJXUgKCVzKTogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKK21zZ3N0ciAiU2UgcmVjaWJpw7MgdW4gRU9TIGRlbCBlbGVtZW50byDCqyVzwrsuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKK21zZ3N0ciAiRVRJUVVFVEEgRU5DT05UUkFEQSAgICAgIDogZW5jb250cmFkYSBwb3IgZWwgZWxlbWVudG8gwqslc8K7LlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgcGFkIFwiJXM6JXNcIi5cbiIKK21zZ3N0ciAiRVRJUVVFVEEgRU5DT05UUkFEQSAgICAgIDogZW5jb250cmFkYSBwb3IgbGEgY2VsZGEgwqslczolc8K7LlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKK21zZ3N0ciAiRVRJUVVFVEEgRU5DT05UUkFEQSAgICAgIDogZW5jb250cmFkYSBwb3IgZWwgb2JqZXRvIMKrJXPCuy5cbiIKKworbXNnaWQgIkZPVU5EIFRBR1xuIgorbXNnc3RyICJFVElRVUVUQSBFTkNPTlRSQURBXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklORk86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorIklORk9STUFDScOTTjpcbiIKKyIlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAiQURWRVJURU5DSUE6IGRlbCBlbGVtZW50byAlczogJXNcbiIKKworbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgorbXNnc3RyICJQcmVwYXJhZG8sIGVzcGVyYW5kbyBhIGxsZW5hciBlbCBiw7pmZXIgcGFyYSB0ZXJtaW5hcuKAplxuIgorCittc2dpZCAiYnVmZmVyaW5nLi4uIgorbXNnc3RyICJhbG1hY2VuYW5kbyBlbiBlbCBiw7pmZXLigKYiCisKK21zZ2lkICJEb25lIGJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgorbXNnc3RyICIiCisiU2UgdGVybWluw7MgZGUgYWxtYWNlbmFyIGVuIGVsIGLDumZlciwgZXN0YWJsZWNpZW5kbyBsYSBzZWdtZW50YWNpw7NuIHBhcmEgIgorIlJFUFJPRFVDSVLigKZcbiIKKworbXNnaWQgIkJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCittc2dzdHIgImFsbWFjZW5hbmRvIGVuIGVsIGLDumZlciwgZXN0YWJsZWNpZW5kbyBsYSBzZWdtZW50YWNpw7NuIGEgUEFVU0HigKZcbiIKKworbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCittc2dzdHIgIlJlZGlzdHJpYnVpciBsYXRlbmNpYeKAplxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iCittc2dzdHIgIkVzdGFibGVjaWVuZG8gZWwgZXN0YWRvIGEgJXMgc2Vnw7puIGxvIHNvbGljaXTDsyAlc+KAplxuIgorCittc2dpZCAiSW50ZXJydXB0OiBTdG9wcGluZyBwaXBlbGluZSAuLi5cbiIKK21zZ3N0ciAiSW50ZXJydW1waXI6IHBhcmFuZG8gZWwgY29uZHVjdG8g4oCmXG4iCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKK21zZ3N0ciAibm8gaGF5IHVuIGVsZW1lbnRvIMKrJXPCuyIKKworbXNnaWQgIk91dHB1dCB0YWdzIChhbHNvIGtub3duIGFzIG1ldGFkYXRhKSIKK21zZ3N0ciAiRXRpcXVldGFzIGRlIHNhbGlkYSAodGFtYmnDqW4gY29ub2NpZG9zIGNvbW8gbWV0YWRhdG9zKSIKKworbXNnaWQgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCittc2dzdHIgIkluZm9ybWFjacOzbiBkZSBlc3RhZG8gZGUgbGEgc2FsaWRhIHkgbm90aWZpY2FjaW9uZXMgZGUgbGFzIHByb3BpZWRhZGVzIgorCittc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiTm8gbW9zdHJhciBuaW5ndW5hIGluZm9ybWFjacOzbiBkZSBwcm9ncmVzbyIKKworbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKK21zZ3N0ciAiTWVuc2FqZXMgZGUgc2FsaWRhIgorCittc2dpZCAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKK21zZ3N0ciAiTm8gc2FjYXIgbGEgc2FsaWRhIGRlIGxhIGluZm9ybWFjacOzbiBkZSBlc3RhZG8gZGVsIFRJUE8iCisKK21zZ2lkICJUWVBFMSxUWVBFMiwuLi4iCittc2dzdHIgIlRJUE8xLFRJUE8yLOKApiIKKworbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKK21zZ3N0ciAiTm8gaW5zdGFsYXIgdW4gbWFuZWphZG9yIHByZWRldGVybWluYWRvIgorCittc2dpZCAiUHJpbnQgYWxsb2MgdHJhY2UgKGlmIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lKSIKK21zZ3N0ciAiSW1wcmltaXIgbGEgdHJhemEgZGUgYXNpZ25hY2lvbmVzIChzaSBzZSBhY3RpdsOzIGFsIGNvbXBpbGFyKSIKKworbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKK21zZ3N0ciAiRm9yemFyIEVPUyBlbiBsYXMgZnVlbnRlcyBhbnRlcyBkZSBjZXJyYXIgbGEgdHViZXLDrWEiCisKK21zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKK21zZ3N0ciAiRVJST1I6IG5vIHNlIHB1ZG8gY29uc3RydWlyIGVsIGNvbmR1Y3RvOiVzLlxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKK21zZ3N0ciAiRVJST1I6IG5vIHNlIHB1ZG8gY29uc3RydWlyIGVsIGNvbmR1Y3RvLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGVycm9uZW91cyBwaXBlbGluZTogJXNcbiIKK21zZ3N0ciAiQURWRVJURU5DSUE6IGNvbmR1Y3RvIGVycsOzbmVvOiAlc1xuIgorCittc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgorbXNnc3RyICJFUlJPUjogZWwgZWxlbWVudG8gwqtjb25kdWN0b8K7IG5vIHNlIGVuY29udHLDsy5cbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgorbXNnc3RyICJFc3RhYmxlY2llbmRvIGVsIGNvbmR1Y3RvIGEgUEFVU0Eg4oCmXG4iCisKK21zZ2lkICJFUlJPUjogUGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBhdXNlLlxuIgorbXNnc3RyICJFUlJPUjogRWwgY29uZHVjdG8gbm8gcXVpZXJlIHBhdXNhcnNlLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgorbXNnc3RyICJFbCBjb25kdWN0byBlc3TDoSB2aXZvIHkgbm8gbmVjZXNpdGEgUFJFUEFSQVJTRSDigKZcbiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCittc2dzdHIgIkVsIGNvbmR1Y3RvIGVzdMOhIFBSRVBBUsOBTkRPU0Ug4oCmXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHByZXJvbGwuXG4iCittc2dzdHIgIkVSUk9SOiBlbCBjb25kdWN0byBubyBxdWllcmUgcHJlcGFyYXJzZS5cbiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExFRCAuLi5cbiIKK21zZ3N0ciAiRWwgY29uZHVjdG8gZXN0w6EgUFJFUEFSQURPIOKAplxuIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgorbXNnc3RyICJFc3RhYmxlY2llbmRvIGVsIGNvbmR1Y3RvIGEgUkVQUk9EVUNJRU5ETyDigKZcbiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKK21zZ3N0ciAiRVJST1I6IGVsIGNvbmR1Y3RvIG5vIHF1aWVyZSByZXByb2R1Y2lyLlxuIgorCittc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gRm9yY2luZyBFT1Mgb24gdGhlIHBpcGVsaW5lXG4iCittc2dzdHIgIkVPUyBhbCBhcGFnYXIgYWN0aXZhZG87IEZvcnphbmRvIEVPUyBlbiBsYSB0dWJlcsOtYVxuIgorCittc2dpZCAiV2FpdGluZyBmb3IgRU9TLi4uXG4iCittc2dzdHIgIkVzcGVyYW5kbyBhIEVPU+KAplxuIgorCittc2dpZCAiRU9TIHJlY2VpdmVkIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKK21zZ3N0ciAiRU9TIHJlY2liaWRvOiBwYXJhbmRvIGVsIGNvbmR1Y3RvIOKAplxuIgorCittc2dpZCAiQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgd2FpdGluZyBmb3IgRU9TXG4iCittc2dzdHIgIk9jdXJyacOzIHVuIGVycm9yIGFsIGVzcGVyYXIgYSBFT1NcbiIKKworbXNnaWQgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgorbXNnc3RyICJMYSBlamVjdWNpw7NuIGZpbmFsaXrDsyBkZXNwdcOpcyBkZSAlIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKK21zZ3N0ciAiRXN0YWJsZWNpYW5kbyBlbCBjb25kdWN0byBhIFBSRVBBUkFETyDigKZcbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCAuLi5cbiIKK21zZ3N0ciAiRXN0YWJsZWNpZW5kbyBlbCBjb25kdWN0byBhIE5VTEwg4oCmXG4iCisKK21zZ2lkICJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIgorbXNnc3RyICJMaWJlcmFuZG8gbGEgdHViZXLDrWHigKZcbiIKKworI34gbXNnaWQgIlVzYWdlOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLiBdXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJVc286IGdzdC14bWxsYXVuY2ggPGFyY2hpdm8ueG1sPiBbIHByb3BpZWRhZC5kZWwuZWxlbWVudG89dmFsb3Ig4oCmIF1cbiIKKworI34gbXNnaWQgIkVSUk9SOiBwYXJzZSBvZiB4bWwgZmlsZSAnJXMnIGZhaWxlZC5cbiIKKyN+IG1zZ3N0ciAiRVJST1I6IGZhbGzDsyBlbCBhbsOhbGlzaXMgZGVsIGFyY2hpdm8geG1sIMKrJXPCuy5cbiIKKworI34gbXNnaWQgIkVSUk9SOiBubyB0b3BsZXZlbCBwaXBlbGluZSBlbGVtZW50IGluIGZpbGUgJyVzJy5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIkVSUk9SOiBubyBleGlzdGUgZWwgZWxlbWVudG8gZGUgbml2ZWwgc3VwZXJpb3IgZGUgbGEgc2VnbWVudGFjacOzbiBlbiBlbCAiCisjfiAiYXJjaGl2byDCqyVzwrsuXG4iCisKKyN+IG1zZ2lkICJXQVJOSU5HOiBvbmx5IG9uZSB0b3BsZXZlbCBlbGVtZW50IGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJBRFZFUlRFTkNJQTogZW4gZXN0ZSBtb21lbnRvIHPDs2xvIHNlIHNvcG9ydGEgdW4gZWxlbWVudG8gZGUgbml2ZWwgIgorI34gInN1cGVyaW9yLlxuIgorCisjfiBtc2dpZCAiRVJST1I6IGNvdWxkIG5vdCBwYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgJWQ6ICVzLlxuIgorI34gbXNnc3RyICIiCisjfiAiRVJST1I6IG5vIHNlIHB1ZG8gYW5hbGl6YXIgZWwgYXJndW1lbnRvICVkIGRlIGxhIGzDrW5lYSBkZSBjb21hbmRvczogJXMuXG4iCisKKyN+IG1zZ2lkICJXQVJOSU5HOiBlbGVtZW50IG5hbWVkICclcycgbm90IGZvdW5kLlxuIgorI34gbXNnc3RyICJBRFZFUlRFTkNJQTogbm8gc2UgZW5jb250csOzIGVsIGVsZW1lbnRvIGxsYW1hZG8gwqslc8K7LlxuIgorCisjfiBtc2dpZCAiU2F2ZSB4bWwgcmVwcmVzZW50YXRpb24gb2YgcGlwZWxpbmUgdG8gRklMRSBhbmQgZXhpdCIKKyN+IG1zZ3N0ciAiR3VhcmRhciBsYSByZXByZXNlbnRhY2nDs24geG1sIGRlbCBjb25kdWN0byBhIHVuIEFSQ0hJVk8geSBzYWxpciIKKworI34gbXNnaWQgIkZJTEUiCisjfiBtc2dzdHIgIkFSQ0hJVk8iCisKKyN+IG1zZ2lkICJEbyBub3QgaW5zdGFsbCBzaWduYWwgaGFuZGxlcnMgZm9yIFNJR1VTUjEgYW5kIFNJR1VTUjIiCisjfiBtc2dzdHIgIk5vIGluc3RhbGFyIGxvcyBtYW5lamFkb3JlcyBkZSBzZcOxYWxlcyBwYXJhIFNJR1VTUjEgeSBTSUdVU1IyIgorCisjfiBtc2dpZCAiRXJyb3Igd3JpdGluZyByZWdpc3RyeSBjYWNoZSB0byAlczogJXMiCisjfiBtc2dzdHIgIkVycm9yIGFsIGVzY3JpYmlyIGxhIGNhY2jDqSBkZSByZWdpc3RybyBhICVzOiAlcyIKKworI34gbXNnaWQgIkVycm9yIHJlLXNjYW5uaW5nIHJlZ2lzdHJ5ICVzOiAlcyIKKyN+IG1zZ3N0ciAiRXJyb3IgYWwgdm9sdmVyIGEgZXNjYW5lYXIgZWwgcmVnaXN0cm8gJXM6ICVzIgorCisjfiBtc2dpZCAiRXJyb3IgcmUtc2Nhbm5pbmcgcmVnaXN0cnkgJXMiCisjfiBtc2dzdHIgIkVycm9yIGFsIHZvbHZlciBhIGVzY2FuZWFyIGVsIHJlZ2lzdHJvICVzIgorCisjfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkLiIKKyN+IG1zZ3N0ciAiRXJyb3IgaW50ZXJubyBkZSBHU3RyZWFtZXI6IGZhbGzDsyBlbCBjYW1iaW8gZGUgZXN0YWRvLiIKKworI34gbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBkZXNjcmlwdG9yIFwiJWRcIi4iCisjfiBtc2dzdHIgIkVycm9yIGFsIGVzY3JpYmlyIGVsIGRlc2NyaXB0b3IgZGVsIGFyY2hpdm8gwqslZMK7LiIKKworI34gbXNnaWQgIkZpbGUgZGVzY3JpcHRvciBcIiVkXCIgaXMgbm90IHZhbGlkLiIKKyN+IG1zZ3N0ciAiRWwgZGVzY3JpcHRvciBkZWwgYXJjaGl2byDCqyVkwrsgbm8gZXMgdsOhbGlkby4iCisKKyN+IG1zZ2lkICJGUkVFSU5HIHBpcGVsaW5lIC4uLlxuIgorI34gbXNnc3RyICJMSUJFUkFORE8gZWwgY29uZHVjdG8gLi4uXG4iCisKKyN+IG1zZ2lkICJvcmlnaW5hbCBsb2NhdGlvbiBvZiBmaWxlIGFzIGEgVVJJIgorI34gbXNnc3RyICJ1YmljYWNpw7NuIG9yaWdpbmFsIGRlbCBhcmNoaXZvIGNvbW8gVVJJIgpkaWZmIC0tZ2l0IGEvcG8vZXUuZ21vIGIvcG8vZXUuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZTI4ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9wby9ldS5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vZXUucG8gYi9wby9ldS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjMxZmZjCi0tLSAvZGV2L251bGwKKysrIGIvcG8vZXUucG8KQEAgLTAsMCArMSwxMjM4IEBACisjIHRyYW5zbGF0aW9uIG9mIGdzdHJlYW1lci5tYXN0ZXIucG8gdG8gQmFzcXVlCisjIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdzdHJlYW1lciBwYWNrYWdlLgorIworIyBJw7Fha2kgTGFycmHDsWFnYSBNdXJnb2l0aW8gPGRvb3Rlb0BldXNrYWxnbnUub3JnPiwgMjAwOSwgMjAxMC4KKyMgTWlrZWwgT2xhc2FnYXN0aSBVcmFuZ2EgPGhleV9uZWtlbkBtdW5kdXJhdC5uZXQ+LCAyMDA5LCAyMDEwLgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyLTAuMTAuMjYuMlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTA5LTI5IDE0OjU1KzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTAzLTI1IDEzOjEwKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IE1pa2VsIE9sYXNhZ2FzdGkgVXJhbmdhIDxoZXlfbmVrZW5AbXVuZHVyYXQubmV0PlxuIgorIkxhbmd1YWdlLVRlYW06IEJhc3F1ZSA8dHJhbnNsYXRpb24tdGVhbS1ldUBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCisiTGFuZ3VhZ2U6IGV1XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisiWC1HZW5lcmF0b3I6IEtCYWJlbCAxLjExLjRcbiIKKworbXNnaWQgIlByaW50IHRoZSBHU3RyZWFtZXIgdmVyc2lvbiIKK21zZ3N0ciAiRXJha3V0c2kgR1N0cmVhbWVyLWVuIGJlcnRzaW9hIgorCittc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCittc2dzdHIgIkJpaHVydHUgYWJpc3UgZ3V6dGlhayBlcnJvcmUgbGFycmkiCisKK21zZ2lkICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKK21zZ3N0ciAiRXJha3V0c2kgYXJhenRlLWthdGVnb3JpYSBlcmFiaWxnYXJyaWFrLCBldGEgaXJ0ZW4iCisKK21zZ2lkICIiCisiRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmcm9tIDEgKG9ubHkgZXJyb3IpIHRvIDUgKGFueXRoaW5nKSBvciAwIGZvciBubyBvdXRwdXQiCittc2dzdHIgIiIKKyJBcmF6dGUtbWFpbGEgbGVoZW5ldHNpYSwgMWV0aWsgKHNvaWxpayBlcnJvcmVhaykgNWVyYSAoZGVuYSksIGVkbyAwICIKKyIoaXJ0ZWVyYXJpayBleikiCisKK21zZ2lkICJMRVZFTCIKK21zZ3N0ciAiTUFJTEEiCisKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCisidGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgorbXNnc3RyICIiCisiS2F0ZWdvcmlhIGJha29pdHphcmkgbWFpbGEgamFraW4gYmF0IGV6YXJ0emVrbywgZXJhYmlsaSBrb21heiBiZXJlaXppdGFrbyAiCisia2F0ZWdvcmlhcmVuX2l6ZW5hOm1haWxhIHBhcmVlbiB6ZXJyZW5kYS4gQWRpYmlkZWE6IEdTVF9BVVRPUExVRzo1LCIKKyJHU1RfRUxFTUVOVF8qOjMiCisKK21zZ2lkICJMSVNUIgorbXNnc3RyICJaRVJSRU5EQSIKKworbXNnaWQgIkRpc2FibGUgY29sb3JlZCBkZWJ1Z2dpbmcgb3V0cHV0IgorbXNnc3RyICJEZXNnYWl0dSBrb2xvcmVhayBhcmF6a2V0YWtvIGlydGVlcmV0YW4iCisKK21zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKK21zZ3N0ciAiRGVzZ2FpdHUgYXJhemtldGEiCisKK21zZ2lkICJFbmFibGUgdmVyYm9zZSBwbHVnaW4gbG9hZGluZyBkaWFnbm9zdGljcyIKK21zZ3N0ciAiR2FpdHUgcGx1Z2luZW4ga2FyZ2F0emUtZGlhZ25vc3Rpa28geGVoYXR1YSIKKworbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCittc2dzdHIgIlBsdWdpbmFrIGRpdHV6dGVuIGJpZGUtaXplbmFrLCBiaSBwdW50dXJla2luIGJlcmVpeml0YSIKKworbXNnaWQgIlBBVEhTIgorbXNnc3RyICJCSURFLUlaRU5BSyIKKworbXNnaWQgIiIKKyJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwbHVnaW5zIHRvIHByZWxvYWQgaW4gYWRkaXRpb24gdG8gdGhlIGxpc3Qgc3RvcmVkIGluICIKKyJlbnZpcm9ubWVudCB2YXJpYWJsZSBHU1RfUExVR0lOX1BBVEgiCittc2dzdHIgIiIKKyJBdXJyZXoga2FyZ2F0emVrbyBwbHVnaW5lbiB6ZXJyZW5kYSBrb21heiBiZXJlaXppdGEsIEdTVF9QTFVHSU5fUEFUSCAiCisiaW5ndXJ1bWVuLWFsZGFnYWlhbiBnb3JkZXRha28gemVycmVuZGF6IGdhaW4iCisKK21zZ2lkICJQTFVHSU5TIgorbXNnc3RyICJQTFVHSU5BSyIKKworbXNnaWQgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCittc2dzdHIgIiIKKyJEZXNnYWl0dSBzZWdtZW50YXppby1odXRzZWdpdGVlbiB0cmFucGFrIHBsdWdpbmFrIGthcmdhdHplbiBkaXJlbiBiaXRhcnRlYW4iCisKK21zZ2lkICJEaXNhYmxlIHVwZGF0aW5nIHRoZSByZWdpc3RyeSIKK21zZ3N0ciAiRGVzZ2FpdHUgZXJyZWdpc3Ryb2EgZWd1bmVyYXR6ZWEiCisKK21zZ2lkICJEaXNhYmxlIHNwYXduaW5nIGEgaGVscGVyIHByb2Nlc3Mgd2hpbGUgc2Nhbm5pbmcgdGhlIHJlZ2lzdHJ5IgorbXNnc3RyICIiCisiRGVzZ2FpdHUgcHJvemVzdSBsYWd1bnR6YWlsZWEgYWJpYXJhenRlYSBlcnJlZ2lzdHJvYSBlc2thbmVhdHplbiBkZW4gIgorImJpdGFydGVhbiIKKworbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgorbXNnc3RyICJHU3RyZWFtZXItZW4gYXVrZXJhayIKKworbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgIkVyYWt1dHNpIEdTdHJlYW1lci1lbiBhdWtlcmFrIgorCittc2dpZCAiVW5rbm93biBvcHRpb24iCittc2dzdHIgIkF1a2VyYSBlemV6YWd1bmEiCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIGNvcmUgbGlicmFyeSBlcnJvci4iCittc2dzdHIgIk51a2xlby1saWJ1cnV0ZWdpYXJlbiBlcnJvcmUgb3Jva29ycmEgdG9wYXR1IGR1IEdTdHJlYW1lci1layIKKworbXNnaWQgIiIKKyJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuIgorbXNnc3RyICIiCisiR1N0cmVhbWVyLWVuIGdhcmF0emFpbGVhayBhbGZlcnJlZ2lhayB6aXJlbiBlcnJvcmUgaG9uaSBlcnJvcmUta29kZSBiYXQgIgorImVzbGVpdHpla28uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjb2RlIG5vdCBpbXBsZW1lbnRlZC4iCittc2dzdHIgIkdTdHJlYW1lci1lbiBiYXJuZS1lcnJvcmVhOiBrb2RlYSBleiBkYWdvIGlucGxlbWVudGF0dWEuIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgorInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgorbXNnc3RyICIiCisiR1N0cmVhbWVyLWVuIGJhcm5lLWVycm9yZWE6IGVnb2VyYXJlbiBhbGRha2V0YWsgaHV0cyBlZ2luIGR1IGV0YSBlbGVtZW50dSAiCisiYmF0enVrIGh1dHMgZWdpbiBkdXRlIGRhZ29raW9uIGh1dHNlZ2l0ZWFyZW4gYmVycmkgZW1hdGVuIGR1ZW4gZXJyb3JlYXJlbiAiCisibWV6dWEgaWdvcnR6ZWFuLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogcGFkIHByb2JsZW0uIgorbXNnc3RyICJHU3RyZWFtZXItZW4gYmFybmUtZXJyb3JlYTogYmV0ZWdhcnJpLWFyYXpvYS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiIKK21zZ3N0ciAiR1N0cmVhbWVyLWVuIGJhcm5lLWVycm9yZWE6IGhhcmktYXJhem9hLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCittc2dzdHIgIkdTdHJlYW1lci1lbiBiYXJuZS1lcnJvcmVhOiBuZWdvemlhemlvLWFyYXpvYS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgorbXNnc3RyICJHU3RyZWFtZXItZW4gYmFybmUtZXJyb3JlYTogZ2VydGFlcmEtYXJhem9hLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2VlayBwcm9ibGVtLiIKK21zZ3N0ciAiR1N0cmVhbWVyLWVuIGJhcm5lLWVycm9yZWE6IGJpbGFrZXRhLWFyYXpvYS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNhcHMgcHJvYmxlbS4iCittc2dzdHIgIkdTdHJlYW1lci1lbiBiYXJuZS1lcnJvcmVhOiBhaGFsbWVuLWFyYXpvYS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKK21zZ3N0ciAiR1N0cmVhbWVyLWVuIGJhcm5lLWVycm9yZWE6IGV0aWtldGEtYXJhem9hLiIKKworbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCittc2dzdHIgIkdTdHJlYW1lci1lbiBpbnN0YWxhemlvYXJpIHBsdWdpbiBiYXQgZmFsdGEgemFpby4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIgorbXNnc3RyICJHU3RyZWFtZXItZW4gYmFybmUtZXJyb3JlYTogZXJsb2p1LWFyYXpvYS4iCisKK21zZ2lkICIiCisiVGhpcyBhcHBsaWNhdGlvbiBpcyB0cnlpbmcgdG8gdXNlIEdTdHJlYW1lciBmdW5jdGlvbmFsaXR5IHRoYXQgaGFzIGJlZW4gIgorImRpc2FibGVkLiIKK21zZ3N0ciAiIgorIkdTdHJlYW1lci1lbiBmdW50emlvbmFsaXRhdGUgZGVzZ2FpdHUgYmF0IGVyYWJpbHR6ZW4gc2FpYXR6ZW4gYXJpIGRhICIKKyJhcGxpa2F6aW8gaGF1LiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3VwcG9ydGluZyBsaWJyYXJ5IGVycm9yLiIKK21zZ3N0ciAiRXVza2FycmktbGlidXJ1dGVnaWFyZW4gZXJyb3JlIG9yb2tvcnJhIHRvcGF0dSBkdSBHU3RyZWFtZXItZWsuIgorCittc2dpZCAiQ291bGQgbm90IGluaXRpYWxpemUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiRXppbiBpemFuIGRhIGV1c2thcnJpLWxpYnVydXRlZ2lhIGhhc2llcmF0dS4iCisKK21zZ2lkICJDb3VsZCBub3QgY2xvc2Ugc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiRXppbiBpemFuIGRhIGV1c2thcnJpLWxpYnVydXRlZ2lhIGl0eGkuIgorCittc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJFemluIGl6YW4gZGEgZXVza2FycmktbGlidXJ1dGVnaWEga29uZmlndXJhdHUuIgorCittc2dpZCAiRW5jb2RpbmcgZXJyb3IuIgorbXNnc3RyICIiCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHJlc291cmNlIGVycm9yLiIKK21zZ3N0ciAiQmFsaWFiaWRlLWVycm9yZSBvcm9rb3JyYSB0b3BhdHUgZHUgR1N0cmVhbWVyLWVrLiIKKworbXNnaWQgIlJlc291cmNlIG5vdCBmb3VuZC4iCittc2dzdHIgIkV6IGRhIGJhbGlhYmlkZWEgYXVya2l0dS4iCisKK21zZ2lkICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgorbXNnc3RyICJCYWxpYWJpZGVhIGxhbnBldHVhIGRhZ28gZWRvIGV6IGRhZ28gZXJhYmlsZ2FycmkuIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcuIgorbXNnc3RyICJFemluIGl6YW4gZGEgYmFsaWFiaWRlYSBpcmVraSBpcmFrdXJ0emVrby4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCittc2dzdHIgIkV6aW4gaXphbiBkYSBiYWxpYWJpZGVhIGlyZWtpIGlkYXp0ZWtvLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKK21zZ3N0ciAiRXppbiBpemFuIGRhIGJhbGlhYmlkZWEgaXJla2kgaXJha3VydHpla28gZXRhIGlkYXp0ZWtvLiIKKworbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSByZXNvdXJjZS4iCittc2dzdHIgIkV6aW4gaXphbiBkYSBiYWxpYWJpZGVhIGl0eGkuIgorCittc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCittc2dzdHIgIkV6aW4gaXphbiBkYSBiYWxpYWJpZGVhIGlyYWt1cnJpLiIKKworbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iCittc2dzdHIgIkV6aW4gaXphbiBkYSBiYWxpYWJpZGVhbiBpZGF0emkuIgorCittc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCittc2dzdHIgIkV6aW4gaXphbiBkYSBiaWxha2V0YSBlZ2luIGJhbGlhYmlkZWFuLiIKKworbXNnaWQgIkNvdWxkIG5vdCBzeW5jaHJvbml6ZSBvbiByZXNvdXJjZS4iCittc2dzdHIgIkV6aW4gaXphbiBkYSBiYWxpYWJpZGVhbiBzaW5rcm9uaXphdHUuIgorCittc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCittc2dzdHIgIkV6aW4gaXphbiBkaXJhIGV6YXJwZW5hayBlc2t1cmF0dS9lemFycmkgYmFsaWFiaWRldGlrL2JhbGlhYmlkZWFuLiIKKworbXNnaWQgIk5vIHNwYWNlIGxlZnQgb24gdGhlIHJlc291cmNlLiIKK21zZ3N0ciAiRXogZGEgbGVrdXJpayBnZXJhdHplbiBiYWxpYWJpZGVhbi4iCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN0cmVhbSBlcnJvci4iCittc2dzdHIgIktvcnJvbnRlLWVycm9yZSBvcm9rb3JyYSB0b3BhdHUgZHUgR1N0cmVhbWVyLWVrLiIKKworbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKK21zZ3N0ciAiIgorIkVsZW1lbnR1YWsgZXogZHUga29ycm9udGUgaG9ycmVuIG1hbmVpYXR6YWlsZXJpayBpbnBsZW1lbnRhdHplbi4gRWdpbiAiCisiZXJyb3JlYXJlbiB0eG9zdGVuYS4iCisKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIHR5cGUgb2Ygc3RyZWFtLiIKK21zZ3N0ciAiRXppbiBpemFuIGRhIGtvcnJvbnRlIG1vdGEgemVoYXp0dS4iCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgZWxlbWVudC4iCittc2dzdHIgIiIKKyJLb3Jyb250ZSBob3JpIGV6IGRhIGVsZW1lbnR1IGhvbmVrIG1hbmVpYXR6ZW4gZGl0dWVuIGtvcnJvbnRlZW4gbW90YSBiZXJla29hLiIKKworbXNnaWQgIlRoZXJlIGlzIG5vIGNvZGVjIHByZXNlbnQgdGhhdCBjYW4gaGFuZGxlIHRoZSBzdHJlYW0ncyB0eXBlLiIKK21zZ3N0ciAiRXogZGFnbyBrb3Jyb250ZSBtb3RhIGhvcmkgbWFuZWlhIGRlemFrZWVuIGtvZGVrIGVyYWJpbGdhcnJpcmlrLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZWNvZGUgc3RyZWFtLiIKK21zZ3N0ciAiRXppbiBpemFuIGRhIGtvcnJvbnRlYSBkZXNrb2RldHUuIgorCittc2dpZCAiQ291bGQgbm90IGVuY29kZSBzdHJlYW0uIgorbXNnc3RyICJFemluIGl6YW4gZGEga29ycm9udGVhIGtvZGV0dS4iCisKK21zZ2lkICJDb3VsZCBub3QgZGVtdWx0aXBsZXggc3RyZWFtLiIKK21zZ3N0ciAiRXppbiBpemFuIGRhIGtvcnJvbnRlYSBkZW11bHRpcGxleGF0dS4iCisKK21zZ2lkICJDb3VsZCBub3QgbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIkV6aW4gaXphbiBkYSBrb3Jyb250ZWEgbXVsdGlwbGV4YXR1LiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgaW4gdGhlIHdyb25nIGZvcm1hdC4iCittc2dzdHIgIktvcnJvbnRlYXJlbiBmb3JtYXR1YSBleiBkYSB6dXplbmEuIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iCittc2dzdHIgIktvcnJvbnRlYSBlbmtyaXB0YXR1dGEgZGFnbyBldGEgZGVzZW5rcmlwdGF0emVhIGV6IGRhZ28gb25hcnR1dGEuIgorCittc2dpZCAiIgorIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKKyJiZWVuIHN1cHBsaWVkLiIKK21zZ3N0ciAiIgorIktvcnJvbnRlYSBlbmtyaXB0YXR1dGEgZGFnbyBldGEgZXppbiBkYSBkZXNlbmtyaXB0YXR1LCBleiBiYWl0YSBnYWtvICIKKyJlZ29raXJpayBlbWFuLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMuIgorbXNnc3RyICJFeiBkYWdvIGVycm9yZS1tZXp1cmlrICVzIGRvbWVpbnVhcmVudHphdC4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKK21zZ3N0ciAiRXogZGFnbyBlcnJvcmUtbWV6dSBlc3RhbmRhcnJpayAlcyBkb21laW51YSBldGEgJWQga29kZWEgZHV0ZW5lbnR6YXQuIgorCittc2dpZCAiU2VsZWN0ZWQgY2xvY2sgY2Fubm90IGJlIHVzZWQgaW4gcGlwZWxpbmUuIgorbXNnc3RyICJIYXV0YXR1dGFrbyBlcmxvanVhIGV6aW4gZGEga2FuYWxpemF6aW9hbiBlcmFiaWxpLiIKKworbXNnaWQgInRpdGxlIgorbXNnc3RyICJpemVuYnVydWEiCisKK21zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIgorbXNnc3RyICJub3JtYWxlYW4gZXJhYmlsdHplbiBkZW4gaXplbmJ1cnVhIgorCittc2dpZCAidGl0bGUgc29ydG5hbWUiCittc2dzdHIgInRpdHVsdWFyZWtpa28gb3JkZW5hdHUiCisKK21zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJ0aXR1bHVhcmVuIGFyYWJlcmEgb3JkZW5hdHplYSIKKworbXNnaWQgImFydGlzdCIKK21zZ3N0ciAiYXJ0aXN0YSIKKworbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAiZ3JhYmF6aW9hcmVuIGFyZHVyYWR1bmEoaykiCisKK21zZ2lkICJhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgImFydGlzdGFyZWtpa28gb3JkZW5hdHUiCisKK21zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgImdyYWJhemlvYXJlbiBhcmR1cmFkdW5la2lrbyBvcmRlbmF0emVhIgorCittc2dpZCAiYWxidW0iCittc2dzdHIgImFsYnVtYSIKKworbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgorbXNnc3RyICJkYXR1IGhhdWVrIGRpdHVlbiBhbGJ1bWEiCisKK21zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKK21zZ3N0ciAiYWxidW1hcmVraWtvIG9yZGVuYXR1IgorCittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgImRhdHUgaGF1ZWsgZGl0dWVuIGFsYnVtYXJla2lrbyBvcmRlbmF0emVrbyIKKworbXNnaWQgImFsYnVtIGFydGlzdCIKK21zZ3N0ciAiYWxidW1hIGFydGlzdGEiCisKK21zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQiCittc2dzdHIgIkFsYnVtIG9zb2tvIGFydGlzdGEsIGJpc3RhcmF0dSBiZWhhcmtvIGxpdHphdGVrZWVuIGJlemFsYSIKKworbXNnaWQgImFsYnVtIGFydGlzdCBzb3J0bmFtZSIKK21zZ3N0ciAiYWxidW1hIGFydGlzdGFyZWtpa28gb3JkZW5hdHUiCisKK21zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiCittc2dzdHIgIkFsYnVtIG9zb2tvIGFydGlzdGFyZW4gYXJhYmVyYSBvcmRlbmF0emVhIgorCittc2dpZCAiZGF0ZSIKK21zZ3N0ciAiZGF0YSIKKworbXNnaWQgImRhdGUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR0RhdGUgc3RydWN0dXJlKSIKK21zZ3N0ciAiZGF0dWFrIChHRGF0ZSBlZ2l0dXJhIGdpc2EpIHNvcnR1IHppcmVuZWtvIGRhdGEiCisKKyMsIGZ1enp5Cittc2dpZCAiZGF0ZXRpbWUiCittc2dzdHIgImRhdGEiCisKKyMsIGZ1enp5Cittc2dpZCAiZGF0ZSBhbmQgdGltZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHc3REYXRlVGltZSBzdHJ1Y3R1cmUpIgorbXNnc3RyICJkYXR1YWsgKEdEYXRlIGVnaXR1cmEgZ2lzYSkgc29ydHUgemlyZW5la28gZGF0YSIKKworbXNnaWQgImdlbnJlIgorbXNnc3RyICJnZW5lcm9hIgorCittc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCittc2dzdHIgImRhdHUgaG9yaWVrIHplciBnZW5lcm90YWtvYWsgZGlyZW4iCisKK21zZ2lkICJjb21tZW50IgorbXNnc3RyICJpcnV6a2luYSIKKworbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIgorbXNnc3RyICJkYXR1ZWkgYnVydXprbyBpcnV6a2luYSAodGVzdHUgbGlicmVhKSIKKworbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCittc2dzdHIgImlydXpraW4gaGVkYXR1YSIKKworbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIGluIGtleT12YWx1ZSBvciBrZXlbZW5dPWNvbW1lbnQgZm9ybSIKK21zZ3N0ciAiIgorImRhdHVlbiBpcnV6a2luYSBkdWVuIHRlc3R1IGxpYnJlYSwgZ2Frb2E9YmFsaW9hIGVkbyBrZXlbZW5dPWlydXpraW5hIGZvcm1ha29hIgorCittc2dpZCAidHJhY2sgbnVtYmVyIgorbXNnc3RyICJwaXN0YS16ZW5iYWtpYSIKKworbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICJwaXN0YS16ZW5iYWtpYSwgYmlsZHVtYSBiYXRlYW4iCisKK21zZ2lkICJ0cmFjayBjb3VudCIKK21zZ3N0ciAicGlzdGEta29wdXJ1YSIKKworbXNnaWQgImNvdW50IG9mIHRyYWNrcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIHRyYWNrIGJlbG9uZ3MgdG8iCittc2dzdHIgInBpc3RhLWtvcHVydWEsIHBpc3RhIGhvcmkgZGF1a2FuIGJpbGR1bWFuIgorCittc2dpZCAiZGlzYyBudW1iZXIiCittc2dzdHIgImRpc2tvLXplbmJha2lhIgorCittc2dpZCAiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKK21zZ3N0ciAiZGlza28temVuYmFraWEsIGJpbGR1bWEgYmF0ZWFuIgorCittc2dpZCAiZGlzYyBjb3VudCIKK21zZ3N0ciAiZGlza28ta29wdXJ1YSIKKworbXNnaWQgImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIgorbXNnc3RyICJkaXNrby1rb3B1cnVhLCBkaXNrbyBob3JpIGRhdWthbiBiaWxkdW1hbiIKKworbXNnaWQgImxvY2F0aW9uIgorbXNnc3RyICJrb2thbGVrdWEiCisKK21zZ2lkICIiCisiT3JpZ2luIG9mIG1lZGlhIGFzIGEgVVJJIChsb2NhdGlvbiwgd2hlcmUgdGhlIG9yaWdpbmFsIG9mIHRoZSBmaWxlIG9yIHN0cmVhbSAiCisiaXMgaG9zdGVkKSIKK21zZ3N0ciAiIgorIk11bHRpbWVkaWFyZW4gamF0b3JyaWEgVVJJIGdpc2EgKGphdG9ycmlrbyBmaXR4YXRlZ2lhIGVkbyBrb3Jyb250ZWEgZGFnb2VuICIKKyJrb2thbGVrdWEpIgorCittc2dpZCAiaG9tZXBhZ2UiCittc2dzdHIgIm9ycmlhbGRlIG5hZ3VzaWEiCisKK21zZ2lkICJIb21lcGFnZSBmb3IgdGhpcyBtZWRpYSAoaS5lLiBhcnRpc3Qgb3IgbW92aWUgaG9tZXBhZ2UpIgorbXNnc3RyICIiCisiTXVsdGltZWRpYSBob25lbiBvcnJpYWxkZSBuYWd1c2lhIChhZGliLiBhcnRpc3RhcmVuIGVkbyBmaWxtYXJlbiB3ZWJndW5lYSkiCisKK21zZ2lkICJkZXNjcmlwdGlvbiIKK21zZ3N0ciAiZGVza3JpYmFwZW5hIgorCittc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgorbXNnc3RyICJkYXR1ZW4gZWR1a2lhIGRlc2tyaWJhdHplbiBkdWVuIHRlc3R1IGxhYnVycmEiCisKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICJiZXJ0c2lvYSIKKworbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgorbXNnc3RyICJkYXR1IGhvcmllbiBiZXJ0c2lvYSIKKworbXNnaWQgIklTUkMiCittc2dzdHIgIklTUkMiCisKK21zZ2lkICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCittc2dzdHIgIiIKKyJOYXppb2FydGVrbyBlc3RhbmRhcnJlYW4gb2luYXJyaXR1dGFrbyBncmFiYXR6ZS1rb2RlYSAoSVNSQykgLSBpa3VzIGh0dHA6Ly8iCisid3d3LmlmcGkub3JnL2lzcmMvIgorCittc2dpZCAib3JnYW5pemF0aW9uIgorbXNnc3RyICJlcmFrdW5kZWEiCisKK21zZ2lkICJjb3B5cmlnaHQiCittc2dzdHIgImNvcHlyaWdodGEiCisKK21zZ2lkICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJkYXR1ZW4gZWdpbGUtZXNrdWJpZGVlaSBidXJ1emtvIGluZm9ybWF6aW9hIgorCittc2dpZCAiY29weXJpZ2h0IHVyaSIKK21zZ3N0ciAiY29weXJpZ2h0YXJlbiBVUklhIgorCittc2dpZCAiVVJJIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJkYXR1ZW4gZWdpbGUtZXNrdWJpZGVlaSBidXJ1emtvIGluZm9ybWF6aW9hIGF0eml0emVrbyBVUklhIgorCisjLCBmdXp6eQorbXNnaWQgImVuY29kZWQgYnkiCittc2dzdHIgImtvZGV0emFpbGVhIgorCittc2dpZCAibmFtZSBvZiB0aGUgZW5jb2RpbmcgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiIKK21zZ3N0ciAiIgorCittc2dpZCAiY29udGFjdCIKK21zZ3N0ciAia29udGFrdHVhIgorCittc2dpZCAiY29udGFjdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAia29udGFrdHVhcmkgYnVydXprbyBpbmZvcm1hemlvYSIKKworbXNnaWQgImxpY2Vuc2UiCittc2dzdHIgImxpemVudHppYSIKKworbXNnaWQgImxpY2Vuc2Ugb2YgZGF0YSIKK21zZ3N0ciAiZGF0dWVuIGxpemVudHppYSIKKworbXNnaWQgImxpY2Vuc2UgdXJpIgorbXNnc3RyICJsaXplbnR6aWFyZW4gVVJJYSIKKworbXNnaWQgIlVSSSB0byB0aGUgbGljZW5zZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiZGF0dWVuIGxpemVudHppYSBhdHppdHpla28gVVJJYSIKKworbXNnaWQgInBlcmZvcm1lciIKK21zZ3N0ciAiaW50ZXJwcmV0ZWEiCisKK21zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKK21zZ3N0ciAiaW50ZXJwcmV0YXR6ZW4gYXJpIGQoaXIpZW5hKGspIgorCittc2dpZCAiY29tcG9zZXIiCittc2dzdHIgImtvbnBvc2l0b3JlYSIKKworbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAiZ3JhYmF6aW9hIGtvbnBvc2F0dSB6dWVuIGFyZHVyYWR1bmEiCisKK21zZ2lkICJkdXJhdGlvbiIKK21zZ3N0ciAiaXJhdXBlbmEiCisKK21zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKK21zZ3N0ciAiaXJhdXBlbmEgR1N0cmVhbWVyLWVuIGRlbmJvcmEtdW5pdGF0ZWV0YW4gKG5hbm9zZWd1bmRvYWspIgorCittc2dpZCAiY29kZWMiCittc2dzdHIgImtvZGVrYSIKKworbXNnaWQgImNvZGVjIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiZGF0dWFrIHplciBrb2Rla2V0YW4gZ29yZGVhayBkYXVkZW4iCisKK21zZ2lkICJ2aWRlbyBjb2RlYyIKK21zZ3N0ciAiYmlkZW8ta29kZWthIgorCittc2dpZCAiY29kZWMgdGhlIHZpZGVvIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJiaWRlby1kYXR1YWsgemVyIGtvZGVrZXRhbiBnb3JkZWFrIGRhdWRlbiIKKworbXNnaWQgImF1ZGlvIGNvZGVjIgorbXNnc3RyICJhdWRpby1rb2Rla2EiCisKK21zZ2lkICJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImF1ZGlvLWRhdHVhayB6ZXIga29kZWtldGFuIGdvcmRlYWsgZGF1ZGVuIgorCittc2dpZCAic3VidGl0bGUgY29kZWMiCittc2dzdHIgImF6cGl0aXR1bHVhcmVuIGtvZGVrYSIKKworbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiYXpwaXRpdHVsdWFrIHplciBrb2Rla2V0YW4gZ29yZGVhayBkYXVkZW4iCisKK21zZ2lkICJjb250YWluZXIgZm9ybWF0IgorbXNnc3RyICJvbnR6aWFyZW4gZm9ybWF0dWEiCisKK21zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiZGF0dWFrIHplaW4gb250emkgZm9ybWF0dWFuIGdvcmRlYWsgZGF1ZGVuIgorCittc2dpZCAiYml0cmF0ZSIKK21zZ3N0ciAiYml0LWVtYXJpYSIKKworbXNnaWQgImV4YWN0IG9yIGF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgImJpdC1lbWFyaSB6ZWhhdHphIGVkbyBiYXRleiBiZXN0ZWtvYSAoYml0L3MpIgorCittc2dpZCAibm9taW5hbCBiaXRyYXRlIgorbXNnc3RyICJiaXQtZW1hcmkgaXplbmRhdHVhIgorCittc2dpZCAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAiYml0LWVtYXJpIGl6ZW5kYXR1YSAoYml0L3MpIgorCittc2dpZCAibWluaW11bSBiaXRyYXRlIgorbXNnc3RyICJndXR4aWVuZWtvIGJpdC1lbWFyaWEiCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJndXR4aWVuZWtvIGJpdC1lbWFyaSBpemVuZGF0dWEgKGJpdC9zKSIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSIKK21zZ3N0ciAiZ2VoaWVuZXprbyBiaXQtZW1hcmlhIgorCittc2dpZCAibWF4aW11bSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAiZ2VoaWVuZXprbyBiaXQtZW1hcmlhIChiaXQvcykiCisKK21zZ2lkICJlbmNvZGVyIgorbXNnc3RyICJrb2RldHphaWxlYSIKKworbXNnaWQgImVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCittc2dzdHIgImtvcnJvbnRlIGhhdSBrb2RldHpla28gZXJhYmlsaSBkZW4ga29kZXR6YWlsZWEiCisKK21zZ2lkICJlbmNvZGVyIHZlcnNpb24iCittc2dzdHIgImtvZGV0emFpbGVhcmVuIGJlcnRzaW9hIgorCittc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAia29ycm9udGUgaGF1IGtvZGV0emVrbyBlcmFiaWxpIGRlbiBrb2RldHphaWxlYXJlbiBiZXJ0c2lvYSIKKworbXNnaWQgInNlcmlhbCIKK21zZ3N0ciAic2VyaWVrb2EiCisKK21zZ2lkICJzZXJpYWwgbnVtYmVyIG9mIHRyYWNrIgorbXNnc3RyICJwaXN0YXJlbiBzZXJpZS16ZW5iYWtpYSIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKK21zZ3N0ciAicmVwbGF5Z2FpbiBwaXN0YS1pcmFiYXppYSIKKworbXNnaWQgInRyYWNrIGdhaW4gaW4gZGIiCittc2dzdHIgInBpc3RhLWlyYWJhemlhIChkYikiCisKK21zZ2lkICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCittc2dzdHIgInJlcGxheWdhaW4gcGlzdGEtZ2FpbHVycmEiCisKK21zZ2lkICJwZWFrIG9mIHRoZSB0cmFjayIKK21zZ3N0ciAicGlzdGFyZW4gZ2FpbHVycmEiCisKK21zZ2lkICJyZXBsYXlnYWluIGFsYnVtIGdhaW4iCittc2dzdHIgInJlcGxheWdhaW4gYWxidW0taXJhYmF6aWEiCisKK21zZ2lkICJhbGJ1bSBnYWluIGluIGRiIgorbXNnc3RyICJhbGJ1bS1pcmFiYXppYSAoZGIpIgorCittc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBwZWFrIgorbXNnc3RyICJyZXBsYXlnYWluIGFsYnVtLWdhaWx1cnJhIgorCittc2dpZCAicGVhayBvZiB0aGUgYWxidW0iCittc2dzdHIgImFsYnVtYXJlbiBnYWlsdXJyYSIKKworbXNnaWQgInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIgorbXNnc3RyICJyZXBsYXlnYWluIGVycmVmZXJlbnR6aWEtbWFpbGEiCisKK21zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgorbXNnc3RyICJwaXN0YXJlbiBldGEgYWxidW1hcmVuIGlyYWJhemktYmFsaW9lbiBlcnJlZmVyZW50emlhLW1haWxhIgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSIKK21zZ3N0ciAiaGl6a3VudHphLWtvZGVhIgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIgorbXNnc3RyICJrb3Jyb250ZSBob25lbiBoaXprdW50emEta29kZWEsIElTTy02MzktMWVuIGFyYWJlcmEiCisKK21zZ2lkICJpbWFnZSIKK21zZ3N0ciAiaXJ1ZGlhIgorCittc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAia29ycm9udGUgaG9uaSBsb3R1dGFrbyBpcnVkaWEiCisKKyMuIFRSQU5TTEFUT1JTOiAncHJldmlldyBpbWFnZScgPSBpbWFnZSB0aGF0IHNob3dzIGEgcHJldmlldyBvZiB0aGUgZnVsbCBpbWFnZQorbXNnaWQgInByZXZpZXcgaW1hZ2UiCittc2dzdHIgImF1cnJlYmlzdGEtaXJ1ZGlhIgorCittc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICJrb3Jyb250ZSBob25pIGxvdHV0YWtvIGF1cnJlYmlzdGEtaXJ1ZGlhIgorCittc2dpZCAiYXR0YWNobWVudCIKK21zZ3N0ciAiZXJhbnNraW5hIgorCittc2dpZCAiZmlsZSBhdHRhY2hlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAia29ycm9udGUgaG9uaSBlcmFudHNpdGFrbyBmaXR4YXRlZ2lhIgorCittc2dpZCAiYmVhdHMgcGVyIG1pbnV0ZSIKK21zZ3N0ciAiZ29scGUgbWludXR1a28iCisKK21zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKK21zZ3N0ciAibWludXR1a28gZ29scGUga29wdXJ1YSwgYXVkaW9hbiIKKworbXNnaWQgImtleXdvcmRzIgorbXNnc3RyICJnYWtvLWhpdHphayIKKworbXNnaWQgImNvbW1hIHNlcGFyYXRlZCBrZXl3b3JkcyBkZXNjcmliaW5nIHRoZSBjb250ZW50IgorbXNnc3RyICJlZHVraWEgZGVza3JpYmF0emVuIGR1dGVuIGtvbWF6IGJlcmVpenR1dGFrbyBnYWtvLWhpdHphayIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBuYW1lIgorbXNnc3RyICJnZW9sb2thbGl6YXppb2FyZW4gaXplbmEiCisKK21zZ2lkICIiCisiaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpdmUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yICIKKyJwcm9kdWNlZCIKK21zZ3N0ciAiIgorIm11bHRpbWVkaWEgZ3JhYmF0dSBlZG8gZWtvaXp0dSBkZW4ga29rYWxla3VhcmVuIGF6YWxwZW5hIGdpemFraW9rIGlyYWt1cnR6ZWtvIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGxhdGl0dWRlIgorbXNnc3RyICJnZW9sb2thbGl6YXppb2FyZW4gbGF0aXR1ZGVhIgorCittc2dpZCAiIgorImdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yICIKKyJzb3V0aGVybiBsYXRpdHVkZXMpIgorbXNnc3RyICIiCisibXVsdGltZWRpYSBncmFiYXR1IGVkbyBla29penR1IGRlbiBsZWt1YXJlbiBnZW9sb2thbGl6YXppb2FyZW4gbGF0aXR1ZGVhICIKKyJncmFkdXRhbiBXR1M4NCBlc3RhbmRhcnJhcmVuIGFyYWJlcmEgKHplcm8gZWt1YXRvcmVhIGRhLCBiYWxpbyBuZWdhdGlib2FrICIKKyJoZWdvYWxkZWtvIGxhdGl0dWRlYWsgZGlyYSkiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbG9uZ2l0dWRlIgorbXNnc3RyICJnZW9sb2thbGl6YXppb2FyZW4gbG9uZ2l0dWRlYSIKKworbXNnaWQgIiIKKyJnZW8gbG9uZ2l0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCisiZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIHByaW1lIG1lcmlkaWFuIGluIEdyZWVud2ljaC9VSywgICIKKyJuZWdhdGl2ZSB2YWx1ZXMgZm9yIHdlc3Rlcm4gbG9uZ2l0dWRlcykiCittc2dzdHIgIiIKKyJtdWx0aW1lZGlhIGdyYWJhdHUgZWRvIGVrb2l6dHUgZGVuIGxla3VhcmVuIGdlb2xva2FsaXphemlvYXJlbiBsb25naXR1ZGVhICIKKyJncmFkdXRhbiBXR1M4NCBlc3RhbmRhcnJhcmVuIGFyYWJlcmEgKHplcm8gbWVyaWRpYW5vIG5hZ3VzaWEgZGEgQnJpdGFpbmlhICIKKyJIYW5kaWtvIEdyZWVud2ljaC1lbiwgYmFsaW8gbmVnYXRpYm9hayBtZW5kZWJhbGRla28gbG9uZ2l0dWRlYWsgZGlyYSkiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gZWxldmF0aW9uIgorbXNnc3RyICJnZW9sb2thbGl6YXppb2FyZW4gYWx0aXR1ZGVhIgorCittc2dpZCAiIgorImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCisiYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKK21zZ3N0ciAiIgorIm11bHRpbWVkaWEgZ3JhYmF0dSBlZG8gZWtvaXp0dSBkZW4gbGVrdWFyZW4gZ2VvbG9rYWxpemF6aW9hcmVuIGFsdGl0dWRlYSAiCisibWV0cm90YW4gV0dTODQgZXN0YW5kYXJyYXJlbiBhcmFiZXJhICh6ZXJvIGJhdGV6IGJlc3Rla28gaXRzYXNvYXJlbiBtYWlsYSBkYSkiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gY291bnRyeSIKK21zZ3N0ciAiZ2VvbG9rYWxpemF6aW9hcmVuIGVzdGF0dWEiCisKK21zZ2lkICJjb3VudHJ5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKK21zZ3N0ciAibXVsZGltZWRpYSBncmFiYXR1IGVkbyBla29penR1IGRlbiBlc3RhdHVhIChpbmdlbGVzZXprbyBpemVuYSkiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKK21zZ3N0ciAiZ2VvbG9rYWxpemF6aW9hcmVuIGhlcnJpYSIKKworbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICJtdWxkaW1lZGlhIGdyYWJhdHUgZWRvIGVrb2l6dHUgZGVuIGhlcnJpYSAoaW5nZWxlc2V6a28gaXplbmEpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIHN1YmxvY2F0aW9uIgorbXNnc3RyICJnZW9sb2thbGl6YXppb2FyZW4gYXpwaWtva2FsZWt1YSIKKworbXNnaWQgIiIKKyJhIGxvY2F0aW9uIHdoaXRoaW4gYSBjaXR5IHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZCBvciBjcmVhdGVkIChlLmcuICIKKyJ0aGUgbmVpZ2hib3Job29kKSIKK21zZ3N0ciAibXVsZGltZWRpYSBncmFiYXR1IGVkbyBla29penR1IGRlbiBoZXJyaWtvIGtva2FsZWt1IGJhdCAoYWRpYiwgYXV6b2EpIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgorbXNnc3RyICJnZW9sb2thbGl6YXppb2FyZW4gaXplbmEiCisKK21zZ2lkICJleHBlY3RlZCBlcnJvciBvZiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbmluZyBtZWFzdXJlcyAoaW4gbWV0ZXJzKSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKK21zZ3N0ciAiZ2VvbG9rYWxpemF6aW9hcmVuIGxvbmdpdHVkZWEiCisKK21zZ2lkICIiCisibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBpbiBtL3MiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgorbXNnc3RyICJnZW9sb2thbGl6YXppb2FyZW4gYWx0aXR1ZGVhIgorCittc2dpZCAiIgorImluZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBvZiBhICIKKyJtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgMCAiCisibWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgorbXNnc3RyICJnZW9sb2thbGl6YXppb2FyZW4gYWx0aXR1ZGVhIgorCittc2dpZCAiIgorImluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcgIGEgbWVkaWEuICIKKyJJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50ICByZXByZXNlbnRhdGlvbiwgMCBtZWFucyB0aGUgIgorImdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZScgaGVyZQorbXNnaWQgInNob3cgbmFtZSIKK21zZ3N0ciAiaWt1c2tpenVuYXJlbiBpemVuYSIKKworbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCittc2dzdHIgIlRiL3BvZGNhc3Qvc2VyaWVlbiBpa3Vza2l6dW5hcmVuIGl6ZW5hIgorCisjLiBUUkFOU0xBVE9SUzogJ3Nob3cgc29ydG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lIGFzIHVzZWQgZm9yIHNvcnRpbmcgcHVycG9zZXMnIGhlcmUKK21zZ2lkICJzaG93IHNvcnRuYW1lIgorbXNnc3RyICJpa3Vza2l6dW5hcmVuIG9yZGVuYXR6ZS1pemVuYSIKKworbXNnaWQgIiIKKyJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiVGIvcG9kY2FzdC9zZXJpZWVuIGlrdXNraXp1bmFyZW4gaXplbmEsIG9yZGVuYXR6ZWtvIGhlbGJ1cnVhcmVraW4iCisKK21zZ2lkICJlcGlzb2RlIG51bWJlciIKK21zZ3N0ciAicGFzYXJ0ZWFyZW4gemVuYmFraWEiCisKK21zZ2lkICJUaGUgZXBpc29kZSBudW1iZXIgaW4gdGhlIHNlYXNvbiB0aGUgbWVkaWEgaXMgcGFydCBvZiIKK21zZ3N0ciAiRGVuYm9yYWxkaWtvIHBhc2FydGVhcmVuIHplbmJha2lhIgorCittc2dpZCAic2Vhc29uIG51bWJlciIKK21zZ3N0ciAiZGVuYm9yYWxkaWFyZW4gemVuYmFraWEiCisKK21zZ2lkICJUaGUgc2Vhc29uIG51bWJlciBvZiB0aGUgc2hvdyB0aGUgbWVkaWEgaXMgcGFydCBvZiIKK21zZ3N0ciAiSWt1c2tpenVuYXJlbiBkZW5ib3JhbGRpYXJlbiB6ZW5iYWtpYSIKKworbXNnaWQgImx5cmljcyIKK21zZ3N0ciAibGlyaWthIgorCittc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgorbXNnc3RyICJNdWx0aW1lZGlhcmVuIGxpcmlrYSwgYmF0aWsgYmF0IGFiZXN0aWV0YW4gZXJhYmlsaXRhIgorCittc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCittc2dzdHIgImtvbnBvc2l0b3JlYXJlbiBvcmRlbmF0emUtaXplbmEiCisKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJncmFiYXppb2FyZW4ga29ucG9zYXR1IHp1dGVuIHBlcnRzb25haywgb3JkZW5hdHpla28gaGVsYnVydWFyZWtpbiIKKworbXNnaWQgImdyb3VwaW5nIgorbXNnc3RyICJ0YWxkZWthdHplYSIKKworbXNnaWQgIiIKKyJHcm91cHMgcmVsYXRlZCBtZWRpYSB0aGF0IHNwYW5zIG11bHRpcGxlIHRyYWNrcywgbGlrZSB0aGUgZGlmZmVyZW50IHBpZWNlcyAiCisib2YgYSBjb25jZXJ0by4gSXQgaXMgYSBoaWdoZXIgbGV2ZWwgdGhhbiBhIHRyYWNrLCBidXQgbG93ZXIgdGhhbiBhbiBhbGJ1bSIKK21zZ3N0ciAiIgorIlplcmlrdXNpYSBkaXR1enRlbiBwaXN0YWsgZWxrYXJ0emVuIGRpdHUsIGtvbnR6ZXJ0dSBiYXRla28gemF0aSBkZXNiZXJkaW5hayAiCisiYmV6YWxhLiBQaXN0YSBiYXQgYmFpbm8gZ2VoaWFnbyBkYSwgYmFpbmEgZXogZGEgaXJpc3RlbiBhbGJ1bSBiYXRlbiB0YW1haW5hcmEiCisKK21zZ2lkICJ1c2VyIHJhdGluZyIKK21zZ3N0ciAiZXJhYmlsdHphaWxlYXJlbiBiYWxvcmF6aW9hIgorCittc2dpZCAiIgorIlJhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgdXNlci4gVGhlIGhpZ2hlciB0aGUgcmFuaywgdGhlIG1vcmUgdGhlIHVzZXIgbGlrZXMgIgorInRoaXMgbWVkaWEiCittc2dzdHIgIiIKKyJFcmFiaWx0emFpbGUgYmF0ZWsgZW1hbmRha28gYmFsb3JhemlvYS4gUHVudHVhemlvYSB6ZW5iYXQgZXRhIGFsdHVhZ29hIGl6YW4sICIKKyJhcmUgZXRhIGdlaGlhZ28gYXRzZWdpbiB6YWlvIGVyYWJpbHR6YWlsZWFyaSBtdWx0aW1lZGlhIGhhdSIKKworbXNnaWQgImRldmljZSBtYW51ZmFjdHVyZXIiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICJrb3Jyb250ZSBoYXUga29kZXR6ZWtvIGVyYWJpbGkgZGVuIGtvZGV0emFpbGVhcmVuIGJlcnRzaW9hIgorCittc2dpZCAiZGV2aWNlIG1vZGVsIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICJrb3Jyb250ZSBoYXUga29kZXR6ZWtvIGVyYWJpbGkgZGVuIGtvZGV0emFpbGVhcmVuIGJlcnRzaW9hIgorCisjLCBmdXp6eQorbXNnaWQgImFwcGxpY2F0aW9uIG5hbWUiCittc2dzdHIgImdlb2xva2FsaXphemlvYXJlbiBpemVuYSIKKworIywgZnV6enkKK21zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCittc2dzdHIgImtvcnJvbnRlIGhhdSBrb2RldHpla28gZXJhYmlsaSBkZW4ga29kZXR6YWlsZWFyZW4gYmVydHNpb2EiCisKK21zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgorbXNnc3RyICIiCisKK21zZ2lkICJBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIG1lZGlhIgorbXNnc3RyICIiCisKK21zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKK21zZ3N0ciAiIgorCittc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgorbXNnc3RyICIiCisKK21zZ2lkICIsICIKK21zZ3N0ciAiLCAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAiRVJST1JFQTogJXMgZWxlbWVudHVhcmVuYTogJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQWRkaXRpb25hbCBkZWJ1ZyBpbmZvOlxuIgorIiVzXG4iCittc2dzdHIgIiIKKyJBcmF6a2V0YS1pbmZvcm1hemlvIGdlaGlnYXJyaWE6XG4iCisiJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJzcGVjaWZpZWQgZW1wdHkgYmluIFwiJXNcIiwgbm90IGFsbG93ZWQiCittc2dzdHIgIlwiJXNcIiB6ZWhhenR1dGFrbyBvbnR6aSBodXRzYSwgZXogZGEgb25hcnR6ZW4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYmluIFwiJXNcIiwgc2tpcHBpbmciCittc2dzdHIgImV6IGRhZ28gXCIlc1wiIG9udHppcmlrLCBzYWx0YXR6ZW4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICJleiBkYWdvIFwiJXNcIiBwcm9waWV0YXRlcmlrIFwiJXNcIiBlbGVtZW50dWFuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKK21zZ3N0ciAiIgorImV6aW4gaXphbiBkYSBlemFycmkgXCIlMiRzXCIgZWxlbWVudHVrbyBcIiUxJHNcIiBwcm9waWV0YXRlYSBob25lbGE6IFwiJTMkc1wiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgorbXNnc3RyICJlemluIGl6YW4gZGEgJXMgZXN0ZWthdHUgaG9uYTogJXMiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCittc2dzdHIgImV6IGRhZ28gXCIlc1wiIGVsZW1lbnR1YSIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCittc2dzdHIgImV6aW4gaXphbiBkYSBcIiVzXCIgZWR1a2llcmEgYW5hbGl6YXR1IgorCittc2dpZCAibGluayB3aXRob3V0IHNvdXJjZSBlbGVtZW50IgorbXNnc3RyICJpdHVyYnVydS1lbGVtZW50dXJpayBnYWJla28gZXN0ZWthIgorCittc2dpZCAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKK21zZ3N0ciAia29sZWt0b3JlLWVsZW1lbnR1cmlrIGdhYmVrbyBlc3Rla2EiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgImV6IGRhIGl0dXJidXJ1LWVsZW1lbnR1cmlrIGV6YXJyaSBcIiVzXCIgVVJJYXJlbnR6YXQiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCB0byBsaW5rIFVSSSBcIiVzXCIgdG8iCittc2dzdHIgImV6IGRhZ28gZWxlbWVudHVyaWsgXCIlc1wiIFVSSWEgaG9uYSBlc3Rla2F0emVrbzoiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJleiBkYSBrb2xla3RvcmUtZWxlbWVudHVyaWsgZXphcnJpIFwiJXNcIiBVUklhcmVudHphdCIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbGluayBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgImV6aW4gaXphbiBkYSBrb2xla3RvcmUtZWxlbWVudHVhIGVzdGVrYXR1IFwiJXNcIiBVUklhcmVudHphdCIKKworbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgorbXNnc3RyICJleiBkaXJhIG9uYXJ0emVuIGthbmFsaXphemlvIGh1dHNhayIKKworbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKK21zZ3N0ciAiRXJsb2p1YXJlbiBiYXJuZS1lcnJvcmVhLiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCittc2dzdHIgIkRhdHUtZmx1eHVhcmVuIGJhcm5lLWVycm9yZWEuIgorCittc2dpZCAiQSBsb3Qgb2YgYnVmZmVycyBhcmUgYmVpbmcgZHJvcHBlZC4iCittc2dzdHIgIkJ1ZmZlciBhc2tvIGphcmVnaXRlbiBhcmkgZGlyYS4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCittc2dzdHIgIkRhdHUtZmx1eHVhcmVuIGJhcm5lLWFyYXpvYS4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCittc2dzdHIgIkRhdHUta29ycm9udGVhcmVuIGJhcm5lLWVycm9yZWEuIgorCittc2dpZCAiRmlsdGVyIGNhcHMiCittc2dzdHIgIklyYWdhenBlbi1haGFsbWVuYSIKKworbXNnaWQgIiIKKyJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKKyJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgorbXNnc3RyICIiCisiTXVnYXR1IG9uYXIgZGFpdGV6a2VlbiBhaGFsbWVuYWsgKE5VTExlayBFRE9aRVIgYWRpZXJhenRlbiBkdSkuIFByb3BpZXRhdGUgIgorImhvcmkgZXphcnR6ZW4gYmFkYSwgZW1hbmRha28gR3N0Q2FwcyBvYmpla3R1YXJlbiBlcnJlZmVyZW50emlhIGhhcnR6ZW4gZHUuIgorCittc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3Igd3JpdGluZy4iCittc2dzdHIgIkV6IGRhIGZpdHhhdGVnaS1pemVuaWsgemVoYXp0dSBpZGF6dGVrby4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJFemluIGl6YW4gZGEgXCIlc1wiIGZpdHhhdGVnaWEgaXJla2kgaWRhenRla28uIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNsb3NpbmcgZmlsZSBcIiVzXCIuIgorbXNnc3RyICJFcnJvcmVhIGdlcnRhdHUgZGEgXCIlc1wiIGZpdHhhdGVnaWEgaXh0ZWFuLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiRXJyb3JlYSBnZXJ0YXR1IGRhIFwiJXNcIiBmaXR4YXRlZ2lhbiBiaWxha2V0YSBlZ2l0ZWFuLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiRXJyb3JlYSBnZXJ0YXR1IGRhIFwiJXNcIiBmaXR4YXRlZ2lhbiBpZGF6dGVhbi4iCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiRXogZGEgZml0eGF0ZWdpLWl6ZW5payB6ZWhhenR1IGlyYWt1cnR6ZWtvLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCittc2dzdHIgIkV6aW4gaXphbiBkYSBcIiVzXCIgZml0eGF0ZWdpYSBpcmVraSBpcmFrdXJ0emVrby4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCittc2dzdHIgIkV6aW4gaXphbiBkYSBcIiVzXCIoZSlrbyBpbmZvcm1hemlvYSBlc2t1cmF0dS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiXCIlc1wiIGlzIGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiXCIlc1wiIGRpcmVrdG9yaW9hIGRhLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFwiJXNcIiBpcyBhIHNvY2tldC4iCittc2dzdHIgIlwiJXNcIiBmaXR4YXRlZ2lhIHNvY2tldC1hIGRhLiIKKworbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCittc2dzdHIgIkh1dHMgZWdpbiBkdSBlc2thdHV0YWtvIGl0ZXJhemlvYWsgZWdpbiBvbmRvcmVuLiIKKworbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCittc2dzdHIgIkV6IGRhIGFsZGkgYmF0ZXJha28gZGlyZWt0b3Jpb3JpayB6ZWhhenR1LiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIgorbXNnc3RyICJFemluIGl6YW4gZGEgXCIlc1wiIGFsZGkgYmF0ZXJha28gZml0eGF0ZWdpYSBzb3J0dS4iCisKKyMsIGZ1enp5Cittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKK21zZ3N0ciAiRXJyb3JlYSBnZXJ0YXR1IGRhIFwiJXNcIiBmaXR4YXRlZ2lhbiBpZGF6dGVhbi4iCisKK21zZ2lkICJjYXBzIgorbXNnc3RyICJhaGFsbWVuYWsiCisKK21zZ2lkICJkZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtIgorbXNnc3RyICJhaGFsbWVuYWsgZGV0ZWt0YXR1IGRpcmEga29ycm9udGVhbiIKKworbXNnaWQgIm1pbmltdW0iCittc2dzdHIgImd1dHhpZW5la29hIgorCittc2dpZCAibWF4aW11bSIKK21zZ3N0ciAiZ2VoaWVuZXprb2EiCisKK21zZ2lkICJmb3JjZSBjYXBzIgorbXNnc3RyICJkZXJyaWdvcnR1IGdhaXRhc3VuYWsiCisKK21zZ2lkICJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIKK21zZ3N0ciAiZGVycmlnb3J0dSBnYWl0YXN1bmFrIG1vdGFyZW4gYmlsYWtldGEgbGFuZHUgZ2FiZSIKKworbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKK21zZ3N0ciAiS29ycm9udGVhayBleiBkdSBkYXR1cmlrLiIKKworbXNnaWQgIkltcGxlbWVudGVkIEludGVyZmFjZXM6XG4iCittc2dzdHIgIklucGxlbWVudGF0dXRha28gaW50ZXJmYXplYWs6XG4iCisKK21zZ2lkICJyZWFkYWJsZSIKK21zZ3N0ciAiaXJha3VyIGRhaXRla2VlbmEiCisKK21zZ2lkICJ3cml0YWJsZSIKK21zZ3N0ciAiaWRhdHogZGFpdGVrZWVuYSIKKworbXNnaWQgImNvbnRyb2xsYWJsZSIKK21zZ3N0ciAia29udHJvbGEgZGFpdGVrZWVuYSIKKworbXNnaWQgImNoYW5nZWFibGUgaW4gTlVMTCwgUkVBRFksIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCwgUkVBRFkgb3IgUEFVU0VEIHN0YXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKK21zZ3N0ciAiIgorCittc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgorbXNnc3RyICJaZXJyZW5kYSBiZWx0emVrbyBmaXR4YXRlZ2lhazoiCisKK21zZ2lkICJUb3RhbCBjb3VudDogIgorbXNnc3RyICJLb3B1cnUgb3NvYTogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdGVkIGZpbGUiCittc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdGVkIGZpbGVzIgorbXNnc3RyWzBdICJ6ZXJyZW5kYSBiZWx0emVrbyBmaXR4YXRlZ2kgJWQiCittc2dzdHJbMV0gInplcnJlbmRhIGJlbHR6ZWtvICVkIGZpdHhhdGVnaSIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBwbHVnaW4iCittc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCittc2dzdHJbMF0gIiVkIHBsdWdpbiIKK21zZ3N0clsxXSAiJWQgcGx1Z2luIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdCBlbnRyeSIKK21zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0IGVudHJpZXMiCittc2dzdHJbMF0gInplcnJlbmRhIGJlbHR6ZWtvIHNhcnJlcmEgJWQiCittc2dzdHJbMV0gInplcnJlbmRhIGJlbHR6ZWtvICVkIHNhcnJlcmEiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgZmVhdHVyZSIKK21zZ2lkX3BsdXJhbCAiJWQgZmVhdHVyZXMiCittc2dzdHJbMF0gIiVkIGVnaW5iaWRlIgorbXNnc3RyWzFdICIlZCBlZ2luYmlkZSIKKworbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKK21zZ3N0ciAiSW5wcmltYXR1IGVsZW1lbnR1IGd1enRpYWsiCisKK21zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgorbXNnc3RyICJFcmFrdXRzaSB6ZXJyZW5kYSBiZWx0emVrbyBmaXR4YXRlZ2llbiB6ZXJyZW5kYSIKKworbXNnaWQgIiIKKyJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgorInBsdWdpbnMgcHJvdmlkZS5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKKyJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgorbXNnc3RyICIiCisiRXJha3V0c2kgemVoYXp0dXRha28gcGx1Z2luYXJlbiBlZ2luYmlkZS16ZXJyZW5kYSwgbWFraW5hIGJhdGVrIGFuYWxpemF0emVrbyAiCisibW9kdWtvYS5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWxpYWdhcnJpYSBkYSBrYW5wb2tvIHBsdWdpbmFrICIKKyJhdXRvbWF0aWtva2kgaW5zdGFsYXR6ZWtvIG1la2FuaXNtb2VuIGtvbmV4aW9ldGFuIgorCittc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgorbXNnc3RyICJaZXJyZW5kYXR1IHBsdWdpbmVuIGVkdWtpYWsiCisKK21zZ2lkICJQcmludCBzdXBwb3J0ZWQgVVJJIHNjaGVtZXMsIHdpdGggdGhlIGVsZW1lbnRzIHRoYXQgaW1wbGVtZW50IHRoZW0iCittc2dzdHIgIiIKKyJFcmFrdXRzaSBvbmFydHV0YWtvIFVSSSBlc2tlbWFrLCBoYWllayBpbnBsZW1lbnRhdHplbiBkaXR1enRlbiBlbGVtZW50dWVraW4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGxvYWQgcGx1Z2luIGZpbGU6ICVzXG4iCittc2dzdHIgIkV6aW4gaXphbiBkYSBwbHVnaW4gZml0eGF0ZWdpYSBrYXJnYXR1OiAlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgorbXNnc3RyICInJXMnIGVsZW1lbnR1YSBlZG8gcGx1Z2luYSBleiBkYSBleGlzdGl0emVuXG4iCisKK21zZ2lkICJJbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICJcIiUyJHNcIiAoJTMkcykgZWxlbWVudHVhcmVuICUxJHUuIG1lenVhIGphc28gZGE6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKK21zZ3N0ciAiXCIlMiRzOiUzJHNcIiAoJTQkcykgcGxhdGFmb3JtYXJlbiAlMSR1LiBtZXp1YSBqYXNvIGRhOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gb2JqZWN0IFwiJXNcIiAoJXMpOiAiCittc2dzdHIgIlwiJTIkc1wiICglMyRzKSBvYmpla3R1YXJlbiAlMSR1LiBtZXp1YSBqYXNvIGRhOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKK21zZ3N0ciAiJXUuICglcykgbWV6dWEgamFzbyBkYTogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKK21zZ3N0ciAiXCIlc1wiIGVsZW1lbnR1YXJlbiBFT1MgYmF0IGphc28gZGEuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKK21zZ3N0ciAiRVRJS0VUQSBBVVJLSVRVIERBOiBcIiVzXCIgZWxlbWVudHVhayBhdXJraXR1IGR1LlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgcGFkIFwiJXM6JXNcIi5cbiIKK21zZ3N0ciAiRVRJS0VUQSBBVVJLSVRVIERBOiBcIiVzOiVzXCIgcGxhdGFmb3JtYWsgYXVya2l0dSBkdS5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCittc2dzdHIgIkVUSUtFVEEgQVVSS0lUVSBEQTogXCIlc1wiIG9iamVrdHVhayBhdXJraXR1IGR1LlxuIgorCittc2dpZCAiRk9VTkQgVEFHXG4iCittc2dzdHIgIkVUSUtFVEEgQVVSS0lUVSBEQVxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJTkZPOlxuIgorIiVzXG4iCittc2dzdHIgIiIKKyJJTkZPUk1BWklPQTpcbiIKKyIlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAiQUJJU1VBLCAgJXMgZWxlbWVudHVhcmVuYTogJXNcbiIKKworbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgorbXNnc3RyICJQcmVzdGF0dSBkYTsgYnVmZmVycmVyYXR6ZW4gYnVrYXR1IHphaW4uLi5cbiIKKworbXNnaWQgImJ1ZmZlcmluZy4uLiIKK21zZ3N0ciAiYnVmZmVycmVyYXR6ZW4uLi4iCisKK21zZ2lkICJEb25lIGJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgorbXNnc3RyICIiCisiQnVmZmVycmVyYXR1IGRhOyBrYW5hbGl6YXppb2FyZW4gZXphcnBlbmEgRVJSRVBST0RVWklUWkVBIGdpc2EgamFydHplbi4uLiBcbiIKKworbXNnaWQgIkJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCittc2dzdHIgIkJ1ZmZlcnJlcmF0emVuOyBrYW5hbGl6YXppb2EgUEFVU0FSQVpJQSBnaXNhIGV6YXJ0emVuLi4uIFxuIgorCittc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKK21zZ3N0ciAiTGF0ZW50emlhIGJpcmJhbmF0emVuLi4uXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBzdGF0ZSB0byAlcyBhcyByZXF1ZXN0ZWQgYnkgJXMuLi5cbiIKK21zZ3N0ciAiRWdvZXJhICVzKGUpcmEgZXphcnR6ZW4gJXMoZSlrIGVza2F0dSBiZXphbGEuLi5cbiIKKworbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCittc2dzdHIgIkV0ZW46IEthbmFsaXphemlvYSBnZWxkaXR6ZW4uLi4gXG4iCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKK21zZ3N0ciAiZXogZGFnbyBcIiVzXCIgZWxlbWVudHVhIgorCittc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgorbXNnc3RyICJFcmFrdXRzaSBldGlrZXRhayAobWV0YWRhdHUgZ2lzYSBlcmUgZXphZ3V0emVuIGRpcmVuYWspIgorCittc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKK21zZ3N0ciAiRXJha3V0c2kgZWdvZXJhcmkgYnVydXprbyBpbmZvcm1hemlvYSBldGEgcHJvcGlldGF0ZWVuIGpha2luYXJhenBlbmFrIgorCittc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiRXogZXJha3V0c2kgaW5vbGFrbyBqYXJyYWlwZW5lbiBpbmZvcm1hemlvcmlrIgorCittc2dpZCAiT3V0cHV0IG1lc3NhZ2VzIgorbXNnc3RyICJFcmFrdXRzaSBtZXp1YWsiCisKK21zZ2lkICJEbyBub3Qgb3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBvZiBUWVBFIgorbXNnc3RyICJFeiBlcmFrdXRzaSBNT1RBIGhhdWV0YWtvIGVnb2VyYS1pbmZvcm1hemlvYToiCisKK21zZ2lkICJUWVBFMSxUWVBFMiwuLi4iCittc2dzdHIgIjEuTU9UQSwgMi5NT1RBLi4uIgorCittc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgorbXNnc3RyICJFeiBpbnN0YWxhdHUgYWthdHMtbWFuZWlhdHphaWxlcmlrIgorCittc2dpZCAiUHJpbnQgYWxsb2MgdHJhY2UgKGlmIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lKSIKK21zZ3N0ciAiSW5wcmltYXR1IGVzbGVpcGVuZW4gc2VnaW1lbmR1YSAoa29ucGlsYXR6ZWFuIGdhaXR1IGJhZGEpIgorCittc2dpZCAiRm9yY2UgRU9TIG9uIHNvdXJjZXMgYmVmb3JlIHNodXR0aW5nIHRoZSBwaXBlbGluZSBkb3duIgorbXNnc3RyICJEZXJyaWdvcnR1IEVPUyBpdHVyYnVydWV0YW4ga2FuYWxpemF6aW9hIGl0emFsaSBhdXJyZXRpayIKKworbXNnaWQgIkdhdGhlciBhbmQgcHJpbnQgaW5kZXggc3RhdGlzdGljcyIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQ6ICVzLlxuIgorbXNnc3RyICJFUlJPUkVBOiBlemluIGl6YW4gZGEga2FuYWxpemF6aW9hIGVyYWlraTogJXMuXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlxuIgorbXNnc3RyICJFUlJPUkVBOiBlemluIGl6YW4gZGEga2FuYWxpemF6aW9hIGVyYWlraS5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCittc2dzdHIgIkFCSVNVQSwgIGthbmFsaXphemlvIGFrYXN0dW5hOiAlc1xuIgorCittc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgorbXNnc3RyICJFUlJPUkVBOiBlemluIGl6YW4gZGEgJ2thbmFsaXphemlvJyBlbGVtZW50dWEgYXVya2l0dS5cbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgorbXNnc3RyICJLYW5hbGl6YXppb2EgUEFVU0FSQVpJQSBnaXNhIGV6YXJ0emVuLi4uIFxuIgorCittc2dpZCAiRVJST1I6IFBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwYXVzZS5cbiIKK21zZ3N0ciAiRVJST1JFQTogZXppbiBkYSBrYW5hbGl6YXppb2EgcGF1c2FyYXppLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgorbXNnc3RyICJLYW5hbGl6YXppb2EgYWt0aWJvIGRhZ28gZXRhIGV6IGR1IFBSRVNUQVRVIGJlaGFycmlrLi4uXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMSU5HIC4uLlxuIgorbXNnc3RyICJLYW5hbGl6YXppb2EgUFJFU1RBVFpFTiBhcmkgZGEuLi4gXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHByZXJvbGwuXG4iCittc2dzdHIgIkVSUk9SRUE6IGV6aW4gZGEga2FuYWxpemF6aW9hIHByZXN0YXR1LlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgorbXNnc3RyICJLYW5hbGl6YXppb2EgUFJFU1RBVFVBIGRhZ28uLi4gXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIkthbmFsaXphemlvYSBFUlJFUFJPRFVaSVRaRUEgZ2lzYSBlemFydHplbi4uLiBcbiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKK21zZ3N0ciAiRVJST1JFQTogZXppbiBkYSBrYW5hbGl6YXppb2EgZXJyZXByb2R1eml0dS5cbiIKKworbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIEZvcmNpbmcgRU9TIG9uIHRoZSBwaXBlbGluZVxuIgorbXNnc3RyICJFT1MgaXR6YWx0emVhbiBnYWl0dXRhIC0tIEVPUyBkZXJyaWdvcnR6ZW4ga2FuYWxpemF6aW9hblxuIgorCittc2dpZCAiV2FpdGluZyBmb3IgRU9TLi4uXG4iCittc2dzdHIgIkVPU3JlbiB6YWluLi4uXG4iCisKK21zZ2lkICJFT1MgcmVjZWl2ZWQgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgorbXNnc3RyICJFT1NhIGphc290YSAtIGthbmFsaXphemlvYSBnZWxkaXR6ZW4uLi5cbiIKKworbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgorbXNnc3RyICJFcnJvcmVhIGdlcnRhdHUgZGEgRU9TcmVuIHphaW4gZWdvdGVhblxuIgorCittc2dpZCAiRXhlY3V0aW9uIGVuZGVkIGFmdGVyICUiCittc2dzdHIgIkVycmVwcm9kdWt6aW9hIGFtYWl0dSBlZ2luIGRhICUiCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIC4uLlxuIgorbXNnc3RyICJLYW5hbGl6YXppb2EgUFJFU1QgZ2lzYSBlemFydHplbi4uLiBcbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCAuLi5cbiIKK21zZ3N0ciAiS2FuYWxpemF6aW9hIE5VTFVBIGdpc2EgZXphcnR6ZW4uLi4gXG4iCisKK21zZ2lkICJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIgorbXNnc3RyICJLYW5hbGl6YXppb2EgYXNrYXR6ZW4uLi5cbiIKKworI34gbXNnaWQgIlVzYWdlOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLiBdXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJFcmFiaWxlcmE6IGdzdC14bWxsYXVuY2ggPGZpdHhhdGVnaWEueG1sPiBbIGVsZW1lbnR1YS4iCisjfiAicHJvcGlldGF0ZWE9YmFsaW9hLi4uIF1cbiIKKworI34gbXNnaWQgIkVSUk9SOiBwYXJzZSBvZiB4bWwgZmlsZSAnJXMnIGZhaWxlZC5cbiIKKyN+IG1zZ3N0ciAiRVJST1JFQTogaHV0cyBlZ2luIGR1ICclcycgeG1sIGZpdHhhdGVnaWEgYW5hbGl6YXR6ZWFuLlxuIgorCisjfiBtc2dpZCAiRVJST1I6IG5vIHRvcGxldmVsIHBpcGVsaW5lIGVsZW1lbnQgaW4gZmlsZSAnJXMnLlxuIgorI34gbXNnc3RyICIiCisjfiAiRVJST1JFQTogZXogZGFnbyBnb2ktbWFpbGFrbyBrYW5hbGl6YXppby1lbGVtZW50dXJpayAnJXMnIGZpdHhhdGVnaWFuLlxuIgorCisjfiBtc2dpZCAiV0FSTklORzogb25seSBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLlxuIgorI34gbXNnc3RyICJLT05UVVo6IGdvaS1tYWlsYWtvIGVsZW1lbnR1IGJhdCBiYWthcnJhIG9uYXJ0emVuIGRhIG9yYWluZ29hbi5cbiIKKworI34gbXNnaWQgIkVSUk9SOiBjb3VsZCBub3QgcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50ICVkOiAlcy5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIkVSUk9SRUE6IGV6aW4gaXphbiBkYSBrb21hbmRvLWxlcnJva28gJWQuIGFyZ3VtZW50dWEgYW5hbGl6YXR1OiAlcy5cbiIKKworI34gbXNnaWQgIldBUk5JTkc6IGVsZW1lbnQgbmFtZWQgJyVzJyBub3QgZm91bmQuXG4iCisjfiBtc2dzdHIgIktPTlRVWjogZXogZGEgYXVya2l0dSAnJXMnIGl6ZW5la28gZWxlbWVudHVhLlxuIgorCisjfiBtc2dpZCAiU2F2ZSB4bWwgcmVwcmVzZW50YXRpb24gb2YgcGlwZWxpbmUgdG8gRklMRSBhbmQgZXhpdCIKKyN+IG1zZ3N0ciAiR29yZGUga2FuYWxpemF6aW9lbiB4bWwgYWRpZXJhenBlbmEgRklUWEFURUdJYW4gZXRhIGlydGVuIgorCisjfiBtc2dpZCAiRklMRSIKKyN+IG1zZ3N0ciAiRklUWEFURUdJQSIKKworIywgZnV6enkKKyN+IG1zZ2lkICJEbyBub3QgaW5zdGFsbCBzaWduYWwgaGFuZGxlcnMgZm9yIFNJR1VTUjEgYW5kIFNJR1VTUjIiCisjfiBtc2dzdHIgIkV6IGluc3RhbGF0dSBha2F0cy1tYW5laWF0emFpbGVyaWsiCmRpZmYgLS1naXQgYS9wby9maS5nbW8gYi9wby9maS5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FmNTJhOAotLS0gL2Rldi9udWxsCisrKyBiL3BvL2ZpLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9maS5wbyBiL3BvL2ZpLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2YWU3OWUKLS0tIC9kZXYvbnVsbAorKysgYi9wby9maS5wbwpAQCAtMCwwICsxLDEzMTQgQEAKKyMgRmlubmlzaCB0cmFuc2xhdGlvbnMgZm9yIGdzdHJlYW1lciBwYWNrYWdlLgorIyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDctMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdzdHJlYW1lciBwYWNrYWdlLgorIyBUb21taSBWYWluaWthaW5lbiA8VG9tbWkuVmFpbmlrYWluZW5AaWtpLmZpPiwgMjAwNSwgMjAwNy0yMDEwLgorIworIyBXb3JkczoKKyMKKyMgYmluIChhIGNvbnRhaW5lciBlbGVtZW50KSA9IHPDpGlsacO2CisjIHNpbmsgPSBuaWVsdQorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDAuMTAuMzAuM1xuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTA5LTI5IDE0OjU1KzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTExLTE3IDIzOjEwKzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFRvbW1pIFZhaW5pa2FpbmVuIDxUb21taS5WYWluaWthaW5lbkBpa2kuZmk+XG4iCisiTGFuZ3VhZ2UtVGVhbTogRmlubmlzaCA8dHJhbnNsYXRpb24tdGVhbS1maUBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCisiTGFuZ3VhZ2U6IGZpXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKK21zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCittc2dzdHIgIk7DpHl0w6QgR1N0cmVhbWVyaW4gdmVyc2lvIgorCittc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCittc2dzdHIgIlRlZSBrYWlraXN0YSB2YXJvaXR1a3Npc3RhIHZha2F2aWEiCisKK21zZ2lkICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKK21zZ3N0ciAiVHVsb3N0YSBzYWF0YXZpbGxhIG9sZXZhdCB2aWFuZXRzaW50w6RsdW9rYXQgamEgcG9pc3R1IgorCittc2dpZCAiIgorIkRlZmF1bHQgZGVidWcgbGV2ZWwgZnJvbSAxIChvbmx5IGVycm9yKSB0byA1IChhbnl0aGluZykgb3IgMCBmb3Igbm8gb3V0cHV0IgorbXNnc3RyICIiCisiT2xldHVzdmlhbmV0c2ludMOkdGFzbyB2w6RsaWx0w6QgMTpzdMOkICh2YWluIHZpcmhlZXQpIDU6ZWVuIChrYWlra2kpIHRhaSAwIGVpICIKKyJ0dWxvc3RldHRhIgorCittc2dpZCAiTEVWRUwiCittc2dzdHIgIlRBU08iCisKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCisidGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgorbXNnc3RyICIiCisiUGlsa3VpbiBlcm90ZWx0dSBsdWV0dGVsbyBsdW9ra2FuaW1pOnRhc28tcGFyZWlzdGEsIGpvaWxsYSBhc2V0ZXRhYW4gdGlldHl0ICIKKyJ0YXNvdCB5a3NpdHTDpGlzaWxsZSBsdW9raWxsZS4gRXNpbWVya2tpOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCisKK21zZ2lkICJMSVNUIgorbXNnc3RyICJMVUVUVEVMTyIKKworbXNnaWQgIkRpc2FibGUgY29sb3JlZCBkZWJ1Z2dpbmcgb3V0cHV0IgorbXNnc3RyICJFaSB2w6RyaXRldHR5asOkIHZpYW5ldHNpbnTDpHRpZXRvamEiCisKK21zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKK21zZ3N0ciAiRWkgdmlhbmV0c2ludMOkw6QiCisKK21zZ2lkICJFbmFibGUgdmVyYm9zZSBwbHVnaW4gbG9hZGluZyBkaWFnbm9zdGljcyIKK21zZ3N0ciAiS8OkeXTDpCBtb25pc2FuYWlzdGEgbGlpdMOkbm7DpGlzdGVuIGxhdGF1c2RpYWdub3N0aWlra2EiCisKK21zZ2lkICJDb2xvbi1zZXBhcmF0ZWQgcGF0aHMgY29udGFpbmluZyBwbHVnaW5zIgorbXNnc3RyICJLYWtzb2lzcGlzdGVpbiBlcm90ZWxsdXQgcG9sdXQgbGlpdMOkbm7DpGlzaWluIgorCittc2dpZCAiUEFUSFMiCittc2dzdHIgIlBPTFVUIgorCittc2dpZCAiIgorIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgorImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKK21zZ3N0ciAiIgorIlBpbGt1aW4gZXJvdGVsdHUgbHVldHRlbG8gbGlpdMOkbm7DpGlzaXN0w6QsIGpvdGthIGVzaWxhZGF0YWFuICIKKyJ5bXDDpHJpc3TDtm11dXR0dWphc3NhIEdTVF9QTFVHSU5fUEFUSCBsdWV0ZWx0dWplbiBsaXPDpGtzaSIKKworbXNnaWQgIlBMVUdJTlMiCittc2dzdHIgIkxJSVTDhE5Ow4RJU0VUIgorCittc2dpZCAiRGlzYWJsZSB0cmFwcGluZyBvZiBzZWdtZW50YXRpb24gZmF1bHRzIGR1cmluZyBwbHVnaW4gbG9hZGluZyIKK21zZ3N0ciAiRWkgbXVpc3RpYWx1ZWVuIHlsaXR5a3NlbiB0YXJra2FpbHVhIGxpaXTDpG5uw6Rpc3RlbiBsYXRhdWtzZW4gYWlrYW5hIgorCittc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIsOEbMOkIHDDpGl2aXTDpCByZWtpc3RlcmnDpCIKKworbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIsOEbMOkIGvDpHlubmlzdMOkIGFwdXByb3Nlc3NpYSByZWtpc3RlcmluIHNrYW5uYXVrc2Vzc2EiCisKK21zZ2lkICJHU3RyZWFtZXIgT3B0aW9ucyIKK21zZ3N0ciAiR1N0cmVhbWVyaW4gdmFsaXRzaW1ldCIKKworbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgIk7DpHl0w6QgR1N0cmVhbWVyaW4gdmFsaXRzaW1ldCIKKworbXNnaWQgIlVua25vd24gb3B0aW9uIgorbXNnc3RyICJUdW50ZW1hdG9uIHZhbGl0c2luIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIga29odGFzaSB2aXJoZWVuIHlsZWlzZXNzw6QgeWRpbmtpcmphc3Rvc3NhLiIKKworbXNnaWQgIiIKKyJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuIgorbXNnc3RyICIiCisiR1N0cmVhbWVyLWtlaGl0dMOkasOkdCBvbGl2YXQgbGlpYW4gbGFpc2tvamEgYW50YWFrc2VlbiB0w6RsbGUgdmlyaGVlbGxlIG9tYWEgIgorInZpcmhla29vZGlhLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY29kZSBub3QgaW1wbGVtZW50ZWQuIgorbXNnc3RyICJTaXPDpGluZW4gR1N0cmVhbWVyLXZpcmhlOiBrb29kaWEgZWkgdG90ZXV0ZXR0dS4iCisKK21zZ2lkICIiCisiR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkIGFuZCBzb21lIGVsZW1lbnQgZmFpbGVkIHRvIHBvc3QgYSAiCisicHJvcGVyIGVycm9yIG1lc3NhZ2Ugd2l0aCB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZS4iCittc2dzdHIgIiIKKyJHc3RyZWFtZXItdmlyaGU6IHRpbGFzaWlydHltw6QgZXDDpG9ubmlzdHVpIGphIGpva2luIGVsZW1lbnR0aSBlaSBvbm5pc3R1bnV0ICIKKyJpbG1vaXR0YW1hYW4ga3Vubm9sbGlzdGEgdmlyaGVpbG1vaXR1c3RhIGVww6Rvbm5pc3R1bWlzZW4gc3l5a3NpLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogcGFkIHByb2JsZW0uIgorbXNnc3RyICJTaXPDpGluZW4gR1N0cmVhbWVyLXZpcmhlOiB0w6R5dGVvbmdlbG1hLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGhyZWFkIHByb2JsZW0uIgorbXNnc3RyICJTaXPDpGluZW4gR1N0cmVhbWVyLXZpcmhlOiBzw6RpZW9uZ2VsbWEuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBuZWdvdGlhdGlvbiBwcm9ibGVtLiIKK21zZ3N0ciAiU2lzw6RpbmVuIEdTdHJlYW1lci12aXJoZTogbmV1dm90dGVsdW9uZ2VsbWEuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBldmVudCBwcm9ibGVtLiIKK21zZ3N0ciAiU2lzw6RpbmVuIEdTdHJlYW1lci12aXJoZTogdGFwYWh0dW1hb25nZWxtYS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4iCittc2dzdHIgIlNpc8OkaW5lbiBHU3RyZWFtZXItdmlyaGU6IGtlbGF1c29uZ2VsbWEuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgorbXNnc3RyICJTaXPDpGluZW4gR1N0cmVhbWVyLXZpcmhlOiB0w6R5dGVvbmdlbG1hLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGFnIHByb2JsZW0uIgorbXNnc3RyICJTaXPDpGluZW4gR1N0cmVhbWVyLXZpcmhlOiBtZXJraW50w6RvbmdlbG1hLiIKKworbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCittc2dzdHIgIkdTdHJlYW1lci1hc2VubnVrc2VzdGEgcHV1dHR1dSBsaWl0w6RubsOkaW5lbi4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIgorbXNnc3RyICJTaXPDpGluZW4gR1N0cmVhbWVyLXZpcmhlOiBrZWxsby1vbmdlbG1hLiIKKworbXNnaWQgIiIKKyJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCisiZGlzYWJsZWQuIgorbXNnc3RyICIiCisiVMOkbcOkIHNvdmVsbHVzIHlyaXR0w6TDpCBrw6R5dHTDpMOkIHNlbGxhaXN0YSBHU3RyZWFtZXJpbiB0b2ltaW5uYWxsaXN1dXR0YSwgam9rYSAiCisib24gcG9pc3NhIGvDpHl0w7ZzdMOkLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3VwcG9ydGluZyBsaWJyYXJ5IGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIGtvaHRhc2kgdmlyaGVlbiB5bGVpc2Vzc8OkIHR1a2lraXJqYXN0b3NzYS4iCisKK21zZ2lkICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJUdWtpa2lyamFzdG9hIGVpIHZvaXR1IGFsdXN0YWEuIgorCittc2dpZCAiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIlR1a2lraXJqYXN0b2EgZWkgdm9pdHUgc3Vsa2VhLiIKKworbXNnaWQgIkNvdWxkIG5vdCBjb25maWd1cmUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiVHVraWtpcmphc3RvYSBlaSB2b2l0dSBrb25maWd1cm9pZGEuIgorCittc2dpZCAiRW5jb2RpbmcgZXJyb3IuIgorbXNnc3RyICJLb29kYXVzdmlyaGUuIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCByZXNvdXJjZSBlcnJvci4iCittc2dzdHIgIkdTdHJlYW1lciBrb2h0YXNpIHlsZWlzZW4gcmVzdXJzc2l2aXJoZWVuLiIKKworbXNnaWQgIlJlc291cmNlIG5vdCBmb3VuZC4iCittc2dzdHIgIlJlc3Vyc3NpYSBlaSBsw7Z5dHlueXQuIgorCittc2dpZCAiUmVzb3VyY2UgYnVzeSBvciBub3QgYXZhaWxhYmxlLiIKK21zZ3N0ciAiUmVzdXJzc2kgb24gdmFyYXR0dSB0YWkgZWkgc2FhdGF2aWxsYS4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCittc2dzdHIgIlJlc3Vyc3NpYSBlaSB2b2l0dSBhdmF0YSBsdWtlbWlzdGEgdmFydGVuLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiUmVzdXJzc2lhIGVpIHZvaXR1IGF2YXRhIGtpcmpvaXR0YW1pc3RhIHZhcnRlbi4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCittc2dzdHIgIlJlc3Vyc3NpYSBlaSB2b2l0dSBhdmF0YSBsdWtlbWlzdGEgamEga2lyam9pdHRhbWlzdGEgdmFydGVuLiIKKworbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSByZXNvdXJjZS4iCittc2dzdHIgIlJlc3Vyc3NpYSBlaSB2b2l0dSBzdWxrZWEuIgorCittc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCittc2dzdHIgIlJlc3Vyc3Npc3RhIGVpIHZvaXR1IGx1a2VhLiIKKworbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iCittc2dzdHIgIlJlc3Vyc3NpaW4gZWkgdm9pdHUga2lyam9pdHRhYS4iCisKK21zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKK21zZ3N0ciAiUmVzdXJzc2lhIGVpIHZvaXR1IGtlbGF0YS4iCisKK21zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgorbXNnc3RyICJSZXN1cnNzaWEgZWkgdm9pdHUgc3lua3Jvbmlzb2lkYS4iCisKK21zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKK21zZ3N0ciAiUmVzdXJzc2luIGFzZXR1a3NpYSBlaSBzYWF0dS92b2l0dSBhc2V0dGFhLiIKKworbXNnaWQgIk5vIHNwYWNlIGxlZnQgb24gdGhlIHJlc291cmNlLiIKK21zZ3N0ciAiUmVzdXJzc2lsbGEgZWkgb2xlIHRpbGFhIGrDpGxqZWxsw6QuIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdHJlYW0gZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIga29odGFzaSB5bGVpc2VuIHRpZXRvdmlydGF2aXJoZWVuLiIKKworbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKK21zZ3N0ciAiRWxlbWVudHRpIGVpIHRvdGV1dGEgdMOkbcOkbiB0aWV0b3ZpcnJhbiBrw6RzaXR0ZWx5w6QuIFRlZSB2aWthaWxtb2l0dXMuIgorCittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCittc2dzdHIgIlRpZXRvdmlycmFuIHR5eXBwacOkIGVpIHZvaXR1IG3DpMOkcml0dMOkw6QuIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBvZiBhIGRpZmZlcmVudCB0eXBlIHRoYW4gaGFuZGxlZCBieSB0aGlzIGVsZW1lbnQuIgorbXNnc3RyICJUaWV0b3ZpcnRhIG9uIGVyaSB0eXlwcGnDpCBrdWluIG1pdMOkIHTDpG3DpCBlbGVtZW50dGkga8Okc2l0dGVsZWUuIgorCittc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgorbXNnc3RyICIiCisiU2FhdGF2aWxsYSBlaSBvbGUga29vZGVra2lhLCBqb2thIG9zYWEga8Okc2l0ZWxsw6QgdMOkbcOkbiB0eXlwcGlzdMOkIHRpZXRvdmlydGFhLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZWNvZGUgc3RyZWFtLiIKK21zZ3N0ciAiVGlldG92aXJ0YWEgZWkgdm9pdHUgcHVya2FhLiIKKworbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKK21zZ3N0ciAiVGlldG92aXJ0YWEgZWkgdm9pdHUga29vZGF0YS4iCisKK21zZ2lkICJDb3VsZCBub3QgZGVtdWx0aXBsZXggc3RyZWFtLiIKK21zZ3N0ciAiVGlldG92aXJyYW4ga2FuYXZvaW50aWEgZWkgdm9pdHUgcHVya2FhLiIKKworbXNnaWQgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKK21zZ3N0ciAiVGlldG92aXJ0YWEgZWkgdm9pdHUga2FuYXZvaWRhLiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgaW4gdGhlIHdyb25nIGZvcm1hdC4iCittc2dzdHIgIlZpcnRhIG9uIHbDpMOkcsOkc3PDpCBtdW9kb3NzYS4iCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiVmlydGEgb24gc2FsYXR0dSBqYSBzYWxhdWtzZW4gcHVya3VhIGVpIHR1ZXRhLiIKKworbXNnaWQgIiIKKyJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgY2FuJ3QgYmUgZGVjcnlwdGVkIGJlY2F1c2Ugbm8gc3VpdGFibGUga2V5IGhhcyAiCisiYmVlbiBzdXBwbGllZC4iCittc2dzdHIgIiIKKyJWaXJ0YSBvbiBzYWxhdHR1IGphIHNhbGF1c3RhIGVpIHZvaWRhIHB1cmthYSwga29za2Egc29waXZhYSBhdmFpbnRhIGVpIG9sZSAiCisiYW5uZXR0dS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzLiIKK21zZ3N0ciAiVmlyaGV2aWVzdGnDpCBhbHVlZWxsZSAlcyBlaSBvbGUuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcyBhbmQgY29kZSAlZC4iCittc2dzdHIgIlN0YW5kYXJkaWEgdmlyaGV2aWVzdGnDpCBhbHVlZWxsZSAlcyBqYSBrb29kaWxsZSAlZCBlaSBvbGUuIgorCittc2dpZCAiU2VsZWN0ZWQgY2xvY2sgY2Fubm90IGJlIHVzZWQgaW4gcGlwZWxpbmUuIgorbXNnc3RyICJWYWxpdHR1YSBrZWxsb2EgZWkgdm9pIGvDpHl0dMOkw6QgbGl1a3VoaWhuYXNzYS4iCisKK21zZ2lkICJ0aXRsZSIKK21zZ3N0ciAibmltaSIKKworbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUiCittc2dzdHIgInlsZWVuc8OkIGvDpHl0ZXR0eSBuaW1pIgorCittc2dpZCAidGl0bGUgc29ydG5hbWUiCittc2dzdHIgIm5pbWkgbGFqaXR0ZWx1dW4iCisKK21zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJ5bGVlbnPDpCBrw6R5dGV0dHkgbmltaSBsYWppdHRlbHVhIHZhcnRlbiIKKworbXNnaWQgImFydGlzdCIKK21zZ3N0ciAiZXNpdHTDpGrDpCIKKworbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAibmF1aG9pdHVrc2VzdGEgdmFzdHV1c3NhIG9sZXZhKHQpIGhlbmtpbMO2KHQpIgorCittc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgorbXNnc3RyICJlc2l0dMOkasOkIGxhaml0dGVsdXVuIgorCittc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJuYXVob2l0dWtzZXN0YSB2YXN0dXVzc2Egb2xldmEodCkgaGVua2lsw7YodCkgbGFqaXR0ZWx1YSB2YXJ0ZW4iCisKK21zZ2lkICJhbGJ1bSIKK21zZ3N0ciAibGV2eSIKKworbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgorbXNnc3RyICJsZXZ5LCBqb2thIHNpc8OkbHTDpMOkIHTDpG3DpG4gZGF0YW4iCisKK21zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKK21zZ3N0ciAibGV2eSBsYWppdHRlbHV1biIKKworbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJsZXZ5LCBqb2thIHNpc8OkbHTDpMOkIHTDpG3DpG4gZGF0YW4sIGxhaml0dGVsdWEgdmFydGVuIgorCittc2dpZCAiYWxidW0gYXJ0aXN0IgorbXNnc3RyICJsZXZ5biBlc2l0dMOkasOkIgorCittc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgorbXNnc3RyICJLb2tvIGxldnluIGVzaXR0w6Rqw6Qgc2VsbGFpc2VuYSBrdWluIHNlIHR1bGlzaSBuw6R5dHTDpMOkIgorCittc2dpZCAiYWxidW0gYXJ0aXN0IHNvcnRuYW1lIgorbXNnc3RyICJsZXZ5biBlc2l0dMOkasOkIGxhaml0dGVsdXVuIgorCittc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkIgorbXNnc3RyICJLb2tvIGxldnluIGVzaXR0w6Rqw6Qgc2VsbGFpc2VuYSBrdWluIHNpdMOkIHR1bGlzaSBrw6R5dHTDpMOkIGxhaml0dGVsdXVuIgorCittc2dpZCAiZGF0ZSIKK21zZ3N0ciAicMOkaXbDpHlzIgorCittc2dpZCAiZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHRGF0ZSBzdHJ1Y3R1cmUpIgorbXNnc3RyICJww6RpdsOkeXMsIGpvbGxvaW4gZGF0YSBsdW90aWluIChHRGF0ZS1tdW9kb3NzYSkiCisKK21zZ2lkICJkYXRldGltZSIKK21zZ3N0ciAicMOkaXbDpHlzYWlrYSIKKworbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKK21zZ3N0ciAicMOkaXbDpHlzIGphIGFpa2EsIGpvbGxvaW4gZGF0YSBsdW90aWluIChHc3REYXRlVGltZS1tdW9kb3NzYSkiCisKK21zZ2lkICJnZW5yZSIKK21zZ3N0ciAibGFqaSIKKworbXNnaWQgImdlbnJlIHRoaXMgZGF0YSBiZWxvbmdzIHRvIgorbXNnc3RyICJsYWppLCBqb2hvbiB0w6Rtw6QgZGF0YSBrdXVsdXUiCisKK21zZ2lkICJjb21tZW50IgorbXNnc3RyICJrb21tZW50dGkiCisKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKK21zZ3N0ciAidmFwYWEga29tbWVudHRpdGVrc3RpIGRhdGFsbGUiCisKK21zZ2lkICJleHRlbmRlZCBjb21tZW50IgorbXNnc3RyICJsYWFqZW5uZXR0dSBrb21tZW50dGkiCisKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCittc2dzdHIgIiIKKyJ2YXBhYSBrb21tZW50dGl0ZWtzdGkgZGF0YWxsZSBtdW9kb3NzYSBhdmFpbj1hcnZvIHRhaSBhdmFpbltmaV09a29tbWVudHRpIgorCittc2dpZCAidHJhY2sgbnVtYmVyIgorbXNnc3RyICJyYWlkYW4gbnVtZXJvIgorCittc2dpZCAidHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgInJhaWRhbiBudW1lcm8ga29rb2VsbWFuIHNpc8OkbGzDpCIKKworbXNnaWQgInRyYWNrIGNvdW50IgorbXNnc3RyICJyYWl0b2plbiBtw6TDpHLDpCIKKworbXNnaWQgImNvdW50IG9mIHRyYWNrcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIHRyYWNrIGJlbG9uZ3MgdG8iCittc2dzdHIgInTDpGjDpG4ga29rb2VsbWFhbiBrdXVsdXZpZW4gcmFpdG9qZW4gbHVrdW3DpMOkcsOkIgorCittc2dpZCAiZGlzYyBudW1iZXIiCittc2dzdHIgImxldnludW1lcm8iCisKK21zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICJsZXZ5bnVtZXJvIGtva29lbG1hbiBzaXPDpGxsw6QiCisKK21zZ2lkICJkaXNjIGNvdW50IgorbXNnc3RyICJsZXZ5bcOkw6Ryw6QiCisKK21zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKK21zZ3N0ciAidMOkbcOkbiBsZXZ5biBrb2tvZWxtYWFuIGt1dWx1dmllbiBsZXZ5amVuIGx1a3Vtw6TDpHLDpCIKKworbXNnaWQgImxvY2F0aW9uIgorbXNnc3RyICJzaWphaW50aSIKKworbXNnaWQgIiIKKyJPcmlnaW4gb2YgbWVkaWEgYXMgYSBVUkkgKGxvY2F0aW9uLCB3aGVyZSB0aGUgb3JpZ2luYWwgb2YgdGhlIGZpbGUgb3Igc3RyZWFtICIKKyJpcyBob3N0ZWQpIgorbXNnc3RyICIiCisiTWVkaWFuIGFsa3VwZXLDpCBVUkktbXVvZG9zc2EgKHNpamFpbnRpLCBqb3NzYSBhbGt1cGVyw6RpbmVuIHRpZWRvc3RvIHRhaSAiCisidmlydGEgb24gdGFyam9sbGEpIgorCittc2dpZCAiaG9tZXBhZ2UiCittc2dzdHIgImtvdGlzaXZ1IgorCittc2dpZCAiSG9tZXBhZ2UgZm9yIHRoaXMgbWVkaWEgKGkuZS4gYXJ0aXN0IG9yIG1vdmllIGhvbWVwYWdlKSIKK21zZ3N0ciAiVMOkbcOkbiBtZWRpYW4ga290aXNpdnUgKGVpc20uIGFydGlzdGluIHRhaSBlbG9rdXZhbiBrb3Rpc2l2dSkiCisKK21zZ2lkICJkZXNjcmlwdGlvbiIKK21zZ3N0ciAia3V2YXVzIgorCittc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgorbXNnc3RyICJseWh5dCB0ZWtzdGksIGpva2Ega3V2YWEgZGF0YW4gc2lzw6RsdMO2w6QiCisKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICJ2ZXJzaW8iCisKK21zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKK21zZ3N0ciAidMOkbcOkbiBkYXRhbiB2ZXJzaW8iCisKK21zZ2lkICJJU1JDIgorbXNnc3RyICJJU1JDIgorCittc2dpZCAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgorbXNnc3RyICIiCisiS2Fuc2FpbnbDpGxpbmVuIHN0YW5kYXJkb2l0dSDDpMOkbml0ZWtvb2RpIElTUkMgLSBrYXRzbyBodHRwOi8vd3d3LmlmcGkub3JnLyIKKyJpc3JjLyIKKworbXNnaWQgIm9yZ2FuaXphdGlvbiIKK21zZ3N0ciAib3JnYW5pc2FhdGlvIgorCittc2dpZCAiY29weXJpZ2h0IgorbXNnc3RyICJ0ZWtpasOkbm9pa2V1cyIKKworbXNnaWQgImNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgImh1b21hdXR1cyBkYXRhbiB0ZWtpasOkbm9pa2V1a3Npc3RhIgorCittc2dpZCAiY29weXJpZ2h0IHVyaSIKK21zZ3N0ciAidGVraWrDpG5vaWtldXMtdXJpIgorCittc2dpZCAiVVJJIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJVUkkgaHVvbWF1dHVrc2VlbiBkYXRhbiB0ZWtpasOkbm9pa2V1a3Npc3RhIgorCisjLCBmdXp6eQorbXNnaWQgImVuY29kZWQgYnkiCittc2dzdHIgImtvb2RhaW4iCisKK21zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICJjb250YWN0IgorbXNnc3RyICJ5aHRleXN0aWVkb3QiCisKK21zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgorbXNnc3RyICJ5aHRleXN0aWVkb3QiCisKK21zZ2lkICJsaWNlbnNlIgorbXNnc3RyICJsaXNlbnNzaSIKKworbXNnaWQgImxpY2Vuc2Ugb2YgZGF0YSIKK21zZ3N0ciAiZGF0YW4gbGlzZW5zc2kiCisKK21zZ2lkICJsaWNlbnNlIHVyaSIKK21zZ3N0ciAibGlzZW5zc2luIHVyaSIKKworbXNnaWQgIlVSSSB0byB0aGUgbGljZW5zZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiVVJJIGRhdGFuIGxpc2Vuc3NpaW4iCisKK21zZ2lkICJwZXJmb3JtZXIiCittc2dzdHIgImVzaXR0w6Rqw6QiCisKK21zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKK21zZ3N0ciAiZXNpdHTDpG3DpHNzw6Qgb2xldmEodCkgaGVua2lsw7YodCkiCisKK21zZ2lkICJjb21wb3NlciIKK21zZ3N0ciAic8OkdmVsdMOkasOkIgorCittc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nIgorbXNnc3RyICJzw6R2ZWxseWtzZXN0w6QgdmFzdHV1c3NhIG9sZXZhKHQpIGhlbmtpbMO2KHQpIgorCittc2dpZCAiZHVyYXRpb24iCittc2dzdHIgImtlc3RvIgorCittc2dpZCAibGVuZ3RoIGluIEdTdHJlYW1lciB0aW1lIHVuaXRzIChuYW5vc2Vjb25kcykiCittc2dzdHIgInBpdHV1cyBHU3RyZWFtZXJpbiBhaWtheWtzaWtrw7ZpbsOkIChuYW5vc2VrdW50aWEpIgorCittc2dpZCAiY29kZWMiCittc2dzdHIgImtvb2Rla2tpIgorCittc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJrb29kZWtraSwgam9sbGEgZGF0YSBvbiB0YWxsZW5uZXR0dSIKKworbXNnaWQgInZpZGVvIGNvZGVjIgorbXNnc3RyICJ2aWRlb2tvb2Rla2tpIgorCittc2dpZCAiY29kZWMgdGhlIHZpZGVvIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJrb29kZWtraSwgam9sbGEgdmlkZW9kYXRhIG9uIHRhbGxlbm5ldHR1IgorCittc2dpZCAiYXVkaW8gY29kZWMiCittc2dzdHIgIsOkw6RuaWtvb2Rla2tpIgorCittc2dpZCAiY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJrb29kZWtraSwgam9sbGEgw6TDpG5pZGF0YSBvbiB0YWxsZW5uZXR0dSIKKworbXNnaWQgInN1YnRpdGxlIGNvZGVjIgorbXNnc3RyICJ0ZWtzdGl0eXNrb29kZWtraSIKKworbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAia29vZGVra2ksIGpvbGxhIHRla3N0aXR5c3RpZWRvdCBvbiB0YWxsZW5uZXR0dSIKKworbXNnaWQgImNvbnRhaW5lciBmb3JtYXQiCittc2dzdHIgInPDpGlsw7ZudMOkbXVvdG8iCisKK21zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAic8OkaWzDtm50w6RtdW90bywgam9sbGEgZGF0YSBvbiB0YWxsZW5uZXR0dSIKKworbXNnaWQgImJpdHJhdGUiCittc2dzdHIgImJpdHRpbm9wZXVzIgorCittc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAidGFya2thIHRhaSBrZXNraW3DpMOkcsOkaW5lbiBiaXR0aW5vcGV1cyBbYml0dGnDpC9zXSIKKworbXNnaWQgIm5vbWluYWwgYml0cmF0ZSIKK21zZ3N0ciAibmltZWxsaW5lbiBiaXR0aW5vcGV1cyIKKworbXNnaWQgIm5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgIm5pbWVsbGluZW4gYml0dGlub3BldXMgW2JpdHRpw6Qvc10iCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCittc2dzdHIgInbDpGhpbW3DpGlzYml0dGlub3BldXMiCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJ2w6RoaW1tw6Rpc2JpdHRpbm9wZXVzIFtiaXR0acOkL3NdIgorCittc2dpZCAibWF4aW11bSBiaXRyYXRlIgorbXNnc3RyICJlbmltbcOkaXNiaXR0aW5vcGV1cyIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgImVuaW1tw6Rpc2JpdHRpbm9wZXVzIFtiaXR0acOkL3NdIgorCittc2dpZCAiZW5jb2RlciIKK21zZ3N0ciAia29vZGFpbiIKKworbXNnaWQgImVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCittc2dzdHIgImtvb2RhaW4sIGpva2Ega29vZGFhIHTDpG3DpG4gdmlycmFuIgorCittc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgorbXNnc3RyICJrb29kYWltZW4gdmVyc2lvIgorCittc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAidMOkbcOkbiB2aXJyYW4ga29vZGFhbWlzZWVuIGvDpHl0ZXR5biBrb29kYWltZW4gdmVyc2lvIgorCittc2dpZCAic2VyaWFsIgorbXNnc3RyICJzYXJqYW51bWVybyIKKworbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCittc2dzdHIgInJhaWRhbiBzYXJqYW51bWVybyIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKK21zZ3N0ciAicmFpZGFuIHJlcGxheWdhaW4tdmFodmlzdHVzIgorCittc2dpZCAidHJhY2sgZ2FpbiBpbiBkYiIKK21zZ3N0ciAicmFpZGFuIHZhaHZpc3R1cyBkZXNpYmVsZWlzc8OkIgorCittc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBwZWFrIgorbXNnc3RyICJyYWlkYW4gcmVwbGF5Z2Fpbi1odWlwcHUiCisKK21zZ2lkICJwZWFrIG9mIHRoZSB0cmFjayIKK21zZ3N0ciAicmFpZGFuIGh1aXBwdSIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKK21zZ3N0ciAibGV2eW4gcmVwbGF5Z2Fpbi12YWh2aXN0dXMiCisKK21zZ2lkICJhbGJ1bSBnYWluIGluIGRiIgorbXNnc3RyICJsZXZ5biB2YWh2aXN0dXMgZGVzaWJlbGVpc3PDpCIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKK21zZ3N0ciAibGV2eW4gcmVwbGF5Z2Fpbi1odWlwcHUiCisKK21zZ2lkICJwZWFrIG9mIHRoZSBhbGJ1bSIKK21zZ3N0ciAibGV2eW4gaHVpcHB1IgorCittc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCittc2dzdHIgInJhaWRhbiByZXBsYXlnYWluLXZpaXRldGFzbyIKKworbXNnaWQgInJlZmVyZW5jZSBsZXZlbCBvZiB0cmFjayBhbmQgYWxidW0gZ2FpbiB2YWx1ZXMiCittc2dzdHIgInZpaXRldGFzbyByYWlkYW4gamEgYWxidW1pbiBnYWluLWFydm9pbGxlIgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSIKK21zZ3N0ciAia2llbGlrb29kaSIKKworbXNnaWQgImxhbmd1YWdlIGNvZGUgZm9yIHRoaXMgc3RyZWFtLCBjb25mb3JtaW5nIHRvIElTTy02MzktMSIKK21zZ3N0ciAidMOkbcOkbiB2aXJyYW4ga2llbGlrb29kaSBJU08tNjM5LTEtc3RhbmRhcmRpbiBtdWthaXNlc3RpIgorCittc2dpZCAiaW1hZ2UiCittc2dzdHIgImt1dmEiCisKK21zZ2lkICJpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICJrdXZhLCBqb2thIGxpaXR0eXkgdMOkaMOkbiB2aXJ0YWFuIgorCisjLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKK21zZ2lkICJwcmV2aWV3IGltYWdlIgorbXNnc3RyICJlc2lrYXRzZWx1a3V2YSIKKworbXNnaWQgInByZXZpZXcgaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiZXNpa2F0c2VsdWt1dmEsIGpva2EgbGlpdHR5eSB0w6Row6RuIHZpcnRhYW4iCisKK21zZ2lkICJhdHRhY2htZW50IgorbXNnc3RyICJsaWl0ZSIKKworbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgInRpZWRvc3RvLCBqb2thIG9uIGxpaXRldHR5IHTDpGjDpG4gdmlydGFhbiIKKworbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCittc2dzdHIgInRhaHRpYSBwZXIgbWludXV0dGkiCisKK21zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKK21zZ3N0ciAidGFodGllbiBtw6TDpHLDpCBwZXIgbWludXV0dGkgw6TDpG5lc3PDpCIKKworbXNnaWQgImtleXdvcmRzIgorbXNnc3RyICJhdmFpbnNhbmF0IgorCittc2dpZCAiY29tbWEgc2VwYXJhdGVkIGtleXdvcmRzIGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQiCittc2dzdHIgInBpbGt1aWxsYSBlcm90ZWxsdXQgYXZhaW5zYW5hdCxqb3RrYSBrdXZhYXZhdCBzaXPDpGx0w7bDpCIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBuYW1lIgorbXNnc3RyICJtYWFudGlldGVsbGlzZW4gc2lqYWlubmluIG5pbWkiCisKK21zZ2lkICIiCisiaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpdmUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yICIKKyJwcm9kdWNlZCIKK21zZ3N0ciAiIgorImlobWlzbHVldHRhdmEga3V2YXVzIHNpamFpbm5pc3RhIHRhaSBwYWlrYXN0YSwgam9zc2EgbWVkaWEgb24gbmF1aG9pdGV0dHUgIgorInRhaSB0dW90ZXR0dSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBsYXRpdHVkZSIKK21zZ3N0ciAibWFhbnRpZXRlZWxsaXNlbiBzaWphaW5uaW4gbGV2ZXlzcGlpcmkiCisKK21zZ2lkICIiCisiZ2VvIGxhdGl0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCisiZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIGVxdWF0b3IsIG5lZ2F0aXZlIHZhbHVlcyBmb3IgIgorInNvdXRoZXJuIGxhdGl0dWRlcykiCittc2dzdHIgIiIKKyJtYWFudGlldGVlbGxpbmVuIGxldmV5c3BpaXJpLCBqb3NzYSBtZWRpYSBvbiBuYXVob2l0ZXR0dSB0YWkgdHVvdGV0dHUgIgorImFzdGVpbmEgV0dTODQta29vcmRpbmFhdGlzdG9zc2EgKG5vbGxhIG9uIHDDpGl2w6RudGFzYWFqYSwgbmVnYXRpaXZpc2V0IGFydm90ICIKKyJvdmF0IGV0ZWzDpGlzacOkIGxldmV5c3BpaXJlasOkKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBsb25naXR1ZGUiCittc2dzdHIgIm1hYW50aWV0ZWVsbGlzZW4gc2lqYWlubmluIHBpdHV1c3BpaXJpIgorCittc2dpZCAiIgorImdlbyBsb25naXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgcHJpbWUgbWVyaWRpYW4gaW4gR3JlZW53aWNoL1VLLCAgIgorIm5lZ2F0aXZlIHZhbHVlcyBmb3Igd2VzdGVybiBsb25naXR1ZGVzKSIKK21zZ3N0ciAiIgorIm1hYW50aWV0ZWVsbGluZW4gcGl0dXVzcGlpcmksIGpvc3NhIG1lZGlhIG9uIG5hdWhvaXRldHR1IHRhaSB0dW90ZXR0dSAiCisiYXN0ZWluYSBXR1M4NC1rb29yZGluYWF0aXN0b3NzYSAobm9sbGEgb24gbm9sbGFtZXJpZGlhYW5pIEdyZWVud2ljaGlzc8OkICIKKyJZaGRpc3R5bmVlc3PDpCBrdW5pbmdhc2t1bm5hc3NhLCBuZWdhdGlpdmlzZXQgYXJ2b3Qgb3ZhdCBsw6RudGlzacOkICIKKyJwaXR1dXNwaWlyZWrDpCkiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gZWxldmF0aW9uIgorbXNnc3RyICJtYWFudGlldGVlbGxpc2VuIHNpamFpbm5pbiBrb3JrZXVzdGFzbyIKKworbXNnaWQgIiIKKyJnZW8gZWxldmF0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiBtZXRlcnMgIgorImFjY29yZGluZyB0byBXR1M4NCAoemVybyBpcyBhdmVyYWdlIHNlYSBsZXZlbCkiCittc2dzdHIgIiIKKyJtYWFudGlldGVsbGluZW4ga29ya2V1c3Rhc28sIGpvc3NhIG1lZGlhIG9uIG5hdWhvaXRldHR1IHRhaSB0dW90ZXR0dSAiCisibWV0cmVpbsOkIFdHUzg0LWtvb3JkaW5hYXRlaXN0YSAobm9sbGEgb24ga2Vza2ltw6TDpHLDpGluZW4gbWVyZW5waW50YSkiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gY291bnRyeSIKK21zZ3N0ciAibWFhbnRpZXRlZWxsaXNlbiBzaWphaW5uaW4gbWFhIgorCittc2dpZCAiY291bnRyeSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCittc2dzdHIgIm1hYSAoZW5nbGFubmlua2llbGluZW4gbmltaSksIGpvc3NhIG1lZGlhIG9uIG5hdWhvaXRldHR1IHRhaSB0dW90ZXR0dSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBjaXR5IgorbXNnc3RyICJtYWFudGlldGVlbGxpc2VuIHNpamFpbm5pbiBrYXVwdW5raSIKKworbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICIiCisia2F1cHVua2kgKGVuZ2xhbm5pbmtpZWxpbmVuIG5pbWkpLCBqb3NzYSBtZWRpYSBvbiBuYXVob2l0ZXR0dSB0YWkgdHVvdGV0dHUiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gc3VibG9jYXRpb24iCittc2dzdHIgIm1hYW50aWV0ZWVsbGlzZW4gc2lqYWlubmluIGFsaXNpamFpbnRpIgorCittc2dpZCAiIgorImEgbG9jYXRpb24gd2hpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgorInRoZSBuZWlnaGJvcmhvb2QpIgorbXNnc3RyICJzaWphaW50aSBrYXVwdW5naW4gc2lzw6RsbMOkLCBqb3NzYSBtZWRpYSBvbiBuYXVob2l0ZXR0dSB0YWkgdHVvdGV0dHUiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gaG9yaXpvbnRhbCBlcnJvciIKK21zZ3N0ciAibWFhbnRpZXRlbGxpc2VuIHNpamFpbm5pbiB2aXJoZSB2YWFrYXN1b3Jhc3NhIgorCittc2dpZCAiZXhwZWN0ZWQgZXJyb3Igb2YgdGhlIGhvcml6b250YWwgcG9zaXRpb25pbmcgbWVhc3VyZXMgKGluIG1ldGVycykiCittc2dzdHIgIm9kb3RldHR1IHZpcmhlIHBhaWthbm51a3NlbiB2YWFrYXN1b3Jhc3NhIG1pdHRhdWtzZXNzYSAobWV0cmVpbsOkKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKK21zZ3N0ciAibWFhbnRpZXRlZWxsaXNlbiBzaWphaW5uaW4gbGlpa2Vub3BldXMiCisKK21zZ2lkICIiCisibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBpbiBtL3MiCittc2dzdHIgIm5hdWhvaXR0YXZhbiBsYWl0dGVlbiBsaWlrZW5vcGV1cyBuYXVob2l0ZXR0YWVzc2EgeWtzaWvDtnNzw6QgbS9zIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKK21zZ3N0ciAibWFhbnRpZXRlZWxsaXNlbiBzaWphaW5uaW4gbGlpa2VzdXVudGEiCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgorIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKKyJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKyJpbG1vaXR0YWEgbWVkaWFhIG5hdWhvaXR0YXZhbiBsYWl0dGVlbiBsaWlrZXN1dW5uYW4uIEVzaXRldMOkw6RuIGFzdGVpbmFcbiIKKyJsaXVrdWx1a3VtdW9kb3NzYSwgam9zc2EgMCB0YXJrb2l0dGFhIG1hYW50aWV0ZWVsbGlzdMOkIHBvaGpvaXN0YSBqYVxuIgorImFzdGVldCBrYXN2YXZhdCBtecO2dMOkcMOkaXbDpMOkbiIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBjYXB0dXJlIGRpcmVjdGlvbiIKK21zZ3N0ciAibWFhbnRpZXRlZWxsaXNlbiBzaWphaW5uaW4ga3V2YXVzc3V1bnRhIgorCittc2dpZCAiIgorImluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcgIGEgbWVkaWEuICIKKyJJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50ICByZXByZXNlbnRhdGlvbiwgMCBtZWFucyB0aGUgIgorImdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgorbXNnc3RyICIiCisiaWxtb2l0dGFhIHN1dW5uYW4sIGpvaG9uIG1lZGlhYSBuYXVob2l0dGF2YSBsYWl0ZSBvc29pdHRhYSBuYXVob2l0ZXR0YWVzc2EuICIKKyJFc2l0ZXTDpMOkbiBhc3RlaW5hIGxpdWt1bHVrdW11b2Rvc3NhLCBqb3NzYSAwIHRhcmtvaXR0YWEgbWFhbnRpZXRlZWxsaXN0w6QgIgorInBvaGpvaXN0YSBqYSBhc3RlZXQga2FzdmF2YXQgbXnDtnTDpHDDpGl2w6TDpG4iCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZScgaGVyZQorbXNnaWQgInNob3cgbmFtZSIKK21zZ3N0ciAib2hqZWxtYW4gbmltaSIKKworbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCittc2dzdHIgIlRWL3BvZGNhc3Qvc2FyamFuIG9oamVsbWFuIG5pbWksIGpvc3RhIHTDpG3DpCBtZWRpYSBvbiBsw6RodMO2aXNpbiIKKworIy4gVFJBTlNMQVRPUlM6ICdzaG93IHNvcnRuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZSBhcyB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzJyBoZXJlCittc2dpZCAic2hvdyBzb3J0bmFtZSIKK21zZ3N0ciAib2hqZWxtYW4gbGFqaXR0ZWx1bmltaSIKKworbXNnaWQgIiIKKyJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiIgorIkxhaml0dGVsdXVuIGvDpHl0ZXR0w6R2w6QgVFYvcG9kY2FzdC9zYXJqYW4gb2hqZWxtYW4gbmltaSwgam9zdGEgdMOkbcOkIG1lZGlhIG9uICIKKyJsw6RodMO2aXNpbiIKKworbXNnaWQgImVwaXNvZGUgbnVtYmVyIgorbXNnc3RyICJlcGlzb2RpbiBudW1lcm8iCisKK21zZ2lkICJUaGUgZXBpc29kZSBudW1iZXIgaW4gdGhlIHNlYXNvbiB0aGUgbWVkaWEgaXMgcGFydCBvZiIKK21zZ3N0ciAiRXBpc29kaW4gbnVtZXJvIGthdWRlbGxhLCBqb2hvbiB0w6Rtw6QgbWVkaWEga3V1bHV1IgorCittc2dpZCAic2Vhc29uIG51bWJlciIKK21zZ3N0ciAiS2F1ZGVuIG51bWVybyIKKworbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICJLYXVkZW4gbnVtZXJvIG9oamVsbWFsbGUsIGpvaG9uIHTDpG3DpCBtZWRpYSBrdXVsdXUiCisKK21zZ2lkICJseXJpY3MiCittc2dzdHIgInNhbm9pdHVrc2V0IgorCittc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgorbXNnc3RyICJNZWRpYW4gc2Fub2l0dWtzZXQsIHlsZWVuc8OkIGvDpHl0w7Zzc8OkIGxhdWx1aWxsZSIKKworbXNnaWQgImNvbXBvc2VyIHNvcnRuYW1lIgorbXNnc3RyICJzw6R2ZWx0w6Rqw6RuIGxhaml0dGVsdW5pbWkiCisKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJzw6R2ZWxseWtzZXN0w6QgdmFzdHV1c3NhIG9sZXZhKHQpIGhlbmtpbMO2KHQpIGxhaml0dGVsdWEgdmFydGVuIgorCittc2dpZCAiZ3JvdXBpbmciCittc2dzdHIgInJ5aG1pdHRlbHkiCisKK21zZ2lkICIiCisiR3JvdXBzIHJlbGF0ZWQgbWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSB0cmFja3MsIGxpa2UgdGhlIGRpZmZlcmVudCBwaWVjZXMgIgorIm9mIGEgY29uY2VydG8uIEl0IGlzIGEgaGlnaGVyIGxldmVsIHRoYW4gYSB0cmFjaywgYnV0IGxvd2VyIHRoYW4gYW4gYWxidW0iCittc2dzdHIgIiIKKyJSeWhtaXR0ZWxlZSB0b2lzaWluc2EgbGlpdHR5dsOkdCBtZWRpYSwgam90a2Ega29vc3R1dmF0IHVzZWFtbWFzdGEgcmFpZGFzdGEsICIKKyJrdXRlbiBrb25zZXJ0aW4gZXJpIG9zYXQuIFTDpG3DpCBvbiBrb3JrZWFtbWFuIHRhc29uIGt1aW4gcmFpdGEsIG11dHRhICIKKyJtYXRhbGFtbWFuIHRhc29uIGt1aW4gbGV2eSIKKworbXNnaWQgInVzZXIgcmF0aW5nIgorbXNnc3RyICJrw6R5dHTDpGrDpG4gYXJ2aW8iCisKK21zZ2lkICIiCisiUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCisidGhpcyBtZWRpYSIKK21zZ3N0ciAiIgorIkFydmlvIGvDpHl0dMOkasOkbHTDpC4gTWl0w6Qgc3V1cmVtcGkgc2lqb2l0dXMsIHNpdMOkIGVuZW1tw6RuIGvDpHl0dMOkasOkIHBpdMOkw6QgdMOkc3TDpCAiCisibWVkaWFzdGEiCisKK21zZ2lkICJkZXZpY2UgbWFudWZhY3R1cmVyIgorbXNnc3RyICJsYWl0ZXZhbG1pc3RhamEiCisKK21zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICJUw6Rtw6RuIG1lZGlhbiBsdW9taXNlZW4ga8OkeXRldHluIGxhaXR0ZWVuIHZhbG1pc3RhamEiCisKK21zZ2lkICJkZXZpY2UgbW9kZWwiCittc2dzdHIgImxhaXRlbWFsbGkiCisKK21zZ2lkICJNb2RlbCBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCittc2dzdHIgIlTDpG3DpG4gbWVkaWFuIGx1b21pc2VlbiBrw6R5dGV0eW4gbGFpdHRlZW4gbWFsbGkiCisKK21zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgorbXNnc3RyICJzb3ZlbGx1a3NlbiBuaW1pIgorCittc2dpZCAiQXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIgorbXNnc3RyICJUw6Rtw6RuIG1lZGlhbiBsdW9taXNlZW4ga8OkeXRldHR5IHNvdmVsbHVzIgorCittc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKK21zZ3N0ciAic292ZWxsdXNkYXRhIgorCittc2dpZCAiQXJiaXRyYXJ5IGFwcGxpY2F0aW9uIGRhdGEgdG8gYmUgc2VyaWFsaXplZCBpbnRvIHRoZSBtZWRpYSIKK21zZ3N0ciAiTWllbGl2YWx0YWluZW4gc292ZWxsdXNkYXRhIGpva2Egc2VyaWFsaXNvaWRhYW4gbWVkaWFhbiIKKworbXNnaWQgImltYWdlIG9yaWVudGF0aW9uIgorbXNnc3RyICJrdXZhc3V1bnRhIgorCittc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgorbXNnc3RyICJLdWlua2Ega3V2YSB0dWxpc2kgcHnDtnLDpHl0dMOkw6QgdGFpIGvDpMOkbnTDpMOkIHltcMOkcmkgZW5uZW4gbsOkeXR0w6RtaXN0w6QiCisKK21zZ2lkICIsICIKK21zZ3N0ciAiLCAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAiVklSSEU6IGVsZW1lbnRpbHTDpCAlczogJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQWRkaXRpb25hbCBkZWJ1ZyBpbmZvOlxuIgorIiVzXG4iCittc2dzdHIgIiIKKyJMaXPDpHRpZXRvamEgdmlhbmV0c2ludMOkw6RuOlxuIgorIiVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgorbXNnc3RyICJtw6TDpHJpdGV0dHkgdHloasOkIHPDpGlsacO2IOKAnSVz4oCdLCBlaSBzYWxsaXR0dSIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBiaW4gXCIlc1wiLCBza2lwcGluZyIKK21zZ3N0ciAiZWkgc8OkaWxpw7Z0w6Qg4oCdJXPigJ0sIG9oaXRldGFhbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCittc2dzdHIgIm9taW5haXN1dXR0YSDigJ0lc+KAnSBlaSBvbGUgZWxlbWVudGlzc8OkIOKAnSVz4oCdIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKK21zZ3N0ciAiZWxlbWVudGluIOKAnSUyJHPigJ0gb21pbmFpc3V1dHRhIOKAnSUxJHPigJ0gZWkgdm9pdHUgYXNldHRhYSBhcnZvb24g4oCdJTMkc+KAnSIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbGluayAlcyB0byAlcyIKK21zZ3N0ciAiZWxlbWVudHRpw6QgJXMgZWkgdm9pdHUgbGlua2l0dMOkw6QgZWxlbWVudHRpaW4gJXMiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCittc2dzdHIgImVpIGVsZW1lbnR0acOkIOKAnSVz4oCdIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKK21zZ3N0ciAia3lreWrDpCDigJ0lc+KAnSBlaSB2b2l0dSBqw6RzZW50w6TDpCIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIKK21zZ3N0ciAibGlua2tpIGlsbWFuIGzDpGhkZS1lbGVtZW50dGnDpCIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzaW5rIGVsZW1lbnQiCittc2dzdHIgImxpbmtraSBpbG1hbiBuaWVsdWVsZW1lbnR0acOkIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNvdXJjZSBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJlaSBsw6RoZGUtZWxlbWVudHRpw6QgVVJJOmxsZSDigJ0lc+KAnSIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBlbGVtZW50IHRvIGxpbmsgVVJJIFwiJXNcIiB0byIKK21zZ3N0ciAiZWkgZWxlbWVudHRpw6QsIGpvdGEgbGlua2l0dMOkw6QgVVJJaW4g4oCdJXPigJ0iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJlaSBuaWVsdWVsZW1lbnR0acOkIFVSSWxsZSDigJ0lc+KAnSIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbGluayBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgIm5pZWx1ZWxlbWVudHRpw6QgZWkgdm9pdHUgbGlua2l0dMOkw6QgVVJJbGxlIOKAnSVz4oCdIgorCittc2dpZCAiZW1wdHkgcGlwZWxpbmUgbm90IGFsbG93ZWQiCittc2dzdHIgInR5aGrDpMOkIGxpdWt1aGlobmFhIGVpIHNhbGxpdGEiCisKK21zZ2lkICJJbnRlcm5hbCBjbG9jayBlcnJvci4iCittc2dzdHIgIlNpc8OkaW5lbiBrZWxsb3ZpcmhlLiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCittc2dzdHIgIlNpc8OkaW5lbiB0aWVkb24gdmlydGF1c3ZpcmhlLiIKKworbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgorbXNnc3RyICJVc2VpdGEgcHVza3VyZWl0YSBwdXRvaWxlZS4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCittc2dzdHIgIlNpc8OkaW5lbiB0aWVkb24gdmlydGF1c29uZ2VsbWEuIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBzdHJlYW0gZXJyb3IuIgorbXNnc3RyICJTaXPDpGluZW4gdGlldG92aXJ0YXZpcmhlLiIKKworbXNnaWQgIkZpbHRlciBjYXBzIgorbXNnc3RyICJLeWt5c3VvZGF0dXMiCisKK21zZ2lkICIiCisiUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCisicHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKK21zZ3N0ciAiIgorIlJham9pdGEgbWFoZG9sbGlzaWEgc2FsbGl0dHVqYSBreWt5asOkIChOVUxMIHRhcmtvaXR0YWEgbWl0w6QgdGFoYW5zYSkuIFTDpG3DpG4gIgorIm9taW5haXN1dWRlbiBhc2V0dGFtaW5lbiBvdHRhYSBrYWh2YW4gYW5uZXR0dXVuIEdzdENhcHMtb2xpb29uLiIKKworbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJLaXJqb2l0dXN0YSB2YXJ0ZW4gZWkgbcOkw6RyaXRldHR5IHRpZWRvc3RvbmltZcOkLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCittc2dzdHIgIlRpZWRvc3RvYSDigJ0lc+KAnSBlaSB2b2l0dSBhdmF0YSBraXJqb2l0dGFtaXN0YSB2YXJ0ZW4uIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNsb3NpbmcgZmlsZSBcIiVzXCIuIgorbXNnc3RyICJWaXJoZSBzdWxqZXR0YWVzc2EgdGllZG9zdG9hIOKAnSVz4oCdLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiVmlyaGUga2VsYXR0YWVzc2EgdGllZG9zdG9hIOKAnSVz4oCdLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiVmlyaGUga2lyam9pdGV0dGFlc3NhIHRpZWRvc3Rvb24g4oCdJXPigJ0uIgorCittc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCittc2dzdHIgIkx1a2VtaXN0YSB2YXJ0ZW4gZWkgb2xlIG3DpMOkcml0ZXR0eSB0aWVkb3N0b25pbWXDpC4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgorbXNnc3RyICJUaWVkb3N0b2Eg4oCdJXPigJ0gZWkgdm9pdHUgYXZhdGEgbHVrZW1pc3RhIHZhcnRlbi4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCittc2dzdHIgIkVpIHNhYXR1IHRpZXRvamEga29odGVlc3RhIOKAnSVz4oCdLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIgorbXNnc3RyICLigJ0lc+KAnSBvbiBoYWtlbWlzdG8uIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKK21zZ3N0ciAiVGllZG9zdG8g4oCdJXPigJ0gb24gcGlzdG9rZS4iCisKK21zZ2lkICJGYWlsZWQgYWZ0ZXIgaXRlcmF0aW9ucyBhcyByZXF1ZXN0ZWQuIgorbXNnc3RyICJFcMOkb25uaXN0dWksIGt1dGVuIHB5eWRldHRpaW4sIHlyaXR5c3RlbiBqw6Rsa2Vlbi4iCisKK21zZ2lkICJObyBUZW1wIGRpcmVjdG9yeSBzcGVjaWZpZWQuIgorbXNnc3RyICJUaWxhcMOkaXNoYWtlbWlzdG9hIGVpIG9sZSBtw6TDpHJpdGV0dHkuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcCBmaWxlIFwiJXNcIi4iCittc2dzdHIgIkVpIHZvaXR1IGx1b2RhIHRpbGFww6Rpc3RpZWRvc3RvYSDigJ0lc+KAnS4iCisKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIgorbXNnc3RyICJWaXJoZSBraXJqb2l0ZXR0YWVzc2EgbGF0YXVzdGllZG9zdG9vbi4iCisKK21zZ2lkICJjYXBzIgorbXNnc3RyICJreXZ5dCIKKworbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCittc2dzdHIgInR1bm5pc3RldHR1IGt5dnl0IHZpcnJhc3NhIgorCittc2dpZCAibWluaW11bSIKK21zZ3N0ciAidsOkaGludMOkw6RuIgorCittc2dpZCAibWF4aW11bSIKK21zZ3N0ciAiZW5pbnTDpMOkbiIKKworbXNnaWQgImZvcmNlIGNhcHMiCittc2dzdHIgInBha290YSBreXZ5dCIKKworbXNnaWQgImZvcmNlIGNhcHMgd2l0aG91dCBkb2luZyBhIHR5cGVmaW5kIgorbXNnc3RyICJwYWtvdGEga3l2eXQgaWxtYW4gdHl5cHBpaGFrdWEiCisKK21zZ2lkICJTdHJlYW0gY29udGFpbnMgbm8gZGF0YS4iCittc2dzdHIgIlZpcnRhIG9uIHR5aGrDpC4iCisKK21zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgorbXNnc3RyICJUb3RldXRldHV0IHJhamFwaW5uYXQ6XG4iCisKK21zZ2lkICJyZWFkYWJsZSIKK21zZ3N0ciAibHVldHRhdmlzc2EiCisKK21zZ2lkICJ3cml0YWJsZSIKK21zZ3N0ciAia2lyam9pdGV0dGF2aXNzYSIKKworbXNnaWQgImNvbnRyb2xsYWJsZSIKK21zZ3N0ciAib2hqYXR0YXZpc3NhIgorCittc2dpZCAiY2hhbmdlYWJsZSBpbiBOVUxMLCBSRUFEWSwgUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUiCittc2dzdHIgInZhaWhkZXR0YXZpc3NhIFRZSErDhC0sIFZBTE1JUy0sIFRBVU9MTEEtIHRhaSBTT0ktdGlsb2lzc2EiCisKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCwgUkVBRFkgb3IgUEFVU0VEIHN0YXRlIgorbXNnc3RyICJ2YWloZGV0dGF2aXNzYSB2YWluIFRZSErDhC0sIFZBTE1JUy0gdGFpIFRBVU9MTEEtdGlsb2lzc2EiCisKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKK21zZ3N0ciAidmFpaGRldHRhdmlzc2EgdmFpbiBUWUhKw4QtIHRhaSBWQUxNSVMtLXRpbG9pc3NhIgorCittc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgorbXNnc3RyICJNdXN0YWxpc3RhdHV0IHRpZWRvc3RvdDoiCisKK21zZ2lkICJUb3RhbCBjb3VudDogIgorbXNnc3RyICJZaHRlaXNtw6TDpHLDpDogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdGVkIGZpbGUiCittc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdGVkIGZpbGVzIgorbXNnc3RyWzBdICIlZCBtdXN0YWxpc3RhdHR1IHRpZWRvc3RvIgorbXNnc3RyWzFdICIlZCBtdXN0YWxpc3RhdHR1YSB0aWVkb3N0b2EiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgcGx1Z2luIgorbXNnaWRfcGx1cmFsICIlZCBwbHVnaW5zIgorbXNnc3RyWzBdICIlZCBsaWl0w6RubsOkaW5lbiIKK21zZ3N0clsxXSAiJWQgbGlpdMOkbm7DpGlzdMOkIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdCBlbnRyeSIKK21zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0IGVudHJpZXMiCittc2dzdHJbMF0gIiVkIG11c3RhbGlzdGF1c3RpZXR1ZSIKK21zZ3N0clsxXSAiJWQgbXVzdGFsaXN0YXVzdGlldHVldHRhIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGZlYXR1cmUiCittc2dpZF9wbHVyYWwgIiVkIGZlYXR1cmVzIgorbXNnc3RyWzBdICIlZCBvbWluYWlzdXVzIgorbXNnc3RyWzFdICIlZCBvbWluYWlzdXV0dGEiCisKK21zZ2lkICJQcmludCBhbGwgZWxlbWVudHMiCittc2dzdHIgIlR1bG9zdGEga2Fpa2tpIGVsZW1lbnRpdCIKKworbXNnaWQgIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHIgIlR1bGlzdGEgbHVldHRlbG8gdGllZG9zdG9pc3RhIG11c3RhbGxhIGxpc3RhbGxhIgorCittc2dpZCAiIgorIlByaW50IGEgbWFjaGluZS1wYXJzYWJsZSBsaXN0IG9mIGZlYXR1cmVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIG9yIGFsbCAiCisicGx1Z2lucyBwcm92aWRlLlxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBpbiBjb25uZWN0aW9uIHdpdGggZXh0ZXJuYWwgIgorImF1dG9tYXRpYyBwbHVnaW4gaW5zdGFsbGF0aW9uIG1lY2hhbmlzbXMiCittc2dzdHIgIiIKKyJUdWxvc3RhIGtvbmVsdWV0dGF2YSBsdWV0dGVsbyBvbWluYWlzdXVrc2lzdGEsIGpvdGthIGFubmV0dHUgbGlpdMOkbm7DpGluZW4gIgorInRhcmpvYWEuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSHnDtmR5bGxpbmVuIHVsa29pc3RlbiBhdXRvbWFhdHRpc3RlbiAiCisibGlpdMOkbm7DpGlzdGVuIGFzZW5udXNtZWthbmlzbWllbiB5aHRleWRlc3PDpCIKKworbXNnaWQgIkxpc3QgdGhlIHBsdWdpbiBjb250ZW50cyIKK21zZ3N0ciAiTHVldHRlbGUgbGlpdMOkbm7DpGlzZW4gc2lzw6RsdMO2IgorCittc2dpZCAiUHJpbnQgc3VwcG9ydGVkIFVSSSBzY2hlbWVzLCB3aXRoIHRoZSBlbGVtZW50cyB0aGF0IGltcGxlbWVudCB0aGVtIgorbXNnc3RyICJUdWxvc3RhIHR1ZXR1dCBVUkktc2tlZW1hdCBzZWvDpCBuZSB0b3RldXR0YXZhdCBlbGVtZW50aXQiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGxvYWQgcGx1Z2luIGZpbGU6ICVzXG4iCittc2dzdHIgIkVpIHZvaXR1IGxhZGF0YSBsaWl0w6RubsOkaXN0aWVkb3N0b2E6ICVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iCittc2dzdHIgIkVpIHTDpGxsYWlzdGEgZWxlbWVudHRpw6QgdGFpIGxpaXTDpG5uw6Rpc3TDpCDigJ0lc+KAnVxuIgorCittc2dpZCAiSW5kZXggc3RhdGlzdGljcyIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIGVsZW1lbnQgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAiU2FhdGlpbiB2aWVzdGkgIyV1IGVsZW1lbnRpbHTDpCDigJ0lc+KAnSAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCittc2dzdHIgIlNhYXRpaW4gdmllc3RpICMldSB0w6R5dHRlZWx0w6Qg4oCdJXM6JXPigJ0gKCVzKTogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICJTYWF0aWluIHZpZXN0aSAjJXUgb2xpb2x0YSDigJ0lc+KAnSAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKK21zZ3N0ciAiU2FhdGlpbiB2aWVzdGkgIyV1ICglcyk6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgRU9TIGZyb20gZWxlbWVudCBcIiVzXCIuXG4iCittc2dzdHIgIlNhYXRpaW4gRU9TICh2aXJyYW4gbG9wcHUpIGVsZW1lbnRpbHTDpCDigJ0lc+KAnS5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgorbXNnc3RyICJMw5ZZVFlJIE1FUktJTlTDhDogc2VuIGzDtnlzaSBlbGVtZW50dGkg4oCdJXPigJ0uXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBwYWQgXCIlczolc1wiLlxuIgorbXNnc3RyICJMw5ZZVFlJIE1FUktJTlTDhDogc2VuIGzDtnlzaSB0w6R5dGUg4oCdJXM6JXPigJ0uXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgorbXNnc3RyICJMw5ZZVFlJIE1FUktJTlTDhDogc2VuIGzDtnlzaSBvbGlvIOKAnSVz4oCdLlxuIgorCittc2dpZCAiRk9VTkQgVEFHXG4iCittc2dzdHIgIkzDlllUSSBNRVJLSU5Uw4RcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSU5GTzpcbiIKKyIlc1xuIgorbXNnc3RyICIiCisiSU5GTzpcbiIKKyIlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAiVkFST0lUVVM6IGVsZW1lbnRpbHTDpCAlczogJXNcbiIKKworbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgorbXNnc3RyICJFc2lwecO2cml0ZXR0eSwgb2RvdGV0YWFuIHB1c2t1cm9pbm5pbiBww6TDpHR0eW1pc3TDpC4uLlxuIgorCittc2dpZCAiYnVmZmVyaW5nLi4uIgorbXNnc3RyICJwdXNrdXJvaWRhYW4uLi4iCisKK21zZ2lkICJEb25lIGJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgorbXNnc3RyICJQdXNrdXJvaW50aSB0ZWh0eSwgYXNldGV0YWFuIGxpdWt1aGlobmEgdGlsYWFuIFNPSS4uLlxuIgorCittc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAiUHVza3Vyb2lkYWFuLCBhc2V0ZXRhYW4gbGl1a3VoaWhuYSB0aWxhYW4gVEFVT0xMQS4uLlxuIgorCittc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKK21zZ3N0ciAiVXVkZWxsZWVuamFhIGxhdGVuc3NpLi4uXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBzdGF0ZSB0byAlcyBhcyByZXF1ZXN0ZWQgYnkgJXMuLi5cbiIKK21zZ3N0ciAiQXNldGV0YWFuIHRpbGFhbiAlcyBrdXRlbiAlcyBweXlzaS4uLlxuIgorCittc2dpZCAiSW50ZXJydXB0OiBTdG9wcGluZyBwaXBlbGluZSAuLi5cbiIKK21zZ3N0ciAiS2Vza2V5dHlzOiBQeXPDpHl0ZXTDpMOkbiBsaXVrdWhpaG5hIC4uLlxuIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nIGVsZW1lbnQ6ICVzXG4iCittc2dzdHIgImVpIGVsZW1lbnR0acOkIOKAnSVz4oCdIgorCittc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgorbXNnc3RyICJUdWxvc3RlbWVya2lubsOkdCAodHVubmV0YWFuIG15w7ZzIG1ldGFkYXRhbmEpIgorCittc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKK21zZ3N0ciAiVHVsb3N0ZXRpbGF0aWVkb3QgamEgb21pbmFpc3V1c2h1b21pb3QiCisKK21zZ2lkICJEbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uIgorbXNnc3RyICLDhGzDpCB0dWxvc3RhIG1pdMOkw6RuIGVkaXN0eW1pc3RpZXRvYSIKKworbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKK21zZ3N0ciAiVHVsb3N0ZXZpZXN0aXQiCisKK21zZ2lkICJEbyBub3Qgb3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBvZiBUWVBFIgorbXNnc3RyICLDhGzDpCB0dWxvc3RhIHRpbGF0aWV0b2EgVFlZUFBJIgorCittc2dpZCAiVFlQRTEsVFlQRTIsLi4uIgorbXNnc3RyICJUWVlQUEkxLFRZWVBQSTIsLi4uIgorCittc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgorbXNnc3RyICLDhGzDpCBhc2VubmEgdmlyaGVlbmvDpHNpdHRlbGludMOkIgorCittc2dpZCAiUHJpbnQgYWxsb2MgdHJhY2UgKGlmIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lKSIKK21zZ3N0ciAiVHVsb3N0YSB2YXJhdXNqw6Rsa2kgKGpvcyB2YWxpdHR1IGvDpMOkbm7DtmtzZW4geWh0ZXlkZXNzw6QpIgorCittc2dpZCAiRm9yY2UgRU9TIG9uIHNvdXJjZXMgYmVmb3JlIHNodXR0aW5nIHRoZSBwaXBlbGluZSBkb3duIgorbXNnc3RyICJQYWtvdGEgdmlycmFuLWxvcHB1IGzDpGh0ZWlsbGUgZW5uZW4gbGl1a3VoaWhhbiBzYW1tdXR0YW1pc3RhIgorCittc2dpZCAiR2F0aGVyIGFuZCBwcmludCBpbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZDogJXMuXG4iCittc2dzdHIgIlZJUkhFOiBsaXVrdWhpaG5hYSBlaSB2b2l0dSByYWtlbnRhYTogJXMuXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlxuIgorbXNnc3RyICJWSVJIRTogbGl1a3VoaWhuYWEgZWkgdm9pdHUgcmFrZW50YWEuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogZXJyb25lb3VzIHBpcGVsaW5lOiAlc1xuIgorbXNnc3RyICJWQVJPSVRVUzogdmlyaGVlbGxpbmVuIGxpdWt1aGlobmE6ICVzXG4iCisKK21zZ2lkICJFUlJPUjogdGhlICdwaXBlbGluZScgZWxlbWVudCB3YXNuJ3QgZm91bmQuXG4iCittc2dzdHIgIlZJUkhFOiDigJ1saXVrdWhpaG5h4oCdLWVsZW1lbnR0acOkIGVpIGzDtnl0eW55dC5cbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgorbXNnc3RyICJBc2V0ZXRhYW4gbGl1a3VoaWhuYSB0aWxhYW4gVEFVT0xMQS4uLlxuIgorCittc2dpZCAiRVJST1I6IFBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwYXVzZS5cbiIKK21zZ3N0ciAiVklSSEU6IExpdWt1aGlobmEgZWkgaGFsdWEgbWVubsOkIHRhdW9sbGUuXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCittc2dzdHIgIkxpdWt1aGlobmEgb24ga8OkeW5uaXNzw6QgZWlrw6Qgc2l0w6QgdGFydml0c2UgRVNJUlVMTEFUQS4uLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTElORyAuLi5cbiIKK21zZ3N0ciAiTGl1a3VoaWhuYSBFU0lSVUxMQVVUVVUuLi5cbiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcHJlcm9sbC5cbiIKK21zZ3N0ciAiVklSSEU6IExpdWt1aGlobmEgZWkgaGFsdWEgZXNpcnVsbGF1dHVhLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgorbXNnc3RyICJMaXVrdWhpaG5hIG9uIEVTSVJVTExBVFRVLi4uXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIkFzZXRldGFhbiBsaXVrdWhpaG5hIHRpbGFhbiBTT0kuLi5cbiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKK21zZ3N0ciAiVklSSEU6IExpdWt1aGlobmEgZWkgaGFsdWEgdG9pc3RhYS5cbiIKKworbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIEZvcmNpbmcgRU9TIG9uIHRoZSBwaXBlbGluZVxuIgorbXNnc3RyICIiCisiVmlycmFuLWxvcHB1IHNhbW11dGV0dGFlc3NhIGvDpHl0w7Zzc8OkIC0tIHBha290ZXRhYW4gdmlycmFuLWxvcHB1ICIKKyJsaXVrdWhpaG5hbGxlXG4iCisKK21zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKK21zZ3N0ciAiT2RvdGV0YWFuIHZpcnJhbiBsb3BwdWEuLi5cbiIKKworbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCittc2dzdHIgIlZpcnJhbi1sb3BwdSB2YXN0YWFub3RldHR1IC0gcHlzw6R5dGV0w6TDpG4gbGl1a3VoaWhuYS4uLlxuIgorCittc2dpZCAiQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgd2FpdGluZyBmb3IgRU9TXG4iCittc2dzdHIgIlRhcGFodHVpIHZpcmhlIG9kb3RldHRhZXNzYSB2aXJyYW4tbG9wcHVhXG4iCisKK21zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKK21zZ3N0ciAiU3Vvcml0dXMgcMOkw6R0dHlpIGrDpGxrZWVuICUiCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIC4uLlxuIgorbXNnc3RyICJBc2V0ZXRhYW4gbGl1a3VoaWhuYSB0aWxhYW4gVkFMTUlTLi4uXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIE5VTEwgLi4uXG4iCittc2dzdHIgIkFzZXRldGFhbiBsaXVrdWhpaG5hIHRpbGFhbiBUWUhKw4QuLi5cbiIKKworbXNnaWQgIkZyZWVpbmcgcGlwZWxpbmUgLi4uXG4iCittc2dzdHIgIlZhcGF1dGV0YWFuIGxpdWt1aGlobmEuLi5cbiIKKworI34gbXNnaWQgIlVzYWdlOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLiBdXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJLw6R5dHTDtjogZ3N0LXhtbGxhdW5jaCA8dGllZG9zdG8ueG1sPiBbIGVsZW1lbnR0aS5vbWluYWlzdXVzPWFydm8gLi4uIF1cbiIKKworI34gbXNnaWQgIkVSUk9SOiBwYXJzZSBvZiB4bWwgZmlsZSAnJXMnIGZhaWxlZC5cbiIKKyN+IG1zZ3N0ciAiVklSSEU6IFhNTC10aWVkb3N0b24g4oCdJXPigJ0gasOkc2VudMOkbWluZW4gZXDDpG9ubmlzdHVpLlxuIgorCisjfiBtc2dpZCAiRVJST1I6IG5vIHRvcGxldmVsIHBpcGVsaW5lIGVsZW1lbnQgaW4gZmlsZSAnJXMnLlxuIgorI34gbXNnc3RyICJWSVJIRTogcMOkw6R0YXNvbiBsaXVrdWhpaG5hZWxlbWVudHRpw6QgZWkgb2xlIHRpZWRvc3Rvc3NhIOKAnSVz4oCdLlxuIgorCisjfiBtc2dpZCAiV0FSTklORzogb25seSBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLlxuIgorI34gbXNnc3RyICJWQVJPSVRVUzogdmFpbiB5aHTDpCBww6TDpHRhc29uIGVsZW1lbnR0acOkIHR1ZXRhYW4gdMOkbGzDpCBrZXJ0YWEuXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogY291bGQgbm90IHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAlZDogJXMuXG4iCisjfiBtc2dzdHIgIlZJUkhFOiBlaSB2b2l0dSBqw6RzZW50w6TDpCBrb21lbnRvcml2aWFyZ3VtZW50dGlhICVkOiAlcy5cbiIKKworI34gbXNnaWQgIldBUk5JTkc6IGVsZW1lbnQgbmFtZWQgJyVzJyBub3QgZm91bmQuXG4iCisjfiBtc2dzdHIgIlZBUk9JVFVTOiBlbGVtZW50dGnDpCBuaW1lbHTDpCDigJ0lc+KAnSBlaSBsw7Z5dHlueXQuXG4iCisKKyN+IG1zZ2lkICJTYXZlIHhtbCByZXByZXNlbnRhdGlvbiBvZiBwaXBlbGluZSB0byBGSUxFIGFuZCBleGl0IgorI34gbXNnc3RyICJUYWxsZW5uYSBsaXVrdWhpaG5hbiBYTUwtZXNpdHlzIFRJRURPU1RPb24gamEgcG9pc3R1IgorCisjfiBtc2dpZCAiRklMRSIKKyN+IG1zZ3N0ciAiVElFRE9TVE8iCisKKyN+IG1zZ2lkICJEbyBub3QgaW5zdGFsbCBzaWduYWwgaGFuZGxlcnMgZm9yIFNJR1VTUjEgYW5kIFNJR1VTUjIiCisjfiBtc2dzdHIgIsOEbMOkIGFzZW5uYSBTSUdVU1IxLSBqYSBTSUdVU1IyLXNpZ25hYWxpbmvDpHNpdHRlbGlqw7ZpdMOkIgorCisjfiBtc2dpZCAiRXJyb3Igd3JpdGluZyByZWdpc3RyeSBjYWNoZSB0byAlczogJXMiCisjfiBtc2dzdHIgIlZpcmhlIGtpcmpvaXRldHRhZXNzYSByZWtpc3Rlcml2w6RsaW11aXN0aWEga29odGVlc2VlbiAlczogJXMiCisKKyN+IG1zZ2lkICJFcnJvciByZS1zY2FubmluZyByZWdpc3RyeSAlczogJXMiCisjfiBtc2dzdHIgIlZpcmhlIHV1ZGVsbGVlbnNrYW5uYXRlc3NhIHJla2lzdGVyacOkICVzOiAlcyIKKworI34gbXNnaWQgIkVycm9yIHJlLXNjYW5uaW5nIHJlZ2lzdHJ5ICVzIgorI34gbXNnc3RyICJWaXJoZSB1dWRlbGxlZW5za2FubmF0ZXNzYSByZWtpc3RlcmnDpCAlcyIKKworI34gbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZC4iCisjfiBtc2dzdHIgIlNpc8OkaW5lbiBHU3RyZWFtZXItdmlyaGU6IHRpbGFzaWlydHltw6QgZXDDpG9ubmlzdHVpLiIKKworI34gbXNnaWQgIkZSRUVJTkcgcGlwZWxpbmUgLi4uXG4iCisjfiBtc2dzdHIgIlZBUEFVVEVUQUFOIGxpdWt1aGlobmEuLi5cbiIKKworI34gbXNnaWQgIm9yaWdpbmFsIGxvY2F0aW9uIG9mIGZpbGUgYXMgYSBVUkkiCisjfiBtc2dzdHIgInRpZWRvc3RvbiBhbGt1cGVyw6RpbmVuIHNpamFpbnRpIFVSSTpuYSIKKworI34gbXNnaWQgIkRpc2FibGUgYWNjZWxlcmF0ZWQgQ1BVIGluc3RydWN0aW9ucyIKKyN+IG1zZ3N0ciAiRWkga2lpaGR5dGV0dHlqw6Qgc3Vvcml0aW5rw6Rza3lqw6QiCisKKyN+IG1zZ2lkICJTQ0hFRFVMRVIiCisjfiBtc2dzdHIgIlZVT1JPVElOIgorCisjfiBtc2dpZCAiUmVnaXN0cnkgdG8gdXNlIgorI34gbXNnc3RyICJLw6R5dGV0dMOkdsOkIHJla2lzdGVyaSIKKworI34gbXNnaWQgIlJFR0lTVFJZIgorI34gbXNnc3RyICJSRUtJU1RFUkkiCisKKyN+IG1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNjaGVkdWxlciBwcm9ibGVtLiAgRmlsZSBhIGJ1Zy4iCisjfiBtc2dzdHIgIlNpc8OkaW5lbiBHU3RyZWFtZXItdmlyaGU6IHZ1b3JvdGlub25nZWxtYS4gVGVlIHZpa2FpbG1vaXR1cy4iCisKKyN+IG1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNhcGFiaWxpdGllcyBwcm9ibGVtLiAgRmlsZSBhIGJ1Zy4iCisjfiBtc2dzdHIgIlNpc8OkaW5lbiBHU3RyZWFtZXItdmlyaGU6IGt5a3lvbmdlbG1hLiBUZWUgdmlrYWlsbW9pdHVzLiIKKworI34gbXNnaWQgIkZhaWxlZCB0byBlbmNvZGUgaW1hZ2UuIgorI34gbXNnc3RyICJLdXZhbiBrb29kYXVzIGVww6Rvbm5pc3R1aS4iCisKKyN+IG1zZ2lkICJUaGVyZSBpcyBubyBlbGVtZW50IHByZXNlbnQgdG8gaGFuZGxlIHRoZSBzdHJlYW0ncyBtaW1lIHR5cGUgJXMuIgorI34gbXNnc3RyICIiCisjfiAiS8OkeXRldHTDpHZpc3PDpCBlaSBvbGUgZWxlbWVudHRpw6QsIGpva2Ega8Okc2l0dGVsaXNpIHRpZXRvdmlycmFuIE1JTUUtdHl5cGluICIKKyN+ICIlcy4iCisKKyN+IG1zZ2lkICJzdHJlYW0gdHlwZSIKKyN+IG1zZ3N0ciAidGlldG92aXJyYW4gdHl5cHBpIgorCisjfiBtc2dpZCAiIgorI34gIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlcyBpdGVyYXRpb25zIChzdW0gJXMgbnMsIGF2ZXJhZ2UgJXMgbnMsIG1pbiAlcyBucywgIgorI34gIm1heCAlcyBucykuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJTdW9yaXR1cyBww6TDpHR0eWkgJXMgbMOkcGlrw6R5bm5pbiBqw6Rsa2VlbiAoc3VtbWEgJXMgbnMsIGtlc2tpYXJ2byAlcyBucywgIgorI34gImFsaW4gJXMgbnMsIHlsaW4gJXMgbnMpLlxuIgorCisjfiBtc2dpZCAiTnVtYmVyIG9mIHRpbWVzIHRvIGl0ZXJhdGUgcGlwZWxpbmUiCisjfiBtc2dzdHIgIkt1aW5rYSBtb250YSBrZXJ0YWEgbGl1a3VoaWhuYSBrw6R5ZMOkw6RuIGzDpHBpIgorCisjfiBtc2dpZCAiICAgICAgICAgVHJ5aW5nIHRvIHJ1biBhbnl3YXkuXG4iCisjfiBtc2dzdHIgIiAgICAgICAgIFlyaXRldMOkw6RuIHN1b3JpdHRhYSBqb2thIHRhcGF1a3Nlc3NhLlxuIgorCisjfiBtc2dpZCAiQWRkZWQgcGx1Z2luICVzIHdpdGggJWQgZmVhdHVyZS5cbiIKKyN+IG1zZ2lkX3BsdXJhbCAiQWRkZWQgcGx1Z2luICVzIHdpdGggJWQgZmVhdHVyZXMuXG4iCisjfiBtc2dzdHJbMF0gIkxpc8OkdHR5IGxpaXTDpG5uw6RpbmVuICVzLCBqb2xsYSBvbiAlZCBvbWluYWlzdXVzLlxuIgorI34gbXNnc3RyWzFdICJMaXPDpHR0eSBsaWl0w6RubsOkaW5lbiAlcywgam9sbGEgb24gJWQgb21pbmFpc3V1dHRhLlxuIgorCisjfiBtc2dpZCAiQWRkZWQgcGF0aCAgICVzIHRvICVzIFxuIgorI34gbXNnc3RyICJMaXPDpHR0eSBwb2xrdSAgJXMgcmVraXN0ZXJpaW4gJXMgXG4iCisKKyN+IG1zZ2lkICJSZWJ1aWxkaW5nICVzICglcykgLi4uXG4iCisjfiBtc2dzdHIgIlV1ZGVsbGVlbnJha2VubmV0YWFuICVzICglcykgLi4uXG4iCisKKyN+IG1zZ2lkICJUcnlpbmcgdG8gbG9hZCAlcyAuLi5cbiIKKyN+IG1zZ3N0ciAiWXJpdGV0w6TDpG4gbGFkYXRhICVzIC4uLlxuIgorCisjfiBtc2dpZCAiRXJyb3IgbG9hZGluZyAlc1xuIgorI34gbXNnc3RyICJWaXJoZSBsYWRhdHRhZXNzYSAlc1xuIgorCisjfiBtc2dpZCAiTG9hZGVkICVkIHBsdWdpbnMgd2l0aCAlZCBmZWF0dXJlLlxuIgorI34gbXNnaWRfcGx1cmFsICJMb2FkZWQgJWQgcGx1Z2lucyB3aXRoICVkIGZlYXR1cmVzLlxuIgorI34gbXNnc3RyWzBdICJMYWRhdHR1ICVkIGxpaXTDpG5uw6Rpc3TDpCwgam9pbGxhIG9uICVkIG9taW5haXN1dXMuXG4iCisjfiBtc2dzdHJbMV0gIkxhZGF0dHUgJWQgbGlpdMOkbm7DpGlzdMOkLCBqb2lsbGEgb24gJWQgb21pbmFpc3V1dHRhLlxuIgorCisjfiBtc2dpZCAicHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdCIKKyN+IG1zZ3N0ciAidHVsb3N0YSB2ZXJzaW90aWVkb3QgamEgcG9pc3R1IgpkaWZmIC0tZ2l0IGEvcG8vZnIuZ21vIGIvcG8vZnIuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NzhjODgKLS0tIC9kZXYvbnVsbAorKysgYi9wby9mci5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vZnIucG8gYi9wby9mci5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTNkNDMyCi0tLSAvZGV2L251bGwKKysrIGIvcG8vZnIucG8KQEAgLTAsMCArMSwxMjM5IEBACisjIFRyYW5zbGF0aW9uIG9mIEdTdHJlYW1lciB0byBGcmVuY2gKKyMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTEgR1N0cmVhbWVyIGNvcmUgdGVhbQorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ3N0cmVhbWVyIHBhY2thZ2UuCisjCisjIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPiwgMjAwNC4KKyMgQ2xhdWRlIFBhcm96IDxjbGF1ZGVAMnhsaWJyZS5uZXQ+LCAyMDA4LTIwMTEuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnc3RyZWFtZXIgMC4xMC4zMi4yXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDktMjkgMTQ6NTUrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTEtMDQtMjggMDk6MzQrMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogQ2xhdWRlIFBhcm96IDxjbGF1ZGVAMnhsaWJyZS5uZXQ+XG4iCisiTGFuZ3VhZ2UtVGVhbTogRnJlbmNoIDx0cmFkdWNAdHJhZHVjLm9yZz5cbiIKKyJMYW5ndWFnZTogZnJcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD1uPjE7XG4iCisKK21zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCittc2dzdHIgIkFmZmljaGUgbGEgdmVyc2lvbiBkZSBHU3RyZWFtZXIiCisKK21zZ2lkICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKK21zZ3N0ciAiUmVuZCB0b3VzIGxlcyBhdmVydGlzc2VtZW50cyBibG9xdWFudHMiCisKK21zZ2lkICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKK21zZ3N0ciAiQWZmaWNoZSBsZXMgY2F0w6lnb3JpZXMgZGUgZMOpYm9nYWdlIGRpc3BvbmlibGVzIGV0IHF1aXR0ZSIKKworbXNnaWQgIiIKKyJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gNSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKK21zZ3N0ciAiIgorIk5pdmVhdSBkZSBkw6lib2dhZ2UgcGFyIGTDqWZhdXQsIGRlIDEgKGVycmV1cnMgdW5pcXVlbWVudCkgw6AgNSAodG91dCkgb3UgMCAiCisicG91ciBhdWN1bmUgc29ydGllIgorCittc2dpZCAiTEVWRUwiCittc2dzdHIgIk5JVkVBVSIKKworbXNnaWQgIiIKKyJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yICIKKyJ0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCittc2dzdHIgIiIKKyJMaXN0ZSBzw6lwYXLDqWUgcGFyIGRlcyB2aXJndWxlcyBkZSBwYWlyZXMgbm9tX2NhdMOpZ29yaWU6bml2ZWF1IGTDqWZpbmlzc2FudCAiCisiZGVzIG5pdmVhdXggc3DDqWNpZmlxdWVzIHBvdXIgY2hhcXVlIGNhdMOpZ29yaWUuXG4iCisiRXhlbXBsZcKgOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCisKK21zZ2lkICJMSVNUIgorbXNnc3RyICJMSVNURSIKKworbXNnaWQgIkRpc2FibGUgY29sb3JlZCBkZWJ1Z2dpbmcgb3V0cHV0IgorbXNnc3RyICJEw6lzYWN0aXZlIGxhIGNvdWxldXIgZGFucyBsYSBzb3J0aWUgZGUgZMOpYm9nYWdlIgorCittc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCittc2dzdHIgIkTDqXNhY3RpdmUgbGUgZMOpYm9nYWdlIgorCittc2dpZCAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCittc2dzdHIgIkFjdGl2ZSBsZSBkaWFnbm9zdGljIGTDqXRhaWxsw6kgZHUgY2hhcmdlbWVudCBkZXMgZ3JlZmZvbnMiCisKK21zZ2lkICJDb2xvbi1zZXBhcmF0ZWQgcGF0aHMgY29udGFpbmluZyBwbHVnaW5zIgorbXNnc3RyICJDaGVtaW5zIGNvbnRlbmFudCBkZXMgZ3JlZmZvbnMsIHPDqXBhcsOpcyBwYXIgZGVzIGRldXgtcG9pbnRzIgorCittc2dpZCAiUEFUSFMiCittc2dzdHIgIkNIRU1JTlMiCisKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCisiZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgorbXNnc3RyICIiCisiTGlzdGUgZGUgZ3JlZmZvbnMgw6AgcHLDqWNoYXJnZXIsIHPDqXBhcsOpZSBwYXIgZGVzIHZpcmd1bGVzLCBlbiBwbHVzIGRlIGxhICIKKyJsaXN0ZSBjb250ZW51ZSBkYW5zIGxhIHZhcmlhYmxlIGQnZW52aXJvbm5lbWVudCBHU1RfUExVR0lOX1BBVEgiCisKK21zZ2lkICJQTFVHSU5TIgorbXNnc3RyICJHUkVGRk9OUyIKKworbXNnaWQgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCittc2dzdHIgIiIKKyJEw6lzYWN0aXZlIGxhIGTDqXRlY3Rpb24gZGVzIGVycmV1cnMgZGUgc2VnbWVudGF0aW9uIHBlbmRhbnQgbGUgY2hhcmdlbWVudCBkZXMgIgorImdyZWZmb25zIgorCittc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIkTDqXNhY3RpdmUgbGEgbWlzZSDDoCBqb3VyIGR1IHJlZ2lzdHJlIgorCittc2dpZCAiRGlzYWJsZSBzcGF3bmluZyBhIGhlbHBlciBwcm9jZXNzIHdoaWxlIHNjYW5uaW5nIHRoZSByZWdpc3RyeSIKK21zZ3N0ciAiIgorIkTDqXNhY3RpdmUgbGUgbGFuY2VtZW50IGQndW4gcHJvY2Vzc3VzIGFubmV4ZSBsb3JzIGRlIGwnYW5hbHlzZSBkdSByZWdpc3RyZSIKKworbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgorbXNnc3RyICJPcHRpb25zIGRlIEdTdHJlYW1lciIKKworbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgIkFmZmljaGVyIGxlcyBvcHRpb25zIGRlIEdTdHJlYW1lciIKKworbXNnaWQgIlVua25vd24gb3B0aW9uIgorbXNnc3RyICJPcHRpb24gaW5jb25udWUiCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIGNvcmUgbGlicmFyeSBlcnJvci4iCittc2dzdHIgIkdTdHJlYW1lciBhIHJlbmNvbnRyw6kgdW5lIGVycmV1ciBnw6luw6lyYWxlIGRlIGJpYmxpb3Row6hxdWUgY2VudHJhbGUuIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyBlcnJvci4iCittc2dzdHIgIiIKKyJMZXMgZMOpdmVsb3BwZXVycyBkZSBHU3RyZWFtZXIgc29udCB0cm9wIGZhaW7DqWFudHMgcG91ciBhc3NvY2llciB1biBjb2RlICIKKyJkJ2VycmV1ciDDoCBjZXR0ZSBlcnJldXIuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjb2RlIG5vdCBpbXBsZW1lbnRlZC4iCittc2dzdHIgIkVycmV1ciBpbnRlcm5lIGRlIEdTdHJlYW1lcsKgOiBjb2RlIG5vbiBpbXBsw6ltZW50w6kuIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgorInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgorbXNnc3RyICIiCisiRXJyZXVyIEdTdHJlYW1lcsKgOiDDqWNoZWMgZGUgY2hhbmdlbWVudCBkJ8OpdGF0IGV0IHVuIMOpbMOpbWVudCBuJ2EgcGFzIHB1ICIKKyJzaWduYWxlciB1biBtZXNzYWdlIGQnZXJyZXVyIGNvcnJlY3QgY29udGVuYW50IGxhIHJhaXNvbiBkZSBsJ8OpY2hlYy4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHBhZCBwcm9ibGVtLiIKK21zZ3N0ciAiRXJyZXVyIGludGVybmUgZGUgR1N0cmVhbWVywqA6IHByb2Jsw6htZSBkZSBjb25uZWN0ZXVyLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGhyZWFkIHByb2JsZW0uIgorbXNnc3RyICJFcnJldXIgaW50ZXJuZSBkZSBHU3RyZWFtZXLCoDogcHJvYmzDqG1lIGRlIHRocmVhZC4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uIgorbXNnc3RyICJFcnJldXIgaW50ZXJuZSBkZSBHU3RyZWFtZXLCoDogcHJvYmzDqG1lIGRlIG7DqWdvY2lhdGlvbi4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgorbXNnc3RyICJFcnJldXIgaW50ZXJuZSBkZSBHU3RyZWFtZXLCoDogcHJvYmzDqG1lIGQnw6l2w6luZW1lbnQuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uIgorbXNnc3RyICJFcnJldXIgaW50ZXJuZSBkZSBHc3RyZWFtZXLCoDogcHJvYmzDqG1lIGRlIHJlY2hlcmNoZS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNhcHMgcHJvYmxlbS4iCittc2dzdHIgIkVycmV1ciBpbnRlcm5lIGRlIEdzdHJlYW1lcsKgOiBwcm9ibMOobWUgZGUgY2Fwcy4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKK21zZ3N0ciAiRXJyZXVyIGludGVybmUgZGUgR3N0cmVhbWVywqA6IHByb2Jsw6htZSBkZSBiYWxpc2UuIgorCittc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKK21zZ3N0ciAiSWwgbWFucXVlIHVuIGdyZWZmb24gZGFucyB2b3RyZSBpbnN0YWxsYXRpb24gZGUgR1N0cmVhbWVyLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2xvY2sgcHJvYmxlbS4iCittc2dzdHIgIkVycmV1ciBpbnRlcm5lIGRlIEdzdHJlYW1lcsKgOiBwcm9ibMOobWUgZCdob3Jsb2dlLiIKKworbXNnaWQgIiIKKyJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCisiZGlzYWJsZWQuIgorbXNnc3RyICIiCisiQ2V0dGUgYXBwbGljYXRpb24gdGVudGUgZCd1dGlsaXNlciB1bmUgZm9uY3Rpb25uYWxpdMOpIGRlIEdTdHJlYW1lciBxdWkgYSDDqXTDqSAiCisiZMOpc2FjdGl2w6llLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3VwcG9ydGluZyBsaWJyYXJ5IGVycm9yLiIKK21zZ3N0ciAiIgorIkdTdHJlYW1lciBhIHJlbmNvbnRyw6kgdW5lIGVycmV1ciBnw6luw6lyYWxlIGRlIGJpYmxpb3Row6hxdWUgZGUgcHJpc2UgZW4gY2hhcmdlLiIKKworbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIkltcG9zc2libGUgZCdpbml0aWFsaXNlciBsYSBiaWJsaW90aMOocXVlIGRlIHByaXNlIGVuIGNoYXJnZS4iCisKK21zZ2lkICJDb3VsZCBub3QgY2xvc2Ugc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBmZXJtZXIgbGEgYmlibGlvdGjDqHF1ZSBkZSBwcmlzZSBlbiBjaGFyZ2UuIgorCittc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGNvbmZpZ3VyZXIgbGEgYmlibGlvdGjDqHF1ZSBkZSBwcmlzZSBlbiBjaGFyZ2UuIgorCittc2dpZCAiRW5jb2RpbmcgZXJyb3IuIgorbXNnc3RyICJFcnJldXIgZGUgY29kYWdlLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIgYSByZW5jb250csOpIHVuZSBlcnJldXIgZ8OpbsOpcmFsZSBkZSByZXNzb3VyY2UuIgorCittc2dpZCAiUmVzb3VyY2Ugbm90IGZvdW5kLiIKK21zZ3N0ciAiUmVzc291cmNlIGludHJvdXZhYmxlLiIKKworbXNnaWQgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCittc2dzdHIgIlJlc3NvdXJjZSBvY2N1cMOpZSBvdSBub24gZGlzcG9uaWJsZS4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCittc2dzdHIgIkltcG9zc2libGUgZCdvdXZyaXIgbGEgcmVzc291cmNlIGVuIGxlY3R1cmUuIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnb3V2cmlyIGxhIHJlc3NvdXJjZSBlbiDDqWNyaXR1cmUuIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnb3V2cmlyIGxhIHJlc3NvdXJjZSBlbiBsZWN0dXJlIGV0IMOpY3JpdHVyZS4iCisKK21zZ2lkICJDb3VsZCBub3QgY2xvc2UgcmVzb3VyY2UuIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGZlcm1lciBsYSByZXNzb3VyY2UuIgorCittc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCittc2dzdHIgIkltcG9zc2libGUgZGUgbGlyZSDDoCBwYXJ0aXIgZGUgbGEgcmVzc291cmNlLiIKKworbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iCittc2dzdHIgIkltcG9zc2libGUgZCfDqWNyaXJlIGRhbnMgbGEgcmVzc291cmNlLiIKKworbXNnaWQgIkNvdWxkIG5vdCBwZXJmb3JtIHNlZWsgb24gcmVzb3VyY2UuIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHJlY2hlcmNoZXIgZGFucyBsYSByZXNzb3VyY2UuIgorCittc2dpZCAiQ291bGQgbm90IHN5bmNocm9uaXplIG9uIHJlc291cmNlLiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBzeW5jaHJvbmlzZXIgZGFucyBsYSByZXNzb3VyY2UuIgorCittc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCittc2dzdHIgIkltcG9zc2libGUgZCdvYnRlbmlyIG91IGRlIGTDqWZpbmlyIHVuIHBhcmFtw6h0cmUgZGUgcmVzc291cmNlLiIKKworbXNnaWQgIk5vIHNwYWNlIGxlZnQgb24gdGhlIHJlc291cmNlLiIKK21zZ3N0ciAiRXNwYWNlIGxpYnJlIGluc3VmZmlzYW50IGRhbnMgbGEgcmVzc291cmNlLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIGEgcmVuY29udHLDqSB1bmUgZXJyZXVyIGfDqW7DqXJhbGUgZGUgZmx1eC4iCisKK21zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCittc2dzdHIgIkwnw6lsw6ltZW50IG5lIGfDqHJlIHBhcyBjZSBmbHV4LiBWZXVpbGxleiBzaWduYWxlciBsZSBwcm9ibMOobWUuIgorCittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCittc2dzdHIgIkltcG9zc2libGUgZGUgZMOpdGVybWluZXIgbGUgdHlwZSBkdSBmbHV4LiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKK21zZ3N0ciAiTGUgdHlwZSBkdSBmbHV4IGVzdCBkaWZmw6lyZW50IGRlIGNlbHVpIHF1aSBlc3QgZ8OpcsOpIHBhciBjZXQgw6lsw6ltZW50LiIKKworbXNnaWQgIlRoZXJlIGlzIG5vIGNvZGVjIHByZXNlbnQgdGhhdCBjYW4gaGFuZGxlIHRoZSBzdHJlYW0ncyB0eXBlLiIKK21zZ3N0ciAiQXVjdW4gY29kZWMgZGlzcG9uaWJsZSBwb3VyIGfDqXJlciBsZSB0eXBlIGR1IGZsdXguIgorCittc2dpZCAiQ291bGQgbm90IGRlY29kZSBzdHJlYW0uIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGTDqWNvZGVyIGxlIGZsdXguIgorCittc2dpZCAiQ291bGQgbm90IGVuY29kZSBzdHJlYW0uIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGNvZGVyIGxlIGZsdXguIgorCittc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIkltcG9zc2libGUgZGUgZMOpbXVsdGlwbGV4ZXIgbGUgZmx1eC4iCisKK21zZ2lkICJDb3VsZCBub3QgbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIkltcG9zc2libGUgZGUgbXVsdGlwbGV4ZXIgbGUgZmx1eC4iCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIgorbXNnc3RyICJMZSBmb3JtYXQgZHUgZmx1eCBuJ2VzdCBwYXMgY29ycmVjdC4iCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiTGUgZmx1eCBlc3QgY2hpZmZyw6kgZXQgbGUgZMOpY2hpZmZyZW1lbnQgbidlc3QgcGFzIHByaXMgZW4gY2hhcmdlLiIKKworbXNnaWQgIiIKKyJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgY2FuJ3QgYmUgZGVjcnlwdGVkIGJlY2F1c2Ugbm8gc3VpdGFibGUga2V5IGhhcyAiCisiYmVlbiBzdXBwbGllZC4iCittc2dzdHIgIiIKKyJMZSBmbHV4IGVzdCBjaGlmZnLDqSBldCBpbCBuZSBwZXV0IMOqdHJlIGTDqWNoaWZmcsOpIGNhciBhdWN1bmUgY2zDqSB2YWxhYmxlIG4nYSAiCisiw6l0w6kgZm91cm5pZS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzLiIKK21zZ3N0ciAiQXVjdW4gbWVzc2FnZSBkJ2VycmV1ciBwb3VyIGxlIGRvbWFpbmUgJXMuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcyBhbmQgY29kZSAlZC4iCittc2dzdHIgIkF1Y3VuIG1lc3NhZ2UgZCdlcnJldXIgc3RhbmRhcmQgcG91ciBsZSBkb21haW5lICVzIGV0IGxlIGNvZGUgJWQuIgorCittc2dpZCAiU2VsZWN0ZWQgY2xvY2sgY2Fubm90IGJlIHVzZWQgaW4gcGlwZWxpbmUuIgorbXNnc3RyICJMJ2hvcmxvZ2Ugc8OpbGVjdGlvbm7DqWUgbmUgcGV1dCBwYXMgw6p0cmUgdXRpbGlzw6llIGRhbnMgbGUgcGlwZWxpbmUuIgorCittc2dpZCAidGl0bGUiCittc2dzdHIgInRpdHJlIgorCittc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKK21zZ3N0ciAidGl0cmUgdXRpbGlzw6kgaGFiaXR1ZWxsZW1lbnQiCisKK21zZ2lkICJ0aXRsZSBzb3J0bmFtZSIKK21zZ3N0ciAidGl0cmUgcG91ciBsZSB0cmkiCisKK21zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJ0aXRyZSB1dGlsaXPDqSBoYWJpdHVlbGxlbWVudCBkYW5zIHVuIGJ1dCBkZSB0cmkiCisKK21zZ2lkICJhcnRpc3QiCittc2dzdHIgImFydGlzdGUiCisKK21zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmciCittc2dzdHIgInBlcnNvbm5lKHMpIHJlc3BvbnNhYmxlKHMpIGRlIGwnZW5yZWdpc3RyZW1lbnQiCisKK21zZ2lkICJhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgIm5vbSBkJ2FydGlzdGUgcG91ciBsZSB0cmkiCisKK21zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgInBlcnNvbm5lKHMpIHJlc3BvbnNhYmxlKHMpIGRlIGwnZW5yZWdpc3RyZW1lbnQsIGRhbnMgdW4gYnV0IGRlIHRyaSIKKworbXNnaWQgImFsYnVtIgorbXNnc3RyICJhbGJ1bSIKKworbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgorbXNnc3RyICJhbGJ1bSBjb250ZW5hbnQgY2VzIGRvbm7DqWVzIgorCittc2dpZCAiYWxidW0gc29ydG5hbWUiCittc2dzdHIgIm5vbSBkJ2FsYnVtIHBvdXIgbGUgdHJpIgorCittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgImFsYnVtIGNvbnRlbmFudCBjZXMgZG9ubsOpZXMsIGRhbnMgdW4gYnV0IGRlIHRyaSIKKworbXNnaWQgImFsYnVtIGFydGlzdCIKK21zZ3N0ciAiYXJ0aXN0ZSBkZSBsJ2FsYnVtIgorCittc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgorbXNnc3RyICJMJ2FydGlzdGUgZGUgbCdhbGJ1bSBlbnRpZXIsIHRlbCBxdSdpbCBkZXZyYWl0IHMnYWZmaWNoZXIiCisKK21zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgIm5vbSBkJ2FydGlzdGUgZGUgbCdhbGJ1bSBwb3VyIGxlIHRyaSIKKworbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCIKK21zZ3N0ciAiTCdhcnRpc3RlIGRlIGwnYWxidW0gZW50aWVyLCBhZGFwdMOpIHBvdXIgbGUgdHJpIgorCittc2dpZCAiZGF0ZSIKK21zZ3N0ciAiZGF0ZSIKKworbXNnaWQgImRhdGUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR0RhdGUgc3RydWN0dXJlKSIKK21zZ3N0ciAiZGF0ZSBkZSBjcsOpYXRpb24gZGVzIGRvbm7DqWVzIChzb3VzIGZvcm1lIGRlIHN0cnVjdHVyZSBHRGF0ZSkiCisKK21zZ2lkICJkYXRldGltZSIKK21zZ3N0ciAiZGF0ZSBldCBoZXVyZSIKKworbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKK21zZ3N0ciAiIgorImRhdGUgZXQgaGV1cmUgZGUgY3LDqWF0aW9uIGRlcyBkb25uw6llcyAoc291cyBmb3JtZSBkZSBzdHJ1Y3R1cmUgR3N0RGF0ZVRpbWUpIgorCittc2dpZCAiZ2VucmUiCittc2dzdHIgImdlbnJlIgorCittc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCittc2dzdHIgImdlbnJlIGF1cXVlbCBjZXMgZG9ubsOpZXMgYXBwYXJ0aWVubmVudCIKKworbXNnaWQgImNvbW1lbnQiCittc2dzdHIgImNvbW1lbnRhaXJlIgorCittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCittc2dzdHIgInRleHRlIGxpYnJlIGTDqWNyaXZhbnQgbGVzIGRvbm7DqWVzIgorCittc2dpZCAiZXh0ZW5kZWQgY29tbWVudCIKK21zZ3N0ciAiY29tbWVudGFpcmUgw6l0ZW5kdSIKKworbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIGluIGtleT12YWx1ZSBvciBrZXlbZW5dPWNvbW1lbnQgZm9ybSIKK21zZ3N0ciAiIgorInRleHRlIGxpYnJlIGTDqWNyaXZhbnQgbGVzIGRvbm7DqWVzIHNvdXMgbGEgZm9ybWUgY2zDqT12YWxldXIgb3UgY2zDqVtlbl0iCisiPWNvbW1lbnRhaXJlIgorCittc2dpZCAidHJhY2sgbnVtYmVyIgorbXNnc3RyICJudW3DqXJvIGRlIHBpc3RlIgorCittc2dpZCAidHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgIm51bcOpcm8gZGUgcGlzdGUgYXUgc2VpbiBkJ3VuZSBjb2xsZWN0aW9uIgorCittc2dpZCAidHJhY2sgY291bnQiCittc2dzdHIgIm5vbWJyZSBkZSBwaXN0ZXMiCisKK21zZ2lkICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgorbXNnc3RyICJub21icmUgZGUgcGlzdGVzIGRhbnMgbGEgY29sbGVjdGlvbiBkb250IGNlcyBkb25uw6llcyBmb250IHBhcnRpZSIKKworbXNnaWQgImRpc2MgbnVtYmVyIgorbXNnc3RyICJudW3DqXJvIGRlIGRpc3F1ZSIKKworbXNnaWQgImRpc2MgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgIm51bcOpcm8gZGUgZGlzcXVlIGF1IHNlaW4gZCd1bmUgY29sbGVjdGlvbiIKKworbXNnaWQgImRpc2MgY291bnQiCittc2dzdHIgIm5vbWJyZSBkZSBkaXNxdWVzIgorCittc2dpZCAiY291bnQgb2YgZGlzY3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyBkaXNjIGJlbG9uZ3MgdG8iCittc2dzdHIgIm5vbWJyZSBkZSBkaXNxdWVzIGRhbnMgbGEgY29sbGVjdGlvbiBkb250IGNlcyBkb25uw6llcyBmb250IHBhcnRpZSIKKworbXNnaWQgImxvY2F0aW9uIgorbXNnc3RyICJlbXBsYWNlbWVudCIKKworbXNnaWQgIiIKKyJPcmlnaW4gb2YgbWVkaWEgYXMgYSBVUkkgKGxvY2F0aW9uLCB3aGVyZSB0aGUgb3JpZ2luYWwgb2YgdGhlIGZpbGUgb3Igc3RyZWFtICIKKyJpcyBob3N0ZWQpIgorbXNnc3RyICIiCisiT3JpZ2luZSBkdSBtw6lkaWEgc291cyBmb3JtZSBkJ1VSSSAoZW1wbGFjZW1lbnQgZGUgbCdow6liZXJnZW1lbnQgZCdvcmlnaW5lIGR1ICIKKyJmaWNoaWVyIG91IGR1IGZsdXgpIgorCittc2dpZCAiaG9tZXBhZ2UiCittc2dzdHIgInNpdGUgV2ViIgorCittc2dpZCAiSG9tZXBhZ2UgZm9yIHRoaXMgbWVkaWEgKGkuZS4gYXJ0aXN0IG9yIG1vdmllIGhvbWVwYWdlKSIKK21zZ3N0ciAiU2l0ZSBXZWIgZGUgY2UgbcOpZGlhIChwYXIgZXguIHNpdGUgZGUgbCdhcnRpc3RlIG91IGR1IGZpbG0pIgorCittc2dpZCAiZGVzY3JpcHRpb24iCittc2dzdHIgImRlc2NyaXB0aW9uIgorCittc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgorbXNnc3RyICJ0ZXh0ZSBjb3VydCBkw6ljcml2YW50IGxlIGNvbnRlbnUgZGVzIGRvbm7DqWVzIgorCittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAidmVyc2lvbiIKKworbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgorbXNnc3RyICJ2ZXJzaW9uIGRlIGNlcyBkb25uw6llcyIKKworbXNnaWQgIklTUkMiCittc2dzdHIgIklTUkMiCisKK21zZ2lkICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCittc2dzdHIgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSB2b2lyIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCisKK21zZ2lkICJvcmdhbml6YXRpb24iCittc2dzdHIgIm9yZ2FuaXNhdGlvbiIKKworbXNnaWQgImNvcHlyaWdodCIKK21zZ3N0ciAiY29weXJpZ2h0IgorCittc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiaW5mb3JtYXRpb24gc3VyIGxlIGNvcHlyaWdodCBkZXMgZG9ubsOpZXMiCisKK21zZ2lkICJjb3B5cmlnaHQgdXJpIgorbXNnc3RyICJVUkkgZHUgY29weXJpZ2h0IgorCittc2dpZCAiVVJJIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJVUkkgdmVycyBsJ2luZm9ybWF0aW9uIGRlIGNvcHlyaWdodCBkZXMgZG9ubsOpZXMiCisKK21zZ2lkICJlbmNvZGVkIGJ5IgorbXNnc3RyICJjb2TDqSBwYXIiCisKK21zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgorbXNnc3RyICJub20gZGUgbGEgcGVyc29ubmUgb3UgZGUgbCdvcmdhbmlzYXRpb24gcXVpIGEgZWZmZWN0dcOpIGxlIGNvZGFnZSIKKworbXNnaWQgImNvbnRhY3QiCittc2dzdHIgImNvbnRhY3QiCisKK21zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgorbXNnc3RyICJpbmZvcm1hdGlvbnMgc3VyIGxlIGNvbnRhY3QiCisKK21zZ2lkICJsaWNlbnNlIgorbXNnc3RyICJsaWNlbmNlIgorCittc2dpZCAibGljZW5zZSBvZiBkYXRhIgorbXNnc3RyICJsaWNlbmNlIGRlcyBkb25uw6llcyIKKworbXNnaWQgImxpY2Vuc2UgdXJpIgorbXNnc3RyICJVUkkgZGUgbGEgbGljZW5jZSIKKworbXNnaWQgIlVSSSB0byB0aGUgbGljZW5zZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiVVJJIHZlcnMgbGEgbGljZW5jZSBkZXMgZG9ubsOpZXMiCisKK21zZ2lkICJwZXJmb3JtZXIiCittc2dzdHIgImludGVycHLDqHRlIgorCittc2dpZCAicGVyc29uKHMpIHBlcmZvcm1pbmciCittc2dzdHIgInBlcnNvbm5lKHMpIHF1aSBpbnRlcnByw6h0ZShudCkiCisKK21zZ2lkICJjb21wb3NlciIKK21zZ3N0ciAiY29tcG9zaXRldXIiCisKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciCittc2dzdHIgInBlcnNvbm5lKHMpIHF1aSBhL29udCBjb21wb3PDqSBsJ2VucmVnaXN0cmVtZW50IgorCittc2dpZCAiZHVyYXRpb24iCittc2dzdHIgImR1csOpZSIKKworbXNnaWQgImxlbmd0aCBpbiBHU3RyZWFtZXIgdGltZSB1bml0cyAobmFub3NlY29uZHMpIgorbXNnc3RyICJsb25ndWV1ciBlbiB1bml0w6kgZGUgdGVtcHMgR1N0cmVhbWVyIChuYW5vc2Vjb25kZXMpIgorCittc2dpZCAiY29kZWMiCittc2dzdHIgImNvZGVjIgorCittc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJjb2RlYyBkZSBzdG9ja2FnZSBkZXMgZG9ubsOpZXMiCisKK21zZ2lkICJ2aWRlbyBjb2RlYyIKK21zZ3N0ciAiY29kZWMgdmlkw6lvIgorCittc2dpZCAiY29kZWMgdGhlIHZpZGVvIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJjb2RlYyBkZSBzdG9ja2FnZSBkZXMgZG9ubsOpZXMgdmlkw6lvIgorCittc2dpZCAiYXVkaW8gY29kZWMiCittc2dzdHIgImNvZGVjIGF1ZGlvIgorCittc2dpZCAiY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJjb2RlYyBkZSBzdG9ja2FnZSBkZXMgZG9ubsOpZXMgYXVkaW8iCisKK21zZ2lkICJzdWJ0aXRsZSBjb2RlYyIKK21zZ3N0ciAiY29kZWMgZGVzIHNvdXMtdGl0cmVzIgorCittc2dpZCAiY29kZWMgdGhlIHN1YnRpdGxlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJjb2RlYyBkZSBzdG9ja2FnZSBkZXMgc291cy10aXRyZXMiCisKK21zZ2lkICJjb250YWluZXIgZm9ybWF0IgorbXNnc3RyICJmb3JtYXQgZHUgY29udGVuZXVyIgorCittc2dpZCAiY29udGFpbmVyIGZvcm1hdCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImZvcm1hdCBkdSBjb250ZW5ldXIgZGFucyBsZXF1ZWwgc29udCBzdG9ja8OpZXMgbGVzIGRvbm7DqWVzIgorCittc2dpZCAiYml0cmF0ZSIKK21zZ3N0ciAiZMOpYml0IgorCittc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAiZMOpYml0IGV4YWN0IG91IG1veWVuIGVuIGJpdHMgcGFyIHNlY29uZGUiCisKK21zZ2lkICJub21pbmFsIGJpdHJhdGUiCittc2dzdHIgImTDqWJpdCBub21pbmFsIgorCittc2dpZCAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAiZMOpYml0IG5vbWluYWwgZW4gYml0cyBwYXIgc2Vjb25kZSIKKworbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKK21zZ3N0ciAiZMOpYml0IG1pbmltdW0iCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJkw6liaXQgbWluaW11bSBlbiBiaXRzIHBhciBzZWNvbmRlIgorCittc2dpZCAibWF4aW11bSBiaXRyYXRlIgorbXNnc3RyICJkw6liaXQgbWF4aW11bSIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgImTDqWJpdCBtYXhpbXVtIGVuIGJpdHMgcGFyIHNlY29uZGUiCisKK21zZ2lkICJlbmNvZGVyIgorbXNnc3RyICJjb2RldXIiCisKK21zZ2lkICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgorbXNnc3RyICJjb2RldXIgdXRpbGlzw6kgcG91ciBsZSBjb2RhZ2UgZHUgZmx1eCIKKworbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKK21zZ3N0ciAidmVyc2lvbiBkdSBjb2RldXIiCisKK21zZ2lkICJ2ZXJzaW9uIG9mIHRoZSBlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgorbXNnc3RyICJ2ZXJzaW9uIGR1IGNvZGV1ciB1dGlsaXPDqSBwb3VyIGxlIGNvZGFnZSBkdSBmbHV4IgorCittc2dpZCAic2VyaWFsIgorbXNnc3RyICJudW3DqXJvIGRlIHPDqXJpZSIKKworbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCittc2dzdHIgIm51bcOpcm8gZGUgc8OpcmllIGRlIGxhIHBpc3RlIgorCittc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgorbXNnc3RyICJnYWluIGRlIHBpc3RlIHJlcGxheWdhaW4iCisKK21zZ2lkICJ0cmFjayBnYWluIGluIGRiIgorbXNnc3RyICJnYWluIGRlIGxhIHBpc3RlIGVuIGTDqWNpYmVscyIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgcGVhayIKK21zZ3N0ciAiY3LDqnRlIGRlIHBpc3RlIHJlcGxheWdhaW4iCisKK21zZ2lkICJwZWFrIG9mIHRoZSB0cmFjayIKK21zZ3N0ciAiY3LDqnRlIGRlIGxhIHBpc3RlIgorCittc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBnYWluIgorbXNnc3RyICJnYWluIGQnYWxidW0gcmVwbGF5Z2FpbiIKKworbXNnaWQgImFsYnVtIGdhaW4gaW4gZGIiCittc2dzdHIgImdhaW4gZGUgbCdhbGJ1bSBlbiBkw6ljaWJlbHMiCisKK21zZ2lkICJyZXBsYXlnYWluIGFsYnVtIHBlYWsiCittc2dzdHIgImNyw6p0ZSBkJ2FsYnVtIHJlcGxheWdhaW4iCisKK21zZ2lkICJwZWFrIG9mIHRoZSBhbGJ1bSIKK21zZ3N0ciAiY3LDqnRlIGRlIGwnYWxidW0iCisKK21zZ2lkICJyZXBsYXlnYWluIHJlZmVyZW5jZSBsZXZlbCIKK21zZ3N0ciAibml2ZWF1IGRlIHLDqWbDqXJlbmNlIHJlcGxheWdhaW4iCisKK21zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgorbXNnc3RyICJuaXZlYXUgZGUgcsOpZsOpcmVuY2UgZGVzIHZhbGV1cnMgZGUgZ2FpbiBkZSBwaXN0ZSBldCBkJ2FsYnVtIgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSIKK21zZ3N0ciAiY29kZSBsaW5ndWlzdGlxdWUiCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIGZvciB0aGlzIHN0cmVhbSwgY29uZm9ybWluZyB0byBJU08tNjM5LTEiCittc2dzdHIgImNvZGUgbGluZ3Vpc3RpcXVlIGR1IGZsdXgsIHNlbG9uIGxhIG5vcm1lIElTTy02MzktMSIKKworbXNnaWQgImltYWdlIgorbXNnc3RyICJpbWFnZSIKKworbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgImltYWdlIGxpw6llIMOgIGNlIGZsdXgiCisKKyMuIFRSQU5TTEFUT1JTOiAncHJldmlldyBpbWFnZScgPSBpbWFnZSB0aGF0IHNob3dzIGEgcHJldmlldyBvZiB0aGUgZnVsbCBpbWFnZQorbXNnaWQgInByZXZpZXcgaW1hZ2UiCittc2dzdHIgImltYWdlIGQnYXBlcsOndSIKKworbXNnaWQgInByZXZpZXcgaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiaW1hZ2UgZCdhcGVyw6d1IGxpw6llIMOgIGNlIGZsdXgiCisKK21zZ2lkICJhdHRhY2htZW50IgorbXNnc3RyICJwacOoY2Ugam9pbnRlIgorCittc2dpZCAiZmlsZSBhdHRhY2hlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiZmljaGllciBqb2ludCDDoCBjZSBmbHV4IgorCittc2dpZCAiYmVhdHMgcGVyIG1pbnV0ZSIKK21zZ3N0ciAicHVsc2F0aW9ucyBwYXIgbWludXRlIgorCittc2dpZCAibnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8iCittc2dzdHIgIm5vbWJyZSBkZSBwdWxzYXRpb25zIHBhciBtaW51dGUgZGUgbGEgcGlzdGUgYXVkaW8iCisKK21zZ2lkICJrZXl3b3JkcyIKK21zZ3N0ciAibW90cy1jbMOpcyIKKworbXNnaWQgImNvbW1hIHNlcGFyYXRlZCBrZXl3b3JkcyBkZXNjcmliaW5nIHRoZSBjb250ZW50IgorbXNnc3RyICJtb3RzLWNsw6lzIGTDqWNyaXZhbnQgbGUgY29udGVudSwgc8OpcGFyw6lzIHBhciBkZXMgdmlyZ3VsZXMiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKK21zZ3N0ciAibm9tIGQnZW1wbGFjZW1lbnQgZ8Opb2dyYXBoaXF1ZSIKKworbXNnaWQgIiIKKyJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgorInByb2R1Y2VkIgorbXNnc3RyICIiCisiZGVzY3JpcHRpb24gaW50ZWxsaWdpYmxlIGRlIGwnZW5kcm9pdCBvw7kgbGUgbcOpZGlhIGEgw6l0w6kgZW5yZWdpc3Ryw6kgb3UgcHJvZHVpdCIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBsYXRpdHVkZSIKK21zZ3N0ciAibGF0aXR1ZGUgZGUgbCdlbXBsYWNlbWVudCIKKworbXNnaWQgIiIKKyJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCisic291dGhlcm4gbGF0aXR1ZGVzKSIKK21zZ3N0ciAiIgorImxhdGl0dWRlIGRlIGwnZW5kcm9pdCBnw6lvZ3JhcGhpcXVlIG/DuSBsZSBtw6lkaWEgYSDDqXTDqSBlbnJlZ2lzdHLDqSBvdSBwcm9kdWl0LCAiCisiZW4gZGVncsOpcywgY29uZm9ybcOpbWVudCDDoCBXR1M4NCAoesOpcm8gw6AgbCfDqXF1YXRldXIsIHZhbGV1cnMgbsOpZ2F0aXZlcyBkYW5zICIKKyJsJ2jDqW1pc3Bow6hyZSBzdWQpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKK21zZ3N0ciAibG9uZ2l0dWRlIGRlIGwnZW1wbGFjZW1lbnQiCisKK21zZ2lkICIiCisiZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCisibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgorbXNnc3RyICIiCisibG9uZ2l0dWRlIGRlIGwnZW5kcm9pdCBnw6lvZ3JhcGhpcXVlIG/DuSBsZSBtw6lkaWEgYSDDqXTDqSBlbnJlZ2lzdHLDqSBvdSBwcm9kdWl0LCAiCisiZW4gZGVncsOpcywgY29uZm9ybcOpbWVudCDDoCBXR1M4NCAoesOpcm8gYXUgcHJlbWllciBtw6lyaWRpZW4gZGUgR3JlZW53aWNoIChHQiksICIKKyJ2YWxldXJzIG7DqWdhdGl2ZXMgcG91ciBsZXMgbG9uZ2l0dWRlcyB2ZXJzIGwnb3Vlc3QpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKK21zZ3N0ciAiYWx0aXR1ZGUgZGUgbCdlbXBsYWNlbWVudCIKKworbXNnaWQgIiIKKyJnZW8gZWxldmF0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiBtZXRlcnMgIgorImFjY29yZGluZyB0byBXR1M4NCAoemVybyBpcyBhdmVyYWdlIHNlYSBsZXZlbCkiCittc2dzdHIgIiIKKyJhbHRpdHVkZSBkZSBsJ2VuZHJvaXQgZ8Opb2dyYXBoaXF1ZSBvw7kgbGUgbcOpZGlhIGEgw6l0w6kgZW5yZWdpc3Ryw6kgb3UgcHJvZHVpdCwgIgorImVuIG3DqHRyZXMsIGNvbmZvcm3DqW1lbnQgw6AgV0dTODQgKHrDqXJvIGF1IG5pdmVhdSBtb3llbiBkZSBsYSBtZXIpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNvdW50cnkiCittc2dzdHIgInBheXMgZGUgbCdlbXBsYWNlbWVudCIKKworbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICJwYXlzIChub20gYW5nbGFpcykgb8O5IGxlIG3DqWRpYSBhIMOpdMOpIGVucmVnaXN0csOpIG91IHByb2R1aXQiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKK21zZ3N0ciAidmlsbGUgZGUgbCdlbXBsYWNlbWVudCIKKworbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICJ2aWxsZSAobm9tIGFuZ2xhaXMpIG/DuSBsZSBtw6lkaWEgYSDDqXTDqSBlbnJlZ2lzdHLDqSBvdSBwcm9kdWl0IgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIHN1YmxvY2F0aW9uIgorbXNnc3RyICJ6b25lIGxvY2FsZSBkZSBsJ2VtcGxhY2VtZW50IgorCittc2dpZCAiIgorImEgbG9jYXRpb24gd2hpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgorInRoZSBuZWlnaGJvcmhvb2QpIgorbXNnc3RyICIiCisidW4gZW5kcm9pdCBkZSBsYSBsb2NhbGl0w6kgb8O5IGxlIG3DqWRpYSBhIMOpdMOpIGVucmVnaXN0csOpIG91IHByb2R1aXQgKHBhciBleC4gIgorImxlIHZvaXNpbmFnZSkiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gaG9yaXpvbnRhbCBlcnJvciIKK21zZ3N0ciAiZXJyZXVyIGhvcml6b250YWxlIGRlIGwnZW1wbGFjZW1lbnQiCisKK21zZ2lkICJleHBlY3RlZCBlcnJvciBvZiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbmluZyBtZWFzdXJlcyAoaW4gbWV0ZXJzKSIKK21zZ3N0ciAiZXJyZXVyIHByb2JhYmxlIGRlcyBtZXN1cmVzIGRlIHBvc2l0aW9uIGhvcml6b250YWxlIChlbiBtw6h0cmVzKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKK21zZ3N0ciAidml0ZXNzZSBkZSBkw6lwbGFjZW1lbnQgZ8Opb2xvY2FsaXPDqSIKKworbXNnaWQgIiIKKyJtb3ZlbWVudCBzcGVlZCBvZiB0aGUgY2FwdHVyaW5nIGRldmljZSB3aGlsZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIGluIG0vcyIKK21zZ3N0ciAiIgorInZpdGVzc2UgZHUgbW91dmVtZW50IChlbiBtL3MpIGR1IHDDqXJpcGjDqXJpcXVlIGRlIGNhcHR1cmUgZHVyYW50IGxhIGNhcHR1cmUiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgorbXNnc3RyICJkaXJlY3Rpb24gZHUgZMOpcGxhY2VtZW50IGfDqW9sb2NhbGlzw6kiCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgorIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKKyJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKyJpbmRpcXVlIGxhIGRpcmVjdGlvbiBkdSBkw6lwbGFjZW1lbnQgZHUgcMOpcmlwaMOpcmlxdWUgZWZmZWN0dWFudCBsYSBjYXB0dXJlICIKKyJkJ3VuIG3DqWRpYS4gRWxsZSBlc3QgaW5kaXF1w6llIGVuIGRlZ3LDqXMsIHBhciB1biBub21icmUgw6AgdmlyZ3VsZXMuIDAgaW5kaXF1ZSAiCisibGUgbm9yZCBnw6lvZ3JhcGhpcXVlIGV0IGxlIG5vbWJyZSBhdWdtZW50ZSBkYW5zIGxlIHNlbnMgaG9yYWlyZSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBjYXB0dXJlIGRpcmVjdGlvbiIKK21zZ3N0ciAiZGlyZWN0aW9uIGRlIGxhIGNhcHR1cmUgZ8Opb2xvY2FsaXPDqWUiCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGRldmljZSBpcyBwb2ludGluZyB0byB3aGVuIGNhcHR1cmluZyAgYSBtZWRpYS4gIgorIkl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIHJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSAiCisiZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKyJpbmRpcXVlIGxhIGRpcmVjdGlvbiBkdSBww6lyaXBow6lyaXF1ZSBhdSBtb21lbnQgZGUgbGEgY2FwdHVyZSBkJ3VuIG3DqWRpYS4gIgorIkVsbGUgZXN0IGluZGlxdcOpZSBlbiBkZWdyw6lzLCBwYXIgdW4gbm9tYnJlIMOgIHZpcmd1bGVzLiAwIGluZGlxdWUgbGUgbm9yZCAiCisiZ8Opb2dyYXBoaXF1ZSBldCBsZSBub21icmUgYXVnbWVudGUgZGFucyBsZSBzZW5zIGhvcmFpcmUiCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZScgaGVyZQorbXNnaWQgInNob3cgbmFtZSIKK21zZ3N0ciAibm9tIGQnw6ltaXNzaW9uIgorCittc2dpZCAiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSIKK21zZ3N0ciAiTm9tIGRlIGwnw6ltaXNzaW9uIFRWLCBkdSBwb2RjYXN0IG91IGRlIGxhIHPDqXJpZSBkJ2/DuSBwcm92aWVudCBsZSBtw6lkaWEiCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQorbXNnaWQgInNob3cgc29ydG5hbWUiCittc2dzdHIgIm5vbSBkJ8OpbWlzc2lvbiBwb3VyIGxlIHRyaSIKKworbXNnaWQgIiIKKyJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiIgorIk5vbSBkZSBsJ8OpbWlzc2lvbiBUViwgZHUgcG9kY2FzdCBvdSBkZSBsYSBzw6lyaWUgZCdvw7kgcHJvdmllbnQgbGUgbcOpZGlhLCBkYW5zICIKKyJsJ29wdGlxdWUgZHUgdHJpIgorCittc2dpZCAiZXBpc29kZSBudW1iZXIiCittc2dzdHIgIm51bcOpcm8gZCfDqXBpc29kZSIKKworbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICJMZSBudW3DqXJvIGQnw6lwaXNvZGUgZGUgbGEgc8OpcmllIGRvbnQgZmFpdCBwYXJ0aWUgbGUgbcOpZGlhIgorCittc2dpZCAic2Vhc29uIG51bWJlciIKK21zZ3N0ciAibnVtw6lybyBkZSBzYWlzb24iCisKK21zZ2lkICJUaGUgc2Vhc29uIG51bWJlciBvZiB0aGUgc2hvdyB0aGUgbWVkaWEgaXMgcGFydCBvZiIKK21zZ3N0ciAiTGUgbnVtw6lybyBkZSBsYSBzYWlzb24gZGUgbCfDqW1pc3Npb24gZG9udCBmYWl0IHBhcnRpZSBsZSBtw6lkaWEiCisKK21zZ2lkICJseXJpY3MiCittc2dzdHIgInBhcm9sZXMiCisKK21zZ2lkICJUaGUgbHlyaWNzIG9mIHRoZSBtZWRpYSwgY29tbW9ubHkgdXNlZCBmb3Igc29uZ3MiCittc2dzdHIgIkxlcyBwYXJvbGVzIGR1IG3DqWRpYSwgdXRpbGlzw6kgc3VydG91dCBwb3VyIGxlcyBjaGFuc29ucyIKKworbXNnaWQgImNvbXBvc2VyIHNvcnRuYW1lIgorbXNnc3RyICJub20gZHUgY29tcG9zaXRldXIgcG91ciBsZSB0cmkiCisKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJwZXJzb25uZShzKSBxdWkgb250IGNvbXBvc8OpIGwnZW5yZWdpc3RyZW1lbnQsIGRhbnMgdW4gYnV0IGRlIHRyaSIKKworbXNnaWQgImdyb3VwaW5nIgorbXNnc3RyICJyZWdyb3VwZW1lbnQiCisKK21zZ2lkICIiCisiR3JvdXBzIHJlbGF0ZWQgbWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSB0cmFja3MsIGxpa2UgdGhlIGRpZmZlcmVudCBwaWVjZXMgIgorIm9mIGEgY29uY2VydG8uIEl0IGlzIGEgaGlnaGVyIGxldmVsIHRoYW4gYSB0cmFjaywgYnV0IGxvd2VyIHRoYW4gYW4gYWxidW0iCittc2dzdHIgIiIKKyJVbml0w6kgZGUgZ3JvdXBlIHBvdXIgZGVzIG3DqWRpYXMgcXVpIGNvbnRpZW5uZW50IHBsdXNpZXVycyBwaXN0ZXMsIGNvbW1lIGxlcyAiCisiZGlmZsOpcmVudHMgbW9yY2VhdXggZCd1biBjb25jZXJ0by4gRGUgcGx1cyBoYXV0IG5pdmVhdSBxdWUgbGEgcGlzdGUsIG1haXMgZGUgIgorInBsdXMgYmFzIG5pdmVhdSBxdWUgbCdhbGJ1bSIKKworbXNnaWQgInVzZXIgcmF0aW5nIgorbXNnc3RyICLDqXZhbHVhdGlvbiBwYXIgbCd1dGlsaXNhdGV1ciIKKworbXNnaWQgIiIKKyJSYXRpbmcgYXR0cmlidXRlZCBieSBhIHVzZXIuIFRoZSBoaWdoZXIgdGhlIHJhbmssIHRoZSBtb3JlIHRoZSB1c2VyIGxpa2VzICIKKyJ0aGlzIG1lZGlhIgorbXNnc3RyICIiCisiTm90ZSBhdHRyaWJ1w6llIHBhciB1bmUgcGVyc29ubmUuIFBsdXMgbGEgbm90ZSBlc3Qgw6lsZXbDqWUsIHBsdXMgbGEgcGVyc29ubmUgIgorImFwcHLDqWNpZSBjZSBtw6lkaWEiCisKK21zZ2lkICJkZXZpY2UgbWFudWZhY3R1cmVyIgorbXNnc3RyICJmYWJyaWNhbnQgZHUgcMOpcmlwaMOpcmlxdWUiCisKK21zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICJGYWJyaWNhbnQgZHUgcMOpcmlwaMOpcmlxdWUgdXRpbGlzw6kgcG91ciBjcsOpZXIgY2UgbcOpZGlhIgorCittc2dpZCAiZGV2aWNlIG1vZGVsIgorbXNnc3RyICJtb2TDqGxlIGR1IHDDqXJpcGjDqXJpcXVlIgorCittc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICJNb2TDqGxlIGR1IHDDqXJpcGjDqXJpcXVlIHV0aWxpc8OpIHBvdXIgY3LDqWVyIGNlIG3DqWRpYSIKKworbXNnaWQgImFwcGxpY2F0aW9uIG5hbWUiCittc2dzdHIgIm5vbSBkZSBsJ2FwcGxpY2F0aW9uIgorCittc2dpZCAiQXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIgorbXNnc3RyICJBcHBsaWNhdGlvbiB1dGlsaXPDqWUgcG91ciBjcsOpZXIgY2UgbcOpZGlhIgorCittc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKK21zZ3N0ciAiZG9ubsOpZXMgYXBwbGljYXRpdmVzIgorCittc2dpZCAiQXJiaXRyYXJ5IGFwcGxpY2F0aW9uIGRhdGEgdG8gYmUgc2VyaWFsaXplZCBpbnRvIHRoZSBtZWRpYSIKK21zZ3N0ciAiRG9ubsOpZXMgYXJiaXRyYWlyZXMgZGUgbCdhcHBsaWNhdGlvbiDDoCBzw6lyaWFsaXNlciBkYW5zIGxlIG3DqWRpYSIKKworbXNnaWQgImltYWdlIG9yaWVudGF0aW9uIgorbXNnc3RyICJvcmllbnRhdGlvbiBkZSBsJ2ltYWdlIgorCittc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgorbXNnc3RyICIiCisiSW5kaXF1ZSBsYSBtYW5pw6hyZSBkZSBwaXZvdGVyIG91IGRlIHJldG91cm5lciBsJ2ltYWdlIGF2YW50IGRlIGwnYWZmaWNoZXIiCisKK21zZ2lkICIsICIKK21zZ3N0ciAiLCAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAiRVJSRVVSwqA6IGRlIGwnw6lsw6ltZW50ICVzwqA6ICVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKKyIlc1xuIgorbXNnc3RyICIiCisiSW5mb3JtYXRpb24gZGUgZMOpYm9nYWdlIHN1cHBsw6ltZW50YWlyZcKgOlxuIgorIiVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgorbXNnc3RyICJjb250ZW5ldXIgwqvCoCVzwqDCuyB2aWRlLCBub24gYXV0b3Jpc8OpIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHNraXBwaW5nIgorbXNnc3RyICJwYXMgZGUgY29udGVuZXVyIMKrwqAlc8KgwrssIGlnbm9yw6kiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICJwYXMgZGUgcHJvcHJpw6l0w6kgwqvCoCVzwqDCuyBkYW5zIGwnw6lsw6ltZW50IMKrwqAlc8KgwrsiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGTDqWZpbmlyIGxhIHByb3ByacOpdMOpIMKrwqAlc8KgwrsgZGUgbCfDqWzDqW1lbnQgwqvCoCVzwqDCuyDDoCDCq8KgJXPCoMK7IgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNvbm5lY3RlciAlcyDDoCAlcyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKK21zZ3N0ciAicGFzIGQnw6lsw6ltZW50IMKrwqAlc8KgwrsiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNhcHMgXCIlc1wiIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbGUgY2FwcyDCq8KgJXPCoMK7IgorCittc2dpZCAibGluayB3aXRob3V0IHNvdXJjZSBlbGVtZW50IgorbXNnc3RyICJsaWVuIHNhbnMgw6lsw6ltZW50IHNvdXJjZSIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzaW5rIGVsZW1lbnQiCittc2dzdHIgImxpZW4gc2FucyDDqWzDqW1lbnQgZCdlbnRyw6llIChzaW5rKSIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAicGFzIGQnw6lsw6ltZW50IHNvdXJjZSBwb3VyIGwnVVJJIMKrwqAlc8KgwrsiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCB0byBsaW5rIFVSSSBcIiVzXCIgdG8iCittc2dzdHIgInBhcyBkJ8OpbMOpbWVudCBhdXF1ZWwgcmVsaWVyIGwnVVJJIMKrwqAlc8KgwrsiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJwYXMgZCfDqWzDqW1lbnQgZCdlbnRyw6llIHBvdXIgbCdVUkkgwqvCoCVzwqDCuyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbGluayBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgImltcG9zc2libGUgZGUgbGllciB1biDDqWzDqW1lbnQgZCdlbnRyw6llIHBvdXIgbCdVUkkgwqvCoCVzwqDCuyIKKworbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgorbXNnc3RyICJwaXBlbGluZSB2aWRlIG5vbiBhdXRvcmlzw6kiCisKK21zZ2lkICJJbnRlcm5hbCBjbG9jayBlcnJvci4iCittc2dzdHIgIkVycmV1ciBkJ2hvcmxvZ2UgaW50ZXJuZS4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgorbXNnc3RyICJFcnJldXIgaW50ZXJuZSBkZSBmbHV4IGRlIGRvbm7DqWVzLiIKKworbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgorbXNnc3RyICJEZSBub21icmV1eCB0YW1wb25zIHNvbnQgw6lsaW1pbsOpcy4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCittc2dzdHIgIlByb2Jsw6htZSBpbnRlcm5lIGRlIGZsdXggZGUgZG9ubsOpZXMuIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBzdHJlYW0gZXJyb3IuIgorbXNnc3RyICJFcnJldXIgaW50ZXJuZSBkZSBmbHV4IGRlIGRvbm7DqWVzLiIKKworbXNnaWQgIkZpbHRlciBjYXBzIgorbXNnc3RyICJDYXBhY2l0w6lzIGRlIGZpbHRyYWdlIgorCittc2dpZCAiIgorIlJlc3RyaWN0IHRoZSBwb3NzaWJsZSBhbGxvd2VkIGNhcGFiaWxpdGllcyAoTlVMTCBtZWFucyBBTlkpLiBTZXR0aW5nIHRoaXMgIgorInByb3BlcnR5IHRha2VzIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBwbGllZCBHc3RDYXBzIG9iamVjdC4iCittc2dzdHIgIiIKKyJSZXN0cmVpbnQgbGVzIGNhcGFjaXTDqXMgcG9zc2libGVzIGF1dG9yaXPDqWVzIChOVUxMIHNpZ25pZmllIEFOWSkuIExhICIKKyJkw6lmaW5pdGlvbiBkZSBjZXR0ZSBwcm9wcmnDqXTDqSBuw6ljZXNzaXRlIHVuZSByw6lmw6lyZW5jZSDDoCBsJ29iamV0IEdTVENhcHMgIgorImZvdXJuaS4iCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiQXVjdW4gbm9tIGRlIGZpY2hpZXIgaW5kaXF1w6kgcG91ciBsJ8OpY3JpdHVyZS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnb3V2cmlyIGxlIGZpY2hpZXIgwqvCoCVzwqDCuyBlbiDDqWNyaXR1cmUuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNsb3NpbmcgZmlsZSBcIiVzXCIuIgorbXNnc3RyICJFcnJldXIgbG9ycyBkZSBsYSBmZXJtZXR1cmUgZHUgZmljaGllciDCq8KgJXPCoMK7LiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiRXJyZXVyIGRlIHBvc2l0aW9ubmVtZW50IGRhbnMgbGUgZmljaGllciDCq8KgJXPCoMK7LiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiRXJyZXVyIGQnw6ljcml0dXJlIGRhbnMgbGUgZmljaGllciDCq8KgJXPCoMK7LiIKKworbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHJlYWRpbmcuIgorbXNnc3RyICJBdWN1biBub20gZGUgZmljaGllciBpbmRpcXXDqSBwb3VyIGxhIGxlY3R1cmUuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ291dnJpciBsZSBmaWNoaWVyIMKrwqAlc8KgwrsgZW4gbGVjdHVyZS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCittc2dzdHIgIkltcG9zc2libGUgZCdvYnRlbmlyIGRlcyBpbmZvcyBzdXIgwqvCoCVzwqDCuy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiXCIlc1wiIGlzIGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiwqvCoCVzwqDCuyBlc3QgdW4gcsOpcGVydG9pcmUuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKK21zZ3N0ciAiTGUgZmljaGllciDCq8KgJXPCoMK7IGVzdCB1biBjb25uZWN0ZXVyLiIKKworbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCittc2dzdHIgIsOJY2hlYyBzdWl0ZSBhdXggaXTDqXJhdGlvbnMgZGVtYW5kw6llcy4iCisKK21zZ2lkICJObyBUZW1wIGRpcmVjdG9yeSBzcGVjaWZpZWQuIgorbXNnc3RyICJBdWN1biByw6lwZXJ0b2lyZSB0ZW1wb3JhaXJlIGluZGlxdcOpLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGNyw6llciBsZSBmaWNoaWVyIHRlbXBvcmFpcmUgwqvCoCVzwqDCuy4iCisKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIgorbXNnc3RyICJFcnJldXIgZCfDqWNyaXR1cmUgZGFucyBsZSBmaWNoaWVyIGRlIHTDqWzDqWNoYXJnZW1lbnQuIgorCittc2dpZCAiY2FwcyIKK21zZ3N0ciAiY2FwYWNpdMOpcyIKKworbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCittc2dzdHIgImNhcGFjaXTDqXMgZMOpdGVjdMOpZXMgZGFucyBsZSBmbHV4IgorCittc2dpZCAibWluaW11bSIKK21zZ3N0ciAibWluaW11bSIKKworbXNnaWQgIm1heGltdW0iCittc2dzdHIgIm1heGltdW0iCisKK21zZ2lkICJmb3JjZSBjYXBzIgorbXNnc3RyICJmb3JjZXIgbGVzIGNhcGFjaXTDqXMiCisKK21zZ2lkICJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIKK21zZ3N0ciAiZm9yY2UgbGVzIGNhcGFjaXTDqXMgc2FucyBmYWlyZSBkZSByZWNoZXJjaGUgZGUgdHlwZSIKKworbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKK21zZ3N0ciAiTGUgZmx1eCBuZSBjb250aWVudCBhdWN1bmUgZG9ubsOpZS4iCisKK21zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgorbXNnc3RyICJJbnRlcmZhY2VzIGltcGzDqW1lbnTDqWVzwqA6XG4iCisKK21zZ2lkICJyZWFkYWJsZSIKK21zZ3N0ciAiYWNjw6hzIGVuIGxlY3R1cmUiCisKK21zZ2lkICJ3cml0YWJsZSIKK21zZ3N0ciAiYWNjw6hzIGVuIMOpY3JpdHVyZSIKKworbXNnaWQgImNvbnRyb2xsYWJsZSIKK21zZ3N0ciAiY29udHLDtGxhYmxlIgorCittc2dpZCAiY2hhbmdlYWJsZSBpbiBOVUxMLCBSRUFEWSwgUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUiCittc2dzdHIgIm1vZGlmaWFibGUgZW4gbCfDqXRhdCBOVUxMLCBSRUFEWSwgUEFVU0VEIG91IFBMQVlJTkciCisKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCwgUkVBRFkgb3IgUEFVU0VEIHN0YXRlIgorbXNnc3RyICJtb2RpZmlhYmxlIHVuaXF1ZW1lbnQgZW4gbCfDqXRhdCBOVUxMLCBSRUFEWSBvdSBQQVVTRUQiCisKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKK21zZ3N0ciAibW9kaWZpYWJsZSB1bmlxdWVtZW50IGVuIGwnw6l0YXQgTlVMTCBvdSBSRUFEWSIKKworbXNnaWQgIkJsYWNrbGlzdGVkIGZpbGVzOiIKK21zZ3N0ciAiRmljaGllcnMgc3VyIGxpc3RlIG5vaXJlwqA6IgorCittc2dpZCAiVG90YWwgY291bnQ6ICIKK21zZ3N0ciAiTm9tYnJlIHRvdGFswqA6IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdGVkIGZpbGUiCittc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdGVkIGZpbGVzIgorbXNnc3RyWzBdICIlZCBmaWNoaWVyIHN1ciBsaXN0ZSBub2lyZSIKK21zZ3N0clsxXSAiJWQgZmljaGllcnMgc3VyIGxpc3RlIG5vaXJlIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIHBsdWdpbiIKK21zZ2lkX3BsdXJhbCAiJWQgcGx1Z2lucyIKK21zZ3N0clswXSAiJWQgZ3JlZmZvbiIKK21zZ3N0clsxXSAiJWQgZ3JlZmZvbnMiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgorbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKK21zZ3N0clswXSAiJWQgw6lsw6ltZW50IGRlIGxpc3RlIG5vaXJlIgorbXNnc3RyWzFdICIlZCDDqWzDqW1lbnRzIGRlIGxpc3RlIG5vaXJlIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGZlYXR1cmUiCittc2dpZF9wbHVyYWwgIiVkIGZlYXR1cmVzIgorbXNnc3RyWzBdICIlZCBmb25jdGlvbm5hbGl0w6kiCittc2dzdHJbMV0gIiVkIGZvbmN0aW9ubmFsaXTDqXMiCisKK21zZ2lkICJQcmludCBhbGwgZWxlbWVudHMiCittc2dzdHIgIkFmZmljaGUgdG91cyBsZXMgw6lsw6ltZW50cyIKKworbXNnaWQgIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHIgIkFmZmljaGUgdW5lIGxpc3RlIGRlcyBmaWNoaWVycyBzdXIgbGlzdGUgbm9pcmUiCisKK21zZ2lkICIiCisiUHJpbnQgYSBtYWNoaW5lLXBhcnNhYmxlIGxpc3Qgb2YgZmVhdHVyZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4gb3IgYWxsICIKKyJwbHVnaW5zIHByb3ZpZGUuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIGluIGNvbm5lY3Rpb24gd2l0aCBleHRlcm5hbCAiCisiYXV0b21hdGljIHBsdWdpbiBpbnN0YWxsYXRpb24gbWVjaGFuaXNtcyIKK21zZ3N0ciAiIgorIkFmZmljaGUgc291cyBmb3JtZSBtYWNoaW5lIHVuZSBsaXN0ZSBkZSBmb25jdGlvbm5hbGl0w6lzIG9mZmVydGVzIHBhciBsZSAiCisiZ3JlZmZvbiBpbmRpcXXDqSBvdSB0b3VzIGxlcyBncmVmZm9ucy5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlsZSBlbiBsaWVuIGF2ZWMgZGVzIG3DqWNhbmlzbWVzICIKKyJleHRlcm5lcyBkJ2luc3RhbGxhdGlvbiBhdXRvbWF0aXF1ZSBkZSBncmVmZm9ucyIKKworbXNnaWQgIkxpc3QgdGhlIHBsdWdpbiBjb250ZW50cyIKK21zZ3N0ciAiw4ludW3DqHJlIGxlIGNvbnRlbnUgZHUgZ3JlZmZvbiIKKworbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKK21zZ3N0ciAiIgorIkFmZmljaGUgbGVzIHR5cGVzIGQnVVJJIHByaXMgZW4gY2hhcmdlLCBhdmVjIGxlcyDDqWzDqW1lbnRzIHF1aSBsZXMgIgorImltcGzDqW1lbnRlbnQiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGxvYWQgcGx1Z2luIGZpbGU6ICVzXG4iCittc2dzdHIgIkltcG9zc2libGUgZGUgY2hhcmdlciBsZSBmaWNoaWVyIGRlIGdyZWZmb27CoDogJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIGVsZW1lbnQgb3IgcGx1Z2luICclcydcbiIKK21zZ3N0ciAiQXVjdW4gw6lsw6ltZW50IG91IGdyZWZmb24gwqvCoCVzwqDCu1xuIgorCittc2dpZCAiSW5kZXggc3RhdGlzdGljcyIKK21zZ3N0ciAiU3RhdGlzdGlxdWVzIGQnaW5kZXgiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICJNZXNzYWdlIG7CsCV1IHJlw6d1IGRlIGwnw6lsw6ltZW50IMKrwqAlc8KgwrsgKCVzKcKgOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCittc2dzdHIgIk1lc3NhZ2UgbsKwJXUgcmXDp3UgZHUgY29ubmVjdGV1ciDCq8KgJXM6JXPCoMK7ICglcynCoDogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICJNZXNzYWdlIG7CsCV1IHJlw6d1IGRlIGwnb2JqZXQgwqvCoCVzwqDCuyAoJXMpwqA6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgKCVzKTogIgorbXNnc3RyICJNZXNzYWdlIG7CsCV1IHJlw6d1ICglcynCoDogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKK21zZ3N0ciAiRU9TIHJlw6d1IGRlIGwnw6lsw6ltZW50IMKrwqAlc8KgwrsuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKK21zZ3N0ciAiQkFMSVNFIFRST1VWw4lFICA6IGTDqWNvdXZlcnRlIHBhciBsJ8OpbMOpbWVudCDCq8KgJXPCoMK7LlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgcGFkIFwiJXM6JXNcIi5cbiIKK21zZ3N0ciAiQkFMSVNFIFRST1VWw4lFICA6IGTDqWNvdXZlcnRlIHBhciBsZSBjb25uZWN0ZXVyIMKrwqAlczolc8KgwrsuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgorbXNnc3RyICJCQUxJU0UgVFJPVVbDiUUgIDogZMOpY291dmVydGUgcGFyIGwnb2JqZXQgwqvCoCVzwqDCuy5cbiIKKworbXNnaWQgIkZPVU5EIFRBR1xuIgorbXNnc3RyICJCQUxJU0UgVFJPVVbDiUVcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSU5GTzpcbiIKKyIlc1xuIgorbXNnc3RyICIiCisiSU5GT8KgOlxuIgorIiVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgorbXNnc3RyICJBVkVSVElTU0VNRU5UwqA6IGRlIGwnw6lsw6ltZW50ICVzwqA6ICVzXG4iCisKK21zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIGJ1ZmZlcmluZyB0byBmaW5pc2guLi5cbiIKK21zZ3N0ciAiUHLDqXBhcmF0aW9uIHRlcm1pbsOpZSwgYXR0ZW50ZSBkZSBsYSBmaW4gZGUgcmVtcGxpc3NhZ2UgZHUgdGFtcG9uLi4uXG4iCisKK21zZ2lkICJidWZmZXJpbmcuLi4iCittc2dzdHIgIm1pc2UgZW4gbcOpbW9pcmUgdGFtcG9uLi4uIgorCittc2dpZCAiRG9uZSBidWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKK21zZ3N0ciAiTcOpbW9pcmUgdGFtcG9uIHBsZWluZSwgZMOpZmluaXRpb24gZHUgcGlwZWxpbmUgw6AgUExBWUlORy4uLlxuIgorCittc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAiUmVtcGxpc3NhZ2UgZHUgdGFtcG9uLCBkw6lmaW5pdGlvbiBkdSBwaXBlbGluZSDDoCBQQVVTRUQuLi5cbiIKKworbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCittc2dzdHIgIlJlZGlzdHJpYnV0aW9uIGRlIGxhdGVuY2UuLi5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgorbXNnc3RyICJEw6lmaW5pdGlvbiBkZSBsJ8OpdGF0IMOgICVzIGNvbW1lIGRlbWFuZMOpIHBhciAlcy4uLlxuIgorCittc2dpZCAiSW50ZXJydXB0OiBTdG9wcGluZyBwaXBlbGluZSAuLi5cbiIKK21zZ3N0ciAiSW50ZXJydXB0aW9uwqA6IGFycsOqdCBkdSBwaXBlbGluZS4uLlxuIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nIGVsZW1lbnQ6ICVzXG4iCittc2dzdHIgInBhcyBkJ8OpbMOpbWVudCDCq8KgJXPCoMK7IgorCittc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgorbXNnc3RyICJBZmZpY2hlIGxlcyBiYWxpc2VzIChhdXNzaSBjb25udWVzIHNvdXMgbGUgbm9tIGRlIG3DqXRhZG9ubsOpZXMpIgorCittc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKK21zZ3N0ciAiQWZmaWNoZSBkZXMgaW5mb3JtYXRpb25zIGQnw6l0YXQgZXQgZGVzIG5vdGlmaWNhdGlvbnMgZGUgcHJvcHJpw6l0w6lzIgorCittc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiTidhZmZpY2hlIHBhcyBkJ2luZm9ybWF0aW9ucyBkZSBwcm9ncmVzc2lvbiIKKworbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKK21zZ3N0ciAiQWZmaWNoZSBkZXMgbWVzc2FnZXMiCisKK21zZ2lkICJEbyBub3Qgb3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBvZiBUWVBFIgorbXNnc3RyICJOJ2FmZmljaGUgcGFzIGQnaW5mb3JtYXRpb25zIGQnw6l0YXQgZGUgVFlQRSIKKworbXNnaWQgIlRZUEUxLFRZUEUyLC4uLiIKK21zZ3N0ciAiVFlQRTEsVFlQRTIsLi4uIgorCittc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgorbXNnc3RyICJOJ2luc3RhbGxlIHBhcyBkZSBnZXN0aW9ubmFpcmUgZGUgZHlzZm9uY3Rpb25uZW1lbnQiCisKK21zZ2lkICJQcmludCBhbGxvYyB0cmFjZSAoaWYgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUpIgorbXNnc3RyICJBZmZpY2hlIGxlcyB0cmFjZXMgZCdhbGxvY2F0aW9ucyAoc2kgYWN0aXbDqWVzIGxvcnMgZGUgbGEgY29tcGlsYXRpb24pIgorCittc2dpZCAiRm9yY2UgRU9TIG9uIHNvdXJjZXMgYmVmb3JlIHNodXR0aW5nIHRoZSBwaXBlbGluZSBkb3duIgorbXNnc3RyICJGb3JjZSBsJ0VPUyBzdXIgbGVzIHNvdXJjZXMgYXZhbnQgZGUgZmVybWVyIGxlIHBpcGVsaW5lIgorCittc2dpZCAiR2F0aGVyIGFuZCBwcmludCBpbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICJSYXNzZW1ibGUgZXQgYWZmaWNoZSBsZXMgc3RhdGlzdGlxdWVzIGQnaW5kZXgiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZDogJXMuXG4iCittc2dzdHIgIkVSUkVVUsKgOiBsZSBwaXBlbGluZSBuJ2EgcGFzIHB1IMOqdHJlIGNvbnN0cnVpdMKgOiAlcy5cbiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXG4iCittc2dzdHIgIkVSUkVVUsKgOiBsZSBwaXBlbGluZSBuJ2EgcGFzIHB1IMOqdHJlIGNvbnN0cnVpdC5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCittc2dzdHIgIkFWRVJUSVNTRU1FTlTCoDogcGlwZWxpbmUgZXJyb27DqcKgOiAlc1xuIgorCittc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgorbXNnc3RyICJFUlJFVVLCoDogbCfDqWzDqW1lbnQgwqvCoHBpcGVsaW5lwqDCuyBlc3QgaW50cm91dmFibGUuXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAiRMOpZmluaXRpb24gZHUgcGlwZWxpbmUgw6AgUEFVU0VELi4uXG4iCisKK21zZ2lkICJFUlJPUjogUGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBhdXNlLlxuIgorbXNnc3RyICJFUlJFVVLCoDogbGUgcGlwZWxpbmUgcmVmdXNlIGRlIHNlIG1ldHRyZSBlbiBwYXVzZS5cbiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIGxpdmUgYW5kIGRvZXMgbm90IG5lZWQgUFJFUk9MTCAuLi5cbiIKK21zZ3N0ciAiTGUgcGlwZWxpbmUgZXN0IGFjdGlmIGV0IG4nYSBwYXMgYmVzb2luIGRlIHBoYXNlIFBSRVJPTEwuLi5cbiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCittc2dzdHIgIkxlIHBpcGVsaW5lIGVzdCBlbiBwaGFzZSBkZSBQUkVST0xMLi4uXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHByZXJvbGwuXG4iCittc2dzdHIgIkVSUkVVUsKgOiBsZSBwaXBlbGluZSByZWZ1c2UgZGUgcGFzc2VyIGVuIHBoYXNlIGRlIHByw6lwYXJhdGlvbi5cbiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExFRCAuLi5cbiIKK21zZ3N0ciAiTGUgcGlwZWxpbmUgYSB0ZXJtaW7DqSBsYSBwaGFzZSBQUkVST0xMLi4uXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIlBhc3NhZ2UgZHUgcGlwZWxpbmUgw6AgbGEgcGhhc2UgUExBWUlORy4uLlxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIgorbXNnc3RyICJFUlJFVVLCoDogbGUgcGlwZWxpbmUgcmVmdXNlIGRlIHBhc3NlciBlbiBtb2RlIGFjdGlmLlxuIgorCittc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gRm9yY2luZyBFT1Mgb24gdGhlIHBpcGVsaW5lXG4iCittc2dzdHIgIkVPUyDDoCBsYSBmZXJtZXR1cmUgZXN0IGFjdGl2w6kgLS0gRU9TIGZvcmPDqSBzdXIgbGUgcGlwZWxpbmVcbiIKKworbXNnaWQgIldhaXRpbmcgZm9yIEVPUy4uLlxuIgorbXNnc3RyICJBdHRlbnRlIGQnRU9TLi4uXG4iCisKK21zZ2lkICJFT1MgcmVjZWl2ZWQgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgorbXNnc3RyICJFT1MgcmXDp3UgLSBhcnLDqnQgZHUgcGlwZWxpbmUuLi5cbiIKKworbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgorbXNnc3RyICJVbmUgZXJyZXVyIHMnZXN0IHByb2R1aXRlIGxvcnMgZGUgbCdhdHRlbnRlIGRlIGwnRU9TXG4iCisKK21zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKK21zZ3N0ciAiTCdleMOpY3V0aW9uIHMnZXN0IHRlcm1pbsOpZSBhcHLDqHMgJSIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUkVBRFkgLi4uXG4iCittc2dzdHIgIkTDqWZpbml0aW9uIGR1IHBpcGVsaW5lIMOgIFJFQURZIChwcsOqdCkuLi5cbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCAuLi5cbiIKK21zZ3N0ciAiRMOpZmluaXRpb24gZHUgcGlwZWxpbmUgw6AgTlVMTC4uLlxuIgorCittc2dpZCAiRnJlZWluZyBwaXBlbGluZSAuLi5cbiIKK21zZ3N0ciAiTGliw6lyYXRpb24gZHUgcGlwZWxpbmUuLi5cbiIKKworI34gbXNnaWQgIlVzYWdlOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLiBdXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJVdGlsaXNhdGlvbsKgOiBnc3QteG1sbGF1bmNoIDxmaWNoaWVyLnhtbD4gWyDDqWzDqW1lbnQuIgorI34gInByb3ByacOpdMOpPXZhbGV1ciAuLi4gXVxuIgorCisjfiBtc2dpZCAiRVJST1I6IHBhcnNlIG9mIHhtbCBmaWxlICclcycgZmFpbGVkLlxuIgorI34gbXNnc3RyICJFUlJFVVLCoDogbCdhbmFseXNlIGR1IGZpY2hpZXIgeG1sIMKrwqAlc8KgwrsgYSDDqWNob3XDqS5cbiIKKworI34gbXNnaWQgIkVSUk9SOiBubyB0b3BsZXZlbCBwaXBlbGluZSBlbGVtZW50IGluIGZpbGUgJyVzJy5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIkVSUkVVUsKgOiBwYXMgZCfDqWzDqW1lbnQgcGlwZWxpbmUgZGUgcHJlbWllciBuaXZlYXUgZGFucyBsZSBmaWNoaWVyICIKKyN+ICLCq8KgJXPCoMK7LlxuIgorCisjfiBtc2dpZCAiV0FSTklORzogb25seSBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLlxuIgorI34gbXNnc3RyICIiCisjfiAiQVZFUlRJU1NFTUVOVMKgOiBhY3R1ZWxsZW1lbnQsIHVuIHNldWwgw6lsw6ltZW50IGRlIHByZW1pZXIgbml2ZWF1IGVzdCAiCisjfiAiZ8OpcsOpLlxuIgorCisjfiBtc2dpZCAiRVJST1I6IGNvdWxkIG5vdCBwYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgJWQ6ICVzLlxuIgorI34gbXNnc3RyICIiCisjfiAiRVJSRVVSwqA6IGltcG9zc2libGUgZCdhbmFseXNlciBsZSBwYXJhbcOodHJlIG51bcOpcm8gJWQgZGUgbGEgbGlnbmUgZGUgIgorI34gImNvbW1hbmRlwqA6ICVzLlxuIgorCisjfiBtc2dpZCAiV0FSTklORzogZWxlbWVudCBuYW1lZCAnJXMnIG5vdCBmb3VuZC5cbiIKKyN+IG1zZ3N0ciAiQVZFUlRJU1NFTUVOVMKgOiBsJ8OpbMOpbWVudCBub21tw6kgwqvCoCVzwqDCuyBlc3QgaW50cm91dmFibGUuXG4iCisKKyN+IG1zZ2lkICJTYXZlIHhtbCByZXByZXNlbnRhdGlvbiBvZiBwaXBlbGluZSB0byBGSUxFIGFuZCBleGl0IgorI34gbXNnc3RyICIiCisjfiAiRW5yZWdpc3RyZSB1bmUgcmVwcsOpc2VudGF0aW9uIHhtbCBkdSBwaXBlbGluZSBkYW5zIEZJQ0hJRVIgZXQgcXVpdHRlIgorCisjfiBtc2dpZCAiRklMRSIKKyN+IG1zZ3N0ciAiRklDSElFUiIKKworI34gbXNnaWQgIkRvIG5vdCBpbnN0YWxsIHNpZ25hbCBoYW5kbGVycyBmb3IgU0lHVVNSMSBhbmQgU0lHVVNSMiIKKyN+IG1zZ3N0ciAiTidpbnN0YWxsZSBwYXMgZGUgZ2VzdGlvbm5haXJlIGRlIHNpZ25hbCBwb3VyIFNJR1VTUjEgZXQgU0lHVVNSMiIKZGlmZiAtLWdpdCBhL3BvL2dsLmdtbyBiL3BvL2dsLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzYwODIwCi0tLSAvZGV2L251bGwKKysrIGIvcG8vZ2wuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2dsLnBvIGIvcG8vZ2wucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdjNGJkMwotLS0gL2Rldi9udWxsCisrKyBiL3BvL2dsLnBvCkBAIC0wLDAgKzEsMTIyOSBAQAorIyBHYWxpY2lhbiB0cmFuc2xhdGlvbnMgZm9yIGdzdHJlYW1lciBwYWNrYWdlLgorIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgorIyBGcmFuY2lzY28gRGnDqWd1ZXogPGZyYW5kaWVndWV6QHVidW50dS5jb20+LCAyMDExLgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDAuMTAuMzIuMlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTA5LTI5IDE0OjU1KzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDExLTA5LTA1IDEyOjQ5KzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEZyYW4gRGllZ3VleiA8ZnJhbmRpZWd1ZXpAdWJ1bnR1LmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBHYWxpY2lhbiA8cHJveGVjdG9AdHJhc25vLm5ldD5cbiIKKyJMYW5ndWFnZTogZ2xfRVNcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiE9MSk7XG4iCisKK21zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCittc2dzdHIgIkltcHJpbWlyIGEgdmVyc2nDs24gZGUgR1N0cmVhbWVyIgorCittc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCittc2dzdHIgIkZhY2VyIHRvZGFzIGFzIGFkdmVydGVuY2lhcyBmYXRhaXMiCisKK21zZ2lkICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKK21zZ3N0ciAiSW1wcmltaXIgYXMgY2F0ZWdvcsOtYXMgZGUgZGVwdXJhY2nDs24gZGlzcG/DscOtYmVpcyBlIHNhw61yIgorCittc2dpZCAiIgorIkRlZmF1bHQgZGVidWcgbGV2ZWwgZnJvbSAxIChvbmx5IGVycm9yKSB0byA1IChhbnl0aGluZykgb3IgMCBmb3Igbm8gb3V0cHV0IgorbXNnc3RyICIiCisiTml2ZWwgZGUgZGVwdXJhY2nDs24gcG9yIG9taXNpw7NuIGRlc2RlIDEgKHPDsyBlcnJvKSBhdMOpIDUgKHRvZG8pIG91IDAgc2VuIHNhw61kYSIKKworbXNnaWQgIkxFVkVMIgorbXNnc3RyICJOSVZFTCIKKworbXNnaWQgIiIKKyJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yICIKKyJ0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCittc2dzdHIgIiIKKyJMaXN0YSBkZSBwYXJlcyBub21lX2NhdGVnb3LDrWE6bml2ZWwgc2VwYXJhZG9zIHBvciBjb21hcyBwYXJhIGVzdGFiZWxlY2VyICIKKyJuaXZlaXMgZXNwZWPDrWZpY29zIHBhcmEgYXMgY2F0ZWdvcsOtYXMgaW5kaXZpZHVhaXMuIEV4ZW1wbG86IEdTVF9BVVRPUExVRzo1LCIKKyJHU1RfRUxFTUVOVF8qOjMiCisKK21zZ2lkICJMSVNUIgorbXNnc3RyICJMSVNUQSIKKworbXNnaWQgIkRpc2FibGUgY29sb3JlZCBkZWJ1Z2dpbmcgb3V0cHV0IgorbXNnc3RyICJEZXNhY3RpdmFyIGEgY29sb3JhY2nDs24gZGEgc2HDrWRhIGRlcHVyYWRhIgorCittc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCittc2dzdHIgIkRlc2FjdGl2YXIgZGVwdXJhY2nDs24iCisKK21zZ2lkICJFbmFibGUgdmVyYm9zZSBwbHVnaW4gbG9hZGluZyBkaWFnbm9zdGljcyIKK21zZ3N0ciAiQWN0aXZhciBhIHNhw61kYSBkZXRhbGxhZGEgZG8gZGlhZ27Ds3N0aWNvIGRlIGNhcmdhIGRlIGVuZ2FkaWRvcyIKKworbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCittc2dzdHIgIlJ1dGFzIHNlcGFyYWRhcyBwb3IgcHVudG8gZSBjb21hIGNvbnRlbmRvIG9zIGVuZ2FkaWRvcyIKKworbXNnaWQgIlBBVEhTIgorbXNnc3RyICJSVVRBUyIKKworbXNnaWQgIiIKKyJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwbHVnaW5zIHRvIHByZWxvYWQgaW4gYWRkaXRpb24gdG8gdGhlIGxpc3Qgc3RvcmVkIGluICIKKyJlbnZpcm9ubWVudCB2YXJpYWJsZSBHU1RfUExVR0lOX1BBVEgiCittc2dzdHIgIiIKKyJMaXN0YSBkZSBlbmdhZGlkb3MgcGFyYSBwcmVjYXJnYXIgc2VwYXJhZG9zIHBvciBjb21hcyBhZGVtYWlzIGRhIGxpc3RhICIKKyJhbG1hY2VuYWRhIG5hIHZhcmnDoWJlbCBkZSBjb250b3JubyBHU1RfUExVR0lOX1BBVEgiCisKK21zZ2lkICJQTFVHSU5TIgorbXNnc3RyICJDT01QTEVNRU5UT1MiCisKK21zZ2lkICJEaXNhYmxlIHRyYXBwaW5nIG9mIHNlZ21lbnRhdGlvbiBmYXVsdHMgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIgorbXNnc3RyICIiCisiRGVzYWN0aXZhciBhIGNhcHR1cmEgZGUgZmFsbG9zIGRlIHNlZ21lbnRhY2nDs24gZHVyYW50ZSBhIGNhcmdhIGRlIGVuZ2FkaWRvcyIKKworbXNnaWQgIkRpc2FibGUgdXBkYXRpbmcgdGhlIHJlZ2lzdHJ5IgorbXNnc3RyICJEZXNhY3RpdmFyIGEgYWN0dWFsaXphY2nDs24gZG8gcmV4aXN0cm8iCisKK21zZ2lkICJEaXNhYmxlIHNwYXduaW5nIGEgaGVscGVyIHByb2Nlc3Mgd2hpbGUgc2Nhbm5pbmcgdGhlIHJlZ2lzdHJ5IgorbXNnc3RyICJEZXNhY3RpdmFyIG8gbGFuemFtZW50byBkdW4gcHJvY2VzbyBkZSBheHVkYSBhbyBlc2NhbmVhciBvIHJleGlzdHJvIgorCittc2dpZCAiR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgIk9wY2nDs25zIGRlIEdTdHJlYW1lciIKKworbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgIk1vc3RyYXIgYXMgb3BjacOzbnMgZGUgR1N0cmVhbWVyIgorCittc2dpZCAiVW5rbm93biBvcHRpb24iCittc2dzdHIgIk9wY2nDs24gZGVzY2/DsWVjaWRhIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIgZW5jb250cm91IHVuIGVycm8geGVyYWwgbm8gbsO6Y2xlbyBkYSBiaWJsaW90ZWNhLiIKKworbXNnaWQgIiIKKyJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuIgorbXNnc3RyICIiCisiT3MgZGVzZW52b2x2ZWRvcmVzIGRlIEdTdHJlYW1lciBmb3JvbiBkZW1hc2lhZG8gdmFnb3MgcGFyYSBlbmdhZGlyIHVuIGPDs2RpZ28gIgorImRlIGVycm8gYSBlc3RlIGVycm8uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjb2RlIG5vdCBpbXBsZW1lbnRlZC4iCittc2dzdHIgIkVycm8gaW50ZXJubyBkZSBHU3RyZWFtZXI6IGPDs2RpZ28gbm9uIGltcGxlbWVudGFkby4iCisKK21zZ2lkICIiCisiR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkIGFuZCBzb21lIGVsZW1lbnQgZmFpbGVkIHRvIHBvc3QgYSAiCisicHJvcGVyIGVycm9yIG1lc3NhZ2Ugd2l0aCB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZS4iCittc2dzdHIgIiIKKyJQcm9kdWNpdXNlIHVuIGVycm8gZGUgR1N0cmVhbWVyOiBwcm9kdWNpdXNlIHVuIGZhbGxvIGR1cmFudGUgbyBjYW1iaW8gZGUgIgorImVzdGFkbyBlIGFsZ8O6biBlbGVtZW50byBmcmFjYXNvdSBhbyBwdWJsaWNhciBhIG1lbnNheGUgZGUgZXJybyAiCisiY29ycmVzcG9uZGVudGUgY28gbW90aXZvIGRvIGZhbGxvLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogcGFkIHByb2JsZW0uIgorbXNnc3RyICJFcnJvIGludGVybm8gZGUgR1N0cmVhbWVyOiBwcm9ibGVtYSBkZSBkZXNwcmF6YW1lbnRvLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGhyZWFkIHByb2JsZW0uIgorbXNnc3RyICJFcnJvIGludGVybm8gZGUgR1N0cmVhbWVyOiBwcm9ibGVtYSBjb3MgZsOtb3MiCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uIgorbXNnc3RyICJFcnJvIGludGVybm8gZGUgR1N0cmVhbWVyOiBwcm9ibGVtYSBkZSBuZWdvY2lhY2nDs24uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBldmVudCBwcm9ibGVtLiIKK21zZ3N0ciAiRXJybyBpbnRlcm5vIGRlIEdTdHJlYW1lcjogcHJvYmxlbWEgY29zIGV2ZW50b3MuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uIgorbXNnc3RyICJFcnJvIGludGVybm8gZGUgR1N0cmVhbWVyOiBwcm9ibGVtYSBjb2EgYnVzY2EuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgorbXNnc3RyICJFcnJvIGludGVybm8gZGUgR1N0cmVhbWVyOiBwcm9iZW1hIGNvYXMgY2FwYWNpZGFkZXMuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4iCittc2dzdHIgIkVycm8gaW50ZXJubyBkZSBHU3RyZWFtZXI6IHByb2JsZW1hIGNvYXMgZXRpcXVldGFzLiIKKworbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCittc2dzdHIgIsOBIHPDumEgaW5zdGFsYWNpw7NuIGRlIEdTdHJlYW1lciBmw6FsdGFsbGUgdW4gZW5nYWRpZG8uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKK21zZ3N0ciAiRXJybyBpbnRlcm5vIGRlIEdTdHJlYW1lcjogcHJvYmxlbWEgZGUgcmVsb3hvLiIKKworbXNnaWQgIiIKKyJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCisiZGlzYWJsZWQuIgorbXNnc3RyICIiCisiRXN0ZSBhcGxpY2F0aXZvIGVzdMOhIHRlbnRhbmRvIHVzYXIgdW5oYSBmdW5jaW9uYWxpZGFkZSBkZSBHU3RyZWFtZXIgcXVlIGZvaSAiCisiZGVzaGFiaWxpdGFkYS4iCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN1cHBvcnRpbmcgbGlicmFyeSBlcnJvci4iCittc2dzdHIgIkdTdHJlYW1lciBhdG9wb3UgdW4gZXJybyBkZSBjb21wYXRpYmlsaWRhZGUgeGVyYWwgbmEgYmlibGlvdGVjYS4iCisKK21zZ2lkICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJOb25vbiBmb2kgcG9zw61iZWwgaW5pY2lhciBhIGJpYmxpb3RlY2EgZGUgY29tcGF0aWJpbGlkYWRlLiIKKworbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJOb24gZm9pIHBvc8OtYmVsIHBlaGFyIGEgYmlibGlvdGVjYSBkZSBhc2lzdGVuY2lhLiIKKworbXNnaWQgIkNvdWxkIG5vdCBjb25maWd1cmUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiTm9uIGZvaSBwb3PDrWJlbCBjb25maWd1cmFyIGEgYmlibGlvdGVjYSBkZSBhc2lzdGVuY2lhLiIKKworbXNnaWQgIkVuY29kaW5nIGVycm9yLiIKK21zZ3N0ciAiRXJybyBkZSBjb2RpZmljYWNpw7NuLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIgZW5jb250cm91IHVuIGVycm8geGVyYWwgZGUgcmVjdXJzby4iCisKK21zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgorbXNnc3RyICJSZWN1cnNvIG5vbiBlbmNvbnRyYWRvLiIKKworbXNnaWQgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCittc2dzdHIgIk8gcmVjdXJzbyBlc3TDoSBvY3VwYWRvIG91IG5vbiBkaXNwb8Oxw61iZWwuIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcuIgorbXNnc3RyICJOb24gZm9pIHBvc8OtYmVsIGFicmlyIG8gcmVjdXJzbyBwYXJhIGEgc8O6YSBsZWN0dXJhLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiTm9uIGZvaSBwb3PDrWJlbCBhYnJpciBvIHJlY3Vyc28gcGFyYSBhIHPDumEgZXNjcml0dXJhLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKK21zZ3N0ciAiTm9uIGZvaSBwb3PDrWJlbCBhYnJpciBvIHJlY3Vyc28gcGFyYSBhIHPDumEgbGVjdHVyYSBvdSBlc2NyaXR1cmEuIgorCittc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKK21zZ3N0ciAiTm9uIGZvaSBwb3PDrWJlbCBwZWNoYXIgbyByZWN1cnNvLiIKKworbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gcmVzb3VyY2UuIgorbXNnc3RyICJOb24gZm9pIHBvc8OtYmVsIGxlciBkZXNkZSBvIHJlY3Vyc28uIgorCittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKK21zZ3N0ciAiTm9uIGZvaSBwb3PDrWJlbCBlc2NyaWJpciBubyByZWN1cnNvLiIKKworbXNnaWQgIkNvdWxkIG5vdCBwZXJmb3JtIHNlZWsgb24gcmVzb3VyY2UuIgorbXNnc3RyICJOb24gZm9pIHBvc8OtYmVsIHJlYWxpemFyIHVuaGEgYnVzY2Egbm8gcmVjdXJzby4iCisKK21zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgorbXNnc3RyICJOb24gZm9pIHBvc8OtYmVsIHNpbmNyb25pemFyIG8gcmVjdXJzby4iCisKK21zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKK21zZ3N0ciAiTm9uIGZvaSBwb3PDrWJlbCBvYnRlci9lc3RhYmVsZWNlciBhIGNvbmZpZ3VyYWNpw7NuIGRlL2VuIG8gcmVjdXJzby4iCisKK21zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCittc2dzdHIgIk5vbiBxdWVkYSBlc3BhY2lvIGRpc3Bvw7HDrWJlbCBubyByZWN1cnNvLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIGVuY29udHJvdSB1biBlcnJvIHhlcmFsIGRlIGZsdXhvLiIKKworbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKK21zZ3N0ciAiIgorIk8gZWxlbWVudG8gbm9uIGltcGxlbWVudGEgdW4gbWFuZXhhZG9yIGRlc3RlIGZsdXhvLiBQb3IgZmF2b3IsIGNvbXBsZXRlIG8gIgorImluZm9ybWUgZSBlcnJvLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgorbXNnc3RyICJOb24gZm9pIHBvc8OtYmVsIGRldGVybWluYXIgbyB0aXBvIGRlIGZsdXhvLiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKK21zZ3N0ciAiTyBmbHV4byDDqSBkdW4gdGlwbyBkaWZlcmVudGUgcXVlIG8gbWFuZXhhZG8gcG9yIGVzdGUgZWxlbWVudG8uIgorCittc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgorbXNnc3RyICJOb24gaGFpIHVuIGPDs2RlYyBkaXNwb8Oxw61iZWwgcXVlIHBvaWRhIG1hbmV4YXIgZXN0ZSB0aXBvIGRlIGZsdXhvLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZWNvZGUgc3RyZWFtLiIKK21zZ3N0ciAiTm9uIGZvaSBwb3PDrWJlbCBkZXNjb2RpZmljYXIgbyBmbHV4by4iCisKK21zZ2lkICJDb3VsZCBub3QgZW5jb2RlIHN0cmVhbS4iCittc2dzdHIgIk5vbiBmb2kgcG9zw61iZWwgY29kaWZpY2FyIG8gZmx1eG8uIgorCittc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIk5vbiBmb2kgcG9zw61iZWwgZGVtdWx0aXBsZXhhciBvIGZsdXhvLiIKKworbXNnaWQgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKK21zZ3N0ciAiTm9uIGZvaSBwb3PDrWJlbCBtdWx0aXBsZXhhciBvIGZsdXhvLiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgaW4gdGhlIHdyb25nIGZvcm1hdC4iCittc2dzdHIgIk8gZmx1eG8gZXN0w6Egbm8gZm9ybWF0byBpbmNvcnJlY3RvLiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBkZWNyeXB0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIgorbXNnc3RyICJPIGZsdXhvIGVzdMOhIGNpZnJhZG8gZSBvIGRlc2NyaWZyYWRvIG5vbiDDqSBwb3PDrWJlbC4iCisKK21zZ2lkICIiCisiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGNhbid0IGJlIGRlY3J5cHRlZCBiZWNhdXNlIG5vIHN1aXRhYmxlIGtleSBoYXMgIgorImJlZW4gc3VwcGxpZWQuIgorbXNnc3RyICIiCisiTyBmbHV4byBlc3TDoSBjaWZyYWRvIGUgbm9uIMOpIHBvc8OtYmVsIGRlc2NpZnJhbG8gcG9ycXVlIG5vbiBzZSBmb3JuZWNldSBhICIKKyJjaGF2ZSBheGVpdGFkYS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzLiIKK21zZ3N0ciAiTm9uIGhhaSB1bmhhIG1lbnNheGUgZGUgZXJybyBwYXJhIG8gZG9taW5pbyAlcy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKK21zZ3N0ciAiTm9uIGhhaSB1bmhhIG1lbnNheGUgZGUgZXJybyBlc3TDoW5kYXIgcGFyIGFvIGRvbWluaW8gJXMgZSBjw7NkaWdvICVkLiIKKworbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKK21zZ3N0ciAiTm9uIMOpIHBvc8OtYmVsIHVzYXIgbyByZWxveG8gc2VsZWNjaW9uYWRvIG5hIGNhbmFsaXphY2nDs24uIgorCittc2dpZCAidGl0bGUiCittc2dzdHIgInTDrXR1bG8iCisKK21zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIgorbXNnc3RyICJ0w610dWxvIHVzYWRvIGRlIGZvcm1hIGNvbcO6biIKKworbXNnaWQgInRpdGxlIHNvcnRuYW1lIgorbXNnc3RyICJub21lIGRlIG9yZGVuYWNpw7NuIGRvIHTDrXR1bG8iCisKK21zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJ0w610dWxvIHVzYWRvIGNvbXVubWVudGUgcGFyYSBwcm9ww7NzaXRvcyBkZSBvcmRlbmFtZW50byIKKworbXNnaWQgImFydGlzdCIKK21zZ3N0ciAiYXJ0aXN0YSIKKworbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAicGVyc29hKHMpIHJlc3BvbnPDoWJlbChlaXMpIGRhIGdyYXZhY2nDs24iCisKK21zZ2lkICJhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgIm5vbWUgZGUgb3JkZW5hY2nDs24gZG8gYXJ0aXN0YSIKKworbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAicGVyc29hKHMpIHJlc3BvbnPDoWJlbChlaXMpIGRhIGdyYXZhY2nDs24gcGFyYSBwcm9ww7NzaXRvcyBkZSBvcmRlbmFtZW50byIKKworbXNnaWQgImFsYnVtIgorbXNnc3RyICLDoWxidW1lIgorCittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiCittc2dzdHIgIm8gw6FsYnVtIHF1ZSBjb250ZW4gZXN0ZXMgZGF0b3MiCisKK21zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKK21zZ3N0ciAibm9tZSBkZSBvcmRlbmFjacOzbiBkbyDDoWxidW1lIgorCittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIm8gw6FsYnVtIHF1ZSBjb250ZW4gZXN0ZXMgZGF0b3MgcGFyYSBwcm9ww7NzaXRvcyBkZSBvcmRlbmFtZW50byIKKworbXNnaWQgImFsYnVtIGFydGlzdCIKK21zZ3N0ciAiYXJ0aXN0YSBkbyDDoWxidW1lIgorCittc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgorbXNnc3RyICJPIGFydGlzdGEgZG8gw6FsYnVtIGVudGVpcm8sIGNvbW8gc2UgZGViZXLDrWEgbW9zdHJhciIKKworbXNnaWQgImFsYnVtIGFydGlzdCBzb3J0bmFtZSIKK21zZ3N0ciAibm9tZSBkZSBvcmRlbmFjacOzbiBkbyBhcnRpc3RhIGRvIMOhbGJ1bWUiCisKK21zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiCittc2dzdHIgIk8gYXJ0aXN0YSBkbyDDoWxidW0gZW50ZWlybywgY29tbyBzZSBkZWJlcsOtYSBvcmRlbmFyIgorCittc2dpZCAiZGF0ZSIKK21zZ3N0ciAiZGF0YSIKKworbXNnaWQgImRhdGUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR0RhdGUgc3RydWN0dXJlKSIKK21zZ3N0ciAiZGF0YSBuYSBxdWUgc2UgY3JlYXJvbiBvcyBkYXRvcyAoY29tbyBlc3RydXR1cmEgR0RhdGUpIgorCittc2dpZCAiZGF0ZXRpbWUiCittc2dzdHIgImRhdGEgZSBob3JhIgorCittc2dpZCAiZGF0ZSBhbmQgdGltZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHc3REYXRlVGltZSBzdHJ1Y3R1cmUpIgorbXNnc3RyICJkYXRhIGUgaG9yYSBuYSBxdWUgc2UgY3JlYXJvbiBvcyBkYXRvcyAoY29tbyBlc3RydXR1cmEgR3N0RGF0ZVRpbWUpIgorCittc2dpZCAiZ2VucmUiCittc2dzdHIgInjDqW5lcm8iCisKK21zZ2lkICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKK21zZ3N0ciAieMOpbmVybyBhbyBxdWUgcGVydGVuY2VuIGVzdGVzIGRhdG9zIgorCittc2dpZCAiY29tbWVudCIKK21zZ3N0ciAiY29tZW50YXJpbyIKKworbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIgorbXNnc3RyICJjb21lbnRhcmlvIGRlIHRleHRvIHNvYnJlIG9zIGRhdG9zIgorCittc2dpZCAiZXh0ZW5kZWQgY29tbWVudCIKK21zZ3N0ciAiY29tZW50YXJpbyBlc3RlbmRpZG8iCisKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCittc2dzdHIgIiIKKyJ0ZXh0byBsaWJyZSBjb21lbnRhbmRvIG9zIGRhdG9zIGNvbW8ga2V5PXZhbG9yIG91IGtleVtnbF09Zm9ybXVsYXJpbyBkZSAiCisiY29tZW50YXJpbyIKKworbXNnaWQgInRyYWNrIG51bWJlciIKK21zZ3N0ciAibsO6bWVybyBkZSBwaXN0YSIKKworbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICJuw7ptZXJvIGRlIHBpc3RhIG51bmhhIGNvbGVjY2nDs24iCisKK21zZ2lkICJ0cmFjayBjb3VudCIKK21zZ3N0ciAibsO6bWVybyBkZSBwaXN0YXMiCisKK21zZ2lkICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgorbXNnc3RyICJuw7ptZXJvIGRlIHBpc3RhcyBuYSBjb2xlY2Npw7NuIMOhIHF1ZSBwZXJ0ZW5jZSBhIHBpc3RhIgorCittc2dpZCAiZGlzYyBudW1iZXIiCittc2dzdHIgIm7Dum1lcm8gZGUgZGlzY28iCisKK21zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICJuw7ptZXJvIGRvIGRpc2NvIGRlbnRybyBkdW5oYSBjb2xlY2Npw7NuIgorCittc2dpZCAiZGlzYyBjb3VudCIKK21zZ3N0ciAibsO6bWVybyBkZSBkaXNjb3MiCisKK21zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKK21zZ3N0ciAibsO6bWVybyBkZSBkaXNjb3MgbmEgY29sZWNjacOzbiDDoSBxdWUgcGVydGVuY2UgbyBkaXNjbyIKKworbXNnaWQgImxvY2F0aW9uIgorbXNnc3RyICJsb2NhbGl6YWNpw7NuIgorCittc2dpZCAiIgorIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgorImlzIGhvc3RlZCkiCittc2dzdHIgIiIKKyJPcml4ZSBkbyBtZWRpbyBjb21vIHVuIFVSSSAobG9jYWxpemFjacOzbiwgb25kZSBlc3TDoSBhbG94YWRvIG8gZmljaGVpcm8gb3UgIgorImZsdXhvIG9yaXhpbmFsKSIKKworbXNnaWQgImhvbWVwYWdlIgorbXNnc3RyICJzaXRpbyB3ZWIiCisKK21zZ2lkICJIb21lcGFnZSBmb3IgdGhpcyBtZWRpYSAoaS5lLiBhcnRpc3Qgb3IgbW92aWUgaG9tZXBhZ2UpIgorbXNnc3RyICIiCisiUMOheGluYSBwcmluY2lwYWwgcGFyYSBlc3RlIG1lZGlvIChwLmV4LiBww6F4aW5hIHByaW5jaXBhbCBkbyBhcnRpc3RhIG91IGZpbG1lKSIKKworbXNnaWQgImRlc2NyaXB0aW9uIgorbXNnc3RyICJkZXNjcmljacOzbiIKKworbXNnaWQgInNob3J0IHRleHQgZGVzY3JpYmluZyB0aGUgY29udGVudCBvZiB0aGUgZGF0YSIKK21zZ3N0ciAidGV4dG8gY3VydG8gZGVzY3JpYmluZG8gbyBjb250aWRvIGRvcyBkYXRvcyIKKworbXNnaWQgInZlcnNpb24iCittc2dzdHIgInZlcnNpw7NuIgorCittc2dpZCAidmVyc2lvbiBvZiB0aGlzIGRhdGEiCittc2dzdHIgInZlcnNpw7NuIGRlc3RlcyBkYXRvcyIKKworbXNnaWQgIklTUkMiCittc2dzdHIgIklTUkMiCisKK21zZ2lkICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCittc2dzdHIgIiIKKyJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlOyBjb25zdWx0ZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgorCittc2dpZCAib3JnYW5pemF0aW9uIgorbXNnc3RyICJvcmdhbml6YWNpw7NuIgorCittc2dpZCAiY29weXJpZ2h0IgorbXNnc3RyICJjb3B5cmlnaHQiCisKK21zZ2lkICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJub3RhIGRlIGRlcmVpdG9zIGRlIGF1dG9yw61hIGRvcyBkYXRvcyIKKworbXNnaWQgImNvcHlyaWdodCB1cmkiCittc2dzdHIgIlVSSSBhb3MgZGVyZWl0b3MgZGUgYXV0b3IiCisKK21zZ2lkICJVUkkgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgIlVSSSDDoSBub3RhIGRlIGRlcmVpdG9zIGRlIGF1dG9yw61hIGRvcyBkYXRvcyIKKworbXNnaWQgImVuY29kZWQgYnkiCittc2dzdHIgImNvZGlmaWNhZG8gcG9yIgorCittc2dpZCAibmFtZSBvZiB0aGUgZW5jb2RpbmcgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiIKK21zZ3N0ciAibm9tZSBkYSBwZXJzb2Egb3Ugb3JnYW5pemFjacOzbiBjb2RpZmljYWRvcmEiCisKK21zZ2lkICJjb250YWN0IgorbXNnc3RyICJjb250YWN0byIKKworbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCittc2dzdHIgImluZm9ybWFjacOzbiBkZSBjb250YWN0byIKKworbXNnaWQgImxpY2Vuc2UiCittc2dzdHIgImxpY2VuemEiCisKK21zZ2lkICJsaWNlbnNlIG9mIGRhdGEiCittc2dzdHIgImxpY2VuemEgZG9zIGRhdG9zIgorCittc2dpZCAibGljZW5zZSB1cmkiCittc2dzdHIgIlVSSSDDoSBsaWNlbnphIgorCittc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJVUkkgw6EgbGljZW56YSBkb3MgZGF0b3MiCisKK21zZ2lkICJwZXJmb3JtZXIiCittc2dzdHIgImludMOpcnByZXRlIgorCittc2dpZCAicGVyc29uKHMpIHBlcmZvcm1pbmciCittc2dzdHIgInBlcnNvYShzKSBpbnRlcnByZXRhbmRvIgorCittc2dpZCAiY29tcG9zZXIiCittc2dzdHIgImNvbXBvc2l0b3IiCisKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciCittc2dzdHIgInBlcnNvYShzKSBxdWUgY29tcHV4ZXJvbiBhIGdyYXZhY2nDs24iCisKK21zZ2lkICJkdXJhdGlvbiIKK21zZ3N0ciAiZHVyYWNpw7NuIgorCittc2dpZCAibGVuZ3RoIGluIEdTdHJlYW1lciB0aW1lIHVuaXRzIChuYW5vc2Vjb25kcykiCittc2dzdHIgImR1cmFjacOzbiBlbiB1bmlkYWRlcyBkZSB0ZW1wbyBHU3RyZWFtZXIgKG5hbm9zZWd1bmRvcykiCisKK21zZ2lkICJjb2RlYyIKK21zZ3N0ciAiY8OzZGVjIgorCittc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJjw7NkZWMgbm8gcXVlIHNlIGFsbWFjZW5hbiBvcyBkYXRvcyIKKworbXNnaWQgInZpZGVvIGNvZGVjIgorbXNnc3RyICJjw7NkZWMgZGUgdsOtZGVvIgorCittc2dpZCAiY29kZWMgdGhlIHZpZGVvIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJjw7NkZWMgbm8gcXVlIHNlIGFsbWFjZW5hbiBvcyBkYXRvcyBkbyB2w61kZW8iCisKK21zZ2lkICJhdWRpbyBjb2RlYyIKK21zZ3N0ciAiY8OzZGVjIGRlIHNvbiIKKworbXNnaWQgImNvZGVjIHRoZSBhdWRpbyBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiY8OzZGVjIG5vIHF1ZSBzZSBhbG1hY2VuYW4gb3MgZGF0b3MgZG8gc29uIgorCittc2dpZCAic3VidGl0bGUgY29kZWMiCittc2dzdHIgImPDs2RlYyBkbyBzdWJ0aXR1bG8iCisKK21zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImPDs2RlYyBubyBxdWUgc2UgYWxtYWNlbmFuIG9zIGRhdG9zIGRvcyBzdWJ0w610dWxvcyIKKworbXNnaWQgImNvbnRhaW5lciBmb3JtYXQiCittc2dzdHIgImZvcm1hdG8gZG8gY29udGVkb3IiCisKK21zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiZm9ybWF0byBkbyBjb250ZWRvciBubyBxdWUgc2UgYWxtYWNlbmFuIG9zIGRhdG9zIgorCittc2dpZCAiYml0cmF0ZSIKK21zZ3N0ciAidGF4YSBkZSBiaXRzIgorCittc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAidGF4YSBkZSBiaXRzIGV4YWN0YSBvdSBwcm9tZWRpbyBlbiBiaXRzL3MiCisKK21zZ2lkICJub21pbmFsIGJpdHJhdGUiCittc2dzdHIgInRheGEgZGUgYml0cyBub21pbmFsIgorCittc2dpZCAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAidGF4YSBkZSBiaXRzIG5vbWluYWwgZW4gYml0cy9zIgorCittc2dpZCAibWluaW11bSBiaXRyYXRlIgorbXNnc3RyICJ0YXhhIGRlIGJpdHMgbcOtbmltYSIKKworbXNnaWQgIm1pbmltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgInRheGEgbcOtbmltYSBkZSBiaXRzIGVuIGJpdHMvcyIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSIKK21zZ3N0ciAidGF4YSBkZSBiaXRzIG3DoXhpbWEiCisKK21zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJ0YXhhIG3DoXhpbWEgZGUgYml0cyBlbiBiaXRzL3MiCisKK21zZ2lkICJlbmNvZGVyIgorbXNnc3RyICJjb2RpZmljYWRvciIKKworbXNnaWQgImVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCittc2dzdHIgImNvZGlmaWNhZG9yIHVzYWRvIHBhcmEgY29kaWZpY2FyIGVzdGUgZmx1eG8iCisKK21zZ2lkICJlbmNvZGVyIHZlcnNpb24iCittc2dzdHIgInZlcnNpw7NuIGRvIGNvZGlmaWNhZG9yIgorCittc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAidmVyc2nDs24gZG8gY29kaWZpY2Fkb3IgdXNhZG8gcGFyYSBjb2RpZmljYXIgZXN0ZSBmbHV4byIKKworbXNnaWQgInNlcmlhbCIKK21zZ3N0ciAic2VyaWUiCisKK21zZ2lkICJzZXJpYWwgbnVtYmVyIG9mIHRyYWNrIgorbXNnc3RyICJuw7ptZXJvIGRlIHNlcmllIGRhIHBpc3RhIgorCittc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgorbXNnc3RyICJnYW5hbmNpYSBkYSBwaXN0YSAoUmVwbGF5R2FpbikiCisKK21zZ2lkICJ0cmFjayBnYWluIGluIGRiIgorbXNnc3RyICJnYW5hbmNpYSBkYSBwaXN0YSBlbiBkQiIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgcGVhayIKK21zZ3N0ciAicGljbyBkYSBwaXN0YSAoUmVwbGF5R2FpbikiCisKK21zZ2lkICJwZWFrIG9mIHRoZSB0cmFjayIKK21zZ3N0ciAicGljbyBkYSBwaXN0YSIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKK21zZ3N0ciAiZ2FuYW5jaWEgZG8gw6FsYnVtIChSZXBsYXlHYWluKSIKKworbXNnaWQgImFsYnVtIGdhaW4gaW4gZGIiCittc2dzdHIgImdhbmFuY2lhIGRvIMOhbGJ1bSBlbiBkQiIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKK21zZ3N0ciAicGljbyBkbyDDoWxidW0gKFJlcGxheUdhaW4pIgorCittc2dpZCAicGVhayBvZiB0aGUgYWxidW0iCittc2dzdHIgInBpY28gZG8gw6FsYnVtIgorCittc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCittc2dzdHIgIm5pdmVsIGRlIHJlZmVyZW5jaWEgKFJlcGxheUdhaW4pIgorCittc2dpZCAicmVmZXJlbmNlIGxldmVsIG9mIHRyYWNrIGFuZCBhbGJ1bSBnYWluIHZhbHVlcyIKK21zZ3N0ciAidmFsb3IgZG8gbml2ZWwgZGUgcmVmZXJlbmNpYSBkYSBnYW5hbmNpYSBkYSBwaXN0YSBlIGRvIMOhbGJ1bSIKKworbXNnaWQgImxhbmd1YWdlIGNvZGUiCittc2dzdHIgImPDs2RpZ28gZGUgaWRpb21hIgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIgorbXNnc3RyICJjw7NkaWdvIGRlIGlkaW9tYSBwYXJhIGVzdGUgZmx1eG8sIGF4dXN0w6FuZG9zZSBhIElTTy02MzktMSIKKworbXNnaWQgImltYWdlIgorbXNnc3RyICJpbWF4ZSIKKworbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgImltYXhlIHJlbGFjaW9uYWRhIGNvbiBlc3RlIGZsdXhvIgorCisjLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKK21zZ2lkICJwcmV2aWV3IGltYWdlIgorbXNnc3RyICJwcmV2aXN1YWxpemFyIGltYXhlIgorCittc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICJ2aXN0YSBwcmV2aWEgZGEgaW1heGUgcmVsYWNpb25hZGEgY29uIGVzdGUgZmx1eG8iCisKK21zZ2lkICJhdHRhY2htZW50IgorbXNnc3RyICJhbmV4byIKKworbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgImZpY2hlaXJvIGFuZXhvIGEgZXN0ZSBmbHV4byIKKworbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCittc2dzdHIgImdvbHBlcyBwb3IgbWludXRvIChicG0pIgorCittc2dpZCAibnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8iCittc2dzdHIgIm7Dum1lcm8gZGUgZ29scGVzIHBvciBtaW51dG8gKGJwbSkgbm8gc29uIgorCittc2dpZCAia2V5d29yZHMiCittc2dzdHIgInBhbGFicmFzIGNoYXZlIgorCittc2dpZCAiY29tbWEgc2VwYXJhdGVkIGtleXdvcmRzIGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQiCittc2dzdHIgInBhbGFicmFzIGNsYXZlIHNlcGFyYWRhcyBwb3IgY29tYXMgZGVzY3JpYmluZG8gbyBjb250aWRvIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIG5hbWUiCittc2dzdHIgIm5vbWUgZGEgeGVvbG9jYWxpemFjacOzbiIKKworbXNnaWQgIiIKKyJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgorInByb2R1Y2VkIgorbXNnc3RyICIiCisiZGVzY3JpY2nDs24gZGEgbG9jYWxpemFjacOzbiBlbnRlbmTDrWJlbCBwb3IgaHVtYW5vcyBkZSBvbmRlIGZvaSBncmF2YWRvIG91ICIKKyJwcm9kdWNpZG8gbyBtZWRpbyIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBsYXRpdHVkZSIKK21zZ3N0ciAibGF0aXR1ZGUgZGEgeGVvbG9jYWxpemFjacOzbiIKKworbXNnaWQgIiIKKyJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCisic291dGhlcm4gbGF0aXR1ZGVzKSIKK21zZ3N0ciAiIgorImxhdGl0dWRlIHhlb2dyw6FmaWNhIG9uZGUgZm9pIGdyYXZhZG8gb3UgcHJvZHVjaWRvIG8gbWVkaW8sIGVuIGdyYW9zIGNvbmZvcm1lICIKKyJhIFdHUzg0IChjZXJvIMOpIG8gZWN1YWRvciwgdmFsb3JlcyBuZWdhdGl2b3MgcGFyYSBsYXRpdHVkZXMgbWVyaWRpb25haXMpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKK21zZ3N0ciAibG9ueGl0dWRlIGRhIHhlb2xvY2FsaXphY2nDs24iCisKK21zZ2lkICIiCisiZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCisibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgorbXNnc3RyICIiCisibG9ueGl0dWRlIHhlb2dyw6FmaWNhIG9uZGUgZm9pIGdyYXZhZG8gb3UgcHJvZHVjaWRvIG8gbWVkaW8sIGVuIGdyYW9zICIKKyJjb25mb3JtZSBhIFdHUzg0IChjZXJvIMOpIG8gcHJpbWVpcm8gbWVyaWRpYW5vIGVuIEdyZWVud2ljaC9HQiwgdmFsb3JlcyAiCisibmVnYXRpdm9zIHBhcmEgbG9ueGl0dWRlcyBvY2NpZGVudGFpcykiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gZWxldmF0aW9uIgorbXNnc3RyICJlbGV2YWNpw7NuIGRhIHhlb2xvY2FsaXphY2nDs24iCisKK21zZ2lkICIiCisiZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKKyJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgorbXNnc3RyICIiCisiZWxldmFjacOzbiB4ZW9ncsOhZmljYSBvbmRlIGZvaSBncmF2YWRvIG91IHByb2R1Y2lkbyBvIG1lZGlvLCBlbiBncmFvcyAiCisiY29uZm9ybWUgYSBXR1M4NCAoY2VybyDDqSBvIG5pdmVsIG1lZGlvIGRvIG1hcikiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gY291bnRyeSIKK21zZ3N0ciAicGHDrXMgZGEgeGVvbG9jYWxpemFjacOzbiIKKworbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICJwYcOtcyAobm9tZSBlbiBpbmdsw6lzKSBvbmRlIGZvaSBncmF2YWRvIG91IHByb2R1Y2lkbyBvIG1lZGlvIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCittc2dzdHIgImNpZGFkZSBkYSB4ZW9sb2NhbGl6YWNpw7NuIgorCittc2dpZCAiY2l0eSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCittc2dzdHIgImNpZGFkZSAobm9tZSBlbiBpbmdsw6lzKSBvbmRlIGZvaSBncmF2YWRvIG91IHByb2R1Y2lkbyBvIG1lZGlvIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIHN1YmxvY2F0aW9uIgorbXNnc3RyICJzdWJsb2NhbGl6YWNpw7NuIGRhIHhlb2xvY2FsaXphY2nDs24iCisKK21zZ2lkICIiCisiYSBsb2NhdGlvbiB3aGl0aGluIGEgY2l0eSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgb3IgY3JlYXRlZCAoZS5nLiAiCisidGhlIG5laWdoYm9yaG9vZCkiCittc2dzdHIgIiIKKyJ1bmhhIGxvY2FsaXphY2nDs24gbnVuaGEgY2lkYWRlIG9uZGUgZm9pIGdyYXZhZG8gb3UgcHJvZHVjaWRvIG8gbWVkaW8gKHAuZXguICIKKyJvIGJhcnJpbykiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gaG9yaXpvbnRhbCBlcnJvciIKK21zZ3N0ciAiZXJybyBob3Jpem9udGFsIGRlIHhlb2xvY2FsaXphY2nDs24iCisKK21zZ2lkICJleHBlY3RlZCBlcnJvciBvZiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbmluZyBtZWFzdXJlcyAoaW4gbWV0ZXJzKSIKK21zZ3N0ciAiZXJybyBlc3BlcmFkbyBkYXMgbWVkaWRhcyBkZSBwb3NpY2lvbmFtZW50byBob3Jpem9udGFsIChlbiBtZXRyb3MpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgorbXNnc3RyICJ2ZWxvY2lkYWRlIGRlIG1vdmVtZW50byBkYSB4ZW9sb2NhbGl6YWNpw7NuIgorCittc2dpZCAiIgorIm1vdmVtZW50IHNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgaW4gbS9zIgorbXNnc3RyICIiCisidmVsb2NpZGFkZSBkZSBtb3ZlbWVudG8gZG8gZGlzcG9zaXRpdm8gZGUgY2FwdHVyYSBtZW50cmVzIHJlYWxpemEgYSBjYXB0dXJhLCAiCisiZW4gbS9zIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKK21zZ3N0ciAiZGlyZWNjacOzbiBkZSBtb3ZlbWVudG8gZGEgeGVvbG9jYWxpemFjacOzbiIKKworbXNnaWQgIiIKKyJpbmRpY2F0ZXMgdGhlIG1vdmVtZW50IGRpcmVjdGlvbiBvZiB0aGUgZGV2aWNlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgb2YgYSAiCisibWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sIDAgIgorIm1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKK21zZ3N0ciAiIgorImluZGljYSBhIGRpcmVjY2nDs24gZG8gbW92ZW1lbnRvIGRvIGRpc3Bvc2l0aXZvIHF1ZSByZWFsaXphIGEgY2FwdHVyYSBkdW4gIgorIm1lZGlvLiBSZXByZXNlbnRhc2UgZW4gZ3Jhb3Mgb3UgbnVuaGEgcmVwcmVzZW50YWNpw7NuIGVuIGNvbWEgZmxvdGFudGUsIDAgIgorImNvcnJlc3BvbmRlIGFvIG5vcnRlIHhlb2dyw6FmaWNvIGUgaW5jcmVtZW50YSBkZSBmb3JtYSBob3JhcmlhLiIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBjYXB0dXJlIGRpcmVjdGlvbiIKK21zZ3N0ciAiZGlyZWNjacOzbiBkZSBjYXB0dXJhIGRhIHhlb2xvY2FsaXphY2nDs24iCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGRldmljZSBpcyBwb2ludGluZyB0byB3aGVuIGNhcHR1cmluZyAgYSBtZWRpYS4gIgorIkl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIHJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSAiCisiZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKyJpbmRpY2EgYSBkaXJlY2Npw7NuIG5hIHF1ZSBhcHVudGEgbyBkaXNwb3NpdGl2byBxdWUgcmVhbGl6YSBhIGNhcHR1cmEgZHVuICIKKyJtZWRpby4gUmVwcmVzZW50YXNlIGVuIGdyYW9zIG91IG51bmhhIHJlcHJlc2VudGFjacOzbiBlbiBjb21hIGZsb3RhbnRlLCAwICIKKyJjb3JyZXNwb25kZSBhbyBub3J0ZSB4ZW9ncsOhZmljbyBlIGluY3JlbWVudGEgZGUgZm9ybWEgaG9yYXJpYS4iCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZScgaGVyZQorbXNnaWQgInNob3cgbmFtZSIKK21zZ3N0ciAibm9tZSBkbyBwcm9ncmFtYSIKKworbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCittc2dzdHIgIk5vbWUgZG8gcHJvZ3JhbWEvcG9kY2FzdC9zZXJpZSIKKworIy4gVFJBTlNMQVRPUlM6ICdzaG93IHNvcnRuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZSBhcyB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzJyBoZXJlCittc2dpZCAic2hvdyBzb3J0bmFtZSIKK21zZ3N0ciAibm9tZSBkZSBvcmRlbmFjacOzbiBkbyBwcm9ncmFtYSIKKworbXNnaWQgIiIKKyJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiTm9tZSBkbyBwcm9ncmFtYS9wb2RjYXN0L3NlcmllLCBwYXJhIHByb3DDs3NpdG9zIGRlIG9yZGVuYWNpw7NuIgorCittc2dpZCAiZXBpc29kZSBudW1iZXIiCittc2dzdHIgIm7Dum1lcm8gZGUgZXBpc29kaW8iCisKK21zZ2lkICJUaGUgZXBpc29kZSBudW1iZXIgaW4gdGhlIHNlYXNvbiB0aGUgbWVkaWEgaXMgcGFydCBvZiIKK21zZ3N0ciAiTyBuw7ptZXJvIGRvIGNhcMOtdHVsbyBuYSB0ZW1wYWRhIgorCittc2dpZCAic2Vhc29uIG51bWJlciIKK21zZ3N0ciAibsO6bWVybyBkZSB0ZW1wYWRhIgorCittc2dpZCAiVGhlIHNlYXNvbiBudW1iZXIgb2YgdGhlIHNob3cgdGhlIG1lZGlhIGlzIHBhcnQgb2YiCittc2dzdHIgIk8gbsO6bWVybyBkZSB0ZW1wYWRhIGRvIHByb2dyYW1hIgorCittc2dpZCAibHlyaWNzIgorbXNnc3RyICJsZXRyYXMiCisKK21zZ2lkICJUaGUgbHlyaWNzIG9mIHRoZSBtZWRpYSwgY29tbW9ubHkgdXNlZCBmb3Igc29uZ3MiCittc2dzdHIgIkFzIGxldHJhcyBkbyBmaWNoZWlybyBtdWx0aW1lZGlhLCB4ZXJhbG1lbnRlIHVzYWRvIHBhcmEgY2FuY2nDs25zIgorCittc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCittc2dzdHIgIm5vbWUgY3VydG8gZG8gY29tcG9zaXRvciIKKworbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZywgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgInBlc29hKHMpIHF1ZSBjb21wdXhlcm9uIGEgZ3JhdmFjacOzbiwgcGFyYSBwcm9ww7NzaXRvcyBkZSBvcmRlbmFtZW50byIKKworbXNnaWQgImdyb3VwaW5nIgorbXNnc3RyICJhZ3J1cGFjacOzbiIKKworbXNnaWQgIiIKKyJHcm91cHMgcmVsYXRlZCBtZWRpYSB0aGF0IHNwYW5zIG11bHRpcGxlIHRyYWNrcywgbGlrZSB0aGUgZGlmZmVyZW50IHBpZWNlcyAiCisib2YgYSBjb25jZXJ0by4gSXQgaXMgYSBoaWdoZXIgbGV2ZWwgdGhhbiBhIHRyYWNrLCBidXQgbG93ZXIgdGhhbiBhbiBhbGJ1bSIKK21zZ3N0ciAiIgorIkFncnVwYSB0ZW1hcyByZWxhY2lvbmFkb3MgcXVlIHNlIGV4cGFuZGVuIHZhcmlhcyBwaXN0YXMsIGNvbW8gYXMgZGlmZXJlbnRlcyAiCisicGFydGVzIGR1biBjb25jZXJ0by4gw4kgdW4gbml2ZWwgbcOhaXMgYWx0byBxdWUgbyBkdW5oYSBwaXN0YSwgcGVybyBtw6FpcyBiYWl4byAiCisicXVlIG8gZHVuIMOhbGJ1bS4iCisKK21zZ2lkICJ1c2VyIHJhdGluZyIKK21zZ3N0ciAicHVudHVhY2nDs24gZG8gdXN1YXJpbyIKKworbXNnaWQgIiIKKyJSYXRpbmcgYXR0cmlidXRlZCBieSBhIHVzZXIuIFRoZSBoaWdoZXIgdGhlIHJhbmssIHRoZSBtb3JlIHRoZSB1c2VyIGxpa2VzICIKKyJ0aGlzIG1lZGlhIgorbXNnc3RyICIiCisiUHVudHVhY2nDs24gYXRyaWJ1w61kYSBwb3IgdW4gdXN1YXJpby4gQ2FudG8gbWFpb3Igc2V4YSBhIHB1bnR1YWNpw7NuIG1haXMgbGxlICIKKyJndXN0YXLDoSBhbyB1c3VhcmlvLiIKKworbXNnaWQgImRldmljZSBtYW51ZmFjdHVyZXIiCittc2dzdHIgImZhYnJpY2FudGUgZG8gZGlzcG9zaXRpdm8iCisKK21zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICJGYWJyaWNhbnRlIGRvIGRpc3Bvc2l0aXZvIHVzYWRvIHBhcmEgY3JlYXIgZXN0ZSBtZWRpbyIKKworbXNnaWQgImRldmljZSBtb2RlbCIKK21zZ3N0ciAibW9kZWxvIGRvIGRpc3Bvc2l0aXZvIgorCittc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICJNb2RlbG8gZG8gZGlzcG9zaXRpdm8gdXNhZG8gcGFyYSBjcmVhciBlc3RlIG1lZGlvIgorCittc2dpZCAiYXBwbGljYXRpb24gbmFtZSIKK21zZ3N0ciAibm9tZSBkbyBhcGxpY2F0aXZvIgorCittc2dpZCAiQXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIgorbXNnc3RyICJBcGxpY2F0aXZvIHVzYWRvIHBhcmEgY3JlYXIgbyBtZWRpbyIKKworbXNnaWQgImFwcGxpY2F0aW9uIGRhdGEiCittc2dzdHIgImRhdG9zIGRvIGFwbGljYXRpdm8iCisKK21zZ2lkICJBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIG1lZGlhIgorbXNnc3RyICJEYXRvcyBhcmJpdHJhcmlvcyBkbyBhcGxpY2F0aXZvIHBhcmEgc2VyaWFsaXphbG9zIG5vIG1lZGlvIgorCittc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCittc2dzdHIgIm9yaWVudGFjacOzbiBkYSBpbWF4ZSIKKworbXNnaWQgIkhvdyB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCBiZWZvcmUgZGlzcGxheSIKK21zZ3N0ciAiQ29tbyBzZSBkZWJlcsOtYSByb3RhciBvdSB2b2x0ZWFyIGEgaW1heGUgYW50ZXMgZGUgbW9zdHJhbGEiCisKK21zZ2lkICIsICIKK21zZ3N0ciAiLCAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAiRVJSTzogZG8gZWxlbWVudG8gJXM6ICVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKKyIlc1xuIgorbXNnc3RyICIiCisiSW5mb3JtYWNpw7NuIGFkaWNpb25hbCBkZSBkZXB1cmFjacOzbjpcbiIKKyIlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgInNwZWNpZmllZCBlbXB0eSBiaW4gXCIlc1wiLCBub3QgYWxsb3dlZCIKK21zZ3N0ciAibyBiaW5hcmlvIGVzcGVjaWZpY2FkbyDCqyVzwrsgZXN0w6EgYmFsZWlybywgbm9uIGVzdMOhIHBlcm1pdGlkbyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBiaW4gXCIlc1wiLCBza2lwcGluZyIKK21zZ3N0ciAibm9uIGV4aXN0ZSBvIGJpbmFyaW8gwqslc8K7LCBvbWl0aW5kbyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCittc2dzdHIgIm5vbiBoYWkgdW5oYSBwcm9waWVkYWRlIMKrJXPCuyBubyBlbGVtZW50byDCqyVzwrsiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgorbXNnc3RyICJub24gZm9pIHBvc8OtYmVsIGVzdGFiZWxlY2VyIGEgcHJvcGllZGFkZSDCqyVzwrsgbm8gZWxlbWVudG8gwqslc8K7IGEgwqslc8K7IgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgorbXNnc3RyICJub24gZm9pIHBvc8OtYmVsIGxpZ2FyICVzIGEgJXMiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCittc2dzdHIgIm5vbiBoYWkgdW4gZWxlbWVudG8gwqslc8K7IgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKK21zZ3N0ciAibm9uIGZvaSBwb3PDrWJlbCBhbmFsaXphciBhcyBjYXBhY2lkYWRlcyDCqyVzwrsiCisKK21zZ2lkICJsaW5rIHdpdGhvdXQgc291cmNlIGVsZW1lbnQiCittc2dzdHIgImxpZ2F6w7NuIHNlbiBlbGVtZW50byBvcml4ZSIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzaW5rIGVsZW1lbnQiCittc2dzdHIgImxpZ2F6w7NuIHNlbiBlbGVtZW50byBzdW1pZG9pcm8iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgIm5vbiBleGlzdGUgdW4gZWxlbWVudG8gb3JpeGUgcGFyYSBvIFVSSSDCqyVzwrsiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCB0byBsaW5rIFVSSSBcIiVzXCIgdG8iCittc2dzdHIgIm5vbiBleGlzdGUgdW4gZWxlbWVudG8gY28gcXVlIGxpZ2FyIG8gVVJJIMKrJXPCuyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgIm5vbiBleGlzdGUgbyBlbGVtZW50byBzdW1pZG9pcm8gcGFyYSBvIFVSSSDCqyVzwrsiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxpbmsgc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJub24gZm9pIHBvc8OtYmVsIGxpZ2FyIG8gZWxlbWVudG8gc3VtaWRvaXJvIHBhcmEgbyBVUkkgwqslc8K7IgorCittc2dpZCAiZW1wdHkgcGlwZWxpbmUgbm90IGFsbG93ZWQiCittc2dzdHIgIm5vbiBzZSBwZXJtaXRlIHVuaGEgY2FuYWxpemFjacOzbiBiYWxlaXJhIgorCittc2dpZCAiSW50ZXJuYWwgY2xvY2sgZXJyb3IuIgorbXNnc3RyICJQcm9kdWNpdXNlIHVuIGVycm8gbm8gcmVsb3hvIGludGVybm8uIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKK21zZ3N0ciAiUHJvZHVjaXVzZSB1biBlcnJvIG5vIGZsdXhvIGludGVybm8gZGUgZGF0b3MuIgorCittc2dpZCAiQSBsb3Qgb2YgYnVmZmVycyBhcmUgYmVpbmcgZHJvcHBlZC4iCittc2dzdHIgIkVzdGFuc2UgYSBkZXNib3RhciBtb2l0b3MgYsO6ZmVyZXMuIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IHByb2JsZW0uIgorbXNnc3RyICJIYWkgdW4gcHJvYmxlbWEgbm8gZmx1eG8gaW50ZXJubyBkZSBkYXRvcy4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCittc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBubyBmbHV4byBpbnRlcm5vIGRlIGRhdG9zLiIKKworbXNnaWQgIkZpbHRlciBjYXBzIgorbXNnc3RyICJGaWx0cm8gZGUgY2FwYWNpZGFkZXMiCisKK21zZ2lkICIiCisiUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCisicHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKK21zZ3N0ciAiIgorIlJlc3RyaW54aXIgYXMgcG9zw61iZWlzIGNhcGFjaWRhZGVzIHBlcm1pdGlkYXMgKE5VTEwgc2lnbmlmaWNhIENBTFFVRVJBKS4gQW8gIgorImVzdGFiZWxlY2VyIGVzdGEgcHJvcGllZGFkZSBvYnRlbnNlIHVuaGEgcmVmZXJlbmNpYSBkbyBvYnhlY3RvIEdzdENhcHMgIgorImZvcm5lY2lkby4iCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiTm9uIHNlIGVzcGVjaWZpY291IHVuIG5vbWUgZGUgZmljaGVpcm8gcGFyYSBlc2NyaXR1cmEuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiTm9uIGZvaSBwb3PDrWJlbCBhYnJpciDCqyVzwrsgcGFyYSBlc2NyaWJpci4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCittc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBhbyBwZWNoYXIgbyBmaWNoZWlybyDCqyVzwrsuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIgorbXNnc3RyICJQcm9kdWNpdXNlIHVuIGVycm8gYW8gYnVzY2FyIG5vIGZpY2hlaXJvIMKrJXPCuy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIFwiJXNcIi4iCittc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBhbyBlc2NyaWJpciBubyBmaWNoZWlybyDCqyVzwrsuIgorCittc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCittc2dzdHIgIk5vbiBzZSBlc3BlY2lmaWNvdSB1biBub21lIGRlIGZpY2hlaXJvIHBhcmEgYSBsZWN0dXJhLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCittc2dzdHIgIk5vbiBmb2kgcG9zw61iZWwgYWJyaXIgbyBmaWNoZWlybyDCqyVzwrsgcGFyYSBsZXIuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgaW5mbyBvbiBcIiVzXCIuIgorbXNnc3RyICJOb24gZm9pIHBvc8OtYmVsIG9idGVyIGEgaW5mb3JtYWNpw7NuIGRlIMKrJXPCuy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiXCIlc1wiIGlzIGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiwqslc8K7IMOpIHVuIGRpcmVjdG9yaW8uIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKK21zZ3N0ciAiTyBmaWNoZWlybyDCqyVzwrsgw6kgdW4gc29ja2V0LiIKKworbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCittc2dzdHIgIlByb2R1Y2l1c2UgdW4gZmFsbG8gZGVzcG9pcyBkYXMgaXRlcmFjacOzbnMgcXVlIHNlIHNvbGljaXRhcm9uLiIKKworbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCittc2dzdHIgIk5vbiBzZSBlc3BlY2lmaWNvdSB1biBkaXJlY3RvcmlvIHRlbXBvcmFsLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIgorbXNnc3RyICJOb24gZm9pIHBvc8OtYmVsIGNyZWFyIG8gZmljaGVpcm8gdGVtcG9yYWwgwqslc8K7LiIKKworbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZG93bmxvYWQgZmlsZS4iCittc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBkZSBlc2NyaXR1cmEgYW8gZGVzY2FyZ2FyIG8gZmljaGVpcm8uIgorCittc2dpZCAiY2FwcyIKK21zZ3N0ciAiY2FwYWNpZGFkZXMiCisKK21zZ2lkICJkZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtIgorbXNnc3RyICJjYXBhY2lkYWRlcyBkZXRlY3RhZGFzIG5vIGZsdXhvIgorCittc2dpZCAibWluaW11bSIKK21zZ3N0ciAibcOtbmltbyIKKworbXNnaWQgIm1heGltdW0iCittc2dzdHIgIm3DoXhpbW8iCisKK21zZ2lkICJmb3JjZSBjYXBzIgorbXNnc3RyICJmb3J6YXIgYXMgY2FwYWNpZGFkZXMiCisKK21zZ2lkICJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIKK21zZ3N0ciAiZm9yemFyIGFzIGNhcGFjaWRhZGVzIHNlbiBmYWNlciB1biDCq3R5cGVmaW5kwrsiCisKK21zZ2lkICJTdHJlYW0gY29udGFpbnMgbm8gZGF0YS4iCittc2dzdHIgIk8gZmx1eG8gbm9uIGNvbnTDqW4gZGF0b3MuIgorCittc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKK21zZ3N0ciAiSW50ZXJmYWNlcyBpbXBsZW1lbnRhZGFzOlxuIgorCittc2dpZCAicmVhZGFibGUiCittc2dzdHIgImxleMOtYmVsIgorCittc2dpZCAid3JpdGFibGUiCittc2dzdHIgImVzY3JpYsOtYmVsIgorCittc2dpZCAiY29udHJvbGxhYmxlIgorbXNnc3RyICJjb250cm9sw6FiZWwiCisKK21zZ2lkICJjaGFuZ2VhYmxlIGluIE5VTEwsIFJFQURZLCBQQVVTRUQgb3IgUExBWUlORyBzdGF0ZSIKK21zZ3N0ciAiaW50ZXJjYW1iacOhYmVsIGVudHJlIG9zIGVzdGFkb3MgTlVMTCwgUkVBRFksIFBBVVNFRCBvdSBQTEFZSU5HIgorCittc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwsIFJFQURZIG9yIFBBVVNFRCBzdGF0ZSIKK21zZ3N0ciAiaW50ZXJjYW1iacOhYmVsIHPDsyBlbnRyZSBvcyBlc3RhZG9zIE5VTEwsIFJFQURZIG91IFBBVVNFRCIKKworbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMIG9yIFJFQURZIHN0YXRlIgorbXNnc3RyICJpbnRlcmNhbWJpw6FiZWwgc8OzIGVudHJlIG9zIGVzdGFkb3MgTlVMTCBvdSBSRUFEWSIKKworbXNnaWQgIkJsYWNrbGlzdGVkIGZpbGVzOiIKK21zZ3N0ciAiRmljaGVpcm9zIG5hIGxpc3RhIG5lZ3JhOiIKKworbXNnaWQgIlRvdGFsIGNvdW50OiAiCittc2dzdHIgIkNvbnTDrWEgdG90YWw6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgorbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKK21zZ3N0clswXSAiJWQgZmljaGVpcm8gbmEgbGlzdGEgbmVncmEiCittc2dzdHJbMV0gIiVkIGZpY2hlaXJvcyBuYSBsaXN0YSBuZWdyYSIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBwbHVnaW4iCittc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCittc2dzdHJbMF0gIiVkIGVuZ2FkaWRvIgorbXNnc3RyWzFdICIlZCBlbmdhZGlkb3MiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgorbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKK21zZ3N0clswXSAiJWQgZW50cmFkYSBuYSBsaXN0YSBuZWdyYSIKK21zZ3N0clsxXSAiJWQgZW50cmFkYXMgbmEgbGlzdGEgbmVncmEiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgZmVhdHVyZSIKK21zZ2lkX3BsdXJhbCAiJWQgZmVhdHVyZXMiCittc2dzdHJbMF0gIiVkIGNhcmFjdGVyw61zdGljYSIKK21zZ3N0clsxXSAiJWQgY2FyYWN0ZXLDrXN0aWNhcyIKKworbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKK21zZ3N0ciAiSW1wcmltaXIgdG9kb3Mgb3MgZWxlbWVudG9zIgorCittc2dpZCAiUHJpbnQgbGlzdCBvZiBibGFja2xpc3RlZCBmaWxlcyIKK21zZ3N0ciAiSW1wcmltaXIgbGlzdGEgZG9zIGZpY2hlaXJvcyBuYSBsaXN0YSBuZWdyYSIKKworbXNnaWQgIiIKKyJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgorInBsdWdpbnMgcHJvdmlkZS5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKKyJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgorbXNnc3RyICIiCisiSW1wcmltaXIgdW5oYSBsaXN0YSBkZSBjYXJhY3RlcsOtc3RpY2FzIGFuYWxpesOhYmVpcyBwb3IgdW5oYSBtw6FxdWluYSBkbyAiCisiZW5nYWRpZG8gZXNwZWNpZmljYWRvIG91IGZvcm5lY2VyIHRvZG9zIG9zIGVuZ2FkaWRvcy5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDDmnRpbCB4dW50byBjb24gbWVjYW5pc21vcyBkZSAiCisiaW5zdGFsYWNpw7NuIGV4dGVybmEgYXV0b23DoXRpY2EgZGUgZW5nYWRpZG9zLiIKKworbXNnaWQgIkxpc3QgdGhlIHBsdWdpbiBjb250ZW50cyIKK21zZ3N0ciAiTGlzdGFyIG8gY29udGlkbyBkbyBlbmdhZGlkbyIKKworbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKK21zZ3N0ciAiSW1wcmltaXIgb3MgZXNxdWVtYXMgVVJJIGFkbWl0aWRvcywgY29zIGVsZW1lbnRvcyBxdWUgb3MgaW1wbGVtZW50YW4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGxvYWQgcGx1Z2luIGZpbGU6ICVzXG4iCittc2dzdHIgIk5vbiBmb2kgcG9zw61iZWwgY2FyZ2FyIG8gZmljaGVpcm8gZG8gZW5nYWRpZG86ICVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iCittc2dzdHIgIk5vbiBleGlzdGUgbyBlbGVtZW50byBvdSBlbmdhZGlkbyDCqyVzwrtcbiIKKworbXNnaWQgIkluZGV4IHN0YXRpc3RpY3MiCittc2dzdHIgIkVzdGF0w61zdGljYXMgZG8gw61uZGljZSIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBlbGVtZW50IFwiJXNcIiAoJXMpOiAiCittc2dzdHIgIk9idMOtdm9zZSBhIG1lbnNheGUgbsK6ICV1IGRvIGVsZW1lbnRvIMKrJXPCuyAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCittc2dzdHIgIk9idMOtdm9zZSBhIG1lbnNheGUgbsK6ICV1IGRhIGNlbGEgwqslczolc8K7ICglcyk6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAiT2J0w612b3NlIGEgbWVuc2F4ZSBuwrogJXUgZG8gb2J4ZWN0byDCqyVzwrsgKCVzKTogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSAoJXMpOiAiCittc2dzdHIgIk9idMOtdm9zZSBhIG1lbnNheGUgbnVtLiAldSAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIgorbXNnc3RyICJPYnTDrXZvc2UgdW4gRU9TIGRvIGVsZW1lbnRvIMKrJXPCuy5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgorbXNnc3RyICJBVE9QQURBIEVUSVFVRVRBICAgICAgOiBhdG9wYWRhIHBvbG8gZWxlbWVudG8gwqslc8K7LlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgcGFkIFwiJXM6JXNcIi5cbiIKK21zZ3N0ciAiQVRPUEFEQSBFVElRVUVUQSAgICAgIDogYXRvcGFkYSBwb2xhIGNlbGEgwqslczolc8K7LlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKK21zZ3N0ciAiRVRJUVVFVEEgRU5DT05UUkFEQSAgICAgIDogZW5jb250cmFkYSBwb2xvIG9ieGVjdG8gwqslc8K7LlxuIgorCittc2dpZCAiRk9VTkQgVEFHXG4iCittc2dzdHIgIkVUSVFVRVRBIEVOQ09OVFJBREFcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSU5GTzpcbiIKKyIlc1xuIgorbXNnc3RyICIiCisiSU5GT1JNQUNJw5NOOlxuIgorIiVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgorbXNnc3RyICJBVklTTzogZG8gZWxlbWVudG8gJXM6ICVzXG4iCisKK21zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIGJ1ZmZlcmluZyB0byBmaW5pc2guLi5cbiIKK21zZ3N0ciAiUHJlcGFyYWRvLCBhZ2FyZGFuZG8gYSBlbmNoZXIgbyBiw7pmZXIgcGFyYSByZW1hdGFy4oCmXG4iCisKK21zZ2lkICJidWZmZXJpbmcuLi4iCittc2dzdHIgImFsbWFjZW5hbmRvIG5vIGLDumZlcuKApiIKKworbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIiIKKyJSZW1hdG91c2UgZGUgYWxtYWNlbmFyIG5vIGLDumZlciwgZXN0YWJlbGVjZW5kbyBhIGNhbmFsaXphY2nDs24gcGFyYSAiCisiUkVQUk9EVUNJUi4uLlxuIgorCittc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAiQWxtYWNlbmFuZG8gbm8gYsO6ZmVyLCBlc3RhYmVsZWNlbmRvIGEgY2FuYWxpemFjacOzbiBhIFBBVVNBREEuLi5cbiIKKworbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCittc2dzdHIgIlJlZGlzdHJpYnXDrXIgbGF0ZW5jaWEuLi5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgorbXNnc3RyICJFc3RhYmVsZWNlbmRvIG8gZXN0YWRvIGEgJXMgc2VndW5kbyBmb2kgc29saWNpdGFkbyBwb3IgJXMuLi5cbiIKKworbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCittc2dzdHIgIkludGVycm9tcGVyOiBwYXJhbmRvIGEgY2FuYWxpemFjacOzbiDigKZcbiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBlbGVtZW50OiAlc1xuIgorbXNnc3RyICJub24gaGFpIHVuIGVsZW1lbnRvIMKrJXPCuyIKKworbXNnaWQgIk91dHB1dCB0YWdzIChhbHNvIGtub3duIGFzIG1ldGFkYXRhKSIKK21zZ3N0ciAiRXRpcXVldGFzIGRlIHNhw61kYSAodGFtw6luIGNvw7FlY2lkbyBjb21vIG1ldGFkYXRvcykiCisKK21zZ2lkICJPdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBwcm9wZXJ0eSBub3RpZmljYXRpb25zIgorbXNnc3RyICJJbmZvcm1hY2nDs24gZG8gZXN0YWRvIGRhIHNhw61kYSBlIG5vdGlmaWNhY2nDs25zIGRhcyBwcm9waWVkYWRlcyIKKworbXNnaWQgIkRvIG5vdCBwcmludCBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24iCittc2dzdHIgIk5vbiBtb3N0cmFyIG5pbmd1bmhhIGluZm9ybWFjacOzbiBkZSBwcm9ncmVzbyIKKworbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKK21zZ3N0ciAiTWVuc2F4ZXMgZGUgc2HDrWRhIgorCittc2dpZCAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKK21zZ3N0ciAiTm9uIHNhY2FyIGEgc2HDrWRhIGRhIGluZm9ybWFjacOzbiBkZSBlc3RhZG8gZG8gVElQTyIKKworbXNnaWQgIlRZUEUxLFRZUEUyLC4uLiIKK21zZ3N0ciAiVElQTzEsVElQTzIs4oCmIgorCittc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgorbXNnc3RyICJOb24gaW5zdGFsYXIgdW4gbWFuZXhhZG9yIHByZWRldGVybWluYWRvIgorCittc2dpZCAiUHJpbnQgYWxsb2MgdHJhY2UgKGlmIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lKSIKK21zZ3N0ciAiSW1wcmltaXIgYSB0cmF6YSBkZSBhc2lnbmFjacOzbnMgKHNlIGZvaSBhY3RpdmFkYSBhbyBjb21waWxhcikiCisKK21zZ2lkICJGb3JjZSBFT1Mgb24gc291cmNlcyBiZWZvcmUgc2h1dHRpbmcgdGhlIHBpcGVsaW5lIGRvd24iCittc2dzdHIgIkZvcnphciBFT1MgbmFzIG9yaXhlcyBhbnRlcyBkZSBwZWNoYXIgYSBjYW5hbGl6YWNpw7NuIgorCittc2dpZCAiR2F0aGVyIGFuZCBwcmludCBpbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICJPYnRlciBlIGltcHJpbWlyIGFzIGVzdGF0w61zdGljYXMgZG8gw61uZGljZSIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKK21zZ3N0ciAiRVJSTzogbm9uIGZvaSBwb3PDrWJlbCBjb25zdHJ1w61yIGEgY2FuYWxpemFjacOzbjogJXMuXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlxuIgorbXNnc3RyICJFUlJPOiBub24gZm9pIHBvc8OtYmVsIGNvbnN0cnXDrXIgYSBjYW5hbGl6YWNpw7NuLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGVycm9uZW91cyBwaXBlbGluZTogJXNcbiIKK21zZ3N0ciAiQVZJU086IGNhbmFsaXphY2nDs24gZXJyw7NuZWE6ICVzXG4iCisKK21zZ2lkICJFUlJPUjogdGhlICdwaXBlbGluZScgZWxlbWVudCB3YXNuJ3QgZm91bmQuXG4iCittc2dzdHIgIkVSUk86IG8gZWxlbWVudG8gwqtjYW5hbGl6YWNpw7Nuwrsgbm9uIGZvaSBhdG9wYWRvLlxuIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCittc2dzdHIgIkVzdGFiZWxlY2VuZG8gYSB0dWJlcsOtYSBhIFBBVVNBLi4uXG4iCisKK21zZ2lkICJFUlJPUjogUGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBhdXNlLlxuIgorbXNnc3RyICJFUlJPUjogQSB0dWJlcsOtYSBub24gcXVlcmUgcGF1c2Fyc2UuXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCittc2dzdHIgIkEgdHViZXLDrWEgZXN0w6Egdml2YSBlIG5vbiBuZWNlc2l0YSBQUkVQQVJBUlNFLi4uXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMSU5HIC4uLlxuIgorbXNnc3RyICJBIHR1YmVyw61hIGVzdMOhIFBSRVBBUsOBTkRPU0UuLi5cbiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcHJlcm9sbC5cbiIKK21zZ3N0ciAiRVJSTzogYSB0dWJlcsOtYSBub24gcXVlcmUgcHJlcGFyYXJzZS5cbiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExFRCAuLi5cbiIKK21zZ3N0ciAiQSB0dWJlcsOtYSBlc3TDoSBQUkVQQVJBREEuLi5cbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKK21zZ3N0ciAiRXN0YWJlbGVjZW5kbyBhIHR1YmVyw61hIGEgUkVQUk9EVUNJTkRPLlxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIgorbXNnc3RyICJFUlJPOiBhIHR1YmVyw61hIG5vbiBxdWVyZSByZXByb2R1Y2lyc2UuXG4iCisKK21zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKK21zZ3N0ciAiRU9TIGFvIGFwYWdhciBhY3RpdmFkbzsgRm9yemFuZG8gRU9TIG5hIHR1YmVyw61hXG4iCisKK21zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKK21zZ3N0ciAiQWdhcmRhbmRvIHBvbGEgRU9TLi4uXG4iCisKK21zZ2lkICJFT1MgcmVjZWl2ZWQgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgorbXNnc3RyICJFT1MgcmVjaWJpZG86IGRldGVuZG8gYSB0dWJlcsOtYS4uLlxuIgorCittc2dpZCAiQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgd2FpdGluZyBmb3IgRU9TXG4iCittc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBhbyBlc3BlcmFyIGEgRU9TXG4iCisKK21zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKK21zZ3N0ciAiQSBleGVjdWNpw7NuIHJlbWF0b3UgZGVzcG9pcyBkZSAlIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKK21zZ3N0ciAiRXN0YWJlbGVjZW5kbyBhIHR1YmVyw61hIGEgUFJFUEFSQURPLi4uXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIE5VTEwgLi4uXG4iCittc2dzdHIgIkVzdGFiZWxlY2VuZG8gYSB0dWJlcsOtYSBhIE5VTEwuLi5cbiIKKworbXNnaWQgIkZyZWVpbmcgcGlwZWxpbmUgLi4uXG4iCittc2dzdHIgIkxpYmVyYW5kbyBhIHR1YmVyw61hLi4uXG4iCisKKyN+IG1zZ2lkICJVc2FnZTogZ3N0LXhtbGxhdW5jaCA8ZmlsZS54bWw+IFsgZWxlbWVudC5wcm9wZXJ0eT12YWx1ZSAuLi4gXVxuIgorI34gbXNnc3RyICIiCisjfiAiVXNvOiBnc3QteG1sbGF1bmNoIDxmaWNoZWlyby54bWw+IFsgcHJvcGllZGFkZS5kby5lbGVtZW50bz12YWxvciDigKYgXVxuIgorCisjfiBtc2dpZCAiRVJST1I6IHBhcnNlIG9mIHhtbCBmaWxlICclcycgZmFpbGVkLlxuIgorI34gbXNnc3RyICJFUlJPOiBub24gZm9pIHBvc8OtYmVsIGFuYWxpemFyIG8gZmljaGVpcm8geG1sIMKrJXPCuy5cbiIKKworI34gbXNnaWQgIkVSUk9SOiBubyB0b3BsZXZlbCBwaXBlbGluZSBlbGVtZW50IGluIGZpbGUgJyVzJy5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIkVSUk86IG5vbiBleGlzdGUgbyBlbGVtZW50byBkZSBuaXZlbCBzdXBlcmlvciBkYSBjYW5hbGl6YWNpw7NuIG5vIGZpY2hlaXJvICIKKyN+ICLCqyVzwrsuXG4iCisKKyN+IG1zZ2lkICJXQVJOSU5HOiBvbmx5IG9uZSB0b3BsZXZlbCBlbGVtZW50IGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuXG4iCisjfiBtc2dzdHIgIkFWSVNPOiBuZXN0ZSBtb21lbnRvIHPDsyBzZSBhZG1pdGUgdW4gZWxlbWVudG8gZGUgbml2ZWwgc3VwZXJpb3IuXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogY291bGQgbm90IHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAlZDogJXMuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJFUlJPOiBub24gZm9pIHBvc8OtYmVsIGFuYWxpemFyIG8gYXJndW1lbnRvICVkIGRhIGxpw7FhIGRlIG9yZGVzOiAlcy5cbiIKKworI34gbXNnaWQgIldBUk5JTkc6IGVsZW1lbnQgbmFtZWQgJyVzJyBub3QgZm91bmQuXG4iCisjfiBtc2dzdHIgIkFWSVNPOiBub24gc2UgYXRvcG91IG8gZWxlbWVudG8gbm9tZWFkbyDCqyVzwrsuXG4iCisKKyN+IG1zZ2lkICJTYXZlIHhtbCByZXByZXNlbnRhdGlvbiBvZiBwaXBlbGluZSB0byBGSUxFIGFuZCBleGl0IgorI34gbXNnc3RyICJHYXJkYXIgYSByZXByZXNlbnRhY2nDs24geG1sIGRhIGNhbmFsaXphY2nDs24gYSB1biBGSUNIRUlSTyBlIHNhw61yIgorCisjfiBtc2dpZCAiRklMRSIKKyN+IG1zZ3N0ciAiRklDSEVJUk8iCisKKyN+IG1zZ2lkICJEbyBub3QgaW5zdGFsbCBzaWduYWwgaGFuZGxlcnMgZm9yIFNJR1VTUjEgYW5kIFNJR1VTUjIiCisjfiBtc2dzdHIgIk5vbiBpbnN0YWxhciBvcyBtYW5leGFkb3JlcyBkZSBzaW5haXMgcGFyYSBTSUdVU1IxIGUgU0lHVVNSMiIKZGlmZiAtLWdpdCBhL3BvL2dzdHJlYW1lci0wLjExLnBvdCBiL3BvL2dzdHJlYW1lci0wLjExLnBvdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmIzNDM0Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vZ3N0cmVhbWVyLTAuMTEucG90CkBAIC0wLDAgKzEsMTQ4MCBAQAorIyBTT01FIERFU0NSSVBUSVZFIFRJVExFLgorIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgorIyBGSVJTVCBBVVRIT1IgPEVNQUlMQEFERFJFU1M+LCBZRUFSLgorIworIywgZnV6enkKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdzdHJlYW1lciAwLjExLjFcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wOS0yOSAxNDo1NSswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogWUVBUi1NTy1EQSBITzpNSStaT05FXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBGVUxMIE5BTUUgPEVNQUlMQEFERFJFU1M+XG4iCisiTGFuZ3VhZ2UtVGVhbTogTEFOR1VBR0UgPExMQGxpLm9yZz5cbiIKKyJMYW5ndWFnZTogXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9Q0hBUlNFVFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPUlOVEVHRVI7IHBsdXJhbD1FWFBSRVNTSU9OO1xuIgorCisjOiBnc3QvZ3N0LmM6MzEwCittc2dpZCAiUHJpbnQgdGhlIEdTdHJlYW1lciB2ZXJzaW9uIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3QuYzozMTIKK21zZ2lkICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0LmM6MzE2Cittc2dpZCAiUHJpbnQgYXZhaWxhYmxlIGRlYnVnIGNhdGVnb3JpZXMgYW5kIGV4aXQiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdC5jOjMyMAorbXNnaWQgIiIKKyJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gNSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0LmM6MzIyCittc2dpZCAiTEVWRUwiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdC5jOjMyNAorbXNnaWQgIiIKKyJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yICIKKyJ0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdC5jOjMyNworbXNnaWQgIkxJU1QiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdC5jOjMyOQorbXNnaWQgIkRpc2FibGUgY29sb3JlZCBkZWJ1Z2dpbmcgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3QuYzozMzIKK21zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0LmM6MzM2Cittc2dpZCAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdC5jOjM0MAorbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdC5jOjM0MAorbXNnaWQgIlBBVEhTIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3QuYzozNDMKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCisiZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3QuYzozNDUKK21zZ2lkICJQTFVHSU5TIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3QuYzozNDgKK21zZ2lkICJEaXNhYmxlIHRyYXBwaW5nIG9mIHNlZ21lbnRhdGlvbiBmYXVsdHMgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3QuYzozNTMKK21zZ2lkICJEaXNhYmxlIHVwZGF0aW5nIHRoZSByZWdpc3RyeSIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0LmM6MzU4Cittc2dpZCAiRGlzYWJsZSBzcGF3bmluZyBhIGhlbHBlciBwcm9jZXNzIHdoaWxlIHNjYW5uaW5nIHRoZSByZWdpc3RyeSIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0LmM6Mzg1Cittc2dpZCAiR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdC5jOjM4NgorbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdC5jOjk1NgorbXNnaWQgIlVua25vd24gb3B0aW9uIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3RlcnJvci5jOjE0OAorbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgY29yZSBsaWJyYXJ5IGVycm9yLiIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0ZXJyb3IuYzoxNTAgZ3N0L2dzdGVycm9yLmM6MTkyIGdzdC9nc3RlcnJvci5jOjIxNiBnc3QvZ3N0ZXJyb3IuYzoyNTYKK21zZ2lkICIiCisiR1N0cmVhbWVyIGRldmVsb3BlcnMgd2VyZSB0b28gbGF6eSB0byBhc3NpZ24gYW4gZXJyb3IgY29kZSB0byB0aGlzIGVycm9yLiIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0ZXJyb3IuYzoxNTMKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0ZXJyb3IuYzoxNTUKK21zZ2lkICIiCisiR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkIGFuZCBzb21lIGVsZW1lbnQgZmFpbGVkIHRvIHBvc3QgYSAiCisicHJvcGVyIGVycm9yIG1lc3NhZ2Ugd2l0aCB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZS4iCittc2dzdHIgIiIKKworIzogZ3N0L2dzdGVycm9yLmM6MTU4Cittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCittc2dzdHIgIiIKKworIzogZ3N0L2dzdGVycm9yLmM6MTYwCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iCittc2dzdHIgIiIKKworIzogZ3N0L2dzdGVycm9yLmM6MTYyCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBuZWdvdGlhdGlvbiBwcm9ibGVtLiIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0ZXJyb3IuYzoxNjQKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3RlcnJvci5jOjE2NgorbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2VlayBwcm9ibGVtLiIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0ZXJyb3IuYzoxNjgKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNhcHMgcHJvYmxlbS4iCittc2dzdHIgIiIKKworIzogZ3N0L2dzdGVycm9yLmM6MTcwCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4iCittc2dzdHIgIiIKKworIzogZ3N0L2dzdGVycm9yLmM6MTcyCittc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0ZXJyb3IuYzoxNzQKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3RlcnJvci5jOjE3NgorbXNnaWQgIiIKKyJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCisiZGlzYWJsZWQuIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3RlcnJvci5jOjE5MAorbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3VwcG9ydGluZyBsaWJyYXJ5IGVycm9yLiIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0ZXJyb3IuYzoxOTUKK21zZ2lkICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3RlcnJvci5jOjE5NworbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3RlcnJvci5jOjE5OQorbXNnaWQgIkNvdWxkIG5vdCBjb25maWd1cmUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0ZXJyb3IuYzoyMDEKK21zZ2lkICJFbmNvZGluZyBlcnJvci4iCittc2dzdHIgIiIKKworIzogZ3N0L2dzdGVycm9yLmM6MjE0Cittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCByZXNvdXJjZSBlcnJvci4iCittc2dzdHIgIiIKKworIzogZ3N0L2dzdGVycm9yLmM6MjE5Cittc2dpZCAiUmVzb3VyY2Ugbm90IGZvdW5kLiIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0ZXJyb3IuYzoyMjEKK21zZ2lkICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3RlcnJvci5jOjIyMworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0ZXJyb3IuYzoyMjUKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCittc2dzdHIgIiIKKworIzogZ3N0L2dzdGVycm9yLmM6MjI3Cittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3RlcnJvci5jOjIyOQorbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSByZXNvdXJjZS4iCittc2dzdHIgIiIKKworIzogZ3N0L2dzdGVycm9yLmM6MjMxCittc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCittc2dzdHIgIiIKKworIzogZ3N0L2dzdGVycm9yLmM6MjMzCittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0ZXJyb3IuYzoyMzUKK21zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0ZXJyb3IuYzoyMzcKK21zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3RlcnJvci5jOjIzOQorbXNnaWQgIkNvdWxkIG5vdCBnZXQvc2V0IHNldHRpbmdzIGZyb20vb24gcmVzb3VyY2UuIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3RlcnJvci5jOjI0MQorbXNnaWQgIk5vIHNwYWNlIGxlZnQgb24gdGhlIHJlc291cmNlLiIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0ZXJyb3IuYzoyNTQKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN0cmVhbSBlcnJvci4iCittc2dzdHIgIiIKKworIzogZ3N0L2dzdGVycm9yLmM6MjU5Cittc2dpZCAiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBoYW5kbGluZyBvZiB0aGlzIHN0cmVhbS4gUGxlYXNlIGZpbGUgYSBidWcuIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3RlcnJvci5jOjI2MgorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3RlcnJvci5jOjI2NAorbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0ZXJyb3IuYzoyNjcKK21zZ2lkICJUaGVyZSBpcyBubyBjb2RlYyBwcmVzZW50IHRoYXQgY2FuIGhhbmRsZSB0aGUgc3RyZWFtJ3MgdHlwZS4iCittc2dzdHIgIiIKKworIzogZ3N0L2dzdGVycm9yLmM6MjY5Cittc2dpZCAiQ291bGQgbm90IGRlY29kZSBzdHJlYW0uIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3RlcnJvci5jOjI3MQorbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0ZXJyb3IuYzoyNzMKK21zZ2lkICJDb3VsZCBub3QgZGVtdWx0aXBsZXggc3RyZWFtLiIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0ZXJyb3IuYzoyNzUKK21zZ2lkICJDb3VsZCBub3QgbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIiIKKworIzogZ3N0L2dzdGVycm9yLmM6Mjc3Cittc2dpZCAiVGhlIHN0cmVhbSBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0ZXJyb3IuYzoyNzkKK21zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0ZXJyb3IuYzoyODEKK21zZ2lkICIiCisiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGNhbid0IGJlIGRlY3J5cHRlZCBiZWNhdXNlIG5vIHN1aXRhYmxlIGtleSBoYXMgIgorImJlZW4gc3VwcGxpZWQuIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3RlcnJvci5jOjMyMQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMuIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3RlcnJvci5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMgYW5kIGNvZGUgJWQuIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3RwaXBlbGluZS5jOjUyOQorbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjk4Cittc2dpZCAidGl0bGUiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzo5OAorbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoxMDEKK21zZ2lkICJ0aXRsZSBzb3J0bmFtZSIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjEwMQorbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoxMDQKK21zZ2lkICJhcnRpc3QiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoxMDUKK21zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmciCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoxMDkKK21zZ2lkICJhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoxMTAKK21zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoxMTMKK21zZ2lkICJhbGJ1bSIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjExNAorbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MTE3Cittc2dpZCAiYWxidW0gc29ydG5hbWUiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoxMTgKK21zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjEyMQorbXNnaWQgImFsYnVtIGFydGlzdCIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjEyMgorbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIGRpc3BsYXllZCIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjEyNgorbXNnaWQgImFsYnVtIGFydGlzdCBzb3J0bmFtZSIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjEyNworbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjEyOQorbXNnaWQgImRhdGUiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoxMjkKK21zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoxMzEKK21zZ2lkICJkYXRldGltZSIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjEzMgorbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjEzNgorbXNnaWQgImdlbnJlIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MTM3Cittc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoxNDAKK21zZ2lkICJjb21tZW50IgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MTQxCittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoxNDQKK21zZ2lkICJleHRlbmRlZCBjb21tZW50IgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MTQ1Cittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MTQ5Cittc2dpZCAidHJhY2sgbnVtYmVyIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MTUwCittc2dpZCAidHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoxNTMKK21zZ2lkICJ0cmFjayBjb3VudCIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjE1NAorbXNnaWQgImNvdW50IG9mIHRyYWNrcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIHRyYWNrIGJlbG9uZ3MgdG8iCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoxNTgKK21zZ2lkICJkaXNjIG51bWJlciIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjE1OQorbXNnaWQgImRpc2MgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoxNjIKK21zZ2lkICJkaXNjIGNvdW50IgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MTYzCittc2dpZCAiY291bnQgb2YgZGlzY3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyBkaXNjIGJlbG9uZ3MgdG8iCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoxNjcKK21zZ2lkICJsb2NhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjE2NworbXNnaWQgIiIKKyJPcmlnaW4gb2YgbWVkaWEgYXMgYSBVUkkgKGxvY2F0aW9uLCB3aGVyZSB0aGUgb3JpZ2luYWwgb2YgdGhlIGZpbGUgb3Igc3RyZWFtICIKKyJpcyBob3N0ZWQpIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MTcyCittc2dpZCAiaG9tZXBhZ2UiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoxNzMKK21zZ2lkICJIb21lcGFnZSBmb3IgdGhpcyBtZWRpYSAoaS5lLiBhcnRpc3Qgb3IgbW92aWUgaG9tZXBhZ2UpIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MTc2Cittc2dpZCAiZGVzY3JpcHRpb24iCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoxNzYKK21zZ2lkICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoxNzkKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MTc5Cittc2dpZCAidmVyc2lvbiBvZiB0aGlzIGRhdGEiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoxODAKK21zZ2lkICJJU1JDIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MTgyCittc2dpZCAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MTg2Cittc2dpZCAib3JnYW5pemF0aW9uIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MTg4Cittc2dpZCAiY29weXJpZ2h0IgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MTg4Cittc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjE5MAorbXNnaWQgImNvcHlyaWdodCB1cmkiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoxOTEKK21zZ2lkICJVUkkgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoxOTMKK21zZ2lkICJlbmNvZGVkIGJ5IgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MTkzCittc2dpZCAibmFtZSBvZiB0aGUgZW5jb2RpbmcgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjE5NworbXNnaWQgImNvbnRhY3QiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoxOTcKK21zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MTk5Cittc2dpZCAibGljZW5zZSIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjE5OQorbXNnaWQgImxpY2Vuc2Ugb2YgZGF0YSIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjIwMQorbXNnaWQgImxpY2Vuc2UgdXJpIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MjAyCittc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MjA1Cittc2dpZCAicGVyZm9ybWVyIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MjA2Cittc2dpZCAicGVyc29uKHMpIHBlcmZvcm1pbmciCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoyMDkKK21zZ2lkICJjb21wb3NlciIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjIxMAorbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjIxNAorbXNnaWQgImR1cmF0aW9uIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MjE0Cittc2dpZCAibGVuZ3RoIGluIEdTdHJlYW1lciB0aW1lIHVuaXRzIChuYW5vc2Vjb25kcykiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoyMTcKK21zZ2lkICJjb2RlYyIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjIxOAorbXNnaWQgImNvZGVjIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjIyMQorbXNnaWQgInZpZGVvIGNvZGVjIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MjIxCittc2dpZCAiY29kZWMgdGhlIHZpZGVvIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MjI0Cittc2dpZCAiYXVkaW8gY29kZWMiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoyMjQKK21zZ2lkICJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoyMjcKK21zZ2lkICJzdWJ0aXRsZSBjb2RlYyIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjIyNworbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjIyOQorbXNnaWQgImNvbnRhaW5lciBmb3JtYXQiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoyMzAKK21zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjIzMgorbXNnaWQgImJpdHJhdGUiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoyMzIKK21zZ2lkICJleGFjdCBvciBhdmVyYWdlIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MjM0Cittc2dpZCAibm9taW5hbCBiaXRyYXRlIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MjM0Cittc2dpZCAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjIzNgorbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjIzNgorbXNnaWQgIm1pbmltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoyMzgKK21zZ2lkICJtYXhpbXVtIGJpdHJhdGUiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoyMzgKK21zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MjQxCittc2dpZCAiZW5jb2RlciIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjI0MQorbXNnaWQgImVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoyNDQKK21zZ2lkICJlbmNvZGVyIHZlcnNpb24iCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoyNDUKK21zZ2lkICJ2ZXJzaW9uIG9mIHRoZSBlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MjQ3Cittc2dpZCAic2VyaWFsIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MjQ3Cittc2dpZCAic2VyaWFsIG51bWJlciBvZiB0cmFjayIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjI0OQorbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjI0OQorbXNnaWQgInRyYWNrIGdhaW4gaW4gZGIiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoyNTEKK21zZ2lkICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoyNTEKK21zZ2lkICJwZWFrIG9mIHRoZSB0cmFjayIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjI1MworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjI1MworbXNnaWQgImFsYnVtIGdhaW4gaW4gZGIiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoyNTUKK21zZ2lkICJyZXBsYXlnYWluIGFsYnVtIHBlYWsiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoyNTUKK21zZ2lkICJwZWFrIG9mIHRoZSBhbGJ1bSIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjI1NworbXNnaWQgInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MjU4Cittc2dpZCAicmVmZXJlbmNlIGxldmVsIG9mIHRyYWNrIGFuZCBhbGJ1bSBnYWluIHZhbHVlcyIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjI2MAorbXNnaWQgImxhbmd1YWdlIGNvZGUiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoyNjEKK21zZ2lkICJsYW5ndWFnZSBjb2RlIGZvciB0aGlzIHN0cmVhbSwgY29uZm9ybWluZyB0byBJU08tNjM5LTEiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoyNjMKK21zZ2lkICJpbWFnZSIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjI2MworbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjI2NgorbXNnaWQgInByZXZpZXcgaW1hZ2UiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoyNjYKK21zZ2lkICJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoyNjgKK21zZ2lkICJhdHRhY2htZW50IgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MjY4Cittc2dpZCAiZmlsZSBhdHRhY2hlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjI3MQorbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoyNzEKK21zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjI3MworbXNnaWQgImtleXdvcmRzIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MjczCittc2dpZCAiY29tbWEgc2VwYXJhdGVkIGtleXdvcmRzIGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoyNzYKK21zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjI3NgorbXNnaWQgIiIKKyJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgorInByb2R1Y2VkIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6Mjc5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIGxhdGl0dWRlIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MjgwCittc2dpZCAiIgorImdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yICIKKyJzb3V0aGVybiBsYXRpdHVkZXMpIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6Mjg0Cittc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjI4NQorbXNnaWQgIiIKKyJnZW8gbG9uZ2l0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCisiZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIHByaW1lIG1lcmlkaWFuIGluIEdyZWVud2ljaC9VSywgICIKKyJuZWdhdGl2ZSB2YWx1ZXMgZm9yIHdlc3Rlcm4gbG9uZ2l0dWRlcykiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoyODkKK21zZ2lkICJnZW8gbG9jYXRpb24gZWxldmF0aW9uIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MjkwCittc2dpZCAiIgorImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCisiYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjI5MworbXNnaWQgImdlbyBsb2NhdGlvbiBjb3VudHJ5IgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6Mjk0Cittc2dpZCAiY291bnRyeSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzoyOTcKK21zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjI5OAorbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MzAxCittc2dpZCAiZ2VvIGxvY2F0aW9uIHN1YmxvY2F0aW9uIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MzAyCittc2dpZCAiIgorImEgbG9jYXRpb24gd2hpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgorInRoZSBuZWlnaGJvcmhvb2QpIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MzA1Cittc2dpZCAiZ2VvIGxvY2F0aW9uIGhvcml6b250YWwgZXJyb3IiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzozMDYKK21zZ2lkICJleHBlY3RlZCBlcnJvciBvZiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbmluZyBtZWFzdXJlcyAoaW4gbWV0ZXJzKSIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjMwOQorbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjMxMAorbXNnaWQgIiIKKyJtb3ZlbWVudCBzcGVlZCBvZiB0aGUgY2FwdHVyaW5nIGRldmljZSB3aGlsZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIGluIG0vcyIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjMxMworbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBkaXJlY3Rpb24iCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzozMTQKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgorIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKKyJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzozMTkKK21zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzozMjAKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGRldmljZSBpcyBwb2ludGluZyB0byB3aGVuIGNhcHR1cmluZyAgYSBtZWRpYS4gIgorIkl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIHJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSAiCisiZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICdzaG93IG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lJyBoZXJlCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjMyNgorbXNnaWQgInNob3cgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjMyNworbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICdzaG93IHNvcnRuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZSBhcyB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzJyBoZXJlCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjMzMQorbXNnaWQgInNob3cgc29ydG5hbWUiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzozMzIKK21zZ2lkICIiCisiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzozMzUKK21zZ2lkICJlcGlzb2RlIG51bWJlciIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjMzNgorbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MzM5Cittc2dpZCAic2Vhc29uIG51bWJlciIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjM0MAorbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MzQzCittc2dpZCAibHlyaWNzIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MzQzCittc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MzQ2Cittc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzozNDcKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MzQ5Cittc2dpZCAiZ3JvdXBpbmciCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzozNTAKK21zZ2lkICIiCisiR3JvdXBzIHJlbGF0ZWQgbWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSB0cmFja3MsIGxpa2UgdGhlIGRpZmZlcmVudCBwaWVjZXMgIgorIm9mIGEgY29uY2VydG8uIEl0IGlzIGEgaGlnaGVyIGxldmVsIHRoYW4gYSB0cmFjaywgYnV0IGxvd2VyIHRoYW4gYW4gYWxidW0iCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzozNTQKK21zZ2lkICJ1c2VyIHJhdGluZyIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjM1NQorbXNnaWQgIiIKKyJSYXRpbmcgYXR0cmlidXRlZCBieSBhIHVzZXIuIFRoZSBoaWdoZXIgdGhlIHJhbmssIHRoZSBtb3JlIHRoZSB1c2VyIGxpa2VzICIKKyJ0aGlzIG1lZGlhIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MzU4Cittc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjM1OQorbXNnaWQgIk1hbnVmYWN0dXJlciBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzozNjEKK21zZ2lkICJkZXZpY2UgbW9kZWwiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzozNjIKK21zZ2lkICJNb2RlbCBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzozNjQKK21zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MzY0Cittc2dpZCAiQXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R0YWdsaXN0LmM6MzY2Cittc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjM2NworbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCittc2dzdHIgIiIKKworIzogZ3N0L2dzdHRhZ2xpc3QuYzozNjkKK21zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjM3MAorbXNnaWQgIkhvdyB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCBiZWZvcmUgZGlzcGxheSIKK21zZ3N0ciAiIgorCisjOiBnc3QvZ3N0dGFnbGlzdC5jOjQwOQorbXNnaWQgIiwgIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R1dGlscy5jOjI0NDUgdG9vbHMvZ3N0LWxhdW5jaC5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IGdzdC9nc3R1dGlscy5jOjI0NDcgdG9vbHMvZ3N0LWxhdW5jaC5jOjM2NCB0b29scy9nc3QtbGF1bmNoLmM6NjM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjOiBnc3QvcGFyc2UvZ3JhbW1hci55OjIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJzcGVjaWZpZWQgZW1wdHkgYmluIFwiJXNcIiwgbm90IGFsbG93ZWQiCittc2dzdHIgIiIKKworIzogZ3N0L3BhcnNlL2dyYW1tYXIueToyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYmluIFwiJXNcIiwgc2tpcHBpbmciCittc2dzdHIgIiIKKworIzogZ3N0L3BhcnNlL2dyYW1tYXIueTo0NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICIiCisKKyM6IGdzdC9wYXJzZS9ncmFtbWFyLnk6NDYyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKK21zZ3N0ciAiIgorCisjOiBnc3QvcGFyc2UvZ3JhbW1hci55OjYxMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbGluayAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBnc3QvcGFyc2UvZ3JhbW1hci55OjY2MQorIywgYy1mb3JtYXQKK21zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKK21zZ3N0ciAiIgorCisjOiBnc3QvcGFyc2UvZ3JhbW1hci55OjcxMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCittc2dzdHIgIiIKKworIzogZ3N0L3BhcnNlL2dyYW1tYXIueTo3MzUgZ3N0L3BhcnNlL2dyYW1tYXIueTo3ODMgZ3N0L3BhcnNlL2dyYW1tYXIueTo3OTkKKyM6IGdzdC9wYXJzZS9ncmFtbWFyLnk6ODYyCittc2dpZCAibGluayB3aXRob3V0IHNvdXJjZSBlbGVtZW50IgorbXNnc3RyICIiCisKKyM6IGdzdC9wYXJzZS9ncmFtbWFyLnk6NzQxIGdzdC9wYXJzZS9ncmFtbWFyLnk6NzgwIGdzdC9wYXJzZS9ncmFtbWFyLnk6ODcxCittc2dpZCAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKK21zZ3N0ciAiIgorCisjOiBnc3QvcGFyc2UvZ3JhbW1hci55OjgxNworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAiIgorCisjOiBnc3QvcGFyc2UvZ3JhbW1hci55OjgyNworIywgYy1mb3JtYXQKK21zZ2lkICJubyBlbGVtZW50IHRvIGxpbmsgVVJJIFwiJXNcIiB0byIKK21zZ3N0ciAiIgorCisjOiBnc3QvcGFyc2UvZ3JhbW1hci55OjgzNQorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgIiIKKworIzogZ3N0L3BhcnNlL2dyYW1tYXIueTo4NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxpbmsgc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICIiCisKKyM6IGdzdC9wYXJzZS9ncmFtbWFyLnk6ODU2Cittc2dpZCAiZW1wdHkgcGlwZWxpbmUgbm90IGFsbG93ZWQiCittc2dzdHIgIiIKKworIzogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6MjI5NAorbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKK21zZ3N0ciAiIgorCisjOiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoyNjE2IGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOjI2MjUKKyM6IGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzo0MDU0IHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoxMjQ0CisjOiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOjIzNDMKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgorbXNnc3RyICIiCisKKyM6IGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoyNzQwCittc2dpZCAiQSBsb3Qgb2YgYnVmZmVycyBhcmUgYmVpbmcgZHJvcHBlZC4iCittc2dzdHIgIiIKKworIzogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOjM1MzcKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCittc2dzdHIgIiIKKworIzogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOjQwNDQKK21zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCittc2dzdHIgIiIKKworIzogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6MTAwCittc2dpZCAiRmlsdGVyIGNhcHMiCittc2dzdHIgIiIKKworIzogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6MTAxCittc2dpZCAiIgorIlJlc3RyaWN0IHRoZSBwb3NzaWJsZSBhbGxvd2VkIGNhcGFiaWxpdGllcyAoTlVMTCBtZWFucyBBTlkpLiBTZXR0aW5nIHRoaXMgIgorInByb3BlcnR5IHRha2VzIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBwbGllZCBHc3RDYXBzIG9iamVjdC4iCittc2dzdHIgIiIKKworIzogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOjQxMAorbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHdyaXRpbmcuIgorbXNnc3RyICIiCisKKyM6IHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzo0MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgorbXNnc3RyICIiCisKKyM6IHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzo0NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCittc2dzdHIgIiIKKworIzogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiIgorCisjOiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6NTk1IHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIFwiJXNcIi4iCittc2dzdHIgIiIKKworIzogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6NTIwCittc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCittc2dzdHIgIiIKKworIzogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6NTMyIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6MTM5OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCittc2dzdHIgIiIKKworIzogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6NTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgaW5mbyBvbiBcIiVzXCIuIgorbXNnc3RyICIiCisKKyM6IHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisKKyM6IHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFwiJXNcIiBpcyBhIHNvY2tldC4iCittc2dzdHIgIiIKKworIzogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOjY4NworbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCittc2dzdHIgIiIKKworIzogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoxMzg1Cittc2dpZCAiTm8gVGVtcCBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIKK21zZ3N0ciAiIgorCisjOiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOjEzOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiIgorCisjOiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOjE3NzIKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIgorbXNnc3RyICIiCisKKyM6IHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6MjAzCittc2dpZCAiY2FwcyIKK21zZ3N0ciAiIgorCisjOiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOjIwNAorbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCittc2dzdHIgIiIKKworIzogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoyMDcKK21zZ2lkICJtaW5pbXVtIgorbXNnc3RyICIiCisKKyM6IHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6MjEyCittc2dpZCAibWF4aW11bSIKK21zZ3N0ciAiIgorCisjOiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOjIxNworbXNnaWQgImZvcmNlIGNhcHMiCittc2dzdHIgIiIKKworIzogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoyMTgKK21zZ2lkICJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIKK21zZ3N0ciAiIgorCisjOiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOjk1NgorbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKK21zZ3N0ciAiIgorCisjOiB0b29scy9nc3QtaW5zcGVjdC5jOjI2NworbXNnaWQgIkltcGxlbWVudGVkIEludGVyZmFjZXM6XG4iCittc2dzdHIgIiIKKworIzogdG9vbHMvZ3N0LWluc3BlY3QuYzozNTMKK21zZ2lkICJyZWFkYWJsZSIKK21zZ3N0ciAiIgorCisjOiB0b29scy9nc3QtaW5zcGVjdC5jOjM1NworbXNnaWQgIndyaXRhYmxlIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1pbnNwZWN0LmM6MzYxCittc2dpZCAiY29udHJvbGxhYmxlIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1pbnNwZWN0LmM6MzY1Cittc2dpZCAiY2hhbmdlYWJsZSBpbiBOVUxMLCBSRUFEWSwgUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUiCittc2dzdHIgIiIKKworIzogdG9vbHMvZ3N0LWluc3BlY3QuYzozNjcKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCwgUkVBRFkgb3IgUEFVU0VEIHN0YXRlIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1pbnNwZWN0LmM6MzY5Cittc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwgb3IgUkVBRFkgc3RhdGUiCittc2dzdHIgIiIKKworIzogdG9vbHMvZ3N0LWluc3BlY3QuYzoxMDEwCittc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1pbnNwZWN0LmM6MTAyMiB0b29scy9nc3QtaW5zcGVjdC5jOjExMTQKK21zZ2lkICJUb3RhbCBjb3VudDogIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1pbnNwZWN0LmM6MTAyMworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgorbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IHRvb2xzL2dzdC1pbnNwZWN0LmM6MTExNQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBwbHVnaW4iCittc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiB0b29scy9nc3QtaW5zcGVjdC5jOjExMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgorbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IHRvb2xzL2dzdC1pbnNwZWN0LmM6MTEyMworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBmZWF0dXJlIgorbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IHRvb2xzL2dzdC1pbnNwZWN0LmM6MTU0MworbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKK21zZ3N0ciAiIgorCisjOiB0b29scy9nc3QtaW5zcGVjdC5jOjE1NDUKK21zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1pbnNwZWN0LmM6MTU0NworbXNnaWQgIiIKKyJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgorInBsdWdpbnMgcHJvdmlkZS5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKKyJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1pbnNwZWN0LmM6MTU1MgorbXNnaWQgIkxpc3QgdGhlIHBsdWdpbiBjb250ZW50cyIKK21zZ3N0ciAiIgorCisjOiB0b29scy9nc3QtaW5zcGVjdC5jOjE1NTUKK21zZ2lkICJQcmludCBzdXBwb3J0ZWQgVVJJIHNjaGVtZXMsIHdpdGggdGhlIGVsZW1lbnRzIHRoYXQgaW1wbGVtZW50IHRoZW0iCittc2dzdHIgIiIKKworIzogdG9vbHMvZ3N0LWluc3BlY3QuYzoxNjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1pbnNwZWN0LmM6MTY2MworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIGVsZW1lbnQgb3IgcGx1Z2luICclcydcbiIKK21zZ3N0ciAiIgorCisjOiB0b29scy9nc3QtbGF1bmNoLmM6MjkwCittc2dpZCAiSW5kZXggc3RhdGlzdGljcyIKK21zZ3N0ciAiIgorCisjOiB0b29scy9nc3QtbGF1bmNoLmM6NTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIGVsZW1lbnQgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAiIgorCisjOiB0b29scy9nc3QtbGF1bmNoLmM6NTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIHBhZCBcIiVzOiVzXCIgKCVzKTogIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1sYXVuY2guYzo1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gb2JqZWN0IFwiJXNcIiAoJXMpOiAiCittc2dzdHIgIiIKKworIzogdG9vbHMvZ3N0LWxhdW5jaC5jOjU1NQorIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgKCVzKTogIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1sYXVuY2guYzo1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1sYXVuY2guYzo1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKK21zZ3N0ciAiIgorCisjOiB0b29scy9nc3QtbGF1bmNoLmM6NTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgcGFkIFwiJXM6JXNcIi5cbiIKK21zZ3N0ciAiIgorCisjOiB0b29scy9nc3QtbGF1bmNoLmM6NjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKK21zZ3N0ciAiIgorCisjOiB0b29scy9nc3QtbGF1bmNoLmM6NjA1Cittc2dpZCAiRk9VTkQgVEFHXG4iCittc2dzdHIgIiIKKworIzogdG9vbHMvZ3N0LWxhdW5jaC5jOjYyMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSU5GTzpcbiIKKyIlc1xuIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1sYXVuY2guYzo2MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1sYXVuY2guYzo2NjcKK21zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIGJ1ZmZlcmluZyB0byBmaW5pc2guLi5cbiIKK21zZ3N0ciAiIgorCisjOiB0b29scy9nc3QtbGF1bmNoLmM6Njg0Cittc2dpZCAiYnVmZmVyaW5nLi4uIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1sYXVuY2guYzo2OTUKK21zZ2lkICJEb25lIGJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1sYXVuY2guYzo3MDMKK21zZ2lkICJCdWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1sYXVuY2guYzo3MTIKK21zZ2lkICJSZWRpc3RyaWJ1dGUgbGF0ZW5jeS4uLlxuIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1sYXVuY2guYzo3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBzdGF0ZSB0byAlcyBhcyByZXF1ZXN0ZWQgYnkgJXMuLi5cbiIKK21zZ3N0ciAiIgorCisjOiB0b29scy9nc3QtbGF1bmNoLmM6NzM5Cittc2dpZCAiSW50ZXJydXB0OiBTdG9wcGluZyBwaXBlbGluZSAuLi5cbiIKK21zZ3N0ciAiIgorCisjOiB0b29scy9nc3QtbGF1bmNoLmM6NzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiB0b29scy9nc3QtbGF1bmNoLmM6ODMxCittc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1sYXVuY2guYzo4MzMKK21zZ2lkICJPdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBwcm9wZXJ0eSBub3RpZmljYXRpb25zIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1sYXVuY2guYzo4MzUKK21zZ2lkICJEbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1sYXVuY2guYzo4MzcKK21zZ2lkICJPdXRwdXQgbWVzc2FnZXMiCittc2dzdHIgIiIKKworIzogdG9vbHMvZ3N0LWxhdW5jaC5jOjgzOQorbXNnaWQgIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIFRZUEUiCittc2dzdHIgIiIKKworIzogdG9vbHMvZ3N0LWxhdW5jaC5jOjgzOQorbXNnaWQgIlRZUEUxLFRZUEUyLC4uLiIKK21zZ3N0ciAiIgorCisjOiB0b29scy9nc3QtbGF1bmNoLmM6ODQxCittc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1sYXVuY2guYzo4NDMKK21zZ2lkICJQcmludCBhbGxvYyB0cmFjZSAoaWYgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUpIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1sYXVuY2guYzo4NDUKK21zZ2lkICJGb3JjZSBFT1Mgb24gc291cmNlcyBiZWZvcmUgc2h1dHRpbmcgdGhlIHBpcGVsaW5lIGRvd24iCittc2dzdHIgIiIKKworIzogdG9vbHMvZ3N0LWxhdW5jaC5jOjg0NworbXNnaWQgIkdhdGhlciBhbmQgcHJpbnQgaW5kZXggc3RhdGlzdGljcyIKK21zZ3N0ciAiIgorCisjOiB0b29scy9nc3QtbGF1bmNoLmM6OTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQ6ICVzLlxuIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1sYXVuY2guYzo5MjEKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlxuIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1sYXVuY2guYzo5MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogZXJyb25lb3VzIHBpcGVsaW5lOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1sYXVuY2guYzo5NDgKK21zZ2lkICJFUlJPUjogdGhlICdwaXBlbGluZScgZWxlbWVudCB3YXNuJ3QgZm91bmQuXG4iCittc2dzdHIgIiIKKworIzogdG9vbHMvZ3N0LWxhdW5jaC5jOjk3NCB0b29scy9nc3QtbGF1bmNoLmM6MTA1MAorbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1sYXVuY2guYzo5NzkKK21zZ2lkICJFUlJPUjogUGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBhdXNlLlxuIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1sYXVuY2guYzo5ODQKK21zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCittc2dzdHIgIiIKKworIzogdG9vbHMvZ3N0LWxhdW5jaC5jOjk4OAorbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCittc2dzdHIgIiIKKworIzogdG9vbHMvZ3N0LWxhdW5jaC5jOjk5MSB0b29scy9nc3QtbGF1bmNoLmM6MTAwNAorbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcHJlcm9sbC5cbiIKK21zZ3N0ciAiIgorCisjOiB0b29scy9nc3QtbGF1bmNoLmM6OTk3Cittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1sYXVuY2guYzoxMDA5Cittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1sYXVuY2guYzoxMDE2Cittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1sYXVuY2guYzoxMDMwCittc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gRm9yY2luZyBFT1Mgb24gdGhlIHBpcGVsaW5lXG4iCittc2dzdHIgIiIKKworIzogdG9vbHMvZ3N0LWxhdW5jaC5jOjEwMzMKK21zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKK21zZ3N0ciAiIgorCisjOiB0b29scy9nc3QtbGF1bmNoLmM6MTAzOAorbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCittc2dzdHIgIiIKKworIzogdG9vbHMvZ3N0LWxhdW5jaC5jOjEwNDAKK21zZ2lkICJBbiBlcnJvciBoYXBwZW5lZCB3aGlsZSB3YWl0aW5nIGZvciBFT1NcbiIKK21zZ3N0ciAiIgorCisjOiB0b29scy9nc3QtbGF1bmNoLmM6MTA0NworbXNnaWQgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgorbXNnc3RyICIiCisKKyM6IHRvb2xzL2dzdC1sYXVuY2guYzoxMDU4Cittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKK21zZ3N0ciAiIgorCisjOiB0b29scy9nc3QtbGF1bmNoLmM6MTA2OAorbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCAuLi5cbiIKK21zZ3N0ciAiIgorCisjOiB0b29scy9nc3QtbGF1bmNoLmM6MTA3MworbXNnaWQgIkZyZWVpbmcgcGlwZWxpbmUgLi4uXG4iCittc2dzdHIgIiIKZGlmZiAtLWdpdCBhL3BvL2h1LmdtbyBiL3BvL2h1LmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmFhNTcwCi0tLSAvZGV2L251bGwKKysrIGIvcG8vaHUuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2h1LnBvIGIvcG8vaHUucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU1Nzg1MQotLS0gL2Rldi9udWxsCisrKyBiL3BvL2h1LnBvCkBAIC0wLDAgKzEsMTIxOSBAQAorIyBIdW5nYXJpYW4gdHJhbnNsYXRpb24gZm9yIGdzdHJlYW1lcgorIyBDb3B5cmlnaHQgKGMpIDIwMDYgQ2Fub25pY2FsIEx0ZCwgYW5kIFJvc2V0dGEgQ29udHJpYnV0b3JzCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnc3RyZWFtZXIgcGFja2FnZS4KKyMKKyMgR2Fib3IgS2VsZW1lbiA8a2VsZW1lbmdAZ25vbWUuaHU+LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDAuMTAuMzAuM1xuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTA5LTI5IDE0OjU1KzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTExLTAxIDEzOjM5KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEdhYm9yIEtlbGVtZW4gPGtlbGVtZW5nQGdub21lLmh1PlxuIgorIkxhbmd1YWdlLVRlYW06IEh1bmdhcmlhbiA8dHJhbnNsYXRpb24tdGVhbS1odUBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCisiTGFuZ3VhZ2U6IGh1XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiWC1HZW5lcmF0b3I6IEtCYWJlbCAxLjExLjRcbiIKKyJQbHVyYWwtRm9ybXM6ICBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKK21zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCittc2dzdHIgIkEgR1N0cmVhbWVyIHZlcnppw7Nqw6FuYWsga2nDrXLDoXNhIgorCittc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCittc2dzdHIgIk1pbmRlbiBmaWd5ZWxtZXp0ZXTDqXMgdsOpZ3pldGVzIGxlZ3llbiIKKworbXNnaWQgIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IgorbXNnc3RyICJBeiBlbMOpcmhldMWRIGhpYmFrZXJlc8Opc2kga2F0ZWfDs3Jpw6FrIGtpw61yw6FzYSDDqXMga2lsw6lww6lzIgorCittc2dpZCAiIgorIkRlZmF1bHQgZGVidWcgbGV2ZWwgZnJvbSAxIChvbmx5IGVycm9yKSB0byA1IChhbnl0aGluZykgb3IgMCBmb3Igbm8gb3V0cHV0IgorbXNnc3RyICIiCisiQWxhcMOpcnRlbG1lemV0dCBoaWJha2VyZXPDqXNpIHN6aW50IDEgKGNzYWsgaGliw6FrKSDDqXMgNSAoYsOhcm1pKSBrw7Z6w7Z0dCwgdmFneSAiCisiMCA9IG5pbmNzIGtpbWVuZXQiCisKK21zZ2lkICJMRVZFTCIKK21zZ3N0ciAiU1pJTlQiCisKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCisidGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgorbXNnc3RyICIiCisiQSBrYXRlZ8OzcmlhbsOpdjpzemludCBww6Fyb2sgdmVzc3rFkWtrZWwgZWx2w6FsYXN6dG90dCBsaXN0w6FqYSBhZG90dCBzemludGVrICIKKyJiZcOhbGzDrXTDoXPDoWhveiBheiBlZ3llcyBrYXRlZ8OzcmnDoWtob3ouIFDDqWxkw6F1bDogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgorCittc2dpZCAiTElTVCIKK21zZ3N0ciAiTElTVEEiCisKK21zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKK21zZ3N0ciAiU3rDrW5lcyBoaWJha2VyZXPDqXNpIGtpbWVuZXQgbGV0aWx0w6FzYSIKKworbXNnaWQgIkRpc2FibGUgZGVidWdnaW5nIgorbXNnc3RyICJIaWJha2VyZXPDqXMgbGV0aWx0w6FzYSIKKworbXNnaWQgIkVuYWJsZSB2ZXJib3NlIHBsdWdpbiBsb2FkaW5nIGRpYWdub3N0aWNzIgorbXNnc3RyICJSw6lzemxldGVzIGLFkXbDrXRtw6lueWJldMO2bHTDqXNpIGRpYWdub3N6dGlrYSBlbmdlZMOpbHllesOpc2UiCisKK21zZ2lkICJDb2xvbi1zZXBhcmF0ZWQgcGF0aHMgY29udGFpbmluZyBwbHVnaW5zIgorbXNnc3RyICJCxZF2w610bcOpbnlla2V0IHRhcnRhbG1hesOzIMO6dHZvbmFsYWsgdmVzc3rFkWtrZWwgZWx2w6FsYXN6dG90dCBsaXN0w6FqYSIKKworbXNnaWQgIlBBVEhTIgorbXNnc3RyICLDmlRWT05BTEFLIgorCittc2dpZCAiIgorIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgorImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKK21zZ3N0ciAiIgorIkEgR1NUX1BMVUdJTl9QQVRIIGvDtnJueWV6ZXRpIHbDoWx0b3rDs2JhbiBtZWdhZG90dCBsaXN0w6FuIGvDrXbDvGwgZWzFkXJlICIKKyJiZXTDtmx0ZW5kxZEgYsWRdsOtdG3DqW55ZWsgdmVzc3rFkXZlbCBlbHbDoWxhc3p0b3R0IGxpc3TDoWphLiIKKworbXNnaWQgIlBMVUdJTlMiCittc2dzdHIgIkLFkFbDjVRNw4lOWUVLIgorCittc2dpZCAiRGlzYWJsZSB0cmFwcGluZyBvZiBzZWdtZW50YXRpb24gZmF1bHRzIGR1cmluZyBwbHVnaW4gbG9hZGluZyIKK21zZ3N0ciAiU3plZ21lbnTDoWzDoXNpIGhpYsOhayBlbGZvZ8Ohc8OhbmFrIGxldGlsdMOhc2EgYSBixZF2w610bcOpbnliZXTDtmx0w6lzIHNvcsOhbiIKKworbXNnaWQgIkRpc2FibGUgdXBkYXRpbmcgdGhlIHJlZ2lzdHJ5IgorbXNnc3RyICJBIG55aWx2w6FudGFydMOhcyBmcmlzc8OtdMOpc8OpbmVrIGxldGlsdMOhc2EiCisKK21zZ2lkICJEaXNhYmxlIHNwYXduaW5nIGEgaGVscGVyIHByb2Nlc3Mgd2hpbGUgc2Nhbm5pbmcgdGhlIHJlZ2lzdHJ5IgorbXNnc3RyICJTZWfDqWRmb2x5YW1hdCBpbmTDrXTDoXPDoW5hayBsZXRpbHTDoXNhIGEgbnlpbHbDoW50YXJ0w6FzIGVsZW16w6lzZSBrw7Z6YmVuIgorCittc2dpZCAiR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgIkdTdHJlYW1lciBiZcOhbGzDrXTDoXNhaSIKKworbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgIkEgR1N0cmVhbWVyIGJlw6FsbMOtdMOhc2FpbmFrIG1lZ2plbGVuw610w6lzZSIKKworbXNnaWQgIlVua25vd24gb3B0aW9uIgorbXNnc3RyICJJc21lcmV0bGVuIGJlw6FsbMOtdMOhcyIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgY29yZSBsaWJyYXJ5IGVycm9yLiIKK21zZ3N0ciAiQSBHU3RyZWFtZXIgw6FsdGFsw6Fub3MgbWFna8O2bnl2dMOhcmhpYsOhdCB0YXBhc3p0YWx0LiIKKworbXNnaWQgIiIKKyJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuIgorbXNnc3RyICIiCisiQSBHU3RyZWFtZXIgZmVqbGVzenTFkWsgdMO6bCBsdXN0w6FrIHZvbHRhayBoaWJha8OzZG90IHJlbmRlbG5pIGVoaGV6IGEgaGliw6Fob3ouIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjb2RlIG5vdCBpbXBsZW1lbnRlZC4iCittc2dzdHIgIkJlbHPFkSBHU3RyZWFtZXIgaGliYTogYSBrw7NkIG5pbmNzIG1lZ3ZhbMOzc8OtdHZhLiIKKworbXNnaWQgIiIKKyJHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQgYW5kIHNvbWUgZWxlbWVudCBmYWlsZWQgdG8gcG9zdCBhICIKKyJwcm9wZXIgZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLiIKK21zZ3N0ciAiIgorIkdTdHJlYW1lciBoaWJhOiBheiDDoWxsYXBvdHbDoWx0w6FzIG1lZ2hpw7pzdWx0IMOpcyBuw6low6FueSBlbGVtIG5lbSB2b2x0IGvDqXBlcyAiCisibWVnZmVsZWzFkSBoaWJhw7x6ZW5ldGV0IGvDvGxkZW5pIGEgaGliYSBva8OhcsOzbC4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHBhZCBwcm9ibGVtLiIKK21zZ3N0ciAiQmVsc8WRIEdTdHJlYW1lciBoaWJhOiBraXTDtmx0w6lzaSBwcm9ibMOpbWEuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iCittc2dzdHIgIkJlbHPFkSBHU3RyZWFtZXIgaGliYTogc3rDoWxwcm9ibMOpbWEuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBuZWdvdGlhdGlvbiBwcm9ibGVtLiIKK21zZ3N0ciAiQmVsc8WRIEdTdHJlYW1lciBoaWJhOiBtZWfDoWxsYXBvZMOhc2kgcHJvYmzDqW1hLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogZXZlbnQgcHJvYmxlbS4iCittc2dzdHIgIkJlbHPFkSBHU3RyZWFtZXIgaGliYTogZXNlbcOpbnlwcm9ibMOpbWEuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uIgorbXNnc3RyICJCZWxzxZEgR1N0cmVhbWVyIGhpYmE6IHBvemljaW9uw6Fsw6FzaSBwcm9ibMOpbWEuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgorbXNnc3RyICJCZWxzxZEgR1N0cmVhbWVyIGhpYmE6IGvDqXBlc3PDqWdwcm9ibMOpbWEuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4iCittc2dzdHIgIkJlbHPFkSBHU3RyZWFtZXIgaGliYTogY8OtbWtlcHJvYmzDqW1hLiIKKworbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCittc2dzdHIgIkEgR1N0cmVhbWVyIHRlbGVww610w6lzYsWRbCBoacOhbnl6aWsgZWd5IGLFkXbDrXRtw6lueS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIgorbXNnc3RyICJCZWxzxZEgR1N0cmVhbWVyIGhpYmE6IMOzcmFwcm9ibMOpbWEuIgorCittc2dpZCAiIgorIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGhhcyBiZWVuICIKKyJkaXNhYmxlZC4iCittc2dzdHIgIkF6IGFsa2FsbWF6w6FzIGxldGlsdG90dCBHU3RyZWFtZXIgZnVua2Npw7NrYXQgcHLDs2LDoWwgbWVnIGhhc3puw6FsbmkuIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICJBIEdTdHJlYW1lciDDoWx0YWzDoW5vcyB0w6Ftb2dhdMOzIHByb2dyYW1rw7ZueXZ0w6FyaGliw6F0IMOpc3psZWx0LiIKKworbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIk5lbSBzaWtlcsO8bHQgaW5pY2lhbGl6w6FsbmkgYSB0w6Ftb2dhdMOzIHByb2dyYW1rw7ZueXZ0w6FyYXQuIgorCittc2dpZCAiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIk5lbSB6w6FyaGF0w7MgYmUgYSB0w6Ftb2dhdMOzIHByb2dyYW1rw7ZueXZ0w6FyLiIKKworbXNnaWQgIkNvdWxkIG5vdCBjb25maWd1cmUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiTmVtIMOhbGzDrXRoYXTDsyBiZSBhIHTDoW1vZ2F0w7MgcHJvZ3JhbWvDtm55dnTDoXIuIgorCittc2dpZCAiRW5jb2RpbmcgZXJyb3IuIgorbXNnc3RyICJLw7Nkb2zDoXNpIGhpYmEuIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCByZXNvdXJjZSBlcnJvci4iCittc2dzdHIgIkEgR1N0cmVhbWVyIMOhbHRhbMOhbm9zIGVyxZFmb3Jyw6FzaGliw6F0IMOpc3psZWx0LiIKKworbXNnaWQgIlJlc291cmNlIG5vdCBmb3VuZC4iCittc2dzdHIgIkF6IGVyxZFmb3Jyw6FzIG5lbSB0YWzDoWxoYXTDsy4iCisKK21zZ2lkICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgorbXNnc3RyICJBeiBlcsWRZm9ycsOhcyBmb2dsYWx0IHZhZ3kgbmVtIMOpcmhldMWRIGVsLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiQXogZXLFkWZvcnLDoXMgbmVtIG55aXRoYXTDsyBtZWcgb2x2YXPDoXNyYS4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCittc2dzdHIgIkF6IGVyxZFmb3Jyw6FzIG5lbSBueWl0aGF0w7MgbWVnIMOtcsOhc3JhLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKK21zZ3N0ciAiQXogZXLFkWZvcnLDoXMgbmVtIG55aXRoYXTDsyBtZWcgb2x2YXPDoXNyYSDDqXMgw61yw6FzcmEuIgorCittc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKK21zZ3N0ciAiQXogZXLFkWZvcnLDoXMgbmVtIHrDoXJoYXTDsyBsZS4iCisKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIHJlc291cmNlLiIKK21zZ3N0ciAiTmVtIGxlaGV0IG9sdmFzbmkgYXogZXLFkWZvcnLDoXNiw7NsLiIKKworbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iCittc2dzdHIgIk5lbSBsZWhldCDDrXJuaSBheiBlcsWRZm9ycsOhc2JhLiIKKworbXNnaWQgIkNvdWxkIG5vdCBwZXJmb3JtIHNlZWsgb24gcmVzb3VyY2UuIgorbXNnc3RyICJOZW0gdsOpZ2V6aGV0xZEgcG96aWNpb27DoWzDoXMgYXogZXLFkWZvcnLDoXNvbi4iCisKK21zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgorbXNnc3RyICJOZW0gbGVoZXQgc3ppbmtyb25pesOhbG5pIGF6IGVyxZFmb3Jyw6Fzb24uIgorCittc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCittc2dzdHIgIk5lbSBsZWhldCBsZWvDqXJuaS9iZcOhbGzDrXRhbmkgYXogZXLFkWZvcnLDoXMgYmXDoWxsw610w6FzYWl0LiIKKworbXNnaWQgIk5vIHNwYWNlIGxlZnQgb24gdGhlIHJlc291cmNlLiIKK21zZ3N0ciAiTmluY3MgdMO2YmIgaGVseSBheiBlcsWRZm9ycsOhc29uLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiQSBHU3RyZWFtZXIgw6FsdGFsw6Fub3MgYWRhdGZvbHlhbWhpYsOhdCDDqXN6bGVsdC4iCisKK21zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCittc2dzdHIgIiIKKyJBeiBlbGVtIG5lbSB2YWzDs3PDrXRqYSBtZWcgYXogYWRhdGZvbHlhbSBrZXplbMOpc8OpdC4gS8O8bGRqw7ZuIGJlIGVneSAiCisiaGliYWplbGVudMOpc3QuIgorCittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCittc2dzdHIgIk5lbSDDoWxsYXDDrXRoYXTDsyBtZWcgYXogYWRhdGZvbHlhbSB0w61wdXNhLiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKK21zZ3N0ciAiQXogYWRhdGZvbHlhbSB0w61wdXNhIGVsdMOpciBheiBlbGVtIMOhbHRhbCBrZXplbHR0xZFsLiIKKworbXNnaWQgIlRoZXJlIGlzIG5vIGNvZGVjIHByZXNlbnQgdGhhdCBjYW4gaGFuZGxlIHRoZSBzdHJlYW0ncyB0eXBlLiIKK21zZ3N0ciAiTmluY3MgamVsZW4gYXogYWRhdGZvbHlhbSB0w61wdXPDoXQga2V6ZWxuaSBrw6lwZXMga29kZWsuIgorCittc2dpZCAiQ291bGQgbm90IGRlY29kZSBzdHJlYW0uIgorbXNnc3RyICJOZW0gZmVqdGhldMWRIHZpc3N6YSBheiBhZGF0Zm9seWFtLiIKKworbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKK21zZ3N0ciAiQXogYWRhdGZvbHlhbSBuZW0ga8OzZG9saGF0w7MuIgorCittc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIk5lbSB2w6FsYXN6dGhhdMOzIHN6w6l0IGF6IGFkYXRmb2x5YW0uIgorCittc2dpZCAiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIgorbXNnc3RyICJOZW0gZWd5ZXPDrXRoZXTFkSBheiBhZGF0Zm9seWFtLiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgaW4gdGhlIHdyb25nIGZvcm1hdC4iCittc2dzdHIgIkF6IGFkYXRmb2x5YW0gZm9ybcOhdHVtYSByb3Nzei4iCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiQXogYWRhdGZvbHlhbSB0aXRrb3PDrXRvdHQgw6lzIGEgdmlzc3phZmVqdMOpcyBuZW0gdMOhbW9nYXRvdHQuIgorCittc2dpZCAiIgorIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKKyJiZWVuIHN1cHBsaWVkLiIKK21zZ3N0ciAiIgorIkF6IGFkYXRmb2x5YW0gdGl0a29zw610b3R0IMOpcyBuZW0gZmVqdGhldMWRIHZpc3N6YSwgbWl2ZWwgbmVtIGtlcsO8bHQgbWVnYWTDoXNyYSAiCisibWVnZmVsZWzFkSBrdWxjcy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzLiIKK21zZ3N0ciAiTmluY3MgaGliYcO8emVuZXQgYSBrw7Z2ZXRrZXrFkSB0YXJ0b23DoW55aG96OiAlcy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKK21zZ3N0ciAiIgorIk5pbmNzIHN6YWJ2w6FueW9zIGhpYmHDvHplbmV0IGEga8O2dmV0a2V6xZEgdGFydG9tw6FueWhvejogJXMgw6lzIGvDs2Rob3o6ICVkLiIKKworbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKK21zZ3N0ciAiQSBraWplbMO2bHQgw7NyYSBuZW0gaGFzem7DoWxoYXTDsyBhZGF0Y3NhdG9ybsOhYmFuLiIKKworbXNnaWQgInRpdGxlIgorbXNnc3RyICJjw61tIgorCittc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKK21zZ3N0ciAiw6FsdGFsw6Fub3NhbiBoYXN6bsOhbHQgY8OtbSIKKworbXNnaWQgInRpdGxlIHNvcnRuYW1lIgorbXNnc3RyICJjw61tIHJlbmRlesOpc2kgbmV2ZSIKKworbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIsOhbHRhbMOhbm9zYW4sIHJlbmRlesOpc2kgY8OpbGxhbCBoYXN6bsOhbHQgY8OtbSIKKworbXNnaWQgImFydGlzdCIKK21zZ3N0ciAiZWzFkWFkw7MiCisKK21zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmciCittc2dzdHIgImEgZmVsdsOpdGVsw6lydCBmZWxlbMWRcyBzemVtw6lseWVrIgorCittc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgorbXNnc3RyICJlbMWRYWTDsyByZW5kZXrDqXNpIG5ldmUiCisKK21zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgImEgZmVsdsOpdGVsw6lydCBmZWxlbMWRcyBzemVtw6lseWVrLCByZW5kZXrDqXNpIGPDqWxsYWwiCisKK21zZ2lkICJhbGJ1bSIKK21zZ3N0ciAiYWxidW0iCisKK21zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSIKK21zZ3N0ciAiYXogYWRhdG9rYXQgdGFydGFsbWF6w7MgYWxidW0iCisKK21zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKK21zZ3N0ciAiYWxidW0gcmVuZGV6w6lzaSBuZXZlIgorCittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgImF6IGFkYXRva2F0IHRhcnRhbG1hesOzIGFsYnVtLCByZW5kZXrDqXNpIGPDqWxsYWwiCisKK21zZ2lkICJhbGJ1bSBhcnRpc3QiCittc2dzdHIgImFsYnVtZWzFkWFkw7MiCisKK21zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQiCittc2dzdHIgIkEgdGVsamVzIGFsYnVtIGVsxZFhZMOzamEsIG1lZ2plbGVuw610ZW5kxZEgZm9ybcOhYmFuIgorCittc2dpZCAiYWxidW0gYXJ0aXN0IHNvcnRuYW1lIgorbXNnc3RyICJhbGJ1bWVsxZFhZMOzIHJlbmRlesOpc2kgbmV2ZSIKKworbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCIKK21zZ3N0ciAiQSB0ZWxqZXMgYWxidW0gZWzFkWFkw7NqYSwgcmVuZGV6w6lzaGV6IGhhc3puw6FsaGF0w7MgZm9ybcOhYmFuIgorCittc2dpZCAiZGF0ZSIKK21zZ3N0ciAiZMOhdHVtIgorCittc2dpZCAiZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHRGF0ZSBzdHJ1Y3R1cmUpIgorbXNnc3RyICJheiBhZGF0b2sgbMOpdHJlaG96w6FzaSBkw6F0dW1hIChHRGF0ZSBzdHJ1a3TDunJha8OpbnQpIgorCittc2dpZCAiZGF0ZXRpbWUiCittc2dzdHIgImTDoXR1bWlkxZEiCisKK21zZ2lkICJkYXRlIGFuZCB0aW1lIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdzdERhdGVUaW1lIHN0cnVjdHVyZSkiCittc2dzdHIgImF6IGFkYXRvayBsw6l0cmVob3rDoXNpIGTDoXR1bWEgw6lzIGlkZWplIChHc3REYXRlVGltZSBzdHJ1a3TDunJha8OpbnQpIgorCittc2dpZCAiZ2VucmUiCittc2dzdHIgIm3FsWZhaiIKKworbXNnaWQgImdlbnJlIHRoaXMgZGF0YSBiZWxvbmdzIHRvIgorbXNnc3RyICJhIHN0w61sdXMsIGFtZWx5aGV6IGF6IGFkYXRvayB0YXJ0b3puYWsiCisKK21zZ2lkICJjb21tZW50IgorbXNnc3RyICJtZWdqZWd5esOpcyIKKworbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIgorbXNnc3RyICJheiBhZGF0b2tob3ogdGFydG96w7Mgc3phYmFkIHN6w7Z2ZWdlcyBtZWdqZWd5esOpcyIKKworbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCittc2dzdHIgImtpdGVyamVzenRldHQgbWVnamVneXrDqXMiCisKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCittc2dzdHIgIiIKKyJheiBhZGF0b2tob3ogZsWxesO2dHQgc3phYmFkIHN6w7Z2ZWdlcyBtZWdqZWd5esOpcyBrdWxjcz3DqXJ0w6lrIHZhZ3kga3VsY3NbaHVdIgorIj1tZWdqZWd5esOpcyBmb3Jtw6FiYW4iCisKK21zZ2lkICJ0cmFjayBudW1iZXIiCittc2dzdHIgImRhbHNvcnN6w6FtIgorCittc2dpZCAidHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgImRhbHNvcnN6w6FtIGVneSBnecWxanRlbcOpbnllbiBiZWzDvGwiCisKK21zZ2lkICJ0cmFjayBjb3VudCIKK21zZ3N0ciAiZGFsc3rDoW0iCisKK21zZ2lkICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgorbXNnc3RyICJkYWxvayBtZW5ueWlzw6lnZSBhem9uIGd5xbFqdGVtw6lueWVuIGJlbMO8bCwgYW1lbHloZXogZXogYSBkYWwgdGFydG96aWsiCisKK21zZ2lkICJkaXNjIG51bWJlciIKK21zZ3N0ciAibGVtZXpzesOhbSIKKworbXNnaWQgImRpc2MgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgImxlbWV6c3rDoW0gZWd5IGd5xbFqdGVtw6lueWVuIGJlbMO8bCIKKworbXNnaWQgImRpc2MgY291bnQiCittc2dzdHIgImxlbWV6ZWsgbWVubnlpc8OpZ2UiCisKK21zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKK21zZ3N0ciAiIgorImxlbWV6ZWsgbWVubnlpc8OpZ2UgYXpvbiBnecWxanRlbcOpbnllbiBiZWzDvGwsIGFtZWx5aGV6IGV6IGEgbGVtZXogdGFydG96aWsiCisKK21zZ2lkICJsb2NhdGlvbiIKK21zZ3N0ciAiaGVseSIKKworbXNnaWQgIiIKKyJPcmlnaW4gb2YgbWVkaWEgYXMgYSBVUkkgKGxvY2F0aW9uLCB3aGVyZSB0aGUgb3JpZ2luYWwgb2YgdGhlIGZpbGUgb3Igc3RyZWFtICIKKyJpcyBob3N0ZWQpIgorbXNnc3RyICIiCisiQSBtw6lkaWEgZXJlZGV0ZSBVUkkgY8OtbWvDqW50IChheiBhIGhlbHksIGFob2wgYXogZXJlZGV0aSBmw6FqbCB2YWd5IG3FsXNvciAiCisibWVndGFsw6FsaGF0w7MpIgorCittc2dpZCAiaG9tZXBhZ2UiCittc2dzdHIgImhvbmxhcCIKKworbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCittc2dzdHIgIkEgbcOpZGlhIGhvbmxhcGphIChlbMWRYWTDsyB2YWd5IGZpbG0gaG9ubGFwamEpIgorCittc2dpZCAiZGVzY3JpcHRpb24iCittc2dzdHIgImxlw61yw6FzIgorCittc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgorbXNnc3RyICJheiBhZGF0b2thdCBsZcOtcsOzIHLDtnZpZCBzesO2dmVnIgorCittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAidmVyemnDsyIKKworbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgorbXNnc3RyICJheiBhZGF0b2sgdmVyemnDs3N6w6FtYSIKKworbXNnaWQgIklTUkMiCittc2dzdHIgIklTUkMiCisKK21zZ2lkICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCittc2dzdHIgIiIKKyJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIOKAkyBsw6FzZDogaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKKworbXNnaWQgIm9yZ2FuaXphdGlvbiIKK21zZ3N0ciAic3plcnZlemV0IgorCittc2dpZCAiY29weXJpZ2h0IgorbXNnc3RyICJjb3B5cmlnaHQiCisKK21zZ2lkICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJheiBhZGF0b2sgY29weXJpZ2h0IG1lZ2plZ3l6w6lzZSIKKworbXNnaWQgImNvcHlyaWdodCB1cmkiCittc2dzdHIgInbDqWRqZWd5IHVyaSIKKworbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiQXogYWRhdG9rIHbDqWRqZWd5bWVnamVneXrDqXPDqW5layBVUkkgY8OtbWUiCisKKyMsIGZ1enp5Cittc2dpZCAiZW5jb2RlZCBieSIKK21zZ3N0ciAia8OzZG9sw7MiCisKK21zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICJjb250YWN0IgorbXNnc3RyICJuw6l2amVneSIKKworbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCittc2dzdHIgImthcGNzb2xhdGluZm9ybcOhY2nDs2siCisKK21zZ2lkICJsaWNlbnNlIgorbXNnc3RyICJsaWNlbmMiCisKK21zZ2lkICJsaWNlbnNlIG9mIGRhdGEiCittc2dzdHIgImF6IGFkYXRvayBsaWNlbmNlIgorCittc2dpZCAibGljZW5zZSB1cmkiCittc2dzdHIgImxpY2VuYyB1cmkiCisKK21zZ2lkICJVUkkgdG8gdGhlIGxpY2Vuc2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgIkF6IGFkYXRvayBsaWNlbmPDqW5layBVUkkgY8OtbWUiCisKK21zZ2lkICJwZXJmb3JtZXIiCittc2dzdHIgImVsxZFhZMOzIgorCittc2dpZCAicGVyc29uKHMpIHBlcmZvcm1pbmciCittc2dzdHIgImF6IGVsxZFhZMOzKGspIgorCittc2dpZCAiY29tcG9zZXIiCittc2dzdHIgInplbmVzemVyesWRIgorCittc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nIgorbXNnc3RyICJhIGZlbHbDqXRlbCBzemVyesWRaSIKKworbXNnaWQgImR1cmF0aW9uIgorbXNnc3RyICJpZMWRdGFydGFtIgorCittc2dpZCAibGVuZ3RoIGluIEdTdHJlYW1lciB0aW1lIHVuaXRzIChuYW5vc2Vjb25kcykiCittc2dzdHIgImhvc3N6IEdTdHJlYW1lciBpZMWRZWd5c8OpZ2VrYmVuIChuYW5vbcOhc29kcGVyYykiCisKK21zZ2lkICJjb2RlYyIKK21zZ3N0ciAia29kZWsiCisKK21zZ2lkICJjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImF6IGFkYXRvayB0w6Fyb2zDoXPDoXJhIGhhc3puw6FsdCBrb2RlayIKKworbXNnaWQgInZpZGVvIGNvZGVjIgorbXNnc3RyICJ2aWRlb2tvZGVrIgorCittc2dpZCAiY29kZWMgdGhlIHZpZGVvIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJhIHZpZGVvYWRhdG9rIHTDoXJvbMOhc8OhcmEgaGFzem7DoWx0IGtvZGVrIgorCittc2dpZCAiYXVkaW8gY29kZWMiCittc2dzdHIgImhhbmdrb2RlayIKKworbXNnaWQgImNvZGVjIHRoZSBhdWRpbyBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiYSBoYW5nYWRhdG9rIHTDoXJvbMOhc8OhcmEgaGFzem7DoWx0IGtvZGVrIgorCittc2dpZCAic3VidGl0bGUgY29kZWMiCittc2dzdHIgImZlbGlyYXRrb2RlayIKKworbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiYSBmZWxpcmF0YWRhdG9rIHTDoXJvbMOhc8OhcmEgaGFzem7DoWx0IGtvZGVrIgorCittc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKK21zZ3N0ciAidMOhcm9sw7Nmb3Jtw6F0dW0iCisKK21zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiYXogYWRhdG9rIHTDoXJvbMOhc8OhcmEgaGFzem7DoWx0IHTDoXJvbMOzZm9ybcOhdHVtIgorCittc2dpZCAiYml0cmF0ZSIKK21zZ3N0ciAiYml0c2ViZXNzw6lnIgorCittc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAicG9udG9zIHZhZ3kgw6F0bGFnb3MgYml0c2ViZXNzw6lnIGJpdC9tcC1iZW4iCisKK21zZ2lkICJub21pbmFsIGJpdHJhdGUiCittc2dzdHIgIm7DqXZsZWdlcyBiaXRzZWJlc3PDqWciCisKK21zZ2lkICJub21pbmFsIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJuw6l2bGVnZXMgYml0c2ViZXNzw6lnIGJpdC9tcC1iZW4iCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCittc2dzdHIgIm1pbmltw6FsaXMgYml0c2ViZXNzw6lnIgorCittc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAibWluaW3DoWxpcyBiaXRzZWJlc3PDqWcgYml0L21wLWJlbiIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSIKK21zZ3N0ciAibWF4aW3DoWxpcyBiaXRzZWJlc3PDqWciCisKK21zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJtYXhpbcOhbGlzIGJpdHNlYmVzc8OpZyBiaXQvbXAtYmVuIgorCittc2dpZCAiZW5jb2RlciIKK21zZ3N0ciAia8OzZG9sw7MiCisKK21zZ2lkICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgorbXNnc3RyICJheiBhZGF0Zm9seWFtIGvDs2RvbMOhc8OhcmEgaGFzem7DoWx0IGvDs2RvbMOzIgorCittc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgorbXNnc3RyICJrw7Nkb2zDsyB2ZXJ6acOzc3rDoW1hIgorCittc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiYXogYWRhdGZvbHlhbSBrw7Nkb2zDoXPDoXJhIGhhc3puw6FsdCBrw7Nkb2zDsyB2ZXJ6acOzc3rDoW1hIgorCittc2dpZCAic2VyaWFsIgorbXNnc3RyICJzb3JvcyIKKworbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCittc2dzdHIgImEgZGFsIHNvcnN6w6FtYSIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKK21zZ3N0ciAidmlzc3phasOhdHN6w6FzaSBoYW5nZXLFkTogZGFsIGhhbmdvc8OtdMOhc2EiCisKK21zZ2lkICJ0cmFjayBnYWluIGluIGRiIgorbXNnc3RyICJkYWwgaGFuZ29zw610w6FzYSBkQi1iZW4iCisKK21zZ2lkICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCittc2dzdHIgInZpc3N6YWrDoXRzesOhc2kgaGFuZ2VyxZE6IGRhbCBoYW5nZXJlasOpbmVrIGNzw7pjc8OpcnTDqWtlIgorCittc2dpZCAicGVhayBvZiB0aGUgdHJhY2siCittc2dzdHIgImEgZGFsIGhhbmdlcmVqw6luZWsgY3PDumNzw6lydMOpa2UiCisKK21zZ2lkICJyZXBsYXlnYWluIGFsYnVtIGdhaW4iCittc2dzdHIgInZpc3N6YWrDoXRzesOhc2kgaGFuZ2VyxZE6IGFsYnVtIGhhbmdvc8OtdMOhc2EiCisKK21zZ2lkICJhbGJ1bSBnYWluIGluIGRiIgorbXNnc3RyICJhbGJ1bSBoYW5nb3PDrXTDoXNhIGRCLWJlbiIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKK21zZ3N0ciAidmlzc3phasOhdHN6w6FzaSBoYW5nZXLFkTogYWxidW0gaGFuZ2VyZWrDqW5layBjc8O6Y3PDqXJ0w6lrZSIKKworbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgorbXNnc3RyICJheiBhbGJ1bSBoYW5nZXJlasOpbmVrIGNzw7pjc8OpcnTDqWtlIgorCittc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCittc2dzdHIgInZpc3N6YWrDoXRzesOhc2kgaGFuZ2VyxZEgcmVmZXJlbmNpYXN6aW50amUiCisKK21zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgorbXNnc3RyICJzesOhbSDDqXMgYWxidW0gaGFuZ29zw610w6Fzw6FuYWsgcmVmZXJlbmNpYXN6aW50amUiCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIgorbXNnc3RyICJueWVsdmkga8OzZCIKKworbXNnaWQgImxhbmd1YWdlIGNvZGUgZm9yIHRoaXMgc3RyZWFtLCBjb25mb3JtaW5nIHRvIElTTy02MzktMSIKK21zZ3N0ciAiYXogYWRhdGZvbHlhbSBJU08tNjM5LTEgc3phYnbDoW55bmFrIG1lZ2ZlbGVsxZEgbnllbHZpIGvDs2RqYSIKKworbXNnaWQgImltYWdlIgorbXNnc3RyICJrw6lwIgorCittc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiYXogYWRhdGZvbHlhbWhveiBrYXBjc29sw7Nkw7Mga8OpcCIKKworIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCittc2dpZCAicHJldmlldyBpbWFnZSIKK21zZ3N0ciAiZWzFkW7DqXpldGkga8OpcCIKKworbXNnaWQgInByZXZpZXcgaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiYXogYWRhdGZvbHlhbWhveiBrYXBjc29sw7Nkw7MgZWzFkW7DqXpldGkga8OpcCIKKworbXNnaWQgImF0dGFjaG1lbnQiCittc2dzdHIgIm1lbGzDqWtsZXQiCisKK21zZ2lkICJmaWxlIGF0dGFjaGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICJheiBhZGF0Zm9seWFtaG96IG1lbGzDqWtlbHQgZsOhamwiCisKK21zZ2lkICJiZWF0cyBwZXIgbWludXRlIgorbXNnc3RyICJwZXJjZW5rw6ludGkgw7x0w6lzZWsgc3rDoW1hIgorCittc2dpZCAibnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8iCittc2dzdHIgInBlcmNlbmvDqW50aSDDvHTDqXNlayBzesOhbWEgYSBoYW5nYmFuIgorCittc2dpZCAia2V5d29yZHMiCittc2dzdHIgImt1bGNzc3phdmFrIgorCittc2dpZCAiY29tbWEgc2VwYXJhdGVkIGtleXdvcmRzIGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQiCittc2dzdHIgImEgdGFydGFsbWF0IGxlw61yw7MsIHZlc3N6xZF2ZWwgZWx2w6FsYXN6dG90dCBrdWxjc3N6YXZhayIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBuYW1lIgorbXNnc3RyICJmw7ZsZHJhanppIGhlbHkgbmV2ZSIKKworbXNnaWQgIiIKKyJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgorInByb2R1Y2VkIgorbXNnc3RyICIiCisiZW1iZXJlayDDoWx0YWwgb2x2YXNoYXTDsyBsZcOtcsOzIGplbGxlZ8WxIGhlbHksIGFob2wgYSBtw6lkaWEgZmVsdsOpdGVscmUgdmFneSAiCisiZWzFkcOhbGzDrXTDoXNyYSBrZXLDvGx0IgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGxhdGl0dWRlIgorbXNnc3RyICJmw7ZsZHJhanppIGhlbHkgc3rDqWxlc3PDqWdlIgorCittc2dpZCAiIgorImdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yICIKKyJzb3V0aGVybiBsYXRpdHVkZXMpIgorbXNnc3RyICIiCisiYXpvbiBoZWx5IGbDtmxkcmFqemkgc3rDqWxlc3PDqWdlLCBhaG9sIGEgbcOpZGlhIGZlbHbDqXRlbHJlIHZhZ3kgZWzFkcOhbGzDrXTDoXNyYSAiCisia2Vyw7xsdCBmb2tva2JhbiwgYSBXR1M4NC1uZWsgbWVnZmVsZWzFkWVuIChudWxsYSBheiBlZ3llbmzDrXTFkW7DqWwsIG5lZ2F0w612ICIKKyLDqXJ0w6lrZWsgZMOpbGkgc3rDqWxlc3PDqWdla2VuKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBsb25naXR1ZGUiCittc2dzdHIgImbDtmxkcmFqemkgaGVseSBob3NzesO6c8OhZ2EiCisKK21zZ2lkICIiCisiZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCisibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgorbXNnc3RyICIiCisiYXpvbiBoZWx5IGbDtmxkcmFqemkgaG9zc3rDunPDoWdhLCBhaG9sIGEgbcOpZGlhIGZlbHbDqXRlbHJlIHZhZ3kgZWzFkcOhbGzDrXTDoXNyYSAiCisia2Vyw7xsdCBmb2tva2JhbiwgYSBXR1M4NC1uZWsgbWVnZmVsZWzFkWVuIChudWxsYSBhIGtlemTFkSBkw6lsa8O2cm7DqWwgIgorIkdyZWVud2ljaGJlbiwgbmVnYXTDrXYgw6lydMOpa2VrIG55dWdhdGkgaG9zc3rDunPDoWdva29uKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBlbGV2YXRpb24iCittc2dzdHIgImbDtmxkcmFqemkgaGVseSBtYWdhc3PDoWdhIgorCittc2dpZCAiIgorImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCisiYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKK21zZ3N0ciAiIgorImF6b24gaGVseSBmw7ZsZHJhanppIG1hZ2Fzc8OhZ2EsIGFob2wgYSBtw6lkaWEgZmVsdsOpdGVscmUgdmFneSBlbMWRw6FsbMOtdMOhc3JhICIKKyJrZXLDvGx0IG3DqXRlcmJlbiwgYSBXR1M4NC1uZWsgbWVnZmVsZWzFkWVuIChudWxsYSBheiDDoXRsYWdvcyB0ZW5nZXJzemludGVuKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBjb3VudHJ5IgorbXNnc3RyICJmw7ZsZHJhanppIGhlbHkgb3JzesOhZ2EiCisKK21zZ2lkICJjb3VudHJ5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKK21zZ3N0ciAib3JzesOhZyAoYW5nb2wgbsOpdiksIGFob2wgYSBtw6lkaWEgZmVsdsOpdGVscmUgdmFneSBlbMWRw6FsbMOtdMOhc3JhIGtlcsO8bHQiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKK21zZ3N0ciAiZsO2bGRyYWp6aSBoZWx5IHbDoXJvc2EiCisKK21zZ2lkICJjaXR5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKK21zZ3N0ciAidsOhcm9zIChhbmdvbCBuw6l2KSwgYWhvbCBhIG3DqWRpYSBmZWx2w6l0ZWxyZSB2YWd5IGVsxZHDoWxsw610w6FzcmEga2Vyw7xsdCIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKK21zZ3N0ciAiZsO2bGRyYWp6aSBoZWx5IHLDqXN6aGVseWUiCisKK21zZ2lkICIiCisiYSBsb2NhdGlvbiB3aGl0aGluIGEgY2l0eSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgb3IgY3JlYXRlZCAoZS5nLiAiCisidGhlIG5laWdoYm9yaG9vZCkiCittc2dzdHIgIiIKKyJhIHbDoXJvc29uIGJlbMO8bGkgaGVseSwgYWhvbCBhIG3DqWRpYSBlbMWRw6FsbMOtdMOhc3JhIHZhZ3kgbMOpdHJlaG96w6FzcmEga2Vyw7xsdCAiCisiKHDDqWxkw6F1bCBrw7ZybnnDqWspIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGhvcml6b250YWwgZXJyb3IiCittc2dzdHIgImbDtmxkcmFqemkgaGVseSB2w616c3ppbnRlcyBoaWLDoWphIgorCittc2dpZCAiZXhwZWN0ZWQgZXJyb3Igb2YgdGhlIGhvcml6b250YWwgcG9zaXRpb25pbmcgbWVhc3VyZXMgKGluIG1ldGVycykiCittc2dzdHIgImEgdsOtenN6aW50ZXMgcG96w61jaW9uw6Fsw6FzaSDDqXJ0w6lrZWsgdsOhcnQgaGliw6FqYSAobcOpdGVyYmVuKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKK21zZ3N0ciAiZsO2bGRyYWp6aSBoZWx5IG1vemfDoXNpIHNlYmVzc8OpZ2UiCisKK21zZ2lkICIiCisibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBpbiBtL3MiCittc2dzdHIgImEgZmVsdmV2xZFlc3prw7Z6IG1vemfDoXNpIHNlYmVzc8OpZ2UgYSBmZWx2w6l0ZWwga8Opc3rDrXTDqXNla29yLCBtL3MtYmFuIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKK21zZ3N0ciAiZsO2bGRyYWp6aSBoZWx5IG1vemfDoXNpIGlyw6FueWEiCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgorIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKKyJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKyJhIG3DqWRpYSBmZWx2w6l0ZWzDqXQgdsOpZ3rFkSBlc3prw7Z6IG1vemfDoXNpIGlyw6FuecOhdCBqZWx6aS4gbGViZWfFkXBvbnRvc2FuICIKKyLDoWJyw6F6b2x0IGZva29rIGvDqXB2aXNlbGlrLCBhIDAgYSBmw7ZsZHJhanppIMOpc3pha290IGplbHppIMOpcyBheiDDs3JhIGrDoXLDoXPDoW5hayAiCisiaXLDoW55w6FiYSBuxZEuIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgorbXNnc3RyICJmw7ZsZHJhanppIGhlbHkgZmVsdsOpdGVsaSBpcsOhbnlhIgorCittc2dpZCAiIgorImluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcgIGEgbWVkaWEuICIKKyJJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50ICByZXByZXNlbnRhdGlvbiwgMCBtZWFucyB0aGUgIgorImdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgorbXNnc3RyICIiCisiYSBtw6lkaWEgZmVsdsOpdGVsw6l0IHbDqWd6xZEgZXN6a8O2eiBpcsOhbnnDoXQgamVsemkuIGxlYmVnxZFwb250b3NhbiDDoWJyw6F6b2x0IGZva29rICIKKyJrw6lwdmlzZWxpaywgYSAwIGEgZsO2bGRyYWp6aSDDqXN6YWtvdCBqZWx6aSDDqXMgYXogw7NyYSBqw6Fyw6Fzw6FuYWsgaXLDoW55w6FiYSBuxZEuIgorCisjLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKK21zZ2lkICJzaG93IG5hbWUiCittc2dzdHIgIm3FsXNvcm7DqXYiCisKK21zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgorbXNnc3RyICJBIHR2L3BvZGNhc3Qvc29yb3phdCBtxbFzb3IgbmV2ZSwgYW1lbHlixZFsIGEgbcOpZGlhIHN6w6FybWF6aWsiCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQorbXNnaWQgInNob3cgc29ydG5hbWUiCittc2dzdHIgIm3FsXNvciByZW5kZXrDqXNpIG5ldmUiCisKK21zZ2lkICIiCisiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIiIKKyJBIHR2L3BvZGNhc3Qvc29yb3phdCBtxbFzb3IgbmV2ZSwgYW1lbHlixZFsIGEgbcOpZGlhIHN6w6FybWF6aWssIHJlbmRlesOpc2kgY8OpbHJhIgorCittc2dpZCAiZXBpc29kZSBudW1iZXIiCittc2dzdHIgImVwaXrDs2RzesOhbSIKKworbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICJBem9uIMOpdmFkb24gYmVsw7xsaSBlcGl6w7NkIHN6w6FtYSwgYW1lbHluZWsgZXogYSBtw6lkaWEgcsOpc3plIgorCittc2dpZCAic2Vhc29uIG51bWJlciIKK21zZ3N0ciAiw6l2YWRzesOhbSIKKworbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICJBem9uIG3FsXNvciDDqXZhZHN6w6FtYSwgYW1lbHluZWsgZXogYSBtw6lkaWEgcsOpc3plIgorCittc2dpZCAibHlyaWNzIgorbXNnc3RyICJkYWxzesO2dmVnIgorCittc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgorbXNnc3RyICJBIG3DqWRpYSBkYWxzesO2dmVnZSIKKworbXNnaWQgImNvbXBvc2VyIHNvcnRuYW1lIgorbXNnc3RyICJzemVyesWRIHJlbmRlesOpc2kgbmV2ZSIKKworbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZywgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgImEgZmVsdsOpdGVsdCBzemVyesWRIHN6ZW3DqWx5ZWssIHJlbmRlesOpc2kgY8OpbGxhbCIKKworbXNnaWQgImdyb3VwaW5nIgorbXNnc3RyICJjc29wb3J0b3PDrXTDoXMiCisKK21zZ2lkICIiCisiR3JvdXBzIHJlbGF0ZWQgbWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSB0cmFja3MsIGxpa2UgdGhlIGRpZmZlcmVudCBwaWVjZXMgIgorIm9mIGEgY29uY2VydG8uIEl0IGlzIGEgaGlnaGVyIGxldmVsIHRoYW4gYSB0cmFjaywgYnV0IGxvd2VyIHRoYW4gYW4gYWxidW0iCittc2dzdHIgIiIKKyJUw7ZiYiBzesOhbW90IMOhdGZvZ8OzIG3DqWRpYSBjc29wb3J0b3PDrXTDoXNhLCBww6lsZMOhdWwgZWd5IGtvbmNlcnQga8O8bMO2bmLDtnrFkSAiCisiZGFyYWJqYWkuIE1hZ2FzYWJiIHN6aW50xbEgYSBzesOhbW7DoWwsIGRlIGFsYWNzb255YWJiIGF6IGFsYnVtbsOhbCIKKworbXNnaWQgInVzZXIgcmF0aW5nIgorbXNnc3RyICJmZWxoYXN6bsOhbMOzaSDDqXJ0w6lrZWzDqXMiCisKK21zZ2lkICIiCisiUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCisidGhpcyBtZWRpYSIKK21zZ3N0ciAiIgorIkZlbGhhc3puw6Fsw7Mgw6FsdGFsIHTDoXJzw610b3R0IMOpcnTDqWtlbMOpcy4gTWluw6lsIG1hZ2FzYWJiLCBhbm7DoWwgam9iYmFuIGtlZHZlbGkgIgorImEgZmVsaGFzem7DoWzDsyBhIG3DqWRpw6F0IgorCittc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKK21zZ3N0ciAiZXN6a8O2eiBnecOhcnTDs2phIgorCittc2dpZCAiTWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKK21zZ3N0ciAiQSBtw6lkaWEgZWzFkcOhbGzDrXTDoXPDoWhveiBoYXN6bsOhbHQgZXN6a8O2eiBnecOhcnTDs2phIgorCittc2dpZCAiZGV2aWNlIG1vZGVsIgorbXNnc3RyICJlc3prw7Z6bW9kZWxsIgorCittc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICJBIG3DqWRpYSBsw6l0cmVob3rDoXPDoXJhIGhhc3puw6FsdCBlc3prw7Z6bW9kZWxsIgorCittc2dpZCAiYXBwbGljYXRpb24gbmFtZSIKK21zZ3N0ciAiYWxrYWxtYXrDoXMgbmV2ZSIKKworbXNnaWQgIkFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSIKK21zZ3N0ciAiQSBtw6lkaWEgbMOpdHJlaG96w6Fzw6FyYSBoYXN6bsOhbHQgYWxrYWxtYXrDoXMiCisKK21zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgorbXNnc3RyICJhbGthbG1hesOhc2FkYXRvayIKKworbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCittc2dzdHIgIlRldHN6xZFsZWdlcywgYSBtw6lkacOhYmEgbWVudGVuZMWRIGFsa2FsbWF6w6FzYWRhdG9rIgorCittc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCittc2dzdHIgImvDqXAgdMOham9sw6FzYSIKKworbXNnaWQgIkhvdyB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCBiZWZvcmUgZGlzcGxheSIKK21zZ3N0ciAiQSBrw6lwIGhvZ3lhbiBmb3JnYXRhbmTDsyB2YWd5IHTDvGtyw7Z6ZW5kxZEgbWVnamVsZW7DrXTDqXMgZWzFkXR0IgorCittc2dpZCAiLCAiCittc2dzdHIgIiwgIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCittc2dzdHIgIkhJQkE6IGEga8O2dmV0a2V6xZEgZWxlbXTFkWw6ICVzOiAlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorIlRvdsOhYmJpIGhpYmFrZXJlc8Opc2kgaW5mb3Jtw6FjacOzazpcbiIKKyIlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgInNwZWNpZmllZCBlbXB0eSBiaW4gXCIlc1wiLCBub3QgYWxsb3dlZCIKK21zZ3N0ciAiYSBtZWdhZG90dCDDvHJlcyDigJ4lc+KAnSB0w6Fyb2zDsyBuZW0gZW5nZWTDqWx5ZXpldHQiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYmluIFwiJXNcIiwgc2tpcHBpbmciCittc2dzdHIgIm5pbmNzIOKAniVz4oCdIHTDoXJvbMOzLCDDoXRsw6lww6lzIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiIKK21zZ3N0ciAibmluY3Mg4oCeJXPigJ0gdHVsYWpkb25zw6FnIGEoeikg4oCeJXPigJ0gZWxlbWJlbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc2V0IHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiB0byBcIiVzXCIiCittc2dzdHIgIm5lbSDDoWxsw610aGF0w7MgYmUgYSh6KSDigJ4lMiRz4oCdIGVsZW0g4oCeJTEkc+KAnSB0dWxhamRvbnPDoWdhIOKAniUzJHPigJ0gw6lydMOpa3JlIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgorbXNnc3RyICIlcyBuZW0gbGlua2VsaGV0xZEgYSBrw7Z2ZXRrZXrFkXJlOiAlcyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKK21zZ3N0ciAibmluY3Mg4oCeJXPigJ0gZWxlbSIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCittc2dzdHIgImEoeikg4oCeJXPigJ0ga8OpcGVzc8OpZyBuZW0gZWxlbWV6aGV0xZEiCisKK21zZ2lkICJsaW5rIHdpdGhvdXQgc291cmNlIGVsZW1lbnQiCittc2dzdHIgImxpbmsgZm9ycsOhc2VsZW0gbsOpbGvDvGwiCisKK21zZ2lkICJsaW5rIHdpdGhvdXQgc2luayBlbGVtZW50IgorbXNnc3RyICJsaW5rIG55ZWzFkWVsZW0gbsOpbGvDvGwiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgIm5pbmNzIGZvcnLDoXNlbGVtIGEga8O2dmV0a2V6xZEgVVJJIGPDrW1oZXo6IOKAniVz4oCdIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGVsZW1lbnQgdG8gbGluayBVUkkgXCIlc1wiIHRvIgorbXNnc3RyICJuaW5jcyBlbGVtLCBhbWVseWhleiBhKHopIOKAniVz4oCdIFVSSSBsaW5rZWxoZXTFkSBsZW5uZSIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgIm5pbmNzIG55ZWzFkWVsZW0gYSBrw7Z2ZXRrZXrFkSBVUkkgY8OtbWhlejog4oCeJXPigJ0iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxpbmsgc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJuZW0gbGlua2VsaGV0xZEgbnllbMWRZWxlbSBhIGvDtnZldGtlesWRIFVSSSBjw61taGV6OiDigJ4lc+KAnSIKKworbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgorbXNnc3RyICLDvHJlcyBhZGF0Y3NhdG9ybmEgbmVtIGVuZ2Vkw6lseWV6ZXR0IgorCittc2dpZCAiSW50ZXJuYWwgY2xvY2sgZXJyb3IuIgorbXNnc3RyICJCZWxzxZEgw7NyYWhpYmEuIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKK21zZ3N0ciAiQmVsc8WRIGFkYXRmb2x5YW0taGliYS4iCisKK21zZ2lkICJBIGxvdCBvZiBidWZmZXJzIGFyZSBiZWluZyBkcm9wcGVkLiIKK21zZ3N0ciAiUmVuZ2V0ZWsgcHVmZmVyIGtlcsO8bCBlbGRvYsOhc3JhLiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBwcm9ibGVtLiIKK21zZ3N0ciAiQmVsc8WRIGFkYXRmb2x5YW0tcHJvYmzDqW1hLiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiQmVsc8WRIGFkYXRmb2x5YW0taGliYS4iCisKK21zZ2lkICJGaWx0ZXIgY2FwcyIKK21zZ3N0ciAiS8OpcGVzc8OpZ2VrIHN6xbFyw6lzZSIKKworbXNnaWQgIiIKKyJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKKyJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgorbXNnc3RyICIiCisiQXogZW5nZWTDqWx5ZXpoZXTFkSBrw6lwZXNzw6lnZWsga29ybMOhdG96w6FzYSAoYSBOVUxMLCBBTlktdCBqZWxlbnQpLiBFemVuICIKKyJ0dWxhamRvbnPDoWcgYmXDoWxsw610w6FzYSBhIGJpenRvc8OtdG90dCBHc3RDYXBzIG9iamVrdHVtcmEgaGl2YXRrb3ppay4iCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiTmluY3MgZsOhamxuw6l2IG1lZ2FkdmEgYXogw61yw6FzaG96LiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCittc2dzdHIgIk5lbSBsZWhldCDDrXLDoXNyYSBtZWdueWl0bmkgYSh6KSDigJ4lc+KAnSBmw6FqbHQuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNsb3NpbmcgZmlsZSBcIiVzXCIuIgorbXNnc3RyICJIaWJhIGEoeikg4oCeJXPigJ0gZsOhamwgYmV6w6Fyw6FzYSBrw7Z6YmVuLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiSGliYSBhIGvDtnZldGtlesWRIGbDoWpsYmFuIHZhbMOzIHRla2Vyw6lzIGvDtnpiZW46IOKAniVz4oCdLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiSGliYSBhKHopIOKAniVz4oCdIGbDoWpsIMOtcsOhc2Ega8O2emJlbi4iCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiTmluY3MgbWVnYWR2YSBmw6FqbG7DqXYgYXogb2x2YXPDoXNob3ouIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiTmVtIG55aXRoYXTDsyBtZWcgYSh6KSDigJ4lc+KAnSBmw6FqbCBvbHZhc8Ohc3JhLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGluZm8gb24gXCIlc1wiLiIKK21zZ3N0ciAiTmVtIGvDqXJoZXTFkWsgbGUgaW5mb3Jtw6FjacOzayBhIGvDtnZldGtlesWRa3LFkWw6IOKAniVz4oCdLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIgorbXNnc3RyICLigJ4lc+KAnSBlZ3kga8O2bnl2dMOhci4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZSBcIiVzXCIgaXMgYSBzb2NrZXQuIgorbXNnc3RyICJBKHopIOKAniVz4oCdIGbDoWpsIGVneSBmb2dsYWxhdC4iCisKK21zZ2lkICJGYWlsZWQgYWZ0ZXIgaXRlcmF0aW9ucyBhcyByZXF1ZXN0ZWQuIgorbXNnc3RyICJJc23DqXRsw6lzZWsgdXTDoW4ga8OpcsOpc8OpcmUgbWVnaGnDunN1bHQuIgorCittc2dpZCAiTm8gVGVtcCBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIKK21zZ3N0ciAiTmluY3MgbWVnYWR2YSBpZGVpZ2xlbmVzIGvDtm55dnTDoXIuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcCBmaWxlIFwiJXNcIi4iCittc2dzdHIgIk5lbSBob3poYXTDsyBsw6l0cmUgYSBrw7Z2ZXRrZXrFkSBpZGVpZ2xlbmVzIGbDoWpsOiDigJ4lc+KAnS4iCisKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIgorbXNnc3RyICJIaWJhIGEgbGV0w7ZsdMOpc2kgZsOhamwgw61yw6FzYSBrw7Z6YmVuLiIKKworbXNnaWQgImNhcHMiCittc2dzdHIgImvDqXBlc3PDqWdlayIKKworbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCittc2dzdHIgImF6IGFkYXRmb2x5YW1iYW4gw6lzemxlbHQga8OpcGVzc8OpZ2VrIgorCittc2dpZCAibWluaW11bSIKK21zZ3N0ciAibWluaW11bSIKKworbXNnaWQgIm1heGltdW0iCittc2dzdHIgIm1heGltdW0iCisKK21zZ2lkICJmb3JjZSBjYXBzIgorbXNnc3RyICJuYWd5YmV0xbFrIGvDqW55c3plcsOtdMOpc2UiCisKK21zZ2lkICJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIKK21zZ3N0ciAibmFneWJldMWxayBrw6lueXN6ZXLDrXTDqXNlIGJldMWxa2VyZXPDqXMgbsOpbGvDvGwiCisKK21zZ2lkICJTdHJlYW0gY29udGFpbnMgbm8gZGF0YS4iCittc2dzdHIgIkF6IGFkYXRmb2x5YW0gbmVtIHRhcnRhbG1heiBhZGF0b2thdC4iCisKK21zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgorbXNnc3RyICJNZWd2YWzDs3PDrXRvdHQgZmVsw7xsZXRlazpcbiIKKworbXNnaWQgInJlYWRhYmxlIgorbXNnc3RyICJvbHZhc2hhdMOzIgorCittc2dpZCAid3JpdGFibGUiCittc2dzdHIgIsOtcmhhdMOzIgorCittc2dpZCAiY29udHJvbGxhYmxlIgorbXNnc3RyICJ2ZXrDqXJlbGhldMWRIgorCittc2dpZCAiY2hhbmdlYWJsZSBpbiBOVUxMLCBSRUFEWSwgUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUiCittc2dzdHIgIm3Ds2Rvc8OtdGhhdMOzIGEgTlVMTCwgS8OJU1osIFNaw5xORVRFTCB2YWd5IExFSsOBVFNaw4FTIMOhbGxhcG90YmFuIgorCittc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwsIFJFQURZIG9yIFBBVVNFRCBzdGF0ZSIKK21zZ3N0ciAiY3NhayBhIE5VTEwsIEvDiVNaIHZhZ3kgU1rDnE5FVEVMIMOhbGxhcG90YmFuIG3Ds2Rvc8OtdGhhdMOzIgorCittc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwgb3IgUkVBRFkgc3RhdGUiCittc2dzdHIgImNzYWsgYSBOVUxMIHZhZ3kgS8OJU1ogw6FsbGFwb3RiYW4gbcOzZG9zw610aGF0w7MiCisKK21zZ2lkICJCbGFja2xpc3RlZCBmaWxlczoiCittc2dzdHIgIkZla2V0ZWxpc3TDoXMgZsOhamxvazoiCisKK21zZ2lkICJUb3RhbCBjb3VudDogIgorbXNnc3RyICJUZWxqZXMgc3rDoW06ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgorbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKK21zZ3N0clswXSAiJWQgZmVrZXRlbGlzdMOhcyBmw6FqbCIKK21zZ3N0clsxXSAiJWQgZmVrZXRlbGlzdMOhcyBmw6FqbCIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBwbHVnaW4iCittc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCittc2dzdHJbMF0gIiVkIGLFkXbDrXRtw6lueSIKK21zZ3N0clsxXSAiJWQgYsWRdsOtdG3DqW55IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdCBlbnRyeSIKK21zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0IGVudHJpZXMiCittc2dzdHJbMF0gIiVkIGZla2V0ZWxpc3RhLWJlamVneXrDqXMiCittc2dzdHJbMV0gIiVkIGZla2V0ZWxpc3RhLWJlamVneXrDqXMiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgZmVhdHVyZSIKK21zZ2lkX3BsdXJhbCAiJWQgZmVhdHVyZXMiCittc2dzdHJbMF0gIiVkIHN6b2xnw6FsdGF0w6FzIgorbXNnc3RyWzFdICIlZCBzem9sZ8OhbHRhdMOhcyIKKworbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKK21zZ3N0ciAiQXogw7Zzc3plcyBlbGVtIGtpw61yw6FzYSIKKworbXNnaWQgIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHIgIkZla2V0ZWxpc3TDoXMgZsOhamxvayBsaXN0w6Fqw6FuYWsga2nDrXLDoXNhIgorCittc2dpZCAiIgorIlByaW50IGEgbWFjaGluZS1wYXJzYWJsZSBsaXN0IG9mIGZlYXR1cmVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIG9yIGFsbCAiCisicGx1Z2lucyBwcm92aWRlLlxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBpbiBjb25uZWN0aW9uIHdpdGggZXh0ZXJuYWwgIgorImF1dG9tYXRpYyBwbHVnaW4gaW5zdGFsbGF0aW9uIG1lY2hhbmlzbXMiCittc2dzdHIgIiIKKyJBIG1lZ2Fkb3R0IGLFkXbDrXRtw6lueSDDoWx0YWwgYml6dG9zw610b3R0IHN6b2xnw6FsdGF0w6Fzb2sgZ8OpcGlsZWcgZmVsZG9sZ296aGF0w7MgIgorImxpc3TDoWrDoW5hayBracOtcsOhc2EuXG4iCisiS8O8bHPFkSBixZF2w610bcOpbnl0ZWxlcMOtdMOpc2kgbcOzZHN6ZXJla2tlbCBlZ3nDvHR0IGhhc3pub3MuIgorCittc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgorbXNnc3RyICJBIGLFkXbDrXRtw6lueSB0YXJ0YWxtw6FuYWsgZmVsc29yb2zDoXNhIgorCittc2dpZCAiUHJpbnQgc3VwcG9ydGVkIFVSSSBzY2hlbWVzLCB3aXRoIHRoZSBlbGVtZW50cyB0aGF0IGltcGxlbWVudCB0aGVtIgorbXNnc3RyICJUw6Ftb2dhdG90dCBVUkkgc8OpbcOhayBracOtcsOhc2EsIGF6IGF6b2thdCBtZWd2YWzDs3PDrXTDsyBlbGVtbWVsIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgorbXNnc3RyICJOZW0gdMO2bHRoZXTFkSBiZSBhIGLFkXbDrXRtw6lueWbDoWpsOiAlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgorbXNnc3RyICJOaW5jcyBpbHllbiBlbGVtIHZhZ3kgYsWRdsOtdG3DqW55OiDigJ4lc+KAnVxuIgorCittc2dpZCAiSW5kZXggc3RhdGlzdGljcyIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIGVsZW1lbnQgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAiJXUgc3rDoW3DuiDDvHplbmV0IMOpcmtlemV0dCBhIGvDtnZldGtlesWRIGVsZW10xZFsOiDigJ4lc+KAnSAoJXMpLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKK21zZ3N0ciAiJXUgc3rDoW3DuiDDvHplbmV0IMOpcmtlemV0dCBhKHopIOKAniVzOiVz4oCdICglcykga2l0w7ZsdMWRdMWRbDogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICIldSBzesOhbcO6IMO8emVuZXQgw6lya2V6ZXR0IGEoeikg4oCeJXPigJ0gKCVzKSBvYmpla3R1bXTDs2w6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgKCVzKTogIgorbXNnc3RyICIldSBzesOhbcO6IMO8emVuZXQgKCVzKSDDqXJrZXpldHQ6IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKK21zZ3N0ciAiRU9TIMOpcmtlemV0dCBhIGvDtnZldGtlesWRIGVsZW10xZFsOiDigJ4lc+KAnS5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgorbXNnc3RyICJDw41NS0UgTUVHVEFMw4FMVkE6IGEoeikg4oCeJXPigJ0gZWxlbSDDoWx0YWwuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBwYWQgXCIlczolc1wiLlxuIgorbXNnc3RyICJDw41NS0UgTUVHVEFMw4FMVkE6IGEoeikg4oCeJXM6JXPigJ0ga2l0w7ZsdMWRIMOhbHRhbC5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCittc2dzdHIgIkPDjU1LRSBNRUdUQUzDgUxWQTogYSh6KSDigJ4lc+KAnSBvYmpla3R1bSDDoWx0YWwuXG4iCisKK21zZ2lkICJGT1VORCBUQUdcbiIKK21zZ3N0ciAiQ8ONTUtFIE1FR1RBTMOBTFZBXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklORk86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorIklORk9STcOBQ0nDkzpcbiIKKyIlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAiRklHWUVMTUVaVEVUw4lTOiBhIGvDtnZldGtlesWRIGVsZW10xZFsOiAlczogJXNcbiIKKworbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgorbXNnc3RyICJFbMWRemV0ZXNlbiBiZXTDtmx0dmUsIHbDoXJha296w6FzIGEgcHVmZmVyZWzDqXMgYmVmZWplesWRZMOpc8OpcmXigKZcbiIKKworbXNnaWQgImJ1ZmZlcmluZy4uLiIKK21zZ3N0ciAicHVmZmVyZWzDqXPigKYiCisKK21zZ2lkICJEb25lIGJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgorbXNnc3RyICJBIHB1ZmZlcmVsw6lzIGvDqXN6LCBhZGF0Y3NhdG9ybmEgYmXDoWxsw610w6FzYSBMRUrDgVRTWsOBU1JB4oCmXG4iCisKK21zZ2lkICJCdWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgorbXNnc3RyICJQdWZmZXJlbMOpcywgYXogYWRhdGNzYXRvcm5hIGJlw6FsbMOtdMOhc2EgU1rDnE5FVEVMVEVURVRUIMOhbGxhcG90w7pyYeKAplxuIgorCittc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKK21zZ3N0ciAiS8Opc2xlbHRldMOpcyDDumpyYWVsb3N6dMOhc2HigKZcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgorbXNnc3RyICLDgWxsYXBvdCBiZcOhbGzDrXTDoXNhIGVycmU6ICVzLCAlcyBrw6lyw6lzw6luZWsgbWVnZmVsZWzFkWVu4oCmXG4iCisKK21zZ2lkICJJbnRlcnJ1cHQ6IFN0b3BwaW5nIHBpcGVsaW5lIC4uLlxuIgorbXNnc3RyICJNZWdzemFrw610w6FzOiBBZGF0Y3NhdG9ybmEgbGXDoWxsw610w6FzYeKAplxuIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nIGVsZW1lbnQ6ICVzXG4iCittc2dzdHIgIm5pbmNzIOKAniVz4oCdIGVsZW0iCisKK21zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCittc2dzdHIgIktpbWVuZXRpIGPDrW1rw6lrIChtZXRhYWRhdG9rKSIKKworbXNnaWQgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCittc2dzdHIgIktpbWVuZXRpIMOhbGxhcG90aW5mb3Jtw6FjacOzayDDqXMgdHVsYWpkb25zw6FnLcOpcnRlc8OtdMOpc2VrIgorCittc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiTmUgw61yam9uIGtpIGVsxZFyZWhhbGFkw6FzLWluZm9ybcOhY2nDs2thdCIKKworbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKK21zZ3N0ciAiS2ltZW5ldGkgw7x6ZW5ldGVrIgorCittc2dpZCAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKK21zZ3N0ciAiTmUgw61yam9uIGtpIGEgVMONUFVTIHTDrXB1cyDDoWxsYXBvdGluZm9ybcOhY2nDs2l0IgorCittc2dpZCAiVFlQRTEsVFlQRTIsLi4uIgorbXNnc3RyICJUw41QVVMxLFTDjVBVUzIs4oCmIgorCittc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgorbXNnc3RyICJOZSB0ZWxlcMOtdHNlbiBoaWJha2V6ZWzFkXQiCisKK21zZ2lkICJQcmludCBhbGxvYyB0cmFjZSAoaWYgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUpIgorbXNnc3RyICJGb2dsYWzDoXNpIG55b21rw7Z2ZXTDqXMga2nDrXLDoXNhIChoYSBmb3Jkw610w6Fza29yIGVuZ2Vkw6lseWV6dMOpaykiCisKK21zZ2lkICJGb3JjZSBFT1Mgb24gc291cmNlcyBiZWZvcmUgc2h1dHRpbmcgdGhlIHBpcGVsaW5lIGRvd24iCittc2dzdHIgIkVPUyBrw6lueXN6ZXLDrXTDqXNlIGEgZm9ycsOhc29rcmEgYXogYWRhdGNzYXRvcm5hIGxlw6FsbMOtdMOhc2EgZWzFkXR0IgorCittc2dpZCAiR2F0aGVyIGFuZCBwcmludCBpbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZDogJXMuXG4iCittc2dzdHIgIkhJQkE6IGF6IGFkYXRjc2F0b3JuYSBuZW0gw6lww610aGV0xZEgZmVsOiAlcy5cbiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXG4iCittc2dzdHIgIkhJQkE6IGF6IGFkYXRjc2F0b3JuYSBuZW0gw6lww610aGV0xZEgZmVsLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGVycm9uZW91cyBwaXBlbGluZTogJXNcbiIKK21zZ3N0ciAiRklHWUVMTUVaVEVUw4lTOiBoaWLDoXMgYWRhdGNzYXRvcm5hOiAlc1xuIgorCittc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgorbXNnc3RyICJISUJBOiBheiDigJ5hZGF0Y3NhdG9ybmHigJ0gZWxlbSBuZW0gdGFsw6FsaGF0w7MuXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAiQWRhdGNzYXRvcm5hIGJlw6FsbMOtdMOhc2EgU1rDnE5FVEVMVEVURVRUIMOhbGxhcG90w7pyYeKAplxuIgorCittc2dpZCAiRVJST1I6IFBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwYXVzZS5cbiIKK21zZ3N0ciAiSElCQTogYXogYWRhdGNzYXRvcm5hIG5lbSBha2FyIG1lZ8OhbGxuaS5cbiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIGxpdmUgYW5kIGRvZXMgbm90IG5lZWQgUFJFUk9MTCAuLi5cbiIKK21zZ3N0ciAiQXogYWRhdGNzYXRvcm5hIMOpbCDDqXMgbmVtIHN6w7xrc8OpZ2VzIEVMSU5Ew41UQU5J4oCmXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMSU5HIC4uLlxuIgorbXNnc3RyICJBeiBhZGF0Y3NhdG9ybmEgSU5Ew41Uw4FTQeKAplxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgorbXNnc3RyICJISUJBOiBheiBhZGF0Y3NhdG9ybmEgbmVtIGFrYXIgZWxpbmR1bG5pLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgorbXNnc3RyICJBeiBhZGF0Y3NhdG9ybmEgRUxJTkTDjVRWQeKAplxuIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgorbXNnc3RyICJBZGF0Y3NhdG9ybmEgYmXDoWxsw610w6FzYSBMRUrDgVRTWsOBU1JB4oCmXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBsYXkuXG4iCittc2dzdHIgIkhJQkE6IGF6IGFkYXRjc2F0b3JuYSBuZW0gYWthciBsZWrDoXRzemFuaS5cbiIKKworbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIEZvcmNpbmcgRU9TIG9uIHRoZSBwaXBlbGluZVxuIgorbXNnc3RyICJMZcOhbGzDrXTDoXNrb3IgRU9TIGVuZ2Vkw6lseWV6dmUg4oCTIEVPUyBrw6lueXN6ZXLDrXTDqXNlIGF6IGFkYXRjc2F0b3Juw6FyYVxuIgorCittc2dpZCAiV2FpdGluZyBmb3IgRU9TLi4uXG4iCittc2dzdHIgIlbDoXJha296w6FzIEVPUy1yYeKAplxuIgorCittc2dpZCAiRU9TIHJlY2VpdmVkIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKK21zZ3N0ciAiRU9TIMOpcmtlemV0dCDigJMgYWRhdGNzYXRvcm5hIGxlw6FsbMOtdMOhc2HigKZcbiIKKworbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgorbXNnc3RyICJIaWJhIHTDtnJ0w6ludCBheiBFT1MtcmEgdsOhcmFrb3rDoXNrb3JcbiIKKworbXNnaWQgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgorbXNnc3RyICJBIHbDqWdyZWhhanTDoXMgYmVmZWplesWRZMO2dHQgJSIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUkVBRFkgLi4uXG4iCittc2dzdHIgIkF6IGFkYXRjc2F0b3JuYSBiZcOhbGzDrXTDoXNhIEvDiVNaIMOhbGxhcG90cmHigKZcbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCAuLi5cbiIKK21zZ3N0ciAiQXogYWRhdGNzYXRvcm5hIGJlw6FsbMOtdMOhc2EgTlVMTCDDqXJ0w6lrcmXigKZcbiIKKworbXNnaWQgIkZyZWVpbmcgcGlwZWxpbmUgLi4uXG4iCittc2dzdHIgIkFkYXRjc2F0b3JuYSBmZWxzemFiYWTDrXTDoXNh4oCmXG4iCisKKyN+IG1zZ2lkICJVc2FnZTogZ3N0LXhtbGxhdW5jaCA8ZmlsZS54bWw+IFsgZWxlbWVudC5wcm9wZXJ0eT12YWx1ZSAuLi4gXVxuIgorI34gbXNnc3RyICJIYXN6bsOhbGF0OiBnc3QteG1sbGF1bmNoIDxmw6FqbC54bWw+IFsgZWxlbS50dWxhamRvbnPDoWc9w6lydMOpayDigKYgXVxuIgorCisjfiBtc2dpZCAiRVJST1I6IHBhcnNlIG9mIHhtbCBmaWxlICclcycgZmFpbGVkLlxuIgorI34gbXNnc3RyICJISUJBOiBhKHopIOKAniVz4oCdIHhtbCBmw6FqbCBmZWxkb2xnb3rDoXNhIG1lZ2hpw7pzdWx0LlxuIgorCisjfiBtc2dpZCAiRVJST1I6IG5vIHRvcGxldmVsIHBpcGVsaW5lIGVsZW1lbnQgaW4gZmlsZSAnJXMnLlxuIgorI34gbXNnc3RyICIiCisjfiAiSElCQTogbmluY3MgZmVsc8WRIHN6aW50xbEgYWRhdGNzYXRvcm5hIGVsZW0gYSBrw7Z2ZXRrZXrFkSBmw6FqbGJhbjog4oCeJXPigJ0uXG4iCisKKyN+IG1zZ2lkICJXQVJOSU5HOiBvbmx5IG9uZSB0b3BsZXZlbCBlbGVtZW50IGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuXG4iCisjfiBtc2dzdHIgIkZJR1lFTE1FWlRFVMOJUzogZWd5c3plcnJlIGNzYWsgZWd5IGZlbHPFkSBzemludMWxIGVsZW0gdMOhbW9nYXRvdHQuXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogY291bGQgbm90IHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAlZDogJXMuXG4iCisjfiBtc2dzdHIgIkhJQkE6IG5lbSBlbGVtZXpoZXTFkSBhKHopICVkLiBwYXJhbmNzc29yaSBhcmd1bWVudHVtOiAlcy5cbiIKKworI34gbXNnaWQgIldBUk5JTkc6IGVsZW1lbnQgbmFtZWQgJyVzJyBub3QgZm91bmQuXG4iCisjfiBtc2dzdHIgIkZJR1lFTE1FWlRFVMOJUzogYSh6KSDigJ4lc+KAnSBuZXbFsSBlbGVtIG5lbSB0YWzDoWxoYXTDsy5cbiIKKworI34gbXNnaWQgIlNhdmUgeG1sIHJlcHJlc2VudGF0aW9uIG9mIHBpcGVsaW5lIHRvIEZJTEUgYW5kIGV4aXQiCisjfiBtc2dzdHIgIkF6IGFkYXRjc2F0b3JuYSB4bWwgw6FicsOhem9sw6Fzw6FuYWsgbWVudMOpc2UgYSBGw4FKTEJBIMOpcyBraWzDqXDDqXMiCisKKyN+IG1zZ2lkICJGSUxFIgorI34gbXNnc3RyICJGw4FKTCIKKworI34gbXNnaWQgIkRvIG5vdCBpbnN0YWxsIHNpZ25hbCBoYW5kbGVycyBmb3IgU0lHVVNSMSBhbmQgU0lHVVNSMiIKKyN+IG1zZ3N0ciAiTmUgdGVsZXDDrXRzZW4gc3ppZ27DoWxrZXplbMWRa2V0IGEgU0lHVVNSMSDDqXMgU0lHVVNSMiBzemlnbsOhbG9raG96IgpkaWZmIC0tZ2l0IGEvcG8vaWQuZ21vIGIvcG8vaWQuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZjMyYmEKLS0tIC9kZXYvbnVsbAorKysgYi9wby9pZC5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vaWQucG8gYi9wby9pZC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGI5MWRlCi0tLSAvZGV2L251bGwKKysrIGIvcG8vaWQucG8KQEAgLTAsMCArMSwxMjUxIEBACisjIEluZG9uZXNpYW4gdHJhbnNsYXRpb25zIGZvciBnc3RyZWFtZXIgcGFja2FnZS4KKyMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyMgQW5kaGlrYSBQYWRtYXdhbiA8YW5kaGlrYS5wYWRtYXdhbkBnbWFpbC5jb20+LCAyMDEwLgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDAuMTAuMjkuMlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTA5LTI5IDE0OjU1KzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTA2LTI5IDIxOjU1KzA3MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEFuZGhpa2EgUGFkbWF3YW4gPGFuZGhpa2EucGFkbWF3YW5AZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IEluZG9uZXNpYW4gPHRyYW5zbGF0aW9uLXRlYW0taWRAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlOiBpZFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MTsgcGx1cmFsPTA7XG4iCisKK21zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCittc2dzdHIgIkNldGFrIHZlcnNpIEdTdHJlYW1lciIKKworbXNnaWQgIk1ha2UgYWxsIHdhcm5pbmdzIGZhdGFsIgorbXNnc3RyICJCdWF0IHNlbXVhIHBlcmluZ2F0YW4gZmF0YWwiCisKK21zZ2lkICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKK21zZ3N0ciAiQ2V0YWsga2F0ZWdvcmkgYXdha3V0dSB5YW5nIHRlcnNlZGlhIGxhbHUga2VsdWFyIgorCittc2dpZCAiIgorIkRlZmF1bHQgZGVidWcgbGV2ZWwgZnJvbSAxIChvbmx5IGVycm9yKSB0byA1IChhbnl0aGluZykgb3IgMCBmb3Igbm8gb3V0cHV0IgorbXNnc3RyICIiCisiTGV2ZWwgYXdha3V0dSBzdGFuZGFyIGRhcmkgMSAoaGFueWEgZ2FsYXQpIGtlIDUgKGFwYXB1bikgYXRhdSAwIHVudHVrIHRhayAiCisiYWRhIGtlbHVhcmFuIgorCittc2dpZCAiTEVWRUwiCittc2dzdHIgIkxFVkVMIgorCittc2dpZCAiIgorIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5X25hbWU6bGV2ZWwgcGFpcnMgdG8gc2V0IHNwZWNpZmljIGxldmVscyBmb3IgIgorInRoZSBpbmRpdmlkdWFsIGNhdGVnb3JpZXMuIEV4YW1wbGU6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKK21zZ3N0ciAiIgorIlNlbmFyYWkgZGlwaXNhaGthbiBrb21hIGRhcmkgY2F0ZWdvcnlfbmFtZTpsZXZlbCBkaXBhc2FuZ2thbiB1bnR1ayBtZW5nYXR1ciAiCisibGV2ZWwgc3Blc2lmaWsgdW50dWsga2F0ZWdvcmkgaW5kaXZpZHVhbC4gTWlzYWxueWE6IEdTVF9BVVRPUExVRzo1LCIKKyJHU1RfRUxFTUVOVF8qOjMiCisKK21zZ2lkICJMSVNUIgorbXNnc3RyICJTRU5BUkFJIgorCittc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCittc2dzdHIgIk5vbmFrdGlma2FuIGtlbHVhcmFuIGF3YWt1dHUgYmVyd2FybmEiCisKK21zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKK21zZ3N0ciAiTm9uYWt0aWZrYW4gYXdha3V0dSIKKworbXNnaWQgIkVuYWJsZSB2ZXJib3NlIHBsdWdpbiBsb2FkaW5nIGRpYWdub3N0aWNzIgorbXNnc3RyICJNZW5nYWt0aWZrYW4gcGx1Z2luIHZlcmJvc2Uga2V0aWthIG1lbXVhdCBkaWFnbm9zaXMiCisKK21zZ2lkICJDb2xvbi1zZXBhcmF0ZWQgcGF0aHMgY29udGFpbmluZyBwbHVnaW5zIgorbXNnc3RyICJBbGFtYXQgZGlwaXNhaGthbiB0YW5kYSB0aXRpayBkdWEgYmVyaXNpIHBsdWdpbiIKKworbXNnaWQgIlBBVEhTIgorbXNnc3RyICJBTEFNQVQiCisKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCisiZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgorbXNnc3RyICIiCisiU2VuYXJhaSBwbHVnaW4gZGlwaXNhaGthbiBvbGVoIGtvbWEgdW50dWsgcHJhbXVhdCBzZWJhZ2FpIHRhbWJhaGFuIGRhcmkgIgorInNlbmFyYWkgeWFuZyBkaXNpbXBhbiBkaSBsaW5na3VuZ2FuIHZhcmlhYmVsIEdTVF9QTFVHSU5fUEFUSCIKKworbXNnaWQgIlBMVUdJTlMiCittc2dzdHIgIlBMVUdJTiIKKworbXNnaWQgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCittc2dzdHIgIk5vbmFrdGlma2FuIHBlbmplYmFrIGdhbGF0IHNlZ21lbnRhc2kgc2VsYW1hIG1lbXVhdCBwbHVnaW4iCisKK21zZ2lkICJEaXNhYmxlIHVwZGF0aW5nIHRoZSByZWdpc3RyeSIKK21zZ3N0ciAiTm9uYWt0aWZrYW4gcGVtdXRha2hpcmFuIHJlZ2lzdHJ5IgorCittc2dpZCAiRGlzYWJsZSBzcGF3bmluZyBhIGhlbHBlciBwcm9jZXNzIHdoaWxlIHNjYW5uaW5nIHRoZSByZWdpc3RyeSIKK21zZ3N0ciAiTm9uYWt0aWZrYW4gbWVtYWtzYSBwZW5vbG9uZyBwcm9zZXMga2V0aWthIG1lbWluZGFpIHJlZ2lzdHJ5IgorCittc2dpZCAiR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgIk9wc2kgR1N0cmVhbWVyIgorCittc2dpZCAiU2hvdyBHU3RyZWFtZXIgT3B0aW9ucyIKK21zZ3N0ciAiVGFtcGlsa2FuIE9wc2kgR1N0cmVhbWVyIgorCittc2dpZCAiVW5rbm93biBvcHRpb24iCittc2dzdHIgIk9wc2kgdGFrIGRpa2V0YWh1aSIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgY29yZSBsaWJyYXJ5IGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIG1lbmdoYWRhcGkgZ2FsYXQgdW11bSBwdXN0YWthIGludGkuIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyBlcnJvci4iCittc2dzdHIgIiIKKyJQZW5nZW1iYW5nIEdTdHJlYW1lciB0ZXJsYWx1IG1hbGFzIHVudHVrIG1lbnVsaXMga29kZSBnYWxhdCB1bnR1ayBnYWxhdCBpbmkuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjb2RlIG5vdCBpbXBsZW1lbnRlZC4iCittc2dzdHIgIkdhbGF0IEdTdHJlYW1lciBpbnRlcm5hbDoga29kZSBiZWx1bSBkaWltcGxlbWVudGFzaWthbi4iCisKK21zZ2lkICIiCisiR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkIGFuZCBzb21lIGVsZW1lbnQgZmFpbGVkIHRvIHBvc3QgYSAiCisicHJvcGVyIGVycm9yIG1lc3NhZ2Ugd2l0aCB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZS4iCittc2dzdHIgIiIKKyJHYWxhdCBHU3RyZWFtZXI6IGdhZ2FsIG1lbmd1YmFoIGtvbmRpc2kgZGFuIGJlYmVyYXBhIGVsZW1lbiBnYWdhbCB1bnR1ayAiCisibWVuZ2lyaW0gcGVzYW4gZ2FsYXQgeWFuZyBiZW5hciBkZW5nYW4gYWxhc2FuIGJhZ2kga2VnYWdhbGFuLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogcGFkIHByb2JsZW0uIgorbXNnc3RyICJHYWxhdCBHU3RyZWFtZXIgaW50ZXJuYWw6IG1hc2FsYWggbGFuZGFzYW4uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iCittc2dzdHIgIkdhbGF0IEdTdHJlYW1lciBpbnRlcm5hbDogbWFzYWxhaCBiZW5hbmcuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBuZWdvdGlhdGlvbiBwcm9ibGVtLiIKK21zZ3N0ciAiR2FsYXQgR1N0cmVhbWVyIGludGVybmFsOiBtYXNhbGFoIG5lZ29zaWFzaS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgorbXNnc3RyICJHYWxhdCBHU3RyZWFtZXIgaW50ZXJuYWw6IG1hc2FsYWggZXZlbnQuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uIgorbXNnc3RyICJHYWxhdCBHU3RyZWFtZXIgaW50ZXJuYWw6IG1hc2FsYWggcGVuY2FyaWFuLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2FwcyBwcm9ibGVtLiIKK21zZ3N0ciAiR2FsYXQgR1N0cmVhbWVyIGludGVybmFsOiBtYXNhbGFoIGh1cnVmLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGFnIHByb2JsZW0uIgorbXNnc3RyICJHYWxhdCBHU3RyZWFtZXIgaW50ZXJuYWw6IG1hc2FsYWggdGFnLiIKKworbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCittc2dzdHIgIkluc3RhbGFzaSBHU3RyZWFtZXIgYW5kYSBrZWhpbGFuZ2FuIHBsdWctaW4uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKK21zZ3N0ciAiR2FsYXQgR1N0cmVhbWVyIGludGVybmFsOiBtYXNhbGFoIGphbS4iCisKK21zZ2lkICIiCisiVGhpcyBhcHBsaWNhdGlvbiBpcyB0cnlpbmcgdG8gdXNlIEdTdHJlYW1lciBmdW5jdGlvbmFsaXR5IHRoYXQgaGFzIGJlZW4gIgorImRpc2FibGVkLiIKK21zZ3N0ciAiIgorIkFwbGlrYXNpIGluaSBtZW5jb2JhIHVudHVrIG1lbmdndW5ha2FuIGZ1bmdzaW9uYWxpdGFzIEdTdHJlYW1lciB5YW5nIHRlbGFoICIKKyJkaW5vbmFrdGlma2FuLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3VwcG9ydGluZyBsaWJyYXJ5IGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIG1lbmdoYWRhcGkgZ2FsYXQgdW11bSBwdXN0YWthIHBlbmR1a3VuZy4iCisKK21zZ2lkICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJUYWsgZGFwYXQgbWVuZ2luaXNpYWxpc2FzaSBwdXN0YWthIHBlbmR1a3VuZy4iCisKK21zZ2lkICJDb3VsZCBub3QgY2xvc2Ugc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiVGFrIGRhcGF0IG1lbnV0dXAgcHVzdGFrYSBwZW5kdWt1bmcuIgorCittc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJUYWsgZGFwYXQgbWVuZ2F0dXIgcHVzdGFrYSBwZW5kdWt1bmcuIgorCittc2dpZCAiRW5jb2RpbmcgZXJyb3IuIgorbXNnc3RyICIiCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHJlc291cmNlIGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIG1lbmdoYWRhcGkgZ2FsYXQgdW11bSBzdW1iZXIgZGF5YS4iCisKK21zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgorbXNnc3RyICJTdW1iZXIgZGF5YSB0YWsgZGl0ZW11a2FuLiIKKworbXNnaWQgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCittc2dzdHIgIlN1bWJlciBkYXlhIHNpYnVrIGF0YXUgdGFrIHRlcnNlZGlhLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiVGFrIGRhcGF0IG1lbWJ1a2Egc3VtYmVyIGRheWEgdW50dWsgZGliYWNhLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiVGFrIGRhcGF0IG1lbWJ1a2Egc3VtYmVyIGRheWEgdW50dWsgZGl0dWxpcy4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCittc2dzdHIgIlRhayBkYXBhdCBtZW1idWthIHN1bWJlciBkYXlhIHVudHVrIGRpYmFjYSBkYW4gZGl0dWxpcy4iCisKK21zZ2lkICJDb3VsZCBub3QgY2xvc2UgcmVzb3VyY2UuIgorbXNnc3RyICJUYWsgZGFwYXQgbWVudXR1cCBzdW1iZXIgZGF5YS4iCisKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIHJlc291cmNlLiIKK21zZ3N0ciAiVGFrIGRhcGF0IG1lbWJhY2EgZGFyaSBzdW1iZXIgZGF5YS4iCisKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gcmVzb3VyY2UuIgorbXNnc3RyICJUYWsgZGFwYXQgbWVudWxpcyBrZSBzdW1iZXIgZGF5YS4iCisKK21zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKK21zZ3N0ciAiVGFrIGRhcGF0IG1lbGFrdWthbiBwZW5jYXJpYW4gZGkgc3VtYmVyIGRheWEuIgorCittc2dpZCAiQ291bGQgbm90IHN5bmNocm9uaXplIG9uIHJlc291cmNlLiIKK21zZ3N0ciAiVGFrIGRhcGF0IHNpbmtyb25pc2FzaSBkaSBzdW1iZXIgZGF5YS4iCisKK21zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKK21zZ3N0ciAiVGFrIGJpc2EgbWVuZGFwYXRrYW4vbWVuZ2F0dXIgcGVuZ2F0dXJhbiBkYXJpL2RpIHN1bWJlciBkYXlhLiIKKworbXNnaWQgIk5vIHNwYWNlIGxlZnQgb24gdGhlIHJlc291cmNlLiIKK21zZ3N0ciAiVGFrIGFkYSBydWFuZyB0ZXJzaXNhIGRpIHN1bWJlciBkYXlhLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIG1lbmdoYWRhcGFpIGdhbGF0IGFydXMgdW11bS4iCisKK21zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCittc2dzdHIgIiIKKyJFbGVtZW4gdGlkYWsgbWVuZ2ltcGxlbWVudGFzaWthbiBwZW5hbmdhbmFuIHVudHVrIGFydXMgaW5pLiBTaWxha2FuIGxhcG9ya2FuICIKKyJrdXR1LiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgorbXNnc3RyICJUYWsgZGFwYXQgbWVuZW50dWthbiB0aXBlIGFydXMuIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBvZiBhIGRpZmZlcmVudCB0eXBlIHRoYW4gaGFuZGxlZCBieSB0aGlzIGVsZW1lbnQuIgorbXNnc3RyICIiCisiQXJ1cyBiZXJhc2FsIGRhcmkgdGlwZSB5YW5nIGJlcmJlZGEgZGFyaSB5YW5nIGRpdGFuZ2FuaSBvbGVoIGVsZW1lbiBpbmkuIgorCittc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgorbXNnc3RyICJUaWRhayBhZGEgY29kZWMgc2FhdCBpbmkgeWFuZyBkYXBhdCBtZW5hbmdhbmkgdGlwZSBhcnVzLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZWNvZGUgc3RyZWFtLiIKK21zZ3N0ciAiVGFrIGRhcGF0IG1lbmdhd2FzYW5kaSBhcnVzLiIKKworbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKK21zZ3N0ciAiVGFrIGRhcGF0IG1lbnlhbmRpIGFydXMuIgorCittc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIlRhayBkYXBhdCBtZW55YXR1a2FuIGFydXMuIgorCittc2dpZCAiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIgorbXNnc3RyICJUYWsgZGFwYXQgbWVtcGVyYmFueWFrIGFydXMuIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiIKK21zZ3N0ciAiQXJ1cyBiZXJhZGEgZGFsYW0gZm9ybWF0IHlhbmcgc2FsYWguIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iCittc2dzdHIgIkFydXMgdGVyZW5rcmlwc2kgZGFuIGRla3JpcHNpIHRpZGFrIGRpZHVrdW5nLiIKKworbXNnaWQgIiIKKyJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgY2FuJ3QgYmUgZGVjcnlwdGVkIGJlY2F1c2Ugbm8gc3VpdGFibGUga2V5IGhhcyAiCisiYmVlbiBzdXBwbGllZC4iCittc2dzdHIgIiIKKyJBcnVzIHRlcmVua3JpcHNpIGRhbiB0YWsgZGFwYXQgZGlkZWtyaXBzaSBrYXJlbmEgdGlkYWsgYWRhIGt1bmNpIHlhbmcgIgorImRpc2VkaWFrYW4uIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCittc2dzdHIgIlRhayBhZGEgcGVzYW4gZ2FsYXQgdW50dWsgZG9tYWluICVzLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMgYW5kIGNvZGUgJWQuIgorbXNnc3RyICJUYWsgYWRhIHBlc2FuIGdhbGF0IHN0YW5kYXIgdW50dWsgZG9tYWluICVzIGRhbiBrb2RlICVkLiIKKworbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKK21zZ3N0ciAiSmFtIHRlcnBpbGloIHRhayBkYXBhdCBkaWd1bmFrYW4gZGFsYW0gYmFyaXMgcGlwYS4iCisKK21zZ2lkICJ0aXRsZSIKK21zZ3N0ciAianVkdWwiCisKK21zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIgorbXNnc3RyICJqdWR1bCB5YW5nIHVtdW0gZGlndW5ha2FuIgorCittc2dpZCAidGl0bGUgc29ydG5hbWUiCittc2dzdHIgIm5hbWEgc2luZ2thdCBqdWR1bCIKKworbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgImp1ZHVsIHlhbmcgdW11bSBkaWd1bmFrYW4gdW50dWsga2VwZW50aW5nYW4gcGVuZ3VydXRhbiIKKworbXNnaWQgImFydGlzdCIKK21zZ3N0ciAiYXJ0aXMiCisKK21zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmciCittc2dzdHIgIm9yYW5nIHlhbmcgYmVydGFuZ2d1bmdqYXdhYiB0ZXJoYWRhcCByZWthbWFuIgorCittc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgorbXNnc3RyICJuYW1hIHNpbmdrYXQgYXJ0aXMiCisKK21zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIiIKKyJvcmFuZyB5YW5nIGJlcnRhbmdndW5namF3YWIgdGVyaGFkYXAgcmVrYW1hbiB1bnR1ayBrZXBlbnRpbmdhbiBwZW5ndXJ1dGFuIgorCittc2dpZCAiYWxidW0iCittc2dzdHIgImFsYnVtIgorCittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiCittc2dzdHIgImFsYnVtIHlhbmcgYmVyaXNpIGRhdGEgaW5pIgorCittc2dpZCAiYWxidW0gc29ydG5hbWUiCittc2dzdHIgIm5hbWEgc2luZ2thdCBhbGJ1bSIKKworbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJhbGJ1bSB5YW5nIGJlcmlzaSBkYXRhIGluaSB1bnR1ayBrZXBlbnRpbmdhbiBwZW5ndXJ1dGFuIgorCittc2dpZCAiYWxidW0gYXJ0aXN0IgorbXNnc3RyICJhbGJ1bSBhcnRpcyIKKworbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIGRpc3BsYXllZCIKK21zZ3N0ciAiQXJ0aXMgdW50dWsgc2VtdWEgYWxidW0sIHNlcGVydGkgeWFuZyBzZWhhcnVzbnlhIGRpdGFtcGlsa2FuIgorCittc2dpZCAiYWxidW0gYXJ0aXN0IHNvcnRuYW1lIgorbXNnc3RyICJhbGJ1bSBhcnRpcyBuYW1hIHVydXQiCisKK21zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiCittc2dzdHIgIkFydGlzIHVudHVrIHNlbXVhIGFsYnVtLCBzZXBlcnRpIHlhbmcgc2VoYXJ1c255YSBkaXVydXRrYW4iCisKK21zZ2lkICJkYXRlIgorbXNnc3RyICJ0YW5nZ2FsIgorCittc2dpZCAiZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHRGF0ZSBzdHJ1Y3R1cmUpIgorbXNnc3RyICJ0YW5nZ2FsIGRhdGEgZGlidWF0IChtZW51cnV0IHN0cnVrdHVyIEdEYXRlKSIKKworIywgZnV6enkKK21zZ2lkICJkYXRldGltZSIKK21zZ3N0ciAidGFuZ2dhbCIKKworIywgZnV6enkKK21zZ2lkICJkYXRlIGFuZCB0aW1lIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdzdERhdGVUaW1lIHN0cnVjdHVyZSkiCittc2dzdHIgInRhbmdnYWwgZGF0YSBkaWJ1YXQgKG1lbnVydXQgc3RydWt0dXIgR0RhdGUpIgorCittc2dpZCAiZ2VucmUiCittc2dzdHIgImdlbnJlIgorCittc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCittc2dzdHIgImdlbnJlIGFzYWwgZGF0YSBpbmkiCisKK21zZ2lkICJjb21tZW50IgorbXNnc3RyICJrb21lbnRhciIKKworbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIgorbXNnc3RyICJ0ZWtzIGJlYmFzIHVudHVrIG1lbmdvbWVudGFyaSBkYXRhIgorCittc2dpZCAiZXh0ZW5kZWQgY29tbWVudCIKK21zZ3N0ciAia29tZW50YXIgZGlwZXJwYW5qYW5nIgorCittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgorbXNnc3RyICIiCisidGVrcyBiZWJhcyB1bnR1ayBtZW5nb21lbnRhcmkgZGF0YSBkYWxhbSBiZW50dWsga3VuY2k9bmlsYWkgYXRhdSBrdW5jaVtlbl0iCisiPWtvbWVudGFyIgorCittc2dpZCAidHJhY2sgbnVtYmVyIgorbXNnc3RyICJub21vciBqYWx1ciIKKworbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICJub21vciBqYWx1ciBkaSBkYWxhbSBrb2xla3NpIgorCittc2dpZCAidHJhY2sgY291bnQiCittc2dzdHIgImhpdHVuZ2FuIGphbHVyIgorCittc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKK21zZ3N0ciAiaGl0dW5nYW4gamFsdXIgZGkgZGFsYW0ga29sZWtzaSBhc2FsIGphbHVyIGluaSIKKworbXNnaWQgImRpc2MgbnVtYmVyIgorbXNnc3RyICJub21vciBjYWtyYW0iCisKK21zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICJub21vciBjYWtyYW0gZGkgZGFsYW0ga29sZWtzaSIKKworbXNnaWQgImRpc2MgY291bnQiCittc2dzdHIgImhpdHVuZ2FuIGNha3JhbSIKKworbXNnaWQgImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIgorbXNnc3RyICJoaXR1bmdhbiBjYWtyYW0gZGkgZGFsYW0ga29sZWtzaSBhc2FsIGNha3JhbSBpbmkiCisKK21zZ2lkICJsb2NhdGlvbiIKK21zZ3N0ciAibG9rYXNpIgorCittc2dpZCAiIgorIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgorImlzIGhvc3RlZCkiCittc2dzdHIgIiIKKyJBc2FsIG1lZGlhIGRhbGFtIGJlbnR1ayBVUkkgKGxva2FzaSwgZGltYW5hIGJlcmthcyBhc2FsIGF0YXUgYXJ1cyAiCisiZGl0ZW1wYXRrYW4pIgorCittc2dpZCAiaG9tZXBhZ2UiCittc2dzdHIgImxhbWFuIgorCittc2dpZCAiSG9tZXBhZ2UgZm9yIHRoaXMgbWVkaWEgKGkuZS4gYXJ0aXN0IG9yIG1vdmllIGhvbWVwYWdlKSIKK21zZ3N0ciAiTGFtYW4gdW50dWsgbWVkaWEgaW5pIChtaXNhbG55YSBsYW1hbiBhcnRpcyBhdGF1IGZpbG0pIgorCittc2dpZCAiZGVzY3JpcHRpb24iCittc2dzdHIgImtldGVyYW5nYW4iCisKK21zZ2lkICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCittc2dzdHIgInRla3MgcGVuZGVrIHlhbmcgbWVuZXJhbmdrYW4gaXNpIGRhdGEiCisKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICJ2ZXJzaSIKKworbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgorbXNnc3RyICJ2ZXJzaSBkYXRhIGluaSIKKworbXNnaWQgIklTUkMiCittc2dzdHIgIklTUkMiCisKK21zZ2lkICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCittc2dzdHIgIiIKKyJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gbGloYXQgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKKworbXNnaWQgIm9yZ2FuaXphdGlvbiIKK21zZ3N0ciAib3JnYW5pc2FzaSIKKworbXNnaWQgImNvcHlyaWdodCIKK21zZ3N0ciAiaGFrIGNpcHRhIgorCittc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAia2V0ZXJhbmdhbiBoYWsgY2lwdGEgZGF0YSIKKworbXNnaWQgImNvcHlyaWdodCB1cmkiCittc2dzdHIgInVyaSBoYWsgY2lwdGEiCisKK21zZ2lkICJVUkkgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgIlVSSSBrZSBrZXRlcmFuZ2FuIGhhayBjaXB0YSBkYXRhIgorCisjLCBmdXp6eQorbXNnaWQgImVuY29kZWQgYnkiCittc2dzdHIgInBlbnlhbmRpIgorCittc2dpZCAibmFtZSBvZiB0aGUgZW5jb2RpbmcgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiIKK21zZ3N0ciAiIgorCittc2dpZCAiY29udGFjdCIKK21zZ3N0ciAia29udGFrIgorCittc2dpZCAiY29udGFjdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiaW5mb3JtYXNpIGtvbnRhayIKKworbXNnaWQgImxpY2Vuc2UiCittc2dzdHIgImxpc2Vuc2kiCisKK21zZ2lkICJsaWNlbnNlIG9mIGRhdGEiCittc2dzdHIgImxpc2Vuc2kgZGF0YSIKKworbXNnaWQgImxpY2Vuc2UgdXJpIgorbXNnc3RyICJ1cmkgbGlzZW5zaSIKKworbXNnaWQgIlVSSSB0byB0aGUgbGljZW5zZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiVVJJIGtlIGxpc2Vuc2kgZGF0YSIKKworbXNnaWQgInBlcmZvcm1lciIKK21zZ3N0ciAicGVuYW1waWwiCisKK21zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKK21zZ3N0ciAib3JhbmcgeWFuZyB0YW1waWwiCisKK21zZ2lkICJjb21wb3NlciIKK21zZ3N0ciAicGVueXVzdW4iCisKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciCittc2dzdHIgIm9yYW5nIHlhbmcgbWVueXVzdW4gcGVyZWthbWFuIgorCittc2dpZCAiZHVyYXRpb24iCittc2dzdHIgImR1cmFzaSIKKworbXNnaWQgImxlbmd0aCBpbiBHU3RyZWFtZXIgdGltZSB1bml0cyAobmFub3NlY29uZHMpIgorbXNnc3RyICJwYW5qYW5nIGRhbGFtIHVuaXQgd2FrdHUgR1N0cmVhbWVyIChuYW5vZGV0aWspIgorCittc2dpZCAiY29kZWMiCittc2dzdHIgImNvZGVjIgorCittc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJjb2RlYyBkYXRhIHRlcnNpbXBhbiIKKworbXNnaWQgInZpZGVvIGNvZGVjIgorbXNnc3RyICJjb2RlYyB2aWRlbyIKKworbXNnaWQgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiY29kZWMgZGF0YSB2aWRlbyB0ZXJzaW1wYW4iCisKK21zZ2lkICJhdWRpbyBjb2RlYyIKK21zZ3N0ciAiY29kZWMgYXVkaW8iCisKK21zZ2lkICJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImNvZGVjIGRhdGEgYXVkaW8gdGVyc2ltcGFuIgorCittc2dpZCAic3VidGl0bGUgY29kZWMiCittc2dzdHIgImNvZGVjIHN1Ymp1ZHVsIgorCittc2dpZCAiY29kZWMgdGhlIHN1YnRpdGxlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJjb2RlYyBkYXRhIHN1Ymp1ZHVsIHRlcnNpbXBhbiBkaSIKKworbXNnaWQgImNvbnRhaW5lciBmb3JtYXQiCittc2dzdHIgImZvcm1hdCBwZW1iYXRhc2FuIgorCittc2dpZCAiY29udGFpbmVyIGZvcm1hdCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImZvcm1hdCBwZW1iYXRhc2FuIGRhdGEgdGVyc2ltcGFuIgorCittc2dpZCAiYml0cmF0ZSIKK21zZ3N0ciAiYml0cmFzaSIKKworbXNnaWQgImV4YWN0IG9yIGF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgImJpdHJhc2kgdGVwYXQgYXRhdSByYXRhLXJhdGEgZGFsYW0gYml0YS9kZXRpayIKKworbXNnaWQgIm5vbWluYWwgYml0cmF0ZSIKK21zZ3N0ciAiYml0cmFzaSBub3JtYWwiCisKK21zZ2lkICJub21pbmFsIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJiaXRyYXNpIG5vbWluYWwgZGFsYW0gYml0YS9kZXRpayIKKworbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKK21zZ3N0ciAiYml0cmFzaSBtaW5pbXVtIgorCittc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAiYml0cmFzaSBtaW5pbXVtIGRhbGFtIGJpdGEvZGV0aWsiCisKK21zZ2lkICJtYXhpbXVtIGJpdHJhdGUiCittc2dzdHIgImJpdHJhc2kgbWFrc2ltdW0iCisKK21zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJiaXRyYXNpIG1ha3NpbXVtIGRhbGFtIGJpdGEvZGV0aWsiCisKK21zZ2lkICJlbmNvZGVyIgorbXNnc3RyICJwZW55YW5kaSIKKworbXNnaWQgImVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCittc2dzdHIgInBlbnlhbmRpIHlhbmcgZGlndW5ha2FuIHVudHVrIG1lbnlhbmRpIGFydXMgaW5pIgorCittc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgorbXNnc3RyICJ2ZXJzaSBwZW55YW5kaSIKKworbXNnaWQgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCittc2dzdHIgInZlcnNpIHBlbnlhbmRpIHlhbmcgZGlndW5ha2FuIHVudHVrIG1lbnlhbmRpIGFydXMgaW5pIgorCittc2dpZCAic2VyaWFsIgorbXNnc3RyICJzZXJpIgorCittc2dpZCAic2VyaWFsIG51bWJlciBvZiB0cmFjayIKK21zZ3N0ciAibm9tb3Igc2VyaSBqYWx1ciIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKK21zZ3N0ciAicGVyYWloYW4gamFsdXIgcGVyYWloYW4gcHV0YXIgdWxhbmciCisKK21zZ2lkICJ0cmFjayBnYWluIGluIGRiIgorbXNnc3RyICJwZXJhaWhhbiBqYWx1ciBkYWxhbSBkYiIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgcGVhayIKK21zZ3N0ciAicHVuY2FrIHBlcmFpaGFuIHB1dGFyIHVsYW5nIGphbHVyIgorCittc2dpZCAicGVhayBvZiB0aGUgdHJhY2siCittc2dzdHIgInB1bmNhayBqYWx1ciIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKK21zZ3N0ciAicGVyYWloYW4gYWxidW0gcGVyYWloYW4gcHV0YXIgdWxhbmciCisKK21zZ2lkICJhbGJ1bSBnYWluIGluIGRiIgorbXNnc3RyICJwZXJhaWhhbiBhbGJ1bSBkYWxhbSBkYiIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKK21zZ3N0ciAicHVuY2FrIHBlcmFpaGFuIHB1dGFyIHVsYW5nIGFsYnVtIgorCittc2dpZCAicGVhayBvZiB0aGUgYWxidW0iCittc2dzdHIgInB1bmNhayBhbGJ1bSIKKworbXNnaWQgInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIgorbXNnc3RyICJsZXZlbCByZWZlcmVuc2kgcGVyYWloYW4gcHV0YXIgdWxhbmciCisKK21zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgorbXNnc3RyICJsZXZlbCByZWZlcmVuc2kgbmlsYWkgcGVyYWloYW4gamFsdXIgZGFuIGFsYnVtIgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSIKK21zZ3N0ciAia29kZSBiYWhhc2EiCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIGZvciB0aGlzIHN0cmVhbSwgY29uZm9ybWluZyB0byBJU08tNjM5LTEiCittc2dzdHIgImtvZGUgYmFoYXNhIGFydXMgaW5pLCBtZW5ndWJhaG55YSBrZSBJU08tNjM5LTEiCisKK21zZ2lkICJpbWFnZSIKK21zZ3N0ciAiZ2FtYmFyIgorCittc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiZ2FtYmFyIHlhbmcgYmVyaHVidW5nYW4gZGVuZ2FuIGFydXMgaW5pIgorCisjLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKK21zZ2lkICJwcmV2aWV3IGltYWdlIgorbXNnc3RyICJnYW1iYXIgcHJhdGF5YW5nIgorCittc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICJnYW1iYXIgcHJhdGF5YW5nIHlhbmcgYmVyaHVidW5nYW4gZGVuZ2FuIGFydXMgaW5pIgorCittc2dpZCAiYXR0YWNobWVudCIKK21zZ3N0ciAibGFtcGlyYW4iCisKK21zZ2lkICJmaWxlIGF0dGFjaGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICJiZXJrYXMgeWFuZyBkaWxhbXBpcmthbiBkYWxhbSBhcnVzIGluaSIKKworbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCittc2dzdHIgImRlbnl1dCBwZXIgbWVuaXQiCisKK21zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKK21zZ3N0ciAianVtbGFoIGRlbnl1dCBwZXIgbWVuaXQgZGFsYW0gYXVkaW8iCisKK21zZ2lkICJrZXl3b3JkcyIKK21zZ3N0ciAia2F0YSBrdW5jaSIKKworbXNnaWQgImNvbW1hIHNlcGFyYXRlZCBrZXl3b3JkcyBkZXNjcmliaW5nIHRoZSBjb250ZW50IgorbXNnc3RyICJrYXRhIGt1bmNpIHlhbmcgZGlwaXNhaGthbiBrb21hIG1lbmVyYW5na2FuIGlzaSBkYXRhIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIG5hbWUiCittc2dzdHIgIm5hbWEgbG9rYXNpIGdlb2dyYWZpcyIKKworbXNnaWQgIiIKKyJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgorInByb2R1Y2VkIgorbXNnc3RyICIiCisibG9rYXNpIGRlc2tyaXB0aWYgZGFwYXQgZGliYWNhIG1hbnVzaWEgZGltYW5hIG1lZGlhIHRlbGFoIGRpcmVrYW0gYXRhdSAiCisiZGloYXNpbGthbiIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBsYXRpdHVkZSIKK21zZ3N0ciAibGludGFuZyBsb2thc2kgZ2VvZ3JhZmlzIgorCittc2dpZCAiIgorImdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yICIKKyJzb3V0aGVybiBsYXRpdHVkZXMpIgorbXNnc3RyICIiCisibG9rYXNpIGxpbnRhbmcgZ2VvZ3JhZmlzIHRlbXBhdCBtZWRpYSBkaXJla2FtIGF0YXUgZGloYXNpbGthbiBkYWxhbSBkZXJhamF0ICIKKyJtZW51cnV0IFdHUzg0IChub2wgcGFkYSBraGF0dWxpc3Rpd2EsIG5pbGFpIG5lZ2F0aWYgdW50dWsgbGludGFuZyBzZWxhdGFuKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBsb25naXR1ZGUiCittc2dzdHIgImJ1anVyIGxva2FzaSBnZW9ncmFmaXMiCisKK21zZ2lkICIiCisiZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCisibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgorbXNnc3RyICIiCisibG9rYXNpIGJ1anVyIGdlb2dyYWZpcyB0ZW1wYXQgbWVkaWEgZGlyZWthbSBhdGF1IGRpaGFzaWxrYW4gZGFsYW0gZGVyYWphdCAiCisibWVudXJ1dCBXR1M4NCAobm9sIHBhZGEgbWVyaWRpYW4gdXRhbWEgZGkgR3JlZW53aWNoL1VLLCBuaWxhaSBuZWdhdGlmIHVudHVrICIKKyJidWp1ciB0aW11cikiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gZWxldmF0aW9uIgorbXNnc3RyICJrZXRpbmdnaWFuIGxva2FzaSBnZW9ncmFmaXMiCisKK21zZ2lkICIiCisiZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKKyJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgorbXNnc3RyICIiCisia2V0aW5nZ2lhbiBnZW9ncmFmaXMgdGVtcGF0IG1lZGlhIGRpcmVrYW0gYXRhdSBkaWhhc2lsa2FuIGRhbGFtIG1ldGVyICIKKyJtZW51cnV0IFdHUzg0IChub2wgYWRhbGFoIHBlcm11a2FhbiBsYXV0IHJhdGEtcmF0YSkiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gY291bnRyeSIKK21zZ3N0ciAibmVnYXJhIGxva2FzaSBnZW9ncmFmaXMiCisKK21zZ2lkICJjb3VudHJ5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKK21zZ3N0ciAiIgorIm5lZ2FyYSAoZGFsYW0gYmFoYXNhIEluZ2dyaXMpIHRlbXBhdCBtZWRpYSB0ZWxhaCBkaXJla2FtIGF0YXUgZGloYXNpbGthbiIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBjaXR5IgorbXNnc3RyICJrb3RhIGxva2FzaSBnZW9ncmFmaXMiCisKK21zZ2lkICJjaXR5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKK21zZ3N0ciAia290YSAoZGFsYW0gYmFoYXNhIEluZ2dyaXMpIHRlbXBhdCBtZWRpYSB0ZWxhaCBkaXJla2FtIGF0YXUgZGloYXNpbGthbiIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKK21zZ3N0ciAic3VibG9rYXNpIGxva2FzaSBnZW9ncmFmaXMiCisKK21zZ2lkICIiCisiYSBsb2NhdGlvbiB3aGl0aGluIGEgY2l0eSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgb3IgY3JlYXRlZCAoZS5nLiAiCisidGhlIG5laWdoYm9yaG9vZCkiCittc2dzdHIgIiIKKyJsb2thc2kgZGkgZGFsYW0ga290YSB0ZW1wYXQgbWVkaWEgZGloYXNpbGthbiBhdGF1IGRpYnVhdCAobWlzYWxueWEgIgorImxpbmdrdW5nYW4pIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgorbXNnc3RyICJuYW1hIGxva2FzaSBnZW9ncmFmaXMiCisKK21zZ2lkICJleHBlY3RlZCBlcnJvciBvZiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbmluZyBtZWFzdXJlcyAoaW4gbWV0ZXJzKSIKK21zZ3N0ciAiIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgorbXNnc3RyICJrZWNlcGF0YW4gZ2VyYWsgbG9rYXNpIGdlb2dyYWZpcyIKKworbXNnaWQgIiIKKyJtb3ZlbWVudCBzcGVlZCBvZiB0aGUgY2FwdHVyaW5nIGRldmljZSB3aGlsZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIGluIG0vcyIKK21zZ3N0ciAiIgorImtlY2VwYXRhbiBnZXJhayBkaXZhaXMgcGVuYW5na2FwIGtldGlrYSBtZWxha3VrYW4gcGVuYW5na2FwYW4gZGFsYW0gbS9kIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKK21zZ3N0ciAiYXJhaCBnZXJhayBsb2thc2kgZ2VvZ3JhZmlzIgorCittc2dpZCAiIgorImluZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBvZiBhICIKKyJtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgMCAiCisibWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgorbXNnc3RyICIiCisibWVuZ2luZGlrYXNpa2FuIGFyYWggZ2VyYWsgZGl2YWlzIHlhbmcgbWVsYWt1a2FuIHBlbmFuZ2thcGFuIG1lZGlhLiBBcmFoICIKKyJkaXJlcHJlc2VudGFzaWthbiBzZWJhZ2FpIGRlcmFqYXQgZGFsYW0gcmVwcmVzZW50YXNpIHRpdGlrIG1lbmdhbWJhbmcsIDAgIgorImJlcmFydGkgdXRhcmEgZ2VvZ3JhZmlzLCBkYW4gbWVuaW5na2F0IHNlYXJhaCBqYXJ1bSBqYW0iCisKK21zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCittc2dzdHIgImFyYWggcGVuYW5na2FwYW4gbG9rYXNpIGdlb2dyYWZpcyIKKworbXNnaWQgIiIKKyJpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nICBhIG1lZGlhLiAiCisiSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCAgcmVwcmVzZW50YXRpb24sIDAgbWVhbnMgdGhlICIKKyJnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKK21zZ3N0ciAiIgorIm1lbmdpbmRpa2FzaWthbiBhcmFoIGRpdmFpcyBtZW51bmp1ayBrZXRpa2EgbWVuYW5na2FwIG1lZGlhLiBBcmFoICIKKyJkaXJlcHJlc2VudGFzaWthbiBzZWJhZ2FpIGRlcmFqYXQgZGFsYW0gcmVwcmVzZW50YXNpIHRpdGlrIG1lbmdhbWJhbmcsIDAgIgorImJlcmFydGkgdXRhcmEgZ2VvZ3JhZmlzLCBkYW4gbWVuaW5na2F0IHNlYXJhaCBqYXJ1bSBqYW0iCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZScgaGVyZQorbXNnaWQgInNob3cgbmFtZSIKK21zZ3N0ciAidGFtcGlsa2FuIG5hbWEiCisKK21zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgorbXNnc3RyICJOYW1hIGRhcmkgYWNhcmEgdHYvcG9kY2FzdC9zZXJpYWwgbWVkaWEgYmVyYXNhbCIKKworIy4gVFJBTlNMQVRPUlM6ICdzaG93IHNvcnRuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZSBhcyB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzJyBoZXJlCittc2dpZCAic2hvdyBzb3J0bmFtZSIKK21zZ3N0ciAidGFtcGlsa2FuIG5hbWEgc2luZ2thdCIKKworbXNnaWQgIiIKKyJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiIgorIk5hbWEgZGFyaSBhY2FyYSB0di9wb2RjYXN0L3NlcmlhbCBtZWRpYSBiZXJhc2FsLCB1bnR1ayB0dWp1YW4gcGVuZ3VydXRhbiIKKworbXNnaWQgImVwaXNvZGUgbnVtYmVyIgorbXNnc3RyICJqdW1sYWggZXBpc29kZSIKKworbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICJKdW1sYWggZXBpc29kZSBkYWxhbSBzZW11c2ltIHRlbXBhdCBtZWRpYSBtZW5qYWRpIGJhZ2lhbm55YSIKKworbXNnaWQgInNlYXNvbiBudW1iZXIiCittc2dzdHIgImp1bWxhaCBtdXNpbSIKKworbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICJKdW1sYWggbXVzaW0gZGFyaSBhY2FyYSB0ZW1wYXQgbWVkaWEgbWVuamFkaSBiYWdpYW5ueWEiCisKK21zZ2lkICJseXJpY3MiCittc2dzdHIgImxpcmlrIgorCittc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgorbXNnc3RyICJMaXJpayBkYXJpIG1lZGlhLCB1bXVtbnlhIGRpZ3VuYWthbiB1bnR1ayBsYWd1IgorCittc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCittc2dzdHIgIm5hbWEgc2luZ2thdCBrb21wb3NlciIKKworbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZywgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIm9yYW5nIHlhbmcgbWVuZ29tcG9zaXNpIHJla2FtYW4sIHVudHVrIGtlcGVudGluZ2FuIHBlbmd1cnV0YW4iCisKK21zZ2lkICJncm91cGluZyIKK21zZ3N0ciAicGVuZ2Vsb21wb2trYW4iCisKK21zZ2lkICIiCisiR3JvdXBzIHJlbGF0ZWQgbWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSB0cmFja3MsIGxpa2UgdGhlIGRpZmZlcmVudCBwaWVjZXMgIgorIm9mIGEgY29uY2VydG8uIEl0IGlzIGEgaGlnaGVyIGxldmVsIHRoYW4gYSB0cmFjaywgYnV0IGxvd2VyIHRoYW4gYW4gYWxidW0iCittc2dzdHIgIiIKKyJHcnVwIHRlcmthaXQgbWVkaWEgeWFuZyBtZWxpcHV0aSBiYW55YWsgamFsdXIsIHNlcGVydGkgYmFnaWFuIHlhbmcgYmVyYmVkYSAiCisiZGFyaSBzZWJ1YWgga29uc2VyLiBJbmkgYWRhbGFoIGxldmVsIHlhbmcgbGViaWggdGluZ2dpIGRhcmkgamFsdXIsIHRhcGkgIgorImxlYmloIHJlbmRhaCBkYXJpIGFsYnVtIgorCittc2dpZCAidXNlciByYXRpbmciCittc2dzdHIgInBlcmluZ2thdCBwZW5nZ3VuYSIKKworbXNnaWQgIiIKKyJSYXRpbmcgYXR0cmlidXRlZCBieSBhIHVzZXIuIFRoZSBoaWdoZXIgdGhlIHJhbmssIHRoZSBtb3JlIHRoZSB1c2VyIGxpa2VzICIKKyJ0aGlzIG1lZGlhIgorbXNnc3RyICIiCisiUGVyaW5na2F0IGRpYXRyaWJ1c2kgb2xlaCBwZW5nZ3VuYS4gTWFraW4gdGluZ2dpIHBlcmluZ2thdCwgbWFraW4gc3VrYSAiCisicGVuZ2d1bmEgdGVyaGFkYXAgbWVkaWEgaW5pIgorCittc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKK21zZ3N0ciAibWFudWZha3R1ciBkaXZhaXMiCisKK21zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICJNYW51ZmFrdHVyIGRpdmFpcyB5YW5nIGRpZ3VuYWthbiB1bnR1ayBtZW5hbmdrYXAgbWVkaWEiCisKK21zZ2lkICJkZXZpY2UgbW9kZWwiCittc2dzdHIgIm1vZGVsIGRpdmFpcyIKKworbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKK21zZ3N0ciAiTW9kZWwgZGl2YWlzIHlhbmcgZGlndW5ha2FuIHVudHVrIG1lbWJ1YXQgbWVkaWEgaW5pIgorCisjLCBmdXp6eQorbXNnaWQgImFwcGxpY2F0aW9uIG5hbWUiCittc2dzdHIgIm5hbWEgbG9rYXNpIGdlb2dyYWZpcyIKKworIywgZnV6enkKK21zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCittc2dzdHIgIk1vZGVsIGRpdmFpcyB5YW5nIGRpZ3VuYWthbiB1bnR1ayBtZW1idWF0IG1lZGlhIGluaSIKKworbXNnaWQgImFwcGxpY2F0aW9uIGRhdGEiCittc2dzdHIgIiIKKworbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCittc2dzdHIgIiIKKworbXNnaWQgImltYWdlIG9yaWVudGF0aW9uIgorbXNnc3RyICJvcmllbnRhc2kgZ2FtYmFyIgorCittc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgorbXNnc3RyICJCYWdhaW1hbmEgZ2FtYmFyIGhhcnVzIGRpcHV0YXIgYXRhdSBkaWJhbGlrIHNlYmVsdW0gZGl0YW1waWxrYW4iCisKK21zZ2lkICIsICIKK21zZ3N0ciAiLCAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAiR0FMQVQ6IGRhcmkgZWxlbWVuICVzOiAlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorIkluZm8gYXdha3V0dSB0YW1iYWhhbjpcbiIKKyIlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgInNwZWNpZmllZCBlbXB0eSBiaW4gXCIlc1wiLCBub3QgYWxsb3dlZCIKK21zZ3N0ciAibWVuZW50dWthbiBrb3RhayBzYW1wYWgga29zb25nIFwiJXNcIiwgdGFrIGRpaXppbmthbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBiaW4gXCIlc1wiLCBza2lwcGluZyIKK21zZ3N0ciAidGFrIGFkYSB0ZW1wYXQgc2FtcGFoIFwiJXNcIiwgZGlsZXdhdGkiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICJ0YWsgYWRhIHByb3BlcnRpIFwiJXNcIiBkaSBlbGVtZW4gXCIlc1wiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKK21zZ3N0ciAidGFrIGRhcGF0IG1lbmdhdHVyIHByb3BlcnRpIFwiJXNcIiBkaSBlbGVtZW4gXCIlc1wiIGtlIFwiJXNcIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbGluayAlcyB0byAlcyIKK21zZ3N0ciAidGFrIGRhcGF0IG1lbmF1dGthbiAlcyBrZSAlcyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKK21zZ3N0ciAidGFrIGFkYSBlbGVtZW4gXCIlc1wiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKK21zZ3N0ciAidGFrIGRhcGF0IG1lbmd1cmFpa2FuIGh1cnVmIFwiJXNcIiIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIKK21zZ3N0ciAidGF1dCB0YW5wYSBlbGVtZW4gc3VtYmVyIgorCittc2dpZCAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKK21zZ3N0ciAidGF1dCB0YW5wYSBlbGVtZW4gYnVhbmciCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgInRhayBhZGEgZWxlbWVuIHN1bWJlciB1bnR1ayBVUkkgXCIlc1wiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGVsZW1lbnQgdG8gbGluayBVUkkgXCIlc1wiIHRvIgorbXNnc3RyICJ0YWsgYWRhIGVsZW1lbiBrZSB0YXV0IFVSSSBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJ0YWsgYWRhIGVsZW1lbiBidWFuZyB1bnR1ayBVUkkgXCIlc1wiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAidGFrIGRhcGF0IG1lbmF1dGthbiBlbGVtZW4gYnVhbmcgdW50dWsgVVJJIFwiJXNcIiIKKworbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgorbXNnc3RyICJiYXJpcyBwaXBhIGtvc29uZyB0YWsgZGlpemlua2FuIgorCittc2dpZCAiSW50ZXJuYWwgY2xvY2sgZXJyb3IuIgorbXNnc3RyICJHYWxhdCBqYW0gaW50ZXJuYWwuIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKK21zZ3N0ciAiR2FsYXQgYWxpcmFuIGRhdGEgaW50ZXJuYWwuIgorCittc2dpZCAiQSBsb3Qgb2YgYnVmZmVycyBhcmUgYmVpbmcgZHJvcHBlZC4iCittc2dzdHIgIkJhbnlhayBwZW55YW5nZ2EgeWFuZyBkaWRyb3AuIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IHByb2JsZW0uIgorbXNnc3RyICJNYXNhbGFoIGFsaXJhbiBkYXRhIGludGVybmFsLiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiR2FsYXQgYXJ1cyBkYXRhIGludGVybmFsLiIKKworbXNnaWQgIkZpbHRlciBjYXBzIgorbXNnc3RyICJGaWx0ZXIgaHVydWYiCisKK21zZ2lkICIiCisiUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCisicHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKK21zZ3N0ciAiIgorIkxhcmFuZyBrZW1hbXB1YW4geWFuZyBtdW5na2luIGRpaXppbmthbiAoS09TT05HIGJlcmFydGkgQVBBUFVOKS4gUGVuZ2F0dXJhbiAiCisicHJvcGVydGkgaW5pIGJlcnN1bWJlciBwYWRhIG9iamVrIEdzdENhcHMgeWFuZyBkaXNlZGlha2FuLiIKKworbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJUYWsgYWRhIG5hbWEgYmVya2FzIHlhbmcgZGl0ZW50dWthbiB1bnR1ayBkaXR1bGlzLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCittc2dzdHIgIlRhayBkYXBhdCBtZW1idWthIGJlcmthcyBcIiVzXCIgdW50dWsgZGl0dWxpcy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCittc2dzdHIgIkdhbGF0IG1lbnVsaXMgYmVya2FzIFwiJXNcIi4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Vla2luZyBpbiBmaWxlIFwiJXNcIi4iCittc2dzdHIgIkdhbGF0IGtldGlrYSBtZW5jYXJpIGRpIGJlcmthcyBcIiVzXCIuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgorbXNnc3RyICJHYWxhdCBrZXRpa2EgbWVudWxpcyBrZSBiZXJrYXMgXCIlc1wiLiIKKworbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHJlYWRpbmcuIgorbXNnc3RyICJUYWsgYWRhIG5hbWEgeWFuZyBkaXRlbnR1a2FuIHVudHVrIGRpYmFjYS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgorbXNnc3RyICJUYWsgZGFwYXQgbWVtYnVrYSBiZXJrYXMgXCIlc1wiIHVudHVrIGRpYmFjYS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCittc2dzdHIgIlRhayBiaXNhIG1lbmRhcGF0a2FuIGluZm8gZGkgXCIlc1wiLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIgorbXNnc3RyICJcIiVzXCIgYWRhbGFoIGRpcmVrdG9yaS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZSBcIiVzXCIgaXMgYSBzb2NrZXQuIgorbXNnc3RyICJCZXJrYXMgXCIlc1wiIGFkYWxhaCBzb2tldC4iCisKK21zZ2lkICJGYWlsZWQgYWZ0ZXIgaXRlcmF0aW9ucyBhcyByZXF1ZXN0ZWQuIgorbXNnc3RyICJHYWdhbCBzZXRlbGFoIHBlbmd1bGFuZ2FuIHNlcGVydGkgeWFuZyBkaW1pbnRhLiIKKworbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCittc2dzdHIgIlRhayBhZGEgZGlyZWt0b3JpIFRlbXAgeWFuZyBkaXRlbnR1a2FuLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIgorbXNnc3RyICJUYWsgYmlzYSBtZW1idWF0IGJlcmthcyB0ZW1wIFwiJXNcIi4iCisKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIgorbXNnc3RyICJHYWxhdCBrZXRpa2EgbWVudWxpcyBrZSBiZXJrYXMgdW5kdWhhbi4iCisKK21zZ2lkICJjYXBzIgorbXNnc3RyICJodXJ1ZiIKKworbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCittc2dzdHIgIm1lbmRldGVrc2kga2VtYW1wdWFuIGRhbGFtIGFydXMiCisKK21zZ2lkICJtaW5pbXVtIgorbXNnc3RyICJtaW5pbXVtIgorCittc2dpZCAibWF4aW11bSIKK21zZ3N0ciAibWFrc2ltdW0iCisKK21zZ2lkICJmb3JjZSBjYXBzIgorbXNnc3RyICJwYWtzYSBodXJ1ZiIKKworbXNnaWQgImZvcmNlIGNhcHMgd2l0aG91dCBkb2luZyBhIHR5cGVmaW5kIgorbXNnc3RyICJwYWtzYSBodXJ1ZiB0YW5wYSBtZWxha3VrYW4gcGVuY2FyaWFuIHRpcGUiCisKK21zZ2lkICJTdHJlYW0gY29udGFpbnMgbm8gZGF0YS4iCittc2dzdHIgIkFydXMgdGlkYWsgYmVyaXNpIGRhdGEuIgorCittc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKK21zZ3N0ciAiQW50YXJtdWthIFRlcmltcGxlbWVudGFzaTpcbiIKKworbXNnaWQgInJlYWRhYmxlIgorbXNnc3RyICJkYXBhdCBkaWJhY2EiCisKK21zZ2lkICJ3cml0YWJsZSIKK21zZ3N0ciAiZGFwYXQgZGl0dWxpcyIKKworbXNnaWQgImNvbnRyb2xsYWJsZSIKK21zZ3N0ciAiZGFwYXQgZGlrZW5kYWxpa2FuIgorCittc2dpZCAiY2hhbmdlYWJsZSBpbiBOVUxMLCBSRUFEWSwgUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUiCittc2dzdHIgIiIKKworbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiCittc2dzdHIgIiIKKworbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMIG9yIFJFQURZIHN0YXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJCbGFja2xpc3RlZCBmaWxlczoiCittc2dzdHIgIkJlcmthcyB5YW5nIGRpbGFyYW5nOiIKKworbXNnaWQgIlRvdGFsIGNvdW50OiAiCittc2dzdHIgIkp1bWxhaCB0b3RhbDogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdGVkIGZpbGUiCittc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdGVkIGZpbGVzIgorbXNnc3RyWzBdICIlZCBiZXJrYXMgdGVybGFyYW5nIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIHBsdWdpbiIKK21zZ2lkX3BsdXJhbCAiJWQgcGx1Z2lucyIKK21zZ3N0clswXSAiJWQgcGx1Z2luIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdCBlbnRyeSIKK21zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0IGVudHJpZXMiCittc2dzdHJbMF0gIiVkIGVudHJpIHRlcmxhcmFuZyIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBmZWF0dXJlIgorbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKK21zZ3N0clswXSAiJWQgZml0dXIiCisKK21zZ2lkICJQcmludCBhbGwgZWxlbWVudHMiCittc2dzdHIgIkNldGFrIHNlbXVhIGVsZW1lbiIKKworbXNnaWQgIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHIgIkNldGFrIHNlbmFyYWkgZGFyaSBiZXJrYXMgeWFuZyBkaWxhcmFuZyIKKworbXNnaWQgIiIKKyJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgorInBsdWdpbnMgcHJvdmlkZS5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKKyJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgorbXNnc3RyICIiCisiQ2V0YWsgc2VuYXJhaSBkYXBhdCBkaWJhY2EgbWVzaW4gZGFyaSBmaXR1ciBwbHVnaW4geWFuZyBkaXRlbnR1a2FuIGF0YXUgIgorInNlbXVhIHBsdWdpbiB5YW5nIGRpc2VkaWFrYW4uXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmVyZ3VuYSBkYWxhbSBrb25la3NpIGRlbmdhbiBwbHVnaW4gIgorIm90b21hdGlzIGVrc3Rlcm5hbCBkYWxhbSBtZWthbmlzbWUgaW5zdGFsYXNpIgorCittc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgorbXNnc3RyICJUYW1waWxrYW4gaXNpIHBsdWdpbiIKKworbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKK21zZ3N0ciAiIgorIkNldGFrIHNrZW1hIFVSSSB5YW5nIGRpZHVrdW5nLCBkZW5nYW4gZWxlbWVuIHlhbmcgbWVuZ2ltcGxlbWVudGFzaWthbm55YSIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmlsZTogJXNcbiIKK21zZ3N0ciAiVGFrIGRhcGF0IG1lbWJ1YXQgYmVya2FzIHBsdWdpbjogJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIGVsZW1lbnQgb3IgcGx1Z2luICclcydcbiIKK21zZ3N0ciAiVGFrIGFkYSBlbGVtZW4gYXRhdSBwbHVnaW4gJyVzJ1xuIgorCittc2dpZCAiSW5kZXggc3RhdGlzdGljcyIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIGVsZW1lbnQgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAiTWVuZGFwYXQgcGVzYW4gIyV1IGRhcmkgZWxlbWVuIFwiJXNcIiAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCittc2dzdHIgIk1lbmRhcGF0IHBlc2FuICMldSBkYXJpIGJhbnRhbGFuIFwiJXM6JXNcIiAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gb2JqZWN0IFwiJXNcIiAoJXMpOiAiCittc2dzdHIgIk1lbmRhcGF0IHBlc2FuICMldSBkYXJpIG9iamVrIFwiJXNcIiAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKK21zZ3N0ciAiTWVuZGFwYXQgUGVzYW4gIyV1ICglcyk6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgRU9TIGZyb20gZWxlbWVudCBcIiVzXCIuXG4iCittc2dzdHIgIk1lbmRhcGF0IEVPUyBkYXJpIGVsZW1lbiBcIiVzXCIuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKK21zZ3N0ciAiTUVORU1VS0FOIFRBRyAgICAgIDogZGl0ZW11a2FuIG9sZWggZWxlbWVuIFwiJXNcIi5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCittc2dzdHIgIk1FTkVNVUtBTiBUQUcgICAgICA6IGRpdGVtdWthbiBvbGVoIGJhbnRhbGFuIFwiJXM6JXNcIi5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCittc2dzdHIgIk1FTkVNVUtBTiBUQUcgICAgICA6IGRpdGVtdWthbiBvbGVoIG9iamVrIFwiJXNcIi5cbiIKKworbXNnaWQgIkZPVU5EIFRBR1xuIgorbXNnc3RyICJNRU5FTVVLQU4gVEFHXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklORk86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorIklORk86XG4iCisiJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCittc2dzdHIgIlBFUklOR0FUQU46IGRhcmkgZWxlbWVuICVzOiAlc1xuIgorCittc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLi4uXG4iCittc2dzdHIgIlByYWd1bHVuZywgbWVudW5nZ3UgaGluZ2dhIHBlbnlhbmdnYSBzZWxlc2FpLi4uXG4iCisKK21zZ2lkICJidWZmZXJpbmcuLi4iCittc2dzdHIgIm1lbnlhbmdnYS4uLiIKKworbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIlNlbGVzYWkgbWVueWFuZ2dhLCBtZW5nYXR1ciBiYXJpcyBwaXBhIGtlIE1FTVVUQVIgLi4uXG4iCisKK21zZ2lkICJCdWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgorbXNnc3RyICJNZW55YW5nZ2EsIG1lbmdhdHVyIGJhcmlzIHBpcGEga2UgSkVEQSAuLi5cbiIKKworbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCittc2dzdHIgIk1lbmRpc3RyaWJ1c2lrYW4gdWxhbmcgbGF0ZW5jeS4uLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iCittc2dzdHIgIk1lbmdhdHVyIHRpbmdrYXQga2UgJXMgc2VwZXJ0aSBkaW1pbnRhIG9sZWggJXMuLi5cbiIKKworbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCittc2dzdHIgIkludGVydXBzaTogTWVuZ2hlbnRpa2FuIGJhcmlzIHBpcGEgLi4uXG4iCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKK21zZ3N0ciAidGFrIGFkYSBlbGVtZW4gXCIlc1wiIgorCittc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgorbXNnc3RyICJUYWcga2VsdWFyYW4gKGp1Z2EgZGlrZW5hbCBzZWJhZ2FpIG1ldGFkYXRhKSIKKworbXNnaWQgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCittc2dzdHIgIkluZm9ybWFzaSBzdGF0dXMga2VsdWFyYW4gZGFuIHBlbWJlcml0YWh1YW4gcHJvcGVydGkiCisKK21zZ2lkICJEbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uIgorbXNnc3RyICJKYW5nYW4gY2V0YWsgaW5mb3JtYXNpIHByb3NlcyIKKworbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKK21zZ3N0ciAiUGVzYW4ga2VsdWFyYW4iCisKK21zZ2lkICJEbyBub3Qgb3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBvZiBUWVBFIgorbXNnc3RyICJKYW5nYW4ga2VsdWFya2FuIGluZm9ybWFzaSBzdGF0dXMgZGFyaSBUSVBFIgorCittc2dpZCAiVFlQRTEsVFlQRTIsLi4uIgorbXNnc3RyICJUSVBFMSwgVElQRTIsLi4uIgorCittc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgorbXNnc3RyICJKYW5nYW4gaW5zdGFsIHBlbmFuZ2FuYW4gZ2FsYXQiCisKK21zZ2lkICJQcmludCBhbGxvYyB0cmFjZSAoaWYgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUpIgorbXNnc3RyICJDZXRhayBqZWphayBhbG9rYXNpIChqaWthIGRpYWt0aWZrYW4gc2V3YWt0dSBrb21waWxhc2kpIgorCittc2dpZCAiRm9yY2UgRU9TIG9uIHNvdXJjZXMgYmVmb3JlIHNodXR0aW5nIHRoZSBwaXBlbGluZSBkb3duIgorbXNnc3RyICJQYWtzYSBFT1MgcGFkYSBzdW1iZXIgc2ViZWx1bSBtZW1hdGlrYW4gcGVtaXBhYW4iCisKK21zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKK21zZ3N0ciAiR0FMQVQ6IGJhcmlzIHBpcGEgdGFrIGRhcGF0IGRpYmFuZ3VuOiAlcy5cbiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXG4iCittc2dzdHIgIkdBTEFUOiBiYXJpcyBwaXBhIHRhayBkYXBhdCBkaWJhbmd1bi5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCittc2dzdHIgIlBFUklOR0FUQU46IGJhcmlzIHBpcGEgYmVyaXNpIGdhbGF0OiAlc1xuIgorCittc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgorbXNnc3RyICJHQUxBVDogZWxlbWVuICdiYXJpcyBwaXBhJyB0YWsgZGl0ZW11a2FuLlxuIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCittc2dzdHIgIk1lbmdhdHVyIGJhcmlzIHBpcGEga2UgSkVEQSAuLi5cbiIKKworbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCittc2dzdHIgIkdBTEFUOiBCYXJpcyBwaXBhIHRhayBpbmdpbiBkaWplZGFrYW4uXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCittc2dzdHIgIkJhcmlzIHBpcGEgdGVsYWggaGlkdXAgZGFuIHRhayBtZW1idXR1aGthbiBQUkFHVUxVTkcgLi4uXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMSU5HIC4uLlxuIgorbXNnc3RyICJCYXJpcyBwaXBhIFBSQUdVTFVORyAuLi5cbiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcHJlcm9sbC5cbiIKK21zZ3N0ciAiR0FMQVQ6IGJhcmlzIHBpcGEgdGFrIGluZ2luIGRpcHJhZ3VsdW5nLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgorbXNnc3RyICJCYXJpcyBwaXBhIHRlbGFoIFBSQUdVTFVORyAuLi5cbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKK21zZ3N0ciAiTWVuZ2F0dXIgYmFyaXMgcGlwYSBrZSBQVVRBUiAuLi5cbiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKK21zZ3N0ciAiR0FMQVQ6IGJhcmlzIHBpcGEgdGlkYWsgaW5naW4gZGlwdXRhci5cbiIKKworbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIEZvcmNpbmcgRU9TIG9uIHRoZSBwaXBlbGluZVxuIgorbXNnc3RyICJFT1MgcGFkYSBtYXRpa2FuIGRpYWt0aWZrYW4gLS0gUGFrc2EgRU9TIHBhZGEgcGVtaXBhYW5cbiIKKworbXNnaWQgIldhaXRpbmcgZm9yIEVPUy4uLlxuIgorbXNnc3RyICJNZW51bmdndSB1bnR1ayBFT1MuLi5cbiIKKworbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCittc2dzdHIgIkVPUyBkaXRlcmltYSAtIG1lbmdoZW50aWthbiBiYXJpcyBwaXBhLi4uXG4iCisKK21zZ2lkICJBbiBlcnJvciBoYXBwZW5lZCB3aGlsZSB3YWl0aW5nIGZvciBFT1NcbiIKK21zZ3N0ciAiR2FsYXQgdGVyamFkaSBrZXRpa2EgbWVudW5nZ3UgRU9TXG4iCisKK21zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKK21zZ3N0ciAiRWtzZWt1c2kgYmVyYWtoaXIgc2V0ZWxhaCAlIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKK21zZ3N0ciAiTWVuZ2F0dXIgYmFyaXMgcGlwYSBrZSBTSUFQIC4uLlxuIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgorbXNnc3RyICJNZW5nYXR1ciBiYXJpcyBwaXBhIGtlIEtPU09ORyAuLi5cbiIKKworbXNnaWQgIkZyZWVpbmcgcGlwZWxpbmUgLi4uXG4iCittc2dzdHIgIk1lbWJlYmFza2FuIGJhcmlzIHBpcGEgLi4uXG4iCisKKyN+IG1zZ2lkICJVc2FnZTogZ3N0LXhtbGxhdW5jaCA8ZmlsZS54bWw+IFsgZWxlbWVudC5wcm9wZXJ0eT12YWx1ZSAuLi4gXVxuIgorI34gbXNnc3RyICIiCisjfiAiUGVuZ2d1bmFhbjogZ3N0LXhtbGxhdW5jaCA8YmVya2FzLnhtbD4gWyBlbGVtZW4ucHJvcGVydGk9bmlsYWkgLi4uIF1cbiIKKworI34gbXNnaWQgIkVSUk9SOiBwYXJzZSBvZiB4bWwgZmlsZSAnJXMnIGZhaWxlZC5cbiIKKyN+IG1zZ3N0ciAiR0FMQVQ6IHBlbmd1cmFpYW4gYmVya2FzIHhtbCAnJXMnIGdhZ2FsLlxuIgorCisjfiBtc2dpZCAiRVJST1I6IG5vIHRvcGxldmVsIHBpcGVsaW5lIGVsZW1lbnQgaW4gZmlsZSAnJXMnLlxuIgorI34gbXNnc3RyICJHQUxBVDogdGFrIGFkYSBlbGVtZW4gYmFyaXMgcGlwYSBsZXZlbCBhdGFzIGRpIGJlcmthcyAnJXMnLlxuIgorCisjfiBtc2dpZCAiV0FSTklORzogb25seSBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLlxuIgorI34gbXNnc3RyICIiCisjfiAiUEVSSU5HQVRBTjogaGFueWEgc2F0dSBlbGVtZW4gbGV2ZWwgYXRhcyB5YW5nIGRpZHVrdW5nIHBhZGEgc2FhdCBpbmkuXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogY291bGQgbm90IHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAlZDogJXMuXG4iCisjfiBtc2dzdHIgIkdBTEFUOiB0YWsgZGFwYXQgbWVuZ3VyYWlrYW4gYXJndW1lbiBiYXJpcyBwZXJpbnRhaCAlZDogJXMuXG4iCisKKyN+IG1zZ2lkICJXQVJOSU5HOiBlbGVtZW50IG5hbWVkICclcycgbm90IGZvdW5kLlxuIgorI34gbXNnc3RyICJHQUxBVDogZWxlbWVuIHlhbmcgZGluYW1ha2FuICclcycgdGFrIGRpdGVtdWthbi5cbiIKKworI34gbXNnaWQgIlNhdmUgeG1sIHJlcHJlc2VudGF0aW9uIG9mIHBpcGVsaW5lIHRvIEZJTEUgYW5kIGV4aXQiCisjfiBtc2dzdHIgIlNpbXBhbiBwZXJ3YWtpbGFuIHhtbCBiYXJpcyBwaXBhIGtlIEJFUktBUyBsYWx1IGtlbHVhciIKKworI34gbXNnaWQgIkZJTEUiCisjfiBtc2dzdHIgIkJFUktBUyIKKworI34gbXNnaWQgIkRvIG5vdCBpbnN0YWxsIHNpZ25hbCBoYW5kbGVycyBmb3IgU0lHVVNSMSBhbmQgU0lHVVNSMiIKKyN+IG1zZ3N0ciAiSmFuZ2FuIGluc3RhbCBwZW5hbmdhbmFuIHNpbnlhbCB1bnR1ayBTSUdVU1IxIGRhbiBTSUdVU1IyIgorCisjfiBtc2dpZCAiRXJyb3Igd3JpdGluZyByZWdpc3RyeSBjYWNoZSB0byAlczogJXMiCisjfiBtc2dzdHIgIkdhbGF0IG1lbnVsaXMgdGVtYm9sb2sgcmVnaXN0cnkga2UgJXM6ICVzIgorCisjfiBtc2dpZCAiRXJyb3IgcmUtc2Nhbm5pbmcgcmVnaXN0cnkgJXM6ICVzIgorI34gbXNnc3RyICJHYWxhdCBtZW1pbmRhaSB1bGFuZyByZWdpc3RyeSAlczogJXMiCisKKyN+IG1zZ2lkICJFcnJvciByZS1zY2FubmluZyByZWdpc3RyeSAlcyIKKyN+IG1zZ3N0ciAiR2FsYXQgbWVtaW5kYWkgdWxhbmcgcmVnaXN0cnkgJXMiCisKKyN+IG1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQuIgorI34gbXNnc3RyICJHYWxhdCBHU3RyZWFtZXIgaW50ZXJuYWw6IG1lbmd1YmFoIGtvbmRpc2kgZ2FnYWwuIgorCisjfiBtc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIGRlc2NyaXB0b3IgXCIlZFwiLiIKKyN+IG1zZ3N0ciAiR2FsYXQga2V0aWthIG1lbnVsaXMga2UgcGVuamVsYXMgYmVya2FzIFwiJWRcIi4iCisKKyN+IG1zZ2lkICJGaWxlIGRlc2NyaXB0b3IgXCIlZFwiIGlzIG5vdCB2YWxpZC4iCisjfiBtc2dzdHIgIlBlbmplbGFzIGJlcmthcyBcIiVkXCIgdGlkYWsgc2FoLiIKKworI34gbXNnaWQgIkZSRUVJTkcgcGlwZWxpbmUgLi4uXG4iCisjfiBtc2dzdHIgIk1FTUJFQkFTS0FOIGJhcmlzIHBpcGEuLi5cbiIKKworI34gbXNnaWQgIm9yaWdpbmFsIGxvY2F0aW9uIG9mIGZpbGUgYXMgYSBVUkkiCisjfiBtc2dzdHIgImxva2FzaSBhc2xpIGJlcmthcyBkYWxhbSBiZW50dWsgVVJJIgpkaWZmIC0tZ2l0IGEvcG8vaW5zZXJ0LWhlYWRlci5zaW4gYi9wby9pbnNlcnQtaGVhZGVyLnNpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjZkZTAxCi0tLSAvZGV2L251bGwKKysrIGIvcG8vaW5zZXJ0LWhlYWRlci5zaW4KQEAgLTAsMCArMSwyMyBAQAorIyBTZWQgc2NyaXB0IHRoYXQgaW5zZXJ0cyB0aGUgZmlsZSBjYWxsZWQgSEVBREVSIGJlZm9yZSB0aGUgaGVhZGVyIGVudHJ5LgorIworIyBBdCBlYWNoIG9jY3VycmVuY2Ugb2YgYSBsaW5lIHN0YXJ0aW5nIHdpdGggIm1zZ2lkICIsIHdlIGV4ZWN1dGUgdGhlIGZvbGxvd2luZworIyBjb21tYW5kcy4gQXQgdGhlIGZpcnN0IG9jY3VycmVuY2UsIGluc2VydCB0aGUgZmlsZS4gQXQgdGhlIGZvbGxvd2luZworIyBvY2N1cnJlbmNlcywgZG8gbm90aGluZy4gVGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhlIGZpcnN0IGFuZCB0aGUgZm9sbG93aW5nCisjIG9jY3VycmVuY2VzIGlzIGFjaGlldmVkIGJ5IGxvb2tpbmcgYXQgdGhlIGhvbGQgc3BhY2UuCisvXm1zZ2lkIC97Cit4CisjIFRlc3QgaWYgdGhlIGhvbGQgc3BhY2UgaXMgZW1wdHkuCitzL20vbS8KK3RhCisjIFllcyBpdCB3YXMgZW1wdHkuIEZpcnN0IG9jY3VycmVuY2UuIFJlYWQgdGhlIGZpbGUuCityIEhFQURFUgorIyBPdXRwdXQgdGhlIGZpbGUncyBjb250ZW50cyBieSByZWFkaW5nIHRoZSBuZXh0IGxpbmUuIEJ1dCBkb24ndCBsb3NlIHRoZQorIyBjdXJyZW50IGxpbmUgd2hpbGUgZG9pbmcgdGhpcy4KK2cKK04KK2JiCis6YQorIyBUaGUgaG9sZCBzcGFjZSB3YXMgbm9uZW1wdHkuIEZvbGxvd2luZyBvY2N1cnJlbmNlcy4gRG8gbm90aGluZy4KK3gKKzpiCit9CmRpZmYgLS1naXQgYS9wby9pdC5nbW8gYi9wby9pdC5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA5NDY2MAotLS0gL2Rldi9udWxsCisrKyBiL3BvL2l0LmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9pdC5wbyBiL3BvL2l0LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYzlmMmYKLS0tIC9kZXYvbnVsbAorKysgYi9wby9pdC5wbwpAQCAtMCwwICsxLDE0MjAgQEAKKyMgSXRhbGlhbiB0cmFuc2xhdGlvbiBmb3IgZ3N0cmVhbWVyIHBhY2thZ2Ugb2YgR1N0cmVhbWVyIHByb2plY3QuCisjIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBHU3RyZWFtZXIgdGVhbQorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ3N0cmVhbWVyIHBhY2thZ2UuCisjCisjIEFsY3VuZSBub3RlIChlc3NlbnppYWxtZW50ZSB1bmEgdHJhZHV6aW9uZSkgZG9wbyB1bmEgbGV0dHVyYSBub24gdHJvcHBvCisjIGFwcHJvZm9uZGl0YSBkZWwgbWFudWFsZSBkaSBHU3RyZWFtZXIKKyMKKyMgVGVuZXRlIHByZXNlbnRlIGNoZSwgZGEgdW4gcHVudG8gZGkgdmlzdGEgZGVsbG8gc3ZpbHVwcGF0b3JlLCBHU3RyZWFtZXIKKyMgw6ggcGVzYW50ZW1lbnRlIGluZmx1ZW56YXRvIGRhbGxhIHN0cnV0dHVyYSBkaSBHTGliLCBlZCBpbiBwYXJ0aWNvbGFyZQorIyBkZWkgR09iamVjdCwgcGVyIGN1aSBsZSB2YXJpZSBmdW56aW9uaSBkaSBsaWJyZXJpYSBvcGVyYW5vIGNvbiBpbAorIyBjcml0ZXJpbyBkZWxsYSBwcm9ncmFtbWF6aW9uZSBvcmllbnRhdGEgYWdsaSBvZ2dldHRpLgorIworIyBQZXIgY2hpIG1pIGNhcGlzY2UsIGUgdGFnbGlhbmRvIHZpYSBlbGVtZW50aSBxdWkgbm9uIGVzc2VuemlhbGkKKyMKKyMgR09iamVjdAorIyAgICAgICAgIEdzdE9iamVjdAorIyAgICAgICAgICAgICAgICAgR3N0UGFkCisjICAgICAgICAgICAgICAgICBHc3RFbGVtZW50CisjICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEJpbgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFBpcGVsaW5lCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0VGhyZWFkCisjCisjCisjIC0tLSBFbGVtZW50cyAtLS0KKyMKKyMgVW4gZWxlbWVudG8gw6ggaWwgYmxvY2NvIGNvc3RydXR0aXZvIGRpIGJhc2UgcGVyIHVuYSAibWVkaWEgcGlwZWxpbmUiLgorIyBUdXR0aSBpIGRpZmZlcmVudGkgZWxlbWVudGkgZGkgYWx0byBsaXZlbGxvIHVzYXRpIHNvbm8gZGVyaXZhdGkgZGEKKyMgR3N0RWxlbWVudC4gR2xpIGVsZW1lbnRpIHNvbm8gImJsYWNrIGJveGVzIiBjb24gdW4gbnVtZXJvIGRpIGRpZmZlcmVudGkKKyMgYXNwZXR0aS4gVW5vIGRpIHF1ZXN0aSBhc3BldHRpIMOoIGxhIHByZXNlbnphIGRpICJwYWRzIiwgbyBwdW50aSBkaQorIyBjb2xsZWdhbWVudG8gKGxpbmsgcG9pbnRzKS4gVGhpcyB0ZXJtaW5vbG9neSBhcmlzZXMgZnJvbSBzb2xkZXJpbmc7IHBhZHMKKyMgYXJlIHdoZXJlIHdpcmVzIGNhbiBiZSBhdHRhY2hlZC4KKyMKKyMgVGlwaSBkaSBlbGVtZW50bzoKKyMgICAgICAgKiBzb3VyY2UgLSBnZW5lcmEgaSBkYXRpIGRhIHVzYXJlIGluIHVuYSBwaXBlbGluZSwgYWQgZXMuIGxlZ2dlbmRvCisjICAgICAgICAgZGEgcXVhbGNvc2EgKGRpc2NvLCByZXRlLCBjYW5hbGUgc2NoZWRhIGF1ZGlvLi4uKS4gSGFubm8gc29sbyB1bgorIyAgICAgICAgIHNvdXJjZSBwYWQKKyMgICAgICAgKiBmaWx0ZXIvY29kZWMgLSBoYW5ubyBkZWkgcGFkIGRpIGlucHV0IGVkIG91dHB1dC4gT3BlcmFubyBzdWkKKyMgICAgICAgICBkYXRpIGNoZSByaWNldm9ubyBuZWwgc2luayBwYWQgZSBwcm9kdWNvbm8gZGF0aSBzdWwgbG9ybyBzb3VyY2UKKyMgICAgICAgICBwYWQuIFVuIGRlbXV4ZXIgYXBwYXJ0aWVuZSBhIHF1ZXN0YSBjYXRlZ29yaWEgKDEgaW4sIDIgb3V0KQorIyAgICAgICAqIHNpbmsgLSBwdW50byBkJ3VzY2l0YSBkaSB1bmEgcGlwZWxpbmUsIGFjY2V0dGFubyBkYXRpIHNlbnphCisjICAgICAgICAgcHJvZHVybmUgYWx0cmkuIEltcGxlbWVudGF6aW9uaSBkaSBlbGVtZW50aSBzaW5rIHNvbm8gbGEKKyMgICAgICAgICBzY3JpdHR1cmEgc3UgZmlsZSwgbGEgcmlwcm9kdXppb25lIGF1ZGlvIG8gdmlkZW8uCisjCisjIC0tLSBQYWRzIC0tLQorIworIyBTb25vIGwnaW50ZXJmYWNjaWEgZGkgdW4gZWxlbWVudG8gdmVyc28gaWwgbW9uZG8gZXN0ZXJuby4gUGVybWV0dG9ubyBkaQorIyBlc3BvcnJlIGlsIHRpcG8gc3BlY2lmaWNvIGRpIG1lZGlhIGNoZSBsJ2VsZW1lbnRvIHB1w7IgZ2VzdGlyZS4KKyMKKyMgSSBwYWQgcG9zc29ubyBlc3NlcmUgc291cmNlIGUgc2luazogY2nDsiBkaXBlbmRlIGRhbCBwdW50byBkaSB2aXN0YQorIyBkZWxsJ2VsZW1lbnRvIGN1aSBhcHBhcnRlbmdvbm8KKyMKKyMgVGlwaSBkaSBwYWQ6CisjICAgICAgICogZGluYW1pY2kgLSBsJ2VsZW1lbnRvIGNyZWEgdW4gcGFkIHNlIG5lY2Vzc2FyaW8sIGVzZW1waW86IG1wZWcKKyMgICAgICAgICBtdWx0aXBsZXhlciBjcmVhIHBhZCBhIHNlY29uZGEgZGVpIGRpZmZlcmVudGkgc3RyZWFtIGVsZW1lbnRhcmkKKyMgICAgICAgICByaWxldmF0aSBuZWxsbyBzdHJlYW0gbXBlZworIyAgICAgICAqIHJlcXVlc3RlZCAtIHBhZCBjcmVhdG8gb24gZGVtYW5kCisjCisjIC0tLSBDYXBhYmlsaXRpZXMgLS0tCisjCisjIFVzYXRlIHBlciBkZXNjcml2ZXJlIGkgdGlwaSBkaSBkYXRpIGNoZSBwb3Nzb25vICJhdHRyYXZlcnNhcmUiIGlsIHBhZC4KKyMgU29ubyBhbGxlZ2F0ZSBhbCBwYWQgc3Rlc3NvLiBDYXBhYmlsaXRpZXMgc3RhIHBlciAiY2FwYWJpbGl0eSBjaGFpbiIKKyMKKyMgW1NhbHRvIGxlIHBhcnRpIGNvbXBsaWNhdGVdIExlIGNhcGFiaWxpdGllcyBzb25vIHVzYXRlIHBlcgorIyBsJ2F1dG9wbHVnZ2luZyAoYXV0b21hdGljYWxseSBmaW5kaW5nIHBsdWdpbnMgZm9yIGEgc2V0IG9mIGNhcGFiaWxpdGllcykKKyMgZWQgaWwgcmlsZXZhbWVudG8gZGkgY29tcGF0aWJpbGl0w6AgKHRyYSBkdWUgcGFkIGNvbGxlZ2F0aSAtICJjYXBzCisjIG5lZ290aWF0aW9uIikKKyMKKyMgLS0tIExpbmsgLS0tCisjCisjIERhdGkgdHJlIGVsZW1lbnRpIChzb3VyY2UsIGZpbHRlciwgc2luaykgcG9zc28gY29sbGVnYXJlIGluIG1vZG8KKyMgb3Bwb3J0dW5vIGkgcmVsYXRpdmkgcGFkLCBjcmVhbmRvIHVuYSBjYXRlbmEuIFZlZGkgYWxsZWdhdG8uCisjCisjIC0tLSBCaW5zIC0tLQorIworIyBVbiBiaW4gw6ggdW4gZWxlbWVudG8gY29udGVuaXRvcmUuIMOIIHBvc3NpYmlsZSBhZ2dpdW5nZXJlIGVsZW1lbnRpIGFkIHVuCisjIGJpbiwgY29zw6wgY29tZSDDqCBwb3NzaWJpbGUgYWdnaXVuZ2VybG8gYWQgdW4gYWx0cm8gYmluLgorIworIyBDb25zZW50ZSBkaSBjb21iaW5hcmUgdW4gZ3J1cHBvIGRpIGVsZW1lbnRpIGNvbGxlZ2F0aSBpbiB1biBlbGVtZW50bworIyBsb2dpY28uIEEgcXVlc3RvIHB1bnRvIG5vbiBzZXJ2ZSArIHJhZ2lvbmFyZSBpbiB0ZXJtaW5pIGRlaSBzaW5nb2xpCisjIGVsZW1lbnRpLCBtYSBkZWwgYmluLgorIworIyBVbmEgcGlwZWxpbmUgw6ggdW4gZWxlbWVudG8gYmluLCB1biBjb250ZW5pdG9yZSBnZW5lcmljbyBjaGUgY29uc2VudGUgbGEKKyMgc2NoZWR1bGF6aW9uZSBkZWdsaSBlbGVtZW50aSBjb250ZW51dGkuIElsICJ0b3BsZXZlbCBiaW4iIGRldmUgZXNzZXJlCisjIHVuYSBwaXBlbGluZS4KKyMKKyMgQW5jaGUgdW4gdGhyZWFkIMOoIHVuIGVsZW1lbnRvIGJpbiwgY2hlIGNvbnNlbnRlIGwnZXNlY3V6aW9uZSBzZXBhcmF0YS4KKyMKKyMgLS0tIEJ1ZmZlcnMgLS0tCisjCisjIENvbnRlbmdvbm8gaSBkYXRpIGNoZSBzY29ycm9ubyAoZmxvdykgYXR0cmF2ZXJzbyB1bmEgcGlwZWxpbmUuCisjIFRpcGljYW1lbnRlIGdsaSBlbGVtZW50aSBzb3VyY2UgY3JlYW5vIHVuIG51b3ZvIGJ1ZmZlci4KKyMKKyMgLS0tIEVsZW1lbnQgc3RhdGVzIC0tLQorIworIyAgICAgICAqIE5VTEwgLSBwcmVkZWZpbml0bywgbCdlbGVtZW50byDDqCBjcmVhdG8gZSBub24gc3RhIGZhY2VuZG8KKyMgICAgICAgICBhbGN1bmNow6kKKyMgICAgICAgKiBSRUFEWSAtIHByb250byBhIGZhcmUgcXVhbGNvc2EKKyMgICAgICAgKiBQQVVTRUQgLSBpbiBwYXVzYQorIyAgICAgICAqIFBMQVlJTkcgLSBzdGEgZmFjZW5kbyBxdWFsY29zYQorIworIyBTaSBwYXNzYSBkYSBOVUxMIGEgUExBWUlORyBhdHRyYXZlcnNvIGkgZHVlIHN0YXRpIGludGVybWVkaS4KKyMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMdWNhIEZlcnJldHRpIDxlbGxlLnVjYUBpbmZpbml0by5pdD4sIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAuCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnc3RyZWFtZXIgMC4xMC4zMC4zXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDktMjkgMTQ6NTUrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTAtMTAtMjUgMTA6MDMrMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogTHVjYSBGZXJyZXR0aSA8ZWxsZS51Y2FAaW5maW5pdG8uaXQ+XG4iCisiTGFuZ3VhZ2UtVGVhbTogSXRhbGlhbiA8dHBAbGlzdHMubGludXguaXQ+XG4iCisiTGFuZ3VhZ2U6IGl0XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9biAhPSAxO1xuIgorCisjIC0tZ3N0LXZlcnNpb24KK21zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCittc2dzdHIgIlN0YW1wYSBsYSB2ZXJzaW9uZSBkaSBHU3RyZWFtZXIiCisKKyMgLS1nc3QtZmF0YWwtd2FybmluZ3MKK21zZ2lkICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKK21zZ3N0ciAiUmVuZGUgdHV0dGkgaSB3YXJuaW5nIGNyaXRpY2kiCisKKyMgLS1nc3QtZGVidWctaGVscAorbXNnaWQgIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IgorbXNnc3RyICJTdGFtcGEgbGUgY2F0ZWdvcmllIGRpIGRlYnVnIGRpc3BvbmliaWxpIGVkIGVzY2UiCisKKyMgLS1nc3QtZGVidWctbGV2ZWw9TElWRUxMTworbXNnaWQgIiIKKyJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gNSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKK21zZ3N0ciAiIgorIkxpdmVsbG8gZGkgZGVidWcgcHJlZGVmaW5pdG8gZGEgMSAoc29sbyBlcnJvcmkpIGEgNSAodHV0dG8pLCBvcHB1cmUgMCBwZXIgIgorIm5lc3N1biBvdXRwdXQiCisKK21zZ2lkICJMRVZFTCIKK21zZ3N0ciAiTElWRUxMTyIKKworIyAtLWdzdC1kZWJ1Zz1FTEVOQ08KK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCisidGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgorbXNnc3RyICIiCisiRWxlbmNvIGRpIGNvcHBpZSBcIm5vbWVfY2F0ZWdvcmlhPWxpdmVsbG9cIiBzZXBhcmF0ZSBkYSB2aXJnb2xlIHBlciAiCisiaW1wb3N0YXJlIGkgbGl2ZWxsaSBzcGVjaWZpY2kgcGVyIG9nbmkgc2luZ29sYSBjYXRlZ29yaWEuIEVzZW1waW86ICIKKyJHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCisKK21zZ2lkICJMSVNUIgorbXNnc3RyICJFTEVOQ08iCisKKyMgLS1nc3QtZGVidWctbm8tY29sb3IKK21zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKK21zZ3N0ciAiRGlzYWJpbGl0YSBvdXRwdXQgZGkgZGVidWcgY29sb3JhdG8iCisKKyMgLS1nc3QtZGVidWctZGlzYWJsZQorbXNnaWQgIkRpc2FibGUgZGVidWdnaW5nIgorbXNnc3RyICJEaXNhYmlsaXRhIGRlYnVnIgorCisjIC0tZ3N0LXBsdWdpbi1zcGV3Cittc2dpZCAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCittc2dzdHIgIkFiaWxpdGEgZGlhZ25vc3RpY2EgcHJvbGlzc2EgZGVsIGNhcmljYW1lbnRvIHBsdWdpbiIKKworIyAtLWdzdC1wbHVnaW4tcGF0aD1QRVJDT1JTSQorbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCittc2dzdHIgIlBlcmNvcnNpIGNoZSBjb250ZW5nb25vIGkgcGx1Z2luIHNlcGFyYXRpIGRhIGR1ZSBwdW50aSAoOikiCisKK21zZ2lkICJQQVRIUyIKK21zZ3N0ciAiUEVSQ09SU0kiCisKKyMgLS1nc3QtcGx1Z2luLWxvYWQ9UExVR0lOCittc2dpZCAiIgorIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgorImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKK21zZ3N0ciAiIgorIkVsZW5jbyBzZXBhcmF0byBkYSB2aXJnb2xlIGRlaSBwbHVnaW4gZGEgcHJlLWNhcmljYXJlIGluIGFnZ2l1bnRhIGFsbCdlbGVuY28gIgorIm1lbW9yaXp6YXRvIG5lbGxhIHZhcmlhYmlsZSBkJ2FtYmllbnRlIEdTVF9QTFVHSU5fUEFUSCIKKworbXNnaWQgIlBMVUdJTlMiCittc2dzdHIgIlBMVUdJTiIKKworIyAtLWdzdC1kaXNhYmxlLXNlZ3RyYXAKK21zZ2lkICJEaXNhYmxlIHRyYXBwaW5nIG9mIHNlZ21lbnRhdGlvbiBmYXVsdHMgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIgorbXNnc3RyICJEaXNhYmlsaXRhIGlsIHRyYXBwaW5nIGRlaSBzZWdmYXVsdCBkdXJhbnRlIGlsIGNhcmljYW1lbnRvIGRlaSBwbHVnaW4iCisKKyMgLS1nc3QtZGlzYWJsZS1yZWdpc3RyeS11cGRhdGUKK21zZ2lkICJEaXNhYmxlIHVwZGF0aW5nIHRoZSByZWdpc3RyeSIKK21zZ3N0ciAiRGlzYWJpbGl0YSBsJ2FnZ2lvcm5hbWVudG8gZGVsIHJlZ2lzdHJvIgorCisjIC0tZ3N0LWRpc2FibGUtcmVnaXN0cnktZm9yaworbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIiIKKyJEaXNhYmlsaXRhIGxhIGdlbmVyYXppb25lIGRpIHVuIHByb2Nlc3NvIGhlbHBlciBkdXJhbnRlIGxhIHNjYW5zaW9uZSBkZWwgIgorInJlZ2lzdHJvIgorCisjIGludGVzdGF6aW9uZSBjYXRlZ29yaWEgb3B6aW9uaSBwcmVjZW5kZW50aQorbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgorbXNnc3RyICJPcHppb25pIGRpIEdTdHJlYW1lciIKKworIyAtLWhlbHAtZ3N0Cittc2dpZCAiU2hvdyBHU3RyZWFtZXIgT3B0aW9ucyIKK21zZ3N0ciAiTW9zdHJhIGxlIG9wemlvbmkgZGkgR1N0cmVhbWVyIgorCittc2dpZCAiVW5rbm93biBvcHRpb24iCittc2dzdHIgIk9wemlvbmUgc2Nvbm9zY2l1dGEiCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIGNvcmUgbGlicmFyeSBlcnJvci4iCittc2dzdHIgIkdTdHJlYW1lciBoYSBpbmNvbnRyYXRvIHVuIGVycm9yZSBnZW5lcmljbyBkZWxsZSBsaWJyZXJpZSBkaSBiYXNlLiIKKworbXNnaWQgIiIKKyJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuIgorbXNnc3RyICIiCisiR2xpIHN2aWx1cHBhdG9yaSBkaSBHU3RyZWFtZXIgc29ubyBzdGF0aSB0cm9wcG8gcGlncmkgcGVyIGFzc2VnbmFyZSB1biAiCisiY29kaWNlIGQnZXJyb3JlIGEgcXVlc3RvIGVycm9yZS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKK21zZ3N0ciAiRXJyb3JlIGludGVybm8gZGkgR1N0cmVhbWVyOiBjb2RpY2Ugbm9uIGltcGxlbWVudGF0by4iCisKK21zZ2lkICIiCisiR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkIGFuZCBzb21lIGVsZW1lbnQgZmFpbGVkIHRvIHBvc3QgYSAiCisicHJvcGVyIGVycm9yIG1lc3NhZ2Ugd2l0aCB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZS4iCittc2dzdHIgIiIKKyJFcnJvcmUgZGkgR1N0cmVhbWVyOiBjYW1iaW8gZGkgc3RhdG8gbm9uIHJpdXNjaXRvLCBhbGN1bmkgZWxlbWVudGkgbm9uIHNvbm8gIgorInJpdXNjaXRpIGEgcHViYmxpY2FyZSB1biBhcHByb3ByaWF0byBtZXNzYWdnaW8gZGkgZXJyb3JlIGNvbiBpbCBtb3Rpdm8gZGVsICIKKyJmYWxsaW1lbnRvLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogcGFkIHByb2JsZW0uIgorbXNnc3RyICJFcnJvcmUgaW50ZXJubyBkaSBHU3RyZWFtZXI6IHByb2JsZW1hIGRpIHBhZC4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiIKK21zZ3N0ciAiRXJyb3JlIGludGVybm8gZGkgR1N0cmVhbWVyOiBwcm9ibGVtYSBkaSB0aHJlYWQuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBuZWdvdGlhdGlvbiBwcm9ibGVtLiIKK21zZ3N0ciAiRXJyb3JlIGludGVybm8gZGkgR1N0cmVhbWVyOiBwcm9ibGVtYSBkaSBuZWdvemlhemlvbmUuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBldmVudCBwcm9ibGVtLiIKK21zZ3N0ciAiRXJyb3JlIGludGVybm8gZGkgR1N0cmVhbWVyOiBwcm9ibGVtYSBkaSBldmVudG8uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uIgorbXNnc3RyICJFcnJvcmUgaW50ZXJubyBkaSBHU3RyZWFtZXI6IHByb2JsZW1hIGRpIHBvc2l6aW9uYW1lbnRvLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2FwcyBwcm9ibGVtLiIKK21zZ3N0ciAiRXJyb3JlIGludGVybm8gZGkgR1N0cmVhbWVyOiBwcm9ibGVtYSBkaSBjYXBzLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGFnIHByb2JsZW0uIgorbXNnc3RyICJFcnJvcmUgaW50ZXJubyBkaSBHU3RyZWFtZXI6IHByb2JsZW1hIGRpIHRhZy4iCisKK21zZ2lkICJZb3VyIEdTdHJlYW1lciBpbnN0YWxsYXRpb24gaXMgbWlzc2luZyBhIHBsdWctaW4uIgorbXNnc3RyICJOZWxsJ2luc3RhbGxhemlvbmUgZGkgR1N0cmVhbWVyIGluIHVzbyBtYW5jYSB1biBwbHVnaW4uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKK21zZ3N0ciAiRXJyb3JlIGludGVybm8gZGkgR1N0cmVhbWVyOiBwcm9ibGVtYSBkaSBjbG9jay4iCisKK21zZ2lkICIiCisiVGhpcyBhcHBsaWNhdGlvbiBpcyB0cnlpbmcgdG8gdXNlIEdTdHJlYW1lciBmdW5jdGlvbmFsaXR5IHRoYXQgaGFzIGJlZW4gIgorImRpc2FibGVkLiIKK21zZ3N0ciAiIgorIlF1ZXN0YSBhcHBsaWNhemlvbmUgc3RhIHRlbnRhbmRvIGRpIHVzYXJlIHVuYSBmdW56aW9uYWxpdMOgIGRpIEdTdHJlYW1lciBjaGUgIgorIsOoIHN0YXRhIGRpc2FiaWxpdGF0YS4iCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN1cHBvcnRpbmcgbGlicmFyeSBlcnJvci4iCittc2dzdHIgIkdTdHJlYW1lciBoYSBpbmNvbnRyYXRvIHVuIGVycm9yZSBnZW5lcmljbyBuZWxsZSBsaWJyZXJpZSBkaSBzdXBwb3J0by4iCisKK21zZ2lkICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBpbml6aWFsaXp6YXJlIGxhIGxpYnJlcmlhIGRpIHN1cHBvcnRvLiIKKworbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBjaGl1ZGVyZSBsYSBsaWJyZXJpYSBkaSBzdXBwb3J0by4iCisKK21zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIkltcG9zc2liaWxlIGNvbmZpZ3VyYXJlIGxhIGxpYnJlcmlhIGRpIHN1cHBvcnRvLiIKKworbXNnaWQgIkVuY29kaW5nIGVycm9yLiIKK21zZ3N0ciAiRXJyb3JlIG5lbCBjb2RpZmljYXJlLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIgaGEgaW5jb250cmF0byB1biBlcnJvcmUgZ2VuZXJpY28gZGkgcmlzb3JzZS4iCisKK21zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgorbXNnc3RyICJSaXNvcnNhIG5vbiB0cm92YXRhLiIKKworbXNnaWQgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCittc2dzdHIgIlJpc29yc2Egb2NjdXBhdGEgbyBub24gZGlzcG9uaWJpbGUuIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhcHJpcmUgbGEgcmlzb3JzYSBpbiBsZXR0dXJhLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYXByaXJlIGxhIHJpc29yc2EgaW4gc2NyaXR0dXJhLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYXByaXJlIGxhIHJpc29yc2EgaW4gbGV0dHVyYSBlIHNjcml0dHVyYS4iCisKK21zZ2lkICJDb3VsZCBub3QgY2xvc2UgcmVzb3VyY2UuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBjaGl1ZGVyZSBsYSByaXNvcnNhLiIKKworbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gcmVzb3VyY2UuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBsZWdnZXJlIGRhbGxhIHJpc29yc2EuIgorCittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgc2NyaXZlcmUgc3VsbGEgcmlzb3JzYS4iCisKK21zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZWZmZXR0dWFyZSB1biBwb3NpemlvbmFtZW50byBzdWxsYSByaXNvcnNhLiIKKworbXNnaWQgIkNvdWxkIG5vdCBzeW5jaHJvbml6ZSBvbiByZXNvdXJjZS4iCittc2dzdHIgIkltcG9zc2liaWxlIHNpbmNyb25penphcnNpIHN1bGxhIHJpc29yc2EuIgorCittc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCittc2dzdHIgIkltcG9zc2liaWxlIG90dGVuZXJlL3JlZ29sYXJlIGxlIGltcG9zdGF6aW9uaSBkZWxsYSByaXNvcnNhLiIKKworbXNnaWQgIk5vIHNwYWNlIGxlZnQgb24gdGhlIHJlc291cmNlLiIKK21zZ3N0ciAiTmllbnRlIHNwYXppbyBzdWxsYSByaXNvcnNhLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIGhhIGluY29udHJhdG8gdW4gZXJyb3JlIGdlbmVyaWNvIGRpIHN0cmVhbS4iCisKK21zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCittc2dzdHIgIiIKKyJMJ2VsZW1lbnRvIG5vbiBpbXBsZW1lbnRhIGxhIGdlc3Rpb25lIGRpIHF1ZXN0byBzdHJlYW0uIFNlIHBvc3NpYmlsZSAiCisic2VnbmFsYXJlIGlsIGJ1Zy4iCisKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIHR5cGUgb2Ygc3RyZWFtLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZGV0ZXJtaW5hcmUgaWwgdGlwbyBkaSBzdHJlYW0uIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBvZiBhIGRpZmZlcmVudCB0eXBlIHRoYW4gaGFuZGxlZCBieSB0aGlzIGVsZW1lbnQuIgorbXNnc3RyICIiCisiTG8gc3RyZWFtIMOoIGRpIHVuIHRpcG8gZGlmZmVyZW50ZSBkYSBxdWVsbG8gZ2VzdGl0byBkYSBxdWVzdG8gZWxlbWVudG8uIgorCittc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgorbXNnc3RyICJOb24gw6ggcHJlc2VudGUgYWxjdW4gY29kZWMgY2hlIHBvc3NhIGdlc3RpcmUgcXVlc3RvIHRpcG8gZGkgc3RyZWFtLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZWNvZGUgc3RyZWFtLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZGVjb2RpZmljYXJlIGxvIHN0cmVhbS4iCisKK21zZ2lkICJDb3VsZCBub3QgZW5jb2RlIHN0cmVhbS4iCittc2dzdHIgIkltcG9zc2liaWxlIGZhcmUgbCdlbmNvZGluZyBkZWxsbyBzdHJlYW0uIgorCittc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIkltcG9zc2liaWxlIGRlLW11bHRpcGxhcmUgbG8gc3RyZWFtLiIKKworbXNnaWQgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgbXVsdGlwbGFyZSBsbyBzdHJlYW0uIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiIKK21zZ3N0ciAiTG8gc3RyZWFtIMOoIG5lbCBmb3JtYXRvIGVycmF0by4iCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiUXVlc3RvIHN0cmVhbSDDqCBjaWZyYXRvIGUgbm9uIMOoIHN1cHBvcnRhdGEgbGEgZGVjb2RpZmljYS4iCisKK21zZ2lkICIiCisiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGNhbid0IGJlIGRlY3J5cHRlZCBiZWNhdXNlIG5vIHN1aXRhYmxlIGtleSBoYXMgIgorImJlZW4gc3VwcGxpZWQuIgorbXNnc3RyICIiCisiUXVlc3RvIHN0cmVhbSDDqCBjaWZyYXRvIGUgbm9uIHB1w7IgZXNzZXJlIGRlY29kaWZpY2F0byBwZXJjaMOpIG5vbiDDqCBzdGF0YSAiCisiZm9ybml0YSBhbGN1bmEgY2hpYXZlIGFkYXR0YS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzLiIKK21zZ3N0ciAiTmVzc3VuIG1lc3NhZ2dpbyBkJ2Vycm9yZSBwZXIgaWwgZG9taW5pbyAlcy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKK21zZ3N0ciAiTmVzc3VuIG1lc3NhZ2dpbyBkJ2Vycm9yZSBzdGFuZGFyZCBwZXIgaWwgZG9taW5pbyAlcyBlIGlsIGNvZGljZSAlZC4iCisKK21zZ2lkICJTZWxlY3RlZCBjbG9jayBjYW5ub3QgYmUgdXNlZCBpbiBwaXBlbGluZS4iCittc2dzdHIgIklsIGNsb2NrIHNlbGV6aW9uYXRvIG5vbiBwdcOyIGVzc2VyZSB1c2F0byBuZWxsYSBwaXBlbGluZS4iCisKKyMgcXVlc3RvIGUgaSBzdWNjZXNzaXZpIHNvbm8gbm9tZSArIGRlc2NyaXppb25lIGRlbGxlIHByb3ByaWV0w6AKKyMgZGVpIHRhZyBJRDMgKG8gc2ltaWxpKTsgbGUgZGVzY3JpemlvbmkgcGVyIG9tb2dlbmVpdMOgIGluaXppYW5vCisjIHR1dHRlIGNvbiBsYSBsZXR0ZXJhIG1pbnVzY29sYQorbXNnaWQgInRpdGxlIgorbXNnc3RyICJ0aXRvbG8iCisKK21zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIgorbXNnc3RyICJpbCB0aXRvbG8gdXNhdG8gY29tdW5lbWVudGUiCisKK21zZ2lkICJ0aXRsZSBzb3J0bmFtZSIKK21zZ3N0ciAibm9tZSBvcmRpbmFtZW50byB0aXRvbG8iCisKK21zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJpbCB0aXRvbG8gdXNhdG8gY29tdW5lbWVudGUgYSBzY29wbyBkaSBvcmRpbmFtZW50byIKKworbXNnaWQgImFydGlzdCIKK21zZ3N0ciAiYXJ0aXN0YSIKKworbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAibGEgbyBsZSBwZXJzb25lIHJlc3BvbnNhYmlsaSBkZWxsYSByZWdpc3RyYXppb25lIgorCittc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgorbXNnc3RyICJub21lIG9yZGluYW1lbnRvIGFydGlzdGEiCisKK21zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIiIKKyJsYSBvIGxlIHBlcnNvbmUgcmVzcG9uc2FiaWxpIGRlbGxhIHJlZ2lzdHJhemlvbmUgYSBzY29wbyBkaSBvcmRpbmFtZW50byIKKworbXNnaWQgImFsYnVtIgorbXNnc3RyICJhbGJ1bSIKKworbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgorbXNnc3RyICJsJ2FsYnVtIGNoZSBjb250aWVuZSBxdWVzdGkgZGF0aSIKKworbXNnaWQgImFsYnVtIHNvcnRuYW1lIgorbXNnc3RyICJub21lIG9yZGluYW1lbnRvIGFsYnVtIgorCittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgImwnYWxidW0gY2hlIGNvbnRpZW5lIHF1ZXN0aSBkYXRpIGEgc2NvcG8gZGkgb3JkaW5hbWVudG8iCisKK21zZ2lkICJhbGJ1bSBhcnRpc3QiCittc2dzdHIgImFydGlzdGEgYWxidW0iCisKK21zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQiCittc2dzdHIgImwnYXJ0aXN0YSBkZWxsJ2ludGVybyBhbGJ1bSwgY29zw6wgY29tZSBkb3ZyZWJiZSBlc3NlcmUgbW9zdHJhdG8iCisKK21zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgIm5vbWUgb3JkaW5hbWVudG8gYXJ0aXN0YSBhbGJ1bSIKKworbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCIKK21zZ3N0ciAibCdhcnRpc3RhIGRlbGwnaW50ZXJvIGFsYnVtLCBjb3PDrCBjb21lIGRvdnJlYmJlIGVzc2VyZSBvcmRpbmF0byIKKworbXNnaWQgImRhdGUiCittc2dzdHIgImRhdGEiCisKK21zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCittc2dzdHIgImxhIGRhdGEgaW4gY3VpIGkgZGF0aSBzb25vIHN0YXRpIGNyZWF0aSAoY29tZSBzdHJ1dHR1cmEgR0RhdGUpIgorCittc2dpZCAiZGF0ZXRpbWUiCittc2dzdHIgImRhdGEvb3JhIgorCittc2dpZCAiZGF0ZSBhbmQgdGltZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHc3REYXRlVGltZSBzdHJ1Y3R1cmUpIgorbXNnc3RyICIiCisibGEgZGF0YSBlIGwnb3JhIGluIGN1aSBpIGRhdGkgc29ubyBzdGF0aSBjcmVhdGkgKGNvbWUgc3RydXR0dXJhIEdzdERhdGVUaW1lKSIKKworbXNnaWQgImdlbnJlIgorbXNnc3RyICJnZW5lcmUiCisKK21zZ2lkICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKK21zZ3N0ciAiaWwgZ2VuZXJlIGEgY3VpIGFwcGFydGVuZ29ubyBxdWVzdGkgZGF0aSIKKworbXNnaWQgImNvbW1lbnQiCittc2dzdHIgImNvbW1lbnRvIgorCittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCittc2dzdHIgImRlbCB0ZXN0byBsaWJlcm8gYSBjb21tZW50byBkZWkgZGF0aSIKKworbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCittc2dzdHIgImNvbW1lbnRvIGVzdGVzbyIKKworbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIGluIGtleT12YWx1ZSBvciBrZXlbZW5dPWNvbW1lbnQgZm9ybSIKK21zZ3N0ciAiIgorImRlbCB0ZXN0byBsaWJlcm8gYSBjb21tZW50byBkZWkgZGF0aSBuZWxsYSBmb3JtYSBjaGlhdmU9dmFsb3JlIG8gY2hpYXZlW2l0XSIKKyI9Y29tbWVudG8iCisKK21zZ2lkICJ0cmFjayBudW1iZXIiCittc2dzdHIgIm51bWVybyBkaSB0cmFjY2lhIgorCittc2dpZCAidHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgImlsIG51bWVybyBkZWxsYSB0cmFjY2lhIGFsbCdpbnRlcm5vIGRpIHVuYSBjb2xsZXppb25lIgorCittc2dpZCAidHJhY2sgY291bnQiCittc2dzdHIgInRvdGFsZSB0cmFjY2UiCisKK21zZ2lkICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgorbXNnc3RyICIiCisiaWwgdG90YWxlIGRlbGxlIHRyYWNjZSBhbGwnaW50ZXJubyBkZWxsYSBjb2xsZXppb25lIGEgY3VpIHF1ZXN0YSB0cmFjY2lhICIKKyJhcHBhcnRpZW5lIgorCittc2dpZCAiZGlzYyBudW1iZXIiCittc2dzdHIgIm51bWVybyBkZWwgZGlzY28iCisKK21zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICJpbCBudW1lcm8gZGVsIGRpc2NvIGFsbCdpbnRlcm5vIGRpIHVuYSBjb2xsZXppb25lIgorCittc2dpZCAiZGlzYyBjb3VudCIKK21zZ3N0ciAidG90YWxlIGRpc2NoaSIKKworbXNnaWQgImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIgorbXNnc3RyICIiCisiaWwgdG90YWxlIGRlaSBkaXNjaGkgYWxsJ2ludGVybm8gZGVsbGEgY29sbGV6aW9uZSBhIGN1aSBxdWVzdG8gZGlzY28gIgorImFwcGFydGllbmUiCisKK21zZ2lkICJsb2NhdGlvbiIKK21zZ3N0ciAicG9zaXppb25lIgorCittc2dpZCAiIgorIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgorImlzIGhvc3RlZCkiCittc2dzdHIgIiIKKyJsJ29yaWdpbmUgZGVsIGNvbnRlbnV0byBtdWx0aW1lZGlhbGUgY29tZSBVUkkgKHBvc2l6aW9uZSBpbiBjdWkgaWwgZmlsZSBvICIKKyJzdHJlYW0gb3JpZ2luYWxlIMOoIG9zcGl0YXRvKSIKKworbXNnaWQgImhvbWVwYWdlIgorbXNnc3RyICJzaXRvIHdlYiIKKworbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCittc2dzdHIgIiIKKyJzaXRvIHdlYiBwZXIgcXVlc3RvIGNvbnRlbnV0byBtdWx0aW1lZGlhbGUgKGNpb8OoIGlsIHNpdG8gd2ViIGRlbGwnYXJ0aXN0YSBvICIKKyJkZWwgZmlsbSkiCisKK21zZ2lkICJkZXNjcmlwdGlvbiIKK21zZ3N0ciAiZGVzY3JpemlvbmUiCisKK21zZ2lkICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCittc2dzdHIgInVuIGJyZXZlIHRlc3RvIGNoZSBkZXNjcml2ZSBpbCBjb250ZW51dG8gZGVpIGRhdGkiCisKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICJ2ZXJzaW9uZSIKKworbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgorbXNnc3RyICJsYSB2ZXJzaW9uZSBkaSBxdWVzdGkgZGF0aSIKKworbXNnaWQgIklTUkMiCittc2dzdHIgIklTUkMiCisKK21zZ2lkICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCittc2dzdHIgIiIKKyJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gY29uc3VsdGFyZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMiCisKK21zZ2lkICJvcmdhbml6YXRpb24iCittc2dzdHIgIm9yZ2FuaXp6YXppb25lIgorCittc2dpZCAiY29weXJpZ2h0IgorbXNnc3RyICJjb3B5cmlnaHQiCisKK21zZ2lkICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJsJ2F2dmlzbyBzdWwgY29weXJpZ2h0IGRlaSBkYXRpIgorCittc2dpZCAiY29weXJpZ2h0IHVyaSIKK21zZ3N0ciAidXJpIGNvcHlyaWdodCIKKworbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAibCdVUkkgYWxsJ2F2dmlzbyBzdWwgY29weXJpZ2h0IGRlaSBkYXRpIgorCisjLCBmdXp6eQorbXNnaWQgImVuY29kZWQgYnkiCittc2dzdHIgImVuY29kZXIiCisKK21zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICJjb250YWN0IgorbXNnc3RyICJjb250YXR0byIKKworbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCittc2dzdHIgImxlIGluZm9ybWF6aW9uaSBzdWwgY29udGF0dG8iCisKK21zZ2lkICJsaWNlbnNlIgorbXNnc3RyICJsaWNlbnphIgorCittc2dpZCAibGljZW5zZSBvZiBkYXRhIgorbXNnc3RyICJsYSBsaWNlbnphIGRlaSBkYXRpIgorCittc2dpZCAibGljZW5zZSB1cmkiCittc2dzdHIgInVyaSBsaWNlbnphIgorCittc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJsJ1VSSSBhbGxhIGxpY2VuemEgZGVpIGRhdGkiCisKK21zZ2lkICJwZXJmb3JtZXIiCittc2dzdHIgImludGVycHJldGUiCisKK21zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKK21zZ3N0ciAibGEgbyBsZSBwZXJzb25lIGNoZSBoYW5ubyBpbnRlcnByZXRhdG8iCisKK21zZ2lkICJjb21wb3NlciIKK21zZ3N0ciAiY29tcG9zaXRvcmUiCisKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciCittc2dzdHIgImxhIG8gbGUgcGVyc29uZSBjaGUgaGFubm8gY29tcG9zdG8gZGVsbGEgcmVnaXN0cmF6aW9uZSIKKworbXNnaWQgImR1cmF0aW9uIgorbXNnc3RyICJkdXJhdGEiCisKK21zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKK21zZ3N0ciAibGEgbHVuZ2hlenphIGluIHVuaXTDoCBkaSB0ZW1wbyBkaSBHU3RyZWFtZXIgKG5hbm9zZWNvbmRpKSIKKworbXNnaWQgImNvZGVjIgorbXNnc3RyICJjb2RlYyIKKworbXNnaWQgImNvZGVjIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiaWwgY29kZWMgY29uIGN1aSBkaSBkYXRpIHNvbm8gbWVtb3JpenphdGkiCisKK21zZ2lkICJ2aWRlbyBjb2RlYyIKK21zZ3N0ciAiY29kZWMgdmlkZW8iCisKK21zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImlsIGNvZGVjIGNvbiBjdWkgaSBkYXRpIHZpZGVvIHNvbm8gbWVtb3JpenphdGkiCisKK21zZ2lkICJhdWRpbyBjb2RlYyIKK21zZ3N0ciAiY29kZWMgYXVkaW8iCisKK21zZ2lkICJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImlsIGNvZGVjIGNvbiBjdWkgaSBkYXRpIGF1ZGlvIHNvbm8gbWVtb3JpenphdGkiCisKK21zZ2lkICJzdWJ0aXRsZSBjb2RlYyIKK21zZ3N0ciAiY29kZWMgc290dG90aXRvbGkiCisKK21zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImlsIGNvZGVjIGNvbiBjdWkgaSBkYXRpIGRlaSBzb3R0b3RpdG9saSBzb25vIG1lbW9yaXp6YXRpIgorCittc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKK21zZ3N0ciAiZm9ybWF0byBjb250ZW5pdG9yZSIKKworbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJpbCBmb3JtYXRvIGNvbnRlbml0b3JlIGNvbiBjdWkgaSBkYXRpIHNvbm8gbWVtb3JpenphdGkiCisKK21zZ2lkICJiaXRyYXRlIgorbXNnc3RyICJiaXRyYXRlIgorCittc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAiaWwgYml0cmF0ZSBlc2F0dG8gbyBtZWRpbyBpbiBiaXQvcyIKKworbXNnaWQgIm5vbWluYWwgYml0cmF0ZSIKK21zZ3N0ciAiYml0cmF0ZSBub21pbmFsZSIKKworbXNnaWQgIm5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgImlsIGJpdHJhdGUgbm9taW5hbGUgaW4gYml0L3MiCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCittc2dzdHIgImJpdHJhdGUgbWluaW1vIgorCittc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAiaWwgYml0cmF0ZSBtaW5pbW8gaW4gYml0L3MiCisKK21zZ2lkICJtYXhpbXVtIGJpdHJhdGUiCittc2dzdHIgImJpdHJhdGUgbWFzc2ltbyIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgImlsIGJpdHJhdGUgbWFzc2ltbyBpbiBiaXQvcyIKKworbXNnaWQgImVuY29kZXIiCittc2dzdHIgImVuY29kZXIiCisKK21zZ2lkICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgorbXNnc3RyICJsJ2VuY29kZXIgdXNhdG8gcGVyIGNvZGlmaWNhcmUgcXVlc3RvIHN0cmVhbSIKKworbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKK21zZ3N0ciAidmVyc2lvbmUgZW5jb2RlciIKKworbXNnaWQgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCittc2dzdHIgImxhIHZlcnNpb25lIGRlbGwnZW5jb2RlciB1c2F0byBwZXIgY29kaWZpY2FyZSBxdWVzdG8gc3RyZWFtIgorCittc2dpZCAic2VyaWFsIgorbXNnc3RyICJzZXJpYWxlIgorCittc2dpZCAic2VyaWFsIG51bWJlciBvZiB0cmFjayIKK21zZ3N0ciAiaWwgbnVtZXJvIHNlcmlhbGUgZGVsbGEgdHJhY2NpYSIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKK21zZ3N0ciAiZ3VhZGFnbm8gdHJhY2NpYSByZXBsYXlnYWluIgorCittc2dpZCAidHJhY2sgZ2FpbiBpbiBkYiIKK21zZ3N0ciAiaWwgZ3VhZGFnbm8gZGVsbGEgdHJhY2NpYSBpbiBkQiIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgcGVhayIKK21zZ3N0ciAicGljY28gdHJhY2NpYSByZXBsYXlnYWluIgorCittc2dpZCAicGVhayBvZiB0aGUgdHJhY2siCittc2dzdHIgImlsIHBpY2NvIGRlbGxhIHRyYWNjaWEiCisKK21zZ2lkICJyZXBsYXlnYWluIGFsYnVtIGdhaW4iCittc2dzdHIgImd1YWRhZ25vIGFsYnVtIHJlcGxheWdhaW4iCisKK21zZ2lkICJhbGJ1bSBnYWluIGluIGRiIgorbXNnc3RyICJpbCBndWFkYWdubyBkZWxsJ2FsYnVtIGluIGRCIgorCittc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBwZWFrIgorbXNnc3RyICJwaWNjbyBhbGJ1bSByZXBsYXlnYWluIgorCittc2dpZCAicGVhayBvZiB0aGUgYWxidW0iCittc2dzdHIgImlsIHBpY2NvIGRlbGwnYWxidW0iCisKK21zZ2lkICJyZXBsYXlnYWluIHJlZmVyZW5jZSBsZXZlbCIKK21zZ3N0ciAibGl2ZWxsbyByaWZlcmltZW50byByZXBsYXlnYWluIgorCittc2dpZCAicmVmZXJlbmNlIGxldmVsIG9mIHRyYWNrIGFuZCBhbGJ1bSBnYWluIHZhbHVlcyIKK21zZ3N0ciAiIgorImlsIGxpdmVsbG8gZGkgcmlmZXJpbWVudG8gZGVpIHZhbG9yaSBkaSBndWFkYWdubyBkZWxsYSB0cmFjY2lhIGUgZGVsbCdhbGJ1bSIKKworbXNnaWQgImxhbmd1YWdlIGNvZGUiCittc2dzdHIgImNvZGljZSBsaW5ndWEiCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIGZvciB0aGlzIHN0cmVhbSwgY29uZm9ybWluZyB0byBJU08tNjM5LTEiCittc2dzdHIgImlsIGNvZGljZSBkZWxsYSBsaW5ndWEgcGVyIHF1ZXN0byBzdHJlYW0sIGNvbmZvcm1lIGEgSVNPLTYzOS0xIgorCittc2dpZCAiaW1hZ2UiCittc2dzdHIgImltbWFnaW5lIgorCittc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAibCdpbW1hZ2luZSByZWxhemlvbmF0YSBhIHF1ZXN0byBzdHJlYW0iCisKKyMuIFRSQU5TTEFUT1JTOiAncHJldmlldyBpbWFnZScgPSBpbWFnZSB0aGF0IHNob3dzIGEgcHJldmlldyBvZiB0aGUgZnVsbCBpbWFnZQorbXNnaWQgInByZXZpZXcgaW1hZ2UiCittc2dzdHIgImltbWFnaW5lIGFudGVwcmltYSIKKworbXNnaWQgInByZXZpZXcgaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAibCdpbW1hZ2luZSBkaSBhbnRlcHJpbWEgcmVsYXppb25hdGEgYSBxdWVzdG8gc3RyZWFtIgorCittc2dpZCAiYXR0YWNobWVudCIKK21zZ3N0ciAiYWxsZWdhdG8iCisKK21zZ2lkICJmaWxlIGF0dGFjaGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICJpbCBmaWxlIGFsbGVnYXRvIGEgcXVlc3RvIHN0cmVhbSIKKworIyBjZnIgaHR0cDovL2l0Lndpa2lwZWRpYS5vcmcvd2lraS9CYXR0aXRpX3Blcl9taW51dG8KK21zZ2lkICJiZWF0cyBwZXIgbWludXRlIgorbXNnc3RyICJiYXR0aXRpIHBlciBtaW51dG8iCisKK21zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKK21zZ3N0ciAiaWwgbnVtZXJvIGRpIGJhdHRpdGkgYWwgbWludXRvIG5lbGwnYXVkaW8iCisKK21zZ2lkICJrZXl3b3JkcyIKK21zZ3N0ciAicGFyb2xlIGNoaWF2ZSIKKworbXNnaWQgImNvbW1hIHNlcGFyYXRlZCBrZXl3b3JkcyBkZXNjcmliaW5nIHRoZSBjb250ZW50IgorbXNnc3RyICJsZSBwYXJvbGUgY2hpYXZlIHNlcGFyYXRlIGRhIHZpcmdvbGUgY2hlIGRlc2NyaXZvbm8gaWwgY29udGVzdG8iCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKK21zZ3N0ciAibm9tZSBsb2NhbGl0w6AgZ2VvZy4iCisKK21zZ2lkICIiCisiaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpdmUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yICIKKyJwcm9kdWNlZCIKK21zZ3N0ciAiIgorImxhIGRlc2NyaXppb25lIGNvbXByZW5zaWJpbGUgZGVsbGEgbG9jYWxpdMOgIGluIGN1aSBpbCBjb250ZW51dG8gbXVsdGltZWRpYWxlICIKKyLDqCBzdGF0byByZWdpc3RyYXRvIG8gcHJvZG90dG8iCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCittc2dzdHIgImxhdGl0dWRpbmUgbG9jYWxpdMOgIGdlb2cuIgorCisjIGh0dHA6Ly9pdC53aWtpcGVkaWEub3JnL3dpa2kvV0dTODQKKyMgV29ybGQgR2VvZGV0aWMgU3lzdGVtIDE5ODQKK21zZ2lkICIiCisiZ2VvIGxhdGl0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCisiZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIGVxdWF0b3IsIG5lZ2F0aXZlIHZhbHVlcyBmb3IgIgorInNvdXRoZXJuIGxhdGl0dWRlcykiCittc2dzdHIgIiIKKyJsYSBsYXRpdHVkaW5lIGdlb2dyYWZpY2EgZGVsbGEgbG9jYWxpdMOgIGluIGN1aSBpbCBjb250ZW51dG8gbXVsdGltZWRpYWxlIMOoICIKKyJzdGF0byByZWdpc3RyYXRvIG8gcHJvZG90dG8sIGVzcHJlc3NvIGluIGdyYWRpIHNlY29uZG8gbG8gc3RhbmRhcmQgV0dTODQgIgorIih6ZXJvIGFsbCdlcXVhdG9yZSwgdmFsb3JpIG5lZ2F0aXZpIHBlciBsZSBsYXRpdHVkaW5pIGEgc3VkKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBsb25naXR1ZGUiCittc2dzdHIgImxvbmdpdHVkaW5lIGxvY2FsaXTDoCBnZW9nLiIKKworbXNnaWQgIiIKKyJnZW8gbG9uZ2l0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCisiZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIHByaW1lIG1lcmlkaWFuIGluIEdyZWVud2ljaC9VSywgICIKKyJuZWdhdGl2ZSB2YWx1ZXMgZm9yIHdlc3Rlcm4gbG9uZ2l0dWRlcykiCittc2dzdHIgIiIKKyJsYSBsb25naXR1ZGluZSBnZW9ncmFmaWNhIGRlbGxhIGxvY2FsaXTDoCBpbiBjdWkgaWwgY29udGVudXRvIG11bHRpbWVkaWFsZSDDqCAiCisic3RhdG8gcmVnaXN0cmF0byBvIHByb2RvdHRvLCBpbiBncmFkaSBzZWNvbmRvIGxvIHN0YW5kYXJkIFdHUzg0ICh6ZXJvIGFsICIKKyJwcmltbyBtZXJpZGlhbm8gc3UgR3JlZW53aWNoL1VLLCB2YWxvcmkgbmVnYXRpdmkgcGVyIGxlIGxvbmdpdHVkaW5pIGEgb3Zlc3QpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKK21zZ3N0ciAiZWxldmF6aW9uZSBsb2NhbGl0w6AgZ2VvZy4iCisKK21zZ2lkICIiCisiZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKKyJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgorbXNnc3RyICIiCisibCdlbGV2YXppb25lIGdlb2dyYWZpY2EgZGVsbGEgbG9jYWxpdMOgIGluIGN1aSBpbCBjb250ZW51dG8gbXVsdGltZWRpYWxlIMOoICIKKyJzdGF0byByZWdpc3RyYXRvIG8gcHJvZG90dG8sIGluIG1ldHJpIHNlY29uZG8gbG8gc3RhbmRhcmQgV0dTODQgKHplcm8gw6ggaWwgIgorImxpdmVsbG8gbWVkaW8gZGVsIG1hcmUpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNvdW50cnkiCittc2dzdHIgIm5hemlvbmUgbG9jYWxpdMOgIGdlb2cuIgorCittc2dpZCAiY291bnRyeSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCittc2dzdHIgIiIKKyJuYXppb25lIChub21lIGluZ2xlc2UpIGluIGN1aSBpbCBjb250ZW51dG8gbXVsdGltZWRpYWxlIMOoIHN0YXRvIHJlZ2lzdHJhdG8gbyAiCisicHJvZG90dG8iCisKK21zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKK21zZ3N0ciAiY2l0dMOgIGxvY2FsaXTDoCBnZW9nLiIKKworbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICIiCisiY2l0dMOgIChub21lIGluZ2xlc2UpIGluIGN1aSBpbCBjb250ZW51dG8gbXVsdGltZWRpYWxlIMOoIHN0YXRvIHJlZ2lzdHJhdG8gbyAiCisicHJvZG90dG8iCisKK21zZ2lkICJnZW8gbG9jYXRpb24gc3VibG9jYXRpb24iCittc2dzdHIgInN1Yi1sb2NhbGl0w6AgbG9jYWxpdMOgIGdlb2cuIgorCittc2dpZCAiIgorImEgbG9jYXRpb24gd2hpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgorInRoZSBuZWlnaGJvcmhvb2QpIgorbXNnc3RyICIiCisidW5hIGxvY2FsaXTDoCBhbGwnaW50ZXJubyBkaSB1bmEgY2l0dMOgIGluIGN1aSBpbCBjb250ZW51dG8gbXVsdGltZWRpYWxlIMOoICIKKyJzdGF0byByZWdpc3RyYXRvIG8gcHJvZG90dG8gKHAuZS4gaWwgcXVhcnRpZXJlKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgorbXNnc3RyICJlcnJvcmUgb3JpenpvbnRhbGUgbG9jYWxpdMOgIGdlb2cuIgorCittc2dpZCAiZXhwZWN0ZWQgZXJyb3Igb2YgdGhlIGhvcml6b250YWwgcG9zaXRpb25pbmcgbWVhc3VyZXMgKGluIG1ldGVycykiCittc2dzdHIgImVycm9yZSBhdHRlc28gZGVsbGUgbWlzdXJlIGRpIHBvc2l6aW9uYW1lbnRvIG9yaXp6b250YWxlIChpbiBtZXRyaSkiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgc3BlZWQiCittc2dzdHIgInZlbG9jaXTDoCBtb3ZpbWVudG8gbG9jYWxpdMOgIGdlb2cuIgorCittc2dpZCAiIgorIm1vdmVtZW50IHNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgaW4gbS9zIgorbXNnc3RyICIiCisibGEgdmVsb2NpdMOgIGRpIG1vdmltZW50byBkZWwgZGlzcG9zaXRpdm8gZGkgYWNxdWlzaXppb25lIGR1cmFudGUgIgorImwnYWNxdWlzaXppb25lIHN0ZXNzYSBpbiBtL3MiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgorbXNnc3RyICJkaXJlemlvbmUgbW92aW1lbnRvIGxvY2FsaXTDoCBnZW9nLiIKKworbXNnaWQgIiIKKyJpbmRpY2F0ZXMgdGhlIG1vdmVtZW50IGRpcmVjdGlvbiBvZiB0aGUgZGV2aWNlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgb2YgYSAiCisibWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sIDAgIgorIm1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKK21zZ3N0ciAiIgorImluZGljYSBsYSBkaXJlemlvbmUgZGkgbW92aW1lbnRvIGRlbCBkaXNwb3NpdGl2byBuZWxsJ2VzZWd1aXJlICIKKyJsJ2FjcXVpc2l6aW9uZSBkaSB1biBjb250ZW51dG8gbXVsdGltZWRpYWxlOyDDqCByYXBwcmVzZW50YXRvIGNvbWUgZ3JhZGkgaW4gIgorIm5vdGF6aW9uZSBmbG9hdGluZyBwb2ludCwgY29uIDAgY2hlIGluZGljYSBpbCBub3JkIGdlb2dyYWZpY28gZSBpbmNyZW1lbnRpICIKKyJpbiBzZW50byBvcmFyaW8iCisKK21zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCittc2dzdHIgImRpcmV6aW9uZSBkaSBhY3F1aXNpemlvbmUgbG9jYWxpdMOgIGdlb2cuIgorCittc2dpZCAiIgorImluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcgIGEgbWVkaWEuICIKKyJJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50ICByZXByZXNlbnRhdGlvbiwgMCBtZWFucyB0aGUgIgorImdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgorbXNnc3RyICIiCisiaW5kaWNhIGxhIGRpcmV6aW9uZSBkZWwgZGlzcG9zaXRpdm8gbmVsbCdlc2VndWlyZSBsJ2FjcXVpc2l6aW9uZSBkaSB1biAiCisiY29udGVudXRvIG11bHRpbWVkaWFsZTsgw6ggcmFwcHJlc2VudGF0byBjb21lIGdyYWRpIGluIG5vdGF6aW9uZSBmbG9hdGluZyAiCisicG9pbnQsIGNvbiAwIGNoZSBpbmRpY2EgaWwgbm9yZCBnZW9ncmFmaWNvIGUgaW5jcmVtZW50aSBpbiBzZW50byBvcmFyaW8iCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZScgaGVyZQorbXNnaWQgInNob3cgbmFtZSIKK21zZ3N0ciAibm9tZSBkZWxsbyBzaG93IgorCittc2dpZCAiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSIKK21zZ3N0ciAiIgorImlsIG5vbWUgZGVsbG8gc2hvdyB0di9wb2RjYXN0L3NlcmllIGRhIGN1aSBwcm92aWVuZSBpbCBjb250ZW51dG8gbXVsdGltZWRpYWxlIgorCisjLiBUUkFOU0xBVE9SUzogJ3Nob3cgc29ydG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lIGFzIHVzZWQgZm9yIHNvcnRpbmcgcHVycG9zZXMnIGhlcmUKK21zZ2lkICJzaG93IHNvcnRuYW1lIgorbXNnc3RyICJub21lIG9yZGluYW1lbnRvIGRlbGxvIHNob3ciCisKK21zZ2lkICIiCisiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIiIKKyJpbCBub21lIGRlbGxvIHNob3cgdHYvcG9kY2FzdC9zZXJpZSBkYSBjdWkgcHJvdmllbmUgaWwgY29udGVudXRvICIKKyJtdWx0aW1lZGlhbGUsIGEgc2NvcG8gZGkgb3JkaW5hbWVudG8iCisKK21zZ2lkICJlcGlzb2RlIG51bWJlciIKK21zZ3N0ciAibnVtZXJvIGRpIGVwaXNvZGlvIgorCittc2dpZCAiVGhlIGVwaXNvZGUgbnVtYmVyIGluIHRoZSBzZWFzb24gdGhlIG1lZGlhIGlzIHBhcnQgb2YiCittc2dzdHIgIiIKKyJpbCBudW1lcm8gZGkgZXBpc29kaW8gbmVsbGEgc3RhZ2lvbmUgZGkgY3VpIGZhIHBhcnRlIGlsIGNvbnRlbnV0byAiCisibXVsdGltZWRpYWxlIgorCittc2dpZCAic2Vhc29uIG51bWJlciIKK21zZ3N0ciAibnVtZXJvIGRpIHN0YWdpb25lIgorCittc2dpZCAiVGhlIHNlYXNvbiBudW1iZXIgb2YgdGhlIHNob3cgdGhlIG1lZGlhIGlzIHBhcnQgb2YiCittc2dzdHIgIiIKKyJpbCBudW1lcm8gZGkgc3RhZ2lvbmUgZGVsbG8gc2hvdyBkaSBjdWkgZmEgcGFydGUgaWwgY29udGVudXRvIG11bHRpbWVkaWFsZSIKKworbXNnaWQgImx5cmljcyIKK21zZ3N0ciAidGVzdG8iCisKK21zZ2lkICJUaGUgbHlyaWNzIG9mIHRoZSBtZWRpYSwgY29tbW9ubHkgdXNlZCBmb3Igc29uZ3MiCittc2dzdHIgImlsIHRlc3RvIGRlbCBjb250ZW51dG8gbXVsdGltZWRpYWxlLCB0aXBpY2FtZW50ZSB1c2F0byBwZXIgbGUgY2Fuem9uaSIKKworbXNnaWQgImNvbXBvc2VyIHNvcnRuYW1lIgorbXNnc3RyICJub21lIG9yZGluYW1lbnRvIGNvbXBvc2l0b3JlIgorCittc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiIgorImxhIG8gbGUgcGVyc29uZSBjaGUgaGFubm8gY29tcG9zdG8gbGEgcmVnaXN0cmF6aW9uZSwgYSBzY29wbyBkaSBvcmRpbmFtZW50byIKKworbXNnaWQgImdyb3VwaW5nIgorbXNnc3RyICJyYWdncnVwcGFtZW50byIKKworbXNnaWQgIiIKKyJHcm91cHMgcmVsYXRlZCBtZWRpYSB0aGF0IHNwYW5zIG11bHRpcGxlIHRyYWNrcywgbGlrZSB0aGUgZGlmZmVyZW50IHBpZWNlcyAiCisib2YgYSBjb25jZXJ0by4gSXQgaXMgYSBoaWdoZXIgbGV2ZWwgdGhhbiBhIHRyYWNrLCBidXQgbG93ZXIgdGhhbiBhbiBhbGJ1bSIKK21zZ3N0ciAiIgorInJhZ2dydXBwYSBlbGVtZW50aSBtdWx0aW1lZGlhbGkgY29ycmVsYXRpIGNoZSBzaSBkaXZpZG9ubyBzdSBkaXZlcnNlIHRyYWNjZSwgIgorImNvbWUgbGUgZGl2ZXJzZSBwYXJ0aSBkaSB1biBjb25jZXJ0bzsgw6ggdW4gbGl2ZWxsbyBzdXBlcmlvcmUgcmlzcGV0dG8gYWxsYSAiCisidHJhY2NpYSwgbWEgaW5mZXJpb3JlIHJpc3BldHRvIGFsbCdhbGJ1bSIKKworbXNnaWQgInVzZXIgcmF0aW5nIgorbXNnc3RyICJnaXVkaXppbyB1dGVudGUiCisKK21zZ2lkICIiCisiUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCisidGhpcyBtZWRpYSIKK21zZ3N0ciAiIgorImdpdWRpemlvIGF0dHJpYnVpdG8gZGEgdW4gdXRlbnRlOyBtYWdnaW9yZSDDqCBpbCBsaXZlbGxvLCBwacO5IGFsbCd1dGVudGUgIgorInBpYWNlIHF1ZXN0byBjb250ZW51dG8gbXVsdGltZWRpYWxlIgorCittc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKK21zZ3N0ciAicHJvZHV0dG9yZSBkaXNwb3NpdGl2byIKKworbXNnaWQgIk1hbnVmYWN0dXJlciBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCittc2dzdHIgIiIKKyJpbCBwcm9kdXR0b3JlIGRlbCBkaXNwb3NpdGl2byB1c2F0byBwZXIgY3JlYXJlIHF1ZXN0byBjb250ZW51dG8gbXVsdGltZWRpYWxlIgorCittc2dpZCAiZGV2aWNlIG1vZGVsIgorbXNnc3RyICJtb2RlbGxvIGRpc3Bvc2l0aXZvIgorCittc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICIiCisiaWwgbW9kZWxsbyBkZWwgZGlzcG9zaXRpdm8gdXNhdG8gcGVyIGNyZWFyZSBxdWVzdG8gY29udGVudXRvIG11bHRpbWVkaWFsZSIKKworbXNnaWQgImFwcGxpY2F0aW9uIG5hbWUiCittc2dzdHIgIm5vbWUgYXBwbGljYXppb25lIgorCittc2dpZCAiQXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIgorbXNnc3RyICJsJ2FwcGxpY2F6aW9uZSB1c2F0YSBwZXIgY3JlYXJlIGlsIGNvbnRlbnV0byBtdWx0aW1lZGlhbGUiCisKK21zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgorbXNnc3RyICJkYXRpIGFwcGxpY2F6aW9uZSIKKworbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCittc2dzdHIgIiIKKyJpIGRhdGkgYXJiaXRyYXJpIGRlbGwnYXBwbGljYXppb25lIGRhIHNlcmlhbGl6emFyZSBhbGwnaW50ZXJubyBkZWwgY29udGVudXRvICIKKyJtdWx0aW1lZGlhbGUiCisKK21zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKK21zZ3N0ciAib3JpZW50YW1lbnRvIGltbWFnaW5lIgorCittc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgorbXNnc3RyICJjb21lIHJ1b3RhcmUgbyBjYXBvdm9sZ2VyZSBsJ2ltbWFnaW5lIHByaW1hIGRpIG1vc3RyYXJsYSIKKworbXNnaWQgIiwgIgorbXNnc3RyICIsICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgorbXNnc3RyICJFUlJPUkU6IGRhbGwnZWxlbWVudG8gJXM6ICVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKKyIlc1xuIgorbXNnc3RyICIiCisiSW5mb3JtYXppb25pIGRpIGRlYnVnIGFnZ2l1bnRpdmU6XG4iCisiJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJzcGVjaWZpZWQgZW1wdHkgYmluIFwiJXNcIiwgbm90IGFsbG93ZWQiCittc2dzdHIgInNwZWNpZmljYXRvIGlsIGJpbiB2dW90byDCqyVzwrssIG5vbiBjb25zZW50aXRvIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHNraXBwaW5nIgorbXNnc3RyICJuZXNzdW4gYmluIMKrJXPCuywgb21lc3NvIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiIKK21zZ3N0ciAibmVzc3VuYSBwcm9wcmlldMOgIMKrJXPCuyBuZWxsJ2VsZW1lbnRvIMKrJXPCuyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc2V0IHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiB0byBcIiVzXCIiCittc2dzdHIgImltcG9zc2liaWxlIGltcG9zdGFyZSBsYSBwcm9wcmlldMOgIMKrJXPCuyBuZWxsJ2VsZW1lbnRvIMKrJXPCuyBhIMKrJXPCuyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbGluayAlcyB0byAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY29sbGVnYXJlICVzIGEgJXMiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCittc2dzdHIgIm5lc3N1biBlbGVtZW50byDCqyVzwrsiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNhcHMgXCIlc1wiIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGkgY2FwcyDCqyVzwrsiCisKK21zZ2lkICJsaW5rIHdpdGhvdXQgc291cmNlIGVsZW1lbnQiCittc2dzdHIgImNvbGxlZ2FtZW50byBzZW56YSBlbGVtZW50byBzb3JnZW50ZSIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzaW5rIGVsZW1lbnQiCittc2dzdHIgImNvbGxlZ2FtZW50byBzZW56YSBlbGVtZW50byBzaW5rIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNvdXJjZSBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJlbGVtZW50byBzb3JnZW50ZSBtYW5jYW50ZSBwZXIgbCdVUkkgwqslc8K7IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGVsZW1lbnQgdG8gbGluayBVUkkgXCIlc1wiIHRvIgorbXNnc3RyICJlbGVtZW50byBtYW5jYW50ZSBwZXIgY29sbGVnYXJlIGwnVVJJIMKrJXPCuyBhIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAiZWxlbWVudG8gc2luayBtYW5jYW50ZSBwZXIgbCdVUkkgwqslc8K7IgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgY29sbGVnYXJlIGwnZWxlbWVudG8gc2luayBwZXIgbCdVUkkgwqslc8K7IgorCittc2dpZCAiZW1wdHkgcGlwZWxpbmUgbm90IGFsbG93ZWQiCittc2dzdHIgInBpcGVsaW5lIHZ1b3RhIG5vbiBjb25zZW50aXRvIgorCittc2dpZCAiSW50ZXJuYWwgY2xvY2sgZXJyb3IuIgorbXNnc3RyICJFcnJvcmUgaW50ZXJubyBkaSBjbG9jay4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgorbXNnc3RyICJFcnJvcmUgaW50ZXJubyBuZWwgZmx1c3NvIGRpIGRhdGkuIgorCittc2dpZCAiQSBsb3Qgb2YgYnVmZmVycyBhcmUgYmVpbmcgZHJvcHBlZC4iCittc2dzdHIgIlN0YW5ubyBwZXIgZXNzZXJlIHNjYXJ0YXRpIG1vbHRpIGJ1ZmZlci4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCittc2dzdHIgIlByb2JsZW1hIGludGVybm8gbmVsIGZsdXNzbyBkaSBkYXRpLiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiRXJyb3JlIGludGVybm8gbmVsbG8gc3RyZWFtIGRpIGRhdGkuIgorCittc2dpZCAiRmlsdGVyIGNhcHMiCittc2dzdHIgIkNhcHMgZGkgZmlsdHJvIgorCisjICogc3VsIHBlcmNow6kgbGFzY2lhdG8gY2FwYWJpbGl0aWVzLCB2ZWRpIGludHJvCisjICogcG9zc2libGUgYWxsb3dlZCAtLT4gYW1tZXNzZSAoZSBiYXN0YSkKKyMgKiBBTlkgdHJhZG90dG8sICBtYSBub24gc28gc2Ugw6ggcGFyb2xhIGNoaWF2ZSwgZG92cmVpIGNvbnRyb2xsYXJlLgorIworIyAgIC0tTHVjYQorbXNnaWQgIiIKKyJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKKyJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgorbXNnc3RyICIiCisiUG9uZSBsaW1pdGF6aW9uaSBzdWxsZSBjYXBhYmlsaXRpZXMgYW1tZXNzZSAoTlVMTCBzaWduaWZpY2EgUVVBTFNJQVNJKS4gIgorIkltcG9zdGFuZG8gcXVlc3RhIHByb3ByaWV0w6Agc2kgcHJlbmRlIHVuIHJpZmVyaW1lbnRvIGFsbCdvZ2dldHRvIEdzdENhcHMgIgorImZvcm5pdG8uIgorCittc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3Igd3JpdGluZy4iCittc2dzdHIgIk5lc3N1biBub21lIGRpIGZpbGUgc3BlY2lmaWNhdG8gcGVyIGxhIHNjcml0dHVyYS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhcHJpcmUgaWwgZmlsZSDCqyVzwrsgaW4gc2NyaXR0dXJhLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiRXJyb3JlIG5lbCBjaGl1ZGVyZSBpbCBmaWxlIMKrJXPCuy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Vla2luZyBpbiBmaWxlIFwiJXNcIi4iCittc2dzdHIgIkVycm9yZSBkdXJhbnRlIGlsIHBvc2l6aW9uYW1lbnRvIHN1bCBmaWxlIMKrJXPCuy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIFwiJXNcIi4iCittc2dzdHIgIkVycm9yZSBkdXJhbnRlIGxhIHNjcml0dHVyYSBzdWwgZmlsZSDCqyVzwrsuIgorCittc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCittc2dzdHIgIk5lc3N1biBub21lIGRpIGZpbGUgc3BlY2lmaWNhdG8gcGVyIGxhIGxldHR1cmEuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYXByaXJlIGlsIGZpbGUgwqslc8K7IGluIGxldHR1cmEuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgaW5mbyBvbiBcIiVzXCIuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBvdHRlbmVyZSBpbmZvcm1hemlvbmkgc3Ugwqslc8K7LiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIgorbXNnc3RyICLCqyVzwrsgw6ggdW5hIGRpcmVjdG9yeS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZSBcIiVzXCIgaXMgYSBzb2NrZXQuIgorbXNnc3RyICJJbCBmaWxlIMKrJXPCuyDDqCB1biBzb2NrZXQuIgorCittc2dpZCAiRmFpbGVkIGFmdGVyIGl0ZXJhdGlvbnMgYXMgcmVxdWVzdGVkLiIKK21zZ3N0ciAiRmFsbGl0byBkb3BvIGxlIGl0ZXJhemlvbmkgY29tZSByaWNoaWVzdG8uIgorCittc2dpZCAiTm8gVGVtcCBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIKK21zZ3N0ciAiTmVzc3VuYSBkaXJlY3RvcnkgdGVtcG9yYW5lYSBzcGVjaWZpY2F0YS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgY3JlYXJlIGlsIGZpbGUgdGVtcG9yYW5lbyDCqyVzwrsuIgorCittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKK21zZ3N0ciAiRXJyb3JlIGR1cmFudGUgbGEgc2NyaXR0YSBzdWwgZmlsZSBkaSBzY2FyaWNhbWVudG8uIgorCittc2dpZCAiY2FwcyIKK21zZ3N0ciAiY2FwcyIKKworbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCittc2dzdHIgInJpbGV2YXRlIGNhcGFiaWxpdGVzIG5lbGxvIHN0cmVhbSIKKworbXNnaWQgIm1pbmltdW0iCittc2dzdHIgIm1pbmltbyIKKworbXNnaWQgIm1heGltdW0iCittc2dzdHIgIm1hc3NpbW8iCisKK21zZ2lkICJmb3JjZSBjYXBzIgorbXNnc3RyICJmb3J6YSBpIGNhcHMiCisKK21zZ2lkICJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIKK21zZ3N0ciAiZm9yemEgaSBjYXBzIHNlbnphIGVzZWd1aXJlIHVuIHR5cGVmaW5kIgorCittc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgorbXNnc3RyICJMbyBzdHJlYW0gbm9uIGNvbnRpZW5lIGRhdGkuIgorCittc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKK21zZ3N0ciAiSW50ZXJmYWNjZSBpbXBsZW1lbnRhdGU6XG4iCisKK21zZ2lkICJyZWFkYWJsZSIKK21zZ3N0ciAibGVnZ2liaWxlIgorCittc2dpZCAid3JpdGFibGUiCittc2dzdHIgInNjcml2aWJpbGUiCisKK21zZ2lkICJjb250cm9sbGFibGUiCittc2dzdHIgImNvbnRyb2xsYWJpbGUiCisKK21zZ2lkICJjaGFuZ2VhYmxlIGluIE5VTEwsIFJFQURZLCBQQVVTRUQgb3IgUExBWUlORyBzdGF0ZSIKK21zZ3N0ciAicHXDsiBwYXNzYXJlIGFsbG8gc3RhdG8gIE5VTEwsIFJFQURZLCBQQVVTRUQgbyBQTEFZSU5HIgorCittc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwsIFJFQURZIG9yIFBBVVNFRCBzdGF0ZSIKK21zZ3N0ciAicHXDsiBwYXNzYXJlIHNvbG8gYWxsbyBzdGF0byAgTlVMTCwgUkVBRFkgbyBQQVVTRUQiCisKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKK21zZ3N0ciAicHXDsiBwYXNzYXJlIHNvbG8gYWxsbyBzdGF0byAgTlVMTCBvIFJFQURZIgorCittc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgorbXNnc3RyICJGaWxlIG5lbGxhIGJsYWNrbGlzdDoiCisKKyMgRXNlbXBpbzoKKyMgICAgVG90YWwgY291bnQ6IDIzIHBsdWdpbnMsIDM0IGZlYXR1cmUKK21zZ2lkICJUb3RhbCBjb3VudDogIgorbXNnc3RyICJJbiB0b3RhbGU6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgorbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKK21zZ3N0clswXSAiJWQgZmlsZSBuZWxsYSBibGFja2xpc3QiCittc2dzdHJbMV0gIiVkIGZpbGUgbmVsbGEgYmxhY2tsaXN0IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIHBsdWdpbiIKK21zZ2lkX3BsdXJhbCAiJWQgcGx1Z2lucyIKK21zZ3N0clswXSAiJWQgcGx1Z2luIgorbXNnc3RyWzFdICIlZCBwbHVnaW4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgorbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKK21zZ3N0clswXSAiJWQgdm9jZSBuZWxsYSBibGFja2xpc3QiCittc2dzdHJbMV0gIiVkIHZvY2kgbmVsbGEgYmxhY2tsaXN0IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGZlYXR1cmUiCittc2dpZF9wbHVyYWwgIiVkIGZlYXR1cmVzIgorbXNnc3RyWzBdICIlZCBmdW56aW9uYWxpdMOgIgorbXNnc3RyWzFdICIlZCBmdW56aW9uYWxpdMOgIgorCisjIC1hLCAtLXByaW50LWFsbAorbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKK21zZ3N0ciAiU3RhbXBhIHR1dHRpIGdsaSBlbGVtZW50aSIKKworIyAtYiwgLS1wcmludC1ibGFja2xpc3QKK21zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgorbXNnc3RyICJTdGFtcGEgbCdlbGVuY28gZGVpIGZpbGUgbmVsbGEgYmxhY2tsaXN0IgorCisjIC0tcHJpbnQtcGx1Z2luLWF1dG8taW5zdGFsbC1pbmZvCittc2dpZCAiIgorIlByaW50IGEgbWFjaGluZS1wYXJzYWJsZSBsaXN0IG9mIGZlYXR1cmVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIG9yIGFsbCAiCisicGx1Z2lucyBwcm92aWRlLlxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBpbiBjb25uZWN0aW9uIHdpdGggZXh0ZXJuYWwgIgorImF1dG9tYXRpYyBwbHVnaW4gaW5zdGFsbGF0aW9uIG1lY2hhbmlzbXMiCittc2dzdHIgIiIKKyJTdGFtcGEgdW4gZWxlbmNvIG1hY2hpbmUtcGFyc2FibGUgZGkgZnVuemlvbmFsaXTDoCBmb3JuaXRlIGRhbCBwbHVnaW4gIgorInNwZWNpZmljYXRvIG8gZGEgdHV0dGkgaSBwbHVnaW4uXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbGUgbmVsbGUgY29ubmVzc2lvbmkgY29uICIKKyJtZWNjYW5pc21pIGVzdGVybmkgZGkgaW5zdGFsbGF6aW9uZSBhdXRvbWF0aWNhIGRlaSBwbHVnaW4uIgorCisjIEVzZW1waW86CisjICQgZ3N0LWluc3BlY3QtMC4xMCAtLXBsdWdpbgorIyB2aWRlbzRsaW51eDogIHY0bHNyYzogVmlkZW8gKHZpZGVvNGxpbnV4L3JhdykgU291cmNlCisjIHF1ZXVlMjogIHF1ZXVlMjogUXVldWUKKyMgZ2lvOiAgZ2lvc3RyZWFtc3JjOiBHSU8gc3RyZWFtIHNvdXJjZQorIyBnaW86ICBnaW9zdHJlYW1zaW5rOiBHSU8gc3RyZWFtIHNpbmsKKyMgZ2lvOiAgZ2lvc3JjOiBHSU8gc291cmNlCisjIGdpbzogIGdpb3Npbms6IEdJTyBzaW5rCisjIHZvbHVtZTogIHZvbHVtZTogVm9sdW1lCittc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgorbXNnc3RyICJFbGVuY2EgaWwgY29udGVudXRvIGRlaSBwbHVnaW4iCisKKyMgLXUsIC0tdXJpLWhhbmRsZXJzCittc2dpZCAiUHJpbnQgc3VwcG9ydGVkIFVSSSBzY2hlbWVzLCB3aXRoIHRoZSBlbGVtZW50cyB0aGF0IGltcGxlbWVudCB0aGVtIgorbXNnc3RyICJTdGFtcGEgZ2xpIHNjaGVtaSBVUkkgc3VwcG9ydGF0aSwgY29uIGdsaSBlbGVtZW50aSBjaGUgbGkgaW1wbGVtZW50YW5vIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBjYXJpY2FyZSBpbCBmaWxlIGRpIHBsdWdpbjogJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIGVsZW1lbnQgb3IgcGx1Z2luICclcydcbiIKK21zZ3N0ciAiRWxlbWVudG8gbyBwbHVnaW4gwqslc8K7IGluZXNpc3RlbnRlXG4iCisKK21zZ2lkICJJbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICJPdHRlbnV0byBtZXNzYWdnaW8gIyV1IGRhbGwnZWxlbWVudG8gXCIlc1wiICglcyk6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKK21zZ3N0ciAiT3R0ZW51dG8gbWVzc2FnZ2lvICMldSBkYWwgcGFkIFwiJXM6JXNcIiAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gb2JqZWN0IFwiJXNcIiAoJXMpOiAiCittc2dzdHIgIk90dGVudXRvIG1lc3NhZ2dpbyAjJXUgZGFsbCdvZ2dldHRvIFwiJXNcIiAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKK21zZ3N0ciAiT3R0ZW51dG8gbWVzc2FnZ2lvICMldSAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIgorbXNnc3RyICJPdHRlbnV0byBFT1MgZGFsbCdlbGVtZW50byDCqyVzwrsuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKK21zZ3N0ciAiVEFHIFRST1ZBVE8gICAgOiB0cm92YXRvIGRhbGwnZWxlbWVudG8gXCIlc1wiLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgcGFkIFwiJXM6JXNcIi5cbiIKK21zZ3N0ciAiVEFHIFRST1ZBVE8gICAgOiB0cm92YXRvIGRhbCBwYWQgXCIlczolc1wiLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKK21zZ3N0ciAiVEFHIFRST1ZBVE8gICAgOiB0cm92YXRvIGRhbGwnb2dnZXR0byBcIiVzXCIuXG4iCisKK21zZ2lkICJGT1VORCBUQUdcbiIKK21zZ3N0ciAiVEFHIFRST1ZBVE9cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSU5GTzpcbiIKKyIlc1xuIgorbXNnc3RyICIiCisiSU5GT1JNQVpJT05FOlxuIgorIiVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgorbXNnc3RyICJBVFRFTlpJT05FOiBkYWxsJ2VsZW1lbnRvICVzOiAlc1xuIgorCittc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLi4uXG4iCittc2dzdHIgIlByZXJvbGwgZXNlZ3VpdG8sIGluIGF0dGVzYSBkZWwgcmllbXBpbWVudG8gYnVmZmVyIHBlciBjb21wbGV0YXJlLi4uXG4iCisKK21zZ2lkICJidWZmZXJpbmcuLi4iCittc2dzdHIgInJpZW1waW1lbnRvIGJ1ZmZlci4uLiIKKworbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIiIKKyJSaWVtcGltZW50byBidWZmZXIgY29tcGxldGF0bywgaW1wb3N0YXppb25lIGRlbGxhIHBpcGVsaW5lIGEgUExBWUlORyAuLi5cbiIKKworbXNnaWQgIkJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCittc2dzdHIgIlJpZW1waW1lbnRvIGJ1ZmZlciwgaW1wb3N0YXppb25lIGRlbGxhIHBpcGVsaW5lIGEgUEFVU0VEIC4uLlxuIgorCittc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKK21zZ3N0ciAiUmlkaXN0cmlidXppb25lIGxhdGVuemEuLi5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgorbXNnc3RyICJJbXBvc3RhemlvbmUgZGVsbG8gc3RhdG8gYSAlcyBjb21lIHJpY2hpZXN0byBkYSAlcy4uLlxuIgorCittc2dpZCAiSW50ZXJydXB0OiBTdG9wcGluZyBwaXBlbGluZSAuLi5cbiIKK21zZ3N0ciAiSW50ZXJyb3R0bzogYXJyZXN0byBkZWxsYSBwaXBlbGluZSAuLi5cbiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBlbGVtZW50OiAlc1xuIgorbXNnc3RyICJuZXNzdW4gZWxlbWVudG8gwqslc8K7IgorCisjIC10LCAtLXRhZ3MKK21zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCittc2dzdHIgIlN0YW1wYSBpIHRhZyAoYW5jaGUgbm90aSBjb21lIG1ldGFkYXRpKSIKKworIyAtdiwgLS12ZXJib3NlCittc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKK21zZ3N0ciAiU3RhbXBhIGluZm9ybWF6aW9uaSBkaSBzdGF0byBlIG5vdGlmaWNoZSBkZWxsZSBwcm9wcmlldMOgIgorCisjIC1xLCAtLXF1aWV0Cittc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiTm9uIHN0YW1wYSBhbGN1bmEgaW5mb3JtYXppb25lIGRpIGF2YW56YW1lbnRvIgorCisjIC1tLCAtLW1lc3NhZ2VzCittc2dpZCAiT3V0cHV0IG1lc3NhZ2VzIgorbXNnc3RyICJTdGFtcGEgaSBtZXNzYWdnaSIKKworIyAtWCwgLS1leGNsdWRlPVRJUE8xLFRJUE8yLC4uLgorbXNnaWQgIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIFRZUEUiCittc2dzdHIgIk5vbiBzdGFtcGEgbGUgaW5mb3JtYXppb25pIGRpIHN0YXRvIHBlciBUSVBPIgorCittc2dpZCAiVFlQRTEsVFlQRTIsLi4uIgorbXNnc3RyICJUSVBPMSxUSVBPMiwuLi4iCisKKyMgLWYsIC0tbm8tZmF1bHQKK21zZ2lkICJEbyBub3QgaW5zdGFsbCBhIGZhdWx0IGhhbmRsZXIiCittc2dzdHIgIk5vbiBpbnN0YWxsYSB1biBnZXN0b3JlIGRpIGZhdWx0IgorCisjIC1ULCAtLXRyYWNlCittc2dpZCAiUHJpbnQgYWxsb2MgdHJhY2UgKGlmIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lKSIKK21zZ3N0ciAiU3RhbXBhIHRyYWNjaWEgZGkgYWxsb2MgKHNlIGFiaWxpdGF0byBpbiBjb21waWxhemlvbmUpIgorCisjIC1lLCAtLWVvcy1vbi1zaHV0ZG93bgorbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKK21zZ3N0ciAiRm9yemEgRU9TIHN1bGxlIHNvcmdlbnRpIHByaW1hIGRpIGFycmVzdGFyZSBsYSBwaXBlbGluZSIKKworbXNnaWQgIkdhdGhlciBhbmQgcHJpbnQgaW5kZXggc3RhdGlzdGljcyIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQ6ICVzLlxuIgorbXNnc3RyICJFUlJPUkU6IGltcG9zc2liaWxlIGNvc3RydWlyZSBsYSBwaXBlbGluZTogJXMuXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlxuIgorbXNnc3RyICJFUlJPUkU6IGltcG9zc2liaWxlIGNvc3RydWlyZSBsYSBwaXBlbGluZS5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCittc2dzdHIgIkFUVEVOWklPTkU6IHBpcGVsaW5lIGVycmF0YTogJXMuXG4iCisKK21zZ2lkICJFUlJPUjogdGhlICdwaXBlbGluZScgZWxlbWVudCB3YXNuJ3QgZm91bmQuXG4iCittc2dzdHIgIkVSUk9SRTogbCdlbGVtZW50byDCq3BpcGVsaW5lwrsgbm9uIMOoIHN0YXRvIHRyb3ZhdG8uXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAiSW1wb3N0YXppb25lIGRlbGxhIHBpcGVsaW5lIGEgUEFVU0VEIC4uLlxuIgorCittc2dpZCAiRVJST1I6IFBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwYXVzZS5cbiIKK21zZ3N0ciAiRVJST1JFOiBsYSBwaXBlbGluZSBub24gdnVvbGUgbWV0dGVyc2kgaW4gcGF1c2EuXG4iCisKKyMgU2lua3MgYXJlIHNwZWNpYWwgZWxlbWVudHMgaW4gR1N0cmVhbWVyLiBUaGlzIGlzIGJlY2F1c2Ugc2luayBlbGVtZW50cyBoYXZlIHRvIHRha2UgY2FyZSBvZiBwcmVyb2xsLCB3aGljaCBpcyB0aGUgcHJvY2VzcyB0aGF0IHRha2VzIGNhcmUgdGhhdCBlbGVtZW50cyBnb2luZyBpbnRvIHRoZSBHU1RfU1RBVEVfUEFVU0VEIHN0YXRlIHdpbGwgaGF2ZSBidWZmZXJzIHJlYWR5IGFmdGVyIHRoZSBzdGF0ZSBjaGFuZ2UuIFRoZSByZXN1bHQgb2YgdGhpcyBpcyB0aGF0IHN1Y2ggZWxlbWVudHMgY2FuIHN0YXJ0IHByb2Nlc3NpbmcgZGF0YSBpbW1lZGlhdGVseSBhZnRlciBnb2luZyBpbnRvIHRoZSBHU1RfU1RBVEVfUExBWUlORyBzdGF0ZSwgd2l0aG91dCByZXF1aXJpbmcgdG8gdGFrZSBzb21lIHRpbWUgdG8gaW5pdGlhbGl6ZSBvdXRwdXRzIG9yIHNldCB1cCBkZWNvZGVyczsgYWxsIHRoYXQgaXMgZG9uZSBhbHJlYWR5IGJlZm9yZSB0aGUgc3RhdGUtY2hhbmdlIHRvIEdTVF9TVEFURV9QQVVTRUQgIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZXMuCisjCisjIFByZXJvbGwsIGhvd2V2ZXIsIGlzIGEgY29tcGxleCBwcm9jZXNzIHRoYXQgd291bGQgcmVxdWlyZSB0aGUgc2FtZSBjb2RlIGluIG1hbnkgZWxlbWVudHMuIFRoZXJlZm9yZSwgc2luayBlbGVtZW50cyBjYW4gZGVyaXZlIGZyb20gdGhlIEdzdEJhc2VTaW5rIGJhc2UtY2xhc3MsIHdoaWNoIGRvZXMgcHJlcm9sbCBhbmQgYSBmZXcgb3RoZXIgdXRpbGl0eSBmdW5jdGlvbnMgYXV0b21hdGljYWxseS4gVGhlIGRlcml2ZWQgY2xhc3Mgb25seSBuZWVkcyB0byBpbXBsZW1lbnQgYSBidW5jaCBvZiB2aXJ0dWFsIGZ1bmN0aW9ucyBhbmQgd2lsbCB3b3JrIGF1dG9tYXRpY2FsbHkuCittc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgorbXNnc3RyICJMYSBwaXBlbGluZSDDqCB2aXZhIGUgbm9uIG5lY2Vzc2l0YSBpbCBQUkVST0xMIC4uLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTElORyAuLi5cbiIKK21zZ3N0ciAiTGEgcGlwZWxpbmUgw6ggaW4gUFJFUk9MTElORyAuLi5cbiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcHJlcm9sbC5cbiIKK21zZ3N0ciAiRVJST1JFOiBsYSBwaXBlbGluZSBub24gdnVvbGUgZmFyZSBpbCBwcmVyb2xsLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgorbXNnc3RyICJMYSBwaXBlbGluZSDDqCBpbiBQUkVST0xMRUQgLi4uXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIkltcG9zdGF6aW9uZSBkZWxsYSBwaXBlbGluZSBhIFBMQVlJTkcgLi4uXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBsYXkuXG4iCittc2dzdHIgIkVSUk9SRTogbGEgcGlwZWxpbmUgbm9uIHZ1b2xlIHJpcHJvZHVycmUuXG4iCisKK21zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKK21zZ3N0ciAiRU9TIGFsbCdhcnJlc3RvIGFiaWxpdGF0byAtLSBGb3J6YXRvIEVPUyBzdWxsYSBwaXBlbGluZVxuIgorCittc2dpZCAiV2FpdGluZyBmb3IgRU9TLi4uXG4iCittc2dzdHIgIkluIGF0dGVzYSBkaSBFT1MuLi5cbiIKKworbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCittc2dzdHIgIlJpY2V2dXRvIEVPUyAtIGFycmVzdG8gZGVsbGEgcGlwZWxpbmUuLi5cbiIKKworbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgorbXNnc3RyICJTaSDDqCB2ZXJpZmljYXRvIHVuIGVycm9yZSBkdXJhbnRlIGwnYXR0ZXNhIGRpIEVPU1xuIgorCisjIHNlY29uZG8gbWUgcXVlbCAlIMOoIHVuIGVycm9yZS4uLiBtYWdhcmkgZG92cmViYmUKKyMgZXNzZXJlICVkIG8gJXMsIGEgbWVubyBjaGUgbm9uIGNvc3RydXNjYW5vIGlsIG1lc3NhZ2lvCisjIGluIHF1YWxjaGUgbW9kbyBlc290ZXJpY28uLi4KK21zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKK21zZ3N0ciAiRXNlY3V6aW9uZSB0ZXJtaW5hdGEgZG9wbyAlIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKK21zZ3N0ciAiSW1wb3N0YXppb25lIGRlbGxhIHBpcGVsaW5lIGEgUkVBRFkgLi4uXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIE5VTEwgLi4uXG4iCittc2dzdHIgIkltcG9zdGF6aW9uZSBkZWxsYSBwaXBlbGluZSBhIE5VTEwgLi4uXG4iCisKK21zZ2lkICJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIgorbXNnc3RyICJFc2VjdXppb25lIGRpIGZyZWUgc3VsbGEgcGlwZWxpbmUuLi5cbiIKKworI34gbXNnaWQgIlVzYWdlOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLiBdXG4iCisjfiBtc2dzdHIgIlVzbzogZ3N0LXhtbGxhdW5jaCA8RklMRS5YTUw+IFsgRUxFTUVOVE8uUFJPUFJJRVRBPVZBTE9SRSAuLi4gXVxuIgorCisjfiBtc2dpZCAiRVJST1I6IHBhcnNlIG9mIHhtbCBmaWxlICclcycgZmFpbGVkLlxuIgorI34gbXNnc3RyICJFUlJPUkU6IGFuYWxpc2kgZGVsIGZpbGUgeG1sIMKrJXPCuyBub24gcml1c2NpdGEuXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogbm8gdG9wbGV2ZWwgcGlwZWxpbmUgZWxlbWVudCBpbiBmaWxlICclcycuXG4iCisjfiBtc2dzdHIgIkVSUk9SRTogbmVzc3VuIGVsZW1lbnRvIHBpcGVsaW5lIHRvcGxldmVsIG5lbCBmaWxlIMKrJXPCuy5cbiIKKworI34gbXNnaWQgIldBUk5JTkc6IG9ubHkgb25lIHRvcGxldmVsIGVsZW1lbnQgaXMgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS5cbiIKKyN+IG1zZ3N0ciAiQVRURU5aSU9ORTogYWwgbW9tZW50byDDqCBzdXBwb3J0YXRvIHNvbm8gdW4gZWxlbWVudG8gdG9wbGV2ZWwuXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogY291bGQgbm90IHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAlZDogJXMuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJFUlJPUkU6IGltcG9zc2liaWxlIGFuYWxpenphcmUgbCdhcmdvbWVudG8gJWQgZGVsbGEgcmlnYSBkaSBjb21hbmRvOiAlcy5cbiIKKworI34gbXNnaWQgIldBUk5JTkc6IGVsZW1lbnQgbmFtZWQgJyVzJyBub3QgZm91bmQuXG4iCisjfiBtc2dzdHIgIkFUVEVOWklPTkU6IGVsZW1lbnRvIGNvbiBub21lIMKrJXPCuyBub24gdHJvdmF0by5cbiIKKworIyAtbywgLS1vdXRwdXQ9RklMRQorI34gbXNnaWQgIlNhdmUgeG1sIHJlcHJlc2VudGF0aW9uIG9mIHBpcGVsaW5lIHRvIEZJTEUgYW5kIGV4aXQiCisjfiBtc2dzdHIgIlNhbHZhIHN1IEZJTEUgdW5hIHJhcHByZXNlbnRhemlvbmUgeG1sIGRlbGxhIHBpcGVsaW5lIGVkIGVzY2UiCisKKyN+IG1zZ2lkICJGSUxFIgorI34gbXNnc3RyICJGSUxFIgorCisjfiBtc2dpZCAiRG8gbm90IGluc3RhbGwgc2lnbmFsIGhhbmRsZXJzIGZvciBTSUdVU1IxIGFuZCBTSUdVU1IyIgorI34gbXNnc3RyICJOb24gaW5zdGFsbGEgaSBnZXN0b3JpIGRpIHNlZ25hbGUgcGVyIFNJR1VTUjEgZSBTSUdVU1IyIgorCisjfiBtc2dpZCAiRXJyb3Igd3JpdGluZyByZWdpc3RyeSBjYWNoZSB0byAlczogJXMiCisjfiBtc2dzdHIgIkVycm9yZSBuZWxsbyBzY3JpdmVyZSBsYSBjYWNoZSBkaSByZWdpc3RybyBzdSAlczogJXMiCisKKyN+IG1zZ2lkICJFcnJvciByZS1zY2FubmluZyByZWdpc3RyeSAlczogJXMiCisjfiBtc2dzdHIgIkVycm9yZSBuZWwgcmktc2NhbnNpb25hcmUgaWwgcmVnaXN0cm8gJXM6ICVzIgorCisjfiBtc2dpZCAiRXJyb3IgcmUtc2Nhbm5pbmcgcmVnaXN0cnkgJXMiCisjfiBtc2dzdHIgIkVycm9yZSBuZWwgcmktc2NhbnNpb25hcmUgaWwgcmVnaXN0cm8gJXMiCmRpZmYgLS1naXQgYS9wby9qYS5nbW8gYi9wby9qYS5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBhY2JmNgotLS0gL2Rldi9udWxsCisrKyBiL3BvL2phLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9qYS5wbyBiL3BvL2phLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NmEwZTYKLS0tIC9kZXYvbnVsbAorKysgYi9wby9qYS5wbwpAQCAtMCwwICsxLDEyMjMgQEAKKyMgSmFwYW5lc2UgdHJhbnNsYXRpb24gZmlsZSBmb3IgZ3N0cmVhbWVyCisjIFRoaXMgZmlsZSBpcyBwdXQgaW4gdGhlIHB1YmxpYyBkb21haW4uCisjCisjIE1ha290byBLYXRvIDxtYWtvdG8ua3RAZ21haWwuY29tPiwgMjAwOC4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdzdHJlYW1lciAwLjEwLjIwLjNcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wOS0yOSAxNDo1NSswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOC0xMC0xNiAxOTo1NyswOTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBNYWtvdG8gS2F0byA8bWFrb3RvLmt0QGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBKYXBhbmVzZSA8dHJhbnNsYXRpb24tdGVhbS1qYUBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCisiTGFuZ3VhZ2U6IGphXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiWC1HZW5lcmF0b3I6IExva2FsaXplIDAuMlxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorCittc2dpZCAiUHJpbnQgdGhlIEdTdHJlYW1lciB2ZXJzaW9uIgorbXNnc3RyICJHU3RyZWFtZXIg44OQ44O844K444On44Oz44KS6KGo56S644GZ44KLIgorCittc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCittc2dzdHIgIiIKKworbXNnaWQgIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IgorbXNnc3RyICLliKnnlKjlj6/og73jgarjg4fjg5Djg4PjgrDjgqvjg4bjgrTjg6rjgpLooajnpLrjgZfjgabntYLkuobjgZnjgosiCisKK21zZ2lkICIiCisiRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmcm9tIDEgKG9ubHkgZXJyb3IpIHRvIDUgKGFueXRoaW5nKSBvciAwIGZvciBubyBvdXRwdXQiCittc2dzdHIgIiIKKworbXNnaWQgIkxFVkVMIgorbXNnc3RyICJMRVZFTCIKKworbXNnaWQgIiIKKyJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yICIKKyJ0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCittc2dzdHIgIiIKKworbXNnaWQgIkxJU1QiCittc2dzdHIgIkxJU1QiCisKK21zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKK21zZ3N0ciAi44OH44OQ44OD44Kw5Ye65Yqb44Gu44Kr44Op44O85Ye65Yqb44KS54Sh5Yq544Gr44GZ44KLIgorCittc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCittc2dzdHIgIuODh+ODkOODg+OCsOOCkueEoeWKueOBq+OBmeOCiyIKKworbXNnaWQgIkVuYWJsZSB2ZXJib3NlIHBsdWdpbiBsb2FkaW5nIGRpYWdub3N0aWNzIgorbXNnc3RyICIiCisKK21zZ2lkICJDb2xvbi1zZXBhcmF0ZWQgcGF0aHMgY29udGFpbmluZyBwbHVnaW5zIgorbXNnc3RyICLjg5fjg6njgrDjgqTjg7PjgpLlkKvjgoDjgrPjg63jg7MgKDopIOOBp+WMuuWIh+OCieOCjOOBn+ODkeOCuSIKKworbXNnaWQgIlBBVEhTIgorbXNnc3RyICJQQVRIUyIKKworbXNnaWQgIiIKKyJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwbHVnaW5zIHRvIHByZWxvYWQgaW4gYWRkaXRpb24gdG8gdGhlIGxpc3Qgc3RvcmVkIGluICIKKyJlbnZpcm9ubWVudCB2YXJpYWJsZSBHU1RfUExVR0lOX1BBVEgiCittc2dzdHIgIiIKKworbXNnaWQgIlBMVUdJTlMiCittc2dzdHIgIlBMVUdJTlMiCisKK21zZ2lkICJEaXNhYmxlIHRyYXBwaW5nIG9mIHNlZ21lbnRhdGlvbiBmYXVsdHMgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIgorbXNnc3RyICIiCisi44OX44Op44Kw44Kk44Oz44Gu44Ot44O844OJ5Lit44Gr55m655Sf44GX44Gf44K744Kw44Oh44Oz44OG44O844K344On44Oz6YGV5Y+N44Gu44OI44Op44OD44OX44KS54Sh5Yq544Gr44GZ44KLIgorCittc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIuODrOOCuOOCueODiOODquOBruOCouODg+ODl+ODh+ODvOODiOOCkueEoeWKueOBq+OBmeOCiyIKKworIywgZnV6enkKK21zZ2lkICJEaXNhYmxlIHNwYXduaW5nIGEgaGVscGVyIHByb2Nlc3Mgd2hpbGUgc2Nhbm5pbmcgdGhlIHJlZ2lzdHJ5IgorbXNnc3RyICLjg6zjgrjjgrnjg4jjg6rjgpLjgrnjgq3jg6Pjg7PjgZnjgovpmpvjgasgZm9yaygpIOOCkuS9v+OCj+OBquOBhCIKKworbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgorbXNnc3RyICJHU3RyZWFtZXIg44Kq44OX44K344On44OzIgorCittc2dpZCAiU2hvdyBHU3RyZWFtZXIgT3B0aW9ucyIKK21zZ3N0ciAiR1N0cmVhbWVyIOOCquODl+OCt+ODp+ODs+OCkuihqOekuuOBmeOCiyIKKworbXNnaWQgIlVua25vd24gb3B0aW9uIgorbXNnc3RyICLkuI3mmI7jgarjgqrjg5fjgrfjg6fjg7MiCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIGNvcmUgbGlicmFyeSBlcnJvci4iCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKK21zZ3N0ciAiR1N0cmVhbWVyIOWGhemDqOOCqOODqeODvDog44Kz44O844OJ44GM5a6f6KOF44GV44KM44Gm44GE44G+44Gb44KTIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgorInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHBhZCBwcm9ibGVtLiIKK21zZ3N0ciAiIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iCittc2dzdHIgIkdTdHJlYW1lciDlhoXpg6jjgqjjg6njg7w6IOOCueODrOODg+ODieOBruWVj+mhjCIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCittc2dzdHIgIkdTdHJlYW1lciDlhoXpg6jjgqjjg6njg7w6IOODjeOCtOOCt+OCqOODvOOCt+ODp+ODs+OBruWVj+mhjCIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogZXZlbnQgcHJvYmxlbS4iCittc2dzdHIgIkdTdHJlYW1lciDlhoXpg6jjgqjjg6njg7w6IOOCpOODmeODs+ODiOOBruWVj+mhjCIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2VlayBwcm9ibGVtLiIKK21zZ3N0ciAiR1N0cmVhbWVyIOWGhemDqOOCqOODqeODvDog44K344O844Kv44Gu5ZWP6aGMIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKK21zZ3N0ciAiR1N0cmVhbWVyIOWGhemDqOOCqOODqeODvDog44K/44Kw44Gu5ZWP6aGMIgorCittc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKK21zZ3N0ciAiR1N0cmVhbWVy44Gv44OX44Op44Kw44Kk44Oz44KS6KaL44Gk44GR44KL44GT44Go44GM44Gn44GN44G+44Gb44KTIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGhhcyBiZWVuICIKKyJkaXNhYmxlZC4iCittc2dzdHIgIiIKKyLjgZPjga7jgqLjg5fjg6rjgrHjg7zjgrfjg6fjg7Pjga9HU3RyZWFtZXIg44Gn54Sh5Yq544Gr44GX44Gm44GE44KL5qmf6IO944KS5L2/55So44GX44KI44GG44Go44GX44Gm44GE44G+44GZIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXLkuIrjgafkuIDoiKznmoTjgarjgrXjg53jg7zjg4jjg6njgqTjg5bjg6njg6rjgqjjg6njg7zjgYzotbfjgY3jgb7jgZfjgZ8iCisKK21zZ2lkICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICLjgrXjg53jg7zjg4jjg6njgqTjg5bjg6njg6rjgpLliJ3mnJ/ljJbjgafjgY3jgb7jgZvjgpMiCisKK21zZ2lkICJDb3VsZCBub3QgY2xvc2Ugc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAi44K144Od44O844OI44Op44Kk44OW44Op44Oq44KS44Kv44Ot44O844K644Gn44GN44G+44Gb44KTIgorCittc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICLjgrXjg53jg7zjg4jjg6njgqTjg5bjg6njg6rjgpLmp4vmiJDjgafjgY3jgb7jgZvjgpMiCisKK21zZ2lkICJFbmNvZGluZyBlcnJvci4iCittc2dzdHIgIiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIg5LiK44Gn5LiA6Iis55qE44Gq44Oq44K944O844K544Ko44Op44O844GM6LW344GN44G+44GX44GfIgorCittc2dpZCAiUmVzb3VyY2Ugbm90IGZvdW5kLiIKK21zZ3N0ciAi44Oq44K944O844K544GM6KaL44Gk44GL44KK44G+44Gb44KTIgorCittc2dpZCAiUmVzb3VyY2UgYnVzeSBvciBub3QgYXZhaWxhYmxlLiIKK21zZ3N0ciAi44Oq44K944O844K544GM44OT44K444O844GL5Yip55So5Y+v6IO944Gn44Gv44GC44KK44G+44Gb44KTIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcuIgorbXNnc3RyICLoqq3jgb/ovrzjgb/nlKjjgavjg6rjgr3jg7zjgrnjgpLplovjgY/jgZPjgajjgYzjgafjgY3jgb7jgZvjgpMiCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCittc2dzdHIgIuabuOOBjei+vOOBv+eUqOOBq+ODquOCveODvOOCueOCkumWi+OBj+OBk+OBqOOBjOOBp+OBjeOBvuOBm+OCkyIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKK21zZ3N0ciAi6Kqt44G/5pu444GN55So44Gr44Oq44K944O844K544KS6ZaL44GP44GT44Go44GM44Gn44GN44G+44Gb44KTIgorCittc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKK21zZ3N0ciAi44Oq44K944O844K544KS44Kv44Ot44O844K644Gn44GN44G+44Gb44KTIgorCittc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCittc2dzdHIgIuODquOCveODvOOCueOBi+OCieiqreOBv+i+vOOCgOOBk+OBqOOBjOOBp+OBjeOBvuOBm+OCkyIKKworbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iCittc2dzdHIgIuODquOCveODvOOCueOCkuabuOOBjei+vOOCgOOBk+OBqOOBjOOBp+OBjeOBvuOBm+OCkyIKKworbXNnaWQgIkNvdWxkIG5vdCBwZXJmb3JtIHNlZWsgb24gcmVzb3VyY2UuIgorbXNnc3RyICLjg6rjgr3jg7zjgrnkuIrjgafjg6rjg7zjgq/jgYzjgafjgY3jgb7jgZvjgpMiCisKK21zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgorbXNnc3RyICLjg6rjgr3jg7zjgrnjgpLlkIzmnJ/jgafjgY3jgb7jgZvjgpMiCisKK21zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKK21zZ3N0ciAi44Oq44K944O844K55LiK44G+44Gf44Gv44Oq44K944O844K544GL44KJ6Kit5a6a44KS5Y+W5b6X44O75aSJ5pu044GM44Gn44GN44G+44Gb44KTIgorCittc2dpZCAiTm8gc3BhY2UgbGVmdCBvbiB0aGUgcmVzb3VyY2UuIgorbXNnc3RyICLjg6rjgr3jg7zjgrnjgavnqbrjgY3jgYzjgYLjgorjgb7jgZvjgpMiCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN0cmVhbSBlcnJvci4iCittc2dzdHIgIkdTdHJlYW1lciDkuIrjgafkuIDoiKznmoTjgarjgrnjg4jjg6rjg7zjg6Djgqjjg6njg7zjgYzotbfjgY3jgb7jgZfjgZ8iCisKK21zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCittc2dzdHIgIiIKKyLjgqjjg6zjg6Hjg7Pjg4jjga/jgZPjga7jgrnjg4jjg6rjg7zjg6Djga7jgZ/jgoHjga7lh6bnkIbjgpLlrp/oo4XjgZfjgabjgYTjgb7jgZvjgpPjgILjg5DjgrDjgpLnmbvpjLLjgZfjgabjgY/jgaAiCisi44GV44GEIgorCittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCittc2dzdHIgIuOCueODiOODquODvOODoOOBrueorumhnuOCkuWIpOWIpeOBp+OBjeOBvuOBm+OCkyIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKK21zZ3N0ciAiIgorCittc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgorbXNnc3RyICLjgZPjga7jgrnjg4jjg6rjg7zjg6DjgpLlh6bnkIbjgZnjgovjgZPjgajjgYzjgafjgY3jgovjgrPjg7zjg4fjg4Pjgq/jgYzjgYLjgorjgb7jgZvjgpMiCisKK21zZ2lkICJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iCittc2dzdHIgIuOCueODiOODquODvOODoOOCkuODh+OCs+ODvOODieOBp+OBjeOBvuOBm+OCkyIKKworbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKK21zZ3N0ciAi44K544OI44Oq44O844Og44KS44Ko44Oz44Kz44O844OJ44Gn44GN44G+44Gb44KTIgorCittc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIuWHuuWKm+OCueODiOODquODvOODoOOCkuWPluOCiuWHuuOBm+OBvuOBm+OCkyIKKworbXNnaWQgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKK21zZ3N0ciAi44K544OI44Oq44O844Og44KS5aSa6YeN5YyW44Gn44GN44G+44Gb44KTIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiIKK21zZ3N0ciAi44K544OI44Oq44O844Og44Gu44OV44Kp44O844Oe44OD44OI44GM5q2j44GX44GP44GC44KK44G+44Gb44KTIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iCittc2dzdHIgIuOCueODiOODquODvOODoOOBr+aal+WPt+WMluOCkuOCteODneODvOODiOOBl+OBpuOBhOOBvuOBm+OCkyIKKworbXNnaWQgIiIKKyJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgY2FuJ3QgYmUgZGVjcnlwdGVkIGJlY2F1c2Ugbm8gc3VpdGFibGUga2V5IGhhcyAiCisiYmVlbiBzdXBwbGllZC4iCittc2dzdHIgIuOCueODiOODquODvOODoOOBr+aal+WPt+WMluOBleOCjOOBpuOBhOOBvuOBmeOBjOmBqeOBl+OBn+OCreODvOOBjOOBquOBhOOBn+OCgeW+qeWFg+OBp+OBjeOBvuOBm+OCkyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKK21zZ3N0ciAiIgorCittc2dpZCAiU2VsZWN0ZWQgY2xvY2sgY2Fubm90IGJlIHVzZWQgaW4gcGlwZWxpbmUuIgorbXNnc3RyICIiCisKK21zZ2lkICJ0aXRsZSIKK21zZ3N0ciAi44K/44Kk44OI44OrIgorCittc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKK21zZ3N0ciAi5YWx6YCa44Gr44Gk44GL44KP44KM44KL44K/44Kk44OI44OrIgorCittc2dpZCAidGl0bGUgc29ydG5hbWUiCittc2dzdHIgIuOCv+OCpOODiOODq+OBruOCveODvOODiOWQjSIKKworbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIiIKKworbXNnaWQgImFydGlzdCIKK21zZ3N0ciAi44Ki44O844OG44Kj44K544OIIgorCittc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIgorbXNnc3RyICIiCisKK21zZ2lkICJhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgIuOCouODvOODhuOCo+OCueODiOOBruOCveODvOODiOWQjSIKKworbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiIgorCittc2dpZCAiYWxidW0iCittc2dzdHIgIuOCouODq+ODkOODoCIKKworbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgorbXNnc3RyICIiCisKK21zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKK21zZ3N0ciAi44Ki44Or44OQ44Og44Gu44K944O844OI5ZCNIgorCittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJhbGJ1bSBhcnRpc3QiCittc2dzdHIgIuOCouODvOODhuOCo+OCueODiCIKKworbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIGRpc3BsYXllZCIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImFsYnVtIGFydGlzdCBzb3J0bmFtZSIKK21zZ3N0ciAi44Ki44O844OG44Kj44K544OI44Gu44K944O844OI5ZCNIgorCittc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkIgorbXNnc3RyICIiCisKK21zZ2lkICJkYXRlIgorbXNnc3RyICLml6Xku5giCisKK21zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCittc2dzdHIgIuODh+ODvOOCv+OBjOS9nOaIkOOBleOCjOOBn+aXpeS7mCAoR0RhdGEg5qeL6YCg5L2T44Go44GX44GmKSIKKworIywgZnV6enkKK21zZ2lkICJkYXRldGltZSIKK21zZ3N0ciAi5pel5LuYIgorCisjLCBmdXp6eQorbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKK21zZ3N0ciAi44OH44O844K/44GM5L2c5oiQ44GV44KM44Gf5pel5LuYIChHRGF0YSDmp4vpgKDkvZPjgajjgZfjgaYpIgorCittc2dpZCAiZ2VucmUiCittc2dzdHIgIuOCuOODo+ODs+ODqyIKKworbXNnaWQgImdlbnJlIHRoaXMgZGF0YSBiZWxvbmdzIHRvIgorbXNnc3RyICLjgZPjga7jg4fjg7zjgr/jgYzlsZ7jgZfjgabjgYTjgovjgrjjg6Pjg7Pjg6siCisKK21zZ2lkICJjb21tZW50IgorbXNnc3RyICLjgrPjg6Hjg7Pjg4giCisKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKK21zZ3N0ciAiIgorCittc2dpZCAiZXh0ZW5kZWQgY29tbWVudCIKK21zZ3N0ciAiIgorCittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgorbXNnc3RyICIiCisKK21zZ2lkICJ0cmFjayBudW1iZXIiCittc2dzdHIgIuODiOODqeODg+OCr+eVquWPtyIKKworbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICJ0cmFjayBjb3VudCIKK21zZ3N0ciAi44OI44Op44OD44Kv5pWwIgorCittc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKK21zZ3N0ciAiIgorCittc2dpZCAiZGlzYyBudW1iZXIiCittc2dzdHIgIuODh+OCo+OCueOCr+eVquWPtyIKKworbXNnaWQgImRpc2MgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgIuOCs+ODrOOCr+OCt+ODp+ODs+WGheOBruODh+OCo+OCueOCr+eVquWPtyIKKworbXNnaWQgImRpc2MgY291bnQiCittc2dzdHIgIuODh+OCo+OCueOCr+aemuaVsCIKKworbXNnaWQgImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIgorbXNnc3RyICIiCisKK21zZ2lkICJsb2NhdGlvbiIKK21zZ3N0ciAi5aC05omAIgorCittc2dpZCAiIgorIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgorImlzIGhvc3RlZCkiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJob21lcGFnZSIKK21zZ3N0ciAi55S75YOPIgorCittc2dpZCAiSG9tZXBhZ2UgZm9yIHRoaXMgbWVkaWEgKGkuZS4gYXJ0aXN0IG9yIG1vdmllIGhvbWVwYWdlKSIKK21zZ3N0ciAiIgorCittc2dpZCAiZGVzY3JpcHRpb24iCittc2dzdHIgIuips+e0sCIKKworbXNnaWQgInNob3J0IHRleHQgZGVzY3JpYmluZyB0aGUgY29udGVudCBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiIgorCittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAi44OQ44O844K444On44OzIgorCittc2dpZCAidmVyc2lvbiBvZiB0aGlzIGRhdGEiCittc2dzdHIgIuOBk+OBruODh+ODvOOCv+OBruODkOODvOOCuOODp+ODsyIKKworbXNnaWQgIklTUkMiCittc2dzdHIgIklTUkMiCisKK21zZ2lkICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCittc2dzdHIgIiIKKyJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyDjgpLlj4LnhafjgZfjgaYiCisi44GP44Gg44GV44GEIgorCittc2dpZCAib3JnYW5pemF0aW9uIgorbXNnc3RyICLntYTnuZQiCisKK21zZ2lkICJjb3B5cmlnaHQiCittc2dzdHIgIiIKKworbXNnaWQgImNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgIiIKKworbXNnaWQgImNvcHlyaWdodCB1cmkiCittc2dzdHIgIiIKKworbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImVuY29kZWQgYnkiCittc2dzdHIgIuOCqOODs+OCs+ODvOODgOODvCIKKworbXNnaWQgIm5hbWUgb2YgdGhlIGVuY29kaW5nIHBlcnNvbiBvciBvcmdhbml6YXRpb24iCittc2dzdHIgIiIKKworbXNnaWQgImNvbnRhY3QiCittc2dzdHIgIuOCs+ODs+OCv+OCr+ODiCIKKworbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCittc2dzdHIgIuOCs+ODs+OCv+OCr+ODiOaDheWgsSIKKworbXNnaWQgImxpY2Vuc2UiCittc2dzdHIgIuODqeOCpOOCu+ODs+OCuSIKKworbXNnaWQgImxpY2Vuc2Ugb2YgZGF0YSIKK21zZ3N0ciAi44OH44O844K/44Gu44Op44Kk44K744Oz44K5IgorCittc2dpZCAibGljZW5zZSB1cmkiCittc2dzdHIgIuODqeOCpOOCu+ODs+OCuSB1cmkiCisKK21zZ2lkICJVUkkgdG8gdGhlIGxpY2Vuc2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgIuODh+ODvHTjga7jg6njgqTjgrvjg7Pjgrnjgbjjga4gVVJJIgorCittc2dpZCAicGVyZm9ybWVyIgorbXNnc3RyICLmvJTlpY/ogIUiCisKK21zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKK21zZ3N0ciAiIgorCittc2dpZCAiY29tcG9zZXIiCittc2dzdHIgIuS9nOabsuiAhSIKKworbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAiIgorCittc2dpZCAiZHVyYXRpb24iCittc2dzdHIgIua8lOWlj+aZgumWkyIKKworbXNnaWQgImxlbmd0aCBpbiBHU3RyZWFtZXIgdGltZSB1bml0cyAobmFub3NlY29uZHMpIgorbXNnc3RyICJHU3RyZWFtZXIg5pmC6ZaT5Y2Y5L2NIChuYW5vc2Vjb25kcykg44Gn44Gu6ZW344GVIgorCittc2dpZCAiY29kZWMiCittc2dzdHIgIuOCs+ODvOODh+ODg+OCryIKKworbXNnaWQgImNvZGVjIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiIgorCittc2dpZCAidmlkZW8gY29kZWMiCittc2dzdHIgIuWLleeUu+OCs+ODvOODh+ODg+OCryIKKworbXNnaWQgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiIgorCittc2dpZCAiYXVkaW8gY29kZWMiCittc2dzdHIgIumfs+WjsOOCs+ODvOODh+ODg+OCryIKKworbXNnaWQgImNvZGVjIHRoZSBhdWRpbyBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgInN1YnRpdGxlIGNvZGVjIgorbXNnc3RyICLli5XnlLvjgrPjg7zjg4fjg4Pjgq8iCisKK21zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJjb250YWluZXIgZm9ybWF0IgorbXNnc3RyICLjgrPjg7Pjgr/jgq/jg4jmg4XloLEiCisKK21zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiIgorCittc2dpZCAiYml0cmF0ZSIKK21zZ3N0ciAi44OT44OD44OI44Os44O844OIIgorCittc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAiIgorCittc2dpZCAibm9taW5hbCBiaXRyYXRlIgorbXNnc3RyICLpgJrluLjjg5Pjg4Pjg4jjg6zjg7zjg4giCisKK21zZ2lkICJub21pbmFsIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICIiCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCittc2dzdHIgIuacgOWwj+ODk+ODg+ODiOODrOODvOODiCIKKworbXNnaWQgIm1pbmltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgIiIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSIKK21zZ3N0ciAi5pyA5aSn44OT44OD44OI44Os44O844OIIgorCittc2dpZCAibWF4aW11bSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAiIgorCittc2dpZCAiZW5jb2RlciIKK21zZ3N0ciAi44Ko44Oz44Kz44O844OA44O8IgorCittc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAi44GT44Gu44K544OI44Oq44O844Og44KS44Ko44Oz44Kz44O844OJ44GZ44KL44Gu44Gr5L2/44Gj44Gf44Ko44Oz44Kz44O844OA44O8IgorCittc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgorbXNnc3RyICLjgqjjg7PjgrPjg7zjg4Djg7zjg5Djg7zjgrjjg6fjg7MiCisKK21zZ2lkICJ2ZXJzaW9uIG9mIHRoZSBlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgorbXNnc3RyICLjgZPjga7jgrnjg4jjg6rjg7zjg6DjgpLjgqjjg7PjgrPjg7zjg4njgZnjgovjga7jgavkvb/jgaPjgZ/jgqjjg7PjgrPjg7zjg4Djg7zjga7jg5Djg7zjgrjjg6fjg7MiCisKK21zZ2lkICJzZXJpYWwiCittc2dzdHIgIuOCt+ODquOCouODqyIKKworbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCittc2dzdHIgIuODiOODqeODg+OCr+OBruOCt+ODquOCouODq+eVquWPtyIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKK21zZ3N0ciAiIgorCittc2dpZCAidHJhY2sgZ2FpbiBpbiBkYiIKK21zZ3N0ciAiIgorCittc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBwZWFrIgorbXNnc3RyICIiCisKK21zZ2lkICJwZWFrIG9mIHRoZSB0cmFjayIKK21zZ3N0ciAi44OI44Op44OD44Kv44Gu44OU44O844KvIgorCittc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBnYWluIgorbXNnc3RyICIiCisKK21zZ2lkICJhbGJ1bSBnYWluIGluIGRiIgorbXNnc3RyICIiCisKK21zZ2lkICJyZXBsYXlnYWluIGFsYnVtIHBlYWsiCittc2dzdHIgIiIKKworbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgorbXNnc3RyICLjgqLjg6vjg5Djg6Djga7jg5Tjg7zjgq8iCisKK21zZ2lkICJyZXBsYXlnYWluIHJlZmVyZW5jZSBsZXZlbCIKK21zZ3N0ciAiIgorCittc2dpZCAicmVmZXJlbmNlIGxldmVsIG9mIHRyYWNrIGFuZCBhbGJ1bSBnYWluIHZhbHVlcyIKK21zZ3N0ciAiIgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSIKK21zZ3N0ciAi6KiA6Kqe44Kz44O844OJIgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIgorbXNnc3RyICIiCisKK21zZ2lkICJpbWFnZSIKK21zZ3N0ciAi55S75YOPIgorCittc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAi44GT44Gu44K544OI44Oq44O844Og44Gr6Zai6YCj44GX44Gf55S75YOPIgorCisjLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKK21zZ2lkICJwcmV2aWV3IGltYWdlIgorbXNnc3RyICLjg5fjg6zjg5Pjg6Xjg7znlLvlg48iCisKK21zZ2lkICJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgIuOBk+OBruOCueODiOODquODvOODoOOBq+mWoumAo+OBl+OBn+ODl+ODrOODk+ODpeODvOeUu+WDjyIKKworbXNnaWQgImF0dGFjaG1lbnQiCittc2dzdHIgIuOCouOCv+ODg+ODgeODoeODs+ODiCIKKworbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgIuOBk+OBruOCueODiOODquODvOODoOOBq+a3u+S7mOOBleOCjOOBn+ODleOCoeOCpOODqyIKKworbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCittc2dzdHIgIkJQTSIKKworbXNnaWQgIm51bWJlciBvZiBiZWF0cyBwZXIgbWludXRlIGluIGF1ZGlvIgorbXNnc3RyICIiCisKK21zZ2lkICJrZXl3b3JkcyIKK21zZ3N0ciAi44Kt44O844Ov44O844OJIgorCittc2dpZCAiY29tbWEgc2VwYXJhdGVkIGtleXdvcmRzIGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQiCittc2dzdHIgIiIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBuYW1lIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpdmUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yICIKKyJwcm9kdWNlZCIKK21zZ3N0ciAiIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGxhdGl0dWRlIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiZ2VvIGxhdGl0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCisiZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIGVxdWF0b3IsIG5lZ2F0aXZlIHZhbHVlcyBmb3IgIgorInNvdXRoZXJuIGxhdGl0dWRlcykiCittc2dzdHIgIiIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBsb25naXR1ZGUiCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJnZW8gbG9uZ2l0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCisiZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIHByaW1lIG1lcmlkaWFuIGluIEdyZWVud2ljaC9VSywgICIKKyJuZWdhdGl2ZSB2YWx1ZXMgZm9yIHdlc3Rlcm4gbG9uZ2l0dWRlcykiCittc2dzdHIgIiIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBlbGV2YXRpb24iCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJnZW8gZWxldmF0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiBtZXRlcnMgIgorImFjY29yZGluZyB0byBXR1M4NCAoemVybyBpcyBhdmVyYWdlIHNlYSBsZXZlbCkiCittc2dzdHIgIiIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBjb3VudHJ5IgorbXNnc3RyICIiCisKK21zZ2lkICJjb3VudHJ5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBjaXR5IgorbXNnc3RyICLloLTmiYAiCisKK21zZ2lkICJjaXR5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKK21zZ3N0ciAiIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIHN1YmxvY2F0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiYSBsb2NhdGlvbiB3aGl0aGluIGEgY2l0eSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgb3IgY3JlYXRlZCAoZS5nLiAiCisidGhlIG5laWdoYm9yaG9vZCkiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gaG9yaXpvbnRhbCBlcnJvciIKK21zZ3N0ciAi5aC05omAIgorCittc2dpZCAiZXhwZWN0ZWQgZXJyb3Igb2YgdGhlIGhvcml6b250YWwgcG9zaXRpb25pbmcgbWVhc3VyZXMgKGluIG1ldGVycykiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgc3BlZWQiCittc2dzdHIgIuWgtOaJgCIKKworbXNnaWQgIiIKKyJtb3ZlbWVudCBzcGVlZCBvZiB0aGUgY2FwdHVyaW5nIGRldmljZSB3aGlsZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIGluIG0vcyIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBkaXJlY3Rpb24iCittc2dzdHIgIuWgtOaJgCIKKworbXNnaWQgIiIKKyJpbmRpY2F0ZXMgdGhlIG1vdmVtZW50IGRpcmVjdGlvbiBvZiB0aGUgZGV2aWNlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgb2YgYSAiCisibWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sIDAgIgorIm1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBjYXB0dXJlIGRpcmVjdGlvbiIKK21zZ3N0ciAi5aC05omAIgorCittc2dpZCAiIgorImluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcgIGEgbWVkaWEuICIKKyJJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50ICByZXByZXNlbnRhdGlvbiwgMCBtZWFucyB0aGUgIgorImdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZScgaGVyZQorbXNnaWQgInNob3cgbmFtZSIKK21zZ3N0ciAiIgorCittc2dpZCAiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogJ3Nob3cgc29ydG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lIGFzIHVzZWQgZm9yIHNvcnRpbmcgcHVycG9zZXMnIGhlcmUKKyMsIGZ1enp5Cittc2dpZCAic2hvdyBzb3J0bmFtZSIKK21zZ3N0ciAi44Ki44O844OG44Kj44K544OI44Gu44K944O844OI5ZCNIgorCittc2dpZCAiIgorIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20sIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZXBpc29kZSBudW1iZXIiCittc2dzdHIgIuODh+OCo+OCueOCr+eVquWPtyIKKworbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAic2Vhc29uIG51bWJlciIKK21zZ3N0ciAi44OH44Kj44K544Kv55Wq5Y+3IgorCittc2dpZCAiVGhlIHNlYXNvbiBudW1iZXIgb2YgdGhlIHNob3cgdGhlIG1lZGlhIGlzIHBhcnQgb2YiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJseXJpY3MiCittc2dzdHIgIuODqeOCpOOCu+ODs+OCuSIKKworbXNnaWQgIlRoZSBseXJpY3Mgb2YgdGhlIG1lZGlhLCBjb21tb25seSB1c2VkIGZvciBzb25ncyIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImNvbXBvc2VyIHNvcnRuYW1lIgorbXNnc3RyICLjgr/jgqTjg4jjg6vjga7jgr3jg7zjg4jlkI0iCisKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICIiCisKK21zZ2lkICJncm91cGluZyIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKKyJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAidXNlciByYXRpbmciCittc2dzdHIgIua8lOWlj+aZgumWkyIKKworbXNnaWQgIiIKKyJSYXRpbmcgYXR0cmlidXRlZCBieSBhIHVzZXIuIFRoZSBoaWdoZXIgdGhlIHJhbmssIHRoZSBtb3JlIHRoZSB1c2VyIGxpa2VzICIKKyJ0aGlzIG1lZGlhIgorbXNnc3RyICIiCisKK21zZ2lkICJkZXZpY2UgbWFudWZhY3R1cmVyIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiTWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKK21zZ3N0ciAi44GT44Gu44K544OI44Oq44O844Og44KS44Ko44Oz44Kz44O844OJ44GZ44KL44Gu44Gr5L2/44Gj44Gf44Ko44Oz44Kz44O844OA44O844Gu44OQ44O844K444On44OzIgorCittc2dpZCAiZGV2aWNlIG1vZGVsIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICLjgZPjga7jgrnjg4jjg6rjg7zjg6DjgpLjgqjjg7PjgrPjg7zjg4njgZnjgovjga7jgavkvb/jgaPjgZ/jgqjjg7PjgrPjg7zjg4Djg7zjga7jg5Djg7zjgrjjg6fjg7MiCisKK21zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiQXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIgorbXNnc3RyICLjgZPjga7jgrnjg4jjg6rjg7zjg6DjgpLjgqjjg7PjgrPjg7zjg4njgZnjgovjga7jgavkvb/jgaPjgZ/jgqjjg7PjgrPjg7zjg4Djg7zjga7jg5Djg7zjgrjjg6fjg7MiCisKK21zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgorbXNnc3RyICIiCisKK21zZ2lkICJBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIG1lZGlhIgorbXNnc3RyICIiCisKK21zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKK21zZ3N0ciAiIgorCittc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgorbXNnc3RyICIiCisKK21zZ2lkICIsICIKK21zZ3N0ciAiLCAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorIui/veWKoOOBruODh+ODkOODg+OCsOaDheWgsTpcbiIKKyIlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgInNwZWNpZmllZCBlbXB0eSBiaW4gXCIlc1wiLCBub3QgYWxsb3dlZCIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHNraXBwaW5nIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICLjg5fjg63jg5Hjg4bjgqMgXCIlc1wiIOOBjOOCqOODrOODoeODs+ODiCBcIiVzXCIg44Gr44GC44KK44G+44Gb44KTIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgorbXNnc3RyICIlcyDjgpIgJXMg44G444Oq44Oz44Kv44Gn44GN44G+44Gb44KTIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICLjgqjjg6zjg6Hjg7Pjg4ggXCIlc1wiIOOBjOOBguOCiuOBvuOBm+OCkyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCittc2dzdHIgIiIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIKK21zZ3N0ciAiIgorCittc2dpZCAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNvdXJjZSBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJVUkkgXCIlc1wiIOOBruOCveODvOOCueOCqOODrOODoeODs+ODiOOBjOOBguOCiuOBvuOBm+OCkyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBlbGVtZW50IHRvIGxpbmsgVVJJIFwiJXNcIiB0byIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAiIgorCittc2dpZCAiZW1wdHkgcGlwZWxpbmUgbm90IGFsbG93ZWQiCittc2dzdHIgIuepuuOBruODkeOCpOODl+ODqeOCpOODs+OBr+ioseWPr+OBleOCjOOBvuOBm+OCkyIKKworbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKK21zZ3N0ciAiIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKK21zZ3N0ciAi5YaF6YOo44OH44O844K/44OV44Ot44O844Ko44Op44O8IgorCittc2dpZCAiQSBsb3Qgb2YgYnVmZmVycyBhcmUgYmVpbmcgZHJvcHBlZC4iCittc2dzdHIgIiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBwcm9ibGVtLiIKK21zZ3N0ciAiIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBzdHJlYW0gZXJyb3IuIgorbXNnc3RyICLlhoXpg6jjg4fjg7zjgr/jgrnjg4jjg6rjg7zjg6Djgqjjg6njg7wiCisKK21zZ2lkICJGaWx0ZXIgY2FwcyIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorIlJlc3RyaWN0IHRoZSBwb3NzaWJsZSBhbGxvd2VkIGNhcGFiaWxpdGllcyAoTlVMTCBtZWFucyBBTlkpLiBTZXR0aW5nIHRoaXMgIgorInByb3BlcnR5IHRha2VzIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBwbGllZCBHc3RDYXBzIG9iamVjdC4iCittc2dzdHIgIiIKKworbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHdyaXRpbmcuIgorbXNnc3RyICLmm7jjgY3ovrzjgb/nlKjjga7jg5XjgqHjgqTjg6vlkI3jgYzmjIflrprjgZXjgozjgabjgYTjgb7jgZvjgpMiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgorbXNnc3RyICLmm7jjgY3ovrzjgb/nlKjjgavjg5XjgqHjgqTjg6sgXCIlc1wiIOOCkumWi+OBj+OBk+OBqOOBjOOBp+OBjeOBvuOBm+OCkyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAi44OV44Kh44Kk44OrIFwiJXNcIiDjga7jgq/jg63jg7zjgrrmmYLjgavjgqjjg6njg7zjgYznmbrnlJ/jgZfjgb7jgZfjgZ8iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Vla2luZyBpbiBmaWxlIFwiJXNcIi4iCittc2dzdHIgIuODleOCoeOCpOODqyBcIiVzXCIg44Gu44K344O844Kv5Lit44Gr44Ko44Op44O844GM55m655Sf44GX44G+44GX44GfIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgorbXNnc3RyICLjg5XjgqHjgqTjg6sgXCIlc1wiIOOBruabuOOBjei+vOOBv+S4reOBq+OCqOODqeODvOOBjOeZuueUn+OBl+OBvuOBl+OBnyIKKworbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHJlYWRpbmcuIgorbXNnc3RyICLoqq3jgb/ovrzjgb/nlKjjga7jg5XjgqHjgqTjg6vlkI3jgYzmjIflrprjgZXjgozjgabjgYTjgb7jgZvjgpMiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgorbXNnc3RyICLoqq3jgb/ovrzjgb/nlKjjgavjg5XjgqHjgqTjg6sgXCIlc1wiIOOCkumWi+OBj+OBk+OBqOOBjOOBp+OBjeOBvuOBm+OCkyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGluZm8gb24gXCIlc1wiLiIKK21zZ3N0ciAiXCIlc1wiIOS4iuOBruaDheWgseOCkuWPluW+l+OBp+OBjeOBvuOBm+OCkyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIgorbXNnc3RyICLjg5XjgqHjgqTjg6sgXCIlc1wiIOOBr+ODh+OCo+ODrOOCr+ODiOODquOBp+OBmSIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFwiJXNcIiBpcyBhIHNvY2tldC4iCittc2dzdHIgIuODleOCoeOCpOODqyBcIiVzXCIg44Gv44K944Kx44OD44OI44Gn44GZIgorCittc2dpZCAiRmFpbGVkIGFmdGVyIGl0ZXJhdGlvbnMgYXMgcmVxdWVzdGVkLiIKK21zZ3N0ciAiIgorCittc2dpZCAiTm8gVGVtcCBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIgorbXNnc3RyICJcIiVzXCIg5LiK44Gu5oOF5aCx44KS5Y+W5b6X44Gn44GN44G+44Gb44KTIgorCisjLCBmdXp6eQorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZG93bmxvYWQgZmlsZS4iCittc2dzdHIgIuODleOCoeOCpOODqyBcIiVzXCIg44Gu5pu444GN6L6844G/5Lit44Gr44Ko44Op44O844GM55m655Sf44GX44G+44GX44GfIgorCittc2dpZCAiY2FwcyIKK21zZ3N0ciAiIgorCittc2dpZCAiZGV0ZWN0ZWQgY2FwYWJpbGl0aWVzIGluIHN0cmVhbSIKK21zZ3N0ciAi44K544OI44Oq44O844Og5YaF44Gu44Kx44Kk44OR44OT44Oq44OG44Kj44KS6KqN6K2Y44GX44G+44GX44GfIgorCittc2dpZCAibWluaW11bSIKK21zZ3N0ciAi5pyA5bCP5YCkIgorCittc2dpZCAibWF4aW11bSIKK21zZ3N0ciAi5pyA5aSn5YCkIgorCittc2dpZCAiZm9yY2UgY2FwcyIKK21zZ3N0ciAiIgorCittc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCittc2dzdHIgIiIKKworbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKK21zZ3N0ciAi44K544OI44Oq44O844Og44Gn44OH44O844K/44GM5ZCr44G+44KM44Gm44GE44G+44Gb44KTIgorCittc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKK21zZ3N0ciAi5a6f6KOF44GV44KM44Gm44GE44KL44Kk44Oz44K/44O844OV44Kn44Kk44K5OlxuIgorCittc2dpZCAicmVhZGFibGUiCittc2dzdHIgIuiqreOBv+i+vOOBv+WPr+iDvSIKKworbXNnaWQgIndyaXRhYmxlIgorbXNnc3RyICLmm7jjgY3ovrzjgb/lj6/og70iCisKK21zZ2lkICJjb250cm9sbGFibGUiCittc2dzdHIgIuOCs+ODs+ODiOODreODvOODq+WPr+iDvSIKKworbXNnaWQgImNoYW5nZWFibGUgaW4gTlVMTCwgUkVBRFksIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCwgUkVBRFkgb3IgUEFVU0VEIHN0YXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKK21zZ3N0ciAiIgorCittc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgorbXNnc3RyICIiCisKK21zZ2lkICJUb3RhbCBjb3VudDogIgorbXNnc3RyICLlkIjoqIjmlbA6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgorbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgcGx1Z2luIgorbXNnaWRfcGx1cmFsICIlZCBwbHVnaW5zIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBibGFja2xpc3QgZW50cnkiCittc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdCBlbnRyaWVzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBmZWF0dXJlIgorbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKK21zZ2lkICJQcmludCBhbGwgZWxlbWVudHMiCittc2dzdHIgIuOBmeOBueOBpuOBruOCqOODrOODoeODs+ODiOOCkuihqOekuuOBmeOCiyIKKworbXNnaWQgIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgorInBsdWdpbnMgcHJvdmlkZS5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKKyJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgorbXNnc3RyICIiCisKK21zZ2lkICJMaXN0IHRoZSBwbHVnaW4gY29udGVudHMiCittc2dzdHIgIiIKKworbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgorbXNnc3RyICLjg5fjg6njgrDjgqTjg7Pjg5XjgqHjgqTjg6vjgpLjg63jg7zjg4njgafjgY3jgb7jgZvjgpPjgafjgZfjgZ86ICVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkluZGV4IHN0YXRpc3RpY3MiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBlbGVtZW50IFwiJXNcIiAoJXMpOiAiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkZPVU5EIFRBR1xuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklORk86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorIuaDheWgsTpcbiIKKyIlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAiIgorCittc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLi4uXG4iCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJidWZmZXJpbmcuLi4iCittc2dzdHIgIuODkOODg+ODleOCoeODquODs+OCsOS4rS4uLiAlZCAgXG4iCisKK21zZ2lkICJEb25lIGJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgorbXNnc3RyICIiCisi44OQ44OD44OV44Kh44Oq44Oz44Kw44GM5a6M5LqG44GX44G+44GX44Gf44Gu44Gn44CB44OR44Kk44OX44Op44Kk44Oz44KS5YaN55Sf5LitIChQTEFZSU5HKSDjgavjgZfjgb4iCisi44GZLi4uXG4iCisKK21zZ2lkICJCdWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgorbXNnc3RyICLjg5Djg4Pjg5XjgqHjg6rjg7PjgrDkuK3jgarjga7jgafjgIHjg5HjgqTjg5fjg6njgqTjg7PjgpLkuIDmmYLlgZzmraIgKFBBVVNFRCkg44Gr44GX44G+44GZLi4uXG4iCisKK21zZ2lkICJSZWRpc3RyaWJ1dGUgbGF0ZW5jeS4uLlxuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBzdGF0ZSB0byAlcyBhcyByZXF1ZXN0ZWQgYnkgJXMuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiSW50ZXJydXB0OiBTdG9wcGluZyBwaXBlbGluZSAuLi5cbiIKK21zZ3N0ciAi5Ymy44KK6L6844G/OiDjg5HjgqTjg5fjg6njgqTjg7PjgpLlgZzmraLjgZfjgabjgYTjgb7jgZkuLi5cbiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBlbGVtZW50OiAlc1xuIgorbXNnc3RyICLjgqjjg6zjg6Hjg7Pjg4ggXCIlc1wiIOOBjOOBguOCiuOBvuOBm+OCkyIKKworbXNnaWQgIk91dHB1dCB0YWdzIChhbHNvIGtub3duIGFzIG1ldGFkYXRhKSIKK21zZ3N0ciAi44K/44KwICjjg6Hjgr/jg4fjg7zjgr8pIOOCkuWHuuWKm+OBmeOCiyIKKworbXNnaWQgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJEbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uIgorbXNnc3RyICJUWVBFIOOBruOCueODhuODvOOCv+OCueaDheWgseOCkuWHuuWKm+OBl+OBquOBhCIKKworbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKK21zZ3N0ciAi5Ye65Yqb44Oh44OD44K744O844K4IgorCittc2dpZCAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKK21zZ3N0ciAiVFlQRSDjga7jgrnjg4bjg7zjgr/jgrnmg4XloLHjgpLlh7rlipvjgZfjgarjgYQiCisKK21zZ2lkICJUWVBFMSxUWVBFMiwuLi4iCittc2dzdHIgIlRZUEUxLFRZUEUyLC4uLiIKKworbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKK21zZ3N0ciAi44OV44Kp44O844Or44OI44OP44Oz44OJ44Op44KS44Kk44Oz44K544OI44O844Or44GX44Gq44GEIgorCittc2dpZCAiUHJpbnQgYWxsb2MgdHJhY2UgKGlmIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lKSIKK21zZ3N0ciAiYWxsb2Mg44OI44Os44O844K544KS6KGo56S644GZ44KLICjjgrPjg7Pjg5HjgqTjg6vmmYLjgavmnInlirnjgavjgZnjgovlv4XopoHjgYzjgYLjgorjgb7jgZkpIgorCittc2dpZCAiRm9yY2UgRU9TIG9uIHNvdXJjZXMgYmVmb3JlIHNodXR0aW5nIHRoZSBwaXBlbGluZSBkb3duIgorbXNnc3RyICIiCisKK21zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKK21zZ3N0ciAi44Ko44Op44O8OiDjg5HjgqTjg5fjg6njgqTjg7PjgpLmp4vnr4njgZnjgovjgZPjgajjgYzjgafjgY3jgb7jgZvjgpM6ICVzXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlxuIgorbXNnc3RyICLjgqjjg6njg7w6IOODkeOCpOODl+ODqeOCpOODs+OCkuani+evieOBmeOCi+OBk+OBqOOBjOOBp+OBjeOBvuOBm+OCk1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGVycm9uZW91cyBwaXBlbGluZTogJXNcbiIKK21zZ3N0ciAiIgorCittc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgorbXNnc3RyICLjgqjjg6njg7w6ICdwaXBlbGluZScg44Ko44Os44Oh44Oz44OI44GM6KaL44Gk44GL44KK44G+44Gb44KT44Gn44GX44GfXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAi44OR44Kk44OX44Op44Kk44Oz44KS5LiA5pmC5YGc5q2iIChQQVVTRUQpIOOBq+OBl+OBpuOBhOOBvuOBmS4uLlxuIgorCittc2dpZCAiRVJST1I6IFBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwYXVzZS5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMSU5HIC4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHByZXJvbGwuXG4iCittc2dzdHIgIiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExFRCAuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgorbXNnc3RyICLjg5HjgqTjg5fjg6njgqTjg7PjgpLlho3nlJ/kuK0gKFBMQVlJTkcpIOOBq+OBl+OBpuOBhOOBvuOBmS4uLlxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKK21zZ3N0ciAiIgorCittc2dpZCAiV2FpdGluZyBmb3IgRU9TLi4uXG4iCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJFT1MgcmVjZWl2ZWQgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgorbXNnc3RyICLlibLjgorovrzjgb86IOODkeOCpOODl+ODqeOCpOODs+OCkuWBnOatouOBl+OBpuOBhOOBvuOBmS4uLlxuIgorCittc2dpZCAiQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgd2FpdGluZyBmb3IgRU9TXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgorbXNnc3RyICIiCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIC4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIE5VTEwgLi4uXG4iCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIgorbXNnc3RyICLjg5HjgqTjg5fjg6njgqTjg7PjgpLop6PmlL4gKEZSRUVJTkcpIOOBl+OBpuOBhOOBvuOBmS4uLlxuIgorCisjfiBtc2dpZCAiVXNhZ2U6IGdzdC14bWxsYXVuY2ggPGZpbGUueG1sPiBbIGVsZW1lbnQucHJvcGVydHk9dmFsdWUgLi4uIF1cbiIKKyN+IG1zZ3N0ciAi5L2/44GE5pa5OiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLl1cbiIKKworI34gbXNnaWQgIkVSUk9SOiBwYXJzZSBvZiB4bWwgZmlsZSAnJXMnIGZhaWxlZC5cbiIKKyN+IG1zZ3N0ciAi44Ko44Op44O8OiB4bWwg44OV44Kh44Kk44OrICclcycg44Gu6Kej5p6Q44Gr5aSx5pWX44GX44G+44GX44GfXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogbm8gdG9wbGV2ZWwgcGlwZWxpbmUgZWxlbWVudCBpbiBmaWxlICclcycuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICLjgqjjg6njg7w6IOODleOCoeOCpOODqyAnJXMnIOOBq+ODiOODg+ODl+ODrOODmeODq+OBruODkeOCpOODl+ODqeOCpOODs+OCqOODrOODoeODs+ODiOOBjOOBguOCiuOBvuOBm+OCk1xuIgorCisjLCBmdXp6eQorI34gbXNnaWQgIldBUk5JTkc6IG9ubHkgb25lIHRvcGxldmVsIGVsZW1lbnQgaXMgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS5cbiIKKyN+IG1zZ3N0ciAi6K2m5ZGKOiDjg4jjg4Pjg5fjg6zjg5njg6vjga7jgqjjg6zjg6Hjg7Pjg4jjga/kuIDjgaTjga7jgb/jgrXjg53jg7zjg4jjgZfjgabjgYTjgb7jgZkiCisKKyN+IG1zZ2lkICJFUlJPUjogY291bGQgbm90IHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAlZDogJXMuXG4iCisjfiBtc2dzdHIgIuOCqOODqeODvDog44Kz44Oe44Oz44OJ44Op44Kk44Oz5byV5pWwICVkIOOCkuino+aekOOBp+OBjeOBvuOBm+OCkzogJXNcbiIKKworI34gbXNnaWQgIldBUk5JTkc6IGVsZW1lbnQgbmFtZWQgJyVzJyBub3QgZm91bmQuXG4iCisjfiBtc2dzdHIgIuitpuWRijog44Ko44Os44Oh44Oz44OI5ZCNICclcycg44GM6KaL44Gk44GL44KK44G+44Gb44KTXG4iCisKKyN+IG1zZ2lkICJGSUxFIgorI34gbXNnc3RyICJGSUxFIgorCisjLCBmdXp6eQorI34gbXNnaWQgIkRvIG5vdCBpbnN0YWxsIHNpZ25hbCBoYW5kbGVycyBmb3IgU0lHVVNSMSBhbmQgU0lHVVNSMiIKKyN+IG1zZ3N0ciAi44OV44Kp44O844Or44OI44OP44Oz44OJ44Op44KS44Kk44Oz44K544OI44O844Or44GX44Gq44GEIgorCisjfiBtc2dpZCAiRXJyb3Igd3JpdGluZyByZWdpc3RyeSBjYWNoZSB0byAlczogJXMiCisjfiBtc2dzdHIgIiVzIOOBuOOBruODrOOCuOOCueODiOODquOCreODo+ODg+OCt+ODpeOBruabuOOBjei+vOOBv+S4reOBq+OCqOODqeODvOOBjOeZuueUn+OBl+OBvuOBl+OBnzogJXMiCisKKyN+IG1zZ2lkICJFcnJvciByZS1zY2FubmluZyByZWdpc3RyeSAlczogJXMiCisjfiBtc2dzdHIgIuODrOOCuOOCueODiOODqiAlcyDjga7lho3jgrnjgq3jg6Pjg7PkuK3jgavjgqjjg6njg7zjgYznmbrnlJ/jgZfjgb7jgZfjgZ86ICVzIgorCisjfiBtc2dpZCAiRXJyb3IgcmUtc2Nhbm5pbmcgcmVnaXN0cnkgJXMiCisjfiBtc2dzdHIgIuODrOOCuOOCueODiOODqiAlcyDjga7lho3jgrnjgq3jg6Pjg7PkuK3jgavjgqjjg6njg7zjgYznmbrnlJ/jgZfjgb7jgZfjgZ8iCisKKyN+IG1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQuIgorI34gbXNnc3RyICJHU3RyZWFtZXIg5YaF6YOo44Ko44Op44O8OiDnirbmhYvlpInmm7TjgavlpLHmlZfjgZfjgb7jgZfjgZ8iCisKKyN+IG1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgZGVzY3JpcHRvciBcIiVkXCIuIgorI34gbXNnc3RyICLjg5XjgqHjgqTjg6vjg4fjgqPjgrnjgq/jg6rjg5fjgr8gXCIlZFwiIOOBuOOBruabuOOBjei+vOOBv+S4reOBq+OCqOODqeODvOOBjOeZuueUn+OBl+OBvuOBl+OBnyIKKworI34gbXNnaWQgIkZpbGUgZGVzY3JpcHRvciBcIiVkXCIgaXMgbm90IHZhbGlkLiIKKyN+IG1zZ3N0ciAi44OV44Kh44Kk44Or44OH44Kj44K544Kv44Oq44OX44K/IFwiJWRcIiDjgYzmraPjgZfjgY/jgYLjgorjgb7jgZvjgpMiCmRpZmYgLS1naXQgYS9wby9sdC5nbW8gYi9wby9sdC5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRmMjFjMwotLS0gL2Rldi9udWxsCisrKyBiL3BvL2x0LmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9sdC5wbyBiL3BvL2x0LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZjVlNzkKLS0tIC9kZXYvbnVsbAorKysgYi9wby9sdC5wbwpAQCAtMCwwICsxLDEyMzIgQEAKKyMgTGl0aHVhbmlhbiB0cmFuc2xhdGlvbiBmb3IgZ3N0cmVhbWVyLgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnc3RyZWFtZXIgcGFja2FnZS4KKyMgQXVyaW1hcyDEjGVybml1cyA8YXVyaXNjNEBnbWFpbC5jb20+LCAyMDEwLgorIyDFvXlnaW1hbnRhcyBCZXJ1xI1rYSA8dWlkMEBha2wubHQ+LCAyMDEwLgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDAuMTAuMjkuMlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTA5LTI5IDE0OjU1KzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTA3LTE2IDAwOjUwKzAzMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IMW9eWdpbWFudGFzIEJlcnXEjWthIDx1aWQwQGFrbC5sdD5cbiIKKyJMYW5ndWFnZS1UZWFtOiBMaXRodWFuaWFuIDxrb21wX2x0QGtvbmZlcmVuY2lqb3MubHQ+XG4iCisiTGFuZ3VhZ2U6IGx0XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0zOyBwbHVyYWw9KG4lMTA9PTEgJiYgbiUxMDAhPTExID8gMCA6IG4lMTA+PTIgJiYgKG4iCisiJTEwMDwxMCB8fCBuJTEwMD49MjApID8gMSA6IDIpO1xuIgorIlgtR2VuZXJhdG9yOiBWaXJ0YWFsIDAuNi4xXG4iCisKK21zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCittc2dzdHIgIknFoXZlc3RpIEdTdHJlYW1lciB2ZXJzaWrEhSIKKworbXNnaWQgIk1ha2UgYWxsIHdhcm5pbmdzIGZhdGFsIgorbXNnc3RyICJQYWRhcnl0aSB2aXN1cyDEr3NwxJdqaW11cyBsZW10aW5nYWlzIgorCittc2dpZCAiUHJpbnQgYXZhaWxhYmxlIGRlYnVnIGNhdGVnb3JpZXMgYW5kIGV4aXQiCittc2dzdHIgIknFoXZlc3RpIHByaWVpbmFtYXMgZGVyaW5pbW8ga2F0ZWdvcmlqYXMgaXIgacWhZWl0aSIKKworbXNnaWQgIiIKKyJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gNSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKK21zZ3N0ciAiIgorIk51bWF0eXRhc2lzIGRlcmluaW1vIGx5Z2lzIG51byAxICh0aWsga2xhaWRvcykgaWtpIDUgKGJldCBrYXMpIGFyYmEgMCDigJMgIgorImpva2lvcyBpxaF2ZXN0aWVzIgorCittc2dpZCAiTEVWRUwiCittc2dzdHIgIkxZR0lTIgorCittc2dpZCAiIgorIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5X25hbWU6bGV2ZWwgcGFpcnMgdG8gc2V0IHNwZWNpZmljIGxldmVscyBmb3IgIgorInRoZSBpbmRpdmlkdWFsIGNhdGVnb3JpZXMuIEV4YW1wbGU6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKK21zZ3N0ciAiIgorIkthYmxlbGlhaXMgc2tpcmlhbWFzIGNhdGVnb3J5X25hbWU6bGV2ZWwgcG9yxbMgc8SFcmHFoWFzLCBudXN0YXRhbnRpcyAiCisia29ua3JlxI1pdXMgbHlnaXVzIHBhc2tpcm9tcyBrYXRlZ29yaWpvbXMuIFBhdnl6ZHlzOiBHU1RfQVVUT1BMVUc6NSwiCisiR1NUX0VMRU1FTlRfKjozIgorCittc2dpZCAiTElTVCIKK21zZ3N0ciAiU8SEUkHFoEFTIgorCittc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCittc2dzdHIgIknFoWp1bmd0aSBzcGFsdm90xIUgZGVyaW5pbW8gacWhdmVzdMSvIgorCittc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCittc2dzdHIgIknFoWp1bmd0aSBkZXJpbmltxIUiCisKK21zZ2lkICJFbmFibGUgdmVyYm9zZSBwbHVnaW4gbG9hZGluZyBkaWFnbm9zdGljcyIKK21zZ3N0ciAixK5qdW5ndGkgaW5mb3JtYXR5dmnEhSDEr3NraWVwacWzIMSva8SXbGltbyBkaWFnbm9zdGlrxIUiCisKK21zZ2lkICJDb2xvbi1zZXBhcmF0ZWQgcGF0aHMgY29udGFpbmluZyBwbHVnaW5zIgorbXNnc3RyICJEdml0YcWha2lhaXMgc2tpcmlhbWkga2VsaWFpLCBrdXIgeXJhIMSvc2tpZXBpxbMiCisKK21zZ2lkICJQQVRIUyIKK21zZ3N0ciAiS0VMSUFJIgorCittc2dpZCAiIgorIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgorImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKK21zZ3N0ciAiIgorIkthYmxlbGlhaXMgc2tpcmlhbWFzIHPEhXJhxaFhcyDEr3NraWVwacWzLCDEr2tlbHRpbsWzIHBhcGlsZG9tYWkgcHJpZSAiCisiR1NUX1BMVUdJTl9QQVRIIGFwbGlua29zIGtpbnRhbWFqYW1lIHNhdWdvbW8gc8SFcmHFoW8iCisKK21zZ2lkICJQTFVHSU5TIgorbXNnc3RyICLErlNLSUVQSUFJIgorCittc2dpZCAiRGlzYWJsZSB0cmFwcGluZyBvZiBzZWdtZW50YXRpb24gZmF1bHRzIGR1cmluZyBwbHVnaW4gbG9hZGluZyIKK21zZ3N0ciAiScWhanVuZ3RpIHNlZ21lbnRhdmltbyBrbGFpZMWzIGdhdWR5bcSFIMSvc2tpZXBpxbMgxK9rxJdsaW1vIG1ldHUiCisKK21zZ2lkICJEaXNhYmxlIHVwZGF0aW5nIHRoZSByZWdpc3RyeSIKK21zZ3N0ciAiScWhanVuZ3RpIHJlZ2lzdHJvIGF0bmF1amluaW3EhSIKKworbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIknFoWp1bmd0aSBwYWdhbGJpbmlvIHByb2Nlc28gcGFsZWlkaW3EhSBza2VudW9qYW50IHJlZ2lzdHLEhSIKKworbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgorbXNnc3RyICJHU3RyZWFtZXIgcGFyaW5rdHlzIgorCittc2dpZCAiU2hvdyBHU3RyZWFtZXIgT3B0aW9ucyIKK21zZ3N0ciAiUm9keXRpIEdTdHJlYW1lciBwYXJpbmt0aXMiCisKK21zZ2lkICJVbmtub3duIG9wdGlvbiIKK21zZ3N0ciAiTmXFvmlub21hIHBhcmlua3RpcyIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgY29yZSBsaWJyYXJ5IGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIHN1c2lkxatyxJcgc3UgYmVuZHLEhWrEhSBwYWdyaW5kaW7El3MgYmlibGlvdGVrb3Mga2xhaWRhLiIKKworbXNnaWQgIiIKKyJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIga8WrcsSXamFpIG5lcGFzaXZhcmdpbm8gcHJpc2tpcnRpIMWhaWFpIGtsYWlkYWkga2xhaWRvcyBrb2RvLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY29kZSBub3QgaW1wbGVtZW50ZWQuIgorbXNnc3RyICJWaWRpbsSXIEdTdHJlYW1lciBrbGFpZGE6IGtvZGFzIG5lcmVhbGl6dW90YXMuIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgorInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgorbXNnc3RyICIiCisiR1N0cmVhbWVyIGtsYWlkYTogbmVwYXZ5a28gcGFrZWlzdGkgYsWrc2Vub3MgaXIga2HFvmt1cmlhbSBlbGVtZW50dWkgbmVwYXZ5a28gIgorImnFoXZlc3RpIHRpbmthbW8ga2xhaWRvcyBwcmFuZcWhaW1vIHN1IG5lc8SXa23El3MgcHJpZcW+YXN0aW1pLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogcGFkIHByb2JsZW0uIgorbXNnc3RyICJWaWRpbsSXIEdTdHJlYW1lciBrbGFpZGE6IHBhZ3JpbmRvIGtsYWlkYS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiIKK21zZ3N0ciAiVmlkaW7ElyBHU3RyZWFtZXIga2xhaWRhOiBnaWpvcyBwcm9ibGVtYS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uIgorbXNnc3RyICJWaWRpbsSXIEdTdHJlYW1lciBrbGFpZGE6IGRlcnlixbMgcHJvYmxlbWEuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBldmVudCBwcm9ibGVtLiIKK21zZ3N0ciAiVmlkaW7ElyBHU3RyZWFtZXIga2xhaWRhOiDEr3Z5a2lvIHByb2JsZW1hLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2VlayBwcm9ibGVtLiIKK21zZ3N0ciAiVmlkaW7ElyBHU3RyZWFtZXIga2xhaWRhOiBpZcWha29qaW1vIGtsYWlkYS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNhcHMgcHJvYmxlbS4iCittc2dzdHIgIlZpZGluxJcgR1N0cmVhbWVyIGtsYWlkYTogZ2FsaW15YmnFsyBwcm9ibGVtYS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKK21zZ3N0ciAiVmlkaW7ElyBHU3RyZWFtZXIga2xhaWRhOiDFvnltb3MgcHJvYmxlbWEuIgorCittc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKK21zZ3N0ciAiSsWrc8WzIMSvZGllZ3RhbWUgR1N0cmVhbWVyIHRyxatrc3RhIMSvc2tpZXBpby4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIgorbXNnc3RyICJWaWRpbsSXIEdTdHJlYW1lciBrbGFpZGE6IGxhaWtyb2TFvmlvIHByb2JsZW1hLiIKKworbXNnaWQgIiIKKyJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCisiZGlzYWJsZWQuIgorbXNnc3RyICLFoGkgcHJvZ3JhbWEgYmFuZG8gbmF1ZG90aSBHU3RyZWFtZXIgZnVua2NpamFzLCBrdXJpb3MgYnV2byBpxaFqdW5ndG9zLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3VwcG9ydGluZyBsaWJyYXJ5IGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIGFwdGlrbyBiZW5kcsSFasSFIHBhbGFpa2FuxI1pb3Npb3MgYmlibGlvdGVrb3Mga2xhaWTEhS4iCisKK21zZ2lkICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJOZXBhdnlrbyBpbmljaWFsaXp1b3RpIHBhbGFpa2FuxI1pb3Npb3MgYmlibGlvdGVrb3MuIgorCittc2dpZCAiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIk5lcGF2eWtvIHXFvnZlcnRpIHBhbGFpa2FuxI1pb3Npb3MgYmlibGlvdGVrb3MuIgorCittc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJOZXBhdnlrbyBzdWtvbmZpZ8WrcnVvdGkgcGFsYWlrYW7EjWlvc2lvcyBiaWJsaW90ZWtvcy4iCisKK21zZ2lkICJFbmNvZGluZyBlcnJvci4iCittc2dzdHIgIiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIgYXB0aWtvIGJlbmRyxIVqxIUgacWhdGVrbGlhdXMga2xhaWTEhS4iCisKK21zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgorbXNnc3RyICJJxaF0ZWtsaXVzIG5lcmFzdGFzLiIKKworbXNnaWQgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCittc2dzdHIgIknFoXRla2xpdXMgdcW+aW10YXMgYXJiYSBuZXByaWVpbmFtYXMuIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcuIgorbXNnc3RyICJOZXBhdnlrbyBhdHZlcnRpIGnFoXRla2xpYXVzIHNrYWl0eW11aS4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCittc2dzdHIgIk5lcGF2eWtvIGF0dmVydGkgacWhdGVrbGlhdXMgcmHFoXltdWkuIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgorbXNnc3RyICJOZXBhdnlrbyBhdHZlcnRpIGnFoXRla2xpYXVzIHNrYWl0eW11aSBpciByYcWheW11aS4iCisKK21zZ2lkICJDb3VsZCBub3QgY2xvc2UgcmVzb3VyY2UuIgorbXNnc3RyICJOZXBhdnlrbyB1xb52ZXJ0aSBpxaF0ZWtsaWF1cy4iCisKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIHJlc291cmNlLiIKK21zZ3N0ciAiTmVwYXZ5a28gc2thaXR5dGkgacWhIGnFoXRla2xpYXVzLiIKKworbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iCittc2dzdHIgIk5lcGF2eWtvIHJhxaF5dGkgxK8gacWhdGVrbGnFsy4iCisKK21zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKK21zZ3N0ciAiTmVwYXZ5a28gYXRsaWt0aSBwYWllxaFrb3MgacWhdGVrbGl1amUuIgorCittc2dpZCAiQ291bGQgbm90IHN5bmNocm9uaXplIG9uIHJlc291cmNlLiIKK21zZ3N0ciAiTmVwYXZ5a28gc2luY2hyb25penVvdGkgc3UgacWhdGVrbGl1bWkuIgorCittc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCittc2dzdHIgIk5lcGF2eWtvIGdhdXRpL251c3RhdHl0aSBpxaF0ZWtsaWF1cyBwYXJhbWV0csWzLiIKKworbXNnaWQgIk5vIHNwYWNlIGxlZnQgb24gdGhlIHJlc291cmNlLiIKK21zZ3N0ciAiScWhdGVrbGl1amUgbmVixJdyYSB2aWV0b3MuIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdHJlYW0gZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIgYXB0aWtvIGJlbmRyxIVqxIUgc3JhdXRvIGtsYWlkxIUuIgorCittc2dpZCAiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBoYW5kbGluZyBvZiB0aGlzIHN0cmVhbS4gUGxlYXNlIGZpbGUgYSBidWcuIgorbXNnc3RyICIiCisiRWxlbWVudGFzIG5lc3VrdXJpYSBzcmF1dG8gYXBkb3JvamltbyBnYWxpbXlixJdzLiBQcmFuZcWha2l0ZSBhcGllIGtsYWlkxIUuIgorCittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCittc2dzdHIgIk5lcGF2eWtvIGFwdGlrdGkgc3JhdXRvIHRpcG8uIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBvZiBhIGRpZmZlcmVudCB0eXBlIHRoYW4gaGFuZGxlZCBieSB0aGlzIGVsZW1lbnQuIgorbXNnc3RyICJTcmF1dGFzIHlyYSBraXRva2lvIHRpcG8gbmVndSDFoWlzIGVsZW1lbnRhcyBnYWxpIGFwZG9yb3RpLiIKKworbXNnaWQgIlRoZXJlIGlzIG5vIGNvZGVjIHByZXNlbnQgdGhhdCBjYW4gaGFuZGxlIHRoZSBzdHJlYW0ncyB0eXBlLiIKK21zZ3N0ciAiTsSXcmEga29kZWtvLCBnYWxpbsSNaW8gYXBkb3JvdGkgxaFpbyB0aXBvIHNyYXV0xIUuIgorCittc2dpZCAiQ291bGQgbm90IGRlY29kZSBzdHJlYW0uIgorbXNnc3RyICJOZXBhdnlrbyBkZWtvZHVvdGkgc3JhdXRvLiIKKworbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKK21zZ3N0ciAiTmVwYXZ5a28ga29kdW90aSBzcmF1dG8uIgorCittc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIk5lcGF2eWtvIGnFoXJldGludGkgc3JhdXRvLiIKKworbXNnaWQgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKK21zZ3N0ciAiTmVwYXZ5a28gc3V0YW5raW50aSBzcmF1dG8uIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiIKK21zZ3N0ciAiU3JhdXRhcyB5cmEgbmV0ZWlzaW5nbyBmb3JtYXRvLiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBkZWNyeXB0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIgorbXNnc3RyICJTcmF1dGFzIHlyYSDFoWlmcnVvdGFzLCBvIGnFocWhaWZyYXZpbW8gZ2FsaW15YsSXIG5lcGFsYWlrb21hLiIKKworbXNnaWQgIiIKKyJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgY2FuJ3QgYmUgZGVjcnlwdGVkIGJlY2F1c2Ugbm8gc3VpdGFibGUga2V5IGhhcyAiCisiYmVlbiBzdXBwbGllZC4iCittc2dzdHIgIiIKKyJTcmF1dGFzIHlyYSDFoWlmcnVvdGFzIGlyIG5lZ2FsaSBixat0aSBpxaHFoWlmcnVvdGFzLCBrYWRhbmdpIG5lYnV2byBwYXRlaWt0YXMgIgorInRpbmthbWFzIHJha3Rhcy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzLiIKK21zZ3N0ciAiTsSXcmEga2xhaWRvcyBwcmFuZcWhaW1vIHNyacSNaWFpICVzLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMgYW5kIGNvZGUgJWQuIgorbXNnc3RyICJOxJdyYSBzdGFuZGFydGluaW8ga2xhaWRvcyBwcmFuZcWhaW1vIHNyacSNaWFpICVzIGlyIGtvZHVpICVkLiIKKworbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKK21zZ3N0ciAiUGFzaXJpbmt0YXMgbGFpa3JvZGlzIG5lZ2FsaSBixat0aSBuYXVkb2phbWFzIGtvbnZlamVyeWplLiIKKworbXNnaWQgInRpdGxlIgorbXNnc3RyICJwYXZhZGluaW1hcyIKKworbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUiCittc2dzdHIgImJlbmRyYWkgbmF1ZG9qYW1hcyBwYXZhZGluaW1hcyIKKworbXNnaWQgInRpdGxlIHNvcnRuYW1lIgorbXNnc3RyICJwYXZhZGluaW1vIHJpa2l1b2phbWFzIHBhdmFkaW5pbWFzIgorCittc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiYmVuZHJhaSBuYXVkb2phbWFzIHBhdmFkaW5pbWFzIHJpa2lhdmltbyByZWlrbcSXbXMiCisKK21zZ2lkICJhcnRpc3QiCittc2dzdHIgImF0bGlrxJdqYXMiCisKK21zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmciCittc2dzdHIgImFzbXVvICgtZW55cyksIGF0c2FraW5naSB1xb4gxK9yYcWhxIUiCisKK21zZ2lkICJhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgImF0bGlrxJdqbyByaWtpdW9qYW1hcyBwYXZhZGluaW1hcyIKKworbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiYXNtdW8gKC1lbnlzKSwgYXRzYWtpbmdpIHXFviDEr3JhxaHEhSByaWtpYXZpbW8gcmVpa23El21zIgorCittc2dpZCAiYWxidW0iCittc2dzdHIgImFsYnVtYXMiCisKK21zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSIKK21zZ3N0ciAiYWxidW1hcyBzdSDFoWlhaXMgZHVvbWVuaW1pcyIKKworbXNnaWQgImFsYnVtIHNvcnRuYW1lIgorbXNnc3RyICJhbGJ1bW8gcmlraXVvamFtYXMgcGF2YWRpbmltYXMiCisKK21zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiYWxidW1hcyBzdSDFoWlhaXMgZHVvbWVuaW1pcyByaWtpYXZpbW8gcmVpa23El21zIgorCittc2dpZCAiYWxidW0gYXJ0aXN0IgorbXNnc3RyICJhbGJ1bW8gYXRsaWvEl2phcyIKKworbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIGRpc3BsYXllZCIKK21zZ3N0ciAiVmlzbyBhbGJ1bW8gYXRsaWvEl2phcywga29rcyB0dXJpIGLFq3RpIHJvZG9tYXMiCisKK21zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgImFsYnVtbyBhdGxpa8SXam8gcmlraXVvamFtYXMgcGF2YWRpbmltYXMiCisKK21zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiCittc2dzdHIgIlZpc28gYWxidW1vIGF0bGlrxJdqYXMsIGtva3MgdHVyxJd0xbMgYsWrdGkgcmlraXVvamFtYXMiCisKK21zZ2lkICJkYXRlIgorbXNnc3RyICJkYXRhIgorCittc2dpZCAiZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHRGF0ZSBzdHJ1Y3R1cmUpIgorbXNnc3RyICJkYXRhLCBrYWRhIGR1b21lbnlzIGJ1dm8gc3VrdXJ0aSAoa2FpcCBHRGF0ZSBzdHJ1a3TFq3JhKSIKKworIywgZnV6enkKK21zZ2lkICJkYXRldGltZSIKK21zZ3N0ciAiZGF0YSIKKworIywgZnV6enkKK21zZ2lkICJkYXRlIGFuZCB0aW1lIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdzdERhdGVUaW1lIHN0cnVjdHVyZSkiCittc2dzdHIgImRhdGEsIGthZGEgZHVvbWVueXMgYnV2byBzdWt1cnRpIChrYWlwIEdEYXRlIHN0cnVrdMWrcmEpIgorCittc2dpZCAiZ2VucmUiCittc2dzdHIgIsW+YW5yYXMiCisKK21zZ2lkICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKK21zZ3N0ciAixb5hbnJhcywga3VyaWFtIHByaXNraXJpYW1pIMWhaWUgZHVvbWVueXMiCisKK21zZ2lkICJjb21tZW50IgorbXNnc3RyICJrb21lbnRhcmFzIgorCittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCittc2dzdHIgImxhaXN2YXMgdGVrc3RhcywgYXBpYsWrZGluYW50aXMgZHVvbWVuaXMiCisKK21zZ2lkICJleHRlbmRlZCBjb21tZW50IgorbXNnc3RyICJpxaFwbMSXc3RpbmlzIGtvbWVudGFyYXMiCisKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCittc2dzdHIgIiIKKyJsYWlzdmFzIHRla3N0YXMsIGFwaWLFq2RpbmFudGlzIGR1b21lbmlzIHJha3Rhcz1yZWlrxaFtxJcgYXJiYSByYWt0YXNbZW5dIgorIj1rb21lbnRhcmFzIGZvcm1hIgorCittc2dpZCAidHJhY2sgbnVtYmVyIgorbXNnc3RyICJ0YWtlbGlvIG51bWVyaXMiCisKK21zZ2lkICJ0cmFjayBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKK21zZ3N0ciAidGFrZWxpbyBudW1lcmlzIGtvbGVrY2lqb2plIgorCittc2dpZCAidHJhY2sgY291bnQiCittc2dzdHIgInRha2VsacWzIHNrYWnEjWl1cyIKKworbXNnaWQgImNvdW50IG9mIHRyYWNrcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIHRyYWNrIGJlbG9uZ3MgdG8iCittc2dzdHIgInRha2VsacWzIHNrYWnEjWl1cyBrb2xla2Npam9qZSwga3VyaWFpIHByaWtsYXVzbyDFoWlzIHRha2VsaXMiCisKK21zZ2lkICJkaXNjIG51bWJlciIKK21zZ3N0ciAiZGlza28gbnVtZXJpcyIKKworbXNnaWQgImRpc2MgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgImRpc2tvIG51bWVyaXMga29sZWtjaWpvamUiCisKK21zZ2lkICJkaXNjIGNvdW50IgorbXNnc3RyICJkaXNrxbMgc2thacSNaXVzIgorCittc2dpZCAiY291bnQgb2YgZGlzY3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyBkaXNjIGJlbG9uZ3MgdG8iCittc2dzdHIgImRpc2vFsyBza2FpxI1pdXMga29sZWtjaWpvamUsIGt1cmlhaSBwcmlrbGF1c28gxaFpcyBkaXNrYXMiCisKK21zZ2lkICJsb2NhdGlvbiIKK21zZ3N0ciAidmlldGEiCisKK21zZ2lkICIiCisiT3JpZ2luIG9mIG1lZGlhIGFzIGEgVVJJIChsb2NhdGlvbiwgd2hlcmUgdGhlIG9yaWdpbmFsIG9mIHRoZSBmaWxlIG9yIHN0cmVhbSAiCisiaXMgaG9zdGVkKSIKK21zZ3N0ciAiIgorIk1lZGlqb3MgxaFhbHRpbmlzIGthaXAgVVJJICh2aWV0YSwga3VyIHBhdGFscGludGFzIG9yaWdpbmFsdXMgZmFpbGFzIGFyYmEgIgorInNyYXV0YXMpIgorCittc2dpZCAiaG9tZXBhZ2UiCittc2dzdHIgInN2ZXRhaW7ElyIKKworbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCittc2dzdHIgIsWgaW9zIG1lZGlqb3MgbmFtxbMgc3ZldGFpbsSXICh0LiB5LiBhdGxpa8SXam8gYXJiYSBmaWxtbyBzdmV0YWluxJcpIgorCittc2dpZCAiZGVzY3JpcHRpb24iCittc2dzdHIgImFwcmHFoXltYXMiCisKK21zZ2lkICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCittc2dzdHIgInRydW1wYXMgdGVrc3RhcywgYXByYcWhYW50aXMgZHVvbWVuxbMgdHVyaW7EryIKKworbXNnaWQgInZlcnNpb24iCittc2dzdHIgInZlcnNpamEiCisKK21zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKK21zZ3N0ciAixaFpxbMgZHVvbWVuxbMgdmVyc2lqYSIKKworbXNnaWQgIklTUkMiCittc2dzdHIgIklTUkMiCisKK21zZ2lkICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCittc2dzdHIgIiIKKyJUYXJwdGF1dGluaXMgc3RhbmRhcnRpbmlzIMSvcmHFocWzIGtvZGFzIOKAkyDFvmnFq3LEl2tpdGUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKKworbXNnaWQgIm9yZ2FuaXphdGlvbiIKK21zZ3N0ciAib3JnYW5pemFjaWphIgorCittc2dpZCAiY29weXJpZ2h0IgorbXNnc3RyICJhdXRvcmlhdXMgdGVpc8SXcyIKKworbXNnaWQgImNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgInByYW5lxaFpbWFzIGFwaWUgZHVvbWVuxbMgYXV0b3JpYXVzIHRlaXNlcyIKKworbXNnaWQgImNvcHlyaWdodCB1cmkiCittc2dzdHIgImF1dG9yaWF1cyB0ZWlzacWzIHVyaSIKKworbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiVVJJLCBrdXIgeXJhIHByYW5lxaFpbWFzIGFwaWUgZHVvbWVuxbMgYXV0b3JpYXVzIHRlaXNlcyIKKworIywgZnV6enkKK21zZ2lkICJlbmNvZGVkIGJ5IgorbXNnc3RyICJlbmtvZGVyaXMiCisKK21zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICJjb250YWN0IgorbXNnc3RyICJrb250YWt0YWkiCisKK21zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgorbXNnc3RyICJrb250YWt0aW7ElyBpbmZvcm1hY2lqYSIKKworbXNnaWQgImxpY2Vuc2UiCittc2dzdHIgImxpY2VuY2lqYSIKKworbXNnaWQgImxpY2Vuc2Ugb2YgZGF0YSIKK21zZ3N0ciAiZHVvbWVuxbMgbGljZW5jaWphIgorCittc2dpZCAibGljZW5zZSB1cmkiCittc2dzdHIgImxpY2VuY2lqb3MgdXJpIgorCittc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJVUkksIGt1ciB5cmEgZHVvbWVuxbMgbGljZW5jaWphIgorCittc2dpZCAicGVyZm9ybWVyIgorbXNnc3RyICJhdGxpa8SXamFzIgorCittc2dpZCAicGVyc29uKHMpIHBlcmZvcm1pbmciCittc2dzdHIgImF0bGlla2FudGlzICgteXMpIGFzbXVvICgtZW55cykiCisKK21zZ2lkICJjb21wb3NlciIKK21zZ3N0ciAia29tcG96aXRvcml1cyIKKworbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAiYXNtdW8gKC1lbnlzKSwga3VyaXMgKC1pZSkgc3VrxatyxJcgxK9yYcWhxIUiCisKK21zZ2lkICJkdXJhdGlvbiIKK21zZ3N0ciAidHJ1a23ElyIKKworbXNnaWQgImxlbmd0aCBpbiBHU3RyZWFtZXIgdGltZSB1bml0cyAobmFub3NlY29uZHMpIgorbXNnc3RyICJ0cnVrbcSXIEdTdHJlYW1lciBsYWlrbyB2aWVuZXRhaXMgKG5hbm9zZWt1bmTEl21pcykiCisKK21zZ2lkICJjb2RlYyIKK21zZ3N0ciAia29kZWthcyIKKworbXNnaWQgImNvZGVjIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAia29kZWthcywga3VyaWFtZSBsYWlrb21pIGR1b21lbnlzIgorCittc2dpZCAidmlkZW8gY29kZWMiCittc2dzdHIgInZhaXpkbyBrb2Rla2FzIgorCittc2dpZCAiY29kZWMgdGhlIHZpZGVvIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJ2YWl6ZG8ga29kZWthcywga3VyaWFtZSBsYWlrb21pIGR1b21lbnlzIgorCittc2dpZCAiYXVkaW8gY29kZWMiCittc2dzdHIgImdhcnNvIGtvZGVrYXMiCisKK21zZ2lkICJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImdhcnNvIGtvZGVrYXMsIGt1cmlhbWUgbGFpa29taSBkdW9tZW55cyIKKworbXNnaWQgInN1YnRpdGxlIGNvZGVjIgorbXNnc3RyICJzdWJ0aXRyxbMga29kZWthcyIKKworbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAia29kZWthcywga3VyaWFtZSBsYWlrb21pIHN1YnRpdHLFsyBkdW9tZW55cyIKKworbXNnaWQgImNvbnRhaW5lciBmb3JtYXQiCittc2dzdHIgImtvbnRlaW5lcmlvIGZvcm1hdGFzIgorCittc2dpZCAiY29udGFpbmVyIGZvcm1hdCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImtvbnRlaW5lcmlvIGZvcm1hdGFzLCBrdXJpYW1lIGxhaWtvbWkgZHVvbWVueXMiCisKK21zZ2lkICJiaXRyYXRlIgorbXNnc3RyICJwcmFsYWlkdW1hcyIKKworbXNnaWQgImV4YWN0IG9yIGF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgInRpa3NsdXMgYXJiYSB2aWR1dGluaXMgcHJhbGFpZHVtYXMgYml0YWlzIHBlciBzZWt1bmTEmSIKKworbXNnaWQgIm5vbWluYWwgYml0cmF0ZSIKK21zZ3N0ciAibm9taW5hbHVzIHByYWxhaWR1bWFzIgorCittc2dpZCAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAibm9taW5hbHVzIHByYWxhaWR1bWFzIGJpdGFpcyBwZXIgc2VrdW5kxJkiCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCittc2dzdHIgIm1hxb5pYXVzaWFzIHByYWxhaWR1bWFzIgorCittc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAibWHFvmlhdXNpYXMgcHJhbGFpZHVtYXMgYml0YWlzIHBlciBzZWt1bmTEmSIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSIKK21zZ3N0ciAiZGlkxb5pYXVzaWFzIHByYWxhaWR1bWFzIgorCittc2dpZCAibWF4aW11bSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAiZGlkxb5pYXVzaWFzIHByYWxhaWR1bWFzIGJpdGFpcyBwZXIgc2VrdW5kxJkiCisKK21zZ2lkICJlbmNvZGVyIgorbXNnc3RyICJlbmtvZGVyaXMiCisKK21zZ2lkICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgorbXNnc3RyICJlbmtvZGVyaXMsIG5hdWRvdGFzIMWhaWFtIHNyYXV0dWkga29kdW90aSIKKworbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKK21zZ3N0ciAiZW5rb2RlcmlvIHZlcnNpamEiCisKK21zZ2lkICJ2ZXJzaW9uIG9mIHRoZSBlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgorbXNnc3RyICJlbmtvZGVyaW8sIG5hdWRvdG8gxaFpYW0gc3JhdXR1aSBrb2R1b3RpLCB2ZXJzaWphIgorCittc2dpZCAic2VyaWFsIgorbXNnc3RyICJzZXJpamEiCisKK21zZ2lkICJzZXJpYWwgbnVtYmVyIG9mIHRyYWNrIgorbXNnc3RyICJ0YWtlbGlvIHNlcmlqb3MgbnVtZXJpcyIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKK21zZ3N0ciAicmVwbGF5Z2FpbiB0YWtlbGlvIHN0aXByaW5pbWFzIgorCittc2dpZCAidHJhY2sgZ2FpbiBpbiBkYiIKK21zZ3N0ciAidGFrZWxpbyBzdGlwcmluaW1hcyBkZWNpYmVsYWlzIgorCittc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBwZWFrIgorbXNnc3RyICJyZXBsYXlnYWluIHRha2VsaW8gdmlyxaHFq27ElyIKKworbXNnaWQgInBlYWsgb2YgdGhlIHRyYWNrIgorbXNnc3RyICJ0YWtlbGlvIHZpcsWhxatuxJciCisKK21zZ2lkICJyZXBsYXlnYWluIGFsYnVtIGdhaW4iCittc2dzdHIgInJlcGxheWdhaW4gYWxidW1vIHN0aXByaW5pbWFzIgorCittc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKK21zZ3N0ciAiYWxidW1vIHN0aXByaW5pbWFzIGRlY2liZWxhaXMiCisKK21zZ2lkICJyZXBsYXlnYWluIGFsYnVtIHBlYWsiCittc2dzdHIgInJlcGxheWdhaW4gYWxidW1vIHZpcsWhxatuxJciCisKK21zZ2lkICJwZWFrIG9mIHRoZSBhbGJ1bSIKK21zZ3N0ciAiYWxidW1vIHZpcsWhxatuxJciCisKK21zZ2lkICJyZXBsYXlnYWluIHJlZmVyZW5jZSBsZXZlbCIKK21zZ3N0ciAicmVwbGF5Z2FpbiBzYW50eWtpbmlzIGx5Z2lzIgorCittc2dpZCAicmVmZXJlbmNlIGxldmVsIG9mIHRyYWNrIGFuZCBhbGJ1bSBnYWluIHZhbHVlcyIKK21zZ3N0ciAidGFrZWxpbyBpciBhbGJ1bW8gc3RpcHJpbmltbyByZWlrxaFtacWzIHNhbnR5a2luaXMgbHlnaXMiCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIgorbXNnc3RyICJrYWxib3Mga29kYXMiCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIGZvciB0aGlzIHN0cmVhbSwgY29uZm9ybWluZyB0byBJU08tNjM5LTEiCittc2dzdHIgIsWhaW8gc3JhdXRvIGthbGJvcyBrb2RhcywgYXRpdGlua2FudGlzIElTTy02MzktMSIKKworbXNnaWQgImltYWdlIgorbXNnc3RyICJwYXZlaWtzbMSXbGlzIgorCittc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAicGF2ZWlrc2zEl2xpcywgc3VzaWV0YXMgc3Ugc3JhdXR1IgorCisjLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKK21zZ2lkICJwcmV2aWV3IGltYWdlIgorbXNnc3RyICJwZXLFvmnFq3JvcyBwYXZlaWtzbMSXbGlzIgorCittc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICJwZXLFvmnFq3JvcyBwYXZlaWtzbMSXbGlzLCBzdXNpasSZcyBzdSBzcmF1dHUiCisKK21zZ2lkICJhdHRhY2htZW50IgorbXNnc3RyICJwcmllZGFzIgorCittc2dpZCAiZmlsZSBhdHRhY2hlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiZmFpbGFzLCBwcmlkxJd0YXMgcHJpZSBzcmF1dG8iCisKK21zZ2lkICJiZWF0cyBwZXIgbWludXRlIgorbXNnc3RyICJ0YWt0xbMgcGVyIG1pbnV0xJkiCisKK21zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKK21zZ3N0ciAidGFrdMWzIHNrYWnEjWl1cyBwZXIgbWludXTEmSBnYXJzbyDEr3JhxaFlIgorCittc2dpZCAia2V5d29yZHMiCittc2dzdHIgInJha3Rhxb5vZMW+aWFpIgorCittc2dpZCAiY29tbWEgc2VwYXJhdGVkIGtleXdvcmRzIGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQiCittc2dzdHIgImthYmxlbGlhaXMgc2tpcmlhbWkgcmFrdGHFvm9kxb5pYWksIGFwcmHFoWFudHlzIHR1cmluxK8iCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKK21zZ3N0ciAiZ2VvZ3JhZmluxJdzIHZpZXRvcyBwYXZhZGluaW1hcyIKKworbXNnaWQgIiIKKyJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgorInByb2R1Y2VkIgorbXNnc3RyICJhacWha3VzIHZpZXRvdsSXcywga3VyaW9qZSBtZWRpamEgYnV2byDEr3JhxaF5dGEgYXJiYSBzdWt1cnRhLCBhcHJhxaF5bWFzIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGxhdGl0dWRlIgorbXNnc3RyICJnZW9ncmFmaW7El3MgdmlldG9zIHBsYXR1bWEiCisKK21zZ2lkICIiCisiZ2VvIGxhdGl0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCisiZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIGVxdWF0b3IsIG5lZ2F0aXZlIHZhbHVlcyBmb3IgIgorInNvdXRoZXJuIGxhdGl0dWRlcykiCittc2dzdHIgIiIKKyJ2aWV0b3bEl3MgcGxhdHVtYSwga3VyIG1lZGlqYSBidXZvIMSvcmHFoXl0YSBhcmJhIHN1a3VydGEsIGxhaXBzbmlhaXMgcGFnYWwgIgorIldHUzg1IChudWxpcyB0aWVzIHB1c2lhdWp1LCBuZWlnaWFtb3MgcmVpa8WhbcSXcyDigJMgcGlldGluxJdtcyBwbGF0dW1vbXMpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKK21zZ3N0ciAiZ2VvZ3JhZmluxJdzIHZpZXRvcyBpbGd1bWEiCisKK21zZ2lkICIiCisiZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCisibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgorbXNnc3RyICIiCisidmlldG92xJdzIGlsZ3VtYSwga3VyIG1lZGlqYSBidXZvIMSvcmHFoXl0YSBhcmJhIHN1a3VydGEsIGxhaXBzbmlhaXMgcGFnYWwgIgorIldHUzg0IChudWxpcyB0aWVzIHBpcm11b2p1IG1lcmlkaWFudSBHcmludmnEjWUvSkssIG5laWdpYW1vcyByZWlrxaFtxJdzIOKAkyAiCisicnl0aW7El21zIGlsZ3Vtb21zKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBlbGV2YXRpb24iCittc2dzdHIgImdlb2dyYWZpbsSXcyB2aWV0b3MgYXVrxaF0dW1hIgorCittc2dpZCAiIgorImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCisiYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKK21zZ3N0ciAiIgorImF1a8WhdHVtYSwga3VyIG1lZGlqYSBidXZvIMSvcmHFoXl0YSBhcmJhIHN1a3VydGEsIG1ldHJhaXMgcGFnYWwgV0dTODQgKG51bGlzIOKAkyAiCisidmlkdXRpbmlzIGrFq3JvcyBseWdpcykiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gY291bnRyeSIKK21zZ3N0ciAiZ2VvZ3JhZmluxJcgdmlldG9zIMWhYWxpcyIKKworbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICIiCisixaFhbGlzIChhbmdsacWha2FzIHBhdmFkaW5pbWFzKSwga3VyaW9qZSBtZWRpamEgYnV2byDEr3JhxaF5dGEgYXJiYSBzdWt1cnRhIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCittc2dzdHIgImdlb2dyYWZpbsSXcyB2aWV0b3MgbWllc3RhcyIKKworbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICIiCisibWllc3RhcyAoYW5nbGnFoWthcyBwYXZhZGluaW1hcyksIGt1cmlhbWUgbWVkaWphIGJ1dm8gxK9yYcWheXRhIGFyYmEgc3VrdXJ0YSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKK21zZ3N0ciAiZ2VvZ3JhZmluxJdzIHZpZXRvcyBzdWJsb2thY2lqYSIKKworbXNnaWQgIiIKKyJhIGxvY2F0aW9uIHdoaXRoaW4gYSBjaXR5IHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZCBvciBjcmVhdGVkIChlLmcuICIKKyJ0aGUgbmVpZ2hib3Job29kKSIKK21zZ3N0ciAiIgorInZpZXRvdmUgbWllc3RlLCBrdXJpYW1lIG1lZGlqYSBidXZvIHBhZ2FtaW50YSBhcmJhIHN1a3VydGEsIChwdnouLCAiCisia2FpbXlueXN0xJcpIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgorbXNnc3RyICJnZW9ncmFmaW7El3MgdmlldG9zIHBhdmFkaW5pbWFzIgorCittc2dpZCAiZXhwZWN0ZWQgZXJyb3Igb2YgdGhlIGhvcml6b250YWwgcG9zaXRpb25pbmcgbWVhc3VyZXMgKGluIG1ldGVycykiCittc2dzdHIgIiIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKK21zZ3N0ciAiZ2VvZ3JhZmluxJdzIHZpZXRvcyBqdWTEl2ppbW8gZ3JlaXRpcyIKKworbXNnaWQgIiIKKyJtb3ZlbWVudCBzcGVlZCBvZiB0aGUgY2FwdHVyaW5nIGRldmljZSB3aGlsZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIGluIG0vcyIKK21zZ3N0ciAixK9yYcWhYW7EjWlvIHByaWV0YWlzbyBqdWTEl2ppbW8gZ3JlaXRpcyBtL3MgxK9yYcWhaW7El2phbnQiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgorbXNnc3RyICJnZW9ncmFmaW7El3MgdmlldG9zIGp1ZMSXamltbyBrcnlwdGlzIgorCittc2dpZCAiIgorImluZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBvZiBhICIKKyJtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgMCAiCisibWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgorbXNnc3RyICIiCisibnVyb2RvIG1lZGlqxIUgxK9yYcWhYW7EjWlvIHByaWV0YWlzbyBqdWTEl2ppbW8ga3J5cHTEry4gSmkgbnVyb2RvbWEgbGFpcHNuaWFpcyAiCisic2xhbmthdXMga2FibGVsaW8gcGF2aWRhbHUsIOKAnjDigJwgcmVpxaFraWEgxaFpYXVyxJksIHJlaWvFoW3ElyBkaWTEl2phIHBhZ2FsICIKKyJsYWlrcm9kxb5pbyByb2R5a2zEmSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBjYXB0dXJlIGRpcmVjdGlvbiIKK21zZ3N0ciAiZ2VvZ3JhZmluxJdzIHZpZXRvcyDEr3JhxaF5bW8ga3J5cHRpcyIKKworbXNnaWQgIiIKKyJpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nICBhIG1lZGlhLiAiCisiSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCAgcmVwcmVzZW50YXRpb24sIDAgbWVhbnMgdGhlICIKKyJnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKK21zZ3N0ciAiIgorIm51cm9kbyBrcnlwdMSvLCBrdXJpYSBudWtyZWlwdGFzIG1lZGlqxIUgxK9yYcWhYW50aXMgxK9yZW5naW55cy4gUGF0ZWlraWFtYSAiCisibGFpcHNuaWFpcyBzbGFua2F1cyBrYWJsZWxpbyBwYXZpZGFsdSwg4oCeMOKAnCByZWnFoWtpYSBnZW9ncmFmaW7EmSDFoWlhdXLEmSwgIgorInJlaWvFoW3ElyBkaWTEl2phIHBhZ2FsIGxhaWtyb2TFvmlvIHJvZHlrbMSZIgorCisjLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKK21zZ2lkICJzaG93IG5hbWUiCittc2dzdHIgImxhaWRvcyBwYXZhZGluaW1hcyIKKworbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCittc2dzdHIgIlR2IC8gdGlua2xhbGFpZMSXcyAvIHNlcmlhbG8sIGnFoSBrdXJpbyB5cmEgbWVkaWphLCBsYWlkb3MgcGF2YWRpbmltYXMiCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQorbXNnaWQgInNob3cgc29ydG5hbWUiCittc2dzdHIgImxhaWRvcyByaWtpdW9qYW1hcyBwYXZhZGluaW1hcyIKKworbXNnaWQgIiIKKyJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiIgorIlR2IC8gdGlua2xhbGFpZMSXcyAvIHNlcmlhbG8sIGnFoSBrdXJpbyB5cmEgbWVkaWphLCBsYWlkb3MgcGF2YWRpbmltYXMgIgorInJpa2lhdmltbyByZWlrbcSXbXMiCisKK21zZ2lkICJlcGlzb2RlIG51bWJlciIKK21zZ3N0ciAiZXBpem9kbyBudW1lcmlzIgorCittc2dpZCAiVGhlIGVwaXNvZGUgbnVtYmVyIGluIHRoZSBzZWFzb24gdGhlIG1lZGlhIGlzIHBhcnQgb2YiCittc2dzdHIgIlNlem9ubywga3VyaWFtIHByaWtsYXVzbyBtZWRpamEsIGVwaXpvZG8gbnVtZXJpcyIKKworbXNnaWQgInNlYXNvbiBudW1iZXIiCittc2dzdHIgInNlem9ubyBudW1lcmlzIgorCittc2dpZCAiVGhlIHNlYXNvbiBudW1iZXIgb2YgdGhlIHNob3cgdGhlIG1lZGlhIGlzIHBhcnQgb2YiCittc2dzdHIgIkxhaWRvcyBzZXpvbm8sIGt1cmlhbSBwcmlrbGF1c28gbWVkaWphLCBudW1lcmlzIgorCittc2dpZCAibHlyaWNzIgorbXNnc3RyICLFvm9kxb5pYWkiCisKK21zZ2lkICJUaGUgbHlyaWNzIG9mIHRoZSBtZWRpYSwgY29tbW9ubHkgdXNlZCBmb3Igc29uZ3MiCittc2dzdHIgIk1lZGlqb3Mgxb5vZMW+aWFpLCBkYcW+bmlhdXNpYWkgbmF1ZG9qYW1hIGRhaW5vbXMiCisKK21zZ2lkICJjb21wb3NlciBzb3J0bmFtZSIKK21zZ3N0ciAia29tcG96aXRvcmlhdXMgcmlraXVvamFtYXMgdmFyZGFzIgorCittc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiYXNtZW5zICgtZW7FsyksIGt1cmlzICgtaWUpIHN1a8WrcsSXIMSvcmHFocSFLCB2YXJkYXMgcmlraWF2aW1vIHJlaWttxJdtcyIKKworbXNnaWQgImdyb3VwaW5nIgorbXNnc3RyICJncnVwYXZpbWFzIgorCittc2dpZCAiIgorIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKKyJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgorbXNnc3RyICIiCisiR3J1cHVvamEgc3VzaWp1c2lhcyBtZWRpamFzLCBzdXNpZGVkYW7EjWlhcyBpxaEgZGF1Z2VsaW8gdGFrZWxpxbMsIHB2ei4sICIKKyJza2lydGluZ2FzIGtvbmNlcnRvIGRhbGlzLiBUYWkgYXVrxaF0ZXNuaXMgbHlnbXVvIG5laSB0YWtlbGlzLCBiZXQgxb5lbWVzbmlzICIKKyJuZWkgYWxidW1hcyIKKworbXNnaWQgInVzZXIgcmF0aW5nIgorbXNnc3RyICJuYXVkb3Rvam8gxK92ZXJ0aW5pbWFzIgorCittc2dpZCAiIgorIlJhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgdXNlci4gVGhlIGhpZ2hlciB0aGUgcmFuaywgdGhlIG1vcmUgdGhlIHVzZXIgbGlrZXMgIgorInRoaXMgbWVkaWEiCittc2dzdHIgIiIKKyJOYXVkb3Rvam8gbnVyb2R5dGFzIMSvdmVydGluaW1hcy4gS3VvIGdlcmVzbmlzIMSvdmVydGluaW1hcywgdHVvIGxhYmlhdSAiCisibmF1ZG90b2phcyBtxJdnc3RhIMWhacSFIG1lZGlqxIUiCisKK21zZ2lkICJkZXZpY2UgbWFudWZhY3R1cmVyIgorbXNnc3RyICLEr3JlbmdpbmlvIGdhbWludG9qYXMiCisKK21zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICLErnJlbmdpbmlvLCBuYXVkb3RvIMWhaWFpIG1lZGlqYWkgc3VrdXJ0aSwgZ2FtaW50b2phcyIKKworbXNnaWQgImRldmljZSBtb2RlbCIKK21zZ3N0ciAixK9yZW5naW5pbyBtb2RlbGlzIgorCittc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICLErnJlbmdpbmlvLCBuYXVkb3RvIMWhaWFpIG1lZGlqYWkgc3VrdXJ0aSwgbW9kZWxpcyIKKworIywgZnV6enkKK21zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgorbXNnc3RyICJnZW9ncmFmaW7El3MgdmlldG9zIHBhdmFkaW5pbWFzIgorCisjLCBmdXp6eQorbXNnaWQgIkFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSIKK21zZ3N0ciAixK5yZW5naW5pbywgbmF1ZG90byDFoWlhaSBtZWRpamFpIHN1a3VydGksIG1vZGVsaXMiCisKK21zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgorbXNnc3RyICIiCisKK21zZ2lkICJBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIG1lZGlhIgorbXNnc3RyICIiCisKK21zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKK21zZ3N0ciAicGF2ZWlrc2zEl2xpbyBvcmllbnRhY2lqYSIKKworbXNnaWQgIkhvdyB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCBiZWZvcmUgZGlzcGxheSIKK21zZ3N0ciAiS2FpcCBwYXZlaWtzbMSXbGlzIHR1csSXdMWzIGLFq3RpIHBhc3VrdGFzIGFyYmEgYXB2ZXJzdGFzIHByaWXFoSBwYXJvZHltxIUiCisKK21zZ2lkICIsICIKK21zZ3N0ciAiLCAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAiS0xBSURBOiBpxaEgZWxlbWVudG8gJXM6ICVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKKyIlc1xuIgorbXNnc3RyICIiCisiUGFwaWxkb21hIGRlcmluaW1vIGluZm9ybWFjaWphOlxuIgorIiVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgorbXNnc3RyICJudXJvZHl0YXMgdHXFocSNaWFzIGTEl2tsYXMg4oCeJXPigJwsIG5lbGVpZMW+aWFtYSIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBiaW4gXCIlc1wiLCBza2lwcGluZyIKK21zZ3N0ciAibsSXcmEgZMSXa2xvIOKAniVz4oCcLCBwcmFsZWlkxb5pYW1hIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiIKK21zZ3N0ciAibmVudXJvZHl0YSBzYXZ5YsSXIOKAniVz4oCcIGVsZW1lbnRlIOKAniVz4oCcIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKK21zZ3N0ciAibmVwYXZ5a28gbnVzdGF0eXRpIHNhdnlixJdzIOKAniVz4oCcIGVsZW1lbnRlIOKAniVz4oCcIMSvIOKAniVz4oCcIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgorbXNnc3RyICJuZXBhdnlrbyBzdXNpZXRpICVzIHN1ICVzIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICJuxJdyYSBlbGVtZW50byDigJ4lc+KAnCIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCittc2dzdHIgIm5lcGF2eWtvIHBlcnNrYWl0eXRpIGdhbGlteWJpxbMg4oCeJXPigJwiCisKK21zZ2lkICJsaW5rIHdpdGhvdXQgc291cmNlIGVsZW1lbnQiCittc2dzdHIgInNhaXRhcyBiZSDFoWFsdGluaW8gZWxlbWVudG8iCisKK21zZ2lkICJsaW5rIHdpdGhvdXQgc2luayBlbGVtZW50IgorbXNnc3RyICJzYWl0YXMgYmUgacWhdmVzdGllcyBlbGVtZW50byIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAibsSXcmEgxaFhbHRpbmlvIGVsZW1lbnRvIFVSSSDigJ4lc+KAnCIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBlbGVtZW50IHRvIGxpbmsgVVJJIFwiJXNcIiB0byIKK21zZ3N0ciAibsSXcmEgZWxlbWVudG8sIHN1IGt1cml1byBzdXNpZXRpIFVSSSDigJ4lc+KAnCIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgIm7El3JhIGnFoXZlc3RpZXMgZWxlbWVudG8gVVJJIOKAniVz4oCcIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAibmVwYXZ5a28gc3VzaWV0aSBpxaF2ZXN0aWVzIGVsZW1lbnRvIFVSSSDigJ4lc+KAnCIKKworbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgorbXNnc3RyICJ0dcWhxI1pYXMga29udmVqZXJpcyBuZWxlaWTFvmlhbWFzIgorCittc2dpZCAiSW50ZXJuYWwgY2xvY2sgZXJyb3IuIgorbXNnc3RyICJWaWRpbsSXIGxhaWtyb2TFvmlvIGtsYWlkYS4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgorbXNnc3RyICJWaWRpbsSXIGR1b21lbsWzIHTEl2ttxJdzIGtsYWlkYS4iCisKK21zZ2lkICJBIGxvdCBvZiBidWZmZXJzIGFyZSBiZWluZyBkcm9wcGVkLiIKK21zZ3N0ciAiQXRsYWlzdmluYW1hIGRhdWcgYnVmZXJpxbMuIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IHByb2JsZW0uIgorbXNnc3RyICJWaWRpbsSXIGR1b21lbsWzIHTEl2ttxJdzIHByb2JsZW1hLiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiVmlkaW7ElyBkdW9tZW7FsyBzcmF1dG8ga2xhaWRhLiIKKworbXNnaWQgIkZpbHRlciBjYXBzIgorbXNnc3RyICJGaWx0cnVvdGkgZ2FsaW15YmVzIgorCittc2dpZCAiIgorIlJlc3RyaWN0IHRoZSBwb3NzaWJsZSBhbGxvd2VkIGNhcGFiaWxpdGllcyAoTlVMTCBtZWFucyBBTlkpLiBTZXR0aW5nIHRoaXMgIgorInByb3BlcnR5IHRha2VzIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBwbGllZCBHc3RDYXBzIG9iamVjdC4iCittc2dzdHIgIiIKKyJSaWJvdGkgZ2FsaW1hcyBsZWlkxb5pYW1hcyBnYWxpbXliZXMgKE5VTEwg4oCTIEJFVCBLT0tJQVMpLiBOdXN0YXRhbnQgxaFpxIUgIgorInNhdnlixJkgbnVyb2RvbWEgxK8gcGF0ZWlrdMSFIEdzdENhcHMgb2JqZWt0xIUuIgorCittc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3Igd3JpdGluZy4iCittc2dzdHIgIk5lbnVyb2R5dGFzIGZhaWxvIHBhdmFkaW5pbWFzIHJhxaF5bXVpLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCittc2dzdHIgIk5lcGF2eWtvIGF0dmVydGkgZmFpbG8g4oCeJXPigJwgcmHFoXltdWkuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNsb3NpbmcgZmlsZSBcIiVzXCIuIgorbXNnc3RyICJLbGFpZGEgdcW+dmVyaWFudCBmYWlsxIUg4oCeJXPigJwuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIgorbXNnc3RyICJLbGFpZGEgaWXFoWthbnQgZmFpbGUg4oCeJXPigJwuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgorbXNnc3RyICJLbGFpZGEgcmHFoWFudCDEryBmYWlsxIUg4oCeJXPigJwuIgorCittc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCittc2dzdHIgIk5lbnVyb2R5dGFzIGZhaWxvIHBhdmFkaW5pbWFzIHNrYWl0eW11aS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgorbXNnc3RyICJOZXBhdnlrbyBhdHZlcnRpIGZhaWxvIOKAniVz4oCcIHNrYWl0eW11aS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCittc2dzdHIgIk5lcGF2eWtvIGdhdXRpIGR1b21lbsWzIGFwaWUg4oCeJXPigJwuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIlwiJXNcIiBpcyBhIGRpcmVjdG9yeS4iCittc2dzdHIgIuKAniVz4oCcIHlyYSBrYXRhbG9nYXMuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKK21zZ3N0ciAiRmFpbGFzIOKAniVz4oCcIHlyYSBsaXpkYXMuIgorCittc2dpZCAiRmFpbGVkIGFmdGVyIGl0ZXJhdGlvbnMgYXMgcmVxdWVzdGVkLiIKK21zZ3N0ciAiTmVzxJdrbcSXIHBvIGl0ZXJhY2lqxbMga2FpcCBpciByZWlrYWxhdXRhLiIKKworbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCittc2dzdHIgIk5lbnVyb2R5dGFzIGxhaWtpbmFzIGthdGFsb2dhcy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiTmVwYXZ5a28gc3VrdXJ0aSBsYWlraW5vIGZhaWxvIOKAniVz4oCcLiIKKworbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZG93bmxvYWQgZmlsZS4iCittc2dzdHIgIktsYWlkYSByYcWhYW50IMSvIGF0c2l1bnRpbW8gZmFpbMSFLiIKKworbXNnaWQgImNhcHMiCittc2dzdHIgImdhbGlteWLEl3MiCisKK21zZ2lkICJkZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtIgorbXNnc3RyICJhcHRpa3RvcyBnYWxpbXlixJdzIHNyYXV0ZSIKKworbXNnaWQgIm1pbmltdW0iCittc2dzdHIgIm1hxb5pYXVzaW9zIgorCittc2dpZCAibWF4aW11bSIKK21zZ3N0ciAiZGlkxb5pYXVzaW9zIgorCittc2dpZCAiZm9yY2UgY2FwcyIKK21zZ3N0ciAicmVpa2FsYXV0aSBnYWxpbXliacWzIgorCittc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCittc2dzdHIgInByaXZlcnN0aW5haSBuYXVkb3RpIGdhbGlteWJlcyBuZWF0bGlla2FudCB0aXBvIHBhaWXFoWtvcyIKKworbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKK21zZ3N0ciAiU3JhdXRlIG7El3JhIGR1b21lbsWzLiIKKworbXNnaWQgIkltcGxlbWVudGVkIEludGVyZmFjZXM6XG4iCittc2dzdHIgIlJlYWxpenVvdG9zIHPEhXNham9zOlxuIgorCittc2dpZCAicmVhZGFibGUiCittc2dzdHIgInNrYWl0b21hcyIKKworbXNnaWQgIndyaXRhYmxlIgorbXNnc3RyICJyYcWhb21hcyIKKworbXNnaWQgImNvbnRyb2xsYWJsZSIKK21zZ3N0ciAidmFsZG9tYXMiCisKK21zZ2lkICJjaGFuZ2VhYmxlIGluIE5VTEwsIFJFQURZLCBQQVVTRUQgb3IgUExBWUlORyBzdGF0ZSIKK21zZ3N0ciAiIgorCittc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwsIFJFQURZIG9yIFBBVVNFRCBzdGF0ZSIKK21zZ3N0ciAiIgorCittc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwgb3IgUkVBRFkgc3RhdGUiCittc2dzdHIgIiIKKworbXNnaWQgIkJsYWNrbGlzdGVkIGZpbGVzOiIKK21zZ3N0ciAiRmFpbGFpIGp1b2RhamFtZSBzxIVyYcWhZToiCisKK21zZ2lkICJUb3RhbCBjb3VudDogIgorbXNnc3RyICJCZW5kcmFzIHNrYWnEjWl1czoiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxhY2tsaXN0ZWQgZmlsZSIKK21zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHJbMF0gIiVkIGZhaWxhcyBqdW9kYWphbWUgc8SFcmHFoWUiCittc2dzdHJbMV0gIiVkIGZhaWxhaSBqdW9kYWphbWUgc8SFcmHFoWUiCittc2dzdHJbMl0gIiVkIGZhaWzFsyBqdW9kYWphbWUgc8SFcmHFoWUiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgcGx1Z2luIgorbXNnaWRfcGx1cmFsICIlZCBwbHVnaW5zIgorbXNnc3RyWzBdICIlZCDEr3NraWVwaXMiCittc2dzdHJbMV0gIiVkIMSvc2tpZXBpYWkiCittc2dzdHJbMl0gIiVkIMSvc2tpZXBpxbMiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgorbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKK21zZ3N0clswXSAiJWQganVvZG9qbyBzxIVyYcWhbyDEr3JhxaFhcyIKK21zZ3N0clsxXSAiJWQganVvZG9qbyBzxIVyYcWhbyDEr3JhxaFhaSIKK21zZ3N0clsyXSAiJWQganVvZG9qbyBzxIVyYcWhbyDEr3JhxaHFsyIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBmZWF0dXJlIgorbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKK21zZ3N0clswXSAiJWQgZnVua2NpamEiCittc2dzdHJbMV0gIiVkIGZ1bmtjaWpvcyIKK21zZ3N0clsyXSAiJWQgZnVua2NpasWzIgorCittc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgorbXNnc3RyICJJxaF2ZXN0aSB2aXN1cyBlbGVtZW50dXMiCisKK21zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgorbXNnc3RyICJJxaF2ZXN0aSBmYWlsdXMganVvZGFqYW1lIHPEhXJhxaFlIgorCittc2dpZCAiIgorIlByaW50IGEgbWFjaGluZS1wYXJzYWJsZSBsaXN0IG9mIGZlYXR1cmVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIG9yIGFsbCAiCisicGx1Z2lucyBwcm92aWRlLlxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBpbiBjb25uZWN0aW9uIHdpdGggZXh0ZXJuYWwgIgorImF1dG9tYXRpYyBwbHVnaW4gaW5zdGFsbGF0aW9uIG1lY2hhbmlzbXMiCittc2dzdHIgIiIKKyJJxaFzcGF1c2RpbnRpIG1hxaFpbmluaXUgYsWrZHUgcGVyc2thaXRvbcSFIHPEhXJhxaHEhSBmdW5rY2lqxbMsIGt1cmlhcyBzdXRlaWtpYSAiCisibnVyb2R5dGFzaXMgYXJiYSB2aXNpIMSvc2tpZXBpYWkuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmF1ZGluZ2EgbmF1ZG9qYW50IHN1IGnFoW9yaW5pYWlzICIKKyJhdXRvbWF0aW5pYWlzIMSvc2tpZXBpxbMgZGllZ2ltbyBtZWNoYW5pem1haXMiCisKK21zZ2lkICJMaXN0IHRoZSBwbHVnaW4gY29udGVudHMiCittc2dzdHIgIlBhcm9keXRpIMSvc2tpZXBpbyB0dXJpbsSvIgorCittc2dpZCAiUHJpbnQgc3VwcG9ydGVkIFVSSSBzY2hlbWVzLCB3aXRoIHRoZSBlbGVtZW50cyB0aGF0IGltcGxlbWVudCB0aGVtIgorbXNnc3RyICJJxaF2ZXN0aSBwYWxhaWtvbWFzIFVSSSBzY2hlbWFzIHN1IGphcyBzdWt1cmlhbsSNaWFpcyBlbGVtZW50YWlzIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgorbXNnc3RyICJOZXBhdnlrbyDEr2tlbHRpIMSvc2tpZXBpbyBmYWlsbzogJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIGVsZW1lbnQgb3IgcGx1Z2luICclcydcbiIKK21zZ3N0ciAiTsSXcmEgdG9raW8gZWxlbWVudG8gYXJiYSDEr3NraWVwaW8g4oCeJXPigJxcbiIKKworbXNnaWQgIkluZGV4IHN0YXRpc3RpY3MiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBlbGVtZW50IFwiJXNcIiAoJXMpOiAiCittc2dzdHIgIkdhdXRhcyBwcmFuZcWhaW1hcyAjJXUgacWhIGVsZW1lbnRvIOKAniVz4oCcICglcyk6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKK21zZ3N0ciAiR2F1dGFzIHByYW5lxaFpbWFzICMldSBpxaEgcGFncmluZG8g4oCeJXM6JXPigJwgKCVzKTogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICJHYXV0YXMgcHJhbmXFoWltYXMgIyV1IGnFoSBvYmpla3RvIOKAniVz4oCcICglcyk6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgKCVzKTogIgorbXNnc3RyICJHYXV0YXMgcHJhbmXFoWltYXMgIyV1ICglcyk6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgRU9TIGZyb20gZWxlbWVudCBcIiVzXCIuXG4iCittc2dzdHIgIkdhdXRhcyBFT1MgacWhIGVsZW1lbnRvIOKAniVz4oCcLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCittc2dzdHIgIlJBU1RBIMW9WU1BICAgICAgOiByYXN0YSBlbGVtZW50byDigJ4lc+KAnC5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCittc2dzdHIgIlJBU1RBIMW9WU1BICAgICAgOiByYXN0YSBwYWdyaW5kbyDigJ4lczolc+KAnC5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCittc2dzdHIgIlJBU1RBIMW9WU1BICAgICAgOiByYXN0YSBvYmpla3RvIOKAniVz4oCcLlxuIgorCittc2dpZCAiRk9VTkQgVEFHXG4iCittc2dzdHIgIlJBU1RBIMW9WU1BXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklORk86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorIklORk9STUFDSUpBOlxuIgorIiVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgorbXNnc3RyICLErlNQxJZKSU1BUzogacWhIGVsZW1lbnRvICVzOiAlc1xuIgorCittc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLi4uXG4iCittc2dzdHIgIlBhcnVvxaF0YSwgbGF1a2lhbWEga29sIGJ1cyBzdWt1cnRhcyBidWZlcmlzLi4uXG4iCisKK21zZ2lkICJidWZmZXJpbmcuLi4iCittc2dzdHIgImt1cmlhbWFzIGJ1ZmVyaXMuLi4iCisKK21zZ2lkICJEb25lIGJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgorbXNnc3RyICJCdWZlcmlzIHN1a3VydGFzLCBrb252ZWplcmlzIG51c3RhdG9tYXMgR1JPSklNVUkuLi5cbiIKKworbXNnaWQgIkJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCittc2dzdHIgIkt1cmlhbWFzIGJ1ZmVyaXMsIGtvbnZlamVyaXMgbnVzdGF0b21hcyDEryBQUklTVEFCRFlUxIQuLi5cbiIKKworbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCittc2dzdHIgIlBlcnNraXJzdHl0aSBnYWnFoXRpZXMgbGFpa8SFLi4uXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBzdGF0ZSB0byAlcyBhcyByZXF1ZXN0ZWQgYnkgJXMuLi5cbiIKK21zZ3N0ciAiTnVzdGF0b21hIGLFq3NlbmEgxK8gJXMsIGthaXAgcHJhxaHElyAlcy4uLlxuIgorCittc2dpZCAiSW50ZXJydXB0OiBTdG9wcGluZyBwaXBlbGluZSAuLi5cbiIKK21zZ3N0ciAiUGVydHJhdWtpbWFzOiBzdGFiZG9tYXMga29udmVqZXJpcy4uLlxuIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nIGVsZW1lbnQ6ICVzXG4iCittc2dzdHIgIm7El3JhIGVsZW1lbnRvIOKAniVz4oCcIgorCittc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgorbXNnc3RyICJJxaF2ZXN0aSDFvnltYXMgKGRhciDFvmlub21hcyBrYWlwIG1ldGFkdW9tZW55cykiCisKK21zZ2lkICJPdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBwcm9wZXJ0eSBub3RpZmljYXRpb25zIgorbXNnc3RyICJJxaF2ZXN0aSBixatzZW5vcyBpbmZvcm1hY2lqxIUgaXIgc2F2eWJpxbMgcHJhbmXFoWltdXMiCisKK21zZ2lkICJEbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uIgorbXNnc3RyICJOZWnFoXZlc3RpIGpva2lvcyBpbmZvcm1hY2lqb3MgYXBpZSBwYcW+YW5nxIUiCisKK21zZ2lkICJPdXRwdXQgbWVzc2FnZXMiCittc2dzdHIgIknFoXZlc3RpIHByYW5lxaFpbXVzIgorCittc2dpZCAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKK21zZ3N0ciAiTmVpxaF2ZXN0aSDFoWlvIFRJUE8gYsWrc2Vub3MgaW5mb3JtYWNpam9zIgorCittc2dpZCAiVFlQRTEsVFlQRTIsLi4uIgorbXNnc3RyICJUSVBBUzEsVElQQVMyLC4uLiIKKworbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKK21zZ3N0ciAiTmXEr2RpZWd0aSBrbGFpZMWzIGFwZG9yb2ppbW8gcG9zaXN0ZW3El3MiCisKK21zZ2lkICJQcmludCBhbGxvYyB0cmFjZSAoaWYgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUpIgorbXNnc3RyICJJxaF2ZXN0aSBhbGxvYyBzZWtpbcSFIChqZWkgxK9qdW5ndGEga29tcGlsaWF2aW1vIG1ldHUpIgorCittc2dpZCAiRm9yY2UgRU9TIG9uIHNvdXJjZXMgYmVmb3JlIHNodXR0aW5nIHRoZSBwaXBlbGluZSBkb3duIgorbXNnc3RyICJQcml2ZXJzdGluYWkgbmF1ZG90aSBFT1MgxaFhbHRpbml1b3NlIHByaWUgacWhanVuZ2lhbnQga29udmVqZXLEryIKKworbXNnaWQgIkdhdGhlciBhbmQgcHJpbnQgaW5kZXggc3RhdGlzdGljcyIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQ6ICVzLlxuIgorbXNnc3RyICJLTEFJREE6IG5lcGF2eWtvIHN1a3VydGkga29udmVqZXJpbzogJXMuXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlxuIgorbXNnc3RyICJLTEFJREE6IG5lcGF2eWtvIHN1a3VydGkga29udmVqZXJpby5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCittc2dzdHIgIsSuU1DElkpJTUFTOiBrbGFpZGluZ2FzIGtvbnZlamVyaXM6ICVzXG4iCisKK21zZ2lkICJFUlJPUjogdGhlICdwaXBlbGluZScgZWxlbWVudCB3YXNuJ3QgZm91bmQuXG4iCittc2dzdHIgIktMQUlEQTog4oCecGlwZWxpbmXigJwgZWxlbWVudGFzIG5lcmFzdGFzLlxuIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCittc2dzdHIgIk51c3RhdG9tYXMga29udmVqZXJpcyDEryBQUklTVEFCRFlUxIQuLi5cbiIKKworbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCittc2dzdHIgIktMQUlEQToga29udmVqZXJpcyBuZXNpbGVpZMW+aWEgcHJpc3RhYmRvbWFzLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgorbXNnc3RyICJLb252ZWplcmlzIGFrdHl2dXMgaXIgbmVyZWlrYWxhdWphIFBBUlVPxaBJTU8uLi5cbiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCittc2dzdHIgIktvbnZlamVyaXMgUlVPxaBJQU1BUy4uLlxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgorbXNnc3RyICJLTEFJREE6IGtvbnZlamVyaXMgbmVzaWxlaWTFvmlhIHBhcnVvxaFpYW1hcy5cbiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExFRCAuLi5cbiIKK21zZ3N0ciAiS29udmVqZXJpcyBQQVJVT8WgVEFTLi4uXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIk51c3RhdG9tYXMga29udmVqZXJpcyDEryBHUk9KQU1BLi4uXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBsYXkuXG4iCittc2dzdHIgIktMQUlEQToga29udmVqZXJpcyBuZXByYWRlZGEgZ3JvdGkuXG4iCisKK21zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKK21zZ3N0ciAixK5qdW5ndGFzIEVPUyBpxaFqdW5naWFudCDigJMgcHJpdmVyc3RpbmFpIG5hdWRvamFtYSBFT1Mga29udmVqZXJ5amVcbiIKKworbXNnaWQgIldhaXRpbmcgZm9yIEVPUy4uLlxuIgorbXNnc3RyICJMYXVraWFtYSBFT1MuLi5cbiIKKworbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCittc2dzdHIgIkVPUyBnYXV0YXMg4oCTIHN0YWJkb21hcyBrb252ZWplcmlzLi4uXG4iCisKK21zZ2lkICJBbiBlcnJvciBoYXBwZW5lZCB3aGlsZSB3YWl0aW5nIGZvciBFT1NcbiIKK21zZ3N0ciAixK52eWtvIGtsYWlkYSBsYXVraWFudCBFT1NcbiIKKworbXNnaWQgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgorbXNnc3RyICJWeWtkeW1hcyBiYWlnxJdzaSBwbyAlIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKK21zZ3N0ciAiTnVzdGF0b21hcyBrb252ZWplcmlzIMSvIFBBUlVPxaBUQS4uLlxuIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgorbXNnc3RyICJOdXN0YXRvbWFzIGtvbnZlamVyaXMgxK8gTlVMTC4uLlxuIgorCittc2dpZCAiRnJlZWluZyBwaXBlbGluZSAuLi5cbiIKK21zZ3N0ciAiQXRsYWlzdmluYW1hcyBrb252ZWplcmlzLi4uXG4iCisKKyN+IG1zZ2lkICJVc2FnZTogZ3N0LXhtbGxhdW5jaCA8ZmlsZS54bWw+IFsgZWxlbWVudC5wcm9wZXJ0eT12YWx1ZSAuLi4gXVxuIgorI34gbXNnc3RyICIiCisjfiAiTmF1ZG9qaW1hczogZ3N0LXhtbGxhdW5jaCA8ZmFpbGFzLnhtbD4gWyBlbGVtZW50YXMuc2F2eWLElz1yZWlrxaFtxJcgLi4uIF1cbiIKKworI34gbXNnaWQgIkVSUk9SOiBwYXJzZSBvZiB4bWwgZmlsZSAnJXMnIGZhaWxlZC5cbiIKKyN+IG1zZ3N0ciAiS0xBSURBOiBuZXBhdnlrbyBwZXJza2FpdHl0aSB4bWwgZmFpbG8g4oCeJXPigJwuXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogbm8gdG9wbGV2ZWwgcGlwZWxpbmUgZWxlbWVudCBpbiBmaWxlICclcycuXG4iCisjfiBtc2dzdHIgIktMQUlEQTogbsSXcmEgYXVrxaHEjWlhdXNpbyBseWdtZW5zIGtvbnZlamVyaW8gZWxlbWVudG8gZmFpbGUg4oCeJXPigJwuXG4iCisKKyN+IG1zZ2lkICJXQVJOSU5HOiBvbmx5IG9uZSB0b3BsZXZlbCBlbGVtZW50IGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICLErlNQxJZKSU1BUzogxaFpdW8gbWV0dSBwYWxhaWtvbWFzIHRpayB2aWVuYXMgYXVrxaHEjWlhdXNpbyBseWdtZW5zICIKKyN+ICJlbGVtZW50YXMuXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogY291bGQgbm90IHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAlZDogJXMuXG4iCisjfiBtc2dzdHIgIktMQUlEQTogbmVwYXZ5a28gYXBkb3JvdGkga29tYW5kaW7El3MgZWlsdXTEl3MgYXJndW1lbnRvICVkOiAlcy5cbiIKKworI34gbXNnaWQgIldBUk5JTkc6IGVsZW1lbnQgbmFtZWQgJyVzJyBub3QgZm91bmQuXG4iCisjfiBtc2dzdHIgIsSuU1DElkpJTUFTOiBuZXJhc3RhcyBlbGVtZW50YXMg4oCeJXPigJwuXG4iCisKKyN+IG1zZ2lkICJTYXZlIHhtbCByZXByZXNlbnRhdGlvbiBvZiBwaXBlbGluZSB0byBGSUxFIGFuZCBleGl0IgorI34gbXNnc3RyICLErnJhxaF5dGkga29udmVqZXJpbyB4bWwgYXRpdGlrbWVuxK8gxK8gRkFJTMSEIGlyIGnFoWVpdGkiCisKKyN+IG1zZ2lkICJGSUxFIgorI34gbXNnc3RyICJGQUlMQVMiCisKKyN+IG1zZ2lkICJEbyBub3QgaW5zdGFsbCBzaWduYWwgaGFuZGxlcnMgZm9yIFNJR1VTUjEgYW5kIFNJR1VTUjIiCisjfiBtc2dzdHIgIiIKKyN+ICJOZcSvZGllZ3RpIHNpZ25hbMWzIGFwZG9yb2ppbW8gcG9zaXN0ZW3El3Mgc2lnbmFsYW1zIFNJR1VTUjEgaXIgU0lHVVNSMiIKZGlmZiAtLWdpdCBhL3BvL25iLmdtbyBiL3BvL25iLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDgwZjMyCi0tLSAvZGV2L251bGwKKysrIGIvcG8vbmIuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL25iLnBvIGIvcG8vbmIucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU5MWZmNgotLS0gL2Rldi9udWxsCisrKyBiL3BvL25iLnBvCkBAIC0wLDAgKzEsMTE2NSBAQAorIyBOb3J3ZWdpYW4gYm9rbWFhbCB0cmFuc2xhdGlvbiBvZiBnc3RyZWFtZXIuCisjIFRoaXMgZmlsZSBpcyBwdXQgaW4gdGhlIHB1YmxpYyBkb21haW4uCisjIEtqYXJ0YW4gTWFyYWFzIDxrbWFyYWFzQGdub21lLm9yZz4sIDIwMDQtMjAxMC4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdzdHJlYW1lciAwLjEwLjMwLjNcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wOS0yOSAxNDo1NSswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0xMC0yNCAyMTozNiswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBLamFydGFuIE1hcmFhcyA8a21hcmFhc0Bnbm9tZS5vcmc+XG4iCisiTGFuZ3VhZ2UtVGVhbTogTm9yd2VnaWFuIEJva21hYWwgPGkxOG4tbmJAbGlzdGVyLnBpbmcudWlvLm5vPlxuIgorIkxhbmd1YWdlOiBcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKworbXNnaWQgIlByaW50IHRoZSBHU3RyZWFtZXIgdmVyc2lvbiIKK21zZ3N0ciAiU2tyaXYgdXQgdmVyc2pvbnNudW1tZXIgZm9yIEdTdHJlYW1lciIKKworbXNnaWQgIk1ha2UgYWxsIHdhcm5pbmdzIGZhdGFsIgorbXNnc3RyICJMYSBhbGxlIGFkdmFyc2xlciB2w6ZyZSBmYXRhbGUiCisKK21zZ2lkICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKK21zZ3N0ciAiU2tyaXYgdXQgdGlsZ2plbmdlbGlnZSBmZWlsc8O4a2luZ3NrYXRlZ29yaWVyIG9nIGF2c2x1dHQiCisKK21zZ2lkICIiCisiRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmcm9tIDEgKG9ubHkgZXJyb3IpIHRvIDUgKGFueXRoaW5nKSBvciAwIGZvciBubyBvdXRwdXQiCittc2dzdHIgIiIKKworbXNnaWQgIkxFVkVMIgorbXNnc3RyICJOSVbDhSIKKworbXNnaWQgIiIKKyJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yICIKKyJ0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCittc2dzdHIgIiIKKworbXNnaWQgIkxJU1QiCittc2dzdHIgIkxJU1RFIgorCittc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCittc2dzdHIgIkRlYWt0aXZlciBmYXJnZXQgZmVpbHPDuGtpbmdzaW5mb3JtYXNqb24iCisKK21zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKK21zZ3N0ciAiU2zDpSBhdiBmZWlsc8O4a2luZyIKKworbXNnaWQgIkVuYWJsZSB2ZXJib3NlIHBsdWdpbiBsb2FkaW5nIGRpYWdub3N0aWNzIgorbXNnc3RyICIiCisKK21zZ2lkICJDb2xvbi1zZXBhcmF0ZWQgcGF0aHMgY29udGFpbmluZyBwbHVnaW5zIgorbXNnc3RyICIiCisKK21zZ2lkICJQQVRIUyIKK21zZ3N0ciAiU1RJRVIiCisKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCisiZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgorbXNnc3RyICIiCisKK21zZ2lkICJQTFVHSU5TIgorbXNnc3RyICJUSUxMRUdHIgorCittc2dpZCAiRGlzYWJsZSB0cmFwcGluZyBvZiBzZWdtZW50YXRpb24gZmF1bHRzIGR1cmluZyBwbHVnaW4gbG9hZGluZyIKK21zZ3N0ciAiIgorCittc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIiIKKworbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIiIKKworbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgorbXNnc3RyICJHU3RyZWFtZXItZmxhZ2ciCisKK21zZ2lkICJTaG93IEdTdHJlYW1lciBPcHRpb25zIgorbXNnc3RyICJWaXMgZmxhZ2cgZm9yIEdTdHJlYW1lciIKKworbXNnaWQgIlVua25vd24gb3B0aW9uIgorbXNnc3RyICJVa2plbnQgZmxhZ2ciCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIGNvcmUgbGlicmFyeSBlcnJvci4iCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgorInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHBhZCBwcm9ibGVtLiIKK21zZ3N0ciAiIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iCittc2dzdHIgIiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCittc2dzdHIgIiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogZXZlbnQgcHJvYmxlbS4iCittc2dzdHIgIiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2VlayBwcm9ibGVtLiIKK21zZ3N0ciAiIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKK21zZ3N0ciAiIgorCittc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKK21zZ3N0ciAiIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGhhcyBiZWVuICIKKyJkaXNhYmxlZC4iCittc2dzdHIgIiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3VwcG9ydGluZyBsaWJyYXJ5IGVycm9yLiIKK21zZ3N0ciAiIgorCittc2dpZCAiQ291bGQgbm90IGluaXRpYWxpemUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiS3VubmUgaWtrZSBpbml0aWVyZSBzdMO4dHRlYmlibGlvdGVrLiIKKworbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJLdW5uZSBpa2tlIGx1a2tlIHN0w7h0dGViaWJsaW90ZWsuIgorCittc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJLdW5uZSBpa2tlIGtvbmZpZ3VyZXJlIHN0w7h0dGViaWJsaW90ZWsuIgorCittc2dpZCAiRW5jb2RpbmcgZXJyb3IuIgorbXNnc3RyICJGZWlsIGkga29kaW5nLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgorbXNnc3RyICIiCisKK21zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgorbXNnc3RyICJSZXNzdXJzZW4gYmxlIGlra2UgZnVubmV0LiIKKworbXNnaWQgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCittc2dzdHIgIlJlc3N1cnNlbiBlciBvcHB0YXR0IGVsbGVyIGlra2UgdGlsZ2plbmdlbGlnLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiS3VubmUgaWtrZSDDpXBuZSByZXNzdXJzIGZvciBsZXNpbmcuIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJLdW5uZSBpa2tlIMOlcG5lIHJlc3N1cnMgZm9yIHNrcml2aW5nLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKK21zZ3N0ciAiS3VubmUgaWtrZSDDpXBuZSByZXNzdXJzIGZvciBsZXNpbmcgb2cgc2tyaXZpbmcuIgorCittc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKK21zZ3N0ciAiS3VubmUgaWtrZSBsdWtlIHJlc3N1cnMuIgorCittc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCittc2dzdHIgIkt1bm5lIGlra2UgbGVzZSBmcmEgcmVzc3Vycy4iCisKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gcmVzb3VyY2UuIgorbXNnc3RyICJLdW5uZSBpa2tlIHNrcml2ZSB0aWwgcmVzc3Vycy4iCisKK21zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKK21zZ3N0ciAiS3VubmUgaWtrZSBzw7hrZSBpIHJlc3N1cnMuIgorCittc2dpZCAiQ291bGQgbm90IHN5bmNocm9uaXplIG9uIHJlc291cmNlLiIKK21zZ3N0ciAiS3VubmUgaWtrZSBzeW5rcm9uaXNlcmUgcMOlIHJlc3N1cnMuIgorCittc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCittc2dzdHIgIkt1bm5lIGlra2UgaGVudGUvc2V0dGUgaW5uc3RpbGxpbmdlciBmcmEvcMOlIHJlc3N1cnMuIgorCittc2dpZCAiTm8gc3BhY2UgbGVmdCBvbiB0aGUgcmVzb3VyY2UuIgorbXNnc3RyICJJbmdlbiBwbGFzcyBpZ2plbiBww6UgcmVzc3Vyc2VuLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiIgorCittc2dpZCAiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBoYW5kbGluZyBvZiB0aGlzIHN0cmVhbS4gUGxlYXNlIGZpbGUgYSBidWcuIgorbXNnc3RyICIiCisKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIHR5cGUgb2Ygc3RyZWFtLiIKK21zZ3N0ciAiS3VubmUgaWtrZSBiZXN0ZW1tZSB0eXBlIHN0csO4bS4iCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgZWxlbWVudC4iCittc2dzdHIgIiIKKworbXNnaWQgIlRoZXJlIGlzIG5vIGNvZGVjIHByZXNlbnQgdGhhdCBjYW4gaGFuZGxlIHRoZSBzdHJlYW0ncyB0eXBlLiIKK21zZ3N0ciAiIgorCittc2dpZCAiQ291bGQgbm90IGRlY29kZSBzdHJlYW0uIgorbXNnc3RyICJLdW5uZSBpa2tlIGRla29kZSBzdHLDuG0uIgorCittc2dpZCAiQ291bGQgbm90IGVuY29kZSBzdHJlYW0uIgorbXNnc3RyICJLdW5uZSBpa2tlIGtvZGUgc3Ryw7htLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZW11bHRpcGxleCBzdHJlYW0uIgorbXNnc3RyICJLdW5uZSBpa2tlIGJyeXRlIG9wcCBzdHLDuG0uIgorCittc2dpZCAiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIgorbXNnc3RyICJLdW5uZSBpa2tlIHNldHRlIHNhbW1lbiBzdHLDuG0uIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiIKK21zZ3N0ciAiU3Ryw7htbWVuIGVyIGkgZmVpbCBmb3JtYXQuIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iCittc2dzdHIgIlN0csO4bW1lbiBlciBrcnlwdGVydCBvZyBkZWtyeXB0ZXJpbmcgZXIgaWtrZSBzdMO4dHRldC4iCisKK21zZ2lkICIiCisiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGNhbid0IGJlIGRlY3J5cHRlZCBiZWNhdXNlIG5vIHN1aXRhYmxlIGtleSBoYXMgIgorImJlZW4gc3VwcGxpZWQuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzLiIKK21zZ3N0ciAiSW5nZW4gZmVpbG1lbGRpbmcgZm9yIGRvbWVuZSAlcy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKK21zZ3N0ciAiSW5nZW4gc3RhbmRhcmQgZmVpbG1lbGRpbmcgZm9yIGRvbWVuZSAlcyBvZyBrb2RlICVkLiIKKworbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKK21zZ3N0ciAiVmFsZ3Qga2xva2tlIGthbiBpa2tlIGJydWtlcyBpIHLDuHJldC4iCisKK21zZ2lkICJ0aXRsZSIKK21zZ3N0ciAidGl0dGVsIgorCittc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKK21zZ3N0ciAib2Z0ZSBicnVrdCB0aXR0ZWwiCisKK21zZ2lkICJ0aXRsZSBzb3J0bmFtZSIKK21zZ3N0ciAiIgorCittc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAib2Z0ZSBicnVrdCB0aXR0ZWwgZm9yIHNvcnRlcmluZ3Nmb3Jtw6VsIgorCittc2dpZCAiYXJ0aXN0IgorbXNnc3RyICJhcnRpc3QiCisKK21zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmciCittc2dzdHIgInBlcnNvbihlcikgc29tIGVyIGFuc3ZhcmxpZ2UgZm9yIG9wcHRha2V0IgorCittc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgorbXNnc3RyICJzb3J0ZXJpbmdzbmF2biBmb3IgYXJ0aXN0IgorCittc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJwZXJzb24oZXIpIHNvbSBlciBhbnN2YXJsaWdlIGZvciBvcHB0YWtldCAtIHRpbCBzb3J0ZXJpbmciCisKK21zZ2lkICJhbGJ1bSIKK21zZ3N0ciAiYWxidW0iCisKK21zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSIKK21zZ3N0ciAiYWxidW0gc29tIGlubmVob2xkZXIgZGlzc2UgZGF0YWVuZSIKKworbXNnaWQgImFsYnVtIHNvcnRuYW1lIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgImFsYnVtIHNvbSBpbm5laG9sZGVyIGRpc3NlIGRhdGFlbmUiCisKK21zZ2lkICJhbGJ1bSBhcnRpc3QiCittc2dzdHIgImFsYnVtYXJ0aXN0IgorCittc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgorbXNnc3RyICIiCisKK21zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgIiIKKworbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCIKK21zZ3N0ciAiIgorCittc2dpZCAiZGF0ZSIKK21zZ3N0ciAiZGF0byIKKworbXNnaWQgImRhdGUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR0RhdGUgc3RydWN0dXJlKSIKK21zZ3N0ciAiZGF0byBmb3Igb3BwcmV0dGluZyBhdiBkYXRhZW5lIChzb20gZW4gR0RhdGUtc3RydWt0dXIpIgorCittc2dpZCAiZGF0ZXRpbWUiCittc2dzdHIgImRhdG90aWQiCisKKyMsIGZ1enp5Cittc2dpZCAiZGF0ZSBhbmQgdGltZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHc3REYXRlVGltZSBzdHJ1Y3R1cmUpIgorbXNnc3RyICIiCisiZGF0byBmb3Igb3BwcmV0dGluZyBhdiBkYXRhZW5lIChrYWxlbmRlcmRhZ2VyIGkgZGVuIEp1bGlhbnNrZSBrYWxlbmRlcmVuKSIKKworbXNnaWQgImdlbnJlIgorbXNnc3RyICJzamFuZ2VyIgorCittc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCittc2dzdHIgInNqYW5nZXIgZGlzc2UgZGF0YWVuZSB0aWxow7hyZXIiCisKK21zZ2lkICJjb21tZW50IgorbXNnc3RyICJrb21tZW50YXIiCisKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKK21zZ3N0ciAiZnJpdGVrc3Rrb21tZW50YXIgc29tIGJlc2tyaXZlciBkYXRhZW5lIgorCittc2dpZCAiZXh0ZW5kZWQgY29tbWVudCIKK21zZ3N0ciAidXR2aWRldCBrb21tZW50YXIiCisKKyMsIGZ1enp5Cittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgorbXNnc3RyICJmcml0ZWtzdGtvbW1lbnRhciBzb20gYmVza3JpdmVyIGRhdGFlbmUiCisKK21zZ2lkICJ0cmFjayBudW1iZXIiCittc2dzdHIgInNwb3JudW1tZXIiCisKK21zZ2lkICJ0cmFjayBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKK21zZ3N0ciAic3Bvcm51bW1lciBpIGVuIHNhbWxpbmciCisKK21zZ2lkICJ0cmFjayBjb3VudCIKK21zZ3N0ciAiYW50YWxsIHNwb3IiCisKK21zZ2lkICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgorbXNnc3RyICIiCisKK21zZ2lkICJkaXNjIG51bWJlciIKK21zZ3N0ciAicGxhdGVudW1tZXIiCisKK21zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICJkaXNjIGNvdW50IgorbXNnc3RyICIiCisKK21zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKK21zZ3N0ciAiIgorCittc2dpZCAibG9jYXRpb24iCittc2dzdHIgInBsYXNzZXJpbmciCisKK21zZ2lkICIiCisiT3JpZ2luIG9mIG1lZGlhIGFzIGEgVVJJIChsb2NhdGlvbiwgd2hlcmUgdGhlIG9yaWdpbmFsIG9mIHRoZSBmaWxlIG9yIHN0cmVhbSAiCisiaXMgaG9zdGVkKSIKK21zZ3N0ciAiIgorCittc2dpZCAiaG9tZXBhZ2UiCittc2dzdHIgImhqZW1tZXNpZGUiCisKK21zZ2lkICJIb21lcGFnZSBmb3IgdGhpcyBtZWRpYSAoaS5lLiBhcnRpc3Qgb3IgbW92aWUgaG9tZXBhZ2UpIgorbXNnc3RyICIiCisKK21zZ2lkICJkZXNjcmlwdGlvbiIKK21zZ3N0ciAiYmVza3JpdmVsc2UiCisKK21zZ2lkICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCittc2dzdHIgImtvcnQgdGVrc3Qgc29tIGJlc2tyaXZlciBkYXRhaW5uaG9sZGV0IgorCittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAidmVyc2pvbiIKKworbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgorbXNnc3RyICJ2ZXJzam9uIGZvciBkYXRhIgorCittc2dpZCAiSVNSQyIKK21zZ3N0ciAiSVNSQyIKKworbXNnaWQgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKK21zZ3N0ciAiIgorCittc2dpZCAib3JnYW5pemF0aW9uIgorbXNnc3RyICJvcmdhbmlzYXNqb24iCisKK21zZ2lkICJjb3B5cmlnaHQiCittc2dzdHIgIm9wcGhhdnNyZXR0IgorCittc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAibWVsZGluZyBvbSBvcHBoYXZzcmV0dCBmb3IgZGF0YSIKKworbXNnaWQgImNvcHlyaWdodCB1cmkiCittc2dzdHIgImxlbmtlIHRpbCBpbmZvcm1hc2pvbiBvbSBvcHBoYXZzcmV0dCIKKworIywgZnV6enkKK21zZ2lkICJVUkkgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgIm1lbGRpbmcgb20gb3BwaGF2c3JldHQgZm9yIGRhdGEiCisKKyMsIGZ1enp5Cittc2dpZCAiZW5jb2RlZCBieSIKK21zZ3N0ciAia29kZXIiCisKK21zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICJjb250YWN0IgorbXNnc3RyICJrb250YWt0IgorCittc2dpZCAiY29udGFjdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAia29udGFrdGluZm9ybWFzam9uIgorCittc2dpZCAibGljZW5zZSIKK21zZ3N0ciAibGlzZW5zIgorCittc2dpZCAibGljZW5zZSBvZiBkYXRhIgorbXNnc3RyICJsaXNlbnMgZm9yIGRhdGEiCisKK21zZ2lkICJsaWNlbnNlIHVyaSIKK21zZ3N0ciAibGVua2UgdGlsIGxpc2VucyIKKworIywgZnV6enkKK21zZ2lkICJVUkkgdG8gdGhlIGxpY2Vuc2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgImxpc2VucyBmb3IgZGF0YSIKKworbXNnaWQgInBlcmZvcm1lciIKK21zZ3N0ciAidXTDuHZlciIKKworbXNnaWQgInBlcnNvbihzKSBwZXJmb3JtaW5nIgorbXNnc3RyICJwZXJzb25lciBzb20gc3BpbGxlciIKKworbXNnaWQgImNvbXBvc2VyIgorbXNnc3RyICJrb21wb25pc3QiCisKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciCittc2dzdHIgInBlcnNvbihlcikgc29tIGVyIGtvbXBvbmVydGUgb3BwdGFrZXQiCisKK21zZ2lkICJkdXJhdGlvbiIKK21zZ3N0ciAidmFyaWdoZXQiCisKK21zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKK21zZ3N0ciAiIgorCittc2dpZCAiY29kZWMiCittc2dzdHIgImNvZGVjIgorCittc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICIiCisKK21zZ2lkICJ2aWRlbyBjb2RlYyIKK21zZ3N0ciAiIgorCittc2dpZCAiY29kZWMgdGhlIHZpZGVvIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICIiCisKK21zZ2lkICJhdWRpbyBjb2RlYyIKK21zZ3N0ciAibHlka29kZWsiCisKK21zZ2lkICJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJzdWJ0aXRsZSBjb2RlYyIKK21zZ3N0ciAibHlka29kZWsiCisKK21zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJjb250YWluZXIgZm9ybWF0IgorbXNnc3RyICJrb250YWt0aW5mb3JtYXNqb24iCisKK21zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiIgorCittc2dpZCAiYml0cmF0ZSIKK21zZ3N0ciAiYml0cmF0ZSIKKworbXNnaWQgImV4YWN0IG9yIGF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgIiIKKworbXNnaWQgIm5vbWluYWwgYml0cmF0ZSIKK21zZ3N0ciAibm9taW5lbGwgYml0cmF0ZSIKKworbXNnaWQgIm5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgIiIKKworbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKK21zZ3N0ciAibWluc3RlIGJpdHJhdGUiCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJtaW5zdGUgYml0cmF0ZSBpIGJpdHMvcyIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSIKK21zZ3N0ciAibWFrc2ltYWwgYml0cmF0ZSIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgIiIKKworbXNnaWQgImVuY29kZXIiCittc2dzdHIgImtvZGVyIgorCittc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiIgorCittc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgorbXNnc3RyICJ2ZXJzam9uIGF2IGtvZGVyIgorCittc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiIgorCittc2dpZCAic2VyaWFsIgorbXNnc3RyICJzZXJpZW51bW1lciIKKworbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCittc2dzdHIgInNlcmllbnVtbWVyIGZvciBzcG9yIgorCittc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgorbXNnc3RyICIiCisKK21zZ2lkICJ0cmFjayBnYWluIGluIGRiIgorbXNnc3RyICIiCisKK21zZ2lkICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCittc2dzdHIgIiIKKworbXNnaWQgInBlYWsgb2YgdGhlIHRyYWNrIgorbXNnc3RyICIiCisKK21zZ2lkICJyZXBsYXlnYWluIGFsYnVtIGdhaW4iCittc2dzdHIgIiIKKworbXNnaWQgImFsYnVtIGdhaW4gaW4gZGIiCittc2dzdHIgIiIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKK21zZ3N0ciAiIgorCittc2dpZCAicGVhayBvZiB0aGUgYWxidW0iCittc2dzdHIgIiIKKworbXNnaWQgInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIgorbXNnc3RyICIiCisKK21zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgorbXNnc3RyICIiCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIgorbXNnc3RyICJzcHLDpWtrb2RlIgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIgorbXNnc3RyICIiCisKK21zZ2lkICJpbWFnZSIKK21zZ3N0ciAiYmlsZGUiCisKK21zZ2lkICJpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAncHJldmlldyBpbWFnZScgPSBpbWFnZSB0aGF0IHNob3dzIGEgcHJldmlldyBvZiB0aGUgZnVsbCBpbWFnZQorbXNnaWQgInByZXZpZXcgaW1hZ2UiCittc2dzdHIgIiIKKworbXNnaWQgInByZXZpZXcgaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiIgorCittc2dpZCAiYXR0YWNobWVudCIKK21zZ3N0ciAidmVkbGVnZyIKKworbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgIiIKKworbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCittc2dzdHIgInNsYWcgaSBtaW51dHRldCIKKworbXNnaWQgIm51bWJlciBvZiBiZWF0cyBwZXIgbWludXRlIGluIGF1ZGlvIgorbXNnc3RyICJhbnRhbGwgc2xhZyBpIG1pbnV0dGV0IGkgbHlkIgorCittc2dpZCAia2V5d29yZHMiCittc2dzdHIgIm7DuGtrZWxvcmQiCisKK21zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKK21zZ3N0ciAia29tbWFzZXBhcmVydGUgbsO4a2tlbG9yZCBzb20gYmVza3JpdmVyIGlubmhvbGRldCIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKK21zZ3N0ciAicGxhc3NlcmluZyIKKworbXNnaWQgIiIKKyJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgorInByb2R1Y2VkIgorbXNnc3RyICIiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCisic291dGhlcm4gbGF0aXR1ZGVzKSIKK21zZ3N0ciAiIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorImdlbyBsb25naXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgcHJpbWUgbWVyaWRpYW4gaW4gR3JlZW53aWNoL1VLLCAgIgorIm5lZ2F0aXZlIHZhbHVlcyBmb3Igd2VzdGVybiBsb25naXR1ZGVzKSIKK21zZ3N0ciAiIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCisiYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBjb3VudHJ5IgorbXNnc3RyICJwbGFzc2VyaW5nIgorCittc2dpZCAiY291bnRyeSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKK21zZ3N0ciAicGxhc3NlcmluZyIKKworbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIHN1YmxvY2F0aW9uIgorbXNnc3RyICJwbGFzc2VyaW5nIgorCittc2dpZCAiIgorImEgbG9jYXRpb24gd2hpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgorInRoZSBuZWlnaGJvcmhvb2QpIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIGhvcml6b250YWwgZXJyb3IiCittc2dzdHIgInBsYXNzZXJpbmciCisKK21zZ2lkICJleHBlY3RlZCBlcnJvciBvZiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbmluZyBtZWFzdXJlcyAoaW4gbWV0ZXJzKSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKK21zZ3N0ciAicGxhc3NlcmluZyIKKworbXNnaWQgIiIKKyJtb3ZlbWVudCBzcGVlZCBvZiB0aGUgY2FwdHVyaW5nIGRldmljZSB3aGlsZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIGluIG0vcyIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBkaXJlY3Rpb24iCittc2dzdHIgInBsYXNzZXJpbmciCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgorIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKKyJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCittc2dzdHIgInBsYXNzZXJpbmciCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGRldmljZSBpcyBwb2ludGluZyB0byB3aGVuIGNhcHR1cmluZyAgYSBtZWRpYS4gIgorIkl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIHJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSAiCisiZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICdzaG93IG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lJyBoZXJlCittc2dpZCAic2hvdyBuYW1lIgorbXNnc3RyICJuYXZuIHDDpSBwcm9ncmFtIgorCittc2dpZCAiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogJ3Nob3cgc29ydG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lIGFzIHVzZWQgZm9yIHNvcnRpbmcgcHVycG9zZXMnIGhlcmUKK21zZ2lkICJzaG93IHNvcnRuYW1lIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIiIKKworbXNnaWQgImVwaXNvZGUgbnVtYmVyIgorbXNnc3RyICJlcGlzb2RlbnVtbWVyIgorCittc2dpZCAiVGhlIGVwaXNvZGUgbnVtYmVyIGluIHRoZSBzZWFzb24gdGhlIG1lZGlhIGlzIHBhcnQgb2YiCittc2dzdHIgIiIKKworbXNnaWQgInNlYXNvbiBudW1iZXIiCittc2dzdHIgInNlc29uZ251bW1lciIKKworbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICIiCisKK21zZ2lkICJseXJpY3MiCittc2dzdHIgInRla3N0ZXIiCisKK21zZ2lkICJUaGUgbHlyaWNzIG9mIHRoZSBtZWRpYSwgY29tbW9ubHkgdXNlZCBmb3Igc29uZ3MiCittc2dzdHIgIiIKKworbXNnaWQgImNvbXBvc2VyIHNvcnRuYW1lIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAicGVyc29uKGVyKSBzb20gZXIgYW5zdmFybGlnZSBmb3Igb3BwdGFrZXQiCisKK21zZ2lkICJncm91cGluZyIKK21zZ3N0ciAiZ3J1cHBlcmluZyIKKworbXNnaWQgIiIKKyJHcm91cHMgcmVsYXRlZCBtZWRpYSB0aGF0IHNwYW5zIG11bHRpcGxlIHRyYWNrcywgbGlrZSB0aGUgZGlmZmVyZW50IHBpZWNlcyAiCisib2YgYSBjb25jZXJ0by4gSXQgaXMgYSBoaWdoZXIgbGV2ZWwgdGhhbiBhIHRyYWNrLCBidXQgbG93ZXIgdGhhbiBhbiBhbGJ1bSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgInVzZXIgcmF0aW5nIgorbXNnc3RyICJ2YXJpZ2hldCIKKworbXNnaWQgIiIKKyJSYXRpbmcgYXR0cmlidXRlZCBieSBhIHVzZXIuIFRoZSBoaWdoZXIgdGhlIHJhbmssIHRoZSBtb3JlIHRoZSB1c2VyIGxpa2VzICIKKyJ0aGlzIG1lZGlhIgorbXNnc3RyICIiCisKK21zZ2lkICJkZXZpY2UgbWFudWZhY3R1cmVyIgorbXNnc3RyICIiCisKK21zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICIiCisKK21zZ2lkICJkZXZpY2UgbW9kZWwiCittc2dzdHIgIiIKKworbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImFwcGxpY2F0aW9uIG5hbWUiCittc2dzdHIgInBsYXNzZXJpbmciCisKK21zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCittc2dzdHIgIiIKKworbXNnaWQgImFwcGxpY2F0aW9uIGRhdGEiCittc2dzdHIgIiIKKworbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCittc2dzdHIgIiIKKworbXNnaWQgImltYWdlIG9yaWVudGF0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICJIb3cgdGhlIGltYWdlIHNob3VsZCBiZSByb3RhdGVkIG9yIGZsaXBwZWQgYmVmb3JlIGRpc3BsYXkiCittc2dzdHIgIiIKKworbXNnaWQgIiwgIgorbXNnc3RyICIsICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgorbXNnc3RyICJGRUlMOiBmcmEgZWxlbWVudCAlczogJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQWRkaXRpb25hbCBkZWJ1ZyBpbmZvOlxuIgorIiVzXG4iCittc2dzdHIgIiIKKyJUaWxsZWdnc2luZm9ybWFzam9uIGZvciBmZWlsc8O4a2luZzpcbiIKKyIlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgInNwZWNpZmllZCBlbXB0eSBiaW4gXCIlc1wiLCBub3QgYWxsb3dlZCIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHNraXBwaW5nIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxpbmsgJXMgdG8gJXMiCittc2dzdHIgImt1bm5lIGlra2UgbGVua2UgJXMgdGlsICVzIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICJpbmdlbiBlbGVtZW50IMKrJXPCuyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCittc2dzdHIgIiIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIKK21zZ3N0ciAiIgorCittc2dpZCAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNvdXJjZSBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCB0byBsaW5rIFVSSSBcIiVzXCIgdG8iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbGluayBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgIiIKKworbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBjbG9jayBlcnJvci4iCittc2dzdHIgIkZlaWwgaSBpbnRlcm4ga2xva2tlIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKK21zZ3N0ciAiSW50ZXJuIGZlaWwgbWVkIGRhdGFmbHl0LiIKKworbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCittc2dzdHIgIiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiIgorCittc2dpZCAiRmlsdGVyIGNhcHMiCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKKyJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgorbXNnc3RyICIiCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiSW5nZW4gZmlsbmF2biBvcHBnaXR0IGZvciBza3JpdmluZy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJLdW5uZSBpa2tlIMOlcG5lIGZpbCDCqyVzwrsgZm9yIHNrcml2aW5nLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiRmVpbCB2ZWQgbHVra2luZyBhdiBmaWwgwqslc8K7LiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiRmVpbCB2ZWQgc8O4a2luZyBpIGZpbCDCqyVzwrsuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgorbXNnc3RyICJGZWlsIHZlZCBza3JpdmluZyB0aWwgZmlsIMKrJXPCuy4iCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiSW5nZW4gZmlsbmF2biBvcHBnaXR0IGZvciBsZXNpbmcuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiS3VubmUgaWtrZSDDpXBuZSBmaWwgwqslc8K7IGZvciBsZXNpbmcuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgaW5mbyBvbiBcIiVzXCIuIgorbXNnc3RyICJLdW5uZSBpa2tlIGhlbnRlIGluZm9ybWFzam9uIG9tIMKrJXPCuy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiXCIlc1wiIGlzIGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiwqslc8K7IGVyIGVuIGthdGFsb2cuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKK21zZ3N0ciAiRmlsIMKrJXPCuyBlciBlbiBwbHVnZy4iCisKK21zZ2lkICJGYWlsZWQgYWZ0ZXIgaXRlcmF0aW9ucyBhcyByZXF1ZXN0ZWQuIgorbXNnc3RyICIiCisKK21zZ2lkICJObyBUZW1wIGRpcmVjdG9yeSBzcGVjaWZpZWQuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiS3VubmUgaWtrZSBsYWdlIG1pZGxlcnRpZGlnIGZpbCDCqyVzwrsuIgorCisjLCBmdXp6eQorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZG93bmxvYWQgZmlsZS4iCittc2dzdHIgIkZlaWwgdmVkIHNrcml2aW5nIHRpbCBmaWwgwqslc8K7LiIKKworbXNnaWQgImNhcHMiCittc2dzdHIgIiIKKworbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCittc2dzdHIgIiIKKworbXNnaWQgIm1pbmltdW0iCittc2dzdHIgIm1pbmltdW0iCisKK21zZ2lkICJtYXhpbXVtIgorbXNnc3RyICJtYWtzaW11bSIKKworbXNnaWQgImZvcmNlIGNhcHMiCittc2dzdHIgIiIKKworbXNnaWQgImZvcmNlIGNhcHMgd2l0aG91dCBkb2luZyBhIHR5cGVmaW5kIgorbXNnc3RyICIiCisKK21zZ2lkICJTdHJlYW0gY29udGFpbnMgbm8gZGF0YS4iCittc2dzdHIgIlN0csO4bW1lbiBpbm5laG9sZGVyIGlra2UgZGF0YS4iCisKK21zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgorbXNnc3RyICJJbXBsZW1lbnRlcnRlIGdyZW5zZXNuaXR0OlxuIgorCittc2dpZCAicmVhZGFibGUiCittc2dzdHIgImxlc2JhciIKKworbXNnaWQgIndyaXRhYmxlIgorbXNnc3RyICJza3JpdmJhciIKKworbXNnaWQgImNvbnRyb2xsYWJsZSIKK21zZ3N0ciAia29udHJvbGxlcmJhciIKKworbXNnaWQgImNoYW5nZWFibGUgaW4gTlVMTCwgUkVBRFksIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCwgUkVBRFkgb3IgUEFVU0VEIHN0YXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKK21zZ3N0ciAiIgorCittc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgorbXNnc3RyICIiCisKK21zZ2lkICJUb3RhbCBjb3VudDogIgorbXNnc3RyICJUb3RhbHQgYW50YWxsOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxhY2tsaXN0ZWQgZmlsZSIKK21zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHJbMF0gIiVkIHNvcnRlbGlzdGV0IGZpbCIKK21zZ3N0clsxXSAiJWQgc29ydGVsaXN0ZWRlIGZpbGVyIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIHBsdWdpbiIKK21zZ2lkX3BsdXJhbCAiJWQgcGx1Z2lucyIKK21zZ3N0clswXSAiJWQgdGlsbGVnZyIKK21zZ3N0clsxXSAiJWQgdGlsbGVnZyIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBibGFja2xpc3QgZW50cnkiCittc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdCBlbnRyaWVzIgorbXNnc3RyWzBdICIlZCBzb3J0ZWxpc3Rlb3BwZsO4cmluZyIKK21zZ3N0clsxXSAiJWQgc29ydGVsaXN0ZW9wcGbDuHJpbmdlciIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBmZWF0dXJlIgorbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKK21zZ3N0clswXSAiJWQgZnVua3Nqb24iCittc2dzdHJbMV0gIiVkIGZ1bmtzam9uZXIiCisKK21zZ2lkICJQcmludCBhbGwgZWxlbWVudHMiCittc2dzdHIgIlNrcml2IHV0IGFsbGUgZWxlbWVudGVuZSIKKworbXNnaWQgIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHIgIlNrcml2IHV0IGxpc3RlIG1lZCBzb3J0ZWxpc3RlZGUgZmlsZXIiCisKK21zZ2lkICIiCisiUHJpbnQgYSBtYWNoaW5lLXBhcnNhYmxlIGxpc3Qgb2YgZmVhdHVyZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4gb3IgYWxsICIKKyJwbHVnaW5zIHByb3ZpZGUuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIGluIGNvbm5lY3Rpb24gd2l0aCBleHRlcm5hbCAiCisiYXV0b21hdGljIHBsdWdpbiBpbnN0YWxsYXRpb24gbWVjaGFuaXNtcyIKK21zZ3N0ciAiIgorCittc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgorbXNnc3RyICIiCisKK21zZ2lkICJQcmludCBzdXBwb3J0ZWQgVVJJIHNjaGVtZXMsIHdpdGggdGhlIGVsZW1lbnRzIHRoYXQgaW1wbGVtZW50IHRoZW0iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmlsZTogJXNcbiIKK21zZ3N0ciAiS3VubmUgaWtrZSBsYXN0ZSB0aWxsZWdnc2ZpbDogwqslc8K7XG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkluZGV4IHN0YXRpc3RpY3MiCittc2dzdHIgIiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICJGRUlMOiBmcmEgZWxlbWVudCAlczogJXNcbiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCittc2dzdHIgIkZFSUw6IGZyYSBlbGVtZW50ICVzOiAlc1xuIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAiRkVJTDogZnJhIGVsZW1lbnQgJXM6ICVzXG4iCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSAoJXMpOiAiCittc2dzdHIgIkZFSUw6IGZyYSBlbGVtZW50ICVzOiAlc1xuIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJHb3QgRU9TIGZyb20gZWxlbWVudCBcIiVzXCIuXG4iCittc2dzdHIgIkZFSUw6IGZyYSBlbGVtZW50ICVzOiAlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkZPVU5EIFRBR1xuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklORk86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorIklORk86XG4iCisiJXNcbiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgorbXNnc3RyICJGRUlMOiBmcmEgZWxlbWVudCAlczogJXNcbiIKKworbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJidWZmZXJpbmcuLi4iCittc2dzdHIgIiIKKworbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcnJ1cHQ6IFN0b3BwaW5nIHBpcGVsaW5lIC4uLlxuIgorbXNnc3RyICIiCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKK21zZ3N0ciAiaW5nZW4gZWxlbWVudCDCqyVzwrsiCisKK21zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCittc2dzdHIgIiIKKworbXNnaWQgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCittc2dzdHIgIiIKKworbXNnaWQgIkRvIG5vdCBwcmludCBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKK21zZ3N0ciAiIgorCittc2dpZCAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKK21zZ3N0ciAiIgorCittc2dpZCAiVFlQRTEsVFlQRTIsLi4uIgorbXNnc3RyICJUWVBFMSxUWVBFMiwuLi4iCisKK21zZ2lkICJEbyBub3QgaW5zdGFsbCBhIGZhdWx0IGhhbmRsZXIiCittc2dzdHIgIiIKKworbXNnaWQgIlByaW50IGFsbG9jIHRyYWNlIChpZiBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSkiCittc2dzdHIgIiIKKworbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKK21zZ3N0ciAiIgorCittc2dpZCAiR2F0aGVyIGFuZCBwcmludCBpbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZDogJXMuXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXG4iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkVSUk9SOiB0aGUgJ3BpcGVsaW5lJyBlbGVtZW50IHdhc24ndCBmb3VuZC5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCittc2dzdHIgIiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIGxpdmUgYW5kIGRvZXMgbm90IG5lZWQgUFJFUk9MTCAuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTElORyAuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMRUQgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKK21zZ3N0ciAiIgorCittc2dpZCAiV2FpdGluZyBmb3IgRU9TLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgorbXNnc3RyICIiCisKK21zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKK21zZ3N0ciAiIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIgorbXNnc3RyICJGcmlnasO4ciByw7hyIC4uLlxuIgorCisjfiBtc2dpZCAiRklMRSIKKyN+IG1zZ3N0ciAiRklMIgpkaWZmIC0tZ2l0IGEvcG8vbmwuZ21vIGIvcG8vbmwuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NjdkNDgKLS0tIC9kZXYvbnVsbAorKysgYi9wby9ubC5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vbmwucG8gYi9wby9ubC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODFhMjkzCi0tLSAvZGV2L251bGwKKysrIGIvcG8vbmwucG8KQEAgLTAsMCArMSwxMjM2IEBACisjIHRyYW5zbGF0aW9uIG9mIGdzdHJlYW1lci0wLjEwLjMyLjIucG8gdG8gRHV0Y2gKKyMgRHV0Y2ggdHJhbnNsYXRpb24gb2YgZ3N0cmVhbWVyCisjIENvcHlyaWdodCAoQykgMjAwMy0yMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ3N0cmVhbWVyIHBhY2thZ2UuCisjCisjIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPiwgMjAwNC4KKyMgVGFjbyBXaXR0ZSA8dGN3aXR0ZUBjcy51dS5ubD4sIDIwMDYuCisjIEZyZWVrIGRlIEtydWlqZiA8Zi5kZS5rcnVpamZAZ21haWwuY29tPiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMS4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdzdHJlYW1lciAwLjEwLjMyLjJcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wOS0yOSAxNDo1NSswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMS0wNC0yNiAyMzoxMCswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBGcmVlayBkZSBLcnVpamYgPGYuZGUua3J1aWpmQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBEdXRjaCA8dmVydGFsaW5nQHZyaWpzY2hyaWZ0Lm9yZz5cbiIKKyJMYW5ndWFnZTogbmxcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD1uICE9IDE7XG4iCisiWC1HZW5lcmF0b3I6IExva2FsaXplIDEuMVxuIgorCittc2dpZCAiUHJpbnQgdGhlIEdTdHJlYW1lciB2ZXJzaW9uIgorbXNnc3RyICJUb29uIGRlIEdTdHJlYW1lciB2ZXJzaWUiCisKK21zZ2lkICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKK21zZ3N0ciAiQWxsZSB3YWFyc2NodXdpbmdlbiBmYXRhYWwgbWFrZW4iCisKK21zZ2lkICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKK21zZ3N0ciAiQmVzY2hpa2JhcmUgZGVidWctY2F0ZWdvcmllw6tuIHdlZXJnZXZlbiBlbiBhZnNsdWl0ZW4iCisKK21zZ2lkICIiCisiRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmcm9tIDEgKG9ubHkgZXJyb3IpIHRvIDUgKGFueXRoaW5nKSBvciAwIGZvciBubyBvdXRwdXQiCittc2dzdHIgIiIKKyJTdGFuZGFhcmQgZGVidWctbml2ZWF1IHZhbiAxIChlbmtlbCBmb3V0ZW4pIHRvdCA1IChhbGxlcykgb2YgMCB2b29yIGdlZW4gIgorInVpdHZvZXIiCisKK21zZ2lkICJMRVZFTCIKK21zZ3N0ciAiTklWRUFVIgorCittc2dpZCAiIgorIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5X25hbWU6bGV2ZWwgcGFpcnMgdG8gc2V0IHNwZWNpZmljIGxldmVscyBmb3IgIgorInRoZSBpbmRpdmlkdWFsIGNhdGVnb3JpZXMuIEV4YW1wbGU6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKK21zZ3N0ciAiIgorIktvbW1hLWdlc2NoZWlkZW4gbGlqc3QgdmFuIGNhdGVnb3JpZV9uYWFtOm5pdmVhdSBwYXJlbiBvbSBzcGVjaWZpZWtlICIKKyJuaXZlYXUncyBpbiB0ZSBzdGVsbGVuIHZvb3IgZGUgaW5kaXZpZHVlbGUgY2F0ZWdvcmllw6tuLiBWb29yYmVlbGQ6ICIKKyJHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCisKK21zZ2lkICJMSVNUIgorbXNnc3RyICJMSUpTVCIKKworbXNnaWQgIkRpc2FibGUgY29sb3JlZCBkZWJ1Z2dpbmcgb3V0cHV0IgorbXNnc3RyICJLbGV1cmVuIHVpdCB6ZXR0ZW4gaW4gZGVidWctdWl0dm9lciIKKworbXNnaWQgIkRpc2FibGUgZGVidWdnaW5nIgorbXNnc3RyICJEZWJ1Z2dpbmcgdWl0IHpldHRlbiIKKworbXNnaWQgIkVuYWJsZSB2ZXJib3NlIHBsdWdpbiBsb2FkaW5nIGRpYWdub3N0aWNzIgorbXNnc3RyICJVaXRnZWJyZWlkZSBkaWFnbm9zdGllayB2b29yIGhldCBsYWRlbiB2YW4gcGx1Z2lucyBhYW4gemV0dGVuIgorCittc2dpZCAiQ29sb24tc2VwYXJhdGVkIHBhdGhzIGNvbnRhaW5pbmcgcGx1Z2lucyIKK21zZ3N0ciAiRHViYmVsZSBwdW50LWdlc2NoZWlkZW4gbGlqc3QgbWV0IHBhZGVuIG1ldCBwbHVnaW5zIgorCittc2dpZCAiUEFUSFMiCittc2dzdHIgIlBBREVOIgorCittc2dpZCAiIgorIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgorImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKK21zZ3N0ciAiIgorIktvbW1hLWdlc2NoZWlkZW4gbGlqc3QgdmFuIHBsdWdpbnMgb20gdm9vciB0ZSBsYWRlbiBuYWFzdCBkZSBsaWpzdCAiCisib3BnZXNsYWdlbiBpbiBvbWdldmluZ3N2YXJpYWJsZSBHU1RfUExVR0lOX1BBVEgiCisKK21zZ2lkICJQTFVHSU5TIgorbXNnc3RyICJQTFVHSU5TIgorCittc2dpZCAiRGlzYWJsZSB0cmFwcGluZyBvZiBzZWdtZW50YXRpb24gZmF1bHRzIGR1cmluZyBwbHVnaW4gbG9hZGluZyIKK21zZ3N0ciAiIgorIkhldCBvcHZhbmdlbiB2YW4gc2VnbWVudGF0aWVmb3V0ZW4gdWl0IHpldHRlbiB0aWpkZW5zIGxhZGVuIHZhbiBwbHVnaW5zIgorCittc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIlpldCBoZXQgaGV0IGJpandlcmtlbiB2YW4gZGUgcmVnaXN0cnkgdWl0IgorCittc2dpZCAiRGlzYWJsZSBzcGF3bmluZyBhIGhlbHBlciBwcm9jZXNzIHdoaWxlIHNjYW5uaW5nIHRoZSByZWdpc3RyeSIKK21zZ3N0ciAiIgorIlpldCBoZXQgc3RhcnRlbiB2YW4gZWVuIGh1bHBwcm9ncmFtbWEgdWl0IHRpamRlbnMgaGV0IGRvb3Jsb3BlbiB2YW4gZGUgIgorInJlZ2lzdHJ5IgorCittc2dpZCAiR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgIkdTdHJlYW1lci1vcHRpZXMiCisKK21zZ2lkICJTaG93IEdTdHJlYW1lciBPcHRpb25zIgorbXNnc3RyICJUb29uIGRlIEdTdHJlYW1lci1vcHRpZXMiCisKK21zZ2lkICJVbmtub3duIG9wdGlvbiIKK21zZ3N0ciAiT25iZWtlbmRlIG9wdGllIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIga3JlZWcgZWVuIGFsZ2VtZW5lIGZvdXQgdmFuIGRlIGtlcm5iaWJsaW90aGVlay4iCisKK21zZ2lkICIiCisiR1N0cmVhbWVyIGRldmVsb3BlcnMgd2VyZSB0b28gbGF6eSB0byBhc3NpZ24gYW4gZXJyb3IgY29kZSB0byB0aGlzIGVycm9yLiIKK21zZ3N0ciAiIgorIkdTdHJlYW1lciBvbnR3aWtrZWxhYXJzIHdhcmVuIHRlIGx1aSBvbSBlZW4gZm91dGNvZGUgdG9lIHRlIHdpanplbiBhYW4gZGV6ZSAiCisiZm91dC4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKK21zZ3N0ciAiSW50ZXJuZSBHU3RyZWFtZXItZm91dDogY29kZSBuaWV0IGdlw69tcGxlbWVudGVlcmQuIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgorInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgorbXNnc3RyICIiCisiR1N0cmVhbWVyLWZvdXQ6IHN0YXR1c3dpanppZ2luZyBpcyBtaXNsdWt0IGVuIGVlbiBlbGVtZW50IGhlZWZ0IGdlZW4gZ29lZGUgIgorImZvdXRtZWxkaW5nIGFmZ2VnZXZlbiBtZXQgZWVuIHJlZGVuIHZvb3IgaGV0IG1pc2x1a2tlbi4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHBhZCBwcm9ibGVtLiIKK21zZ3N0ciAiSW50ZXJuZSBHU3RyZWFtZXItZm91dDogcGFkcHJvYmxlZW0uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iCittc2dzdHIgIkludGVybmUgR1N0cmVhbWVyLWZvdXQ6IHRocmVhZHByb2JsZWVtLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCittc2dzdHIgIkludGVybmUgR1N0cmVhbWVyLWZvdXQ6IG9uZGVyaGFuZGVsaW5nc3Byb2JsZWVtLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogZXZlbnQgcHJvYmxlbS4iCittc2dzdHIgIkludGVybmUgR1N0cmVhbWVyLWZvdXQ6IGdlYmV1cnRlbmlzcHJvYmxlZW0uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uIgorbXNnc3RyICJJbnRlcm5lIEdTdHJlYW1lci1mb3V0OiB6b2VrcHJvYmxlZW0uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgorbXNnc3RyICJJbnRlcm5lIEdTdHJlYW1lci1mb3V0OiBtb2dlbGlqa2hlZGVuLXByb2JsZWVtLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGFnIHByb2JsZW0uIgorbXNnc3RyICJJbnRlcm5lIEdTdHJlYW1lci1mb3V0OiB0YWdwcm9ibGVlbS4iCisKK21zZ2lkICJZb3VyIEdTdHJlYW1lciBpbnN0YWxsYXRpb24gaXMgbWlzc2luZyBhIHBsdWctaW4uIgorbXNnc3RyICJFciBvbnRicmVla3QgZWVuIHBsdWdpbiBpbiB1dyBHU3RyZWFtZXIgaW5zdGFsbGF0aWUuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKK21zZ3N0ciAiSW50ZXJuZSBHU3RyZWFtZXItZm91dDoga2xva3Byb2JsZWVtLiIKKworbXNnaWQgIiIKKyJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCisiZGlzYWJsZWQuIgorbXNnc3RyICIiCisiRGV6ZSBhcGxsaWNhdGllIHByb2JlZXJ0IGVlbiBmdW5jdGllIHZhbiBHU3RyZWFtZXIgdGUgZ2VicnVpa2VuIGRpZSBpcyAiCisidWl0Z2V6ZXQuIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIga3JlZWcgZWVuIGFsZ2VtZW5lIGZvdXQgdmFuIGVlbiBvbmRlcnN0ZXVuZW5kZSBiaWJsaW90aGVlay4iCisKK21zZ2lkICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJLYW4gb25kZXJzdGV1bmVuZGUgYmlibGlvdGhlZWsgbmlldCBpbml0aWFsaXNlcmVuLiIKKworbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJLYW4gb25kZXJzdGV1bmVuZGUgYmlibGlvdGhlZWsgbmlldCBzbHVpdGVuLiIKKworbXNnaWQgIkNvdWxkIG5vdCBjb25maWd1cmUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiS2FuIG9uZGVyc3RldW5lbmRlIGJpYmxpb3RoZWVrIG5pZXQgY29uZmlndXJlcmVuLiIKKworbXNnaWQgIkVuY29kaW5nIGVycm9yLiIKK21zZ3N0ciAiQ29kZXJpbmdzZm91dC4iCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHJlc291cmNlIGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIGt3YW0gZWVuIGFsZ2VtZW5lIGZvdXQgdGVnZW4gbWV0IHN5c3RlZW1icm9ubmVuLiIKKworbXNnaWQgIlJlc291cmNlIG5vdCBmb3VuZC4iCittc2dzdHIgIkJyb24gbmlldCBnZXZvbmRlbi4iCisKK21zZ2lkICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgorbXNnc3RyICJCcm9uIGJlemV0IG9mIG5pZXQgYmVzY2hpa2JhYXIuIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcuIgorbXNnc3RyICJLYW4gYnJvbiBuaWV0IG9wZW5lbiBvbSB0ZSBsZXplbi4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCittc2dzdHIgIkthbiBicm9uIG5pZXQgb3BlbmVuIG9tIHRlIHNjaHJpanZlbi4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCittc2dzdHIgIkthbiBicm9uIG5pZXQgb3BlbmVuIG9tIHRlIGxlemVuIGVuIHNjaHJpanZlbi4iCisKK21zZ2lkICJDb3VsZCBub3QgY2xvc2UgcmVzb3VyY2UuIgorbXNnc3RyICJLYW4gYnJvbiBuaWV0IHNsdWl0ZW4uIgorCittc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCittc2dzdHIgIkthbiBuaWV0IGxlemVuIHZhbiBicm9uLiIKKworbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iCittc2dzdHIgIkthbiBuaWV0IHNjaHJpanZlbiBuYWFyIGJyb24uIgorCittc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCittc2dzdHIgIkthbiBkZSBicm9uIG5pZXQgc3BvZWxlbi4iCisKK21zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgorbXNnc3RyICJLYW4gbmlldCBzeW5jaHJvbmlzZXJlbiBvcCBkZSBicm9uLiIKKworbXNnaWQgIkNvdWxkIG5vdCBnZXQvc2V0IHNldHRpbmdzIGZyb20vb24gcmVzb3VyY2UuIgorbXNnc3RyICJLYW4gZ2VlbiBpbnN0ZWxsaW5nZW4gbGV6ZW4vc2NocmlqdmVuIHZhbi9uYWFyIGJyb24uIgorCittc2dpZCAiTm8gc3BhY2UgbGVmdCBvbiB0aGUgcmVzb3VyY2UuIgorbXNnc3RyICJFciBpcyBnZWVuIHJ1aW10ZSBtZWVyIGluIGRlIGJyb24uIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdHJlYW0gZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIga3dhbSBlZW4gYWxnZW1lbmUgc3Ryb29tZm91dCB0ZWdlbi4iCisKK21zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCittc2dzdHIgIkVsZW1lbnQgb25kZXJzdGV1bnQgZGV6ZSBzdHJvb20gbmlldC4gIFN0dXVyIGVlbiBmb3V0cmFwcG9ydC4iCisKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIHR5cGUgb2Ygc3RyZWFtLiIKK21zZ3N0ciAiS2FuIGRlIHNvb3J0IHZhbiBkZSBzdHJvb20gbmlldCBoZXJrZW5uZW4uIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBvZiBhIGRpZmZlcmVudCB0eXBlIHRoYW4gaGFuZGxlZCBieSB0aGlzIGVsZW1lbnQuIgorbXNnc3RyICJEZSBzdHJvb20gaXMgdmFuIGVlbiBhbmRlcmUgc29vcnQgZGFuIGRpdCBlbGVtZW50IGthbiB2ZXJ3ZXJrZW4uIgorCittc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgorbXNnc3RyICJFciBpcyBnZWVuIGNvZGVjIGFhbndlemlnIGRpZSBkZXplIHNvb3J0IHN0cm9vbSBrYW4gdmVyd2Vya2VuLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZWNvZGUgc3RyZWFtLiIKK21zZ3N0ciAiS2FuIGRlIHN0cm9vbSBuaWV0IGRlY29kZXJlbi4iCisKK21zZ2lkICJDb3VsZCBub3QgZW5jb2RlIHN0cmVhbS4iCittc2dzdHIgIkthbiBkZSBzdHJvb20gbmlldCBjb2RlcmVuLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZW11bHRpcGxleCBzdHJlYW0uIgorbXNnc3RyICJLYW4gZGUgc3Ryb29tIG5pZXQgZGVtdWx0aXBsZXhlbi4iCisKK21zZ2lkICJDb3VsZCBub3QgbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIkthbiBkZSBzdHJvb20gbmlldCBtdWx0aXBsZXhlbi4iCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIgorbXNnc3RyICJEZSBzdHJvb20gaXMgdmFuIGhldCB2ZXJrZWVyZGUgZm9ybWFhdC4iCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiRGUgc3Ryb29tIGlzIHZlcmNpamZlcmQgZW4gb250Y2lqZmVyaW5nIHdvcmR0IG5pZXQgb25kZXJzdGV1bmQuIgorCittc2dpZCAiIgorIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKKyJiZWVuIHN1cHBsaWVkLiIKK21zZ3N0ciAiIgorIkRlIHN0cm9vbSBpcyB2ZXJjaWpmZXJkIGVuIGthbiBuaWV0IHdvcmRlbiBvbnRjaWpmZXJkIG9tZGF0IGVyIGdlZW4gIgorImdlc2NoaWt0ZSBzbGV1dGVsIGFhbmdlbGV2ZXJkIGlzLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMuIgorbXNnc3RyICJHZWVuIGZvdXRib29kc2NoYXAgdm9vciBkb21laW4gJXMuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcyBhbmQgY29kZSAlZC4iCittc2dzdHIgIkdlZW4gc3RhbmRhYXJkIGZvdXRib29kc2NoYXAgdm9vciBkb21laW4gJXMgZW4gY29kZSAlZC4iCisKK21zZ2lkICJTZWxlY3RlZCBjbG9jayBjYW5ub3QgYmUgdXNlZCBpbiBwaXBlbGluZS4iCittc2dzdHIgIkdlc2VsZWN0ZWVyZGUga2xvayBrYW4gbmlldCBnZWJydWlrdCB3b3JkZW4gaW4gZGUgcGlqcGxpam4uIgorCittc2dpZCAidGl0bGUiCittc2dzdHIgInRpdGVsIgorCittc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKK21zZ3N0ciAidmFhayBnZWJydWlrdGUgdGl0ZWwiCisKK21zZ2lkICJ0aXRsZSBzb3J0bmFtZSIKK21zZ3N0ciAidGl0ZWwgdm9vciBoZXQgc29ydGVyZW4iCisKK21zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJ2YWFrIGdlYnJ1aWt0ZSB0aXRlbCB2b29yIGhldCBzb3J0ZXJlbiIKKworbXNnaWQgImFydGlzdCIKK21zZ3N0ciAiYXJ0aWVzdCIKKworbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAicGVyc28obyluKGVuKSBkaWUgZGUgb3BuYW1lIGdlbWFha3QgaGViYmVuIgorCittc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgorbXNnc3RyICJuYWFtIGFydGllc3Qgdm9vciBzb3J0ZXJlbiIKKworbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAicGVyc28obyluKGVuKSBkaWUgZGUgb3BuYW1lIGdlbWFha3QgaGViYmVuIGdlYnJ1aWt0IHZvb3Igc29ydGVyZW4iCisKK21zZ2lkICJhbGJ1bSIKK21zZ3N0ciAiYWxidW0iCisKK21zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSIKK21zZ3N0ciAiYWxidW0gd2Fhcm9wIGRpdCBzdHVrIHN0YWF0IgorCittc2dpZCAiYWxidW0gc29ydG5hbWUiCittc2dzdHIgIm5hYW0gYWxidW0gdm9vciBzb3J0ZXJlbiIKKworbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJhbGJ1bSB3YWFyb3AgZGl0IHN0dWsgc3RhYXQgdm9vciBzb3J0ZXJlbiIKKworbXNnaWQgImFsYnVtIGFydGlzdCIKK21zZ3N0ciAiYWxidW1hcnRpZXN0IgorCittc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgorbXNnc3RyICJEZSBhcnRpZXN0IHZhbiBoZXQgZ2VoZWxlIGFsYnVtLCB6b2FscyBkYXQgem91IG1vZXRlbiB3b3JkZW4gZ2V0b29uZCIKKworbXNnaWQgImFsYnVtIGFydGlzdCBzb3J0bmFtZSIKK21zZ3N0ciAibmFhbSBhcnRpZXN0IHZvb3Igc29ydGVyZW4iCisKK21zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiCittc2dzdHIgIiIKKyJEZSBhcnRpZXN0IHZhbiBoZXQgZ2VoZWxlIGFsYnVtLCB6b2FscyBkYXQgem91IG1vZXRlbiB3b3JkZW4gZ2VicnVpa3Qgdm9vciAiCisic29ydGVyZW4iCisKK21zZ2lkICJkYXRlIgorbXNnc3RyICJkYXR1bSIKKworbXNnaWQgImRhdGUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR0RhdGUgc3RydWN0dXJlKSIKK21zZ3N0ciAiZGF0dW0gd2Fhcm9wIGhldCBzdHVrIGdlbWFha3QgaXMgKGFscyBHRGF0ZS1zdHJ1Y3R1dXIpIgorCittc2dpZCAiZGF0ZXRpbWUiCittc2dzdHIgImRhdHVtLXRpamQiCisKK21zZ2lkICJkYXRlIGFuZCB0aW1lIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdzdERhdGVUaW1lIHN0cnVjdHVyZSkiCittc2dzdHIgIiIKKyJkYXR1bSBlbiB0aWpkIHdhYXJvcCBkZSBnZWdldmVucyB6aWpuIGdlbWFha3QgKGFscyBlZW4gR3N0RGF0ZVRpbWUtc3RydWN0dXVyKSIKKworbXNnaWQgImdlbnJlIgorbXNnc3RyICJnZW5yZSIKKworbXNnaWQgImdlbnJlIHRoaXMgZGF0YSBiZWxvbmdzIHRvIgorbXNnc3RyICJnZW5yZSB2YW4gaGV0IHN0dWsiCisKK21zZ2lkICJjb21tZW50IgorbXNnc3RyICJjb21tZW50YWFyIgorCittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCittc2dzdHIgInZyaWogdGUga2llemVuIGNvbW1lbnRhYXJ0ZWtzdCBkaWUgaGV0IHN0dWsgYmVzY2hyaWpmdCIKKworbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCittc2dzdHIgInVpdGdlYnJlaWQgY29tbWVudGFhciIKKworbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIGluIGtleT12YWx1ZSBvciBrZXlbZW5dPWNvbW1lbnQgZm9ybSIKK21zZ3N0ciAiIgorInZyaWogdGUga2llemVuIGNvbW1lbnRhYXJ0ZWtzdCBiaWogZ2VnZXZlbnMgaW4gZGUgdm9ybSBrZXk9d2FhcmRlIG9mIGtleVtlbl0iCisiPWNvbW1lbnRhYXIgIgorCittc2dpZCAidHJhY2sgbnVtYmVyIgorbXNnc3RyICJudW1tZXIiCisKK21zZ2lkICJ0cmFjayBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKK21zZ3N0ciAibnVtbWVyIHZhbiBoZXQgc3R1ayBpbiBlZW4gdmVyemFtZWxpbmciCisKK21zZ2lkICJ0cmFjayBjb3VudCIKK21zZ3N0ciAiYWFudGFsIG51bW1lcnMiCisKK21zZ2lkICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgorbXNnc3RyICJhYW50YWwgbnVtbWVycyBpbiBkZSB2ZXJ6YW1lbGluZyB3YWFyYmlqIGRpdCBzdHVrIGhvb3J0IgorCittc2dpZCAiZGlzYyBudW1iZXIiCittc2dzdHIgInNjaGlqZm51bW1lciIKKworbXNnaWQgImRpc2MgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgIm51bW1lciB2YW4gZGUgc2NoaWpmIGluIGVlbiB2ZXJ6YW1lbGluZyIKKworbXNnaWQgImRpc2MgY291bnQiCittc2dzdHIgImFhbnRhbCBzY2hpanZlbiIKKworbXNnaWQgImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIgorbXNnc3RyICJhYW50YWwgc2NoaWp2ZW4gaW4gZGUgdmVyemFtZWxpbmcgd2FhcnRvZSBkZXplIHNjaGlqZiBiZWhvb3J0IgorCittc2dpZCAibG9jYXRpb24iCittc2dzdHIgImxva2F0aWUiCisKK21zZ2lkICIiCisiT3JpZ2luIG9mIG1lZGlhIGFzIGEgVVJJIChsb2NhdGlvbiwgd2hlcmUgdGhlIG9yaWdpbmFsIG9mIHRoZSBmaWxlIG9yIHN0cmVhbSAiCisiaXMgaG9zdGVkKSIKK21zZ3N0ciAiIgorIm9vcnNwcm9uZyB2YW4gaGV0IG1lZGl1bSBhbHMgZWVuIFVSSSAobG9jYXRpZSwgd2FhciBkZSBvb3JzcHJvbmcgdmFuIGhldCAiCisiYmVzdGFuZCBvZiBzdHJvb20gd29yZHQgZ2Vob3N0KSIKKworbXNnaWQgImhvbWVwYWdlIgorbXNnc3RyICJ3ZWJwYWdpbmEiCisKK21zZ2lkICJIb21lcGFnZSBmb3IgdGhpcyBtZWRpYSAoaS5lLiBhcnRpc3Qgb3IgbW92aWUgaG9tZXBhZ2UpIgorbXNnc3RyICJXZWJwYWdpbmEgdm9vciBkaXQgbWVkaXVtIChiaWp2LiBhcnRpZXN0IG9mIGZpbG0td2VicGFnaW5hKSIKKworbXNnaWQgImRlc2NyaXB0aW9uIgorbXNnc3RyICJvbXNjaHJpanZpbmciCisKK21zZ2lkICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCittc2dzdHIgImtvcnRlIHRla3N0IGRpZSBkZSBpbmhvdWQgdmFuIGhldCBzdHVrIG9tc2NocmlqZnQiCisKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICJ2ZXJzaWUiCisKK21zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKK21zZ3N0ciAidmVyc2llIHZhbiBkaXQgc3R1ayIKKworbXNnaWQgIklTUkMiCittc2dzdHIgIklTUkMiCisKK21zZ2lkICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCittc2dzdHIgIkludGVybmF0aW9uYWxlIFN0YW5kYWFyZCBPcG5hbWUgQ29kZSAtIHppZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgorCittc2dpZCAib3JnYW5pemF0aW9uIgorbXNnc3RyICJvcmdhbmlzYXRpZSIKKworbXNnaWQgImNvcHlyaWdodCIKK21zZ3N0ciAiYXV0ZXVyc3JlY2h0IgorCittc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiYXV0ZXVyc3JlY2h0dmVybWVsZGluZyB2YW4gaGV0IHN0dWsiCisKK21zZ2lkICJjb3B5cmlnaHQgdXJpIgorbXNnc3RyICJhdXRldXJzcmVjaHQtdXJpIgorCittc2dpZCAiVVJJIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJVUkkgbmFhciBkZSBhdXRldXJzcmVjaHR2ZXJtZWxkaW5nIHZhbiBkZSBnZWdldmVucyIKKworbXNnaWQgImVuY29kZWQgYnkiCittc2dzdHIgImdlY29kZWVyZCBkb29yIgorCittc2dpZCAibmFtZSBvZiB0aGUgZW5jb2RpbmcgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiIKK21zZ3N0ciAibmFhbSB2YW4gZGUgY29kZXJlbmRlIHBlcnNvb24gb2Ygb3JnYW5pc2F0aWUiCisKK21zZ2lkICJjb250YWN0IgorbXNnc3RyICJjb250YWN0IgorCittc2dpZCAiY29udGFjdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiY29udGFjdGluZm9ybWF0aWUiCisKK21zZ2lkICJsaWNlbnNlIgorbXNnc3RyICJsaWNlbnRpZSIKKworbXNnaWQgImxpY2Vuc2Ugb2YgZGF0YSIKK21zZ3N0ciAibGljZW50aWUgdmFuIGhldCBzdHVrIgorCittc2dpZCAibGljZW5zZSB1cmkiCittc2dzdHIgImxpY2VudGllLXVyaSIKKworbXNnaWQgIlVSSSB0byB0aGUgbGljZW5zZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiVVJJIG5hYXIgZGUgbGljZW50aWUgdmFuIGRlIGdlZ2V2ZW5zIgorCittc2dpZCAicGVyZm9ybWVyIgorbXNnc3RyICJ1aXR2b2VyZGVyIgorCittc2dpZCAicGVyc29uKHMpIHBlcmZvcm1pbmciCittc2dzdHIgInBlcnNvKG8pbihlbikgZGllIGhldCBzdHVrIHVpdHZvZXJlbiIKKworbXNnaWQgImNvbXBvc2VyIgorbXNnc3RyICJjb21wb25pc3QiCisKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciCittc2dzdHIgInBlcnNvKG8pbihlbikgZGllIGRlIG9wbmFtZSBnZWNvbXBvbmVlcmQgaGViYmVuIgorCittc2dpZCAiZHVyYXRpb24iCittc2dzdHIgImR1dXIiCisKK21zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKK21zZ3N0ciAibGVuZ3RlIGluIEdTdHJlYW1lciB0aWpkc2VlbmhlZGVuIChuYW5vc2Vjb25kZW4pIgorCittc2dpZCAiY29kZWMiCittc2dzdHIgImNvZGVjIgorCittc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJjb2RlYyB3YWFyaW4gaGV0IHN0dWsgaXMgb3BnZXNsYWdlbiIKKworbXNnaWQgInZpZGVvIGNvZGVjIgorbXNnc3RyICJ2aWRlbyBjb2RlYyIKKworbXNnaWQgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiY29kZWMgd2FhcmluIGhldCBzdHVrIGlzIG9wZ2VzbGFnZW4iCisKK21zZ2lkICJhdWRpbyBjb2RlYyIKK21zZ3N0ciAiYXVkaW8gY29kZWMiCisKK21zZ2lkICJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImNvZGVjIHdhYXJpbiBkZSBhdWRpb2dlZ2V2ZW5zIGlzIG9wZ2VzbGFnZW4iCisKK21zZ2lkICJzdWJ0aXRsZSBjb2RlYyIKK21zZ3N0ciAiY29kZWMgdm9vciBvbmRlcnRpdGVsaW5nIgorCittc2dpZCAiY29kZWMgdGhlIHN1YnRpdGxlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJjb2RlYyB3YWFyaW4gZGUgb25kZXJ0aXRlbGluZyBpcyBvcGdlc2xhZ2VuIgorCittc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKK21zZ3N0ciAiY29udGFpbmVyaW5kZWxpbmciCisKK21zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiY29udGFpbmVyaW5kZWxpbmcgd2FhcmluIGRlIGdlZ2V2ZW5zIHppam4gb3BnZXNsYWdlbiIKKworbXNnaWQgImJpdHJhdGUiCittc2dzdHIgImJpdHNuZWxoZWlkIgorCittc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAiZXhhY3RlIG9mIGdlbWlkZGVsZGUgYml0c25lbGhlaWQgaW4gYml0cy9zIgorCittc2dpZCAibm9taW5hbCBiaXRyYXRlIgorbXNnc3RyICJub21pbmFsZSBiaXRzbmVsaGVpZCIKKworbXNnaWQgIm5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgIm5vbWluYWxlIGJpdHNuZWxoZWlkIGluIGJpdHMgcGVyIHNlY29uZGUiCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCittc2dzdHIgIm1pbmltdW0gYml0c25lbGhlaWQiCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJtaW5pbXVtIGJpdHNuZWxoZWlkIGluIGJpdHMgcGVyIHNlY29uZGUiCisKK21zZ2lkICJtYXhpbXVtIGJpdHJhdGUiCittc2dzdHIgIm1heGltdW0gYml0c25lbGhlaWQiCisKK21zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJtYXhpbXVtIGJpdHNuZWxoZWlkIGluIGJpdHMgcGVyIHNlY29uZGUiCisKK21zZ2lkICJlbmNvZGVyIgorbXNnc3RyICJlbmNvZGVyIgorCittc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiZW5jb2RlciBnZWJydWlrdCBvbSBkZXplIHN0cm9vbSB0ZSBjb2RlcmVuIgorCittc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgorbXNnc3RyICJlbmNvZGVyIHZlcnNpZSIKKworbXNnaWQgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCittc2dzdHIgInZlcnNpZSB2YW4gZGUgZW5jb2RlciBnZWJydWlrdCBvbSBkZXplIHN0cm9vbSB0ZSBjb2RlcmVuIgorCittc2dpZCAic2VyaWFsIgorbXNnc3RyICJ2b2xnbnVtbWVyIgorCittc2dpZCAic2VyaWFsIG51bWJlciBvZiB0cmFjayIKK21zZ3N0ciAidm9sZ251bW1lciB2YW4gZGl0IG51bW1lciIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKK21zZ3N0ciAiYWFuZ2VwYXN0ZS1nZWx1aWRzc3Rlcmt0ZSBudW1tZXIiCisKK21zZ2lkICJ0cmFjayBnYWluIGluIGRiIgorbXNnc3RyICJ2ZXJzdGVya2luZyB2YW4gbnVtbWVyIGluIGRiIgorCittc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBwZWFrIgorbXNnc3RyICJhYW5nZXBhc3RlLWdlbHVpZHNzdGVya3RlIHBpZWsgdmFuIG51bW1lciIKKworbXNnaWQgInBlYWsgb2YgdGhlIHRyYWNrIgorbXNnc3RyICJwaWVrIHZhbiBoZXQgbnVtbWVyIgorCittc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBnYWluIgorbXNnc3RyICJhYW5nZXBhc3RlLWdlbHVpZHNzdGVya3RlIGFsYnVtIgorCittc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKK21zZ3N0ciAidmVyc3RlcmtpbmcgYWxidW0gaW4gZGIiCisKK21zZ2lkICJyZXBsYXlnYWluIGFsYnVtIHBlYWsiCittc2dzdHIgImFhbmdlcGFzdGUtZ2VsdWlkc3N0ZXJrdGUgcGllayB2YW4gYWxidW0iCisKK21zZ2lkICJwZWFrIG9mIHRoZSBhbGJ1bSIKK21zZ3N0ciAicGllayB2YW4gaGV0IGFsYnVtIgorCittc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCittc2dzdHIgInJlZmVyZW50aWVuaXZlYXUgdmFuIGFhbmdlcGFzdGUtZ2VsdWlkc3N0ZXJrdGUgdmFuIG51bW1lciIKKworbXNnaWQgInJlZmVyZW5jZSBsZXZlbCBvZiB0cmFjayBhbmQgYWxidW0gZ2FpbiB2YWx1ZXMiCittc2dzdHIgInJlZmVyZW50aWVuaXZlYXUgdmFuIGRlIHdhYXJkZSB2YW4gdGFyY2stIGVuIGFsYnVtZ2VsdWlkc3Rlcmt0ZSIKKworbXNnaWQgImxhbmd1YWdlIGNvZGUiCittc2dzdHIgInRhYWxjb2RlIgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIgorbXNnc3RyICJ0YWFsY29kZSB2YW4gZGV6ZSBzdHJvb20sIGNvbmZvcm0gSVNPLTYzOS0xIgorCittc2dpZCAiaW1hZ2UiCittc2dzdHIgImFmYmVlbGRpbmciCisKK21zZ2lkICJpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICJhZmJlZWxkaW5nIGJlaG9yZW5kZSBiaWogZGV6ZSBzdHJvb20iCisKKyMuIFRSQU5TTEFUT1JTOiAncHJldmlldyBpbWFnZScgPSBpbWFnZSB0aGF0IHNob3dzIGEgcHJldmlldyBvZiB0aGUgZnVsbCBpbWFnZQorbXNnaWQgInByZXZpZXcgaW1hZ2UiCittc2dzdHIgInZvb3JiZWVsZGFmYmVlbGRpbmciCisKK21zZ2lkICJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgInZvb3JiZWVsZGFmYmVlbGRpbmcgYmVob3JlbmRlIGJpaiBkZXplIHN0cm9vbSIKKworbXNnaWQgImF0dGFjaG1lbnQiCittc2dzdHIgImJpamxhZ2UiCisKK21zZ2lkICJmaWxlIGF0dGFjaGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICJiZXN0YW5kIGJlaG9yZW5kZSBiaWogZGV6ZSBzdHJvb20iCisKK21zZ2lkICJiZWF0cyBwZXIgbWludXRlIgorbXNnc3RyICJzbGFnZW4gcGVyIG1pbnV1dCIKKworbXNnaWQgIm51bWJlciBvZiBiZWF0cyBwZXIgbWludXRlIGluIGF1ZGlvIgorbXNnc3RyICJhYW50YWwgc2xhZ2VuIHBlciBtaW51dXQgaW4gYXVkaW8iCisKK21zZ2lkICJrZXl3b3JkcyIKK21zZ3N0ciAidHJlZndvb3JkZW4iCisKK21zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKK21zZ3N0ciAia29tbWEgZ2VzY2hlaWRlbiB0cmVmd29vcmRlbiBkaWUgZGUgaW5ob3VkIG9tc2NocmlqdmVuIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIG5hbWUiCittc2dzdHIgIm5hYW0gZ2VvZ3JhZmlzY2hlIGxvY2F0aWUiCisKK21zZ2lkICIiCisiaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpdmUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yICIKKyJwcm9kdWNlZCIKK21zZ3N0ciAiIgorImxlZXNiYXJlIGJlc2NocmlqdmluZyB2YW4gZGUgbG9jYXRpZSB3YWFyIGhldCBtZWRpdW0gaXMgb3BnZW5vbWVuIG9mICIKKyJnZXByb2R1Y2VlcmQiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCittc2dzdHIgImxlbmd0ZWdyYWFkIHZhbiBkZSBnZW9ncmFmaXNjaGUgbG9jYXRpZSIKKworbXNnaWQgIiIKKyJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCisic291dGhlcm4gbGF0aXR1ZGVzKSIKK21zZ3N0ciAiIgorImxlbmd0ZWdyYWFkIHZhbiBkZSBnZW9ncmFmaXNjaGUgbG9jYXRpZSB2YW4gd2FhciBoZXQgbWVkaXVtIGlzIG9wZ2Vub21lbiBvZiAiCisiZ2Vwcm9kdWNlZXJkIGluIGdyYWRlbiB2b2xnZW5zIFdHUzg0IChudWwgb3AgZGUgZXZlbmFhciwgbmVnYXRpZXZlIHdhYXJkZW4gIgorInZvb3IgenVpZGVsaWprZSBsZW5ndGVncmFkZW4pIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKK21zZ3N0ciAiYnJlZWR0ZWdyYWFkIHZhbiBkZSBnZW9ncmFmaXNjaGUgbG9jYXRpZSIKKworbXNnaWQgIiIKKyJnZW8gbG9uZ2l0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCisiZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIHByaW1lIG1lcmlkaWFuIGluIEdyZWVud2ljaC9VSywgICIKKyJuZWdhdGl2ZSB2YWx1ZXMgZm9yIHdlc3Rlcm4gbG9uZ2l0dWRlcykiCittc2dzdHIgIiIKKyJicmVlZHRlZ3JhYWQgdmFuIGRlIGdlb2dyYWZpc2NoZSBsb2NhdGllIHZhbiB3YWFyIGhldCBtZWRpdW0gaXMgb3BnZW5vbWVuIG9mICIKKyJnZXByb2R1Y2VlcmQgaW4gZ3JhZGVuIHZvbGdlbnMgV0dTODQgKG51bCBvcCBwcmltYWlyZSBtZXJpZGlhYW4sIG5lZ2F0aWV2ZSAiCisid2FhcmRlbiB2b29yIHdlc3RlbGlqa2UgYnJlZWR0ZWdyYWRlbikiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gZWxldmF0aW9uIgorbXNnc3RyICJob29ndGUgdmFuIGRlIGdlb2dyYWZpc2NoZSBsb2NhdGllIgorCittc2dpZCAiIgorImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCisiYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKK21zZ3N0ciAiIgorImhvb2d0ZSB2YW4gZGUgZ2VvZ3JhZmlzY2hlIGxvY2F0aWUgdmFuIHdhYXIgaGV0IG1lZGl1bSBpcyBvcGdlbm9tZW4gb2YgIgorImdlcHJvZHVjZWVyZCBpbiBtZXRlcnMgdm9sZ2VucyBXR1M4NCAobnVsIG9wIGdlbWlkZGVsZCB6ZWVuaXZlYXUpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNvdW50cnkiCittc2dzdHIgImdlb2dyYWZpc2NoZSBsb2NhdGllIHZhbiBoZXQgbGFuZCIKKworbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICJsYW5kIChFbmdlbHNlIG5hYW0pIHdhYXIgaGV0IG1lZGl1bSBpcyBvcGdlbm9tZW4gb2YgZ2Vwcm9kdWNlZXJkIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCittc2dzdHIgImdlb2dyYWZpc2NoZSBsb2NhdGllIHZhbiBkZSBzdGFkIgorCittc2dpZCAiY2l0eSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCittc2dzdHIgInN0YWQgKEVuZ2Vsc2UgbmFhbSkgd2FhciBoZXQgbWVkaXVtIGlzIG9wZ2Vub21lbiBvZiBnZXByb2R1Y2VlcmQiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gc3VibG9jYXRpb24iCittc2dzdHIgImdlb2dyYWZpc2NoZSBsb2NhdGllIHZhbiBkZSBzdWJsb2NhdGllIgorCittc2dpZCAiIgorImEgbG9jYXRpb24gd2hpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgorInRoZSBuZWlnaGJvcmhvb2QpIgorbXNnc3RyICIiCisiZWVuIHN1YmxvY2F0aWUgaW4gZWVuIHN0YWQgd2FhciBoZXQgbWVkaXVtIGlzIG9wZ2Vub21lbiBvZiBnZXByb2R1Y2VlcmQgIgorIihiaWp2LiBkZSBidXVydCkiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gaG9yaXpvbnRhbCBlcnJvciIKK21zZ3N0ciAiZm91dCBpbiBob3Jpem9udGFsZSBnZW8tbG9jYXRpZSIKKworbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgorbXNnc3RyICJ2ZXJ3YWNodGUgZm91dCB2YW4gZGUgaG9yaXpvbnRhbGUgcG9zaXRpb25lcmluZ3NhZm1ldGluZ2VuIChpbiBtZXRlcnMpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgorbXNnc3RyICJ2ZXJwbGFhdHNpbmdzc25lbGhlaWQgb3AgZGUgZ2VvZ3JhZmlzY2hlIGxvY2F0aWUiCisKK21zZ2lkICIiCisibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBpbiBtL3MiCittc2dzdHIgInZlcnBsYWF0c2luZ3NzbmVsaGVpZCB2YW4gaGV0IG9wbmFtZWFwcGFyYWF0IHRpamRlbnMgZGUgb3BuYW1lIGluIG0vcyIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBkaXJlY3Rpb24iCittc2dzdHIgImJld2VnaW5nc3JpY2h0aW5nIG9wIGRlIGdlb2dyYWZpc2NoZSBsb2NhdGllIgorCittc2dpZCAiIgorImluZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBvZiBhICIKKyJtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgMCAiCisibWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgorbXNnc3RyICIiCisiZ2VlZnQgZGUgYmV3ZWdpbmdzcmljaHRpbmcgYWFuIHZhbiBoZXQgYXBwYXJhYXQgZGF0IGRlIG9wbmFtZSBvcCBoZXQgbWVkaXVtICIKKyJkb2V0LiBIZXQgd29yZHQgd2VlcmdlZ2V2ZW4gaW4gZ3JhZGVuIGluIGRyaWp2ZW5kZWtvbW1hdm9ybSwgMCBiZXRla2VudCBoZXQgIgorImdlb2dyYWZpc2NoZSBub29yZGVuIGVuIG5lZW0gcmVjaHRzb20gdG9lIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgorbXNnc3RyICJvcG5hbWVyaWNodGluZyBvcCBkZSBnZW9ncmFmaXNjaGUgbG9jYXRpZSIKKworbXNnaWQgIiIKKyJpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nICBhIG1lZGlhLiAiCisiSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCAgcmVwcmVzZW50YXRpb24sIDAgbWVhbnMgdGhlICIKKyJnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKK21zZ3N0ciAiIgorImdlZWZ0IGRlIHJpY2h0aW5nIGFhbiB3YWFybmFhciBoZXQgYXBwYXJhYXQgd2lqc3QgZGF0IGRlIG9wbmFtZSBvcCBoZXQgIgorIm1lZGl1bSBkb2V0LiBIZXQgd29yZHQgd2VlcmdlZ2V2ZW4gaW4gZ3JhZGVuIGluIGRyaWp2ZW5kZWtvbW1hdm9ybSwgMCAiCisiYmV0ZWtlbnQgaGV0IGdlb2dyYWZpc2NoZSBub29yZGVuIGVuIG5lZW0gcmVjaHRzb20gdG9lIgorCisjLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKK21zZ2lkICJzaG93IG5hbWUiCittc2dzdHIgIm5hYW0gdG9uZW4iCisKK21zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgorbXNnc3RyICJNZWRpdW1uYWFtIHZhbiBkZSBzaG93IHZhbiBkZSB0di9wb2RjYXN0L3NlcmllIgorCisjLiBUUkFOU0xBVE9SUzogJ3Nob3cgc29ydG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lIGFzIHVzZWQgZm9yIHNvcnRpbmcgcHVycG9zZXMnIGhlcmUKK21zZ2lkICJzaG93IHNvcnRuYW1lIgorbXNnc3RyICJuYWFtIHZvb3Igc29ydGVyZW4iCisKK21zZ2lkICIiCisiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIk1lZGl1bW5hYW0gdmFuIGRlIHNob3cgdmFuIGRlIHR2L3BvZGNhc3Qvc2VyaWUsIHZvb3Igc29ydGVyZW4iCisKK21zZ2lkICJlcGlzb2RlIG51bWJlciIKK21zZ3N0ciAiZXBpc29kZW51bW1lciIKKworbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICJIZXQgZXBpc29kZW51bW1lciBpbiBoZXQgc2Vpem9lbiB3YWFyIGhldCBtZWRpdW0gZGVlbCB2YW4gaXMiCisKK21zZ2lkICJzZWFzb24gbnVtYmVyIgorbXNnc3RyICJzZWl6b2VubnVtbWVyIgorCittc2dpZCAiVGhlIHNlYXNvbiBudW1iZXIgb2YgdGhlIHNob3cgdGhlIG1lZGlhIGlzIHBhcnQgb2YiCittc2dzdHIgIkhldCBudW1tZXIgdmFuIGhldCBzZWl6b2VuIHZhbiBkZSBzaG93IHdhYXIgaGV0IG1lZGl1bSBkZWVsIHZhbiBpcyIKKworbXNnaWQgImx5cmljcyIKK21zZ3N0ciAibGllZHRla3N0IgorCittc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgorbXNnc3RyICJEZSBsaWVkdGVrc3QgdmFuIGhldCBtZWRpdW0sIGdld29vbmxpamsgdm9vciBzb25ncyBnZWJydWlrdCIKKworbXNnaWQgImNvbXBvc2VyIHNvcnRuYW1lIgorbXNnc3RyICJjb21wb25pc3Qgdm9vciBzb3J0ZXJlbiIKKworbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZywgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIiIKKyJwZXJzbyhvKW4oZW4pIGRpZSBkZSBvcG5hbWUgZ2Vjb21wb25lZXJkIGhlKGVmdCliYmVuLCBnZWJydWlrdCB2b29yIHNvcnRlcmVuIgorCittc2dpZCAiZ3JvdXBpbmciCittc2dzdHIgImdyb2VwZXJpbmciCisKK21zZ2lkICIiCisiR3JvdXBzIHJlbGF0ZWQgbWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSB0cmFja3MsIGxpa2UgdGhlIGRpZmZlcmVudCBwaWVjZXMgIgorIm9mIGEgY29uY2VydG8uIEl0IGlzIGEgaGlnaGVyIGxldmVsIHRoYW4gYSB0cmFjaywgYnV0IGxvd2VyIHRoYW4gYW4gYWxidW0iCittc2dzdHIgIiIKKyJHcm9lcGVuIGdlcmVsYXRlZXJkZSBtZWRpYSBkaWUgbWVlcmRlcmUgdHJhY2tzIG9tdmF0dGVuLCB6b2FscyBkZSAiCisidmVyc2NoaWxsZW5kZSBkZWxlbiB2YW4gZWVuIGNvbmNlcnQuIEhldCBpcyBlZW4gaG9nZXIgbml2ZWF1IGRhbiBlZW4gdHJhY2ssICIKKyJtYWF0IGxhZ2VyIGRhbiBlZW4gYWxidW0iCisKK21zZ2lkICJ1c2VyIHJhdGluZyIKK21zZ3N0ciAid2FhcmRlcmluZyB2YW4gZ2VicnVpa2VyIgorCittc2dpZCAiIgorIlJhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgdXNlci4gVGhlIGhpZ2hlciB0aGUgcmFuaywgdGhlIG1vcmUgdGhlIHVzZXIgbGlrZXMgIgorInRoaXMgbWVkaWEiCittc2dzdHIgIiIKKyJXYWFyZGVyaW5nIHRvZWdla2VuZCBkb29yIGVlbiBnZWJydWlrZXIuIEhvZSBob2dlciBkZSB3YWFyZGVyaW5nLCBob2UgbWVlciAiCisiZGUgZ2VicnVpa2VyIGRpdCBtZWRpdW0gd2FhcmRlZXJ0IgorCittc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKK21zZ3N0ciAiYXBwYXJhYXRmYWJyaWthbnQiCisKK21zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICIiCisiRmFicmlrYW50IHZhbiBoZXQgYXBwYXJhYXQgZGF0IGdlYnJ1aWt0IHdvcmR0IG9tIGRpdCBtZWRpdW0gYWFuIHRlIG1ha2VuIgorCittc2dpZCAiZGV2aWNlIG1vZGVsIgorbXNnc3RyICJhcHBhcmFhdG1vZGVsIgorCittc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICJNb2RlbCB2YW4gaGV0IGFwcGFyYWF0IGRhdCBnZWJydWlrdCB3b3JkdCBvbSBkaXQgbWVkaXVtIGFhbiB0ZSBtYWtlbiIKKworbXNnaWQgImFwcGxpY2F0aW9uIG5hbWUiCittc2dzdHIgInRvZXBhc3NpbmdzbmFhbSIKKworbXNnaWQgIkFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSIKK21zZ3N0ciAiR2VicnVpa3RlIHRvZXBhc3Npbmcgb20gaGV0IG1lZGl1bSBhYW4gdGUgbWFrZW4iCisKK21zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgorbXNnc3RyICJ0b2VwYXNzaW5nc2dlZ2V2ZW5zIgorCittc2dpZCAiQXJiaXRyYXJ5IGFwcGxpY2F0aW9uIGRhdGEgdG8gYmUgc2VyaWFsaXplZCBpbnRvIHRoZSBtZWRpYSIKK21zZ3N0ciAiIgorIldpbGxla2V1cmlnZSB0b2VwYXNzaW5nc2dlZ2V2ZW5zIGRpZSBnZXNlcmlhbGlzZWVyZCBtb2V0ZW4gd29yZGVuIG9wIGhldCAiCisibWVkaXVtIgorCittc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCittc2dzdHIgIm9yacOrbnRhdGllIHZhbiBkZSBhZmJlZWxkaW5nIgorCittc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgorbXNnc3RyICJIb2UgZGUgYWZiZWVsZGluZyBnZXJvdGVlcmQgbW9ldCB3b3JkZW4gb2YgZ2VzcGllZ2VsZCBiaWogdG9uZW4iCisKK21zZ2lkICIsICIKK21zZ3N0ciAiLCAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAiRk9VVDogdmFuIGVsZW1lbnQgJXM6ICVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKKyIlc1xuIgorbXNnc3RyICIiCisiRXh0cmEgZGVidWctaW5mb3JtYXRpZTpcbiIKKyIlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgInNwZWNpZmllZCBlbXB0eSBiaW4gXCIlc1wiLCBub3QgYWxsb3dlZCIKK21zZ3N0ciAibGVnZSB0b24gXCIlc1wiIG9wZ2VnZXZlbiwgbmlldCB0b2VnZWxhdGVuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHNraXBwaW5nIgorbXNnc3RyICJnZWVuIHRvbiBcIiVzXCIsIG92ZXJnZXNsYWdlbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCittc2dzdHIgImdlZW4gZWlnZW5zY2hhcCBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgorbXNnc3RyICJrb24gZWlnZW5zY2hhcCBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgbmlldCBvcCBcIiVzXCIgaW5zdGVsbGVuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgorbXNnc3RyICJrb24gJXMgbmlldCB2ZXJiaW5kZW4gbWV0ICVzIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICJnZWVuIGVsZW1lbnQgXCIlc1wiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKK21zZ3N0ciAia29uIG1vZ2VsaWpraGVkZW4gXCIlc1wiIG5pZXQgdmVyd2Vya2VuIgorCittc2dpZCAibGluayB3aXRob3V0IHNvdXJjZSBlbGVtZW50IgorbXNnc3RyICJ2ZXJiaW5kaW5nIHpvbmRlciBicm9uZWxlbWVudCIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzaW5rIGVsZW1lbnQiCittc2dzdHIgInZlcmJpbmRpbmcgem9uZGVyIGRvZWxlbGVtZW50IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNvdXJjZSBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJnZWVuIGJyb25lbGVtZW50IHZvb3IgVVJJIFwiJXNcIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBlbGVtZW50IHRvIGxpbmsgVVJJIFwiJXNcIiB0byIKK21zZ3N0ciAiZ2VlbiBlbGVtZW50IG9tIFVSSSBcIiVzXCIgbWVlIHRlIHZlcmJpbmRlbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgImdlZW4gZG9lbGVsZW1lbnQgdm9vciBVUkkgXCIlc1wiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAia29uIGRvZWxlbGVtZW50IG5pZXQgdmVyYmluZGVuIHZvb3IgVVJJIFwiJXNcIiIKKworbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgorbXNnc3RyICJsZWdlIHBpanBsaWpuIG5pZXQgdG9lZ2VsYXRlbiIKKworbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKK21zZ3N0ciAiSW50ZXJuZSBmb3V0IG1ldCBkZSBrbG9rLiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCittc2dzdHIgIkludGVybmUgZm91dCBtZXQgZ2VnZXZlbnNkb29ydm9lci4iCisKK21zZ2lkICJBIGxvdCBvZiBidWZmZXJzIGFyZSBiZWluZyBkcm9wcGVkLiIKK21zZ3N0ciAiRXIgd29yZGVuIHZlZWwgYnVmZmVycyBnZWRyb3B0LiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBwcm9ibGVtLiIKK21zZ3N0ciAiSW50ZXJuIHByb2JsZWVtIG1ldCBnZWdldmVuc2Rvb3J2b2VyLiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiSW50ZXJuZSBmb3V0IGluIGdlZ2V2ZW5zc3Ryb29tLiIKKworbXNnaWQgIkZpbHRlciBjYXBzIgorbXNnc3RyICJGaWx0ZXJvcHpldHN0dWtrZW4iCisKK21zZ2lkICIiCisiUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCisicHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKK21zZ3N0ciAiIgorIkJlcGVyayBoZXQgYWFudGFsIHRvZWdlc3RhbmUgbW9nZWxpamtoZWRlbiAoTlVMIGJldGVrZW50IGFsbGUpLiBIZXQgIgorImluc3RlbGxlbiAgdmFuIGRlemUgZWlnZW5zY2hhcCB2ZXJlaXN0IGVlbiByZWZlcmVudGllIG5hYXIgaGV0IGdlZ2V2ZW4gIgorIkdzdENhcHMtb2JqZWN0LiIKKworbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJHZWVuIGJlc3RhbmRzbmFhbSBnZWdldmVuIG9tIHRlIHNjaHJpanZlbi4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJLYW4gYmVzdGFuZCBcIiVzXCIgbmlldCBvcGVuZW4gb20gdGUgc2NocmlqdmVuLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiRm91dCBiaWogaGV0IHNsdWl0ZW4gdmFuIGJlc3RhbmQgXCIlc1wiLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiRm91dCBiaWogZWVuIHNlZWsgaW4gYmVzdGFuZCBcIiVzXCIuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgorbXNnc3RyICJGb3V0IGJpaiBoZXQgc2NocmlqdmVuIG5hYXIgYmVzdGFuZCBcIiVzXCIuIgorCittc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCittc2dzdHIgIkdlZW4gYmVzdGFuZHNuYWFtIGdlZ2V2ZW4gb20gdGUgbGV6ZW4uIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiS2FuIGJlc3RhbmQgXCIlc1wiIG5pZXQgb3BlbmVuIG9tIHRlIGxlemVuLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGluZm8gb24gXCIlc1wiLiIKK21zZ3N0ciAiS2FuIGdlZW4gaW5mbyBvdmVyIFwiJXNcIiBrcmlqZ2VuLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIgorbXNnc3RyICJcIiVzXCIgaXMgZWVuIG1hcC4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZSBcIiVzXCIgaXMgYSBzb2NrZXQuIgorbXNnc3RyICJCZXN0YW5kIFwiJXNcIiBpcyBlZW4gc29ja2V0LiIKKworbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCittc2dzdHIgIk1pc2x1a3QgbmEgaXRlcmF0aWVzIHpvYWxzIGdldnJhYWdkLiIKKworbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCittc2dzdHIgIkdlZW4gdGlqZGVsaWprZSBtYXAgb3BnZWdldmVuLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIgorbXNnc3RyICJLb24gZ2VlbiB0aWpkZWxpamsgYmVzdGFuZCBcIiVzXCIgYWFubWFrZW4uIgorCittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKK21zZ3N0ciAiRm91dCBiaWogaGV0IHNjaHJpanZlbiBvbSBiZXN0YW5kIHRlIGRvd25sb2FkZW4uIgorCittc2dpZCAiY2FwcyIKK21zZ3N0ciAibW9nZWxpamtoZWRlbiIKKworbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCittc2dzdHIgImdlZGV0ZWN0ZWVyZGUgbW9nZWxpamtoZWRlbiBpbiBzdHJvb20iCisKK21zZ2lkICJtaW5pbXVtIgorbXNnc3RyICJtaW5pbXVtIgorCittc2dpZCAibWF4aW11bSIKK21zZ3N0ciAibWF4aW11bSIKKworbXNnaWQgImZvcmNlIGNhcHMiCittc2dzdHIgImZvcmNlZXIgbW9nZWxpamtoZWRlbiIKKworbXNnaWQgImZvcmNlIGNhcHMgd2l0aG91dCBkb2luZyBhIHR5cGVmaW5kIgorbXNnc3RyICJmb3JjZWVyIG1vZ2VsaWpraGVkZW4gem9uZGVyIGVlbiBcInR5cGVmaW5kXCIgdGUgZG9lbiIKKworbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKK21zZ3N0ciAiU3Ryb29tIHpvbmRlciBnZWdldmVucy4iCisKK21zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgorbXNnc3RyICJHZcOvbXBsZW1lbnRlZXJkZSBpbnRlcmZhY2VzOlxuIgorCittc2dpZCAicmVhZGFibGUiCittc2dzdHIgImxlZXNiYWFyIgorCittc2dpZCAid3JpdGFibGUiCittc2dzdHIgInNjaHJpamZiYWFyIgorCittc2dpZCAiY29udHJvbGxhYmxlIgorbXNnc3RyICJjb250cm9sZWVyYmFhciIKKworbXNnaWQgImNoYW5nZWFibGUgaW4gTlVMTCwgUkVBRFksIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlIgorbXNnc3RyICJ0ZSB2ZXJhbmRlcmVuIGluIE5VTCwgR0VSRUVELSwgR0VQQVVaRUVSRC0gb2YgU1BFRUwtc3RhdHVzIgorCittc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwsIFJFQURZIG9yIFBBVVNFRCBzdGF0ZSIKK21zZ3N0ciAidGUgdmVyYW5kZXJlbiBpbiBOVUwsIEdFUkVFRC0gb2YgR0VQQVVaRUVSRC1zdGF0dXMiCisKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKK21zZ3N0ciAiYWxsZWVuIHRlIHZlcmFuZGVyZW4gaW4gTlVMIG9mIEdFUkVFRC1zdGF0dXMiCisKK21zZ2lkICJCbGFja2xpc3RlZCBmaWxlczoiCittc2dzdHIgIkJlc3RhbmRlbiBvcCBkZSB6d2FydGUgbGlqc3Q6IgorCittc2dpZCAiVG90YWwgY291bnQ6ICIKK21zZ3N0ciAiVG90YWFsIGFhbnRhbDogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdGVkIGZpbGUiCittc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdGVkIGZpbGVzIgorbXNnc3RyWzBdICIlZCBiZXN0YW5kIG9wIGRlIHp3YXJ0ZSBsaWpzdCIKK21zZ3N0clsxXSAiJWQgYmVzdGFuZGVuIG9wIGRlIHp3YXJ0ZSBsaWpzdCIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBwbHVnaW4iCittc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCittc2dzdHJbMF0gIiVkIHBsdWdpbiIKK21zZ3N0clsxXSAiJWQgcGx1Z2lucyIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBibGFja2xpc3QgZW50cnkiCittc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdCBlbnRyaWVzIgorbXNnc3RyWzBdICIlZCBpdGVtIG9wIGRlIHp3YXJ0ZSBsaWpzdCIKK21zZ3N0clsxXSAiJWQgaXRlbXMgb3AgZGUgendhcnRlIGxpanN0IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGZlYXR1cmUiCittc2dpZF9wbHVyYWwgIiVkIGZlYXR1cmVzIgorbXNnc3RyWzBdICIlZCBtb2dlbGlqa2hlaWQiCittc2dzdHJbMV0gIiVkIG1vZ2VsaWpraGVkZW4iCisKK21zZ2lkICJQcmludCBhbGwgZWxlbWVudHMiCittc2dzdHIgIkFsbGUgZWxlbWVudGVuIHdlZXJnZXZlbiIKKworbXNnaWQgIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHIgIkRydWsgZGUgbGlqc3QgbWV0IGJlc3RhbmRlbiBvcCBkZSB6d2FydGUgbGlqc3QgYWYiCisKK21zZ2lkICIiCisiUHJpbnQgYSBtYWNoaW5lLXBhcnNhYmxlIGxpc3Qgb2YgZmVhdHVyZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4gb3IgYWxsICIKKyJwbHVnaW5zIHByb3ZpZGUuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIGluIGNvbm5lY3Rpb24gd2l0aCBleHRlcm5hbCAiCisiYXV0b21hdGljIHBsdWdpbiBpbnN0YWxsYXRpb24gbWVjaGFuaXNtcyIKK21zZ3N0ciAiIgorIlRvb24gZWVuIGRvb3IgZWVuIG1hY2hpbmUgdGUgb250bGVkZW4gbGlqc3QgdmFuIG1vZ2VsaWpraGVkZW4gZGllIGRlICIKKyJnZXNwZWNpZmljZWVyZGUgcGx1Z2luIG9mIGFsbGUgcGx1Z2lucyBhYW5iaWVkZW4uXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJ1aWtiYWFyIGluIHZlcmJhbmQgbWV0IGV4dGVybmUgIgorImF1dG9tYXRpc2NoZSBwbHVnaW4taW5zdGFsbGF0aWVtZWNoYW5pc21lbiIKKworbXNnaWQgIkxpc3QgdGhlIHBsdWdpbiBjb250ZW50cyIKK21zZ3N0ciAiVG9vbiBkZSBpbmhvdWQgdmFuIGRlIHBsdWdpbiIKKworbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKK21zZ3N0ciAiIgorIlRvb24gZGUgb25kZXJzdGV1bmRlIFVSSS1zY2hlbWEncyBtZXQgZGUgZWxlbWVudGVuIGRpZSBkZXplIGltcGxlbWVudGVyZW4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGxvYWQgcGx1Z2luIGZpbGU6ICVzXG4iCittc2dzdHIgIkthbiBwbHVnaW4tYmVzdGFuZCBcIiVzXCIgbmlldCBsYWRlblxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgorbXNnc3RyICJHZWVuIGVsZW1lbnQgb2YgcGx1Z2luICclcydcbiIKKworbXNnaWQgIkluZGV4IHN0YXRpc3RpY3MiCittc2dzdHIgIkluZGV4c3RhdGlzdGlla2VuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIGVsZW1lbnQgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAiQmVyaWNodCAjJXUgb250dmFuZ2VuIHVpdCBlbGVtZW50IFwiJXNcIiAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCittc2dzdHIgIkJlcmljaHQgIyV1IG9udHZhbmdlbiB1aXQgcGFkIFwiJXM6JXNcIiAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gb2JqZWN0IFwiJXNcIiAoJXMpOiAiCittc2dzdHIgIkJlcmljaHQgIyV1IG9udHZhbmdlbiB1aXQgb2JqZWN0IFwiJXNcIiAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKK21zZ3N0ciAiQmVyaWNodCAjJXUgKCVzKSBvbnR2YW5nZW46ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgRU9TIGZyb20gZWxlbWVudCBcIiVzXCIuXG4iCittc2dzdHIgIkVpbmRlLXN0cm9vbSBvbnR2YW5nZW4gdmFuIGVsZW1lbnQgXCIlc1wiLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCittc2dzdHIgIlRBRyBHRVZPTkRFTiAgIDogZ2V2b25kZW4gZG9vciBlbGVtZW50IFwiJXNcIi5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCittc2dzdHIgIlRBRyBHRVZPTkRFTiAgIDogZ2V2b25kZW4gZG9vciBwYWQgXCIlczolc1wiLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKK21zZ3N0ciAiVEFHIEdFVk9OREVOICAgOiBnZXZvbmRlbiBkb29yIG9iamVjdCBcIiVzXCIuXG4iCisKK21zZ2lkICJGT1VORCBUQUdcbiIKK21zZ3N0ciAiVEFHIEdFVk9OREVOXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklORk86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorIklORk86XG4iCisiJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCittc2dzdHIgIldBQVJTQ0hVV0lORzogdmFuIGVsZW1lbnQgJXM6ICVzXG4iCisKK21zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIGJ1ZmZlcmluZyB0byBmaW5pc2guLi5cbiIKK21zZ3N0ciAiVm9vcmJlcmVpZCwgd2FjaHQgb3AgZ2VyZWVka29tZW4gdmFuIGRlIGJ1ZmZlcmluZy4uLlxuIgorCittc2dpZCAiYnVmZmVyaW5nLi4uIgorbXNnc3RyICJpbiBidWZmZXIgb3BzbGFhbi4uLiIKKworbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIkJ1ZmZlcmluZyBpcyBnZXJlZWQsIHBpanBsaWpuIGdlemV0IG9wIEFGU1BFTEVOIC4uLlxuIgorCittc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAiV29yZHQgZ2VidWZmZXJkLCBwaWpwbGlqbiBnZXpldCBvcCBQQVVaRSAuLi5cbiIKKworbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCittc2dzdHIgIkhlcnZlcmRlZWwgZGUgdmVydHJhZ2luZy4uLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iCittc2dzdHIgIlN0ZWwgZGUgc3RhdHVzIGluIG9wICVzIHpvYWxzIHZlcnpvY2h0IGRvb3IgJXMuLi5cbiIKKworbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCittc2dzdHIgIkludGVycnVwdDogUGlqcGxpam4gaW5nZXN0ZWxkIG9wIGdlc3RvcHQgLi4uXG4iCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKK21zZ3N0ciAiZ2VlbiBlbGVtZW50IFwiJXNcIiIKKworbXNnaWQgIk91dHB1dCB0YWdzIChhbHNvIGtub3duIGFzIG1ldGFkYXRhKSIKK21zZ3N0ciAiVGFncyAob29rIGJla2VuZCBhbHMgbWV0YWRhdGEpIHdlZXJnZXZlbiIKKworbXNnaWQgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCittc2dzdHIgIlN0YXR1c2luZm9ybWF0aWUgZW4gZWlnZW5zY2hhcHN3YWFyc2NodXdpbmdlbiB3ZWVyZ2V2ZW4iCisKK21zZ2lkICJEbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uIgorbXNnc3RyICJHZWVuIHZvb3J0Z2FuZ3NpbmZvcm1hdGllIGFmZHJ1a2tlbiIKKworbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKK21zZ3N0ciAiVWl0dm9lciIKKworbXNnaWQgIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIFRZUEUiCittc2dzdHIgIlN0YXR1c2luZm9ybWF0aWUgdmFuIHNvb3J0IFNPT1JUIG5pZXQgd2VlcmdldmVuIgorCittc2dpZCAiVFlQRTEsVFlQRTIsLi4uIgorbXNnc3RyICJTT09SVDEsU09PUlQyLC4uLiIKKworbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKK21zZ3N0ciAiR2VlbiBmb3V0YWZoYW5kZWxhYXIgaW5zdGFsbGVyZW4iCisKK21zZ2lkICJQcmludCBhbGxvYyB0cmFjZSAoaWYgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUpIgorbXNnc3RyICJUb2V3aWp6aW5nc3Nwb29yIHdlZXJnZXZlbiAoaW5kaWVuIGFhbmdlemV0IHRpamRlbnMgY29tcGlsZXJlbikiCisKK21zZ2lkICJGb3JjZSBFT1Mgb24gc291cmNlcyBiZWZvcmUgc2h1dHRpbmcgdGhlIHBpcGVsaW5lIGRvd24iCittc2dzdHIgIkZvcmNlZXIgZWVuIEVPUyBvcCBkZSBicm9uIGJpaiBoZXQgYWZzbHVpdGVuIHZhbiBkZSBwaWpwbGlqbiIKKworbXNnaWQgIkdhdGhlciBhbmQgcHJpbnQgaW5kZXggc3RhdGlzdGljcyIKK21zZ3N0ciAiVmVyemFtZWwgZW4gcHJpbnQgaW5kZXhzdGF0aXN0aWVrZW4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZDogJXMuXG4iCittc2dzdHIgIkZPVVQ6IHBpanBsaWpuIGtvbiBuaWV0IGdlbWFha3Qgd29yZGVuOiAlcy5cbiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXG4iCittc2dzdHIgIkZPVVQ6IHBpanBsaWpuIGtvbiBuaWV0IGdlbWFha3Qgd29yZGVuLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGVycm9uZW91cyBwaXBlbGluZTogJXNcbiIKK21zZ3N0ciAiV0FBUlNDSFVXSU5HOiBmb3V0aWV2ZSBwaWpwbGlqbjogJXNcbiIKKworbXNnaWQgIkVSUk9SOiB0aGUgJ3BpcGVsaW5lJyBlbGVtZW50IHdhc24ndCBmb3VuZC5cbiIKK21zZ3N0ciAiRk9VVDogaGV0ICdwaWpwbGlqbicgZWxlbWVudCB3ZXJkIG5pZXQgZ2V2b25kZW4uXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAiUGlqcGxpam4gZ2V6ZXQgb3AgZ2VwYXV6ZWVyZCAuLi5cbiIKKworbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCittc2dzdHIgIkZPVVQ6IHBpanBsaWpuIHdpbCBuaWV0IHBhdXplcmVuLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgorbXNnc3RyICJQaWpwbGlqbiBrbGFhciBlbiBoZWVmdCBQUkVST0xMIG5pZXQgbm9kaWcuLi5cbiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCittc2dzdHIgIlBpanBsaWpuIGlzIGJlemlnIG1ldCBQUkVST0xMIC4uLlxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgorbXNnc3RyICJGT1VUOiBwaWpwbGlqbiB3aWwgbmlldCBQUkVST0xMIHVpdHZvZXJlbi5cbiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExFRCAuLi5cbiIKK21zZ3N0ciAiUGlqcGxpam4ga2xhYXIgbWV0IFBSRVJPTEwgLi4uXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIlBpanBsaWpuIGdlemV0IG9wIGFmc3BlbGVuIC4uLlxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIgorbXNnc3RyICJGT1VUOiBwaWpwbGlqbiB3aWwgbmlldCBhZnNwZWxlbi5cbiIKKworbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIEZvcmNpbmcgRU9TIG9uIHRoZSBwaXBlbGluZVxuIgorbXNnc3RyICJFT1MgYmlqIGFmc2x1aXRlbiBpbmdlc2NoYWtlbGQgLS0gRm9yY2VlciBlZW4gRU9TIG9wIGRlIHBpanBsaWpuXG4iCisKK21zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKK21zZ3N0ciAiV2FjaHQgb3AgRU9TLi4uXG4iCisKK21zZ2lkICJFT1MgcmVjZWl2ZWQgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgorbXNnc3RyICJFT1Mgb250dmFuZ2VuIC0gcGlqcGxpam4gd29yZHQgZ2VzdG9wdC4uLlxuIgorCittc2dpZCAiQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgd2FpdGluZyBmb3IgRU9TXG4iCittc2dzdHIgIkVyIHRyYWQgZWVuIGZvdXQgb3AgYmlqIGhldCB3YWNodGVuIG9wIEVPU1xuIgorCittc2dpZCAiRXhlY3V0aW9uIGVuZGVkIGFmdGVyICUiCittc2dzdHIgIlVpdHZvZXJpbmcgYmXDq2luZGlnZCBuYSAlIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKK21zZ3N0ciAiUGlqcGxpam4gZ2V6ZXQgb3AgZ2VyZWVkIC4uLlxuIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgorbXNnc3RyICJQaWpwbGlqbiBnZXpldCBvcCBOVUxMIC4uLlxuIgorCittc2dpZCAiRnJlZWluZyBwaXBlbGluZSAuLi5cbiIKK21zZ3N0ciAiUGlqcGxpam4gd29yZHQgdnJpamdlbWFha3QgLi4uXG4iCisKKyN+IG1zZ2lkICJVc2FnZTogZ3N0LXhtbGxhdW5jaCA8ZmlsZS54bWw+IFsgZWxlbWVudC5wcm9wZXJ0eT12YWx1ZSAuLi4gXVxuIgorI34gbXNnc3RyICIiCisjfiAiR2VicnVpazogZ3N0LXhtbGxhdW5jaCA8YmVzdGFuZC54bWw+IFsgZWxlbWVudC5laWdlbnNjaGFwPXdhYXJkZSAuLi4gXVxuIgorCisjfiBtc2dpZCAiRVJST1I6IHBhcnNlIG9mIHhtbCBmaWxlICclcycgZmFpbGVkLlxuIgorI34gbXNnc3RyICJGT1VUOiB2ZXJ3ZXJrZW4gdmFuIHhtbC1iZXN0YW5kICclcycgbWlzbHVrdC5cbiIKKworI34gbXNnaWQgIkVSUk9SOiBubyB0b3BsZXZlbCBwaXBlbGluZSBlbGVtZW50IGluIGZpbGUgJyVzJy5cbiIKKyN+IG1zZ3N0ciAiRk9VVDogZ2VlbiBib3ZlbnN0ZSBwaWpwbGlqbi1lbGVtZW50IGdldm9uZGVuIGluIGZpbGUgJyVzJy5cbiIKKworI34gbXNnaWQgIldBUk5JTkc6IG9ubHkgb25lIHRvcGxldmVsIGVsZW1lbnQgaXMgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIldBQVJTQ0hVV0lORzogc2xlY2h0cyDDqcOpbiBlbGVtZW50IG9wIGhldCBob29nc3RlIG5pdmVhdSBvbmRlcnN0ZXVuZCBvcCAiCisjfiAiZGl0IG1vbWVudC5cbiIKKworI34gbXNnaWQgIkVSUk9SOiBjb3VsZCBub3QgcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50ICVkOiAlcy5cbiIKKyN+IG1zZ3N0ciAiRk9VVDoga29uIGFyZ3VtZW50ICVkIG9wIG9wZHJhY2h0cmVnZWwgbmlldCB2ZXJ3ZXJrZW46ICVzLlxuIgorCisjfiBtc2dpZCAiV0FSTklORzogZWxlbWVudCBuYW1lZCAnJXMnIG5vdCBmb3VuZC5cbiIKKyN+IG1zZ3N0ciAiV0FBUlNDSFVXSU5HOiBlbGVtZW50IG1ldCBuYWFtICclcycgbmlldCBnZXZvbmRlbi5cbiIKKworI34gbXNnaWQgIlNhdmUgeG1sIHJlcHJlc2VudGF0aW9uIG9mIHBpcGVsaW5lIHRvIEZJTEUgYW5kIGV4aXQiCisjfiBtc2dzdHIgIlhNTC1yZXByZXNlbnRhdGllIHZhbiBwaWpwbGlqbiBpbiBCRVNUQU5EIG9wc2xhYW4gZW4gYWZzbHVpdGVuIgorCisjfiBtc2dpZCAiRklMRSIKKyN+IG1zZ3N0ciAiQkVTVEFORCIKKworI34gbXNnaWQgIkRvIG5vdCBpbnN0YWxsIHNpZ25hbCBoYW5kbGVycyBmb3IgU0lHVVNSMSBhbmQgU0lHVVNSMiIKKyN+IG1zZ3N0ciAiR2VlbiBzaWduYWFsYWZoYW5kZWxhYXJzIGluc3RhbGxlcmVuIHZvb3IgU0lHVVNSMSBlbiBTSUdVU1IyIgpkaWZmIC0tZ2l0IGEvcG8vcGwuZ21vIGIvcG8vcGwuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2M2FlNjAKLS0tIC9kZXYvbnVsbAorKysgYi9wby9wbC5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vcGwucG8gYi9wby9wbC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDEzZGY2Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vcGwucG8KQEAgLTAsMCArMSwxMjMxIEBACisjIFBvbGlzaCB0cmFuc2xhdGlvbiBmb3IgZ3N0cmVhbWVyLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ3N0cmVhbWVyIHBhY2thZ2UuCisjIEpha3ViIEJvZ3VzeiA8cWJvb3NoQHBsZC1saW51eC5vcmc+LCAyMDA3LTIwMTEuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnc3RyZWFtZXIgMC4xMC4zMi4yXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDktMjkgMTQ6NTUrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTEtMDQtMjYgMTc6NTQrMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogSmFrdWIgQm9ndXN6IDxxYm9vc2hAcGxkLWxpbnV4Lm9yZz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBQb2xpc2ggPHRyYW5zbGF0aW9uLXRlYW0tcGxAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlOiBwbFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MzsgcGx1cmFsPShuPT0xID8gMCA6IG4lMTA+PTIgJiYgbiUxMDw9NCAmJiAobiUxMDA8MTAgIgorInx8IG4lMTAwPj0yMCkgPyAxIDogMik7XG4iCisKK21zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCittc2dzdHIgIld5cGlzYW5pZSB3ZXJzamkgR1N0cmVhbWVyYSIKKworbXNnaWQgIk1ha2UgYWxsIHdhcm5pbmdzIGZhdGFsIgorbXNnc3RyICJVY3p5bmllbmllIHdzenlzdGtpY2ggb3N0cnplxbxlxYQga3J5dHljem55bWkiCisKK21zZ2lkICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKK21zZ3N0ciAiV3lwaXNhbmllIGRvc3TEmXBueWNoIGthdGVnb3JpaSBkaWFnbm9zdHlraSBpIHpha2/FhGN6ZW5pZSIKKworbXNnaWQgIiIKKyJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gNSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKK21zZ3N0ciAiIgorIkRvbXnFm2xueSBwb3ppb20gZGlhZ25vc3R5a2kgb2QgMSAodHlsa28gYsWCxJlkeSkgZG8gNSAod3N6eXN0a28pIGx1YiAwIGRsYSAiCisiYnJha3Ugd3lqxZtjaWEiCisKK21zZ2lkICJMRVZFTCIKK21zZ3N0ciAiUE9aSU9NIgorCittc2dpZCAiIgorIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5X25hbWU6bGV2ZWwgcGFpcnMgdG8gc2V0IHNwZWNpZmljIGxldmVscyBmb3IgIgorInRoZSBpbmRpdmlkdWFsIGNhdGVnb3JpZXMuIEV4YW1wbGU6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKK21zZ3N0ciAiIgorIlJvemR6aWVsb25hIHByemVjaW5rYW1pIGxpc3RhIHBhciBuYXp3YV9rYXRlZ29yaWk6cG96aW9tIGRsYSB1enlza2FuaWEgIgorIm9rcmXFm2xvbnljaCBwb3ppb23Ds3cgZGxhIHBvc3pjemVnw7NsbnljaCBrYXRlZ29yaWkuIFByenlrxYJhZDogR1NUX0FVVE9QTFVHOjUsIgorIkdTVF9FTEVNRU5UXyo6MyIKKworbXNnaWQgIkxJU1QiCittc2dzdHIgIkxJU1RBIgorCittc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCittc2dzdHIgIld5xYLEhWN6ZW5pZSBrb2xvcm93YW5lZ28gd3lqxZtjaWEgZGlhZ25vc3R5Y3puZWdvIgorCittc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCittc2dzdHIgIld5xYLEhWN6ZW5pZSBkaWFnbm9zdHlraSIKKworbXNnaWQgIkVuYWJsZSB2ZXJib3NlIHBsdWdpbiBsb2FkaW5nIGRpYWdub3N0aWNzIgorbXNnc3RyICJXxYLEhWN6ZW5pZSBzemN6ZWfDs8WCb3dlaiBkaWFnbm9zdHlraSB3Y3p5dHl3YW5pYSB3dHljemVrIgorCittc2dpZCAiQ29sb24tc2VwYXJhdGVkIHBhdGhzIGNvbnRhaW5pbmcgcGx1Z2lucyIKK21zZ3N0ciAiUm96ZHppZWxvbmUgcHJ6ZWNpbmthbWkgxZtjaWXFvGtpIHphd2llcmFqxIVjZSB3dHljemtpIgorCittc2dpZCAiUEFUSFMiCittc2dzdHIgIsWaQ0lFxbtLSSIKKworbXNnaWQgIiIKKyJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwbHVnaW5zIHRvIHByZWxvYWQgaW4gYWRkaXRpb24gdG8gdGhlIGxpc3Qgc3RvcmVkIGluICIKKyJlbnZpcm9ubWVudCB2YXJpYWJsZSBHU1RfUExVR0lOX1BBVEgiCittc2dzdHIgIiIKKyJSb3pkemllbG9uYSBwcnplY2lua2FtaSBsaXN0YSB3dHljemVrIGRvIHdjemVzbmVnbyB3Y3p5dGFuaWEgb2JvayBsaXN0eSAiCisiemFwaXNhbmVqIHcgem1pZW5uZWogxZtyb2Rvd2lza293ZWogR1NUX1BMVUdJTl9QQVRIIgorCittc2dpZCAiUExVR0lOUyIKK21zZ3N0ciAiV1RZQ1pLSSIKKworbXNnaWQgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCittc2dzdHIgIiIKKyJXecWCxIVjemVuaWUgcHJ6ZWNod3l0eXdhbmlhIGLFgsSZZMOzdyBvY2hyb255IHBhbWnEmWNpIHByenkgd2N6eXR5d2FuaXUgd3R5Y3playIKKworbXNnaWQgIkRpc2FibGUgdXBkYXRpbmcgdGhlIHJlZ2lzdHJ5IgorbXNnc3RyICJXecWCxIVjemVuaWUgdWFrdHVhbG5pYW5pYSByZWplc3RydSIKKworbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIiIKKyJXecWCxIVjemVuaWUgdXJ1Y2hhbWlhbmlhIHByb2Nlc3UgcG9tb2NuaWN6ZWdvIHByenkgcHJ6ZXN6dWtpd2FuaXUgcmVqZXN0cnUiCisKK21zZ2lkICJHU3RyZWFtZXIgT3B0aW9ucyIKK21zZ3N0ciAiT3BjamUgR1N0cmVhbWVyYSIKKworbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgIlBva2F6YW5pZSBvcGNqaSBHU3RyZWFtZXJhIgorCittc2dpZCAiVW5rbm93biBvcHRpb24iCittc2dzdHIgIk5pZXpuYW5hIG9wY2phIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIgbmFwb3RrYcWCIG9nw7NsbnkgYsWCxIVkIGfFgsOzd25laiBiaWJsaW90ZWtpLiIKKworbXNnaWQgIiIKKyJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuIgorbXNnc3RyICIiCisiUHJvZ3JhbWnFm2NpIEdTdHJlYW1lcmEgYnlsaSB6Ynl0IGxlbml3aSwgYWJ5IHByenlwaXNhxIcgdGVtdSBixYLEmWRvd2kga29kLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY29kZSBub3QgaW1wbGVtZW50ZWQuIgorbXNnc3RyICJCxYLEhWQgd2V3bsSZdHJ6bnkgR1N0cmVhbWVyYToga29kIG5pZSB6YWltcGxlbWVudG93YW55LiIKKworbXNnaWQgIiIKKyJHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQgYW5kIHNvbWUgZWxlbWVudCBmYWlsZWQgdG8gcG9zdCBhICIKKyJwcm9wZXIgZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLiIKK21zZ3N0ciAiIgorIkLFgsSFZCBHU3RyZWFtZXJhOiB6bWlhbmEgc3RhbnUgbmllIHBvd2lvZMWCYSBzacSZLCBhIGt0w7NyecWbIGVsZW1lbnQgbmllICIKKyJwcnplc8WCYcWCIHfFgmHFm2Npd2VnbyBrb211bmlrYXR1IGLFgsSZZHUuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCittc2dzdHIgIkLFgsSFZCB3ZXduxJl0cnpueSBHU3RyZWFtZXJhOiBwcm9ibGVtIHogd3lyw7N3bmFuaWVtLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGhyZWFkIHByb2JsZW0uIgorbXNnc3RyICJCxYLEhWQgd2V3bsSZdHJ6bnkgR1N0cmVhbWVyYTogcHJvYmxlbSB6IHfEhXRrYW1pLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCittc2dzdHIgIkLFgsSFZCB3ZXduxJl0cnpueSBHU3RyZWFtZXJhOiBwcm9ibGVtIHogbmVnb2NqYWNqxIUuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBldmVudCBwcm9ibGVtLiIKK21zZ3N0ciAiQsWCxIVkIHdld27EmXRyem55IEdTdHJlYW1lcmE6IHByb2JsZW0gemUgemRhcnplbmlhbWkuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uIgorbXNnc3RyICJCxYLEhWQgd2V3bsSZdHJ6bnkgR1N0cmVhbWVyYTogcHJvYmxlbSB6IHByemVtaWVzemN6YW5pZW0uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgorbXNnc3RyICJCxYLEhWQgd2V3bsSZdHJ6bnkgR1N0cmVhbWVyYTogcHJvYmxlbSB6IG1vxbxsaXdvxZtjaWFtaS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKK21zZ3N0ciAiQsWCxIVkIHdld27EmXRyem55IEdTdHJlYW1lcmE6IHByb2JsZW0gemUgem5hY3puaWthbWkuIgorCittc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKK21zZ3N0ciAiVyB0ZWogaW5zdGFsYWNqaSBHU3RyZWFtZXJhIGJyYWt1amUgd3R5Y3praS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIgorbXNnc3RyICJCxYLEhWQgd2V3bsSZdHJ6bnkgR1N0cmVhbWVyYTogcHJvYmxlbSB6IHplZ2FyZW0uIgorCittc2dpZCAiIgorIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGhhcyBiZWVuICIKKyJkaXNhYmxlZC4iCittc2dzdHIgIiIKKyJUYSBhcGxpa2FjamEgcHLDs2J1amUgdcW8ecSHIGZ1bmtjam9uYWxub8WbY2kgR1N0cmVhbWVyYSwga3TDs3JhIHpvc3RhxYJhICIKKyJ3ecWCxIVjem9uYS4iCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN1cHBvcnRpbmcgbGlicmFyeSBlcnJvci4iCittc2dzdHIgIkdTdHJlYW1lciBuYXBvdGthxYIgb2fDs2xueSBixYLEhWQgYmlibGlvdGVraSB3c3BpZXJhasSFY2VqLiIKKworbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSB6YWluaWNqb3dhxIcgYmlibGlvdGVraSB3c3BpZXJhasSFY2VqLiIKKworbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJOaWUgdWRhxYJvIHNpxJkgemFta27EhcSHIGJpYmxpb3Rla2kgd3NwaWVyYWrEhWNlai4iCisKK21zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBza29uZmlndXJvd2HEhyBiaWJsaW90ZWtpIHdzcGllcmFqxIVjZWouIgorCittc2dpZCAiRW5jb2RpbmcgZXJyb3IuIgorbXNnc3RyICJCxYLEhWQga29kb3dhbmlhLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIgbmFwb3RrYcWCIG9nw7NsbnkgYsWCxIVkIHphc29iw7N3LiIKKworbXNnaWQgIlJlc291cmNlIG5vdCBmb3VuZC4iCittc2dzdHIgIk5pZSB6bmFsZXppb25vIHphc29idS4iCisKK21zZ2lkICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgorbXNnc3RyICJaYXPDs2IgemFqxJl0eSBsdWIgbmllZG9zdMSZcG55LiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiTmllIHVkYcWCbyBzacSZIG90d29yennEhyB6YXNvYnUgZG8gb2Rjenl0dS4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBvdHdvcnp5xIcgemFzb2J1IGRvIHphcGlzdS4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBvdHdvcnp5xIcgemFzb2J1IGRvIG9kY3p5dHUgaSB6YXBpc3UuIgorCittc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKK21zZ3N0ciAiTmllIHVkYcWCbyBzacSZIHphbWtuxIXEhyB6YXNvYnUuIgorCittc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCittc2dzdHIgIk5pZSB1ZGHFgiBzacSZIG9kY3p5dCB6IHphc29idS4iCisKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gcmVzb3VyY2UuIgorbXNnc3RyICJOaWUgdWRhxYIgc2nEmSB6YXBpcyBkbyB6YXNvYnUuIgorCittc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBwcnplbWllc3pjemVuaWUgdyB6YXNvYmllLiIKKworbXNnaWQgIkNvdWxkIG5vdCBzeW5jaHJvbml6ZSBvbiByZXNvdXJjZS4iCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSB6c3luY2hyb25pem93YcSHIHphc29idS4iCisKK21zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKK21zZ3N0ciAiTmllIHVkYcWCbyBzacSZIHBvYnJhxIcvdXN0YXdpxIcgdXN0YXdpZcWEIHphc29idS4iCisKK21zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCittc2dzdHIgIkJyYWsgd29sbmVnbyBtaWVqc2NhIHcgemFzb2JpZS4iCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN0cmVhbSBlcnJvci4iCittc2dzdHIgIkdTdHJlYW1lciBuYXBvdGthxYIgb2fDs2xueSBixYLEhWQgc3RydW1pZW5pLiIKKworbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKK21zZ3N0ciAiRWxlbWVudCBuaWUgb2JzxYJ1Z3VqZSB0ZWdvIHN0cnVtaWVuaWEuIFByb3N6xJkgemfFgm9zacSHIGLFgsSFZC4iCisKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIHR5cGUgb2Ygc3RyZWFtLiIKK21zZ3N0ciAiTmllIHVkYcWCbyBzacSZIG9rcmXFm2xpxIcgcm9kemFqdSBzdHJ1bWllbmlhLiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKK21zZ3N0ciAiU3RydW1pZcWEIGplc3QgaW5uZWdvIHJvZHphanUgbmnFvCBvYnPFgnVnaXdhbmUgcHJ6ZXogdGVuIGVsZW1lbnQuIgorCittc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgorbXNnc3RyICJCcmFrIGtvZGVrYSBwb3RyYWZpxIVjZWdvIG9ic8WCdcW8ecSHIHRlbiByb2R6YWogc3RydW1pZW5pYS4iCisKK21zZ2lkICJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSB6ZGVrb2Rvd2HEhyBzdHJ1bWllbmlhLiIKKworbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKK21zZ3N0ciAiTmllIHVkYcWCbyBzacSZIHpha29kb3dhxIcgc3RydW1pZW5pYS4iCisKK21zZ2lkICJDb3VsZCBub3QgZGVtdWx0aXBsZXggc3RyZWFtLiIKK21zZ3N0ciAiTmllIHVkYcWCbyBzacSZIHJvenBsZcWbxIcgc3RydW1pZW5pYS4iCisKK21zZ2lkICJDb3VsZCBub3QgbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBzcGxlxZvEhyBzdHJ1bWllbmlhLiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgaW4gdGhlIHdyb25nIGZvcm1hdC4iCittc2dzdHIgIlN0cnVtaWXFhCBtYSBuaWV3xYJhxZtjaXd5IGZvcm1hdC4iCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiU3RydW1pZcWEIGplc3QgemFzenlmcm93YW55LCBhIG9kc3p5ZnJvd3l3YW5pZSBuaWUgamVzdCBvYnPFgnVnaXdhbmUuIgorCittc2dpZCAiIgorIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKKyJiZWVuIHN1cHBsaWVkLiIKK21zZ3N0ciAiIgorIlN0cnVtaWXFhCBqZXN0IHphc3p5ZnJvd2FueSBpIG5pZSBtb8W8ZSBiecSHIG9kc3p5ZnJvd2FueSB6IHBvd29kdSBicmFrdSAiCisicGFzdWrEhWNlZ28ga2x1Y3phLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMuIgorbXNnc3RyICJCcmFrIGtvbXVuaWthdHUgYsWCxJlkdSBkbGEgZG9tZW55ICVzLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMgYW5kIGNvZGUgJWQuIgorbXNnc3RyICJCcmFrIHN0YW5kYXJkb3dlZ28ga29tdW5pa2F0dSBvIGLFgsSZZHppZSBkbGEgZG9tZW55ICVzIGkga29kdSAlZC4iCisKK21zZ2lkICJTZWxlY3RlZCBjbG9jayBjYW5ub3QgYmUgdXNlZCBpbiBwaXBlbGluZS4iCittc2dzdHIgIld5YnJhbnkgemVnYXIgbmllIG1vxbxlIGJ5xIcgdcW8eXdhbnkgdyBwb3Rva3UuIgorCittc2dpZCAidGl0bGUiCittc2dzdHIgInR5dHXFgiIKKworbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUiCittc2dzdHIgInBvd3N6ZWNobmllIHXFvHl3YW55IHR5dHXFgiIKKworbXNnaWQgInRpdGxlIHNvcnRuYW1lIgorbXNnc3RyICJ0eXR1xYIgZG8gc29ydG93YW5pYSIKKworbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgInBvd3N6ZWNobmllIHXFvHl3YW55IHR5dHXFgiBuYSBwb3RyemVieSBzb3J0b3dhbmlhIgorCittc2dpZCAiYXJ0aXN0IgorbXNnc3RyICJhcnR5c3RhIgorCittc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIgorbXNnc3RyICJvc29iYSBsdWIgb3NvYnkgb2Rwb3dpZWR6aWFsbmUgemEgbmFncmFuaWUiCisKK21zZ2lkICJhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgImFydHlzdGEgZG8gc29ydG93YW5pYSIKKworbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAib3NvYmEgbHViIG9zb2J5IG9kcG93aWVkemlhbG5lIHphIG5hZ3JhbmllIC0gbmEgcG90cnplYnkgc29ydG93YW5pYSIKKworbXNnaWQgImFsYnVtIgorbXNnc3RyICJhbGJ1bSIKKworbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgorbXNnc3RyICJhbGJ1bSB6YXdpZXJhasSFY3kgdGUgZGFuZSIKKworbXNnaWQgImFsYnVtIHNvcnRuYW1lIgorbXNnc3RyICJhbGJ1bSBkbyBzb3J0b3dhbmlhIgorCittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgImFsYnVtIHphd2llcmFqxIVjeSB0ZSBkYW5lIC0gbmEgcG90cnplYnkgc29ydG93YW5pYSIKKworbXNnaWQgImFsYnVtIGFydGlzdCIKK21zZ3N0ciAiYXJ0eXN0YSBkbGEgYWxidW11IgorCittc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgorbXNnc3RyICJBcnR5c3RhIGRsYSBjYcWCZWdvIGFsYnVtdSB3IHBvc3RhY2kgZG8gd3nFm3dpZXRsYW5pYSIKKworbXNnaWQgImFsYnVtIGFydGlzdCBzb3J0bmFtZSIKK21zZ3N0ciAiYXJ0eXN0YSBkbyBzb3J0b3dhbmlhIgorCittc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkIgorbXNnc3RyICJBcnR5c3RhIGRsYSBjYcWCZWdvIGFsYnVtdSB3IHBvc3RhY2kgZG8gc29ydG93YW5pYSIKKworbXNnaWQgImRhdGUiCittc2dzdHIgImRhdGEiCisKK21zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCittc2dzdHIgImRhdGEgdXR3b3J6ZW5pYSB0eWNoIGRhbnljaCAoamFrbyBzdHJ1a3R1cmEgR0RhdGUpIgorCittc2dpZCAiZGF0ZXRpbWUiCittc2dzdHIgImRhdGEvY3phcyIKKworbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKK21zZ3N0ciAiZGF0YSBpIGN6YXMgdXR3b3J6ZW5pYSB0eWNoIGRhbnljaCAoamFrbyBzdHJ1a3R1cmEgR3N0RGF0ZVRpbWUpIgorCittc2dpZCAiZ2VucmUiCittc2dzdHIgImdhdHVuZWsiCisKK21zZ2lkICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKK21zZ3N0ciAiZ2F0dW5layBkbyBrdMOzcmVnbyBuYWxlxbzEhSB0ZSBkYW5lIgorCittc2dpZCAiY29tbWVudCIKK21zZ3N0ciAia29tZW50YXJ6IgorCittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCittc2dzdHIgImRvd29sbnkgdGVrc3Qga29tZW50dWrEhWN5IHRlIGRhbmUiCisKK21zZ2lkICJleHRlbmRlZCBjb21tZW50IgorbXNnc3RyICJyb3pzemVyem9ueSBrb21lbnRhcnoiCisKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCittc2dzdHIgIiIKKyJkb3dvbG55IHRla3N0IGtvbWVudHVqxIVjeSBkYW5lIHcgcG9zdGFjaSBrbHVjej13YXJ0b8WbxIcgbHViIGtsdWN6W2rEmXp5a10iCisiPWtvbWVudGFyeiIKKworbXNnaWQgInRyYWNrIG51bWJlciIKK21zZ3N0ciAibnVtZXIgxZtjaWXFvGtpIgorCittc2dpZCAidHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgIm51bWVyIMWbY2llxbxraSB3ZXduxIV0cnogemJpb3J1IgorCittc2dpZCAidHJhY2sgY291bnQiCittc2dzdHIgImxpY3piYSDFm2NpZcW8ZWsiCisKK21zZ2lkICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgorbXNnc3RyICJsaWN6YmEgxZtjaWXFvGVrIHdld27EhXRyeiB6YmlvcnUgb2Jlam11asSFY3ljaCB0xJkgxZtjaWXFvGvEmSIKKworbXNnaWQgImRpc2MgbnVtYmVyIgorbXNnc3RyICJudW1lciBwxYJ5dHkiCisKK21zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICJudW1lciBwxYJ5dHkgd2V3bsSFdHJ6IGtvbGVrY2ppIgorCittc2dpZCAiZGlzYyBjb3VudCIKK21zZ3N0ciAibGljemJhIHDFgnl0IgorCittc2dpZCAiY291bnQgb2YgZGlzY3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyBkaXNjIGJlbG9uZ3MgdG8iCittc2dzdHIgImxpY3piYSBwxYJ5dCB3ZXduxIV0cnoga29sZWtjamkgb2Jlam11asSFY3ljaCB0xJkgxZtjaWXFvGvEmSIKKworbXNnaWQgImxvY2F0aW9uIgorbXNnc3RyICJwb8WCb8W8ZW5pZSIKKworbXNnaWQgIiIKKyJPcmlnaW4gb2YgbWVkaWEgYXMgYSBVUkkgKGxvY2F0aW9uLCB3aGVyZSB0aGUgb3JpZ2luYWwgb2YgdGhlIGZpbGUgb3Igc3RyZWFtICIKKyJpcyBob3N0ZWQpIgorbXNnc3RyICIiCisiUG9jaG9kemVuaWUgdXR3b3J1IGpha28gVVJJIChwb8WCb8W8ZW5pZSwgZ2R6aWUgdHJ6eW1hbnkgamVzdCBvcnlnaW5hxYIgcGxpa3UgIgorImx1YiBzdHJ1bWllbmlhKSIKKworbXNnaWQgImhvbWVwYWdlIgorbXNnc3RyICJzdHJvbmEgZG9tb3dhIgorCittc2dpZCAiSG9tZXBhZ2UgZm9yIHRoaXMgbWVkaWEgKGkuZS4gYXJ0aXN0IG9yIG1vdmllIGhvbWVwYWdlKSIKK21zZ3N0ciAiU3Ryb25hIGRvbW93YSB0ZWdvIHV0d29ydSAoYXJ0eXN0eSBsdWIgZmlsbXUpIgorCittc2dpZCAiZGVzY3JpcHRpb24iCittc2dzdHIgIm9waXMiCisKK21zZ2lkICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCittc2dzdHIgImtyw7N0a2kgdGVrc3Qgb3Bpc3VqxIVjeSB0cmXFm8SHIGRhbnljaCIKKworbXNnaWQgInZlcnNpb24iCittc2dzdHIgIndlcnNqYSIKKworbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgorbXNnc3RyICJ3ZXJzamEgdHljaCBkYW55Y2giCisKK21zZ2lkICJJU1JDIgorbXNnc3RyICJJU1JDIgorCittc2dpZCAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgorbXNnc3RyICIiCisiSW50ZW5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIChtacSZZHp5bmFyb2Rvd3kga29kIG5hZ3JhbmlhKSAtIHAuICIKKyJodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgorCittc2dpZCAib3JnYW5pemF0aW9uIgorbXNnc3RyICJvcmdhbml6YWNqYSIKKworbXNnaWQgImNvcHlyaWdodCIKK21zZ3N0ciAicHJhd2EgYXV0b3Jza2llIgorCittc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiaW5mb3JtYWNqYSBvIHByYXdhY2ggYXV0b3Jza2ljaCBkbyB0eWNoIGRhbnljaCIKKworbXNnaWQgImNvcHlyaWdodCB1cmkiCittc2dzdHIgIlVSSSBwcmF3IGF1dG9yc2tpY2giCisKK21zZ2lkICJVUkkgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgIlVSSSBkbyBpbmZvcm1hY2ppIG8gcHJhd2FjaCBhdXRvcnNraWNoIGRvIHR5Y2ggZGFueWNoIgorCittc2dpZCAiZW5jb2RlZCBieSIKK21zZ3N0ciAia29kdWrEhWN5IgorCittc2dpZCAibmFtZSBvZiB0aGUgZW5jb2RpbmcgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiIKK21zZ3N0ciAibmF6d2Egb3NvYnkgbHViIG9yZ2FuaXphY2ppIGtvZHVqxIVjZWogbmFncmFuaWUiCisKK21zZ2lkICJjb250YWN0IgorbXNnc3RyICJrb250YWt0IgorCittc2dpZCAiY29udGFjdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiaW5mb3JtYWNqZSBrb250YWt0b3dlIgorCittc2dpZCAibGljZW5zZSIKK21zZ3N0ciAibGljZW5jamEiCisKK21zZ2lkICJsaWNlbnNlIG9mIGRhdGEiCittc2dzdHIgImxpY2VuY2phIGRhbnljaCIKKworbXNnaWQgImxpY2Vuc2UgdXJpIgorbXNnc3RyICJVUkkgbGljZW5jamkiCisKK21zZ2lkICJVUkkgdG8gdGhlIGxpY2Vuc2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgIlVSSSBkbyBsaWNlbmNqaSBkYW55Y2giCisKK21zZ2lkICJwZXJmb3JtZXIiCittc2dzdHIgInd5a29uYXdjYSIKKworbXNnaWQgInBlcnNvbihzKSBwZXJmb3JtaW5nIgorbXNnc3RyICJvc29iYSBsdWIgb3NvYnkgd3lrb251asSFY2UiCisKK21zZ2lkICJjb21wb3NlciIKK21zZ3N0ciAia29tcG96eXRvciIKKworbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAib3NvYmEgbHViIG9zb2J5LCBrdMOzcmUgc2tvbXBvbm93YcWCeSB0byBuYWdyYW5pZSIKKworbXNnaWQgImR1cmF0aW9uIgorbXNnc3RyICJjemFzIHRyd2FuaWEiCisKK21zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKK21zZ3N0ciAiZMWCdWdvxZvEhyB3IGplZG5vc3RrYWNoIGN6YXN1IEdTdHJlYW1lcmEgKG5hbm9zZWt1bmRhY2gpIgorCittc2dpZCAiY29kZWMiCittc2dzdHIgImtvZGVrIgorCittc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJrb2RlayB1xbx5dHkgZG8gemFwaXN1IGRhbnljaCIKKworbXNnaWQgInZpZGVvIGNvZGVjIgorbXNnc3RyICJrb2RlayBvYnJhenUiCisKK21zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImtvZGVrIHXFvHl0eSBkbyB6YXBpc3UgZGFueWNoIG9icmF6dSIKKworbXNnaWQgImF1ZGlvIGNvZGVjIgorbXNnc3RyICJrb2RlayBkxbp3acSZa3UiCisKK21zZ2lkICJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImtvZGVrIHXFvHl0eSBkbyB6YXBpc3UgZGFueWNoIGTFundpxJlrdSIKKworbXNnaWQgInN1YnRpdGxlIGNvZGVjIgorbXNnc3RyICJrb2RlayBuYXBpc8OzdyIKKworbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAia29kZWsgdcW8eXR5IGRvIHphcGlzdSBkYW55Y2ggbmFwaXPDs3ciCisKK21zZ2lkICJjb250YWluZXIgZm9ybWF0IgorbXNnc3RyICJmb3JtYXQga29udGVuZXJhIgorCittc2dpZCAiY29udGFpbmVyIGZvcm1hdCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImZvcm1hdCBrb250ZW5lcmEgdcW8eXRlZ28gZG8gemFwaXN1IGRhbnljaCIKKworbXNnaWQgImJpdHJhdGUiCittc2dzdHIgInByxJlka2/Fm8SHIGJpdG93YSIKKworbXNnaWQgImV4YWN0IG9yIGF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgImRva8WCYWRuYSBsdWIgxZtyZWRuaWEgcHLEmWRrb8WbxIcgdyBiaXRhY2ggbmEgc2VrdW5kxJkiCisKK21zZ2lkICJub21pbmFsIGJpdHJhdGUiCittc2dzdHIgIm5vbWluYWxuYSBwcsSZZGtvxZvEhyBiaXRvd2EiCisKK21zZ2lkICJub21pbmFsIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJub21pbmFsbmEgcHLEmWRrb8WbxIcgdyBiaXRhY2ggbmEgc2VrdW5kxJkiCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCittc2dzdHIgIm1pbmltYWxuYSBwcsSZZGtvxZvEhyBiaXRvd2EiCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJtaW5pbWFsbmEgcHLEmWRrb8WbxIcgdyBiaXRhY2ggbmEgc2VrdW5kxJkiCisKK21zZ2lkICJtYXhpbXVtIGJpdHJhdGUiCittc2dzdHIgIm1ha3N5bWFsbmEgcHLEmWRrb8WbxIcgYml0b3dhIgorCittc2dpZCAibWF4aW11bSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAibWFrc3ltYWxuYSBwcsSZZGtvxZvEhyB3IGJpdGFjaCBuYSBzZWt1bmTEmSIKKworbXNnaWQgImVuY29kZXIiCittc2dzdHIgImtvZGVyIgorCittc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAia29kZXIgdcW8eXR5IGRvIHpha29kb3dhbmlhIHRlZ28gc3RydW1pZW5pYSIKKworbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKK21zZ3N0ciAid2Vyc2phIGtvZGVyYSIKKworbXNnaWQgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCittc2dzdHIgIndlcnNqYSBrb2RlcmEgdcW8eXRhIGRvIHpha29kb3dhbmlhIHRlZ28gc3RydW1pZW5pYSIKKworbXNnaWQgInNlcmlhbCIKK21zZ3N0ciAibnVtZXIgc2VyeWpueSIKKworbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCittc2dzdHIgIm51bWVyIHNlcnlqbnkgxZtjaWXFvGtpIgorCittc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgorbXNnc3RyICJvc2nEhWdpIG9kdHdhcnphbmlhIMWbY2llxbxraSIKKworbXNnaWQgInRyYWNrIGdhaW4gaW4gZGIiCittc2dzdHIgIm9zacSFZ2kgxZtjaWXFvGtpIHcgZGIiCisKK21zZ2lkICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCittc2dzdHIgInN6Y3p5dCBvZHR3YXJ6YW5pYSDFm2NpZcW8a2kiCisKK21zZ2lkICJwZWFrIG9mIHRoZSB0cmFjayIKK21zZ3N0ciAic3pjenl0IMWbY2llxbxraSIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKK21zZ3N0ciAib3NpxIVnaSBvZHR3YXJ6YW5pYSBhbGJ1bXUiCisKK21zZ2lkICJhbGJ1bSBnYWluIGluIGRiIgorbXNnc3RyICJvc2nEhWdpIGFsYnVtdSB3IGRiIgorCittc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBwZWFrIgorbXNnc3RyICJzemN6eXQgb2R0d2FyemFuaWEgYWxidW11IgorCittc2dpZCAicGVhayBvZiB0aGUgYWxidW0iCittc2dzdHIgInN6Y3p5dCBhbGJ1bXUiCisKK21zZ2lkICJyZXBsYXlnYWluIHJlZmVyZW5jZSBsZXZlbCIKK21zZ3N0ciAicG96aW9tIG9kbmllc2llbmlhIG9zacSFZ8OzdyIKKworbXNnaWQgInJlZmVyZW5jZSBsZXZlbCBvZiB0cmFjayBhbmQgYWxidW0gZ2FpbiB2YWx1ZXMiCittc2dzdHIgInBvemlvbSBvZG5pZXNpZW5pYSB3YXJ0b8WbY2kgb3NpxIVnw7N3IMWbY2llxbxraSBpIGFsYnVtdSIKKworbXNnaWQgImxhbmd1YWdlIGNvZGUiCittc2dzdHIgImtvZCBqxJl6eWthIgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIgorbXNnc3RyICJrb2QgasSZenlrYSBkbGEgdGVnbyBzdHJ1bWllbmlhLCB6Z29kbnkgeiBJU08tNjM5LTEiCisKK21zZ2lkICJpbWFnZSIKK21zZ3N0ciAib2JyYXplayIKKworbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgIm9icmF6ZWsgendpxIV6YW55IHogdHltIHN0cnVtaWVuaWVtIgorCisjLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKK21zZ2lkICJwcmV2aWV3IGltYWdlIgorbXNnc3RyICJwb2RnbMSFZCBvYnJhemthIgorCittc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICJwb2RnbMSFZCBvYnJhemthIHp3acSFemFuZWdvIHogdHltIHN0cnVtaWVuaWVtIgorCittc2dpZCAiYXR0YWNobWVudCIKK21zZ3N0ciAiemHFgsSFY3puaWsiCisKK21zZ2lkICJmaWxlIGF0dGFjaGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICJwbGlrIHphxYLEhWN6b255IGRvIHRlZ28gc3RydW1pZW5pYSIKKworbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCittc2dzdHIgInVkZXJ6ZW5pYSBuYSBtaW51dMSZIgorCittc2dpZCAibnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8iCittc2dzdHIgImxpY3piYSB1ZGVyemXFhCBuYSBtaW51dMSZIHcgZMW6d2nEmWt1IgorCittc2dpZCAia2V5d29yZHMiCittc2dzdHIgInPFgm93YSBrbHVjem93ZSIKKworbXNnaWQgImNvbW1hIHNlcGFyYXRlZCBrZXl3b3JkcyBkZXNjcmliaW5nIHRoZSBjb250ZW50IgorbXNnc3RyICJvZGR6aWVsb25lIHByemVjaW5rYW1pIHPFgm93YSBrbHVjem93ZSBvcGlzdWrEhWNlIHRyZcWbxIciCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKK21zZ3N0ciAibmF6d2EgcG/Fgm/FvGVuaWEgZ2VvZ3JhZmljem5lZ28iCisKK21zZ2lkICIiCisiaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpdmUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yICIKKyJwcm9kdWNlZCIKK21zZ3N0ciAiIgorImN6eXRlbG55IGRsYSBjesWCb3dpZWthIG9waXMgbWllanNjYSwgZ2R6aWUgdXR3w7NyIHpvc3RhxYIgbmFncmFueSBsdWIgIgorInd5cHJvZHVrb3dhbnkiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCittc2dzdHIgInN6ZXJva2/Fm8SHIGdlb2dyYWZpY3puYSIKKworbXNnaWQgIiIKKyJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCisic291dGhlcm4gbGF0aXR1ZGVzKSIKK21zZ3N0ciAiIgorInN6ZXJva2/Fm8SHIGdlb2dyYWZpY3puYSBtaWVqc2NhLCBnZHppZSB1dHfDs3Igem9zdGHFgiBuYWdyYW55IGx1YiB3eXByb2R1a293YW55ICIKKyJ3eXJhxbxvbmEgdyBzdG9wbmlhY2ggemdvZG5pZSB6IFdTRzg0ICgwIGRsYSByw7N3bmlrYSwgd2FydG/Fm2NpIHVqZW1uZSBkbGEgIgorInN6ZXJva2/Fm2NpIHBvxYJ1ZG5pb3d5Y2gpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKK21zZ3N0ciAiZMWCdWdvxZvEhyBnZW9ncmFmaWN6bmEiCisKK21zZ2lkICIiCisiZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCisibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgorbXNnc3RyICIiCisiZMWCdWdvxZvEhyBnZW9ncmFmaWN6bmEgbWllanNjYSwgZ2R6aWUgdXR3w7NyIHpvc3RhxYIgbmFncmFueSBsdWIgd3lwcm9kdWtvd2FueSAiCisid3lyYcW8b25hIHcgc3RvcG5pYWNoIHpnb2RuaWUgeiBXU0c4NCAoMCBkbGEgcGllcndzemVnbyBwb8WCdWRuaWthIHcgR3JlZW53aWNoLyIKKyJVSywgd2FydG/Fm2NpIHVqZW1uZSBkbGEgZMWCdWdvxZtjaSB6YWNob2RuaWNoKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBlbGV2YXRpb24iCittc2dzdHIgInd5c29rb8WbxIcgbi5wLm0uIgorCittc2dpZCAiIgorImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCisiYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKK21zZ3N0ciAiIgorInd5c29rb8WbxIcgbWllanNjYSwgZ2R6aWUgdXR3w7NyIHpvc3RhxYIgbmFncmFueSBsdWIgd3lwcm9kdWtvd2FueSB3eXJhxbxvbmEgdyAiCisibWV0cmFjaCB6Z29kbmllIHogV1NHODQgKDAgdG8gxZtyZWRuaSBwb3ppb20gbW9yemEpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNvdW50cnkiCittc2dzdHIgImtyYWogbG9rYWxpemFjamkiCisKK21zZ2lkICJjb3VudHJ5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKK21zZ3N0ciAiIgorImtyYWogKG5hendhIGFuZ2llbHNrYSksIHcga3TDs3J5bSB1dHfDs3Igem9zdGHFgiBuYWdyYW55IGx1YiB3eXByb2R1a293YW55IgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCittc2dzdHIgIm1pYXN0byBsb2thbGl6YWNqaSIKKworbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICIiCisibWllanNjb3dvxZvEhyAobmF6d2EgYW5naWVsc2thKSwgdyBrdMOzcmVqIHV0d8OzciB6b3N0YcWCIG5hZ3JhbnkgbHViICIKKyJ3eXByb2R1a293YW55IgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIHN1YmxvY2F0aW9uIgorbXNnc3RyICJjesSZxZvEhyBtaWVqc2Nvd2/Fm2NpIGxva2FsaXphY2ppIgorCittc2dpZCAiIgorImEgbG9jYXRpb24gd2hpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgorInRoZSBuZWlnaGJvcmhvb2QpIgorbXNnc3RyICIiCisibWllanNjZSB3ZXduxIV0cnogbWllanNjb3dvxZtjaSwgdyBrdMOzcnltIHV0d8OzciB6b3N0YcWCIG5hZ3JhbnkgbHViICIKKyJ3eXByb2R1a293YW55IChucC4gZHppZWxuaWNhKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgorbXNnc3RyICJixYLEhWQgcG96aW9tZWdvIHBvxYJvxbxlbmlhIGdlb2dyYWZpY3puZWdvIgorCittc2dpZCAiZXhwZWN0ZWQgZXJyb3Igb2YgdGhlIGhvcml6b250YWwgcG9zaXRpb25pbmcgbWVhc3VyZXMgKGluIG1ldGVycykiCittc2dzdHIgInNwb2R6aWV3YW55IGLFgsSFZCBvc3phY293YW5pYSBwb8WCb8W8ZW5pYSBwb3ppb21lZ28gKHcgbWV0cmFjaCkiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgc3BlZWQiCittc2dzdHIgInByxJlka2/Fm8SHIHptaWFueSBwb8WCb8W8ZW5pYSBnZW9ncmFmaWN6bmVnbyIKKworbXNnaWQgIiIKKyJtb3ZlbWVudCBzcGVlZCBvZiB0aGUgY2FwdHVyaW5nIGRldmljZSB3aGlsZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIGluIG0vcyIKK21zZ3N0ciAicHLEmWRrb8WbxIcgcnVjaHUgdXJ6xIVkemVuaWEgbmFncnl3YWrEhWNlZ28gdyB0cmFrY2llIG5hZ3JhbmlhIChtL3MpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKK21zZ3N0ciAia2llcnVuZWsgem1pYW55IHBvxYJvxbxlbmlhIGdlb2dyYWZpY3puZWdvIgorCittc2dpZCAiIgorImluZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBvZiBhICIKKyJtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgMCAiCisibWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgorbXNnc3RyICIiCisib2tyZcWbbGVuaWUga2llcnVua3UgcnVjaHUgdXJ6xIVkemVuaWEgbmFncnl3YWrEhWNlZ28gdyBzdG9wbmlhY2ggKHcgbm90YWNqaSAiCisiem1pZW5ub3ByemVjaW5rb3dlaik7IDAgb3puYWN6YSBnZW9ncmFmaWN6bsSFIHDDs8WCbm9jLCByb8WbbmllIHpnb2RuaWUgeiBydWNoZW0gIgorIndza2F6w7N3ZWsgemVnYXJhIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgorbXNnc3RyICJraWVydW5layBnZW9ncmFmaWN6bnkgdXJ6xIVkemVuaWEgbmFncnl3YWrEhWNlZ28iCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGRldmljZSBpcyBwb2ludGluZyB0byB3aGVuIGNhcHR1cmluZyAgYSBtZWRpYS4gIgorIkl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIHJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSAiCisiZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKyJva3JlxZtsZW5pZSBraWVydW5rdSwgdyBqYWtpbSBiecWCbyBza2llcm93YW5lIHVyesSFZHplbmllIG5hZ3J5d2FqxIVjZSB3ICIKKyJ0cmFrY2llIG5hZ3JhbmlhIC0gdyBzdG9wbmlhY2gsIHcgbm90YWNqaSB6bWllbm5vcHJ6ZWNpbmtvd2VqOyAwIG96bmFjemEgIgorImdlb2dyYWZpY3puxIUgcMOzxYJub2MsIHJvxZtuaWUgemdvZG5pZSB6IHJ1Y2hlbSB3c2thesOzd2VrIHplZ2FyYSIKKworIy4gVFJBTlNMQVRPUlM6ICdzaG93IG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lJyBoZXJlCittc2dpZCAic2hvdyBuYW1lIgorbXNnc3RyICJuYXp3YSB3aWRvd2lza2EiCisKK21zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgorbXNnc3RyICIiCisiTmF6d2Egd2lkb3dpc2thIHRlbGV3aXp5am5lZ28vcG9kY2FzdHUvc2VyaWFsdSwgeiBrdMOzcmVnbyBwb2Nob2R6aSB1dHfDs3IiCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQorbXNnaWQgInNob3cgc29ydG5hbWUiCittc2dzdHIgIm5hendhIHdpZG93aXNrYSBkbyBzb3J0b3dhbmlhIgorCittc2dpZCAiIgorIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20sIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJOYXp3YSB3aWRvd2lza2EgdGVsZXdpenlqbmVnby9wb2RjYXN0dS9zZXJpYWx1IG5hIHBvdHJ6ZWJ5IHNvcnRvd2FuaWEiCisKK21zZ2lkICJlcGlzb2RlIG51bWJlciIKK21zZ3N0ciAibnVtZXIgb2RjaW5rYSIKKworbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICJOdW1lciBvZGNpbmthIHcgc2V6b25pZSwgeiBrdMOzcmVnbyBwb2Nob2R6aSB1dHfDs3IiCisKK21zZ2lkICJzZWFzb24gbnVtYmVyIgorbXNnc3RyICJudW1lciBzZXpvbnUiCisKK21zZ2lkICJUaGUgc2Vhc29uIG51bWJlciBvZiB0aGUgc2hvdyB0aGUgbWVkaWEgaXMgcGFydCBvZiIKK21zZ3N0ciAiTnVtZXIgc2V6b251IHdpZG93aXNrYSwgeiBrdMOzcmVnbyBwb2Nob2R6aSB1dHfDs3IiCisKK21zZ2lkICJseXJpY3MiCittc2dzdHIgInRla3N0IgorCittc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgorbXNnc3RyICJUZWtzdCB1dHdvcnUsIHXFvHl3YW55IG5hamN6xJnFm2NpZWogZGxhIHBpb3NlbmVrIgorCittc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCittc2dzdHIgIm5hendhIGtvbXBvenl0b3JhIGRvIHNvcnRvd2FuaWEiCisKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJvc29iYSBsdWIgb3NvYnksIGt0w7NyZSBza29tcG9ub3dhxYJ5IG5hZ3JhbmllIC0gbmEgcG90cnplYnkgc29ydG93YW5pYSIKKworbXNnaWQgImdyb3VwaW5nIgorbXNnc3RyICJncnVwb3dhbmllIgorCittc2dpZCAiIgorIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKKyJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgorbXNnc3RyICIiCisiR3J1cG93YW5pZSBwb3dpxIV6YW55Y2ggdXR3b3LDs3cgcm96Y2nEhWdhasSFY2Ugc2nEmSBuYSB3aWVsZSDFm2NpZcW8ZWssIGphayByw7PFvG5lICIKKyJjesSZxZtjaSBrb25jZXJ0dTsgamVzdCB0byBwb3ppb20gd3nFvHN6eSBuacW8IMWbY2llxbxrYSwgYSBuacW8c3p5IG5pxbwgYWxidW0iCisKK21zZ2lkICJ1c2VyIHJhdGluZyIKK21zZ3N0ciAib2NlbmEgdcW8eXRrb3duaWthIgorCittc2dpZCAiIgorIlJhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgdXNlci4gVGhlIGhpZ2hlciB0aGUgcmFuaywgdGhlIG1vcmUgdGhlIHVzZXIgbGlrZXMgIgorInRoaXMgbWVkaWEiCittc2dzdHIgIiIKKyJPY2VuYSBwcnp5cGlzYW5hIHByemV6IHXFvHl0a293bmlrYS4gSW0gd3nFvHN6YSwgdHltIGJhcmR6aWVqIHXFvHl0a293bmlrIGx1YmkgIgorInV0d8OzciIKKworbXNnaWQgImRldmljZSBtYW51ZmFjdHVyZXIiCittc2dzdHIgInByb2R1Y2VudCB1cnrEhWR6ZW5pYSIKKworbXNnaWQgIk1hbnVmYWN0dXJlciBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCittc2dzdHIgIlByb2R1Y2VudCB1cnrEhWR6ZW5pYSB1xbx5dGVnbyBkbyB1dHdvcnplbmlhIHRlZ28gbmFncmFuaWEiCisKK21zZ2lkICJkZXZpY2UgbW9kZWwiCittc2dzdHIgIm1vZGVsIHVyesSFZHplbmlhIgorCittc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICJNb2RlbCB1cnrEhWR6ZW5pYSB1xbx5dGVnbyBkbyB1dHdvcnplbmlhIHRlZ28gbmFncmFuaWEiCisKK21zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgorbXNnc3RyICJuYXp3YSBhcGxpa2FjamkiCisKK21zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCittc2dzdHIgIkFwbGlrYWNqYSB1xbx5dGEgZG8gdXR3b3J6ZW5pYSB0ZWdvIG5hZ3JhbmlhIgorCittc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKK21zZ3N0ciAiZGFuZSBhcGxpa2FjamkiCisKK21zZ2lkICJBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIG1lZGlhIgorbXNnc3RyICJEb3dvbG5lIGRhbmUgYXBsaWthY2ppIHpzZXJpYWxpem93YW5lIHcgbmFncmFuaXUiCisKK21zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKK21zZ3N0ciAib3JpZW50YWNqYSBvYnJhenUiCisKK21zZ2lkICJIb3cgdGhlIGltYWdlIHNob3VsZCBiZSByb3RhdGVkIG9yIGZsaXBwZWQgYmVmb3JlIGRpc3BsYXkiCittc2dzdHIgIiIKKyJXIGpha2kgc3Bvc8OzYiBvYnJheiBwb3dpbmllbiBiecSHIG9icsOzY29ueSBsdWIgb2RiaXR5IHByemVkIHd5xZt3aWV0bGVuaWVtIgorCittc2dpZCAiLCAiCittc2dzdHIgIiwgIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCittc2dzdHIgIkLFgcSERDogb2QgZWxlbWVudHUgJXM6ICVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKKyIlc1xuIgorbXNnc3RyICIiCisiRG9kYXRrb3dlIGluZm9ybWFjamUgZGlhZ25vc3R5Y3puZTpcbiIKKyIlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgInNwZWNpZmllZCBlbXB0eSBiaW4gXCIlc1wiLCBub3QgYWxsb3dlZCIKK21zZ3N0ciAicG9kYW5vIHB1c3R5IGtvbnRlbmVyIFwiJXNcIiwgbmllIGplc3QgdG8gZG96d29sb25lIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHNraXBwaW5nIgorbXNnc3RyICJicmFrIGtvbnRlbmVyYSBcIiVzXCIsIHBvbWluacSZdG8iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICJicmFrIHfFgmHFm2Npd2/Fm2NpIFwiJXNcIiB3IGVsZW1lbmNpZSBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgorbXNnc3RyICJuaWUgdWRhxYJvIHNpxJkgdXN0YXdpxIcgd8WCYcWbY2l3b8WbY2kgXCIlc1wiIHcgZWxlbWVuY2llIFwiJXNcIiBuYSBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxpbmsgJXMgdG8gJXMiCittc2dzdHIgIm5pZSB1ZGHFgm8gc2nEmSBkb3dpxIV6YcSHICVzIGRvICVzIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICJicmFrIGVsZW1lbnR1IFwiJXNcIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCittc2dzdHIgIm5pZSB1ZGHFgm8gc2nEmSBwcnplYW5hbGl6b3dhxIcgbW/FvGxpd2/Fm2NpIFwiJXNcIiIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIKK21zZ3N0ciAiZG93acSFemFuaWUgYmV6IGVsZW1lbnR1IMW6csOzZMWCb3dlZ28iCisKK21zZ2lkICJsaW5rIHdpdGhvdXQgc2luayBlbGVtZW50IgorbXNnc3RyICJkb3dpxIV6YW5pZSBiZXogZWxlbWVudHUgb3NhZHphasSFY2VnbyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAiYnJhayBlbGVtZW50dSDFunLDs2TFgm93ZWdvIGRsYSBVUkkgXCIlc1wiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGVsZW1lbnQgdG8gbGluayBVUkkgXCIlc1wiIHRvIgorbXNnc3RyICJicmFrIGVsZW1lbnR1IGRvIGRvd2nEhXphbmlhIFVSSSBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJicmFrIGVsZW1lbnR1IG9zYWR6YWrEhWNlZ28gZGxhIFVSSSBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxpbmsgc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJuaWUgdWRhxYJvIHNpxJkgZG93acSFemHEhyBlbGVtZW50dSBvc2FkemFqxIVjZWdvIGRsYSBVUkkgXCIlc1wiIgorCittc2dpZCAiZW1wdHkgcGlwZWxpbmUgbm90IGFsbG93ZWQiCittc2dzdHIgInB1c3R5IHBvdG9rIG5pZSBqZXN0IGRvendvbG9ueSIKKworbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKK21zZ3N0ciAiV2V3bsSZdHJ6bnkgYsWCxIVkIHplZ2FyYS4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgorbXNnc3RyICJXZXduxJl0cnpueSBixYLEhWQgcHJ6ZXDFgnl3dSBkYW55Y2guIgorCittc2dpZCAiQSBsb3Qgb2YgYnVmZmVycyBhcmUgYmVpbmcgZHJvcHBlZC4iCittc2dzdHIgIldpZWxlIGJ1Zm9yw7N3IHpvc3RhxYJvIHpndWJpb255Y2guIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IHByb2JsZW0uIgorbXNnc3RyICJXZXduxJl0cnpueSBwcm9ibGVtIHByemVwxYJ5d3UgZGFueWNoLiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiV2V3bsSZdHJ6bnkgYsWCxIVkIHN0cnVtaWVuaWEgZGFueWNoLiIKKworbXNnaWQgIkZpbHRlciBjYXBzIgorbXNnc3RyICJGaWx0cm93YW5pZSBtb8W8bGl3b8WbY2kiCisKK21zZ2lkICIiCisiUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCisicHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKK21zZ3N0ciAiIgorIk9ncmFuaWN6ZW5pZSBtb8W8bGl3eWNoIGRvendvbG9ueWNoIG1vxbxsaXdvxZtjaSAoTlVMTCBvem5hY3phIFdTWllTVEtJRSkuICIKKyJVc3Rhd2llbmllIHRlaiB3xYJhxZtjaXdvxZtjaSBvZHdvxYJ1amUgc2nEmSBkbyBwcnpla2F6YW5lZ28gb2JpZWt0dSBHc3RDYXBzLiIKKworbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJOaWUgcG9kYW5vIG5hend5IHBsaWt1IGRvIHphcGlzdS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJOaWUgdWRhxYJvIHNpxJkgb3R3b3J6ecSHIHBsaWt1IFwiJXNcIiBkbyB6YXBpc3UuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNsb3NpbmcgZmlsZSBcIiVzXCIuIgorbXNnc3RyICJCxYLEhWQgcG9kY3phcyB6YW15a2FuaWEgcGxpa3UgXCIlc1wiLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiQsWCxIVkIHBvZGN6YXMgcHJ6ZW1pZXN6Y3phbmlhIHcgcGxpa3UgXCIlc1wiLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiQsWCxIVkIHBvZGN6YXMgemFwaXN1IGRvIHBsaWt1IFwiJXNcIi4iCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiTmllIHBvZGFubyBuYXp3eSBwbGlrdSBkbyBvZGN6eXR1LiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBvdHdvcnp5xIcgcGxpa3UgXCIlc1wiIGRvIG9kY3p5dHUuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgaW5mbyBvbiBcIiVzXCIuIgorbXNnc3RyICJOaWUgdWRhxYJvIHNpxJkgdXp5c2thxIcgaW5mb3JtYWNqaSBvIFwiJXNcIi4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiXCIlc1wiIGlzIGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiXCIlc1wiIGplc3Qga2F0YWxvZ2llbS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmlsZSBcIiVzXCIgaXMgYSBzb2NrZXQuIgorbXNnc3RyICJQbGlrIFwiJXNcIiBqZXN0IGduaWF6ZGVtLiIKKworbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCittc2dzdHIgIk5pZXBvd29kemVuaWUgcG8gaXRlcmFjamFjaCBqYWsgxbzEhWRhbm8uIgorCittc2dpZCAiTm8gVGVtcCBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIKK21zZ3N0ciAiTmllIHBvZGFubyBrYXRhbG9ndSB0eW1jemFzb3dlZ28uIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcCBmaWxlIFwiJXNcIi4iCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSB1dHdvcnp5xIcgcGxpa3UgdHltY3phc293ZWdvIFwiJXNcIi4iCisKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIgorbXNnc3RyICJCxYLEhWQgcG9kY3phcyB6YXBpc3UgZG8gxZtjacSFZ2FuZWdvIHBsdWt1LiIKKworbXNnaWQgImNhcHMiCittc2dzdHIgIm1vxbxsaXdvxZtjaSIKKworbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCittc2dzdHIgInd5a3J5dGUgbW/FvGxpd2/Fm2NpIHcgc3RydW1pZW5pdSIKKworbXNnaWQgIm1pbmltdW0iCittc2dzdHIgIm1pbmltdW0iCisKK21zZ2lkICJtYXhpbXVtIgorbXNnc3RyICJtYWtzaW11bSIKKworbXNnaWQgImZvcmNlIGNhcHMiCittc2dzdHIgInd5bXVzemVuaWUgbW/FvGxpd2/Fm2NpIgorCittc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCittc2dzdHIgInd5bXVzemVuaWUgbW/FvGxpd2/Fm2NpIGJleiBzcHJhd2R6YW5pYSIKKworbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKK21zZ3N0ciAiU3RydW1pZcWEIG5pZSB6YXdpZXJhIGRhbnljaC4iCisKK21zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgorbXNnc3RyICJaYWltcGxlbWVudG93YW5lIGludGVyZmVqc3k6XG4iCisKK21zZ2lkICJyZWFkYWJsZSIKK21zZ3N0ciAib2Rjenl0IgorCittc2dpZCAid3JpdGFibGUiCittc2dzdHIgInphcGlzIgorCittc2dpZCAiY29udHJvbGxhYmxlIgorbXNnc3RyICJzdGVyb3dhbmllIgorCittc2dpZCAiY2hhbmdlYWJsZSBpbiBOVUxMLCBSRUFEWSwgUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUiCittc2dzdHIgIm1vxbxsaXdhIHptaWFuYSB3IHN0YW5pZSBOVUxMLCBHT1RPV0/FmsSGLCBQQVVaT1dBTklFIGx1YiBPRFRXQVJaQU5JRSIKKworbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiCittc2dzdHIgIm1vxbxsaXdhIHptaWFuYSB0eWxrbyB3IHN0YW5pZSBOVUxMLCBHT1RPV0/FmsSGIGx1YiBQQVVaT1dBTklFIgorCittc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwgb3IgUkVBRFkgc3RhdGUiCittc2dzdHIgIm1vxbxsaXdhIHptaWFuYSB0eWxrbyB3IHN0YW5pZSBOVUxMIGx1YiBHT1RPV0/FmsSGIgorCittc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgorbXNnc3RyICJQbGlraSB3eWtsdWN6b25lOiIKKworbXNnaWQgIlRvdGFsIGNvdW50OiAiCittc2dzdHIgIkNhxYJrb3dpdGEgbGljemJhOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxhY2tsaXN0ZWQgZmlsZSIKK21zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHJbMF0gIiVkIHBsaWsgd3lrbHVjem9ueSIKK21zZ3N0clsxXSAiJWQgcGxpa2kgd3lrbHVjem9uZSIKK21zZ3N0clsyXSAiJWQgcGxpa8OzdyB3eWtsdWN6b255Y2giCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgcGx1Z2luIgorbXNnaWRfcGx1cmFsICIlZCBwbHVnaW5zIgorbXNnc3RyWzBdICIlZCB3dHljemthIgorbXNnc3RyWzFdICIlZCB3dHljemtpIgorbXNnc3RyWzJdICIlZCB3dHljemVrIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdCBlbnRyeSIKK21zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0IGVudHJpZXMiCittc2dzdHJbMF0gIiVkIHdwaXMgd3lrbHVjem9ueSIKK21zZ3N0clsxXSAiJWQgd3Bpc3kgd3lrbHVjem9uZSIKK21zZ3N0clsyXSAiJWQgd3Bpc8OzdyB3eWtsdWN6b255Y2giCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgZmVhdHVyZSIKK21zZ2lkX3BsdXJhbCAiJWQgZmVhdHVyZXMiCittc2dzdHJbMF0gIiVkIGNlY2hhIgorbXNnc3RyWzFdICIlZCBjZWNoeSIKK21zZ3N0clsyXSAiJWQgY2VjaCIKKworbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKK21zZ3N0ciAiV3lwaXNhbmllIHdzenlzdGtpY2ggZWxlbWVudMOzdyIKKworbXNnaWQgIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHIgIld5cGlzYW5pZSBsaXN0eSBwbGlrw7N3IHd5a2x1Y3pvbnljaCIKKworbXNnaWQgIiIKKyJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgorInBsdWdpbnMgcHJvdmlkZS5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKKyJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgorbXNnc3RyICIiCisiV3lwaXNhbmllIG5hZGFqxIVjZWogc2nEmSBkbyBwcnpldHdvcnplbmlhIHByemV6IG1hc3p5bsSZIGxpc3R5IGNlY2ggIgorImRvc3RhcmN6YW55Y2ggcHJ6ZXogb2tyZcWbbG9uxIUgd3R5Y3prxJkuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJ6eWRhdG5lIHcgcG/FgsSFY3plbml1IHogemV3bsSZdHJ6bnltaSAiCisiYXV0b21hdHljem55bWkgbWVjaGFuaXptYW1pIGluc3RhbGFjamkgd3R5Y3playIKKworbXNnaWQgIkxpc3QgdGhlIHBsdWdpbiBjb250ZW50cyIKK21zZ3N0ciAiV3lwaXNhbmllIHphd2FydG/Fm2NpIHd0eWN6ZWsiCisKK21zZ2lkICJQcmludCBzdXBwb3J0ZWQgVVJJIHNjaGVtZXMsIHdpdGggdGhlIGVsZW1lbnRzIHRoYXQgaW1wbGVtZW50IHRoZW0iCittc2dzdHIgIiIKKyJXeXBpc2FuaWUgb2JzxYJ1Z2l3YW55Y2ggc2NoZW1hdMOzdyBVUkkgd3JheiB6IGltcGxlbWVudHVqxIVjeW1pIGplIGVsZW1lbnRhbWkiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGxvYWQgcGx1Z2luIGZpbGU6ICVzXG4iCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSB3Y3p5dGHEhyBwbGlrdSB3dHljemtpOiAlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgorbXNnc3RyICJOaWUgbWEgdGFraWVnbyBlbGVtZW50dSBsdWIgd3R5Y3praSAnJXMnXG4iCisKK21zZ2lkICJJbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICJTdGF0eXN0eWtpIGluZGVrc3UiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICJPZGVicmFubyBrb211bmlrYXQgIyV1IG9kIGVsZW1lbnR1IFwiJXNcIiAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCittc2dzdHIgIk9kZWJyYW5vIGtvbXVuaWthdCAjJXUgb2QgcG9sYSBcIiVzOiVzXCIgKCVzKTogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICJPZGVicmFubyBrb211bmlrYXQgIyV1IG9kIG9iaWVrdHUgXCIlc1wiICglcyk6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgKCVzKTogIgorbXNnc3RyICJPZGVicmFubyBrb211bmlrYXQgIyV1ICglcyk6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgRU9TIGZyb20gZWxlbWVudCBcIiVzXCIuXG4iCittc2dzdHIgIk90cnp5bWFubyBFT1Mgb2QgZWxlbWVudHUgXCIlc1wiLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCittc2dzdHIgIlpOQUNaTklLICAgICAgIDogem5hbGV6aW9ueSBwcnpleiBlbGVtZW50IFwiJXNcIi5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCittc2dzdHIgIlpOQUNaTklLICAgICAgIDogem5hbGV6aW9ueSBwcnpleiBwb2xlIFwiJXM6JXNcIi5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCittc2dzdHIgIlpOQUNaTklLICAgICAgIDogem5hbGV6aW9ueSBwcnpleiBvYmlla3QgXCIlc1wiLlxuIgorCittc2dpZCAiRk9VTkQgVEFHXG4iCittc2dzdHIgIlpOQUNaTklLXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklORk86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorIklORk9STUFDSkE6XG4iCisiJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCittc2dzdHIgIlVXQUdBOiBvZCBlbGVtZW50dSAlczogJXNcbiIKKworbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgorbXNnc3RyICJQcnpld2luacSZdG8sIGN6ZWthbmllIG5hIHpha2/FhGN6ZW5pZSBidWZvcm93YW5pYS4uLlxuIgorCittc2dpZCAiYnVmZmVyaW5nLi4uIgorbXNnc3RyICJidWZvcm93YW5pZS4uLiIKKworbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIkJ1Zm9yb3dhbmllIHpha2/FhGN6b25lLCB1c3Rhd2lhbmllIHBvdG9rdSBuYSBPRFRXQVJaQU5JRS4uLlxuIgorCittc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAiQnVmb3Jvd2FuaWUsIHVzdGF3aWFuaWUgcG90b2t1IG5hIFBBVVpPV0FOSUUuLi5cbiIKKworbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCittc2dzdHIgIlJvenByemVzdHJ6ZW5pYW5pZSBvcMOzxbpuaWXFhC4uLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iCittc2dzdHIgIlVzdGF3aWFuaWUgc3RhbnUgbmEgJXMgemdvZG5pZSB6IHd5bWFnYW5pZW0gJXMuLi5cbiIKKworbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCittc2dzdHIgIlByemVyd2FuaWU6IFphdHJ6eW15d2FuaWUgcG90b2t1Li4uXG4iCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKK21zZ3N0ciAiYnJhayBlbGVtZW50dSBcIiVzXCIiCisKK21zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCittc2dzdHIgIld5cGlzYW5pZSB6bmFjem5pa8OzdyAoem5hbnljaCB0YWvFvGUgamFrbyBtZXRhZGFuZSkiCisKK21zZ2lkICJPdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBwcm9wZXJ0eSBub3RpZmljYXRpb25zIgorbXNnc3RyICJXeXBpc3l3YW5pZSBpbmZvcm1hY2ppIG8gc3RhbmllIGkgcG93aWFkb21pZcWEIHfFgmHFm2Npd2/Fm2NpIgorCittc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiTmllIHd5cGlzeXdhbmllIMW8YWRuZWogaW5mb3JtYWNqaSBvIHBvc3TEmXBpZSIKKworbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKK21zZ3N0ciAiV3lwaXN5d2FuaWUga29tdW5pa2F0w7N3IgorCittc2dpZCAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKK21zZ3N0ciAiTmllIHd5cGlzeXdhbmllIGluZm9ybWFjamkgbyBzdGFuaWUgdGVnbyBST0RaQUpVIgorCittc2dpZCAiVFlQRTEsVFlQRTIsLi4uIgorbXNnc3RyICJST0RaQUoxLFJPRFpBSjIsLi4uIgorCittc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgorbXNnc3RyICJOaWUgaW5zdGFsb3dhbmllIG9ic8WCdWdpIGLFgsSZZMOzdyIKKworbXNnaWQgIlByaW50IGFsbG9jIHRyYWNlIChpZiBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSkiCittc2dzdHIgIld5cGlzYW5pZSDFm2xhZHUgYWxva2FjamkgKGplxZtsaSB6b3N0YcWCIHfFgsSFY3pvbnkgdyBjemFzaWUga29tcGlsYWNqaSkiCisKK21zZ2lkICJGb3JjZSBFT1Mgb24gc291cmNlcyBiZWZvcmUgc2h1dHRpbmcgdGhlIHBpcGVsaW5lIGRvd24iCittc2dzdHIgIld5bXVzemFuaWUgRU9TIG5hIMW6csOzZMWCYWNoIHByemVkIHphbWtuacSZY2llbSBwb3Rva3UiCisKK21zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCittc2dzdHIgIlplYnJhbmllIGkgd3lwaXNhbmllIHN0YXR5c3R5ayBpbmRla3N1IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQ6ICVzLlxuIgorbXNnc3RyICJCxYHEhEQ6IG5pZSB1ZGHFgm8gc2nEmSBza29uc3RydW93YcSHIHBvdG9rdTogJXMuXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlxuIgorbXNnc3RyICJCxYHEhEQ6IG5pZSB1ZGHFgm8gc2nEmSBza29uc3RydW93YcSHIHBvdG9rdS5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCittc2dzdHIgIlVXQUdBOiBixYLEmWRueSBwb3RvazogJXNcbiIKKworbXNnaWQgIkVSUk9SOiB0aGUgJ3BpcGVsaW5lJyBlbGVtZW50IHdhc24ndCBmb3VuZC5cbiIKK21zZ3N0ciAiQsWBxIREOiBuaWUgem5hbGV6aW9ubyBlbGVtZW50dSAncGlwZWxpbmUnLlxuIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCittc2dzdHIgIlVzdGF3aWFuaWUgcG90b2t1IG5hIFBBVVpPV0FOSUUuLi5cbiIKKworbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCittc2dzdHIgIkLFgcSERDogcG90b2sgb2RtYXdpYSBwYXV6b3dhbmlhLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgorbXNnc3RyICJQb3RvayBqZXN0IG5hIMW8eXdvIGkgbmllIHd5bWFnYSBQUlpFV0lOScSYQ0lBLi4uXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMSU5HIC4uLlxuIgorbXNnc3RyICJQb3RvayBqZXN0IFBSWkVXSUpBTlkuLi5cbiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcHJlcm9sbC5cbiIKK21zZ3N0ciAiQsWBxIREOiBwb3RvayBvZG1hd2lhIHByemV3aW5pxJljaWEuXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMRUQgLi4uXG4iCittc2dzdHIgIlBvdG9rIGplc3QgUFJaRVdJTknEmFRZLi4uXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIlVzdGF3aWFuaWUgcG90b2t1IG5hIE9EVFdBUlpBTklFLi4uXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBsYXkuXG4iCittc2dzdHIgIkLFgcSERDogcG90b2sgb2RtYXdpYSBvZHR3YXJ6YW5pYS5cbiIKKworbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIEZvcmNpbmcgRU9TIG9uIHRoZSBwaXBlbGluZVxuIgorbXNnc3RyICJXxYLEhWN6b255IEVPUyBwcnp5IHd5xYLEhWN6YW5pdSAtIHd5bXVzemFuaWUgRU9TIHcgcG90b2t1XG4iCisKK21zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKK21zZ3N0ciAiT2N6ZWtpd2FuaWUgbmEgRU9TLi4uXG4iCisKK21zZ2lkICJFT1MgcmVjZWl2ZWQgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgorbXNnc3RyICJPdHJ6eW1hbm8gRU9TIC0gemF0cnp5bXl3YW5pZSBwb3Rva3UuLi5cbiIKKworbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgorbXNnc3RyICJXeXN0xIVwacWCIGLFgsSFZCB3IHRyYWtjaWUgb2N6ZWtpd2FuaWEgbmEgRU9TXG4iCisKK21zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKK21zZ3N0ciAiV3lrb255d2FuaWUgemFrb8WEY3pvbmUgcG8gJSIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUkVBRFkgLi4uXG4iCittc2dzdHIgIlVzdGF3aWFuaWUgcG90b2t1IG5hIEdPVE9XT8WaxIYuLi5cbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCAuLi5cbiIKK21zZ3N0ciAiVXN0YXdpYW5pZSBwb3Rva3UgbmEgTlVMTC4uLlxuIgorCittc2dpZCAiRnJlZWluZyBwaXBlbGluZSAuLi5cbiIKK21zZ3N0ciAiWndhbG5pYW5pZSBwb3Rva3UuLi5cbiIKKworI34gbXNnaWQgIlVzYWdlOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLiBdXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJTa8WCYWRuaWE6IGdzdC14bWxsYXVuY2ggPHBsaWsueG1sPiBbIGVsZW1lbnQud8WCYcWbY2l3b8WbxIc9d2FydG/Fm8SHIC4uLiBdXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogcGFyc2Ugb2YgeG1sIGZpbGUgJyVzJyBmYWlsZWQuXG4iCisjfiBtc2dzdHIgIkLFgcSERDogYW5hbGl6YSBwbGlrdSB4bWwgJyVzJyBuaWUgcG93aW9kxYJhIHNpxJkuXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogbm8gdG9wbGV2ZWwgcGlwZWxpbmUgZWxlbWVudCBpbiBmaWxlICclcycuXG4iCisjfiBtc2dzdHIgIkLFgcSERDogYnJhayBnxYLDs3duZWdvIGVsZW1lbnR1IHBvdG9rdSB3IHBsaWt1ICclcycuXG4iCisKKyN+IG1zZ2lkICJXQVJOSU5HOiBvbmx5IG9uZSB0b3BsZXZlbCBlbGVtZW50IGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuXG4iCisjfiBtc2dzdHIgIlVXQUdBOiBha3R1YWxuaWUgb2JzxYJ1Z2l3YW55IGplc3QgdHlsa28gamVkZW4gZWxlbWVudCBnxYLDs3dueS5cbiIKKworI34gbXNnaWQgIkVSUk9SOiBjb3VsZCBub3QgcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50ICVkOiAlcy5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIkLFgcSERDogbmllIHVkYcWCbyBzacSZIHByemVhbmFsaXpvd2HEhyBhcmd1bWVudHUgJWQgbGluaWkgcG9sZWNlxYQ6ICVzLlxuIgorCisjfiBtc2dpZCAiV0FSTklORzogZWxlbWVudCBuYW1lZCAnJXMnIG5vdCBmb3VuZC5cbiIKKyN+IG1zZ3N0ciAiVVdBR0E6IG5pZSB6bmFsZXppb25vIGVsZW1lbnR1IG8gbmF6d2llICclcycuXG4iCisKKyN+IG1zZ2lkICJTYXZlIHhtbCByZXByZXNlbnRhdGlvbiBvZiBwaXBlbGluZSB0byBGSUxFIGFuZCBleGl0IgorI34gbXNnc3RyICJaYXBpc2FuaWUgcmVwcmV6ZW50YWNqaSB4bWwgcG90b2t1IGRvIFBMSUtVIGkgemFrb8WEY3plbmllIgorCisjfiBtc2dpZCAiRklMRSIKKyN+IG1zZ3N0ciAiUExJSyIKKworI34gbXNnaWQgIkRvIG5vdCBpbnN0YWxsIHNpZ25hbCBoYW5kbGVycyBmb3IgU0lHVVNSMSBhbmQgU0lHVVNSMiIKKyN+IG1zZ3N0ciAiTmllaW5zdGFsb3dhbmllIG9ic8WCdWdpIHN5Z25hxYLDs3cgU0lHVVNSMSBpIFNJR1VTUjIiCmRpZmYgLS1naXQgYS9wby9wdF9CUi5nbW8gYi9wby9wdF9CUi5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM2MWRmZgotLS0gL2Rldi9udWxsCisrKyBiL3BvL3B0X0JSLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9wdF9CUi5wbyBiL3BvL3B0X0JSLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZWJhMDEKLS0tIC9kZXYvbnVsbAorKysgYi9wby9wdF9CUi5wbwpAQCAtMCwwICsxLDEyNTUgQEAKKyMgQnJhemlsaWFuIFBvcnR1Z3Vlc2UgdHJhbnNsYXRpb24gb2YgR1N0cmVhbWVyLgorIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIEdTdHJlYW1lciBwYWNrYWdlLgorIyBGYWJyw61jaW8gR29kb3kgPHNrYXJsbG90QGdtYWlsLmNvbT4sIDIwMDgtMjAxMS4KKyMKKyMgcGlwZWxpbmUgLT4gZmlsYSBkZSBwcm9jZXNzYW1lbnRvCisjIHNpbmsgLT4gY29uc3VtaWRvcgorIyBmbG93IC0+IGZsdXhvCisjIHN0cmVhbSAtPiBmbHV4bworIyBwcmVyb2xsIC0+IHByZXBhcmFyCisjIGNsb2NrIC0+IHRlbXBvcml6YWRvcgorIyBzb3VyY2VzICsgc2lua3MgPSBwYWQKKyMgZWxlbWVudCArIGVsZW1lbnQgKyAuLi4gPSBiaW4KKyMgZGVzY3JpcHRpb24gb2YgbWVkaWEgZm9ybWF0cyA9IGNhcHMKKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdzdHJlYW1lci0wLjEwLjMxLjJcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wOS0yOSAxNDo1NSswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMS0wMS0wOCAwMTozNi0wMzAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBGYWJyw61jaW8gR29kb3kgPHNrYXJsbG90QGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBCcmF6aWxpYW4gUG9ydHVndWVzZSA8bGRwLWJyQGJhemFyLmNvbmVjdGl2YS5jb20uYnI+XG4iCisiTGFuZ3VhZ2U6IHB0X0JSXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gPiAxKTtcbiIKKworbXNnaWQgIlByaW50IHRoZSBHU3RyZWFtZXIgdmVyc2lvbiIKK21zZ3N0ciAiRXhpYmlyIGEgdmVyc8OjbyBkbyBHU3RyZWFtZXIiCisKK21zZ2lkICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKK21zZ3N0ciAiVHJhdGFyIHRvZG9zIGF2aXNvcyBjb21vIGZhdGFpcyIKKworbXNnaWQgIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IgorbXNnc3RyICJFeGliaXIgYXMgY2F0ZWdvcmlhcyBkZSBkZXB1cmHDp8OjbyBkaXNwb27DrXZlaXMgZSBzYWlyIgorCittc2dpZCAiIgorIkRlZmF1bHQgZGVidWcgbGV2ZWwgZnJvbSAxIChvbmx5IGVycm9yKSB0byA1IChhbnl0aGluZykgb3IgMCBmb3Igbm8gb3V0cHV0IgorbXNnc3RyICIiCisiTsOtdmVpcyBkZSBkZXB1cmHDp8OjbyBwcmVkZWZpbmlkb3MgZGUgMSAoYXBlbmFzIGVycm9zKSBhdMOpIDUgKHR1ZG8pIG91IDAgcGFyYSAiCisibmVuaHVtYSBzYcOtZGEiCisKK21zZ2lkICJMRVZFTCIKK21zZ3N0ciAiTsONVkVMIgorCittc2dpZCAiIgorIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5X25hbWU6bGV2ZWwgcGFpcnMgdG8gc2V0IHNwZWNpZmljIGxldmVscyBmb3IgIgorInRoZSBpbmRpdmlkdWFsIGNhdGVnb3JpZXMuIEV4YW1wbGU6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKK21zZ3N0ciAiIgorIkxpc3RhIGRlIFwiY2F0ZWdvcmlhX25vbWU6bsOtdmVsXCIgc2VwYXJhZG9zIHBvciB2w61yZ3VsYXMsIHBhcmEgZGVmaW5pciAiCisibsOtdmVpcyBlc3BlY8OtZmljb3MgcGFyYSBhcyBjYXRlZ29yaWFzIGluZGl2aWR1YWlzLiBFeGVtcGxvOiBHU1RfQVVUT1BMVUc6NSwiCisiR1NUX0VMRU1FTlRfKjozIgorCittc2dpZCAiTElTVCIKK21zZ3N0ciAiTElTVEEiCisKK21zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKK21zZ3N0ciAiRGVzYWJpbGl0YXIgc2HDrWRhIGRlIGRlcHVyYcOnw6NvIGNvbG9yaWRhIgorCittc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCittc2dzdHIgIkRlc2FiaWxpdGFyIGRlcHVyYcOnw6NvIgorCittc2dpZCAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCittc2dzdHIgIkhhYmlsaXRhciBkaWFnbsOzdGljbyBkZXRhbGhhZG8gZG8gY2FycmVnYW1lbnRvIGRvIHBsdWctaW4iCisKK21zZ2lkICJDb2xvbi1zZXBhcmF0ZWQgcGF0aHMgY29udGFpbmluZyBwbHVnaW5zIgorbXNnc3RyICJDYW1pbmhvcywgc2VwYXJhZG9zIHBvciBkb2lzLXBvbnRvcywgZGUgcGx1Zy1pbnMiCisKK21zZ2lkICJQQVRIUyIKK21zZ3N0ciAiQ0FNSU5IT1MiCisKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCisiZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgorbXNnc3RyICIiCisiTGlzdGEsIHNlcGFyYWRhIHBvciB2w61yZ3VsYXMsIGRlIHBsdWctaW5zIHBhcmEgcHLDqS1jYXJyZWdhciBhbMOpbSBkYSBsaXN0YSAiCisiYXJtYXplbmFkYSBuYSB2YXJpw6F2ZWwgZGUgYW1iaWVudGUgR1NUX1BMVUdJTl9QQVRIIgorCittc2dpZCAiUExVR0lOUyIKK21zZ3N0ciAiUExVRy1JTlMiCisKK21zZ2lkICJEaXNhYmxlIHRyYXBwaW5nIG9mIHNlZ21lbnRhdGlvbiBmYXVsdHMgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIgorbXNnc3RyICIiCisiRGVzYWJpbGl0YXIgaW50ZXJjZXDDp8OjbyBkYXMgZmFsaGFzIGRlIHNlZ21lbnRhw6fDo28gZHVyYW50ZSBvIGNhcnJlZ2FtZW50byBkbyAiCisicGx1Zy1pbiIKKworbXNnaWQgIkRpc2FibGUgdXBkYXRpbmcgdGhlIHJlZ2lzdHJ5IgorbXNnc3RyICJEZXNhYmlsaXRhciBhdHVhbGl6YcOnw6NvIGRvIHJlZ2lzdHJvIgorCittc2dpZCAiRGlzYWJsZSBzcGF3bmluZyBhIGhlbHBlciBwcm9jZXNzIHdoaWxlIHNjYW5uaW5nIHRoZSByZWdpc3RyeSIKK21zZ3N0ciAiIgorIkRlc2FiaWxpdGFyIGEgY3JpYcOnw6NvIGRlIHVtIHByb2Nlc3NvIGF1eGlsaWFyIGR1cmFudGUgYSBhbsOhbGlzZSBkbyByZWdpc3RybyIKKworbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgorbXNnc3RyICJPcMOnw7VlcyBkbyBHU3RyZWFtZXIiCisKK21zZ2lkICJTaG93IEdTdHJlYW1lciBPcHRpb25zIgorbXNnc3RyICJFeGliaXIgb3DDp8O1ZXMgZG8gR1N0cmVhbWVyIgorCittc2dpZCAiVW5rbm93biBvcHRpb24iCittc2dzdHIgIk9ww6fDo28gZGVzY29uaGVjaWRhIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICJPIEdTdHJlYW1lciBlbmNvbnRyb3UgdW0gZXJybyBnZXJhbCBuYSBiaWJsaW90ZWNhIHByaW5jaXBhbC4iCisKK21zZ2lkICIiCisiR1N0cmVhbWVyIGRldmVsb3BlcnMgd2VyZSB0b28gbGF6eSB0byBhc3NpZ24gYW4gZXJyb3IgY29kZSB0byB0aGlzIGVycm9yLiIKK21zZ3N0ciAiIgorIk9zIGRlc2Vudm9sdmVkb3JlcyBkbyBHU3RyZWFtZXIgc8OjbyBtdWl0byBwcmVndWnDp29zb3MgcGFyYSBkZWZpbmlyIHVtIGPDs2RpZ28gIgorImRlIGVycm8gcGFyYSBlc3NlIGVycm8uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjb2RlIG5vdCBpbXBsZW1lbnRlZC4iCittc2dzdHIgIkVycm8gaW50ZXJubyBubyBHU3RyZWFtZXI6IGPDs2RpZ28gbsOjbyBpbXBsZW1lbnRhZG8uIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgorInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgorbXNnc3RyICIiCisiRXJybyBubyBHU3RyZWFtZXI6IGZhbGhhIGFvIGFsdGVyYXIgZXN0YWRvIGUgYWxndW0gZWxlbWVudG8gZmFsaG91IGFvIGVudmlhciAiCisidW1hIG1lbnNhZ2VtIGRlIGVycm8gYXByb3ByaWFkYSBjb20gYSByYXrDo28gZGEgZmFsaGEuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCittc2dzdHIgIkVycm8gaW50ZXJubyBubyBHU3RyZWFtZXI6IHByb2JsZW1hIG5vIFBhZC4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiIKK21zZ3N0ciAiRXJybyBpbnRlcm5vIG5vIEdTdHJlYW1lcjogcHJvYmxlbWEgbm8gc2VnbWVudG8gKHRocmVhZCkuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBuZWdvdGlhdGlvbiBwcm9ibGVtLiIKK21zZ3N0ciAiRXJybyBpbnRlcm5vIG5vIEdTdHJlYW1lcjogcHJvYmxlbWEgZGUgbmVnb2NpYcOnw6NvLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogZXZlbnQgcHJvYmxlbS4iCittc2dzdHIgIkVycm8gaW50ZXJubyBubyBHU3RyZWFtZXI6IHByb2JsZW1hIG5vIGV2ZW50by4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4iCittc2dzdHIgIkVycm8gaW50ZXJubyBubyBHU3RyZWFtZXI6IHByb2JsZW1hIG5hIGJ1c2NhLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2FwcyBwcm9ibGVtLiIKK21zZ3N0ciAiRXJybyBpbnRlcm5vIG5vIEdTdHJlYW1lcjogcHJvYmxlbWEgbm8gQ2Fwcy4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKK21zZ3N0ciAiRXJybyBpbnRlcm5vIG5vIEdTdHJlYW1lcjogcHJvYmxlbWEgbmEgZXRpcXVldGEuIgorCittc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKK21zZ3N0ciAiU3VhIGluc3RhbGHDp8OjbyBkbyBHU3RyZWFtZXIgZXN0w6EgY29tIHVtIHBsdWctaW4gZmFsdGFuZG8uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKK21zZ3N0ciAiRXJybyBpbnRlcm5vIG5vIEdTdHJlYW1lcjogcHJvYmxlbWEgbm8gdGVtcG9yaXphZG9yLiIKKworbXNnaWQgIiIKKyJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCisiZGlzYWJsZWQuIgorbXNnc3RyICIiCisiRXN0ZSBhcGxpY2F0aXZvIGVzdMOhIHRlbnRhbmRvIHVzYXIgdW1hIGZ1bmNpb25hbGlkYWRlIGRvIEdTdHJlYW1lciBxdWUgZm9pICIKKyJkZXNhYmlsaXRhZGEuIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICJPIEdTdHJlYW1lciBlbmNvbnRyb3UgdW0gZXJybyBnZXJhbCBuYSBiaWJsaW90ZWNhIGRlIHN1cG9ydGUuIgorCittc2dpZCAiQ291bGQgbm90IGluaXRpYWxpemUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGluaWNpYXIgYSBiaWJsaW90ZWNhIGRlIHN1cG9ydGUuIgorCittc2dpZCAiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBmZWNoYXIgYSBiaWJsaW90ZWNhIGRlIHN1cG9ydGUuIgorCittc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgY29uZmlndXJhciBhIGJpYmxpb3RlY2EgZGUgc3Vwb3J0ZS4iCisKK21zZ2lkICJFbmNvZGluZyBlcnJvci4iCittc2dzdHIgIkVycm8gZGUgY29kaWZpY2HDp8Ojby4iCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHJlc291cmNlIGVycm9yLiIKK21zZ3N0ciAiTyBHU3RyZWFtZXIgZW5jb250cm91IHVtIGVycm8gZ2VyYWwgbm9zIHJlY3Vyc29zLiIKKworbXNnaWQgIlJlc291cmNlIG5vdCBmb3VuZC4iCittc2dzdHIgIlJlY3Vyc28gbsOjbyBlbmNvbnRyYWRvLiIKKworbXNnaWQgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCittc2dzdHIgIk8gcmVjdXJzbyBlc3TDoSBvY3VwYWRvIG91IG7Do28gZGlzcG9uw612ZWwuIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcuIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgYWJyaXIgbyByZWN1cnNvIHBhcmEgbGVpdHVyYS4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBhYnJpciBvIHJlY3Vyc28gcGFyYSBlc2NyaXRhLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGFicmlyIG8gcmVjdXJzbyBwYXJhIGxlaXR1cmEgZSBlc2NyaXRhLiIKKworbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSByZXNvdXJjZS4iCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBmZWNoYXIgbyByZWN1cnNvLiIKKworbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gcmVzb3VyY2UuIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgbGVyIGRvIHJlY3Vyc28uIgorCittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGVzY3JldmVyIG5vIHJlY3Vyc28uIgorCittc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCByZWFsaXphciB1bWEgYnVzY2Egbm8gcmVjdXJzby4iCisKK21zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgc2luY3Jvbml6YXIgbm8gcmVjdXJzby4iCisKK21zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIG9idGVyL2RlZmluaXIgY29uZmlndXJhw6fDtWVzIHBhcmEvZG8gcmVjdXJzby4iCisKK21zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCittc2dzdHIgIk7Do28gZm9pIGRlaXhhZG8gZXNwYcOnbyBubyByZWN1cnNvLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiTyBHU3RyZWFtZXIgZW5jb250cm91IHVtIGVycm8gZ2VyYWwgbm8gZmx1eG8uIgorCittc2dpZCAiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBoYW5kbGluZyBvZiB0aGlzIHN0cmVhbS4gUGxlYXNlIGZpbGUgYSBidWcuIgorbXNnc3RyICIiCisiTyBlbGVtZW50byBuw6NvIGltcGxlbWVudGEgYSBtYW5pcHVsYcOnw6NvIGRlc3NlIGZsdXhvLiBQb3IgZmF2b3IsIHJlbGF0ZSBvICIKKyJlcnJvLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgZGV0ZXJtaW5hciBvIHRpcG8gZG8gZmx1eG8uIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBvZiBhIGRpZmZlcmVudCB0eXBlIHRoYW4gaGFuZGxlZCBieSB0aGlzIGVsZW1lbnQuIgorbXNnc3RyICJPIGZsdXhvIMOpIGRlIHVtIHRpcG8gZGlmZXJlbnRlIGRvIHF1ZSBvIG1hbmlwdWxhZG8gcG9yIGVzc2UgZWxlbWVudG8uIgorCittc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgorbXNnc3RyICJOw6NvIGjDoSB1bSBDT0RFQyBwcmVzZW50ZSBxdWUgcG9zc2EgbWFuaXB1bGFyIGVzc2UgdGlwbyBkZSBmbHV4by4iCisKK21zZ2lkICJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBkZWNvZGlmaWNhciBvIGZsdXhvLiIKKworbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGNvZGlmaWNhciBvIGZsdXhvLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZW11bHRpcGxleCBzdHJlYW0uIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgZGVtdWx0aXBsZXhhciBvIGZsdXhvLiIKKworbXNnaWQgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIG11bHRpcGxleGFyIG8gZmx1eG8uIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiIKK21zZ3N0ciAiRXNzZSBmbHV4byBlc3TDoSBjb20gdW0gZm9ybWF0byBlcnJhZG8uIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iCittc2dzdHIgIk8gZmx1eG8gZXN0w6EgY3JpcHRvZ3JhZmFkbyBlIG7Do28gaMOhIHN1cG9ydGUgYSBkZXNjcmlwdG9ncmFmYcOnw6NvLiIKKworbXNnaWQgIiIKKyJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgY2FuJ3QgYmUgZGVjcnlwdGVkIGJlY2F1c2Ugbm8gc3VpdGFibGUga2V5IGhhcyAiCisiYmVlbiBzdXBwbGllZC4iCittc2dzdHIgIiIKKyJPIGZsdXhvIGVzdMOhIGNyaXB0b2dyYWZhZG8gZSBuw6NvIHDDtGRlIHNlciBkZXNjcmlwdG9ncmFmYWRvIHBvcnF1ZSBuZW5odW1hICIKKyJjaGF2ZSBhcHJvcHJpYWRhIGZvaSBmb3JuZWNpZGEuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCittc2dzdHIgIk5lbmh1bWEgbWVuc2FnZW0gZGUgZXJybyBwYXJhIG8gZG9tw61uaW8gJXMuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcyBhbmQgY29kZSAlZC4iCittc2dzdHIgIk5lbmh1bWEgbWVuc2FnZW0gZGUgZXJybyBwcmVkZWZpbmlkYSBwYXJhIG8gZG9tw61uaW8gJXMgZSBjw7NkaWdvICVkLiIKKworbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKK21zZ3N0ciAiIgorIk8gdGVtcG9yaXphZG9yIHNlbGVjaW9uYWRvIG7Do28gcMO0ZGUgc2VyIHVzYWRvIG5hIGZpbGEgZGUgcHJvY2Vzc2FtZW50by4iCisKK21zZ2lkICJ0aXRsZSIKK21zZ3N0ciAidMOtdHVsbyIKKworbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUiCittc2dzdHIgInTDrXR1bG8gbm9ybWFsbWVudGUgdXNhZG8iCisKK21zZ2lkICJ0aXRsZSBzb3J0bmFtZSIKK21zZ3N0ciAidMOtdHVsbyBwYXJhIG9yZGVuYcOnw6NvIgorCittc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAidMOtdHVsbyBub3JtYWxtZW50ZSB1c2FkbywgcGFyYSBvcmRlbmHDp8OjbyIKKworbXNnaWQgImFydGlzdCIKK21zZ3N0ciAiYXJ0aXN0YSIKKworbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAicGVzc29hKHMpIHJlc3BvbnPDoXZlbChpcykgcGVsYSBncmF2YcOnw6NvIgorCittc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgorbXNnc3RyICJhcnRpc3RhIHBhcmEgb3JkZW5hw6fDo28iCisKK21zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgInBlc3NvYShzKSByZXNwb25zw6F2ZWwoaXMpIHBlbGEgZ3JhdmHDp8OjbywgcGFyYSBvcmRlbmHDp8OjbyIKKworbXNnaWQgImFsYnVtIgorbXNnc3RyICLDoWxidW0iCisKK21zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSIKK21zZ3N0ciAiw6FsYnVtIGNvbnRlbmRvIGVzc2VzIGRhZG9zIgorCittc2dpZCAiYWxidW0gc29ydG5hbWUiCittc2dzdHIgIsOhbGJ1bSBwYXJhIG9yZGVuYcOnw6NvIgorCittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIsOhbGJ1bSBjb250ZW5kbyBlc3NlcyBkYWRvcywgcGFyYSBvcmRlbmHDp8OjbyIKKworbXNnaWQgImFsYnVtIGFydGlzdCIKK21zZ3N0ciAiYXJ0aXN0YSBkbyDDoWxidW0iCisKK21zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQiCittc2dzdHIgIk8gYXJ0aXN0YSBkZSB0b2RvIMOhbGJ1bSwgY29tbyBlbGUgZGV2ZXJpYSBzZXIgZXhpYmlkbyIKKworbXNnaWQgImFsYnVtIGFydGlzdCBzb3J0bmFtZSIKK21zZ3N0ciAiYXJ0aXN0YSBkbyDDoWxidW0gcGFyYSBvcmRlbmHDp8OjbyIKKworbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCIKK21zZ3N0ciAiTyBhcnRpc3RhIGRlIHRvZG8gw6FsYnVtLCBjb21vIGVsZSBkZXZlcmlhIHNlciBvcmRlbmFkbyIKKworbXNnaWQgImRhdGUiCittc2dzdHIgImRhdGEiCisKK21zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCittc2dzdHIgImRhdGEgcXVlIG9zIGRhZG9zIGZvcmFtIGNyaWFkb3MgKGVzdHJ1dHVyYSBHRGF0ZSkiCisKK21zZ2lkICJkYXRldGltZSIKK21zZ3N0ciAiZGF0YSBob3JhIgorCittc2dpZCAiZGF0ZSBhbmQgdGltZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHc3REYXRlVGltZSBzdHJ1Y3R1cmUpIgorbXNnc3RyICJkYXRhIGUgaG9yYSBxdWUgb3MgZGFkb3MgZm9yYW0gY3JpYWRvcyAoZXN0cnV0dXJhIEdzdERhdGVUaW1lKSIKKworbXNnaWQgImdlbnJlIgorbXNnc3RyICJnw6puZXJvIgorCittc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCittc2dzdHIgImfDqm5lcm8gcXVlIGVzdGUgZGFkbyBwZXJ0ZW5jZSIKKworbXNnaWQgImNvbW1lbnQiCittc2dzdHIgImNvbWVudMOhcmlvIgorCittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCittc2dzdHIgInRleHRvIGxpdnJlIGNvbWVudGFuZG8gb3MgZGFkb3MiCisKK21zZ2lkICJleHRlbmRlZCBjb21tZW50IgorbXNnc3RyICJjb21lbnTDoXJpbyBwcm9sb25nYWRvIgorCittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgorbXNnc3RyICIiCisidGV4dG8gbGl2cmUgY29tZW50YW5kbyBvcyBkYWRvcywgdXNhbmRvIG8gZm9ybWF0byBjaGF2ZT12YWxvciBvdSBjaGF2ZVtwdF9CUl0iCisiPWNvbWVudMOhcmlvIgorCittc2dpZCAidHJhY2sgbnVtYmVyIgorbXNnc3RyICJuw7ptZXJvIGRhIGZhaXhhIgorCittc2dpZCAidHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgIm7Dum1lcm8gZGEgZmFpeGEgZGVudHJvIGRhIGNvbGXDp8OjbyIKKworbXNnaWQgInRyYWNrIGNvdW50IgorbXNnc3RyICJuw7ptZXJvIGRlIGZhaXhhcyIKKworbXNnaWQgImNvdW50IG9mIHRyYWNrcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIHRyYWNrIGJlbG9uZ3MgdG8iCittc2dzdHIgIm7Dum1lcm8gZGUgZmFpeGFzIGRlbnRybyBkYSBjb2xlw6fDo28gcXVlIGVzdGEgZmFpeGEgcGVydGVuY2UiCisKK21zZ2lkICJkaXNjIG51bWJlciIKK21zZ3N0ciAibsO6bWVybyBkbyBkaXNjbyIKKworbXNnaWQgImRpc2MgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgIm7Dum1lcm8gZG8gZGlzY28gZGVudHJvIGRhIGNvbGXDp8OjbyIKKworbXNnaWQgImRpc2MgY291bnQiCittc2dzdHIgIm7Dum1lcm8gZGUgZGlzY29zIgorCittc2dpZCAiY291bnQgb2YgZGlzY3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyBkaXNjIGJlbG9uZ3MgdG8iCittc2dzdHIgIm7Dum1lcm8gZGUgZGlzY29zIGRlbnRybyBkYSBjb2xlw6fDo28gcXVlIGVzdGUgZGlzY28gcGVydGVuY2UiCisKK21zZ2lkICJsb2NhdGlvbiIKK21zZ3N0ciAibG9jYWwiCisKK21zZ2lkICIiCisiT3JpZ2luIG9mIG1lZGlhIGFzIGEgVVJJIChsb2NhdGlvbiwgd2hlcmUgdGhlIG9yaWdpbmFsIG9mIHRoZSBmaWxlIG9yIHN0cmVhbSAiCisiaXMgaG9zdGVkKSIKK21zZ3N0ciAiIgorIkEgb3JpZ2VtIGRhIG3DrWRpYSBjb21vIHVtIFVSSSAobG9jYWxpemHDp8OjbyBvbmRlIG8gYXJxdWl2byBvdSBmbHV4byBvcmlnaW5hbCAiCisiZXN0w6EgaG9zcGVkYWRvKSIKKworbXNnaWQgImhvbWVwYWdlIgorbXNnc3RyICJww6FnaW5hIGluaWNpYWwiCisKK21zZ2lkICJIb21lcGFnZSBmb3IgdGhpcyBtZWRpYSAoaS5lLiBhcnRpc3Qgb3IgbW92aWUgaG9tZXBhZ2UpIgorbXNnc3RyICJQw6FnaW5hIGluaWNpYWwgZGVzdGEgbcOtZGlhIChww6FnaW5hIGluaWNpYWwgZG8gYXJ0aXN0YSBvdSBmaWxtZSkiCisKK21zZ2lkICJkZXNjcmlwdGlvbiIKK21zZ3N0ciAiZGVzY3Jpw6fDo28iCisKK21zZ2lkICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCittc2dzdHIgInRleHRvIHBlcXVlbm8gZGVzY3JldmVuZG8gbyBjb250ZcO6ZG8gZG9zIGRhZG9zIgorCittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAidmVyc8OjbyIKKworbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgorbXNnc3RyICJ2ZXJzw6NvIGRlc3RlcyBkYWRvcyIKKworbXNnaWQgIklTUkMiCittc2dzdHIgIklTUkMiCisKK21zZ2lkICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCittc2dzdHIgIiIKKyJDw7NkaWdvIGRlIEdyYXZhw6fDo28gUGFkcsOjbyBJbnRlcm5hY2lvbmFsIChJU1JDKSAtIGNvbnN1bHRlIGh0dHA6Ly93d3cuaWZwaS4iCisib3JnL2lzcmMvIgorCittc2dpZCAib3JnYW5pemF0aW9uIgorbXNnc3RyICJvcmdhbml6YcOnw6NvIgorCittc2dpZCAiY29weXJpZ2h0IgorbXNnc3RyICJjb3B5cmlnaHQiCisKK21zZ2lkICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJpbmZvcm1hw6fDo28gZGUgY29weXJpZ2h0IGRvcyBkYWRvcyIKKworbXNnaWQgImNvcHlyaWdodCB1cmkiCittc2dzdHIgIlVSSSBkbyBjb3B5cmlnaHQiCisKK21zZ2lkICJVUkkgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgIlVSSSBwYXJhIGEgaW5mb3JtYcOnw6NvIGRlIGNvcHlyaWdodCBkb3MgZGFkb3MiCisKKyMsIGZ1enp5Cittc2dpZCAiZW5jb2RlZCBieSIKK21zZ3N0ciAiY29kaWZpY2Fkb3IiCisKK21zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICJjb250YWN0IgorbXNnc3RyICJjb250YXRvIgorCittc2dpZCAiY29udGFjdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiaW5mb3JtYcOnw6NvIGRlIGNvbnRhdG8iCisKK21zZ2lkICJsaWNlbnNlIgorbXNnc3RyICJsaWNlbsOnYSIKKworbXNnaWQgImxpY2Vuc2Ugb2YgZGF0YSIKK21zZ3N0ciAibGljZW7Dp2EgZG9zIGRhZG9zIgorCittc2dpZCAibGljZW5zZSB1cmkiCittc2dzdHIgIlVSSSBkYSBsaWNlbsOnYSIKKworbXNnaWQgIlVSSSB0byB0aGUgbGljZW5zZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiVVJJIHBhcmEgYSBsaWNlbsOnYSBkb3MgZGFkb3MiCisKK21zZ2lkICJwZXJmb3JtZXIiCittc2dzdHIgInBhcnRpY2lwYcOnw6NvIgorCittc2dpZCAicGVyc29uKHMpIHBlcmZvcm1pbmciCittc2dzdHIgInBlc3NvYShzKSBwYXJ0aWNpcGFudGUocykiCisKK21zZ2lkICJjb21wb3NlciIKK21zZ3N0ciAiY29tcG9zaXRvciIKKworbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAicGVzc29hKHMpIHF1ZSBjb21ww7RzKHVzZXJhbSkgYSBncmF2YcOnw6NvIgorCittc2dpZCAiZHVyYXRpb24iCittc2dzdHIgImR1cmHDp8OjbyIKKworbXNnaWQgImxlbmd0aCBpbiBHU3RyZWFtZXIgdGltZSB1bml0cyAobmFub3NlY29uZHMpIgorbXNnc3RyICJjb21wcmltZW50byBlbSB1bmlkYWRlcyBkZSB0ZW1wbyBkbyBHU3RyZWFtZXIgKG5hbm9zZWd1bmRvcykiCisKK21zZ2lkICJjb2RlYyIKK21zZ3N0ciAiQ09ERUMiCisKK21zZ2lkICJjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgIkNPREVDIHVzYWRvIG5vcyBkYWRvcyIKKworbXNnaWQgInZpZGVvIGNvZGVjIgorbXNnc3RyICJDT0RFQyBkZSB2w61kZW8iCisKK21zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgIkNPREVDIGRlIHbDrWRlbyB1c2FkbyBub3MgZGFkb3MiCisKK21zZ2lkICJhdWRpbyBjb2RlYyIKK21zZ3N0ciAiQ09ERUMgZGUgw6F1ZGlvIgorCittc2dpZCAiY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJDT0RFQyBkZSDDoXVkaW8gdXNhZG8gbm9zIGRhZG9zIgorCittc2dpZCAic3VidGl0bGUgY29kZWMiCittc2dzdHIgIkNPREVDIGRlIGxlZ2VuZGEiCisKK21zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgIkNPREVDIGRlIGxlZ2VuZGEgdXNhZG8gbm9zIGRhZG9zIgorCittc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKK21zZ3N0ciAiZm9ybWF0byBkbyBjb250w6ppbmVyIgorCittc2dpZCAiY29udGFpbmVyIGZvcm1hdCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImZvcm1hdG8gZG8gY29udMOqaW5lciB1c2FkbyBwYXJhIG9zIGRhZG9zIgorCittc2dpZCAiYml0cmF0ZSIKK21zZ3N0ciAidGF4YSBkZSBiaXRzIgorCittc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAidGF4YSBkZSBiaXRzIGV4YXRhIG91IG3DqWRpYSwgZW0gYml0cy9zIgorCittc2dpZCAibm9taW5hbCBiaXRyYXRlIgorbXNnc3RyICJ0YXhhIGRlIGJpdHMgbm9taW5hbCIKKworbXNnaWQgIm5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgInRheGEgZGUgYml0cyBub21pbmFsLCBlbSBiaXRzL3MiCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCittc2dzdHIgInRheGEgZGUgYml0cyBtw61uaW1hIgorCittc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAidGF4YSBkZSBiaXRzIG3DrW5pbWEsIGVtIGJpdHMvcyIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSIKK21zZ3N0ciAidGF4YSBkZSBiaXRzIG3DoXhpbWEiCisKK21zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJ0YXhhIGRlIGJpdHMgbcOheGltYSwgZW0gYml0cy9zIgorCittc2dpZCAiZW5jb2RlciIKK21zZ3N0ciAiY29kaWZpY2Fkb3IiCisKK21zZ2lkICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgorbXNnc3RyICJjb2RpZmljYWRvciB1c2FkbyBwZWxvIGZsdXhvIgorCittc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgorbXNnc3RyICJ2ZXJzw6NvIGRvIGNvZGlmaWNhZG9yIgorCittc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAidmVyc8OjbyBkbyBjb2RpZmljYWRvciB1c2FkbyBwZWxvIGZsdXhvIgorCittc2dpZCAic2VyaWFsIgorbXNnc3RyICJzw6lyaWUiCisKK21zZ2lkICJzZXJpYWwgbnVtYmVyIG9mIHRyYWNrIgorbXNnc3RyICJuw7ptZXJvIGRlIHPDqXJpZSBkYSBmYWl4YSIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKK21zZ3N0ciAiZ2FuaG8gZGEgZmFpeGEgKFJlcGxheUdhaW4pIgorCittc2dpZCAidHJhY2sgZ2FpbiBpbiBkYiIKK21zZ3N0ciAiZ2FuaG8gZGEgZmFpeGEgZW0gZGVjaWLDqWlzIgorCittc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBwZWFrIgorbXNnc3RyICJwaWNvIGRhIGZhaXhhIChSZXBsYXlHYWluKSIKKworbXNnaWQgInBlYWsgb2YgdGhlIHRyYWNrIgorbXNnc3RyICJwaWNvIGRhIGZhaXhhIgorCittc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBnYWluIgorbXNnc3RyICJnYW5obyBkbyDDoWxidW0gKFJlcGxheUdhaW4pIgorCittc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKK21zZ3N0ciAiZ2FuaG8gZG8gw6FsYnVtIGVtIGRlY2liw6lpcyIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKK21zZ3N0ciAicGljbyBkbyDDoWxidW0gKFJlcGxheUdhaW4pIgorCittc2dpZCAicGVhayBvZiB0aGUgYWxidW0iCittc2dzdHIgInBpY28gZG8gw6FsYnVtIgorCittc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCittc2dzdHIgIm7DrXZlbCBkZSByZWZlcsOqbmNpYSAoUmVwbGF5R2FpbikiCisKK21zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgorbXNnc3RyICJuw612ZWwgZGUgcmVmZXLDqm5jaWEgZG9zIHZhbG9yZXMgZGUgZ2FuaG8gZGEgZmFpeGEgZSBkbyDDoWxidW0iCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIgorbXNnc3RyICJjw7NkaWdvIGRhIGzDrW5ndWEiCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIGZvciB0aGlzIHN0cmVhbSwgY29uZm9ybWluZyB0byBJU08tNjM5LTEiCittc2dzdHIgImPDs2RpZ28gZGEgbMOtbmd1YSBkZXN0ZSBmbHV4bywgY29uZm9ybWUgbyBJU08tNjM5LTEiCisKK21zZ2lkICJpbWFnZSIKK21zZ3N0ciAiaW1hZ2VtIgorCittc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiaW1hZ2VtIHJlbGFjaW9uYWRhIGEgZXN0ZSBmbHV4byIKKworIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCittc2dpZCAicHJldmlldyBpbWFnZSIKK21zZ3N0ciAibWluaWF0dXJhIgorCittc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICJtaW5pYXR1cmEgcmVsYWNpb25hZGEgYSBlc3RlIGZsdXhvIgorCittc2dpZCAiYXR0YWNobWVudCIKK21zZ3N0ciAiYW5leG8iCisKK21zZ2lkICJmaWxlIGF0dGFjaGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICJhcnF1aXZvIGFuZXhhZG8gYSBlc3RlIGZsdXhvIgorCittc2dpZCAiYmVhdHMgcGVyIG1pbnV0ZSIKK21zZ3N0ciAiYmF0aWRhcyBwb3IgbWludXRvIgorCittc2dpZCAibnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8iCittc2dzdHIgIm7Dum1lcm8gZGUgYmF0aWRhcyBwb3IgbWludXRvIG5vIMOhdWRpbyIKKworbXNnaWQgImtleXdvcmRzIgorbXNnc3RyICJwYWxhdnJhcy1jaGF2ZSIKKworbXNnaWQgImNvbW1hIHNlcGFyYXRlZCBrZXl3b3JkcyBkZXNjcmliaW5nIHRoZSBjb250ZW50IgorbXNnc3RyICJwYWxhdnJhcy1jaGF2ZSBzZXBhcmFkYXMgcG9yIHbDrXJndWxhIGRlc2NyZXZlbmRvIG8gY29udGXDumRvIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIG5hbWUiCittc2dzdHIgIm5vbWUgZGEgbG9jYWxpemHDp8OjbyBnZW9ncsOhZmljYSIKKworbXNnaWQgIiIKKyJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgorInByb2R1Y2VkIgorbXNnc3RyICIiCisiZGVzY3Jpw6fDo28gbGVnw612ZWwgZGEgbG9jYWxpemHDp8OjbyBkZSBvbmRlIGEgbcOtZGlhIGZvaSBncmF2YWRhIG91IHByb2R1emlkYSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBsYXRpdHVkZSIKK21zZ3N0ciAibGF0aXR1ZGUgZGEgbG9jYWxpemHDp8OjbyBnZW9ncsOhZmljYSIKKworbXNnaWQgIiIKKyJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCisic291dGhlcm4gbGF0aXR1ZGVzKSIKK21zZ3N0ciAiIgorImxhdGl0dWRlIGRhIGxvY2FsaXphw6fDo28gZ2VvZ3LDoWZpY2EgZGUgb25kZSBhIG3DrWRpYSBmb2kgZ3JhdmFkYSBvdSBwcm9kdXppZGEgIgorImVtIGdyYXVzIGRlIGFjb3JkbyBjb20gV0dTODQgKHplcm8gY29ycmVzcG9uZGUgYW8gZXF1YWRvciBlIHZhbG9yZXMgIgorIm5lZ2F0aXZvcyBhIGxhdGl0dWRlcyBhbyBzdWwpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKK21zZ3N0ciAibG9uZ2l0dWRlIGRhIGxvY2FsaXphw6fDo28gZ2VvZ3LDoWZpY2EiCisKK21zZ2lkICIiCisiZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCisibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgorbXNnc3RyICIiCisibG9uZ2l0dWRlIGRhIGxvY2FsaXphw6fDo28gZ2VvZ3LDoWZpY2EgZGUgb25kZSBhIG3DrWRpYSBmb2kgZ3JhdmFkYSBvdSBwcm9kdXppZGEgIgorImVtIGdyYXVzIGRlIGFjb3JkbyBjb20gV0dTODQgKHplcm8gY29ycmVzcG9uZGUgYW8gbWVyaWRpYW5vIGRlIEdyZWVud2ljaC9VSyAiCisiZSB2YWxvcmVzIG5lZ2F0aXZvcyBhIGxhdGl0dWRlcyBhbyBvZXN0ZSkiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gZWxldmF0aW9uIgorbXNnc3RyICJlbGV2YcOnw6NvIGRhIGxvY2FsaXphw6fDo28gZ2VvZ3LDoWZpY2EiCisKK21zZ2lkICIiCisiZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKKyJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgorbXNnc3RyICIiCisiZWxldmHDp8OjbyBnZW9ncsOhZmljYSBkZSBvbmRlIGEgbcOtZGlhIGZvaSBncmF2YWRhIG91IHByb2R1emlkYSBlbSBtZXRyb3MgZGUgIgorImFjb3JkbyBjb20gV0dTODQgKHplcm8gw6kgYSBtw6lkaWEgZG8gbsOtdmVsIGRvIG1hcikiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gY291bnRyeSIKK21zZ3N0ciAibG9jYWxpemHDp8OjbyBnZW9ncsOhZmljYSBkbyBwYcOtcyIKKworbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICJwYcOtcywgZW0gaW5nbMOqcywgb25kZSBhIG3DrWRpYSBmb2kgZ3JhdmFkYSBvdSBwcm9kdXppZGEiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKK21zZ3N0ciAibG9jYWxpemHDp8OjbyBnZW9ncsOhZmljYSBkYSBjaWRhZGUiCisKK21zZ2lkICJjaXR5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKK21zZ3N0ciAiY2lkYWRlLCBlbSBpbmdsw6pzLCBvbmRlIGEgbcOtZGlhIGZvaSBncmF2YWRhIG91IHByb2R1emlkYSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKK21zZ3N0ciAic3VibG9jYWxpemHDp8OjbyBnZW9ncsOhZmljYSIKKworbXNnaWQgIiIKKyJhIGxvY2F0aW9uIHdoaXRoaW4gYSBjaXR5IHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZCBvciBjcmVhdGVkIChlLmcuICIKKyJ0aGUgbmVpZ2hib3Job29kKSIKK21zZ3N0ciAiIgorImxvY2FsaXphw6fDo28gbnVtYSBjaWRhZGUgb25kZSBhIG3DrWRpYSBmb2kgcHJvZHV6aWRhIG91IGNyaWFkYSAoZXg6IGJhaXJybykiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gaG9yaXpvbnRhbCBlcnJvciIKK21zZ3N0ciAiZGVzdmlvIGhvcml6b250YWwgZGEgbG9jYWxpemHDp8OjbyBnZW9ncsOhZmljYSIKKworbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgorbXNnc3RyICJkZXN2aW8gZXNwZXJhZG8gbmFzIG1lZGlkYXMgZGUgcG9zaWNpb25hbWVudG8gaG9yaXpvbnRhbCAoZW0gbWV0cm9zKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKK21zZ3N0ciAidmVsb2NpZGFkZSBkZSBtb3ZpbWVudG8gbmEgbG9jYWxpemHDp8OjbyBnZW9ncsOhZmljYSIKKworbXNnaWQgIiIKKyJtb3ZlbWVudCBzcGVlZCBvZiB0aGUgY2FwdHVyaW5nIGRldmljZSB3aGlsZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIGluIG0vcyIKK21zZ3N0ciAiIgorInZlbG9jaWRhZGUgZGUgbW92aW1lbnRvIGRvICBkaXNwb3NpdGl2byBkZSBjYXB0dXJhIGFvIHJlYWxpemFyIGEgY2FwdHVyYSwgZW0gIgorIm0vcyIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBkaXJlY3Rpb24iCittc2dzdHIgImRpcmXDp8OjbyBkZSBtb3ZpbWVudG8gbmEgbG9jYWxpemHDp8OjbyBnZW9ncsOhZmljYSIKKworbXNnaWQgIiIKKyJpbmRpY2F0ZXMgdGhlIG1vdmVtZW50IGRpcmVjdGlvbiBvZiB0aGUgZGV2aWNlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgb2YgYSAiCisibWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sIDAgIgorIm1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKK21zZ3N0ciAiIgorImluZGljYSBhIGRpcmXDp8OjbyBkZSBtb3ZpbWVudG8gZG8gZGlzcG9zaXRpdm8gYW8gcmVhbGl6YXIgYSBjYXB0dXJhIGRlIHVtYSAiCisibcOtZGlhLiDDiSByZXByZXNlbnRhZG8gY29tbyBncmF1cyBlbSByZXByZXNlbnRhw6fDo28gZnJhY2lvbsOhcmlhLCAwIGluZGljYSAiCisiTm9ydGUgZSBpbmNyZW1lbnRhLXNlIG5vIHNlbnRpZG8gZG8gcmVsw7NnaW8iCisKK21zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCittc2dzdHIgImRpcmXDp8OjbyBkZSBjYXB0dXJhIG5hIGxvY2FsaXphw6fDo28gZ2VvZ3LDoWZpY2EiCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGRldmljZSBpcyBwb2ludGluZyB0byB3aGVuIGNhcHR1cmluZyAgYSBtZWRpYS4gIgorIkl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIHJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSAiCisiZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKyJpbmRpY2EgYSBkaXJlw6fDo28gcXVlIG8gZGlzcG9zaXRpdm8gZXN0YXZhIGFwb250YW5kbyBxdWFuZG8gY2FwdHVyYXZhIHVtYSAiCisibcOtZGlhLiDDiSByZXByZXNlbnRhZG8gY29tbyBncmF1cyBlbSByZXByZXNlbnRhw6fDo28gZnJhY2lvbsOhcmlhLCAwIGluZGljYSAiCisiTm9ydGUgZSBpbmNyZW1lbnRhLXNlIG5vIHNlbnRpZG8gZG8gcmVsw7NnaW8iCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZScgaGVyZQorbXNnaWQgInNob3cgbmFtZSIKK21zZ3N0ciAibm9tZSBkbyBwcm9ncmFtYSIKKworbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCittc2dzdHIgIiIKKyJOb21lIGRvIHByb2dyYW1hIGRlIFRWLCBkbyBwb2RjYXN0IG91IGRhIHPDqXJpZSBkZSBvbmRlIGEgbcOtZGlhIHRlbSBvcmlnZW0iCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQorbXNnaWQgInNob3cgc29ydG5hbWUiCittc2dzdHIgInByb2dyYW1hIHBhcmEgb3JkZW5hw6fDo28iCisKK21zZ2lkICIiCisiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIiIKKyJOb21lIGRvIHByb2dyYW1hIGRlIFRWLCBkbyBwb2RjYXN0IG91IGRhIHPDqXJpZSBkZSBvbmRlIGEgbcOtZGlhIHRlbSBvcmlnZW0sICIKKyJwYXJhIG9yZGVuYcOnw6NvIgorCittc2dpZCAiZXBpc29kZSBudW1iZXIiCittc2dzdHIgIm7Dum1lcm8gZG8gZXBpc8OzZGlvIgorCittc2dpZCAiVGhlIGVwaXNvZGUgbnVtYmVyIGluIHRoZSBzZWFzb24gdGhlIG1lZGlhIGlzIHBhcnQgb2YiCittc2dzdHIgIk8gbsO6bWVybyBkbyBlcGlzw7NkaW8gZGEgdGVtcG9yYWRhIHF1ZSBhIG3DrWRpYSBmYXogcGFydGUiCisKK21zZ2lkICJzZWFzb24gbnVtYmVyIgorbXNnc3RyICJuw7ptZXJvIGRhIHRlbXBvcmFkYSIKKworbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICJPIG7Dum1lcm8gZGEgdGVtcG9yYWRhIGRhIHPDqXJpZSBxdWUgYSBtw61kaWEgZmF6IHBhcnRlIgorCittc2dpZCAibHlyaWNzIgorbXNnc3RyICJsZXRyYXMgZGUgbcO6c2ljYSIKKworbXNnaWQgIlRoZSBseXJpY3Mgb2YgdGhlIG1lZGlhLCBjb21tb25seSB1c2VkIGZvciBzb25ncyIKK21zZ3N0ciAiQXMgbGV0cmFzIGRlIG3DunNpY2EgZGEgbcOtZGlhIgorCittc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCittc2dzdHIgImNvbXBvc2l0b3IgcGFyYSBvcmRlbmHDp8OjbyIKKworbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZywgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgInBlc3NvYShzKSBxdWUgY29tcMO0cyBhIGdyYXZhw6fDo28sIHBhcmEgb3JkZW5hw6fDo28iCisKK21zZ2lkICJncm91cGluZyIKK21zZ3N0ciAicGFydGUiCisKK21zZ2lkICIiCisiR3JvdXBzIHJlbGF0ZWQgbWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSB0cmFja3MsIGxpa2UgdGhlIGRpZmZlcmVudCBwaWVjZXMgIgorIm9mIGEgY29uY2VydG8uIEl0IGlzIGEgaGlnaGVyIGxldmVsIHRoYW4gYSB0cmFjaywgYnV0IGxvd2VyIHRoYW4gYW4gYWxidW0iCittc2dzdHIgIiIKKyJQYXJ0ZXMgZGEgbcOtZGlhIHF1ZSBzZSBleHRlbmRlIGVtIHbDoXJpYXMgZmFpeGFzLCBjb21vIGRpZmVyZW50ZXMgcGFydGVzIGRlICIKKyJ1bSBjb25jZXJ0by4gVGVtIHVtIG7DrXZlbCBhY2ltYSBkYSBmYWl4YSwgbWFzIGFiYWl4byBkbyDDoWxidW0iCisKK21zZ2lkICJ1c2VyIHJhdGluZyIKK21zZ3N0ciAiYXZhbGlhw6fDo28gZG8gdXN1w6FyaW8iCisKK21zZ2lkICIiCisiUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCisidGhpcyBtZWRpYSIKK21zZ3N0ciAiIgorIkF2YWxpYcOnw6NvIGF0cmlidcOtZGEgcGVsbyB1c3XDoXJpby4gUXVhbnRvIG1lbGhvciBhIGF2YWxpYcOnw6NvLCBtYWlzIG8gdXN1w6FyaW8gIgorImdvc3RhIGRhIG3DrWRpYSIKKworbXNnaWQgImRldmljZSBtYW51ZmFjdHVyZXIiCittc2dzdHIgImZhYnJpY2FudGUgZG8gZGlzcG9zaXRpdm8iCisKK21zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICJGYWJyaWNhbnRlIGRvIGRpc3Bvc2l0aXZvIHVzYWRvIHBhcmEgY3JpYXIgZXN0YSBtw61kaWEiCisKK21zZ2lkICJkZXZpY2UgbW9kZWwiCittc2dzdHIgIm1vZGVsbyBkbyBkaXNwb3NpdGl2byIKKworbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKK21zZ3N0ciAiTW9kZWxvIGRvIGRpc3Bvc2l0aXZvIHVzYWRvIHBhcmEgY3JpYXIgZXN0YSBtw61kaWEiCisKK21zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgorbXNnc3RyICJub21lIGRvIGFwbGljYXRpdm8iCisKK21zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCittc2dzdHIgIkFwbGljYXRpdm8gdXNhZG8gcGFyYSBjcmlhciBhIG3DrWRpYSIKKworbXNnaWQgImFwcGxpY2F0aW9uIGRhdGEiCittc2dzdHIgIkRhZG9zIGRvIGFwbGljYXRpdm8iCisKK21zZ2lkICJBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIG1lZGlhIgorbXNnc3RyICJEYWRvcyBhcmJpdHLDoXJpb3MgZG8gYXBsaWNhdGl2byBwYXJhIHNlciBzZXJpYWxpemFkbyBuYSBtw61kaWEiCisKK21zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKK21zZ3N0ciAib3JpZW50YcOnw6NvIGRlIGltYWdlbSIKKworbXNnaWQgIkhvdyB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCBiZWZvcmUgZGlzcGxheSIKK21zZ3N0ciAiQ29tbyBhIGltYWdlbSBkZXZlcmlhIHNlciByb3RhY2lvbmFkYSBvdSBpbnZlcnRpZGEgYW50ZXMgZGEgZXhpYmnDp8OjbyIKKworbXNnaWQgIiwgIgorbXNnc3RyICIsICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgorbXNnc3RyICJFUlJPOiBkbyBlbGVtZW50byAlczogJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQWRkaXRpb25hbCBkZWJ1ZyBpbmZvOlxuIgorIiVzXG4iCittc2dzdHIgIiIKKyJJbmZvcm1hw6fDo28gYWRpY2lvbmFsIGRlIGRlcHVyYcOnw6NvOlxuIgorIiVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgorbXNnc3RyICJvIGFycXVpdm8gXCIlc1wiIGVzdMOhIHZhemlvLCBvcGVyYcOnw6NvIG7Do28gcGVybWl0aWRhIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHNraXBwaW5nIgorbXNnc3RyICJuZW5odW0gYXJxdWl2byBcIiVzXCIsIGNhbmNlbGFuZG8iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICJuZW5odW1hIHByb3ByaWVkYWRlIFwiJXNcIiBubyBlbGVtZW50byBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgorbXNnc3RyICIiCisibsOjbyBmb2kgcG9zc8OtdmVsIGRlZmluaXIgYSBwcm9wcmllZGFkZSBcIiVzXCIgbm8gZWxlbWVudG8gXCIlc1wiIHBhcmEgbyAiCisidmFsb3IgXCIlc1wiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgdmluY3VsYXIgJXMgZW0gJXMiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCittc2dzdHIgIm5lbmh1bSBlbGVtZW50byBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNhcHMgXCIlc1wiIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgYW5hbGlzYXIgbyBDYXBzIFwiJXNcIiIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIKK21zZ3N0ciAidsOtbmN1bG8gc2VtIG8gZWxlbWVudG8gZm9udGUiCisKK21zZ2lkICJsaW5rIHdpdGhvdXQgc2luayBlbGVtZW50IgorbXNnc3RyICJ2w61uY3VsbyBzZW0gbyBlbGVtZW50byBjb25zdW1pZG9yIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNvdXJjZSBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJuZW5odW0gZWxlbWVudG8gZm9udGUgcGFyYSBvIFVSSSBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCB0byBsaW5rIFVSSSBcIiVzXCIgdG8iCittc2dzdHIgIm5lbmh1bSBlbGVtZW50byBwYXJhIHZpbmN1bGFyIG8gVVJJIFwiJXNcIiBwYXJhIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAibmVuaHVtIGVsZW1lbnRvIGNvbnN1bWlkb3IgcGFyYSBvIFVSSSBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxpbmsgc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgdmluY3VsYXIgbyBlbGVtZW50byBjb25zdW1pZG9yIHBhcmEgbyBVUkkgXCIlc1wiIgorCittc2dpZCAiZW1wdHkgcGlwZWxpbmUgbm90IGFsbG93ZWQiCittc2dzdHIgIm7Do28gw6kgcGVybWl0aWRvIHF1ZSBhIGZpbGEgZGUgcHJvY2Vzc2FtZW50byBzZWphIHZhemlhIgorCittc2dpZCAiSW50ZXJuYWwgY2xvY2sgZXJyb3IuIgorbXNnc3RyICJFcnJvIGludGVybm8gbm8gdGVtcG9yaXphZG9yLiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCittc2dzdHIgIkVycm8gaW50ZXJubyBubyBmbHV4byBkZSBkYWRvcy4iCisKK21zZ2lkICJBIGxvdCBvZiBidWZmZXJzIGFyZSBiZWluZyBkcm9wcGVkLiIKK21zZ3N0ciAiVW1hIGdyYW5kZSBxdWFudGlkYWRlIGRlIGJ1ZmZlcnMgZXN0w6Egc2VuZG8gZGVzY2FydGFkYS4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCittc2dzdHIgIlByb2JsZW1hIGludGVybm8gbm8gZmx1eG8gZGUgZGFkb3MuIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBzdHJlYW0gZXJyb3IuIgorbXNnc3RyICJFcnJvIGludGVybm8gbm8gZmx1eG8gZGUgZGFkb3MuIgorCittc2dpZCAiRmlsdGVyIGNhcHMiCittc2dzdHIgIkNhcHMgZG8gZmlsdHJvIgorCittc2dpZCAiIgorIlJlc3RyaWN0IHRoZSBwb3NzaWJsZSBhbGxvd2VkIGNhcGFiaWxpdGllcyAoTlVMTCBtZWFucyBBTlkpLiBTZXR0aW5nIHRoaXMgIgorInByb3BlcnR5IHRha2VzIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBwbGllZCBHc3RDYXBzIG9iamVjdC4iCittc2dzdHIgIiIKKyJSZXN0cmluamEgYXMgcG9zc8OtdmVpcyBjYXBhY2lkYWRlcyBwZXJtaXRpZGFzIChOVUxMID0gQU5ZKS4gRGVmaW5pbmRvIGVzc2EgIgorInByb3ByaWVkYWRlIMOpIGxldmFkYSB1bWEgcmVmZXLDqm5jaWEgYW8gb2JqZXRvIEdzdENhcHMgZm9ybmVjaWRvLiIKKworbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJOZW5odW0gbm9tZSBkZSBhcnF1aXZvIGVzcGVjaWZpY2FkbyBwYXJhIGVzY3JpdGEuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGFicmlyIG8gYXJxdWl2byBcIiVzXCIgcGFyYSBlc2NyaXRhLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiRXJybyBhbyBmZWNoYXIgbyBhcnF1aXZvIFwiJXNcIi4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Vla2luZyBpbiBmaWxlIFwiJXNcIi4iCittc2dzdHIgIkVycm8gYW8gYnVzY2FyIG5vIGFycXVpdm8gXCIlc1wiLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiRXJybyBhbyBlc2NyZXZlciBubyBhcnF1aXZvIFwiJXNcIi4iCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiTmVuaHVtIG5vbWUgZGUgYXJxdWl2byBlc3BlY2lmaWNhZG8gcGFyYSBsZWl0dXJhLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBhYnJpciBvIGFycXVpdm8gXCIlc1wiIHBhcmEgbGVpdHVyYS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBvYnRlciBpbmZvcm1hw6fDtWVzIGVtIFwiJXNcIi4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiXCIlc1wiIGlzIGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiXCIlc1wiIMOpIHVtIGRpcmV0w7NyaW8uIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKK21zZ3N0ciAiTyBhcnF1aXZvIFwiJXNcIiDDqSB1bSBzb3F1ZXRlLiIKKworbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCittc2dzdHIgIkZhbGhhIGFww7NzIGFzIGludGVyYcOnw7VlcyByZXF1ZXJpZGFzLiIKKworbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCittc2dzdHIgIk5lbmh1bSBkaXJldMOzcmlvIHRlbXBvcsOhcmlvIGVzcGVjaWZpY2Fkby4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGNyaWFyIG8gYXJxdWl2byB0ZW1wb3LDoXJpbyBcIiVzXCIuIgorCittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKK21zZ3N0ciAiRXJybyBhbyBlc2NyZXZlciBubyBhcnF1aXZvIGJhaXhhZG8uIgorCittc2dpZCAiY2FwcyIKK21zZ3N0ciAiQ2FwcyIKKworbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCittc2dzdHIgImNhcGFjaWRhZGVzIGRldGVjdGFkYXMgbm8gZmx1eG8iCisKK21zZ2lkICJtaW5pbXVtIgorbXNnc3RyICJtw61uaW1vIgorCittc2dpZCAibWF4aW11bSIKK21zZ3N0ciAibcOheGltbyIKKworbXNnaWQgImZvcmNlIGNhcHMiCittc2dzdHIgImZvcsOnYXIgQ2FwcyIKKworbXNnaWQgImZvcmNlIGNhcHMgd2l0aG91dCBkb2luZyBhIHR5cGVmaW5kIgorbXNnc3RyICJmb3LDp2FyIENhcHMgc2VtIHVzYXIgbyB0eXBlZmluZCIKKworbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKK21zZ3N0ciAiTyBmbHV4byBuw6NvIGNvbnTDqW0gZGFkb3MuIgorCittc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKK21zZ3N0ciAiSW50ZXJmYWNlcyBpbXBsZW1lbnRhZGFzOlxuIgorCittc2dpZCAicmVhZGFibGUiCittc2dzdHIgImxlZ8OtdmVsIgorCittc2dpZCAid3JpdGFibGUiCittc2dzdHIgImdyYXbDoXZlbCIKKworbXNnaWQgImNvbnRyb2xsYWJsZSIKK21zZ3N0ciAiY29udHJvbMOhdmVsIgorCittc2dpZCAiY2hhbmdlYWJsZSBpbiBOVUxMLCBSRUFEWSwgUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUiCittc2dzdHIgImVzdGFkbyBhbHRlcsOhdmVsIHBhcmEgTlVMTywgUFJPTlRPLCBQQVVTQURPIG91IFJFUFJPRFVaSU5ETyIKKworbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiCittc2dzdHIgImVzdGFkbyBhbHRlcsOhdmVsIGFwZW5hcyBwYXJhIE5VTE8sIFBST05UTyBvdSBQQVVTQURPIgorCittc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwgb3IgUkVBRFkgc3RhdGUiCittc2dzdHIgImVzdGFkbyBhbHRlcsOhdmVsIGFwZW5hcyBwYXJhIE5VTE8gb3UgUFJPTlRPIgorCittc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgorbXNnc3RyICJBcnF1aXZvcyBjb2xvY2Fkb3MgbmEgbGlzdGEgbmVncmE6IgorCittc2dpZCAiVG90YWwgY291bnQ6ICIKK21zZ3N0ciAiQ29udGFnZW0gdG90YWw6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgorbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKK21zZ3N0clswXSAiJWQgYXJxdWl2byBuYSBsaXN0YSBuZWdyYSIKK21zZ3N0clsxXSAiJWQgYXJxdWl2b3MgbmEgbGlzdGEgbmVncmEiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgcGx1Z2luIgorbXNnaWRfcGx1cmFsICIlZCBwbHVnaW5zIgorbXNnc3RyWzBdICIlZCBwbHVnLWluIgorbXNnc3RyWzFdICIlZCBwbHVnLWlucyIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBibGFja2xpc3QgZW50cnkiCittc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdCBlbnRyaWVzIgorbXNnc3RyWzBdICIlZCBlbnRyYWRhIG5hIGxpc3RhIG5lZ3JhIgorbXNnc3RyWzFdICIlZCBlbnRyYWRhcyBuYSBsaXN0YSBuZWdyYSIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBmZWF0dXJlIgorbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKK21zZ3N0clswXSAiJWQgcmVjdXJzbyIKK21zZ3N0clsxXSAiJWQgcmVjdXJzb3MiCisKK21zZ2lkICJQcmludCBhbGwgZWxlbWVudHMiCittc2dzdHIgIkV4aWJpciB0b2RvcyBlbGVtZW50b3MiCisKK21zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgorbXNnc3RyICJFeGliaXIgbGlzdGEgZG9zIGFycXVpdm9zIG5hIGxpc3RhIG5lZ3JhIgorCittc2dpZCAiIgorIlByaW50IGEgbWFjaGluZS1wYXJzYWJsZSBsaXN0IG9mIGZlYXR1cmVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIG9yIGFsbCAiCisicGx1Z2lucyBwcm92aWRlLlxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBpbiBjb25uZWN0aW9uIHdpdGggZXh0ZXJuYWwgIgorImF1dG9tYXRpYyBwbHVnaW4gaW5zdGFsbGF0aW9uIG1lY2hhbmlzbXMiCittc2dzdHIgIiIKKyJFeGliaXIgdW1hIGxpc3RhLCBsZWfDrXZlbCBwYXJhIG3DoXF1aW5hLCBkZSByZWN1cnNvcyBxdWUgbyBwbHVnLWluICIKKyJlc3BlY2lmaWNhZG8gb3UgdG9kb3Mgb3MgcGx1Zy1pbnMgZm9ybmVjZW0uXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgw5p0aWwgbmEgY29uZXjDo28gY29tIG1lY2FuaXNtb3MgIgorImV4dGVybm9zIGRlIGluc3RhbGHDp8OjbyBhdXRvbcOhdGljYSBkZSBwbHVnLWlucyIKKworbXNnaWQgIkxpc3QgdGhlIHBsdWdpbiBjb250ZW50cyIKK21zZ3N0ciAiTGlzdGFyIG8gY29udGXDumRvIGRvIHBsdWdpbiIKKworbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKK21zZ3N0ciAiRXhpYmlyIGVzcXVlbWFzIFVSSSBjb20gc3Vwb3J0ZSwgY29tIG9zIGVsZW1lbnRvcyBxdWUgb3MgaW1wbGVtZW50YW0iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGxvYWQgcGx1Z2luIGZpbGU6ICVzXG4iCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBjYXJyZWdhciBvIGFycXVpdm8gZG8gcGx1Zy1pbjogJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIGVsZW1lbnQgb3IgcGx1Z2luICclcydcbiIKK21zZ3N0ciAiTmVuaHVtIGVsZW1lbnRvIG91IHBsdWctaW4gXCIlc1wiXG4iCisKK21zZ2lkICJJbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICJPYnRpZGEgYSBtZW5zYWdlbSAjJXUgZG8gZWxlbWVudG8gXCIlc1wiICglcyk6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKK21zZ3N0ciAiT2J0aWRhIGEgbWVuc2FnZW0gIyV1IGRvIFBhZCBcIiVzOiVzXCIgKCVzKTogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICJPYnRpZGEgYSBtZW5zYWdlbSAjJXUgZG8gb2JqZXRvIFwiJXNcIiAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKK21zZ3N0ciAiT2J0aWRhIGEgbWVuc2FnZW0gIyV1ICglcyk6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgRU9TIGZyb20gZWxlbWVudCBcIiVzXCIuXG4iCittc2dzdHIgIk9idGlkbyBvIGZpbmFsIGRvIGZsdXhvIGRvIGVsZW1lbnRvIFwiJXNcIi5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgorbXNnc3RyICJFVElRLiBFTkNPTlRSLiA6IGVuY29udHJhZGEgcGVsbyBlbGVtZW50byBcIiVzXCIuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBwYWQgXCIlczolc1wiLlxuIgorbXNnc3RyICJFVElRLiBFTkNPTlRSLiA6IGVuY29udHJhZGEgcGVsbyBQYWQgXCIlczolc1wiLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKK21zZ3N0ciAiRVRJUS4gRU5DT05UUi4gOiBlbmNvbnRyYWRhIHBlbG8gb2JqZXRvIFwiJXNcIi5cbiIKKworbXNnaWQgIkZPVU5EIFRBR1xuIgorbXNnc3RyICJFVElRVUVUQSBFTkNPTlRSQURBXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklORk86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorIklORk9STUHDh8ODTzpcbiIKKyIlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAiQVZJU086IGRvIGVsZW1lbnRvICVzOiAlc1xuIgorCittc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLi4uXG4iCittc2dzdHIgIlByZXBhcmFkbywgZXNwZXJhbmRvIG8gcHJlZW5jaGltZW50byBkbyBidWZmZXIgcGFyYSBmaW5hbGl6YXIuLi5cbiIKKworbXNnaWQgImJ1ZmZlcmluZy4uLiIKK21zZ3N0ciAicHJlZW5jaGVuZG8gYnVmZmVyLi4uIgorCittc2dpZCAiRG9uZSBidWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKK21zZ3N0ciAiIgorIlByZWVuY2hpbWVudG8gZG8gYnVmZmVyIGNvbXBsZXRvLCBkZWZpbmluZG8gYSBmaWxhIGRlIHByb2Nlc3NhbWVudG8gcGFyYSAiCisiUkVQUk9EVVpJUi4uLlxuIgorCittc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAiIgorIlByZWVuY2hlbmRvIGJ1ZmZlciwgZGVmaW5pbmRvIGEgZmlsYSBkZSBwcm9jZXNzYW1lbnRvIHBhcmEgUEFVU0FETy4uLlxuIgorCittc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKK21zZ3N0ciAiUmVkaXN0cmlidWnDp8OjbyBkZSBsYXTDqm5jaWEuLi5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgorbXNnc3RyICJEZWZpbmluZG8gZXN0YWRvIGRlICVzIGNvbW8gcmVxdWVyaWRvIHBvciAlcy4uLlxuIgorCittc2dpZCAiSW50ZXJydXB0OiBTdG9wcGluZyBwaXBlbGluZSAuLi5cbiIKK21zZ3N0ciAiSW50ZXJydXDDp8OjbzogUGFyYW5kbyBhIGZpbGEgZGUgcHJvY2Vzc2FtZW50by4uLlxuIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nIGVsZW1lbnQ6ICVzXG4iCittc2dzdHIgIm5lbmh1bSBlbGVtZW50byBcIiVzXCIiCisKK21zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCittc2dzdHIgIkV4aWJpciBldGlxdWV0YXMgKG1ldGFkYWRvcykiCisKK21zZ2lkICJPdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBwcm9wZXJ0eSBub3RpZmljYXRpb25zIgorbXNnc3RyICJFeGliaXIgaW5mb3JtYcOnw7VlcyBkbyBlc3RhZG8gZSBub3RpZmljYcOnw7VlcyBkZSBwcm9wcmllZGFkZSIKKworbXNnaWQgIkRvIG5vdCBwcmludCBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24iCittc2dzdHIgIk7Do28gaW1wcmltaXIgbmVuaHVtYSBpbmZvcm1hw6fDo28gZGUgcHJvZ3Jlc3NvIgorCittc2dpZCAiT3V0cHV0IG1lc3NhZ2VzIgorbXNnc3RyICJFeGliaXIgbWVuc2FnZW5zIgorCittc2dpZCAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgb2J0ZXIgaW5mb3JtYcOnw7VlcyBkbyBlc3RhZG8gZGUgc2HDrWRhIGRvIFRJUE8iCisKK21zZ2lkICJUWVBFMSxUWVBFMiwuLi4iCittc2dzdHIgIlRJUE8xLFRJUE8yLC4uLiIKKworbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKK21zZ3N0ciAiTsOjbyBpbnN0YWxlIHVtIG1hbmlwdWxhZG9yIGRlIGZhbGhhcyIKKworbXNnaWQgIlByaW50IGFsbG9jIHRyYWNlIChpZiBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSkiCittc2dzdHIgIkV4aWJpciB0cmlsaGEgZGUgYWxvY2HDp8OjbyAoc2UgaGFiaWxpdGFkbyBuYSBjb21waWxhw6fDo28pIgorCittc2dpZCAiRm9yY2UgRU9TIG9uIHNvdXJjZXMgYmVmb3JlIHNodXR0aW5nIHRoZSBwaXBlbGluZSBkb3duIgorbXNnc3RyICIiCisiRm9yw6dhciBmaW5hbGl6YcOnw6NvIGRvIGZsdXhvIG5vcyBlbGVtZW50b3MgZm9udGUgYW50ZXMgZGUgZGVzbGlnYXIgYSBmaWxhIGRlICIKKyJwcm9jZXNzYW1lbnRvIgorCittc2dpZCAiR2F0aGVyIGFuZCBwcmludCBpbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZDogJXMuXG4iCittc2dzdHIgIkVSUk86IG7Do28gZm9pIHBvc3PDrXZlbCBjb25zdHJ1aXIgYSBmaWxhIGRlIHByb2Nlc3NhbWVudG86ICVzLlxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKK21zZ3N0ciAiRVJSTzogbsOjbyBmb2kgcG9zc8OtdmVsIGNvbnN0cnVpciBhIGZpbGEgZGUgcHJvY2Vzc2FtZW50by5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCittc2dzdHIgIkFWSVNPOiBmaWxhIGRlIHByb2Nlc3NhbWVudG8gY29tIGVycm9zOiAlc1xuIgorCittc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgorbXNnc3RyICJFUlJPOiBvIGVsZW1lbnRvIGRlIFwiZmlsYSBkZSBwcm9jZXNzYW1lbnRvXCIgbsOjbyBmb2kgZW5jb250cmFkby5cbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgorbXNnc3RyICJEZWZpbmluZG8gYSBmaWxhIGRlIHByb2Nlc3NhbWVudG8gcGFyYSBQQVVTQURPLi4uXG4iCisKK21zZ2lkICJFUlJPUjogUGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBhdXNlLlxuIgorbXNnc3RyICJFUlJPOiBBIGZpbGEgZG8gcHJvY2Vzc2FtZW50byBuw6NvIHF1ZXIgcGF1c2FyLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgorbXNnc3RyICIiCisiQSBmaWxhIGRlIHByb2Nlc3NhbWVudG8gZXN0w6EgZXhlY3V0YW5kbyBlIG7Do28gbmVjZXNzaXRhIGRlIFBSRVBBUkHDh8ODTy4uLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTElORyAuLi5cbiIKK21zZ3N0ciAiQSBmaWxhIGRlIHByb2Nlc3NhbWVudG8gZXN0w6EgUFJFUEFSQU5ETy4uLlxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgorbXNnc3RyICJFUlJPOiBhIGZpbGEgZGUgcHJvY2Vzc2FtZW50byBuw6NvIHF1ZXIgcHJlcGFyYXIuXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMRUQgLi4uXG4iCittc2dzdHIgIkEgZmlsYSBkZSBwcm9jZXNzYW1lbnRvIGZvaSBQUkVQQVJBREEuLi5cbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKK21zZ3N0ciAiRGVmaW5pbmRvIGEgZmlsYSBkZSBwcm9jZXNzYW1lbnRvIHBhcmEgUkVQUk9EVVpJTkRPLi4uXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBsYXkuXG4iCittc2dzdHIgIkVSUk86IGEgZmlsYSBkZSBwcm9jZXNzYW1lbnRvIG7Do28gcXVlciByZXByb2R1emlyLlxuIgorCittc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gRm9yY2luZyBFT1Mgb24gdGhlIHBpcGVsaW5lXG4iCittc2dzdHIgIiIKKyJGaW5hbGl6YXIgZmx1eG8gYW8gZGVzbGlnYXIgaGFiaWxpdGFkbyAtLSBGb3LDp2FuZG8gZmluYWxpemHDp8OjbyBkbyBmbHV4byBuYSAiCisiZmlsYSBkZSBwcm9jZXNzYW1lbnRvXG4iCisKK21zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKK21zZ3N0ciAiRXNwZXJhbmRvIHBlbG8gZmluYWwgZG8gZmx1eG8uLi5cbiIKKworbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCittc2dzdHIgIkZpbmFsIGRvIGZsdXhvIHJlY2ViaWRvIC0gcGFyYW5kbyBhIGZpbGEgZGUgcHJvY2Vzc2FtZW50by4uLlxuIgorCittc2dpZCAiQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgd2FpdGluZyBmb3IgRU9TXG4iCittc2dzdHIgIlVtIGVycm8gb2NvcnJldSBhbyBlc3BlcmFyIHBlbG8gZmluYWwgZG8gZmx1eG9cbiIKKworbXNnaWQgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgorbXNnc3RyICJFeGVjdcOnw6NvIGZpbmFsaXphZGEgZGVwb2lzIGRlICUiCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIC4uLlxuIgorbXNnc3RyICJEZWZpbmluZG8gYSBmaWxhIGRlIHByb2Nlc3NhbWVudG8gcGFyYSBQUk9OVE8uLi5cbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCAuLi5cbiIKK21zZ3N0ciAiRGVmaW5pbmRvIGEgZmlsYSBkZSBwcm9jZXNzYW1lbnRvIHBhcmEgTlVMTy4uLlxuIgorCittc2dpZCAiRnJlZWluZyBwaXBlbGluZSAuLi5cbiIKK21zZ3N0ciAiTGliZXJhbmRvIGEgZmlsYSBkZSBwcm9jZXNzYW1lbnRvLi4uXG4iCisKKyN+IG1zZ2lkICJVc2FnZTogZ3N0LXhtbGxhdW5jaCA8ZmlsZS54bWw+IFsgZWxlbWVudC5wcm9wZXJ0eT12YWx1ZSAuLi4gXVxuIgorI34gbXNnc3RyICIiCisjfiAiVXNvOiBnc3QteG1sbGF1bmNoIDxhcnF1aXZvLnhtbD4gWyBlbGVtZW50by5wcm9wcmllZGFkZT12YWxvciAuLi4gXVxuIgorCisjfiBtc2dpZCAiRVJST1I6IHBhcnNlIG9mIHhtbCBmaWxlICclcycgZmFpbGVkLlxuIgorI34gbXNnc3RyICJFUlJPOiBhIHZhbGlkYcOnw6NvIGRvIGFycXVpdm8geG1sIFwiJXNcIiBmYWxob3UuXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogbm8gdG9wbGV2ZWwgcGlwZWxpbmUgZWxlbWVudCBpbiBmaWxlICclcycuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJFUlJPOiBuZW5odW0gZWxlbWVudG8gZGUgbsOtdmVsIHN1cGVyaW9yIG5hIGZpbGEgZGUgcHJvY2Vzc2FtZW50byBkbyAiCisjfiAiYXJxdWl2byBcIiVzXCIuXG4iCisKKyN+IG1zZ2lkICJXQVJOSU5HOiBvbmx5IG9uZSB0b3BsZXZlbCBlbGVtZW50IGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJBVklTTzogYXR1YWxtZW50ZSBow6Egc3Vwb3J0ZSBhcGVuYXMgYSB1bSBlbGVtZW50byBkZSBuw612ZWwgc3VwZXJpb3IuXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogY291bGQgbm90IHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAlZDogJXMuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJFUlJPOiBuw6NvIGZvaSBwb3Nzw612ZWwgdmFsaWRhciBvIGFyZ3VtZW50byAlZCBkYSBsaW5oYSBkZSBjb21hbmRvOiAlcy5cbiIKKworI34gbXNnaWQgIldBUk5JTkc6IGVsZW1lbnQgbmFtZWQgJyVzJyBub3QgZm91bmQuXG4iCisjfiBtc2dzdHIgIkFWSVNPOiBvIGVsZW1lbnRvIGNvbSBvIG5vbWUgXCIlc1wiIG7Do28gZm9pIGVuY29udHJhZG8uXG4iCisKKyN+IG1zZ2lkICJTYXZlIHhtbCByZXByZXNlbnRhdGlvbiBvZiBwaXBlbGluZSB0byBGSUxFIGFuZCBleGl0IgorI34gbXNnc3RyICIiCisjfiAiU2FsdmFyIHJlcHJlc2VudGHDp8OjbyBkYSBmaWxhIGRlIHByb2Nlc3NhbWVudG8gY29tbyB4bWwgcGFyYSBvIEFSUVVJVk8gZSAiCisjfiAic2FpciIKKworI34gbXNnaWQgIkZJTEUiCisjfiBtc2dzdHIgIkFSUVVJVk8iCisKKyN+IG1zZ2lkICJEbyBub3QgaW5zdGFsbCBzaWduYWwgaGFuZGxlcnMgZm9yIFNJR1VTUjEgYW5kIFNJR1VTUjIiCisjfiBtc2dzdHIgIk7Do28gZml4YXIgbWFuaXB1bGFkb3JlcyBkZSBzaW5hbCBwYXJhIFNJR1VTUjEgZSBTSUdVU1IyIgpkaWZmIC0tZ2l0IGEvcG8vcXVvdC5zZWQgYi9wby9xdW90LnNlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTIyYzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vcXVvdC5zZWQKQEAgLTAsMCArMSw2IEBACitzLyJcKFteIl0qXCkiL+KAnFwx4oCdL2cKK3MvYFwoW15gJ10qXCknL+KAmFwx4oCZL2cKK3MvICdcKFteYCddKlwpJyAvIOKAmFwx4oCZIC9nCitzLyAnXChbXmAnXSpcKSckLyDigJhcMeKAmS9nCitzL14nXChbXmAnXSpcKScgL+KAmFwx4oCZIC9nCitzL+KAnOKAnS8iIi9nCmRpZmYgLS1naXQgYS9wby9yZW1vdmUtcG90Y2RhdGUuc2luIGIvcG8vcmVtb3ZlLXBvdGNkYXRlLnNpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDM2YzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vcmVtb3ZlLXBvdGNkYXRlLnNpbgpAQCAtMCwwICsxLDE5IEBACisjIFNlZCBzY3JpcHQgdGhhdCByZW1vdmUgdGhlIFBPVC1DcmVhdGlvbi1EYXRlIGxpbmUgaW4gdGhlIGhlYWRlciBlbnRyeQorIyBmcm9tIGEgUE9UIGZpbGUuCisjCisjIFRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIGZvbGxvd2luZyBvY2N1cnJlbmNlcyBvZiB0aGUKKyMgcGF0dGVybiBpcyBhY2hpZXZlZCBieSBsb29raW5nIGF0IHRoZSBob2xkIHNwYWNlLgorL14iUE9ULUNyZWF0aW9uLURhdGU6IC4qIiQveworeAorIyBUZXN0IGlmIHRoZSBob2xkIHNwYWNlIGlzIGVtcHR5Lgorcy9QL1AvCit0YQorIyBZZXMgaXQgd2FzIGVtcHR5LiBGaXJzdCBvY2N1cnJlbmNlLiBSZW1vdmUgdGhlIGxpbmUuCitnCitkCitiYgorOmEKKyMgVGhlIGhvbGQgc3BhY2Ugd2FzIG5vbmVtcHR5LiBGb2xsb3dpbmcgb2NjdXJyZW5jZXMuIERvIG5vdGhpbmcuCit4Cis6YgorfQpkaWZmIC0tZ2l0IGEvcG8vcm8uZ21vIGIvcG8vcm8uZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMmNmY2YKLS0tIC9kZXYvbnVsbAorKysgYi9wby9yby5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vcm8ucG8gYi9wby9yby5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTdiMGNiCi0tLSAvZGV2L251bGwKKysrIGIvcG8vcm8ucG8KQEAgLTAsMCArMSwxMjUzIEBACisjIFJvbWFuaWFuIHRyYW5zbGF0aW9uIGZvciBnc3RyZWFtZXIKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdzdHJlYW1lciBwYWNrYWdlLgorIyBMdWNpYW4gQWRyaWFuIEdyaWppbmN1IDxsdWNpYW4uZ3JpamluY3VAZ21haWwuY29tPiwgMjAxMC4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdzdHJlYW1lciAwLjEwLjI5LjJcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wOS0yOSAxNDo1NSswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0wOC0xNiAwMToxMCswMzAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBMdWNpYW4gQWRyaWFuIEdyaWppbmN1IDxsdWNpYW4uZ3JpamluY3VAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IFJvbWFuaWFuIDx0cmFuc2xhdGlvbi10ZWFtLXJvQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJMYW5ndWFnZTogcm9cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTM7IHBsdXJhbD0obj09MSA/IDAgOiAobj09MCB8fCAobiUxMDAgPiAwICYmIG4lMTAwIDwgIgorIjIwKSkgPyAxIDogMik7O1xuIgorIlgtR2VuZXJhdG9yOiBWaXJ0YWFsIDAuNi4xXG4iCisKK21zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCittc2dzdHIgIkFmaciZZWF6xIMgdmVyc2l1bmVhIEdTdHJlYW1lciIKKworbXNnaWQgIk1ha2UgYWxsIHdhcm5pbmdzIGZhdGFsIgorbXNnc3RyICJTZXRlYXrEgyB0b2F0ZSBhdmVydGl6xINyaWxlIGNhIGZpaW5kIGZhdGFsZSIKKworbXNnaWQgIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IgorbXNnc3RyICJBZmnImWVhesSDIGNhdGVnb3JpaWxlIGRlIGRlcGFuYXJlIGRpc3BvbmliaWxlIMiZaSBpZciZaSIKKworbXNnaWQgIiIKKyJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gNSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKK21zZ3N0ciAiIgorIk5pdmVsdWwgc3RhbmRhcmQgZGUgZGVwYW5hcmUgZGUgbGEgMSAobnVtYWkgZXJvcmlsZSkgbGEgNSAob3JpY2UpIHNhdSAwIGbEg3LEgyAiCisiYWZpyJlhcmUiCisKK21zZ2lkICJMRVZFTCIKK21zZ3N0ciAiTklWRUwiCisKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCisidGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgorbXNnc3RyICIiCisiTGlzdGEgc2VwYXJhdMSDIGRlIHZpcmd1bGUgY3UgcGVyZWNoaWxlIG51bWVfY2F0ZWdvcmllOm5pdmVsIHBlbnRydSBhIHNldGEgIgorIm5pdmVsdWwgc3BlY2lmaWMgcGVudHJ1IGZpZWNhcmUgY2F0ZWdvcmllLiBFeGVtcGx1OiBHU1RfQVVUT1BMVUc6NSwiCisiR1NUX0VMRU1FTlRfKjozIgorCittc2dpZCAiTElTVCIKK21zZ3N0ciAiTElTVMSCIgorCittc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCittc2dzdHIgIkRlemFjdGl2ZWF6xIMgYWZpyJlhcmVhIMOubiBjdWxvcmkgcGVudHJ1IGRlcGFuYXJlIgorCittc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCittc2dzdHIgIkRlemFjdGl2ZWF6xIMgZGVwYW5hcmVhIgorCittc2dpZCAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCittc2dzdHIgIiIKKyJBY3RpdmVhesSDIGRpYWdub3N0aWNlbGUgZGV0YWxpYXRlIHBlbnRydSDDrm5jxINyY2FyZWEgbW9kdWxlbG9yIGRlIGV4dGVuc2llIgorCittc2dpZCAiQ29sb24tc2VwYXJhdGVkIHBhdGhzIGNvbnRhaW5pbmcgcGx1Z2lucyIKK21zZ3N0ciAiQ8SDaWxlIGPEg3RyZSBtb2R1bGUgZGUgZXh0ZW5zaWUsIHNlcGFyYXRlIHByaW4gZG91xIMgcHVuY3RlICg6KSIKKworbXNnaWQgIlBBVEhTIgorbXNnc3RyICJDxIJJIgorCittc2dpZCAiIgorIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgorImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKK21zZ3N0ciAiIgorIkxpc3RhIG1vZHVsZWxvciBkZSBwcmXDrm5jxINyY2F0LCBzZXBhcmF0ZSBwcmluIHZpcmd1bMSDLCDDrm4gcGx1cyBmYcibxIMgZGUgbGlzdGEgIgorInN0b2NhdMSDIMOubiB2YXJpYWJpbGEgZGUgbWVkaXUgR1NUX1BMVUdJTl9QQVRIIgorCittc2dpZCAiUExVR0lOUyIKK21zZ3N0ciAiTU9EVUxFIgorCittc2dpZCAiRGlzYWJsZSB0cmFwcGluZyBvZiBzZWdtZW50YXRpb24gZmF1bHRzIGR1cmluZyBwbHVnaW4gbG9hZGluZyIKK21zZ3N0ciAiIgorIkRlemFjdGl2ZWF6xIMgY2FwdHVyYXJlYSBlcm9yaWxvciBkZSBzZWdtZW50YXJlIMOubiB0aW1wdWwgw65uY8SDcmPEg3JpaSBtb2R1bGVsb3IiCisKK21zZ2lkICJEaXNhYmxlIHVwZGF0aW5nIHRoZSByZWdpc3RyeSIKK21zZ3N0ciAiRGV6YWN0aXZlYXrEgyBhY3R1YWxpemFyZWEgcmVnaXN0cnVsdWkiCisKK21zZ2lkICJEaXNhYmxlIHNwYXduaW5nIGEgaGVscGVyIHByb2Nlc3Mgd2hpbGUgc2Nhbm5pbmcgdGhlIHJlZ2lzdHJ5IgorbXNnc3RyICIiCisiRGV6YWN0aXZlYXrEgyBsYW5zYXJlYSBkZSBwcm9jZXNlIGFqdXTEg3RvYXJlIMOubiB0aW1wdWwgc2NhbsSDcmlpIHJlZ2lzdHJ1bHVpIgorCittc2dpZCAiR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgIk9wyJtpdW5pIEdTdHJlYW1lciIKKworbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgIkFyYXTEgyBvcMibaXVuaWxlIEdTdHJlYW1lciIKKworbXNnaWQgIlVua25vd24gb3B0aW9uIgorbXNnc3RyICJPcMibaXVuZSBuZWN1bm9zY3V0xIMiCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIGNvcmUgbGlicmFyeSBlcnJvci4iCittc2dzdHIgIkdTdHJlYW1lciBhIMOubnTDomxuaXQgbyBlcm9hcmUgZ2VuZXJhbMSDIMOubnRyLW8gYmlibGlvdGVjxIMgcHJpbmNpcGFsxIMuIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyBlcnJvci4iCittc2dzdHIgIiIKKyJEZXp2b2x0YXRvcmlpIHByb2dyYW11bHVpIEdTdHJlYW1lciBhdSBmb3N0IHByZWEgbGVuZciZaSBwZW50cnUgYSBhdHJpYnVpIHVuICIKKyJjb2QgYWNlc3RlaSBlcm9yaS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKK21zZ3N0ciAiRXJvYXJlIGludGVybsSDIEdTdHJlYW1lcjogY29kIG5laW1wbGVtZW50YXQuIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgorInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgorbXNnc3RyICIiCisiRXJvYXJlIEdTdHJlYW1lcjogc2NoaW1iYXJlYSBkZSBzdGFyZSBudSBhIHJldciZaXQgyJlpIHVuIGVsZW1lbnQgbnUgcGVudHJ1IGEgIgorInBvc3RhIHVuIG1lc2FqIGRlIGVyb2FyZSBjb3Jlc3B1bnrEg3RvciBjdSBtb3RpdnVsIGXImWVjdWx1aS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHBhZCBwcm9ibGVtLiIKK21zZ3N0ciAiRXJvYXJlIGludGVybsSDIEdTdHJlYW1lcjogcHJvYmxlbcSDIGRlIOKAnnBhZOKAnS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiIKK21zZ3N0ciAiRXJvYXJlIGludGVybsSDIEdTdHJlYW1lcjogcHJvYmxlbcSDIGN1IGZpcmVsZSBkZSBleGVjdcibaWUuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBuZWdvdGlhdGlvbiBwcm9ibGVtLiIKK21zZ3N0ciAiRXJvYXJlIGludGVybsSDIEdTdHJlYW1lcjogcHJvYmxlbcSDIGRlIG5lZ29jaWVyZS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgorbXNnc3RyICJFcm9hcmUgaW50ZXJuxIMgR1N0cmVhbWVyOiBwcm9ibGVtxIMgbGVnYXTEgyBkZSB1biBldmVuaW1lbnQuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uIgorbXNnc3RyICJFcm9hcmUgaW50ZXJuxIMgR1N0cmVhbWVyOiBwcm9ibGVtxIMgZGUgZGVydWxhcmUuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgorbXNnc3RyICJFcm9hcmUgaW50ZXJuxIMgR1N0cmVhbWVyOiBwcm9ibGVtxIMgZGUgbWFqdXNjdWxlLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGFnIHByb2JsZW0uIgorbXNnc3RyICJFcm9hcmUgaW50ZXJuxIMgR3N0cmVhbWVyOiBwcm9ibGVtxIMgZGUgZXRpY2hldMSDLiIKKworbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCittc2dzdHIgIkxpcHNlyJl0ZSB1biBtb2R1bCBkaW4gaW5zdGFsYXJlYSBwcm9ncmFtdWx1aSBHU3RyZWFtZXIuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKK21zZ3N0ciAiRXJvYXJlIGludGVybsSDIEdTdHJlYW1lcjogcHJvYmxlbcSDIGRlIGNlYXMuIgorCittc2dpZCAiIgorIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGhhcyBiZWVuICIKKyJkaXNhYmxlZC4iCittc2dzdHIgIiIKKyJBY2Vhc3TEgyBhcGxpY2HIm2llIMOubmNlYXJjxIMgc8SDIGZvbG9zZWFzY8SDIG8gZnVuY8ibaWUgYSBwcm9ncmFtdWx1aSBHU3RyZWFtZXIgIgorImNhcmUgYSBmb3N0IGRlemFjdGl2YXTEgy4iCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN1cHBvcnRpbmcgbGlicmFyeSBlcnJvci4iCittc2dzdHIgIkdTdHJlYW1lciBhIMOubnTDomxuaXQgbyBlcm9hcmUgZ2VuZXJhbMSDIMOubnRyLW8gYmlibGlvdGVjxIMgc3Vwb3J0LiIKKworbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIk51IHNlIHBvYXRlIGluacibaWFsaXphIGJpYmxpb3RlY2Egc3Vwb3J0LiIKKworbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJOdSBzZSBwb2F0ZSDDrm5jaGlkZSBiaWJsaW90ZWNhIHN1cG9ydC4iCisKK21zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIk51IHNlIHBvYXRlIGNvbmZpZ3VyYSBiaWJsaW90ZWNhIHN1cG9ydC4iCisKK21zZ2lkICJFbmNvZGluZyBlcnJvci4iCittc2dzdHIgIiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIgYSDDrm50w6Jsbml0IG8gZXJvYXJlIGdlbmVyYWzEgyBkZSByZXN1cnNlLiIKKworbXNnaWQgIlJlc291cmNlIG5vdCBmb3VuZC4iCittc2dzdHIgIlJlc3Vyc8SDIG5lZ8SDc2l0xIMuIgorCittc2dpZCAiUmVzb3VyY2UgYnVzeSBvciBub3QgYXZhaWxhYmxlLiIKK21zZ3N0ciAiUmVzdXJzxIMgb2N1cGF0xIMgc2F1IG5lZGlzcG9uaWJpbMSDLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiTnUgc2UgcG9hdGUgZGVzY2hpZGUgcmVzdXJzYSBwZW50cnUgY2l0aXJlLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiTnUgc2UgcG9hdGUgZGVzY2hpZGUgcmVzdXJzYSBwZW50cnUgc2NyaWVyZS4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCittc2dzdHIgIk51IHNlIHBvYXRlIGRlc2NoaWRlIHJlc3Vyc2EgcGVudHJ1IGNpdGlyZSDImWkgc2NyaWVyZS4iCisKK21zZ2lkICJDb3VsZCBub3QgY2xvc2UgcmVzb3VyY2UuIgorbXNnc3RyICJOdSBzZSBwb2F0ZSDDrm5jaGlkZSByZXN1cnNhLiIKKworbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gcmVzb3VyY2UuIgorbXNnc3RyICJOdSBzZSBwb2F0ZSBjaXRpIGRpbiByZXN1cnPEgy4iCisKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gcmVzb3VyY2UuIgorbXNnc3RyICJOdSBzZSBwb2F0ZSBzY3JpZSDDrm4gcmVzdXJzxIMuIgorCittc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCittc2dzdHIgIk51IHNlIHBvYXRlIGRlcnVsYSDDrm4gcmVzdXJzxIMuIgorCittc2dpZCAiQ291bGQgbm90IHN5bmNocm9uaXplIG9uIHJlc291cmNlLiIKK21zZ3N0ciAiTnUgc2UgcG9hdGUgc2luY3Jvbml6YSByZXN1cnNhLiIKKworbXNnaWQgIkNvdWxkIG5vdCBnZXQvc2V0IHNldHRpbmdzIGZyb20vb24gcmVzb3VyY2UuIgorbXNnc3RyICJOdSBzLWF1IHB1dHV0IG9iyJtpbmUvZGVmaW5pIGNvbmZpZ3VyxINyaWxlIGRpbi/Drm4gcmVzdXJzxIMuIgorCittc2dpZCAiTm8gc3BhY2UgbGVmdCBvbiB0aGUgcmVzb3VyY2UuIgorbXNnc3RyICJOdSBtYWkgZXhpc3TEgyBzcGHIm2l1IGxpYmVyIHBlIHJlc3Vyc8SDLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIGEgw65udMOibG5pdCBvIGVyb2FyZSBnZW5lcmFsxIMgZGUgZmx1eC4iCisKK21zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCittc2dzdHIgIiIKKyJFbGVtZW50dWwgbnUgaW1wbGVtZW50ZWF6xIMgZ2VzdGlvbmFyZWEgYWNlc3R1aSBmbHV4LiBUcmltaXRlyJtpIG8gc2VzaXphcmUgZGUgIgorImRlZmVjyJtpdW5lLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgorbXNnc3RyICJOdSBzZSBwb2F0ZSBkZXRlcm1pbmEgdGlwdWwgZmx1eHVsdWkuIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBvZiBhIGRpZmZlcmVudCB0eXBlIHRoYW4gaGFuZGxlZCBieSB0aGlzIGVsZW1lbnQuIgorbXNnc3RyICJGbHV4dWwgZXN0ZSBkZSB1biB0aXAgZGlmZXJpdCBkZSBjZWwgZ2VzdGlvbmF0IGRlIGFjZXN0IGVsZW1lbnQuIgorCittc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgorbXNnc3RyICJOdSBleGlzdMSDIG5pY2l1biBjb2RlYyBjYXJlIHPEgyBwb2F0xIMgZ2VzdGlvbmEgYWNlc3QgdGlwIGRlIGZsdXguIgorCittc2dpZCAiQ291bGQgbm90IGRlY29kZSBzdHJlYW0uIgorbXNnc3RyICJOdSBzZSBwb2F0ZSBkZWNvZGEgZmx1eHVsLiIKKworbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKK21zZ3N0ciAiTnUgc2UgcG9hdGUgY29kYSBmbHV4dWwuIgorCittc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIk51IHNlIHBvYXRlIGRlbXVsdGlwbGV4YSBmbHV4dWwuIgorCittc2dpZCAiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIgorbXNnc3RyICJOdSBzZSBwb2F0ZSBtdWx0aXBsZXhhIGZsdXh1bC4iCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIgorbXNnc3RyICJGbHV4dWwgZXN0ZSDDrm50ci11biBmb3JtYXQgZ3JlyJlpdC4iCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiRmx1eHVsIGVzdGUgY3JpcHRhdCDImWkgZGVjcmlwdGFyZWEgbnUgZXN0ZSBzdXBvcnRhdMSDLiIKKworbXNnaWQgIiIKKyJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgY2FuJ3QgYmUgZGVjcnlwdGVkIGJlY2F1c2Ugbm8gc3VpdGFibGUga2V5IGhhcyAiCisiYmVlbiBzdXBwbGllZC4iCittc2dzdHIgIiIKKyJGbHV4dWwgZXN0ZSBjcmlwdGF0IMiZaSBudSBwb2F0ZSBmaSBkZWNyaXB0YXQgZGVvYXJlY2UgbnUgcy1hIG9mZXJpdCBvIGNoZWllICIKKyJwb3RyaXZpdMSDLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMuIgorbXNnc3RyICJOaWNpdW4gbWVzYWogZGUgZXJvYXJlIHBlbnRydSBkb21lbml1bCAlcy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKK21zZ3N0ciAiTmljaXVuIG1lc2FqIHN0YW5kYXJkIGRlIGVyb2FyZSBwZW50cnUgZG9tZW5pdWwgJXMgyJlpIGNvZHVsICVkLiIKKworbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKK21zZ3N0ciAiQ2Vhc3VsIHNlbGVjdGF0IG51IHBvYXRlIGZpIHV0aWxpemF0IMOubiBsaW5pYSBkZSBhc2FtYmxhcmUuIgorCittc2dpZCAidGl0bGUiCittc2dzdHIgInRpdGx1IgorCittc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKK21zZ3N0ciAidGl0bHUgZm9sb3NpdCDDrm4gbW9kIG9iaciZbnVpdCIKKworbXNnaWQgInRpdGxlIHNvcnRuYW1lIgorbXNnc3RyICJudW1lIGRlIHNvcnRhcmUgYWwgdGl0bHVsdWkiCisKK21zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJ0aXRsdSBmb2xvc2l0IMOubiBtb2Qgb2JpyJludWl0IMOubiBzY29wIGRlIHNvcnRhcmUiCisKK21zZ2lkICJhcnRpc3QiCittc2dzdHIgImFydGlzdCIKKworbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAicGVyc29hbmEgcmVzcG9uc2FiaWzEgyBwZW50cnUgw65ucmVnaXN0cmFyZSIKKworbXNnaWQgImFydGlzdCBzb3J0bmFtZSIKK21zZ3N0ciAibnVtZSBkZSBzb3J0YXJlIGFsIGFydGlzdHVsdWkiCisKK21zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgInBlcnNvYW5hIHJlc3BvbnNhYmlsxIMgcGVudHJ1IMOubnJlZ2lzdHJhcmVhIMOubiBzY29wIGRlIHNvcnRhcmUiCisKK21zZ2lkICJhbGJ1bSIKK21zZ3N0ciAiYWxidW0iCisKK21zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSIKK21zZ3N0ciAiYWxidW0gY2FyZSBjb27Im2luZSBhY2VzdGUgZGF0ZSIKKworbXNnaWQgImFsYnVtIHNvcnRuYW1lIgorbXNnc3RyICJudW1lbGUgZGUgc29ydGFyZSBhbCBhbGJ1bXVsdWkiCisKK21zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiYWxidW0gY2FyZSBjb27Im2luZSBhY2VzdGUgZGF0ZSDDrm4gc2NvcCBkZSBzb3J0YXJlIgorCittc2dpZCAiYWxidW0gYXJ0aXN0IgorbXNnc3RyICJhcnRpc3QgYWxidW0iCisKK21zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQiCittc2dzdHIgIkFydGlzdHVsIGFsYnVtdWx1aSDDrm50cmVnLCBhyJlhIGN1bSBhciB0cmVidWkgc8SDIGZpZSBhZmnImWF0IgorCittc2dpZCAiYWxidW0gYXJ0aXN0IHNvcnRuYW1lIgorbXNnc3RyICJudW1lIGRlIHNvcnRhcmUgYWwgYXJ0aXN0dWx1aSBhbGJ1bXVsdWkiCisKK21zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiCittc2dzdHIgIkFydGlzdHVsIGFsIGFsYnVtdWx1aSDDrm50cmVnLCBhyJlhIGN1bSBhciB0cmVidWkgc8SDIGZpZSBzb3J0YXQiCisKK21zZ2lkICJkYXRlIgorbXNnc3RyICJkYXRhIgorCittc2dpZCAiZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHRGF0ZSBzdHJ1Y3R1cmUpIgorbXNnc3RyICJkYXRhIGxhIGNhcmUgYXUgZm9zdCBjcmVhdGUgYWNlc3RlIGRhdGUgKGNhIHN0cnVjdHVyxIMgR0RhdGUpIgorCisjLCBmdXp6eQorbXNnaWQgImRhdGV0aW1lIgorbXNnc3RyICJkYXRhIgorCisjLCBmdXp6eQorbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKK21zZ3N0ciAiZGF0YSBsYSBjYXJlIGF1IGZvc3QgY3JlYXRlIGFjZXN0ZSBkYXRlIChjYSBzdHJ1Y3R1csSDIEdEYXRlKSIKKworbXNnaWQgImdlbnJlIgorbXNnc3RyICJnZW4iCisKK21zZ2lkICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKK21zZ3N0ciAiZ2VudWwgY8SDcnVpYSDDrmkgYXBhcsibaW4gYWNlc3RlIGRhdGUiCisKK21zZ2lkICJjb21tZW50IgorbXNnc3RyICJjb21lbnRhcml1IgorCittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCittc2dzdHIgImNvbWVudGFyaXUgbGliZXIgcGVudHJ1IGRhdGUiCisKK21zZ2lkICJleHRlbmRlZCBjb21tZW50IgorbXNnc3RyICJjb21lbnRhcml1IGV4dGlucyIKKworbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIGluIGtleT12YWx1ZSBvciBrZXlbZW5dPWNvbW1lbnQgZm9ybSIKK21zZ3N0ciAiIgorInRleHQgbGliZXIgY2FyZSBjb21lbnRlYXrEgyBkYXRlbGUgw65uIGtleT12YWxvYXJlIHNhdSBrZXlbZW5dPWNvbWVudGFyaXUgZGUgbGEiCisKK21zZ2lkICJ0cmFjayBudW1iZXIiCittc2dzdHIgIm51bcSDciBwaWVzxIMiCisKK21zZ2lkICJ0cmFjayBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKK21zZ3N0ciAibnVtxINydWwgcGllc2VpIMOubiBjYWRydWwgdW5laSBjb2xlY8ibaWkiCisKK21zZ2lkICJ0cmFjayBjb3VudCIKK21zZ3N0ciAibnVtxINyIHBpZXPEgyIKKworbXNnaWQgImNvdW50IG9mIHRyYWNrcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIHRyYWNrIGJlbG9uZ3MgdG8iCittc2dzdHIgIm51bcSDcnVsIHBpZXNlbG9yIMOubiBjb2xlY8ibaWEgZGluIGNhcmUgZmFjZSBwYXJ0ZSBhY2Vhc3TEgyBwaWVzxIMiCisKK21zZ2lkICJkaXNjIG51bWJlciIKK21zZ3N0ciAibnVtxINyIGRpc2MiCisKK21zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICJudW3Eg3IgZGlzYyDDrm4gY2FkcnVsIHVuZWkgY29sZWPIm2lpIgorCittc2dpZCAiZGlzYyBjb3VudCIKK21zZ3N0ciAibnVtxINydWwgZGlzY3VyaWxvciIKKworbXNnaWQgImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIgorbXNnc3RyICJudW3Eg3J1bCBkaXNjdXJpbG9yIMOubiBjb2xlY8ibaWEgZGluIGNhcmUgZmFjZSBwYXJ0ZSBhY2VzdCBkaXNjIgorCittc2dpZCAibG9jYXRpb24iCittc2dzdHIgImxvY2HIm2llIgorCittc2dpZCAiIgorIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgorImlzIGhvc3RlZCkiCittc2dzdHIgIiIKKyJPcmlnaW5lYSBmaciZaWVydWx1aSBtZWRpYSBjYSB1biBVUkkgKGxvY2HIm2llIHVuZGUgZXN0ZSBzdG9jYXTEgyB2ZXJzaXVuZWEgIgorIm9yaWdpbmFsxIMgYSBmaciZaWVydWx1aSBzYXUgZmx1eHVsdWkpIgorCittc2dpZCAiaG9tZXBhZ2UiCittc2dzdHIgInBhZ2luYSBkZSBwb3JuaXJlIgorCittc2dpZCAiSG9tZXBhZ2UgZm9yIHRoaXMgbWVkaWEgKGkuZS4gYXJ0aXN0IG9yIG1vdmllIGhvbWVwYWdlKSIKK21zZ3N0ciAiIgorIlBhZ2luYSBkZSBwb3JuaXJlIHBlbnRydSBhY2VzdCBmaciZaWVyIG1lZGlhIChhZGljxIMgcGFnaW5hIGRlIHBvcm5pcmUgYSAiCisiYXJ0aXN0dWx1aSBzYXUgYSBmaWxtdWx1aSkiCisKK21zZ2lkICJkZXNjcmlwdGlvbiIKK21zZ3N0ciAiZGVzY3JpZXJlIgorCittc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgorbXNnc3RyICJ0ZXh0IHNjdXJ0IGNhcmUgZGVzY3JpZSBjb27Im2ludXR1bCBhY2VzdG9yIGRhdGUiCisKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICJ2ZXJzaXVuZSIKKworbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgorbXNnc3RyICJ2ZXJzaXVuZWEgYWNlc3RvciBkYXRlIgorCittc2dpZCAiSVNSQyIKK21zZ3N0ciAiSVNSQyIKKworbXNnaWQgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKK21zZ3N0ciAiIgorIkNvZHVsIEludGVybmHIm2lvbmFsIFN0YW5kYXJkaXphdCBkZSDDjm5yZWdpc3RyxINyaSAtIHZlemkgaHR0cDovL3d3dy5pZnBpLm9yZy8iCisiaXNyYy8iCisKK21zZ2lkICJvcmdhbml6YXRpb24iCittc2dzdHIgIm9yZ2FuaXphyJtpZSIKKworbXNnaWQgImNvcHlyaWdodCIKK21zZ3N0ciAiZHJlcHR1cmkgZGUgYXV0b3IiCisKK21zZ2lkICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJub3RpyJvEgyBhc3VwcmEgZHJlcHR1cmlsb3IgZGUgYXV0b3IgcGVudHJ1IGFjZXN0ZSBkYXRlIgorCittc2dpZCAiY29weXJpZ2h0IHVyaSIKK21zZ3N0ciAidXJpIHBlbnRydSBkcmVwdHVyaWxlIGRlIGF1dG9yIgorCittc2dpZCAiVVJJIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJVUkkgY8SDdHJlIG5vdGnIm2EgYXN1cHJhIGRyZXB0dXJpbG9yIGRlIGF1dG9yIHBlbnRydSBhY2VzdGUgZGF0ZSAoVVJJKSIKKworIywgZnV6enkKK21zZ2lkICJlbmNvZGVkIGJ5IgorbXNnc3RyICJjb2RvciIKKworbXNnaWQgIm5hbWUgb2YgdGhlIGVuY29kaW5nIHBlcnNvbiBvciBvcmdhbml6YXRpb24iCittc2dzdHIgIiIKKworbXNnaWQgImNvbnRhY3QiCittc2dzdHIgImNvbnRhY3QiCisKK21zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgorbXNnc3RyICJpbmZvcm1hyJtpaSBkZSBjb250YWN0IgorCittc2dpZCAibGljZW5zZSIKK21zZ3N0ciAibGljZW7Im8SDIgorCittc2dpZCAibGljZW5zZSBvZiBkYXRhIgorbXNnc3RyICJsaWNlbsibYSBkYXRlbG9yIgorCittc2dpZCAibGljZW5zZSB1cmkiCittc2dzdHIgInVyaSBsaWNlbsibxIMiCisKK21zZ2lkICJVUkkgdG8gdGhlIGxpY2Vuc2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgIlVSSSBwZW50cnUgbGljZW7Im2EgYWNlc3RvciBkYXRlIgorCittc2dpZCAicGVyZm9ybWVyIgorbXNnc3RyICJpbnRlcnByZXQiCisKK21zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKK21zZ3N0ciAicGVyc29hbmEgY2FyZSBpbnRlcnByZXRlYXrEgyIKKworbXNnaWQgImNvbXBvc2VyIgorbXNnc3RyICJjb21wb3ppdG9yIgorCittc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nIgorbXNnc3RyICJwZXJzb2FuYSBjYXJlIGEgY29tcHVzIMOubnJlZ2lzdHJhcmVhIgorCittc2dpZCAiZHVyYXRpb24iCittc2dzdHIgImR1cmF0YSIKKworbXNnaWQgImxlbmd0aCBpbiBHU3RyZWFtZXIgdGltZSB1bml0cyAobmFub3NlY29uZHMpIgorbXNnc3RyICJkdXJhdGEgw65uIHVuaXTEg8ibaWxlIGRlIHRpbXAgYWxlIHByb2dyYW11bHVpIEdTdHJlYW1lciAobmFub3NlY3VuZGUpIgorCittc2dpZCAiY29kZWMiCittc2dzdHIgImNvZGVjIgorCittc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJjb2RlY3VsIGN1IGNhcmUgYXUgZm9zdCBzdG9jYXRlIGRhdGVsZSIKKworbXNnaWQgInZpZGVvIGNvZGVjIgorbXNnc3RyICJjb2RlYyB2aWRlbyIKKworbXNnaWQgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiY29kZWN1bCBjdSBjYXJlIGF1IGZvc3Qgc3RvY2F0ZSBkYXRlbGUgdmlkZW8iCisKK21zZ2lkICJhdWRpbyBjb2RlYyIKK21zZ3N0ciAiY29kZWMgYXVkaW8iCisKK21zZ2lkICJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImNvZGVjIGN1IGNhcmUgYXUgZm9zdCBzdG9jYXRlIGRhdGVsZSBhdWRpbyIKKworbXNnaWQgInN1YnRpdGxlIGNvZGVjIgorbXNnc3RyICJjb2RlYyBzdWJ0aXRyYXJlIgorCittc2dpZCAiY29kZWMgdGhlIHN1YnRpdGxlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJjb2RlYyBjdSBjYXJlIGF1IGZvc3Qgc3RvY2F0ZSBkYXRlbGUgc3VidGl0csSDcmlpIgorCittc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKK21zZ3N0ciAiZm9ybWF0IGNvbnRhaW5lciIKKworbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJmb3JtYXR1bCBjb250YWluZXJ1bHVpIMOubiBjYXJlIHN1bnQgc3RvY2F0ZSBkYXRlbGUiCisKK21zZ2lkICJiaXRyYXRlIgorbXNnc3RyICJyYXRhIGRlIGJpyJtpIgorCittc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAicmF0YSBkZSBiacibaSBleGFjdMSDIHNhdSBtZWRpZSwgw65uIGJpyJtpL3MiCisKK21zZ2lkICJub21pbmFsIGJpdHJhdGUiCittc2dzdHIgInJhdGEgZGUgYmnIm2kgbm9taW5hbMSDIgorCittc2dpZCAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAicmF0YSBkZSBiacibaSBub21pbmFsxIMgw65uIGJpyJtpL3MiCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCittc2dzdHIgInJhdGEgZGUgYmnIm2kgbWluaW3EgyIKKworbXNnaWQgIm1pbmltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgInJhdGEgZGUgYmnIm2kgbWluaW3EgyDDrm4gYmnIm2kvcyIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSIKK21zZ3N0ciAicmF0YSBkZSBiacibaSBtYXhpbcSDIgorCittc2dpZCAibWF4aW11bSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAicmF0YSBkZSBiacibaSBtYXhpbcSDIMOubiBiacibaS9zIgorCittc2dpZCAiZW5jb2RlciIKK21zZ3N0ciAiY29kb3IiCisKK21zZ2lkICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgorbXNnc3RyICJjb2RvcnVsIGZvbG9zaXQgcGVudHJ1IGEgY29kYSBhY2VzdCBmbHV4IgorCittc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgorbXNnc3RyICJ2ZXJzaXVuZWEgY29kb3J1bHVpIgorCittc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAidmVyc2l1bmVhIGNvZG9ydWx1aSBmb2xvc2l0IHBlbnRydSBhIGNvZGEgYWNlc3QgZmx1eCIKKworbXNnaWQgInNlcmlhbCIKK21zZ3N0ciAic2VyaWFsIgorCittc2dpZCAic2VyaWFsIG51bWJlciBvZiB0cmFjayIKK21zZ3N0ciAibnVtxINydWwgc2VyaWFsIGFsIHBpc3RlaSIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKK21zZ3N0ciAiY8OiyJl0aWd1bCByZXBsYXlnYWluIGFsIHBpc3RlaSIKKworbXNnaWQgInRyYWNrIGdhaW4gaW4gZGIiCittc2dzdHIgImPDosiZdGlndWwgw65uIGRiIGFsIHBpc3RlaSIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgcGVhayIKK21zZ3N0ciAidsOicmZ1bCByZXBsYXlnYWluIGFsIHBpc3RlaSIKKworbXNnaWQgInBlYWsgb2YgdGhlIHRyYWNrIgorbXNnc3RyICJ2w6JyZnVsIHBpc3RlaSIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKK21zZ3N0ciAiY8OiyJl0aWd1bCByZXBsYXlnYWluIGFsIGFsYnVtdWx1aSIKKworbXNnaWQgImFsYnVtIGdhaW4gaW4gZGIiCittc2dzdHIgImPDosiZdGlndWwgw65uIGRiIGFsIGFsYnVtdWx1aSIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKK21zZ3N0ciAidsOicmZ1bCByZXBsYXlnYWluIGFsIGFsYnVtdWx1aSIKKworbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgorbXNnc3RyICJ2w6JyZnVsIGFsYnVtdWx1aSIKKworbXNnaWQgInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIgorbXNnc3RyICJuaXZlbHVsIGRlIHJlZmVyaW7Im8SDIHJlcGxheWdhaW4iCisKK21zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgorbXNnc3RyICJuaXZlbHVsIGRlIHJlZmVyaW7Im8SDIGFsIHZhbG9yaWxvciBjw6LImXRpZ3VsdWkgcGVudHJ1IHBpc3TEgyDImWkgYWxidW0iCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIgorbXNnc3RyICJjb2QgbGltYsSDIgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIgorbXNnc3RyICJjb2R1bCBkZSBsaW1ixIMgYWwgYWNlc3R1aSBmbHV4LCBjb25mb3JtIElTTy02MzktMSIKKworbXNnaWQgImltYWdlIgorbXNnc3RyICJpbWFnaW5lIgorCittc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiaW1hZ2luZSDDrm4gbGVnxIN0dXLEgyBjdSBhY2VzdCBmbHV4IgorCisjLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKK21zZ2lkICJwcmV2aWV3IGltYWdlIgorbXNnc3RyICJwcmV2aXp1YWxpemFyZSBpbWFnaW5lIgorCittc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICJwcmV2aXp1YWxpemFyZWEgaW1hZ2luaWkgw65uIGxlZ8SDdHVyxIMgY3UgYWNlc3QgZmx1eCIKKworbXNnaWQgImF0dGFjaG1lbnQiCittc2dzdHIgImF0YciZYW1lbnQiCisKK21zZ2lkICJmaWxlIGF0dGFjaGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICJmaciZaWVyIGF0YciZYXQgbGEgYWNlc3QgZmx1eCIKKworbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCittc2dzdHIgImLEg3TEg2kgcGUgbWludXQiCisKK21zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKK21zZ3N0ciAibnVtxINydWwgZGUgYsSDdMSDaSBwZSBtaW51dCDDrm4gcGFydGVhIGF1ZGlvIgorCittc2dpZCAia2V5d29yZHMiCittc2dzdHIgImN1dmludGUgY2hlaWUiCisKK21zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKK21zZ3N0ciAiY3V2aW50ZSBjaGVpZSBzZXBhcmF0ZSBwcmluIHZpcmd1bMSDLCBjYXJlIGRlc2NyaXUgY29uyJtpbnV0dWwiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKK21zZ3N0ciAibnVtZSBnZW8tbG9jYcibaWUiCisKK21zZ2lkICIiCisiaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpdmUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yICIKKyJwcm9kdWNlZCIKK21zZ3N0ciAiIgorIm51bWUgbGl6aWJpbCBkZXNjcmlwdGl2IGFsIGxvY2HIm2llaSB1bmRlIGEgZm9zdCDDrm5yZWdpc3RyYXQgc2F1IHByb2R1cyBhY2VzdCAiCisiZmnImWllciBtZWRpYSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBsYXRpdHVkZSIKK21zZ3N0ciAibGF0aXR1ZGluZSBnZW8tbG9jYcibaWUiCisKK21zZ2lkICIiCisiZ2VvIGxhdGl0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCisiZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIGVxdWF0b3IsIG5lZ2F0aXZlIHZhbHVlcyBmb3IgIgorInNvdXRoZXJuIGxhdGl0dWRlcykiCittc2dzdHIgIiIKKyJsYXRpdHVkaW5lYSBnZW8tbG9jYcibaWVpIHVuZGUgYSBmb3N0IMOubnJlZ2lzdHJhdCBzYXUgcHJvZHVzIGFjZXN0IGZpyJlpZXIgIgorIm1lZGlhIGNvbmZvcm0gV0dTODQgKHplcm8gbGEgZWN1YXRvciwgdmFsb3JpIG5lZ2F0aXZlIHBlbnRydSBsYXRpdHVkaW5pICIKKyJzdWRpY2UpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKK21zZ3N0ciAibG9uZ2l0dWRpbmUgZ2VvLWxvY2HIm2llIgorCittc2dpZCAiIgorImdlbyBsb25naXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgcHJpbWUgbWVyaWRpYW4gaW4gR3JlZW53aWNoL1VLLCAgIgorIm5lZ2F0aXZlIHZhbHVlcyBmb3Igd2VzdGVybiBsb25naXR1ZGVzKSIKK21zZ3N0ciAiIgorImxvbmdpdHVkaW5lIGdlby1sb2NhyJtpZWkgdW5kZSBhIGZvc3Qgw65ucmVnaXN0cmF0IHNhdSBwcm9kdXMgYWNlc3QgZmnImWllciAiCisibWVkaWEgw65uIGdyYWRlIGNvbmZvcm0gV0dTODQgKHplcm8gbGEgcHJpbXVsIG1lcmlkaWFuIGRpbiBHcmVlbndpY2gvTWFyZWEgIgorIkJyaXRhbmllLCB2YWxvcmkgbmVnYXRpdmUgcGVudHJ1IGxvbmdpdHVkaW5pIHZlc3RpY2UpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKK21zZ3N0ciAiYWx0aXR1ZGluZSBnZW8tbG9jYcibaWUiCisKK21zZ2lkICIiCisiZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKKyJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgorbXNnc3RyICIiCisiYWx0aXR1ZGluZWEgZ2VvLWxvY2HIm2llaSB1bmRlIGEgZm9zdCDDrm5yZWdpc3RyYXQgc2F1IHByb2R1cyBhY2VzdCBmaciZaWVyICIKKyJtZWRpYSBjb25mb3JtIFdHUzg0ICh6ZXJvIGxhIGVjdWF0b3IsIHZhbG9yaSBuZWdhdGl2ZSBwZW50cnUgbGF0aXR1ZGluaSAiCisic3VkaWNlKSAoemVybyBlc3RlIG5pdmVsdWwgbWVkaXUgYWwgbcSDcmlpKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBjb3VudHJ5IgorbXNnc3RyICLIm2FyxIMgZ2VvLWxvY2HIm2llIgorCittc2dpZCAiY291bnRyeSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCittc2dzdHIgIiIKKyLIm2FyYSAobnVtZSDDrm4gbGltYmEgZW5nbGV6xIMpIHVuZGUgYSBmb3N0IMOubnJlZ2lzdHJhdCBzYXUgcHJvZHVzIGFjZXN0IGZpyJlpZXIgIgorIm1lZGlhIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCittc2dzdHIgIm9yYciZIGdlby1sb2NhyJtpZSIKKworbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICIiCisib3JhyJkgKG51bWUgw65uIGxpbWJhIGVuZ2xlesSDKSB1bmRlIGEgZm9zdCDDrm5yZWdpc3RyYXQgc2F1IHByb2R1cyBhY2VzdCBmaciZaWVyICIKKyJtZWRpYSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKK21zZ3N0ciAic3VibG9jYcibaWUgZ2VvLWxvY2HIm2llIgorCittc2dpZCAiIgorImEgbG9jYXRpb24gd2hpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgorInRoZSBuZWlnaGJvcmhvb2QpIgorbXNnc3RyICIiCisibG9jYcibaWUgw65uIG9yYciZdWwgdW5kZSBhIGZvc3Qgw65ucmVnaXN0cmF0IHNhdSBwcm9kdXMgYWNlc3QgZmnImWllciBtZWRpYSAoZGUgIgorImV4LiBjYXJ0aWVydWwpIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgorbXNnc3RyICJudW1lIGdlby1sb2NhyJtpZSIKKworbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgorbXNnc3RyICIiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgc3BlZWQiCittc2dzdHIgInZpdGV6YSBkZSBjaXJjdWxhyJtpZSBhIGdlby1sb2NhyJtpZWkiCisKK21zZ2lkICIiCisibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBpbiBtL3MiCittc2dzdHIgIiIKKyJ2aXRlemEgZGUgY2lyY3VsYcibaWUgYSBkaXNwb3ppdGl2dWx1aSBkZSBjYXB0dXJhcmUgw65uIHRpbXAgY2UgZGVzZsSDyJl1cmF1ICIKKyJhY3Rpdml0xIPIm2lsZSBkZSBjYXB0YXJlIMOubiBtL3MiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgorbXNnc3RyICJkaXJlY8ibaWEgZGUgY2lyY3VsYcibaWUgYSBnZW8tbG9jYcibaWVpIgorCittc2dpZCAiIgorImluZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBvZiBhICIKKyJtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgMCAiCisibWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgorbXNnc3RyICIiCisiaW5kaWNhIGRpcmVjyJtpYSBkZSBtaciZY2FyZSBhIGFwYXJhdHVsdWkgZGUgY2FwdGFyZSBjdSBjYXJlIGEgZm9zdCAiCisiw65ucmVnaXN0cmF0IGZpyJlpZXJ1bCBtZWRpYS4gQWNlc3RhIGVzdGUgcmVwcmV6ZW50YXQgY2EgZGUgZ3JhZGUgw65uIHZpcmd1bMSDICIKKyJtb2JpbMSDLCAwIMOubnNlYW1uxIMgbm9yZCBnZW9ncmFmaWMgyJlpIGNyZciZdGUgw65uIHNlbnN1bCBhY2Vsb3IgZGUgY2Vhc29ybmljIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgorbXNnc3RyICJkaXJlY8ibaWEgZGUgY2FwdGFyZSBhIGdlby1sb2NhyJtpZWkiCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGRldmljZSBpcyBwb2ludGluZyB0byB3aGVuIGNhcHR1cmluZyAgYSBtZWRpYS4gIgorIkl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIHJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSAiCisiZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKyJpbmRpY2EgZGlyZWPIm2lhIMOubiBjYXJlIGFyxIN0YSBhcGFyYXR1bCBkZSBjYXB0YXJlIGN1IGNhcmUgYSBmb3N0IMOubnJlZ2lzdHJhdCAiCisiZmnImWllcnVsIG1lZGlhLiBBY2VzdGEgZXN0ZSByZXByZXplbnRhdCBjYSBkZSBncmFkZSDDrm4gdmlyZ3VsxIMgbW9iaWzEgywgMCAiCisiw65uc2VhbW7EgyBub3JkIGdlb2dyYWZpYyDImWkgY3JlyJl0ZSDDrm4gc2Vuc3VsIGFjZWxvciBkZSBjZWFzb3JuaWMiCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZScgaGVyZQorbXNnaWQgInNob3cgbmFtZSIKK21zZ3N0ciAibnVtZSBzaG93IgorCittc2dpZCAiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSIKK21zZ3N0ciAiIgorIk51bWVsZSB1bnVpIHNob3cgdHYvcG9kY2FzdC9zZXJpYWwgZGluIGNhcmUgYWNlc3QgZmnImWllciBtZWRpYSBmYWNlIHBhcnRlIgorCisjLiBUUkFOU0xBVE9SUzogJ3Nob3cgc29ydG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lIGFzIHVzZWQgZm9yIHNvcnRpbmcgcHVycG9zZXMnIGhlcmUKK21zZ2lkICJzaG93IHNvcnRuYW1lIgorbXNnc3RyICJhcmF0xIMgbnVtZWxlIGRlIHNvcnRhcmUiCisKK21zZ2lkICIiCisiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIiIKKyJOdW1lbGUgdW51aSBzaG93IHR2L3BvZGNhc3Qvc2VyaWFsIGRpbiBjYXJlIGFjZXN0IGZpyJlpZXIgbWVkaWEgZmFjZSBwYXJ0ZSwgIgorInBlbnRydSBzb3J0YXJlIgorCittc2dpZCAiZXBpc29kZSBudW1iZXIiCittc2dzdHIgIm51bcSDciBlcGlzb2QiCisKK21zZ2lkICJUaGUgZXBpc29kZSBudW1iZXIgaW4gdGhlIHNlYXNvbiB0aGUgbWVkaWEgaXMgcGFydCBvZiIKK21zZ3N0ciAiTnVtxINydWwgZXBpc29kdWx1aSBkaW4gY2FyZSBhY2VzdCBmaciZaWVyIG1lZGlhIGZhY2UgcGFydGUiCisKK21zZ2lkICJzZWFzb24gbnVtYmVyIgorbXNnc3RyICJudW3Eg3J1bCBzZXpvbiIKKworbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICJOdW3Eg3J1bCBzZXpvbnVsdWkgZGluIGNhcmUgYWNlc3QgZmnImWllciBtZWRpYSBmYWNlIHBhcnRlIgorCittc2dpZCAibHlyaWNzIgorbXNnc3RyICJ2ZXJzdXJpIgorCittc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgorbXNnc3RyICJWZXJzdXJpbGUgZmnImWllcnVsdWkgbWVkaWEsIGZyZWN2ZW50IHV0aWxpemF0ZSBwZW50cnUgY8OibnRlY2UiCisKK21zZ2lkICJjb21wb3NlciBzb3J0bmFtZSIKK21zZ3N0ciAibnVtZSBzb3J0YXJlIGNvbXBveml0b3IiCisKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJwZXJzb2FuYSBjYXJlIGEgY29tcHVzIMOubnJlZ2lzdHJhcmVhLCDDrm4gc2NvcCBkZSBzb3J0YXJlIgorCittc2dpZCAiZ3JvdXBpbmciCittc2dzdHIgImdydXBhcmUiCisKK21zZ2lkICIiCisiR3JvdXBzIHJlbGF0ZWQgbWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSB0cmFja3MsIGxpa2UgdGhlIGRpZmZlcmVudCBwaWVjZXMgIgorIm9mIGEgY29uY2VydG8uIEl0IGlzIGEgaGlnaGVyIGxldmVsIHRoYW4gYSB0cmFjaywgYnV0IGxvd2VyIHRoYW4gYW4gYWxidW0iCittc2dzdHIgIiIKKyJHcnVwZWF6xIMgbWVkaWEgw65ucnVkaXRlIGNhcmUgc2Ugw65udGluZCBwZSBtYWkgbXVsdGUgcGlzdGUsIGNhIGRlIGV4LiAiCisiZGlmZXJpdGVsZSBwaWVzZSBhbGUgdW51aSBjb25jZXJ0LiBFc3RlIHVuIG5pdmVsIGRlIG9yZ2FuaXphcmUgbWFpIHJpZGljYXQgIgorImRlY8OidCBhbCB1bmVpIHBpZXNlLCBkYXIgbWFpIGNvYm9yw6J0IGRlY8OidCBhbCB1bnVpIGFsYnVtIgorCittc2dpZCAidXNlciByYXRpbmciCittc2dzdHIgImV2YWx1YXJlIHV0aWxpemF0b3IiCisKK21zZ2lkICIiCisiUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCisidGhpcyBtZWRpYSIKK21zZ3N0ciAiIgorIkV2YWx1YXJlYSBhdHJpYnVpdMSDIGRlIHVuIHV0aWxpemF0b3IuIEN1IGPDonQgZXN0ZSBtYWkgbWFyZSBldmFsdWFyZWEsIGN1ICIKKyJhdMOidCBtYWkgbXVsdCBpLWEgcGzEg2N1dCBhY2VsdWkgdXRpbGl6YXRvciIKKworbXNnaWQgImRldmljZSBtYW51ZmFjdHVyZXIiCittc2dzdHIgInByb2R1Y8SDdG9ydWwgZGlzcG96aXRpdnVsdWkiCisKK21zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICJQcm9kdWPEg3RvcnVsIGRpc3Bveml0aXZ1bHVpIHV0aWxpemF0IHBlbnRydSBhIGNyZWEgYWNlc3QgZmnImWllciBtZWRpYSIKKworbXNnaWQgImRldmljZSBtb2RlbCIKK21zZ3N0ciAibW9kZWwgZGlzcG96aXRpdiIKKworbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKK21zZ3N0ciAiTW9kZWx1bCBkaXNwb3ppdGl2dWx1aSB1dGlsaXphdCBwZW50cnUgYSBjcmVhIGFjZXN0IGZpyJlpZXIgbWVkaWEiCisKKyMsIGZ1enp5Cittc2dpZCAiYXBwbGljYXRpb24gbmFtZSIKK21zZ3N0ciAibnVtZSBnZW8tbG9jYcibaWUiCisKKyMsIGZ1enp5Cittc2dpZCAiQXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIgorbXNnc3RyICJNb2RlbHVsIGRpc3Bveml0aXZ1bHVpIHV0aWxpemF0IHBlbnRydSBhIGNyZWEgYWNlc3QgZmnImWllciBtZWRpYSIKKworbXNnaWQgImFwcGxpY2F0aW9uIGRhdGEiCittc2dzdHIgIiIKKworbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCittc2dzdHIgIiIKKworbXNnaWQgImltYWdlIG9yaWVudGF0aW9uIgorbXNnc3RyICJvcmllbnRhcmUgaW1hZ2luZSIKKworbXNnaWQgIkhvdyB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCBiZWZvcmUgZGlzcGxheSIKK21zZ3N0ciAiQ3VtIGFyIHRyZWJ1aSByb3RpdMSDIHNhdSDDrm50b2Fyc8SDIGltYWdpbmVhIMOubmFpbnRlIGRlIGFmaciZYXJlIgorCittc2dpZCAiLCAiCittc2dzdHIgIiwgIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCittc2dzdHIgIkVST0FSRTogZGUgbGEgZWxlbWVudHVsICVzOiAlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorIkluZm9ybWHIm2lpIHN1cGxpbWVudGFyZSBwZW50cnUgZGVwYW5hcmU6XG4iCisiJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJzcGVjaWZpZWQgZW1wdHkgYmluIFwiJXNcIiwgbm90IGFsbG93ZWQiCittc2dzdHIgImNvbnRhaW5lcnVsIGdvbCDigJ4lc+KAnSBzcGVjaWZpY2F0LCBudSBlc3RlIHBlcm1pcyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBiaW4gXCIlc1wiLCBza2lwcGluZyIKK21zZ3N0ciAibmljaXVuIGNvbnRhaW5lciDigJ4lc+KAnSwgc2Ugb21pdGUiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICJuaWNpbyBwcm9wcmlldGF0ZSDigJ4lc+KAnSDDrm4gZWxlbWVudHVsIOKAniVz4oCdIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKK21zZ3N0ciAiIgorIm51IHNlIHBvYXRlIHN0YWJpbGkgcHJvcHJpZXRhdGVhIOKAniVz4oCdIMOubiBlbGVtZW50dWwg4oCeJXPigJ0gbGEgdmFsb2FyZWEg4oCeJXPigJ0iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxpbmsgJXMgdG8gJXMiCittc2dzdHIgIm51IHNlIHBvYXRlIGxlZ2EgJXMgbGEgJXMiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCittc2dzdHIgIm5pY2l1biBlbGVtZW50IOKAniVz4oCdIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKK21zZ3N0ciAibnUgc2UgcG90IGFuYWxpemEgbWFqdXNjdWxlbGUg4oCeJXPigJ0iCisKK21zZ2lkICJsaW5rIHdpdGhvdXQgc291cmNlIGVsZW1lbnQiCittc2dzdHIgImxlZ8SDdHVyxIMgZsSDcsSDIHVuIGVsZW1lbnQgc3Vyc8SDIgorCittc2dpZCAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKK21zZ3N0ciAibGVnxIN0dXLEgyBmxINyxIMgdW4gZWxlbWVudCBkZXJpdmF0IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNvdXJjZSBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJuaWNpdW4gZWxlbWVudCBzdXJzxIMgcGVudHJ1IFVSSSDigJ4lc+KAnSIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBlbGVtZW50IHRvIGxpbmsgVVJJIFwiJXNcIiB0byIKK21zZ3N0ciAibmljaXVuIGVsZW1lbnQgcGVudHJ1IGEgbGVnYSBVUkkg4oCeJXPigJ0gbGEiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJuaWNpdW4gZWxlbWVudCBkZXJpdmF0IHBlbnRydSBVUkkg4oCeJXPigJ0iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxpbmsgc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJudSBzZSBwb2F0ZSBsZWdhIGVsZW1lbnR1bCBkZXJpdmF0IHBlbnRydSBVUkkg4oCeJXPigJ0iCisKK21zZ2lkICJlbXB0eSBwaXBlbGluZSBub3QgYWxsb3dlZCIKK21zZ3N0ciAibGluaWEgZGUgYXNhbWJsYXJlIHZpZMSDIG51IGVzdGUgcGVybWlzxIMiCisKK21zZ2lkICJJbnRlcm5hbCBjbG9jayBlcnJvci4iCittc2dzdHIgIkVyb2FyZSBpbnRlcm7EgyBkZSBjZWFzLiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCittc2dzdHIgIkVyb2FyZSBpbnRlcm7EgyBkZSBmbHV4IGFsIGRhdGVsb3IuIgorCittc2dpZCAiQSBsb3Qgb2YgYnVmZmVycyBhcmUgYmVpbmcgZHJvcHBlZC4iCittc2dzdHIgIk11bHRlIHpvbmUgZGUgbWVtb3JpZSB0YW1wb24gc3VudCBhYmFuZG9uYXRlLiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBwcm9ibGVtLiIKK21zZ3N0ciAiUHJvYmxlbcSDIGludGVybsSDIGRlIGZsdXggYWwgZGF0ZWxvci4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCittc2dzdHIgIkVyb2FyZSBpbnRlcm7EgyBhIGZsdXh1bHVpIGRlIGRhdGUuIgorCittc2dpZCAiRmlsdGVyIGNhcHMiCittc2dzdHIgIkZpbHRyYXJlIG1hanVzY3VsZSIKKworbXNnaWQgIiIKKyJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKKyJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgorbXNnc3RyICIiCisiUmVzdHJpY8ibaW9uZWF6xIMgY2FwYWNpdMSDyJtpbGUgcGVybWlzZSAoTlVMTCDDrm5zZWFtbsSDIE9SSUNFKS4gRGVmaW5pcmVhICIKKyJhY2VzdGVpIHByb3ByaWV0xIPIm2kgcHJlaWEgbyByZWZlcmluyJvEgyBjxIN0cmUgb2JpZWN0dWwgR3N0Q2FwcyBmdXJuaXphdC4iCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiTmljaXVuIG51bWUgZGUgZmnImWllciBzcGVjaWZpY2F0IHBlbnRydSBzY3JpZXJlLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCittc2dzdHIgIk51IHMtYSBwdXR1dCBkZXNjaGlkZSBmaciZaWVydWwg4oCeJXPigJ0gcGVudHJ1IHNjcmllcmUuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNsb3NpbmcgZmlsZSBcIiVzXCIuIgorbXNnc3RyICJFcm9hcmUgbGEgw65uY2hpZGVyZWEgZmnImWllcnVsdWkg4oCeJXPigJ0uIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIgorbXNnc3RyICJFcm9hcmUgw65uIHRpbXB1bCBkZXJ1bMSDcmlpIMOubiBmaciZaWVydWwg4oCeJXPigJ0uIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgorbXNnc3RyICJFcm9hcmUgbGEgc2NyaWVyZWEgZmnImWllcnVsdWkg4oCeJXNcIi4iCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiTmljaXVuIG51bWUgZGUgZmnImWllciBzcGVjaWZpY2F0IHBlbnRydSBjaXRpcmUuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiTnUgc2UgcG9hdGUgZGVzY2hpZGUgZmnImWllcnVsIOKAniVz4oCdIHBlbnRydSBjaXRpcmUuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgaW5mbyBvbiBcIiVzXCIuIgorbXNnc3RyICJOdSBzZSBwb3Qgb2LIm2luZSBpbmZvcm1hyJtpaSBkZXNwcmUg4oCeJXPigJ0uIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIlwiJXNcIiBpcyBhIGRpcmVjdG9yeS4iCittc2dzdHIgIuKAniVz4oCdIGVzdGUgdW4gZGlyZWN0b3IuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKK21zZ3N0ciAiRmnImWllcnVsIOKAniVz4oCdIGVzdGUgdW4gc29ja2V0LiIKKworbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCittc2dzdHIgIkXImWVjIGR1cMSDIG51bcSDcnVsIGRlIGl0ZXJhyJtpaSBjYXJlIGEgZm9zdCBjZXJ1dC4iCisKK21zZ2lkICJObyBUZW1wIGRpcmVjdG9yeSBzcGVjaWZpZWQuIgorbXNnc3RyICJOaWNpdW4gZGlyZWN0b3IgdGVtcG9yYXIgc3BlY2lmaWNhdC4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiTnUgYW0gcHV0dXQgY3JlYSBmaciZaWVydWwgdGVtcG9yYXIg4oCeJXPigJ0uIgorCittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKK21zZ3N0ciAiRXJvYXJlIGxhIHNjcmllcmVhIMOubiBmaciZaWVydWwgZGVzY8SDcmNhdC4iCisKK21zZ2lkICJjYXBzIgorbXNnc3RyICJtYWp1c2N1bGUiCisKK21zZ2lkICJkZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtIgorbXNnc3RyICJjYXBhYmlsaXTEg8ibaSBkZXRlY3RhdGUgw65uIGZsdXgiCisKK21zZ2lkICJtaW5pbXVtIgorbXNnc3RyICJtaW5pbSIKKworbXNnaWQgIm1heGltdW0iCittc2dzdHIgIm1heGltIgorCittc2dpZCAiZm9yY2UgY2FwcyIKK21zZ3N0ciAiZm9yyJtlYXrEgyBjYXBzIgorCittc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCittc2dzdHIgImZvcsibZWF6xIMgY2FwcyBmxINyxIMgYSBlZmVjdHVhIHVuIHR5cGVmaW5kIgorCittc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgorbXNnc3RyICJGbHV4dWwgbnUgY29uyJtpbmUgZGF0ZS4iCisKK21zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgorbXNnc3RyICJJbnRlcmZlyJtlIGltcGxlbWVudGF0ZTpcbiIKKworbXNnaWQgInJlYWRhYmxlIgorbXNnc3RyICJzZSBwb2F0ZSBjaXRpIgorCittc2dpZCAid3JpdGFibGUiCittc2dzdHIgInNlIHBvYXRlIHNjcmllIgorCittc2dpZCAiY29udHJvbGxhYmxlIgorbXNnc3RyICJzZSBwb2F0ZSBjb250cm9sYSIKKworbXNnaWQgImNoYW5nZWFibGUgaW4gTlVMTCwgUkVBRFksIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCwgUkVBRFkgb3IgUEFVU0VEIHN0YXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKK21zZ3N0ciAiIgorCittc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgorbXNnc3RyICJGaciZaWVyZWxlIGRlIHBlIGxpc3RhIG5lYWdyxIM6IgorCittc2dpZCAiVG90YWwgY291bnQ6ICIKK21zZ3N0ciAiTnVtxINyIHRvdGFsOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxhY2tsaXN0ZWQgZmlsZSIKK21zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHJbMF0gIiVkIGZpyJlpZXIgcGUgbGlzdGEgbmVhZ3LEgyIKK21zZ3N0clsxXSAiJWQgZmnImWllcmUgcGUgbGlzdGEgbmVhZ3LEgyIKK21zZ3N0clsyXSAiJWQgZGUgZmnImWllcmUgcGUgbGlzdGEgbmVhZ3LEgyIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBwbHVnaW4iCittc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCittc2dzdHJbMF0gIiVkIG1vZHVsIgorbXNnc3RyWzFdICIlZCBtb2R1bGUiCittc2dzdHJbMl0gIiVkIGRlIG1vZHVsZSIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBibGFja2xpc3QgZW50cnkiCittc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdCBlbnRyaWVzIgorbXNnc3RyWzBdICIlZCBpbnRyYXJlIHBlIGxpc3RhIG5lYWdyxIMiCittc2dzdHJbMV0gIiVkIGludHLEg3JpIHBlIGxpc3RhIG5lYWdyxIMiCittc2dzdHJbMl0gIiVkIGRlIGludHLEg3JpIHBlIGxpc3RhIG5lYWdyxIMiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgZmVhdHVyZSIKK21zZ2lkX3BsdXJhbCAiJWQgZmVhdHVyZXMiCittc2dzdHJbMF0gIiVkIGNhcmFjdGVyaXN0aWPEgyIKK21zZ3N0clsxXSAiJWQgY2FyYWN0ZXJpc3RpY2kiCittc2dzdHJbMl0gIiVkIGRlIGNhcmFjdGVyaXN0aWNpIgorCittc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgorbXNnc3RyICJUaXDEg3JlyJl0ZSB0b2F0ZSBlbGVtZW50ZWxlIgorCittc2dpZCAiUHJpbnQgbGlzdCBvZiBibGFja2xpc3RlZCBmaWxlcyIKK21zZ3N0ciAiVGlwxINyZciZdGUgbGlzdGEgZGUgZmnImWllcmUgZGUgcGUgbGlzdGEgbmVhZ3LEgyIKKworbXNnaWQgIiIKKyJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgorInBsdWdpbnMgcHJvdmlkZS5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKKyJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgorbXNnc3RyICIiCisiVGlwxINyZciZdGUgbyBsaXN0xIMgcHJlbHVjcmFiaWzEgyBkZSBvIG1hyJlpbsSDIGEgY2FyYWN0ZXJpc3RpY2lsb3IgZnVybml6YXRlIGRlICIKKyJtb2R1bHVsIGRlIGV4dGVuc2llIHNwZWNpZmljYXQgc2F1IGRlIHRvYXRlIG1vZHVsZWxlLlxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWwgw65uIGNvbmV4aXVuaWxlIGPEg3RyZSBtZWNhbmlzbWUgIgorImV4dGVybmUgZGUgaW5zdGFsYXJlIGF1dG9tYXTEgyBkZSBtb2R1bGUgZGUgZXh0ZW5zaWUiCisKK21zZ2lkICJMaXN0IHRoZSBwbHVnaW4gY29udGVudHMiCittc2dzdHIgIkxpc3RlYXrEgyBjb27Im2ludXR1bCBtb2R1bHVsdWkgZGUgZXh0ZW5zaWUiCisKK21zZ2lkICJQcmludCBzdXBwb3J0ZWQgVVJJIHNjaGVtZXMsIHdpdGggdGhlIGVsZW1lbnRzIHRoYXQgaW1wbGVtZW50IHRoZW0iCittc2dzdHIgIiIKKyJUaXDEg3JlyJl0ZSBzY2hlbWVsZSBVUkkgc3Vwb3J0YXRlLCBjdSBlbGVtZW50ZWxlIHBlIGNhcmUgbGUgaW1wbGVtZW50ZWF6xIMiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGxvYWQgcGx1Z2luIGZpbGU6ICVzXG4iCittc2dzdHIgIk51IHNlIHBvYXRlIMOubmPEg3JjYSBmaciZaWVydWwgbW9kdWw6ICVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iCittc2dzdHIgIk5pY2l1biBhc3RmZWwgZGUgZWxlbWVudCBzYXUgbW9kdWwg4oCeJXPigJ1cbiIKKworbXNnaWQgIkluZGV4IHN0YXRpc3RpY3MiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBlbGVtZW50IFwiJXNcIiAoJXMpOiAiCittc2dzdHIgIlByaW1pdCBtZXNhanVsICMldSwgZGUgbGEgZWxlbWVudHVsIOKAniVz4oCdICglcyk6IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIHBhZCBcIiVzOiVzXCIgKCVzKTogIgorbXNnc3RyICJQcmltaXQgbWVzYWp1bCAjJXUsIGRlIGxhIHBhZC11bCDigJ4lczolc+KAnSAoJXMpOiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAiUHJpbWl0IG1lc2FqdWwgIyV1LCBkZSBsYSBvYmllY3R1bCDigJ4lc+KAnSAoJXMpOiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgKCVzKTogIgorbXNnc3RyICJQcmltaXQgbWVzYWp1bCAjJXUgKCVzKToiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIgorbXNnc3RyICJQcmltaXJlIEVPUyBkZSBsYSBlbGVtZW50dWwg4oCeJXPigJ0uXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKK21zZ3N0ciAiTUFSQ0FKIEfEglNJVDogZ8SDc2l0IGRlIGPEg3RyZSBlbGVtZW50dWwg4oCeJXPigJ0uXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBwYWQgXCIlczolc1wiLlxuIgorbXNnc3RyICJNQVJDQUogR8SCU0lUICAgOiBnxINzaXQgZGUgY8SDdHJlIHBhZCDigJ4lczolc+KAnS5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCittc2dzdHIgIk1BUkNBSiBHxIJTSVQgICA6IGfEg3NpdCBkZSBjxIN0cmUgb2JpZWN0dWwg4oCeJXPigJ0uXG4iCisKK21zZ2lkICJGT1VORCBUQUdcbiIKK21zZ3N0ciAiTUFSQ0FKIEfEglNJVFxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJTkZPOlxuIgorIiVzXG4iCittc2dzdHIgIiIKKyJJTkZPUk1ByJpJSTpcbiIKKyIlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAiQVZFUlRJU01FTlQ6IGRlIGxhIGVsZW1lbnR1bCAlczogJXNcbiIKKworbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgorbXNnc3RyICJQcmXDrm5jxINyY2FyZSwgc2UgYciZdGVhcHTEgyB0ZXJtaW5hcmVhIHVtcGxlcmlpIG1lbW9yaWVpIHRhbXBvbi4uLlxuIgorCittc2dpZCAiYnVmZmVyaW5nLi4uIgorbXNnc3RyICIiCisKK21zZ2lkICJEb25lIGJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgorbXNnc3RyICJQcmXDrm5jxINyY2FyZSBjb21wbGV0xIMsIHNlIHNldGVhesSDIGxpbmllaSBkZSBhc2FtYmxhcmUgcGUgUkVEQVJFIC4uLlxuIgorCittc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAiUHJlw65uY8SDcmNhcmUsIHNlIHNldGVhesSDIGxpbmlhIGRlIGFzYW1ibGFyZSBwZSBQQVVaxIIgLi4uXG4iCisKK21zZ2lkICJSZWRpc3RyaWJ1dGUgbGF0ZW5jeS4uLlxuIgorbXNnc3RyICJTZSByZWRpc3RyaWJ1aWUgbGF0ZW7Im2EuLi5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgorbXNnc3RyICJTZSBkZWZpbmXImXRlIHN0YXJlYSBsYSAlcyBkdXDEgyBjdW0gYSBmb3N0IGNlcnV0IGRlICVzLi4uXG4iCisKK21zZ2lkICJJbnRlcnJ1cHQ6IFN0b3BwaW5nIHBpcGVsaW5lIC4uLlxuIgorbXNnc3RyICLDjm50cmVydXBlcmU6IFNlIG9wcmXImXRlIGxpbmlhIGRlIGFzYW1ibGFyZSAuLi5cbiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBlbGVtZW50OiAlc1xuIgorbXNnc3RyICJuaWNpdW4gZWxlbWVudCDigJ4lc+KAnSIKKworbXNnaWQgIk91dHB1dCB0YWdzIChhbHNvIGtub3duIGFzIG1ldGFkYXRhKSIKK21zZ3N0ciAiTWFyY2FqZSBkZSBpZciZaXJlIChjdW5vc2N1dGUgyJlpIGNhIOKAnm1ldGFkYXRh4oCdKSIKKworbXNnaWQgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCittc2dzdHIgIkluZm9ybWHIm2lpIGFzdXByYSBzdMSDcmlpIGRlIGllyJlpcmUgyJlpIG5vdGlmaWPEg3JpIHByb3ByaWV0xIPIm2kiCisKK21zZ2lkICJEbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uIgorbXNnc3RyICJOdSB0aXDEg3JpIG5pY2l1biBmZWwgZGUgaW5mb3JtYcibaWkgZGUgcHJvZ3JlcyIKKworbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKK21zZ3N0ciAiTWVzYWplIGRlIGllyJlpcmUiCisKK21zZ2lkICJEbyBub3Qgb3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBvZiBUWVBFIgorbXNnc3RyICJOdSBzY29hdGUgaW5mb3JtYcibaWkgZGVzcHJlIHN0xINyaWxlIGRlIFRJUFVMIgorCittc2dpZCAiVFlQRTEsVFlQRTIsLi4uIgorbXNnc3RyICJUSVAxLFRJUDIsLi4uIgorCittc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgorbXNnc3RyICJOdSBpbnN0YWxhIHVuIGdlc3Rpb25hciBkZSBlcm9yaSIKKworbXNnaWQgIlByaW50IGFsbG9jIHRyYWNlIChpZiBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSkiCittc2dzdHIgIkFmaciZZWF6xIMgY8SDaWxlIGRlIGFsb2NhcmUgKGRhY8SDIHMtYSBhY3RpdmF0IGxhIG1vbWVudHVsIGNvbXBpbMSDcmlpKSIKKworbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKK21zZ3N0ciAiRm9yyJtlYXrEgyBFT1MgcGUgc3Vyc2Ugw65uYWludGUgZGUgYSDDrm5jaGlkZSBsaW5pYSBkZSBhc2FtYmxhcmUiCisKK21zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKK21zZ3N0ciAiRVJPQVJFOiBsaW5pYSBkZSBhc2FtYmxhcmUgbnUgYSBwdXR1dCBmaSBjb25zdHJ1aXTEgzogJXMuXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlxuIgorbXNnc3RyICJFUk9BUkU6IGxpbmlhIGRlIGFzYW1ibGFyZSBudSBhIHB1dHV0IGZpIGNvbnN0cnVpdMSDLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGVycm9uZW91cyBwaXBlbGluZTogJXNcbiIKK21zZ3N0ciAiQVZFUlRJU01FTlQ6IGxpbmlhIGRlIGFzYW1ibGFyZSBjb27Im2luZSBlcm9yaTogJXNcbiIKKworbXNnaWQgIkVSUk9SOiB0aGUgJ3BpcGVsaW5lJyBlbGVtZW50IHdhc24ndCBmb3VuZC5cbiIKK21zZ3N0ciAiRVJPQVJFOiBlbGVtZW50dWwg4oCecGlwZWxpbmXigJ0gKGxpbmllIGRlIGFzYW1ibGFyZSkgbnUgYSBmb3N0IGfEg3NpdC5cbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgorbXNnc3RyICJTZSBzZXRlYXrEgyBsaW5pYSBkZSBhc2FtYmxhcmUgcGUgUEFVWsSCIC4uLlxuIgorCittc2dpZCAiRVJST1I6IFBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwYXVzZS5cbiIKK21zZ3N0ciAiRVJPQVJFOiBMaW5pYSBkZSBhc2FtYmxhcmUgbnUgdnJlYSBzxIMgZmllIHB1c8SDIHBlIHBhdXrEgy5cbiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIGxpdmUgYW5kIGRvZXMgbm90IG5lZWQgUFJFUk9MTCAuLi5cbiIKK21zZ3N0ciAiTGluaWEgZGUgYXNhbWJsYXJlIGVzdGUg4oCebGl2ZeKAnSDImWkgbnUgbmVjZXNpdMSDIFBSRcOOTkPEglJDQVJFIC4uLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTElORyAuLi5cbiIKK21zZ3N0ciAiTGluaWEgZGUgYXNhbWJsYXJlIGVzdGUgUFJFw45OQ8SCUkNBVMSCIC4uLlxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgorbXNnc3RyICJFUk9BUkU6IGxpbmlhIGRlIGFzYW1ibGFyZSBudSB2cmVhIHPEgyBzZSBwcmXDrm5jYXJjZS5cbiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExFRCAuLi5cbiIKK21zZ3N0ciAiTGluaWEgZGUgYXNhbWJsYXJlIHNlIFBSRcOOTkNBUkPEgiAuLi5cbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKK21zZ3N0ciAiU2Ugc2V0ZWF6xIMgbGluaWEgZGUgYXNhbWJsYXJlIHBlIFJFREFSRSAuLi5cbiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKK21zZ3N0ciAiRVJPQVJFOiBsaW5pYSBkZSBhc2FtYmxhcmUgbnUgdnJlYSBzxIMgcmVkZWEuXG4iCisKK21zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKK21zZ3N0ciAiRU9TIGxhIMOubmNoaWRlcmUgYWN0aXZhdCAtLSBTZSBmb3LIm2VhesSDIEVPUyBwZSBsaW5pYSBkZSBhc2FtYmxhcmVcbiIKKworbXNnaWQgIldhaXRpbmcgZm9yIEVPUy4uLlxuIgorbXNnc3RyICJTZSBhyJl0ZWFwdMSDIEVPUy4uLlxuIgorCittc2dpZCAiRU9TIHJlY2VpdmVkIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKK21zZ3N0ciAiRU9TIHByaW1pdCAtIHNlIG9wcmXImXRlIGxpbmlhIGRlIGFzYW1ibGFyZS4uLlxuIgorCittc2dpZCAiQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgd2FpdGluZyBmb3IgRU9TXG4iCittc2dzdHIgIkEgYXDEg3J1dCBvIGVyb2FyZSDDrm4gdGltcCBjZSBzZSBhyJl0ZXB0YSBFT1NcbiIKKworbXNnaWQgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgorbXNnc3RyICJFeGVjdcibaWUgdGVybWluYXTEgyBkdXDEgyAlIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKK21zZ3N0ciAiU2Ugc2V0ZWF6xIMgbGluaWEgZGUgYXNhbWJsYXJlIHBlIFBSRUfEglRJVCAuLi5cbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCAuLi5cbiIKK21zZ3N0ciAiU2Ugc2V0ZWF6xIMgbGluaWEgZGUgYXNhbWJsYXJlIHBlIE5VTEwgLi4uXG4iCisKK21zZ2lkICJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIgorbXNnc3RyICJTZSBlbGliZXJlYXrEgyBsaW5pYSBkZSBhc2FtYmxhcmUuLi5cbiIKKworI34gbXNnaWQgIlVzYWdlOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLiBdXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJVdGlsaXphcmU6IGdzdC14bWxsYXVuY2ggPGZpyJlpZXIueG1sPiBbIGVsZW1lbnQucHJvcGVydHk9dmFsb2FyZSAuLi4gXVxuIgorCisjfiBtc2dpZCAiRVJST1I6IHBhcnNlIG9mIHhtbCBmaWxlICclcycgZmFpbGVkLlxuIgorI34gbXNnc3RyICJFUk9BUkU6IHByZWx1Y3JhcmVhIGZpyJlpZXJ1bHVpIHhtbCDigJ4lc+KAnSBhIGXImXVhdC5cbiIKKworI34gbXNnaWQgIkVSUk9SOiBubyB0b3BsZXZlbCBwaXBlbGluZSBlbGVtZW50IGluIGZpbGUgJyVzJy5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIkVST0FSRTogbmljaXVuIGVsZW1lbnQgZGUgcHJpbSBuaXZlbCBhbCBsaW5pZWkgZGUgYXNhbWJsYXJlIMOubiBmaciZaWVydWwgIgorI34gIuKAniVz4oCdLlxuIgorCisjfiBtc2dpZCAiV0FSTklORzogb25seSBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLlxuIgorI34gbXNnc3RyICIiCisjfiAiQVZFUlRJU01FTlQ6IGRvYXIgdW4gZWxlbWVudCBkZSBuaXZlbCBkZSB2w6JyZiBlc3RlIHN1cG9ydGF0IMOubiBhY2VzdCAiCisjfiAibW9tZW50LlxuIgorCisjfiBtc2dpZCAiRVJST1I6IGNvdWxkIG5vdCBwYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgJWQ6ICVzLlxuIgorI34gbXNnc3RyICJFUk9BUkU6IG51IHNlIHBvYXRlIGFuYWxpemEgYXJndW1ldHVsICVkIGFsIGxpbmllaSBkZSBjb21hbmTEgzogJXNcbiIKKworI34gbXNnaWQgIldBUk5JTkc6IGVsZW1lbnQgbmFtZWQgJyVzJyBub3QgZm91bmQuXG4iCisjfiBtc2dzdHIgIkFWRVJUSVNNRU5UOiBlbGVtZW50dWwgY3UgbnVtZWxlIOKAniVz4oCdIG51IGEgZm9zdCBnxINzaXQuXG4iCisKKyN+IG1zZ2lkICJTYXZlIHhtbCByZXByZXNlbnRhdGlvbiBvZiBwaXBlbGluZSB0byBGSUxFIGFuZCBleGl0IgorI34gbXNnc3RyICIiCisjfiAiU2FsdmFyZWEgdW5laSByZXByZXplbnTEg3JpIHhtbCBhIGxpbmllaSBkZSBhc2FtYmxhcmUgw65uIEZJyJhJRVIgyJlpIGllyJlpcmUiCisKKyN+IG1zZ2lkICJGSUxFIgorI34gbXNnc3RyICJGSciYSUVSIgorCisjfiBtc2dpZCAiRG8gbm90IGluc3RhbGwgc2lnbmFsIGhhbmRsZXJzIGZvciBTSUdVU1IxIGFuZCBTSUdVU1IyIgorI34gbXNnc3RyICJOdSBpbnN0YWxhIHJ1dGluZSBkZSB0cmF0YXJlIGEgc2VtbmFsdWx1aSBwZW50cnUgU0lHVVNSMSDImWkgU0lHVVNSMiIKZGlmZiAtLWdpdCBhL3BvL3J1LmdtbyBiL3BvL3J1LmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmIxNTgzCi0tLSAvZGV2L251bGwKKysrIGIvcG8vcnUuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL3J1LnBvIGIvcG8vcnUucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU1YzRiNAotLS0gL2Rldi9udWxsCisrKyBiL3BvL3J1LnBvCkBAIC0wLDAgKzEsMTI5NyBAQAorIyBUcmFuc2xhdGlvbiBvZiBnc3RyZWFtZXIgbWVzc2FnZXMgdG8gUnVzc2lhbgorIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgorIworIyBQZXRlciBBc3Rha2hvdiA8YXN0YWtob3ZwQG1haWwucnU+LCAyMDA1LgorIyDQkNGA0YLRkdC8INCf0L7Qv9C+0LIgPGFydGZ3b0BnbWFpbC5jb20+LCAyMDA5LgorIyBQYXZlbCBNYXJ5YW5vdiA8YWNpZF9qYWNrQHVrci5uZXQ+LCAyMDA5LgorIyBZdXJpIEtvemxvdiA8eXVyYXlAa29teWFraW5vLnJ1PiwgMjAxMCwgMjAxMS4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdzdHJlYW1lci0wLjEwLjMyLjJcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wOS0yOSAxNDo1NSswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMS0wNC0yNiAyMDoyNSswNDAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBZdXJpIEtvemxvdiA8eXVyYXlAa29teWFraW5vLnJ1PlxuIgorIkxhbmd1YWdlLVRlYW06IFJ1c3NpYW4gPGdudUBteC5ydT5cbiIKKyJMYW5ndWFnZTogcnVcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTM7IHBsdXJhbD1uJTEwPT0xICYmIG4lMTAwIT0xMSA/IDAgOiBuJTEwPj0yICYmIG4iCisiJTEwPD00ICYmIChuJTEwMDwxMCB8fCBuJTEwMD49MjApID8gMSA6IDI7XG4iCisiWC1HZW5lcmF0b3I6IExva2FsaXplIDEuMFxuIgorCittc2dpZCAiUHJpbnQgdGhlIEdTdHJlYW1lciB2ZXJzaW9uIgorbXNnc3RyICLQktGL0LLQtdGB0YLQuCDQstC10YDRgdC40Y4gR1N0cmVhbWVyIgorCittc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCittc2dzdHIgItCh0LTQtdC70LDRgtGMINCy0YHQtSDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNGPINGE0LDRgtCw0LvRjNC90YvQvNC4IgorCittc2dpZCAiUHJpbnQgYXZhaWxhYmxlIGRlYnVnIGNhdGVnb3JpZXMgYW5kIGV4aXQiCittc2dzdHIgItCS0YvQstC10YHRgtC4INC00L7RgdGC0YPQv9C90YvQtSDQutCw0YLQtdCz0L7RgNC40Lgg0L7RgtC70LDQtNC60Lgg0Lgg0LLRi9C50YLQuCIKKworbXNnaWQgIiIKKyJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gNSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKK21zZ3N0ciAiIgorItCj0YDQvtCy0LXQvdGMINC+0YLQu9Cw0LTQutC4INC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOOiDQvtGCIDEgKNGC0L7Qu9GM0LrQviDQvtGI0LjQsdC60LgpINC00L4gNSAo0LLRgdGRKSwg0LjQu9C4IDAgKNC90LjRh9C10LPQviAiCisi0L3QtSDQv9C10YfQsNGC0LDRgtGMKSIKKworbXNnaWQgIkxFVkVMIgorbXNnc3RyICLQo9Cg0J7QktCV0J3QrCIKKworbXNnaWQgIiIKKyJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yICIKKyJ0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCittc2dzdHIgIiIKKyLQodC/0LjRgdC+0Log0L/QsNGALCDRgNCw0LfQtNC10LvRkdC90L3Ri9GFINC30LDQv9GP0YLRi9C80LgsINCyINGE0L7RgNC80LDRgtC1IMKr0LjQvNGPX9C60LDRgtC10LPQvtGA0LjQuDrRg9GA0L7QstC10L3RjMK7INC00LvRjyAiCisi0YPRgdGC0LDQvdC+0LLQutC4INGD0YDQvtCy0L3QtdC5INC+0YLQtNC10LvRjNC90YvRhSDQutCw0YLQtdCz0L7RgNC40LkuINCf0YDQuNC80LXRgDogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgorCittc2dpZCAiTElTVCIKK21zZ3N0ciAi0KHQn9CY0KHQntCaIgorCittc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCittc2dzdHIgItCe0YLQutC70Y7Rh9C40YLRjCDRhtCy0LXRgtC+0LLRg9GOINGA0LDQt9C80LXRgtC60YMg0L/RgNC4INCy0YvQstC+0LTQtSDQvtGC0LvQsNC00L7Rh9C90YvRhSDRgdC+0L7QsdGJ0LXQvdC40LkiCisKK21zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKK21zZ3N0ciAi0J7RgtC60LvRjtGH0LjRgtGMINC+0YLQu9Cw0LTQutGDIgorCittc2dpZCAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCittc2dzdHIgItCS0YvQstC+0LTQuNGC0Ywg0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YPRjiDQuNC90YTQvtGA0LzQsNGG0LjRjiDQv9GA0Lgg0LfQsNCz0YDRg9C30LrQtSDQvNC+0LTRg9C70LXQuSIKKworbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCittc2dzdHIgItCh0L/QuNGB0L7QuiDQv9GD0YLQtdC5INC/0L7QuNGB0LrQsCDQvNC+0LTRg9C70LXQuSwg0YDQsNC30LTQtdC70ZHQvdC90YvRhSDQtNCy0L7QtdGC0L7Rh9C40Y/QvNC4IgorCittc2dpZCAiUEFUSFMiCittc2dzdHIgItCf0KPQotCYIgorCittc2dpZCAiIgorIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgorImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKK21zZ3N0ciAiIgorItCh0L/QuNGB0L7QuiDQvNC+0LTRg9C70LXQuSAo0YDQsNC30LTQtdC70Y/QtdC80YvRhSDQt9Cw0L/Rj9GC0YvQvNC4KSDQtNC70Y8g0L/RgNC10LTQstCw0YDQuNGC0LXQu9GM0L3QvtC5INC30LDQs9GA0YPQt9C60LgsICIKKyLQtNC+0L/QvtC70L3Rj9GO0YnQuNC5INGB0L/QuNGB0L7Quiwg0LrQvtGC0L7RgNGL0Lkg0YHQvtC00LXRgNC20LjRgtGB0Y8g0LIg0L/QtdGA0LXQvNC10L3QvdC+0Lkg0YHRgNC10LTRiyBHU1RfUExVR0lOX1BBVEgiCisKK21zZ2lkICJQTFVHSU5TIgorbXNnc3RyICLQnNCe0JTQo9Cb0JgiCisKK21zZ2lkICJEaXNhYmxlIHRyYXBwaW5nIG9mIHNlZ21lbnRhdGlvbiBmYXVsdHMgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIgorbXNnc3RyICLQntGC0LrQu9GO0YfQuNGC0Ywg0L/QtdGA0LXRhdCy0LDRgiDQvtGI0LjQsdC+0Log0YHQtdCz0LzQtdC90YLQsNGG0LjQuCDQv9Cw0LzRj9GC0Lgg0LLQviDQstGA0LXQvNGPINC30LDQs9GA0YPQt9C60Lgg0LzQvtC00YPQu9C10LkiCisKK21zZ2lkICJEaXNhYmxlIHVwZGF0aW5nIHRoZSByZWdpc3RyeSIKK21zZ3N0ciAi0J7RgtC60LvRjtGH0LjRgtGMINC+0LHQvdC+0LLQu9C10L3QuNC1INGA0LXQtdGB0YLRgNCwIgorCittc2dpZCAiRGlzYWJsZSBzcGF3bmluZyBhIGhlbHBlciBwcm9jZXNzIHdoaWxlIHNjYW5uaW5nIHRoZSByZWdpc3RyeSIKK21zZ3N0ciAiIgorItCe0YLQutC70Y7Rh9C40YLRjCDRgdC+0LfQtNCw0L3QuNC1INCy0YHQv9C+0LzQvtCz0LDRgtC10LvRjNC90L7Qs9C+INC/0YDQvtGG0LXRgdGB0LAsINC/0L7QutCwINC/0YDQvtC40YHRhdC+0LTQuNGCINGB0LrQsNC90LjRgNC+0LLQsNC90LjQtSAiCisi0YDQtdC10YHRgtGA0LAiCisKK21zZ2lkICJHU3RyZWFtZXIgT3B0aW9ucyIKK21zZ3N0ciAi0J/QsNGA0LDQvNC10YLRgNGLIEdTdHJlYW1lciIKKworbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0L/QsNGA0LDQvNC10YLRgNGLIEdTdHJlYW1lciIKKworbXNnaWQgIlVua25vd24gb3B0aW9uIgorbXNnc3RyICLQndC10LjQt9Cy0LXRgdGC0L3Ri9C5INC/0LDRgNCw0LzQtdGC0YAiCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIGNvcmUgbGlicmFyeSBlcnJvci4iCittc2dzdHIgItCe0LHQvdCw0YDRg9C20LXQvdCwINC+0YjQuNCx0LrQsCDQsiDQsdC40LHQu9C40L7RgtC10LrQtSDRj9C00YDQsCBHU3RyZWFtZXIuIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyBlcnJvci4iCittc2dzdHIgIiIKKyLQoNCw0LfRgNCw0LHQvtGC0YfQuNC60LggR1N0cmVhbWVyINCx0YvQu9C4INGB0LvQuNGI0LrQvtC8INC70LXQvdC40LLRi9C80LgsINGH0YLQvtCx0Ysg0LTQvtCx0LDQstC40YLRjCDQutC+0LQg0L7QsdGA0LDQsdC+0YLQutC4ICIKKyLQtNC70Y8g0Y3RgtC+0Lkg0L7RiNC40LHQutC4LiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY29kZSBub3QgaW1wbGVtZW50ZWQuIgorbXNnc3RyICLQktC90YPRgtGA0LXQvdC90Y/RjyDQvtGI0LjQsdC60LAgR1N0cmVhbWVyOiDRhNGD0L3QutGG0LjRjyDQvdC1INGA0LXQsNC70LjQt9C+0LLQsNC90LAuIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgorInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgorbXNnc3RyICIiCisi0J7RiNC40LHQutCwIEdTdHJlYW1lcjog0L3QtSDRg9C00LDQu9C+0YHRjCDQuNC30LzQtdC90LjRgtGMINGB0L7RgdGC0L7Rj9C90LjQtSDQuCDQvdC10LrQvtGC0L7RgNGL0Lwg0Y3Qu9C10LzQtdC90YLQsNC8INC90LUgIgorItGD0LTQsNC70L7RgdGMINC/0L7QvNC10YHRgtC40YLRjCDQv9GA0LDQstC40LvRjNC90L7QtSDRgdC+0L7QsdGJ0LXQvdC40LUg0L4g0L/RgNC40YfQuNC90L7QuSDQvtGI0LjQsdC60LguIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCittc2dzdHIgItCS0L3Rg9GC0YDQtdC90L3Rj9GPINC+0YjQuNCx0LrQsCBHU3RyZWFtZXI6INC/0YDQvtCx0LvQtdC80LAg0YEg0LrQvtC90YLQsNC60YLQvdGL0Lwg0LPQvdC10LfQtNC+0LwuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iCittc2dzdHIgItCS0L3Rg9GC0YDQtdC90L3Rj9GPINC+0YjQuNCx0LrQsCBHU3RyZWFtZXI6INC/0YDQvtCx0LvQtdC80LAg0YEg0L3QuNGC0Y/QvNC4LiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCittc2dzdHIgItCS0L3Rg9GC0YDQtdC90L3Rj9GPINC+0YjQuNCx0LrQsCBHU3RyZWFtZXI6INC/0YDQvtCx0LvQtdC80LAg0YHQstGP0LfQutC4INGN0LvQtdC80LXQvdGC0L7Qsi4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgorbXNnc3RyICLQktC90YPRgtGA0LXQvdC90Y/RjyDQvtGI0LjQsdC60LAgR1N0cmVhbWVyOiDQv9GA0L7QsdC70LXQvNCwINGBINGB0L7QsdGL0YLQuNGP0LzQuC4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4iCittc2dzdHIgItCS0L3Rg9GC0YDQtdC90L3Rj9GPINC+0YjQuNCx0LrQsCBHU3RyZWFtZXI6INC+0YjQuNCx0LrQsCDQv9C+0LfQuNGG0LjQvtC90LjRgNC+0LLQsNC90LjRjy4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNhcHMgcHJvYmxlbS4iCittc2dzdHIgItCS0L3Rg9GC0YDQtdC90L3Rj9GPINC+0YjQuNCx0LrQsCBHU3RyZWFtZXI6INC/0YDQvtCx0LvQtdC80LAg0YEg0LLQvtC30LzQvtC20L3QvtGB0YLRj9C80LguIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4iCittc2dzdHIgItCS0L3Rg9GC0YDQtdC90L3Rj9GPINC+0YjQuNCx0LrQsCBHU3RyZWFtZXI6INC/0YDQvtCx0LvQtdC80LAg0YEg0YLQtdCz0LDQvNC4LiIKKworbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCittc2dzdHIgItCSINCy0LDRiNC10Lkg0YPRgdGC0LDQvdC+0LLQutC1IEdTdHJlYW1lciDQvtGC0YHRg9GC0YHRgtCy0YPQtdGCINC80L7QtNGD0LvRjC4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIgorbXNnc3RyICLQktC90YPRgtGA0LXQvdC90Y/RjyDQvtGI0LjQsdC60LAgR1N0cmVhbWVyOiDQv9GA0L7QsdC70LXQvNCwINGB0LjQvdGF0YDQvtC90LjQt9Cw0YbQuNC4LiIKKworbXNnaWQgIiIKKyJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCisiZGlzYWJsZWQuIgorbXNnc3RyICIiCisi0J/RgNC40LvQvtC20LXQvdC40LUg0L/Ri9GC0LDQtdGC0YHRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YTRg9C90LrRhtC40Y4gR1N0cmVhbWVyLCDQutC+0YLQvtGA0LDRjyDQsdGL0LvQsCDQstGL0LrQu9GO0YfQtdC90LAuIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICLQntCx0L3QsNGA0YPQttC10L3QsCDQvtGI0LjQsdC60LAg0LIg0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90L7QuSDQsdC40LHQu9C40L7RgtC10LrQtSBHU3RyZWFtZXIuIgorCittc2dpZCAiQ291bGQgbm90IGluaXRpYWxpemUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQuNC90LjRhtC40LDQu9C40LfQuNGA0L7QstCw0YLRjCDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3Rg9GOINCx0LjQsdC70LjQvtGC0LXQutGDLiIKKworbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC30LDQutGA0YvRgtGMINC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdGD0Y4g0LHQuNCx0LvQuNC+0YLQtdC60YMuIgorCittc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC90LDRgdGC0YDQvtC40YLRjCDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3Rg9GOINCx0LjQsdC70LjQvtGC0LXQutGDLiIKKworbXNnaWQgIkVuY29kaW5nIGVycm9yLiIKK21zZ3N0ciAi0J7RiNC40LHQutCwINC/0YDQuCDQutC+0LTQuNGA0L7QstCw0L3QuNC4LiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgorbXNnc3RyICLQntCx0L3QsNGA0YPQttC10L3QsCDQvtCx0YnQsNGPINC+0YjQuNCx0LrQsCDRgNC10YHRg9GA0YHQsCBHU3RyZWFtZXIuIgorCittc2dpZCAiUmVzb3VyY2Ugbm90IGZvdW5kLiIKK21zZ3N0ciAi0KDQtdGB0YPRgNGBINC90LUg0L3QsNC50LTQtdC9LiIKKworbXNnaWQgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCittc2dzdHIgItCg0LXRgdGD0YDRgSDQt9Cw0L3Rj9GCINC40LvQuCDQvdC10LTQvtGB0YLRg9C/0LXQvS4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywg0YDQtdGB0YPRgNGBINC00LvRjyDRh9GC0LXQvdC40Y8uIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHdyaXRpbmcuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMINGA0LXRgdGD0YDRgSDQtNC70Y8g0LfQsNC/0LjRgdC4LiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDRgNC10YHRg9GA0YEg0LTQu9GPINGH0YLQtdC90LjRjyDQuCDQt9Cw0L/QuNGB0LguIgorCittc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0LrRgNGL0YLRjCDRgNC10YHRg9GA0YEuIgorCittc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINC40Lcg0YDQtdGB0YPRgNGB0LAuIgorCittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMINCyINGA0LXRgdGD0YDRgS4iCisKK21zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7QuNC30LLQtdGB0YLQuCDQv9C+0LfQuNGG0LjQvtC90LjRgNC+0LLQsNC90LjQtSDQsiDRgNC10YHRg9GA0YHQtS4iCisKK21zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0YDQvtC40LfQstC10YHRgtC4INGB0LjQvdGF0YDQvtC90LjQt9Cw0YbQuNGOINC00LvRjyDRgNC10YHRg9GA0YHQsC4iCisKK21zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvRg9GH0LjRgtGML9GD0YHRgtCw0L3QvtCy0LjRgtGMINC/0LDRgNCw0LzQtdGC0YDRiyDRgNC10YHRg9GA0YHQsC4iCisKK21zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCittc2dzdHIgItCSINGA0LXRgdGD0YDRgdC1INC90LXRgiDRgdCy0L7QsdC+0LTQvdC+0LPQviDQvNC10YHRgtCwLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAi0J7QsdC90LDRgNGD0LbQtdC90LAg0L7QsdGJ0LDRjyDQvtGI0LjQsdC60LAg0L/QvtGC0L7QutCwIEdTdHJlYW1lci4iCisKK21zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCittc2dzdHIgIiIKKyLQkiDRjdC70LXQvNC10L3RgtC1INC90LUg0YDQtdCw0LvQuNC30L7QstCw0L3QsCDQvtCx0YDQsNCx0L7RgtC60LAg0Y3RgtC+0LPQviDQv9C+0YLQvtC60LAuINCf0L7QttCw0LvRg9C50YHRgtCwLCDRgdC+0L7QsdGJ0LjRgtC1INC+0LEgIgorItC+0YjQuNCx0LrQtS4iCisKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIHR5cGUgb2Ygc3RyZWFtLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtC/0YDQtdC00LXQu9C40YLRjCDRgtC40L8g0L/QvtGC0L7QutCwLiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKK21zZ3N0ciAi0KLQuNC/INC/0L7RgtC+0LrQsCDQvtGC0LvQuNGH0LDQtdGC0YHRjyDQvtGCINC+0LHRgNCw0LHQsNGC0YvQstCw0LXQvNC+0LPQviDRjdGC0LjQvCDRjdC70LXQvNC10L3RgtC+0LwuIgorCittc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgorbXNnc3RyICLQndC10YIg0LrQvtC00LXQutCwINC00LvRjyDQvtCx0YDQsNCx0L7RgtC60Lgg0LTQsNC90L3QvtCz0L4g0YLQuNC/0LAg0L/QvtGC0L7QutCwLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZWNvZGUgc3RyZWFtLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQtNC10LrQvtC00LjRgNC+0LLQsNGC0Ywg0L/QvtGC0L7Qui4iCisKK21zZ2lkICJDb3VsZCBub3QgZW5jb2RlIHN0cmVhbS4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC60L7QtNC40YDQvtCy0LDRgtGMINC/0L7RgtC+0LouIgorCittc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LTQtdC80YPQu9GM0YLQuNC/0LvQtdC60YHQuNGA0L7QstCw0YLRjCDQv9C+0YLQvtC6LiIKKworbXNnaWQgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvNGD0LvRjNGC0LjQv9C70LXQutGB0LjRgNC+0LLQsNGC0Ywg0L/QvtGC0L7Qui4iCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIgorbXNnc3RyICLQn9C+0YLQvtC6INC40LzQtdC10YIg0L3QtdCy0LXRgNC90YvQuSDRhNC+0YDQvNCw0YIuIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iCittc2dzdHIgItCf0L7RgtC+0Log0LfQsNGI0LjRhNGA0L7QstCw0L0g0Lgg0LXQs9C+INGA0LDRgdGI0LjRhNGA0L7QstC60LAg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YLRgdGPLiIKKworbXNnaWQgIiIKKyJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgY2FuJ3QgYmUgZGVjcnlwdGVkIGJlY2F1c2Ugbm8gc3VpdGFibGUga2V5IGhhcyAiCisiYmVlbiBzdXBwbGllZC4iCittc2dzdHIgIiIKKyLQn9C+0YLQvtC6INC30LDRiNC40YTRgNC+0LLQsNC9INC4INC90LUg0LzQvtC20LXRgiDQsdGL0YLRjCDRgNCw0YHRiNC40YTRgNC+0LLQsNC9LCDQv9C+0YLQvtC80YMg0YfRgtC+INC90LUg0L/RgNC10LTQvtGB0YLQsNCy0LvQtdC9ICIKKyLQv9C+0LTRhdC+0LTRj9GJ0LjQuSDQutC70Y7Rhy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzLiIKK21zZ3N0ciAi0J3QtdGCINGB0L7QvtCx0YnQtdC90LjRjyDQvtCxINC+0YjQuNCx0LrQtSDQtNC70Y8g0LTQvtC80LXQvdCwICVzLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMgYW5kIGNvZGUgJWQuIgorbXNnc3RyICLQndC10YIg0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+INGB0L7QvtCx0YnQtdC90LjRjyDQvtCxINC+0YjQuNCx0LrQtSDQtNC70Y8g0LTQvtC80LXQvdCwICVzINC4INC60L7QtNCwICVkLiIKKworbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKK21zZ3N0ciAi0JLRi9Cx0YDQsNC90L3Ri9C1INGH0LDRgdGLINC90LUg0LzQvtCz0YPRgiDQsdGL0YLRjCDQuNGB0L/QvtC70YzQt9C+0LLQsNC90Ysg0LIg0LrQvtC90LLQtdC50LXRgNC1LiIKKworbXNnaWQgInRpdGxlIgorbXNnc3RyICLQvdCw0LfQstCw0L3QuNC1IgorCittc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKK21zZ3N0ciAi0L7QsdGL0YfQvdC+INC40YHQv9C+0LvRjNC30YPQtdC80L7QtSDQvdCw0LfQstCw0L3QuNC1IgorCittc2dpZCAidGl0bGUgc29ydG5hbWUiCittc2dzdHIgItC90LDQt9Cy0LDQvdC40LUgKNC00LvRjyDRgdC+0YDRgtC40YDQvtCy0LrQuCkiCisKK21zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICLQvtCx0YvRh9C90L4g0LjRgdC/0L7Qu9GM0LfRg9C10LzQvtC1INC90LDQt9Cy0LDQvdC40LUgKNC00LvRjyDRgdC+0YDRgtC40YDQvtCy0LrQuCkiCisKK21zZ2lkICJhcnRpc3QiCittc2dzdHIgItC40YHQv9C+0LvQvdC40YLQtdC70YwiCisKK21zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmciCittc2dzdHIgItC70LjRhtC+L9C70LjRhtCwLCDQvtGC0LLQtdGC0YHRgtCy0LXQvdC90YvQtSDQt9CwINC30LDQv9C40YHRjCIKKworbXNnaWQgImFydGlzdCBzb3J0bmFtZSIKK21zZ3N0ciAi0LjRgdC/0L7Qu9C90LjRgtC10LvRjCAo0LTQu9GPINGB0L7RgNGC0LjRgNC+0LLQutC4KSIKKworbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAi0LvQuNGG0L4v0LvQuNGG0LAsINC+0YLQstC10YLRgdGC0LLQtdC90L3Ri9C1INC30LAg0LfQsNC/0LjRgdGMICjQtNC70Y8g0YHQvtGA0YLQuNGA0L7QstC60LgpIgorCittc2dpZCAiYWxidW0iCittc2dzdHIgItCw0LvRjNCx0L7QvCIKKworbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgorbXNnc3RyICLQsNC70YzQsdC+0LwsINGB0L7QtNC10YDQttCw0YnQuNC5INGN0YLQuCDQtNCw0L3QvdGL0LUiCisKK21zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKK21zZ3N0ciAi0LDQu9GM0LHQvtC8ICjQtNC70Y8g0YHQvtGA0YLQuNGA0L7QstC60LgpIgorCittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgItCw0LvRjNCx0L7QvCwg0YHQvtC00LXRgNC20LDRidC40Lkg0Y3RgtC4INC00LDQvdC90YvQtSAo0LTQu9GPINGB0L7RgNGC0LjRgNC+0LLQutC4KSIKKworbXNnaWQgImFsYnVtIGFydGlzdCIKK21zZ3N0ciAi0LjRgdC/0L7Qu9C90LjRgtC10LvRjCDQsNC70YzQsdC+0LzQsCIKKworbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIGRpc3BsYXllZCIKK21zZ3N0ciAi0JjRgdC/0L7Qu9C90LjRgtC10LvRjCDQstGB0LXQs9C+INCw0LvRjNCx0L7QvNCwLCDQutC+0YLQvtGA0YvQuSDQtNC+0LvQttC10L0g0L7RgtC+0LHRgNCw0LbQsNGC0YzRgdGPIgorCittc2dpZCAiYWxidW0gYXJ0aXN0IHNvcnRuYW1lIgorbXNnc3RyICLQuNGB0L/QvtC70L3QuNGC0LXQu9GMINCw0LvRjNCx0L7QvNCwICjQtNC70Y8g0YHQvtGA0YLQuNGA0L7QstC60LgpIgorCittc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkIgorbXNnc3RyICLQmNGB0L/QvtC70L3QuNGC0LXQu9GMINCy0YHQtdCz0L4g0LDQu9GM0LHQvtC80LAsINC/0L4g0LrQvtGC0L7RgNC+0LzRgyDQvdGD0LbQvdC+INCy0YvQv9C+0LvQvdGP0YLRjCDRgdC+0YDRgtC40YDQvtCy0LrRgyIKKworbXNnaWQgImRhdGUiCittc2dzdHIgItC00LDRgtCwIgorCittc2dpZCAiZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHRGF0ZSBzdHJ1Y3R1cmUpIgorbXNnc3RyICLQtNCw0YLQsCDRgdC+0LfQtNCw0L3QuNGPINGN0YLQuNGFINC00LDQvdC90YvRhSAo0LrQsNC6INGB0YLRgNGD0LrRgtGD0YDQsCBHRGF0ZSkiCisKK21zZ2lkICJkYXRldGltZSIKK21zZ3N0ciAi0LTQsNGC0LAt0LLRgNC10LzRjyIKKworbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKK21zZ3N0ciAi0LTQsNGC0LAg0Lgg0LLRgNC10LzRjyDRgdC+0LfQtNCw0L3QuNGPINGN0YLQuNGFINC00LDQvdC90YvRhSAo0LrQsNC6INGB0YLRgNGD0LrRgtGD0YDQsCBHc3REYXRlVGltZSkiCisKK21zZ2lkICJnZW5yZSIKK21zZ3N0ciAi0LbQsNC90YAiCisKK21zZ2lkICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKK21zZ3N0ciAi0LbQsNC90YAsINC6INC60L7RgtC+0YDQvtC80YMg0L7RgtC90L7RgdGP0YLRgdGPINGN0YLQuCDQtNCw0L3QvdGL0LUiCisKK21zZ2lkICJjb21tZW50IgorbXNnc3RyICLQutC+0LzQvNC10L3RgtCw0YDQuNC5IgorCittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCittc2dzdHIgItC60L7QvNC80LXQvdGC0LDRgNC40Lkg0Log0Y3RgtC40Lwg0LTQsNC90L3Ri9C8INCyINGB0LLQvtCx0L7QtNC90L7QuSDRhNC+0YDQvNC1IgorCittc2dpZCAiZXh0ZW5kZWQgY29tbWVudCIKK21zZ3N0ciAi0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQuSDQutC+0LzQvNC10L3RgtCw0YDQuNC5IgorCittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgorbXNnc3RyICIiCisi0LrQvtC80LzQtdC90YLQsNGA0LjQuSDQuiDRjdGC0LjQvCDQtNCw0L3QvdGL0Lwg0LIg0YHQstC+0LHQvtC00L3QvtC5INGE0L7RgNC80LUg0LIg0LLQuNC00LUg0LrQu9GO0Yc90LfQvdCw0YfQtdC90LjQtSDQuNC70Lgg0LrQu9GO0YdbZW5dIgorIj3Qt9C90LDRh9C10L3QuNC1IgorCittc2dpZCAidHJhY2sgbnVtYmVyIgorbXNnc3RyICLQvdC+0LzQtdGAINC00L7RgNC+0LbQutC4IgorCittc2dpZCAidHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgItC90L7QvNC10YAg0LTQvtGA0L7QttC60Lgg0LLQvdGD0YLRgNC4INC60L7Qu9C70LXQutGG0LjQuCIKKworbXNnaWQgInRyYWNrIGNvdW50IgorbXNnc3RyICLQutC+0LvQuNGH0LXRgdGC0LLQviDQtNC+0YDQvtC20LXQuiIKKworbXNnaWQgImNvdW50IG9mIHRyYWNrcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIHRyYWNrIGJlbG9uZ3MgdG8iCittc2dzdHIgItC60L7Qu9C40YfQtdGB0YLQstC+INC00L7RgNC+0LbQtdC6INCy0L3Rg9GC0YDQuCDQutC+0LvQu9C10LrRhtC40LgsINC6INC60L7RgtC+0YDQvtC5INC/0YDQuNC90LDQtNC70LXQttC40YIg0Y3RgtCwINC00L7RgNC+0LbQutCwIgorCittc2dpZCAiZGlzYyBudW1iZXIiCittc2dzdHIgItC90L7QvNC10YAg0LTQuNGB0LrQsCIKKworbXNnaWQgImRpc2MgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgItC90L7QvNC10YAg0LTQuNGB0LrQsCDQsiDQutC+0LvQu9C10LrRhtC40LgiCisKK21zZ2lkICJkaXNjIGNvdW50IgorbXNnc3RyICLQutC+0LvQuNGH0LXRgdGC0LLQviDQtNC40YHQutC+0LIiCisKK21zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKK21zZ3N0ciAi0LrQvtC70LjRh9C10YHRgtCy0L4g0LTQuNGB0LrQvtCyINCyINC60L7Qu9C70LXQutGG0LjQuCwg0Log0LrQvtGC0L7RgNC+0Lkg0L/RgNC40L3QsNC00LvQtdC20LjRgiDRjdGC0L7RgiDQtNC40YHQuiIKKworbXNnaWQgImxvY2F0aW9uIgorbXNnc3RyICLQvNC10YHRgtC+0L/QvtC70L7QttC10L3QuNC1IgorCittc2dpZCAiIgorIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgorImlzIGhvc3RlZCkiCittc2dzdHIgIiIKKyLQmNGB0YLQvtGH0L3QuNC6INC00LDQvdC90YvRhSDQsiDQstC40LTQtSBVUkkgKNCw0LTRgNC10YEg0YDQsNC30LzQtdGJ0LXQvdC40Y8g0L7RgNC40LPQuNC90LDQu9GM0L3QvtCz0L4g0YTQsNC50LvQsCDQuNC70Lgg0L/QvtGC0L7QutCwKSIKKworbXNnaWQgImhvbWVwYWdlIgorbXNnc3RyICLQtNC+0LzQsNGI0L3Rj9GPINGB0YLRgNCw0L3QuNGG0LAiCisKK21zZ2lkICJIb21lcGFnZSBmb3IgdGhpcyBtZWRpYSAoaS5lLiBhcnRpc3Qgb3IgbW92aWUgaG9tZXBhZ2UpIgorbXNnc3RyICIiCisi0JTQvtC80LDRiNC90Y/RjyDRgdGC0YDQsNC90LjRhtCwINGN0YLQvtCz0L4g0L3QvtGB0LjRgtC10LvRjyAo0YIu0LUuINGB0YLRgNCw0L3QuNGG0LAg0LjRgdC/0L7Qu9C90LjRgtC10LvRjyDQuNC70Lgg0YTQuNC70YzQvNCwKSIKKworbXNnaWQgImRlc2NyaXB0aW9uIgorbXNnc3RyICLQvtC/0LjRgdCw0L3QuNC1IgorCittc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgorbXNnc3RyICLQutC+0YDQvtGC0LrQvtC1INC+0L/QuNGB0LDQvdC40LUg0YHQvtC00LXRgNC20LjQvNC+0LPQviDQtNCw0L3QvdGL0YUiCisKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICLQstC10YDRgdC40Y8iCisKK21zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKK21zZ3N0ciAi0LLQtdGA0YHQuNGPINGN0YLQuNGFINC00LDQvdC90YvRhSIKKworbXNnaWQgIklTUkMiCittc2dzdHIgIklTUkMiCisKK21zZ2lkICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCittc2dzdHIgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUg4oCUINGB0LwuIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCisKK21zZ2lkICJvcmdhbml6YXRpb24iCittc2dzdHIgItC+0YDQs9Cw0L3QuNC30LDRhtC40Y8iCisKK21zZ2lkICJjb3B5cmlnaHQiCittc2dzdHIgItCw0LLRgtC+0YDRgdC60LjQtSDQv9GA0LDQstCwIgorCittc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAi0YPQstC10LTQvtC80LvQtdC90LjQtSDQvtCxINCw0LLRgtC+0YDRgdC60LjRhSDQv9GA0LDQstCw0YUg0L3QsCDRjdGC0Lgg0LTQsNC90L3Ri9C1IgorCittc2dpZCAiY29weXJpZ2h0IHVyaSIKK21zZ3N0ciAiVVJJINCw0LLRgtC+0YDRgdC60LjRhSDQv9GA0LDQsiIKKworbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiVVJJINGD0LLQtdC00L7QvNC70LXQvdC40Y8g0L7QsSDQsNCy0YLQvtGA0YHQutC40YUg0L/RgNCw0LLQsNGFIgorCittc2dpZCAiZW5jb2RlZCBieSIKK21zZ3N0ciAi0JrQvtC00LjRgNC+0LLQsNC90LjQtSDQstGL0L/QvtC70L3QtdC90L4iCisKK21zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgorbXNnc3RyICLQmNC80Y8g0YfQtdC70L7QstC10LrQsCDQuNC70Lgg0L3QsNC30LLQsNC90LjQtSDQvtGA0LPQsNC90LjQt9Cw0YbQuNC4LCDQstGL0L/QvtC70L3Rj9Cy0YjQtdC5INC60L7QtNC40YDQvtCy0LrRgyIKKworbXNnaWQgImNvbnRhY3QiCittc2dzdHIgItC60L7QvdGC0LDQutGCIgorCittc2dpZCAiY29udGFjdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi0LrQvtC90YLQsNC60YLQvdCw0Y8g0LjQvdGE0L7RgNC80LDRhtC40Y8iCisKK21zZ2lkICJsaWNlbnNlIgorbXNnc3RyICLQu9C40YbQtdC90LfQuNGPIgorCittc2dpZCAibGljZW5zZSBvZiBkYXRhIgorbXNnc3RyICLQu9C40YbQtdC90LfQuNGPINC90LAg0Y3RgtC4INC00LDQvdC90YvQtSIKKworbXNnaWQgImxpY2Vuc2UgdXJpIgorbXNnc3RyICJVUkkg0LvQuNGG0LXQvdC30LjQuCIKKworbXNnaWQgIlVSSSB0byB0aGUgbGljZW5zZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiVVJJINC70LjRhtC10L3Qt9C40Lgg0L3QsCDRjdGC0Lgg0LTQsNC90L3Ri9C1IgorCittc2dpZCAicGVyZm9ybWVyIgorbXNnc3RyICLQuNGB0L/QvtC70L3QuNGC0LXQu9GMIgorCittc2dpZCAicGVyc29uKHMpIHBlcmZvcm1pbmciCittc2dzdHIgItC70LjRhtC+L9C70LjRhtCwLCDQuNGB0L/QvtC70L3Rj9GO0YnQuNC1INC60L7QvNC/0L7Qt9C40YbQuNGOIgorCittc2dpZCAiY29tcG9zZXIiCittc2dzdHIgItC60L7QvNC/0L7Qt9C40YLQvtGAIgorCittc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nIgorbXNnc3RyICLQu9C40YbQvi/Qu9C40YbQsCwg0L3QsNC/0LjRgdCw0LLRiNC40LUg0LrQvtC80L/QvtC30LjRhtC40Y4iCisKK21zZ2lkICJkdXJhdGlvbiIKK21zZ3N0ciAi0LTQu9C40YLQtdC70YzQvdC+0YHRgtGMIgorCittc2dpZCAibGVuZ3RoIGluIEdTdHJlYW1lciB0aW1lIHVuaXRzIChuYW5vc2Vjb25kcykiCittc2dzdHIgItC00LvQuNGC0LXQu9GM0L3QvtGB0YLRjCDQsiDQtdC00LjQvdC40YbQsNGFIEdTdHJlYW1lciAo0LIg0L3QsNC90L7RgdC10LrRg9C90LTQsNGFKSIKKworbXNnaWQgImNvZGVjIgorbXNnc3RyICLQutC+0LTQtdC6IgorCittc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICLQutC+0LTQtdC6LCDQsiDQutC+0YLQvtGA0L7QvCDRgdC+0YXRgNCw0L3QtdC90Ysg0LTQsNC90L3Ri9C1IgorCittc2dpZCAidmlkZW8gY29kZWMiCittc2dzdHIgItCy0LjQtNC10L4t0LrQvtC00LXQuiIKKworbXNnaWQgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAi0LrQvtC00LXQuiwg0LIg0LrQvtGC0L7RgNC+0Lwg0YHQvtGF0YDQsNC90LXQvdGLINCy0LjQtNC10L4t0LTQsNC90L3Ri9C1IgorCittc2dpZCAiYXVkaW8gY29kZWMiCittc2dzdHIgItCw0YPQtNC40L4t0LrQvtC00LXQuiIKKworbXNnaWQgImNvZGVjIHRoZSBhdWRpbyBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAi0LrQvtC00LXQuiwg0LIg0LrQvtGC0L7RgNC+0Lwg0YHQvtGF0YDQsNC90LXQvdGLINCw0YPQtNC40L4t0LTQsNC90L3Ri9C1IgorCittc2dpZCAic3VidGl0bGUgY29kZWMiCittc2dzdHIgItC60L7QtNC10Log0YHRg9Cx0YLQuNGC0YDQvtCyIgorCittc2dpZCAiY29kZWMgdGhlIHN1YnRpdGxlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICLQutC+0LTQtdC6LCDQsiDQutC+0YLQvtGA0L7QvCDRhdGA0LDQvdGP0YLRgdGPINGB0YPQsdGC0LjRgtGA0YsiCisKK21zZ2lkICJjb250YWluZXIgZm9ybWF0IgorbXNnc3RyICLRhNC+0YDQvNCw0YIg0LrQvtC90YLQtdC50L3QtdGA0LAiCisKK21zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAi0YTQvtGA0LzQsNGCINC60L7QvdGC0LXQudC90LXRgNCwLCDQsiDQutC+0YLQvtGA0L7QvCDRhdGA0LDQvdGP0YLRgdGPINC00LDQvdC90YvQtSIKKworbXNnaWQgImJpdHJhdGUiCittc2dzdHIgItCx0LjRgtGA0LXQudGCIgorCittc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAi0YLQvtGH0L3Ri9C5INC40LvQuCDRgdGA0LXQtNC90LjQuSDQsdC40YLRgNC10LnRgiAo0LHQuNGCL9GBKSIKKworbXNnaWQgIm5vbWluYWwgYml0cmF0ZSIKK21zZ3N0ciAi0L3QvtC80LjQvdCw0LvRjNC90YvQuSDQsdC40YLRgNC10LnRgiIKKworbXNnaWQgIm5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgItC90L7QvNC40L3QsNC70YzQvdGL0Lkg0LHQuNGC0YDQtdC50YIgKNCx0LjRgi/RgSkiCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCittc2dzdHIgItC80LjQvdC40LzQsNC70YzQvdGL0Lkg0LHQuNGC0YDQtdC50YIiCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICLQvNC40L3QuNC80LDQu9GM0L3Ri9C5INCx0LjRgtGA0LXQudGCICjQsdC40YIv0YEpIgorCittc2dpZCAibWF4aW11bSBiaXRyYXRlIgorbXNnc3RyICLQvNCw0LrRgdC40LzQsNC70YzQvdGL0Lkg0LHQuNGC0YDQtdC50YIiCisKK21zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICLQvNCw0LrRgdC40LzQsNC70YzQvdGL0Lkg0LHQuNGC0YDQtdC50YIgKNCx0LjRgi/RgSkiCisKK21zZ2lkICJlbmNvZGVyIgorbXNnc3RyICLQutC+0LTQuNGA0L7QstGJ0LjQuiIKKworbXNnaWQgImVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCittc2dzdHIgItC60L7QtNC40YDQvtCy0YnQuNC6LCDQuNGB0L/QvtC70YzQt9GD0LXQvNGL0Lkg0LTQu9GPINC60L7QtNC40YDQvtCy0LDQvdC40Y8g0L/QvtGC0L7QutCwIgorCittc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgorbXNnc3RyICLQstC10YDRgdC40Y8g0LrQvtC00LjRgNC+0LLRidC40LrQsCIKKworbXNnaWQgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCittc2dzdHIgItCy0LXRgNGB0LjRjyDQutC+0LTQuNGA0L7QstGJ0LjQutCwLCDQuNGB0L/QvtC70YzQt9GD0LXQvNC+0LPQviDQtNC70Y8g0LrQvtC00LjRgNC+0LLQsNC90LjRjyDQv9C+0YLQvtC60LAiCisKK21zZ2lkICJzZXJpYWwiCittc2dzdHIgItGB0LXRgNC40LnQvdGL0Lkg0L3QvtC80LXRgCIKKworbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCittc2dzdHIgItGB0LXRgNC40LnQvdGL0Lkg0L3QvtC80LXRgCDQtNC+0YDQvtC20LrQuCIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKK21zZ3N0ciAi0YPRgNC+0LLQtdC90YwgUmVwbGF5R2FpbiDQtNC70Y8g0LTQvtGA0L7QttC60LgiCisKK21zZ2lkICJ0cmFjayBnYWluIGluIGRiIgorbXNnc3RyICLRg9GA0L7QstC10L3RjCDRg9GB0LjQu9C10L3QuNGPINC00L7RgNC+0LbQutC4INCyINC00JEiCisKK21zZ2lkICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCittc2dzdHIgItC/0LjQuiBSZXBsYXlHYWluINC00LvRjyDQtNC+0YDQvtC20LrQuCIKKworbXNnaWQgInBlYWsgb2YgdGhlIHRyYWNrIgorbXNnc3RyICLQv9C40LrQvtCy0L7QtSDQt9C90LDRh9C10L3QuNC1INGB0LjQs9C90LDQu9CwINC00LvRjyDQtNC+0YDQvtC20LrQuCIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKK21zZ3N0ciAi0YPRgNC+0LLQtdC90YwgUmVwbGF5R2FpbiDQtNC70Y8g0LDQu9GM0LHQvtC80LAiCisKK21zZ2lkICJhbGJ1bSBnYWluIGluIGRiIgorbXNnc3RyICLRg9GA0L7QstC10L3RjCDRg9GB0LjQu9C10L3QuNGPINCw0LvRjNCx0L7QvNCwINCyINC00JEiCisKK21zZ2lkICJyZXBsYXlnYWluIGFsYnVtIHBlYWsiCittc2dzdHIgItC/0LjQuiBSZXBsYXlHYWluINC00LvRjyDQsNC70YzQsdC+0LzQsCIKKworbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgorbXNnc3RyICLQv9C40LrQvtCy0L7QtSDQt9C90LDRh9C10L3QuNC1INGB0LjQs9C90LDQu9CwINC00LvRjyDQsNC70YzQsdC+0LzQsCIKKworbXNnaWQgInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIgorbXNnc3RyICLRjdGC0LDQu9C+0L3QvdGL0Lkg0YPRgNC+0LLQtdC90YwgUmVwbGF5R2FpbiIKKworbXNnaWQgInJlZmVyZW5jZSBsZXZlbCBvZiB0cmFjayBhbmQgYWxidW0gZ2FpbiB2YWx1ZXMiCittc2dzdHIgItGN0YLQsNC70L7QvdC90YvQuSDRg9GA0L7QstC10L3RjCDQtNC70Y8g0LrQvtGA0YDQtdC60YLQuNGA0L7QstC60Lgg0LPRgNC+0LzQutC+0YHRgtC4INC00L7RgNC+0LbQutC4INC4INCw0LvRjNCx0L7QvNCwIgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSIKK21zZ3N0ciAi0LrQvtC0INGP0LfRi9C60LAiCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIGZvciB0aGlzIHN0cmVhbSwgY29uZm9ybWluZyB0byBJU08tNjM5LTEiCittc2dzdHIgItC60L7QtCDRj9C30YvQutCwINC00LvRjyDRjdGC0L7Qs9C+INC/0L7RgtC+0LrQsCDRgdC+0LPQu9Cw0YHQvdC+IElTTy02MzktMSIKKworbXNnaWQgImltYWdlIgorbXNnc3RyICLQuNC30L7QsdGA0LDQttC10L3QuNC1IgorCittc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAi0LjQt9C+0LHRgNCw0LbQtdC90LjQtSwg0YHQstGP0LfQsNC90L3QvtC1INGBINGN0YLQuNC8INC/0L7RgtC+0LrQvtC8IgorCisjLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKK21zZ2lkICJwcmV2aWV3IGltYWdlIgorbXNnc3RyICLQuNC30L7QsdGA0LDQttC10L3QuNC1INC00LvRjyDQv9GA0LXQtNC/0YDQvtGB0LzQvtGC0YDQsCIKKworbXNnaWQgInByZXZpZXcgaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAi0LjQt9C+0LHRgNCw0LbQtdC90LjQtSDQtNC70Y8g0L/RgNC10LTQv9GA0L7RgdC80L7RgtGA0LAsINGB0LLRj9C30LDQvdC90L7QtSDRgSDRjdGC0LjQvCDQv9C+0YLQvtC60L7QvCIKKworbXNnaWQgImF0dGFjaG1lbnQiCittc2dzdHIgItCy0LvQvtC20LXQvdC40LUiCisKK21zZ2lkICJmaWxlIGF0dGFjaGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICLRhNCw0LnQuywg0LLQu9C+0LbQtdC90L3Ri9C5INCyINGN0YLQvtGCINC/0L7RgtC+0LoiCisKK21zZ2lkICJiZWF0cyBwZXIgbWludXRlIgorbXNnc3RyICLRg9C00LDRgNC+0LIg0LIg0LzQuNC90YPRgtGDIgorCittc2dpZCAibnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8iCittc2dzdHIgItGH0LjRgdC70L4g0YPQtNCw0YDQvtCyINCyINC80LjQvdGD0YLRgyDQtNC70Y8g0LDRg9C00LjQviIKKworbXNnaWQgImtleXdvcmRzIgorbXNnc3RyICLQutC70Y7Rh9C10LLRi9C1INGB0LvQvtCy0LAiCisKK21zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKK21zZ3N0ciAi0YDQsNC30LTQtdC70Y/QtdC80YvQtSDQt9Cw0L/Rj9GC0YvQvNC4INC60LvRjtGH0LXQstGL0LUg0YHQu9C+0LLQsCwg0L7Qv9C40YHRi9Cy0LDRjtGJ0LjQtSDRgdC+0LTQtdGA0LbQuNC80L7QtSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBuYW1lIgorbXNnc3RyICLQs9C10L7Qs9GALiDQvNC10YHRgtC+0L/QvtC70L7QttC10L3QuNC1IgorCittc2dpZCAiIgorImh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aXZlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciAiCisicHJvZHVjZWQiCittc2dzdHIgIiIKKyLQvtC/0LjRgdCw0YLQtdC70YzQvdC+0LUg0L3QsNC30LLQsNC90LjQtSDQvNC10YHRgtC90L7RgdGC0LgsINCyINC60L7RgtC+0YDQvtC5INC/0YDQvtC40LfQstC+0LTQuNC70LDRgdGMINC30LDQv9C40YHRjCDQuNC70LggIgorItC/0YDQvtC40LfQstC+0LTRgdGC0LLQviDQtNCw0L3QvdGL0YUiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCittc2dzdHIgItCz0LXQvtCz0YAuINGI0LjRgNC+0YLQsCIKKworbXNnaWQgIiIKKyJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCisic291dGhlcm4gbGF0aXR1ZGVzKSIKK21zZ3N0ciAiIgorItCz0LXQvtCz0YDQsNGE0LjRh9C10YHQutCw0Y8g0YjQuNGA0L7RgtCwINC80LXRgdGC0L3QvtGB0YLQuCwg0LIg0LrQvtGC0L7RgNC+0Lkg0L/RgNC+0LjQt9Cy0L7QtNC40LvQsNGB0Ywg0LfQsNC/0LjRgdGMINC40LvQuCAiCisi0L/RgNC+0LjQt9Cy0L7QtNGB0YLQstC+INC00LDQvdC90YvRhSwg0LIg0LPRgNCw0LTRg9GB0LDRhSDQsiDRgdC40YHRgtC10LzQtSDQutC+0L7RgNC00LjQvdCw0YIgV0dTODQgKDAg0L3QsCDRjdC60LLQsNGC0L7RgNC1LCAiCisi0L7RgtGA0LjRhtCw0YLQtdC70YzQvdGL0LUg0LfQvdCw0YfQtdC90LjRjyDQtNC70Y8g0Y7QttC90YvRhSDRiNC40YDQvtGCKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBsb25naXR1ZGUiCittc2dzdHIgItCz0LXQvtCz0YAuINC00L7Qu9Cz0L7RgtCwIgorCittc2dpZCAiIgorImdlbyBsb25naXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgcHJpbWUgbWVyaWRpYW4gaW4gR3JlZW53aWNoL1VLLCAgIgorIm5lZ2F0aXZlIHZhbHVlcyBmb3Igd2VzdGVybiBsb25naXR1ZGVzKSIKK21zZ3N0ciAiIgorItCz0LXQvtCz0YDQsNGE0LjRh9C10YHQutCw0Y8g0LTQvtC70LPQvtGC0LAg0LzQtdGB0YLQvdC+0YHRgtC4LCDQsiDQutC+0YLQvtGA0L7QuSDQv9GA0L7QuNC30LLQvtC00LjQu9Cw0YHRjCDQt9Cw0L/QuNGB0Ywg0LjQu9C4ICIKKyLQv9GA0L7QuNC30LLQvtC00YHRgtCy0L4g0LTQsNC90L3Ri9GFLCDQsiDQs9GA0LDQtNGD0YHQsNGFINCyINGB0LjRgdGC0LXQvNC1INC60L7QvtGA0LTQuNC90LDRgiBXR1M4NCAoMCDQvdCwINCT0YDQuNC90LLQuNGH0YHQutC+0LwgIgorItC80LXRgNC40LTQuNCw0L3QtSwg0L7RgtGA0LjRhtCw0YLQtdC70YzQvdGL0LUg0LfQvdCw0YfQtdC90LjRjyDQtNC70Y8g0LfQsNC/0LDQtNC90YvRhSDQtNC+0LvQs9C+0YIpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKK21zZ3N0ciAi0LPQtdC+0LPRgC4g0LLRi9GB0L7RgtCwIgorCittc2dpZCAiIgorImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCisiYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKK21zZ3N0ciAiIgorItCz0LXQvtCz0YDQsNGE0LjRh9C10YHQutCw0Y8g0LLRi9GB0L7RgtCwINC80LXRgdGC0L3QvtGB0YLQuCwg0LIg0LrQvtGC0L7RgNC+0Lkg0L/RgNC+0LjQt9Cy0L7QtNC40LvQsNGB0Ywg0LfQsNC/0LjRgdGMINC40LvQuCAiCisi0L/RgNC+0LjQt9Cy0L7QtNGB0YLQstC+INC00LDQvdC90YvRhSwg0LIg0LzQtdGC0YDQsNGFINGB0L7Qs9C70LDRgdC90L4g0YHQuNGB0YLQtdC80LUg0LrQvtC+0YDQtNC40L3QsNGCIFdHUzg0ICgwINC90LAg0YHRgNC10LTQvdC10LwgIgorItGD0YDQvtCy0L3QtSDQvNC+0YDRjykiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gY291bnRyeSIKK21zZ3N0ciAi0YHRgtGA0LDQvdCwIgorCittc2dpZCAiY291bnRyeSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCittc2dzdHIgIiIKKyLRgdGC0YDQsNC90LAgKNC90LAg0LDQvdCz0LvQuNC50YHQutC+0LwpLCDQsiDQutC+0YLQvtGA0L7QuSDQv9GA0L7QuNC30LLQvtC00LjQu9Cw0YHRjCDQt9Cw0L/QuNGB0Ywg0LjQu9C4INC/0YDQvtC40LfQstC+0LTRgdGC0LLQviAiCisi0LTQsNC90L3Ri9GFIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCittc2dzdHIgItCz0L7RgNC+0LQiCisKK21zZ2lkICJjaXR5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKK21zZ3N0ciAiIgorItCz0L7RgNC+0LQgKNC90LAg0LDQvdCz0LvQuNC50YHQutC+0LwpLCDQsiDQutC+0YLQvtGA0L7QvCDQv9GA0L7QuNC30LLQvtC00LjQu9Cw0YHRjCDQt9Cw0L/QuNGB0Ywg0LjQu9C4INC/0YDQvtC40LfQstC+0LTRgdGC0LLQviDQtNCw0L3QvdGL0YUiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gc3VibG9jYXRpb24iCittc2dzdHIgItC00L7Qvy4g0Log0LzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjRjiIKKworbXNnaWQgIiIKKyJhIGxvY2F0aW9uIHdoaXRoaW4gYSBjaXR5IHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZCBvciBjcmVhdGVkIChlLmcuICIKKyJ0aGUgbmVpZ2hib3Job29kKSIKK21zZ3N0ciAiIgorItC80LXRgdGC0L4g0LIg0LPQvtGA0L7QtNC1LCDQsiDQutC+0YLQvtGA0L7QvCDQv9GA0L7QuNC30LLQvtC00LjQu9Cw0YHRjCDQt9Cw0L/QuNGB0Ywg0LjQu9C4INC/0YDQvtC40LfQstC+0LTRgdGC0LLQviDQtNCw0L3QvdGL0YUgIgorIijQvdCw0L/RgNC40LzQtdGALCDRgNCw0LnQvtC9KSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgorbXNnc3RyICLQvtGI0LjQsdC60LAg0LIg0LPQtdC+0LPRgC4g0LzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjQuCIKKworbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgorbXNnc3RyICLQvtC20LjQtNCw0LXQvNCw0Y8g0L7RiNC40LHQutCwINC+0L/RgNC10LTQtdC70LXQvdC40Y8g0LPQtdC+0LPRgC4g0LzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjRjyAo0LIg0LzQtdGC0YDQsNGFKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKK21zZ3N0ciAi0YHQutC+0YDQvtGB0YLRjCDQtNCy0LjQttC10L3QuNGPIgorCittc2dpZCAiIgorIm1vdmVtZW50IHNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgaW4gbS9zIgorbXNnc3RyICLRgdC60L7RgNC+0YHRgtGMINC00LLQuNC20LXQvdC40Y8g0YPRgdGC0YDQvtC50YHRgtCy0LAg0YHRitGR0LzQutC4INCyINC/0YDQuCDQstGL0L/QvtC70L3QtdC90LjQuCDRgdGK0ZHQvNC60Lgg0LIg0LwvYyIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBkaXJlY3Rpb24iCittc2dzdHIgItC90LDQv9GA0LDQstC70LXQvdC40LUg0LTQstC40LbQtdC90LjRjyIKKworbXNnaWQgIiIKKyJpbmRpY2F0ZXMgdGhlIG1vdmVtZW50IGRpcmVjdGlvbiBvZiB0aGUgZGV2aWNlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgb2YgYSAiCisibWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sIDAgIgorIm1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKK21zZ3N0ciAiIgorItC90LDQv9GA0LDQstC70LXQvdC40LUg0LTQstC40LbQtdC90LjRjyDRg9GB0YLRgNC+0LnRgdGC0LLQsCDRgdGK0ZHQvNC60LguINCX0LDQtNCw0ZHRgtGB0Y8g0LIg0LPRgNCw0LTRg9GB0LDRhSDRh9C40YHQu9C+0Lwg0YEgIgorItC/0LvQsNCy0LDRjtGJ0LXQuSDRgtC+0YfQutC+0LksIDAg0L7Qt9C90LDRh9Cw0LXRgiDQs9C10L7Qs9GA0LDRhNC40YfQtdGB0LrQuNC5INGB0LXQstC10YAg0Lgg0LTQsNC70YzRiNC1INC/0L4g0YfQsNGB0L7QstC+0Lkg0YHRgtGA0LXQu9C60LUiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCittc2dzdHIgItC90LDQv9GA0LDQstC70LXQvdC40LUg0YHRitGR0LzQutC4IgorCittc2dpZCAiIgorImluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcgIGEgbWVkaWEuICIKKyJJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50ICByZXByZXNlbnRhdGlvbiwgMCBtZWFucyB0aGUgIgorImdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgorbXNnc3RyICIiCisi0L3QsNC/0YDQsNCy0LvQtdC90LjQtSwg0LrRg9C00LAg0YPQutCw0LfRi9Cy0LDQu9C+INGD0YHRgtGA0L7QudGB0YLQstC+INGB0YrRkdC80LrQuC4g0JfQsNC00LDRkdGC0YHRjyDQsiDQs9GA0LDQtNGD0YHQsNGFINGH0LjRgdC70L7QvCDRgSAiCisi0L/Qu9Cw0LLQsNGO0YnQtdC5INGC0L7Rh9C60L7QuSwgMCDQvtC30L3QsNGH0LDQtdGCINCz0LXQvtCz0YDQsNGE0LjRh9C10YHQutC40Lkg0YHQtdCy0LXRgCDQuCDQtNCw0LvRjNGI0LUg0L/QviDRh9Cw0YHQvtCy0L7QuSDRgdGC0YDQtdC70LrQtSIKKworIy4gVFJBTlNMQVRPUlM6ICdzaG93IG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lJyBoZXJlCittc2dpZCAic2hvdyBuYW1lIgorbXNnc3RyICLQvdCw0LfQstCw0L3QuNC1INC/0LXRgNC10LTQsNGH0LgiCisKK21zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgorbXNnc3RyICLQndCw0LfQstCw0L3QuNC1INGC0LIv0L/QvtC00LrQsNGB0YLQsC/Qv9C10YDQtdC00LDRh9C4INC90LAg0L3QvtGB0LjRgtC10LvQtSIKKworIy4gVFJBTlNMQVRPUlM6ICdzaG93IHNvcnRuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZSBhcyB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzJyBoZXJlCittc2dpZCAic2hvdyBzb3J0bmFtZSIKK21zZ3N0ciAi0LrQvtGA0L7RgtC60L7QtSDQvdCw0LfQstCw0L3QuNC1INC/0LXRgNC10LTQsNGH0LgiCisKK21zZ2lkICIiCisiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgItCd0LDQt9Cy0LDQvdC40LUg0YLQsi/Qv9C+0LTQutCw0YHRgtCwL9C/0LXRgNC10LTQsNGH0Lgg0L3QsCDQvdC+0YHQuNGC0LXQu9C1ICjQtNC70Y8g0YHQvtGA0YLQuNGA0L7QstC60LgpIgorCittc2dpZCAiZXBpc29kZSBudW1iZXIiCittc2dzdHIgItC90L7QvNC10YAg0Y3Qv9C40LfQvtC00LAiCisKK21zZ2lkICJUaGUgZXBpc29kZSBudW1iZXIgaW4gdGhlIHNlYXNvbiB0aGUgbWVkaWEgaXMgcGFydCBvZiIKK21zZ3N0ciAi0J3QvtC80LXRgCDRjdC/0LjQt9C+0LTQsCDQsiDRgdC10LfQvtC90LUg0L3QsCDQvdC+0YHQuNGC0LXQu9C1IgorCittc2dpZCAic2Vhc29uIG51bWJlciIKK21zZ3N0ciAi0L3QvtC80LXRgCDRgdC10LfQvtC90LAiCisKK21zZ2lkICJUaGUgc2Vhc29uIG51bWJlciBvZiB0aGUgc2hvdyB0aGUgbWVkaWEgaXMgcGFydCBvZiIKK21zZ3N0ciAi0J3QvtC80LXRgCDRgdC10LfQvtC90LAg0L3QsCDQvdC+0YHQuNGC0LXQu9C1IgorCittc2dpZCAibHlyaWNzIgorbXNnc3RyICLRgdGC0LjRhdC4IgorCittc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgorbXNnc3RyICLQodGC0LjRhdC4INC/0LXRgdC10L0g0L3QsCDQvdC+0YHQuNGC0LXQu9C1IgorCittc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCittc2dzdHIgItCw0LLRgtC+0YAgKNC00LvRjyDRgdC+0YDRgtC40YDQvtCy0LrQuCkiCisKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICLQu9C40YbQvi/Qu9C40YbQsCwg0L7RgtCy0LXRgtGB0YLQstC10L3QvdGL0LUg0LfQsCDQt9Cw0L/QuNGB0YwgKNC00LvRjyDRgdC+0YDRgtC40YDQvtCy0LrQuCkiCisKK21zZ2lkICJncm91cGluZyIKK21zZ3N0ciAi0LPRgNGD0L/Qv9C40YDQvtCy0LrQsCIKKworbXNnaWQgIiIKKyJHcm91cHMgcmVsYXRlZCBtZWRpYSB0aGF0IHNwYW5zIG11bHRpcGxlIHRyYWNrcywgbGlrZSB0aGUgZGlmZmVyZW50IHBpZWNlcyAiCisib2YgYSBjb25jZXJ0by4gSXQgaXMgYSBoaWdoZXIgbGV2ZWwgdGhhbiBhIHRyYWNrLCBidXQgbG93ZXIgdGhhbiBhbiBhbGJ1bSIKK21zZ3N0ciAiIgorItCT0YDRg9C/0L/RiyDQvdC+0YHQuNGC0LXQu9C10Lkg0YEg0L3QtdGB0LrQvtC70YzQutC40LzQuCDQtNC+0YDQvtC20LrQsNC80LgsINC90LDQv9GA0LjQvNC10YAsINGA0LDQt9C70LjRh9C90YvQtSDRh9Cw0YHRgtC4ICIKKyLQutC+0L3RhtC10YDRgtCwLiDQrdGC0L4g0LHQvtC70YzRiNC1INGH0LXQvCDQtNC+0YDQvtC20LrQsCwg0L3QviDQvNC10L3RjNGI0LUg0YfQtdC8INCw0LvRjNCx0L7QvCIKKworbXNnaWQgInVzZXIgcmF0aW5nIgorbXNnc3RyICLQv9C+0LvRjNC30L7QstCw0YLQtdC70YzRgdC60LDRjyDQvtGG0LXQvdC60LAiCisKK21zZ2lkICIiCisiUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCisidGhpcyBtZWRpYSIKK21zZ3N0ciAiIgorItCe0YbQtdC90LrQsCwg0LTQsNC90L3QsNGPINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC8LiDQp9C10Lwg0LLRi9GI0LUg0L7RhtC10L3QutCwLCDRgtC10Lwg0LHQvtC70YzRiNC10LzRgyDRh9C40YHQu9GDICIKKyLQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQuSDQv9C+0L3RgNCw0LLQuNC70YHRjyDQvdC+0YHQuNGC0LXQu9GMIgorCittc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKK21zZ3N0ciAi0L/RgNC+0LjQt9Cy0L7QtNC40YLQtdC70Ywg0YPRgdGC0YDQvtC50YHRgtCy0LAiCisKK21zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICLQn9GA0L7QuNC30LLQvtC00LjRgtC10LvRjCDRg9GB0YLRgNC+0LnRgdGC0LLQsCwg0L3QsCDQutC+0YLQvtGA0L7QvCDRgdC+0LfQtNCw0L0g0L3QvtGB0LjRgtC10LvRjCIKKworbXNnaWQgImRldmljZSBtb2RlbCIKK21zZ3N0ciAi0LzQvtC00LXQu9GMINGD0YHRgtGA0L7QudGB0YLQstCwIgorCittc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICLQnNC+0LTQtdC70Ywg0YPRgdGC0YDQvtC50YHRgtCy0LAsINC90LAg0LrQvtGC0L7RgNC+0Lwg0YHQvtC30LTQsNC9INC90L7RgdC40YLQtdC70YwiCisKK21zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgorbXNnc3RyICLQuNC80Y8g0L/RgNC40LvQvtC20LXQvdC40Y8iCisKK21zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCittc2dzdHIgItCf0YDQuNC70L7QttC10L3QuNC1INGBINC/0L7QvNC+0YnRjNGOINC60L7RgtC+0YDQvtCz0L4g0YHQvtC30LTQsNC9INC90L7RgdC40YLQtdC70YwiCisKK21zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgorbXNnc3RyICLQtNCw0L3QvdGL0LUg0L/RgNC40LvQvtC20LXQvdC40Y8iCisKK21zZ2lkICJBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIG1lZGlhIgorbXNnc3RyICLQn9GA0L7QuNC30LLQvtC70YzQvdGL0LUg0LTQsNC90L3Ri9C1INC/0YDQuNC70L7QttC10L3QuNGPINC00LvRjyDQv9GA0LXQvtCx0YDQsNC30L7QstCw0L3QuNGPINCyINC00LDQvdC90YvQtSDQvdC+0YHQuNGC0LXQu9GPIgorCittc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCittc2dzdHIgItC+0YDQuNC10L3RgtCw0YbQuNGPINC40LfQvtCx0YDQsNC20LXQvdC40Y8iCisKK21zZ2lkICJIb3cgdGhlIGltYWdlIHNob3VsZCBiZSByb3RhdGVkIG9yIGZsaXBwZWQgYmVmb3JlIGRpc3BsYXkiCittc2dzdHIgItCS0LvQuNGP0LXRgiDQvdCwINCy0YDQsNGJ0LXQvdC40LUg0LjQu9C4INC/0L7QstC+0YDQvtGCINC40LfQvtCx0YDQsNC20LXQvdC40Y8g0L/QtdGA0LXQtCDQv9C+0LrQsNC30L7QvCIKKworbXNnaWQgIiwgIgorbXNnc3RyICIsICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgorbXNnc3RyICLQntCo0JjQkdCa0JA6INC40Lcg0Y3Qu9C10LzQtdC90YLQsCAlczogJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQWRkaXRpb25hbCBkZWJ1ZyBpbmZvOlxuIgorIiVzXG4iCittc2dzdHIgIiIKKyLQlNC+0L/QvtC70L3QuNGC0LXQu9GM0L3QsNGPINC+0YLQu9Cw0LTQvtGH0L3QsNGPINC40L3RhNC+0YDQvNCw0YbQuNGPOlxuIgorIiVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgorbXNnc3RyICLRg9C60LDQt9Cw0L3QvdGL0Lkg0L/Rg9GB0YLQvtC5INC60L7QvdGC0LXQudC90LXRgCDCqyVzwrsg0L3QtdC00L7Qv9GD0YHRgtC40LwiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYmluIFwiJXNcIiwgc2tpcHBpbmciCittc2dzdHIgItC90LUg0L3QsNC50LTQtdC9INC60L7QvdGC0LXQudC90LXRgCDCqyVzwrssINC/0YDQvtC/0YPRgdC6IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiIKK21zZ3N0ciAi0YHQstC+0LnRgdGC0LLQviDCqyVzwrsg0L3QtSDQvdCw0LnQtNC10L3QviDQtNC70Y8g0Y3Qu9C10LzQtdC90YLQsCDCqyVzwrsiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGD0YHRgtCw0L3QvtCy0LjRgtGMINGB0LLQvtC50YHRgtCy0L4gwqslc8K7INGN0LvQtdC80LXQvdGC0LAgwqslc8K7INCyINC30L3QsNGH0LXQvdC40LUgwqslc8K7IgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0L7QtdC00LjQvdC40YLRjCAlcyDQuCAlcyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKK21zZ3N0ciAi0Y3Qu9C10LzQtdC90YIgwqslc8K7INC90LUg0L3QsNC50LTQtdC9IgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtCx0YDQsNCx0L7RgtCw0YLRjCDQstC+0LfQvNC+0LbQvdC+0YHRgtC4IMKrJXPCuyIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIKK21zZ3N0ciAi0L/QvtC/0YvRgtC60LAg0YHQvtC10LTQuNC90LXQvdC40Y8g0LHQtdC3INGN0LvQtdC80LXQvdGC0LAt0LjRgdGC0L7Rh9C90LjQutCwIgorCittc2dpZCAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKK21zZ3N0ciAi0L/QvtC/0YvRgtC60LAg0YHQvtC10LTQuNC90LXQvdC40Y8g0LHQtdC3INGN0LvQtdC80LXQvdGC0LAt0L/RgNC40ZHQvNC90LjQutCwIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNvdXJjZSBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICLQvdC10YIg0Y3Qu9C10LzQtdC90YLQsC3QuNGB0YLQvtGH0L3QuNC60LAg0LTQu9GPIFVSSSDCqyVzwrsiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCB0byBsaW5rIFVSSSBcIiVzXCIgdG8iCittc2dzdHIgItC90LXRgiDRjdC70LXQvNC10L3RgtCwLCDQutC+0YLQvtGA0YvQuSDQvNC+0LbQvdC+INCx0YvQu9C+INCx0Ysg0L/RgNC40YHQvtC10LTQuNC90LjRgtGMINC6IFVSSSDCqyVzwrsiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICLQvdC10YIg0Y3Qu9C10LzQtdC90YLQsC3Qv9GA0LjRkdC80L3QuNC60LAg0LTQu9GPIFVSSSDCqyVzwrsiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxpbmsgc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0L7QtdC00LjQvdC40YLRjCDRjdC70LXQvNC10L3Rgi3Qv9GA0LjRkdC80L3QuNC6INC00LvRjyBVUkkgwqslc8K7IgorCittc2dpZCAiZW1wdHkgcGlwZWxpbmUgbm90IGFsbG93ZWQiCittc2dzdHIgItC/0YPRgdGC0L7QuSDQutC+0L3QstC10LnQtdGAINC90LXQtNC+0L/Rg9GB0YLQuNC8IgorCittc2dpZCAiSW50ZXJuYWwgY2xvY2sgZXJyb3IuIgorbXNnc3RyICLQktC90YPRgtGA0LXQvdC90Y/RjyDQvtGI0LjQsdC60LAg0YHQuNC90YXRgNC+0L3QuNC30LDRhtC40LguIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKK21zZ3N0ciAi0JLQvdGD0YLRgNC10L3QvdGP0Y8g0L7RiNC40LHQutCwINC/0LXRgNC10LTQsNGH0Lgg0LTQsNC90L3Ri9GFLiIKKworbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgorbXNnc3RyICLQnNC90L7Qs9C+0LUg0LjQtyDQsdGD0YTQtdGA0LAg0LHRi9C70L4g0L7RgtCx0YDQvtGI0LXQvdC+LiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBwcm9ibGVtLiIKK21zZ3N0ciAi0JLQvdGD0YLRgNC10L3QvdGP0Y8g0L/RgNC+0LHQu9C10LzQsCDQv9C10YDQtdC00LDRh9C4INC00LDQvdC90YvRhS4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCittc2dzdHIgItCS0L3Rg9GC0YDQtdC90L3Rj9GPINC+0YjQuNCx0LrQsCDQv9C+0YLQvtC60LAg0LTQsNC90L3Ri9GFLiIKKworbXNnaWQgIkZpbHRlciBjYXBzIgorbXNnc3RyICLQpNC40LvRjNGC0YDQvtCy0LDRgtGMINCy0L7Qt9C80L7QttC90L7RgdGC0LgiCisKK21zZ2lkICIiCisiUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCisicHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKK21zZ3N0ciAiIgorItCe0LPRgNCw0L3QuNGH0LjRgtGMINGA0LDQt9GA0LXRiNGR0L3QvdGL0LUg0LLQvtC30LzQvtC20L3QvtGB0YLQuCAoTlVMTCDRgNCw0LLQvdC+0YHQuNC70YzQvdC+IEFOWSkuINCj0YHRgtCw0L3QvtCy0LrQsCDRjdGC0L7Qs9C+ICIKKyLRgdCy0L7QudGB0YLQstCwINGD0LLQtdC70LjRh9C40LLQsNC10YIg0LrQvtC70LjRh9C10YHRgtCy0L4g0YHRgdGL0LvQvtC6INC00LvRjyDQv9GA0LXQtNC+0YHRgtCw0LLQu9C10L3QvdC+0LPQviDQvtCx0YrQtdC60YLQsCBHc3RDYXBzLiIKKworbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHdyaXRpbmcuIgorbXNnc3RyICLQndC1INGD0LrQsNC30LDQvdC+INC40LzRjyDRhNCw0LnQu9CwINC00LvRjyDQt9Cw0L/QuNGB0LguIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDQtNC70Y8g0LfQsNC/0LjRgdC4INGE0LDQudC7IMKrJXPCuy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCittc2dzdHIgItCe0YjQuNCx0LrQsCDQt9Cw0LrRgNGL0YLQuNGPINGE0LDQudC70LAgwqslc8K7LiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAi0J7RiNC40LHQutCwINC/0L7Qt9C40YbQuNC+0L3QuNGA0L7QstCw0L3QuNGPINCyINGE0LDQudC70LUgwqslc8K7LiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAi0J7RiNC40LHQutCwINC30LDQv9C40YHQuCDQsiDRhNCw0LnQuyDCqyVzwrsuIgorCittc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCittc2dzdHIgItCd0LUg0YPQutCw0LfQsNC90L4g0LjQvNGPINGE0LDQudC70LAg0LTQu9GPINGH0YLQtdC90LjRjy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMINGE0LDQudC7IMKrJXPCuyDQtNC70Y8g0YfRgtC10L3QuNGPLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGluZm8gb24gXCIlc1wiLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvRg9GH0LjRgtGMINGB0LLQtdC00LXQvdC40Y8g0LTQu9GPIMKrJXPCuy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiXCIlc1wiIGlzIGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiwqslc8K7INGP0LLQu9GP0LXRgtGB0Y8g0LrQsNGC0LDQu9C+0LPQvtC8LiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFwiJXNcIiBpcyBhIHNvY2tldC4iCittc2dzdHIgItCk0LDQudC7IMKrJXPCuyDRj9Cy0LvRj9C10YLRgdGPINGB0L7QutC10YLQvtC8LiIKKworbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCittc2dzdHIgItCh0LHQvtC5INC/0L7RgdC70LUg0LjRgtC10YDQsNGG0LjQuSwg0YHQvtCz0LvQsNGB0L3QviDQt9Cw0L/RgNC+0YHRgy4iCisKK21zZ2lkICJObyBUZW1wIGRpcmVjdG9yeSBzcGVjaWZpZWQuIgorbXNnc3RyICLQndC1INC30LDQtNCw0L3QsCDQstGA0LXQvNC10L3QvdGL0LkgKFRlbXApINC60LDRgtCw0LvQvtCzLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINCy0YDQtdC80LXQvdC90YvQuSDRhNCw0LnQuyDCqyVzwrsuIgorCittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKK21zZ3N0ciAi0J7RiNC40LHQutCwINC30LDQv9C40YHQuCDQt9Cw0LPRgNGD0LbQsNC10LzQvtCz0L4g0YTQsNC50LvQsC4iCisKK21zZ2lkICJjYXBzIgorbXNnc3RyICLQstC+0LfQvNC+0LbQvdC+0YHRgtC4IgorCittc2dpZCAiZGV0ZWN0ZWQgY2FwYWJpbGl0aWVzIGluIHN0cmVhbSIKK21zZ3N0ciAi0L7QsdC90LDRgNGD0LbQtdC90L3Ri9C1INCy0L7Qt9C80L7QttC90L7RgdGC0Lgg0L/QvtGC0L7QutCwIgorCittc2dpZCAibWluaW11bSIKK21zZ3N0ciAi0LzQuNC90LjQvNGD0LwiCisKK21zZ2lkICJtYXhpbXVtIgorbXNnc3RyICLQvNCw0LrRgdC40LzRg9C8IgorCittc2dpZCAiZm9yY2UgY2FwcyIKK21zZ3N0ciAi0YTQvtGA0YHQuNGA0L7QstCw0YLRjCDQstC+0LfQvNC+0LbQvdC+0YHRgtC4IgorCittc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCittc2dzdHIgItGE0L7RgNGB0LjRgNC+0LLQsNGC0Ywg0LLQvtC30LzQvtC20L3QvtGB0YLQuCDQsdC10Lcg0LLRi9C/0L7Qu9C90LXQvdC40Y8gdHlwZWZpbmQiCisKK21zZ2lkICJTdHJlYW0gY29udGFpbnMgbm8gZGF0YS4iCittc2dzdHIgItCf0L7RgtC+0Log0L3QtSDRgdC+0LTQtdGA0LbQuNGCINC00LDQvdC90YvRhS4iCisKK21zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgorbXNnc3RyICLQoNC10LDQu9C40LfQvtCy0LDQvdC90YvQtSDQuNC90YLQtdGA0YTQtdC50YHRizpcbiIKKworbXNnaWQgInJlYWRhYmxlIgorbXNnc3RyICLRgdGH0LjRgtGL0LLQsNC10LzRi9C5IgorCittc2dpZCAid3JpdGFibGUiCittc2dzdHIgItC30LDQv9C40YHRi9Cy0LDQtdC80YvQuSIKKworbXNnaWQgImNvbnRyb2xsYWJsZSIKK21zZ3N0ciAi0LrQvtC90YLRgNC+0LvQuNGA0YPQtdC80YvQuSIKKworbXNnaWQgImNoYW5nZWFibGUgaW4gTlVMTCwgUkVBRFksIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlIgorbXNnc3RyICLQvNC+0LbQtdGCINCx0YvRgtGMINGA0LDQstC90L4g0YHQvtGB0YLQvtGP0L3QuNGOIE5VTEwsIFJFQURZLCBQQVVTRUQg0LjQu9C4IFBMQVlJTkciCisKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCwgUkVBRFkgb3IgUEFVU0VEIHN0YXRlIgorbXNnc3RyICLQvNC+0LbQtdGCINCx0YvRgtGMINGA0LDQstC90L4g0YLQvtC70YzQutC+INGB0L7RgdGC0L7Rj9C90LjRjiBOVUxMLCBSRUFEWSDQuNC70LggUEFVU0VEIgorCittc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwgb3IgUkVBRFkgc3RhdGUiCittc2dzdHIgItC80L7QttC10YIg0LHRi9GC0Ywg0YDQsNCy0L3QviDRgtC+0LvRjNC60L4g0YHQvtGB0YLQvtGP0L3QuNGOIE5VTEwg0LjQu9C4IFJFQURZIgorCittc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgorbXNnc3RyICLQpNCw0LnQu9GLINC40Lcg0YfRkdGA0L3QvtCz0L4g0YHQv9C40YHQutCwOiIKKworbXNnaWQgIlRvdGFsIGNvdW50OiAiCittc2dzdHIgItCe0LHRidC10LUg0LrQvtC70LjRh9C10YHRgtCy0L46ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgorbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKK21zZ3N0clswXSAiJWQg0YTQsNC50Lsg0LIg0YfRkdGA0L3QvtC8INGB0L/QuNGB0LrQtSIKK21zZ3N0clsxXSAiJWQg0YTQsNC50LvQsCDQsiDRh9GR0YDQvdC+0Lwg0YHQv9C40YHQutC1IgorbXNnc3RyWzJdICIlZCDRhNCw0LnQu9C+0LIg0LIg0YfRkdGA0L3QvtC8INGB0L/QuNGB0LrQtSIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBwbHVnaW4iCittc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCittc2dzdHJbMF0gIiVkINC80L7QtNGD0LvRjCIKK21zZ3N0clsxXSAiJWQg0LzQvtC00YPQu9GPIgorbXNnc3RyWzJdICIlZCDQvNC+0LTRg9C70LXQuSIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBibGFja2xpc3QgZW50cnkiCittc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdCBlbnRyaWVzIgorbXNnc3RyWzBdICIlZCDRjdC70LXQvNC10L3RgiDQsiDRh9GR0YDQvdC+0Lwg0YHQv9C40YHQutC1IgorbXNnc3RyWzFdICIlZCDRjdC70LXQvNC10L3RgtCwINCyINGH0ZHRgNC90L7QvCDRgdC/0LjRgdC60LUiCittc2dzdHJbMl0gIiVkINGN0LvQtdC80LXQvdGC0L7QsiDQsiDRh9GR0YDQvdC+0Lwg0YHQv9C40YHQutC1IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGZlYXR1cmUiCittc2dpZF9wbHVyYWwgIiVkIGZlYXR1cmVzIgorbXNnc3RyWzBdICIlZCDRhNGD0L3QutGG0LjRjyIKK21zZ3N0clsxXSAiJWQg0YTRg9C90LrRhtC40LgiCittc2dzdHJbMl0gIiVkINGE0YPQvdC60YbQuNC5IgorCittc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgorbXNnc3RyICLQktGL0LLQtdGB0YLQuCDQstGB0LUg0Y3Qu9C10LzQtdC90YLRiyIKKworbXNnaWQgIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHIgItCS0YvQstC10YHRgtC4INGE0LDQudC70Ysg0LjQtyDRh9GR0YDQvdC+0LPQviDRgdC/0LjRgdC60LAiCisKK21zZ2lkICIiCisiUHJpbnQgYSBtYWNoaW5lLXBhcnNhYmxlIGxpc3Qgb2YgZmVhdHVyZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4gb3IgYWxsICIKKyJwbHVnaW5zIHByb3ZpZGUuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIGluIGNvbm5lY3Rpb24gd2l0aCBleHRlcm5hbCAiCisiYXV0b21hdGljIHBsdWdpbiBpbnN0YWxsYXRpb24gbWVjaGFuaXNtcyIKK21zZ3N0ciAiIgorItCS0YvQstC10YHRgtC4INC80LDRiNC40L3QvdC+LdGH0LjRgtCw0LXQvNGL0Lkg0YHQv9C40YHQvtC6INGE0YPQvdC60YbQuNC5LCDQv9GA0LXQtNC+0YHRgtCw0LLQu9GP0LXQvNGL0YUg0YPQutCw0LfQsNC90L3Ri9C8INC80L7QtNGD0LvQtdC8ICIKKyLQuNC70Lgg0LzQvtC00YPQu9GP0LzQuC5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDQn9C+0LvQtdC30L3QviDQtNC70Y8g0L/QvtC00LrQu9GO0YfQtdC90LjRjyDQstC90LXRiNC90LjRhSAiCisi0LzQtdGF0LDQvdC40LfQvNC+0LIg0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60L7QuSDRg9GB0YLQsNC90L7QstC60Lgg0LzQvtC00YPQu9C10LkiCisKK21zZ2lkICJMaXN0IHRoZSBwbHVnaW4gY29udGVudHMiCittc2dzdHIgItCS0YvQstC10YHRgtC4INGB0L7QtNC10YDQttC40LzQvtC1INC80L7QtNGD0LvRjyIKKworbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKK21zZ3N0ciAi0JLRi9Cy0LXRgdGC0Lgg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdC80YvQtSDRgdGF0LXQvNGLIFVSSSDQtNC70Y8g0Y3Qu9C10LzQtdC90YLQvtCyLCDQutC+0YLQvtGA0YvQtSDQuNGFINC40YHQv9C+0LvRjNC30YPRjtGCIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC30LDQs9GA0YPQt9C40YLRjCDRhNCw0LnQuyDQvNC+0LTRg9C70Y86IMKrJXPCu1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgorbXNnc3RyICLQnNC+0LTRg9C70Ywg0LjQu9C4INGN0LvQtdC80LXQvdGCIMKrJXPCuyDQvdC1INC90LDQudC00LXQvVxuIgorCittc2dpZCAiSW5kZXggc3RhdGlzdGljcyIKK21zZ3N0ciAi0JjQvdC00LXQutGB0L3QsNGPINGB0YLQsNGC0LjRgdGC0LjQutCwIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIGVsZW1lbnQgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAi0J/QvtC70YPRh9C10L3QviDRgdC+0L7QsdGJ0LXQvdC40LUgIyV1INC+0YIg0Y3Qu9C10LzQtdC90YLQsCDCqyVzwrsgKCVzKTogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIHBhZCBcIiVzOiVzXCIgKCVzKTogIgorbXNnc3RyICLQn9C+0LvRg9GH0LXQvdC+INGB0L7QvtCx0YnQtdC90LjQtSAjJXUg0L7RgiDQutC+0L3RgtCw0LrRgtC90L7Qs9C+INCz0L3QtdC30LTQsCDCqyVzOiVzwrsgKCVzKTogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICLQn9C+0LvRg9GH0LXQvdC+INGB0L7QvtCx0YnQtdC90LjQtSAjJXUg0L7RgiDQvtCx0YrQtdC60YLQsCDCqyVzwrsgKCVzKTogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSAoJXMpOiAiCittc2dzdHIgItCf0L7Qu9GD0YfQtdC90L4g0YHQvtC+0LHRidC10L3QuNC1ICMldSAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIgorbXNnc3RyICLQn9C+0LvRg9GH0LXQvSDQvNCw0YDQutC10YAgRU9TICjCq9C60L7QvdC10YYg0L/QvtGC0L7QutCwwrspINC+0YIg0Y3Qu9C10LzQtdC90YLQsCDCqyVzwrsuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKK21zZ3N0ciAi0J3QkNCZ0JTQldCdINCi0JXQkzog0L3QsNC50LTQtdC9INGN0LvQtdC80LXQvdGC0L7QvCDCqyVzwrsuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBwYWQgXCIlczolc1wiLlxuIgorbXNnc3RyICLQndCQ0JnQlNCV0J0g0KLQldCTOiDQvdCw0LnQtNC10L0g0LrQvtC90YLQsNC60YLQvdGL0Lwg0LPQvdC10LfQtNC+0Lwgwqslczolc8K7LlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKK21zZ3N0ciAi0J3QkNCZ0JTQldCdINCi0JXQkzog0L3QsNC50LTQtdC9INC+0LHRitC10LrRgtC+0Lwgwqslc8K7LlxuIgorCittc2dpZCAiRk9VTkQgVEFHXG4iCittc2dzdHIgItCd0JDQmdCU0JXQnSDQotCV0JNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSU5GTzpcbiIKKyIlc1xuIgorbXNnc3RyICIiCisi0JjQndCk0J7QoNCc0JDQptCY0K86XG4iCisiJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCittc2dzdHIgItCf0KDQldCU0KPQn9Cg0JXQltCU0JXQndCY0JU6INC+0YIg0Y3Qu9C10LzQtdC90YLQsCAlczogJXNcbiIKKworbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgorbXNnc3RyICLQmtC+0L3QstC10LnQtdGAINC/0L7QtNCz0L7RgtC+0LLQu9C10L0sINC+0LbQuNC00LDQtdGC0YHRjyDQt9Cw0LLQtdGA0YjQtdC90LjQtSDQsdGD0YTQtdGA0LjQt9Cw0YbQuNC4Li4uXG4iCisKK21zZ2lkICJidWZmZXJpbmcuLi4iCittc2dzdHIgItCx0YPRhNC10YDQuNC30LDRhtC40Y8uLi4iCisKK21zZ2lkICJEb25lIGJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgorbXNnc3RyICLQkdGD0YTQtdGA0LjQt9Cw0YbQuNGPINC30LDQstC10YDRiNC10L3QsCwg0LrQvtC90LLQtdC50LXRgCDQv9C10YDQtdCy0LXQtNGR0L0g0LIg0YHQvtGB0YLQvtGP0L3QuNC1IFBMQVlJTkcuLi5cbiIKKworbXNnaWQgIkJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCittc2dzdHIgItCY0LTRkdGCINCx0YPRhNC10YDQuNC30LDRhtC40Y8sINC60L7QvdCy0LXQudC10YAg0L/QtdGA0LXQstC10LTRkdC9INCyINGB0L7RgdGC0L7Rj9C90LjQtSBQQVVTRUQuLi5cbiIKKworbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCittc2dzdHIgItCf0LXRgNC10YDQsNGB0L/RgNC10LTQtdC70LXQvdC40LUg0LvQsNGC0LXQvdGC0L3QvtGB0YLQuC4uLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iCittc2dzdHIgItCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGC0YHRjyDRgdC+0YHRgtC+0Y/QvdC40LUgJXMsINC30LDQv9GA0L7RiNC10L3QvdC+0LUgJXMuLi5cbiIKKworbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCittc2dzdHIgItCf0YDQtdGA0YvQstCw0L3QuNC1OiDQntGB0YLQsNC90L7QstC60LAg0LrQvtC90LLQtdC50LXRgNCwLi4uXG4iCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKK21zZ3N0ciAi0Y3Qu9C10LzQtdC90YIgwqslc8K7INC90LUg0L3QsNC50LTQtdC9IgorCittc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgorbXNnc3RyICLQktGL0LLQvtC00LjRgtGMINGC0LXQs9C4ICjQvNC10YLQsNC00LDQvdC90YvQtSkiCisKK21zZ2lkICJPdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBwcm9wZXJ0eSBub3RpZmljYXRpb25zIgorbXNnc3RyICLQktGL0LLQvtC00LjRgtGMINC40L3RhNC+0YDQvNCw0YbQuNGOINC+INGB0L7RgdGC0L7Rj9C90LjQuCDQuCDRg9Cy0LXQtNC+0LzQu9C10L3QuNGPINC+INGB0LLQvtC50YHRgtCy0LDRhSIKKworbXNnaWQgIkRvIG5vdCBwcmludCBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24iCittc2dzdHIgItCd0LUg0LLRi9Cy0L7QtNC40YLRjCDQuNC90YTQvtGA0LzQsNGG0LjRjiDQviDRhdC+0LTQtSDQstGL0L/QvtC70L3QtdC90LjRjyIKKworbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKK21zZ3N0ciAi0JLRi9Cy0L7QtNC40YLRjCDRgdC+0L7QsdGJ0LXQvdC40Y8iCisKK21zZ2lkICJEbyBub3Qgb3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBvZiBUWVBFIgorbXNnc3RyICLQndC1INCy0YvQstC+0LTQuNGC0Ywg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L4g0YHQvtGB0YLQvtGP0L3QuNC4INCi0JjQn9CQIgorCittc2dpZCAiVFlQRTEsVFlQRTIsLi4uIgorbXNnc3RyICLQotCY0J8xLCDQotCY0J8yLC4uLiIKKworbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKK21zZ3N0ciAi0J3QtSDRg9GB0YLQsNC90LDQstC70LjQstCw0YLRjCDQvtCx0YDQsNCx0L7RgtGH0LjQuiDQvtGI0LjQsdC+0LoiCisKK21zZ2lkICJQcmludCBhbGxvYyB0cmFjZSAoaWYgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUpIgorbXNnc3RyICLQktGL0LLQtdGB0YLQuCDRgtGA0LDRgdGB0LjRgNC+0LLQutGDINCy0YvQtNC10LvQtdC90LjRjyDQv9Cw0LzRj9GC0LggKNC10YHQu9C4INCy0LrQu9GO0YfQtdC90L4g0L/RgNC4INGB0LHQvtGA0LrQtSkiCisKK21zZ2lkICJGb3JjZSBFT1Mgb24gc291cmNlcyBiZWZvcmUgc2h1dHRpbmcgdGhlIHBpcGVsaW5lIGRvd24iCittc2dzdHIgItCS0YvQtNCw0YLRjCBFT1Mg0LIg0LjRgdGC0L7Rh9C90LjQutC4INC/0LXRgNC10LQg0LfQsNC60YDRi9GC0LjQtdC8INC60L7QvdCy0LXQudC10YDQsCIKKworbXNnaWQgIkdhdGhlciBhbmQgcHJpbnQgaW5kZXggc3RhdGlzdGljcyIKK21zZ3N0ciAi0KHQvtCx0YDQsNGC0Ywg0Lgg0LLRi9Cy0LXRgdGC0Lgg0LjQvdC00LXQutGB0L3Rg9GOINGB0YLQsNGC0LjRgdGC0LjQutGDIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQ6ICVzLlxuIgorbXNnc3RyICLQntCo0JjQkdCa0JA6INC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtCx0YDQsNGC0Ywg0LrQvtC90LLQtdC50LXRgDogJXMuXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlxuIgorbXNnc3RyICLQntCo0JjQkdCa0JA6INC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtCx0YDQsNGC0Ywg0LrQvtC90LLQtdC50LXRgC5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCittc2dzdHIgItCf0KDQldCU0KPQn9Cg0JXQltCU0JXQndCY0JU6INC+0YjQuNCx0L7Rh9C90YvQuSDQutC+0L3QstC10LnQtdGAOiAlc1xuIgorCittc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgorbXNnc3RyICLQntCo0JjQkdCa0JA6INC90LUg0L3QsNC50LTQtdC9INGN0LvQtdC80LXQvdGCIMKrcGlwZWxpbmXCuy5cbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgorbXNnc3RyICLQo9GB0YLQsNC90L7QstC60LAg0LrQvtC90LLQtdC50LXRgNCwINCyINGB0L7RgdGC0L7Rj9C90LjQtSBQQVVTRUQuLi5cbiIKKworbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCittc2dzdHIgItCe0KjQmNCR0JrQkDog0JrQvtC90LLQtdC50LXRgCDQvdC1INGF0L7Rh9C10YIg0YHRgtCw0L3QvtCy0LjRgtGM0YHRjyDQvdCwINC/0LDRg9C30YMuXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCittc2dzdHIgItCa0L7QvdCy0LXQudC10YAg0YDQsNCx0L7RgtCw0LXRgiDQuCDQvdC1INGC0YDQtdCx0YPQtdGCINGB0L7RgdGC0L7Rj9C90LjRjyBQUkVST0xMLi4uXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMSU5HIC4uLlxuIgorbXNnc3RyICLQn9C+0LTQs9C+0YLQvtCy0LrQsCDQutC+0L3QstC10LnQtdGA0LAgKFBSRVJPTEwpLi4uXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHByZXJvbGwuXG4iCittc2dzdHIgItCe0KjQmNCR0JrQkDog0LrQvtC90LLQtdC50LXRgCDQvdC1INGF0L7Rh9C10YIg0L/QvtC00LPQvtGC0LDQstC70LjQstCw0YLRjNGB0Y8gKFBSRVJPTEwpLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgorbXNnc3RyICLQmtC+0L3QstC10LnQtdGAINC/0L7QtNCz0L7RgtC+0LLQu9C10L0gKFBSRVJPTExFRCkuLi5cbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKK21zZ3N0ciAi0KPRgdGC0LDQvdC+0LLQutCwINC60L7QvdCy0LXQudC10YDQsCDQsiDRgdC+0YHRgtC+0Y/QvdC40LUgUExBWUlORy4uLlxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIgorbXNnc3RyICLQntCo0JjQkdCa0JA6INC60L7QvdCy0LXQudC10YAg0L3QtSDRhdC+0YfQtdGCINCy0L7RgdC/0YDQvtC40LfQstC+0LTQuNGC0YwuXG4iCisKK21zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKK21zZ3N0ciAi0JLQutC70Y7Rh9GR0L0gRU9TINC/0YDQuCDQt9Cw0LrRgNGL0YLQuNC4IC0tINCS0YvQtNCw0YfQsCBFT1Mg0LIg0LrQvtC90LLQtdC50LXRgFxuIgorCittc2dpZCAiV2FpdGluZyBmb3IgRU9TLi4uXG4iCittc2dzdHIgItCe0LbQuNC00LDQvdC40LUgRU9TLi4uXG4iCisKK21zZ2lkICJFT1MgcmVjZWl2ZWQgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgorbXNnc3RyICLQn9C+0LvRg9GH0LXQvSBFT1MgLSDQvtGB0YLQsNC90L7QstC60LAg0LrQvtC90LLQtdC50LXRgNCwLi4uXG4iCisKK21zZ2lkICJBbiBlcnJvciBoYXBwZW5lZCB3aGlsZSB3YWl0aW5nIGZvciBFT1NcbiIKK21zZ3N0ciAi0JLQviDQstGA0LXQvNGPINC+0LbQuNC00LDQvdC40Y8gRU9TINC/0YDQvtC40LfQvtGI0LvQsCDQvtGI0LjQsdC60LBcbiIKKworbXNnaWQgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgorbXNnc3RyICLQktGL0L/QvtC70L3QtdC90LjQtSDQvtC60L7QvdGH0LXQvdC+INC/0L7RgdC70LUgJSIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUkVBRFkgLi4uXG4iCittc2dzdHIgItCj0YHRgtCw0L3QvtCy0LrQsCDQutC+0L3QstC10LnQtdGA0LAg0LIg0YHQvtGB0YLQvtGP0L3QuNC1IFJFQURZLi4uXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIE5VTEwgLi4uXG4iCittc2dzdHIgItCj0YHRgtCw0L3QvtCy0LrQsCDQutC+0L3QstC10LnQtdGA0LAg0LIg0YHQvtGB0YLQvtGP0L3QuNC1IE5VTEwuLi5cbiIKKworbXNnaWQgIkZyZWVpbmcgcGlwZWxpbmUgLi4uXG4iCittc2dzdHIgItCe0YHQstC+0LHQvtC20LTQtdC90LjQtSDQutC+0L3QstC10LnQtdGA0LAuLi5cbiIKKworI34gbXNnaWQgIlVzYWdlOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLiBdXG4iCisjfiBtc2dzdHIgIiIKKyN+ICLQmNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtTogZ3N0LXhtbGxhdW5jaCA80YTQsNC50LsueG1sPiBbINGN0LvQtdC80LXQvdGCLtGB0LLQvtC50YHRgtCy0L490LfQvdCw0YfQtdC90LjQtS4uLl1cbiIKKworI34gbXNnaWQgIkVSUk9SOiBwYXJzZSBvZiB4bWwgZmlsZSAnJXMnIGZhaWxlZC5cbiIKKyN+IG1zZ3N0ciAi0J7QqNCY0JHQmtCQOiDQvtGI0LjQsdC60LAg0YDQsNC30LHQvtGA0LAgeG1sLdGE0LDQudC70LAgwqslc8K7LlxuIgorCisjfiBtc2dpZCAiRVJST1I6IG5vIHRvcGxldmVsIHBpcGVsaW5lIGVsZW1lbnQgaW4gZmlsZSAnJXMnLlxuIgorI34gbXNnc3RyICLQntCo0JjQkdCa0JA6INCyINGE0LDQudC70LUgwqslc8K7INC+0YLRgdGD0YLRgdGC0LLRg9C10YIg0LPQu9Cw0LLQvdGL0Lkg0Y3Qu9C10LzQtdC90YIg0LrQvtC90LLQtdC50LXRgNCwLlxuIgorCisjfiBtc2dpZCAiV0FSTklORzogb25seSBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLlxuIgorI34gbXNnc3RyICIiCisjfiAi0J/QoNCV0JTQo9Cf0KDQldCW0JTQldCd0JjQlTog0LIg0LTQsNC90L3Ri9C5INC80L7QvNC10L3RgiDQv9C+0LTQtNC10YDQttC40LLQsNC10YLRgdGPINGC0L7Qu9GM0LrQviDQvtC00LjQvSDQs9C70LDQstC90YvQuSAiCisjfiAi0Y3Qu9C10LzQtdC90YIuXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogY291bGQgbm90IHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAlZDogJXMuXG4iCisjfiBtc2dzdHIgItCe0KjQmNCR0JrQkDog0L7RiNC40LHQutCwINC+0LHRgNCw0LHQvtGC0LrQuCDQsNGA0LPRg9C80LXQvdGC0LAg0LrQvtC80LDQvdC00L3QvtC5INGB0YLRgNC+0LrQuCAlZDogJXMuXG4iCisKKyN+IG1zZ2lkICJXQVJOSU5HOiBlbGVtZW50IG5hbWVkICclcycgbm90IGZvdW5kLlxuIgorI34gbXNnc3RyICLQn9Cg0JXQlNCj0J/QoNCV0JbQlNCV0J3QmNCVOiDRjdC70LXQvNC10L3RgiDRgSDQuNC80LXQvdC10Lwgwqslc8K7INC90LUg0L3QsNC50LTQtdC9LlxuIgorCisjfiBtc2dpZCAiU2F2ZSB4bWwgcmVwcmVzZW50YXRpb24gb2YgcGlwZWxpbmUgdG8gRklMRSBhbmQgZXhpdCIKKyN+IG1zZ3N0ciAi0KHQvtGF0YDQsNC90LjRgtGMINC60L7QvdCy0LXQudC10YAg0LIgWE1MLdGE0LDQudC7INC4INCy0YvQudGC0LgiCisKKyN+IG1zZ2lkICJGSUxFIgorI34gbXNnc3RyICLQpNCQ0JnQmyIKKworI34gbXNnaWQgIkRvIG5vdCBpbnN0YWxsIHNpZ25hbCBoYW5kbGVycyBmb3IgU0lHVVNSMSBhbmQgU0lHVVNSMiIKKyN+IG1zZ3N0ciAi0J3QtSDRg9GB0YLQsNC90LDQstC70LjQstCw0YLRjCDQvtCx0YDQsNCx0L7RgtGH0LjQutC4INGB0LjQs9C90LDQu9C+0LIgU0lHVVNSMSDQuCBTSUdVU1IyIgorCisjfiBtc2dpZCAiRXJyb3Igd3JpdGluZyByZWdpc3RyeSBjYWNoZSB0byAlczogJXMiCisjfiBtc2dzdHIgItCe0YjQuNCx0LrQsCDQt9Cw0L/QuNGB0Lgg0LrRjdGI0LAg0YDQtdC10YHRgtGA0LAg0LIgJXM6ICVzIgorCisjfiBtc2dpZCAiRXJyb3IgcmUtc2Nhbm5pbmcgcmVnaXN0cnkgJXM6ICVzIgorI34gbXNnc3RyICLQntGI0LjQsdC60LAg0L/QvtCy0YLQvtGA0L3QvtCz0L4g0YHQutCw0L3QuNGA0L7QstCw0L3QuNGPINGA0LXQtdGB0YLRgNCwICVzOiAlcyIKKworI34gbXNnaWQgIkVycm9yIHJlLXNjYW5uaW5nIHJlZ2lzdHJ5ICVzIgorI34gbXNnc3RyICLQntGI0LjQsdC60LAg0L/QvtCy0YLQvtGA0L3QvtCz0L4g0YHQutCw0L3QuNGA0L7QstCw0L3QuNGPINGA0LXQtdGB0YLRgNCwICVzIgorCisjfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkLiIKKyN+IG1zZ3N0ciAi0JLQvdGD0YLRgNC10L3QvdGP0Y8g0L7RiNC40LHQutCwIEdTdHJlYW1lcjog0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC80LXQvdC40YLRjCDRgdC+0YHRgtC+0Y/QvdC40LUuIgorCisjfiBtc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIGRlc2NyaXB0b3IgXCIlZFwiLiIKKyN+IG1zZ3N0ciAi0J7RiNC40LHQutCwINC30LDQv9C40YHQuCDQsiDQtNC10YHQutGA0LjQv9GC0L7RgCDRhNCw0LnQu9CwIMKrJWTCuy4iCisKKyN+IG1zZ2lkICJGaWxlIGRlc2NyaXB0b3IgXCIlZFwiIGlzIG5vdCB2YWxpZC4iCisjfiBtc2dzdHIgItCU0LXRgdC60YDQuNC/0YLQvtGAINGE0LDQudC70LAgwqslZMK7INC90LXQtNC10LnRgdGC0LLQuNGC0LXQu9C10L0uIgorCisjfiBtc2dpZCAiRlJFRUlORyBwaXBlbGluZSAuLi5cbiIKKyN+IG1zZ3N0ciAi0J7RgdCy0L7QsdC+0LbQtNC10L3QuNC1INC60L7QvdCy0LXQudC10YDQsC4uLlxuIgorCisjfiBtc2dpZCAib3JpZ2luYWwgbG9jYXRpb24gb2YgZmlsZSBhcyBhIFVSSSIKKyN+IG1zZ3N0ciAi0L7RgNC40LPQuNC90LDQu9GM0L3QvtC1INGA0LDRgdC/0L7Qu9C+0LbQtdC90LjQtSDRhNCw0LnQu9CwINCyINCy0LjQtNC1IFVSSSIKKworI34gbXNnaWQgIkRpc2FibGUgYWNjZWxlcmF0ZWQgQ1BVIGluc3RydWN0aW9ucyIKKyN+IG1zZ3N0ciAi0J7RgtC60LvRjtGH0LjRgtGMINGB0L/QtdGG0LjRhNC40YfQtdGB0LrQuNC1INC60L7QvNCw0L3QtNGLINC/0YDQvtGG0LXRgdGB0L7RgNCwIgorCisjfiBtc2dpZCAiU0NIRURVTEVSIgorI34gbXNnc3RyICLQn9Cb0JDQndCY0KDQntCS0KnQmNCaIgorCisjfiBtc2dpZCAicGF0aCBsaXN0IGZvciBsb2FkaW5nIHBsdWdpbnMgKHNlcGFyYXRlZCBieSAnJXMnKSIKKyN+IG1zZ3N0ciAi0YHQv9C40YHQvtC6INC/0YPRgtC10Lkg0LTQu9GPINC30LDQs9GA0YPQt9C60Lgg0YDQsNGB0YjQuNGA0LXQvdC40LkgKNGA0LDQt9C00LXQu9C10L3QvdGL0YUgJyVzJykiCisKKyN+IG1zZ2lkICJTY2hlZHVsZXIgdG8gdXNlIChkZWZhdWx0IGlzICclcycpIgorI34gbXNnc3RyICLQn9C70LDQvdC40YDQvtCy0YnQuNC6INC00LvRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjyAo0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4gLSAgJyVzJykiCisKKyN+IG1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNjaGVkdWxlciBwcm9ibGVtLiAgRmlsZSBhIGJ1Zy4iCisjfiBtc2dzdHIgIiIKKyN+ICLQktC90YPRgtGA0LXQvdC90Y/RjyDQvtGI0LjQsdC60LAgR1N0cmVhbWVyOiDQv9GA0L7QsdC70LXQvNCwINGBINC/0LvQsNC90LjRgNC+0LLRidC40LrQvtC8LiAg0J7RgtC/0YDQsNCy0YzRgtC1ICIKKyN+ICLRgdC+0L7QsdGJ0LXQvdC40LUg0L7QsSDQvtGI0LjQsdC60LUuIgorCisjfiBtc2dpZCAiIgorI34gIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlcyBpdGVyYXRpb25zIChzdW0gJXMgbnMsIGF2ZXJhZ2UgJXMgbnMsIG1pbiAlcyBucywgIgorI34gIm1heCAlcyBucykuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICLQktGL0L/QvtC70L3QtdC90LjQtSDQt9Cw0LLQtdGA0YjQuNC70L7RgdGMINC/0L7RgdC70LUgJXMg0LjRgtC10YDQsNGG0LjQuSAo0LLRgdC10LPQviAlcyBucywg0YHRgNC10LTQvdC10LUgJXMgbnMsICIKKyN+ICLQvNC40L3QuNC80YPQvCAlcyBucywg0LzQsNC60YHQuNC80YPQvCAlcyBucykuXG4iCisKKyN+IG1zZ2lkICIgICAgICAgICBUcnlpbmcgdG8gcnVuIGFueXdheS5cbiIKKyN+IG1zZ3N0ciAiICAgICAgICAg0JLRgdC1INGA0LDQstC90L4g0L/Ri9GC0LDRjtGB0Ywg0LfQsNC/0YPRgdGC0LjRgtGMLlxuIgorCisjfiBtc2dpZCAiQWRkZWQgcGx1Z2luICVzIHdpdGggJWQgJXMuXG4iCisjfiBtc2dzdHIgItCU0L7QsdCw0LLQu9C10L3QviDRgNCw0YHRiNC40YDQtdC90LjQtSAlcyDRgSAlZCAlcy5cbiIKKworI34gbXNnaWQgIkFkZGVkIHBhdGggICAlcyB0byAlcyBcbiIKKyN+IG1zZ3N0ciAi0JTQvtCx0LDQstC70LXQvSDQv9GD0YLRjCAgICVzINC6ICVzIFxuIgorCisjfiBtc2dpZCAiVHJ5aW5nIHRvIGxvYWQgJXMgLi4uXG4iCisjfiBtc2dzdHIgItCf0YvRgtCw0Y7RgdGMINC30LDQs9GA0YPQt9C40YLRjCAlcyAuLi5cbiIKKworI34gbXNnaWQgIkVycm9yIGxvYWRpbmcgJXNcbiIKKyN+IG1zZ3N0ciAi0J7RiNC40LHQutCwINC30LDQs9GA0YPQt9C60LggJXNcbiIKKworI34gbXNnaWQgIkxvYWRlZCAlZCBwbHVnaW5zIHdpdGggJWQgJXMuXG4iCisjfiBtc2dzdHIgItCX0LDQs9GA0YPQttC10L3QviAlZCDRgNCw0YHRiNC40YDQtdC90LjQuSDRgSAlZCAlcy5cbiIKZGlmZiAtLWdpdCBhL3BvL3J3LmdtbyBiL3BvL3J3LmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTVmNTkzCi0tLSAvZGV2L251bGwKKysrIGIvcG8vcncuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL3J3LnBvIGIvcG8vcncucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAxNmMxZQotLS0gL2Rldi9udWxsCisrKyBiL3BvL3J3LnBvCkBAIC0wLDAgKzEsMTQ5NiBAQAorIyBLaW55YXJ3YW5kYSB0cmFuc2xhdGlvbnMgZm9yIGdzdHJlYW1lciBwYWNrYWdlLgorIyBDb3B5cmlnaHQgKEMpIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFN0ZXZlIE11cnBoeSA8bXVyZkBlLXRvb2xzLmNvbT4sIDIwMDUuCisjIFN0ZXZlIHBlcmZvcm1lZCBpbml0aWFsIHJvdWdoIHRyYW5zbGF0aW9uIGZyb20gY29tcGVuZGl1bSBidWlsdCBmcm9tIHRyYW5zbGF0aW9ucyBwcm92aWRlZCBieSB0aGUgZm9sbG93aW5nIHRyYW5zbGF0b3JzOgorIyBQaGlsaWJlcnQgTmRhbmRhbGkgIDxuZGFuZGFsaUB5YWhvby5mcj4sIDIwMDUuCisjIFZpYXRldXIgTVVHRU5aSSA8bXV2aWExQHlhaG9vLmZyPiwgMjAwNS4KKyMgTm/Dq2xsYSBNdXBvbGUgPHMyNDIxMTA0NUB0dWtzLmNvLnphPiwgMjAwNS4KKyMgQ2Fyb2xlIEthcmVtYSA8a2FyZW1hY2Fyb2xlQGhvdG1haWwuY29tPiwgMjAwNS4KKyMgSkVBTiBCQVBUSVNURSBOR0VOREFIQVlPIDxuZ2VuZGFfZGVuaXNAeWFob28uY28udWs+LCAyMDA1LgorIyBBdWd1c3RpbiBLSUJFUldBICA8YWtpYmVyd2FAeWFob28uY28udWs+LCAyMDA1LgorIyBEb25hdGllbiBOU0VOR0lZVU1WQSA8bmRvbmF0aWVudWtAeWFob28uY28udWs+LCAyMDA1LgorIyBBbnRvaW5lIEJpZ2lyaW1hbmEgPGFudG9pbmVAZS10b29scy5jb20+LCAyMDA1LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDAuOC44XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDktMjkgMTQ6NTUrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDUtMDQtMDQgMTA6NTUtMDcwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogU3RldmVuIE1pY2hhZWwgTXVycGh5IDxtdXJmQGUtdG9vbHMuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IEtpbnlhcndhbmRhIDx0cmFuc2xhdGlvbi10ZWFtLXJ3QGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJMYW5ndWFnZTogcndcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKworIywgZnV6enkKK21zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCittc2dzdHIgImkgVmVyaXNpeW8iCisKKyMsIGZ1enp5Cittc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCittc2dzdHIgIkJ5b3NlIElidXJpcmEiCisKKyMsIGZ1enp5Cittc2dpZCAiUHJpbnQgYXZhaWxhYmxlIGRlYnVnIGNhdGVnb3JpZXMgYW5kIGV4aXQiCittc2dzdHIgIkJpaGFyaSBLb3NvcmEgYW1ha29zYSBJYnlpY2lybyBOYSBHdXNvaG9rYSIKKworIywgZnV6enkKK21zZ2lkICIiCisiRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmcm9tIDEgKG9ubHkgZXJyb3IpIHRvIDUgKGFueXRoaW5nKSBvciAwIGZvciBubyBvdXRwdXQiCittc2dzdHIgIiIKKyJLb3NvcmEgYW1ha29zYSB1cndlZ28gQml2dXllIDEuIElrb3NhIEt1cmkgNSBDeWFuZ3dhIDAga3VnaXJhbmdvIE95YSAiCisiSWJpc29ob2thIgorCisjICMtIy0jLSMtIyAgb2ZmaWNlY2ZnLnBvdCAoUEFDS0FHRSBWRVJTSU9OKSAgIy0jLSMtIy0jCisjIG9mZmljZWNmZy9yZWdpc3RyeVxzY2hlbWFcb3JnXG9wZW5vZmZpY2VcT2ZmaWNlXFdyaXRlci54Y3M6Li4uLkluc2VydC5DYXB0aW9uLldyaXRlck9iamVjdC5UYWJsZS5TZXR0aW5ncy5MZXZlbC50ZXh0CisjICMtIy0jLSMtIyAgb2ZmaWNlY2ZnLnBvdCAoUEFDS0FHRSBWRVJTSU9OKSAgIy0jLSMtIy0jCisjIG9mZmljZWNmZy9yZWdpc3RyeVxzY2hlbWFcb3JnXG9wZW5vZmZpY2VcT2ZmaWNlXFdyaXRlci54Y3M6Li4uLkluc2VydC5DYXB0aW9uLldyaXRlck9iamVjdC5GcmFtZS5TZXR0aW5ncy5MZXZlbC50ZXh0CisjICMtIy0jLSMtIyAgb2ZmaWNlY2ZnLnBvdCAoUEFDS0FHRSBWRVJTSU9OKSAgIy0jLSMtIy0jCisjIG9mZmljZWNmZy9yZWdpc3RyeVxzY2hlbWFcb3JnXG9wZW5vZmZpY2VcT2ZmaWNlXFdyaXRlci54Y3M6Li4uLkluc2VydC5DYXB0aW9uLldyaXRlck9iamVjdC5HcmFwaGljLlNldHRpbmdzLkxldmVsLnRleHQKKyMgIy0jLSMtIy0jICBvZmZpY2VjZmcucG90IChQQUNLQUdFIFZFUlNJT04pICAjLSMtIy0jLSMKKyMgb2ZmaWNlY2ZnL3JlZ2lzdHJ5XHNjaGVtYVxvcmdcb3Blbm9mZmljZVxPZmZpY2VcV3JpdGVyLnhjczouLi4uSW5zZXJ0LkNhcHRpb24uT2ZmaWNlT2JqZWN0LkNhbGMuU2V0dGluZ3MuTGV2ZWwudGV4dAorIyAjLSMtIy0jLSMgIG9mZmljZWNmZy5wb3QgKFBBQ0tBR0UgVkVSU0lPTikgICMtIy0jLSMtIworIyBvZmZpY2VjZmcvcmVnaXN0cnlcc2NoZW1hXG9yZ1xvcGVub2ZmaWNlXE9mZmljZVxXcml0ZXIueGNzOi4uLi5JbnNlcnQuQ2FwdGlvbi5PZmZpY2VPYmplY3QuRHJhdy5TZXR0aW5ncy5MZXZlbC50ZXh0CisjICMtIy0jLSMtIyAgb2ZmaWNlY2ZnLnBvdCAoUEFDS0FHRSBWRVJTSU9OKSAgIy0jLSMtIy0jCisjIG9mZmljZWNmZy9yZWdpc3RyeVxzY2hlbWFcb3JnXG9wZW5vZmZpY2VcT2ZmaWNlXFdyaXRlci54Y3M6Li4uLkluc2VydC5DYXB0aW9uLk9mZmljZU9iamVjdC5DaGFydC5TZXR0aW5ncy5MZXZlbC50ZXh0CisjICMtIy0jLSMtIyAgb2ZmaWNlY2ZnLnBvdCAoUEFDS0FHRSBWRVJTSU9OKSAgIy0jLSMtIy0jCisjIG9mZmljZWNmZy9yZWdpc3RyeVxzY2hlbWFcb3JnXG9wZW5vZmZpY2VcT2ZmaWNlXFdyaXRlci54Y3M6Li4uLkluc2VydC5DYXB0aW9uLk9mZmljZU9iamVjdC5JbWFnZS5TZXR0aW5ncy5MZXZlbC50ZXh0CisjICMtIy0jLSMtIyAgb2ZmaWNlY2ZnLnBvdCAoUEFDS0FHRSBWRVJTSU9OKSAgIy0jLSMtIy0jCisjIG9mZmljZWNmZy9yZWdpc3RyeVxzY2hlbWFcb3JnXG9wZW5vZmZpY2VcT2ZmaWNlXFdyaXRlci54Y3M6Li4uLkluc2VydC5DYXB0aW9uLk9mZmljZU9iamVjdC5Gb3JtdWxhLlNldHRpbmdzLkxldmVsLnRleHQKKyMgIy0jLSMtIy0jICBvZmZpY2VjZmcucG90IChQQUNLQUdFIFZFUlNJT04pICAjLSMtIy0jLSMKKyMgb2ZmaWNlY2ZnL3JlZ2lzdHJ5XHNjaGVtYVxvcmdcb3Blbm9mZmljZVxPZmZpY2VcV3JpdGVyLnhjczouLi4uSW5zZXJ0LkNhcHRpb24uT2ZmaWNlT2JqZWN0LkltcHJlc3MuU2V0dGluZ3MuTGV2ZWwudGV4dAorIyAjLSMtIy0jLSMgIG9mZmljZWNmZy5wb3QgKFBBQ0tBR0UgVkVSU0lPTikgICMtIy0jLSMtIworIyBvZmZpY2VjZmcvcmVnaXN0cnlcc2NoZW1hXG9yZ1xvcGVub2ZmaWNlXE9mZmljZVxXcml0ZXIueGNzOi4uLi5JbnNlcnQuQ2FwdGlvbi5PZmZpY2VPYmplY3QuT0xFTWlzYy5TZXR0aW5ncy5MZXZlbC50ZXh0CisjLCBmdXp6eQorbXNnaWQgIkxFVkVMIgorbXNnc3RyICJ1cndlZ28iCisKKyMsIGZ1enp5Cittc2dpZCAiIgorIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5X25hbWU6bGV2ZWwgcGFpcnMgdG8gc2V0IHNwZWNpZmljIGxldmVscyBmb3IgIgorInRoZSBpbmRpdmlkdWFsIGNhdGVnb3JpZXMuIEV4YW1wbGU6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKK21zZ3N0ciAiIgorIlVydXRvbmRlIEJ5YSBJemluYSByeSdpY3lpY2lybyB1cndlZ28gS3VyaSBHdXNoeWlyYWhvIEludGVyYSBrdWdpcmFuZ28gaSAiCisiSWJ5aWNpcm8gVXJ1Z2VybyA1IDMuIgorCisjICMtIy0jLSMtIyAgb2ZmaWNlY2ZnLnBvdCAoUEFDS0FHRSBWRVJTSU9OKSAgIy0jLSMtIy0jCisjIG9mZmljZWNmZy9yZWdpc3RyeVxzY2hlbWFcb3JnXG9wZW5vZmZpY2VcT2ZmaWNlXFdyaXRlci54Y3M6Li4uLkRlZmF1bHRGb250Lkxpc3QudGV4dAorIyAjLSMtIy0jLSMgIG9mZmljZWNmZy5wb3QgKFBBQ0tBR0UgVkVSU0lPTikgICMtIy0jLSMtIworIyBvZmZpY2VjZmcvcmVnaXN0cnlcc2NoZW1hXG9yZ1xvcGVub2ZmaWNlXE9mZmljZVxXcml0ZXIueGNzOi4uLi5EZWZhdWx0Rm9udENKSy5MaXN0LnRleHQKKyMgIy0jLSMtIy0jICBvZmZpY2VjZmcucG90IChQQUNLQUdFIFZFUlNJT04pICAjLSMtIy0jLSMKKyMgb2ZmaWNlY2ZnL3JlZ2lzdHJ5XHNjaGVtYVxvcmdcb3Blbm9mZmljZVxPZmZpY2VcV3JpdGVyLnhjczouLi4uRGVmYXVsdEZvbnRDVEwuTGlzdC50ZXh0CisjLCBmdXp6eQorbXNnaWQgIkxJU1QiCittc2dzdHIgIlVydXRvbmRlIgorCisjLCBmdXp6eQorbXNnaWQgIkRpc2FibGUgY29sb3JlZCBkZWJ1Z2dpbmcgb3V0cHV0IgorbXNnc3RyICJJYmlzb2hva2EiCisKK21zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIkVuYWJsZSB2ZXJib3NlIHBsdWdpbiBsb2FkaW5nIGRpYWdub3N0aWNzIgorbXNnc3RyICJJdGFuZ2lyYS4uLiIKKworbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCittc2dzdHIgIiIKKworIyBvZmZtZ3Ivc291cmNlXG9mZmFwcFxkaWFsb2dcdHJlZW9wdC5zcmM6UklEX09GQURMR19PUFRJT05TX1RSRUVfUEFHRVMuU0lEX0dFTkVSQUxfT1BUSU9OUy44LnRleHQKKyMsIGZ1enp5Cittc2dpZCAiUEFUSFMiCittc2dzdHIgIkluemlyYSIKKworIywgZnV6enkKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCisiZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgorbXNnc3RyICJVcnV0b25kZSBCeWEgS3VyaSBpbiBHdXRlcmFueWErIEt1cmkgaSBVcnV0b25kZSBpbiBJTVBJTkRVUkFHQUNJUk8iCisKK21zZ2lkICJQTFVHSU5TIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiRGlzYWJsZSB0cmFwcGluZyBvZiBzZWdtZW50YXRpb24gZmF1bHRzIGR1cmluZyBwbHVnaW4gbG9hZGluZyIKK21zZ3N0ciAiQnlhIEl0YW5naXJhLi4uIgorCittc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIiIKKworbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIiIKKworbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiU2hvdyBHU3RyZWFtZXIgT3B0aW9ucyIKK21zZ3N0ciAiaSBWZXJpc2l5byIKKworbXNnaWQgIlVua25vd24gb3B0aW9uIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICJhIFJ1c2FuZ2UgSXNvbWVybyBJa29zYSIKKworIywgZnV6enkKK21zZ2lkICIiCisiR1N0cmVhbWVyIGRldmVsb3BlcnMgd2VyZSB0b28gbGF6eSB0byBhc3NpZ24gYW4gZXJyb3IgY29kZSB0byB0aGlzIGVycm9yLiIKK21zZ3N0ciAiS3VyaSBLdWdlbmVyYS4uLiBJa29zYSBJVEVHRUtPTkdFTkdBIEt1cmkgaXlpIElrb3NhIElET1NJWUUgYSIKKworIywgZnV6enkKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKK21zZ3N0ciAiSWtvc2EgSVRFR0VLT05HRU5HQSBPWUEgSWRvc2l5ZSBhIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgorInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCittc2dzdHIgIklrb3NhIElkb3NpeWUgYSIKKworIywgZnV6enkKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiIKK21zZ3N0ciAiSWtvc2EgVXJ1ZG9kbyBJZG9zaXllIGEiCisKKyMsIGZ1enp5Cittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBuZWdvdGlhdGlvbiBwcm9ibGVtLiIKK21zZ3N0ciAiSWtvc2EgSWRvc2l5ZSBhIgorCisjLCBmdXp6eQorbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogZXZlbnQgcHJvYmxlbS4iCittc2dzdHIgIklrb3NhIEljeWFiYXllIElkb3NpeWUgYSIKKworIywgZnV6enkKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4iCittc2dzdHIgIklrb3NhIElkb3NpeWUgYSIKKworIywgZnV6enkKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNhcHMgcHJvYmxlbS4iCittc2dzdHIgIklrb3NhIElueXVndXRpIG5rdXJ1IElkb3NpeWUgYSIKKworIywgZnV6enkKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKK21zZ3N0ciAiSWtvc2EgSXRhZ2k6IElkb3NpeWUgYSIKKworbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIgorbXNnc3RyICJJa29zYSBJZG9zaXllIGEiCisKK21zZ2lkICIiCisiVGhpcyBhcHBsaWNhdGlvbiBpcyB0cnlpbmcgdG8gdXNlIEdTdHJlYW1lciBmdW5jdGlvbmFsaXR5IHRoYXQgaGFzIGJlZW4gIgorImRpc2FibGVkLiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3VwcG9ydGluZyBsaWJyYXJ5IGVycm9yLiIKK21zZ3N0ciAiYSBSdXNhbmdlIElzb21lcm8gSWtvc2EiCisKKyMsIGZ1enp5Cittc2dpZCAiQ291bGQgbm90IGluaXRpYWxpemUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiT1lBIGd1dGFuZ2l6YSBJc29tZXJvIgorCisjLCBmdXp6eQorbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJPWUEgR3VmdW5nYSBJc29tZXJvIgorCisjLCBmdXp6eQorbXNnaWQgIkNvdWxkIG5vdCBjb25maWd1cmUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiT1lBIEd1ZnVuZ2EgSXNvbWVybyIKKworbXNnaWQgIkVuY29kaW5nIGVycm9yLiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgorbXNnc3RyICJhIFJ1c2FuZ2UgSXNvbWVybyBJa29zYSIKKworIywgZnV6enkKK21zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgorbXNnc3RyICJPWUEgQnlhYm9uZXRzZSIKKworIywgZnV6enkKK21zZ2lkICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgorbXNnc3RyICJJcmFodXplIEN5YW5nd2EgT1lBIEJpaGFyaSIKKworIywgZnV6enkKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCittc2dzdHIgIk9ZQSBHdWZ1bmd1cmEga3VnaXJhbmdvIgorCisjLCBmdXp6eQorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiT1lBIEd1ZnVuZ3VyYSBrdWdpcmFuZ28iCisKKyMsIGZ1enp5Cittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgorbXNnc3RyICJPWUEgR3VmdW5ndXJhIGt1Z2lyYW5nbyBOYSIKKworIywgZnV6enkKK21zZ2lkICJDb3VsZCBub3QgY2xvc2UgcmVzb3VyY2UuIgorbXNnc3RyICJPWUEgR3VmdW5nYSIKKworIywgZnV6enkKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIHJlc291cmNlLiIKK21zZ3N0ciAiT1lBIEd1c29tYSBCaXZ1eWUiCisKKyMsIGZ1enp5Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKK21zZ3N0ciAiT1lBIEt3YW5kaWthIEt1cmkiCisKKyMsIGZ1enp5Cittc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCittc2dzdHIgIk9ZQSBrdSIKKworIywgZnV6enkKK21zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgorbXNnc3RyICJPWUEgS3VyaW5nYW5pemEga3UiCisKKyMsIGZ1enp5Cittc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCittc2dzdHIgIk9ZQSBLdWJvbmEgR3VzaHlpcmFobyBBbWFnZW5hbWl0ZXJlcmUgQml2dXllIGt1IgorCittc2dpZCAiTm8gc3BhY2UgbGVmdCBvbiB0aGUgcmVzb3VyY2UuIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdHJlYW0gZXJyb3IuIgorbXNnc3RyICJhIFJ1c2FuZ2UgSXNvbWVybyBJa29zYSIKKworIywgZnV6enkKK21zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCittc2dzdHIgIkJ5YSBpeWkgSURPU0lZRSBhIgorCisjLCBmdXp6eQorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgorbXNnc3RyICJPWUEgVWJ3b2tvIEJ5YSIKKworIywgZnV6enkKK21zZ2lkICJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgZWxlbWVudC4iCittc2dzdHIgIm5pIEJ5YSBhIFVid29rbyBrdSBpeWkgSWtpZ2l6ZToiCisKKyMsIGZ1enp5Cittc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgorbXNnc3RyICJuaSBPeWEgaSBVYndva28iCisKKyMsIGZ1enp5Cittc2dpZCAiQ291bGQgbm90IGRlY29kZSBzdHJlYW0uIgorbXNnc3RyICJPWUEiCisKKyMsIGZ1enp5Cittc2dpZCAiQ291bGQgbm90IGVuY29kZSBzdHJlYW0uIgorbXNnc3RyICJPWUEiCisKKyMsIGZ1enp5Cittc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIk9ZQSIKKworIywgZnV6enkKK21zZ2lkICJDb3VsZCBub3QgbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIk9ZQSIKKworIywgZnV6enkKK21zZ2lkICJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIgorbXNnc3RyICJuaSBCeWEgaSBJbWl0ZXJlcmUiCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKKyJiZWVuIHN1cHBsaWVkLiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJObyBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMuIgorbXNnc3RyICJJa29zYSBVYnV0dW13YSBrdWdpcmFuZ28gVXJ3ZWdvIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJObyBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMgYW5kIGNvZGUgJWQuIgorbXNnc3RyICJCaXNhbnp3ZSBJa29zYSBVYnV0dW13YSBrdWdpcmFuZ28gVXJ3ZWdvIE5hIElURUdFS09OR0VOR0EiCisKK21zZ2lkICJTZWxlY3RlZCBjbG9jayBjYW5ub3QgYmUgdXNlZCBpbiBwaXBlbGluZS4iCittc2dzdHIgIiIKKworbXNnaWQgInRpdGxlIgorbXNnc3RyICJ1bXV0d2UiCisKKyMsIGZ1enp5Cittc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKK21zZ3N0ciAiVW11dHdlIgorCittc2dpZCAidGl0bGUgc29ydG5hbWUiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJVbXV0d2UiCisKKyMsIGZ1enp5Cittc2dpZCAiYXJ0aXN0IgorbXNnc3RyICJVbXVoYW56aSIKKworIywgZnV6enkKK21zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmciCittc2dzdHIgIlMgTnNoaW5nd2FiaWtvcndhIGt1Z2lyYW5nbyBpIgorCittc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJTIE5zaGluZ3dhYmlrb3J3YSBrdWdpcmFuZ28gaSIKKworbXNnaWQgImFsYnVtIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiCittc2dzdHIgIml5aSBJYnlhdGFuendlIgorCittc2dpZCAiYWxidW0gc29ydG5hbWUiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiaXlpIElieWF0YW56d2UiCisKKyMsIGZ1enp5Cittc2dpZCAiYWxidW0gYXJ0aXN0IgorbXNnc3RyICJVbXVoYW56aSIKKworbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIGRpc3BsYXllZCIKK21zZ3N0ciAiIgorCittc2dpZCAiYWxidW0gYXJ0aXN0IHNvcnRuYW1lIgorbXNnc3RyICIiCisKK21zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiCittc2dzdHIgIiIKKworbXNnaWQgImRhdGUiCittc2dzdHIgIkl0YXJpa2kiCisKKyMsIGZ1enp5Cittc2dpZCAiZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHRGF0ZSBzdHJ1Y3R1cmUpIgorbXNnc3RyICJJdGFyaWtpIGkgSWJ5YXRhbnp3ZSBCeWFyZW13ZSBpbiBLYWxpbmRhcmkgSW1pbnNpIgorCisjLCBmdXp6eQorbXNnaWQgImRhdGV0aW1lIgorbXNnc3RyICJJdGFyaWtpIgorCisjLCBmdXp6eQorbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKK21zZ3N0ciAiSXRhcmlraSBpIElieWF0YW56d2UgQnlhcmVtd2UgaW4gS2FsaW5kYXJpIEltaW5zaSIKKworbXNnaWQgImdlbnJlIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCittc2dzdHIgIml5aSBJYnlhdGFuendlIEt1cmkiCisKKyMgcGFkbWluL3NvdXJjZVxwYWRpYWxvZy5zcmM6UklEX1RYVF9URVNUUEFHRV9DT01NRU5ULnRleHQKKyMsIGZ1enp5Cittc2dpZCAiY29tbWVudCIKK21zZ3N0ciAiSWN5byB3b25nZXJhaG8iCisKKyMsIGZ1enp5Cittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCittc2dzdHIgIktpZ2VuZ2EgVW13YW5kaWtvIGkgSWJ5YXRhbnp3ZSIKKworIyBwYWRtaW4vc291cmNlXHBhZGlhbG9nLnNyYzpSSURfVFhUX1RFU1RQQUdFX0NPTU1FTlQudGV4dAorIywgZnV6enkKK21zZ2lkICJleHRlbmRlZCBjb21tZW50IgorbXNnc3RyICJJY3lvIHdvbmdlcmFobyIKKworIywgZnV6enkKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCittc2dzdHIgIktpZ2VuZ2EgVW13YW5kaWtvIGkgSWJ5YXRhbnp3ZSIKKworIywgZnV6enkKK21zZ2lkICJ0cmFjayBudW1iZXIiCittc2dzdHIgIlVtdWJhcmUiCisKKyMsIGZ1enp5Cittc2dpZCAidHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgIlVtdWJhcmUgTW8gSW1iZXJlIGEiCisKKyMsIGZ1enp5Cittc2dpZCAidHJhY2sgY291bnQiCittc2dzdHIgIklCQVJBIgorCisjLCBmdXp6eQorbXNnaWQgImNvdW50IG9mIHRyYWNrcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIHRyYWNrIGJlbG9uZ3MgdG8iCittc2dzdHIgIklCQVJBIEJ5YSBNbyBJbWJlcmUgaXlpIEt1cmkiCisKKyMsIGZ1enp5Cittc2dpZCAiZGlzYyBudW1iZXIiCittc2dzdHIgIkRJU0lLSSBVbXViYXJlIgorCisjLCBmdXp6eQorbXNnaWQgImRpc2MgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgIkRJU0lLSSBVbXViYXJlIE1vIEltYmVyZSBhIgorCisjLCBmdXp6eQorbXNnaWQgImRpc2MgY291bnQiCittc2dzdHIgIkRJU0lLSSBJQkFSQSIKKworIywgZnV6enkKK21zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKK21zZ3N0ciAiSUJBUkEgQnlhIE1vIEltYmVyZSBpeWkgRElTSUtJIEt1cmkiCisKK21zZ2lkICJsb2NhdGlvbiIKK21zZ3N0ciAiSW50dXJvIgorCittc2dpZCAiIgorIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgorImlzIGhvc3RlZCkiCittc2dzdHIgIiIKKworbXNnaWQgImhvbWVwYWdlIgorbXNnc3RyICIiCisKK21zZ2lkICJIb21lcGFnZSBmb3IgdGhpcyBtZWRpYSAoaS5lLiBhcnRpc3Qgb3IgbW92aWUgaG9tZXBhZ2UpIgorbXNnc3RyICIiCisKK21zZ2lkICJkZXNjcmlwdGlvbiIKK21zZ3N0ciAiSXNvYmFudXJhbWl0ZXJlcmUiCisKKyMsIGZ1enp5Cittc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgorbXNnc3RyICJVbXdhbmRpa28gaSBJYmlrdWJpeWVtbyBCeWEgaSBJYnlhdGFuendlIgorCisjIGdvb2RpZXMvc291cmNlXGZpbHRlci52Y2xcZXBzXGRsZ2Vwcy5zcmM6RExHX0VYUE9SVF9FUFMuR1JQX1ZFUlNJT04udGV4dAorIywgZnV6enkKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICJWZXJpc2l5byIKKworIywgZnV6enkKK21zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKK21zZ3N0ciAiVmVyaXNpeW8gQnlhIGl5aSBJYnlhdGFuendlIgorCittc2dpZCAiSVNSQyIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKK21zZ3N0ciAiSFRUUCB3d3cgb3JnIgorCisjLCBmdXp6eQorbXNnaWQgIm9yZ2FuaXphdGlvbiIKK21zZ3N0ciAiSWh1emFnYWh1bmRhIgorCisjLCBmdXp6eQorbXNnaWQgImNvcHlyaWdodCIKK21zZ3N0ciAiVWJ1cmVuZ2FuemlyYSBidyd1bXVoaW1ieWkiCisKKyMsIGZ1enp5Cittc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiVWJ1cmVuZ2FuemlyYSBidyd1bXVoaW1ieWkgQnlhIGkgSWJ5YXRhbnp3ZSIKKworIywgZnV6enkKK21zZ2lkICJjb3B5cmlnaHQgdXJpIgorbXNnc3RyICJVYnVyZW5nYW56aXJhIGJ3J3VtdWhpbWJ5aSIKKworIywgZnV6enkKK21zZ2lkICJVUkkgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgIlVidXJlbmdhbnppcmEgYncndW11aGltYnlpIEJ5YSBpIElieWF0YW56d2UiCisKK21zZ2lkICJlbmNvZGVkIGJ5IgorbXNnc3RyICIiCisKK21zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgorbXNnc3RyICIiCisKKyMgKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorIyBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyMKKyMgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisjIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworIworIyBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorIyBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyMgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKyMgTGljZW5zZS4KKyMKKyMgVGhlIE9yaWdpbmFsIENvZGUgaXMgTW96aWxsYSBDb21tdW5pY2F0b3IgY2xpZW50IGNvZGUsIHJlbGVhc2VkCisjIE1hcmNoIDMxLCAxOTk4LgorIworIyBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKKyMgTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCisjIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTgtMTk5OQorIyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIENvbnRyaWJ1dG9yKHMpOgorIworIyBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorIyBlaXRoZXIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwKKyMgb3IgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCisjIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCisjIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyMgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyMgZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyMgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyMgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorIyB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorIworIyAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKgorIyBCb3ggSGVhZGluZ3MKKyMsIGZ1enp5Cittc2dpZCAiY29udGFjdCIKK21zZ3N0ciAiVW11bnR1IgorCisjLCBmdXp6eQorbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCittc2dzdHIgIlVtdW50dSBJYmlzb2JhbnVybyIKKworbXNnaWQgImxpY2Vuc2UiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJsaWNlbnNlIG9mIGRhdGEiCittc2dzdHIgIkJ5YSBJYnlhdGFuendlIgorCisjLCBmdXp6eQorbXNnaWQgImxpY2Vuc2UgdXJpIgorbXNnc3RyICJCeWEgSWJ5YXRhbnp3ZSIKKworIywgZnV6enkKK21zZ2lkICJVUkkgdG8gdGhlIGxpY2Vuc2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgIkJ5YSBJYnlhdGFuendlIgorCittc2dpZCAicGVyZm9ybWVyIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAicGVyc29uKHMpIHBlcmZvcm1pbmciCittc2dzdHIgIlMiCisKK21zZ2lkICJjb21wb3NlciIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAiUyBOc2hpbmd3YWJpa29yd2Ega3VnaXJhbmdvIGkiCisKKyMgb2ZmaWNlY2ZnL3JlZ2lzdHJ5XHNjaGVtYVxvcmdcb3Blbm9mZmljZVxPZmZpY2VcV3JpdGVyLnhjczouLi4uQWdlbmRhVHlwZS5EdXJhdGlvbi50ZXh0CisjLCBmdXp6eQorbXNnaWQgImR1cmF0aW9uIgorbXNnc3RyICJJZ2loZS0gbmdvbWJ3YSIKKworIywgZnV6enkKK21zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKK21zZ3N0ciAiVWJ1cmVidXJlIGluIElnaWhlIgorCittc2dpZCAiY29kZWMiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImkgSWJ5YXRhbnp3ZSBuaSBpbiIKKworIywgZnV6enkKK21zZ2lkICJ2aWRlbyBjb2RlYyIKK21zZ3N0ciAiVmlkZXdvLi4uIgorCisjLCBmdXp6eQorbXNnaWQgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiaSBWaWRld28uLi4gSWJ5YXRhbnp3ZSBuaSBpbiIKKworbXNnaWQgImF1ZGlvIGNvZGVjIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJpIElieWF0YW56d2UgbmkgaW4iCisKKyMsIGZ1enp5Cittc2dpZCAic3VidGl0bGUgY29kZWMiCittc2dzdHIgIlZpZGV3by4uLiIKKworIywgZnV6enkKK21zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImkgVmlkZXdvLi4uIElieWF0YW56d2UgbmkgaW4iCisKKyMsIGZ1enp5Cittc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKK21zZ3N0ciAiVW11bnR1IEliaXNvYmFudXJvIgorCisjLCBmdXp6eQorbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJpIElieWF0YW56d2UgbmkgaW4iCisKK21zZ2lkICJiaXRyYXRlIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAiTllBQ1lPIEN5YW5nd2EgSW1wdXphbmRlbmdvIGluIFMiCisKKyMsIGZ1enp5Cittc2dpZCAibm9taW5hbCBiaXRyYXRlIgorbXNnc3RyICJTSElOR0lSTyIKKworIywgZnV6enkKK21zZ2lkICJub21pbmFsIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJTSElOR0lSTyBpbiBTIgorCisjLCBmdXp6eQorbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKK21zZ3N0ciAiR2l0byIKKworIywgZnV6enkKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJHaXRvIGluIFMiCisKKyMsIGZ1enp5Cittc2dpZCAibWF4aW11bSBiaXRyYXRlIgorbXNnc3RyICJLaW5pbmkiCisKKyMsIGZ1enp5Cittc2dpZCAibWF4aW11bSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAiS2luaW5pIGluIFMiCisKK21zZ2lkICJlbmNvZGVyIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiS3VyaSBpeWkiCisKKyMsIGZ1enp5Cittc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgorbXNnc3RyICJWZXJpc2l5byIKKworIywgZnV6enkKK21zZ2lkICJ2ZXJzaW9uIG9mIHRoZSBlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgorbXNnc3RyICJWZXJpc2l5byBCeWEgaSBLdXJpIGl5aSIKKworbXNnaWQgInNlcmlhbCIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCittc2dzdHIgIlVtdWJhcmUgQnlhIgorCittc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAidHJhY2sgZ2FpbiBpbiBkYiIKK21zZ3N0ciAiaW4gREIiCisKK21zZ2lkICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJwZWFrIG9mIHRoZSB0cmFjayIKK21zZ3N0ciAiQnlhIGkiCisKK21zZ2lkICJyZXBsYXlnYWluIGFsYnVtIGdhaW4iCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJhbGJ1bSBnYWluIGluIGRiIgorbXNnc3RyICJpbiBEQiIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgorbXNnc3RyICJCeWEgaSIKKworbXNnaWQgInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIgorbXNnc3RyICIiCisKK21zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgorbXNnc3RyICIiCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIgorbXNnc3RyICIiCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIGZvciB0aGlzIHN0cmVhbSwgY29uZm9ybWluZyB0byBJU08tNjM5LTEiCittc2dzdHIgIiIKKworbXNnaWQgImltYWdlIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiS3VyaSBpeWkiCisKKyMuIFRSQU5TTEFUT1JTOiAncHJldmlldyBpbWFnZScgPSBpbWFnZSB0aGF0IHNob3dzIGEgcHJldmlldyBvZiB0aGUgZnVsbCBpbWFnZQorbXNnaWQgInByZXZpZXcgaW1hZ2UiCittc2dzdHIgIiIKKworbXNnaWQgInByZXZpZXcgaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiIgorCittc2dpZCAiYXR0YWNobWVudCIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgIkt1cmkgaXlpIgorCittc2dpZCAiYmVhdHMgcGVyIG1pbnV0ZSIKK21zZ3N0ciAiIgorCittc2dpZCAibnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8iCittc2dzdHIgIiIKKworbXNnaWQgImtleXdvcmRzIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiY29tbWEgc2VwYXJhdGVkIGtleXdvcmRzIGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQiCittc2dzdHIgIlVtd2FuZGlrbyBpIEliaWt1Yml5ZW1vIEJ5YSBpIElieWF0YW56d2UiCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIG5hbWUiCittc2dzdHIgIkludHVybyIKKworbXNnaWQgIiIKKyJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgorInByb2R1Y2VkIgorbXNnc3RyICIiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCisic291dGhlcm4gbGF0aXR1ZGVzKSIKK21zZ3N0ciAiIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorImdlbyBsb25naXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgcHJpbWUgbWVyaWRpYW4gaW4gR3JlZW53aWNoL1VLLCAgIgorIm5lZ2F0aXZlIHZhbHVlcyBmb3Igd2VzdGVybiBsb25naXR1ZGVzKSIKK21zZ3N0ciAiIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCisiYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBjb3VudHJ5IgorbXNnc3RyICJJbnR1cm8iCisKK21zZ2lkICJjb3VudHJ5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBjaXR5IgorbXNnc3RyICJJbnR1cm8iCisKK21zZ2lkICJjaXR5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKK21zZ3N0ciAiSW50dXJvIgorCittc2dpZCAiIgorImEgbG9jYXRpb24gd2hpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgorInRoZSBuZWlnaGJvcmhvb2QpIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIGhvcml6b250YWwgZXJyb3IiCittc2dzdHIgIkludHVybyIKKworbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgorbXNnc3RyICJJbnR1cm8iCisKK21zZ2lkICIiCisibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBpbiBtL3MiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgorbXNnc3RyICJJbnR1cm8iCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgorIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKKyJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCittc2dzdHIgIkludHVybyIKKworbXNnaWQgIiIKKyJpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nICBhIG1lZGlhLiAiCisiSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCAgcmVwcmVzZW50YXRpb24sIDAgbWVhbnMgdGhlICIKKyJnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKK21zZ2lkICJzaG93IG5hbWUiCittc2dzdHIgIiIKKworbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICdzaG93IHNvcnRuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZSBhcyB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzJyBoZXJlCittc2dpZCAic2hvdyBzb3J0bmFtZSIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20sIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZXBpc29kZSBudW1iZXIiCittc2dzdHIgIkRJU0lLSSBVbXViYXJlIgorCittc2dpZCAiVGhlIGVwaXNvZGUgbnVtYmVyIGluIHRoZSBzZWFzb24gdGhlIG1lZGlhIGlzIHBhcnQgb2YiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJzZWFzb24gbnVtYmVyIgorbXNnc3RyICJESVNJS0kgVW11YmFyZSIKKworbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICIiCisKK21zZ2lkICJseXJpY3MiCittc2dzdHIgIiIKKworbXNnaWQgIlRoZSBseXJpY3Mgb2YgdGhlIG1lZGlhLCBjb21tb25seSB1c2VkIGZvciBzb25ncyIKK21zZ3N0ciAiIgorCittc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJTIE5zaGluZ3dhYmlrb3J3YSBrdWdpcmFuZ28gaSIKKworbXNnaWQgImdyb3VwaW5nIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiR3JvdXBzIHJlbGF0ZWQgbWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSB0cmFja3MsIGxpa2UgdGhlIGRpZmZlcmVudCBwaWVjZXMgIgorIm9mIGEgY29uY2VydG8uIEl0IGlzIGEgaGlnaGVyIGxldmVsIHRoYW4gYSB0cmFjaywgYnV0IGxvd2VyIHRoYW4gYW4gYWxidW0iCittc2dzdHIgIiIKKworIyBvZmZpY2VjZmcvcmVnaXN0cnlcc2NoZW1hXG9yZ1xvcGVub2ZmaWNlXE9mZmljZVxXcml0ZXIueGNzOi4uLi5BZ2VuZGFUeXBlLkR1cmF0aW9uLnRleHQKKyMsIGZ1enp5Cittc2dpZCAidXNlciByYXRpbmciCittc2dzdHIgIklnaWhlLSBuZ29tYndhIgorCittc2dpZCAiIgorIlJhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgdXNlci4gVGhlIGhpZ2hlciB0aGUgcmFuaywgdGhlIG1vcmUgdGhlIHVzZXIgbGlrZXMgIgorInRoaXMgbWVkaWEiCittc2dzdHIgIiIKKworbXNnaWQgImRldmljZSBtYW51ZmFjdHVyZXIiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICJWZXJpc2l5byBCeWEgaSBLdXJpIGl5aSIKKworbXNnaWQgImRldmljZSBtb2RlbCIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKK21zZ3N0ciAiVmVyaXNpeW8gQnlhIGkgS3VyaSBpeWkiCisKKyMsIGZ1enp5Cittc2dpZCAiYXBwbGljYXRpb24gbmFtZSIKK21zZ3N0ciAiSW50dXJvIgorCisjLCBmdXp6eQorbXNnaWQgIkFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSIKK21zZ3N0ciAiVmVyaXNpeW8gQnlhIGkgS3VyaSBpeWkiCisKK21zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgorbXNnc3RyICIiCisKK21zZ2lkICJBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIG1lZGlhIgorbXNnc3RyICIiCisKK21zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKK21zZ3N0ciAiIgorCittc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgorbXNnc3RyICIiCisKK21zZ2lkICIsICIKK21zZ3N0ciAiLCAiCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCittc2dzdHIgIkJpdnV5ZSBJa2lnaXplOiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKKyIlc1xuIgorbXNnc3RyICJLb3NvcmEgYW1ha29zYSBJYmlzb2JhbnVybyIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgorbXNnc3RyICJ1YnVzYSBPWUEiCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHNraXBwaW5nIgorbXNnc3RyICJPeWEgR3VzaW1idWthOiAlcyVzIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJubyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCittc2dzdHIgIk95YSBpbmRhbmdha2ludHUgaW4gSWtpZ2l6ZToiCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKK21zZ3N0ciAiT1lBIEd1c2h5aXJhaG8gaW5kYW5nYWtpbnR1IGluIElraWdpemU6IEt1cmkiCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgorbXNnc3RyICJPWUEgSWh1emEgS3VyaSIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCittc2dzdHIgIk95YSBJa2lnaXplOiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNhcHMgXCIlc1wiIgorbXNnc3RyICJPWUEgSW55dWd1dGkgbmt1cnUiCisKKyMsIGZ1enp5Cittc2dpZCAibGluayB3aXRob3V0IHNvdXJjZSBlbGVtZW50IgorbXNnc3RyICJJaHV6YSBJbmtvbW9rbyBJa2lnaXplOiIKKworIywgZnV6enkKK21zZ2lkICJsaW5rIHdpdGhvdXQgc2luayBlbGVtZW50IgorbXNnc3RyICJJaHV6YSBJa2lnaXplOiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgIk95YSBJbmtvbW9rbyBJa2lnaXplOiBrdWdpcmFuZ28iCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm5vIGVsZW1lbnQgdG8gbGluayBVUkkgXCIlc1wiIHRvIgorbXNnc3RyICJPeWEgSWtpZ2l6ZTogS3VyaSBJaHV6YSBLdXJpIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgIk95YSBJa2lnaXplOiBrdWdpcmFuZ28iCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAiT1lBIElodXphIElraWdpemU6IGt1Z2lyYW5nbyIKKworIywgZnV6enkKK21zZ2lkICJlbXB0eSBwaXBlbGluZSBub3QgYWxsb3dlZCIKK21zZ3N0ciAidWJ1c2EgT1lBIgorCittc2dpZCAiSW50ZXJuYWwgY2xvY2sgZXJyb3IuIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgorbXNnc3RyICIiCisKK21zZ2lkICJBIGxvdCBvZiBidWZmZXJzIGFyZSBiZWluZyBkcm9wcGVkLiIKK21zZ3N0ciAiIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IHByb2JsZW0uIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCittc2dzdHIgIiIKKworbXNnaWQgIkZpbHRlciBjYXBzIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCisicHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJJRE9TSVlFIEl6aW5hOiBrdWdpcmFuZ28iCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiT1lBIEd1ZnVuZ3VyYSBJRE9TSVlFIGt1Z2lyYW5nbyIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCittc2dzdHIgIklET1NJWUUiCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIgorbXNnc3RyICJLdXJpIElET1NJWUUiCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgorbXNnc3RyICJLdXJpIElET1NJWUUiCisKKyMsIGZ1enp5Cittc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCittc2dzdHIgIklET1NJWUUgSXppbmE6IGt1Z2lyYW5nbyIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgorbXNnc3RyICJPWUEgR3VmdW5ndXJhIElET1NJWUUga3VnaXJhbmdvIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGluZm8gb24gXCIlc1wiLiIKK21zZ3N0ciAiT1lBIEt1Ym9uYSBHdXNoeWlyYWhvIEFtYWdlbmFtaXRlcmVyZSBCaXZ1eWUga3UiCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlwiJXNcIiBpcyBhIGRpcmVjdG9yeS4iCittc2dzdHIgIlwiJXNcIm5pIGEgYnVzaHlpbmd1cm8iCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKK21zZ3N0ciAiSWRvc2l5ZSBuaSBhIgorCisjLCBmdXp6eQorbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCittc2dzdHIgIk55dW1hIEFtYXN1YmlyYW1vIE5rYSIKKworbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCittc2dzdHIgIiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiT1lBIEt1Ym9uYSBHdXNoeWlyYWhvIEFtYWdlbmFtaXRlcmVyZSBCaXZ1eWUga3UiCisKKyMsIGZ1enp5Cittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKK21zZ3N0ciAiS3VyaSBJRE9TSVlFIgorCisjICMtIy0jLSMtIyAgb2ZmaWNlY2ZnLnBvdCAoUEFDS0FHRSBWRVJTSU9OKSAgIy0jLSMtIy0jCisjIG9mZmljZWNmZy9yZWdpc3RyeVxzY2hlbWFcb3JnXG9wZW5vZmZpY2VcT2ZmaWNlXFdyaXRlci54Y3M6Li4uLlJldmlzaW9uLlRleHREaXNwbGF5Lkluc2VydC5BdHRyaWJ1dGUuLjUudGV4dAorIyAjLSMtIy0jLSMgIG9mZmljZWNmZy5wb3QgKFBBQ0tBR0UgVkVSU0lPTikgICMtIy0jLSMtIworIyBvZmZpY2VjZmcvcmVnaXN0cnlcc2NoZW1hXG9yZ1xvcGVub2ZmaWNlXE9mZmljZVxXcml0ZXIueGNzOi4uLi5SZXZpc2lvbi5UZXh0RGlzcGxheS5EZWxldGUuQXR0cmlidXRlLi40LnRleHQKKyMgIy0jLSMtIy0jICBvZmZpY2VjZmcucG90IChQQUNLQUdFIFZFUlNJT04pICAjLSMtIy0jLSMKKyMgb2ZmaWNlY2ZnL3JlZ2lzdHJ5XHNjaGVtYVxvcmdcb3Blbm9mZmljZVxPZmZpY2VcV3JpdGVyLnhjczouLi4uUmV2aXNpb24uVGV4dERpc3BsYXkuQ2hhbmdlZEF0dHJpYnV0ZS5BdHRyaWJ1dGUuLjUudGV4dAorIywgZnV6enkKK21zZ2lkICJjYXBzIgorbXNnc3RyICJJbnl1Z3V0aSBua3VydSIKKworIywgZnV6enkKK21zZ2lkICJkZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtIgorbXNnc3RyICJpbiIKKworIyBvZmZpY2VjZmcvcmVnaXN0cnlcc2NoZW1hXG9yZ1xvcGVub2ZmaWNlXE9mZmljZVxDYWxjLnhjczouLi4uTGF5b3V0Lk90aGVyLlN0YXR1c2JhckZ1bmN0aW9uLi41LnRleHQKKyMsIGZ1enp5Cittc2dpZCAibWluaW11bSIKK21zZ3N0ciAiR2l0byIKKworIyBvZmZpY2VjZmcvcmVnaXN0cnlcc2NoZW1hXG9yZ1xvcGVub2ZmaWNlXE9mZmljZVxDYWxjLnhjczouLi4uTGF5b3V0Lk90aGVyLlN0YXR1c2JhckZ1bmN0aW9uLi40LnRleHQKKyMsIGZ1enp5Cittc2dpZCAibWF4aW11bSIKK21zZ3N0ciAiS2luaW5pIgorCittc2dpZCAiZm9yY2UgY2FwcyIKK21zZ3N0ciAiIgorCittc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJTdHJlYW0gY29udGFpbnMgbm8gZGF0YS4iCittc2dzdHIgIml5aSBJYnlhdGFuendlIgorCittc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKK21zZ3N0ciAiIgorCittc2dpZCAicmVhZGFibGUiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJ3cml0YWJsZSIKK21zZ3N0ciAidW11dHdlIgorCittc2dpZCAiY29udHJvbGxhYmxlIgorbXNnc3RyICIiCisKK21zZ2lkICJjaGFuZ2VhYmxlIGluIE5VTEwsIFJFQURZLCBQQVVTRUQgb3IgUExBWUlORyBzdGF0ZSIKK21zZ3N0ciAiIgorCittc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwsIFJFQURZIG9yIFBBVVNFRCBzdGF0ZSIKK21zZ3N0ciAiIgorCittc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwgb3IgUkVBRFkgc3RhdGUiCittc2dzdHIgIiIKKworbXNnaWQgIkJsYWNrbGlzdGVkIGZpbGVzOiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIlRvdGFsIGNvdW50OiAiCittc2dzdHIgIklCQVJBIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdGVkIGZpbGUiCittc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdGVkIGZpbGVzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBwbHVnaW4iCittc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdCBlbnRyeSIKK21zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0IGVudHJpZXMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGZlYXR1cmUiCittc2dpZF9wbHVyYWwgIiVkIGZlYXR1cmVzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIywgZnV6enkKK21zZ2lkICJQcmludCBhbGwgZWxlbWVudHMiCittc2dzdHIgIkJ5b3NlIEliaW50dSIKKworbXNnaWQgIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgorInBsdWdpbnMgcHJvdmlkZS5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKKyJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgorbXNnc3RyICIiCisKK21zZ2lkICJMaXN0IHRoZSBwbHVnaW4gY29udGVudHMiCittc2dzdHIgIiIKKworbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmlsZTogJXNcbiIKK21zZ3N0ciAiT1lBIEd1ZnVuZ3VyYSBJRE9TSVlFIGt1Z2lyYW5nbyIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iCittc2dzdHIgIk95YSBJbmtvbW9rbyBJa2lnaXplOiBrdWdpcmFuZ28iCisKK21zZ2lkICJJbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICIiCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIGVsZW1lbnQgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAiQml2dXllIElraWdpemU6IgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKK21zZ3N0ciAiQml2dXllIElraWdpemU6IgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAiQml2dXllIElraWdpemU6IgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgKCVzKTogIgorbXNnc3RyICJCaXZ1eWUgSWtpZ2l6ZToiCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKK21zZ3N0ciAiQml2dXllIElraWdpemU6IgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgorbXNnc3RyICJCeWFib25ldHNlIGt1IElraWdpemU6IgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCittc2dzdHIgIkJ5YWJvbmV0c2Uga3UgSWtpZ2l6ZToiCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKK21zZ3N0ciAiQnlhYm9uZXRzZSBrdSBJa2lnaXplOiIKKworbXNnaWQgIkZPVU5EIFRBR1xuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklORk86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCittc2dzdHIgIkJpdnV5ZSBJa2lnaXplOiIKKworbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJidWZmZXJpbmcuLi4iCittc2dzdHIgIiIKKworbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcnJ1cHQ6IFN0b3BwaW5nIHBpcGVsaW5lIC4uLlxuIgorbXNnc3RyICIiCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKK21zZ3N0ciAiT3lhIElraWdpemU6IgorCisjLCBmdXp6eQorbXNnaWQgIk91dHB1dCB0YWdzIChhbHNvIGtub3duIGFzIG1ldGFkYXRhKSIKK21zZ3N0ciAiTmthIgorCisjLCBmdXp6eQorbXNnaWQgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCittc2dzdHIgIkltaW1lcmVyZSBJYmlzb2JhbnVybyBOYSBpbmRhbmdha2ludHUgSWJpbWVueWV0c28iCisKKyMsIGZ1enp5Cittc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiT1lBIEliaXNvaG9rYSBJbWltZXJlcmUgSWJpc29iYW51cm8gQnlhIgorCittc2dpZCAiT3V0cHV0IG1lc3NhZ2VzIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKK21zZ3N0ciAiT1lBIEliaXNvaG9rYSBJbWltZXJlcmUgSWJpc29iYW51cm8gQnlhIgorCittc2dpZCAiVFlQRTEsVFlQRTIsLi4uIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgorbXNnc3RyICJPWUEgS3dpbmppemEgcG9yb2dhcmFtdSBhIgorCisjLCBmdXp6eQorbXNnaWQgIlByaW50IGFsbG9jIHRyYWNlIChpZiBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSkiCittc2dzdHIgIk5JQkEgQmlrb3JhIGt1IEd1a3VzYW55YSBJZ2loZSIKKworbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKK21zZ3N0ciAiIgorCittc2dpZCAiR2F0aGVyIGFuZCBwcmludCBpbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICIiCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQ6ICVzLlxuIgorbXNnc3RyICJPWUEiCisKKyMsIGZ1enp5Cittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKK21zZ3N0ciAiT1lBIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGVycm9uZW91cyBwaXBlbGluZTogJXNcbiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIkVSUk9SOiB0aGUgJ3BpcGVsaW5lJyBlbGVtZW50IHdhc24ndCBmb3VuZC5cbiIKK21zZ3N0ciAiaSBJa2lnaXplOiBCeWFib25ldHNlIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJFUlJPUjogUGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBhdXNlLlxuIgorbXNnc3RyICJLdXJpIEd1a2luYSIKKworbXNnaWQgIlBpcGVsaW5lIGlzIGxpdmUgYW5kIGRvZXMgbm90IG5lZWQgUFJFUk9MTCAuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTElORyAuLi5cbiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcHJlcm9sbC5cbiIKK21zZ3N0ciAiS3VyaSBHdWtpbmEiCisKK21zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMRUQgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKK21zZ3N0ciAiS3VyaSBHdWtpbmEiCisKK21zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKK21zZ3N0ciAiIgorCittc2dpZCAiV2FpdGluZyBmb3IgRU9TLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgorbXNnc3RyICIiCisKK21zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKK21zZ3N0ciAiIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIgorbXNnc3RyICIiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiVXNhZ2U6IGdzdC14bWxsYXVuY2ggPGZpbGUueG1sPiBbIGVsZW1lbnQucHJvcGVydHk9dmFsdWUgLi4uIF1cbiIKKyN+IG1zZ3N0ciAiSURPU0lZRSB4bWwgSWtpZ2l6ZTogaW5kYW5nYWtpbnR1IEFnYWNpcm8iCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiRVJST1I6IHBhcnNlIG9mIHhtbCBmaWxlICclcycgZmFpbGVkLlxuIgorI34gbXNnc3RyICJCeWEgeG1sIElET1NJWUUgQnlhbnplIgorCisjLCBmdXp6eQorI34gbXNnaWQgIkVSUk9SOiBubyB0b3BsZXZlbCBwaXBlbGluZSBlbGVtZW50IGluIGZpbGUgJyVzJy5cbiIKKyN+IG1zZ3N0ciAiT3lhIElraWdpemU6IGluIElET1NJWUUiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiV0FSTklORzogb25seSBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLlxuIgorI34gbXNnc3RyICJJa2lnaXplOiBuaSBrdSBpeWkgSWdpaGUiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiRVJST1I6IGNvdWxkIG5vdCBwYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgJWQ6ICVzLlxuIgorI34gbXNnc3RyICJPWUEgS29tYW5kaTogVW11cm9uZ28iCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiV0FSTklORzogZWxlbWVudCBuYW1lZCAnJXMnIG5vdCBmb3VuZC5cbiIKKyN+IG1zZ3N0ciAiSWtpZ2l6ZTogT1lBIEJ5YWJvbmV0c2UiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiU2F2ZSB4bWwgcmVwcmVzZW50YXRpb24gb2YgcGlwZWxpbmUgdG8gRklMRSBhbmQgZXhpdCIKKyN+IG1zZ3N0ciAiS3ViaWthIHhtbCBCeWEgS3VyaSBOYSBHdXNvaG9rYSIKKworI34gbXNnaWQgIkZJTEUiCisjfiBtc2dzdHIgIklET1NJWUUiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiRG8gbm90IGluc3RhbGwgc2lnbmFsIGhhbmRsZXJzIGZvciBTSUdVU1IxIGFuZCBTSUdVU1IyIgorI34gbXNnc3RyICJPWUEgS3dpbmppemEgcG9yb2dhcmFtdSBhIgorCisjLCBmdXp6eQorI34gbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBkZXNjcmlwdG9yIFwiJWRcIi4iCisjfiBtc2dzdHIgIkt1cmkgSURPU0lZRSIKKworIywgZnV6enkKKyN+IG1zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlZFwiLiIKKyN+IG1zZ3N0ciAiS3VyaSBJRE9TSVlFIgorCisjLCBmdXp6eQorI34gbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZC4iCisjfiBtc2dzdHIgIklrb3NhIExldGEgR3VoaW5kdXJhPj4gQnlhbnplIElkb3NpeWUgYSIKKworIywgZnV6enkKKyN+IG1zZ2lkICJvcmlnaW5hbCBsb2NhdGlvbiBvZiBmaWxlIGFzIGEgVVJJIgorI34gbXNnc3RyICJVbXdpbWVyZXJlIEFoYW50dSBCeWEgSURPU0lZRSBOa2EgYSIKKworIywgZnV6enkKKyN+IG1zZ2lkICJEaXNhYmxlIGFjY2VsZXJhdGVkIENQVSBpbnN0cnVjdGlvbnMiCisjfiBtc2dzdHIgIkFtYWJ3aXJpemEiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiUmVnaXN0cnkgdG8gdXNlIgorI34gbXNnc3RyICJLdXJpIEd1a29yZXNoYSIKKworIywgZnV6enkKKyN+IG1zZ2lkICJwYXRoIGxpc3QgZm9yIGxvYWRpbmcgcGx1Z2lucyAoc2VwYXJhdGVkIGJ5ICclcycpIgorI34gbXNnc3RyICJJbnppcmEgVXJ1dG9uZGUga3VnaXJhbmdvIEl0YW5naXJhLi4uIGt1IgorCisjLCBmdXp6eQorI34gbXNnaWQgIlNjaGVkdWxlciB0byB1c2UgKGRlZmF1bHQgaXMgJyVzJykiCisjfiBtc2dzdHIgIkt1cmkgR3Vrb3Jlc2hhIE1idXJhYnV6aSBuaSIKKworIywgZnV6enkKKyN+IG1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNjaGVkdWxlciBwcm9ibGVtLiAgRmlsZSBhIGJ1Zy4iCisjfiBtc2dzdHIgIklrb3NhIElkb3NpeWUgYSIKKworIywgZnV6enkKKyN+IG1zZ2lkICJUaGVyZSBpcyBubyBlbGVtZW50IHByZXNlbnQgdG8gaGFuZGxlIHRoZSBzdHJlYW0ncyBtaW1lIHR5cGUgJXMuIgorI34gbXNnc3RyICJuaSBPeWEgSWtpZ2l6ZTogS3VyaSBpIFVid29rbyIKKworIywgZnV6enkKKyN+IG1zZ2lkICIiCisjfiAiRXhlY3V0aW9uIGVuZGVkIGFmdGVyICVzIGl0ZXJhdGlvbnMgKHN1bSAlcyBucywgYXZlcmFnZSAlcyBucywgbWluICVzIG5zLCAiCisjfiAibWF4ICVzIG5zKS5cbiIKKyN+IG1zZ3N0ciAiTnl1bWEgQW1hc3ViaXJhbW8gSWdpdGVyYW55byBJbXB1emFuZGVuZ28gR0lUTyBLSU5JTkkiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiTnVtYmVyIG9mIHRpbWVzIHRvIGl0ZXJhdGUgcGlwZWxpbmUiCisjfiBtc2dzdHIgIkJ5YSBUaW1lcyBLdXJpIgorCisjLCBmdXp6eQorI34gbXNnaWQgIiAgICAgICAgIFRyeWluZyB0byBydW4gYW55d2F5LlxuIgorI34gbXNnc3RyICJLdXJpIEd1a29yZXNoYSIKKworIywgZnV6enkKKyN+IG1zZ2lkICJBZGRlZCBwbHVnaW4gJXMgd2l0aCAlZCAlcy5cbiIKKyN+IG1zZ3N0ciAiTmE6IgorCisjLCBmdXp6eQorI34gbXNnaWQgIkFkZGVkIHBhdGggICAlcyB0byAlcyBcbiIKKyN+IG1zZ3N0ciAiSW56aXJhIEt1cmkiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiVHJ5aW5nIHRvIGxvYWQgJXMgLi4uXG4iCisjfiBtc2dzdHIgIkt1cmkgSWJpcmltbyIKKworIywgZnV6enkKKyN+IG1zZ2lkICJFcnJvciBsb2FkaW5nICVzXG4iCisjfiBtc2dzdHIgIkl0YW5naXJhLi4uIgorCisjLCBmdXp6eQorI34gbXNnaWQgIkxvYWRlZCAlZCBwbHVnaW5zIHdpdGggJWQgJXMuXG4iCisjfiBtc2dzdHIgIk5hOiIKZGlmZiAtLWdpdCBhL3BvL3NrLmdtbyBiL3BvL3NrLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzU3NzMwCi0tLSAvZGV2L251bGwKKysrIGIvcG8vc2suZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL3NrLnBvIGIvcG8vc2sucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRhNGNmMAotLS0gL2Rldi9udWxsCisrKyBiL3BvL3NrLnBvCkBAIC0wLDAgKzEsMTI3MyBAQAorIyB0cmFuc2xhdGlvbiBvZiBzay5wbyB0byBTbG92YWsKKyMgU2xvdmFrIHRyYW5zbGF0aW9uIG9mIGdzdHJlYW1lci4KKyMgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IGdzdHJlYW1lcidzIENPUFlSSUdIVCBIT0xERVIKKyMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyMKKyMgUGV0ZXIgVHVow6Fyc2t5IDx0dWhhcnNreUBtaXNiYi5zaz4sIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAuCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnc3RyZWFtZXIgMC4xMC4zMC4zXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDktMjkgMTQ6NTUrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTAtMTEtMDggMTY6MTMrMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogUGV0ZXIgVHVow6Fyc2t5IDx0dWhhcnNreUBtaXNiYi5zaz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBTbG92YWsgPHNrLWkxOG5AbGlzdHMubGludXguc2s+XG4iCisiTGFuZ3VhZ2U6IHNrXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0zOyBwbHVyYWw9KG4lMTA9PTEgJiYgbiUxMDAhPTExID8gMCA6IG4lMTA+PTIgJiYgbiIKKyIlMTA8PTQgJiYgKG4lMTAwPDEwIHx8IG4lMTAwPj0yMCkgPyAxIDogMik7XG4iCisiWC1HZW5lcmF0b3I6IEtCYWJlbCAxLjExLjRcbiIKKyJYLVBvZWRpdC1MYW5ndWFnZTogU2xvdmFrXG4iCisiWC1Qb2VkaXQtQ291bnRyeTogU0xPVkFLSUFcbiIKKworbXNnaWQgIlByaW50IHRoZSBHU3RyZWFtZXIgdmVyc2lvbiIKK21zZ3N0ciAiVnlww61zYcWlIHZlcnppdSBHU3RyZWFtZXIiCisKK21zZ2lkICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKK21zZ3N0ciAiQ2jDoXBhxaUgdsWhZXRreSB2YXJvdmFuaWEgYWtvIHrDoXZhxb5uw6kiCisKK21zZ2lkICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKK21zZ3N0ciAiVnlww61zYcWlIGRvc3R1cG7DqSBsYWRpYWNlIGthdGVnw7NyaWUgYSBza29uxI1pxaUiCisKK21zZ2lkICIiCisiRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmcm9tIDEgKG9ubHkgZXJyb3IpIHRvIDUgKGFueXRoaW5nKSBvciAwIGZvciBubyBvdXRwdXQiCittc2dzdHIgIiIKKyJQcmVkdm9sZW7DoSDDunJvdmXFiCBsYWRlbmlhIG9kIDEgKGxlbiBjaHlieSkgcG8gNSAodsWhZXRrbykgYWxlYm8gMCAoYmV6ICIKKyJ2w71zdHVwdSkiCisKK21zZ2lkICJMRVZFTCIKK21zZ3N0ciAiw5pST1ZFxYciCisKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCisidGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgorbXNnc3RyICIiCisixIxpYXJrYW1pIG9kZGVsZW7DvSB6b3puYW0gZHZvasOtYyBuw6F6b3Zfa2F0ZWfDs3JpZTrDunJvdmXFiCBwcmUgbmFzdGF2ZW5pZSAiCisixaFwZWNpZmlja8O9Y2ggw7pyb3Zuw60gcHJlIGplZG5vdGxpdsOpIGthdGVnw7NyaWUuIFByw61rbGFkOiBHU1RfQVVUT1BMVUc6NSwiCisiR1NUX0VMRU1FTlRfKjozIgorCittc2dpZCAiTElTVCIKK21zZ3N0ciAiWk9aTkFNIgorCittc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCittc2dzdHIgIlpha8OhemHFpSBmYXJlYm7DvSBsYWRpYWNpIHbDvXN0dXAiCisKK21zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKK21zZ3N0ciAiWmFrw6F6YcWlIGxhZGVuaWUiCisKK21zZ2lkICJFbmFibGUgdmVyYm9zZSBwbHVnaW4gbG9hZGluZyBkaWFnbm9zdGljcyIKK21zZ3N0ciAiUG92b2xpxaUgcG9kcm9ibsO6IGRpYWdub3N0aWt1IG5hxI3DrXRhdmFuaWEgesOhc3V2bsO9Y2ggbW9kdWxvdiIKKworbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCittc2dzdHIgIkR2b2pib2Rrb3Ugb2RkZWxlbsOpIGNlc3R5LCBrdG9yw6kgb2JzYWh1asO6IHrDoXN1dm7DqSBtb2R1bHkiCisKK21zZ2lkICJQQVRIUyIKK21zZ3N0ciAiQ0VTVFkiCisKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCisiZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgorbXNnc3RyICIiCisixIxpYXJrYW1pIG9kZGVsZW7DvSB6b3puYW0gesOhc3V2bsO9Y2ggbW9kdWxvdiwga3RvcsOpIHNhIG1hasO6IHByZWRuYcSNw610YcWlIHBvcHJpICIKKyJ6b3puYW1lLCBrdG9yw70gamUgdWxvxb5lbsO9IHYgcHJlbWVubmVqIHByb3N0cmVkaWEgR1NUX1BMVUdJTl9QQVRIIgorCittc2dpZCAiUExVR0lOUyIKK21zZ3N0ciAiWsOBU1VWTsOJIE1PRFVMWSIKKworbXNnaWQgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCittc2dzdHIgIlpha8OhemHFpSB6YWNoeXTDoXZhbmllIGNow71iIHNlZ21lbnTDoWNpZSBwb8SNYXMgbmHEjcOtdGFuaWEgesOhc3V2bsOpaG8gbW9kdWx1IgorCittc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIlpha8OhemHFpSBha3R1YWxpesOhY2l1IHJlZ2lzdHJvdiIKKworbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIlpha8OhemHFpSB2eXR2w6FyYW5pZSBwb21vY27DvWNoIHByb2Nlc292IHBvxI1hcyBza2Vub3ZhbmlhIHJlZ2lzdHJvdiIKKworbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgorbXNnc3RyICJNb8W+bm9zdGkgcHJlIEdTdHJlYW1lciIKKworbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgIlpvYnJhemnFpSBtb8W+bm9zdGkgcHJlIEdTdHJlYW1lciIKKworbXNnaWQgIlVua25vd24gb3B0aW9uIgorbXNnc3RyICJOZXpuw6FtYSBtb8W+bm9zxaUiCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIGNvcmUgbGlicmFyeSBlcnJvci4iCittc2dzdHIgIkdTdHJlYW1lciBuYXJhemlsIG5hIHbFoWVvYmVjbsO6IGNoeWJ1IGhsYXZuZWoga25pxb5uaWNlLiIKKworbXNnaWQgIiIKKyJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuIgorbXNnc3RyICIiCisiVsO9dm9qw6FyaSBHU3RyZWFtZXIgYm9saSBwcsOtbGnFoSBsZW5pdsOtIG5hIHRvLCBhYnkgdGVqdG8gY2h5YmUgcHJpcmFkaWxpIGvDs2QuICIKKyJPaGzDoXN0ZSBwcm9zw61tIHTDunRvIGNoeWJ1LiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY29kZSBub3QgaW1wbGVtZW50ZWQuIgorbXNnc3RyICIiCisiVm7DunRvcm7DoSBjaHliYSBHU3RyZWFtZXI6IGvDs2QgbmVib2wgaW1wbGVtZW50b3ZhbsO9LiBPaGzDoXN0ZSBwcm9zw61tIHTDunRvICIKKyJjaHlidS4iCisKK21zZ2lkICIiCisiR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkIGFuZCBzb21lIGVsZW1lbnQgZmFpbGVkIHRvIHBvc3QgYSAiCisicHJvcGVyIGVycm9yIG1lc3NhZ2Ugd2l0aCB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZS4iCittc2dzdHIgIiIKKyJDaHliYSBHU3RyZWFtZXI6IHpseWhhbGEgem1lbmEgc3RhdnUgYSBuaWVrdG9yw70gcHJ2b2sgbmVkb2vDoXphbCBwb3NsYcWlICIKKyJwYXRyacSNbsOpIGhsw6FzZW5pZSBvIGNoeWJlIHMgZMO0dm9kb20gemx5aGFuaWEuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCittc2dzdHIgIiIKKyJWbsO6dG9ybsOhIGNoeWJhIEdTdHJlYW1lcjogcHJvYmzDqW0gcHJpIHZ5cGzFiG92YW7DrS4gT2hsw6FzdGUgcHJvc8OtbSB0w7p0byBjaHlidS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiIKK21zZ3N0ciAiIgorIlZuw7p0b3Juw6EgY2h5YmEgR1N0cmVhbWVyOiBwcm9ibMOpbSBzIHZsw6FrbmFtaS4gT2hsw6FzdGUgcHJvc8OtbSB0w7p0byBjaHlidS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uIgorbXNnc3RyICIiCisiVm7DunRvcm7DoSBjaHliYSBHU3RyZWFtZXI6IHByb2Jsw6ltIHByaSB2eWplZG7DoXZhbsOtLiBPaGzDoXN0ZSBwcm9zw61tIHTDunRvIGNoeWJ1LiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogZXZlbnQgcHJvYmxlbS4iCittc2dzdHIgIiIKKyJWbsO6dG9ybsOhIGNoeWJhIEdTdHJlYW1lcjogcHJvYmzDqW0gcyB1ZGFsb3PFpWFtaS4gT2hsw6FzdGUgcHJvc8OtbSB0w7p0byBjaHlidS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4iCittc2dzdHIgIiIKKyJWbsO6dG9ybsOhIGNoeWJhIEdTdHJlYW1lcjogcHJvYmzDqW0gcyBuYXN0YXZlbsOtbSBwb3rDrWNpZS4gT2hsw6FzdGUgcHJvc8OtbSB0w7p0byAiCisiY2h5YnUuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgorbXNnc3RyICIiCisiVm7DunRvcm7DoSBjaHliYSBHU3RyZWFtZXI6IHByb2Jsw6ltIHNjaG9wbm9zdMOtLiBPaGzDoXN0ZSBwcm9zw61tIHTDunRvIGNoeWJ1LiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGFnIHByb2JsZW0uIgorbXNnc3RyICIiCisiVm7DunRvcm7DoSBjaHliYSBHU3RyZWFtZXI6IHByb2Jsw6ltIHNvIHpuYcSNa2FtaS4gT2hsw6FzdGUgcHJvc8OtbSB0w7p0byBjaHlidS4iCisKK21zZ2lkICJZb3VyIEdTdHJlYW1lciBpbnN0YWxsYXRpb24gaXMgbWlzc2luZyBhIHBsdWctaW4uIgorbXNnc3RyICJWYcWhZWogaW7FoXRhbMOhY2lpIEdTdHJlYW1lciBjaMO9YmEgesOhc3V2bsO9IG1vZHVsLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2xvY2sgcHJvYmxlbS4iCittc2dzdHIgIiIKKyJWbsO6dG9ybsOhIGNoeWJhIEdTdHJlYW1lcjogcHJvYmzDqW0gcyDEjWFzb3ZhbsOtbS4gT2hsw6FzdGUgcHJvc8OtbSB0w7p0byBjaHlidS4iCisKK21zZ2lkICIiCisiVGhpcyBhcHBsaWNhdGlvbiBpcyB0cnlpbmcgdG8gdXNlIEdTdHJlYW1lciBmdW5jdGlvbmFsaXR5IHRoYXQgaGFzIGJlZW4gIgorImRpc2FibGVkLiIKK21zZ3N0ciAiIgorIlTDoXRvIGFwbGlrw6FjaWEgc2EgcG9rw7rFoWEgcG91xb5pxaUgdGFrw7ogZnVua2Npb25hbGl0dSBHU3RyZWFtZXIsIGt0b3LDoSBqZSAiCisidnlwbnV0w6EuIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIgbmFyYXppbCBuYSB2xaFlb2JlY27DuiBjaHlidSBwb2Rwb3JuZWoga25pxb5uaWNlLiIKKworbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIk5lcG9kYXJpbG8gc2EgaW5pY2lhbGl6b3ZhxaUgcG9kcG9ybsO6IGtuacW+bmljdS4iCisKK21zZ2lkICJDb3VsZCBub3QgY2xvc2Ugc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiTmVwb2RhcmlsbyBzYSB6YXR2b3JpxaUgcG9kcG9ybsO6IGtuacW+bmljdS4iCisKK21zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIk5lcG9kYXJpbG8gc2EgbmFzdGF2acWlIHBvZHBvcm7DuiBrbmnFvm5pY3UuIgorCittc2dpZCAiRW5jb2RpbmcgZXJyb3IuIgorbXNnc3RyICJDaHliYSBwcmkga8OzZG92YW7DrS4iCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHJlc291cmNlIGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIG5hcmF6aWwgbmEgdsWhZW9iZWNuw7ogY2h5YnUgemRyb2pvdi4iCisKK21zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgorbXNnc3RyICJaZHJvaiBzYSBuZW5hxaFpZWwuIgorCittc2dpZCAiUmVzb3VyY2UgYnVzeSBvciBub3QgYXZhaWxhYmxlLiIKK21zZ3N0ciAiWmRyb2ogc2EgcG91xb7DrXZhIGFsZWJvIG5pZSBqZSBrIGRpc3BvesOtY2lpLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiTmVwb2RhcmlsbyBzYSBvdHZvcmnFpSB6ZHJvaiBuYSDEjcOtdGFuaWUuIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJOZXBvZGFyaWxvIHNhIG90dm9yacWlIHpkcm9qIG5hIHrDoXBpcy4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCittc2dzdHIgIk5lcG9kYXJpbG8gc2Egb3R2b3JpxaUgemRyb2ogbmEgxI3DrXRhbmllIGEgesOhcGlzLiIKKworbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSByZXNvdXJjZS4iCittc2dzdHIgIk5lcG9kYXJpbG8gc2EgemF0dm9yacWlIHpkcm9qLiIKKworbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gcmVzb3VyY2UuIgorbXNnc3RyICJOZXBvZGFyaWxvIHNhIMSNw610YcWlIHpvIHpkcm9qYS4iCisKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gcmVzb3VyY2UuIgorbXNnc3RyICJOZXBvZGFyaWxvIHNhIHphcGlzb3ZhxaUgbmEgemRyb2ouIgorCittc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCittc2dzdHIgIk5lcG9kYXJpbG8gc2EgbmFzdGF2acWlIHBvesOtY2l1IG5hIHpkcm9qaS4iCisKK21zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgorbXNnc3RyICJOZXBvZGFyaWxvIHNhIHN5bmNocm9uaXpvdmHFpSBzbyB6ZHJvam9tLiIKKworbXNnaWQgIkNvdWxkIG5vdCBnZXQvc2V0IHNldHRpbmdzIGZyb20vb24gcmVzb3VyY2UuIgorbXNnc3RyICJOZXBvZGFyaWxvIHNhIHrDrXNrYcWlL3VwcmF2acWlIG5hc3RhdmVuaWEgemRyb2phLiIKKworbXNnaWQgIk5vIHNwYWNlIGxlZnQgb24gdGhlIHJlc291cmNlLiIKK21zZ3N0ciAiTmEgemRyb2ppIHXFviBuZXpvc3RhbG8gbWllc3RvLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIG5hcmF6aWwgbmEgdsWhZW9iZWNuw7ogY2h5YnUgcHLDumR1IMO6ZGFqb3YuIgorCittc2dpZCAiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBoYW5kbGluZyBvZiB0aGlzIHN0cmVhbS4gUGxlYXNlIGZpbGUgYSBidWcuIgorbXNnc3RyICIiCisiUHJ2b2sgbmVpbXBsZW1lbnR1amUgb2JzbHVodSB0b2hvdG8gcHLDumR1IMO6ZGFqb3YuIE9obMOhc3RlIHByb3PDrW0gdHV0byBjaHlidS4iCisKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIHR5cGUgb2Ygc3RyZWFtLiIKK21zZ3N0ciAiTmVwb2RhcmlsbyBzYSB6aXN0acWlIHR5cCBwcsO6ZHUgw7pkYWpvdi4iCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgZWxlbWVudC4iCittc2dzdHIgIiIKKyJUZW50byBwcsO6ZCDDumRham92IGplIG9kbGnFoW7DqWhvIHR5cHUsIG5lxb4gamUgc2Nob3Buw70gb2JzbMO6xb5pxaUgdGVudG8gcHJ2b2suIgorCittc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgorbXNnc3RyICIiCisiTmllIGplIGsgZGlzcG96w61jaWkgxb5pYWRueSBrb2Rlaywga3RvcsO9IGJ5IGRva8OhemFsIG9ic2zDusW+acWlIHRlbnRvIHR5cCBwcsO6ZHUgIgorIsO6ZGFqb3YuIgorCittc2dpZCAiQ291bGQgbm90IGRlY29kZSBzdHJlYW0uIgorbXNnc3RyICJOZXBvZGFyaWxvIHNhIGRla8OzZG92YcWlIHByw7pkIMO6ZGFqb3YuIgorCittc2dpZCAiQ291bGQgbm90IGVuY29kZSBzdHJlYW0uIgorbXNnc3RyICJOZXBvZGFyaWxvIHNhIHpha8OzZG92YcWlIHByw7pkIMO6ZGFqb3YuIgorCittc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIk5lcG9kYXJpbG8gc2EgZGVtdWx0aXBsZXhvdmHFpSBwcsO6ZCDDumRham92LiIKKworbXNnaWQgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKK21zZ3N0ciAiTmVwb2RhcmlsbyBzYSBtdWx0aXBsZXhvdmHFpSBwcsO6ZCDDumRham92LiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgaW4gdGhlIHdyb25nIGZvcm1hdC4iCittc2dzdHIgIlRlbnRvIHByw7pkIMO6ZGFqb3YgamUgdiBuZXNwcsOhdm5vbSBmb3Jtw6F0ZS4iCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiVGVudG8gcHLDumQgw7pkYWpvdiBqZSDFoWlmcm92YW7DvSBhIGRlxaFpZnJvdmFuaWUgbmllIGplIHBvZHBvcm92YW7DqSIKKworbXNnaWQgIiIKKyJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgY2FuJ3QgYmUgZGVjcnlwdGVkIGJlY2F1c2Ugbm8gc3VpdGFibGUga2V5IGhhcyAiCisiYmVlbiBzdXBwbGllZC4iCittc2dzdHIgIiIKKyJUZW50byBwcsO6ZCDDumRham92IGplIMWhaWZyb3ZhbsO9IGEgbmVkw6Egc2EgZGXFoWlmcm92YcWlLCBwcmV0b8W+ZSBuaWUgamUgayAiCisiZGlzcG96w61jaWkgdmhvZG7DvSBrxL7DusSNLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMuIgorbXNnc3RyICLFvWlhZG5hIGNoeWJvdsOhIHNwcsOhdmEgcHJlIGRvbcOpbnUgJXMuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcyBhbmQgY29kZSAlZC4iCittc2dzdHIgIsW9aWFkbmEgxaF0YW5kYXJkbsOhIGNoeWJvdsOhIHNwcsOhdmEgcHJlIGRvbcOpbnUgJXMgYSBrw7NkICVkLiIKKworbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKK21zZ3N0ciAiVnlicmFuw70gxI1hc292YcSNIHNhIG5lZMOhIHBvdcW+acWlIHYgcsO6cmUuIgorCittc2dpZCAidGl0bGUiCittc2dzdHIgIm7DoXpvdiIKKworbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUiCittc2dzdHIgIsSNYXN0byBwb3XFvsOtdmFuw70gbsOhem92IgorCittc2dpZCAidGl0bGUgc29ydG5hbWUiCittc2dzdHIgIm7DoXpvdi90cmllZGVuaWUiCisKK21zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICLEjWFzdG8gcG91xb7DrXZhbsO9IG7DoXpvdiwgbmEgw7rEjWVseSB0cmllZGVuaWEiCisKK21zZ2lkICJhcnRpc3QiCittc2dzdHIgInVtZWxlYyIKKworbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAib3NvYnkgem9kcG92ZWRuw6kgemEgbmFocsOhdmt1IgorCittc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgorbXNnc3RyICJ1bWVsZWMvdHJpZWRlbmllIgorCittc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJvc29ieSB6b2Rwb3ZlZG7DqSB6YSBuYWhyw6F2a3UsIG5hIMO6xI1lbHkgdHJpZWRlbmlhIgorCittc2dpZCAiYWxidW0iCittc2dzdHIgImFsYnVtIgorCittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiCittc2dzdHIgImFsYnVtIG9ic2FodWrDumNpIHRpZXRvIMO6ZGFqZSIKKworbXNnaWQgImFsYnVtIHNvcnRuYW1lIgorbXNnc3RyICJhbGJ1bS90cmllZGVuaWUiCisKK21zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiYWxidW0gb2JzYWh1asO6Y2kgdGlldG8gw7pkYWplLCBuYSDDusSNZWx5IHRyaWVkZW5pYSIKKworbXNnaWQgImFsYnVtIGFydGlzdCIKK21zZ3N0ciAidW1lbGVjIGFsYnVtdSIKKworbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIGRpc3BsYXllZCIKK21zZ3N0ciAiVW1lbGVjIGNlbMOpaG8gYWxidW11LCBha28gc2EgbcOhIHpvYnJhemnFpSIKKworbXNnaWQgImFsYnVtIGFydGlzdCBzb3J0bmFtZSIKK21zZ3N0ciAibWVubyB1bWVsY2EgYWxidW11IHByZSB0cmllZGVuaWUiCisKK21zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiCittc2dzdHIgIlVtZWxlYyBjZWzDqWhvIGFsYnVtdSwgYWtvIHNhIG3DoSB6b3JhZGnFpSIKKworbXNnaWQgImRhdGUiCittc2dzdHIgImTDoXR1bSIKKworbXNnaWQgImRhdGUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR0RhdGUgc3RydWN0dXJlKSIKK21zZ3N0ciAiZMOhdHVtLCBrZWR5IGJvbGkgdGlldG8gw7pkYWplIHZ5dHZvcmVuw6kgKGFrbyDFoXRydWt0w7pyYSBHRGF0ZSkiCisKK21zZ2lkICJkYXRldGltZSIKK21zZ3N0ciAiZMOhdHVtIGEgxI1hcyIKKworbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKK21zZ3N0ciAiIgorImTDoXR1bSBhIMSNYXMsIGtlZHkgYm9saSB0aWV0byDDumRhamUgdnl0dm9yZW7DqSAoYWtvIMWhdHJ1a3TDunJhIEdzdERhdGVUaW1lKSIKKworbXNnaWQgImdlbnJlIgorbXNnc3RyICLFvsOhbmVyIgorCittc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCittc2dzdHIgIsW+w6FuZXIsIGRvIGt0b3LDqWhvIHBhdHJpYSB0aWV0byDDumRhamUiCisKK21zZ2lkICJjb21tZW50IgorbXNnc3RyICJwb3puw6Fta2EiCisKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKK21zZ3N0ciAidm/Evm7DvSB0ZXh0IGtvbWVudHVqw7pjaSDDumRhamUiCisKK21zZ2lkICJleHRlbmRlZCBjb21tZW50IgorbXNnc3RyICJyb3rFocOtcmVuw6EgcG96bsOhbWthIgorCittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgorbXNnc3RyICIiCisidnnEjWlzdGnFpSB0ZXh0IHBvem7DoW1reSBrdSDDumRham9tIHZvIGZvcm3DoXRlIGtleT12YWx1ZSBhbGVibyBrZXlbZW5dPWNvbW1lbnQgIgorCittc2dpZCAidHJhY2sgbnVtYmVyIgorbXNnc3RyICLEjcOtc2xvIHN0b3B5IgorCittc2dpZCAidHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgIsSNw61zbG8gc3RvcHkgdiByw6FtY2kgemJpZXJreSIKKworbXNnaWQgInRyYWNrIGNvdW50IgorbXNnc3RyICJwb8SNZXQgc3TDtHAiCisKK21zZ2lkICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgorbXNnc3RyICJwb8SNZXQgc3TDtHAgdiB6YmllcmtlLCBkbyBrdG9yZWogcGF0csOtIHTDoXRvIHN0b3BhIgorCittc2dpZCAiZGlzYyBudW1iZXIiCittc2dzdHIgIsSNw61zbG8gZGlza3UiCisKK21zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICLEjcOtc2xvIGRpc2t1IHYgcsOhbWNpIHpiaWVya3kiCisKK21zZ2lkICJkaXNjIGNvdW50IgorbXNnc3RyICJwb8SNZXQgZGlza292IgorCittc2dpZCAiY291bnQgb2YgZGlzY3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyBkaXNjIGJlbG9uZ3MgdG8iCittc2dzdHIgInBvxI1ldCBkaXNrb3YgdiByw6FtY2kgemJpZXJreSwgZG8ga3RvcmVqIHRlbnRvIGRpc2sgcGF0csOtIgorCittc2dpZCAibG9jYXRpb24iCittc2dzdHIgInVtaWVzdG5lbmllIgorCittc2dpZCAiIgorIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgorImlzIGhvc3RlZCkiCittc2dzdHIgIiIKKyJaZHJvaiBtw6lkaWEsIGFrbyBuYXByw61rbGFkIFVSSSAobWllc3RvLCBrZGUgamUgdWxvxb5lbsO9IG9yaWdpbsOhbCB0b2h0byBzw7pib3J1ICIKKyJhbGVibyBwcsO6ZHUgw7pkYWpvdikiCisKK21zZ2lkICJob21lcGFnZSIKK21zZ3N0ciAiZG9tb3Zza8OhIHN0csOhbmthIgorCittc2dpZCAiSG9tZXBhZ2UgZm9yIHRoaXMgbWVkaWEgKGkuZS4gYXJ0aXN0IG9yIG1vdmllIGhvbWVwYWdlKSIKK21zZ3N0ciAiRG9tb3Zza8OhIHN0csOhbmthIHRvaHRvIG3DqWRpYSAobmFwci4gdW1lbGNhLCBhbGVibyBmaWxtdSkiCisKK21zZ2lkICJkZXNjcmlwdGlvbiIKK21zZ3N0ciAicG9waXMiCisKK21zZ2lkICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCittc2dzdHIgImtyw6F0a3kgdGV4dCBwb3Bpc3Vqw7pjaSBvYnNhaCDDumRham92IgorCittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAidmVyemlhIgorCittc2dpZCAidmVyc2lvbiBvZiB0aGlzIGRhdGEiCittc2dzdHIgInZlcnppYSB0w71jaHRvIMO6ZGFqb3YiCisKK21zZ2lkICJJU1JDIgorbXNnc3RyICJJU1JDIgorCittc2dpZCAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgorbXNnc3RyICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gdml6IGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCisKK21zZ2lkICJvcmdhbml6YXRpb24iCittc2dzdHIgIm9yZ2FuaXrDoWNpYSIKKworbXNnaWQgImNvcHlyaWdodCIKK21zZ3N0ciAiY29weXJpZ2h0IgorCittc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAicG96bsOhbWthIG8gYXV0b3Jza8O9Y2ggcHLDoXZhY2ggayDDumRham9tIgorCittc2dpZCAiY29weXJpZ2h0IHVyaSIKK21zZ3N0ciAidXJpIHByZSBjb3B5cmlnaHQiCisKK21zZ2lkICJVUkkgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgIlVSSSBwcmUgcG96bsOhbWt1IG8gYXV0b3Jza8O9Y2ggcHLDoXZhY2ggw7pkYWpvdiIKKworIywgZnV6enkKK21zZ2lkICJlbmNvZGVkIGJ5IgorbXNnc3RyICJrb2TDqXIiCisKK21zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICJjb250YWN0IgorbXNnc3RyICJrb250YWt0IgorCittc2dpZCAiY29udGFjdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAia29udGFrdG7DqSBpbmZvcm3DoWNpZSIKKworbXNnaWQgImxpY2Vuc2UiCittc2dzdHIgImxpY2VuY2lhIgorCittc2dpZCAibGljZW5zZSBvZiBkYXRhIgorbXNnc3RyICJsaWNlbmNpYSDDumRham92IgorCittc2dpZCAibGljZW5zZSB1cmkiCittc2dzdHIgIlVSSSBsaWNlbmNpZSIKKworbXNnaWQgIlVSSSB0byB0aGUgbGljZW5zZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiVVJJIGt1IGxpY2VuY2lpIHTDvWNodG8gw7pkYWpvdiIKKworbXNnaWQgInBlcmZvcm1lciIKK21zZ3N0ciAidsO9a29ubsO9IHVtZWxlYyIKKworbXNnaWQgInBlcnNvbihzKSBwZXJmb3JtaW5nIgorbXNnc3RyICJ2eXN0dXB1asO6Y2Ugb3NvYnkgIgorCittc2dpZCAiY29tcG9zZXIiCittc2dzdHIgInNrbGFkYXRlxL4iCisKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciCittc2dzdHIgIm9zb2J5IHpvZHBvdmVkbsOpIHphIHNrbGFkYnUgbmFocsOhdmt5IgorCittc2dpZCAiZHVyYXRpb24iCittc2dzdHIgInRydmFuaWUiCisKK21zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKK21zZ3N0ciAiZMS6xb5rYSB2IGplZG5vdGvDoWNoIMSNYXN1IEdTdHJlYW1lciAobmFub3Nla3VuZMOhY2gpIgorCittc2dpZCAiY29kZWMiCittc2dzdHIgImtvZGVrIgorCittc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJrb2RlaywgdiBrdG9yb20gc8O6IMO6ZGFqZSB1bG/FvmVuw6kiCisKK21zZ2lkICJ2aWRlbyBjb2RlYyIKK21zZ3N0ciAidmlkZW8ga29kZWsiCisKK21zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImtvZGVrLCB2IGt0b3JvbSBzw7ogdmlkZW8gw7pkYWplIHVsb8W+ZW7DqSIKKworbXNnaWQgImF1ZGlvIGNvZGVjIgorbXNnc3RyICJ6dnVrb3bDvSBrb2RlayIKKworbXNnaWQgImNvZGVjIHRoZSBhdWRpbyBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAia29kZWssIHYga3Rvcm9tIHPDuiB6dnVrb3bDqSDDumRhamUgdWxvxb5lbsOpIgorCittc2dpZCAic3VidGl0bGUgY29kZWMiCittc2dzdHIgImtvZGVrIHByZSB0aXR1bGt5IgorCittc2dpZCAiY29kZWMgdGhlIHN1YnRpdGxlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJrb2RlayBwcmUgdGl0dWxreSBzYSBuYWNow6FkemEgdiIKKworbXNnaWQgImNvbnRhaW5lciBmb3JtYXQiCittc2dzdHIgImZvcm3DoXQga29udGFqbmVydSIKKworbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJmb3Jtw6F0IGtvbnRham5lcnUsIHYga3Rvcm9tIHPDuiB1bG/FvmVuw6kgZMOhdGEiCisKK21zZ2lkICJiaXRyYXRlIgorbXNnc3RyICJCaXRvdsOhIHLDvWNobG9zxaUiCisKK21zZ2lkICJleGFjdCBvciBhdmVyYWdlIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJwcmVzbsOhIGFsZWJvIHByaWVtZXJuw6EgYml0b3bDoSByw71jaGxvc8WlIHYgYml0b2NoL3MiCisKK21zZ2lkICJub21pbmFsIGJpdHJhdGUiCittc2dzdHIgIm5vbWluw6FsbmEgYml0b3bDoSByw71jaGxvc8WlIgorCittc2dpZCAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAibm9taW7DoWxuYSBiaXRvdsOhIHLDvWNobG9zxaUgdiBiaXRvY2gvcyIKKworbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKK21zZ3N0ciAibWluaW3DoWxuYSBiaXRvdsOhIHLDvWNobG9zxaUiCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJtaW5pbcOhbG5hIGJpdG92w6EgcsO9Y2hsb3PFpSB2IGJpdG9jaC9zIgorCittc2dpZCAibWF4aW11bSBiaXRyYXRlIgorbXNnc3RyICJtYXhpbcOhbG5hIGJpdG92w6EgcsO9Y2hsb3PFpSIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgIm1heGltw6FsbmEgYml0b3bDoSByw71jaGxvc8WlIHYgYml0b2NoL3MiCisKK21zZ2lkICJlbmNvZGVyIgorbXNnc3RyICJrb2TDqXIiCisKK21zZ2lkICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgorbXNnc3RyICJrb2TDqXIgcG91xb7DrXZhbsO9IHByZSBrw7Nkb3ZhbmllIHRvaG90byBwcsO6ZHUgw7pkYWpvdiIKKworbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKK21zZ3N0ciAidmVyemlhIGtvZMOpcnUiCisKK21zZ2lkICJ2ZXJzaW9uIG9mIHRoZSBlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgorbXNnc3RyICJ2ZXJ6aWEga29kw6lydSBwb3XFvsOtdmFuw6lobyBwcmUga8OzZG92YW5pZSB0b2h0byBwcsO6ZHUiCisKK21zZ2lkICJzZXJpYWwiCittc2dzdHIgInPDqXJpb3bDqSIKKworbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCittc2dzdHIgInPDqXJpb3bDqSDEjcOtc2xvIHN0b3B5IgorCittc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgorbXNnc3RyICJwcmVocsOhdmFjw60gemlzayBzdG9weSIKKworbXNnaWQgInRyYWNrIGdhaW4gaW4gZGIiCittc2dzdHIgInppc2sgc3RvcHkgdiBkYiIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgcGVhayIKK21zZ3N0ciAixaFwacSNa2EgcHJlaHLDoXZhY2llaG8gemlza3Ugc3RvcHkiCisKK21zZ2lkICJwZWFrIG9mIHRoZSB0cmFjayIKK21zZ3N0ciAixaFwacSNa2Egc3RvcHkiCisKK21zZ2lkICJyZXBsYXlnYWluIGFsYnVtIGdhaW4iCittc2dzdHIgInByZWhyw6F2YWPDrSB6aXNrIGFsYnVtdSIKKworbXNnaWQgImFsYnVtIGdhaW4gaW4gZGIiCittc2dzdHIgInppc2sgYWxidW11IHYgZGIiCisKK21zZ2lkICJyZXBsYXlnYWluIGFsYnVtIHBlYWsiCittc2dzdHIgIsWhcGnEjWthIHByZWhyw6F2YWNpZWhvIHppc2t1IGFsYnVtdSIKKworbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgorbXNnc3RyICLFoXBpxI1rYSBhbGJ1bXUiCisKK21zZ2lkICJyZXBsYXlnYWluIHJlZmVyZW5jZSBsZXZlbCIKK21zZ3N0ciAicmVmZXJlbsSNbsOhIMO6cm92ZcWIIHByZWhyw6F2YWNpZWhvIHppc2t1IHN0b3B5IgorCittc2dpZCAicmVmZXJlbmNlIGxldmVsIG9mIHRyYWNrIGFuZCBhbGJ1bSBnYWluIHZhbHVlcyIKK21zZ3N0ciAiUmVmZXJlbsSNbsOhIMO6cm92ZcWIIHppc2t1IHByZSBzdG9wdSBhIHByZSBhbGJ1bSIKKworbXNnaWQgImxhbmd1YWdlIGNvZGUiCittc2dzdHIgImphenlrb3bDvSBrw7NkIgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIgorbXNnc3RyICJqYXp5a292w70ga8OzZCBwcmUgdGVudG8gcHLDumQgw7pkYWpvdiwgdiBzw7psYWRlIHMgSVNPLTYzOS0xIgorCittc2dpZCAiaW1hZ2UiCittc2dzdHIgIm9icsOhem9rIgorCittc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAib2Jyw6F6b2sgem9kcG92ZWRhasO6Y2kgayB0b211dG8gcHLDumR1IMO6ZGFqb3YiCisKKyMuIFRSQU5TTEFUT1JTOiAncHJldmlldyBpbWFnZScgPSBpbWFnZSB0aGF0IHNob3dzIGEgcHJldmlldyBvZiB0aGUgZnVsbCBpbWFnZQorbXNnaWQgInByZXZpZXcgaW1hZ2UiCittc2dzdHIgInVrw6HFvmthIG9icsOhemt1IgorCittc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICJ1a8Ohxb5rYSBvYnLDoXprdSB6b2Rwb3ZlZGFqw7pjYSB0b211dG8gcHLDumR1IMO6ZGFqb3YiCisKK21zZ2lkICJhdHRhY2htZW50IgorbXNnc3RyICJwcsOtbG9oYSIKKworbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgInPDumJvciBwcmlwb2plbsO9IGt1IHRvbXV0byBwcsO6ZHUgw7pkYWpvdiIKKworbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCittc2dzdHIgIsO6ZGVyb3YgemEgbWluw7p0dSIKKworbXNnaWQgIm51bWJlciBvZiBiZWF0cyBwZXIgbWludXRlIGluIGF1ZGlvIgorbXNnc3RyICJwb8SNZXQgw7pkZXJvdiB6YSBtaW7DunR1LCB2byB6dnVrdSIKKworbXNnaWQgImtleXdvcmRzIgorbXNnc3RyICJrxL7DusSNb3bDqSBzbG92w6EiCisKK21zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKK21zZ3N0ciAia8S+w7rEjW92w6kgc2xvdsOhLCBvcGlzdWrDumNlIG9ic2FoLCBvZGRlbGVuw6kgxI1pYXJrb3UiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKK21zZ3N0ciAiZ2VvZ3JhZmlja8OhIHBvbG9oYSIKKworbXNnaWQgIiIKKyJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgorInByb2R1Y2VkIgorbXNnc3RyICIiCisib3BpcyBtaWVzdGEsIHYgxL51ZHNrZWogcmXEjWksIGtkZSBib2xpIHRpZXRvIG3DqWRpw6EgbmFocmF0w6kgYWxlYm8gcHJvZHVrb3ZhbsOpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGxhdGl0dWRlIgorbXNnc3RyICJ6ZW1lcGlzbsOhIMWhw61ya2EiCisKK21zZ2lkICIiCisiZ2VvIGxhdGl0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCisiZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIGVxdWF0b3IsIG5lZ2F0aXZlIHZhbHVlcyBmb3IgIgorInNvdXRoZXJuIGxhdGl0dWRlcykiCittc2dzdHIgIiIKKyJ6ZW1lcGlzbsOhIMWhw61ya2EgbWllc3RhLCBrZGUgYm9saSB0aWV0byBtw6lkacOhIG5haHJhdMOpIGFsZWJvIHByb2R1a292YW7DqSwgdiAiCisic3R1cMWIb2NoIHBvZMS+YSBXR1M4NCAoMCBwcmUgcm92bsOtaywgesOhcG9ybsOpIGhvZG5vdHkgcHJlIGp1xb5uw6kgxaHDrXJreSkiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbG9uZ2l0dWRlIgorbXNnc3RyICJ6ZW1lcGlzbsOhIGTEusW+a2EiCisKK21zZ2lkICIiCisiZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCisibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgorbXNnc3RyICIiCisiemVtZXBpc27DoSBkxLrFvmthIG1pZXN0YSwga2RlIGJvbGkgdGlldG8gbcOpZGnDoSBuYWhyYXTDqSBhbGVibyBwcm9kdWtvdmFuw6ksIHYgIgorInN0dXDFiG9jaCBwb2TEvmEgV0dTODQgKDAgcHJlIG51bHTDvSBwb2x1ZG7DrWsgdiBHcmVlbndpY2gvVUssIHrDoXBvcm7DqSBob2Rub3R5ICIKKyJwcmUgesOhcGFkbsOpIGTEusW+a3kpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKK21zZ3N0ciAiemVtZXBpc27DoSBuYWRtb3Jza8OhIHbDvcWha2EiCisKK21zZ2lkICIiCisiZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKKyJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgorbXNnc3RyICIiCisiemVtZXBpc27DoSBuYWRtb3Jza8OhIHbDvcWha2EgIG1pZXN0YSwga2RlIGJvbGkgdGlldG8gbcOpZGnDoSBuYWhyYXTDqSBhbGVibyAiCisicHJvZHVrb3ZhbsOpLCB2IG1ldHJvY2ggcG9kxL5hIFdHUzg0ICgwIGplIHByaWVtZXJuw6EgaGxhZGluYSBtb3JhKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBjb3VudHJ5IgorbXNnc3RyICJ6ZW1lcGlzbsOhIHBvbG9oYSBrcmFqaW5hIgorCittc2dpZCAiY291bnRyeSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCittc2dzdHIgImtyYWppbmEgKHYgYW5nbGnEjXRpbmUpLCBrZGUgYm9sbyB0b3RvIG3DqWRpdW0gbmFocmF0w6kgYWxlYm8gcHJvZHVrb3ZhbsOpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCittc2dzdHIgInplbWVwaXNuw6EgcG9sb2hhIG1lc3RvIgorCittc2dpZCAiY2l0eSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCittc2dzdHIgIm1lc3RvICh2IGFuZ2xpxI10aW5lKSwga2RlIGJvbG8gdG90byBtw6lkaXVtIG5haHJhdMOpIGFsZWJvIHByb2R1a292YW7DqSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKK21zZ3N0ciAiemVtZXBpc27DoSBwb2xvaGEgdXByZXNuZW5pZSIKKworbXNnaWQgIiIKKyJhIGxvY2F0aW9uIHdoaXRoaW4gYSBjaXR5IHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZCBvciBjcmVhdGVkIChlLmcuICIKKyJ0aGUgbmVpZ2hib3Job29kKSIKK21zZ3N0ciAiIgorInVtaWVzdG5lbmllIHYgcsOhbWNpIG1lc3RhLCBrZGUgYm9sbyB0b3RvIG3DqWRpdW0gdnlwcm9kdWtvdmFuw6kgYWxlYm8gIgorInZ5dHZvcmVuw6kgKG5hcHIuIHYgc3VzZWRzdHZlKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgorbXNnc3RyICJnZW9ncmFmaWNrw6EgcG9sb2hhIHZvZG9yb3Zuw6Egb2RjaMO9bGthIgorCittc2dpZCAiZXhwZWN0ZWQgZXJyb3Igb2YgdGhlIGhvcml6b250YWwgcG9zaXRpb25pbmcgbWVhc3VyZXMgKGluIG1ldGVycykiCittc2dzdHIgIm/EjWFrw6F2YW7DoSBvZGNow71sa2Egdm9kb3Jvdm7DqWhvIHVtaWVzdG5lbmlhICh2IG1ldHJvY2gpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgorbXNnc3RyICJ6ZW1lcGlzbsOhIHBvbG9oYSByw71jaGxvc8WlIHBvaHlidSIKKworbXNnaWQgIiIKKyJtb3ZlbWVudCBzcGVlZCBvZiB0aGUgY2FwdHVyaW5nIGRldmljZSB3aGlsZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIGluIG0vcyIKK21zZ3N0ciAicsO9Y2hsb3PFpSBwb2h5YnUgemFjaHl0w6F2YWrDumNlaG8gemFyaWFkZW5pYSBwb8SNYXMgemFjaHl0w6F2YW5pYSB2IG0vcyIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBkaXJlY3Rpb24iCittc2dzdHIgInplbWVwaXNuw6EgcG9sb2hhIHNtZXIgcG9oeWJ1IgorCittc2dpZCAiIgorImluZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBvZiBhICIKKyJtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgMCAiCisibWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgorbXNnc3RyICIiCisidWthenVqZSBzbWVyIHBvaHlidSB6YXJpYWRlbmlhLCBrdG9yw6kgdnlrb27DoXZhbG8gemFjaHl0w6F2YW5pZSBtw6lkaWEuIEplICIKKyJyZXByZXplbnRvdmFuw70gYWtvIHN0dXBuZSB2IG5lY2Vsb8SNw61zZWxuZWogcmVwcmV6ZW50w6FjaWksIDAgem5hbWVuw6EgIgorImdlb2dyYWZpY2vDvSBzZXZlciwgYSB6dnnFoXVqZSBzYSB2IHNtZXJlIGhvZGlub3bDvWNoIHJ1xI1pxI1pZWsiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCittc2dzdHIgInplbWVwaXNuw6EgcG9sb2hhIHNtZXIgemFjaHl0w6F2YW5pYSIKKworbXNnaWQgIiIKKyJpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nICBhIG1lZGlhLiAiCisiSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCAgcmVwcmVzZW50YXRpb24sIDAgbWVhbnMgdGhlICIKKyJnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKK21zZ3N0ciAiIgorInVrYXp1amUgc21lciwga2FtIHphcmlhZGVuaWUgc21lcm92YWxvIHBvxI1hcyB6YWNoeXTDoXZhbmlhIG3DqWRpYS4gSmUgIgorInJlcHJlemVudG92YW7DvSBha28gc3R1cG5lIHYgbmVjZWxvxI3DrXNlbG5laiByZXByZXplbnTDoWNpaSwgMCB6bmFtZW7DoSAiCisiZ2VvZ3JhZmlja8O9IHNldmVyLCBhIHp2ecWhdWplIHNhIHYgc21lcmUgaG9kaW5vdsO9Y2ggcnXEjWnEjWllayIKKworIy4gVFJBTlNMQVRPUlM6ICdzaG93IG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lJyBoZXJlCittc2dpZCAic2hvdyBuYW1lIgorbXNnc3RyICJuw6F6b3YgxaFvdSIKKworbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCittc2dzdHIgIk7DoXpvdiB0di9wb2RjYXN0L3NlcmnDoWxvdmVqIMWhb3UgeiBrdG9yw6lobyBwb2Now6FkemEgdG90byBtw6lkaXVtIgorCisjLiBUUkFOU0xBVE9SUzogJ3Nob3cgc29ydG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lIGFzIHVzZWQgZm9yIHNvcnRpbmcgcHVycG9zZXMnIGhlcmUKK21zZ2lkICJzaG93IHNvcnRuYW1lIgorbXNnc3RyICJuw6F6b3YgxaFvdSBwcmUgdHJpZWRlbmllIgorCittc2dpZCAiIgorIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20sIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICIiCisiTsOhem92IHR2L3BvZGNhc3Qvc2VyacOhbG92ZWogxaFvdSB6IGt0b3LDqWhvIHBvY2jDoWR6YSB0b3RvIG3DqWRpdW0sIHByZSDDusSNZWx5ICIKKyJ0cmllZGVuaWEiCisKK21zZ2lkICJlcGlzb2RlIG51bWJlciIKK21zZ3N0ciAixI3DrXNsbyBlcGl6w7NkeSIKKworbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICLEjMOtc2xvIGVwaXrDs2R5IHYgdG9tdG8gb2Jkb2LDrSwga3RvcsOpaG8gc8O6xI1hc8Wlb3UgamUgdG90byBtw6lkaXVtIgorCittc2dpZCAic2Vhc29uIG51bWJlciIKK21zZ3N0ciAixI3DrXNsbyBvYmRvYmlhIgorCittc2dpZCAiVGhlIHNlYXNvbiBudW1iZXIgb2YgdGhlIHNob3cgdGhlIG1lZGlhIGlzIHBhcnQgb2YiCittc2dzdHIgIsSMw61zbG8gb2Jkb2JpYSB0ZWp0byDFoW91LCBrdG9yZWogc8O6xI1hc8Wlb3UgamUgdG90byBtw6lkaXVtIgorCittc2dpZCAibHlyaWNzIgorbXNnc3RyICJ0ZXh0IgorCittc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgorbXNnc3RyICJUZXh0IHRvaHRvIG3DqWRpYSwgenZ5xI1ham5lIHNhIHBvdcW+w612YSBwcmkgcGllc8WIYWNoIgorCittc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCittc2dzdHIgIm1lbm8gc2tsYWRhdGXEvmEgcHJlIHRyaWVkZW5pZSIKKworbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZywgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIm9zb2J5IHpvZHBvdmVkbsOpIHphIG5haHLDoXZrdSwgbmEgw7rEjWVseSB0cmllZGVuaWEiCisKK21zZ2lkICJncm91cGluZyIKK21zZ3N0ciAiem9za3Vwb3ZhbmllIgorCittc2dpZCAiIgorIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKKyJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgorbXNnc3RyICIiCisiWm9za3Vww60gc8O6dmlzaWFjZSBtw6lkacOhLCBrdG9yw6kgemFiZXJhasO6IHZpYWNlcm8gc3TDtHAsIGFrbyBuYXByw61rbGFkIHLDtHpuZSAiCisixI1hc3RpIGtvbmNlcnR1LiBUb3RvIGplIHZ5xaHFoWlhIMO6cm92ZcWIIG5lxb4gc3RvcGEsIGFsZSBuacW+xaFpYSBuZcW+IGFsYnVtLiIKKworbXNnaWQgInVzZXIgcmF0aW5nIgorbXNnc3RyICJob2Rub3RlbmllIHBvdcW+w612YXRlxL5hIgorCittc2dpZCAiIgorIlJhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgdXNlci4gVGhlIGhpZ2hlciB0aGUgcmFuaywgdGhlIG1vcmUgdGhlIHVzZXIgbGlrZXMgIgorInRoaXMgbWVkaWEiCittc2dzdHIgIiIKKyJIb2Rub3RlbmllIHBvZMS+YSBwb3XFvsOtdmF0ZcS+YS4gxIzDrW0gdnnFocWhaWUsIHTDvW0gdmlhYyBzYSB0b3RvIG3DqWRpdW0gcMOhxI1pLiIKKworbXNnaWQgImRldmljZSBtYW51ZmFjdHVyZXIiCittc2dzdHIgInbDvXJvYmNhIHphcmlhZGVuaWEiCisKK21zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICJWw71yb2JjYSB6YXJpYWRlbmlhIHBvdcW+aXTDqWhvIG5hIHZ5dHZvcmVuaWUgdG9odG8gbcOpZGlhIgorCittc2dpZCAiZGV2aWNlIG1vZGVsIgorbXNnc3RyICJtb2RlbCB6YXJpYWRlbmlhIgorCittc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICJNb2RlbCB6YXJpYWRlbmlhIHBvdcW+aXTDqWhvIG5hIHZ5dHZvcmVuaWUgdG9odG8gbcOpZGlhIgorCittc2dpZCAiYXBwbGljYXRpb24gbmFtZSIKK21zZ3N0ciAibsOhem92IGFwbGlrw6FjaWUiCisKK21zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCittc2dzdHIgIkFwbGlrw6FjaWEgcG91xb5pdMOhIHByaSB0dm9yYmUgdG9odG8gbcOpZGlhIgorCittc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKK21zZ3N0ciAiZMOhdGEgYXBsaWvDoWNpZSIKKworbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCittc2dzdHIgIsS9dWJvdm/Evm7DqSDDumRhamUgYXBsaWvDoWNpZSwga3RvcsOpIHNhIG1hasO6IHNlcmlhbGl6b3ZhxaUgZG8gbcOpZGlhIgorCittc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCittc2dzdHIgIm9yaWVudMOhY2lhIG9icsOhemt1IgorCittc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgorbXNnc3RyICJBa28gbcOhIGJ5xaUgb2Jyw6F6b2sgb3RvxI1lbsO9IGFsZWJvIHByZXZyw6F0ZW7DvSBwcmVkIGplaG8gem9icmF6ZW7DrW0iCisKK21zZ2lkICIsICIKK21zZ3N0ciAiLCAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAiQ0hZQkE6IG9kIHBydmt1ICVzOiAlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorIlByw61kYXZuw6kgbGFkaWFjZSBpbmZvcm3DoWNpZTpcbiIKKyIlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgInNwZWNpZmllZCBlbXB0eSBiaW4gXCIlc1wiLCBub3QgYWxsb3dlZCIKK21zZ3N0ciAiYm9sIHphZGFuw70gcHLDoXpkbnkgesOhc29ibsOtayBcIiVzXCIsIMSNbyBuaWUgamUgZG92b2xlbsOpIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHNraXBwaW5nIgorbXNnc3RyICJuZWV4aXN0dWplIHrDoXNvYm7DrWsgXCIlc1wiLCBwcmVza2FrdWplbSIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCittc2dzdHIgIm5lZXhpc3R1amUgdmxhc3Rub3PFpSBcIiVzXCIgdiBwcnZrdSBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgorbXNnc3RyICJuZXBvZGFyaWxvIHNhIG5hc3RhdmnFpSB2bGFzdG5vc8WlIFwiJXNcIiB2IHBydmt1IFwiJXNcIiBuYSBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxpbmsgJXMgdG8gJXMiCittc2dzdHIgIm5lcG9kYXJpbG8gc2EgcHJpcG9qacWlICVzIGt1ICVzIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICJwcnZvayBcIiVzXCIgbmVleGlzdHVqZSIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCittc2dzdHIgIm5lcG9kYXJpbG8gc2EgYW5hbHl6b3ZhxaUgc2Nob3Bub3N0aSBcIiVzXCIiCisKK21zZ2lkICJsaW5rIHdpdGhvdXQgc291cmNlIGVsZW1lbnQiCittc2dzdHIgInByaXBvamVuaWUgYmV6IHpkcm9qb3bDqWhvIHBydmt1IgorCittc2dpZCAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKK21zZ3N0ciAib2RrYXogYmV6IHBydmt1IHNpbmsiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgIm5lZXhpc3R1amUgemRyb2pvdsO9IHBydm9rIHByZSBVUkkgXCIlc1wiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGVsZW1lbnQgdG8gbGluayBVUkkgXCIlc1wiIHRvIgorbXNnc3RyICJuZWV4aXN0dWplIHBydm9rLCBrdSBrdG9yw6ltdSBzYSBtw6EgcHJpcG9qacWlIFVSSSBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJuZWV4aXN0dWplIHBydm9rIHNpbmsgcHJlIFVSSSBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxpbmsgc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJuZXBvZGFyaWxvIHNhIHByaXBvamnFpSBwcnZvayBzaW5rIHByZSBVUkkgXCIlc1wiIgorCittc2dpZCAiZW1wdHkgcGlwZWxpbmUgbm90IGFsbG93ZWQiCittc2dzdHIgInByw6F6ZG5hIHLDunJhIHNhIG5lcHJpcMO6xaHFpWEiCisKK21zZ2lkICJJbnRlcm5hbCBjbG9jayBlcnJvci4iCittc2dzdHIgIlZuw7p0b3Juw6EgY2h5YmEgxI1hc292YcSNYS4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgorbXNnc3RyICJWbsO6dG9ybsOhIGNoeWJhIHRva3Ugw7pkYWpvdi4iCisKK21zZ2lkICJBIGxvdCBvZiBidWZmZXJzIGFyZSBiZWluZyBkcm9wcGVkLiIKK21zZ3N0ciAiVmXEvmEgdnlyb3Zuw6F2YWNlaiBwYW3DpHRlIHNhIHphaGFkenVqZS4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCittc2dzdHIgIlZuw7p0b3Juw70gcHJvYmzDqW0gdiB0b2t1IMO6ZGFqb3YuIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBzdHJlYW0gZXJyb3IuIgorbXNnc3RyICJWbsO6dG9ybsOhIGNoeWJhIHByw7pkdSDDumRham92LiIKKworbXNnaWQgIkZpbHRlciBjYXBzIgorbXNnc3RyICJGaWx0cm92YcWlIHNjaG9wbm9zdGkiCisKK21zZ2lkICIiCisiUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCisicHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKK21zZ3N0ciAiIgorIk9ibWVkemnFpSBtb8W+bsOpIHBvdm9sZW7DqSBzY2hvcG5vc3RpIChOVUxMIHpuYW1lbsOhIMS9VUJPVk/EvU7DiSkuIE5hc3RhdmVuaWUgIgorInRlanRvIHZsYXN0bm9zdGkgYmVyaWUgcmVmZXJlbmNpdSBuYSB6YWRhbsO9IG9iamVrdCBHc3RDYXBzLiIKKworbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJOZWJvbCB1csSNZW7DvSBuw6F6b3Ygc8O6Ym9ydSBwcmUgesOhcGlzLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCittc2dzdHIgIk5lcG9kYXJpbG8gc2Egb3R2b3JpxaUgc8O6Ym9yIFwiJXNcIiBwcmUgesOhcGlzLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiQ2h5YmEgcHJpIHphdHbDoXJhbsOtIHPDumJvcnUgXCIlc1wiLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiQ2h5YmEgcHJpIG5hc3Rhdm92YW7DrSBwb3rDrWNpZSB2IHPDumJvcmUgXCIlc1wiLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiQ2h5YmEgcHJpIHrDoXBpc2UgZG8gc8O6Ym9ydSBcIiVzXCIuIgorCittc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCittc2dzdHIgIk5lYm9sIHVyxI1lbsO9IG7DoXpvdiBzw7pib3J1IHByZSDEjcOtdGFuaWUuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiTmVwb2RhcmlsbyBzYSBvdHZvcmnFpSBzw7pib3IgXCIlc1wiIHByZSDEjcOtdGFuaWUuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgaW5mbyBvbiBcIiVzXCIuIgorbXNnc3RyICJOZXBvZGFyaWxvIHNhIHrDrXNrYcWlIGluZm9ybcOhY2llIG8gXCIlc1wiLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIgorbXNnc3RyICJcIiVzXCIgamUgYWRyZXPDoXIuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKK21zZ3N0ciAiU8O6Ym9yIFwiJXNcIiBqZSB6w6FzdXZrYS4iCisKK21zZ2lkICJGYWlsZWQgYWZ0ZXIgaXRlcmF0aW9ucyBhcyByZXF1ZXN0ZWQuIgorbXNnc3RyICJabHloYW5pZSBwbyB2eWtvbmFuw60gcG/FvmFkb3ZhbsO9Y2ggaXRlcsOhY2nDrS4iCisKK21zZ2lkICJObyBUZW1wIGRpcmVjdG9yeSBzcGVjaWZpZWQuIgorbXNnc3RyICJOZWJvbCB1csSNZW7DvSBkb8SNYXNuw70gcHJpZcSNaW5vayAoVGVtcCkuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcCBmaWxlIFwiJXNcIi4iCittc2dzdHIgIk5lcG9kYXJpbG8gc2EgesOtc2thxaUgaW5mb3Jtw6FjaWUgbyBcIiVzXCIuIgorCittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKK21zZ3N0ciAiQ2h5YmEgcHJpIHrDoXBpc2UgZG8gc8WlYWhvdmFuw6lobyBzw7pib3J1LiIKKworbXNnaWQgImNhcHMiCittc2dzdHIgInNjaG9wbm9zdGkiCisKK21zZ2lkICJkZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtIgorbXNnc3RyICJ6aXN0ZW7DqSBzY2hvcG5vc3RpIHYgcHLDumRlIMO6ZGFqb3YiCisKK21zZ2lkICJtaW5pbXVtIgorbXNnc3RyICJtaW5pbXVtIgorCittc2dpZCAibWF4aW11bSIKK21zZ3N0ciAibWF4aW11bSIKKworbXNnaWQgImZvcmNlIGNhcHMiCittc2dzdHIgInZ5bsO6dGnFpSB2ZcS+a8OpIHDDrXNtZW7DoSIKKworbXNnaWQgImZvcmNlIGNhcHMgd2l0aG91dCBkb2luZyBhIHR5cGVmaW5kIgorbXNnc3RyICJ2eW7DunRpxaUgdmXEvmvDqSBww61zbWVuw6EgYmV6IGtvbnRyb2x5IgorCittc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgorbXNnc3RyICJQcsO6ZCBuZW9ic2FodWplIMO6ZGFqZS4iCisKK21zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgorbXNnc3RyICJJbXBsZW1lbnRvdmFuw6kgcm96aHJhbmlhOlxuIgorCittc2dpZCAicmVhZGFibGUiCittc2dzdHIgIsSNaXRhdGXEvm7DqSIKKworbXNnaWQgIndyaXRhYmxlIgorbXNnc3RyICJ6YXBpc292YXRlxL5uw6kiCisKK21zZ2lkICJjb250cm9sbGFibGUiCittc2dzdHIgIm92bMOhZGF0ZcS+bsOpIgorCittc2dpZCAiY2hhbmdlYWJsZSBpbiBOVUxMLCBSRUFEWSwgUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUiCittc2dzdHIgIiIKKworbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiCittc2dzdHIgIiIKKworbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMIG9yIFJFQURZIHN0YXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJCbGFja2xpc3RlZCBmaWxlczoiCittc2dzdHIgIlpha8OhemFuw6kgc8O6Ym9yeToiCisKK21zZ2lkICJUb3RhbCBjb3VudDogIgorbXNnc3RyICJDZWxrb3bDvSBwb8SNZXQ6IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdGVkIGZpbGUiCittc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdGVkIGZpbGVzIgorbXNnc3RyWzBdICIlZCB6YWvDoXphbsO9IHPDumJvciIKK21zZ3N0clsxXSAiJWQgemFrw6F6YW7DqSBzw7pib3J5IgorbXNnc3RyWzJdICIlZCB6YWvDoXphbsO9Y2ggc8O6Ym9yb3YiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgcGx1Z2luIgorbXNnaWRfcGx1cmFsICIlZCBwbHVnaW5zIgorbXNnc3RyWzBdICIlZCB6w6FzdXZuw70gbW9kdWwiCittc2dzdHJbMV0gIiVkIHrDoXN1dm7DqSBtb2R1bHkiCittc2dzdHJbMl0gIiVkIHrDoXN1dm7DvWNoIG1vZHVsb3YiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgorbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKK21zZ3N0clswXSAiJWQgemFrw6F6YW7DoSBwb2xvxb5rYSIKK21zZ3N0clsxXSAiJWQgemFrw6F6YW7DqSBwb2xvxb5reSIKK21zZ3N0clsyXSAiJWQgemFrw6F6YW7DvWNoIHBvbG/FvmllayIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBmZWF0dXJlIgorbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKK21zZ3N0clswXSAiJWQgZnVua2NpYSIKK21zZ3N0clsxXSAiJWQgZnVua2NpZSIKK21zZ3N0clsyXSAiJWQgZnVua2Npw60iCisKK21zZ2lkICJQcmludCBhbGwgZWxlbWVudHMiCittc2dzdHIgIlZ5cMOtc2HFpSB2xaFldGt5IHBydmt5IgorCittc2dpZCAiUHJpbnQgbGlzdCBvZiBibGFja2xpc3RlZCBmaWxlcyIKK21zZ3N0ciAiVnl0bGHEjWnFpSB6b3puYW0gemFrw6F6YW7DvWNoIHPDumJvcm92IgorCittc2dpZCAiIgorIlByaW50IGEgbWFjaGluZS1wYXJzYWJsZSBsaXN0IG9mIGZlYXR1cmVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIG9yIGFsbCAiCisicGx1Z2lucyBwcm92aWRlLlxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBpbiBjb25uZWN0aW9uIHdpdGggZXh0ZXJuYWwgIgorImF1dG9tYXRpYyBwbHVnaW4gaW5zdGFsbGF0aW9uIG1lY2hhbmlzbXMiCittc2dzdHIgIiIKKyJWeXDDrXNhxaUgdGFrw70gem96bmFtIG1vxb5ub3N0w60gdG9odG8gesOhc3V2bsOpaG8gbW9kdWx1LCBrdG9yw70gc2EgZMOhIHNwcmFjb3ZhxaUgIgorImF1dG9tYXRpY2t5LlxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEplIHRvIHXFvml0b8SNbsOpIHYgc3Bvaml0b3N0aSBzICIKKyJ2b25rYWrFocOtbWkgYXV0b21hdGlja8O9bWkgbWVjaGFuaXptYW1pIGluxaF0YWzDoWNpZSB6w6FzdXZuw71jaCBtb2R1bG92IgorCittc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgorbXNnc3RyICJWeXDDrXNhxaUgem96bmFtIHrDoXN1dm7DvWNoIG1vZHVsb3YiCisKK21zZ2lkICJQcmludCBzdXBwb3J0ZWQgVVJJIHNjaGVtZXMsIHdpdGggdGhlIGVsZW1lbnRzIHRoYXQgaW1wbGVtZW50IHRoZW0iCittc2dzdHIgIiIKKyJab2JyYXppxaUgcG9kcG9yb3ZhbsOpIFVSSSBzY2jDqW15LCBzcG9sdSBzIHBydmthbWkga3RvcsOpIGljaCBpbXBsZW1lbnR1asO6IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgorbXNnc3RyICJOZXBvZGFyaWxvIHNhIG5hxI3DrXRhxaUgc8O6Ym9yIHrDoXN1dm7DqWhvIG1vZHVsdTogJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIGVsZW1lbnQgb3IgcGx1Z2luICclcydcbiIKK21zZ3N0ciAiVGFrw710byBwcnZvayBhbGVibyB6w6FzdXZuw70gbW9kdWwgbmVleGlzdHVqZSAnJXMnXG4iCisKK21zZ2lkICJJbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICJEb3N0YWwgc29tIHNwcsOhdnUgIyV1IG9kIHBydmt1IFwiJXNcIiAoJXMpOiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKK21zZ3N0ciAiRG9zdGFsIHNvbSBzcHLDoXZ1ICMldSBvZCBwYWR1IFwiJXM6JXNcIiAoJXMpOiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAiRG9zdGFsIHNvbSBzcHLDoXZ1ICMldSBvZCBvYmpla3R1IFwiJXNcIiAoJXMpOiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgKCVzKTogIgorbXNnc3RyICJEb3N0YWwgc29tIHNwcsOhdnUgIyV1ICglcyk6IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKK21zZ3N0ciAiRG9zdGFsIHNvbSBFT1Mgb2QgcHJ2a3UgXCIlc1wiLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCittc2dzdHIgIk5BxaBMQSBTQSBaTkHEjEtBICAgIDogbmHFoWllbCBqdSBwcnZvayBcIiVzXCIuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBwYWQgXCIlczolc1wiLlxuIgorbXNnc3RyICJOQcWgTEEgU0EgWk5BxIxLQSAgICA6IG5hxaFpZWwganUgcGFkIFwiJXM6JXNcIi5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCittc2dzdHIgIk5BxaBMQSBTQSBaTkHEjEtBICAgIDogbmHFoWllbCBqdSBvYmpla3QgXCIlc1wiLlxuIgorCittc2dpZCAiRk9VTkQgVEFHXG4iCittc2dzdHIgIk5BxaBMQSBTQSBaTkHEjEtBXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklORk86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorIklORk86XG4iCisiJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCittc2dzdHIgIlZBUk9WQU5JRTogeiBwcnZrdSAlczogJXNcbiIKKworbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgorbXNnc3RyICJQcmVkxI3DrXRhbsOpLCDEjWFrw6FtIG5hIGRva29uxI1lbmllIG5hcMS6xYhhbmlhIHZ5cm92bsOhdmFjZWogcGFtw6R0ZS4uLlxuIgorCittc2dpZCAiYnVmZmVyaW5nLi4uIgorbXNnc3RyICJVa2xhZMOhbSBkbyB2eXJvdm7DoXZhY2VqIHBhbcOkdGUuLi4iCisKK21zZ2lkICJEb25lIGJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgorbXNnc3RyICJWeXJvdm7DoXZhY2lhIHBhbcOkxaUgamUgbmFwbG5lbsOhLCBuYXN0YXZ1amVtIHLDunJ1IG5hIFBSRUhSw4FWQSAuLi5cbiIKKworbXNnaWQgIkJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCittc2dzdHIgIk5hcMS6xYhhIHNhIHZ5cm92bsOhdmFjaWEgcGFtw6TFpSwgbmFzdGF2dWplbSByw7pydSBuYSBQT1pBU1RBVkVOw5ogLi4uXG4iCisKK21zZ2lkICJSZWRpc3RyaWJ1dGUgbGF0ZW5jeS4uLlxuIgorbXNnc3RyICJQcmVkaXN0cmlidW92YcWlIGxhdGVuY2l1Li4uXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBzdGF0ZSB0byAlcyBhcyByZXF1ZXN0ZWQgYnkgJXMuLi5cbiIKK21zZ3N0ciAiTmFzdGF2dWplbSBzdGF2IG5hICVzIGFrbyBwb8W+YWR1amUgJXMuLi5cbiIKKworbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCittc2dzdHIgIlByZXJ1xaFlbmllOiBaYXN0YXZ1amVtIHLDunJ1IC4uLlxuIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nIGVsZW1lbnQ6ICVzXG4iCittc2dzdHIgInBydm9rIFwiJXNcIiBuZWV4aXN0dWplIgorCittc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgorbXNnc3RyICJWeXDDrXNhxaUgem5hxI1reSAoem7DoW1lIHRpZcW+IGFrbyBtZXRhZMOhdGEpIgorCittc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKK21zZ3N0ciAiVnlww61zYcWlIGluZm9ybcOhY2llIG8gc3RhdmUgYSB1cG96b3JuZW5pYSBvIHZsYXN0bm9zdGlhY2giCisKK21zZ2lkICJEbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uIgorbXNnc3RyICJOZXZ5cGlzb3ZhxaUgaW5mb3Jtw6FjaWUgbyBzdGF2ZSIKKworbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKK21zZ3N0ciAiVnlww61zYcWlIHNwcsOhdnkiCisKK21zZ2lkICJEbyBub3Qgb3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBvZiBUWVBFIgorbXNnc3RyICJOZXZ5cGlzb3ZhxaUgaW5mb3Jtw6FjaWUgbyBzdGF2ZSBUWVBVIgorCittc2dpZCAiVFlQRTEsVFlQRTIsLi4uIgorbXNnc3RyICJUWVAxLFRZUDIsLi4uIgorCittc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgorbXNnc3RyICJOZWluxaF0YWxvdmHFpSBvYnNsdWh1IHbDvW5pbWllayIKKworbXNnaWQgIlByaW50IGFsbG9jIHRyYWNlIChpZiBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSkiCittc2dzdHIgIlZ5cGlzb3ZhxaUgc3RvcHUgYWxva8OhY2llIChhayBqZSB0byBwb3ZvbGVuw6kgcHJpIGtvbXBpbMOhY2lpKSIKKworbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKK21zZ3N0ciAiVnluw7p0acWlIEVPUyBuYSB6ZHJvam9jaCBwcmVkIHZ5cG51dMOtbSByw7pyeSIKKworbXNnaWQgIkdhdGhlciBhbmQgcHJpbnQgaW5kZXggc3RhdGlzdGljcyIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQ6ICVzLlxuIgorbXNnc3RyICJDSFlCQTogbmVwb2RhcmlsbyBzYSB2eXR2b3JpxaUgcsO6cnU6ICVzLlxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKK21zZ3N0ciAiQ0hZQkE6IG5lcG9kYXJpbG8gc2Egdnl0dm9yacWlIHLDunJ1LlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGVycm9uZW91cyBwaXBlbGluZTogJXNcbiIKK21zZ3N0ciAiVkFST1ZBTklFOiBjaHlibsOhIHLDunJhOiAlc1xuIgorCittc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgorbXNnc3RyICJDSFlCQTogcHJ2b2sgJ3LDunJhJyBzYSBuZW5hxaFpZWwuXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAiTmFzdGF2dWplbSByw7pydSBuYSBQT1pBU1RBVkVOw5ogLi4uXG4iCisKKyMgT24gc3RyaWtlPworbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCittc2dzdHIgIkNIWUJBOiBSw7pyYSBzYSBuZWNoY2UgcG96YXN0YXZpxaUuXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCittc2dzdHIgIlLDunJhIGplIMW+aXbDoSBhIG5lcG90cmVidWplIFBSRVJPTEwgLi4uXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMSU5HIC4uLlxuIgorbXNnc3RyICJSw7pyYSBqZSB2IHN0YXZlIFBSRVJPTExJTkcgLi4uXG4iCisKKyMgT24gc3RyaWtlPworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcHJlcm9sbC5cbiIKK21zZ3N0ciAiQ0hZQkE6IHLDunJhIG5lY2hjZSBwcmVyb2xsb3ZhxaUuXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMRUQgLi4uXG4iCittc2dzdHIgIlLDunJhIGplIHYgc3RhdmUgUFJFUk9MTEVEIC4uLlxuIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgorbXNnc3RyICJOYXN0YXZ1amVtIHLDunJ1IG5hIFBSRUhSw4FWQSAuLi5cbiIKKworIyBPbiBzdHJpa2U/Cittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIgorbXNnc3RyICJDSFlCQTogUsO6cmEgbmVjaGNlIGhyYcWlLlxuIgorCittc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gRm9yY2luZyBFT1Mgb24gdGhlIHBpcGVsaW5lXG4iCittc2dzdHIgIkVPUyBwcmkgdnlwbnV0w60gamUgcG92b2xlbsO9IC0tIFZ5bnVjdWplbSBFT1MgcHJlIHLDunJ1XG4iCisKK21zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKK21zZ3N0ciAixIxha8OhbSBuYSBFT1MuLi5cbiIKKworbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCittc2dzdHIgIlByaWphdMO9IEVPUyAtIHphc3RhdnVqZW0gcsO6cnUgLi4uXG4iCisKK21zZ2lkICJBbiBlcnJvciBoYXBwZW5lZCB3aGlsZSB3YWl0aW5nIGZvciBFT1NcbiIKK21zZ3N0ciAiUG/EjWFzIMSNYWthbmlhIG5hIEVPUyBuYXN0YWxhIGNoeWJhXG4iCisKK21zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKK21zZ3N0ciAiVnlrb27DoXZhbmllIHNrb27EjWlsbyBwbyAlIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKK21zZ3N0ciAiTmFzdGF2dWplbSByw7pydSBuYSBQUklQUkFWRU7DmiAuLi5cbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCAuLi5cbiIKK21zZ3N0ciAiTmFzdGF2dWplbSByw7pydSBuYSBOVUxPVsOaIC4uLlxuIgorCittc2dpZCAiRnJlZWluZyBwaXBlbGluZSAuLi5cbiIKK21zZ3N0ciAiVXZvxL7FiHVqZW0gcsO6cnUgLi4uXG4iCisKKyN+IG1zZ2lkICJVc2FnZTogZ3N0LXhtbGxhdW5jaCA8ZmlsZS54bWw+IFsgZWxlbWVudC5wcm9wZXJ0eT12YWx1ZSAuLi4gXVxuIgorI34gbXNnc3RyICIiCisjfiAiUG91xb5pdGllOiBnc3QteG1sbGF1bmNoIDxzw7pib3IueG1sPiBbIHBydmsudmxhc3Rub3PFpT1ob2Rub3RhIC4uLiBdXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogcGFyc2Ugb2YgeG1sIGZpbGUgJyVzJyBmYWlsZWQuXG4iCisjfiBtc2dzdHIgIkNIWUJBOiB6bHloYWxhIGFuYWzDvXphIHhtbCBzw7pib3J1ICclcycuXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogbm8gdG9wbGV2ZWwgcGlwZWxpbmUgZWxlbWVudCBpbiBmaWxlICclcycuXG4iCisjfiBtc2dzdHIgIkNIWUJBOiB2IHPDumJvcmUgJyVzJyBjaMO9YmEgcHJ2b2sgcsO6cnkgbmFqdnnFocWhZWogw7pyb3ZuZS5cbiIKKworI34gbXNnaWQgIldBUk5JTkc6IG9ubHkgb25lIHRvcGxldmVsIGVsZW1lbnQgaXMgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIlZBUk9WQU5JRTogdiBzw7rEjWFzbm9zdGkgamUgcG9kcG9yb3ZhbsO9IGliYSBqZWRlbiBwcnZvayBuYWp2ecWhxaFlaiDDunJvdm5lLlxuIgorCisjfiBtc2dpZCAiRVJST1I6IGNvdWxkIG5vdCBwYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgJWQ6ICVzLlxuIgorI34gbXNnc3RyICIiCisjfiAiQ0hZQkE6IG5lcG9kYXJpbG8gc2EgYW5hbHl6b3ZhxaUgYXJndW1lbnQgcHLDrWthem92w6lobyByaWFka3UgJWQ6ICVzLlxuIgorCisjfiBtc2dpZCAiV0FSTklORzogZWxlbWVudCBuYW1lZCAnJXMnIG5vdCBmb3VuZC5cbiIKKyN+IG1zZ3N0ciAiVkFST1ZBTklFOiBwcnZvayBzIG7DoXp2b20gJyVzJyBzYSBuZW5hxaFpZWwuXG4iCisKKyN+IG1zZ2lkICJTYXZlIHhtbCByZXByZXNlbnRhdGlvbiBvZiBwaXBlbGluZSB0byBGSUxFIGFuZCBleGl0IgorI34gbXNnc3RyICJVbG/FvmnFpSByZXByZXplbnTDoWNpdSByw7pyeSB2IHhtbCBkbyBTw5pCT1JVIGEgc2tvbsSNacWlIgorCisjfiBtc2dpZCAiRklMRSIKKyN+IG1zZ3N0ciAiU8OaQk9SIgorCisjfiBtc2dpZCAiRG8gbm90IGluc3RhbGwgc2lnbmFsIGhhbmRsZXJzIGZvciBTSUdVU1IxIGFuZCBTSUdVU1IyIgorI34gbXNnc3RyICJOZWluxaF0YWxvdmHFpSBvYnNsdWh1IHNpZ27DoWxvdiBTSUdVU1IxIGEgU0lHVVNSMiIKKworI34gbXNnaWQgIkVycm9yIHdyaXRpbmcgcmVnaXN0cnkgY2FjaGUgdG8gJXM6ICVzIgorI34gbXNnc3RyICJDaHliYSBwcmkgesOhcGlzZSB2eXJvdm7DoXZhY2VqIHBhbcOkdGUgcmVnaXN0cm92IGRvICVzOiAlcyIKKworI34gbXNnaWQgIkVycm9yIHJlLXNjYW5uaW5nIHJlZ2lzdHJ5ICVzOiAlcyIKKyN+IG1zZ3N0ciAiQ2h5YmEgcHJpIG9ww6R0b3Zub20gc2tlbm92YW7DrSByZWdpc3Ryb3YgJXM6ICVzIgorCisjfiBtc2dpZCAiRXJyb3IgcmUtc2Nhbm5pbmcgcmVnaXN0cnkgJXMiCisjfiBtc2dzdHIgIkNoeWJhIHByaSBvcMOkdG92bm9tIHNrZW5vdmFuw60gcmVnaXN0cm92ICVzIgorCisjfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkLiIKKyN+IG1zZ3N0ciAiIgorI34gIlZuw7p0b3Juw6EgY2h5YmEgR1N0cmVhbWVyOiBuZXBvZGFyaWxvIHNhIHptZW5pxaUgc3Rhdi4gT2hsw6FzdGUgcHJvc8OtbSB0w7p0byAiCisjfiAiY2h5YnUuIgorCisjfiBtc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIGRlc2NyaXB0b3IgXCIlZFwiLiIKKyN+IG1zZ3N0ciAiQ2h5YmEgcHJpIHrDoXBpc2UgZG8gcG9waXNvdmHEjWEgc8O6Ym9ydSBcIiVkXCIuIgorCisjfiBtc2dpZCAiRmlsZSBkZXNjcmlwdG9yIFwiJWRcIiBpcyBub3QgdmFsaWQuIgorI34gbXNnc3RyICJQb3Bpc292YcSNIHPDumJvcnUgXCIlZFwiIG5pZSBqZSBwbGF0bsO9LiIKKworI34gbXNnaWQgIkZSRUVJTkcgcGlwZWxpbmUgLi4uXG4iCisjfiBtc2dzdHIgIlVWT8S9xYdVSkVNIHLDunJ1IC4uLlxuIgorCisjfiBtc2dpZCAib3JpZ2luYWwgbG9jYXRpb24gb2YgZmlsZSBhcyBhIFVSSSIKKyN+IG1zZ3N0ciAicMO0dm9kbsOpIHVtaWVzdG5lbmllIHPDumJvcnUgYWtvIFVSSSIKZGlmZiAtLWdpdCBhL3BvL3NsLmdtbyBiL3BvL3NsLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODUxNjMyCi0tLSAvZGV2L251bGwKKysrIGIvcG8vc2wuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL3NsLnBvIGIvcG8vc2wucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ0YmE2NQotLS0gL2Rldi9udWxsCisrKyBiL3BvL3NsLnBvCkBAIC0wLDAgKzEsMTIzMiBAQAorIyBTbG92ZW5pYW4gdHJhbnNsYXRpb24gb2YgZ3N0cmVhbWVyLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ3N0cmVhbWVyIHBhY2thZ2UuCisjIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIE1hdGVqIFVyYmFuxI1pxI0gPG1hdGVqLnVyYmFuQGdtYWlsLmNvbT4sIDIwMTAgLSAyMDExLgorIyBNYXJ0aW4gU3JlYm90bmphayA8bWlsZXNAZmlsbXNpLm5ldD4sIDIwMTEuCisjIEtsZW1lbiBLb8WhaXIgPGtsZW1lbi5rb3NpckBnbXguY29tPiwgMjAxMS4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdzdHJlYW1lciAwLjEwLjMyLjJcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wOS0yOSAxNDo1NSswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMS0wOS0yMiAxNTowMiswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBLbGVtZW4gS2/FoWlyIDxrbGVtZW4ua29zaXJAZ214LmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBTbG92ZW5pYW4gPHRyYW5zbGF0aW9uLXRlYW0tc2xAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlOiBzbFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9NDsgcGx1cmFsPShuJTEwMD09MSA/IDEgOiBuJTEwMD09MiA/IDIgOiBuJTEwMD09MyB8fCBuIgorIiUxMDA9PTQgPyAzIDogMCk7XG4iCisKK21zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCittc2dzdHIgIkl6cGnFoWUgcmF6bGnEjWljbyBwcm9ncmFtYSBHU3RyZWFtZXIiCisKK21zZ2lkICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKK21zZ3N0ciAiSXpwacWhaSB2c2Egb3Bvem9yaWxhIGtvdCB1c29kbmEiCisKK21zZ2lkICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKK21zZ3N0ciAiSXpwacWhZSByYXpwb2xvxb5saml2ZSBrYXRlZ29yaWplIHJhemhyb8WhxI1ldmFuamEgaW4gc2Uga29uxI1hIgorCittc2dpZCAiIgorIkRlZmF1bHQgZGVidWcgbGV2ZWwgZnJvbSAxIChvbmx5IGVycm9yKSB0byA1IChhbnl0aGluZykgb3IgMCBmb3Igbm8gb3V0cHV0IgorbXNnc3RyICIiCisiUHJpdnpldGEgcmF2ZW4gcmF6aHJvxaHEjWV2YW5qYSBvZCAxIChsZSBuYXBha2UpIGRvIDUgKGthcmtvbGkpLiBWcmVkbm9zdCAwICIKKyJwb21lbmkgYnJleiBpenBpc2EuIgorCittc2dpZCAiTEVWRUwiCittc2dzdHIgIlJBVkVOIgorCittc2dpZCAiIgorIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5X25hbWU6bGV2ZWwgcGFpcnMgdG8gc2V0IHNwZWNpZmljIGxldmVscyBmb3IgIgorInRoZSBpbmRpdmlkdWFsIGNhdGVnb3JpZXMuIEV4YW1wbGU6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKK21zZ3N0ciAiIgorIlogdmVqaWNvIGxvxI1lbiBzZXpuYW0gcGFyb3YgaW1lX2thdGVnb3JpamU6cmF2ZW4gemEgZG9sb8SNZXZhbmplIHBvc2VibmloICIKKyJyYXZuaSBwb3NhbWV6bmloIGthdGVnb3Jpai4gUHJpbWVyOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCisKK21zZ2lkICJMSVNUIgorbXNnc3RyICJTRVpOQU0iCisKK21zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKK21zZ3N0ciAiT25lbW9nb8SNaSBvYmFydmFuaSByYXpocm/FocSNZXZhbG5pIGl6cGlzIgorCittc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCittc2dzdHIgIk9uZW1vZ2/EjWkgcmF6aHJvxaHEjWV2YW5qZSIKKworbXNnaWQgIkVuYWJsZSB2ZXJib3NlIHBsdWdpbiBsb2FkaW5nIGRpYWdub3N0aWNzIgorbXNnc3RyICJPbW9nb8SNaSBwb2Ryb2JubyBkaWFnbm9zdGlrbyBuYWxhZ2FuamEgdnN0YXZrb3YiCisKK21zZ2lkICJDb2xvbi1zZXBhcmF0ZWQgcGF0aHMgY29udGFpbmluZyBwbHVnaW5zIgorbXNnc3RyICJaIHZlamljbyBsb8SNZW4gc2V6bmFtIHBvdGkgZG8gdnN0YXZrb3YiCisKK21zZ2lkICJQQVRIUyIKK21zZ3N0ciAiUE9USSIKKworbXNnaWQgIiIKKyJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwbHVnaW5zIHRvIHByZWxvYWQgaW4gYWRkaXRpb24gdG8gdGhlIGxpc3Qgc3RvcmVkIGluICIKKyJlbnZpcm9ubWVudCB2YXJpYWJsZSBHU1RfUExVR0lOX1BBVEgiCittc2dzdHIgIiIKKyJaIHZlamljbyBsb8SNZW4gc2V6bmFtIHZzdGF2a292IHphIHVwb3JhYm8gb2Igc2V6bmFtdSwga2kgamUgc2hyYW5qZW4gdiAiCisib2tvbGpza2kgc3ByZW1lbmxqaXZraSBHU1RfUExVR0lOX1BBVEgiCisKK21zZ2lkICJQTFVHSU5TIgorbXNnc3RyICJWU1RBVktJIgorCittc2dpZCAiRGlzYWJsZSB0cmFwcGluZyBvZiBzZWdtZW50YXRpb24gZmF1bHRzIGR1cmluZyBwbHVnaW4gbG9hZGluZyIKK21zZ3N0ciAiT25lbW9nb8SNaSB1amVtYW5qZSBuYXBhayDEjWxlbmplbmphIG1lZCBuYWxhZ2FuamVtIHZzdGF2a292IgorCittc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIk9uZW1vZ2/EjWkgcG9zb2RhYmxqYW5qZSB2cGlzbmlrYSIKKworbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIk9uZW1vZ2/EjWkgdXN0dmFyamFuamUgcG9tb8W+bmloIHByb2Nlc292IG1lZCBwcmVnbGVkb3ZhbmplbSB2cGlzbmlrYSIKKworbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgorbXNnc3RyICJNb8W+bm9zdGkgR1N0cmVhbWVyIgorCittc2dpZCAiU2hvdyBHU3RyZWFtZXIgT3B0aW9ucyIKK21zZ3N0ciAiUG9rYcW+aSBtb8W+bm9zdGkgR1N0cmVhbWVyIgorCittc2dpZCAiVW5rbm93biBvcHRpb24iCittc2dzdHIgIk5lem5hbmEgbW/Fvm5vc3QiCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIGNvcmUgbGlicmFyeSBlcnJvci4iCittc2dzdHIgIlYgcHJvZ3JhbXUgR1N0cmVhbWVyIGplIHByacWhbG8gZG8gc3Bsb8WhbmUgbmFwYWtlIGplZHJuZSBrbmppxb5uaWNlLiIKKworbXNnaWQgIiIKKyJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuIgorbXNnc3RyICJaYSB0byBuYXBha28gbmkgZG9sb8SNZW5lIGtvZGUgbmFwYWtlLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY29kZSBub3QgaW1wbGVtZW50ZWQuIgorbXNnc3RyICJOb3RyYW5qYSBuYXBha2EgR1N0cmVhbWVyOiB6YWh0ZXZhbmEgem1vxb5ub3N0IG5pIHBvZHBydGEuIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgorInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgorbXNnc3RyICIiCisiTmFwYWthOiBzcHJlbWVtaW5qYW5qZSBzdGFuamEgamUgc3BvZGxldGVsbyBpbiBuaSBwcmF2ZWdhIHNwb3JvxI1pbGEgdnpyb2thICIKKyJ6YSB0byB2cnN0byBuYXBha2UuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCittc2dzdHIgIk5vdHJhbmphIG5hcGFrYSBHU3RyZWFtZXI6IHRlxb5hdmUgcGxhZG5qYS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiIKK21zZ3N0ciAiTm90cmFuamEgbmFwYWthIEdTdHJlYW1lcjogdGXFvmF2ZSB6IG5pdGVuamVtLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCittc2dzdHIgIk5vdHJhbmphIG5hcGFrYSBHU3RyZWFtZXI6IHRlxb5hdmUgcyBwb2dhamFuamVtLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogZXZlbnQgcHJvYmxlbS4iCittc2dzdHIgIk5vdHJhbmphIG5hcGFrYSBHU3RyZWFtZXI6IHRlxb5hdmUgeiBkb2dvZGtvbS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4iCittc2dzdHIgIk5vdHJhbmphIG5hcGFrYSBHU3RyZWFtZXI6IHRlxb5hdmUgeiBpc2thbmplbS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNhcHMgcHJvYmxlbS4iCittc2dzdHIgIk5vdHJhbmphIG5hcGFrYSBHU3RyZWFtZXI6IHRlxb5hdmUgeiB2ZWxpa2ltaSDEjXJrYW1pLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGFnIHByb2JsZW0uIgorbXNnc3RyICJOb3RyYW5qYSBuYXBha2EgR1N0cmVhbWVyOiB0ZcW+YXZlIHogb3puYWtvLiIKKworbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCittc2dzdHIgIk5hbWVzdGl0dmkgR1N0cmVhbWVyIG1hbmprYSB2c3RhdmVrLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2xvY2sgcHJvYmxlbS4iCittc2dzdHIgIk5vdHJhbmphIG5hcGFrYSBHU3RyZWFtZXI6IHRlxb5hdmUgeiB1cm8uIgorCittc2dpZCAiIgorIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGhhcyBiZWVuICIKKyJkaXNhYmxlZC4iCittc2dzdHIgIlByb2dyYW0gcG9za3XFoWEgdXBvcmFiaXRpIGZ1bmtjaWpvIEdTdHJlYW1lciwga2kgamUgb25lbW9nb8SNZW5hLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3VwcG9ydGluZyBsaWJyYXJ5IGVycm9yLiIKK21zZ3N0ciAiViBwcm9ncmFtdSBHU3RyZWFtZXIgamUgcHJpxaFsbyBkbyBzcGxvxaFuZSBuYXBha2UgcG9kcG9ybmUga25qacW+bmljZS4iCisKK21zZ2lkICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJQb2Rwb3JuZSBrbmppxb5uaWNlIG5pIG1vZ2/EjWUgemHEjWV0aS4iCisKK21zZ2lkICJDb3VsZCBub3QgY2xvc2Ugc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiUG9kcG9ybmUga25qacW+bmljZSBuaSBtb2dvxI1lIHphcHJldGkuIgorCittc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJQb2Rwb3JuZSBrbmppxb5uaWNlIG5pIG1vZ2/EjWUgbmFzdGF2aXRpLiIKKworbXNnaWQgIkVuY29kaW5nIGVycm9yLiIKK21zZ3N0ciAiTmFwYWthIGtvZGlyYW5qYS4iCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHJlc291cmNlIGVycm9yLiIKK21zZ3N0ciAiViBwcm9ncmFtdSBHU3RyZWFtZXIgamUgcHJpxaFsbyBkbyBzcGxvxaFuZSBuYXBha2UgdmlyYS4iCisKK21zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgorbXNnc3RyICJWaXJhIG5pIG1vZ2/EjWUgbmFqdGkuIgorCittc2dpZCAiUmVzb3VyY2UgYnVzeSBvciBub3QgYXZhaWxhYmxlLiIKK21zZ3N0ciAiVmlyIGplIHphcG9zbGVuIGFsaSBwYSBuaSBuYSB2b2xqby4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCittc2dzdHIgIlZpcmEgbmkgbW9nb8SNZSBvZHByZXRpIHphIGJyYW5qZS4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCittc2dzdHIgIlZpcmEgbmkgbW9nb8SNZSBvZHByZXRpIHphIHBpc2FuamUuIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgorbXNnc3RyICJWaXJhIG5pIG1vZ2/EjWUgb2RwcmV0aSB6YSBicmFuamUgaW4gcGlzYW5qZS4iCisKK21zZ2lkICJDb3VsZCBub3QgY2xvc2UgcmVzb3VyY2UuIgorbXNnc3RyICJWaXJhIG5pIG1vZ2/EjWUgemFwcmV0aS4iCisKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIHJlc291cmNlLiIKK21zZ3N0ciAiVmlyYSBuaSBtb2dvxI1lIHByZWJyYXRpLiIKKworbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iCittc2dzdHIgIlZpcmEgbmkgbW9nb8SNZSB6YXBpc2F0aS4iCisKK21zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKK21zZ3N0ciAiTmEgdmlydSBuaSBtb2dvxI1lIGl6dmVzdGkgaXNrYW5qYS4iCisKK21zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgorbXNnc3RyICJaIHZpcm9tIHNlIG5pIG1vZ2/EjWUgdXNrbGFkaXRpLiIKKworbXNnaWQgIkNvdWxkIG5vdCBnZXQvc2V0IHNldHRpbmdzIGZyb20vb24gcmVzb3VyY2UuIgorbXNnc3RyICJOYXN0YXZpdGV2IHZpcmEgbmkgbW9nb8SNZSBwcmlkb2JpdGkgYWxpIGRvbG/EjWl0aS4iCisKK21zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCittc2dzdHIgIk5hIHZpcnUgbmkgcHJvc3RvcmEuIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdHJlYW0gZXJyb3IuIgorbXNnc3RyICJWIHByb2dyYW11IEdTdHJlYW1lciBqZSBwcmnFoWxvIGRvIHNwbG/FoW5lIG5hcGFrZSBwcmV0YWthbmphLiIKKworbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKK21zZ3N0ciAiIgorIlByZWRtZXQgbmUgcG9kcGlyYSBvYnJhdm5hdmFuamEgdGVnYSBwcmV0b2thLiBQcm9zaW1vLCBwb8WhbGppdGUgcG9yb8SNaWxvIG8gIgorIm5hcGFraS4iCisKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIHR5cGUgb2Ygc3RyZWFtLiIKK21zZ3N0ciAiVnJzdGUgcHJldG9rYSBuaSBtb2dvxI1lIGRvbG/EjWl0aS4iCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgZWxlbWVudC4iCittc2dzdHIgIlByZXRvayBzZSByYXpsaWt1amUgb2QgdnJzdGUsIGtpIGpvIG9icmF2bmF2YSBwcmVkbWV0LiIKKworbXNnaWQgIlRoZXJlIGlzIG5vIGNvZGVjIHByZXNlbnQgdGhhdCBjYW4gaGFuZGxlIHRoZSBzdHJlYW0ncyB0eXBlLiIKK21zZ3N0ciAiWmEgb2JyYXZuYXZhbmplIHRlZ2EgcHJldG9rYSBuaSB1c3RyZXpuZWdhIGtvZGVrYS4iCisKK21zZ2lkICJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iCittc2dzdHIgIlByZXRva2EgbmkgbW9nb8SNZSBvZGtvZGlyYXRpLiIKKworbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKK21zZ3N0ciAiUHJldG9rYSBuaSBtb2dvxI1lIGtvZGlyYXRpLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZW11bHRpcGxleCBzdHJlYW0uIgorbXNnc3RyICJQcmV0b2thIG5pIG1vZ2/EjWUgb2R2aXRpLiIKKworbXNnaWQgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKK21zZ3N0ciAiUHJldG9rYSBuaSBtb2dvxI1lIHp2aXRpLiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgaW4gdGhlIHdyb25nIGZvcm1hdC4iCittc2dzdHIgIlByZXRvayBqZSB2IG5hcGHEjW5lbSB6YXBpc3UuIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iCittc2dzdHIgIlByZXRvayBqZSDFoWlmcmlyYW4sIG9kxaFpZnJpcmFuamUgcGEgbmkgcG9kcHJ0by4iCisKK21zZ2lkICIiCisiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGNhbid0IGJlIGRlY3J5cHRlZCBiZWNhdXNlIG5vIHN1aXRhYmxlIGtleSBoYXMgIgorImJlZW4gc3VwcGxpZWQuIgorbXNnc3RyICIiCisiUHJldG9rIGplIMWhaWZyaXJhbiBpbiBnYSBuaSBtb2dvxI1lIG9kxaFpZnJpcmF0aSwga2VyIG5pIHBvZGFuZWdhIHVzdHJlem5lZ2EgIgorImtsanXEjWEuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCittc2dzdHIgIlNwb3JvxI1pbG8gbmFwYWtlIHphIGRvbWVubyAlcyBuZSBvYnN0YWphLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMgYW5kIGNvZGUgJWQuIgorbXNnc3RyICJTcGxvxaFubyBzcG9yb8SNaWxvIG5hcGFrZSB6YSBkb21lbm8gJXMgaW4ga29kbyAlZCBuZSBvYnN0YWphLiIKKworbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKK21zZ3N0ciAiSXpicmFuZSB1cmUgbmkgbW9nb8SNZSB1cG9yYWJpdGkgdiBjZXZvdm9kdS4iCisKK21zZ2lkICJ0aXRsZSIKK21zZ3N0ciAibmFzbG92IgorCittc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKK21zZ3N0ciAib2JpxI1ham5vIHVwb3JhYmxqZW4gbmFzbG92IgorCittc2dpZCAidGl0bGUgc29ydG5hbWUiCittc2dzdHIgInJhenZyxaHEjWV2YWxubyBpbWUgbmFzbG92YSIKKworbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgInNwbG/FoW5vIHVwb3JhYmxqZW4gbmFzbG92IHphIHJhenZyxaHEjWFuamUiCisKK21zZ2lkICJhcnRpc3QiCittc2dzdHIgIml6dmFqYWxlYyIKKworbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAib3NlYmUsIHphZG9sxb5lbmUgemEgc25lbWFuamUiCisKK21zZ2lkICJhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgInJhenZyxaHEjWV2YWxubyBpbWUgaXp2YWphbGNhIgorCittc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJvc2ViZSwgb2Rnb3Zvcm5lIHphIHBvc25ldGVrLCB6YSBwb3RyZWJlIHJhenZyxaHEjWFuamEiCisKK21zZ2lkICJhbGJ1bSIKK21zZ3N0ciAiYWxidW0iCisKK21zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSIKK21zZ3N0ciAiYWxidW0sIGtpIHZzZWJ1amUgdGUgcG9kYXRrZSIKKworbXNnaWQgImFsYnVtIHNvcnRuYW1lIgorbXNnc3RyICJyYXp2csWhxI1ldmFsbm8gaW1lIGFsYnVtYSIKKworbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJhbGJ1bSwga2kgdnNlYnVqZSB0ZSBwb2RhdGtlLCB6YSBwb3RyZWJlIHJhenZyxaHEjWFuamEiCisKK21zZ2lkICJhbGJ1bSBhcnRpc3QiCittc2dzdHIgIml6dmFqYWxlYyBhbGJ1bWEiCisKK21zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQiCittc2dzdHIgIml6dmFqYWxlYyBjZWxvdG5lZ2EgYWxidW1hOyB6YXBpc2FuLCBrb3QgbW9yYSBiaXRpIHByaWthemFuIgorCittc2dpZCAiYWxidW0gYXJ0aXN0IHNvcnRuYW1lIgorbXNnc3RyICJyYXp2csWhxI1ldmFsbm8gaW1lIGl6dmFqYWxjYSBhbGJ1bWEiCisKK21zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiCittc2dzdHIgIml6dmFqYWxlYyBjZWxvdG5lZ2EgYWxidW1hLCB6YXBpc2FuIHphIHJhenZyxaHEjWFuamUiCisKK21zZ2lkICJkYXRlIgorbXNnc3RyICJkYXR1bSIKKworbXNnaWQgImRhdGUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR0RhdGUgc3RydWN0dXJlKSIKK21zZ3N0ciAiZGF0dW0gdXN0dmFyaXR2ZSBwb2RhdGtvdiAoa290IHpncmFkYmEgR0RhdGUpIgorCittc2dpZCAiZGF0ZXRpbWUiCittc2dzdHIgImRhdHVtxI1hcyIKKworbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKK21zZ3N0ciAiZGF0dW0gaW4gxI1hcyB1c3R2YXJpdHZlIHBvZGF0a292IChrb3QgemdyYWRiYSBHRGF0ZVRpbWUpIgorCittc2dpZCAiZ2VucmUiCittc2dzdHIgInp2cnN0IgorCittc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCittc2dzdHIgInp2cnN0LCBraSB2c2VidWplIHRlIHBvZGF0a2UiCisKK21zZ2lkICJjb21tZW50IgorbXNnc3RyICJvcG9tYmEiCisKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKK21zZ3N0ciAicHJvc3RvIGJlc2VkaWxvIHphIG9wb21iZSBwb2RhdGtvdiIKKworbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCittc2dzdHIgInJhesWhaXJqZW5hIG9wb21iYSIKKworbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIGluIGtleT12YWx1ZSBvciBrZXlbZW5dPWNvbW1lbnQgZm9ybSIKK21zZ3N0ciAiIgorInByb3N0byBiZXNlZGlsbyB6YSB6YXBpc292YW5qZSBvcG9tYiBwb2RhdGtvdiB2IG9ibGlraSBrbGp1xI09dnJlZG5vc3QgYWxpICIKKyJrbGp1xI1bZW5dPW9wb21iYSIKKworbXNnaWQgInRyYWNrIG51bWJlciIKK21zZ3N0ciAixaF0ZXZpbGthIHNrbGFkYmUiCisKK21zZ2lkICJ0cmFjayBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKK21zZ3N0ciAixaF0ZXZpbGthIHNrbGFkYmUgdiB6Ymlya2kiCisKK21zZ2lkICJ0cmFjayBjb3VudCIKK21zZ3N0ciAixaF0ZXZpbG8gc2tsYWRiIgorCittc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKK21zZ3N0ciAic2t1cG5vIMWhdGV2aWxvIHNrbGFkYiB6bm90cmFqIHpiaXJrZSwga2kgamkgc2tsYWRiYSBwcmlwYWRhIgorCittc2dpZCAiZGlzYyBudW1iZXIiCittc2dzdHIgIsWhdGV2aWxrYSBkaXNrYSIKKworbXNnaWQgImRpc2MgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgIsWhdGV2aWxrYSBkaXNrYSB2IHpiaXJraSIKKworbXNnaWQgImRpc2MgY291bnQiCittc2dzdHIgIsWhdGV2aWxvIGRpc2tvdiIKKworbXNnaWQgImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIgorbXNnc3RyICJza3Vwbm8gxaF0ZXZpbG8gZGlza292IHpub3RyYWogemJpcmtlLCBraSBqaSBkaXNrIHByaXBhZGEiCisKK21zZ2lkICJsb2NhdGlvbiIKK21zZ3N0ciAibWVzdG8iCisKK21zZ2lkICIiCisiT3JpZ2luIG9mIG1lZGlhIGFzIGEgVVJJIChsb2NhdGlvbiwgd2hlcmUgdGhlIG9yaWdpbmFsIG9mIHRoZSBmaWxlIG9yIHN0cmVhbSAiCisiaXMgaG9zdGVkKSIKK21zZ3N0ciAiIgorIml6dm9yIG1lZGlqYSBrb3QgbmFzbG92IFVSSSAobWVzdG8sIGtqZXIgamUgc2hyYW5qZW4gaXp2aXJuaWsgZGF0b3Rla2UgYWxpICIKKyJwcmV0b2thKSIKKworbXNnaWQgImhvbWVwYWdlIgorbXNnc3RyICJzcGxldG5hIHN0cmFuIgorCittc2dpZCAiSG9tZXBhZ2UgZm9yIHRoaXMgbWVkaWEgKGkuZS4gYXJ0aXN0IG9yIG1vdmllIGhvbWVwYWdlKSIKK21zZ3N0ciAic3BsZXRuYSBzdHJhbiBtZWRpamEgKGl6dmFqYWxjYSwgZmlsbWEgYWxpIHNrdXBpbmUpIgorCittc2dpZCAiZGVzY3JpcHRpb24iCittc2dzdHIgIm9waXMiCisKK21zZ2lkICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCittc2dzdHIgImtyYXRrbyBiZXNlZGlsbywga2kgb3Bpc3VqZSB2c2ViaW5vIHBvZGF0a292IgorCittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAicmF6bGnEjWljYSIKKworbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgorbXNnc3RyICJyYXpsacSNaWNhIHBvZGF0a292IgorCittc2dpZCAiSVNSQyIKK21zZ3N0ciAiSVNSQyIKKworbXNnaWQgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKK21zZ3N0ciAiIgorIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgKGh0dHA6Ly93d3cuaWZwaS5vcmcvY29udGVudC8iCisic2VjdGlvbl9yZXNvdXJjZXMvaXNyYy5odG1sKSIKKworbXNnaWQgIm9yZ2FuaXphdGlvbiIKK21zZ3N0ciAidXN0YW5vdmEiCisKK21zZ2lkICJjb3B5cmlnaHQiCittc2dzdHIgImF2dG9yc2tlIHByYXZpY2UiCisKK21zZ2lkICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJvcG96b3JpbG8gYXZ0b3Jza2loIHByYXZpYyBwb2RhdGtvdiIKKworbXNnaWQgImNvcHlyaWdodCB1cmkiCittc2dzdHIgIm5hc2xvdiBVUkkgYXZ0b3Jza2loIHByYXZpYyIKKworbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAibmFzbG92IFVSSSBkbyBvYnZlc3RpbGEgYXZ0b3JzdHZhIHBvZGF0a292IgorCittc2dpZCAiZW5jb2RlZCBieSIKK21zZ3N0ciAia29kaXJhbCIKKworbXNnaWQgIm5hbWUgb2YgdGhlIGVuY29kaW5nIHBlcnNvbiBvciBvcmdhbml6YXRpb24iCittc2dzdHIgImltZSBvc2ViZSBhbGkgb3JnYW5pemFjaWplLCBraSBqZSBvcHJhdmlsYSBrb2RpcmFuamUiCisKK21zZ2lkICJjb250YWN0IgorbXNnc3RyICJzdGlrIgorCittc2dpZCAiY29udGFjdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAicG9kYXRraSBvIHN0aWt1IgorCittc2dpZCAibGljZW5zZSIKK21zZ3N0ciAiZG92b2xqZW5qZSIKKworbXNnaWQgImxpY2Vuc2Ugb2YgZGF0YSIKK21zZ3N0ciAiZG92b2xqZW5qZSBwb2RhdGtvdiIKKworbXNnaWQgImxpY2Vuc2UgdXJpIgorbXNnc3RyICJuYXNsb3YgVVJJIGRvdm9samVuamEiCisKK21zZ2lkICJVUkkgdG8gdGhlIGxpY2Vuc2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgIm5hc2xvdiBVUkkgZG92b2xqZW5qYSBwb2RhdGtvdiIKKworbXNnaWQgInBlcmZvcm1lciIKK21zZ3N0ciAiaXp2YWphbGVjIgorCittc2dpZCAicGVyc29uKHMpIHBlcmZvcm1pbmciCittc2dzdHIgIm9zZWJlLCBraSBzbyBpenZhamFsY2kgcG9zbmV0a2EiCisKK21zZ2lkICJjb21wb3NlciIKK21zZ3N0ciAic2tsYWRhdGVsaiIKKworbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAib3NlYmEsIGtpIGplIHNrbGFkYXRlbGogcG9zbmV0a2EiCisKK21zZ2lkICJkdXJhdGlvbiIKK21zZ3N0ciAidHJhamFuamUiCisKK21zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKK21zZ3N0ciAiZG9sxb5pbmEgZW5vdCDEjWFzYSBHU3RyZWFtZXIgKG5hbm9zZWt1bmRlKSIKKworbXNnaWQgImNvZGVjIgorbXNnc3RyICJrb2RlayIKKworbXNnaWQgImNvZGVjIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAia29kZWssIHYga2F0ZXJlbSBzbyBzaHJhbmplbmkgcG9kYXRraSIKKworbXNnaWQgInZpZGVvIGNvZGVjIgorbXNnc3RyICJ2aWRlbyBrb2RlayIKKworbXNnaWQgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAia29kZWssIHYga2F0ZXJlbSBzbyBzaHJhbmplbmkgdmlkZW8gcG9kYXRraSIKKworbXNnaWQgImF1ZGlvIGNvZGVjIgorbXNnc3RyICJ6dm/EjW5pIGtvZGVrIgorCittc2dpZCAiY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJrb2RlaywgdiBrYXRlcmVtIGplIHNocmFuamVuIHp2b2siCisKK21zZ2lkICJzdWJ0aXRsZSBjb2RlYyIKK21zZ3N0ciAia29kZWsgcG9kbmFwaXNvdiIKKworbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAia29kZWssIHYga2F0ZXJlbSBzbyBzaHJhbmplbmkgcG9kbmFwaXNpIgorCittc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKK21zZ3N0ciAiemFwaXMgemFib2puaWthIgorCittc2dpZCAiY29udGFpbmVyIGZvcm1hdCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgInphYm9qbmlrLCB2IGthdGVyZW0gc28gc2hyYW5qZW5pIHBvZGF0a2kiCisKK21zZ2lkICJiaXRyYXRlIgorbXNnc3RyICJiaXRuYSBoaXRyb3N0IgorCittc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAibmF0YW7EjW5hIGFsaSBwb3ZwcmXEjW5hIGJpdG5hIGhpdHJvc3QgdiBiaXRpaC9zIgorCittc2dpZCAibm9taW5hbCBiaXRyYXRlIgorbXNnc3RyICJuYXppdm5hIGJpdG5hIGhpdHJvc3QiCisKK21zZ2lkICJub21pbmFsIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJuYXppdm5hIGJpdG5hIGhpdHJvc3QgdiBiaXRpaC9zIgorCittc2dpZCAibWluaW11bSBiaXRyYXRlIgorbXNnc3RyICJuYWptYW5qxaFhIGJpdG5hIGhpdHJvc3QiCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJuYWptYW5qxaFhIGJpdG5hIGhpdHJvc3QgdiBiaXRpaC9zIgorCittc2dpZCAibWF4aW11bSBiaXRyYXRlIgorbXNnc3RyICJuYWp2ZcSNamEgYml0bmEgaGl0cm9zdCIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgIm5hanZlxI1qYSBiaXRuYSBoaXRyb3N0IHYgYml0aWgvcyIKKworbXNnaWQgImVuY29kZXIiCittc2dzdHIgImtvZGlybmlrIgorCittc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAia29kaXJuaWssIHVwb3JhYmxqZW4gemEga29kaXJhbmplIHByZXRva2EiCisKK21zZ2lkICJlbmNvZGVyIHZlcnNpb24iCittc2dzdHIgInJhemxpxI1pY2Ega29kaXJuaWthIgorCittc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAicmF6bGnEjWljYSBrb2Rpcm5pa2EsIHVwb3JhYmxqZW5lZ2EgemEga29kaXJhbmplIHByZXRva2EiCisKK21zZ2lkICJzZXJpYWwiCittc2dzdHIgInphcG9yZWRuYSDFoXRldmlsa2EiCisKK21zZ2lkICJzZXJpYWwgbnVtYmVyIG9mIHRyYWNrIgorbXNnc3RyICJ6YXBvcmVkbmEgxaF0ZXZpbGthIHNrbGFkYmUiCisKK21zZ2lkICJyZXBsYXlnYWluIHRyYWNrIGdhaW4iCittc2dzdHIgIm9qYcSNaXRldiBzbGVkaSBSZXBsYXlHYWluIgorCittc2dpZCAidHJhY2sgZ2FpbiBpbiBkYiIKK21zZ3N0ciAicHJpZG9iaXRldiBzbGVkaSB2IGRCIgorCittc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBwZWFrIgorbXNnc3RyICJ2cmggc2xlZGkgUmVwbGF5R2FpbiIKKworbXNnaWQgInBlYWsgb2YgdGhlIHRyYWNrIgorbXNnc3RyICJvamHEjWFuamUgdnJoYSBzbGVkaSIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKK21zZ3N0ciAib2phxI1pdGV2IGFsYnVtYSBSZXBsYXlHYWluIgorCittc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKK21zZ3N0ciAicHJpZG9iaXRldiBhbGJ1bWEgdiBkQiIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKK21zZ3N0ciAidnJoYSBhbGJ1bWEgUmVwbGF5R2FpbiIKKworbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgorbXNnc3RyICJvamHEjWFuamUgdnJoYSBhbGJ1bWEiCisKK21zZ2lkICJyZXBsYXlnYWluIHJlZmVyZW5jZSBsZXZlbCIKK21zZ3N0ciAic2tsaWNuYSByYXZlbiBSZXBsYXlHYWluIgorCittc2dpZCAicmVmZXJlbmNlIGxldmVsIG9mIHRyYWNrIGFuZCBhbGJ1bSBnYWluIHZhbHVlcyIKK21zZ3N0ciAic2tsaWNuYSByYXZlbiB2cmVkbm9zdGkgcHJpZG9iaXR2ZSBzbGVkaSBpbiBhbGJ1bWEiCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIgorbXNnc3RyICJqZXppa292bmEga29kYSIKKworbXNnaWQgImxhbmd1YWdlIGNvZGUgZm9yIHRoaXMgc3RyZWFtLCBjb25mb3JtaW5nIHRvIElTTy02MzktMSIKK21zZ3N0ciAia29kYSBqZXppa2EgcHJldG9rYSB2IHNrbGFkdSB6IElTTy02MzktMSIKKworbXNnaWQgImltYWdlIgorbXNnc3RyICJzbGlrYSIKKworbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgInNsaWthLCBwb3ZlemFuYSBzIHByZXRva29tIgorCisjLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKK21zZ2lkICJwcmV2aWV3IGltYWdlIgorbXNnc3RyICJwcmVkb2dsZWRuYSBzbGlrYSIKKworbXNnaWQgInByZXZpZXcgaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAicHJlZG9nbGVkbmEgc2xpa2EsIHBvdmV6YW5hIHMgcHJldG9rb20iCisKK21zZ2lkICJhdHRhY2htZW50IgorbXNnc3RyICJwcmlsb2dhIgorCittc2dpZCAiZmlsZSBhdHRhY2hlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiZGF0b3Rla2EsIHByaWxvxb5lbmEgcHJldG9rdSIKKworbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCittc2dzdHIgInVkYXJjaSBuYSBtaW51dG8iCisKK21zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKK21zZ3N0ciAixaF0ZXZpbG8gdWRhcmNldiBuYSBtaW51dG8gdiB6dm/EjW5lbSBwb3NuZXRrdSIKKworbXNnaWQgImtleXdvcmRzIgorbXNnc3RyICJrbGp1xI1uZSBiZXNlZGUiCisKK21zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKK21zZ3N0ciAieiB2ZWppY28gbG/EjWVuZSBrbGp1xI1uZSBiZXNlZGUsIGtpIG9waXN1amVqbyB2c2ViaW5vIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIG5hbWUiCittc2dzdHIgImltZSB6ZW1samVwaXNuZWdhIG1lc3RhIgorCittc2dpZCAiIgorImh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aXZlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciAiCisicHJvZHVjZWQiCittc2dzdHIgIiIKKyLEjWxvdmVrdSBiZXJsaml2IG9waXMgbWVzdGEsIGtqZXIgamUgYmlsIGJpbCBwb3NuZXRlayBwb3NuZXQgYWxpIGl6ZGVsYW4iCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCittc2dzdHIgInplbWxqZXBpc25hIMWhaXJpbmEgbWVzdGEiCisKK21zZ2lkICIiCisiZ2VvIGxhdGl0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCisiZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIGVxdWF0b3IsIG5lZ2F0aXZlIHZhbHVlcyBmb3IgIgorInNvdXRoZXJuIGxhdGl0dWRlcykiCittc2dzdHIgIiIKKyJ6ZW1samVwaXNuYSDFoWlyaW5hLCBramVyIGplIGJpbCBiaWwgcG9zbmV0ZWsgcG9zbmV0IGFsaSBpemRlbGFuIHYgc3RvcGluamFoICIKKyJnbGVkZSBuYSBXR1M4NCAodnJlZG5vc3QgMCBqZSBkb2xvxI1lbmEgeiBla3ZhdG9yamVtLCBuZWdhdGl2bmUgdnJlZG5vc3RpIHNvICIKKyJkb2xvxI1lbmUgemEganXFvm5lIHplbWxqZXBpc25lIMWhaXJpbmUpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKK21zZ3N0ciAiemVtbGplcGlzbmEgZG9sxb5pbmEgbWVzdGEiCisKK21zZ2lkICIiCisiZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCisibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgorbXNnc3RyICIiCisiemVtbGplcGlzbmEgZG9sxb5pbmEsIGtqZXIgamUgYmlsIGJpbCBwb3NuZXRlayBwb3NuZXQgYWxpIGl6ZGVsYW4gdiBzdG9waW5qYWggIgorImdsZWRlIG5hIFdHUzg0ICh2cmVkbm9zdCAwIGplIGRvbG/EjWVuYSB6IGdsYXZuaW0sIGdyZWVud2nFoWtpbS9uacSNZWxuaW0gIgorInBvbGRuZXZuaWtvbSwgbmVnYXRpdm5lIHZyZWRub3N0aSBzbyBkb2xvxI1lbmUgemEgemFob2RuZSB6ZW1samVwaXNuZSBkb2zFvmluZSkiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gZWxldmF0aW9uIgorbXNnc3RyICJuYWRtb3Jza2EgdmnFoWluYSBtZXN0YSIKKworbXNnaWQgIiIKKyJnZW8gZWxldmF0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiBtZXRlcnMgIgorImFjY29yZGluZyB0byBXR1M4NCAoemVybyBpcyBhdmVyYWdlIHNlYSBsZXZlbCkiCittc2dzdHIgIiIKKyJuYWRtb3Jza2EgdmnFoWluYSwga2plciBqZSBiaWwgYmlsIHBvc25ldGVrIHBvc25ldCBhbGkgaXpkZWxhbiB2IG1ldHJpaCBnbGVkZSAiCisibmEgV0dTODQgKHZyZWRub3N0IDAgamUgcG92cHJlxI1uYSB2acWhaW5hIG1vcnNrZSBnbGFkaW5lKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBjb3VudHJ5IgorbXNnc3RyICJkcsW+YXZhIHplbWxqZXBpc25lIGxlZ2UiCisKK21zZ2lkICJjb3VudHJ5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKK21zZ3N0ciAiZHLFvmF2YSAoYW5nbGXFoWthIHJhemxpxI1pY2EpLCBramVyIGplIGJpbCBwb3NuZXRlayBwb3NuZXQgYWxpIGl6ZGVsYW4iCisKK21zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKK21zZ3N0ciAibWVzdG8gemVtbGplcGlzbmUgbGVnZSIKKworbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICJtZXN0byAoYW5nbGXFoWthIHJhemxpxI1pY2EpLCBramVyIGplIGJpbCBwb3NuZXRlayBwb3NuZXQgYWxpIGl6ZGVsYW4iCisKK21zZ2lkICJnZW8gbG9jYXRpb24gc3VibG9jYXRpb24iCittc2dzdHIgInBvZHJvxI1qZSB6ZW1samVwaXNuZSBsZWdlIgorCittc2dpZCAiIgorImEgbG9jYXRpb24gd2hpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgorInRoZSBuZWlnaGJvcmhvb2QpIgorbXNnc3RyICIiCisib2tyYWogem5vdHJhaiBtZXN0YSwga2plciBqZSBiaWwgcG9zbmV0ZWsgcG9zbmV0IGFsaSBpemRlbGFuIChuYSBwcmltZXI6ICIKKyJzb3NlxaHEjWluYSkiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gaG9yaXpvbnRhbCBlcnJvciIKK21zZ3N0ciAidm9kb3Jhdm5hIG5hcGFrYSB6ZW1samVwaXNuZWdhIG1lc3RhIgorCittc2dpZCAiZXhwZWN0ZWQgZXJyb3Igb2YgdGhlIGhvcml6b250YWwgcG9zaXRpb25pbmcgbWVhc3VyZXMgKGluIG1ldGVycykiCittc2dzdHIgInByacSNYWtvdmFuYSBuYXBha2Egdm9kb3Jhdm5vIHVtZcWhxI1ldmFsbmloIG1lciAodiBtZXRyaWgpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgorbXNnc3RyICJ6ZW1samVwaXNuYSBoaXRyb3N0IGdpYmFuamEiCisKK21zZ2lkICIiCisibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBpbiBtL3MiCittc2dzdHIgImhpdHJvc3QgZ2liYW5qYSBuYXByYXZlIHphamVtYW5qYSBtZWQgaXp2YWphbmplbSB6YWplbWFuamEgdiBtL3MiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgorbXNnc3RyICJ6ZW1samVwaXNuYSBzbWVyIGdpYmFuamEiCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgorIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKKyJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKyJkb2xvxI1hIHNtZXIgZ2liYW5qYSBuYXByYXZlLCBzIGthdGVybyBqZSBiaWwgemFqZXQgcG9zbmV0ZWsuIERvbG/EjWVuIGplIHYgIgorInN0b3BpbmphaCB2IHphcGlzdSBzIHBsYXZham/EjW8gdmVqaWNvLiBWcmVkbm9zdCAwIGRvbG/EjWEgemVtbGplcGlzbmkgc2V2ZXIgIgorImluIHNlIHBvdmXEjXVqZSB2IHNtZXJpIHVyaW5lZ2Ega2F6YWxjYSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBjYXB0dXJlIGRpcmVjdGlvbiIKK21zZ3N0ciAiemVtbGplcGlzbmEgc21lciB6YWplbWFuamEiCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGRldmljZSBpcyBwb2ludGluZyB0byB3aGVuIGNhcHR1cmluZyAgYSBtZWRpYS4gIgorIkl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIHJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSAiCisiZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKyJkb2xvxI1hIHNtZXIgdXNtZXJqZW5vc3RpIG5hcHJhdmUsIHMga2F0ZXJvIGplIGJpbCB6YWpldCBwb3NuZXRlay4gRG9sb8SNZW4gamUgIgorInYgc3RvcGluamFoIHYgemFwaXN1IHMgcGxhdmFqb8SNbyB2ZWppY28uIFZyZWRub3N0IDAgZG9sb8SNYSB6ZW1samVwaXNuaSBzZXZlciAiCisiaW4gc2UgcG92ZcSNdWplIHYgc21lcmkgdXJpbmVnYSBrYXphbGNhIgorCisjLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKK21zZ2lkICJzaG93IG5hbWUiCittc2dzdHIgInBva2HFvmkgaW1lIgorCittc2dpZCAiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSIKK21zZ3N0ciAiSW1lIFRWL25hbml6YW5rZS9vZGRhamUsIGtpIGppIHBvc25ldGVrIHByaXBhZGEiCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQorbXNnaWQgInNob3cgc29ydG5hbWUiCittc2dzdHIgInBva2HFvmkgcmF6dnLFocSNZXZhbG5vIGltZSIKKworbXNnaWQgIiIKKyJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiIgorIkltZSBUVi9uYW5pemFua2Uvb2RkYWplLCBraSBqaSBwb3NuZXRlayBwcmlwYWRhLCB6YSBwb3RyZWJlIHJhenZyxaHEjWFuamEiCisKK21zZ2lkICJlcGlzb2RlIG51bWJlciIKK21zZ3N0ciAiZXBpem9kYSIKKworbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICLFoHRldmlsa2EgZXBpem9kZSB2IHNlem9uaSwga2kgamkgcG9zbmV0ZWsgcHJpcGFkYSIKKworbXNnaWQgInNlYXNvbiBudW1iZXIiCittc2dzdHIgInNlem9uYSIKKworbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICLFoHRldmlsa2Egc2V6b25lIG9kZGFqZSwga2kgamkgcG9zbmV0ZWsgcHJpcGFkYSIKKworbXNnaWQgImx5cmljcyIKK21zZ3N0ciAiYmVzZWRpbG8iCisKK21zZ2lkICJUaGUgbHlyaWNzIG9mIHRoZSBtZWRpYSwgY29tbW9ubHkgdXNlZCBmb3Igc29uZ3MiCittc2dzdHIgIkJlc2VkaWxvIHBvc25ldGthLCBvYmnEjWFqbm8gdXBvcmFibGplbm8gemEgc2tsYWRiZSIKKworbXNnaWQgImNvbXBvc2VyIHNvcnRuYW1lIgorbXNnc3RyICJyYXp2csWhxI1ldmFsbm8gaW1lIHNrbGFkYXRlbGphIgorCittc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAib3NlYmUsIGtpIHNvIHNvZGVsb3ZhbGUgcHJpIHNuZW1hbmp1LCB6YSBwb3RyZWJlIHJhenZyxaHEjWFuamEiCisKK21zZ2lkICJncm91cGluZyIKK21zZ3N0ciAiemRydcW+ZXZhbmplIgorCittc2dpZCAiIgorIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKKyJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgorbXNnc3RyICIiCisiVnNlYmluYSwga2kgc2VnYSDEjWV6IHZlxI0gcG9zbmV0a292LCBwb2RvYm5vIGtvdCBzdGF2a2kgc2ltZm9uaWplLiBKZSB2acWhamUgIgorInJhdm5pIGtvdCBwb3NuZXRlaywgdmVuZGFyIG5pxb5qZSBrb3QgYWxidW0uIgorCittc2dpZCAidXNlciByYXRpbmciCittc2dzdHIgIm9jZW5hIHVwb3JhYm5pa2EiCisKK21zZ2lkICIiCisiUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCisidGhpcyBtZWRpYSIKK21zZ3N0ciAiIgorIk9jZW5hLCBraSBqbyBwcmlzcGV2YSB1cG9yYWJuaWsuIFZpxaFqYSBrb3QgamUsIGJvbGogamUgdXBvcmFibmlrdSB2xaFlxI0uIgorCittc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKK21zZ3N0ciAicHJvaXp2YWphbGVjIG5hcHJhdmUiCisKK21zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICJQcm9penZhamFsZWMgbmFwcmF2ZSwgcyBrYXRlcm8gamUgYmlsIHVzdHZhcmplbmEgZGF0b3Rla2EiCisKK21zZ2lkICJkZXZpY2UgbW9kZWwiCittc2dzdHIgIm1vZGVsIG5hcHJhdmUiCisKK21zZ2lkICJNb2RlbCBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCittc2dzdHIgIk1vZGVsIG5hcHJhdmUsIHMga2F0ZXJvIGplIGJpbCB1c3R2YXJqZW5hIGRhdG90ZWthIgorCittc2dpZCAiYXBwbGljYXRpb24gbmFtZSIKK21zZ3N0ciAiaW1lIHByb2dyYW1hIgorCittc2dpZCAiQXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIgorbXNnc3RyICJQcm9ncmFtLCB1cG9yYWJsamVuIHphIGl6ZGVsYXZvIHBvc25ldGthIgorCittc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKK21zZ3N0ciAicHJvZ3JhbXNraSBwb2RhdGtpIgorCittc2dpZCAiQXJiaXRyYXJ5IGFwcGxpY2F0aW9uIGRhdGEgdG8gYmUgc2VyaWFsaXplZCBpbnRvIHRoZSBtZWRpYSIKK21zZ3N0ciAiIgorIlBvbGp1Ym5pIHBvZGF0a2kgcHJvZ3JhbWEsIGtpIGJvZG8gcG9zdGF2bGplbmkgdiB2cnN0byBwcmVkc3Rhdm5lIHZzZWJpbmUiCisKK21zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKK21zZ3N0ciAidXNtZXJqZW5vc3Qgc2xpa2UiCisKK21zZ2lkICJIb3cgdGhlIGltYWdlIHNob3VsZCBiZSByb3RhdGVkIG9yIGZsaXBwZWQgYmVmb3JlIGRpc3BsYXkiCittc2dzdHIgIktha28gbmFqIGJvIHNsaWthIHphdnJ0aSBhbGkgenJjYWxpIHByZWQgcHJpa2F6b20iCisKK21zZ2lkICIsICIKK21zZ3N0ciAiLCAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAiTkFQQUtBOiBwcmVkbWV0YSAlczogJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQWRkaXRpb25hbCBkZWJ1ZyBpbmZvOlxuIgorIiVzXG4iCittc2dzdHIgIiIKKyJEb2RhdG5pIHBvZGF0a2kgcmF6aHJvxaHEjWV2YW5qYTpcbiIKKyIlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgInNwZWNpZmllZCBlbXB0eSBiaW4gXCIlc1wiLCBub3QgYWxsb3dlZCIKK21zZ3N0ciAiZG9sb8SNZW5hIGplIHByYXpuYSBkdm9qacWha2EgZGF0b3Rla2EgXCIlc1wiLCBrYXIgbmkgZG92b2xqZW5vIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHNraXBwaW5nIgorbXNnc3RyICJkdm9qacWha2EgZGF0b3Rla2EgXCIlc1wiIG5lIG9ic3RhamEsIHphdG8gYm8gZGVqYW5qZSBpenB1xaHEjWVubyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCittc2dzdHIgImxhc3Rub3N0IFwiJXNcIiB2IHByZWRtZXR1IFwiJXNcIiBuZSBvYnN0YWphIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKK21zZ3N0ciAiIgorImxhc3Rub3N0aSBcIiVzXCIgdiBwcmVkbWV0dSBcIiVzXCIgbmkgbW9nb8SNZSBuYXN0YXZpdGkgbmEgdnJlZG5vc3QgXCIlc1wiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgorbXNnc3RyICJwb3ZlemF0aSAlcyBpbiAlcyBuaSBtb2dvxI1lIHBvdmV6YXRpIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICJwcmVkbWV0IFwiJXNcIiBuZSBvYnN0YWphIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKK21zZ3N0ciAidmVsaWtpaCDEjXJrIFwiJXNcIiBuaSBtb2dvxI1lIHJhesSNbGVuaXRpIgorCittc2dpZCAibGluayB3aXRob3V0IHNvdXJjZSBlbGVtZW50IgorbXNnc3RyICJwb3ZlemF2YSBicmV6IHByZWRtZXRhIHZpcmEiCisKK21zZ2lkICJsaW5rIHdpdGhvdXQgc2luayBlbGVtZW50IgorbXNnc3RyICJwb3ZlemF2YSBicmV6IHByZWRtZXRhIHBvbm9yYSIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAiaXp2b3JuaSBwcmVkbWV0IHphIG5hc2xvdiBVUkkgXCIlc1wiIG5lIG9ic3RhamEiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCB0byBsaW5rIFVSSSBcIiVzXCIgdG8iCittc2dzdHIgIm5pIHByZWRtZXRhIHphIHBvdmV6b3ZhbmplIG5hc2xvdmEgXCIlc1wiIG5hIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAicHJlZG1ldCBwb25vcmEgemEgbmFzbG92IFVSSSBcIiVzXCIgbmUgb2JzdGFqYSIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbGluayBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgInByZWRtZXRhIGtvcml0YSB6YSBuYXNsb3YgVVJJIFwiJXNcIiBuaSBtb2dvxI1lIHBvdmV6YXRpIgorCittc2dpZCAiZW1wdHkgcGlwZWxpbmUgbm90IGFsbG93ZWQiCittc2dzdHIgImNldm92b2QgYnJleiB2c2ViaW5lIG5pIGRvdm9samVuIgorCittc2dpZCAiSW50ZXJuYWwgY2xvY2sgZXJyb3IuIgorbXNnc3RyICJOb3RyYW5qYSBuYXBha2EgdXJlLiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCittc2dzdHIgIk5vdHJhbmphIG5hcGFrYSB0b2thIHBvZGF0a292LiIKKworbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgorbXNnc3RyICJWZWxpa28gbWVkcG9tbmlsbmlrb3Ygc2UgcHJhem5pLiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBwcm9ibGVtLiIKK21zZ3N0ciAiTm90cmFuamEgdGXFvmF2YSB0b2thIHBvZGF0a292LiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiTm90cmFuamEgbmFwYWthIHByZXRva2EgcG9kYXRrb3YuIgorCittc2dpZCAiRmlsdGVyIGNhcHMiCittc2dzdHIgIkZpbHRyaXJhaiB2ZWxpa29zdCDEjXJrIgorCittc2dpZCAiIgorIlJlc3RyaWN0IHRoZSBwb3NzaWJsZSBhbGxvd2VkIGNhcGFiaWxpdGllcyAoTlVMTCBtZWFucyBBTlkpLiBTZXR0aW5nIHRoaXMgIgorInByb3BlcnR5IHRha2VzIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBwbGllZCBHc3RDYXBzIG9iamVjdC4iCittc2dzdHIgIiIKKyJPbWVqaSBtb8W+bmUgZG92b2xqZW5lIHptb8W+bm9zdGkgKE5VTEwgcG9tZW5pIEFOWSwgdnNlKS4gUyB0ZW0gbmFzbGF2bGphdGUgIgorInByaWxvxb5lbmkgcHJlZG1ldCBHc3RDYXBzLiIKKworbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJJbWUgZGF0b3Rla2UgemEgcGlzYW5qZSBuaSBkb2xvxI1lbm8uIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiRGF0b3Rla2UgXCIlc1wiIG5pIG1vZ2/EjWUgb2RwcmV0aSB6YSBwaXNhbmplLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiTmFwYWthIG1lZCB6YXBpcmFuamVtIGRhdG90ZWtlIFwiJXNcIi4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Vla2luZyBpbiBmaWxlIFwiJXNcIi4iCittc2dzdHIgIk5hcGFrYSBtZWQgaXNrYW5qZW0gdiBkYXRvdGVraSBcIiVzXCIuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgorbXNnc3RyICJOYXBha2EgbWVkIHBpc2FuamVtIHYgZGF0b3Rla28gXCIlc1wiLiIKKworbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHJlYWRpbmcuIgorbXNnc3RyICJJbWUgZGF0b3Rla2UgemEgYnJhbmplIG5pIGRvbG/EjWVuby4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgorbXNnc3RyICJEYXRvdGVrZSBcIiVzXCIgbmkgbW9nb8SNZSBvZHByZXRpIHphIGJyYW5qZS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCittc2dzdHIgIlBvZGF0a292IG8gXCIlc1wiIG5pIG1vZ8SNZSBwcmlkb2JpdGkuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIlwiJXNcIiBpcyBhIGRpcmVjdG9yeS4iCittc2dzdHIgIlwiJXNcIiBqZSBtYXBhLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGaWxlIFwiJXNcIiBpcyBhIHNvY2tldC4iCittc2dzdHIgIkRhdG90ZWthIFwiJXNcIiBqZSB2dGnEjS4iCisKK21zZ2lkICJGYWlsZWQgYWZ0ZXIgaXRlcmF0aW9ucyBhcyByZXF1ZXN0ZWQuIgorbXNnc3RyICJQbyB2ZcSNIHBvbm92aXR2YWggamUgYmlsbyAocG8gemFodGV2aSkgb3ByYXZpbG8gbmV1c3BlxaFubyBwcmVraW5qZW5vLiIKKworbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCittc2dzdHIgIlphxI1hc25hIG1hcGEgbmkgZG9sb8SNZW5hLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIgorbXNnc3RyICJaYcSNYXNuZSBkYXRvdGVrZSBcIiVzXCIgbmkgbW9nb8SNZSB1c3R2YXJpdGkuIgorCittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKK21zZ3N0ciAiTmFwYWthIG1lZCB6YXBpc292YW5qZW0gdiBwcmVqZXRvIGRhdG90ZWtvLiIKKworbXNnaWQgImNhcHMiCittc2dzdHIgInZlbGlrZSDEjXJrZSIKKworbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCittc2dzdHIgInphem5hbmUgc28gem1vxb5ub3N0aSBwcmV0b2thIgorCittc2dpZCAibWluaW11bSIKK21zZ3N0ciAibmFqbWFuaiIKKworbXNnaWQgIm1heGltdW0iCittc2dzdHIgIm5hanZlxI0iCisKK21zZ2lkICJmb3JjZSBjYXBzIgorbXNnc3RyICJ2c2lsaSB2ZWxpa2UgxI1ya2UiCisKK21zZ2lkICJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIKK21zZ3N0ciAidnNpbGkgdmVsaWtlIMSNcmtlIGJyZXogcG90cmpldmFuamEgcGlzYXZlIgorCittc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgorbXNnc3RyICJQcmV0b2sgbmUgdnNlYnVqZSBwb2RhdGtvdi4iCisKK21zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgorbXNnc3RyICJWZ3JhamVuaSB2bWVzbmlraTpcbiIKKworbXNnaWQgInJlYWRhYmxlIgorbXNnc3RyICJiZXJsaml2byIKKworbXNnaWQgIndyaXRhYmxlIgorbXNnc3RyICJ6YXBpc2xqaXZvIgorCittc2dpZCAiY29udHJvbGxhYmxlIgorbXNnc3RyICJuYWR6b3Jsaml2byIKKworbXNnaWQgImNoYW5nZWFibGUgaW4gTlVMTCwgUkVBRFksIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlIgorbXNnc3RyICJzcHJlbWVubGppdm8gbGUgdiBzdGFuamloIE5VTEwsIFJFQURZLCBQQVVTRUQgaW4gUExBWUlORyIKKworbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiCittc2dzdHIgInNwcmVtZW5saml2byBsZSB2IHN0YW5qaWggTlVMTCwgUkVBRFkgaW4gUEFVU0VEIgorCittc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwgb3IgUkVBRFkgc3RhdGUiCittc2dzdHIgInNwcmVtZW5saml2byBsZSB2IHN0YW5qaWggTlVMTCBpbiBSRUFEWSIKKworbXNnaWQgIkJsYWNrbGlzdGVkIGZpbGVzOiIKK21zZ3N0ciAiRGF0b3Rla2UgbmEgxI1ybmVtIHNlem5hbXU6IgorCittc2dpZCAiVG90YWwgY291bnQ6ICIKK21zZ3N0ciAiU2t1cG5vOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxhY2tsaXN0ZWQgZmlsZSIKK21zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHJbMF0gIiVkIGRhdG90ZWsgbmEgxI1ybmVtIHNlem5hbXUiCittc2dzdHJbMV0gIiVkIGRhdG90ZWthIG5hIMSNcm5lbSBzZXpuYW11IgorbXNnc3RyWzJdICIlZCBkYXRvdGVraSBuYSDEjXJuZW0gc2V6bmFtdSIKK21zZ3N0clszXSAiJWQgZGF0b3Rla2UgbmEgxI1ybmVtIHNlem5hbXUiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgcGx1Z2luIgorbXNnaWRfcGx1cmFsICIlZCBwbHVnaW5zIgorbXNnc3RyWzBdICIlZCB2c3RhdmtvdiIKK21zZ3N0clsxXSAiJWQgdnN0YXZlayIKK21zZ3N0clsyXSAiJWQgdnN0YXZrYSIKK21zZ3N0clszXSAiJWQgdnN0YXZraSIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBibGFja2xpc3QgZW50cnkiCittc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdCBlbnRyaWVzIgorbXNnc3RyWzBdICIlZCB2bm9zb3YgbmEgxI1ybmVtIHNlem5hbXUiCittc2dzdHJbMV0gIiVkIHZub3MgbmEgxI1ybmVtIHNlem5hbXUiCittc2dzdHJbMl0gIiVkIHZub3NhIG5hIMSNcm5lbSBzZXpuYW11IgorbXNnc3RyWzNdICIlZCB2bm9zaSBuYSDEjXJuZW0gc2V6bmFtdSIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBmZWF0dXJlIgorbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKK21zZ3N0clswXSAiJWQgem1vxb5ub3N0aSIKK21zZ3N0clsxXSAiJWQgem1vxb5ub3N0IgorbXNnc3RyWzJdICIlZCB6bW/Fvm5vc3RpIgorbXNnc3RyWzNdICIlZCB6bW/Fvm5vc3RpIgorCittc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgorbXNnc3RyICJJenBpxaFpIHZzZSBwcmVkbWV0ZSIKKworbXNnaWQgIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHIgIkl6cGnFoWkgc2V6bmFtIGRhdG90ZWsgbmEgxI1ybmVtIHNlem5hbXUiCisKK21zZ2lkICIiCisiUHJpbnQgYSBtYWNoaW5lLXBhcnNhYmxlIGxpc3Qgb2YgZmVhdHVyZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4gb3IgYWxsICIKKyJwbHVnaW5zIHByb3ZpZGUuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIGluIGNvbm5lY3Rpb24gd2l0aCBleHRlcm5hbCAiCisiYXV0b21hdGljIHBsdWdpbiBpbnN0YWxsYXRpb24gbWVjaGFuaXNtcyIKK21zZ3N0ciAiIgorIkl6cGnFoWkgc3Ryb2pubyByYXrEjWxlbmplbiBzZXpuYW0gbW/Fvm5vc3RpIG5hdmVkZW5lZ2EgdnN0YXZrYSBhbGkgdnNlaCAiCisidnN0YXZrb3YuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXBvcmFibm8gdiBwb3ZlemF2aSB6IHp1bmFuamltaSAiCisibWVoYW5pem1pIHphIHNhbW9kZWpubyBuYW1lc3RpdGV2IHZzdGF2a292IgorCittc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgorbXNnc3RyICJJenBpxaFpIHNlem5hbSB2c2ViaW5lIHZzdGF2a292IgorCittc2dpZCAiUHJpbnQgc3VwcG9ydGVkIFVSSSBzY2hlbWVzLCB3aXRoIHRoZSBlbGVtZW50cyB0aGF0IGltcGxlbWVudCB0aGVtIgorbXNnc3RyICJJenBpxaFpIHBvZHBydGUgc2hlbWUgVVJJIHMgcHJlZG1ldGksIGtpIGppaCB2c3RhdmxqYWpvIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgorbXNnc3RyICJEYXRvdGVrZSB2c3RhdmthIG5pIG1vZ2/EjWUgbmFsb8W+aXRpOiAlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgorbXNnc3RyICJQcmVkbWV0IGFsaSBkYXRvdGVrYSBcIiVzXCIgbmUgb2JzdGFqYVxuIgorCittc2dpZCAiSW5kZXggc3RhdGlzdGljcyIKK21zZ3N0ciAiU3RhdGlzdGlrYSBrYXphbGEiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICJQcmVqZXRvIHNwb3JvxI1pbG8gIyV1IG9kIHByZWRtZXRhIFwiJXNcIiAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCittc2dzdHIgIlByZWpldG8gc3Bvcm/EjWlsbyAjJXUgb2QgcGxhZG5qYSBcIiVzOiVzXCIgKCVzKTogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICJQcmVqZXRvIHNwb3JvxI1pbG8gIyV1IG9kIHByZWRtZXRhIFwiJXNcIiAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKK21zZ3N0ciAiUHJlamV0byBzcG9yb8SNaWxvICMldSAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIgorbXNnc3RyICJQcmVqZXQgRU9TIHByZWRtZXRhIFwiJXNcIi5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgorbXNnc3RyICJOQUpERU5BIE9aTkFLQSAgICAgIDogbmFqZGVubyBzIHByZWRtZXRvbSBcIiVzXCIuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBwYWQgXCIlczolc1wiLlxuIgorbXNnc3RyICJOQUpERU5BIE9aTkFLQSAgICAgIDogbmFqZGVubyBzIHBsYWRuamVtIFwiJXM6JXNcIi5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCittc2dzdHIgIk5BSkRFTkEgT1pOQUtBICAgICAgOiBuYWpkZW5vIHMgcHJlZG1ldG9tIFwiJXNcIi5cbiIKKworbXNnaWQgIkZPVU5EIFRBR1xuIgorbXNnc3RyICJOQUpERU5BIE9aTkFLQVxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJTkZPOlxuIgorIiVzXG4iCittc2dzdHIgIiIKKyJQT0RBVEtJOlxuIgorIiVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgorbXNnc3RyICJPUE9aT1JJTE86IHByZWRtZXQgJXM6ICVzXG4iCisKK21zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIGJ1ZmZlcmluZyB0byBmaW5pc2guLi5cbiIKK21zZ3N0ciAiUHJpcHJhdmxqZW5vLCDEjWFrYW5qZSBuYSB6YWtsanXEjWVrIHBvbG5qZW5qYSBtZWRwb21uaWxuaWthIC4uLlxuIgorCittc2dpZCAiYnVmZmVyaW5nLi4uIgorbXNnc3RyICJwb2xuamVuamUgbWVkcG9tbmlsbmlrYSAuLi4iCisKK21zZ2lkICJEb25lIGJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgorbXNnc3RyICIiCisiUG9sbmplbmplIG1lZHBvbW5pbG5pa2EgamUga29uxI1hbm8sIG5hc3RhdmxqYW5qZSBjZXZvdm9kYSBuYSBQTEFZSU5HIC4uLlxuIgorCittc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAiUG9sbmplbmplIG1lZHBvbW5pbG5pa2EsIG5hc3RhdmxqYW5qZSBjZXZvdm9kYSBuYSBQQVVTRUQgLi4uXG4iCisKK21zZ2lkICJSZWRpc3RyaWJ1dGUgbGF0ZW5jeS4uLlxuIgorbXNnc3RyICJQcmVyYXpwb3JlamFuamUgcHJpdGFqZW5vc3RpIC4uLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iCittc2dzdHIgIk5hc3RhdmxqYW5qZSBzdGFuamEgbmEgJXMsIGtvdCB0byB6YWh0ZXZhICVzIC4uLlxuIgorCittc2dpZCAiSW50ZXJydXB0OiBTdG9wcGluZyBwaXBlbGluZSAuLi5cbiIKK21zZ3N0ciAiUHJla2luaXRldjogemF1c3RhdmxqYW5qZSBjZXZvdm9kYSAuLi4gXG4iCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKK21zZ3N0ciAiTWFuamtham/EjWkgZWxlbWVudDogJXNcbiIKKworbXNnaWQgIk91dHB1dCB0YWdzIChhbHNvIGtub3duIGFzIG1ldGFkYXRhKSIKK21zZ3N0ciAiSXpob2RuZSBvem5ha2UgKHpuYW5lIHR1ZGkga290IG1ldGFwb2RhdGtpKSIKKworbXNnaWQgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCittc2dzdHIgIkl6aG9kbmkgcG9kYXRraSBvIHN0YW5qdSBpbiBvYnZlc3RpbGEgbyBsYXN0bm9zdGloIgorCittc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiTmUgaXpwacWhaSBwb2Ryb2Jub3N0aSBuYXByZWRrYSIKKworbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKK21zZ3N0ciAiSXpob2RuYSBzcG9yb8SNaWxhIgorCittc2dpZCAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKK21zZ3N0ciAiTmUgaXpwacWhaSBwb2Ryb2Jub3N0aSBzdGFuamEgVlJTVEUiCisKK21zZ2lkICJUWVBFMSxUWVBFMiwuLi4iCittc2dzdHIgIlZSU1RBMSwgVlJTVEEyIC4uLiIKKworbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKK21zZ3N0ciAiTmEgbmFtZXN0aSByb8SNbmlrYSBuYXBhayIKKworbXNnaWQgIlByaW50IGFsbG9jIHRyYWNlIChpZiBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSkiCittc2dzdHIgIiIKKyJJenBpxaFpIHphem5hdmFuamUgZG9kZWxqZXZhbmphICjEjWUgamUgbW/Fvm5vc3Qgb21vZ2/EjWVuYSB2IHRyZW51dGt1IGtvZG5lZ2EgIgorInByZXZhamFuamEpIgorCittc2dpZCAiRm9yY2UgRU9TIG9uIHNvdXJjZXMgYmVmb3JlIHNodXR0aW5nIHRoZSBwaXBlbGluZSBkb3duIgorbXNnc3RyICJWaXJ1IHZzaWxpIEVPUyBwcmVkIHphdXN0YXZpdHZpam8gY2V2b3ZvZGEiCisKK21zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCittc2dzdHIgIlpiZXJpIGluIG5hdGlzbmkgc3RhdGlzdGlrbyBrYXphbGEiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZDogJXMuXG4iCittc2dzdHIgIk5BUEFLQTogY2V2b3ZvZGEgbmkgbW9nb8SNZSBpemdyYWRpdGk6ICVzLlxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKK21zZ3N0ciAiTkFQQUtBOiBjZXZvdm9kYSBuaSBtb2dvxI1lIGl6Z3JhZGl0aS5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCittc2dzdHIgIk9QT1pPUklMTzogY2V2b3ZvZCB6IG5hcGFrYW1pOiAlc1xuIgorCittc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgorbXNnc3RyICJOQVBBS0E6IHByZWRtZXRhIFwiY2V2b3ZvZGFcIiBuaSBtb2dvxI1lIG5hanRpLlxuIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCittc2dzdHIgIk5hc3RhdmxqYW5qZSBjZXZvdm9kYSBuYSBQQVVTRUQgLi4uXG4iCisKK21zZ2lkICJFUlJPUjogUGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBhdXNlLlxuIgorbXNnc3RyICJOQVBBS0E6IGNldm92b2RhIG5pIG1vZ2/EjWUgcG9zdGF2aXRpIHYgbWlyb3ZhbmplLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgorbXNnc3RyICJDZXZvdm9kIGplIMW+aXYgaW4gZ2EgbmkgcG90cmVibm8gcHJpcHJhdml0aSAuLi5cbiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCittc2dzdHIgIkNldm92b2Qgc2UgcHJpcHJhdmxqYSAuLi5cbiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcHJlcm9sbC5cbiIKK21zZ3N0ciAiTkFQQUtBOiBjZXZvdm9kYSBuaSBtb2dvxI1lIHByaXByYXZpdGkuXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMRUQgLi4uXG4iCittc2dzdHIgIkNldm92b2QgamUgcHJpcHJhdmxqZW4gLi4uXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIk5hc3RhdmxqYW5qZSBjZXZvdm9kYSBuYSBQTEFZSU5HIC4uLlxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIgorbXNnc3RyICJOQVBBS0E6IHZzZWJpbmUgY2V2b3ZvZGEgbmkgbW9nb8SNZSBwcmVkdmFqYXRpLlxuIgorCittc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gRm9yY2luZyBFT1Mgb24gdGhlIHBpcGVsaW5lXG4iCittc2dzdHIgIkVPUyBvYiBpemtsb3B1IGplIG9tb2dvxI1lbiAtLSB2c2lsamVuIEVPUyB2c2ViaW5lIGNldm92b2RhXG4iCisKK21zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKK21zZ3N0ciAixIxha2FuamUgbmEgRU9TIC4uLlxuIgorCittc2dpZCAiRU9TIHJlY2VpdmVkIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKK21zZ3N0ciAiUHJlamV0IEVPUyAtIHphdXN0YXZsamFuamUgY2V2b3ZvZGEgLi4uXG4iCisKK21zZ2lkICJBbiBlcnJvciBoYXBwZW5lZCB3aGlsZSB3YWl0aW5nIGZvciBFT1NcbiIKK21zZ3N0ciAiTWVkIMSNYWthbmplbSBuYSBFT1MgamUgcHJpxaFsbyBkbyBuYXBha2VcbiIKKworbXNnaWQgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgorbXNnc3RyICJJenZhamFuamUgamUgYmlsbyBwcmVraW5qZW5vIHBvICUiCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIC4uLlxuIgorbXNnc3RyICJOYXN0YXZsamFuamUgY2V2b3ZvZGEgbmEgUkVBRFkgLi4uXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIE5VTEwgLi4uXG4iCittc2dzdHIgIk5hc3RhdmxqYW5qZSBjZXZvdm9kYSBuYSBOVUxMIC4uLlxuIgorCittc2dpZCAiRnJlZWluZyBwaXBlbGluZSAuLi5cbiIKK21zZ3N0ciAiU3Byb8WhxI1hbmplIGNldm92b2RhIC4uLlxuIgorCisjfiBtc2dpZCAiVXNhZ2U6IGdzdC14bWxsYXVuY2ggPGZpbGUueG1sPiBbIGVsZW1lbnQucHJvcGVydHk9dmFsdWUgLi4uIF1cbiIKKyN+IG1zZ3N0ciAiIgorI34gIlVwb3JhYmE6IGdzdC14bWxsYXVuY2ggPGRhdG90ZWthLnhtbD4gWyBwcmVkbWV0Lmxhc3Rub3N0PXZyZWRub3N0IC4uLiBdXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogcGFyc2Ugb2YgeG1sIGZpbGUgJyVzJyBmYWlsZWQuXG4iCisjfiBtc2dzdHIgIk5BUEFLQTogcmF6xI1sZW5qZXZhbmplIGRhdG90ZWtlIFhNTCBcIiVzXCIgamUgc3BvZGxldGVsby5cbiIKKworI34gbXNnaWQgIkVSUk9SOiBubyB0b3BsZXZlbCBwaXBlbGluZSBlbGVtZW50IGluIGZpbGUgJyVzJy5cbiIKKyN+IG1zZ3N0ciAiTkFQQUtBOiB2IGRhdG90ZWtpIFwiJXNcIiBuaSB2cmhuamVnYSBwcmVkbWV0YSBjZXZvdm9kYS5cbiIKKworI34gbXNnaWQgIldBUk5JTkc6IG9ubHkgb25lIHRvcGxldmVsIGVsZW1lbnQgaXMgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS5cbiIKKyN+IG1zZ3N0ciAiT1BPWk9SSUxPOiB0cmVudXRubyBqZSBwb2RwcnQgbGUgZW4gdnJobmppIHByZWRtZXQuXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogY291bGQgbm90IHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAlZDogJXMuXG4iCisjfiBtc2dzdHIgIk5hcGFrYTogYXJndW1lbnRhICVkIHVrYXpuZSB2cnN0aWNlIG5pIG1vZ2/EjWUgcmF6xI1sZW5pdGk6ICVzLlxuIgorCisjfiBtc2dpZCAiV0FSTklORzogZWxlbWVudCBuYW1lZCAnJXMnIG5vdCBmb3VuZC5cbiIKKyN+IG1zZ3N0ciAiT1BPWk9SSUxPOiBwcmVkbWV0YSB6IGltZW5vbSBcIiVzXCIgbmkgbW9nb8SNZSBuYWp0aS5cbiIKKworI34gbXNnaWQgIlNhdmUgeG1sIHJlcHJlc2VudGF0aW9uIG9mIHBpcGVsaW5lIHRvIEZJTEUgYW5kIGV4aXQiCisjfiBtc2dzdHIgIlNocmFuaSBYTUwtcHJlZHN0YXZpdGV2IGNldm92b2RhIHYgREFUT1RFS08gaW4ga29uxI1haiIKKworI34gbXNnaWQgIkZJTEUiCisjfiBtc2dzdHIgIkRBVE9URUtBIgorCisjfiBtc2dpZCAiRG8gbm90IGluc3RhbGwgc2lnbmFsIGhhbmRsZXJzIGZvciBTSUdVU1IxIGFuZCBTSUdVU1IyIgorI34gbXNnc3RyICJOZSBuYW1lc3RpIHJvxI1uaWtvdiBzaWduYWxvdiB6YSBTSUdVU1IxIGluIFNJR1VTUjIiCmRpZmYgLS1naXQgYS9wby9zcS5nbW8gYi9wby9zcS5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE3ZDE4YwotLS0gL2Rldi9udWxsCisrKyBiL3BvL3NxLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9zcS5wbyBiL3BvL3NxLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNWI1MDQKLS0tIC9kZXYvbnVsbAorKysgYi9wby9zcS5wbwpAQCAtMCwwICsxLDEzMTcgQEAKKyMgUMOrcmt0aGltaSBpIG1lc2F6aGV2ZSB0w6sgZ3N0cmVhbWVyIG7DqyBzaHFpcC4KKyMgQ29weXJpZ2h0IChDKSAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBMYXVyZW50IERoaW1hIDxsYXVyZW50aUBhbGJsaW51eC5uZXQ+LCAyMDA0LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDAuOC40XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDktMjkgMTQ6NTUrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDQtMDgtMDcgMjM6NDYrMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogTGF1cmVudCBEaGltYSA8bGF1cmVudGlAYWxibGludXgubmV0PlxuIgorIkxhbmd1YWdlLVRlYW06IEFsYmFuaWFuIDxiZWdyYWpAaG90bWFpbC5jb20+XG4iCisiTGFuZ3VhZ2U6IHNxXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKK21zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCittc2dzdHIgIlByaW50byB2ZXJzaW9uaW4gZSBHU3RyZWFtZXIiCisKK21zZ2lkICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKK21zZ3N0ciAiQsOraiBxw6sgdMOrIGdqaXRow6sgcGFyYWxham3Dq3JpbWV0IHTDqyBqZW7DqyBmYXRhbGUiCisKK21zZ2lkICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKK21zZ3N0ciAiUHJpbnRvIGthdGVnb3JpdMOrIGUgZGVidWcgbsOrIGRpc3BvemljaW9uIGRoZSBkaWwiCisKK21zZ2lkICIiCisiRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmcm9tIDEgKG9ubHkgZXJyb3IpIHRvIDUgKGFueXRoaW5nKSBvciAwIGZvciBubyBvdXRwdXQiCittc2dzdHIgIiIKKyJOaXZlbGkgaSBwcmV6Z2plZGh1ciBpIGRlYnVnIG5nYSAxICh2ZXTDq20gZ2FiaW1pKSBuw6sgNSAoZ2ppdGjDp2thKSBvc2UgMCBww6tyICIKKyJqbyBvdXRwdXQiCisKK21zZ2lkICJMRVZFTCIKK21zZ3N0ciAiTklWRUxJIgorCittc2dpZCAiIgorIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5X25hbWU6bGV2ZWwgcGFpcnMgdG8gc2V0IHNwZWNpZmljIGxldmVscyBmb3IgIgorInRoZSBpbmRpdmlkdWFsIGNhdGVnb3JpZXMuIEV4YW1wbGU6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKK21zZ3N0ciAiIgorIkxpc3RhIGUgY2F0ZWdvcnlfbmFtZSwgbmRhcsOrIG1lIHByZXNqZTpldGlrZXTDqyDDp2lmdGUgcMOrciB0w6sgcMOrcmNha3R1YXIgIgorImV0aWtldGEgc3BlY2lmaWtlIHDDq3Iga2F0ZWdvcml0w6sgaW5kaXZpZHVhbGUuIFNoZW1idWxsOiBHU1RfQVVUT1BMVUc6NSwiCisiR1NUX0VMRU1FTlRfKjozIgorCittc2dpZCAiTElTVCIKK21zZ3N0ciAiTElTVMOLIgorCittc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCittc2dzdHIgIsOHJ2FrdGl2byBvdXRwdXQgc2h1bcOrbmdqeXLDq3NoIHTDqyBkZWJ1ZyIKKworbXNnaWQgIkRpc2FibGUgZGVidWdnaW5nIgorbXNnc3RyICLDhydha3Rpdm8gZGVidWciCisKK21zZ2lkICJFbmFibGUgdmVyYm9zZSBwbHVnaW4gbG9hZGluZyBkaWFnbm9zdGljcyIKK21zZ3N0ciAiQWt0aXZvIGvDq3JrZXPDq24gZSBwbHVnaW4gdMOrIG5nYXJraW1pdCB0w6sgZGlhZ25vc3Rpa2ltZXZlIgorCittc2dpZCAiQ29sb24tc2VwYXJhdGVkIHBhdGhzIGNvbnRhaW5pbmcgcGx1Z2lucyIKK21zZ3N0ciAiIgorCittc2dpZCAiUEFUSFMiCittc2dzdHIgIlBPWklDSU9ORVQiCisKKyMsIGZ1enp5Cittc2dpZCAiIgorIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgorImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKK21zZ3N0ciAiIgorIkxpc3RhIGUgcGx1Z2luLCB0w6sgbmRhcsOrIG1lIHByZXNqZSwgccOrIGR1aGVuIHBhcmFuZ2Fya3VhciBuw6sgcGxvdMOrc2ltIHTDqyAiCisibGlzdMOrcyBzw6sgcmVnamlzdHJ1YXIgdGVrIGUgbmRyeXNodWVzaG1qYSBlIGFtYmllbnRpdCBHU1RfUExVR0lOX1BBVEgiCisKK21zZ2lkICJQTFVHSU5TIgorbXNnc3RyICJQTFVHSU5TIgorCittc2dpZCAiRGlzYWJsZSB0cmFwcGluZyBvZiBzZWdtZW50YXRpb24gZmF1bHRzIGR1cmluZyBwbHVnaW4gbG9hZGluZyIKK21zZ3N0ciAiIgorIsOHJ2FrdGl2byByZWdqaXN0cmltaW4gZSBkw6tzaHRpbWV2ZSB0w6sgc2VnbWVudHVhcmEgZ2phdMOrIG5nYXJraW1pdCB0w6sgcGx1Z2luIgorCittc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIiIKKworbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIiIKKworbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiU2hvdyBHU3RyZWFtZXIgT3B0aW9ucyIKK21zZ3N0ciAiUHJpbnRvIHZlcnNpb25pbiBlIEdTdHJlYW1lciIKKworbXNnaWQgIlVua25vd24gb3B0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIGNvcmUgbGlicmFyeSBlcnJvci4iCittc2dzdHIgIkdTdHJlYW1lciBuZGVzaGkgbsOrIG5qw6sgZ2FiaW0gdMOrIHDDq3Jnaml0aHNow6ttIHTDqyBsaWJyYXJpc8OrIGJhesOrLiIKKworIywgZnV6enkKK21zZ2lkICIiCisiR1N0cmVhbWVyIGRldmVsb3BlcnMgd2VyZSB0b28gbGF6eSB0byBhc3NpZ24gYW4gZXJyb3IgY29kZSB0byB0aGlzIGVycm9yLiIKK21zZ3N0ciAiIgorIlpodmlsbHVlc2l0IGUgR1N0cmVhbWVyIGlzaGluIHRlcMOrciB0w6sgbG9kaHVyIHDDq3IgdCdpIGNha3R1YXIgbmrDqyBrb2QgZ2FiaW1pICIKKyJrw6t0aWogZGlmZWt0aS4gIEp1IGx1dGVtIGTDq3Jnb25pIG5qw6sgcmFwb3J0LiIKKworIywgZnV6enkKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKK21zZ3N0ciAiR2FiaW0gaSBicmVuZHNow6ttIGkgR1N0cmVhbWVyOiBrb2RpIG11bmdvbi4gIFJhcG9ydG8gYnVnLiIKKworbXNnaWQgIiIKKyJHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQgYW5kIHNvbWUgZWxlbWVudCBmYWlsZWQgdG8gcG9zdCBhICIKKyJwcm9wZXIgZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogcGFkIHByb2JsZW0uIgorbXNnc3RyICJHYWJpbSBpIGJyZW5kc2jDq20gaSBHU3RyZWFtZXI6IHByb2JsZW0gbWUgc2h0ZWd1bi4gIFJhcG9ydG8gYnVnLiIKKworIywgZnV6enkKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiIKK21zZ3N0ciAiR2FiaW0gaSBicmVuZHNow6ttIGkgR1N0cmVhbWVyOiBwcm9ibGVtIGkgdGhyZWFkLiAgUmFwb3J0byBidWcuIgorCisjLCBmdXp6eQorbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCittc2dzdHIgIkdhYmltIGkgYnJlbmRzaMOrbSBpIEdTdHJlYW1lcjogcHJvYmxlbSBuZWdvY2ltaS4gIFJhcG9ydG8gYnVnLiIKKworIywgZnV6enkKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgorbXNnc3RyICJHYWJpbSBpIGJyZW5kc2jDq20gaSBHU3RyZWFtZXI6IHByb2JsZW0gbmRvZGhpZS4gIFJhcG9ydG8gYnVnLiIKKworIywgZnV6enkKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4iCittc2dzdHIgIkdhYmltIGkgYnJlbmRzaMOrbSBpIEdTdHJlYW1lcjogcHJvYmxlbSBrw6tya2ltaS4gIFJhcG9ydG8gYnVnLiIKKworIywgZnV6enkKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNhcHMgcHJvYmxlbS4iCittc2dzdHIgIkdhYmltIGkgYnJlbmRzaMOrbSBpIEdTdHJlYW1lcjogcHJvYmxlbSBkcmVqdGltaS4gIFJhcG9ydG8gYnVnLiIKKworIywgZnV6enkKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKK21zZ3N0ciAiR2FiaW0gaSBicmVuZHNow6ttIGkgR1N0cmVhbWVyOiBwcm9ibGVtIG1lIHRhZy4gIFJhcG9ydG8gYnVnLiIKKworbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIgorbXNnc3RyICJHYWJpbSBpIGJyZW5kc2jDq20gaSBHU3RyZWFtZXI6IHByb2JsZW0ga8OrcmtpbWkuICBSYXBvcnRvIGJ1Zy4iCisKK21zZ2lkICIiCisiVGhpcyBhcHBsaWNhdGlvbiBpcyB0cnlpbmcgdG8gdXNlIEdTdHJlYW1lciBmdW5jdGlvbmFsaXR5IHRoYXQgaGFzIGJlZW4gIgorImRpc2FibGVkLiIKK21zZ3N0ciAiIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIgbmRlc2hpIG7DqyBuasOrIGdhYmltIGxpYnJhcmllIHTDqyBzdXBvcnRpdCB0w6sgcMOrcmdqaXRoc2jDq20uIgorCittc2dpZCAiQ291bGQgbm90IGluaXRpYWxpemUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiRSBwYW11bmR1ciBuaXNqYSBlIGxpYnJhcmlzw6sgbWLDq3NodGV0w6tzZS4iCisKK21zZ2lkICJDb3VsZCBub3QgY2xvc2Ugc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiRSBwYW11bmR1ciBtYnlsbGphIGUgbGlicmFyaXPDqyBtYsOrc2h0ZXTDq3NlLiIKKworIywgZnV6enkKK21zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIkUgcGFtdW5kdXIgbWJ5bGxqYSBlIGxpYnJhcmlzw6sgbWLDq3NodGV0w6tzZS4iCisKK21zZ2lkICJFbmNvZGluZyBlcnJvci4iCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHJlc291cmNlIGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIG5kZXNoaSBuw6sgbmrDqyBnYWJpbSB0w6sgcMOrcmdqaXRoc2jDq20gdMOrIGxpYnJhcmlzw6sgYmF6w6suIgorCittc2dpZCAiUmVzb3VyY2Ugbm90IGZvdW5kLiIKK21zZ3N0ciAiQnVyaW1pIG51ayB1IGdqZXQuIgorCittc2dpZCAiUmVzb3VyY2UgYnVzeSBvciBub3QgYXZhaWxhYmxlLiIKK21zZ3N0ciAiQnVyaW1pIMOrc2h0w6sgaSB6w6tuw6sgb3NlIGpvIG7DqyBkaXNwb3ppY2lvbi4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCittc2dzdHIgIkUgcGFtdW5kdXIgaGFwamEgZSBidXJpbWl0IHDDq3IgbGV4aW0uIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJFIHBhbXVuZHVyIGhhcGphIGUgYnVyaW1pdCBww6tyIHNoa3JpbS4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCittc2dzdHIgIkUgcGFtdW5kdXIgaGFwamEgZSBidXJpbWl0IHDDq3IgbGV4aW0gZGhlIHNoa3JpbS4iCisKK21zZ2lkICJDb3VsZCBub3QgY2xvc2UgcmVzb3VyY2UuIgorbXNnc3RyICJFIHBhbXVuZHVyIG1ieWxsamEgZSBidXJpbWl0LiIKKworbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gcmVzb3VyY2UuIgorbXNnc3RyICJJIHBhbXVuZHVyIGxleGltaSBuZ2EgYnVyaW1pLiIKKworbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iCittc2dzdHIgIkkgcGFtdW5kdXIgaGtyaW1pIG7DqyBidXJpbS4iCisKK21zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKK21zZ3N0ciAiRSBwYW11bmR1ciBrcnllcmphIGUga8OrcmtpbWl0IG7DqyBidXJpbS4iCisKK21zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgorbXNnc3RyICJTaW5rcm9uaXppbSBpIHBhbXVuZHVyIG7DqyBidXJpbS4iCisKK21zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKK21zZ3N0ciAiRSBwYW11bmR1ciBtYXJyamEvdmVuZG9zamEgZSBycmVndWxsaW1ldmUgbmdhL27DqyBidXJpbS4iCisKK21zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN0cmVhbSBlcnJvci4iCittc2dzdHIgIkdTdHJlYW1lciBuZGVzaGkgbsOrIG5qw6sgZ2FiaW0gdMOrIHDDq3Jnaml0aHNow6ttIHTDqyBsaWJyYXJpc8OrIGJhesOrLiIKKworbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKK21zZ3N0ciAiIgorIkVsZW1lbnRpIG51ayBzdXBvcnRvbiB0cmFqdGltaW4gZSBrw6tzYWogdmF6aGRlLiBKdSBsdXRlbSByYXBvcnRvIG5qw6sgYnVnLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgorbXNnc3RyICJJIHBhbXVuZHVyIHDDq3JjYWt0aW1pIGkgbGxvaml0IHTDqyB2YXpoZMOrcy4iCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgZWxlbWVudC4iCittc2dzdHIgIlZhemhkYSDDq3NodMOrIGUgbmrDqyBsbG9qaSB0w6sgbmRyeXNow6ttIG5nYSB0w6sgdHJhanR1YXJpdCBuZ2Ega3kgZWxlbWVudC4iCisKK21zZ2lkICJUaGVyZSBpcyBubyBjb2RlYyBwcmVzZW50IHRoYXQgY2FuIGhhbmRsZSB0aGUgc3RyZWFtJ3MgdHlwZS4iCittc2dzdHIgIkFzbmrDqyBrb2R1ZXMvZGVrb2R1ZXMgbsOrIGRpc3BvemljaW9uIHDDq3IgdMOrIHRyYWp0dWFyIGxsb2ppbiBlIHZhemhkw6tzLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZWNvZGUgc3RyZWFtLiIKK21zZ3N0ciAiSSBwYW11bmR1ciBkZWtvZGlmaWtpbWkgaSB2YXpoZMOrcy4iCisKK21zZ2lkICJDb3VsZCBub3QgZW5jb2RlIHN0cmVhbS4iCittc2dzdHIgIkkgcGFtdW5kdXIga29kaWZpa2ltaSBpIHZhemhkw6tzLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZW11bHRpcGxleCBzdHJlYW0uIgorbXNnc3RyICJJIHBhbXVuZHVyIGRlbXVsdGlwbGVrc2ltaSBpIHN0cmVhbS4iCisKK21zZ2lkICJDb3VsZCBub3QgbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIkkgcGFtdW5kdXIgbXVsdGlwbGVrc2ltaSBpIHZhemhkw6tzLiIKKworIywgZnV6enkKK21zZ2lkICJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIgorbXNnc3RyICJWYXpoZGEgw6tzaHTDqyBuw6sgbmrDqyBmb3JtYXQgdMOrIGdhYnVhci4iCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKKyJiZWVuIHN1cHBsaWVkLiIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCittc2dzdHIgIkFzbmrDqyBtZXNhemggZ2FiaW1pIHDDq3IgZG9tYWluICVzLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMgYW5kIGNvZGUgJWQuIgorbXNnc3RyICJBc25qw6sgbWVzYXpoIGdhYmltaSBzdGFuZGFydCBww6tyIGRvbWFpbiAlcyBkaGUga29kaW4gJWQuIgorCittc2dpZCAiU2VsZWN0ZWQgY2xvY2sgY2Fubm90IGJlIHVzZWQgaW4gcGlwZWxpbmUuIgorbXNnc3RyICIiCisKK21zZ2lkICJ0aXRsZSIKK21zZ3N0ciAidGl0dWxsaSIKKworbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUiCittc2dzdHIgInRpdHVsbGkgaSBww6tyZG9ydXIgemFrb25pc2h0IgorCittc2dpZCAidGl0bGUgc29ydG5hbWUiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJ0aXR1bGxpIGkgcMOrcmRvcnVyIHpha29uaXNodCIKKworbXNnaWQgImFydGlzdCIKK21zZ3N0ciAiYXJ0aXN0aSIKKworbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAicGVyc29uaShhdCkgcMOrcmdqZWdqw6tzIHDDq3IgcmVnamlzdHJpbWluIgorCittc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJwZXJzb25pKGF0KSBww6tyZ2plZ2rDq3MgcMOrciByZWdqaXN0cmltaW4iCisKK21zZ2lkICJhbGJ1bSIKK21zZ3N0ciAiYWxidW1pIgorCittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiCittc2dzdHIgImFsYnVtaSBxw6sgcMOrcm1iYW4ga8OrdMOrIHTDqyBkaMOrbsOrIgorCittc2dpZCAiYWxidW0gc29ydG5hbWUiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiYWxidW1pIHHDqyBww6tybWJhbiBrw6t0w6sgdMOrIGRow6tuw6siCisKKyMsIGZ1enp5Cittc2dpZCAiYWxidW0gYXJ0aXN0IgorbXNnc3RyICJhcnRpc3RpIgorCittc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgorbXNnc3RyICIiCisKK21zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgIiIKKworbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCIKK21zZ3N0ciAiIgorCittc2dpZCAiZGF0ZSIKK21zZ3N0ciAiZGF0YSIKKworIywgZnV6enkKK21zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCittc2dzdHIgImRhdGEgZSBrcmlqaW1pdCB0w6sgc8OrIGRow6tuw6tzIChuw6sgZGl0w6sgdMOrIGthbGVuZGFyaXQgSnVsaWFuKSIKKworIywgZnV6enkKK21zZ2lkICJkYXRldGltZSIKK21zZ3N0ciAiZGF0YSIKKworIywgZnV6enkKK21zZ2lkICJkYXRlIGFuZCB0aW1lIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdzdERhdGVUaW1lIHN0cnVjdHVyZSkiCittc2dzdHIgImRhdGEgZSBrcmlqaW1pdCB0w6sgc8OrIGRow6tuw6tzIChuw6sgZGl0w6sgdMOrIGthbGVuZGFyaXQgSnVsaWFuKSIKKworbXNnaWQgImdlbnJlIgorbXNnc3RyICJsbG9qaSIKKworbXNnaWQgImdlbnJlIHRoaXMgZGF0YSBiZWxvbmdzIHRvIgorbXNnc3RyICJsbG9qaSBzw6sgY2lsaXQgaSB0YWtvbiBlIGRow6tuYSIKKworbXNnaWQgImNvbW1lbnQiCittc2dzdHIgImtvbWVudGkiCisKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKK21zZ3N0ciAidGVrc3QgaSBsaXLDqyBrb21lbnR1ZXMgaSBzw6sgZGjDq27Dq3MiCisKKyMsIGZ1enp5Cittc2dpZCAiZXh0ZW5kZWQgY29tbWVudCIKK21zZ3N0ciAia29tZW50aSIKKworIywgZnV6enkKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCittc2dzdHIgInRla3N0IGkgbGlyw6sga29tZW50dWVzIGkgc8OrIGRow6tuw6tzIgorCittc2dpZCAidHJhY2sgbnVtYmVyIgorbXNnc3RyICJudW1yaSBpIHBpc3TDq3MiCisKK21zZ2lkICJ0cmFjayBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKK21zZ3N0ciAibnVtcmkgaSBwamVzw6tzIG7DqyBicmVuZMOrc2kgdMOrIG5qw6sga29sZWtzaW9uaSIKKworbXNnaWQgInRyYWNrIGNvdW50IgorbXNnc3RyICJudW3Dq3JpbWkgaSBwamVzw6tzIgorCittc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKK21zZ3N0ciAibnVtdXJpbWkgaSBwamVzw6t2ZSBuw6sgYnJlbmTDq3NpIHTDqyBrb2xla3Npb25pdCB0w6sgY2lsaXQgaSBww6tya2V0IHBqZXNhIgorCittc2dpZCAiZGlzYyBudW1iZXIiCittc2dzdHIgIm51bXJpIGkgZGlza3V0IgorCittc2dpZCAiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKK21zZ3N0ciAibnVtcmkgaSBkaXNrdXQgbsOrIGJyZW5kw6tzaSB0w6sgbmrDqyBrb2xla3Npb25pIgorCittc2dpZCAiZGlzYyBjb3VudCIKK21zZ3N0ciAibnVtdXJpbWkgaSBkaXNrdXQiCisKK21zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKK21zZ3N0ciAibnVtdXJpbWkgaSBkaXNxZXZlIG7DqyBicmVuZMOrc2kgdMOrIGtvbGVrc2lvbml0IHTDqyBjaWxpdCBpIHDDq3JrZXQgZGlza3UiCisKK21zZ2lkICJsb2NhdGlvbiIKK21zZ3N0ciAicG96aWNpb25pIgorCittc2dpZCAiIgorIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgorImlzIGhvc3RlZCkiCittc2dzdHIgIiIKKworbXNnaWQgImhvbWVwYWdlIgorbXNnc3RyICIiCisKK21zZ2lkICJIb21lcGFnZSBmb3IgdGhpcyBtZWRpYSAoaS5lLiBhcnRpc3Qgb3IgbW92aWUgaG9tZXBhZ2UpIgorbXNnc3RyICIiCisKK21zZ2lkICJkZXNjcmlwdGlvbiIKK21zZ3N0ciAicMOrcnNoa3JpbWkiCisKK21zZ2lkICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCittc2dzdHIgInRla3MgaSBzaGt1cnTDq3IgcMOrcnNoa3J1ZXMgaSBww6tybWJhanRqZXMgc8OrIHPDqyBkaMOrbsOrcyIKKworbXNnaWQgInZlcnNpb24iCittc2dzdHIgInZlcnNpb25pIgorCittc2dpZCAidmVyc2lvbiBvZiB0aGlzIGRhdGEiCittc2dzdHIgInZlcnNpb25pIGkga8Orc2FqIHTDqyBkaMOrbmUiCisKK21zZ2lkICJJU1JDIgorbXNnc3RyICJJU1JDIgorCittc2dpZCAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgorbXNnc3RyICIiCisiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNoaWtvIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCisKK21zZ2lkICJvcmdhbml6YXRpb24iCittc2dzdHIgIm9yZ2FuaXphdGEiCisKK21zZ2lkICJjb3B5cmlnaHQiCittc2dzdHIgImNvcHlyaWdodCIKKworbXNnaWQgImNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgInNow6tuaW1lIG1iaSB0w6sgZHJlanRhdCBlIHPDqyBkaMOrbsOrcyIKKworIywgZnV6enkKK21zZ2lkICJjb3B5cmlnaHQgdXJpIgorbXNnc3RyICJjb3B5cmlnaHQiCisKKyMsIGZ1enp5Cittc2dpZCAiVVJJIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJzaMOrbmltZSBtYmkgdMOrIGRyZWp0YXQgZSBzw6sgZGjDq27Dq3MiCisKKyMsIGZ1enp5Cittc2dpZCAiZW5jb2RlZCBieSIKK21zZ3N0ciAia29kaWZpa3Vlc2kiCisKK21zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICJjb250YWN0IgorbXNnc3RyICJrb250YWt0aSIKKworbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCittc2dzdHIgImluZm9ybWFjaW9uZSBuw6sgbGlkaGplIG1lIGtvbnRha3RpbiIKKworbXNnaWQgImxpY2Vuc2UiCittc2dzdHIgImxpw6dlbmNhIgorCittc2dpZCAibGljZW5zZSBvZiBkYXRhIgorbXNnc3RyICJsacOnZW5jYSBlIHPDqyBkaMOrbsOrcyIKKworIywgZnV6enkKK21zZ2lkICJsaWNlbnNlIHVyaSIKK21zZ3N0ciAibGnDp2VuY2EiCisKKyMsIGZ1enp5Cittc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJsacOnZW5jYSBlIHPDqyBkaMOrbsOrcyIKKworbXNnaWQgInBlcmZvcm1lciIKK21zZ3N0ciAiaW50ZXJwcmV0dWVzaSIKKworbXNnaWQgInBlcnNvbihzKSBwZXJmb3JtaW5nIgorbXNnc3RyICJwZXJzb25pKGF0KSBpbnRlcnByZXR1ZXMiCisKK21zZ2lkICJjb21wb3NlciIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAicGVyc29uaShhdCkgcMOrcmdqZWdqw6tzIHDDq3IgcmVnamlzdHJpbWluIgorCittc2dpZCAiZHVyYXRpb24iCittc2dzdHIgImtvaMOremdqYXRqYSIKKworbXNnaWQgImxlbmd0aCBpbiBHU3RyZWFtZXIgdGltZSB1bml0cyAobmFub3NlY29uZHMpIgorbXNnc3RyICJnamF0w6tzaWEgbsOrIG5qw6tzaSBrb2hvcmUgdMOrIEdTdHJlYW1lciAobmFub3Nla29uZGEpIgorCittc2dpZCAiY29kZWMiCittc2dzdHIgImNvZGVjIgorCittc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJjb2RlYyBrdSBqYW7DqyByZWdqaXN0cnVhciB0w6sgZGjDq25hdCIKKworbXNnaWQgInZpZGVvIGNvZGVjIgorbXNnc3RyICJ2aWRlbyBjb2RlYyIKKworbXNnaWQgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiY29kZWMga3UgamFuw6sgcmVnamlzdHJ1YXIgdMOrIGRow6tuYXQgdmlkZW8iCisKK21zZ2lkICJhdWRpbyBjb2RlYyIKK21zZ3N0ciAiYXVkaW8gY29kZWMiCisKK21zZ2lkICJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImNvZGVjIGt1IGphbsOrIHJlZ2ppc3RydWFyIHTDqyBkaMOrbmF0IGF1ZGlvIgorCisjLCBmdXp6eQorbXNnaWQgInN1YnRpdGxlIGNvZGVjIgorbXNnc3RyICJ2aWRlbyBjb2RlYyIKKworIywgZnV6enkKK21zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImNvZGVjIGt1IGphbsOrIHJlZ2ppc3RydWFyIHTDqyBkaMOrbmF0IHZpZGVvIgorCisjLCBmdXp6eQorbXNnaWQgImNvbnRhaW5lciBmb3JtYXQiCittc2dzdHIgImluZm9ybWFjaW9uZSBuw6sgbGlkaGplIG1lIGtvbnRha3RpbiIKKworIywgZnV6enkKK21zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiY29kZWMga3UgamFuw6sgcmVnamlzdHJ1YXIgdMOrIGRow6tuYXQiCisKK21zZ2lkICJiaXRyYXRlIgorbXNnc3RyICJiaXRyYXRlIgorCittc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAiYml0cmF0ZSBwcmXDp2l6ZSBvc2UgbWVzYXRhcmUgbsOrIGJpdHMvcyIKKworbXNnaWQgIm5vbWluYWwgYml0cmF0ZSIKK21zZ3N0ciAiYml0cmF0ZSBub21pbmFsZSIKKworbXNnaWQgIm5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgImJpdHJhdGUgbm9taW5hbGUgbsOrIGJpdHMvcyIKKworbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKK21zZ3N0ciAiYml0cmF0ZSBtaW5pbXVtIgorCittc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAiYml0cmF0ZSBtaW5pbXVtIG7DqyBiaXRzL3MiCisKK21zZ2lkICJtYXhpbXVtIGJpdHJhdGUiCittc2dzdHIgImJpdHJhdGUgbWFrc2ltdW0iCisKK21zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJiaXRyYXRlIG1ha3NpbXVtIG7DqyBiaXRzL3MiCisKK21zZ2lkICJlbmNvZGVyIgorbXNnc3RyICJrb2RpZmlrdWVzaSIKKworbXNnaWQgImVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCittc2dzdHIgImtvZGlmaWt1ZXNpIGkgcMOrcmRvcnVyIHDDq3IgdMOrIGtvZGlmaWt1YXIga8OrdMOrIGZsdWtzIgorCittc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgorbXNnc3RyICJ2ZXJzaW9uaSBpIGtvZGlmaWt1ZXNpdCIKKworbXNnaWQgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCittc2dzdHIgInZlcnNpb25pIGkga29kaWZpa3Vlc2l0IHTDqyBww6tyZG9ydXIgcMOrciB0w6sga29kaWZpa3VhciBrw6t0w6sgZmx1a3MiCisKK21zZ2lkICJzZXJpYWwiCittc2dzdHIgInNlcmlhIgorCittc2dpZCAic2VyaWFsIG51bWJlciBvZiB0cmFjayIKK21zZ3N0ciAibnVtcmkgc2VyaXPDqyBzw6sgcGplc8OrcyIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKK21zZ3N0ciAiZWN1cmlhIGkgcGplc8OrcyBuw6sgcmVwbHlnYWluIgorCittc2dpZCAidHJhY2sgZ2FpbiBpbiBkYiIKK21zZ3N0ciAicnJpdGphIGUgcGplc8OrcyBuw6sgZGIiCisKK21zZ2lkICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCittc2dzdHIgIm1ha3NpbXVtaSBpIHBqZXPDq3MgbsOrIHJlcGx5Z2FpbiIKKworbXNnaWQgInBlYWsgb2YgdGhlIHRyYWNrIgorbXNnc3RyICJza2FqaSBpIHBpc3TDq3MiCisKK21zZ2lkICJyZXBsYXlnYWluIGFsYnVtIGdhaW4iCittc2dzdHIgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKKworbXNnaWQgImFsYnVtIGdhaW4gaW4gZGIiCittc2dzdHIgImdhaW4gaSBhbGJ1bWl0IG7DqyBkYiIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKK21zZ3N0ciAicmVwbGF5Z2FpbiBhbGJ1bSBwZWFrIgorCittc2dpZCAicGVhayBvZiB0aGUgYWxidW0iCittc2dzdHIgImt1bG1pIGkgYWxidW1pdCIKKworIywgZnV6enkKK21zZ2lkICJyZXBsYXlnYWluIHJlZmVyZW5jZSBsZXZlbCIKK21zZ3N0ciAibWFrc2ltdW1pIGkgcGplc8OrcyBuw6sgcmVwbHlnYWluIgorCittc2dpZCAicmVmZXJlbmNlIGxldmVsIG9mIHRyYWNrIGFuZCBhbGJ1bSBnYWluIHZhbHVlcyIKK21zZ3N0ciAiIgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSIKK21zZ3N0ciAiIgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIgorbXNnc3RyICIiCisKK21zZ2lkICJpbWFnZSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgImtvZGlmaWt1ZXNpIGkgcMOrcmRvcnVyIHDDq3IgdMOrIGtvZGlmaWt1YXIga8OrdMOrIGZsdWtzIgorCisjLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKK21zZ2lkICJwcmV2aWV3IGltYWdlIgorbXNnc3RyICIiCisKK21zZ2lkICJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgIiIKKworbXNnaWQgImF0dGFjaG1lbnQiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJmaWxlIGF0dGFjaGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICJrb2RpZmlrdWVzaSBpIHDDq3Jkb3J1ciBww6tyIHTDqyBrb2RpZmlrdWFyIGvDq3TDqyBmbHVrcyIKKworbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCittc2dzdHIgIiIKKworbXNnaWQgIm51bWJlciBvZiBiZWF0cyBwZXIgbWludXRlIGluIGF1ZGlvIgorbXNnc3RyICIiCisKK21zZ2lkICJrZXl3b3JkcyIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImNvbW1hIHNlcGFyYXRlZCBrZXl3b3JkcyBkZXNjcmliaW5nIHRoZSBjb250ZW50IgorbXNnc3RyICJ0ZWtzIGkgc2hrdXJ0w6tyIHDDq3JzaGtydWVzIGkgcMOrcm1iYWp0amVzIHPDqyBzw6sgZGjDq27Dq3MiCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIG5hbWUiCittc2dzdHIgInBvemljaW9uaSIKKworbXNnaWQgIiIKKyJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgorInByb2R1Y2VkIgorbXNnc3RyICIiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCisic291dGhlcm4gbGF0aXR1ZGVzKSIKK21zZ3N0ciAiIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorImdlbyBsb25naXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgcHJpbWUgbWVyaWRpYW4gaW4gR3JlZW53aWNoL1VLLCAgIgorIm5lZ2F0aXZlIHZhbHVlcyBmb3Igd2VzdGVybiBsb25naXR1ZGVzKSIKK21zZ3N0ciAiIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCisiYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBjb3VudHJ5IgorbXNnc3RyICJwb3ppY2lvbmkiCisKK21zZ2lkICJjb3VudHJ5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBjaXR5IgorbXNnc3RyICJwb3ppY2lvbmkiCisKK21zZ2lkICJjaXR5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKK21zZ3N0ciAicG96aWNpb25pIgorCittc2dpZCAiIgorImEgbG9jYXRpb24gd2hpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgorInRoZSBuZWlnaGJvcmhvb2QpIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIGhvcml6b250YWwgZXJyb3IiCittc2dzdHIgInBvemljaW9uaSIKKworbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgorbXNnc3RyICJwb3ppY2lvbmkiCisKK21zZ2lkICIiCisibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBpbiBtL3MiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgorbXNnc3RyICJwb3ppY2lvbmkiCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgorIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKKyJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCittc2dzdHIgInBvemljaW9uaSIKKworbXNnaWQgIiIKKyJpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nICBhIG1lZGlhLiAiCisiSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCAgcmVwcmVzZW50YXRpb24sIDAgbWVhbnMgdGhlICIKKyJnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKK21zZ2lkICJzaG93IG5hbWUiCittc2dzdHIgIiIKKworbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICdzaG93IHNvcnRuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZSBhcyB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzJyBoZXJlCittc2dpZCAic2hvdyBzb3J0bmFtZSIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20sIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZXBpc29kZSBudW1iZXIiCittc2dzdHIgIm51bXJpIGkgZGlza3V0IgorCittc2dpZCAiVGhlIGVwaXNvZGUgbnVtYmVyIGluIHRoZSBzZWFzb24gdGhlIG1lZGlhIGlzIHBhcnQgb2YiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJzZWFzb24gbnVtYmVyIgorbXNnc3RyICJudW1yaSBpIGRpc2t1dCIKKworbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAibHlyaWNzIgorbXNnc3RyICJsacOnZW5jYSIKKworbXNnaWQgIlRoZSBseXJpY3Mgb2YgdGhlIG1lZGlhLCBjb21tb25seSB1c2VkIGZvciBzb25ncyIKK21zZ3N0ciAiIgorCittc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJwZXJzb25pKGF0KSBww6tyZ2plZ2rDq3MgcMOrciByZWdqaXN0cmltaW4iCisKK21zZ2lkICJncm91cGluZyIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKKyJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAidXNlciByYXRpbmciCittc2dzdHIgImtvaMOremdqYXRqYSIKKworbXNnaWQgIiIKKyJSYXRpbmcgYXR0cmlidXRlZCBieSBhIHVzZXIuIFRoZSBoaWdoZXIgdGhlIHJhbmssIHRoZSBtb3JlIHRoZSB1c2VyIGxpa2VzICIKKyJ0aGlzIG1lZGlhIgorbXNnc3RyICIiCisKK21zZ2lkICJkZXZpY2UgbWFudWZhY3R1cmVyIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiTWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKK21zZ3N0ciAidmVyc2lvbmkgaSBrb2RpZmlrdWVzaXQgdMOrIHDDq3Jkb3J1ciBww6tyIHTDqyBrb2RpZmlrdWFyIGvDq3TDqyBmbHVrcyIKKworbXNnaWQgImRldmljZSBtb2RlbCIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKK21zZ3N0ciAidmVyc2lvbmkgaSBrb2RpZmlrdWVzaXQgdMOrIHDDq3Jkb3J1ciBww6tyIHTDqyBrb2RpZmlrdWFyIGvDq3TDqyBmbHVrcyIKKworIywgZnV6enkKK21zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgorbXNnc3RyICJwb3ppY2lvbmkiCisKKyMsIGZ1enp5Cittc2dpZCAiQXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIgorbXNnc3RyICJ2ZXJzaW9uaSBpIGtvZGlmaWt1ZXNpdCB0w6sgcMOrcmRvcnVyIHDDq3IgdMOrIGtvZGlmaWt1YXIga8OrdMOrIGZsdWtzIgorCittc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKK21zZ3N0ciAiIgorCittc2dpZCAiQXJiaXRyYXJ5IGFwcGxpY2F0aW9uIGRhdGEgdG8gYmUgc2VyaWFsaXplZCBpbnRvIHRoZSBtZWRpYSIKK21zZ3N0ciAiIgorCittc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCittc2dzdHIgIiIKKworbXNnaWQgIkhvdyB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCBiZWZvcmUgZGlzcGxheSIKK21zZ3N0ciAiIgorCittc2dpZCAiLCAiCittc2dzdHIgIiwgIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCittc2dzdHIgIkdBQklNOiBuZ2EgZWxlbWVudGkgJXM6ICVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKKyIlc1xuIgorbXNnc3RyICIiCisiSW5mb3JtYWNpb25lIHNodGVzw6sgdMOrIGRlYnVnOlxuIgorIiVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgorbXNnc3RyICJ1IHNwZWNpZmlrdWEgYmluIGJvc2ggXCIlc1wiLCBudWsgbGVqb2hldCIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBiaW4gXCIlc1wiLCBza2lwcGluZyIKK21zZ3N0ciAiYXNuasOrIGJpbiBcIiVzXCIsIHUga2Fww6tyY3llIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiIKK21zZ3N0ciAiYXNuasOrIHByb27Dq3NpIFwiJXNcIiB0ZWsgZWxlbWVudGkgXCIlc1wiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKK21zZ3N0ciAiZSBwYW11bmR1ciB2ZW5kb3NqYSBlIHByb27Dq3Npc8OrIFwiJXNcIiB0ZWsgZWxlbWVudGkgXCIlc1wiIG7DqyBcIiVzIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgorbXNnc3RyICJlIHBhbXVuZHVyIGxpZGhqYSBlICVzIG1lICVzIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICJhc25qw6sgZWxlbWVudCBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNhcHMgXCIlc1wiIgorbXNnc3RyICJpIHBhbXVuZHVyIGFuYWxpemltaSBpIGNhcHMgXCIlc1wiIgorCittc2dpZCAibGluayB3aXRob3V0IHNvdXJjZSBlbGVtZW50IgorbXNnc3RyICJsaWRoamUgbWEgZWxlbWVudCBidXJ1ZXMiCisKK21zZ2lkICJsaW5rIHdpdGhvdXQgc2luayBlbGVtZW50IgorbXNnc3RyICJsaWRoamUgcGEgZWxlbWVudGluIHNpbmsiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgImFzbmrDqyBlbGVtZW50IGJ1cnVlcyBww6tyIFVSSSBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCB0byBsaW5rIFVSSSBcIiVzXCIgdG8iCittc2dzdHIgImFzbmrDqyBlbGVtZW50IHDDq3IgdMOrIGxpZGh1ciBVUkkgXCIlc1wiIG1lIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAiYXNuasOrIGVsZW1lbnQgc2hww6tybmRhcsOrcyBww6tyIFVSSSBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxpbmsgc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJlIHBhbXVuZHVyIGxpZGhqYSBlIGVsZW1lbnRpdCBzaW5rIHDDq3IgVVJJIFwiJXNcIiIKKworbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgorbXNnc3RyICJudWsgbGVqb2hldCBrb25kdWt0b3JpIGJvc2giCisKK21zZ2lkICJJbnRlcm5hbCBjbG9jayBlcnJvci4iCittc2dzdHIgIiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCittc2dzdHIgIiIKKworbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCittc2dzdHIgIiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiIgorCittc2dpZCAiRmlsdGVyIGNhcHMiCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKKyJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgorbXNnc3RyICIiCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiTnVrIMOrc2h0w6sgcMOrcmNha3R1YXIgYXNuasOrIGVtw6tyIGZpbGUgcMOrciB0dSBzaGtydWFyLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCittc2dzdHIgIkUgcGFtdW5kdXIgaGFwamEgZSBmaWxlIFwiJXNcIiBuw6sgc2hrcmltLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiR2FiaW0gZ2phdMOrIG1ieWxsamVzIHPDqyBmaWxlIFwiJXNcIi4iCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIgorbXNnc3RyICJHYWJpbSBnamF0w6sgc2hrcmltaXQgdGVrIGZpbGUgXCIlc1wiLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiR2FiaW0gZ2phdMOrIHNoa3JpbWl0IHRlayBmaWxlIFwiJXNcIi4iCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiTnVrIMOrc2h0w6sgcMOrcmNha3R1YXIgYXNuasOrIGVtw6tyIGZpbGUgcMOrciB0dSBsZXh1YXIuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiRSBwYW11bmR1ciBoYXBqYSBlIGZpbGUgXCIlc1wiIHDDq3IgbGV4aW0uIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGluZm8gb24gXCIlc1wiLiIKK21zZ3N0ciAiRSBwYW11bmR1ciBtYXJyamEvdmVuZG9zamEgZSBycmVndWxsaW1ldmUgbmdhL27DqyBidXJpbS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiXCIlc1wiIGlzIGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiXCIlc1wiIMOrc2h0w6sgbmrDqyBkaXJlY3RvcnkuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKK21zZ3N0ciAiRmlsZSBcIiVzXCIgw6tzaHTDqyBuasOrIHNvY2tldC4iCisKK21zZ2lkICJGYWlsZWQgYWZ0ZXIgaXRlcmF0aW9ucyBhcyByZXF1ZXN0ZWQuIgorbXNnc3RyICJEw6tzaHRvaSBtYmFzIHDDq3Jzw6tyaXRqZXZlIHNpa3Vyc2UgdMOrIGvDq3JrdWFyYS4iCisKK21zZ2lkICJObyBUZW1wIGRpcmVjdG9yeSBzcGVjaWZpZWQuIgorbXNnc3RyICIiCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcCBmaWxlIFwiJXNcIi4iCittc2dzdHIgIkUgcGFtdW5kdXIgbWFycmphL3ZlbmRvc2phIGUgcnJlZ3VsbGltZXZlIG5nYS9uw6sgYnVyaW0uIgorCisjLCBmdXp6eQorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZG93bmxvYWQgZmlsZS4iCittc2dzdHIgIkdhYmltIGdqYXTDqyBzaGtyaW1pdCB0ZWsgZmlsZSBcIiVzXCIuIgorCittc2dpZCAiY2FwcyIKK21zZ3N0ciAibWJyb2p0w6tzZSIKKworbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCittc2dzdHIgInUgemJ1bHVhbiBtdW5kw6tzaSBuw6sgZmx1a3MiCisKK21zZ2lkICJtaW5pbXVtIgorbXNnc3RyICJtaW5pbXVtIgorCittc2dpZCAibWF4aW11bSIKK21zZ3N0ciAibWFrc2ltdW0iCisKK21zZ2lkICJmb3JjZSBjYXBzIgorbXNnc3RyICIiCisKK21zZ2lkICJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKK21zZ3N0ciAiYWxidW1pIHHDqyBww6tybWJhbiBrw6t0w6sgdMOrIGRow6tuw6siCisKK21zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJyZWFkYWJsZSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIndyaXRhYmxlIgorbXNnc3RyICJ0aXR1bGxpIgorCittc2dpZCAiY29udHJvbGxhYmxlIgorbXNnc3RyICIiCisKK21zZ2lkICJjaGFuZ2VhYmxlIGluIE5VTEwsIFJFQURZLCBQQVVTRUQgb3IgUExBWUlORyBzdGF0ZSIKK21zZ3N0ciAiIgorCittc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwsIFJFQURZIG9yIFBBVVNFRCBzdGF0ZSIKK21zZ3N0ciAiIgorCittc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwgb3IgUkVBRFkgc3RhdGUiCittc2dzdHIgIiIKKworbXNnaWQgIkJsYWNrbGlzdGVkIGZpbGVzOiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIlRvdGFsIGNvdW50OiAiCittc2dzdHIgIm51bcOrcmltaSBpIHBqZXPDq3MiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxhY2tsaXN0ZWQgZmlsZSIKK21zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIHBsdWdpbiIKK21zZ2lkX3BsdXJhbCAiJWQgcGx1Z2lucyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgorbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVkIGZlYXR1cmUiCittc2dpZF9wbHVyYWwgIiVkIGZlYXR1cmVzIgorbXNnc3RyWzBdICJrYXJha3RlcmlzdGlrYSIKK21zZ3N0clsxXSAia2FyYWt0ZXJpc3Rpa2F0IgorCittc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgorbXNnc3RyICJQcmludG8gdMOrIGdqaXRow6sgZWxlbWVudMOrdCIKKworbXNnaWQgIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgorInBsdWdpbnMgcHJvdmlkZS5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKKyJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgorbXNnc3RyICIiCisKK21zZ2lkICJMaXN0IHRoZSBwbHVnaW4gY29udGVudHMiCittc2dzdHIgIiIKKworbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmlsZTogJXNcbiIKK21zZ3N0ciAiRSBwYW11bmR1ciBoYXBqYSBlIGZpbGUgXCIlc1wiIG7DqyBzaGtyaW0uIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIGVsZW1lbnQgb3IgcGx1Z2luICclcydcbiIKK21zZ3N0ciAiYXNuasOrIGVsZW1lbnQgYnVydWVzIHDDq3IgVVJJIFwiJXNcIiIKKworbXNnaWQgIkluZGV4IHN0YXRpc3RpY3MiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBlbGVtZW50IFwiJXNcIiAoJXMpOiAiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKK21zZ3N0ciAiIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJHb3QgRU9TIGZyb20gZWxlbWVudCBcIiVzXCIuXG4iCittc2dzdHIgIkdBQklNOiBuZ2EgZWxlbWVudGkgJXM6ICVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKK21zZ3N0ciAiTkRSWVNISU0gSSBHSkVUVVIgICAgICA6IHUgZ2pldCBuZ2EgZWxlbWVudGkgXCIlc1wiLlxuIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCittc2dzdHIgIk5EUllTSElNIEkgR0pFVFVSICAgICAgOiB1IGdqZXQgbmdhIGVsZW1lbnRpIFwiJXNcIi5cbiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgorbXNnc3RyICJORFJZU0hJTSBJIEdKRVRVUiAgICAgIDogdSBnamV0IG5nYSBlbGVtZW50aSBcIiVzXCIuXG4iCisKK21zZ2lkICJGT1VORCBUQUdcbiIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJTkZPOlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgorbXNnc3RyICJHQUJJTTogbmdhIGVsZW1lbnRpICVzOiAlc1xuIgorCittc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgImJ1ZmZlcmluZy4uLiIKK21zZ3N0ciAiIgorCittc2dpZCAiRG9uZSBidWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCittc2dzdHIgIiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBlbGVtZW50OiAlc1xuIgorbXNnc3RyICJhc25qw6sgZWxlbWVudCBcIiVzXCIiCisKK21zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCittc2dzdHIgIlRhZ3MgZSBvdXRwdXQgKG5qb2h1ciBnaml0aGFzaHR1IHNpIG1ldGFkYXRhKSIKKworbXNnaWQgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCittc2dzdHIgIk5qb2Z0aW1lIHTDqyBpbmZvcm1hY2lvbmV2ZSBkaGUgcHJvbsOrc2lzw6sgc8OrIGtvbmRpY2lvbml0IHTDqyBkYWxqZXMiCisKKyMsIGZ1enp5Cittc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiTW9zIGplcCBpbmZvcm1hY2lvbmluIGUgZ2plbmRqZXMgc8OrIExMT0pJVCIKKworbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKK21zZ3N0ciAiIgorCittc2dpZCAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKK21zZ3N0ciAiTW9zIGplcCBpbmZvcm1hY2lvbmluIGUgZ2plbmRqZXMgc8OrIExMT0pJVCIKKworbXNnaWQgIlRZUEUxLFRZUEUyLC4uLiIKK21zZ3N0ciAiTExPSkkxLExMT0pJMiwuLi4iCisKK21zZ2lkICJEbyBub3QgaW5zdGFsbCBhIGZhdWx0IGhhbmRsZXIiCittc2dzdHIgIk1vcyBpbnN0YWxvIG5qw6sgdXNocXllcyB0w6sgZMOrbXR1YXIiCisKK21zZ2lkICJQcmludCBhbGxvYyB0cmFjZSAoaWYgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUpIgorbXNnc3RyICJQcmludG8gc2hlbmphdCBlIGFsbG9jIChuw6tzZSBha3RpdnVhciBuw6sga29ow6tuIGUga29tcGlsaW1pdCkiCisKK21zZ2lkICJGb3JjZSBFT1Mgb24gc291cmNlcyBiZWZvcmUgc2h1dHRpbmcgdGhlIHBpcGVsaW5lIGRvd24iCittc2dzdHIgIiIKKworbXNnaWQgIkdhdGhlciBhbmQgcHJpbnQgaW5kZXggc3RhdGlzdGljcyIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQ6ICVzLlxuIgorbXNnc3RyICJHQUJJTTogaSBwYW11bmR1ciBuZMOrcnRpbWkgaSBwaXBlbGluZTogJXMuXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlxuIgorbXNnc3RyICJHQUJJTTogaSBwYW11bmR1ciBuZMOrcnRpbWkgaSBwaXBlbGluZS5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCittc2dzdHIgIktVSkRFUzogcGlwbGluZSBlIGdhYnVhcjogJXNcbiIKKworbXNnaWQgIkVSUk9SOiB0aGUgJ3BpcGVsaW5lJyBlbGVtZW50IHdhc24ndCBmb3VuZC5cbiIKK21zZ3N0ciAiR0FCSU06IGVsZW1lbnRpICdrb25kdWt0b3InIG51ayB1IGdqZXQuXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCittc2dzdHIgIkdBQklNOiBwaXBlbGluZSBudWsgZMOrc2hpcm9uIHTDqyBsdWFqw6suXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHByZXJvbGwuXG4iCittc2dzdHIgIkdBQklNOiBwaXBlbGluZSBudWsgZMOrc2hpcm9uIHTDqyBsdWFqw6suXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMRUQgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIgorbXNnc3RyICJHQUJJTTogcGlwZWxpbmUgbnVrIGTDq3NoaXJvbiB0w6sgbHVhasOrLlxuIgorCittc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gRm9yY2luZyBFT1Mgb24gdGhlIHBpcGVsaW5lXG4iCittc2dzdHIgIiIKKworbXNnaWQgIldhaXRpbmcgZm9yIEVPUy4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJFT1MgcmVjZWl2ZWQgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJBbiBlcnJvciBoYXBwZW5lZCB3aGlsZSB3YWl0aW5nIGZvciBFT1NcbiIKK21zZ3N0ciAiIgorCittc2dpZCAiRXhlY3V0aW9uIGVuZGVkIGFmdGVyICUiCittc2dzdHIgIkVremVrdXRpbWkgcMOrcmZ1bmRvaSBtYmFzICUiCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIC4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIE5VTEwgLi4uXG4iCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIgorbXNnc3RyICJEVUtFIFpCQVRVQVIgcGlwZWxpbmUgLi4uXG4iCisKKyN+IG1zZ2lkICJVc2FnZTogZ3N0LXhtbGxhdW5jaCA8ZmlsZS54bWw+IFsgZWxlbWVudC5wcm9wZXJ0eT12YWx1ZSAuLi4gXVxuIgorI34gbXNnc3RyICIiCisjfiAiUMOrcmRvcmltaTogZ3N0LXhtbGxhdW5jaCA8ZmlsZS54bWw+IFsgZWxlbWVudC5wcm9wZXJ0eT12bGVyYSAuLi4gXVxuIgorCisjfiBtc2dpZCAiRVJST1I6IHBhcnNlIG9mIHhtbCBmaWxlICclcycgZmFpbGVkLlxuIgorI34gbXNnc3RyICJHQUJJTTogYW5hbGl6aW1pIGkgZmlsZSB4bWwgJyVzJyBkw6tzaHRvaS5cbiIKKworI34gbXNnaWQgIkVSUk9SOiBubyB0b3BsZXZlbCBwaXBlbGluZSBlbGVtZW50IGluIGZpbGUgJyVzJy5cbiIKKyN+IG1zZ3N0ciAiR0FCSU06IGFzbmrDqyBlbGVtZW50IGkgcGlwbGluZSB0w6sgdG9wbGV2ZWwgdGVrIGZpbGUgJyVzJy5cbiIKKworIywgZnV6enkKKyN+IG1zZ2lkICJXQVJOSU5HOiBvbmx5IG9uZSB0b3BsZXZlbCBlbGVtZW50IGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuXG4iCisjfiBtc2dzdHIgIktVSkRFUzogdmV0w6ttIG5qw6sgZWxlbWVudCB0b3BsZXZlbCBzdXBvcnRvaGV0IGFrdHVhbGlzaHQuIgorCisjfiBtc2dpZCAiRVJST1I6IGNvdWxkIG5vdCBwYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgJWQ6ICVzLlxuIgorI34gbXNnc3RyICIiCisjfiAiR0FCSU06IGkgcGFtdW5kdXIgYW5hbGl6aW1pIGkgYXJndW1lbnRpdCAlZCB0w6sgcnJlc2h0aXQgdMOrIGtvbWFuZMOrczogJXMuXG4iCisKKyN+IG1zZ2lkICJXQVJOSU5HOiBlbGVtZW50IG5hbWVkICclcycgbm90IGZvdW5kLlxuIgorI34gbXNnc3RyICJLVUpERVM6IGVsZW1lbnRpIG1lIGVtcmluICclcycgbnVrIHUgZ2pldC5cbiIKKworI34gbXNnaWQgIlNhdmUgeG1sIHJlcHJlc2VudGF0aW9uIG9mIHBpcGVsaW5lIHRvIEZJTEUgYW5kIGV4aXQiCisjfiBtc2dzdHIgIlJ1YWogcHJlemFudGltaW4geG1sIHTDqyBwaXBlbGluZSB0ZWsgRklMRSBkaGUgZGlsIgorCisjfiBtc2dpZCAiRklMRSIKKyN+IG1zZ3N0ciAiRklMRSIKKworIywgZnV6enkKKyN+IG1zZ2lkICJEbyBub3QgaW5zdGFsbCBzaWduYWwgaGFuZGxlcnMgZm9yIFNJR1VTUjEgYW5kIFNJR1VTUjIiCisjfiBtc2dzdHIgIk1vcyBpbnN0YWxvIG5qw6sgdXNocXllcyB0w6sgZMOrbXR1YXIiCisKKyN+IG1zZ2lkICJEaXNhYmxlIGFjY2VsZXJhdGVkIENQVSBpbnN0cnVjdGlvbnMiCisjfiBtc2dzdHIgIsOHJ2FrdGl2byBpbnN0cnVrc2lvbmV0IGUgcMOrcnNocGVqdGltaXQgdMOrIENQVSIKKworI34gbXNnaWQgIlNDSEVEVUxFUiIKKyN+IG1zZ3N0ciAiUExBTklGSUtVRVMiCisKKyN+IG1zZ2lkICJSZWdpc3RyeSB0byB1c2UiCisjfiBtc2dzdHIgIlJlZ2ppc3RyaSBxw6sgZHVoZXQgcMOrcmRvcnVyIgorCisjfiBtc2dpZCAiUkVHSVNUUlkiCisjfiBtc2dzdHIgIlJFR0pJU1RSSSIKKworI34gbXNnaWQgInBhdGggbGlzdCBmb3IgbG9hZGluZyBwbHVnaW5zIChzZXBhcmF0ZWQgYnkgJyVzJykiCisjfiBtc2dzdHIgInBvemljaW9uaSBpIGxpc3TDq3MgcMOrciBuZ2Fya2ltaW4gZSBwbHVnaW5zIChuZGFyw6sgbWUgJyVzJykiCisKKyN+IG1zZ2lkICJTY2hlZHVsZXIgdG8gdXNlIChkZWZhdWx0IGlzICclcycpIgorI34gbXNnc3RyICJQbGFuaWZpa3Vlc2kgccOrIGR1aGV0IHDDq3Jkb3J1ciAoaSBwcmV6Z2plZGh1cmkgw6tzaHTDqyAnJXMnKSIKKworI34gbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZC4gIEZpbGUgYSBidWcuIgorI34gbXNnc3RyICIiCisjfiAiR2FiaW0gaSBicmVuZHNow6ttIGkgR1N0cmVhbWVyOiBuZHJ5c2hpbWkgaSBnamVuZGplcyBkw6tzaHRvaS4gIFJhcG9ydG8gYnVnLiIKKworI34gbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2NoZWR1bGVyIHByb2JsZW0uICBGaWxlIGEgYnVnLiIKKyN+IG1zZ3N0ciAiR2FiaW0gaSBicmVuZHNow6ttIGkgR1N0cmVhbWVyOiBwcm9ibGVtIHBsYW5pZmlraW1pLiAgUmFwb3J0byBidWcuIgorCisjfiBtc2dpZCAib3JpZ2luYWwgbG9jYXRpb24gb2YgZmlsZSBhcyBhIFVSSSIKKyN+IG1zZ3N0ciAidmVuZG9kaGphIG9yZ2ppbmFsZSBlIGZpbGUgc2kgbmrDqyBVUkkiCisKKyN+IG1zZ2lkICJUaGVyZSBpcyBubyBlbGVtZW50IHByZXNlbnQgdG8gaGFuZGxlIHRoZSBzdHJlYW0ncyBtaW1lIHR5cGUgJXMuIgorI34gbXNnc3RyICIiCisjfiAiTnVrIGVremlzdG9uIGFzbmrDqyBlbGVtZW50IHDDq3IgdMOrIHRyYWp0dWFyIGxsb2ppbiBtaW1lICVzIHTDqyBmbHVrc2l0LiIKKworI34gbXNnaWQgIiBpdGVyYXRpb25zIChzdW0gJSIKKyN+IG1zZ3N0ciAiIHDDq3Jzw6tyaXRqZXQgKHNodW1hICUiCisKKyN+IG1zZ2lkICIgbnMsIGF2ZXJhZ2UgJSIKKyN+IG1zZ3N0ciAiIG5zLCBtZXNhdGFyamEgJSIKKworI34gbXNnaWQgIiBucywgbWluICUiCisjfiBtc2dzdHIgIiBucywgbWluICUiCisKKyN+IG1zZ2lkICIgbnMsIG1heCAlIgorI34gbXNnc3RyICIgbnMsIG1heCAlIgorCisjfiBtc2dpZCAiIG5zKS5cbiIKKyN+IG1zZ3N0ciAiIG5zKS5cbiIKKworI34gbXNnaWQgIk51bWJlciBvZiB0aW1lcyB0byBpdGVyYXRlIHBpcGVsaW5lIgorI34gbXNnc3RyICJOdW1yaSBpIGhlcsOrdmUgdMOrIHDDq3Jzw6tyaXRqZXMgc8OrIGthbmFsaXQiCisKKyN+IG1zZ2lkICIgICAgICAgICBUcnlpbmcgdG8gcnVuIGFueXdheS5cbiIKKyN+IG1zZ3N0ciAiICAgICAgICAgRHVrZSB1IHDDq3JwamVrdXIgdMOrIHpiYXRvaGV0IHNpZG9xb2Z0w6suXG4iCisKKyN+IG1zZ2lkICJBZGRlZCBwbHVnaW4gJXMgd2l0aCAlZCAlcy5cbiIKKyN+IG1zZ3N0ciAiVSBzaHR1YSBwbHVnaW4gJXMgbWUgJWQgJXMuXG4iCisKKyN+IG1zZ2lkICJBZGRlZCBwYXRoICAgJXMgdG8gJXMgXG4iCisjfiBtc2dzdHIgIlUgc2h0dWEgcG96aWNpb25pICAgJXMgdGVrICVzIFxuIgorCisjfiBtc2dpZCAiUmVidWlsZGluZyAlcyAoJXMpIC4uLlxuIgorI34gbXNnc3RyICJEdWtlIHJpbmTDq3J0dWFyICVzICglcykgLi4uXG4iCisKKyN+IG1zZ2lkICJUcnlpbmcgdG8gbG9hZCAlcyAuLi5cbiIKKyN+IG1zZ3N0ciAiRHVrZSB1IHDDq3JwamVrdXIgdMOrIG5nYXJrb2ogJXMgLi4uXG4iCisKKyN+IG1zZ2lkICJFcnJvciBsb2FkaW5nICVzXG4iCisjfiBtc2dzdHIgIkdhYmltIGdqYXTDqyBuZ2Fya2ltaXQgdMOrICVzXG4iCisKKyN+IG1zZ2lkICJMb2FkZWQgJWQgcGx1Z2lucyB3aXRoICVkICVzLlxuIgorI34gbXNnc3RyICJVIG5nYXJrdWFuICVkIHBsdWdpbnMgbWUgJWQgJXMuXG4iCmRpZmYgLS1naXQgYS9wby9zci5nbW8gYi9wby9zci5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NhNjA5OAotLS0gL2Rldi9udWxsCisrKyBiL3BvL3NyLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9zci5wbyBiL3BvL3NyLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMjc1ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9wby9zci5wbwpAQCAtMCwwICsxLDEzMjMgQEAKKyMgU2VyYmlhbiB0cmFuc2xhdGlvbiBvZiBnc3RyZWFtZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBEYW5pbG8gU2VnYW4gPGRzZWdhbkBnbXgubmV0PiwgMjAwNCwgMjAwNS4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdzdHJlYW1lciAwLjguOFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTA5LTI5IDE0OjU1KzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA1LTAxLTI3IDE2OjU4KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IERhbmlsbyBTZWdhbiA8ZHNlZ2FuQGdteC5uZXQ+XG4iCisiTGFuZ3VhZ2UtVGVhbTogU2VyYmlhbiA8Z251QHByZXZvZC5vcmc+XG4iCisiTGFuZ3VhZ2U6IHNyXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0zOyAgICBwbHVyYWw9biUxMD09MSAmJiBuJTEwMCE9MTEgPyAwIDogICAgbiUxMD49MiAmJiAiCisibiUxMDw9NCAmJiAobiUxMDA8MTAgfHwgbiUxMDA+PTIwKSA/IDEgOiAyO1xuIgorCittc2dpZCAiUHJpbnQgdGhlIEdTdHJlYW1lciB2ZXJzaW9uIgorbXNnc3RyICLQmNGB0L/QuNGI0Lgg0LjQt9C00LDRmtC1INCT0YHRgtGA0LjQvNC10YDQsCIKKworbXNnaWQgIk1ha2UgYWxsIHdhcm5pbmdzIGZhdGFsIgorbXNnc3RyICLQo9GH0LjQvdC4INGB0LLQsCDRg9C/0L7Qt9C+0YDQtdGa0LAg0LrQvtCx0L3QuNC8IgorCittc2dpZCAiUHJpbnQgYXZhaWxhYmxlIGRlYnVnIGNhdGVnb3JpZXMgYW5kIGV4aXQiCittc2dzdHIgItCY0YHQv9C40YjQuCDQtNC+0YHRgtGD0L/QvdC1INC60LDRgtC10LPQvtGA0LjRmNC1INC30LAg0L3QsNC70LDQttC10ZrQtSDQs9GA0LXRiNCw0LrQsCDQuCDQt9Cw0LLRgNGI0LgiCisKK21zZ2lkICIiCisiRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmcm9tIDEgKG9ubHkgZXJyb3IpIHRvIDUgKGFueXRoaW5nKSBvciAwIGZvciBubyBvdXRwdXQiCittc2dzdHIgIiIKKyLQn9C+0LTRgNCw0LfRg9C80LXQstCw0L3QuCDQvdC40LLQviDQvtC/0YjQuNGA0L3QvtGB0YLQuCDQvtC0IDEgKNGB0LDQvNC+INCz0YDQtdGI0LrQtSkg0LTQviA1ICjRgdCy0LUpINC40LvQuCAwICjQsdC10LcgIgorItC40LfQu9Cw0LfQsCkiCisKK21zZ2lkICJMRVZFTCIKK21zZ3N0ciAi0J3QmNCS0J4iCisKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCisidGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgorbXNnc3RyICIiCisi0JfQsNC/0LXRgtC+0Lwg0YDQsNC30LTQstC+0ZjQtdC90Lgg0YHQv9C40YHQsNC6INC/0LDRgNC+0LLQsCDQuNC80LVf0LrQsNGC0LXQs9C+0YDQuNGY0LU60L3QuNCy0L4g0LfQsCDQv9C+0YHRgtCw0LLRmdCw0ZrQtSDQvdCw0YDQvtGH0LjRgtC40YUgIgorItC90LjQstC+0LAg0LfQsCDQv9C+0ZjQtdC00LjQvdCw0YfQvdC1INC60LDRgtC10LPQvtGA0LjRmNC1LiDQn9GA0LjQvNC10YA6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKKworbXNnaWQgIkxJU1QiCittc2dzdHIgItCh0J/QmNCh0JDQmiIKKworbXNnaWQgIkRpc2FibGUgY29sb3JlZCBkZWJ1Z2dpbmcgb3V0cHV0IgorbXNnc3RyICLQmNGB0LrRmdGD0YfQuCDQvtCx0L7RmNC10L3QuCDQuNC30LvQsNC3INC30LAg0LjRgdC/0YDQsNCy0ZnQsNGa0LUg0LPRgNC10YjQsNC60LAiCisKK21zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKK21zZ3N0ciAi0JjRgdC60ZnRg9GH0Lgg0LjRgdC/0YDQsNCy0ZnQsNGa0LUg0LPRgNC10YjQsNC60LAiCisKK21zZ2lkICJFbmFibGUgdmVyYm9zZSBwbHVnaW4gbG9hZGluZyBkaWFnbm9zdGljcyIKK21zZ3N0ciAi0KPQutGZ0YPRh9C4INC+0L/RiNC40YDQvdGDINC00LjRmNCw0LPQvdC+0YHRgtC40LrRgyDQv9GA0Lgg0YPRh9C40YLQsNCy0LDRmtGDINC00L7QtNCw0YLQutCwIgorCittc2dpZCAiQ29sb24tc2VwYXJhdGVkIHBhdGhzIGNvbnRhaW5pbmcgcGx1Z2lucyIKK21zZ3N0ciAiIgorCittc2dpZCAiUEFUSFMiCittc2dzdHIgItCf0KPQotCQ0IrQlSIKKworIywgZnV6enkKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCisiZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgorbXNnc3RyICIiCisi0JfQsNC/0LXRgtC+0Lwg0YDQsNC30LTQstC+0ZjQtdC9INGB0L/QuNGB0LDQuiDQtNC+0LTQsNGC0LDQutCwINC60L7RmNC4INGB0LUg0L/RgNC10LTRg9GH0LjRgtCw0LLQsNGY0YMg0L/QvtGA0LXQtCDRgdC/0LjRgdC60LAg0LjQtyAiCisi0L/RgNC+0LzQtdC90ZnQuNCy0LUg0L7QutGA0YPQttC10ZrQsCBHU1RfUExVR0lOX1BBVEgiCisKK21zZ2lkICJQTFVHSU5TIgorbXNnc3RyICLQlNCe0JTQkNCm0JgiCisKK21zZ2lkICJEaXNhYmxlIHRyYXBwaW5nIG9mIHNlZ21lbnRhdGlvbiBmYXVsdHMgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIgorbXNnc3RyICLQmNGB0LrRmdGD0YfQuCDQv9GA0LXRgdGA0LXRgtCw0ZrQtSDQv9C+0LPRgNC10YjQvdC40YUg0L/RgNC40YHRgtGD0L/QsCDQvNC10LzQvtGA0LjRmNC4INC/0YDQuCDRg9GH0LjRgtCw0LLQsNGa0YMg0LTQvtC00LDRgtCw0LrQsCIKKworbXNnaWQgIkRpc2FibGUgdXBkYXRpbmcgdGhlIHJlZ2lzdHJ5IgorbXNnc3RyICIiCisKK21zZ2lkICJEaXNhYmxlIHNwYXduaW5nIGEgaGVscGVyIHByb2Nlc3Mgd2hpbGUgc2Nhbm5pbmcgdGhlIHJlZ2lzdHJ5IgorbXNnc3RyICIiCisKK21zZ2lkICJHU3RyZWFtZXIgT3B0aW9ucyIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgItCY0YHQv9C40YjQuCDQuNC30LTQsNGa0LUg0JPRgdGC0YDQuNC80LXRgNCwIgorCittc2dpZCAiVW5rbm93biBvcHRpb24iCittc2dzdHIgIiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgY29yZSBsaWJyYXJ5IGVycm9yLiIKK21zZ3N0ciAi0JPQodGC0YDQuNC80LXRgCDRmNC1INC90LDQuNGI0LDQviDQvdCwINC+0L/RiNGC0YMg0LPRgNC10YjQutGDINGDINC+0YHQvdC+0LLQvdC+0Zgg0LHQuNCx0LvQuNC+0YLQtdGG0LguIgorCisjLCBmdXp6eQorbXNnaWQgIiIKKyJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuIgorbXNnc3RyICIiCisi0J/RgNC+0LPRgNCw0LzQtdGA0Lgg0JPQodGC0YDQuNC80LXRgNCwINGB0YMg0LHQuNC70Lgg0YHRg9Cy0LjRiNC1INC70LXRmtC4INC00LAg0LTQvtC00LXQu9C1INC60L7QtCDQt9CwINC+0LLRgyDQs9GA0LXRiNC60YMuICIKKyLQn9GA0LjRmNCw0LLQuNGC0LUg0LPRgNC10YjQutGDLiIKKworIywgZnV6enkKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKK21zZ3N0ciAi0KPQvdGD0YLRgNCw0YjRmtCwINCz0YDQtdGI0LrQsCDRgyDQk9Ch0YLRgNC40LzQtdGA0YM6INC60L7QtCDQvdC40ZjQtSDQvdCw0L/QuNGB0LDQvS4gINCf0YDQuNGY0LDQstC40YLQtSDQs9GA0LXRiNC60YMuIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgorInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCittc2dzdHIgItCj0L3Rg9GC0YDQsNGI0ZrQsCDQs9GA0LXRiNC60LAg0YMg0JPQodGC0YDQuNC80LXRgNGDOiDQvdC10L/RgNC40LvQuNC60LAg0YHQsCDQv9C+0L/Rg9C90L7QvC4gINCf0YDQuNGY0LDQstC40YLQtSDQs9GA0LXRiNC60YMuIgorCisjLCBmdXp6eQorbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGhyZWFkIHByb2JsZW0uIgorbXNnc3RyICLQo9C90YPRgtGA0LDRiNGa0LAg0LPRgNC10YjQutCwINGDINCT0KHRgtGA0LjQvNC10YDRgzog0L3QtdC/0YDQuNC70LjQutCwINGB0LAg0L3QuNGC0LjQvNCwLiAg0J/RgNC40ZjQsNCy0LjRgtC1INCz0YDQtdGI0LrRgy4iCisKKyMsIGZ1enp5Cittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBuZWdvdGlhdGlvbiBwcm9ibGVtLiIKK21zZ3N0ciAiIgorItCj0L3Rg9GC0YDQsNGI0ZrQsCDQs9GA0LXRiNC60LAg0YMg0JPQodGC0YDQuNC80LXRgNGDOiDQvdC10L/RgNC40LvQuNC60LAg0YMg0L/RgNC10LPQvtCy0LDRgNCw0ZrRgy4gINCf0YDQuNGY0LDQstC40YLQtSDQs9GA0LXRiNC60YMuIgorCisjLCBmdXp6eQorbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogZXZlbnQgcHJvYmxlbS4iCittc2dzdHIgIiIKKyLQo9C90YPRgtGA0LDRiNGa0LAg0LPRgNC10YjQutCwINGDINCT0KHRgtGA0LjQvNC10YDRgzog0L3QtdC/0YDQuNC70LjQutCwINGB0LAg0LTQvtCz0LDRktCw0ZjQtdC8LiAg0J/RgNC40ZjQsNCy0LjRgtC1INCz0YDQtdGI0LrRgy4iCisKKyMsIGZ1enp5Cittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uIgorbXNnc3RyICIiCisi0KPQvdGD0YLRgNCw0YjRmtCwINCz0YDQtdGI0LrQsCDRgyDQk9Ch0YLRgNC40LzQtdGA0YM6INC90LXQv9GA0LjQu9C40LrQsCDRgdCwINGC0YDQsNC20LXRmtC10LwuICDQn9GA0LjRmNCw0LLQuNGC0LUg0LPRgNC10YjQutGDLiIKKworIyBidWc6IGlzICJjYXBzIiBzaG9ydCBmb3IgImNhcGFiaWxpdGllcyI/IGlmIHNvLCBpdCBzaG91bGQgYmUgc3BlbGxlZCBjb21wbGV0ZWx5CisjLCBmdXp6eQorbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2FwcyBwcm9ibGVtLiIKK21zZ3N0ciAiIgorItCj0L3Rg9GC0YDQsNGI0ZrQsCDQs9GA0LXRiNC60LAg0YMg0JPQodGC0YDQuNC80LXRgNGDOiDQvdC10L/RgNC40LvQuNC60LAg0YHQsCDQvNC+0LPRg9Gb0L3QvtGB0YLQuNC80LAuICDQn9GA0LjRmNCw0LLQuNGC0LUg0LPRgNC10YjQutGDLiIKKworIywgZnV6enkKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKK21zZ3N0ciAi0KPQvdGD0YLRgNCw0YjRmtCwINCz0YDQtdGI0LrQsCDRgyDQk9Ch0YLRgNC40LzQtdGA0YM6INC90LXQv9GA0LjQu9C40LrQsCDRgdCwINC+0LfQvdCw0LrQvtC8LiAg0J/RgNC40ZjQsNCy0LjRgtC1INCz0YDQtdGI0LrRgy4iCisKK21zZ2lkICJZb3VyIEdTdHJlYW1lciBpbnN0YWxsYXRpb24gaXMgbWlzc2luZyBhIHBsdWctaW4uIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKK21zZ3N0ciAiIgorItCj0L3Rg9GC0YDQsNGI0ZrQsCDQs9GA0LXRiNC60LAg0YMg0JPQodGC0YDQuNC80LXRgNGDOiDQvdC10L/RgNC40LvQuNC60LAg0YHQsCDRgtGA0LDQttC10ZrQtdC8LiAg0J/RgNC40ZjQsNCy0LjRgtC1INCz0YDQtdGI0LrRgy4iCisKK21zZ2lkICIiCisiVGhpcyBhcHBsaWNhdGlvbiBpcyB0cnlpbmcgdG8gdXNlIEdTdHJlYW1lciBmdW5jdGlvbmFsaXR5IHRoYXQgaGFzIGJlZW4gIgorImRpc2FibGVkLiIKK21zZ3N0ciAiIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICLQk9Ch0YLRgNC40LzQtdGAINGY0LUg0L3QsNC40YjQsNC+INC90LAg0L7Qv9GI0YLRgyDQs9GA0LXRiNC60YMg0YMg0LHQuNCx0LvQuNC+0YLQtdGG0Lgg0LfQsCDQv9C+0LTRgNGI0LrRgy4iCisKK21zZ2lkICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICLQndC1INC80L7Qs9GDINC00LAg0L/QvtC60YDQtdC90LXQvCDQsdC40LHQu9C40L7RgtC10LrRgyDQt9CwINC/0L7QtNGA0YjQutGDLiIKKworbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICLQndC1INC80L7Qs9GDINC00LAg0LfQsNGC0LLQvtGA0LjQvCDQsdC40LHQu9C40L7RgtC10LrRgyDQt9CwINC/0L7QtNGA0YjQutGDLiIKKworIywgZnV6enkKK21zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgItCd0LUg0LzQvtCz0YMg0LTQsCDQt9Cw0YLQstC+0YDQuNC8INCx0LjQsdC70LjQvtGC0LXQutGDINC30LAg0L/QvtC00YDRiNC60YMuIgorCittc2dpZCAiRW5jb2RpbmcgZXJyb3IuIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCByZXNvdXJjZSBlcnJvci4iCittc2dzdHIgItCT0KHRgtGA0LjQvNC10YAg0ZjQtSDQvdCw0LjRiNCw0L4g0L3QsCDQvtC/0YjRgtGDINCz0YDQtdGI0LrRgyDRgyDQvtGB0L3QvtCy0L3QvtGYINCx0LjQsdC70LjQvtGC0LXRhtC4LiIKKworbXNnaWQgIlJlc291cmNlIG5vdCBmb3VuZC4iCittc2dzdHIgItCg0LXRgdGD0YDRgSDQvdC40ZjQtSDQvdCw0ZLQtdC9LiIKKworbXNnaWQgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCittc2dzdHIgItCg0LXRgdGD0YDRgSDRmNC1INC30LDRg9C30LXRgiDQuNC70Lgg0L3QtdC00L7RgdGC0YPQv9Cw0L0uIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcuIgorbXNnc3RyICLQndC1INC80L7Qs9GDINC+0YLQstC+0YDQuNGC0Lgg0YDQtdGB0YPRgNGBINGA0LDQtNC4INGH0LjRgtCw0ZrQsC4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCittc2dzdHIgItCd0LUg0LzQvtCz0YMg0L7RgtCy0L7RgNC40YLQuCDRgNC10YHRg9GA0YEg0YDQsNC00Lgg0YPQv9C40YHQsC4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCittc2dzdHIgItCd0LUg0LzQvtCz0YMg0L7RgtCy0L7RgNC40YLQuCDRgNC10YHRg9GA0YEg0YDQsNC00Lgg0YfQuNGC0LDRmtCwINC4INC/0LjRgdCw0ZrQsC4iCisKK21zZ2lkICJDb3VsZCBub3QgY2xvc2UgcmVzb3VyY2UuIgorbXNnc3RyICLQndC1INC80L7Qs9GDINC30LDRgtCy0L7RgNC40YLQuCDRgNC10YHRg9GA0YEuIgorCittc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCittc2dzdHIgItCd0LUg0LzQvtCz0YMg0YfQuNGC0LDRgtC4INC40Lcg0YDQtdGB0YPRgNGB0LAuIgorCittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKK21zZ3N0ciAi0J3QtSDQvNC+0LPRgyDRg9C/0LjRgdCw0YLQuCDRgyDRgNC10YHRg9GA0YEuIgorCittc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCittc2dzdHIgItCd0LUg0LzQvtCz0YMg0LTQsCDQv9C+0YHRgtCw0LLQuNC8INC/0L7Qu9C+0LbQsNGYINGDINGA0LXRgdGD0YDRgdGDLiIKKworbXNnaWQgIkNvdWxkIG5vdCBzeW5jaHJvbml6ZSBvbiByZXNvdXJjZS4iCittc2dzdHIgItCd0LUg0LzQvtCz0YMg0LTQsCDRg9GB0LrQu9Cw0LTQuNC8INGB0LAg0YDQtdGB0YPRgNGB0L7QvC4iCisKK21zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKK21zZ3N0ciAi0J3QtSDQvNC+0LPRgyDQtNCwINGB0LDQt9C90LDQvC/Qv9C+0YHRgtCw0LLQuNC8INC/0L7QtNC10YjQsNCy0LDRmtCwINC40Lcv0YMg0YDQtdGB0YPRgNGB0YMuIgorCittc2dpZCAiTm8gc3BhY2UgbGVmdCBvbiB0aGUgcmVzb3VyY2UuIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdHJlYW0gZXJyb3IuIgorbXNnc3RyICLQk9Ch0YLRgNC40LzQtdGAINGY0LUg0L3QsNC40YjQsNC+INC90LAg0L7Qv9GI0YLRgyDQs9GA0LXRiNC60YMg0YMg0L7RgdC90L7QstC90L7RmCDQsdC40LHQu9C40L7RgtC10YbQuC4iCisKK21zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCittc2dzdHIgItCV0LvQtdC80LXQvdGCINC90LUg0L7QsdC10LfQsdC10ZLRg9GY0LUg0LHQsNGA0LDRgtCw0ZrQtSDQvtCy0LjQvCDRgtC+0LrQvtC8LiDQn9GA0LjRmNCw0LLQuNGC0LUg0LPRgNC10YjQutGDLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgorbXNnc3RyICLQndC1INC80L7Qs9GDINC00LAg0L7QtNGA0LXQtNC40Lwg0LLRgNGB0YLRgyDRgtC+0LrQsC4iCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgZWxlbWVudC4iCittc2dzdHIgItCi0L7QuiDRmNC1INCy0YDRgdGC0LUg0YDQsNC30LvQuNGH0LjRgtC1INC+0LQg0L7QvdC1INC60L7RmNC40Lwg0LHQsNGA0LDRgtCwINC+0LLQsNGYINC10LvQtdC80LXQvdGCLiIKKworbXNnaWQgIlRoZXJlIGlzIG5vIGNvZGVjIHByZXNlbnQgdGhhdCBjYW4gaGFuZGxlIHRoZSBzdHJlYW0ncyB0eXBlLiIKK21zZ3N0ciAi0J3QuNGY0LUg0L/RgNC40YHRg9GC0L3QviDQutC+0LTQuNGA0LDRmtC1INC60L7RmNC1INC80L7QttC1INC00LAg0LHQsNGA0LDRgtCwINGC0L7QutC+0Lwg0L7QstC1INCy0YDRgdGC0LUuIgorCittc2dpZCAiQ291bGQgbm90IGRlY29kZSBzdHJlYW0uIgorbXNnc3RyICLQndC1INC80L7Qs9GDINC00LAg0LTQtdC60L7QtNC40YDQsNC8INGC0L7Qui4iCisKK21zZ2lkICJDb3VsZCBub3QgZW5jb2RlIHN0cmVhbS4iCittc2dzdHIgItCd0LUg0LzQvtCz0YMg0LTQsCDQutC+0LTQuNGA0LDQvCDRgtC+0LouIgorCisjINC90LXRgdC40LPRg9GA0L3QvgorbXNnaWQgIkNvdWxkIG5vdCBkZW11bHRpcGxleCBzdHJlYW0uIgorbXNnc3RyICLQndC1INC80L7Qs9GDINC00LAg0YDQsNC30LPRgNCw0LTQuNC8INGC0L7Qui4iCisKKyMg0L3QtdGB0LjQs9GD0YDQvdC+Cittc2dpZCAiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIgorbXNnc3RyICLQndC1INC80L7Qs9GDINC00LAg0LjQt9Cz0YDQsNC00LjQvCDRgtC+0LouIgorCisjLCBmdXp6eQorbXNnaWQgIlRoZSBzdHJlYW0gaXMgaW4gdGhlIHdyb25nIGZvcm1hdC4iCittc2dzdHIgItCi0L7QuiDRmNC1INC/0L7Qs9GA0LXRiNC90L7QsyDQvtCx0LvQuNC60LAuIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgY2FuJ3QgYmUgZGVjcnlwdGVkIGJlY2F1c2Ugbm8gc3VpdGFibGUga2V5IGhhcyAiCisiYmVlbiBzdXBwbGllZC4iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMuIgorbXNnc3RyICLQndC10LzQsCDQv9C+0YDRg9C60LUg0L4g0LPRgNC10YjRhtC4INC30LAg0LTQvtC80LXQvSAlcy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKK21zZ3N0ciAi0J3QtdC80LAg0L7QsdC40YfQvdC1INC/0L7RgNGD0LrQtSDQviDQs9GA0LXRiNGG0Lgg0LfQsCDQtNC+0LzQtdC9ICVzINC4INC60L7QtCAlZC4iCisKK21zZ2lkICJTZWxlY3RlZCBjbG9jayBjYW5ub3QgYmUgdXNlZCBpbiBwaXBlbGluZS4iCittc2dzdHIgIiIKKworbXNnaWQgInRpdGxlIgorbXNnc3RyICLQvdCw0YHQu9C+0LIiCisKK21zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIgorbXNnc3RyICLQvtCx0LjRh9C90L4g0LrQvtGA0LjRiNGb0LXQvSDQvdCw0YHQu9C+0LIiCisKK21zZ2lkICJ0aXRsZSBzb3J0bmFtZSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgItC+0LHQuNGH0L3QviDQutC+0YDQuNGI0ZvQtdC9INC90LDRgdC70L7QsiIKKworbXNnaWQgImFydGlzdCIKK21zZ3N0ciAi0YPQvNC10YLQvdC40LoiCisKK21zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmciCittc2dzdHIgItC+0YHQvtCx0LUg0L7QtNCz0L7QstC+0YDQvdC1INC30LAg0YHQvdC40LzQsNC6IgorCittc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICLQvtGB0L7QsdC1INC+0LTQs9C+0LLQvtGA0L3QtSDQt9CwINGB0L3QuNC80LDQuiIKKworbXNnaWQgImFsYnVtIgorbXNnc3RyICLQsNC70LHRg9C8IgorCittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiCittc2dzdHIgItCw0LvQsdGD0Lwg0LrQvtGY0Lgg0YHQsNC00YDQttC4INC+0LLQtSDQv9C+0LTQsNGC0LrQtSIKKworbXNnaWQgImFsYnVtIHNvcnRuYW1lIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgItCw0LvQsdGD0Lwg0LrQvtGY0Lgg0YHQsNC00YDQttC4INC+0LLQtSDQv9C+0LTQsNGC0LrQtSIKKworIywgZnV6enkKK21zZ2lkICJhbGJ1bSBhcnRpc3QiCittc2dzdHIgItGD0LzQtdGC0L3QuNC6IgorCittc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgorbXNnc3RyICIiCisKK21zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgIiIKKworbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCIKK21zZ3N0ciAiIgorCittc2dpZCAiZGF0ZSIKK21zZ3N0ciAi0LTQsNGC0YPQvCIKKworIywgZnV6enkKK21zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCittc2dzdHIgItC00LDRgtGD0Lwg0L/RgNCw0LLRmdC10ZrQsCDQv9C+0LTQsNGC0LDQutCwICjQutCw0L4g0LHRgNC+0Zgg0IjRg9C70LjRmNCw0L3RgdC60L7QsyDQtNCw0L3QsCkiCisKKyMsIGZ1enp5Cittc2dpZCAiZGF0ZXRpbWUiCittc2dzdHIgItC00LDRgtGD0LwiCisKKyMsIGZ1enp5Cittc2dpZCAiZGF0ZSBhbmQgdGltZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHc3REYXRlVGltZSBzdHJ1Y3R1cmUpIgorbXNnc3RyICLQtNCw0YLRg9C8INC/0YDQsNCy0ZnQtdGa0LAg0L/QvtC00LDRgtCw0LrQsCAo0LrQsNC+INCx0YDQvtGYINCI0YPQu9C40ZjQsNC90YHQutC+0LMg0LTQsNC90LApIgorCittc2dpZCAiZ2VucmUiCittc2dzdHIgItC20LDQvdGAIgorCittc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCittc2dzdHIgItC20LDQvdGAINC60L7RmNC10Lwg0L7QstC4INC/0L7QtNCw0YbQuCDQv9GA0LjQv9Cw0LTQsNGY0YMiCisKK21zZ2lkICJjb21tZW50IgorbXNnc3RyICLQvdCw0L/QvtC80LXQvdCwIgorCittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCittc2dzdHIgItGC0LXQutGB0YIg0YMg0YHQu9C+0LHQvtC00L3QvtC8INC+0LHQu9C40LrRgyDQviDQvtCy0LjQvCDQv9C+0LTQsNGG0LjQvNCwIgorCisjLCBmdXp6eQorbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCittc2dzdHIgItC90LDQv9C+0LzQtdC90LAiCisKKyMsIGZ1enp5Cittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgorbXNnc3RyICLRgtC10LrRgdGCINGDINGB0LvQvtCx0L7QtNC90L7QvCDQvtCx0LvQuNC60YMg0L4g0L7QstC40Lwg0L/QvtC00LDRhtC40LzQsCIKKworIyDQvNC+0LbQtNCwIOKAntC90YPQvNC10YDQteKAnCDRg9C80LXRgdGC0L4g4oCe0L/QtdGB0LzQteKAnCwg0L/QvtGI0YLQviDQvNC+0LbQtdC80L4g0LjQvNCw0YLQuCDQuCDQstC40LTQtdC+INGB0L3QuNC80LrQtQorbXNnaWQgInRyYWNrIG51bWJlciIKK21zZ3N0ciAi0LHRgNC+0Zgg0L/QtdGB0LzQtSIKKworbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICLQsdGA0L7RmCDQv9C10YHQvNC1INGDINGB0LrRg9C/0YMiCisKK21zZ2lkICJ0cmFjayBjb3VudCIKK21zZ3N0ciAi0YPQutGD0L/QvdC+INC/0LXRgdCw0LzQsCIKKworbXNnaWQgImNvdW50IG9mIHRyYWNrcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIHRyYWNrIGJlbG9uZ3MgdG8iCittc2dzdHIgItGD0LrRg9C/0L3QviDQv9C10YHQsNC80LAg0YMg0YHQutGD0L/RgyDQutC+0ZjQtdC8INC/0YDQuNC/0LDQtNCwINC+0LLQsCDQv9C10YHQvNCwIgorCittc2dpZCAiZGlzYyBudW1iZXIiCittc2dzdHIgItCx0YDQvtGYINC00LjRgdC60LAiCisKK21zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICLQsdGA0L7RmCDQtNC40YHQutCwINGDINGB0LrRg9C/0YMiCisKK21zZ2lkICJkaXNjIGNvdW50IgorbXNnc3RyICLRg9C60YPQv9C90L4g0LTQuNGB0LrQvtCy0LAiCisKK21zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKK21zZ3N0ciAi0YPQutGD0L/QvdC+INC00LjRgdC60L7QstCwINGDINGB0LrRg9C/0YMg0LrQvtGY0LXQvCDQv9GA0LjQv9Cw0LTQsCDQvtCy0LDRmCDQtNC40YHQuiIKKworbXNnaWQgImxvY2F0aW9uIgorbXNnc3RyICLQv9C+0LvQvtC20LDRmCIKKworbXNnaWQgIiIKKyJPcmlnaW4gb2YgbWVkaWEgYXMgYSBVUkkgKGxvY2F0aW9uLCB3aGVyZSB0aGUgb3JpZ2luYWwgb2YgdGhlIGZpbGUgb3Igc3RyZWFtICIKKyJpcyBob3N0ZWQpIgorbXNnc3RyICIiCisKK21zZ2lkICJob21lcGFnZSIKK21zZ3N0ciAiIgorCittc2dpZCAiSG9tZXBhZ2UgZm9yIHRoaXMgbWVkaWEgKGkuZS4gYXJ0aXN0IG9yIG1vdmllIGhvbWVwYWdlKSIKK21zZ3N0ciAiIgorCittc2dpZCAiZGVzY3JpcHRpb24iCittc2dzdHIgItC+0L/QuNGBIgorCittc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgorbXNnc3RyICLQutGA0LDRgtCw0Log0YLQtdC60YHRgiDQutC+0ZjQuCDQvtC/0LjRgdGD0ZjQtSDRgdCw0LTRgNC20LDRmCDQv9C+0LTQsNGC0LDQutCwIgorCisjCittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAi0LjQt9C00LDRmtC1IgorCittc2dpZCAidmVyc2lvbiBvZiB0aGlzIGRhdGEiCittc2dzdHIgItC40LfQtNCw0ZrQtSDQvtCy0LjRhSDQv9C+0LTQsNGC0LDQutCwIgorCittc2dpZCAiSVNSQyIKK21zZ3N0ciAi0JzQodCa0KEiCisKK21zZ2lkICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCittc2dzdHIgIiIKKyLQnNC10ZLRg9C90LDRgNC+0LTQvdC4INGB0YLQsNC90LTQsNGA0LTQvdC4INC60L7QtCDQt9CwINGB0L3QuNC80LDRmtC1IOKAlCDQstC40LTQtdGC0LggaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKKworbXNnaWQgIm9yZ2FuaXphdGlvbiIKK21zZ3N0ciAi0L7RgNCz0LDQvdC40LfQsNGG0LjRmNCwIgorCittc2dpZCAiY29weXJpZ2h0IgorbXNnc3RyICLQsNGD0YLQvtGA0YHQutCwINC/0YDQsNCy0LAiCisKK21zZ2lkICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICLQv9C+0YDRg9C60LAg0L4g0LDRg9GC0L7RgNGB0LrQuNC8INC/0YDQsNCy0LjQvNCwINC30LAg0L/QvtC00LDRgtC60LUiCisKKyMsIGZ1enp5Cittc2dpZCAiY29weXJpZ2h0IHVyaSIKK21zZ3N0ciAi0LDRg9GC0L7RgNGB0LrQsCDQv9GA0LDQstCwIgorCisjLCBmdXp6eQorbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAi0L/QvtGA0YPQutCwINC+INCw0YPRgtC+0YDRgdC60LjQvCDQv9GA0LDQstC40LzQsCDQt9CwINC/0L7QtNCw0YLQutC1IgorCisjLCBmdXp6eQorbXNnaWQgImVuY29kZWQgYnkiCittc2dzdHIgItC60L7QtNC40YDQsNGC0LgiCisKK21zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICJjb250YWN0IgorbXNnc3RyICLQutC+0L3RgtCw0LrRgiIKKworbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCittc2dzdHIgItC/0L7QtNCw0YbQuCDQt9CwINGB0YLRg9C/0LDRmtC1INGDINCy0LXQt9GDIgorCittc2dpZCAibGljZW5zZSIKK21zZ3N0ciAi0LTQvtC30LLQvtC70LAiCisKK21zZ2lkICJsaWNlbnNlIG9mIGRhdGEiCittc2dzdHIgItC00L7Qt9Cy0L7Qu9CwINC30LAg0YPQv9C+0YLRgNC10LHRgyDQv9C+0LTQsNGC0LDQutCwIgorCisjLCBmdXp6eQorbXNnaWQgImxpY2Vuc2UgdXJpIgorbXNnc3RyICLQtNC+0LfQstC+0LvQsCIKKworIywgZnV6enkKK21zZ2lkICJVUkkgdG8gdGhlIGxpY2Vuc2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgItC00L7Qt9Cy0L7Qu9CwINC30LAg0YPQv9C+0YLRgNC10LHRgyDQv9C+0LTQsNGC0LDQutCwIgorCittc2dpZCAicGVyZm9ybWVyIgorbXNnc3RyICLQuNC30LLQvtGS0LDRhyIKKworbXNnaWQgInBlcnNvbihzKSBwZXJmb3JtaW5nIgorbXNnc3RyICLQvtGB0L7QsdC1INC60L7RmNC1INC40LfQstC+0LTQtSIKKworbXNnaWQgImNvbXBvc2VyIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nIgorbXNnc3RyICLQvtGB0L7QsdC1INC+0LTQs9C+0LLQvtGA0L3QtSDQt9CwINGB0L3QuNC80LDQuiIKKworbXNnaWQgImR1cmF0aW9uIgorbXNnc3RyICLRgtGA0LDRmNCw0ZrQtSIKKworbXNnaWQgImxlbmd0aCBpbiBHU3RyZWFtZXIgdGltZSB1bml0cyAobmFub3NlY29uZHMpIgorbXNnc3RyICLQtNGD0LbQuNC90LAg0YMg0LLRgNC10LzQtdC90YHQutC40Lwg0ZjQtdC00LjQvdC40YbQsNC80LAg0JPQodGC0YDQuNC80LXRgNCwICjQvdCw0L3QvtGB0LXQutGD0L3QtNCw0LzQsCkiCisKK21zZ2lkICJjb2RlYyIKK21zZ3N0ciAi0LrQvtC00LjRgNCw0ZrQtSIKKworbXNnaWQgImNvZGVjIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAi0L3QsCDQutC+0ZjQuCDQvdCw0YfQuNC9INGB0YMg0L/QvtC00LDRhtC4INC60L7QtNC40YDQsNC90LgiCisKK21zZ2lkICJ2aWRlbyBjb2RlYyIKK21zZ3N0ciAi0LLQuNC00LXQviDQutC+0LTQuNGA0LDRmtC1IgorCittc2dpZCAiY29kZWMgdGhlIHZpZGVvIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICLQvdCwINC60L7RmNC4INC90LDRh9C40L0g0YHRgyDQstC40LTQtdC+INC/0L7QtNCw0YbQuCDQutC+0LTQuNGA0LDQvdC4IgorCittc2dpZCAiYXVkaW8gY29kZWMiCittc2dzdHIgItC30LLRg9GH0L3QviDQutC+0LTQuNGA0LDRmtC1IgorCittc2dpZCAiY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICLQvdCwINC60L7RmNC4INC90LDRh9C40L0g0YHRgyDQt9Cy0YPRh9C90Lgg0L/QvtC00LDRhtC4INC60L7QtNC40YDQsNC90LgiCisKKyMsIGZ1enp5Cittc2dpZCAic3VidGl0bGUgY29kZWMiCittc2dzdHIgItCy0LjQtNC10L4g0LrQvtC00LjRgNCw0ZrQtSIKKworIywgZnV6enkKK21zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgItC90LAg0LrQvtGY0Lgg0L3QsNGH0LjQvSDRgdGDINCy0LjQtNC10L4g0L/QvtC00LDRhtC4INC60L7QtNC40YDQsNC90LgiCisKKyMsIGZ1enp5Cittc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKK21zZ3N0ciAi0L/QvtC00LDRhtC4INC30LAg0YHRgtGD0L/QsNGa0LUg0YMg0LLQtdC30YMiCisKKyMsIGZ1enp5Cittc2dpZCAiY29udGFpbmVyIGZvcm1hdCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgItC90LAg0LrQvtGY0Lgg0L3QsNGH0LjQvSDRgdGDINC/0L7QtNCw0YbQuCDQutC+0LTQuNGA0LDQvdC4IgorCittc2dpZCAiYml0cmF0ZSIKK21zZ3N0ciAi0LHRgNC30LjQvdCwINCx0LjRgtC+0LLQsCIKKworbXNnaWQgImV4YWN0IG9yIGF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgItGC0LDRh9C90LAg0LjQu9C4INC/0YDQvtGB0LXRh9C90LAg0LHRgNC30LjQvdCwINCx0LjRgtC+0LLQsCDRgyDQsdC40YLQvtCy0LjQvNCwINC/0L4g0YHQtdC60YPQvdC00LgiCisKK21zZ2lkICJub21pbmFsIGJpdHJhdGUiCittc2dzdHIgItC90LDQstC10LTQtdC90LAg0LHRgNC30LjQvdCwINCx0LjRgtC+0LLQsCIKKworbXNnaWQgIm5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgItC90LDQstC10LTQtdC90LAg0LHRgNC30LjQvdCwINCx0LjRgtC+0LLQsCDRgyDQsdC40YLQvtCy0LjQvNCwINC/0L4g0YHQtdC60YPQvdC00LgiCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCittc2dzdHIgItC90LDRmNC80LDRmtCwINCx0YDQt9C40L3QsCDQsdC40YLQvtCy0LAiCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICLQvdCw0ZjQvNCw0ZrQsCDQsdGA0LfQuNC90LAg0LHQuNGC0L7QstCwINGDINCx0LjRgtC+0LLQuNC80LAg0L/QviDRgdC10LrRg9C90LTQuCIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSIKK21zZ3N0ciAi0L3QsNGY0LLQtdGb0LAg0LHRgNC30LjQvdCwINCx0LjRgtC+0LLQsCIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgItC90LDRmNCy0LXRm9CwINCx0YDQt9C40L3QsCDQsdC40YLQvtCy0LAg0YMg0LHQuNGC0L7QstC40LzQsCDQv9C+INGB0LXQutGD0L3QtNC4IgorCittc2dpZCAiZW5jb2RlciIKK21zZ3N0ciAi0LrQvtC00LjRgNCw0YLQuCIKKworbXNnaWQgImVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCittc2dzdHIgItC60LDQutC+INC60L7QtNC40YDQsNGC0Lgg0L7QstCw0Zgg0YLQvtC6IgorCittc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgorbXNnc3RyICLQuNC30LTQsNGa0LUg0LrQvtC00LjRgNCw0ZrQsCIKKworbXNnaWQgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCittc2dzdHIgItC40LfQtNCw0ZrQtSDQutC+0LTQuNGA0LDRmtCwINC60L7RmNC40Lwg0YHQtSDQutC+0LTQuNGA0LAg0L7QstCw0Zgg0YLQvtC6IgorCittc2dpZCAic2VyaWFsIgorbXNnc3RyICLRgdC10YDQuNGY0LAiCisKK21zZ2lkICJzZXJpYWwgbnVtYmVyIG9mIHRyYWNrIgorbXNnc3RyICLRgdC10YDQuNGY0YHQutC4INCx0YDQvtGYINGC0YDQsNC60LUiCisKKyMgYnVnOiB0aGlzIGlzIHNvbWV0aGluZyBzdHJhbmdlCittc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgorbXNnc3RyICLQv9C+0ZjQsNGH0LDRmtC1INC/0LXRgdC80LUg0L/RgNC4INC/0L7QvdC+0LLQvdC+0Lwg0L/Rg9GI0YLQsNGa0YMiCisKK21zZ2lkICJ0cmFjayBnYWluIGluIGRiIgorbXNnc3RyICLQv9C+0ZjQsNGH0LDRmtC1INC/0LXRgdC80LUg0YMg0LTQtdGG0LjQsdC10LvQuNC80LAiCisKK21zZ2lkICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCittc2dzdHIgItCy0YDRhdGD0L3QsNGGINC/0YDQuCDQv9C+0L3QvtCy0L3QvtC8INC/0YPRiNGC0LDRmtGDIgorCittc2dpZCAicGVhayBvZiB0aGUgdHJhY2siCittc2dzdHIgItCy0YDRhdGD0L3QsNGGINC/0LXRgdC80LUiCisKK21zZ2lkICJyZXBsYXlnYWluIGFsYnVtIGdhaW4iCittc2dzdHIgItC/0L7RmNCw0YfQsNGa0LUg0LDQu9Cx0YPQvNCwINC/0YDQuCDQv9C+0L3QvtCy0L3QvtC8INC/0YPRiNGC0LDRmtGDIgorCittc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKK21zZ3N0ciAi0L/QvtGY0LDRh9Cw0ZrQtSDQsNC70LHRg9C80LAg0YMg0LTQtdGG0LjQsdC10LvQuNC80LAiCisKK21zZ2lkICJyZXBsYXlnYWluIGFsYnVtIHBlYWsiCittc2dzdHIgItCy0YDRhdGD0L3QsNGGINCw0LvQsdGD0LzQsCDQv9GA0Lgg0L/QvtC90L7QstC90L7QvCDQv9GD0YjRgtCw0ZrRgyIKKworbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgorbXNnc3RyICLQstGA0YXRg9C90LDRhiDQsNC70LHRg9C80LAiCisKKyMsIGZ1enp5Cittc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCittc2dzdHIgItCy0YDRhdGD0L3QsNGGINC/0YDQuCDQv9C+0L3QvtCy0L3QvtC8INC/0YPRiNGC0LDRmtGDIgorCittc2dpZCAicmVmZXJlbmNlIGxldmVsIG9mIHRyYWNrIGFuZCBhbGJ1bSBnYWluIHZhbHVlcyIKK21zZ3N0ciAiIgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSIKK21zZ3N0ciAiIgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIgorbXNnc3RyICIiCisKK21zZ2lkICJpbWFnZSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgItC60LDQutC+INC60L7QtNC40YDQsNGC0Lgg0L7QstCw0Zgg0YLQvtC6IgorCisjLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKK21zZ2lkICJwcmV2aWV3IGltYWdlIgorbXNnc3RyICIiCisKK21zZ2lkICJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgIiIKKworbXNnaWQgImF0dGFjaG1lbnQiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJmaWxlIGF0dGFjaGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICLQutCw0LrQviDQutC+0LTQuNGA0LDRgtC4INC+0LLQsNGYINGC0L7QuiIKKworbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCittc2dzdHIgIiIKKworbXNnaWQgIm51bWJlciBvZiBiZWF0cyBwZXIgbWludXRlIGluIGF1ZGlvIgorbXNnc3RyICIiCisKK21zZ2lkICJrZXl3b3JkcyIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImNvbW1hIHNlcGFyYXRlZCBrZXl3b3JkcyBkZXNjcmliaW5nIHRoZSBjb250ZW50IgorbXNnc3RyICLQutGA0LDRgtCw0Log0YLQtdC60YHRgiDQutC+0ZjQuCDQvtC/0LjRgdGD0ZjQtSDRgdCw0LTRgNC20LDRmCDQv9C+0LTQsNGC0LDQutCwIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBuYW1lIgorbXNnc3RyICLQv9C+0LvQvtC20LDRmCIKKworbXNnaWQgIiIKKyJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgorInByb2R1Y2VkIgorbXNnc3RyICIiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCisic291dGhlcm4gbGF0aXR1ZGVzKSIKK21zZ3N0ciAiIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorImdlbyBsb25naXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgcHJpbWUgbWVyaWRpYW4gaW4gR3JlZW53aWNoL1VLLCAgIgorIm5lZ2F0aXZlIHZhbHVlcyBmb3Igd2VzdGVybiBsb25naXR1ZGVzKSIKK21zZ3N0ciAiIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCisiYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBjb3VudHJ5IgorbXNnc3RyICLQv9C+0LvQvtC20LDRmCIKKworbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCittc2dzdHIgItC/0L7Qu9C+0LbQsNGYIgorCittc2dpZCAiY2l0eSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gc3VibG9jYXRpb24iCittc2dzdHIgItC/0L7Qu9C+0LbQsNGYIgorCittc2dpZCAiIgorImEgbG9jYXRpb24gd2hpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgorInRoZSBuZWlnaGJvcmhvb2QpIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIGhvcml6b250YWwgZXJyb3IiCittc2dzdHIgItC/0L7Qu9C+0LbQsNGYIgorCittc2dpZCAiZXhwZWN0ZWQgZXJyb3Igb2YgdGhlIGhvcml6b250YWwgcG9zaXRpb25pbmcgbWVhc3VyZXMgKGluIG1ldGVycykiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgc3BlZWQiCittc2dzdHIgItC/0L7Qu9C+0LbQsNGYIgorCittc2dpZCAiIgorIm1vdmVtZW50IHNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgaW4gbS9zIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKK21zZ3N0ciAi0L/QvtC70L7QttCw0ZgiCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgorIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKKyJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCittc2dzdHIgItC/0L7Qu9C+0LbQsNGYIgorCittc2dpZCAiIgorImluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcgIGEgbWVkaWEuICIKKyJJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50ICByZXByZXNlbnRhdGlvbiwgMCBtZWFucyB0aGUgIgorImdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZScgaGVyZQorbXNnaWQgInNob3cgbmFtZSIKK21zZ3N0ciAiIgorCittc2dpZCAiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogJ3Nob3cgc29ydG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lIGFzIHVzZWQgZm9yIHNvcnRpbmcgcHVycG9zZXMnIGhlcmUKK21zZ2lkICJzaG93IHNvcnRuYW1lIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJlcGlzb2RlIG51bWJlciIKK21zZ3N0ciAi0LHRgNC+0Zgg0LTQuNGB0LrQsCIKKworbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAic2Vhc29uIG51bWJlciIKK21zZ3N0ciAi0LHRgNC+0Zgg0LTQuNGB0LrQsCIKKworbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAibHlyaWNzIgorbXNnc3RyICLQtNC+0LfQstC+0LvQsCIKKworbXNnaWQgIlRoZSBseXJpY3Mgb2YgdGhlIG1lZGlhLCBjb21tb25seSB1c2VkIGZvciBzb25ncyIKK21zZ3N0ciAiIgorCittc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICLQvtGB0L7QsdC1INC+0LTQs9C+0LLQvtGA0L3QtSDQt9CwINGB0L3QuNC80LDQuiIKKworbXNnaWQgImdyb3VwaW5nIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiR3JvdXBzIHJlbGF0ZWQgbWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSB0cmFja3MsIGxpa2UgdGhlIGRpZmZlcmVudCBwaWVjZXMgIgorIm9mIGEgY29uY2VydG8uIEl0IGlzIGEgaGlnaGVyIGxldmVsIHRoYW4gYSB0cmFjaywgYnV0IGxvd2VyIHRoYW4gYW4gYWxidW0iCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJ1c2VyIHJhdGluZyIKK21zZ3N0ciAi0YLRgNCw0ZjQsNGa0LUiCisKK21zZ2lkICIiCisiUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCisidGhpcyBtZWRpYSIKK21zZ3N0ciAiIgorCittc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIk1hbnVmYWN0dXJlciBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCittc2dzdHIgItC40LfQtNCw0ZrQtSDQutC+0LTQuNGA0LDRmtCwINC60L7RmNC40Lwg0YHQtSDQutC+0LTQuNGA0LAg0L7QstCw0Zgg0YLQvtC6IgorCittc2dpZCAiZGV2aWNlIG1vZGVsIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICLQuNC30LTQsNGa0LUg0LrQvtC00LjRgNCw0ZrQsCDQutC+0ZjQuNC8INGB0LUg0LrQvtC00LjRgNCwINC+0LLQsNGYINGC0L7QuiIKKworIywgZnV6enkKK21zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgorbXNnc3RyICLQv9C+0LvQvtC20LDRmCIKKworIywgZnV6enkKK21zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCittc2dzdHIgItC40LfQtNCw0ZrQtSDQutC+0LTQuNGA0LDRmtCwINC60L7RmNC40Lwg0YHQtSDQutC+0LTQuNGA0LAg0L7QstCw0Zgg0YLQvtC6IgorCittc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKK21zZ3N0ciAiIgorCittc2dpZCAiQXJiaXRyYXJ5IGFwcGxpY2F0aW9uIGRhdGEgdG8gYmUgc2VyaWFsaXplZCBpbnRvIHRoZSBtZWRpYSIKK21zZ3N0ciAiIgorCittc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCittc2dzdHIgIiIKKworbXNnaWQgIkhvdyB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCBiZWZvcmUgZGlzcGxheSIKK21zZ3N0ciAiIgorCittc2dpZCAiLCAiCittc2dzdHIgIiwgIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCittc2dzdHIgItCT0KDQldCo0JrQkDog0LjQtyDQtdC70LXQvNC10L3RgtCwICVzOiAlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorItCU0L7QtNCw0YLQvdC4INC/0L7QtNCw0YbQuCDQt9CwINC40YHQv9GA0LDQstC60YMg0LPRgNC10YjQsNC60LA6XG4iCisiJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJzcGVjaWZpZWQgZW1wdHkgYmluIFwiJXNcIiwgbm90IGFsbG93ZWQiCittc2dzdHIgItC90LDQstC10LTQtdC90LAg0ZjQtSDQv9GA0LDQt9C90LAg0LrQsNC90YLQsCDigJ4lc+KAnCwg0L7QstC+INC90LjRmNC1INC00L7Qt9Cy0L7RmdC10L3QviIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBiaW4gXCIlc1wiLCBza2lwcGluZyIKK21zZ3N0ciAi0L3QtdC80LAg0LrQsNC90YLQtSDigJ4lc+KAnCwg0L/RgNC10YHQutCw0YfQtdC8IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiIKK21zZ3N0ciAi0L3QtdC80LAg0L7RgdC+0LHQuNC90LUg4oCeJXPigJwg0YMg0LXQu9C10LzQtdC90YLRgyDigJ4lc+KAnCIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc2V0IHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiB0byBcIiVzXCIiCittc2dzdHIgItC90LUg0LzQvtCz0YMg0LTQsCDQv9C+0YHRgtCw0LLQuNC8INC+0YHQvtCx0LjQvdGDIOKAniVz4oCcINGDINC10LvQtdC80LXQvdGC0YMg4oCeJXPigJwg0L3QsCDigJ4lc+KAnCIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbGluayAlcyB0byAlcyIKK21zZ3N0ciAi0L3QtSDQvNC+0LPRgyDQtNCwINCy0LXQttC10LwgJXMg0YHQsCAlcyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKK21zZ3N0ciAi0L3QtdC80LAg0LXQu9C10LzQtdC90YLQsCDigJ4lc+KAnCIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCittc2dzdHIgItC90LUg0LzQvtCz0YMg0LTQsCDQvtCx0YDQsNC00LjQvCDQvNC+0LPRg9Gb0L3QvtGB0YLQuCDigJ4lc+KAnCIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIKK21zZ3N0ciAi0LLQtdC30LAg0LHQtdC3INC40LfQstC+0YDQvdC+0LMg0LXQu9C10LzQtdC90YLQsCIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzaW5rIGVsZW1lbnQiCittc2dzdHIgItCy0LXQt9CwINCx0LXQtyDQt9Cw0LLRgNGI0L3QvtCzINC10LvQtdC80LXQvdGC0LAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgItC90LXQvNCwINC40LfQstC+0YDQvdC+0LMg0LXQu9C10LzQtdC90YLQsCDQt9CwINCw0LTRgNC10YHRgyDigJ4lc+KAnCIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBlbGVtZW50IHRvIGxpbmsgVVJJIFwiJXNcIiB0byIKK21zZ3N0ciAi0L3QtdC80LAg0LXQu9C10LzQtdC90YLQsCDQt9CwINCy0LXQt9C40LLQsNGa0LUg0LDQtNGA0LXRgdC1IOKAniVz4oCcIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAi0L3QtdC80LAg0LfQsNCy0YDRiNC90L7QsyDQtdC70LXQvNC10L3RgtCwINC30LAg0LDQtNGA0LXRgdGDIOKAniVz4oCcIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAi0L3QtSDQvNC+0LPRgyDQtNCwINCy0LXQttC10Lwg0LfQsNCy0YDRiNC90Lgg0LXQu9C10LzQtdC90YIg0LfQsCDQsNC00YDQtdGB0YMg4oCeJXPigJwiCisKK21zZ2lkICJlbXB0eSBwaXBlbGluZSBub3QgYWxsb3dlZCIKK21zZ3N0ciAi0L3QuNGY0LUg0LTQvtC/0YPRiNGC0LXQvSDQv9GA0LDQt9Cw0L0g0YbQtdCy0L7QstC+0LQiCisKK21zZ2lkICJJbnRlcm5hbCBjbG9jayBlcnJvci4iCittc2dzdHIgIiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCittc2dzdHIgIiIKKworbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCittc2dzdHIgIiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiIgorCittc2dpZCAiRmlsdGVyIGNhcHMiCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKKyJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgorbXNnc3RyICIiCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKK21zZ3N0ciAi0J3QuNGY0LUg0L3QsNCy0LXQtNC10L3QviDQuNC80LUg0LTQsNGC0L7RgtC10LrQtSDQt9CwINGD0L/QuNGBLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCittc2dzdHIgItCd0LUg0LzQvtCz0YMg0LTQsCDQvtGC0LLQvtGA0LjQvCDQtNCw0YLQvtGC0LXQutGDIOKAniVz4oCcINGA0LDQtNC4INGD0L/QuNGB0LAuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGNsb3NpbmcgZmlsZSBcIiVzXCIuIgorbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INC30LDRgtCy0LDRgNCw0ZrRgyDQtNCw0YLQvtGC0LXQutC1IOKAniVz4oCcLiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Vla2luZyBpbiBmaWxlIFwiJXNcIi4iCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0YPQv9C40YHRgyDRgyDQtNCw0YLQvtGC0LXQutGDIOKAniVz4oCcLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDRg9C/0LjRgdGDINGDINC00LDRgtC+0YLQtdC60YMg4oCeJXPigJwuIgorCittc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCittc2dzdHIgItCd0LjRmNC1INC90LDQstC10LTQtdC90L4g0LjQvNC1INC00LDRgtC+0YLQtdC60LUg0LfQsCDRh9C40YLQsNGa0LUuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKK21zZ3N0ciAi0J3QtSDQvNC+0LPRgyDQtNCwINC+0YLQstC+0YDQuNC8INC00LDRgtC+0YLQtdC60YMg4oCeJXPigJwg0YDQsNC00Lgg0YfQuNGC0LDRmtCwLiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCittc2dzdHIgItCd0LUg0LzQvtCz0YMg0LTQsCDRgdCw0LfQvdCw0Lwv0L/QvtGB0YLQsNCy0LjQvCDQv9C+0LTQtdGI0LDQstCw0ZrQsCDQuNC3L9GDINGA0LXRgdGD0YDRgdGDLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIgorbXNnc3RyICJcIiVzXCIg0ZjQtSDQtNC40YDQtdC60YLQvtGA0LjRmNGD0LwuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKK21zZ3N0ciAi0JTQsNGC0L7RgtC10LrQsCDigJ4lc+KAnCDRmNC1INGB0L7QutC10YIuIgorCittc2dpZCAiRmFpbGVkIGFmdGVyIGl0ZXJhdGlvbnMgYXMgcmVxdWVzdGVkLiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YUg0L3QsNC60L7QvSDRgtGA0LDQttC10L3QvtCzINCx0YDQvtGY0LAg0L/QvtC60YPRiNCw0ZjQsC4iCisKK21zZ2lkICJObyBUZW1wIGRpcmVjdG9yeSBzcGVjaWZpZWQuIgorbXNnc3RyICIiCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcCBmaWxlIFwiJXNcIi4iCittc2dzdHIgItCd0LUg0LzQvtCz0YMg0LTQsCDRgdCw0LfQvdCw0Lwv0L/QvtGB0YLQsNCy0LjQvCDQv9C+0LTQtdGI0LDQstCw0ZrQsCDQuNC3L9GDINGA0LXRgdGD0YDRgdGDLiIKKworIywgZnV6enkKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIgorbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INGD0L/QuNGB0YMg0YMg0LTQsNGC0L7RgtC10LrRgyDigJ4lc+KAnC4iCisKKyMgYnVnOiB0aGlzIHNob3VsZCBiZSBmdWxsIHdvcmQKK21zZ2lkICJjYXBzIgorbXNnc3RyICLQvNC+0LPRg9Gb0L3QvtGB0YLQuCIKKworbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCittc2dzdHIgItC/0YDQtdC/0L7Qt9C90LDRgtC1INC80L7Qs9GD0ZvQvdC+0YHRgtC4INGDINGC0L7QutGDIgorCittc2dpZCAibWluaW11bSIKK21zZ3N0ciAi0L3QsNGY0LzQsNGa0LUiCisKK21zZ2lkICJtYXhpbXVtIgorbXNnc3RyICLQvdCw0ZjQstC40YjQtSIKKworbXNnaWQgImZvcmNlIGNhcHMiCittc2dzdHIgIiIKKworbXNnaWQgImZvcmNlIGNhcHMgd2l0aG91dCBkb2luZyBhIHR5cGVmaW5kIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgorbXNnc3RyICLQsNC70LHRg9C8INC60L7RmNC4INGB0LDQtNGA0LbQuCDQvtCy0LUg0L/QvtC00LDRgtC60LUiCisKK21zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJyZWFkYWJsZSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIndyaXRhYmxlIgorbXNnc3RyICLQvdCw0YHQu9C+0LIiCisKK21zZ2lkICJjb250cm9sbGFibGUiCittc2dzdHIgIiIKKworbXNnaWQgImNoYW5nZWFibGUgaW4gTlVMTCwgUkVBRFksIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCwgUkVBRFkgb3IgUEFVU0VEIHN0YXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKK21zZ3N0ciAiIgorCittc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiVG90YWwgY291bnQ6ICIKK21zZ3N0ciAi0YPQutGD0L/QvdC+INC/0LXRgdCw0LzQsCIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgorbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCittc2dzdHJbMl0gIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBwbHVnaW4iCittc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorbXNnc3RyWzJdICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgorbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCittc2dzdHJbMl0gIiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJWQgZmVhdHVyZSIKK21zZ2lkX3BsdXJhbCAiJWQgZmVhdHVyZXMiCittc2dzdHJbMF0gItC+0LTQu9C40LrQsCIKK21zZ3N0clsxXSAi0L7QtNC70LjQutC1IgorbXNnc3RyWzJdICLQvtC00LvQuNC60LAiCisKK21zZ2lkICJQcmludCBhbGwgZWxlbWVudHMiCittc2dzdHIgItCY0YHQv9C40YjQuCDRgdCy0LUg0LXQu9C10LzQtdC90YLQtSIKKworbXNnaWQgIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgorInBsdWdpbnMgcHJvdmlkZS5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKKyJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgorbXNnc3RyICIiCisKK21zZ2lkICJMaXN0IHRoZSBwbHVnaW4gY29udGVudHMiCittc2dzdHIgIiIKKworbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmlsZTogJXNcbiIKK21zZ3N0ciAi0J3QtSDQvNC+0LPRgyDQtNCwINC+0YLQstC+0YDQuNC8INC00LDRgtC+0YLQtdC60YMg4oCeJXPigJwg0YDQsNC00Lgg0YPQv9C40YHQsC4iCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgorbXNnc3RyICLQvdC10LzQsCDQuNC30LLQvtGA0L3QvtCzINC10LvQtdC80LXQvdGC0LAg0LfQsCDQsNC00YDQtdGB0YMg4oCeJXPigJwiCisKK21zZ2lkICJJbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSAoJXMpOiAiCittc2dzdHIgIiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIgorbXNnc3RyICLQk9Cg0JXQqNCa0JA6INC40Lcg0LXQu9C10LzQtdC90YLQsCAlczogJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgorbXNnc3RyICLQndCQ0ILQntClINCe0JfQndCQ0JrQoyAgIDog0L3QsNGI0LDQviDRmNC1INC10LvQtdC80LXQvdGCIOKAniVz4oCcLlxuIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCittc2dzdHIgItCd0JDQgtCe0KUg0J7Ql9Cd0JDQmtCjICAgOiDQvdCw0YjQsNC+INGY0LUg0LXQu9C10LzQtdC90YIg4oCeJXPigJwuXG4iCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKK21zZ3N0ciAi0J3QkNCC0J7QpSDQntCX0J3QkNCa0KMgICA6INC90LDRiNCw0L4g0ZjQtSDQtdC70LXQvNC10L3RgiDigJ4lc+KAnC5cbiIKKworbXNnaWQgIkZPVU5EIFRBR1xuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklORk86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCittc2dzdHIgItCT0KDQldCo0JrQkDog0LjQtyDQtdC70LXQvNC10L3RgtCwICVzOiAlc1xuIgorCittc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgImJ1ZmZlcmluZy4uLiIKK21zZ3N0ciAiIgorCittc2dpZCAiRG9uZSBidWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCittc2dzdHIgIiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBlbGVtZW50OiAlc1xuIgorbXNnc3RyICLQvdC10LzQsCDQtdC70LXQvNC10L3RgtCwIOKAniVz4oCcIgorCittc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgorbXNnc3RyICLQmNC30LvQsNC30L3QtSDQvtC30L3QsNC60LUgKNGC0LDQutC+0ZLQtSDQv9C+0LfQvdCw0YLQviDQuCDQutCw0L4g0LzQtdGC0LDQv9C+0LTQsNGG0LgpIgorCittc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKK21zZ3N0ciAi0JjRgdC/0LjRiNC4INC/0L7QtNCw0YLQutC1INC+INGB0YLQsNGa0YMg0Lgg0L7QsdCw0LLQtdGI0YLQtdGa0LAg0L4g0L7RgdC+0LHQuNC90LDQvNCwIgorCisjLCBmdXp6eQorbXNnaWQgIkRvIG5vdCBwcmludCBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24iCittc2dzdHIgItCd0LUg0LjRgdC/0LjRgdGD0Zgg0L/QvtC00LDRgtC60LUg0L4g0YHRgtCw0ZrRgyDQt9CwINCS0KDQodCi0KMiCisKK21zZ2lkICJPdXRwdXQgbWVzc2FnZXMiCittc2dzdHIgIiIKKworbXNnaWQgIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIFRZUEUiCittc2dzdHIgItCd0LUg0LjRgdC/0LjRgdGD0Zgg0L/QvtC00LDRgtC60LUg0L4g0YHRgtCw0ZrRgyDQt9CwINCS0KDQodCi0KMiCisKK21zZ2lkICJUWVBFMSxUWVBFMiwuLi4iCittc2dzdHIgItCS0KDQodCi0JAxLNCS0KDQodCi0JAyLC4uLiIKKworbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKK21zZ3N0ciAi0J3QtSDQv9C+0YHRgtCw0LLRmdCw0Zgg0YDRg9C60L7QstCw0L7RhtCwINCz0YDQtdGI0LrQsNC80LAiCisKK21zZ2lkICJQcmludCBhbGxvYyB0cmFjZSAoaWYgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUpIgorbXNnc3RyICLQmNGB0L/QuNGI0Lgg0YLRgNCw0LMg0LTQvtC00LXQu9C1INC80LXQvNC+0YDQuNGY0LUgKNCw0LrQviDRmNC1INGD0LrRmdGD0YfQtdC90L4g0L/RgNC4INC/0YDQtdCy0L7RktC10ZrRgykiCisKK21zZ2lkICJGb3JjZSBFT1Mgb24gc291cmNlcyBiZWZvcmUgc2h1dHRpbmcgdGhlIHBpcGVsaW5lIGRvd24iCittc2dzdHIgIiIKKworbXNnaWQgIkdhdGhlciBhbmQgcHJpbnQgaW5kZXggc3RhdGlzdGljcyIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQ6ICVzLlxuIgorbXNnc3RyICLQk9Cg0JXQqNCa0JA6INC90LUg0LzQvtCz0YMg0LTQsCDRgdCw0YHRgtCw0LLQuNC8INGG0LXQstC+0LLQvtC0OiAlcy5cbiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXG4iCittc2dzdHIgItCT0KDQldCo0JrQkDog0L3QtSDQvNC+0LPRgyDQtNCwINGB0LDRgdGC0LDQstC40Lwg0YbQtdCy0L7QstC+0LQuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogZXJyb25lb3VzIHBpcGVsaW5lOiAlc1xuIgorbXNnc3RyICLQo9Cf0J7Ql9Ce0KDQldCK0JU6INC90LXQuNGB0L/RgNCw0LLQsNC9INGG0LXQstC+0LLQvtC0OiAlc1xuIgorCittc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgorbXNnc3RyICLQk9Cg0JXQqNCa0JA6INC10LvQtdC80LXQvdGCIOKAnnBpcGVsaW5l4oCcINC90LjRmNC1INC90LDRktC10L0uXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCittc2dzdHIgItCT0KDQldCo0JrQkDog0YbQtdCy0L7QstC+0LQg0L3QtSDQttC10LvQuCDQtNCwINC/0YPRgdGC0LguXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHByZXJvbGwuXG4iCittc2dzdHIgItCT0KDQldCo0JrQkDog0YbQtdCy0L7QstC+0LQg0L3QtSDQttC10LvQuCDQtNCwINC/0YPRgdGC0LguXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMRUQgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIgorbXNnc3RyICLQk9Cg0JXQqNCa0JA6INGG0LXQstC+0LLQvtC0INC90LUg0LbQtdC70Lgg0LTQsCDQv9GD0YHRgtC4LlxuIgorCittc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gRm9yY2luZyBFT1Mgb24gdGhlIHBpcGVsaW5lXG4iCittc2dzdHIgIiIKKworbXNnaWQgIldhaXRpbmcgZm9yIEVPUy4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJFT1MgcmVjZWl2ZWQgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJBbiBlcnJvciBoYXBwZW5lZCB3aGlsZSB3YWl0aW5nIGZvciBFT1NcbiIKK21zZ3N0ciAiIgorCittc2dpZCAiRXhlY3V0aW9uIGVuZGVkIGFmdGVyICUiCittc2dzdHIgIiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUkVBRFkgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCAuLi5cbiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIkZyZWVpbmcgcGlwZWxpbmUgLi4uXG4iCittc2dzdHIgItCf0L7QutGA0LXRm9C10Lwg0YbQtdCy0L7QstC+0LQuLi5cbiIKKworI34gbXNnaWQgIlVzYWdlOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLiBdXG4iCisjfiBtc2dzdHIgIiIKKyN+ICLQo9C/0L7RgtGA0LXQsdCwOiBnc3QteG1sbGF1bmNoIDzQtNCw0YLQvtGC0LXQutCwLnhtbD4gWyDQtdC70LXQvNC10L3Rgi7QvtGB0L7QsdC40L3QsD3QstGA0LXQtNC90L7RgdGCIC4uLiBdXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogcGFyc2Ugb2YgeG1sIGZpbGUgJyVzJyBmYWlsZWQuXG4iCisjfiBtc2dzdHIgItCT0KDQldCo0JrQkDog0L3QtdGD0YHQv9C10YjQvdC+INGA0LDRiNGH0LvQsNGa0LjQstCw0ZrQtSB4bWwg0LTQsNGC0L7RgtC10LrQtSDigJ4lc+KAnC5cbiIKKworI34gbXNnaWQgIkVSUk9SOiBubyB0b3BsZXZlbCBwaXBlbGluZSBlbGVtZW50IGluIGZpbGUgJyVzJy5cbiIKKyN+IG1zZ3N0ciAi0JPQoNCV0KjQmtCQOiDQvdC10LzQsCDQstGA0YXQvtCy0L3QvtCzINC10LvQtdC80LXQvdGC0LAg0YbQtdCy0L7QstC+0LTQsCDRgyDQtNCw0YLQvtGC0LXRhtC4IOKAniVz4oCcLlxuIgorCisjLCBmdXp6eQorI34gbXNnaWQgIldBUk5JTkc6IG9ubHkgb25lIHRvcGxldmVsIGVsZW1lbnQgaXMgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS5cbiIKKyN+IG1zZ3N0ciAi0KPQn9Ce0JfQntCg0JXQitCVOiDRgtGA0LXQvdGD0YLQvdC+INGY0LUg0L/QvtC00YDQttCw0L0g0YHQsNC80L4g0ZjQtdC00LDQvSDQstGA0YXQvtCy0L3QuCDQtdC70LXQvNC10L3Rgi4iCisKKyN+IG1zZ2lkICJFUlJPUjogY291bGQgbm90IHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAlZDogJXMuXG4iCisjfiBtc2dzdHIgItCT0KDQldCo0JrQkDog0L3QtSDQvNC+0LPRgyDQtNCwINGA0LDRiNGH0LvQsNC90LjQvCAlZC4g0LDRgNCz0YPQvNC10L3RgiDQvdCw0YDQtdC00LHQtTogJXMuXG4iCisKKyN+IG1zZ2lkICJXQVJOSU5HOiBlbGVtZW50IG5hbWVkICclcycgbm90IGZvdW5kLlxuIgorI34gbXNnc3RyICLQo9Cf0J7Ql9Ce0KDQldCK0JU6INC10LvQtdC80LXQvdGCINGB0LAg0LjQvNC10L3QvtC8IOKAniVz4oCcINC90LjRmNC1INC90LDRktC10L0uXG4iCisKKyN+IG1zZ2lkICJTYXZlIHhtbCByZXByZXNlbnRhdGlvbiBvZiBwaXBlbGluZSB0byBGSUxFIGFuZCBleGl0IgorI34gbXNnc3RyICLQodCw0YfRg9Cy0LDRmCB4bWwg0L7QsdC70LjQuiDRhtC10LLQvtCy0L7QtNCwINGDINCU0JDQotCe0KLQldCa0KMg0Lgg0LfQsNCy0YDRiNC4IgorCisjfiBtc2dpZCAiRklMRSIKKyN+IG1zZ3N0ciAi0JTQkNCi0J7QotCV0JrQkCIKKworIywgZnV6enkKKyN+IG1zZ2lkICJEbyBub3QgaW5zdGFsbCBzaWduYWwgaGFuZGxlcnMgZm9yIFNJR1VTUjEgYW5kIFNJR1VTUjIiCisjfiBtc2dzdHIgItCd0LUg0L/QvtGB0YLQsNCy0ZnQsNGYINGA0YPQutC+0LLQsNC+0YbQsCDQs9GA0LXRiNC60LDQvNCwIgorCisjfiBtc2dpZCAiRGlzYWJsZSBhY2NlbGVyYXRlZCBDUFUgaW5zdHJ1Y3Rpb25zIgorI34gbXNnc3RyICLQmNGB0LrRmdGD0YfQuCDRg9Cx0YDQt9Cw0L3QtSDQuNC90YHRgtGA0YPQutGG0LjRmNC1INC/0YDQvtGG0LXRgdC+0YDQsCIKKworI34gbXNnaWQgIlNDSEVEVUxFUiIKKyN+IG1zZ3N0ciAi0KDQkNCh0J/QntCg0JXQgtCY0JLQkNCnIgorCisjfiBtc2dpZCAiUmVnaXN0cnkgdG8gdXNlIgorI34gbXNnc3RyICLQmtC+0YDQuNGB0YLQuCDRgNC10LPQuNGB0YLQsNGAIgorCisjfiBtc2dpZCAiUkVHSVNUUlkiCisjfiBtc2dzdHIgItCg0JXQk9CY0KHQotCQ0KAiCisKKyN+IG1zZ2lkICJwYXRoIGxpc3QgZm9yIGxvYWRpbmcgcGx1Z2lucyAoc2VwYXJhdGVkIGJ5ICclcycpIgorI34gbXNnc3RyICLRgdC/0LjRgdCw0Log0L/Rg9GC0LDRmtCwINC30LAg0YPRh9C40YLQsNCy0LDRmtC1INC00L7QtNCw0YLQsNC60LAgKNGA0LDQt9C00LLQvtGY0LXQvdC40YUg0YHQsCAnJXMnKSIKKworI34gbXNnaWQgIlNjaGVkdWxlciB0byB1c2UgKGRlZmF1bHQgaXMgJyVzJykiCisjfiBtc2dzdHIgItCa0L7RgNC40YHRgtC4INGA0LDRgdC/0L7RgNC10ZLQuNCy0LDRhyAo0L/QvtC00YDQsNC30YPQvNC10LLQsCDRgdC1ICclcycpIgorCisjfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkLiAgRmlsZSBhIGJ1Zy4iCisjfiBtc2dzdHIgIiIKKyN+ICLQo9C90YPRgtGA0LDRiNGa0LAg0LPRgNC10YjQutCwINGDINCT0KHRgtGA0LjQvNC10YDRgzog0L3QtdGD0YHQv9C10YjQvdCwINC/0YDQvtC80LXQvdCwINGB0YLQsNGa0LAuICDQn9GA0LjRmNCw0LLQuNGC0LUg0LPRgNC10YjQutGDLiIKKworI34gbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2NoZWR1bGVyIHByb2JsZW0uICBGaWxlIGEgYnVnLiIKKyN+IG1zZ3N0ciAiIgorI34gItCj0L3Rg9GC0YDQsNGI0ZrQsCDQs9GA0LXRiNC60LAg0YMg0JPQodGC0YDQuNC80LXRgNGDOiDQvdC10L/RgNC40LvQuNC60LAg0YHQsCDRgNCw0YHQv9C+0YDQtdGS0LjQstCw0YfQtdC8LiAg0J/RgNC40ZjQsNCy0LjRgtC1ICIKKyN+ICLQs9GA0LXRiNC60YMuIgorCisjfiBtc2dpZCAib3JpZ2luYWwgbG9jYXRpb24gb2YgZmlsZSBhcyBhIFVSSSIKKyN+IG1zZ3N0ciAi0LjQt9Cy0L7RgNC90Lgg0L/QvtC70L7QttCw0Zgg0LTQsNGC0L7RgtC10LrQtSDQutCw0L4g0LDQtNGA0LXRgdCwIgorCisjfiBtc2dpZCAiVGhlcmUgaXMgbm8gZWxlbWVudCBwcmVzZW50IHRvIGhhbmRsZSB0aGUgc3RyZWFtJ3MgbWltZSB0eXBlICVzLiIKKyN+IG1zZ3N0ciAi0J3QuNGY0LUg0L/RgNC40YHRg9GC0LDQvSDQtdC70LXQvNC10L3RgiDQt9CwINCx0LDRgNCw0YLQsNGa0LUg0YLQvtC60L7QvCDQnNCY0JzQlSDQstGA0YHRgtC1ICVzLiIKKworI34gbXNnaWQgIiIKKyN+ICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJXMgaXRlcmF0aW9ucyAoc3VtICVzIG5zLCBhdmVyYWdlICVzIG5zLCBtaW4gJXMgbnMsICIKKyN+ICJtYXggJXMgbnMpLlxuIgorI34gbXNnc3RyICIiCisjfiAi0JjQt9Cy0YDRiNCw0LLQsNGa0LUg0LfQsNCy0YDRiNC10L3QviDQvdCw0LrQvtC9ICVzINC/0L7QutGD0YjQsNGY0LAgKNC30LHQuNGAICVzIG5zLCDQv9GA0L7RgdC10LogJXMgbnMsINC80LjQvSAlcyAiCisjfiAibnMsINC80LDQutGBICVzIG5zKS5cbiIKKworI34gbXNnaWQgIk51bWJlciBvZiB0aW1lcyB0byBpdGVyYXRlIHBpcGVsaW5lIgorI34gbXNnc3RyICLQkdGA0L7RmCDQv9C+0LrRg9GI0LDRmNCwINC/0YPRiNGC0LDRmtCwINGG0LXQstC+0LLQvtC00LAiCisKKyN+IG1zZ2lkICIgICAgICAgICBUcnlpbmcgdG8gcnVuIGFueXdheS5cbiIKKyN+IG1zZ3N0ciAiICAgICAgICAg0JjQv9Cw0Log0L/QvtC60YPRiNCw0LLQsNC8INC00LAg0L/QvtC60YDQtdC90LXQvC5cbiIKKworI34gbXNnaWQgIkFkZGVkIHBsdWdpbiAlcyB3aXRoICVkICVzLlxuIgorI34gbXNnc3RyICLQn9GA0LjQtNC+0LTQsNGCINC00L7QtNCw0YLQsNC6ICVzINGB0LAgJWQgJXMuXG4iCisKKyN+IG1zZ2lkICJBZGRlZCBwYXRoICAgJXMgdG8gJXMgXG4iCisjfiBtc2dzdHIgItCU0L7QtNCw0L4g0L/Rg9GC0LDRmtGDICVzINC60LAgJXMgXG4iCisKKyN+IG1zZ2lkICJSZWJ1aWxkaW5nICVzICglcykgLi4uXG4iCisjfiBtc2dzdHIgItCe0LHQvdCw0LLRmdCw0LwgJXMgKCVzKSAuLi5cbiIKKworI34gbXNnaWQgIlRyeWluZyB0byBsb2FkICVzIC4uLlxuIgorI34gbXNnc3RyICLQn9C+0LrRg9GI0LDQstCw0Lwg0LTQsCDRg9GH0LjRgtCw0LwgJXMgLi4uXG4iCisKKyN+IG1zZ2lkICJFcnJvciBsb2FkaW5nICVzXG4iCisjfiBtc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0YPRh9C40YLQsNCy0LDRmtGDINC00LDRgtC+0YLQtdC60LUg4oCeJXPigJwuXG4iCisKKyN+IG1zZ2lkICJMb2FkZWQgJWQgcGx1Z2lucyB3aXRoICVkICVzLlxuIgorI34gbXNnc3RyICLQo9GH0LjRgtCw0L3QviAlZCDQtNC+0LTQsNGC0LDQutCwINGB0LAgJWQgJXMuXG4iCmRpZmYgLS1naXQgYS9wby9zdGFtcC1wbyBiL3BvL3N0YW1wLXBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ODhmNzAKLS0tIC9kZXYvbnVsbAorKysgYi9wby9zdGFtcC1wbwpAQCAtMCwwICsxIEBACit0aW1lc3RhbXAKZGlmZiAtLWdpdCBhL3BvL3N2LmdtbyBiL3BvL3N2LmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTZhOWY1Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vc3YuZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL3N2LnBvIGIvcG8vc3YucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAyOGY4YgotLS0gL2Rldi9udWxsCisrKyBiL3BvL3N2LnBvCkBAIC0wLDAgKzEsMTI2OCBAQAorIyBTd2VkaXNoIG1lc3NhZ2VzIGZvciBnc3RyZWFtZXIuCisjIENvcHlyaWdodCAoQykgMjAwNC0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ3N0cmVhbWVyIHBhY2thZ2UuCisjIENocmlzdGlhbiBSb3NlIDxtZW50aG9zQG1lbnRob3MuY29tPiwgMjAwNCwgMjAwNS4KKyMgRGFuaWVsIE55bGFuZGVyIDxwb0BkYW5pZWxueWxhbmRlci5zZT4sIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnc3RyZWFtZXIgMC4xMC4zMS4yXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDktMjkgMTQ6NTUrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTEtMDEtMDkgMTk6NDYrMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogRGFuaWVsIE55bGFuZGVyIDxwb0BkYW5pZWxueWxhbmRlci5zZT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBTd2VkaXNoIDx0cC1zdkBsaXN0b3IudHAtc3Yuc2U+XG4iCisiTGFuZ3VhZ2U6IHN2XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKK21zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCittc2dzdHIgIlNrcml2IHV0IEdzdHJlYW1lci12ZXJzaW9uZW4iCisKK21zZ2lkICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKK21zZ3N0ciAiR8O2ciBhbGxhIHZhcm5pbmdhciDDtmRlc2RpZ3JhIgorCittc2dpZCAiUHJpbnQgYXZhaWxhYmxlIGRlYnVnIGNhdGVnb3JpZXMgYW5kIGV4aXQiCittc2dzdHIgIlNrcml2IHV0IHRpbGxnw6RuZ2xpZ2EgZmVsc8O2a25pbmdza2F0ZWdvcmllciBvY2ggYXZzbHV0YSIKKworbXNnaWQgIiIKKyJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gNSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKK21zZ3N0ciAiIgorIlN0YW5kYXJkZmVsc8O2a25pbmdzbml2w6UgZnLDpW4gMSAoZW5kYXN0IGZlbCkgdGlsbCA1IChhbGx0aW5nKSBlbGxlciAwIGbDtnIgIgorImluZ2VuIHV0bWF0bmluZyIKKworbXNnaWQgIkxFVkVMIgorbXNnc3RyICJOSVbDhSIKKworbXNnaWQgIiIKKyJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yICIKKyJ0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCittc2dzdHIgIiIKKyJLb21tYXNlcGFyZXJhZCBsaXN0YSBtZWQga2F0ZWdvcmluYW1uOm5pdsOlLXBhciBmw7ZyIGF0dCBzdMOkbGxhIGluIHNwZWNpZmlrYSAiCisibml2w6VlciBmw7ZyIGRlIGVuc2tpbGRhIGthdGVnb3JpZXJuYS4gRXhlbXBlbDogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgorCittc2dpZCAiTElTVCIKK21zZ3N0ciAiTElTVEEiCisKK21zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKK21zZ3N0ciAiSW5ha3RpdmVyYSBmw6RyZ2xhZ2QgZmVsc8O2a25pbmdzdXRtYXRuaW5nIgorCittc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCittc2dzdHIgIkluYWt0aXZlcmEgZmVsc8O2a25pbmciCisKK21zZ2lkICJFbmFibGUgdmVyYm9zZSBwbHVnaW4gbG9hZGluZyBkaWFnbm9zdGljcyIKK21zZ3N0ciAiQWt0aXZlcmEgdXRmw7ZybGlnIGRpYWdub3N0aWsgdmlkIGlubMOkc25pbmcgYXYgaW5zdGlja3Ntb2R1bGVyIgorCittc2dpZCAiQ29sb24tc2VwYXJhdGVkIHBhdGhzIGNvbnRhaW5pbmcgcGx1Z2lucyIKK21zZ3N0ciAiS29sb25zZXBhcmVyYWRlIHPDtmt2w6RnYXIgc29tIGlubmVow6VsbGVyIGluc3RpY2tzbW9kdWxlciIKKworbXNnaWQgIlBBVEhTIgorbXNnc3RyICJTw5ZLVsOER0FSIgorCittc2dpZCAiIgorIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgorImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKK21zZ3N0ciAiIgorIktvbW1hc2VwYXJlcmFkIGxpc3RhIG1lZCBpbnN0aWNrc21vZHVsZXIgYXR0IGbDtnJoYW5kc2lubMOkc2EgdXTDtnZlciBsaXN0YW4gIgorInNvbSBsYWdyYXMgaSBtaWxqw7Z2YXJpYWJlbG4gR1NUX1BMVUdJTl9QQVRIIgorCittc2dpZCAiUExVR0lOUyIKK21zZ3N0ciAiSU5TVElDS1NNT0RVTEVSIgorCittc2dpZCAiRGlzYWJsZSB0cmFwcGluZyBvZiBzZWdtZW50YXRpb24gZmF1bHRzIGR1cmluZyBwbHVnaW4gbG9hZGluZyIKK21zZ3N0ciAiIgorIkluYWt0aXZlcmEgZsOlbmdzdCBhdiBzZWdtZW50ZXJpbmdzZmVsIHVuZGVyIGlubMOkc25pbmcgYXYgaW5zdGlja3Ntb2R1bGVyIgorCittc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIkluYWt0aXZlcmEgdXBwZGF0ZXJpbmcgYXYgcmVnaXN0cmV0IgorCittc2dpZCAiRGlzYWJsZSBzcGF3bmluZyBhIGhlbHBlciBwcm9jZXNzIHdoaWxlIHNjYW5uaW5nIHRoZSByZWdpc3RyeSIKK21zZ3N0ciAiSW5ha3RpdmVyYSBzdGFydCBhdiBlbiBoasOkbHBwcm9jZXNzIHZpZCBhdnPDtmtuaW5nIGF2IHJlZ2lzdHJldCIKKworbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgorbXNnc3RyICJHU3RyZWFtZXItYWx0ZXJuYXRpdiIKKworbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgIlZpc2EgR1N0cmVhbWVyLWFsdGVybmF0aXYiCisKK21zZ2lkICJVbmtub3duIG9wdGlvbiIKK21zZ3N0ciAiT2vDpG50IGFsdGVybmF0aXYiCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIGNvcmUgbGlicmFyeSBlcnJvci4iCittc2dzdHIgIkdTdHJlYW1lciBzdMO2dHRlIHDDpSBldHQgYWxsbcOkbnQgZmVsIGkga8Okcm5iaWJsaW90ZWsuIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyBlcnJvci4iCittc2dzdHIgIiIKKyJVdHZlY2tsYXJuYSBhdiBHU3RyZWFtZXIgdmFyIGbDtnIgbGF0YSBmw7ZyIGF0dCB0aWxsZGVsYSBkZXR0YSBmZWwgZXR0ICIKKyJmZWxudW1tZXIuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjb2RlIG5vdCBpbXBsZW1lbnRlZC4iCittc2dzdHIgIkludGVybnQgR1N0cmVhbWVyLWZlbDoga29kZW4gaW50ZSBpbXBsZW1lbnRlcmFkLiIKKworbXNnaWQgIiIKKyJHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQgYW5kIHNvbWUgZWxlbWVudCBmYWlsZWQgdG8gcG9zdCBhICIKKyJwcm9wZXIgZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLiIKK21zZ3N0ciAiIgorIkdTdHJlYW1lci1mZWw6IHRpbGxzdMOlbmRzw6RuZHJpbmcgbWlzc2x5Y2thZGVzIG9jaCBuw6VncmEgZWxlbWVudCBtaXNzbHlja2FkZXMgIgorIm1lZCBhdHQgc2tpY2thIGV0dCBrb3JyZWt0IGZlbG1lZGRlbGFuZGUgbWVkIGFubGVkbmluZ2VuIHRpbGwgZmVsZXQuIgorCisjIFJpY2hhcmQgSHVsdCBzw6RnZXI6ICJQYWQiIGkgZ3N0cmVhbWVyIGJldHlkZXIgdW5nZWbDpHIgImtvbnRha3QiLCBtYW4KKyMga29wcGxhciBpaG9wIHR2w6UgZWxlbWVudCB2aWEgZGVyYXMgInBhZHMiLgorbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogcGFkIHByb2JsZW0uIgorbXNnc3RyICJJbnRlcm50IEdTdHJlYW1lci1mZWw6IGtvbnRha3Rwcm9ibGVtLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGhyZWFkIHByb2JsZW0uIgorbXNnc3RyICJJbnRlcm50IEdTdHJlYW1lci1mZWw6IHRyw6VkcHJvYmxlbS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uIgorbXNnc3RyICJJbnRlcm50IEdTdHJlYW1lci1mZWw6IGbDtnJoYW5kbGluZ3Nwcm9ibGVtLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogZXZlbnQgcHJvYmxlbS4iCittc2dzdHIgIkludGVybnQgR1N0cmVhbWVyLWZlbDogaMOkbmRlbHNlcHJvYmxlbS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4iCittc2dzdHIgIkludGVybnQgR1N0cmVhbWVyLWZlbDogc3BvbG5pbmdzcHJvYmxlbS4iCisKKyMgT3PDpGtlci4gSmFnIHRyb3IgImNhcHMiIMOkciBrb3J0IGbDtnIgImNhcGFiaWxpdGllcyIuCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgorbXNnc3RyICJJbnRlcm50IEdTdHJlYW1lci1mZWw6IGbDtnJtw6VnZXByb2JsZW0uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4iCittc2dzdHIgIkludGVybnQgR1N0cmVhbWVyLWZlbDogdGFnZ3Byb2JsZW0uIgorCittc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKK21zZ3N0ciAiRGluIEdTdHJlYW1lci1pbnN0YWxsYXRpb24gc2FrbmFyIGVuIGluc3RpY2tzbW9kdWwuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKK21zZ3N0ciAiSW50ZXJudCBHU3RyZWFtZXItZmVsOiBrbG9ja3Byb2JsZW0uIgorCittc2dpZCAiIgorIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGhhcyBiZWVuICIKKyJkaXNhYmxlZC4iCittc2dzdHIgIiIKKyJEZXQgaMOkciBwcm9ncmFtbWV0IGbDtnJzw7ZrZXIgYW52w6RuZGEgR1N0cmVhbWVyLWZ1bmt0aW9uYWxpdGV0IHNvbSBoYXIgIgorImluYWt0aXZlcmF0cy4iCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN1cHBvcnRpbmcgbGlicmFyeSBlcnJvci4iCittc2dzdHIgIkdTdHJlYW1lciBzdMO2dHRlIHDDpSBldHQgYWxsbcOkbnQgZmVsIGkgc3TDtmRiaWJsaW90ZWsuIgorCittc2dpZCAiQ291bGQgbm90IGluaXRpYWxpemUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBpbml0aWVyYSBzdMO2ZGJpYmxpb3Rlay4iCisKK21zZ2lkICJDb3VsZCBub3QgY2xvc2Ugc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBzdMOkbmdhIHN0w7ZkYmlibGlvdGVrLiIKKworbXNnaWQgIkNvdWxkIG5vdCBjb25maWd1cmUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBrb25maWd1cmVyYSBzdMO2ZGJpYmxpb3Rlay4iCisKK21zZ2lkICJFbmNvZGluZyBlcnJvci4iCittc2dzdHIgIktvZG5pbmdzZmVsLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIgc3TDtnR0ZSBww6UgZXR0IGFsbG3DpG50IHJlc3Vyc2ZlbC4iCisKK21zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgorbXNnc3RyICJSZXN1cnNlbiBrdW5kZSBpbnRlIGhpdHRhcy4iCisKK21zZ2lkICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgorbXNnc3RyICJSZXN1cnNlbiB1cHB0YWdlbiBlbGxlciBpbnRlIHRpbGxnw6RuZ2xpZy4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCittc2dzdHIgIkt1bmRlIGludGUgw7ZwcG5hIHJlc3Vyc2VuIGbDtnIgbMOkc25pbmcuIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJLdW5kZSBpbnRlIMO2cHBuYSByZXN1cnNlbiBmw7ZyIHNrcml2bmluZy4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCittc2dzdHIgIkt1bmRlIGludGUgw7ZwcG5hIHJlc3Vyc2VuIGbDtnIgbMOkc25pbmcgb2NoIHNrcml2bmluZy4iCisKK21zZ2lkICJDb3VsZCBub3QgY2xvc2UgcmVzb3VyY2UuIgorbXNnc3RyICJLdW5kZSBpbnRlIHN0w6RuZ2EgcmVzdXJzZW4uIgorCittc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCittc2dzdHIgIkt1bmRlIGludGUgbMOkc2EgZnLDpW4gcmVzdXJzZW4uIgorCittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBza3JpdmEgdGlsbCByZXN1cnNlbi4iCisKK21zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSB1dGbDtnJhIHNwb2xuaW5nIHDDpSByZXN1cnNlbi4iCisKK21zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgorbXNnc3RyICJLdW5kZSBpbnRlIHN5bnJvbmlzZXJhIHDDpSByZXN1cnNlbi4iCisKK21zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBow6RtdGEvc3TDpGxsYSBpbiBpbnN0w6RsbG5pbmdhciBmcsOlbi9ww6UgcmVzdXJzZW4uIgorCittc2dpZCAiTm8gc3BhY2UgbGVmdCBvbiB0aGUgcmVzb3VyY2UuIgorbXNnc3RyICJJbmdldCBsZWRpZ3QgdXRyeW1tZSBww6UgcmVzdXJzZW4uIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdHJlYW0gZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIgc3TDtnR0ZSBww6UgZXR0IGFsbG3DpG50IHN0csO2bWZlbC4iCisKK21zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCittc2dzdHIgIiIKKyJFbGVtZW50ZXQgc3TDtmRlciBpbnRlIGhhbnRlcmluZyBhdiBkZW5uYSBzdHLDtm0uIFNraWNrYSBnw6RybmEgaW4gZW4gIgorImZlbHJhcHBvcnQuIgorCittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCittc2dzdHIgIkt1bmRlIGludGUgZmFzdHN0w6RsbGEgdHlwZW4gYXYgc3Ryw7ZtLiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKK21zZ3N0ciAiU3Ryw7ZtbWVuIMOkciBhdiBlbiBhbm5hbiB0eXAgw6RuIGRlbiBzb20gaGFudGVyYXMgYXYgZGV0dGEgZWxlbWVudC4iCisKK21zZ2lkICJUaGVyZSBpcyBubyBjb2RlYyBwcmVzZW50IHRoYXQgY2FuIGhhbmRsZSB0aGUgc3RyZWFtJ3MgdHlwZS4iCittc2dzdHIgIkRldCBmaW5ucyBpbmdlbiBvbWtvZGFyZSBzb20ga2FuIGhhbnRlcmEgZGVubmEgc3Ryw7ZtdHlwLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZWNvZGUgc3RyZWFtLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBhdmtvZGEgc3Ryw7ZtLiIKKworbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBrb2RhIHN0csO2bS4iCisKK21zZ2lkICJDb3VsZCBub3QgZGVtdWx0aXBsZXggc3RyZWFtLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBhdm11bHRpcGxleGVyYSBzdHLDtm0uIgorCittc2dpZCAiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIgorbXNnc3RyICJLdW5kZSBpbnRlIG11bHRpcGxleGVyYSBzdHLDtm0uIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiIKK21zZ3N0ciAiU3Ryw7ZtbWVuIMOkciBhdiBmZWwgZm9ybWF0LiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBkZWNyeXB0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIgorbXNnc3RyICJTdHLDtm1tZW4gw6RyIGtyeXB0ZXJhZCBvY2ggZGVrcnlwdGVyaW5nIHN0w7ZkcyBpbnRlLiIKKworbXNnaWQgIiIKKyJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgY2FuJ3QgYmUgZGVjcnlwdGVkIGJlY2F1c2Ugbm8gc3VpdGFibGUga2V5IGhhcyAiCisiYmVlbiBzdXBwbGllZC4iCittc2dzdHIgIiIKKyJTdHLDtm1tZW4gw6RyIGtyeXB0ZXJhZCBvY2gga2FuIGludGUgZGVrcnlwdGVyYXMgZMOkcmbDtnIgYXR0IGRldCBpbnRlIGZpbm5zIGVuICIKKyJsw6RtcGxpZyBueWNrZWwuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCittc2dzdHIgIkluZ2V0IGZlbG1lZGRlbGFuZGUgZsO2ciBkb23DpG5lbiAlcy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKK21zZ3N0ciAiSW5nZXQgc3RhbmRhcmRmZWxtZWRkZWxhbmRlIGbDtnIgZG9tw6RuZW4gJXMgb2NoIGtvZGVuICVkLiIKKworbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKK21zZ3N0ciAiVmFsZCBrbG9ja2Ega2FuIGludGUgYW52w6RuZGFzIGkgcsO2cmxlZG5pbmcuIgorCittc2dpZCAidGl0bGUiCittc2dzdHIgInRpdGVsIgorCittc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKK21zZ3N0ciAidmFubGlndHZpcyBhbnbDpG5kIHRpdGVsIgorCittc2dpZCAidGl0bGUgc29ydG5hbWUiCittc2dzdHIgInNvcnRlcmluZ3NuYW1uIGbDtnIgdGl0ZWwiCisKK21zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJ2YW5saWdlbiBhbnbDpG5kIHRpdGVsIGbDtnIgc29ydGVyaW5nc8OkbmRhbcOlbCIKKworbXNnaWQgImFydGlzdCIKK21zZ3N0ciAiYXJ0aXN0IgorCittc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIgorbXNnc3RyICJwZXJzb24oZXIpIHNvbSBhbnN2YXJhciBmw7ZyIGluc3BlbG5pbmdlbiIKKworbXNnaWQgImFydGlzdCBzb3J0bmFtZSIKK21zZ3N0ciAic29ydGVyaW5nc25hbW4gZsO2ciBhcnRpc3QiCisKK21zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgInBlcnNvbihlcikgc29tIGFuc3ZhcmFyIGbDtnIgaW5zcGVsbmluZ2VuIGbDtnIgc29ydGVyaW5nc8OkbmRhbcOlbCIKKworbXNnaWQgImFsYnVtIgorbXNnc3RyICJhbGJ1bSIKKworbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgorbXNnc3RyICJhbGJ1bSBzb20gaW5uZWjDpWxsZXIgZGVzc2EgZGF0YSIKKworbXNnaWQgImFsYnVtIHNvcnRuYW1lIgorbXNnc3RyICJzb3J0ZXJpbmdzbmFtbiBmw7ZyIGFsYnVtIgorCittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgImFsYnVtIHNvbSBpbm5laMOlbGxlciBkZXNzYSBkYXRhIGbDtnIgc29ydGVyaW5nc8OkbmRhbcOlbCIKKworbXNnaWQgImFsYnVtIGFydGlzdCIKK21zZ3N0ciAiYWxidW1hcnRpc3QiCisKK21zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQiCittc2dzdHIgIkFydGlzdGVuIGbDtnIgaGVsYSBhbGJ1bWV0LCBzb20gZGV0IHNrYSB2aXNhcyIKKworbXNnaWQgImFsYnVtIGFydGlzdCBzb3J0bmFtZSIKK21zZ3N0ciAic29ydGVyaW5nc25hbW4gZsO2ciBhbGJ1bWFydGlzdCIKKworbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCIKK21zZ3N0ciAiQXJ0aXN0ZW4gZsO2ciBoZWxhIGFsYnVtZXQsIHNvbSBkZXQgc2thIHNvcnRlcmFzIgorCittc2dpZCAiZGF0ZSIKK21zZ3N0ciAiZGF0dW0iCisKK21zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCittc2dzdHIgImRhdHVtIGTDpSBkZXNzYSBkYXRhIHNrYXBhZGVzIChzb20gZW4gR0RhdGUtc3RydWt0dXIpIgorCittc2dpZCAiZGF0ZXRpbWUiCittc2dzdHIgImRhdHVtdGlkIgorCittc2dpZCAiZGF0ZSBhbmQgdGltZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHc3REYXRlVGltZSBzdHJ1Y3R1cmUpIgorbXNnc3RyICJkYXR1bSBvY2ggdGlkIGTDpSBkZXNzYSBkYXRhIHNrYXBhZGVzIChzb20gZW4gR3N0RGF0ZVRpbWUtc3RydWt0dXIpIgorCittc2dpZCAiZ2VucmUiCittc2dzdHIgImdlbnJlIgorCittc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCittc2dzdHIgImdlbnJlIHNvbSBkZXNzYSBkYXRhIHRpbGxow7ZyIgorCittc2dpZCAiY29tbWVudCIKK21zZ3N0ciAia29tbWVudGFyIgorCittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCittc2dzdHIgImZyaSB0ZXh0IHNvbSBrb21tZW50ZXJhciBkZXNzYSBkYXRhIgorCittc2dpZCAiZXh0ZW5kZWQgY29tbWVudCIKK21zZ3N0ciAidXTDtmthZCBrb21tZW50YXIiCisKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCittc2dzdHIgIiIKKyJmcmkgdGV4dCBzb20ga29tbWVudGVyYXIgZGVzc2EgZGF0YSBpIGZvcm1hdGV0IGtleT12w6RyZGUgZWxsZXIga2V5W3N2XSIKKyI9a29tbWVudGFyIgorCittc2dpZCAidHJhY2sgbnVtYmVyIgorbXNnc3RyICJzcMOlcm51bW1lciIKKworbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICJzcMOlcm51bW1lciBpbnV0aSBlbiBzYW1saW5nIgorCittc2dpZCAidHJhY2sgY291bnQiCittc2dzdHIgInNww6VyYW50YWwiCisKK21zZ2lkICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgorbXNnc3RyICJhbnRhbCBzcMOlciBpbnV0aSBkZW4gc2FtbGluZyBzb20gZGV0dGEgc3DDpXIgdGlsbGjDtnIiCisKK21zZ2lkICJkaXNjIG51bWJlciIKK21zZ3N0ciAic2tpdm51bW1lciIKKworbXNnaWQgImRpc2MgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgInNraXZudW1tZXIgaW51dGkgZW4gc2FtbGluZyIKKworbXNnaWQgImRpc2MgY291bnQiCittc2dzdHIgInNraXZhbnRhbCIKKworbXNnaWQgImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIgorbXNnc3RyICJhbnRhbCBza2l2b3IgaW51dGkgZGVuIHNhbWxpbmcgc29tIGRlbm5hIHNraXZhIHRpbGxow7ZyIgorCittc2dpZCAibG9jYXRpb24iCittc2dzdHIgInBsYXRzIgorCittc2dpZCAiIgorIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgorImlzIGhvc3RlZCkiCittc2dzdHIgIiIKKyJVcnNwcnVuZ2V0IGbDtnIgbWVkaWV0IHNvbSBlbiBVUkkgKHBsYXRzIGTDpHIgZGVuIHVyc3BydW5nbGlnYSBmaWxlbiBlbGxlciAiCisic3Ryw7ZtbWVuIGZpbm5zKSIKKworbXNnaWQgImhvbWVwYWdlIgorbXNnc3RyICJ3ZWJic2lkYSIKKworbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCittc2dzdHIgIldlYmJzaWRhIGbDtnIgZGV0dGEgbWVkaWEgKGFsbHRzw6Ugd2ViYnNpZGFuIGbDtnIgYXJ0aXN0ZW4gZWxsZXIgZmlsbWVuKSIKKworbXNnaWQgImRlc2NyaXB0aW9uIgorbXNnc3RyICJiZXNrcml2bmluZyIKKworbXNnaWQgInNob3J0IHRleHQgZGVzY3JpYmluZyB0aGUgY29udGVudCBvZiB0aGUgZGF0YSIKK21zZ3N0ciAia29ydCB0ZXh0IHNvbSBiZXNrcml2ZXIgaW5uZWjDpWxsZXQgYXYgZGVzc2EgZGF0YSIKKworbXNnaWQgInZlcnNpb24iCittc2dzdHIgInZlcnNpb24iCisKK21zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKK21zZ3N0ciAidmVyc2lvbiBhdiBkZXNzYSBkYXRhIgorCittc2dpZCAiSVNSQyIKK21zZ3N0ciAiSVNSQyIKKworbXNnaWQgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKK21zZ3N0ciAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCisKK21zZ2lkICJvcmdhbml6YXRpb24iCittc2dzdHIgIm9yZ2FuaXNhdGlvbiIKKworbXNnaWQgImNvcHlyaWdodCIKK21zZ3N0ciAiY29weXJpZ2h0IgorCittc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiY29weXJpZ2h0bm90aXMgZsO2ciBkZXNzYSBkYXRhIgorCittc2dpZCAiY29weXJpZ2h0IHVyaSIKK21zZ3N0ciAiVXJpIHRpbGwgY29weXJpZ2h0bm90aXMiCisKK21zZ2lkICJVUkkgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgIlVyaSB0aWxsIGNvcHlyaWdodG5vdGlzIGbDtnIgZGF0YXQiCisKKyMsIGZ1enp5Cittc2dpZCAiZW5jb2RlZCBieSIKK21zZ3N0ciAia29kYXJlIgorCittc2dpZCAibmFtZSBvZiB0aGUgZW5jb2RpbmcgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiIKK21zZ3N0ciAiIgorCittc2dpZCAiY29udGFjdCIKK21zZ3N0ciAia29udGFrdCIKKworbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCittc2dzdHIgImtvbnRha3RpbmZvcm1hdGlvbiIKKworbXNnaWQgImxpY2Vuc2UiCittc2dzdHIgImxpY2VucyIKKworbXNnaWQgImxpY2Vuc2Ugb2YgZGF0YSIKK21zZ3N0ciAibGljZW5zIGbDtnIgZGF0YSIKKworbXNnaWQgImxpY2Vuc2UgdXJpIgorbXNnc3RyICJVcmkgZsO2ciBsaWNlbnNpbmZvcm1hdGlvbiIKKworbXNnaWQgIlVSSSB0byB0aGUgbGljZW5zZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiVXJpIHRpbGwgbGljZW5zIGbDtnIgZGF0YXQiCisKK21zZ2lkICJwZXJmb3JtZXIiCittc2dzdHIgImFrdMO2ciIKKworbXNnaWQgInBlcnNvbihzKSBwZXJmb3JtaW5nIgorbXNnc3RyICJwZXJzb24oZXIpIHNvbSBhZ2VyYXIiCisKK21zZ2lkICJjb21wb3NlciIKK21zZ3N0ciAia29tcG9zaXTDtnIiCisKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciCittc2dzdHIgInBlcnNvbihlcikgc29tIGtvbXBvbmVyYWRlIGluc3BlbG5pbmdlbiIKKworbXNnaWQgImR1cmF0aW9uIgorbXNnc3RyICJ2YXJha3RpZ2hldCIKKworbXNnaWQgImxlbmd0aCBpbiBHU3RyZWFtZXIgdGltZSB1bml0cyAobmFub3NlY29uZHMpIgorbXNnc3RyICJsw6RuZ2QgaSBHU3RyZWFtZXItdGlkc2VuaGV0ZXIgKG5hbm9zZWt1bmRlcikiCisKK21zZ2lkICJjb2RlYyIKK21zZ3N0ciAia29tcHJpbWVyaW5nc21ldG9kIgorCittc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJrb21wcmltZXJpbmdzbWV0b2Qgc29tIGRlc3NhIGRhdGEgbGFncmFzIG1lZCIKKworbXNnaWQgInZpZGVvIGNvZGVjIgorbXNnc3RyICJ2aWRlb2tvbXByaW1lcmluZ3NtZXRvZCIKKworbXNnaWQgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAia29tcHJpbWVyaW5nc21ldG9kIHNvbSBkZXNzYSB2aWRlb2RhdGEgbGFncmFzIG1lZCIKKworbXNnaWQgImF1ZGlvIGNvZGVjIgorbXNnc3RyICJsanVka29tcHJpbWVyaW5nc21ldG9kIgorCittc2dpZCAiY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJrb21wcmltZXJpbmdzbWV0b2Qgc29tIGRlc3NhIGxqdWRkYXRhIGxhZ3JhcyBtZWQiCisKK21zZ2lkICJzdWJ0aXRsZSBjb2RlYyIKK21zZ3N0ciAia29kZWsgZsO2ciB1bmRlcnRleHQiCisKK21zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImtvZGVrIHNvbSB1bmRlcnRleHRkYXRhIGxhZ3JhdHMgbWVkIgorCittc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKK21zZ3N0ciAiYmVow6VsbGFyZm9ybWF0IgorCittc2dpZCAiY29udGFpbmVyIGZvcm1hdCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImJlaMOlbGxhcmZvcm1hdGV0IHNvbSBkZXNzYSBkYXRhIGxhZ3JhcyBtZWQiCisKK21zZ2lkICJiaXRyYXRlIgorbXNnc3RyICJiaXRmcmVrdmVucyIKKworbXNnaWQgImV4YWN0IG9yIGF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgImV4YWt0IGJpdGZyZWt2ZW5zIGVsbGVyIGdlbm9tc25pdHRsaWcgYml0ZnJla3ZlbnMgaSBiaXRhci9zIgorCittc2dpZCAibm9taW5hbCBiaXRyYXRlIgorbXNnc3RyICJub21pbmVsbCBiaXRmcmVrdmVucyIKKworbXNnaWQgIm5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgIm5vbWluZWxsIGJpdGZyZWt2ZW5zIGkgYml0YXIvcyIKKworbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKK21zZ3N0ciAibWluc3RhIGJpdGZyZWt2ZW5zIgorCittc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAibWluc3RhIGJpdGZyZWt2ZW5zIGkgYml0YXIvcyIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSIKK21zZ3N0ciAiaMO2Z3N0YSBiaXRmcmVrdmVucyIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgImjDtmdzdGEgYml0ZnJla3ZlbnMgaSBiaXRhci9zIgorCittc2dpZCAiZW5jb2RlciIKK21zZ3N0ciAia29kYXJlIgorCittc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAia29kYXJlIHNvbSBhbnbDpG50cyBmw7ZyIGF0dCBrb2RhIGRlbm5hIHN0csO2bSIKKworbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKK21zZ3N0ciAia29kYXJ2ZXJzaW9uIgorCittc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAidmVyc2lvbiBhdiBrb2RhcmVuIHNvbSBhbnbDpG50cyBmw7ZyIGF0dCBrb2RhIGRlbm5hIHN0csO2bSIKKworbXNnaWQgInNlcmlhbCIKK21zZ3N0ciAic2VyaWVudW1tZXIiCisKK21zZ2lkICJzZXJpYWwgbnVtYmVyIG9mIHRyYWNrIgorbXNnc3RyICJzZXJpZW51bW1lciBmw7ZyIHNww6VyIgorCisjIE9zw6RrZXIuCittc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgorbXNnc3RyICJ1cHBzcGVsbmluZ3Nmw7Zyc3TDpHJrbmluZyBzcMOlcmbDtnJzdMOkcmtuaW5nIgorCittc2dpZCAidHJhY2sgZ2FpbiBpbiBkYiIKK21zZ3N0ciAic3DDpXJmw7Zyc3TDpHJrbmluZyBpIGRiIgorCisjIE9zw6RrZXIuCittc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBwZWFrIgorbXNnc3RyICJ1cHBzcGVsbmluZ3Nmw7Zyc3TDpHJrbmluZyBzcMOlcnRvcHAiCisKK21zZ2lkICJwZWFrIG9mIHRoZSB0cmFjayIKK21zZ3N0ciAidG9wcGVuIGbDtnIgc3DDpXJldCIKKworIyBPc8Oka2VyLgorbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKK21zZ3N0ciAidXBwc3BlbG5pbmdzZsO2cnN0w6Rya25pbmcgYWxidW1mw7Zyc3TDpHJrbmluZyIKKworbXNnaWQgImFsYnVtIGdhaW4gaW4gZGIiCittc2dzdHIgImFsYnVtZsO2cnN0w6Rya25pbmcgaSBkYiIKKworIyBPc8Oka2VyLgorbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKK21zZ3N0ciAidXBwc3BlbG5pbmdzZsO2cnN0w6Rya25pbmcgYWxidW10b3BwIgorCittc2dpZCAicGVhayBvZiB0aGUgYWxidW0iCittc2dzdHIgInRvcHBlbiBmw7ZyIGFsYnVtZXQiCisKKyMgT3PDpGtlci4KK21zZ2lkICJyZXBsYXlnYWluIHJlZmVyZW5jZSBsZXZlbCIKK21zZ3N0ciAicmVmZXJlbnNuaXbDpSBmw7ZyIHVwcHNwZWxuaW5nc2bDtnJzdMOkcmtuaW5nIgorCittc2dpZCAicmVmZXJlbmNlIGxldmVsIG9mIHRyYWNrIGFuZCBhbGJ1bSBnYWluIHZhbHVlcyIKK21zZ3N0ciAicmVmZXJlbnNuaXbDpSBmw7ZyIGbDtnJzdMOkcmtuaW5nc3bDpHJkZW4gZsO2ciBzcMOlciBvY2ggYWxidW0iCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIgorbXNnc3RyICJzcHLDpWtrb2QiCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIGZvciB0aGlzIHN0cmVhbSwgY29uZm9ybWluZyB0byBJU08tNjM5LTEiCittc2dzdHIgInNwcsOla2tvZCBmw7ZyIGRldHRhIHN0csO2bSwgZW5saWd0IElTTy02MzktMSIKKworbXNnaWQgImltYWdlIgorbXNnc3RyICJiaWxkIgorCittc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiYmlsZCByZWxhdGVyYWQgdGlsbCBkZW4gaMOkciBzdHLDtm1tZW4iCisKKyMuIFRSQU5TTEFUT1JTOiAncHJldmlldyBpbWFnZScgPSBpbWFnZSB0aGF0IHNob3dzIGEgcHJldmlldyBvZiB0aGUgZnVsbCBpbWFnZQorbXNnaWQgInByZXZpZXcgaW1hZ2UiCittc2dzdHIgImbDtnJoYW5kc3Zpc25pbmdzYmlsZCIKKworbXNnaWQgInByZXZpZXcgaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiZsO2cmhhbmRzdmlzbmluZ3NiaWxkIHJlbGF0ZXJhZCB0aWxsIGRlbiBow6RyIHN0csO2bW1lbiIKKworbXNnaWQgImF0dGFjaG1lbnQiCittc2dzdHIgImJpbGFnYSIKKworbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgImZpbCBiaWZvZ2FkIHRpbGwgZGVuIGjDpHIgc3Ryw7ZtbWVuIgorCittc2dpZCAiYmVhdHMgcGVyIG1pbnV0ZSIKK21zZ3N0ciAic2xhZyBwZXIgbWludXQiCisKK21zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKK21zZ3N0ciAiYW50YWxldCBzbGFnIHBlciBtaW51dCBpIGxqdWRldCIKKworbXNnaWQgImtleXdvcmRzIgorbXNnc3RyICJueWNrZWxvcmQiCisKK21zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKK21zZ3N0ciAia29tbWFzZXBhcmVyYWRlIG55Y2tlbG9yZCBzb20gYmVza3JpdmVyIGlubmVow6VsbGV0IgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIG5hbWUiCittc2dzdHIgImdlb2dyYWZpc2t0IHBsYXRzbmFtbiIKKworbXNnaWQgIiIKKyJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgorInByb2R1Y2VkIgorbXNnc3RyICIiCisibcOkbnNrbGlndCBsw6RzbGlnIGJlc2tyaXZhbmRlIHBsYXRzIGbDtnIgdmFyIG1lZGlldCBoYXIgc3BlbGF0cyBpbiBlbGxlciAiCisicHJvZHVjZXJhdHMiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCittc2dzdHIgImxhdGl0dWQgZsO2ciBnZW9ncmFmaXNrIHBsYXRzIgorCittc2dpZCAiIgorImdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yICIKKyJzb3V0aGVybiBsYXRpdHVkZXMpIgorbXNnc3RyICIiCisibGF0aXR1ZCBpIGdyYWRlciBmw7ZyIGdlb2dyYWZpc2sgcGxhdHMgZMOkciBtZWRpZXQgaGFyIHNwZWxhdHMgaW4gZWxsZXIgIgorInByb2R1Y2VyYXRzIGVubGlndCBXR1M4NCAobm9sbCBmw7ZyIGVrdmF0b3JuLCBuZWdhdGl2YSB2w6RyZGVuIGbDtnIgc3lkbGlnYSAiCisibGF0aXR1ZGVyKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBsb25naXR1ZGUiCittc2dzdHIgImxvbmdpdHVkIGbDtnIgZ2VvZ3JhZmlzayBwbGF0cyIKKworbXNnaWQgIiIKKyJnZW8gbG9uZ2l0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCisiZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIHByaW1lIG1lcmlkaWFuIGluIEdyZWVud2ljaC9VSywgICIKKyJuZWdhdGl2ZSB2YWx1ZXMgZm9yIHdlc3Rlcm4gbG9uZ2l0dWRlcykiCittc2dzdHIgIiIKKyJsb25naXR1ZCBpIGdyYWRlciBmw7ZyIGdlb2dyYWZpc2sgcGxhdHMgZMOkciBtZWRpZXQgaGFyIHNwZWxhdHMgaW4gZWxsZXIgIgorInByb2R1Y2VyYXRzIGVubGlndCBXR1M4NCAobm9sbCBmw7ZyIG1lcmlkaWFubGluamVuIGkgR3JlZW53aWNoLCAiCisiU3RvcmJyaXRhbm5pZW4sIG5lZ2F0aXZhIHbDpHJkZW4gZsO2ciB2w6RzdGxpZ2EgbG9uZ2l0dWRlcikiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gZWxldmF0aW9uIgorbXNnc3RyICJow7ZqZCBmw7ZyIGdlb2dyYWZpc2sgcGxhdHMiCisKK21zZ2lkICIiCisiZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKKyJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgorbXNnc3RyICIiCisiaMO2amQgaSBtZXRlciBmw7ZyIGdlb2dyYWZpc2sgcGxhdHMgZMOkciBtZWRpZXQgaGFyIHNwZWxhdHMgaW4gZWxsZXIgIgorInByb2R1Y2VyYXRzIGVubGlndCBXR1M4NCAobm9sbCBmw7ZyIGdlbm9tc25pdHRsaWcgaGF2c25pdsOlKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBjb3VudHJ5IgorbXNnc3RyICJsYW5kIGbDtnIgZ2VvZ3JhZmlzayBwbGF0cyIKKworbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICJsYW5kIChlbmdlbHNrdCBuYW1uKSBkw6RyIG1lZGlldCBoYXIgc3BlbGF0cyBpbiBlbGxlciBwcm9kdWNlcmF0cyIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBjaXR5IgorbXNnc3RyICJzdGFkIGbDtnIgZ2VvZ3JhZmlzayBwbGF0cyIKKworbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICJzdGFkIChlbmdlbHNrdCBuYW1uKSBkw6RyIG1lZGlldCBoYXIgc3BlbGF0cyBpbiBlbGxlciBwcm9kdWNlcmF0cyIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKK21zZ3N0ciAic3BlY2lmaWsgcGxhdHMgZsO2ciBnZW9ncmFmaXNrIHBsYXRzIgorCittc2dpZCAiIgorImEgbG9jYXRpb24gd2hpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgorInRoZSBuZWlnaGJvcmhvb2QpIgorbXNnc3RyICIiCisiZW4gcGxhdHMgaW5vbSBlbiBzdGFkIGTDpHIgbWVkaWV0IGhhciBwcm9kdWNlcmF0cyBlbGxlciBza2FwYXRzICh0LmV4LiAiCisibsOkcm9tcsOlZGUpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGhvcml6b250YWwgZXJyb3IiCittc2dzdHIgImZlbCBpIGhvcmlzb250ZWxsIGdlb2dyYWZpc2sgcGxhdHMiCisKK21zZ2lkICJleHBlY3RlZCBlcnJvciBvZiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbmluZyBtZWFzdXJlcyAoaW4gbWV0ZXJzKSIKK21zZ3N0ciAiZsO2cnbDpG50YXQgZmVsIGkgaG9yaXNvbnRlbGwgcG9zaXRpb25lcmluZ3Ntw6R0bmluZyAoaSBtZXRlcikiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgc3BlZWQiCittc2dzdHIgImbDtnJmbHl0dG5pbmdzaGFzdGlnaGV0IGbDtnIgZ2VvZ3JhZmlzayBwbGF0cyIKKworbXNnaWQgIiIKKyJtb3ZlbWVudCBzcGVlZCBvZiB0aGUgY2FwdHVyaW5nIGRldmljZSB3aGlsZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIGluIG0vcyIKK21zZ3N0ciAiZsO2cmZseXR0bmluZ3NoYXN0aWdoZXQgZsO2ciBmw6VuZ3N0ZW5oZXRlbiBuw6RyIG1lZGlhdCBza2FwYXMgKGkgbWV0ZXIvcykiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgorbXNnc3RyICJmw7ZyZmx5dHRuaW5nc3Jpa3RuaW5nIGbDtnIgZ2VvZ3JhZmlzayBwbGF0cyIKKworbXNnaWQgIiIKKyJpbmRpY2F0ZXMgdGhlIG1vdmVtZW50IGRpcmVjdGlvbiBvZiB0aGUgZGV2aWNlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgb2YgYSAiCisibWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sIDAgIgorIm1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKK21zZ3N0ciAiIgorImluZGlrZXJhciByaWt0bmluZ2VuIHNvbSBlbmhldGVuIGbDtnJmbHl0dGFzIG7DpHIgbWVkaWF0IHNrYXBhcy4gRGV0ICIKKyJyZXByZXNlbnRlcmFzIHNvbSBncmFkZXIgaSBmbHl0dGFsc3JlcHJlc2VudGF0aW9uLCAwIGJldHlkZXIgZ2VvZ3JhZmlza3QgIgorIm5vcmRsaWcgcmlrdG5pbmcgb2NoIMO2a2FyIG1lZHNvbHMiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCittc2dzdHIgImbDpW5nc3RyaWt0bmluZyBmw7ZyIGdlb2dyYWZpc2sgcGxhdHMiCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGRldmljZSBpcyBwb2ludGluZyB0byB3aGVuIGNhcHR1cmluZyAgYSBtZWRpYS4gIgorIkl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIHJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSAiCisiZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKyJpbmRpa2VyYXIgcmlrdG5pbmdlbiBzb20gZW5oZXRlbiBwZWthciBtb3QgbsOkciBtZWRpYXQgc2thcGFzLiBEZXQgIgorInJlcHJlc2VudGVyYXMgc29tIGdyYWRlciBpIGZseXR0YWxzcmVwcmVzZW50YXRpb24sIDAgYmV0eWRlciBnZW9ncmFmaXNrdCAiCisibm9yZGxpZyByaWt0bmluZyBvY2ggw7ZrYXIgbWVkc29scyIKKworIy4gVFJBTlNMQVRPUlM6ICdzaG93IG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lJyBoZXJlCittc2dpZCAic2hvdyBuYW1lIgorbXNnc3RyICJ2aXNuaW5nc25hbW4iCisKK21zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgorbXNnc3RyICJOYW1uIHDDpSB0di1wcm9ncmFtL3BvZGRzw6RuZG5pbmcvc2VyaWUgc29tIG1lZGlhdCBrb21tZXIgZnLDpW4iCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQorbXNnaWQgInNob3cgc29ydG5hbWUiCittc2dzdHIgInZpc2Egc29ydGVyaW5nc25hbW4iCisKK21zZ2lkICIiCisiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIiIKKyJOYW1uIHDDpSB0di1wcm9ncmFtL3BvZGRzw6RuZG5pbmcvc2VyaWUgc29tIG1lZGlhdCBrb21tZXIgZnLDpW4sIGbDtnIgIgorInNvcnRlcmluZ3PDpG5kYW3DpWwiCisKK21zZ2lkICJlcGlzb2RlIG51bWJlciIKK21zZ3N0ciAiYXZzbml0dHNudW1tZXIiCisKK21zZ2lkICJUaGUgZXBpc29kZSBudW1iZXIgaW4gdGhlIHNlYXNvbiB0aGUgbWVkaWEgaXMgcGFydCBvZiIKK21zZ3N0ciAiQXZzbml0dHNudW1yZXQgaSBzw6Rzb25nZW4gc29tIG1lZGlhdCDDpHIgZW4gZGVsIGF2IgorCittc2dpZCAic2Vhc29uIG51bWJlciIKK21zZ3N0ciAic8Okc29uZ3NudW1tZXIiCisKK21zZ2lkICJUaGUgc2Vhc29uIG51bWJlciBvZiB0aGUgc2hvdyB0aGUgbWVkaWEgaXMgcGFydCBvZiIKK21zZ3N0ciAiU8Okc29uZ3NudW1yZXQgZsO2ciBwcm9ncmFtbWV0IHNvbSBtZWRpYXQgw6RyIGVuIGRlbCBhdiIKKworbXNnaWQgImx5cmljcyIKK21zZ3N0ciAibMOldHRleHRlciIKKworbXNnaWQgIlRoZSBseXJpY3Mgb2YgdGhlIG1lZGlhLCBjb21tb25seSB1c2VkIGZvciBzb25ncyIKK21zZ3N0ciAiTMOldHRleHRlciBmw7ZyIG1lZGlhdCwgYW52w6RuZHMgb2Z0YXN0IGbDtnIgbMOldGFyIgorCittc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCittc2dzdHIgInNvcnRlcmluZ3NuYW1uIGbDtnIga29tcG9zaXTDtnIiCisKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJwZXJzb24oZXIpIHNvbSBrb21wb25lcmFkZSBpbnNwZWxuaW5nZW4sIGbDtnIgc29ydGVyaW5nc8OkbmRhbcOlbCIKKworbXNnaWQgImdyb3VwaW5nIgorbXNnc3RyICJncnVwcGVyaW5nIgorCittc2dpZCAiIgorIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKKyJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgorbXNnc3RyICIiCisiR3J1cHByZWxhdGVyYWRlIG1lZGlhIHNvbSBzcMOkbm5lciDDtnZlciBmbGVyYSBzcMOlciwgc8Olc29tIG9saWthIGRlbGFyIGF2IGVuICIKKyJrb25zZXJ0LiBEZXQgw6RyIGVuIGjDtmdyZSBuaXbDpSDDpG4gZXR0IHNww6VyLCBtZW4gbMOkZ3JlIMOkbiBldHQgYWxidW0iCisKK21zZ2lkICJ1c2VyIHJhdGluZyIKK21zZ3N0ciAiYW52w6RuZGFyYmV0eWciCisKK21zZ2lkICIiCisiUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCisidGhpcyBtZWRpYSIKK21zZ3N0ciAiIgorIkJldHlnIGFuZ2l2aXQgYXYgZW4gYW52w6RuZGFyZS4gRGVzdG8gaMO2Z3JlIHJhbmtpbmcsIGRlc3RvIG1lciBnaWxsYXIgIgorImFudsOkbmRhcmVuIGRldHRhIG1lZGlhIgorCittc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKK21zZ3N0ciAiZW5oZXRzdGlsbHZlcmthcmUiCisKK21zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICJUaWxsdmVya2FyZSBhdiBlbmhldGVuIHNvbSBhbnbDpG50cyBmw7ZyIGF0dCBza2FwYSBkZXR0YSBtZWRpYSIKKworbXNnaWQgImRldmljZSBtb2RlbCIKK21zZ3N0ciAiZW5oZXRzbW9kZWxsIgorCittc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICJNb2RlbGwgYXYgZW5oZXRlbiBzb20gYW52w6RudHMgZsO2ciBhdHQgc2thcGEgZGV0dGEgbWVkaWEiCisKK21zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgorbXNnc3RyICJwcm9ncmFtbmFtbiIKKworbXNnaWQgIkFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSIKK21zZ3N0ciAiUHJvZ3JhbW1ldCBzb20gYW52w6RudHMgZsO2ciBhdHQgc2thcGEgZGV0dGEgbWVkaWEiCisKK21zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgorbXNnc3RyICJwcm9ncmFtZGF0YSIKKworbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCittc2dzdHIgIkdvZHR5Y2tsaWcgcHJvZ3JhbWRhdGEgYXR0IHNlcmlhbGlzZXJhIGludXRpIGRldHRhIG1lZGlhIgorCittc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCittc2dzdHIgImJpbGRvcmllbnRlcmluZyIKKworbXNnaWQgIkhvdyB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCBiZWZvcmUgZGlzcGxheSIKK21zZ3N0ciAiSHVyIGJpbGRlbiBza2Egcm90ZXJhcyBlbGxlciB2w6RuZGFzIGbDtnJlIHZpc25pbmciCisKK21zZ2lkICIsICIKK21zZ3N0ciAiLCAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAiRkVMOiBmcsOlbiBlbGVtZW50ICVzOiAlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorIll0dGVybGlnYXJlIGZlbHPDtmtuaW5nc2luZm9ybWF0aW9uOlxuIgorIiVzXG4iCisKKyMgT3PDpGtlci4KKyMsIGMtZm9ybWF0Cittc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgorbXNnc3RyICJhbmdhdiB0b20ga29yZyBcIiVzXCIsIGludGUgdGlsbMOldGV0IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHNraXBwaW5nIgorbXNnc3RyICJpbmdlbiBrb3JnIFwiJXNcIiwgaG9wcGFyIMO2dmVyIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiIKK21zZ3N0ciAiaW5nZW4gXCIlc1wiLWVnZW5za2FwIGkgZWxlbWVudGV0IFwiJXNcIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc2V0IHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiB0byBcIiVzXCIiCittc2dzdHIgImt1bmRlIGludGUgc3TDpGxsYSBpbiBlZ2Vuc2thcGVuIFwiJXNcIiBpIGVsZW1lbnRldCBcIiVzXCIgdGlsbCBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxpbmsgJXMgdG8gJXMiCittc2dzdHIgImt1bmRlIGludGUgbMOkbmthICVzIHRpbGwgJXMiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCittc2dzdHIgImluZ2V0IFwiJXNcIi1lbGVtZW50IgorCisjIE9zw6RrZXIuIEphZyB0cm9yICJjYXBzIiDDpHIga29ydCBmw7ZyICJjYXBhYmlsaXRpZXMiLgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCittc2dzdHIgImt1bmRlIGludGUgdG9sa2EgZsO2cm3DpWdvcm5hIFwiJXNcIiIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIKK21zZ3N0ciAibMOkbmsgdXRhbiBrw6RsbGVsZW1lbnQiCisKK21zZ2lkICJsaW5rIHdpdGhvdXQgc2luayBlbGVtZW50IgorbXNnc3RyICJsw6RuayB1dGFuIHV0Z8OlbmdzZWxlbWVudCIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAiaW5nZXQga8OkbGxlbGVtZW50IGbDtnIgVVJJOm4gXCIlc1wiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGVsZW1lbnQgdG8gbGluayBVUkkgXCIlc1wiIHRvIgorbXNnc3RyICJpbmdldCBlbGVtZW50IGF0dCBsw6Rua2EgVVJJOm4gXCIlc1wiIHRpbGwiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJpbmdldCB1dGfDpW5nc2VsZW1lbnQgZsO2ciBVUkk6biBcIiVzXCIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxpbmsgc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpG5rYSB1dGfDpW5nc2VsZW1lbnRldCBmw7ZyIFVSSTpuIFwiJXNcIiIKKworbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgorbXNnc3RyICJ0b20gcsO2cmxlZG5pbmcgw6RyIGludGUgdGlsbMOldGV0IgorCittc2dpZCAiSW50ZXJuYWwgY2xvY2sgZXJyb3IuIgorbXNnc3RyICJJbnRlcm50IGtsb2NrZmVsLiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCittc2dzdHIgIkludGVybnQgZmVsIGkgZGF0YWZsw7ZkZS4iCisKK21zZ2lkICJBIGxvdCBvZiBidWZmZXJzIGFyZSBiZWluZyBkcm9wcGVkLiIKK21zZ3N0ciAiRsO2cmthc3RhciBlbiBzdG9yIG3DpG5nZCBidWZmZXJ0YXIuIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IHByb2JsZW0uIgorbXNnc3RyICJJbnRlcm50IGRhdGFmbMO2ZGVzcHJvYmxlbS4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCittc2dzdHIgIkludGVybnQgZmVsIGkgZGF0YXN0csO2bS4iCisKK21zZ2lkICJGaWx0ZXIgY2FwcyIKK21zZ3N0ciAiRmlsdHJlcmEgZsO2cm3DpWdvciIKKworbXNnaWQgIiIKKyJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKKyJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgorbXNnc3RyICIiCisiQmVncsOkbnNhIGRlIG3DtmpsaWdhIHRpbGzDpXRuYSBmw7ZybcOlZ29ybmEgKE5VTEwgYmV0eWRlciBBTlkpLiBJbnN0w6RsbG5pbmcgYXYgIgorImVnZW5za2FwZW4gdGFyIGVuIHJlZmVyZW5zIHRpbGwgZGV0IGFuZ2l2bmEgR3N0Q2Fwcy1vYmpla3RldC4iCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiSW5nZXQgZmlsbmFtbiBhbmdpdmV0IGbDtnIgc2tyaXZuaW5nLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCittc2dzdHIgIkt1bmRlIGludGUgw7ZwcG5hIGZpbGVuIFwiJXNcIiBmw7ZyIHNrcml2bmluZy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCittc2dzdHIgIkZlbCB2aWQgc3TDpG5nbmluZyBhdiBmaWxlbiBcIiVzXCIuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIgorbXNnc3RyICJGZWwgdmlkIHPDtmtuaW5nIGkgZmlsZW4gXCIlc1wiLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiRmVsIHZpZCBza3Jpdm5pbmcgdGlsbCBmaWxlbiBcIiVzXCIuIgorCittc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCittc2dzdHIgIkluZ2V0IGZpbG5hbW4gYW5naXZldCBmw7ZyIGzDpHNuaW5nLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCittc2dzdHIgIkt1bmRlIGludGUgw7ZwcG5hIGZpbGVuIFwiJXNcIiBmw7ZyIGzDpHNuaW5nLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGluZm8gb24gXCIlc1wiLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBmw6UgaW5mb3JtYXRpb24gb20gXCIlc1wiLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIgorbXNnc3RyICJcIiVzXCIgw6RyIGVuIGthdGFsb2cuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKK21zZ3N0ciAiRmlsZW4gXCIlc1wiIMOkciBldHQgdXR0YWcuIgorCittc2dpZCAiRmFpbGVkIGFmdGVyIGl0ZXJhdGlvbnMgYXMgcmVxdWVzdGVkLiIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIGVmdGVyIGl0ZXJhdGlvbmVyIHNvbSBiZWfDpHJ0LiIKKworbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCittc2dzdHIgIkluZ2VuIHRlbXBvcsOkcmthdGFsb2cgYW5naXZlbi4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBza2FwYSB0ZW1wb3LDpHJmaWxlbiBcIiVzXCIuIgorCittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKK21zZ3N0ciAiRmVsIHZpZCBza3Jpdm5pbmcgdGlsbCBow6RtdG5pbmdzZmlsZW4uIgorCisjIE9zw6RrZXIuIEphZyB0cm9yICJjYXBzIiDDpHIga29ydCBmw7ZyICJjYXBhYmlsaXRpZXMiLgorbXNnaWQgImNhcHMiCittc2dzdHIgImbDtnJtw6Vnb3IiCisKK21zZ2lkICJkZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtIgorbXNnc3RyICJkZXRla3RlcmFkZSBmw7ZybcOlZ29yIGkgc3Ryw7ZtbWVuIgorCittc2dpZCAibWluaW11bSIKK21zZ3N0ciAibWluaW11bSIKKworbXNnaWQgIm1heGltdW0iCittc2dzdHIgIm1heGltdW0iCisKK21zZ2lkICJmb3JjZSBjYXBzIgorbXNnc3RyICJ0dmluZ2EgZsO2cm3DpWdvciIKKworbXNnaWQgImZvcmNlIGNhcHMgd2l0aG91dCBkb2luZyBhIHR5cGVmaW5kIgorbXNnc3RyICJ0dmluZ2EgZsO2cm3DpWdvciB1dGFuIGF0dCBnw7ZyYSBlbiB0eXBlZmluZCIKKworbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKK21zZ3N0ciAiU3Ryw7ZtbWVuIGlubmVow6VsbGVyIGluZ2V0IGRhdGEuIgorCittc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKK21zZ3N0ciAiSW1wbGVtZW50ZXJhZGUgZ3LDpG5zc25pdHQ6XG4iCisKK21zZ2lkICJyZWFkYWJsZSIKK21zZ3N0ciAibMOkc2JhciIKKworbXNnaWQgIndyaXRhYmxlIgorbXNnc3RyICJza3JpdmJhciIKKworbXNnaWQgImNvbnRyb2xsYWJsZSIKK21zZ3N0ciAia29udHJvbGxlcmJhciIKKworbXNnaWQgImNoYW5nZWFibGUgaW4gTlVMTCwgUkVBRFksIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlIgorbXNnc3RyICLDpG5kcmluZ3NiYXJ0IGkgdGlsbHN0w6VuZGVuIE5VTEwsIFJFQURZLCBQQVVTRUQgZWxsZXIgUExBWUlORyIKKworbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiCittc2dzdHIgIsOkbmRyaW5nc2JhcnQgZW5kYXN0IGkgdGlsbHN0w6VuZGVuIE5VTEwsIFJFQURZIGVsbGVyIFBBVVNFRCIKKworbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMIG9yIFJFQURZIHN0YXRlIgorbXNnc3RyICLDpG5kcmluZ3NiYXJ0IGVuZGFzdCBpIHRpbGxzdMOlbmRlbiBOVUxMIGVsbGVyIFJFQURZIgorCittc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgorbXNnc3RyICJTdmFydGxpc3RhZGUgZmlsZXI6IgorCittc2dpZCAiVG90YWwgY291bnQ6ICIKK21zZ3N0ciAiVG90YWx0IGFudGFsOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxhY2tsaXN0ZWQgZmlsZSIKK21zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHJbMF0gIiVkIHN2YXJ0bGlzdGFkIGZpbCIKK21zZ3N0clsxXSAiJWQgc3ZhcnRsaXN0YWRlIGZpbGVyIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIHBsdWdpbiIKK21zZ2lkX3BsdXJhbCAiJWQgcGx1Z2lucyIKK21zZ3N0clswXSAiJWQgaW5zdGlja3Ntb2R1bCIKK21zZ3N0clsxXSAiJWQgaW5zdGlja3Ntb2R1bGVyIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdCBlbnRyeSIKK21zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0IGVudHJpZXMiCittc2dzdHJbMF0gIiVkIHN2YXJ0bGlzdGFkIHBvc3QiCittc2dzdHJbMV0gIiVkIHN2YXJ0bGlzdGFkZSBwb3N0ZXIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgZmVhdHVyZSIKK21zZ2lkX3BsdXJhbCAiJWQgZmVhdHVyZXMiCittc2dzdHJbMF0gIiVkIGZ1bmt0aW9uIgorbXNnc3RyWzFdICIlZCBmdW5rdGlvbmVyIgorCittc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgorbXNnc3RyICJTa3JpdiB1dCBhbGxhIGVsZW1lbnQiCisKK21zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgorbXNnc3RyICJTa3JpdiB1dCBsaXN0YSDDtnZlciBzdmFydGxpc3RhZGUgZmlsZXIiCisKK21zZ2lkICIiCisiUHJpbnQgYSBtYWNoaW5lLXBhcnNhYmxlIGxpc3Qgb2YgZmVhdHVyZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4gb3IgYWxsICIKKyJwbHVnaW5zIHByb3ZpZGUuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIGluIGNvbm5lY3Rpb24gd2l0aCBleHRlcm5hbCAiCisiYXV0b21hdGljIHBsdWdpbiBpbnN0YWxsYXRpb24gbWVjaGFuaXNtcyIKK21zZ3N0ciAiIgorIlNrcml2IHV0IGVuIG1hc2tpbnRvbGtuaW5nc2JhciBsaXN0YSDDtnZlciBmdW5rdGlvbmVyIHNvbSBkZW4gYW5naXZuYSAiCisiaW5zdGlja3Ntb2R1bGVuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxsZXIgYWxsYSBpbnN0aWNrc21vZHVsZXIgIgorInRpbGxoYW5kYWjDpWxsZXIuIEFudsOkbmRiYXJ0XG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsbHNhbW1hbnMgbWVkIGV4dGVybmEgbWVrYW5pc21lciAiCisiZsO2ciBhdXRvbWF0aXNrIGluc3RhbGxhdGlvbiBhdiBpbnN0aWNrc21vZHVsZXIiCisKK21zZ2lkICJMaXN0IHRoZSBwbHVnaW4gY29udGVudHMiCittc2dzdHIgIkxpc3RhIGluc3RpY2tzbW9kdWxlbnMgaW5uZWjDpWxsIgorCittc2dpZCAiUHJpbnQgc3VwcG9ydGVkIFVSSSBzY2hlbWVzLCB3aXRoIHRoZSBlbGVtZW50cyB0aGF0IGltcGxlbWVudCB0aGVtIgorbXNnc3RyICIiCisiU2tyaXYgdXQgdXJpLXNjaGVtYW4gc29tIHN0w7ZkcywgdGlsbHNhbW1hbnMgbWVkIGVsZW1lbnRlbiBzb20gaW1wbGVtZW50ZXJhciAiCisiZGVtIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgorbXNnc3RyICJLdW5kZSBpbnRlIGzDpHNhIGluIGZpbCBmw7ZyIGluc3RpY2tzbW9kdWw6ICVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iCittc2dzdHIgIkluZ2V0IHPDpWRhbnQgZWxlbWVudCBlbGxlciBpbnN0aWNrc21vZHVsIFwiJXNcIlxuIgorCittc2dpZCAiSW5kZXggc3RhdGlzdGljcyIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIGVsZW1lbnQgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAiRmljayBtZWRkZWxhbmRlICMldSBmcsOlbiBlbGVtZW50ZXQgXCIlc1wiICglcyk6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKK21zZ3N0ciAiRmljayBtZWRkZWxhbmRlICMldSBmcsOlbiBrb250YWt0ZW4gKHBhZCkgXCIlczolc1wiICglcyk6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAiRmljayBtZWRkZWxhbmRlICMldSBmcsOlbiBvYmpla3RldCBcIiVzXCIgKCVzKTogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSAoJXMpOiAiCittc2dzdHIgIkZpY2sgbWVkZGVsYW5kZSAjJXUgKCVzKTogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKK21zZ3N0ciAiRmljayBFT1MgZnLDpW4gZWxlbWVudCBcIiVzXCIuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKK21zZ3N0ciAiSElUVEFERSBUQUdHICAgOiBoaXR0YXQgYXYgZWxlbWVudGV0IFwiJXNcIi5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCittc2dzdHIgIkhJVFRBREUgVEFHRyAgIDogaGl0dGF0IGF2IGtvbnRha3RlbiBcIiVzOiVzXCIuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgorbXNnc3RyICJISVRUQURFIFRBR0cgICA6IGhpdHRhdCBhdiBvYmpla3RldCBcIiVzXCIuXG4iCisKK21zZ2lkICJGT1VORCBUQUdcbiIKK21zZ3N0ciAiSElUVEFERSBUQUdHXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklORk86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorIklORk86XG4iCisiJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCittc2dzdHIgIlZBUk5JTkc6IGZyw6VuIGVsZW1lbnRldCAlczogJXNcbiIKKworbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgorbXNnc3RyICJGw7ZyaW5sw6RzdCwgdsOkbnRhciBww6UgYXR0IGJ1ZmZyaW5nZW4gc2thIGJsaSBmw6RyZGlnLi4uXG4iCisKK21zZ2lkICJidWZmZXJpbmcuLi4iCittc2dzdHIgImJ1ZmZyYXIuLi4iCisKK21zZ2lkICJEb25lIGJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgorbXNnc3RyICJGw6RyZGlnIG1lZCBidWZmcmluZ2VuLCBzdMOkbGxlciBpbiByw7ZybGVkbmluZ2VuIHRpbGwgUExBWUlORy4uLlxuIgorCittc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAiQnVmZnJhciwgc3TDpGxsZXIgaW4gcsO2cmxlZG5pbmdlbiB0aWxsIFBBVVNFRC4uLlxuIgorCittc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKK21zZ3N0ciAiRsO2cmRyw7ZqbmluZyBmw7ZyIHZpZGFyZXPDpG5kbmluZy4uLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iCittc2dzdHIgIlN0w6RsbGVyIGluIHRpbGxzdMOlbmRldCB0aWxsICVzIGVubGlndCBiZWfDpHJhbiBmcsOlbiAlcy4uLlxuIgorCittc2dpZCAiSW50ZXJydXB0OiBTdG9wcGluZyBwaXBlbGluZSAuLi5cbiIKK21zZ3N0ciAiQXZicm90dDogU3RvcHBhciByw7ZybGVkbmluZ2VuIC4uLlxuIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nIGVsZW1lbnQ6ICVzXG4iCittc2dzdHIgImluZ2V0IFwiJXNcIi1lbGVtZW50IgorCittc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgorbXNnc3RyICJVdG1hdG5pbmdzdGFnZ2FyICjDpHZlbiBrw6RudCBzb20gbWV0YWRhdGEpIgorCittc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKK21zZ3N0ciAiU2tyaXYgdXQgc3RhdHVzaW5mb3JtYXRpb24gb2NoIGVnZW5za2Fwc25vdGlmaWVyaW5nYXIiCisKK21zZ2lkICJEbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uIgorbXNnc3RyICJTa3JpdiBpbnRlIHV0IG7DpWdvbiBmw7ZybG9wcHNpbmZvcm1hdGlvbiIKKworbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKK21zZ3N0ciAiVXRtYXRuaW5nc21lZGRlbGFuZGVuIgorCittc2dpZCAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKK21zZ3N0ciAiU2tyaXYgaW50ZSB1dCBzdGF0dXNpbmZvcm1hdGlvbiBhdiBUWVAiCisKK21zZ2lkICJUWVBFMSxUWVBFMiwuLi4iCittc2dzdHIgIlRZUDEsVFlQMiwuLi4iCisKK21zZ2lkICJEbyBub3QgaW5zdGFsbCBhIGZhdWx0IGhhbmRsZXIiCittc2dzdHIgIkluc3RhbGxlcmEgaW50ZSBlbiBmZWxoYW50ZXJhcmUiCisKK21zZ2lkICJQcmludCBhbGxvYyB0cmFjZSAoaWYgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUpIgorbXNnc3RyICJTa3JpdiB1dCBhbGxvYy1zcMOlciAob20gYWt0aXZlcmF0IHZpZCBrb21waWxlcmluZ2VuKSIKKworbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKK21zZ3N0ciAiVHZpbmdhIEVPUyBww6Uga8OkbGxvciBpbm5hbiByw7ZybGVkbmluZ2VuIHN0w6RuZ3MgYXYiCisKK21zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKK21zZ3N0ciAiRkVMOiByw7ZybGVkbmluZ2VuIGt1bmRlIGludGUga29uc3RydWVyYXM6ICVzLlxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKK21zZ3N0ciAiRkVMOiByw7ZybGVkbmluZ2VuIGt1bmRlIGludGUga29uc3RydWVyYXMuXG4iCisKKyMgRmVscmFwcG9ydGVyYXQgaSBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzc0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogZXJyb25lb3VzIHBpcGVsaW5lOiAlc1xuIgorbXNnc3RyICJWQVJOSU5HOiBmZWxha3RpZyByw7ZybGVkbmluZzogJXNcbiIKKworbXNnaWQgIkVSUk9SOiB0aGUgJ3BpcGVsaW5lJyBlbGVtZW50IHdhc24ndCBmb3VuZC5cbiIKK21zZ3N0ciAiRkVMOiBcInBpcGVsaW5lXCItZWxlbWVudGV0IGhpdHRhZGVzIGludGUuXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAiU3TDpGxsZXIgaW4gcsO2cmxlZG5pbmdlbiB0aWxsIFBBVVNFRC4uLlxuIgorCittc2dpZCAiRVJST1I6IFBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwYXVzZS5cbiIKK21zZ3N0ciAiRkVMOiBSw7ZybGVkbmluZ2VuIHZpbGwgaW50ZSBnw7ZyYSBwYXVzLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgorbXNnc3RyICJSw7ZybGVkbmluZ2VuIGxldmVyIG9jaCBiZWjDtnZlciBpbnRlIFBSRVJPTEwgLi4uXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMSU5HIC4uLlxuIgorbXNnc3RyICJSw7ZybGVkbmluZ2VuIHV0ZsO2ciBQUkVST0xMLi4uXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHByZXJvbGwuXG4iCittc2dzdHIgIkZFTDogcsO2cmxlZG5pbmdlbiB2aWxsIGludGUgdXRmw7ZyYSBwcmVyb2xsLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgorbXNnc3RyICJSw7ZybGVkbmluZ2VuIGhhciB1dGbDtnJ0IFBSRVJPTEwuLi5cbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKK21zZ3N0ciAiU3TDpGxsZXIgaW4gcsO2cmxlZG5pbmdlbiB0aWxsIFBMQVlJTkcuLi5cbiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKK21zZ3N0ciAiRkVMOiByw7ZybGVkbmluZ2VuIHZpbGwgaW50ZSBzcGVsYS5cbiIKKworbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIEZvcmNpbmcgRU9TIG9uIHRoZSBwaXBlbGluZVxuIgorbXNnc3RyICJFT1MgdmlkIGF2c3TDpG5kbmluZyBha3RpdmVyYWQgLS0gVHZpbmdhciBFT1MgcMOlIHLDtnJsZWRuaW5nZW5cbiIKKworIyBFT1MgPSBFbmQgT2YgU3RyZWFtCittc2dpZCAiV2FpdGluZyBmb3IgRU9TLi4uXG4iCittc2dzdHIgIlbDpG50YXIgcMOlIEVPUy4uLlxuIgorCittc2dpZCAiRU9TIHJlY2VpdmVkIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKK21zZ3N0ciAiRU9TIHRvZ3MgZW1vdCAtIHN0b3BwYXIgcsO2cmxlZG5pbmcuLi5cbiIKKworbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgorbXNnc3RyICJFdHQgZmVsIGludHLDpGZmYWRlIHZpZCB2w6RudGFuIHDDpSBFT1NcbiIKKworIyBGZWxyYXBwb3J0ZXJhdCBpIGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzQzMQorbXNnaWQgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgorbXNnc3RyICJLw7ZybmluZyBhdnNsdXRhZGVzIGVmdGVyICUiCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIC4uLlxuIgorbXNnc3RyICJTdMOkbGxlciBpbiByw7ZybGVkbmluZ2VuIHRpbGwgUkVBRFkuLi5cbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCAuLi5cbiIKK21zZ3N0ciAiU3TDpGxsZXIgaW4gcsO2cmxlZG5pbmdlbiB0aWxsIE5VTEwuLi5cbiIKKworbXNnaWQgIkZyZWVpbmcgcGlwZWxpbmUgLi4uXG4iCittc2dzdHIgIkZyaWfDtnIgcsO2cmxlZG5pbmcgLi4uXG4iCisKKyN+IG1zZ2lkICJVc2FnZTogZ3N0LXhtbGxhdW5jaCA8ZmlsZS54bWw+IFsgZWxlbWVudC5wcm9wZXJ0eT12YWx1ZSAuLi4gXVxuIgorI34gbXNnc3RyICIiCisjfiAiQW52w6RuZG5pbmc6IGdzdC14bWxsYXVuY2ggPGZpbC54bWw+IFsgZWxlbWVudC5lZ2Vuc2thcD12w6RyZGUgLi4uIF1cbiIKKworI34gbXNnaWQgIkVSUk9SOiBwYXJzZSBvZiB4bWwgZmlsZSAnJXMnIGZhaWxlZC5cbiIKKyN+IG1zZ3N0ciAiRkVMOiB0b2xrbmluZyBhdiB4bWwtZmlsZW4gXCIlc1wiIG1pc3NseWNrYWRlcy5cbiIKKworI34gbXNnaWQgIkVSUk9SOiBubyB0b3BsZXZlbCBwaXBlbGluZSBlbGVtZW50IGluIGZpbGUgJyVzJy5cbiIKKyN+IG1zZ3N0ciAiRkVMOiBpbmdldCByw7ZybGVkbmluZ3NlbGVtZW50IHDDpSDDtnZlcnN0YSBuaXbDpW4gaSBmaWxlbiBcIiVzXCIuXG4iCisKKyN+IG1zZ2lkICJXQVJOSU5HOiBvbmx5IG9uZSB0b3BsZXZlbCBlbGVtZW50IGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuXG4iCisjfiBtc2dzdHIgIlZBUk5JTkc6IGVuZGFzdCBldHQgZWxlbWVudCBww6Ugw7Z2ZXJzdGEgbml2w6VuIHN0w7ZkcyBqdXN0IG51LlxuIgorCisjfiBtc2dpZCAiRVJST1I6IGNvdWxkIG5vdCBwYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgJWQ6ICVzLlxuIgorI34gbXNnc3RyICJGRUw6IGt1bmRlIGludGUgdG9sa2Ega29tbWFuZG9yYWRzYXJndW1lbnRldCAlZDogJXMuXG4iCisKKyN+IG1zZ2lkICJXQVJOSU5HOiBlbGVtZW50IG5hbWVkICclcycgbm90IGZvdW5kLlxuIgorI34gbXNnc3RyICJWQVJOSU5HOiBlbGVtZW50ZXQgbWVkIG5hbW5ldCBcIiVzXCIgaGl0dGFkZXMgaW50ZS5cbiIKKworI34gbXNnaWQgIlNhdmUgeG1sIHJlcHJlc2VudGF0aW9uIG9mIHBpcGVsaW5lIHRvIEZJTEUgYW5kIGV4aXQiCisjfiBtc2dzdHIgIlNwYXJhIHhtbC1yZXByZXNlbnRhdGlvbiBhdiByw7ZybGVkbmluZ2VuIGkgRklMIG9jaCBhdnNsdXRhIgorCisjfiBtc2dpZCAiRklMRSIKKyN+IG1zZ3N0ciAiRklMIgorCisjfiBtc2dpZCAiRG8gbm90IGluc3RhbGwgc2lnbmFsIGhhbmRsZXJzIGZvciBTSUdVU1IxIGFuZCBTSUdVU1IyIgorI34gbXNnc3RyICJJbnN0YWxsZXJhIGludGUgc2lnbmFsaGFudGVyYXJlIGbDtnIgU0lHVVNSMSBvY2ggU0lHVVNSMiIKKworI34gbXNnaWQgIkVycm9yIHdyaXRpbmcgcmVnaXN0cnkgY2FjaGUgdG8gJXM6ICVzIgorI34gbXNnc3RyICJGZWwgdmlkIHNrcml2bmluZyBhdiByZWdpc3RlcmNhY2hlIHRpbGwgJXM6ICVzIgorCisjfiBtc2dpZCAiRXJyb3IgcmUtc2Nhbm5pbmcgcmVnaXN0cnkgJXM6ICVzIgorI34gbXNnc3RyICJGZWwgdmlkIMOldGVyc8O2a25pbmcgYXYgcmVnaXN0cmV0ICVzOiAlcyIKKworI34gbXNnaWQgIkVycm9yIHJlLXNjYW5uaW5nIHJlZ2lzdHJ5ICVzIgorI34gbXNnc3RyICJGZWwgdmlkIMOldGVyc8O2a25pbmcgYXYgcmVnaXN0cmV0ICVzIgorCisjfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkLiIKKyN+IG1zZ3N0ciAiSW50ZXJudCBHU3RyZWFtZXItZmVsOiB0aWxsc3TDpW5kc8OkbmRyaW5nIG1pc3NseWNrYWRlcy4iCisKKyN+IG1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgZGVzY3JpcHRvciBcIiVkXCIuIgorI34gbXNnc3RyICJGZWwgdmlkIHNrcml2bmluZyB0aWxsIGZpbGJlc2tyaXZhcmVuIFwiJWRcIi4iCisKKyN+IG1zZ2lkICJGaWxlIGRlc2NyaXB0b3IgXCIlZFwiIGlzIG5vdCB2YWxpZC4iCisjfiBtc2dzdHIgIkZpbGJlc2tyaXZhcmVuIFwiJWRcIiDDpHIgb2dpbHRpZy4iCisKKyN+IG1zZ2lkICJGUkVFSU5HIHBpcGVsaW5lIC4uLlxuIgorI34gbXNnc3RyICJGUklHw5ZSIHLDtnJsZWRuaW5nLi4uXG4iCisKKyN+IG1zZ2lkICJvcmlnaW5hbCBsb2NhdGlvbiBvZiBmaWxlIGFzIGEgVVJJIgorI34gbXNnc3RyICJ1cnNwcnVuZ2xpZyBwbGF0cyBmw7ZyIGZpbGVuIHNvbSBlbiBVUkkiCisKKyN+IG1zZ2lkICJFbGVtZW50IFwiJXNcIiBoYXMgZ29uZSBmcm9tIFBMQVlJTkcgdG8gUEFVU0VELCBxdWl0dGluZy5cbiIKKyN+IG1zZ3N0ciAiRWxlbWVudGV0IFwiJXNcIiBoYXIgZ8OldHQgZnLDpW4gUExBWUlORyB0aWxsIFBBVVNFRCwgYXZzbHV0YXIuXG4iCmRpZmYgLS1naXQgYS9wby90ci5nbW8gYi9wby90ci5nbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNiOWJjMAotLS0gL2Rldi9udWxsCisrKyBiL3BvL3RyLmdtbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby90ci5wbyBiL3BvL3RyLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMTU4NGMKLS0tIC9kZXYvbnVsbAorKysgYi9wby90ci5wbwpAQCAtMCwwICsxLDEzMTggQEAKKyMgdHJhbnNsYXRpb24gb2YgR1N0cmVhbWVyIHRvIFR1cmtpc2gKKyMgQ29weXJpZ2h0IChDKSAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBCYXJpcyBDaWNlayA8YmFyaXNAdGVhbWZvcmNlLm5hbWUudHI+LCAyMDA0LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDAuOC4wXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDktMjkgMTQ6NTUrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDQtMDQtMDMgMDM6MTQrMDMwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogQmFyaXMgQ2ljZWsgPGJhcmlzQHRlYW1mb3JjZS5uYW1lLnRyPlxuIgorIkxhbmd1YWdlLVRlYW06IFR1cmtpc2ggPGdudS10ci11MTJhQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJMYW5ndWFnZTogdHJcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworbXNnaWQgIlByaW50IHRoZSBHU3RyZWFtZXIgdmVyc2lvbiIKK21zZ3N0ciAiR1N0cmVhbWVyIHPDvHLDvG7DvG3DvCB5YXpkxLFyIgorCittc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCittc2dzdHIgIlTDvG0gdXlhcsSxbGFyxLEgw7Zsw7xtY8O8bCB5YXAiCisKK21zZ2lkICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKK21zZ3N0ciAiR2XDp2VybGkgaGF0YSBhecSxa2xhbWEgc8SxbsSxZmxhcsSxbsSxIHlhemTEsXIgdmUgw6fEsWsiCisKK21zZ2lkICIiCisiRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmcm9tIDEgKG9ubHkgZXJyb3IpIHRvIDUgKGFueXRoaW5nKSBvciAwIGZvciBubyBvdXRwdXQiCittc2dzdHIgIiIKKyLDlm50YW7EsW1sxLEgaGF0YSBhecSxa2xhbWEgc2V2aXllc2kgMSdkZW4gKHNhZGVjZSBoYXRhbGFyKSA1J2UgKGhlciDFn2V5KSBrYWRhciAiCisieWEgZGEgw6fEsWt0xLEgb2xtYW1hc8SxIGnDp2luIDAiCisKK21zZ2lkICJMRVZFTCIKK21zZ3N0ciAiU0VWxLBZRSIKKworbXNnaWQgIiIKKyJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yICIKKyJ0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCittc2dzdHIgIiIKKyJBeXLEsSBzxLFuxLFmbGFyxLFuIGJlbGlybGkgc2V2aXllbGVyaSBpw6dpbiBzxLFuxLFmX2lzbWk6c2V2aXllIMOnaWZ0bGVyaW5pbiB2aXJnw7xsICIKKyJpbGUgYXlyxLFsbcSxxZ8gbGlzdGVzaS4gw5ZybmVrOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCisKK21zZ2lkICJMSVNUIgorbXNnc3RyICJMxLBTVEUiCisKK21zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKK21zZ3N0ciAiUmVua2xpIGhhdGEgYXnEsWtsYW1hIMOnxLFrdMSxc8SxbsSxIGthcGF0IgorCittc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCittc2dzdHIgIkhhdGEgYXnEsWtsYW1hecSxIGthcGF0IgorCittc2dpZCAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCittc2dzdHIgIkF5csSxbnTEsWzEsSBla2xlbnRpIHnDvGtsZW1lIGRldGF5bGFyxLFuxLEgZXRraW5sZcWfdGlyIgorCittc2dpZCAiQ29sb24tc2VwYXJhdGVkIHBhdGhzIGNvbnRhaW5pbmcgcGx1Z2lucyIKK21zZ3N0ciAiIgorCittc2dpZCAiUEFUSFMiCittc2dzdHIgIllPTExBUiIKKworIywgZnV6enkKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCisiZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgorbXNnc3RyICIiCisiw4dldnJlIGRlxJ9pxZ9rZW5pIEdTVF9QTFVHSU5fUEFUSCBpw6dpbmRlIHNha2xhbmFuIGxpc3RleWUgZWsgb2xhcmFrIMO2bmNlZGVuICIKKyJ5w7xrbGVuZWNlayBla2xlbnRpbGVyaW4gdmlyZ8O8biBpbGUgYXnEsXLEsWxtxLHFnyBsaXN0ZXNpIgorCittc2dpZCAiUExVR0lOUyIKK21zZ3N0ciAiRUtMRU5UxLBMRVIiCisKK21zZ2lkICJEaXNhYmxlIHRyYXBwaW5nIG9mIHNlZ21lbnRhdGlvbiBmYXVsdHMgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIgorbXNnc3RyICJFa2xlbnRpIHnDvGtsZW5pcmtlbiBrZXNpbWxlbWUgaGF0YWxhcsSxbsSxIHlha2FsYW1hecSxIGthcGF0IgorCittc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIiIKKworbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIiIKKworbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiU2hvdyBHU3RyZWFtZXIgT3B0aW9ucyIKK21zZ3N0ciAiR1N0cmVhbWVyIHPDvHLDvG7DvG3DvCB5YXpkxLFyIgorCittc2dpZCAiVW5rbm93biBvcHRpb24iCittc2dzdHIgIiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgY29yZSBsaWJyYXJ5IGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIGdlbmVsIHRlbWVsIGvDvHTDvHBoYW5lIGhhdGFzxLEgaWxlIGthcsWfxLFsYcWfdMSxLiIKKworIywgZnV6enkKK21zZ2lkICIiCisiR1N0cmVhbWVyIGRldmVsb3BlcnMgd2VyZSB0b28gbGF6eSB0byBhc3NpZ24gYW4gZXJyb3IgY29kZSB0byB0aGlzIGVycm9yLiIKK21zZ3N0ciAiIgorIkdTdHJlYW1lciBnZWxpxZ90aXJpY2lsZXJpIGJ1IGhhdGF5YSBoYXRhIGtvZHUgdmVybWV5ZWNlayBrYWRhciAiCisidGVtYmVsbWnFn2xlci4gIEzDvHRmZW4gaGF0YSBiaWxkaXJpbWluZGUgYnVsdW51bi4iCisKKyMsIGZ1enp5Cittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjb2RlIG5vdCBpbXBsZW1lbnRlZC4iCittc2dzdHIgIiIKKyJEYWhpbGkgR1N0cmVhbWVyIGhhdGFzxLE6IGtvZCB0YW1hbWxhbm1hbcSxxZ8uICBIYXRhIGJpbGRpcmltaW5kZSBidWx1bnVuLiIKKworbXNnaWQgIiIKKyJHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQgYW5kIHNvbWUgZWxlbWVudCBmYWlsZWQgdG8gcG9zdCBhICIKKyJwcm9wZXIgZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogcGFkIHByb2JsZW0uIgorbXNnc3RyICJEYWhpbGkgR1N0cmVhbWVyIGhhdGFzxLE6IGRvbGR1cm1hIHNvcnVudS4gIEhhdGEgYmlsZGlyaW1pbmRlIGJ1bHVudW4uIgorCisjLCBmdXp6eQorbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGhyZWFkIHByb2JsZW0uIgorbXNnc3RyICJEYWhpbGkgR1N0cmVhbWVyIGhhdGFzxLE6IGRhbGxhbm1hIHNvcnVudS4gIEhhdGEgYmlsZGlyaW1pbmRlIGJ1bHVudW4uIgorCisjLCBmdXp6eQorbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCittc2dzdHIgIkRhaGlsaSBHU3RyZWFtZXIgaGF0YXPEsTogdXpsYcWfbWEgc29ydW51LiAgSGF0YSBiaWxkaXJpbWluZGUgYnVsdW51bi4iCisKKyMsIGZ1enp5Cittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBldmVudCBwcm9ibGVtLiIKK21zZ3N0ciAiRGFoaWxpIEdTdHJlYW1lciBoYXRhc8SxOiBvbGF5IHNvcnVudS4gIEhhdGEgYmlsZGlyaW1pbmRlIGJ1bHVudW4uIgorCisjLCBmdXp6eQorbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2VlayBwcm9ibGVtLiIKK21zZ3N0ciAiRGFoaWxpIEdTdHJlYW1lciBoYXRhc8SxOiBhdGxhbWEgc29ydW51LiAgSGF0YSBiaWxkaXJpbWluZGUgYnVsdW51bi4iCisKKyMsIGZ1enp5Cittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgorbXNnc3RyICIiCisiRGFoaWxpIEdTdHJlYW1lciBoYXRhc8SxOiBrYWJpbGl5ZXRsZXIgc29ydW51LiAgSGF0YSBiaWxkaXJpbWluZGUgYnVsdW51bi4iCisKKyMsIGZ1enp5Cittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4iCittc2dzdHIgIkRhaGlsaSBHU3RyZWFtZXIgaGF0YXPEsTogZXRpa2V0IHNvcnVudS4gIEhhdGEgYmlsZGlyaW1pbmRlIGJ1bHVudW4uIgorCittc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2xvY2sgcHJvYmxlbS4iCittc2dzdHIgIkRhaGlsaSBHU3RyZWFtZXIgaGF0YXPEsTogYXRsYW1hIHNvcnVudS4gIEhhdGEgYmlsZGlyaW1pbmRlIGJ1bHVudW4uIgorCittc2dpZCAiIgorIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGhhcyBiZWVuICIKKyJkaXNhYmxlZC4iCittc2dzdHIgIiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3VwcG9ydGluZyBsaWJyYXJ5IGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIGdlbmVsIGvDvHTDvHBoYW5lIGRlc3Rla2xlbWUgaGF0YXPEsSBpbGUga2FyxZ/EsWxhxZ90xLEuIgorCittc2dpZCAiQ291bGQgbm90IGluaXRpYWxpemUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAiRGVzdGVrbGV5aWNpIGvDvHTDvHBoYW5lIGJhxZ9sYXTEsWxhbWFkxLEuIgorCittc2dpZCAiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIkRlc3Rla2xleWljaSBrw7x0w7xwaGFuZSBrYXBhdMSxbGFtYWTEsS4iCisKKyMsIGZ1enp5Cittc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJEZXN0ZWtsZXlpY2kga8O8dMO8cGhhbmUga2FwYXTEsWxhbWFkxLEuIgorCittc2dpZCAiRW5jb2RpbmcgZXJyb3IuIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCByZXNvdXJjZSBlcnJvci4iCittc2dzdHIgIkdTdHJlYW1lciBnZW5lbCB0ZW1lbCBrw7x0w7xwaGFuZSBoYXRhc8SxIGlsZSBrYXLFn8SxbGHFn3TEsS4iCisKK21zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgorbXNnc3RyICJLYXluYWsgYnVsdW5hbWFkxLEuIgorCittc2dpZCAiUmVzb3VyY2UgYnVzeSBvciBub3QgYXZhaWxhYmxlLiIKK21zZ3N0ciAiS2F5bmFrIG1lxZ9ndWwgdmV5YSB1bGHFn8SxbGFiaWxpciBkZcSfaWwuIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcuIgorbXNnc3RyICJPa3VtYSBpw6dpbiBrYXluYWsgYcOnxLFsYW1hZMSxLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiWWF6bWEgacOnaW4ga2F5bmFrIGHDp8SxbGFtYWTEsS4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCittc2dzdHIgIk9rdW1hIHZlIHlhem1hIGnDp2luIGtheW5hayBhw6fEsWxhbWFkxLEuIgorCittc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKK21zZ3N0ciAiS2F5bmFrIGthcGF0xLFsYW1hZMSxLiIKKworbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gcmVzb3VyY2UuIgorbXNnc3RyICJLYXluYWt0YW4gb2t1bmFtYWTEsS4iCisKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gcmVzb3VyY2UuIgorbXNnc3RyICJLYXluYcSfYSB5YXrEsWxhbWFkxLEuIgorCittc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCittc2dzdHIgIktheW5hayDDvHplcmluZGUgYXRsYW1hIHlhcMSxbGFtYWTEsS4iCisKK21zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgorbXNnc3RyICJLYXluYWsgZcWfemFtYW5sYW5kxLFyxLFsYW1hZMSxLiIKKworbXNnaWQgIkNvdWxkIG5vdCBnZXQvc2V0IHNldHRpbmdzIGZyb20vb24gcmVzb3VyY2UuIgorbXNnc3RyICJLYXluYcSfYSBkZcSfZXJsZXIgYXRhbmFtYWTEsSB5YSBkYSBhbMSxbmFtYWTEsS4iCisKK21zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN0cmVhbSBlcnJvci4iCittc2dzdHIgIkdTdHJlYW1lciBnZW5lbCB0ZW1lbCBrw7x0w7xwaGFuZSBoYXRhc8SxIGlsZSBrYXLFn8SxbGHFn3TEsS4iCisKK21zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCittc2dzdHIgIiIKKyLDlsSfZSBidSBha8SxbcSxbiBpxZ9sZW1lc2luaSBnZXLDp2VrbGXFn3RpcmVtaXlvci4gTMO8dGZlbiBoYXRhIGJpbGRpcmltaW5kZSAiCisiYnVsdW51bi4iCisKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIHR5cGUgb2Ygc3RyZWFtLiIKK21zZ3N0ciAiQWvEsW0gdMO8csO8IGJlbGlybGVuZW1lZGkuIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBvZiBhIGRpZmZlcmVudCB0eXBlIHRoYW4gaGFuZGxlZCBieSB0aGlzIGVsZW1lbnQuIgorbXNnc3RyICJBa8SxbSBidSDDtsSfZSB0YXJhZsSxbmRhbiBpxZ9sZW5lbiB0w7xyZGVuIGZhcmtsxLEgYmlyIHTDvHJkZS4iCisKK21zZ2lkICJUaGVyZSBpcyBubyBjb2RlYyBwcmVzZW50IHRoYXQgY2FuIGhhbmRsZSB0aGUgc3RyZWFtJ3MgdHlwZS4iCittc2dzdHIgIkFrxLFtIHTDvHLDvG7DvCBpxZ9sZXllYmlsZWNlayBrb2RlayBidWx1bm11eW9yLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZWNvZGUgc3RyZWFtLiIKK21zZ3N0ciAiQWvEsW0gw6fDtnrDvG1sZW5lbWVkaS4iCisKK21zZ2lkICJDb3VsZCBub3QgZW5jb2RlIHN0cmVhbS4iCittc2dzdHIgIkFrxLFtIGtvZGxhbmFtYWTEsS4iCisKK21zZ2lkICJDb3VsZCBub3QgZGVtdWx0aXBsZXggc3RyZWFtLiIKK21zZ3N0ciAiQWvEsW0gw6dva2xhbWFzxLEgZ2VyaXllIGFsxLFuYW1hZMSxLiIKKworbXNnaWQgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKK21zZ3N0ciAiQWvEsW0gw6dva2xhbmTEsXLEsWxhbWFkxLEuIgorCisjLCBmdXp6eQorbXNnaWQgIlRoZSBzdHJlYW0gaXMgaW4gdGhlIHdyb25nIGZvcm1hdC4iCittc2dzdHIgIkFrxLFtIHlhbmzEscWfIGJpw6dpbWRlLiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBkZWNyeXB0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGNhbid0IGJlIGRlY3J5cHRlZCBiZWNhdXNlIG5vIHN1aXRhYmxlIGtleSBoYXMgIgorImJlZW4gc3VwcGxpZWQuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzLiIKK21zZ3N0ciAiJXMgZXRraSBhbGFuxLEgacOnaW4gaGnDpyBoYXRhIGlsZXRpc2kgeW9rLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMgYW5kIGNvZGUgJWQuIgorbXNnc3RyICIlcyBldGtpIGFsYW7EsSB2ZSAlZCBrb2R1IGnDp2luIHN0YW5kYXJ0IGhhdGEgaWxldGlzaSB5b2suIgorCittc2dpZCAiU2VsZWN0ZWQgY2xvY2sgY2Fubm90IGJlIHVzZWQgaW4gcGlwZWxpbmUuIgorbXNnc3RyICIiCisKK21zZ2lkICJ0aXRsZSIKK21zZ3N0ciAiYmHFn2zEsWsiCisKK21zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIgorbXNnc3RyICJ5YXlnxLFuIG9sYXJhayBrdWxsYW7EsWxhbiBiYcWfbMSxayIKKworbXNnaWQgInRpdGxlIHNvcnRuYW1lIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAieWF5Z8SxbiBvbGFyYWsga3VsbGFuxLFsYW4gYmHFn2zEsWsiCisKK21zZ2lkICJhcnRpc3QiCittc2dzdHIgInNhbmF0w6fEsSIKKworbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAia2F5xLF0dGFuIHNvcnVtbHUgb2xhbiBracWfaSB5YSBkYSBracWfaWxlciIKKworbXNnaWQgImFydGlzdCBzb3J0bmFtZSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAia2F5xLF0dGFuIHNvcnVtbHUgb2xhbiBracWfaSB5YSBkYSBracWfaWxlciIKKworbXNnaWQgImFsYnVtIgorbXNnc3RyICJhbGLDvG0iCisKK21zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSIKK21zZ3N0ciAiYnUgYmlsZ2l5aSBpw6dlcmVuIGFsYsO8bSIKKworbXNnaWQgImFsYnVtIHNvcnRuYW1lIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgImJ1IGJpbGdpeWkgacOnZXJlbiBhbGLDvG0iCisKKyMsIGZ1enp5Cittc2dpZCAiYWxidW0gYXJ0aXN0IgorbXNnc3RyICJzYW5hdMOnxLEiCisKK21zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQiCittc2dzdHIgIiIKKworbXNnaWQgImFsYnVtIGFydGlzdCBzb3J0bmFtZSIKK21zZ3N0ciAiIgorCittc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkIgorbXNnc3RyICIiCisKK21zZ2lkICJkYXRlIgorbXNnc3RyICJ0YXJpaCIKKworIywgZnV6enkKK21zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCittc2dzdHIgImJ1IHZlcmluaW4gb2x1xZ90dXJ1bGR1xJ91IHRhcmloIChKdWxpYW4gdGFrdmltaSBnw7xubGVyaSBvbGFyYWspIgorCisjLCBmdXp6eQorbXNnaWQgImRhdGV0aW1lIgorbXNnc3RyICJ0YXJpaCIKKworIywgZnV6enkKK21zZ2lkICJkYXRlIGFuZCB0aW1lIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdzdERhdGVUaW1lIHN0cnVjdHVyZSkiCittc2dzdHIgImJ1IHZlcmluaW4gb2x1xZ90dXJ1bGR1xJ91IHRhcmloIChKdWxpYW4gdGFrdmltaSBnw7xubGVyaSBvbGFyYWspIgorCittc2dpZCAiZ2VucmUiCittc2dzdHIgInTDvHIiCisKK21zZ2lkICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKK21zZ3N0ciAiYnUgdmVyaW5pbiBhaXQgb2xkdcSfdSB0w7xyIgorCittc2dpZCAiY29tbWVudCIKK21zZ3N0ciAieW9ydW0iCisKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKK21zZ3N0ciAidmVyaXlpIHlvcnVtbGF5YW4gc2VyYmVzdCBtZXRpbiIKKworIywgZnV6enkKK21zZ2lkICJleHRlbmRlZCBjb21tZW50IgorbXNnc3RyICJ5b3J1bSIKKworIywgZnV6enkKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCittc2dzdHIgInZlcml5aSB5b3J1bWxheWFuIHNlcmJlc3QgbWV0aW4iCisKK21zZ2lkICJ0cmFjayBudW1iZXIiCittc2dzdHIgInBhcsOnYSBudW1hcmFzxLEiCisKK21zZ2lkICJ0cmFjayBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKK21zZ3N0ciAia29sbGVrc2l5b24gacOnaW5kZWtpIHBhcsOnYSBudW1hcmFzxLEiCisKK21zZ2lkICJ0cmFjayBjb3VudCIKK21zZ3N0ciAicGFyw6dhIHNhecSxc8SxIgorCittc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKK21zZ3N0ciAiYnUgcGFyw6dhbsSxbiBhaXQgb2xkdcSfdSBrb2xsZWtzaXlvbnVuIHBhcsOnYSBzYXnEsXPEsSIKKworbXNnaWQgImRpc2MgbnVtYmVyIgorbXNnc3RyICJkaXNrIG51bWFyYXPEsSIKKworbXNnaWQgImRpc2MgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgImtvbGxla3NpeW9uIGnDp2luZGVraSBkaXNrIG51bWFyYXPEsSIKKworbXNnaWQgImRpc2MgY291bnQiCittc2dzdHIgImRpc2sgc2F5xLFzxLEiCisKK21zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKK21zZ3N0ciAiYnUgZGlza2luIGFpdCBvbGR1xJ91IGtvbGxla3NpeW9uZGFraSBkaXNrbGVyaW4gc2F5xLFzxLEiCisKK21zZ2lkICJsb2NhdGlvbiIKK21zZ3N0ciAia29udW0iCisKK21zZ2lkICIiCisiT3JpZ2luIG9mIG1lZGlhIGFzIGEgVVJJIChsb2NhdGlvbiwgd2hlcmUgdGhlIG9yaWdpbmFsIG9mIHRoZSBmaWxlIG9yIHN0cmVhbSAiCisiaXMgaG9zdGVkKSIKK21zZ3N0ciAiIgorCittc2dpZCAiaG9tZXBhZ2UiCittc2dzdHIgIiIKKworbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCittc2dzdHIgIiIKKworbXNnaWQgImRlc2NyaXB0aW9uIgorbXNnc3RyICJ0YW7EsW0iCisKK21zZ2lkICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCittc2dzdHIgInZlcmluaW4gacOnZXJpxJ9pbmkgdGFuxLFtbGF5YW4ga8Sxc2EgbWV0aW4iCisKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICJzw7xyw7xtIgorCittc2dpZCAidmVyc2lvbiBvZiB0aGlzIGRhdGEiCittc2dzdHIgImJ1IHZlcmluaW4gc8O8csO8bcO8IgorCittc2dpZCAiSVNSQyIKK21zZ3N0ciAiSVNSQyIKKworbXNnaWQgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKK21zZ3N0ciAiIgorIlVsdXNsYXJhcmFzxLEgU3RhbmRhcnQgS2F5xLF0IEtvZHUgLSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIGFkcmVzaW5lIGJha8SxbiIKKworbXNnaWQgIm9yZ2FuaXphdGlvbiIKK21zZ3N0ciAia3VydW0iCisKK21zZ2lkICJjb3B5cmlnaHQiCittc2dzdHIgInRlbGlmIGhha2vEsSIKKworbXNnaWQgImNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgInZlcmluaW4gdGVsaWYgaGFra8SxIG5vdHUiCisKKyMsIGZ1enp5Cittc2dpZCAiY29weXJpZ2h0IHVyaSIKK21zZ3N0ciAidGVsaWYgaGFra8SxIgorCisjLCBmdXp6eQorbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAidmVyaW5pbiB0ZWxpZiBoYWtrxLEgbm90dSIKKworIywgZnV6enkKK21zZ2lkICJlbmNvZGVkIGJ5IgorbXNnc3RyICJrb2RsYXnEsWPEsSIKKworbXNnaWQgIm5hbWUgb2YgdGhlIGVuY29kaW5nIHBlcnNvbiBvciBvcmdhbml6YXRpb24iCittc2dzdHIgIiIKKworbXNnaWQgImNvbnRhY3QiCittc2dzdHIgImlsZXRpxZ9pbSIKKworbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCittc2dzdHIgImlsZXRpxZ9pbSBiaWxnaXNpIgorCittc2dpZCAibGljZW5zZSIKK21zZ3N0ciAibGlzYW5zIgorCittc2dpZCAibGljZW5zZSBvZiBkYXRhIgorbXNnc3RyICJ2ZXJpbmluIGxpc2Fuc8SxIgorCisjLCBmdXp6eQorbXNnaWQgImxpY2Vuc2UgdXJpIgorbXNnc3RyICJsaXNhbnMiCisKKyMsIGZ1enp5Cittc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJ2ZXJpbmluIGxpc2Fuc8SxIgorCittc2dpZCAicGVyZm9ybWVyIgorbXNnc3RyICJpY3JhIGVkZW4iCisKK21zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKK21zZ3N0ciAiaWNyYSBlZGVuIGtpxZ9pIgorCittc2dpZCAiY29tcG9zZXIiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciCittc2dzdHIgImthecSxdHRhbiBzb3J1bWx1IG9sYW4ga2nFn2kgeWEgZGEga2nFn2lsZXIiCisKK21zZ2lkICJkdXJhdGlvbiIKK21zZ3N0ciAic8O8cmUiCisKK21zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKK21zZ3N0ciAiR1N0cmVhbWVyIHphbWFuIGJpcmltaSAobmFubyBzYW5peWUpIG9sYXJhayB1enVubHVrIgorCittc2dpZCAiY29kZWMiCittc2dzdHIgImtvZGVrIgorCittc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJ2ZXJpbmluIHNha2xhbmTEscSfxLEga29kZWsiCisKK21zZ2lkICJ2aWRlbyBjb2RlYyIKK21zZ3N0ciAidmlkZW8ga29kZWtpIgorCittc2dpZCAiY29kZWMgdGhlIHZpZGVvIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICJ2aWRlb251biBzYWtsYW5kxLHEn8SxIGtvZGVrIgorCittc2dpZCAiYXVkaW8gY29kZWMiCittc2dzdHIgInNlcyBrb2Rla2kiCisKK21zZ2lkICJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgInNlcyB2ZXJpc2luaW4gc2FrbGFuZMSxxJ/EsSBrb2RlayIKKworIywgZnV6enkKK21zZ2lkICJzdWJ0aXRsZSBjb2RlYyIKK21zZ3N0ciAidmlkZW8ga29kZWtpIgorCisjLCBmdXp6eQorbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAidmlkZW9udW4gc2FrbGFuZMSxxJ/EsSBrb2RlayIKKworIywgZnV6enkKK21zZ2lkICJjb250YWluZXIgZm9ybWF0IgorbXNnc3RyICJpbGV0acWfaW0gYmlsZ2lzaSIKKworIywgZnV6enkKK21zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAidmVyaW5pbiBzYWtsYW5kxLHEn8SxIGtvZGVrIgorCittc2dpZCAiYml0cmF0ZSIKK21zZ3N0ciAiw7ZybmVrbGVtZSBoxLF6xLEiCisKK21zZ2lkICJleGFjdCBvciBhdmVyYWdlIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJiaXQvcyBvbGFyYWsgb3J0YWxhbWEgdmV5YSBrZXNpbiDDtnJuZWtsZW1lIGjEsXrEsSIKKworbXNnaWQgIm5vbWluYWwgYml0cmF0ZSIKK21zZ3N0ciAibm9taW5hbCDDtnJuZWtsZW1lIGjEsXrEsSIKKworbXNnaWQgIm5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgImJpdC9zIG9sYXJhayBub21pbmFsIMO2cm5la2xlbWUgaMSxesSxIgorCittc2dpZCAibWluaW11bSBiaXRyYXRlIgorbXNnc3RyICJhc2dhcmkgw7ZybmVrbGVtZSBoxLF6xLEiCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJiaXQvcyBvbGFyYWsgYXNnYXJpIMO2cm5la2xlbWUgaMSxesSxIgorCittc2dpZCAibWF4aW11bSBiaXRyYXRlIgorbXNnc3RyICJhemFtaSDDtnJuZWtsZW1lIGjEsXrEsSIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgImJpdC9zIG9sYXJhayBhemFtaSDDtnJuZWtsZW1lIGjEsXrEsSIKKworbXNnaWQgImVuY29kZXIiCittc2dzdHIgImtvZGxhecSxY8SxIgorCittc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiYnUgYWvEsW3EsSBrb2RsYXJrZW4ga3VsbGFuxLFsYWNhayBrb2RsYXnEsWPEsSIKKworbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKK21zZ3N0ciAia29kbGF5xLFjxLEgc8O8csO8bcO8IgorCittc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiYnUgYWvEsW3EsSBrb2RsYXJrZW4ga3VsbGFuxLFsYW4ga29kbGF5xLFjxLFuxLFuIHPDvHLDvG3DvCIKKworbXNnaWQgInNlcmlhbCIKK21zZ3N0ciAic2VyaSBudW1hcmFzxLEiCisKK21zZ2lkICJzZXJpYWwgbnVtYmVyIG9mIHRyYWNrIgorbXNnc3RyICJwYXLDp2FuxLFuIHNlcmkgbnVtYXJhc8SxIgorCittc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgorbXNnc3RyICJ0ZWtyYXJrYXphbsOnIHBhcsOnYSBrYXphbmPEsSIKKworbXNnaWQgInRyYWNrIGdhaW4gaW4gZGIiCittc2dzdHIgImRiIG9sYXJhayBwYXLDp2Ega2F6YW5jxLEiCisKK21zZ2lkICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCittc2dzdHIgInRla3JhcmthemFuw6cgcGFyw6dhIMO8c3Qgc8SxbsSxcsSxIgorCittc2dpZCAicGVhayBvZiB0aGUgdHJhY2siCittc2dzdHIgInBhcsOnYW7EsW4gw7xzdCBzxLFuxLFyxLEiCisKK21zZ2lkICJyZXBsYXlnYWluIGFsYnVtIGdhaW4iCittc2dzdHIgInRla3JhcmthemFuw6cgYWxiw7xtIGthemFuY8SxIgorCittc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKK21zZ3N0ciAiZGIgb2xhcmFrIGFsYsO8bSBrYXphbmPEsSIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKK21zZ3N0ciAidGVrcmFya2F6YW7DpyBhbGLDvG0gw7xzdCBzxLFuxLFyxLEiCisKK21zZ2lkICJwZWFrIG9mIHRoZSBhbGJ1bSIKK21zZ3N0ciAiYWxiw7xtIMO8c3Qgc8SxbsSxcsSxIgorCisjLCBmdXp6eQorbXNnaWQgInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIgorbXNnc3RyICJ0ZWtyYXJrYXphbsOnIHBhcsOnYSDDvHN0IHPEsW7EsXLEsSIKKworbXNnaWQgInJlZmVyZW5jZSBsZXZlbCBvZiB0cmFjayBhbmQgYWxidW0gZ2FpbiB2YWx1ZXMiCittc2dzdHIgIiIKKworbXNnaWQgImxhbmd1YWdlIGNvZGUiCittc2dzdHIgIiIKKworbXNnaWQgImxhbmd1YWdlIGNvZGUgZm9yIHRoaXMgc3RyZWFtLCBjb25mb3JtaW5nIHRvIElTTy02MzktMSIKK21zZ3N0ciAiIgorCittc2dpZCAiaW1hZ2UiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICJidSBha8SxbcSxIGtvZGxhcmtlbiBrdWxsYW7EsWxhY2FrIGtvZGxhecSxY8SxIgorCisjLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKK21zZ2lkICJwcmV2aWV3IGltYWdlIgorbXNnc3RyICIiCisKK21zZ2lkICJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgIiIKKworbXNnaWQgImF0dGFjaG1lbnQiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJmaWxlIGF0dGFjaGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICJidSBha8SxbcSxIGtvZGxhcmtlbiBrdWxsYW7EsWxhY2FrIGtvZGxhecSxY8SxIgorCittc2dpZCAiYmVhdHMgcGVyIG1pbnV0ZSIKK21zZ3N0ciAiIgorCittc2dpZCAibnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8iCittc2dzdHIgIiIKKworbXNnaWQgImtleXdvcmRzIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiY29tbWEgc2VwYXJhdGVkIGtleXdvcmRzIGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQiCittc2dzdHIgInZlcmluaW4gacOnZXJpxJ9pbmkgdGFuxLFtbGF5YW4ga8Sxc2EgbWV0aW4iCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIG5hbWUiCittc2dzdHIgImtvbnVtIgorCittc2dpZCAiIgorImh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aXZlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciAiCisicHJvZHVjZWQiCittc2dzdHIgIiIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBsYXRpdHVkZSIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorImdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yICIKKyJzb3V0aGVybiBsYXRpdHVkZXMpIgorbXNnc3RyICIiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbG9uZ2l0dWRlIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCisibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgorbXNnc3RyICIiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gZWxldmF0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKKyJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIGNvdW50cnkiCittc2dzdHIgImtvbnVtIgorCittc2dpZCAiY291bnRyeSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKK21zZ3N0ciAia29udW0iCisKK21zZ2lkICJjaXR5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKK21zZ3N0ciAia29udW0iCisKK21zZ2lkICIiCisiYSBsb2NhdGlvbiB3aGl0aGluIGEgY2l0eSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgb3IgY3JlYXRlZCAoZS5nLiAiCisidGhlIG5laWdoYm9yaG9vZCkiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gaG9yaXpvbnRhbCBlcnJvciIKK21zZ3N0ciAia29udW0iCisKK21zZ2lkICJleHBlY3RlZCBlcnJvciBvZiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbmluZyBtZWFzdXJlcyAoaW4gbWV0ZXJzKSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKK21zZ3N0ciAia29udW0iCisKK21zZ2lkICIiCisibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBpbiBtL3MiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgorbXNnc3RyICJrb251bSIKKworbXNnaWQgIiIKKyJpbmRpY2F0ZXMgdGhlIG1vdmVtZW50IGRpcmVjdGlvbiBvZiB0aGUgZGV2aWNlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgb2YgYSAiCisibWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sIDAgIgorIm1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBjYXB0dXJlIGRpcmVjdGlvbiIKK21zZ3N0ciAia29udW0iCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGRldmljZSBpcyBwb2ludGluZyB0byB3aGVuIGNhcHR1cmluZyAgYSBtZWRpYS4gIgorIkl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIHJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSAiCisiZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICdzaG93IG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lJyBoZXJlCittc2dpZCAic2hvdyBuYW1lIgorbXNnc3RyICIiCisKK21zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQorbXNnaWQgInNob3cgc29ydG5hbWUiCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImVwaXNvZGUgbnVtYmVyIgorbXNnc3RyICJkaXNrIG51bWFyYXPEsSIKKworbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAic2Vhc29uIG51bWJlciIKK21zZ3N0ciAiZGlzayBudW1hcmFzxLEiCisKK21zZ2lkICJUaGUgc2Vhc29uIG51bWJlciBvZiB0aGUgc2hvdyB0aGUgbWVkaWEgaXMgcGFydCBvZiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImx5cmljcyIKK21zZ3N0ciAibGlzYW5zIgorCittc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgorbXNnc3RyICIiCisKK21zZ2lkICJjb21wb3NlciBzb3J0bmFtZSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZywgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgImthecSxdHRhbiBzb3J1bWx1IG9sYW4ga2nFn2kgeWEgZGEga2nFn2lsZXIiCisKK21zZ2lkICJncm91cGluZyIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKKyJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAidXNlciByYXRpbmciCittc2dzdHIgInPDvHJlIgorCittc2dpZCAiIgorIlJhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgdXNlci4gVGhlIGhpZ2hlciB0aGUgcmFuaywgdGhlIG1vcmUgdGhlIHVzZXIgbGlrZXMgIgorInRoaXMgbWVkaWEiCittc2dzdHIgIiIKKworbXNnaWQgImRldmljZSBtYW51ZmFjdHVyZXIiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICJidSBha8SxbcSxIGtvZGxhcmtlbiBrdWxsYW7EsWxhbiBrb2RsYXnEsWPEsW7EsW4gc8O8csO8bcO8IgorCittc2dpZCAiZGV2aWNlIG1vZGVsIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICJidSBha8SxbcSxIGtvZGxhcmtlbiBrdWxsYW7EsWxhbiBrb2RsYXnEsWPEsW7EsW4gc8O8csO8bcO8IgorCisjLCBmdXp6eQorbXNnaWQgImFwcGxpY2F0aW9uIG5hbWUiCittc2dzdHIgImtvbnVtIgorCisjLCBmdXp6eQorbXNnaWQgIkFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSIKK21zZ3N0ciAiYnUgYWvEsW3EsSBrb2RsYXJrZW4ga3VsbGFuxLFsYW4ga29kbGF5xLFjxLFuxLFuIHPDvHLDvG3DvCIKKworbXNnaWQgImFwcGxpY2F0aW9uIGRhdGEiCittc2dzdHIgIiIKKworbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCittc2dzdHIgIiIKKworbXNnaWQgImltYWdlIG9yaWVudGF0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICJIb3cgdGhlIGltYWdlIHNob3VsZCBiZSByb3RhdGVkIG9yIGZsaXBwZWQgYmVmb3JlIGRpc3BsYXkiCittc2dzdHIgIiIKKworbXNnaWQgIiwgIgorbXNnc3RyICIsICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgorbXNnc3RyICJIQVRBOiAlcyDDtsSfZXNpbmRlbjogJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQWRkaXRpb25hbCBkZWJ1ZyBpbmZvOlxuIgorIiVzXG4iCittc2dzdHIgIiIKKyJFayBoYXRhIGF5xLFrbGFtYSBiaWxnaXNpOlxuIgorIiVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgorbXNnc3RyICJiZWxpcnRpbGVuIGJvxZ8gaWtpbGkgXCIlc1wiLCBpemluIHZlcmlsbWVkaSIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBiaW4gXCIlc1wiLCBza2lwcGluZyIKK21zZ3N0ciAiXCIlc1wiIGlraWxpc2kgeW9rLCBnZcOnaWxpeW9yIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiIKK21zZ3N0ciAiXCIlMiRzXCIgw7bEn2VzaW5kZSBcIiUxJHNcIiDDtnplbGxpxJ9pIHlvayIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc2V0IHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiB0byBcIiVzXCIiCittc2dzdHIgIlwiJTIkc1wiIMO2xJ9lc2luZGVraSBcIiUxJHNcIiDDtnplbGxpxJ9pbmUgXCIlMyRzXCIgZGXEn2VyaSBhdGFuYW1hZMSxIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgorbXNnc3RyICIlcywgJXMnYSBiYcSfbGFuYW1hZMSxIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICJcIiVzXCIgw7bEn2VzaSB5b2siCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNhcHMgXCIlc1wiIgorbXNnc3RyICJcIiVzXCIga2FiaWxpeWV0bGVyaSBheXLEscWfdMSxcsSxbGFtYWTEsSIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIKK21zZ3N0ciAia2F5bmFrIMO2xJ9lc2kgb2xtYXlhbiBiYcSfIgorCittc2dpZCAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKK21zZ3N0ciAiJ3NpbmsnIMO2xJ9lc2kgb2xtYXlhbiBiYcSfIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNvdXJjZSBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJcIiVzXCIgVVJJJ3NpIGnDp2luIGtheW5hayDDtsSfZXNpIHlvayIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBlbGVtZW50IHRvIGxpbmsgVVJJIFwiJXNcIiB0byIKK21zZ3N0ciAiXCIlc1wiIFVSSSdzaW5pIGJlbGlydGlsZW5lIGJhxJ9sYXlhY2FrIMO2xJ9lIHlvazoiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICJcIiVzXCIgVVJJJ3NpIGnDp2luICdzaW5rJyDDtsSfZXNpIHlvayIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbGluayBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgIlwiJXNcIiBVUkknc2kgacOnaW4gJ3NpbmsnIMO2xJ9lc2kgYmHEn2xhbmFtYWTEsSIKKworbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgorbXNnc3RyICJib8WfIGJvcnVoYXR0xLFuYSBpemluIHZlcmlsbWl5b3IiCisKK21zZ2lkICJJbnRlcm5hbCBjbG9jayBlcnJvci4iCittc2dzdHIgIiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCittc2dzdHIgIiIKKworbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCittc2dzdHIgIiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiIgorCittc2dpZCAiRmlsdGVyIGNhcHMiCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKKyJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgorbXNnc3RyICIiCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiWWF6xLFtIGnDp2luIGhpw6cgYmlyIGRvc3lhIGFkxLEgYmVsaXJ0aWxtZWRpLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCittc2dzdHIgIlwiJXNcIiBkb3N5YXPEsSB5YXrEsW0gacOnaW4gYcOnxLFsYW1hZMSxLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiXCIlc1wiIGthcGF0xLFsxLFya2VuIGhhdGEuIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiXCIlc1wiIGRvc3lhc8SxIHlhesSxbMSxcmtlbiBoYXRhLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiXCIlc1wiIGRvc3lhc8SxIHlhesSxbMSxcmtlbiBoYXRhLiIKKworbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHJlYWRpbmcuIgorbXNnc3RyICJPa3VtYSBpw6dpbiBoacOnIGJpciBkb3N5YSBhZMSxIGJlbGlydGlsbWVkaS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgorbXNnc3RyICJcIiVzXCIgZG9zeWFzxLEgb2t1bWEgacOnaW4gYcOnxLFsYW1hZMSxLiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCittc2dzdHIgIktheW5hxJ9hIGRlxJ9lcmxlciBhdGFuYW1hZMSxIHlhIGRhIGFsxLFuYW1hZMSxLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKK21zZ3N0ciAiXCIlc1wiIGRvc3lhc8SxIGTDvHplbmxpIGJpciBkb3N5YSBkZcSfaWwuIgorCittc2dpZCAiRmFpbGVkIGFmdGVyIGl0ZXJhdGlvbnMgYXMgcmVxdWVzdGVkLiIKK21zZ3N0ciAixLBzdGVuaWxkacSfaSBnaWJpIHRla3JhcmxhbWEgYmHFn2FyxLFzxLF6IG9sZHUuIgorCittc2dpZCAiTm8gVGVtcCBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIgorbXNnc3RyICJLYXluYcSfYSBkZcSfZXJsZXIgYXRhbmFtYWTEsSB5YSBkYSBhbMSxbmFtYWTEsS4iCisKKyMsIGZ1enp5Cittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKK21zZ3N0ciAiXCIlc1wiIGRvc3lhc8SxIHlhesSxbMSxcmtlbiBoYXRhLiIKKworbXNnaWQgImNhcHMiCittc2dzdHIgImthYmlsaXlldGxlciIKKworbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCittc2dzdHIgImFrxLFtZGEgdGVzYml0IGVkaWxlbiBrYWJpbGl5ZXRsZXIiCisKK21zZ2lkICJtaW5pbXVtIgorbXNnc3RyICJhc2dhcmkiCisKK21zZ2lkICJtYXhpbXVtIgorbXNnc3RyICJhemFtaSIKKworbXNnaWQgImZvcmNlIGNhcHMiCittc2dzdHIgIiIKKworbXNnaWQgImZvcmNlIGNhcHMgd2l0aG91dCBkb2luZyBhIHR5cGVmaW5kIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgorbXNnc3RyICJidSBiaWxnaXlpIGnDp2VyZW4gYWxiw7xtIgorCittc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKK21zZ3N0ciAiIgorCittc2dpZCAicmVhZGFibGUiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJ3cml0YWJsZSIKK21zZ3N0ciAiYmHFn2zEsWsiCisKK21zZ2lkICJjb250cm9sbGFibGUiCittc2dzdHIgIiIKKworbXNnaWQgImNoYW5nZWFibGUgaW4gTlVMTCwgUkVBRFksIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCwgUkVBRFkgb3IgUEFVU0VEIHN0YXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKK21zZ3N0ciAiIgorCittc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiVG90YWwgY291bnQ6ICIKK21zZ3N0ciAicGFyw6dhIHNhecSxc8SxIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdGVkIGZpbGUiCittc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdGVkIGZpbGVzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBwbHVnaW4iCittc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdCBlbnRyeSIKK21zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0IGVudHJpZXMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGZlYXR1cmUiCittc2dpZF9wbHVyYWwgIiVkIGZlYXR1cmVzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIywgZnV6enkKK21zZ2lkICJQcmludCBhbGwgZWxlbWVudHMiCittc2dzdHIgIlwiJXNcIiDDtsSfZXNpIHlvayIKKworbXNnaWQgIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgorInBsdWdpbnMgcHJvdmlkZS5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKKyJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgorbXNnc3RyICIiCisKK21zZ2lkICJMaXN0IHRoZSBwbHVnaW4gY29udGVudHMiCittc2dzdHIgIiIKKworbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmlsZTogJXNcbiIKK21zZ3N0ciAiXCIlc1wiIGRvc3lhc8SxIHlhesSxbSBpw6dpbiBhw6fEsWxhbWFkxLEuIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIGVsZW1lbnQgb3IgcGx1Z2luICclcydcbiIKK21zZ3N0ciAiXCIlc1wiIFVSSSdzaSBpw6dpbiBrYXluYWsgw7bEn2VzaSB5b2siCisKK21zZ2lkICJJbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSAoJXMpOiAiCittc2dzdHIgIiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIgorbXNnc3RyICJIQVRBOiAlcyDDtsSfZXNpbmRlbjogJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgorbXNnc3RyICJFVMSwS0VUIEJVTFVORFUgICAgICA6IFwiJXNcIiDDtsSfZXNpIHRhcmFmxLFuZGFuIGJ1bHVuZHUuXG4iCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgcGFkIFwiJXM6JXNcIi5cbiIKK21zZ3N0ciAiRVTEsEtFVCBCVUxVTkRVICAgICAgOiBcIiVzXCIgw7bEn2VzaSB0YXJhZsSxbmRhbiBidWx1bmR1LlxuIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCittc2dzdHIgIkVUxLBLRVQgQlVMVU5EVSAgICAgIDogXCIlc1wiIMO2xJ9lc2kgdGFyYWbEsW5kYW4gYnVsdW5kdS5cbiIKKworbXNnaWQgIkZPVU5EIFRBR1xuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklORk86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCittc2dzdHIgIkhBVEE6ICVzIMO2xJ9lc2luZGVuOiAlc1xuIgorCittc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgImJ1ZmZlcmluZy4uLiIKK21zZ3N0ciAiIgorCittc2dpZCAiRG9uZSBidWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCittc2dzdHIgIiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBlbGVtZW50OiAlc1xuIgorbXNnc3RyICJcIiVzXCIgw7bEn2VzaSB5b2siCisKK21zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCittc2dzdHIgIsOHxLFrdMSxIGV0aWtldGxlcmkgKG1ldGFkYXRhIG9sYXJhayBkYSBiaWxpbmlyKSIKKworbXNnaWQgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCittc2dzdHIgIsOHxLFrdMSxIGR1cnVtIGJpbGdpc2kgdmUgw7Z6ZWxsaWsgdXlhcsSxbGFyxLEiCisKKyMsIGZ1enp5Cittc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiVMOcUsOcTiBkdXJ1bSBiaWxnaXNpbmkgZ8O2c3Rlcm1lIgorCittc2dpZCAiT3V0cHV0IG1lc3NhZ2VzIgorbXNnc3RyICIiCisKK21zZ2lkICJEbyBub3Qgb3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBvZiBUWVBFIgorbXNnc3RyICJUw5xSw5xOIGR1cnVtIGJpbGdpc2luaSBnw7ZzdGVybWUiCisKK21zZ2lkICJUWVBFMSxUWVBFMiwuLi4iCittc2dzdHIgIlTDnFIxLFTDnFIyLC4uLiIKKworbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKK21zZ3N0ciAiSGF0YWzEsSBpxZ9sZXRpY2l5aSBrdXJtYSIKKworbXNnaWQgIlByaW50IGFsbG9jIHRyYWNlIChpZiBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSkiCittc2dzdHIgIidhbGxvYycgdGFraWJpbmkgeWF6ZMSxciAoZGVybGVtZSBzxLFyYXPEsW5kYSBldGtpbmxlxZ90aXJpbG1pxZ9zZSkiCisKK21zZ2lkICJGb3JjZSBFT1Mgb24gc291cmNlcyBiZWZvcmUgc2h1dHRpbmcgdGhlIHBpcGVsaW5lIGRvd24iCittc2dzdHIgIiIKKworbXNnaWQgIkdhdGhlciBhbmQgcHJpbnQgaW5kZXggc3RhdGlzdGljcyIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQ6ICVzLlxuIgorbXNnc3RyICJIQVRBOiBib3J1aGF0dMSxIG9sdcWfdHVydWxhbWFkxLE6ICVzLlxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKK21zZ3N0ciAiSEFUQTogYm9ydWhhdHTEsSBvbHXFn3R1cnVsYW1hZMSxLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IGVycm9uZW91cyBwaXBlbGluZTogJXNcbiIKK21zZ3N0ciAiVVlBUkk6IGhhdGFsxLEgYm9ydWhhdHTEsTogJXNcbiIKKworbXNnaWQgIkVSUk9SOiB0aGUgJ3BpcGVsaW5lJyBlbGVtZW50IHdhc24ndCBmb3VuZC5cbiIKK21zZ3N0ciAiSEFUQTogJ3BpcGVsaW5lJyDDtsSfZXNpIGJ1bHVuYW1hZMSxLlxuIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJFUlJPUjogUGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBhdXNlLlxuIgorbXNnc3RyICJIQVRBOiBib3J1aGF0dMSxIMOnYWxtYWsgaXN0ZW1peW9yLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMSU5HIC4uLlxuIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgorbXNnc3RyICJIQVRBOiBib3J1aGF0dMSxIMOnYWxtYWsgaXN0ZW1peW9yLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKK21zZ3N0ciAiSEFUQTogYm9ydWhhdHTEsSDDp2FsbWFrIGlzdGVtaXlvci5cbiIKKworbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIEZvcmNpbmcgRU9TIG9uIHRoZSBwaXBlbGluZVxuIgorbXNnc3RyICIiCisKK21zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiRU9TIHJlY2VpdmVkIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgd2FpdGluZyBmb3IgRU9TXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgorbXNnc3RyICLDh2FsxLHFn3TEsXJtYSAlIHNvbnJhc8SxIGJpdHRpIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiRnJlZWluZyBwaXBlbGluZSAuLi5cbiIKK21zZ3N0ciAiQk9SVUhBVFRJIMOnYWzEscWfdMSxcsSxbMSxeW9yIC4uLlxuIgorCisjfiBtc2dpZCAiVXNhZ2U6IGdzdC14bWxsYXVuY2ggPGZpbGUueG1sPiBbIGVsZW1lbnQucHJvcGVydHk9dmFsdWUgLi4uIF1cbiIKKyN+IG1zZ3N0ciAiS3VsbGFuxLFtOiBnc3QteG1sbGF1bmNoIDxkb3N5YS54bWw+IFsgw7bEn2Uuw7Z6ZWxsaWs9ZGXEn2VyIC4uLiBdXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogcGFyc2Ugb2YgeG1sIGZpbGUgJyVzJyBmYWlsZWQuXG4iCisjfiBtc2dzdHIgIkhBVEE6IHhtbCBkb3N5YXPEsSAnJXMnIGF5csSxxZ90xLFybWFzxLEgYmHFn2FyxLFzxLF6LlxuIgorCisjfiBtc2dpZCAiRVJST1I6IG5vIHRvcGxldmVsIHBpcGVsaW5lIGVsZW1lbnQgaW4gZmlsZSAnJXMnLlxuIgorI34gbXNnc3RyICJIQVRBOiAnJXMnIGRvc3lhc8SxbmRhIMO8c3Qgc2V2aXllIMO2xJ9lc2kgYnVsdW5hbWFkxLEuXG4iCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiV0FSTklORzogb25seSBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLlxuIgorI34gbXNnc3RyICJVWUFSSTogxZ51IGFuZGEgc2FkZWNlIGJpciB0YW5lIMO8c3Qgc2V2aXllIMO2xJ9lc2kgZGVzdGVrbGVuaXlvci4iCisKKyN+IG1zZ2lkICJFUlJPUjogY291bGQgbm90IHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAlZDogJXMuXG4iCisjfiBtc2dzdHIgIkhBVEE6IGtvbXV0IHNhdMSxcsSxIGFyZ8O8bWFuxLEgJWQgYXlyxLHFn3TEsXLEsWxhbWFkxLE6ICVzLlxuIgorCisjfiBtc2dpZCAiV0FSTklORzogZWxlbWVudCBuYW1lZCAnJXMnIG5vdCBmb3VuZC5cbiIKKyN+IG1zZ3N0ciAiVVlBUkk6ICclcycgaXNpbWxpIMO2xJ9lIGJ1bHVuYW1hZMSxLlxuIgorCisjfiBtc2dpZCAiU2F2ZSB4bWwgcmVwcmVzZW50YXRpb24gb2YgcGlwZWxpbmUgdG8gRklMRSBhbmQgZXhpdCIKKyN+IG1zZ3N0ciAiQm9ydWhhdHTEsW7EsW4geG1sIGJlbGlydGltaW5pIERPU1lBJ3lhIGtheWRldCB2ZSDDp8SxayIKKworI34gbXNnaWQgIkZJTEUiCisjfiBtc2dzdHIgIkRPU1lBIgorCisjLCBmdXp6eQorI34gbXNnaWQgIkRvIG5vdCBpbnN0YWxsIHNpZ25hbCBoYW5kbGVycyBmb3IgU0lHVVNSMSBhbmQgU0lHVVNSMiIKKyN+IG1zZ3N0ciAiSGF0YWzEsSBpxZ9sZXRpY2l5aSBrdXJtYSIKKworI34gbXNnaWQgIkRpc2FibGUgYWNjZWxlcmF0ZWQgQ1BVIGluc3RydWN0aW9ucyIKKyN+IG1zZ3N0ciAiSMSxemxhbmTEsXLEsWxtxLHFnyBDUFUgacWfbGVtbGVyaW5pIGthcGF0IgorCisjfiBtc2dpZCAicGF0aCBsaXN0IGZvciBsb2FkaW5nIHBsdWdpbnMgKHNlcGFyYXRlZCBieSAnIgorI34gbXNnc3RyICJla2xlbnRpIHnDvGtsZW1layBpw6dpbiB5b2wgbGlzdGVzaSAoJyBpbGUgYXnEsXLEsWxtxLHFnyIKKworI34gbXNnaWQgIicpIgorI34gbXNnc3RyICInKSIKKworI34gbXNnaWQgIlNjaGVkdWxlciB0byB1c2UgKCciCisjfiBtc2dzdHIgIkt1bGxhbsSxbGFjYWsgemFtYW5sYW5kxLFyxLFjxLEgKCciCisKKyN+IG1zZ2lkICInIGlzIHRoZSBkZWZhdWx0KSIKKyN+IG1zZ3N0ciAiJyDDtm4gdGFuxLFtbMSxIG9sYW7EsSkiCisKKyN+IG1zZ2lkICJTQ0hFRFVMRVIiCisjfiBtc2dzdHIgIlpBTUFOTEFORElSSUNJIgorCisjfiBtc2dpZCAiUmVnaXN0cnkgdG8gdXNlIgorI34gbXNnc3RyICJLdWxsYW7EsWxhY2FrIGthecSxdCIKKworI34gbXNnaWQgIlJFR0lTVFJZIgorI34gbXNnc3RyICJLQVlJVCIKKworI34gbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZC4gIEZpbGUgYSBidWcuIgorI34gbXNnc3RyICIiCisjfiAiRGFoaWxpIEdTdHJlYW1lciBoYXRhc8SxOiBkdXJ1bSBkZcSfacWfdGlyaWxlbWVkaS4gIEhhdGEgYmlsZGlyaW1pbmRlICIKKyN+ICJidWx1bnVuLiIKKworI34gbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2NoZWR1bGVyIHByb2JsZW0uICBGaWxlIGEgYnVnLiIKKyN+IG1zZ3N0ciAiIgorI34gIkRhaGlsaSBHU3RyZWFtZXIgaGF0YXPEsTogemFtYW5sYW5kxLFyxLFjxLEgc29ydW51LiAgSGF0YSBiaWxkaXJpbWluZGUgIgorI34gImJ1bHVudW4uIgorCisjfiBtc2dpZCAib3JpZ2luYWwgbG9jYXRpb24gb2YgZmlsZSBhcyBhIFVSSSIKKyN+IG1zZ3N0ciAiZG9zeWFuxLFuIFVSSSBvbGFyYWsgw7Z6Z8O8biBrb251bXUiCisKKyN+IG1zZ2lkICJUaGVyZSBpcyBubyBlbGVtZW50IHByZXNlbnQgdG8gaGFuZGxlIHRoZSBzdHJlYW0ncyBtaW1lIHR5cGUgJXMuIgorI34gbXNnc3RyICJBa8SxbcSxbiAlcyBtaW1lIHTDvHLDvG7DvCBpxZ9sZXllYmlsZWNlayBoacOnIGJpciDDtsSfZSB5b2suIgorCisjfiBtc2dpZCAiIgorI34gImNvdWxkIG5vdCBjb252ZXJ0IFwiJXNcIiBzbyB0aGF0IGl0IGZpdHMgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgorI34gbXNnc3RyICIiCisjfiAiXCIlMSRzXCIsIFwiJTMkc1wiIMO2xJ9lc2luZGVraSBcIiUyJHNcIiDDtnplbGxpxJ9pbmluZSB1eWFjYWsgxZ9la2lsZGUgIgorI34gImTDtm7DvMWfdMO8csO8bGVtZWRpIgorCisjfiBtc2dpZCAiU2hvdyBwbHVnaW4gZGV0YWlscyIKKyN+IG1zZ3N0ciAiRWtsZW50aSBkZXRheWxhcsSxbsSxIGfDtnN0ZXIiCisKKyN+IG1zZ2lkICJTaG93IHNjaGVkdWxlciBkZXRhaWxzIgorI34gbXNnc3RyICJaYW1hbmxhbmTEsXLEsWPEsSBkZXRheWxhcsSxbsSxIGfDtnN0ZXIiCisKKyN+IG1zZ2lkICIgaXRlcmF0aW9ucyAoc3VtICUiCisjfiBtc2dzdHIgIiB0ZWtyYXJsYXIgKHRvcGxhbSAlIgorCisjfiBtc2dpZCAiIG5zLCBhdmVyYWdlICUiCisjfiBtc2dzdHIgIiBucywgb3J0YWxhbWEgJSIKKworI34gbXNnaWQgIiBucywgbWluICUiCisjfiBtc2dzdHIgIiBucywgZGFrICUiCisKKyN+IG1zZ2lkICIgbnMsIG1heCAlIgorI34gbXNnc3RyICIgbnMsIGVuIGZhemxhICUiCisKKyN+IG1zZ2lkICIgbnMpLlxuIgorI34gbXNnc3RyICIgbnMpIFxuIgorCisjfiBtc2dpZCAiTnVtYmVyIG9mIHRpbWVzIHRvIGl0ZXJhdGUgcGlwZWxpbmUiCisjfiBtc2dzdHIgIkJvcnVoYXR0xLFuxLFuIGthw6cgZGVmYSB0ZWtyYXJsYW5hY2HEn8SxIgorCisjfiBtc2dpZCAiICAgICAgICAgVHJ5aW5nIHRvIHJ1biBhbnl3YXkuXG4iCisjfiBtc2dzdHIgIiAgICAgICAgIEdlbmUgZGUgw6dhbMSxxZ90xLFybWEgZGVuZW5peW9yLlxuIgpkaWZmIC0tZ2l0IGEvcG8vdWsuZ21vIGIvcG8vdWsuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NGI1NWIKLS0tIC9kZXYvbnVsbAorKysgYi9wby91ay5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vdWsucG8gYi9wby91ay5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjgzYTc1Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vdWsucG8KQEAgLTAsMCArMSwxMjUzIEBACisjIFVrcmFpbmlhbiB0cmFuc2xhdGlvbiB0byBnc3RyZWFtZXIuCisjIENvcHlyaWdodCAoQykgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdzdHJlYW1lciBwYWNrYWdlLgorIworIyBNYXhpbSBWLiBEeml1bWFuZW5rbyA8ZHppdW1hbmVua29AZ21haWwuY29tPiwgMjAwNC0yMDA3LgorIyBZdXJpIENob3Jub2l2YW4gPHl1cmNob3JAdWtyLm5ldD4sIDIwMTEuCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnc3RyZWFtZXIgMC4xMC4zMi4yXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDktMjkgMTQ6NTUrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTEtMDQtMzAgMjA6MjYrMDMwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogWXVyaSBDaG9ybm9pdmFuIDx5dXJjaG9yQHVrci5uZXQ+XG4iCisiTGFuZ3VhZ2UtVGVhbTogVWtyYWluaWFuIDx0cmFuc2xhdGlvbi10ZWFtLXVrQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJMYW5ndWFnZTogdWtcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTM7IHBsdXJhbD0obiUxMD09MSAmJiBuJTEwMCE9MTEgPyAwIDogbiUxMD49MiAmJiBuIgorIiUxMDw9NCAmJiAobiUxMDA8MTAgfHwgbiUxMDA+PTIwKSA/IDEgOiAyKTtcbiIKKyJYLUdlbmVyYXRvcjogTG9rYWxpemUgMS4yXG4iCisKK21zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCittc2dzdHIgItCf0L7QutCw0LfQsNGC0Lgg0LTQsNC90ZYg0YnQvtC00L4g0LLQtdGA0YHRltGXIEdTdHJlYW1lciIKKworbXNnaWQgIk1ha2UgYWxsIHdhcm5pbmdzIGZhdGFsIgorbXNnc3RyICLQktCy0LDQttCw0YLQuCDQstGB0ZYg0L/QvtC/0LXRgNC10LTQttC10L3QvdGPINC/0L7QvNC40LvQutCw0LzQuCIKKworbXNnaWQgIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IgorbXNnc3RyICLQktC40LLQtdGB0YLQuCDQvdCw0Y/QstC90ZYg0LrQsNGC0LXQs9C+0YDRltGXINC00ZbQsNCz0L3QvtGB0YLQuNC60Lgg0ZYg0LfQsNCy0LXRgNGI0LjRgtC4INGA0L7QsdC+0YLRgyIKKworbXNnaWQgIiIKKyJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gNSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKK21zZ3N0ciAiIgorItCi0LjQv9C+0LLQuNC5INGA0ZbQstC10L3RjCDQtNGW0LDQs9C90L7RgdGC0LjQutC4INCy0ZbQtCAxICjQu9C40YjQtSDQv9C+0LzQuNC70LrQuCkg0LTQviA1ICjRg9GB0LUpLCDQsNCx0L4gMCAtINCx0LXQtyAiCisi0LTRltCw0LPQvdC+0YHRgtC40LrQuCIKKworbXNnaWQgIkxFVkVMIgorbXNnc3RyICLQoNCG0JLQldCd0KwiCisKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCisidGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgorbXNnc3RyICIiCisi0J/QtdGA0LXQu9GW0Log0YDQvtC30LTRltC70LXQvdC40YUg0LrQvtC80L7RjiDQv9Cw0YAgwqvQvdCw0LfQstCwX9C60LDRgtC10LPQvtGA0ZbRlzrRgNGW0LLQtdC90YzCuyDQtNC70Y8g0LLRgdGC0LDQvdC+0LLQu9C10L3QvdGPICIKKyLQv9C10LLQvdC40YUg0YDRltCy0L3RltCyINC+0LrRgNC10LzQuNC8INC60LDRgtC10LPQvtGA0ZbRj9C8LiDQn9GA0LjQutC70LDQtDogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgorCittc2dpZCAiTElTVCIKK21zZ3N0ciAi0KHQn9CY0KHQntCaIgorCittc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCittc2dzdHIgItCS0LjQvNC60L3Rg9GC0Lgg0L7RhNC+0YDQvNC70LXQvdC90Y8g0LrQvtC70YzQvtGA0L7QvCDQtNGW0LDQs9C90L7RgdGC0LjRh9C90LjRhSDQv9C+0LLRltC00L7QvNC70LXQvdGMIgorCittc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCittc2dzdHIgItCS0LjQvNC60L3Rg9GC0Lgg0LTRltCw0LPQvdC+0YHRgtC40LrRgyIKKworbXNnaWQgIkVuYWJsZSB2ZXJib3NlIHBsdWdpbiBsb2FkaW5nIGRpYWdub3N0aWNzIgorbXNnc3RyICLQktC40LzQutC90YPRgtC4INC00L7QutC70LDQtNC90YMg0LTRltCw0LPQvdC+0YHRgtC40LrRgyDQt9Cw0LLQsNC90YLQsNC20LXQvdC90Y8g0LzQvtC00YPQu9GW0LIiCisKK21zZ2lkICJDb2xvbi1zZXBhcmF0ZWQgcGF0aHMgY29udGFpbmluZyBwbHVnaW5zIgorbXNnc3RyICLQodC/0LjRgdC+0Log0YDQvtC30LTRltC70LXQvdC40YUg0LrRgNCw0L/QutC+0Y4g0Lcg0LrQvtC80L7RjiDRiNC70Y/RhdGW0LIsINGP0LrRliDQvNGW0YHRgtGP0YLRjCDQvNC+0LTRg9C70ZYiCisKK21zZ2lkICJQQVRIUyIKK21zZ3N0ciAi0KjQm9Cv0KXQmCIKKworbXNnaWQgIiIKKyJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwbHVnaW5zIHRvIHByZWxvYWQgaW4gYWRkaXRpb24gdG8gdGhlIGxpc3Qgc3RvcmVkIGluICIKKyJlbnZpcm9ubWVudCB2YXJpYWJsZSBHU1RfUExVR0lOX1BBVEgiCittc2dzdHIgIiIKKyLQn9C10YDQtdC70ZbQuiDRgNC+0LfQtNGW0LvQtdC90LjRhSDQutC+0LzQvtGOINC90LDQt9CyINC80L7QtNGD0LvRltCyLCDRidC+INC/0L7Qv9C10YDQtdC00L3RjNC+INC30LDQstCw0L3RgtCw0LbRg9GO0YLRjNGB0Y8sICIKKyLQtNC+0LTQsNGC0LrQvtCy0L4g0LTQviDQv9C10YDQtdC70ZbQutGDLCDRj9C60LjQuSDQt9Cx0LXRgNGW0LPQsNGU0YLRjNGB0Y8g0YMg0LfQvNGW0L3QvdGW0Lkg0L7RgtC+0YfQtdC90L3RjyBHU1RfUExVR0lOX1BBVEgiCisKK21zZ2lkICJQTFVHSU5TIgorbXNnc3RyICLQnNCe0JTQo9Cb0IYiCisKK21zZ2lkICJEaXNhYmxlIHRyYXBwaW5nIG9mIHNlZ21lbnRhdGlvbiBmYXVsdHMgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIgorbXNnc3RyICLQktC40LzQutC90YPRgtC4INC/0LXRgNC10YXQvtC/0LvQtdC90L3RjyDQv9C+0LzQuNC70L7QuiDRgdC10LPQvNC10L3RgtCw0YbRltGXINC/0YDQuCDQt9Cw0LLQsNC90YLQsNC20LXQvdC90ZYg0LzQvtC00YPQu9GW0LIiCisKK21zZ2lkICJEaXNhYmxlIHVwZGF0aW5nIHRoZSByZWdpc3RyeSIKK21zZ3N0ciAi0JLQuNC80LrQvdGD0YLQuCDQvtC90L7QstC70LXQvdC90Y8g0YDQtdGU0YHRgtGA0YMiCisKK21zZ2lkICJEaXNhYmxlIHNwYXduaW5nIGEgaGVscGVyIHByb2Nlc3Mgd2hpbGUgc2Nhbm5pbmcgdGhlIHJlZ2lzdHJ5IgorbXNnc3RyICLQktC40LzQutC90YPRgtC4INGB0YLQstC+0YDQtdC90L3RjyDQtNC+0L/QvtC80ZbQttC90L7Qs9C+INC/0YDQvtGG0LXRgdGDINC/0ZbQtCDRh9Cw0YEg0YHQutCw0L3Rg9Cy0LDQvdC90Y8g0YDQtdGU0YHRgtGA0YMiCisKK21zZ2lkICJHU3RyZWFtZXIgT3B0aW9ucyIKK21zZ3N0ciAi0J/QsNGA0LDQvNC10YLRgNC4IEdTdHJlYW1lciIKKworbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgItCf0L7QutCw0LfQsNGC0Lgg0L/QsNGA0LDQvNC10YLRgNC4IEdTdHJlYW1lciIKKworbXNnaWQgIlVua25vd24gb3B0aW9uIgorbXNnc3RyICLQndC10LLRltC00L7QvNC40Lkg0L/QsNGA0LDQvNC10YLRgCIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgY29yZSBsaWJyYXJ5IGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyINC/0LXRgNC10YXQvtC/0LjQsiDQt9Cw0LPQsNC70YzQvdGDINC/0L7QvNC40LvQutGDINC+0YHQvdC+0LLQvdC+0Zcg0LHRltCx0LvRltC+0YLQtdC60LguIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyBlcnJvci4iCittc2dzdHIgItCg0L7Qt9GA0L7QsdC90LjQutC4IEdTdHJlYW1lciDQvdC1INC/0YDQuNC30L3QsNGH0LjQu9C4INC60L7QtCDQtNC70Y8g0YbRltGU0Zcg0L/QvtC80LjQu9C60LguIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjb2RlIG5vdCBpbXBsZW1lbnRlZC4iCittc2dzdHIgItCS0L3Rg9GC0YDRltGI0L3RjyDQv9C+0LzQuNC70LrQsCBHU3RyZWFtZXI6INC60L7QtCDQvdC1INGA0LXQsNC70ZbQt9C+0LLQsNC90L4uIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgorInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgorbXNnc3RyICIiCisi0J/QvtC80LjQu9C60LAgR1N0cmVhbWVyOiDQvdC1INCy0LTQsNC70L7RgdGPINC30LzRltC90LjRgtC4INGB0YLQsNC9LCDQtNC10Y/QutC40Lwg0LXQu9C10LzQtdC90YLQsNC8INC90LUg0LLQtNCw0LvQvtGB0Y8gIgorItCy0LjQstC10YHRgtC4INC90LDQu9C10LbQvdC1INC/0L7QstGW0LTQvtC80LvQtdC90L3RjyDQv9GA0L4g0L/QvtC80LjQu9C60YMg0Lcg0L/RgNC40YfQuNC90L7RjiDQv9C+0LzQuNC70LrQuC4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHBhZCBwcm9ibGVtLiIKK21zZ3N0ciAi0JLQvdGD0YLRgNGW0YjQvdGPINC/0L7QvNC40LvQutCwIEdTdHJlYW1lcjog0L/RgNC+0LHQu9C10LzQsCDQvdCw0L/QvtCy0L3QtdC90L3Rjy4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiIKK21zZ3N0ciAi0JLQvdGD0YLRgNGW0YjQvdGPINC/0L7QvNC40LvQutCwIEdTdHJlYW1lcjog0L/QvtC80LjQu9C60LAg0L/QvtGC0L7QutGDINCy0LjQutC+0L3QsNC90L3Rjy4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uIgorbXNnc3RyICLQktC90YPRgtGA0ZbRiNC90Y8g0L/QvtC80LjQu9C60LAgR1N0cmVhbWVyOiDQv9C+0LzQuNC70LrQsCDQstGB0YLQsNC90L7QstC70LXQvdC90Y8g0LfQsifRj9C30LrRgy4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgorbXNnc3RyICLQktC90YPRgtGA0ZbRiNC90Y8g0L/QvtC80LjQu9C60LAgR1N0cmVhbWVyOiDQv9C+0LzQuNC70LrQsCDQv9C+0LTRltGXLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2VlayBwcm9ibGVtLiIKK21zZ3N0ciAi0JLQvdGD0YLRgNGW0YjQvdGPINC/0L7QvNC40LvQutCwIEdTdHJlYW1lcjog0L/QvtC80LjQu9C60LAg0LLRgdGC0LDQvdC+0LLQu9C10L3QvdGPINC/0L7Qt9C40YbRltGXLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2FwcyBwcm9ibGVtLiIKK21zZ3N0ciAi0JLQvdGD0YLRgNGW0YjQvdGPINC/0L7QvNC40LvQutCwIEdTdHJlYW1lcjog0L/RgNC+0LHQu9C10LzQsCDQvNC+0LbQu9C40LLQvtGB0YLQtdC5LiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGFnIHByb2JsZW0uIgorbXNnc3RyICLQktC90YPRgtGA0ZbRiNC90Y8g0L/QvtC80LjQu9C60LAgR1N0cmVhbWVyOiDQv9C+0LzQuNC70LrQsCDRgyDQvNGW0YLRhtGWLiIKKworbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCittc2dzdHIgItCjINCy0LDRiNGW0Lkg0LfQsdGW0YDRhtGWIEdTdHJlYW1lciDQstGW0LTRgdGD0YLQvdGW0Lkg0LzQvtC00YPQu9GMLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2xvY2sgcHJvYmxlbS4iCittc2dzdHIgItCS0L3Rg9GC0YDRltGI0L3RjyDQv9C+0LzQuNC70LrQsCBHU3RyZWFtZXI6INC/0L7QvNC40LvQutCwINCz0L7QtNC40L3QvdC40LrQsC4iCisKK21zZ2lkICIiCisiVGhpcyBhcHBsaWNhdGlvbiBpcyB0cnlpbmcgdG8gdXNlIEdTdHJlYW1lciBmdW5jdGlvbmFsaXR5IHRoYXQgaGFzIGJlZW4gIgorImRpc2FibGVkLiIKK21zZ3N0ciAiIgorItCf0YDQvtCz0YDQsNC80LAg0L3QsNC80LDQs9Cw0ZTRgtGM0YHRjyDQstC40LrQvtGA0LjRgdGC0L7QstGD0LLQsNGC0Lgg0LLQuNC80LrQvdC10L3RgyDRhNGD0L3QutGG0ZbQvtC90LDQu9GM0L3RltGB0YLRjCBHU3RyZWFtZXIuIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIg0L/QtdGA0LXRhdC+0L/QuNCyINC30LDQs9Cw0LvRjNC90YMg0L/QvtC80LjQu9C60YMg0L7RgdC90L7QstC90L7RlyDQsdGW0LHQu9GW0L7RgtC10LrQuCDQv9GW0LTRgtGA0LjQvNC60LguIgorCittc2dpZCAiQ291bGQgbm90IGluaXRpYWxpemUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDRltC90ZbRhtGW0LDQu9GW0LfRg9Cy0LDRgtC4INCx0ZbQsdC70ZbQvtGC0LXQutGDINC/0ZbQtNGC0YDQuNC80LrQuC4iCisKK21zZ2lkICJDb3VsZCBub3QgY2xvc2Ugc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDQt9Cw0LrRgNC40YLQuCDQsdGW0LHQu9GW0L7RgtC10LrRgyDQv9GW0LTRgtGA0LjQvNC60LguIgorCittc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC90LDQu9Cw0YjRgtGD0LLQsNGC0Lgg0LHRltCx0LvRltC+0YLQtdC60YMg0L/RltC00YLRgNC40LzQutC4LiIKKworbXNnaWQgIkVuY29kaW5nIGVycm9yLiIKK21zZ3N0ciAi0J/QvtC80LjQu9C60LAg0LrQvtC00YPQstCw0L3QvdGPLiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIg0L/QtdGA0LXRhdC+0L/QuNCyINC30LDQs9Cw0LvRjNC90YMg0L/QvtC80LjQu9C60YMg0YDQtdGB0YPRgNGB0YMuIgorCittc2dpZCAiUmVzb3VyY2Ugbm90IGZvdW5kLiIKK21zZ3N0ciAi0KDQtdGB0YPRgNGB0YMg0L3QtSDQt9C90LDQudC00LXQvdC+LiIKKworbXNnaWQgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCittc2dzdHIgItCg0LXRgdGD0YDRgSDQt9Cw0LnQvdGP0YLQuNC5INCw0LHQviDQvdC10LTQvtGB0YLRg9C/0L3QuNC5LiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKK21zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDQstGW0LTQutGA0LjRgtC4INGA0LXRgdGD0YDRgSDQtNC70Y8g0YfQuNGC0LDQvdC90Y8uIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHdyaXRpbmcuIgorbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINCy0ZbQtNC60YDQuNGC0Lgg0YDQtdGB0YPRgNGBINC00LvRjyDQt9Cw0L/QuNGB0YMuIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgorbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINCy0ZbQtNC60YDQuNGC0Lgg0YDQtdGB0YPRgNGBINC00LvRjyDRh9C40YLQsNC90L3RjyDRh9C4INC30LDQv9C40YHRgy4iCisKK21zZ2lkICJDb3VsZCBub3QgY2xvc2UgcmVzb3VyY2UuIgorbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC30LDQutGA0LjRgtC4INGA0LXRgdGD0YDRgS4iCisKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIHJlc291cmNlLiIKK21zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDQv9GA0L7Rh9C40YLQsNGC0Lgg0Lcg0YDQtdGB0YPRgNGB0YMuIgorCittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKK21zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDQt9Cw0L/QuNGB0LDRgtC4INGDINGA0LXRgdGD0YDRgS4iCisKK21zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKK21zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDQstC40LrQvtC90LDRgtC4INCy0YHRgtCw0L3QvtCy0LvQtdC90L3RjyDQv9C+0LfQuNGG0ZbRlyDRgyDRgNC10YHRg9GA0YHRli4iCisKK21zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgorbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINGB0LjQvdGF0YDQvtC90ZbQt9GD0LLQsNGC0LjRgdGMINC3INGA0LXRgdGD0YDRgdC+0LwuIgorCittc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCittc2dzdHIgIiIKKyLQndC1INCy0LTQsNC70L7RgdGPINC+0YLRgNC40LzQsNGC0Lgg0L/QsNGA0LDQvNC10YLRgNC4INC3INGA0LXRgdGD0YDRgdGDINCw0LHQviDQstGB0YLQsNC90L7QstC40YLQuCDQv9Cw0YDQsNC80LXRgtGA0Lgg0YMg0YDQtdGB0YPRgNGB0ZYuIgorCittc2dpZCAiTm8gc3BhY2UgbGVmdCBvbiB0aGUgcmVzb3VyY2UuIgorbXNnc3RyICLQndCwINGA0LXRgdGD0YDRgdGWINC90LUg0LfQsNC70LjRiNC40LvQvtGB0Ywg0LzRltGB0YbRjy4iCisKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN0cmVhbSBlcnJvci4iCittc2dzdHIgIkdTdHJlYW1lciDQv9C10YDQtdGF0L7Qv9C40LIg0LfQsNCz0LDQu9GM0L3RgyDQv9C+0LzQuNC70LrRgyDQv9C+0YLQvtC60YMuIgorCittc2dpZCAiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBoYW5kbGluZyBvZiB0aGlzIHN0cmVhbS4gUGxlYXNlIGZpbGUgYSBidWcuIgorbXNnc3RyICIiCisi0KMg0LXQu9C10LzQtdC90YLRliDQvdC1INGA0LXQsNC70ZbQt9C+0LLQsNC90L4g0L/QtdGA0LXRhdC+0L/Qu9C10L3QvdGPINGG0YzQvtCz0L4g0L/QvtGC0L7QutGDLiDQodC/0L7QstGW0YHRgtGW0YLRjCDQv9GA0L4g0L/QvtC80LjQu9C60YMuIgorCittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCittc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LLQuNC30L3QsNGH0LjRgtC4INGC0LjQvyDQv9C+0YLQvtC60YMuIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBvZiBhIGRpZmZlcmVudCB0eXBlIHRoYW4gaGFuZGxlZCBieSB0aGlzIGVsZW1lbnQuIgorbXNnc3RyICLQn9C+0YLRltC6INGW0L3RiNC+0LPQviDRgtC40L/RgyDQvdGW0LYg0YLQuNC/LCDRj9C60LjQuSDQvtCx0YDQvtCx0LvRj9GUINGG0LXQuSDQtdC70LXQvNC10L3Rgi4iCisKK21zZ2lkICJUaGVyZSBpcyBubyBjb2RlYyBwcmVzZW50IHRoYXQgY2FuIGhhbmRsZSB0aGUgc3RyZWFtJ3MgdHlwZS4iCittc2dzdHIgItCd0LXQvNCw0ZQg0LrQvtC00LXQutCwLCDRj9C60LjQuSDQt9C00LDRgtC10L0g0L7QsdGA0L7QsdC70Y/RgtC4INGG0LXQuSDRgtC40L8g0L/QvtGC0L7QutGDLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZWNvZGUgc3RyZWFtLiIKK21zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDRgNC+0LfQutC+0LTRg9Cy0LDRgtC4INC/0L7RgtGW0LouIgorCittc2dpZCAiQ291bGQgbm90IGVuY29kZSBzdHJlYW0uIgorbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC30LDQutC+0LTRg9Cy0LDRgtC4INC/0L7RgtGW0LouIgorCittc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LTQtdC80YPQu9GM0YLQuNC/0LvQtdC60YHRg9Cy0LDRgtC4INC/0L7RgtGW0LouIgorCittc2dpZCAiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIgorbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC80YPQu9GM0YLQuNC/0LvQtdC60YHRg9Cy0LDRgtC4INC/0L7RgtGW0LouIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiIKK21zZ3N0ciAi0J/QvtGC0ZbQuiDRgyDQvdC10LrQvtGA0LXQutGC0L3QvtC80YMg0YTQvtGA0LzQsNGC0ZYuIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iCittc2dzdHIgItCU0LDQvdGWINC/0L7RgtC+0LrRgyDQt9Cw0YjQuNGE0YDQvtCy0LDQvdC+LCDQtNC10YjQuNGE0YDRg9Cy0LDQvdC90Y8g0L3QtSDQv9GW0LTRgtGA0LjQvNGD0ZTRgtGM0YHRjy4iCisKK21zZ2lkICIiCisiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGNhbid0IGJlIGRlY3J5cHRlZCBiZWNhdXNlIG5vIHN1aXRhYmxlIGtleSBoYXMgIgorImJlZW4gc3VwcGxpZWQuIgorbXNnc3RyICIiCisi0JTQsNC90ZYg0L/QvtGC0L7QutGDINC30LDRiNC40YTRgNC+0LLQsNC90L4sINGX0YUg0L3QtSDQvNC+0LbQvdCwINC00LXRiNC40YTRgNGD0LLQsNGC0LgsINC+0YHQutGW0LvRjNC60Lgg0L3QtSDQvdCw0LTQsNC90L4gIgorItCy0ZbQtNC/0L7QstGW0LTQvdC+0LPQviDQutC70Y7Rh9CwINC00LXRiNC40YTRgNGD0LLQsNC90L3Rjy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzLiIKK21zZ3N0ciAi0J3QtdC80LDRlCDQv9C+0LLRltC00L7QvNC70LXQvdC90Y8g0L/RgNC+INC/0L7QvNC40LvQutGDINC00LvRjyDQtNC+0LzQtdC90YMgJXMuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcyBhbmQgY29kZSAlZC4iCittc2dzdHIgItCd0LXQvNCw0ZQg0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+INC/0L7QstGW0LTQvtC80LvQtdC90L3RjyDQv9GA0L4g0L/QvtC80LjQu9C60YMg0LTQu9GPINC00L7QvNC10L3RgyAlcyDRgtCwINC60L7QtNGDICVkLiIKKworbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKK21zZ3N0ciAi0J7QsdGA0LDQvdC40Lkg0LPQvtC00LjQvdC90LjQuiDQvdC1INC80L7QttC1INCy0LjQutC+0YDQuNGB0YLQvtCy0YPQstCw0YLQuNGB0Ywg0YMg0LrQvtC90LLQtdGU0YDRli4iCisKK21zZ2lkICJ0aXRsZSIKK21zZ3N0ciAi0L3QsNC30LLQsCIKKworbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUiCittc2dzdHIgItC30LDQs9Cw0LvRjNC90L7QstC20LjQstCw0L3QsCDQvdCw0LfQstCwIgorCittc2dpZCAidGl0bGUgc29ydG5hbWUiCittc2dzdHIgItC90LDQt9Cy0LAgKNC00LvRjyDQstC/0L7RgNGP0LTQutGD0LLQsNC90L3RjykiCisKK21zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICLQt9Cw0LPQsNC70YzQvdC+0LLQttC40LLQsNC90LAg0L3QsNC30LLQsCAo0LTQu9GPINCy0L/QvtGA0Y/QtNC60YPQstCw0L3QvdGPKSIKKworbXNnaWQgImFydGlzdCIKK21zZ3N0ciAi0LLQuNC60L7QvdCw0LLQtdGG0YwiCisKK21zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmciCittc2dzdHIgItC+0YHQvtCx0LAsINCy0ZbQtNC/0L7QstGW0LTQsNC70YzQvdCwINC30LAg0LfQsNC/0LjRgSIKKworbXNnaWQgImFydGlzdCBzb3J0bmFtZSIKK21zZ3N0ciAi0LLQuNC60L7QvdCw0LLQtdGG0YwgKNC00LvRjyDQstC/0L7RgNGP0LTQutGD0LLQsNC90L3RjykiCisKK21zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgItC+0YHQvtCx0LAg0LDQsdC+INC+0YHQvtCx0LgsINCy0ZbQtNC/0L7QstGW0LTQsNC70YzQvdGWINC30LAg0LfQsNC/0LjRgSAo0LTQu9GPINCy0L/QvtGA0Y/QtNC60YPQstCw0L3QvdGPKSIKKworbXNnaWQgImFsYnVtIgorbXNnc3RyICLQsNC70YzQsdC+0LwiCisKK21zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSIKK21zZ3N0ciAi0LDQu9GM0LHQvtC8LCDRidC+INC80ZbRgdGC0LjRgtGMINGG0ZYg0LTQsNC90ZYiCisKK21zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKK21zZ3N0ciAi0LDQu9GM0LHQvtC8ICjQtNC70Y8g0LLQv9C+0YDRj9C00LrRg9Cy0LDQvdC90Y8pIgorCittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgItCw0LvRjNCx0L7QvCwg0Y/QutC40Lkg0LzRltGB0YLQuNGC0Ywg0YbRliDQtNCw0L3RliAo0LTQu9GPINCy0L/QvtGA0Y/QtNC60YPQstCw0L3QvdGPKSIKKworbXNnaWQgImFsYnVtIGFydGlzdCIKK21zZ3N0ciAi0LLQuNC60L7QvdCw0LLQtdGG0Ywg0LDQu9GM0LHQvtC80YMiCisKK21zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQiCittc2dzdHIgItCS0LjQutC+0L3QsNCy0LXRhtGMINCy0YHRjNC+0LPQviDQsNC70YzQsdC+0LzRgyDRgyDRhNC+0YDQvNCw0YLRliDQv9C+0LrQsNC30YMg0LfQsNC/0LjRgdGDIgorCittc2dpZCAiYWxidW0gYXJ0aXN0IHNvcnRuYW1lIgorbXNnc3RyICLQstC40LrQvtC90LDQstC10YbRjCDQsNC70YzQsdC+0LzRgyAo0LTQu9GPINCy0L/QvtGA0Y/QtNC60YPQstCw0L3QvdGPKSIKKworbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCIKK21zZ3N0ciAi0JLQuNC60L7QvdCw0LLQtdGG0Ywg0LLRgdGM0L7Qs9C+INCw0LvRjNCx0L7QvNGDINGDINGE0L7RgNC80LDRgtGWINCy0L/QvtGA0Y/QtNC60YPQstCw0L3QvdGPIgorCittc2dpZCAiZGF0ZSIKK21zZ3N0ciAi0LTQsNGC0LAiCisKK21zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCittc2dzdHIgItC00LDRgtCwINGB0YLQstC+0YDQtdC90L3RjyAo0YMg0YTQvtGA0LzQsNGC0ZYg0YHRgtGA0YPQutGC0YPRgNC4IEdEYXRlKSIKKworbXNnaWQgImRhdGV0aW1lIgorbXNnc3RyICLQtNCw0YLQsC3Rh9Cw0YEiCisKK21zZ2lkICJkYXRlIGFuZCB0aW1lIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdzdERhdGVUaW1lIHN0cnVjdHVyZSkiCittc2dzdHIgItC00LDRgtCwINGWINGH0LDRgSDRgdGC0LLQvtGA0LXQvdC90Y8g0LTQsNC90LjRhSAo0YMg0YTQvtGA0LzQsNGC0ZYg0YHRgtGA0YPQutGC0YPRgNC4IEdzdERhdGVUaW1lKSIKKworbXNnaWQgImdlbnJlIgorbXNnc3RyICLQttCw0L3RgCIKKworbXNnaWQgImdlbnJlIHRoaXMgZGF0YSBiZWxvbmdzIHRvIgorbXNnc3RyICLQttCw0L3RgCDRhtC40YUg0LTQsNC90LjRhSIKKworbXNnaWQgImNvbW1lbnQiCittc2dzdHIgItC60L7QvNC10L3RgtCw0YAiCisKK21zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKK21zZ3N0ciAi0LTQvtCy0ZbQu9GM0L3QuNC5INGC0LXQutGB0YIg0Lcg0L7Qv9C40YHQvtC8INC00LDQvdC40YUiCisKK21zZ2lkICJleHRlbmRlZCBjb21tZW50IgorbXNnc3RyICLRgNC+0LfRiNC40YDQtdC90LjQuSDQutC+0LzQtdC90YLQsNGAIgorCittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgorbXNnc3RyICIiCisi0LTQvtCy0ZbQu9GM0L3QuNC5INGC0LXQutGB0YIg0Lcg0L7Qv9C40YHQvtC8INC00LDQvdC40YUg0YMg0YTQvtGA0LzRliDQutC70Y7Rhz3Qt9C90LDRh9C10L3QvdGPINGH0Lgg0LrQu9GO0YdbZW5dPdC60L7QvNC10L3RgtCw0YAiCisKK21zZ2lkICJ0cmFjayBudW1iZXIiCittc2dzdHIgItC90L7QvNC10YAg0LrQvtC80L/QvtC30LjRhtGW0ZciCisKK21zZ2lkICJ0cmFjayBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKK21zZ3N0ciAi0L3QvtC80LXRgCDQutC+0LzQv9C+0LfQuNGG0ZbRlyDRgyDQt9Cx0ZbRgNGG0ZYiCisKK21zZ2lkICJ0cmFjayBjb3VudCIKK21zZ3N0ciAi0LrRltC70YzQutGW0YHRgtGMINC60L7QvNC/0L7Qt9C40YbRltC5IgorCittc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKK21zZ3N0ciAi0LrRltC70YzQutGW0YHRgtGMINC60L7QvNC/0L7Qt9C40YbRltC5INGDINC30LHRltGA0YbRliwg0LTQviDRj9C60L7RlyDQvdCw0LvQtdC20LjRgtGMINGG0Y8g0LrQvtC80L/QvtC30LjRhtGW0Y8iCisKK21zZ2lkICJkaXNjIG51bWJlciIKK21zZ3N0ciAi0L3QvtC80LXRgCDQtNC40YHQutCwIgorCittc2dpZCAiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKK21zZ3N0ciAi0L3QvtC80LXRgCDQtNC40YHQutCwINGDINC30LHRltGA0YbRliIKKworbXNnaWQgImRpc2MgY291bnQiCittc2dzdHIgItC60ZbQu9GM0LrRltGB0YLRjCDQtNC40YHQutGW0LIiCisKK21zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKK21zZ3N0ciAi0LrRltC70YzQutGW0YHRgtGMINC00LjRgdC60ZbQsiDRgyDQt9Cx0ZbRgNGG0ZYsINC00L4g0Y/QutC+0Zcg0L3QsNC70LXQttC40YLRjCDRhtC10Lkg0LTQuNGB0LoiCisKK21zZ2lkICJsb2NhdGlvbiIKK21zZ3N0ciAi0LDQtNGA0LXRgdCwIgorCittc2dpZCAiIgorIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgorImlzIGhvc3RlZCkiCittc2dzdHIgIiIKKyLQlNC20LXRgNC10LvQviDQtNCw0L3QuNGFINGP0Log0LDQtNGA0LXRgdCwICjQvNGW0YHRhtC1LCDQtNC1INGA0L7Qt9GC0LDRiNC+0LLQsNC90L4g0L/QvtGH0LDRgtC60L7QstGWINC00LDQvdGWINGE0LDQudC70LAg0LDQsdC+ICIKKyLQsNC00YDQtdGB0LAg0L/QvtGI0LjRgNC10L3QvdGPINC/0L7RgtC+0LrRgykiCisKK21zZ2lkICJob21lcGFnZSIKK21zZ3N0ciAi0LTQvtC80LDRiNC90Y8g0YHRgtC+0YDRltC90LrQsCIKKworbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCittc2dzdHIgIiIKKyLQlNC+0LzQsNGI0L3RjyDRgdGC0L7RgNGW0L3QutCwINGG0YzQvtCz0L4g0L3QvtGB0ZbRjyDQtNCw0L3QuNGFICjQtNC+0LzQsNGI0L3RjyDRgdGC0L7RgNGW0L3QutCwINCy0LjQutC+0L3QsNCy0YbRjyDQsNCx0L4g0YTRltC70YzQvNGDKSIKKworbXNnaWQgImRlc2NyaXB0aW9uIgorbXNnc3RyICLQvtC/0LjRgSIKKworbXNnaWQgInNob3J0IHRleHQgZGVzY3JpYmluZyB0aGUgY29udGVudCBvZiB0aGUgZGF0YSIKK21zZ3N0ciAi0LrQvtGA0L7RgtC60LjQuSDRgtC10LrRgdGCINC3INC+0L/QuNGB0L7QvCDQstC80ZbRgdGC0YMg0LTQsNC90LjRhSIKKworbXNnaWQgInZlcnNpb24iCittc2dzdHIgItCy0LXRgNGB0ZbRjyIKKworbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgorbXNnc3RyICLQstC10YDRgdGW0Y8g0YbQuNGFINC00LDQvdC40YUiCisKK21zZ2lkICJJU1JDIgorbXNnc3RyICJJU1JDIgorCittc2dpZCAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgorbXNnc3RyICIiCisi0IbQvdGC0LXRgNC90LDRhtGW0L7QvdCw0LvRjNC90LjQuSDRgdGC0LDQvdC00LDRgNGC0L3QuNC5INC60L7QtCDQt9Cw0L/QuNGB0YMgKElTUkMpIOKAlCDQtNC40LLRltGC0YzRgdGPIGh0dHA6Ly93d3cuaWZwaS4iCisib3JnL2lzcmMvIgorCittc2dpZCAib3JnYW5pemF0aW9uIgorbXNnc3RyICLQvtGA0LPQsNC90ZbQt9Cw0YbRltGPIgorCittc2dpZCAiY29weXJpZ2h0IgorbXNnc3RyICLQsNCy0YLQvtGA0YHRjNC60ZYg0L/RgNCw0LLQsCIKKworbXNnaWQgImNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgItC/0YDQuNC80ZbRgtC60LAg0YnQvtC00L4g0LDQstGC0L7RgNGB0YzQutC40YUg0L/RgNCw0LIg0L3QsCDQtNCw0L3RliIKKworbXNnaWQgImNvcHlyaWdodCB1cmkiCittc2dzdHIgInVyaSDQsNCy0YLQvtGA0YHRjNC60LjRhSDQv9GA0LDQsiIKKworbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiVVJJINC/0YDQuNC80ZbRgtC60Lgg0L/RgNC+INCw0LLRgtC+0YDRgdGM0LrRliDQv9GA0LDQstCwINC00LDQvdC40YUiCisKK21zZ2lkICJlbmNvZGVkIGJ5IgorbXNnc3RyICLQsNCy0YLQvtGAINC60L7QtNGD0LLQsNC90L3RjyIKKworbXNnaWQgIm5hbWUgb2YgdGhlIGVuY29kaW5nIHBlcnNvbiBvciBvcmdhbml6YXRpb24iCittc2dzdHIgItGW0LzigJnRjyDQu9GO0LTQuNC90Lgg0LDQsdC+INC90LDQt9Cy0LAg0YPRgdGC0LDQvdC+0LLQuCwg0Y/QutC+0Y4g0LHRg9C70L4g0LLQuNC60L7QvdCw0L3QviDQutC+0LTRg9Cy0LDQvdC90Y8iCisKK21zZ2lkICJjb250YWN0IgorbXNnc3RyICLQutC+0L3RgtCw0LrRgtC4IgorCittc2dpZCAiY29udGFjdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi0LrQvtC90YLQsNC60YLQvdCwINGW0L3RhNC+0YDQvNCw0YbRltGPIgorCittc2dpZCAibGljZW5zZSIKK21zZ3N0ciAi0LvRltGG0LXQvdC30ZbRjyIKKworbXNnaWQgImxpY2Vuc2Ugb2YgZGF0YSIKK21zZ3N0ciAi0LvRltGG0LXQvdC30ZbRjyDQtNCw0L3QuNGFIgorCittc2dpZCAibGljZW5zZSB1cmkiCittc2dzdHIgInVyaSDQu9GW0YbQtdC90LfRltGXIgorCittc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICJVUkkg0LvRltGG0LXQvdC30ZbRlyDQtNCw0L3QuNGFIgorCittc2dpZCAicGVyZm9ybWVyIgorbXNnc3RyICLQstC40LrQvtC90LDQstC10YbRjCIKKworbXNnaWQgInBlcnNvbihzKSBwZXJmb3JtaW5nIgorbXNnc3RyICLQvtGB0L7QsdCwKNC4KSwg0YnQviDQstC40LrQvtC90LDQu9CwIgorCittc2dpZCAiY29tcG9zZXIiCittc2dzdHIgItC60L7QvNC/0L7Qt9C40YLQvtGAIgorCittc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nIgorbXNnc3RyICLQvtGB0L7QsdCwINGH0Lgg0L7RgdC+0LHQuCwg0Y/QutC40LzQuCDQsdGD0LvQviDRgdGC0LLQvtGA0LXQvdC+INC80YPQt9C40LrRgyDQt9Cw0L/QuNGB0YMiCisKK21zZ2lkICJkdXJhdGlvbiIKK21zZ3N0ciAi0YLRgNC40LLQsNC70ZbRgdGC0YwiCisKK21zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKK21zZ3N0ciAi0YLRgNC40LLQsNC70ZbRgdGC0Ywg0YMg0L7QtNC40L3QuNGG0Y/RhSDQstC40LzRltGA0YMgR1N0cmVhbWVyICjQvdCw0L3QvtGB0LXQutGD0L3QtNC4KSIKKworbXNnaWQgImNvZGVjIgorbXNnc3RyICLQutC+0LTQtdC6IgorCittc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICLQutC+0LTQtdC6LCDRj9C60LjQvCDQt9Cw0LrQvtC00L7QstCw0L3QviDQtNCw0L3RliIKKworbXNnaWQgInZpZGVvIGNvZGVjIgorbXNnc3RyICLQstGW0LTQtdC+0LrQvtC00LXQuiIKKworbXNnaWQgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAi0LrQvtC00LXQuiwg0Y/QutC40Lwg0LfQsNC60L7QtNC+0LLQsNC90L4g0LLRltC00LXQvtC00LDQvdGWIgorCittc2dpZCAiYXVkaW8gY29kZWMiCittc2dzdHIgItCw0YPQtNGW0L7QutC+0LTQtdC6IgorCittc2dpZCAiY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICLQutC+0LTQtdC6LCDRj9C60LjQvCDQt9Cw0LrQvtC00L7QstCw0L3RliDQt9Cy0YPQutC+0LLRliDQtNCw0L3RliIKKworbXNnaWQgInN1YnRpdGxlIGNvZGVjIgorbXNnc3RyICLQutC+0LTQtdC6INGB0YPQsdGC0LjRgtGA0ZbQsiIKKworbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAi0LrQvtC00LXQuiwg0YMg0Y/QutC+0LzRgyDQt9Cx0LXRgNGW0LPQsNGO0YLRjNGB0Y8g0YHRg9Cx0YLQuNGC0YDQuCIKKworbXNnaWQgImNvbnRhaW5lciBmb3JtYXQiCittc2dzdHIgItGE0L7RgNC80LDRgiDQutC+0L3RgtC10LnQvdC10YDQsCIKKworbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICLRhNC+0YDQvNCw0YIg0LrQvtC90YLQtdC50L3QtdGA0LAsINGDINGP0LrQvtC80YMg0LfQsdC10YDRltCz0LDRjtGC0YzRgdGPINC00LDQvdGWIgorCittc2dpZCAiYml0cmF0ZSIKK21zZ3N0ciAi0YnRltC70YzQvdGW0YHRgtGMINC/0L7RgtC+0LrRgyDQsdGW0YLRltCyIgorCittc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAi0YLQvtGH0L3QsCDQsNCx0L4g0L/RgNC40LHQu9C40LfQvdCwINGJ0ZbQu9GM0L3RltGB0YLRjCDQv9C+0YLQvtC60YMg0LHRltGC0ZbQsiDRgyDQsdGW0YIv0YEiCisKK21zZ2lkICJub21pbmFsIGJpdHJhdGUiCittc2dzdHIgItC90L7QvNGW0L3QsNC70YzQvdCwINGJ0ZbQu9GM0L3RltGB0YLRjCDQv9C+0YLQvtC60YMg0LHRltGC0ZbQsiIKKworbXNnaWQgIm5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgItC90L7QvNGW0L3QsNC70YzQvdCwINGJ0ZbQu9GM0L3RltGB0YLRjCDQv9C+0YLQvtC60YMg0LHRltGC0ZbQsiDRgyDQsdGW0YIv0YEiCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCittc2dzdHIgItC80ZbQvdGW0LzQsNC70YzQvdCwINGJ0ZbQu9GM0L3RltGB0YLRjCDQv9C+0YLQvtC60YMg0LHRltGC0ZbQsiIKKworbXNnaWQgIm1pbmltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgItC80ZbQvdGW0LzQsNC70YzQvdCwINGJ0ZbQu9GM0L3RltGB0YLRjCDQv9C+0YLQvtC60YMg0LHRltGC0ZbQsiDRgyDQsdGW0YIv0YEiCisKK21zZ2lkICJtYXhpbXVtIGJpdHJhdGUiCittc2dzdHIgItC80LDQutGB0LjQvNCw0LvRjNC90LAg0YnRltC70YzQvdGW0YHRgtGMINC/0L7RgtC+0LrRgyDQsdGW0YLRltCyIgorCittc2dpZCAibWF4aW11bSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAi0LzQsNC60YHQuNC80LDQu9GM0L3QsCDRidGW0LvRjNC90ZbRgdGC0Ywg0L/QvtGC0L7QutGDINCx0ZbRgtGW0LIg0YMg0LHRltGCL9GBIgorCittc2dpZCAiZW5jb2RlciIKK21zZ3N0ciAi0LrQvtC00YPQstCw0LvRjNC90LjQuiIKKworbXNnaWQgImVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCittc2dzdHIgItC60L7QtNGD0LLQsNC70YzQvdC40LosINGP0LrQuNC5INCy0LjQutC+0YDQuNGB0YLQvtCy0YPQstCw0LLRgdGPINC00LvRjyDQutC+0LTRg9Cy0LDQvdC90Y8g0YbQuNGFINC00LDQvdC40YUiCisKK21zZ2lkICJlbmNvZGVyIHZlcnNpb24iCittc2dzdHIgItCy0LXRgNGB0ZbRjyDQutC+0LTRg9Cy0LDQu9GM0L3QuNC60LAiCisKK21zZ2lkICJ2ZXJzaW9uIG9mIHRoZSBlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgorbXNnc3RyICLQstC10YDRgdGW0Y8g0LrQvtC00YPQstCw0LvRjNC90LjQutCwLCDRj9C60LjQuSDQstC40LrQvtGA0LjRgdGC0L7QstGD0LLQsNCy0YHRjyDQtNC70Y8g0LrQvtC00YPQstCw0L3QvdGPINGG0LjRhSDQtNCw0L3QuNGFIgorCittc2dpZCAic2VyaWFsIgorbXNnc3RyICLQvdC+0LzQtdGAIgorCittc2dpZCAic2VyaWFsIG51bWJlciBvZiB0cmFjayIKK21zZ3N0ciAi0L/QvtGB0LvRltC00L7QstC90LjQuSDQvdC+0LzQtdGAINC60L7QvNC/0L7Qt9C40YbRltGXIgorCittc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgorbXNnc3RyICLRgNGW0LLQtdC90Ywg0LLRltC00YLQstC+0YDQtdC90L3RjyDQutC+0LzQv9C+0LfQuNGG0ZbRlyIKKworbXNnaWQgInRyYWNrIGdhaW4gaW4gZGIiCittc2dzdHIgItGA0ZbQstC10L3RjCDQutC+0LzQv9C+0LfQuNGG0ZbRlywg0YMg0LTQkSIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgcGVhayIKK21zZ3N0ciAi0L/RltC6INCy0ZbQtNGC0LLQvtGA0LXQvdC90Y8g0LrQvtC80L/QvtC30LjRhtGW0ZciCisKK21zZ2lkICJwZWFrIG9mIHRoZSB0cmFjayIKK21zZ3N0ciAi0L/RltC6INC60L7QvNC/0L7Qt9C40YbRltGXIgorCittc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBnYWluIgorbXNnc3RyICLRgNGW0LLQtdC90Ywg0LLRltC00YLQstC+0YDQtdC90L3RjyDQsNC70YzQsdC+0LzRgyIKKworbXNnaWQgImFsYnVtIGdhaW4gaW4gZGIiCittc2dzdHIgItGA0ZbQstC10L3RjCDQsNC70YzQsdC+0LzRgywg0YMg0LTQkSIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKK21zZ3N0ciAi0L/RltC6INCy0ZbQtNGC0LLQvtGA0LXQvdC90Y8g0LDQu9GM0LHQvtC80YMiCisKK21zZ2lkICJwZWFrIG9mIHRoZSBhbGJ1bSIKK21zZ3N0ciAi0L/RltC6INCw0LvRjNCx0L7QvNGDIgorCittc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCittc2dzdHIgItC+0L/QvtGA0L3QuNC5INGA0ZbQstC10L3RjCDQs9GD0YfQvdC+0YHRgtGWINCy0ZbQtNGC0LLQvtGA0LXQvdC90Y8iCisKK21zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgorbXNnc3RyICLQvtC/0L7RgNC90ZYg0YDRltCy0L3RliDQs9GD0YfQvdC+0YHRgtGWINC60L7QvNC/0L7Qt9C40YbRltGXINGH0Lgg0LDQu9GM0LHQvtC80YMiCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIgorbXNnc3RyICLQutC+0LQg0LzQvtCy0LgiCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIGZvciB0aGlzIHN0cmVhbSwgY29uZm9ybWluZyB0byBJU08tNjM5LTEiCittc2dzdHIgItC60L7QtCDQvNC+0LLQuCDQtNC70Y8g0L/QvtGC0L7QutGDLCDQutC+0LQg0LzQsNGUINCy0ZbQtNC/0L7QstGW0LTQsNGC0LggSVNPLTYzOS0xIgorCittc2dpZCAiaW1hZ2UiCittc2dzdHIgItC30L7QsdGA0LDQttC10L3QvdGPIgorCittc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAi0LfQvtCx0YDQsNC20LXQvdC90Y8sINGJ0L4g0YHRgtC+0YHRg9GU0YLRjNGB0Y8g0YbRjNC+0LPQviDQv9C+0YLQvtC60YMiCisKKyMuIFRSQU5TTEFUT1JTOiAncHJldmlldyBpbWFnZScgPSBpbWFnZSB0aGF0IHNob3dzIGEgcHJldmlldyBvZiB0aGUgZnVsbCBpbWFnZQorbXNnaWQgInByZXZpZXcgaW1hZ2UiCittc2dzdHIgItC/0L7Qv9C10YDQtdC00L3RltC5INC/0LXRgNC10LPQu9GP0LQg0LfQvtCx0YDQsNC20LXQvdC90Y8iCisKK21zZ2lkICJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgItC/0L7Qv9C10YDQtdC00L3RltC5INC/0LXRgNC10LPQu9GP0LQg0LfQvtCx0YDQsNC20LXQvdC90Y8sINC/0L7QsuKAmdGP0LfQsNC90L7Qs9C+INC3INGG0LjQvCDQv9C+0YLQvtC60L7QvCIKKworbXNnaWQgImF0dGFjaG1lbnQiCittc2dzdHIgItC00L7Qu9GD0YfQtdC90L3RjyIKKworbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgItGE0LDQudC7LCDQtNC+0LvRg9GH0LXQvdC40Lkg0LTQviDRhtGM0L7Qs9C+INC/0L7RgtC+0LrRgyIKKworbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCittc2dzdHIgItGC0LDQutGC0ZbQsiDQt9CwINGF0LLQuNC70LjQvdGDIgorCittc2dpZCAibnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8iCittc2dzdHIgItC60ZbQu9GM0LrRltGB0YLRjCDRgtCw0LrRgtGW0LIg0LfQstGD0LrRgyDQt9CwINGF0LLQuNC70LjQvdGDIgorCittc2dpZCAia2V5d29yZHMiCittc2dzdHIgItC60LvRjtGH0L7QstGWINGB0LvQvtCy0LAiCisKK21zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKK21zZ3N0ciAi0LLRltC00L7QutGA0LXQvNC70LXQvdGWINC60L7QvNCw0LzQuCDQutC70Y7Rh9C+0LLRliDRgdC70L7QstCwLCDRidC+INC+0L/QuNGB0YPRjtGC0Ywg0LTQsNC90ZYiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKK21zZ3N0ciAi0LPQtdC+0LPRgNCw0YTRltGH0L3QsCDQvdCw0LfQstCwIgorCittc2dpZCAiIgorImh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aXZlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciAiCisicHJvZHVjZWQiCittc2dzdHIgIiIKKyLQt9GA0YPRh9C90LjQuSDQtNC70Y8g0YfQuNGC0LDQvdC90Y8g0L7Qv9C40YHQvtCy0LAg0L3QsNC30LLQsCDQvNGW0YHRhtC10LLQvtGB0YLRliwg0YMg0Y/QutGW0Lkg0LHRg9C70L4g0LfQsNC/0LjRgdCw0L3QviDQsNCx0L4gIgorItGB0YLQstC+0YDQtdC90L4g0LTQsNC90ZYiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCittc2dzdHIgItCz0LXQvtCz0YDQsNGE0ZbRh9C90LAg0YjQuNGA0L7RgtCwIgorCittc2dpZCAiIgorImdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yICIKKyJzb3V0aGVybiBsYXRpdHVkZXMpIgorbXNnc3RyICIiCisi0LPQtdC+0LPRgNCw0YTRltGH0L3QsCDRiNC40YDQvtGC0LAg0LzRltGB0YbQtdCy0L7RgdGC0ZYsINC00LUg0LHRg9C70L4g0LfQsNC/0LjRgdCw0L3QviDQsNCx0L4g0YHRgtCy0L7RgNC10L3QviDQtNCw0L3RliDRgyDQs9GA0LDQtNGD0YHQsNGFICIKKyLQstGW0LTQv9C+0LLRltC00L3QviDQtNC+IFdHUzg0ICjQvdGD0LvRjCDigJQg0LXQutCy0LDRgtC+0YAsINCy0ZbQtOKAmdGU0LzQvdGWINC30L3QsNGH0LXQvdC90Y8g0LLRltC00L/QvtCy0ZbQtNCw0Y7RgtGMICIKKyLQv9GW0LLQtNC10L3QvdGW0Lkg0YjQuNGA0L7RgtGWKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBsb25naXR1ZGUiCittc2dzdHIgItCz0LXQvtCz0YDQsNGE0ZbRh9C90LAg0LTQvtCy0LPQvtGC0LAiCisKK21zZ2lkICIiCisiZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCisibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgorbXNnc3RyICIiCisi0LPQtdC+0LPRgNCw0YTRltGH0L3QsCDQtNC+0LLQs9C+0YLQsCDQvNGW0YHRhtC10LLQvtGB0YLRliwg0LTQtSDQsdGD0LvQviDQt9Cw0L/QuNGB0LDQvdC+INCw0LHQviDRgdGC0LLQvtGA0LXQvdC+INC00LDQvdGWINGDICIKKyLQs9GA0LDQtNGD0YHQsNGFINCy0ZbQtNC/0L7QstGW0LTQvdC+INC00L4gV0dTODQgKNC90YPQu9GMIOKAlCDQvdGD0LvRjNC+0LLQuNC5INC80LXRgNC40LTRltCw0L0g0JPRgNC40L3QstGW0YfQsCwg0LLRltC04oCZ0ZTQvNC90ZYgIgorItC30L3QsNGH0LXQvdC90Y8g0LLRltC00L/QvtCy0ZbQtNCw0Y7RgtGMINC30LDRhdGW0LTQvdGW0Lkg0LTQvtCy0LPQvtGC0ZYpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKK21zZ3N0ciAi0LPQtdC+0LPRgNCw0YTRltGH0L3QsCDQstC40YHQvtGC0LAiCisKK21zZ2lkICIiCisiZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKKyJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgorbXNnc3RyICIiCisi0LLQuNGB0L7RgtCwINC90LDQtCDRgNGW0LLQvdC10Lwg0LzQvtGA0Y8sINC00LUg0LHRg9C70L4g0LfQsNC/0LjRgdCw0L3QviDQsNCx0L4g0YHRgtCy0L7RgNC10L3QviDQtNCw0L3RliDRgyDQvNC10YLRgNCw0YUgIgorItCy0ZbQtNC/0L7QstGW0LTQvdC+INC00L4gV0dTODQgKNC90YPQu9GMINCy0ZbQtNC/0L7QstGW0LTQsNGUINGA0ZbQstC90Y4g0LzQvtGA0Y8pIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNvdW50cnkiCittc2dzdHIgItC60YDQsNGX0L3QsCIKKworbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICLQutGA0LDRl9C90LAgKNCw0L3Qs9C70ZbQudGB0YzQutC+0Y4pLCDRgyDRj9C60ZbQuSDQsdGD0LvQviDQt9Cw0L/QuNGB0LDQvdC+INCw0LHQviDRgdGC0LLQvtGA0LXQvdC+INC00LDQvdGWIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCittc2dzdHIgItC80ZbRgdGC0L4iCisKK21zZ2lkICJjaXR5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKK21zZ3N0ciAi0LzRltGB0YLQviAo0LDQvdCz0LvRltC50YHRjNC60L7RjiksINGDINGP0LrQvtC80YMg0LHRg9C70L4g0LfQsNC/0LjRgdCw0L3QviDQsNCx0L4g0YHRgtCy0L7RgNC10L3QviDQtNCw0L3RliIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKK21zZ3N0ciAi0LTQvtC00LDRgtC60L7QstGWINC00LDQvdGWINGA0L7Qt9GC0LDRiNGD0LLQsNC90L3RjyIKKworbXNnaWQgIiIKKyJhIGxvY2F0aW9uIHdoaXRoaW4gYSBjaXR5IHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZCBvciBjcmVhdGVkIChlLmcuICIKKyJ0aGUgbmVpZ2hib3Job29kKSIKK21zZ3N0ciAiIgorItC80ZbRgdGG0LUg0YMg0LzRltGB0YLRliwg0LTQtSDQstC40LrQvtC90YPQstCw0LvQsNGB0Y8g0LfQudC+0LzQutCwINCw0LHQviDQsdGD0LvQviDRgdGC0LLQvtGA0LXQvdC+INC00LDQvdGWICjQvdCw0L/RgNC40LrQu9Cw0LQsICIKKyLRgNCw0LnQvtC9KSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgorbXNnc3RyICLQv9C+0YXQuNCx0LrQsCDRgyDQtNCw0L3QuNGFINCz0L7RgC4g0YDQvtC30YLQsNGI0YPQstCw0L3QvdGPIgorCittc2dpZCAiZXhwZWN0ZWQgZXJyb3Igb2YgdGhlIGhvcml6b250YWwgcG9zaXRpb25pbmcgbWVhc3VyZXMgKGluIG1ldGVycykiCittc2dzdHIgItC+0YfRltC60YPQstCw0L3QsCDQv9C+0YXQuNCx0LrQsCDRgyDQstC40LzRltGA0Y7QstCw0L3QvdGWINCz0L7RgNC40LfQvtC90YLQsNC70YzQvdC40YUg0LrQvtC+0YDQtNC40L3QsNGCICjRgyDQvNC10YLRgNCw0YUpIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgorbXNnc3RyICLQs9C10L7Qs9GA0LDRhNGW0YfQvdCwINGI0LLQuNC00LrRltGB0YLRjCDQv9C10YDQtdGB0YPQstCw0L3QvdGPIgorCittc2dpZCAiIgorIm1vdmVtZW50IHNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgaW4gbS9zIgorbXNnc3RyICLRiNCy0LjQtNC60ZbRgdGC0Ywg0YDRg9GF0YMg0L/RgNC40YHRgtGA0L7RjiDQtNC70Y8g0LfQvdGW0LzQsNC90L3RjyDQv9GW0LQg0YfQsNGBINCy0LjQutC+0L3QsNC90L3RjyDQt9C50L7QvNC60Lgg0YMg0Lwv0YEiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgorbXNnc3RyICLQs9C10L7Qs9GA0LDRhNGW0YfQvdC40Lkg0L3QsNC/0YDRj9C80L7QuiDQv9C10YDQtdGB0YPQstCw0L3QvdGPIgorCittc2dpZCAiIgorImluZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBvZiBhICIKKyJtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgMCAiCisibWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgorbXNnc3RyICIiCisi0L3QsNC/0YDRj9C80L7QuiDRgNGD0YXRgyDQv9GA0LjRgdGC0YDQvtGOLCDRj9C60LjQvCDQstC40LrQvtC90YPQstCw0LvQvtGB0Y8g0LfQvdGW0LzQsNC90L3RjyDQtNCw0L3QuNGFLiDQktC40LfQvdCw0YfQsNGU0YLRjNGB0Y8g0YMgIgorItCz0YDQsNC00YPRgdCw0YUg0Lcg0LLQuNC60L7RgNC40YHRgtCw0L3QvdGP0Lwg0LTQtdGB0Y/RgtC60L7QstC40YUg0LTRgNC+0LHRltCyLCAwINCy0ZbQtNC/0L7QstGW0LTQsNGUINCz0LXQvtCz0YDQsNGE0ZbRh9C90ZbQuSAiCisi0L/RltCy0L3QvtGH0ZYsINCy0ZbQtNC70ZbQuiDQstC10LTQtdGC0YzRgdGPINC30LAg0LPQvtC00LjQvdC90LjQutC+0LLQvtGOINGB0YLRgNGW0LvQutC+0Y4uIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgorbXNnc3RyICLQs9C10L7Qs9GA0LDRhNGW0YfQvdC40Lkg0L3QsNC/0YDRj9C80L7QuiDQt9C50L7QvNC60LgiCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGRldmljZSBpcyBwb2ludGluZyB0byB3aGVuIGNhcHR1cmluZyAgYSBtZWRpYS4gIgorIkl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIHJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSAiCisiZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKyLQvdCw0L/RgNGP0LzQvtC6LCDRgyDRj9C60L7QvNGDINCx0YPQu9C+INGB0L/RgNGP0LzQvtCy0LDQvdC+INC+0LHigJnRlNC60YLQuNCyINC/0YDQuNGB0YLRgNC+0Y4sINGP0LrQuNC8INCy0LjQutC+0L3Rg9Cy0LDQu9C+0YHRjyAiCisi0LfQvdGW0LzQsNC90L3RjyDQtNCw0L3QuNGFLiDQktC40LfQvdCw0YfQsNGU0YLRjNGB0Y8g0YMg0LPRgNCw0LTRg9GB0LDRhSDQtyDQstC40LrQvtGA0LjRgdGC0LDQvdC90Y/QvCDQtNC10YHRj9GC0LrQvtCy0LjRhSDQtNGA0L7QsdGW0LIsIDAgIgorItCy0ZbQtNC/0L7QstGW0LTQsNGUINCz0LXQvtCz0YDQsNGE0ZbRh9C90ZbQuSDQv9GW0LLQvdC+0YfRliwg0LLRltC00LvRltC6INCy0LXQtNC10YLRjNGB0Y8g0LfQsCDQs9C+0LTQuNC90L3QuNC60L7QstC+0Y4g0YHRgtGA0ZbQu9C60L7Rji4iCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZScgaGVyZQorbXNnaWQgInNob3cgbmFtZSIKK21zZ3N0ciAi0L3QsNC30LLQsCDQv9C10YDQtdC00LDRh9GWIgorCittc2dpZCAiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSIKK21zZ3N0ciAi0J3QsNC30LLQsCDRgtC10LvQtdC/0YDQvtCz0YDQsNC80Lgv0YLRgNCw0L3RgdC70Y/RhtGW0Zcv0YHQtdGA0ZbQsNC70YMg0LfQstGW0LTQutC4INCy0LfRj9GC0L4g0LTQsNC90ZYiCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQorbXNnaWQgInNob3cgc29ydG5hbWUiCittc2dzdHIgItC90LDQt9Cy0LAg0L/QtdGA0LXQtNCw0YfRliAo0LTQu9GPINCy0L/QvtGA0Y/QtNC60YPQstCw0L3QvdGPKSIKKworbXNnaWQgIiIKKyJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiIgorItCd0LDQt9Cy0LAg0YLQtdC70LXQv9GA0L7Qs9GA0LDQvNC4L9GC0YDQsNC90YHQu9GP0YbRltGXL9GB0LXRgNGW0LDQu9GDINC30LLRltC00LrQuCDQstC30Y/RgtC+INC00LDQvdGWICjQtNC70Y8g0LLQv9C+0YDRj9C00LrRg9Cy0LDQvdC90Y8pIgorCittc2dpZCAiZXBpc29kZSBudW1iZXIiCittc2dzdHIgItC90L7QvNC10YAg0YHQtdGA0ZbRlyIKKworbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICLQndC+0LzQtdGAINGB0LXRgNGW0Zcg0YMg0YHQtdC30L7QvdGWLCDRh9Cw0YHRgtC40L3QvtGOINGP0LrQvtCz0L4g0ZQg0LTQsNC90ZYiCisKK21zZ2lkICJzZWFzb24gbnVtYmVyIgorbXNnc3RyICLQvdC+0LzQtdGAINGB0LXQt9C+0L3RgyIKKworbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICLQndC+0LzQtdGAINGB0LXQt9C+0L3Rgywg0YfQsNGB0YLQuNC90L7RjiDRj9C60L7Qs9C+INGUINC00LDQvdGWIgorCittc2dpZCAibHlyaWNzIgorbXNnc3RyICLRgtC10LrRgdGCIgorCittc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgorbXNnc3RyICLQotC10LrRgdGCLCDRidC+INGB0YPQv9GA0L7QstC+0LTQttGD0ZQg0LTQsNC90ZYsINGC0LjQv9C+0LLQviDigJQg0YLQtdC60YHRgiDQv9GW0YHQvdGWIgorCittc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCittc2dzdHIgItC60L7QvNC/0L7Qt9C40YLQvtGAICjQtNC70Y8g0LLQv9C+0YDRj9C00LrRg9Cy0LDQvdC90Y8pIgorCittc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiIgorItC+0YHQvtCx0LAgKNGH0Lgg0L7RgdC+0LHQuCksINGP0LrQvtGOINCy0LjQutC+0L3Rg9Cy0LDQu9C+0YHRjyDQutC+0LzQv9C+0L3Rg9Cy0LDQvdC90Y8g0LfQsNC/0LjRgdGDICjQtNC70Y8g0LLQv9C+0YDRj9C00LrRg9Cy0LDQvdC90Y8pIgorCittc2dpZCAiZ3JvdXBpbmciCittc2dzdHIgItCz0YDRg9C/0YPQstCw0L3QvdGPIgorCittc2dpZCAiIgorIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKKyJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgorbXNnc3RyICIiCisi0JPRgNGD0L/Rg9GUINC/0L7QsuKAmdGP0LfQsNC90ZYg0LTQsNC90ZYsINGP0LrRliDRgdC60LvQsNC00LDRjtGC0YzRgdGPINC3INC00LXQutGW0LvRjNC60L7RhSDQutC+0LzQv9C+0LfQuNGG0ZbQuSwg0L3QsNC/0YDQuNC60LvQsNC0LCAiCisi0YDRltC30L3RliDRh9Cw0YHRgtC40L3QuCDQutC+0L3RhtC10YDRgtGDLiDQnNCw0ZQg0LLQuNGJ0LjQuSDRgNGW0LLQtdC90Ywg0LfQsCDQvtC60YDQtdC80YMg0LrQvtC80L/QvtC30LjRhtGW0Y4sINCw0LvQtSDQvdC40LbRh9C40Lkg0LfQsCAiCisi0YDRltCy0LXQvdGMINCw0LvRjNCx0L7QvNGDLiIKKworbXNnaWQgInVzZXIgcmF0aW5nIgorbXNnc3RyICLQvtGG0ZbQvdC60LAg0LrQvtGA0LjRgdGC0YPQstCw0YfQtdC8IgorCittc2dpZCAiIgorIlJhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgdXNlci4gVGhlIGhpZ2hlciB0aGUgcmFuaywgdGhlIG1vcmUgdGhlIHVzZXIgbGlrZXMgIgorInRoaXMgbWVkaWEiCittc2dzdHIgIiIKKyLQntGG0ZbQvdC60LAsINCy0LjQt9C90LDRh9C10L3QsCDQutC+0YDQuNGB0YLRg9Cy0LDRh9C10LwuINCR0ZbQu9GM0YjQuNC8INC30L3QsNGH0LXQvdC90Y/QvCDQstGW0LTQv9C+0LLRltC00LDRlCDQstC40YnQsCDQvtGG0ZbQvdC60LAuIgorCittc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKK21zZ3N0ciAi0LLQuNGA0L7QsdC90LjQuiDQv9GA0LjRgdGC0YDQvtGOIgorCittc2dpZCAiTWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKK21zZ3N0ciAi0JLQuNGA0L7QsdC90LjQuiDQv9GA0LjRgdGC0YDQvtGOLCDQstC40LrQvtGA0LjRgdGC0LDQvdC+0LPQviDQtNC70Y8g0YHRgtCy0L7RgNC10L3QvdGPINGG0LjRhSDQtNCw0L3QuNGFIgorCittc2dpZCAiZGV2aWNlIG1vZGVsIgorbXNnc3RyICLQvNC+0LTQtdC70Ywg0L/RgNC40YHRgtGA0L7RjiIKKworbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKK21zZ3N0ciAi0JzQvtC00LXQu9GMINC/0YDQuNGB0YLRgNC+0Y4sINCy0LjQutC+0YDQuNGB0YLQsNC90L7Qs9C+INC00LvRjyDRgdGC0LLQvtGA0LXQvdC90Y8g0YbQuNGFINC00LDQvdC40YUiCisKK21zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgorbXNnc3RyICLQvdCw0LfQstCwINC/0YDQvtCz0YDQsNC80LgiCisKK21zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCittc2dzdHIgItCf0YDQvtCz0YDQsNC80LAsINC30LAg0LTQvtC/0L7QvNC+0LPQvtGOINGP0LrQvtGXINC30LDQv9C40YHQsNC90L4g0LTQsNC90ZYiCisKK21zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgorbXNnc3RyICLQtNCw0L3RliDQv9GA0L7Qs9GA0LDQvNC4IgorCittc2dpZCAiQXJiaXRyYXJ5IGFwcGxpY2F0aW9uIGRhdGEgdG8gYmUgc2VyaWFsaXplZCBpbnRvIHRoZSBtZWRpYSIKK21zZ3N0ciAi0JTQvtCy0ZbQu9GM0L3RliDQtNCw0L3RliDQv9GA0L7Qs9GA0LDQvNC4LCDRj9C60LjQvNC4INC/0ZbQtNC/0LjRgdCw0L3QviDQtNCw0L3RliIKKworbXNnaWQgImltYWdlIG9yaWVudGF0aW9uIgorbXNnc3RyICLQvtGA0ZbRlNC90YLQsNGG0ZbRjyDQt9C+0LHRgNCw0LbQtdC90L3RjyIKKworbXNnaWQgIkhvdyB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCBiZWZvcmUgZGlzcGxheSIKK21zZ3N0ciAi0JLQuNC30L3QsNGH0LDRlCDQvtCx0LXRgNGC0LDQvdC90Y8g0YLQsCDQstGW0LTQtNC30LXRgNC60LDQu9C10L3QvdGPINC30L7QsdGA0LDQttC10L3QvdGPINC/0LXRgNC10LQg0L/QvtC60LDQt9C+0LwiCisKK21zZ2lkICIsICIKK21zZ3N0ciAiLCAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKK21zZ3N0ciAi0J/QntCc0JjQm9Ca0JA6INGDINC10LvQtdC80LXQvdGC0ZYgJXM6ICVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKKyIlc1xuIgorbXNnc3RyICIiCisi0JTQvtC00LDRgtC60L7QstCwINC00ZbQsNCz0L3QvtGB0YLQuNGH0L3QsCDRltC90YTQvtGA0LzQsNGG0ZbRjzpcbiIKKyIlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgInNwZWNpZmllZCBlbXB0eSBiaW4gXCIlc1wiLCBub3QgYWxsb3dlZCIKK21zZ3N0ciAi0LLQutCw0LfQsNC90L4g0L/QvtGA0L7QttC90ZbQuSDQutC+0L3RgtC10LnQvdC10YAgwqslc8K7LCDQvdC1INC00L7Qv9GD0YHQutCw0ZTRgtGM0YHRjyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBiaW4gXCIlc1wiLCBza2lwcGluZyIKK21zZ3N0ciAi0L3QtdC80LDRlCDQutC+0L3RgtC10LnQvdC10YDQsCDCqyVzwrssINC/0YDQvtC/0YPRidC10L3QviIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCittc2dzdHIgItC90LXQvNCw0ZQg0LLQu9Cw0YHRgtC40LLQvtGB0YLRliDCqyVzwrsg0YMg0LXQu9C10LzQtdC90YLRliDCqyVzwrsiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgorbXNnc3RyICLQvdC1INCy0LTQsNC70L7RgdGPINCy0YHRgtCw0L3QvtCy0LjRgtC4INCy0LvQsNGB0YLQuNCy0ZbRgdGC0Ywgwqslc8K7INGDINC10LvQtdC80LXQvdGC0ZYgwqslc8K7INGDINC30L3QsNGH0LXQvdC90Y8gwqslc8K7IgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgorbXNnc3RyICLQvdC1INCy0LTQsNC70L7RgdGPINC/0YDQuNCyJ9GP0LfQsNGC0LggJXMg0LTQviAlcyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKK21zZ3N0ciAi0L3QtdC80LDRlCDQtdC70LXQvNC10L3RgtCwIMKrJXPCuyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCittc2dzdHIgItC90LUg0LLQtNCw0LvQvtGB0Y8g0YDQvtC30ZbQsdGA0LDRgtC4INC80L7QttC70LjQstC+0YHRgtGWIMKrJXPCuyIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIKK21zZ3N0ciAi0LfQsifRj9C30L7QuiDQsdC10Lcg0LXQu9C10LzQtdC90YLQsC3QtNC20LXRgNC10LvQsCIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzaW5rIGVsZW1lbnQiCittc2dzdHIgItC30LIn0Y/Qt9C+0Log0LHQtdC3INC10LvQtdC80LXQvdGC0LAt0YHQv9C+0LbQuNCy0LDRh9CwIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNvdXJjZSBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICLQstGW0LTRgdGD0YLQvdGW0Lkg0LXQu9C10LzQtdC90YIt0LTQttC10YDQtdC70L4g0LTQu9GPIFVSSSDCqyVzwrsiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCB0byBsaW5rIFVSSSBcIiVzXCIgdG8iCittc2dzdHIgItC90LXQvNCw0ZQg0LXQu9C10LzQtdC90YLQsCDQtNC70Y8g0LfQsifRj9C30LrRgyBVUkkgwqslc8K7INC00L4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICLQvdC10LzQsNGUINC10LvQtdC80LXQvdGC0LAt0YHQv9C+0LbQuNCy0LDRh9CwINC00LvRjyBVUkkgwqslc8K7IgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAi0L3QtSDQstC00LDQu9C+0YHRjyDQv9GA0LjQsifRj9C30LDRgtC4INC10LvQtdC80LXQvdGCLdGB0L/QvtC20LjQstCw0Ycg0LTQu9GPIFVSSSDCqyVzwrsiCisKK21zZ2lkICJlbXB0eSBwaXBlbGluZSBub3QgYWxsb3dlZCIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQvdCwINCy0LjQutC+0YDQuNGB0YLQvtCy0YPQstCw0YLQuCDQv9C+0YDQvtC20L3RltC5INC60LDQvdCw0LsiCisKK21zZ2lkICJJbnRlcm5hbCBjbG9jayBlcnJvci4iCittc2dzdHIgItCf0L7QvNC40LvQutCwINCy0L3Rg9GC0YDRltGI0L3RjNC+0Zcg0YHQuNC90YXRgNC+0L3RltC30LDRhtGW0ZcuIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKK21zZ3N0ciAi0J/QvtC80LjQu9C60LAg0LLQvdGD0YLRgNGW0YjQvdGM0L7Qs9C+INC/0LXRgNC10L3QtdGB0LXQvdC90Y8g0LTQsNC90LjRhS4iCisKK21zZ2lkICJBIGxvdCBvZiBidWZmZXJzIGFyZSBiZWluZyBkcm9wcGVkLiIKK21zZ3N0ciAi0JLQuNC60LjQvdGD0YLQviDQsdCw0LPQsNGC0L4g0LHRg9GE0LXRgNGW0LIuIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IHByb2JsZW0uIgorbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQstC90YPRgtGA0ZbRiNC90YzQvtCz0L4g0L/QtdGA0LXQvdC10YHQtdC90L3RjyDQtNCw0L3QuNGFLiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAi0J/QvtC80LjQu9C60LAg0LLQvdGD0YLRgNGW0YjQvdGM0L7Qs9C+INC/0L7RgtC+0LrRgyDQtNCw0L3QuNGFLiIKKworbXNnaWQgIkZpbHRlciBjYXBzIgorbXNnc3RyICLQpNGW0LvRjNGC0YAg0LzQvtC20LvQuNCy0L7RgdGC0LXQuSIKKworbXNnaWQgIiIKKyJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKKyJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgorbXNnc3RyICIiCisi0J7QsdC80LXQttC40YLQuCDQtNC+0L/Rg9GB0YLQuNC80ZYg0LzQvtC20LvQuNCy0L7RgdGC0ZYgKE5VTEwg0L7Qt9C90LDRh9Cw0ZQgQU5ZKS4g0JLRgdGC0LDQvdC+0LLQu9C10L3QvdGPINGG0ZbRlNGXICIKKyLQstC70LDRgdGC0LjQstC+0YHRgtGWINC/0YDQuNC30LLQvtC00LjRgtGMINC00L4g0L/QvtGB0LjQu9Cw0L3QvdGPINC90LAg0L/QvtGB0YLQsNCy0LvQtdC90LjQuSDQvtCxJ9GU0LrRgiBHc3RDYXBzLiIKKworbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHdyaXRpbmcuIgorbXNnc3RyICLQndC1INCy0LrQsNC30LDQvdC+INC90LDQt9Cy0Lgg0YTQsNC50LvQsCDQtNC70Y8g0LfQsNC/0LjRgdGDLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCittc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LLRltC00LrRgNC40YLQuCDRhNCw0LnQuyDCqyVzwrsg0LTQu9GPINC30LDQv9C40YHRgy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCittc2dzdHIgItCf0L7QvNC40LvQutCwINC30LDQutGA0LjQstCw0L3QvdGPINGE0LDQudC70LAgwqslc8K7LiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAi0J/QvtC80LjQu9C60LAg0L/RgNC4INCy0YHRgtCw0L3QvtCy0LvQtdC90L3RliDQv9C+0LfQuNGG0ZbRlyDRgyDRhNCw0LnQu9GWIMKrJXPCuy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIFwiJXNcIi4iCittc2dzdHIgItCf0L7QvNC40LvQutCwINC/0YDQuCDQt9Cw0L/QuNGB0YPQstCw0L3QvdGWINC00L4g0YTQsNC50LvQsCDCqyVzwrsuIgorCittc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCittc2dzdHIgItCd0LUg0LLQutCw0LfQsNC90L4g0L3QsNC30LLRgyDRhNCw0LnQu9CwINC00LvRjyDRh9C40YLQsNC90L3Rjy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgorbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINCy0ZbQtNC60YDQuNGC0Lgg0YTQsNC50Lsgwqslc8K7INC00LvRjyDRh9C40YLQsNC90L3Rjy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCittc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0L7RgtGA0LjQvNCw0YLQuCDRltC90YTQvtGA0LzQsNGG0ZbRjiDRidC+0LTQviDCqyVzwrsuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIlwiJXNcIiBpcyBhIGRpcmVjdG9yeS4iCittc2dzdHIgIsKrJXPCuyDRlCDQutCw0YLQsNC70L7Qs9C+0LwuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKK21zZ3N0ciAi0KTQsNC50Lsgwqslc8K7INGUINGB0L7QutC10YLQvtC8LiIKKworbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCittc2dzdHIgItCf0L7QvNC40LvQutCwINC/0ZbRgdC70Y8g0ZbRgtC10YDQsNGG0ZbQuSDRgyDQt9Cw0L/QuNGC0LDQvdC+0LzRgyDQv9C+0YDRj9C00LrRgy4iCisKK21zZ2lkICJObyBUZW1wIGRpcmVjdG9yeSBzcGVjaWZpZWQuIgorbXNnc3RyICLQndC1INCy0LrQsNC30LDQvdC+INC60LDRgtCw0LvQvtCzINGC0LjQvNGH0LDRgdC+0LLQuNGFINC00LDQvdC40YUuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcCBmaWxlIFwiJXNcIi4iCittc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0YHRgtCy0L7RgNC40YLQuCDRgtC40LzRh9Cw0YHQvtCy0LjQuSDRhNCw0LnQuyDQtNCw0L3QuNGFIMKrJXPCuy4iCisKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIgorbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQv9GW0LQg0YfQsNGBINC30LDQv9C40YHRgyDQtNC+INGE0LDQudC70LAg0L7RgtGA0LjQvNCw0L3QuNGFINC00LDQvdC40YUuIgorCittc2dpZCAiY2FwcyIKK21zZ3N0ciAi0LzQvtC20LvQuNCy0L7RgdGC0ZYiCisKK21zZ2lkICJkZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtIgorbXNnc3RyICLRgyDQv9C+0YLQvtGG0ZYg0LfQvdCw0LnQtNC10L3QviDQvNC+0LbQu9C40LLQvtGB0YLRliIKKworbXNnaWQgIm1pbmltdW0iCittc2dzdHIgItC80ZbQvdGW0LzRg9C8IgorCittc2dpZCAibWF4aW11bSIKK21zZ3N0ciAi0LzQsNC60YHQuNC80YPQvCIKKworbXNnaWQgImZvcmNlIGNhcHMiCittc2dzdHIgItC/0YDQuNC80YPRgdC+0LLQviDQstC40LfQvdCw0YfQtdC90ZYg0LzQvtC20LvQuNCy0L7RgdGC0ZYiCisKK21zZ2lkICJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIKK21zZ3N0ciAi0L/RgNC40LzRg9GB0L7QstC+INCy0LjQt9C90LDRh9C40YLQuCDQvNC+0LbQu9C40LLQvtGB0YLRliDQsdC10Lcg0LLQuNC60L7QvdCw0L3QvdGPIHR5cGVmaW5kIgorCittc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgorbXNnc3RyICLQn9C+0YLRltC6INC90LUg0LzRltGB0YLQuNGC0Ywg0LTQsNC90LjRhS4iCisKK21zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgorbXNnc3RyICLQoNC10LDQu9GW0LfQvtCy0LDQvdGWINGW0L3RgtC10YDRhNC10LnRgdC4OlxuIgorCittc2dpZCAicmVhZGFibGUiCittc2dzdHIgItGH0LjRgtCw0L3QvdGPIgorCittc2dpZCAid3JpdGFibGUiCittc2dzdHIgItC30LDQv9C40YEiCisKK21zZ2lkICJjb250cm9sbGFibGUiCittc2dzdHIgItC60L7QvdGC0YDQvtC70YwiCisKK21zZ2lkICJjaGFuZ2VhYmxlIGluIE5VTEwsIFJFQURZLCBQQVVTRUQgb3IgUExBWUlORyBzdGF0ZSIKK21zZ3N0ciAi0LzQvtC20L3QsCDQt9C80ZbQvdGO0LLQsNGC0Lgg0YMg0YHRgtCw0L3QsNGFIE5VTEwsIFJFQURZLCBQQVVTRUQg0YLQsCBQTEFZSU5HIgorCittc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwsIFJFQURZIG9yIFBBVVNFRCBzdGF0ZSIKK21zZ3N0ciAi0LzQvtC20L3QsCDQt9C80ZbQvdGO0LLQsNGC0Lgg0LvQuNGI0LUg0YMg0YHRgtCw0L3QsNGFIE5VTEwsIFJFQURZINGWIFBBVVNFRCIKKworbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMIG9yIFJFQURZIHN0YXRlIgorbXNnc3RyICLQvNC+0LbQvdCwINC30LzRltC90Y7QstCw0YLQuCDQu9C40YjQtSDRgyDRgdGC0LDQvdCw0YUgTlVMTCDRliBSRUFEWSIKKworbXNnaWQgIkJsYWNrbGlzdGVkIGZpbGVzOiIKK21zZ3N0ciAi0JfQsNCx0LvQvtC60L7QstCw0L3RliDRhNCw0LnQu9C4OiIKKworbXNnaWQgIlRvdGFsIGNvdW50OiAiCittc2dzdHIgItCX0LDQs9Cw0LvRjNC90LAg0LrRltC70YzQutGW0YHRgtGMOiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgorbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKK21zZ3N0clswXSAiJWQg0LfQsNCx0LvQvtC60L7QstCw0L3QuNC5INGE0LDQudC7IgorbXNnc3RyWzFdICIlZCDQt9Cw0LHQu9C+0LrQvtCy0LDQvdC40YUg0YTQsNC50LvQuCIKK21zZ3N0clsyXSAiJWQg0LfQsNCx0LvQvtC60L7QstCw0L3QuNGFINGE0LDQudC70ZbQsiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBwbHVnaW4iCittc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCittc2dzdHJbMF0gIiVkINC80L7QtNGD0LvRjCIKK21zZ3N0clsxXSAiJWQg0LzQvtC00YPQu9GWIgorbXNnc3RyWzJdICIlZCDQvNC+0LTRg9C70ZbQsiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBibGFja2xpc3QgZW50cnkiCittc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdCBlbnRyaWVzIgorbXNnc3RyWzBdICIlZCDQt9Cw0LHQu9C+0LrQvtCy0LDQvdC40Lkg0LfQsNC/0LjRgSIKK21zZ3N0clsxXSAiJWQg0LfQsNCx0LvQvtC60L7QstCw0L3QuNGFINC30LDQv9C40YHQuCIKK21zZ3N0clsyXSAiJWQg0LfQsNCx0LvQvtC60L7QstCw0L3QuNGFINC30LDQv9C40YHRltCyIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGZlYXR1cmUiCittc2dpZF9wbHVyYWwgIiVkIGZlYXR1cmVzIgorbXNnc3RyWzBdICIlZCDRhNGD0L3QutGG0ZbRjyIKK21zZ3N0clsxXSAiJWQg0YTRg9C90LrRhtGW0ZciCittc2dzdHJbMl0gIiVkINGE0YPQvdC60YbRltC5IgorCittc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgorbXNnc3RyICLQktC40LLQtdGB0YLQuCDRg9GB0ZYg0LXQu9C10LzQtdC90YLQuCIKKworbXNnaWQgIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHIgItCf0L7QutCw0LfQsNGC0Lgg0YHQv9C40YHQvtC6INC30LDQsdC70L7QutC+0LLQsNC90LjRhSDRhNCw0LnQu9GW0LIiCisKK21zZ2lkICIiCisiUHJpbnQgYSBtYWNoaW5lLXBhcnNhYmxlIGxpc3Qgb2YgZmVhdHVyZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4gb3IgYWxsICIKKyJwbHVnaW5zIHByb3ZpZGUuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIGluIGNvbm5lY3Rpb24gd2l0aCBleHRlcm5hbCAiCisiYXV0b21hdGljIHBsdWdpbiBpbnN0YWxsYXRpb24gbWVjaGFuaXNtcyIKK21zZ3N0ciAiIgorItCS0LjQstC10YHRgtC4INC/0YDQuNC00LDRgtC90LjQuSDQtNC70Y8g0L7QsdGA0L7QsdC60Lgg0LrQvtC80L/igJnRjtGC0LXRgNC+0Lwg0YHQv9C40YHQvtC6INC80L7QttC70LjQstC+0YHRgtC10LksINGA0L7QsdC+0YLRgyDRj9C60LjRhSAiCisi0LfQsNCx0LXQt9C/0LXRh9GD0ZQg0LzQvtC00YPQu9GMINCw0LHQviDQstGB0ZYg0LzQvtC00YPQu9GWLlxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgINCS0LjQutC+0YDQuNGB0YLQvtCy0YPRlNGC0YzRgdGPINGA0LDQt9C+0Lwg0Lcg0LfQvtCy0L3RltGI0L3RltC80LggIgorItC80LXRhdCw0L3RltC30LzQsNC80Lgg0LDQstGC0L7QvNCw0YLQuNGH0L3QvtCz0L4g0LLRgdGC0LDQvdC+0LLQu9C10L3QvdGPINC80L7QtNGD0LvRltCyIgorCittc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtC4INCy0LzRltGB0YIg0LzQvtC00YPQu9GPIgorCittc2dpZCAiUHJpbnQgc3VwcG9ydGVkIFVSSSBzY2hlbWVzLCB3aXRoIHRoZSBlbGVtZW50cyB0aGF0IGltcGxlbWVudCB0aGVtIgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtC4INC/0ZbQtNGC0YDQuNC80YPQstCw0L3RliDRgdGF0LXQvNC4INCw0LTRgNC10YEg0Lcg0LXQu9C10LzQtdC90YLQsNC80LgsINGP0LrRliDRl9GFINGA0LXQsNC70ZbQt9GD0Y7RgtGMIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgorbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC30LDQstCw0L3RgtCw0LbQuNGC0Lgg0YTQsNC50Lsg0LzQvtC00YPQu9GOICVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iCittc2dzdHIgItCd0LXQvNCw0ZQg0LXQu9C10LzQtdC90YLQsCDQtdC70LXQvNC10L3RgtCwINCw0LHQviDQvNC+0LTRg9C70Y8gwqslc8K7XG4iCisKK21zZ2lkICJJbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICLQodGC0LDRgtC40YHRgtC40YfQvdGWINC00LDQvdGWINC/0L7QutCw0LbRh9C40LrQsCIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBlbGVtZW50IFwiJXNcIiAoJXMpOiAiCittc2dzdHIgItCe0YLRgNC40LzQsNC90L4g0L/QvtCy0ZbQtNC+0LzQu9C10L3QvdGPICV1INCy0ZbQtCDQtdC70LXQvNC10L3RgtCwIMKrJXPCuyAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCittc2dzdHIgItCe0YLRgNC40LzQsNC90L4g0L/QvtCy0ZbQtNC+0LzQu9C10L3QvdGPICV1INCy0ZbQtCDQs9C90ZbQt9C00LAgwqslczolc8K7ICglcyk6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAi0J7RgtGA0LjQvNCw0L3QviDQv9C+0LLRltC00L7QvNC70LXQvdC90Y8gJXUg0LLRltC0INC+0LHigJnRlNC60YLQsCDCqyVzwrsgKCVzKTogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSAoJXMpOiAiCittc2dzdHIgItCe0YLRgNC40LzQsNC90L4g0L/QvtCy0ZbQtNC+0LzQu9C10L3QvdGPICV1ICglcyk6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgRU9TIGZyb20gZWxlbWVudCBcIiVzXCIuXG4iCittc2dzdHIgItCe0YLRgNC40LzQsNC90L4g0L7Qt9C90LDQutGDINC60ZbQvdGG0Y8g0YDRj9C00LrQsCDQstGW0LQg0LXQu9C10LzQtdC90YLRgyDCqyVzwrsuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKK21zZ3N0ciAi0JfQndCQ0JnQlNCV0J3QniDQotCV0JMgIDog0LfQvdCw0LnQtNC10L3QviDRgyDQtdC70LXQvNC10L3RgtGWIMKrJXPCuy5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCittc2dzdHIgItCX0J3QkNCZ0JTQldCd0J4g0JzQhtCi0JrQoyAgOiDQt9C90LDQudC00LXQvdC+INGDINC10LvQtdC80LXQvdGC0ZYgwqslczolc8K7LlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKK21zZ3N0ciAi0JfQndCQ0JnQlNCV0J3QniDQnNCG0KLQmtCjIDog0LfQvdCw0LnQtNC10L3QviDQvtCx4oCZ0ZTQutGC0L7QvCDCqyVzwrsuXG4iCisKK21zZ2lkICJGT1VORCBUQUdcbiIKK21zZ3N0ciAi0JfQndCQ0JnQlNCV0J3QniDQnNCG0KLQmtCjXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklORk86XG4iCisiJXNcbiIKK21zZ3N0ciAiIgorItCG0J3QpNCe0KDQnNCQ0KbQhtCvOlxuIgorIiVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgorbXNnc3RyICLQn9Ce0J/QldCg0JXQlNCW0JXQndCd0K86INGDINC10LvQtdC80LXQvdGC0ZYgJXM6ICVzXG4iCisKK21zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIGJ1ZmZlcmluZyB0byBmaW5pc2guLi5cbiIKK21zZ3N0ciAi0JLQuNC60L7QvdCw0L3QviBwcmVyb2xsLCDQtNC70Y8g0LHRg9GE0LXRgNC40LfQsNGG0ZbRlyDQtNC70Y8g0LfQsNCy0LXRgNGI0LXQvdC90Y8uLi5cbiIKKworbXNnaWQgImJ1ZmZlcmluZy4uLiIKK21zZ3N0ciAi0LHRg9GE0LXRgNC40LfQsNGG0ZbRjy4uLiIKKworbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgItCR0YPRhNC10YDQuNC30LDRhtGW0Y4g0LfQsNCy0LXRgNGI0LXQvdC+LCDQutCw0L3QsNC7INC/0LXRgNC10LLQvtC00LjRgtGM0YHRjyDRgyDRgdGC0LDQvSDQktCG0JTQotCS0J7QoNCV0J3QndCvIC4uLlxuIgorCittc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAi0JHRg9GE0LXRgNC40LfQsNGG0ZbRjywg0LrQsNC90LDQuyDQv9C10YDQtdCy0L7QtNC40YLRjNGB0Y8g0YMg0YHRgtCw0L0g0J/QoNCY0JfQo9Cf0JjQndCV0J3QniAuLi5cbiIKKworbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCittc2dzdHIgItCf0LXRgNC10YDQvtC30L/QvtC00ZbQuyDQt9Cw0YLRgNC40LzQutC4Li4uXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBzdGF0ZSB0byAlcyBhcyByZXF1ZXN0ZWQgYnkgJXMuLi5cbiIKK21zZ3N0ciAi0JLRgdGC0LDQvdC+0LLQu9C10L3QvdGPINGB0YLQsNC90YMgJXMsINC/0L7RgtGA0ZbQsdC90L4g0LTQu9GPICVzLi4uXG4iCisKK21zZ2lkICJJbnRlcnJ1cHQ6IFN0b3BwaW5nIHBpcGVsaW5lIC4uLlxuIgorbXNnc3RyICLQn9C10YDQtdGA0LjQstCw0L3QvdGPOiDQt9GD0L/QuNC90LrQsCDQutCw0L3QsNC70YMuLi5cbiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBlbGVtZW50OiAlc1xuIgorbXNnc3RyICLQvdC10LzQsNGUINC10LvQtdC80LXQvdGC0LAgwqslc8K7IgorCittc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgorbXNnc3RyICLQktC40LLQtdGB0YLQuCDQvNGW0YLQutC4ICjRgtCw0LrQvtC2INCy0ZbQtNC+0LzRliDRj9C6INC80LXRgtCw0LTQsNC90ZYpIgorCittc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKK21zZ3N0ciAi0JLQuNCy0LXRgdGC0Lgg0ZbQvdGE0L7RgNC80LDRhtGW0Y4g0L/RgNC+INGB0YLQsNC9INGC0LAg0YHQv9C+0LLRltGJ0LXQvdC90Y8g0YnQvtC00L4g0LLQu9Cw0YHRgtC40LLQvtGB0YLQtdC5IgorCittc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi0J3QtSDQv9C+0LrQsNC30YPQstCw0YLQuCDQtNCw0L3QuNGFINGJ0L7QtNC+INC/0L7RgdGC0YPQv9GDIgorCittc2dpZCAiT3V0cHV0IG1lc3NhZ2VzIgorbXNnc3RyICLQktC40LLQtdC00LXQvdC+INC/0L7QstGW0LTQvtC80LvQtdC90L3RjyIKKworbXNnaWQgIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIFRZUEUiCittc2dzdHIgItCd0LUg0LLQuNCy0L7QtNC40YLQuCDRltC90YTQvtGA0LzQsNGG0ZbRjiDQv9GA0L4g0YHRgtCw0L0g0YLQuNC/0YMg0KLQmNCfIgorCittc2dpZCAiVFlQRTEsVFlQRTIsLi4uIgorbXNnc3RyICLQotCY0J8xLNCi0JjQnzIsLi4uIgorCittc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgorbXNnc3RyICLQndC1INCy0YHRgtCw0L3QvtCy0LvRjtCy0LDRgtC4INC+0LHRgNC+0LHQvdC40Log0LfQsdC+0ZfQsiIKKworbXNnaWQgIlByaW50IGFsbG9jIHRyYWNlIChpZiBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSkiCittc2dzdHIgItCS0LjQstC10YHRgtC4INGC0YDQsNGB0YPQstCw0L3QvdGPINGA0L7Qt9C/0L7QtNGW0LvRgyDQv9Cw0LzigJnRj9GC0ZYgKNGP0LrRidC+INCy0LLRltC80LrQvdC10L3QviDQv9GA0Lgg0LrQvtC80L/RltC70Y/RhtGW0ZcpIgorCittc2dpZCAiRm9yY2UgRU9TIG9uIHNvdXJjZXMgYmVmb3JlIHNodXR0aW5nIHRoZSBwaXBlbGluZSBkb3duIgorbXNnc3RyICLQn9GA0LjQvNGD0YHQvtCy0L4g0L3QsNC00ZbRgdC70LDRgtC4IEVPUyDQtNC+INC00LbQtdGA0LXQuyDQtNC+INC30LDQstC10YDRiNC10L3QvdGPINGA0L7QsdC+0YLQuCDQutCw0L3QsNC70YMiCisKK21zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCittc2dzdHIgItCX0ZbQsdGA0LDRgtC4INGC0LAg0L/QvtC60LDQt9Cw0YLQuCDRgdGC0LDRgtC40YHRgtC40YfQvdGWINC00LDQvdGWINC/0L7QutCw0LbRh9C40LrQsCIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKK21zZ3N0ciAi0J/QntCc0JjQm9Ca0JA6INC60LDQvdCw0Lsg0L3QtSDQvNC+0LbQtSDQsdGD0YLQuCDRgdC60L7QvdGB0YLRgNGD0LnQvtCy0LDQvdC40Lk6ICVzLlxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKK21zZ3N0ciAi0J/QntCc0JjQm9Ca0JA6INC60LDQvdCw0Lsg0L3QtSDQvNC+0LbQtSDQsdGD0YLQuCDRgdC60L7QvdGB0YLRgNGD0LnQvtCy0LDQvdC40LkuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogZXJyb25lb3VzIHBpcGVsaW5lOiAlc1xuIgorbXNnc3RyICLQn9Ce0J/QldCg0JXQlNCW0JXQndCd0K86INC/0L7QvNC40LvQutC+0LLQuNC5INC60LDQvdCw0Ls6ICVzXG4iCisKK21zZ2lkICJFUlJPUjogdGhlICdwaXBlbGluZScgZWxlbWVudCB3YXNuJ3QgZm91bmQuXG4iCittc2dzdHIgItCf0J7QnNCY0JvQmtCQOiDQvdC1INC30L3QsNC50LTQtdC90LjQuSDQtdC70LXQvNC10L3RgiBcInBpcGVsaW5lXCIuXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAi0JrQsNC90LDQuyDQv9C10YDQtdCy0L7QtNC40YLRjNGB0Y8g0YMg0YHRgtCw0L0gUEFVU0VELi4uXG4iCisKK21zZ2lkICJFUlJPUjogUGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBhdXNlLlxuIgorbXNnc3RyICLQn9Ce0JzQmNCb0JrQkDog0LrQsNC90LDQuyDQvdC1INC80L7QttC1INC/0YDQuNC30YPQv9C40L3QuNGC0LjRgdGMLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgorbXNnc3RyICLQmtC+0L3QstC10ZTRgCDQsNC60YLQuNCy0L3QuNC5INGC0LAg0L3QtSDQv9C+0YLRgNC10LHRg9GUIFBSRVJPTEwuLi5cbiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCittc2dzdHIgItCa0LDQvdCw0Lsg0YMg0YHRgtCw0L3RliBQUkVST0xMSU5HLi4uXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHByZXJvbGwuXG4iCittc2dzdHIgItCf0J7QnNCY0JvQmtCQOiDQutCw0L3QsNC7INC90LUg0LzQvtC20LUg0L/QtdGA0LXQudGC0Lgg0YMg0YHRgtCw0L0gcHJlcm9sbC5cbiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExFRCAuLi5cbiIKK21zZ3N0ciAi0JrQsNC90LDQuyDRgyDRgdGC0LDQvdGWIFBSRVJPTExFRC4uLlxuIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgorbXNnc3RyICLQmtCw0L3QsNC7INC/0LXRgNC10LLQvtC00LjRgtGM0YHRjyDRgyDRgdGC0LDQvSDQktCG0JTQotCS0J7QoNCV0J3QndCvLi4uXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBsYXkuXG4iCittc2dzdHIgItCf0J7QnNCY0JvQmtCQOiDQutCw0L3QsNC7INC90LUg0LzQvtC20LUg0L/QvtGH0LDRgtC4INCy0ZbQtNGC0LLQvtGA0LXQvdC90Y8uXG4iCisKK21zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKK21zZ3N0ciAi0KPQstGW0LzQutC90LXQvdC+IEVPUyDQv9GA0Lgg0LfQsNCy0LXRgNGI0LXQvdC90ZYgLSDQn9GA0LjQvNGD0YHQvtCy0LUg0LLQuNCy0LXQtNC10L3QvdGPIEVPUyDQtNC+INC60LDQvdCw0LvRg1xuIgorCittc2dpZCAiV2FpdGluZyBmb3IgRU9TLi4uXG4iCittc2dzdHIgItCe0YfRltC60YPQstCw0L3QvdGPINC90LAgRU9TLi4uXG4iCisKK21zZ2lkICJFT1MgcmVjZWl2ZWQgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgorbXNnc3RyICLQntGC0YDQuNC80LDQvdC+IEVPUyAtINC30LDQstC10YDRiNC10L3QvdGPINGA0L7QsdC+0YLQuCDQutCw0L3QsNC70YMuLi5cbiIKKworbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgorbXNnc3RyICLQn9GW0LQg0YfQsNGBINC+0YfRltC60YPQstCw0L3QvdGPINC90LAgRU9TINGB0YLQsNC70LDRgdGPINC/0L7QvNC40LvQutCwXG4iCisKK21zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKK21zZ3N0ciAi0JLQuNC60L7QvdCw0L3QvdGPINC30LDQstC10YDRiNC10L3QviDQv9GW0YHQu9GPICUiCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIC4uLlxuIgorbXNnc3RyICLQmtCw0L3QsNC7INC/0LXRgNC10LLQvtC00LjRgtGM0YHRjyDRgyDRgdGC0LDQvSDQk9Ce0KLQntCS0JjQmSAuLi5cbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCAuLi5cbiIKK21zZ3N0ciAi0JrQsNC90LDQuyDQv9C10YDQtdCy0L7QtNC40YLRjNGB0Y8g0YMg0YHRgtCw0L0gTlVMTCAuLi5cbiIKKworbXNnaWQgIkZyZWVpbmcgcGlwZWxpbmUgLi4uXG4iCittc2dzdHIgItCh0L/QvtGA0L7QttC90LXQvdC90Y8g0LrQsNC90LDQu9GDLi4uXG4iCisKKyN+IG1zZ2lkICJVc2FnZTogZ3N0LXhtbGxhdW5jaCA8ZmlsZS54bWw+IFsgZWxlbWVudC5wcm9wZXJ0eT12YWx1ZSAuLi4gXVxuIgorI34gbXNnc3RyICIiCisjfiAi0JLQuNC60L7RgNC40YHRgtCw0L3QvdGPOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyDQtdC70LXQvNC10L3Rgi4iCisjfiAi0LLQu9Cw0YHRgtC40LLRltGB0YLRjD3Qt9C90LDRh9C10L3QvdGPIC4uLiBdXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogcGFyc2Ugb2YgeG1sIGZpbGUgJyVzJyBmYWlsZWQuXG4iCisjfiBtc2dzdHIgItCf0J7QnNCY0JvQmtCQOiDQv9C+0LzQuNC70LrQsCDQv9GA0Lgg0LDQvdCw0LvRltC30ZYgeG1sINGE0LDQudC70YMgwqslc8K7LlxuIgorCisjfiBtc2dpZCAiRVJST1I6IG5vIHRvcGxldmVsIHBpcGVsaW5lIGVsZW1lbnQgaW4gZmlsZSAnJXMnLlxuIgorI34gbXNnc3RyICLQn9Ce0JzQmNCb0JrQkDog0L3QtdC80LDRlCDQstC10YDRhdC90YzQvtCz0L4g0LXQu9C10LzQtdC90YLQsCDQutCw0L3QsNC70YMg0YMg0YTQsNC50LvRliDCqyVzwrsuXG4iCisKKyN+IG1zZ2lkICJXQVJOSU5HOiBvbmx5IG9uZSB0b3BsZXZlbCBlbGVtZW50IGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICLQn9Ce0J/QldCg0JXQlNCW0JXQndCd0K86INC90LDRgNCw0LfRliDQv9GW0LTRgtGA0LjQvNGD0ZTRgtGM0YHRjyDQu9C40YjQtSDQvtC00LjQvSDQtdC70LXQvNC10L3RgiDQvdCw0LnQstC40YnQvtCz0L4g0YDRltCy0L3Rjy5cbiIKKworI34gbXNnaWQgIkVSUk9SOiBjb3VsZCBub3QgcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50ICVkOiAlcy5cbiIKKyN+IG1zZ3N0ciAiIgorI34gItCf0J7QnNCY0JvQmtCQOiDQvdC1INCy0LTQsNC70L7RgdGPINC/0YDQvtCw0L3QsNC70ZbQt9GD0LLQsNGC0Lgg0LDRgNCz0YPQvNC10L3RgiDQutC+0LzQsNC90LTQvdC+0LPQviDRgNGP0LTQutCwICVkOiAlcy5cbiIKKworI34gbXNnaWQgIldBUk5JTkc6IGVsZW1lbnQgbmFtZWQgJyVzJyBub3QgZm91bmQuXG4iCisjfiBtc2dzdHIgItCf0J7Qn9CV0KDQldCU0JbQldCd0J3Qrzog0LXQu9C10LzQtdC90YIg0Lcg0L3QsNC30LLQvtGOIMKrJXPCuyDQvdC1INGW0YHQvdGD0ZQuXG4iCisKKyN+IG1zZ2lkICJTYXZlIHhtbCByZXByZXNlbnRhdGlvbiBvZiBwaXBlbGluZSB0byBGSUxFIGFuZCBleGl0IgorI34gbXNnc3RyICLQl9Cx0LXRgNC10LPRgtC4IHhtbCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90L3RjyDQutCw0L3QsNC70YMg0YMg0YTQsNC50Lsg0KTQkNCZ0Jsg0YLQsCDQt9Cw0LLQtdGA0YjQuNGC0LjRgdGMIgorCisjfiBtc2dpZCAiRklMRSIKKyN+IG1zZ3N0ciAi0KTQkNCZ0JsiCisKKyN+IG1zZ2lkICJEbyBub3QgaW5zdGFsbCBzaWduYWwgaGFuZGxlcnMgZm9yIFNJR1VTUjEgYW5kIFNJR1VTUjIiCisjfiBtc2dzdHIgItCd0LUg0LLRgdGC0LDQvdC+0LLQu9GO0LLQsNGC0Lgg0L7QsdGA0L7QsdC90LjQutC4INGB0LjQs9C90LDQu9GW0LIg0LTQu9GPIFNJR1VTUjEg0ZYgU0lHVVNSMiIKKworI34gbXNnaWQgIkVycm9yIHdyaXRpbmcgcmVnaXN0cnkgY2FjaGUgdG8gJXM6ICVzIgorI34gbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQv9GA0Lgg0LfQsNC/0LjRgdGWINC60LXRiNGDINGA0LXRlNGB0YLRgNGDINGDICVzOiAlcyIKKworI34gbXNnaWQgIkVycm9yIHJlLXNjYW5uaW5nIHJlZ2lzdHJ5ICVzOiAlcyIKKyN+IG1zZ3N0ciAi0J/QvtC80LjQu9C60LAg0L/RgNC4INC/0L7QstGC0L7RgNC90L7QvNGDINGB0LrQsNC90YPQstCw0L3QvdGWINGA0LXRlNGB0YLRgNGDINC80L7QtNGD0LvRltCyICVzOiAlcyIKKworI34gbXNnaWQgIkVycm9yIHJlLXNjYW5uaW5nIHJlZ2lzdHJ5ICVzIgorI34gbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQv9GA0Lgg0L/QvtCy0YLQvtGA0L3QvtC80YMg0YHQutCw0L3Rg9Cy0LDQvdC90ZYg0YDQtdGU0YHRgtGA0YMgJXMiCisKKyN+IG1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQuIgorI34gbXNnc3RyICLQktC90YPRgtGA0ZbRiNC90Y8g0L/QvtC80LjQu9C60LAgR1N0cmVhbWVyOiDQv9C+0LzQuNC70LrQsCDQt9C80ZbQvdC4INGB0YLQsNC90YMuIgorCisjfiBtc2dpZCAib3JpZ2luYWwgbG9jYXRpb24gb2YgZmlsZSBhcyBhIFVSSSIKKyN+IG1zZ3N0ciAi0L7RgNC40LPRltC90LDQu9GM0L3QtSDRgNC+0LfRgtCw0YjRg9Cy0LDQvdC90Y8g0YTQsNC50LvRgyDRgyDQstC40LPQu9GP0LTRliBVUkkiCisKKyN+IG1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgZGVzY3JpcHRvciBcIiVkXCIuIgorI34gbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQv9GA0Lgg0LfQsNC/0LjRgdGD0LLQsNC90L3RliDRgyDQtNC10YHQutGA0LjQv9GC0L7RgCDRhNCw0LnQu9GDIFwiJWRcIi4iCisKKyN+IG1zZ2lkICJGaWxlIGRlc2NyaXB0b3IgXCIlZFwiIGlzIG5vdCB2YWxpZC4iCisjfiBtc2dzdHIgItCU0LXRgdC60YDQuNC/0YLQvtGAINGE0LDQudC70YMgXCIlZFwiINC90LXQutC+0YDQtdC60YLQvdC40LkuIgorCisjfiBtc2dpZCAiRlJFRUlORyBwaXBlbGluZSAuLi5cbiIKKyN+IG1zZ3N0ciAi0LrQsNC90LDQuyDQl9CS0IbQm9Cs0J3QldCd0J3Qry4uLlxuIgpkaWZmIC0tZ2l0IGEvcG8vdmkuZ21vIGIvcG8vdmkuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NzcxYmIKLS0tIC9kZXYvbnVsbAorKysgYi9wby92aS5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vdmkucG8gYi9wby92aS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWY5OGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vdmkucG8KQEAgLTAsMCArMSwxMjI5IEBACisjIFZpZXRuYW1lc2UgVHJhbnNsYXRpb24gZm9yIEdTdHJlYW1lci4KKyMgQ29weXJpZ2h0IMKpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnc3RyZWFtZXIgcGFja2FnZS4KKyMgQ2x5dGllIFNpZGRhbGwgPGNseXRpZUByaXZlcmxhbmQubmV0LmF1PiwgMjAwNS0yMDEwLgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDAuMTAuMjkuMlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTA5LTI5IDE0OjU1KzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTEwLTAzIDE5OjA5KzEwMzBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IENseXRpZSBTaWRkYWxsIDxjbHl0aWVAcml2ZXJsYW5kLm5ldC5hdT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBWaWV0bmFtZXNlIDx2aS1WTkBnb29nbGVncm91cHMuY29tPlxuIgorIkxhbmd1YWdlOiB2aVxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MTsgcGx1cmFsPTA7XG4iCisiWC1HZW5lcmF0b3I6IExvY0ZhY3RvcnlFZGl0b3IgMS44XG4iCisKK21zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCittc2dzdHIgIkhp4buDbiB0aOG7iyBwaGnDqm4gYuG6o24gR1N0cmVhbWVyIgorCittc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCittc2dzdHIgIsSQ4bq3dCBt4buNaSBj4bqjbmggYsOhbyBsw6AgbmdoacOqbSB0cuG7jW5nIgorCittc2dpZCAiUHJpbnQgYXZhaWxhYmxlIGRlYnVnIGNhdGVnb3JpZXMgYW5kIGV4aXQiCittc2dzdHIgIkhp4buDbiB0aOG7iyB04bqldCBj4bqjIGPDoWMgbG/huqFpIGfhu6EgbOG7l2kgc+G6tW4gc8OgbmcgcuG7k2kgdGhvw6F0IgorCittc2dpZCAiIgorIkRlZmF1bHQgZGVidWcgbGV2ZWwgZnJvbSAxIChvbmx5IGVycm9yKSB0byA1IChhbnl0aGluZykgb3IgMCBmb3Igbm8gb3V0cHV0IgorbXNnc3RyICIiCisiTeG7qWMgZ+G7oSBs4buXaSBt4bq3YyDEkeG7i25oIHThu6sgMSAoY2jhu4kgbOG7l2kpIMSR4bq/biA1IChi4bqldCBj4bupIMSRaeG7gXUgbsOgbykgaGF5IDAgKGtow7RuZyB4deG6pXQgIgorImfDrCkiCisKK21zZ2lkICJMRVZFTCIKK21zZ3N0ciAiQ+G6pFAiCisKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCisidGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgorbXNnc3RyICIiCisiRGFuaCBzw6FjaCDEkeG7i25oIGdp4bubaSBi4bqxbmcgZOG6pXUgcGjhuql5IGPhu6dhIMSRw7RpIMKrIHTDqm5fbG/huqFpOmPhuqVwIMK7IMSR4buDIMSR4bq3dCBj4bqlcCBk4bupdCAiCisia2hvw6F0IGNobyBt4buXaSBsb+G6oWkuIFRow60gZOG7pTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgorCittc2dpZCAiTElTVCIKK21zZ3N0ciAiREFOSCBTw4FDSCIKKworbXNnaWQgIkRpc2FibGUgY29sb3JlZCBkZWJ1Z2dpbmcgb3V0cHV0IgorbXNnc3RyICJU4bqvdCB4deG6pXQgZOG7ryBsaeG7h3UgZ+G7oSBs4buXaSB24bubaSBtw6B1IgorCittc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCittc2dzdHIgIlThuq90IGfhu6EgbOG7l2kiCisKK21zZ2lkICJFbmFibGUgdmVyYm9zZSBwbHVnaW4gbG9hZGluZyBkaWFnbm9zdGljcyIKK21zZ3N0ciAiQuG6rXQgY2jhuqluIMSRb8OhbiBjaGkgdGnhur90IHZp4buHYyBu4bqhcCBwaOG6p24gYuG7lSBzdW5nIgorCittc2dpZCAiQ29sb24tc2VwYXJhdGVkIHBhdGhzIGNvbnRhaW5pbmcgcGx1Z2lucyIKK21zZ3N0ciAiQ8OhYyDEkcaw4budbmcgZOG6q24gxJHhu4tuaCBnaeG7m2kgYuG6sW5nIGThuqV1IGhhaSBjaOG6pW0gbcOgIGNo4bupYSBwaOG6p24gYuG7lSBzdW5nIgorCittc2dpZCAiUEFUSFMiCittc2dzdHIgIsSQxq/hu5xORyBE4bqqTiIKKworbXNnaWQgIiIKKyJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwbHVnaW5zIHRvIHByZWxvYWQgaW4gYWRkaXRpb24gdG8gdGhlIGxpc3Qgc3RvcmVkIGluICIKKyJlbnZpcm9ubWVudCB2YXJpYWJsZSBHU1RfUExVR0lOX1BBVEgiCittc2dzdHIgIiIKKyJEYW5oIHPDoWNoIMSR4buLbmggZ2nhu5tpIGLhurFuZyBk4bqldSBwaOG6qXkgY2jhu6lhIGPDoWMgcGjhuqduIGLhu5Ugc3VuZyBj4bqnbiBu4bqhcCB0csaw4bubYywgdGjDqm0gIgorInbDoG8gZGFuaCBzw6FjaCDEkcaw4bujYyBj4bqldCBnaeG7ryB0cm9uZyBiaeG6v24gbcO0aSB0csaw4budbmcgR1NUX1BMVUdJTl9QQVRIIgorCittc2dpZCAiUExVR0lOUyIKK21zZ3N0ciAiUEjhuqZOIELhu5QgU1VORyIKKworbXNnaWQgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCittc2dzdHIgIlThuq90IGNo4bupYyBuxINuZyBi4bqvdCBs4buXaSBwaMOibiDEkW/huqFuIHRyb25nIGtoaSBu4bqhcCBwaOG6p24gYuG7lSBzdW5nIgorCittc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIlThuq90IGto4bqjIG7Eg25nIGPhuq1wIG5o4bqtdCBi4buZIMSRxINuZyBrw70iCisKK21zZ2lkICJEaXNhYmxlIHNwYXduaW5nIGEgaGVscGVyIHByb2Nlc3Mgd2hpbGUgc2Nhbm5pbmcgdGhlIHJlZ2lzdHJ5IgorbXNnc3RyICIiCisiVOG6r3Qga2jhuqMgbsSDbmcgdOG6oW8gdsOgIHRo4buxYyBoaeG7h24gdGnhur9uIHRyw6xuaCBi4buVIHRy4bujIHRyb25nIGtoaSBxdcOpdCBi4buZIMSRxINuZyBrw70iCisKK21zZ2lkICJHU3RyZWFtZXIgT3B0aW9ucyIKK21zZ3N0ciAiVMO5eSBjaOG7jW4gR1N0cmVhbWVyIgorCittc2dpZCAiU2hvdyBHU3RyZWFtZXIgT3B0aW9ucyIKK21zZ3N0ciAiSGnhu4duIFTDuXkgY2jhu41uIEdTdHJlYW1lciIKKworbXNnaWQgIlVua25vd24gb3B0aW9uIgorbXNnc3RyICJUw7l5IGNo4buNbiBs4bqhIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICJUcsOsbmggR1N0cmVhbWVyIG3hu5tpIGfhurdwIG3hu5l0IGzhu5dpIHRoxrAgdmnhu4duIGzDtWkgY2h1bmcuIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyBlcnJvci4iCittc2dzdHIgIk5o4buvbmcgbmjDoCBwaMOhdCB0cmnhu4NuIEdTdHJlYW1lciBjaMawYSBnw6FuIG3DoyBs4buXaSBjaG8gbOG7l2kgbsOgeS4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKK21zZ3N0ciAiTOG7l2kgbuG7mWkgYuG7mSBHU3RyZWFtZXI6IGNoxrBhIHRoaSBow6BuaCBtw6MuIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgorInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgorbXNnc3RyICIiCisiTOG7l2kgR1N0cmVhbWVyOiBraMO0bmcgdGhheSDEkeG7lWkgxJHGsOG7o2MgdMOsbmggdHLhuqFuZywgdsOgIG3hu5l0IHBo4bqnbiB04butIG7DoG8gxJHDsyBraMO0bmcgIgorImfhu61pIMSRxrDhu6NjIHRow7RuZyDEkWnhu4dwIGzhu5dpIMSRw7puZyBjaOG7qWEgbMO9IGRvIGPhu6dhIGzhu5dpIG7DoHkuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCittc2dzdHIgIkzhu5dpIG7hu5lpIGLhu5kgR1N0cmVhbWVyOiB24bqlbiDEkeG7gSDEkeG7h20uIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iCittc2dzdHIgIkzhu5dpIG7hu5lpIGLhu5kgR1N0cmVhbWVyOiB24bqlbiDEkeG7gSBt4bqhY2guIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBuZWdvdGlhdGlvbiBwcm9ibGVtLiIKK21zZ3N0ciAiTOG7l2kgbuG7mWkgYuG7mSBHU3RyZWFtZXI6IHbhuqVuIMSR4buBIHRo4buPYSB0aHXhuq1uLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogZXZlbnQgcHJvYmxlbS4iCittc2dzdHIgIkzhu5dpIG7hu5lpIGLhu5kgR1N0cmVhbWVyOiB24bqlbiDEkeG7gSBz4buxIGtp4buHbi4iCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4iCittc2dzdHIgIkzhu5dpIG7hu5lpIGLhu5kgR1N0cmVhbWVyOiB24bqlbiDEkeG7gSB0w6xtIG7GoWkuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgorbXNnc3RyICJM4buXaSBu4buZaSBi4buZIEdTdHJlYW1lcjogduG6pW4gxJHhu4EgdGjGsCB2acOqbiBjYXBzLiIKKworbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGFnIHByb2JsZW0uIgorbXNnc3RyICJM4buXaSBu4buZaSBi4buZIEdTdHJlYW1lcjogduG6pW4gxJHhu4EgdGjhursuIgorCittc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKK21zZ3N0ciAiQuG6o24gY8OgaSDEkeG6t3QgR1N0cmVhbWVyIGPhu6dhIGLhuqFuIGPDsm4gdGhp4bq/dSBt4buZdCBi4buVIHN1bmcuIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKK21zZ3N0ciAiTOG7l2kgbuG7mWkgYuG7mSBHU3RyZWFtZXI6IHbhuqVuIMSR4buBIMSR4buTbmcgaOG7ky4iCisKK21zZ2lkICIiCisiVGhpcyBhcHBsaWNhdGlvbiBpcyB0cnlpbmcgdG8gdXNlIEdTdHJlYW1lciBmdW5jdGlvbmFsaXR5IHRoYXQgaGFzIGJlZW4gIgorImRpc2FibGVkLiIKK21zZ3N0ciAi4buobmcgZOG7pW5nIG7DoHkgxJFhbmcgdGjhu60gc+G7rSBk4bulbmcgY2jhu6ljIG7Eg25nIEdTdHJlYW1lciBi4buLIHThuq90LiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3VwcG9ydGluZyBsaWJyYXJ5IGVycm9yLiIKK21zZ3N0ciAiVHLDrG5oIEdTdHJlYW1lciBt4bubaSBn4bq3cCBt4buZdCBs4buXaSB0aMawIHZp4buHbiBo4buXIHRy4bujIGNodW5nLiIKKworbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIktow7RuZyB0aOG7gyBraOG7n2kgxJHhu5luZyB0aMawIHZp4buHbiBo4buXIHRy4bujLiIKKworbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgxJHDs25nIHRoxrAgdmnhu4duIGjhu5cgdHLhu6MuIgorCittc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY+G6pXUgaMOsbmggdGjGsCB2aeG7h24gaOG7lyB0cuG7oy4iCisKK21zZ2lkICJFbmNvZGluZyBlcnJvci4iCittc2dzdHIgIiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgorbXNnc3RyICJUcsOsbmggR1N0cmVhbWVyIG3hu5tpIGfhurdwIG3hu5l0IGzhu5dpIHTDoGkgbmd1ecOqbiBjaHVuZy4iCisKK21zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgorbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkgdMOgaSBuZ3V5w6puLiIKKworbXNnaWQgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCittc2dzdHIgIlTDoGkgbmd1ecOqbiDEkWFuZyBi4bqtbiBoYXkgY2jGsGEgc+G6tW4gc8OgbmcuIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbeG7nyB0w6BpIG5ndXnDqm4gxJHhu4MgxJHhu41jLiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIG3hu58gdMOgaSBuZ3V5w6puIMSR4buDIGdoaS4iCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCittc2dzdHIgIktow7RuZyB0aOG7gyBt4bufIHTDoGkgbmd1ecOqbiDEkeG7gyDEkeG7jWMgdsOgIGdoaS4iCisKK21zZ2lkICJDb3VsZCBub3QgY2xvc2UgcmVzb3VyY2UuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgxJHDs25nIHTDoGkgbmd1ecOqbi4iCisKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIHJlc291cmNlLiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMSR4buNYyB04burIHTDoGkgbmd1ecOqbi4iCisKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gcmVzb3VyY2UuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ2hpIHbDoG8gdMOgaSBuZ3V5w6puLiIKKworbXNnaWQgIkNvdWxkIG5vdCBwZXJmb3JtIHNlZWsgb24gcmVzb3VyY2UuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdGhpIGjDoG5oIHZp4buHYyB0aW0gbsahaSB0csOqbiB0w6BpIG5ndXnDqm4uIgorCittc2dpZCAiQ291bGQgbm90IHN5bmNocm9uaXplIG9uIHJlc291cmNlLiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMSR4buTbmcgYuG7mSB0csOqbiB0w6BpIG5ndXnDqm4uIgorCittc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCittc2dzdHIgIktow7RuZyB0aOG7gyBs4bqleS/EkeG6t3QgdGhp4bq/dCBs4bqtcCB04burL3bDoG8gdMOgaSBuZ3V5w6puLiIKKworbXNnaWQgIk5vIHNwYWNlIGxlZnQgb24gdGhlIHJlc291cmNlLiIKK21zZ3N0ciAiS2jDtG5nIGPDsyBz4bupYyBjaOG7qWEgY8OybiBy4bqjbmggdHLDqm4gdMOgaSBuZ3V5w6puIMSRw7MuIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdHJlYW0gZXJyb3IuIgorbXNnc3RyICJUcsOsbmggR1N0cmVhbWVyIG3hu5tpIGfhurdwIG3hu5l0IGzhu5dpIGx14buTbmcgY2h1bmcuIgorCittc2dpZCAiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBoYW5kbGluZyBvZiB0aGlzIHN0cmVhbS4gUGxlYXNlIGZpbGUgYSBidWcuIgorbXNnc3RyICJZ4bq/dSB04buRIGtow7RuZyB0aGkgaMOgbmgga2jhuqMgbsSDbmcgcXXhuqNuIGzDvSBsdeG7k25nIG7DoHkuIEjDo3kgdGjDtG5nIGLDoW8gbOG7l2kuIgorCittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCittc2dzdHIgIktow7RuZyB0aOG7gyBxdXnhur90IMSR4buLbmgga2nhu4N1IGx14buTbmcuIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBvZiBhIGRpZmZlcmVudCB0eXBlIHRoYW4gaGFuZGxlZCBieSB0aGlzIGVsZW1lbnQuIgorbXNnc3RyICJMdeG7k25nIMSRw7Mga2jDoWMga2nhu4N1IHbhu5tpIGx14buTbmcgbcOgIHnhur91IHThu5EgbsOgeSBxdeG6o24gbMO9IMSRxrDhu6NjLiIKKworbXNnaWQgIlRoZXJlIGlzIG5vIGNvZGVjIHByZXNlbnQgdGhhdCBjYW4gaGFuZGxlIHRoZSBzdHJlYW0ncyB0eXBlLiIKK21zZ3N0ciAiIgorIkhp4buHbiB0aOG7nWkga2jDtG5nIGPDsyBjw6FjaCBtw6MgaMOzYS9naeG6o2kgbcOjIChjb2RlYykgcXXhuqNuIGzDvSDEkcaw4bujYyBsdeG7k25nIGtp4buDdSDEkcOzLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZWNvZGUgc3RyZWFtLiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGdp4bqjaSBtw6MgbHXhu5NuZy4iCisKK21zZ2lkICJDb3VsZCBub3QgZW5jb2RlIHN0cmVhbS4iCittc2dzdHIgIktow7RuZyB0aOG7gyBtw6MgaMOzYSBsdeG7k25nLiIKKworbXNnaWQgIkNvdWxkIG5vdCBkZW11bHRpcGxleCBzdHJlYW0uIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIG5nxINuIGPDoWNoIGx14buTbmcgxJHDoyBwaOG7kWkgaOG7o3AgxJHhu4MgdHJ1eeG7gW4gdGjDtG5nIHF1YSBt4buZdCBrw6puaCByacOqbmcgbOG6uy4iCisKK21zZ2lkICJDb3VsZCBub3QgbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIktow7RuZyB0aOG7gyBwaOG7kWkgaOG7o3AgbHXhu5NuZyDEkeG7gyB0cnV54buBbiB0aMO0bmcgcXVhIG3hu5l0IGvDqm5oIHJpw6puZyBs4bq7LiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgaW4gdGhlIHdyb25nIGZvcm1hdC4iCittc2dzdHIgIkx14buTbmcgY8OzIMSR4buLbmggZOG6oW5nIHNhaS4iCisKK21zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiTHXhu5NuZyBi4buLIG3huq10IG3DoyB2w6Aga2jDtG5nIGjhu5cgdHLhu6MgY2jhu6ljIG7Eg25nIGdp4bqjaSBtw6MuIgorCittc2dpZCAiIgorIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKKyJiZWVuIHN1cHBsaWVkLiIKK21zZ3N0ciAiTHXhu5NuZyBi4buLIG3huq10IG3DoyB2w6Aga2jDtG5nIHRo4buDIGdp4bqjaSBtw6MgdsOsIGNoxrBhIGN1bmcgY+G6pXAga2hvw6EgdGjDrWNoIGjhu6NwLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMuIgorbXNnc3RyICJLaMO0bmcgY8OzIHRow7RuZyDEkWnhu4dwIGzhu5dpIGNobyBtaeG7gW4gJXMuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcyBhbmQgY29kZSAlZC4iCittc2dzdHIgIktow7RuZyBjw7MgdGjDtG5nIMSRaeG7h3AgY2h14bqpbiBjaG8gbWnhu4FuICVzIHbDoCBtw6MgJWQuIgorCittc2dpZCAiU2VsZWN0ZWQgY2xvY2sgY2Fubm90IGJlIHVzZWQgaW4gcGlwZWxpbmUuIgorbXNnc3RyICLEkOG7k25nIGjhu5MgxJHDoyBjaOG7jW4ga2jDtG5nIHRo4buDIGTDuW5nIHRyb25nIMSRxrDhu51uZyDhu5FuZy4iCisKK21zZ2lkICJ0aXRsZSIKK21zZ3N0ciAidOG7sWEiCisKK21zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIgorbXNnc3RyICJ04buxYSDEkeG7gSB0aMaw4budbmcgZOG7pW5nIgorCittc2dpZCAidGl0bGUgc29ydG5hbWUiCittc2dzdHIgInTDqm4gc+G6r3AgdOG7sWEiCisKK21zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJ04buxYSDEkeG7gSB0aMaw4budbmcgZOG7pW5nIGNobyBt4bulYyDEkcOtY2ggc+G6r3AgeOG6v3AiCisKK21zZ2lkICJhcnRpc3QiCittc2dzdHIgIm5naOG7hyBzxKkiCisKK21zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmciCittc2dzdHIgIm5nxrDhu51pIHRodSBuaOG6oWMgbsOgeSIKKworbXNnaWQgImFydGlzdCBzb3J0bmFtZSIKK21zZ3N0ciAidMOqbiBz4bqvcCBuZ2jhu4cgc8SpIgorCittc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICIoY8OhYykgbmfGsOG7nWkgY2jhu4t1IHRyw6FjaCBuaGnhu4dtIHbhu4EgYuG6o24gdGh1LCBjaG8gbeG7pWMgxJHDrWNoIHPhuq9wIHjhur9wIgorCittc2dpZCAiYWxidW0iCittc2dzdHIgInThuq1wIG5o4bqhYyIKKworbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgorbXNnc3RyICJ04bqtcCBuaOG6oWMgY2jhu6lhIGThu68gbGnhu4d1IG7DoHkiCisKK21zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKK21zZ3N0ciAidMOqbiBz4bqvcCB04bqtcCIKKworbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJ04bqtcCBuaOG6oWMgY2jhu6lhIGThu68gbGnhu4d1IG7DoHksIGNobyBt4bulYyDEkcOtY2ggc+G6r3AgeOG6v3AiCisKK21zZ2lkICJhbGJ1bSBhcnRpc3QiCittc2dzdHIgIm5naOG7hyBzxKkgdOG6rXAiCisKK21zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQiCittc2dzdHIgIk5naOG7hyBzxKkgY+G7p2EgdG/DoG4gYuG7mSB04bqtcCBuaOG6oWMsIG5oxrAgaGnhu4NuIHRo4buLIMSRw7puZyIKKworbXNnaWQgImFsYnVtIGFydGlzdCBzb3J0bmFtZSIKK21zZ3N0ciAidMOqbiBz4bqvcCBuZ2jhu4cgc8SpIHThuq1wIgorCittc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkIgorbXNnc3RyICJOZ2jhu4cgc8SpIGPhu6dhIHRvw6BuIGLhu5kgdOG6rXAgbmjhuqFjLCB0aGVvIHRo4bupIHThu7EgxJHDum5nIgorCittc2dpZCAiZGF0ZSIKK21zZ3N0ciAibmfDoHkiCisKK21zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCittc2dzdHIgIm5nw6B5IHThuqFvIGThu68gbGnhu4d1IG7DoHkgKGThuqFuZyBj4bqldSB0csO6YyBHRGF0ZSkiCisKKyMsIGZ1enp5Cittc2dpZCAiZGF0ZXRpbWUiCittc2dzdHIgIm5nw6B5IgorCisjLCBmdXp6eQorbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKK21zZ3N0ciAibmfDoHkgdOG6oW8gZOG7ryBsaeG7h3UgbsOgeSAoZOG6oW5nIGPhuqV1IHRyw7pjIEdEYXRlKSIKKworbXNnaWQgImdlbnJlIgorbXNnc3RyICJ0aOG7gyBsb+G6oWkiCisKK21zZ2lkICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKK21zZ3N0ciAidGjhu4MgbG/huqFpIGPhu6dhIGThu68gbGnhu4d1IG7DoHkiCisKK21zZ2lkICJjb21tZW50IgorbXNnc3RyICJnaGkgY2jDuiIKKworbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIgorbXNnc3RyICLDvSBraeG6v24gY+G7p2EgYuG6oW4gduG7gSBuaOG6oWMgbsOgeSIKKworbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCittc2dzdHIgImdoaSBjaMO6IGvDqW8gZMOgaSIKKworbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIGluIGtleT12YWx1ZSBvciBrZXlbZW5dPWNvbW1lbnQgZm9ybSIKK21zZ3N0ciAiIgorInbEg24gYuG6o24gdOG7sSBkbyDEkeG6t3QgZ2hpIGNow7ogduG7gSBk4buvIGxp4buHdSBkxrDhu5tpIGThuqFuZyBrZXk9dmFsdWUgKGtob8OhPWdpw6EgdHLhu4spIGhheSAiCisia2V5W2VuXT1jb21tZW50IChraG/DoVtlbl09Z2hpIGNow7opIgorCittc2dpZCAidHJhY2sgbnVtYmVyIgorbXNnc3RyICJz4buRIHLDo25oIgorCittc2dpZCAidHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgInPhu5EgdGjhu6kgdOG7sSByw6NuaCDhu58gdHJvbmcgdOG6rXAgaOG7o3AiCisKK21zZ2lkICJ0cmFjayBjb3VudCIKK21zZ3N0ciAixJHhur9tIHLDo25oIgorCittc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKK21zZ3N0ciAic+G7kSDEkeG6v20gcsOjbmgg4bufIHRyb25nIHThuq1wIGjhu6NwIgorCittc2dpZCAiZGlzYyBudW1iZXIiCittc2dzdHIgInPhu5EgxJHEqWEiCisKK21zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICJz4buRIHRo4bupIHThu7EgxJHEqWEg4bufIHRyb25nIHThuq1wIGjhu6NwIgorCittc2dpZCAiZGlzYyBjb3VudCIKK21zZ3N0ciAixJHhur9tIMSRxKlhIgorCittc2dpZCAiY291bnQgb2YgZGlzY3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyBkaXNjIGJlbG9uZ3MgdG8iCittc2dzdHIgInPhu5EgxJHhur9tIMSRxKlhIOG7nyB0cm9uZyB04bqtcCBo4bujcCIKKworbXNnaWQgImxvY2F0aW9uIgorbXNnc3RyICLEkcOtYSDEkWnhu4NtIgorCittc2dpZCAiIgorIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgorImlzIGhvc3RlZCkiCittc2dzdHIgIiIKKyJOZ3Xhu5NuIGPhu6dhIG5o4bqhYy9waGltIGTGsOG7m2kgZOG6oW5nIG3hu5l0IMSR4buLYSBjaOG7iSBVUkkgKMSR4buLYSBjaOG7iSBn4buRYyBj4bunYSB04bqtcCB0aW4gaGF5ICIKKyJsdeG7k25nKSIKKworbXNnaWQgImhvbWVwYWdlIgorbXNnc3RyICJ0cmFuZyBjaOG7pyIKKworbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCittc2dzdHIgIlRyYW5nIGNo4bunIGPhu6dhIG5naOG7hyBzxKkgaGF5IHBoaW0gIgorCittc2dpZCAiZGVzY3JpcHRpb24iCittc2dzdHIgIm3DtCB04bqjIgorCittc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgorbXNnc3RyICJiw6BpIHTDs20gdOG6r3QgZGnhu4VuIHThuqMgbuG7mWkgZHVuZyBj4bunYSBk4buvIGxp4buHdSBuw6B5IgorCittc2dpZCAidmVyc2lvbiIKK21zZ3N0ciAicGhpw6puIGLhuqNuIgorCittc2dpZCAidmVyc2lvbiBvZiB0aGlzIGRhdGEiCittc2dzdHIgInBoacOqbiBi4bqjbiBj4bunYSBk4buvIGxp4buHdSBuw6B5IgorCittc2dpZCAiSVNSQyIKK21zZ3N0ciAiSVNSQyIKKworbXNnaWQgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKK21zZ3N0ciAiIgorIkx14bqtdCB0aHUgVGnDqnUgY2h14bqpbiBRdeG7kWMgdOG6vyAoSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSkg4oCUIHhlbSAiCisiPGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8+LiIKKworbXNnaWQgIm9yZ2FuaXphdGlvbiIKK21zZ3N0ciAidOG7lSBjaOG7qWMiCisKK21zZ2lkICJjb3B5cmlnaHQiCittc2dzdHIgInTDoWMgcXV54buBbiIKKworbXNnaWQgImNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgInRow7RuZyBiw6FvIHTDoWMgcXV54buBbiBj4bunYSBk4buvIGxp4buHdSBuw6B5IgorCittc2dpZCAiY29weXJpZ2h0IHVyaSIKK21zZ3N0ciAiVVJJIHTDoWMgcXV54buBbiIKKworbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAixJHhu4thIGNo4buJIFVSSSDEkeG6v24gdGjDtG5nIGLDoW8gdMOhYyBxdXnhu4FuIGPhu6dhIGThu68gbGnhu4d1IG7DoHkiCisKKyMsIGZ1enp5Cittc2dpZCAiZW5jb2RlZCBieSIKK21zZ3N0ciAibcOjIGjDs2EiCisKK21zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICJjb250YWN0IgorbXNnc3RyICJsacOqbiBs4bqhYyIKKworbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCittc2dzdHIgInRow7RuZyB0aW4gbGnDqm4gbOG6oWMiCisKK21zZ2lkICJsaWNlbnNlIgorbXNnc3RyICJnaeG6pXkgcGjDqXAiCisKK21zZ2lkICJsaWNlbnNlIG9mIGRhdGEiCittc2dzdHIgImdp4bqleSBwaMOpcCBj4bunYSBk4buvIGxp4buHdSBuw6B5IgorCittc2dpZCAibGljZW5zZSB1cmkiCittc2dzdHIgIlVSSSBnaeG6pXkgcGjDqXAiCisKK21zZ2lkICJVUkkgdG8gdGhlIGxpY2Vuc2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgIsSR4buLYSBjaOG7iSBVUkkgxJHhur9uIGdp4bqleSBwaMOpcCBj4bunYSBk4buvIGxp4buHdSBuw6B5IgorCittc2dpZCAicGVyZm9ybWVyIgorbXNnc3RyICJuZ8aw4budaSBiaeG7g3UgZGnhu4VuIgorCittc2dpZCAicGVyc29uKHMpIHBlcmZvcm1pbmciCittc2dzdHIgIm5nxrDhu51pIGJp4buDdSBkaeG7hW4gbmjhuqFjL+G6o25oIG7DoHkiCisKK21zZ2lkICJjb21wb3NlciIKK21zZ3N0ciAibmfGsOG7nWkgc2/huqFuIgorCittc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nIgorbXNnc3RyICIoY8OhYykgbmfGsOG7nWkgxJHDoyBzb+G6oW4gYuG6o24gdGh1IG7DoHkiCisKK21zZ2lkICJkdXJhdGlvbiIKK21zZ3N0ciAidGjhu51pIGdpYW4iCisKK21zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKK21zZ3N0ciAidGjhu51pIGdpYW4gYuG6sW5nIMSRxqFuIHbhu4sgdGjhu51pIGdpYW4ga2nhu4N1IEdTdHJlYW1lciAocGjhuqduIHThu7cgZ2nDonk6IG5zKSIKKworbXNnaWQgImNvZGVjIgorbXNnc3RyICJjb2RlYyIKKworbXNnaWQgImNvZGVjIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiY8OhY2ggbcOjIGjDs2EvZ2nhuqNpIG3DoCBk4buvIGxp4buHdSBuw6B5IgorCittc2dpZCAidmlkZW8gY29kZWMiCittc2dzdHIgImNvZGVjIOG6o25oIMSR4buZbmciCisKK21zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgImPDoWNoIG3DoyBow7NhL2dp4bqjaSBtw6MgZOG7ryBsaeG7h3Ug4bqjbmggxJHhu5luZyBuw6B5IgorCittc2dpZCAiYXVkaW8gY29kZWMiCittc2dzdHIgImNvZGVjIMOibSB0aGFuaCIKKworbXNnaWQgImNvZGVjIHRoZSBhdWRpbyBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiY8OhY2ggbcOjIGjDs2EvZ2nhuqNpIG3DoyBk4buvIGxp4buHdSDDom0gdGhhbmggbsOgeSIKKworbXNnaWQgInN1YnRpdGxlIGNvZGVjIgorbXNnc3RyICJjb2RlYyBwaOG7pSDEkeG7gSIKKworbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAiY29kZWMgdGhlbyDEkcOzIGThu68gbGnhu4d1IHBo4bulIMSR4buBIMSRxrDhu6NjIG3DoyBob8OhIgorCittc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKK21zZ3N0ciAiZOG6oW5nIGJhbyBi4buNYyIKKworbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICLEkeG7i25oIGThuqFuZyBiYW8gYuG7jWMgdGhlbyDEkcOzIGThu68gbGnhu4d1IMSRxrDhu6NjIGPhuqV0IGdp4buvIgorCittc2dpZCAiYml0cmF0ZSIKK21zZ3N0ciAidOG7tyBs4buHIGJpdCIKKworbXNnaWQgImV4YWN0IG9yIGF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgIiIKKyJz4buRIGJpdCBk4buvIGxp4buHdSB0cm9uZyBt4buXaSBnacOieSBwaMOhdCwgY2jDrW5oIHjDoWMgaGF5IHRydW5nIGLDrG5oLCB0aGVvIGJpdC9nacOieSIKKworbXNnaWQgIm5vbWluYWwgYml0cmF0ZSIKK21zZ3N0ciAidOG7tyBs4buHIGJpdCBraMO0bmcgxJHDoW5nIGvhu4MiCisKK21zZ2lkICJub21pbmFsIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICJz4buRIGJpdCBk4buvIGxp4buHdSB0cm9uZyBt4buXaSBnacOieSBwaMOhdCwga2jDtG5nIMSRw6FuZyBr4buDLCB0aGVvIGJpdC9nacOieSIKKworbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKK21zZ3N0ciAidOG7tyBs4buHIGJpdCB04buRaSB0aGnhu4N1IgorCittc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAic+G7kSBiaXQgZOG7ryBsaeG7h3UgdHJvbmcgbeG7l2kgZ2nDonkgcGjDoXQsIHThu5FpIHRoaeG7g3UsIHRoZW8gYml0L2dpw6J5IgorCittc2dpZCAibWF4aW11bSBiaXRyYXRlIgorbXNnc3RyICJ04buzIGzhu4cgYml0IHThu5FpIMSRYSIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgInPhu5EgYml0IGThu68gbGnhu4d1IHRyb25nIG3hu5dpIGdpw6J5IMSRxrDhu6NjIHBow6F0LCB04buRaSDEkWEsIHRoZW8gYml0L2dpw6J5IgorCittc2dpZCAiZW5jb2RlciIKK21zZ3N0ciAibcOjIGjDs2EiCisKK21zZ2lkICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgorbXNnc3RyICJi4buZIG3DoyBow7NhIMSRxrDhu6NjIGTDuW5nIMSR4buDIG3DoyBow7NhIGx14buTbmcgbsOgeSIKKworbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKK21zZ3N0ciAicGhpw6puIGLhuqNuIG3DoyIKKworbXNnaWQgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCittc2dzdHIgInBoacOqbiBi4bqjbiBj4bunYSBi4buZIG3DoyBow7NhIMSRxrDhu6NjIGTDuW5nIMSR4buDIG3DoyBow7NhIGx14buTbmcgbsOgeSIKKworbXNnaWQgInNlcmlhbCIKK21zZ3N0ciAiU1NYIgorCittc2dpZCAic2VyaWFsIG51bWJlciBvZiB0cmFjayIKK21zZ3N0ciAic+G7kSBz4bqjbiB4deG6pXQgY+G7p2EgcsOjbmggbsOgeSIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKK21zZ3N0ciAibmjhu5sgw6JtIGzGsOG7o25nIHLDo25oIgorCittc2dpZCAidHJhY2sgZ2FpbiBpbiBkYiIKK21zZ3N0ciAic+G7kSBkYiBi4bqhbiBtdeG7kW4gdMSDbmcgaGF5IGdp4bqjbSDDom0gbMaw4bujbmcgY+G7p2EgcsOjbmggbsOgeSIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgcGVhayIKK21zZ3N0ciAibmjhu5sgw6JtIGzGsOG7o25nIHThu5FpIMSRYSByw6NuaCIKKworbXNnaWQgInBlYWsgb2YgdGhlIHRyYWNrIgorbXNnc3RyICLDom0gbMaw4bujbmcgdOG7kWkgxJFhIGLhuqFuIG114buRbiBjaG8gcsOjbmggbsOgeSIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKK21zZ3N0ciAibmjhu5sgw6JtIGzGsOG7o25nIHThuq1wIG5o4bqhYy/huqNuaCIKKworbXNnaWQgImFsYnVtIGdhaW4gaW4gZGIiCittc2dzdHIgInPhu5EgZGIgYuG6oW4gbXXhu5FuIHTEg25nIGhheSBnaeG6o20gw6JtIGzGsOG7o25nIGPhu6dhIHThuq1wIG5o4bqhYy/huqNuaCBuw6B5IgorCittc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBwZWFrIgorbXNnc3RyICJuaOG7myDDom0gbMaw4bujbmcgdOG7kWkgxJFhIHThuq1wIG5o4bqhYy/huqNuaCIKKworbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgorbXNnc3RyICLDom0gbMaw4bujbmcgdOG7kWkgxJFhIGLhuqFuIG114buRbiBjaG8gdOG6rXAgbmjhuqFjL+G6o25oIG7DoHkiCisKK21zZ2lkICJyZXBsYXlnYWluIHJlZmVyZW5jZSBsZXZlbCIKK21zZ3N0ciAibOG7m3AgY2jhu4kgZOG6q24ga2h14bq/Y2ggxJHhuqFpIHBow6F0IGzhuqFpIgorCittc2dpZCAicmVmZXJlbmNlIGxldmVsIG9mIHRyYWNrIGFuZCBhbGJ1bSBnYWluIHZhbHVlcyIKK21zZ3N0ciAibOG7m3AgY2jhu4kgZOG6q24gY8OhYyBnacOhIHRy4buLIGtodeG6v2NoIMSR4bqhaSBj4bunYSByw6NuaCB2w6AgdOG6rXAgbmjhuqFjIgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSIKK21zZ3N0ciAibcOjIG5nw7RuIG5n4buvIgorCittc2dpZCAibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIgorbXNnc3RyICJtw6MgbmfDtG4gbmfhu68gY2hvIGx14buTbmcgbsOgeSwgdMO5eSB0aGVvIHRpw6p1IGNodeG6qW4gSVNPLTYzOS0xIgorCittc2dpZCAiaW1hZ2UiCittc2dzdHIgIuG6o25oIgorCittc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAi4bqjbmggbGnDqm4gcXVhbiDEkeG6v24gbHXhu5NuZyBuw6B5IgorCisjLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKK21zZ2lkICJwcmV2aWV3IGltYWdlIgorbXNnc3RyICLhuqNuaCB4ZW0gdGjhu60iCisKK21zZ2lkICJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgIuG6o25oIHhlbSB0aOG7rSBsacOqbiBxdWFuIMSR4bq/biBsdeG7k25nIG7DoHkiCisKK21zZ2lkICJhdHRhY2htZW50IgorbXNnc3RyICLEkeG7kyDEkcOtbmgga8OobSIKKworbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgInThuq1wIHRpbiDEkcOtbmgga8OobSBsdeG7k25nIG7DoHkiCisKK21zZ2lkICJiZWF0cyBwZXIgbWludXRlIgorbXNnc3RyICJ0aeG6v25nIMSR4bqtcCBt4buXaSBwaMO6dCIKKworbXNnaWQgIm51bWJlciBvZiBiZWF0cyBwZXIgbWludXRlIGluIGF1ZGlvIgorbXNnc3RyICJz4buRIHRp4bq/bmcgbOG6rXAgdHJvbmcgbeG7l2kgcGjDunQgw6JtIHRoYW5oIgorCittc2dpZCAia2V5d29yZHMiCittc2dzdHIgInThu6sga2hvw6EiCisKK21zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKK21zZ3N0ciAiY8OhYyB04burIGtob8OhIMSR4buLbmggZ2nhu5tpIGLhurFuZyBk4bqldSBwaOG6qXksIGRp4buFbiB04bqjIG7hu5lpIGR1bmciCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKK21zZ3N0ciAidMOqbiDEkeG7i25oIHbhu4sgxJHhu4thIGzDvSIKKworbXNnaWQgIiIKKyJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgorInByb2R1Y2VkIgorbXNnc3RyICIiCisiduG7iyB0csOtIG1pw6p1IHThuqMgY2hvIG5nxrDhu51pIMSR4buNYyDEkcaw4bujYyBj4bunYSBuxqFpIOG7nyDEkcOzIG5o4bqhYy9waMOtbSDEkcOjIMSRxrDhu6NjIHRodSBoYXkgdOG6oW8iCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCittc2dzdHIgIsSR4buZIHbEqSDEkeG7i25oIHbhu4sgxJHhu4thIGzDvSIKKworbXNnaWQgIiIKKyJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCisic291dGhlcm4gbGF0aXR1ZGVzKSIKK21zZ3N0ciAiIgorIsSR4buZIHbEqSDEkeG7i25oIHbhu4sgxJHhu4thIGzDvSDhu58gxJHDsyBuaOG6oWMvcGjDrW0gxJHDoyDEkcaw4bujYyB0aHUgaGF5IHThuqFvLCB0aGVvIMSR4buZIHTDuXkgdGhlbyAiCisiV0dTODQgKHjDrWNoIMSR4bqhbyBsw6Agc+G7kSBraMO0bmcsIMSR4buZIHbEqSBOYW0gY8OzIHPhu5Egw6JtKSIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBsb25naXR1ZGUiCittc2dzdHIgIsSR4buZIGtpbmggxJHhu4tuaCB24buLIMSR4buLYSBsw70iCisKK21zZ2lkICIiCisiZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgorImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCisibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgorbXNnc3RyICIiCisixJHhu5kga2luaCDEkeG7i25oIHbhu4sgxJHhu4thIGzDvSDhu58gxJHDsyBuaOG6oWMvcGjDrW0gxJHDoyDEkcaw4bujYyB0aHUgaGF5IHThuqFvLCB0aGVvIMSR4buZIHTDuXkgdGhlbyAiCisiV0dTODQgKGtpbmggdHV54bq/biBn4buRYyDhu58gUXXhu5FjIEFuaCBsw6Agc+G7kSBraMO0bmcsIMSR4buZIGtpbmggVMOieSBjw7Mgc+G7kSDDom0pIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKK21zZ3N0ciAixJHhu5kgY2FvIMSR4buLbmggduG7iyDEkeG7i2EgbMO9IgorCittc2dpZCAiIgorImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCisiYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKK21zZ3N0ciAiIgorIsSR4buZIGNhbyDEkeG7i25oIHbhu4sgxJHhu4thIGzDvSDhu58gxJHDsyBuaOG6oWMvcGjDrW0gxJHDoyDEkcaw4bujYyB0aHUgaGF5IHThuqFvLCB0aGVvIG3DqXQgdMO5eSB0aGVvICIKKyJXU0c4NCAobeG6t3QgYmnhu4NuIHRydW5nIGLDrG5oIGzDoCBz4buRIGtow7RuZykiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gY291bnRyeSIKK21zZ3N0ciAiduG7iyB0csOtIMSR4buLYSBsw70gY+G7p2EgcXXhu5FjIGdpYSIKKworbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICIiCisicXXhu5FjIGdpYSAodMOqbiB0aeG6v25nIEFuaCwgdi5kLiDCqyBWaWV0bmFtIMK7KSDhu58gxJHDsyBuaOG6oWMvcGjDrW0gxJHDoyDEkcaw4bujYyB0aHUgaGF5IHThuqFvIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCittc2dzdHIgInbhu4sgdHLDrSDEkeG7i2EgbMO9IGPhu6dhIHRow6BuaCBwaOG7kSIKKworbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICIiCisidGjDoG5oIHBo4buRICh0w6puIHRp4bq/bmcgQW5oLCB2LmQuIMKrIEhhbm9pIMK7KSDhu58gxJHDsyBuaOG6oWMvcGjDrW0gxJHDoyDEkcaw4bujYyB0aHUgaGF5IHThuqFvIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIHN1YmxvY2F0aW9uIgorbXNnc3RyICJ24buLIHRyw60gcGjhu6UgxJHhu4thIGzDvSIKKworbXNnaWQgIiIKKyJhIGxvY2F0aW9uIHdoaXRoaW4gYSBjaXR5IHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZCBvciBjcmVhdGVkIChlLmcuICIKKyJ0aGUgbmVpZ2hib3Job29kKSIKK21zZ3N0ciAiIgorIm3hu5l0IHbDuW5nIGLDqm4gdHJvbmcgdGjDoG5oIHBo4buRIOG7nyDEkcOzIHBoxrDGoW5nIHRp4buHbiDEkcOjIMSRxrDhu6NjIHThuqFvIGhheSBz4bqjbiB4deG6pXQgKHYuZC4gIgorImjDoG5nIHjDs20pIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgorbXNnc3RyICJ0w6puIMSR4buLbmggduG7iyDEkeG7i2EgbMO9IgorCittc2dpZCAiZXhwZWN0ZWQgZXJyb3Igb2YgdGhlIGhvcml6b250YWwgcG9zaXRpb25pbmcgbWVhc3VyZXMgKGluIG1ldGVycykiCittc2dzdHIgIiIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKK21zZ3N0ciAidOG7kWMgxJHhu5kgZGkgY2h1eeG7g24gdGhlbyB24buLIHRyw60gxJHhuqFpIGzDvSIKKworbXNnaWQgIiIKKyJtb3ZlbWVudCBzcGVlZCBvZiB0aGUgY2FwdHVyaW5nIGRldmljZSB3aGlsZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIGluIG0vcyIKK21zZ3N0ciAiIgorInThu5FjIMSR4buZIGRpIGNodXnhu4NuIGPhu6dhIHRoaeG6v3QgYuG7iyBi4bqvdCB0cm9uZyBraGkgdGjhu7FjIGhp4buHbiB2aeG7h2MgYuG6r3QgdGhlbyBtaWxpZ2nDonkiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgorbXNnc3RyICJoxrDhu5tuZyBkaSBjaHV54buDbiB0aGVvIHbhu4sgdHLDrSDEkeG6oWkgbMO9IgorCittc2dpZCAiIgorImluZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBvZiBhICIKKyJtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgMCAiCisibWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgorbXNnc3RyICIiCisibmfhu6Ugw70gaMaw4bubbmcgZGkgY2h1eeG7g24gY+G7p2EgdGhp4bq/dCBi4buLIMSRYW5nIGLhuq90IHBoxrDGoW5nIHRp4buHbi4gR2nDoSB0cuG7iyBuw6B5IMSRxrDhu6NjICIKKyLEkeG6oWkgZGnhu4duIGLhurFuZyDEkeG7mSB0aGVvIGThuqV1IHBo4bqpeSDEkeG7mW5nOiAwIGzDoCBC4bqvYyDEkeG6oWkgbMO9LCB2w6AgZ2nDoSB0cuG7iyB0xINuZyB0aGVvICIKKyJjaGnhu4F1IGtpbSDEkeG7k25nIGjhu5MuIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgorbXNnc3RyICJoxrDhu5tuZyBi4bqvdCB0aGVvIHbhu4sgdHLDrSDEkeG6oWkgbMO9IgorCittc2dpZCAiIgorImluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcgIGEgbWVkaWEuICIKKyJJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50ICByZXByZXNlbnRhdGlvbiwgMCBtZWFucyB0aGUgIgorImdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgorbXNnc3RyICIiCisibmfhu6Ugw70gaMaw4bubbmcgduG7gSDEkcOzIHRoaeG6v3QgYuG7iyDEkWFuZyBjaOG7iSBraGkgYuG6r3QgcGjGsMahbmcgdGnhu4duLiBHacOhIHRy4buLIG7DoHkgxJHGsOG7o2MgIgorIsSR4bqhaSBkaeG7h24gYuG6sW5nIMSR4buZIHRoZW8gZOG6pXUgcGjhuql5IMSR4buZbmc6IDAgbMOgIELhuq9jIMSR4bqhaSBsw70sIHbDoCBnacOhIHRy4buLIHTEg25nIHRoZW8gIgorImNoaeG7gXUga2ltIMSR4buTbmcgaOG7ky4iCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZScgaGVyZQorbXNnaWQgInNob3cgbmFtZSIKK21zZ3N0ciAiaGnhu4duIHTDqm4iCisKK21zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgorbXNnc3RyICJUw6puIGPhu6dhIGN14buZYyBiaeG7g3UgZGnhu4VuIFRWL3BvZGNhc3QvYuG7mSBsw6AgZ+G7kWMgY+G7p2EgcGjGsMahbmcgdGnhu4duIG7DoHkiCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQorbXNnaWQgInNob3cgc29ydG5hbWUiCittc2dzdHIgImhp4buHbiB0w6puIHPhuq9wIgorCittc2dpZCAiIgorIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20sIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICIiCisiVMOqbiBj4bunYSBjdeG7mWMgYmnhu4N1IGRp4buFbiBUVi9wb2RjYXN0L2Lhu5kgbMOgIGfhu5FjIGPhu6dhIHBoxrDGoW5nIHRp4buHbiBuw6B5LCBjaG8gbeG7pWMgIgorIsSRw61jaCBz4bqvcCB44bq/cCIKKworbXNnaWQgImVwaXNvZGUgbnVtYmVyIgorbXNnc3RyICJz4buRIHTDrG5oIHRp4bq/dCIKKworbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICJT4buRIHRo4bupIHThu7EgdMOsbmggdGnhur90IHRyb25nIG3DuWEgY3VuZyBj4bqlcCBwaMawxqFuZyB0aeG7h24gbsOgeSIKKworbXNnaWQgInNlYXNvbiBudW1iZXIiCittc2dzdHIgInPhu5EgbcO5YSIKKworbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICJT4buRIHRo4bupIHThu7EgbcO5YSB0cm9uZyBjdeG7mWMgYmnhu4N1IGRp4buFbiBjdW5nIGPhuqVwIHBoxrDGoW5nIHRp4buHbiBuw6B5IgorCittc2dpZCAibHlyaWNzIgorbXNnc3RyICJs4budaSBuaOG6oWMiCisKK21zZ2lkICJUaGUgbHlyaWNzIG9mIHRoZSBtZWRpYSwgY29tbW9ubHkgdXNlZCBmb3Igc29uZ3MiCittc2dzdHIgIkzhu51pIG5o4bqhYyBj4bunYSBwaMawxqFuZyB0aeG7h24sIHRoxrDhu51uZyBkw7luZyBjaG8gYsOgaSBow6F0IgorCittc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCittc2dzdHIgInTDqm4gc+G6r3AgbmjhuqFjIHPEqSIKKworbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZywgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIihjw6FjKSBuZ8aw4budaSDEkcOjIHNv4bqhbiBi4bqjbiB0aHUsIGNobyBt4bulYyDEkcOtY2ggc+G6r3AgeOG6v3AiCisKK21zZ2lkICJncm91cGluZyIKK21zZ3N0ciAibmjDs20gbOG6oWkiCisKK21zZ2lkICIiCisiR3JvdXBzIHJlbGF0ZWQgbWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSB0cmFja3MsIGxpa2UgdGhlIGRpZmZlcmVudCBwaWVjZXMgIgorIm9mIGEgY29uY2VydG8uIEl0IGlzIGEgaGlnaGVyIGxldmVsIHRoYW4gYSB0cmFjaywgYnV0IGxvd2VyIHRoYW4gYW4gYWxidW0iCittc2dzdHIgIiIKKyJOaMOzbSBs4bqhaSBjw6FjIHBoxrDGoW5nIHRp4buHbiBsacOqbiBxdWFuIG3DoCBjaGnhur9tIGdp4buvIG5oaeG7gXUgcsOjbmgga2jDoWMgbmhhdSAodi5kLiAiCisiY8OhYyBwaOG6p24ga2jDoWMgbmhhdSBj4bunYSBt4buZdCBjw7RuZ3hlY3TDtCkuIEPhuqVwIG7DoHkgY2FvIGjGoW4gcsOjbmggY8OybiB0aOG6pXAgaMahbiB04bqtcCAiCisibmjhuqFjLiIKKworbXNnaWQgInVzZXIgcmF0aW5nIgorbXNnc3RyICLEkcOhbmggZ2nDoSBkbyBuZ8aw4budaSBkw7luZyIKKworbXNnaWQgIiIKKyJSYXRpbmcgYXR0cmlidXRlZCBieSBhIHVzZXIuIFRoZSBoaWdoZXIgdGhlIHJhbmssIHRoZSBtb3JlIHRoZSB1c2VyIGxpa2VzICIKKyJ0aGlzIG1lZGlhIgorbXNnc3RyICIiCisixJDDoW5oIGdpw6EgYuG7n2kgbmfGsOG7nWkgZMO5bmcuIEPDoG5nIGNhbyDEkWnhu4NtIGPDoG5nIG5oaeG7gXUgbmfGsOG7nWkgZMO5bmcgdGjDrWNoIG5o4bqhYy9waGltICIKKyJuw6B5IgorCittc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKK21zZ3N0ciAibmjDoCBjaOG6vyB04bqhbyB0aGnhur90IGLhu4siCisKK21zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICJOaMOgIGNo4bq/IHThuqFvIGPhu6dhIHRoaeG6v3QgYuG7iyDEkcaw4bujYyBkw7luZyDEkeG7gyB04bqhbyBwaMawxqFuZyB0aeG7h24gbsOgeSIKKworbXNnaWQgImRldmljZSBtb2RlbCIKK21zZ3N0ciAibeG6q3UgdGhp4bq/dCBi4buLIgorCittc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICJNw7QgaMOsbmggY+G7p2EgdGhp4bq/dCBi4buLIMSRxrDhu6NjIGTDuW5nIMSR4buDIHThuqFvIHBoxrDGoW5nIHRp4buHbiBuw6B5IgorCisjLCBmdXp6eQorbXNnaWQgImFwcGxpY2F0aW9uIG5hbWUiCittc2dzdHIgInTDqm4gxJHhu4tuaCB24buLIMSR4buLYSBsw70iCisKKyMsIGZ1enp5Cittc2dpZCAiQXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIgorbXNnc3RyICJNw7QgaMOsbmggY+G7p2EgdGhp4bq/dCBi4buLIMSRxrDhu6NjIGTDuW5nIMSR4buDIHThuqFvIHBoxrDGoW5nIHRp4buHbiBuw6B5IgorCittc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKK21zZ3N0ciAiIgorCittc2dpZCAiQXJiaXRyYXJ5IGFwcGxpY2F0aW9uIGRhdGEgdG8gYmUgc2VyaWFsaXplZCBpbnRvIHRoZSBtZWRpYSIKK21zZ3N0ciAiIgorCittc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCittc2dzdHIgImjGsOG7m25nIOG6o25oIgorCittc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgorbXNnc3RyICJIxrDhu5tuZyB24buBIMSRw7Mg4bqjbmggbsOqbiDEkcaw4bujYyBxdWF5IGhv4bq3YyBs4bqtdCB0csaw4bubYyBraGkgaGnhu4NuIHRo4buLIgorCittc2dpZCAiLCAiCittc2dzdHIgIiwgIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCittc2dzdHIgIkzhu5ZJOiB04burIHnhur91IHThu5EgJXM6ICVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKKyIlc1xuIgorbXNnc3RyICIiCisiVGjDtG5nIHRpbiBn4buhIGzhu5dpIHRow6ptOlxuIgorIiVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgorbXNnc3RyICJraMO0bmcgY2hvIHBow6lwIG5o4buLIHBow6JuIHRy4buRbmcgxJHGsOG7o2MgZ2hpIHLDtSDCqyAlcyDCuyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBiaW4gXCIlc1wiLCBza2lwcGluZyIKK21zZ3N0ciAia2jDtG5nIGPDsyBuaOG7iyBwaMOibiDCqyAlcyDCuyBuw6puIGLhu48gcXVhIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiIKK21zZ3N0ciAia2jDtG5nIGPDsyB0w6BpIHPhuqNuIMKrICVzIMK7IHRyb25nIHnhur91IHThu5EgwqsgJXMgwrsiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhurd0IHTDoGkgc+G6o24gwqsgJXMgwrsgdHJvbmcgeeG6v3UgdOG7kSDCqyAlcyDCuyB0aMOgbmggwqsgJXMgwrsiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxpbmsgJXMgdG8gJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBsacOqbiBr4bq/dCAlcyDEkeG6v24gJXMiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCittc2dzdHIgImtow7RuZyBjw7MgeeG6v3UgdOG7kSDCqyAlcyDCuyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w6FjaCBjYXBzIMKrICVzIMK7IgorCittc2dpZCAibGluayB3aXRob3V0IHNvdXJjZSBlbGVtZW50IgorbXNnc3RyICJsacOqbiBr4bq/dCBraMO0bmcgY8OzIHnhur91IHThu5Egbmd14buTbiIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzaW5rIGVsZW1lbnQiCittc2dzdHIgIiIKKyJsacOqbiBr4bq/dCBraMO0bmcgY8OzIHnhur91IHThu5EgcXXhuqNuIGzDvSB2aeG7h2MgcGjDom4gcGjhu5FpIGThu68gbGnhu4d1IHbDoG8gxJHhu4dtIGtow6FjIG5oYXUiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgImtow7RuZyBjw7MgeeG6v3UgdOG7kSBuZ3Xhu5NuIGNobyBVUkkgwqsgJXMgwrsiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCB0byBsaW5rIFVSSSBcIiVzXCIgdG8iCittc2dzdHIgImtow7RuZyBjw7MgeeG6v3UgdOG7kSDEkeG6v24gxJHDsyBj4bqnbiBsacOqbiBr4bq/dCBVUkkgwqsgJXMgwrsiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgorbXNnc3RyICIiCisia2jDtG5nIGPDsyB54bq/dSB04buRIHF14bqjbiBsw70gdmnhu4djIHBow6JuIHBo4buRaSBk4buvIGxp4buHdSB2w6BvIMSR4buHbSBraMOhYyBuaGF1LCBjaG8gxJHhu4thICIKKyLEkWnhu4NtIMKrICVzIMK7IgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAiIgorImtow7RuZyB0aOG7gyBr4bq/dCBo4bujcCB54bq/dSB04buRIHF14bqjbiBsw70gdmnhu4djIHBow6JuIHBo4buRaSBk4buvIGxp4buHdSB2w6BvIMSR4buHbSBraMOhYyBuaGF1LCAiCisiY2hvIFVSSSDCqyAlcyDCuyIKKworbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgorbXNnc3RyICJraMO0bmcgY2hvIHBow6lwIMSRxrDhu51uZyDhu5FuZyB0cuG7kW5nIgorCittc2dpZCAiSW50ZXJuYWwgY2xvY2sgZXJyb3IuIgorbXNnc3RyICJM4buXaSDEkeG7k25nIGjhu5MgbuG7mWkgYuG7mS4iCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgorbXNnc3RyICJM4buXaSBsdeG7k25nIGThu68gbGnhu4d1IG7hu5lpIGLhu5kuIgorCittc2dpZCAiQSBsb3Qgb2YgYnVmZmVycyBhcmUgYmVpbmcgZHJvcHBlZC4iCittc2dzdHIgIk5oaeG7gXUgYuG7mSDEkeG7h20gYuG7iyBi4buPLiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBwcm9ibGVtLiIKK21zZ3N0ciAiVuG6pW4gxJHhu4EgbHXhu5NuZyBk4buvIGxp4buHdSBu4buZaSBi4buZLiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiTOG7l2kgbHXhu5NuZyBk4buvIGxp4buHdSBu4buZaSBi4buZLiIKKworbXNnaWQgIkZpbHRlciBjYXBzIgorbXNnc3RyICJM4buNYyB04buRaSDEkWEiCisKK21zZ2lkICIiCisiUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCisicHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKK21zZ3N0ciAiIgorIkjhuqFuIGNo4bq/IGPDoWMga2jhuqMgbsSDbmcgY8OzIHRo4buDIGNobyBwaMOpcCAoTlVMTCBbdsO0IGdpw6EgdHLhu4tdIGNobyBwaMOpcCB04bqldCBj4bqjKS4gIgorIsSQ4bq3dCB0aHXhu5ljIHTDrW5oIG7DoHkgdGjDrCBjaOG6pXAgbmjhuq1uIHRoYW0gY2hp4bq/dSDEkeG6v24gxJHhu5FpIHTGsOG7o25nIEdzdENhcHMgxJHDoyBjdW5nICIKKyJj4bqlcC4iCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiQ2jGsGEgZ2hpIHLDtSB0w6puIHThuq1wIHRpbiDEkeG7gyBnaGkgdsOgby4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbeG7nyB04bqtcCB0aW4gwqsgJXMgwrsgxJHhu4MgZ2hpLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSRw7NuZyB04bqtcCB0aW4gwqsgJXMgwrsuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdMOsbSB0cm9uZyB04bqtcCB0aW4gwqsgJXMgwrsuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgZ2hpIHbDoG8gdOG6rXAgdGluIMKrICVzIMK7LiIKKworbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHJlYWRpbmcuIgorbXNnc3RyICJDaMawYSBnaGkgcsO1IHTDqm4gdOG6rXAgdGluIMSR4buDIMSR4buNYy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbeG7nyB04bqtcCB0aW4gwqsgJXMgwrsgxJHhu4MgxJHhu41jLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGluZm8gb24gXCIlc1wiLiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGzhuqV5IHRow7RuZyB0aW4gduG7gSDCqyAlcyDCuy4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiXCIlc1wiIGlzIGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAiwqsgJXMgwrsgbMOgIHRoxrAgbeG7pWMuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKK21zZ3N0ciAiVOG6rXAgdGluIMKrICVzIMK7IGzDoCDhu5UgY+G6r20uIgorCittc2dpZCAiRmFpbGVkIGFmdGVyIGl0ZXJhdGlvbnMgYXMgcmVxdWVzdGVkLiIKK21zZ3N0ciAiTOG7l2kgc2F1IHPhu5EgbOG6p24gbOG6t3AgbOG6oWkgxJHGsOG7o2MgY2jhu41uLiIKKworbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCittc2dzdHIgIkNoxrBhIHjDoWMgxJHhu4tuaCB0aMawIG3hu6VjIHThuqFtIHRo4budaS4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHThuqFvIHThuq1wIHRpbiB04bqhbSB0aOG7nWkgwqsgJXMgwrsuIgorCittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGdoaSB2w6BvIHThuq1wIHRpbiB04bqjaSB24buBLiIKKworbXNnaWQgImNhcHMiCittc2dzdHIgImto4bqjIG7Eg25nIgorCittc2dpZCAiZGV0ZWN0ZWQgY2FwYWJpbGl0aWVzIGluIHN0cmVhbSIKK21zZ3N0ciAixJHDoyBwaMOhdCBoaeG7h24ga2jhuqMgbsSDbmcgdHJvbmcgbHXhu5NuZyIKKworbXNnaWQgIm1pbmltdW0iCittc2dzdHIgInThu5FpIHRoaeG7g3UiCisKK21zZ2lkICJtYXhpbXVtIgorbXNnc3RyICJ04buRaSDEkWEiCisKK21zZ2lkICJmb3JjZSBjYXBzIgorbXNnc3RyICJideG7mWMga2jhuqMgbsSDbmciCisKK21zZ2lkICJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIKK21zZ3N0ciAiYnXhu5ljIGPDoWMga2jhuqMgbsSDbmcgbcOgIGtow7RuZyB0w6xtIGtp4buDdSIKKworbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKK21zZ3N0ciAiTHXhu5NuZyBraMO0bmcgY2jhu6lhIGThu68gbGnhu4d1LiIKKworbXNnaWQgIkltcGxlbWVudGVkIEludGVyZmFjZXM6XG4iCittc2dzdHIgIkdpYW8gZGnhu4duIMSRw6MgdGjhu7FjIGhp4buHbjpcbiIKKworbXNnaWQgInJlYWRhYmxlIgorbXNnc3RyICLEkeG7jWMgxJHGsOG7o2MiCisKK21zZ2lkICJ3cml0YWJsZSIKK21zZ3N0ciAiZ2hpIMSRxrDhu6NjIgorCittc2dpZCAiY29udHJvbGxhYmxlIgorbXNnc3RyICLEkWnhu4F1IGtoaeG7g24gxJHGsOG7o2MiCisKK21zZ2lkICJjaGFuZ2VhYmxlIGluIE5VTEwsIFJFQURZLCBQQVVTRUQgb3IgUExBWUlORyBzdGF0ZSIKK21zZ3N0ciAiIgorCittc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwsIFJFQURZIG9yIFBBVVNFRCBzdGF0ZSIKK21zZ3N0ciAiIgorCittc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwgb3IgUkVBRFkgc3RhdGUiCittc2dzdHIgIiIKKworbXNnaWQgIkJsYWNrbGlzdGVkIGZpbGVzOiIKK21zZ3N0ciAiVOG6rXAgdGluIGLhu4sgY+G6pW06IgorCittc2dpZCAiVG90YWwgY291bnQ6ICIKK21zZ3N0ciAixJDhur9tIHThu5VuZzogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdGVkIGZpbGUiCittc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdGVkIGZpbGVzIgorbXNnc3RyWzBdICIlZCB04bqtcCB0aW4gYuG7iyBj4bqlbSIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBwbHVnaW4iCittc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCittc2dzdHJbMF0gIiVkIHBo4bqnbiBi4buVIHN1bmciCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgorbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKK21zZ3N0clswXSAiJWQgbeG7pWMgbmjhuq1wIGLhu4sgY+G6pW0iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgZmVhdHVyZSIKK21zZ2lkX3BsdXJhbCAiJWQgZmVhdHVyZXMiCittc2dzdHJbMF0gIiVkIHTDrW5oIG7Eg25nIgorCittc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgorbXNnc3RyICJJbiByYSBt4buNaSB54bq/dSB04buRIgorCittc2dpZCAiUHJpbnQgbGlzdCBvZiBibGFja2xpc3RlZCBmaWxlcyIKK21zZ3N0ciAiSW4gZGFuaCBzw6FjaCBjw6FjIHThuq1wIHRpbiBi4buLIGPhuqVtIgorCittc2dpZCAiIgorIlByaW50IGEgbWFjaGluZS1wYXJzYWJsZSBsaXN0IG9mIGZlYXR1cmVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIG9yIGFsbCAiCisicGx1Z2lucyBwcm92aWRlLlxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBpbiBjb25uZWN0aW9uIHdpdGggZXh0ZXJuYWwgIgorImF1dG9tYXRpYyBwbHVnaW4gaW5zdGFsbGF0aW9uIG1lY2hhbmlzbXMiCittc2dzdHIgIiIKKyJJbiByYSBkYW5oIHPDoWNoIGNobyBtw6F5IHBow6JuIHTDrWNoIMSRxrDhu6NjIGNo4bupYSBjw6FjIHTDrW5oIG7Eg25nIGPhu6dhIHBo4bqnbiBi4buVIHN1bmcgIgorIsSRw6MgZ2hpIHLDtSBob+G6t2MgbeG7jWkgcGjhuqduIGLhu5Ugc3VuZy5cbiIKKyJcdFx0XHRcdEPDsyDDrWNoIGtoaSBkw7luZyBjxqEgY2jhur8gdOG7sSDEkeG7mW5nIGLDqm4gbmdvw6BpIG3DoCBjw6BpIMSR4bq3dCBwaOG6p24gYuG7lSBzdW5nLiIKKworbXNnaWQgIkxpc3QgdGhlIHBsdWdpbiBjb250ZW50cyIKK21zZ3N0ciAiTGnhu4d0IGvDqiBu4buZaSBkdW5nIHBo4bqnbiBi4buVIHN1bmciCisKK21zZ2lkICJQcmludCBzdXBwb3J0ZWQgVVJJIHNjaGVtZXMsIHdpdGggdGhlIGVsZW1lbnRzIHRoYXQgaW1wbGVtZW50IHRoZW0iCittc2dzdHIgIkluIHJhIGPDoWMgbMaw4bujYyDEkeG7kyBVUkkgxJHGsOG7o2MgaOG7lyB0cuG7oywgduG7m2kgbmjhu69uZyB54bq/dSB04buRIHRo4buxYyBoaeG7h24gY2jDum5nLiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmlsZTogJXNcbiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIG7huqFwIHThuq1wIHRpbiBwaOG6p24gYuG7lSBzdW5nOiAlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgorbXNnc3RyICJLaMO0bmcgY8OzIHnhur91IHThu5EgaGF5IHBo4bqnbiBi4buVIHN1bmcgbmjGsCB24bqteSDCqyAlcyDCu1xuIgorCittc2dpZCAiSW5kZXggc3RhdGlzdGljcyIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIGVsZW1lbnQgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAiTmjhuq1uIMSRxrDhu6NjIHRow7RuZyDEkWnhu4dwIHPhu5EgJXUgdOG7qyBwaOG6p24gdOG7rSDCqyAlcyDCuyAoJXMpOiAiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCittc2dzdHIgIk5o4bqtbiDEkcaw4bujYyB0aMO0bmcgxJFp4buHcCBz4buRICV1IHThu6sgxJHhu4dtIMKrICVzOiVzIMK7ICglcyk6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAiTmjhuq1uIMSRxrDhu6NjIHRow7RuZyDEkWnhu4dwIHPhu5EgJXUgdOG7qyDEkeG7kWkgdMaw4bujbmcgwqsgJXMgwrsgKCVzKTogIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSAoJXMpOiAiCittc2dzdHIgIk5o4bqtbiDEkcaw4bujYyB0aMO0bmcgxJFp4buHcCBz4buRICV1ICglcyk6ICIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgRU9TIGZyb20gZWxlbWVudCBcIiVzXCIuXG4iCittc2dzdHIgIk3hu5tpIG5o4bqtbiBr4bq/dCB0aMO6YyBsdeG7k25nIChFT1MpIHThu6sgeeG6v3UgdOG7kSDCqyAlcyDCuy5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgorbXNnc3RyICJUSOG6uiDEkMODIFTDjE0gICAgICA6IMSRxrDhu6NjIHTDrG0gYuG7n2kgeeG6v3UgdOG7kSDCqyAlcyDCuy5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCittc2dzdHIgIlRI4bq6IMSQw4MgVMOMTSAgICAgIDogxJHGsOG7o2MgdMOsbSBi4bufaSDEkeG7h20gwqsgJXM6JXMgwrsuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgorbXNnc3RyICJUSOG6uiDEkMODIFTDjE0gICAgICA6IMSRxrDhu6NjIHTDrG0gYuG7n2kgxJHhu5FpIHTGsOG7o25nIMKrICVzIMK7LlxuIgorCittc2dpZCAiRk9VTkQgVEFHXG4iCittc2dzdHIgIlRI4bq6IMSQw4MgVMOMTVxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJTkZPOlxuIgorIiVzXG4iCittc2dzdHIgIiIKKyJUaMO0bmcgdGluOlxuIgorIiVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgorbXNnc3RyICJD4bqiTkggQsOBTyA6IHThu6sgeeG6v3UgdOG7kSAlczogJXNcbiIKKworbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgorbXNnc3RyICJDdeG7mW4gc+G6tW4sIMSR4bujaSBjaHV54buDbiBob8OhbiDEkeG7h20geG9uZy4uLlxuIgorCittc2dpZCAiYnVmZmVyaW5nLi4uIgorbXNnc3RyICLEkWFuZyBjaHV54buDbiBob8OhbiDEkeG7h20uLi4iCisKK21zZ2lkICJEb25lIGJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgorbXNnc3RyICJIb8OgbiB04bqldCBjaHV54buDbiBob8OhbiDEkeG7h20gbsOqbiBs4bqtcCDEkcaw4budbmcg4buRbmcgdGjDoG5oIMSQQU5HIFBIw4FUIC4uLlxuIgorCittc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKK21zZ3N0ciAixJBhbmcgY2h1eeG7g24gaG/DoW4gxJHhu4dtIG7Dqm4gbOG6rXAgxJHGsOG7nW5nIOG7kW5nIHRow6BuaCBC4buKIFThuqBNIEThu6pORyAuLi5cbiIKKworbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCittc2dzdHIgIlBow6JuIHBo4buRaSBs4bqhaSBz4buxIMOibSDhu7cuLi5cbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgorbXNnc3RyICLEkGFuZyDEkeG6t3QgdMOsbmggdHLhuqFuZyB0aMOgbmggJXMgbmjGsCB5w6p1IGPhuqd1IGLhu59pICVzLi4uLlxuIgorCittc2dpZCAiSW50ZXJydXB0OiBTdG9wcGluZyBwaXBlbGluZSAuLi5cbiIKK21zZ3N0ciAiTmfhuq90OiDEkWFuZyBuZ+G7q25nIGNo4bqheSDEkcaw4budbmcg4buRbmcgLi4uXG4iCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKK21zZ3N0ciAia2jDtG5nIGPDsyB54bq/dSB04buRIMKrICVzIMK7IgorCittc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgorbXNnc3RyICJUaOG7gyB4deG6pXQgKGPFqW5nIMSRxrDhu6NjIGJp4bq/dCBsw6Agc2nDqnUgZOG7ryBsaeG7h3UpIgorCittc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKK21zZ3N0ciAiWHXhuqV0IHRow7RuZyB0aW4gdHLhuqFuZyB0aMOhaSB2w6AgdGjDtG5nIGLDoW8gdMOgaSBz4bqjbiIKKworbXNnaWQgIkRvIG5vdCBwcmludCBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24iCittc2dzdHIgIktow7RuZyBpbiByYSB0aMO0bmcgdGluIG7DoG8gduG7gSB0aeG6v24gaMOgbmgiCisKK21zZ2lkICJPdXRwdXQgbWVzc2FnZXMiCittc2dzdHIgIlRow7RuZyDEkWnhu4dwIHh14bqldCIKKworbXNnaWQgIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIFRZUEUiCittc2dzdHIgIktow7RuZyB4deG6pXQgdGjDtG5nIHRpbiB0cuG6oW5nIHRow6FpIEtJ4buCVSIKKworbXNnaWQgIlRZUEUxLFRZUEUyLC4uLiIKK21zZ3N0ciAiS0nhu4JVMSxLSeG7glUyLC4uLiIKKworbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKK21zZ3N0ciAiS2jDtG5nIGPDoGkgxJHhurd0IGLhu5kgcXXhuqNuIGzDvSBs4buXaSIKKworbXNnaWQgIlByaW50IGFsbG9jIHRyYWNlIChpZiBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSkiCittc2dzdHIgIkluIHJhIHbhur90IGPhuqVwIHBow6F0IChu4bq/dSDEkcaw4bujYyBi4bqtdCBraGkgYmnDqm4gZGljaCkiCisKK21zZ2lkICJGb3JjZSBFT1Mgb24gc291cmNlcyBiZWZvcmUgc2h1dHRpbmcgdGhlIHBpcGVsaW5lIGRvd24iCittc2dzdHIgIsOJcCBideG7mWMga+G6v3QgdGjDumMgbHXhu5NuZyB0csOqbiBjw6FjIG5ndeG7k24gdHLGsOG7m2Mga2hpIMSRw7NuZyDEkcaw4budbmcg4buRbmciCisKK21zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKK21zZ3N0ciAiTOG7lkk6IGtow7RuZyB0aOG7gyBj4bqldSB04bqhbyDEkcaw4budbmcg4buRbmc6ICVzLlxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKK21zZ3N0ciAiTOG7lkk6IGtow7RuZyB0aOG7gyBj4bqldSB04bqhbyDEkcaw4budbmcg4buRbmcuXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogZXJyb25lb3VzIHBpcGVsaW5lOiAlc1xuIgorbXNnc3RyICJD4bqiTkggQsOBTyA6IMSRxrDhu51uZyDhu5FuZyBjw7MgbOG7l2k6ICVzXG4iCisKK21zZ2lkICJFUlJPUjogdGhlICdwaXBlbGluZScgZWxlbWVudCB3YXNuJ3QgZm91bmQuXG4iCittc2dzdHIgIkzhu5ZJOiBraMO0bmcgdMOsbSB0aOG6pXkgeeG6v3UgdOG7kSDCqyDEkcaw4budbmcg4buRbmcgwrsgKHBpcGVsaW5lKS5cbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgorbXNnc3RyICLEkGFuZyBs4bqtcCDEkcaw4budbmcg4buRbmcgdGjDoG5oIELhu4ogVOG6oE0gROG7qk5HIC4uLlxuIgorCittc2dpZCAiRVJST1I6IFBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwYXVzZS5cbiIKK21zZ3N0ciAiTOG7lkk6IMSRxrDhu51uZyDhu5FuZyBraMO0bmcgdOG6oW0gZOG7q25nIMSRxrDhu6NjLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgorbXNnc3RyICLEkMaw4budbmcg4buRbmcgbMOgIMSR4buZbmcsIGtow7RuZyBj4bqnbiBUSeG7gE4gQ1Xhu5hOIC4uLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTElORyAuLi5cbiIKK21zZ3N0ciAixJDGsOG7nW5nIOG7kW5nIMSQQU5HIFRJ4buATiBDVeG7mE4gLi4uXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHByZXJvbGwuXG4iCittc2dzdHIgIkzhu5ZJOiDEkcaw4budbmcg4buRbmcga2jDtG5nIHRp4buBbiBjdeG7mW4gxJHGsOG7o2MuXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMRUQgLi4uXG4iCittc2dzdHIgIsSQxrDhu51uZyDhu5FuZyDEkMODIFRJ4buATiBDVeG7mE4gLi4uXG4iCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIsSQYW5nIGzhuq1wIMSRxrDhu51uZyDhu5FuZyB0aMOgbmggxJBBTkcgUEjDgVQgLi4uXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBsYXkuXG4iCittc2dzdHIgIkzhu5ZJOiDEkcaw4budbmcg4buRbmcga2jDtG5nIHBow6F0IMSRxrDhu6NjLlxuIgorCittc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gRm9yY2luZyBFT1Mgb24gdGhlIHBpcGVsaW5lXG4iCittc2dzdHIgIiIKKyJL4bq/dCB0aMO6YyBsdeG7k25nIGtoaSB04bqvdCBwaOG6p24gbeG7gW0gduG6q24gY8OybiBob+G6oXQgxJHhu5luZyB0aMOsIMSRYW5nIMOpcCBideG7mWMga+G6v3QgdGjDumMgIgorImx14buTbmcgdHLDqm4gxJHGsOG7nW5nIOG7kW5nXG4iCisKK21zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKK21zZ3N0ciAixJBhbmcgxJHhu6NpIGvhur90IHRow7pjIGx14buTbmcuLi5cbiIKKworbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCittc2dzdHIgIk5o4bqtbiDEkcaw4bujYyB0w61uIGhp4buHdSBr4bq/dCB0aMO6YyBsdeG7k25nOiDEkWFuZyBuZ+G7q25nIGNo4bqheSDEkcaw4budbmcg4buRbmcgLi4uXG4iCisKK21zZ2lkICJBbiBlcnJvciBoYXBwZW5lZCB3aGlsZSB3YWl0aW5nIGZvciBFT1NcbiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kgdHJvbmcga2hpIMSR4bujaSBr4bq/dCB0aMO6YyBsdeG7k25nXG4iCisKK21zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKK21zZ3N0ciAiVGjhu7FjIGhp4buHbiB4b25nIHNhdSAlIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKK21zZ3N0ciAixJBhbmcgbOG6rXAgxJHGsOG7nW5nIOG7kW5nIHRow6BuaCBT4bq0TiBTw4BORyAuLi5cbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCAuLi5cbiIKK21zZ3N0ciAixJBhbmcgbOG6rXAgxJHGsOG7nW5nIOG7kW5nIHRow6BuaCBWw5QgR0nDgSBUUuG7iiAuLi5cbiIKKworbXNnaWQgIkZyZWVpbmcgcGlwZWxpbmUgLi4uXG4iCittc2dzdHIgIsSQYW5nIGdp4bqjaSBwaMOzbmcgxJHGsOG7nW5nIOG7kW5nLi4uXG4iCisKKyN+IG1zZ2lkICJVc2FnZTogZ3N0LXhtbGxhdW5jaCA8ZmlsZS54bWw+IFsgZWxlbWVudC5wcm9wZXJ0eT12YWx1ZSAuLi4gXVxuIgorI34gbXNnc3RyICIiCisjfiAiQ8OhY2ggc+G7rSBk4bulbmc6IGdzdC14bWxsYXVuY2ggPHThuq1wX3Rpbi54bWw+IFsgeeG6v3VfdOG7kS50w6BpX3PhuqNuPWdpw6FfdHLhu4sgLi4uXVxuIgorCisjfiBtc2dpZCAiRVJST1I6IHBhcnNlIG9mIHhtbCBmaWxlICclcycgZmFpbGVkLlxuIgorI34gbXNnc3RyICJM4buWSTogbOG7l2kgcGjDom4gdMOhY2ggdOG6rXAgdGluIHhtbCDCqyAlcyDCuy5cbiIKKworI34gbXNnaWQgIkVSUk9SOiBubyB0b3BsZXZlbCBwaXBlbGluZSBlbGVtZW50IGluIGZpbGUgJyVzJy5cbiIKKyN+IG1zZ3N0ciAiTOG7lkk6IGtow7RuZyBjw7MgeeG6v3UgdOG7kSDEkcaw4budbmcg4buRbmcgY+G6pXAgxJHhuqd1IHRyb25nIHThuq1wIHRpbiDCqyAlcyDCuy5cbiIKKworI34gbXNnaWQgIldBUk5JTkc6IG9ubHkgb25lIHRvcGxldmVsIGVsZW1lbnQgaXMgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS5cbiIKKyN+IG1zZ3N0ciAiQ+G6ok5IIELDgU8gOiBoaeG7h24gdGjhu51pIGjhu5cgdHLhu6MgY2jhu4kgbeG7mXQgeeG6v3UgdOG7kSBj4bqlcCDEkeG6p3UuXG4iCisKKyN+IG1zZ2lkICJFUlJPUjogY291bGQgbm90IHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAlZDogJXMuXG4iCisjfiBtc2dzdHIgIkzhu5ZJOiBraMO0bmcgdGjhu4MgcGjDom4gdMOhY2ggxJHhu5FpIHPhu5EgZMOybmcgbOG7h25oICVkOiAlcy5cbiIKKworI34gbXNnaWQgIldBUk5JTkc6IGVsZW1lbnQgbmFtZWQgJyVzJyBub3QgZm91bmQuXG4iCisjfiBtc2dzdHIgIkPhuqJOSCBCw4FPIDoga2jDtG5nIHTDrG0gdGjhuqV5IHnhur91IHThu5EgdMOqbiDCqyAlcyDCuy5cbiIKKworI34gbXNnaWQgIlNhdmUgeG1sIHJlcHJlc2VudGF0aW9uIG9mIHBpcGVsaW5lIHRvIEZJTEUgYW5kIGV4aXQiCisjfiBtc2dzdHIgIkzGsHUgxJHGsOG7nW5nIOG7kW5nIGThuqFuZyBYTUwgdsOgbyBU4bqsUF9USU4gcuG7k2kgdGhvw6F0IgorCisjfiBtc2dpZCAiRklMRSIKKyN+IG1zZ3N0ciAiVOG6rFBfVElOIgorCisjfiBtc2dpZCAiRG8gbm90IGluc3RhbGwgc2lnbmFsIGhhbmRsZXJzIGZvciBTSUdVU1IxIGFuZCBTSUdVU1IyIgorI34gbXNnc3RyICLEkOG7q25nIGPDoGkgxJHhurd0IGLhu5kgcXXhuqNuIGzDvSB0w61uIGhp4buHdSBjaG8gU0lHVVNSMSB2w6AgU0lHVVNSMiIKZGlmZiAtLWdpdCBhL3BvL3poX0NOLmdtbyBiL3BvL3poX0NOLmdtbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTdjMzRhCi0tLSAvZGV2L251bGwKKysrIGIvcG8vemhfQ04uZ21vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL3poX0NOLnBvIGIvcG8vemhfQ04ucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ4MzQ0NQotLS0gL2Rldi9udWxsCisrKyBiL3BvL3poX0NOLnBvCkBAIC0wLDAgKzEsMTIyMCBAQAorIyBDaGluZXNlIChzaW1wbGlmaWVkKSB0cmFuc2xhdGlvbiBhYm91dCBnc3RyZWFtZXIuCisjIFRoaXMgZmlsZSBpcyBwdXQgaW4gdGhlIHB1YmxpYyBkb21haW4uCisjIEZ1bmRhIFdhbmcgPGZ1bmRhd2FuZ0BsaW51eC5uZXQuY24+LCAyMDA1LgorIyBKaSBaaGVuZ1l1IDx6aGVuZ3l1amlAZ21haWwuY29tPiwgMjAwOCwgMjAwOSwgMjAxMC4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdzdHJlYW1lciAwLjEwLjI1LjJcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wOS0yOSAxNDo1NSswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0wMi0wMiAxODo1OCswODAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBKaSBaaGVuZ1l1IDx6aGVuZ3l1amlAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IENoaW5lc2UgKHNpbXBsaWZpZWQpIDxpMThuLXpoQGdvb2dsZWdyb3Vwcy5jb20+XG4iCisiTGFuZ3VhZ2U6IHpoX0NOXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0xOyBwbHVyYWw9MDtcbiIKKworbXNnaWQgIlByaW50IHRoZSBHU3RyZWFtZXIgdmVyc2lvbiIKK21zZ3N0ciAi5omT5Y2wIEdTdHJlYW1lciDniYjmnKwiCisKK21zZ2lkICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKK21zZ3N0ciAi5bCG5omA5pyJ55qE6K2m5ZGK5Lmf5b2T5L2c5Lil6YeN6Zeu6aKYIgorCittc2dpZCAiUHJpbnQgYXZhaWxhYmxlIGRlYnVnIGNhdGVnb3JpZXMgYW5kIGV4aXQiCittc2dzdHIgIuaJk+WNsOWPr+eUqOeahOiwg+ivleexu+WIq+W5tumAgOWHuiIKKworbXNnaWQgIiIKKyJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gNSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKK21zZ3N0ciAi6buY6K6k6LCD6K+V57qn5Yir77yM5LuOIDEo5LuF5pyJ6ZSZ6K+vKeWIsCA1KOaJgOacieWGheWuuSnvvIww5Luj6KGo5peg6L6T5Ye6IgorCittc2dpZCAiTEVWRUwiCittc2dzdHIgIue6p+WIqyIKKworbXNnaWQgIiIKKyJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yICIKKyJ0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCittc2dzdHIgIiIKKyLpgJflj7fliIbpmpTnmoTigJznsbvliKvlkI3np7A657qn5Yir4oCd5YiX6KGo55So5p2l5Li65q+P5Liq57G75Yir6K6+572u5oyH5a6a55qE6LCD6K+V57qn5Yir44CC5aaCOiIKKyJHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCisKK21zZ2lkICJMSVNUIgorbXNnc3RyICLliJfooagiCisKK21zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKK21zZ3N0ciAi56aB5q2i5b2p6Imy55qE6LCD6K+V5L+h5oGv6L6T5Ye6IgorCittc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCittc2dzdHIgIuemgeatouiwg+ivlSIKKworbXNnaWQgIkVuYWJsZSB2ZXJib3NlIHBsdWdpbiBsb2FkaW5nIGRpYWdub3N0aWNzIgorbXNnc3RyICLlvIDlkK/or6bnu4bnmoTmj5Lku7bovb3lhaXliIbmnpAiCisKK21zZ2lkICJDb2xvbi1zZXBhcmF0ZWQgcGF0aHMgY29udGFpbmluZyBwbHVnaW5zIgorbXNnc3RyICLlhpLlj7fliIbpmpTnmoTljIXlkKvmj5Lku7bnmoTot6/lvoQiCisKK21zZ2lkICJQQVRIUyIKK21zZ3N0ciAi6Lev5b6EIgorCittc2dpZCAiIgorIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgorImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKK21zZ3N0ciAiIgorIumAl+WPt+WIhumalOeahOmihOi9veWFpeeahOaPkuS7tuWIl+ihqO+8jOiAjOS4lOatpOWIl+ihqOiiq+S/neWtmOS6jueOr+Wig+WPmOmHjyBHU1RfUExVR0lOX1BBVEgg5LitIgorCittc2dpZCAiUExVR0lOUyIKK21zZ3N0ciAi5o+S5Lu2IgorCittc2dpZCAiRGlzYWJsZSB0cmFwcGluZyBvZiBzZWdtZW50YXRpb24gZmF1bHRzIGR1cmluZyBwbHVnaW4gbG9hZGluZyIKK21zZ3N0ciAi56aB5q2i6Lef6Liq6KOF5YWl5o+S5Lu25pe255qE5q615Lil6YeN6ZSZ6K+vIgorCittc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIuemgeatouabtOaWsOWvhOWtmOWZqCIKKworbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCittc2dzdHIgIuaJq+aPj+WvhOWtmOWZqOaXtuS4jeWPr+WQr+eUqOW4ruWKqSIKKworbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgorbXNnc3RyICJHU3RyZWFtZXIg6YCJ6aG5IgorCittc2dpZCAiU2hvdyBHU3RyZWFtZXIgT3B0aW9ucyIKK21zZ3N0ciAi5pi+56S6IEdTdHJlYW1lciDpgInpobkiCisKK21zZ2lkICJVbmtub3duIG9wdGlvbiIKK21zZ3N0ciAi5pyq55+l6YCJ6aG5IgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIg6YGH5Yiw5LqG5bi46KeE5qC45b+D5bqT6ZSZ6K+v44CCIgorCittc2dpZCAiIgorIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyBlcnJvci4iCittc2dzdHIgIkdTdHJlYW1lciDlvIDlj5HogIXmnKrlr7nmraTplJnor6/mjIfmtL7plJnor6/ku6PnoIHjgIIiCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKK21zZ3N0ciAiR1N0cmVhbWVyIOWGhemDqOmUmeivr++8muS7o+eggeacquWunueOsOOAgiIKKworbXNnaWQgIiIKKyJHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQgYW5kIHNvbWUgZWxlbWVudCBmYWlsZWQgdG8gcG9zdCBhICIKKyJwcm9wZXIgZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLiIKK21zZ3N0ciAiIgorIkdTdHJlYW1lciDplJnor686IOeKtuaAgeabtOaUuemUmeivr++8jOiAjOS4lOafkOS6m+e7hOS7tuaXoOazleWvuemUmeivr+WOn+WboOe7meWHuuWQiOmAgueahOmUmeivr+S/oeaBr+OAgiIKKworIywgZnV6enkKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHBhZCBwcm9ibGVtLiIKK21zZ3N0ciAiR1N0cmVhbWVyIOWGhemDqOmUmeivrzog5aGr5YWF6Zeu6aKY44CCIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iCittc2dzdHIgIkdTdHJlYW1lciDlhoXpg6jplJnor6/vvJrnur/nqIvpl67popjjgIIiCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uIgorbXNnc3RyICJHU3RyZWFtZXIg5YaF6YOo6ZSZ6K+vOiDljY/llYbpl67popjjgIIiCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgorbXNnc3RyICJHU3RyZWFtZXIg5YaF6YOo6ZSZ6K+v77ya5LqL5Lu26Zeu6aKY44CCIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uIgorbXNnc3RyICJHU3RyZWFtZXIg5YaF6YOo6ZSZ6K+v77ya5pCc57Si6Zeu6aKY44CCIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgorbXNnc3RyICJHU3RyZWFtZXIg5YaF6YOo6ZSZ6K+vOiDliIbmnpDlmajpl67popjjgIIiCisKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKK21zZ3N0ciAiR1N0cmVhbWVyIOWGhemDqOmUmeivr++8muagh+etvumXrumimOOAgiIKKworbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCittc2dzdHIgIuaCqOeahCBHU3RyZWFtZXIg5a6J6KOF57y65bCR5o+S5Lu244CCIgorCittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKK21zZ3N0ciAiR1N0cmVhbWVyIOWGhemDqOmUmeivr++8muWni+e7iOmUmeivr+OAgiIKKworbXNnaWQgIiIKKyJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCisiZGlzYWJsZWQuIgorbXNnc3RyICLmraTnqIvluo/mraPlsJ3or5Xkvb/nlKjlt7LooqvnpoHnlKjnmoQgR1N0cmVhbWVyIOWKn+iDveOAgiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3VwcG9ydGluZyBsaWJyYXJ5IGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIOmBh+WIsOS6huW4uOinhOaUr+aMgeW6k+mUmeivr+OAgiIKKworbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIuaXoOazleWIneWni+WMluaUr+aMgeW6k+OAgiIKKworbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICLml6Dms5XlhbPpl63mlK/mjIHlupPjgIIiCisKK21zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCittc2dzdHIgIuaXoOazlemFjee9ruaUr+aMgeW6k+OAgiIKKworbXNnaWQgIkVuY29kaW5nIGVycm9yLiIKK21zZ3N0ciAiIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCByZXNvdXJjZSBlcnJvci4iCittc2dzdHIgIkdTdHJlYW1lciDpgYfliLDkuobluLjop4TotYTmupDplJnor6/jgIIiCisKK21zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgorbXNnc3RyICLotYTmupDmnKrmib7liLDjgIIiCisKK21zZ2lkICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgorbXNnc3RyICLotYTmupDlv5nmiJbkuI3lj6/nlKjjgIIiCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCittc2dzdHIgIuaXoOazleaJk+W8gOi1hOa6kOivu+WPluOAgiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKK21zZ3N0ciAi5peg5rOV5omT5byA6LWE5rqQ5YaZ5YWl44CCIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgorbXNnc3RyICLml6Dms5XmiZPlvIDotYTmupDor7vlj5blkozlhpnlhaXjgIIiCisKK21zZ2lkICJDb3VsZCBub3QgY2xvc2UgcmVzb3VyY2UuIgorbXNnc3RyICLml6Dms5XlhbPpl63otYTmupDjgIIiCisKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIHJlc291cmNlLiIKK21zZ3N0ciAi5peg5rOV5LuO6LWE5rqQ6ZiF6K+744CCIgorCittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKK21zZ3N0ciAi5peg5rOV5YaZ5YWl6LWE5rqQ44CCIgorCittc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCittc2dzdHIgIuaXoOazleWcqOi1hOa6kOS4iuaJp+ihjOaQnOe0ouOAgiIKKworbXNnaWQgIkNvdWxkIG5vdCBzeW5jaHJvbml6ZSBvbiByZXNvdXJjZS4iCittc2dzdHIgIuaXoOazleWcqOi1hOa6kOS4iuWQjOatpeOAgiIKKworbXNnaWQgIkNvdWxkIG5vdCBnZXQvc2V0IHNldHRpbmdzIGZyb20vb24gcmVzb3VyY2UuIgorbXNnc3RyICLml6Dms5Xku47otYTmupDojrflvpforr7nva7miJblnKjotYTmupDkuIrorr7lrprorr7nva7jgIIiCisKK21zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCittc2dzdHIgIui1hOa6kOS4iuaXoOWJqeS9meepuumXtOOAgiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIOmBh+WIsOS6huW4uOinhOa1gemUmeivr+OAgiIKKworbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKK21zZ3N0ciAi57uE5Lu25pyq5a6e546w5a+55q2k5rWB55qE5aSE55CG44CC6K+35o+Q5Lqk6ZSZ6K+v5oql5ZGK44CCIgorCittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCittc2dzdHIgIuaXoOazleehruWumua1geexu+Wei+OAgiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKK21zZ3N0ciAi5q2k5rWB55qE57G75Z6L5LiO5q2k57uE5Lu25Y+v5aSE55CG55qE57G75Z6L5LiN56ym44CCIgorCittc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgorbXNnc3RyICLmsqHmnInlj6/lpITnkIbmraTmtYHnsbvlnovnmoTnvJbop6PnoIHlmajjgIIiCisKK21zZ2lkICJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iCittc2dzdHIgIuaXoOazleino+eggea1geOAgiIKKworbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKK21zZ3N0ciAi5peg5rOV57yW56CB5rWB44CCIgorCittc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIuaXoOazleino+eggeWkmuW3peS8oOmAgeeahOa1geOAgiIKKworbXNnaWQgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKK21zZ3N0ciAi5peg5rOV57yW56CB5aSa5bel5Lyg6YCB55qE5rWB44CCIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiIKK21zZ3N0ciAi5q2k5rWB55qE5qC85byP6ZSZ6K+v44CCIgorCittc2dpZCAiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iCittc2dzdHIgIuatpOS4uuWKoOWvhua1geS4lOS4jeaUr+aMgeino+WvhuOAgiIKKworbXNnaWQgIiIKKyJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgY2FuJ3QgYmUgZGVjcnlwdGVkIGJlY2F1c2Ugbm8gc3VpdGFibGUga2V5IGhhcyAiCisiYmVlbiBzdXBwbGllZC4iCittc2dzdHIgIuatpOS4uuWKoOWvhua1ge+8jOiAjOS4lOeUseS6juacquaPkOS+m+WQiOmAgueahOWvhumSpeWboOatpOaXoOazleino+WvhuOAgiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJObyBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMuIgorbXNnc3RyICLln58gJXMg5peg6ZSZ6K+v5L+h5oGv44CCIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcyBhbmQgY29kZSAlZC4iCittc2dzdHIgIuWfnyAlcyDlkozku6PnoIEgJWQg5Lit5peg5qCH5YeG6ZSZ6K+v5L+h5oGv44CCIgorCittc2dpZCAiU2VsZWN0ZWQgY2xvY2sgY2Fubm90IGJlIHVzZWQgaW4gcGlwZWxpbmUuIgorbXNnc3RyICLpgInkuK3nmoTml7bpkp/luo/liJfml6Dms5XnlKjlnKjnrqHpgZPkuK3jgIIiCisKK21zZ2lkICJ0aXRsZSIKK21zZ3N0ciAi5qCH6aKYIgorCittc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKK21zZ3N0ciAi5YWs55So5qCH6aKYIgorCittc2dpZCAidGl0bGUgc29ydG5hbWUiCittc2dzdHIgIuaOkuW6j+WQjueahOagh+mimOWQjSIKKworbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIueUqOS6juaOkuW6j+eahOWFrOeUqOagh+mimCIKKworbXNnaWQgImFydGlzdCIKK21zZ3N0ciAi6Im65pyv5a62IgorCittc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIgorbXNnc3RyICLotJ/otKPlvZXliLbnmoTkuKrkuroiCisKK21zZ2lkICJhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgIuaOkuW6j+WQjueahOiJuuacr+WutiIKKworbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAi55So5LqO5o6S5bqP55qE6LSf6LSj5b2V5Yi255qE5Liq5Lq6IgorCittc2dpZCAiYWxidW0iCittc2dzdHIgIuS4k+i+kSIKKworbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgorbXNnc3RyICLljIXlkKvmraTmlbDmja7nmoTkuJPovpEiCisKK21zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKK21zZ3N0ciAi5o6S5bqP5ZCO55qE5LiT6L6R5ZCNIgorCittc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIueUqOS6juaOkuW6j+eahOWMheWQq+atpOaVsOaNrueahOS4k+i+kSIKKworbXNnaWQgImFsYnVtIGFydGlzdCIKK21zZ3N0ciAi5LiT6L6R6Im65pyv5a62IgorCittc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgorbXNnc3RyICLmiYDlupTlvZPmmL7npLrnmoTmlbTlvKDkuJPovpHnmoToibrmnK/lrrYiCisKK21zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCittc2dzdHIgIuS4k+i+keiJuuacr+WutuaOkuW6jyIKKworbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCIKK21zZ3N0ciAi5o6S5bqP5ZCO55qE5pW05byg5LiT6L6R6Im65pyv5a62IgorCittc2dpZCAiZGF0ZSIKK21zZ3N0ciAi5pel5pyfIgorCittc2dpZCAiZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHRGF0ZSBzdHJ1Y3R1cmUpIgorbXNnc3RyICLliJvlu7rmlbDmja7nmoTml6XmnJ8o5Li6IEdEYXRlIOe7k+aehCkiCisKKyMsIGZ1enp5Cittc2dpZCAiZGF0ZXRpbWUiCittc2dzdHIgIuaXpeacnyIKKworIywgZnV6enkKK21zZ2lkICJkYXRlIGFuZCB0aW1lIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdzdERhdGVUaW1lIHN0cnVjdHVyZSkiCittc2dzdHIgIuWIm+W7uuaVsOaNrueahOaXpeacnyjkuLogR0RhdGUg57uT5p6EKSIKKworbXNnaWQgImdlbnJlIgorbXNnc3RyICLmtYHmtL4iCisKK21zZ2lkICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKK21zZ3N0ciAi5q2k5pWw5o2u5omA5bGe55qE5rWB5rS+IgorCittc2dpZCAiY29tbWVudCIKK21zZ3N0ciAi5rOo6YeKIgorCittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCittc2dzdHIgIuazqOmHiuaVsOaNrueahOS7u+aEj+aWh+acrCIKKworbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCittc2dzdHIgIuabtOWkmuazqOmHiiIKKworbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIGluIGtleT12YWx1ZSBvciBrZXlbZW5dPWNvbW1lbnQgZm9ybSIKK21zZ3N0ciAi5Lul4oCc5YWz6ZSu6K+N77yd5YC85oiWIGtleVtlbl3vvJ3ms6jph4rigJ3ov5nnp43lvaLlvI/ms6jph4rmlbDmja7nmoTku7vmhI/mlofmnKwiCisKK21zZ2lkICJ0cmFjayBudW1iZXIiCittc2dzdHIgIumfs+i9qOe8luWPtyIKKworbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICLmlLbol4/pm4bkuK3nmoTpn7PovajnvJblj7ciCisKK21zZ2lkICJ0cmFjayBjb3VudCIKK21zZ3N0ciAi6Z+z6L2o5pWwIgorCittc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKK21zZ3N0ciAi5q2k6Z+z6L2o5omA5bGe55qE5pS26JeP6ZuG5Lit55qE6Z+z6L2o5pWwIgorCittc2dpZCAiZGlzYyBudW1iZXIiCittc2dzdHIgIuein+eJh+e8luWPtyIKKworbXNnaWQgImRpc2MgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgIuaUtuiXj+mbhuS4reeahOein+eJh+e8luWPtyIKKworbXNnaWQgImRpc2MgY291bnQiCittc2dzdHIgIuein+eJh+aVsCIKKworbXNnaWQgImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIgorbXNnc3RyICLmraTnop/miYDlsZ7nmoTmlLbol4/pm4bkuK3nmoTnop/niYfmlbAiCisKK21zZ2lkICJsb2NhdGlvbiIKK21zZ3N0ciAi5L2N572uIgorCittc2dpZCAiIgorIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgorImlzIGhvc3RlZCkiCittc2dzdHIgIuWqkuS9k+adpea6kOS9nOS4uiBVUkkg5Zyw5Z2A77yI5Y6f5aeL5paH5Lu25oiW5rWB5omA5Zyo55qE5L2N572u77yJIgorCittc2dpZCAiaG9tZXBhZ2UiCittc2dzdHIgIuS4u+mhtSIKKworbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCittc2dzdHIgIuatpOWqkuS9k+eahOS4u+mhte+8iOiJuuacr+WutuaIlueUteW9seetie+8iSIKKworbXNnaWQgImRlc2NyaXB0aW9uIgorbXNnc3RyICLmj4/ov7AiCisKK21zZ2lkICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCittc2dzdHIgIuaPj+i/sOaVsOaNruWGheWuueeahOeugOimgeaWh+acrCIKKworbXNnaWQgInZlcnNpb24iCittc2dzdHIgIueJiOacrCIKKworbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgorbXNnc3RyICLmraTmlbDmja7nmoTniYjmnKwiCisKK21zZ2lkICJJU1JDIgorbXNnc3RyICJJU1JDIgorCittc2dpZCAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgorbXNnc3RyICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCisKK21zZ2lkICJvcmdhbml6YXRpb24iCittc2dzdHIgIue7hOe7hyIKKworbXNnaWQgImNvcHlyaWdodCIKK21zZ3N0ciAi54mI5p2DIgorCittc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAi5pWw5o2u55qE54mI5p2D6K2m5ZGKIgorCittc2dpZCAiY29weXJpZ2h0IHVyaSIKK21zZ3N0ciAi54mI5p2DIHVyaSIKKworbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAi5pWw5o2u55qE54mI5p2D6K2m5ZGKIFVSSSIKKworIywgZnV6enkKK21zZ2lkICJlbmNvZGVkIGJ5IgorbXNnc3RyICLnvJbnoIHlmagiCisKK21zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgorbXNnc3RyICIiCisKK21zZ2lkICJjb250YWN0IgorbXNnc3RyICLogZTns7vkuroiCisKK21zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgorbXNnc3RyICLogZTns7vkurrkv6Hmga8iCisKK21zZ2lkICJsaWNlbnNlIgorbXNnc3RyICLorrjlj6/or4EiCisKK21zZ2lkICJsaWNlbnNlIG9mIGRhdGEiCittc2dzdHIgIuaVsOaNruiuuOWPr+ivgSIKKworbXNnaWQgImxpY2Vuc2UgdXJpIgorbXNnc3RyICLorrjlj6/or4EgdXJpIgorCittc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICLmlbDmja7orrjlj6/or4HnmoQgVVJJIgorCittc2dpZCAicGVyZm9ybWVyIgorbXNnc3RyICLmvJTlpY/ogIUiCisKK21zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKK21zZ3N0ciAi5ryU5aWP6ICFIgorCittc2dpZCAiY29tcG9zZXIiCittc2dzdHIgIuS9nOabsuS6uiIKKworbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAi6LSf6LSj5b2V5Yi255qE5Lq6IgorCittc2dpZCAiZHVyYXRpb24iCittc2dzdHIgIuaXtuacnyIKKworbXNnaWQgImxlbmd0aCBpbiBHU3RyZWFtZXIgdGltZSB1bml0cyAobmFub3NlY29uZHMpIgorbXNnc3RyICJHU3RyZWFtZXIg5pe26Ze05Y2V5L2N55qE6ZW/5bqmKOe6s+enkikiCisKK21zZ2lkICJjb2RlYyIKK21zZ3N0ciAi57yW56CBIgorCittc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICLmlbDmja7ku6UuLi7nvJbnoIHlrZjlgqgiCisKK21zZ2lkICJ2aWRlbyBjb2RlYyIKK21zZ3N0ciAi6KeG6aKR57yW56CBIgorCittc2dpZCAiY29kZWMgdGhlIHZpZGVvIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICLop4bpopHmlbDmja7ku6UuLi7nvJbnoIHlrZjlgqgiCisKK21zZ2lkICJhdWRpbyBjb2RlYyIKK21zZ3N0ciAi6Z+z6aKR57yW56CBIgorCittc2dpZCAiY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICLpn7PpopHmlbDmja7ku6UuLi7nvJbnoIHlrZjlgqgiCisKK21zZ2lkICJzdWJ0aXRsZSBjb2RlYyIKK21zZ3N0ciAi5a2X5bmV57yW56CBIgorCittc2dpZCAiY29kZWMgdGhlIHN1YnRpdGxlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICLlrZfluZXnvJbnoIHmlbDmja7kv53lrZjlnKgiCisKK21zZ2lkICJjb250YWluZXIgZm9ybWF0IgorbXNnc3RyICLlhoXlrrnmoLzlvI8iCisKK21zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKK21zZ3N0ciAi5pWw5o2u5LulLi4u5qC85byP5a2Y5YKoIgorCittc2dpZCAiYml0cmF0ZSIKK21zZ3N0ciAi5q+U54m5546HIgorCittc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAi57K+56Gu5oiW5bmz5Z2H5q+U54m5546HKOavlOeJuS/np5IpIgorCittc2dpZCAibm9taW5hbCBiaXRyYXRlIgorbXNnc3RyICLlkI3kuYnmr5TnibnnjociCisKK21zZ2lkICJub21pbmFsIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICLlkI3kuYnmr5Tnibnnjoco5q+U54m5L+enkikiCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCittc2dzdHIgIuacgOWwj+avlOeJueeOhyIKKworbXNnaWQgIm1pbmltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgIuacgOWwj+avlOeJueeOhyjmr5Tnibkv56eSKSIKKworbXNnaWQgIm1heGltdW0gYml0cmF0ZSIKK21zZ3N0ciAi5pyA5aSn5q+U54m5546HIgorCittc2dpZCAibWF4aW11bSBiaXRyYXRlIGluIGJpdHMvcyIKK21zZ3N0ciAi5pyA5aSn5q+U54m5546HKOavlOeJuS/np5IpIgorCittc2dpZCAiZW5jb2RlciIKK21zZ3N0ciAi57yW56CB5ZmoIgorCittc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAi55So5LqO57yW56CB5q2k5rWB55qE57yW56CB5ZmoIgorCittc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgorbXNnc3RyICLnvJbnoIHlmajniYjmnKwiCisKK21zZ2lkICJ2ZXJzaW9uIG9mIHRoZSBlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgorbXNnc3RyICLnlKjkuo7nvJbnoIHmraTmtYHnmoTnvJbnoIHlmajniYjmnKwiCisKK21zZ2lkICJzZXJpYWwiCittc2dzdHIgIuW6j+WIl+WPtyIKKworbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCittc2dzdHIgIumfs+i9qOeahOW6j+WIl+WPtyIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKK21zZ3N0ciAi6YeN5pS+5aKe55uK6Z+z6L2o5aKe55uKIgorCittc2dpZCAidHJhY2sgZ2FpbiBpbiBkYiIKK21zZ3N0ciAi6Z+z6L2o5aKe55uKKGRiKSIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgcGVhayIKK21zZ3N0ciAi6YeN5pS+5aKe55uK6Z+z6L2o5bOw5YC8IgorCittc2dpZCAicGVhayBvZiB0aGUgdHJhY2siCittc2dzdHIgIumfs+i9qOWzsOWAvCIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKK21zZ3N0ciAi6YeN5pS+5aKe55uK5LiT6L6R5aKe55uKIgorCittc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKK21zZ3N0ciAi5LiT6L6R5aKe55uKKGRiKSIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKK21zZ3N0ciAi5Zue5pS+5aKe55uK5LiT6L6R5bOw5YC8IgorCittc2dpZCAicGVhayBvZiB0aGUgYWxidW0iCittc2dzdHIgIuS4k+i+keWzsOWAvCIKKworbXNnaWQgInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIgorbXNnc3RyICLlm57mlL7lop7nm4rlj4LogIPnuqfliKsiCisKK21zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgorbXNnc3RyICLpn7PovajlkozkuJPovpHlop7nm4rnmoTlj4LogIPnuqfliKvlgLwiCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIgorbXNnc3RyICLor63oqIDku6PnoIEiCisKK21zZ2lkICJsYW5ndWFnZSBjb2RlIGZvciB0aGlzIHN0cmVhbSwgY29uZm9ybWluZyB0byBJU08tNjM5LTEiCittc2dzdHIgIuatpOa1geeahOivreiogOS7o+egge+8jOmBteS7juS4uiBJU08tNjM5LTEiCisKK21zZ2lkICJpbWFnZSIKK21zZ3N0ciAi5Zu+5YOPIgorCittc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKK21zZ3N0ciAi5pyJ5YWz5q2k5rWB55qE5Zu+5YOPIgorCisjLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKK21zZ2lkICJwcmV2aWV3IGltYWdlIgorbXNnc3RyICLkuIrkuIDlm77lg48iCisKK21zZ2lkICJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgIuacieWFs+atpOa1geeahOS4iuS4gOWbvuWDjyIKKworbXNnaWQgImF0dGFjaG1lbnQiCittc2dzdHIgIumZhOWKoOS/oeaBryIKKworbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgIuacieWFs+atpOa1geeahOaWh+S7tiIKKworbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCittc2dzdHIgIuavj+WIhumSn+iKguaLjeaVsCIKKworbXNnaWQgIm51bWJlciBvZiBiZWF0cyBwZXIgbWludXRlIGluIGF1ZGlvIgorbXNnc3RyICLpn7PpopHkuK3nmoTmr4/liIbpkp/oioLmi43mlbAiCisKK21zZ2lkICJrZXl3b3JkcyIKK21zZ3N0ciAi566A6KaB5paH5pysIgorCittc2dpZCAiY29tbWEgc2VwYXJhdGVkIGtleXdvcmRzIGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQiCittc2dzdHIgIumAl+WPt+WIhumalOeahOaPj+i/sOaVsOaNruWGheWuueeahOeugOimgeaWh+acrCIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBuYW1lIgorbXNnc3RyICLlnLDnkIbkvY3nva7lkI3np7AiCisKK21zZ2lkICIiCisiaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpdmUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yICIKKyJwcm9kdWNlZCIKK21zZ3N0ciAi5Lq65Lus5piT55CG6Kej55qE5L2N572u5o+P6L+w5oiW5piv5q2k5aqS5L2T5Zyo5ZOq6YeM5b2V5Yi25oiW5piv5Lqn55SfIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGxhdGl0dWRlIgorbXNnc3RyICLlnLDnkIbnuqzluqYiCisKK21zZ2lkICIiCisiZ2VvIGxhdGl0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCisiZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIGVxdWF0b3IsIG5lZ2F0aXZlIHZhbHVlcyBmb3IgIgorInNvdXRoZXJuIGxhdGl0dWRlcykiCittc2dzdHIgIiIKKyLmoLnmja4gV0dTODTvvIjotaTpgZPkuLogMCDluqbvvIzljZfljYrnkIPkuLrotJ/lgLzvvInmoIflh4bnoa7lrprnmoTlnLDnkIbnuqzluqblgLzvvIjmnInlhbPmraTlqpLkvZPlnKjlk6rph4wiCisi5b2V5Yi25oiW5Lqn55Sf55qE77yJIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKK21zZ3N0ciAi5Zyw55CG57uP5bqmIgorCittc2dpZCAiIgorImdlbyBsb25naXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKKyJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgcHJpbWUgbWVyaWRpYW4gaW4gR3JlZW53aWNoL1VLLCAgIgorIm5lZ2F0aXZlIHZhbHVlcyBmb3Igd2VzdGVybiBsb25naXR1ZGVzKSIKK21zZ3N0ciAiIgorIuagueaNriBXR1M4NO+8iOiLseWbveagvOael+Wogeayu+acrOWIneWtkOWNiOe6v+S4iuS4uiAwIOW6pu+8jOilv+WNiueQg+S4uui0n+WAvO+8ieagh+WHhuehruWumueahOWcsOeQhue7j+W6piIKKyLlgLzvvIjmnInlhbPmraTlqpLkvZPlnKjlk6rph4zlvZXliLbmiJbkuqfnlJ/nmoTvvIkiCisKK21zZ2lkICJnZW8gbG9jYXRpb24gZWxldmF0aW9uIgorbXNnc3RyICLlnLDnkIbmtbfmi5QiCisKK21zZ2lkICIiCisiZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKKyJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgorbXNnc3RyICIiCisi5qC55o2uIFdHUzg077yI5bmz5Z2H5rW35bmz6Z2i5Li6IDAg57Gz77yJ5qCH5YeG56Gu5a6a55qE5Zyw55CG5rW35ouU6auY5bqm77yI5pyJ5YWz5q2k5aqS5L2T5Zyo5ZOq6YeM5b2V5Yi25oiWIgorIuS6p+eUn+eahO+8iSIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gY291bnRyeSIKK21zZ3N0ciAi5Zyw55CG57uP5bqmIgorCisjLCBmdXp6eQorbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgorbXNnc3RyICLkurrku6zmmJPnkIbop6PnmoTkvY3nva7mj4/ov7DmiJbmmK/mraTlqpLkvZPlnKjlk6rph4zlvZXliLbmiJbmmK/kuqfnlJ8iCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCittc2dzdHIgIuWcsOeQhue6rOW6piIKKworIywgZnV6enkKK21zZ2lkICJjaXR5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKK21zZ3N0ciAi5Lq65Lus5piT55CG6Kej55qE5L2N572u5o+P6L+w5oiW5piv5q2k5aqS5L2T5Zyo5ZOq6YeM5b2V5Yi25oiW5piv5Lqn55SfIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKK21zZ3N0ciAi5Zyw55CG5rW35ouUIgorCittc2dpZCAiIgorImEgbG9jYXRpb24gd2hpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgorInRoZSBuZWlnaGJvcmhvb2QpIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIGhvcml6b250YWwgZXJyb3IiCittc2dzdHIgIuWcsOeQhuS9jee9ruWQjeensCIKKworbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgorbXNnc3RyICLlnLDnkIbnu4/luqYiCisKK21zZ2lkICIiCisibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBpbiBtL3MiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgorbXNnc3RyICLlnLDnkIbmtbfmi5QiCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgorIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKKyJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCittc2dzdHIgIuWcsOeQhua1t+aLlCIKKworbXNnaWQgIiIKKyJpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nICBhIG1lZGlhLiAiCisiSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCAgcmVwcmVzZW50YXRpb24sIDAgbWVhbnMgdGhlICIKKyJnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKK21zZ2lkICJzaG93IG5hbWUiCittc2dzdHIgIuaYvuekuuWQjeensCIKKworbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCittc2dzdHIgInR2L3BvZGNhc3Qvc2VyaWVzIOeahOWQjeensO+8jOatpOWQjeensOS7o+ihqOWqkuS9k+adpeiHquS9leWkhCIKKworIy4gVFJBTlNMQVRPUlM6ICdzaG93IHNvcnRuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZSBhcyB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzJyBoZXJlCittc2dpZCAic2hvdyBzb3J0bmFtZSIKK21zZ3N0ciAi5o6S5ZCN5pi+56S6IgorCittc2dpZCAiIgorIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20sIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICJ0di9wb2RjYXN0L3NlcmllcyDlkI3np7Dku6PooajmraTlqpLkvZPmnaXoh6rkvZXlpITvvIjmjpLlkI3mmL7npLrvvIkiCisKK21zZ2lkICJlcGlzb2RlIG51bWJlciIKK21zZ3N0ciAi5Zy65pmv57yW5Y+3IgorCittc2dpZCAiVGhlIGVwaXNvZGUgbnVtYmVyIGluIHRoZSBzZWFzb24gdGhlIG1lZGlhIGlzIHBhcnQgb2YiCittc2dzdHIgIuWqkuS9k+aYr+S4gOWto+S4reeahOesrOWHoOWcuuaZryIKKworbXNnaWQgInNlYXNvbiBudW1iZXIiCittc2dzdHIgIuWto+WPtyIKKworbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICLlqpLkvZPmmK/nrKzlh6DlraMiCisKK21zZ2lkICJseXJpY3MiCittc2dzdHIgIuatjOivjSIKKworbXNnaWQgIlRoZSBseXJpY3Mgb2YgdGhlIG1lZGlhLCBjb21tb25seSB1c2VkIGZvciBzb25ncyIKK21zZ3N0ciAi5aqS5L2T5q2M6K+N77yM6YCa5bi455So5LqO5q2M5puyIgorCittc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCittc2dzdHIgIuaOkuW6j+WQjueahOS9nOabsuWutiIKKworbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZywgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIuWIm+S9nOW9lemfs+eahOS6uu+8iOaOkuW6j+aYvuekuu+8iSIKKworbXNnaWQgImdyb3VwaW5nIgorbXNnc3RyICLlqpLkvZPnu4QiCisKK21zZ2lkICIiCisiR3JvdXBzIHJlbGF0ZWQgbWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSB0cmFja3MsIGxpa2UgdGhlIGRpZmZlcmVudCBwaWVjZXMgIgorIm9mIGEgY29uY2VydG8uIEl0IGlzIGEgaGlnaGVyIGxldmVsIHRoYW4gYSB0cmFjaywgYnV0IGxvd2VyIHRoYW4gYW4gYWxidW0iCittc2dzdHIgIiIKKyLlqpLkvZPnu4TmqKrot6jlpJrkuKrpn7PovajvvIzlsLHlpb3lg4/mmK/kuIDlnLrpn7PkuZDkvJrnmoTkuI3lkIzml7bmrrXjgILov5nkuKrmpoLlv7XojIPlm7Tmr5Tpn7Povajpq5jvvIzkvYblsI8iCisi5LqO5LiT6L6RIgorCisjLCBmdXp6eQorbXNnaWQgInVzZXIgcmF0aW5nIgorbXNnc3RyICLml7bmnJ8iCisKK21zZ2lkICIiCisiUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCisidGhpcyBtZWRpYSIKK21zZ3N0ciAiIgorCittc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIk1hbnVmYWN0dXJlciBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCittc2dzdHIgIueUqOS6jue8lueggeatpOa1geeahOe8lueggeWZqOeJiOacrCIKKworbXNnaWQgImRldmljZSBtb2RlbCIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKK21zZ3N0ciAi55So5LqO57yW56CB5q2k5rWB55qE57yW56CB5Zmo54mI5pysIgorCisjLCBmdXp6eQorbXNnaWQgImFwcGxpY2F0aW9uIG5hbWUiCittc2dzdHIgIuWcsOeQhuS9jee9ruWQjeensCIKKworbXNnaWQgIkFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSIKK21zZ3N0ciAiIgorCittc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKK21zZ3N0ciAiIgorCittc2dpZCAiQXJiaXRyYXJ5IGFwcGxpY2F0aW9uIGRhdGEgdG8gYmUgc2VyaWFsaXplZCBpbnRvIHRoZSBtZWRpYSIKK21zZ3N0ciAiIgorCittc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCittc2dzdHIgIiIKKworbXNnaWQgIkhvdyB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCBiZWZvcmUgZGlzcGxheSIKK21zZ3N0ciAiIgorCittc2dpZCAiLCAiCittc2dzdHIgIiwgIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCittc2dzdHIgIumUmeivr++8muadpeiHque7hOS7tiAlc++8miVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKKyIlc1xuIgorbXNnc3RyICIiCisi6aKd5aSW55qE6LCD6K+V5L+h5oGv77yaXG4iCisiJXNcbiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgorbXNnc3RyICLkuI3lhYHorrjmjIflrprnqbrlgqjku5PigJwlc+KAnSIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibm8gYmluIFwiJXNcIiwgc2tpcHBpbmciCittc2dzdHIgIuaJvuS4jeWIsOWCqOS7k+KAnCVz4oCd77yM6Lez6L+HIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiIKK21zZ3N0ciAi57uE5Lu24oCcJTIkc+KAneS4reaJvuS4jeWIsOWxnuaAp+KAnCUxJHPigJ0iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgorbXNnc3RyICLml6Dms5Xorr7nva7nu4Tku7bigJwlMiRz4oCd5Lit55qE5bGe5oCn4oCcJTEkc+KAneS4uuKAnCUzJHPigJ0iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxpbmsgJXMgdG8gJXMiCittc2dzdHIgIuaXoOazleWwhiAlcyDpk77mjqXliLAgJXMiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCittc2dzdHIgIuaXoOe7hOS7tuKAnCVz4oCdIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKK21zZ3N0ciAi5peg5rOV6Kej5p6Q5YiG5p6Q5Zmo4oCcJXPigJ0iCisKK21zZ2lkICJsaW5rIHdpdGhvdXQgc291cmNlIGVsZW1lbnQiCittc2dzdHIgIuS4jeW4pua6kOe7hOS7tueahOmTvuaOpSIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzaW5rIGVsZW1lbnQiCittc2dzdHIgIuS4jeW4pua2iOmfs+e7hOS7tueahOmTvuaOpSIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAiVVJJ4oCcJXPigJ3ml6DmupDnu4Tku7YiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gZWxlbWVudCB0byBsaW5rIFVSSSBcIiVzXCIgdG8iCittc2dzdHIgIuaXoOe7hOS7tuiuqSBVUknigJwlc+KAneadpei/nuaOpSIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgIlVSSeKAnCVz4oCd5LiK5peg5raI6Z+z57uE5Lu2IgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAi5peg5rOV6L+e5o6lIFVSSeKAnCVz4oCd55qE5raI6Z+z57uE5Lu2IgorCittc2dpZCAiZW1wdHkgcGlwZWxpbmUgbm90IGFsbG93ZWQiCittc2dzdHIgIuS4jeWFgeiuuOepuueuoemBkyIKKworbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKK21zZ3N0ciAi5YaF6YOo5pe26ZKf6ZSZ6K+v44CCIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKK21zZ3N0ciAi5YaF6YOo5pWw5o2u5rWB6ZSZ6K+v44CCIgorCittc2dpZCAiQSBsb3Qgb2YgYnVmZmVycyBhcmUgYmVpbmcgZHJvcHBlZC4iCittc2dzdHIgIuW+iOWkmue8k+WGsuWMuuato+iiq+S4ouW8g+OAgiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBwcm9ibGVtLiIKK21zZ3N0ciAi5YaF6YOo5pWw5o2u5rWB6Zeu6aKY44CCIgorCittc2dpZCAiSW50ZXJuYWwgZGF0YSBzdHJlYW0gZXJyb3IuIgorbXNnc3RyICLlhoXpg6jmlbDmja7mtYHplJnor6/jgIIiCisKK21zZ2lkICJGaWx0ZXIgY2FwcyIKK21zZ3N0ciAi6L+H5ruk5YiG5p6Q5ZmoIgorCittc2dpZCAiIgorIlJlc3RyaWN0IHRoZSBwb3NzaWJsZSBhbGxvd2VkIGNhcGFiaWxpdGllcyAoTlVMTCBtZWFucyBBTlkpLiBTZXR0aW5nIHRoaXMgIgorInByb3BlcnR5IHRha2VzIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBwbGllZCBHc3RDYXBzIG9iamVjdC4iCittc2dzdHIgIiIKKyLpmZDliLbmiYDlhYHorrjnmoTlip/og70gKE5VTEwg6KGo56S65peg6ZmQ5Yi2KeOAguatpOWxnuaAp+WPr+S7peS4uuaJgOaPkOS+m+eahCBHc3RDYXBzIOWvueixoeiuvue9ruS4gOS4qiIKKyLlhbPogZTlupTnlKjjgIIiCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKK21zZ3N0ciAi5pyq5oyH5a6a5YaZ5YWl55qE5paH5Lu25ZCN44CCIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKK21zZ3N0ciAi5peg5rOV5omT5byA5paH5Lu24oCcJXPigJ3lhpnlhaXjgIIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCittc2dzdHIgIuWFs+mXreaWh+S7tuKAnCVz4oCd5Ye66ZSZ44CCIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIgorbXNnc3RyICLlnKjmlofku7bigJwlc+KAneaQnOWvu+aXtuWHuumUmeOAgiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAi5YaZ5YWl5paH5Lu24oCcJXPigJ3ml7blh7rplJnjgIIiCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKK21zZ3N0ciAi5pyq5oyH5a6a6K+75Y+W55qE5paH5Lu25ZCN44CCIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKK21zZ3N0ciAi5peg5rOV5omT5byA5paH5Lu24oCcJXPigJ3or7vlj5bjgIIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCittc2dzdHIgIuaXoOazleWcqOKAnCVz4oCd5LiK6I635b6X5L+h5oGv44CCIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIlwiJXNcIiBpcyBhIGRpcmVjdG9yeS4iCittc2dzdHIgIuKAnCVz4oCd5LiN5piv55uu5b2V44CCIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKK21zZ3N0ciAi5paH5Lu24oCcJXPigJ3mmK/lpZfmjqXlrZfjgIIiCisKK21zZ2lkICJGYWlsZWQgYWZ0ZXIgaXRlcmF0aW9ucyBhcyByZXF1ZXN0ZWQuIgorbXNnc3RyICLlnKjlrozmiJDmiYDopoHmsYLnmoTov63ku6Pmk43kvZzlkI7lh7rplJnjgIIiCisKK21zZ2lkICJObyBUZW1wIGRpcmVjdG9yeSBzcGVjaWZpZWQuIgorbXNnc3RyICLmnKrmjIflrprkuLTml7bnm67lvZXjgIIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAi5peg5rOV5Yib5bu65Li05pe25paH5Lu24oCcJXPigJ3jgIIiCisKKyMsIGZ1enp5Cittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKK21zZ3N0ciAi5YaZ5YWl5paH5Lu24oCcJXPigJ3ml7blh7rplJnjgIIiCisKK21zZ2lkICJjYXBzIgorbXNnc3RyICLliIbmnpDlmagiCisKK21zZ2lkICJkZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtIgorbXNnc3RyICLmtYHkuK3mjqLmtYvliLDnmoTkv6Hmga8iCisKK21zZ2lkICJtaW5pbXVtIgorbXNnc3RyICLmnIDlsI8iCisKK21zZ2lkICJtYXhpbXVtIgorbXNnc3RyICLmnIDlpKciCisKK21zZ2lkICJmb3JjZSBjYXBzIgorbXNnc3RyICLlvLrliLbliIbmnpAiCisKK21zZ2lkICJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIKK21zZ3N0ciAi5LiN5YGa57G75Z6L5p+l5om+55qE5by65Yi25YiG5p6QIgorCittc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgorbXNnc3RyICLmtYHkuK3kuI3lkKvmlbDmja4iCisKK21zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgorbXNnc3RyICLlrp7njrDnmoTmjqXlj6M6XG4iCisKK21zZ2lkICJyZWFkYWJsZSIKK21zZ3N0ciAi5Y+v6K+7IgorCittc2dpZCAid3JpdGFibGUiCittc2dzdHIgIuWPr+WGmSIKKworbXNnaWQgImNvbnRyb2xsYWJsZSIKK21zZ3N0ciAi5Y+v5o6n5Yi2IgorCittc2dpZCAiY2hhbmdlYWJsZSBpbiBOVUxMLCBSRUFEWSwgUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUiCittc2dzdHIgIiIKKworbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiCittc2dzdHIgIiIKKworbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMIG9yIFJFQURZIHN0YXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJCbGFja2xpc3RlZCBmaWxlczoiCittc2dzdHIgIuaWh+S7tum7keWQjeWNlToiCisKK21zZ2lkICJUb3RhbCBjb3VudDogIgorbXNnc3RyICLmgLvmlbA6IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGJsYWNrbGlzdGVkIGZpbGUiCittc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdGVkIGZpbGVzIgorbXNnc3RyWzBdICIlZCDkuKrpu5HlkI3ljZXmlofku7YiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgcGx1Z2luIgorbXNnaWRfcGx1cmFsICIlZCBwbHVnaW5zIgorbXNnc3RyWzBdICIlZCDkuKrmj5Lku7YiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgorbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKK21zZ3N0clswXSAiJWQg5Liq6buR5ZCN5Y2V6K6w5b2VIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGZlYXR1cmUiCittc2dpZF9wbHVyYWwgIiVkIGZlYXR1cmVzIgorbXNnc3RyWzBdICIlZCDkuKrnibnmgKciCisKK21zZ2lkICJQcmludCBhbGwgZWxlbWVudHMiCittc2dzdHIgIuaJk+WNsOWFqOmDqOe7hOS7tiIKKworbXNnaWQgIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHIgIuaYvuekuum7keWQjeWNleaWh+S7tuWIl+ihqCIKKworbXNnaWQgIiIKKyJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgorInBsdWdpbnMgcHJvdmlkZS5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKKyJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgorbXNnc3RyICIiCisi5pi+56S65py65Zmo5Y+v6Kej5p6Q55qE5oyH5a6a5o+S5Lu25oiW5omA5pyJ5o+S5Lu25o+Q5L6b55qE54m55oCn5YiX6KGo44CCXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg5LiO5aSW6YOo6Ieq5Yqo5o+S5Lu25a6J6KOF5py65Yi26L+e5o6l5pe25pyJ55SoIgorCittc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgorbXNnc3RyICLliJflh7rmj5Lku7bkv6Hmga8iCisKK21zZ2lkICJQcmludCBzdXBwb3J0ZWQgVVJJIHNjaGVtZXMsIHdpdGggdGhlIGVsZW1lbnRzIHRoYXQgaW1wbGVtZW50IHRoZW0iCittc2dzdHIgIuaJk+WNsOaJgOaUr+aMgeeahCBVUkkg5qC35byP5Y+K5a6D5Lus55qE5YWz6IGU57uE5Lu2IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgorbXNnc3RyICLml6Dms5Xovb3lhaXmj5Lku7bmlofku7Y6ICVzXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iCittc2dzdHIgIuayoeaciemCo+agt+eahOe7hOS7tuaIluaPkuS7tuKAmCVz4oCZXG4iCisKK21zZ2lkICJJbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICLku47nu4Tku7ZcIiUyJHNcIiglMyRzKeS4reiOt+WPluS/oeaBryAjJTEkdToiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCittc2dzdHIgIuS7jue7hOS7tlwiJTIkczolMyRzXCIoJTQkcynkuK3ojrflj5bkv6Hmga8gIyUxJHU6IgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICLku47nu4Tku7ZcIiUyJHNcIiglMyRzKeS4reiOt+WPluS/oeaBryAjJTEkdToiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKK21zZ3N0ciAi6I635Y+W5L+h5oGvICMldSAoJXMpOiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgRU9TIGZyb20gZWxlbWVudCBcIiVzXCIuXG4iCittc2dzdHIgIuaUtuWIsOadpeiHque7hOS7tuKAnCVz4oCd55qEIEVPUyDkv6Hlj7fjgIJcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgorbXNnc3RyICLmib7liLDmoIfor4YgICAgOueUsee7hOS7tuKAnCVz4oCd5om+5Yiw44CCXG4iCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgcGFkIFwiJXM6JXNcIi5cbiIKK21zZ3N0ciAi5om+5Yiw5qCH6K+GICAgIDrnlLHnu4Tku7bigJwlczolc+KAneaJvuWIsOOAglxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKK21zZ3N0ciAi5om+5Yiw5qCH6K+GICAgIDrnlLHnu4Tku7bigJwlc+KAneaJvuWIsOOAglxuIgorCittc2dpZCAiRk9VTkQgVEFHXG4iCittc2dzdHIgIuaJvuWIsOagh+ivhlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJTkZPOlxuIgorIiVzXG4iCittc2dzdHIgIiIKKyLkv6Hmga86XG4iCisiJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCittc2dzdHIgIuitpuWRiu+8muadpeiHque7hOS7tiAlc++8miVzXG4iCisKK21zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIGJ1ZmZlcmluZyB0byBmaW5pc2guLi5cbiIKK21zZ3N0ciAiUHJlcm9sbGVk77yM562J5b6F57yT5Yay5a6M5oiQLi4uXG4iCisKK21zZ2lkICJidWZmZXJpbmcuLi4iCittc2dzdHIgIuato+WcqOe8k+WGsi4uLiIKKworbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIue8k+WGsuWujOaIkO+8jOiuvue9ruaSreaUvueuoemBkyAuLi5cbiIKKworbXNnaWQgIkJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCittc2dzdHIgIuato+WcqOe8k+WGsu+8jOiuvue9ruaaguWBnOeuoemBkyAuLi5cbiIKKworbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCittc2dzdHIgIumHjeaWsOWIhumFjeW7tui/n+aXtumXtC4uLlxuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iCittc2dzdHIgIiUyJHMg5Y+R6LW36K+35rGC5pe254q25oCB6K6+572u5Li6ICUxJHMuLi5cbiIKKworbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCittc2dzdHIgIuS4reaWrTog5Lit5q2i566h6YGTIC4uLlxuIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nIGVsZW1lbnQ6ICVzXG4iCittc2dzdHIgIuaXoOe7hOS7tuKAnCVz4oCdIgorCittc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgorbXNnc3RyICLovpPlh7rmoIfor4Yo5Lmf5Y+v6K6k5Li65piv5YWD5pWw5o2uKSIKKworbXNnaWQgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCittc2dzdHIgIui+k+WHuueKtuaAgeS/oeaBr+WSjOWxnuaAp+mAmuWRiiIKKworbXNnaWQgIkRvIG5vdCBwcmludCBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24iCittc2dzdHIgIuS4jeaJk+WNsOS7u+S9lei/m+W6puS/oeaBryIKKworbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKK21zZ3N0ciAi6L6T5Ye65L+h5oGvIgorCittc2dpZCAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKK21zZ3N0ciAi5LiN6L6T5Ye657G75Z6L55qE54q25oCB5L+h5oGvIgorCittc2dpZCAiVFlQRTEsVFlQRTIsLi4uIgorbXNnc3RyICLnsbvlnosx77yM57G75Z6LMu+8jC4uLiIKKworbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKK21zZ3N0ciAi5LiN5a6J6KOF6ZSZ6K+v55qE5aSE55CG56iL5bqPIgorCittc2dpZCAiUHJpbnQgYWxsb2MgdHJhY2UgKGlmIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lKSIKK21zZ3N0ciAi5omT5Y2w5YiG6YWN6K6w5b2VKOWmguaenOWcqOe8luivkeaXtuW8gOWQr+eahOivnSkiCisKKyMsIGZ1enp5Cittc2dpZCAiRm9yY2UgRU9TIG9uIHNvdXJjZXMgYmVmb3JlIHNodXR0aW5nIHRoZSBwaXBlbGluZSBkb3duIgorbXNnc3RyICLlhbPpl63nrqHpgZPliY3lvLrliLblr7nmupDlj5Hlh7ogRU9TIOS/oeWPtyIKKworbXNnaWQgIkdhdGhlciBhbmQgcHJpbnQgaW5kZXggc3RhdGlzdGljcyIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQ6ICVzLlxuIgorbXNnc3RyICLplJnor686IOaXoOazleWIm+W7uueuoemBkzogJXPjgIJcbiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXG4iCittc2dzdHIgIumUmeivrzog5peg5rOV5Yib5bu6566h6YGT44CCXG4iCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogZXJyb25lb3VzIHBpcGVsaW5lOiAlc1xuIgorbXNnc3RyICLorablkYo6IOmUmeivr+euoemBkzogJXNcbiIKKworbXNnaWQgIkVSUk9SOiB0aGUgJ3BpcGVsaW5lJyBlbGVtZW50IHdhc24ndCBmb3VuZC5cbiIKK21zZ3N0ciAi6ZSZ6K+vOiDmnKrmib7liLDigJjnrqHpgZPigJnnu4Tku7bjgIJcbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgorbXNnc3RyICLorr7nva7mmoLlgZznrqHpgZMgLi4uXG4iCisKK21zZ2lkICJFUlJPUjogUGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBhdXNlLlxuIgorbXNnc3RyICLplJnor686IOeuoemBk+S4jeaDs+aaguWBnOOAglxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgorbXNnc3RyICLnrqHpgZPmraPlnKjkvb/nlKjkuJTkuI3pnIDopoEgUFJFUk9MTCAuLi5cbiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCittc2dzdHIgIueuoemBk+ato+WcqCBQUkVST0xMSU5HIC4uLlxuIgorCittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgorbXNnc3RyICLplJnor686IOeuoemBk+S4jemcgOimgSBwcmVyb2xsLlxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgorbXNnc3RyICLnrqHpgZPooqsgUFJFUk9MTEVEIC4uLlxuIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgorbXNnc3RyICLorr7nva7mkq3mlL7nrqHpgZMgLi4uXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBsYXkuXG4iCittc2dzdHIgIumUmeivrzog566h6YGT5LiN5oOz5pKt5pS+44CCXG4iCisKK21zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKK21zZ3N0ciAi5YWB6K645YWz6Zet5pe25Y+R5Ye6IEVPUyDkv6Hlj7cg4oCU4oCUIOW8uuWItuWvueeuoemBk+WPkeWHuiBFT1Mg5L+h5Y+3XG4iCisKK21zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKK21zZ3N0ciAi562J5b6FIEVPUyDkv6Hlj7cuLi5cbiIKKworbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCittc2dzdHIgIuaUtuWIsCBFT1Mg5L+h5Y+3IC0g5Lit5q2i566h6YGTIC4uLlxuIgorCittc2dpZCAiQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgd2FpdGluZyBmb3IgRU9TXG4iCittc2dzdHIgIuetieW+hSBFT1Mg5L+h5Y+35pe25Ye6546w5LiA5Liq6ZSZ6K+vXG4iCisKK21zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKK21zZ3N0ciAi5ZyoICUg5ZCO6L+Q6KGM57uI5q2iIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKK21zZ3N0ciAi6K6+572u5aSH55So566h6YGTIC4uLlxuIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgorbXNnc3RyICLorr7nva4gTlVMTCDnrqHpgZMgLi4uXG4iCisKK21zZ2lkICJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIgorbXNnc3RyICLph4rmlL7nrqHpgZPotYTmupAgLi4uXG4iCisKKyN+IG1zZ2lkICJVc2FnZTogZ3N0LXhtbGxhdW5jaCA8ZmlsZS54bWw+IFsgZWxlbWVudC5wcm9wZXJ0eT12YWx1ZSAuLi4gXVxuIgorI34gbXNnc3RyICLnlKjms5U6IGdzdC14bWxsYXVuY2ggPGZpbGUueG1sPiBbIGVsZW1lbnQucHJvcGVydHk9dmFsdWUgLi4uIF1cbiIKKworI34gbXNnaWQgIkVSUk9SOiBwYXJzZSBvZiB4bWwgZmlsZSAnJXMnIGZhaWxlZC5cbiIKKyN+IG1zZ3N0ciAi6ZSZ6K+vOiB4bWwg5paH5Lu24oCYJXPigJnop6PmnpDlpLHotKXjgIJcbiIKKworI34gbXNnaWQgIkVSUk9SOiBubyB0b3BsZXZlbCBwaXBlbGluZSBlbGVtZW50IGluIGZpbGUgJyVzJy5cbiIKKyN+IG1zZ3N0ciAi6ZSZ6K+vOiDmlofku7bigJglc+KAmeS4reayoeaciemhtue6p+euoemBk+e7hOS7tuOAglxuIgorCisjfiBtc2dpZCAiV0FSTklORzogb25seSBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLlxuIgorI34gbXNnc3RyICLorablkYo6IOatpOaXtuS7heaUr+aMgeS4gOS4quS4gOe6p+e7hOS7tuOAglxuIgorCisjfiBtc2dpZCAiRVJST1I6IGNvdWxkIG5vdCBwYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgJWQ6ICVzLlxuIgorI34gbXNnc3RyICLplJnor686IOaXoOazleino+aekOWRveS7pOihjOWPguaVsCAlZDogJXPjgIJcbiIKKworI34gbXNnaWQgIldBUk5JTkc6IGVsZW1lbnQgbmFtZWQgJyVzJyBub3QgZm91bmQuXG4iCisjfiBtc2dzdHIgIuitpuWRijog57uE5Lu25ZCN4oCYJXPigJnmnKrmib7liLDjgIJcbiIKKworI34gbXNnaWQgIlNhdmUgeG1sIHJlcHJlc2VudGF0aW9uIG9mIHBpcGVsaW5lIHRvIEZJTEUgYW5kIGV4aXQiCisjfiBtc2dzdHIgIuS/neWtmOeuoemBk+eahCB4bWwg5o+P6L+w56ym6Iez5paH5Lu25bm26YCA5Ye6IgorCisjfiBtc2dpZCAiRklMRSIKKyN+IG1zZ3N0ciAi5paH5Lu2IgorCisjfiBtc2dpZCAiRXJyb3Igd3JpdGluZyByZWdpc3RyeSBjYWNoZSB0byAlczogJXMiCisjfiBtc2dzdHIgIuWvhOWtmOWZqOe8k+WtmOWGmeWFpSAlcyDml7blh7rplJk6ICVzIgorCisjfiBtc2dpZCAiRXJyb3IgcmUtc2Nhbm5pbmcgcmVnaXN0cnkgJXM6ICVzIgorI34gbXNnc3RyICLph43mlrDmiavmj4/lr4TlrZjlmaggJXMg5pe25Ye66ZSZOiAlcyIKKworI34gbXNnaWQgIkVycm9yIHJlLXNjYW5uaW5nIHJlZ2lzdHJ5ICVzIgorI34gbXNnc3RyICLph43mlrDmiavmj4/lr4TlrZjlmaggJXMg5pe25Ye66ZSZIgorCisjfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkLiIKKyN+IG1zZ3N0ciAiR1N0cmVhbWVyIOWGhemDqOmUmeivr++8mueKtuaAgeabtOaUueWksei0peOAgiIKKworI34gbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBkZXNjcmlwdG9yIFwiJWRcIi4iCisjfiBtc2dzdHIgIuWGmeWFpeaWh+S7tuaPj+i/sOespuKAnCVk4oCd5pe25Ye66ZSZ44CCIgorCisjfiBtc2dpZCAiRmlsZSBkZXNjcmlwdG9yIFwiJWRcIiBpcyBub3QgdmFsaWQuIgorI34gbXNnc3RyICLmlofku7bmj4/ov7DnrKbigJwlZOKAneaXoOaViOOAgiIKKworI34gbXNnaWQgIkZSRUVJTkcgcGlwZWxpbmUgLi4uXG4iCisjfiBtc2dzdHIgIuato+WcqOmHiuaUvueuoemBkyAuLi5cbiIKKworI34gbXNnaWQgIm9yaWdpbmFsIGxvY2F0aW9uIG9mIGZpbGUgYXMgYSBVUkkiCisjfiBtc2dzdHIgIuaWh+S7tuWOn+Wni+S9jee9ruS9nOS4uiBVUkkg5Zyw5Z2AIgpkaWZmIC0tZ2l0IGEvcG8vemhfVFcuZ21vIGIvcG8vemhfVFcuZ21vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOTQxYmIKLS0tIC9kZXYvbnVsbAorKysgYi9wby96aF9UVy5nbW8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vemhfVFcucG8gYi9wby96aF9UVy5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2ZhMzdmCi0tLSAvZGV2L251bGwKKysrIGIvcG8vemhfVFcucG8KQEAgLTAsMCArMSwxMjYyIEBACisjIHRyYWRpdGlvbmFsIENoaW5lc2UgdHJhbnNsYXRpb24gb2YgZ3N0cmVhbWVyLgorIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgorIyBBYmVsIENoZXVuZyA8YWJlbGNoZXVuZ0BnbWFpbC5jb20+LCAyMDA1LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDAuOC44XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDktMjkgMTQ6NTUrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDUtMDQtMjcgMTQ6NTUrMDgwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogQWJlbCBDaGV1bmcgPGFiZWxjaGV1bmdAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IENoaW5lc2UgKHRyYWRpdGlvbmFsKSA8emgtbDEwbkBsaW51eC5vcmcudHc+XG4iCisiTGFuZ3VhZ2U6IHpoX1RXXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0xOyBwbHVyYWw9MDtcbiIKKworbXNnaWQgIlByaW50IHRoZSBHU3RyZWFtZXIgdmVyc2lvbiIKK21zZ3N0ciAi6aGv56S6IEdTdHJlYW1lciDniYjmnKwiCisKK21zZ2lkICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKK21zZ3N0ciAi5Luk5Lu75L2V6K2m5ZGK6YO96YCg5oiQ56iL5byP57WC5q2iIgorCittc2dpZCAiUHJpbnQgYXZhaWxhYmxlIGRlYnVnIGNhdGVnb3JpZXMgYW5kIGV4aXQiCittc2dzdHIgIumhr+ekuuWPr+S7peWBtemMr+eahOmhnuWIpe+8jOeEtuW+jOe1kOadnyIKKworbXNnaWQgIiIKKyJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gNSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKK21zZ3N0ciAiIgorIuWwh+mgkOioreWBtemMr+e0muWIpeioreWumueCuiAxICjlj6rpoa/npLrpjK/oqqQpIOiHsyA1ICjku7vkvZXoqIrmga8p77yM5oiW6ICF55SoIDAg6KGo56S65LiN6aGv56S66KiK5oGvIgorCittc2dpZCAiTEVWRUwiCittc2dzdHIgIkxFVkVMIgorCittc2dpZCAiIgorIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5X25hbWU6bGV2ZWwgcGFpcnMgdG8gc2V0IHNwZWNpZmljIGxldmVscyBmb3IgIgorInRoZSBpbmRpdmlkdWFsIGNhdGVnb3JpZXMuIEV4YW1wbGU6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKK21zZ3N0ciAiIgorIuWQhOeorumhnuWIpeWSjOWug+WAkeeahOips+e0sOeoi+W6pu+8jOagvOW8j+aYr+OAjOWIhumhnjrnrYnntJrjgI3vvIzmr4/lgIvpg73ku6XpgJfomZ/pmpTplovjgILkvovlpoLvvJoiCisiR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgorCittc2dpZCAiTElTVCIKK21zZ3N0ciAiTElTVCIKKworbXNnaWQgIkRpc2FibGUgY29sb3JlZCBkZWJ1Z2dpbmcgb3V0cHV0IgorbXNnc3RyICLlgbXpjK/ntZDmnpzkuI3liqDkuIroibLlvakiCisKK21zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKK21zZ3N0ciAi6Zec6ZaJ5YG16Yyv5Yqf6IO9IgorCittc2dpZCAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCittc2dzdHIgIui8ieWFpeWinuaViOaooee1hOaZgumhr+ekuuips+e0sOioiuaBryIKKworbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCittc2dzdHIgIiIKKworbXNnaWQgIlBBVEhTIgorbXNnc3RyICJQQVRIUyIKKworIywgZnV6enkKK21zZ2lkICIiCisiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCisiZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgorbXNnc3RyICIiCisi6Zmk5LqG55Kw5aKD6K6K5pW4IEdTVF9QTFVHSU5fUEFUSCDkuK3nmoTlop7mlYjmqKHntYTkuYvlpJbvvIzlj6blpJblho3mjIflrprovInlhaXnmoTlop7mlYjmqKHntYQgKOS7pemAlyIKKyLomZ/liIbpmpQpIgorCittc2dpZCAiUExVR0lOUyIKK21zZ3N0ciAiUExVR0lOUyIKKworbXNnaWQgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCittc2dzdHIgIui8ieWFpeWinuaViOaooee1hOaZguS4jeaUlOaIqueoi+W8j+WNgOauteeivOmMr+iqpCIKKworbXNnaWQgIkRpc2FibGUgdXBkYXRpbmcgdGhlIHJlZ2lzdHJ5IgorbXNnc3RyICIiCisKK21zZ2lkICJEaXNhYmxlIHNwYXduaW5nIGEgaGVscGVyIHByb2Nlc3Mgd2hpbGUgc2Nhbm5pbmcgdGhlIHJlZ2lzdHJ5IgorbXNnc3RyICIiCisKK21zZ2lkICJHU3RyZWFtZXIgT3B0aW9ucyIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCittc2dzdHIgIumhr+ekuiBHU3RyZWFtZXIg54mI5pysIgorCittc2dpZCAiVW5rbm93biBvcHRpb24iCittc2dzdHIgIiIKKworbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgY29yZSBsaWJyYXJ5IGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIOS4u+imgeWHveW8j+W6q+eZvOeUn+S4gOiIrOaAp+eahOmMr+iqpOOAgiIKKworIywgZnV6enkKK21zZ2lkICIiCisiR1N0cmVhbWVyIGRldmVsb3BlcnMgd2VyZSB0b28gbGF6eSB0byBhc3NpZ24gYW4gZXJyb3IgY29kZSB0byB0aGlzIGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIOmWi+eZvOS6uuWToeacqueUqOS7u+S9lemMr+iqpOeivOWIpOWumumAmemhnumMr+iqpOOAguiri+WMr+WgseS5i+OAgiIKKworIywgZnV6enkKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKK21zZ3N0ciAiR1N0cmVhbWVyIOWFp+mDqOmMr+iqpO+8muacquWujOaIkOe3qOeoi+OAguiri+WMr+WgsemMr+iqpOOAgiIKKworbXNnaWQgIiIKKyJHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQgYW5kIHNvbWUgZWxlbWVudCBmYWlsZWQgdG8gcG9zdCBhICIKKyJwcm9wZXIgZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogcGFkIHByb2JsZW0uIgorbXNnc3RyICJHU3RyZWFtZXIg5YWn6YOo6Yyv6Kqk77ya57ea56iL55m855Sf5ZWP6aGM44CC6KuL5Yyv5aCx6Yyv6Kqk44CCIgorCisjLCBmdXp6eQorbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGhyZWFkIHByb2JsZW0uIgorbXNnc3RyICJHU3RyZWFtZXIg5YWn6YOo6Yyv6Kqk77ya57ea56iL55m855Sf5ZWP6aGM44CC6KuL5Yyv5aCx6Yyv6Kqk44CCIgorCisjLCBmdXp6eQorbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCittc2dzdHIgIkdTdHJlYW1lciDlhafpg6jpjK/oqqTvvJrnt5rnqIvnmbznlJ/llY/poYzjgILoq4vljK/loLHpjK/oqqTjgIIiCisKKyMsIGZ1enp5Cittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBldmVudCBwcm9ibGVtLiIKK21zZ3N0ciAiR1N0cmVhbWVyIOWFp+mDqOmMr+iqpO+8muaQnOWwi+eZvOeUn+WVj+mhjOOAguiri+WMr+WgsemMr+iqpOOAgiIKKworIywgZnV6enkKK21zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4iCittc2dzdHIgIkdTdHJlYW1lciDlhafpg6jpjK/oqqTvvJrmkJzlsIvnmbznlJ/llY/poYzjgILoq4vljK/loLHpjK/oqqTjgIIiCisKKyMsIGZ1enp5Cittc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgorbXNnc3RyICJHU3RyZWFtZXIg5YWn6YOo6Yyv6Kqk77ya5pCc5bCL55m855Sf5ZWP6aGM44CC6KuL5Yyv5aCx6Yyv6Kqk44CCIgorCisjLCBmdXp6eQorbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGFnIHByb2JsZW0uIgorbXNnc3RyICJHU3RyZWFtZXIg5YWn6YOo6Yyv6Kqk77ya57ea56iL55m855Sf5ZWP6aGM44CC6KuL5Yyv5aCx6Yyv6Kqk44CCIgorCittc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2xvY2sgcHJvYmxlbS4iCittc2dzdHIgIkdTdHJlYW1lciDlhafpg6jpjK/oqqTvvJrmkJzlsIvnmbznlJ/llY/poYzjgILoq4vljK/loLHpjK/oqqTjgIIiCisKK21zZ2lkICIiCisiVGhpcyBhcHBsaWNhdGlvbiBpcyB0cnlpbmcgdG8gdXNlIEdTdHJlYW1lciBmdW5jdGlvbmFsaXR5IHRoYXQgaGFzIGJlZW4gIgorImRpc2FibGVkLiIKK21zZ3N0ciAiIgorCittc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgorbXNnc3RyICJHU3RyZWFtZXIg6LyU5Yqp5Ye95byP5bqr55m855Sf5LiA6Iis5oCn55qE6Yyv6Kqk44CCIgorCittc2dpZCAiQ291bGQgbm90IGluaXRpYWxpemUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAi54Sh5rOV5Yid5aeL5YyW6LyU5Yqp5Ye95byP5bqr44CCIgorCisjIChhYmVsKSBjbG9zZSBsaWJyYXJ5PyDoqbLop6Pph4vmuIXmpZrmiY3mmK/jgIIKK21zZ2lkICJDb3VsZCBub3QgY2xvc2Ugc3VwcG9ydGluZyBsaWJyYXJ5LiIKK21zZ3N0ciAi54Sh5rOV6Zec6ZaJ6LyU5Yqp5Ye95byP5bqr44CCIgorCisjIChhYmVsKSBjbG9zZSBsaWJyYXJ5PyDoqbLop6Pph4vmuIXmpZrmiY3mmK/jgIIKKyMsIGZ1enp5Cittc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgorbXNnc3RyICLnhKHms5Xpl5zplonovJTliqnlh73lvI/luqvjgIIiCisKK21zZ2lkICJFbmNvZGluZyBlcnJvci4iCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHJlc291cmNlIGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIOS4u+imgeWHveW8j+W6q+eZvOeUn+S4gOiIrOaAp+eahOmMr+iqpOOAgiIKKworbXNnaWQgIlJlc291cmNlIG5vdCBmb3VuZC4iCittc2dzdHIgIuaJvuS4jeWIsOizh+a6kOOAgiIKKworbXNnaWQgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCittc2dzdHIgIuizh+a6kOS9v+eUqOS4re+8jOaIluiAheeEoeazleWtmOWPluOAgiIKKworbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKK21zZ3N0ciAiIgorCittc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHdyaXRpbmcuIgorbXNnc3RyICIiCisKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCittc2dzdHIgIiIKKworbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSByZXNvdXJjZS4iCittc2dzdHIgIiIKKworbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gcmVzb3VyY2UuIgorbXNnc3RyICIiCisKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gcmVzb3VyY2UuIgorbXNnc3RyICIiCisKK21zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKK21zZ3N0ciAiIgorCittc2dpZCAiQ291bGQgbm90IHN5bmNocm9uaXplIG9uIHJlc291cmNlLiIKK21zZ3N0ciAiIgorCittc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCittc2dzdHIgIiIKKworbXNnaWQgIk5vIHNwYWNlIGxlZnQgb24gdGhlIHJlc291cmNlLiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiR1N0cmVhbWVyIOS4u+imgeWHveW8j+W6q+eZvOeUn+S4gOiIrOaAp+eahOmMr+iqpOOAgiIKKworbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKK21zZ3N0ciAiIgorCittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCittc2dzdHIgIueEoeazleaxuuWumuizh+aWmeS4sua1geeahOmhnuWei+OAgiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKK21zZ3N0ciAiIgorCittc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgorbXNnc3RyICIiCisKK21zZ2lkICJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iCittc2dzdHIgIueEoeazleWwh+izh+aWmeS4sua1gemAsuihjOino+eivOOAgiIKKworbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKK21zZ3N0ciAi54Sh5rOV5bCH6LOH5paZ5Liy5rWB6YCy6KGM57eo56K844CCIgorCittc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCittc2dzdHIgIiIKKworbXNnaWQgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgIlRoZSBzdHJlYW0gaXMgaW4gdGhlIHdyb25nIGZvcm1hdC4iCittc2dzdHIgIuizh+aWmeS4sua1geagvOW8j+mMr+iqpOOAgiIKKworbXNnaWQgIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBkZWNyeXB0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGNhbid0IGJlIGRlY3J5cHRlZCBiZWNhdXNlIG5vIHN1aXRhYmxlIGtleSBoYXMgIgorImJlZW4gc3VwcGxpZWQuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzLiIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcyBhbmQgY29kZSAlZC4iCittc2dzdHIgIiIKKworbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKK21zZ3N0ciAiIgorCittc2dpZCAidGl0bGUiCittc2dzdHIgIuaomemhjCIKKworbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUiCittc2dzdHIgIiIKKworbXNnaWQgInRpdGxlIHNvcnRuYW1lIgorbXNnc3RyICIiCisKK21zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICIiCisKK21zZ2lkICJhcnRpc3QiCittc2dzdHIgIiIKKworbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAiIgorCittc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgorbXNnc3RyICIiCisKK21zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCittc2dzdHIgIiIKKworbXNnaWQgImFsYnVtIgorbXNnc3RyICLlsIjovK8iCisKK21zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSIKK21zZ3N0ciAi6YCZ5Lqb5qiC5puy5omA5bGs55qE5bCI6LyvIgorCittc2dpZCAiYWxidW0gc29ydG5hbWUiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAi6YCZ5Lqb5qiC5puy5omA5bGs55qE5bCI6LyvIgorCittc2dpZCAiYWxidW0gYXJ0aXN0IgorbXNnc3RyICIiCisKK21zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQiCittc2dzdHIgIiIKKworbXNnaWQgImFsYnVtIGFydGlzdCBzb3J0bmFtZSIKK21zZ3N0ciAiIgorCittc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkIgorbXNnc3RyICIiCisKK21zZ2lkICJkYXRlIgorbXNnc3RyICLml6XmnJ8iCisKKyMsIGZ1enp5Cittc2dpZCAiZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHRGF0ZSBzdHJ1Y3R1cmUpIgorbXNnc3RyICLlqpLpq5Tos4fmlpnoo73kvZzml6XmnJ8iCisKKyMsIGZ1enp5Cittc2dpZCAiZGF0ZXRpbWUiCittc2dzdHIgIuaXpeacnyIKKworIywgZnV6enkKK21zZ2lkICJkYXRlIGFuZCB0aW1lIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdzdERhdGVUaW1lIHN0cnVjdHVyZSkiCittc2dzdHIgIuWqkumrlOizh+aWmeijveS9nOaXpeacnyIKKworbXNnaWQgImdlbnJlIgorbXNnc3RyICLmqILmm7LliIbpoZ4iCisKK21zZ2lkICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKK21zZ3N0ciAi6YCZ6aaW5qiC5puy55qE5YiG6aGeIgorCittc2dpZCAiY29tbWVudCIKK21zZ3N0ciAi6Ki76KejIgorCittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCittc2dzdHIgIuS7u+aEj+eUqOS+hueCuuWqkumrlOWKoOS4iuiou+ino+eahOaWh+WtlyIKKworIywgZnV6enkKK21zZ2lkICJleHRlbmRlZCBjb21tZW50IgorbXNnc3RyICLoqLvop6MiCisKKyMsIGZ1enp5Cittc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgorbXNnc3RyICLku7vmhI/nlKjkvobngrrlqpLpq5TliqDkuIroqLvop6PnmoTmloflrZciCisKK21zZ2lkICJ0cmFjayBudW1iZXIiCittc2dzdHIgIumfs+i7jOe3qOiZnyIKKworbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgorbXNnc3RyICLmqILmm7LlsazmlrzlsIjovK/kuK3nmoTnrKzlub7pppbmqILmm7IiCisKK21zZ2lkICJ0cmFjayBjb3VudCIKK21zZ3N0ciAi6Z+z6LuM57i95pW4IgorCittc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKK21zZ3N0ciAi5pW05aWX5bCI6Lyv55qE5qiC5puy57i95pW4IgorCittc2dpZCAiZGlzYyBudW1iZXIiCittc2dzdHIgIuein+eJh+e3qOiZnyIKKworbXNnaWQgImRpc2MgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCittc2dzdHIgIuaVtOWll+WwiOi8r+S4reipsuaoguabsuWtmOWPluWcqOesrOW5vueJh+ein+eJhyIKKworbXNnaWQgImRpc2MgY291bnQiCittc2dzdHIgIuein+eJh+e4veaVuCIKKworbXNnaWQgImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIgorbXNnc3RyICLmlbTlpZflsIjovK/nmoTnop/niYfnuL3mlbgiCisKK21zZ2lkICJsb2NhdGlvbiIKK21zZ3N0ciAi5L2N572uIgorCittc2dpZCAiIgorIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgorImlzIGhvc3RlZCkiCittc2dzdHIgIiIKKworbXNnaWQgImhvbWVwYWdlIgorbXNnc3RyICIiCisKK21zZ2lkICJIb21lcGFnZSBmb3IgdGhpcyBtZWRpYSAoaS5lLiBhcnRpc3Qgb3IgbW92aWUgaG9tZXBhZ2UpIgorbXNnc3RyICIiCisKK21zZ2lkICJkZXNjcmlwdGlvbiIKK21zZ3N0ciAi6Kqq5piOIgorCittc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgorbXNnc3RyICLkuIDmrrXmnInpl5zlqpLpq5TlhaflrrnnmoTnsKHnn63oqqrmmI7mloflrZciCisKK21zZ2lkICJ2ZXJzaW9uIgorbXNnc3RyICLniYjmnKwiCisKK21zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKK21zZ3N0ciAi5aqS6auU5qqU5qGI54mI5pysIgorCittc2dpZCAiSVNSQyIKK21zZ3N0ciAiSVNSQyIKKworbXNnaWQgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKK21zZ3N0ciAiIgorCittc2dpZCAib3JnYW5pemF0aW9uIgorbXNnc3RyICLntYTnuZQiCisKK21zZ2lkICJjb3B5cmlnaHQiCittc2dzdHIgIuaOiOasiiIKKworbXNnaWQgImNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJjb3B5cmlnaHQgdXJpIgorbXNnc3RyICLmjojmrIoiCisKKyMsIGZ1enp5Cittc2dpZCAiVVJJIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgorbXNnc3RyICLkuIDmrrXmnInpl5zlqpLpq5TlhaflrrnnmoTnsKHnn63oqqrmmI7mloflrZciCisKKyMsIGZ1enp5Cittc2dpZCAiZW5jb2RlZCBieSIKK21zZ3N0ciAi57eo56K856iL5bqPIgorCittc2dpZCAibmFtZSBvZiB0aGUgZW5jb2RpbmcgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiIKK21zZ3N0ciAiIgorCittc2dpZCAiY29udGFjdCIKK21zZ3N0ciAi6YCj57WhIgorCittc2dpZCAiY29udGFjdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi6YCj57Wh6LOH6KiKIgorCittc2dpZCAibGljZW5zZSIKK21zZ3N0ciAi5qKd5qy+IgorCittc2dpZCAibGljZW5zZSBvZiBkYXRhIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAibGljZW5zZSB1cmkiCittc2dzdHIgIuaineasviIKKworbXNnaWQgIlVSSSB0byB0aGUgbGljZW5zZSBvZiB0aGUgZGF0YSIKK21zZ3N0ciAiIgorCittc2dpZCAicGVyZm9ybWVyIgorbXNnc3RyICLmvJTlh7rogIUiCisKK21zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKK21zZ3N0ciAiIgorCittc2dpZCAiY29tcG9zZXIiCittc2dzdHIgIiIKKworbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyIKK21zZ3N0ciAiIgorCittc2dpZCAiZHVyYXRpb24iCittc2dzdHIgIuaZgumWk+mVt+W6piIKKworbXNnaWQgImxlbmd0aCBpbiBHU3RyZWFtZXIgdGltZSB1bml0cyAobmFub3NlY29uZHMpIgorbXNnc3RyICIiCisKK21zZ2lkICJjb2RlYyIKK21zZ3N0ciAi57eo56K8IgorCittc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICIiCisKK21zZ2lkICJ2aWRlbyBjb2RlYyIKK21zZ3N0ciAi6KaW5YOP57eo56K8IgorCittc2dpZCAiY29kZWMgdGhlIHZpZGVvIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICIiCisKK21zZ2lkICJhdWRpbyBjb2RlYyIKK21zZ3N0ciAi6Z+z5pWI57eo56K8IgorCittc2dpZCAiY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIgorbXNnc3RyICLpn7PmlYgiCisKKyMsIGZ1enp5Cittc2dpZCAic3VidGl0bGUgY29kZWMiCittc2dzdHIgIuimluWDj+e3qOeivCIKKworIywgZnV6enkKK21zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgIumfs+aViCIKKworIywgZnV6enkKK21zZ2lkICJjb250YWluZXIgZm9ybWF0IgorbXNnc3RyICLpgKPntaHos4foqIoiCisKKyMsIGZ1enp5Cittc2dpZCAiY29udGFpbmVyIGZvcm1hdCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCittc2dzdHIgIumfs+aViCIKKworbXNnaWQgImJpdHJhdGUiCittc2dzdHIgIuS9jeWFg+eOhyIKKworbXNnaWQgImV4YWN0IG9yIGF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgIua6lueiuueahOaIluW5s+Wdh+eahOS9jeWFg+eOhyAoYml0L3MpIgorCittc2dpZCAibm9taW5hbCBiaXRyYXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJub21pbmFsIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICIiCisKK21zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCittc2dzdHIgIuacgOS9juS9jeWFg+eOhyIKKworbXNnaWQgIm1pbmltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCittc2dzdHIgIuacgOS9juS9jeWFg+eOhyAoYml0L3MpIgorCittc2dpZCAibWF4aW11bSBiaXRyYXRlIgorbXNnc3RyICLmnIDpq5jkvY3lhYPnjociCisKK21zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgorbXNnc3RyICLmnIDpq5jkvY3lhYPnjocgKGJpdC9zKSIKKworbXNnaWQgImVuY29kZXIiCittc2dzdHIgIue3qOeivOeoi+W6jyIKKworbXNnaWQgImVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCittc2dzdHIgIiIKKworbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKK21zZ3N0ciAiIgorCittc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKK21zZ3N0ciAiIgorCittc2dpZCAic2VyaWFsIgorbXNnc3RyICIiCisKK21zZ2lkICJzZXJpYWwgbnVtYmVyIG9mIHRyYWNrIgorbXNnc3RyICIiCisKK21zZ2lkICJyZXBsYXlnYWluIHRyYWNrIGdhaW4iCittc2dzdHIgIiIKKworbXNnaWQgInRyYWNrIGdhaW4gaW4gZGIiCittc2dzdHIgIiIKKworbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgcGVhayIKK21zZ3N0ciAiIgorCittc2dpZCAicGVhayBvZiB0aGUgdHJhY2siCittc2dzdHIgIiIKKworbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKK21zZ3N0ciAiIgorCittc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKK21zZ3N0ciAiIgorCittc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBwZWFrIgorbXNnc3RyICIiCisKK21zZ2lkICJwZWFrIG9mIHRoZSBhbGJ1bSIKK21zZ3N0ciAiIgorCittc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCittc2dzdHIgIiIKKworbXNnaWQgInJlZmVyZW5jZSBsZXZlbCBvZiB0cmFjayBhbmQgYWxidW0gZ2FpbiB2YWx1ZXMiCittc2dzdHIgIiIKKworbXNnaWQgImxhbmd1YWdlIGNvZGUiCittc2dzdHIgIiIKKworbXNnaWQgImxhbmd1YWdlIGNvZGUgZm9yIHRoaXMgc3RyZWFtLCBjb25mb3JtaW5nIHRvIElTTy02MzktMSIKK21zZ3N0ciAiIgorCittc2dpZCAiaW1hZ2UiCittc2dzdHIgIiIKKworbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCittc2dpZCAicHJldmlldyBpbWFnZSIKK21zZ3N0ciAiIgorCittc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICIiCisKK21zZ2lkICJhdHRhY2htZW50IgorbXNnc3RyICIiCisKK21zZ2lkICJmaWxlIGF0dGFjaGVkIHRvIHRoaXMgc3RyZWFtIgorbXNnc3RyICIiCisKK21zZ2lkICJiZWF0cyBwZXIgbWludXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKK21zZ3N0ciAiIgorCittc2dpZCAia2V5d29yZHMiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKK21zZ3N0ciAi5LiA5q615pyJ6Zec5aqS6auU5YWn5a6555qE57Ch55+t6Kqq5piO5paH5a2XIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBuYW1lIgorbXNnc3RyICLkvY3nva4iCisKK21zZ2lkICIiCisiaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpdmUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yICIKKyJwcm9kdWNlZCIKK21zZ3N0ciAiIgorCittc2dpZCAiZ2VvIGxvY2F0aW9uIGxhdGl0dWRlIgorbXNnc3RyICIiCisKK21zZ2lkICIiCisiZ2VvIGxhdGl0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCisiZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIGVxdWF0b3IsIG5lZ2F0aXZlIHZhbHVlcyBmb3IgIgorInNvdXRoZXJuIGxhdGl0dWRlcykiCittc2dzdHIgIiIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBsb25naXR1ZGUiCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJnZW8gbG9uZ2l0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCisiZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIHByaW1lIG1lcmlkaWFuIGluIEdyZWVud2ljaC9VSywgICIKKyJuZWdhdGl2ZSB2YWx1ZXMgZm9yIHdlc3Rlcm4gbG9uZ2l0dWRlcykiCittc2dzdHIgIiIKKworbXNnaWQgImdlbyBsb2NhdGlvbiBlbGV2YXRpb24iCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJnZW8gZWxldmF0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiBtZXRlcnMgIgorImFjY29yZGluZyB0byBXR1M4NCAoemVybyBpcyBhdmVyYWdlIHNlYSBsZXZlbCkiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gY291bnRyeSIKK21zZ3N0ciAi5L2N572uIgorCittc2dpZCAiY291bnRyeSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKK21zZ3N0ciAi5L2N572uIgorCittc2dpZCAiY2l0eSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJnZW8gbG9jYXRpb24gc3VibG9jYXRpb24iCittc2dzdHIgIuS9jee9riIKKworbXNnaWQgIiIKKyJhIGxvY2F0aW9uIHdoaXRoaW4gYSBjaXR5IHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZCBvciBjcmVhdGVkIChlLmcuICIKKyJ0aGUgbmVpZ2hib3Job29kKSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgorbXNnc3RyICLkvY3nva4iCisKK21zZ2lkICJleHBlY3RlZCBlcnJvciBvZiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbmluZyBtZWFzdXJlcyAoaW4gbWV0ZXJzKSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKK21zZ3N0ciAi5L2N572uIgorCittc2dpZCAiIgorIm1vdmVtZW50IHNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgaW4gbS9zIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKK21zZ3N0ciAi5L2N572uIgorCittc2dpZCAiIgorImluZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBvZiBhICIKKyJtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgMCAiCisibWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgorbXNnc3RyICLkvY3nva4iCisKK21zZ2lkICIiCisiaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGRldmljZSBpcyBwb2ludGluZyB0byB3aGVuIGNhcHR1cmluZyAgYSBtZWRpYS4gIgorIkl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIHJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSAiCisiZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICdzaG93IG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lJyBoZXJlCittc2dpZCAic2hvdyBuYW1lIgorbXNnc3RyICIiCisKK21zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQorbXNnaWQgInNob3cgc29ydG5hbWUiCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImVwaXNvZGUgbnVtYmVyIgorbXNnc3RyICLnop/niYfnt6jomZ8iCisKK21zZ2lkICJUaGUgZXBpc29kZSBudW1iZXIgaW4gdGhlIHNlYXNvbiB0aGUgbWVkaWEgaXMgcGFydCBvZiIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgInNlYXNvbiBudW1iZXIiCittc2dzdHIgIuein+eJh+e3qOiZnyIKKworbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAibHlyaWNzIgorbXNnc3RyICLmop3mrL4iCisKK21zZ2lkICJUaGUgbHlyaWNzIG9mIHRoZSBtZWRpYSwgY29tbW9ubHkgdXNlZCBmb3Igc29uZ3MiCittc2dzdHIgIiIKKworbXNnaWQgImNvbXBvc2VyIHNvcnRuYW1lIgorbXNnc3RyICIiCisKK21zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgorbXNnc3RyICIiCisKK21zZ2lkICJncm91cGluZyIKK21zZ3N0ciAiIgorCittc2dpZCAiIgorIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKKyJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAidXNlciByYXRpbmciCittc2dzdHIgIuaZgumWk+mVt+W6piIKKworbXNnaWQgIiIKKyJSYXRpbmcgYXR0cmlidXRlZCBieSBhIHVzZXIuIFRoZSBoaWdoZXIgdGhlIHJhbmssIHRoZSBtb3JlIHRoZSB1c2VyIGxpa2VzICIKKyJ0aGlzIG1lZGlhIgorbXNnc3RyICIiCisKK21zZ2lkICJkZXZpY2UgbWFudWZhY3R1cmVyIgorbXNnc3RyICIiCisKK21zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgorbXNnc3RyICIiCisKK21zZ2lkICJkZXZpY2UgbW9kZWwiCittc2dzdHIgIiIKKworbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eQorbXNnaWQgImFwcGxpY2F0aW9uIG5hbWUiCittc2dzdHIgIuS9jee9riIKKworbXNnaWQgIkFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSIKK21zZ3N0ciAiIgorCittc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKK21zZ3N0ciAiIgorCittc2dpZCAiQXJiaXRyYXJ5IGFwcGxpY2F0aW9uIGRhdGEgdG8gYmUgc2VyaWFsaXplZCBpbnRvIHRoZSBtZWRpYSIKK21zZ3N0ciAiIgorCittc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCittc2dzdHIgIiIKKworbXNnaWQgIkhvdyB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCBiZWZvcmUgZGlzcGxheSIKK21zZ3N0ciAiIgorCittc2dpZCAiLCAiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgorbXNnc3RyICLpjK/oqqTvvJrkvoboh6ogJXMg5YWD5Lu277yaJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQWRkaXRpb25hbCBkZWJ1ZyBpbmZvOlxuIgorIiVzXG4iCittc2dzdHIgIiIKKyLpoY3lpJblgbXpjK/os4foqIrvvJpcbiIKKyIlc1xuIgorCisjLCBjLWZvcm1hdAorbXNnaWQgInNwZWNpZmllZCBlbXB0eSBiaW4gXCIlc1wiLCBub3QgYWxsb3dlZCIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHNraXBwaW5nIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICLigJwlMiRz4oCdIOWFg+S7tuaykuaciSDigJwlMSRz4oCdIOWxrOaApyIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc2V0IHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiB0byBcIiVzXCIiCittc2dzdHIgIueEoeazleWwhyDigJwlMiRz4oCdIOWFg+S7tueahCDigJwlMSRz4oCdIOWxrOaAp+ioreWumueCuiDigJwlMyRz4oCdIgorCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgorbXNnc3RyICLnhKHms5XpgKPmjqUgJXMg5ZKMICVzIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGVsZW1lbnQgXCIlc1wiIgorbXNnc3RyICLigJwlc+KAnSDlhYPku7bkuI3lrZjlnKgiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGNhcHMgXCIlc1wiIgorbXNnc3RyICIiCisKK21zZ2lkICJsaW5rIHdpdGhvdXQgc291cmNlIGVsZW1lbnQiCittc2dzdHIgIueuoee3muS4reaykuacieS+hua6kOWFg+S7tiIKKworbXNnaWQgImxpbmsgd2l0aG91dCBzaW5rIGVsZW1lbnQiCittc2dzdHIgIueuoee3muS4reaykuaciei8uOWHuuWFg+S7tiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAiVVJJIOKAnCVz4oCdIOaykuacieS+hua6kOWFg+S7tiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJubyBlbGVtZW50IHRvIGxpbmsgVVJJIFwiJXNcIiB0byIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKK21zZ3N0ciAiVVJJIOKAnCVz4oCdIOaykuaciei8uOWHuuWFg+S7tiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbGluayBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCittc2dzdHIgIiIKKworbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgorbXNnc3RyICLkuI3lhYHoqLHkvb/nlKjmspLmnInlhaflrrnnmoTnrqHnt5oiCisKK21zZ2lkICJJbnRlcm5hbCBjbG9jayBlcnJvci4iCittc2dzdHIgIiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCittc2dzdHIgIiIKKworbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCittc2dzdHIgIiIKKworbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKK21zZ3N0ciAiIgorCittc2dpZCAiRmlsdGVyIGNhcHMiCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKKyJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgorbXNnc3RyICIiCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKK21zZ3N0ciAi5pyq5oyH5a6a5rqW5YKZ5a+r5YWl55qE5qqU5qGI5ZCN56ix44CCIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKK21zZ3N0ciAi54Sh5rOV6ZaL5ZWfIOKAnCVz4oCdIOaqlOahiOS+huWvq+WFpeWFp+WuueOAgiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAi6Zec6ZaJ5qqU5qGIIOKAnCVz4oCdIOaZgueZvOeUn+mMr+iqpOOAgiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgc2Vla2luZyBpbiBmaWxlIFwiJXNcIi4iCittc2dzdHIgIueVtuWvq+WFpeWFp+WuueiHs+aqlOahiCDigJwlc+KAnSDmmYLnmbznlJ/pjK/oqqTjgIIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIFwiJXNcIi4iCittc2dzdHIgIueVtuWvq+WFpeWFp+WuueiHs+aqlOahiCDigJwlc+KAnSDmmYLnmbznlJ/pjK/oqqTjgIIiCisKK21zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKK21zZ3N0ciAi5pyq5oyH5a6a6KaB6K6A5Y+W55qE5qqU5qGI5ZCN56ix44CCIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKK21zZ3N0ciAi54Sh5rOV6ZaL5ZWf5qqU5qGIIOKAnCVz4oCdIOS+huiugOWPluWFp+WuueOAgiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCittc2dzdHIgIueEoeazlemAo+aOpSAlcyDlkowgJXMiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiXCIlc1wiIGlzIGEgZGlyZWN0b3J5LiIKK21zZ3N0ciAi4oCcJXPigJ0g5piv5LiA5YCL55uu6YyE44CCIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKK21zZ3N0ciAi4oCcJXPigJ0g5piv5LiA5YCLIHNvY2tldOOAgiIKKworbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCittc2dzdHIgIiIKKworbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCittc2dzdHIgIiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKK21zZ3N0ciAi54Sh5rOV6YCj5o6lICVzIOWSjCAlcyIKKworIywgZnV6enkKK21zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIgorbXNnc3RyICLnlbblr6vlhaXlhaflrrnoh7PmqpTmoYgg4oCcJXPigJ0g5pmC55m855Sf6Yyv6Kqk44CCIgorCittc2dpZCAiY2FwcyIKK21zZ3N0ciAiIgorCittc2dpZCAiZGV0ZWN0ZWQgY2FwYWJpbGl0aWVzIGluIHN0cmVhbSIKK21zZ3N0ciAiIgorCittc2dpZCAibWluaW11bSIKK21zZ3N0ciAi5pyA5L2OIgorCittc2dpZCAibWF4aW11bSIKK21zZ3N0ciAi5pyA6auYIgorCittc2dpZCAiZm9yY2UgY2FwcyIKK21zZ3N0ciAiIgorCittc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJTdHJlYW0gY29udGFpbnMgbm8gZGF0YS4iCittc2dzdHIgIumAmeS6m+aoguabsuaJgOWxrOeahOWwiOi8ryIKKworbXNnaWQgIkltcGxlbWVudGVkIEludGVyZmFjZXM6XG4iCittc2dzdHIgIiIKKworbXNnaWQgInJlYWRhYmxlIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAid3JpdGFibGUiCittc2dzdHIgIuaomemhjCIKKworbXNnaWQgImNvbnRyb2xsYWJsZSIKK21zZ3N0ciAiIgorCittc2dpZCAiY2hhbmdlYWJsZSBpbiBOVUxMLCBSRUFEWSwgUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUiCittc2dzdHIgIiIKKworbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiCittc2dzdHIgIiIKKworbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMIG9yIFJFQURZIHN0YXRlIgorbXNnc3RyICIiCisKK21zZ2lkICJCbGFja2xpc3RlZCBmaWxlczoiCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJUb3RhbCBjb3VudDogIgorbXNnc3RyICLpn7Pou4znuL3mlbgiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgYmxhY2tsaXN0ZWQgZmlsZSIKK21zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHJbMF0gIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBwbHVnaW4iCittc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCittc2dzdHJbMF0gIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICIlZCBibGFja2xpc3QgZW50cnkiCittc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdCBlbnRyaWVzIgorbXNnc3RyWzBdICIiCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVkIGZlYXR1cmUiCittc2dpZF9wbHVyYWwgIiVkIGZlYXR1cmVzIgorbXNnc3RyWzBdICLlip/og70iCisKK21zZ2lkICJQcmludCBhbGwgZWxlbWVudHMiCittc2dzdHIgIumhr+ekuuaJgOacieWFg+S7tiIKKworbXNnaWQgIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiCittc2dzdHIgIiIKKworbXNnaWQgIiIKKyJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgorInBsdWdpbnMgcHJvdmlkZS5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKKyJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgorbXNnc3RyICIiCisKK21zZ2lkICJMaXN0IHRoZSBwbHVnaW4gY29udGVudHMiCittc2dzdHIgIiIKKworbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKK21zZ3N0ciAiIgorCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmlsZTogJXNcbiIKK21zZ3N0ciAi54Sh5rOV6ZaL5ZWfIOKAnCVz4oCdIOaqlOahiOS+huWvq+WFpeWFp+WuueOAgiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iCittc2dzdHIgIlVSSSDigJwlc+KAnSDmspLmnInkvobmupDlhYPku7YiCisKK21zZ2lkICJJbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIkdvdCBtZXNzYWdlICMldSAoJXMpOiAiCittc2dzdHIgIiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIgorbXNnc3RyICLpjK/oqqTvvJrkvoboh6ogJXMg5YWD5Lu277yaJXNcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBwYWQgXCIlczolc1wiLlxuIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJGT1VORCBUQUdcbiIKK21zZ3N0ciAiIgorCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJTkZPOlxuIgorIiVzXG4iCittc2dzdHIgIiIKKworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgorbXNnc3RyICLpjK/oqqTvvJrkvoboh6ogJXMg5YWD5Lu277yaJXNcbiIKKworbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJidWZmZXJpbmcuLi4iCittc2dzdHIgIiIKKworbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCittc2dzdHIgIiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJJbnRlcnJ1cHQ6IFN0b3BwaW5nIHBpcGVsaW5lIC4uLlxuIgorbXNnc3RyICIiCisKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKK21zZ3N0ciAi4oCcJXPigJ0g5YWD5Lu25LiN5a2Y5ZyoIgorCittc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgorbXNnc3RyICIiCisKK21zZ2lkICJPdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBwcm9wZXJ0eSBub3RpZmljYXRpb25zIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi5LiN6aGv56S65ZKMIFRZUEUg5pyJ6Zec55qE54uA5oWL6LOH6KiKIgorCittc2dpZCAiT3V0cHV0IG1lc3NhZ2VzIgorbXNnc3RyICIiCisKK21zZ2lkICJEbyBub3Qgb3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBvZiBUWVBFIgorbXNnc3RyICLkuI3poa/npLrlkowgVFlQRSDmnInpl5znmoTni4DmhYvos4foqIoiCisKK21zZ2lkICJUWVBFMSxUWVBFMiwuLi4iCittc2dzdHIgIlRZUEUxLFRZUEUyLC4uLiIKKworbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKK21zZ3N0ciAiIgorCittc2dpZCAiUHJpbnQgYWxsb2MgdHJhY2UgKGlmIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lKSIKK21zZ3N0ciAi5Y2w5Ye6IGFsbG9jIOi/vei5pOioiuaBryAo5aaC5p6c57eo6K2v56iL5byP5pmC5pyJ5ZWf55So6YCZ6aCF5Yqf6IO9KSIKKworbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKK21zZ3N0ciAiIgorCittc2dpZCAiR2F0aGVyIGFuZCBwcmludCBpbmRleCBzdGF0aXN0aWNzIgorbXNnc3RyICIiCisKKyMsIGMtZm9ybWF0Cittc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZDogJXMuXG4iCittc2dzdHIgIumMr+iqpO+8mueEoeazleijveS9nOeuoee3mu+8miVz44CCXG4iCisKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlxuIgorbXNnc3RyICLpjK/oqqTvvJrnhKHms5Xoo73kvZznrqHnt5rjgIJcbiIKKworIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCittc2dzdHIgIuitpuWRiu+8mueuoee3mumMr+iqpO+8miVzXG4iCisKK21zZ2lkICJFUlJPUjogdGhlICdwaXBlbGluZScgZWxlbWVudCB3YXNuJ3QgZm91bmQuXG4iCittc2dzdHIgIumMr+iqpO+8muaJvuS4jeWIsCDigJhwaXBlbGluZeKAmSDlhYPku7bjgIJcbiIKKworbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiRVJST1I6IFBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwYXVzZS5cbiIKK21zZ3N0ciAi6Yyv6Kqk77ya566h57ea54Sh5rOV5Z+36KGM44CCXG4iCisKK21zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCittc2dzdHIgIiIKKworIywgZnV6enkKK21zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHByZXJvbGwuXG4iCittc2dzdHIgIumMr+iqpO+8mueuoee3mueEoeazleWft+ihjOOAglxuIgorCittc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgorbXNnc3RyICIiCisKK21zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKK21zZ3N0ciAi6Yyv6Kqk77ya566h57ea54Sh5rOV5Z+36KGM44CCXG4iCisKK21zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKK21zZ3N0ciAiIgorCittc2dpZCAiV2FpdGluZyBmb3IgRU9TLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCittc2dzdHIgIiIKKworbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgorbXNnc3RyICIiCisKK21zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKK21zZ3N0ciAiIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKK21zZ3N0ciAiIgorCittc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgorbXNnc3RyICIiCisKKyMsIGZ1enp5Cittc2dpZCAiRnJlZWluZyBwaXBlbGluZSAuLi5cbiIKK21zZ3N0ciAi5Z+36KGM566h57eaIC4uLlxuIgorCisjfiBtc2dpZCAiVXNhZ2U6IGdzdC14bWxsYXVuY2ggPGZpbGUueG1sPiBbIGVsZW1lbnQucHJvcGVydHk9dmFsdWUgLi4uIF1cbiIKKyN+IG1zZ3N0ciAi55So5rOV77yaZ3N0LXhtbGxhdW5jaCA8ZmlsZS54bWw+IFsgZWxlbWVudC5wcm9wZXJ0eT12YWx1ZSAuLi4gXVxuIgorCisjfiBtc2dpZCAiRVJST1I6IHBhcnNlIG9mIHhtbCBmaWxlICclcycgZmFpbGVkLlxuIgorI34gbXNnc3RyICLpjK/oqqTvvJrnhKHms5Xop6PmnpAgWE1MIOaqlOahiCDigJglc+KAmSDnmoTlhaflrrnjgIJcbiIKKworI34gbXNnaWQgIkVSUk9SOiBjb3VsZCBub3QgcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50ICVkOiAlcy5cbiIKKyN+IG1zZ3N0ciAi6Yyv6Kqk77ya54Sh5rOV6Kej5p6Q5oyH5Luk55qE56ysICVkIOWAi+WPg+aVuO+8miVz44CCXG4iCisKKyN+IG1zZ2lkICJTYXZlIHhtbCByZXByZXNlbnRhdGlvbiBvZiBwaXBlbGluZSB0byBGSUxFIGFuZCBleGl0IgorI34gbXNnc3RyICLlsIfku6PooajnrqHnt5rnmoTmnrbmp4vlhLLlrZjoh7M85qqU5qGIPu+8jOeEtuW+jOe1kOadnyIKKworI34gbXNnaWQgIkZJTEUiCisjfiBtc2dzdHIgIuaqlOahiCIKKworI34gbXNnaWQgIkRpc2FibGUgYWNjZWxlcmF0ZWQgQ1BVIGluc3RydWN0aW9ucyIKKyN+IG1zZ3N0ciAi6Zec6ZaJIENQVSDlhKrljJblip/og70iCisKKyN+IG1zZ2lkICJTQ0hFRFVMRVIiCisjfiBtc2dzdHIgIlNDSEVEVUxFUiIKKworI34gbXNnaWQgIlJFR0lTVFJZIgorI34gbXNnc3RyICJSRUdJU1RSWSIKKworI34gbXNnaWQgInBhdGggbGlzdCBmb3IgbG9hZGluZyBwbHVnaW5zIChzZXBhcmF0ZWQgYnkgJyVzJykiCisjfiBtc2dzdHIgIuaQnOWwi+WinuaViOaooee1hOaZgueahOi3r+W+kea4heWWru+8jOS7peKAmCVz4oCZ5YiG6ZqUIgorCisjfiBtc2dpZCAiU2NoZWR1bGVyIHRvIHVzZSAoZGVmYXVsdCBpcyAnJXMnKSIKKyN+IG1zZ3N0ciAi5rqW5YKZ5L2/55So55qE5o6S56iL5ZmoICjpoJDoqK3ngrog4oCYJXPigJkpIgorCisjfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkLiAgRmlsZSBhIGJ1Zy4iCisjfiBtc2dzdHIgIkdTdHJlYW1lciDlhafpg6jpjK/oqqTvvJrnhKHms5Xmm7TmlLnni4DmhYvjgILoq4vljK/loLHpjK/oqqTjgIIiCisKKyN+IG1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNjaGVkdWxlciBwcm9ibGVtLiAgRmlsZSBhIGJ1Zy4iCisjfiBtc2dzdHIgIkdTdHJlYW1lciDlhafpg6jpjK/oqqTvvJrmjpLnqIvlmajnmbznlJ/llY/poYzjgILoq4vljK/loLHpjK/oqqTjgIIiCisKKyN+IG1zZ2lkICJvcmlnaW5hbCBsb2NhdGlvbiBvZiBmaWxlIGFzIGEgVVJJIgorI34gbXNnc3RyICJVUkkg5b2i5byP55qE5qqU5qGI5L2N572uIgorCisjfiBtc2dpZCAiIgorI34gIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlcyBpdGVyYXRpb25zIChzdW0gJXMgbnMsIGF2ZXJhZ2UgJXMgbnMsIG1pbiAlcyBucywgIgorI34gIm1heCAlcyBucykuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICIlcyDlgIvov7TlnIjlvozln7fooYzlroznlaIgKOe4veWFsSAlcyBuc++8jOW5s+WdhyAlcyBuc++8jOacgOWwkSAlcyBuc++8jOacgOWkmiAlcyBucylcbiIKKworI34gbXNnaWQgIk51bWJlciBvZiB0aW1lcyB0byBpdGVyYXRlIHBpcGVsaW5lIgorI34gbXNnc3RyICLnrqHnt5rln7fooYzmrKHmlbgiCisKKyN+IG1zZ2lkICIgICAgICAgICBUcnlpbmcgdG8gcnVuIGFueXdheS5cbiIKKyN+IG1zZ3N0ciAiICAgICAg5ZiX6Kmm5by35Yi25Z+36KGM44CCXG4iCisKKyMgKGFiZWwpIGUuZy4gIkFkZGVkIHBsdWdpbiBhbGF3IHdpdGggMiBmZWF0dXJlcy4iCisjfiBtc2dpZCAiQWRkZWQgcGx1Z2luICVzIHdpdGggJWQgJXMuXG4iCisjfiBtc2dzdHIgIuWKoOWFpeWinuaViOaooee1hCAlc++8jOeVtuS4reaciSAlZCDpoIUlc+OAglxuIgorCisjfiBtc2dpZCAiUmVidWlsZGluZyAlcyAoJXMpIC4uLlxuIgorI34gbXNnc3RyICLmraPlnKjph43mlrDmlbTnkIYgJXMgKCVzKSAuLi5cbiIKKworI34gbXNnaWQgIlRyeWluZyB0byBsb2FkICVzIC4uLlxuIgorI34gbXNnc3RyICLlmJfoqabovInlhaUgJXMgLi4uXG4iCisKKyN+IG1zZ2lkICJFcnJvciBsb2FkaW5nICVzXG4iCisjfiBtc2dzdHIgIui8ieWFpSAlcyDlpLHmlZdcbiIKKworIyAoYWJlbCkgZS5nLiAiTG9hZGVkIDE0NiBwbHVnaW5zIHdpdGggMjkzIGZlYXR1cmVzLiIKKyN+IG1zZ2lkICJMb2FkZWQgJWQgcGx1Z2lucyB3aXRoICVkICVzLlxuIgorI34gbXNnc3RyICLovInlhaUgJWQg5YCL5aKe5pWI5qih57WE77yM55W25Lit5pyJICVkIOmghSVz44CCXG4iCmRpZmYgLS1naXQgYS9zY3JpcHRzL2dzdC11bmluc3RhbGxlZCBiL3NjcmlwdHMvZ3N0LXVuaW5zdGFsbGVkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ4NWExYzEKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2dzdC11bmluc3RhbGxlZApAQCAtMCwwICsxLDE4MiBAQAorIyEvYmluL2Jhc2ggLWkKKyMKKyMgdGhpcyBzY3JpcHQgaXMgaW4gZ2l0IGFzIGdzdHJlYW1lci9zY3JpcHRzL2dzdC11bmluc3RhbGxlZAorIworIyBJdCB3aWxsIHNldCB1cCB0aGUgZW52aXJvbm1lbnQgdG8gdXNlIGFuZCBkZXZlbG9wIGdzdHJlYW1lciBhbmQgcHJvamVjdHMKKyMgdGhhdCB1c2UgZ3N0cmVhbWVyIHdpdGggYW4gdW5pbnN0YWxsZWQgZ2l0IGNoZWNrb3V0IG9mIGdzdHJlYW1lciBhbmQgdGhlCisjIHBsdWdpbiBtb2R1bGVzLgorIworIyBJdCB3aWxsIHNldCB1cCBMRF9MSUJSQVJZX1BBVEgsIERZTERfTElCUkFSWV9QQVRILCBQS0dfQ09ORklHX1BBVEgsCisjIEdTVF9QTFVHSU5fUEFUSCwgR1NUX1BMVUdJTl9TWVNURU1fUEFUSCwgR1NUX1JFR0lTVFJZLCBNQU5QQVRILCBQWVRIT05QQVRICisjIHRvIHByZWZlciB0aGUgdW5pbnN0YWxsZWQgdmVyc2lvbnMgYnV0IGFsc28gY29udGFpbiB0aGUgaW5zdGFsbGVkIG9uZXMuCisjIFRoZSBvbmx5IGV4Y2VwdGlvbiB0byB0aGlzIGlzLCB0aGF0IG5vIHN5c3RlbSBpbnN0YWxsZWQgcGx1Z2lucyB3aWxsIGJlCisjIHVzZWQgYnV0IG9ubHkgdGhlIHVuaW5zdGFsbGVkIG9uZXMuCisjCisjIFRoaXMgc2NyaXB0IGFzc3VtZXMgdGhhdCB0aGUgcmVsZXZhbnQgbW9kdWxlcyBhcmUgY2hlY2tlZCBvdXQgb25lIGJ5IG9uZQorIyB1bmRlciBhIGdpdmVuIHRyZWUgc3BlY2lmaWVkIGJlbG93IGluIE1ZR1NULgorIworIyBTeW1saW5rIHRoaXMgc2NyaXB0IGluIGEgZGlyZWN0b3J5IGluIHlvdXIgcGF0aCAoZm9yIGV4YW1wbGUgJEhPTUUvYmluKS4gWW91CisjIG11c3QgbmFtZSB0aGUgc3ltbGluayBnc3Qtc29tZXRoaW5nLCB3aGVyZSBzb21ldGhpbmcgaXMgdGhlIHN1YmRpcmVjdG9yeQorIyBvZiBNWUdTVCB0aGF0IGNvbnRhaW5zIHlvdXIgZ3N0cmVhbWVyIG1vZHVsZSBjaGVja291dHMuCisjCisjIGUuZy46CisjIC0gbWtkaXIgJEhPTUUvZ3N0L2hlYWQKKyMgLSBsbiAtc2YgZ3N0LXVuaW5zdGFsbGVkICRIT01FL2Jpbi9nc3QtaGVhZAorIyAtIGNoZWNrb3V0IGNvcGllcyBvZiBnc3RyZWFtZXIgbW9kdWxlcyBpbiAkSE9NRS9nc3QvaGVhZAorIyAtIGdzdC1oZWFkCisKKyMgVGhpcyBzY3JpcHQgaXMgcnVuIC1pIHNvIHRoYXQgUFMxIGRvZXNuJ3QgZ2V0IGNsZWFyZWQKKworIyBDaGFuZ2UgdGhpcyB2YXJpYWJsZSB0byB0aGUgbG9jYXRpb24gb2YgeW91ciBnc3RyZWFtZXIgZ2l0IGNoZWNrb3V0cworTVlHU1Q9JEhPTUUvZ3N0CisKKyMKKyMgRXZlcnl0aGluZyBiZWxvdyB0aGlzIGxpbmUgc2hvdWxkbid0IGJlIGVkaXRlZCEKKyMKKworIyBleHRyYWN0IHZlcnNpb24gZnJvbSAkMAorIyBpZiB0aGlzIHNjcmlwdCBpcyBjYWxsZWQgImdzdC1oZWFkIiB0aGVuIHZlcnNpb24gd2lsbCBiZSAiaGVhZCIKK1ZFUlNJT049YGVjaG8gJDAgfCBzZWQgcy8uKmdzdC0vL2dgCisKKyMgYmFzZSBwYXRoIHVuZGVyIHdoaWNoIGRpcnMgYXJlIGluc3RhbGxlZAorR1NUPSRNWUdTVC8kVkVSU0lPTgorR1NUX1BSRUZJWD0kR1NUL3ByZWZpeAoraWYgdGVzdCAhIC1lICRHU1Q7IHRoZW4KKyAgZWNobyAiJEdTVCBkb2VzIG5vdCBleGlzdCAhIgorICBleGl0CitmaQorCisjIHNldCB1cCBhIGJ1bmNoIG9mIHBhdGhzCitQQVRIPSJcCiskR1NUL2dzdHJlYW1lci90b29sczpcCiskR1NUL2dzdC1wbHVnaW5zLWJhc2UvdG9vbHM6XAorJEdTVC9nc3QtcGxheWVyL3NyYzpcCiskR1NUL2dzdC1lZGl0b3Ivc3JjOlwKKyRHU1QvZ3N0cmVhbWVyLXNoYXJwL3Rvb2xzOlwKKyRHU1RfUFJFRklYL2JpbjpcCiskUEFUSCIKKworIyAvc29tZS9wYXRoOiBtYWtlcyB0aGUgZHluYW1pYyBsaW5rZXIgbG9vayBpbiAuIHRvbywgc28gYXZvaWQgdGhpcworTERfTElCUkFSWV9QQVRIPSRHU1RfUFJFRklYL2xpYiR7TERfTElCUkFSWV9QQVRIOis6JExEX0xJQlJBUllfUEFUSH0KK0RZTERfTElCUkFSWV9QQVRIPSRHU1RfUFJFRklYL2xpYiR7RFlMRF9MSUJSQVJZX1BBVEg6KzokRFlMRF9MSUJSQVJZX1BBVEh9CisKKyMgR1N0cmVhbWVyIHJ0c3Agc2VydmVyIGxpYnJhcnkKK0xEX0xJQlJBUllfUEFUSD0kR1NUL2dzdC1ydHNwLXNlcnZlci9nc3QvcnRzcC1zZXJ2ZXIvLmxpYnM6JExEX0xJQlJBUllfUEFUSAorRFlMRF9MSUJSQVJZX1BBVEg9JEdTVC9nc3QtcnRzcC1zZXJ2ZXIvZ3N0L3J0c3Atc2VydmVyLy5saWJzOiREWUxEX0xJQlJBUllfUEFUSAorCisjIEdTdHJlYW1lciBmZm1wZWcgbGlicmFyaWVzCitmb3IgcGF0aCBpbiBsaWJhdmZvcm1hdCBsaWJhdnV0aWwgbGliYXZjb2RlYyBsaWJwb3N0cHJvYyBsaWJhdmRldmljZQorZG8KKyAgIExEX0xJQlJBUllfUEFUSD0kR1NUL2dzdC1mZm1wZWcvZ3N0LWxpYnMvZXh0L2ZmbXBlZy8kcGF0aDokTERfTElCUkFSWV9QQVRICisgICBEWUxEX0xJQlJBUllfUEFUSD0kR1NUL2dzdC1mZm1wZWcvZ3N0LWxpYnMvZXh0L2ZmbXBlZy8kcGF0aDokRFlMRF9MSUJSQVJZX1BBVEgKK2RvbmUKKworIyBHU3RyZWFtZXIgcGx1Z2lucyBiYXNlIGxpYnJhcmllcworZm9yIHBhdGggaW4gYXBwIGF1ZGlvIGNkZGEgZmZ0IGludGVyZmFjZXMgcGJ1dGlscyBuZXRidWZmZXIgcmlmZiBydHAgcnRzcCBzZHAgdGFnIHV0aWxzIHZpZGVvIAorZG8KKyAgTERfTElCUkFSWV9QQVRIPSRHU1QvZ3N0LXBsdWdpbnMtYmFzZS9nc3QtbGlicy9nc3QvJHBhdGgvLmxpYnM6JExEX0xJQlJBUllfUEFUSAorICBEWUxEX0xJQlJBUllfUEFUSD0kR1NUL2dzdC1wbHVnaW5zLWJhc2UvZ3N0LWxpYnMvZ3N0LyRwYXRoLy5saWJzOiREWUxEX0xJQlJBUllfUEFUSAorZG9uZQorCisjIEdTdHJlYW1lciBjb3JlIGxpYnJhcmllcworZm9yIHBhdGggaW4gYmFzZSBuZXQgY2hlY2sgY29udHJvbGxlciBkYXRhcHJvdG9jb2wKK2RvCisgIExEX0xJQlJBUllfUEFUSD0kR1NUL2dzdHJlYW1lci9saWJzL2dzdC8kcGF0aC8ubGliczokTERfTElCUkFSWV9QQVRICisgIERZTERfTElCUkFSWV9QQVRIPSRHU1QvZ3N0cmVhbWVyL2xpYnMvZ3N0LyRwYXRoLy5saWJzOiREWUxEX0xJQlJBUllfUEFUSAorZG9uZQorTERfTElCUkFSWV9QQVRIPSRHU1QvZ3N0cmVhbWVyL2dzdC8ubGliczokTERfTElCUkFSWV9QQVRICitEWUxEX0xJQlJBUllfUEFUSD0kR1NUL2dzdHJlYW1lci9nc3QvLmxpYnM6JERZTERfTElCUkFSWV9QQVRICitleHBvcnQgTERfTElCUkFSWV9QQVRICitleHBvcnQgRFlMRF9MSUJSQVJZX1BBVEgKKyAgCitleHBvcnQgUEtHX0NPTkZJR19QQVRIPSJcCiskR1NUX1BSRUZJWC9saWIvcGtnY29uZmlnXAorOiRHU1QvZ3N0cmVhbWVyL3BrZ2NvbmZpZ1wKKzokR1NUL2dzdC1wbHVnaW5zLWJhc2UvcGtnY29uZmlnXAorOiRHU1QvZ3N0LXBsdWdpbnMtZ29vZC9wa2djb25maWdcCis6JEdTVC9nc3QtcGx1Z2lucy11Z2x5L3BrZ2NvbmZpZ1wKKzokR1NUL2dzdC1wbHVnaW5zLWJhZC9wa2djb25maWdcCis6JEdTVC9nc3QtZmZtcGVnL3BrZ2NvbmZpZ1wKKzokR1NUL2dzdC1weXRob24vcGtnY29uZmlnXAorOiRHU1QvZ3N0LXJ0c3Atc2VydmVyL3BrZ2NvbmZpZ1wKKzokR1NUL2dzdHJlYW1lci1zaGFycC9wa2djb25maWdcCis6JEdTVC9mYXJzaWdodDJcCis6JEdTVC9saWJuaWNlL25pY2VcCiske1BLR19DT05GSUdfUEFUSDorOiRQS0dfQ09ORklHX1BBVEh9IgorCitleHBvcnQgR1NUX1BMVUdJTl9QQVRIPSJcCiskR1NUL2dzdHJlYW1lci9wbHVnaW5zXAorOiRHU1QvZ3N0LXBsdWdpbnMtYmFzZS9leHRcCis6JEdTVC9nc3QtcGx1Z2lucy1iYXNlL2dzdFwKKzokR1NUL2dzdC1wbHVnaW5zLWJhc2Uvc3lzXAorOiRHU1QvZ3N0LXBsdWdpbnMtZ29vZC9leHRcCis6JEdTVC9nc3QtcGx1Z2lucy1nb29kL2dzdFwKKzokR1NUL2dzdC1wbHVnaW5zLWdvb2Qvc3lzXAorOiRHU1QvZ3N0LXBsdWdpbnMtdWdseS9leHRcCis6JEdTVC9nc3QtcGx1Z2lucy11Z2x5L2dzdFwKKzokR1NUL2dzdC1wbHVnaW5zLXVnbHkvc3lzXAorOiRHU1QvZ3N0LXBsdWdpbnMtYmFkL2V4dFwKKzokR1NUL2dzdC1wbHVnaW5zLWJhZC9nc3RcCis6JEdTVC9nc3QtcGx1Z2lucy1iYWQvc3lzXAorOiRHU1QvZ3N0LWZmbXBlZy9leHRcCis6JEdTVC9nbm9ubGluL2dubFwKKzokR1NUL2dzdC1vcGVubWF4XAorOiRHU1QvZ3N0LXBsdWdpbnMtZ2wvZ3N0XAorOiRHU1QvcGx1Z2luc1wKKzokR1NUL2ZhcnNpZ2h0Mi9nc3RcCis6JEdTVC9mYXJzaWdodDIvdHJhbnNtaXR0ZXJzXAorOiRHU1QvbGlibmljZS9nc3RcCiske0dTVF9QTFVHSU5fUEFUSDorOiRHU1RfUExVR0lOX1BBVEh9IgorCisjIGRvbid0IHVzZSBhbnkgc3lzdGVtLWluc3RhbGxlZCBwbHVnLWlucyBhdCBhbGwKK2V4cG9ydCBHU1RfUExVR0lOX1NZU1RFTV9QQVRIPQorIyBzZXQgb3VyIHJlZ2lzdHJ5IHNvbWV3aGVyZSBlbHNlIHNvIHdlIGRvbid0IG1lc3MgdXAgdGhlIHJlZ2lzdHJ5IGdlbmVyYXRlZAorIyBieSBhbiBpbnN0YWxsZWQgY29weQorcm0gLWYgJEdTVC9nc3RyZWFtZXIvcmVnaXN0cnkueG1sIDI+L2Rldi9udWxsCitleHBvcnQgR1NUX1JFR0lTVFJZPSRHU1QvZ3N0cmVhbWVyL3JlZ2lzdHJ5LmRhdAorIyBQb2ludCBhdCB0aGUgdW5pbnN0YWxsZWQgcGx1Z2luIHNjYW5uZXIKK2V4cG9ydCBHU1RfUExVR0lOX1NDQU5ORVI9JEdTVC9nc3RyZWFtZXIvbGlicy9nc3QvaGVscGVycy9nc3QtcGx1Z2luLXNjYW5uZXIKKworIyBvbmNlIE1BTlBBVEggaXMgc2V0LCBpdCBuZWVkcyBhdCBsZWFzdCBhbiAiZW1wdHkiY29tcG9uZW50IHRvIGtlZXAgcHVsbGluZworIyBpbiB0aGUgc3lzdGVtLWNvbmZpZ3VyZWQgbWFuIHBhdGhzIGZyb20gbWFuLmNvbmZpZworIyB0aGlzIHN0aWxsIGRvZXNuJ3QgbWFrZSBpdCB3b3JrIGZvciB0aGUgdW5pbnN0YWxsZWQgY2FzZSwgc2luY2UgbWFuIGdvZXMKKyMgbG9vayBmb3IgYSBtYW4gZGlyZWN0b3J5ICJuZWFyYnkiIGluc3RlYWQgb2YgdGhlIGRpcmVjdG9yeSBJJ20gdGVsbGluZyBpdCB0bworZXhwb3J0IE1BTlBBVEg9JEdTVC9nc3RyZWFtZXIvdG9vbHM6JEdTVF9QUkVGSVgvc2hhcmUvbWFuOiRNQU5QQVRICitweXRob252ZXI9YHB5dGhvbiAtYyAiaW1wb3J0IHN5czsgcHJpbnQgc3lzLnZlcnNpb25bOjNdImAKK2V4cG9ydCBQWVRIT05QQVRIPSRHU1QvZ3N0LXB5dGhvbjokR1NUX1BSRUZJWC9saWIvcHl0aG9uJHB5dGhvbnZlci9zaXRlLXBhY2thZ2VzJHtQWVRIT05QQVRIOis6JFBZVEhPTlBBVEh9CisKKyMgdG90ZW0tcGwtcGFyc2VyCitleHBvcnQgUEtHX0NPTkZJR19QQVRIPSRHU1QvdG90ZW0tcGwtcGFyc2VyOiRQS0dfQ09ORklHX1BBVEgKK2V4cG9ydCBMRF9MSUJSQVJZX1BBVEg9JEdTVC90b3RlbS1wbC1wYXJzZXIvcGxwYXJzZS8ubGliczokTERfTElCUkFSWV9QQVRICitleHBvcnQgRFlMRF9MSUJSQVJZX1BBVEg9JEdTVC90b3RlbS1wbC1wYXJzZXIvcGxwYXJzZS8ubGliczokRFlMRF9MSUJSQVJZX1BBVEgKKworIyB0b3RlbQorZXhwb3J0IFBBVEg9JEdTVC90b3RlbS9zcmM6JFBBVEgKKworIyBnc3RyZWFtZXItc2hhcnAKK2V4cG9ydCBNT05PX1BBVEg9JEdTVC9nc3RyZWFtZXItc2hhcnAvZ3N0cmVhbWVyLXNoYXJwOiRNT05PX1BBVEgKK2V4cG9ydCBMRF9MSUJSQVJZX1BBVEg9JEdTVC9nc3RyZWFtZXItc2hhcnAvZ3N0cmVhbWVyLXNoYXJwL2dsdWUvLmxpYnM6JExEX0xJQlJBUllfUEFUSAorZXhwb3J0IERZTERfTElCUkFSWV9QQVRIPSRHU1QvZ3N0cmVhbWVyLXNoYXJwL2dzdHJlYW1lci1zaGFycC9nbHVlLy5saWJzOiREWUxEX0xJQlJBUllfUEFUSAorCisjIGdzdC1xYS1zeXN0ZW0KK2V4cG9ydCBQWVRIT05QQVRIPSRHU1QvZ3N0LXFhLXN5c3RlbTokUFlUSE9OUEFUSAorZXhwb3J0IFBBVEg9JEdTVC9nc3QtcWEtc3lzdGVtL2JpbjokUEFUSAorCisjIGlmIHdlIGdvdCBhIGNvbW1hbmQsIHJ1biBpdCwgZWxzZSBzdGFydCBhIHNoZWxsCitpZiB0ZXN0ICEgLXogIiQxIjsKK3RoZW4KKyAgJEAKKyAgZXhpdCAkPworZmkKKworIyBzZXQgdXAgcHJvbXB0IHRvIGhlbHAgdXMgcmVtZW1iZXIgd2UncmUgaW4gYSBzdWJzaGVsbCwgY2QgdG8KKyMgdGhlIGdzdHJlYW1lciBiYXNlIGRpciBhbmQgc3RhcnQgJFNIRUxMCitjZCAkR1NUCitzaGVsbD0kU0hFTEwKK2lmIHRlc3QgIngkU0hFTEwiID0gIngvYmluL2Jhc2giCit0aGVuCisgICMgZGViaWFuL3VidW50dSByZXNldHMgb3VyIFBTMS4gIGJhc3RhcmRzLgorICBzaGVsbD0iJFNIRUxMIC0tbm9wcm9maWxlIgorZmkKK1BTMT0iW2dzdC0kVkVSU0lPTl0gJFBTMSIgJHNoZWxsCisKZGlmZiAtLWdpdCBhL3N0YW1wLmguaW4gYi9zdGFtcC5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ODhmNzAKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFtcC5oLmluCkBAIC0wLDAgKzEgQEAKK3RpbWVzdGFtcApkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2ZmMTkyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwzNSBAQAorRVhUUkFfRElTVCA9IFJFQURNRQorCitpZiBCVUlMRF9URVNUUworIyMgU1VCRElSU19URVNUUyA9IHRlc3RzIHRlc3RzdWl0ZQorIyMgRklYTUU6IHdyaXRlIHRlc3RzIGZyb20gc2NyYXRjaAorU1VCRElSU19URVNUUyA9CitpZiBIQVZFX0NIRUNLCitTVUJESVJTX0NIRUNLID0gY2hlY2sKK2Vsc2UKK1NVQkRJUlNfQ0hFQ0sgPQorZW5kaWYKK2Vsc2UKK1NVQkRJUlNfVEVTVFMgPQorU1VCRElSU19DSEVDSyA9CitlbmRpZgorCitpZiBCVUlMRF9FWEFNUExFUworU1VCRElSU19FWEFNUExFUyA9IGV4YW1wbGVzCitlbHNlCitTVUJESVJTX0VYQU1QTEVTID0KK2VuZGlmCisKK1NVQkRJUlMgPSBcCisJYmVuY2htYXJrcwlcCisJJChTVUJESVJTX0NIRUNLKSBcCisJbWlzYwkJXAorCSQoU1VCRElSU19URVNUUykgXAorCSQoU1VCRElSU19FWEFNUExFUykKKworIyBUaGVzZSBhcmUgYWxsIHRoZSBwb3NzaWJsZSBzdWJkaXJzCitESVNUX1NVQkRJUlMgPSBcCisJYmVuY2htYXJrcyBcCisJY2hlY2sgXAorCWV4YW1wbGVzIFwKKwltaXNjCmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5pbiBiL3Rlc3RzL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMGQ3YjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDc2MCBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4xIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IHRlc3RzCitESVNUX0NPTU1PTiA9IFJFQURNRSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtcHl0aG9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1zY3J1Yi1pbmNsdWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZnVuY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYXJzZXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2ludHJvc3BlY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jaGVjay1jaGVja3MubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ljb252Lm00ICQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00ICQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L25scy5tNCAkKHRvcF9zcmNkaXIpL200L3BvLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fJChWKSkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgIiAkQDsKK0FNX1ZfYXQgPSAkKGFtX192X2F0XyQoVikpCithbV9fdl9hdF8gPSAkKGFtX192X2F0XyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfYXRfMCA9IEAKK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK1JFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBcCisJaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1kdmktcmVjdXJzaXZlIGluc3RhbGwtZXhlYy1yZWN1cnNpdmUgXAorCWluc3RhbGwtaHRtbC1yZWN1cnNpdmUgaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1wZGYtcmVjdXJzaXZlIGluc3RhbGwtcHMtcmVjdXJzaXZlIGluc3RhbGwtcmVjdXJzaXZlIFwKKwlpbnN0YWxsY2hlY2stcmVjdXJzaXZlIGluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBwZGYtcmVjdXJzaXZlIFwKKwlwcy1yZWN1cnNpdmUgdW5pbnN0YWxsLXJlY3Vyc2l2ZQorUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMgPSBtb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlCVwKKyAgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorQU1fUkVDVVJTSVZFX1RBUkdFVFMgPSAkKFJFQ1VSU0lWRV9UQVJHRVRTOi1yZWN1cnNpdmU9KSBcCisJJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUzotcmVjdXJzaXZlPSkgdGFncyBUQUdTIGN0YWdzIENUQUdTIFwKKwlkaXN0ZGlyCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorYW1fX3JlbGF0aXZpemUgPSBcCisgIGRpcjA9YHB3ZGA7IFwKKyAgc2VkX2ZpcnN0PSdzLF5cKFteL10qXCkvLiokJCxcMSwnOyBcCisgIHNlZF9yZXN0PSdzLF5bXi9dKi8qLCwnOyBcCisgIHNlZF9sYXN0PSdzLF4uKi9cKFteL10qXCkkJCxcMSwnOyBcCisgIHNlZF9idXRsYXN0PSdzLC8qW14vXSokJCwsJzsgXAorICB3aGlsZSB0ZXN0IC1uICIkJGRpcjEiOyBkbyBcCisgICAgZmlyc3Q9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKKyAgICBpZiB0ZXN0ICIkJGZpcnN0IiAhPSAiLiI7IHRoZW4gXAorICAgICAgaWYgdGVzdCAiJCRmaXJzdCIgPSAiLi4iOyB0aGVuIFwKKyAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfbGFzdCJgLyIkJGRpcjIiOyBcCisgICAgICAgIGRpcjA9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2J1dGxhc3QiYDsgXAorICAgICAgZWxzZSBcCisgICAgICAgIGZpcnN0Mj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAorICAgICAgICBpZiB0ZXN0ICIkJGZpcnN0MiIgPSAiJCRmaXJzdCI7IHRoZW4gXAorICAgICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAorICAgICAgICBlbHNlIFwKKyAgICAgICAgICBkaXIyPSIuLi8kJGRpcjIiOyBcCisgICAgICAgIGZpOyBcCisgICAgICAgIGRpcjA9IiQkZGlyMCIvIiQkZmlyc3QiOyBcCisgICAgICBmaTsgXAorICAgIGZpOyBcCisgICAgZGlyMT1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCisgIGRvbmU7IFwKKyAgcmVsZGlyPSIkJGRpcjIiCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVMgPSBAQVNACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JJU09OX1BBVEggPSBAQklTT05fUEFUSEAKK0NBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKK0NBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACitDQyA9IEBDQ0AKK0NDQVMgPSBAQ0NBU0AKK0NDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAorQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAorQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAorQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAorQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRBRElSID0gQERBVEFESVJACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACitETExUT09MID0gQERMTFRPT0xACitET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAorRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKK0VYRUVYVCA9IEBFWEVFWFRACitGRkxBR1MgPSBARkZMQUdTQAorRkdSRVAgPSBARkdSRVBACitGTEVYX1BBVEggPSBARkxFWF9QQVRIQAorR0NPViA9IEBHQ09WQAorR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACitHQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAorR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACitHTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKK0dMSUJfTElCUyA9IEBHTElCX0xJQlNACitHTElCX09OTFlfQ0ZMQUdTID0gQEdMSUJfT05MWV9DRkxBR1NACitHTElCX09OTFlfTElCUyA9IEBHTElCX09OTFlfTElCU0AKK0dMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAorR0xJQl9SRVEgPSBAR0xJQl9SRVFACitHTVBfTElCUyA9IEBHTVBfTElCU0AKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAorR1JFUCA9IEBHUkVQQAorR1NMX0xJQlMgPSBAR1NMX0xJQlNACitHU1RfQUdFID0gQEdTVF9BR0VACitHU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKK0dTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKK0dTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACitHU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAorR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACitHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FQAorR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAorR1NUX0RJU0FCTEVfTkVUX0RFRklORSA9IEBHU1RfRElTQUJMRV9ORVRfREVGSU5FQAorR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKK0dTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACitHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACitHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAorR1NUX0RJU0FCTEVfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1RSQUNFX0RFRklORUAKK0dTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkUgPSBAR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORUAKK0dTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkUgPSBAR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORUAKK0dTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FID0gQEdTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FQAorR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACitHU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKK0dTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACitHU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKK0dTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAorR1NUX01BSk9STUlOT1IgPSBAR1NUX01BSk9STUlOT1JACitHU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKK0dTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKK0dTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACitHU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKK0dTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKK0dTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKK0dTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACitHU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACitHU1RfUEtHX0RFUFMgPSBAR1NUX1BLR19ERVBTQAorR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKK0dTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgPSBAR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFREAKK0dTVF9QUklOVEZfRVhURU5TSU9OX1BPSU5URVJfRk9STUFUX0RFRklORSA9IEBHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkVACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FQAorR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAorR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKK0dTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OX0RFRklORSA9IEBHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkVACitHVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAorSEFWRV9ET0NCT09LMkhUTUwgPSBASEFWRV9ET0NCT09LMkhUTUxACitIQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAorSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAorSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAorSEFWRV9GSUcyREVWID0gQEhBVkVfRklHMkRFVkAKK0hBVkVfR01QID0gQEhBVkVfR01QQAorSEFWRV9HU0wgPSBASEFWRV9HU0xACitIQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAorSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAorSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKK0hBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAorSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKK0hPU1RfQ1BVID0gQEhPU1RfQ1BVQAorSFRNTF9ESVIgPSBASFRNTF9ESVJACitJTkVUX0FUT05fTElCUyA9IEBJTkVUX0FUT05fTElCU0AKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACitJTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKK0lOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKK0lOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKK0lOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAorSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKK0lOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKK0lOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACitJTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJESVIgPSBATElCRElSQAorTElCSUNPTlYgPSBATElCSUNPTlZACitMSUJJTlRMID0gQExJQklOVExACitMSUJNID0gQExJQk1ACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMT0NBTEVESVIgPSBATE9DQUxFRElSQAorTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAorTFRMSUJJTlRMID0gQExUTElCSU5UTEAKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUlOVCA9IEBNQUlOVEAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKK01TR01FUkdFID0gQE1TR01FUkdFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKK1BBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACitQQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAorUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACitQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BMVUdJTkRJUiA9IEBQTFVHSU5ESVJACitQT1NVQiA9IEBQT1NVQkAKK1BST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAorUFlUSE9OID0gQFBZVEhPTkAKK1BZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACitQWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAorUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAorUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1ZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACitWQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACitWQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACitWRVJTSU9OID0gQFZFUlNJT05ACitXQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKK1dJTjMyX0xJQlMgPSBAV0lOMzJfTElCU0AKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKK1hHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKK1hNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAorWFNMVFBST0MgPSBAWFNMVFBST0NACitYU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3BrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACitwa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAorcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3B5ZXhlY2RpciA9IEBweWV4ZWNkaXJACitweXRob25kaXIgPSBAcHl0aG9uZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitFWFRSQV9ESVNUID0gUkVBRE1FCitAQlVJTERfVEVTVFNfRkFMU0VAU1VCRElSU19URVNUUyA9IAorQEJVSUxEX1RFU1RTX1RSVUVAU1VCRElSU19URVNUUyA9IAorQEJVSUxEX1RFU1RTX0ZBTFNFQFNVQkRJUlNfQ0hFQ0sgPSAKK0BCVUlMRF9URVNUU19UUlVFQEBIQVZFX0NIRUNLX0ZBTFNFQFNVQkRJUlNfQ0hFQ0sgPSAKK0BCVUlMRF9URVNUU19UUlVFQEBIQVZFX0NIRUNLX1RSVUVAU1VCRElSU19DSEVDSyA9IGNoZWNrCitAQlVJTERfRVhBTVBMRVNfRkFMU0VAU1VCRElSU19FWEFNUExFUyA9IAorQEJVSUxEX0VYQU1QTEVTX1RSVUVAU1VCRElSU19FWEFNUExFUyA9IGV4YW1wbGVzCitTVUJESVJTID0gXAorCWJlbmNobWFya3MJXAorCSQoU1VCRElSU19DSEVDSykgXAorCW1pc2MJCVwKKwkkKFNVQkRJUlNfVEVTVFMpIFwKKwkkKFNVQkRJUlNfRVhBTVBMRVMpCisKKworIyBUaGVzZSBhcmUgYWxsIHRoZSBwb3NzaWJsZSBzdWJkaXJzCitESVNUX1NVQkRJUlMgPSBcCisJYmVuY2htYXJrcyBcCisJY2hlY2sgXAorCWV4YW1wbGVzIFwKKwltaXNjCisKK2FsbDogYWxsLXJlY3Vyc2l2ZQorCisuU1VGRklYRVM6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKKyMgaW50byB0aGVtIGFuZCBydW4gYG1ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgorIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiBgbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAorIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiBgY29uZmlnLnN0YXR1cycsIGVkaXQgYGNvbmZpZy5zdGF0dXMnCisjICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biBgbWFrZScpOworIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgYG1ha2UnIGNvbW1hbmQgbGluZS4KKyQoUkVDVVJTSVZFX1RBUkdFVFMpOgorCUBmYWlsPSBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgZG90X3NlZW49eWVzOyBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmU7IFwKKwlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKKwlmaTsgdGVzdCAteiAiJCRmYWlsIgorCiskKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKToKKwlAZmFpbD0gZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKwkgIGNhc2UgJCRmIGluIFwKKwkgICAgKj0qIHwgLS1bIWtdKik7OyBcCisJICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCWNhc2UgIiRAIiBpbiBcCisJICBkaXN0Y2xlYW4tKiB8IG1haW50YWluZXItY2xlYW4tKikgbGlzdD0nJChESVNUX1NVQkRJUlMpJyA7OyBcCisJICAqKSBsaXN0PSckKFNVQkRJUlMpJyA7OyBcCisJZXNhYzsgXAorCXJldj0nJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgcmV2PSIkJHN1YmRpciAkJHJldiI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCXJldj0iJCRyZXYgLiI7IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJZm9yIHN1YmRpciBpbiAkJHJldjsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZSAmJiB0ZXN0IC16ICIkJGZhaWwiCit0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAorCWRvbmUKK2N0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjdGFncyk7IFwKKwlkb25lCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PS47IFwKKwllbHNlIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PTsgXAorCWZpOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCisJICAgICAgc2V0ICIkJEAiICIkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiBjdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCAkKE1LRElSX1ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJQGxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKGRpc3RkaXIpLyQkc3ViZGlyIjsgXAorCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAorCSAgICBuZXdfZGlzdGRpcj0kJHJlbGRpcjsgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKHRvcF9kaXN0ZGlyKSI7IFwKKwkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKKwkgICAgbmV3X3RvcF9kaXN0ZGlyPSQkcmVsZGlyOyBcCisJICAgIGVjaG8gIiAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcXCI7IFwKKwkgICAgZWNobyAiICAgICBhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBhbV9fc2tpcF9tb2RlX2ZpeD06IGRpc3RkaXIpIjsgXAorCSAgICAoJChhbV9fY2QpICQkc3ViZGlyICYmIFwKKwkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCisJICAgICAgICB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIFwKKwkgICAgICAgIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFwKKwkJYW1fX3JlbW92ZV9kaXN0ZGlyPTogXAorCQlhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBcCisJCWFtX19za2lwX21vZGVfZml4PTogXAorCSAgICAgICAgZGlzdGRpcikgXAorCSAgICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stcmVjdXJzaXZlCithbGwtYW06IE1ha2VmaWxlCitpbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtcmVjdXJzaXZlCitpbnN0YWxsZGlycy1hbToKK2luc3RhbGw6IGluc3RhbGwtcmVjdXJzaXZlCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQordW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1yZWN1cnNpdmUKKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktcmVjdXJzaXZlCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1yZWN1cnNpdmUKKworaHRtbC1hbToKKworaW5mbzogaW5mby1yZWN1cnNpdmUKKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktcmVjdXJzaXZlCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtcmVjdXJzaXZlCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLXJlY3Vyc2l2ZQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1yZWN1cnNpdmUKKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1yZWN1cnNpdmUKKworcGRmLWFtOgorCitwczogcHMtcmVjdXJzaXZlCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBjdGFncy1yZWN1cnNpdmUgXAorCWluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcCB0YWdzLXJlY3Vyc2l2ZQorCisuUEhPTlk6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIFwKKwlhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisJY3RhZ3MgY3RhZ3MtcmVjdXJzaXZlIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAorCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAorCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAorCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCisJaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKKwlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBpbnN0YWxsZGlycy1hbSBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1yZWN1cnNpdmUgXAorCXVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS90ZXN0cy9SRUFETUUgYi90ZXN0cy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RhZDQ3MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL1JFQURNRQpAQCAtMCwwICsxLDEyIEBACitUaGlzIGRpcmVjdG9yeSBjb250YWlucyByZWdyZXNzaW9uIHRlc3RzLCBmdW5jdGlvbmFsaXR5IHRlc3RzLCBleGFtcGxlcywKK2JlbmNobWFya3MsIC4uLgorCitiZW5jaG1hcmtzLworICAgYmVuY2htYXJrcyB0byBwcm9maWxlIHBpZWNlcyBvZiBHU3RyZWFtZXIKK2NoZWNrLworICAgdW5pdCB0ZXN0cyB1c2luZyB0aGUgY2hlY2sgbGlicmFyeSwgbm9uLWludGVyYWN0aXZlCitleGFtcGxlcy8KKyAgIHNtYWxsIGV4YW1wbGVzIGRlbW9uc3RyYXRpbmcgdGhlIHVzZSBvZiB2YXJpb3VzIGZlYXR1cmVzCittaXNjLworICAgcHJvdG90eXBlcywgcmFuZG9tIGJpdHMsIC4uLgorCmRpZmYgLS1naXQgYS90ZXN0cy9iZW5jaG1hcmtzL01ha2VmaWxlLmFtIGIvdGVzdHMvYmVuY2htYXJrcy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDYxNzFjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvYmVuY2htYXJrcy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDE3IEBACitub2luc3RfUFJPR1JBTVMgPSBcCisgICAgICAgIGNhcHMgXAorICAgICAgICBjYXBzbmVnbyBcCisgICAgICAgIGNvbXBsZXhpdHkgXAorICAgICAgICBjb250cm9sbGVyIFwKKyAgICAgICAgaW5pdCBcCisgICAgICAgIG1hc3MtZWxlbWVudHMgXAorICAgICAgICBnc3Rwb2xsc3RyZXNzIFwKKyAgICAgICAgZ3N0Y2xvY2tzdHJlc3MJXAorCWdzdGJ1ZmZlcnN0cmVzcworCitMREFERCA9ICQoR1NUX09CSl9MSUJTKQorQU1fQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykKKworY29udHJvbGxlcl9DRkxBR1MgID0gJChHU1RfT0JKX0NGTEFHUykgLUkkKHRvcF9idWlsZGRpcikvbGlicworY29udHJvbGxlcl9MREFERCA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jb250cm9sbGVyL2xpYmdzdGNvbnRyb2xsZXItQEdTVF9NQUpPUk1JTk9SQC5sYSAkKExEQUREKQorCmRpZmYgLS1naXQgYS90ZXN0cy9iZW5jaG1hcmtzL01ha2VmaWxlLmluIGIvdGVzdHMvYmVuY2htYXJrcy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmU2ZjFiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvYmVuY2htYXJrcy9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDc2MiBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4xIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorbm9pbnN0X1BST0dSQU1TID0gY2FwcyQoRVhFRVhUKSBjYXBzbmVnbyQoRVhFRVhUKSBjb21wbGV4aXR5JChFWEVFWFQpIFwKKwljb250cm9sbGVyJChFWEVFWFQpIGluaXQkKEVYRUVYVCkgbWFzcy1lbGVtZW50cyQoRVhFRVhUKSBcCisJZ3N0cG9sbHN0cmVzcyQoRVhFRVhUKSBnc3RjbG9ja3N0cmVzcyQoRVhFRVhUKSBcCisJZ3N0YnVmZmVyc3RyZXNzJChFWEVFWFQpCitzdWJkaXIgPSB0ZXN0cy9iZW5jaG1hcmtzCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1weXRob24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXNjcnViLWluY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorUFJPR1JBTVMgPSAkKG5vaW5zdF9QUk9HUkFNUykKK2NhcHNfU09VUkNFUyA9IGNhcHMuYworY2Fwc19PQkpFQ1RTID0gY2Fwcy4kKE9CSkVYVCkKK2NhcHNfTERBREQgPSAkKExEQUREKQorYW1fX0RFUEVOREVOQ0lFU18xID0KK2NhcHNfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCitBTV9WX2x0ID0gJChhbV9fdl9sdF8kKFYpKQorYW1fX3ZfbHRfID0gJChhbV9fdl9sdF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X2x0XzAgPSAtLXNpbGVudAorY2Fwc25lZ29fU09VUkNFUyA9IGNhcHNuZWdvLmMKK2NhcHNuZWdvX09CSkVDVFMgPSBjYXBzbmVnby4kKE9CSkVYVCkKK2NhcHNuZWdvX0xEQUREID0gJChMREFERCkKK2NhcHNuZWdvX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQorY29tcGxleGl0eV9TT1VSQ0VTID0gY29tcGxleGl0eS5jCitjb21wbGV4aXR5X09CSkVDVFMgPSBjb21wbGV4aXR5LiQoT0JKRVhUKQorY29tcGxleGl0eV9MREFERCA9ICQoTERBREQpCitjb21wbGV4aXR5X0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQorY29udHJvbGxlcl9TT1VSQ0VTID0gY29udHJvbGxlci5jCitjb250cm9sbGVyX09CSkVDVFMgPSBjb250cm9sbGVyLWNvbnRyb2xsZXIuJChPQkpFWFQpCithbV9fREVQRU5ERU5DSUVTXzIgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2NvbnRyb2xsZXJfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NvbnRyb2xsZXIvbGliZ3N0Y29udHJvbGxlci1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMikKK2NvbnRyb2xsZXJfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoY29udHJvbGxlcl9DRkxBR1MpIFwKKwkkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitnc3RidWZmZXJzdHJlc3NfU09VUkNFUyA9IGdzdGJ1ZmZlcnN0cmVzcy5jCitnc3RidWZmZXJzdHJlc3NfT0JKRUNUUyA9IGdzdGJ1ZmZlcnN0cmVzcy4kKE9CSkVYVCkKK2dzdGJ1ZmZlcnN0cmVzc19MREFERCA9ICQoTERBREQpCitnc3RidWZmZXJzdHJlc3NfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCitnc3RjbG9ja3N0cmVzc19TT1VSQ0VTID0gZ3N0Y2xvY2tzdHJlc3MuYworZ3N0Y2xvY2tzdHJlc3NfT0JKRUNUUyA9IGdzdGNsb2Nrc3RyZXNzLiQoT0JKRVhUKQorZ3N0Y2xvY2tzdHJlc3NfTERBREQgPSAkKExEQUREKQorZ3N0Y2xvY2tzdHJlc3NfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCitnc3Rwb2xsc3RyZXNzX1NPVVJDRVMgPSBnc3Rwb2xsc3RyZXNzLmMKK2dzdHBvbGxzdHJlc3NfT0JKRUNUUyA9IGdzdHBvbGxzdHJlc3MuJChPQkpFWFQpCitnc3Rwb2xsc3RyZXNzX0xEQUREID0gJChMREFERCkKK2dzdHBvbGxzdHJlc3NfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCitpbml0X1NPVVJDRVMgPSBpbml0LmMKK2luaXRfT0JKRUNUUyA9IGluaXQuJChPQkpFWFQpCitpbml0X0xEQUREID0gJChMREFERCkKK2luaXRfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCittYXNzX2VsZW1lbnRzX1NPVVJDRVMgPSBtYXNzLWVsZW1lbnRzLmMKK21hc3NfZWxlbWVudHNfT0JKRUNUUyA9IG1hc3MtZWxlbWVudHMuJChPQkpFWFQpCittYXNzX2VsZW1lbnRzX0xEQUREID0gJChMREFERCkKK21hc3NfZWxlbWVudHNfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCisJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfJChWKSkKK2FtX192X0NDXyA9ICQoYW1fX3ZfQ0NfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgIiAkQDsKK0FNX1ZfYXQgPSAkKGFtX192X2F0XyQoVikpCithbV9fdl9hdF8gPSAkKGFtX192X2F0XyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfYXRfMCA9IEAKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEXyQoVikpCithbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICIgJEA7CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOXyQoVikpCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitTT1VSQ0VTID0gY2Fwcy5jIGNhcHNuZWdvLmMgY29tcGxleGl0eS5jIGNvbnRyb2xsZXIuYyBcCisJZ3N0YnVmZmVyc3RyZXNzLmMgZ3N0Y2xvY2tzdHJlc3MuYyBnc3Rwb2xsc3RyZXNzLmMgaW5pdC5jIFwKKwltYXNzLWVsZW1lbnRzLmMKK0RJU1RfU09VUkNFUyA9IGNhcHMuYyBjYXBzbmVnby5jIGNvbXBsZXhpdHkuYyBjb250cm9sbGVyLmMgXAorCWdzdGJ1ZmZlcnN0cmVzcy5jIGdzdGNsb2Nrc3RyZXNzLmMgZ3N0cG9sbHN0cmVzcy5jIGluaXQuYyBcCisJbWFzcy1lbGVtZW50cy5jCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKK0NDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKK0NIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKK0NIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKK0NIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUiA9IEBEQVRBRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAorRExMVE9PTCA9IEBETExUT09MQAorRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKK0VSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACitFWEVFWFQgPSBARVhFRVhUQAorRkZMQUdTID0gQEZGTEFHU0AKK0ZHUkVQID0gQEZHUkVQQAorRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKK0dDT1YgPSBAR0NPVkAKK0dDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAorR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACitHTElCX0xJQlMgPSBAR0xJQl9MSUJTQAorR0xJQl9PTkxZX0NGTEFHUyA9IEBHTElCX09OTFlfQ0ZMQUdTQAorR0xJQl9PTkxZX0xJQlMgPSBAR0xJQl9PTkxZX0xJQlNACitHTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKK0dMSUJfUkVRID0gQEdMSUJfUkVRQAorR01QX0xJQlMgPSBAR01QX0xJQlNACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dSRVAgPSBAR1JFUEAKK0dTTF9MSUJTID0gQEdTTF9MSUJTQAorR1NUX0FHRSA9IEBHU1RfQUdFQAorR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACitHU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACitHU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAorR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKK0dTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAorR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORUAKK0dTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKK0dTVF9ESVNBQkxFX05FVF9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfTkVUX0RFRklORUAKK0dTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACitHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAorR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAorR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKK0dTVF9ESVNBQkxFX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkVACitHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACitHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACitHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORSA9IEBHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORUAKK0dTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAorR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACitHU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAorR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACitHU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKK0dTVF9NQUpPUk1JTk9SID0gQEdTVF9NQUpPUk1JTk9SQAorR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACitHU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACitHU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAorR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACitHU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACitHU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACitHU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAorR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAorR1NUX1BLR19ERVBTID0gQEdTVF9QS0dfREVQU0AKK0dTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACitHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FQAorR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORUAKK0dTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKK0dTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACitHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkUgPSBAR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FQAorR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKK0hBVkVfRE9DQk9PSzJIVE1MID0gQEhBVkVfRE9DQk9PSzJIVE1MQAorSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKK0hBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKK0hBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKK0hBVkVfRklHMkRFViA9IEBIQVZFX0ZJRzJERVZACitIQVZFX0dNUCA9IEBIQVZFX0dNUEAKK0hBVkVfR1NMID0gQEhBVkVfR1NMQAorSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKK0hBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKK0hBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACitIQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKK0hBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACitIT1NUX0NQVSA9IEBIT1NUX0NQVUAKK0hUTUxfRElSID0gQEhUTUxfRElSQAorSU5FVF9BVE9OX0xJQlMgPSBASU5FVF9BVE9OX0xJQlNACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCRElSID0gQExJQkRJUkAKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCTSA9IEBMSUJNQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTE9DQUxFRElSID0gQExPQ0FMRURJUkAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACitQQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAorUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKK1BBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAorUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BFUkxfUEFUSCA9IEBQRVJMX1BBVEhACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQTFVHSU5ESVIgPSBAUExVR0lORElSQAorUE9TVUIgPSBAUE9TVUJACitQUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAorVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAorVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACitXSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACitYTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKK1hTTFRQUk9DID0gQFhTTFRQUk9DQAorWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3BsdWdpbmRpciA9IEBwbHVnaW5kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorTERBREQgPSAkKEdTVF9PQkpfTElCUykKK0FNX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCitjb250cm9sbGVyX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpIC1JJCh0b3BfYnVpbGRkaXIpL2xpYnMKK2NvbnRyb2xsZXJfTERBREQgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY29udHJvbGxlci9saWJnc3Rjb250cm9sbGVyLUBHU1RfTUFKT1JNSU5PUkAubGEgJChMREFERCkKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IHRlc3RzL2JlbmNobWFya3MvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbnUgdGVzdHMvYmVuY2htYXJrcy9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworY2xlYW4tbm9pbnN0UFJPR1JBTVM6CisJQGxpc3Q9JyQobm9pbnN0X1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKKwl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAorCWxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdAorY2FwcyQoRVhFRVhUKTogJChjYXBzX09CSkVDVFMpICQoY2Fwc19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBjYXBzJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKGNhcHNfT0JKRUNUUykgJChjYXBzX0xEQUREKSAkKExJQlMpCitjYXBzbmVnbyQoRVhFRVhUKTogJChjYXBzbmVnb19PQkpFQ1RTKSAkKGNhcHNuZWdvX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGNhcHNuZWdvJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKGNhcHNuZWdvX09CSkVDVFMpICQoY2Fwc25lZ29fTERBREQpICQoTElCUykKK2NvbXBsZXhpdHkkKEVYRUVYVCk6ICQoY29tcGxleGl0eV9PQkpFQ1RTKSAkKGNvbXBsZXhpdHlfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgY29tcGxleGl0eSQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChjb21wbGV4aXR5X09CSkVDVFMpICQoY29tcGxleGl0eV9MREFERCkgJChMSUJTKQorY29udHJvbGxlciQoRVhFRVhUKTogJChjb250cm9sbGVyX09CSkVDVFMpICQoY29udHJvbGxlcl9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBjb250cm9sbGVyJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChjb250cm9sbGVyX0xJTkspICQoY29udHJvbGxlcl9PQkpFQ1RTKSAkKGNvbnRyb2xsZXJfTERBREQpICQoTElCUykKK2dzdGJ1ZmZlcnN0cmVzcyQoRVhFRVhUKTogJChnc3RidWZmZXJzdHJlc3NfT0JKRUNUUykgJChnc3RidWZmZXJzdHJlc3NfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgZ3N0YnVmZmVyc3RyZXNzJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdGJ1ZmZlcnN0cmVzc19PQkpFQ1RTKSAkKGdzdGJ1ZmZlcnN0cmVzc19MREFERCkgJChMSUJTKQorZ3N0Y2xvY2tzdHJlc3MkKEVYRUVYVCk6ICQoZ3N0Y2xvY2tzdHJlc3NfT0JKRUNUUykgJChnc3RjbG9ja3N0cmVzc19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBnc3RjbG9ja3N0cmVzcyQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RjbG9ja3N0cmVzc19PQkpFQ1RTKSAkKGdzdGNsb2Nrc3RyZXNzX0xEQUREKSAkKExJQlMpCitnc3Rwb2xsc3RyZXNzJChFWEVFWFQpOiAkKGdzdHBvbGxzdHJlc3NfT0JKRUNUUykgJChnc3Rwb2xsc3RyZXNzX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGdzdHBvbGxzdHJlc3MkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0cG9sbHN0cmVzc19PQkpFQ1RTKSAkKGdzdHBvbGxzdHJlc3NfTERBREQpICQoTElCUykKK2luaXQkKEVYRUVYVCk6ICQoaW5pdF9PQkpFQ1RTKSAkKGluaXRfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgaW5pdCQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChpbml0X09CSkVDVFMpICQoaW5pdF9MREFERCkgJChMSUJTKQorbWFzcy1lbGVtZW50cyQoRVhFRVhUKTogJChtYXNzX2VsZW1lbnRzX09CSkVDVFMpICQobWFzc19lbGVtZW50c19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBtYXNzLWVsZW1lbnRzJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKG1hc3NfZWxlbWVudHNfT0JKRUNUUykgJChtYXNzX2VsZW1lbnRzX0xEQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jYXBzLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jYXBzbmVnby5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY29tcGxleGl0eS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY29udHJvbGxlci1jb250cm9sbGVyLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nc3RidWZmZXJzdHJlc3MuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dzdGNsb2Nrc3RyZXNzLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nc3Rwb2xsc3RyZXNzLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9pbml0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tYXNzLWVsZW1lbnRzLlBvQGFtX19xdW90ZUAKKworLmMubzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgJDwKKworLmMub2JqOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisKK2NvbnRyb2xsZXItY29udHJvbGxlci5vOiBjb250cm9sbGVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjb250cm9sbGVyX0NGTEFHUykgJChDRkxBR1MpIC1NVCBjb250cm9sbGVyLWNvbnRyb2xsZXIubyAtTUQgLU1QIC1NRiAkKERFUERJUikvY29udHJvbGxlci1jb250cm9sbGVyLlRwbyAtYyAtbyBjb250cm9sbGVyLWNvbnRyb2xsZXIubyBgdGVzdCAtZiAnY29udHJvbGxlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bjb250cm9sbGVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2NvbnRyb2xsZXItY29udHJvbGxlci5UcG8gJChERVBESVIpL2NvbnRyb2xsZXItY29udHJvbGxlci5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2NvbnRyb2xsZXIuYycgb2JqZWN0PSdjb250cm9sbGVyLWNvbnRyb2xsZXIubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoY29udHJvbGxlcl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBjb250cm9sbGVyLWNvbnRyb2xsZXIubyBgdGVzdCAtZiAnY29udHJvbGxlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bjb250cm9sbGVyLmMKKworY29udHJvbGxlci1jb250cm9sbGVyLm9iajogY29udHJvbGxlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoY29udHJvbGxlcl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgY29udHJvbGxlci1jb250cm9sbGVyLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvY29udHJvbGxlci1jb250cm9sbGVyLlRwbyAtYyAtbyBjb250cm9sbGVyLWNvbnRyb2xsZXIub2JqIGBpZiB0ZXN0IC1mICdjb250cm9sbGVyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnY29udHJvbGxlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9jb250cm9sbGVyLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2NvbnRyb2xsZXItY29udHJvbGxlci5UcG8gJChERVBESVIpL2NvbnRyb2xsZXItY29udHJvbGxlci5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2NvbnRyb2xsZXIuYycgb2JqZWN0PSdjb250cm9sbGVyLWNvbnRyb2xsZXIub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjb250cm9sbGVyX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGNvbnRyb2xsZXItY29udHJvbGxlci5vYmogYGlmIHRlc3QgLWYgJ2NvbnRyb2xsZXIuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdjb250cm9sbGVyLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2NvbnRyb2xsZXIuYyc7IGZpYAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIGN0YWdzIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKKwlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3Rlc3RzL2JlbmNobWFya3MvY2Fwcy5jIGIvdGVzdHMvYmVuY2htYXJrcy9jYXBzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwZTQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2JlbmNobWFya3MvY2Fwcy5jCkBAIC0wLDAgKzEsNzAgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKyAqCisgKiBjYXBzLmM6IGJlbmNobWFyayBmb3IgY2FwcyBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKKworI2RlZmluZSBOVU1fQ0FQUyAxMDAwMAorCisKKyNkZWZpbmUgR1NUX0FVRElPX0lOVF9QQURfVEVNUExBVEVfQ0FQUyBcCisgICJhdWRpby94LXJhdy1pbnQsICIgXAorICAicmF0ZSA9IChpbnQpIFsgMSwgTUFYIF0sICIgXAorICAiY2hhbm5lbHMgPSAoaW50KSBbIDEsIE1BWCBdLCAiIFwKKyAgImVuZGlhbm5lc3MgPSAoaW50KSB7IExJVFRMRV9FTkRJQU4sIEJJR19FTkRJQU4gfSwgIiBcCisgICJ3aWR0aCA9IChpbnQpIHsgOCwgMTYsIDI0LCAzMiB9LCAiIFwKKyAgImRlcHRoID0gKGludCkgWyAxLCAzMiBdLCAiIFwKKyAgInNpZ25lZCA9IChib29sZWFuKSB7IHRydWUsIGZhbHNlIH0iCisKKworZ2ludAorbWFpbiAoZ2ludCBhcmdjLCBnY2hhciAqIGFyZ3ZbXSkKK3sKKyAgR3N0Q2FwcyAqKmNhcHNlczsKKyAgR3N0Q2FwcyAqcHJvdG9jYXBzOworICBHc3RDbG9ja1RpbWUgc3RhcnQsIGVuZDsKKyAgZ2ludCBpOworCisgIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOworCisgIHByb3RvY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChHU1RfQVVESU9fSU5UX1BBRF9URU1QTEFURV9DQVBTKTsKKworICBzdGFydCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7CisgIGNhcHNlcyA9IGdfbmV3IChHc3RDYXBzICosIE5VTV9DQVBTKTsKKyAgZm9yIChpID0gMDsgaSA8IE5VTV9DQVBTOyBpKyspCisgICAgY2Fwc2VzW2ldID0gZ3N0X2NhcHNfY29weSAocHJvdG9jYXBzKTsKKyAgZW5kID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKKyAgZ19wcmludCAoIiUiIEdTVF9USU1FX0ZPUk1BVCAiIC0gY3JlYXRpbmcgJWQgY2Fwc1xuIiwKKyAgICAgIEdTVF9USU1FX0FSR1MgKGVuZCAtIHN0YXJ0KSwgaSk7CisKKyAgc3RhcnQgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOworICBmb3IgKGkgPSAwOyBpIDwgTlVNX0NBUFM7IGkrKykKKyAgICBnc3RfY2Fwc191bnJlZiAoY2Fwc2VzW2ldKTsKKyAgZW5kID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKKyAgZ19wcmludCAoIiUiIEdTVF9USU1FX0ZPUk1BVCAiIC0gZGVzdHJveWluZyAlZCBjYXBzXG4iLAorICAgICAgR1NUX1RJTUVfQVJHUyAoZW5kIC0gc3RhcnQpLCBpKTsKKworICBnX2ZyZWUgKGNhcHNlcyk7CisgIGdzdF9jYXBzX3VucmVmIChwcm90b2NhcHMpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvYmVuY2htYXJrcy9jYXBzbmVnby5jIGIvdGVzdHMvYmVuY2htYXJrcy9jYXBzbmVnby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMDVkMTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9iZW5jaG1hcmtzL2NhcHNuZWdvLmMKQEAgLTAsMCArMSwyNzkgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDEwIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKyAqCisgKiBjYXBzbmVnby5jOiBiZW5jaG1hcmsgZm9yIGNhcHMgbmVnb3RpYXRpb24KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKiB0aGlzIGJlbmNobWFyayByZWN1cnNpdmVseSBidWlsZHMgYSBwaXBlbGluZSBhbmQgbWVhc3VyZXMgdGhlIHRpbWUgdG8gZ28KKyAqIGZyb20gcmVhZHkgdG8gcGF1c2VkLgorICogVGhlIGdyYXBoIHNpemUgYW5kIHR5cGUgY2FuIGJlIGNvbnRyb2xsZWQgd2l0aCBhIGZldyBjb21tYW5kbGluZSBhcmdzOgorICogIC1kIGRlcHRoOiBpcyB0aGUgZGVwdGggb2YgdGhlIHRyZWUKKyAqICAtYyBjaGlsZHJlbjogaXMgdGhlIG51bWJlciBvZiBicmFuY2hlcyBvbiBlYWNoIGxldmVsCisgKiAgLWYgPGZsYXZvdXI+OiBjYW4gYmUgYT11ZGlvL3Y9aWRlbyBhbmQgaXMgY29udHRyb2xsaW5nIHRoZSBraW5kIG9mIGVsZW1lbnRzCisgKiAgICAgICAgICAgICAgICB0aGF0IGFyZSB1c2VkLgorICovCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2VudW0KK3sKKyAgRkxBVk9VUl9BVURJTyA9IDAsCisgIEZMQVZPVVJfVklERU8sCisgIE5VTV9GTEFWT1VSUworfTsKKworZW51bQoreworICBFTEVNX1NSQyA9IDAsCisgIEVMRU1fTUlYLAorICBFTEVNX1BST0MsCisgIEVMRU1fQ09OViwKKyAgTlVNX0VMRU0KK307CisKK3N0YXRpYyBjb25zdCBnY2hhciAqZmFjdG9yaWVzW05VTV9GTEFWT1VSU11bTlVNX0VMRU1dID0geworICB7ImF1ZGlvdGVzdHNyYyIsICJhZGRlciIsICJ2b2x1bWUiLCAiYXVkaW9jb252ZXJ0In0sCisgIHsidmlkZW90ZXN0c3JjIiwgInZpZGVvbWl4ZXIiLCAidmlkZW9zY2FsZSIsICJmZm1wZWdjb2xvcnNwYWNlIn0KK307CisKK3N0YXRpYyBjb25zdCBnY2hhciAqc2lua19wYWRzW05VTV9GTEFWT1VSU11bTlVNX0VMRU1dID0geworICB7TlVMTCwgInNpbmslZCIsIE5VTEwsIE5VTEx9LAorICB7TlVMTCwgInNpbmtfJWQiLCBOVUxMLCBOVUxMfQorfTsKKworCitzdGF0aWMgZ2Jvb2xlYW4KK2NyZWF0ZV9ub2RlIChHc3RCaW4gKiBiaW4sIEdzdEVsZW1lbnQgKiBzaW5rLCBjb25zdCBnY2hhciAqIHNpbmtwYWRuYW1lLAorICAgIEdzdEVsZW1lbnQgKiogbmV3X3NpbmssIGdpbnQgY2hpbGRyZW4sIGdpbnQgZmxhdm91cikKK3sKKyAgR3N0RWxlbWVudCAqbWl4LCAqcHJvYywgKmNvbnY7CisKKyAgaWYgKGNoaWxkcmVuID49IDEpIHsKKyAgICBtaXggPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKGZhY3Rvcmllc1tmbGF2b3VyXVtFTEVNX01JWF0sIE5VTEwpOworICAgIGlmICghbWl4KSB7CisgICAgICBHU1RfV0FSTklORyAoIm5lZWQgZWxlbWVudCAnJXMnIiwgZmFjdG9yaWVzW2ZsYXZvdXJdW0VMRU1fTUlYXSk7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICB9IGVsc2UgeworICAgIG1peCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImlkZW50aXR5IiwgTlVMTCk7CisgIH0KKyAgcHJvYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoZmFjdG9yaWVzW2ZsYXZvdXJdW0VMRU1fUFJPQ10sIE5VTEwpOworICBpZiAoIXByb2MpIHsKKyAgICBHU1RfV0FSTklORyAoIm5lZWQgZWxlbWVudCAnJXMnIiwgZmFjdG9yaWVzW2ZsYXZvdXJdW0VMRU1fUFJPQ10pOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorICBjb252ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlIChmYWN0b3JpZXNbZmxhdm91cl1bRUxFTV9DT05WXSwgTlVMTCk7CisgIGlmICghY29udikgeworICAgIEdTVF9XQVJOSU5HICgibmVlZCBlbGVtZW50ICclcyciLCBmYWN0b3JpZXNbZmxhdm91cl1bRUxFTV9DT05WXSk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisgIGdzdF9iaW5fYWRkX21hbnkgKGJpbiwgbWl4LCBwcm9jLCBjb252LCBOVUxMKTsKKyAgaWYgKCFnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbCAobWl4LCAic3JjIiwgcHJvYywgInNpbmsiLAorICAgICAgICAgIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKQorICAgICAgfHwgIWdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsIChwcm9jLCAic3JjIiwgY29udiwgInNpbmsiLAorICAgICAgICAgIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKQorICAgICAgfHwgIWdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsIChjb252LCAic3JjIiwgc2luaywgc2lua3BhZG5hbWUsCisgICAgICAgICAgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpKSB7CisgICAgR1NUX1dBUk5JTkcgKCJjYW4ndCBsaW5rIGVsZW1lbnRzIik7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisgICpuZXdfc2luayA9IG1peDsKKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorY3JlYXRlX25vZGVzIChHc3RCaW4gKiBiaW4sIEdzdEVsZW1lbnQgKiBzaW5rLCBnaW50IGRlcHRoLCBnaW50IGNoaWxkcmVuLAorICAgIGdpbnQgZmxhdm91cikKK3sKKyAgR3N0RWxlbWVudCAqbmV3X3NpbmssICpzcmM7CisgIGdpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgY2hpbGRyZW47IGkrKykgeworICAgIGlmIChkZXB0aCA+IDApIHsKKyAgICAgIGlmICghY3JlYXRlX25vZGUgKGJpbiwgc2luaywgc2lua19wYWRzW2ZsYXZvdXJdW0VMRU1fTUlYXSwgJm5ld19zaW5rLAorICAgICAgICAgICAgICBjaGlsZHJlbiwgZmxhdm91cikpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgfQorICAgICAgaWYgKCFjcmVhdGVfbm9kZXMgKGJpbiwgbmV3X3NpbmssIGRlcHRoIC0gMSwgY2hpbGRyZW4sIGZsYXZvdXIpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlIChmYWN0b3JpZXNbZmxhdm91cl1bRUxFTV9TUkNdLCBOVUxMKTsKKyAgICAgIGlmICghc3JjKSB7CisgICAgICAgIEdTVF9XQVJOSU5HICgibmVlZCBlbGVtZW50ICclcyciLCBmYWN0b3JpZXNbZmxhdm91cl1bRUxFTV9TUkNdKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgfQorICAgICAgZ3N0X2Jpbl9hZGQgKGJpbiwgc3JjKTsKKyAgICAgIGlmICghZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwgKHNyYywgInNyYyIsIHNpbmssCisgICAgICAgICAgICAgIHNpbmtfcGFkc1tmbGF2b3VyXVtFTEVNX01JWF0sIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKSkgeworICAgICAgICBHU1RfV0FSTklORyAoImNhbid0IGxpbmsgZWxlbWVudHMiKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQKK2V2ZW50X2xvb3AgKEdzdEVsZW1lbnQgKiBiaW4sIEdzdENsb2NrVGltZSBzdGFydCkKK3sKKyAgR3N0QnVzICpidXM7CisgIEdzdE1lc3NhZ2UgKm1zZyA9IE5VTEw7CisgIGdib29sZWFuIHJ1bm5pbmcgPSBUUlVFOworCisgIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKGJpbik7CisKKyAgd2hpbGUgKHJ1bm5pbmcpIHsKKyAgICBtc2cgPSBnc3RfYnVzX3BvbGwgKGJ1cywKKyAgICAgICAgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCB8IEdTVF9NRVNTQUdFX0VSUk9SIHwgR1NUX01FU1NBR0VfV0FSTklORywKKyAgICAgICAgLTEpOworCisgICAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpKSB7CisgICAgICBjYXNlIEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQ6CisgICAgICAgIGlmIChHU1RfTUVTU0FHRV9TUkMgKG1zZykgPT0gKEdzdE9iamVjdCAqKSBiaW4pIHsKKyAgICAgICAgICBHc3RTdGF0ZSBvbGRfc3RhdGUsIG5ld19zdGF0ZTsKKyAgICAgICAgICBHc3RDbG9ja1RpbWUgZW5kOworCisgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZCAobXNnLCAmb2xkX3N0YXRlLCAmbmV3X3N0YXRlLCBOVUxMKTsKKworICAgICAgICAgIGVuZCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7CisgICAgICAgICAgZ19wcmludCAoIiUiIEdTVF9USU1FX0ZPUk1BVCAiIHN0YXRlIGNoYW5nZSBvbiB0aGUgYmluOiAlcyAtPiAlc1xuIiwKKyAgICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAoZW5kIC0gc3RhcnQpLAorICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAob2xkX3N0YXRlKSwKKyAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKG5ld19zdGF0ZSkpOworCisgICAgICAgICAgaWYgKG9sZF9zdGF0ZSA9PSBHU1RfU1RBVEVfUkVBRFkgJiYgbmV3X3N0YXRlID09IEdTVF9TVEFURV9QQVVTRUQpIHsKKyAgICAgICAgICAgIHJ1bm5pbmcgPSBGQUxTRTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9NRVNTQUdFX1dBUk5JTkc6eworICAgICAgICBHRXJyb3IgKmVyciA9IE5VTEw7CisgICAgICAgIGdjaGFyICpkYmcgPSBOVUxMOworCisgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmcgKG1zZywgJmVyciwgJmRiZyk7CisgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoR1NUX01FU1NBR0VfU1JDIChtc2cpLCAiJXMgKCVzKSIsIGVyci0+bWVzc2FnZSwKKyAgICAgICAgICAgIChkYmcgPyBkYmcgOiAibm8gZGV0YWlscyIpKTsKKyAgICAgICAgZ19lcnJvcl9mcmVlIChlcnIpOworICAgICAgICBnX2ZyZWUgKGRiZyk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjp7CisgICAgICAgIEdFcnJvciAqZXJyID0gTlVMTDsKKyAgICAgICAgZ2NoYXIgKmRiZyA9IE5VTEw7CisKKyAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1zZywgJmVyciwgJmRiZyk7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKEdTVF9NRVNTQUdFX1NSQyAobXNnKSwgIiVzICglcykiLCBlcnItPm1lc3NhZ2UsCisgICAgICAgICAgICAoZGJnID8gZGJnIDogIm5vIGRldGFpbHMiKSk7CisgICAgICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKKyAgICAgICAgZ19mcmVlIChkYmcpOworICAgICAgICBydW5uaW5nID0gRkFMU0U7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOworICB9CisgIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Cit9CisKKworZ2ludAorbWFpbiAoZ2ludCBhcmdjLCBnY2hhciAqIGFyZ3ZbXSkKK3sKKyAgR3N0QmluICpiaW47CisgIEdzdENsb2NrVGltZSBzdGFydCwgZW5kOworICBHc3RFbGVtZW50ICpzaW5rLCAqbmV3X3Npbms7CisKKyAgLyogZGVmYXVsdCBwYXJhbWV0ZXJzICovCisgIGdpbnQgZGVwdGggPSA0OworICBnaW50IGNoaWxkcmVuID0gMzsKKyAgZ2ludCBmbGF2b3VyID0gRkxBVk9VUl9BVURJTzsKKyAgY29uc3QgZ2NoYXIgKmZsYXZvdXJfc3RyID0gImF1ZGlvIjsKKworICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKKworICAvKiBjaGVjayBjb21tYW5kIGxpbmUgb3B0aW9ucyAqLworICBpZiAoYXJnYykgeworICAgIGdpbnQgYXJnOworICAgIGZvciAoYXJnID0gMDsgYXJnIDwgYXJnYzsgYXJnKyspIHsKKyAgICAgIGlmICghc3RyY21wIChhcmd2W2FyZ10sICItZCIpKSB7CisgICAgICAgIGFyZysrOworICAgICAgICBpZiAoYXJnIDwgYXJnYykKKyAgICAgICAgICBkZXB0aCA9IGF0b2kgKGFyZ3ZbYXJnXSk7CisgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAgKGFyZ3ZbYXJnXSwgIi1jIikpIHsKKyAgICAgICAgYXJnKys7CisgICAgICAgIGlmIChhcmcgPCBhcmdjKQorICAgICAgICAgIGNoaWxkcmVuID0gYXRvaSAoYXJndlthcmddKTsKKyAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcCAoYXJndlthcmddLCAiLWYiKSkgeworICAgICAgICBhcmcrKzsKKyAgICAgICAgaWYgKGFyZyA8IGFyZ2MpIHsKKyAgICAgICAgICBmbGF2b3VyX3N0ciA9IGFyZ3ZbYXJnXTsKKyAgICAgICAgICBzd2l0Y2ggKCpmbGF2b3VyX3N0cikgeworICAgICAgICAgICAgY2FzZSAnYSc6CisgICAgICAgICAgICAgIGZsYXZvdXIgPSBGTEFWT1VSX0FVRElPOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3YnOgorICAgICAgICAgICAgICBmbGF2b3VyID0gRkxBVk9VUl9WSURFTzsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICAvKiBidWlsZCBwaXBlbGluZSAqLworICBnX3ByaW50ICgiYnVpbGRpbmcgJXMgcGlwZWxpbmUgd2l0aCBkZXB0aCA9ICVkIGFuZCBjaGlsZHJlbiA9ICVkXG4iLAorICAgICAgZmxhdm91cl9zdHIsIGRlcHRoLCBjaGlsZHJlbik7CisgIHN0YXJ0ID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKKyAgYmluID0gR1NUX0JJTiAoZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIikpOworICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKKyAgZ3N0X2Jpbl9hZGQgKGJpbiwgc2luayk7CisgIGlmICghY3JlYXRlX25vZGUgKGJpbiwgc2luaywgInNpbmsiLCAmbmV3X3NpbmssIGNoaWxkcmVuLCBmbGF2b3VyKSkgeworICAgIGdvdG8gRXJyb3I7CisgIH0KKyAgaWYgKCFjcmVhdGVfbm9kZXMgKGJpbiwgbmV3X3NpbmssIGRlcHRoLCBjaGlsZHJlbiwgZmxhdm91cikpIHsKKyAgICBnb3RvIEVycm9yOworICB9CisgIGVuZCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7CisgIC8qIG51bS10aHJlYWRzID0gbnVtLXNvdXJjZXMgPSBwb3cgKGNoaWxkcmVuLCBkZXB0aCkgKi8KKyAgZ19wcmludCAoIiUiIEdTVF9USU1FX0ZPUk1BVCAiIGJ1aWx0IHBpcGVsaW5lIHdpdGggJWQgZWxlbWVudHNcbiIsCisgICAgICBHU1RfVElNRV9BUkdTIChlbmQgLSBzdGFydCksIEdTVF9CSU5fTlVNQ0hJTERSRU4gKGJpbikpOworCisgIC8qIG1lYXN1cmUgKi8KKyAgZ19wcmludCAoInN0YXJ0aW5nIHBpcGVsaW5lXG4iKTsKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAoYmluKSwgR1NUX1NUQVRFX1JFQURZKTsKKyAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRSAoYmluLCBHU1RfREVCVUdfR1JBUEhfU0hPV19NRURJQV9UWVBFLCAiY2Fwc25lZ28iKTsKKyAgc3RhcnQgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pLCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgZXZlbnRfbG9vcCAoR1NUX0VMRU1FTlQgKGJpbiksIHN0YXJ0KTsKKyAgZW5kID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKKyAgZ19wcmludCAoIiUiIEdTVF9USU1FX0ZPUk1BVCAiIHJlYWNoZWQgcGF1c2VkXG4iLAorICAgICAgR1NUX1RJTUVfQVJHUyAoZW5kIC0gc3RhcnQpKTsKKworICAvKiBjbGVhbiB1cCAqLworRXJyb3I6CisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKGJpbiksIEdTVF9TVEFURV9OVUxMKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoYmluKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9iZW5jaG1hcmtzL2NvbXBsZXhpdHkuYyBiL3Rlc3RzL2JlbmNobWFya3MvY29tcGxleGl0eS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1OTlhMDkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9iZW5jaG1hcmtzL2NvbXBsZXhpdHkuYwpAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBCZW5qYW1pbiBPdHRlIDxvdHRlQGdub21lLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworI2RlZmluZSBCVUZGRVJfQ09VTlQgKDEwMDApCisKK2dpbnQKK21haW4gKGdpbnQgYXJnYywgZ2NoYXIgKiBhcmd2W10pCit7CisgIEdzdE1lc3NhZ2UgKm1zZzsKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpzcmMsICplOworICBHU0xpc3QgKnNhdmVkX3NyY19saXN0LCAqc3JjX2xpc3QsICpuZXdfc3JjX2xpc3Q7CisgIGd1aW50IGNvbXBsZXhpdHlfb3JkZXIsIG5fZWxlbWVudHMsIGksIGosIG1heF90aGlzX2xldmVsOworICBHc3RDbG9ja1RpbWUgc3RhcnQsIGVuZDsKKworICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKKworICBpZiAoYXJnYyAhPSAzKSB7CisgICAgZ19wcmludCAoInVzYWdlOiAlcyBDT01QTEVYSVRZX09SREVSIE5fRUxFTUVOVFNcbiIsIGFyZ3ZbMF0pOworICAgIHJldHVybiAxOworICB9CisKKyAgY29tcGxleGl0eV9vcmRlciA9IGF0b2kgKGFyZ3ZbMV0pOworICBuX2VsZW1lbnRzID0gYXRvaSAoYXJndlsyXSk7CisKKyAgc3RhcnQgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOworCisgIHBpcGVsaW5lID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicGlwZWxpbmUiLCBOVUxMKTsKKyAgZ19hc3NlcnQgKHBpcGVsaW5lKTsKKworICBlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOworICBnX29iamVjdF9zZXQgKGUsICJudW0tYnVmZmVycyIsIEJVRkZFUl9DT1VOVCwgTlVMTCk7CisgIGdfb2JqZWN0X3NldCAoZSwgInNpbGVudCIsIFRSVUUsIE5VTEwpOworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBlKTsKKyAgc3JjX2xpc3QgPSBzYXZlZF9zcmNfbGlzdCA9IGdfc2xpc3RfYXBwZW5kIChOVUxMLCBlKTsKKworICBuZXdfc3JjX2xpc3QgPSBOVUxMOworCisgIG1heF90aGlzX2xldmVsID0gMTsKKyAgZm9yIChpID0gMCwgaiA9IDA7IGkgPCBuX2VsZW1lbnRzOyBpKyssIGorKykgeworICAgIGlmIChqID49IG1heF90aGlzX2xldmVsKSB7CisgICAgICBnX3NsaXN0X2ZyZWUgKHNhdmVkX3NyY19saXN0KTsKKyAgICAgIHNhdmVkX3NyY19saXN0ID0gZ19zbGlzdF9yZXZlcnNlIChuZXdfc3JjX2xpc3QpOworICAgICAgbmV3X3NyY19saXN0ID0gTlVMTDsKKyAgICAgIGogPSAwOworICAgICAgbWF4X3RoaXNfbGV2ZWwgKj0gY29tcGxleGl0eV9vcmRlcjsKKyAgICB9CisKKyAgICBpZiAoIXNyY19saXN0KSB7CisgICAgICBzcmNfbGlzdCA9IHNhdmVkX3NyY19saXN0OworICAgIH0KKworICAgIHNyYyA9IChHc3RFbGVtZW50ICopIHNyY19saXN0LT5kYXRhOworICAgIHNyY19saXN0ID0gc3JjX2xpc3QtPm5leHQ7CisKKyAgICBpZiAoaSArIG1heF90aGlzX2xldmVsIDwgbl9lbGVtZW50cykgeworICAgICAgZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlZSIsIE5VTEwpOworICAgIH0gZWxzZSB7CisgICAgICBlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKKyAgICAgIGdfb2JqZWN0X3NldCAoZSwgInByZXJvbGwtcXVldWUtbGVuIiwgMSwgTlVMTCk7CisgICAgfQorICAgIGdfb2JqZWN0X3NldCAoZSwgInNpbGVudCIsIFRSVUUsIE5VTEwpOworICAgIG5ld19zcmNfbGlzdCA9IGdfc2xpc3RfcHJlcGVuZCAobmV3X3NyY19saXN0LCBlKTsKKworICAgIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIGUpOworICAgIGlmICghZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBlKSkKKyAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOworICB9CisKKyAgZ19zbGlzdF9mcmVlIChzYXZlZF9zcmNfbGlzdCk7CisgIGdfc2xpc3RfZnJlZSAobmV3X3NyY19saXN0KTsKKworICBlbmQgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOworICBnX3ByaW50ICgiJSIgR1NUX1RJTUVfRk9STUFUICIgLSBjcmVhdGluZyBhbmQgbGlua2luZyAlZCBlbGVtZW50c1xuIiwKKyAgICAgIEdTVF9USU1FX0FSR1MgKGVuZCAtIHN0YXJ0KSwgaSk7CisKKyAgc3RhcnQgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOworICBpZiAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwKKyAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKQorICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOworICBpZiAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgTlVMTCwgTlVMTCwKKyAgICAgICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpCisgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7CisgIGVuZCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7CisgIGdfcHJpbnQgKCIlIiBHU1RfVElNRV9GT1JNQVQgIiAtIHNldHRpbmcgcGlwZWxpbmUgdG8gcGxheWluZ1xuIiwKKyAgICAgIEdTVF9USU1FX0FSR1MgKGVuZCAtIHN0YXJ0KSk7CisKKyAgc3RhcnQgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOworICBtc2cgPSBnc3RfYnVzX3BvbGwgKGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGVsaW5lKSwKKyAgICAgIEdTVF9NRVNTQUdFX0VPUyB8IEdTVF9NRVNTQUdFX0VSUk9SLCAtMSk7CisgIGVuZCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7CisgIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOworICBnX3ByaW50ICgiJSIgR1NUX1RJTUVfRk9STUFUICIgLSBwdXR0aW5nICV1IGJ1ZmZlcnMgdGhyb3VnaFxuIiwKKyAgICAgIEdTVF9USU1FX0FSR1MgKGVuZCAtIHN0YXJ0KSwgQlVGRkVSX0NPVU5UKTsKKworICBzdGFydCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7CisgIGlmIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLAorICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSAhPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpCisgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7CisgIGVuZCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7CisgIGdfcHJpbnQgKCIlIiBHU1RfVElNRV9GT1JNQVQgIiAtIHNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTFxuIiwKKyAgICAgIEdTVF9USU1FX0FSR1MgKGVuZCAtIHN0YXJ0KSk7CisKKyAgc3RhcnQgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOworICBnX29iamVjdF91bnJlZiAocGlwZWxpbmUpOworICBlbmQgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOworICBnX3ByaW50ICgiJSIgR1NUX1RJTUVfRk9STUFUICIgLSB1bnJlZmZpbmcgcGlwZWxpbmVcbiIsCisgICAgICBHU1RfVElNRV9BUkdTIChlbmQgLSBzdGFydCkpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvYmVuY2htYXJrcy9jb250cm9sbGVyLmMgYi90ZXN0cy9iZW5jaG1hcmtzL2NvbnRyb2xsZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmVhZmYyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvYmVuY2htYXJrcy9jb250cm9sbGVyLmMKQEAgLTAsMCArMSwyMDQgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA5IFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKyAqCisgKiBjb250cm9sbGVyLmM6IGJlbmNobWFyayBmb3IgaW50ZXJwb2xhdGlvbiBjb250cm9sLXNvdXJjZQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5oPgorI2luY2x1ZGUgPGdzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmg+CisKKy8qIGEgc29uZyBpbiBidXp6dGFyZCBjYW4gZWFzaWx5IHJlYWNoIDMwMDAwIGhlcmUgKi8KKyNkZWZpbmUgTlVNX0NQIDE1MDAwCisjZGVmaW5lIEJMT0NLX1NJWkUgNjQKKworc3RhdGljIHZvaWQKK2V2ZW50X2xvb3AgKEdzdEVsZW1lbnQgKiBwaXBlKQoreworICBHc3RCdXMgKmJ1czsKKyAgR3N0TWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisgIGdib29sZWFuIHJ1bm5pbmcgPSBUUlVFOworCisgIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKEdTVF9FTEVNRU5UIChwaXBlKSk7CisKKyAgd2hpbGUgKHJ1bm5pbmcpIHsKKyAgICBtZXNzYWdlID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0FOWSwgLTEpOworCisgICAgZ19hc3NlcnQgKG1lc3NhZ2UgIT0gTlVMTCk7CisKKyAgICBzd2l0Y2ggKG1lc3NhZ2UtPnR5cGUpIHsKKyAgICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOgorICAgICAgICBydW5uaW5nID0gRkFMU0U7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHU1RfTUVTU0FHRV9XQVJOSU5HOnsKKyAgICAgICAgR0Vycm9yICpnZXJyb3I7CisgICAgICAgIGdjaGFyICpkZWJ1ZzsKKworICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV93YXJuaW5nIChtZXNzYWdlLCAmZ2Vycm9yLCAmZGVidWcpOworICAgICAgICBnc3Rfb2JqZWN0X2RlZmF1bHRfZXJyb3IgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSksIGdlcnJvciwgZGVidWcpOworICAgICAgICBnX2Vycm9yX2ZyZWUgKGdlcnJvcik7CisgICAgICAgIGdfZnJlZSAoZGVidWcpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6eworICAgICAgICBHRXJyb3IgKmdlcnJvcjsKKyAgICAgICAgZ2NoYXIgKmRlYnVnOworCisgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtZXNzYWdlLCAmZ2Vycm9yLCAmZGVidWcpOworICAgICAgICBnc3Rfb2JqZWN0X2RlZmF1bHRfZXJyb3IgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSksIGdlcnJvciwgZGVidWcpOworICAgICAgICBnX2Vycm9yX2ZyZWUgKGdlcnJvcik7CisgICAgICAgIGdfZnJlZSAoZGVidWcpOworICAgICAgICBydW5uaW5nID0gRkFMU0U7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKKyAgfQorICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOworfQorCitnaW50CittYWluIChnaW50IGFyZ2MsIGdjaGFyICogYXJndltdKQoreworICBnaW50IHJlcyA9IDE7CisgIGdpbnQgaSwgajsKKyAgR3N0RWxlbWVudCAqc3JjLCAqc2luazsKKyAgR3N0RWxlbWVudCAqYmluOworICBHc3RDb250cm9sbGVyICpjdHJsOworICBHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSAqY3NvdXJjZTsKKyAgR1ZhbHVlIGZyZXEgPSB7IDAsIH07CisgIEdzdENsb2NrVGltZSBidCwgY3Q7CisgIEdzdENsb2NrVGltZURpZmYgZWxhcHNlZDsKKyAgR3N0Q2xvY2tUaW1lIHRpY2s7CisKKyAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7CisgIGdzdF9jb250cm9sbGVyX2luaXQgKCZhcmdjLCAmYXJndik7CisKKyAgLyogYnVpbGQgcGlwZWxpbmUgKi8KKyAgYmluID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7CisgIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1ZGlvdGVzdHNyYyIsICJnZW5fYXVkaW8iKTsKKyAgaWYgKCFzcmMpIHsKKyAgICBHU1RfV0FSTklORyAoIm5lZWQgYXVkaW90ZXN0c3JjIGZyb20gZ3N0LXBsdWdpbnMtYmFzZSIpOworICAgIGdvdG8gRXJyb3I7CisgIH0KKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInN3YWxsb3dfYXVkaW8iKTsKKworICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChiaW4pLCBzcmMsIHNpbmssIE5VTEwpOworICBpZiAoIWdzdF9lbGVtZW50X2xpbmsgKHNyYywgc2luaykpIHsKKyAgICBHU1RfV0FSTklORyAoImNhbid0IGxpbmsgZWxlbWVudHMiKTsKKyAgICBnb3RvIEVycm9yOworICB9CisKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3JjKSwgIndhdmUiLCA3LCAgICAgIC8qIHNpbmUgdGFibGUgLSB3ZSBkb24ndCB3YW50IHRvIGJlbmNobWFyayB0aGUgZnB1ICovCisgICAgICAibnVtLWJ1ZmZlcnMiLCBOVU1fQ1AsICJzYW1wbGVzcGVyYnVmZmVyIiwgQkxPQ0tfU0laRSwgTlVMTCk7CisKKyAgdGljayA9IEJMT0NLX1NJWkUgKiBHU1RfU0VDT05EIC8gNDQxMDA7CisKKyAgLyogYWRkIGEgY29udHJvbGxlciB0byB0aGUgc291cmNlICovCisgIGlmICghKGN0cmwgPSBnc3RfY29udHJvbGxlcl9uZXcgKEdfT0JKRUNUIChzcmMpLCAiZnJlcSIsIE5VTEwpKSkgeworICAgIEdTVF9XQVJOSU5HICgiY2FuJ3QgY29udHJvbCBzb3VyY2UgZWxlbWVudCIpOworICAgIGdvdG8gRXJyb3I7CisgIH0KKworICAvKiBjcmVhdGUgYW5kIGNvbmZpZ3VyZSBjb250cm9sIHNvdXJjZSAqLworICBjc291cmNlID0gZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfbmV3ICgpOworICBnc3RfY29udHJvbGxlcl9zZXRfY29udHJvbF9zb3VyY2UgKGN0cmwsICJmcmVxIiwKKyAgICAgIEdTVF9DT05UUk9MX1NPVVJDRSAoY3NvdXJjZSkpOworICBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXRfaW50ZXJwb2xhdGlvbl9tb2RlIChjc291cmNlLAorICAgICAgR1NUX0lOVEVSUE9MQVRFX0xJTkVBUik7CisgIGdfdmFsdWVfaW5pdCAoJmZyZXEsIEdfVFlQRV9ET1VCTEUpOworCisKKyAgLyogc2V0IGNvbnRyb2wgdmFsdWVzLCB3ZSBzZXQgdGhlbSBpbiBhIGxpbmVhciBvcmRlciBhcyB3ZSB3b3VsZCB3aGVuIGxvYWRpbmcKKyAgICogYSBzdG9yZWQgcHJvamVjdAorICAgKi8KKyAgYnQgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOworCisgIGZvciAoaSA9IDA7IGkgPCBOVU1fQ1A7IGkrKykgeworICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAoJmZyZXEsIGdfcmFuZG9tX2RvdWJsZV9yYW5nZSAoNTAuMCwgMzAwMC4wKSk7CisgICAgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0IChjc291cmNlLCBpICogdGljaywgJmZyZXEpOworICB9CisKKyAgY3QgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOworICBlbGFwc2VkID0gR1NUX0NMT0NLX0RJRkYgKGJ0LCBjdCk7CisgIHByaW50ZiAoImxpbmVhciBpbnNlcnQgb2YgY29udHJvbC1wb2ludHM6ICUiIEdTVF9USU1FX0ZPUk1BVCAiXG4iLAorICAgICAgR1NUX1RJTUVfQVJHUyAoZWxhcHNlZCkpOworCisKKyAgLyogc2V0IGV4dHJhIGNvbnRyb2wgdmFsdWVzLCB3ZSBzZXQgdGhlbSBpbiBhcmJpdHJhcnkgb3JkZXIgdG8gc2ltdWxhdGUKKyAgICogdGhlIHVzZXIgZWRpdGluZyBhIHByb2plY3QgZnJvbSB0aGUgdWkKKyAgICovCisgIGJ0ID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKKworICBmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICBqID0gZ19yYW5kb21faW50X3JhbmdlICgwLCBOVU1fQ1AgLSAxKTsKKyAgICBnX3ZhbHVlX3NldF9kb3VibGUgKCZmcmVxLCBnX3JhbmRvbV9kb3VibGVfcmFuZ2UgKDUwLjAsIDMwMDAuMCkpOworICAgIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldCAoY3NvdXJjZSwgaiAqIHRpY2ssICZmcmVxKTsKKyAgfQorCisgIGN0ID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKKyAgZWxhcHNlZCA9IEdTVF9DTE9DS19ESUZGIChidCwgY3QpOworICBwcmludGYgKCJyYW5kb20gaW5zZXJ0IG9mIGNvbnRyb2wtcG9pbnRzOiAlIiBHU1RfVElNRV9GT1JNQVQgIlxuIiwKKyAgICAgIEdTVF9USU1FX0FSR1MgKGVsYXBzZWQpKTsKKworICB7CisgICAgR3N0Q2xvY2tUaW1lIHNhbXBsZV9kdXJhdGlvbiA9CisgICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKDEsIEdTVF9TRUNPTkQsIDQ0MTAwKTsKKyAgICBHc3RWYWx1ZUFycmF5IHZhID0geyAiZnJlcSIsCisgICAgICBCTE9DS19TSVpFICogTlVNX0NQLAorICAgICAgc2FtcGxlX2R1cmF0aW9uLAorICAgICAgTlVMTAorICAgIH07CisKKyAgICBnZG91YmxlICp2YWx1ZXMgPSBnX25ldzAgKGdkb3VibGUsIEJMT0NLX1NJWkUgKiBOVU1fQ1ApOworICAgIHZhLnZhbHVlcyA9IChncG9pbnRlciAqKSB2YWx1ZXM7CisKKyAgICBidCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7CisgICAgZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZV9hcnJheSAoR1NUX0NPTlRST0xfU09VUkNFIChjc291cmNlKSwgMCwgJnZhKTsKKyAgICBjdCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7CisgICAgZ19mcmVlICh2YWx1ZXMpOworICAgIGVsYXBzZWQgPSBHU1RfQ0xPQ0tfRElGRiAoYnQsIGN0KTsKKyAgICBwcmludGYgKCJsaW5lYXIgYXJyYXkgZm9yIGNvbnRyb2wtcG9pbnRzOiAlIiBHU1RfVElNRV9GT1JNQVQgIlxuIiwKKyAgICAgICAgR1NUX1RJTUVfQVJHUyAoZWxhcHNlZCkpOworICB9CisKKyAgZ19vYmplY3RfdW5yZWYgKGNzb3VyY2UpOworCisgIC8qIHBsYXksIHRoaXMgdGVzdCBzZXF1ZW50aWFsIHJlYWRzICovCisgIGJ0ID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKKworICBpZiAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9QTEFZSU5HKSkgeworICAgIC8qIHdhaXQgZm9yIEVPUyAqLworICAgIGV2ZW50X2xvb3AgKGJpbik7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9OVUxMKTsKKyAgfQorCisgIGN0ID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKKyAgZWxhcHNlZCA9IEdTVF9DTE9DS19ESUZGIChidCwgY3QpOworICBwcmludGYgKCJsaW5lYXIgcmVhZCBvZiBjb250cm9sLXBvaW50cyAgOiAlIiBHU1RfVElNRV9GT1JNQVQgIlxuIiwKKyAgICAgIEdTVF9USU1FX0FSR1MgKGVsYXBzZWQpKTsKKworICAvKiBjbGVhbnVwICovCisgIGdfb2JqZWN0X3VucmVmIChHX09CSkVDVCAoY3RybCkpOworICBnc3Rfb2JqZWN0X3VucmVmIChHX09CSkVDVCAoYmluKSk7CisgIHJlcyA9IDA7CitFcnJvcjoKKyAgcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2JlbmNobWFya3MvZ3N0YnVmZmVyc3RyZXNzLmMgYi90ZXN0cy9iZW5jaG1hcmtzL2dzdGJ1ZmZlcnN0cmVzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZjI5MTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9iZW5jaG1hcmtzL2dzdGJ1ZmZlcnN0cmVzcy5jCkBAIC0wLDAgKzEsMTI1IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgPDIwMDk+IEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCisjZGVmaW5lIE1BWF9USFJFQURTICAxMDAwCisKK3N0YXRpYyBndWludDY0IG5iYnVmZmVyczsKK3N0YXRpYyBHTXV0ZXggKm11dGV4OworCisKK3N0YXRpYyB2b2lkICoKK3J1bl90ZXN0ICh2b2lkICp1c2VyX2RhdGEpCit7CisgIGdpbnQgdGhyZWFkaWQgPSBHUE9JTlRFUl9UT19JTlQgKHVzZXJfZGF0YSk7CisgIGd1aW50NjQgbmI7CisgIEdzdEJ1ZmZlciAqYnVmOworICBHc3RDbG9ja1RpbWUgc3RhcnQsIGVuZDsKKworICBnX211dGV4X2xvY2sgKG11dGV4KTsKKyAgZ19tdXRleF91bmxvY2sgKG11dGV4KTsKKworICBzdGFydCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7CisKKyAgZ19hc3NlcnQgKG5iYnVmZmVycyA+IDApOworCisgIGZvciAobmIgPSBuYmJ1ZmZlcnM7IG5iOyBuYi0tKSB7CisgICAgYnVmID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKKyAgfQorCisgIGVuZCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7CisgIGdfcHJpbnQgKCJ0b3RhbCAlIiBHU1RfVElNRV9GT1JNQVQgIiAtIGF2ZXJhZ2UgJSIgR1NUX1RJTUVfRk9STUFUCisgICAgICAiICAtIFRocmVhZCAlZFxuIiwgR1NUX1RJTUVfQVJHUyAoZW5kIC0gc3RhcnQpLAorICAgICAgR1NUX1RJTUVfQVJHUyAoKGVuZCAtIHN0YXJ0KSAvIG5iYnVmZmVycyksIHRocmVhZGlkKTsKKworCisgIGdfdGhyZWFkX2V4aXQgKE5VTEwpOworICByZXR1cm4gTlVMTDsKK30KKworZ2ludAorbWFpbiAoZ2ludCBhcmdjLCBnY2hhciAqIGFyZ3ZbXSkKK3sKKyAgR1RocmVhZCAqdGhyZWFkc1tNQVhfVEhSRUFEU107CisgIGdpbnQgbnVtX3RocmVhZHM7CisgIGdpbnQgdDsKKyAgR3N0QnVmZmVyICp0bXA7CisgIEdzdENsb2NrVGltZSBzdGFydCwgZW5kOworCisgIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOworICBtdXRleCA9IGdfbXV0ZXhfbmV3ICgpOworCisgIGlmIChhcmdjICE9IDMpIHsKKyAgICBnX3ByaW50ICgidXNhZ2U6ICVzIDxudW1fdGhyZWFkcz4gPG5iYnVmZmVycz5cbiIsIGFyZ3ZbMF0pOworICAgIGV4aXQgKC0xKTsKKyAgfQorCisgIG51bV90aHJlYWRzID0gYXRvaSAoYXJndlsxXSk7CisgIG5iYnVmZmVycyA9IGF0b2kgKGFyZ3ZbMl0pOworCisgIGlmIChudW1fdGhyZWFkcyA8PSAwIHx8IG51bV90aHJlYWRzID4gTUFYX1RIUkVBRFMpIHsKKyAgICBnX3ByaW50ICgibnVtYmVyIG9mIHRocmVhZHMgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kICVkXG4iLCBNQVhfVEhSRUFEUyk7CisgICAgZXhpdCAoLTIpOworICB9CisKKyAgaWYgKG5iYnVmZmVycyA8PSAwKSB7CisgICAgZ19wcmludCAoIm51bWJlciBvZiBidWZmZXJzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDBcbiIpOworICAgIGV4aXQgKC0zKTsKKyAgfQorCisgIGdfbXV0ZXhfbG9jayAobXV0ZXgpOworICAvKiBMZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGUgR3N0QnVmZmVyQ2xhc3MgaXMgbG9hZGVkIC4uLiAqLworICB0bXAgPSBnc3RfYnVmZmVyX25ldyAoKTsKKworICBwcmludGYgKCJtYWluKCk6IENyZWF0aW5nICVkIHRocmVhZHMuXG4iLCBudW1fdGhyZWFkcyk7CisgIGZvciAodCA9IDA7IHQgPCBudW1fdGhyZWFkczsgdCsrKSB7CisgICAgR0Vycm9yICplcnJvciA9IE5VTEw7CisKKyAgICB0aHJlYWRzW3RdID0gZ190aHJlYWRfY3JlYXRlIChydW5fdGVzdCwgR0lOVF9UT19QT0lOVEVSICh0KSwgVFJVRSwgJmVycm9yKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgIHByaW50ZiAoIkVSUk9SOiBnX3RocmVhZF9jcmVhdGUoKSAlc1xuIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgZXhpdCAoLTEpOworICAgIH0KKyAgfQorCisgIC8qIFNpZ25hbCBhbGwgdGhyZWFkcyB0byBzdGFydCAqLworICBzdGFydCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7CisgIGdfbXV0ZXhfdW5sb2NrIChtdXRleCk7CisKKyAgZm9yICh0ID0gMDsgdCA8IG51bV90aHJlYWRzOyB0KyspIHsKKyAgICBpZiAodGhyZWFkc1t0XSkKKyAgICAgIGdfdGhyZWFkX2pvaW4gKHRocmVhZHNbdF0pOworICB9CisKKyAgZW5kID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKKyAgZ19wcmludCAoIioqKiB0b3RhbCAlIiBHU1RfVElNRV9GT1JNQVQgIiAtIGF2ZXJhZ2UgJSIgR1NUX1RJTUVfRk9STUFUCisgICAgICAiICAtIERvbmUgY3JlYXRpbmcgJSIgR19HVUlOVDY0X0ZPUk1BVCAiIGJ1ZmZlcnNcbiIsCisgICAgICBHU1RfVElNRV9BUkdTIChlbmQgLSBzdGFydCksCisgICAgICBHU1RfVElNRV9BUkdTICgoZW5kIC0gc3RhcnQpIC8gKG51bV90aHJlYWRzICogbmJidWZmZXJzKSksCisgICAgICBudW1fdGhyZWFkcyAqIG5iYnVmZmVycyk7CisKKworICBnc3RfYnVmZmVyX3VucmVmICh0bXApOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvYmVuY2htYXJrcy9nc3RjbG9ja3N0cmVzcy5jIGIvdGVzdHMvYmVuY2htYXJrcy9nc3RjbG9ja3N0cmVzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZjcyMWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9iZW5jaG1hcmtzL2dzdGNsb2Nrc3RyZXNzLmMKQEAgLTAsMCArMSw5MiBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDwyMDA5PiBXaW0gVGF5bWFucyA8d2ltIHRheW1hbnMgYXQgZ21haWwgZG90IGNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L2dsaWItY29tcGF0LXByaXZhdGUuaD4KKworI2RlZmluZSBNQVhfVEhSRUFEUyAgMTAwCisKK3N0YXRpYyBnYm9vbGVhbiBydW5uaW5nID0gVFJVRTsKK3N0YXRpYyBnaW50IGNvdW50ID0gMDsKKworc3RhdGljIHZvaWQgKgorcnVuX3Rlc3QgKHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgZ2ludCBwcmV2OworICBHc3RDbG9jayAqc3lzY2xvY2sgPSBHU1RfQ0xPQ0tfQ0FTVCAodXNlcl9kYXRhKTsKKworICB3aGlsZSAocnVubmluZykgeworICAgIGdzdF9jbG9ja19nZXRfdGltZSAoc3lzY2xvY2spOworICAgIHByZXYgPSBHX0FUT01JQ19JTlRfQUREICgmY291bnQsIDEpOworICAgIGlmIChwcmV2ID09IEdfTUFYSU5UKQorICAgICAgZ193YXJuaW5nICgib3ZlcmZsb3ciKTsKKyAgfQorICBnX3RocmVhZF9leGl0IChOVUxMKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2dpbnQKK21haW4gKGdpbnQgYXJnYywgZ2NoYXIgKiBhcmd2W10pCit7CisgIEdUaHJlYWQgKnRocmVhZHNbTUFYX1RIUkVBRFNdOworICBnaW50IG51bV90aHJlYWRzOworICBnaW50IHQ7CisgIEdzdENsb2NrICpzeXNjbG9jazsKKworICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKKworICBpZiAoYXJnYyAhPSAyKSB7CisgICAgZ19wcmludCAoInVzYWdlOiAlcyA8bnVtX3RocmVhZHM+XG4iLCBhcmd2WzBdKTsKKyAgICBleGl0ICgtMSk7CisgIH0KKworICBudW1fdGhyZWFkcyA9IGF0b2kgKGFyZ3ZbMV0pOworCisgIHN5c2Nsb2NrID0gZ3N0X3N5c3RlbV9jbG9ja19vYnRhaW4gKCk7CisKKyAgZm9yICh0ID0gMDsgdCA8IG51bV90aHJlYWRzOyB0KyspIHsKKyAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKworICAgIHRocmVhZHNbdF0gPSBnX3RocmVhZF9jcmVhdGUgKHJ1bl90ZXN0LCBzeXNjbG9jaywgVFJVRSwgJmVycm9yKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgIHByaW50ZiAoIkVSUk9SOiBnX3RocmVhZF9jcmVhdGUoKSAlc1xuIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgZXhpdCAoLTEpOworICAgIH0KKyAgfQorICBwcmludGYgKCJtYWluKCk6IENyZWF0ZWQgJWQgdGhyZWFkcy5cbiIsIHQpOworCisgIC8qIHJ1biBmb3IgNSBzZWNvbmRzICovCisgIGdfdXNsZWVwIChHX1VTRUNfUEVSX1NFQyAqIDUpOworCisgIHByaW50ZiAoIm1haW4oKTogU3RvcHBpbmcgdGhyZWFkcy4uLlxuIik7CisKKyAgcnVubmluZyA9IEZBTFNFOworCisgIGZvciAodCA9IDA7IHQgPCBudW1fdGhyZWFkczsgdCsrKSB7CisgICAgZ190aHJlYWRfam9pbiAodGhyZWFkc1t0XSk7CisgIH0KKworICBnX3ByaW50ICgicGVyZm9ybWVkICVkIGdldF90aW1lIG9wZXJhdGlvbnNcbiIsIGNvdW50KTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChzeXNjbG9jayk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9iZW5jaG1hcmtzL2dzdHBvbGxzdHJlc3MuYyBiL3Rlc3RzL2JlbmNobWFya3MvZ3N0cG9sbHN0cmVzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMGQ1NDgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9iZW5jaG1hcmtzL2dzdHBvbGxzdHJlc3MuYwpAQCAtMCwwICsxLDE3NyBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogQ29weXJpZ2h0IChDKSA8MjAwND4gVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworc3RhdGljIEdzdFBvbGwgKnNldDsKK3N0YXRpYyBHTGlzdCAqZmRzID0gTlVMTDsKK3N0YXRpYyBHTXV0ZXggKmZkbG9jazsKK3N0YXRpYyBHVGltZXIgKnRpbWVyOworCisjZGVmaW5lIE1BWF9USFJFQURTICAxMDAKKworc3RhdGljIHZvaWQKK21lc3Nfc29tZV9tb3JlICh2b2lkKQoreworICBHTGlzdCAqd2FsazsKKyAgZ2ludCByYW5kb207CisgIGdpbnQgcmVtb3ZlZCA9IDA7CisKKyAgZ19tdXRleF9sb2NrIChmZGxvY2spOworCisgIGZvciAod2FsayA9IGZkczsgd2FsazspIHsKKyAgICBHc3RQb2xsRkQgKmZkID0gKEdzdFBvbGxGRCAqKSB3YWxrLT5kYXRhOworCisgICAgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKTsKKworICAgIHJhbmRvbSA9IChnaW50KSAoMTAuMCAqIHJhbmQgKCkgLyAoUkFORF9NQVggKyAxLjApKTsKKyAgICBzd2l0Y2ggKHJhbmRvbSkgeworICAgICAgY2FzZSAwOgorICAgICAgeworICAgICAgICAvKgorICAgICAgICAgICBHc3RQb2xsRkQgKm5ld2ZkID0gZ19uZXcwIChHc3RQb2xsRkQsIDEpOworCisgICAgICAgICAgIGdzdF9wb2xsX2FkZF9mZCAoc2V0LCBuZXdmZCk7CisgICAgICAgICAgIGZkcyA9IGdfbGlzdF9wcmVwZW5kIChmZHMsIG5ld2ZkKTsKKyAgICAgICAgICovCisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSAxOgorICAgICAgICBpZiAoKGdpbnQpICgxMC4wICogcmFuZCAoKSAvIChSQU5EX01BWCArIDEuMCkpIDwgMikgeworICAgICAgICAgIGdzdF9wb2xsX3JlbW92ZV9mZCAoc2V0LCBmZCk7CisgICAgICAgICAgZmRzID0gZ19saXN0X3JlbW92ZSAoZmRzLCBmZCk7CisgICAgICAgICAgZ19mcmVlIChmZCk7CisgICAgICAgICAgcmVtb3ZlZCsrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDI6CisgICAgICAgIGdzdF9wb2xsX2ZkX2N0bF93cml0ZSAoc2V0LCBmZCwgVFJVRSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAzOgorICAgICAgICBnc3RfcG9sbF9mZF9jdGxfd3JpdGUgKHNldCwgZmQsIEZBTFNFKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDQ6CisgICAgICAgIGdzdF9wb2xsX2ZkX2N0bF9yZWFkIChzZXQsIGZkLCBUUlVFKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDU6CisgICAgICAgIGdzdF9wb2xsX2ZkX2N0bF9yZWFkIChzZXQsIGZkLCBGQUxTRSk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDY6CisgICAgICAgIGdzdF9wb2xsX2ZkX2hhc19jbG9zZWQgKHNldCwgZmQpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgNzoKKyAgICAgICAgZ3N0X3BvbGxfZmRfaGFzX2Vycm9yIChzZXQsIGZkKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDg6CisgICAgICAgIGdzdF9wb2xsX2ZkX2Nhbl9yZWFkIChzZXQsIGZkKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDk6CisgICAgICAgIGdzdF9wb2xsX2ZkX2Nhbl93cml0ZSAoc2V0LCBmZCk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBpZiAoZ19saXN0X2xlbmd0aCAoZmRzKSA8IDkwMCkgeworICAgIHJhbmRvbSA9IHJlbW92ZWQgKyAoZ2ludCkgKDIuMCAqIHJhbmQgKCkgLyAoUkFORF9NQVggKyAxLjApKTsKKyAgICB3aGlsZSAocmFuZG9tKSB7CisgICAgICBHc3RQb2xsRkQgKm5ld2ZkID0gZ19uZXcwIChHc3RQb2xsRkQsIDEpOworCisgICAgICBnc3RfcG9sbF9hZGRfZmQgKHNldCwgbmV3ZmQpOworICAgICAgZmRzID0gZ19saXN0X3ByZXBlbmQgKGZkcywgbmV3ZmQpOworICAgICAgcmFuZG9tLS07CisgICAgfQorICB9CisKKyAgZ19tdXRleF91bmxvY2sgKGZkbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkICoKK3J1bl90ZXN0ICh2b2lkICp0aHJlYWRpZCkKK3sKKyAgZ2ludCBpZCA9IEdQT0lOVEVSX1RPX0lOVCAodGhyZWFkaWQpOworCisgIHdoaWxlIChUUlVFKSB7CisgICAgaWYgKGlkID09IDApIHsKKyAgICAgIGdpbnQgcmVzID0gZ3N0X3BvbGxfd2FpdCAoc2V0LCAxMCk7CisKKyAgICAgIGlmIChyZXMgPCAwKSB7CisgICAgICAgIGdfcHJpbnQgKCJlcnJvciAlZCAlc1xuIiwgZXJybm8sIGdfc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIG1lc3Nfc29tZV9tb3JlICgpOworICAgICAgaWYgKGdfdGltZXJfZWxhcHNlZCAodGltZXIsIE5VTEwpID4gMC41KSB7CisgICAgICAgIGdfbXV0ZXhfbG9jayAoZmRsb2NrKTsKKyAgICAgICAgZ19wcmludCAoImFjdGl2ZSBmZHMgOiVkXG4iLCBnX2xpc3RfbGVuZ3RoIChmZHMpKTsKKyAgICAgICAgZ190aW1lcl9zdGFydCAodGltZXIpOworICAgICAgICBnX211dGV4X3VubG9jayAoZmRsb2NrKTsKKyAgICAgIH0KKyAgICAgIGdfdXNsZWVwICgxKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworZ2ludAorbWFpbiAoZ2ludCBhcmdjLCBnY2hhciAqIGFyZ3ZbXSkKK3sKKyAgR1RocmVhZCAqdGhyZWFkc1tNQVhfVEhSRUFEU107CisgIGdpbnQgbnVtX3RocmVhZHM7CisgIGdpbnQgdDsKKworICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKKworICBmZGxvY2sgPSBnX211dGV4X25ldyAoKTsKKyAgdGltZXIgPSBnX3RpbWVyX25ldyAoKTsKKworICBpZiAoYXJnYyAhPSAyKSB7CisgICAgZ19wcmludCAoInVzYWdlOiAlcyA8bnVtX3RocmVhZHM+XG4iLCBhcmd2WzBdKTsKKyAgICBleGl0ICgtMSk7CisgIH0KKworICBudW1fdGhyZWFkcyA9IGF0b2kgKGFyZ3ZbMV0pOworCisgIHNldCA9IGdzdF9wb2xsX25ldyAoVFJVRSk7CisKKyAgZm9yICh0ID0gMDsgdCA8IG51bV90aHJlYWRzOyB0KyspIHsKKyAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKworICAgIHRocmVhZHNbdF0gPSBnX3RocmVhZF9jcmVhdGUgKHJ1bl90ZXN0LCBHSU5UX1RPX1BPSU5URVIgKHQpLCBUUlVFLCAmZXJyb3IpOworICAgIGlmIChlcnJvcikgeworICAgICAgcHJpbnRmICgiRVJST1I6IGdfdGhyZWFkX2NyZWF0ZSgpICVzXG4iLCBlcnJvci0+bWVzc2FnZSk7CisgICAgICBleGl0ICgtMSk7CisgICAgfQorICB9CisgIHByaW50ZiAoIm1haW4oKTogQ3JlYXRlZCAlZCB0aHJlYWRzLlxuIiwgdCk7CisKKyAgZm9yICh0ID0gMDsgdCA8IG51bV90aHJlYWRzOyB0KyspIHsKKyAgICBnX3RocmVhZF9qb2luICh0aHJlYWRzW3RdKTsKKyAgfQorCisgIGdzdF9wb2xsX2ZyZWUgKHNldCk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9iZW5jaG1hcmtzL2luaXQuYyBiL3Rlc3RzL2JlbmNobWFya3MvaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwM2Y2NjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9iZW5jaG1hcmtzL2luaXQuYwpAQCAtMCwwICsxLDMxIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNiBTdGVmYW4gS29zdCA8c3RlZmFuLmtvc3RAbm9raWEuY29tPgorICoKKyAqIGluaXQuYzogYmVuY2htYXJrIGdzdCBpbml0aWFsaXNhdGlvbgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworZ2ludAorbWFpbiAoZ2ludCBhcmdjLCBnY2hhciAqIGFyZ3ZbXSkKK3sKKyAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9iZW5jaG1hcmtzL21hc3MtZWxlbWVudHMuYyBiL3Rlc3RzL2JlbmNobWFya3MvbWFzcy1lbGVtZW50cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNmQzZDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9iZW5jaG1hcmtzL21hc3MtZWxlbWVudHMuYwpAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBCZW5qYW1pbiBPdHRlIDxvdHRlQGdub21lLm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCisjZGVmaW5lIElERU5USVRZX0NPVU5UICgxMDAwKQorI2RlZmluZSBCVUZGRVJfQ09VTlQgKDEwMDApCisjZGVmaW5lIFNSQ19FTEVNRU5UICJmYWtlc3JjIgorI2RlZmluZSBTSU5LX0VMRU1FTlQgImZha2VzaW5rIgorCisKK2dpbnQKK21haW4gKGdpbnQgYXJnYywgZ2NoYXIgKiBhcmd2W10pCit7CisgIEdzdE1lc3NhZ2UgKm1zZzsKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpzcmMsICpzaW5rLCAqY3VycmVudCwgKmxhc3Q7CisgIGd1aW50IGksIGJ1ZmZlcnMgPSBCVUZGRVJfQ09VTlQsIGlkZW50aXRpZXMgPSBJREVOVElUWV9DT1VOVDsKKyAgR3N0Q2xvY2tUaW1lIHN0YXJ0LCBlbmQ7CisgIGNvbnN0IGdjaGFyICpzcmNfbmFtZSA9IFNSQ19FTEVNRU5ULCAqc2lua19uYW1lID0gU0lOS19FTEVNRU5UOworCisgIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOworCisgIGlmIChhcmdjID4gMSkKKyAgICBpZGVudGl0aWVzID0gYXRvaSAoYXJndlsxXSk7CisgIGlmIChhcmdjID4gMikKKyAgICBidWZmZXJzID0gYXRvaSAoYXJndlsyXSk7CisgIGlmIChhcmdjID4gMykKKyAgICBzcmNfbmFtZSA9IGFyZ3ZbM107CisgIGlmIChhcmdjID4gNCkKKyAgICBzaW5rX25hbWUgPSBhcmd2WzRdOworCisgIGdfcHJpbnQKKyAgICAgICgiKioqIGJlbmNobWFya2luZyB0aGlzIHBpcGVsaW5lOiAlcyBudW0tYnVmZmVycz0ldSAhICV1ICogaWRlbnRpdHkgISAlc1xuIiwKKyAgICAgIHNyY19uYW1lLCBidWZmZXJzLCBpZGVudGl0aWVzLCBzaW5rX25hbWUpOworICBzdGFydCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7CisgIHBpcGVsaW5lID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicGlwZWxpbmUiLCBOVUxMKTsKKyAgZ19hc3NlcnQgKHBpcGVsaW5lKTsKKyAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlIChzcmNfbmFtZSwgTlVMTCk7CisgIGlmICghc3JjKSB7CisgICAgZ19wcmludCAoIm5vIGVsZW1lbnQgbmFtZWQgXCIlc1wiIGZvdW5kLCBhYm9ydGluZy4uLlxuIiwgc3JjX25hbWUpOworICAgIHJldHVybiAxOworICB9CisgIGdfb2JqZWN0X3NldCAoc3JjLCAibnVtLWJ1ZmZlcnMiLCBidWZmZXJzLCBOVUxMKTsKKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoc2lua19uYW1lLCBOVUxMKTsKKyAgaWYgKCFzaW5rKSB7CisgICAgZ19wcmludCAoIm5vIGVsZW1lbnQgbmFtZWQgXCIlc1wiIGZvdW5kLCBhYm9ydGluZy4uLlxuIiwgc2lua19uYW1lKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBsYXN0ID0gc3JjOworICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIHNyYywgc2luaywgTlVMTCk7CisgIGZvciAoaSA9IDA7IGkgPCBpZGVudGl0aWVzOyBpKyspIHsKKyAgICBjdXJyZW50ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiaWRlbnRpdHkiLCBOVUxMKTsKKyAgICBnX2Fzc2VydCAoY3VycmVudCk7CisgICAgLyogc2h1dCB0aGlzIGVsZW1lbnQgdXAgKG5vIGdfc3RyZHVwX3ByaW50ZiBwbGVhc2UpICovCisgICAgZ19vYmplY3Rfc2V0IChjdXJyZW50LCAic2lsZW50IiwgVFJVRSwgTlVMTCk7CisgICAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgY3VycmVudCk7CisgICAgaWYgKCFnc3RfZWxlbWVudF9saW5rIChsYXN0LCBjdXJyZW50KSkKKyAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOworICAgIGxhc3QgPSBjdXJyZW50OworICB9CisgIGlmICghZ3N0X2VsZW1lbnRfbGluayAobGFzdCwgc2luaykpCisgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7CisgIGVuZCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7CisgIGdfcHJpbnQgKCIlIiBHU1RfVElNRV9GT1JNQVQgIiAtIGNyZWF0aW5nICV1IGlkZW50aXR5IGVsZW1lbnRzXG4iLAorICAgICAgR1NUX1RJTUVfQVJHUyAoZW5kIC0gc3RhcnQpLCBpZGVudGl0aWVzKTsKKworICBzdGFydCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7CisgIGlmIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLAorICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpCisgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7CisgIGlmIChnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLAorICAgICAgICAgIEdTVF9DTE9DS19USU1FX05PTkUpID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkKKyAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKKyAgZW5kID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKKyAgZ19wcmludCAoIiUiIEdTVF9USU1FX0ZPUk1BVCAiIC0gc2V0dGluZyBwaXBlbGluZSB0byBwbGF5aW5nXG4iLAorICAgICAgR1NUX1RJTUVfQVJHUyAoZW5kIC0gc3RhcnQpKTsKKworICBzdGFydCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7CisgIG1zZyA9IGdzdF9idXNfcG9sbCAoZ3N0X2VsZW1lbnRfZ2V0X2J1cyAocGlwZWxpbmUpLAorICAgICAgR1NUX01FU1NBR0VfRU9TIHwgR1NUX01FU1NBR0VfRVJST1IsIC0xKTsKKyAgZW5kID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKKyAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7CisgIGdfcHJpbnQgKCIlIiBHU1RfVElNRV9GT1JNQVQgIiAtIHB1dHRpbmcgJXUgYnVmZmVycyB0aHJvdWdoXG4iLAorICAgICAgR1NUX1RJTUVfQVJHUyAoZW5kIC0gc3RhcnQpLCBidWZmZXJzKTsKKworICBzdGFydCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7CisgIGlmIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLAorICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSAhPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpCisgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7CisgIGVuZCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7CisgIGdfcHJpbnQgKCIlIiBHU1RfVElNRV9GT1JNQVQgIiAtIHNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTFxuIiwKKyAgICAgIEdTVF9USU1FX0FSR1MgKGVuZCAtIHN0YXJ0KSk7CisKKyAgc3RhcnQgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOworICBnX29iamVjdF91bnJlZiAocGlwZWxpbmUpOworICBlbmQgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOworICBnX3ByaW50ICgiJSIgR1NUX1RJTUVfRk9STUFUICIgLSB1bnJlZmZpbmcgcGlwZWxpbmVcbiIsCisgICAgICBHU1RfVElNRV9BUkdTIChlbmQgLSBzdGFydCkpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svTWFrZWZpbGUuYW0gYi90ZXN0cy9jaGVjay9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2FhYzg2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hlY2svTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwyNzYgQEAKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb21tb24vY2hlY2subWFrCisKK0NIRUNLX1JFR0lTVFJZID0gJCh0b3BfYnVpbGRkaXIpL3Rlc3RzL2NoZWNrL3Rlc3QtcmVnaXN0cnkucmVnCisKK0dTVF9UT09MU19ESVIgPSAkKHRvcF9idWlsZGRpcikvdG9vbHMKKworUkVHSVNUUllfRU5WSVJPTk1FTlQgPSBcCisJR1NUX1JFR0lTVFJZPSQoQ0hFQ0tfUkVHSVNUUlkpCisKK1RFU1RTX0VOVklST05NRU5UID0gXAorICAgICAgICBHU1RfU1RBVEVfSUdOT1JFX0VMRU1FTlRTPSIkKFNUQVRFX0lHTk9SRV9FTEVNRU5UUykiCVwKKyAgICAgICAgJChSRUdJU1RSWV9FTlZJUk9OTUVOVCkJCQkJCVwKKyAgICAgICAgR1NUX1BMVUdJTl9TQ0FOTkVSPSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9oZWxwZXJzL2dzdC1wbHVnaW4tc2Nhbm5lciBcCisgICAgICAgIEdTVF9QTFVHSU5fU1lTVEVNX1BBVEg9CQkJCQlcCisgICAgICAgIEdTVF9QTFVHSU5fUEFUSD0kKHRvcF9idWlsZGRpcikvcGx1Z2lucworCitwbHVnaW5kaXIgPSAkKGxpYmRpcikvZ3N0cmVhbWVyLUBHU1RfTUFKT1JNSU5PUkAKKworIyBvdmVycmlkZSB0byBfbm90XyBpbnN0YWxsIHRoZSB0ZXN0IHBsdWdpbnMKK2luc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6CisKKyMgdGhlIGNvcmUgZHVtcHMgb2Ygc29tZSBtYWNoaW5lcyBoYXZlIFBJRHMgYXBwZW5kZWQsIHRlc3QgcmVnaXN0cnkgYW5kCisjIHByb2ZpbGluZyBkYXRhCitDTEVBTkZJTEVTID0gY29yZSBjb3JlLiogdGVzdC1yZWdpc3RyeS4qICouZ2NubyAqLmdjZGEKKworU1VQUFJFU1NJT05TID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vZ3N0LnN1cHAKKworY2xlYW4tbG9jYWw6IGNsZWFuLWxvY2FsLWNoZWNrCisKK2lmIEdTVF9ESVNBQkxFX1BBUlNFCitQQVJTRV9DSEVDS1MgPSBwaXBlbGluZXMvcGFyc2UtZGlzYWJsZWQKK2Vsc2UKK1BBUlNFX0NIRUNLUyA9IHBpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzIHBpcGVsaW5lcy9jbGVhbnVwIHBpcGVsaW5lcy9wYXJzZS1sYXVuY2gKK2VuZGlmCisKKyMgRG8gbm90IHJ1biB0aGUgYWJpIHRlc3QgaW4gY2FzZSBhbnkgb3B0aW9uIHdoaWNoIGNhdXNlcyB0aGUgQVBJIHRvIGNoYW5nZSBoYXMKKyMgYmVlbiB1c2VkCitpZiBGQUxTRQoraWYgIUdTVF9ESVNBQkxFX1JFR0lTVFJZCitpZiAhR1NUX0RJU0FCTEVfVFJBQ0UKK0FCSV9DSEVDS1MgPSBnc3QvZ3N0YWJpCitlbmRpZgorZW5kaWYKK2VuZGlmCisKK2lmIEZBTFNFCitMSUJTQUJJX0NIRUNLUyA9IGxpYnMvbGlic2FiaQorZW5kaWYKKworaWYgSEFWRV9DWFgKK0NYWF9DSEVDS1MgPSBnc3QvZ3N0Y3BwIGxpYnMvZ3N0bGlic2NwcAorZWxzZQorQ1hYX0NIRUNLUyA9CitlbmRpZgorCisjIGlmIGl0J3MgY2FsbGluZyBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoKSwgaXQgd2lsbCBwcm9iYWJseSBub3Qgd29yayB3aXRob3V0CisjIGEgcmVnaXN0cnkKK2lmIEdTVF9ESVNBQkxFX1JFR0lTVFJZCitSRUdJU1RSWV9DSEVDS1MgPQorZWxzZQorUkVHSVNUUllfQ0hFQ0tTID0JCQkJXAorCWdzdC9nc3QJCQkJCVwKKwlnc3QvZ3N0YmluCQkJCVwKKwlnc3QvZ3N0Y2hpbGRwcm94eQkJCVwKKwlnc3QvZ3N0ZWxlbWVudAkJCQlcCisJZ3N0L2dzdGVsZW1lbnRmYWN0b3J5CQkJXAorCWdzdC9nc3RldmVudAkJCQlcCisJZ3N0L2dzdGdob3N0cGFkCQkJCVwKKwlnc3QvZ3N0aW5kZXgJCQkJXAorCWdzdC9nc3RwbHVnaW4JCQkJXAorCWdzdC9nc3RwcmVzZXQJCQkJXAorCWdzdC9nc3RxdWVyeQkJCQlcCisJZ3N0L2dzdHJlZ2lzdHJ5CQkJCVwKKwlnc3QvZ3N0dXJpICAJCQkJXAorCWdzdC9nc3R1dGlscwkJCQlcCisJZ2VuZXJpYy9zaW5rcwkJCQlcCisJZWxlbWVudHMvY2Fwc2ZpbHRlcgkJCVwKKwllbGVtZW50cy9mYWtlc2luawkJCVwKKwllbGVtZW50cy9mYWtlc3JjCQkJXAorCWVsZW1lbnRzL2Zkc3JjCQkJICAJXAorCWVsZW1lbnRzL2ZpbGVzaW5rCQkJXAorCWVsZW1lbnRzL2ZpbGVzcmMJCQlcCisJZWxlbWVudHMvZnVubmVsCQkJCVwKKwllbGVtZW50cy9pZGVudGl0eQkJCVwKKwllbGVtZW50cy9tdWx0aXF1ZXVlCQkJXAorCWVsZW1lbnRzL3NlbGVjdG9yCQkJXAorCWVsZW1lbnRzL3RlZQkJCSAgCVwKKwllbGVtZW50cy9xdWV1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWVsZW1lbnRzL3F1ZXVlMiAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZWxlbWVudHMvdmFsdmUgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlsaWJzL2Jhc2VzcmMJCQkJXAorCWxpYnMvYmFzZXNpbmsJCQkJXAorCWxpYnMvY29udHJvbGxlcgkJCQlcCisJbGlicy90eXBlZmluZGhlbHBlcgkJCVwKKwlwaXBlbGluZXMvc3RyZXNzCQkJXAorCXBpcGVsaW5lcy9xdWV1ZS1lcnJvcgorZW5kaWYKKworY2hlY2tfUFJPR1JBTVMgPQkJCQlcCisJJChBQklfQ0hFQ0tTKQkJCSAgICAgCVwKKwlnc3QvZ3N0YnVmZmVyCQkJCVwKKwlnc3QvZ3N0YnVmZmVybGlzdAkJCVwKKwlnc3QvZ3N0bWV0YQkJCQlcCisJZ3N0L2dzdGJ1cwkJCQlcCisJZ3N0L2dzdGNhcHMgICAgIAkJCVwKKwkkKENYWF9DSEVDS1MpCQkJICAgICAJXAorCWdzdC9nc3RkYXRldGltZSAgICAgCQkJXAorCWdzdC9nc3RpbmZvCQkgCQlcCisJZ3N0L2dzdGl0ZXJhdG9yIAkJCVwKKwlnc3QvZ3N0bWVzc2FnZQkgCQkJXAorCWdzdC9nc3RtaW5pb2JqZWN0IAkJCVwKKwlnc3QvZ3N0b2JqZWN0CQkJCVwKKwlnc3QvZ3N0cGFkCQkJCVwKKwlnc3QvZ3N0cGFyYW1zcGVjcwkJCVwKKwlnc3QvZ3N0cG9sbCAgICAgCQkJXAorCWdzdC9nc3RzZWdtZW50CQkJCVwKKwlnc3QvZ3N0c3lzdGVtY2xvY2sJCQlcCisJZ3N0L2dzdGNsb2NrCQkJCVwKKwlnc3QvZ3N0c3RydWN0dXJlCQkJXAorCWdzdC9nc3R0YWcJCQkJXAorCWdzdC9nc3R0YWdzZXR0ZXIJCQlcCisJZ3N0L2dzdHRhc2sJCQkJXAorCWdzdC9nc3R2YWx1ZQkJCQlcCisJZ2VuZXJpYy9zdGF0ZXMJCQkJXAorCSQoUEFSU0VfQ0hFQ0tTKQkJCQlcCisJJChSRUdJU1RSWV9DSEVDS1MpCQkJXAorCSQoTElCU0FCSV9DSEVDS1MpCQkgICAgIAlcCisJbGlicy9nZHAJCQkJXAorCWxpYnMvYWRhcHRlcgkJCQlcCisJbGlicy9iaXRyZWFkZXIJCQkJXAorCWxpYnMvYnl0ZXJlYWRlcgkJCQlcCisJbGlicy9ieXRld3JpdGVyCQkJCVwKKwlsaWJzL2dzdG5ldGNsaWVudGNsb2NrCQkJXAorCWxpYnMvZ3N0bmV0dGltZXByb3ZpZGVyCQkJXAorCWxpYnMvdHJhbnNmb3JtMQorCisjIGZhaWxpbmcgdGVzdHMKK25vaW5zdF9QUk9HUkFNUyA9CQkJCVwKKwlnc3QvZ3N0cGlwZWxpbmUJCQkJXAorCWxpYnMvY29sbGVjdHBhZHMKKworIyBlbGVtZW50cyB0byBpZ25vcmUgZm9yIHRoZSBzdGF0ZSB0ZXN0cworIyBTVEFURV9JR05PUkVfRUxFTUVOVFMgPQorCitURVNUUyA9ICQoY2hlY2tfUFJPR1JBTVMpCisKK25vaW5zdF9IRUFERVJTID0gXAorCWdzdC9jYXBzbGlzdC5oIFwKKwlnc3Qvc3RydWN0X2FybS5oIFwKKwlnc3Qvc3RydWN0X2kzODYuaCBcCisJZ3N0L3N0cnVjdF9ocHBhLmggXAorCWdzdC9zdHJ1Y3RfcHBjMzIuaCBcCisJZ3N0L3N0cnVjdF9wcGM2NC5oIFwKKwlnc3Qvc3RydWN0X3NwYXJjLmggXAorCWdzdC9zdHJ1Y3RfeDg2XzY0LmggXAorCWxpYnMvc3RydWN0X2FybS5oIFwKKwlsaWJzL3N0cnVjdF9pMzg2LmggXAorCWxpYnMvc3RydWN0X2hwcGEuaCBcCisJbGlicy9zdHJ1Y3RfcHBjMzIuaCBcCisJbGlicy9zdHJ1Y3RfcHBjNjQuaCBcCisJbGlicy9zdHJ1Y3Rfc3BhcmMuaCBcCisJbGlicy9zdHJ1Y3RfeDg2XzY0LmgKKworRVhUUkFfRElTVCA9IFwKKwlsaWJzL3Rlc3RfdHJhbnNmb3JtLmMKKworQU1fQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykgLVVHX0RJU0FCTEVfQVNTRVJUIC1VR19ESVNBQkxFX0NBU1RfQ0hFQ0tTCitBTV9DWFhGTEFHUyA9ICQoR1NUX09CSl9DWFhGTEFHUykgLVVHX0RJU0FCTEVfQVNTRVJUIC1VR19ESVNBQkxFX0NBU1RfQ0hFQ0tTCitMREFERCA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoR1NUX09CSl9MSUJTKQorCitnc3RfZ3N0Y3BwX1NPVVJDRVMgPSBnc3QvZ3N0Y3BwLmNjCisKK2xpYnNfZ3N0bGlic2NwcF9TT1VSQ0VTID0gbGlicy9nc3RsaWJzY3BwLmNjCisKK2dzdF9nc3R1dGlsc19MREFERCA9ICQoTERBREQpICQoR1NMX0xJQlMpICQoR01QX0xJQlMpCisKK2xpYnNfZ2RwX1NPVVJDRVMgPSBcCisJbGlicy9nZHAuYworbGlic19nZHBfTERBREQgPSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2RhdGFwcm90b2NvbC9saWJnc3RkYXRhcHJvdG9jb2wtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChMREFERCkKKworZWxlbWVudHNfZmRzcmNfQ0ZMQUdTPSQoR1NUX09CSl9DRkxBR1MpICQoQU1fQ0ZMQUdTKSBcCisJLURURVNURklMRT1cIiQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjXCIKK2VsZW1lbnRzX2ZpbGVzcmNfQ0ZMQUdTPSQoR1NUX09CSl9DRkxBR1MpICQoQU1fQ0ZMQUdTKSBcCisJLURURVNURklMRT1cIiQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjXCIKKworbGlic19jb250cm9sbGVyX0xEQUREID0gXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jb250cm9sbGVyL2xpYmdzdGNvbnRyb2xsZXItQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChMREFERCkKK2xpYnNfZ3N0bmV0Y2xpZW50Y2xvY2tfTERBREQgPSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L25ldC9saWJnc3RuZXQtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChMREFERCkKK2xpYnNfZ3N0bmV0dGltZXByb3ZpZGVyX0xEQUREID0gXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9uZXQvbGliZ3N0bmV0LUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoTERBREQpCisKKyMgdmFsZ3JpbmQgdGVzdGluZworIyB0aGVzZSBqdXN0IG5lZWQgdmFsZ3JpbmQgZml4aW5nLCBwZXJpb2QKK1ZBTEdSSU5EX1RPX0ZJWCA9IFwKKwlnc3QvZ3N0aW5mbyBcCisJbGlicy9jb2xsZWN0cGFkcyBcCisJcGlwZWxpbmVzL3BhcnNlLWxhdW5jaAorCitWQUxHUklORF9JR05PUkUgPSBcCisJcGlwZWxpbmVzL3N0cmVzcworCisjIHRoZXNlIG5lZWQgZml4aW5nIGJlY2F1c2UgdGhlIHRocmVhZHMgY2F1c2Ugc2VnZmF1bHRzIHVuZGVyIHZhbGdyaW5kCitURVNUU19USFJFQURFRCA9CQkJCVwKKwlnc3QvZ3N0bWluaW9iamVjdCAJCQlcCisJZ3N0L2dzdG9iamVjdAorCitWQUxHUklORF9URVNUU19ESVNBQkxFID0gCQkJCQlcCisJJChURVNUU19USFJFQURFRCkJCQkJCVwKKwkkKFZBTEdSSU5EX0lHTk9SRSkJCQkJCVwKKwkkKFZBTEdSSU5EX1RPX0ZJWCkKKworIyBpbmRleGVycyBkb2VzIG5vdCBnZXQgdGVzdGVkIHlldAorQ09WRVJBR0VfRElSUyA9IFwKKwlnc3QgXAorCWxpYnMvZ3N0L2Jhc2UgXAorCWxpYnMvZ3N0L2NvbnRyb2xsZXIgXAorCWxpYnMvZ3N0L2NoZWNrIFwKKwlsaWJzL2dzdC9kYXRhcHJvdG9jb2wgXAorCWxpYnMvZ3N0L25ldCBcCisJcGx1Z2lucy9lbGVtZW50cworQ09WRVJBR0VfRklMRVMgPSAkKGZvcmVhY2ggZGlyLCQoQ09WRVJBR0VfRElSUyksJCh3aWxkY2FyZCAkKHRvcF9idWlsZGRpcikvJChkaXIpLyouZ2NvdikpCitDT1ZFUkFHRV9GSUxFU19SRUwgPSAkKHN1YnN0ICQodG9wX2J1aWxkZGlyKS8sLCQoQ09WRVJBR0VfRklMRVMpKQorQ09WRVJBR0VfT1VUX0ZJTEVTID0gJChmb3JlYWNoIGRpciwkKENPVkVSQUdFX0RJUlMpLCQod2lsZGNhcmQgJCh0b3BfYnVpbGRkaXIpLyQoZGlyKS8qLmdjb3Yub3V0KSkKK0NPVkVSQUdFX09VVF9GSUxFU19SRUwgPSAkKHN1YnN0ICQodG9wX2J1aWxkZGlyKS8sLCQoQ09WRVJBR0VfT1VUX0ZJTEVTKSkKKworZGVidWc6CisJZWNobyAkKENPVkVSQUdFX0ZJTEVTKQorCWVjaG8gJChDT1ZFUkFHRV9GSUxFU19SRUwpCisKKy5QSE9OWTogY292ZXJhZ2UKK2lmIEdTVF9HQ09WX0VOQUJMRUQKKyMgd2UgcmVidWlsZCBhIHJlZ2lzdHJ5IGFuZCBkbyBnc3QtaW5zcGVjdCBzbyB0aGF0IGFsbCB0aGUgZ2V0L3NldCBjb2RlcGF0aHMKKyMgYXJlIGFsc28gY292ZXJlZAorY292ZXJhZ2U6CisJZm9yIGZpbGUgaW4gYGZpbmQgJCh0b3BfYnVpbGRkaXIpIC1uYW1lICcqLmdjZGEnYDsgZG8gcm0gJCRmaWxlOyBkb25lCisJLXJtICQoQ0hFQ0tfUkVHSVNUUlkpCisJZWNobyAiSW5zcGVjdGluZyBhbGwgZWxlbWVudHMiCisJZm9yIGUgaW4gYCQoR1NUX0lOU1BFQ1QpIHwgaGVhZCAtbiAtMiB8IGN1dCAtZDogLWYyYDsgZG8gJChHU1RfSU5TUEVDVCkgJCRlID4gL2Rldi9udWxsIDI+JjE7IGRvbmUKKwltYWtlIGNoZWNrCisJbWFrZSBjb3ZlcmFnZS1yZXBvcnQKK2Vsc2UKK2NvdmVyYWdlOgorCWVjaG8gIllvdSBuZWVkIHRvIGNvbmZpZ3VyZSB3aXRoIC0tZW5hYmxlLWdjb3YgdG8gZ2V0IGNvdmVyYWdlIGRhdGEiCisJZXhpdCAxCitlbmRpZgorCitjb3ZlcmFnZS1yZXBvcnQ6CisJcm0gLXIgY292ZXJhZ2UKKwlmb3IgZGlyIGluICQoQ09WRVJBR0VfRElSUyk7IGRvIAkJCQlcCisJICBta2RpciAtcCBjb3ZlcmFnZS8kJGRpcjsgCQkJCQlcCisJICBtYWtlIC1DICQodG9wX2J1aWxkZGlyKS8kJGRpciBnY292OwkJCQlcCisgICAgICAgIGRvbmUKKwlmb3IgZGlyIGluICQoQ09WRVJBR0VfRElSUyk7IGRvCQkJCQlcCisJICAgIGZpbGVzPSJgbHMgJCh0b3BfYnVpbGRkaXIpLyQkZGlyLyouZ2Nvdi5vdXQgMj4gL2Rldi9udWxsYCI7IFwKKyAgICAgICAgICBpZiB0ZXN0ICEgLXogIiQkZmlsZXMiOyB0aGVuCQkJCQlcCisJICAgIHBlcmwgJCh0b3Bfc3JjZGlyKS9jb21tb24vY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LnBsIAlcCisJICAgICAgJCh0b3BfYnVpbGRkaXIpLyQkZGlyLyouZ2Nvdi5vdXQgPgkJCVwKKwkgICAgICBjb3ZlcmFnZS8kJGRpci9pbmRleC54bWw7CQkJCQlcCisJICAgIHhzbHRwcm9jICQodG9wX3NyY2RpcikvY29tbW9uL2NvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC54c2wJXAorCSAgICAgIGNvdmVyYWdlLyQkZGlyL2luZGV4LnhtbCA+IGNvdmVyYWdlLyQkZGlyL2luZGV4Lmh0bWw7CVwKKwkgIGZpOyBcCisgICAgICAgIGRvbmUKKworCWZvciBmaWxlIGluICQoQ09WRVJBR0VfRklMRVNfUkVMKTsgZG8JCQkJXAorCSAgZWNobyBHZW5lcmF0aW5nIGNvdmVyYWdlLyQkZmlsZS5odG1sOyAJCQlcCisJICBwZXJsICQodG9wX3NyY2RpcikvY29tbW9uL2NvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC1lbnRyeS5wbCAgIFwKKwkgICAgJCh0b3BfYnVpbGRkaXIpLyQkZmlsZSA+IGNvdmVyYWdlLyQkZmlsZS5odG1sOyAJCVwKKwlkb25lCmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9NYWtlZmlsZS5pbiBiL3Rlc3RzL2NoZWNrL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NTFjYmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDMyNDggQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorRElTVF9DT01NT04gPSAkKG5vaW5zdF9IRUFERVJTKSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gXAorCSQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2NvbW1vbi9jaGVjay5tYWsKK2NoZWNrX1BST0dSQU1TID0gZ3N0L2dzdGJ1ZmZlciQoRVhFRVhUKSBnc3QvZ3N0YnVmZmVybGlzdCQoRVhFRVhUKSBcCisJZ3N0L2dzdG1ldGEkKEVYRUVYVCkgZ3N0L2dzdGJ1cyQoRVhFRVhUKSBnc3QvZ3N0Y2FwcyQoRVhFRVhUKSBcCisJJChhbV9fRVhFRVhUXzEpIGdzdC9nc3RkYXRldGltZSQoRVhFRVhUKSBnc3QvZ3N0aW5mbyQoRVhFRVhUKSBcCisJZ3N0L2dzdGl0ZXJhdG9yJChFWEVFWFQpIGdzdC9nc3RtZXNzYWdlJChFWEVFWFQpIFwKKwlnc3QvZ3N0bWluaW9iamVjdCQoRVhFRVhUKSBnc3QvZ3N0b2JqZWN0JChFWEVFWFQpIFwKKwlnc3QvZ3N0cGFkJChFWEVFWFQpIGdzdC9nc3RwYXJhbXNwZWNzJChFWEVFWFQpIFwKKwlnc3QvZ3N0cG9sbCQoRVhFRVhUKSBnc3QvZ3N0c2VnbWVudCQoRVhFRVhUKSBcCisJZ3N0L2dzdHN5c3RlbWNsb2NrJChFWEVFWFQpIGdzdC9nc3RjbG9jayQoRVhFRVhUKSBcCisJZ3N0L2dzdHN0cnVjdHVyZSQoRVhFRVhUKSBnc3QvZ3N0dGFnJChFWEVFWFQpIFwKKwlnc3QvZ3N0dGFnc2V0dGVyJChFWEVFWFQpIGdzdC9nc3R0YXNrJChFWEVFWFQpIFwKKwlnc3QvZ3N0dmFsdWUkKEVYRUVYVCkgZ2VuZXJpYy9zdGF0ZXMkKEVYRUVYVCkgJChhbV9fRVhFRVhUXzIpIFwKKwkkKGFtX19FWEVFWFRfMykgbGlicy9nZHAkKEVYRUVYVCkgbGlicy9hZGFwdGVyJChFWEVFWFQpIFwKKwlsaWJzL2JpdHJlYWRlciQoRVhFRVhUKSBsaWJzL2J5dGVyZWFkZXIkKEVYRUVYVCkgXAorCWxpYnMvYnl0ZXdyaXRlciQoRVhFRVhUKSBsaWJzL2dzdG5ldGNsaWVudGNsb2NrJChFWEVFWFQpIFwKKwlsaWJzL2dzdG5ldHRpbWVwcm92aWRlciQoRVhFRVhUKSBsaWJzL3RyYW5zZm9ybTEkKEVYRUVYVCkKK25vaW5zdF9QUk9HUkFNUyA9IGdzdC9nc3RwaXBlbGluZSQoRVhFRVhUKSBsaWJzL2NvbGxlY3RwYWRzJChFWEVFWFQpCitzdWJkaXIgPSB0ZXN0cy9jaGVjaworQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXB5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtc2NydWItaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitASEFWRV9DWFhfVFJVRUBhbV9fRVhFRVhUXzEgPSBnc3QvZ3N0Y3BwJChFWEVFWFQpIFwKK0BIQVZFX0NYWF9UUlVFQAlsaWJzL2dzdGxpYnNjcHAkKEVYRUVYVCkKK0BHU1RfRElTQUJMRV9QQVJTRV9GQUxTRUBhbV9fRVhFRVhUXzIgPSBwaXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcyQoRVhFRVhUKSBcCitAR1NUX0RJU0FCTEVfUEFSU0VfRkFMU0VACXBpcGVsaW5lcy9jbGVhbnVwJChFWEVFWFQpIFwKK0BHU1RfRElTQUJMRV9QQVJTRV9GQUxTRUAJcGlwZWxpbmVzL3BhcnNlLWxhdW5jaCQoRVhFRVhUKQorQEdTVF9ESVNBQkxFX1BBUlNFX1RSVUVAYW1fX0VYRUVYVF8yID0gIFwKK0BHU1RfRElTQUJMRV9QQVJTRV9UUlVFQAlwaXBlbGluZXMvcGFyc2UtZGlzYWJsZWQkKEVYRUVYVCkKK0BHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUBhbV9fRVhFRVhUXzMgPSBnc3QvZ3N0JChFWEVFWFQpIFwKK0BHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZ3N0L2dzdGJpbiQoRVhFRVhUKSBcCitAR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWdzdC9nc3RjaGlsZHByb3h5JChFWEVFWFQpIFwKK0BHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZ3N0L2dzdGVsZW1lbnQkKEVYRUVYVCkgXAorQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlnc3QvZ3N0ZWxlbWVudGZhY3RvcnkkKEVYRUVYVCkgXAorQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlnc3QvZ3N0ZXZlbnQkKEVYRUVYVCkgXAorQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlnc3QvZ3N0Z2hvc3RwYWQkKEVYRUVYVCkgXAorQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlnc3QvZ3N0aW5kZXgkKEVYRUVYVCkgXAorQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlnc3QvZ3N0cGx1Z2luJChFWEVFWFQpIFwKK0BHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZ3N0L2dzdHByZXNldCQoRVhFRVhUKSBcCitAR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWdzdC9nc3RxdWVyeSQoRVhFRVhUKSBcCitAR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWdzdC9nc3RyZWdpc3RyeSQoRVhFRVhUKSBcCitAR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWdzdC9nc3R1cmkkKEVYRUVYVCkgXAorQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlnc3QvZ3N0dXRpbHMkKEVYRUVYVCkgXAorQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlnZW5lcmljL3NpbmtzJChFWEVFWFQpIFwKK0BHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZWxlbWVudHMvY2Fwc2ZpbHRlciQoRVhFRVhUKSBcCitAR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWVsZW1lbnRzL2Zha2VzaW5rJChFWEVFWFQpIFwKK0BHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZWxlbWVudHMvZmFrZXNyYyQoRVhFRVhUKSBcCitAR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWVsZW1lbnRzL2Zkc3JjJChFWEVFWFQpIFwKK0BHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZWxlbWVudHMvZmlsZXNpbmskKEVYRUVYVCkgXAorQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAllbGVtZW50cy9maWxlc3JjJChFWEVFWFQpIFwKK0BHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZWxlbWVudHMvZnVubmVsJChFWEVFWFQpIFwKK0BHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZWxlbWVudHMvaWRlbnRpdHkkKEVYRUVYVCkgXAorQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAllbGVtZW50cy9tdWx0aXF1ZXVlJChFWEVFWFQpIFwKK0BHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZWxlbWVudHMvc2VsZWN0b3IkKEVYRUVYVCkgXAorQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAllbGVtZW50cy90ZWUkKEVYRUVYVCkgXAorQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAllbGVtZW50cy9xdWV1ZSQoRVhFRVhUKSBcCitAR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWVsZW1lbnRzL3F1ZXVlMiQoRVhFRVhUKSBcCitAR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWVsZW1lbnRzL3ZhbHZlJChFWEVFWFQpIFwKK0BHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJbGlicy9iYXNlc3JjJChFWEVFWFQpIFwKK0BHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJbGlicy9iYXNlc2luayQoRVhFRVhUKSBcCitAR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWxpYnMvY29udHJvbGxlciQoRVhFRVhUKSBcCitAR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWxpYnMvdHlwZWZpbmRoZWxwZXIkKEVYRUVYVCkgXAorQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlwaXBlbGluZXMvc3RyZXNzJChFWEVFWFQpIFwKK0BHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJcGlwZWxpbmVzL3F1ZXVlLWVycm9yJChFWEVFWFQpCitQUk9HUkFNUyA9ICQobm9pbnN0X1BST0dSQU1TKQorZWxlbWVudHNfY2Fwc2ZpbHRlcl9TT1VSQ0VTID0gZWxlbWVudHMvY2Fwc2ZpbHRlci5jCitlbGVtZW50c19jYXBzZmlsdGVyX09CSkVDVFMgPSBjYXBzZmlsdGVyLiQoT0JKRVhUKQorZWxlbWVudHNfY2Fwc2ZpbHRlcl9MREFERCA9ICQoTERBREQpCithbV9fREVQRU5ERU5DSUVTXzEgPQorZWxlbWVudHNfY2Fwc2ZpbHRlcl9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK0FNX1ZfbHQgPSAkKGFtX192X2x0XyQoVikpCithbV9fdl9sdF8gPSAkKGFtX192X2x0XyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfbHRfMCA9IC0tc2lsZW50CithbV9fZGlyc3RhbXAgPSAkKGFtX19sZWFkaW5nX2RvdClkaXJzdGFtcAorZWxlbWVudHNfZmFrZXNpbmtfU09VUkNFUyA9IGVsZW1lbnRzL2Zha2VzaW5rLmMKK2VsZW1lbnRzX2Zha2VzaW5rX09CSkVDVFMgPSBmYWtlc2luay4kKE9CSkVYVCkKK2VsZW1lbnRzX2Zha2VzaW5rX0xEQUREID0gJChMREFERCkKK2VsZW1lbnRzX2Zha2VzaW5rX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorZWxlbWVudHNfZmFrZXNyY19TT1VSQ0VTID0gZWxlbWVudHMvZmFrZXNyYy5jCitlbGVtZW50c19mYWtlc3JjX09CSkVDVFMgPSBmYWtlc3JjLiQoT0JKRVhUKQorZWxlbWVudHNfZmFrZXNyY19MREFERCA9ICQoTERBREQpCitlbGVtZW50c19mYWtlc3JjX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorZWxlbWVudHNfZmRzcmNfU09VUkNFUyA9IGVsZW1lbnRzL2Zkc3JjLmMKK2VsZW1lbnRzX2Zkc3JjX09CSkVDVFMgPSBlbGVtZW50c19mZHNyYy1mZHNyYy4kKE9CSkVYVCkKK2VsZW1lbnRzX2Zkc3JjX0xEQUREID0gJChMREFERCkKK2VsZW1lbnRzX2Zkc3JjX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorZWxlbWVudHNfZmRzcmNfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCisJJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKKwkkKGVsZW1lbnRzX2Zkc3JjX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyBcCisJJEAKK2VsZW1lbnRzX2ZpbGVzaW5rX1NPVVJDRVMgPSBlbGVtZW50cy9maWxlc2luay5jCitlbGVtZW50c19maWxlc2lua19PQkpFQ1RTID0gZmlsZXNpbmsuJChPQkpFWFQpCitlbGVtZW50c19maWxlc2lua19MREFERCA9ICQoTERBREQpCitlbGVtZW50c19maWxlc2lua19ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2VsZW1lbnRzX2ZpbGVzcmNfU09VUkNFUyA9IGVsZW1lbnRzL2ZpbGVzcmMuYworZWxlbWVudHNfZmlsZXNyY19PQkpFQ1RTID0gZWxlbWVudHNfZmlsZXNyYy1maWxlc3JjLiQoT0JKRVhUKQorZWxlbWVudHNfZmlsZXNyY19MREFERCA9ICQoTERBREQpCitlbGVtZW50c19maWxlc3JjX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorZWxlbWVudHNfZmlsZXNyY19MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKKwkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAorCSQoZWxlbWVudHNfZmlsZXNyY19DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgXAorCS1vICRACitlbGVtZW50c19mdW5uZWxfU09VUkNFUyA9IGVsZW1lbnRzL2Z1bm5lbC5jCitlbGVtZW50c19mdW5uZWxfT0JKRUNUUyA9IGZ1bm5lbC4kKE9CSkVYVCkKK2VsZW1lbnRzX2Z1bm5lbF9MREFERCA9ICQoTERBREQpCitlbGVtZW50c19mdW5uZWxfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitlbGVtZW50c19pZGVudGl0eV9TT1VSQ0VTID0gZWxlbWVudHMvaWRlbnRpdHkuYworZWxlbWVudHNfaWRlbnRpdHlfT0JKRUNUUyA9IGlkZW50aXR5LiQoT0JKRVhUKQorZWxlbWVudHNfaWRlbnRpdHlfTERBREQgPSAkKExEQUREKQorZWxlbWVudHNfaWRlbnRpdHlfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitlbGVtZW50c19tdWx0aXF1ZXVlX1NPVVJDRVMgPSBlbGVtZW50cy9tdWx0aXF1ZXVlLmMKK2VsZW1lbnRzX211bHRpcXVldWVfT0JKRUNUUyA9IG11bHRpcXVldWUuJChPQkpFWFQpCitlbGVtZW50c19tdWx0aXF1ZXVlX0xEQUREID0gJChMREFERCkKK2VsZW1lbnRzX211bHRpcXVldWVfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitlbGVtZW50c19xdWV1ZV9TT1VSQ0VTID0gZWxlbWVudHMvcXVldWUuYworZWxlbWVudHNfcXVldWVfT0JKRUNUUyA9IHF1ZXVlLiQoT0JKRVhUKQorZWxlbWVudHNfcXVldWVfTERBREQgPSAkKExEQUREKQorZWxlbWVudHNfcXVldWVfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitlbGVtZW50c19xdWV1ZTJfU09VUkNFUyA9IGVsZW1lbnRzL3F1ZXVlMi5jCitlbGVtZW50c19xdWV1ZTJfT0JKRUNUUyA9IHF1ZXVlMi4kKE9CSkVYVCkKK2VsZW1lbnRzX3F1ZXVlMl9MREFERCA9ICQoTERBREQpCitlbGVtZW50c19xdWV1ZTJfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitlbGVtZW50c19zZWxlY3Rvcl9TT1VSQ0VTID0gZWxlbWVudHMvc2VsZWN0b3IuYworZWxlbWVudHNfc2VsZWN0b3JfT0JKRUNUUyA9IHNlbGVjdG9yLiQoT0JKRVhUKQorZWxlbWVudHNfc2VsZWN0b3JfTERBREQgPSAkKExEQUREKQorZWxlbWVudHNfc2VsZWN0b3JfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitlbGVtZW50c190ZWVfU09VUkNFUyA9IGVsZW1lbnRzL3RlZS5jCitlbGVtZW50c190ZWVfT0JKRUNUUyA9IHRlZS4kKE9CSkVYVCkKK2VsZW1lbnRzX3RlZV9MREFERCA9ICQoTERBREQpCitlbGVtZW50c190ZWVfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitlbGVtZW50c192YWx2ZV9TT1VSQ0VTID0gZWxlbWVudHMvdmFsdmUuYworZWxlbWVudHNfdmFsdmVfT0JKRUNUUyA9IHZhbHZlLiQoT0JKRVhUKQorZWxlbWVudHNfdmFsdmVfTERBREQgPSAkKExEQUREKQorZWxlbWVudHNfdmFsdmVfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitnZW5lcmljX3NpbmtzX1NPVVJDRVMgPSBnZW5lcmljL3NpbmtzLmMKK2dlbmVyaWNfc2lua3NfT0JKRUNUUyA9IHNpbmtzLiQoT0JKRVhUKQorZ2VuZXJpY19zaW5rc19MREFERCA9ICQoTERBREQpCitnZW5lcmljX3NpbmtzX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorZ2VuZXJpY19zdGF0ZXNfU09VUkNFUyA9IGdlbmVyaWMvc3RhdGVzLmMKK2dlbmVyaWNfc3RhdGVzX09CSkVDVFMgPSBzdGF0ZXMuJChPQkpFWFQpCitnZW5lcmljX3N0YXRlc19MREFERCA9ICQoTERBREQpCitnZW5lcmljX3N0YXRlc19ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2dzdF9nc3RfU09VUkNFUyA9IGdzdC9nc3QuYworZ3N0X2dzdF9PQkpFQ1RTID0gZ3N0LiQoT0JKRVhUKQorZ3N0X2dzdF9MREFERCA9ICQoTERBREQpCitnc3RfZ3N0X0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorZ3N0X2dzdGJpbl9TT1VSQ0VTID0gZ3N0L2dzdGJpbi5jCitnc3RfZ3N0YmluX09CSkVDVFMgPSBnc3RiaW4uJChPQkpFWFQpCitnc3RfZ3N0YmluX0xEQUREID0gJChMREFERCkKK2dzdF9nc3RiaW5fREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitnc3RfZ3N0YnVmZmVyX1NPVVJDRVMgPSBnc3QvZ3N0YnVmZmVyLmMKK2dzdF9nc3RidWZmZXJfT0JKRUNUUyA9IGdzdGJ1ZmZlci4kKE9CSkVYVCkKK2dzdF9nc3RidWZmZXJfTERBREQgPSAkKExEQUREKQorZ3N0X2dzdGJ1ZmZlcl9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2dzdF9nc3RidWZmZXJsaXN0X1NPVVJDRVMgPSBnc3QvZ3N0YnVmZmVybGlzdC5jCitnc3RfZ3N0YnVmZmVybGlzdF9PQkpFQ1RTID0gZ3N0YnVmZmVybGlzdC4kKE9CSkVYVCkKK2dzdF9nc3RidWZmZXJsaXN0X0xEQUREID0gJChMREFERCkKK2dzdF9nc3RidWZmZXJsaXN0X0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorZ3N0X2dzdGJ1c19TT1VSQ0VTID0gZ3N0L2dzdGJ1cy5jCitnc3RfZ3N0YnVzX09CSkVDVFMgPSBnc3RidXMuJChPQkpFWFQpCitnc3RfZ3N0YnVzX0xEQUREID0gJChMREFERCkKK2dzdF9nc3RidXNfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitnc3RfZ3N0Y2Fwc19TT1VSQ0VTID0gZ3N0L2dzdGNhcHMuYworZ3N0X2dzdGNhcHNfT0JKRUNUUyA9IGdzdGNhcHMuJChPQkpFWFQpCitnc3RfZ3N0Y2Fwc19MREFERCA9ICQoTERBREQpCitnc3RfZ3N0Y2Fwc19ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2dzdF9nc3RjaGlsZHByb3h5X1NPVVJDRVMgPSBnc3QvZ3N0Y2hpbGRwcm94eS5jCitnc3RfZ3N0Y2hpbGRwcm94eV9PQkpFQ1RTID0gZ3N0Y2hpbGRwcm94eS4kKE9CSkVYVCkKK2dzdF9nc3RjaGlsZHByb3h5X0xEQUREID0gJChMREFERCkKK2dzdF9nc3RjaGlsZHByb3h5X0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorZ3N0X2dzdGNsb2NrX1NPVVJDRVMgPSBnc3QvZ3N0Y2xvY2suYworZ3N0X2dzdGNsb2NrX09CSkVDVFMgPSBnc3RjbG9jay4kKE9CSkVYVCkKK2dzdF9nc3RjbG9ja19MREFERCA9ICQoTERBREQpCitnc3RfZ3N0Y2xvY2tfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCithbV9nc3RfZ3N0Y3BwX09CSkVDVFMgPSBnc3RjcHAuJChPQkpFWFQpCitnc3RfZ3N0Y3BwX09CSkVDVFMgPSAkKGFtX2dzdF9nc3RjcHBfT0JKRUNUUykKK2dzdF9nc3RjcHBfTERBREQgPSAkKExEQUREKQorZ3N0X2dzdGNwcF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2dzdF9nc3RkYXRldGltZV9TT1VSQ0VTID0gZ3N0L2dzdGRhdGV0aW1lLmMKK2dzdF9nc3RkYXRldGltZV9PQkpFQ1RTID0gZ3N0ZGF0ZXRpbWUuJChPQkpFWFQpCitnc3RfZ3N0ZGF0ZXRpbWVfTERBREQgPSAkKExEQUREKQorZ3N0X2dzdGRhdGV0aW1lX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorZ3N0X2dzdGVsZW1lbnRfU09VUkNFUyA9IGdzdC9nc3RlbGVtZW50LmMKK2dzdF9nc3RlbGVtZW50X09CSkVDVFMgPSBnc3RlbGVtZW50LiQoT0JKRVhUKQorZ3N0X2dzdGVsZW1lbnRfTERBREQgPSAkKExEQUREKQorZ3N0X2dzdGVsZW1lbnRfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitnc3RfZ3N0ZWxlbWVudGZhY3RvcnlfU09VUkNFUyA9IGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jCitnc3RfZ3N0ZWxlbWVudGZhY3RvcnlfT0JKRUNUUyA9IGdzdGVsZW1lbnRmYWN0b3J5LiQoT0JKRVhUKQorZ3N0X2dzdGVsZW1lbnRmYWN0b3J5X0xEQUREID0gJChMREFERCkKK2dzdF9nc3RlbGVtZW50ZmFjdG9yeV9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2dzdF9nc3RldmVudF9TT1VSQ0VTID0gZ3N0L2dzdGV2ZW50LmMKK2dzdF9nc3RldmVudF9PQkpFQ1RTID0gZ3N0ZXZlbnQuJChPQkpFWFQpCitnc3RfZ3N0ZXZlbnRfTERBREQgPSAkKExEQUREKQorZ3N0X2dzdGV2ZW50X0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorZ3N0X2dzdGdob3N0cGFkX1NPVVJDRVMgPSBnc3QvZ3N0Z2hvc3RwYWQuYworZ3N0X2dzdGdob3N0cGFkX09CSkVDVFMgPSBnc3RnaG9zdHBhZC4kKE9CSkVYVCkKK2dzdF9nc3RnaG9zdHBhZF9MREFERCA9ICQoTERBREQpCitnc3RfZ3N0Z2hvc3RwYWRfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitnc3RfZ3N0aW5kZXhfU09VUkNFUyA9IGdzdC9nc3RpbmRleC5jCitnc3RfZ3N0aW5kZXhfT0JKRUNUUyA9IGdzdGluZGV4LiQoT0JKRVhUKQorZ3N0X2dzdGluZGV4X0xEQUREID0gJChMREFERCkKK2dzdF9nc3RpbmRleF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2dzdF9nc3RpbmZvX1NPVVJDRVMgPSBnc3QvZ3N0aW5mby5jCitnc3RfZ3N0aW5mb19PQkpFQ1RTID0gZ3N0aW5mby4kKE9CSkVYVCkKK2dzdF9nc3RpbmZvX0xEQUREID0gJChMREFERCkKK2dzdF9nc3RpbmZvX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorZ3N0X2dzdGl0ZXJhdG9yX1NPVVJDRVMgPSBnc3QvZ3N0aXRlcmF0b3IuYworZ3N0X2dzdGl0ZXJhdG9yX09CSkVDVFMgPSBnc3RpdGVyYXRvci4kKE9CSkVYVCkKK2dzdF9nc3RpdGVyYXRvcl9MREFERCA9ICQoTERBREQpCitnc3RfZ3N0aXRlcmF0b3JfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitnc3RfZ3N0bWVzc2FnZV9TT1VSQ0VTID0gZ3N0L2dzdG1lc3NhZ2UuYworZ3N0X2dzdG1lc3NhZ2VfT0JKRUNUUyA9IGdzdG1lc3NhZ2UuJChPQkpFWFQpCitnc3RfZ3N0bWVzc2FnZV9MREFERCA9ICQoTERBREQpCitnc3RfZ3N0bWVzc2FnZV9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2dzdF9nc3RtZXRhX1NPVVJDRVMgPSBnc3QvZ3N0bWV0YS5jCitnc3RfZ3N0bWV0YV9PQkpFQ1RTID0gZ3N0bWV0YS4kKE9CSkVYVCkKK2dzdF9nc3RtZXRhX0xEQUREID0gJChMREFERCkKK2dzdF9nc3RtZXRhX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorZ3N0X2dzdG1pbmlvYmplY3RfU09VUkNFUyA9IGdzdC9nc3RtaW5pb2JqZWN0LmMKK2dzdF9nc3RtaW5pb2JqZWN0X09CSkVDVFMgPSBnc3RtaW5pb2JqZWN0LiQoT0JKRVhUKQorZ3N0X2dzdG1pbmlvYmplY3RfTERBREQgPSAkKExEQUREKQorZ3N0X2dzdG1pbmlvYmplY3RfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitnc3RfZ3N0b2JqZWN0X1NPVVJDRVMgPSBnc3QvZ3N0b2JqZWN0LmMKK2dzdF9nc3RvYmplY3RfT0JKRUNUUyA9IGdzdG9iamVjdC4kKE9CSkVYVCkKK2dzdF9nc3RvYmplY3RfTERBREQgPSAkKExEQUREKQorZ3N0X2dzdG9iamVjdF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2dzdF9nc3RwYWRfU09VUkNFUyA9IGdzdC9nc3RwYWQuYworZ3N0X2dzdHBhZF9PQkpFQ1RTID0gZ3N0cGFkLiQoT0JKRVhUKQorZ3N0X2dzdHBhZF9MREFERCA9ICQoTERBREQpCitnc3RfZ3N0cGFkX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorZ3N0X2dzdHBhcmFtc3BlY3NfU09VUkNFUyA9IGdzdC9nc3RwYXJhbXNwZWNzLmMKK2dzdF9nc3RwYXJhbXNwZWNzX09CSkVDVFMgPSBnc3RwYXJhbXNwZWNzLiQoT0JKRVhUKQorZ3N0X2dzdHBhcmFtc3BlY3NfTERBREQgPSAkKExEQUREKQorZ3N0X2dzdHBhcmFtc3BlY3NfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitnc3RfZ3N0cGlwZWxpbmVfU09VUkNFUyA9IGdzdC9nc3RwaXBlbGluZS5jCitnc3RfZ3N0cGlwZWxpbmVfT0JKRUNUUyA9IGdzdHBpcGVsaW5lLiQoT0JKRVhUKQorZ3N0X2dzdHBpcGVsaW5lX0xEQUREID0gJChMREFERCkKK2dzdF9nc3RwaXBlbGluZV9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2dzdF9nc3RwbHVnaW5fU09VUkNFUyA9IGdzdC9nc3RwbHVnaW4uYworZ3N0X2dzdHBsdWdpbl9PQkpFQ1RTID0gZ3N0cGx1Z2luLiQoT0JKRVhUKQorZ3N0X2dzdHBsdWdpbl9MREFERCA9ICQoTERBREQpCitnc3RfZ3N0cGx1Z2luX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorZ3N0X2dzdHBvbGxfU09VUkNFUyA9IGdzdC9nc3Rwb2xsLmMKK2dzdF9nc3Rwb2xsX09CSkVDVFMgPSBnc3Rwb2xsLiQoT0JKRVhUKQorZ3N0X2dzdHBvbGxfTERBREQgPSAkKExEQUREKQorZ3N0X2dzdHBvbGxfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitnc3RfZ3N0cHJlc2V0X1NPVVJDRVMgPSBnc3QvZ3N0cHJlc2V0LmMKK2dzdF9nc3RwcmVzZXRfT0JKRUNUUyA9IGdzdHByZXNldC4kKE9CSkVYVCkKK2dzdF9nc3RwcmVzZXRfTERBREQgPSAkKExEQUREKQorZ3N0X2dzdHByZXNldF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2dzdF9nc3RxdWVyeV9TT1VSQ0VTID0gZ3N0L2dzdHF1ZXJ5LmMKK2dzdF9nc3RxdWVyeV9PQkpFQ1RTID0gZ3N0cXVlcnkuJChPQkpFWFQpCitnc3RfZ3N0cXVlcnlfTERBREQgPSAkKExEQUREKQorZ3N0X2dzdHF1ZXJ5X0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorZ3N0X2dzdHJlZ2lzdHJ5X1NPVVJDRVMgPSBnc3QvZ3N0cmVnaXN0cnkuYworZ3N0X2dzdHJlZ2lzdHJ5X09CSkVDVFMgPSBnc3RyZWdpc3RyeS4kKE9CSkVYVCkKK2dzdF9nc3RyZWdpc3RyeV9MREFERCA9ICQoTERBREQpCitnc3RfZ3N0cmVnaXN0cnlfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitnc3RfZ3N0c2VnbWVudF9TT1VSQ0VTID0gZ3N0L2dzdHNlZ21lbnQuYworZ3N0X2dzdHNlZ21lbnRfT0JKRUNUUyA9IGdzdHNlZ21lbnQuJChPQkpFWFQpCitnc3RfZ3N0c2VnbWVudF9MREFERCA9ICQoTERBREQpCitnc3RfZ3N0c2VnbWVudF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2dzdF9nc3RzdHJ1Y3R1cmVfU09VUkNFUyA9IGdzdC9nc3RzdHJ1Y3R1cmUuYworZ3N0X2dzdHN0cnVjdHVyZV9PQkpFQ1RTID0gZ3N0c3RydWN0dXJlLiQoT0JKRVhUKQorZ3N0X2dzdHN0cnVjdHVyZV9MREFERCA9ICQoTERBREQpCitnc3RfZ3N0c3RydWN0dXJlX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorZ3N0X2dzdHN5c3RlbWNsb2NrX1NPVVJDRVMgPSBnc3QvZ3N0c3lzdGVtY2xvY2suYworZ3N0X2dzdHN5c3RlbWNsb2NrX09CSkVDVFMgPSBnc3RzeXN0ZW1jbG9jay4kKE9CSkVYVCkKK2dzdF9nc3RzeXN0ZW1jbG9ja19MREFERCA9ICQoTERBREQpCitnc3RfZ3N0c3lzdGVtY2xvY2tfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitnc3RfZ3N0dGFnX1NPVVJDRVMgPSBnc3QvZ3N0dGFnLmMKK2dzdF9nc3R0YWdfT0JKRUNUUyA9IGdzdHRhZy4kKE9CSkVYVCkKK2dzdF9nc3R0YWdfTERBREQgPSAkKExEQUREKQorZ3N0X2dzdHRhZ19ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2dzdF9nc3R0YWdzZXR0ZXJfU09VUkNFUyA9IGdzdC9nc3R0YWdzZXR0ZXIuYworZ3N0X2dzdHRhZ3NldHRlcl9PQkpFQ1RTID0gZ3N0dGFnc2V0dGVyLiQoT0JKRVhUKQorZ3N0X2dzdHRhZ3NldHRlcl9MREFERCA9ICQoTERBREQpCitnc3RfZ3N0dGFnc2V0dGVyX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorZ3N0X2dzdHRhc2tfU09VUkNFUyA9IGdzdC9nc3R0YXNrLmMKK2dzdF9nc3R0YXNrX09CSkVDVFMgPSBnc3R0YXNrLiQoT0JKRVhUKQorZ3N0X2dzdHRhc2tfTERBREQgPSAkKExEQUREKQorZ3N0X2dzdHRhc2tfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitnc3RfZ3N0dXJpX1NPVVJDRVMgPSBnc3QvZ3N0dXJpLmMKK2dzdF9nc3R1cmlfT0JKRUNUUyA9IGdzdHVyaS4kKE9CSkVYVCkKK2dzdF9nc3R1cmlfTERBREQgPSAkKExEQUREKQorZ3N0X2dzdHVyaV9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2dzdF9nc3R1dGlsc19TT1VSQ0VTID0gZ3N0L2dzdHV0aWxzLmMKK2dzdF9nc3R1dGlsc19PQkpFQ1RTID0gZ3N0dXRpbHMuJChPQkpFWFQpCithbV9fREVQRU5ERU5DSUVTXzIgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2dzdF9nc3R1dGlsc19ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMikgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2dzdF9nc3R2YWx1ZV9TT1VSQ0VTID0gZ3N0L2dzdHZhbHVlLmMKK2dzdF9nc3R2YWx1ZV9PQkpFQ1RTID0gZ3N0dmFsdWUuJChPQkpFWFQpCitnc3RfZ3N0dmFsdWVfTERBREQgPSAkKExEQUREKQorZ3N0X2dzdHZhbHVlX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorbGlic19hZGFwdGVyX1NPVVJDRVMgPSBsaWJzL2FkYXB0ZXIuYworbGlic19hZGFwdGVyX09CSkVDVFMgPSBhZGFwdGVyLiQoT0JKRVhUKQorbGlic19hZGFwdGVyX0xEQUREID0gJChMREFERCkKK2xpYnNfYWRhcHRlcl9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2xpYnNfYmFzZXNpbmtfU09VUkNFUyA9IGxpYnMvYmFzZXNpbmsuYworbGlic19iYXNlc2lua19PQkpFQ1RTID0gYmFzZXNpbmsuJChPQkpFWFQpCitsaWJzX2Jhc2VzaW5rX0xEQUREID0gJChMREFERCkKK2xpYnNfYmFzZXNpbmtfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitsaWJzX2Jhc2VzcmNfU09VUkNFUyA9IGxpYnMvYmFzZXNyYy5jCitsaWJzX2Jhc2VzcmNfT0JKRUNUUyA9IGJhc2VzcmMuJChPQkpFWFQpCitsaWJzX2Jhc2VzcmNfTERBREQgPSAkKExEQUREKQorbGlic19iYXNlc3JjX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorbGlic19iaXRyZWFkZXJfU09VUkNFUyA9IGxpYnMvYml0cmVhZGVyLmMKK2xpYnNfYml0cmVhZGVyX09CSkVDVFMgPSBiaXRyZWFkZXIuJChPQkpFWFQpCitsaWJzX2JpdHJlYWRlcl9MREFERCA9ICQoTERBREQpCitsaWJzX2JpdHJlYWRlcl9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2xpYnNfYnl0ZXJlYWRlcl9TT1VSQ0VTID0gbGlicy9ieXRlcmVhZGVyLmMKK2xpYnNfYnl0ZXJlYWRlcl9PQkpFQ1RTID0gYnl0ZXJlYWRlci4kKE9CSkVYVCkKK2xpYnNfYnl0ZXJlYWRlcl9MREFERCA9ICQoTERBREQpCitsaWJzX2J5dGVyZWFkZXJfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitsaWJzX2J5dGV3cml0ZXJfU09VUkNFUyA9IGxpYnMvYnl0ZXdyaXRlci5jCitsaWJzX2J5dGV3cml0ZXJfT0JKRUNUUyA9IGJ5dGV3cml0ZXIuJChPQkpFWFQpCitsaWJzX2J5dGV3cml0ZXJfTERBREQgPSAkKExEQUREKQorbGlic19ieXRld3JpdGVyX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorbGlic19jb2xsZWN0cGFkc19TT1VSQ0VTID0gbGlicy9jb2xsZWN0cGFkcy5jCitsaWJzX2NvbGxlY3RwYWRzX09CSkVDVFMgPSBjb2xsZWN0cGFkcy4kKE9CSkVYVCkKK2xpYnNfY29sbGVjdHBhZHNfTERBREQgPSAkKExEQUREKQorbGlic19jb2xsZWN0cGFkc19ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2xpYnNfY29udHJvbGxlcl9TT1VSQ0VTID0gbGlicy9jb250cm9sbGVyLmMKK2xpYnNfY29udHJvbGxlcl9PQkpFQ1RTID0gY29udHJvbGxlci4kKE9CSkVYVCkKK2xpYnNfY29udHJvbGxlcl9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY29udHJvbGxlci9saWJnc3Rjb250cm9sbGVyLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18yKQorYW1fbGlic19nZHBfT0JKRUNUUyA9IGdkcC4kKE9CSkVYVCkKK2xpYnNfZ2RwX09CSkVDVFMgPSAkKGFtX2xpYnNfZ2RwX09CSkVDVFMpCitsaWJzX2dkcF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvZGF0YXByb3RvY29sL2xpYmdzdGRhdGFwcm90b2NvbC1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMikKK2FtX2xpYnNfZ3N0bGlic2NwcF9PQkpFQ1RTID0gZ3N0bGlic2NwcC4kKE9CSkVYVCkKK2xpYnNfZ3N0bGlic2NwcF9PQkpFQ1RTID0gJChhbV9saWJzX2dzdGxpYnNjcHBfT0JKRUNUUykKK2xpYnNfZ3N0bGlic2NwcF9MREFERCA9ICQoTERBREQpCitsaWJzX2dzdGxpYnNjcHBfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitsaWJzX2dzdG5ldGNsaWVudGNsb2NrX1NPVVJDRVMgPSBsaWJzL2dzdG5ldGNsaWVudGNsb2NrLmMKK2xpYnNfZ3N0bmV0Y2xpZW50Y2xvY2tfT0JKRUNUUyA9IGdzdG5ldGNsaWVudGNsb2NrLiQoT0JKRVhUKQorbGlic19nc3RuZXRjbGllbnRjbG9ja19ERVBFTkRFTkNJRVMgPSAgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9uZXQvbGliZ3N0bmV0LUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18yKQorbGlic19nc3RuZXR0aW1lcHJvdmlkZXJfU09VUkNFUyA9IGxpYnMvZ3N0bmV0dGltZXByb3ZpZGVyLmMKK2xpYnNfZ3N0bmV0dGltZXByb3ZpZGVyX09CSkVDVFMgPSBnc3RuZXR0aW1lcHJvdmlkZXIuJChPQkpFWFQpCitsaWJzX2dzdG5ldHRpbWVwcm92aWRlcl9ERVBFTkRFTkNJRVMgPSAgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9uZXQvbGliZ3N0bmV0LUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18yKQorbGlic190cmFuc2Zvcm0xX1NPVVJDRVMgPSBsaWJzL3RyYW5zZm9ybTEuYworbGlic190cmFuc2Zvcm0xX09CSkVDVFMgPSB0cmFuc2Zvcm0xLiQoT0JKRVhUKQorbGlic190cmFuc2Zvcm0xX0xEQUREID0gJChMREFERCkKK2xpYnNfdHJhbnNmb3JtMV9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2xpYnNfdHlwZWZpbmRoZWxwZXJfU09VUkNFUyA9IGxpYnMvdHlwZWZpbmRoZWxwZXIuYworbGlic190eXBlZmluZGhlbHBlcl9PQkpFQ1RTID0gdHlwZWZpbmRoZWxwZXIuJChPQkpFWFQpCitsaWJzX3R5cGVmaW5kaGVscGVyX0xEQUREID0gJChMREFERCkKK2xpYnNfdHlwZWZpbmRoZWxwZXJfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitwaXBlbGluZXNfY2xlYW51cF9TT1VSQ0VTID0gcGlwZWxpbmVzL2NsZWFudXAuYworcGlwZWxpbmVzX2NsZWFudXBfT0JKRUNUUyA9IGNsZWFudXAuJChPQkpFWFQpCitwaXBlbGluZXNfY2xlYW51cF9MREFERCA9ICQoTERBREQpCitwaXBlbGluZXNfY2xlYW51cF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK3BpcGVsaW5lc19wYXJzZV9kaXNhYmxlZF9TT1VSQ0VTID0gcGlwZWxpbmVzL3BhcnNlLWRpc2FibGVkLmMKK3BpcGVsaW5lc19wYXJzZV9kaXNhYmxlZF9PQkpFQ1RTID0gcGFyc2UtZGlzYWJsZWQuJChPQkpFWFQpCitwaXBlbGluZXNfcGFyc2VfZGlzYWJsZWRfTERBREQgPSAkKExEQUREKQorcGlwZWxpbmVzX3BhcnNlX2Rpc2FibGVkX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorcGlwZWxpbmVzX3BhcnNlX2xhdW5jaF9TT1VSQ0VTID0gcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jCitwaXBlbGluZXNfcGFyc2VfbGF1bmNoX09CSkVDVFMgPSBwYXJzZS1sYXVuY2guJChPQkpFWFQpCitwaXBlbGluZXNfcGFyc2VfbGF1bmNoX0xEQUREID0gJChMREFERCkKK3BpcGVsaW5lc19wYXJzZV9sYXVuY2hfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitwaXBlbGluZXNfcXVldWVfZXJyb3JfU09VUkNFUyA9IHBpcGVsaW5lcy9xdWV1ZS1lcnJvci5jCitwaXBlbGluZXNfcXVldWVfZXJyb3JfT0JKRUNUUyA9IHF1ZXVlLWVycm9yLiQoT0JKRVhUKQorcGlwZWxpbmVzX3F1ZXVlX2Vycm9yX0xEQUREID0gJChMREFERCkKK3BpcGVsaW5lc19xdWV1ZV9lcnJvcl9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK3BpcGVsaW5lc19zaW1wbGVfbGF1bmNoX2xpbmVzX1NPVVJDRVMgPSAgXAorCXBpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmMKK3BpcGVsaW5lc19zaW1wbGVfbGF1bmNoX2xpbmVzX09CSkVDVFMgPSBzaW1wbGUtbGF1bmNoLWxpbmVzLiQoT0JKRVhUKQorcGlwZWxpbmVzX3NpbXBsZV9sYXVuY2hfbGluZXNfTERBREQgPSAkKExEQUREKQorcGlwZWxpbmVzX3NpbXBsZV9sYXVuY2hfbGluZXNfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitwaXBlbGluZXNfc3RyZXNzX1NPVVJDRVMgPSBwaXBlbGluZXMvc3RyZXNzLmMKK3BpcGVsaW5lc19zdHJlc3NfT0JKRUNUUyA9IHN0cmVzcy4kKE9CSkVYVCkKK3BpcGVsaW5lc19zdHJlc3NfTERBREQgPSAkKExEQUREKQorcGlwZWxpbmVzX3N0cmVzc19ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKwkkKEFNX0NGTEFHUykgJChDRkxBR1MpCitBTV9WX0NDID0gJChhbV9fdl9DQ18kKFYpKQorYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ18kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAiICRAOworQU1fVl9hdCA9ICQoYW1fX3ZfYXRfJChWKSkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9hdF8wID0gQAorQ0NMRCA9ICQoQ0MpCitMSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitBTV9WX0NDTEQgPSAkKGFtX192X0NDTERfJChWKSkKK2FtX192X0NDTERfID0gJChhbV9fdl9DQ0xEXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgIiAkQDsKK0NYWENPTVBJTEUgPSAkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKKwkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKQorTFRDWFhDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNYWCAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENYWCkgJChERUZTKSBcCisJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisJJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykKK0FNX1ZfQ1hYID0gJChhbV9fdl9DWFhfJChWKSkKK2FtX192X0NYWF8gPSAkKGFtX192X0NYWF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X0NYWF8wID0gQGVjaG8gIiAgQ1hYICAgIiAkQDsKK0NYWExEID0gJChDWFgpCitDWFhMSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNYWCAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENYWExEKSAkKEFNX0NYWEZMQUdTKSBcCisJJChDWFhGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitBTV9WX0NYWExEID0gJChhbV9fdl9DWFhMRF8kKFYpKQorYW1fX3ZfQ1hYTERfID0gJChhbV9fdl9DWFhMRF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X0NYWExEXzAgPSBAZWNobyAiICBDWFhMRCAiICRAOworQU1fVl9HRU4gPSAkKGFtX192X0dFTl8kKFYpKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworU09VUkNFUyA9IGVsZW1lbnRzL2NhcHNmaWx0ZXIuYyBlbGVtZW50cy9mYWtlc2luay5jIGVsZW1lbnRzL2Zha2VzcmMuYyBcCisJZWxlbWVudHMvZmRzcmMuYyBlbGVtZW50cy9maWxlc2luay5jIGVsZW1lbnRzL2ZpbGVzcmMuYyBcCisJZWxlbWVudHMvZnVubmVsLmMgZWxlbWVudHMvaWRlbnRpdHkuYyBlbGVtZW50cy9tdWx0aXF1ZXVlLmMgXAorCWVsZW1lbnRzL3F1ZXVlLmMgZWxlbWVudHMvcXVldWUyLmMgZWxlbWVudHMvc2VsZWN0b3IuYyBcCisJZWxlbWVudHMvdGVlLmMgZWxlbWVudHMvdmFsdmUuYyBnZW5lcmljL3NpbmtzLmMgXAorCWdlbmVyaWMvc3RhdGVzLmMgZ3N0L2dzdC5jIGdzdC9nc3RiaW4uYyBnc3QvZ3N0YnVmZmVyLmMgXAorCWdzdC9nc3RidWZmZXJsaXN0LmMgZ3N0L2dzdGJ1cy5jIGdzdC9nc3RjYXBzLmMgXAorCWdzdC9nc3RjaGlsZHByb3h5LmMgZ3N0L2dzdGNsb2NrLmMgJChnc3RfZ3N0Y3BwX1NPVVJDRVMpIFwKKwlnc3QvZ3N0ZGF0ZXRpbWUuYyBnc3QvZ3N0ZWxlbWVudC5jIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jIFwKKwlnc3QvZ3N0ZXZlbnQuYyBnc3QvZ3N0Z2hvc3RwYWQuYyBnc3QvZ3N0aW5kZXguYyBnc3QvZ3N0aW5mby5jIFwKKwlnc3QvZ3N0aXRlcmF0b3IuYyBnc3QvZ3N0bWVzc2FnZS5jIGdzdC9nc3RtZXRhLmMgXAorCWdzdC9nc3RtaW5pb2JqZWN0LmMgZ3N0L2dzdG9iamVjdC5jIGdzdC9nc3RwYWQuYyBcCisJZ3N0L2dzdHBhcmFtc3BlY3MuYyBnc3QvZ3N0cGlwZWxpbmUuYyBnc3QvZ3N0cGx1Z2luLmMgXAorCWdzdC9nc3Rwb2xsLmMgZ3N0L2dzdHByZXNldC5jIGdzdC9nc3RxdWVyeS5jIGdzdC9nc3RyZWdpc3RyeS5jIFwKKwlnc3QvZ3N0c2VnbWVudC5jIGdzdC9nc3RzdHJ1Y3R1cmUuYyBnc3QvZ3N0c3lzdGVtY2xvY2suYyBcCisJZ3N0L2dzdHRhZy5jIGdzdC9nc3R0YWdzZXR0ZXIuYyBnc3QvZ3N0dGFzay5jIGdzdC9nc3R1cmkuYyBcCisJZ3N0L2dzdHV0aWxzLmMgZ3N0L2dzdHZhbHVlLmMgbGlicy9hZGFwdGVyLmMgbGlicy9iYXNlc2luay5jIFwKKwlsaWJzL2Jhc2VzcmMuYyBsaWJzL2JpdHJlYWRlci5jIGxpYnMvYnl0ZXJlYWRlci5jIFwKKwlsaWJzL2J5dGV3cml0ZXIuYyBsaWJzL2NvbGxlY3RwYWRzLmMgbGlicy9jb250cm9sbGVyLmMgXAorCSQobGlic19nZHBfU09VUkNFUykgJChsaWJzX2dzdGxpYnNjcHBfU09VUkNFUykgXAorCWxpYnMvZ3N0bmV0Y2xpZW50Y2xvY2suYyBsaWJzL2dzdG5ldHRpbWVwcm92aWRlci5jIFwKKwlsaWJzL3RyYW5zZm9ybTEuYyBsaWJzL3R5cGVmaW5kaGVscGVyLmMgcGlwZWxpbmVzL2NsZWFudXAuYyBcCisJcGlwZWxpbmVzL3BhcnNlLWRpc2FibGVkLmMgcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jIFwKKwlwaXBlbGluZXMvcXVldWUtZXJyb3IuYyBwaXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jIFwKKwlwaXBlbGluZXMvc3RyZXNzLmMKK0RJU1RfU09VUkNFUyA9IGVsZW1lbnRzL2NhcHNmaWx0ZXIuYyBlbGVtZW50cy9mYWtlc2luay5jIFwKKwllbGVtZW50cy9mYWtlc3JjLmMgZWxlbWVudHMvZmRzcmMuYyBlbGVtZW50cy9maWxlc2luay5jIFwKKwllbGVtZW50cy9maWxlc3JjLmMgZWxlbWVudHMvZnVubmVsLmMgZWxlbWVudHMvaWRlbnRpdHkuYyBcCisJZWxlbWVudHMvbXVsdGlxdWV1ZS5jIGVsZW1lbnRzL3F1ZXVlLmMgZWxlbWVudHMvcXVldWUyLmMgXAorCWVsZW1lbnRzL3NlbGVjdG9yLmMgZWxlbWVudHMvdGVlLmMgZWxlbWVudHMvdmFsdmUuYyBcCisJZ2VuZXJpYy9zaW5rcy5jIGdlbmVyaWMvc3RhdGVzLmMgZ3N0L2dzdC5jIGdzdC9nc3RiaW4uYyBcCisJZ3N0L2dzdGJ1ZmZlci5jIGdzdC9nc3RidWZmZXJsaXN0LmMgZ3N0L2dzdGJ1cy5jIGdzdC9nc3RjYXBzLmMgXAorCWdzdC9nc3RjaGlsZHByb3h5LmMgZ3N0L2dzdGNsb2NrLmMgJChnc3RfZ3N0Y3BwX1NPVVJDRVMpIFwKKwlnc3QvZ3N0ZGF0ZXRpbWUuYyBnc3QvZ3N0ZWxlbWVudC5jIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jIFwKKwlnc3QvZ3N0ZXZlbnQuYyBnc3QvZ3N0Z2hvc3RwYWQuYyBnc3QvZ3N0aW5kZXguYyBnc3QvZ3N0aW5mby5jIFwKKwlnc3QvZ3N0aXRlcmF0b3IuYyBnc3QvZ3N0bWVzc2FnZS5jIGdzdC9nc3RtZXRhLmMgXAorCWdzdC9nc3RtaW5pb2JqZWN0LmMgZ3N0L2dzdG9iamVjdC5jIGdzdC9nc3RwYWQuYyBcCisJZ3N0L2dzdHBhcmFtc3BlY3MuYyBnc3QvZ3N0cGlwZWxpbmUuYyBnc3QvZ3N0cGx1Z2luLmMgXAorCWdzdC9nc3Rwb2xsLmMgZ3N0L2dzdHByZXNldC5jIGdzdC9nc3RxdWVyeS5jIGdzdC9nc3RyZWdpc3RyeS5jIFwKKwlnc3QvZ3N0c2VnbWVudC5jIGdzdC9nc3RzdHJ1Y3R1cmUuYyBnc3QvZ3N0c3lzdGVtY2xvY2suYyBcCisJZ3N0L2dzdHRhZy5jIGdzdC9nc3R0YWdzZXR0ZXIuYyBnc3QvZ3N0dGFzay5jIGdzdC9nc3R1cmkuYyBcCisJZ3N0L2dzdHV0aWxzLmMgZ3N0L2dzdHZhbHVlLmMgbGlicy9hZGFwdGVyLmMgbGlicy9iYXNlc2luay5jIFwKKwlsaWJzL2Jhc2VzcmMuYyBsaWJzL2JpdHJlYWRlci5jIGxpYnMvYnl0ZXJlYWRlci5jIFwKKwlsaWJzL2J5dGV3cml0ZXIuYyBsaWJzL2NvbGxlY3RwYWRzLmMgbGlicy9jb250cm9sbGVyLmMgXAorCSQobGlic19nZHBfU09VUkNFUykgJChsaWJzX2dzdGxpYnNjcHBfU09VUkNFUykgXAorCWxpYnMvZ3N0bmV0Y2xpZW50Y2xvY2suYyBsaWJzL2dzdG5ldHRpbWVwcm92aWRlci5jIFwKKwlsaWJzL3RyYW5zZm9ybTEuYyBsaWJzL3R5cGVmaW5kaGVscGVyLmMgcGlwZWxpbmVzL2NsZWFudXAuYyBcCisJcGlwZWxpbmVzL3BhcnNlLWRpc2FibGVkLmMgcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jIFwKKwlwaXBlbGluZXMvcXVldWUtZXJyb3IuYyBwaXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jIFwKKwlwaXBlbGluZXMvc3RyZXNzLmMKK0hFQURFUlMgPSAkKG5vaW5zdF9IRUFERVJTKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworYW1fX3R0eV9jb2xvcnMgPSBcCityZWQ9OyBncm49OyBsZ249OyBibHU9OyBzdGQ9CitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKK0NDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKK0NIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKK0NIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKK0NIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUiA9IEBEQVRBRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAorRExMVE9PTCA9IEBETExUT09MQAorRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKK0VSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACitFWEVFWFQgPSBARVhFRVhUQAorRkZMQUdTID0gQEZGTEFHU0AKK0ZHUkVQID0gQEZHUkVQQAorRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKK0dDT1YgPSBAR0NPVkAKK0dDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAorR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACitHTElCX0xJQlMgPSBAR0xJQl9MSUJTQAorR0xJQl9PTkxZX0NGTEFHUyA9IEBHTElCX09OTFlfQ0ZMQUdTQAorR0xJQl9PTkxZX0xJQlMgPSBAR0xJQl9PTkxZX0xJQlNACitHTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKK0dMSUJfUkVRID0gQEdMSUJfUkVRQAorR01QX0xJQlMgPSBAR01QX0xJQlNACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dSRVAgPSBAR1JFUEAKK0dTTF9MSUJTID0gQEdTTF9MSUJTQAorR1NUX0FHRSA9IEBHU1RfQUdFQAorR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACitHU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACitHU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAorR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKK0dTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAorR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORUAKK0dTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKK0dTVF9ESVNBQkxFX05FVF9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfTkVUX0RFRklORUAKK0dTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACitHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAorR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAorR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKK0dTVF9ESVNBQkxFX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkVACitHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACitHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACitHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORSA9IEBHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORUAKK0dTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAorR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACitHU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAorR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACitHU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKK0dTVF9NQUpPUk1JTk9SID0gQEdTVF9NQUpPUk1JTk9SQAorR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACitHU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACitHU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAorR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACitHU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACitHU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACitHU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAorR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAorR1NUX1BLR19ERVBTID0gQEdTVF9QS0dfREVQU0AKK0dTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACitHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FQAorR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORUAKK0dTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKK0dTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACitHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkUgPSBAR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FQAorR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKK0hBVkVfRE9DQk9PSzJIVE1MID0gQEhBVkVfRE9DQk9PSzJIVE1MQAorSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKK0hBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKK0hBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKK0hBVkVfRklHMkRFViA9IEBIQVZFX0ZJRzJERVZACitIQVZFX0dNUCA9IEBIQVZFX0dNUEAKK0hBVkVfR1NMID0gQEhBVkVfR1NMQAorSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKK0hBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKK0hBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACitIQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKK0hBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACitIT1NUX0NQVSA9IEBIT1NUX0NQVUAKK0hUTUxfRElSID0gQEhUTUxfRElSQAorSU5FVF9BVE9OX0xJQlMgPSBASU5FVF9BVE9OX0xJQlNACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCRElSID0gQExJQkRJUkAKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCTSA9IEBMSUJNQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTE9DQUxFRElSID0gQExPQ0FMRURJUkAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACitQQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAorUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKK1BBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAorUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BFUkxfUEFUSCA9IEBQRVJMX1BBVEhACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQTFVHSU5ESVIgPSBAUExVR0lORElSQAorUE9TVUIgPSBAUE9TVUJACitQUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAorVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAorVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACitXSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACitYTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKK1hTTFRQUk9DID0gQFhTTFRQUk9DQAorWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3BsdWdpbmRpciA9ICQobGliZGlyKS9nc3RyZWFtZXItQEdTVF9NQUpPUk1JTk9SQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKK3B5dGhvbmRpciA9IEBweXRob25kaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK0xPT1BTID0gMTAKKworIyBpbnNwZWN0IGV2ZXJ5IHBsdWdpbiBmZWF0dXJlCitHU1RfSU5TUEVDVCA9ICQoR1NUX1RPT0xTX0RJUikvZ3N0LWluc3BlY3QtJChHU1RfTUFKT1JNSU5PUikKK0NIRUNLX1JFR0lTVFJZID0gJCh0b3BfYnVpbGRkaXIpL3Rlc3RzL2NoZWNrL3Rlc3QtcmVnaXN0cnkucmVnCitHU1RfVE9PTFNfRElSID0gJCh0b3BfYnVpbGRkaXIpL3Rvb2xzCitSRUdJU1RSWV9FTlZJUk9OTUVOVCA9IFwKKwlHU1RfUkVHSVNUUlk9JChDSEVDS19SRUdJU1RSWSkKKworVEVTVFNfRU5WSVJPTk1FTlQgPSBcCisgICAgICAgIEdTVF9TVEFURV9JR05PUkVfRUxFTUVOVFM9IiQoU1RBVEVfSUdOT1JFX0VMRU1FTlRTKSIJXAorICAgICAgICAkKFJFR0lTVFJZX0VOVklST05NRU5UKQkJCQkJXAorICAgICAgICBHU1RfUExVR0lOX1NDQU5ORVI9JCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2hlbHBlcnMvZ3N0LXBsdWdpbi1zY2FubmVyIFwKKyAgICAgICAgR1NUX1BMVUdJTl9TWVNURU1fUEFUSD0JCQkJCVwKKyAgICAgICAgR1NUX1BMVUdJTl9QQVRIPSQodG9wX2J1aWxkZGlyKS9wbHVnaW5zCisKKworIyB0aGUgY29yZSBkdW1wcyBvZiBzb21lIG1hY2hpbmVzIGhhdmUgUElEcyBhcHBlbmRlZCwgdGVzdCByZWdpc3RyeSBhbmQKKyMgcHJvZmlsaW5nIGRhdGEKK0NMRUFORklMRVMgPSBjb3JlIGNvcmUuKiB0ZXN0LXJlZ2lzdHJ5LiogKi5nY25vICouZ2NkYQorU1VQUFJFU1NJT05TID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vZ3N0LnN1cHAKK0BHU1RfRElTQUJMRV9QQVJTRV9GQUxTRUBQQVJTRV9DSEVDS1MgPSBwaXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcyBwaXBlbGluZXMvY2xlYW51cCBwaXBlbGluZXMvcGFyc2UtbGF1bmNoCitAR1NUX0RJU0FCTEVfUEFSU0VfVFJVRUBQQVJTRV9DSEVDS1MgPSBwaXBlbGluZXMvcGFyc2UtZGlzYWJsZWQKK0BIQVZFX0NYWF9GQUxTRUBDWFhfQ0hFQ0tTID0gCitASEFWRV9DWFhfVFJVRUBDWFhfQ0hFQ0tTID0gZ3N0L2dzdGNwcCBsaWJzL2dzdGxpYnNjcHAKK0BHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUBSRUdJU1RSWV9DSEVDS1MgPSBcCitAR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWdzdC9nc3QJCQkJCVwKK0BHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZ3N0L2dzdGJpbgkJCQlcCitAR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWdzdC9nc3RjaGlsZHByb3h5CQkJXAorQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlnc3QvZ3N0ZWxlbWVudAkJCQlcCitAR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWdzdC9nc3RlbGVtZW50ZmFjdG9yeQkJCVwKK0BHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZ3N0L2dzdGV2ZW50CQkJCVwKK0BHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZ3N0L2dzdGdob3N0cGFkCQkJCVwKK0BHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZ3N0L2dzdGluZGV4CQkJCVwKK0BHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZ3N0L2dzdHBsdWdpbgkJCQlcCitAR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWdzdC9nc3RwcmVzZXQJCQkJXAorQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlnc3QvZ3N0cXVlcnkJCQkJXAorQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlnc3QvZ3N0cmVnaXN0cnkJCQkJXAorQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlnc3QvZ3N0dXJpICAJCQkJXAorQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlnc3QvZ3N0dXRpbHMJCQkJXAorQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlnZW5lcmljL3NpbmtzCQkJCVwKK0BHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZWxlbWVudHMvY2Fwc2ZpbHRlcgkJCVwKK0BHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZWxlbWVudHMvZmFrZXNpbmsJCQlcCitAR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWVsZW1lbnRzL2Zha2VzcmMJCQlcCitAR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWVsZW1lbnRzL2Zkc3JjCQkJICAJXAorQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAllbGVtZW50cy9maWxlc2luawkJCVwKK0BHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZWxlbWVudHMvZmlsZXNyYwkJCVwKK0BHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZWxlbWVudHMvZnVubmVsCQkJCVwKK0BHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZWxlbWVudHMvaWRlbnRpdHkJCQlcCitAR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWVsZW1lbnRzL211bHRpcXVldWUJCQlcCitAR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWVsZW1lbnRzL3NlbGVjdG9yCQkJXAorQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAllbGVtZW50cy90ZWUJCQkgIAlcCitAR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWVsZW1lbnRzL3F1ZXVlICAgICAgICAgICAgICAgICAgICAgICAgICBcCitAR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWVsZW1lbnRzL3F1ZXVlMiAgICAgICAgICAgICAgICAgICAgICAgICBcCitAR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWVsZW1lbnRzL3ZhbHZlICAgICAgICAgICAgICAgICAgICAgICAgICBcCitAR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWxpYnMvYmFzZXNyYwkJCQlcCitAR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWxpYnMvYmFzZXNpbmsJCQkJXAorQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlsaWJzL2NvbnRyb2xsZXIJCQkJXAorQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlsaWJzL3R5cGVmaW5kaGVscGVyCQkJXAorQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlwaXBlbGluZXMvc3RyZXNzCQkJXAorQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlwaXBlbGluZXMvcXVldWUtZXJyb3IKKworCisjIGlmIGl0J3MgY2FsbGluZyBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoKSwgaXQgd2lsbCBwcm9iYWJseSBub3Qgd29yayB3aXRob3V0CisjIGEgcmVnaXN0cnkKK0BHU1RfRElTQUJMRV9SRUdJU1RSWV9UUlVFQFJFR0lTVFJZX0NIRUNLUyA9IAorCisjIGVsZW1lbnRzIHRvIGlnbm9yZSBmb3IgdGhlIHN0YXRlIHRlc3RzCisjIFNUQVRFX0lHTk9SRV9FTEVNRU5UUyA9CitURVNUUyA9ICQoY2hlY2tfUFJPR1JBTVMpCitub2luc3RfSEVBREVSUyA9IFwKKwlnc3QvY2Fwc2xpc3QuaCBcCisJZ3N0L3N0cnVjdF9hcm0uaCBcCisJZ3N0L3N0cnVjdF9pMzg2LmggXAorCWdzdC9zdHJ1Y3RfaHBwYS5oIFwKKwlnc3Qvc3RydWN0X3BwYzMyLmggXAorCWdzdC9zdHJ1Y3RfcHBjNjQuaCBcCisJZ3N0L3N0cnVjdF9zcGFyYy5oIFwKKwlnc3Qvc3RydWN0X3g4Nl82NC5oIFwKKwlsaWJzL3N0cnVjdF9hcm0uaCBcCisJbGlicy9zdHJ1Y3RfaTM4Ni5oIFwKKwlsaWJzL3N0cnVjdF9ocHBhLmggXAorCWxpYnMvc3RydWN0X3BwYzMyLmggXAorCWxpYnMvc3RydWN0X3BwYzY0LmggXAorCWxpYnMvc3RydWN0X3NwYXJjLmggXAorCWxpYnMvc3RydWN0X3g4Nl82NC5oCisKK0VYVFJBX0RJU1QgPSBcCisJbGlicy90ZXN0X3RyYW5zZm9ybS5jCisKK0FNX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpIC1VR19ESVNBQkxFX0FTU0VSVCAtVUdfRElTQUJMRV9DQVNUX0NIRUNLUworQU1fQ1hYRkxBR1MgPSAkKEdTVF9PQkpfQ1hYRkxBR1MpIC1VR19ESVNBQkxFX0FTU0VSVCAtVUdfRElTQUJMRV9DQVNUX0NIRUNLUworTERBREQgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKEdTVF9PQkpfTElCUykKKworZ3N0X2dzdGNwcF9TT1VSQ0VTID0gZ3N0L2dzdGNwcC5jYworbGlic19nc3RsaWJzY3BwX1NPVVJDRVMgPSBsaWJzL2dzdGxpYnNjcHAuY2MKK2dzdF9nc3R1dGlsc19MREFERCA9ICQoTERBREQpICQoR1NMX0xJQlMpICQoR01QX0xJQlMpCitsaWJzX2dkcF9TT1VSQ0VTID0gXAorCWxpYnMvZ2RwLmMKKworbGlic19nZHBfTERBREQgPSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2RhdGFwcm90b2NvbC9saWJnc3RkYXRhcHJvdG9jb2wtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChMREFERCkKKworZWxlbWVudHNfZmRzcmNfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykgJChBTV9DRkxBR1MpIFwKKwktRFRFU1RGSUxFPVwiJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWNcIgorCitlbGVtZW50c19maWxlc3JjX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpICQoQU1fQ0ZMQUdTKSBcCisJLURURVNURklMRT1cIiQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjXCIKKworbGlic19jb250cm9sbGVyX0xEQUREID0gXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jb250cm9sbGVyL2xpYmdzdGNvbnRyb2xsZXItQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChMREFERCkKKworbGlic19nc3RuZXRjbGllbnRjbG9ja19MREFERCA9IFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvbmV0L2xpYmdzdG5ldC1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKExEQUREKQorCitsaWJzX2dzdG5ldHRpbWVwcm92aWRlcl9MREFERCA9IFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvbmV0L2xpYmdzdG5ldC1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKExEQUREKQorCisKKyMgdmFsZ3JpbmQgdGVzdGluZworIyB0aGVzZSBqdXN0IG5lZWQgdmFsZ3JpbmQgZml4aW5nLCBwZXJpb2QKK1ZBTEdSSU5EX1RPX0ZJWCA9IFwKKwlnc3QvZ3N0aW5mbyBcCisJbGlicy9jb2xsZWN0cGFkcyBcCisJcGlwZWxpbmVzL3BhcnNlLWxhdW5jaAorCitWQUxHUklORF9JR05PUkUgPSBcCisJcGlwZWxpbmVzL3N0cmVzcworCisKKyMgdGhlc2UgbmVlZCBmaXhpbmcgYmVjYXVzZSB0aGUgdGhyZWFkcyBjYXVzZSBzZWdmYXVsdHMgdW5kZXIgdmFsZ3JpbmQKK1RFU1RTX1RIUkVBREVEID0gXAorCWdzdC9nc3RtaW5pb2JqZWN0IAkJCVwKKwlnc3QvZ3N0b2JqZWN0CisKK1ZBTEdSSU5EX1RFU1RTX0RJU0FCTEUgPSBcCisJJChURVNUU19USFJFQURFRCkJCQkJCVwKKwkkKFZBTEdSSU5EX0lHTk9SRSkJCQkJCVwKKwkkKFZBTEdSSU5EX1RPX0ZJWCkKKworCisjIGluZGV4ZXJzIGRvZXMgbm90IGdldCB0ZXN0ZWQgeWV0CitDT1ZFUkFHRV9ESVJTID0gXAorCWdzdCBcCisJbGlicy9nc3QvYmFzZSBcCisJbGlicy9nc3QvY29udHJvbGxlciBcCisJbGlicy9nc3QvY2hlY2sgXAorCWxpYnMvZ3N0L2RhdGFwcm90b2NvbCBcCisJbGlicy9nc3QvbmV0IFwKKwlwbHVnaW5zL2VsZW1lbnRzCisKK0NPVkVSQUdFX0ZJTEVTID0gJChmb3JlYWNoIGRpciwkKENPVkVSQUdFX0RJUlMpLCQod2lsZGNhcmQgJCh0b3BfYnVpbGRkaXIpLyQoZGlyKS8qLmdjb3YpKQorQ09WRVJBR0VfRklMRVNfUkVMID0gJChzdWJzdCAkKHRvcF9idWlsZGRpcikvLCwkKENPVkVSQUdFX0ZJTEVTKSkKK0NPVkVSQUdFX09VVF9GSUxFUyA9ICQoZm9yZWFjaCBkaXIsJChDT1ZFUkFHRV9ESVJTKSwkKHdpbGRjYXJkICQodG9wX2J1aWxkZGlyKS8kKGRpcikvKi5nY292Lm91dCkpCitDT1ZFUkFHRV9PVVRfRklMRVNfUkVMID0gJChzdWJzdCAkKHRvcF9idWlsZGRpcikvLCwkKENPVkVSQUdFX09VVF9GSUxFUykpCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5jYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9jaGVjay5tYWsgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgdGVzdHMvY2hlY2svTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbnUgdGVzdHMvY2hlY2svTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisKK2NsZWFuLWNoZWNrUFJPR1JBTVM6CisJQGxpc3Q9JyQoY2hlY2tfUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAorCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCisJbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0CisKK2NsZWFuLW5vaW5zdFBST0dSQU1TOgorCUBsaXN0PSckKG5vaW5zdF9QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCisJdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKKwlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QKK2VsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKToKKwlAJChNS0RJUl9QKSBlbGVtZW50cworCUA6ID4gZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCitlbGVtZW50cy9jYXBzZmlsdGVyJChFWEVFWFQpOiAkKGVsZW1lbnRzX2NhcHNmaWx0ZXJfT0JKRUNUUykgJChlbGVtZW50c19jYXBzZmlsdGVyX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGVsZW1lbnRzL2NhcHNmaWx0ZXIkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfY2Fwc2ZpbHRlcl9PQkpFQ1RTKSAkKGVsZW1lbnRzX2NhcHNmaWx0ZXJfTERBREQpICQoTElCUykKK2VsZW1lbnRzL2Zha2VzaW5rJChFWEVFWFQpOiAkKGVsZW1lbnRzX2Zha2VzaW5rX09CSkVDVFMpICQoZWxlbWVudHNfZmFrZXNpbmtfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKKwlAcm0gLWYgZWxlbWVudHMvZmFrZXNpbmskKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfZmFrZXNpbmtfT0JKRUNUUykgJChlbGVtZW50c19mYWtlc2lua19MREFERCkgJChMSUJTKQorZWxlbWVudHMvZmFrZXNyYyQoRVhFRVhUKTogJChlbGVtZW50c19mYWtlc3JjX09CSkVDVFMpICQoZWxlbWVudHNfZmFrZXNyY19ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQorCUBybSAtZiBlbGVtZW50cy9mYWtlc3JjJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKGVsZW1lbnRzX2Zha2VzcmNfT0JKRUNUUykgJChlbGVtZW50c19mYWtlc3JjX0xEQUREKSAkKExJQlMpCitlbGVtZW50cy9mZHNyYyQoRVhFRVhUKTogJChlbGVtZW50c19mZHNyY19PQkpFQ1RTKSAkKGVsZW1lbnRzX2Zkc3JjX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGVsZW1lbnRzL2Zkc3JjJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChlbGVtZW50c19mZHNyY19MSU5LKSAkKGVsZW1lbnRzX2Zkc3JjX09CSkVDVFMpICQoZWxlbWVudHNfZmRzcmNfTERBREQpICQoTElCUykKK2VsZW1lbnRzL2ZpbGVzaW5rJChFWEVFWFQpOiAkKGVsZW1lbnRzX2ZpbGVzaW5rX09CSkVDVFMpICQoZWxlbWVudHNfZmlsZXNpbmtfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKKwlAcm0gLWYgZWxlbWVudHMvZmlsZXNpbmskKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfZmlsZXNpbmtfT0JKRUNUUykgJChlbGVtZW50c19maWxlc2lua19MREFERCkgJChMSUJTKQorZWxlbWVudHMvZmlsZXNyYyQoRVhFRVhUKTogJChlbGVtZW50c19maWxlc3JjX09CSkVDVFMpICQoZWxlbWVudHNfZmlsZXNyY19ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQorCUBybSAtZiBlbGVtZW50cy9maWxlc3JjJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChlbGVtZW50c19maWxlc3JjX0xJTkspICQoZWxlbWVudHNfZmlsZXNyY19PQkpFQ1RTKSAkKGVsZW1lbnRzX2ZpbGVzcmNfTERBREQpICQoTElCUykKK2VsZW1lbnRzL2Z1bm5lbCQoRVhFRVhUKTogJChlbGVtZW50c19mdW5uZWxfT0JKRUNUUykgJChlbGVtZW50c19mdW5uZWxfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKKwlAcm0gLWYgZWxlbWVudHMvZnVubmVsJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKGVsZW1lbnRzX2Z1bm5lbF9PQkpFQ1RTKSAkKGVsZW1lbnRzX2Z1bm5lbF9MREFERCkgJChMSUJTKQorZWxlbWVudHMvaWRlbnRpdHkkKEVYRUVYVCk6ICQoZWxlbWVudHNfaWRlbnRpdHlfT0JKRUNUUykgJChlbGVtZW50c19pZGVudGl0eV9ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQorCUBybSAtZiBlbGVtZW50cy9pZGVudGl0eSQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChlbGVtZW50c19pZGVudGl0eV9PQkpFQ1RTKSAkKGVsZW1lbnRzX2lkZW50aXR5X0xEQUREKSAkKExJQlMpCitlbGVtZW50cy9tdWx0aXF1ZXVlJChFWEVFWFQpOiAkKGVsZW1lbnRzX211bHRpcXVldWVfT0JKRUNUUykgJChlbGVtZW50c19tdWx0aXF1ZXVlX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGVsZW1lbnRzL211bHRpcXVldWUkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfbXVsdGlxdWV1ZV9PQkpFQ1RTKSAkKGVsZW1lbnRzX211bHRpcXVldWVfTERBREQpICQoTElCUykKK2VsZW1lbnRzL3F1ZXVlJChFWEVFWFQpOiAkKGVsZW1lbnRzX3F1ZXVlX09CSkVDVFMpICQoZWxlbWVudHNfcXVldWVfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKKwlAcm0gLWYgZWxlbWVudHMvcXVldWUkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfcXVldWVfT0JKRUNUUykgJChlbGVtZW50c19xdWV1ZV9MREFERCkgJChMSUJTKQorZWxlbWVudHMvcXVldWUyJChFWEVFWFQpOiAkKGVsZW1lbnRzX3F1ZXVlMl9PQkpFQ1RTKSAkKGVsZW1lbnRzX3F1ZXVlMl9ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQorCUBybSAtZiBlbGVtZW50cy9xdWV1ZTIkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfcXVldWUyX09CSkVDVFMpICQoZWxlbWVudHNfcXVldWUyX0xEQUREKSAkKExJQlMpCitlbGVtZW50cy9zZWxlY3RvciQoRVhFRVhUKTogJChlbGVtZW50c19zZWxlY3Rvcl9PQkpFQ1RTKSAkKGVsZW1lbnRzX3NlbGVjdG9yX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGVsZW1lbnRzL3NlbGVjdG9yJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKGVsZW1lbnRzX3NlbGVjdG9yX09CSkVDVFMpICQoZWxlbWVudHNfc2VsZWN0b3JfTERBREQpICQoTElCUykKK2VsZW1lbnRzL3RlZSQoRVhFRVhUKTogJChlbGVtZW50c190ZWVfT0JKRUNUUykgJChlbGVtZW50c190ZWVfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKKwlAcm0gLWYgZWxlbWVudHMvdGVlJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKGVsZW1lbnRzX3RlZV9PQkpFQ1RTKSAkKGVsZW1lbnRzX3RlZV9MREFERCkgJChMSUJTKQorZWxlbWVudHMvdmFsdmUkKEVYRUVYVCk6ICQoZWxlbWVudHNfdmFsdmVfT0JKRUNUUykgJChlbGVtZW50c192YWx2ZV9ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQorCUBybSAtZiBlbGVtZW50cy92YWx2ZSQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChlbGVtZW50c192YWx2ZV9PQkpFQ1RTKSAkKGVsZW1lbnRzX3ZhbHZlX0xEQUREKSAkKExJQlMpCitnZW5lcmljLyQoYW1fX2RpcnN0YW1wKToKKwlAJChNS0RJUl9QKSBnZW5lcmljCisJQDogPiBnZW5lcmljLyQoYW1fX2RpcnN0YW1wKQorZ2VuZXJpYy9zaW5rcyQoRVhFRVhUKTogJChnZW5lcmljX3NpbmtzX09CSkVDVFMpICQoZ2VuZXJpY19zaW5rc19ERVBFTkRFTkNJRVMpIGdlbmVyaWMvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdlbmVyaWMvc2lua3MkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ2VuZXJpY19zaW5rc19PQkpFQ1RTKSAkKGdlbmVyaWNfc2lua3NfTERBREQpICQoTElCUykKK2dlbmVyaWMvc3RhdGVzJChFWEVFWFQpOiAkKGdlbmVyaWNfc3RhdGVzX09CSkVDVFMpICQoZ2VuZXJpY19zdGF0ZXNfREVQRU5ERU5DSUVTKSBnZW5lcmljLyQoYW1fX2RpcnN0YW1wKQorCUBybSAtZiBnZW5lcmljL3N0YXRlcyQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnZW5lcmljX3N0YXRlc19PQkpFQ1RTKSAkKGdlbmVyaWNfc3RhdGVzX0xEQUREKSAkKExJQlMpCitnc3QvJChhbV9fZGlyc3RhbXApOgorCUAkKE1LRElSX1ApIGdzdAorCUA6ID4gZ3N0LyQoYW1fX2RpcnN0YW1wKQorZ3N0L2dzdCQoRVhFRVhUKTogJChnc3RfZ3N0X09CSkVDVFMpICQoZ3N0X2dzdF9ERVBFTkRFTkNJRVMpIGdzdC8kKGFtX19kaXJzdGFtcCkKKwlAcm0gLWYgZ3N0L2dzdCQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0X09CSkVDVFMpICQoZ3N0X2dzdF9MREFERCkgJChMSUJTKQorZ3N0L2dzdGJpbiQoRVhFRVhUKTogJChnc3RfZ3N0YmluX09CSkVDVFMpICQoZ3N0X2dzdGJpbl9ERVBFTkRFTkNJRVMpIGdzdC8kKGFtX19kaXJzdGFtcCkKKwlAcm0gLWYgZ3N0L2dzdGJpbiQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0YmluX09CSkVDVFMpICQoZ3N0X2dzdGJpbl9MREFERCkgJChMSUJTKQorZ3N0L2dzdGJ1ZmZlciQoRVhFRVhUKTogJChnc3RfZ3N0YnVmZmVyX09CSkVDVFMpICQoZ3N0X2dzdGJ1ZmZlcl9ERVBFTkRFTkNJRVMpIGdzdC8kKGFtX19kaXJzdGFtcCkKKwlAcm0gLWYgZ3N0L2dzdGJ1ZmZlciQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0YnVmZmVyX09CSkVDVFMpICQoZ3N0X2dzdGJ1ZmZlcl9MREFERCkgJChMSUJTKQorZ3N0L2dzdGJ1ZmZlcmxpc3QkKEVYRUVYVCk6ICQoZ3N0X2dzdGJ1ZmZlcmxpc3RfT0JKRUNUUykgJChnc3RfZ3N0YnVmZmVybGlzdF9ERVBFTkRFTkNJRVMpIGdzdC8kKGFtX19kaXJzdGFtcCkKKwlAcm0gLWYgZ3N0L2dzdGJ1ZmZlcmxpc3QkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdGJ1ZmZlcmxpc3RfT0JKRUNUUykgJChnc3RfZ3N0YnVmZmVybGlzdF9MREFERCkgJChMSUJTKQorZ3N0L2dzdGJ1cyQoRVhFRVhUKTogJChnc3RfZ3N0YnVzX09CSkVDVFMpICQoZ3N0X2dzdGJ1c19ERVBFTkRFTkNJRVMpIGdzdC8kKGFtX19kaXJzdGFtcCkKKwlAcm0gLWYgZ3N0L2dzdGJ1cyQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0YnVzX09CSkVDVFMpICQoZ3N0X2dzdGJ1c19MREFERCkgJChMSUJTKQorZ3N0L2dzdGNhcHMkKEVYRUVYVCk6ICQoZ3N0X2dzdGNhcHNfT0JKRUNUUykgJChnc3RfZ3N0Y2Fwc19ERVBFTkRFTkNJRVMpIGdzdC8kKGFtX19kaXJzdGFtcCkKKwlAcm0gLWYgZ3N0L2dzdGNhcHMkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdGNhcHNfT0JKRUNUUykgJChnc3RfZ3N0Y2Fwc19MREFERCkgJChMSUJTKQorZ3N0L2dzdGNoaWxkcHJveHkkKEVYRUVYVCk6ICQoZ3N0X2dzdGNoaWxkcHJveHlfT0JKRUNUUykgJChnc3RfZ3N0Y2hpbGRwcm94eV9ERVBFTkRFTkNJRVMpIGdzdC8kKGFtX19kaXJzdGFtcCkKKwlAcm0gLWYgZ3N0L2dzdGNoaWxkcHJveHkkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdGNoaWxkcHJveHlfT0JKRUNUUykgJChnc3RfZ3N0Y2hpbGRwcm94eV9MREFERCkgJChMSUJTKQorZ3N0L2dzdGNsb2NrJChFWEVFWFQpOiAkKGdzdF9nc3RjbG9ja19PQkpFQ1RTKSAkKGdzdF9nc3RjbG9ja19ERVBFTkRFTkNJRVMpIGdzdC8kKGFtX19kaXJzdGFtcCkKKwlAcm0gLWYgZ3N0L2dzdGNsb2NrJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdF9nc3RjbG9ja19PQkpFQ1RTKSAkKGdzdF9nc3RjbG9ja19MREFERCkgJChMSUJTKQorZ3N0L2dzdGNwcCQoRVhFRVhUKTogJChnc3RfZ3N0Y3BwX09CSkVDVFMpICQoZ3N0X2dzdGNwcF9ERVBFTkRFTkNJRVMpIGdzdC8kKGFtX19kaXJzdGFtcCkKKwlAcm0gLWYgZ3N0L2dzdGNwcCQoRVhFRVhUKQorCSQoQU1fVl9DWFhMRCkkKENYWExJTkspICQoZ3N0X2dzdGNwcF9PQkpFQ1RTKSAkKGdzdF9nc3RjcHBfTERBREQpICQoTElCUykKK2dzdC9nc3RkYXRldGltZSQoRVhFRVhUKTogJChnc3RfZ3N0ZGF0ZXRpbWVfT0JKRUNUUykgJChnc3RfZ3N0ZGF0ZXRpbWVfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3RkYXRldGltZSQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0ZGF0ZXRpbWVfT0JKRUNUUykgJChnc3RfZ3N0ZGF0ZXRpbWVfTERBREQpICQoTElCUykKK2dzdC9nc3RlbGVtZW50JChFWEVFWFQpOiAkKGdzdF9nc3RlbGVtZW50X09CSkVDVFMpICQoZ3N0X2dzdGVsZW1lbnRfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3RlbGVtZW50JChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdF9nc3RlbGVtZW50X09CSkVDVFMpICQoZ3N0X2dzdGVsZW1lbnRfTERBREQpICQoTElCUykKK2dzdC9nc3RlbGVtZW50ZmFjdG9yeSQoRVhFRVhUKTogJChnc3RfZ3N0ZWxlbWVudGZhY3RvcnlfT0JKRUNUUykgJChnc3RfZ3N0ZWxlbWVudGZhY3RvcnlfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3RlbGVtZW50ZmFjdG9yeSQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0ZWxlbWVudGZhY3RvcnlfT0JKRUNUUykgJChnc3RfZ3N0ZWxlbWVudGZhY3RvcnlfTERBREQpICQoTElCUykKK2dzdC9nc3RldmVudCQoRVhFRVhUKTogJChnc3RfZ3N0ZXZlbnRfT0JKRUNUUykgJChnc3RfZ3N0ZXZlbnRfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3RldmVudCQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0ZXZlbnRfT0JKRUNUUykgJChnc3RfZ3N0ZXZlbnRfTERBREQpICQoTElCUykKK2dzdC9nc3RnaG9zdHBhZCQoRVhFRVhUKTogJChnc3RfZ3N0Z2hvc3RwYWRfT0JKRUNUUykgJChnc3RfZ3N0Z2hvc3RwYWRfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3RnaG9zdHBhZCQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0Z2hvc3RwYWRfT0JKRUNUUykgJChnc3RfZ3N0Z2hvc3RwYWRfTERBREQpICQoTElCUykKK2dzdC9nc3RpbmRleCQoRVhFRVhUKTogJChnc3RfZ3N0aW5kZXhfT0JKRUNUUykgJChnc3RfZ3N0aW5kZXhfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3RpbmRleCQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0aW5kZXhfT0JKRUNUUykgJChnc3RfZ3N0aW5kZXhfTERBREQpICQoTElCUykKK2dzdC9nc3RpbmZvJChFWEVFWFQpOiAkKGdzdF9nc3RpbmZvX09CSkVDVFMpICQoZ3N0X2dzdGluZm9fREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3RpbmZvJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdF9nc3RpbmZvX09CSkVDVFMpICQoZ3N0X2dzdGluZm9fTERBREQpICQoTElCUykKK2dzdC9nc3RpdGVyYXRvciQoRVhFRVhUKTogJChnc3RfZ3N0aXRlcmF0b3JfT0JKRUNUUykgJChnc3RfZ3N0aXRlcmF0b3JfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3RpdGVyYXRvciQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0aXRlcmF0b3JfT0JKRUNUUykgJChnc3RfZ3N0aXRlcmF0b3JfTERBREQpICQoTElCUykKK2dzdC9nc3RtZXNzYWdlJChFWEVFWFQpOiAkKGdzdF9nc3RtZXNzYWdlX09CSkVDVFMpICQoZ3N0X2dzdG1lc3NhZ2VfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3RtZXNzYWdlJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdF9nc3RtZXNzYWdlX09CSkVDVFMpICQoZ3N0X2dzdG1lc3NhZ2VfTERBREQpICQoTElCUykKK2dzdC9nc3RtZXRhJChFWEVFWFQpOiAkKGdzdF9nc3RtZXRhX09CSkVDVFMpICQoZ3N0X2dzdG1ldGFfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3RtZXRhJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdF9nc3RtZXRhX09CSkVDVFMpICQoZ3N0X2dzdG1ldGFfTERBREQpICQoTElCUykKK2dzdC9nc3RtaW5pb2JqZWN0JChFWEVFWFQpOiAkKGdzdF9nc3RtaW5pb2JqZWN0X09CSkVDVFMpICQoZ3N0X2dzdG1pbmlvYmplY3RfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3RtaW5pb2JqZWN0JChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdF9nc3RtaW5pb2JqZWN0X09CSkVDVFMpICQoZ3N0X2dzdG1pbmlvYmplY3RfTERBREQpICQoTElCUykKK2dzdC9nc3RvYmplY3QkKEVYRUVYVCk6ICQoZ3N0X2dzdG9iamVjdF9PQkpFQ1RTKSAkKGdzdF9nc3RvYmplY3RfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3RvYmplY3QkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdG9iamVjdF9PQkpFQ1RTKSAkKGdzdF9nc3RvYmplY3RfTERBREQpICQoTElCUykKK2dzdC9nc3RwYWQkKEVYRUVYVCk6ICQoZ3N0X2dzdHBhZF9PQkpFQ1RTKSAkKGdzdF9nc3RwYWRfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3RwYWQkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdHBhZF9PQkpFQ1RTKSAkKGdzdF9nc3RwYWRfTERBREQpICQoTElCUykKK2dzdC9nc3RwYXJhbXNwZWNzJChFWEVFWFQpOiAkKGdzdF9nc3RwYXJhbXNwZWNzX09CSkVDVFMpICQoZ3N0X2dzdHBhcmFtc3BlY3NfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3RwYXJhbXNwZWNzJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdF9nc3RwYXJhbXNwZWNzX09CSkVDVFMpICQoZ3N0X2dzdHBhcmFtc3BlY3NfTERBREQpICQoTElCUykKK2dzdC9nc3RwaXBlbGluZSQoRVhFRVhUKTogJChnc3RfZ3N0cGlwZWxpbmVfT0JKRUNUUykgJChnc3RfZ3N0cGlwZWxpbmVfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3RwaXBlbGluZSQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0cGlwZWxpbmVfT0JKRUNUUykgJChnc3RfZ3N0cGlwZWxpbmVfTERBREQpICQoTElCUykKK2dzdC9nc3RwbHVnaW4kKEVYRUVYVCk6ICQoZ3N0X2dzdHBsdWdpbl9PQkpFQ1RTKSAkKGdzdF9nc3RwbHVnaW5fREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3RwbHVnaW4kKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdHBsdWdpbl9PQkpFQ1RTKSAkKGdzdF9nc3RwbHVnaW5fTERBREQpICQoTElCUykKK2dzdC9nc3Rwb2xsJChFWEVFWFQpOiAkKGdzdF9nc3Rwb2xsX09CSkVDVFMpICQoZ3N0X2dzdHBvbGxfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3Rwb2xsJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdF9nc3Rwb2xsX09CSkVDVFMpICQoZ3N0X2dzdHBvbGxfTERBREQpICQoTElCUykKK2dzdC9nc3RwcmVzZXQkKEVYRUVYVCk6ICQoZ3N0X2dzdHByZXNldF9PQkpFQ1RTKSAkKGdzdF9nc3RwcmVzZXRfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3RwcmVzZXQkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdHByZXNldF9PQkpFQ1RTKSAkKGdzdF9nc3RwcmVzZXRfTERBREQpICQoTElCUykKK2dzdC9nc3RxdWVyeSQoRVhFRVhUKTogJChnc3RfZ3N0cXVlcnlfT0JKRUNUUykgJChnc3RfZ3N0cXVlcnlfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3RxdWVyeSQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0cXVlcnlfT0JKRUNUUykgJChnc3RfZ3N0cXVlcnlfTERBREQpICQoTElCUykKK2dzdC9nc3RyZWdpc3RyeSQoRVhFRVhUKTogJChnc3RfZ3N0cmVnaXN0cnlfT0JKRUNUUykgJChnc3RfZ3N0cmVnaXN0cnlfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3RyZWdpc3RyeSQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0cmVnaXN0cnlfT0JKRUNUUykgJChnc3RfZ3N0cmVnaXN0cnlfTERBREQpICQoTElCUykKK2dzdC9nc3RzZWdtZW50JChFWEVFWFQpOiAkKGdzdF9nc3RzZWdtZW50X09CSkVDVFMpICQoZ3N0X2dzdHNlZ21lbnRfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3RzZWdtZW50JChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdF9nc3RzZWdtZW50X09CSkVDVFMpICQoZ3N0X2dzdHNlZ21lbnRfTERBREQpICQoTElCUykKK2dzdC9nc3RzdHJ1Y3R1cmUkKEVYRUVYVCk6ICQoZ3N0X2dzdHN0cnVjdHVyZV9PQkpFQ1RTKSAkKGdzdF9nc3RzdHJ1Y3R1cmVfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3RzdHJ1Y3R1cmUkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdHN0cnVjdHVyZV9PQkpFQ1RTKSAkKGdzdF9nc3RzdHJ1Y3R1cmVfTERBREQpICQoTElCUykKK2dzdC9nc3RzeXN0ZW1jbG9jayQoRVhFRVhUKTogJChnc3RfZ3N0c3lzdGVtY2xvY2tfT0JKRUNUUykgJChnc3RfZ3N0c3lzdGVtY2xvY2tfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3RzeXN0ZW1jbG9jayQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0c3lzdGVtY2xvY2tfT0JKRUNUUykgJChnc3RfZ3N0c3lzdGVtY2xvY2tfTERBREQpICQoTElCUykKK2dzdC9nc3R0YWckKEVYRUVYVCk6ICQoZ3N0X2dzdHRhZ19PQkpFQ1RTKSAkKGdzdF9nc3R0YWdfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3R0YWckKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdHRhZ19PQkpFQ1RTKSAkKGdzdF9nc3R0YWdfTERBREQpICQoTElCUykKK2dzdC9nc3R0YWdzZXR0ZXIkKEVYRUVYVCk6ICQoZ3N0X2dzdHRhZ3NldHRlcl9PQkpFQ1RTKSAkKGdzdF9nc3R0YWdzZXR0ZXJfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3R0YWdzZXR0ZXIkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdHRhZ3NldHRlcl9PQkpFQ1RTKSAkKGdzdF9nc3R0YWdzZXR0ZXJfTERBREQpICQoTElCUykKK2dzdC9nc3R0YXNrJChFWEVFWFQpOiAkKGdzdF9nc3R0YXNrX09CSkVDVFMpICQoZ3N0X2dzdHRhc2tfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3R0YXNrJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdF9nc3R0YXNrX09CSkVDVFMpICQoZ3N0X2dzdHRhc2tfTERBREQpICQoTElCUykKK2dzdC9nc3R1cmkkKEVYRUVYVCk6ICQoZ3N0X2dzdHVyaV9PQkpFQ1RTKSAkKGdzdF9nc3R1cmlfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3R1cmkkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdHVyaV9PQkpFQ1RTKSAkKGdzdF9nc3R1cmlfTERBREQpICQoTElCUykKK2dzdC9nc3R1dGlscyQoRVhFRVhUKTogJChnc3RfZ3N0dXRpbHNfT0JKRUNUUykgJChnc3RfZ3N0dXRpbHNfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3R1dGlscyQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0dXRpbHNfT0JKRUNUUykgJChnc3RfZ3N0dXRpbHNfTERBREQpICQoTElCUykKK2dzdC9nc3R2YWx1ZSQoRVhFRVhUKTogJChnc3RfZ3N0dmFsdWVfT0JKRUNUUykgJChnc3RfZ3N0dmFsdWVfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGdzdC9nc3R2YWx1ZSQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0dmFsdWVfT0JKRUNUUykgJChnc3RfZ3N0dmFsdWVfTERBREQpICQoTElCUykKK2xpYnMvJChhbV9fZGlyc3RhbXApOgorCUAkKE1LRElSX1ApIGxpYnMKKwlAOiA+IGxpYnMvJChhbV9fZGlyc3RhbXApCitsaWJzL2FkYXB0ZXIkKEVYRUVYVCk6ICQobGlic19hZGFwdGVyX09CSkVDVFMpICQobGlic19hZGFwdGVyX0RFUEVOREVOQ0lFUykgbGlicy8kKGFtX19kaXJzdGFtcCkKKwlAcm0gLWYgbGlicy9hZGFwdGVyJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKGxpYnNfYWRhcHRlcl9PQkpFQ1RTKSAkKGxpYnNfYWRhcHRlcl9MREFERCkgJChMSUJTKQorbGlicy9iYXNlc2luayQoRVhFRVhUKTogJChsaWJzX2Jhc2VzaW5rX09CSkVDVFMpICQobGlic19iYXNlc2lua19ERVBFTkRFTkNJRVMpIGxpYnMvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGxpYnMvYmFzZXNpbmskKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQobGlic19iYXNlc2lua19PQkpFQ1RTKSAkKGxpYnNfYmFzZXNpbmtfTERBREQpICQoTElCUykKK2xpYnMvYmFzZXNyYyQoRVhFRVhUKTogJChsaWJzX2Jhc2VzcmNfT0JKRUNUUykgJChsaWJzX2Jhc2VzcmNfREVQRU5ERU5DSUVTKSBsaWJzLyQoYW1fX2RpcnN0YW1wKQorCUBybSAtZiBsaWJzL2Jhc2VzcmMkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQobGlic19iYXNlc3JjX09CSkVDVFMpICQobGlic19iYXNlc3JjX0xEQUREKSAkKExJQlMpCitsaWJzL2JpdHJlYWRlciQoRVhFRVhUKTogJChsaWJzX2JpdHJlYWRlcl9PQkpFQ1RTKSAkKGxpYnNfYml0cmVhZGVyX0RFUEVOREVOQ0lFUykgbGlicy8kKGFtX19kaXJzdGFtcCkKKwlAcm0gLWYgbGlicy9iaXRyZWFkZXIkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQobGlic19iaXRyZWFkZXJfT0JKRUNUUykgJChsaWJzX2JpdHJlYWRlcl9MREFERCkgJChMSUJTKQorbGlicy9ieXRlcmVhZGVyJChFWEVFWFQpOiAkKGxpYnNfYnl0ZXJlYWRlcl9PQkpFQ1RTKSAkKGxpYnNfYnl0ZXJlYWRlcl9ERVBFTkRFTkNJRVMpIGxpYnMvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGxpYnMvYnl0ZXJlYWRlciQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChsaWJzX2J5dGVyZWFkZXJfT0JKRUNUUykgJChsaWJzX2J5dGVyZWFkZXJfTERBREQpICQoTElCUykKK2xpYnMvYnl0ZXdyaXRlciQoRVhFRVhUKTogJChsaWJzX2J5dGV3cml0ZXJfT0JKRUNUUykgJChsaWJzX2J5dGV3cml0ZXJfREVQRU5ERU5DSUVTKSBsaWJzLyQoYW1fX2RpcnN0YW1wKQorCUBybSAtZiBsaWJzL2J5dGV3cml0ZXIkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQobGlic19ieXRld3JpdGVyX09CSkVDVFMpICQobGlic19ieXRld3JpdGVyX0xEQUREKSAkKExJQlMpCitsaWJzL2NvbGxlY3RwYWRzJChFWEVFWFQpOiAkKGxpYnNfY29sbGVjdHBhZHNfT0JKRUNUUykgJChsaWJzX2NvbGxlY3RwYWRzX0RFUEVOREVOQ0lFUykgbGlicy8kKGFtX19kaXJzdGFtcCkKKwlAcm0gLWYgbGlicy9jb2xsZWN0cGFkcyQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChsaWJzX2NvbGxlY3RwYWRzX09CSkVDVFMpICQobGlic19jb2xsZWN0cGFkc19MREFERCkgJChMSUJTKQorbGlicy9jb250cm9sbGVyJChFWEVFWFQpOiAkKGxpYnNfY29udHJvbGxlcl9PQkpFQ1RTKSAkKGxpYnNfY29udHJvbGxlcl9ERVBFTkRFTkNJRVMpIGxpYnMvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGxpYnMvY29udHJvbGxlciQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChsaWJzX2NvbnRyb2xsZXJfT0JKRUNUUykgJChsaWJzX2NvbnRyb2xsZXJfTERBREQpICQoTElCUykKK2xpYnMvZ2RwJChFWEVFWFQpOiAkKGxpYnNfZ2RwX09CSkVDVFMpICQobGlic19nZHBfREVQRU5ERU5DSUVTKSBsaWJzLyQoYW1fX2RpcnN0YW1wKQorCUBybSAtZiBsaWJzL2dkcCQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChsaWJzX2dkcF9PQkpFQ1RTKSAkKGxpYnNfZ2RwX0xEQUREKSAkKExJQlMpCitsaWJzL2dzdGxpYnNjcHAkKEVYRUVYVCk6ICQobGlic19nc3RsaWJzY3BwX09CSkVDVFMpICQobGlic19nc3RsaWJzY3BwX0RFUEVOREVOQ0lFUykgbGlicy8kKGFtX19kaXJzdGFtcCkKKwlAcm0gLWYgbGlicy9nc3RsaWJzY3BwJChFWEVFWFQpCisJJChBTV9WX0NYWExEKSQoQ1hYTElOSykgJChsaWJzX2dzdGxpYnNjcHBfT0JKRUNUUykgJChsaWJzX2dzdGxpYnNjcHBfTERBREQpICQoTElCUykKK2xpYnMvZ3N0bmV0Y2xpZW50Y2xvY2skKEVYRUVYVCk6ICQobGlic19nc3RuZXRjbGllbnRjbG9ja19PQkpFQ1RTKSAkKGxpYnNfZ3N0bmV0Y2xpZW50Y2xvY2tfREVQRU5ERU5DSUVTKSBsaWJzLyQoYW1fX2RpcnN0YW1wKQorCUBybSAtZiBsaWJzL2dzdG5ldGNsaWVudGNsb2NrJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKGxpYnNfZ3N0bmV0Y2xpZW50Y2xvY2tfT0JKRUNUUykgJChsaWJzX2dzdG5ldGNsaWVudGNsb2NrX0xEQUREKSAkKExJQlMpCitsaWJzL2dzdG5ldHRpbWVwcm92aWRlciQoRVhFRVhUKTogJChsaWJzX2dzdG5ldHRpbWVwcm92aWRlcl9PQkpFQ1RTKSAkKGxpYnNfZ3N0bmV0dGltZXByb3ZpZGVyX0RFUEVOREVOQ0lFUykgbGlicy8kKGFtX19kaXJzdGFtcCkKKwlAcm0gLWYgbGlicy9nc3RuZXR0aW1lcHJvdmlkZXIkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQobGlic19nc3RuZXR0aW1lcHJvdmlkZXJfT0JKRUNUUykgJChsaWJzX2dzdG5ldHRpbWVwcm92aWRlcl9MREFERCkgJChMSUJTKQorbGlicy90cmFuc2Zvcm0xJChFWEVFWFQpOiAkKGxpYnNfdHJhbnNmb3JtMV9PQkpFQ1RTKSAkKGxpYnNfdHJhbnNmb3JtMV9ERVBFTkRFTkNJRVMpIGxpYnMvJChhbV9fZGlyc3RhbXApCisJQHJtIC1mIGxpYnMvdHJhbnNmb3JtMSQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChsaWJzX3RyYW5zZm9ybTFfT0JKRUNUUykgJChsaWJzX3RyYW5zZm9ybTFfTERBREQpICQoTElCUykKK2xpYnMvdHlwZWZpbmRoZWxwZXIkKEVYRUVYVCk6ICQobGlic190eXBlZmluZGhlbHBlcl9PQkpFQ1RTKSAkKGxpYnNfdHlwZWZpbmRoZWxwZXJfREVQRU5ERU5DSUVTKSBsaWJzLyQoYW1fX2RpcnN0YW1wKQorCUBybSAtZiBsaWJzL3R5cGVmaW5kaGVscGVyJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKGxpYnNfdHlwZWZpbmRoZWxwZXJfT0JKRUNUUykgJChsaWJzX3R5cGVmaW5kaGVscGVyX0xEQUREKSAkKExJQlMpCitwaXBlbGluZXMvJChhbV9fZGlyc3RhbXApOgorCUAkKE1LRElSX1ApIHBpcGVsaW5lcworCUA6ID4gcGlwZWxpbmVzLyQoYW1fX2RpcnN0YW1wKQorcGlwZWxpbmVzL2NsZWFudXAkKEVYRUVYVCk6ICQocGlwZWxpbmVzX2NsZWFudXBfT0JKRUNUUykgJChwaXBlbGluZXNfY2xlYW51cF9ERVBFTkRFTkNJRVMpIHBpcGVsaW5lcy8kKGFtX19kaXJzdGFtcCkKKwlAcm0gLWYgcGlwZWxpbmVzL2NsZWFudXAkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQocGlwZWxpbmVzX2NsZWFudXBfT0JKRUNUUykgJChwaXBlbGluZXNfY2xlYW51cF9MREFERCkgJChMSUJTKQorcGlwZWxpbmVzL3BhcnNlLWRpc2FibGVkJChFWEVFWFQpOiAkKHBpcGVsaW5lc19wYXJzZV9kaXNhYmxlZF9PQkpFQ1RTKSAkKHBpcGVsaW5lc19wYXJzZV9kaXNhYmxlZF9ERVBFTkRFTkNJRVMpIHBpcGVsaW5lcy8kKGFtX19kaXJzdGFtcCkKKwlAcm0gLWYgcGlwZWxpbmVzL3BhcnNlLWRpc2FibGVkJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKHBpcGVsaW5lc19wYXJzZV9kaXNhYmxlZF9PQkpFQ1RTKSAkKHBpcGVsaW5lc19wYXJzZV9kaXNhYmxlZF9MREFERCkgJChMSUJTKQorcGlwZWxpbmVzL3BhcnNlLWxhdW5jaCQoRVhFRVhUKTogJChwaXBlbGluZXNfcGFyc2VfbGF1bmNoX09CSkVDVFMpICQocGlwZWxpbmVzX3BhcnNlX2xhdW5jaF9ERVBFTkRFTkNJRVMpIHBpcGVsaW5lcy8kKGFtX19kaXJzdGFtcCkKKwlAcm0gLWYgcGlwZWxpbmVzL3BhcnNlLWxhdW5jaCQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChwaXBlbGluZXNfcGFyc2VfbGF1bmNoX09CSkVDVFMpICQocGlwZWxpbmVzX3BhcnNlX2xhdW5jaF9MREFERCkgJChMSUJTKQorcGlwZWxpbmVzL3F1ZXVlLWVycm9yJChFWEVFWFQpOiAkKHBpcGVsaW5lc19xdWV1ZV9lcnJvcl9PQkpFQ1RTKSAkKHBpcGVsaW5lc19xdWV1ZV9lcnJvcl9ERVBFTkRFTkNJRVMpIHBpcGVsaW5lcy8kKGFtX19kaXJzdGFtcCkKKwlAcm0gLWYgcGlwZWxpbmVzL3F1ZXVlLWVycm9yJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKHBpcGVsaW5lc19xdWV1ZV9lcnJvcl9PQkpFQ1RTKSAkKHBpcGVsaW5lc19xdWV1ZV9lcnJvcl9MREFERCkgJChMSUJTKQorcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMkKEVYRUVYVCk6ICQocGlwZWxpbmVzX3NpbXBsZV9sYXVuY2hfbGluZXNfT0JKRUNUUykgJChwaXBlbGluZXNfc2ltcGxlX2xhdW5jaF9saW5lc19ERVBFTkRFTkNJRVMpIHBpcGVsaW5lcy8kKGFtX19kaXJzdGFtcCkKKwlAcm0gLWYgcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQocGlwZWxpbmVzX3NpbXBsZV9sYXVuY2hfbGluZXNfT0JKRUNUUykgJChwaXBlbGluZXNfc2ltcGxlX2xhdW5jaF9saW5lc19MREFERCkgJChMSUJTKQorcGlwZWxpbmVzL3N0cmVzcyQoRVhFRVhUKTogJChwaXBlbGluZXNfc3RyZXNzX09CSkVDVFMpICQocGlwZWxpbmVzX3N0cmVzc19ERVBFTkRFTkNJRVMpIHBpcGVsaW5lcy8kKGFtX19kaXJzdGFtcCkKKwlAcm0gLWYgcGlwZWxpbmVzL3N0cmVzcyQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChwaXBlbGluZXNfc3RyZXNzX09CSkVDVFMpICQocGlwZWxpbmVzX3N0cmVzc19MREFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYWRhcHRlci5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYmFzZXNpbmsuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Jhc2VzcmMuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2JpdHJlYWRlci5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYnl0ZXJlYWRlci5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYnl0ZXdyaXRlci5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY2Fwc2ZpbHRlci5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY2xlYW51cC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY29sbGVjdHBhZHMuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NvbnRyb2xsZXIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2VsZW1lbnRzX2Zkc3JjLWZkc3JjLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9lbGVtZW50c19maWxlc3JjLWZpbGVzcmMuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Zha2VzaW5rLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9mYWtlc3JjLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9maWxlc2luay5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZnVubmVsLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nZHAuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dzdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ3N0YmluLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nc3RidWZmZXIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dzdGJ1ZmZlcmxpc3QuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dzdGJ1cy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ3N0Y2Fwcy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ3N0Y2hpbGRwcm94eS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ3N0Y2xvY2suUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dzdGNwcC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ3N0ZGF0ZXRpbWUuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dzdGVsZW1lbnQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dzdGVsZW1lbnRmYWN0b3J5LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nc3RldmVudC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ3N0Z2hvc3RwYWQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dzdGluZGV4LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nc3RpbmZvLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nc3RpdGVyYXRvci5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ3N0bGlic2NwcC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ3N0bWVzc2FnZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ3N0bWV0YS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ3N0bWluaW9iamVjdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ3N0bmV0Y2xpZW50Y2xvY2suUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dzdG5ldHRpbWVwcm92aWRlci5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ3N0b2JqZWN0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nc3RwYWQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dzdHBhcmFtc3BlY3MuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dzdHBpcGVsaW5lLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nc3RwbHVnaW4uUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dzdHBvbGwuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dzdHByZXNldC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ3N0cXVlcnkuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dzdHJlZ2lzdHJ5LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nc3RzZWdtZW50LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nc3RzdHJ1Y3R1cmUuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dzdHN5c3RlbWNsb2NrLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nc3R0YWcuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dzdHRhZ3NldHRlci5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ3N0dGFzay5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ3N0dXJpLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nc3R1dGlscy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ3N0dmFsdWUuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2lkZW50aXR5LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tdWx0aXF1ZXVlLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wYXJzZS1kaXNhYmxlZC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcGFyc2UtbGF1bmNoLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9xdWV1ZS1lcnJvci5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcXVldWUuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3F1ZXVlMi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc2VsZWN0b3IuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NpbXBsZS1sYXVuY2gtbGluZXMuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NpbmtzLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zdGF0ZXMuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3N0cmVzcy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdGVlLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90cmFuc2Zvcm0xLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90eXBlZmluZGhlbHBlci5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdmFsdmUuUG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworY2Fwc2ZpbHRlci5vOiBlbGVtZW50cy9jYXBzZmlsdGVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgY2Fwc2ZpbHRlci5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9jYXBzZmlsdGVyLlRwbyAtYyAtbyBjYXBzZmlsdGVyLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL2NhcHNmaWx0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvY2Fwc2ZpbHRlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9jYXBzZmlsdGVyLlRwbyAkKERFUERJUikvY2Fwc2ZpbHRlci5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2VsZW1lbnRzL2NhcHNmaWx0ZXIuYycgb2JqZWN0PSdjYXBzZmlsdGVyLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGNhcHNmaWx0ZXIubyBgdGVzdCAtZiAnZWxlbWVudHMvY2Fwc2ZpbHRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlbGVtZW50cy9jYXBzZmlsdGVyLmMKKworY2Fwc2ZpbHRlci5vYmo6IGVsZW1lbnRzL2NhcHNmaWx0ZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBjYXBzZmlsdGVyLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvY2Fwc2ZpbHRlci5UcG8gLWMgLW8gY2Fwc2ZpbHRlci5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL2NhcHNmaWx0ZXIuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9jYXBzZmlsdGVyLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL2NhcHNmaWx0ZXIuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvY2Fwc2ZpbHRlci5UcG8gJChERVBESVIpL2NhcHNmaWx0ZXIuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdlbGVtZW50cy9jYXBzZmlsdGVyLmMnIG9iamVjdD0nY2Fwc2ZpbHRlci5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGNhcHNmaWx0ZXIub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9jYXBzZmlsdGVyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZWxlbWVudHMvY2Fwc2ZpbHRlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9jYXBzZmlsdGVyLmMnOyBmaWAKKworZmFrZXNpbmsubzogZWxlbWVudHMvZmFrZXNpbmsuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBmYWtlc2luay5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9mYWtlc2luay5UcG8gLWMgLW8gZmFrZXNpbmsubyBgdGVzdCAtZiAnZWxlbWVudHMvZmFrZXNpbmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvZmFrZXNpbmsuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZmFrZXNpbmsuVHBvICQoREVQRElSKS9mYWtlc2luay5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2VsZW1lbnRzL2Zha2VzaW5rLmMnIG9iamVjdD0nZmFrZXNpbmsubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZmFrZXNpbmsubyBgdGVzdCAtZiAnZWxlbWVudHMvZmFrZXNpbmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvZmFrZXNpbmsuYworCitmYWtlc2luay5vYmo6IGVsZW1lbnRzL2Zha2VzaW5rLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZmFrZXNpbmsub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9mYWtlc2luay5UcG8gLWMgLW8gZmFrZXNpbmsub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9mYWtlc2luay5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL2Zha2VzaW5rLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL2Zha2VzaW5rLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2Zha2VzaW5rLlRwbyAkKERFUERJUikvZmFrZXNpbmsuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdlbGVtZW50cy9mYWtlc2luay5jJyBvYmplY3Q9J2Zha2VzaW5rLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZmFrZXNpbmsub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9mYWtlc2luay5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL2Zha2VzaW5rLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL2Zha2VzaW5rLmMnOyBmaWAKKworZmFrZXNyYy5vOiBlbGVtZW50cy9mYWtlc3JjLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZmFrZXNyYy5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9mYWtlc3JjLlRwbyAtYyAtbyBmYWtlc3JjLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL2Zha2VzcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvZmFrZXNyYy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9mYWtlc3JjLlRwbyAkKERFUERJUikvZmFrZXNyYy5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2VsZW1lbnRzL2Zha2VzcmMuYycgb2JqZWN0PSdmYWtlc3JjLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGZha2VzcmMubyBgdGVzdCAtZiAnZWxlbWVudHMvZmFrZXNyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlbGVtZW50cy9mYWtlc3JjLmMKKworZmFrZXNyYy5vYmo6IGVsZW1lbnRzL2Zha2VzcmMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBmYWtlc3JjLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZmFrZXNyYy5UcG8gLWMgLW8gZmFrZXNyYy5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL2Zha2VzcmMuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9mYWtlc3JjLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL2Zha2VzcmMuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZmFrZXNyYy5UcG8gJChERVBESVIpL2Zha2VzcmMuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdlbGVtZW50cy9mYWtlc3JjLmMnIG9iamVjdD0nZmFrZXNyYy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGZha2VzcmMub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9mYWtlc3JjLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZWxlbWVudHMvZmFrZXNyYy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9mYWtlc3JjLmMnOyBmaWAKKworZWxlbWVudHNfZmRzcmMtZmRzcmMubzogZWxlbWVudHMvZmRzcmMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2Zkc3JjX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50c19mZHNyYy1mZHNyYy5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9lbGVtZW50c19mZHNyYy1mZHNyYy5UcG8gLWMgLW8gZWxlbWVudHNfZmRzcmMtZmRzcmMubyBgdGVzdCAtZiAnZWxlbWVudHMvZmRzcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvZmRzcmMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZWxlbWVudHNfZmRzcmMtZmRzcmMuVHBvICQoREVQRElSKS9lbGVtZW50c19mZHNyYy1mZHNyYy5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2VsZW1lbnRzL2Zkc3JjLmMnIG9iamVjdD0nZWxlbWVudHNfZmRzcmMtZmRzcmMubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfZmRzcmNfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHNfZmRzcmMtZmRzcmMubyBgdGVzdCAtZiAnZWxlbWVudHMvZmRzcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvZmRzcmMuYworCitlbGVtZW50c19mZHNyYy1mZHNyYy5vYmo6IGVsZW1lbnRzL2Zkc3JjLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19mZHNyY19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHNfZmRzcmMtZmRzcmMub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9lbGVtZW50c19mZHNyYy1mZHNyYy5UcG8gLWMgLW8gZWxlbWVudHNfZmRzcmMtZmRzcmMub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9mZHNyYy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL2Zkc3JjLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL2Zkc3JjLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2VsZW1lbnRzX2Zkc3JjLWZkc3JjLlRwbyAkKERFUERJUikvZWxlbWVudHNfZmRzcmMtZmRzcmMuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdlbGVtZW50cy9mZHNyYy5jJyBvYmplY3Q9J2VsZW1lbnRzX2Zkc3JjLWZkc3JjLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfZmRzcmNfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHNfZmRzcmMtZmRzcmMub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9mZHNyYy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL2Zkc3JjLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL2Zkc3JjLmMnOyBmaWAKKworZmlsZXNpbmsubzogZWxlbWVudHMvZmlsZXNpbmsuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBmaWxlc2luay5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9maWxlc2luay5UcG8gLWMgLW8gZmlsZXNpbmsubyBgdGVzdCAtZiAnZWxlbWVudHMvZmlsZXNpbmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvZmlsZXNpbmsuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZmlsZXNpbmsuVHBvICQoREVQRElSKS9maWxlc2luay5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2VsZW1lbnRzL2ZpbGVzaW5rLmMnIG9iamVjdD0nZmlsZXNpbmsubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZmlsZXNpbmsubyBgdGVzdCAtZiAnZWxlbWVudHMvZmlsZXNpbmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvZmlsZXNpbmsuYworCitmaWxlc2luay5vYmo6IGVsZW1lbnRzL2ZpbGVzaW5rLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZmlsZXNpbmsub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9maWxlc2luay5UcG8gLWMgLW8gZmlsZXNpbmsub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9maWxlc2luay5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL2ZpbGVzaW5rLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL2ZpbGVzaW5rLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2ZpbGVzaW5rLlRwbyAkKERFUERJUikvZmlsZXNpbmsuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdlbGVtZW50cy9maWxlc2luay5jJyBvYmplY3Q9J2ZpbGVzaW5rLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZmlsZXNpbmsub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9maWxlc2luay5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL2ZpbGVzaW5rLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL2ZpbGVzaW5rLmMnOyBmaWAKKworZWxlbWVudHNfZmlsZXNyYy1maWxlc3JjLm86IGVsZW1lbnRzL2ZpbGVzcmMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2ZpbGVzcmNfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzX2ZpbGVzcmMtZmlsZXNyYy5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9lbGVtZW50c19maWxlc3JjLWZpbGVzcmMuVHBvIC1jIC1vIGVsZW1lbnRzX2ZpbGVzcmMtZmlsZXNyYy5vIGB0ZXN0IC1mICdlbGVtZW50cy9maWxlc3JjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2ZpbGVzcmMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZWxlbWVudHNfZmlsZXNyYy1maWxlc3JjLlRwbyAkKERFUERJUikvZWxlbWVudHNfZmlsZXNyYy1maWxlc3JjLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZWxlbWVudHMvZmlsZXNyYy5jJyBvYmplY3Q9J2VsZW1lbnRzX2ZpbGVzcmMtZmlsZXNyYy5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19maWxlc3JjX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzX2ZpbGVzcmMtZmlsZXNyYy5vIGB0ZXN0IC1mICdlbGVtZW50cy9maWxlc3JjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2ZpbGVzcmMuYworCitlbGVtZW50c19maWxlc3JjLWZpbGVzcmMub2JqOiBlbGVtZW50cy9maWxlc3JjLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19maWxlc3JjX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50c19maWxlc3JjLWZpbGVzcmMub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9lbGVtZW50c19maWxlc3JjLWZpbGVzcmMuVHBvIC1jIC1vIGVsZW1lbnRzX2ZpbGVzcmMtZmlsZXNyYy5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL2ZpbGVzcmMuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9maWxlc3JjLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL2ZpbGVzcmMuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZWxlbWVudHNfZmlsZXNyYy1maWxlc3JjLlRwbyAkKERFUERJUikvZWxlbWVudHNfZmlsZXNyYy1maWxlc3JjLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZWxlbWVudHMvZmlsZXNyYy5jJyBvYmplY3Q9J2VsZW1lbnRzX2ZpbGVzcmMtZmlsZXNyYy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2ZpbGVzcmNfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHNfZmlsZXNyYy1maWxlc3JjLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvZmlsZXNyYy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL2ZpbGVzcmMuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvZmlsZXNyYy5jJzsgZmlgCisKK2Z1bm5lbC5vOiBlbGVtZW50cy9mdW5uZWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBmdW5uZWwubyAtTUQgLU1QIC1NRiAkKERFUERJUikvZnVubmVsLlRwbyAtYyAtbyBmdW5uZWwubyBgdGVzdCAtZiAnZWxlbWVudHMvZnVubmVsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2Z1bm5lbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9mdW5uZWwuVHBvICQoREVQRElSKS9mdW5uZWwuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdlbGVtZW50cy9mdW5uZWwuYycgb2JqZWN0PSdmdW5uZWwubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZnVubmVsLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL2Z1bm5lbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlbGVtZW50cy9mdW5uZWwuYworCitmdW5uZWwub2JqOiBlbGVtZW50cy9mdW5uZWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBmdW5uZWwub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9mdW5uZWwuVHBvIC1jIC1vIGZ1bm5lbC5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL2Z1bm5lbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL2Z1bm5lbC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9mdW5uZWwuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZnVubmVsLlRwbyAkKERFUERJUikvZnVubmVsLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZWxlbWVudHMvZnVubmVsLmMnIG9iamVjdD0nZnVubmVsLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZnVubmVsLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvZnVubmVsLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZWxlbWVudHMvZnVubmVsLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL2Z1bm5lbC5jJzsgZmlgCisKK2lkZW50aXR5Lm86IGVsZW1lbnRzL2lkZW50aXR5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgaWRlbnRpdHkubyAtTUQgLU1QIC1NRiAkKERFUERJUikvaWRlbnRpdHkuVHBvIC1jIC1vIGlkZW50aXR5Lm8gYHRlc3QgLWYgJ2VsZW1lbnRzL2lkZW50aXR5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2lkZW50aXR5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2lkZW50aXR5LlRwbyAkKERFUERJUikvaWRlbnRpdHkuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdlbGVtZW50cy9pZGVudGl0eS5jJyBvYmplY3Q9J2lkZW50aXR5Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGlkZW50aXR5Lm8gYHRlc3QgLWYgJ2VsZW1lbnRzL2lkZW50aXR5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2lkZW50aXR5LmMKKworaWRlbnRpdHkub2JqOiBlbGVtZW50cy9pZGVudGl0eS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGlkZW50aXR5Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvaWRlbnRpdHkuVHBvIC1jIC1vIGlkZW50aXR5Lm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvaWRlbnRpdHkuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9pZGVudGl0eS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9pZGVudGl0eS5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9pZGVudGl0eS5UcG8gJChERVBESVIpL2lkZW50aXR5LlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZWxlbWVudHMvaWRlbnRpdHkuYycgb2JqZWN0PSdpZGVudGl0eS5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGlkZW50aXR5Lm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvaWRlbnRpdHkuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9pZGVudGl0eS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9pZGVudGl0eS5jJzsgZmlgCisKK211bHRpcXVldWUubzogZWxlbWVudHMvbXVsdGlxdWV1ZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIG11bHRpcXVldWUubyAtTUQgLU1QIC1NRiAkKERFUERJUikvbXVsdGlxdWV1ZS5UcG8gLWMgLW8gbXVsdGlxdWV1ZS5vIGB0ZXN0IC1mICdlbGVtZW50cy9tdWx0aXF1ZXVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL211bHRpcXVldWUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbXVsdGlxdWV1ZS5UcG8gJChERVBESVIpL211bHRpcXVldWUuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdlbGVtZW50cy9tdWx0aXF1ZXVlLmMnIG9iamVjdD0nbXVsdGlxdWV1ZS5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBtdWx0aXF1ZXVlLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL211bHRpcXVldWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvbXVsdGlxdWV1ZS5jCisKK211bHRpcXVldWUub2JqOiBlbGVtZW50cy9tdWx0aXF1ZXVlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbXVsdGlxdWV1ZS5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL211bHRpcXVldWUuVHBvIC1jIC1vIG11bHRpcXVldWUub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9tdWx0aXF1ZXVlLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZWxlbWVudHMvbXVsdGlxdWV1ZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9tdWx0aXF1ZXVlLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL211bHRpcXVldWUuVHBvICQoREVQRElSKS9tdWx0aXF1ZXVlLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZWxlbWVudHMvbXVsdGlxdWV1ZS5jJyBvYmplY3Q9J211bHRpcXVldWUub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBtdWx0aXF1ZXVlLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvbXVsdGlxdWV1ZS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL211bHRpcXVldWUuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvbXVsdGlxdWV1ZS5jJzsgZmlgCisKK3F1ZXVlLm86IGVsZW1lbnRzL3F1ZXVlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcXVldWUubyAtTUQgLU1QIC1NRiAkKERFUERJUikvcXVldWUuVHBvIC1jIC1vIHF1ZXVlLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL3F1ZXVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL3F1ZXVlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3F1ZXVlLlRwbyAkKERFUERJUikvcXVldWUuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdlbGVtZW50cy9xdWV1ZS5jJyBvYmplY3Q9J3F1ZXVlLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHF1ZXVlLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL3F1ZXVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL3F1ZXVlLmMKKworcXVldWUub2JqOiBlbGVtZW50cy9xdWV1ZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHF1ZXVlLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvcXVldWUuVHBvIC1jIC1vIHF1ZXVlLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvcXVldWUuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9xdWV1ZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9xdWV1ZS5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9xdWV1ZS5UcG8gJChERVBESVIpL3F1ZXVlLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZWxlbWVudHMvcXVldWUuYycgb2JqZWN0PSdxdWV1ZS5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHF1ZXVlLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvcXVldWUuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9xdWV1ZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9xdWV1ZS5jJzsgZmlgCisKK3F1ZXVlMi5vOiBlbGVtZW50cy9xdWV1ZTIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBxdWV1ZTIubyAtTUQgLU1QIC1NRiAkKERFUERJUikvcXVldWUyLlRwbyAtYyAtbyBxdWV1ZTIubyBgdGVzdCAtZiAnZWxlbWVudHMvcXVldWUyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL3F1ZXVlMi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9xdWV1ZTIuVHBvICQoREVQRElSKS9xdWV1ZTIuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdlbGVtZW50cy9xdWV1ZTIuYycgb2JqZWN0PSdxdWV1ZTIubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcXVldWUyLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL3F1ZXVlMi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlbGVtZW50cy9xdWV1ZTIuYworCitxdWV1ZTIub2JqOiBlbGVtZW50cy9xdWV1ZTIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBxdWV1ZTIub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9xdWV1ZTIuVHBvIC1jIC1vIHF1ZXVlMi5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL3F1ZXVlMi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL3F1ZXVlMi5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9xdWV1ZTIuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvcXVldWUyLlRwbyAkKERFUERJUikvcXVldWUyLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZWxlbWVudHMvcXVldWUyLmMnIG9iamVjdD0ncXVldWUyLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcXVldWUyLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvcXVldWUyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZWxlbWVudHMvcXVldWUyLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL3F1ZXVlMi5jJzsgZmlgCisKK3NlbGVjdG9yLm86IGVsZW1lbnRzL3NlbGVjdG9yLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc2VsZWN0b3IubyAtTUQgLU1QIC1NRiAkKERFUERJUikvc2VsZWN0b3IuVHBvIC1jIC1vIHNlbGVjdG9yLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL3NlbGVjdG9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL3NlbGVjdG9yLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3NlbGVjdG9yLlRwbyAkKERFUERJUikvc2VsZWN0b3IuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdlbGVtZW50cy9zZWxlY3Rvci5jJyBvYmplY3Q9J3NlbGVjdG9yLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNlbGVjdG9yLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL3NlbGVjdG9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL3NlbGVjdG9yLmMKKworc2VsZWN0b3Iub2JqOiBlbGVtZW50cy9zZWxlY3Rvci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNlbGVjdG9yLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvc2VsZWN0b3IuVHBvIC1jIC1vIHNlbGVjdG9yLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvc2VsZWN0b3IuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9zZWxlY3Rvci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9zZWxlY3Rvci5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9zZWxlY3Rvci5UcG8gJChERVBESVIpL3NlbGVjdG9yLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZWxlbWVudHMvc2VsZWN0b3IuYycgb2JqZWN0PSdzZWxlY3Rvci5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNlbGVjdG9yLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvc2VsZWN0b3IuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9zZWxlY3Rvci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9zZWxlY3Rvci5jJzsgZmlgCisKK3RlZS5vOiBlbGVtZW50cy90ZWUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCB0ZWUubyAtTUQgLU1QIC1NRiAkKERFUERJUikvdGVlLlRwbyAtYyAtbyB0ZWUubyBgdGVzdCAtZiAnZWxlbWVudHMvdGVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL3RlZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS90ZWUuVHBvICQoREVQRElSKS90ZWUuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdlbGVtZW50cy90ZWUuYycgb2JqZWN0PSd0ZWUubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdGVlLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL3RlZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlbGVtZW50cy90ZWUuYworCit0ZWUub2JqOiBlbGVtZW50cy90ZWUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCB0ZWUub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS90ZWUuVHBvIC1jIC1vIHRlZS5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL3RlZS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL3RlZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy90ZWUuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdGVlLlRwbyAkKERFUERJUikvdGVlLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZWxlbWVudHMvdGVlLmMnIG9iamVjdD0ndGVlLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdGVlLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvdGVlLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZWxlbWVudHMvdGVlLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL3RlZS5jJzsgZmlgCisKK3ZhbHZlLm86IGVsZW1lbnRzL3ZhbHZlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdmFsdmUubyAtTUQgLU1QIC1NRiAkKERFUERJUikvdmFsdmUuVHBvIC1jIC1vIHZhbHZlLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL3ZhbHZlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL3ZhbHZlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3ZhbHZlLlRwbyAkKERFUERJUikvdmFsdmUuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdlbGVtZW50cy92YWx2ZS5jJyBvYmplY3Q9J3ZhbHZlLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHZhbHZlLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL3ZhbHZlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL3ZhbHZlLmMKKwordmFsdmUub2JqOiBlbGVtZW50cy92YWx2ZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHZhbHZlLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvdmFsdmUuVHBvIC1jIC1vIHZhbHZlLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvdmFsdmUuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy92YWx2ZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy92YWx2ZS5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS92YWx2ZS5UcG8gJChERVBESVIpL3ZhbHZlLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZWxlbWVudHMvdmFsdmUuYycgb2JqZWN0PSd2YWx2ZS5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHZhbHZlLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvdmFsdmUuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy92YWx2ZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy92YWx2ZS5jJzsgZmlgCisKK3NpbmtzLm86IGdlbmVyaWMvc2lua3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzaW5rcy5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9zaW5rcy5UcG8gLWMgLW8gc2lua3MubyBgdGVzdCAtZiAnZ2VuZXJpYy9zaW5rcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BnZW5lcmljL3NpbmtzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3NpbmtzLlRwbyAkKERFUERJUikvc2lua3MuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnZW5lcmljL3NpbmtzLmMnIG9iamVjdD0nc2lua3MubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc2lua3MubyBgdGVzdCAtZiAnZ2VuZXJpYy9zaW5rcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BnZW5lcmljL3NpbmtzLmMKKworc2lua3Mub2JqOiBnZW5lcmljL3NpbmtzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc2lua3Mub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9zaW5rcy5UcG8gLWMgLW8gc2lua3Mub2JqIGBpZiB0ZXN0IC1mICdnZW5lcmljL3NpbmtzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ2VuZXJpYy9zaW5rcy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nZW5lcmljL3NpbmtzLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3NpbmtzLlRwbyAkKERFUERJUikvc2lua3MuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnZW5lcmljL3NpbmtzLmMnIG9iamVjdD0nc2lua3Mub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzaW5rcy5vYmogYGlmIHRlc3QgLWYgJ2dlbmVyaWMvc2lua3MuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnZW5lcmljL3NpbmtzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dlbmVyaWMvc2lua3MuYyc7IGZpYAorCitzdGF0ZXMubzogZ2VuZXJpYy9zdGF0ZXMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzdGF0ZXMubyAtTUQgLU1QIC1NRiAkKERFUERJUikvc3RhdGVzLlRwbyAtYyAtbyBzdGF0ZXMubyBgdGVzdCAtZiAnZ2VuZXJpYy9zdGF0ZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2VuZXJpYy9zdGF0ZXMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvc3RhdGVzLlRwbyAkKERFUERJUikvc3RhdGVzLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ2VuZXJpYy9zdGF0ZXMuYycgb2JqZWN0PSdzdGF0ZXMubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3RhdGVzLm8gYHRlc3QgLWYgJ2dlbmVyaWMvc3RhdGVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdlbmVyaWMvc3RhdGVzLmMKKworc3RhdGVzLm9iajogZ2VuZXJpYy9zdGF0ZXMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzdGF0ZXMub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9zdGF0ZXMuVHBvIC1jIC1vIHN0YXRlcy5vYmogYGlmIHRlc3QgLWYgJ2dlbmVyaWMvc3RhdGVzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ2VuZXJpYy9zdGF0ZXMuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ2VuZXJpYy9zdGF0ZXMuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvc3RhdGVzLlRwbyAkKERFUERJUikvc3RhdGVzLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ2VuZXJpYy9zdGF0ZXMuYycgb2JqZWN0PSdzdGF0ZXMub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzdGF0ZXMub2JqIGBpZiB0ZXN0IC1mICdnZW5lcmljL3N0YXRlcy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dlbmVyaWMvc3RhdGVzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dlbmVyaWMvc3RhdGVzLmMnOyBmaWAKKworZ3N0Lm86IGdzdC9nc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBnc3QubyAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0LlRwbyAtYyAtbyBnc3QubyBgdGVzdCAtZiAnZ3N0L2dzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdC5UcG8gJChERVBESVIpL2dzdC5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC9nc3QuYycgb2JqZWN0PSdnc3QubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0Lm8gYHRlc3QgLWYgJ2dzdC9nc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0L2dzdC5jCisKK2dzdC5vYmo6IGdzdC9nc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBnc3Qub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9nc3QuVHBvIC1jIC1vIGdzdC5vYmogYGlmIHRlc3QgLWYgJ2dzdC9nc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QvZ3N0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC9nc3QuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ3N0LlRwbyAkKERFUERJUikvZ3N0LlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0L2dzdC5jJyBvYmplY3Q9J2dzdC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdC5vYmogYGlmIHRlc3QgLWYgJ2dzdC9nc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QvZ3N0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC9nc3QuYyc7IGZpYAorCitnc3RiaW4ubzogZ3N0L2dzdGJpbi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdGJpbi5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9nc3RiaW4uVHBvIC1jIC1vIGdzdGJpbi5vIGB0ZXN0IC1mICdnc3QvZ3N0YmluLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3RiaW4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ3N0YmluLlRwbyAkKERFUERJUikvZ3N0YmluLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0L2dzdGJpbi5jJyBvYmplY3Q9J2dzdGJpbi5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RiaW4ubyBgdGVzdCAtZiAnZ3N0L2dzdGJpbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0YmluLmMKKworZ3N0YmluLm9iajogZ3N0L2dzdGJpbi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdGJpbi5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdGJpbi5UcG8gLWMgLW8gZ3N0YmluLm9iaiBgaWYgdGVzdCAtZiAnZ3N0L2dzdGJpbi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3RiaW4uYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdGJpbi5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RiaW4uVHBvICQoREVQRElSKS9nc3RiaW4uUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3QvZ3N0YmluLmMnIG9iamVjdD0nZ3N0YmluLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0YmluLm9iaiBgaWYgdGVzdCAtZiAnZ3N0L2dzdGJpbi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3RiaW4uYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdGJpbi5jJzsgZmlgCisKK2dzdGJ1ZmZlci5vOiBnc3QvZ3N0YnVmZmVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0YnVmZmVyLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdGJ1ZmZlci5UcG8gLWMgLW8gZ3N0YnVmZmVyLm8gYHRlc3QgLWYgJ2dzdC9nc3RidWZmZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0L2dzdGJ1ZmZlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RidWZmZXIuVHBvICQoREVQRElSKS9nc3RidWZmZXIuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3QvZ3N0YnVmZmVyLmMnIG9iamVjdD0nZ3N0YnVmZmVyLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdGJ1ZmZlci5vIGB0ZXN0IC1mICdnc3QvZ3N0YnVmZmVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3RidWZmZXIuYworCitnc3RidWZmZXIub2JqOiBnc3QvZ3N0YnVmZmVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0YnVmZmVyLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0YnVmZmVyLlRwbyAtYyAtbyBnc3RidWZmZXIub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0YnVmZmVyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdGJ1ZmZlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QvZ3N0YnVmZmVyLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdGJ1ZmZlci5UcG8gJChERVBESVIpL2dzdGJ1ZmZlci5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC9nc3RidWZmZXIuYycgb2JqZWN0PSdnc3RidWZmZXIub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RidWZmZXIub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0YnVmZmVyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdGJ1ZmZlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QvZ3N0YnVmZmVyLmMnOyBmaWAKKworZ3N0YnVmZmVybGlzdC5vOiBnc3QvZ3N0YnVmZmVybGlzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdGJ1ZmZlcmxpc3QubyAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0YnVmZmVybGlzdC5UcG8gLWMgLW8gZ3N0YnVmZmVybGlzdC5vIGB0ZXN0IC1mICdnc3QvZ3N0YnVmZmVybGlzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0YnVmZmVybGlzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RidWZmZXJsaXN0LlRwbyAkKERFUERJUikvZ3N0YnVmZmVybGlzdC5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC9nc3RidWZmZXJsaXN0LmMnIG9iamVjdD0nZ3N0YnVmZmVybGlzdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RidWZmZXJsaXN0Lm8gYHRlc3QgLWYgJ2dzdC9nc3RidWZmZXJsaXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3RidWZmZXJsaXN0LmMKKworZ3N0YnVmZmVybGlzdC5vYmo6IGdzdC9nc3RidWZmZXJsaXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0YnVmZmVybGlzdC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdGJ1ZmZlcmxpc3QuVHBvIC1jIC1vIGdzdGJ1ZmZlcmxpc3Qub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0YnVmZmVybGlzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3RidWZmZXJsaXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC9nc3RidWZmZXJsaXN0LmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdGJ1ZmZlcmxpc3QuVHBvICQoREVQRElSKS9nc3RidWZmZXJsaXN0LlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0L2dzdGJ1ZmZlcmxpc3QuYycgb2JqZWN0PSdnc3RidWZmZXJsaXN0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0YnVmZmVybGlzdC5vYmogYGlmIHRlc3QgLWYgJ2dzdC9nc3RidWZmZXJsaXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdGJ1ZmZlcmxpc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdGJ1ZmZlcmxpc3QuYyc7IGZpYAorCitnc3RidXMubzogZ3N0L2dzdGJ1cy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdGJ1cy5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9nc3RidXMuVHBvIC1jIC1vIGdzdGJ1cy5vIGB0ZXN0IC1mICdnc3QvZ3N0YnVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3RidXMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ3N0YnVzLlRwbyAkKERFUERJUikvZ3N0YnVzLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0L2dzdGJ1cy5jJyBvYmplY3Q9J2dzdGJ1cy5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RidXMubyBgdGVzdCAtZiAnZ3N0L2dzdGJ1cy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0YnVzLmMKKworZ3N0YnVzLm9iajogZ3N0L2dzdGJ1cy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdGJ1cy5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdGJ1cy5UcG8gLWMgLW8gZ3N0YnVzLm9iaiBgaWYgdGVzdCAtZiAnZ3N0L2dzdGJ1cy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3RidXMuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdGJ1cy5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RidXMuVHBvICQoREVQRElSKS9nc3RidXMuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3QvZ3N0YnVzLmMnIG9iamVjdD0nZ3N0YnVzLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0YnVzLm9iaiBgaWYgdGVzdCAtZiAnZ3N0L2dzdGJ1cy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3RidXMuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdGJ1cy5jJzsgZmlgCisKK2dzdGNhcHMubzogZ3N0L2dzdGNhcHMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBnc3RjYXBzLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdGNhcHMuVHBvIC1jIC1vIGdzdGNhcHMubyBgdGVzdCAtZiAnZ3N0L2dzdGNhcHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0L2dzdGNhcHMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ3N0Y2Fwcy5UcG8gJChERVBESVIpL2dzdGNhcHMuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3QvZ3N0Y2Fwcy5jJyBvYmplY3Q9J2dzdGNhcHMubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0Y2Fwcy5vIGB0ZXN0IC1mICdnc3QvZ3N0Y2Fwcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0Y2Fwcy5jCisKK2dzdGNhcHMub2JqOiBnc3QvZ3N0Y2Fwcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdGNhcHMub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9nc3RjYXBzLlRwbyAtYyAtbyBnc3RjYXBzLm9iaiBgaWYgdGVzdCAtZiAnZ3N0L2dzdGNhcHMuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QvZ3N0Y2Fwcy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QvZ3N0Y2Fwcy5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RjYXBzLlRwbyAkKERFUERJUikvZ3N0Y2Fwcy5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC9nc3RjYXBzLmMnIG9iamVjdD0nZ3N0Y2Fwcy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdGNhcHMub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0Y2Fwcy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3RjYXBzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC9nc3RjYXBzLmMnOyBmaWAKKworZ3N0Y2hpbGRwcm94eS5vOiBnc3QvZ3N0Y2hpbGRwcm94eS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdGNoaWxkcHJveHkubyAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0Y2hpbGRwcm94eS5UcG8gLWMgLW8gZ3N0Y2hpbGRwcm94eS5vIGB0ZXN0IC1mICdnc3QvZ3N0Y2hpbGRwcm94eS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0Y2hpbGRwcm94eS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RjaGlsZHByb3h5LlRwbyAkKERFUERJUikvZ3N0Y2hpbGRwcm94eS5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC9nc3RjaGlsZHByb3h5LmMnIG9iamVjdD0nZ3N0Y2hpbGRwcm94eS5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RjaGlsZHByb3h5Lm8gYHRlc3QgLWYgJ2dzdC9nc3RjaGlsZHByb3h5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3RjaGlsZHByb3h5LmMKKworZ3N0Y2hpbGRwcm94eS5vYmo6IGdzdC9nc3RjaGlsZHByb3h5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0Y2hpbGRwcm94eS5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdGNoaWxkcHJveHkuVHBvIC1jIC1vIGdzdGNoaWxkcHJveHkub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0Y2hpbGRwcm94eS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3RjaGlsZHByb3h5LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC9nc3RjaGlsZHByb3h5LmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdGNoaWxkcHJveHkuVHBvICQoREVQRElSKS9nc3RjaGlsZHByb3h5LlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0L2dzdGNoaWxkcHJveHkuYycgb2JqZWN0PSdnc3RjaGlsZHByb3h5Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0Y2hpbGRwcm94eS5vYmogYGlmIHRlc3QgLWYgJ2dzdC9nc3RjaGlsZHByb3h5LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdGNoaWxkcHJveHkuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdGNoaWxkcHJveHkuYyc7IGZpYAorCitnc3RjbG9jay5vOiBnc3QvZ3N0Y2xvY2suYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBnc3RjbG9jay5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9nc3RjbG9jay5UcG8gLWMgLW8gZ3N0Y2xvY2subyBgdGVzdCAtZiAnZ3N0L2dzdGNsb2NrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3RjbG9jay5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RjbG9jay5UcG8gJChERVBESVIpL2dzdGNsb2NrLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0L2dzdGNsb2NrLmMnIG9iamVjdD0nZ3N0Y2xvY2subycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0Y2xvY2subyBgdGVzdCAtZiAnZ3N0L2dzdGNsb2NrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3RjbG9jay5jCisKK2dzdGNsb2NrLm9iajogZ3N0L2dzdGNsb2NrLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0Y2xvY2sub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9nc3RjbG9jay5UcG8gLWMgLW8gZ3N0Y2xvY2sub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0Y2xvY2suYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QvZ3N0Y2xvY2suYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdGNsb2NrLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdGNsb2NrLlRwbyAkKERFUERJUikvZ3N0Y2xvY2suUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3QvZ3N0Y2xvY2suYycgb2JqZWN0PSdnc3RjbG9jay5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdGNsb2NrLm9iaiBgaWYgdGVzdCAtZiAnZ3N0L2dzdGNsb2NrLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdGNsb2NrLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC9nc3RjbG9jay5jJzsgZmlgCisKK2dzdGRhdGV0aW1lLm86IGdzdC9nc3RkYXRldGltZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdGRhdGV0aW1lLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdGRhdGV0aW1lLlRwbyAtYyAtbyBnc3RkYXRldGltZS5vIGB0ZXN0IC1mICdnc3QvZ3N0ZGF0ZXRpbWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0L2dzdGRhdGV0aW1lLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdGRhdGV0aW1lLlRwbyAkKERFUERJUikvZ3N0ZGF0ZXRpbWUuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3QvZ3N0ZGF0ZXRpbWUuYycgb2JqZWN0PSdnc3RkYXRldGltZS5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RkYXRldGltZS5vIGB0ZXN0IC1mICdnc3QvZ3N0ZGF0ZXRpbWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0L2dzdGRhdGV0aW1lLmMKKworZ3N0ZGF0ZXRpbWUub2JqOiBnc3QvZ3N0ZGF0ZXRpbWUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBnc3RkYXRldGltZS5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdGRhdGV0aW1lLlRwbyAtYyAtbyBnc3RkYXRldGltZS5vYmogYGlmIHRlc3QgLWYgJ2dzdC9nc3RkYXRldGltZS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3RkYXRldGltZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QvZ3N0ZGF0ZXRpbWUuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ3N0ZGF0ZXRpbWUuVHBvICQoREVQRElSKS9nc3RkYXRldGltZS5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC9nc3RkYXRldGltZS5jJyBvYmplY3Q9J2dzdGRhdGV0aW1lLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0ZGF0ZXRpbWUub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0ZGF0ZXRpbWUuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QvZ3N0ZGF0ZXRpbWUuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdGRhdGV0aW1lLmMnOyBmaWAKKworZ3N0ZWxlbWVudC5vOiBnc3QvZ3N0ZWxlbWVudC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdGVsZW1lbnQubyAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0ZWxlbWVudC5UcG8gLWMgLW8gZ3N0ZWxlbWVudC5vIGB0ZXN0IC1mICdnc3QvZ3N0ZWxlbWVudC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0ZWxlbWVudC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RlbGVtZW50LlRwbyAkKERFUERJUikvZ3N0ZWxlbWVudC5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC9nc3RlbGVtZW50LmMnIG9iamVjdD0nZ3N0ZWxlbWVudC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RlbGVtZW50Lm8gYHRlc3QgLWYgJ2dzdC9nc3RlbGVtZW50LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3RlbGVtZW50LmMKKworZ3N0ZWxlbWVudC5vYmo6IGdzdC9nc3RlbGVtZW50LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0ZWxlbWVudC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdGVsZW1lbnQuVHBvIC1jIC1vIGdzdGVsZW1lbnQub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0ZWxlbWVudC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3RlbGVtZW50LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC9nc3RlbGVtZW50LmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdGVsZW1lbnQuVHBvICQoREVQRElSKS9nc3RlbGVtZW50LlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0L2dzdGVsZW1lbnQuYycgb2JqZWN0PSdnc3RlbGVtZW50Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0ZWxlbWVudC5vYmogYGlmIHRlc3QgLWYgJ2dzdC9nc3RlbGVtZW50LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdGVsZW1lbnQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdGVsZW1lbnQuYyc7IGZpYAorCitnc3RlbGVtZW50ZmFjdG9yeS5vOiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBnc3RlbGVtZW50ZmFjdG9yeS5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9nc3RlbGVtZW50ZmFjdG9yeS5UcG8gLWMgLW8gZ3N0ZWxlbWVudGZhY3RvcnkubyBgdGVzdCAtZiAnZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RlbGVtZW50ZmFjdG9yeS5UcG8gJChERVBESVIpL2dzdGVsZW1lbnRmYWN0b3J5LlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmMnIG9iamVjdD0nZ3N0ZWxlbWVudGZhY3RvcnkubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0ZWxlbWVudGZhY3RvcnkubyBgdGVzdCAtZiAnZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jCisKK2dzdGVsZW1lbnRmYWN0b3J5Lm9iajogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0ZWxlbWVudGZhY3Rvcnkub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9nc3RlbGVtZW50ZmFjdG9yeS5UcG8gLWMgLW8gZ3N0ZWxlbWVudGZhY3Rvcnkub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdGVsZW1lbnRmYWN0b3J5LlRwbyAkKERFUERJUikvZ3N0ZWxlbWVudGZhY3RvcnkuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYycgb2JqZWN0PSdnc3RlbGVtZW50ZmFjdG9yeS5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdGVsZW1lbnRmYWN0b3J5Lm9iaiBgaWYgdGVzdCAtZiAnZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC9nc3RlbGVtZW50ZmFjdG9yeS5jJzsgZmlgCisKK2dzdGV2ZW50Lm86IGdzdC9nc3RldmVudC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdGV2ZW50Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdGV2ZW50LlRwbyAtYyAtbyBnc3RldmVudC5vIGB0ZXN0IC1mICdnc3QvZ3N0ZXZlbnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0L2dzdGV2ZW50LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdGV2ZW50LlRwbyAkKERFUERJUikvZ3N0ZXZlbnQuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3QvZ3N0ZXZlbnQuYycgb2JqZWN0PSdnc3RldmVudC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RldmVudC5vIGB0ZXN0IC1mICdnc3QvZ3N0ZXZlbnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0L2dzdGV2ZW50LmMKKworZ3N0ZXZlbnQub2JqOiBnc3QvZ3N0ZXZlbnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBnc3RldmVudC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdGV2ZW50LlRwbyAtYyAtbyBnc3RldmVudC5vYmogYGlmIHRlc3QgLWYgJ2dzdC9nc3RldmVudC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3RldmVudC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QvZ3N0ZXZlbnQuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ3N0ZXZlbnQuVHBvICQoREVQRElSKS9nc3RldmVudC5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC9nc3RldmVudC5jJyBvYmplY3Q9J2dzdGV2ZW50Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0ZXZlbnQub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0ZXZlbnQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QvZ3N0ZXZlbnQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdGV2ZW50LmMnOyBmaWAKKworZ3N0Z2hvc3RwYWQubzogZ3N0L2dzdGdob3N0cGFkLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0Z2hvc3RwYWQubyAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0Z2hvc3RwYWQuVHBvIC1jIC1vIGdzdGdob3N0cGFkLm8gYHRlc3QgLWYgJ2dzdC9nc3RnaG9zdHBhZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0Z2hvc3RwYWQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ3N0Z2hvc3RwYWQuVHBvICQoREVQRElSKS9nc3RnaG9zdHBhZC5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC9nc3RnaG9zdHBhZC5jJyBvYmplY3Q9J2dzdGdob3N0cGFkLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdGdob3N0cGFkLm8gYHRlc3QgLWYgJ2dzdC9nc3RnaG9zdHBhZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0Z2hvc3RwYWQuYworCitnc3RnaG9zdHBhZC5vYmo6IGdzdC9nc3RnaG9zdHBhZC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdGdob3N0cGFkLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0Z2hvc3RwYWQuVHBvIC1jIC1vIGdzdGdob3N0cGFkLm9iaiBgaWYgdGVzdCAtZiAnZ3N0L2dzdGdob3N0cGFkLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdGdob3N0cGFkLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC9nc3RnaG9zdHBhZC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RnaG9zdHBhZC5UcG8gJChERVBESVIpL2dzdGdob3N0cGFkLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0L2dzdGdob3N0cGFkLmMnIG9iamVjdD0nZ3N0Z2hvc3RwYWQub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RnaG9zdHBhZC5vYmogYGlmIHRlc3QgLWYgJ2dzdC9nc3RnaG9zdHBhZC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3RnaG9zdHBhZC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QvZ3N0Z2hvc3RwYWQuYyc7IGZpYAorCitnc3RpbmRleC5vOiBnc3QvZ3N0aW5kZXguYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBnc3RpbmRleC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9nc3RpbmRleC5UcG8gLWMgLW8gZ3N0aW5kZXgubyBgdGVzdCAtZiAnZ3N0L2dzdGluZGV4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3RpbmRleC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RpbmRleC5UcG8gJChERVBESVIpL2dzdGluZGV4LlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0L2dzdGluZGV4LmMnIG9iamVjdD0nZ3N0aW5kZXgubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0aW5kZXgubyBgdGVzdCAtZiAnZ3N0L2dzdGluZGV4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3RpbmRleC5jCisKK2dzdGluZGV4Lm9iajogZ3N0L2dzdGluZGV4LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0aW5kZXgub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9nc3RpbmRleC5UcG8gLWMgLW8gZ3N0aW5kZXgub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0aW5kZXguYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QvZ3N0aW5kZXguYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdGluZGV4LmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdGluZGV4LlRwbyAkKERFUERJUikvZ3N0aW5kZXguUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3QvZ3N0aW5kZXguYycgb2JqZWN0PSdnc3RpbmRleC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdGluZGV4Lm9iaiBgaWYgdGVzdCAtZiAnZ3N0L2dzdGluZGV4LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdGluZGV4LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC9nc3RpbmRleC5jJzsgZmlgCisKK2dzdGluZm8ubzogZ3N0L2dzdGluZm8uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBnc3RpbmZvLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdGluZm8uVHBvIC1jIC1vIGdzdGluZm8ubyBgdGVzdCAtZiAnZ3N0L2dzdGluZm8uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0L2dzdGluZm8uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ3N0aW5mby5UcG8gJChERVBESVIpL2dzdGluZm8uUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3QvZ3N0aW5mby5jJyBvYmplY3Q9J2dzdGluZm8ubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0aW5mby5vIGB0ZXN0IC1mICdnc3QvZ3N0aW5mby5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0aW5mby5jCisKK2dzdGluZm8ub2JqOiBnc3QvZ3N0aW5mby5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdGluZm8ub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9nc3RpbmZvLlRwbyAtYyAtbyBnc3RpbmZvLm9iaiBgaWYgdGVzdCAtZiAnZ3N0L2dzdGluZm8uYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QvZ3N0aW5mby5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QvZ3N0aW5mby5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RpbmZvLlRwbyAkKERFUERJUikvZ3N0aW5mby5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC9nc3RpbmZvLmMnIG9iamVjdD0nZ3N0aW5mby5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdGluZm8ub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0aW5mby5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3RpbmZvLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC9nc3RpbmZvLmMnOyBmaWAKKworZ3N0aXRlcmF0b3IubzogZ3N0L2dzdGl0ZXJhdG9yLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0aXRlcmF0b3IubyAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0aXRlcmF0b3IuVHBvIC1jIC1vIGdzdGl0ZXJhdG9yLm8gYHRlc3QgLWYgJ2dzdC9nc3RpdGVyYXRvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0aXRlcmF0b3IuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ3N0aXRlcmF0b3IuVHBvICQoREVQRElSKS9nc3RpdGVyYXRvci5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC9nc3RpdGVyYXRvci5jJyBvYmplY3Q9J2dzdGl0ZXJhdG9yLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdGl0ZXJhdG9yLm8gYHRlc3QgLWYgJ2dzdC9nc3RpdGVyYXRvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0aXRlcmF0b3IuYworCitnc3RpdGVyYXRvci5vYmo6IGdzdC9nc3RpdGVyYXRvci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdGl0ZXJhdG9yLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0aXRlcmF0b3IuVHBvIC1jIC1vIGdzdGl0ZXJhdG9yLm9iaiBgaWYgdGVzdCAtZiAnZ3N0L2dzdGl0ZXJhdG9yLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdGl0ZXJhdG9yLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC9nc3RpdGVyYXRvci5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RpdGVyYXRvci5UcG8gJChERVBESVIpL2dzdGl0ZXJhdG9yLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0L2dzdGl0ZXJhdG9yLmMnIG9iamVjdD0nZ3N0aXRlcmF0b3Iub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RpdGVyYXRvci5vYmogYGlmIHRlc3QgLWYgJ2dzdC9nc3RpdGVyYXRvci5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3RpdGVyYXRvci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QvZ3N0aXRlcmF0b3IuYyc7IGZpYAorCitnc3RtZXNzYWdlLm86IGdzdC9nc3RtZXNzYWdlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0bWVzc2FnZS5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9nc3RtZXNzYWdlLlRwbyAtYyAtbyBnc3RtZXNzYWdlLm8gYHRlc3QgLWYgJ2dzdC9nc3RtZXNzYWdlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3RtZXNzYWdlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdG1lc3NhZ2UuVHBvICQoREVQRElSKS9nc3RtZXNzYWdlLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0L2dzdG1lc3NhZ2UuYycgb2JqZWN0PSdnc3RtZXNzYWdlLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdG1lc3NhZ2UubyBgdGVzdCAtZiAnZ3N0L2dzdG1lc3NhZ2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0L2dzdG1lc3NhZ2UuYworCitnc3RtZXNzYWdlLm9iajogZ3N0L2dzdG1lc3NhZ2UuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBnc3RtZXNzYWdlLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0bWVzc2FnZS5UcG8gLWMgLW8gZ3N0bWVzc2FnZS5vYmogYGlmIHRlc3QgLWYgJ2dzdC9nc3RtZXNzYWdlLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdG1lc3NhZ2UuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdG1lc3NhZ2UuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ3N0bWVzc2FnZS5UcG8gJChERVBESVIpL2dzdG1lc3NhZ2UuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3QvZ3N0bWVzc2FnZS5jJyBvYmplY3Q9J2dzdG1lc3NhZ2Uub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RtZXNzYWdlLm9iaiBgaWYgdGVzdCAtZiAnZ3N0L2dzdG1lc3NhZ2UuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QvZ3N0bWVzc2FnZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QvZ3N0bWVzc2FnZS5jJzsgZmlgCisKK2dzdG1ldGEubzogZ3N0L2dzdG1ldGEuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBnc3RtZXRhLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdG1ldGEuVHBvIC1jIC1vIGdzdG1ldGEubyBgdGVzdCAtZiAnZ3N0L2dzdG1ldGEuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0L2dzdG1ldGEuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ3N0bWV0YS5UcG8gJChERVBESVIpL2dzdG1ldGEuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3QvZ3N0bWV0YS5jJyBvYmplY3Q9J2dzdG1ldGEubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0bWV0YS5vIGB0ZXN0IC1mICdnc3QvZ3N0bWV0YS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0bWV0YS5jCisKK2dzdG1ldGEub2JqOiBnc3QvZ3N0bWV0YS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdG1ldGEub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9nc3RtZXRhLlRwbyAtYyAtbyBnc3RtZXRhLm9iaiBgaWYgdGVzdCAtZiAnZ3N0L2dzdG1ldGEuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QvZ3N0bWV0YS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QvZ3N0bWV0YS5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RtZXRhLlRwbyAkKERFUERJUikvZ3N0bWV0YS5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC9nc3RtZXRhLmMnIG9iamVjdD0nZ3N0bWV0YS5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdG1ldGEub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0bWV0YS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3RtZXRhLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC9nc3RtZXRhLmMnOyBmaWAKKworZ3N0bWluaW9iamVjdC5vOiBnc3QvZ3N0bWluaW9iamVjdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdG1pbmlvYmplY3QubyAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0bWluaW9iamVjdC5UcG8gLWMgLW8gZ3N0bWluaW9iamVjdC5vIGB0ZXN0IC1mICdnc3QvZ3N0bWluaW9iamVjdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0bWluaW9iamVjdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RtaW5pb2JqZWN0LlRwbyAkKERFUERJUikvZ3N0bWluaW9iamVjdC5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC9nc3RtaW5pb2JqZWN0LmMnIG9iamVjdD0nZ3N0bWluaW9iamVjdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RtaW5pb2JqZWN0Lm8gYHRlc3QgLWYgJ2dzdC9nc3RtaW5pb2JqZWN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3RtaW5pb2JqZWN0LmMKKworZ3N0bWluaW9iamVjdC5vYmo6IGdzdC9nc3RtaW5pb2JqZWN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0bWluaW9iamVjdC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdG1pbmlvYmplY3QuVHBvIC1jIC1vIGdzdG1pbmlvYmplY3Qub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0bWluaW9iamVjdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3RtaW5pb2JqZWN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC9nc3RtaW5pb2JqZWN0LmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdG1pbmlvYmplY3QuVHBvICQoREVQRElSKS9nc3RtaW5pb2JqZWN0LlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0L2dzdG1pbmlvYmplY3QuYycgb2JqZWN0PSdnc3RtaW5pb2JqZWN0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0bWluaW9iamVjdC5vYmogYGlmIHRlc3QgLWYgJ2dzdC9nc3RtaW5pb2JqZWN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdG1pbmlvYmplY3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdG1pbmlvYmplY3QuYyc7IGZpYAorCitnc3RvYmplY3QubzogZ3N0L2dzdG9iamVjdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdG9iamVjdC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9nc3RvYmplY3QuVHBvIC1jIC1vIGdzdG9iamVjdC5vIGB0ZXN0IC1mICdnc3QvZ3N0b2JqZWN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3RvYmplY3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ3N0b2JqZWN0LlRwbyAkKERFUERJUikvZ3N0b2JqZWN0LlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0L2dzdG9iamVjdC5jJyBvYmplY3Q9J2dzdG9iamVjdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RvYmplY3QubyBgdGVzdCAtZiAnZ3N0L2dzdG9iamVjdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0b2JqZWN0LmMKKworZ3N0b2JqZWN0Lm9iajogZ3N0L2dzdG9iamVjdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdG9iamVjdC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdG9iamVjdC5UcG8gLWMgLW8gZ3N0b2JqZWN0Lm9iaiBgaWYgdGVzdCAtZiAnZ3N0L2dzdG9iamVjdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3RvYmplY3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdG9iamVjdC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RvYmplY3QuVHBvICQoREVQRElSKS9nc3RvYmplY3QuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3QvZ3N0b2JqZWN0LmMnIG9iamVjdD0nZ3N0b2JqZWN0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0b2JqZWN0Lm9iaiBgaWYgdGVzdCAtZiAnZ3N0L2dzdG9iamVjdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3RvYmplY3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdG9iamVjdC5jJzsgZmlgCisKK2dzdHBhZC5vOiBnc3QvZ3N0cGFkLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0cGFkLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdHBhZC5UcG8gLWMgLW8gZ3N0cGFkLm8gYHRlc3QgLWYgJ2dzdC9nc3RwYWQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0L2dzdHBhZC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RwYWQuVHBvICQoREVQRElSKS9nc3RwYWQuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3QvZ3N0cGFkLmMnIG9iamVjdD0nZ3N0cGFkLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdHBhZC5vIGB0ZXN0IC1mICdnc3QvZ3N0cGFkLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3RwYWQuYworCitnc3RwYWQub2JqOiBnc3QvZ3N0cGFkLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0cGFkLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0cGFkLlRwbyAtYyAtbyBnc3RwYWQub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0cGFkLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdHBhZC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QvZ3N0cGFkLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdHBhZC5UcG8gJChERVBESVIpL2dzdHBhZC5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC9nc3RwYWQuYycgb2JqZWN0PSdnc3RwYWQub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RwYWQub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0cGFkLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdHBhZC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QvZ3N0cGFkLmMnOyBmaWAKKworZ3N0cGFyYW1zcGVjcy5vOiBnc3QvZ3N0cGFyYW1zcGVjcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdHBhcmFtc3BlY3MubyAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0cGFyYW1zcGVjcy5UcG8gLWMgLW8gZ3N0cGFyYW1zcGVjcy5vIGB0ZXN0IC1mICdnc3QvZ3N0cGFyYW1zcGVjcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0cGFyYW1zcGVjcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RwYXJhbXNwZWNzLlRwbyAkKERFUERJUikvZ3N0cGFyYW1zcGVjcy5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC9nc3RwYXJhbXNwZWNzLmMnIG9iamVjdD0nZ3N0cGFyYW1zcGVjcy5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RwYXJhbXNwZWNzLm8gYHRlc3QgLWYgJ2dzdC9nc3RwYXJhbXNwZWNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3RwYXJhbXNwZWNzLmMKKworZ3N0cGFyYW1zcGVjcy5vYmo6IGdzdC9nc3RwYXJhbXNwZWNzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0cGFyYW1zcGVjcy5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdHBhcmFtc3BlY3MuVHBvIC1jIC1vIGdzdHBhcmFtc3BlY3Mub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0cGFyYW1zcGVjcy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3RwYXJhbXNwZWNzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC9nc3RwYXJhbXNwZWNzLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdHBhcmFtc3BlY3MuVHBvICQoREVQRElSKS9nc3RwYXJhbXNwZWNzLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0L2dzdHBhcmFtc3BlY3MuYycgb2JqZWN0PSdnc3RwYXJhbXNwZWNzLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0cGFyYW1zcGVjcy5vYmogYGlmIHRlc3QgLWYgJ2dzdC9nc3RwYXJhbXNwZWNzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdHBhcmFtc3BlY3MuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdHBhcmFtc3BlY3MuYyc7IGZpYAorCitnc3RwaXBlbGluZS5vOiBnc3QvZ3N0cGlwZWxpbmUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBnc3RwaXBlbGluZS5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9nc3RwaXBlbGluZS5UcG8gLWMgLW8gZ3N0cGlwZWxpbmUubyBgdGVzdCAtZiAnZ3N0L2dzdHBpcGVsaW5lLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3RwaXBlbGluZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RwaXBlbGluZS5UcG8gJChERVBESVIpL2dzdHBpcGVsaW5lLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0L2dzdHBpcGVsaW5lLmMnIG9iamVjdD0nZ3N0cGlwZWxpbmUubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0cGlwZWxpbmUubyBgdGVzdCAtZiAnZ3N0L2dzdHBpcGVsaW5lLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3RwaXBlbGluZS5jCisKK2dzdHBpcGVsaW5lLm9iajogZ3N0L2dzdHBpcGVsaW5lLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0cGlwZWxpbmUub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9nc3RwaXBlbGluZS5UcG8gLWMgLW8gZ3N0cGlwZWxpbmUub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0cGlwZWxpbmUuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QvZ3N0cGlwZWxpbmUuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdHBpcGVsaW5lLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdHBpcGVsaW5lLlRwbyAkKERFUERJUikvZ3N0cGlwZWxpbmUuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3QvZ3N0cGlwZWxpbmUuYycgb2JqZWN0PSdnc3RwaXBlbGluZS5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdHBpcGVsaW5lLm9iaiBgaWYgdGVzdCAtZiAnZ3N0L2dzdHBpcGVsaW5lLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdHBpcGVsaW5lLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC9nc3RwaXBlbGluZS5jJzsgZmlgCisKK2dzdHBsdWdpbi5vOiBnc3QvZ3N0cGx1Z2luLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0cGx1Z2luLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdHBsdWdpbi5UcG8gLWMgLW8gZ3N0cGx1Z2luLm8gYHRlc3QgLWYgJ2dzdC9nc3RwbHVnaW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0L2dzdHBsdWdpbi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RwbHVnaW4uVHBvICQoREVQRElSKS9nc3RwbHVnaW4uUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3QvZ3N0cGx1Z2luLmMnIG9iamVjdD0nZ3N0cGx1Z2luLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdHBsdWdpbi5vIGB0ZXN0IC1mICdnc3QvZ3N0cGx1Z2luLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3RwbHVnaW4uYworCitnc3RwbHVnaW4ub2JqOiBnc3QvZ3N0cGx1Z2luLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0cGx1Z2luLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0cGx1Z2luLlRwbyAtYyAtbyBnc3RwbHVnaW4ub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0cGx1Z2luLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdHBsdWdpbi5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QvZ3N0cGx1Z2luLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdHBsdWdpbi5UcG8gJChERVBESVIpL2dzdHBsdWdpbi5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC9nc3RwbHVnaW4uYycgb2JqZWN0PSdnc3RwbHVnaW4ub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RwbHVnaW4ub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0cGx1Z2luLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdHBsdWdpbi5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QvZ3N0cGx1Z2luLmMnOyBmaWAKKworZ3N0cG9sbC5vOiBnc3QvZ3N0cG9sbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdHBvbGwubyAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0cG9sbC5UcG8gLWMgLW8gZ3N0cG9sbC5vIGB0ZXN0IC1mICdnc3QvZ3N0cG9sbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0cG9sbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3Rwb2xsLlRwbyAkKERFUERJUikvZ3N0cG9sbC5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC9nc3Rwb2xsLmMnIG9iamVjdD0nZ3N0cG9sbC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3Rwb2xsLm8gYHRlc3QgLWYgJ2dzdC9nc3Rwb2xsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3Rwb2xsLmMKKworZ3N0cG9sbC5vYmo6IGdzdC9nc3Rwb2xsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0cG9sbC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdHBvbGwuVHBvIC1jIC1vIGdzdHBvbGwub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0cG9sbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3Rwb2xsLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC9nc3Rwb2xsLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdHBvbGwuVHBvICQoREVQRElSKS9nc3Rwb2xsLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0L2dzdHBvbGwuYycgb2JqZWN0PSdnc3Rwb2xsLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0cG9sbC5vYmogYGlmIHRlc3QgLWYgJ2dzdC9nc3Rwb2xsLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdHBvbGwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdHBvbGwuYyc7IGZpYAorCitnc3RwcmVzZXQubzogZ3N0L2dzdHByZXNldC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdHByZXNldC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9nc3RwcmVzZXQuVHBvIC1jIC1vIGdzdHByZXNldC5vIGB0ZXN0IC1mICdnc3QvZ3N0cHJlc2V0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3RwcmVzZXQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ3N0cHJlc2V0LlRwbyAkKERFUERJUikvZ3N0cHJlc2V0LlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0L2dzdHByZXNldC5jJyBvYmplY3Q9J2dzdHByZXNldC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RwcmVzZXQubyBgdGVzdCAtZiAnZ3N0L2dzdHByZXNldC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0cHJlc2V0LmMKKworZ3N0cHJlc2V0Lm9iajogZ3N0L2dzdHByZXNldC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdHByZXNldC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdHByZXNldC5UcG8gLWMgLW8gZ3N0cHJlc2V0Lm9iaiBgaWYgdGVzdCAtZiAnZ3N0L2dzdHByZXNldC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3RwcmVzZXQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdHByZXNldC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RwcmVzZXQuVHBvICQoREVQRElSKS9nc3RwcmVzZXQuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3QvZ3N0cHJlc2V0LmMnIG9iamVjdD0nZ3N0cHJlc2V0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0cHJlc2V0Lm9iaiBgaWYgdGVzdCAtZiAnZ3N0L2dzdHByZXNldC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3RwcmVzZXQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdHByZXNldC5jJzsgZmlgCisKK2dzdHF1ZXJ5Lm86IGdzdC9nc3RxdWVyeS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdHF1ZXJ5Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdHF1ZXJ5LlRwbyAtYyAtbyBnc3RxdWVyeS5vIGB0ZXN0IC1mICdnc3QvZ3N0cXVlcnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0L2dzdHF1ZXJ5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdHF1ZXJ5LlRwbyAkKERFUERJUikvZ3N0cXVlcnkuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3QvZ3N0cXVlcnkuYycgb2JqZWN0PSdnc3RxdWVyeS5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RxdWVyeS5vIGB0ZXN0IC1mICdnc3QvZ3N0cXVlcnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0L2dzdHF1ZXJ5LmMKKworZ3N0cXVlcnkub2JqOiBnc3QvZ3N0cXVlcnkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBnc3RxdWVyeS5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdHF1ZXJ5LlRwbyAtYyAtbyBnc3RxdWVyeS5vYmogYGlmIHRlc3QgLWYgJ2dzdC9nc3RxdWVyeS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3RxdWVyeS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QvZ3N0cXVlcnkuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ3N0cXVlcnkuVHBvICQoREVQRElSKS9nc3RxdWVyeS5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC9nc3RxdWVyeS5jJyBvYmplY3Q9J2dzdHF1ZXJ5Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0cXVlcnkub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0cXVlcnkuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QvZ3N0cXVlcnkuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdHF1ZXJ5LmMnOyBmaWAKKworZ3N0cmVnaXN0cnkubzogZ3N0L2dzdHJlZ2lzdHJ5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0cmVnaXN0cnkubyAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0cmVnaXN0cnkuVHBvIC1jIC1vIGdzdHJlZ2lzdHJ5Lm8gYHRlc3QgLWYgJ2dzdC9nc3RyZWdpc3RyeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0cmVnaXN0cnkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ3N0cmVnaXN0cnkuVHBvICQoREVQRElSKS9nc3RyZWdpc3RyeS5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC9nc3RyZWdpc3RyeS5jJyBvYmplY3Q9J2dzdHJlZ2lzdHJ5Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdHJlZ2lzdHJ5Lm8gYHRlc3QgLWYgJ2dzdC9nc3RyZWdpc3RyeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0cmVnaXN0cnkuYworCitnc3RyZWdpc3RyeS5vYmo6IGdzdC9nc3RyZWdpc3RyeS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdHJlZ2lzdHJ5Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0cmVnaXN0cnkuVHBvIC1jIC1vIGdzdHJlZ2lzdHJ5Lm9iaiBgaWYgdGVzdCAtZiAnZ3N0L2dzdHJlZ2lzdHJ5LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdHJlZ2lzdHJ5LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC9nc3RyZWdpc3RyeS5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RyZWdpc3RyeS5UcG8gJChERVBESVIpL2dzdHJlZ2lzdHJ5LlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0L2dzdHJlZ2lzdHJ5LmMnIG9iamVjdD0nZ3N0cmVnaXN0cnkub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RyZWdpc3RyeS5vYmogYGlmIHRlc3QgLWYgJ2dzdC9nc3RyZWdpc3RyeS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3RyZWdpc3RyeS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QvZ3N0cmVnaXN0cnkuYyc7IGZpYAorCitnc3RzZWdtZW50Lm86IGdzdC9nc3RzZWdtZW50LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0c2VnbWVudC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9nc3RzZWdtZW50LlRwbyAtYyAtbyBnc3RzZWdtZW50Lm8gYHRlc3QgLWYgJ2dzdC9nc3RzZWdtZW50LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3RzZWdtZW50LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdHNlZ21lbnQuVHBvICQoREVQRElSKS9nc3RzZWdtZW50LlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0L2dzdHNlZ21lbnQuYycgb2JqZWN0PSdnc3RzZWdtZW50Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdHNlZ21lbnQubyBgdGVzdCAtZiAnZ3N0L2dzdHNlZ21lbnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0L2dzdHNlZ21lbnQuYworCitnc3RzZWdtZW50Lm9iajogZ3N0L2dzdHNlZ21lbnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBnc3RzZWdtZW50Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0c2VnbWVudC5UcG8gLWMgLW8gZ3N0c2VnbWVudC5vYmogYGlmIHRlc3QgLWYgJ2dzdC9nc3RzZWdtZW50LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdHNlZ21lbnQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdHNlZ21lbnQuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ3N0c2VnbWVudC5UcG8gJChERVBESVIpL2dzdHNlZ21lbnQuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3QvZ3N0c2VnbWVudC5jJyBvYmplY3Q9J2dzdHNlZ21lbnQub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RzZWdtZW50Lm9iaiBgaWYgdGVzdCAtZiAnZ3N0L2dzdHNlZ21lbnQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QvZ3N0c2VnbWVudC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QvZ3N0c2VnbWVudC5jJzsgZmlgCisKK2dzdHN0cnVjdHVyZS5vOiBnc3QvZ3N0c3RydWN0dXJlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0c3RydWN0dXJlLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdHN0cnVjdHVyZS5UcG8gLWMgLW8gZ3N0c3RydWN0dXJlLm8gYHRlc3QgLWYgJ2dzdC9nc3RzdHJ1Y3R1cmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0L2dzdHN0cnVjdHVyZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RzdHJ1Y3R1cmUuVHBvICQoREVQRElSKS9nc3RzdHJ1Y3R1cmUuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3QvZ3N0c3RydWN0dXJlLmMnIG9iamVjdD0nZ3N0c3RydWN0dXJlLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdHN0cnVjdHVyZS5vIGB0ZXN0IC1mICdnc3QvZ3N0c3RydWN0dXJlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3RzdHJ1Y3R1cmUuYworCitnc3RzdHJ1Y3R1cmUub2JqOiBnc3QvZ3N0c3RydWN0dXJlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0c3RydWN0dXJlLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0c3RydWN0dXJlLlRwbyAtYyAtbyBnc3RzdHJ1Y3R1cmUub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0c3RydWN0dXJlLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdHN0cnVjdHVyZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QvZ3N0c3RydWN0dXJlLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdHN0cnVjdHVyZS5UcG8gJChERVBESVIpL2dzdHN0cnVjdHVyZS5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC9nc3RzdHJ1Y3R1cmUuYycgb2JqZWN0PSdnc3RzdHJ1Y3R1cmUub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RzdHJ1Y3R1cmUub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0c3RydWN0dXJlLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdHN0cnVjdHVyZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QvZ3N0c3RydWN0dXJlLmMnOyBmaWAKKworZ3N0c3lzdGVtY2xvY2subzogZ3N0L2dzdHN5c3RlbWNsb2NrLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0c3lzdGVtY2xvY2subyAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0c3lzdGVtY2xvY2suVHBvIC1jIC1vIGdzdHN5c3RlbWNsb2NrLm8gYHRlc3QgLWYgJ2dzdC9nc3RzeXN0ZW1jbG9jay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0c3lzdGVtY2xvY2suYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ3N0c3lzdGVtY2xvY2suVHBvICQoREVQRElSKS9nc3RzeXN0ZW1jbG9jay5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC9nc3RzeXN0ZW1jbG9jay5jJyBvYmplY3Q9J2dzdHN5c3RlbWNsb2NrLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdHN5c3RlbWNsb2NrLm8gYHRlc3QgLWYgJ2dzdC9nc3RzeXN0ZW1jbG9jay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0c3lzdGVtY2xvY2suYworCitnc3RzeXN0ZW1jbG9jay5vYmo6IGdzdC9nc3RzeXN0ZW1jbG9jay5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdHN5c3RlbWNsb2NrLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0c3lzdGVtY2xvY2suVHBvIC1jIC1vIGdzdHN5c3RlbWNsb2NrLm9iaiBgaWYgdGVzdCAtZiAnZ3N0L2dzdHN5c3RlbWNsb2NrLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdHN5c3RlbWNsb2NrLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC9nc3RzeXN0ZW1jbG9jay5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RzeXN0ZW1jbG9jay5UcG8gJChERVBESVIpL2dzdHN5c3RlbWNsb2NrLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0L2dzdHN5c3RlbWNsb2NrLmMnIG9iamVjdD0nZ3N0c3lzdGVtY2xvY2sub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RzeXN0ZW1jbG9jay5vYmogYGlmIHRlc3QgLWYgJ2dzdC9nc3RzeXN0ZW1jbG9jay5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3RzeXN0ZW1jbG9jay5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QvZ3N0c3lzdGVtY2xvY2suYyc7IGZpYAorCitnc3R0YWcubzogZ3N0L2dzdHRhZy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdHRhZy5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9nc3R0YWcuVHBvIC1jIC1vIGdzdHRhZy5vIGB0ZXN0IC1mICdnc3QvZ3N0dGFnLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3R0YWcuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ3N0dGFnLlRwbyAkKERFUERJUikvZ3N0dGFnLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0L2dzdHRhZy5jJyBvYmplY3Q9J2dzdHRhZy5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3R0YWcubyBgdGVzdCAtZiAnZ3N0L2dzdHRhZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0dGFnLmMKKworZ3N0dGFnLm9iajogZ3N0L2dzdHRhZy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdHRhZy5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdHRhZy5UcG8gLWMgLW8gZ3N0dGFnLm9iaiBgaWYgdGVzdCAtZiAnZ3N0L2dzdHRhZy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3R0YWcuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdHRhZy5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3R0YWcuVHBvICQoREVQRElSKS9nc3R0YWcuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3QvZ3N0dGFnLmMnIG9iamVjdD0nZ3N0dGFnLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0dGFnLm9iaiBgaWYgdGVzdCAtZiAnZ3N0L2dzdHRhZy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3R0YWcuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdHRhZy5jJzsgZmlgCisKK2dzdHRhZ3NldHRlci5vOiBnc3QvZ3N0dGFnc2V0dGVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0dGFnc2V0dGVyLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdHRhZ3NldHRlci5UcG8gLWMgLW8gZ3N0dGFnc2V0dGVyLm8gYHRlc3QgLWYgJ2dzdC9nc3R0YWdzZXR0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0L2dzdHRhZ3NldHRlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3R0YWdzZXR0ZXIuVHBvICQoREVQRElSKS9nc3R0YWdzZXR0ZXIuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3QvZ3N0dGFnc2V0dGVyLmMnIG9iamVjdD0nZ3N0dGFnc2V0dGVyLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdHRhZ3NldHRlci5vIGB0ZXN0IC1mICdnc3QvZ3N0dGFnc2V0dGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3R0YWdzZXR0ZXIuYworCitnc3R0YWdzZXR0ZXIub2JqOiBnc3QvZ3N0dGFnc2V0dGVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0dGFnc2V0dGVyLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0dGFnc2V0dGVyLlRwbyAtYyAtbyBnc3R0YWdzZXR0ZXIub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0dGFnc2V0dGVyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdHRhZ3NldHRlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QvZ3N0dGFnc2V0dGVyLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdHRhZ3NldHRlci5UcG8gJChERVBESVIpL2dzdHRhZ3NldHRlci5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC9nc3R0YWdzZXR0ZXIuYycgb2JqZWN0PSdnc3R0YWdzZXR0ZXIub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3R0YWdzZXR0ZXIub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0dGFnc2V0dGVyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdHRhZ3NldHRlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QvZ3N0dGFnc2V0dGVyLmMnOyBmaWAKKworZ3N0dGFzay5vOiBnc3QvZ3N0dGFzay5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdHRhc2subyAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0dGFzay5UcG8gLWMgLW8gZ3N0dGFzay5vIGB0ZXN0IC1mICdnc3QvZ3N0dGFzay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0dGFzay5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3R0YXNrLlRwbyAkKERFUERJUikvZ3N0dGFzay5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC9nc3R0YXNrLmMnIG9iamVjdD0nZ3N0dGFzay5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3R0YXNrLm8gYHRlc3QgLWYgJ2dzdC9nc3R0YXNrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3R0YXNrLmMKKworZ3N0dGFzay5vYmo6IGdzdC9nc3R0YXNrLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0dGFzay5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdHRhc2suVHBvIC1jIC1vIGdzdHRhc2sub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0dGFzay5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3R0YXNrLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC9nc3R0YXNrLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdHRhc2suVHBvICQoREVQRElSKS9nc3R0YXNrLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0L2dzdHRhc2suYycgb2JqZWN0PSdnc3R0YXNrLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0dGFzay5vYmogYGlmIHRlc3QgLWYgJ2dzdC9nc3R0YXNrLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdHRhc2suYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdHRhc2suYyc7IGZpYAorCitnc3R1cmkubzogZ3N0L2dzdHVyaS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdHVyaS5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9nc3R1cmkuVHBvIC1jIC1vIGdzdHVyaS5vIGB0ZXN0IC1mICdnc3QvZ3N0dXJpLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3R1cmkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ3N0dXJpLlRwbyAkKERFUERJUikvZ3N0dXJpLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0L2dzdHVyaS5jJyBvYmplY3Q9J2dzdHVyaS5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3R1cmkubyBgdGVzdCAtZiAnZ3N0L2dzdHVyaS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0dXJpLmMKKworZ3N0dXJpLm9iajogZ3N0L2dzdHVyaS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdHVyaS5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdHVyaS5UcG8gLWMgLW8gZ3N0dXJpLm9iaiBgaWYgdGVzdCAtZiAnZ3N0L2dzdHVyaS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3R1cmkuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdHVyaS5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3R1cmkuVHBvICQoREVQRElSKS9nc3R1cmkuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3QvZ3N0dXJpLmMnIG9iamVjdD0nZ3N0dXJpLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0dXJpLm9iaiBgaWYgdGVzdCAtZiAnZ3N0L2dzdHVyaS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3R1cmkuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdHVyaS5jJzsgZmlgCisKK2dzdHV0aWxzLm86IGdzdC9nc3R1dGlscy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdHV0aWxzLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdHV0aWxzLlRwbyAtYyAtbyBnc3R1dGlscy5vIGB0ZXN0IC1mICdnc3QvZ3N0dXRpbHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0L2dzdHV0aWxzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdHV0aWxzLlRwbyAkKERFUERJUikvZ3N0dXRpbHMuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3QvZ3N0dXRpbHMuYycgb2JqZWN0PSdnc3R1dGlscy5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3R1dGlscy5vIGB0ZXN0IC1mICdnc3QvZ3N0dXRpbHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0L2dzdHV0aWxzLmMKKworZ3N0dXRpbHMub2JqOiBnc3QvZ3N0dXRpbHMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBnc3R1dGlscy5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdHV0aWxzLlRwbyAtYyAtbyBnc3R1dGlscy5vYmogYGlmIHRlc3QgLWYgJ2dzdC9nc3R1dGlscy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3R1dGlscy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QvZ3N0dXRpbHMuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ3N0dXRpbHMuVHBvICQoREVQRElSKS9nc3R1dGlscy5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC9nc3R1dGlscy5jJyBvYmplY3Q9J2dzdHV0aWxzLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0dXRpbHMub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0dXRpbHMuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QvZ3N0dXRpbHMuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0L2dzdHV0aWxzLmMnOyBmaWAKKworZ3N0dmFsdWUubzogZ3N0L2dzdHZhbHVlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0dmFsdWUubyAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0dmFsdWUuVHBvIC1jIC1vIGdzdHZhbHVlLm8gYHRlc3QgLWYgJ2dzdC9nc3R2YWx1ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0dmFsdWUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ3N0dmFsdWUuVHBvICQoREVQRElSKS9nc3R2YWx1ZS5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC9nc3R2YWx1ZS5jJyBvYmplY3Q9J2dzdHZhbHVlLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdHZhbHVlLm8gYHRlc3QgLWYgJ2dzdC9nc3R2YWx1ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0dmFsdWUuYworCitnc3R2YWx1ZS5vYmo6IGdzdC9nc3R2YWx1ZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdHZhbHVlLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0dmFsdWUuVHBvIC1jIC1vIGdzdHZhbHVlLm9iaiBgaWYgdGVzdCAtZiAnZ3N0L2dzdHZhbHVlLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdHZhbHVlLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC9nc3R2YWx1ZS5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3R2YWx1ZS5UcG8gJChERVBESVIpL2dzdHZhbHVlLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0L2dzdHZhbHVlLmMnIG9iamVjdD0nZ3N0dmFsdWUub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3R2YWx1ZS5vYmogYGlmIHRlc3QgLWYgJ2dzdC9nc3R2YWx1ZS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3R2YWx1ZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QvZ3N0dmFsdWUuYyc7IGZpYAorCithZGFwdGVyLm86IGxpYnMvYWRhcHRlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGFkYXB0ZXIubyAtTUQgLU1QIC1NRiAkKERFUERJUikvYWRhcHRlci5UcG8gLWMgLW8gYWRhcHRlci5vIGB0ZXN0IC1mICdsaWJzL2FkYXB0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbGlicy9hZGFwdGVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2FkYXB0ZXIuVHBvICQoREVQRElSKS9hZGFwdGVyLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nbGlicy9hZGFwdGVyLmMnIG9iamVjdD0nYWRhcHRlci5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhZGFwdGVyLm8gYHRlc3QgLWYgJ2xpYnMvYWRhcHRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsaWJzL2FkYXB0ZXIuYworCithZGFwdGVyLm9iajogbGlicy9hZGFwdGVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYWRhcHRlci5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2FkYXB0ZXIuVHBvIC1jIC1vIGFkYXB0ZXIub2JqIGBpZiB0ZXN0IC1mICdsaWJzL2FkYXB0ZXIuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdsaWJzL2FkYXB0ZXIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbGlicy9hZGFwdGVyLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2FkYXB0ZXIuVHBvICQoREVQRElSKS9hZGFwdGVyLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nbGlicy9hZGFwdGVyLmMnIG9iamVjdD0nYWRhcHRlci5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGFkYXB0ZXIub2JqIGBpZiB0ZXN0IC1mICdsaWJzL2FkYXB0ZXIuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdsaWJzL2FkYXB0ZXIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbGlicy9hZGFwdGVyLmMnOyBmaWAKKworYmFzZXNpbmsubzogbGlicy9iYXNlc2luay5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGJhc2VzaW5rLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2Jhc2VzaW5rLlRwbyAtYyAtbyBiYXNlc2luay5vIGB0ZXN0IC1mICdsaWJzL2Jhc2VzaW5rLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGxpYnMvYmFzZXNpbmsuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYmFzZXNpbmsuVHBvICQoREVQRElSKS9iYXNlc2luay5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2xpYnMvYmFzZXNpbmsuYycgb2JqZWN0PSdiYXNlc2luay5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBiYXNlc2luay5vIGB0ZXN0IC1mICdsaWJzL2Jhc2VzaW5rLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGxpYnMvYmFzZXNpbmsuYworCitiYXNlc2luay5vYmo6IGxpYnMvYmFzZXNpbmsuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBiYXNlc2luay5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2Jhc2VzaW5rLlRwbyAtYyAtbyBiYXNlc2luay5vYmogYGlmIHRlc3QgLWYgJ2xpYnMvYmFzZXNpbmsuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdsaWJzL2Jhc2VzaW5rLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2xpYnMvYmFzZXNpbmsuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYmFzZXNpbmsuVHBvICQoREVQRElSKS9iYXNlc2luay5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2xpYnMvYmFzZXNpbmsuYycgb2JqZWN0PSdiYXNlc2luay5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGJhc2VzaW5rLm9iaiBgaWYgdGVzdCAtZiAnbGlicy9iYXNlc2luay5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2xpYnMvYmFzZXNpbmsuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbGlicy9iYXNlc2luay5jJzsgZmlgCisKK2Jhc2VzcmMubzogbGlicy9iYXNlc3JjLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYmFzZXNyYy5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9iYXNlc3JjLlRwbyAtYyAtbyBiYXNlc3JjLm8gYHRlc3QgLWYgJ2xpYnMvYmFzZXNyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsaWJzL2Jhc2VzcmMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYmFzZXNyYy5UcG8gJChERVBESVIpL2Jhc2VzcmMuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsaWJzL2Jhc2VzcmMuYycgb2JqZWN0PSdiYXNlc3JjLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGJhc2VzcmMubyBgdGVzdCAtZiAnbGlicy9iYXNlc3JjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGxpYnMvYmFzZXNyYy5jCisKK2Jhc2VzcmMub2JqOiBsaWJzL2Jhc2VzcmMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBiYXNlc3JjLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvYmFzZXNyYy5UcG8gLWMgLW8gYmFzZXNyYy5vYmogYGlmIHRlc3QgLWYgJ2xpYnMvYmFzZXNyYy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2xpYnMvYmFzZXNyYy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9saWJzL2Jhc2VzcmMuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYmFzZXNyYy5UcG8gJChERVBESVIpL2Jhc2VzcmMuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsaWJzL2Jhc2VzcmMuYycgb2JqZWN0PSdiYXNlc3JjLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYmFzZXNyYy5vYmogYGlmIHRlc3QgLWYgJ2xpYnMvYmFzZXNyYy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2xpYnMvYmFzZXNyYy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9saWJzL2Jhc2VzcmMuYyc7IGZpYAorCitiaXRyZWFkZXIubzogbGlicy9iaXRyZWFkZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBiaXRyZWFkZXIubyAtTUQgLU1QIC1NRiAkKERFUERJUikvYml0cmVhZGVyLlRwbyAtYyAtbyBiaXRyZWFkZXIubyBgdGVzdCAtZiAnbGlicy9iaXRyZWFkZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbGlicy9iaXRyZWFkZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYml0cmVhZGVyLlRwbyAkKERFUERJUikvYml0cmVhZGVyLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nbGlicy9iaXRyZWFkZXIuYycgb2JqZWN0PSdiaXRyZWFkZXIubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYml0cmVhZGVyLm8gYHRlc3QgLWYgJ2xpYnMvYml0cmVhZGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGxpYnMvYml0cmVhZGVyLmMKKworYml0cmVhZGVyLm9iajogbGlicy9iaXRyZWFkZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBiaXRyZWFkZXIub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9iaXRyZWFkZXIuVHBvIC1jIC1vIGJpdHJlYWRlci5vYmogYGlmIHRlc3QgLWYgJ2xpYnMvYml0cmVhZGVyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbGlicy9iaXRyZWFkZXIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbGlicy9iaXRyZWFkZXIuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYml0cmVhZGVyLlRwbyAkKERFUERJUikvYml0cmVhZGVyLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nbGlicy9iaXRyZWFkZXIuYycgb2JqZWN0PSdiaXRyZWFkZXIub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBiaXRyZWFkZXIub2JqIGBpZiB0ZXN0IC1mICdsaWJzL2JpdHJlYWRlci5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2xpYnMvYml0cmVhZGVyLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2xpYnMvYml0cmVhZGVyLmMnOyBmaWAKKworYnl0ZXJlYWRlci5vOiBsaWJzL2J5dGVyZWFkZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBieXRlcmVhZGVyLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2J5dGVyZWFkZXIuVHBvIC1jIC1vIGJ5dGVyZWFkZXIubyBgdGVzdCAtZiAnbGlicy9ieXRlcmVhZGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGxpYnMvYnl0ZXJlYWRlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9ieXRlcmVhZGVyLlRwbyAkKERFUERJUikvYnl0ZXJlYWRlci5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2xpYnMvYnl0ZXJlYWRlci5jJyBvYmplY3Q9J2J5dGVyZWFkZXIubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYnl0ZXJlYWRlci5vIGB0ZXN0IC1mICdsaWJzL2J5dGVyZWFkZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbGlicy9ieXRlcmVhZGVyLmMKKworYnl0ZXJlYWRlci5vYmo6IGxpYnMvYnl0ZXJlYWRlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGJ5dGVyZWFkZXIub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9ieXRlcmVhZGVyLlRwbyAtYyAtbyBieXRlcmVhZGVyLm9iaiBgaWYgdGVzdCAtZiAnbGlicy9ieXRlcmVhZGVyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbGlicy9ieXRlcmVhZGVyLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2xpYnMvYnl0ZXJlYWRlci5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9ieXRlcmVhZGVyLlRwbyAkKERFUERJUikvYnl0ZXJlYWRlci5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2xpYnMvYnl0ZXJlYWRlci5jJyBvYmplY3Q9J2J5dGVyZWFkZXIub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBieXRlcmVhZGVyLm9iaiBgaWYgdGVzdCAtZiAnbGlicy9ieXRlcmVhZGVyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbGlicy9ieXRlcmVhZGVyLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2xpYnMvYnl0ZXJlYWRlci5jJzsgZmlgCisKK2J5dGV3cml0ZXIubzogbGlicy9ieXRld3JpdGVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYnl0ZXdyaXRlci5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9ieXRld3JpdGVyLlRwbyAtYyAtbyBieXRld3JpdGVyLm8gYHRlc3QgLWYgJ2xpYnMvYnl0ZXdyaXRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsaWJzL2J5dGV3cml0ZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYnl0ZXdyaXRlci5UcG8gJChERVBESVIpL2J5dGV3cml0ZXIuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsaWJzL2J5dGV3cml0ZXIuYycgb2JqZWN0PSdieXRld3JpdGVyLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGJ5dGV3cml0ZXIubyBgdGVzdCAtZiAnbGlicy9ieXRld3JpdGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGxpYnMvYnl0ZXdyaXRlci5jCisKK2J5dGV3cml0ZXIub2JqOiBsaWJzL2J5dGV3cml0ZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBieXRld3JpdGVyLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvYnl0ZXdyaXRlci5UcG8gLWMgLW8gYnl0ZXdyaXRlci5vYmogYGlmIHRlc3QgLWYgJ2xpYnMvYnl0ZXdyaXRlci5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2xpYnMvYnl0ZXdyaXRlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9saWJzL2J5dGV3cml0ZXIuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYnl0ZXdyaXRlci5UcG8gJChERVBESVIpL2J5dGV3cml0ZXIuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsaWJzL2J5dGV3cml0ZXIuYycgb2JqZWN0PSdieXRld3JpdGVyLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYnl0ZXdyaXRlci5vYmogYGlmIHRlc3QgLWYgJ2xpYnMvYnl0ZXdyaXRlci5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2xpYnMvYnl0ZXdyaXRlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9saWJzL2J5dGV3cml0ZXIuYyc7IGZpYAorCitjb2xsZWN0cGFkcy5vOiBsaWJzL2NvbGxlY3RwYWRzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgY29sbGVjdHBhZHMubyAtTUQgLU1QIC1NRiAkKERFUERJUikvY29sbGVjdHBhZHMuVHBvIC1jIC1vIGNvbGxlY3RwYWRzLm8gYHRlc3QgLWYgJ2xpYnMvY29sbGVjdHBhZHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbGlicy9jb2xsZWN0cGFkcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9jb2xsZWN0cGFkcy5UcG8gJChERVBESVIpL2NvbGxlY3RwYWRzLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nbGlicy9jb2xsZWN0cGFkcy5jJyBvYmplY3Q9J2NvbGxlY3RwYWRzLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGNvbGxlY3RwYWRzLm8gYHRlc3QgLWYgJ2xpYnMvY29sbGVjdHBhZHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbGlicy9jb2xsZWN0cGFkcy5jCisKK2NvbGxlY3RwYWRzLm9iajogbGlicy9jb2xsZWN0cGFkcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGNvbGxlY3RwYWRzLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvY29sbGVjdHBhZHMuVHBvIC1jIC1vIGNvbGxlY3RwYWRzLm9iaiBgaWYgdGVzdCAtZiAnbGlicy9jb2xsZWN0cGFkcy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2xpYnMvY29sbGVjdHBhZHMuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbGlicy9jb2xsZWN0cGFkcy5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9jb2xsZWN0cGFkcy5UcG8gJChERVBESVIpL2NvbGxlY3RwYWRzLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nbGlicy9jb2xsZWN0cGFkcy5jJyBvYmplY3Q9J2NvbGxlY3RwYWRzLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gY29sbGVjdHBhZHMub2JqIGBpZiB0ZXN0IC1mICdsaWJzL2NvbGxlY3RwYWRzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbGlicy9jb2xsZWN0cGFkcy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9saWJzL2NvbGxlY3RwYWRzLmMnOyBmaWAKKworY29udHJvbGxlci5vOiBsaWJzL2NvbnRyb2xsZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBjb250cm9sbGVyLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2NvbnRyb2xsZXIuVHBvIC1jIC1vIGNvbnRyb2xsZXIubyBgdGVzdCAtZiAnbGlicy9jb250cm9sbGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGxpYnMvY29udHJvbGxlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9jb250cm9sbGVyLlRwbyAkKERFUERJUikvY29udHJvbGxlci5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2xpYnMvY29udHJvbGxlci5jJyBvYmplY3Q9J2NvbnRyb2xsZXIubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gY29udHJvbGxlci5vIGB0ZXN0IC1mICdsaWJzL2NvbnRyb2xsZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbGlicy9jb250cm9sbGVyLmMKKworY29udHJvbGxlci5vYmo6IGxpYnMvY29udHJvbGxlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGNvbnRyb2xsZXIub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9jb250cm9sbGVyLlRwbyAtYyAtbyBjb250cm9sbGVyLm9iaiBgaWYgdGVzdCAtZiAnbGlicy9jb250cm9sbGVyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbGlicy9jb250cm9sbGVyLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2xpYnMvY29udHJvbGxlci5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9jb250cm9sbGVyLlRwbyAkKERFUERJUikvY29udHJvbGxlci5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2xpYnMvY29udHJvbGxlci5jJyBvYmplY3Q9J2NvbnRyb2xsZXIub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBjb250cm9sbGVyLm9iaiBgaWYgdGVzdCAtZiAnbGlicy9jb250cm9sbGVyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbGlicy9jb250cm9sbGVyLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2xpYnMvY29udHJvbGxlci5jJzsgZmlgCisKK2dkcC5vOiBsaWJzL2dkcC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdkcC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9nZHAuVHBvIC1jIC1vIGdkcC5vIGB0ZXN0IC1mICdsaWJzL2dkcC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsaWJzL2dkcC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nZHAuVHBvICQoREVQRElSKS9nZHAuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsaWJzL2dkcC5jJyBvYmplY3Q9J2dkcC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnZHAubyBgdGVzdCAtZiAnbGlicy9nZHAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbGlicy9nZHAuYworCitnZHAub2JqOiBsaWJzL2dkcC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdkcC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2dkcC5UcG8gLWMgLW8gZ2RwLm9iaiBgaWYgdGVzdCAtZiAnbGlicy9nZHAuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdsaWJzL2dkcC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9saWJzL2dkcC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nZHAuVHBvICQoREVQRElSKS9nZHAuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsaWJzL2dkcC5jJyBvYmplY3Q9J2dkcC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdkcC5vYmogYGlmIHRlc3QgLWYgJ2xpYnMvZ2RwLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbGlicy9nZHAuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbGlicy9nZHAuYyc7IGZpYAorCitnc3RuZXRjbGllbnRjbG9jay5vOiBsaWJzL2dzdG5ldGNsaWVudGNsb2NrLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0bmV0Y2xpZW50Y2xvY2subyAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0bmV0Y2xpZW50Y2xvY2suVHBvIC1jIC1vIGdzdG5ldGNsaWVudGNsb2NrLm8gYHRlc3QgLWYgJ2xpYnMvZ3N0bmV0Y2xpZW50Y2xvY2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgbGlicy9nc3RuZXRjbGllbnRjbG9jay5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RuZXRjbGllbnRjbG9jay5UcG8gJChERVBESVIpL2dzdG5ldGNsaWVudGNsb2NrLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nbGlicy9nc3RuZXRjbGllbnRjbG9jay5jJyBvYmplY3Q9J2dzdG5ldGNsaWVudGNsb2NrLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdG5ldGNsaWVudGNsb2NrLm8gYHRlc3QgLWYgJ2xpYnMvZ3N0bmV0Y2xpZW50Y2xvY2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgbGlicy9nc3RuZXRjbGllbnRjbG9jay5jCisKK2dzdG5ldGNsaWVudGNsb2NrLm9iajogbGlicy9nc3RuZXRjbGllbnRjbG9jay5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdG5ldGNsaWVudGNsb2NrLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0bmV0Y2xpZW50Y2xvY2suVHBvIC1jIC1vIGdzdG5ldGNsaWVudGNsb2NrLm9iaiBgaWYgdGVzdCAtZiAnbGlicy9nc3RuZXRjbGllbnRjbG9jay5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2xpYnMvZ3N0bmV0Y2xpZW50Y2xvY2suYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbGlicy9nc3RuZXRjbGllbnRjbG9jay5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RuZXRjbGllbnRjbG9jay5UcG8gJChERVBESVIpL2dzdG5ldGNsaWVudGNsb2NrLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nbGlicy9nc3RuZXRjbGllbnRjbG9jay5jJyBvYmplY3Q9J2dzdG5ldGNsaWVudGNsb2NrLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0bmV0Y2xpZW50Y2xvY2sub2JqIGBpZiB0ZXN0IC1mICdsaWJzL2dzdG5ldGNsaWVudGNsb2NrLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbGlicy9nc3RuZXRjbGllbnRjbG9jay5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9saWJzL2dzdG5ldGNsaWVudGNsb2NrLmMnOyBmaWAKKworZ3N0bmV0dGltZXByb3ZpZGVyLm86IGxpYnMvZ3N0bmV0dGltZXByb3ZpZGVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0bmV0dGltZXByb3ZpZGVyLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdG5ldHRpbWVwcm92aWRlci5UcG8gLWMgLW8gZ3N0bmV0dGltZXByb3ZpZGVyLm8gYHRlc3QgLWYgJ2xpYnMvZ3N0bmV0dGltZXByb3ZpZGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGxpYnMvZ3N0bmV0dGltZXByb3ZpZGVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdG5ldHRpbWVwcm92aWRlci5UcG8gJChERVBESVIpL2dzdG5ldHRpbWVwcm92aWRlci5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2xpYnMvZ3N0bmV0dGltZXByb3ZpZGVyLmMnIG9iamVjdD0nZ3N0bmV0dGltZXByb3ZpZGVyLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdG5ldHRpbWVwcm92aWRlci5vIGB0ZXN0IC1mICdsaWJzL2dzdG5ldHRpbWVwcm92aWRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsaWJzL2dzdG5ldHRpbWVwcm92aWRlci5jCisKK2dzdG5ldHRpbWVwcm92aWRlci5vYmo6IGxpYnMvZ3N0bmV0dGltZXByb3ZpZGVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0bmV0dGltZXByb3ZpZGVyLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0bmV0dGltZXByb3ZpZGVyLlRwbyAtYyAtbyBnc3RuZXR0aW1lcHJvdmlkZXIub2JqIGBpZiB0ZXN0IC1mICdsaWJzL2dzdG5ldHRpbWVwcm92aWRlci5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2xpYnMvZ3N0bmV0dGltZXByb3ZpZGVyLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2xpYnMvZ3N0bmV0dGltZXByb3ZpZGVyLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdG5ldHRpbWVwcm92aWRlci5UcG8gJChERVBESVIpL2dzdG5ldHRpbWVwcm92aWRlci5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2xpYnMvZ3N0bmV0dGltZXByb3ZpZGVyLmMnIG9iamVjdD0nZ3N0bmV0dGltZXByb3ZpZGVyLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0bmV0dGltZXByb3ZpZGVyLm9iaiBgaWYgdGVzdCAtZiAnbGlicy9nc3RuZXR0aW1lcHJvdmlkZXIuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdsaWJzL2dzdG5ldHRpbWVwcm92aWRlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9saWJzL2dzdG5ldHRpbWVwcm92aWRlci5jJzsgZmlgCisKK3RyYW5zZm9ybTEubzogbGlicy90cmFuc2Zvcm0xLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdHJhbnNmb3JtMS5vIC1NRCAtTVAgLU1GICQoREVQRElSKS90cmFuc2Zvcm0xLlRwbyAtYyAtbyB0cmFuc2Zvcm0xLm8gYHRlc3QgLWYgJ2xpYnMvdHJhbnNmb3JtMS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsaWJzL3RyYW5zZm9ybTEuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdHJhbnNmb3JtMS5UcG8gJChERVBESVIpL3RyYW5zZm9ybTEuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsaWJzL3RyYW5zZm9ybTEuYycgb2JqZWN0PSd0cmFuc2Zvcm0xLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHRyYW5zZm9ybTEubyBgdGVzdCAtZiAnbGlicy90cmFuc2Zvcm0xLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGxpYnMvdHJhbnNmb3JtMS5jCisKK3RyYW5zZm9ybTEub2JqOiBsaWJzL3RyYW5zZm9ybTEuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCB0cmFuc2Zvcm0xLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvdHJhbnNmb3JtMS5UcG8gLWMgLW8gdHJhbnNmb3JtMS5vYmogYGlmIHRlc3QgLWYgJ2xpYnMvdHJhbnNmb3JtMS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2xpYnMvdHJhbnNmb3JtMS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9saWJzL3RyYW5zZm9ybTEuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdHJhbnNmb3JtMS5UcG8gJChERVBESVIpL3RyYW5zZm9ybTEuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsaWJzL3RyYW5zZm9ybTEuYycgb2JqZWN0PSd0cmFuc2Zvcm0xLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdHJhbnNmb3JtMS5vYmogYGlmIHRlc3QgLWYgJ2xpYnMvdHJhbnNmb3JtMS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2xpYnMvdHJhbnNmb3JtMS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9saWJzL3RyYW5zZm9ybTEuYyc7IGZpYAorCit0eXBlZmluZGhlbHBlci5vOiBsaWJzL3R5cGVmaW5kaGVscGVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdHlwZWZpbmRoZWxwZXIubyAtTUQgLU1QIC1NRiAkKERFUERJUikvdHlwZWZpbmRoZWxwZXIuVHBvIC1jIC1vIHR5cGVmaW5kaGVscGVyLm8gYHRlc3QgLWYgJ2xpYnMvdHlwZWZpbmRoZWxwZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbGlicy90eXBlZmluZGhlbHBlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS90eXBlZmluZGhlbHBlci5UcG8gJChERVBESVIpL3R5cGVmaW5kaGVscGVyLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nbGlicy90eXBlZmluZGhlbHBlci5jJyBvYmplY3Q9J3R5cGVmaW5kaGVscGVyLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHR5cGVmaW5kaGVscGVyLm8gYHRlc3QgLWYgJ2xpYnMvdHlwZWZpbmRoZWxwZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbGlicy90eXBlZmluZGhlbHBlci5jCisKK3R5cGVmaW5kaGVscGVyLm9iajogbGlicy90eXBlZmluZGhlbHBlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHR5cGVmaW5kaGVscGVyLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvdHlwZWZpbmRoZWxwZXIuVHBvIC1jIC1vIHR5cGVmaW5kaGVscGVyLm9iaiBgaWYgdGVzdCAtZiAnbGlicy90eXBlZmluZGhlbHBlci5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2xpYnMvdHlwZWZpbmRoZWxwZXIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbGlicy90eXBlZmluZGhlbHBlci5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS90eXBlZmluZGhlbHBlci5UcG8gJChERVBESVIpL3R5cGVmaW5kaGVscGVyLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nbGlicy90eXBlZmluZGhlbHBlci5jJyBvYmplY3Q9J3R5cGVmaW5kaGVscGVyLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdHlwZWZpbmRoZWxwZXIub2JqIGBpZiB0ZXN0IC1mICdsaWJzL3R5cGVmaW5kaGVscGVyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbGlicy90eXBlZmluZGhlbHBlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9saWJzL3R5cGVmaW5kaGVscGVyLmMnOyBmaWAKKworY2xlYW51cC5vOiBwaXBlbGluZXMvY2xlYW51cC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGNsZWFudXAubyAtTUQgLU1QIC1NRiAkKERFUERJUikvY2xlYW51cC5UcG8gLWMgLW8gY2xlYW51cC5vIGB0ZXN0IC1mICdwaXBlbGluZXMvY2xlYW51cC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BwaXBlbGluZXMvY2xlYW51cC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9jbGVhbnVwLlRwbyAkKERFUERJUikvY2xlYW51cC5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3BpcGVsaW5lcy9jbGVhbnVwLmMnIG9iamVjdD0nY2xlYW51cC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBjbGVhbnVwLm8gYHRlc3QgLWYgJ3BpcGVsaW5lcy9jbGVhbnVwLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHBpcGVsaW5lcy9jbGVhbnVwLmMKKworY2xlYW51cC5vYmo6IHBpcGVsaW5lcy9jbGVhbnVwLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgY2xlYW51cC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2NsZWFudXAuVHBvIC1jIC1vIGNsZWFudXAub2JqIGBpZiB0ZXN0IC1mICdwaXBlbGluZXMvY2xlYW51cC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3BpcGVsaW5lcy9jbGVhbnVwLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3BpcGVsaW5lcy9jbGVhbnVwLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2NsZWFudXAuVHBvICQoREVQRElSKS9jbGVhbnVwLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0ncGlwZWxpbmVzL2NsZWFudXAuYycgb2JqZWN0PSdjbGVhbnVwLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gY2xlYW51cC5vYmogYGlmIHRlc3QgLWYgJ3BpcGVsaW5lcy9jbGVhbnVwLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAncGlwZWxpbmVzL2NsZWFudXAuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvcGlwZWxpbmVzL2NsZWFudXAuYyc7IGZpYAorCitwYXJzZS1kaXNhYmxlZC5vOiBwaXBlbGluZXMvcGFyc2UtZGlzYWJsZWQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBwYXJzZS1kaXNhYmxlZC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9wYXJzZS1kaXNhYmxlZC5UcG8gLWMgLW8gcGFyc2UtZGlzYWJsZWQubyBgdGVzdCAtZiAncGlwZWxpbmVzL3BhcnNlLWRpc2FibGVkLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHBpcGVsaW5lcy9wYXJzZS1kaXNhYmxlZC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9wYXJzZS1kaXNhYmxlZC5UcG8gJChERVBESVIpL3BhcnNlLWRpc2FibGVkLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0ncGlwZWxpbmVzL3BhcnNlLWRpc2FibGVkLmMnIG9iamVjdD0ncGFyc2UtZGlzYWJsZWQubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcGFyc2UtZGlzYWJsZWQubyBgdGVzdCAtZiAncGlwZWxpbmVzL3BhcnNlLWRpc2FibGVkLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHBpcGVsaW5lcy9wYXJzZS1kaXNhYmxlZC5jCisKK3BhcnNlLWRpc2FibGVkLm9iajogcGlwZWxpbmVzL3BhcnNlLWRpc2FibGVkLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcGFyc2UtZGlzYWJsZWQub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9wYXJzZS1kaXNhYmxlZC5UcG8gLWMgLW8gcGFyc2UtZGlzYWJsZWQub2JqIGBpZiB0ZXN0IC1mICdwaXBlbGluZXMvcGFyc2UtZGlzYWJsZWQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdwaXBlbGluZXMvcGFyc2UtZGlzYWJsZWQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvcGlwZWxpbmVzL3BhcnNlLWRpc2FibGVkLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3BhcnNlLWRpc2FibGVkLlRwbyAkKERFUERJUikvcGFyc2UtZGlzYWJsZWQuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdwaXBlbGluZXMvcGFyc2UtZGlzYWJsZWQuYycgb2JqZWN0PSdwYXJzZS1kaXNhYmxlZC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHBhcnNlLWRpc2FibGVkLm9iaiBgaWYgdGVzdCAtZiAncGlwZWxpbmVzL3BhcnNlLWRpc2FibGVkLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAncGlwZWxpbmVzL3BhcnNlLWRpc2FibGVkLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3BpcGVsaW5lcy9wYXJzZS1kaXNhYmxlZC5jJzsgZmlgCisKK3BhcnNlLWxhdW5jaC5vOiBwaXBlbGluZXMvcGFyc2UtbGF1bmNoLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcGFyc2UtbGF1bmNoLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3BhcnNlLWxhdW5jaC5UcG8gLWMgLW8gcGFyc2UtbGF1bmNoLm8gYHRlc3QgLWYgJ3BpcGVsaW5lcy9wYXJzZS1sYXVuY2guYycgfHwgZWNobyAnJChzcmNkaXIpLydgcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9wYXJzZS1sYXVuY2guVHBvICQoREVQRElSKS9wYXJzZS1sYXVuY2guUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdwaXBlbGluZXMvcGFyc2UtbGF1bmNoLmMnIG9iamVjdD0ncGFyc2UtbGF1bmNoLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHBhcnNlLWxhdW5jaC5vIGB0ZXN0IC1mICdwaXBlbGluZXMvcGFyc2UtbGF1bmNoLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHBpcGVsaW5lcy9wYXJzZS1sYXVuY2guYworCitwYXJzZS1sYXVuY2gub2JqOiBwaXBlbGluZXMvcGFyc2UtbGF1bmNoLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcGFyc2UtbGF1bmNoLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvcGFyc2UtbGF1bmNoLlRwbyAtYyAtbyBwYXJzZS1sYXVuY2gub2JqIGBpZiB0ZXN0IC1mICdwaXBlbGluZXMvcGFyc2UtbGF1bmNoLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAncGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9waXBlbGluZXMvcGFyc2UtbGF1bmNoLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3BhcnNlLWxhdW5jaC5UcG8gJChERVBESVIpL3BhcnNlLWxhdW5jaC5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3BpcGVsaW5lcy9wYXJzZS1sYXVuY2guYycgb2JqZWN0PSdwYXJzZS1sYXVuY2gub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBwYXJzZS1sYXVuY2gub2JqIGBpZiB0ZXN0IC1mICdwaXBlbGluZXMvcGFyc2UtbGF1bmNoLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAncGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9waXBlbGluZXMvcGFyc2UtbGF1bmNoLmMnOyBmaWAKKworcXVldWUtZXJyb3IubzogcGlwZWxpbmVzL3F1ZXVlLWVycm9yLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcXVldWUtZXJyb3IubyAtTUQgLU1QIC1NRiAkKERFUERJUikvcXVldWUtZXJyb3IuVHBvIC1jIC1vIHF1ZXVlLWVycm9yLm8gYHRlc3QgLWYgJ3BpcGVsaW5lcy9xdWV1ZS1lcnJvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BwaXBlbGluZXMvcXVldWUtZXJyb3IuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvcXVldWUtZXJyb3IuVHBvICQoREVQRElSKS9xdWV1ZS1lcnJvci5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3BpcGVsaW5lcy9xdWV1ZS1lcnJvci5jJyBvYmplY3Q9J3F1ZXVlLWVycm9yLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHF1ZXVlLWVycm9yLm8gYHRlc3QgLWYgJ3BpcGVsaW5lcy9xdWV1ZS1lcnJvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BwaXBlbGluZXMvcXVldWUtZXJyb3IuYworCitxdWV1ZS1lcnJvci5vYmo6IHBpcGVsaW5lcy9xdWV1ZS1lcnJvci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHF1ZXVlLWVycm9yLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvcXVldWUtZXJyb3IuVHBvIC1jIC1vIHF1ZXVlLWVycm9yLm9iaiBgaWYgdGVzdCAtZiAncGlwZWxpbmVzL3F1ZXVlLWVycm9yLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAncGlwZWxpbmVzL3F1ZXVlLWVycm9yLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3BpcGVsaW5lcy9xdWV1ZS1lcnJvci5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9xdWV1ZS1lcnJvci5UcG8gJChERVBESVIpL3F1ZXVlLWVycm9yLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0ncGlwZWxpbmVzL3F1ZXVlLWVycm9yLmMnIG9iamVjdD0ncXVldWUtZXJyb3Iub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBxdWV1ZS1lcnJvci5vYmogYGlmIHRlc3QgLWYgJ3BpcGVsaW5lcy9xdWV1ZS1lcnJvci5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3BpcGVsaW5lcy9xdWV1ZS1lcnJvci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9waXBlbGluZXMvcXVldWUtZXJyb3IuYyc7IGZpYAorCitzaW1wbGUtbGF1bmNoLWxpbmVzLm86IHBpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc2ltcGxlLWxhdW5jaC1saW5lcy5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9zaW1wbGUtbGF1bmNoLWxpbmVzLlRwbyAtYyAtbyBzaW1wbGUtbGF1bmNoLWxpbmVzLm8gYHRlc3QgLWYgJ3BpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHBpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3NpbXBsZS1sYXVuY2gtbGluZXMuVHBvICQoREVQRElSKS9zaW1wbGUtbGF1bmNoLWxpbmVzLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0ncGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYycgb2JqZWN0PSdzaW1wbGUtbGF1bmNoLWxpbmVzLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNpbXBsZS1sYXVuY2gtbGluZXMubyBgdGVzdCAtZiAncGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYworCitzaW1wbGUtbGF1bmNoLWxpbmVzLm9iajogcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzaW1wbGUtbGF1bmNoLWxpbmVzLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvc2ltcGxlLWxhdW5jaC1saW5lcy5UcG8gLWMgLW8gc2ltcGxlLWxhdW5jaC1saW5lcy5vYmogYGlmIHRlc3QgLWYgJ3BpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAncGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvc2ltcGxlLWxhdW5jaC1saW5lcy5UcG8gJChERVBESVIpL3NpbXBsZS1sYXVuY2gtbGluZXMuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdwaXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jJyBvYmplY3Q9J3NpbXBsZS1sYXVuY2gtbGluZXMub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzaW1wbGUtbGF1bmNoLWxpbmVzLm9iaiBgaWYgdGVzdCAtZiAncGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdwaXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jJzsgZmlgCisKK3N0cmVzcy5vOiBwaXBlbGluZXMvc3RyZXNzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3RyZXNzLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3N0cmVzcy5UcG8gLWMgLW8gc3RyZXNzLm8gYHRlc3QgLWYgJ3BpcGVsaW5lcy9zdHJlc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcGlwZWxpbmVzL3N0cmVzcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9zdHJlc3MuVHBvICQoREVQRElSKS9zdHJlc3MuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdwaXBlbGluZXMvc3RyZXNzLmMnIG9iamVjdD0nc3RyZXNzLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHN0cmVzcy5vIGB0ZXN0IC1mICdwaXBlbGluZXMvc3RyZXNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHBpcGVsaW5lcy9zdHJlc3MuYworCitzdHJlc3Mub2JqOiBwaXBlbGluZXMvc3RyZXNzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3RyZXNzLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvc3RyZXNzLlRwbyAtYyAtbyBzdHJlc3Mub2JqIGBpZiB0ZXN0IC1mICdwaXBlbGluZXMvc3RyZXNzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAncGlwZWxpbmVzL3N0cmVzcy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9waXBlbGluZXMvc3RyZXNzLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3N0cmVzcy5UcG8gJChERVBESVIpL3N0cmVzcy5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3BpcGVsaW5lcy9zdHJlc3MuYycgb2JqZWN0PSdzdHJlc3Mub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzdHJlc3Mub2JqIGBpZiB0ZXN0IC1mICdwaXBlbGluZXMvc3RyZXNzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAncGlwZWxpbmVzL3N0cmVzcy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9waXBlbGluZXMvc3RyZXNzLmMnOyBmaWAKKworLmNjLm86CitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX0NYWCkkKENYWENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWENPTVBJTEUpIC1jIC1vICRAICQ8CisKKy5jYy5vYmo6CitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX0NYWCkkKENYWENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQU1fVl9DWFgpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuY2MubG86CitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX0NYWCkkKExUQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDWFhERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChMVENYWENPTVBJTEUpIC1jIC1vICRAICQ8CisKK2dzdGNwcC5vOiBnc3QvZ3N0Y3BwLmNjCitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX0NYWCkkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpIC1NVCBnc3RjcHAubyAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0Y3BwLlRwbyAtYyAtbyBnc3RjcHAubyBgdGVzdCAtZiAnZ3N0L2dzdGNwcC5jYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0L2dzdGNwcC5jYworQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdGNwcC5UcG8gJChERVBESVIpL2dzdGNwcC5QbworQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9J2dzdC9nc3RjcHAuY2MnIG9iamVjdD0nZ3N0Y3BwLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgLWMgLW8gZ3N0Y3BwLm8gYHRlc3QgLWYgJ2dzdC9nc3RjcHAuY2MnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC9nc3RjcHAuY2MKKworZ3N0Y3BwLm9iajogZ3N0L2dzdGNwcC5jYworQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9DWFgpJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKSAtTVQgZ3N0Y3BwLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0Y3BwLlRwbyAtYyAtbyBnc3RjcHAub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0Y3BwLmNjJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC9nc3RjcHAuY2MnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC9nc3RjcHAuY2MnOyBmaWAKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RjcHAuVHBvICQoREVQRElSKS9nc3RjcHAuUG8KK0BhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWCkgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJc291cmNlPSdnc3QvZ3N0Y3BwLmNjJyBvYmplY3Q9J2dzdGNwcC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgLWMgLW8gZ3N0Y3BwLm9iaiBgaWYgdGVzdCAtZiAnZ3N0L2dzdGNwcC5jYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QvZ3N0Y3BwLmNjJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QvZ3N0Y3BwLmNjJzsgZmlgCisKK2dzdGxpYnNjcHAubzogbGlicy9nc3RsaWJzY3BwLmNjCitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX0NYWCkkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpIC1NVCBnc3RsaWJzY3BwLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdGxpYnNjcHAuVHBvIC1jIC1vIGdzdGxpYnNjcHAubyBgdGVzdCAtZiAnbGlicy9nc3RsaWJzY3BwLmNjJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsaWJzL2dzdGxpYnNjcHAuY2MKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RsaWJzY3BwLlRwbyAkKERFUERJUikvZ3N0bGlic2NwcC5QbworQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9J2xpYnMvZ3N0bGlic2NwcC5jYycgb2JqZWN0PSdnc3RsaWJzY3BwLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgLWMgLW8gZ3N0bGlic2NwcC5vIGB0ZXN0IC1mICdsaWJzL2dzdGxpYnNjcHAuY2MnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGxpYnMvZ3N0bGlic2NwcC5jYworCitnc3RsaWJzY3BwLm9iajogbGlicy9nc3RsaWJzY3BwLmNjCitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX0NYWCkkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpIC1NVCBnc3RsaWJzY3BwLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0bGlic2NwcC5UcG8gLWMgLW8gZ3N0bGlic2NwcC5vYmogYGlmIHRlc3QgLWYgJ2xpYnMvZ3N0bGlic2NwcC5jYyc7IHRoZW4gJChDWUdQQVRIX1cpICdsaWJzL2dzdGxpYnNjcHAuY2MnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2xpYnMvZ3N0bGlic2NwcC5jYyc7IGZpYAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdGxpYnNjcHAuVHBvICQoREVQRElSKS9nc3RsaWJzY3BwLlBvCitAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQU1fVl9DWFgpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nbGlicy9nc3RsaWJzY3BwLmNjJyBvYmplY3Q9J2dzdGxpYnNjcHAub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpIC1jIC1vIGdzdGxpYnNjcHAub2JqIGBpZiB0ZXN0IC1mICdsaWJzL2dzdGxpYnNjcHAuY2MnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbGlicy9nc3RsaWJzY3BwLmNjJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9saWJzL2dzdGxpYnNjcHAuY2MnOyBmaWAKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKwktcm0gLXJmIGVsZW1lbnRzLy5saWJzIGVsZW1lbnRzL19saWJzCisJLXJtIC1yZiBnZW5lcmljLy5saWJzIGdlbmVyaWMvX2xpYnMKKwktcm0gLXJmIGdzdC8ubGlicyBnc3QvX2xpYnMKKwktcm0gLXJmIGxpYnMvLmxpYnMgbGlicy9fbGlicworCS1ybSAtcmYgcGlwZWxpbmVzLy5saWJzIHBpcGVsaW5lcy9fbGlicworCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitjaGVjay1URVNUUzogJChURVNUUykKKwlAZmFpbGVkPTA7IGFsbD0wOyB4ZmFpbD0wOyB4cGFzcz0wOyBza2lwPTA7IFwKKwlzcmNkaXI9JChzcmNkaXIpOyBleHBvcnQgc3JjZGlyOyBcCisJbGlzdD0nICQoVEVTVFMpICc7IFwKKwkkKGFtX190dHlfY29sb3JzKTsgXAorCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAorCSAgZm9yIHRzdCBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAuLyQkdHN0OyB0aGVuIGRpcj0uLzsgXAorCSAgICBlbGlmIHRlc3QgLWYgJCR0c3Q7IHRoZW4gZGlyPTsgXAorCSAgICBlbHNlIGRpcj0iJChzcmNkaXIpLyI7IGZpOyBcCisJICAgIGlmICQoVEVTVFNfRU5WSVJPTk1FTlQpICQke2Rpcn0kJHRzdDsgdGhlbiBcCisJICAgICAgYWxsPWBleHByICQkYWxsICsgMWA7IFwKKwkgICAgICBjYXNlICIgJChYRkFJTF9URVNUUykgIiBpbiBcCisJICAgICAgKltcIFwJXSQkdHN0W1wgXAldKikgXAorCQl4cGFzcz1gZXhwciAkJHhwYXNzICsgMWA7IFwKKwkJZmFpbGVkPWBleHByICQkZmFpbGVkICsgMWA7IFwKKwkJY29sPSQkcmVkOyByZXM9WFBBU1M7IFwKKwkgICAgICA7OyBcCisJICAgICAgKikgXAorCQljb2w9JCRncm47IHJlcz1QQVNTOyBcCisJICAgICAgOzsgXAorCSAgICAgIGVzYWM7IFwKKwkgICAgZWxpZiB0ZXN0ICQkPyAtbmUgNzc7IHRoZW4gXAorCSAgICAgIGFsbD1gZXhwciAkJGFsbCArIDFgOyBcCisJICAgICAgY2FzZSAiICQoWEZBSUxfVEVTVFMpICIgaW4gXAorCSAgICAgICpbXCBcCV0kJHRzdFtcIFwJXSopIFwKKwkJeGZhaWw9YGV4cHIgJCR4ZmFpbCArIDFgOyBcCisJCWNvbD0kJGxnbjsgcmVzPVhGQUlMOyBcCisJICAgICAgOzsgXAorCSAgICAgICopIFwKKwkJZmFpbGVkPWBleHByICQkZmFpbGVkICsgMWA7IFwKKwkJY29sPSQkcmVkOyByZXM9RkFJTDsgXAorCSAgICAgIDs7IFwKKwkgICAgICBlc2FjOyBcCisJICAgIGVsc2UgXAorCSAgICAgIHNraXA9YGV4cHIgJCRza2lwICsgMWA7IFwKKwkgICAgICBjb2w9JCRibHU7IHJlcz1TS0lQOyBcCisJICAgIGZpOyBcCisJICAgIGVjaG8gIiQke2NvbH0kJHJlcyQke3N0ZH06ICQkdHN0IjsgXAorCSAgZG9uZTsgXAorCSAgaWYgdGVzdCAiJCRhbGwiIC1lcSAxOyB0aGVuIFwKKwkgICAgdGVzdHM9InRlc3QiOyBcCisJICAgIEFsbD0iIjsgXAorCSAgZWxzZSBcCisJICAgIHRlc3RzPSJ0ZXN0cyI7IFwKKwkgICAgQWxsPSJBbGwgIjsgXAorCSAgZmk7IFwKKwkgIGlmIHRlc3QgIiQkZmFpbGVkIiAtZXEgMDsgdGhlbiBcCisJICAgIGlmIHRlc3QgIiQkeGZhaWwiIC1lcSAwOyB0aGVuIFwKKwkgICAgICBiYW5uZXI9IiQkQWxsJCRhbGwgJCR0ZXN0cyBwYXNzZWQiOyBcCisJICAgIGVsc2UgXAorCSAgICAgIGlmIHRlc3QgIiQkeGZhaWwiIC1lcSAxOyB0aGVuIGZhaWx1cmVzPWZhaWx1cmU7IGVsc2UgZmFpbHVyZXM9ZmFpbHVyZXM7IGZpOyBcCisJICAgICAgYmFubmVyPSIkJEFsbCQkYWxsICQkdGVzdHMgYmVoYXZlZCBhcyBleHBlY3RlZCAoJCR4ZmFpbCBleHBlY3RlZCAkJGZhaWx1cmVzKSI7IFwKKwkgICAgZmk7IFwKKwkgIGVsc2UgXAorCSAgICBpZiB0ZXN0ICIkJHhwYXNzIiAtZXEgMDsgdGhlbiBcCisJICAgICAgYmFubmVyPSIkJGZhaWxlZCBvZiAkJGFsbCAkJHRlc3RzIGZhaWxlZCI7IFwKKwkgICAgZWxzZSBcCisJICAgICAgaWYgdGVzdCAiJCR4cGFzcyIgLWVxIDE7IHRoZW4gcGFzc2VzPXBhc3M7IGVsc2UgcGFzc2VzPXBhc3NlczsgZmk7IFwKKwkgICAgICBiYW5uZXI9IiQkZmFpbGVkIG9mICQkYWxsICQkdGVzdHMgZGlkIG5vdCBiZWhhdmUgYXMgZXhwZWN0ZWQgKCQkeHBhc3MgdW5leHBlY3RlZCAkJHBhc3NlcykiOyBcCisJICAgIGZpOyBcCisJICBmaTsgXAorCSAgZGFzaGVzPSIkJGJhbm5lciI7IFwKKwkgIHNraXBwZWQ9IiI7IFwKKwkgIGlmIHRlc3QgIiQkc2tpcCIgLW5lIDA7IHRoZW4gXAorCSAgICBpZiB0ZXN0ICIkJHNraXAiIC1lcSAxOyB0aGVuIFwKKwkgICAgICBza2lwcGVkPSIoJCRza2lwIHRlc3Qgd2FzIG5vdCBydW4pIjsgXAorCSAgICBlbHNlIFwKKwkgICAgICBza2lwcGVkPSIoJCRza2lwIHRlc3RzIHdlcmUgbm90IHJ1bikiOyBcCisJICAgIGZpOyBcCisJICAgIHRlc3QgYGVjaG8gIiQkc2tpcHBlZCIgfCB3YyAtY2AgLWxlIGBlY2hvICIkJGJhbm5lciIgfCB3YyAtY2AgfHwgXAorCSAgICAgIGRhc2hlcz0iJCRza2lwcGVkIjsgXAorCSAgZmk7IFwKKwkgIHJlcG9ydD0iIjsgXAorCSAgaWYgdGVzdCAiJCRmYWlsZWQiIC1uZSAwICYmIHRlc3QgLW4gIiQoUEFDS0FHRV9CVUdSRVBPUlQpIjsgdGhlbiBcCisJICAgIHJlcG9ydD0iUGxlYXNlIHJlcG9ydCB0byAkKFBBQ0tBR0VfQlVHUkVQT1JUKSI7IFwKKwkgICAgdGVzdCBgZWNobyAiJCRyZXBvcnQiIHwgd2MgLWNgIC1sZSBgZWNobyAiJCRiYW5uZXIiIHwgd2MgLWNgIHx8IFwKKwkgICAgICBkYXNoZXM9IiQkcmVwb3J0IjsgXAorCSAgZmk7IFwKKwkgIGRhc2hlcz1gZWNobyAiJCRkYXNoZXMiIHwgc2VkIHMvLi89L2dgOyBcCisJICBpZiB0ZXN0ICIkJGZhaWxlZCIgLWVxIDA7IHRoZW4gXAorCSAgICBlY2hvICIkJGdybiQkZGFzaGVzIjsgXAorCSAgZWxzZSBcCisJICAgIGVjaG8gIiQkcmVkJCRkYXNoZXMiOyBcCisJICBmaTsgXAorCSAgZWNobyAiJCRiYW5uZXIiOyBcCisJICB0ZXN0IC16ICIkJHNraXBwZWQiIHx8IGVjaG8gIiQkc2tpcHBlZCI7IFwKKwkgIHRlc3QgLXogIiQkcmVwb3J0IiB8fCBlY2hvICIkJHJlcG9ydCI7IFwKKwkgIGVjaG8gIiQkZGFzaGVzJCRzdGQiOyBcCisJICB0ZXN0ICIkJGZhaWxlZCIgLWVxIDA7IFwKKwllbHNlIDo7IGZpCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQoY2hlY2tfUFJPR1JBTVMpCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2stVEVTVFMKK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKSAkKEhFQURFUlMpCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCS1ybSAtZiBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKKwktcm0gLWYgZ2VuZXJpYy8kKGFtX19kaXJzdGFtcCkKKwktcm0gLWYgZ3N0LyQoYW1fX2RpcnN0YW1wKQorCS1ybSAtZiBsaWJzLyQoYW1fX2RpcnN0YW1wKQorCS1ybSAtZiBwaXBlbGluZXMvJChhbV9fZGlyc3RhbXApCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1jaGVja1BST0dSQU1TIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1sb2NhbCBcCisJY2xlYW4tbm9pbnN0UFJPR1JBTVMgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiBjaGVjay1hbSBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLVRFU1RTIGNoZWNrLWFtIGNsZWFuIFwKKwljbGVhbi1jaGVja1BST0dSQU1TIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1sb2NhbCBcCisJY2xlYW4tbm9pbnN0UFJPR1JBTVMgY3RhZ3MgZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIFwKKwlkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBcCisJZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKKwlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIFwKKwlpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gXAorCWluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgXAorCWluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIFwKKwlpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKKwltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisJdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisKKworIyBrZWVwIHRhcmdldCBhcm91bmQsIHNpbmNlIGl0J3MgcmVmZXJlbmNlZCBpbiB0aGUgbW9kdWxlcycgTWFrZWZpbGVzCitjbGVhbi1sb2NhbC1jaGVjazoKKwlAZWNobworCisjIGhhbmdzIHNwZWN0YWN1bGFybHkgb24gc29tZSBtYWNoaW5lcywgc28gbGV0J3Mgbm90IGRvIHRoaXMgYnkgZGVmYXVsdCB5ZXQKK0BIQVZFX1ZBTEdSSU5EX1RSVUVAY2hlY2stdmFsZ3JpbmQ6CitASEFWRV9WQUxHUklORF9UUlVFQAkkKE1BS0UpIHZhbGdyaW5kCitASEFWRV9WQUxHUklORF9GQUxTRUBjaGVjay12YWxncmluZDoKK0BIQVZFX1ZBTEdSSU5EX0ZBTFNFQAlAdHJ1ZQorCisjIHJ1biBhbnkgZ2l2ZW4gdGVzdCBieSBydW5uaW5nIG1ha2UgdGVzdC5jaGVjaworIyBpZiB0aGUgdGVzdCBmYWlscywgcnVuIGl0IGFnYWluIGF0IGF0IGxlYXN0IGRlYnVnIGxldmVsIDIKKyUuY2hlY2s6ICUKKwlAJChURVNUU19FTlZJUk9OTUVOVCkJCQkJCVwKKwlDS19ERUZBVUxUX1RJTUVPVVQ9MjAJCQkJCVwKKwkkKiB8fAkJCQkJCQlcCisJJChURVNUU19FTlZJUk9OTUVOVCkJCQkJCVwKKwlHU1RfREVCVUc9JCRHU1RfREVCVUcsKjoyCQkJCVwKKwlDS19ERUZBVUxUX1RJTUVPVVQ9MjAJCQkJCVwKKwkkKgorCisjIHJ1biBhbnkgZ2l2ZW4gdGVzdCBpbiBhIGxvb3AKKyUudG9ydHVyZTogJQorCUBmb3IgaSBpbiBgc2VxIDEgJChMT09QUylgOyBkbwkJCQlcCisJJChURVNUU19FTlZJUk9OTUVOVCkJCQkJCVwKKwlDS19ERUZBVUxUX1RJTUVPVVQ9MjAJCQkJCVwKKwkkKjsgZG9uZQorCisjIHJ1biBhbnkgZ2l2ZW4gdGVzdCBpbiBhbiBpbmZpbml0ZSBsb29wCislLmZvcmV2ZXI6ICUKKwlAd2hpbGUgdHJ1ZTsgZG8JCQkJCQlcCisJJChURVNUU19FTlZJUk9OTUVOVCkJCQkJCVwKKwlDS19ERUZBVUxUX1RJTUVPVVQ9MjAJCQkJCVwKKwkkKiB8fCBicmVhazsgZG9uZQorCisjIHZhbGdyaW5kIGFueSBnaXZlbiB0ZXN0IGJ5IHJ1bm5pbmcgbWFrZSB0ZXN0LnZhbGdyaW5kCislLnZhbGdyaW5kOiAlCisJQCQoVEVTVFNfRU5WSVJPTk1FTlQpCQkJCQlcCisJQ0tfREVGQVVMVF9USU1FT1VUPTM2MAkJCQkJXAorCUdfU0xJQ0U9YWx3YXlzLW1hbGxvYwkJCQkJXAorCSQoTElCVE9PTCkgLS1tb2RlPWV4ZWN1dGUJCQkJXAorCSQoVkFMR1JJTkRfUEFUSCkgLXEJCQkJCVwKKwkkKGZvcmVhY2ggcywkKFNVUFBSRVNTSU9OUyksLS1zdXBwcmVzc2lvbnM9JChzKSkJXAorCS0tdG9vbD1tZW1jaGVjayAtLWxlYWstY2hlY2s9ZnVsbCAtLXRyYWNlLWNoaWxkcmVuPXllcwlcCisJLS1sZWFrLXJlc29sdXRpb249aGlnaCAtLW51bS1jYWxsZXJzPTIwCQkJXAorCS4vJCogMj4mMSB8IHRlZSB2YWxncmluZC5sb2cKKwlAaWYgZ3JlcCAiPT0iIHZhbGdyaW5kLmxvZyA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCVwKKwkgICAgcm0gdmFsZ3JpbmQubG9nOwkJCQkJXAorCSAgICBleGl0IDE7CQkJCQkJXAorCWZpCisJQHJtIHZhbGdyaW5kLmxvZworCisjIHZhbGdyaW5kIGFueSBnaXZlbiB0ZXN0IGFuZCBnZW5lcmF0ZSBzdXBwcmVzc2lvbnMgZm9yIGl0CislLnZhbGdyaW5kLmdlbi1zdXBwcmVzc2lvbnM6ICUKKwlAJChURVNUU19FTlZJUk9OTUVOVCkJCQkJCVwKKwlDS19ERUZBVUxUX1RJTUVPVVQ9MzYwCQkJCQlcCisJR19TTElDRT1hbHdheXMtbWFsbG9jCQkJCQlcCisJJChMSUJUT09MKSAtLW1vZGU9ZXhlY3V0ZQkJCQlcCisJJChWQUxHUklORF9QQVRIKSAtcSAJCQkJCVwKKwkkKGZvcmVhY2ggcywkKFNVUFBSRVNTSU9OUyksLS1zdXBwcmVzc2lvbnM9JChzKSkJXAorCS0tdG9vbD1tZW1jaGVjayAtLWxlYWstY2hlY2s9ZnVsbCAtLXRyYWNlLWNoaWxkcmVuPXllcwlcCisJLS1sZWFrLXJlc29sdXRpb249aGlnaCAtLW51bS1jYWxsZXJzPTIwCQkJXAorCS0tZ2VuLXN1cHByZXNzaW9ucz1hbGwJCQkJCVwKKwkuLyQqIDI+JjEgfCB0ZWUgc3VwcHJlc3Npb25zLmxvZworCisjIHZhbGdyaW5kIGFueSBnaXZlbiB0ZXN0IHVudGlsIGZhaWx1cmUgYnkgcnVubmluZyBtYWtlIHRlc3QudmFsZ3JpbmQtZm9yZXZlcgorJS52YWxncmluZC1mb3JldmVyOiAlCisJQHdoaWxlICQoTUFLRSkgJCoudmFsZ3JpbmQ7IGRvCQkJCVwKKwkgIHRydWU7IGRvbmUKKworIyBnZGIgYW55IGdpdmVuIHRlc3QgYnkgcnVubmluZyBtYWtlIHRlc3QuZ2RiCislLmdkYjogJQorCUAkKFRFU1RTX0VOVklST05NRU5UKQkJCQkJXAorCUNLX0ZPUks9bm8JCQkJCQlcCisJJChMSUJUT09MKSAtLW1vZGU9ZXhlY3V0ZQkJCQlcCisJZ2RiICQqCisKKyMgdG9ydHVyZSB0ZXN0cwordG9ydHVyZTogJChURVNUUykKKwktcm0gdGVzdC1yZWdpc3RyeS54bWwKKwlAZWNobyAiVG9ydHVyaW5nIHRlc3RzIC4uLiIKKwlAZm9yIGkgaW4gYHNlcSAxICQoTE9PUFMpYDsgZG8JCQkJXAorCQkkKE1BS0UpIGNoZWNrIHx8CQkJCVwKKwkJKGVjaG8gIkZhaWx1cmUgYWZ0ZXIgJCRpIHJ1bnMiOyBleGl0IDEpIHx8CVwKKwkJZXhpdCAxOwkJCQkJCVwKKwlkb25lCisJQGJhbm5lcj0iQWxsICQoTE9PUFMpIGxvb3BzIHBhc3NlZCI7CQkJXAorCWRhc2hlcz1gZWNobyAiJCRiYW5uZXIiIHwgc2VkIHMvLi89L2dgOwkJCVwKKwllY2hvICQkZGFzaGVzOyBlY2hvICQkYmFubmVyOyBlY2hvICQkZGFzaGVzCisKKyMgZm9yZXZlciB0ZXN0cworZm9yZXZlcjogJChURVNUUykKKwktcm0gdGVzdC1yZWdpc3RyeS54bWwKKwlAZWNobyAiRm9yZXZlciB0ZXN0cyAuLi4iCisJQHdoaWxlIHRydWU7IGRvCQkJCQkJXAorCQkkKE1BS0UpIGNoZWNrIHx8CQkJCVwKKwkJKGVjaG8gIkZhaWx1cmUiOyBleGl0IDEpIHx8CQkJXAorCQlleGl0IDE7CQkJCQkJXAorCWRvbmUKKworIyB2YWxncmluZCBhbGwgdGVzdHMKK3ZhbGdyaW5kOiAkKFRFU1RTKQorCUBlY2hvICJWYWxncmluZGluZyB0ZXN0cyAuLi4iCisJQGZhaWxlZD0wOwkJCQkJCQlcCisJZm9yIHQgaW4gJChmaWx0ZXItb3V0ICQoVkFMR1JJTkRfVEVTVFNfRElTQUJMRSksJChURVNUUykpOyBkbwlcCisJCSQoTUFLRSkgJCR0LnZhbGdyaW5kOwkJCQkJXAorCQlpZiB0ZXN0ICIkJD8iIC1uZSAwOyB0aGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCWVjaG8gIlZhbGdyaW5kIGVycm9yIGZvciB0ZXN0ICQkdCI7CQlcCisJCQlmYWlsZWQ9YGV4cHIgJCRmYWlsZWQgKyAxYDsJCQlcCisJCQl3aGljaHQ9IiQkd2hpY2h0ICQkdCI7CQkJCVwKKwkJZmk7CQkJCQkJCVwKKwlkb25lOwkJCQkJCQkJXAorCWlmIHRlc3QgIiQkZmFpbGVkIiAtbmUgMDsgdGhlbgkJCQkJXAorCQllY2hvICIkJGZhaWxlZCB0ZXN0cyBoYWQgbGVha3Mgb3IgZXJyb3JzIHVuZGVyIHZhbGdyaW5kOiI7CVwKKwkJZWNobyAiJCR3aGljaHQiOwkJCQkJXAorCQlmYWxzZTsJCQkJCQkJXAorCWZpCisKKyMgdmFsZ3JpbmQgYWxsIHRlc3RzIGFuZCBnZW5lcmF0ZSBzdXBwcmVzc2lvbnMKK3ZhbGdyaW5kLmdlbi1zdXBwcmVzc2lvbnM6ICQoVEVTVFMpCisJQGVjaG8gIlZhbGdyaW5kaW5nIHRlc3RzIC4uLiIKKwlAZmFpbGVkPTA7CQkJCQkJCVwKKwlmb3IgdCBpbiAkKGZpbHRlci1vdXQgJChWQUxHUklORF9URVNUU19ESVNBQkxFKSwkKFRFU1RTKSk7IGRvCVwKKwkJJChNQUtFKSAkJHQudmFsZ3JpbmQuZ2VuLXN1cHByZXNzaW9uczsJCQlcCisJCWlmIHRlc3QgIiQkPyIgLW5lIDA7IHRoZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJZWNobyAiVmFsZ3JpbmQgZXJyb3IgZm9yIHRlc3QgJCR0IjsJCVwKKwkJCWZhaWxlZD1gZXhwciAkJGZhaWxlZCArIDFgOwkJCVwKKwkJCXdoaWNodD0iJCR3aGljaHQgJCR0IjsJCQkJXAorCQlmaTsJCQkJCQkJXAorCWRvbmU7CQkJCQkJCQlcCisJaWYgdGVzdCAiJCRmYWlsZWQiIC1uZSAwOyB0aGVuCQkJCQlcCisJCWVjaG8gIiQkZmFpbGVkIHRlc3RzIGhhZCBsZWFrcyBvciBlcnJvcnMgdW5kZXIgdmFsZ3JpbmQ6IjsJXAorCQllY2hvICIkJHdoaWNodCI7CQkJCQlcCisJCWZhbHNlOwkJCQkJCQlcCisJZmkKK2luc3BlY3Q6CisJQGVjaG8gIkluc3BlY3RpbmcgZmVhdHVyZXMgLi4uIgorCUBmb3IgZSBpbiBgJChURVNUU19FTlZJUk9OTUVOVCkgJChHU1RfSU5TUEVDVCkgfCBoZWFkIC1uIC0yIAlcCisJICB8IGN1dCAtZDogLWYyYDsJCQkJCQlcCisJICBkbyBlY2hvIEluc3BlY3RpbmcgJCRlOwkJCQkJXAorCSAgICAgJChHU1RfSU5TUEVDVCkgJCRlID4gL2Rldi9udWxsIDI+JjE7IGRvbmUKKworaGVscDoKKwlAZWNobworCUBlY2hvICJtYWtlIGNoZWNrICAgICAgICAgICAgICAgICAgICAgICAgIC0tIHJ1biBhbGwgY2hlY2tzIgorCUBlY2hvICJtYWtlIHRvcnR1cmUgICAgICAgICAgICAgICAgICAgICAgIC0tIHJ1biBhbGwgY2hlY2tzICQoTE9PUFMpIHRpbWVzIgorCUBlY2hvICJtYWtlIChkaXIpLyh0ZXN0KS5jaGVjayAgICAgICAgICAgIC0tIHJ1biB0aGUgZ2l2ZW4gY2hlY2sgb25jZSIKKwlAZWNobyAibWFrZSAoZGlyKS8odGVzdCkuZm9yZXZlciAgICAgICAgICAtLSBydW4gdGhlIGdpdmVuIGNoZWNrIGZvcmV2ZXIiCisJQGVjaG8gIm1ha2UgKGRpcikvKHRlc3QpLnRvcnR1cmUgICAgICAgICAgLS0gcnVuIHRoZSBnaXZlbiBjaGVjayAkKExPT1BTKSB0aW1lcyIKKwlAZWNobworCUBlY2hvICJtYWtlIChkaXIpLyh0ZXN0KS5nZGIgICAgICAgICAgICAgIC0tIHN0YXJ0IHVwIGdkYiBmb3IgdGhlIGdpdmVuIHRlc3QiCisJQGVjaG8KKwlAZWNobyAibWFrZSB2YWxncmluZCAgICAgICAgICAgICAgICAgICAgICAtLSB2YWxncmluZCBhbGwgdGVzdHMiCisJQGVjaG8gIm1ha2UgdmFsZ3JpbmQuZ2VuLXN1cHByZXNzaW9ucyAgICAgLS0gZ2VuZXJhdGUgc3VwcHJlc3Npb25zIGZvciBhbGwgdGVzdHMiCisJQGVjaG8gIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNhdmUgdG8gc3VwcHJlc3Npb25zLmxvZyIKKwlAZWNobyAibWFrZSAoZGlyKS8odGVzdCkudmFsZ3JpbmQgICAgICAgICAtLSB2YWxncmluZCB0aGUgZ2l2ZW4gdGVzdCIKKwlAZWNobyAibWFrZSAoZGlyKS8odGVzdCkudmFsZ3JpbmQtZm9yZXZlciAtLSB2YWxncmluZCB0aGUgZ2l2ZW4gdGVzdCBmb3JldmVyIgorCUBlY2hvICJtYWtlIChkaXIpLyh0ZXN0KS52YWxncmluZC5nZW4tc3VwcHJlc3Npb25zIC0tIGdlbmVyYXRlIHN1cHByZXNzaW9ucyIKKwlAZWNobyAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc2F2ZSB0byBzdXBwcmVzc2lvbnMubG9nIgorCUBlY2hvICJtYWtlIGluc3BlY3QgICAgICAgICAgICAgICAgICAgICAgIC0tIGluc3BlY3QgYWxsIHBsdWdpbiBmZWF0dXJlcyIKKwlAZWNobworCUBlY2hvCisJQGVjaG8gIkFkZGl0aW9uYWxseSwgeW91IGNhbiB1c2UgdGhlIEdTVF9DSEVDS1MgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8iCisJQGVjaG8gInNwZWNpZnkgd2hpY2ggdGVzdChzKSBzaG91bGQgYmUgcnVuLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgYXJlIgorCUBlY2hvICJkZWJ1Z2dpbmcgYSBmYWlsdXJlIGluIG9uZSBwYXJ0aWN1bGFyIHRlc3QsIG9yIHdhbnQgdG8gcmVwcm9kdWNlIgorCUBlY2hvICJhIHJhY2UgY29uZGl0aW9uIGluIGEgc2luZ2xlIHRlc3QuIgorCUBlY2hvCisJQGVjaG8gIkV4YW1wbGVzOiIKKwlAZWNobworCUBlY2hvICIgIEdTVF9DSEVDS1M9dGVzdF90aGlzLHRlc3RfdGhhdCAgbWFrZSBlbGVtZW50L2Zvb2Jhci5jaGVjayIKKwlAZWNobyAiICBHU1RfQ0hFQ0tTPXRlc3RfbWFueV90aHJlYWRzICAgIG1ha2UgZWxlbWVudC9mb29iYXIuZm9yZXZlciIKKwlAZWNobworCisjIG92ZXJyaWRlIHRvIF9ub3RfIGluc3RhbGwgdGhlIHRlc3QgcGx1Z2lucworaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzoKKworY2xlYW4tbG9jYWw6IGNsZWFuLWxvY2FsLWNoZWNrCisKK2RlYnVnOgorCWVjaG8gJChDT1ZFUkFHRV9GSUxFUykKKwllY2hvICQoQ09WRVJBR0VfRklMRVNfUkVMKQorCisuUEhPTlk6IGNvdmVyYWdlCisjIHdlIHJlYnVpbGQgYSByZWdpc3RyeSBhbmQgZG8gZ3N0LWluc3BlY3Qgc28gdGhhdCBhbGwgdGhlIGdldC9zZXQgY29kZXBhdGhzCisjIGFyZSBhbHNvIGNvdmVyZWQKK0BHU1RfR0NPVl9FTkFCTEVEX1RSVUVAY292ZXJhZ2U6CitAR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAlmb3IgZmlsZSBpbiBgZmluZCAkKHRvcF9idWlsZGRpcikgLW5hbWUgJyouZ2NkYSdgOyBkbyBybSAkJGZpbGU7IGRvbmUKK0BHU1RfR0NPVl9FTkFCTEVEX1RSVUVACS1ybSAkKENIRUNLX1JFR0lTVFJZKQorQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJZWNobyAiSW5zcGVjdGluZyBhbGwgZWxlbWVudHMiCitAR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAlmb3IgZSBpbiBgJChHU1RfSU5TUEVDVCkgfCBoZWFkIC1uIC0yIHwgY3V0IC1kOiAtZjJgOyBkbyAkKEdTVF9JTlNQRUNUKSAkJGUgPiAvZGV2L251bGwgMj4mMTsgZG9uZQorQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJbWFrZSBjaGVjaworQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJbWFrZSBjb3ZlcmFnZS1yZXBvcnQKK0BHU1RfR0NPVl9FTkFCTEVEX0ZBTFNFQGNvdmVyYWdlOgorQEdTVF9HQ09WX0VOQUJMRURfRkFMU0VACWVjaG8gIllvdSBuZWVkIHRvIGNvbmZpZ3VyZSB3aXRoIC0tZW5hYmxlLWdjb3YgdG8gZ2V0IGNvdmVyYWdlIGRhdGEiCitAR1NUX0dDT1ZfRU5BQkxFRF9GQUxTRUAJZXhpdCAxCisKK2NvdmVyYWdlLXJlcG9ydDoKKwlybSAtciBjb3ZlcmFnZQorCWZvciBkaXIgaW4gJChDT1ZFUkFHRV9ESVJTKTsgZG8gCQkJCVwKKwkgIG1rZGlyIC1wIGNvdmVyYWdlLyQkZGlyOyAJCQkJCVwKKwkgIG1ha2UgLUMgJCh0b3BfYnVpbGRkaXIpLyQkZGlyIGdjb3Y7CQkJCVwKKyAgICAgICAgZG9uZQorCWZvciBkaXIgaW4gJChDT1ZFUkFHRV9ESVJTKTsgZG8JCQkJCVwKKwkgICAgZmlsZXM9ImBscyAkKHRvcF9idWlsZGRpcikvJCRkaXIvKi5nY292Lm91dCAyPiAvZGV2L251bGxgIjsgXAorICAgICAgICAgIGlmIHRlc3QgISAteiAiJCRmaWxlcyI7IHRoZW4JCQkJCVwKKwkgICAgcGVybCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQucGwgCVwKKwkgICAgICAkKHRvcF9idWlsZGRpcikvJCRkaXIvKi5nY292Lm91dCA+CQkJXAorCSAgICAgIGNvdmVyYWdlLyQkZGlyL2luZGV4LnhtbDsJCQkJCVwKKwkgICAgeHNsdHByb2MgJCh0b3Bfc3JjZGlyKS9jb21tb24vY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LnhzbAlcCisJICAgICAgY292ZXJhZ2UvJCRkaXIvaW5kZXgueG1sID4gY292ZXJhZ2UvJCRkaXIvaW5kZXguaHRtbDsJXAorCSAgZmk7IFwKKyAgICAgICAgZG9uZQorCisJZm9yIGZpbGUgaW4gJChDT1ZFUkFHRV9GSUxFU19SRUwpOyBkbwkJCQlcCisJICBlY2hvIEdlbmVyYXRpbmcgY292ZXJhZ2UvJCRmaWxlLmh0bWw7IAkJCVwKKwkgIHBlcmwgJCh0b3Bfc3JjZGlyKS9jb21tb24vY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LWVudHJ5LnBsICAgXAorCSAgICAkKHRvcF9idWlsZGRpcikvJCRmaWxlID4gY292ZXJhZ2UvJCRmaWxlLmh0bWw7IAkJXAorCWRvbmUKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvY2Fwc2ZpbHRlci5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvY2Fwc2ZpbHRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YTZmMDkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9jYXBzZmlsdGVyLmMKQEAgLTAsMCArMSw5MyBAQAorLyogR1N0cmVhbWVyIHVuaXQgdGVzdCBmb3IgY2Fwc2ZpbHRlcgorICogQ29weXJpZ2h0IChDKSA8MjAwOD4gVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisKKyNkZWZpbmUgQ0FQU19URU1QTEFURV9TVFJJTkcgICAgICAgICAgICBcCisgICAgImF1ZGlvL3gtcmF3LWludCwgIiAgICAgICAgICAgICAgICAgXAorICAgICJjaGFubmVscyA9IChpbnQpIFsgMSwgMl0sICIgICAgICAgIFwKKyAgICAicmF0ZSA9IChpbnQpIFsgMSwgIE1BWCBdIgorCitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKKyAgICBHU1RfUEFEX1NJTkssCisgICAgR1NUX1BBRF9BTFdBWVMsCisgICAgR1NUX1NUQVRJQ19DQVBTIChDQVBTX1RFTVBMQVRFX1NUUklORykKKyAgICApOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF91bmZpeGVkX2Rvd25zdHJlYW1fY2FwcykKK3sKKyAgR3N0RWxlbWVudCAqcGlwZSwgKnNyYywgKmZpbHRlcjsKKyAgR3N0Q2FwcyAqZmlsdGVyX2NhcHM7CisgIEdzdFBhZCAqbXlzaW5rcGFkOworICBHc3RNZXNzYWdlICptc2c7CisKKyAgcGlwZSA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgicGlwZWxpbmUiKTsKKworICBzcmMgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoImZha2VzcmMiKTsKKyAgZ19vYmplY3Rfc2V0IChzcmMsICJzaXpldHlwZSIsIDIsICJzaXplbWF4IiwgMTAyNCwgIm51bS1idWZmZXJzIiwgMSwgTlVMTCk7CisKKyAgZmlsdGVyID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJjYXBzZmlsdGVyIik7CisgIGZpbHRlcl9jYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdy1pbnQsIHJhdGU9KGludCk0NDEwMCIpOworICBmYWlsX3VubGVzcyAoZmlsdGVyX2NhcHMgIT0gTlVMTCk7CisgIGdfb2JqZWN0X3NldCAoZmlsdGVyLCAiY2FwcyIsIGZpbHRlcl9jYXBzLCBOVUxMKTsKKworICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlKSwgc3JjLCBmaWx0ZXIsIE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBmaWx0ZXIpKTsKKworICBteXNpbmtwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQgKGZpbHRlciwgJnNpbmt0ZW1wbGF0ZSwgTlVMTCk7CisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBUUlVFKTsKKworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9QTEFZSU5HKSwKKyAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7CisKKyAgLyogd2FpdCBmb3IgZXJyb3Igb24gYnVzICovCisgIG1zZyA9IGdzdF9idXNfcG9sbCAoR1NUX0VMRU1FTlRfQlVTIChwaXBlKSwKKyAgICAgIEdTVF9NRVNTQUdFX0VPUyB8IEdTVF9NRVNTQUdFX0VSUk9SLCAtMSk7CisKKyAgZmFpbF9pZiAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSAhPSBHU1RfTUVTU0FHRV9FUlJPUiwKKyAgICAgICJFeHBlY3RlZCBFUlJPUiBtZXNzYWdlLCBnb3QgRU9TIG1lc3NhZ2UiKTsKKyAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7CisKKyAgLyogV2UgZG9uJ3QgZXhwZWN0IGFueSBvdXRwdXQgYnVmZmVycyB1bmxlc3MgdGhlIGNoZWNrIGZhaWxzICovCisgIGZhaWxfdW5sZXNzIChidWZmZXJzID09IE5VTEwpOworCisgIC8qIGNsZWFudXAgKi8KKyAgR1NUX0RFQlVHICgiY2xlYW51cCIpOworCisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBGQUxTRSk7CisgIGdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZCAoZmlsdGVyKTsKKyAgZ3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQgKHBpcGUpOworICBnc3RfY2Fwc191bnJlZiAoZmlsdGVyX2NhcHMpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBTdWl0ZSAqCitjYXBzZmlsdGVyX3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoImNhcHNmaWx0ZXIiKTsKKyAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOworCisgIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdW5maXhlZF9kb3duc3RyZWFtX2NhcHMpOworCisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoY2Fwc2ZpbHRlcikKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzaW5rLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc2luay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNjFlMTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc2luay5jCkBAIC0wLDAgKzEsMTAwMiBAQAorLyogR1N0cmVhbWVyCisgKgorICogdW5pdCB0ZXN0IGZvciBmYWtlc2luaworICoKKyAqIENvcHlyaWdodCAoQykgPDIwMDU+IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKyAqICAgICAgICAgICAgICAgPDIwMDc+IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+CisgKiAgICAgICAgICAgICAgIDwyMDA5PiBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPGdzdC9iYXNlL2dzdHB1c2hzcmMuaD4KKyNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgR3N0UGFkICpwYWQ7CisgIEdzdEJ1ZmZlciAqYnVmZmVyOworICBHVGhyZWFkICp0aHJlYWQ7CisgIEdzdEZsb3dSZXR1cm4gcmV0OworfSBDaGFpbkRhdGE7CisKK3N0YXRpYyBncG9pbnRlcgorY2hhaW5fYXN5bmNfYnVmZmVyIChncG9pbnRlciBkYXRhKQoreworICBDaGFpbkRhdGEgKmNoYWluX2RhdGEgPSAoQ2hhaW5EYXRhICopIGRhdGE7CisKKyAgY2hhaW5fZGF0YS0+cmV0ID0gZ3N0X3BhZF9jaGFpbiAoY2hhaW5fZGF0YS0+cGFkLCBjaGFpbl9kYXRhLT5idWZmZXIpOworCisgIHJldHVybiBjaGFpbl9kYXRhOworfQorCitzdGF0aWMgQ2hhaW5EYXRhICoKK2NoYWluX2FzeW5jIChHc3RQYWQgKiBwYWQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKK3sKKyAgR1RocmVhZCAqdGhyZWFkOworICBDaGFpbkRhdGEgKmNoYWluX2RhdGE7CisgIEdFcnJvciAqZXJyb3IgPSBOVUxMOworCisgIGNoYWluX2RhdGEgPSBnX25ldyAoQ2hhaW5EYXRhLCAxKTsKKyAgY2hhaW5fZGF0YS0+cGFkID0gcGFkOworICBjaGFpbl9kYXRhLT5idWZmZXIgPSBidWZmZXI7CisgIGNoYWluX2RhdGEtPnJldCA9IEdTVF9GTE9XX0VSUk9SOworCisgIHRocmVhZCA9IGdfdGhyZWFkX2NyZWF0ZSAoY2hhaW5fYXN5bmNfYnVmZmVyLCBjaGFpbl9kYXRhLCBUUlVFLCAmZXJyb3IpOworICBpZiAoZXJyb3IgIT0gTlVMTCkgeworICAgIGdfd2FybmluZyAoImNvdWxkIG5vdCBjcmVhdGUgdGhyZWFkIHJlYXNvbjogJXMiLCBlcnJvci0+bWVzc2FnZSk7CisgICAgZ19mcmVlIChjaGFpbl9kYXRhKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorICBjaGFpbl9kYXRhLT50aHJlYWQgPSB0aHJlYWQ7CisKKyAgcmV0dXJuIGNoYWluX2RhdGE7Cit9CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuCitjaGFpbl9hc3luY19yZXR1cm4gKENoYWluRGF0YSAqIGRhdGEpCit7CisgIEdzdEZsb3dSZXR1cm4gcmV0OworCisgIGdfdGhyZWFkX2pvaW4gKGRhdGEtPnRocmVhZCk7CisgIHJldCA9IGRhdGEtPnJldDsKKyAgZ19mcmVlIChkYXRhKTsKKworICByZXR1cm4gcmV0OworfQorCitHU1RfU1RBUlRfVEVTVCAodGVzdF9jbGlwcGluZykKK3sKKyAgR3N0RWxlbWVudCAqc2luazsKKyAgR3N0UGFkICpzaW5rcGFkOworICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7CisKKyAgLyogY3JlYXRlIHNpbmsgKi8KKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKKyAgZmFpbF9pZiAoc2luayA9PSBOVUxMKTsKKworICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNpbmssICJzaW5rIik7CisgIGZhaWxfaWYgKHNpbmtwYWQgPT0gTlVMTCk7CisKKyAgLyogbWFrZSBlbGVtZW50IHJlYWR5IHRvIGFjY2VwdCBkYXRhICovCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2luaywgR1NUX1NUQVRFX1BBVVNFRCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyk7CisKKyAgLyogc2VuZCBzZWdtZW50ICovCisgIHsKKyAgICBHc3RFdmVudCAqZXZlbnQ7CisgICAgR3N0U2VnbWVudCBzZWdtZW50OworICAgIGdib29sZWFuIGVyZXQ7CisKKyAgICBHU1RfREVCVUcgKCJzZW5kaW5nIHNlZ21lbnQiKTsKKyAgICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKKyAgICBzZWdtZW50LnN0YXJ0ID0gMSAqIEdTVF9TRUNPTkQ7CisgICAgc2VnbWVudC5zdG9wID0gNSAqIEdTVF9TRUNPTkQ7CisgICAgc2VnbWVudC50aW1lID0gMSAqIEdTVF9TRUNPTkQ7CisKKyAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpOworCisgICAgZXJldCA9IGdzdF9wYWRfc2VuZF9ldmVudCAoc2lua3BhZCwgZXZlbnQpOworICAgIGZhaWxfaWYgKGVyZXQgPT0gRkFMU0UpOworICB9CisKKyAgLyogbmV3IHNlZ21lbnQgc2hvdWxkIG5vdCBoYXZlIGZpbmlzaGVkIHByZXJvbGwgKi8KKyAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChzaW5rLCBOVUxMLCBOVUxMLCAwKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKTsKKworICAvKiBzZW5kIGJ1ZmZlciB0aGF0IHNob3VsZCBiZSBkcm9wcGVkICovCisgIHsKKyAgICBHc3RCdWZmZXIgKmJ1ZmZlcjsKKyAgICBHc3RGbG93UmV0dXJuIGZyZXQ7CisKKyAgICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKKyAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IDA7CisgICAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9IDEgKiBHU1RfTVNFQ09ORDsKKworICAgIEdTVF9ERUJVRyAoInNlbmRpbmcgYnVmZmVyIHRvIGJlIGRyb3BwZWQiKTsKKyAgICBmcmV0ID0gZ3N0X3BhZF9jaGFpbiAoc2lua3BhZCwgYnVmZmVyKTsKKyAgICBmYWlsX2lmIChmcmV0ICE9IEdTVF9GTE9XX09LKTsKKyAgfQorICAvKiBkcm9wcGVkIGJ1ZmZlciBzaG91bGQgbm90IGhhdmUgZmluaXNoZWQgcHJlcm9sbCAqLworICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHNpbmssIE5VTEwsIE5VTEwsIDApOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpOworCisgIC8qIHNlbmQgYnVmZmVyIHRoYXQgc2hvdWxkIGJlIGRyb3BwZWQgKi8KKyAgeworICAgIEdzdEJ1ZmZlciAqYnVmZmVyOworICAgIEdzdEZsb3dSZXR1cm4gZnJldDsKKworICAgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOworICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gNSAqIEdTVF9TRUNPTkQ7CisgICAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9IDEgKiBHU1RfTVNFQ09ORDsKKworICAgIEdTVF9ERUJVRyAoInNlbmRpbmcgYnVmZmVyIHRvIGJlIGRyb3BwZWQiKTsKKyAgICBmcmV0ID0gZ3N0X3BhZF9jaGFpbiAoc2lua3BhZCwgYnVmZmVyKTsKKyAgICBmYWlsX2lmIChmcmV0ICE9IEdTVF9GTE9XX09LKTsKKyAgfQorICAvKiBkcm9wcGVkIGJ1ZmZlciBzaG91bGQgbm90IGhhdmUgZmluaXNoZWQgcHJlcm9sbCAqLworICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHNpbmssIE5VTEwsIE5VTEwsIDApOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpOworCisgIC8qIHNlbmQgYnVmZmVyIHRoYXQgc2hvdWxkIGJsb2NrIGFuZCBmaW5pc2ggcHJlcm9sbCAqLworICB7CisgICAgR3N0QnVmZmVyICpidWZmZXI7CisgICAgR3N0Rmxvd1JldHVybiBmcmV0OworICAgIENoYWluRGF0YSAqZGF0YTsKKyAgICBHc3RTdGF0ZSBjdXJyZW50LCBwZW5kaW5nOworCisgICAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSAxICogR1NUX1NFQ09ORDsKKyAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpID0gMSAqIEdTVF9NU0VDT05EOworCisgICAgR1NUX0RFQlVHICgic2VuZGluZyBidWZmZXIgdG8gZmluaXNoIHByZXJvbGwiKTsKKyAgICBkYXRhID0gY2hhaW5fYXN5bmMgKHNpbmtwYWQsIGJ1ZmZlcik7CisgICAgZmFpbF9pZiAoZGF0YSA9PSBOVUxMKTsKKworICAgIC8qIHN0YXRlIHNob3VsZCBub3cgZXZlbnR1YWxseSBjaGFuZ2UgdG8gUEFVU0VEICovCisgICAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChzaW5rLCAmY3VycmVudCwgJnBlbmRpbmcsIEdTVF9DTE9DS19USU1FX05PTkUpOworICAgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKKyAgICBmYWlsX3VubGVzcyAoY3VycmVudCA9PSBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgICBmYWlsX3VubGVzcyAocGVuZGluZyA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HKTsKKworICAgIC8qIHBsYXlpbmcgc2hvdWxkIHJlbmRlciB0aGUgYnVmZmVyICovCisgICAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzaW5rLCBHU1RfU1RBVEVfUExBWUlORyk7CisgICAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOworCisgICAgLyogYW5kIHdlIHNob3VsZCBnZXQgYSBzdWNjZXNzIHJldHVybiB2YWx1ZSAqLworICAgIGZyZXQgPSBjaGFpbl9hc3luY19yZXR1cm4gKGRhdGEpOworICAgIGZhaWxfaWYgKGZyZXQgIT0gR1NUX0ZMT1dfT0spOworICB9CisKKyAgLyogc2VuZCBzb21lIGJ1ZmZlciB0aGF0IHdpbGwgYmUgZHJvcHBlZCBvciBjbGlwcGVkLCB0aGlzIGNhbiAKKyAgICogb25seSBiZSBvYnNlcnZlZCBpbiB0aGUgZGVidWcgbG9nLiAqLworICB7CisgICAgR3N0QnVmZmVyICpidWZmZXI7CisgICAgR3N0Rmxvd1JldHVybiBmcmV0OworCisgICAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSA2ICogR1NUX1NFQ09ORDsKKyAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpID0gMSAqIEdTVF9NU0VDT05EOworCisgICAgLyogc2hvdWxkIGJlIGRyb3BwZWQgKi8KKyAgICBHU1RfREVCVUcgKCJzZW5kaW5nIGJ1ZmZlciB0byBkcm9wIik7CisgICAgZnJldCA9IGdzdF9wYWRfY2hhaW4gKHNpbmtwYWQsIGJ1ZmZlcik7CisgICAgZmFpbF9pZiAoZnJldCAhPSBHU1RfRkxPV19PSyk7CisKKyAgICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKKyAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IDAgKiBHU1RfU0VDT05EOworICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgPSAyICogR1NUX1NFQ09ORDsKKworICAgIC8qIHNob3VsZCBiZSBjbGlwcGVkICovCisgICAgR1NUX0RFQlVHICgic2VuZGluZyBidWZmZXIgdG8gY2xpcCIpOworICAgIGZyZXQgPSBnc3RfcGFkX2NoYWluIChzaW5rcGFkLCBidWZmZXIpOworICAgIGZhaWxfaWYgKGZyZXQgIT0gR1NUX0ZMT1dfT0spOworCisgICAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSA0ICogR1NUX1NFQ09ORDsKKyAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpID0gMiAqIEdTVF9TRUNPTkQ7CisKKyAgICAvKiBzaG91bGQgYmUgY2xpcHBlZCAqLworICAgIEdTVF9ERUJVRyAoInNlbmRpbmcgYnVmZmVyIHRvIGNsaXAiKTsKKyAgICBmcmV0ID0gZ3N0X3BhZF9jaGFpbiAoc2lua3BhZCwgYnVmZmVyKTsKKyAgICBmYWlsX2lmIChmcmV0ICE9IEdTVF9GTE9XX09LKTsKKyAgfQorCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2luaywgR1NUX1NUQVRFX05VTEwpOworICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHNpbmssIE5VTEwsIE5VTEwsIEdTVF9DTE9DS19USU1FX05PTkUpOworICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc2luayk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIGdpbnQgbnVtX3ByZXJvbGwgPSAwOworCitzdGF0aWMgdm9pZAorcHJlcm9sbF9jb3VudCAoR3N0RWxlbWVudCAqIHNpbmspCit7CisgIG51bV9wcmVyb2xsKys7CisgIEdTVF9ERUJVRyAoImdvdCBwcmVyb2xsIGhhbmRvZmYgJWQiLCBudW1fcHJlcm9sbCk7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3ByZXJvbGxfc3luYykKK3sKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpzaW5rOworICBHc3RQYWQgKnNpbmtwYWQ7CisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKKworICAvKiBjcmVhdGUgc2luayAqLworICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOworICBmYWlsX2lmIChwaXBlbGluZSA9PSBOVUxMKTsKKworICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOworICBmYWlsX2lmIChzaW5rID09IE5VTEwpOworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzaW5rKSwgInN5bmMiLCBUUlVFLCBOVUxMKTsKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc2luayksICJzaWduYWwtaGFuZG9mZnMiLCBUUlVFLCBOVUxMKTsKKyAgZ19zaWduYWxfY29ubmVjdCAoc2luaywgInByZXJvbGwtaGFuZG9mZiIsIEdfQ0FMTEJBQ0sgKHByZXJvbGxfY291bnQpLCBOVUxMKTsKKworICBmYWlsX3VubGVzcyAobnVtX3ByZXJvbGwgPT0gMCk7CisKKyAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc2luayk7CisKKyAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rLCAic2luayIpOworICBmYWlsX2lmIChzaW5rcGFkID09IE5VTEwpOworCisgIC8qIG1ha2UgcGlwZWxpbmUgYW5kIGVsZW1lbnQgcmVhZHkgdG8gYWNjZXB0IGRhdGEgKi8KKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyk7CisKKyAgLyogc2VuZCBzZWdtZW50ICovCisgIHsKKyAgICBHc3RFdmVudCAqZXZlbnQ7CisgICAgR3N0U2VnbWVudCBzZWdtZW50OworICAgIGdib29sZWFuIGVyZXQ7CisKKyAgICBHU1RfREVCVUcgKCJzZW5kaW5nIHNlZ21lbnQiKTsKKyAgICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKKyAgICBzZWdtZW50LnN0YXJ0ID0gMCAqIEdTVF9TRUNPTkQ7CisgICAgc2VnbWVudC5zdG9wID0gMTAyICogR1NUX1NFQ09ORDsKKyAgICBzZWdtZW50LnRpbWUgPSAwICogR1NUX1NFQ09ORDsKKworICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCk7CisgICAgZXJldCA9IGdzdF9wYWRfc2VuZF9ldmVudCAoc2lua3BhZCwgZXZlbnQpOworICAgIGZhaWxfaWYgKGVyZXQgPT0gRkFMU0UpOworICB9CisKKyAgLyogc2VuZCBidWZmZXIgdGhhdCBzaG91bGQgYmxvY2sgYW5kIGZpbmlzaCBwcmVyb2xsICovCisgIHsKKyAgICBHc3RCdWZmZXIgKmJ1ZmZlcjsKKyAgICBHc3RGbG93UmV0dXJuIGZyZXQ7CisgICAgQ2hhaW5EYXRhICpkYXRhOworICAgIEdzdFN0YXRlIGN1cnJlbnQsIHBlbmRpbmc7CisKKyAgICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKKyAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IDEgKiBHU1RfU0VDT05EOworICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgPSAxICogR1NUX1NFQ09ORDsKKworICAgIEdTVF9ERUJVRyAoInNlbmRpbmcgYnVmZmVyIHRvIGZpbmlzaCBwcmVyb2xsIik7CisgICAgZGF0YSA9IGNoYWluX2FzeW5jIChzaW5rcGFkLCBidWZmZXIpOworICAgIGZhaWxfaWYgKGRhdGEgPT0gTlVMTCk7CisKKyAgICAvKiBzdGF0ZSBzaG91bGQgbm93IGV2ZW50dWFsbHkgY2hhbmdlIHRvIFBBVVNFRCAqLworICAgIHJldCA9CisgICAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsICZjdXJyZW50LCAmcGVuZGluZywKKyAgICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisgICAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOworICAgIGZhaWxfdW5sZXNzIChjdXJyZW50ID09IEdTVF9TVEFURV9QQVVTRUQpOworICAgIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcpOworCisgICAgZmFpbF91bmxlc3MgKG51bV9wcmVyb2xsID09IDEpOworCisgICAgLyogcGxheWluZyBzaG91bGQgcmVuZGVyIHRoZSBidWZmZXIgKi8KKyAgICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7CisgICAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOworCisgICAgLyogYW5kIHdlIHNob3VsZCBnZXQgYSBzdWNjZXNzIHJldHVybiB2YWx1ZSAqLworICAgIGZyZXQgPSBjaGFpbl9hc3luY19yZXR1cm4gKGRhdGEpOworICAgIGZhaWxfaWYgKGZyZXQgIT0gR1NUX0ZMT1dfT0spOworCisgICAgLyogbm93IHdlIGFyZSBwbGF5aW5nIG5vIG5ldyBwcmVyb2xsIHdhcyBkb25lICovCisgICAgZmFpbF91bmxlc3MgKG51bV9wcmVyb2xsID09IDEpOworCisgICAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisgICAgLyogZmFyIGluIHRoZSBmdXR1cmUgdG8gbWFrZSBzdXJlIHdlIGJsb2NrICovCisgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSAxMDAgKiBHU1RfU0VDT05EOworICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgPSAxMDAgKiBHU1RfU0VDT05EOworICAgIGRhdGEgPSBjaGFpbl9hc3luYyAoc2lua3BhZCwgYnVmZmVyKTsKKyAgICBmYWlsX2lmIChkYXRhID09IE5VTEwpOworCisgICAgZ191c2xlZXAgKDEwMDAwMDApOworCisgICAgLyogcGF1c2UgYWdhaW4uIFNpbmNlIHRoZSBidWZmZXIgaGFzIGEgaHVtb25nb3VzIHRpbWVzdGFtcCB3ZSBsaWtlbHkKKyAgICAgKiBpbnRlcnJ1cHQgdGhlIGNsb2NrX3dhaXQgYW5kIHdlIHNob3VsZCBwcmVyb2xsIG9uIHRoaXMgYnVmZmVyIGFnYWluICovCisgICAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7CisgICAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKTsKKworICAgIHJldCA9CisgICAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsICZjdXJyZW50LCAmcGVuZGluZywKKyAgICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisgICAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOworICAgIGZhaWxfdW5sZXNzIChjdXJyZW50ID09IEdTVF9TVEFURV9QQVVTRUQpOworICAgIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcpOworCisgICAgZmFpbF91bmxlc3MgKG51bV9wcmVyb2xsID09IDIpOworCisgICAgLyogc2h1dGRvd24gKi8KKyAgICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUkVBRFkpOworICAgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKKworICAgIC8qIHNob3VsZCBiZSB3cm9uZyBzdGF0ZSBub3cgKi8KKyAgICBmcmV0ID0gY2hhaW5fYXN5bmNfcmV0dXJuIChkYXRhKTsKKyAgICBmYWlsX2lmIChmcmV0ICE9IEdTVF9GTE9XX1dST05HX1NUQVRFKTsKKyAgfQorICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7CisgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsIE5VTEwsIE5VTEwsIEdTVF9DTE9DS19USU1FX05PTkUpOworICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKKyAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIGFmdGVyIEVPUywgd2UgcmVmdXNlIGV2ZXJ5dGhpbmcgKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X2VvcykKK3sKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpzaW5rOworICBHc3RQYWQgKnNpbmtwYWQ7CisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKKyAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKKyAgR3N0QnVzICpidXM7CisKKyAgLyogY3JlYXRlIHNpbmsgKi8KKyAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKKyAgZmFpbF9pZiAocGlwZWxpbmUgPT0gTlVMTCk7CisKKyAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKEdTVF9QSVBFTElORV9DQVNUIChwaXBlbGluZSkpOworICBmYWlsX2lmIChidXMgPT0gTlVMTCk7CisKKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKKyAgZmFpbF9pZiAoc2luayA9PSBOVUxMKTsKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc2luayksICJzeW5jIiwgVFJVRSwgTlVMTCk7CisKKyAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc2luayk7CisKKyAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rLCAic2luayIpOworICBmYWlsX2lmIChzaW5rcGFkID09IE5VTEwpOworCisgIC8qIG1ha2UgcGlwZWxpbmUgYW5kIGVsZW1lbnQgcmVhZHkgdG8gYWNjZXB0IGRhdGEgKi8KKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpOworCisgIC8qIHNlbmQgRU9TLCB0aGlzIHNob3VsZCB3b3JrIGZpbmUgKi8KKyAgeworICAgIEdzdEV2ZW50ICplb3M7CisgICAgZ2Jvb2xlYW4gZXJldDsKKworICAgIEdTVF9ERUJVRyAoInNlbmRpbmcgRU9TIik7CisgICAgZW9zID0gZ3N0X2V2ZW50X25ld19lb3MgKCk7CisKKyAgICBlcmV0ID0gZ3N0X3BhZF9zZW5kX2V2ZW50IChzaW5rcGFkLCBlb3MpOworICAgIGZhaWxfaWYgKGVyZXQgPT0gRkFMU0UpOworICB9CisKKyAgLyogd2FpdCBmb3IgcHJlcm9sbCAqLworICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKworICAvKiBFT1Mgc2hvdWxkIGJlIG9uIHRoZSBidXMgYXQgc29tZSBwb2ludCAqLworICB3aGlsZSAoVFJVRSkgeworICAgIEdzdE1lc3NhZ2VUeXBlIHR5cGU7CisKKyAgICAvKiBibG9ja2luZyB3YWl0IGZvciBtZXNzYWdlcyAqLworICAgIG1lc3NhZ2UgPSBnc3RfYnVzX3RpbWVkX3BvcCAoYnVzLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKyAgICB0eXBlID0gR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSk7CisgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOworCisgICAgR1NUX0RFQlVHICgiZ290IG1lc3NhZ2UgJXMiLCBnc3RfbWVzc2FnZV90eXBlX2dldF9uYW1lICh0eXBlKSk7CisKKyAgICBpZiAodHlwZSA9PSBHU1RfTUVTU0FHRV9FT1MpCisgICAgICBicmVhazsKKyAgfQorICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOworCisgIC8qIHNlbmQgYW5vdGhlciBFT1MsIHRoaXMgc2hvdWxkIGZhaWwgKi8KKyAgeworICAgIEdzdEV2ZW50ICplb3M7CisgICAgZ2Jvb2xlYW4gZXJldDsKKworICAgIEdTVF9ERUJVRyAoInNlbmRpbmcgc2Vjb25kIEVPUyIpOworICAgIGVvcyA9IGdzdF9ldmVudF9uZXdfZW9zICgpOworCisgICAgZXJldCA9IGdzdF9wYWRfc2VuZF9ldmVudCAoc2lua3BhZCwgZW9zKTsKKyAgICBmYWlsX2lmIChlcmV0ID09IFRSVUUpOworICB9CisKKyAgLyogc2VuZCBzZWdtZW50LCB0aGlzIHNob3VsZCBmYWlsICovCisgIHsKKyAgICBHc3RFdmVudCAqZXZlbnQ7CisgICAgR3N0U2VnbWVudCBzZWdtZW50OworICAgIGdib29sZWFuIGVyZXQ7CisKKyAgICBHU1RfREVCVUcgKCJzZW5kaW5nIHNlZ21lbnQiKTsKKyAgICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKKyAgICBzZWdtZW50LnN0YXJ0ID0gMCAqIEdTVF9TRUNPTkQ7CisgICAgc2VnbWVudC5zdG9wID0gMiAqIEdTVF9TRUNPTkQ7CisgICAgc2VnbWVudC50aW1lID0gMCAqIEdTVF9TRUNPTkQ7CisgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KTsKKworICAgIGVyZXQgPSBnc3RfcGFkX3NlbmRfZXZlbnQgKHNpbmtwYWQsIGV2ZW50KTsKKyAgICBmYWlsX2lmIChlcmV0ID09IFRSVUUpOworICB9CisKKyAgLyogc2VuZCBidWZmZXIgdGhhdCBzaG91bGQgZmFpbCBhZnRlciBFT1MgKi8KKyAgeworICAgIEdzdEJ1ZmZlciAqYnVmZmVyOworICAgIEdzdEZsb3dSZXR1cm4gZnJldDsKKworICAgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOworICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gMSAqIEdTVF9TRUNPTkQ7CisgICAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9IDEgKiBHU1RfU0VDT05EOworCisgICAgR1NUX0RFQlVHICgic2VuZGluZyBidWZmZXIiKTsKKworICAgIC8qIGJ1ZmZlciBhZnRlciBFT1MgaXMgbm90IFVORVhQRUNURUQgKi8KKyAgICBmcmV0ID0gZ3N0X3BhZF9jaGFpbiAoc2lua3BhZCwgYnVmZmVyKTsKKyAgICBmYWlsX3VubGVzcyAoZnJldCA9PSBHU1RfRkxPV19VTkVYUEVDVEVEKTsKKyAgfQorCisgIC8qIGZsdXNoLCBFT1Mgc3RhdGUgaXMgZmx1c2hlZCBhZ2Fpbi4gKi8KKyAgeworICAgIEdzdEV2ZW50ICpldmVudDsKKyAgICBnYm9vbGVhbiBlcmV0OworCisgICAgR1NUX0RFQlVHICgic2VuZGluZyBGTFVTSF9TVEFSVCIpOworICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19mbHVzaF9zdGFydCAoKTsKKyAgICBlcmV0ID0gZ3N0X3BhZF9zZW5kX2V2ZW50IChzaW5rcGFkLCBldmVudCk7CisgICAgZmFpbF91bmxlc3MgKGVyZXQgPT0gVFJVRSk7CisKKyAgICBHU1RfREVCVUcgKCJzZW5kaW5nIEZMVVNIX1NUT1AiKTsKKyAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoVFJVRSk7CisgICAgZXJldCA9IGdzdF9wYWRfc2VuZF9ldmVudCAoc2lua3BhZCwgZXZlbnQpOworICAgIGZhaWxfdW5sZXNzIChlcmV0ID09IFRSVUUpOworICB9CisKKyAgLyogc2VuZCBzZWdtZW50LCB0aGlzIHNob3VsZCBub3cgd29yayBhZ2FpbiAqLworICB7CisgICAgR3N0RXZlbnQgKmV2ZW50OworICAgIEdzdFNlZ21lbnQgc2VnbWVudDsKKyAgICBnYm9vbGVhbiBlcmV0OworCisgICAgR1NUX0RFQlVHICgic2VuZGluZyBzZWdtZW50Iik7CisgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7CisgICAgc2VnbWVudC5zdGFydCA9IDAgKiBHU1RfU0VDT05EOworICAgIHNlZ21lbnQuc3RvcCA9IDIgKiBHU1RfU0VDT05EOworICAgIHNlZ21lbnQudGltZSA9IDAgKiBHU1RfU0VDT05EOworICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCk7CisKKyAgICBlcmV0ID0gZ3N0X3BhZF9zZW5kX2V2ZW50IChzaW5rcGFkLCBldmVudCk7CisgICAgZmFpbF91bmxlc3MgKGVyZXQgPT0gVFJVRSk7CisgIH0KKworICAvKiBzZW5kIGJ1ZmZlciB0aGF0IHNob3VsZCB3b3JrIGFuZCBibG9jayAqLworICB7CisgICAgR3N0QnVmZmVyICpidWZmZXI7CisgICAgR3N0Rmxvd1JldHVybiBmcmV0OworCisgICAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSAxICogR1NUX1NFQ09ORDsKKyAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpID0gMSAqIEdTVF9TRUNPTkQ7CisKKyAgICBHU1RfREVCVUcgKCJzZW5kaW5nIGJ1ZmZlciIpOworCisgICAgZnJldCA9IGdzdF9wYWRfY2hhaW4gKHNpbmtwYWQsIGJ1ZmZlcik7CisgICAgZmFpbF91bmxlc3MgKGZyZXQgPT0gR1NUX0ZMT1dfT0spOworICB9CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOworICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiB0ZXN0IEVPUyB0cmlnZ2VyZWQgYnkgdGhlIGVsZW1lbnQgKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X2VvczIpCit7CisgIEdzdEVsZW1lbnQgKnBpcGVsaW5lLCAqc2luazsKKyAgR3N0UGFkICpzaW5rcGFkOworICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7CisKKyAgLyogY3JlYXRlIHNpbmsgKi8KKyAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKKyAgZmFpbF9pZiAocGlwZWxpbmUgPT0gTlVMTCk7CisKKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKKyAgZmFpbF9pZiAoc2luayA9PSBOVUxMKTsKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc2luayksICJzeW5jIiwgVFJVRSwgTlVMTCk7CisgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNpbmspLCAibnVtLWJ1ZmZlcnMiLCAxLCBOVUxMKTsKKworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzaW5rKTsKKworICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNpbmssICJzaW5rIik7CisgIGZhaWxfaWYgKHNpbmtwYWQgPT0gTlVMTCk7CisKKyAgLyogbWFrZSBwaXBlbGluZSBhbmQgZWxlbWVudCByZWFkeSB0byBhY2NlcHQgZGF0YSAqLworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyk7CisKKyAgLyogc2VuZCBzZWdtZW50LCB0aGlzIHNob3VsZCB3b3JrICovCisgIHsKKyAgICBHc3RFdmVudCAqZXZlbnQ7CisgICAgR3N0U2VnbWVudCBzZWdtZW50OworICAgIGdib29sZWFuIGVyZXQ7CisKKyAgICBHU1RfREVCVUcgKCJzZW5kaW5nIHNlZ21lbnQiKTsKKyAgICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKKyAgICBzZWdtZW50LnN0YXJ0ID0gMCAqIEdTVF9TRUNPTkQ7CisgICAgc2VnbWVudC5zdG9wID0gMiAqIEdTVF9TRUNPTkQ7CisgICAgc2VnbWVudC50aW1lID0gMCAqIEdTVF9TRUNPTkQ7CisgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KTsKKworICAgIGVyZXQgPSBnc3RfcGFkX3NlbmRfZXZlbnQgKHNpbmtwYWQsIGV2ZW50KTsKKyAgICBmYWlsX2lmIChlcmV0ID09IEZBTFNFKTsKKyAgfQorCisgIC8qIHNlbmQgYnVmZmVyIHRoYXQgc2hvdWxkIHJldHVybiBVTkVYUEVDVEVEICovCisgIHsKKyAgICBHc3RCdWZmZXIgKmJ1ZmZlcjsKKyAgICBHc3RGbG93UmV0dXJuIGZyZXQ7CisKKyAgICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKKyAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IDEgKiBHU1RfU0VDT05EOworICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgPSAxICogR1NUX1NFQ09ORDsKKworICAgIEdTVF9ERUJVRyAoInNlbmRpbmcgYnVmZmVyIik7CisKKyAgICAvKiB0aGlzIGJ1ZmZlciB3aWxsIGdlbmVyYXRlIFVORVhQRUNURUQgKi8KKyAgICBmcmV0ID0gZ3N0X3BhZF9jaGFpbiAoc2lua3BhZCwgYnVmZmVyKTsKKyAgICBmYWlsX3VubGVzcyAoZnJldCA9PSBHU1RfRkxPV19VTkVYUEVDVEVEKTsKKyAgfQorCisgIC8qIHNlbmQgYnVmZmVyIHRoYXQgc2hvdWxkIHJldHVybiBVTkVYUEVDVEVEICovCisgIHsKKyAgICBHc3RCdWZmZXIgKmJ1ZmZlcjsKKyAgICBHc3RGbG93UmV0dXJuIGZyZXQ7CisKKyAgICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKKyAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IDEgKiBHU1RfU0VDT05EOworICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgPSAxICogR1NUX1NFQ09ORDsKKworICAgIEdTVF9ERUJVRyAoInNlbmRpbmcgYnVmZmVyIik7CisKKyAgICBmcmV0ID0gZ3N0X3BhZF9jaGFpbiAoc2lua3BhZCwgYnVmZmVyKTsKKyAgICBmYWlsX3VubGVzcyAoZnJldCA9PSBHU1RfRkxPV19VTkVYUEVDVEVEKTsKKyAgfQorCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKKyAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgTlVMTCwgTlVMTCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogdGVzdCBwb3NpdGlvbiByZXBvcnRpbmcgYmVmb3JlLCBkdXJpbmcgYW5kIGFmdGVyIGZsdXNoIAorICogaW4gUEFVU0VEIGFuZCBQTEFZSU5HICovCitHU1RfU1RBUlRfVEVTVCAodGVzdF9wb3NpdGlvbikKK3sKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpzaW5rOworICBHc3RQYWQgKnNpbmtwYWQ7CisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKKyAgZ2Jvb2xlYW4gcXJldDsKKyAgZ2ludDY0IHFjdXI7CisgIEdzdEJ1ZmZlciAqYnVmZmVyOworICBHc3RGbG93UmV0dXJuIGZyZXQ7CisgIENoYWluRGF0YSAqZGF0YTsKKyAgR3N0RXZlbnQgKmV2ZW50OworICBnYm9vbGVhbiBlcmV0OworICBnaW50IGk7CisKKyAgLyogY3JlYXRlIHNpbmsgKi8KKyAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKKyAgZmFpbF9pZiAocGlwZWxpbmUgPT0gTlVMTCk7CisKKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKKyAgZmFpbF9pZiAoc2luayA9PSBOVUxMKTsKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc2luayksICJzeW5jIiwgVFJVRSwgTlVMTCk7CisgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNpbmspLCAibnVtLWJ1ZmZlcnMiLCAyLCBOVUxMKTsKKworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzaW5rKTsKKworICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNpbmssICJzaW5rIik7CisgIGZhaWxfaWYgKHNpbmtwYWQgPT0gTlVMTCk7CisKKyAgLyogZG8gcG9zaXRpb24gcXVlcnksIHRoaXMgc2hvdWxkIGZhaWwsIHdlIGhhdmUgbm90aGluZyByZWNlaXZlZCB5ZXQgKi8KKyAgcXJldCA9IGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uIChzaW5rLCBHU1RfRk9STUFUX1RJTUUsICZxY3VyKTsKKyAgZmFpbF91bmxlc3MgKHFyZXQgPT0gRkFMU0UpOworCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9SRUFEWSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKKworICAvKiBkbyBwb3NpdGlvbiBxdWVyeSwgdGhpcyBzaG91bGQgZmFpbCwgd2UgaGF2ZSBub3RoaW5nIHJlY2VpdmVkIHlldCAqLworICBxcmV0ID0gZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24gKHNpbmssIEdTVF9GT1JNQVRfVElNRSwgJnFjdXIpOworICBmYWlsX3VubGVzcyAocXJldCA9PSBGQUxTRSk7CisKKyAgLyogbWFrZSBwaXBlbGluZSBhbmQgZWxlbWVudCByZWFkeSB0byBhY2NlcHQgZGF0YSAqLworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKTsKKworICAvKiBkbyBwb3NpdGlvbiBxdWVyeSwgdGhpcyBzaG91bGQgZmFpbCwgd2UgaGF2ZSBub3RoaW5nIHJlY2VpdmVkIHlldCAqLworICBxcmV0ID0gZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24gKHNpbmssIEdTVF9GT1JNQVRfVElNRSwgJnFjdXIpOworICBmYWlsX3VubGVzcyAocXJldCA9PSBGQUxTRSk7CisKKyAgLyogc2VuZCBzZWdtZW50LCB0aGlzIHNob3VsZCB3b3JrICovCisgIHsKKyAgICBHc3RTZWdtZW50IHNlZ21lbnQ7CisKKyAgICBHU1RfREVCVUcgKCJzZW5kaW5nIHNlZ21lbnQiKTsKKyAgICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKKyAgICBzZWdtZW50LnN0YXJ0ID0gMSAqIEdTVF9TRUNPTkQ7CisgICAgc2VnbWVudC5zdG9wID0gMyAqIEdTVF9TRUNPTkQ7CisgICAgc2VnbWVudC50aW1lID0gMSAqIEdTVF9TRUNPTkQ7CisgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KTsKKworICAgIGVyZXQgPSBnc3RfcGFkX3NlbmRfZXZlbnQgKHNpbmtwYWQsIGV2ZW50KTsKKyAgICBmYWlsX2lmIChlcmV0ID09IEZBTFNFKTsKKyAgfQorCisgIC8qIEZJWE1FLCBkbyBwb3NpdGlvbiBxdWVyeSwgdGhpcyBzaG91bGQgc3VjY2VlZCB3aXRoIHRoZSB0aW1lIHZhbHVlIGZyb20gdGhlCisgICAqIHNlZ21lbnQuICovCisgIHFyZXQgPSBnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbiAoc2luaywgR1NUX0ZPUk1BVF9USU1FLCAmcWN1cik7CisgIGZhaWxfdW5sZXNzIChxcmV0ID09IFRSVUUpOworICBmYWlsX3VubGVzcyAocWN1ciA9PSAxICogR1NUX1NFQ09ORCk7CisKKyAgLyogc2VuZCBidWZmZXIgdGhhdCB3ZSB3aWxsIGZsdXNoIG91dCAqLworICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKKyAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSAyICogR1NUX1NFQ09ORDsKKyAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9IDEgKiBHU1RfU0VDT05EOworCisgIEdTVF9ERUJVRyAoInNlbmRpbmcgYnVmZmVyIik7CisKKyAgLyogdGhpcyBidWZmZXIgY2F1c2VzIHRoZSBzaW5rIHRvIHByZXJvbGwgKi8KKyAgZGF0YSA9IGNoYWluX2FzeW5jIChzaW5rcGFkLCBidWZmZXIpOworICBmYWlsX2lmIChkYXRhID09IE5VTEwpOworCisgIC8qIHdhaXQgZm9yIHByZXJvbGwgKi8KKyAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgTlVMTCwgTlVMTCwgLTEpOworCisgIC8qIGRvIHBvc2l0aW9uIHF1ZXJ5LCB0aGlzIHNob3VsZCBzdWNjZWVkIHdpdGggdGhlIHRpbWUgdmFsdWUgZnJvbSB0aGUKKyAgICogc2VnbWVudC4gKi8KKyAgcXJldCA9IGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uIChzaW5rLCBHU1RfRk9STUFUX1RJTUUsICZxY3VyKTsKKyAgZmFpbF91bmxlc3MgKHFyZXQgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChxY3VyID09IDEgKiBHU1RfU0VDT05EKTsKKworICAvKiBzdGFydCBmbHVzaGluZywgbm8gdGltaW5nIGlzIGFmZmVjdGVkIHlldCAqLworICB7CisgICAgR1NUX0RFQlVHICgic2VuZGluZyBmbHVzaF9zdGFydCIpOworICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19mbHVzaF9zdGFydCAoKTsKKworICAgIGVyZXQgPSBnc3RfcGFkX3NlbmRfZXZlbnQgKHNpbmtwYWQsIGV2ZW50KTsKKyAgICBmYWlsX2lmIChlcmV0ID09IEZBTFNFKTsKKyAgfQorCisgIC8qIHByZXJvbGwgYnVmZmVyIGlzIGZsdXNoZWQgb3V0ICovCisgIGZyZXQgPSBjaGFpbl9hc3luY19yZXR1cm4gKGRhdGEpOworICBmYWlsX3VubGVzcyAoZnJldCA9PSBHU1RfRkxPV19XUk9OR19TVEFURSk7CisKKyAgLyogZG8gcG9zaXRpb24gcXVlcnksIHRoaXMgc2hvdWxkIHN1Y2NlZWQgd2l0aCB0aGUgdGltZSB2YWx1ZSBmcm9tIHRoZQorICAgKiBzZWdtZW50IGJlZm9yZSB0aGUgZmx1c2guICovCisgIHFyZXQgPSBnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbiAoc2luaywgR1NUX0ZPUk1BVF9USU1FLCAmcWN1cik7CisgIGZhaWxfdW5sZXNzIChxcmV0ID09IFRSVUUpOworICBmYWlsX3VubGVzcyAocWN1ciA9PSAxICogR1NUX1NFQ09ORCk7CisKKyAgLyogc3RvcCBmbHVzaGluZywgdGltaW5nIGlzIGFmZmVjdGVkIG5vdyAqLworICB7CisgICAgR1NUX0RFQlVHICgic2VuZGluZyBmbHVzaF9zdG9wIik7CisgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AgKFRSVUUpOworCisgICAgZXJldCA9IGdzdF9wYWRfc2VuZF9ldmVudCAoc2lua3BhZCwgZXZlbnQpOworICAgIGZhaWxfaWYgKGVyZXQgPT0gRkFMU0UpOworICB9CisKKyAgLyogZG8gcG9zaXRpb24gcXVlcnksIHRoaXMgc2hvdWxkIGZhaWwsIHRoZSBzZWdtZW50IGlzIGZsdXNoZWQgKi8KKyAgcXJldCA9IGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uIChzaW5rLCBHU1RfRk9STUFUX1RJTUUsICZxY3VyKTsKKyAgZmFpbF91bmxlc3MgKHFyZXQgPT0gRkFMU0UpOworCisgIC8qIHNlbmQgc2VnbWVudCwgdGhpcyBzaG91bGQgd29yayAqLworICB7CisgICAgR3N0U2VnbWVudCBzZWdtZW50OworCisgICAgR1NUX0RFQlVHICgic2VuZGluZyBzZWdtZW50Iik7CisgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7CisgICAgc2VnbWVudC5zdGFydCA9IDIgKiBHU1RfU0VDT05EOworICAgIHNlZ21lbnQuc3RvcCA9IDQgKiBHU1RfU0VDT05EOworICAgIHNlZ21lbnQudGltZSA9IDEgKiBHU1RfU0VDT05EOworICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCk7CisKKyAgICBlcmV0ID0gZ3N0X3BhZF9zZW5kX2V2ZW50IChzaW5rcGFkLCBldmVudCk7CisgICAgZmFpbF9pZiAoZXJldCA9PSBGQUxTRSk7CisgIH0KKworICAvKiBzZW5kIGJ1ZmZlciB0aGF0IHNob3VsZCByZXR1cm4gT0sgKi8KKyAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gMyAqIEdTVF9TRUNPTkQ7CisgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgPSAxICogR1NUX1NFQ09ORDsKKworICBHU1RfREVCVUcgKCJzZW5kaW5nIGJ1ZmZlciIpOworCisgIC8qIHRoaXMgYnVmZmVyIGNhdXNlcyB0aGUgc2luayB0byBwcmVyb2xsICovCisgIGRhdGEgPSBjaGFpbl9hc3luYyAoc2lua3BhZCwgYnVmZmVyKTsKKyAgZmFpbF9pZiAoZGF0YSA9PSBOVUxMKTsKKworICAvKiB3YWl0IGZvciBwcmVyb2xsICovCisgIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsIE5VTEwsIE5VTEwsIC0xKTsKKworICAvKiBkbyBwb3NpdGlvbiBxdWVyeSwgdGhpcyBzaG91bGQgc3VjY2VlZCB3aXRoIHRoZSB0aW1lIHZhbHVlIGZyb20gdGhlCisgICAqIHNlZ21lbnQuICovCisgIHFyZXQgPSBnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbiAoc2luaywgR1NUX0ZPUk1BVF9USU1FLCAmcWN1cik7CisgIGZhaWxfdW5sZXNzIChxcmV0ID09IFRSVUUpOworICBmYWlsX3VubGVzcyAocWN1ciA9PSAxICogR1NUX1NFQ09ORCk7CisKKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7CisKKyAgLyogcG9zaXRpb24gbm93IGlzIGluY3JlYXNpbmcgYnV0IG5ldmVyIGV4Y2VlZHMgdGhlIGJvdW5kYXJpZXMgb2YgdGhlIHNlZ21lbnQgKi8KKyAgZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworICAgIHFyZXQgPSBnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbiAoc2luaywgR1NUX0ZPUk1BVF9USU1FLCAmcWN1cik7CisgICAgR1NUX0RFQlVHICgicG9zaXRpb24gJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChxY3VyKSk7CisgICAgZmFpbF91bmxlc3MgKHFyZXQgPT0gVFJVRSk7CisgICAgZmFpbF91bmxlc3MgKHFjdXIgPj0gMSAqIEdTVF9TRUNPTkQgJiYgcWN1ciA8PSAzICogR1NUX1NFQ09ORCk7CisgICAgZ191c2xlZXAgKDEwMDAgKiAyNTApOworICB9CisKKyAgLyogcHJlcm9sbCBidWZmZXIgaXMgcmVuZGVyZWQsIHdlIGV4cGVjdCBvbmUgbW9yZSBidWZmZXIgYWZ0ZXIgdGhpcyBvbmUgKi8KKyAgZnJldCA9IGNoYWluX2FzeW5jX3JldHVybiAoZGF0YSk7CisgIGZhaWxfdW5sZXNzIChmcmV0ID09IEdTVF9GTE9XX09LKTsKKworICAvKiBhZnRlciByZW5kZXJpbmcgdGhlIHBvc2l0aW9uIG11c3QgYmUgYmlnZ2VyIHRoZW4gdGhlIHN0cmVhbV90aW1lIG9mIHRoZQorICAgKiBidWZmZXIgKi8KKyAgcXJldCA9IGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uIChzaW5rLCBHU1RfRk9STUFUX1RJTUUsICZxY3VyKTsKKyAgZmFpbF91bmxlc3MgKHFyZXQgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChxY3VyID49IDIgKiBHU1RfU0VDT05EICYmIHFjdXIgPD0gMyAqIEdTVF9TRUNPTkQpOworCisgIC8qIHN0YXJ0IGZsdXNoaW5nIGluIFBMQVlJTkcgKi8KKyAgeworICAgIEdTVF9ERUJVRyAoInNlbmRpbmcgZmx1c2hfc3RhcnQiKTsKKyAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQgKCk7CisKKyAgICBlcmV0ID0gZ3N0X3BhZF9zZW5kX2V2ZW50IChzaW5rcGFkLCBldmVudCk7CisgICAgZmFpbF9pZiAoZXJldCA9PSBGQUxTRSk7CisgIH0KKworICAvKiB0aGlzIHNob3VsZCBub3cganVzdCByZXBvcnQgdGhlIHN0cmVhbSB0aW1lIG9mIHRoZSBsYXN0IGJ1ZmZlciAqLworICBxcmV0ID0gZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24gKHNpbmssIEdTVF9GT1JNQVRfVElNRSwgJnFjdXIpOworICBmYWlsX3VubGVzcyAocXJldCA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKHFjdXIgPT0gMiAqIEdTVF9TRUNPTkQpOworCisgIHsKKyAgICBHU1RfREVCVUcgKCJzZW5kaW5nIGZsdXNoX3N0b3AiKTsKKyAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoVFJVRSk7CisKKyAgICBlcmV0ID0gZ3N0X3BhZF9zZW5kX2V2ZW50IChzaW5rcGFkLCBldmVudCk7CisgICAgZmFpbF9pZiAoZXJldCA9PSBGQUxTRSk7CisgIH0KKworICAvKiBkbyBwb3NpdGlvbiBxdWVyeSwgdGhpcyBzaG91bGQgZmFpbCwgdGhlIHNlZ21lbnQgaXMgZmx1c2hlZCAqLworICBxcmV0ID0gZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24gKHNpbmssIEdTVF9GT1JNQVRfVElNRSwgJnFjdXIpOworICBmYWlsX3VubGVzcyAocXJldCA9PSBGQUxTRSk7CisKKyAgLyogc2VuZCBzZWdtZW50LCB0aGlzIHNob3VsZCB3b3JrICovCisgIHsKKyAgICBHc3RTZWdtZW50IHNlZ21lbnQ7CisKKyAgICBHU1RfREVCVUcgKCJzZW5kaW5nIHNlZ21lbnQiKTsKKyAgICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKKyAgICBzZWdtZW50LnN0YXJ0ID0gMiAqIEdTVF9TRUNPTkQ7CisgICAgc2VnbWVudC5zdG9wID0gNCAqIEdTVF9TRUNPTkQ7CisgICAgc2VnbWVudC50aW1lID0gMSAqIEdTVF9TRUNPTkQ7CisgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KTsKKworICAgIGVyZXQgPSBnc3RfcGFkX3NlbmRfZXZlbnQgKHNpbmtwYWQsIGV2ZW50KTsKKyAgICBmYWlsX2lmIChlcmV0ID09IEZBTFNFKTsKKyAgfQorCisgIC8qIHNlbmQgYnVmZmVyIHRoYXQgc2hvdWxkIHJldHVybiBVTkVYUEVDVEVEICovCisgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOworICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IDMgKiBHU1RfU0VDT05EOworICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpID0gMSAqIEdTVF9TRUNPTkQ7CisKKyAgR1NUX0RFQlVHICgic2VuZGluZyBidWZmZXIiKTsKKworICAvKiB0aGlzIGJ1ZmZlciBjYXVzZXMgdGhlIHNpbmsgdG8gcHJlcm9sbCAqLworICBkYXRhID0gY2hhaW5fYXN5bmMgKHNpbmtwYWQsIGJ1ZmZlcik7CisgIGZhaWxfaWYgKGRhdGEgPT0gTlVMTCk7CisKKyAgLyogd2FpdCBmb3IgcHJlcm9sbCAqLworICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLCAtMSk7CisKKyAgLyogcHJlcm9sbCBidWZmZXIgaXMgcmVuZGVyZWQsIHdlIGV4cGVjdCBubyBtb3JlIGJ1ZmZlciBhZnRlciB0aGlzIG9uZSAqLworICBmcmV0ID0gY2hhaW5fYXN5bmNfcmV0dXJuIChkYXRhKTsKKyAgZmFpbF91bmxlc3MgKGZyZXQgPT0gR1NUX0ZMT1dfVU5FWFBFQ1RFRCk7CisKKyAgLyogZG8gcG9zaXRpb24gcXVlcnksIHRoaXMgc2hvdWxkIHN1Y2NlZWQgd2l0aCB0aGUgc3RyZWFtIHRpbWUgb2YgdGhlIGJ1ZmZlcgorICAgKiBhZ2FpbnN0IHRoZSBjbG9jay4gU2luY2UgdGhlIGJ1ZmZlciBpcyBzeW5jZWQgYWdhaW5zdCB0aGUgY2xvY2ssIHRoZSB0aW1lCisgICAqIHNob3VsZCBiZSBhdCBsZWFzdCB0aGUgc3RyZWFtIHRpbWUgb2YgdGhlIGJ1ZmZlci4gKi8KKyAgcXJldCA9IGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uIChzaW5rLCBHU1RfRk9STUFUX1RJTUUsICZxY3VyKTsKKyAgZmFpbF91bmxlc3MgKHFyZXQgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChxY3VyID49IDIgKiBHU1RfU0VDT05EICYmIHFjdXIgPD0gMyAqIEdTVF9TRUNPTkQpOworCisgIC8qIHdhaXQgMiBtb3JlIHNlY29uZHMsIGVub3VnaCB0byB0ZXN0IGlmIHRoZSBwb3NpdGlvbiB3YXMgY2xpcHBlZCBjb3JyZWN0bHkKKyAgICogYWdhaW5zdCB0aGUgc2VnbWVudCAqLworICBnX3VzbGVlcCAoMiAqIEdfVVNFQ19QRVJfU0VDKTsKKworICBxcmV0ID0gZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24gKHNpbmssIEdTVF9GT1JNQVRfVElNRSwgJnFjdXIpOworICBmYWlsX3VubGVzcyAocXJldCA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKHFjdXIgPT0gMyAqIEdTVF9TRUNPTkQpOworCisgIEdTVF9ERUJVRyAoImdvaW5nIHRvIFBBVVNFRCIpOworCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpOworCisgIC8qIHdlIHJlcG9ydCB0aGUgdGltZSBvZiB0aGUgbGFzdCBzdGFydCBvZiB0aGUgYnVmZmVyLiBUaGlzIGlzIHNsaWdodGx5CisgICAqIGluY29ycmVjdCwgd2Ugc2hvdWxkIHJlcG9ydCB0aGUgZXhhY3QgdGltZSB3aGVuIHdlIHBhdXNlZCBidXQgdGhlcmUgaXMgbm8KKyAgICogcmVjb3JkIG9mIHRoYXQgYW55d2hlcmUgKi8KKyAgcXJldCA9IGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uIChzaW5rLCBHU1RfRk9STUFUX1RJTUUsICZxY3VyKTsKKyAgZmFpbF91bmxlc3MgKHFyZXQgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChxY3VyID49IDQgKiBHU1RfU0VDT05EKTsKKworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUkVBRFkpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7CisKKyAgLyogZmFpbHMgYWdhaW4gYmVjYXVzZSB3ZSBhcmUgaW4gdGhlIHdyb25nIHN0YXRlICovCisgIHFyZXQgPSBnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbiAoc2luaywgR1NUX0ZPUk1BVF9USU1FLCAmcWN1cik7CisgIGZhaWxfdW5sZXNzIChxcmV0ID09IEZBTFNFKTsKKworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7CisKKyAgcXJldCA9IGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uIChzaW5rLCBHU1RfRk9STUFUX1RJTUUsICZxY3VyKTsKKyAgZmFpbF91bmxlc3MgKHFyZXQgPT0gRkFMU0UpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogbGlrZSBmYWtlc3JjLCBidXQgYWxzbyBwdXNoZXMgYW4gT09CIGV2ZW50IGFmdGVyIGVhY2ggYnVmZmVyICovCit0eXBlZGVmIEdzdFB1c2hTcmMgT09CU291cmNlOwordHlwZWRlZiBHc3RQdXNoU3JjQ2xhc3MgT09CU291cmNlQ2xhc3M7CisKK0dUeXBlIG9vYl9zb3VyY2VfZ2V0X3R5cGUgKHZvaWQpOworR19ERUZJTkVfVFlQRSAoT09CU291cmNlLCBvb2Jfc291cmNlLCBHU1RfVFlQRV9QVVNIX1NSQyk7CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuCitvb2Jfc291cmNlX2NyZWF0ZSAoR3N0UHVzaFNyYyAqIHNyYywgR3N0QnVmZmVyICoqIHBfYnVmKQoreworICAqcF9idWYgPSBnc3RfYnVmZmVyX25ldyAoKTsKKworICBnc3RfcGFkX3B1c2hfZXZlbnQgKEdTVF9CQVNFX1NSQ19QQUQgKHNyYyksCisgICAgICBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX09PQiwgTlVMTCkpOworCisgIHJldHVybiBHU1RfRkxPV19PSzsKK30KKworc3RhdGljIHZvaWQKK29vYl9zb3VyY2VfY2xhc3NfaW5pdCAoT09CU291cmNlQ2xhc3MgKiBrbGFzcykKK3sKKyAgc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKKyAgICAgIEdTVF9QQURfU1JDLCBHU1RfUEFEX0FMV0FZUywgR1NUX1NUQVRJQ19DQVBTX0FOWSk7CisgIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7CisgIEdzdFB1c2hTcmNDbGFzcyAqcHVzaHNyY19jbGFzcyA9IEdTVF9QVVNIX1NSQ19DTEFTUyAoa2xhc3MpOworCisgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCisgICAgICBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgKCZzaW5rdGVtcGxhdGUpKTsKKworICBwdXNoc3JjX2NsYXNzLT5jcmVhdGUgPSBHU1RfREVCVUdfRlVOQ1BUUiAob29iX3NvdXJjZV9jcmVhdGUpOworfQorCitzdGF0aWMgdm9pZAorb29iX3NvdXJjZV9pbml0IChPT0JTb3VyY2UgKiBzcmMpCit7CisgIC8qIG5vdGhpbmcgdG8gZG8gKi8KK30KKworI2RlZmluZSBOT1RJRllfUkFDRV9OVU1fUElQRUxJTkVTIDEwCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIEdzdEVsZW1lbnQgKnNyYzsKKyAgR3N0RWxlbWVudCAqcXVldWU7CisgIEdzdEVsZW1lbnQgKnNpbms7CisgIEdzdEVsZW1lbnQgKnBpcGU7Cit9IE5vdGlmeVJhY2VQaXBlbGluZTsKKworc3RhdGljIHZvaWQKK3Rlc3Rfbm90aWZ5X3JhY2Vfc2V0dXBfcGlwZWxpbmUgKE5vdGlmeVJhY2VQaXBlbGluZSAqIHApCit7CisgIEdTVF9ERUJVRyAoIkNyZWF0aW5nIHBpcGVsaW5lIik7CisgIHAtPnBpcGUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKKyAgcC0+c3JjID0gZ19vYmplY3RfbmV3IChvb2Jfc291cmNlX2dldF90eXBlICgpLCBOVUxMKTsKKworICBwLT5xdWV1ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInF1ZXVlIiwgTlVMTCk7CisgIGdfb2JqZWN0X3NldCAocC0+cXVldWUsICJtYXgtc2l6ZS1idWZmZXJzIiwgMiwgTlVMTCk7CisKKyAgcC0+c2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7CisgIGdzdF9iaW5fYWRkIChHU1RfQklOIChwLT5waXBlKSwgcC0+c3JjKTsKKyAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHAtPnBpcGUpLCBwLT5xdWV1ZSk7CisgIGdzdF9iaW5fYWRkIChHU1RfQklOIChwLT5waXBlKSwgcC0+c2luayk7CisgIGdzdF9lbGVtZW50X2xpbmtfbWFueSAocC0+c3JjLCBwLT5xdWV1ZSwgcC0+c2luaywgTlVMTCk7CisKKyAgR1NUX0RFQlVHICgiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIik7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocC0+cGlwZSwgR1NUX1NUQVRFX1BMQVlJTkcpLAorICAgICAgR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyk7CisgIEdTVF9ERUJVRyAoIkdldHRpbmcgc3RhdGUiKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwLT5waXBlLCBOVUxMLCBOVUxMLCAtMSksCisgICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9ub3RpZnlfcmFjZV9jbGVhbnVwX3BpcGVsaW5lIChOb3RpZnlSYWNlUGlwZWxpbmUgKiBwKQoreworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHAtPnBpcGUsIEdTVF9TVEFURV9OVUxMKTsKKyAgZ3N0X29iamVjdF91bnJlZiAocC0+cGlwZSk7CisgIG1lbXNldCAocCwgMCwgc2l6ZW9mIChOb3RpZnlSYWNlUGlwZWxpbmUpKTsKK30KKworLyogd2UgY3JlYXRlIE4gcGlwZWxpbmVzIHRvIG1ha2Ugc3VyZSB0aGUgbm90aWZ5IHJhY2UgaXNuJ3QgcGVyLWNsYXNzLCBidXQKKyAqIG9ubHkgcGVyIGluc3RhbmNlICovCitHU1RfU1RBUlRfVEVTVCAodGVzdF9ub3RpZnlfcmFjZSkKK3sKKyAgTm90aWZ5UmFjZVBpcGVsaW5lIHBpcGVsaW5lc1tOT1RJRllfUkFDRV9OVU1fUElQRUxJTkVTXTsKKyAgaW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAocGlwZWxpbmVzKTsgKytpKSB7CisgICAgR1NUX0RFQlVHICgiU3RhcnRpbmcgdXAgcGlwZWxpbmUgJWQiLCBpKTsKKyAgICB0ZXN0X25vdGlmeV9yYWNlX3NldHVwX3BpcGVsaW5lICgmcGlwZWxpbmVzW2ldKTsKKyAgfQorCisgIGdfdXNsZWVwICgyICogR19VU0VDX1BFUl9TRUMpOworCisgIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKHBpcGVsaW5lcyk7ICsraSkgeworICAgIEdTVF9ERUJVRyAoIkNsZWFuaW5nIHVwIHBpcGVsaW5lICVkIiwgaSk7CisgICAgdGVzdF9ub3RpZnlfcmFjZV9jbGVhbnVwX3BpcGVsaW5lICgmcGlwZWxpbmVzW2ldKTsKKyAgfQorfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBTdWl0ZSAqCitmYWtlc2lua19zdWl0ZSAodm9pZCkKK3sKKyAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJmYWtlc2luayIpOworICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7CisKKyAgdGNhc2Vfc2V0X3RpbWVvdXQgKHRjX2NoYWluLCAyMCk7CisKKyAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9jbGlwcGluZyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wcmVyb2xsX3N5bmMpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZW9zKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2VvczIpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcG9zaXRpb24pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfbm90aWZ5X3JhY2UpOworCisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoZmFrZXNpbmspOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvZmFrZXNyYy5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvZmFrZXNyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZjEyOGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc3JjLmMKQEAgLTAsMCArMSwyNTYgQEAKKy8qIEdTdHJlYW1lcgorICoKKyAqIHVuaXQgdGVzdCBmb3IgZmFrZXNyYworICoKKyAqIENvcHlyaWdodCAoQykgPDIwMDU+IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KKworc3RhdGljIGdib29sZWFuIGhhdmVfZW9zID0gRkFMU0U7CisKK3N0YXRpYyBHc3RQYWQgKm15c2lua3BhZDsKKworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCisgICAgR1NUX1BBRF9TSU5LLAorICAgIEdTVF9QQURfQUxXQVlTLAorICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOworCitzdGF0aWMgZ2Jvb2xlYW4KK2V2ZW50X2Z1bmMgKEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiBldmVudCkKK3sKKyAgaWYgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX0VPUykgeworICAgIGhhdmVfZW9zID0gVFJVRTsKKyAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorCisgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBHc3RFbGVtZW50ICoKK3NldHVwX2Zha2VzcmMgKHZvaWQpCit7CisgIEdzdEVsZW1lbnQgKmZha2VzcmM7CisKKyAgR1NUX0RFQlVHICgic2V0dXBfZmFrZXNyYyIpOworICBmYWtlc3JjID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJmYWtlc3JjIik7CisgIG15c2lua3BhZCA9IGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCAoZmFrZXNyYywgJnNpbmt0ZW1wbGF0ZSwgTlVMTCk7CisgIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChteXNpbmtwYWQsIGV2ZW50X2Z1bmMpOworICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgVFJVRSk7CisgIGhhdmVfZW9zID0gRkFMU0U7CisgIHJldHVybiBmYWtlc3JjOworfQorCitzdGF0aWMgdm9pZAorY2xlYW51cF9mYWtlc3JjIChHc3RFbGVtZW50ICogZmFrZXNyYykKK3sKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIEZBTFNFKTsKKyAgZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkIChmYWtlc3JjKTsKKyAgZ3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQgKGZha2VzcmMpOworfQorCitHU1RfU1RBUlRfVEVTVCAodGVzdF9udW1fYnVmZmVycykKK3sKKyAgR3N0RWxlbWVudCAqc3JjOworCisgIHNyYyA9IHNldHVwX2Zha2VzcmMgKCk7CisgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJudW0tYnVmZmVycyIsIDMsIE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcmMsCisgICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKKyAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKKworICB3aGlsZSAoIWhhdmVfZW9zKSB7CisgICAgZ191c2xlZXAgKDEwMDApOworICB9CisKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDMpOworICBnc3RfY2hlY2tfZHJvcF9idWZmZXJzICgpOworCisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywKKyAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IHNldCB0byBudWxsIik7CisKKyAgLyogY2xlYW51cCAqLworICBjbGVhbnVwX2Zha2VzcmMgKHNyYyk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc2l6ZXR5cGVfZW1wdHkpCit7CisgIEdzdEVsZW1lbnQgKnNyYzsKKyAgR0xpc3QgKmw7CisKKyAgc3JjID0gc2V0dXBfZmFrZXNyYyAoKTsKKworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAic2l6ZXR5cGUiLCAxLCBOVUxMKTsKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3JjKSwgIm51bS1idWZmZXJzIiwgMTAwLCBOVUxMKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcmMsCisgICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKKyAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKKworICB3aGlsZSAoIWhhdmVfZW9zKSB7CisgICAgZ191c2xlZXAgKDEwMDApOworICB9CisKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEwMCk7CisgIGwgPSBidWZmZXJzOworICB3aGlsZSAobCkgeworICAgIEdzdEJ1ZmZlciAqYnVmID0gbC0+ZGF0YTsKKworICAgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChidWYpID09IDApOworICAgIGwgPSBsLT5uZXh0OworICB9CisgIGdzdF9jaGVja19kcm9wX2J1ZmZlcnMgKCk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3JjLAorICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJjb3VsZCBub3Qgc2V0IHRvIG51bGwiKTsKKworICAvKiBjbGVhbnVwICovCisgIGNsZWFudXBfZmFrZXNyYyAoc3JjKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9zaXpldHlwZV9maXhlZCkKK3sKKyAgR3N0RWxlbWVudCAqc3JjOworICBHTGlzdCAqbDsKKworICBzcmMgPSBzZXR1cF9mYWtlc3JjICgpOworCisgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJzaXpldHlwZSIsIDIsIE5VTEwpOworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAic2l6ZW1heCIsIDgxOTIsIE5VTEwpOworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAibnVtLWJ1ZmZlcnMiLCAxMDAsIE5VTEwpOworCisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywKKyAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAorICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOworCisgIHdoaWxlICghaGF2ZV9lb3MpIHsKKyAgICBnX3VzbGVlcCAoMTAwMCk7CisgIH0KKworICBmYWlsX3VubGVzcyAoZ19saXN0X2xlbmd0aCAoYnVmZmVycykgPT0gMTAwKTsKKyAgbCA9IGJ1ZmZlcnM7CisgIHdoaWxlIChsKSB7CisgICAgR3N0QnVmZmVyICpidWYgPSBsLT5kYXRhOworCisgICAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZikgPT0gODE5Mik7CisgICAgbCA9IGwtPm5leHQ7CisgIH0KKyAgZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycyAoKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcmMsCisgICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImNvdWxkIG5vdCBzZXQgdG8gbnVsbCIpOworCisgIC8qIGNsZWFudXAgKi8KKyAgY2xlYW51cF9mYWtlc3JjIChzcmMpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3NpemV0eXBlX3JhbmRvbSkKK3sKKyAgR3N0RWxlbWVudCAqc3JjOworICBHTGlzdCAqbDsKKworICBzcmMgPSBzZXR1cF9mYWtlc3JjICgpOworCisgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJzaXpldHlwZSIsIDMsIE5VTEwpOworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAic2l6ZW1pbiIsIDQwOTYsIE5VTEwpOworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAic2l6ZW1heCIsIDgxOTIsIE5VTEwpOworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAibnVtLWJ1ZmZlcnMiLCAxMDAsIE5VTEwpOworCisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywKKyAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAorICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOworCisgIHdoaWxlICghaGF2ZV9lb3MpIHsKKyAgICBnX3VzbGVlcCAoMTAwMCk7CisgIH0KKworICBmYWlsX3VubGVzcyAoZ19saXN0X2xlbmd0aCAoYnVmZmVycykgPT0gMTAwKTsKKyAgbCA9IGJ1ZmZlcnM7CisgIHdoaWxlIChsKSB7CisgICAgR3N0QnVmZmVyICpidWYgPSBsLT5kYXRhOworCisgICAgZmFpbF9pZiAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKSA+IDgxOTIpOworICAgIGZhaWxfaWYgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZikgPCA0MDk2KTsKKyAgICBsID0gbC0+bmV4dDsKKyAgfQorICBnc3RfY2hlY2tfZHJvcF9idWZmZXJzICgpOworCisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywKKyAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IHNldCB0byBudWxsIik7CisKKyAgLyogY2xlYW51cCAqLworICBjbGVhbnVwX2Zha2VzcmMgKHNyYyk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfbm9fcHJlcm9sbCkKK3sKKyAgR3N0RWxlbWVudCAqc3JjOworICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7CisKKyAgc3JjID0gc2V0dXBfZmFrZXNyYyAoKTsKKworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAiaXMtbGl2ZSIsIFRSVUUsIE5VTEwpOworCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3JjLCBHU1RfU1RBVEVfUEFVU0VEKTsKKworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCwKKyAgICAgICJlcnJvciBnb2luZyB0byBwYXVzZWQgdGhlIGZpcnN0IHRpbWUiKTsKKworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywgR1NUX1NUQVRFX1BBVVNFRCk7CisKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwsCisgICAgICAiZXJyb3IgZ29pbmcgdG8gcGF1c2VkIHRoZSBzZWNvbmQgdGltZSIpOworCisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywKKyAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IHNldCB0byBudWxsIik7CisKKyAgLyogY2xlYW51cCAqLworICBjbGVhbnVwX2Zha2VzcmMgKHNyYyk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIFN1aXRlICoKK2Zha2VzcmNfc3VpdGUgKHZvaWQpCit7CisgIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiZmFrZXNyYyIpOworICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7CisKKyAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9udW1fYnVmZmVycyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zaXpldHlwZV9lbXB0eSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zaXpldHlwZV9maXhlZCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zaXpldHlwZV9yYW5kb20pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfbm9fcHJlcm9sbCk7CisKKyAgcmV0dXJuIHM7Cit9CisKK0dTVF9DSEVDS19NQUlOIChmYWtlc3JjKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2Zkc3JjLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9mZHNyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjOTJmNmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9mZHNyYy5jCkBAIC0wLDAgKzEsMjA1IEBACisvKiBHU3RyZWFtZXIKKyAqCisgKiB1bml0IHRlc3QgZm9yIGZkc3JjCisgKgorICogQ29weXJpZ2h0IChDKSA8MjAwNT4gSmFuIFNjaG1pZHQgPHRoYXl0YW4gYXQgbWFkIGRvdCBzY2llbnRpc3QgZG90IGNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisKK3N0YXRpYyBnYm9vbGVhbiBoYXZlX2VvcyA9IEZBTFNFOworCitzdGF0aWMgR3N0UGFkICpteXNpbmtwYWQ7CisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAorICAgIEdTVF9QQURfU0lOSywKKyAgICBHU1RfUEFEX0FMV0FZUywKKyAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKKworc3RhdGljIGdib29sZWFuCitldmVudF9mdW5jIChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpCit7CisgIGlmIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9FT1MpIHsKKyAgICBoYXZlX2VvcyA9IFRSVUU7CisgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgICAgcmV0dXJuIFRSVUU7CisgIH0KKworICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKyAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgR3N0RWxlbWVudCAqCitzZXR1cF9mZHNyYyAodm9pZCkKK3sKKyAgR3N0RWxlbWVudCAqZmRzcmM7CisKKyAgR1NUX0RFQlVHICgic2V0dXBfZmRzcmMiKTsKKyAgZmRzcmMgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoImZkc3JjIik7CisgIG15c2lua3BhZCA9IGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCAoZmRzcmMsICZzaW5rdGVtcGxhdGUsIE5VTEwpOworICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAobXlzaW5rcGFkLCBldmVudF9mdW5jKTsKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIFRSVUUpOworICByZXR1cm4gZmRzcmM7Cit9CisKK3N0YXRpYyB2b2lkCitjbGVhbnVwX2Zkc3JjIChHc3RFbGVtZW50ICogZmRzcmMpCit7CisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBGQUxTRSk7CisgIGdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZCAoZmRzcmMpOworICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAoZmRzcmMpOworfQorCitHU1RfU1RBUlRfVEVTVCAodGVzdF9udW1fYnVmZmVycykKK3sKKyAgR3N0RWxlbWVudCAqc3JjOworICBnaW50IHBpcGVfZmRbMl07CisgIGdjaGFyIGRhdGFbNDA5Nl07CisKKyNpZm5kZWYgR19PU19XSU4zMgorICBmYWlsX2lmIChwaXBlIChwaXBlX2ZkKSA8IDApOworI2Vsc2UKKyAgZmFpbF9pZiAoX3BpcGUgKHBpcGVfZmQsIDIwNDgsIF9PX0JJTkFSWSkgPCAwKTsKKyNlbmRpZgorCisgIHNyYyA9IHNldHVwX2Zkc3JjICgpOworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAibnVtLWJ1ZmZlcnMiLCAzLCBOVUxMKTsKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3JjKSwgImZkIiwgcGlwZV9mZFswXSwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywKKyAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAorICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOworCisgIG1lbXNldCAoZGF0YSwgMCwgNDA5Nik7CisgIHdoaWxlICghaGF2ZV9lb3MpIHsKKyAgICBmYWlsX2lmICh3cml0ZSAocGlwZV9mZFsxXSwgZGF0YSwgNDA5NikgPCAwKTsKKyAgICBnX3VzbGVlcCAoMTAwKTsKKyAgfQorCisgIGZhaWxfdW5sZXNzIChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSA9PSAzKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3JjLAorICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJjb3VsZCBub3Qgc2V0IHRvIG51bGwiKTsKKworICAvKiBjbGVhbnVwICovCisgIGNsZWFudXBfZmRzcmMgKHNyYyk7CisgIGNsb3NlIChwaXBlX2ZkWzBdKTsKKyAgY2xvc2UgKHBpcGVfZmRbMV0pOworICBnX2xpc3RfZm9yZWFjaCAoYnVmZmVycywgKEdGdW5jKSBnc3RfbWluaV9vYmplY3RfdW5yZWYsIE5VTEwpOworICBnX2xpc3RfZnJlZSAoYnVmZmVycyk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfbm9uc2Vla2luZykKK3sKKyAgR3N0RWxlbWVudCAqc3JjOworICBHc3RRdWVyeSAqc2Vla2luZ19xdWVyeTsKKyAgZ2ludCBwaXBlX2ZkWzJdOworICBnY2hhciBkYXRhWzQwOTZdOworICBnYm9vbGVhbiBzZWVrYWJsZTsKKworI2lmbmRlZiBHX09TX1dJTjMyCisgIGZhaWxfaWYgKHBpcGUgKHBpcGVfZmQpIDwgMCk7CisjZWxzZQorICBmYWlsX2lmIChfcGlwZSAocGlwZV9mZCwgMjA0OCwgX09fQklOQVJZKSA8IDApOworI2VuZGlmCisKKyAgc3JjID0gc2V0dXBfZmRzcmMgKCk7CisgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJudW0tYnVmZmVycyIsIDMsIE5VTEwpOworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAiZmQiLCBwaXBlX2ZkWzBdLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3JjLAorICAgICAgICAgIEdTVF9TVEFURV9QQVVTRUQpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKKyAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBhdXNlZCIpOworCisgIG1lbXNldCAoZGF0YSwgMCwgNDA5Nik7CisgIGZhaWxfaWYgKHdyaXRlIChwaXBlX2ZkWzFdLCBkYXRhLCA0MDk2KSA8IDApOworCisgIC8qIFRlc3QgdGhhdCBmZHNyYyBpcyBub24tc2Vla2FibGUgd2l0aCBhIHBpcGUgKi8KKyAgZmFpbF91bmxlc3MgKChzZWVraW5nX3F1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19zZWVraW5nIChHU1RfRk9STUFUX0JZVEVTKSkKKyAgICAgICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfcXVlcnkgKHNyYywgc2Vla2luZ19xdWVyeSkgPT0gVFJVRSk7CisgIGdzdF9xdWVyeV9wYXJzZV9zZWVraW5nIChzZWVraW5nX3F1ZXJ5LCBOVUxMLCAmc2Vla2FibGUsIE5VTEwsIE5VTEwpOworICBmYWlsX3VubGVzcyAoc2Vla2FibGUgPT0gRkFMU0UpOworICBnc3RfcXVlcnlfdW5yZWYgKHNlZWtpbmdfcXVlcnkpOworCisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywKKyAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IHNldCB0byBudWxsIik7CisKKyAgLyogY2xlYW51cCAqLworICBjbGVhbnVwX2Zkc3JjIChzcmMpOworICBjbG9zZSAocGlwZV9mZFswXSk7CisgIGNsb3NlIChwaXBlX2ZkWzFdKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9zZWVraW5nKQoreworICBHc3RFbGVtZW50ICpzcmM7CisgIGdpbnQgaW5fZmQ7CisgIEdzdFF1ZXJ5ICpzZWVraW5nX3F1ZXJ5OworICBnYm9vbGVhbiBzZWVrYWJsZTsKKworI2lmbmRlZiBURVNURklMRQorI2Vycm9yIFRFU1RGSUxFIG5vdCBkZWZpbmVkCisjZW5kaWYKKyAgZmFpbF9pZiAoKGluX2ZkID0gb3BlbiAoVEVTVEZJTEUsIE9fUkRPTkxZKSkgPCAwKTsKKyAgc3JjID0gc2V0dXBfZmRzcmMgKCk7CisKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3JjKSwgImZkIiwgaW5fZmQsIE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcmMsCisgICAgICAgICAgR1NUX1NUQVRFX1BBVVNFRCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAorICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGF1c2VkIik7CisKKyAgLyogVGVzdCB0aGF0IGZkc3JjIGlzIHNlZWthYmxlIHdpdGggYSBmaWxlIGZkICovCisgIGZhaWxfdW5sZXNzICgoc2Vla2luZ19xdWVyeSA9IGdzdF9xdWVyeV9uZXdfc2Vla2luZyAoR1NUX0ZPUk1BVF9CWVRFUykpCisgICAgICAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3F1ZXJ5IChzcmMsIHNlZWtpbmdfcXVlcnkpID09IFRSVUUpOworICBnc3RfcXVlcnlfcGFyc2Vfc2Vla2luZyAoc2Vla2luZ19xdWVyeSwgTlVMTCwgJnNlZWthYmxlLCBOVUxMLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKHNlZWthYmxlID09IFRSVUUpOworICBnc3RfcXVlcnlfdW5yZWYgKHNlZWtpbmdfcXVlcnkpOworCisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywKKyAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IHNldCB0byBudWxsIik7CisKKyAgLyogY2xlYW51cCAqLworICBjbGVhbnVwX2Zkc3JjIChzcmMpOworICBjbG9zZSAoaW5fZmQpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBTdWl0ZSAqCitmZHNyY19zdWl0ZSAodm9pZCkKK3sKKyAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJmZHNyYyIpOworICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7CisKKyAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9udW1fYnVmZmVycyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9ub25zZWVraW5nKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NlZWtpbmcpOworCisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoZmRzcmMpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNpbmsuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzaW5rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmExZDNmOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzaW5rLmMKQEAgLTAsMCArMSwzMjQgQEAKKy8qIEdTdHJlYW1lciB1bml0IHRlc3QgZm9yIHRoZSBmaWxlc2luayBlbGVtZW50CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KKworI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgICAgICAgLyogZm9yIGNsb3NlKCkgKi8KKyNlbmRpZgorCisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisKK3N0YXRpYyBHc3RQYWQgKm15c3JjcGFkOworCitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCisgICAgR1NUX1BBRF9TUkMsCisgICAgR1NUX1BBRF9BTFdBWVMsCisgICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7CisKK3N0YXRpYyBHc3RFbGVtZW50ICoKK3NldHVwX2ZpbGVzaW5rICh2b2lkKQoreworICBHc3RFbGVtZW50ICpmaWxlc2luazsKKworICBHU1RfREVCVUcgKCJzZXR1cF9maWxlc2luayIpOworICBmaWxlc2luayA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgiZmlsZXNpbmsiKTsKKyAgbXlzcmNwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCAoZmlsZXNpbmssICZzcmN0ZW1wbGF0ZSwgTlVMTCk7CisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIFRSVUUpOworICByZXR1cm4gZmlsZXNpbms7Cit9CisKK3N0YXRpYyB2b2lkCitjbGVhbnVwX2ZpbGVzaW5rIChHc3RFbGVtZW50ICogZmlsZXNpbmspCit7CisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIEZBTFNFKTsKKyAgZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQgKGZpbGVzaW5rKTsKKyAgZ3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQgKGZpbGVzaW5rKTsKK30KKworI2lmIDAKKy8qIHRoaXMgcXVlcmllcyB2aWEgdGhlIGVsZW1lbnQgdmZ1bmMsIHdoaWNoIGlzIGN1cnJlbnRseSBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgQ0hFQ0tfUVVFUllfUE9TSVRJT04oZmlsZXNpbmssZm9ybWF0LHBvc2l0aW9uKSAgICAgICAgICAgICAgICAgIFwKKyAgICBHX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBnaW50NjQgcG9zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uIChmaWxlc2luaywgZm9ybWF0LCAmcG9zKSk7IFwKKyAgICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHBvcywgcG9zaXRpb24pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBHX1NUTVRfRU5ECisjZWxzZQorI2RlZmluZSBDSEVDS19RVUVSWV9QT1NJVElPTihmaWxlc2luayxmb3JtYXQscG9zaXRpb24pICAgICAgICAgICAgICAgICAgIFwKKyAgICBHX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBHc3RQYWQgKnBhZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgZ2ludDY0IHBvczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChmaWxlc2luaywgInNpbmsiKTsgICAgICAgICAgICAgICBcCisgICAgICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9xdWVyeV9wb3NpdGlvbiAocGFkLCBmb3JtYXQsICZwb3MpKTsgICAgICAgICAgXAorICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAocG9zLCBwb3NpdGlvbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBHX1NUTVRfRU5ECisjZW5kaWYKKworI2RlZmluZSBQVVNIX0JZVEVTKG51bV9ieXRlcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIEdzdEJ1ZmZlciAqYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jKG51bV9ieXRlcyk7ICAgICAgICAgICAgICAgXAorICAgICAgR1JhbmQgKnJhbmQgPSBnX3JhbmRfbmV3X3dpdGhfc2VlZCAobnVtX2J5dGVzKTsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBndWludDggKmRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGd1aW50IGk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgZGF0YSA9IGdzdF9idWZmZXJfbWFwIChidWYsIE5VTEwsIE5VTEwsIEdTVF9NQVBfV1JJVEUpOyAgICAgICAgICAgICBcCisgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2J5dGVzOyArK2kpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZGF0YVtpXSA9IChnX3JhbmRfaW50IChyYW5kKSA+PiAyNCkgJiAweGZmOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCBkYXRhLCBudW1fYnl0ZXMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBidWYpLCBHU1RfRkxPV19PSyk7IFwKKyAgICAgIGdfcmFuZF9mcmVlIChyYW5kKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gR19TVE1UX0VORAorCisvKiBUT0RPOiB3ZSBkb24ndCBjaGVjayB0aGF0IHRoZSBkYXRhIGlzIGFjdHVhbGx5IHdyaXR0ZW4gdG8gdGhlIHJpZ2h0CisgKiBwb3NpdGlvbiBhZnRlciBhIHNlZWsgKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X3NlZWtpbmcpCit7CisgIGNvbnN0IGdjaGFyICp0bXBkaXI7CisgIEdzdEVsZW1lbnQgKmZpbGVzaW5rOworICBnY2hhciAqdG1wX2ZuOworICBnaW50IGZkOworICBHc3RTZWdtZW50IHNlZ21lbnQ7CisKKyAgdG1wZGlyID0gZ19nZXRfdG1wX2RpciAoKTsKKyAgaWYgKHRtcGRpciA9PSBOVUxMKQorICAgIHJldHVybjsKKworICAvKiB0aGlzIGlzIGp1c3Qgc2lsbHksIGJ1dCBnY2Mgd2FybnMgaWYgd2UgdHJ5IHRvIHVzZSB0cG1uYW0oKSAqLworICB0bXBfZm4gPSBnX2J1aWxkX2ZpbGVuYW1lICh0bXBkaXIsICJnc3RyZWFtZXItZmlsZXNpbmstdGVzdC1YWFhYWFgiLCBOVUxMKTsKKyAgZmQgPSBnX21rc3RlbXAgKHRtcF9mbik7CisgIGlmIChmZCA8IDApIHsKKyAgICBHU1RfRVJST1IgKCJjYW4ndCBjcmVhdGUgdGVtcCBmaWxlICVzOiAlcyIsIHRtcF9mbiwgZ19zdHJlcnJvciAoZXJybm8pKTsKKyAgICBnX2ZyZWUgKHRtcF9mbik7CisgICAgcmV0dXJuOworICB9CisgIC8qIGRvbid0IHdhbnQgdGhlIGZpbGUsIGp1c3QgYSBmaWxlbmFtZSAoaGVuY2Ugc2lsbHksIHNlZSBhYm92ZSkgKi8KKyAgY2xvc2UgKGZkKTsKKyAgZ19yZW1vdmUgKHRtcF9mbik7CisKKyAgZmlsZXNpbmsgPSBzZXR1cF9maWxlc2luayAoKTsKKworICBHU1RfTE9HICgidXNpbmcgdGVtcCBmaWxlICclcyciLCB0bXBfZm4pOworICBnX29iamVjdF9zZXQgKGZpbGVzaW5rLCAibG9jYXRpb24iLCB0bXBfZm4sIE5VTEwpOworCisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZmlsZXNpbmssIEdTVF9TVEFURV9QTEFZSU5HKSwKKyAgICAgIEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpOworCisjaWYgMAorICAvKiBUZXN0IHRoYXQgZmlsZXNpbmsgaXMgc2Vla2FibGUgd2l0aCBhIGZpbGUgZmQgKi8KKyAgLyogZmlsZXNpbmsgZG9lc24ndCBpbXBsZW1lbnQgc2Vla2FibGUgcXVlcnkgYXQgdGhlIG1vbWVudCAqLworICBHc3RRdWVyeSAqc2Vla2luZ19xdWVyeTsKKyAgZ2Jvb2xlYW4gc2Vla2FibGU7CisKKyAgZmFpbF91bmxlc3MgKChzZWVraW5nX3F1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19zZWVraW5nIChHU1RfRk9STUFUX0JZVEVTKSkKKyAgICAgICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfcXVlcnkgKGZpbGVzaW5rLCBzZWVraW5nX3F1ZXJ5KSA9PSBUUlVFKTsKKyAgZ3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmcgKHNlZWtpbmdfcXVlcnksIE5VTEwsICZzZWVrYWJsZSwgTlVMTCwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChzZWVrYWJsZSA9PSBUUlVFKTsKKyAgZ3N0X3F1ZXJ5X3VucmVmIChzZWVraW5nX3F1ZXJ5KTsKKyNlbmRpZgorCisgIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKSk7CisKKyAgQ0hFQ0tfUVVFUllfUE9TSVRJT04gKGZpbGVzaW5rLCBHU1RfRk9STUFUX0JZVEVTLCAwKTsKKworICAvKiBwdXNoIGJ1ZmZlciB3aXRoIHNpemUgMCBhbmQgTlVMTCBkYXRhICovCisgIFBVU0hfQllURVMgKDApOworICBDSEVDS19RVUVSWV9QT1NJVElPTiAoZmlsZXNpbmssIEdTVF9GT1JNQVRfQllURVMsIDApOworCisgIFBVU0hfQllURVMgKDEpOworICBDSEVDS19RVUVSWV9QT1NJVElPTiAoZmlsZXNpbmssIEdTVF9GT1JNQVRfQllURVMsIDEpOworCisgIFBVU0hfQllURVMgKDk5KTsKKyAgQ0hFQ0tfUVVFUllfUE9TSVRJT04gKGZpbGVzaW5rLCBHU1RfRk9STUFUX0JZVEVTLCAxMDApOworCisgIFBVU0hfQllURVMgKDg4MDApOworICBDSEVDS19RVUVSWV9QT1NJVElPTiAoZmlsZXNpbmssIEdTVF9GT1JNQVRfQllURVMsIDg5MDApOworCisgIHNlZ21lbnQuc3RhcnQgPSA4ODAwOworICBpZiAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpKSB7CisgICAgR1NUX0xPRyAoInNlZWsgb2siKTsKKyAgICAvKiBtYWtlIHN1cmUgdGhhdCBuZXcgcG9zaXRpb24gaXMgcmVwb3J0ZWQgaW1tZWRpYXRlbHkgKi8KKyAgICBDSEVDS19RVUVSWV9QT1NJVElPTiAoZmlsZXNpbmssIEdTVF9GT1JNQVRfQllURVMsIDg4MDApOworICAgIFBVU0hfQllURVMgKDEpOworICAgIENIRUNLX1FVRVJZX1BPU0lUSU9OIChmaWxlc2luaywgR1NUX0ZPUk1BVF9CWVRFUywgODgwMSk7CisgICAgUFVTSF9CWVRFUyAoOTI1Nik7CisgICAgQ0hFQ0tfUVVFUllfUE9TSVRJT04gKGZpbGVzaW5rLCBHU1RfRk9STUFUX0JZVEVTLCAxODA1Nyk7CisgIH0gZWxzZSB7CisgICAgR1NUX0lORk8gKCJzZWVraW5nIG5vdCBzdXBwb3J0ZWQgZm9yIHRlbXBmaWxlPyEiKTsKKyAgfQorCisgIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSkpOworCisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZmlsZXNpbmssIEdTVF9TVEFURV9OVUxMKSwKKyAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7CisKKyAgLyogY2xlYW51cCAqLworICBjbGVhbnVwX2ZpbGVzaW5rIChmaWxlc2luayk7CisKKyAgLyogY2hlY2sgdGhhdCB3ZSB3cm90ZSBkYXRhIHRvIHRoZSByaWdodCBwb3NpdGlvbiBhZnRlciB0aGUgc2VlayAqLworICB7CisgICAgZ2NoYXIgKmRhdGEgPSBOVUxMOworICAgIGdzaXplIGxlbjsKKworICAgIGZhaWxfdW5sZXNzIChnX2ZpbGVfZ2V0X2NvbnRlbnRzICh0bXBfZm4sICZkYXRhLCAmbGVuLCBOVUxMKSwKKyAgICAgICAgIkZhaWxlZCB0byByZWFkIGluIG5ld2x5LWNyZWF0ZWQgZmlsZSAnJXMnIiwgdG1wX2ZuKTsKKyAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChsZW4sIDE4MDU3KTsKKyAgICB7CisgICAgICAvKiB3ZSB3cm90ZSA5MjU2IGJ5dGVzIGF0IHBvc2l0aW9uIDg4MDEgKi8KKyAgICAgIEdSYW5kICpyYW5kID0gZ19yYW5kX25ld193aXRoX3NlZWQgKDkyNTYpOworICAgICAgZ3VpbnQgaTsKKworICAgICAgZm9yIChpID0gMDsgaSA8IDkyNTY7ICsraSkgeworICAgICAgICBndWludDggYnl0ZV93cml0dGVuID0gKigoKGd1aW50OCAqKSBkYXRhKSArIDg4MDEgKyBpKTsKKworICAgICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChieXRlX3dyaXR0ZW4sIGdfcmFuZF9pbnQgKHJhbmQpID4+IDI0KTsKKyAgICAgIH0KKyAgICAgIGdfcmFuZF9mcmVlIChyYW5kKTsKKyAgICB9CisgICAgZ19mcmVlIChkYXRhKTsKKyAgfQorCisgIC8qIHJlbW92ZSBmaWxlICovCisgIGdfcmVtb3ZlICh0bXBfZm4pOworICBnX2ZyZWUgKHRtcF9mbik7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfY292ZXJhZ2UpCit7CisgIEdzdEVsZW1lbnQgKmZpbGVzaW5rOworICBnY2hhciAqbG9jYXRpb247CisgIEdzdEJ1cyAqYnVzOworICBHc3RNZXNzYWdlICptZXNzYWdlOworCisgIGZpbGVzaW5rID0gc2V0dXBfZmlsZXNpbmsgKCk7CisgIGJ1cyA9IGdzdF9idXNfbmV3ICgpOworCisgIGdzdF9lbGVtZW50X3NldF9idXMgKGZpbGVzaW5rLCBidXMpOworCisgIGdfb2JqZWN0X3NldCAoZmlsZXNpbmssICJsb2NhdGlvbiIsICIvaS9kby9ub3QvZXhpc3QiLCBOVUxMKTsKKyAgZ19vYmplY3RfZ2V0IChmaWxlc2luaywgImxvY2F0aW9uIiwgJmxvY2F0aW9uLCBOVUxMKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAobG9jYXRpb24sICIvaS9kby9ub3QvZXhpc3QiKTsKKyAgZ19mcmVlIChsb2NhdGlvbik7CisKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChmaWxlc2luaywgR1NUX1NUQVRFX1BMQVlJTkcpLAorICAgICAgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKKworICAvKiBhIHN0YXRlIGNoYW5nZSBhbmQgYW4gZXJyb3IgKi8KKyAgZmFpbF9pZiAoKG1lc3NhZ2UgPSBnc3RfYnVzX3BvcCAoYnVzKSkgPT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzX21lc3NhZ2VfZXJyb3IgKG1lc3NhZ2UsIFJFU09VUkNFLCBPUEVOX1dSSVRFKTsKKyAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOworCisgIGdfb2JqZWN0X3NldCAoZmlsZXNpbmssICJsb2NhdGlvbiIsIE5VTEwsIE5VTEwpOworICBnX29iamVjdF9nZXQgKGZpbGVzaW5rLCAibG9jYXRpb24iLCAmbG9jYXRpb24sIE5VTEwpOworICBmYWlsX2lmIChsb2NhdGlvbik7CisKKyAgLyogY2xlYW51cCAqLworICBnc3RfZWxlbWVudF9zZXRfYnVzIChmaWxlc2luaywgTlVMTCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKGJ1cykpOworICBjbGVhbnVwX2ZpbGVzaW5rIChmaWxlc2luayk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfdXJpX2ludGVyZmFjZSkKK3sKKyAgR3N0RWxlbWVudCAqZmlsZXNpbms7CisgIGdjaGFyICpsb2NhdGlvbjsKKyAgR3N0QnVzICpidXM7CisKKyAgZmlsZXNpbmsgPSBzZXR1cF9maWxlc2luayAoKTsKKyAgYnVzID0gZ3N0X2J1c19uZXcgKCk7CisKKyAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoZmlsZXNpbmssIGJ1cyk7CisKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZmlsZXNpbmspLCAibG9jYXRpb24iLCAiL2kvZG8vbm90L2V4aXN0IiwgTlVMTCk7CisgIGdfb2JqZWN0X2dldCAoR19PQkpFQ1QgKGZpbGVzaW5rKSwgImxvY2F0aW9uIiwgJmxvY2F0aW9uLCBOVUxMKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAobG9jYXRpb24sICIvaS9kby9ub3QvZXhpc3QiKTsKKyAgZ19mcmVlIChsb2NhdGlvbik7CisKKyAgbG9jYXRpb24gPSAoZ2NoYXIgKikgZ3N0X3VyaV9oYW5kbGVyX2dldF91cmkgKEdTVF9VUklfSEFORExFUiAoZmlsZXNpbmspKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAobG9jYXRpb24sICJmaWxlOi8vL2kvZG8vbm90L2V4aXN0Iik7CisKKyAgLyogc2hvdWxkIGFjY2VwdCBmaWxlOi8vL2Zvby9iYXIgVVJJcyAqLworICBmYWlsX3VubGVzcyAoZ3N0X3VyaV9oYW5kbGVyX3NldF91cmkgKEdTVF9VUklfSEFORExFUiAoZmlsZXNpbmspLAorICAgICAgICAgICJmaWxlOi8vL2Zvby9iYXIiKSk7CisgIGxvY2F0aW9uID0gKGdjaGFyICopIGdzdF91cmlfaGFuZGxlcl9nZXRfdXJpIChHU1RfVVJJX0hBTkRMRVIgKGZpbGVzaW5rKSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGxvY2F0aW9uLCAiZmlsZTovLy9mb28vYmFyIik7CisgIGdfb2JqZWN0X2dldCAoR19PQkpFQ1QgKGZpbGVzaW5rKSwgImxvY2F0aW9uIiwgJmxvY2F0aW9uLCBOVUxMKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAobG9jYXRpb24sICIvZm9vL2JhciIpOworICBnX2ZyZWUgKGxvY2F0aW9uKTsKKworICAvKiBzaG91bGQgYWNjZXB0IGZpbGU6Ly9sb2NhbGhvc3QvZm9vL2JhciBVUklzICovCisgIGZhaWxfdW5sZXNzIChnc3RfdXJpX2hhbmRsZXJfc2V0X3VyaSAoR1NUX1VSSV9IQU5ETEVSIChmaWxlc2luayksCisgICAgICAgICAgImZpbGU6Ly9sb2NhbGhvc3QvZm9vL2JheiIpKTsKKyAgbG9jYXRpb24gPSAoZ2NoYXIgKikgZ3N0X3VyaV9oYW5kbGVyX2dldF91cmkgKEdTVF9VUklfSEFORExFUiAoZmlsZXNpbmspKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAobG9jYXRpb24sICJmaWxlOi8vL2Zvby9iYXoiKTsKKyAgZ19vYmplY3RfZ2V0IChHX09CSkVDVCAoZmlsZXNpbmspLCAibG9jYXRpb24iLCAmbG9jYXRpb24sIE5VTEwpOworICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChsb2NhdGlvbiwgIi9mb28vYmF6Iik7CisgIGdfZnJlZSAobG9jYXRpb24pOworCisgIC8qIHNob3VsZCBlc2NhcGUgbm9uLXVyaSBjaGFyYWN0ZXJzIGZvciB0aGUgVVJJIGJ1dCBub3QgZm9yIHRoZSBsb2NhdGlvbiAqLworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChmaWxlc2luayksICJsb2NhdGlvbiIsICIvZm9vL2I/ciIsIE5VTEwpOworICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChmaWxlc2luayksICJsb2NhdGlvbiIsICZsb2NhdGlvbiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGxvY2F0aW9uLCAiL2Zvby9iP3IiKTsKKyAgZ19mcmVlIChsb2NhdGlvbik7CisgIGxvY2F0aW9uID0gKGdjaGFyICopIGdzdF91cmlfaGFuZGxlcl9nZXRfdXJpIChHU1RfVVJJX0hBTkRMRVIgKGZpbGVzaW5rKSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGxvY2F0aW9uLCAiZmlsZTovLy9mb28vYiUzRnIiKTsKKworICAvKiBzaG91bGQgZmFpbCB3aXRoIG90aGVyIGhvc3RuYW1lcyAqLworICBmYWlsX2lmIChnc3RfdXJpX2hhbmRsZXJfc2V0X3VyaSAoR1NUX1VSSV9IQU5ETEVSIChmaWxlc2luayksCisgICAgICAgICAgImZpbGU6Ly9ob3N0bmFtZS9mb28vZm9vIikpOworCisgIC8qIGNsZWFudXAgKi8KKyAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoZmlsZXNpbmssIE5VTEwpOworICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChidXMpKTsKKyAgY2xlYW51cF9maWxlc2luayAoZmlsZXNpbmspOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBTdWl0ZSAqCitmaWxlc2lua19zdWl0ZSAodm9pZCkKK3sKKyAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJmaWxlc2luayIpOworICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7CisKKyAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7CisKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2NvdmVyYWdlKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3VyaV9pbnRlcmZhY2UpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc2Vla2luZyk7CisKKyAgcmV0dXJuIHM7Cit9CisKK0dTVF9DSEVDS19NQUlOIChmaWxlc2luayk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc3JjLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc3JjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRkZWUxNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzcmMuYwpAQCAtMCwwICsxLDUwNiBAQAorLyogR1N0cmVhbWVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisKK3N0YXRpYyBnYm9vbGVhbiBoYXZlX2VvcyA9IEZBTFNFOworc3RhdGljIEdDb25kICplb3NfY29uZDsKK3N0YXRpYyBHTXV0ZXggKmV2ZW50X211dGV4OworCitzdGF0aWMgR3N0UGFkICpteXNpbmtwYWQ7CisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAorICAgIEdTVF9QQURfU0lOSywKKyAgICBHU1RfUEFEX0FMV0FZUywKKyAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKKworc3RhdGljIGdib29sZWFuCitldmVudF9mdW5jIChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpCit7CisgIGdib29sZWFuIHJlcyA9IFRSVUU7CisKKyAgZ19tdXRleF9sb2NrIChldmVudF9tdXRleCk7CisgIGlmIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9FT1MpIHsKKyAgICBoYXZlX2VvcyA9IFRSVUU7CisgICAgR1NUX0RFQlVHICgic2lnbmFsIEVPUyIpOworICAgIGdfY29uZF9icm9hZGNhc3QgKGVvc19jb25kKTsKKyAgfQorICBnX211dGV4X3VubG9jayAoZXZlbnRfbXV0ZXgpOworCisgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkCit3YWl0X2VvcyAodm9pZCkKK3sKKyAgZ19tdXRleF9sb2NrIChldmVudF9tdXRleCk7CisgIEdTVF9ERUJVRyAoIndhaXRpbmcgZm9yIEVPUyIpOworICB3aGlsZSAoIWhhdmVfZW9zKSB7CisgICAgZ19jb25kX3dhaXQgKGVvc19jb25kLCBldmVudF9tdXRleCk7CisgIH0KKyAgR1NUX0RFQlVHICgicmVjZWl2ZWQgRU9TIik7CisgIGdfbXV0ZXhfdW5sb2NrIChldmVudF9tdXRleCk7Cit9CisKK3N0YXRpYyBHc3RFbGVtZW50ICoKK3NldHVwX2ZpbGVzcmMgKHZvaWQpCit7CisgIEdzdEVsZW1lbnQgKmZpbGVzcmM7CisKKyAgR1NUX0RFQlVHICgic2V0dXBfZmlsZXNyYyIpOworICBmaWxlc3JjID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJmaWxlc3JjIik7CisgIG15c2lua3BhZCA9IGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCAoZmlsZXNyYywgJnNpbmt0ZW1wbGF0ZSwgTlVMTCk7CisgIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChteXNpbmtwYWQsIGV2ZW50X2Z1bmMpOworICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgVFJVRSk7CisKKyAgZW9zX2NvbmQgPSBnX2NvbmRfbmV3ICgpOworICBldmVudF9tdXRleCA9IGdfbXV0ZXhfbmV3ICgpOworCisgIHJldHVybiBmaWxlc3JjOworfQorCitzdGF0aWMgdm9pZAorY2xlYW51cF9maWxlc3JjIChHc3RFbGVtZW50ICogZmlsZXNyYykKK3sKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIEZBTFNFKTsKKyAgZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkIChmaWxlc3JjKTsKKyAgZ3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQgKGZpbGVzcmMpOworCisgIGdfY29uZF9mcmVlIChlb3NfY29uZCk7CisgIGdfbXV0ZXhfZnJlZSAoZXZlbnRfbXV0ZXgpOworfQorCitHU1RfU1RBUlRfVEVTVCAodGVzdF9zZWVraW5nKQoreworICBHc3RFbGVtZW50ICpzcmM7CisgIEdzdFF1ZXJ5ICpzZWVraW5nX3F1ZXJ5OworICBnYm9vbGVhbiBzZWVrYWJsZTsKKworI2lmbmRlZiBURVNURklMRQorI2Vycm9yIFRFU1RGSUxFIG5vdCBkZWZpbmVkCisjZW5kaWYKKyAgc3JjID0gc2V0dXBfZmlsZXNyYyAoKTsKKworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAibG9jYXRpb24iLCBURVNURklMRSwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywKKyAgICAgICAgICBHU1RfU1RBVEVfUEFVU0VEKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCisgICAgICAiY291bGQgbm90IHNldCB0byBwYXVzZWQiKTsKKworICAvKiBUZXN0IHRoYXQgZmlsZXNyYyBpcyBzZWVrYWJsZSB3aXRoIGEgZmlsZSBmZCAqLworICBmYWlsX3VubGVzcyAoKHNlZWtpbmdfcXVlcnkgPSBnc3RfcXVlcnlfbmV3X3NlZWtpbmcgKEdTVF9GT1JNQVRfQllURVMpKQorICAgICAgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9xdWVyeSAoc3JjLCBzZWVraW5nX3F1ZXJ5KSA9PSBUUlVFKTsKKyAgZ3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmcgKHNlZWtpbmdfcXVlcnksIE5VTEwsICZzZWVrYWJsZSwgTlVMTCwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChzZWVrYWJsZSA9PSBUUlVFKTsKKyAgZ3N0X3F1ZXJ5X3VucmVmIChzZWVraW5nX3F1ZXJ5KTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcmMsCisgICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImNvdWxkIG5vdCBzZXQgdG8gbnVsbCIpOworCisgIC8qIGNsZWFudXAgKi8KKyAgY2xlYW51cF9maWxlc3JjIChzcmMpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3JldmVyc2UpCit7CisgIEdzdEVsZW1lbnQgKnNyYzsKKworI2lmbmRlZiBURVNURklMRQorI2Vycm9yIFRFU1RGSUxFIG5vdCBkZWZpbmVkCisjZW5kaWYKKyAgc3JjID0gc2V0dXBfZmlsZXNyYyAoKTsKKworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAibG9jYXRpb24iLCBURVNURklMRSwgTlVMTCk7CisgIC8qIHdlJ3JlIGdvaW5nIHRvIHBlcmZvcm0gdGhlIHNlZWsgaW4gcmVhZHkgKi8KKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3JjLAorICAgICAgICAgIEdTVF9TVEFURV9SRUFEWSkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAorICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcmVhZHkiKTsKKworICAvKiByZXZlcnNlIHNlZWsgZnJvbSBlbmQgdG8gc3RhcnQgKi8KKyAgZ3N0X2VsZW1lbnRfc2VlayAoc3JjLCAtMS4wLCBHU1RfRk9STUFUX0JZVEVTLCAwLCBHU1RfU0VFS19UWVBFX1NFVCwgMTAwLAorICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIC0xKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcmMsCisgICAgICAgICAgR1NUX1NUQVRFX1BBVVNFRCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAorICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGF1c2VkIik7CisKKyAgLyogd2FpdCBmb3IgRU9TICovCisgIHdhaXRfZW9zICgpOworCisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywKKyAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IHNldCB0byBudWxsIik7CisKKyAgLyogY2xlYW51cCAqLworICBjbGVhbnVwX2ZpbGVzcmMgKHNyYyk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfcHVsbCkKK3sKKyAgR3N0RWxlbWVudCAqc3JjOworICBHc3RRdWVyeSAqc2Vla2luZ19xdWVyeTsKKyAgZ2Jvb2xlYW4gcmVzLCBzZWVrYWJsZTsKKyAgZ2ludDY0IHN0YXJ0LCBzdG9wOworICBHc3RQYWQgKnBhZDsKKyAgR3N0Rmxvd1JldHVybiByZXQ7CisgIEdzdEJ1ZmZlciAqYnVmZmVyMSwgKmJ1ZmZlcjI7CisgIGd1aW50OCAqZGF0YTEsICpkYXRhMjsKKyAgZ3NpemUgc2l6ZTEsIHNpemUyOworCisgIHNyYyA9IHNldHVwX2ZpbGVzcmMgKCk7CisKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3JjKSwgImxvY2F0aW9uIiwgVEVTVEZJTEUsIE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcmMsCisgICAgICAgICAgR1NUX1NUQVRFX1JFQURZKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCisgICAgICAiY291bGQgbm90IHNldCB0byByZWFkeSIpOworCisgIC8qIGdldCB0aGUgc291cmNlIHBhZCAqLworICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7CisgIGZhaWxfdW5sZXNzIChwYWQgIT0gTlVMTCk7CisKKyAgLyogYWN0aXZhdGUgdGhlIHBhZCBpbiBwdWxsIG1vZGUgKi8KKyAgcmVzID0gZ3N0X3BhZF9hY3RpdmF0ZV9wdWxsIChwYWQsIFRSVUUpOworICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUpOworCisgIC8qIG5vdCBzdGFydCBwbGF5aW5nICovCisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywKKyAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAorICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGF1c2VkIik7CisKKyAgLyogVGVzdCB0aGF0IGZpbGVzcmMgaXMgc2Vla2FibGUgd2l0aCBhIGZpbGUgZmQgKi8KKyAgZmFpbF91bmxlc3MgKChzZWVraW5nX3F1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19zZWVraW5nIChHU1RfRk9STUFUX0JZVEVTKSkKKyAgICAgICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfcXVlcnkgKHNyYywgc2Vla2luZ19xdWVyeSkgPT0gVFJVRSk7CisKKyAgLyogZ2V0IHRoZSBzZWVraW5nIGNhcGFiaWxpdGllcyAqLworICBnc3RfcXVlcnlfcGFyc2Vfc2Vla2luZyAoc2Vla2luZ19xdWVyeSwgTlVMTCwgJnNlZWthYmxlLCAmc3RhcnQsICZzdG9wKTsKKyAgZmFpbF91bmxlc3MgKHNlZWthYmxlID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoc3RhcnQgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzdGFydCAhPSAtMSk7CisgIGdzdF9xdWVyeV91bnJlZiAoc2Vla2luZ19xdWVyeSk7CisKKyAgLyogZG8gc29tZSBwdWxscyAqLworICByZXQgPSBnc3RfcGFkX2dldF9yYW5nZSAocGFkLCAwLCAxMDAsICZidWZmZXIxKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfRkxPV19PSyk7CisgIGZhaWxfdW5sZXNzIChidWZmZXIxICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyMSkgPT0gMTAwKTsKKworICByZXQgPSBnc3RfcGFkX2dldF9yYW5nZSAocGFkLCAwLCA1MCwgJmJ1ZmZlcjIpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9GTE9XX09LKTsKKyAgZmFpbF91bmxlc3MgKGJ1ZmZlcjIgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIyKSA9PSA1MCk7CisKKyAgLyogdGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgKi8KKyAgZGF0YTEgPSBnc3RfYnVmZmVyX21hcCAoYnVmZmVyMSwgJnNpemUxLCBOVUxMLCBHU1RfTUFQX1JFQUQpOworICBkYXRhMiA9IGdzdF9idWZmZXJfbWFwIChidWZmZXIyLCAmc2l6ZTIsIE5VTEwsIEdTVF9NQVBfUkVBRCk7CisgIGZhaWxfdW5sZXNzIChtZW1jbXAgKGRhdGExLCBkYXRhMiwgNTApID09IDApOworICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIyLCBkYXRhMiwgc2l6ZTIpOworCisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcjIpOworCisgIC8qIHJlYWQgbmV4dCA1MCBieXRlcyAqLworICByZXQgPSBnc3RfcGFkX2dldF9yYW5nZSAocGFkLCA1MCwgNTAsICZidWZmZXIyKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfRkxPV19PSyk7CisgIGZhaWxfdW5sZXNzIChidWZmZXIyICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyMikgPT0gNTApOworCisgIC8qIGNvbXBhcmUgd2l0aCBwcmV2aW91c2x5IHJlYWQgZGF0YSAqLworICBkYXRhMiA9IGdzdF9idWZmZXJfbWFwIChidWZmZXIyLCAmc2l6ZTIsIE5VTEwsIEdTVF9NQVBfUkVBRCk7CisgIGZhaWxfdW5sZXNzIChtZW1jbXAgKGRhdGExICsgNTAsIGRhdGEyLCA1MCkgPT0gMCk7CisgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlcjIsIGRhdGEyLCBzaXplMik7CisKKyAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyMSwgZGF0YTEsIHNpemUxKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyMSk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcjIpOworCisgIC8qIHJlYWQgMTAgYnl0ZXMgYXQgZW5kLTEwIHNob3VsZCBnaXZlIGV4YWN0bHkgMTAgYnl0ZXMgKi8KKyAgcmV0ID0gZ3N0X3BhZF9nZXRfcmFuZ2UgKHBhZCwgc3RvcCAtIDEwLCAxMCwgJmJ1ZmZlcjEpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9GTE9XX09LKTsKKyAgZmFpbF91bmxlc3MgKGJ1ZmZlcjEgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIxKSA9PSAxMCk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcjEpOworCisgIC8qIHJlYWQgMjAgYnl0ZXMgYXQgZW5kLTEwIHNob3VsZCBnaXZlIGV4YWN0bHkgMTAgYnl0ZXMgKi8KKyAgcmV0ID0gZ3N0X3BhZF9nZXRfcmFuZ2UgKHBhZCwgc3RvcCAtIDEwLCAyMCwgJmJ1ZmZlcjEpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9GTE9XX09LKTsKKyAgZmFpbF91bmxlc3MgKGJ1ZmZlcjEgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIxKSA9PSAxMCk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcjEpOworCisgIC8qIHJlYWQgMCBieXRlcyBhdCBlbmQtMSBzaG91bGQgcmV0dXJuIDAgYnl0ZXMgKi8KKyAgcmV0ID0gZ3N0X3BhZF9nZXRfcmFuZ2UgKHBhZCwgc3RvcCAtIDEsIDAsICZidWZmZXIxKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfRkxPV19PSyk7CisgIGZhaWxfdW5sZXNzIChidWZmZXIxICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyMSkgPT0gMCk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcjEpOworCisgIC8qIHJlYWQgMTAgYnl0ZXMgYXQgZW5kLTEgc2hvdWxkIHJldHVybiAxIGJ5dGUgKi8KKyAgcmV0ID0gZ3N0X3BhZF9nZXRfcmFuZ2UgKHBhZCwgc3RvcCAtIDEsIDEwLCAmYnVmZmVyMSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX0ZMT1dfT0spOworICBmYWlsX3VubGVzcyAoYnVmZmVyMSAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcjEpID09IDEpOworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIxKTsKKworICAvKiByZWFkIDAgYnl0ZXMgYXQgZW5kIHNob3VsZCBFT1MgKi8KKyAgcmV0ID0gZ3N0X3BhZF9nZXRfcmFuZ2UgKHBhZCwgc3RvcCwgMCwgJmJ1ZmZlcjEpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9GTE9XX1VORVhQRUNURUQpOworCisgIC8qIHJlYWQgMTAgYnl0ZXMgYmVmb3JlIGVuZCBzaG91bGQgRU9TICovCisgIHJldCA9IGdzdF9wYWRfZ2V0X3JhbmdlIChwYWQsIHN0b3AsIDEwLCAmYnVmZmVyMSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX0ZMT1dfVU5FWFBFQ1RFRCk7CisKKyAgLyogcmVhZCAwIGJ5dGVzIGFmdGVyIGVuZCBzaG91bGQgRU9TICovCisgIHJldCA9IGdzdF9wYWRfZ2V0X3JhbmdlIChwYWQsIHN0b3AgKyAxMCwgMCwgJmJ1ZmZlcjEpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9GTE9XX1VORVhQRUNURUQpOworCisgIC8qIHJlYWQgMTAgYnl0ZXMgYWZ0ZXIgZW5kIHNob3VsZCBFT1MgdG9vICovCisgIHJldCA9IGdzdF9wYWRfZ2V0X3JhbmdlIChwYWQsIHN0b3AgKyAxMCwgMTAsICZidWZmZXIxKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfRkxPV19VTkVYUEVDVEVEKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcmMsCisgICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImNvdWxkIG5vdCBzZXQgdG8gbnVsbCIpOworCisgIC8qIGNsZWFudXAgKi8KKyAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKKyAgY2xlYW51cF9maWxlc3JjIChzcmMpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2NvdmVyYWdlKQoreworICBHc3RFbGVtZW50ICpzcmM7CisgIGdjaGFyICpsb2NhdGlvbjsKKyAgR3N0QnVzICpidXM7CisgIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAgc3JjID0gc2V0dXBfZmlsZXNyYyAoKTsKKyAgYnVzID0gZ3N0X2J1c19uZXcgKCk7CisKKyAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoc3JjLCBidXMpOworCisgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJsb2NhdGlvbiIsICIvaS9kby9ub3QvZXhpc3QiLCBOVUxMKTsKKyAgZ19vYmplY3RfZ2V0IChHX09CSkVDVCAoc3JjKSwgImxvY2F0aW9uIiwgJmxvY2F0aW9uLCBOVUxMKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAobG9jYXRpb24sICIvaS9kby9ub3QvZXhpc3QiKTsKKyAgZ19mcmVlIChsb2NhdGlvbik7CisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywKKyAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFLAorICAgICAgImNvdWxkIHNldCB0byBwbGF5aW5nIHdpdGggd3JvbmcgbG9jYXRpb24iKTsKKworICAvKiBhIHN0YXRlIGNoYW5nZSBhbmQgYW4gZXJyb3IgKi8KKyAgZmFpbF9pZiAoKG1lc3NhZ2UgPSBnc3RfYnVzX3BvcCAoYnVzKSkgPT0gTlVMTCk7CisgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKKyAgZmFpbF9pZiAoKG1lc3NhZ2UgPSBnc3RfYnVzX3BvcCAoYnVzKSkgPT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzX21lc3NhZ2VfZXJyb3IgKG1lc3NhZ2UsIFJFU09VUkNFLCBOT1RfRk9VTkQpOworICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7CisKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3JjKSwgImxvY2F0aW9uIiwgTlVMTCwgTlVMTCk7CisgIGdfb2JqZWN0X2dldCAoR19PQkpFQ1QgKHNyYyksICJsb2NhdGlvbiIsICZsb2NhdGlvbiwgTlVMTCk7CisgIGZhaWxfaWYgKGxvY2F0aW9uKTsKKworICAvKiBjbGVhbnVwICovCisgIGdzdF9lbGVtZW50X3NldF9idXMgKHNyYywgTlVMTCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKGJ1cykpOworICBjbGVhbnVwX2ZpbGVzcmMgKHNyYyk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfdXJpX2ludGVyZmFjZSkKK3sKKyAgR3N0RWxlbWVudCAqc3JjOworICBnY2hhciAqbG9jYXRpb247CisgIEdzdEJ1cyAqYnVzOworCisgIHNyYyA9IHNldHVwX2ZpbGVzcmMgKCk7CisgIGJ1cyA9IGdzdF9idXNfbmV3ICgpOworCisgIGdzdF9lbGVtZW50X3NldF9idXMgKHNyYywgYnVzKTsKKworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAibG9jYXRpb24iLCAiL2kvZG8vbm90L2V4aXN0IiwgTlVMTCk7CisgIGdfb2JqZWN0X2dldCAoR19PQkpFQ1QgKHNyYyksICJsb2NhdGlvbiIsICZsb2NhdGlvbiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGxvY2F0aW9uLCAiL2kvZG8vbm90L2V4aXN0Iik7CisgIGdfZnJlZSAobG9jYXRpb24pOworCisgIGxvY2F0aW9uID0gKGdjaGFyICopIGdzdF91cmlfaGFuZGxlcl9nZXRfdXJpIChHU1RfVVJJX0hBTkRMRVIgKHNyYykpOworICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChsb2NhdGlvbiwgImZpbGU6Ly8vaS9kby9ub3QvZXhpc3QiKTsKKworICAvKiBzaG91bGQgYWNjZXB0IGZpbGU6Ly8vZm9vL2JhciBVUklzICovCisgIGZhaWxfdW5sZXNzIChnc3RfdXJpX2hhbmRsZXJfc2V0X3VyaSAoR1NUX1VSSV9IQU5ETEVSIChzcmMpLAorICAgICAgICAgICJmaWxlOi8vL2Zvby9iYXIiKSk7CisgIGxvY2F0aW9uID0gKGdjaGFyICopIGdzdF91cmlfaGFuZGxlcl9nZXRfdXJpIChHU1RfVVJJX0hBTkRMRVIgKHNyYykpOworICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChsb2NhdGlvbiwgImZpbGU6Ly8vZm9vL2JhciIpOworICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChzcmMpLCAibG9jYXRpb24iLCAmbG9jYXRpb24sIE5VTEwpOworICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChsb2NhdGlvbiwgIi9mb28vYmFyIik7CisgIGdfZnJlZSAobG9jYXRpb24pOworCisgIC8qIHNob3VsZCBhY2NlcHQgZmlsZTovL2xvY2FsaG9zdC9mb28vYmFyIFVSSXMgKi8KKyAgZmFpbF91bmxlc3MgKGdzdF91cmlfaGFuZGxlcl9zZXRfdXJpIChHU1RfVVJJX0hBTkRMRVIgKHNyYyksCisgICAgICAgICAgImZpbGU6Ly9sb2NhbGhvc3QvZm9vL2JheiIpKTsKKyAgbG9jYXRpb24gPSAoZ2NoYXIgKikgZ3N0X3VyaV9oYW5kbGVyX2dldF91cmkgKEdTVF9VUklfSEFORExFUiAoc3JjKSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGxvY2F0aW9uLCAiZmlsZTovLy9mb28vYmF6Iik7CisgIGdfb2JqZWN0X2dldCAoR19PQkpFQ1QgKHNyYyksICJsb2NhdGlvbiIsICZsb2NhdGlvbiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGxvY2F0aW9uLCAiL2Zvby9iYXoiKTsKKyAgZ19mcmVlIChsb2NhdGlvbik7CisKKyAgLyogc2hvdWxkIGVzY2FwZSBub24tdXJpIGNoYXJhY3RlcnMgZm9yIHRoZSBVUkkgYnV0IG5vdCBmb3IgdGhlIGxvY2F0aW9uICovCisgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJsb2NhdGlvbiIsICIvZm9vL2I/ciIsIE5VTEwpOworICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChzcmMpLCAibG9jYXRpb24iLCAmbG9jYXRpb24sIE5VTEwpOworICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChsb2NhdGlvbiwgIi9mb28vYj9yIik7CisgIGdfZnJlZSAobG9jYXRpb24pOworICBsb2NhdGlvbiA9IChnY2hhciAqKSBnc3RfdXJpX2hhbmRsZXJfZ2V0X3VyaSAoR1NUX1VSSV9IQU5ETEVSIChzcmMpKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAobG9jYXRpb24sICJmaWxlOi8vL2Zvby9iJTNGciIpOworCisgIC8qIHNob3VsZCBmYWlsIHdpdGggb3RoZXIgaG9zdG5hbWVzICovCisgIGZhaWxfaWYgKGdzdF91cmlfaGFuZGxlcl9zZXRfdXJpIChHU1RfVVJJX0hBTkRMRVIgKHNyYyksCisgICAgICAgICAgImZpbGU6Ly9ob3N0bmFtZS9mb28vZm9vIikpOworCisgIC8qIGNsZWFudXAgKi8KKyAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoc3JjLCBOVUxMKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAoYnVzKSk7CisgIGNsZWFudXBfZmlsZXNyYyAoc3JjKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgdm9pZAorY2hlY2tfdXJpX2Zvcl91cmkgKEdzdEVsZW1lbnQgKiBlLCBjb25zdCBnY2hhciAqIGluX3VyaSwgY29uc3QgZ2NoYXIgKiB1cmkpCit7CisgIEdzdFF1ZXJ5ICpxdWVyeTsKKyAgZ2NoYXIgKnF1ZXJ5X3VyaSA9IE5VTEw7CisKKyAgZ3N0X3VyaV9oYW5kbGVyX3NldF91cmkgKEdTVF9VUklfSEFORExFUiAoZSksIGluX3VyaSk7CisKKyAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X3VyaSAoKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3F1ZXJ5IChlLCBxdWVyeSkpOworICBnc3RfcXVlcnlfcGFyc2VfdXJpIChxdWVyeSwgJnF1ZXJ5X3VyaSk7CisgIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOworCisgIGlmICh1cmkgIT0gTlVMTCkgeworICAgIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHF1ZXJ5X3VyaSwgdXJpKTsKKyAgfSBlbHNlIHsKKyAgICBnY2hhciAqZm47CisKKyAgICBmYWlsX3VubGVzcyAoZ3N0X3VyaV9pc192YWxpZCAocXVlcnlfdXJpKSk7CisgICAgZm4gPSBnX2ZpbGVuYW1lX2Zyb21fdXJpIChxdWVyeV91cmksIE5VTEwsIE5VTEwpOworICAgIGZhaWxfdW5sZXNzIChnX3BhdGhfaXNfYWJzb2x1dGUgKGZuKSk7CisgICAgZmFpbF91bmxlc3MgKGZuICE9IE5VTEwpOworICAgIGdfZnJlZSAoZm4pOworICB9CisKKyAgZ19mcmVlIChxdWVyeV91cmkpOworfQorCitzdGF0aWMgdm9pZAorY2hlY2tfdXJpX2Zvcl9sb2NhdGlvbiAoR3N0RWxlbWVudCAqIGUsIGNvbnN0IGdjaGFyICogbG9jYXRpb24sCisgICAgY29uc3QgZ2NoYXIgKiB1cmkpCit7CisgIEdzdFF1ZXJ5ICpxdWVyeTsKKyAgZ2NoYXIgKnF1ZXJ5X3VyaSA9IE5VTEw7CisKKyAgZ19vYmplY3Rfc2V0IChlLCAibG9jYXRpb24iLCBsb2NhdGlvbiwgTlVMTCk7CisgIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld191cmkgKCk7CisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9xdWVyeSAoZSwgcXVlcnkpKTsKKyAgZ3N0X3F1ZXJ5X3BhcnNlX3VyaSAocXVlcnksICZxdWVyeV91cmkpOworICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKKworICBpZiAodXJpICE9IE5VTEwpIHsKKyAgICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChxdWVyeV91cmksIHVyaSk7CisgIH0gZWxzZSB7CisgICAgZ2NoYXIgKmZuOworCisgICAgZmFpbF91bmxlc3MgKGdzdF91cmlfaXNfdmFsaWQgKHF1ZXJ5X3VyaSkpOworICAgIGZuID0gZ19maWxlbmFtZV9mcm9tX3VyaSAocXVlcnlfdXJpLCBOVUxMLCBOVUxMKTsKKyAgICBmYWlsX3VubGVzcyAoZ19wYXRoX2lzX2Fic29sdXRlIChmbikpOworICAgIGZhaWxfdW5sZXNzIChmbiAhPSBOVUxMKTsKKyAgICBnX2ZyZWUgKGZuKTsKKyAgfQorCisgIGdfZnJlZSAocXVlcnlfdXJpKTsKK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfdXJpX3F1ZXJ5KQoreworICBHc3RFbGVtZW50ICpzcmM7CisKKyAgc3JjID0gc2V0dXBfZmlsZXNyYyAoKTsKKworI2lmZGVmIEdfT1NfVU5JWAorICB7CisgICAgR1NUX0lORk8gKCIqbml4Iik7CisgICAgY2hlY2tfdXJpX2Zvcl9sb2NhdGlvbiAoc3JjLCAiL2kvZG8vbm90L2V4aXN0IiwgImZpbGU6Ly8vaS9kby9ub3QvZXhpc3QiKTsKKyAgICBjaGVja191cmlfZm9yX2xvY2F0aW9uIChzcmMsICIvaS9kby9ub3QvLi4vZXhpc3QiLCAiZmlsZTovLy9pL2RvL2V4aXN0Iik7CisgICAgY2hlY2tfdXJpX2Zvcl9sb2NhdGlvbiAoc3JjLCAiL2kvZG8vbm90Ly4uLy4vZXhpc3QiLCAiZmlsZTovLy9pL2RvL2V4aXN0Iik7CisgICAgY2hlY2tfdXJpX2Zvcl9sb2NhdGlvbiAoc3JjLCAiL2kvLi9kby9ub3QvLi4vZXhpc3QiLCAiZmlsZTovLy9pL2RvL2V4aXN0Iik7CisgICAgY2hlY2tfdXJpX2Zvcl9sb2NhdGlvbiAoc3JjLCAiL2kvZG8vLi9ub3QvLi4vZXhpc3QiLCAiZmlsZTovLy9pL2RvL2V4aXN0Iik7CisgICAgY2hlY2tfdXJpX2Zvcl9sb2NhdGlvbiAoc3JjLCAiL2kvZG8vbm90Ly4vLi4vZXhpc3QiLCAiZmlsZTovLy9pL2RvL2V4aXN0Iik7CisgICAgY2hlY2tfdXJpX2Zvcl9sb2NhdGlvbiAoc3JjLCAiL2kvLi9kby8uLy4vLi8uLy4vZXhpc3QiLAorICAgICAgICAiZmlsZTovLy9pL2RvL2V4aXN0Iik7CisgICAgY2hlY2tfdXJpX2Zvcl9sb2NhdGlvbiAoc3JjLCAiL2kvZG8vbm90Ly4uLy4uL2V4aXN0IiwgImZpbGU6Ly8vaS9leGlzdCIpOworICAgIGNoZWNrX3VyaV9mb3JfbG9jYXRpb24gKHNyYywgIi9pLy4uL25vdC8uLi9leGlzdCIsICJmaWxlOi8vL2V4aXN0Iik7CisgICAgLyogaGFyZCB0byB0ZXN0IHJlbGF0aXZlIFVSSXMsIGp1c3QgbWFrZSBzdXJlIGl0IHJldHVybnMgYW4gVVJJIG9mIHNvcnRzICovCisgICAgY2hlY2tfdXJpX2Zvcl9sb2NhdGlvbiAoc3JjLCAiZm9vIiwgTlVMTCk7CisgICAgY2hlY2tfdXJpX2Zvcl9sb2NhdGlvbiAoc3JjLCAiZm9vLy4uL2JhciIsIE5VTEwpOworICAgIGNoZWNrX3VyaV9mb3JfbG9jYXRpb24gKHNyYywgIi4vZm9vIiwgTlVMTCk7CisgICAgY2hlY2tfdXJpX2Zvcl9sb2NhdGlvbiAoc3JjLCAiLi4vZm9vIiwgTlVMTCk7CisgICAgY2hlY2tfdXJpX2Zvcl9sb2NhdGlvbiAoc3JjLCAiZm9vLy4vYmFyIiwgTlVMTCk7CisgICAgLyogbWFrZSBzdXJlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkIHByb3Blcmx5IChVKzAwRjYgaGVyZSkgKi8KKyAgICBjaGVja191cmlfZm9yX2xvY2F0aW9uIChzcmMsICIvaS8uL2RcMzAzXDI2Ni9ub3QvLi4vZXhpc3QiLAorICAgICAgICAiZmlsZTovLy9pL2QlQzMlQjYvZXhpc3QiKTsKKyAgICAvKiBsZXQncyBzZWUgd2hhdCBoYXBwZW5zIGlmIHdlIHNldCBhIG1hbGZvcm1lZCBVUkkgd2l0aCBJU08tODg1OS0xIGNoYXJzLAorICAgICAqIGkuZS4gb25lIHRoYXQgdGhlIGlucHV0IGNoYXJhY3RlcnMgaGF2ZW4ndCBiZWVuIGVzY2FwZWQgcHJvcGVybHkuIFdlCisgICAgICogc2hvdWxkIGdldCBiYWNrIGEgcHJvcGVybHkgZXNjYXBlZCBVUkkgKi8KKyAgICBjaGVja191cmlfZm9yX3VyaSAoc3JjLCAiZmlsZTovLy9NXDM2NnRcMzY2ciIsICJmaWxlOi8vL00lRjZ0JUY2ciIpOworICB9CisjZW5kaWYKKworICBjbGVhbnVwX2ZpbGVzcmMgKHNyYyk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIFN1aXRlICoKK2ZpbGVzcmNfc3VpdGUgKHZvaWQpCit7CisgIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiZmlsZXNyYyIpOworICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7CisKKyAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zZWVraW5nKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JldmVyc2UpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcHVsbCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9jb3ZlcmFnZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF91cmlfaW50ZXJmYWNlKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3VyaV9xdWVyeSk7CisKKyAgcmV0dXJuIHM7Cit9CisKK0dTVF9DSEVDS19NQUlOIChmaWxlc3JjKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2Z1bm5lbC5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvZnVubmVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcwM2RkMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2Z1bm5lbC5jCkBAIC0wLDAgKzEsMTcxIEBACisvKiBHU3RyZWFtZXIgdW5pdCB0ZXN0cyBmb3IgdGhlIGZ1bm5lbAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIE5va2lhCisgKiBAYXV0aG9yOiBPbGl2aWVyIENyZXRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgVVNBCisqLworCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KKworc3RydWN0IFRlc3REYXRhCit7CisgIEdzdEVsZW1lbnQgKmZ1bm5lbDsKKyAgR3N0UGFkICpmdW5uZWxzcmMsICpmdW5uZWxzaW5rMTEsICpmdW5uZWxzaW5rMjI7CisgIEdzdFBhZCAqbXlzaW5rLCAqbXlzcmMxLCAqbXlzcmMyOworICBHc3RDYXBzICpteWNhcHM7Cit9OworCitzdGF0aWMgdm9pZAorc2V0dXBfdGVzdF9vYmplY3RzIChzdHJ1Y3QgVGVzdERhdGEgKnRkLCBHc3RQYWRDaGFpbkZ1bmN0aW9uIGNoYWluX2Z1bmMpCit7CisgIHRkLT5teWNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidGVzdC90ZXN0IiwgTlVMTCk7CisKKyAgdGQtPmZ1bm5lbCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZ1bm5lbCIsIE5VTEwpOworCisgIHRkLT5mdW5uZWxzcmMgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAodGQtPmZ1bm5lbCwgInNyYyIpOworICBmYWlsX3VubGVzcyAodGQtPmZ1bm5lbHNyYyAhPSBOVUxMKTsKKworICB0ZC0+ZnVubmVsc2luazExID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkICh0ZC0+ZnVubmVsLCAic2luazExIik7CisgIGZhaWxfdW5sZXNzICh0ZC0+ZnVubmVsc2luazExICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoIXN0cmNtcCAoR1NUX09CSkVDVF9OQU1FICh0ZC0+ZnVubmVsc2luazExKSwgInNpbmsxMSIpKTsKKworICB0ZC0+ZnVubmVsc2luazIyID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkICh0ZC0+ZnVubmVsLCAic2luazIyIik7CisgIGZhaWxfdW5sZXNzICh0ZC0+ZnVubmVsc2luazIyICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoIXN0cmNtcCAoR1NUX09CSkVDVF9OQU1FICh0ZC0+ZnVubmVsc2luazIyKSwgInNpbmsyMiIpKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlICh0ZC0+ZnVubmVsLCBHU1RfU1RBVEVfUExBWUlORykgPT0KKyAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7CisKKyAgdGQtPm15c2luayA9IGdzdF9wYWRfbmV3ICgic2luayIsIEdTVF9QQURfU0lOSyk7CisgIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uICh0ZC0+bXlzaW5rLCBjaGFpbl9mdW5jKTsKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlICh0ZC0+bXlzaW5rLCBUUlVFKTsKKyAgZ3N0X3BhZF9zZXRfY2FwcyAodGQtPm15c2luaywgdGQtPm15Y2Fwcyk7CisKKyAgdGQtPm15c3JjMSA9IGdzdF9wYWRfbmV3ICgic3JjMSIsIEdTVF9QQURfU1JDKTsKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlICh0ZC0+bXlzcmMxLCBUUlVFKTsKKyAgZ3N0X3BhZF9zZXRfY2FwcyAodGQtPm15c3JjMSwgdGQtPm15Y2Fwcyk7CisKKyAgdGQtPm15c3JjMiA9IGdzdF9wYWRfbmV3ICgic3JjMiIsIEdTVF9QQURfU1JDKTsKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlICh0ZC0+bXlzcmMyLCBUUlVFKTsKKyAgZ3N0X3BhZF9zZXRfY2FwcyAodGQtPm15c3JjMiwgdGQtPm15Y2Fwcyk7CisKKyAgZmFpbF91bmxlc3MgKEdTVF9QQURfTElOS19TVUNDRVNTRlVMIChnc3RfcGFkX2xpbmsgKHRkLT5mdW5uZWxzcmMsCisgICAgICAgICAgICAgIHRkLT5teXNpbmspKSk7CisKKyAgZmFpbF91bmxlc3MgKEdTVF9QQURfTElOS19TVUNDRVNTRlVMIChnc3RfcGFkX2xpbmsgKHRkLT5teXNyYzEsCisgICAgICAgICAgICAgIHRkLT5mdW5uZWxzaW5rMTEpKSk7CisKKyAgZmFpbF91bmxlc3MgKEdTVF9QQURfTElOS19TVUNDRVNTRlVMIChnc3RfcGFkX2xpbmsgKHRkLT5teXNyYzIsCisgICAgICAgICAgICAgIHRkLT5mdW5uZWxzaW5rMjIpKSk7CisKK30KKworc3RhdGljIHZvaWQKK3JlbGVhc2VfdGVzdF9vYmplY3RzIChzdHJ1Y3QgVGVzdERhdGEgKnRkKQoreworICBnc3RfcGFkX3NldF9hY3RpdmUgKHRkLT5teXNpbmssIEZBTFNFKTsKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlICh0ZC0+bXlzcmMxLCBGQUxTRSk7CisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAodGQtPm15c3JjMSwgRkFMU0UpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHRkLT5teXNpbmspOworICBnc3Rfb2JqZWN0X3VucmVmICh0ZC0+bXlzcmMxKTsKKyAgZ3N0X29iamVjdF91bnJlZiAodGQtPm15c3JjMik7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAodGQtPmZ1bm5lbCwgR1NUX1NUQVRFX05VTEwpID09CisgICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHRkLT5mdW5uZWxzcmMpOworICBnc3Rfb2JqZWN0X3VucmVmICh0ZC0+ZnVubmVsc2luazExKTsKKyAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAodGQtPmZ1bm5lbCwgdGQtPmZ1bm5lbHNpbmsxMSk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHRkLT5mdW5uZWxzaW5rMjIpOworICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkICh0ZC0+ZnVubmVsLCB0ZC0+ZnVubmVsc2luazIyKTsKKworICBnc3RfY2Fwc191bnJlZiAodGQtPm15Y2Fwcyk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHRkLT5mdW5uZWwpOworfQorCitzdGF0aWMgZ2ludCBidWZjb3VudCA9IDA7CitzdGF0aWMgZ2ludCBhbGxvY2NvdW50ID0gMDsKKworc3RhdGljIEdzdEZsb3dSZXR1cm4KK2NoYWluX29rIChHc3RQYWQgKiBwYWQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKK3sKKyAgYnVmY291bnQrKzsKKworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworCisgIHJldHVybiBHU1RfRkxPV19PSzsKK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfZnVubmVsX3NpbXBsZSkKK3sKKyAgc3RydWN0IFRlc3REYXRhIHRkOworI2lmIDAKKyAgR3N0QnVmZmVyICpidWYxID0gTlVMTDsKKyAgR3N0QnVmZmVyICpidWYyID0gTlVMTDsKKyNlbmRpZgorCisgIHNldHVwX3Rlc3Rfb2JqZWN0cyAoJnRkLCBjaGFpbl9vayk7CisKKyAgYnVmY291bnQgPSAwOworICBhbGxvY2NvdW50ID0gMDsKKworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoICh0ZC5teXNyYzEsIGdzdF9idWZmZXJfbmV3ICgpKSA9PSBHU1RfRkxPV19PSyk7CisgIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKHRkLm15c3JjMiwgZ3N0X2J1ZmZlcl9uZXcgKCkpID09IEdTVF9GTE9XX09LKTsKKworICBmYWlsX3VubGVzcyAoYnVmY291bnQgPT0gMik7CisKKyNpZiAwCisgIGZhaWxfdW5sZXNzIChnc3RfcGFkX2FsbG9jX2J1ZmZlciAodGQubXlzcmMxLCAwLCAxMDI0LCB0ZC5teWNhcHMsCisgICAgICAgICAgJmJ1ZjEpID09IEdTVF9GTE9XX09LKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wYWRfYWxsb2NfYnVmZmVyICh0ZC5teXNyYzIsIDEwMjQsIDEwMjQsIHRkLm15Y2FwcywKKyAgICAgICAgICAmYnVmMikgPT0gR1NUX0ZMT1dfT0spOworCisgIGZhaWxfdW5sZXNzIChhbGxvY2NvdW50ID09IDIpOworCisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZjEpOworICBnc3RfYnVmZmVyX3VucmVmIChidWYyKTsKKyNlbmRpZgorCisgIHJlbGVhc2VfdGVzdF9vYmplY3RzICgmdGQpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBTdWl0ZSAqCitmdW5uZWxfc3VpdGUgKHZvaWQpCit7CisgIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiZnVubmVsIik7CisgIFRDYXNlICp0Y19jaGFpbjsKKyAgR0xvZ0xldmVsRmxhZ3MgZmF0YWxfbWFzazsKKworICBmYXRhbF9tYXNrID0gZ19sb2dfc2V0X2Fsd2F5c19mYXRhbCAoR19MT0dfRkFUQUxfTUFTSyk7CisgIGZhdGFsX21hc2sgfD0gR19MT0dfTEVWRUxfV0FSTklORyB8IEdfTE9HX0xFVkVMX0NSSVRJQ0FMOworICBnX2xvZ19zZXRfYWx3YXlzX2ZhdGFsIChmYXRhbF9tYXNrKTsKKworICB0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImZ1bm5lbCBzaW1wbGUiKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Z1bm5lbF9zaW1wbGUpOworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKKworICByZXR1cm4gczsKK30KKworR1NUX0NIRUNLX01BSU4gKGZ1bm5lbCk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9pZGVudGl0eS5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvaWRlbnRpdHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmY0MjhjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvaWRlbnRpdHkuYwpAQCAtMCwwICsxLDEzMSBAQAorLyogR1N0cmVhbWVyCisgKgorICogdW5pdCB0ZXN0IGZvciBpZGVudGl0eQorICoKKyAqIENvcHlyaWdodCAoQykgPDIwMDU+IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KKworc3RhdGljIGdib29sZWFuIGhhdmVfZW9zID0gRkFMU0U7CisKKy8qIEZvciBlYXNlIG9mIHByb2dyYW1taW5nIHdlIHVzZSBnbG9iYWxzIHRvIGtlZXAgcmVmcyBmb3Igb3VyIGZsb2F0aW5nCisgKiBzcmMgYW5kIHNpbmsgcGFkcyB3ZSBjcmVhdGU7IG90aGVyd2lzZSB3ZSBhbHdheXMgaGF2ZSB0byBkbyBnZXRfcGFkLAorICogZ2V0X3BlZXIsIGFuZCB0aGVuIHJlbW92ZSByZWZlcmVuY2VzIGluIGV2ZXJ5IHRlc3QgZnVuY3Rpb24gKi8KK3N0YXRpYyBHc3RQYWQgKm15c3JjcGFkLCAqbXlzaW5rcGFkOworCisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAorICAgIEdTVF9QQURfU0lOSywKKyAgICBHU1RfUEFEX0FMV0FZUywKKyAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKKyAgICBHU1RfUEFEX1NSQywKKyAgICBHU1RfUEFEX0FMV0FZUywKKyAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKKworc3RhdGljIGdib29sZWFuCitldmVudF9mdW5jIChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpCit7CisgIGlmIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9FT1MpIHsKKyAgICBoYXZlX2VvcyA9IFRSVUU7CisgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgICAgcmV0dXJuIFRSVUU7CisgIH0KKworICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKyAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgR3N0RWxlbWVudCAqCitzZXR1cF9pZGVudGl0eSAodm9pZCkKK3sKKyAgR3N0RWxlbWVudCAqaWRlbnRpdHk7CisKKyAgR1NUX0RFQlVHICgic2V0dXBfaWRlbnRpdHkiKTsKKworICBpZGVudGl0eSA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgiaWRlbnRpdHkiKTsKKyAgbXlzcmNwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCAoaWRlbnRpdHksICZzcmN0ZW1wbGF0ZSwgTlVMTCk7CisgIG15c2lua3BhZCA9IGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCAoaWRlbnRpdHksICZzaW5rdGVtcGxhdGUsIE5VTEwpOworICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAobXlzaW5rcGFkLCBldmVudF9mdW5jKTsKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNyY3BhZCwgVFJVRSk7CisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBUUlVFKTsKKworICByZXR1cm4gaWRlbnRpdHk7Cit9CisKK3N0YXRpYyB2b2lkCitjbGVhbnVwX2lkZW50aXR5IChHc3RFbGVtZW50ICogaWRlbnRpdHkpCit7CisgIEdTVF9ERUJVRyAoImNsZWFudXBfaWRlbnRpdHkiKTsKKworICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBGQUxTRSk7CisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBGQUxTRSk7CisgIGdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkIChpZGVudGl0eSk7CisgIGdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZCAoaWRlbnRpdHkpOworICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAoaWRlbnRpdHkpOworfQorCitHU1RfU1RBUlRfVEVTVCAodGVzdF9vbmVfYnVmZmVyKQoreworICBHc3RFbGVtZW50ICppZGVudGl0eTsKKyAgR3N0QnVmZmVyICpidWZmZXI7CisgIGdwb2ludGVyIGRhdGE7CisKKyAgaWRlbnRpdHkgPSBzZXR1cF9pZGVudGl0eSAoKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoaWRlbnRpdHksCisgICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKKyAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKKworICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOworICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWZmZXIsICJidWZmZXIiLCAxKTsKKworICBkYXRhID0gZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgTlVMTCwgTlVMTCwgR1NUX01BUF9XUklURSk7CisgIG1lbWNweSAoZGF0YSwgImRhdGEiLCA0KTsKKyAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCBkYXRhLCA0KTsKKworICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgYnVmZmVyKSA9PSBHU1RfRkxPV19PSywKKyAgICAgICJGYWlsZWQgcHVzaGluZyBidWZmZXIgdG8gaWRlbnRpdHkiKTsKKworICAvKiAuLi4gYnV0IGl0IHNob3VsZCBlbmQgdXAgYmVpbmcgY29sbGVjdGVkIG9uIHRoZSBnbG9iYWwgYnVmZmVyIGxpc3QgKi8KKyAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpID09IDEpOworICBmYWlsX3VubGVzcyAoKEdzdEJ1ZmZlciAqKSAoZ19saXN0X2ZpcnN0IChidWZmZXJzKS0+ZGF0YSkgPT0gYnVmZmVyKTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmZmVyLCAiYnVmZmVyIiwgMSk7CisKKyAgLyogY2xlYW51cCAqLworICBjbGVhbnVwX2lkZW50aXR5IChpZGVudGl0eSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIFN1aXRlICoKK2lkZW50aXR5X3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoImlkZW50aXR5Iik7CisgIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKKworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X29uZV9idWZmZXIpOworCisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoaWRlbnRpdHkpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlxdWV1ZS5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlxdWV1ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0YTMzODAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9tdWx0aXF1ZXVlLmMKQEAgLTAsMCArMSw3MjcgQEAKKy8qIEdTdHJlYW1lciB1bml0IHRlc3RzIGZvciBtdWx0aXF1ZXVlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisKK3N0YXRpYyBHU3RhdGljTXV0ZXggX2NoZWNrX2xvY2sgPSBHX1NUQVRJQ19NVVRFWF9JTklUOworCitzdGF0aWMgR3N0RWxlbWVudCAqCitzZXR1cF9tdWx0aXF1ZXVlIChHc3RFbGVtZW50ICogcGlwZSwgR3N0RWxlbWVudCAqIGlucHV0c1tdLAorICAgIEdzdEVsZW1lbnQgKiBvdXRwdXRzW10sIGd1aW50IG51bSkKK3sKKyAgR3N0RWxlbWVudCAqbXE7CisgIGd1aW50IGk7CisKKyAgbXEgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJtdWx0aXF1ZXVlIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChtcSAhPSBOVUxMLCAiZmFpbGVkIHRvIGNyZWF0ZSAnbXVsdGlxdWV1ZScgZWxlbWVudCIpOworCisgIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlKSwgbXEpOworCisgIGZvciAoaSA9IDA7IGkgPCBudW07ICsraSkgeworICAgIEdzdFBhZCAqc2lua3BhZCA9IE5VTEw7CisgICAgR3N0UGFkICpzcmNwYWQgPSBOVUxMOworCisgICAgLyogY3JlYXRlIG11bHRpcXVldWUgc2luayAoYW5kIHNvdXJjZSkgcGFkICovCisgICAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAobXEsICJzaW5rJWQiKTsKKyAgICBmYWlsX3VubGVzcyAoc2lua3BhZCAhPSBOVUxMLAorICAgICAgICAiZmFpbGVkIHRvIGNyZWF0ZSBtdWx0aXF1ZXVlIHJlcXVlc3QgcGFkICMldSIsIGkpOworCisgICAgLyogbGluayBpbnB1dCBlbGVtZW50IE4gdG8gdGhlIE4tdGggbXVsdGlxdWV1ZSBzaW5rIHBhZCB3ZSBqdXN0IGNyZWF0ZWQgKi8KKyAgICBpZiAoaW5wdXRzICE9IE5VTEwgJiYgaW5wdXRzW2ldICE9IE5VTEwpIHsKKyAgICAgIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlKSwgaW5wdXRzW2ldKTsKKworICAgICAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGlucHV0c1tpXSwgInNyYyIpOworICAgICAgZmFpbF91bmxlc3MgKHNyY3BhZCAhPSBOVUxMLCAiZmFpbGVkIHRvIGZpbmQgc3JjIHBhZCBmb3IgaW5wdXQgIyV1IiwgaSk7CisKKyAgICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9QQURfTElOS19PSywgZ3N0X3BhZF9saW5rIChzcmNwYWQsIHNpbmtwYWQpKTsKKworICAgICAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKKyAgICAgIHNyY3BhZCA9IE5VTEw7CisgICAgfQorICAgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOworICAgIHNpbmtwYWQgPSBOVUxMOworCisgICAgLyogbGluayBvdXRwdXQgZWxlbWVudCBOIHRvIHRoZSBOLXRoIG11bHRpcXVldWUgc3JjIHBhZCAqLworICAgIGlmIChvdXRwdXRzICE9IE5VTEwgJiYgb3V0cHV0c1tpXSAhPSBOVUxMKSB7CisgICAgICBnY2hhciBwYWRuYW1lWzEwXTsKKworICAgICAgLyogb25seSB0aGUgc2luayBwYWRzIGFyZSBieSByZXF1ZXN0LCB0aGUgc291cmNlIHBhZHMgYXJlIHNvbWV0aW1lcyBwYWRzLAorICAgICAgICogc28gdGhpcyBzaG91bGQgcmV0dXJuIE5VTEwgKi8KKyAgICAgIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAobXEsICJzcmMlZCIpOworICAgICAgZmFpbF91bmxlc3MgKHNyY3BhZCA9PSBOVUxMKTsKKworICAgICAgZ19zbnByaW50ZiAocGFkbmFtZSwgc2l6ZW9mIChwYWRuYW1lKSwgInNyYyVkIiwgaSk7CisgICAgICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAobXEsIHBhZG5hbWUpOworICAgICAgZmFpbF91bmxlc3MgKHNyY3BhZCAhPSBOVUxMLCAiZmFpbGVkIHRvIGdldCBtdWx0aXF1ZXVlIHNyYyBwYWQgIyV1IiwgaSk7CisgICAgICBmYWlsX3VubGVzcyAoR1NUX1BBRF9JU19TUkMgKHNyY3BhZCksCisgICAgICAgICAgIiVzOiVzIGlzIG5vdCBhIHNvdXJjZSBwYWQ/ISIsIEdTVF9ERUJVR19QQURfTkFNRSAoc3JjcGFkKSk7CisKKyAgICAgIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlKSwgb3V0cHV0c1tpXSk7CisKKyAgICAgIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAob3V0cHV0c1tpXSwgInNpbmsiKTsKKyAgICAgIGZhaWxfdW5sZXNzIChzaW5rcGFkICE9IE5VTEwsICJmYWlsZWQgdG8gZmluZCBzaW5rIHBhZCBvZiBvdXRwdXQgIyV1IiwgaSk7CisgICAgICBmYWlsX3VubGVzcyAoR1NUX1BBRF9JU19TSU5LIChzaW5rcGFkKSk7CisKKyAgICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9QQURfTElOS19PSywgZ3N0X3BhZF9saW5rIChzcmNwYWQsIHNpbmtwYWQpKTsKKworICAgICAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKKyAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOworICAgIH0KKyAgfQorCisgIHJldHVybiBtcTsKK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc2ltcGxlX3BpcGVsaW5lKQoreworICBHc3RFbGVtZW50ICpwaXBlOworICBHc3RFbGVtZW50ICppbnB1dHNbMV07CisgIEdzdEVsZW1lbnQgKm91dHB1dHNbMV07CisgIEdzdE1lc3NhZ2UgKm1zZzsKKworICBwaXBlID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7CisKKyAgaW5wdXRzWzBdID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOworICBmYWlsX3VubGVzcyAoaW5wdXRzWzBdICE9IE5VTEwsICJmYWlsZWQgdG8gY3JlYXRlICdmYWtlc3JjJyBlbGVtZW50Iik7CisgIGdfb2JqZWN0X3NldCAoaW5wdXRzWzBdLCAibnVtLWJ1ZmZlcnMiLCAyNTYsIE5VTEwpOworCisgIG91dHB1dHNbMF0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOworICBmYWlsX3VubGVzcyAob3V0cHV0c1swXSAhPSBOVUxMLCAiZmFpbGVkIHRvIGNyZWF0ZSAnZmFrZXNpbmsnIGVsZW1lbnQiKTsKKworICBzZXR1cF9tdWx0aXF1ZXVlIChwaXBlLCBpbnB1dHMsIG91dHB1dHMsIDEpOworCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX1BMQVlJTkcpOworCisgIG1zZyA9IGdzdF9idXNfcG9sbCAoR1NUX0VMRU1FTlRfQlVTIChwaXBlKSwKKyAgICAgIEdTVF9NRVNTQUdFX0VPUyB8IEdTVF9NRVNTQUdFX0VSUk9SLCAtMSk7CisKKyAgZmFpbF9pZiAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSA9PSBHU1RfTUVTU0FHRV9FUlJPUiwKKyAgICAgICJFeHBlY3RlZCBFT1MgbWVzc2FnZSwgZ290IEVSUk9SIG1lc3NhZ2UiKTsKKyAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7CisKKyAgR1NUX0xPRyAoIkdvdCBFT1MsIGNsZWFuaW5nIHVwIik7CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfTlVMTCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3NpbXBsZV9zaHV0ZG93bl93aGlsZV9ydW5uaW5nKQoreworICBHc3RFbGVtZW50ICpwaXBlOworICBHc3RFbGVtZW50ICppbnB1dHNbMV07CisgIEdzdEVsZW1lbnQgKm91dHB1dHNbMV07CisgIEdzdE1lc3NhZ2UgKm1zZzsKKworICBwaXBlID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7CisKKyAgaW5wdXRzWzBdID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOworICBmYWlsX3VubGVzcyAoaW5wdXRzWzBdICE9IE5VTEwsICJmYWlsZWQgdG8gY3JlYXRlICdmYWtlc3JjJyBlbGVtZW50Iik7CisKKyAgb3V0cHV0c1swXSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChvdXRwdXRzWzBdICE9IE5VTEwsICJmYWlsZWQgdG8gY3JlYXRlICdmYWtlc2luaycgZWxlbWVudCIpOworCisgIHNldHVwX211bHRpcXVldWUgKHBpcGUsIGlucHV0cywgb3V0cHV0cywgMSk7CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfUEFVU0VEKTsKKworICAvKiB3YWl0IHVudGlsIHBpcGVsaW5lIGlzIHVwIGFuZCBydW5uaW5nICovCisgIG1zZyA9IGdzdF9idXNfcG9sbCAoR1NUX0VMRU1FTlRfQlVTIChwaXBlKSwKKyAgICAgIEdTVF9NRVNTQUdFX0VSUk9SIHwgR1NUX01FU1NBR0VfQVNZTkNfRE9ORSwgLTEpOworICBmYWlsX2lmIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpID09IEdTVF9NRVNTQUdFX0VSUk9SLCAiR290IEVSUk9SIG1lc3NhZ2UiKTsKKyAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7CisKKyAgR1NUX0xPRyAoInBpcGVsaW5lIGlzIHJ1bm5pbmcgbm93Iik7CisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX1BBVVNFRCk7CisKKyAgLyogd2FpdCBhIGJpdCB0byBhY2N1bXVsYXRlIHNvbWUgYnVmZmVycyBpbiB0aGUgcXVldWUgKHdoaWxlIGl0J3MgYmxvY2tpbmcKKyAgICogaW4gdGhlIHNpbmspICovCisgIG1zZyA9CisgICAgICBnc3RfYnVzX3BvbGwgKEdTVF9FTEVNRU5UX0JVUyAocGlwZSksIEdTVF9NRVNTQUdFX0VSUk9SLCBHU1RfU0VDT05EIC8gNCk7CisgIGlmIChtc2cpCisgICAgZ19lcnJvciAoIkdvdCBFUlJPUiBtZXNzYWdlIik7CisKKyAgLyogbm93IHNodXQgZG93biBvbmx5IHRoZSBzaW5rLCBzbyB0aGUgcXVldWUgZ2V0cyBhIHdyb25nLXN0YXRlIGZsb3cgcmV0dXJuICovCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAob3V0cHV0c1swXSwgR1NUX1NUQVRFX05VTEwpOworICBtc2cgPQorICAgICAgZ3N0X2J1c19wb2xsIChHU1RfRUxFTUVOVF9CVVMgKHBpcGUpLCBHU1RfTUVTU0FHRV9FUlJPUiwgR1NUX1NFQ09ORCAvIDIpOworICBpZiAobXNnKQorICAgIGdfZXJyb3IgKCJHb3QgRVJST1IgbWVzc2FnZSIpOworCisgIEdTVF9MT0cgKCJDbGVhbmluZyB1cCIpOworCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX05VTEwpOworICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9zaW1wbGVfY3JlYXRlX2Rlc3Ryb3kpCit7CisgIEdzdEVsZW1lbnQgKm1xOworCisgIG1xID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgibXVsdGlxdWV1ZSIsIE5VTEwpOworICBnc3Rfb2JqZWN0X3VucmVmIChtcSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfcmVxdWVzdF9wYWRzKQoreworICBHc3RFbGVtZW50ICptcTsKKyAgR3N0UGFkICpzaW5rMSwgKnNpbmsyOworCisgIG1xID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgibXVsdGlxdWV1ZSIsIE5VTEwpOworCisgIHNpbmsxID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChtcSwgImZvbyVkIik7CisgIGZhaWxfdW5sZXNzIChzaW5rMSA9PSBOVUxMLAorICAgICAgIkV4cGVjdGVkIE5VTEwgcGFkLCBhcyB0aGVyZSBpcyBubyByZXF1ZXN0IHBhZCB0ZW1wbGF0ZSBmb3IgJ2ZvbyUlZCciKTsKKworICBzaW5rMSA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAobXEsICJzcmMlZCIpOworICBmYWlsX3VubGVzcyAoc2luazEgPT0gTlVMTCwKKyAgICAgICJFeHBlY3RlZCBOVUxMIHBhZCwgYXMgdGhlcmUgaXMgbm8gcmVxdWVzdCBwYWQgdGVtcGxhdGUgZm9yICdzcmMlJWQnIik7CisKKyAgc2luazEgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKG1xLCAic2luayVkIik7CisgIGZhaWxfdW5sZXNzIChzaW5rMSAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9JU19QQUQgKHNpbmsxKSk7CisgIGZhaWxfdW5sZXNzIChHU1RfUEFEX0lTX1NJTksgKHNpbmsxKSk7CisgIEdTVF9MT0cgKCJHb3QgcGFkICVzOiVzIiwgR1NUX0RFQlVHX1BBRF9OQU1FIChzaW5rMSkpOworCisgIHNpbmsyID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChtcSwgInNpbmslZCIpOworICBmYWlsX3VubGVzcyAoc2luazIgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChHU1RfSVNfUEFEIChzaW5rMikpOworICBmYWlsX3VubGVzcyAoR1NUX1BBRF9JU19TSU5LIChzaW5rMikpOworICBHU1RfTE9HICgiR290IHBhZCAlczolcyIsIEdTVF9ERUJVR19QQURfTkFNRSAoc2luazIpKTsKKworICBmYWlsX3VubGVzcyAoc2luazEgIT0gc2luazIpOworCisgIEdTVF9MT0cgKCJDbGVhbmluZyB1cCIpOworICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rMSk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmsyKTsKKyAgZ3N0X29iamVjdF91bnJlZiAobXEpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBHc3RQYWQgKgorbXFfc2lua3BhZF90b19zcmNwYWQgKEdzdEVsZW1lbnQgKiBtcSwgR3N0UGFkICogc2luaykKK3sKKyAgR3N0UGFkICpzcmNwYWQgPSBOVUxMOworCisgIGdjaGFyICptcV9zaW5rcGFkX25hbWU7CisgIGdjaGFyICptcV9zcmNwYWRfbmFtZTsKKworICBtcV9zaW5rcGFkX25hbWUgPSBnc3RfcGFkX2dldF9uYW1lIChzaW5rKTsKKyAgZmFpbF91bmxlc3MgKGdfc3RyX2hhc19wcmVmaXggKG1xX3NpbmtwYWRfbmFtZSwgInNpbmsiKSk7CisgIG1xX3NyY3BhZF9uYW1lID0gZ19zdHJkdXBfcHJpbnRmICgic3JjJXMiLCBtcV9zaW5rcGFkX25hbWUgKyA0KTsKKyAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKG1xLCBtcV9zcmNwYWRfbmFtZSk7CisgIGZhaWxfdW5sZXNzIChzcmNwYWQgIT0gTlVMTCk7CisKKyAgZ19mcmVlIChtcV9zaW5rcGFkX25hbWUpOworICBnX2ZyZWUgKG1xX3NyY3BhZF9uYW1lKTsKKworICByZXR1cm4gc3JjcGFkOworfQorCitHU1RfU1RBUlRfVEVTVCAodGVzdF9yZXF1ZXN0X3BhZHNfbmFtZWQpCit7CisgIEdzdEVsZW1lbnQgKm1xOworICBHc3RQYWQgKnNpbmsxLCAqc2luazIsICpzaW5rMywgKnNpbms0OworCisgIG1xID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgibXVsdGlxdWV1ZSIsIE5VTEwpOworCisgIHNpbmsxID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChtcSwgInNpbmsxIik7CisgIGZhaWxfdW5sZXNzIChzaW5rMSAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9JU19QQUQgKHNpbmsxKSk7CisgIGZhaWxfdW5sZXNzIChHU1RfUEFEX0lTX1NJTksgKHNpbmsxKSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKEdTVF9QQURfTkFNRSAoc2luazEpLCAic2luazEiKTsKKyAgR1NUX0xPRyAoIkdvdCBwYWQgJXM6JXMiLCBHU1RfREVCVUdfUEFEX05BTUUgKHNpbmsxKSk7CisKKyAgc2luazMgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKG1xLCAic2luazMiKTsKKyAgZmFpbF91bmxlc3MgKHNpbmszICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoR1NUX0lTX1BBRCAoc2luazMpKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9QQURfSVNfU0lOSyAoc2luazMpKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoR1NUX1BBRF9OQU1FIChzaW5rMyksICJzaW5rMyIpOworICBHU1RfTE9HICgiR290IHBhZCAlczolcyIsIEdTVF9ERUJVR19QQURfTkFNRSAoc2luazMpKTsKKworICBzaW5rMiA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAobXEsICJzaW5rMiIpOworICBmYWlsX3VubGVzcyAoc2luazIgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChHU1RfSVNfUEFEIChzaW5rMikpOworICBmYWlsX3VubGVzcyAoR1NUX1BBRF9JU19TSU5LIChzaW5rMikpOworICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChHU1RfUEFEX05BTUUgKHNpbmsyKSwgInNpbmsyIik7CisgIEdTVF9MT0cgKCJHb3QgcGFkICVzOiVzIiwgR1NUX0RFQlVHX1BBRF9OQU1FIChzaW5rMikpOworCisgIC8qIFRoaXMgZ2V0cyB1cyB0aGUgZmlyc3QgdW51c2VkIGlkLCBzaW5rMCAqLworICBzaW5rNCA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAobXEsICJzaW5rJWQiKTsKKyAgZmFpbF91bmxlc3MgKHNpbms0ICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoR1NUX0lTX1BBRCAoc2luazQpKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9QQURfSVNfU0lOSyAoc2luazQpKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoR1NUX1BBRF9OQU1FIChzaW5rNCksICJzaW5rMCIpOworICBHU1RfTE9HICgiR290IHBhZCAlczolcyIsIEdTVF9ERUJVR19QQURfTkFNRSAoc2luazQpKTsKKworICBHU1RfTE9HICgiQ2xlYW5pbmcgdXAiKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc2luazEpOworICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rMik7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmszKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc2luazQpOworICBnc3Rfb2JqZWN0X3VucmVmIChtcSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIEdzdENhcHMgKgorbXFfZHVtbXlwYWRfZ2V0Y2FwcyAoR3N0UGFkICogc2lua3BhZCwgR3N0Q2FwcyAqIGZpbHRlcikKK3sKKyAgcmV0dXJuIChmaWx0ZXIgPyBnc3RfY2Fwc19yZWYgKGZpbHRlcikgOiBnc3RfY2Fwc19uZXdfYW55ICgpKTsKK30KKworc3RydWN0IFBhZERhdGEKK3sKKyAgZ3VpbnQ4IHBhZF9udW07CisgIGd1aW50MzIgKm1heF9saW5rZWRfaWRfcHRyOworICBndWludDMyICplb3NfY291bnRfcHRyOworICBnYm9vbGVhbiBpc19saW5rZWQ7CisgIGdib29sZWFuIGZpcnN0X2J1ZjsKKyAgZ2ludCBuX2xpbmtlZDsKKworICBHTXV0ZXggKm11dGV4OworICBHQ29uZCAqY29uZDsKK307CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuCittcV9kdW1teXBhZF9jaGFpbiAoR3N0UGFkICogc2lua3BhZCwgR3N0QnVmZmVyICogYnVmKQoreworICBndWludDMyIGN1cl9pZDsKKyAgc3RydWN0IFBhZERhdGEgKnBhZF9kYXRhOworICBndWludDggKmRhdGE7CisgIGdzaXplIHNpemU7CisKKyAgcGFkX2RhdGEgPSBnc3RfcGFkX2dldF9lbGVtZW50X3ByaXZhdGUgKHNpbmtwYWQpOworCisgIGdfc3RhdGljX211dGV4X2xvY2sgKCZfY2hlY2tfbG9jayk7CisgIGZhaWxfaWYgKHBhZF9kYXRhID09IE5VTEwpOworICAvKiBSZWFkIGFuIElEIGZyb20gdGhlIGZpcnN0IDQgYnl0ZXMgb2YgdGhlIGJ1ZmZlciBkYXRhIGFuZCBjaGVjayBpdCdzCisgICAqIHdoYXQgd2UgZXhwZWN0ICovCisgIGRhdGEgPSBnc3RfYnVmZmVyX21hcCAoYnVmLCAmc2l6ZSwgTlVMTCwgR1NUX01BUF9SRUFEKTsKKyAgZmFpbF91bmxlc3MgKHNpemUgPj0gNCk7CisgIGdfc3RhdGljX211dGV4X3VubG9jayAoJl9jaGVja19sb2NrKTsKKyAgY3VyX2lkID0gR1NUX1JFQURfVUlOVDMyX0JFIChkYXRhKTsKKyAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCBkYXRhLCBzaXplKTsKKworICBnX211dGV4X2xvY2sgKHBhZF9kYXRhLT5tdXRleCk7CisKKyAgLyogRm9yIG5vdC1saW5rZWQgcGFkcywgZW5zdXJlIHRoYXQgd2UncmUgbm90IHJ1bm5pbmcgYWhlYWQgb2YgdGhlICdsaW5rZWQnCisgICAqIHBhZHMuIFRoZSBmaXJzdCBidWZmZXIgaXMgYWxsb3dlZCB0byBnZXQgYWhlYWQsIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoaW5ncyBjYW4ndAorICAgKiBhbHdheXMgcHJlLXJvbGwgY29ycmVjdGx5ICovCisgIGlmICghcGFkX2RhdGEtPmlzX2xpbmtlZCkgeworICAgIC8qIElmIHRoZXJlIGFyZSBubyBsaW5rZWQgcGFkcywgd2UgY2FuJ3QgdHJhY2sgYSBtYXhfaWQgZm9yIHRoZW0gOikgKi8KKyAgICBpZiAocGFkX2RhdGEtPm5fbGlua2VkID4gMCAmJiAhcGFkX2RhdGEtPmZpcnN0X2J1ZikgeworICAgICAgZ19zdGF0aWNfbXV0ZXhfbG9jayAoJl9jaGVja19sb2NrKTsKKyAgICAgIGZhaWxfdW5sZXNzIChjdXJfaWQgPD0gKihwYWRfZGF0YS0+bWF4X2xpbmtlZF9pZF9wdHIpICsgMSwKKyAgICAgICAgICAiR290IGJ1ZmZlciAldSBvbiBwYWQgJXUgYmVmb3JlIGJ1ZmZlciAldSB3YXMgc2VlbiBvbiBhICIKKyAgICAgICAgICAibGlua2VkIHBhZCAobWF4OiAldSkiLCBjdXJfaWQsIHBhZF9kYXRhLT5wYWRfbnVtLCBjdXJfaWQgLSAxLAorICAgICAgICAgICoocGFkX2RhdGEtPm1heF9saW5rZWRfaWRfcHRyKSk7CisgICAgICBnX3N0YXRpY19tdXRleF91bmxvY2sgKCZfY2hlY2tfbG9jayk7CisgICAgfQorICB9IGVsc2UgeworICAgIC8qIFVwZGF0ZSB0aGUgbWF4X2lkIHZhbHVlICovCisgICAgaWYgKGN1cl9pZCA+ICoocGFkX2RhdGEtPm1heF9saW5rZWRfaWRfcHRyKSkKKyAgICAgICoocGFkX2RhdGEtPm1heF9saW5rZWRfaWRfcHRyKSA9IGN1cl9pZDsKKyAgfQorICBwYWRfZGF0YS0+Zmlyc3RfYnVmID0gRkFMU0U7CisKKyAgZ19tdXRleF91bmxvY2sgKHBhZF9kYXRhLT5tdXRleCk7CisKKyAgLyogVW5yZWYgdGhlIGJ1ZmZlciAqLworICBnc3RfYnVmZmVyX3VucmVmIChidWYpOworCisgIC8qIFJldHVybiBPSyBvciBub3QtbGlua2VkIGFzIGluZGljYXRlZCAqLworICByZXR1cm4gcGFkX2RhdGEtPmlzX2xpbmtlZCA/IEdTVF9GTE9XX09LIDogR1NUX0ZMT1dfTk9UX0xJTktFRDsKK30KKworc3RhdGljIGdib29sZWFuCittcV9kdW1teXBhZF9ldmVudCAoR3N0UGFkICogc2lua3BhZCwgR3N0RXZlbnQgKiBldmVudCkKK3sKKyAgc3RydWN0IFBhZERhdGEgKnBhZF9kYXRhOworCisgIHBhZF9kYXRhID0gZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlIChzaW5rcGFkKTsKKyAgZ19zdGF0aWNfbXV0ZXhfbG9jayAoJl9jaGVja19sb2NrKTsKKyAgZmFpbF9pZiAocGFkX2RhdGEgPT0gTlVMTCk7CisgIGdfc3RhdGljX211dGV4X3VubG9jayAoJl9jaGVja19sb2NrKTsKKworICBpZiAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfRU9TKSB7CisgICAgZ19tdXRleF9sb2NrIChwYWRfZGF0YS0+bXV0ZXgpOworCisgICAgLyogQWNjdW11bGF0ZSB0aGF0IHdlJ3ZlIHNlZW4gdGhlIEVPUyBhbmQgc2lnbmFsIHRoZSBtYWluIHRocmVhZCAqLworICAgICoocGFkX2RhdGEtPmVvc19jb3VudF9wdHIpICs9IDE7CisKKyAgICBHU1RfREVCVUcgKCJFT1Mgb24gcGFkICV1IiwgcGFkX2RhdGEtPnBhZF9udW0pOworCisgICAgZ19jb25kX2Jyb2FkY2FzdCAocGFkX2RhdGEtPmNvbmQpOworICAgIGdfbXV0ZXhfdW5sb2NrIChwYWRfZGF0YS0+bXV0ZXgpOworICB9CisKKyAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZAorcnVuX291dHB1dF9vcmRlcl90ZXN0IChnaW50IG5fbGlua2VkKQoreworICAvKiBUaGlzIHRlc3QgY3JlYXRlcyBhIG11bHRpcXVldWUgd2l0aCAyIGxpbmtlZCBvdXRwdXQsIGFuZCAzIG91dHB1dHMgdGhhdCAKKyAgICogcmV0dXJuICdub3QtbGlua2VkJyB3aGVuIGRhdGEgaXMgcHVzaGVkLCB0aGVuIHZlcmlmaWVzIHRoYXQgYWxsIGJ1ZmZlcnMgCisgICAqIGFyZSByZWNlaXZlZCBvbiBub3QtbGlua2VkIHBhZHMgb25seSBhZnRlciBlYXJsaWVyIGJ1ZmZlcnMgb24gdGhlIAorICAgKiAnbGlua2VkJyBwYWRzIGFyZSBtYWRlICovCisgIEdzdEVsZW1lbnQgKnBpcGU7CisgIEdzdEVsZW1lbnQgKm1xOworICBHc3RQYWQgKmlucHV0cGFkc1s1XTsKKyAgR3N0UGFkICpzaW5rcGFkc1s1XTsKKyAgc3RydWN0IFBhZERhdGEgcGFkX2RhdGFbNV07CisgIGd1aW50MzIgbWF4X2xpbmtlZF9pZDsKKyAgZ3VpbnQzMiBlb3Nfc2VlbjsKKyAgR011dGV4ICptdXRleDsKKyAgR0NvbmQgKmNvbmQ7CisgIGdpbnQgaTsKKyAgY29uc3QgZ2ludCBOUEFEUyA9IDU7CisgIGNvbnN0IGdpbnQgTkJVRkZFUlMgPSAxMDAwOworCisgIG11dGV4ID0gZ19tdXRleF9uZXcgKCk7CisgIGNvbmQgPSBnX2NvbmRfbmV3ICgpOworCisgIHBpcGUgPSBnc3RfYmluX25ldyAoInRlc3RiaW4iKTsKKworICBtcSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoIm11bHRpcXVldWUiLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKG1xICE9IE5VTEwpOworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZSksIG1xKTsKKworICAvKiBObyBsaW1pdHMgKi8KKyAgZ19vYmplY3Rfc2V0IChtcSwKKyAgICAgICJtYXgtc2l6ZS1ieXRlcyIsIChndWludCkgMCwKKyAgICAgICJtYXgtc2l6ZS1idWZmZXJzIiwgKGd1aW50KSAwLAorICAgICAgIm1heC1zaXplLXRpbWUiLCAoZ3VpbnQ2NCkgMCwKKyAgICAgICJleHRyYS1zaXplLWJ5dGVzIiwgKGd1aW50KSAwLAorICAgICAgImV4dHJhLXNpemUtYnVmZmVycyIsIChndWludCkgMCwgImV4dHJhLXNpemUtdGltZSIsIChndWludDY0KSAwLCBOVUxMKTsKKworICAvKiBDb25zdHJ1Y3QgTlBBRFMgZHVtbXkgb3V0cHV0IHBhZHMuIFRoZSBmaXJzdCAnbl9saW5rZWQnIHJldHVybiBGTE9XX09LLCB0aGUgcmVzdAorICAgKiByZXR1cm4gTk9UX0xJTktFRC4gVGhlIG5vdC1saW5rZWQgb25lcyBjaGVjayB0aGUgZXhwZWN0ZWQgb3JkZXJpbmcgb2YgCisgICAqIG91dHB1dCBidWZmZXJzICovCisgIGZvciAoaSA9IDA7IGkgPCBOUEFEUzsgaSsrKSB7CisgICAgR3N0UGFkICptcV9zcmNwYWQsICptcV9zaW5rcGFkOworICAgIGdjaGFyICpuYW1lOworCisgICAgbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoImR1bW15c3JjJWQiLCBpKTsKKyAgICBpbnB1dHBhZHNbaV0gPSBnc3RfcGFkX25ldyAobmFtZSwgR1NUX1BBRF9TUkMpOworICAgIGdfZnJlZSAobmFtZSk7CisgICAgZ3N0X3BhZF9zZXRfZ2V0Y2Fwc19mdW5jdGlvbiAoaW5wdXRwYWRzW2ldLCBtcV9kdW1teXBhZF9nZXRjYXBzKTsKKworICAgIG1xX3NpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKG1xLCAic2luayVkIik7CisgICAgZmFpbF91bmxlc3MgKG1xX3NpbmtwYWQgIT0gTlVMTCk7CisgICAgZ3N0X3BhZF9saW5rIChpbnB1dHBhZHNbaV0sIG1xX3NpbmtwYWQpOworCisgICAgZ3N0X3BhZF9zZXRfYWN0aXZlIChpbnB1dHBhZHNbaV0sIFRSVUUpOworCisgICAgbXFfc3JjcGFkID0gbXFfc2lua3BhZF90b19zcmNwYWQgKG1xLCBtcV9zaW5rcGFkKTsKKworICAgIG5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJkdW1teXNpbmslZCIsIGkpOworICAgIHNpbmtwYWRzW2ldID0gZ3N0X3BhZF9uZXcgKG5hbWUsIEdTVF9QQURfU0lOSyk7CisgICAgZ19mcmVlIChuYW1lKTsKKyAgICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoc2lua3BhZHNbaV0sIG1xX2R1bW15cGFkX2NoYWluKTsKKyAgICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAoc2lua3BhZHNbaV0sIG1xX2R1bW15cGFkX2V2ZW50KTsKKyAgICBnc3RfcGFkX3NldF9nZXRjYXBzX2Z1bmN0aW9uIChzaW5rcGFkc1tpXSwgbXFfZHVtbXlwYWRfZ2V0Y2Fwcyk7CisKKyAgICBwYWRfZGF0YVtpXS5wYWRfbnVtID0gaTsKKyAgICBwYWRfZGF0YVtpXS5tYXhfbGlua2VkX2lkX3B0ciA9ICZtYXhfbGlua2VkX2lkOworICAgIHBhZF9kYXRhW2ldLmVvc19jb3VudF9wdHIgPSAmZW9zX3NlZW47CisgICAgcGFkX2RhdGFbaV0uaXNfbGlua2VkID0gKGkgPCBuX2xpbmtlZCA/IFRSVUUgOiBGQUxTRSk7CisgICAgcGFkX2RhdGFbaV0ubl9saW5rZWQgPSBuX2xpbmtlZDsKKyAgICBwYWRfZGF0YVtpXS5jb25kID0gY29uZDsKKyAgICBwYWRfZGF0YVtpXS5tdXRleCA9IG11dGV4OworICAgIHBhZF9kYXRhW2ldLmZpcnN0X2J1ZiA9IFRSVUU7CisgICAgZ3N0X3BhZF9zZXRfZWxlbWVudF9wcml2YXRlIChzaW5rcGFkc1tpXSwgcGFkX2RhdGEgKyBpKTsKKworICAgIGdzdF9wYWRfbGluayAobXFfc3JjcGFkLCBzaW5rcGFkc1tpXSk7CisgICAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rcGFkc1tpXSwgVFJVRSk7CisKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChtcV9zaW5rcGFkKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChtcV9zcmNwYWQpOworICB9CisKKyAgLyogUnVuIHRoZSB0ZXN0LiBQdXNoIDEwMDAgYnVmZmVycyB0aHJvdWdoIHRoZSBtdWx0aXF1ZXVlIGluIGEgcGF0dGVybiAqLworCisgIG1heF9saW5rZWRfaWQgPSAwOworICBlb3Nfc2VlbiA9IDA7CisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX1BMQVlJTkcpOworCisgIGZvciAoaSA9IDA7IGkgPCBOQlVGRkVSUzsgaSsrKSB7CisgICAgY29uc3QgZ3VpbnQ4IHBhZF9wYXR0ZXJuW10gPQorICAgICAgICB7IDAsIDAsIDAsIDAsIDEsIDEsIDIsIDEsIDAsIDIsIDMsIDIsIDMsIDEsIDQgfTsKKyAgICBjb25zdCBndWludCBuID0gc2l6ZW9mIChwYWRfcGF0dGVybikgLyBzaXplb2YgKGd1aW50OCk7CisgICAgZ3VpbnQ4IGN1cl9wYWQ7CisgICAgR3N0QnVmZmVyICpidWY7CisgICAgR3N0Rmxvd1JldHVybiByZXQ7CisgICAgZ3BvaW50ZXIgZGF0YTsKKworICAgIGN1cl9wYWQgPSBwYWRfcGF0dGVybltpICUgbl07CisKKyAgICBidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOworICAgIGdfc3RhdGljX211dGV4X2xvY2sgKCZfY2hlY2tfbG9jayk7CisgICAgZmFpbF9pZiAoYnVmID09IE5VTEwpOworICAgIGdfc3RhdGljX211dGV4X3VubG9jayAoJl9jaGVja19sb2NrKTsKKworICAgIGRhdGEgPSBnc3RfYnVmZmVyX21hcCAoYnVmLCBOVUxMLCBOVUxMLCBHU1RfTUFQX1dSSVRFKTsKKyAgICBHU1RfV1JJVEVfVUlOVDMyX0JFIChkYXRhLCBpICsgMSk7CisgICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCBkYXRhLCA0KTsKKyAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSA9IChpICsgMSkgKiBHU1RfU0VDT05EOworCisgICAgcmV0ID0gZ3N0X3BhZF9wdXNoIChpbnB1dHBhZHNbY3VyX3BhZF0sIGJ1Zik7CisgICAgZ19zdGF0aWNfbXV0ZXhfbG9jayAoJl9jaGVja19sb2NrKTsKKyAgICBpZiAocGFkX2RhdGFbY3VyX3BhZF0uaXNfbGlua2VkKSB7CisgICAgICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9GTE9XX09LLAorICAgICAgICAgICJQdXNoIG9uIHBhZCAlZCByZXR1cm5lZCAlZCB3aGVuIEZMT1dfT0sgd2FzIGV4cGVjdGVkIiwgY3VyX3BhZCwgcmV0KTsKKyAgICB9IGVsc2UgeworICAgICAgLyogRXhwZWN0IE9LIGluaXRpYWxseSwgdGhlbiBOT1RfTElOS0VEIHdoZW4gdGhlIHNyY3BhZCBzdGFydHMgcHVzaGluZyAqLworICAgICAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfRkxPV19PSyB8fCByZXQgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCwKKyAgICAgICAgICAiUHVzaCBvbiBwYWQgJWQgcmV0dXJuZWQgJWQgd2hlbiBGTE9XX09LIG9yIE5PVF9MSU5LRUQgIHdhcyBleHBlY3RlZCIsCisgICAgICAgICAgY3VyX3BhZCwgcmV0KTsKKyAgICB9CisgICAgZ19zdGF0aWNfbXV0ZXhfdW5sb2NrICgmX2NoZWNrX2xvY2spOworICB9CisgIGZvciAoaSA9IDA7IGkgPCBOUEFEUzsgaSsrKSB7CisgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChpbnB1dHBhZHNbaV0sIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKKyAgfQorCisgIC8qIFdhaXQgd2hpbGUgdGhlIGJ1ZmZlcnMgYXJlIHByb2Nlc3NlZCAqLworICBnX211dGV4X2xvY2sgKG11dGV4KTsKKyAgLyogV2Ugd2FpdCB1bnRpbCBFT1MgaGFzIGJlZW4gcHVzaGVkIG9uIGFsbCBsaW5rZWQgcGFkcyAqLworICB3aGlsZSAoZW9zX3NlZW4gPCBuX2xpbmtlZCkgeworICAgIGdfY29uZF93YWl0IChjb25kLCBtdXRleCk7CisgIH0KKyAgZ19tdXRleF91bmxvY2sgKG11dGV4KTsKKworICAvKiBDbGVhbiB1cCAqLworICBmb3IgKGkgPSAwOyBpIDwgTlBBRFM7IGkrKykgeworICAgIEdzdFBhZCAqbXFfaW5wdXQgPSBnc3RfcGFkX2dldF9wZWVyIChpbnB1dHBhZHNbaV0pOworCisgICAgZ3N0X3BhZF91bmxpbmsgKGlucHV0cGFkc1tpXSwgbXFfaW5wdXQpOworICAgIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKG1xLCBtcV9pbnB1dCk7CisgICAgZ3N0X29iamVjdF91bnJlZiAobXFfaW5wdXQpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKGlucHV0cGFkc1tpXSk7CisKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkc1tpXSk7CisgIH0KKworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9OVUxMKTsKKyAgZ3N0X29iamVjdF91bnJlZiAocGlwZSk7CisKKyAgZ19jb25kX2ZyZWUgKGNvbmQpOworICBnX211dGV4X2ZyZWUgKG11dGV4KTsKK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfb3V0cHV0X29yZGVyKQoreworICBydW5fb3V0cHV0X29yZGVyX3Rlc3QgKDIpOworICBydW5fb3V0cHV0X29yZGVyX3Rlc3QgKDApOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3NwYXJzZV9zdHJlYW0pCit7CisgIC8qIFRoaXMgdGVzdCBjcmVhdGVzIGEgbXVsdGlxdWV1ZSB3aXRoIDIgc3RyZWFtcy4gT25lIHJlY2VpdmVzCisgICAqIGEgY29uc3RhbnQgZmxvdyBvZiBidWZmZXJzLCB0aGUgb3RoZXIgb25seSBnZXRzIG9uZSBidWZmZXIsIGFuZCB0aGVuCisgICAqIG5ldy1zZWdtZW50IGV2ZW50cywgYW5kIHJldHVybnMgbm90LWxpbmtlZC4gVGhlIG11bHRpcXVldWUgc2hvdWxkIG5vdCBmaWxsLgorICAgKi8KKyAgR3N0RWxlbWVudCAqcGlwZTsKKyAgR3N0RWxlbWVudCAqbXE7CisgIEdzdFBhZCAqaW5wdXRwYWRzWzJdOworICBHc3RQYWQgKnNpbmtwYWRzWzJdOworICBHc3RFdmVudCAqZXZlbnQ7CisgIHN0cnVjdCBQYWREYXRhIHBhZF9kYXRhWzJdOworICBndWludDMyIGVvc19zZWVuLCBtYXhfbGlua2VkX2lkOworICBHTXV0ZXggKm11dGV4OworICBHQ29uZCAqY29uZDsKKyAgZ2ludCBpOworICBjb25zdCBnaW50IE5CVUZGRVJTID0gMTAwOworICBHc3RTZWdtZW50IHNlZ21lbnQ7CisKKyAgbXV0ZXggPSBnX211dGV4X25ldyAoKTsKKyAgY29uZCA9IGdfY29uZF9uZXcgKCk7CisKKyAgcGlwZSA9IGdzdF9waXBlbGluZV9uZXcgKCJ0ZXN0YmluIik7CisgIG1xID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgibXVsdGlxdWV1ZSIsIE5VTEwpOworICBmYWlsX3VubGVzcyAobXEgIT0gTlVMTCk7CisgIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlKSwgbXEpOworCisgIC8qIDEgc2Vjb25kIGxpbWl0ICovCisgIGdfb2JqZWN0X3NldCAobXEsCisgICAgICAibWF4LXNpemUtYnl0ZXMiLCAoZ3VpbnQpIDAsCisgICAgICAibWF4LXNpemUtYnVmZmVycyIsIChndWludCkgMCwKKyAgICAgICJtYXgtc2l6ZS10aW1lIiwgKGd1aW50NjQpIEdTVF9TRUNPTkQsCisgICAgICAiZXh0cmEtc2l6ZS1ieXRlcyIsIChndWludCkgMCwKKyAgICAgICJleHRyYS1zaXplLWJ1ZmZlcnMiLCAoZ3VpbnQpIDAsICJleHRyYS1zaXplLXRpbWUiLCAoZ3VpbnQ2NCkgMCwgTlVMTCk7CisKKyAgLyogQ29uc3RydWN0IDIgZHVtbXkgb3V0cHV0IHBhZHMuICovCisgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKyAgICBHc3RQYWQgKm1xX3NyY3BhZCwgKm1xX3NpbmtwYWQ7CisgICAgZ2NoYXIgKm5hbWU7CisKKyAgICBuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgiZHVtbXlzcmMlZCIsIGkpOworICAgIGlucHV0cGFkc1tpXSA9IGdzdF9wYWRfbmV3IChuYW1lLCBHU1RfUEFEX1NSQyk7CisgICAgZ19mcmVlIChuYW1lKTsKKyAgICBnc3RfcGFkX3NldF9nZXRjYXBzX2Z1bmN0aW9uIChpbnB1dHBhZHNbaV0sIG1xX2R1bW15cGFkX2dldGNhcHMpOworCisgICAgbXFfc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAobXEsICJzaW5rJWQiKTsKKyAgICBmYWlsX3VubGVzcyAobXFfc2lua3BhZCAhPSBOVUxMKTsKKyAgICBnc3RfcGFkX2xpbmsgKGlucHV0cGFkc1tpXSwgbXFfc2lua3BhZCk7CisKKyAgICBnc3RfcGFkX3NldF9hY3RpdmUgKGlucHV0cGFkc1tpXSwgVFJVRSk7CisKKyAgICBtcV9zcmNwYWQgPSBtcV9zaW5rcGFkX3RvX3NyY3BhZCAobXEsIG1xX3NpbmtwYWQpOworCisgICAgbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoImR1bW15c2luayVkIiwgaSk7CisgICAgc2lua3BhZHNbaV0gPSBnc3RfcGFkX25ldyAobmFtZSwgR1NUX1BBRF9TSU5LKTsKKyAgICBnX2ZyZWUgKG5hbWUpOworICAgIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChzaW5rcGFkc1tpXSwgbXFfZHVtbXlwYWRfY2hhaW4pOworICAgIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChzaW5rcGFkc1tpXSwgbXFfZHVtbXlwYWRfZXZlbnQpOworICAgIGdzdF9wYWRfc2V0X2dldGNhcHNfZnVuY3Rpb24gKHNpbmtwYWRzW2ldLCBtcV9kdW1teXBhZF9nZXRjYXBzKTsKKworICAgIHBhZF9kYXRhW2ldLnBhZF9udW0gPSBpOworICAgIHBhZF9kYXRhW2ldLm1heF9saW5rZWRfaWRfcHRyID0gJm1heF9saW5rZWRfaWQ7CisgICAgcGFkX2RhdGFbaV0uZW9zX2NvdW50X3B0ciA9ICZlb3Nfc2VlbjsKKyAgICBwYWRfZGF0YVtpXS5pc19saW5rZWQgPSAoaSA9PSAwKSA/IFRSVUUgOiBGQUxTRTsKKyAgICBwYWRfZGF0YVtpXS5uX2xpbmtlZCA9IDE7CisgICAgcGFkX2RhdGFbaV0uY29uZCA9IGNvbmQ7CisgICAgcGFkX2RhdGFbaV0ubXV0ZXggPSBtdXRleDsKKyAgICBwYWRfZGF0YVtpXS5maXJzdF9idWYgPSBUUlVFOworICAgIGdzdF9wYWRfc2V0X2VsZW1lbnRfcHJpdmF0ZSAoc2lua3BhZHNbaV0sIHBhZF9kYXRhICsgaSk7CisKKyAgICBnc3RfcGFkX2xpbmsgKG1xX3NyY3BhZCwgc2lua3BhZHNbaV0pOworICAgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2lua3BhZHNbaV0sIFRSVUUpOworCisgICAgZ3N0X29iamVjdF91bnJlZiAobXFfc2lua3BhZCk7CisgICAgZ3N0X29iamVjdF91bnJlZiAobXFfc3JjcGFkKTsKKyAgfQorCisgIC8qIFJ1biB0aGUgdGVzdC4gUHVzaCAxMDAgYnVmZmVycyB0aHJvdWdoIHRoZSBtdWx0aXF1ZXVlICovCisgIG1heF9saW5rZWRfaWQgPSAwOworICBlb3Nfc2VlbiA9IDA7CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfUExBWUlORyk7CisKKyAgLyogUHVzaCAyIG5ldyBzZWdtZW50IGV2ZW50cyAqLworICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKKyAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KTsKKyAgZ3N0X3BhZF9wdXNoX2V2ZW50IChpbnB1dHBhZHNbMF0sIGdzdF9ldmVudF9yZWYgKGV2ZW50KSk7CisgIGdzdF9wYWRfcHVzaF9ldmVudCAoaW5wdXRwYWRzWzFdLCBldmVudCk7CisKKyAgZm9yIChpID0gMDsgaSA8IE5CVUZGRVJTOyBpKyspIHsKKyAgICBHc3RCdWZmZXIgKmJ1ZjsKKyAgICBHc3RGbG93UmV0dXJuIHJldDsKKyAgICBHc3RDbG9ja1RpbWUgdHM7CisgICAgZ3BvaW50ZXIgZGF0YTsKKworICAgIHRzID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAoR1NUX1NFQ09ORCwgaSwgMTApOworCisgICAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0KTsKKyAgICBnX3N0YXRpY19tdXRleF9sb2NrICgmX2NoZWNrX2xvY2spOworICAgIGZhaWxfaWYgKGJ1ZiA9PSBOVUxMKTsKKyAgICBnX3N0YXRpY19tdXRleF91bmxvY2sgKCZfY2hlY2tfbG9jayk7CisKKyAgICBkYXRhID0gZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgTlVMTCwgTlVMTCwgR1NUX01BUF9XUklURSk7CisgICAgR1NUX1dSSVRFX1VJTlQzMl9CRSAoZGF0YSwgaSArIDEpOworICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgZGF0YSwgNCk7CisKKyAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKEdTVF9TRUNPTkQsIGksIDEwKTsKKworICAgIC8qIElmIGkgPT0gMCwgYWxzbyBwdXNoIHRoZSBidWZmZXIgdG8gdGhlIDJuZCBwYWQgKi8KKyAgICBpZiAoaSA9PSAwKQorICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoIChpbnB1dHBhZHNbMV0sIGdzdF9idWZmZXJfcmVmIChidWYpKTsKKworICAgIHJldCA9IGdzdF9wYWRfcHVzaCAoaW5wdXRwYWRzWzBdLCBidWYpOworICAgIGdfc3RhdGljX211dGV4X2xvY2sgKCZfY2hlY2tfbG9jayk7CisgICAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfRkxPV19PSywKKyAgICAgICAgIlB1c2ggb24gcGFkICVkIHJldHVybmVkICVkIHdoZW4gRkxPV19PSyB3YXMgZXhwZWN0ZWQiLCAwLCByZXQpOworICAgIGdfc3RhdGljX211dGV4X3VubG9jayAoJl9jaGVja19sb2NrKTsKKworICAgIC8qIFB1c2ggYSBuZXcgc2VnbWVudCB1cGRhdGUgb24gdGhlIDJuZCBwYWQgKi8KKyAgICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKKyAgICBzZWdtZW50LnN0YXJ0ID0gdHM7CisgICAgc2VnbWVudC50aW1lID0gdHM7CisgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KTsKKyAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKGlucHV0cGFkc1sxXSwgZXZlbnQpOworICB9CisKKyAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2VvcyAoKTsKKyAgZ3N0X3BhZF9wdXNoX2V2ZW50IChpbnB1dHBhZHNbMF0sIGdzdF9ldmVudF9yZWYgKGV2ZW50KSk7CisgIGdzdF9wYWRfcHVzaF9ldmVudCAoaW5wdXRwYWRzWzFdLCBldmVudCk7CisKKyAgLyogV2FpdCB3aGlsZSB0aGUgYnVmZmVycyBhcmUgcHJvY2Vzc2VkICovCisgIGdfbXV0ZXhfbG9jayAobXV0ZXgpOworICAvKiBXZSB3YWl0IHVudGlsIEVPUyBoYXMgYmVlbiBwdXNoZWQgb24gYWxsIHBhZHMgKi8KKyAgd2hpbGUgKGVvc19zZWVuIDwgMikgeworICAgIGdfY29uZF93YWl0IChjb25kLCBtdXRleCk7CisgIH0KKyAgZ19tdXRleF91bmxvY2sgKG11dGV4KTsKKworICAvKiBDbGVhbiB1cCAqLworICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgR3N0UGFkICptcV9pbnB1dCA9IGdzdF9wYWRfZ2V0X3BlZXIgKGlucHV0cGFkc1tpXSk7CisKKyAgICBnc3RfcGFkX3VubGluayAoaW5wdXRwYWRzW2ldLCBtcV9pbnB1dCk7CisgICAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAobXEsIG1xX2lucHV0KTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChtcV9pbnB1dCk7CisgICAgZ3N0X29iamVjdF91bnJlZiAoaW5wdXRwYWRzW2ldKTsKKworICAgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWRzW2ldKTsKKyAgfQorCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX05VTEwpOworICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlKTsKKworICBnX2NvbmRfZnJlZSAoY29uZCk7CisgIGdfbXV0ZXhfZnJlZSAobXV0ZXgpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBTdWl0ZSAqCittdWx0aXF1ZXVlX3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIm11bHRpcXVldWUiKTsKKyAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOworCisgIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc2ltcGxlX2NyZWF0ZV9kZXN0cm95KTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NpbXBsZV9waXBlbGluZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zaW1wbGVfc2h1dGRvd25fd2hpbGVfcnVubmluZyk7CisKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JlcXVlc3RfcGFkcyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9yZXF1ZXN0X3BhZHNfbmFtZWQpOworCisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9vdXRwdXRfb3JkZXIpOworCisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zcGFyc2Vfc3RyZWFtKTsKKyAgcmV0dXJuIHM7Cit9CisKK0dTVF9DSEVDS19NQUlOIChtdWx0aXF1ZXVlKQpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvcXVldWUuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NjZmVjNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlLmMKQEAgLTAsMCArMSw3MjYgQEAKKy8qIEdTdHJlYW1lcgorICoKKyAqIHVuaXQgdGVzdCBmb3IgcXVldWUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDwyMDA2PiBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisKKyNkZWZpbmUgVU5ERVJSVU5fTE9DSygpIChnX211dGV4X2xvY2sgKHVuZGVycnVuX211dGV4KSkKKyNkZWZpbmUgVU5ERVJSVU5fVU5MT0NLKCkgKGdfbXV0ZXhfdW5sb2NrICh1bmRlcnJ1bl9tdXRleCkpCisjZGVmaW5lIFVOREVSUlVOX1NJR05BTCgpIChnX2NvbmRfc2lnbmFsICh1bmRlcnJ1bl9jb25kKSkKKyNkZWZpbmUgVU5ERVJSVU5fV0FJVCgpIChnX2NvbmRfd2FpdCAodW5kZXJydW5fY29uZCwgdW5kZXJydW5fbXV0ZXgpKQorCitzdGF0aWMgR3N0RWxlbWVudCAqcXVldWU7CisKKy8qIEZvciBlYXNlIG9mIHByb2dyYW1taW5nIHdlIHVzZSBnbG9iYWxzIHRvIGtlZXAgcmVmcyBmb3Igb3VyIGZsb2F0aW5nCisgKiBzcmMgYW5kIHNpbmsgcGFkcyB3ZSBjcmVhdGU7IG90aGVyd2lzZSB3ZSBhbHdheXMgaGF2ZSB0byBkbyBnZXRfcGFkLAorICogZ2V0X3BlZXIsIGFuZCB0aGVuIHJlbW92ZSByZWZlcmVuY2VzIGluIGV2ZXJ5IHRlc3QgZnVuY3Rpb24gKi8KK3N0YXRpYyBHc3RQYWQgKm15c3JjcGFkOworc3RhdGljIEdzdFBhZCAqbXlzaW5rcGFkOworCitzdGF0aWMgZ2ludCBvdmVycnVuX2NvdW50OworCitzdGF0aWMgR011dGV4ICp1bmRlcnJ1bl9tdXRleDsKK3N0YXRpYyBHQ29uZCAqdW5kZXJydW5fY29uZDsKK3N0YXRpYyBnaW50IHVuZGVycnVuX2NvdW50OworCitzdGF0aWMgR0xpc3QgKmV2ZW50czsKKworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCisgICAgR1NUX1BBRF9TSU5LLAorICAgIEdTVF9QQURfQUxXQVlTLAorICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAorICAgIEdTVF9QQURfU1JDLAorICAgIEdTVF9QQURfQUxXQVlTLAorICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOworCitzdGF0aWMgdm9pZAorcXVldWVfb3ZlcnJ1biAoR3N0RWxlbWVudCAqIHF1ZXVlLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIEdTVF9ERUJVRyAoInF1ZXVlIG92ZXJydW4iKTsKKyAgb3ZlcnJ1bl9jb3VudCsrOworfQorCitzdGF0aWMgdm9pZAorcXVldWVfdW5kZXJydW4gKEdzdEVsZW1lbnQgKiBxdWV1ZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBHU1RfREVCVUcgKCJxdWV1ZSB1bmRlcnJ1biIpOworICBVTkRFUlJVTl9MT0NLICgpOworICB1bmRlcnJ1bl9jb3VudCsrOworICBVTkRFUlJVTl9TSUdOQUwgKCk7CisgIFVOREVSUlVOX1VOTE9DSyAoKTsKK30KKworc3RhdGljIGdib29sZWFuCitldmVudF9mdW5jIChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpCit7CisgIEdTVF9ERUJVRyAoIiVzIGV2ZW50IiwgZ3N0X2V2ZW50X3R5cGVfZ2V0X25hbWUgKEdTVF9FVkVOVF9UWVBFIChldmVudCkpKTsKKyAgZXZlbnRzID0gZ19saXN0X2FwcGVuZCAoZXZlbnRzLCBldmVudCk7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkCitkcm9wX2V2ZW50cyAodm9pZCkKK3sKKyAgd2hpbGUgKGV2ZW50cyAhPSBOVUxMKSB7CisgICAgZ3N0X2V2ZW50X3VucmVmIChHU1RfRVZFTlQgKGV2ZW50cy0+ZGF0YSkpOworICAgIGV2ZW50cyA9IGdfbGlzdF9kZWxldGVfbGluayAoZXZlbnRzLCBldmVudHMpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitzZXR1cCAodm9pZCkKK3sKKyAgR1NUX0RFQlVHICgic2V0dXBfcXVldWUiKTsKKworICBxdWV1ZSA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgicXVldWUiKTsKKyAgZ19zaWduYWxfY29ubmVjdCAocXVldWUsICJ1bmRlcnJ1biIsIEdfQ0FMTEJBQ0sgKHF1ZXVlX3VuZGVycnVuKSwgTlVMTCk7CisKKyAgbXlzcmNwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCAocXVldWUsICZzcmN0ZW1wbGF0ZSwgTlVMTCk7CisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIFRSVUUpOworCisgIG15c2lua3BhZCA9IE5VTEw7CisKKyAgb3ZlcnJ1bl9jb3VudCA9IDA7CisKKyAgdW5kZXJydW5fbXV0ZXggPSBnX211dGV4X25ldyAoKTsKKyAgdW5kZXJydW5fY29uZCA9IGdfY29uZF9uZXcgKCk7CisgIHVuZGVycnVuX2NvdW50ID0gMDsKKworICBldmVudHMgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZAorY2xlYW51cCAodm9pZCkKK3sKKyAgR1NUX0RFQlVHICgiY2xlYW51cF9xdWV1ZSIpOworCisgIGdzdF9jaGVja19kcm9wX2J1ZmZlcnMgKCk7CisKKyAgZHJvcF9ldmVudHMgKCk7CisKKyAgZ19jb25kX2ZyZWUgKHVuZGVycnVuX2NvbmQpOworICB1bmRlcnJ1bl9jb25kID0gTlVMTDsKKyAgZ19tdXRleF9mcmVlICh1bmRlcnJ1bl9tdXRleCk7CisgIHVuZGVycnVuX211dGV4ID0gTlVMTDsKKworICBpZiAobXlzaW5rcGFkICE9IE5VTEwpIHsKKyAgICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgRkFMU0UpOworICAgIGdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZCAocXVldWUpOworICB9CisKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNyY3BhZCwgRkFMU0UpOworICBnc3RfY2hlY2tfdGVhcmRvd25fc3JjX3BhZCAocXVldWUpOworCisgIGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50IChxdWV1ZSk7CisgIHF1ZXVlID0gTlVMTDsKK30KKworLyogc2V0dXAgdGhlIHNpbmtwYWQgb24gYSBwbGF5aW5nIHF1ZXVlIGVsZW1lbnQuIGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCgpCisgKiBkb2VzIG5vdCB3b3JrIGluIHRoaXMgY2FzZSBzaW5jZSBpdCBkb2VzIG5vdCBhY3RpdmF0ZSB0aGUgcGFkIGJlZm9yZSBsaW5raW5nCisgKiBpdC4gKi8KK3N0YXRpYyBHc3RQYWQgKgorc2V0dXBfc2lua19wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqIHRtcGwpCit7CisgIEdzdFBhZCAqc3JjcGFkOworICBHc3RQYWQgKnNpbmtwYWQ7CisKKyAgc2lua3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICh0bXBsLCAic2luayIpOworICBmYWlsX2lmIChzaW5rcGFkID09IE5VTEwpOworICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZWxlbWVudCwgInNyYyIpOworICBmYWlsX2lmIChzcmNwYWQgPT0gTlVMTCk7CisgIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChzaW5rcGFkLCBnc3RfY2hlY2tfY2hhaW5fZnVuYyk7CisgIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChzaW5rcGFkLCBldmVudF9mdW5jKTsKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rcGFkLCBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAoc3JjcGFkLCBzaW5rcGFkKSA9PSBHU1RfUEFEX0xJTktfT0spOworICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOworCisgIHJldHVybiBzaW5rcGFkOworfQorCisvKiBzZXQgcXVldWUgc2l6ZSB0byAyIGJ1ZmZlcnMKKyAqIHB1bGwgMSBidWZmZXIKKyAqIGNoZWNrIG92ZXIvdW5kZXJ1bnMKKyAqLworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfbm9uX2xlYWt5X3VuZGVycnVuKQoreworICBnX3NpZ25hbF9jb25uZWN0IChxdWV1ZSwgIm92ZXJydW4iLCBHX0NBTExCQUNLIChxdWV1ZV9vdmVycnVuKSwgTlVMTCk7CisgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHF1ZXVlKSwgIm1heC1zaXplLWJ1ZmZlcnMiLCAyLCBOVUxMKTsKKyAgbXlzaW5rcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkIChxdWV1ZSwgJnNpbmt0ZW1wbGF0ZSwgTlVMTCk7CisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBUUlVFKTsKKworICBHU1RfREVCVUcgKCJzdGFydGluZyIpOworCisgIFVOREVSUlVOX0xPQ0sgKCk7CisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHF1ZXVlLAorICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCisgICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7CisgIFVOREVSUlVOX1dBSVQgKCk7CisgIFVOREVSUlVOX1VOTE9DSyAoKTsKKworICBmYWlsX3VubGVzcyAob3ZlcnJ1bl9jb3VudCA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHVuZGVycnVuX2NvdW50ID09IDEpOworCisgIEdTVF9ERUJVRyAoInN0b3BwaW5nIik7CisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHF1ZXVlLAorICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJjb3VsZCBub3Qgc2V0IHRvIG51bGwiKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgdm9pZAorcXVldWVfb3ZlcnJ1bl9saW5rX2FuZF9hY3RpdmF0ZSAoR3N0RWxlbWVudCAqIHF1ZXVlLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIEdTVF9ERUJVRyAoInF1ZXVlIG92ZXJydW4iKTsKKyAgb3ZlcnJ1bl9jb3VudCsrOworCisgIC8qIGxpbmsgdGhlIHNyYyBwYWQgb2YgdGhlIHF1ZXVlIHRvIG1ha2UgaXQgZGVxdWV1ZSBidWZmZXJzICovCisgIG15c2lua3BhZCA9IHNldHVwX3NpbmtfcGFkIChxdWV1ZSwgJnNpbmt0ZW1wbGF0ZSk7Cit9CisKKy8qIHNldCBxdWV1ZSBzaXplIHRvIDIgYnVmZmVycworICogcHVzaCAyIGJ1ZmZlcnMKKyAqIGNoZWNrIG92ZXIvdW5kZXJ1bnMKKyAqIHB1c2ggMSBtb3JlIGJ1ZmZlcgorICogY2hlY2sgb3Zlci91bmRlcnVucyBhZ2FpbgorICovCitHU1RfU1RBUlRfVEVTVCAodGVzdF9ub25fbGVha3lfb3ZlcnJ1bikKK3sKKyAgR3N0QnVmZmVyICpidWZmZXIxOworICBHc3RCdWZmZXIgKmJ1ZmZlcjI7CisgIEdzdEJ1ZmZlciAqYnVmZmVyMzsKKyAgR3N0QnVmZmVyICpidWZmZXI7CisKKyAgZ19zaWduYWxfY29ubmVjdCAocXVldWUsICJvdmVycnVuIiwKKyAgICAgIEdfQ0FMTEJBQ0sgKHF1ZXVlX292ZXJydW5fbGlua19hbmRfYWN0aXZhdGUpLCBOVUxMKTsKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAocXVldWUpLCAibWF4LXNpemUtYnVmZmVycyIsIDIsIE5VTEwpOworCisgIEdTVF9ERUJVRyAoInN0YXJ0aW5nIik7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocXVldWUsCisgICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKKyAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKKyAgZmFpbF91bmxlc3MgKG92ZXJydW5fY291bnQgPT0gMCk7CisgIGZhaWxfdW5sZXNzICh1bmRlcnJ1bl9jb3VudCA9PSAwKTsKKworICBidWZmZXIxID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0KTsKKyAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAqLworICBnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBidWZmZXIxKTsKKworICBHU1RfREVCVUcgKCJhZGRlZCAxc3QiKTsKKyAgZmFpbF91bmxlc3MgKG92ZXJydW5fY291bnQgPT0gMCk7CisgIGZhaWxfdW5sZXNzICh1bmRlcnJ1bl9jb3VudCA9PSAwKTsKKworICBidWZmZXIyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0KTsKKyAgZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgYnVmZmVyMik7CisKKyAgR1NUX0RFQlVHICgiYWRkZWQgMm5kIik7CisgIGZhaWxfdW5sZXNzIChvdmVycnVuX2NvdW50ID09IDApOworICBmYWlsX3VubGVzcyAodW5kZXJydW5fY291bnQgPT0gMCk7CisKKyAgYnVmZmVyMyA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7CisgIC8qIGxvY2sgdGhlIGNoZWNrX211dGV4IHRvIGJsb2NrIHRoZSBmaXJzdCBidWZmZXIgcHVzaGVkIHRvIG15c2lua3BhZCAqLworICBnX211dGV4X2xvY2sgKGNoZWNrX211dGV4KTsKKyAgLyogdGhlIG5leHQgY2FsbCB0byBnc3RfcGFkX3B1c2ggd2lsbCBlbWl0IHRoZSBvdmVycnVuIHNpZ25hbC4gVGhlIHNpZ25hbAorICAgKiBoYW5kbGVyIHF1ZXVlX292ZXJydW5fbGlua19hbmRfYWN0aXZhdGUoKSAoYWJvdmUpIGluY3JlYXNlcyBvdmVycnVuX2NvdW50LAorICAgKiBhY3RpdmF0ZXMgYW5kIGxpbmtzIG15c2lua3BhZC4gVGhlIHF1ZXVlIHRhc2sgdGhlbiBkZXF1ZXVlcyBhIGJ1ZmZlciBhbmQKKyAgICogZ3N0X3BhZF9wdXNoKCkgd2lsbCByZXR1cm4uICovCisgIGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGJ1ZmZlcjMpOworCisgIEdTVF9ERUJVRyAoImFkZGVkIDNyZCIpOworICBmYWlsX3VubGVzcyAob3ZlcnJ1bl9jb3VudCA9PSAxKTsKKyAgZmFpbF91bmxlc3MgKHVuZGVycnVuX2NvdW50ID09IDApOworCisgIC8qIG5vdyBsZXQgdGhlIHF1ZXVlIHB1c2ggYWxsIGJ1ZmZlcnMgKi8KKyAgd2hpbGUgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpIDwgMykgeworICAgIGdfY29uZF93YWl0IChjaGVja19jb25kLCBjaGVja19tdXRleCk7CisgIH0KKyAgZ19tdXRleF91bmxvY2sgKGNoZWNrX211dGV4KTsKKworICBmYWlsX3VubGVzcyAob3ZlcnJ1bl9jb3VudCA9PSAxKTsKKyAgLyogbWFrZSBzdXJlIHdlIGdldCB0aGUgdW5kZXJydW4gc2lnbmFsIGJlZm9yZSB3ZSBjaGVjayB1bmRlcnJ1bl9jb3VudCAqLworICBVTkRFUlJVTl9MT0NLICgpOworICB3aGlsZSAodW5kZXJydW5fY291bnQgPCAxKSB7CisgICAgVU5ERVJSVU5fV0FJVCAoKTsKKyAgfQorICBVTkRFUlJVTl9VTkxPQ0sgKCk7CisgIGZhaWxfdW5sZXNzICh1bmRlcnJ1bl9jb3VudCA9PSAxKTsKKworICBidWZmZXIgPSBnX2xpc3RfbnRoIChidWZmZXJzLCAwKS0+ZGF0YTsKKyAgZmFpbF91bmxlc3MgKGJ1ZmZlciA9PSBidWZmZXIxKTsKKworICBidWZmZXIgPSBnX2xpc3RfbnRoIChidWZmZXJzLCAxKS0+ZGF0YTsKKyAgZmFpbF91bmxlc3MgKGJ1ZmZlciA9PSBidWZmZXIyKTsKKworICBidWZmZXIgPSBnX2xpc3RfbnRoIChidWZmZXJzLCAyKS0+ZGF0YTsKKyAgZmFpbF91bmxlc3MgKGJ1ZmZlciA9PSBidWZmZXIzKTsKKworICBHU1RfREVCVUcgKCJzdG9wcGluZyIpOworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChxdWV1ZSwKKyAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IHNldCB0byBudWxsIik7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogc2V0IHF1ZXVlIHNpemUgdG8gMiBidWZmZXJzCisgKiBwdXNoIDIgYnVmZmVycworICogY2hlY2sgb3Zlci91bmRlcnVucworICogcHVzaCAxIG1vcmUgYnVmZmVyCisgKiBjaGVjayBvdmVyL3VuZGVydW5zIGFnYWluCisgKiBjaGVjayB3aGljaCBidWZmZXIgd2FzIGxlYWtlZAorICovCitHU1RfU1RBUlRfVEVTVCAodGVzdF9sZWFreV91cHN0cmVhbSkKK3sKKyAgR3N0QnVmZmVyICpidWZmZXIxOworICBHc3RCdWZmZXIgKmJ1ZmZlcjI7CisgIEdzdEJ1ZmZlciAqYnVmZmVyMzsKKyAgR3N0QnVmZmVyICpidWZmZXI7CisKKyAgZ19zaWduYWxfY29ubmVjdCAocXVldWUsICJvdmVycnVuIiwgR19DQUxMQkFDSyAocXVldWVfb3ZlcnJ1biksIE5VTEwpOworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChxdWV1ZSksICJtYXgtc2l6ZS1idWZmZXJzIiwgMiwgImxlYWt5IiwgMSwgTlVMTCk7CisKKyAgR1NUX0RFQlVHICgic3RhcnRpbmciKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChxdWV1ZSwKKyAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAorICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOworICBmYWlsX3VubGVzcyAob3ZlcnJ1bl9jb3VudCA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHVuZGVycnVuX2NvdW50ID09IDApOworCisgIGJ1ZmZlcjEgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOworICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlICovCisgIGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGJ1ZmZlcjEpOworCisgIEdTVF9ERUJVRyAoImFkZGVkIDFzdCIpOworICBmYWlsX3VubGVzcyAob3ZlcnJ1bl9jb3VudCA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHVuZGVycnVuX2NvdW50ID09IDApOworCisgIGJ1ZmZlcjIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOworICBnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBidWZmZXIyKTsKKworICBHU1RfREVCVUcgKCJhZGRlZCAybmQiKTsKKyAgZmFpbF91bmxlc3MgKG92ZXJydW5fY291bnQgPT0gMCk7CisgIGZhaWxfdW5sZXNzICh1bmRlcnJ1bl9jb3VudCA9PSAwKTsKKworICBidWZmZXIzID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0KTsKKyAgLyogYnVmZmVyMyB3aWxsIGJlIGxlYWtlZCwga2VlcCBhIHJlZiBzbyByZWZjb3VudCBjYW4gYmUgY2hlY2tlZCBiZWxvdyAqLworICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyMyk7CisgIGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGJ1ZmZlcjMpOworCisgIEdTVF9ERUJVRyAoImFkZGVkIDNyZCIpOworICAvKiBpdCBzdGlsbCB0cmlnZ2VycyBvdmVycnVuIHdoZW4gbGVha2luZyAqLworICBmYWlsX3VubGVzcyAob3ZlcnJ1bl9jb3VudCA9PSAxKTsKKyAgZmFpbF91bmxlc3MgKHVuZGVycnVuX2NvdW50ID09IDApOworCisgIC8qIHdhaXQgZm9yIHVuZGVycnVuIGFuZCBjaGVjayB0aGF0IHdlIGdvdCBidWZmZXIxIGFuZCBidWZmZXIyIG9ubHkgKi8KKyAgVU5ERVJSVU5fTE9DSyAoKTsKKyAgbXlzaW5rcGFkID0gc2V0dXBfc2lua19wYWQgKHF1ZXVlLCAmc2lua3RlbXBsYXRlKTsKKyAgVU5ERVJSVU5fV0FJVCAoKTsKKyAgVU5ERVJSVU5fVU5MT0NLICgpOworCisgIGZhaWxfdW5sZXNzIChvdmVycnVuX2NvdW50ID09IDEpOworICBmYWlsX3VubGVzcyAodW5kZXJydW5fY291bnQgPT0gMSk7CisKKyAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpID09IDIpOworCisgIGJ1ZmZlciA9IGdfbGlzdF9udGggKGJ1ZmZlcnMsIDApLT5kYXRhOworICBmYWlsX3VubGVzcyAoYnVmZmVyID09IGJ1ZmZlcjEpOworCisgIGJ1ZmZlciA9IGdfbGlzdF9udGggKGJ1ZmZlcnMsIDEpLT5kYXRhOworICBmYWlsX3VubGVzcyAoYnVmZmVyID09IGJ1ZmZlcjIpOworCisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZmZlcjMsICJidWZmZXIiLCAxKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyMyk7CisKKyAgR1NUX0RFQlVHICgic3RvcHBpbmciKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocXVldWUsCisgICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImNvdWxkIG5vdCBzZXQgdG8gbnVsbCIpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIHNldCBxdWV1ZSBzaXplIHRvIDIgYnVmZmVycworICogcHVzaCAyIGJ1ZmZlcnMKKyAqIGNoZWNrIG92ZXIvdW5kZXJ1bnMKKyAqIHB1c2ggMSBtb3JlIGJ1ZmZlcgorICogY2hlY2sgb3Zlci91bmRlcnVucyBhZ2FpbgorICogY2hlY2sgd2hpY2ggYnVmZmVyIHdhcyBsZWFrZWQKKyAqLworR1NUX1NUQVJUX1RFU1QgKHRlc3RfbGVha3lfZG93bnN0cmVhbSkKK3sKKyAgR3N0QnVmZmVyICpidWZmZXIxOworICBHc3RCdWZmZXIgKmJ1ZmZlcjI7CisgIEdzdEJ1ZmZlciAqYnVmZmVyMzsKKyAgR3N0QnVmZmVyICpidWZmZXI7CisKKyAgZ19zaWduYWxfY29ubmVjdCAocXVldWUsICJvdmVycnVuIiwgR19DQUxMQkFDSyAocXVldWVfb3ZlcnJ1biksIE5VTEwpOworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChxdWV1ZSksICJtYXgtc2l6ZS1idWZmZXJzIiwgMiwgImxlYWt5IiwgMiwgTlVMTCk7CisKKyAgR1NUX0RFQlVHICgic3RhcnRpbmciKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChxdWV1ZSwKKyAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAorICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOworICBmYWlsX3VubGVzcyAob3ZlcnJ1bl9jb3VudCA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHVuZGVycnVuX2NvdW50ID09IDApOworCisgIGJ1ZmZlcjEgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOworICAvKiBidWZmZXIxIHdpbGwgYmUgbGVha2VkLCBrZWVwIGEgcmVmIHNvIHJlZmNvdW50IGNhbiBiZSBjaGVja2VkIGJlbG93ICovCisgIGdzdF9idWZmZXJfcmVmIChidWZmZXIxKTsKKyAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG9uZSByZWZlcmVuY2UgKi8KKyAgZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgYnVmZmVyMSk7CisKKyAgR1NUX0RFQlVHICgiYWRkZWQgMXN0Iik7CisgIGZhaWxfdW5sZXNzIChvdmVycnVuX2NvdW50ID09IDApOworICBmYWlsX3VubGVzcyAodW5kZXJydW5fY291bnQgPT0gMCk7CisKKyAgYnVmZmVyMiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7CisgIGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGJ1ZmZlcjIpOworCisgIEdTVF9ERUJVRyAoImFkZGVkIDJuZCIpOworICBmYWlsX3VubGVzcyAob3ZlcnJ1bl9jb3VudCA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHVuZGVycnVuX2NvdW50ID09IDApOworCisgIGJ1ZmZlcjMgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOworICBnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBidWZmZXIzKTsKKworICBHU1RfREVCVUcgKCJhZGRlZCAzcmQiKTsKKyAgLyogaXQgc3RpbGwgdHJpZ2dlcnMgb3ZlcnJ1biB3aGVuIGxlYWtpbmcgKi8KKyAgZmFpbF91bmxlc3MgKG92ZXJydW5fY291bnQgPT0gMSk7CisgIGZhaWxfdW5sZXNzICh1bmRlcnJ1bl9jb3VudCA9PSAwKTsKKworICAvKiB3YWl0IGZvciB1bmRlcnJ1biBhbmQgY2hlY2sgdGhhdCB3ZSBnb3QgYnVmZmVyMSBhbmQgYnVmZmVyMiBvbmx5ICovCisgIFVOREVSUlVOX0xPQ0sgKCk7CisgIG15c2lua3BhZCA9IHNldHVwX3NpbmtfcGFkIChxdWV1ZSwgJnNpbmt0ZW1wbGF0ZSk7CisgIFVOREVSUlVOX1dBSVQgKCk7CisgIFVOREVSUlVOX1VOTE9DSyAoKTsKKworICBmYWlsX3VubGVzcyAob3ZlcnJ1bl9jb3VudCA9PSAxKTsKKyAgZmFpbF91bmxlc3MgKHVuZGVycnVuX2NvdW50ID09IDEpOworCisgIGZhaWxfdW5sZXNzIChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSA9PSAyKTsKKworICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWZmZXIxLCAiYnVmZmVyIiwgMSk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcjEpOworCisgIGJ1ZmZlciA9IGdfbGlzdF9udGggKGJ1ZmZlcnMsIDApLT5kYXRhOworICBmYWlsX3VubGVzcyAoYnVmZmVyID09IGJ1ZmZlcjIpOworCisgIGJ1ZmZlciA9IGdfbGlzdF9udGggKGJ1ZmZlcnMsIDEpLT5kYXRhOworICBmYWlsX3VubGVzcyAoYnVmZmVyID09IGJ1ZmZlcjMpOworCisgIEdTVF9ERUJVRyAoInN0b3BwaW5nIik7CisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHF1ZXVlLAorICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJjb3VsZCBub3Qgc2V0IHRvIG51bGwiKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiBzZXQgcXVldWUgc2l6ZSB0byA2IGJ1ZmZlcnMgYW5kIDcgc2Vjb25kcworICogcHVzaCA3IGJ1ZmZlcnMgd2l0aCBhbmQgd2l0aG91dCBkdXJhdGlvbgorICogY2hlY2sgY3VycmVudC1sZXZlbC10aW1lCisgKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X3RpbWVfbGV2ZWwpCit7CisgIEdzdEJ1ZmZlciAqYnVmZmVyID0gTlVMTDsKKyAgR3N0Q2xvY2tUaW1lIHRpbWU7CisKKyAgZ19zaWduYWxfY29ubmVjdCAocXVldWUsICJvdmVycnVuIiwKKyAgICAgIEdfQ0FMTEJBQ0sgKHF1ZXVlX292ZXJydW5fbGlua19hbmRfYWN0aXZhdGUpLCBOVUxMKTsKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAocXVldWUpLCAibWF4LXNpemUtYnVmZmVycyIsIDYsIE5VTEwpOworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChxdWV1ZSksICJtYXgtc2l6ZS10aW1lIiwgNyAqIEdTVF9TRUNPTkQsIE5VTEwpOworCisgIEdTVF9ERUJVRyAoInN0YXJ0aW5nIik7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocXVldWUsCisgICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKKyAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKKworICAvKiBwdXNoIGJ1ZmZlciB3aXRob3V0IGR1cmF0aW9uICovCisgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7CisgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gR1NUX1NFQ09ORDsKKyAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAqLworICBnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBidWZmZXIpOworCisgIC8qIGxldmVsIHNob3VsZCBiZSAxIHNlY29uZHMgYmVjYXVzZSBidWZmZXIgaGFzIG5vIGR1cmF0aW9uIGFuZCBzdGFydHMgYXQgMQorICAgKiBTRUNPTkQgKHNwYXJzZSBzdHJlYW0pLiAqLworICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChxdWV1ZSksICJjdXJyZW50LWxldmVsLXRpbWUiLCAmdGltZSwgTlVMTCk7CisgIGZhaWxfaWYgKHRpbWUgIT0gR1NUX1NFQ09ORCk7CisKKyAgLyogc2Vjb25kIHB1c2ggc2hvdWxkIHNldCB0aGUgbGV2ZWwgdG8gMiBzZWNvbmQgKi8KKyAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0KTsKKyAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSAyICogR1NUX1NFQ09ORDsKKyAgZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgYnVmZmVyKTsKKworICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChxdWV1ZSksICJjdXJyZW50LWxldmVsLXRpbWUiLCAmdGltZSwgTlVMTCk7CisgIGZhaWxfaWYgKHRpbWUgIT0gMiAqIEdTVF9TRUNPTkQpOworCisgIC8qIHRoaXJkIHB1c2ggc2hvdWxkIHNldCB0aGUgbGV2ZWwgdG8gNCBzZWNvbmRzLCB0aGUgMSBzZWNvbmQgZGlmZiB3aXRoIHRoZQorICAgKiBwcmV2aW91cyBidWZmZXIgKHdpdGhvdXQgZHVyYXRpb24pIGFuZCB0aGUgMSBzZWNvbmQgZHVyYXRpb24gb2YgdGhpcworICAgKiBidWZmZXIuICovCisgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7CisgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gMyAqIEdTVF9TRUNPTkQ7CisgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgPSAxICogR1NUX1NFQ09ORDsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmZmVyLCAiYnVmZmVyIiwgMSk7CisgIGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGJ1ZmZlcik7CisKKyAgZ19vYmplY3RfZ2V0IChHX09CSkVDVCAocXVldWUpLCAiY3VycmVudC1sZXZlbC10aW1lIiwgJnRpbWUsIE5VTEwpOworICBmYWlsX2lmICh0aW1lICE9IDQgKiBHU1RfU0VDT05EKTsKKworICAvKiBmb3VydGggcHVzaCBzaG91bGQgc2V0IHRoZSBsZXZlbCB0byA2IHNlY29uZHMsIHRoZSAyIHNlY29uZCBkaWZmIHdpdGggdGhlCisgICAqIHByZXZpb3VzIGJ1ZmZlciwgc2FtZSBkdXJhdGlvbi4gKi8KKyAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0KTsKKyAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSA1ICogR1NUX1NFQ09ORDsKKyAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9IDEgKiBHU1RfU0VDT05EOworICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWZmZXIsICJidWZmZXIiLCAxKTsKKyAgZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgYnVmZmVyKTsKKworICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChxdWV1ZSksICJjdXJyZW50LWxldmVsLXRpbWUiLCAmdGltZSwgTlVMTCk7CisgIGZhaWxfaWYgKHRpbWUgIT0gNiAqIEdTVF9TRUNPTkQpOworCisgIC8qIGZpZnRoIHB1c2ggc2hvdWxkIG5vdCBhZGp1c3QgdGhlIGxldmVsLCB0aGUgdGltZXN0YW1wIGFuZCBkdXJhdGlvbiBhcmUgdGhlCisgICAqIHNhbWUsIG1lYW5pbmcgdGhlIHByZXZpb3VzIGJ1ZmZlciBkaWQgbm90IHJlYWxseSBoYXZlIGEgZHVyYXRpb24uICovCisgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7CisgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gNSAqIEdTVF9TRUNPTkQ7CisgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgPSAxICogR1NUX1NFQ09ORDsKKyAgZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgYnVmZmVyKTsKKworICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChxdWV1ZSksICJjdXJyZW50LWxldmVsLXRpbWUiLCAmdGltZSwgTlVMTCk7CisgIGZhaWxfaWYgKHRpbWUgIT0gNiAqIEdTVF9TRUNPTkQpOworCisgIC8qIHNpeHRoIHB1c2ggc2hvdWxkIGFkanVzdCB0aGUgbGV2ZWwgd2l0aCAxIHNlY29uZCwgd2Ugbm93IGtub3cgdGhlCisgICAqIHByZXZpb3VzIGJ1ZmZlciBhY3R1YWxseSBoYWQgYSBkdXJhdGlvbiBvZiAyIFNFQ09ORFMgKi8KKyAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0KTsKKyAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSA3ICogR1NUX1NFQ09ORDsKKyAgZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgYnVmZmVyKTsKKworICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChxdWV1ZSksICJjdXJyZW50LWxldmVsLXRpbWUiLCAmdGltZSwgTlVMTCk7CisgIGZhaWxfaWYgKHRpbWUgIT0gNyAqIEdTVF9TRUNPTkQpOworCisgIC8qIGVpZ2h0aCBwdXNoIHNob3VsZCBjYXVzZSBvdmVycnVuICovCisgIGZhaWxfdW5sZXNzIChvdmVycnVuX2NvdW50ID09IDApOworICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOworICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IDggKiBHU1RfU0VDT05EOworICAvKiB0aGUgbmV4dCBjYWxsIHRvIGdzdF9wYWRfcHVzaCB3aWxsIGVtaXQgdGhlIG92ZXJydW4gc2lnbmFsLiBUaGUgc2lnbmFsCisgICAqIGhhbmRsZXIgcXVldWVfb3ZlcnJ1bl9saW5rX2FuZF9hY3RpdmF0ZSgpIChhYm92ZSkgaW5jcmVhc2VzIG92ZXJydW5fY291bnQsCisgICAqIGFjdGl2YXRlcyBhbmQgbGlua3MgbXlzaW5rcGFkLiBUaGUgcXVldWUgdGFzayB0aGVuIGRlcXVldWVzIGEgYnVmZmVyIGFuZAorICAgKiBnc3RfcGFkX3B1c2goKSB3aWxsIHJldHVybi4gKi8KKyAgZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgYnVmZmVyKTsKKworICBmYWlsX3VubGVzcyAob3ZlcnJ1bl9jb3VudCA9PSAxKTsKKworICBHU1RfREVCVUcgKCJzdG9wcGluZyIpOworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChxdWV1ZSwKKyAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IHNldCB0byBudWxsIik7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfdGltZV9sZXZlbF90YXNrX25vdF9zdGFydGVkKQoreworICBHc3RFdmVudCAqZXZlbnQ7CisgIEdzdENsb2NrVGltZSB0aW1lOworICBHc3RTZWdtZW50IHNlZ21lbnQ7CisKKyAgR1NUX0RFQlVHICgic3RhcnRpbmciKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChxdWV1ZSwKKyAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAorICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOworCisgIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOworICBzZWdtZW50LnN0YXJ0ID0gMSAqIEdTVF9TRUNPTkQ7CisgIHNlZ21lbnQuc3RvcCA9IDUgKiBHU1RfU0VDT05EOworICBzZWdtZW50LnRpbWUgPSAwOworICBzZWdtZW50LnBvc2l0aW9uID0gMSAqIEdTVF9TRUNPTkQ7CisKKyAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KTsKKyAgZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZXZlbnQpOworCisgIGdfb2JqZWN0X2dldCAoR19PQkpFQ1QgKHF1ZXVlKSwgImN1cnJlbnQtbGV2ZWwtdGltZSIsICZ0aW1lLCBOVUxMKTsKKyAgZmFpbF9pZiAodGltZSAhPSAwICogR1NUX1NFQ09ORCk7CisKKyAgc2VnbWVudC5iYXNlID0gNCAqIEdTVF9TRUNPTkQ7CisgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCk7CisgIGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGV2ZW50KTsKKworICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChxdWV1ZSksICJjdXJyZW50LWxldmVsLXRpbWUiLCAmdGltZSwgTlVMTCk7CisgIEdTVF9ERUJVRyAoInRpbWUgbm93ICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAodGltZSkpOworICBmYWlsX2lmICh0aW1lICE9IDQgKiBHU1RfU0VDT05EKTsKKworICBHU1RfREVCVUcgKCJzdG9wcGluZyIpOworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChxdWV1ZSwKKyAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IHNldCB0byBudWxsIik7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworI2lmIDAKK3N0YXRpYyBnYm9vbGVhbgorZXZlbnRfZXF1YWxzX25ld3NlZ21lbnQgKEdzdEV2ZW50ICogZXZlbnQsIGdib29sZWFuIHVwZGF0ZSwgZ2RvdWJsZSByYXRlLAorICAgIEdzdEZvcm1hdCBmb3JtYXQsIGdpbnQ2NCBzdGFydCwgZ2ludDY0IHN0b3AsIGdpbnQ2NCBwb3NpdGlvbikKK3sKKyAgZ2Jvb2xlYW4gbnNfdXBkYXRlOworICBnZG91YmxlIG5zX3JhdGUsIG5zX2FyYXRlOworICBHc3RGb3JtYXQgbnNfZm9ybWF0OworICBnaW50NjQgbnNfc3RhcnQ7CisgIGdpbnQ2NCBuc19zdG9wOworICBnaW50NjQgbnNfcG9zaXRpb247CisKKyAgaWYgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgIT0gR1NUX0VWRU5UX1NFR01FTlQpIHsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKworICBnc3RfZXZlbnRfcGFyc2VfbmV3X3NlZ21lbnQgKGV2ZW50LCAmbnNfdXBkYXRlLCAmbnNfcmF0ZSwgJm5zX2FyYXRlLAorICAgICAgJm5zX2Zvcm1hdCwgJm5zX3N0YXJ0LCAmbnNfc3RvcCwgJm5zX3Bvc2l0aW9uKTsKKworICBHU1RfREVCVUcgKCJ1cGRhdGUgJWQsIHJhdGUgJWxmLCBmb3JtYXQgJXMsIHN0YXJ0ICUiIEdTVF9USU1FX0ZPUk1BVAorICAgICAgIiwgc3RvcCAlIiBHU1RfVElNRV9GT1JNQVQgIiwgcG9zaXRpb24gJSIgR1NUX1RJTUVfRk9STUFULCBuc191cGRhdGUsCisgICAgICBuc19yYXRlLCBnc3RfZm9ybWF0X2dldF9uYW1lIChuc19mb3JtYXQpLCBHU1RfVElNRV9BUkdTIChuc19zdGFydCksCisgICAgICBHU1RfVElNRV9BUkdTIChuc19zdG9wKSwgR1NUX1RJTUVfQVJHUyAobnNfcG9zaXRpb24pKTsKKworICByZXR1cm4gKG5zX3VwZGF0ZSA9PSB1cGRhdGUgJiYgbnNfcmF0ZSA9PSByYXRlICYmIG5zX2Zvcm1hdCA9PSBmb3JtYXQgJiYKKyAgICAgIG5zX3N0YXJ0ID09IHN0YXJ0ICYmIG5zX3N0b3AgPT0gc3RvcCAmJiBuc19wb3NpdGlvbiA9PSBwb3NpdGlvbik7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X25ld3NlZ21lbnQpCit7CisgIEdzdEV2ZW50ICpldmVudDsKKyAgR3N0QnVmZmVyICpidWZmZXIxOworICBHc3RCdWZmZXIgKmJ1ZmZlcjI7CisgIEdzdEJ1ZmZlciAqYnVmZmVyOworCisgIGdfc2lnbmFsX2Nvbm5lY3QgKHF1ZXVlLCAib3ZlcnJ1biIsIEdfQ0FMTEJBQ0sgKHF1ZXVlX292ZXJydW4pLCBOVUxMKTsKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAocXVldWUpLCAibWF4LXNpemUtYnVmZmVycyIsIDEsICJtYXgtc2l6ZS10aW1lIiwKKyAgICAgIChndWludDY0KSAwLCAibGVha3kiLCAyLCBOVUxMKTsKKworICBHU1RfREVCVUcgKCJzdGFydGluZyIpOworCisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHF1ZXVlLAorICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCisgICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7CisgIGZhaWxfdW5sZXNzIChvdmVycnVuX2NvdW50ID09IDApOworICBmYWlsX3VubGVzcyAodW5kZXJydW5fY291bnQgPT0gMCk7CisKKyAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X25ld19zZWdtZW50IChGQUxTRSwgMi4wLCAxLjAsIEdTVF9GT1JNQVRfVElNRSwgMCwKKyAgICAgIDIgKiBHU1RfU0VDT05ELCAwKTsKKyAgZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZXZlbnQpOworCisgIEdTVF9ERUJVRyAoImFkZGVkIDFzdCBuZXdzZWdtZW50Iik7CisgIGZhaWxfdW5sZXNzIChvdmVycnVuX2NvdW50ID09IDApOworICBmYWlsX3VubGVzcyAodW5kZXJydW5fY291bnQgPT0gMCk7CisKKyAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X25ld19zZWdtZW50IChGQUxTRSwgMS4wLCAxLjAsIEdTVF9GT1JNQVRfVElNRSwgMCwKKyAgICAgIDMgKiBHU1RfU0VDT05ELCAwKTsKKyAgZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZXZlbnQpOworCisgIEdTVF9ERUJVRyAoImFkZGVkIDJuZCBuZXdzZWdtZW50Iik7CisgIGZhaWxfdW5sZXNzIChvdmVycnVuX2NvdW50ID09IDApOworICBmYWlsX3VubGVzcyAodW5kZXJydW5fY291bnQgPT0gMCk7CisKKyAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X25ld19zZWdtZW50IChGQUxTRSwgMS4wLCAxLjAsIEdTVF9GT1JNQVRfVElNRSwKKyAgICAgIDQgKiBHU1RfU0VDT05ELCA1ICogR1NUX1NFQ09ORCwgNCAqIEdTVF9TRUNPTkQpOworICBnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBldmVudCk7CisKKyAgR1NUX0RFQlVHICgiYWRkZWQgM3JkIG5ld3NlZ21lbnQiKTsKKyAgZmFpbF91bmxlc3MgKG92ZXJydW5fY291bnQgPT0gMCk7CisgIGZhaWxfdW5sZXNzICh1bmRlcnJ1bl9jb3VudCA9PSAwKTsKKworICBidWZmZXIxID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0KTsKKyAgLyogYnVmZmVyMSB3aWxsIGJlIGxlYWtlZCwga2VlcCBhIHJlZiBzbyByZWZjb3VudCBjYW4gYmUgY2hlY2tlZCBiZWxvdyAqLworICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyMSk7CisgIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBvbmUgcmVmZXJlbmNlICovCisgIGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGJ1ZmZlcjEpOworCisgIEdTVF9ERUJVRyAoImFkZGVkIDFzdCBidWZmZXIiKTsKKyAgZmFpbF91bmxlc3MgKG92ZXJydW5fY291bnQgPT0gMCk7CisgIGZhaWxfdW5sZXNzICh1bmRlcnJ1bl9jb3VudCA9PSAwKTsKKworICBidWZmZXIyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0KTsKKyAgLyogbmV4dCBwdXNoIHdpbGwgY2F1c2Ugb3ZlcnJ1biBhbmQgbGVhayBhbGwgbmV3c2VnbWVudCBldmVudHMgYW5kIGJ1ZmZlcjEgKi8KKyAgZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgYnVmZmVyMik7CisKKyAgR1NUX0RFQlVHICgiYWRkZWQgMm5kIGJ1ZmZlciIpOworICAvKiBpdCBzdGlsbCB0cmlnZ2VycyBvdmVycnVuIHdoZW4gbGVha2luZyAqLworICBmYWlsX3VubGVzcyAob3ZlcnJ1bl9jb3VudCA9PSAxKTsKKyAgZmFpbF91bmxlc3MgKHVuZGVycnVuX2NvdW50ID09IDApOworCisgIC8qIHdhaXQgZm9yIHVuZGVycnVuIGFuZCBjaGVjayB0aGF0IHdlIGdvdCBvbmUgYWNjdW11bGF0ZWQgbmV3c2VnbWVudCBldmVudCwKKyAgICogb25lIHJlYWwgbmV3c2VnbWVudCBldmVudCBhbmQgYnVmZmVyMiBvbmx5ICovCisgIFVOREVSUlVOX0xPQ0sgKCk7CisgIG15c2lua3BhZCA9IHNldHVwX3NpbmtfcGFkIChxdWV1ZSwgJnNpbmt0ZW1wbGF0ZSk7CisgIFVOREVSUlVOX1dBSVQgKCk7CisgIFVOREVSUlVOX1VOTE9DSyAoKTsKKworICBmYWlsX3VubGVzcyAob3ZlcnJ1bl9jb3VudCA9PSAxKTsKKyAgZmFpbF91bmxlc3MgKHVuZGVycnVuX2NvdW50ID09IDEpOworCisgIGZhaWxfdW5sZXNzIChnX2xpc3RfbGVuZ3RoIChldmVudHMpID09IDIpOworCisgIGV2ZW50ID0gZ19saXN0X250aCAoZXZlbnRzLCAwKS0+ZGF0YTsKKyAgZmFpbF91bmxlc3MgKGV2ZW50X2VxdWFsc19uZXdzZWdtZW50IChldmVudCwgRkFMU0UsIDEuMCwgR1NUX0ZPUk1BVF9USU1FLCAwLAorICAgICAgICAgIDQgKiBHU1RfU0VDT05ELCAwKSk7CisKKyAgZXZlbnQgPSBnX2xpc3RfbnRoIChldmVudHMsIDEpLT5kYXRhOworICBmYWlsX3VubGVzcyAoZXZlbnRfZXF1YWxzX25ld3NlZ21lbnQgKGV2ZW50LCBGQUxTRSwgMS4wLCBHU1RfRk9STUFUX1RJTUUsCisgICAgICAgICAgNCAqIEdTVF9TRUNPTkQsIDUgKiBHU1RfU0VDT05ELCA0ICogR1NUX1NFQ09ORCkpOworCisgIGZhaWxfdW5sZXNzIChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSA9PSAxKTsKKworICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWZmZXIxLCAiYnVmZmVyIiwgMSk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcjEpOworCisgIGJ1ZmZlciA9IGdfbGlzdF9udGggKGJ1ZmZlcnMsIDApLT5kYXRhOworICBmYWlsX3VubGVzcyAoYnVmZmVyID09IGJ1ZmZlcjIpOworCisgIEdTVF9ERUJVRyAoInN0b3BwaW5nIik7CisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHF1ZXVlLAorICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJjb3VsZCBub3Qgc2V0IHRvIG51bGwiKTsKK30KKworR1NUX0VORF9URVNUOworI2VuZGlmCisKK3N0YXRpYyBTdWl0ZSAqCitxdWV1ZV9zdWl0ZSAodm9pZCkKK3sKKyAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJxdWV1ZSIpOworICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7CisKKyAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7CisgIHRjYXNlX2FkZF9jaGVja2VkX2ZpeHR1cmUgKHRjX2NoYWluLCBzZXR1cCwgY2xlYW51cCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9ub25fbGVha3lfdW5kZXJydW4pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfbm9uX2xlYWt5X292ZXJydW4pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbGVha3lfdXBzdHJlYW0pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbGVha3lfZG93bnN0cmVhbSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF90aW1lX2xldmVsKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3RpbWVfbGV2ZWxfdGFza19ub3Rfc3RhcnRlZCk7CisjaWYgMAorICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbmV3c2VnbWVudCk7CisjZW5kaWYKKworICByZXR1cm4gczsKK30KKworR1NUX0NIRUNLX01BSU4gKHF1ZXVlKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlMi5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvcXVldWUyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc0YjNlYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlMi5jCkBAIC0wLDAgKzEsMjI1IEBACisvKiBHU3RyZWFtZXIgdW5pdCB0ZXN0cyBmb3IgcXVldWUyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgorCitzdGF0aWMgR3N0RWxlbWVudCAqCitzZXR1cF9xdWV1ZTIgKEdzdEVsZW1lbnQgKiBwaXBlLCBHc3RFbGVtZW50ICogaW5wdXQsIEdzdEVsZW1lbnQgKiBvdXRwdXQpCit7CisgIEdzdEVsZW1lbnQgKnF1ZXVlMjsKKyAgR3N0UGFkICpzaW5rcGFkLCAqc3JjcGFkOworCisgIHF1ZXVlMiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInF1ZXVlMiIsIE5VTEwpOworICBmYWlsX3VubGVzcyAocXVldWUyICE9IE5VTEwsICJmYWlsZWQgdG8gY3JlYXRlICdxdWV1ZTInIGVsZW1lbnQiKTsKKworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZSksIHF1ZXVlMik7CisgIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlKSwgaW5wdXQpOworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZSksIG91dHB1dCk7CisKKyAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChxdWV1ZTIsICJzaW5rIik7CisgIGZhaWxfdW5sZXNzIChzaW5rcGFkICE9IE5VTEwsICJmYWlsZWQgdG8gZ2V0IHF1ZXVlMiBzaW5rIHBhZCIpOworCisgIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChpbnB1dCwgInNyYyIpOworICBmYWlsX3VubGVzcyAoc3JjcGFkICE9IE5VTEwsICJmYWlsZWQgdG8gZmluZCBzcmMgcGFkIGZvciBpbnB1dCBlbGVtZW50Iik7CisKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1BBRF9MSU5LX09LLCBnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCkpOworICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKKworICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAocXVldWUyLCAic3JjIik7CisgIGZhaWxfdW5sZXNzIChzcmNwYWQgIT0gTlVMTCk7CisKKyAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChvdXRwdXQsICJzaW5rIik7CisgIGZhaWxfdW5sZXNzIChzaW5rcGFkICE9IE5VTEwsICJmYWlsZWQgdG8gZmluZCBzaW5rIHBhZCBvZiBvdXRwdXQgZWxlbWVudCIpOworCisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9QQURfTElOS19PSywgZ3N0X3BhZF9saW5rIChzcmNwYWQsIHNpbmtwYWQpKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKKworICByZXR1cm4gcXVldWUyOworfQorCitHU1RfU1RBUlRfVEVTVCAodGVzdF9zaW1wbGVfcGlwZWxpbmUpCit7CisgIEdzdEVsZW1lbnQgKnBpcGUsICppbnB1dCwgKm91dHB1dDsKKyAgR3N0TWVzc2FnZSAqbXNnOworCisgIHBpcGUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKKworICBpbnB1dCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGlucHV0ICE9IE5VTEwsICJmYWlsZWQgdG8gY3JlYXRlICdmYWtlc3JjJyBlbGVtZW50Iik7CisgIGdfb2JqZWN0X3NldCAoaW5wdXQsICJudW0tYnVmZmVycyIsIDI1NiwgInNpemV0eXBlIiwgMywgTlVMTCk7CisKKyAgb3V0cHV0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKG91dHB1dCAhPSBOVUxMLCAiZmFpbGVkIHRvIGNyZWF0ZSAnZmFrZXNpbmsnIGVsZW1lbnQiKTsKKworICBzZXR1cF9xdWV1ZTIgKHBpcGUsIGlucHV0LCBvdXRwdXQpOworCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX1BMQVlJTkcpOworCisgIG1zZyA9IGdzdF9idXNfcG9sbCAoR1NUX0VMRU1FTlRfQlVTIChwaXBlKSwKKyAgICAgIEdTVF9NRVNTQUdFX0VPUyB8IEdTVF9NRVNTQUdFX0VSUk9SLCAtMSk7CisKKyAgZmFpbF9pZiAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSA9PSBHU1RfTUVTU0FHRV9FUlJPUiwKKyAgICAgICJFeHBlY3RlZCBFT1MgbWVzc2FnZSwgZ290IEVSUk9SIG1lc3NhZ2UiKTsKKyAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7CisKKyAgR1NUX0xPRyAoIkdvdCBFT1MsIGNsZWFuaW5nIHVwIik7CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfTlVMTCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3NpbXBsZV9waXBlbGluZV9yaW5nYnVmZmVyKQoreworICBHc3RFbGVtZW50ICpwaXBlLCAqcXVldWUyLCAqaW5wdXQsICpvdXRwdXQ7CisgIEdzdE1lc3NhZ2UgKm1zZzsKKworICBwaXBlID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7CisKKyAgaW5wdXQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChpbnB1dCAhPSBOVUxMLCAiZmFpbGVkIHRvIGNyZWF0ZSAnZmFrZXNyYycgZWxlbWVudCIpOworICBnX29iamVjdF9zZXQgKGlucHV0LCAibnVtLWJ1ZmZlcnMiLCAyNTYsICJzaXpldHlwZSIsIDMsIE5VTEwpOworCisgIG91dHB1dCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChvdXRwdXQgIT0gTlVMTCwgImZhaWxlZCB0byBjcmVhdGUgJ2Zha2VzaW5rJyBlbGVtZW50Iik7CisKKyAgcXVldWUyID0gc2V0dXBfcXVldWUyIChwaXBlLCBpbnB1dCwgb3V0cHV0KTsKKyAgZ19vYmplY3Rfc2V0IChxdWV1ZTIsICJyaW5nLWJ1ZmZlci1tYXgtc2l6ZSIsIChndWludDY0KSAxMDI0ICogNTAsIE5VTEwpOworCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX1BMQVlJTkcpOworCisgIG1zZyA9IGdzdF9idXNfcG9sbCAoR1NUX0VMRU1FTlRfQlVTIChwaXBlKSwKKyAgICAgIEdTVF9NRVNTQUdFX0VPUyB8IEdTVF9NRVNTQUdFX0VSUk9SLCAtMSk7CisKKyAgZmFpbF9pZiAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSA9PSBHU1RfTUVTU0FHRV9FUlJPUiwKKyAgICAgICJFeHBlY3RlZCBFT1MgbWVzc2FnZSwgZ290IEVSUk9SIG1lc3NhZ2UiKTsKKyAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7CisKKyAgR1NUX0xPRyAoIkdvdCBFT1MsIGNsZWFuaW5nIHVwIik7CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfTlVMTCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyB2b2lkCitkb190ZXN0X3NpbXBsZV9zaHV0ZG93bl93aGlsZV9ydW5uaW5nIChndWludDY0IHJpbmdfYnVmZmVyX21heF9zaXplKQoreworICBHc3RFbGVtZW50ICpwaXBlLCAqcTI7CisgIEdzdEVsZW1lbnQgKmlucHV0OworICBHc3RFbGVtZW50ICpvdXRwdXQ7CisgIEdzdE1lc3NhZ2UgKm1zZzsKKworICBwaXBlID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7CisKKyAgaW5wdXQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChpbnB1dCAhPSBOVUxMLCAiZmFpbGVkIHRvIGNyZWF0ZSAnZmFrZXNyYycgZWxlbWVudCIpOworICBnX29iamVjdF9zZXQgKGlucHV0LCAiZm9ybWF0IiwgR1NUX0ZPUk1BVF9USU1FLCAic2l6ZXR5cGUiLCAyLAorICAgICAgInNpemVtYXgiLCAxMCwgTlVMTCk7CisKKyAgb3V0cHV0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKG91dHB1dCAhPSBOVUxMLCAiZmFpbGVkIHRvIGNyZWF0ZSAnZmFrZXNpbmsnIGVsZW1lbnQiKTsKKworICBxMiA9IHNldHVwX3F1ZXVlMiAocGlwZSwgaW5wdXQsIG91dHB1dCk7CisKKyAgaWYgKHJpbmdfYnVmZmVyX21heF9zaXplID4gMCkgeworICAgIGdfb2JqZWN0X3NldCAocTIsICJyaW5nLWJ1ZmZlci1tYXgtc2l6ZSIsIHJpbmdfYnVmZmVyX21heF9zaXplLAorICAgICAgICAidGVtcC10ZW1wbGF0ZSIsIE5VTEwsIE5VTEwpOworICB9CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfUEFVU0VEKTsKKworICAvKiB3YWl0IHVudGlsIHBpcGVsaW5lIGlzIHVwIGFuZCBydW5uaW5nICovCisgIG1zZyA9IGdzdF9idXNfcG9sbCAoR1NUX0VMRU1FTlRfQlVTIChwaXBlKSwKKyAgICAgIEdTVF9NRVNTQUdFX0VSUk9SIHwgR1NUX01FU1NBR0VfQVNZTkNfRE9ORSwgLTEpOworICBmYWlsX2lmIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpID09IEdTVF9NRVNTQUdFX0VSUk9SLCAiR290IEVSUk9SIG1lc3NhZ2UiKTsKKyAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7CisKKyAgR1NUX0xPRyAoInBpcGVsaW5lIGlzIHJ1bm5pbmcgbm93Iik7CisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX1BMQVlJTkcpOworICBnX3VzbGVlcCAoR19VU0VDX1BFUl9TRUMgLyAyMCk7CisKKyAgLyogbm93IHNodXQgZG93biBvbmx5IHRoZSBzaW5rLCBzbyB0aGUgcXVldWUgZ2V0cyBhIHdyb25nLXN0YXRlIGZsb3cgcmV0dXJuICovCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAob3V0cHV0LCBHU1RfU1RBVEVfTlVMTCk7CisgIEdTVF9MT0cgKCJDbGVhbmluZyB1cCIpOworCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX05VTEwpOworICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlKTsKK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc2ltcGxlX3NodXRkb3duX3doaWxlX3J1bm5pbmcpCit7CisgIGludCBpOworCisgIC8qIHJ1biBhIGNvdXBsZSBvZiBpdGVyYXRpb25zLCBnaXZlcyBoaWdoZXIgY2hhbmNlIG9mIGRpZmZlcmVudCBjb2RlIHBhdGhzCisgICAqIGJlaW5nIGV4ZWN1dGVkIGF0IHRpbWUgdGhlIGZsdXNoIGlzIGRldGVjdGVkIChlc3AuIHVzZWZ1bCB0byBtYWtlIHN1cmUKKyAgICogdGhpbmdzIGFyZSBjbGVhbmVkIHVwIHByb3Blcmx5IHdoZW4gcnVubmluZyB1bmRlciB2YWxncmluZCkgKi8KKyAgZm9yIChpID0gMDsgaSA8IDEwOyArK2kpIHsKKyAgICBkb190ZXN0X3NpbXBsZV9zaHV0ZG93bl93aGlsZV9ydW5uaW5nICgwKTsKKyAgfQorfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3NpbXBsZV9zaHV0ZG93bl93aGlsZV9ydW5uaW5nX3JpbmdidWZmZXIpCit7CisgIGludCBpOworCisgIC8qIHJ1biBhIGNvdXBsZSBvZiBpdGVyYXRpb25zLCBnaXZlcyBoaWdoZXIgY2hhbmNlIG9mIGRpZmZlcmVudCBjb2RlIHBhdGhzCisgICAqIGJlaW5nIGV4ZWN1dGVkIGF0IHRpbWUgdGhlIGZsdXNoIGlzIGRldGVjdGVkIChlc3AuIHVzZWZ1bCB0byBtYWtlIHN1cmUKKyAgICogdGhpbmdzIGFyZSBjbGVhbmVkIHVwIHByb3Blcmx5IHdoZW4gcnVubmluZyB1bmRlciB2YWxncmluZCkgKi8KKyAgZm9yIChpID0gMDsgaSA8IDEwOyArK2kpIHsKKyAgICBkb190ZXN0X3NpbXBsZV9zaHV0ZG93bl93aGlsZV9ydW5uaW5nICgxMDI0ICogMTAyNCk7CisgIH0KK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9zaW1wbGVfY3JlYXRlX2Rlc3Ryb3kpCit7CisgIEdzdEVsZW1lbnQgKnF1ZXVlMjsKKworICBxdWV1ZTIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJxdWV1ZTIiLCBOVUxMKTsKKyAgZ3N0X29iamVjdF91bnJlZiAocXVldWUyKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgU3VpdGUgKgorcXVldWUyX3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoInF1ZXVlMiIpOworICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7CisKKyAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zaW1wbGVfY3JlYXRlX2Rlc3Ryb3kpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc2ltcGxlX3BpcGVsaW5lKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NpbXBsZV9waXBlbGluZV9yaW5nYnVmZmVyKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NpbXBsZV9zaHV0ZG93bl93aGlsZV9ydW5uaW5nKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NpbXBsZV9zaHV0ZG93bl93aGlsZV9ydW5uaW5nX3JpbmdidWZmZXIpOworICByZXR1cm4gczsKK30KKworR1NUX0NIRUNLX01BSU4gKHF1ZXVlMikKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3NlbGVjdG9yLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9zZWxlY3Rvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZmVlNWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9zZWxlY3Rvci5jCkBAIC0wLDAgKzEsNTk2IEBACisvKiBHU3RyZWFtZXIKKyAqCisgKiBVbml0IHRlc3QgZm9yIHNlbGVjdG9yIHBsdWdpbgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uLiAoY29udGFjdCA8c3RlZmFuLmtvc3RAbm9raWEuY29tPikKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisKKyNkZWZpbmUgTlVNX1NFTEVDVE9SX1BBRFMgNAorI2RlZmluZSBOVU1fSU5QVVRfQlVGRkVSUyA0ICAgICAvLyBidWZmZXJzIHRvIHNlbmQgcGVyIGVhY2ggc2VsZWN0b3IgcGFkCisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAorICAgIEdTVF9QQURfU0lOSywKKyAgICBHU1RfUEFEX0FMV0FZUywKKyAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKKyAgICBHU1RfUEFEX1NSQywKKyAgICBHU1RfUEFEX0FMV0FZUywKKyAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKKworLyogRGF0YSBwcm9iZSBjYiB0byBkcm9wIGV2ZXJ5dGhpbmcgYnV0IGNvdW50IGJ1ZmZlcnMgYW5kIGV2ZW50cyAqLworc3RhdGljIEdzdFByb2JlUmV0dXJuCitwcm9iZV9jYiAoR3N0UGFkICogcGFkLCBHc3RQcm9iZVR5cGUgdHlwZSwgR3N0TWluaU9iamVjdCAqIG9iaiwKKyAgICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIGdpbnQgY291bnQgPSAwOworICBjb25zdCBnY2hhciAqY291bnRfdHlwZSA9IE5VTEw7CisKKyAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgImdvdCBkYXRhIik7CisKKyAgaWYgKEdTVF9JU19CVUZGRVIgKG9iaikpIHsKKyAgICBjb3VudF90eXBlID0gImJ1ZmZlcl9jb3VudCI7CisgIH0gZWxzZSBpZiAoR1NUX0lTX0VWRU5UIChvYmopKSB7CisgICAgY291bnRfdHlwZSA9ICJldmVudF9jb3VudCI7CisgIH0gZWxzZSB7CisgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7CisgIH0KKworICAvKiBpbmNyZW1lbnQgYW5kIHN0b3JlIGNvdW50ICovCisgIGNvdW50ID0gR1BPSU5URVJfVE9fSU5UIChnX29iamVjdF9nZXRfZGF0YSAoR19PQkpFQ1QgKHBhZCksIGNvdW50X3R5cGUpKTsKKyAgY291bnQrKzsKKyAgZ19vYmplY3Rfc2V0X2RhdGEgKEdfT0JKRUNUIChwYWQpLCBjb3VudF90eXBlLCBHSU5UX1RPX1BPSU5URVIgKGNvdW50KSk7CisKKyAgLyogZHJvcCBldmVyeXRoaW5nICovCisgIHJldHVybiBHU1RfUFJPQkVfRFJPUDsKK30KKworLyogQ3JlYXRlIGFuZCBsaW5rIG91dHB1dCBwYWQ6IHNlbGVjdG9yOnNyYyVkICEgb3V0cHV0X3BhZCAqLworc3RhdGljIEdzdFBhZCAqCitzZXR1cF9vdXRwdXRfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGljUGFkVGVtcGxhdGUgKiB0bXBsKQoreworICBHc3RQYWQgKnNyY3BhZCA9IE5VTEwsICpvdXRwdXRfcGFkID0gTlVMTDsKKyAgZ3Vsb25nIHByb2JlX2lkID0gMDsKKworICBpZiAodG1wbCA9PSBOVUxMKQorICAgIHRtcGwgPSAmc2lua3RlbXBsYXRlOworCisgIC8qIGNyZWF0ZSBvdXRwdXRfcGFkICovCisgIG91dHB1dF9wYWQgPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAodG1wbCwgInNpbmsiKTsKKyAgZmFpbF9pZiAob3V0cHV0X3BhZCA9PSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBhIG91dHB1dF9wYWQiKTsKKworICAvKiBhZGQgcHJvYmUgKi8KKyAgcHJvYmVfaWQgPQorICAgICAgZ3N0X3BhZF9hZGRfcHJvYmUgKG91dHB1dF9wYWQsIEdTVF9QUk9CRV9UWVBFX0RBVEEsCisgICAgICAoR3N0UGFkUHJvYmVDYWxsYmFjaykgcHJvYmVfY2IsIE5VTEwsIE5VTEwpOworICBnX29iamVjdF9zZXRfZGF0YSAoR19PQkpFQ1QgKG91dHB1dF9wYWQpLCAicHJvYmVfaWQiLAorICAgICAgR0lOVF9UT19QT0lOVEVSIChwcm9iZV9pZCkpOworCisgIC8qIHJlcXVlc3Qgc3JjIHBhZCAqLworICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKGVsZW1lbnQsICJzcmMlZCIpOworICBmYWlsX2lmIChzcmNwYWQgPT0gTlVMTCwgIkNvdWxkIG5vdCBnZXQgc291cmNlIHBhZCBmcm9tICVzIiwKKyAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKKworICAvKiBsaW5rIHBhZHMgYW5kIGFjdGl2YXRlICovCisgIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHNyY3BhZCwgb3V0cHV0X3BhZCkgPT0gR1NUX1BBRF9MSU5LX09LLAorICAgICAgIkNvdWxkIG5vdCBsaW5rICVzIHNvdXJjZSBhbmQgb3V0cHV0IHBhZCIsIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKKworICBnc3RfcGFkX3NldF9hY3RpdmUgKG91dHB1dF9wYWQsIFRSVUUpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKG91dHB1dF9wYWQsICJzZXQgdXAgJSIgR1NUX1BUUl9GT1JNQVQgIiAhICUiIEdTVF9QVFJfRk9STUFULAorICAgICAgc3JjcGFkLCBvdXRwdXRfcGFkKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmNwYWQsICJzcmNwYWQiLCAxKTsKKworICByZXR1cm4gb3V0cHV0X3BhZDsKK30KKworLyogQ2xlYW4gdXAgb3V0cHV0L2lucHV0IHBhZCBhbmQgcmVzcGVjdGl2ZSBzZWxlY3RvciByZXF1ZXN0IHBhZCAqLworc3RhdGljIHZvaWQKK2NsZWFudXBfcGFkIChHc3RQYWQgKiBwYWQsIEdzdEVsZW1lbnQgKiBlbGVtZW50KQoreworICBHc3RQYWQgKnNlbHBhZCA9IE5VTEw7CisgIGd1aW50IHByb2JlX2lkID0gMDsKKworICBmYWlsX2lmIChwYWQgPT0gTlVMTCwgInBhZCBkb2Vzbid0IGV4aXN0Iik7CisKKyAgLyogcmVtb3ZlIHByb2JlIGlmIG5lY2Vzc2FyeSAqLworICBwcm9iZV9pZCA9IEdQT0lOVEVSX1RPX0lOVCAoZ19vYmplY3RfZ2V0X2RhdGEgKEdfT0JKRUNUIChwYWQpLCAicHJvYmVfaWQiKSk7CisgIGlmIChwcm9iZV9pZCkKKyAgICBnc3RfcGFkX3JlbW92ZV9wcm9iZSAocGFkLCBwcm9iZV9pZCk7CisKKyAgLyogdW5saW5rICovCisgIHNlbHBhZCA9IGdzdF9wYWRfZ2V0X3BlZXIgKHBhZCk7CisgIGlmIChHU1RfUEFEX0RJUkVDVElPTiAoc2VscGFkKSA9PSBHU1RfUEFEX1NSQykgeworICAgIGdzdF9wYWRfdW5saW5rIChzZWxwYWQsIHBhZCk7CisgIH0gZWxzZSB7CisgICAgZ3N0X3BhZF91bmxpbmsgKHBhZCwgc2VscGFkKTsKKyAgfQorCisgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImNsZWFuIHVwICUiIEdTVF9QVFJfRk9STUFUICIgYW5kICAlIiBHU1RfUFRSX0ZPUk1BVCwKKyAgICAgIHNlbHBhZCwgcGFkKTsKKworICAvKiBjbGVhbnVwIHRoZSBwYWQgKi8KKyAgZ3N0X3BhZF9zZXRfYWN0aXZlIChwYWQsIEZBTFNFKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGFkLCAicGFkIiwgMSk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7CisKKyAgLyogY2xlYW51cCBzZWxlY3RvciBwYWQsIHJlZmZlZCBieSB0aGlzIGZ1bmN0aW9uIChfZ2V0X3BlZXIpIGFuZCBjcmVhdG9yICovCisgIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKGVsZW1lbnQsIHNlbHBhZCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNlbHBhZCk7Cit9CisKKy8qIER1cGxpY2F0ZSBhbmQgcHVzaCBnaXZlbiBidWZmZXIgbWFueSB0aW1lcyB0byBhbGwgaW5wdXRfcGFkcyAqLworc3RhdGljIHZvaWQKK3B1c2hfaW5wdXRfYnVmZmVycyAoR0xpc3QgKiBpbnB1dF9wYWRzLCBHc3RCdWZmZXIgKiBidWYsIGdpbnQgbnVtX2J1ZmZlcnMpCit7CisgIEdzdEJ1ZmZlciAqYnVmX2luID0gTlVMTDsKKyAgR0xpc3QgKmwgPSBpbnB1dF9wYWRzOworICBHc3RQYWQgKmlucHV0X3BhZDsKKyAgZ2ludCBpID0gMDsKKworICB3aGlsZSAobCAhPSBOVUxMKSB7CisgICAgaW5wdXRfcGFkID0gbC0+ZGF0YTsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChpbnB1dF9wYWQsICJwdXNoaW5nICVkIGJ1ZmZlcnMgdG8gJSIgR1NUX1BUUl9GT1JNQVQsCisgICAgICAgIG51bV9idWZmZXJzLCBpbnB1dF9wYWQpOworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fYnVmZmVyczsgaSsrKSB7CisgICAgICBidWZfaW4gPSBnc3RfYnVmZmVyX2NvcHkgKGJ1Zik7CisgICAgICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChpbnB1dF9wYWQsIGJ1Zl9pbikgPT0gR1NUX0ZMT1dfT0ssCisgICAgICAgICAgInB1c2hpbmcgYnVmZmVyIGZhaWxlZCIpOworICAgIH0KKyAgICBsID0gZ19saXN0X25leHQgKGwpOworICB9Cit9CisKKy8qIENoZWNrIHRoYXQgcmVjZWl2ZWQgYnVmZmVycyBjb3VudCBtYXRjaCB0byBleHBlY3RlZCBidWZmZXJzICovCitzdGF0aWMgdm9pZAorY291bnRfb3V0cHV0X2J1ZmZlcnMgKEdMaXN0ICogb3V0cHV0X3BhZHMsIGdpbnQgZXhwZWN0ZWRfYnVmZmVycykKK3sKKyAgZ2ludCBjb3VudCA9IDA7CisgIEdMaXN0ICpsID0gb3V0cHV0X3BhZHM7CisgIEdzdFBhZCAqb3V0cHV0X3BhZCA9IE5VTEw7CisKKyAgd2hpbGUgKGwgIT0gTlVMTCkgeworICAgIG91dHB1dF9wYWQgPSBsLT5kYXRhOworICAgIGNvdW50ID0KKyAgICAgICAgR1BPSU5URVJfVE9fSU5UIChnX29iamVjdF9nZXRfZGF0YSAoR19PQkpFQ1QgKG91dHB1dF9wYWQpLAorICAgICAgICAgICAgImJ1ZmZlcl9jb3VudCIpKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUIChvdXRwdXRfcGFkLCAicmVjZWl2ZWQgJWQgYnVmZmVycyIsIGNvdW50KTsKKyAgICBmYWlsX3VubGVzcyAoY291bnQgPT0gZXhwZWN0ZWRfYnVmZmVycywKKyAgICAgICAgInJlY2VpdmVkL2V4cGVjdGVkIGJ1ZmZlciBjb3VudCBkb2Vzbid0IG1hdGNoICVkLyVkIiwgY291bnQsCisgICAgICAgIGV4cGVjdGVkX2J1ZmZlcnMpOworICAgIGNvdW50ID0KKyAgICAgICAgR1BPSU5URVJfVE9fSU5UIChnX29iamVjdF9nZXRfZGF0YSAoR19PQkpFQ1QgKG91dHB1dF9wYWQpLAorICAgICAgICAgICAgImV2ZW50X2NvdW50IikpOworICAgIEdTVF9ERUJVR19PQkpFQ1QgKG91dHB1dF9wYWQsICJyZWNlaXZlZCAlZCBldmVudHMiLCBjb3VudCk7CisgICAgbCA9IGdfbGlzdF9uZXh0IChsKTsKKyAgfQorfQorCisvKiBTZXQgc2VsZWN0b3IgYWN0aXZlIHBhZCAqLworc3RhdGljIHZvaWQKK3NlbGVjdG9yX3NldF9hY3RpdmVfcGFkIChHc3RFbGVtZW50ICogZWxlbSwgR3N0UGFkICogc2VscGFkKQoreworICBnY2hhciAqcGFkbmFtZSA9IE5VTEw7CisKKyAgaWYgKHNlbHBhZCkgeworICAgIHBhZG5hbWUgPSBnc3RfcGFkX2dldF9uYW1lIChzZWxwYWQpOworICB9CisKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZWxlbSksICJhY3RpdmUtcGFkIiwgc2VscGFkLCBOVUxMKTsKKyAgR1NUX0RFQlVHX09CSkVDVCAoZWxlbSwgImFjdGl2YXRlZCBzZWxlY3RvciBwYWQ6ICVzIiwgR1NUX1NUUl9OVUxMIChwYWRuYW1lKSk7CisgIGdfZnJlZSAocGFkbmFtZSk7Cit9CisKKy8qIFB1c2ggYnVmZmVycyBhbmQgc3dpdGNoIGZvciBlYWNoIHNlbGVjdG9yIHBhZCAqLworc3RhdGljIHZvaWQKK3B1c2hfc3dpdGNoZWRfYnVmZmVycyAoR0xpc3QgKiBpbnB1dF9wYWRzLAorICAgIEdzdEVsZW1lbnQgKiBlbGVtLCBHTGlzdCAqIHBlZXJfcGFkcywgZ2ludCBudW1fYnVmZmVycykKK3sKKyAgR3N0QnVmZmVyICpidWYgPSBOVUxMOworICBHc3RDYXBzICpjYXBzID0gTlVMTDsKKyAgR0xpc3QgKmwgPSBwZWVyX3BhZHM7CisgIEdzdFBhZCAqc2VscGFkID0gTlVMTDsKKworICAvKiBzZXR1cCBkdW1teSBidWZmZXIgKi8KKyAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXBwbGljYXRpb24veC11bmtub3duIik7CisgIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMSk7CisKKyAgd2hpbGUgKGwgIT0gTlVMTCkgeworICAgIC8qIHNldCBzZWxlY3RvciBwYWQgKi8KKyAgICBzZWxwYWQgPSBnc3RfcGFkX2dldF9wZWVyIChHU1RfUEFEIChsLT5kYXRhKSk7CisgICAgc2VsZWN0b3Jfc2V0X2FjdGl2ZV9wYWQgKGVsZW0sIHNlbHBhZCk7CisgICAgaWYgKHNlbHBhZCkgeworICAgICAgZ3N0X29iamVjdF91bnJlZiAoc2VscGFkKTsKKyAgICB9CisgICAgLyogcHVzaCBidWZmZXJzICovCisgICAgcHVzaF9pbnB1dF9idWZmZXJzIChpbnB1dF9wYWRzLCBidWYsIG51bV9idWZmZXJzKTsKKyAgICAvKiBzd2l0Y2ggdG8gbmV4dCBzZWxlY3RvciBwYWQgKi8KKyAgICBsID0gZ19saXN0X25leHQgKGwpOworICB9CisKKyAgLyogY2xlYW51cCBidWZmZXIgKi8KKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOworfQorCisvKiBDcmVhdGUgb3V0cHV0LXNlbGVjdG9yIHdpdGggZ2l2ZW4gbnVtYmVyIG9mIHNyYyBwYWRzIGFuZCBzd2l0Y2gKKyAgIGdpdmVuIG51bWJlciBvZiBpbnB1dCBidWZmZXJzIHRvIGVhY2ggc3JjIHBhZC4KKyAqLworc3RhdGljIHZvaWQKK3J1bl9vdXRwdXRfc2VsZWN0b3JfYnVmZmVyX2NvdW50IChnaW50IG51bV9vdXRwdXRfcGFkcywKKyAgICBnaW50IG51bV9idWZmZXJzX3Blcl9vdXRwdXQpCit7CisgIC8qIHNldHVwIGlucHV0X3BhZCAhIHNlbGVjdG9yICEgb3V0cHV0X3BhZHMgKi8KKyAgZ2ludCBpID0gMDsKKyAgR0xpc3QgKm91dHB1dF9wYWRzID0gTlVMTCwgKmlucHV0X3BhZHMgPSBOVUxMOworICBHc3RFbGVtZW50ICpzZWwgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoIm91dHB1dC1zZWxlY3RvciIpOworICBHc3RQYWQgKmlucHV0X3BhZCA9IGdzdF9jaGVja19zZXR1cF9zcmNfcGFkIChzZWwsICZzcmN0ZW1wbGF0ZSwgTlVMTCk7CisKKyAgaW5wdXRfcGFkcyA9IGdfbGlzdF9hcHBlbmQgKGlucHV0X3BhZHMsIGlucHV0X3BhZCk7CisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoaW5wdXRfcGFkLCBUUlVFKTsKKyAgZm9yIChpID0gMDsgaSA8IG51bV9vdXRwdXRfcGFkczsgaSsrKSB7CisgICAgb3V0cHV0X3BhZHMgPSBnX2xpc3RfYXBwZW5kIChvdXRwdXRfcGFkcywgc2V0dXBfb3V0cHV0X3BhZCAoc2VsLCBOVUxMKSk7CisgIH0KKworICAvKiBydW4gdGhlIHRlc3QgKi8KKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2VsLAorICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCisgICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7CisgIHB1c2hfc3dpdGNoZWRfYnVmZmVycyAoaW5wdXRfcGFkcywgc2VsLCBvdXRwdXRfcGFkcywgbnVtX2J1ZmZlcnNfcGVyX291dHB1dCk7CisgIGNvdW50X291dHB1dF9idWZmZXJzIChvdXRwdXRfcGFkcywgbnVtX2J1ZmZlcnNfcGVyX291dHB1dCk7CisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNlbCwKKyAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IHNldCB0byBudWxsIik7CisKKyAgLyogY2xlYW51cCBpbnB1dF9wYWQsIHNlbGVjdG9yIGFuZCBvdXRwdXRfcGFkcyAqLworICBnc3RfcGFkX3NldF9hY3RpdmUgKGlucHV0X3BhZCwgRkFMU0UpOworICBnc3RfY2hlY2tfdGVhcmRvd25fc3JjX3BhZCAoc2VsKTsKKyAgZ19saXN0X2ZvcmVhY2ggKG91dHB1dF9wYWRzLCAoR0Z1bmMpIGNsZWFudXBfcGFkLCBzZWwpOworICBnX2xpc3RfZnJlZSAob3V0cHV0X3BhZHMpOworICBnX2xpc3RfZnJlZSAoaW5wdXRfcGFkcyk7CisgIGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50IChzZWwpOworfQorCisvKiBDcmVhdGUgYW5kIGxpbmsgaW5wdXQgcGFkOiBpbnB1dF9wYWQgISBzZWxlY3RvcjpzaW5rJWQgKi8KK3N0YXRpYyBHc3RQYWQgKgorc2V0dXBfaW5wdXRfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCkKK3sKKyAgR3N0UGFkICpzaW5rcGFkID0gTlVMTCwgKmlucHV0X3BhZCA9IE5VTEw7CisKKyAgLyogY3JlYXRlIGlucHV0X3BhZCAqLworICBpbnB1dF9wYWQgPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJnNyY3RlbXBsYXRlLCAic3JjIik7CisgIGZhaWxfaWYgKGlucHV0X3BhZCA9PSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBhIGlucHV0X3BhZCIpOworCisgIC8qIHJlcXVlc3Qgc2luayBwYWQgKi8KKyAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoZWxlbWVudCwgInNpbmslZCIpOworICBmYWlsX2lmIChzaW5rcGFkID09IE5VTEwsICJDb3VsZCBub3QgZ2V0IHNpbmsgcGFkIGZyb20gJXMiLAorICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOworCisgIC8qIGxpbmsgcGFkcyBhbmQgYWN0aXZhdGUgKi8KKyAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAoaW5wdXRfcGFkLCBzaW5rcGFkKSA9PSBHU1RfUEFEX0xJTktfT0ssCisgICAgICAiQ291bGQgbm90IGxpbmsgaW5wdXRfcGFkIGFuZCAlcyBzaW5rIiwgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOworCisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoaW5wdXRfcGFkLCBUUlVFKTsKKworICBHU1RfREVCVUdfT0JKRUNUIChpbnB1dF9wYWQsICJzZXQgdXAgJSIgR1NUX1BUUl9GT1JNQVQgIiAhICUiIEdTVF9QVFJfRk9STUFULAorICAgICAgaW5wdXRfcGFkLCBzaW5rcGFkKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc2lua3BhZCwgInNpbmtwYWQiLCAxKTsKKworICByZXR1cm4gaW5wdXRfcGFkOworfQorCisvKiBDcmVhdGUgaW5wdXQtc2VsZWN0b3Igd2l0aCBnaXZlbiBudW1iZXIgb2Ygc2luayBwYWRzIGFuZCBzd2l0Y2gKKyAgIGdpdmVuIG51bWJlciBvZiBpbnB1dCBidWZmZXJzIHRvIGVhY2ggc2luayBwYWQuCisgKi8KK3N0YXRpYyB2b2lkCitydW5faW5wdXRfc2VsZWN0b3JfYnVmZmVyX2NvdW50IChnaW50IG51bV9pbnB1dF9wYWRzLAorICAgIGdpbnQgbnVtX2J1ZmZlcnNfcGVyX2lucHV0KQoreworICAvKiBzZXQgdXAgaW5wdXRfcGFkcyAhIHNlbGVjdG9yICEgb3V0cHV0X3BhZCAqLworICBnaW50IGkgPSAwLCBwcm9iZV9pZCA9IDA7CisgIEdMaXN0ICppbnB1dF9wYWRzID0gTlVMTCwgKm91dHB1dF9wYWRzID0gTlVMTDsKKyAgR3N0RWxlbWVudCAqc2VsID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJpbnB1dC1zZWxlY3RvciIpOworICBHc3RQYWQgKm91dHB1dF9wYWQgPSBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQgKHNlbCwgJnNpbmt0ZW1wbGF0ZSwgTlVMTCk7CisKKyAgb3V0cHV0X3BhZHMgPSBnX2xpc3RfYXBwZW5kIChvdXRwdXRfcGFkcywgb3V0cHV0X3BhZCk7CisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAob3V0cHV0X3BhZCwgVFJVRSk7CisgIGZvciAoaSA9IDA7IGkgPCBudW1faW5wdXRfcGFkczsgaSsrKSB7CisgICAgaW5wdXRfcGFkcyA9IGdfbGlzdF9hcHBlbmQgKGlucHV0X3BhZHMsIHNldHVwX2lucHV0X3BhZCAoc2VsKSk7CisgIH0KKyAgLyogYWRkIHByb2JlICovCisgIHByb2JlX2lkID0KKyAgICAgIGdzdF9wYWRfYWRkX3Byb2JlIChvdXRwdXRfcGFkLCBHU1RfUFJPQkVfVFlQRV9EQVRBLAorICAgICAgKEdzdFBhZFByb2JlQ2FsbGJhY2spIHByb2JlX2NiLCBOVUxMLCBOVUxMKTsKKyAgZ19vYmplY3Rfc2V0X2RhdGEgKEdfT0JKRUNUIChvdXRwdXRfcGFkKSwgInByb2JlX2lkIiwKKyAgICAgIEdJTlRfVE9fUE9JTlRFUiAocHJvYmVfaWQpKTsKKworICAvKiBydW4gdGhlIHRlc3QgKi8KKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2VsLAorICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCisgICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7CisgIHB1c2hfc3dpdGNoZWRfYnVmZmVycyAoaW5wdXRfcGFkcywgc2VsLCBpbnB1dF9wYWRzLCBudW1fYnVmZmVyc19wZXJfaW5wdXQpOworICBjb3VudF9vdXRwdXRfYnVmZmVycyAob3V0cHV0X3BhZHMsIChudW1faW5wdXRfcGFkcyAqIG51bV9idWZmZXJzX3Blcl9pbnB1dCkpOworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzZWwsCisgICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImNvdWxkIG5vdCBzZXQgdG8gbnVsbCIpOworCisgIC8qIGNsZWFuIHVwICovCisgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChvdXRwdXRfcGFkLCBwcm9iZV9pZCk7CisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAob3V0cHV0X3BhZCwgRkFMU0UpOworICBnc3RfY2hlY2tfdGVhcmRvd25fc2lua19wYWQgKHNlbCk7CisgIEdTVF9ERUJVRyAoInNldHRpbmcgc2VsZWN0b3IgcGFkIHRvIE5VTEwiKTsKKyAgc2VsZWN0b3Jfc2V0X2FjdGl2ZV9wYWQgKHNlbCwgTlVMTCk7ICAvLyB1bnJlZiBpbnB1dC1zZWxlY3RvciBhY3RpdmUgcGFkCisgIGdfbGlzdF9mb3JlYWNoIChpbnB1dF9wYWRzLCAoR0Z1bmMpIGNsZWFudXBfcGFkLCBzZWwpOworICBnX2xpc3RfZnJlZSAoaW5wdXRfcGFkcyk7CisgIGdfbGlzdF9mcmVlIChvdXRwdXRfcGFkcyk7CisgIGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50IChzZWwpOworfQorCisvKiBQdXNoIGJ1ZmZlcnMgdG8gaW5wdXQgcGFkIGFuZCBjaGVjayB0aGUgCisgICBhbW91bnQgb2YgYnVmZmVycyBhcnJpdmVkIHRvIG91dHB1dCBwYWRzICovCitHU1RfU1RBUlRfVEVTVCAodGVzdF9vdXRwdXRfc2VsZWN0b3JfYnVmZmVyX2NvdW50KTsKK3sKKyAgZ2ludCBpLCBqOworCisgIGZvciAoaSA9IDA7IGkgPCBOVU1fU0VMRUNUT1JfUEFEUzsgaSsrKSB7CisgICAgZm9yIChqID0gMDsgaiA8IE5VTV9JTlBVVF9CVUZGRVJTOyBqKyspIHsKKyAgICAgIHJ1bl9vdXRwdXRfc2VsZWN0b3JfYnVmZmVyX2NvdW50IChpLCBqKTsKKyAgICB9CisgIH0KK30KKworR1NUX0VORF9URVNUOworCisvKiBQdXNoIGJ1ZmZlcnMgdG8gaW5wdXQgcGFkcyBhbmQgY2hlY2sgdGhlIAorICAgYW1vdW50IG9mIGJ1ZmZlcnMgYXJyaXZlZCB0byBvdXRwdXQgcGFkICovCitHU1RfU1RBUlRfVEVTVCAodGVzdF9pbnB1dF9zZWxlY3Rvcl9idWZmZXJfY291bnQpOworeworICBnaW50IGksIGo7CisKKyAgZm9yIChpID0gMDsgaSA8IE5VTV9TRUxFQ1RPUl9QQURTOyBpKyspIHsKKyAgICBmb3IgKGogPSAwOyBqIDwgTlVNX0lOUFVUX0JVRkZFUlM7IGorKykgeworICAgICAgcnVuX2lucHV0X3NlbGVjdG9yX2J1ZmZlcl9jb3VudCAoaSwgaik7CisgICAgfQorICB9Cit9CisKK0dTVF9FTkRfVEVTVDsKKworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9vdXRwdXRfc2VsZWN0b3Jfbm9fc3JjcGFkX25lZ290aWF0aW9uKTsKK3sKKyAgR3N0RWxlbWVudCAqc2VsOworICBHc3RDYXBzICpjYXBzOworICBHc3RQYWQgKnBhZDsKKyAgZ2ludCBpOworCisgIHNlbCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoIm91dHB1dC1zZWxlY3RvciIsIE5VTEwpOworICBmYWlsX3VubGVzcyAoc2VsICE9IE5VTEwpOworCisgIHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzZWwsICJzaW5rIik7CisgIGZhaWxfdW5sZXNzIChwYWQgIT0gTlVMTCk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2VsLAorICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCisgICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7CisKKyAgZm9yIChpID0gMDsgaSA8PSAyOyBpKyspIHsKKworICAgIC8qIHJlZ2FyZGxlc3Mgb2YgcGFkLW5lZ290aWF0aW9uLW1vZGUsIGdldGNhcHMgc2hvdWxkIHJldHVybiBBTlkgYW5kCisgICAgICogc2V0Y2FwcyBzaG91bGQgYWNjZXB0IGFueSBjYXBzIHdoZW4gdGhlcmUgYXJlIG5vIHNyY3BhZHMgKi8KKyAgICBnX29iamVjdF9zZXQgKHNlbCwgInBhZC1uZWdvdGlhdGlvbi1tb2RlIiwgaSwgTlVMTCk7CisKKyAgICBjYXBzID0gZ3N0X3BhZF9nZXRfY2FwcyAocGFkLCBOVUxMKTsKKyAgICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfYW55IChjYXBzKSk7CisKKyAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7CisKKyAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoIm15bWVkaWEvbXljYXBzIiwgTlVMTCk7CisgICAgZmFpbF91bmxlc3MgKGdzdF9wYWRfc2V0X2NhcHMgKHBhZCwgY2FwcykpOworICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKKyAgfQorCisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNlbCwKKyAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IHNldCB0byBudWxsIik7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNlbCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworCitHc3RFbGVtZW50ICpzZWw7CitHc3RQYWQgKmlucHV0X3BhZDsKK0dMaXN0ICpvdXRwdXRfcGFkcyA9IE5VTEw7ICAgICAgLyogbGlzdCBvZiBzaW5rcGFkcyBsaW5rZWQgdG8gb3V0cHV0LXNlbGVjdG9yICovCisjZGVmaW5lIE9VVFBVVF9TRUxFQ1RPUl9OVU1fUEFEUyAyCisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdG1wbF9uZWdvX2EgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAorICAgIEdTVF9QQURfU0lOSywKKyAgICBHU1RfUEFEX0FMV0FZUywKKyAgICBHU1RfU1RBVElDX0NBUFMgKCJmb3JtYXQvYWJjOyBmb3JtYXQveHl6IikpOworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0bXBsX25lZ29fYiA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCisgICAgR1NUX1BBRF9TSU5LLAorICAgIEdTVF9QQURfQUxXQVlTLAorICAgIEdTVF9TVEFUSUNfQ0FQUyAoImZvcm1hdC9hYmMiKSk7CisKK3N0YXRpYyB2b2lkCitzZXR1cF9vdXRwdXRfc2VsZWN0b3IgKHZvaWQpCit7CisgIHNlbCA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgib3V0cHV0LXNlbGVjdG9yIik7CisgIGlucHV0X3BhZCA9IGdzdF9jaGVja19zZXR1cF9zcmNfcGFkIChzZWwsICZzcmN0ZW1wbGF0ZSwgTlVMTCk7CisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoaW5wdXRfcGFkLCBUUlVFKTsKKworICBvdXRwdXRfcGFkcyA9IGdfbGlzdF9hcHBlbmQgKG91dHB1dF9wYWRzLCBzZXR1cF9vdXRwdXRfcGFkIChzZWwsCisgICAgICAgICAgJnNpbmt0bXBsX25lZ29fYSkpOworICBvdXRwdXRfcGFkcyA9IGdfbGlzdF9hcHBlbmQgKG91dHB1dF9wYWRzLCBzZXR1cF9vdXRwdXRfcGFkIChzZWwsCisgICAgICAgICAgJnNpbmt0bXBsX25lZ29fYikpOworfQorCitzdGF0aWMgdm9pZAordGVhcmRvd25fb3V0cHV0X3NlbGVjdG9yICh2b2lkKQoreworICBnc3RfcGFkX3NldF9hY3RpdmUgKGlucHV0X3BhZCwgRkFMU0UpOworICBnc3Rfb2JqZWN0X3VucmVmIChpbnB1dF9wYWQpOworICBnc3RfY2hlY2tfdGVhcmRvd25fc3JjX3BhZCAoc2VsKTsKKyAgZ19saXN0X2ZvcmVhY2ggKG91dHB1dF9wYWRzLCAoR0Z1bmMpIGNsZWFudXBfcGFkLCBzZWwpOworICBnX2xpc3RfZnJlZSAob3V0cHV0X3BhZHMpOworICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAoc2VsKTsKKyAgb3V0cHV0X3BhZHMgPSBOVUxMOworfQorCitHU1RfU1RBUlRfVEVTVCAodGVzdF9vdXRwdXRfc2VsZWN0b3JfZ2V0Y2Fwc19ub25lKTsKK3sKKyAgR0xpc3QgKndhbGtlcjsKKworICAvKiBzZXQgcGFkIG5lZ290aWF0aW9uIG1vZGUgdG8gbm9uZSAqLworICBnX29iamVjdF9zZXQgKHNlbCwgInBhZC1uZWdvdGlhdGlvbi1tb2RlIiwgMCwgTlVMTCk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2VsLAorICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCisgICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7CisKKyAgZm9yICh3YWxrZXIgPSBvdXRwdXRfcGFkczsgd2Fsa2VyOyB3YWxrZXIgPSBnX2xpc3RfbmV4dCAod2Fsa2VyKSkgeworICAgIEdzdENhcHMgKmNhcHM7CisgICAgR3N0UGFkICpwYWQ7CisKKyAgICBwYWQgPSBnc3RfcGFkX2dldF9wZWVyICgoR3N0UGFkICopIHdhbGtlci0+ZGF0YSk7CisKKyAgICBnX29iamVjdF9zZXQgKHNlbCwgImFjdGl2ZS1wYWQiLCBwYWQsIE5VTEwpOworCisgICAgY2FwcyA9IGdzdF9wYWRfcGVlcl9nZXRfY2FwcyAoaW5wdXRfcGFkLCBOVUxMKTsKKworICAgIC8qIGluICdub25lJyBtb2RlLCB0aGUgZ2V0Y2FwcyByZXR1cm5zIHRoZSB0ZW1wbGF0ZSwgd2hpY2ggaXMgQU5ZICovCisgICAgZ19hc3NlcnQgKGdzdF9jYXBzX2lzX2FueSAoY2FwcykpOworICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOworICB9CisKKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2VsLAorICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJjb3VsZCBub3Qgc2V0IHRvIG51bGwiKTsKKworfQorCitHU1RfRU5EX1RFU1Q7CisKKworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfb3V0cHV0X3NlbGVjdG9yX2dldGNhcHNfYWxsKTsKK3sKKyAgR0xpc3QgKndhbGtlcjsKKyAgR3N0Q2FwcyAqZXhwZWN0ZWQ7CisKKyAgLyogc2V0IHBhZCBuZWdvdGlhdGlvbiBtb2RlIHRvICdhbGwnICovCisgIGdfb2JqZWN0X3NldCAoc2VsLCAicGFkLW5lZ290aWF0aW9uLW1vZGUiLCAxLCBOVUxMKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzZWwsCisgICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKKyAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKKworICAvKiBpbiAnYWxsJyBtb2RlLCB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBzcmNwYWQgY2FwcyBzaG91bGQgYmUgcmV0dXJuZWQgb24KKyAgICogdGhlIHNpbmtwYWQncyBnZXRjYXBzICovCisgIGV4cGVjdGVkID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImZvcm1hdC9hYmMiLCBOVUxMKTsKKworICBmb3IgKHdhbGtlciA9IG91dHB1dF9wYWRzOyB3YWxrZXI7IHdhbGtlciA9IGdfbGlzdF9uZXh0ICh3YWxrZXIpKSB7CisgICAgR3N0Q2FwcyAqY2FwczsKKyAgICBHc3RQYWQgKnBhZDsKKworICAgIHBhZCA9IGdzdF9wYWRfZ2V0X3BlZXIgKChHc3RQYWQgKikgd2Fsa2VyLT5kYXRhKTsKKworICAgIGdfb2JqZWN0X3NldCAoc2VsLCAiYWN0aXZlLXBhZCIsIHBhZCwgTlVMTCk7CisKKyAgICBjYXBzID0gZ3N0X3BhZF9wZWVyX2dldF9jYXBzIChpbnB1dF9wYWQsIE5VTEwpOworCisgICAgZ19hc3NlcnQgKGdzdF9jYXBzX2lzX2VxdWFsIChjYXBzLCBleHBlY3RlZCkpOworICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOworICB9CisgIGdzdF9jYXBzX3VucmVmIChleHBlY3RlZCk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2VsLAorICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJjb3VsZCBub3Qgc2V0IHRvIG51bGwiKTsKKworfQorCitHU1RfRU5EX1RFU1Q7CisKKworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfb3V0cHV0X3NlbGVjdG9yX2dldGNhcHNfYWN0aXZlKTsKK3sKKyAgR0xpc3QgKndhbGtlcjsKKyAgR3N0Q2FwcyAqZXhwZWN0ZWQ7CisKKyAgLyogc2V0IHBhZCBuZWdvdGlhdGlvbiBtb2RlIHRvICdhY3RpdmUnICovCisgIGdfb2JqZWN0X3NldCAoc2VsLCAicGFkLW5lZ290aWF0aW9uLW1vZGUiLCAyLCBOVUxMKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzZWwsCisgICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKKyAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKKworICBmb3IgKHdhbGtlciA9IG91dHB1dF9wYWRzOyB3YWxrZXI7IHdhbGtlciA9IGdfbGlzdF9uZXh0ICh3YWxrZXIpKSB7CisgICAgR3N0Q2FwcyAqY2FwczsKKyAgICBHc3RQYWQgKnBhZDsKKworICAgIHBhZCA9IGdzdF9wYWRfZ2V0X3BlZXIgKChHc3RQYWQgKikgd2Fsa2VyLT5kYXRhKTsKKworICAgIGdfb2JqZWN0X3NldCAoc2VsLCAiYWN0aXZlLXBhZCIsIHBhZCwgTlVMTCk7CisKKyAgICAvKiBpbiAnYWN0aXZlJyBtb2RlLCB0aGUgYWN0aXZlIHNyY3BhZCBwZWVyJ3MgY2FwcyBzaG91bGQgYmUgcmV0dXJuZWQgb24KKyAgICAgKiB0aGUgc2lua3BhZCdzIGdldGNhcHMgKi8KKworICAgIGV4cGVjdGVkID0gZ3N0X3BhZF90ZW1wbGF0ZV9nZXRfY2FwcyAoZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlICgoR3N0UGFkICopCisgICAgICAgICAgICB3YWxrZXItPmRhdGEpKTsKKyAgICBjYXBzID0gZ3N0X3BhZF9wZWVyX2dldF9jYXBzIChpbnB1dF9wYWQsIE5VTEwpOworCisgICAgZ19hc3NlcnQgKGdzdF9jYXBzX2lzX2VxdWFsIChjYXBzLCBleHBlY3RlZCkpOworICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKKyAgICBnc3RfY2Fwc191bnJlZiAoZXhwZWN0ZWQpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7CisgIH0KKworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzZWwsCisgICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImNvdWxkIG5vdCBzZXQgdG8gbnVsbCIpOworCit9CisKK0dTVF9FTkRfVEVTVDsKKworCitzdGF0aWMgU3VpdGUgKgorc2VsZWN0b3Jfc3VpdGUgKHZvaWQpCit7CisgIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgic2VsZWN0b3IiKTsKKyAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOworCisgIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfb3V0cHV0X3NlbGVjdG9yX2J1ZmZlcl9jb3VudCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9pbnB1dF9zZWxlY3Rvcl9idWZmZXJfY291bnQpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfb3V0cHV0X3NlbGVjdG9yX25vX3NyY3BhZF9uZWdvdGlhdGlvbik7CisKKyAgdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJvdXRwdXQtc2VsZWN0b3ItbmVnb3RpYXRpb24iKTsKKyAgdGNhc2VfYWRkX2NoZWNrZWRfZml4dHVyZSAodGNfY2hhaW4sIHNldHVwX291dHB1dF9zZWxlY3RvciwKKyAgICAgIHRlYXJkb3duX291dHB1dF9zZWxlY3Rvcik7CisgIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfb3V0cHV0X3NlbGVjdG9yX2dldGNhcHNfbm9uZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9vdXRwdXRfc2VsZWN0b3JfZ2V0Y2Fwc19hbGwpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfb3V0cHV0X3NlbGVjdG9yX2dldGNhcHNfYWN0aXZlKTsKKworICByZXR1cm4gczsKK30KKworR1NUX0NIRUNLX01BSU4gKHNlbGVjdG9yKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3RlZS5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvdGVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMwODQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3RlZS5jCkBAIC0wLDAgKzEsNjE5IEBACisvKiBHU3RyZWFtZXIKKyAqCisgKiB1bml0IHRlc3QgZm9yIHRlZQorICoKKyAqIENvcHlyaWdodCAoQykgPDIwMDc+IFdpbSBUYXltYW5zIDx3aW0gZG90IHRheW1hbnMgYXQgZ21haWwgZG90IGNvbT4KKyAqIENvcHlyaWdodCAoQykgPDIwMDg+IE9sZSBBbmRyw6kgVmFkbGEgUmF2bsOlcyA8b2xlLmFuZHJlLnJhdm5hc0B0YW5kYmVyZy5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDwyMDA4PiBDaHJpc3RpYW4gQmVyZW50c2VuIDxjaHJpc3RpYW4uYmVyZW50c2VuQHRhbmRiZXJnLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisKK3N0YXRpYyB2b2lkCitoYW5kb2ZmIChHc3RFbGVtZW50ICogZmFrZXNpbmssIEdzdEJ1ZmZlciAqIGJ1ZiwgR3N0UGFkICogcGFkLCBndWludCAqIGNvdW50KQoreworICAqY291bnQgPSAqY291bnQgKyAxOworfQorCisvKiBjb25zdHJ1Y3QgZmFrZXNyYyBudW0tYnVmZmVycz0zICEgdGVlIG5hbWU9dCAhIHF1ZXVlICEgZmFrZXNpbmsgdC4gISBxdWV1ZSAhCisgKiBmYWtlc2luay4gRWFjaCBmYWtlc2luayBzaG91bGQgZXhhY3RseSByZWNlaXZlIDMgYnVmZmVycy4KKyAqLworR1NUX1NUQVJUX1RFU1QgKHRlc3RfbnVtX2J1ZmZlcnMpCit7CisjZGVmaW5lIE5VTV9TVUJTVFJFQU1TIDE1CisjZGVmaW5lIE5VTV9CVUZGRVJTIDMKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpzcmMsICp0ZWU7CisgIEdzdEVsZW1lbnQgKnF1ZXVlc1tOVU1fU1VCU1RSRUFNU107CisgIEdzdEVsZW1lbnQgKnNpbmtzW05VTV9TVUJTVFJFQU1TXTsKKyAgR3N0UGFkICpyZXFfcGFkc1tOVU1fU1VCU1RSRUFNU107CisgIGd1aW50IGNvdW50c1tOVU1fU1VCU1RSRUFNU107CisgIEdzdEJ1cyAqYnVzOworICBHc3RNZXNzYWdlICptc2c7CisgIGdpbnQgaTsKKworICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOworICBzcmMgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoImZha2VzcmMiKTsKKyAgZ19vYmplY3Rfc2V0IChzcmMsICJudW0tYnVmZmVycyIsIE5VTV9CVUZGRVJTLCBOVUxMKTsKKyAgdGVlID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJ0ZWUiKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNyYykpOworICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgdGVlKSk7CisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rIChzcmMsIHRlZSkpOworCisgIGZvciAoaSA9IDA7IGkgPCBOVU1fU1VCU1RSRUFNUzsgKytpKSB7CisgICAgR3N0UGFkICpxcGFkOworICAgIGdjaGFyIG5hbWVbMzJdOworCisgICAgY291bnRzW2ldID0gMDsKKworICAgIHF1ZXVlc1tpXSA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgicXVldWUiKTsKKyAgICBnX3NucHJpbnRmIChuYW1lLCAzMiwgInF1ZXVlJWQiLCBpKTsKKyAgICBnc3Rfb2JqZWN0X3NldF9uYW1lIChHU1RfT0JKRUNUIChxdWV1ZXNbaV0pLCBuYW1lKTsKKyAgICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgcXVldWVzW2ldKSk7CisKKyAgICBzaW5rc1tpXSA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgiZmFrZXNpbmsiKTsKKyAgICBnX3NucHJpbnRmIChuYW1lLCAzMiwgInNpbmslZCIsIGkpOworICAgIGdzdF9vYmplY3Rfc2V0X25hbWUgKEdTVF9PQkpFQ1QgKHNpbmtzW2ldKSwgbmFtZSk7CisgICAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNpbmtzW2ldKSk7CisgICAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKHF1ZXVlc1tpXSwgc2lua3NbaV0pKTsKKyAgICBnX29iamVjdF9zZXQgKHNpbmtzW2ldLCAic2lnbmFsLWhhbmRvZmZzIiwgVFJVRSwgTlVMTCk7CisgICAgZ19zaWduYWxfY29ubmVjdCAoc2lua3NbaV0sICJoYW5kb2ZmIiwgKEdDYWxsYmFjaykgaGFuZG9mZiwgJmNvdW50c1tpXSk7CisKKyAgICByZXFfcGFkc1tpXSA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAodGVlLCAic3JjJWQiKTsKKyAgICBmYWlsX3VubGVzcyAocmVxX3BhZHNbaV0gIT0gTlVMTCk7CisKKyAgICBxcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHF1ZXVlc1tpXSwgInNpbmsiKTsKKyAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcGFkX2xpbmsgKHJlcV9wYWRzW2ldLCBxcGFkKSwgR1NUX1BBRF9MSU5LX09LKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChxcGFkKTsKKyAgfQorCisgIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGVsaW5lKTsKKyAgZmFpbF9pZiAoYnVzID09IE5VTEwpOworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7CisKKyAgbXNnID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0VPUyB8IEdTVF9NRVNTQUdFX0VSUk9SLCAtMSk7CisgIGZhaWxfaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgIT0gR1NUX01FU1NBR0VfRU9TKTsKKyAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7CisKKyAgZm9yIChpID0gMDsgaSA8IE5VTV9TVUJTVFJFQU1TOyArK2kpIHsKKyAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChjb3VudHNbaV0sIE5VTV9CVUZGRVJTKTsKKyAgfQorCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKKworICBmb3IgKGkgPSAwOyBpIDwgTlVNX1NVQlNUUkVBTVM7ICsraSkgeworICAgIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKHRlZSwgcmVxX3BhZHNbaV0pOworICAgIGdzdF9vYmplY3RfdW5yZWYgKHJlcV9wYWRzW2ldKTsKKyAgfQorICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogd2UgdXNlIGZha2VzcmMgISB0ZWUgISBmYWtlc2luayBhbmQgdGhlbiByYW5kb21seSByZXF1ZXN0L3JlbGVhc2UgYW5kIGxpbmsKKyAqIHNvbWUgcGFkcyBmcm9tIHRlZS4gVGhpcyBzaG91bGQgaGFwcGlseSBydW4gd2l0aG91dCBhbnkgZXJyb3JzLiAqLworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3RyZXNzKQoreworICBHc3RFbGVtZW50ICpwaXBlbGluZTsKKyAgR3N0RWxlbWVudCAqdGVlOworICBjb25zdCBnY2hhciAqZGVzYzsKKyAgR3N0QnVzICpidXM7CisgIEdzdE1lc3NhZ2UgKm1zZzsKKyAgZ2ludCBpOworCisgIC8qIFB1bXAgMTAwMCBidWZmZXJzICgxMCBieXRlcyBlYWNoKSBwZXIgc2Vjb25kIHRocm91Z2ggdGVlIGZvciA1IHNlY3MgKi8KKyAgZGVzYyA9ICJmYWtlc3JjIGRhdGFyYXRlPTEwMDAwIHNpemVtaW49MTAgc2l6ZW1heD0xMCBudW0tYnVmZmVycz01MDAwICEgIgorICAgICAgInZpZGVvL3gtcmF3LXJnYixmcmFtZXJhdGU9MjUvMSAhIHRlZSBuYW1lPXQgISAiCisgICAgICAicXVldWUgbWF4LXNpemUtYnVmZmVycz0yICEgZmFrZXNpbmsgc3luYz10cnVlIjsKKworICBwaXBlbGluZSA9IGdzdF9wYXJzZV9sYXVuY2ggKGRlc2MsIE5VTEwpOworICBmYWlsX2lmIChwaXBlbGluZSA9PSBOVUxMKTsKKworICB0ZWUgPSBnc3RfYmluX2dldF9ieV9uYW1lIChHU1RfQklOIChwaXBlbGluZSksICJ0Iik7CisgIGZhaWxfaWYgKHRlZSA9PSBOVUxMKTsKKworICAvKiBicmluZyB0aGUgcGlwZWxpbmUgdG8gUExBWUlORywgdGhlbiBzdGFydCBzd2l0Y2hpbmcgKi8KKyAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAocGlwZWxpbmUpOworICBmYWlsX2lmIChidXMgPT0gTlVMTCk7CisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgLyogV2FpdCBmb3IgdGhlIHBpcGVsaW5lIHRvIGhpdCBwbGF5aW5nIHNvIHRoYXQgcGFyc2VfbGF1bmNoIGNhbiBkbyB0aGUKKyAgICogaW5pdGlhbCBsaW5rLCBvdGhlcndpc2Ugd2UgcGVyZm9ybSBsaW5raW5nIGZyb20gbXVsdGlwbGUgdGhyZWFkcyBhbmQgY2F1c2UKKyAgICogdHJvdWJsZSAqLworICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKworICBmb3IgKGkgPSAwOyBpIDwgNTAwMDA7IGkrKykgeworICAgIEdzdFBhZCAqcGFkOworCisgICAgcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkICh0ZWUsICJzcmMlZCIpOworICAgIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKHRlZSwgcGFkKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOworCisgICAgaWYgKChtc2cgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfRU9TIHwgR1NUX01FU1NBR0VfRVJST1IsIDApKSkKKyAgICAgIGJyZWFrOworICB9CisKKyAgLyogbm93IHdhaXQgZm9yIGNvbXBsZXRpb24gb3IgZXJyb3IgKi8KKyAgaWYgKG1zZyA9PSBOVUxMKQorICAgIG1zZyA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9FT1MgfCBHU1RfTUVTU0FHRV9FUlJPUiwgLTEpOworICBmYWlsX2lmIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpICE9IEdTVF9NRVNTQUdFX0VPUyk7CisgIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOworCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKKyAgZ3N0X29iamVjdF91bnJlZiAodGVlKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKKyAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIEdzdEVsZW1lbnQgKnRlZTsKKyAgR3N0Q2FwcyAqY2FwczsKKyAgR3N0UGFkICpzdGFydF9zcmNwYWQ7CisgIEdzdFBhZCAqdGVlX3NpbmtwYWQ7CisgIEdzdFBhZCAqdGVlX3NyY3BhZDsKKyAgR3N0UGFkICpmaW5hbF9zaW5rcGFkOworICBHVGhyZWFkICphcHBfdGhyZWFkOworICBnaW50IGNvdW50ZG93bjsKKyAgZ2Jvb2xlYW4gYXBwX3RocmVhZF9wcmVwcGVkOworICBnYm9vbGVhbiBidWZmZXJhbGxvY19ibG9ja2VkOworfSBCdWZmZXJBbGxvY0hhcm5lc3M7CisKK3N0YXRpYyB2b2lkCitidWZmZXJfYWxsb2NfaGFybmVzc19zZXR1cCAoQnVmZmVyQWxsb2NIYXJuZXNzICogaCwgZ2ludCBjb3VudGRvd24pCit7CisgIGgtPnRlZSA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgidGVlIik7CisgIGZhaWxfaWYgKGgtPnRlZSA9PSBOVUxMKTsKKworICBoLT5jb3VudGRvd24gPSBjb3VudGRvd247CisKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChoLT50ZWUsIEdTVF9TVEFURV9QTEFZSU5HKSwKKyAgICAgIFRSVUUpOworCisgIGgtPmNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1yYXcteXV2IiwgTlVMTCk7CisKKyAgaC0+c3RhcnRfc3JjcGFkID0gZ3N0X3BhZF9uZXcgKCJzcmMiLCBHU1RfUEFEX1NSQyk7CisgIGZhaWxfaWYgKGgtPnN0YXJ0X3NyY3BhZCA9PSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wYWRfc2V0X2FjdGl2ZSAoaC0+c3RhcnRfc3JjcGFkLCBUUlVFKSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wYWRfc2V0X2NhcHMgKGgtPnN0YXJ0X3NyY3BhZCwgaC0+Y2FwcykgPT0gVFJVRSk7CisKKyAgaC0+dGVlX3NpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoaC0+dGVlLCAic2luayIpOworICBmYWlsX2lmIChoLT50ZWVfc2lua3BhZCA9PSBOVUxMKTsKKworICBoLT50ZWVfc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChoLT50ZWUsICJzcmMlZCIpOworICBmYWlsX2lmIChoLT50ZWVfc3JjcGFkID09IE5VTEwpOworCisgIGgtPmZpbmFsX3NpbmtwYWQgPSBnc3RfcGFkX25ldyAoInNpbmsiLCBHU1RfUEFEX1NJTkspOworICBmYWlsX2lmIChoLT5maW5hbF9zaW5rcGFkID09IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9zZXRfYWN0aXZlIChoLT5maW5hbF9zaW5rcGFkLCBUUlVFKSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wYWRfc2V0X2NhcHMgKGgtPmZpbmFsX3NpbmtwYWQsIGgtPmNhcHMpID09IFRSVUUpOworICBnX29iamVjdF9zZXRfcWRhdGEgKEdfT0JKRUNUIChoLT5maW5hbF9zaW5rcGFkKSwKKyAgICAgIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgiYnVmZmVyLWFsbG9jLWhhcm5lc3MiKSwgaCk7CisKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3BhZF9saW5rIChoLT5zdGFydF9zcmNwYWQsIGgtPnRlZV9zaW5rcGFkKSwKKyAgICAgIEdTVF9QQURfTElOS19PSyk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9wYWRfbGluayAoaC0+dGVlX3NyY3BhZCwgaC0+ZmluYWxfc2lua3BhZCksCisgICAgICBHU1RfUEFEX0xJTktfT0spOworfQorCitzdGF0aWMgdm9pZAorYnVmZmVyX2FsbG9jX2hhcm5lc3NfdGVhcmRvd24gKEJ1ZmZlckFsbG9jSGFybmVzcyAqIGgpCit7CisgIGlmIChoLT5hcHBfdGhyZWFkKQorICAgIGdfdGhyZWFkX2pvaW4gKGgtPmFwcF90aHJlYWQpOworCisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoaC0+ZmluYWxfc2lua3BhZCwgRkFMU0UpOworICBnc3Rfb2JqZWN0X3VucmVmIChoLT5maW5hbF9zaW5rcGFkKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoaC0+dGVlX3NyY3BhZCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGgtPnRlZV9zaW5rcGFkKTsKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlIChoLT5zdGFydF9zcmNwYWQsIEZBTFNFKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoaC0+c3RhcnRfc3JjcGFkKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGgtPmNhcHMpOworICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAoaC0+dGVlKTsKK30KKworI2lmIDAKK3N0YXRpYyBncG9pbnRlcgorYXBwX3RocmVhZF9mdW5jIChncG9pbnRlciBkYXRhKQoreworICBCdWZmZXJBbGxvY0hhcm5lc3MgKmggPSBkYXRhOworCisgIC8qIFNpZ25hbCB0aGF0IHdlIGFyZSBhYm91dCB0byBjYWxsIHJlbGVhc2VfcmVxdWVzdF9wYWQoKS4gKi8KKyAgZ19tdXRleF9sb2NrIChjaGVja19tdXRleCk7CisgIGgtPmFwcF90aHJlYWRfcHJlcHBlZCA9IFRSVUU7CisgIGdfY29uZF9zaWduYWwgKGNoZWNrX2NvbmQpOworICBnX211dGV4X3VubG9jayAoY2hlY2tfbXV0ZXgpOworCisgIC8qIFNpbXVsYXRlIHRoYXQgdGhlIGFwcCByZWxlYXNlcyB0aGUgcGFkIHdoaWxlIHRoZSBzdHJlYW1pbmcgdGhyZWFkIGlzIGluCisgICAqIGJ1ZmZlcl9hbGxvYyBiZWxvdy4gKi8KKyAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAoaC0+dGVlLCBoLT50ZWVfc3JjcGFkKTsKKworICAvKiBTaWduYWwgdGhlIGJ1ZmZlcmFsbG9jIGZ1bmN0aW9uIGJlbG93IGlmIGl0J3Mgc3RpbGwgd2FpdGluZy4gKi8KKyAgZ19tdXRleF9sb2NrIChjaGVja19tdXRleCk7CisgIGgtPmJ1ZmZlcmFsbG9jX2Jsb2NrZWQgPSBGQUxTRTsKKyAgZ19jb25kX3NpZ25hbCAoY2hlY2tfY29uZCk7CisgIGdfbXV0ZXhfdW5sb2NrIChjaGVja19tdXRleCk7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKworI2lmIDAKK3N0YXRpYyBHc3RGbG93UmV0dXJuCitmaW5hbF9zaW5rcGFkX2J1ZmZlcmFsbG9jIChHc3RQYWQgKiBwYWQsIGd1aW50NjQgb2Zmc2V0LCBndWludCBzaXplLAorICAgIEdzdENhcHMgKiBjYXBzLCBHc3RCdWZmZXIgKiogYnVmKQoreworICBCdWZmZXJBbGxvY0hhcm5lc3MgKmg7CisgIEdUaW1lVmFsIGRlYWRsaW5lOworCisgIGggPSBnX29iamVjdF9nZXRfcWRhdGEgKEdfT0JKRUNUIChwYWQpLAorICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJidWZmZXItYWxsb2MtaGFybmVzcyIpKTsKKyAgZ19hc3NlcnQgKGggIT0gTlVMTCk7CisKKyAgaWYgKC0tKGgtPmNvdW50ZG93bikgPT0gMCkgeworICAgIC8qIFRpbWUgdG8gbWFrZSB0aGUgYXBwIHJlbGVhc2UgdGhlIHBhZC4gKi8KKyAgICBoLT5hcHBfdGhyZWFkX3ByZXBwZWQgPSBGQUxTRTsKKyAgICBoLT5idWZmZXJhbGxvY19ibG9ja2VkID0gVFJVRTsKKworICAgIGgtPmFwcF90aHJlYWQgPSBnX3RocmVhZF9jcmVhdGUgKGFwcF90aHJlYWRfZnVuYywgaCwgVFJVRSwgTlVMTCk7CisgICAgZmFpbF9pZiAoaC0+YXBwX3RocmVhZCA9PSBOVUxMKTsKKworICAgIC8qIFdhaXQgZm9yIHRoZSBhcHAgdGhyZWFkIHRvIGdldCByZWFkeSB0byBjYWxsIHJlbGVhc2VfcmVxdWVzdF9wYWQoKS4gKi8KKyAgICBnX211dGV4X2xvY2sgKGNoZWNrX211dGV4KTsKKyAgICB3aGlsZSAoIWgtPmFwcF90aHJlYWRfcHJlcHBlZCkKKyAgICAgIGdfY29uZF93YWl0IChjaGVja19jb25kLCBjaGVja19tdXRleCk7CisgICAgZ19tdXRleF91bmxvY2sgKGNoZWNrX211dGV4KTsKKworICAgIC8qIE5vdyB3YWl0IGZvciBpdCB0byBkbyB0aGF0IHdpdGhpbiBhIHNlY29uZCwgdG8gYXZvaWQgZGVhZGxvY2tpbmcKKyAgICAgKiBpbiB0aGUgZXZlbnQgb2YgZnV0dXJlIGNoYW5nZXMgdG8gdGhlIGxvY2tpbmcgc2VtYW50aWNzLiAqLworICAgIGdfbXV0ZXhfbG9jayAoY2hlY2tfbXV0ZXgpOworICAgIGdfZ2V0X2N1cnJlbnRfdGltZSAoJmRlYWRsaW5lKTsKKyAgICBkZWFkbGluZS50dl9zZWMgKz0gMTsKKyAgICB3aGlsZSAoaC0+YnVmZmVyYWxsb2NfYmxvY2tlZCkgeworICAgICAgaWYgKCFnX2NvbmRfdGltZWRfd2FpdCAoY2hlY2tfY29uZCwgY2hlY2tfbXV0ZXgsICZkZWFkbGluZSkpCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBnX211dGV4X3VubG9jayAoY2hlY2tfbXV0ZXgpOworICB9CisKKyAgKmJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoc2l6ZSk7CisgIGdzdF9idWZmZXJfc2V0X2NhcHMgKCpidWYsIGNhcHMpOworCisgIHJldHVybiBHU1RfRkxPV19PSzsKK30KKyNlbmRpZgorCisvKiBTaW11bGF0ZSBhbiBhcHAgcmVsZWFzaW5nIHRoZSBwYWQgd2hpbGUgdGhlIGZpcnN0IGFsbG9jX2J1ZmZlcigpIGlzIGluCisgKiBwcm9ncmVzcy4gKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X3JlbGVhc2Vfd2hpbGVfYnVmZmVyX2FsbG9jKQoreworICBCdWZmZXJBbGxvY0hhcm5lc3MgaDsKKworICBidWZmZXJfYWxsb2NfaGFybmVzc19zZXR1cCAoJmgsIDEpOworCisgIGJ1ZmZlcl9hbGxvY19oYXJuZXNzX3RlYXJkb3duICgmaCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogU2ltdWxhdGUgYW4gYXBwIHJlbGVhc2luZyB0aGUgcGFkIHdoaWxlIHRoZSBzZWNvbmQgYWxsb2NfYnVmZmVyKCkgaXMgaW4KKyAqIHByb2dyZXNzLiAqLworR1NUX1NUQVJUX1RFU1QgKHRlc3RfcmVsZWFzZV93aGlsZV9zZWNvbmRfYnVmZmVyX2FsbG9jKQoreworICBCdWZmZXJBbGxvY0hhcm5lc3MgaDsKKworICBidWZmZXJfYWxsb2NfaGFybmVzc19zZXR1cCAoJmgsIDIpOworCisgIGJ1ZmZlcl9hbGxvY19oYXJuZXNzX3RlYXJkb3duICgmaCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogQ2hlY2sgdGhlIGludGVybmFsIHBhZHMgb2YgdGVlICovCitHU1RfU1RBUlRfVEVTVCAodGVzdF9pbnRlcm5hbF9saW5rcykKK3sKKyAgR3N0RWxlbWVudCAqdGVlOworICBHc3RQYWQgKnNpbmtwYWQsICpzcmNwYWQxLCAqc3JjcGFkMjsKKyAgR3N0SXRlcmF0b3IgKml0OworICBHc3RJdGVyYXRvclJlc3VsdCByZXM7CisgIEdWYWx1ZSB2YWwxID0geyAwLCB9CisgICwgdmFsMiA9IHsKKyAgMCx9OworCisgIHRlZSA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgidGVlIik7CisKKyAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkICh0ZWUsICJzaW5rIik7CisgIGZhaWxfdW5sZXNzIChzaW5rcGFkICE9IE5VTEwpOworICBpdCA9IGdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rcyAoc2lua3BhZCk7CisgIGZhaWxfdW5sZXNzIChpdCAhPSBOVUxMKTsKKworICAvKiBpdGVyYXRvciBzaG91bGQgbm90IHJldHVybiBhbnl0aGluZyAqLworICByZXMgPSBnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZ2YWwxKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfSVRFUkFUT1JfRE9ORSk7CisgIGZhaWxfdW5sZXNzIChnX3ZhbHVlX2dldF9vYmplY3QgKCZ2YWwxKSA9PSBOVUxMKTsKKworICBzcmNwYWQxID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkICh0ZWUsICJzcmMlZCIpOworICBmYWlsX3VubGVzcyAoc3JjcGFkMSAhPSBOVUxMKTsKKworICAvKiBpdGVyYXRvciBzaG91bGQgcmVzeW5jICovCisgIHJlcyA9IGdzdF9pdGVyYXRvcl9uZXh0IChpdCwgJnZhbDEpOworICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9JVEVSQVRPUl9SRVNZTkMpOworICBmYWlsX3VubGVzcyAoZ192YWx1ZV9nZXRfb2JqZWN0ICgmdmFsMSkgPT0gTlVMTCk7CisgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0KTsKKworICAvKiB3ZSBzaG91bGQgZ2V0IHNvbWV0aGluZyBub3cgKi8KKyAgcmVzID0gZ3N0X2l0ZXJhdG9yX25leHQgKGl0LCAmdmFsMSk7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0lURVJBVE9SX09LKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9QQURfQ0FTVCAoZ192YWx1ZV9nZXRfb2JqZWN0ICgmdmFsMSkpID09IHNyY3BhZDEpOworCisgIGdfdmFsdWVfcmVzZXQgKCZ2YWwxKTsKKworICByZXMgPSBnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZ2YWwxKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfSVRFUkFUT1JfRE9ORSk7CisgIGZhaWxfdW5sZXNzIChnX3ZhbHVlX2dldF9vYmplY3QgKCZ2YWwxKSA9PSBOVUxMKTsKKworICBzcmNwYWQyID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkICh0ZWUsICJzcmMlZCIpOworICBmYWlsX3VubGVzcyAoc3JjcGFkMiAhPSBOVUxMKTsKKworICAvKiBpdGVyYXRvciBzaG91bGQgcmVzeW5jICovCisgIHJlcyA9IGdzdF9pdGVyYXRvcl9uZXh0IChpdCwgJnZhbDEpOworICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9JVEVSQVRPUl9SRVNZTkMpOworICBmYWlsX3VubGVzcyAoZ192YWx1ZV9nZXRfb2JqZWN0ICgmdmFsMSkgPT0gTlVMTCk7CisgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0KTsKKworICAvKiB3ZSBzaG91bGQgZ2V0IG9uZSBvZiB0aGUgMiBwYWRzIG5vdyAqLworICByZXMgPSBnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZ2YWwxKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfSVRFUkFUT1JfT0spOworICBmYWlsX3VubGVzcyAoR1NUX1BBRF9DQVNUIChnX3ZhbHVlX2dldF9vYmplY3QgKCZ2YWwxKSkgPT0gc3JjcGFkMQorICAgICAgfHwgR1NUX1BBRF9DQVNUIChnX3ZhbHVlX2dldF9vYmplY3QgKCZ2YWwxKSkgPT0gc3JjcGFkMik7CisKKyAgLyogYW5kIHRoZSBvdGhlciAqLworICByZXMgPSBnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZ2YWwyKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfSVRFUkFUT1JfT0spOworICBmYWlsX3VubGVzcyAoR1NUX1BBRF9DQVNUIChnX3ZhbHVlX2dldF9vYmplY3QgKCZ2YWwyKSkgPT0gc3JjcGFkMQorICAgICAgfHwgR1NUX1BBRF9DQVNUIChnX3ZhbHVlX2dldF9vYmplY3QgKCZ2YWwyKSkgPT0gc3JjcGFkMik7CisgIGZhaWxfdW5sZXNzIChnX3ZhbHVlX2dldF9vYmplY3QgKCZ2YWwxKSAhPSBnX3ZhbHVlX2dldF9vYmplY3QgKCZ2YWwyKSk7CisgIGdfdmFsdWVfcmVzZXQgKCZ2YWwxKTsKKyAgZ192YWx1ZV9yZXNldCAoJnZhbDIpOworCisgIHJlcyA9IGdzdF9pdGVyYXRvcl9uZXh0IChpdCwgJnZhbDEpOworICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9JVEVSQVRPUl9ET05FKTsKKyAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X29iamVjdCAoJnZhbDEpID09IE5VTEwpOworCisgIGdzdF9pdGVyYXRvcl9mcmVlIChpdCk7CisKKyAgLyogZ2V0IGFuIGl0ZXJhdG9yIGZvciB0aGUgb3RoZXIgZGlyZWN0aW9uICovCisgIGl0ID0gZ3N0X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzIChzcmNwYWQxKTsKKyAgZmFpbF91bmxlc3MgKGl0ICE9IE5VTEwpOworCisgIHJlcyA9IGdzdF9pdGVyYXRvcl9uZXh0IChpdCwgJnZhbDEpOworICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9JVEVSQVRPUl9PSyk7CisgIGZhaWxfdW5sZXNzIChHU1RfUEFEX0NBU1QgKGdfdmFsdWVfZ2V0X29iamVjdCAoJnZhbDEpKSA9PSBzaW5rcGFkKTsKKyAgZ192YWx1ZV9yZXNldCAoJnZhbDEpOworCisgIHJlcyA9IGdzdF9pdGVyYXRvcl9uZXh0IChpdCwgJnZhbDEpOworICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9JVEVSQVRPUl9ET05FKTsKKyAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKKworICBpdCA9IGdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rcyAoc3JjcGFkMik7CisgIGZhaWxfdW5sZXNzIChpdCAhPSBOVUxMKTsKKworICByZXMgPSBnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZ2YWwxKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfSVRFUkFUT1JfT0spOworICBmYWlsX3VubGVzcyAoR1NUX1BBRF9DQVNUIChnX3ZhbHVlX2dldF9vYmplY3QgKCZ2YWwxKSkgPT0gc2lua3BhZCk7CisgIGdfdmFsdWVfcmVzZXQgKCZ2YWwxKTsKKworICByZXMgPSBnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZ2YWwxKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfSVRFUkFUT1JfRE9ORSk7CisKKyAgZ192YWx1ZV91bnNldCAoJnZhbDEpOworICBnX3ZhbHVlX3Vuc2V0ICgmdmFsMik7CisgIGdzdF9pdGVyYXRvcl9mcmVlIChpdCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZDEpOworICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQyKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHRlZSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIEdzdEZsb3dSZXR1cm4KK19mYWtlX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKK3sKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKyAgcmV0dXJuIEdTVF9GTE9XX09LOworfQorCitzdGF0aWMgR3N0Rmxvd1JldHVybgorX2Zha2VfY2hhaW5fZXJyb3IgKEdzdFBhZCAqIHBhZCwgR3N0QnVmZmVyICogYnVmZmVyKQoreworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2Zsb3dfYWdncmVnYXRpb24pCit7CisgIEdzdFBhZCAqbXlzcmMsICpteXNpbmsxLCAqbXlzaW5rMjsKKyAgR3N0UGFkICp0ZWVzaW5rLCAqdGVlc3JjMSwgKnRlZXNyYzI7CisgIEdzdEVsZW1lbnQgKnRlZTsKKyAgR3N0QnVmZmVyICpidWZmZXI7CisgIEdzdENhcHMgKmNhcHM7CisKKyAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ0ZXN0L3Rlc3QiLCBOVUxMKTsKKworICB0ZWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZWUiLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKHRlZSAhPSBOVUxMKTsKKyAgdGVlc2luayA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkICh0ZWUsICJzaW5rIik7CisgIGZhaWxfdW5sZXNzICh0ZWVzaW5rICE9IE5VTEwpOworICB0ZWVzcmMxID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkICh0ZWUsICJzcmMlZCIpOworICBmYWlsX3VubGVzcyAodGVlc3JjMSAhPSBOVUxMKTsKKyAgdGVlc3JjMiA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAodGVlLCAic3JjJWQiKTsKKyAgZmFpbF91bmxlc3MgKHRlZXNyYzIgIT0gTlVMTCk7CisKKyAgR1NUX0RFQlVHICgiQ3JlYXRpbmcgbXlzaW5rMSIpOworICBteXNpbmsxID0gZ3N0X3BhZF9uZXcgKCJteXNpbmsxIiwgR1NUX1BBRF9TSU5LKTsKKyAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKG15c2luazEsIF9mYWtlX2NoYWluKTsKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmsxLCBUUlVFKTsKKyAgZ3N0X3BhZF9zZXRfY2FwcyAobXlzaW5rMSwgY2Fwcyk7CisKKyAgR1NUX0RFQlVHICgiQ3JlYXRpbmcgbXlzaW5rMiIpOworICBteXNpbmsyID0gZ3N0X3BhZF9uZXcgKCJteXNpbmsyIiwgR1NUX1BBRF9TSU5LKTsKKyAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKG15c2luazIsIF9mYWtlX2NoYWluKTsKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmsyLCBUUlVFKTsKKyAgZ3N0X3BhZF9zZXRfY2FwcyAobXlzaW5rMiwgY2Fwcyk7CisKKyAgR1NUX0RFQlVHICgiQ3JlYXRpbmcgbXlzcmMiKTsKKyAgbXlzcmMgPSBnc3RfcGFkX25ldyAoIm15c3JjIiwgR1NUX1BBRF9TUkMpOworICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjLCBUUlVFKTsKKyAgZ3N0X3BhZF9zZXRfY2FwcyAobXlzcmMsIGNhcHMpOworCisKKyAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAobXlzcmMsIHRlZXNpbmspID09IEdTVF9QQURfTElOS19PSyk7CisgIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHRlZXNyYzEsIG15c2luazEpID09IEdTVF9QQURfTElOS19PSyk7CisgIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHRlZXNyYzIsIG15c2luazIpID09IEdTVF9QQURfTElOS19PSyk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAodGVlLAorICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOworCisgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOworI2lmIDAKKyAgZ3N0X2J1ZmZlcl9zZXRfY2FwcyAoYnVmZmVyLCBjYXBzKTsKKyNlbmRpZgorCisgIEdTVF9ERUJVRyAoIlRyeSB0byBwdXNoIGEgYnVmZmVyIik7CisgIC8qIEZpcnN0IGNoZWNrIGlmIGV2ZXJ5dGhpbmcgd29ya3MgaW4gbm9ybWFsIHN0YXRlICovCisgIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjLCBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKSkgPT0gR1NUX0ZMT1dfT0spOworCisgIC8qIE9uZSBwYWQgYmVpbmcgaW4gd3Jvbmcgc3RhdGUgbXVzdCByZXN1bHQgaW4gd3Jvbmcgc3RhdGUgKi8KKyAgR1NUX0RFQlVHICgiVHJ5aW5nIHRvIHB1c2ggd2l0aCBteXNpbmsyIGRpc2FibGVkIik7CisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rMiwgRkFMU0UpOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyYywKKyAgICAgICAgICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKSkgPT0gR1NUX0ZMT1dfV1JPTkdfU1RBVEUpOworCisgIEdTVF9ERUJVRyAoIlRyeWluZyB0byBwdXNoIHdpdGggbXlzaW5rMiBkaXNhYmxlZCIpOworICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2luazEsIEZBTFNFKTsKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmsyLCBUUlVFKTsKKyAgZ3N0X3BhZF9zZXRfY2FwcyAobXlzaW5rMiwgY2Fwcyk7CisgIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjLAorICAgICAgICAgIGdzdF9idWZmZXJfcmVmIChidWZmZXIpKSA9PSBHU1RfRkxPV19XUk9OR19TVEFURSk7CisKKyAgR1NUX0RFQlVHICgiVHJ5aW5nIHRvIHB1c2ggd2l0aCBteXNpbmsyIGFuZCBteXNpbmsxIGRpc2FibGVkIik7CisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rMiwgRkFMU0UpOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyYywKKyAgICAgICAgICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKSkgPT0gR1NUX0ZMT1dfV1JPTkdfU1RBVEUpOworCisgIC8qIFRlc3QgaWYgZXZlcnl0aGluZyBzdGlsbCB3b3JrcyBpbiBub3JtYWwgc3RhdGUgKi8KKyAgR1NUX0RFQlVHICgiUmVhY3RpdmF0ZSBib3RoIHBhZHMgYW5kIHRyeSBwdXNoaW5nIik7CisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rMSwgVFJVRSk7CisgIGdzdF9wYWRfc2V0X2NhcHMgKG15c2luazEsIGNhcHMpOworICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2luazIsIFRSVUUpOworICBnc3RfcGFkX3NldF9jYXBzIChteXNpbmsyLCBjYXBzKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmMsIGdzdF9idWZmZXJfcmVmIChidWZmZXIpKSA9PSBHU1RfRkxPV19PSyk7CisKKyAgLyogT25lIHVubGlua2VkIHBhZCBtdXN0IHJldHVybiBPSywgdHdvIHVubGlua2VkIHBhZHMgbXVzdCByZXR1cm4gTk9UX0xJTktFRCAqLworICBHU1RfREVCVUcgKCJQdXNoaW5nIHdpdGggbXlzaW5rMSB1bmxpbmtlZCIpOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF91bmxpbmsgKHRlZXNyYzEsIG15c2luazEpID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyYywgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcikpID09IEdTVF9GTE9XX09LKTsKKworICBHU1RfREVCVUcgKCJQdXNoaW5nIHdpdGggbXlzaW5rMiB1bmxpbmtlZCIpOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rICh0ZWVzcmMxLCBteXNpbmsxKSA9PSBHU1RfUEFEX0xJTktfT0spOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF91bmxpbmsgKHRlZXNyYzIsIG15c2luazIpID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyYywgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcikpID09IEdTVF9GTE9XX09LKTsKKworICBHU1RfREVCVUcgKCJQdXNoaW5nIHdpdGggbXlzaW5rMSBBTkQgbXlzaW5rMiB1bmxpbmtlZCIpOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF91bmxpbmsgKHRlZXNyYzEsIG15c2luazEpID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyYywKKyAgICAgICAgICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKSkgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCk7CisKKyAgLyogVGVzdCBpZiBldmVyeXRoaW5nIHN0aWxsIHdvcmtzIGluIG5vcm1hbCBzdGF0ZSAqLworICBHU1RfREVCVUcgKCJSZWxpbmsgYm90aCBwYWRzIGFuZCB0cnkgcHVzaGluZyIpOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rICh0ZWVzcmMxLCBteXNpbmsxKSA9PSBHU1RfUEFEX0xJTktfT0spOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rICh0ZWVzcmMyLCBteXNpbmsyKSA9PSBHU1RfUEFEX0xJTktfT0spOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyYywgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcikpID09IEdTVF9GTE9XX09LKTsKKworICAvKiBPbmUgcGFkIHJldHVybmluZyBFUlJPUiBzaG91bGQgcmVzdWx0IGluIEVSUk9SICovCisgIEdTVF9ERUJVRyAoIlB1c2hpbmcgd2l0aCBteXNpbmsxIHJldHVybmluZyBHU1RfRkxPV19FUlJPUiIpOworICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAobXlzaW5rMSwgX2Zha2VfY2hhaW5fZXJyb3IpOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyYywgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcikpID09IEdTVF9GTE9XX0VSUk9SKTsKKworICBHU1RfREVCVUcgKCJQdXNoaW5nIHdpdGggbXlzaW5rMiByZXR1cm5pbmcgR1NUX0ZMT1dfRVJST1IiKTsKKyAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKG15c2luazEsIF9mYWtlX2NoYWluKTsKKyAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKG15c2luazIsIF9mYWtlX2NoYWluX2Vycm9yKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmMsIGdzdF9idWZmZXJfcmVmIChidWZmZXIpKSA9PSBHU1RfRkxPV19FUlJPUik7CisKKyAgR1NUX0RFQlVHICgiUHVzaGluZyB3aXRoIG15c2luazEgQU5EIG15c2luazIgcmV0dXJuaW5nIEdTVF9GTE9XX0VSUk9SIik7CisgIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChteXNpbmsxLCBfZmFrZV9jaGFpbl9lcnJvcik7CisgIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjLCBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKSkgPT0gR1NUX0ZMT1dfRVJST1IpOworCisgIC8qIEFuZCBub3cgZXZlcnl0aGluZyBzdGlsbCBuZWVkcyB0byB3b3JrICovCisgIEdTVF9ERUJVRyAoIlRyeSBwdXNoaW5nIHdpdGggZXZlcnl0aGluZyBvayIpOworICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAobXlzaW5rMSwgX2Zha2VfY2hhaW4pOworICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAobXlzaW5rMiwgX2Zha2VfY2hhaW4pOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyYywgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcikpID09IEdTVF9GTE9XX09LKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlICh0ZWUsCisgICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9wYWRfdW5saW5rIChteXNyYywgdGVlc2luaykgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfcGFkX3VubGluayAodGVlc3JjMSwgbXlzaW5rMSkgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfcGFkX3VubGluayAodGVlc3JjMiwgbXlzaW5rMikgPT0gVFJVRSk7CisKKworICBnc3Rfb2JqZWN0X3VucmVmICh0ZWVzaW5rKTsKKyAgZ3N0X29iamVjdF91bnJlZiAodGVlc3JjMSk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHRlZXNyYzIpOworICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkICh0ZWUsIHRlZXNyYzEpOworICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkICh0ZWUsIHRlZXNyYzIpOworICBnc3Rfb2JqZWN0X3VucmVmICh0ZWUpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKG15c2luazEpOworICBnc3Rfb2JqZWN0X3VucmVmIChteXNpbmsyKTsKKyAgZ3N0X29iamVjdF91bnJlZiAobXlzcmMpOworICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIFN1aXRlICoKK3RlZV9zdWl0ZSAodm9pZCkKK3sKKyAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJ0ZWUiKTsKKyAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOworCisgIC8qIFNldCB0aGUgdGltZW91dCB0byBhIG11Y2ggbGFyZ2VyIHRpbWUgLSAzIG1pbnV0ZXMgKi8KKyAgdGNhc2Vfc2V0X3RpbWVvdXQgKHRjX2NoYWluLCAxODApOworCisgIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbnVtX2J1ZmZlcnMpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc3RyZXNzKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JlbGVhc2Vfd2hpbGVfYnVmZmVyX2FsbG9jKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JlbGVhc2Vfd2hpbGVfc2Vjb25kX2J1ZmZlcl9hbGxvYyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9pbnRlcm5hbF9saW5rcyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mbG93X2FnZ3JlZ2F0aW9uKTsKKworICByZXR1cm4gczsKK30KKworR1NUX0NIRUNLX01BSU4gKHRlZSk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy92YWx2ZS5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvdmFsdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDk3NmZlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvdmFsdmUuYwpAQCAtMCwwICsxLDExNiBAQAorLyogR1N0cmVhbWVyCisgKgorICogdW5pdCB0ZXN0IGZvciB0aGUgdmFsdmUgZWxlbWVudAorICoKKyAqIENvcHlyaWdodCAyMDA5IENvbGxhYm9yYSBMdGQuCisgKiAgQGF1dGhvcjogT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+CisgKiBDb3B5cmlnaHQgMjAwOSBOb2tpYSBDb3JwLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKKworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCisgICAgR1NUX1BBRF9TSU5LLAorICAgIEdTVF9QQURfQUxXQVlTLAorICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtcmF3LWludCIpKTsKKworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAorICAgIEdTVF9QQURfU1JDLAorICAgIEdTVF9QQURfQUxXQVlTLAorICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtcmF3LWludCIpKTsKKworZ2Jvb2xlYW4gZXZlbnRfcmVjZWl2ZWQgPSBGQUxTRTsKK2dib29sZWFuIGJ1ZmZlcl9hbGxvY2F0ZWQgPSBGQUxTRTsKKworc3RhdGljIGdib29sZWFuCitldmVudF9mdW5jIChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpCit7CisgIGV2ZW50X3JlY2VpdmVkID0gVFJVRTsKKyAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgIHJldHVybiBUUlVFOworfQorCitHU1RfU1RBUlRfVEVTVCAodGVzdF92YWx2ZV9iYXNpYykKK3sKKyAgR3N0RWxlbWVudCAqdmFsdmU7CisgIEdzdFBhZCAqc2luazsKKyAgR3N0UGFkICpzcmM7CisgIEdzdENhcHMgKmNhcHMsICp0ZW1wbF9jYXBzOworCisgIHZhbHZlID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJ2YWx2ZSIpOworCisgIHNpbmsgPSBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWRfYnlfbmFtZSAodmFsdmUsICZzaW5rdGVtcGxhdGUsICJzcmMiKTsKKyAgc3JjID0gZ3N0X2NoZWNrX3NldHVwX3NyY19wYWRfYnlfbmFtZSAodmFsdmUsICZzcmN0ZW1wbGF0ZSwgInNpbmsiKTsKKyAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHNpbmssIGV2ZW50X2Z1bmMpOworICBnc3RfcGFkX3NldF9hY3RpdmUgKHNyYywgVFJVRSk7CisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2luaywgVFJVRSk7CisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAodmFsdmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKKworICBnX29iamVjdF9zZXQgKHZhbHZlLCAiZHJvcCIsIEZBTFNFLCBOVUxMKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmMsIGdzdF9ldmVudF9uZXdfZW9zICgpKSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGV2ZW50X3JlY2VpdmVkID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChzcmMsIGdzdF9idWZmZXJfbmV3ICgpKSA9PSBHU1RfRkxPV19PSyk7CisgIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKHNyYywgZ3N0X2J1ZmZlcl9uZXcgKCkpID09IEdTVF9GTE9XX09LKTsKKyAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpID09IDIpOworICBjYXBzID0gZ3N0X3BhZF9nZXRfY2FwcyAoc3JjLCBOVUxMKTsKKyAgdGVtcGxfY2FwcyA9IGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzIChzcmMpOworICBmYWlsX3VubGVzcyAoY2FwcyAmJiBnc3RfY2Fwc19pc19lcXVhbCAoY2FwcywgdGVtcGxfY2FwcykpOworICBnc3RfY2Fwc191bnJlZiAodGVtcGxfY2Fwcyk7CisgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKKworICBnc3RfY2hlY2tfZHJvcF9idWZmZXJzICgpOworICBldmVudF9yZWNlaXZlZCA9IGJ1ZmZlcl9hbGxvY2F0ZWQgPSBGQUxTRTsKKworICBnX29iamVjdF9zZXQgKHZhbHZlLCAiZHJvcCIsIFRSVUUsIE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmMsIGdzdF9ldmVudF9uZXdfZW9zICgpKSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGV2ZW50X3JlY2VpdmVkID09IEZBTFNFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAoc3JjLCBnc3RfYnVmZmVyX25ldyAoKSkgPT0gR1NUX0ZMT1dfT0spOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChzcmMsIGdzdF9idWZmZXJfbmV3ICgpKSA9PSBHU1RfRkxPV19PSyk7CisgIGZhaWxfdW5sZXNzIChidWZmZXJzID09IE5VTEwpOworICBjYXBzID0gZ3N0X3BhZF9nZXRfY2FwcyAoc3JjLCBOVUxMKTsKKyAgdGVtcGxfY2FwcyA9IGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzIChzcmMpOworICBmYWlsX3VubGVzcyAoY2FwcyAmJiBnc3RfY2Fwc19pc19lcXVhbCAoY2FwcywgdGVtcGxfY2FwcykpOworICBnc3RfY2Fwc191bnJlZiAodGVtcGxfY2Fwcyk7CisgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKKworICBnc3RfcGFkX3NldF9hY3RpdmUgKHNyYywgRkFMU0UpOworICBnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmssIEZBTFNFKTsKKyAgZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQgKHZhbHZlKTsKKyAgZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkICh2YWx2ZSk7CisgIGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50ICh2YWx2ZSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIFN1aXRlICoKK3ZhbHZlX3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoInZhbHZlIik7CisgIFRDYXNlICp0Y19jaGFpbjsKKworICB0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoInZhbHZlX2Jhc2ljIik7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF92YWx2ZV9iYXNpYyk7CisgIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOworCisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAodmFsdmUpCmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmMgYi90ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY0NzQ0MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2dlbmVyaWMvc2lua3MuYwpAQCAtMCwwICsxLDE0MTMgQEAKKy8qIEdTdHJlYW1lcgorICoKKyAqIHVuaXQgdGVzdCBmb3Igc2lua3MKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBXaW0gVGF5bWFucyA8d2ltIGF0IGZsdWVuZG8gZG90IGNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisKK3N0YXRpYyB2b2lkCitwb3Bfc3RhdGVfY2hhbmdlX21lc3NhZ2UgKEdzdEJ1cyAqIGJ1cywgR3N0RWxlbWVudCAqIHNyYywgR3N0U3RhdGUgb2xkLAorICAgIEdzdFN0YXRlIG5ldywgR3N0U3RhdGUgcGVuZGluZykKK3sKKyAgR3N0TWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisgIEdzdFN0YXRlIF9vbGQsIF9uZXcsIF9wZW5kaW5nOworCisgIG1lc3NhZ2UgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCwgR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzIChtZXNzYWdlICE9IE5VTEwsCisgICAgICAiRXhwZWN0ZWQgc3RhdGUgY2hhbmdlIG1lc3NhZ2UsIGJ1dCBnb3Qgbm90aGluZyIpOworCisgIGdzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQgKG1lc3NhZ2UsICZfb2xkLCAmX25ldywgJl9wZW5kaW5nKTsKKworICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSA9PSAoR3N0T2JqZWN0ICopIHNyYywKKyAgICAgICJVbmV4cGVjdGVkIHN0YXRlIGNoYW5nZSBvcmRlciIpOworICBmYWlsX3VubGVzcyAob2xkID09IF9vbGQsICJVbmV4cGVjdGVkIG9sZCBzdGF0ZSIpOworICBmYWlsX3VubGVzcyAobmV3ID09IF9uZXcsICJVbmV4cGVjdGVkIG5ldyBzdGF0ZSIpOworICBmYWlsX3VubGVzcyAocGVuZGluZyA9PSBfcGVuZGluZywgIlVuZXhwZWN0ZWQgcGVuZGluZyBzdGF0ZSIpOworCisgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKK30KKworLyogYSBzaW5rIHNob3VsZCBnbyBBU1lOQyB0byBQQVVTRS4gZm9yY2luZyBQTEFZSU5HIGlzIHBvc3NpYmxlICovCitHU1RfU1RBUlRfVEVTVCAodGVzdF9zaW5rKQoreworICBHc3RFbGVtZW50ICpzaW5rOworICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7CisgIEdzdFN0YXRlIGN1cnJlbnQsIHBlbmRpbmc7CisKKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKKworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNpbmssIEdTVF9TVEFURV9QQVVTRUQpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMsICJubyBhc3luYyBzdGF0ZSByZXR1cm4iKTsKKworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNpbmssIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DLCAibm8gZm9yY2VkIGFzeW5jIHN0YXRlIGNoYW5nZSIpOworCisgIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoc2luaywgJmN1cnJlbnQsICZwZW5kaW5nLCAwKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DLCAibm90IGNoYW5naW5nIHN0YXRlIGFzeW5jIik7CisgIGZhaWxfdW5sZXNzIChjdXJyZW50ID09IEdTVF9TVEFURV9SRUFEWSwgImJhZCBjdXJyZW50IHN0YXRlIik7CisgIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9QTEFZSU5HLCAiYmFkIHBlbmRpbmcgc3RhdGUiKTsKKworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNpbmssIEdTVF9TVEFURV9QQVVTRUQpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMsICJubyBhc3luYyBnb2luZyBiYWNrIHRvIHBhdXNlZCIpOworCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2luaywgR1NUX1NUQVRFX1JFQURZKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJmYWlsZWQgdG8gZ28gdG8gcmVhZHkiKTsKKworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNpbmssIEdTVF9TVEFURV9OVUxMKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJmYWlsZWQgdG8gZ28gdG8gbnVsbCIpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOworfQorCitHU1RfRU5EX1RFU1QKKy8qIGEgc2luayBzaG91bGQgZ28gQVNZTkMgdG8gUEFVU0UgYW5kIFBMQVlJTkcsIHdoZW4gbGlua2luZyBhIHNyYywgaXQKKyAqIHNob3VsZCBjb21wbGV0ZSB0aGUgc3RhdGUgY2hhbmdlLiAqLworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc2lua19jb21wbGV0aW9uKQoreworICBHc3RFbGVtZW50ICpzaW5rLCAqc3JjOworICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7CisgIEdzdFN0YXRlIGN1cnJlbnQsIHBlbmRpbmc7CisKKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc2luayksICJzeW5jIiwgVFJVRSwgTlVMTCk7CisKKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzaW5rLCBHU1RfU1RBVEVfUExBWUlORyk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQywgIm5vIGFzeW5jIHN0YXRlIHJldHVybiIpOworCisgIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoc2luaywgJmN1cnJlbnQsICZwZW5kaW5nLCAwKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DLCAibm90IGNoYW5naW5nIHN0YXRlIGFzeW5jIik7CisgIGZhaWxfdW5sZXNzIChjdXJyZW50ID09IEdTVF9TVEFURV9SRUFEWSwgImJhZCBjdXJyZW50IHN0YXRlIik7CisgIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9QTEFZSU5HLCAiYmFkIHBlbmRpbmcgc3RhdGUiKTsKKworICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYyIpOworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAiZGF0YXJhdGUiLCAyMDAsICJzaXpldHlwZSIsIDIsIE5VTEwpOworICBnc3RfZWxlbWVudF9saW5rIChzcmMsIHNpbmspOworCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3JjLCBHU1RfU1RBVEVfUExBWUlORyk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAibm8gc3VjY2VzcyBzdGF0ZSByZXR1cm4iKTsKKworICAvKiBub3cgd2FpdCBmb3IgZmluYWwgc3RhdGUgKi8KKyAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChzaW5rLCAmY3VycmVudCwgJnBlbmRpbmcsIEdTVF9DTE9DS19USU1FX05PTkUpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImZhaWxlZCB0byBjaGFuZ2Ugc3RhdGUiKTsKKyAgZmFpbF91bmxlc3MgKGN1cnJlbnQgPT0gR1NUX1NUQVRFX1BMQVlJTkcsICJiYWQgY3VycmVudCBzdGF0ZSIpOworICBmYWlsX3VubGVzcyAocGVuZGluZyA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HLCAiYmFkIHBlbmRpbmcgc3RhdGUiKTsKKworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNpbmssIEdTVF9TVEFURV9OVUxMKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJmYWlsZWQgdG8gZ28gdG8gbnVsbCIpOworCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3JjLCBHU1RfU1RBVEVfTlVMTCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiZmFpbGVkIHRvIGdvIHRvIG51bGwiKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc3JjKTsKK30KKworR1NUX0VORF9URVNUCisvKiBhIHNpbmsgc2hvdWxkIGdvIEFTWU5DIHRvIFBBVVNFLiBQQVVTRSBzaG91bGQgY29tcGxldGUgd2hlbgorICogcHJlcm9sbGVkLiAqLworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3JjX3NpbmspCit7CisgIEdzdEVsZW1lbnQgKnNpbmssICpzcmMsICpwaXBlbGluZTsKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OworICBHc3RTdGF0ZSBjdXJyZW50LCBwZW5kaW5nOworICBHc3RQYWQgKnNyY3BhZCwgKnNpbmtwYWQ7CisKKyAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKKyAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzcmMiKTsKKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKKworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMpOworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzaW5rKTsKKworICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7CisgIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc2luaywgInNpbmsiKTsKKyAgZ3N0X3BhZF9saW5rIChzcmNwYWQsIHNpbmtwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKKworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DLCAibm8gYXN5bmMgc3RhdGUgcmV0dXJuIik7CisgIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsIE5VTEwsIE5VTEwsIEdTVF9DTE9DS19USU1FX05PTkUpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIm5vIHN1Y2Nlc3Mgc3RhdGUgcmV0dXJuIik7CisKKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImNhbm5vdCBzdGFydCBwbGF5Iik7CisKKyAgcmV0ID0KKyAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsICZjdXJyZW50LCAmcGVuZGluZywgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAibm90IHBsYXlpbmciKTsKKyAgZmFpbF91bmxlc3MgKGN1cnJlbnQgPT0gR1NUX1NUQVRFX1BMQVlJTkcsICJub3QgcGxheWluZyIpOworICBmYWlsX3VubGVzcyAocGVuZGluZyA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HLCAibm90IHBsYXlpbmciKTsKKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImNhbm5vdCBudWxsIHBpcGVsaW5lIik7CisKKyAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOworCit9CisKK0dTVF9FTkRfVEVTVAorLyogYSBwaXBlbGluZSB3aXRoIGxpdmUgc291cmNlIHNob3VsZCByZXR1cm4gTk9fUFJFUk9MTCBpbgorICogUEFVU0UuIFdoZW4gcmVtb3ZpbmcgdGhlIGxpdmUgc291cmNlIGl0IHNob3VsZCByZXR1cm4gQVNZTkMKKyAqIGZyb20gdGhlIHNpbmsgKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X2xpdmVzcmNfcmVtb3ZlKQoreworICBHc3RFbGVtZW50ICpzaW5rLCAqc3JjLCAqcGlwZWxpbmU7CisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKKyAgR3N0U3RhdGUgY3VycmVudCwgcGVuZGluZzsKKyAgR3N0UGFkICpzcmNwYWQsICpzaW5rcGFkOworCisgIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7CisgIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAic3JjIik7CisgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJpcy1saXZlIiwgVFJVRSwgTlVMTCk7CisgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7CisKKyAgZ3N0X29iamVjdF9yZWYgKHNyYyk7CisgIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNyYyk7CisgIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNpbmspOworCisgIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMsICJzcmMiKTsKKyAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rLCAic2luayIpOworICBnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOworCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCwKKyAgICAgICJubyBub19wcmVyb2xsIHN0YXRlIHJldHVybiIpOworCisgIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoc3JjLCAmY3VycmVudCwgJnBlbmRpbmcsIEdTVF9DTE9DS19USU1FX05PTkUpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCwgIm5vdCBwYXVzZWQiKTsKKyAgZmFpbF91bmxlc3MgKGN1cnJlbnQgPT0gR1NUX1NUQVRFX1BBVVNFRCwgIm5vdCBwYXVzZWQiKTsKKyAgZmFpbF91bmxlc3MgKHBlbmRpbmcgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORywgIm5vdCBwbGF5aW5nIik7CisKKyAgZ3N0X2Jpbl9yZW1vdmUgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjKTsKKworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywgR1NUX1NUQVRFX05VTEwpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImFzeW5jIGdvaW5nIHRvIG51bGwiKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc3JjKTsKKworICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCAmY3VycmVudCwgJnBlbmRpbmcsIDApOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMsICJub3QgYXN5bmMiKTsKKyAgZmFpbF91bmxlc3MgKGN1cnJlbnQgPT0gR1NUX1NUQVRFX1BBVVNFRCwgIm5vdCBwYXVzZWQiKTsKKyAgZmFpbF91bmxlc3MgKHBlbmRpbmcgPT0gR1NUX1NUQVRFX1BBVVNFRCwgIm5vdCBwYXVzZWQiKTsKKworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiYXN5bmMgZ29pbmcgdG8gbnVsbCIpOworICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Cit9CisKK0dTVF9FTkRfVEVTVAorLyogdGhlIHNpbmsgc2hvdWxkIGdvIEFTWU5DIHRvIFBBVVNFLiBUaGUgbGl2ZSBzb3VyY2Ugc2hvdWxkIGdvCisgKiBOT19QUkVST0xMIHRvIFBBVVNFLiB0aGUgcGlwZWxpbmUgcmV0dXJucyBOT19QUkVST0xMLiBBbgorICogYXR0ZW1wdCB0byBnbyB0byBQTEFZSU5HIHdpbGwgcmV0dXJuIEFTWU5DLiBwb2xsaW5nIHN0YXRlCisgKiBjb21wbGV0aW9uIHNob3VsZCByZXR1cm4gU1VDQ0VTUyB3aGVuIHRoZSBzaW5rIGlzIGdvbmUgdG8KKyAqIFBMQVlJTkcuICovCitHU1RfU1RBUlRfVEVTVCAodGVzdF9saXZlc3JjX3NpbmspCit7CisgIEdzdEVsZW1lbnQgKnNpbmssICpzcmMsICpwaXBlbGluZTsKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OworICBHc3RTdGF0ZSBjdXJyZW50LCBwZW5kaW5nOworICBHc3RQYWQgKnNyY3BhZCwgKnNpbmtwYWQ7CisgIEdzdEJ1cyAqYnVzOworCisgIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7CisgIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAic3JjIik7CisgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJpcy1saXZlIiwgVFJVRSwgTlVMTCk7CisgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7CisKKyAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjKTsKKyAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc2luayk7CisKKyAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYywgInNyYyIpOworICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNpbmssICJzaW5rIik7CisgIGdzdF9wYWRfbGluayAoc3JjcGFkLCBzaW5rcGFkKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7CisKKyAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAocGlwZWxpbmUpOworCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCwKKyAgICAgICJubyBub19wcmVyb2xsIHN0YXRlIHJldHVybiIpOworCisgIHBvcF9zdGF0ZV9jaGFuZ2VfbWVzc2FnZSAoYnVzLCBzaW5rLCBHU1RfU1RBVEVfTlVMTCwgR1NUX1NUQVRFX1JFQURZLAorICAgICAgR1NUX1NUQVRFX1ZPSURfUEVORElORyk7CisgIHBvcF9zdGF0ZV9jaGFuZ2VfbWVzc2FnZSAoYnVzLCBzcmMsIEdTVF9TVEFURV9OVUxMLCBHU1RfU1RBVEVfUkVBRFksCisgICAgICBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HKTsKKyAgcG9wX3N0YXRlX2NoYW5nZV9tZXNzYWdlIChidXMsIHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCwgR1NUX1NUQVRFX1JFQURZLAorICAgICAgR1NUX1NUQVRFX1BBVVNFRCk7CisKKyAgLyogdGhpcyBvcmRlciBvbmx5IGhvbGRzIHRydWUgZm9yIGxpdmUgc291cmNlcyBiZWNhdXNlIHRoZXkgZG8gbm90IHB1c2gKKyAgICAgYnVmZmVycyBpbiBQQVVTRUQgKi8KKyAgcG9wX3N0YXRlX2NoYW5nZV9tZXNzYWdlIChidXMsIHNyYywgR1NUX1NUQVRFX1JFQURZLCBHU1RfU1RBVEVfUEFVU0VELAorICAgICAgR1NUX1NUQVRFX1ZPSURfUEVORElORyk7CisgIHBvcF9zdGF0ZV9jaGFuZ2VfbWVzc2FnZSAoYnVzLCBwaXBlbGluZSwgR1NUX1NUQVRFX1JFQURZLCBHU1RfU1RBVEVfUEFVU0VELAorICAgICAgR1NUX1NUQVRFX1ZPSURfUEVORElORyk7CisKKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMLAorICAgICAgIm5vIG5vX3ByZXJvbGwgc3RhdGUgcmV0dXJuIHRoZSBzZWNvbmQgdGltZSIpOworCisgIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoc3JjLCAmY3VycmVudCwgJnBlbmRpbmcsIEdTVF9DTE9DS19USU1FX05PTkUpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCwgIm5vdCBwYXVzZWQiKTsKKyAgZmFpbF91bmxlc3MgKGN1cnJlbnQgPT0gR1NUX1NUQVRFX1BBVVNFRCwgIm5vdCBwYXVzZWQiKTsKKyAgZmFpbF91bmxlc3MgKHBlbmRpbmcgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORywgIm5vdCBwbGF5aW5nIik7CisKKyAgLyogZG9uJ3QgYmxvY2sgaGVyZSAqLworICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHNpbmssICZjdXJyZW50LCAmcGVuZGluZywgMCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQywgIm5vdCBhc3luYyIpOworICBmYWlsX3VubGVzcyAoY3VycmVudCA9PSBHU1RfU1RBVEVfUkVBRFksICJub3QgcmVhZHkiKTsKKyAgZmFpbF91bmxlc3MgKHBlbmRpbmcgPT0gR1NUX1NUQVRFX1BBVVNFRCwgIm5vdCBwYXVzZWQiKTsKKworICByZXQgPQorICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgJmN1cnJlbnQsICZwZW5kaW5nLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwsICJub3QgcGF1c2VkIik7CisgIGZhaWxfdW5sZXNzIChjdXJyZW50ID09IEdTVF9TVEFURV9QQVVTRUQsICJub3QgcGF1c2VkIik7CisgIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcsICJub3QgcGxheWluZyIpOworCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DLCAibm90IGFzeW5jIik7CisgIHJldCA9CisgICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCAmY3VycmVudCwgJnBlbmRpbmcsIEdTVF9DTE9DS19USU1FX05PTkUpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIm5vdCBwbGF5aW5nIik7CisgIGZhaWxfdW5sZXNzIChjdXJyZW50ID09IEdTVF9TVEFURV9QTEFZSU5HLCAibm90IHBsYXlpbmciKTsKKyAgZmFpbF91bmxlc3MgKHBlbmRpbmcgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORywgIm5vdCBwbGF5aW5nIik7CisKKyAgLyogbm93IHdlIGhhdmUgZm91ciBtZXNzYWdlcyBvbiB0aGUgYnVzOiBzcmMgZnJvbSBwYXVzZWQgdG8gcGxheWluZywgc2luayBmcm9tCisgICAgIHJlYWR5IHRvIHBhdXNlZCBhbmQgcGF1c2VkIHRvIHBsYXlpbmcsIGFuZCBwaXBlbGluZSBmcm9tIHBhdXNlZCB0byBwbGF5aW5nLgorICAgICB0aGUgcGlwZWxpbmUgbWVzc2FnZSBzaG91bGQgYmUgbGFzdCwgYW5kIHRoZSBzaW5rIG1lc3NhZ2VzIHNob3VsZCBnbyBpbgorICAgICBvcmRlciwgYnV0IHRoZSBzcmMgbWVzc2FnZSBjYW4gYmUgaW50ZXJsZWF2ZWQgd2l0aCB0aGUgc2luayBvbmUuICovCisgIHsKKyAgICBHc3RNZXNzYWdlICptOworICAgIEdzdFN0YXRlIG9sZCwgbmV3LCBwZW5kaW5nOworICAgIGdpbnQgbl9zcmMgPSAxLCBuX3NpbmsgPSAyOworCisgICAgd2hpbGUgKG5fc3JjICsgbl9zaW5rID4gMCkgeworICAgICAgbSA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VELCBHU1RfU0VDT05EKTsKKyAgICAgIGZhaWxfdW5sZXNzIChtICE9IE5VTEwsICJleHBlY3RlZCBzdGF0ZSBjaGFuZ2UgbWVzc2FnZSIpOworICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZCAobSwgJm9sZCwgJm5ldywgJnBlbmRpbmcpOworICAgICAgaWYgKEdTVF9NRVNTQUdFX1NSQyAobSkgPT0gKEdzdE9iamVjdCAqKSBzcmMpIHsKKyAgICAgICAgZmFpbF91bmxlc3MgKG5fc3JjID09IDEsICJhbHJlYWR5IGdvdCBvbmUgbWVzc2FnZSBmcm9tIHRoZSBzcmMiKTsKKyAgICAgICAgbl9zcmMtLTsKKyAgICAgICAgZmFpbF91bmxlc3MgKG9sZCA9PSBHU1RfU1RBVEVfUEFVU0VELCAidW5leHBlY3RlZCBvbGQiKTsKKyAgICAgICAgZmFpbF91bmxlc3MgKG5ldyA9PSBHU1RfU1RBVEVfUExBWUlORywgInVuZXhwZWN0ZWQgbmV3IChnb3QgJWQpIiwgbmV3KTsKKyAgICAgICAgZmFpbF91bmxlc3MgKHBlbmRpbmcgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORywgInVuZXhwZWN0ZWQgcGVuZGluZyIpOworICAgICAgfSBlbHNlIGlmIChHU1RfTUVTU0FHRV9TUkMgKG0pID09IChHc3RPYmplY3QgKikgc2luaykgeworICAgICAgICBpZiAobl9zaW5rID09IDIpIHsKKyAgICAgICAgICBmYWlsX3VubGVzcyAob2xkID09IEdTVF9TVEFURV9SRUFEWSwgInVuZXhwZWN0ZWQgb2xkIik7CisgICAgICAgICAgZmFpbF91bmxlc3MgKG5ldyA9PSBHU1RfU1RBVEVfUEFVU0VELCAidW5leHBlY3RlZCBuZXciKTsKKyAgICAgICAgICBmYWlsX3VubGVzcyAocGVuZGluZyA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HLCAidW5leHBlY3RlZCBwZW5kaW5nIik7CisgICAgICAgIH0gZWxzZSBpZiAobl9zaW5rID09IDEpIHsKKyAgICAgICAgICBmYWlsX3VubGVzcyAob2xkID09IEdTVF9TVEFURV9QQVVTRUQsICJ1bmV4cGVjdGVkIG9sZCIpOworICAgICAgICAgIGZhaWxfdW5sZXNzIChuZXcgPT0gR1NUX1NUQVRFX1BMQVlJTkcsICJ1bmV4cGVjdGVkIG5ldyIpOworICAgICAgICAgIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcsICJ1bmV4cGVjdGVkIHBlbmRpbmciKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKKyAgICAgICAgfQorICAgICAgICBuX3NpbmstLTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGdfY3JpdGljYWwKKyAgICAgICAgICAgICgiVW5leHBlY3RlZCBzdGF0ZSBjaGFuZ2UgbWVzc2FnZSBzcmMgJXMgKCVkIHNyYyAlZCBzaW5rIHBlbmRpbmcpIiwKKyAgICAgICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoR1NUX01FU1NBR0VfU1JDIChtKSksIG5fc3JjLCBuX3NpbmspOworICAgICAgfQorICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG0pOworICAgIH0KKyAgfQorCisgIHBvcF9zdGF0ZV9jaGFuZ2VfbWVzc2FnZSAoYnVzLCBwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCwgR1NUX1NUQVRFX1BMQVlJTkcsCisgICAgICBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiBUaGUgc2luayBzaG91bGQgZ28gQVNZTkMgdG8gUExBWUlORy4gVGhlIHNvdXJjZSBzaG91bGQgZ28KKyAqIHRvIFBMQVlJTkcgd2l0aCBTVUNDRVNTLiBUaGUgcGlwZWxpbmUgcmV0dXJucyBBU1lOQy4gKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X2xpdmVzcmMyX3NpbmspCit7CisgIEdzdEVsZW1lbnQgKnNpbmssICpzcmMsICpwaXBlbGluZTsKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OworICBHc3RTdGF0ZSBjdXJyZW50LCBwZW5kaW5nOworICBHc3RQYWQgKnNyY3BhZCwgKnNpbmtwYWQ7CisKKyAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKKyAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzcmMiKTsKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3JjKSwgImlzLWxpdmUiLCBUUlVFLCBOVUxMKTsKKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKKworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMpOworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzaW5rKTsKKworICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7CisgIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc2luaywgInNpbmsiKTsKKyAgZ3N0X3BhZF9saW5rIChzcmNwYWQsIHNpbmtwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKKworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQywgIm5vIGFzeW5jIHN0YXRlIHJldHVybiIpOworCisgIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoc3JjLCAmY3VycmVudCwgJnBlbmRpbmcsIEdTVF9DTE9DS19USU1FX05PTkUpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIm5vdCBwbGF5aW5nIik7CisgIGZhaWxfdW5sZXNzIChjdXJyZW50ID09IEdTVF9TVEFURV9QTEFZSU5HLCAibm90IHBsYXlpbmciKTsKKyAgZmFpbF91bmxlc3MgKHBlbmRpbmcgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORywgIm5vdCBwbGF5aW5nIik7CisKKyAgcmV0ID0KKyAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsICZjdXJyZW50LCAmcGVuZGluZywgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAibm90IHBsYXlpbmciKTsKKyAgZmFpbF91bmxlc3MgKGN1cnJlbnQgPT0gR1NUX1NUQVRFX1BMQVlJTkcsICJub3QgcGxheWluZyIpOworICBmYWlsX3VubGVzcyAocGVuZGluZyA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HLCAibm90IHBsYXlpbmciKTsKKworICAvKiBhbmQgYmFjayBkb3duICovCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCwKKyAgICAgICJubyBub19wcmVyb2xsIHN0YXRlIHJldHVybiIpOworCisgIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoc3JjLCAmY3VycmVudCwgJnBlbmRpbmcsIEdTVF9DTE9DS19USU1FX05PTkUpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCwgIm5vdCBub19wcmVyb2xsIik7CisgIGZhaWxfdW5sZXNzIChjdXJyZW50ID09IEdTVF9TVEFURV9QQVVTRUQsICJub3QgcGF1c2VkIik7CisgIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcsICJub3QgcGF1c2VkIik7CisKKyAgLyogc2luayBzdGF0ZSBpcyBub3Qga25vd24uLiBpdCBtaWdodCBiZSBwcmVyb2xsZWQgb3Igbm90ICovCisKKyAgLyogYW5kIHRvIFJFQURZICovCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9SRUFEWSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAibm8gc3VjY2VzcyBzdGF0ZSByZXR1cm4iKTsKKworICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHNyYywgJmN1cnJlbnQsICZwZW5kaW5nLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJub3Qgc3VjY2VzcyIpOworICBmYWlsX3VubGVzcyAoY3VycmVudCA9PSBHU1RfU1RBVEVfUkVBRFksICJub3QgcmVhZHkiKTsKKyAgZmFpbF91bmxlc3MgKHBlbmRpbmcgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORywgIm5vdCByZWFkeSIpOworCisgIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoc2luaywgJmN1cnJlbnQsICZwZW5kaW5nLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJub3Qgc3VjY2VzcyIpOworICBmYWlsX3VubGVzcyAoY3VycmVudCA9PSBHU1RfU1RBVEVfUkVBRFksICJub3QgcmVhZHkiKTsKKyAgZmFpbF91bmxlc3MgKHBlbmRpbmcgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORywgIm5vdCByZWFkeSIpOworCisgIC8qIEFuZCBkZXN0cm95LiBNdXN0IGJlIE5VTEwgKi8KKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIm5vIHN1Y2Nlc3Mgc3RhdGUgcmV0dXJuIik7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9saXZlc3JjM19zaW5rKQoreworICBHc3RFbGVtZW50ICpzaW5rLCAqc3JjLCAqcGlwZWxpbmU7CisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKKyAgR3N0U3RhdGUgY3VycmVudCwgcGVuZGluZzsKKyAgR3N0UGFkICpzcmNwYWQsICpzaW5rcGFkOworCisgIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7CisgIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAic3JjIik7CisgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJpcy1saXZlIiwgVFJVRSwgTlVMTCk7CisgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7CisKKyAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjKTsKKyAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc2luayk7CisKKyAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYywgInNyYyIpOworICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNpbmssICJzaW5rIik7CisgIGdzdF9wYWRfbGluayAoc3JjcGFkLCBzaW5rcGFkKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7CisKKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMsICJubyBhc3luYyBzdGF0ZSByZXR1cm4iKTsKKworICByZXQgPQorICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgJmN1cnJlbnQsICZwZW5kaW5nLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJub3QgcGxheWluZyIpOworICBmYWlsX3VubGVzcyAoY3VycmVudCA9PSBHU1RfU1RBVEVfUExBWUlORywgIm5vdCBwbGF5aW5nIik7CisgIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcsICJub3QgcGxheWluZyIpOworCisgIC8qIGFuZCBiYWNrIGRvd24gKi8KKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIm5vIHN1Y2Nlc3Mgc3RhdGUgcmV0dXJuIik7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9sb2NrZWRfc2luaykKK3sKKyAgR3N0RWxlbWVudCAqc2luaywgKnNyYywgKnBpcGVsaW5lOworICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7CisgIEdzdFN0YXRlIGN1cnJlbnQsIHBlbmRpbmc7CisKKyAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKKyAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzcmMiKTsKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3JjKSwgImlzLWxpdmUiLCBUUlVFLCBOVUxMKTsKKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKKworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMpOworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzaW5rKTsKKworICAvKiB3ZSBkb24ndCBsaW5rIHRoZSBlbGVtZW50cyAqLworCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCwKKyAgICAgICJubyBOT19QUkVST0xMIHN0YXRlIHJldHVybiIpOworCisgIHJldCA9CisgICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCAmY3VycmVudCwgJnBlbmRpbmcsIEdTVF9DTE9DS19USU1FX05PTkUpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCwgIm5vdCBub19wcmVyb2xsIik7CisgIGZhaWxfdW5sZXNzIChjdXJyZW50ID09IEdTVF9TVEFURV9QQVVTRUQsICJub3QgcGF1c2VkIik7CisgIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcsICJoYXZlIHBlbmRpbmciKTsKKworICAvKiB0aGUgc2luayBpcyBub3cgYXN5bmMgZ29pbmcgZnJvbSByZWFkeSB0byBwYXVzZWQgKi8KKyAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChzaW5rLCAmY3VycmVudCwgJnBlbmRpbmcsIDApOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMsICJub3QgYXN5bmMiKTsKKyAgZmFpbF91bmxlc3MgKGN1cnJlbnQgPT0gR1NUX1NUQVRFX1JFQURZLCAibm90IHJlYWR5Iik7CisgIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9QQVVTRUQsICJub3QgcGF1c2VkIik7CisKKyAgLyogbG9jayB0aGUgc2luayAqLworICBnc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlIChzaW5rLCBUUlVFKTsKKworICAvKiBtb3ZlIHRvIFBsQVlJTkcsIHRoZSBzaW5rIHNob3VsZCByZW1haW4gQVNZTkMuIFRoZSBwaXBlbGluZQorICAgKiByZXR1cm5zIEFTWU5DICovCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DLCAibm8gQVNZTkMgc3RhdGUgcmV0dXJuIik7CisKKyAgLyogYmFjayB0byBQQVVTRUQsIHdlIHNob3VsZCBnZXQgTk9fUFJFUk9MTCBhZ2FpbiAqLworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwsCisgICAgICAibm8gTk9fUFJFUk9MTCBzdGF0ZSByZXR1cm4iKTsKKworICAvKiB1bmxvY2sgdGhlIHNpbmsgKi8KKyAgZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZSAoc2luaywgRkFMU0UpOworCisgIC8qIGFuZCBub3cgZXZlcnl0aGluZyBiYWNrIGRvd24gKi8KKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIm5vIHN1Y2Nlc3Mgc3RhdGUgcmV0dXJuIik7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF91bmxpbmtlZF9saXZlKQoreworICBHc3RFbGVtZW50ICpzaW5rLCAqc3JjLCAqbHNyYywgKnBpcGVsaW5lOworICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7CisgIEdzdFN0YXRlIGN1cnJlbnQsIHBlbmRpbmc7CisgIEdzdFBhZCAqc3JjcGFkLCAqc2lua3BhZDsKKworICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOworICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYyIpOworICBsc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJsc3JjIik7CisgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGxzcmMpLCAiaXMtbGl2ZSIsIFRSVUUsIE5VTEwpOworICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOworCisgIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNyYyk7CisgIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIGxzcmMpOworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzaW5rKTsKKworICAvKiBsaW5rIG5vbiBsaXZlIHNvdXJjZSB0byBzaW5rICovCisgIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMsICJzcmMiKTsKKyAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rLCAic2luayIpOworICBnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOworCisgIC8qIHdlIGRvbid0IGxpbmsgdGhlIHNyY3BhZCBvZiB0aGUgbGl2ZSBzb3VyY2UsIGl0IHdpbGwgbm90IGNvbnRyaWJ1dGUgdG8gdGhlCisgICAqIE5PX1BSRVJPTEwuICovCisKKyAgLyogc2V0IHN0YXRlIHRvIFBBVVNFRCwgdGhpcyBzaG91bGQgcmV0dXJuIE5PX1BSRVJPTEwgYmVjYXVzZSB0aGVyZSBpcyBhIGxpdmUKKyAgICogc291cmNlLiBzaW5jZSB0aGUgb25seSBzaW5rIGluIHRoaXMgcGlwZWxpbmUgaXMgbGlua2VkIHRvIGEgbm9uLWxpdmUKKyAgICogc291cmNlLCBpdCB3aWxsIHByZXJvbGwgZXZlbnR1YWxseS4gKi8KKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMLAorICAgICAgIm5vIE5PX1BSRVJPTEwgc3RhdGUgcmV0dXJuIik7CisKKyAgLyogd2FpdCB0aWxsIHRoZSBzaW5rIGlzIHByZXJvbGxlZCAqLworICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHNpbmssICZjdXJyZW50LCAmcGVuZGluZywgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAibm90IHN1Y2Nlc3MiKTsKKyAgZmFpbF91bmxlc3MgKGN1cnJlbnQgPT0gR1NUX1NUQVRFX1BBVVNFRCwgIm5vdCBwYXVzZWQiKTsKKyAgZmFpbF91bmxlc3MgKHBlbmRpbmcgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORywgImhhdmUgcGxheWluZyIpOworCisgIC8qIHRoZSBwaXBlbGluZSBzaG91bGQgc3RpbGwgcmV0dXJuIE5PX1BSRVJPTEwgKi8KKyAgcmV0ID0KKyAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsICZjdXJyZW50LCAmcGVuZGluZywgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMLCAibm90IG5vX3ByZXJvbGwiKTsKKyAgZmFpbF91bmxlc3MgKGN1cnJlbnQgPT0gR1NUX1NUQVRFX1BBVVNFRCwgIm5vdCBwYXVzZWQiKTsKKyAgZmFpbF91bmxlc3MgKHBlbmRpbmcgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORywgImhhdmUgcGxheWluZyIpOworCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJub3QgU1VDQ0VTUyIpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9kZWxheWVkX2FzeW5jKQoreworICBHc3RFbGVtZW50ICpzaW5rLCAqc3JjLCAqcGlwZWxpbmU7CisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKKyAgR3N0U3RhdGUgY3VycmVudCwgcGVuZGluZzsKKyAgR3N0UGFkICpzcmNwYWQsICpzaW5rcGFkOworCisgIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7CisgIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAic3JjIik7CisgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJpcy1saXZlIiwgVFJVRSwgTlVMTCk7CisgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7CisKKyAgLyogYWRkIHNvdXJjZSwgZG9uJ3QgYWRkIHNpbmsgeWV0ICovCisgIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNyYyk7CisKKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMLAorICAgICAgIm5vIE5PX1BSRVJPTEwgc3RhdGUgcmV0dXJuIik7CisKKyAgLyogYWRkIHNpbmsgbm93IGFuZCBzZXQgdG8gUEFVU0VEICovCisgIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNpbmspOworCisgIC8qIFRoaXMgd2lsbCBtYWtlIHRoZSBiaW4gbm90aWNlIGFuIEFTWU5DIGVsZW1lbnQuICovCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2luaywgR1NUX1NUQVRFX1BBVVNFRCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQywgIm5vIEFTWU5DIHN0YXRlIHJldHVybiIpOworCisgIC8qIHdlIHNob3VsZCBzdGlsbCBiZSBOT19QUkVST0xMIG5vdyBhbHRob3VnaCB0aGVyZSBpcyBhbiBhc3luYyBlbGVtZW50IGluIHRoZQorICAgKiBwaXBlbGluZS4gKi8KKyAgcmV0ID0KKyAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsICZjdXJyZW50LCAmcGVuZGluZywgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMLCAibm90IE5PX1BSRVJPTEwiKTsKKyAgZmFpbF91bmxlc3MgKGN1cnJlbnQgPT0gR1NUX1NUQVRFX1BBVVNFRCwgIm5vdCBwYXVzZWQiKTsKKyAgZmFpbF91bmxlc3MgKHBlbmRpbmcgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORywgImhhdmUgcGVuZGluZyIpOworCisgIC8qIGxpbmsgbGl2ZSBzb3VyY2UgdG8gc2luayAqLworICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7CisgIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc2luaywgInNpbmsiKTsKKyAgZ3N0X3BhZF9saW5rIChzcmNwYWQsIHNpbmtwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKKworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQywgIm5vIEFTWU5DIHN0YXRlIHJldHVybiIpOworCisgIC8qIHdlIHNob3VsZCBnZXQgU1VDQ0VTUyBub3cgKi8KKyAgcmV0ID0KKyAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsICZjdXJyZW50LCAmcGVuZGluZywgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAibm90IE5PX1BSRVJPTEwiKTsKKyAgZmFpbF91bmxlc3MgKGN1cnJlbnQgPT0gR1NUX1NUQVRFX1BMQVlJTkcsICJub3QgUExBWUlORyIpOworICBmYWlsX3VubGVzcyAocGVuZGluZyA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HLCAiaGF2ZSBwZW5kaW5nIik7CisKKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIm5vdCBTVUNDRVNTIik7CisKKyAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2FkZGVkX2FzeW5jKQoreworICBHc3RFbGVtZW50ICpzaW5rLCAqc3JjLCAqcGlwZWxpbmU7CisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKKyAgR3N0U3RhdGUgY3VycmVudCwgcGVuZGluZzsKKyAgR3N0UGFkICpzcmNwYWQsICpzaW5rcGFkOworCisgIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7CisgIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAic3JjIik7CisgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJpcy1saXZlIiwgVFJVRSwgTlVMTCk7CisgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7CisKKyAgLyogYWRkIHNvdXJjZSwgZG9uJ3QgYWRkIHNpbmsgeWV0ICovCisgIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNyYyk7CisKKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMLAorICAgICAgIm5vIE5PX1BSRVJPTEwgc3RhdGUgcmV0dXJuIik7CisKKyAgLyogc2V0IHNpbmsgdG8gUEFVU0VEIHdpdGhvdXQgYWRkaW5nIGl0IHRvIHRoZSBwaXBlbGluZSAqLworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNpbmssIEdTVF9TVEFURV9QQVVTRUQpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMsICJubyBBU1lOQyBzdGF0ZSByZXR1cm4iKTsKKworICAvKiBhZGQgc2luayBub3csIHBpcGVsaW5lIHNob3VsZCBub3RpY2UgdGhlIGFzeW5jIGVsZW1lbnQgKi8KKyAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc2luayk7CisKKyAgLyogd2Ugc2hvdWxkIHN0aWxsIGJlIE5PX1BSRVJPTEwgbm93IGFsdGhvdWdoIHRoZXJlIGlzIGFuIGFzeW5jIGVsZW1lbnQgaW4gdGhlCisgICAqIHBpcGVsaW5lLiAqLworICByZXQgPQorICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgJmN1cnJlbnQsICZwZW5kaW5nLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwsICJub3QgTk9fUFJFUk9MTCIpOworICBmYWlsX3VubGVzcyAoY3VycmVudCA9PSBHU1RfU1RBVEVfUEFVU0VELCAibm90IHBhdXNlZCIpOworICBmYWlsX3VubGVzcyAocGVuZGluZyA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HLCAiaGF2ZSBwZW5kaW5nIik7CisKKyAgLyogbGluayBsaXZlIHNvdXJjZSB0byBzaW5rICovCisgIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMsICJzcmMiKTsKKyAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rLCAic2luayIpOworICBnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOworCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DLCAibm8gQVNZTkMgc3RhdGUgcmV0dXJuIik7CisKKyAgLyogd2Ugc2hvdWxkIGdldCBTVUNDRVNTIG5vdyAqLworICByZXQgPQorICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgJmN1cnJlbnQsICZwZW5kaW5nLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJub3QgTk9fUFJFUk9MTCIpOworICBmYWlsX3VubGVzcyAoY3VycmVudCA9PSBHU1RfU1RBVEVfUExBWUlORywgIm5vdCBQTEFZSU5HIik7CisgIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcsICJoYXZlIHBlbmRpbmciKTsKKworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAibm90IFNVQ0NFU1MiKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfYWRkZWRfYXN5bmMyKQoreworICBHc3RFbGVtZW50ICpzaW5rLCAqc3JjLCAqcGlwZWxpbmU7CisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKKyAgR3N0U3RhdGUgY3VycmVudCwgcGVuZGluZzsKKworICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOworICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYyIpOworICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOworCisgIC8qIGFkZCBzb3VyY2UsIGRvbid0IGFkZCBzaW5rIHlldCAqLworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMpOworICAvKiBuZWVkIHRvIGxvY2sgc3RhdGUgaGVyZSBvciB0aGUgcGlwZWxpbmUgbWlnaHQgZ28gaW4gZXJyb3IgKi8KKyAgZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZSAoc3JjLCBUUlVFKTsKKworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJubyBTVUNDRVNTIHN0YXRlIHJldHVybiIpOworCisgIC8qIHNldCBzaW5rIHRvIFBBVVNFRCB3aXRob3V0IGFkZGluZyBpdCB0byB0aGUgcGlwZWxpbmUgKi8KKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzaW5rLCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DLCAibm8gQVNZTkMgc3RhdGUgcmV0dXJuIik7CisKKyAgLyogYWRkIHNpbmsgbm93LCBwaXBlbGluZSBzaG91bGQgbm90aWNlIHRoZSBhc3luYyBlbGVtZW50ICovCisgIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNpbmspOworCisgIC8qIHdlIHNob3VsZCBiZSBBU1lOQyBub3cgYmVjYXVzZSB0aGVyZSBpcyBhbiBhc3luYyBlbGVtZW50IGluIHRoZQorICAgKiBwaXBlbGluZS4gKi8KKyAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgJmN1cnJlbnQsICZwZW5kaW5nLCAwKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DLCAibm90IEFTWU5DIik7CisgIGZhaWxfdW5sZXNzIChjdXJyZW50ID09IEdTVF9TVEFURV9QQVVTRUQsICJub3QgcGF1c2VkIik7CisgIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9QQVVTRUQsICJub3QgcGF1c2VkIik7CisKKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIm5vdCBTVUNDRVNTIik7CisKKyAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2FkZF9saXZlKQoreworICBHc3RFbGVtZW50ICpzaW5rLCAqc3JjLCAqcGlwZWxpbmU7CisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKKyAgR3N0U3RhdGUgY3VycmVudCwgcGVuZGluZzsKKworICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOworICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYyIpOworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAiaXMtbGl2ZSIsIFRSVUUsIE5VTEwpOworICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOworCisgIC8qIGFkZCBzaW5rLCBkb24ndCBhZGQgc291cmMzIHlldCAqLworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzaW5rKTsKKworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DLCAibm8gQVNZTkMgc3RhdGUgcmV0dXJuIik7CisKKyAgLyogc2V0IHNvdXJjZSB0byBQQVVTRUQgd2l0aG91dCBhZGRpbmcgaXQgdG8gdGhlIHBpcGVsaW5lICovCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3JjLCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwsCisgICAgICAibm8gTk9fUFJFUk9MTCBzdGF0ZSByZXR1cm4iKTsKKworICAvKiBhZGQgc291cmNlIG5vdywgcGlwZWxpbmUgc2hvdWxkIG5vdGljZSB0aGUgTk9fUFJFUk9MTCBlbGVtZW50ICovCisgIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNyYyk7CisKKyAgLyogd2Ugc2hvdWxkIGJlIE5PX1BSRVJPTEwgbm93IGJlY2F1c2UgdGhlcmUgaXMgYSBOT19QUkVST0xMIGVsZW1lbnQgaW4gdGhlCisgICAqIHBpcGVsaW5lLiAqLworICByZXQgPQorICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgJmN1cnJlbnQsICZwZW5kaW5nLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwsICJub3QgTk9fUFJFUk9MTCIpOworICBmYWlsX3VubGVzcyAoY3VycmVudCA9PSBHU1RfU1RBVEVfUEFVU0VELCAibm90IHBhdXNlZCIpOworICBmYWlsX3VubGVzcyAocGVuZGluZyA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HLCAiaGF2ZSBwZW5kaW5nIik7CisKKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIm5vdCBTVUNDRVNTIik7CisKKyAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBHTXV0ZXggKmJsb2NrZWRfbG9jazsKK3N0YXRpYyBHQ29uZCAqYmxvY2tlZF9jb25kOworCitzdGF0aWMgR3N0UHJvYmVSZXR1cm4KK3BhZF9ibG9ja2VkX2NiIChHc3RQYWQgKiBwYWQsIEdzdFByb2JlVHlwZSB0eXBlLCBncG9pbnRlciB0eXBlX2RhdGEsCisgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBnX211dGV4X2xvY2sgKGJsb2NrZWRfbG9jayk7CisgIEdTVF9ERUJVRyAoInNyY3BhZCBibG9ja2VkOiAlZCwgc2VuZGluZyBzaWduYWwiLCB0eXBlKTsKKyAgZ19jb25kX3NpZ25hbCAoYmxvY2tlZF9jb25kKTsKKyAgZ19tdXRleF91bmxvY2sgKGJsb2NrZWRfbG9jayk7CisKKyAgcmV0dXJuIEdTVF9QUk9CRV9PSzsKK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfYWRkX2xpdmUyKQoreworICBHc3RFbGVtZW50ICpzaW5rLCAqc3JjLCAqcGlwZWxpbmU7CisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKKyAgR3N0U3RhdGUgY3VycmVudCwgcGVuZGluZzsKKyAgR3N0UGFkICpzcmNwYWQsICpzaW5rcGFkOworICBndWxvbmcgaWQ7CisKKyAgYmxvY2tlZF9sb2NrID0gZ19tdXRleF9uZXcgKCk7CisgIGJsb2NrZWRfY29uZCA9IGdfY29uZF9uZXcgKCk7CisKKyAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKKyAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzcmMiKTsKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3JjKSwgImlzLWxpdmUiLCBUUlVFLCBOVUxMKTsKKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKKworICAvKiBhZGQgc2luaywgZG9uJ3QgYWRkIHNvdXJjZSB5ZXQgKi8KKyAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc2luayk7CisKKyAgLyogc2V0IHRoZSBwaXBlbGluZSB0byBQTEFZSU5HLiBUaGlzIHdpbGwgcmV0dXJuIEFTWU5DIG9uIFJFQURZLT5QQVVTRUQgKi8KKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMsICJubyBBU1lOQyBzdGF0ZSByZXR1cm4iKTsKKworICBnX211dGV4X2xvY2sgKGJsb2NrZWRfbG9jayk7CisKKyAgR1NUX0RFQlVHICgiYmxvY2tpbmcgc3JjcGFkIik7CisgIC8qIGJsb2NrIHNvdXJjZSBwYWQgKi8KKyAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYywgInNyYyIpOworICBpZCA9IGdzdF9wYWRfYWRkX3Byb2JlIChzcmNwYWQsIEdTVF9QUk9CRV9UWVBFX0JMT0NLLCBwYWRfYmxvY2tlZF9jYiwgTlVMTCwKKyAgICAgIE5VTEwpOworCisgIC8qIHNldCBzb3VyY2UgdG8gUEFVU0VEIHdpdGhvdXQgYWRkaW5nIGl0IHRvIHRoZSBwaXBlbGluZSAqLworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywgR1NUX1NUQVRFX1BBVVNFRCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMLAorICAgICAgIm5vIE5PX1BSRVJPTEwgc3RhdGUgcmV0dXJuIik7CisKKyAgLyogYWRkIHNvdXJjZSBub3csIHBpcGVsaW5lIHNob3VsZCBub3RpY2UgdGhlIE5PX1BSRVJPTEwgZWxlbWVudC4gVGhpcworICAgKiBzaG91bGQgdHJpZ2dlciBhcyBjb21taXQgb2YgdGhlIEFTWU5DIHBpcGVsaW5lIGFuZCBtYWtlIGl0IGNvbnRpbnVlCisgICAqIHRvIFBMQVlJTkcuIFdlIGJsb2NrZWQgdGhlIHNvdXJjZSBwYWQgc28gdGhhdCB3ZSBkb24ndCBnZXQgYW4gdW5saW5rZWQKKyAgICogZXJyb3IuICovCisgIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNyYyk7CisKKyAgLyogd2FpdCBmb3IgcGFkIGJsb2NrZWQsIHRoaXMgbWVhbnMgdGhlIHNvdXJjZSBpcyBub3cgUExBWUlORy4gKi8KKyAgZ19jb25kX3dhaXQgKGJsb2NrZWRfY29uZCwgYmxvY2tlZF9sb2NrKTsKKyAgZ19tdXRleF91bmxvY2sgKGJsb2NrZWRfbG9jayk7CisKKyAgR1NUX0RFQlVHICgibGlua2luZyBwYWRzIik7CisKKyAgLyogbGluayB0byBzaW5rICovCisgIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc2luaywgInNpbmsiKTsKKyAgZ3N0X3BhZF9saW5rIChzcmNwYWQsIHNpbmtwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKKworICBHU1RfREVCVUcgKCJ1bmJsb2NraW5nIHNyY3BhZCIpOworCisgIC8qIGFuZCB1bmJsb2NrICovCisgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChzcmNwYWQsIGlkKTsKKworICBHU1RfREVCVUcgKCJnZXR0aW5nIHN0YXRlIik7CisKKyAgLyogd2Ugc2hvdWxkIGJlIFNVQ0NFU1Mgbm93IGFuZCBQTEFZSU5HICovCisgIHJldCA9CisgICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCAmY3VycmVudCwgJnBlbmRpbmcsIEdTVF9DTE9DS19USU1FX05PTkUpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIm5vdCBTVUNDRVNTIik7CisgIGZhaWxfdW5sZXNzIChjdXJyZW50ID09IEdTVF9TVEFURV9QTEFZSU5HLCAibm90IFBMQVlJTkciKTsKKyAgZmFpbF91bmxlc3MgKHBlbmRpbmcgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORywgImhhdmUgcGVuZGluZyIpOworCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJub3QgU1VDQ0VTUyIpOworCisgIGdfY29uZF9mcmVlIChibG9ja2VkX2NvbmQpOworICBnX211dGV4X2ZyZWUgKGJsb2NrZWRfbG9jayk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9iaW5fbGl2ZSkKK3sKKyAgR3N0RWxlbWVudCAqc2luaywgKnNyYywgKnBpcGVsaW5lLCAqYmluOworICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7CisgIEdzdFN0YXRlIGN1cnJlbnQsIHBlbmRpbmc7CisgIEdzdFBhZCAqc3JjcGFkLCAqc2lua3BhZDsKKworICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOworICBiaW4gPSBnc3RfYmluX25ldyAoImJpbiIpOworICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYyIpOworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAiaXMtbGl2ZSIsIFRSVUUsIE5VTEwpOworICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOworCisgIGdzdF9iaW5fYWRkIChHU1RfQklOIChiaW4pLCBzcmMpOworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAoYmluKSwgc2luayk7CisgIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIGJpbik7CisKKyAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYywgInNyYyIpOworICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNpbmssICJzaW5rIik7CisgIGdzdF9wYWRfbGluayAoc3JjcGFkLCBzaW5rcGFkKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7CisKKyAgLyogUEFVU0VEIHJldHVybnMgTk9fUFJFUk9MTCBiZWNhdXNlIG9mIHRoZSBsaXZlIHNvdXJjZSAqLworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwsCisgICAgICAibm8gTk9fUFJFUk9MTCBzdGF0ZSByZXR1cm4iKTsKKyAgcmV0ID0KKyAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsICZjdXJyZW50LCAmcGVuZGluZywgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMLCAibm90IE5PX1BSRVJPTEwiKTsKKyAgZmFpbF91bmxlc3MgKGN1cnJlbnQgPT0gR1NUX1NUQVRFX1BBVVNFRCwgIm5vdCBwYXVzZWQiKTsKKyAgZmFpbF91bmxlc3MgKHBlbmRpbmcgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORywgIm5vdCB2b2lkIHBlbmRpbmciKTsKKworICAvKiB3aGVuIGdvaW5nIHRvIFBMQVlJTkcsIHRoZSBzaW5rIHNob3VsZCBnbyB0byBQTEFZSU5HIEFTWU5DICovCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DLCAibm90IEFTWU5DIik7CisKKyAgLyogbm93IHdhaXQgZm9yIFBMQVlJTkcgdG8gY29tcGxldGUgKi8KKyAgcmV0ID0KKyAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsICZjdXJyZW50LCAmcGVuZGluZywgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAibm90IHBsYXlpbmciKTsKKyAgZmFpbF91bmxlc3MgKGN1cnJlbnQgPT0gR1NUX1NUQVRFX1BMQVlJTkcsICJub3QgcGxheWluZyIpOworICBmYWlsX3VubGVzcyAocGVuZGluZyA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HLCAibm90IHZvaWQgcGVuZGluZyIpOworCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJjYW5ub3QgbnVsbCBwaXBlbGluZSIpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKK30KKworR1NUX0VORF9URVNUIHN0YXRpYyBncG9pbnRlcgorc2VuZF9lb3MgKEdzdFBhZCAqIHNpbmtwYWQpCit7CisgIGdib29sZWFuIHJldDsKKworICByZXQgPSBnc3RfcGFkX3NlbmRfZXZlbnQgKHNpbmtwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKKworICByZXR1cm4gR0lOVF9UT19QT0lOVEVSIChyZXQpOworfQorCisvKiBwdXNoIGEgYnVmZmVyIHdpdGggYSB2ZXJ5IGxvbmcgZHVyYXRpb24gaW4gYSBmYWtlc2luaywgdGhlbiBwdXNoIGFuIEVPUworICogZXZlbnQuIGZha2VzaW5rIHNob3VsZCBlbWl0IEVPUyBhZnRlciB0aGUgZHVyYXRpb24gb2YgdGhlIGJ1ZmZlciBleHBpcmVkLgorICogR29pbmcgdG8gUEFVU0VELCBob3dldmVyIHNob3VsZCBub3QgcmV0dXJuIEFTWU5DIHdoaWxlIHByb2Nlc3NpbmcgdGhlCisgKiBidWZmZXIuICovCitHU1RfU1RBUlRfVEVTVCAodGVzdF9mYWtlX2VvcykKK3sKKyAgR3N0RWxlbWVudCAqc2luaywgKnBpcGVsaW5lOworICBHc3RCdWZmZXIgKmJ1ZmZlcjsKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OworICBHc3RQYWQgKnNpbmtwYWQ7CisgIEdzdEZsb3dSZXR1cm4gcmVzOworICBHVGhyZWFkICp0aHJlYWQ7CisKKyAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKKworICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzaW5rKSwgInN5bmMiLCBUUlVFLCBOVUxMKTsKKworICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNpbmssICJzaW5rIik7CisKKyAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU5fQ0FTVCAocGlwZWxpbmUpLCBzaW5rKTsKKworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQywgIm5vIEFTWU5DIHN0YXRlIHJldHVybiIpOworCisgIC8qIHB1c2ggYnVmZmVyIG9mIDEwMCBzZWNvbmRzLCBzaW5jZSBpdCBoYXMgYSB0aW1lc3RhbXAgb2YgMCwgaXQgc2hvdWxkIGJlCisgICAqIHJlbmRlcmVkIGltbWVkaWF0ZWx5IGFuZCB0aGUgY2hhaW4gZnVuY3Rpb24gc2hvdWxkIHJldHVybiBpbW1lZGlhdGVseSAqLworICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEwKTsKKyAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSAwOworICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpID0gMTAwICogR1NUX1NFQ09ORDsKKyAgcmVzID0gZ3N0X3BhZF9jaGFpbiAoc2lua3BhZCwgYnVmZmVyKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSywgIm5vIE9LIGZsb3cgcmV0dXJuIik7CisKKyAgLyogd2FpdCBmb3IgcHJlcm9sbCwgdGhpcyBzaG91bGQgaGFwcGVuIHJlYWxseSBzb29uLiAqLworICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLCAtMSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAibm8gU1VDQ0VTUyBzdGF0ZSByZXR1cm4iKTsKKworICAvKiBwdXNoIEVPUywgdGhpcyB3aWxsIGJsb2NrIGZvciB1cCB0byAxMDAgc2Vjb25kcywgdW50aWwgdGhlIHByZXZpb3VzCisgICAqIGJ1ZmZlciBoYXMgZmluaXNoZWQuIFdlIHRoZXJlZm9yZSBwdXNoIGl0IGluIGFub3RoZXIgdGhyZWFkIHNvIHdlIGNhbiBkbworICAgKiBzb21ldGhpbmcgZWxzZSB3aGlsZSBpdCBibG9ja3MuICovCisgIHRocmVhZCA9IGdfdGhyZWFkX2NyZWF0ZSAoKEdUaHJlYWRGdW5jKSBzZW5kX2Vvcywgc2lua3BhZCwgVFJVRSwgTlVMTCk7CisgIGZhaWxfaWYgKHRocmVhZCA9PSBOVUxMLCAibm8gdGhyZWFkIik7CisKKyAgLyogd2FpdCBhIHdoaWxlIHNvIHRoYXQgdGhlIHRocmVhZCBtYW5hZ2VzIHRvIHN0YXJ0IGFuZCBwdXNoIHRoZSBFT1MgKi8KKyAgZ191c2xlZXAgKEdfVVNFQ19QRVJfU0VDKTsKKworICAvKiB0aGlzIHNob3VsZCBjYW5jZWwgcmVuZGVyaW5nIG9mIHRoZSBFT1MgZXZlbnQgYW5kIHNob3VsZCByZXR1cm4gU1VDQ0VTUworICAgKiBiZWNhdXNlIHRoZSBzaW5rIGlzIG5vdyBwcmVyb2xsZWQgb24gdGhlIEVPUy4gKi8KKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAibm8gU1VDQ0VTUyBzdGF0ZSByZXR1cm4iKTsKKworICAvKiB3ZSBjYW4gdW5yZWYgdGhlIHNpbmtwYWQgbm93LCB3ZSdyZSBkb25lIHdpdGggaXQgKi8KKyAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7CisKKyAgLyogd2FpdCBmb3IgYSBzZWNvbmQsIHVzZSB0aGUgZGVidWcgbG9nIHRvIHNlZSB0aGF0IGJhc2VzaW5rIGRvZXMgbm90IGRpc2NhcmQKKyAgICogdGhlIEVPUyAqLworICBnX3VzbGVlcCAoR19VU0VDX1BFUl9TRUMpOworCisgIC8qIGdvIGJhY2sgdG8gUExBWUlORywgd2hpY2ggbWVhbnMgd2FpdGluZyBzb21lIG1vcmUgaW4gRU9TLCBjaGVjayBkZWJ1ZyBsb2cKKyAgICogdG8gc2VlIHRoaXMgaGFwcGVuLiAqLworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAibm8gU1VDQ0VTUyBzdGF0ZSByZXR1cm4iKTsKKyAgZ191c2xlZXAgKEdfVVNFQ19QRVJfU0VDKTsKKworICAvKiB0ZWFyZG93biBhbmQgY2xlYW51cCAqLworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAibm8gU1VDQ0VTUyBzdGF0ZSByZXR1cm4iKTsKKworICAvKiB3ZSBjYW4gam9pbiBub3cgKi8KKyAgZ190aHJlYWRfam9pbiAodGhyZWFkKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogdGhpcyB2YXJpYWJsZSBpcyB1cGRhdGVkIGluIHRoZSBzYW1lIHRocmVhZCwgZmlyc3QgaXQgaXMgc2V0IGJ5IHRoZQorICogaGFuZG9mZi1wcmVyb2xsIHNpZ25hbCwgdGhlbiBpdCBpcyBjaGVja2VkIHdoZW4gdGhlIEFTWU5DX0RPTkUgaXMgcG9zdGVkIG9uCisgKiB0aGUgYnVzICovCitzdGF0aWMgZ2Jvb2xlYW4gaGF2ZV9wcmVyb2xsID0gRkFMU0U7CisKK3N0YXRpYyB2b2lkCithc3luY19kb25lX2hhbmRvZmYgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RCdWZmZXIgKiBidWYsIEdzdFBhZCAqIHBhZCwKKyAgICBHc3RFbGVtZW50ICogc2luaykKK3sKKyAgR1NUX0RFQlVHICgid2UgaGF2ZSB0aGUgcHJlcm9sbCBidWZmZXIiKTsKKyAgaGF2ZV9wcmVyb2xsID0gVFJVRTsKK30KKworLyogd2hlbiB3ZSBnZXQgdGhlIEFTWU5DX0RPTkUsIHF1ZXJ5IHRoZSBwb3NpdGlvbiAqLworc3RhdGljIEdzdEJ1c1N5bmNSZXBseQorYXN5bmNfZG9uZV9mdW5jIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtc2csIEdzdEVsZW1lbnQgKiBzaW5rKQoreworICBpZiAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSA9PSBHU1RfTUVTU0FHRV9BU1lOQ19ET05FKSB7CisgICAgZ2ludDY0IHBvc2l0aW9uOworCisgICAgR1NUX0RFQlVHICgid2UgaGF2ZSBBU1lOQ19ET05FIG5vdyIpOworICAgIGZhaWxfdW5sZXNzIChoYXZlX3ByZXJvbGwgPT0gVFJVRSwgIm5vIHByZXJvbGwgYnVmZmVyIHJlY2VpdmVkIik7CisKKyAgICAvKiBnZXQgdGhlIHBvc2l0aW9uIG5vdyAqLworICAgIGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uIChzaW5rLCBHU1RfRk9STUFUX1RJTUUsICZwb3NpdGlvbik7CisKKyAgICBHU1RfREVCVUcgKCJ3ZSBoYXZlIHBvc2l0aW9uICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAocG9zaXRpb24pKTsKKworICAgIGZhaWxfdW5sZXNzIChwb3NpdGlvbiA9PSAxMCAqIEdTVF9TRUNPTkQsICJwb3NpdGlvbiBpcyB3cm9uZyIpOworICB9CisKKyAgLyogd2UgbXVzdCB1bnJlZiB0aGUgbWVzc2FnZSBpZiB3ZSByZXR1cm4gRFJPUCAqLworICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKKworICAvKiB3ZSBjYW4gZHJvcCB0aGUgbWVzc2FnZSwgbm90aGluZyBpcyBsaXN0ZW5pbmcgZm9yIGl0LiAqLworICByZXR1cm4gR1NUX0JVU19EUk9QOworfQorCitzdGF0aWMgdm9pZAorc2VuZF9idWZmZXIgKEdzdFBhZCAqIHNpbmtwYWQpCit7CisgIEdzdEJ1ZmZlciAqYnVmZmVyOworICBHc3RGbG93UmV0dXJuIHJldDsKKworICAvKiBwdXNoIGEgc2Vjb25kIGJ1ZmZlciAqLworICBHU1RfREVCVUcgKCJwdXNoaW5nIGxhc3QgYnVmZmVyIik7CisgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTApOworICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IDIwMCAqIEdTVF9TRUNPTkQ7CisgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgPSAxMDAgKiBHU1RfU0VDT05EOworCisgIC8qIHRoaXMgZnVuY3Rpb24gd2lsbCBpbml0aWFsbHkgYmxvY2sgKi8KKyAgcmV0ID0gZ3N0X3BhZF9jaGFpbiAoc2lua3BhZCwgYnVmZmVyKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfRkxPV19PSywgIm5vIE9LIGZsb3cgcmV0dXJuIik7Cit9CisKKy8qIHdoZW4gd2UgZ2V0IHRoZSBBU1lOQ19ET05FIG1lc3NhZ2UgZnJvbSBhIHNpbmssIHdlIHdhbnQgdGhlIHNpbmsgdG8gYmUgYWJsZQorICogdG8gcmVwb3J0IHRoZSBkdXJhdGlvbiBhbmQgcG9zaXRpb24uIFRoZSBzaW5rIHNob3VsZCBhbHNvIGhhdmUgY2FsbGVkIHRoZQorICogcmVuZGVyIG1ldGhvZC4gKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X2FzeW5jX2RvbmUpCit7CisgIEdzdEVsZW1lbnQgKnNpbms7CisgIEdzdEV2ZW50ICpldmVudDsKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OworICBHc3RQYWQgKnNpbmtwYWQ7CisgIEdzdEZsb3dSZXR1cm4gcmVzOworICBHc3RCdXMgKmJ1czsKKyAgR1RocmVhZCAqdGhyZWFkOworICBnaW50NjQgcG9zaXRpb247CisgIGdib29sZWFuIHFyZXQ7CisgIEdzdFNlZ21lbnQgc2VnbWVudDsKKworICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzaW5rKSwgInN5bmMiLCBUUlVFLCBOVUxMKTsKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc2luayksICJzaWduYWwtaGFuZG9mZnMiLCBUUlVFLCBOVUxMKTsKKworICBnX3NpZ25hbF9jb25uZWN0IChzaW5rLCAicHJlcm9sbC1oYW5kb2ZmIiwgKEdDYWxsYmFjaykgYXN5bmNfZG9uZV9oYW5kb2ZmLAorICAgICAgc2luayk7CisKKyAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rLCAic2luayIpOworCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2luaywgR1NUX1NUQVRFX1BBVVNFRCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQywgIm5vIEFTWU5DIHN0YXRlIHJldHVybiIpOworCisgIC8qIHNldCBidXMgb24gZWxlbWVudCBzeW5jaHJvbm91c2x5IGxpc3RlbiBmb3IgQVNZTkNfRE9ORSAqLworICBidXMgPSBnc3RfYnVzX25ldyAoKTsKKyAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoc2luaywgYnVzKTsKKyAgZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyIChidXMsIChHc3RCdXNTeW5jSGFuZGxlcikgYXN5bmNfZG9uZV9mdW5jLCBzaW5rKTsKKworICAvKiBtYWtlIG5ld3NlZ21lbnQsIHRoaXMgc2V0cyB0aGUgcG9zaXRpb24gdG8gMTBzZWMgd2hlbiB0aGUgYnVmZmVyIHByZXJvbGxzICovCisgIEdTVF9ERUJVRyAoInNlbmRpbmcgc2VnbWVudCIpOworICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKKyAgc2VnbWVudC50aW1lID0gMTAgKiBHU1RfU0VDT05EOworCisgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCk7CisgIHJlcyA9IGdzdF9wYWRfc2VuZF9ldmVudCAoc2lua3BhZCwgZXZlbnQpOworCisgIC8qIFdlIGhhdmUgbm90IHlldCByZWNlaXZlZCBhbnkgYnVmZmVycyBzbyB3ZSBhcmUgc3RpbGwgaW4gdGhlIFJFQURZIHN0YXRlLAorICAgKiB0aGUgcG9zaXRpb24gaXMgdGhlcmVmb3JlIHN0aWxsIG5vdCBxdWVyeWFibGUuICovCisgIHBvc2l0aW9uID0gLTE7CisgIHFyZXQgPSBnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbiAoc2luaywgR1NUX0ZPUk1BVF9USU1FLCAmcG9zaXRpb24pOworICBmYWlsX3VubGVzcyAocXJldCA9PSBUUlVFLCAicG9zaXRpb24gd3JvbmciKTsKKyAgZmFpbF91bmxlc3MgKHBvc2l0aW9uID09IDEwICogR1NUX1NFQ09ORCwgInBvc2l0aW9uIGlzIHdyb25nIik7CisKKyAgLyogbGFzdCBidWZmZXIsIGJsb2NrcyBiZWNhdXNlIHByZXJvbGwgcXVldWUgaXMgZmlsbGVkLiBTdGFydCB0aGUgcHVzaCBpbiBhCisgICAqIG5ldyB0aHJlYWQgc28gdGhhdCB3ZSBjYW4gY2hlY2sgdGhlIHBvc2l0aW9uICovCisgIEdTVF9ERUJVRyAoInN0YXJ0aW5nIHRocmVhZCIpOworICB0aHJlYWQgPSBnX3RocmVhZF9jcmVhdGUgKChHVGhyZWFkRnVuYykgc2VuZF9idWZmZXIsIHNpbmtwYWQsIFRSVUUsIE5VTEwpOworICBmYWlsX2lmICh0aHJlYWQgPT0gTlVMTCwgIm5vIHRocmVhZCIpOworCisgIEdTVF9ERUJVRyAoIndhaXRpbmcgMSBzZWNvbmQiKTsKKyAgZ191c2xlZXAgKEdfVVNFQ19QRVJfU0VDKTsKKyAgR1NUX0RFQlVHICgid2FpdGluZyBkb25lIik7CisKKyAgLyogY2hlY2sgaWYgcG9zaXRpb24gaXMgc3RpbGwgMTAgc2Vjb25kcy4gVGhpcyBpcyByYWN5IGJlY2F1c2UgIHRoZSBhYm92ZQorICAgKiB0aHJlYWQgbWlnaHQgbm90IHlldCBoYXZlIHN0YXJ0ZWQgdGhlIHB1c2gsIGJlY2F1c2Ugb2YgdGhlIGFib3ZlIHNsZWVwLAorICAgKiB0aGlzIGlzIHZlcnkgdW5saWtlbHksIHRob3VnaC4gKi8KKyAgZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24gKHNpbmssIEdTVF9GT1JNQVRfVElNRSwgJnBvc2l0aW9uKTsKKyAgR1NUX0RFQlVHICgic2Vjb25kIGJ1ZmZlciBwb3NpdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICBHU1RfVElNRV9BUkdTIChwb3NpdGlvbikpOworICBmYWlsX3VubGVzcyAocG9zaXRpb24gPT0gMTAgKiBHU1RfU0VDT05ELCAicG9zaXRpb24gaXMgd3JvbmciKTsKKworICAvKiBub3cgd2UgZ28gdG8gcGxheWluZy4gVGhpcyBzaG91bGQgdW5sb2NrIGFuZCBzdG9wIHRoZSBhYm92ZSB0aHJlYWQuICovCisgIEdTVF9ERUJVRyAoImdvaW5nIHRvIFBMQVlJTkciKTsKKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzaW5rLCBHU1RfU1RBVEVfUExBWUlORyk7CisKKyAgLyogam9pbiB0aGUgdGhyZWFkLiBBdCB0aGlzIHBvaW50IHdlIGtub3cgdGhlIHNpbmsgcHJvY2Vzc2VkIHRoZSBsYXN0IGJ1ZmZlcgorICAgKiBhbmQgdGhlIHBvc2l0aW9uIHNob3VsZCBub3cgYmUgMjEwIHNlY29uZHM7IHRoZSB0aW1lIG9mIHRoZSBsYXN0IGJ1ZmZlciB3ZQorICAgKiBwdXNoZWQgKi8KKyAgR1NUX0RFQlVHICgiam9pbmluZyB0aHJlYWQiKTsKKyAgZ190aHJlYWRfam9pbiAodGhyZWFkKTsKKworICBnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbiAoc2luaywgR1NUX0ZPUk1BVF9USU1FLCAmcG9zaXRpb24pOworICBHU1RfREVCVUcgKCJsYXN0IGJ1ZmZlciBwb3NpdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICBHU1RfVElNRV9BUkdTIChwb3NpdGlvbikpOworICBmYWlsX3VubGVzcyAocG9zaXRpb24gPT0gMzEwICogR1NUX1NFQ09ORCwgInBvc2l0aW9uIGlzIHdyb25nIik7CisKKyAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzaW5rLCBHU1RfU1RBVEVfTlVMTCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOworICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIHdoZW4gd2UgZ2V0IHRoZSBBU1lOQ19ET05FLCBxdWVyeSB0aGUgcG9zaXRpb24gKi8KK3N0YXRpYyBHc3RCdXNTeW5jUmVwbHkKK2FzeW5jX2RvbmVfZW9zX2Z1bmMgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1zZywgR3N0RWxlbWVudCAqIHNpbmspCit7CisgIGlmIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpID09IEdTVF9NRVNTQUdFX0FTWU5DX0RPTkUpIHsKKyAgICBnaW50NjQgcG9zaXRpb247CisKKyAgICBHU1RfREVCVUcgKCJ3ZSBoYXZlIEFTWU5DX0RPTkUgbm93Iik7CisKKyAgICAvKiBnZXQgdGhlIHBvc2l0aW9uIG5vdyAqLworICAgIGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uIChzaW5rLCBHU1RfRk9STUFUX1RJTUUsICZwb3NpdGlvbik7CisKKyAgICBHU1RfREVCVUcgKCJ3ZSBoYXZlIHBvc2l0aW9uICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAocG9zaXRpb24pKTsKKworICAgIGZhaWxfdW5sZXNzIChwb3NpdGlvbiA9PSAxMCAqIEdTVF9TRUNPTkQsICJwb3NpdGlvbiBpcyB3cm9uZyIpOworICB9CisgIC8qIHdlIG11c3QgdW5yZWYgdGhlIG1lc3NhZ2UgaWYgd2UgcmV0dXJuIERST1AgKi8KKyAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7CisgIC8qIHdlIGNhbiBkcm9wIHRoZSBtZXNzYWdlLCBub3RoaW5nIGlzIGxpc3RlbmluZyBmb3IgaXQuICovCisgIHJldHVybiBHU1RfQlVTX0RST1A7Cit9CisKKy8qIHdoZW4gd2UgZ2V0IHRoZSBBU1lOQ19ET05FIG1lc3NhZ2UgZnJvbSBhIHNpbmssIHdlIHdhbnQgdGhlIHNpbmsgdG8gYmUgYWJsZQorICogdG8gcmVwb3J0IHRoZSBkdXJhdGlvbiBhbmQgcG9zaXRpb24uIFRoZSBzaW5rIHNob3VsZCBhbHNvIGhhdmUgY2FsbGVkIHRoZQorICogcmVuZGVyIG1ldGhvZC4gKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X2FzeW5jX2RvbmVfZW9zKQoreworICBHc3RFbGVtZW50ICpzaW5rOworICBHc3RFdmVudCAqZXZlbnQ7CisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKKyAgR3N0UGFkICpzaW5rcGFkOworICBnYm9vbGVhbiByZXM7CisgIEdzdEJ1cyAqYnVzOworICBnYm9vbGVhbiBxcmV0OworICBHc3RTZWdtZW50IHNlZ21lbnQ7CisgIGdpbnQ2NCBwb3NpdGlvbjsKKyAgR1RocmVhZCAqdGhyZWFkOworCisgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7CisgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNpbmspLCAic3luYyIsIFRSVUUsIE5VTEwpOworCisgIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc2luaywgInNpbmsiKTsKKworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNpbmssIEdTVF9TVEFURV9QQVVTRUQpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMsICJubyBBU1lOQyBzdGF0ZSByZXR1cm4iKTsKKworICAvKiBzZXQgYnVzIG9uIGVsZW1lbnQgc3luY2hyb25vdXNseSBsaXN0ZW4gZm9yIEFTWU5DX0RPTkUgKi8KKyAgYnVzID0gZ3N0X2J1c19uZXcgKCk7CisgIGdzdF9lbGVtZW50X3NldF9idXMgKHNpbmssIGJ1cyk7CisgIGdzdF9idXNfc2V0X3N5bmNfaGFuZGxlciAoYnVzLCAoR3N0QnVzU3luY0hhbmRsZXIpIGFzeW5jX2RvbmVfZW9zX2Z1bmMsIHNpbmspOworCisgIC8qIG1ha2UgbmV3c2VnbWVudCwgdGhpcyBzZXRzIHRoZSBwb3NpdGlvbiB0byAxMHNlYyB3aGVuIHRoZSBidWZmZXIgcHJlcm9sbHMgKi8KKyAgR1NUX0RFQlVHICgic2VuZGluZyBzZWdtZW50Iik7CisgIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOworICBzZWdtZW50LnRpbWUgPSAxMCAqIEdTVF9TRUNPTkQ7CisgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCk7CisgIHJlcyA9IGdzdF9wYWRfc2VuZF9ldmVudCAoc2lua3BhZCwgZXZlbnQpOworCisgIC8qIFdlIGhhdmUgbm90IHlldCByZWNlaXZlZCBhbnkgYnVmZmVycyBzbyB3ZSBhcmUgc3RpbGwgaW4gdGhlIFJFQURZIHN0YXRlLAorICAgKiB0aGUgcG9zaXRpb24gaXMgdGhlcmVmb3JlIHN0aWxsIG5vdCBxdWVyeWFibGUuICovCisgIHBvc2l0aW9uID0gLTE7CisgIHFyZXQgPSBnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbiAoc2luaywgR1NUX0ZPUk1BVF9USU1FLCAmcG9zaXRpb24pOworICBmYWlsX3VubGVzcyAocXJldCA9PSBUUlVFLCAicG9zaXRpb24gd3JvbmciKTsKKyAgZmFpbF91bmxlc3MgKHBvc2l0aW9uID09IDEwICogR1NUX1NFQ09ORCwgInBvc2l0aW9uIGlzIHdyb25nIik7CisKKyAgLyogU2luY2Ugd2UgYXJlIHBhdXNlZCBhbmQgdGhlIHByZXJvbGwgcXVldWUgaGFzIGEgbGVuZ3RoIG9mIDEsIHRoaXMgZnVuY3Rpb24KKyAgICogd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkuIFRoZSBFT1Mgd2lsbCBjb21wbGV0ZSB0aGUgcHJlcm9sbCBhbmQgdGhlCisgICAqIHBvc2l0aW9uIHNob3VsZCBub3cgYmUgMTAgc2Vjb25kcy4gKi8KKyAgR1NUX0RFQlVHICgicHVzaGluZyBFT1MiKTsKKyAgR1NUX0RFQlVHICgic3RhcnRpbmcgdGhyZWFkIik7CisgIHRocmVhZCA9IGdfdGhyZWFkX2NyZWF0ZSAoKEdUaHJlYWRGdW5jKSBzZW5kX2Vvcywgc2lua3BhZCwgVFJVRSwgTlVMTCk7CisgIGZhaWxfaWYgKHRocmVhZCA9PSBOVUxMLCAibm8gdGhyZWFkIik7CisKKyAgLyogd2FpdCBmb3IgcHJlcm9sbCAqLworICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHNpbmssIE5VTEwsIE5VTEwsIC0xKTsKKworICAvKiBjaGVjayBpZiBwb3NpdGlvbiBpcyBzdGlsbCAxMCBzZWNvbmRzICovCisgIGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uIChzaW5rLCBHU1RfRk9STUFUX1RJTUUsICZwb3NpdGlvbik7CisgIEdTVF9ERUJVRyAoIkVPUyBwb3NpdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKHBvc2l0aW9uKSk7CisgIGZhaWxfdW5sZXNzIChwb3NpdGlvbiA9PSAxMCAqIEdTVF9TRUNPTkQsICJwb3NpdGlvbiBpcyB3cm9uZyIpOworCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2luaywgR1NUX1NUQVRFX05VTEwpOworICBnX3RocmVhZF9qb2luICh0aHJlYWQpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgR011dGV4ICpwcmVyb2xsX2xvY2s7CitzdGF0aWMgR0NvbmQgKnByZXJvbGxfY29uZDsKKworc3RhdGljIHZvaWQKK3Rlc3RfYXN5bmNfZmFsc2Vfc2Vla19wcmVyb2xsIChHc3RFbGVtZW50ICogZWxlbSwgR3N0QnVmZmVyICogYnVmLAorICAgIEdzdFBhZCAqIHBhZCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgZ19tdXRleF9sb2NrIChwcmVyb2xsX2xvY2spOworICBHU1RfREVCVUcgKCJHb3QgcHJlcm9sbCBidWZmZXIgJXAiLCBidWYpOworICBnX2NvbmRfc2lnbmFsIChwcmVyb2xsX2NvbmQpOworICBnX211dGV4X3VubG9jayAocHJlcm9sbF9sb2NrKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfYXN5bmNfZmFsc2Vfc2Vla19oYW5kb2ZmIChHc3RFbGVtZW50ICogZWxlbSwgR3N0QnVmZmVyICogYnVmLAorICAgIEdzdFBhZCAqIHBhZCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgLyogc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWQsIHdlIG5ldmVyIGdvIHRvIFBMQVlJTkcgKi8KKyAgR1NUX0RFQlVHICgiR290IGhhbmRvZmYgYnVmZmVyICVwIiwgYnVmKTsKKyAgZmFpbF91bmxlc3MgKEZBTFNFKTsKK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfYXN5bmNfZmFsc2Vfc2VlaykKK3sKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpzb3VyY2UsICpzaW5rOworCisgIHByZXJvbGxfbG9jayA9IGdfbXV0ZXhfbmV3ICgpOworICBwcmVyb2xsX2NvbmQgPSBnX2NvbmRfbmV3ICgpOworCisgIC8qIENyZWF0ZSBnc3RyZWFtZXIgZWxlbWVudHMgKi8KKyAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgidGVzdC1waXBlbGluZSIpOworICBzb3VyY2UgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgImZpbGUtc291cmNlIik7CisgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJhdWRpby1vdXRwdXQiKTsKKworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzaW5rKSwgImFzeW5jIiwgRkFMU0UsIE5VTEwpOworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzaW5rKSwgIm51bS1idWZmZXJzIiwgMTAsIE5VTEwpOworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzaW5rKSwgInNpZ25hbC1oYW5kb2ZmcyIsIFRSVUUsIE5VTEwpOworCisgIGdfc2lnbmFsX2Nvbm5lY3QgKHNpbmssICJoYW5kb2ZmIiwgR19DQUxMQkFDSyAodGVzdF9hc3luY19mYWxzZV9zZWVrX2hhbmRvZmYpLAorICAgICAgTlVMTCk7CisgIGdfc2lnbmFsX2Nvbm5lY3QgKHNpbmssICJwcmVyb2xsLWhhbmRvZmYiLAorICAgICAgR19DQUxMQkFDSyAodGVzdF9hc3luY19mYWxzZV9zZWVrX3ByZXJvbGwpLCBOVUxMKTsKKworICAvKiB3ZSBhZGQgYWxsIGVsZW1lbnRzIGludG8gdGhlIHBpcGVsaW5lICovCisgIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc291cmNlLCBzaW5rLCBOVUxMKTsKKworICAvKiB3ZSBsaW5rIHRoZSBlbGVtZW50cyB0b2dldGhlciAqLworICBnc3RfZWxlbWVudF9saW5rIChzb3VyY2UsIHNpbmspOworCisgIEdTVF9ERUJVRyAoIk5vdyBwYXVzaW5nIik7CisgIGdfbXV0ZXhfbG9jayAocHJlcm9sbF9sb2NrKTsKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7CisKKyAgLyogd2FpdCBmb3IgcHJlcm9sbCAqLworICBHU1RfREVCVUcgKCJ3YWl0IGZvciBwcmVyb2xsIik7CisgIGdfY29uZF93YWl0IChwcmVyb2xsX2NvbmQsIHByZXJvbGxfbG9jayk7CisgIGdfbXV0ZXhfdW5sb2NrIChwcmVyb2xsX2xvY2spOworCisgIGdfbXV0ZXhfbG9jayAocHJlcm9sbF9sb2NrKTsKKyAgR1NUX0RFQlVHICgiU2Vla2luZyIpOworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2VlayAocGlwZWxpbmUsIDEuMCwgR1NUX0ZPUk1BVF9CWVRFUywKKyAgICAgICAgICBHU1RfU0VFS19GTEFHX0ZMVVNILCBHU1RfU0VFS19UWVBFX1NFVCwgMCwgR1NUX1NFRUtfVFlQRV9TRVQsIC0xKSk7CisKKyAgR1NUX0RFQlVHICgid2FpdCBmb3IgbmV3IHByZXJvbGwiKTsKKyAgLyogdGhpcyBlaXRoZXIgcHJlcm9sbHMgb3IgZmFpbHMgKi8KKyAgZ19jb25kX3dhaXQgKHByZXJvbGxfY29uZCwgcHJlcm9sbF9sb2NrKTsKKyAgZ19tdXRleF91bmxvY2sgKHByZXJvbGxfbG9jayk7CisKKyAgR1NUX0RFQlVHICgiYnJpbmcgcGlwZSB0byBzdGF0ZSBOVUxMIik7CisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKKworICBHU1RfREVCVUcgKCJEZWxldGluZyBwaXBlbGluZSIpOworICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChwaXBlbGluZSkpOworCisgIGdfbXV0ZXhfZnJlZSAocHJlcm9sbF9sb2NrKTsKKyAgZ19jb25kX2ZyZWUgKHByZXJvbGxfY29uZCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIEdNdXRleCAqaGFuZG9mZl9sb2NrOworc3RhdGljIEdDb25kICpoYW5kb2ZmX2NvbmQ7CisKK3N0YXRpYyB2b2lkCit0ZXN0X2FzeW5jX2ZhbHNlX3NlZWtfaW5fcGxheWluZ19oYW5kb2ZmIChHc3RFbGVtZW50ICogZWxlbSwgR3N0QnVmZmVyICogYnVmLAorICAgIEdzdFBhZCAqIHBhZCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgZ19tdXRleF9sb2NrIChoYW5kb2ZmX2xvY2spOworICBHU1RfREVCVUcgKCJHb3QgaGFuZG9mZiBidWZmZXIgJXAiLCBidWYpOworICBnX2NvbmRfc2lnbmFsIChoYW5kb2ZmX2NvbmQpOworICBnX211dGV4X3VubG9jayAoaGFuZG9mZl9sb2NrKTsKK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfYXN5bmNfZmFsc2Vfc2Vla19pbl9wbGF5aW5nKQoreworICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKnNvdXJjZSwgKnNpbms7CisKKyAgaGFuZG9mZl9sb2NrID0gZ19tdXRleF9uZXcgKCk7CisgIGhhbmRvZmZfY29uZCA9IGdfY29uZF9uZXcgKCk7CisKKyAgLyogQ3JlYXRlIGdzdHJlYW1lciBlbGVtZW50cyAqLworICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJ0ZXN0LXBpcGVsaW5lIik7CisgIHNvdXJjZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAiZmFrZS1zb3VyY2UiKTsKKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgImZha2Utb3V0cHV0Iik7CisKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc2luayksICJhc3luYyIsIEZBTFNFLCBOVUxMKTsKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc2luayksICJzaWduYWwtaGFuZG9mZnMiLCBUUlVFLCBOVUxMKTsKKworICBnX3NpZ25hbF9jb25uZWN0IChzaW5rLCAiaGFuZG9mZiIsCisgICAgICBHX0NBTExCQUNLICh0ZXN0X2FzeW5jX2ZhbHNlX3NlZWtfaW5fcGxheWluZ19oYW5kb2ZmKSwgTlVMTCk7CisKKyAgLyogd2UgYWRkIGFsbCBlbGVtZW50cyBpbnRvIHRoZSBwaXBlbGluZSAqLworICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIHNvdXJjZSwgc2luaywgTlVMTCk7CisKKyAgLyogd2UgbGluayB0aGUgZWxlbWVudHMgdG9nZXRoZXIgKi8KKyAgZ3N0X2VsZW1lbnRfbGluayAoc291cmNlLCBzaW5rKTsKKworICBHU1RfREVCVUcgKCJOb3cgcGxheWluZyIpOworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7CisKKyAgZ19tdXRleF9sb2NrIChoYW5kb2ZmX2xvY2spOworICBHU1RfREVCVUcgKCJ3YWl0IGZvciBoYW5kb2ZmIGJ1ZmZlciIpOworICBnX2NvbmRfd2FpdCAoaGFuZG9mZl9jb25kLCBoYW5kb2ZmX2xvY2spOworICBnX211dGV4X3VubG9jayAoaGFuZG9mZl9sb2NrKTsKKworICBHU1RfREVCVUcgKCJTZWVraW5nIik7CisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZWVrIChzb3VyY2UsIDEuMCwgR1NUX0ZPUk1BVF9CWVRFUywKKyAgICAgICAgICBHU1RfU0VFS19GTEFHX0ZMVVNILCBHU1RfU0VFS19UWVBFX1NFVCwgMCwgR1NUX1NFRUtfVFlQRV9TRVQsIC0xKSk7CisKKyAgZ19tdXRleF9sb2NrIChoYW5kb2ZmX2xvY2spOworICBHU1RfREVCVUcgKCJ3YWl0IGZvciBoYW5kb2ZmIGJ1ZmZlciIpOworICBnX2NvbmRfd2FpdCAoaGFuZG9mZl9jb25kLCBoYW5kb2ZmX2xvY2spOworICBnX211dGV4X3VubG9jayAoaGFuZG9mZl9sb2NrKTsKKworICBHU1RfREVCVUcgKCJicmluZyBwaXBlIHRvIHN0YXRlIE5VTEwiKTsKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOworCisgIEdTVF9ERUJVRyAoIkRlbGV0aW5nIHBpcGVsaW5lIik7CisgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKHBpcGVsaW5lKSk7CisKKyAgZ19tdXRleF9mcmVlIChoYW5kb2ZmX2xvY2spOworICBnX2NvbmRfZnJlZSAoaGFuZG9mZl9jb25kKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiB0ZXN0OiB0cnkgY2hhbmdpbmcgc3RhdGUgb2Ygc2lua3MgKi8KK3N0YXRpYyBTdWl0ZSAqCitnc3Rfc2lua3Nfc3VpdGUgKHZvaWQpCit7CisgIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiU2lua3MiKTsKKyAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOworICBndWludCB0aW1lb3V0ID0gMTA7CisKKyAgLyogdGltZSBvdXQgYWZ0ZXIgMTBzLCBub3QgdGhlIGRlZmF1bHQgMywgd2UgbmVlZCB0aGlzIGZvciB0aGUgbGFzdCB0ZXN0LgorICAgKiBXZSBuZWVkIGEgbG9uZ2VyIHRpbWVvdXQgd2hlbiBydW5uaW5nIHVuZGVyIHZhbGdyaW5kIHRob3VnaC4gKi8KKyAgaWYgKGdfZ2V0ZW52ICgiQ0tfREVGQVVMVF9USU1FT1VUIikgIT0gTlVMTCkKKyAgICB0aW1lb3V0ID0gTUFYICgxMCwgYXRvaSAoZ19nZXRlbnYgKCJDS19ERUZBVUxUX1RJTUVPVVQiKSkpOworICB0Y2FzZV9zZXRfdGltZW91dCAodGNfY2hhaW4sIHRpbWVvdXQpOworCisgIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc2luayk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zaW5rX2NvbXBsZXRpb24pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc3JjX3NpbmspOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbGl2ZXNyY19yZW1vdmUpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbGl2ZXNyY19zaW5rKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2xpdmVzcmMyX3NpbmspOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbGl2ZXNyYzNfc2luayk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9sb2NrZWRfc2luayk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF91bmxpbmtlZF9saXZlKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2RlbGF5ZWRfYXN5bmMpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYWRkZWRfYXN5bmMpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYWRkZWRfYXN5bmMyKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2FkZF9saXZlKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2FkZF9saXZlMik7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9iaW5fbGl2ZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mYWtlX2Vvcyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hc3luY19kb25lKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2FzeW5jX2RvbmVfZW9zKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2FzeW5jX2ZhbHNlX3NlZWspOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYXN5bmNfZmFsc2Vfc2Vla19pbl9wbGF5aW5nKTsKKworICByZXR1cm4gczsKK30KKworR1NUX0NIRUNLX01BSU4gKGdzdF9zaW5rcyk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nZW5lcmljL3N0YXRlcy5jIGIvdGVzdHMvY2hlY2svZ2VuZXJpYy9zdGF0ZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGI4YTFiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hlY2svZ2VuZXJpYy9zdGF0ZXMuYwpAQCAtMCwwICsxLDIyMiBAQAorLyogR1N0cmVhbWVyCisgKgorICogdW5pdCB0ZXN0IGZvciBzdGF0ZSBjaGFuZ2VzIG9uIGFsbCBlbGVtZW50cworICoKKyAqIENvcHlyaWdodCAoQykgPDIwMDU+IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisKK3N0YXRpYyBHTGlzdCAqZWxlbWVudHMgPSBOVUxMOworCitzdGF0aWMgdm9pZAorc2V0dXAgKHZvaWQpCit7CisgIEdMaXN0ICpmZWF0dXJlcywgKmY7CisgIEdMaXN0ICpwbHVnaW5zLCAqcDsKKyAgZ2NoYXIgKippZ25vcmVsaXN0ID0gTlVMTDsKKyAgY29uc3QgZ2NoYXIgKlNUQVRFX0lHTk9SRV9FTEVNRU5UUyA9IE5VTEw7CisKKyAgR1NUX0RFQlVHICgiZ2V0dGluZyBlbGVtZW50cyBmb3IgcGFja2FnZSAlcyIsIFBBQ0tBR0UpOworICBTVEFURV9JR05PUkVfRUxFTUVOVFMgPSBnX2dldGVudiAoIkdTVF9TVEFURV9JR05PUkVfRUxFTUVOVFMiKTsKKyAgaWYgKCFnX2dldGVudiAoIkdTVF9OT19TVEFURV9JR05PUkVfRUxFTUVOVFMiKSAmJiBTVEFURV9JR05PUkVfRUxFTUVOVFMpIHsKKyAgICBHU1RfREVCVUcgKCJXaWxsIGlnbm9yZSBlbGVtZW50IGZhY3RvcmllczogJyVzJyIsIFNUQVRFX0lHTk9SRV9FTEVNRU5UUyk7CisgICAgaWdub3JlbGlzdCA9IGdfc3Ryc3BsaXQgKFNUQVRFX0lHTk9SRV9FTEVNRU5UUywgIiAiLCAwKTsKKyAgfQorCisgIHBsdWdpbnMgPSBnc3RfcmVnaXN0cnlfZ2V0X3BsdWdpbl9saXN0IChnc3RfcmVnaXN0cnlfZ2V0X2RlZmF1bHQgKCkpOworCisgIGZvciAocCA9IHBsdWdpbnM7IHA7IHAgPSBwLT5uZXh0KSB7CisgICAgR3N0UGx1Z2luICpwbHVnaW4gPSBwLT5kYXRhOworCisgICAgaWYgKHN0cmNtcCAoZ3N0X3BsdWdpbl9nZXRfc291cmNlIChwbHVnaW4pLCBQQUNLQUdFKSAhPSAwKQorICAgICAgY29udGludWU7CisKKyAgICBmZWF0dXJlcyA9CisgICAgICAgIGdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2J5X3BsdWdpbiAoZ3N0X3JlZ2lzdHJ5X2dldF9kZWZhdWx0ICgpLAorICAgICAgICBnc3RfcGx1Z2luX2dldF9uYW1lIChwbHVnaW4pKTsKKworICAgIGZvciAoZiA9IGZlYXR1cmVzOyBmOyBmID0gZi0+bmV4dCkgeworICAgICAgR3N0UGx1Z2luRmVhdHVyZSAqZmVhdHVyZSA9IGYtPmRhdGE7CisgICAgICBjb25zdCBnY2hhciAqbmFtZSA9IGdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfbmFtZSAoZmVhdHVyZSk7CisgICAgICBnYm9vbGVhbiBpZ25vcmUgPSBGQUxTRTsKKworICAgICAgaWYgKCFHU1RfSVNfRUxFTUVOVF9GQUNUT1JZIChmZWF0dXJlKSkKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIGlmIChpZ25vcmVsaXN0KSB7CisgICAgICAgIGdjaGFyICoqczsKKworICAgICAgICBmb3IgKHMgPSBpZ25vcmVsaXN0OyBzICYmICpzOyArK3MpIHsKKyAgICAgICAgICBpZiAoZ19zdHJfaGFzX3ByZWZpeCAobmFtZSwgKnMpKSB7CisgICAgICAgICAgICBHU1RfREVCVUcgKCJpZ25vcmluZyBlbGVtZW50ICVzIiwgbmFtZSk7CisgICAgICAgICAgICBpZ25vcmUgPSBUUlVFOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoaWdub3JlKQorICAgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICBHU1RfREVCVUcgKCJhZGRpbmcgZWxlbWVudCAlcyIsIG5hbWUpOworICAgICAgZWxlbWVudHMgPSBnX2xpc3RfcHJlcGVuZCAoZWxlbWVudHMsIChncG9pbnRlcikgZ19zdHJkdXAgKG5hbWUpKTsKKyAgICB9CisgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSAoZmVhdHVyZXMpOworICB9CisgIGdzdF9wbHVnaW5fbGlzdF9mcmVlIChwbHVnaW5zKTsKKyAgZ19zdHJmcmVldiAoaWdub3JlbGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZWFyZG93biAodm9pZCkKK3sKKyAgR0xpc3QgKmU7CisKKyAgZm9yIChlID0gZWxlbWVudHM7IGU7IGUgPSBlLT5uZXh0KSB7CisgICAgZ19mcmVlIChlLT5kYXRhKTsKKyAgfQorICBnX2xpc3RfZnJlZSAoZWxlbWVudHMpOworICBlbGVtZW50cyA9IE5VTEw7Cit9CisKKworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3RhdGVfY2hhbmdlc191cF9hbmRfZG93bl9zZXEpCit7CisgIEdzdEVsZW1lbnQgKmVsZW1lbnQ7CisgIEdMaXN0ICplOworCisgIGZvciAoZSA9IGVsZW1lbnRzOyBlOyBlID0gZS0+bmV4dCkgeworICAgIGNvbnN0IGdjaGFyICpuYW1lID0gZS0+ZGF0YTsKKworICAgIEdTVF9ERUJVRyAoInRlc3RpbmcgZWxlbWVudCAlcyIsIG5hbWUpOworICAgIGVsZW1lbnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKG5hbWUsIG5hbWUpOworICAgIGZhaWxfaWYgKGVsZW1lbnQgPT0gTlVMTCwgIkNvdWxkIG5vdCBtYWtlIGVsZW1lbnQgZnJvbSBmYWN0b3J5ICVzIiwgbmFtZSk7CisKKyAgICBpZiAoR1NUX0lTX1BJUEVMSU5FIChlbGVtZW50KSkgeworICAgICAgR1NUX0RFQlVHICgiZWxlbWVudCAlcyBpcyBhIHBpcGVsaW5lIiwgbmFtZSk7CisgICAgfQorCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUkVBRFkpOworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX1BBVVNFRCk7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUExBWUlORyk7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9SRUFEWSk7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfTlVMTCk7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9SRUFEWSk7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUExBWUlORyk7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9OVUxMKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChlbGVtZW50KSk7CisgIH0KK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9zdGF0ZV9jaGFuZ2VzX3VwX3NlcSkKK3sKKyAgR3N0RWxlbWVudCAqZWxlbWVudDsKKyAgR0xpc3QgKmU7CisKKyAgZm9yIChlID0gZWxlbWVudHM7IGU7IGUgPSBlLT5uZXh0KSB7CisgICAgY29uc3QgZ2NoYXIgKm5hbWUgPSBlLT5kYXRhOworCisgICAgR1NUX0RFQlVHICgidGVzdGluZyBlbGVtZW50ICVzIiwgbmFtZSk7CisgICAgZWxlbWVudCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAobmFtZSwgbmFtZSk7CisgICAgZmFpbF9pZiAoZWxlbWVudCA9PSBOVUxMLCAiQ291bGQgbm90IG1ha2UgZWxlbWVudCBmcm9tIGZhY3RvcnkgJXMiLCBuYW1lKTsKKworICAgIGlmIChHU1RfSVNfUElQRUxJTkUgKGVsZW1lbnQpKSB7CisgICAgICBHU1RfREVCVUcgKCJlbGVtZW50ICVzIGlzIGEgcGlwZWxpbmUiLCBuYW1lKTsKKyAgICB9CisKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9SRUFEWSk7CisKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9QQVVTRUQpOworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX1JFQURZKTsKKworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX1BBVVNFRCk7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUExBWUlORyk7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9SRUFEWSk7CisKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9OVUxMKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChlbGVtZW50KSk7CisgIH0KK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9zdGF0ZV9jaGFuZ2VzX2Rvd25fc2VxKQoreworICBHc3RFbGVtZW50ICplbGVtZW50OworICBHTGlzdCAqZTsKKworICBmb3IgKGUgPSBlbGVtZW50czsgZTsgZSA9IGUtPm5leHQpIHsKKyAgICBjb25zdCBnY2hhciAqbmFtZSA9IGUtPmRhdGE7CisKKyAgICBHU1RfREVCVUcgKCJ0ZXN0aW5nIGVsZW1lbnQgJXMiLCBuYW1lKTsKKyAgICBlbGVtZW50ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlIChuYW1lLCBuYW1lKTsKKyAgICBmYWlsX2lmIChlbGVtZW50ID09IE5VTEwsICJDb3VsZCBub3QgbWFrZSBlbGVtZW50IGZyb20gZmFjdG9yeSAlcyIsIG5hbWUpOworCisgICAgaWYgKEdTVF9JU19QSVBFTElORSAoZWxlbWVudCkpIHsKKyAgICAgIEdTVF9ERUJVRyAoImVsZW1lbnQgJXMgaXMgYSBwaXBlbGluZSIsIG5hbWUpOworICAgIH0KKworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX1JFQURZKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9QQVVTRUQpOworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX1BMQVlJTkcpOworCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9QTEFZSU5HKTsKKworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX1BBVVNFRCk7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUkVBRFkpOworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX1BBVVNFRCk7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUExBWUlORyk7CisKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9QQVVTRUQpOworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX1JFQURZKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9OVUxMKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChlbGVtZW50KSk7CisgIH0KK30KKworR1NUX0VORF9URVNUOworCisKK3N0YXRpYyBTdWl0ZSAqCitzdGF0ZXNfc3VpdGUgKHZvaWQpCit7CisgIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgic3RhdGVzIik7CisgIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKKworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKKyAgdGNhc2VfYWRkX2NoZWNrZWRfZml4dHVyZSAodGNfY2hhaW4sIHNldHVwLCB0ZWFyZG93bik7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdGF0ZV9jaGFuZ2VzX3VwX2FuZF9kb3duX3NlcSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdGF0ZV9jaGFuZ2VzX3VwX3NlcSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdGF0ZV9jaGFuZ2VzX2Rvd25fc2VxKTsKKworICByZXR1cm4gczsKK30KKworR1NUX0NIRUNLX01BSU4gKHN0YXRlcyk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QvY2Fwc2xpc3QuaCBiL3Rlc3RzL2NoZWNrL2dzdC9jYXBzbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNDY4YjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9nc3QvY2Fwc2xpc3QuaApAQCAtMCwwICsxLDM2IEBACisjaW5jbHVkZSA8Z2xpYi5oPgorCisvKiBkZWZpbmVzIGFuIGFycmF5IG9mIHN0cmluZ3MgbmFtZWQgY2Fwc19saXN0LCB0aGF0IGNvbnRhaW5zIGEgbGlzdCBvZiBjYXBzIGZvcgorICAgZ2VuZXJhbCB0ZXN0cy4gU28gaWYgeW91IGRvbid0IGtub3cgd2hhdCBjYXBzIHRvIHVzZSB0byB3cml0ZSBhIHRlc3QsIGp1c3QKKyAgIGluY2x1ZGUgdGhpcyBmaWxlICovCisKK3N0YXRpYyBjb25zdCBnY2hhciAqY2Fwc19saXN0W10gPSB7CisgICJhdWRpby94LWFkcGNtLCBsYXlvdXQ9KHN0cmluZylxdWlja3RpbWU7IGF1ZGlvL3gtYWRwY20sIGxheW91dD0oc3RyaW5nKXF1aWNrdGltZTsgYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpd2F2OyBhdWRpby94LWFkcGNtLCBsYXlvdXQ9KHN0cmluZyl3YXY7IGF1ZGlvL3gtYWRwY20sIGxheW91dD0oc3RyaW5nKWRrMzsgYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpZGszOyBhdWRpby94LWFkcGNtLCBsYXlvdXQ9KHN0cmluZylkazQ7IGF1ZGlvL3gtYWRwY20sIGxheW91dD0oc3RyaW5nKWRrNDsgYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpd2VzdHdvb2Q7IGF1ZGlvL3gtYWRwY20sIGxheW91dD0oc3RyaW5nKXdlc3R3b29kOyBhdWRpby94LWFkcGNtLCBsYXlvdXQ9KHN0cmluZylzbWpwZWc7IGF1ZGlvL3gtYWRwY20sIGxheW91dD0oc3RyaW5nKXNtanBlZzsgYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpbWljcm9zb2Z0OyBhdWRpby94LWFkcGNtLCBsYXlvdXQ9KHN0cmluZyltaWNyb3NvZnQ7IGF1ZGlvL3gtYWRwY20sIGxheW91dD0oc3RyaW5nKTR4bTsgYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpNHhtOyBhdWRpby94LWFkcGNtLCBsYXlvdXQ9KHN0cmluZyl4YTsgYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpeGE7IGF1ZGlvL3gtYWRwY20sIGxheW91dD0oc3RyaW5nKWFkeDsgYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpYWR4OyBhdWRpby94LWFkcGNtLCBsYXlvdXQ9KHN0cmluZyllYTsgYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpZWE7IGF1ZGlvL3gtYWRwY20sIGxheW91dD0oc3RyaW5nKWc3MjY7IGF1ZGlvL3gtYWRwY20sIGxheW91dD0oc3RyaW5nKWc3MjYiLAorICAidmlkZW8veC1yYXcsIHdpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCBoZWlnaHQ9KGludClbIDE2LCA0MDk2IF0sIGZyYW1lcmF0ZT0oZG91YmxlKVsgMCwgMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDggXSwgZm9ybWF0PShzdHJpbmcpSTQyMDsgdmlkZW8veC1yYXcsIHdpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCBoZWlnaHQ9KGludClbIDE2LCA0MDk2IF0sIGZyYW1lcmF0ZT0oZG91YmxlKVsgMCwgMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDggXSwgZm9ybWF0PShzdHJpbmcpWVVZMjsgdmlkZW8veC1yYXctcmdiLCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdLCBmcmFtZXJhdGU9KGRvdWJsZSlbIDAsIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4IF0sIGJwcD0oaW50KTI0LCBkZXB0aD0oaW50KTI0LCByZWRfbWFzaz0oaW50KTE2NzExNjgwLCBncmVlbl9tYXNrPShpbnQpNjUyODAsIGJsdWVfbWFzaz0oaW50KTI1NSwgZW5kaWFubmVzcz0oaW50KTQzMjE7IHZpZGVvL3gtcmF3LXJnYiwgd2lkdGg9KGludClbIDE2LCA0MDk2IF0sIGhlaWdodD0oaW50KVsgMTYsIDQwOTYgXSwgZnJhbWVyYXRlPShkb3VibGUpWyAwLCAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCBdLCBicHA9KGludCkyNCwgZGVwdGg9KGludCkyNCwgcmVkX21hc2s9KGludCkyNTUsIGdyZWVuX21hc2s9KGludCk2NTI4MCwgYmx1ZV9tYXNrPShpbnQpMTY3MTE2ODAsIGVuZGlhbm5lc3M9KGludCk0MzIxOyB2aWRlby94LXJhdywgd2lkdGg9KGludClbIDE2LCA0MDk2IF0sIGhlaWdodD0oaW50KVsgMTYsIDQwOTYgXSwgZnJhbWVyYXRlPShkb3VibGUpWyAwLCAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCBdLCBmb3JtYXQ9KHN0cmluZylZNDJCOyB2aWRlby94LXJhdy1yZ2IsIHdpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCBoZWlnaHQ9KGludClbIDE2LCA0MDk2IF0sIGZyYW1lcmF0ZT0oZG91YmxlKVsgMCwgMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDggXSwgYnBwPShpbnQpMzIsIGRlcHRoPShpbnQpMjQsIHJlZF9tYXNrPShpbnQpNjUyODAsIGdyZWVuX21hc2s9KGludCkxNjcxMTY4MCwgYmx1ZV9tYXNrPShpbnQpLTE2Nzc3MjE2LCBlbmRpYW5uZXNzPShpbnQpNDMyMTsgdmlkZW8veC1yYXcsIHdpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCBoZWlnaHQ9KGludClbIDE2LCA0MDk2IF0sIGZyYW1lcmF0ZT0oZG91YmxlKVsgMCwgMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDggXSwgZm9ybWF0PShzdHJpbmcpWVVWOTsgdmlkZW8veC1yYXcsIHdpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCBoZWlnaHQ9KGludClbIDE2LCA0MDk2IF0sIGZyYW1lcmF0ZT0oZG91YmxlKVsgMCwgMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDggXSwgZm9ybWF0PShzdHJpbmcpWTQxQjsgdmlkZW8veC1yYXctcmdiLCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdLCBmcmFtZXJhdGU9KGRvdWJsZSlbIDAsIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4IF0sIGJwcD0oaW50KTE2LCBkZXB0aD0oaW50KTE2LCByZWRfbWFzaz0oaW50KTYzNDg4LCBncmVlbl9tYXNrPShpbnQpMjAxNiwgYmx1ZV9tYXNrPShpbnQpMzEsIGVuZGlhbm5lc3M9KGludCkxMjM0OyB2aWRlby94LXJhdy1yZ2IsIHdpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCBoZWlnaHQ9KGludClbIDE2LCA0MDk2IF0sIGZyYW1lcmF0ZT0oZG91YmxlKVsgMCwgMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDggXSwgYnBwPShpbnQpMTYsIGRlcHRoPShpbnQpMTUsIHJlZF9tYXNrPShpbnQpMzE3NDQsIGdyZWVuX21hc2s9KGludCk5OTIsIGJsdWVfbWFzaz0oaW50KTMxLCBlbmRpYW5uZXNzPShpbnQpMTIzNCIsCisgICJ2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBZVVkyLCBJNDIwIH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGRvdWJsZSlbIDAsIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4IF07IHZpZGVvL3gtanBlZywgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtZGl2eCwgZGl2eHZlcnNpb249KGludClbIDMsIDUgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gteHZpZCwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtM2l2eCwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtbXNtcGVnLCBtc21wZWd2ZXJzaW9uPShpbnQpWyA0MSwgNDMgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpMSwgc3lzdGVtc3RyZWFtPShib29sZWFuKWZhbHNlLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1oMjYzLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1kdiwgc3lzdGVtc3RyZWFtPShib29sZWFuKWZhbHNlLCB3aWR0aD0oaW50KTcyMCwgaGVpZ2h0PShpbnQpeyA1NzYsIDQ4MCB9OyB2aWRlby94LWh1ZmZ5dXYsIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdIiwKKyAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFlVWTIsIEk0MjAgfSwgd2lkdGg9KGludClbIDE2LCA0MDk2IF0sIGhlaWdodD0oaW50KVsgMTYsIDQwOTYgXSwgZnJhbWVyYXRlPShkb3VibGUpWyAwLCAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCBdOyBpbWFnZS9qcGVnLCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdOyB2aWRlby94LWRpdngsIHdpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCBoZWlnaHQ9KGludClbIDE2LCA0MDk2IF0sIGRpdnh2ZXJzaW9uPShpbnQpWyAzLCA1IF07IHZpZGVvL3gteHZpZCwgd2lkdGg9KGludClbIDE2LCA0MDk2IF0sIGhlaWdodD0oaW50KVsgMTYsIDQwOTYgXTsgdmlkZW8veC0zaXZ4LCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdOyB2aWRlby94LW1zbXBlZywgd2lkdGg9KGludClbIDE2LCA0MDk2IF0sIGhlaWdodD0oaW50KVsgMTYsIDQwOTYgXSwgbXNtcGVndmVyc2lvbj0oaW50KVsgNDEsIDQzIF07IHZpZGVvL21wZWcsIHdpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCBoZWlnaHQ9KGludClbIDE2LCA0MDk2IF0sIG1wZWd2ZXJzaW9uPShpbnQpMSwgc3lzdGVtc3RyZWFtPShib29sZWFuKWZhbHNlOyB2aWRlby94LWgyNjMsIHdpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCBoZWlnaHQ9KGludClbIDE2LCA0MDk2IF07IHZpZGVvL3gtZHYsIHdpZHRoPShpbnQpNzIwLCBoZWlnaHQ9KGludCl7IDU3NiwgNDgwIH0sIHN5c3RlbXN0cmVhbT0oYm9vbGVhbilmYWxzZTsgdmlkZW8veC1odWZmeXV2LCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdIiwKKyAgInZpZGVvL3gtcmF3LXJnYiwgYnBwPShpbnQpMzIsIGRlcHRoPShpbnQpMjQsIGVuZGlhbm5lc3M9KGludCk0MzIxLCByZWRfbWFzaz0oaW50KTY1MjgwLCBncmVlbl9tYXNrPShpbnQpMTY3MTE2ODAsIGJsdWVfbWFzaz0oaW50KS0xNjc3NzIxNiwgd2lkdGg9KGludClbIDE2LCA0MDk2IF0sIGhlaWdodD0oaW50KVsgMTYsIDQwOTYgXSwgZnJhbWVyYXRlPShkb3VibGUpWyAwLCAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCBdOyB2aWRlby94LXJhdy1yZ2IsIGJwcD0oaW50KTMyLCBkZXB0aD0oaW50KTI0LCBlbmRpYW5uZXNzPShpbnQpNDMyMSwgcmVkX21hc2s9KGludCktMTY3NzcyMTYsIGdyZWVuX21hc2s9KGludCkxNjcxMTY4MCwgYmx1ZV9tYXNrPShpbnQpNjUyODAsIHdpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCBoZWlnaHQ9KGludClbIDE2LCA0MDk2IF0sIGZyYW1lcmF0ZT0oZG91YmxlKVsgMCwgMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDggXSIsCisgICJ2aWRlby94LXJhdy1yZ2IsIGJwcD0oaW50KTMyLCBkZXB0aD0oaW50KTI0LCBlbmRpYW5uZXNzPShpbnQpNDMyMSwgcmVkX21hc2s9KGludCk2NTI4MCwgZ3JlZW5fbWFzaz0oaW50KTE2NzExNjgwLCBibHVlX21hc2s9KGludCktMTY3NzcyMTYsIHdpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCBoZWlnaHQ9KGludClbIDE2LCA0MDk2IF0sIGZyYW1lcmF0ZT0oZG91YmxlKVsgMCwgMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDggXSIsCisgICJ2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBJNDIwIH0sIHdpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCBoZWlnaHQ9KGludClbIDE2LCA0MDk2IF0sIGZyYW1lcmF0ZT0oZG91YmxlKVsgMCwgMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDggXSIsCisgICJ2aWRlby94LXJhdy1yZ2IsIGJwcCA9IChpbnQpIDMyLCBkZXB0aCA9IChpbnQpIDI0LCBlbmRpYW5uZXNzID0gKGludCkgQklHX0VORElBTiwgcmVkX21hc2sgPSAoaW50KSAweDAwMDAwMEZGLCBmcmFtZXJhdGUgPSAoZG91YmxlKSBbIDAsIG1heCBdIiwKKyAgInZpZGVvL3gtcmF3LXJnYiwgYnBwID0gKGludCkgMzIsIGRlcHRoID0gKGludCkgMjQsIGVuZGlhbm5lc3MgPSAoaW50KSBCSUdfRU5ESUFOLCByZWRfbWFzayA9IChpbnQpIDB4RkYwMDAwMDAsIGZyYW1lcmF0ZSA9IChkb3VibGUpIFsgMCwgbWF4IF0iLAorICAidmlkZW8veC1yYXctcmdiLFxcIGJwcD0oaW50KTMyIiwKKyAgLyogVGVzdCBmcmFjdGlvbiB0eXBlICovCisgICJ0ZXN0L2dzdC1mcmFjdGlvbiwgZnJhY3Rpb24gPSAoZnJhY3Rpb24pIDEvOCIsCisgICJ0ZXN0L2dzdC1mcmFjdGlvbiwgZnJhY3Rpb24gPSAoZnJhY3Rpb24pIE1JTiIsCisgICJ0ZXN0L2dzdC1mcmFjdGlvbiwgZnJhY3Rpb24gPSAoZnJhY3Rpb24pIE1BWCIsCisgIC8qIFRlc3QgZnJhY3Rpb24gcmFuZ2UgKi8KKyAgInRlc3QvZ3N0LWZyYWN0aW9uLXJhbmdlLCBmcmFjdGlvbiA9IChmcmFjdGlvbikgWyAxLzQsIDEvMyBdIiwKKyAgInRlc3QvZ3N0LWZyYWN0aW9uLXJhbmdlLCBmcmFjdGlvbiA9IChmcmFjdGlvbikgWyBNSU4sIE1BWCBdIiwKKyAgInRlc3QvZ3N0LWZyYWN0aW9uLXJhbmdlLCBmcmFjdGlvbiA9IChmcmFjdGlvbikgWyAxL01BWCwgTUFYIF0iLAorICAvKiBUZXN0IGxpc3RzIG9mIGZyYWN0aW9ucyBhbmQgZnJhY3Rpb24gcmFuZ2VzICovCisgICJ0ZXN0L2dzdC1mcmFjdGlvbi1yYW5nZSwgZnJhY3Rpb24gPSAoZnJhY3Rpb24pIHsgWyAxLzQsIDEvMyBdLCAxLzggfSIsCisgICJ0ZXN0L2dzdC1mcmFjdGlvbi1yYW5nZSwgZnJhY3Rpb24gPSAoZnJhY3Rpb24pIHsgWyAxLzQsIDEvMyBdLCBbIDEvOCwgMi84IF0gfSIsCisKKyAgLyogU29tZSByYW5kb20gY2hlY2tzICovCisgICJ2aWRlby94LXJhdywgZm9ybWF0ID0gKHN0cmluZykgeyBJNDIwLCBZNDJCLCBZNDQ0IH0sIGZyYW1lcmF0ZSA9IChmcmFjdGlvbikgWzEvTUFYLCBNQVhdLCB3aWR0aCA9IChpbnQpIFsgMSwgTUFYIF0sIGhlaWdodCA9IChpbnQpIFsgMSwgTUFYIF0iLAorCisgICJBTlkiLAorICAiRU1QVFkiCit9OworCmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QvZ3N0LmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkwNzk1OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3QuYwpAQCAtMCwwICsxLDExMyBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisgKgorICogZ3N0LmM6IFVuaXQgdGVzdCBmb3IgZ3N0LmMKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisjaW5jbHVkZSA8Z3N0L2dzdHZlcnNpb24uaD4KKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfaW5pdCkKK3sKKyAgLyogZG9uJ3Qgc2VnZmF1bHQgd2l0aCBOVUxMLCBOVUxMICovCisgIGdzdF9pbml0IChOVUxMLCBOVUxMKTsKKyAgLyogYWxsb3cgY2FsbGluZyB0d2ljZS4gd2VsbCwgYWN0dWFsbHksIHRocmljZS4gKi8KKyAgZ3N0X2luaXQgKE5VTEwsIE5VTEwpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2RlaW5pdCkKK3sKKyAgZ3N0X2luaXQgKE5VTEwsIE5VTEwpOworCisgIGdzdF9kZWluaXQgKCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfZGVpbml0X3N5c2Nsb2NrKQoreworICBHc3RDbG9jayAqY2xvY2s7CisKKyAgZ3N0X2luaXQgKE5VTEwsIE5VTEwpOworCisgIGNsb2NrID0gZ3N0X3N5c3RlbV9jbG9ja19vYnRhaW4gKCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKKworICBnc3RfZGVpbml0ICgpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIHRlc3RzIGlmIHdlIGNhbiBjcmVhdGUgYW4gZWxlbWVudCBmcm9tIGEgY29tcGlsZWQtaW4gcGx1Z2luICovCitHU1RfU1RBUlRfVEVTVCAodGVzdF9uZXdfcGlwZWxpbmUpCit7CisgIEdzdEVsZW1lbnQgKnBpcGVsaW5lOworCisgIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiB0ZXN0cyBpZiB3ZSBjYW4gbG9hZCBhbiBlbGVtZW50IGZyb20gYSBwbHVnaW4gKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X25ld19mYWtlc3JjKQoreworICBHc3RFbGVtZW50ICplbGVtZW50OworCisgIGVsZW1lbnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGVsZW1lbnQpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3ZlcnNpb24pCit7CisgIGd1aW50IG1ham9yLCBtaW5vciwgbWljcm8sIG5hbm87CisgIGdjaGFyICp2ZXJzaW9uOworCisgIGdzdF92ZXJzaW9uICgmbWFqb3IsICZtaW5vciwgJm1pY3JvLCAmbmFubyk7CisgIGFzc2VydF9lcXVhbHNfaW50IChtYWpvciwgR1NUX1ZFUlNJT05fTUFKT1IpOworCisgIHZlcnNpb24gPSBnc3RfdmVyc2lvbl9zdHJpbmcgKCk7CisgIGZhaWxfaWYgKHZlcnNpb24gPT0gTlVMTCk7CisgIGdfZnJlZSAodmVyc2lvbik7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIFN1aXRlICoKK2dzdF9zdWl0ZSAodm9pZCkKK3sKKyAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3QiKTsKKyAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ3N0IHRlc3RzIik7CisKKyAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9pbml0KTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X25ld19waXBlbGluZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9uZXdfZmFrZXNyYyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF92ZXJzaW9uKTsKKyAgLyogcnVuIHRoZXNlIGxhc3Qgc28gdGhlIG90aGVycyBkb24ndCBmYWlsIGlmIENLX0ZPUks9bm8gaXMgYmVpbmcgdXNlZCAqLworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZGVpbml0X3N5c2Nsb2NrKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2RlaW5pdCk7CisKKyAgcmV0dXJuIHM7Cit9CisKK0dTVF9DSEVDS19NQUlOIChnc3QpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5OGU1OTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmMKQEAgLTAsMCArMSwxMTkyIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA1IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKyAqCisgKiBnc3RiaW4uYzogVW5pdCB0ZXN0IGZvciBHc3RCaW4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisKK3N0YXRpYyB2b2lkCitwb3BfYXN5bmNfZG9uZSAoR3N0QnVzICogYnVzKQoreworICBHc3RNZXNzYWdlICptZXNzYWdlOworCisgIEdTVF9ERUJVRyAoInBvcHBpbmcgYXN5bmMtZG9uZSBtZXNzYWdlIik7CisgIG1lc3NhZ2UgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfQVNZTkNfRE9ORSwgLTEpOworCisgIGZhaWxfdW5sZXNzIChtZXNzYWdlICYmIEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpCisgICAgICA9PSBHU1RfTUVTU0FHRV9BU1lOQ19ET05FLCAiZGlkIG5vdCBnZXQgR1NUX01FU1NBR0VfQVNZTkNfRE9ORSIpOworCisgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKKyAgR1NUX0RFQlVHICgicG9wcGVkIG1lc3NhZ2UiKTsKK30KKworc3RhdGljIHZvaWQKK3BvcF9tZXNzYWdlcyAoR3N0QnVzICogYnVzLCBpbnQgY291bnQpCit7CisgIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAgaW50IGk7CisKKyAgR1NUX0RFQlVHICgicG9wcGluZyAlZCBtZXNzYWdlcyIsIGNvdW50KTsKKyAgZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICBtZXNzYWdlID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQsIC0xKTsKKworICAgIGZhaWxfdW5sZXNzIChtZXNzYWdlICYmIEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpCisgICAgICAgID09IEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQsICJkaWQgbm90IGdldCBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEIik7CisKKyAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7CisgIH0KKyAgR1NUX0RFQlVHICgicG9wcGVkICVkIG1lc3NhZ2VzIiwgY291bnQpOworfQorCitHU1RfU1RBUlRfVEVTVCAodGVzdF9pbnRlcmZhY2UpCit7CisgIEdzdEJpbiAqYmluLCAqYmluMjsKKyAgR3N0RWxlbWVudCAqZmlsZXNyYzsKKyAgR3N0SXRlcmF0b3IgKml0OworICBHVmFsdWUgaXRlbSA9IHsgMCwgfTsKKworICBiaW4gPSBHU1RfQklOIChnc3RfYmluX25ldyAoTlVMTCkpOworICBmYWlsX3VubGVzcyAoYmluICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGJpbiIpOworCisgIGZpbGVzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmaWxlc3JjIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChmaWxlc3JjICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGZpbGVzcmMiKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9JU19VUklfSEFORExFUiAoZmlsZXNyYyksICJGaWxlc3JjIG5vdCBhIFVSSSBoYW5kbGVyIik7CisgIGdzdF9iaW5fYWRkIChiaW4sIGZpbGVzcmMpOworCisgIGZhaWxfdW5sZXNzIChnc3RfYmluX2dldF9ieV9pbnRlcmZhY2UgKGJpbiwgR1NUX1RZUEVfVVJJX0hBTkRMRVIpID09IGZpbGVzcmMpOworICBnc3Rfb2JqZWN0X3VucmVmIChmaWxlc3JjKTsKKworICBpdCA9IGdzdF9iaW5faXRlcmF0ZV9hbGxfYnlfaW50ZXJmYWNlIChiaW4sIEdTVF9UWVBFX1VSSV9IQU5ETEVSKTsKKyAgZmFpbF91bmxlc3MgKGl0ICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2l0ZXJhdG9yX25leHQgKGl0LCAmaXRlbSkgPT0gR1NUX0lURVJBVE9SX09LKTsKKyAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X29iamVjdCAoJml0ZW0pID09IChncG9pbnRlcikgZmlsZXNyYyk7CisgIGdfdmFsdWVfcmVzZXQgKCZpdGVtKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9pdGVyYXRvcl9uZXh0IChpdCwgJml0ZW0pID09IEdTVF9JVEVSQVRPUl9ET05FKTsKKyAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKKworICBnc3RfYmluX2FkZF9tYW55IChiaW4sCisgICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpZGVudGl0eSIsIE5VTEwpLAorICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiaWRlbnRpdHkiLCBOVUxMKSwKKyAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImlkZW50aXR5IiwgTlVMTCksIE5VTEwpOworICBpdCA9IGdzdF9iaW5faXRlcmF0ZV9hbGxfYnlfaW50ZXJmYWNlIChiaW4sIEdTVF9UWVBFX1VSSV9IQU5ETEVSKTsKKyAgZmFpbF91bmxlc3MgKGl0ICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2l0ZXJhdG9yX25leHQgKGl0LCAmaXRlbSkgPT0gR1NUX0lURVJBVE9SX09LKTsKKyAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X29iamVjdCAoJml0ZW0pID09IChncG9pbnRlcikgZmlsZXNyYyk7CisgIGdfdmFsdWVfcmVzZXQgKCZpdGVtKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9pdGVyYXRvcl9uZXh0IChpdCwgJml0ZW0pID09IEdTVF9JVEVSQVRPUl9ET05FKTsKKyAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKKworICBiaW4yID0gYmluOworICBiaW4gPSBHU1RfQklOIChnc3RfYmluX25ldyAoTlVMTCkpOworICBmYWlsX3VubGVzcyAoYmluICE9IE5VTEwpOworICBnc3RfYmluX2FkZF9tYW55IChiaW4sCisgICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpZGVudGl0eSIsIE5VTEwpLAorICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiaWRlbnRpdHkiLCBOVUxMKSwKKyAgICAgIEdTVF9FTEVNRU5UIChiaW4yKSwgZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiaWRlbnRpdHkiLCBOVUxMKSwgTlVMTCk7CisgIGl0ID0gZ3N0X2Jpbl9pdGVyYXRlX2FsbF9ieV9pbnRlcmZhY2UgKGJpbiwgR1NUX1RZUEVfVVJJX0hBTkRMRVIpOworICBmYWlsX3VubGVzcyAoZ3N0X2l0ZXJhdG9yX25leHQgKGl0LCAmaXRlbSkgPT0gR1NUX0lURVJBVE9SX09LKTsKKyAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X29iamVjdCAoJml0ZW0pID09IChncG9pbnRlcikgZmlsZXNyYyk7CisgIGdfdmFsdWVfcmVzZXQgKCZpdGVtKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9pdGVyYXRvcl9uZXh0IChpdCwgJml0ZW0pID09IEdTVF9JVEVSQVRPUl9ET05FKTsKKyAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKKworICBnc3RfYmluX2FkZCAoYmluLCBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmaWxlc3JjIiwgTlVMTCkpOworICBnc3RfYmluX2FkZCAoYmluMiwgZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmlsZXNyYyIsIE5VTEwpKTsKKyAgaXQgPSBnc3RfYmluX2l0ZXJhdGVfYWxsX2J5X2ludGVyZmFjZSAoYmluLCBHU1RfVFlQRV9VUklfSEFORExFUik7CisgIGZhaWxfdW5sZXNzIChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZpdGVtKSA9PSBHU1RfSVRFUkFUT1JfT0spOworICBnX3ZhbHVlX3Jlc2V0ICgmaXRlbSk7CisgIGZhaWxfdW5sZXNzIChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZpdGVtKSA9PSBHU1RfSVRFUkFUT1JfT0spOworICBnX3ZhbHVlX3Jlc2V0ICgmaXRlbSk7CisgIGZhaWxfdW5sZXNzIChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZpdGVtKSA9PSBHU1RfSVRFUkFUT1JfT0spOworICBnX3ZhbHVlX3Jlc2V0ICgmaXRlbSk7CisgIGZhaWxfdW5sZXNzIChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZpdGVtKSA9PSBHU1RfSVRFUkFUT1JfRE9ORSk7CisgIGdfdmFsdWVfdW5zZXQgKCZpdGVtKTsKKyAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChiaW4pOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X21lc3NhZ2Vfc3RhdGVfY2hhbmdlZCkKK3sKKyAgR3N0QmluICpiaW47CisgIEdzdEJ1cyAqYnVzOworICBHc3RNZXNzYWdlICptZXNzYWdlOworICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7CisKKyAgYmluID0gR1NUX0JJTiAoZ3N0X2Jpbl9uZXcgKE5VTEwpKTsKKyAgZmFpbF91bmxlc3MgKGJpbiAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBiaW4iKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoYmluLCAiYmluIiwgMSk7CisKKyAgYnVzID0gZ19vYmplY3RfbmV3IChnc3RfYnVzX2dldF90eXBlICgpLCBOVUxMKTsKKyAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoR1NUX0VMRU1FTlRfQ0FTVCAoYmluKSwgYnVzKTsKKworICAvKiBjaGFuZ2Ugc3RhdGUsIHNwYXduaW5nIGEgbWVzc2FnZSwgY2F1c2luZyBhbiBpbmNyZWYgb24gdGhlIGJpbiAqLworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pLCBHU1RfU1RBVEVfUkVBRFkpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7CisKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoYmluLCAiYmluIiwgMik7CisKKyAgLyogZ2V0IGFuZCB1bnJlZiB0aGUgbWVzc2FnZSwgY2F1c2luZyBhIGRlY3JlZiBvbiB0aGUgYmluICovCisgIG1lc3NhZ2UgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCwgLTEpOworCisgIGZhaWxfdW5sZXNzIChtZXNzYWdlICYmIEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpCisgICAgICA9PSBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VELCAiZGlkIG5vdCBnZXQgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCIpOworCisgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKKworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChiaW4sICJiaW4iLCAxKTsKKworICAvKiBjbGVhbiB1cCAqLworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pLCBHU1RfU1RBVEVfTlVMTCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOworICBnc3Rfb2JqZWN0X3VucmVmIChiaW4pOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X21lc3NhZ2Vfc3RhdGVfY2hhbmdlZF9jaGlsZCkKK3sKKyAgR3N0QmluICpiaW47CisgIEdzdEVsZW1lbnQgKnNyYzsKKyAgR3N0QnVzICpidXM7CisgIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7CisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKKworICBiaW4gPSBHU1RfQklOIChnc3RfYmluX25ldyAoTlVMTCkpOworICBmYWlsX3VubGVzcyAoYmluICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGJpbiIpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChiaW4sICJiaW4iLCAxKTsKKworICBidXMgPSBnX29iamVjdF9uZXcgKGdzdF9idXNfZ2V0X3R5cGUgKCksIE5VTEwpOworICBnc3RfZWxlbWVudF9zZXRfYnVzIChHU1RfRUxFTUVOVF9DQVNUIChiaW4pLCBidXMpOworCisgIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKKyAgZmFpbF9pZiAoc3JjID09IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGZha2VzcmMiKTsKKyAgZ3N0X2Jpbl9hZGQgKGJpbiwgc3JjKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoYmluLCAiYmluIiwgMSk7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDEpOworCisgIC8qIGNoYW5nZSBzdGF0ZSwgc3Bhd25pbmcgdHdvIG1lc3NhZ2VzOgorICAgKiAtIGZpcnN0IGZvciBmYWtlc3JjLCBmb3J3YXJkZWQgdG8gYmluJ3MgYnVzLCBjYXVzaW5nIGluY3JlZiBvbiBmYWtlc3JjCisgICAqIC0gc2Vjb25kIGZvciBiaW4sIGNhdXNpbmcgYW4gaW5jcmVmIG9uIHRoZSBiaW4gKi8KKyAgR1NUX0RFQlVHICgic2V0dGluZyBiaW4gdG8gUkVBRFkiKTsKKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAoYmluKSwgR1NUX1NUQVRFX1JFQURZKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOworCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDIpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChiaW4sICJiaW4iLCAyKTsKKworICAvKiBnZXQgYW5kIHVucmVmIHRoZSBtZXNzYWdlLCBjYXVzaW5nIGEgZGVjcmVmIG9uIHRoZSBzcmMgKi8KKyAgbWVzc2FnZSA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VELCAtMSk7CisgIGZhaWxfdW5sZXNzIChtZXNzYWdlICYmIEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpCisgICAgICA9PSBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VELCAiZGlkIG5vdCBnZXQgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCIpOworCisgIGZhaWxfdW5sZXNzIChtZXNzYWdlLT5zcmMgPT0gR1NUX09CSkVDVCAoc3JjKSk7CisgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKKworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmMsICJzcmMiLCAxKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoYmluLCAiYmluIiwgMik7CisKKyAgLyogZ2V0IGFuZCB1bnJlZiBtZXNzYWdlIDIsIGNhdXNpbmcgYSBkZWNyZWYgb24gdGhlIGJpbiAqLworICBtZXNzYWdlID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQsIC0xKTsKKyAgZmFpbF91bmxlc3MgKG1lc3NhZ2UgJiYgR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkKKyAgICAgID09IEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQsICJkaWQgbm90IGdldCBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEIik7CisKKyAgZmFpbF91bmxlc3MgKG1lc3NhZ2UtPnNyYyA9PSBHU1RfT0JKRUNUIChiaW4pKTsKKyAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOworCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDEpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChiaW4sICJiaW4iLCAxKTsKKworICAvKiBjbGVhbiB1cCAqLworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pLCBHU1RfU1RBVEVfTlVMTCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoYmluKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9tZXNzYWdlX3N0YXRlX2NoYW5nZWRfY2hpbGRyZW4pCit7CisgIEdzdFBpcGVsaW5lICpwaXBlbGluZTsKKyAgR3N0RWxlbWVudCAqc3JjLCAqc2luazsKKyAgR3N0QnVzICpidXM7CisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKKyAgR3N0U3RhdGUgY3VycmVudCwgcGVuZGluZzsKKworICBwaXBlbGluZSA9IEdTVF9QSVBFTElORSAoZ3N0X3BpcGVsaW5lX25ldyAoTlVMTCkpOworICBmYWlsX3VubGVzcyAocGlwZWxpbmUgIT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgcGlwZWxpbmUiKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGlwZWxpbmUsICJwaXBlbGluZSIsIDEpOworCisgIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKKyAgZmFpbF9pZiAoc3JjID09IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGZha2VzcmMiKTsKKyAgLyogbmVlZCB0byBzaWxlbmNlIHRoZSBlbGVtZW50IGFzIHRoZSBkZWVwX25vdGlmeSByZWZjb3VudHMgdGhlCisgICAqIHBhcmVudHMgd2hpbGUgcnVubmluZyAqLworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAic2lsZW50IiwgVFJVRSwgTlVMTCk7CisgIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNyYyk7CisKKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7CisgIC8qIG5lZWQgdG8gc2lsZW5jZSB0aGUgZWxlbWVudCBhcyB0aGUgZGVlcF9ub3RpZnkgcmVmY291bnRzIHRoZQorICAgKiBwYXJlbnRzIHdoaWxlIHJ1bm5pbmcgKi8KKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc2luayksICJzaWxlbnQiLCBUUlVFLCBOVUxMKTsKKyAgZmFpbF9pZiAoc2luayA9PSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBmYWtlc2luayIpOworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzaW5rKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBzaW5rKSwgImNvdWxkIG5vdCBsaW5rIHNyYyBhbmQgc2luayIpOworCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHBpcGVsaW5lLCAicGlwZWxpbmUiLCAxKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjLCAic3JjIiwgMSk7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNpbmssICJzaW5rIiwgMSk7CisKKyAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKHBpcGVsaW5lKTsKKworICAvKiBjaGFuZ2Ugc3RhdGUgdG8gUkVBRFksIHNwYXduaW5nIHRocmVlIG1lc3NhZ2VzICovCisgIEdTVF9ERUJVRyAoInNldHRpbmcgcGlwZWxpbmUgdG8gUkVBRFkiKTsKKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLCBHU1RfU1RBVEVfUkVBRFkpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7CisKKyAgLyogZWFjaCBvYmplY3QgaXMgcmVmZXJlbmNlZCBieSBhIG1lc3NhZ2UgKi8KKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoYnVzLCAiYnVzIiwgMik7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDIpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rLCAic2luayIsIDIpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwaXBlbGluZSwgInBpcGVsaW5lIiwgMik7CisKKyAgcG9wX21lc3NhZ2VzIChidXMsIDMpOworICBmYWlsX2lmIChnc3RfYnVzX2hhdmVfcGVuZGluZyAoYnVzKSwgInVuZXhwZWN0ZWQgcGVuZGluZyBtZXNzYWdlcyIpOworCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGJ1cywgImJ1cyIsIDIpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmMsICJzcmMiLCAxKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc2luaywgInNpbmsiLCAxKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGlwZWxpbmUsICJwaXBlbGluZSIsIDEpOworCisgIC8qIGNoYW5nZSBzdGF0ZSB0byBQQVVTRUQsIHNwYXduaW5nIHRocmVlIG1lc3NhZ2VzICovCisgIEdTVF9ERUJVRyAoInNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIik7CisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKHBpcGVsaW5lKSwgR1NUX1NUQVRFX1BBVVNFRCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyk7CisgIHJldCA9CisgICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChwaXBlbGluZSksICZjdXJyZW50LCAmcGVuZGluZywKKyAgICAgIEdTVF9DTE9DS19USU1FX05PTkUpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7CisgIGZhaWxfdW5sZXNzIChjdXJyZW50ID09IEdTVF9TVEFURV9QQVVTRUQpOworICBmYWlsX3VubGVzcyAocGVuZGluZyA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HKTsKKworICAvKiB3YWl0IGZvciBhc3luYyB0aHJlYWQgdG8gc2V0dGxlIGRvd24gKi8KKyAgR1NUX0RFQlVHICgid2FpdGluZyBmb3IgcmVmY291bnQiKTsKKyAgd2hpbGUgKEdTVF9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKHBpcGVsaW5lKSA+IDMpCisgICAgVEhSRUFEX1NXSVRDSCAoKTsKKyAgR1NUX0RFQlVHICgicmVmY291bnQgPD0gMyBub3ciKTsKKworICAvKiBlYWNoIG9iamVjdCBpcyByZWZlcmVuY2VkIGJ5IGEgbWVzc2FnZTsKKyAgICogYmFzZV9zcmMgaXMgYmxvY2tlZCBpbiB0aGUgcHVzaCBhbmQgaGFzIGFuIGV4dHJhIHJlZmNvdW50LgorICAgKiBiYXNlX3NpbmtfY2hhaW4gaGFzIHRha2VuIGEgcmVmY291bnQgb24gdGhlIHNpbmssIGFuZCBpcyBibG9ja2VkIG9uCisgICAqIHByZXJvbGwKKyAgICogVGhlIHN0cmVhbS1zdGF0dXMgbWVzc2FnZXMgaG9sZHMgMiBtb3JlIHJlZnMgdG8gdGhlIGVsZW1lbnQgKi8KKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjLCAic3JjIiwgNCk7CisgIC8qIHJlZmNvdW50IGNhbiBiZSA0IGlmIHRoZSBiaW4gaXMgc3RpbGwgcHJvY2Vzc2luZyB0aGUgYXN5bmNfZG9uZSBtZXNzYWdlIG9mCisgICAqIHRoZSBzaW5rLiAqLworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UX0JFVFdFRU4gKHNpbmssICJzaW5rIiwgMiwgMyk7CisgIC8qIDIgb3IgMyBpcyB2YWxpZCwgYmVjYXVzZSB0aGUgcGlwZWxpbmUgbWlnaHQgc3RpbGwgYmUgcG9zdGluZyAKKyAgICogaXRzIHN0YXRlX2NoYW5nZSBtZXNzYWdlICovCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlRfQkVUV0VFTiAocGlwZWxpbmUsICJwaXBlbGluZSIsIDIsIDMpOworCisgIHBvcF9tZXNzYWdlcyAoYnVzLCAzKTsKKyAgcG9wX2FzeW5jX2RvbmUgKGJ1cyk7CisgIGZhaWxfaWYgKChnc3RfYnVzX3BvcCAoYnVzKSkgIT0gTlVMTCk7CisKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoYnVzLCAiYnVzIiwgMik7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDEpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rLCAic2luayIsIDEpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwaXBlbGluZSwgInBpcGVsaW5lIiwgMSk7CisKKyAgLyogY2hhbmdlIHN0YXRlIHRvIFBMQVlJTkcsIHNwYXduaW5nIHRocmVlIG1lc3NhZ2VzICovCisgIEdTVF9ERUJVRyAoInNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyIpOworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChwaXBlbGluZSksIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOworICByZXQgPQorICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLCAmY3VycmVudCwgJnBlbmRpbmcsCisgICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOworICBmYWlsX3VubGVzcyAoY3VycmVudCA9PSBHU1RfU1RBVEVfUExBWUlORyk7CisgIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcpOworCisgIC8qIGVhY2ggb2JqZWN0IGlzIHJlZmVyZW5jZWQgYnkgb25lIG1lc3NhZ2UKKyAgICogc3JjIG1pZ2h0IGhhdmUgYW4gZXh0cmEgcmVmZXJlbmNlIGlmIGl0J3Mgc3RpbGwgcHVzaGluZworICAgKiBzaW5rIG1pZ2h0IGhhdmUgYW4gZXh0cmEgcmVmZXJlbmNlIGlmIGl0J3Mgc3RpbGwgYmxvY2tlZCBvbiBwcmVyb2xsCisgICAqIHBpcGVsaW5lIHBvc3RlZCBhIG5ldy1jbG9jayBtZXNzYWdlIHRvby4gKi8KKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVF9CRVRXRUVOIChzcmMsICJzcmMiLCAyLCAzKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVF9CRVRXRUVOIChzaW5rLCAic2luayIsIDIsIDMpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwaXBlbGluZSwgInBpcGVsaW5lIiwgMyk7CisKKyAgcG9wX21lc3NhZ2VzIChidXMsIDMpOworICBmYWlsX2lmICgoZ3N0X2J1c19wb3AgKGJ1cykpICE9IE5VTEwpOworCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGJ1cywgImJ1cyIsIDIpOworICAvKiBzcmMgbWlnaHQgaGF2ZSBhbiBleHRyYSByZWZlcmVuY2UgaWYgaXQncyBzdGlsbCBwdXNoaW5nICovCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlRfQkVUV0VFTiAoc3JjLCAic3JjIiwgMSwgMik7CisgIC8qIHNpbmsgbWlnaHQgaGF2ZSBhbiBleHRyYSByZWZlcmVuY2UgaWYgaXQncyBzdGlsbCBibG9ja2VkIG9uIHByZXJvbGwgKi8KKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVF9CRVRXRUVOIChzaW5rLCAic2luayIsIDEsIDIpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwaXBlbGluZSwgInBpcGVsaW5lIiwgMSk7CisKKyAgLyogZ28gYmFjayB0byBSRUFEWSwgc3Bhd25pbmcgc2l4IG1lc3NhZ2VzICovCisgIEdTVF9ERUJVRyAoInNldHRpbmcgcGlwZWxpbmUgdG8gUkVBRFkiKTsKKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLCBHU1RfU1RBVEVfUkVBRFkpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7CisKKyAgLyogZWFjaCBvYmplY3QgaXMgcmVmZXJlbmNlZCBieSB0d28gbWVzc2FnZXMsIHRoZSBzb3VyY2UgYWxzbyBoYXMgdGhlCisgICAqIHN0cmVhbS1zdGF0dXMgbWVzc2FnZSByZWZlcmVuY2luZyBpdCAqLworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmMsICJzcmMiLCA0KTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc2luaywgInNpbmsiLCAzKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGlwZWxpbmUsICJwaXBlbGluZSIsIDMpOworCisgIHBvcF9tZXNzYWdlcyAoYnVzLCA2KTsKKyAgZmFpbF9pZiAoKGdzdF9idXNfcG9wIChidXMpKSAhPSBOVUxMKTsKKworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmMsICJzcmMiLCAxKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc2luaywgInNpbmsiLCAxKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGlwZWxpbmUsICJwaXBlbGluZSIsIDEpOworCisgIC8qIHNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCBmbHVzaGVzIHRoZSBidXMgYXV0b21hdGljYWxseSAqLworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChwaXBlbGluZSksIEdTVF9TVEFURV9OVUxMKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOworCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDEpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rLCAic2luayIsIDEpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwaXBlbGluZSwgInBpcGVsaW5lIiwgMSk7CisKKyAgLyogY2xlYW4gdXAgKi8KKyAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKKyAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3dhdGNoX2Zvcl9zdGF0ZV9jaGFuZ2UpCit7CisgIEdzdEVsZW1lbnQgKnNyYywgKnNpbmssICpiaW47CisgIEdzdEJ1cyAqYnVzOworICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7CisKKyAgYmluID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYmluIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChiaW4gIT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgYmluIik7CisKKyAgYnVzID0gZ19vYmplY3RfbmV3IChnc3RfYnVzX2dldF90eXBlICgpLCBOVUxMKTsKKyAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoR1NUX0VMRU1FTlRfQ0FTVCAoYmluKSwgYnVzKTsKKworICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCk7CisgIGZhaWxfaWYgKHNyYyA9PSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBmYWtlc3JjIik7CisgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOworICBmYWlsX2lmIChzaW5rID09IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGZha2VzaW5rIik7CisKKyAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGJpbiksIHNpbmspOworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAoYmluKSwgc3JjKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBzaW5rKSwgImNvdWxkIG5vdCBsaW5rIHNyYyBhbmQgc2luayIpOworCisgIC8qIGNoYW5nZSBzdGF0ZSwgc3Bhd25pbmcgdHdvIHRpbWVzIHRocmVlIG1lc3NhZ2VzICovCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKGJpbiksIEdTVF9TVEFURV9QQVVTRUQpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpOworICByZXQgPQorICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChHU1RfRUxFTUVOVCAoYmluKSwgTlVMTCwgTlVMTCwKKyAgICAgIEdTVF9DTE9DS19USU1FX05PTkUpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7CisKKyAgcG9wX21lc3NhZ2VzIChidXMsIDYpOworICBwb3BfYXN5bmNfZG9uZSAoYnVzKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2J1c19oYXZlX3BlbmRpbmcgKGJ1cykgPT0gRkFMU0UsCisgICAgICAiVW5leHBlY3RlZCBtZXNzYWdlcyBvbiBidXMiKTsKKworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pLCBHU1RfU1RBVEVfUExBWUlORyk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKKworICBwb3BfbWVzc2FnZXMgKGJ1cywgMyk7CisKKyAgLyogdGhpcyBvbmUgbWlnaHQgcmV0dXJuIGVpdGhlciBTVUNDRVNTIG9yIEFTWU5DLCBsaWtlbHkgU1VDQ0VTUyAqLworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pLCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChHU1RfRUxFTUVOVCAoYmluKSwgTlVMTCwgTlVMTCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisKKyAgcG9wX21lc3NhZ2VzIChidXMsIDMpOworICBpZiAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpCisgICAgcG9wX2FzeW5jX2RvbmUgKGJ1cyk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9idXNfaGF2ZV9wZW5kaW5nIChidXMpID09IEZBTFNFLAorICAgICAgIlVuZXhwZWN0ZWQgbWVzc2FnZXMgb24gYnVzIik7CisKKyAgLyogc2V0dGluZyBiaW4gdG8gTlVMTCBmbHVzaGVzIHRoZSBidXMgYXV0b21hdGljYWxseSAqLworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pLCBHU1RfU1RBVEVfTlVMTCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKKworICAvKiBjbGVhbiB1cCAqLworICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOworICBnc3Rfb2JqZWN0X3VucmVmIChiaW4pOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3N0YXRlX2NoYW5nZV9lcnJvcl9tZXNzYWdlKQoreworICBHc3RFbGVtZW50ICpzcmMsICpzaW5rLCAqYmluOworICBHc3RCdXMgKmJ1czsKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OworCisgIGJpbiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImJpbiIsIE5VTEwpOworICBmYWlsX3VubGVzcyAoYmluICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGJpbiIpOworCisgIGJ1cyA9IGdfb2JqZWN0X25ldyAoZ3N0X2J1c19nZXRfdHlwZSAoKSwgTlVMTCk7CisgIGdzdF9lbGVtZW50X3NldF9idXMgKEdTVF9FTEVNRU5UX0NBU1QgKGJpbiksIGJ1cyk7CisKKyAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOworICBmYWlsX2lmIChzcmMgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgZmFrZXNyYyIpOworICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKKyAgZmFpbF9pZiAoc2luayA9PSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBmYWtlc2luayIpOworCisgIC8qIGFkZCBidXQgZG9uJ3QgbGluayBlbGVtZW50cyAqLworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAoYmluKSwgc2luayk7CisgIGdzdF9iaW5fYWRkIChHU1RfQklOIChiaW4pLCBzcmMpOworCisgIC8qIGNoYW5nZSBzdGF0ZSwgdGhpcyBzaG91bGQgc3VjY2VlZCAqLworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pLCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKTsKKworICAvKiBub3cgd2FpdCwgdGhlIHN0cmVhbWluZyB0aHJlYWQgd2lsbCBlcnJvciBiZWNhdXNlIHRoZSBzb3VyY2UgaXMgbm90CisgICAqIGxpbmtlZC4gKi8KKyAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChHU1RfRUxFTUVOVCAoYmluKSwgTlVMTCwgTlVMTCwKKyAgICAgIEdTVF9DTE9DS19USU1FX05PTkUpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7CisKKyAgZ3N0X2J1c19zZXRfZmx1c2hpbmcgKGJ1cywgVFJVRSk7CisKKyAgLyogc2V0dGluZyBiaW4gdG8gTlVMTCBmbHVzaGVzIHRoZSBidXMgYXV0b21hdGljYWxseSAqLworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pLCBHU1RfU1RBVEVfTlVMTCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKKworICAvKiBjbGVhbiB1cCAqLworICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOworICBnc3Rfb2JqZWN0X3VucmVmIChiaW4pOworfQorCitHU1RfRU5EX1RFU1Q7CisKKworLyogYWRkaW5nIGFuIGVsZW1lbnQgd2l0aCBsaW5rZWQgcGFkcyB0byBhIGJpbiB1bmxpbmtzIHRoZQorICogcGFkcyAqLworR1NUX1NUQVJUX1RFU1QgKHRlc3RfYWRkX2xpbmtlZCkKK3sKKyAgR3N0RWxlbWVudCAqc3JjLCAqc2luazsKKyAgR3N0UGFkICpzcmNwYWQsICpzaW5rcGFkOworICBHc3RFbGVtZW50ICpwaXBlbGluZTsKKworICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKE5VTEwpOworICBmYWlsX3VubGVzcyAocGlwZWxpbmUgIT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgcGlwZWxpbmUiKTsKKworICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCk7CisgIGZhaWxfaWYgKHNyYyA9PSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBmYWtlc3JjIik7CisgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOworICBmYWlsX2lmIChzaW5rID09IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGZha2VzaW5rIik7CisKKyAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYywgInNyYyIpOworICBmYWlsX3VubGVzcyAoc3JjcGFkICE9IE5VTEwpOworICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNpbmssICJzaW5rIik7CisgIGZhaWxfdW5sZXNzIChzaW5rcGFkICE9IE5VTEwpOworCisgIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCkgPT0gR1NUX1BBRF9MSU5LX09LKTsKKworICAvKiBwYWRzIGFyZSBsaW5rZWQgbm93ICovCisgIGZhaWxfdW5sZXNzIChnc3RfcGFkX2lzX2xpbmtlZCAoc3JjcGFkKSk7CisgIGZhaWxfdW5sZXNzIChnc3RfcGFkX2lzX2xpbmtlZCAoc2lua3BhZCkpOworCisgIC8qIGFkZGluZyBlbGVtZW50IHRvIGJpbiB2b2lkcyBoaWVyYXJjaHkgc28gcGFkcyBhcmUgdW5saW5rZWQgKi8KKyAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjKTsKKworICAvKiBjaGVjayBpZiBwYWRzIHJlYWxseSBhcmUgdW5saW5rZWQgKi8KKyAgZmFpbF91bmxlc3MgKCFnc3RfcGFkX2lzX2xpbmtlZCAoc3JjcGFkKSk7CisgIGZhaWxfdW5sZXNzICghZ3N0X3BhZF9pc19saW5rZWQgKHNpbmtwYWQpKTsKKworICAvKiBjYW5ub3QgbGluayBwYWRzIGluIHdyb25nIGhpZXJhcmNoeSAqLworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rIChzcmNwYWQsIHNpbmtwYWQpID09IEdTVF9QQURfTElOS19XUk9OR19ISUVSQVJDSFkpOworCisgIC8qIGFkZGluZyBvdGhlciBlbGVtZW50IHRvIGJpbiBhcyB3ZWxsICovCisgIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNpbmspOworCisgIC8qIG5vdyB3ZSBjYW4gbGluayBhZ2FpbiAqLworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rIChzcmNwYWQsIHNpbmtwYWQpID09IEdTVF9QQURfTElOS19PSyk7CisKKyAgLyogY2hlY2sgaWYgcGFkcyByZWFsbHkgYXJlIGxpbmtlZCAqLworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9pc19saW5rZWQgKHNyY3BhZCkpOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9pc19saW5rZWQgKHNpbmtwYWQpKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKKyAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIGFkZGluZyBvdXJzZWxmIHNob3VsZCBmYWlsICovCitHU1RfU1RBUlRfVEVTVCAodGVzdF9hZGRfc2VsZikKK3sKKyAgR3N0RWxlbWVudCAqYmluOworCisgIGJpbiA9IGdzdF9iaW5fbmV3IChOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGJpbiAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBiaW4iKTsKKworICBBU1NFUlRfV0FSTklORyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGJpbiksIGJpbikpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKGJpbik7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworCisvKiBnX3ByaW50ICgiJTEwczogJTRkID0+ICU0ZFxuIiwgR1NUX09CSkVDVF9OQU1FIChtc2ctPnNyYyksIG9sZCwgbmV3KTsgKi8KKworI2RlZmluZSBBU1NFUlRfU1RBVEVfQ0hBTkdFX01TRyhidXMsZWxlbWVudCxvbGRfc3RhdGUsbmV3X3N0YXRlLG51bSkgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEdzdE1lc3NhZ2UgKm1zZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEdzdFN0YXRlIG9sZCA9IDAsIG5ldyA9IDAsIHBlbmRpbmcgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1zZyA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VELCBHU1RfU0VDT05EKTsgICAgICAgICAgXAorICAgIGZhaWxfaWYgKG1zZyA9PSBOVUxMLCAiTm8gc3RhdGUgY2hhbmdlIG1lc3NhZ2Ugd2l0aGluIDEgc2Vjb25kICgjIiAgICAgICAgXAorICAgICAgICBHX1NUUklOR0lGWSAobnVtKSAiKSIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQgKG1zZywgJm9sZCwgJm5ldywgJnBlbmRpbmcpOyAgICAgICAgICAgICAgXAorICAgIGZhaWxfaWYgKG1zZy0+c3JjICE9IEdTVF9PQkpFQ1QgKGVsZW1lbnQpLCBHX1NUUklOR0lGWShlbGVtZW50KSAgICAgICAgICAgXAorICAgICAgICAiIHNob3VsZCBoYXZlIGNoYW5nZWQgc3RhdGUgbmV4dCAoIyIgR19TVFJJTkdJRlkgKG51bSkgIikiKTsgICAgICAgICAgXAorICAgIGZhaWxfaWYgKG9sZCAhPSBvbGRfc3RhdGUgfHwgbmV3ICE9IG5ld19zdGF0ZSwgInN0YXRlIGNoYW5nZSBpcyBub3QgIiAgICAgXAorICAgICAgICBHX1NUUklOR0lGWSAob2xkX3N0YXRlKSAiID0+ICIgR19TVFJJTkdJRlkgKG5ld19zdGF0ZSkpOyAgICAgICAgICAgICAgXAorICAgIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2NoaWxkcmVuX3N0YXRlX2NoYW5nZV9vcmRlcl9mbGFnZ2VkX3NpbmspCit7CisgIEdzdEVsZW1lbnQgKnNyYywgKmlkZW50aXR5LCAqc2luaywgKnBpcGVsaW5lOworICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7CisgIEdzdFN0YXRlIGN1cnJlbnQsIHBlbmRpbmc7CisgIEdzdEJ1cyAqYnVzOworCisgIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoTlVMTCk7CisgIGZhaWxfdW5sZXNzIChwaXBlbGluZSAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBwaXBlbGluZSIpOworCisgIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGVsaW5lKTsKKyAgZmFpbF91bmxlc3MgKGJ1cyAhPSBOVUxMLCAiUGlwZWxpbmUgaGFzIG5vIGJ1cz8hIik7CisKKyAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOworICBmYWlsX2lmIChzcmMgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgZmFrZXNyYyIpOworICBnX29iamVjdF9zZXQgKHNyYywgIm51bS1idWZmZXJzIiwgNSwgTlVMTCk7CisKKyAgaWRlbnRpdHkgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpZGVudGl0eSIsIE5VTEwpOworICBmYWlsX2lmIChpZGVudGl0eSA9PSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBpZGVudGl0eSIpOworCisgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOworICBmYWlsX2lmIChzaW5rID09IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGZha2VzaW5rIik7CisKKyAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMsIGlkZW50aXR5LCBzaW5rLCBOVUxMKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBpZGVudGl0eSkgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rIChpZGVudGl0eSwgc2luaykgPT0gVFJVRSk7CisKKyAgLyogKDEpIFRlc3Qgc3RhdGUgY2hhbmdlIHdpdGggZmFrZXNpbmsgYmVpbmcgYSByZWd1bGFyIHNpbmsgKi8KKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOworICBmYWlsX2lmIChyZXQgIT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQywKKyAgICAgICJTdGF0ZSBjaGFuZ2UgdG8gUExBWUlORyBkaWQgbm90IHJldHVybiBBU1lOQyIpOworICByZXQgPQorICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgJmN1cnJlbnQsICZwZW5kaW5nLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKyAgZmFpbF9pZiAocmV0ICE9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIlN0YXRlIGNoYW5nZSB0byBQTEFZSU5HIGZhaWxlZCIpOworICBmYWlsX2lmIChjdXJyZW50ICE9IEdTVF9TVEFURV9QTEFZSU5HLCAiU3RhdGUgY2hhbmdlIHRvIFBMQVlJTkcgZmFpbGVkIik7CisgIGZhaWxfaWYgKHBlbmRpbmcgIT0gR1NUX1NUQVRFX1ZPSURfUEVORElORywgIlN0YXRlIGNoYW5nZSB0byBQTEFZSU5HIGZhaWxlZCIpOworCisgIC8qIE5VTEwgPT4gUkVBRFkgKi8KKyAgQVNTRVJUX1NUQVRFX0NIQU5HRV9NU0cgKGJ1cywgc2luaywgR1NUX1NUQVRFX05VTEwsIEdTVF9TVEFURV9SRUFEWSwgMTAxKTsKKyAgQVNTRVJUX1NUQVRFX0NIQU5HRV9NU0cgKGJ1cywgaWRlbnRpdHksIEdTVF9TVEFURV9OVUxMLCBHU1RfU1RBVEVfUkVBRFksIDEwMik7CisgIEFTU0VSVF9TVEFURV9DSEFOR0VfTVNHIChidXMsIHNyYywgR1NUX1NUQVRFX05VTEwsIEdTVF9TVEFURV9SRUFEWSwgMTAzKTsKKyAgQVNTRVJUX1NUQVRFX0NIQU5HRV9NU0cgKGJ1cywgcGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMLCBHU1RfU1RBVEVfUkVBRFksIDEwNCk7CisKKyAgLyogUkVBRFkgPT4gUEFVU0VEICovCisgIC8qIGJlY2F1c2Ugb2YgcHJlLXJvbGxpbmcsIHNpbmsgd2lsbCByZXR1cm4gQVNZTkMgb24gc3RhdGUKKyAgICogY2hhbmdlIGFuZCBjaGFuZ2Ugc3RhdGUgbGF0ZXIgd2hlbiBpdCBoYXMgYSBidWZmZXIgKi8KKyAgR1NUX0RFQlVHICgicG9wcGluZyBSRUFEWSAtPiBQQVVTRUQgbWVzc2FnZXMiKTsKKyAgQVNTRVJUX1NUQVRFX0NIQU5HRV9NU0cgKGJ1cywgaWRlbnRpdHksIEdTVF9TVEFURV9SRUFEWSwgR1NUX1NUQVRFX1BBVVNFRCwKKyAgICAgIDEwNSk7CisjaWYgMAorICAvKiBGcm9tIGhlcmUgb24sIGFsbCBiZXRzIGFyZSBvZmYuIFVzdWFsbHkgdGhlIHNvdXJjZSBjaGFuZ2VzIHN0YXRlIG5leHQsCisgICAqIGJ1dCBpdCBtaWdodCBqdXN0IGFzIHdlbGwgYmUgdGhhdCB0aGUgZmlyc3QgYnVmZmVyIHByb2R1Y2VkIGJ5IHRoZQorICAgKiBzb3VyY2UgcmVhY2hlcyB0aGUgc2luayBiZWZvcmUgdGhlIHNvdXJjZSBoYXMgZmluaXNoZWQgaXRzIHN0YXRlIGNoYW5nZSwKKyAgICogaW4gd2hpY2ggY2FzZSB0aGUgc2luayB3aWxsIGNvbW1pdCBpdHMgbmV3IHN0YXRlIGJlZm9yZSB0aGUgc291cmNlIC4uLiAgKi8KKyAgQVNTRVJUX1NUQVRFX0NIQU5HRV9NU0cgKGJ1cywgc3JjLCBHU1RfU1RBVEVfUkVBRFksIEdTVF9TVEFURV9QQVVTRUQsIDEwNik7CisgIEFTU0VSVF9TVEFURV9DSEFOR0VfTVNHIChidXMsIHNpbmssIEdTVF9TVEFURV9SRUFEWSwgR1NUX1NUQVRFX1BBVVNFRCwgMTA3KTsKKyNlbHNlCisKKyAgcG9wX21lc3NhZ2VzIChidXMsIDIpOyAgICAgICAgLyogcG9wIHJlbWFpbmluZyByZWFkeSA9PiBwYXVzZWQgbWVzc2FnZXMgb2ZmIHRoZSBidXMgKi8KKyAgQVNTRVJUX1NUQVRFX0NIQU5HRV9NU0cgKGJ1cywgcGlwZWxpbmUsIEdTVF9TVEFURV9SRUFEWSwgR1NUX1NUQVRFX1BBVVNFRCwKKyAgICAgIDEwOCk7CisgIHBvcF9hc3luY19kb25lIChidXMpOworI2VuZGlmCisgIC8qIFBBVVNFRCA9PiBQTEFZSU5HICovCisgIEdTVF9ERUJVRyAoInBvcHBpbmcgUEFVU0VEIC0+IFBMQVlJTkcgbWVzc2FnZXMiKTsKKyAgQVNTRVJUX1NUQVRFX0NIQU5HRV9NU0cgKGJ1cywgc2luaywgR1NUX1NUQVRFX1BBVVNFRCwgR1NUX1NUQVRFX1BMQVlJTkcsIDEwOSk7CisgIEFTU0VSVF9TVEFURV9DSEFOR0VfTVNHIChidXMsIGlkZW50aXR5LCBHU1RfU1RBVEVfUEFVU0VELCBHU1RfU1RBVEVfUExBWUlORywKKyAgICAgIDExMCk7CisgIEFTU0VSVF9TVEFURV9DSEFOR0VfTVNHIChidXMsIHNyYywgR1NUX1NUQVRFX1BBVVNFRCwgR1NUX1NUQVRFX1BMQVlJTkcsIDExMSk7CisgIEFTU0VSVF9TVEFURV9DSEFOR0VfTVNHIChidXMsIHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VELCBHU1RfU1RBVEVfUExBWUlORywKKyAgICAgIDExMik7CisKKyAgLyogZG9uJ3Qgc2V0IHRvIE5VTEwgdGhhdCB3aWxsIHNldCB0aGUgYnVzIGZsdXNoaW5nIGFuZCBraWxsIG91ciBtZXNzYWdlcyAqLworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUkVBRFkpOworICBmYWlsX2lmIChyZXQgIT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiU3RhdGUgY2hhbmdlIHRvIFJFQURZIGZhaWxlZCIpOworICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKyAgZmFpbF9pZiAocmV0ICE9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIlN0YXRlIGNoYW5nZSB0byBSRUFEWSBmYWlsZWQiKTsKKworICAvKiBUT0RPOiBkbyB3ZSBuZWVkIHRvIGNoZWNrIGRvd253YXJkcyBzdGF0ZSBjaGFuZ2Ugb3JkZXIgYXMgd2VsbD8gKi8KKyAgcG9wX21lc3NhZ2VzIChidXMsIDQpOyAgICAgICAgLyogcG9wIHBsYXlpbmcgPT4gcGF1c2VkIG1lc3NhZ2VzIG9mZiB0aGUgYnVzICovCisgIHBvcF9tZXNzYWdlcyAoYnVzLCA0KTsgICAgICAgIC8qIHBvcCBwYXVzZWQgPT4gcmVhZHkgbWVzc2FnZXMgb2ZmIHRoZSBidXMgKi8KKworICB3aGlsZSAoR1NUX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAocGlwZWxpbmUpID4gMSkKKyAgICBUSFJFQURfU1dJVENIICgpOworCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDEpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rLCAic2luayIsIDEpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwaXBlbGluZSwgInBpcGVsaW5lIiwgMSk7CisKKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOworICBmYWlsX2lmIChyZXQgIT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiU3RhdGUgY2hhbmdlIHRvIE5VTEwgZmFpbGVkIik7CisKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjLCAic3JjIiwgMSk7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNpbmssICJzaW5rIiwgMSk7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHBpcGVsaW5lLCAicGlwZWxpbmUiLCAxKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOworICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9jaGlsZHJlbl9zdGF0ZV9jaGFuZ2Vfb3JkZXJfc2VtaV9zaW5rKQoreworICBHc3RFbGVtZW50ICpzcmMsICppZGVudGl0eSwgKnNpbmssICpwaXBlbGluZTsKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OworICBHc3RTdGF0ZSBjdXJyZW50LCBwZW5kaW5nOworICBHc3RCdXMgKmJ1czsKKworICAvKiAoMikgTm93IGFnYWluLCBidXQgY2hlY2sgb3RoZXIgY29kZSBwYXRoIHdoZXJlIHdlIGRvbid0IGhhdmUKKyAgICogICAgIGEgcHJvcGVyIHNpbmsgY29ycmVjdGx5IGZsYWdnZWQgYXMgc3VjaCwgYnV0IGEgJ3NlbWktc2luaycgKi8KKyAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3IChOVUxMKTsKKyAgZmFpbF91bmxlc3MgKHBpcGVsaW5lICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIHBpcGVsaW5lIik7CisKKyAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAocGlwZWxpbmUpOworICBmYWlsX3VubGVzcyAoYnVzICE9IE5VTEwsICJQaXBlbGluZSBoYXMgbm8gYnVzPyEiKTsKKworICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCk7CisgIGZhaWxfaWYgKHNyYyA9PSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBmYWtlc3JjIik7CisKKyAgaWRlbnRpdHkgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpZGVudGl0eSIsIE5VTEwpOworICBmYWlsX2lmIChpZGVudGl0eSA9PSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBpZGVudGl0eSIpOworCisgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOworICBmYWlsX2lmIChzaW5rID09IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGZha2VzaW5rIik7CisKKyAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMsIGlkZW50aXR5LCBzaW5rLCBOVUxMKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBpZGVudGl0eSkgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rIChpZGVudGl0eSwgc2luaykgPT0gVFJVRSk7CisKKyAgLyogdGhpcyBpcyBub3QgdmVyeSBuaWNlIGJ1dCBzaG91bGQgd29yayBqdXN0IGZpbmUgaW4gdGhpcyBjYXNlLiAqLworICBHU1RfT0JKRUNUX0ZMQUdfVU5TRVQgKHNpbmssIEdTVF9FTEVNRU5UX0lTX1NJTkspOyAgICAvKiA8PT09PT09PT0gKi8KKworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7CisgIGZhaWxfaWYgKHJldCAhPSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DLCAiU3RhdGUgY2hhbmdlIHRvIFBMQVlJTkcgbm90IEFTWU5DIik7CisgIHJldCA9CisgICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCAmY3VycmVudCwgJnBlbmRpbmcsIEdTVF9DTE9DS19USU1FX05PTkUpOworICBmYWlsX2lmIChyZXQgIT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiU3RhdGUgY2hhbmdlIHRvIFBMQVlJTkcgZmFpbGVkIik7CisgIGZhaWxfaWYgKGN1cnJlbnQgIT0gR1NUX1NUQVRFX1BMQVlJTkcsICJTdGF0ZSBjaGFuZ2UgdG8gUExBWUlORyBmYWlsZWQiKTsKKyAgZmFpbF9pZiAocGVuZGluZyAhPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HLCAiU3RhdGUgY2hhbmdlIHRvIFBMQVlJTkcgZmFpbGVkIik7CisKKyAgLyogTlVMTCA9PiBSRUFEWSAqLworICBBU1NFUlRfU1RBVEVfQ0hBTkdFX01TRyAoYnVzLCBzaW5rLCBHU1RfU1RBVEVfTlVMTCwgR1NUX1NUQVRFX1JFQURZLCAyMDEpOworICBBU1NFUlRfU1RBVEVfQ0hBTkdFX01TRyAoYnVzLCBpZGVudGl0eSwgR1NUX1NUQVRFX05VTEwsIEdTVF9TVEFURV9SRUFEWSwgMjAyKTsKKyAgQVNTRVJUX1NUQVRFX0NIQU5HRV9NU0cgKGJ1cywgc3JjLCBHU1RfU1RBVEVfTlVMTCwgR1NUX1NUQVRFX1JFQURZLCAyMDMpOworICBBU1NFUlRfU1RBVEVfQ0hBTkdFX01TRyAoYnVzLCBwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwsIEdTVF9TVEFURV9SRUFEWSwgMjA0KTsKKworICAvKiBSRUFEWSA9PiBQQVVTRUQgKi8KKyAgLyogYmVjYXVzZSBvZiBwcmUtcm9sbGluZywgc2luayB3aWxsIHJldHVybiBBU1lOQyBvbiBzdGF0ZQorICAgKiBjaGFuZ2UgYW5kIGNoYW5nZSBzdGF0ZSBsYXRlciB3aGVuIGl0IGhhcyBhIGJ1ZmZlciAqLworICBHU1RfREVCVUcgKCJwb3BwaW5nIFJFQURZIC0+IFBBVVNFRCBtZXNzYWdlcyIpOworICBBU1NFUlRfU1RBVEVfQ0hBTkdFX01TRyAoYnVzLCBpZGVudGl0eSwgR1NUX1NUQVRFX1JFQURZLCBHU1RfU1RBVEVfUEFVU0VELAorICAgICAgMjA1KTsKKyNpZiAwCisgIC8qIEZyb20gaGVyZSBvbiwgYWxsIGJldHMgYXJlIG9mZi4gVXN1YWxseSB0aGUgc291cmNlIGNoYW5nZXMgc3RhdGUgbmV4dCwKKyAgICogYnV0IGl0IG1pZ2h0IGp1c3QgYXMgd2VsbCBiZSB0aGF0IHRoZSBmaXJzdCBidWZmZXIgcHJvZHVjZWQgYnkgdGhlCisgICAqIHNvdXJjZSByZWFjaGVzIHRoZSBzaW5rIGJlZm9yZSB0aGUgc291cmNlIGhhcyBmaW5pc2hlZCBpdHMgc3RhdGUgY2hhbmdlLAorICAgKiBpbiB3aGljaCBjYXNlIHRoZSBzaW5rIHdpbGwgY29tbWl0IGl0cyBuZXcgc3RhdGUgYmVmb3JlIHRoZSBzb3VyY2UgLi4uICAqLworICBBU1NFUlRfU1RBVEVfQ0hBTkdFX01TRyAoYnVzLCBzcmMsIEdTVF9TVEFURV9SRUFEWSwgR1NUX1NUQVRFX1BBVVNFRCwgMjA2KTsKKyAgQVNTRVJUX1NUQVRFX0NIQU5HRV9NU0cgKGJ1cywgc2luaywgR1NUX1NUQVRFX1JFQURZLCBHU1RfU1RBVEVfUEFVU0VELCAyMDcpOworI2Vsc2UKKyAgcG9wX21lc3NhZ2VzIChidXMsIDIpOyAgICAgICAgLyogcG9wIHJlbWFpbmluZyByZWFkeSA9PiBwYXVzZWQgbWVzc2FnZXMgb2ZmIHRoZSBidXMgKi8KKyAgQVNTRVJUX1NUQVRFX0NIQU5HRV9NU0cgKGJ1cywgcGlwZWxpbmUsIEdTVF9TVEFURV9SRUFEWSwgR1NUX1NUQVRFX1BBVVNFRCwKKyAgICAgIDIwOCk7CisgIHBvcF9hc3luY19kb25lIChidXMpOworCisgIC8qIFBBVVNFRCA9PiBQTEFZSU5HICovCisgIEdTVF9ERUJVRyAoInBvcHBpbmcgUEFVU0VEIC0+IFBMQVlJTkcgbWVzc2FnZXMiKTsKKyAgQVNTRVJUX1NUQVRFX0NIQU5HRV9NU0cgKGJ1cywgc2luaywgR1NUX1NUQVRFX1BBVVNFRCwgR1NUX1NUQVRFX1BMQVlJTkcsIDIwOSk7CisgIEFTU0VSVF9TVEFURV9DSEFOR0VfTVNHIChidXMsIGlkZW50aXR5LCBHU1RfU1RBVEVfUEFVU0VELCBHU1RfU1RBVEVfUExBWUlORywKKyAgICAgIDIxMCk7CisgIEFTU0VSVF9TVEFURV9DSEFOR0VfTVNHIChidXMsIHNyYywgR1NUX1NUQVRFX1BBVVNFRCwgR1NUX1NUQVRFX1BMQVlJTkcsIDIxMSk7CisgIEFTU0VSVF9TVEFURV9DSEFOR0VfTVNHIChidXMsIHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VELCBHU1RfU1RBVEVfUExBWUlORywKKyAgICAgIDIxMik7CisjZW5kaWYKKworICAvKiBkb24ndCBzZXQgdG8gTlVMTCB0aGF0IHdpbGwgc2V0IHRoZSBidXMgZmx1c2hpbmcgYW5kIGtpbGwgb3VyIG1lc3NhZ2VzICovCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9SRUFEWSk7CisgIGZhaWxfaWYgKHJldCAhPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJTdGF0ZSBjaGFuZ2UgdG8gUkVBRFkgZmFpbGVkIik7CisKKyAgLyogVE9ETzogZG8gd2UgbmVlZCB0byBjaGVjayBkb3dud2FyZHMgc3RhdGUgY2hhbmdlIG9yZGVyIGFzIHdlbGw/ICovCisgIHBvcF9tZXNzYWdlcyAoYnVzLCA0KTsgICAgICAgIC8qIHBvcCBwbGF5aW5nID0+IHBhdXNlZCBtZXNzYWdlcyBvZmYgdGhlIGJ1cyAqLworICBwb3BfbWVzc2FnZXMgKGJ1cywgNCk7ICAgICAgICAvKiBwb3AgcGF1c2VkID0+IHJlYWR5IG1lc3NhZ2VzIG9mZiB0aGUgYnVzICovCisKKyAgR1NUX0RFQlVHICgid2FpdGluZyBmb3IgcGlwZWxpbmUgdG8gcmVhY2ggcmVmY291bnQgMSIpOworICB3aGlsZSAoR1NUX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAocGlwZWxpbmUpID4gMSkKKyAgICBUSFJFQURfU1dJVENIICgpOworCisgIEdTVF9ERUJVRyAoImNoZWNraW5nIHJlZmNvdW50Iik7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDEpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rLCAic2luayIsIDEpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwaXBlbGluZSwgInBpcGVsaW5lIiwgMSk7CisKKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOworICBmYWlsX2lmIChyZXQgIT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiU3RhdGUgY2hhbmdlIHRvIE5VTEwgZmFpbGVkIik7CisKKyAgR1NUX0RFQlVHICgiY2hlY2tpbmcgcmVmY291bnQiKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjLCAic3JjIiwgMSk7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNpbmssICJzaW5rIiwgMSk7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHBpcGVsaW5lLCAicGlwZWxpbmUiLCAxKTsKKworICBHU1RfREVCVUcgKCJjbGVhbnVwIik7CisgIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9jaGlsZHJlbl9zdGF0ZV9jaGFuZ2Vfb3JkZXJfdHdvX3NpbmspCit7CisgIEdzdEVsZW1lbnQgKnNyYywgKnRlZSwgKmlkZW50aXR5LCAqc2luazEsICpzaW5rMiwgKnBpcGVsaW5lOworICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7CisgIEdzdEJ1cyAqYnVzOworCisgIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoTlVMTCk7CisgIGZhaWxfdW5sZXNzIChwaXBlbGluZSAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBwaXBlbGluZSIpOworCisgIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGVsaW5lKTsKKyAgZmFpbF91bmxlc3MgKGJ1cyAhPSBOVUxMLCAiUGlwZWxpbmUgaGFzIG5vIGJ1cz8hIik7CisKKyAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOworICBmYWlsX2lmIChzcmMgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgZmFrZXNyYyIpOworCisgIHRlZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlZSIsIE5VTEwpOworICBmYWlsX2lmICh0ZWUgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgdGVlIik7CisKKyAgaWRlbnRpdHkgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpZGVudGl0eSIsIE5VTEwpOworICBmYWlsX2lmIChpZGVudGl0eSA9PSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBpZGVudGl0eSIpOworCisgIHNpbmsxID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKKyAgZmFpbF9pZiAoc2luazEgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgZmFrZXNpbmsxIik7CisKKyAgc2luazIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOworICBmYWlsX2lmIChzaW5rMiA9PSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBmYWtlc2luazIiKTsKKworICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIHNyYywgdGVlLCBpZGVudGl0eSwgc2luazEsIHNpbmsyLCBOVUxMKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCB0ZWUpID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAodGVlLCBpZGVudGl0eSkgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rIChpZGVudGl0eSwgc2luazEpID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAodGVlLCBzaW5rMikgPT0gVFJVRSk7CisKKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1JFQURZKTsKKyAgZmFpbF9pZiAocmV0ICE9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIlN0YXRlIGNoYW5nZSB0byBSRUFEWSBmYWlsZWQiKTsKKworICAvKiBOVUxMID0+IFJFQURZICovCisgIHsKKyAgICBHc3RNZXNzYWdlICptc2c7CisgICAgR3N0U3RhdGUgb2xkID0gMCwgbmV3ID0gMCwgcGVuZGluZyA9IDA7CisgICAgR3N0T2JqZWN0ICpmaXJzdCwgKnNlY29uZDsKKworICAgIG1zZyA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VELCBHU1RfU0VDT05EKTsKKyAgICBmYWlsX2lmIChtc2cgPT0gTlVMTCwgIk5vIHN0YXRlIGNoYW5nZSBtZXNzYWdlIHdpdGhpbiAxIHNlY29uZCAoIzIwMSkiKTsKKworICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQgKG1zZywgJm9sZCwgJm5ldywgJnBlbmRpbmcpOworICAgIGZpcnN0ID0gZ3N0X29iamVjdF9yZWYgKG1zZy0+c3JjKTsKKworICAgIGZhaWxfaWYgKGZpcnN0ICE9IEdTVF9PQkpFQ1QgKHNpbmsxKSAmJiBmaXJzdCAhPSBHU1RfT0JKRUNUIChzaW5rMiksCisgICAgICAgICJzaW5rMSBvciBzaW5rMiBzaG91bGQgaGF2ZSBjaGFuZ2VkIHN0YXRlIG5leHQgIygyMDIpIik7CisgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7CisKKyAgICBtc2cgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCwgR1NUX1NFQ09ORCk7CisgICAgZmFpbF9pZiAobXNnID09IE5VTEwsICJObyBzdGF0ZSBjaGFuZ2UgbWVzc2FnZSB3aXRoaW4gMSBzZWNvbmQgKCMyMDEpIik7CisKKyAgICBnc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkIChtc2csICZvbGQsICZuZXcsICZwZW5kaW5nKTsKKyAgICBzZWNvbmQgPSBnc3Rfb2JqZWN0X3JlZiAobXNnLT5zcmMpOworCisgICAgZmFpbF9pZiAoc2Vjb25kICE9IEdTVF9PQkpFQ1QgKHNpbmsxKSAmJiBzZWNvbmQgIT0gR1NUX09CSkVDVCAoc2luazIpLAorICAgICAgICAic2luazEgb3Igc2luazIgc2hvdWxkIGhhdmUgY2hhbmdlZCBzdGF0ZSBuZXh0ICMoMjAyKSIpOworICAgIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOworCisgICAgZmFpbF9pZiAoc2Vjb25kID09IGZpcnN0LCAiZ290IHN0YXRlIGNoYW5nZSBmcm9tIHNhbWUgb2JqZWN0Iik7CisKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChmaXJzdCk7CisgICAgZ3N0X29iamVjdF91bnJlZiAoc2Vjb25kKTsKKyAgfQorICBBU1NFUlRfU1RBVEVfQ0hBTkdFX01TRyAoYnVzLCBpZGVudGl0eSwgR1NUX1NUQVRFX05VTEwsIEdTVF9TVEFURV9SRUFEWSwgMjAzKTsKKyAgQVNTRVJUX1NUQVRFX0NIQU5HRV9NU0cgKGJ1cywgdGVlLCBHU1RfU1RBVEVfTlVMTCwgR1NUX1NUQVRFX1JFQURZLCAyMDQpOworICBBU1NFUlRfU1RBVEVfQ0hBTkdFX01TRyAoYnVzLCBzcmMsIEdTVF9TVEFURV9OVUxMLCBHU1RfU1RBVEVfUkVBRFksIDIwNSk7CisgIEFTU0VSVF9TVEFURV9DSEFOR0VfTVNHIChidXMsIHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCwgR1NUX1NUQVRFX1JFQURZLCAyMDYpOworCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDEpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UICh0ZWUsICJ0ZWUiLCAxKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoaWRlbnRpdHksICJpZGVudGl0eSIsIDEpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rMSwgInNpbmsxIiwgMSk7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNpbmsyLCAic2luazIiLCAxKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGlwZWxpbmUsICJwaXBlbGluZSIsIDEpOworCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKKyAgZmFpbF9pZiAocmV0ICE9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIlN0YXRlIGNoYW5nZSB0byBOVUxMIGZhaWxlZCIpOworCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDEpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UICh0ZWUsICJ0ZWUiLCAxKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoaWRlbnRpdHksICJpZGVudGl0eSIsIDEpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rMSwgInNpbmsxIiwgMSk7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNpbmsyLCAic2luazIiLCAxKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGlwZWxpbmUsICJwaXBlbGluZSIsIDEpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9pdGVyYXRlX3NvcnRlZCkKK3sKKyAgR3N0RWxlbWVudCAqc3JjLCAqdGVlLCAqaWRlbnRpdHksICpzaW5rMSwgKnNpbmsyLCAqcGlwZWxpbmUsICpiaW47CisgIEdzdEl0ZXJhdG9yICppdDsKKyAgR1ZhbHVlIGVsZW0gPSB7IDAsIH07CisKKyAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3IChOVUxMKTsKKyAgZmFpbF91bmxlc3MgKHBpcGVsaW5lICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIHBpcGVsaW5lIik7CisKKyAgYmluID0gZ3N0X2Jpbl9uZXcgKE5VTEwpOworICBmYWlsX3VubGVzcyAoYmluICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGJpbiIpOworCisgIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKKyAgZmFpbF9pZiAoc3JjID09IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGZha2VzcmMiKTsKKworICB0ZWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZWUiLCBOVUxMKTsKKyAgZmFpbF9pZiAodGVlID09IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIHRlZSIpOworCisgIHNpbmsxID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKKyAgZmFpbF9pZiAoc2luazEgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgZmFrZXNpbmsxIik7CisKKyAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAoYmluKSwgc3JjLCB0ZWUsIHNpbmsxLCBOVUxMKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCB0ZWUpID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAodGVlLCBzaW5rMSkgPT0gVFJVRSk7CisKKyAgaWRlbnRpdHkgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpZGVudGl0eSIsIE5VTEwpOworICBmYWlsX2lmIChpZGVudGl0eSA9PSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBpZGVudGl0eSIpOworCisgIHNpbmsyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKKyAgZmFpbF9pZiAoc2luazIgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgZmFrZXNpbmsyIik7CisKKyAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBiaW4sIGlkZW50aXR5LCBzaW5rMiwgTlVMTCk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKHRlZSwgaWRlbnRpdHkpID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoaWRlbnRpdHksIHNpbmsyKSA9PSBUUlVFKTsKKworICBpdCA9IGdzdF9iaW5faXRlcmF0ZV9zb3J0ZWQgKEdTVF9CSU4gKHBpcGVsaW5lKSk7CisgIGZhaWxfdW5sZXNzIChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZlbGVtKSA9PSBHU1RfSVRFUkFUT1JfT0spOworICBmYWlsX3VubGVzcyAoZ192YWx1ZV9nZXRfb2JqZWN0ICgmZWxlbSkgPT0gKGdwb2ludGVyKSBzaW5rMik7CisgIGdfdmFsdWVfcmVzZXQgKCZlbGVtKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2l0ZXJhdG9yX25leHQgKGl0LCAmZWxlbSkgPT0gR1NUX0lURVJBVE9SX09LKTsKKyAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X29iamVjdCAoJmVsZW0pID09IChncG9pbnRlcikgaWRlbnRpdHkpOworICBnX3ZhbHVlX3Jlc2V0ICgmZWxlbSk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9pdGVyYXRvcl9uZXh0IChpdCwgJmVsZW0pID09IEdTVF9JVEVSQVRPUl9PSyk7CisgIGZhaWxfdW5sZXNzIChnX3ZhbHVlX2dldF9vYmplY3QgKCZlbGVtKSA9PSAoZ3BvaW50ZXIpIGJpbik7CisgIGdfdmFsdWVfcmVzZXQgKCZlbGVtKTsKKworICBnX3ZhbHVlX3Vuc2V0ICgmZWxlbSk7CisgIGdzdF9pdGVyYXRvcl9mcmVlIChpdCk7CisKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGlwZWxpbmUsICJwaXBlbGluZSIsIDEpOworICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIHZvaWQKK3Rlc3RfbGlua19zdHJ1Y3R1cmVfY2hhbmdlX3N0YXRlX2NoYW5nZWRfc3luY19jYiAoR3N0QnVzICogYnVzLAorICAgIEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBncG9pbnRlciBkYXRhKQoreworICBHc3RQaXBlbGluZSAqcGlwZWxpbmUgPSBHU1RfUElQRUxJTkUgKGRhdGEpOworICBHc3RFbGVtZW50ICpzcmMsICppZGVudGl0eSwgKnNpbms7CisgIEdzdFN0YXRlIG9sZCwgc25ldywgcGVuZGluZzsKKworICBzaW5rID0gZ3N0X2Jpbl9nZXRfYnlfbmFtZSAoR1NUX0JJTiAocGlwZWxpbmUpLCAic2luayIpOworICBmYWlsX3VubGVzcyAoc2luayAhPSBOVUxMLCAiQ291bGQgbm90IGdldCBzaW5rIik7CisKKyAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZCAobWVzc2FnZSwgJm9sZCwgJnNuZXcsICZwZW5kaW5nKTsKKyAgaWYgKG1lc3NhZ2UtPnNyYyAhPSBHU1RfT0JKRUNUIChzaW5rKSB8fCBzbmV3ICE9IEdTVF9TVEFURV9SRUFEWSkgeworICAgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOworICAgIHJldHVybjsKKyAgfQorCisgIHNyYyA9IGdzdF9iaW5fZ2V0X2J5X25hbWUgKEdTVF9CSU4gKHBpcGVsaW5lKSwgInNyYyIpOworICBmYWlsX3VubGVzcyAoc3JjICE9IE5VTEwsICJDb3VsZCBub3QgZ2V0IHNyYyIpOworCisgIGlkZW50aXR5ID0gZ3N0X2Jpbl9nZXRfYnlfbmFtZSAoR1NUX0JJTiAocGlwZWxpbmUpLCAiaWRlbnRpdHkiKTsKKyAgZmFpbF91bmxlc3MgKGlkZW50aXR5ICE9IE5VTEwsICJDb3VsZCBub3QgZ2V0IGlkZW50aXR5Iik7CisKKyAgLyogbGluayBzcmMgdG8gaWRlbnRpdHksIHRoZSBwaXBlbGluZSBzaG91bGQgZGV0ZWN0IHRoZSBuZXcgbGluayBhbmQKKyAgICogcmVzeW5jIHRoZSBzdGF0ZSBjaGFuZ2UgKi8KKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKHNyYywgaWRlbnRpdHkpID09IFRSVUUpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGlkZW50aXR5KTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc2luayk7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2xpbmtfc3RydWN0dXJlX2NoYW5nZSkKK3sKKyAgR3N0RWxlbWVudCAqc3JjLCAqaWRlbnRpdHksICpzaW5rLCAqcGlwZWxpbmU7CisgIEdzdEJ1cyAqYnVzOworICBHc3RTdGF0ZSBzdGF0ZTsKKworICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKE5VTEwpOworICBmYWlsX3VubGVzcyAocGlwZWxpbmUgIT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgcGlwZWxpbmUiKTsKKworICBidXMgPSBnc3RfcGlwZWxpbmVfZ2V0X2J1cyAoR1NUX1BJUEVMSU5FIChwaXBlbGluZSkpOworICBmYWlsX3VubGVzcyAoYnVzICE9IE5VTEwsICJDb3VsZCBub3QgZ2V0IGJ1cyIpOworCisgIC8qIHVzZSB0aGUgc3luYyBzaWduYWwgaGFuZGxlciB0byBsaW5rIGVsZW1lbnRzIHdoaWxlIHRoZSBwaXBlbGluZSBpcyBzdGlsbAorICAgKiBkb2luZyB0aGUgc3RhdGUgY2hhbmdlICovCisgIGdzdF9idXNfc2V0X3N5bmNfaGFuZGxlciAoYnVzLCBnc3RfYnVzX3N5bmNfc2lnbmFsX2hhbmRsZXIsIHBpcGVsaW5lKTsKKyAgZ19vYmplY3RfY29ubmVjdCAoYnVzLCAic2lnbmFsOjpzeW5jLW1lc3NhZ2U6OnN0YXRlLWNoYW5nZWQiLAorICAgICAgR19DQUxMQkFDSyAodGVzdF9saW5rX3N0cnVjdHVyZV9jaGFuZ2Vfc3RhdGVfY2hhbmdlZF9zeW5jX2NiKSwgcGlwZWxpbmUsCisgICAgICBOVUxMKTsKKworICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYyIpOworICBmYWlsX2lmIChzcmMgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgZmFrZXNyYyIpOworCisgIGlkZW50aXR5ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiaWRlbnRpdHkiLCAiaWRlbnRpdHkiKTsKKyAgZmFpbF9pZiAoaWRlbnRpdHkgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgaWRlbnRpdHkiKTsKKworICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOworICBmYWlsX2lmIChzaW5rID09IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGZha2VzaW5rMSIpOworCisgIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjLCBpZGVudGl0eSwgc2luaywgTlVMTCk7CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1JFQURZKTsKKyAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgTlVMTCwgTlVMTCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisKKyAgLyogdGhlIHN0YXRlIGNoYW5nZSB3aWxsIGJlIGRvbmUgb24gc3JjIG9ubHkgaWYgdGhlIHBpcGVsaW5lIGNvcnJlY3RseSByZXN5bmNzCisgICAqIGFmdGVyIHRoYXQgZmFrZXNyYyBoYXMgYmVlbiBsaW5rZWQgdG8gaWRlbnRpdHkgKi8KKyAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChzcmMsICZzdGF0ZSwgTlVMTCwgMCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHN0YXRlLCBHU1RfU1RBVEVfUkVBRFkpOworCisgIC8qIGNsZWFuIHVwICovCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKKyAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBHc3RCdXNTeW5jUmVwbHkKK3N5bmNfaGFuZGxlcl9yZW1vdmVfc2luayAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX0VSUk9SKSB7CisgICAgR3N0RWxlbWVudCAqY2hpbGQ7CisKKyAgICBjaGlsZCA9IGdzdF9iaW5fZ2V0X2J5X25hbWUgKEdTVF9CSU4gKGRhdGEpLCAiZmFrZXNpbmsiKTsKKyAgICBmYWlsX3VubGVzcyAoY2hpbGQgIT0gTlVMTCwgIkNvdWxkIG5vdCBmaW5kIGZha2VzaW5rIik7CisKKyAgICBnc3RfYmluX3JlbW92ZSAoR1NUX0JJTiAoZGF0YSksIGNoaWxkKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChjaGlsZCk7CisgIH0KKyAgcmV0dXJuIEdTVF9CVVNfUEFTUzsKK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3RhdGVfZmFpbHVyZV9yZW1vdmUpCit7CisgIEdzdEVsZW1lbnQgKnNyYywgKnNpbmssICpwaXBlbGluZTsKKyAgR3N0QnVzICpidXM7CisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKKworICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKE5VTEwpOworICBmYWlsX3VubGVzcyAocGlwZWxpbmUgIT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgcGlwZWxpbmUiKTsKKworICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgImZha2VzcmMiKTsKKyAgZmFpbF91bmxlc3MgKHNyYyAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBmYWtlc3JjIik7CisKKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgImZha2VzaW5rIik7CisgIGZhaWxfdW5sZXNzIChzaW5rICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGZha2VzaW5rIik7CisKKyAgZ19vYmplY3Rfc2V0IChzaW5rLCAic3RhdGUtZXJyb3IiLCAxLCBOVUxMKTsKKworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMpOworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzaW5rKTsKKworICBnc3RfZWxlbWVudF9saW5rIChzcmMsIHNpbmspOworCisgIGJ1cyA9IGdzdF9waXBlbGluZV9nZXRfYnVzIChHU1RfUElQRUxJTkUgKHBpcGVsaW5lKSk7CisgIGZhaWxfdW5sZXNzIChidXMgIT0gTlVMTCwgIkNvdWxkIG5vdCBnZXQgYnVzIik7CisKKyAgZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyIChidXMsIHN5bmNfaGFuZGxlcl9yZW1vdmVfc2luaywgcGlwZWxpbmUpOworCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9SRUFEWSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAorICAgICAgImRpZCBub3QgZ2V0IHN0YXRlIGNoYW5nZSBzdWNjZXNzIik7CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9tYW55X2JpbnMpCit7CisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKKyAgR3N0RWxlbWVudCAqc3JjLCAqc2luaywgKnBpcGVsaW5lLCAqbGFzdF9iaW4gPSBOVUxMOworICBnaW50IGk7CisKKyNkZWZpbmUgTlVNX0JJTlMgMjAwMAorCisgIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoTlVMTCk7CisgIGZhaWxfdW5sZXNzIChwaXBlbGluZSAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBwaXBlbGluZSIpOworCisgIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAiZmFrZXNyYyIpOworICBmYWlsX3VubGVzcyAoc3JjICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGZha2VzcmMiKTsKKyAgZ19vYmplY3Rfc2V0IChzcmMsICJudW0tYnVmZmVycyIsIDMsIE5VTEwpOworCisgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJmYWtlc2luayIpOworICBmYWlsX3VubGVzcyAoc2luayAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBmYWtlc2luayIpOworCisgIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNyYyk7CisgIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNpbmspOworCisgIGZvciAoaSA9IDA7IGkgPCBOVU1fQklOUzsgKytpKSB7CisgICAgR3N0RWxlbWVudCAqYmluLCAqaWRlbnRpdHk7CisgICAgR3N0UGFkICpzcmNwYWQsICpzaW5rcGFkOworCisgICAgYmluID0gZ3N0X2Jpbl9uZXcgKE5VTEwpOworICAgIGZhaWxfdW5sZXNzIChiaW4gIT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgYmluICVkIiwgaSk7CisgICAgaWRlbnRpdHkgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpZGVudGl0eSIsICJpZGVudGl0eSIpOworICAgIGZhaWxfdW5sZXNzIChpZGVudGl0eSAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBpZGVudGl0eSAlZCIsIGkpOworICAgIGdfb2JqZWN0X3NldCAoaWRlbnRpdHksICJzaWxlbnQiLCBUUlVFLCBOVUxMKTsKKyAgICBnc3RfYmluX2FkZCAoR1NUX0JJTiAoYmluKSwgaWRlbnRpdHkpOworICAgIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoaWRlbnRpdHksICJzaW5rIik7CisgICAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGlkZW50aXR5LCAic3JjIik7CisgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoYmluLCBnc3RfZ2hvc3RfcGFkX25ldyAoInNpbmsiLCBzaW5rcGFkKSk7CisgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoYmluLCBnc3RfZ2hvc3RfcGFkX25ldyAoInNyYyIsIHNyY3BhZCkpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7CisKKyAgICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBiaW4pOworCisgICAgaWYgKGxhc3RfYmluID09IE5VTEwpIHsKKyAgICAgIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMsICJzcmMiKTsKKyAgICB9IGVsc2UgeworICAgICAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGxhc3RfYmluLCAic3JjIik7CisgICAgfQorICAgIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoYmluLCAic2luayIpOworICAgIGdzdF9wYWRfbGlua19mdWxsIChzcmNwYWQsIHNpbmtwYWQsIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOworCisKKyAgICBsYXN0X2JpbiA9IGJpbjsKKworICAgIC8qIGluc2VydCBzb21lIHF1ZXVlcyB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIGZ1bmN0aW9uIGNhbGxzIGluIGEgcm93ICovCisgICAgaWYgKChpICUgMTAwKSA9PSAwKSB7CisgICAgICBHc3RFbGVtZW50ICpxID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicXVldWUiLCBOVUxMKTsKKworICAgICAgR1NUX0xPRyAoImJpbiAjJWQsIGluc2VydGluZyBxdWV1ZSIsIGkpOworICAgICAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgcSk7CisgICAgICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAobGFzdF9iaW4sIHEpKTsKKyAgICAgIGxhc3RfYmluID0gcTsKKyAgICB9CisgIH0KKworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAobGFzdF9iaW4sIHNpbmspKTsKKworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHJldCwgR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyk7CisKKyAgZm9yIChpID0gMDsgaSA8IDE1OyArK2kpIHsKKyAgICBHU1RfSU5GTyAoIndhaXRpbmcgZm9yIHByZXJvbGwgLi4uIik7CisgICAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgTlVMTCwgTlVMTCwgR1NUX1NFQ09ORCk7CisgICAgaWYgKHJldCAhPSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKQorICAgICAgYnJlYWs7CisgIH0KKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAocmV0LCBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOworCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKKyAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBTdWl0ZSAqCitnc3RfYmluX3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdEJpbiIpOworICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJiaW4gdGVzdHMiKTsKKworICB0Y2FzZV9zZXRfdGltZW91dCAodGNfY2hhaW4sIDApOworCisgIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW50ZXJmYWNlKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2NoaWxkcmVuX3N0YXRlX2NoYW5nZV9vcmRlcl9mbGFnZ2VkX3NpbmspOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfY2hpbGRyZW5fc3RhdGVfY2hhbmdlX29yZGVyX3NlbWlfc2luayk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9jaGlsZHJlbl9zdGF0ZV9jaGFuZ2Vfb3JkZXJfdHdvX3NpbmspOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWVzc2FnZV9zdGF0ZV9jaGFuZ2VkKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X21lc3NhZ2Vfc3RhdGVfY2hhbmdlZF9jaGlsZCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9tZXNzYWdlX3N0YXRlX2NoYW5nZWRfY2hpbGRyZW4pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfd2F0Y2hfZm9yX3N0YXRlX2NoYW5nZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdGF0ZV9jaGFuZ2VfZXJyb3JfbWVzc2FnZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hZGRfbGlua2VkKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2FkZF9zZWxmKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2l0ZXJhdGVfc29ydGVkKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2xpbmtfc3RydWN0dXJlX2NoYW5nZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdGF0ZV9mYWlsdXJlX3JlbW92ZSk7CisKKyAgLyogZmFpbHMgb24gT1NYIGJ1aWxkIGJvdCBmb3Igc29tZSByZWFzb24sIGFuZCBpcyBhIGJpdCBzaWxseSBhbnl3YXkgKi8KKyAgaWYgKDApCisgICAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X21hbnlfYmlucyk7CisKKyAgcmV0dXJuIHM7Cit9CisKK0dTVF9DSEVDS19NQUlOIChnc3RfYmluKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXIuYyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWM5Njg4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jCkBAIC0wLDAgKzEsNjQwIEBACisvKiBHU3RyZWFtZXIKKyAqCisgKiB1bml0IHRlc3QgZm9yIEdzdEJ1ZmZlcgorICoKKyAqIENvcHlyaWdodCAoQykgPDIwMDU+IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyBpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9WQUxHUklORF9ICisjIGluY2x1ZGUgPHZhbGdyaW5kL3ZhbGdyaW5kLmg+CisjZWxzZQorIyBkZWZpbmUgUlVOTklOR19PTl9WQUxHUklORCBGQUxTRQorI2VuZGlmCisKKyNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KKworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3ViYnVmZmVyKQoreworICBHc3RCdWZmZXIgKmJ1ZmZlciwgKnN1YjsKKyAgZ3NpemUgc2l6ZSwgbWF4c2l6ZSwgc3NpemU7CisgIGd1aW50OCAqZGF0YSwgKnNkYXRhOworCisgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7CisKKyAgLyogY2hlY2sgc2l6ZXMsIGJ1ZmZlciBzdGFydHMgb3V0IGVtcHR5ICovCisgIGRhdGEgPSBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmc2l6ZSwgJm1heHNpemUsIEdTVF9NQVBfV1JJVEUpOworICBmYWlsX3VubGVzcyAoc2l6ZSA9PSA0LCAiYnVmZmVyIGhhcyB3cm9uZyBzaXplIik7CisgIGZhaWxfdW5sZXNzIChtYXhzaXplID49IDQsICJidWZmZXIgaGFzIHdyb25nIHNpemUiKTsKKyAgbWVtc2V0IChkYXRhLCAwLCA0KTsKKyAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCBkYXRhLCA0KTsKKworICBkYXRhID0gZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJnNpemUsIE5VTEwsIEdTVF9NQVBfUkVBRCk7CisgIC8qIHNldCBzb21lIG1ldGFkYXRhICovCisgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gMTsKKyAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9IDI7CisgIEdTVF9CVUZGRVJfT0ZGU0VUIChidWZmZXIpID0gMzsKKyAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChidWZmZXIpID0gNDsKKworICBzdWIgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChidWZmZXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIDEsIDIpOworICBmYWlsX2lmIChzdWIgPT0gTlVMTCwgImNvcHkgcmVnaW9uIG9mIGJ1ZmZlciByZXR1cm5lZCBOVUxMIik7CisKKyAgc2RhdGEgPSBnc3RfYnVmZmVyX21hcCAoc3ViLCAmc3NpemUsIE5VTEwsIEdTVF9NQVBfUkVBRCk7CisgIGZhaWxfdW5sZXNzIChzc2l6ZSA9PSAyLCAic3ViYnVmZmVyIGhhcyB3cm9uZyBzaXplIik7CisgIGZhaWxfdW5sZXNzIChtZW1jbXAgKGRhdGEgKyAxLCBzZGF0YSwgMikgPT0gMCwKKyAgICAgICJzdWJidWZmZXIgY29udGFpbnMgdGhlIHdyb25nIGRhdGEiKTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoc3ViLCAic3ViYnVmZmVyIiwgMSk7CisgIGZhaWxfdW5sZXNzIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAoc3ViKSA9PSAtMSwKKyAgICAgICJzdWJidWZmZXIgaGFzIHdyb25nIHRpbWVzdGFtcCIpOworICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9EVVJBVElPTiAoc3ViKSA9PSAtMSwgInN1YmJ1ZmZlciBoYXMgd3JvbmcgZHVyYXRpb24iKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9CVUZGRVJfT0ZGU0VUIChzdWIpID09IC0xLCAic3ViYnVmZmVyIGhhcyB3cm9uZyBvZmZzZXQiKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoc3ViKSA9PSAtMSwKKyAgICAgICJzdWJidWZmZXIgaGFzIHdyb25nIG9mZnNldCBlbmQiKTsKKyAgZ3N0X2J1ZmZlcl91bm1hcCAoc3ViLCBzZGF0YSwgc3NpemUpOworICBnc3RfYnVmZmVyX3VucmVmIChzdWIpOworCisgIC8qIGNyZWF0ZSBhIHN1YmJ1ZmZlciBvZiBzaXplIDAgKi8KKyAgc3ViID0gZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAoYnVmZmVyLCBHU1RfQlVGRkVSX0NPUFlfQUxMLCAxLCAwKTsKKyAgZmFpbF9pZiAoc3ViID09IE5VTEwsICJjb3B5X3JlZ2lvbiBvZiBidWZmZXIgcmV0dXJuZWQgTlVMTCIpOworICBzZGF0YSA9IGdzdF9idWZmZXJfbWFwIChzdWIsICZzc2l6ZSwgTlVMTCwgR1NUX01BUF9SRUFEKTsKKyAgZmFpbF91bmxlc3MgKHNzaXplID09IDAsICJzdWJidWZmZXIgaGFzIHdyb25nIHNpemUiKTsKKyAgZmFpbF91bmxlc3MgKG1lbWNtcCAoZGF0YSArIDEsIHNkYXRhLCAwKSA9PSAwLAorICAgICAgInN1YmJ1ZmZlciBjb250YWlucyB0aGUgd3JvbmcgZGF0YSIpOworICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChzdWIsICJzdWJidWZmZXIiLCAxKTsKKyAgZ3N0X2J1ZmZlcl91bm1hcCAoc3ViLCBzZGF0YSwgc3NpemUpOworICBnc3RfYnVmZmVyX3VucmVmIChzdWIpOworCisgIC8qIHRlc3QgaWYgbWV0YWRhdGEgaXMgY29wcGllZCwgbm90IGEgY29tcGxldGUgYnVmZmVyIGNvcHkgc28gb25seSB0aGUKKyAgICogdGltZXN0YW1wIGFuZCBvZmZzZXQgZmllbGRzIGFyZSBjb3BpZWQuICovCisgIHN1YiA9IGdzdF9idWZmZXJfY29weV9yZWdpb24gKGJ1ZmZlciwgR1NUX0JVRkZFUl9DT1BZX0FMTCwgMCwgMSk7CisgIGZhaWxfaWYgKHN1YiA9PSBOVUxMLCAiY29weV9yZWdpb24gb2YgYnVmZmVyIHJldHVybmVkIE5VTEwiKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemUgKHN1YikgPT0gMSwgInN1YmJ1ZmZlciBoYXMgd3Jvbmcgc2l6ZSIpOworICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKHN1YikgPT0gMSwKKyAgICAgICJzdWJidWZmZXIgaGFzIHdyb25nIHRpbWVzdGFtcCIpOworICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9PRkZTRVQgKHN1YikgPT0gMywgInN1YmJ1ZmZlciBoYXMgd3Jvbmcgb2Zmc2V0Iik7CisgIGZhaWxfdW5sZXNzIChHU1RfQlVGRkVSX0RVUkFUSU9OIChzdWIpID09IC0xLCAic3ViYnVmZmVyIGhhcyB3cm9uZyBkdXJhdGlvbiIpOworICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChzdWIpID09IC0xLAorICAgICAgInN1YmJ1ZmZlciBoYXMgd3Jvbmcgb2Zmc2V0IGVuZCIpOworICBnc3RfYnVmZmVyX3VucmVmIChzdWIpOworCisgIC8qIHRlc3QgaWYgbWV0YWRhdGEgaXMgY29wcGllZCwgYSBjb21wbGV0ZSBidWZmZXIgaXMgY29waWVkIHNvIGFsbCB0aGUgdGltaW5nCisgICAqIGZpZWxkcyBzaG91bGQgYmUgY29waWVkLiAqLworICBzdWIgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChidWZmZXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIDAsIDQpOworICBmYWlsX2lmIChzdWIgPT0gTlVMTCwgImNvcHlfcmVnaW9uIG9mIGJ1ZmZlciByZXR1cm5lZCBOVUxMIik7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChzdWIpID09IDQsICJzdWJidWZmZXIgaGFzIHdyb25nIHNpemUiKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChzdWIpID09IDEsCisgICAgICAic3ViYnVmZmVyIGhhcyB3cm9uZyB0aW1lc3RhbXAiKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9CVUZGRVJfRFVSQVRJT04gKHN1YikgPT0gMiwgInN1YmJ1ZmZlciBoYXMgd3JvbmcgZHVyYXRpb24iKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9CVUZGRVJfT0ZGU0VUIChzdWIpID09IDMsICJzdWJidWZmZXIgaGFzIHdyb25nIG9mZnNldCIpOworICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChzdWIpID09IDQsCisgICAgICAic3ViYnVmZmVyIGhhcyB3cm9uZyBvZmZzZXQgZW5kIik7CisKKyAgLyogY2xlYW4gdXAgKi8KKyAgZ3N0X2J1ZmZlcl91bnJlZiAoc3ViKTsKKworICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsIGRhdGEsIHNpemUpOworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2lzX3NwYW5fZmFzdCkKK3sKKyAgR3N0QnVmZmVyICpidWZmZXIsICpzdWIxLCAqc3ViMjsKKworICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOworCisgIHN1YjEgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChidWZmZXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIDAsIDIpOworICBmYWlsX2lmIChzdWIxID09IE5VTEwsICJjb3B5X3JlZ2lvbiBvZiBidWZmZXIgcmV0dXJuZWQgTlVMTCIpOworCisgIHN1YjIgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChidWZmZXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIDIsIDIpOworICBmYWlsX2lmIChzdWIyID09IE5VTEwsICJjb3B5X3JlZ2lvbiBvZiBidWZmZXIgcmV0dXJuZWQgTlVMTCIpOworCisgIGZhaWxfaWYgKGdzdF9idWZmZXJfaXNfc3Bhbl9mYXN0IChidWZmZXIsIHN1YjIpID09IFRSVUUsCisgICAgICAiYSBwYXJlbnQgYnVmZmVyIGNhbid0IGJlIHNwYW5fZmFzdGVkIik7CisKKyAgZmFpbF9pZiAoZ3N0X2J1ZmZlcl9pc19zcGFuX2Zhc3QgKHN1YjEsIGJ1ZmZlcikgPT0gVFJVRSwKKyAgICAgICJhIHBhcmVudCBidWZmZXIgY2FuJ3QgYmUgc3Bhbl9mYXN0ZWQiKTsKKworICBmYWlsX2lmIChnc3RfYnVmZmVyX2lzX3NwYW5fZmFzdCAoc3ViMSwgc3ViMikgPT0gRkFMU0UsCisgICAgICAidHdvIHN1YmJ1ZmZlcnMgbmV4dCB0byBlYWNoIG90aGVyIHNob3VsZCBiZSBzcGFuX2Zhc3QiKTsKKworICAvKiBjbGVhbiB1cCAqLworICBnc3RfYnVmZmVyX3VucmVmIChzdWIxKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoc3ViMik7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3BhbikKK3sKKyAgR3N0QnVmZmVyICpidWZmZXIsICpzdWIxLCAqc3ViMiwgKnNwYW47CisgIGd1aW50OCAqZGF0YTsKKyAgZ3NpemUgc2l6ZTsKKworICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOworCisgIGRhdGEgPSBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmc2l6ZSwgTlVMTCwgR1NUX01BUF9XUklURSk7CisgIG1lbWNweSAoZGF0YSwgImRhdGEiLCA0KTsKKyAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCBkYXRhLCA0KTsKKworICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9idWZmZXJfc3BhbiAoTlVMTCwgMSwgTlVMTCwgMikpOworICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9idWZmZXJfc3BhbiAoYnVmZmVyLCAxLCBOVUxMLCAyKSk7CisgIEFTU0VSVF9DUklUSUNBTCAoZ3N0X2J1ZmZlcl9zcGFuIChOVUxMLCAxLCBidWZmZXIsIDIpKTsKKyAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfYnVmZmVyX3NwYW4gKGJ1ZmZlciwgMCwgYnVmZmVyLCAxMCkpOworCisgIHN1YjEgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChidWZmZXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIDAsIDIpOworICBmYWlsX2lmIChzdWIxID09IE5VTEwsICJjb3B5X3JlZ2lvbiBvZiBidWZmZXIgcmV0dXJuZWQgTlVMTCIpOworCisgIHN1YjIgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChidWZmZXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIDIsIDIpOworICBmYWlsX2lmIChzdWIyID09IE5VTEwsICJjb3B5X3JlZ2lvbiBvZiBidWZmZXIgcmV0dXJuZWQgTlVMTCIpOworCisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZmZlciwgInBhcmVudCIsIDEpOworICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChzdWIxLCAic3ViMSIsIDEpOworICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChzdWIyLCAic3ViMiIsIDEpOworCisgIC8qIHNwYW4gd2lsbCBjcmVhdGUgYSBuZXcgc3ViYnVmZmVyIGZyb20gdGhlIHBhcmVudCAqLworICBzcGFuID0gZ3N0X2J1ZmZlcl9zcGFuIChzdWIxLCAwLCBzdWIyLCA0KTsKKyAgZGF0YSA9IGdzdF9idWZmZXJfbWFwIChzcGFuLCAmc2l6ZSwgTlVMTCwgR1NUX01BUF9SRUFEKTsKKyAgZmFpbF91bmxlc3MgKHNpemUgPT0gNCwgInNwYW5uZWQgYnVmZmVyIGlzIHdyb25nIHNpemUiKTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmZmVyLCAicGFyZW50IiwgMSk7CisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKHN1YjEsICJzdWIxIiwgMSk7CisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKHN1YjIsICJzdWIyIiwgMSk7CisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKHNwYW4sICJzcGFuIiwgMSk7CisgIGZhaWxfdW5sZXNzIChtZW1jbXAgKGRhdGEsICJkYXRhIiwgNCkgPT0gMCwKKyAgICAgICJzcGFubmVkIGJ1ZmZlciBjb250YWlucyB0aGUgd3JvbmcgZGF0YSIpOworICBnc3RfYnVmZmVyX3VubWFwIChzcGFuLCBkYXRhLCBzaXplKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoc3Bhbik7CisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZmZlciwgInBhcmVudCIsIDEpOworCisgIC8qIHNwYW4gZnJvbSBub24tY29udGlndW91cyBidWZmZXJzIHdpbGwgY3JlYXRlIG5ldyBidWZmZXJzICovCisgIHNwYW4gPSBnc3RfYnVmZmVyX3NwYW4gKHN1YjIsIDAsIHN1YjEsIDQpOworICBkYXRhID0gZ3N0X2J1ZmZlcl9tYXAgKHNwYW4sICZzaXplLCBOVUxMLCBHU1RfTUFQX1JFQUQpOworICBmYWlsX3VubGVzcyAoc2l6ZSA9PSA0LCAic3Bhbm5lZCBidWZmZXIgaXMgd3Jvbmcgc2l6ZSIpOworICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWZmZXIsICJwYXJlbnQiLCAxKTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoc3ViMSwgInN1YjEiLCAxKTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoc3ViMiwgInN1YjIiLCAxKTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoc3BhbiwgInNwYW4iLCAxKTsKKyAgZmFpbF91bmxlc3MgKG1lbWNtcCAoZGF0YSwgInRhZGEiLCA0KSA9PSAwLAorICAgICAgInNwYW5uZWQgYnVmZmVyIGNvbnRhaW5zIHRoZSB3cm9uZyBkYXRhIik7CisgIGdzdF9idWZmZXJfdW5tYXAgKHNwYW4sIGRhdGEsIHNpemUpOworICBnc3RfYnVmZmVyX3VucmVmIChzcGFuKTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmZmVyLCAicGFyZW50IiwgMSk7CisKKyAgLyogc3BhbiB3aXRoIGRpZmZlcmVudCBzaXplcyAqLworICBzcGFuID0gZ3N0X2J1ZmZlcl9zcGFuIChzdWIxLCAxLCBzdWIyLCAzKTsKKyAgZGF0YSA9IGdzdF9idWZmZXJfbWFwIChzcGFuLCAmc2l6ZSwgTlVMTCwgR1NUX01BUF9SRUFEKTsKKyAgZmFpbF91bmxlc3MgKHNpemUgPT0gMywgInNwYW5uZWQgYnVmZmVyIGlzIHdyb25nIHNpemUiKTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmZmVyLCAicGFyZW50IiwgMSk7CisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKHN1YjEsICJzdWIxIiwgMSk7CisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKHN1YjIsICJzdWIyIiwgMSk7CisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKHNwYW4sICJzcGFuIiwgMSk7CisgIGZhaWxfdW5sZXNzIChtZW1jbXAgKGRhdGEsICJhdGEiLCAzKSA9PSAwLAorICAgICAgInNwYW5uZWQgYnVmZmVyIGNvbnRhaW5zIHRoZSB3cm9uZyBkYXRhIik7CisgIGdzdF9idWZmZXJfdW5tYXAgKHNwYW4sIGRhdGEsIHNpemUpOworICBnc3RfYnVmZmVyX3VucmVmIChzcGFuKTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmZmVyLCAicGFyZW50IiwgMSk7CisKKyAgc3BhbiA9IGdzdF9idWZmZXJfc3BhbiAoc3ViMiwgMCwgc3ViMSwgMyk7CisgIGRhdGEgPSBnc3RfYnVmZmVyX21hcCAoc3BhbiwgJnNpemUsIE5VTEwsIEdTVF9NQVBfUkVBRCk7CisgIGZhaWxfdW5sZXNzIChzaXplID09IDMsICJzcGFubmVkIGJ1ZmZlciBpcyB3cm9uZyBzaXplIik7CisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZmZlciwgInBhcmVudCIsIDEpOworICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChzdWIxLCAic3ViMSIsIDEpOworICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChzdWIyLCAic3ViMiIsIDEpOworICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChzcGFuLCAic3BhbiIsIDEpOworICBmYWlsX3VubGVzcyAobWVtY21wIChkYXRhLCAidGFkIiwgMykgPT0gMCwKKyAgICAgICJzcGFubmVkIGJ1ZmZlciBjb250YWlucyB0aGUgd3JvbmcgZGF0YSIpOworICBnc3RfYnVmZmVyX3VubWFwIChzcGFuLCBkYXRhLCBzaXplKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoc3Bhbik7CisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZmZlciwgInBhcmVudCIsIDEpOworCisgIC8qIGNsZWFuIHVwICovCisgIGdzdF9idWZmZXJfdW5yZWYgKHN1YjEpOworICBnc3RfYnVmZmVyX3VucmVmIChzdWIyKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKK30KKworR1NUX0VORF9URVNUOworCisKK3N0YXRpYyBjb25zdCBjaGFyIHJvX21lbW9yeVtdID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjsKKworc3RhdGljIEdzdEJ1ZmZlciAqCitjcmVhdGVfcmVhZF9vbmx5X2J1ZmZlciAodm9pZCkKK3sKKyAgR3N0QnVmZmVyICpidWY7CisKKyAgYnVmID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisKKyAgLyogYXNzaWduIHNvbWUgcmVhZC1vbmx5IGRhdGEgdG8gdGhlIG5ldyBidWZmZXIgKi8KKyAgZ3N0X2J1ZmZlcl90YWtlX21lbW9yeSAoYnVmLCAtMSwKKyAgICAgIGdzdF9tZW1vcnlfbmV3X3dyYXBwZWQgKEdTVF9NRU1PUllfRkxBR19SRUFET05MWSwKKyAgICAgICAgICAoZ3BvaW50ZXIpIHJvX21lbW9yeSwgTlVMTCwKKyAgICAgICAgICBzaXplb2YgKHJvX21lbW9yeSksIDAsIHNpemVvZiAocm9fbWVtb3J5KSkpOworCisgIHJldHVybiBidWY7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X21ha2Vfd3JpdGFibGUpCit7CisgIEdzdEJ1ZmZlciAqYnVmLCAqYnVmMjsKKyAgZ3VpbnQ4ICpkYXRhOworICBnc2l6ZSBzaXplOworCisgIC8qIGNyZWF0ZSByZWFkLW9ubHkgYnVmZmVyIGFuZCBtYWtlIGl0IHdyaXRhYmxlICovCisgIGJ1ZiA9IGNyZWF0ZV9yZWFkX29ubHlfYnVmZmVyICgpOworCisgIGRhdGEgPSBnc3RfYnVmZmVyX21hcCAoYnVmLCAmc2l6ZSwgTlVMTCwgR1NUX01BUF9XUklURSk7CisgIGRhdGFbNF0gPSAnYSc7CisgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgZGF0YSwgc2l6ZSk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7CisKKyAgLyogYWxsb2MnZWQgYnVmZmVyIHdpdGggcmVmY291bnQgMSBzaG91bGQgYmUgd3JpdGFibGUgKi8KKyAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgzMik7CisgIGJ1ZjIgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKGJ1Zik7CisgIGZhaWxfdW5sZXNzIChidWYgPT0gYnVmMiwKKyAgICAgICJfbWFrZV93cml0YWJsZSgpIHNob3VsZCBoYXZlIHJldHVybmVkIHNhbWUgYnVmZmVyIik7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZjIpOworCisgIC8qIGFsbG9jJ2VkIGJ1ZmZlciB3aXRoIHJlZmNvdW50ID4xIHNob3VsZCBiZSBjb3BpZWQgKi8KKyAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgzMik7CisgIGdzdF9idWZmZXJfcmVmIChidWYpOworICBidWYyID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChidWYpOworICBmYWlsX3VubGVzcyAoYnVmICE9IGJ1ZjIsICJfbWFrZV93cml0YWJsZSgpIHNob3VsZCBoYXZlIHJldHVybmVkIGEgY29weSEiKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmMik7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3ViYnVmZmVyX21ha2Vfd3JpdGFibGUpCit7CisgIEdzdEJ1ZmZlciAqYnVmLCAqc3ViX2J1ZjsKKyAgZ3VpbnQ4ICpkYXRhOworICBnc2l6ZSBzaXplOworCisgIC8qIGNyZWF0ZSBzdWItYnVmZmVyIG9mIHJlYWQtb25seSBidWZmZXIgYW5kIG1ha2UgaXQgd3JpdGFibGUgKi8KKyAgYnVmID0gY3JlYXRlX3JlYWRfb25seV9idWZmZXIgKCk7CisKKyAgc3ViX2J1ZiA9IGdzdF9idWZmZXJfY29weV9yZWdpb24gKGJ1ZiwgR1NUX0JVRkZFUl9DT1BZX0FMTCwgMCwgOCk7CisKKyAgZGF0YSA9IGdzdF9idWZmZXJfbWFwIChzdWJfYnVmLCAmc2l6ZSwgTlVMTCwgR1NUX01BUF9XUklURSk7CisgIGZhaWxfaWYgKGRhdGEgPT0gTlVMTCk7CisgIGRhdGFbNF0gPSAnYSc7CisgIGdzdF9idWZmZXJfdW5tYXAgKHN1Yl9idWYsIGRhdGEsIHNpemUpOworICBnc3RfYnVmZmVyX3VucmVmIChzdWJfYnVmKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9tZXRhZGF0YV93cml0YWJsZSkKK3sKKyAgR3N0QnVmZmVyICpidWZmZXIsICpzdWIxOworCisgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7CisgIEdTVF9CVUZGRVJfRkxBR19TRVQgKGJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpOworICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWZmZXIsIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKTsKKworICAvKiBCdWZmZXIgd2l0aCByZWZjb3VudCAxIHNob3VsZCBoYXZlIHdyaXRhYmxlIG1ldGFkYXRhICovCisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2lzX3dyaXRhYmxlIChidWZmZXIpID09IFRSVUUpOworCisgIC8qIENoZWNrIHRoYXQgYSBidWZmZXIgd2l0aCByZWZjb3VudCAyIGRvZXMgbm90IGhhdmUgd3JpdGFibGUgbWV0YWRhdGEgKi8KKyAgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcik7CisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZmZlciwgImJ1ZmZlciIsIDIpOworICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9pc193cml0YWJsZSAoYnVmZmVyKSA9PSBGQUxTRSk7CisKKyAgLyogQ2hlY2sgdGhhdCBtYWtlX21ldGFkYXRhX3dyaXRhYmxlIHByb2R1Y2VzIGEgbmV3IHN1Yi1idWZmZXIgd2l0aCAKKyAgICogd3JpdGFibGUgbWV0YWRhdGEuICovCisgIHN1YjEgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKGJ1ZmZlcik7CisgIGZhaWxfaWYgKHN1YjEgPT0gYnVmZmVyKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfaXNfd3JpdGFibGUgKHN1YjEpID09IFRSVUUpOworCisgIC8qIENoZWNrIHRoYXQgbWFrZV9tZXRhZGF0YV93cml0YWJsZSgpIG1haW50YWlucyB0aGUgYnVmZmVyIGZsYWdzICovCisgIGZhaWxfdW5sZXNzIChHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUIChzdWIxLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCkpOworICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoc3ViMSwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpKTsKKworICAvKiBVbnNldCBmbGFncyBvbiB3cml0YWJsZSBidWZmZXIsIHRoZW4gbWFrZSBzdXJlIHRoZXkncmUgc3RpbGwKKyAgICogc2V0IG9uIHRoZSBvcmlnaW5hbCBidWZmZXIgKi8KKyAgR1NUX0JVRkZFUl9GTEFHX1VOU0VUIChzdWIxLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCk7CisgIEdTVF9CVUZGRVJfRkxBR19VTlNFVCAoc3ViMSwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpOworICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoYnVmZmVyLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCkpOworICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoYnVmZmVyLCBHU1RfQlVGRkVSX0ZMQUdfREVMVEFfVU5JVCkpOworCisgIC8qIERyb3AgdGhlIHN1YmJ1ZmZlciBhbmQgY2hlY2sgdGhhdCB0aGUgbWV0YWRhdGEgaXMgbm93IHdyaXRhYmxlIGFnYWluICovCisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKHN1YjEsICJzdWIxIiwgMSk7CisgIGdzdF9idWZmZXJfdW5yZWYgKHN1YjEpOworICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9pc193cml0YWJsZSAoYnVmZmVyKSA9PSBUUlVFKTsKKworICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWZmZXIsICJidWZmZXIiLCAxKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9jb3B5KQoreworICBHc3RCdWZmZXIgKmJ1ZmZlciwgKmNvcHk7CisgIGdzaXplIHNpemUsIHNzaXplOworICBndWludDggKmRhdGEsICpzZGF0YTsKKworICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOworICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWZmZXIsICJidWZmZXIiLCAxKTsKKworICBjb3B5ID0gZ3N0X2J1ZmZlcl9jb3B5IChidWZmZXIpOworICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWZmZXIsICJidWZmZXIiLCAxKTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoY29weSwgImNvcHkiLCAxKTsKKyAgLyogYnVmZmVycyBhcmUgY29waWVkIGFuZCBtdXN0IHBvaW50IHRvIGRpZmZlcmVudCBtZW1vcnkgKi8KKyAgZmFpbF9pZiAoYnVmZmVyID09IGNvcHkpOworCisgIGRhdGEgPSBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmc2l6ZSwgTlVMTCwgR1NUX01BUF9SRUFEKTsKKyAgc2RhdGEgPSBnc3RfYnVmZmVyX21hcCAoY29weSwgJnNzaXplLCBOVUxMLCBHU1RfTUFQX1JFQUQpOworCisgIC8qIE5PVEUgdGhhdCBkYXRhIGlzIHJlZmNvdW50ZWQgKi8KKyAgZmFpbF91bmxlc3MgKHNpemUgPT0gc3NpemUpOworCisgIGdzdF9idWZmZXJfdW5tYXAgKGNvcHksIHNkYXRhLCBzc2l6ZSk7CisgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgZGF0YSwgc2l6ZSk7CisKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoY29weSk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7CisKKyAgLyogYSAwLXNpemVkIGJ1ZmZlciBoYXMgTlVMTCBkYXRhIGFzIHBlciBkb2NzICovCisgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMCk7CisgIGRhdGEgPSBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmc2l6ZSwgTlVMTCwgR1NUX01BUF9SRUFEKTsKKyAgZmFpbF91bmxlc3MgKGRhdGEgPT0gTlVMTCk7CisgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgZGF0YSwgc2l6ZSk7CisKKyAgLyogY29weWluZyBhIDAtc2l6ZWQgYnVmZmVyIHNob3VsZCBub3QgY3Jhc2ggYW5kIGFsc28gc2V0CisgICAqIHRoZSBkYXRhIG1lbWJlciBOVUxMLiAqLworICBjb3B5ID0gZ3N0X2J1ZmZlcl9jb3B5IChidWZmZXIpOworICBkYXRhID0gZ3N0X2J1ZmZlcl9tYXAgKGNvcHksICZzaXplLCBOVUxMLCBHU1RfTUFQX1JFQUQpOworICBmYWlsX3VubGVzcyAoZGF0YSA9PSBOVUxMKTsKKyAgZ3N0X2J1ZmZlcl91bm1hcCAoY29weSwgZGF0YSwgc2l6ZSk7CisKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoY29weSk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfdHJ5X25ld19hbmRfYWxsb2MpCit7CisgIEdzdEJ1ZmZlciAqYnVmOworICBnc2l6ZSBzaXplOworICBndWludDggKmRhdGE7CisKKyAgLyogc3BlY2lhbCBjYXNlOiBhbGxvYyBvZiAwIGJ5dGVzIHJlc3VsdHMgaW4gbmV3IGJ1ZmZlciB3aXRoIE5VTEwgZGF0YSAqLworICBidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDApOworICBmYWlsX3VubGVzcyAoYnVmICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoR1NUX0lTX0JVRkZFUiAoYnVmKSk7CisgIGRhdGEgPSBnc3RfYnVmZmVyX21hcCAoYnVmLCAmc2l6ZSwgTlVMTCwgR1NUX01BUF9SRUFEKTsKKyAgZmFpbF91bmxlc3MgKGRhdGEgPT0gTlVMTCk7CisgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgZGF0YSwgc2l6ZSk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7CisKKyAgLyogbm9ybWFsIGFsbG9jIHNob3VsZCBzdGlsbCB3b3JrICovCisgIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNjQwICogNDgwICogNCk7CisgIGZhaWxfdW5sZXNzIChidWYgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChHU1RfSVNfQlVGRkVSIChidWYpKTsKKyAgZGF0YSA9IGdzdF9idWZmZXJfbWFwIChidWYsICZzaXplLCBOVUxMLCBHU1RfTUFQX1dSSVRFKTsKKyAgZmFpbF91bmxlc3MgKGRhdGEgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChzaXplID09ICg2NDAgKiA0ODAgKiA0KSk7CisgIGRhdGFbNjQwICogNDc5ICogNCArIDQ3OV0gPSAweGZmOworICBnc3RfYnVmZmVyX3VubWFwIChidWYsIGRhdGEsIHNpemUpOworCisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7CisKKyNpZiAwCisgIC8qIERpc2FibGVkIHRoaXMgcGFydCBvZiB0aGUgdGVzdCwgYmVjYXVzZSBpdCBoYXBwaWx5IHN1Y2NlZWRzIG9uIDY0LWJpdAorICAgKiBtYWNoaW5lcyB0aGF0IGhhdmUgZW5vdWdoIG1lbW9yeStzd2FwLCBiZWNhdXNlIHRoZSBhZGRyZXNzIHNwYWNlIGlzIGxhcmdlCisgICAqIGVub3VnaC4gVGhlcmUncyBub3QgcmVhbGx5IGFueSB3YXkgdG8gdGVzdCB0aGUgZmFpbHVyZSBjYXNlIGV4Y2VwdCBieSAKKyAgICogYWxsb2NhdGluZyBjaHVua3Mgb2YgbWVtb3J5IHVudGlsIGl0IGZhaWxzLCB3aGljaCB3b3VsZCBzdWNrLiAqLworCisgIC8qIG5vdyB0aGlzIGJldHRlciBmYWlsIChkb24ndCBydW4gaW4gdmFsZ3JpbmQsIGl0IHdpbGwgYWJvcnQKKyAgICogb3Igd2FybiB3aGVuIHBhc3Npbmcgc2lsbHkgYXJndW1lbnRzIHRvIG1hbGxvYykgKi8KKyAgaWYgKCFSVU5OSU5HX09OX1ZBTEdSSU5EKSB7CisgICAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgoZ3VpbnQpIC0gMSk7CisgICAgZmFpbF91bmxlc3MgKGJ1ZiA9PSBOVUxMKTsKKyAgfQorI2VuZGlmCit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc2l6ZSkKK3sKKyAgR3N0QnVmZmVyICpidWY7CisgIEdzdE1lbW9yeSAqbWVtOworICBnc2l6ZSBtYXhhbGxvYywgbWF4YWxsb2MyLCBtYXhhbGxvYzMsIG1heGFsbG9jNDsKKyAgZ3NpemUgc2l6ZSwgbWF4c2l6ZSwgb2Zmc2V0OworCisgIC8qIG9uZSBtZW1vcnkgYmxvY2sgKi8KKyAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIDEwMCwgMCk7CisKKyAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemVzIChidWYsICZvZmZzZXQsICZtYXhhbGxvYyk7CisgIGZhaWxfdW5sZXNzIChzaXplID09IDEwMCk7CisgIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChtYXhhbGxvYyA+PSAxMDApOworCisgIG1lbSA9IGdzdF9idWZmZXJfcGVla19tZW1vcnkgKGJ1ZiwgMCwgR1NUX01BUF9XUklURSk7CisgIGdzdF9tZW1vcnlfcmVzaXplIChtZW0sIDEwLCA3MCk7CisKKyAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemVzIChidWYsICZvZmZzZXQsICZtYXhzaXplKTsKKyAgZmFpbF91bmxlc3MgKHNpemUgPT0gNzApOworICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDEwKTsKKyAgZmFpbF91bmxlc3MgKG1heHNpemUgPT0gbWF4YWxsb2MpOworCisgIC8qIG5ldyBtZW1vcnkgKi8KKyAgbWVtID0gZ3N0X2FsbG9jYXRvcl9hbGxvYyAoTlVMTCwgMTAwLCAwKTsKKyAgc2l6ZSA9IGdzdF9tZW1vcnlfZ2V0X3NpemVzIChtZW0sICZvZmZzZXQsICZtYXhhbGxvYzIpOworICBmYWlsX3VubGVzcyAoc2l6ZSA9PSAxMDApOworICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDApOworICBmYWlsX3VubGVzcyAobWF4YWxsb2MyID49IDEwMCk7CisKKyAgZ3N0X21lbW9yeV9yZXNpemUgKG1lbSwgMjAsIDYwKTsKKyAgc2l6ZSA9IGdzdF9tZW1vcnlfZ2V0X3NpemVzIChtZW0sICZvZmZzZXQsICZtYXhzaXplKTsKKyAgZmFpbF91bmxlc3MgKHNpemUgPT0gNjApOworICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDIwKTsKKyAgZmFpbF91bmxlc3MgKG1heHNpemUgPT0gbWF4YWxsb2MyKTsKKworICAvKiBhcHBlbmQgKi8KKyAgZ3N0X2J1ZmZlcl90YWtlX21lbW9yeSAoYnVmLCAtMSwgbWVtKTsKKworICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZXMgKGJ1ZiwgJm9mZnNldCwgJm1heGFsbG9jKTsKKyAgZmFpbF91bmxlc3MgKHNpemUgPT0gMTMwKTsKKyAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAxMCk7CisgIC8qIHRoZSBtYXhzaXplIGlzIHRoZSBzaXplIG9mIHRoZSBmaXJzdCBidWZmZXIgcGx1cyB0aGUgcmVtYWluaW5nIHNpemUgaW4gdGhlCisgICAqIHNlY29uZCBidWZmZXIgKi8KKyAgZmFpbF91bmxlc3MgKG1heGFsbG9jID09IDgwICsgKG1heGFsbG9jMiAtIDIwKSk7CisKKyAgLyogYXBwZW5kaW5nIGFuIGVtcHR5IGJsb2NrICovCisgIG1lbSA9IGdzdF9hbGxvY2F0b3JfYWxsb2MgKE5VTEwsIDEwMCwgMCk7CisgIHNpemUgPSBnc3RfbWVtb3J5X2dldF9zaXplcyAobWVtLCAmb2Zmc2V0LCAmbWF4YWxsb2MzKTsKKyAgZ3N0X21lbW9yeV9yZXNpemUgKG1lbSwgMCwgMCk7CisgIGdzdF9idWZmZXJfdGFrZV9tZW1vcnkgKGJ1ZiwgLTEsIG1lbSk7CisKKyAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemVzIChidWYsICZvZmZzZXQsICZtYXhhbGxvYyk7CisgIGZhaWxfdW5sZXNzIChzaXplID09IDEzMCk7CisgIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMTApOworICAvKiB0aGUgbWF4c2l6ZSBpcyB0aGUgc2l6ZSBvZiB0aGUgZmlyc3QgYnVmZmVyIHBsdXMgdGhlIHJlbWFpbmluZyBzaXplIGluIHRoZQorICAgKiBzZWNvbmQgYnVmZmVyIGFuZCB0aGUgbGFzdCBlbXB0eSBidWZmZXIqLworICBmYWlsX3VubGVzcyAobWF4YWxsb2MgPT0gODAgKyAobWF4YWxsb2MyIC0gMjApICsgbWF4YWxsb2MzKTsKKworICAvKiBwcmVwZW5kaW5nIGFuIGVtcHR5IGJsb2NrICovCisgIG1lbSA9IGdzdF9hbGxvY2F0b3JfYWxsb2MgKE5VTEwsIDEwMCwgMCk7CisgIHNpemUgPSBnc3RfbWVtb3J5X2dldF9zaXplcyAobWVtLCAmb2Zmc2V0LCAmbWF4YWxsb2M0KTsKKyAgZ3N0X21lbW9yeV9yZXNpemUgKG1lbSwgMCwgMCk7CisgIGdzdF9idWZmZXJfdGFrZV9tZW1vcnkgKGJ1ZiwgMCwgbWVtKTsKKworICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZXMgKGJ1ZiwgJm9mZnNldCwgJm1heGFsbG9jKTsKKyAgZmFpbF91bmxlc3MgKHNpemUgPT0gMTMwKTsKKyAgLyogZW1wdHkgYnVmZmVyIG1heHNpemUgY2FuIGJlIHVzZWQgYXMgb2Zmc2V0ICovCisgIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMTAgKyBtYXhhbGxvYzQpOworICAvKiB0aGUgbWF4c2l6ZSBpcyB0aGUgc2l6ZSBvZiB0aGUgZmlyc3QgYnVmZmVyIHBsdXMgdGhlIHJlbWFpbmluZyBzaXplIGluIHRoZQorICAgKiBzZWNvbmQgYnVmZmVyIGFuZCB0aGUgbGFzdCBlbXB0eSBidWZmZXIqLworICBmYWlsX3VubGVzcyAobWF4YWxsb2MgPT0gODAgKyAobWF4YWxsb2MyIC0gMjApICsgbWF4YWxsb2MzICsgbWF4YWxsb2M0KTsKKworICBnc3RfYnVmZmVyX3VucmVmIChidWYpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3Jlc2l6ZSkKK3sKKyAgR3N0QnVmZmVyICpidWY7CisgIGdzaXplIG1heGFsbG9jOworICBnc2l6ZSBzaXplLCBtYXhzaXplLCBvZmZzZXQ7CisKKyAgLyogb25lIG1lbW9yeSBibG9jayAqLworICBidWYgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgMTAwLCAwKTsKKworICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZXMgKGJ1ZiwgJm9mZnNldCwgJm1heGFsbG9jKTsKKyAgZmFpbF91bmxlc3MgKHNpemUgPT0gMTAwKTsKKyAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKG1heGFsbG9jID49IDEwMCk7CisKKyAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfYnVmZmVyX3Jlc2l6ZSAoYnVmLCAyMDAsIDUwKSk7CisgIEFTU0VSVF9DUklUSUNBTCAoZ3N0X2J1ZmZlcl9yZXNpemUgKGJ1ZiwgMCwgMTUwKSk7CisgIEFTU0VSVF9DUklUSUNBTCAoZ3N0X2J1ZmZlcl9yZXNpemUgKGJ1ZiwgMSwgbWF4YWxsb2MpKTsKKyAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfYnVmZmVyX3Jlc2l6ZSAoYnVmLCBtYXhhbGxvYywgMSkpOworCisgIC8qIHRoaXMgZG9lcyBub3RoaW5nICovCisgIGdzdF9idWZmZXJfcmVzaXplIChidWYsIDAsIDEwMCk7CisKKyAgLyogbm90aGluZyBzaG91bGQgaGF2ZSBjaGFuZ2VkICovCisgIHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplcyAoYnVmLCAmb2Zmc2V0LCAmbWF4c2l6ZSk7CisgIGZhaWxfdW5sZXNzIChzaXplID09IDEwMCk7CisgIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChtYXhzaXplID09IG1heGFsbG9jKTsKKworICBnc3RfYnVmZmVyX3Jlc2l6ZSAoYnVmLCAwLCA1MCk7CisgIHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplcyAoYnVmLCAmb2Zmc2V0LCAmbWF4c2l6ZSk7CisgIGZhaWxfdW5sZXNzIChzaXplID09IDUwKTsKKyAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKG1heHNpemUgPT0gbWF4YWxsb2MpOworCisgIGdzdF9idWZmZXJfcmVzaXplIChidWYsIDAsIDEwMCk7CisgIHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplcyAoYnVmLCAmb2Zmc2V0LCAmbWF4c2l6ZSk7CisgIGZhaWxfdW5sZXNzIChzaXplID09IDEwMCk7CisgIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChtYXhzaXplID09IG1heGFsbG9jKTsKKworICBnc3RfYnVmZmVyX3Jlc2l6ZSAoYnVmLCAxLCA5OSk7CisgIHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplcyAoYnVmLCAmb2Zmc2V0LCAmbWF4c2l6ZSk7CisgIGZhaWxfdW5sZXNzIChzaXplID09IDk5KTsKKyAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAxKTsKKyAgZmFpbF91bmxlc3MgKG1heHNpemUgPT0gbWF4YWxsb2MpOworCisgIEFTU0VSVF9DUklUSUNBTCAoZ3N0X2J1ZmZlcl9yZXNpemUgKGJ1ZiwgMSwgbWF4YWxsb2MgLSAxKSk7CisKKyAgZ3N0X2J1ZmZlcl9yZXNpemUgKGJ1ZiwgMCwgOTkpOworICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZXMgKGJ1ZiwgJm9mZnNldCwgJm1heHNpemUpOworICBmYWlsX3VubGVzcyAoc2l6ZSA9PSA5OSk7CisgIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMSk7CisgIGZhaWxfdW5sZXNzIChtYXhzaXplID09IG1heGFsbG9jKTsKKworICBnc3RfYnVmZmVyX3Jlc2l6ZSAoYnVmLCAtMSwgMTAwKTsKKyAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemVzIChidWYsICZvZmZzZXQsICZtYXhzaXplKTsKKyAgZmFpbF91bmxlc3MgKHNpemUgPT0gMTAwKTsKKyAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKG1heHNpemUgPT0gbWF4YWxsb2MpOworCisgIEFTU0VSVF9DUklUSUNBTCAoZ3N0X2J1ZmZlcl9yZXNpemUgKGJ1ZiwgLTEsIDEwMCkpOworCisgIGdzdF9idWZmZXJfcmVzaXplIChidWYsIDUwLCA0MCk7CisgIHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplcyAoYnVmLCAmb2Zmc2V0LCAmbWF4c2l6ZSk7CisgIGZhaWxfdW5sZXNzIChzaXplID09IDQwKTsKKyAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSA1MCk7CisgIGZhaWxfdW5sZXNzIChtYXhzaXplID09IG1heGFsbG9jKTsKKworICBnc3RfYnVmZmVyX3Jlc2l6ZSAoYnVmLCAtNTAsIDEwMCk7CisgIHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplcyAoYnVmLCAmb2Zmc2V0LCAmbWF4c2l6ZSk7CisgIGZhaWxfdW5sZXNzIChzaXplID09IDEwMCk7CisgIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChtYXhzaXplID09IG1heGFsbG9jKTsKKworICBnc3RfYnVmZmVyX3Jlc2l6ZSAoYnVmLCAwLCAwKTsKKyAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemVzIChidWYsICZvZmZzZXQsICZtYXhzaXplKTsKKyAgZmFpbF91bmxlc3MgKHNpemUgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChtYXhzaXplID09IG1heGFsbG9jKTsKKworICBnc3RfYnVmZmVyX3Jlc2l6ZSAoYnVmLCAwLCAxMDApOworICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZXMgKGJ1ZiwgJm9mZnNldCwgJm1heHNpemUpOworICBmYWlsX3VubGVzcyAoc2l6ZSA9PSAxMDApOworICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDApOworICBmYWlsX3VubGVzcyAobWF4c2l6ZSA9PSBtYXhhbGxvYyk7CisKKyAgZ3N0X2J1ZmZlcl9yZXNpemUgKGJ1ZiwgMCwgMTAwKTsKKyAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemVzIChidWYsICZvZmZzZXQsICZtYXhzaXplKTsKKyAgZmFpbF91bmxlc3MgKHNpemUgPT0gMTAwKTsKKyAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKG1heHNpemUgPT0gbWF4YWxsb2MpOworCisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIFN1aXRlICoKK2dzdF9idWZmZXJfc3VpdGUgKHZvaWQpCit7CisgIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0QnVmZmVyIik7CisgIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKKworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3N1YmJ1ZmZlcik7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdWJidWZmZXJfbWFrZV93cml0YWJsZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9tYWtlX3dyaXRhYmxlKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2lzX3NwYW5fZmFzdCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zcGFuKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X21ldGFkYXRhX3dyaXRhYmxlKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2NvcHkpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdHJ5X25ld19hbmRfYWxsb2MpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc2l6ZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9yZXNpemUpOworCisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoZ3N0X2J1ZmZlcik7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVybGlzdC5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlcmxpc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTJmZGNkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlcmxpc3QuYwpAQCAtMCwwICsxLDc3OSBAQAorLyogR1N0cmVhbWVyCisgKgorICogdW5pdCB0ZXN0IGZvciBHc3RCdWZmZXJMaXN0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEF4aXMgQ29tbXVuaWNhdGlvbnMgPGRldi1nc3RyZWFtZXIgYXQgYXhpcyBkb3QgY29tPgorICogQGF1dGhvciBKb25hcyBIb2xtYmVyZyA8am9uYXMgZG90IGhvbG1iZXJnIGF0IGF4aXMgZG90IGNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisjaW5jbHVkZSA8Z3N0L2dzdGJ1ZmZlcmxpc3QuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2RlZmluZSBUSU1FU1RBTVAgNDIKKworc3RhdGljIEdzdEJ1ZmZlckxpc3QgKmxpc3Q7CitzdGF0aWMgR3N0Q2FwcyAqY2FwczsKKworc3RhdGljIHZvaWQKK3NldHVwICh2b2lkKQoreworICBsaXN0ID0gZ3N0X2J1ZmZlcl9saXN0X25ldyAoKTsKKyAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ0ZXh0L3BsYWluIiwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkCitjbGVhbnVwICh2b2lkKQoreworICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7CisgIGdzdF9idWZmZXJfbGlzdF91bnJlZiAobGlzdCk7Cit9CisKKyNpZiAwCitzdGF0aWMgR3N0QnVmZmVyICoKK2J1ZmZlcl9mcm9tX3N0cmluZyAoY29uc3QgZ2NoYXIgKiBzdHIpCit7CisgIGdzaXplIHNpemU7CisgIEdzdEJ1ZmZlciAqYnVmOworICBncG9pbnRlciBkYXRhOworCisgIHNpemUgPSBzdHJsZW4gKHN0cik7CisgIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoc2l6ZSk7CisgIGdzdF9idWZmZXJfc2V0X2NhcHMgKGJ1ZiwgY2Fwcyk7CisgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpID0gVElNRVNUQU1QOworCisgIGRhdGEgPSBnc3RfYnVmZmVyX21hcCAoYnVmLCBOVUxMLCBOVUxMLCBHU1RfTUFQX1dSSVRFKTsKKyAgbWVtY3B5IChkYXRhLCBzdHIsIHNpemUpOworICBnc3RfYnVmZmVyX3VubWFwIChidWYsIGRhdGEsIHNpemUpOworCisgIHJldHVybiBidWY7Cit9CisKK3N0YXRpYyB2b2lkCitjaGVja19idWZmZXIgKEdzdEJ1ZmZlciAqIGJ1ZiwgZ3NpemUgc2l6ZSwgY29uc3QgZ2NoYXIgKiBkYXRhKQoreworICBnY2hhciAqYmRhdGE7CisgIGdzaXplIGJzaXplLCBjc2l6ZSwgbXNpemU7CisKKyAgYmRhdGEgPSBnc3RfYnVmZmVyX21hcCAoYnVmLCAmYnNpemUsICZtc2l6ZSwgR1NUX01BUF9SRUFEKTsKKyAgY3NpemUgPSBzaXplID8gc2l6ZSA6IGJzaXplOworICBHU1RfREVCVUcgKCIlbHUgJWx1ICVsdSIsIGJzaXplLCBjc2l6ZSwgbXNpemUpOworICBmYWlsX3VubGVzcyAoYnNpemUgPT0gY3NpemUpOworICBmYWlsX3VubGVzcyAobWVtY21wIChiZGF0YSwgZGF0YSwgY3NpemUpID09IDApOworICBnc3RfYnVmZmVyX3VubWFwIChidWYsIGJkYXRhLCBic2l6ZSk7Cit9CisjZW5kaWYKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfYWRkX2FuZF9pdGVyYXRlKQoreworICBHc3RCdWZmZXIgKmJ1ZjE7CisgIEdzdEJ1ZmZlciAqYnVmMjsKKworICAvKiBidWZmZXIgbGlzdCBpcyBpbml0aWFsbHkgZW1wdHkgKi8KKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9sZW4gKGxpc3QpID09IDApOworCisgIEFTU0VSVF9DUklUSUNBTCAoZ3N0X2J1ZmZlcl9saXN0X2luc2VydCAobGlzdCwgMCwgTlVMTCkpOworICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9idWZmZXJfbGlzdF9pbnNlcnQgKE5VTEwsIDAsIE5VTEwpKTsKKworICBidWYxID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisKKyAgLyogYWRkIGEgZ3JvdXAgb2YgMiBidWZmZXJzICovCisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfbGVuIChsaXN0KSA9PSAwKTsKKyAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfYnVmZmVyX2xpc3RfaW5zZXJ0IChsaXN0LCAtMSwgTlVMTCkpOworICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWYxLCAiYnVmMSIsIDEpOworICBnc3RfYnVmZmVyX2xpc3RfYWRkIChsaXN0LCBidWYxKTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmMSwgImJ1ZjEiLCAxKTsgICAgIC8qIGxpc3QgdGFrZXMgb3duZXJzaGlwICovCisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfbGVuIChsaXN0KSA9PSAxKTsKKyAgYnVmMiA9IGdzdF9idWZmZXJfbmV3ICgpOworICBnc3RfYnVmZmVyX2xpc3RfYWRkIChsaXN0LCBidWYyKTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmMiwgImJ1ZjIiLCAxKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9sZW4gKGxpc3QpID09IDIpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKyNpZiAwCitHU1RfU1RBUlRfVEVTVCAodGVzdF9tYWtlX3dyaXRhYmxlKQoreworICBHc3RCdWZmZXJMaXN0SXRlcmF0b3IgKml0OworICBHc3RCdWZmZXJMaXN0ICp3bGlzdDsKKyAgR3N0QnVmZmVyICpidWYxOworICBHc3RCdWZmZXIgKmJ1ZjI7CisgIEdzdEJ1ZmZlciAqYnVmMzsKKyAgR3N0QnVmZmVyICpidWY7CisKKyAgLyogYWRkIGJ1ZmZlcnMgdG8gbGlzdCAqLworICBpdCA9IGdzdF9idWZmZXJfbGlzdF9pdGVyYXRlIChsaXN0KTsKKyAgZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX2FkZF9ncm91cCAoaXQpOworICBidWYxID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxKTsKKyAgZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX2FkZCAoaXQsIGJ1ZjEpOworICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfYWRkX2dyb3VwIChpdCk7CisgIGJ1ZjIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDIpOworICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfYWRkIChpdCwgYnVmMik7CisgIGJ1ZjMgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDMpOworICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfYWRkIChpdCwgYnVmMyk7CisgIGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9mcmVlIChpdCk7CisKKyAgLyogbWFraW5nIGl0IHdyaXRhYmxlIHdpdGggcmVmY291bnQgMSByZXR1cm5zIHRoZSBzYW1lIGxpc3QgKi8KKyAgd2xpc3QgPSBnc3RfYnVmZmVyX2xpc3RfbWFrZV93cml0YWJsZSAobGlzdCk7CisgIGZhaWxfdW5sZXNzICh3bGlzdCA9PSBsaXN0KTsKKyAgaXQgPSBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0ZSAobGlzdCk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfbmV4dF9ncm91cCAoaXQpKTsKKyAgYnVmID0gZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX25leHQgKGl0KTsKKyAgZmFpbF91bmxlc3MgKGJ1ZiA9PSBidWYxKTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmMSwgImJ1ZjEiLCAxKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9uZXh0IChpdCkgPT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfbmV4dF9ncm91cCAoaXQpKTsKKyAgYnVmID0gZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX25leHQgKGl0KTsKKyAgZmFpbF91bmxlc3MgKGJ1ZiA9PSBidWYyKTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmMiwgImJ1ZjIiLCAxKTsKKyAgYnVmID0gZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX25leHQgKGl0KTsKKyAgZmFpbF91bmxlc3MgKGJ1ZiA9PSBidWYzKTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmMywgImJ1ZjMiLCAxKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9uZXh0IChpdCkgPT0gTlVMTCk7CisgIGZhaWxfaWYgKGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9uZXh0X2dyb3VwIChpdCkpOworICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfZnJlZSAoaXQpOworCisgIC8qIG1ha2luZyBpdCB3cml0YWJsZSB3aXRoIHJlZmNvdW50IDIgcmV0dXJucyBhIGNvcHkgb2YgdGhlIGxpc3Qgd2l0aAorICAgKiBpbmNyZWFzZWQgcmVmY291bnQgb24gdGhlIGJ1ZmZlcnMgaW4gdGhlIGxpc3QgKi8KKyAgZ3N0X2J1ZmZlcl9saXN0X3JlZiAobGlzdCk7CisgIGZhaWxfdW5sZXNzIChHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKGxpc3QpID09IDIpOworICB3bGlzdCA9IGdzdF9idWZmZXJfbGlzdF9tYWtlX3dyaXRhYmxlIChsaXN0KTsKKyAgZmFpbF91bmxlc3MgKEdTVF9NSU5JX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAobGlzdCkgPT0gMSk7CisgIGZhaWxfdW5sZXNzIChHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKHdsaXN0KSA9PSAxKTsKKyAgZmFpbF91bmxlc3MgKHdsaXN0ICE9IGxpc3QpOworICBpdCA9IGdzdF9idWZmZXJfbGlzdF9pdGVyYXRlICh3bGlzdCk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfbmV4dF9ncm91cCAoaXQpKTsKKyAgYnVmID0gZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX25leHQgKGl0KTsKKyAgZmFpbF91bmxlc3MgKGJ1ZiA9PSBidWYxKTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmMSwgImJ1ZjEiLCAyKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9uZXh0IChpdCkgPT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfbmV4dF9ncm91cCAoaXQpKTsKKyAgYnVmID0gZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX25leHQgKGl0KTsKKyAgZmFpbF91bmxlc3MgKGJ1ZiA9PSBidWYyKTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmMiwgImJ1ZjIiLCAyKTsKKyAgYnVmID0gZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX25leHQgKGl0KTsKKyAgZmFpbF91bmxlc3MgKGJ1ZiA9PSBidWYzKTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmMywgImJ1ZjMiLCAyKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9uZXh0IChpdCkgPT0gTlVMTCk7CisgIGZhaWxfaWYgKGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9uZXh0X2dyb3VwIChpdCkpOworICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfZnJlZSAoaXQpOworICBnc3RfYnVmZmVyX2xpc3RfdW5yZWYgKHdsaXN0KTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9jb3B5KQoreworICBHc3RCdWZmZXJMaXN0SXRlcmF0b3IgKml0OworICBHc3RCdWZmZXJMaXN0ICpsaXN0X2NvcHk7CisgIEdzdEJ1ZmZlciAqYnVmMTsKKyAgR3N0QnVmZmVyICpidWYyOworICBHc3RCdWZmZXIgKmJ1ZjM7CisgIEdzdEJ1ZmZlciAqYnVmOworCisgIC8qIGFkZCBidWZmZXJzIHRvIHRoZSBsaXN0ICovCisgIGl0ID0gZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdGUgKGxpc3QpOworICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfYWRkX2dyb3VwIChpdCk7CisgIGJ1ZjEgPSBnc3RfYnVmZmVyX25ldyAoKTsKKyAgZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX2FkZCAoaXQsIGJ1ZjEpOworICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfYWRkX2dyb3VwIChpdCk7CisgIGJ1ZjIgPSBnc3RfYnVmZmVyX25ldyAoKTsKKyAgZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX2FkZCAoaXQsIGJ1ZjIpOworICBidWYzID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisgIGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9hZGQgKGl0LCBidWYzKTsKKyAgZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKKworICAvKiBtYWtlIGEgY29weSAqLworICBsaXN0X2NvcHkgPSBnc3RfYnVmZmVyX2xpc3RfY29weSAobGlzdCk7CisgIGZhaWxfdW5sZXNzIChHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKGxpc3QpID09IDEpOworICBmYWlsX3VubGVzcyAoR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChsaXN0X2NvcHkpID09IDEpOworICBmYWlsX3VubGVzcyAobGlzdF9jb3B5ICE9IGxpc3QpOworICBpdCA9IGdzdF9idWZmZXJfbGlzdF9pdGVyYXRlIChsaXN0X2NvcHkpOworICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX25leHRfZ3JvdXAgKGl0KSk7CisgIGJ1ZiA9IGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9uZXh0IChpdCk7CisgIGZhaWxfdW5sZXNzIChidWYgPT0gYnVmMSk7CisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZjEsICJidWYxIiwgMik7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfbmV4dCAoaXQpID09IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX25leHRfZ3JvdXAgKGl0KSk7CisgIGJ1ZiA9IGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9uZXh0IChpdCk7CisgIGZhaWxfdW5sZXNzIChidWYgPT0gYnVmMik7CisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZjIsICJidWYyIiwgMik7CisgIGJ1ZiA9IGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9uZXh0IChpdCk7CisgIGZhaWxfdW5sZXNzIChidWYgPT0gYnVmMyk7CisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZjMsICJidWYzIiwgMik7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfbmV4dCAoaXQpID09IE5VTEwpOworICBmYWlsX2lmIChnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfbmV4dF9ncm91cCAoaXQpKTsKKyAgZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKKyAgZ3N0X2J1ZmZlcl9saXN0X3VucmVmIChsaXN0X2NvcHkpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3N0ZWFsKQoreworICBHc3RCdWZmZXJMaXN0SXRlcmF0b3IgKml0OworICBHc3RCdWZmZXIgKmJ1ZjE7CisgIEdzdEJ1ZmZlciAqYnVmMjsKKyAgR3N0QnVmZmVyICpidWYzOworICBHc3RCdWZmZXIgKmJ1ZjsKKworICAvKiBhZGQgYnVmZmVycyB0byB0aGUgbGlzdCAqLworICBpdCA9IGdzdF9idWZmZXJfbGlzdF9pdGVyYXRlIChsaXN0KTsKKyAgZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX2FkZF9ncm91cCAoaXQpOworICBidWYxID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisgIGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9hZGQgKGl0LCBidWYxKTsKKyAgZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX2FkZF9ncm91cCAoaXQpOworICBidWYyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisgIGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9hZGQgKGl0LCBidWYyKTsKKyAgYnVmMyA9IGdzdF9idWZmZXJfbmV3ICgpOworICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfYWRkIChpdCwgYnVmMyk7CisgIGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9mcmVlIChpdCk7CisKKyAgLyogY2hlY2sgc29tZSBlcnJvciBoYW5kbGluZyAqLworICBBU1NFUlRfQ1JJVElDQUwgKChidWYgPSBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3Jfc3RlYWwgKE5VTEwpKSk7CisgIGZhaWxfdW5sZXNzIChidWYgPT0gTlVMTCk7CisgIGl0ID0gZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdGUgKGxpc3QpOworICBBU1NFUlRfQ1JJVElDQUwgKChidWYgPSBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3Jfc3RlYWwgKGl0KSkpOworICBmYWlsX3VubGVzcyAoYnVmID09IE5VTEwpOworCisgIC8qIHN0ZWFsIHRoZSBmaXJzdCBidWZmZXIgKi8KKyAgQVNTRVJUX0NSSVRJQ0FMICgoYnVmID0gZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX3N0ZWFsIChpdCkpKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9uZXh0X2dyb3VwIChpdCkpOworICBBU1NFUlRfQ1JJVElDQUwgKChidWYgPSBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3Jfc3RlYWwgKGl0KSkpOworICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX25leHQgKGl0KSA9PSBidWYxKTsKKyAgYnVmID0gZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX3N0ZWFsIChpdCk7CisgIGZhaWxfdW5sZXNzIChidWYgPT0gYnVmMSk7CisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZiwgImJ1ZiIsIDEpOworICBnc3RfYnVmZmVyX3VucmVmIChidWYpOworICBBU1NFUlRfQ1JJVElDQUwgKChidWYgPSBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3Jfc3RlYWwgKGl0KSkpOworICBmYWlsX3VubGVzcyAoYnVmID09IE5VTEwpOworCisgIC8qIHN0ZWFsIHRoZSBzZWNvbmQgYnVmZmVyICovCisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfbmV4dF9ncm91cCAoaXQpKTsKKyAgQVNTRVJUX0NSSVRJQ0FMICgoYnVmID0gZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX3N0ZWFsIChpdCkpKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9uZXh0IChpdCkgPT0gYnVmMik7CisgIGJ1ZiA9IGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9zdGVhbCAoaXQpOworICBmYWlsX3VubGVzcyAoYnVmID09IGJ1ZjIpOworICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWYsICJidWYiLCAxKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKKyAgQVNTRVJUX0NSSVRJQ0FMICgoYnVmID0gZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX3N0ZWFsIChpdCkpKTsKKworICAvKiBzdGVhbCB0aGUgdGhpcmQgYnVmZmVyICovCisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfbmV4dCAoaXQpID09IGJ1ZjMpOworICBidWYgPSBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3Jfc3RlYWwgKGl0KTsKKyAgZmFpbF91bmxlc3MgKGJ1ZiA9PSBidWYzKTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmLCAiYnVmIiwgMSk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7CisgIEFTU0VSVF9DUklUSUNBTCAoKGJ1ZiA9IGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9zdGVhbCAoaXQpKSk7CisKKyAgZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKKworICAvKiBpdGVyYXRlIGFnYWluIHdoZW4gYWxsIGJ1ZmZlcnMgaGF2ZSBiZWVuIHN0b2xlbiAqLworICBpdCA9IGdzdF9idWZmZXJfbGlzdF9pdGVyYXRlIChsaXN0KTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9uZXh0IChpdCkgPT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfbmV4dF9ncm91cCAoaXQpKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9uZXh0IChpdCkgPT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfbmV4dF9ncm91cCAoaXQpKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9uZXh0IChpdCkgPT0gTlVMTCk7CisgIGZhaWxfaWYgKGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9uZXh0X2dyb3VwIChpdCkpOworICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfZnJlZSAoaXQpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3Rha2UpCit7CisgIEdzdEJ1ZmZlckxpc3RJdGVyYXRvciAqaXQ7CisgIEdzdEJ1ZmZlciAqYnVmMTsKKyAgR3N0QnVmZmVyICpidWYyOworICBHc3RCdWZmZXIgKmJ1ZjM7CisgIEdzdEJ1ZmZlciAqYnVmOworCisgIC8qIGFkZCBidWZmZXJzIHRvIHRoZSBsaXN0ICovCisgIGl0ID0gZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdGUgKGxpc3QpOworICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfYWRkX2dyb3VwIChpdCk7CisgIGJ1ZjEgPSBnc3RfYnVmZmVyX25ldyAoKTsKKyAgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZjEpOworICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfYWRkIChpdCwgYnVmMSk7CisgIGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9hZGRfZ3JvdXAgKGl0KTsKKyAgYnVmMiA9IGdzdF9idWZmZXJfbmV3ICgpOworICBnc3RfYnVmZmVyX3JlZiAoYnVmMik7CisgIGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9hZGQgKGl0LCBidWYyKTsKKyAgYnVmMyA9IGdzdF9idWZmZXJfbmV3ICgpOworICBnc3RfYnVmZmVyX3JlZiAoYnVmMyk7CisgIGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9hZGQgKGl0LCBidWYzKTsKKyAgZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKKworICAvKiBjaGVjayBzb21lIGVycm9yIGhhbmRsaW5nICovCisgIEFTU0VSVF9DUklUSUNBTCAoZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX3Rha2UgKE5VTEwsIE5VTEwpKTsKKyAgaXQgPSBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0ZSAobGlzdCk7CisgIEFTU0VSVF9DUklUSUNBTCAoZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX3Rha2UgKGl0LCBOVUxMKSk7CisgIGJ1ZiA9IGdzdF9idWZmZXJfbmV3ICgpOworICBnc3RfYnVmZmVyX3JlZiAoYnVmKTsKKyAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfdGFrZSAoTlVMTCwgYnVmKSk7CisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZiwgImJ1ZiIsIDIpOworCisgIC8qIHJlcGxhY2UgdGhlIGZpcnN0IGJ1ZmZlciAqLworICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl90YWtlIChpdCwgYnVmKSk7CisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZiwgImJ1ZiIsIDIpOworICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX25leHRfZ3JvdXAgKGl0KSk7CisgIEFTU0VSVF9DUklUSUNBTCAoZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX3Rha2UgKGl0LCBidWYpKTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmLCAiYnVmIiwgMik7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfbmV4dCAoaXQpID09IGJ1ZjEpOworICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl90YWtlIChpdCwgTlVMTCkpOworICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWYxLCAiYnVmMSIsIDIpOworICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfdGFrZSAoaXQsIGJ1Zik7CisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZiwgImJ1ZiIsIDIpOworICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWYxLCAiYnVmMSIsIDEpOworICBnc3RfYnVmZmVyX3VucmVmIChidWYxKTsKKworICAvKiByZXBsYWNlIHRoZSBmaXJzdCBidWZmZXIgYWdhaW4sIHdpdGggaXRzZWxmICovCisgIGdzdF9idWZmZXJfcmVmIChidWYpOworICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfdGFrZSAoaXQsIGJ1Zik7CisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZiwgImJ1ZiIsIDIpOworCisgIC8qIHJlcGxhY2UgdGhlIHNlY29uZCBidWZmZXIgKi8KKyAgZ3N0X2J1ZmZlcl9yZWYgKGJ1Zik7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfbmV4dCAoaXQpID09IE5VTEwpOworICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl90YWtlIChpdCwgYnVmKSk7CisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZiwgImJ1ZiIsIDMpOworICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX25leHRfZ3JvdXAgKGl0KSk7CisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZjIsICJidWYyIiwgMik7CisgIEFTU0VSVF9DUklUSUNBTCAoZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX3Rha2UgKGl0LCBidWYpKTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmLCAiYnVmIiwgMyk7CisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZjIsICJidWYyIiwgMik7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfbmV4dCAoaXQpID09IGJ1ZjIpOworICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl90YWtlIChpdCwgTlVMTCkpOworICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWYyLCAiYnVmMiIsIDIpOworICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfdGFrZSAoaXQsIGJ1Zik7CisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZiwgImJ1ZiIsIDMpOworICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWYyLCAiYnVmMiIsIDEpOworICBnc3RfYnVmZmVyX3VucmVmIChidWYyKTsKKworICAvKiByZXBsYWNlIHRoZSB0aGlyZCBidWZmZXIgKi8KKyAgZ3N0X2J1ZmZlcl9yZWYgKGJ1Zik7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfbmV4dCAoaXQpID09IGJ1ZjMpOworICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWYzLCAiYnVmMyIsIDIpOworICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfdGFrZSAoaXQsIGJ1Zik7CisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZiwgImJ1ZiIsIDQpOworICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWYzLCAiYnVmMyIsIDEpOworICBnc3RfYnVmZmVyX3VucmVmIChidWYzKTsKKyAgZmFpbF9pZiAoZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX25leHRfZ3JvdXAgKGl0KSk7CisgIEFTU0VSVF9DUklUSUNBTCAoZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX3Rha2UgKGl0LCBidWYpKTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmLCAiYnVmIiwgNCk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7CisKKyAgZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgZ3BvaW50ZXIgZG9fZGF0YV9mdW5jX2RhdGE7CitzdGF0aWMgZ2Jvb2xlYW4gbm90aWZpZWQ7CisKK3N0YXRpYyBHc3RCdWZmZXIgKgorZG9fZGF0YV9mdW5jIChHc3RCdWZmZXIgKiBidWZmZXIsIGdwb2ludGVyIGRhdGEpCit7CisgIGRvX2RhdGFfZnVuY19kYXRhID0gZGF0YTsKKyAgZmFpbF9pZiAobm90aWZpZWQpOworCisgIHJldHVybiBidWZmZXI7Cit9CisKK3N0YXRpYyBHc3RCdWZmZXIgKgorZG9fZnVuY19udWxsIChHc3RCdWZmZXIgKiBidWZmZXIpCit7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2RvKQoreworICBHc3RCdWZmZXJMaXN0SXRlcmF0b3IgKml0OworICBHc3RCdWZmZXIgKmJ1ZjE7CisgIEdzdEJ1ZmZlciAqYnVmOworICBnY2hhciAqZGF0YTsKKworICAvKiBlcnJvciBoYW5kbGluZyAqLworICBBU1NFUlRfQ1JJVElDQUwgKChidWYgPSBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfZG8gKE5VTEwsIE5VTEwsIE5VTEwpKSk7CisgIGZhaWxfdW5sZXNzIChidWYgPT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChidWYgPT0gTlVMTCk7CisgIGl0ID0gZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdGUgKGxpc3QpOworICBBU1NFUlRfQ1JJVElDQUwgKChidWYgPSBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfZG8gKGl0LCBOVUxMLCBOVUxMKSkpOworICBmYWlsX3VubGVzcyAoYnVmID09IE5VTEwpOworICBmYWlsX3VubGVzcyAoYnVmID09IE5VTEwpOworCisgIC8qIGFkZCBidWZmZXJzIHRvIHRoZSBsaXN0ICovCisgIGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9hZGRfZ3JvdXAgKGl0KTsKKyAgYnVmMSA9IGdzdF9idWZmZXJfbmV3ICgpOworICBnc3RfYnVmZmVyX3JlZiAoYnVmMSk7CisgIGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9hZGQgKGl0LCBidWYxKTsKKyAgZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX2FkZF9ncm91cCAoaXQpOworICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfZnJlZSAoaXQpOworCisgIC8qIGNhbGwgZG8tZnVuY3Rpb24gKi8KKyAgaXQgPSBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0ZSAobGlzdCk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfbmV4dF9ncm91cCAoaXQpKTsKKyAgQVNTRVJUX0NSSVRJQ0FMICgoYnVmID0KKyAgICAgICAgICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfZG8gKGl0LAorICAgICAgICAgICAgICAoR3N0QnVmZmVyTGlzdERvRnVuY3Rpb24pIGdzdF9idWZmZXJfcmVmLCBOVUxMKSkpOworICBmYWlsX3VubGVzcyAoYnVmID09IE5VTEwpOworICBkYXRhID0gKGNoYXIgKikgImRhdGEiOworICBBU1NFUlRfQ1JJVElDQUwgKChidWYgPSBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfZG8gKGl0LCBkb19kYXRhX2Z1bmMsCisgICAgICAgICAgICAgIGRhdGEpKSk7CisgIGZhaWxfdW5sZXNzIChidWYgPT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChkb19kYXRhX2Z1bmNfZGF0YSAhPSBkYXRhKTsKKyAgYnVmID0gZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX25leHQgKGl0KTsKKyAgZmFpbF91bmxlc3MgKGJ1ZiA9PSBidWYxKTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmMSwgImJ1ZjEiLCAyKTsKKyAgYnVmID0KKyAgICAgIGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9kbyAoaXQsIChHc3RCdWZmZXJMaXN0RG9GdW5jdGlvbikgZ3N0X2J1ZmZlcl9yZWYsCisgICAgICBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGJ1ZiA9PSBidWYxKTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmMSwgImJ1ZjEiLCAzKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKKyAgYnVmID0gZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX2RvIChpdCwgZG9fZGF0YV9mdW5jLCBkYXRhKTsKKyAgZmFpbF91bmxlc3MgKGJ1ZiA9PSBidWYxKTsKKyAgZmFpbF91bmxlc3MgKGRvX2RhdGFfZnVuY19kYXRhID09IGRhdGEpOworCisgIC8qIGRvLWZ1bmN0aW9uIHRoYXQgcmV0dXJuIGEgbmV3IGJ1ZmZlciByZXBsYWNlcyB0aGUgYnVmZmVyIGluIHRoZSBsaXN0ICovCisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZjEsICJidWYxIiwgMik7CisgIGJ1ZiA9IGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9kbyAoaXQsCisgICAgICAoR3N0QnVmZmVyTGlzdERvRnVuY3Rpb24pIGdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGJ1ZiAhPSBidWYxKTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmLCAiYnVmIiwgMSk7CisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZiwgImJ1ZjEiLCAxKTsKKyAgZ3N0X2J1ZmZlcl9yZXBsYWNlICgmYnVmMSwgYnVmKTsKKworICAvKiBkby1mdW5jdGlvbiB0aGF0IHJldHVybiBOVUxMIHJlbW92ZXMgdGhlIGJ1ZmZlciBmcm9tIHRoZSBsaXN0ICovCisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZjEsICJidWYxIiwgMik7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfZG8gKGl0LAorICAgICAgICAgIChHc3RCdWZmZXJMaXN0RG9GdW5jdGlvbikgZG9fZnVuY19udWxsLCBOVUxMKSA9PSBOVUxMKTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmMSwgImJ1ZjEiLCAxKTsKKyAgQVNTRVJUX0NSSVRJQ0FMICgoYnVmID0KKyAgICAgICAgICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfZG8gKGl0LAorICAgICAgICAgICAgICAoR3N0QnVmZmVyTGlzdERvRnVuY3Rpb24pIGdzdF9idWZmZXJfcmVmLCBOVUxMKSkpOworICBmYWlsX3VubGVzcyAoYnVmID09IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX25leHQgKGl0KSA9PSBOVUxMKTsKKyAgZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKKyAgaXQgPSBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0ZSAobGlzdCk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfbmV4dF9ncm91cCAoaXQpKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9uZXh0IChpdCkgPT0gTlVMTCk7CisgIGZhaWxfaWYgKGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9uZXh0X2dyb3VwIChpdCkpOworICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfZnJlZSAoaXQpOworICBnc3RfYnVmZmVyX3VucmVmIChidWYxKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9tZXJnZSkKK3sKKyAgR3N0QnVmZmVyTGlzdEl0ZXJhdG9yICppdDsKKyAgR3N0QnVmZmVyTGlzdEl0ZXJhdG9yICptZXJnZV9pdDsKKyAgR3N0QnVmZmVyICptZXJnZWRfYnVmOworICBHc3RCdWZmZXIgKmJ1ZjsKKworICBpdCA9IGdzdF9idWZmZXJfbGlzdF9pdGVyYXRlIChsaXN0KTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9tZXJnZV9ncm91cCAoaXQpID09IE5VTEwpOworCisgIC8qIGNyZWF0ZSBhIG5ldyBncm91cCBhbmQgYWRkIGEgYnVmZmVyICovCisgIGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9hZGRfZ3JvdXAgKGl0KTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9tZXJnZV9ncm91cCAoaXQpID09IE5VTEwpOworICBidWYgPSBidWZmZXJfZnJvbV9zdHJpbmcgKCJPbmUiKTsKKyAgZ3N0X2J1ZmZlcl9yZWYgKGJ1Zik7CisgIGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9hZGQgKGl0LCBidWYpOworCisgIC8qIG1lcmdpbmcgYSBncm91cCB3aXRoIG9uZSBidWZmZXIgcmV0dXJucyBhIGNvcHkgb2YgdGhlIGJ1ZmZlciAqLworICBtZXJnZV9pdCA9IGdzdF9idWZmZXJfbGlzdF9pdGVyYXRlIChsaXN0KTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9uZXh0X2dyb3VwIChtZXJnZV9pdCkpOworICBtZXJnZWRfYnVmID0gZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX21lcmdlX2dyb3VwIChtZXJnZV9pdCk7CisgIGZhaWxfdW5sZXNzIChtZXJnZWRfYnVmICE9IGJ1Zik7CisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKG1lcmdlZF9idWYsICJtZXJnZWRfYnVmIiwgMSk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7CisgIGZhaWxfdW5sZXNzIChHU1RfQlVGRkVSX0NBUFMgKG1lcmdlZF9idWYpID09IGNhcHMpOworICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKG1lcmdlZF9idWYpID09IFRJTUVTVEFNUCk7CisgIGNoZWNrX2J1ZmZlciAobWVyZ2VkX2J1ZiwgMywgIk9uZSIpOworICBnc3RfYnVmZmVyX3VucmVmIChtZXJnZWRfYnVmKTsKKworICAvKiBhZGQgYW5vdGhlciBidWZmZXIgdG8gdGhlIHNhbWUgZ3JvdXAgKi8KKyAgZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX2FkZCAoaXQsIGJ1ZmZlcl9mcm9tX3N0cmluZyAoIkdyb3VwIikpOworCisgIC8qIG1lcmdpbmcgYSBncm91cCByZXR1cm5zIGEgbmV3IGJ1ZmZlciB3aXRoIG1lcmdlZCBkYXRhICovCisgIG1lcmdlZF9idWYgPSBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfbWVyZ2VfZ3JvdXAgKG1lcmdlX2l0KTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAobWVyZ2VkX2J1ZiwgIm1lcmdlZF9idWYiLCAxKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9CVUZGRVJfQ0FQUyAobWVyZ2VkX2J1ZikgPT0gY2Fwcyk7CisgIGZhaWxfdW5sZXNzIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAobWVyZ2VkX2J1ZikgPT0gVElNRVNUQU1QKTsKKyAgY2hlY2tfYnVmZmVyIChtZXJnZWRfYnVmLCA4LCAiT25lR3JvdXAiKTsKKworICAvKiBtZXJnaW5nIHRoZSBzYW1lIGdyb3VwIGFnYWluIHNob3VsZCByZXR1cm4gYSBuZXcgYnVmZmVyIHdpdGggbWVyZ2VkIGRhdGEgKi8KKyAgYnVmID0gZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX21lcmdlX2dyb3VwIChtZXJnZV9pdCk7CisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZiwgImJ1ZiIsIDEpOworICBmYWlsX3VubGVzcyAoYnVmICE9IG1lcmdlZF9idWYpOworICBjaGVja19idWZmZXIgKGJ1ZiwgOCwgIk9uZUdyb3VwIik7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7CisgIGdzdF9idWZmZXJfdW5yZWYgKG1lcmdlZF9idWYpOworCisgIC8qIGFkZCBhIG5ldyBncm91cCAqLworICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfYWRkX2dyb3VwIChpdCk7CisgIGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9hZGQgKGl0LCBidWZmZXJfZnJvbV9zdHJpbmcgKCJBbm90aGVyR3JvdXAiKSk7CisgIGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9mcmVlIChpdCk7CisKKyAgLyogbWVyZ2UgdGhlIGZpcnN0IGdyb3VwIGFnYWluICovCisgIG1lcmdlZF9idWYgPSBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfbWVyZ2VfZ3JvdXAgKG1lcmdlX2l0KTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAobWVyZ2VkX2J1ZiwgIm1lcmdlZF9idWYiLCAxKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9CVUZGRVJfQ0FQUyAobWVyZ2VkX2J1ZikgPT0gY2Fwcyk7CisgIGZhaWxfdW5sZXNzIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAobWVyZ2VkX2J1ZikgPT0gVElNRVNUQU1QKTsKKyAgY2hlY2tfYnVmZmVyIChtZXJnZWRfYnVmLCA4LCAiT25lR3JvdXAiKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAobWVyZ2VkX2J1Zik7CisKKyAgLyogbWVyZ2UgdGhlIHNlY29uZCBncm91cCAqLworICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX25leHRfZ3JvdXAgKG1lcmdlX2l0KSk7CisgIG1lcmdlZF9idWYgPSBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfbWVyZ2VfZ3JvdXAgKG1lcmdlX2l0KTsKKyAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAobWVyZ2VkX2J1ZiwgIm1lcmdlZF9idWYiLCAxKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9CVUZGRVJfQ0FQUyAobWVyZ2VkX2J1ZikgPT0gY2Fwcyk7CisgIGZhaWxfdW5sZXNzIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAobWVyZ2VkX2J1ZikgPT0gVElNRVNUQU1QKTsKKyAgY2hlY2tfYnVmZmVyIChtZXJnZWRfYnVmLCAxMiwgIkFub3RoZXJHcm91cCIpOworICBnc3RfYnVmZmVyX3VucmVmIChtZXJnZWRfYnVmKTsKKworICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfZnJlZSAobWVyZ2VfaXQpOworCisgIC8qIHN0ZWFsIHRoZSBzZWNvbmQgYnVmZmVyIGFuZCBtZXJnZSB0aGUgZmlyc3QgZ3JvdXAgYWdhaW4gKi8KKyAgaXQgPSBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0ZSAobGlzdCk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfbmV4dF9ncm91cCAoaXQpKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9uZXh0IChpdCkgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfbmV4dCAoaXQpICE9IE5VTEwpOworICBidWYgPSBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3Jfc3RlYWwgKGl0KTsKKyAgZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKKyAgZmFpbF91bmxlc3MgKGJ1ZiAhPSBOVUxMKTsKKyAgY2hlY2tfYnVmZmVyIChidWYsIDAsICJHcm91cCIpOworICBnc3RfYnVmZmVyX3VucmVmIChidWYpOworICBtZXJnZV9pdCA9IGdzdF9idWZmZXJfbGlzdF9pdGVyYXRlIChsaXN0KTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9uZXh0X2dyb3VwIChtZXJnZV9pdCkpOworICBtZXJnZWRfYnVmID0gZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX21lcmdlX2dyb3VwIChtZXJnZV9pdCk7CisgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKG1lcmdlZF9idWYsICJtZXJnZWRfYnVmIiwgMSk7CisgIGZhaWxfdW5sZXNzIChHU1RfQlVGRkVSX0NBUFMgKG1lcmdlZF9idWYpID09IGNhcHMpOworICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKG1lcmdlZF9idWYpID09IFRJTUVTVEFNUCk7CisgIGNoZWNrX2J1ZmZlciAobWVyZ2VkX2J1ZiwgMywgIk9uZSIpOworICBnc3RfYnVmZmVyX3VucmVmIChtZXJnZWRfYnVmKTsKKworICAvKiBzdGVhbCB0aGUgZmlyc3QgYnVmZmVyIHRvbyBhbmQgbWVyZ2UgdGhlIGZpcnN0IGdyb3VwIGFnYWluICovCisgIGl0ID0gZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdGUgKGxpc3QpOworICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX25leHRfZ3JvdXAgKGl0KSk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfbmV4dCAoaXQpICE9IE5VTEwpOworICBidWYgPSBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3Jfc3RlYWwgKGl0KTsKKyAgZmFpbF91bmxlc3MgKGJ1ZiAhPSBOVUxMKTsKKyAgY2hlY2tfYnVmZmVyIChidWYsIDMsICJPbmUiKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKKyAgZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9tZXJnZV9ncm91cCAobWVyZ2VfaXQpID09IE5VTEwpOworICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfZnJlZSAobWVyZ2VfaXQpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIEdzdEJ1ZmZlciAqYnVmWzNdWzNdOworICBndWludCBpdGVyOworfSBGb3JlYWNoRGF0YTsKKworc3RhdGljIEdzdEJ1ZmZlckxpc3RJdGVtCitmb3JlYWNoX2Z1bmMxIChHc3RCdWZmZXIgKiogYnVmZmVyLCBndWludCBncm91cCwgZ3VpbnQgaWR4LCBGb3JlYWNoRGF0YSAqIGRhdGEpCit7CisgIGZhaWxfdW5sZXNzIChidWZmZXIgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzICgqYnVmZmVyID09IGRhdGEtPmJ1Zltncm91cF1baWR4XSk7CisKKyAgZGF0YS0+aXRlcisrOworCisgIHJldHVybiBHU1RfQlVGRkVSX0xJU1RfQ09OVElOVUU7Cit9CisKK3N0YXRpYyBHc3RCdWZmZXJMaXN0SXRlbQorZm9yZWFjaF9mdW5jMiAoR3N0QnVmZmVyICoqIGJ1ZmZlciwgZ3VpbnQgZ3JvdXAsIGd1aW50IGlkeCwgRm9yZWFjaERhdGEgKiBkYXRhKQoreworICBmYWlsX3VubGVzcyAoaWR4ID09IDApOworICBmYWlsX3VubGVzcyAoYnVmZmVyICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoKmJ1ZmZlciA9PSBkYXRhLT5idWZbZ3JvdXBdW2lkeF0pOworCisgIGRhdGEtPml0ZXIrKzsKKworICByZXR1cm4gR1NUX0JVRkZFUl9MSVNUX1NLSVBfR1JPVVA7Cit9CisKK3N0YXRpYyBHc3RCdWZmZXJMaXN0SXRlbQorZm9yZWFjaF9mdW5jMyAoR3N0QnVmZmVyICoqIGJ1ZmZlciwgZ3VpbnQgZ3JvdXAsIGd1aW50IGlkeCwgRm9yZWFjaERhdGEgKiBkYXRhKQoreworICBmYWlsX3VubGVzcyAoZ3JvdXAgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChpZHggPT0gMCk7CisgIGZhaWxfdW5sZXNzIChidWZmZXIgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzICgqYnVmZmVyID09IGRhdGEtPmJ1Zltncm91cF1baWR4XSk7CisKKyAgZGF0YS0+aXRlcisrOworCisgIHJldHVybiBHU1RfQlVGRkVSX0xJU1RfRU5EOworfQorCitzdGF0aWMgR3N0QnVmZmVyTGlzdEl0ZW0KK2ZvcmVhY2hfZnVuYzQgKEdzdEJ1ZmZlciAqKiBidWZmZXIsIGd1aW50IGdyb3VwLCBndWludCBpZHgsIEZvcmVhY2hEYXRhICogZGF0YSkKK3sKKyAgZmFpbF91bmxlc3MgKGlkeCA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKGJ1ZmZlciAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKCpidWZmZXIgPT0gZGF0YS0+YnVmW2dyb3VwXVtpZHhdKTsKKworICBnc3RfYnVmZmVyX3VucmVmICgqYnVmZmVyKTsKKyAgKmJ1ZmZlciA9IE5VTEw7CisgIGRhdGEtPml0ZXIrKzsKKworICByZXR1cm4gR1NUX0JVRkZFUl9MSVNUX1NLSVBfR1JPVVA7Cit9CisKK3N0YXRpYyBHc3RCdWZmZXJMaXN0SXRlbQorZm9yZWFjaF9mdW5jNSAoR3N0QnVmZmVyICoqIGJ1ZmZlciwgZ3VpbnQgZ3JvdXAsIGd1aW50IGlkeCwgRm9yZWFjaERhdGEgKiBkYXRhKQoreworICBmYWlsX3VubGVzcyAoYnVmZmVyICE9IE5VTEwpOworCisgIGRhdGEtPml0ZXIrKzsKKworICByZXR1cm4gR1NUX0JVRkZFUl9MSVNUX0NPTlRJTlVFOworfQorCitHU1RfU1RBUlRfVEVTVCAodGVzdF9mb3JlYWNoKQoreworICBHc3RCdWZmZXJMaXN0SXRlcmF0b3IgKml0OworICBGb3JlYWNoRGF0YSBkYXRhOworCisgIC8qIGFkZCBidWZmZXJzIHRvIHRoZSBsaXN0ICovCisgIGl0ID0gZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdGUgKGxpc3QpOworICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfYWRkX2dyb3VwIChpdCk7CisgIGRhdGEuYnVmWzBdWzBdID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisgIGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9hZGQgKGl0LCBkYXRhLmJ1ZlswXVswXSk7CisgIGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9hZGRfZ3JvdXAgKGl0KTsKKyAgZGF0YS5idWZbMV1bMF0gPSBnc3RfYnVmZmVyX25ldyAoKTsKKyAgZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX2FkZCAoaXQsIGRhdGEuYnVmWzFdWzBdKTsKKyAgZGF0YS5idWZbMV1bMV0gPSBnc3RfYnVmZmVyX25ldyAoKTsKKyAgZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX2FkZCAoaXQsIGRhdGEuYnVmWzFdWzFdKTsKKyAgZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9saXN0X2dldCAobGlzdCwgMCwgMCkgPT0gZGF0YS5idWZbMF1bMF0pOworICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9saXN0X2dldCAobGlzdCwgMCwgMSkgPT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfZ2V0IChsaXN0LCAxLCAwKSA9PSBkYXRhLmJ1ZlsxXVswXSk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfZ2V0IChsaXN0LCAxLCAxKSA9PSBkYXRhLmJ1ZlsxXVsxXSk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfZ2V0IChsaXN0LCAxLCAyKSA9PSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9nZXQgKGxpc3QsIDIsIDApID09IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9saXN0X2dldCAobGlzdCwgMiwgMSkgPT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfZ2V0IChsaXN0LCAzLCAzKSA9PSBOVUxMKTsKKworICAvKiBpdGVyYXRlIGV2ZXJ5dGhpbmcgKi8KKyAgZGF0YS5pdGVyID0gMDsKKyAgZ3N0X2J1ZmZlcl9saXN0X2ZvcmVhY2ggKGxpc3QsIChHc3RCdWZmZXJMaXN0RnVuYykgZm9yZWFjaF9mdW5jMSwgJmRhdGEpOworICBmYWlsX3VubGVzcyAoZGF0YS5pdGVyID09IDMpOworCisgIC8qIGl0ZXJhdGUgb25seSB0aGUgZmlyc3QgYnVmZmVyIG9mIGdyb3VwcyAqLworICBkYXRhLml0ZXIgPSAwOworICBnc3RfYnVmZmVyX2xpc3RfZm9yZWFjaCAobGlzdCwgKEdzdEJ1ZmZlckxpc3RGdW5jKSBmb3JlYWNoX2Z1bmMyLCAmZGF0YSk7CisgIGZhaWxfdW5sZXNzIChkYXRhLml0ZXIgPT0gMik7CisKKyAgLyogaXRlcmF0ZSBvbmx5IHRoZSBmaXJzdCBidWZmZXIgKi8KKyAgZGF0YS5pdGVyID0gMDsKKyAgZ3N0X2J1ZmZlcl9saXN0X2ZvcmVhY2ggKGxpc3QsIChHc3RCdWZmZXJMaXN0RnVuYykgZm9yZWFjaF9mdW5jMywgJmRhdGEpOworICBmYWlsX3VubGVzcyAoZGF0YS5pdGVyID09IDEpOworCisgIC8qIHJlbW92ZSB0aGUgZmlyc3QgYnVmZmVyIG9mIGVhY2ggZ3JvdXAgKi8KKyAgZGF0YS5pdGVyID0gMDsKKyAgZ3N0X2J1ZmZlcl9saXN0X2ZvcmVhY2ggKGxpc3QsIChHc3RCdWZmZXJMaXN0RnVuYykgZm9yZWFjaF9mdW5jNCwgJmRhdGEpOworICBmYWlsX3VubGVzcyAoZGF0YS5pdGVyID09IDIpOworCisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfZ2V0IChsaXN0LCAwLCAwKSA9PSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9nZXQgKGxpc3QsIDAsIDEpID09IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9saXN0X2dldCAobGlzdCwgMSwgMCkgPT0gZGF0YS5idWZbMV1bMV0pOworICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9saXN0X2dldCAobGlzdCwgMSwgMSkgPT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfZ2V0IChsaXN0LCAxLCAyKSA9PSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9nZXQgKGxpc3QsIDIsIDApID09IE5VTEwpOworCisgIC8qIGl0ZXJhdGUgZXZlcnl0aGluZywganVzdCBvbmUgbW9yZSBidWZmZXIgbm93ICovCisgIGRhdGEuaXRlciA9IDA7CisgIGdzdF9idWZmZXJfbGlzdF9mb3JlYWNoIChsaXN0LCAoR3N0QnVmZmVyTGlzdEZ1bmMpIGZvcmVhY2hfZnVuYzUsICZkYXRhKTsKKyAgZmFpbF91bmxlc3MgKGRhdGEuaXRlciA9PSAxKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9saXN0KQoreworICBHc3RCdWZmZXJMaXN0SXRlcmF0b3IgKml0OworICBHTGlzdCAqbCA9IE5VTEw7CisgIGdpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworICAgIGdjaGFyIG5hbWVbMTBdOworICAgIGdfc25wcmludGYgKG5hbWUsIDEwLCAiJWQiLCBpKTsKKyAgICBsID0gZ19saXN0X2FwcGVuZCAobCwgYnVmZmVyX2Zyb21fc3RyaW5nIChuYW1lKSk7CisgIH0KKworICAvKiBhZGQgYnVmZmVycyB0byB0aGUgbGlzdCAqLworICBpdCA9IGdzdF9idWZmZXJfbGlzdF9pdGVyYXRlIChsaXN0KTsKKyAgZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX2FkZF9ncm91cCAoaXQpOworICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfYWRkX2xpc3QgKGl0LCBsKTsKKworICAvKiBhZGQgYSBidWZmZXIgKi8KKyAgZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX2FkZCAoaXQsIGJ1ZmZlcl9mcm9tX3N0cmluZyAoIjEwIikpOworCisgIC8qIGFkZCBhbm90aGVyIGxpc3QgKi8KKyAgbCA9IGdfbGlzdF9hcHBlbmQgKE5VTEwsIGJ1ZmZlcl9mcm9tX3N0cmluZyAoIjExIikpOworICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfYWRkX2xpc3QgKGl0LCBsKTsKKworICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykgeworICAgIEdzdEJ1ZmZlciAqYnVmOworICAgIGdjaGFyIG5hbWVbMTBdOworCisgICAgYnVmID0gZ3N0X2J1ZmZlcl9saXN0X2dldCAobGlzdCwgMCwgaSk7CisgICAgZ19zbnByaW50ZiAobmFtZSwgMTAsICIlZCIsIGkpOworICAgIGNoZWNrX2J1ZmZlciAoYnVmLCAwLCBuYW1lKTsKKyAgfQorICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfZnJlZSAoaXQpOworfQorCitHU1RfRU5EX1RFU1Q7CisjZW5kaWYKKworc3RhdGljIFN1aXRlICoKK2dzdF9idWZmZXJfbGlzdF9zdWl0ZSAodm9pZCkKK3sKKyAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RCdWZmZXJMaXN0Iik7CisgIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKKworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKKyAgdGNhc2VfYWRkX2NoZWNrZWRfZml4dHVyZSAodGNfY2hhaW4sIHNldHVwLCBjbGVhbnVwKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2FkZF9hbmRfaXRlcmF0ZSk7CisjaWYgMAorICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWFrZV93cml0YWJsZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9jb3B5KTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3N0ZWFsKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3Rha2UpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZG8pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWVyZ2UpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZm9yZWFjaCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9saXN0KTsKKyNlbmRpZgorCisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoZ3N0X2J1ZmZlcl9saXN0KTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RidXMuYyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RidXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWNiYTc1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hlY2svZ3N0L2dzdGJ1cy5jCkBAIC0wLDAgKzEsNjM2IEBACisvKiBHU3RyZWFtZXIgbWVzc2FnZSBidXMgdW5pdCB0ZXN0cworICogQ29weXJpZ2h0IChDKSAyMDA1IEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KKworc3RhdGljIEdzdEJ1cyAqdGVzdF9idXMgPSBOVUxMOworc3RhdGljIEdNYWluTG9vcCAqbWFpbl9sb29wOworCisjZGVmaW5lIE5VTV9NRVNTQUdFUyAxMDAwCisjZGVmaW5lIE5VTV9USFJFQURTIDEwCisKK3N0YXRpYyBncG9pbnRlcgorcG91bmRfYnVzX3dpdGhfbWVzc2FnZXMgKGdwb2ludGVyIGRhdGEpCit7CisgIGdpbnQgdGhyZWFkX2lkID0gR1BPSU5URVJfVE9fSU5UIChkYXRhKTsKKyAgZ2ludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBOVU1fTUVTU0FHRVM7IGkrKykgeworICAgIEdzdE1lc3NhZ2UgKm07CisgICAgR3N0U3RydWN0dXJlICpzOworCisgICAgcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgidGVzdF9tZXNzYWdlIiwKKyAgICAgICAgInRocmVhZF9pZCIsIEdfVFlQRV9JTlQsIHRocmVhZF9pZCwgIm1zZ19pZCIsIEdfVFlQRV9JTlQsIGksIE5VTEwpOworICAgIG0gPSBnc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRpb24gKE5VTEwsIHMpOworICAgIGdzdF9idXNfcG9zdCAodGVzdF9idXMsIG0pOworICB9CisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorcHVsbF9tZXNzYWdlcyAodm9pZCkKK3sKKyAgR3N0TWVzc2FnZSAqbTsKKyAgY29uc3QgR3N0U3RydWN0dXJlICpzOworICBndWludCBtZXNzYWdlX2lkc1tOVU1fVEhSRUFEU107CisgIGdpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgTlVNX1RIUkVBRFM7IGkrKykKKyAgICBtZXNzYWdlX2lkc1tpXSA9IDA7CisKKyAgd2hpbGUgKDEpIHsKKyAgICBnaW50IF90LCBfaTsKKworICAgIG0gPSBnc3RfYnVzX3BvcCAodGVzdF9idXMpOworICAgIGlmICghbSkKKyAgICAgIGJyZWFrOworICAgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG0pID09IEdTVF9NRVNTQUdFX0FQUExJQ0FUSU9OKTsKKworICAgIHMgPSBnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlIChtKTsKKyAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAocywgInRocmVhZF9pZCIsICZfdCkpCisgICAgICBnX2NyaXRpY2FsICgiSW52YWxpZCBtZXNzYWdlIik7CisgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJtc2dfaWQiLCAmX2kpKQorICAgICAgZ19jcml0aWNhbCAoIkludmFsaWQgbWVzc2FnZSIpOworCisgICAgZ19yZXR1cm5faWZfZmFpbCAoX3QgPCBOVU1fVEhSRUFEUyk7CisgICAgZ19yZXR1cm5faWZfZmFpbCAoX2kgPT0gbWVzc2FnZV9pZHNbX3RdKyspOworCisgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG0pOworICB9CisKKyAgZm9yIChpID0gMDsgaSA8IE5VTV9USFJFQURTOyBpKyspCisgICAgZ19yZXR1cm5faWZfZmFpbCAobWVzc2FnZV9pZHNbaV0gPT0gTlVNX01FU1NBR0VTKTsKK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfaGFtbWVyX2J1cykKK3sKKyAgR1RocmVhZCAqdGhyZWFkc1tOVU1fVEhSRUFEU107CisgIGdpbnQgaTsKKworICB0ZXN0X2J1cyA9IGdzdF9idXNfbmV3ICgpOworCisgIGZvciAoaSA9IDA7IGkgPCBOVU1fVEhSRUFEUzsgaSsrKQorICAgIHRocmVhZHNbaV0gPSBnX3RocmVhZF9jcmVhdGUgKHBvdW5kX2J1c193aXRoX21lc3NhZ2VzLCBHSU5UX1RPX1BPSU5URVIgKGkpLAorICAgICAgICBUUlVFLCBOVUxMKTsKKworICBmb3IgKGkgPSAwOyBpIDwgTlVNX1RIUkVBRFM7IGkrKykKKyAgICBnX3RocmVhZF9qb2luICh0aHJlYWRzW2ldKTsKKworICBwdWxsX21lc3NhZ2VzICgpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKChHc3RPYmplY3QgKikgdGVzdF9idXMpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBnYm9vbGVhbgorbWVzc2FnZV9mdW5jX2VvcyAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbWVzc2FnZSwgZ3VpbnQgKiBwX2NvdW50ZXIpCit7CisgIGNvbnN0IEdzdFN0cnVjdHVyZSAqczsKKyAgZ2ludCBpOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9FT1MsIEZBTFNFKTsKKworICBHU1RfREVCVUcgKCJnb3QgRU9TIG1lc3NhZ2UiKTsKKworICBzID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZSAobWVzc2FnZSk7CisgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzLCAibXNnX2lkIiwgJmkpKQorICAgIGdfY3JpdGljYWwgKCJJbnZhbGlkIG1lc3NhZ2UiKTsKKworICBpZiAocF9jb3VudGVyICE9IE5VTEwpCisgICAgKnBfY291bnRlciArPSAxOworCisgIHJldHVybiBpICE9IDk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorbWVzc2FnZV9mdW5jX2FwcCAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbWVzc2FnZSwgZ3VpbnQgKiBwX2NvdW50ZXIpCit7CisgIGNvbnN0IEdzdFN0cnVjdHVyZSAqczsKKyAgZ2ludCBpOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9BUFBMSUNBVElPTiwKKyAgICAgIEZBTFNFKTsKKworICBHU1RfREVCVUcgKCJnb3QgQVBQIG1lc3NhZ2UiKTsKKworICBzID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZSAobWVzc2FnZSk7CisgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzLCAibXNnX2lkIiwgJmkpKQorICAgIGdfY3JpdGljYWwgKCJJbnZhbGlkIG1lc3NhZ2UiKTsKKworICBpZiAocF9jb3VudGVyICE9IE5VTEwpCisgICAgKnBfY291bnRlciArPSAxOworCisgIHJldHVybiBpICE9IDk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorc2VuZF9tZXNzYWdlcyAoZ3BvaW50ZXIgZGF0YSkKK3sKKyAgR3N0TWVzc2FnZSAqbTsKKyAgR3N0U3RydWN0dXJlICpzOworICBnaW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKyAgICBzID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJ0ZXN0X21lc3NhZ2UiLCAibXNnX2lkIiwgR19UWVBFX0lOVCwgaSwgTlVMTCk7CisgICAgbSA9IGdzdF9tZXNzYWdlX25ld19hcHBsaWNhdGlvbiAoTlVMTCwgcyk7CisgICAgZ3N0X2J1c19wb3N0ICh0ZXN0X2J1cywgbSk7CisgICAgcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgidGVzdF9tZXNzYWdlIiwgIm1zZ19pZCIsIEdfVFlQRV9JTlQsIGksIE5VTEwpOworICAgIG0gPSBnc3RfbWVzc2FnZV9uZXdfY3VzdG9tIChHU1RfTUVTU0FHRV9FT1MsIE5VTEwsIHMpOworICAgIGdzdF9idXNfcG9zdCAodGVzdF9idXMsIG0pOworICB9CisKKyAgcmV0dXJuIEZBTFNFOworfQorCisvKiB0ZXN0IGlmIGFkZGluZyBhIHNpZ25hbCB3YXRjaCBmb3IgZGlmZmVyZW50IG1lc3NhZ2UgdHlwZXMgY2FsbHMgdGhlCisgKiByZXNwZWN0aXZlIGNhbGxiYWNrcy4gKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X3dhdGNoKQoreworICBndWludCBudW1fZW9zID0gMDsKKyAgZ3VpbnQgbnVtX2FwcCA9IDA7CisgIGd1aW50IGlkOworCisgIHRlc3RfYnVzID0gZ3N0X2J1c19uZXcgKCk7CisKKyAgbWFpbl9sb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7CisKKyAgaWQgPSBnc3RfYnVzX2FkZF93YXRjaCAodGVzdF9idXMsIGdzdF9idXNfYXN5bmNfc2lnbmFsX2Z1bmMsIE5VTEwpOworICBmYWlsX2lmIChpZCA9PSAwKTsKKyAgZ19zaWduYWxfY29ubmVjdCAodGVzdF9idXMsICJtZXNzYWdlOjplb3MiLCAoR0NhbGxiYWNrKSBtZXNzYWdlX2Z1bmNfZW9zLAorICAgICAgJm51bV9lb3MpOworICBnX3NpZ25hbF9jb25uZWN0ICh0ZXN0X2J1cywgIm1lc3NhZ2U6OmFwcGxpY2F0aW9uIiwKKyAgICAgIChHQ2FsbGJhY2spIG1lc3NhZ2VfZnVuY19hcHAsICZudW1fYXBwKTsKKworICBnX2lkbGVfYWRkICgoR1NvdXJjZUZ1bmMpIHNlbmRfbWVzc2FnZXMsIE5VTEwpOworICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyAoTlVMTCkpCisgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uIChOVUxMLCBGQUxTRSk7CisKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobnVtX2VvcywgMTApOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChudW1fYXBwLCAxMCk7CisKKyAgZ19zb3VyY2VfcmVtb3ZlIChpZCk7CisgIGdfbWFpbl9sb29wX3VucmVmIChtYWluX2xvb3ApOworCisgIGdzdF9vYmplY3RfdW5yZWYgKChHc3RPYmplY3QgKikgdGVzdF9idXMpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIHRlc3QgaWYgYWRkaW5nIGEgc2lnbmFsIHdhdGNoIGZvciBkaWZmZXJlbnQgbWVzc2FnZSB0eXBlcyBjYWxscyB0aGUKKyAqIHJlc3BlY3RpdmUgY2FsbGJhY2tzLiAqLworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfd2F0Y2hfd2l0aF9jdXN0b21fY29udGV4dCkKK3sKKyAgR01haW5Db250ZXh0ICpjdHg7CisgIEdTb3VyY2UgKnNvdXJjZTsKKyAgZ3VpbnQgbnVtX2VvcyA9IDA7CisgIGd1aW50IG51bV9hcHAgPSAwOworICBndWludCBpZDsKKworICB0ZXN0X2J1cyA9IGdzdF9idXNfbmV3ICgpOworCisgIGN0eCA9IGdfbWFpbl9jb250ZXh0X25ldyAoKTsKKyAgbWFpbl9sb29wID0gZ19tYWluX2xvb3BfbmV3IChjdHgsIEZBTFNFKTsKKworICBzb3VyY2UgPSBnc3RfYnVzX2NyZWF0ZV93YXRjaCAodGVzdF9idXMpOworICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sgKHNvdXJjZSwgKEdTb3VyY2VGdW5jKSBnc3RfYnVzX2FzeW5jX3NpZ25hbF9mdW5jLCBOVUxMLAorICAgICAgTlVMTCk7CisgIGlkID0gZ19zb3VyY2VfYXR0YWNoIChzb3VyY2UsIGN0eCk7CisgIGdfc291cmNlX3VucmVmIChzb3VyY2UpOworICBmYWlsX2lmIChpZCA9PSAwKTsKKworICBnX3NpZ25hbF9jb25uZWN0ICh0ZXN0X2J1cywgIm1lc3NhZ2U6OmVvcyIsIChHQ2FsbGJhY2spIG1lc3NhZ2VfZnVuY19lb3MsCisgICAgICAmbnVtX2Vvcyk7CisgIGdfc2lnbmFsX2Nvbm5lY3QgKHRlc3RfYnVzLCAibWVzc2FnZTo6YXBwbGljYXRpb24iLAorICAgICAgKEdDYWxsYmFjaykgbWVzc2FnZV9mdW5jX2FwcCwgJm51bV9hcHApOworCisgIHNvdXJjZSA9IGdfaWRsZV9zb3VyY2VfbmV3ICgpOworICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sgKHNvdXJjZSwgKEdTb3VyY2VGdW5jKSBzZW5kX21lc3NhZ2VzLCBOVUxMLCBOVUxMKTsKKyAgZ19zb3VyY2VfYXR0YWNoIChzb3VyY2UsIGN0eCk7CisgIGdfc291cmNlX3VucmVmIChzb3VyY2UpOworCisgIHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5nIChjdHgpKQorICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbiAoY3R4LCBGQUxTRSk7CisKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobnVtX2VvcywgMTApOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChudW1fYXBwLCAxMCk7CisKKyAgZ19zb3VyY2VfcmVtb3ZlIChpZCk7CisgIGdfbWFpbl9sb29wX3VucmVmIChtYWluX2xvb3ApOworICBnX21haW5fY29udGV4dF91bnJlZiAoY3R4KTsKKworICBnc3Rfb2JqZWN0X3VucmVmICh0ZXN0X2J1cyk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogdGVzdCBpZiBhZGRpbmcgYSBzaWduYWwgd2F0Y2ggZm9yIGRpZmZlcmVudCBtZXNzYWdlIHR5cGVzIGNhbGxzIHRoZQorICogcmVzcGVjdGl2ZSBjYWxsYmFja3MuICovCitHU1RfU1RBUlRfVEVTVCAodGVzdF9hZGRfd2F0Y2hfd2l0aF9jdXN0b21fY29udGV4dCkKK3sKKyAgR01haW5Db250ZXh0ICpjdHg7CisgIEdTb3VyY2UgKnNvdXJjZTsKKyAgZ3VpbnQgbnVtX2VvcyA9IDA7CisgIGd1aW50IG51bV9hcHAgPSAwOworCisgIHRlc3RfYnVzID0gZ3N0X2J1c19uZXcgKCk7CisKKyAgY3R4ID0gZ19tYWluX2NvbnRleHRfbmV3ICgpOworICBtYWluX2xvb3AgPSBnX21haW5fbG9vcF9uZXcgKGN0eCwgRkFMU0UpOworCisgIGdfbWFpbl9jb250ZXh0X3B1c2hfdGhyZWFkX2RlZmF1bHQgKGN0eCk7CisgIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaCAodGVzdF9idXMpOworICBnX21haW5fY29udGV4dF9wb3BfdGhyZWFkX2RlZmF1bHQgKGN0eCk7CisKKyAgZ19zaWduYWxfY29ubmVjdCAodGVzdF9idXMsICJtZXNzYWdlOjplb3MiLCAoR0NhbGxiYWNrKSBtZXNzYWdlX2Z1bmNfZW9zLAorICAgICAgJm51bV9lb3MpOworICBnX3NpZ25hbF9jb25uZWN0ICh0ZXN0X2J1cywgIm1lc3NhZ2U6OmFwcGxpY2F0aW9uIiwKKyAgICAgIChHQ2FsbGJhY2spIG1lc3NhZ2VfZnVuY19hcHAsICZudW1fYXBwKTsKKworICBzb3VyY2UgPSBnX2lkbGVfc291cmNlX25ldyAoKTsKKyAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrIChzb3VyY2UsIChHU291cmNlRnVuYykgc2VuZF9tZXNzYWdlcywgTlVMTCwgTlVMTCk7CisgIGdfc291cmNlX2F0dGFjaCAoc291cmNlLCBjdHgpOworICBnX3NvdXJjZV91bnJlZiAoc291cmNlKTsKKworICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyAoY3R4KSkKKyAgICBnX21haW5fY29udGV4dF9pdGVyYXRpb24gKGN0eCwgRkFMU0UpOworCisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKG51bV9lb3MsIDEwKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobnVtX2FwcCwgMTApOworCisgIGdfbWFpbl9sb29wX3VucmVmIChtYWluX2xvb3ApOworICBnX21haW5fY29udGV4dF91bnJlZiAoY3R4KTsKKworICBnc3Rfb2JqZWN0X3VucmVmICh0ZXN0X2J1cyk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIGdpbnQgbWVzc2FnZXNfc2VlbjsKKworc3RhdGljIHZvaWQKK21lc3NhZ2VfZnVuYyAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfQVBQTElDQVRJT04pOworCisgIG1lc3NhZ2VzX3NlZW4rKzsKK30KKworc3RhdGljIHZvaWQKK3NlbmRfNWFwcF8xZWxfMWVycl8yYXBwX21lc3NhZ2VzIChndWludCBpbnRlcnZhbF91c2VjcykKK3sKKyAgR3N0TWVzc2FnZSAqbTsKKyAgR3N0U3RydWN0dXJlICpzOworICBnaW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworICAgIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoInRlc3RfbWVzc2FnZSIsICJtc2dfaWQiLCBHX1RZUEVfSU5ULCBpLCBOVUxMKTsKKyAgICBtID0gZ3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9uIChOVUxMLCBzKTsKKyAgICBHU1RfTE9HICgicG9zdGluZyBhcHBsaWNhdGlvbiBtZXNzYWdlIik7CisgICAgZ3N0X2J1c19wb3N0ICh0ZXN0X2J1cywgbSk7CisgICAgZ191c2xlZXAgKGludGVydmFsX3VzZWNzKTsKKyAgfQorICBmb3IgKGkgPSAwOyBpIDwgMTsgaSsrKSB7CisgICAgcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgidGVzdF9tZXNzYWdlIiwgIm1zZ19pZCIsIEdfVFlQRV9JTlQsIGksIE5VTEwpOworICAgIG0gPSBnc3RfbWVzc2FnZV9uZXdfZWxlbWVudCAoTlVMTCwgcyk7CisgICAgR1NUX0xPRyAoInBvc3RpbmcgZWxlbWVudCBtZXNzYWdlIik7CisgICAgZ3N0X2J1c19wb3N0ICh0ZXN0X2J1cywgbSk7CisgICAgZ191c2xlZXAgKGludGVydmFsX3VzZWNzKTsKKyAgfQorICBmb3IgKGkgPSAwOyBpIDwgMTsgaSsrKSB7CisgICAgbSA9IGdzdF9tZXNzYWdlX25ld19lcnJvciAoTlVMTCwgTlVMTCwgImRlYnVnIHN0cmluZyIpOworICAgIEdTVF9MT0cgKCJwb3N0aW5nIGVycm9yIG1lc3NhZ2UiKTsKKyAgICBnc3RfYnVzX3Bvc3QgKHRlc3RfYnVzLCBtKTsKKyAgICBnX3VzbGVlcCAoaW50ZXJ2YWxfdXNlY3MpOworICB9CisgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKyAgICBzID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJ0ZXN0X21lc3NhZ2UiLCAibXNnX2lkIiwgR19UWVBFX0lOVCwgaSwgTlVMTCk7CisgICAgbSA9IGdzdF9tZXNzYWdlX25ld19hcHBsaWNhdGlvbiAoTlVMTCwgcyk7CisgICAgR1NUX0xPRyAoInBvc3RpbmcgYXBwbGljYXRpb24gbWVzc2FnZSIpOworICAgIGdzdF9idXNfcG9zdCAodGVzdF9idXMsIG0pOworICAgIGdfdXNsZWVwIChpbnRlcnZhbF91c2Vjcyk7CisgIH0KK30KKworc3RhdGljIHZvaWQKK3NlbmRfMTBfYXBwX21lc3NhZ2VzICh2b2lkKQoreworICBHc3RNZXNzYWdlICptOworICBHc3RTdHJ1Y3R1cmUgKnM7CisgIGdpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworICAgIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoInRlc3RfbWVzc2FnZSIsICJtc2dfaWQiLCBHX1RZUEVfSU5ULCBpLCBOVUxMKTsKKyAgICBtID0gZ3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9uIChOVUxMLCBzKTsKKyAgICBnc3RfYnVzX3Bvc3QgKHRlc3RfYnVzLCBtKTsKKyAgfQorfQorCisvKiB0ZXN0IHRoYXQgeW91IGdldCB0aGUgc2FtZSBtZXNzYWdlcyBmcm9tIGEgcG9sbCBhcyBmcm9tIHNpZ25hbCB3YXRjaGVzLiAqLworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfd2F0Y2hfd2l0aF9wb2xsKQoreworICBndWludCBpOworCisgIHRlc3RfYnVzID0gZ3N0X2J1c19uZXcgKCk7CisgIG1lc3NhZ2VzX3NlZW4gPSAwOworCisgIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaCAodGVzdF9idXMpOworICBnX3NpZ25hbF9jb25uZWN0ICh0ZXN0X2J1cywgIm1lc3NhZ2UiLCAoR0NhbGxiYWNrKSBtZXNzYWdlX2Z1bmMsIE5VTEwpOworCisgIHNlbmRfMTBfYXBwX21lc3NhZ2VzICgpOworCisgIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQorICAgIGdzdF9tZXNzYWdlX3VucmVmIChnc3RfYnVzX3BvbGwgKHRlc3RfYnVzLCBHU1RfTUVTU0FHRV9BUFBMSUNBVElPTiwKKyAgICAgICAgICAgIEdTVF9DTE9DS19USU1FX05PTkUpKTsKKworICBmYWlsX2lmIChnc3RfYnVzX2hhdmVfcGVuZGluZyAodGVzdF9idXMpLCAidW5leHBlY3RlZCBtZXNzYWdlcyBvbiBidXMiKTsKKyAgZmFpbF91bmxlc3MgKG1lc3NhZ2VzX3NlZW4gPT0gMTAsICJzaWduYWwgaGFuZGxlciBkaWRuJ3QgZ2V0IDEwIG1lc3NhZ2VzIik7CisKKyAgZ3N0X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNoICh0ZXN0X2J1cyk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAodGVzdF9idXMpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIHRlc3QgdGhhdCB5b3UgZ2V0IHRoZSBtZXNzYWdlcyB3aXRoIHBvcC4gKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X3RpbWVkX3BvcCkKK3sKKyAgZ3VpbnQgaTsKKworICB0ZXN0X2J1cyA9IGdzdF9idXNfbmV3ICgpOworCisgIHNlbmRfMTBfYXBwX21lc3NhZ2VzICgpOworCisgIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQorICAgIGdzdF9tZXNzYWdlX3VucmVmIChnc3RfYnVzX3RpbWVkX3BvcCAodGVzdF9idXMsIEdTVF9DTE9DS19USU1FX05PTkUpKTsKKworICBmYWlsX2lmIChnc3RfYnVzX2hhdmVfcGVuZGluZyAodGVzdF9idXMpLCAidW5leHBlY3RlZCBtZXNzYWdlcyBvbiBidXMiKTsKKworICBnc3Rfb2JqZWN0X3VucmVmICh0ZXN0X2J1cyk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogdGVzdCB0aGF0IHlvdSBnZXQgdGhlIG1lc3NhZ2VzIHdpdGggcG9wX2ZpbHRlcmVkICovCitHU1RfU1RBUlRfVEVTVCAodGVzdF90aW1lZF9wb3BfZmlsdGVyZWQpCit7CisgIEdzdE1lc3NhZ2UgKm1zZzsKKyAgZ3VpbnQgaTsKKworICB0ZXN0X2J1cyA9IGdzdF9idXNfbmV3ICgpOworCisgIHNlbmRfMTBfYXBwX21lc3NhZ2VzICgpOworICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworICAgIG1zZyA9IGdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkICh0ZXN0X2J1cywgR1NUX0NMT0NLX1RJTUVfTk9ORSwKKyAgICAgICAgR1NUX01FU1NBR0VfQU5ZKTsKKyAgICBmYWlsX3VubGVzcyAobXNnICE9IE5VTEwpOworICAgIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOworICB9CisKKyAgLyogc2hvdWxkIGZsdXNoIGFsbCBtZXNzYWdlcyBvbiB0aGUgYnVzIHdpdGggdHlwZXMgbm90IG1hdGNoaW5nICovCisgIHNlbmRfMTBfYXBwX21lc3NhZ2VzICgpOworICBtc2cgPSBnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZCAodGVzdF9idXMsIDAsCisgICAgICBHU1RfTUVTU0FHRV9BTlkgXiBHU1RfTUVTU0FHRV9BUFBMSUNBVElPTik7CisgIGZhaWxfdW5sZXNzIChtc2cgPT0gTlVMTCk7CisgIG1zZyA9IGdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkICh0ZXN0X2J1cywgR1NUX1NFQ09ORCAvIDIsCisgICAgICBHU1RfTUVTU0FHRV9BTlkgXiBHU1RfTUVTU0FHRV9BUFBMSUNBVElPTik7CisgIGZhaWxfdW5sZXNzIChtc2cgPT0gTlVMTCk7CisgIC8qIHRoZXJlIHNob3VsZCBiZSBub3RoaW5nIG9uIHRoZSBidXMgbm93ICovCisgIGZhaWxfaWYgKGdzdF9idXNfaGF2ZV9wZW5kaW5nICh0ZXN0X2J1cyksICJ1bmV4cGVjdGVkIG1lc3NhZ2VzIG9uIGJ1cyIpOworICBtc2cgPSBnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZCAodGVzdF9idXMsIDAsIEdTVF9NRVNTQUdFX0FOWSk7CisgIGZhaWxfdW5sZXNzIChtc2cgPT0gTlVMTCk7CisKKyAgc2VuZF81YXBwXzFlbF8xZXJyXzJhcHBfbWVzc2FnZXMgKDApOworICBtc2cgPSBnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZCAodGVzdF9idXMsIDAsCisgICAgICBHU1RfTUVTU0FHRV9BTlkgXiBHU1RfTUVTU0FHRV9BUFBMSUNBVElPTik7CisgIGZhaWxfdW5sZXNzIChtc2cgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZyksIEdTVF9NRVNTQUdFX0VMRU1FTlQpOworICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idXNfaGF2ZV9wZW5kaW5nICh0ZXN0X2J1cyksICJleHBlY3RlZCBtZXNzYWdlcyBvbiBidXMiKTsKKyAgbXNnID0gZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQgKHRlc3RfYnVzLCAwLCBHU1RfTUVTU0FHRV9BUFBMSUNBVElPTik7CisgIGZhaWxfdW5sZXNzIChtc2cgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZyksIEdTVF9NRVNTQUdFX0FQUExJQ0FUSU9OKTsKKyAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7CisgIG1zZyA9IGdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkICh0ZXN0X2J1cywgMCwgR1NUX01FU1NBR0VfRVJST1IpOworICBmYWlsX3VubGVzcyAobXNnID09IE5VTEwpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHRlc3RfYnVzKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgZ3BvaW50ZXIKK3Bvc3RfZGVsYXllZF90aHJlYWQgKGdwb2ludGVyIGRhdGEpCit7CisgIFRIUkVBRF9TVEFSVCAoKTsKKyAgc2VuZF81YXBwXzFlbF8xZXJyXzJhcHBfbWVzc2FnZXMgKDEgKiBHX1VTRUNfUEVSX1NFQyk7CisgIHJldHVybiBOVUxMOworfQorCisvKiB0ZXN0IHRoYXQgeW91IGdldCB0aGUgbWVzc2FnZXMgd2l0aCBwb3BfZmlsdGVyZWQgaWYgdGhlcmUncyBhIHRpbWVvdXQqLworR1NUX1NUQVJUX1RFU1QgKHRlc3RfdGltZWRfcG9wX2ZpbHRlcmVkX3dpdGhfdGltZW91dCkKK3sKKyAgR3N0TWVzc2FnZSAqbXNnOworCisgIE1BSU5fSU5JVCAoKTsKKworICB0ZXN0X2J1cyA9IGdzdF9idXNfbmV3ICgpOworCisgIE1BSU5fU1RBUlRfVEhSRUFEX0ZVTkNUSU9OUyAoMSwgcG9zdF9kZWxheWVkX3RocmVhZCwgTlVMTCk7CisKKyAgTUFJTl9TWU5DSFJPTklaRSAoKTsKKworICBtc2cgPSBnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZCAodGVzdF9idXMsIDIgKiBHU1RfU0VDT05ELAorICAgICAgR1NUX01FU1NBR0VfRVJST1IpOworICBmYWlsX3VubGVzcyAobXNnID09IE5VTEwsICJHb3QgdW5leHBlY3RlZCAlcyBtZXNzYWdlIiwKKyAgICAgIChtc2cpID8gR1NUX01FU1NBR0VfVFlQRV9OQU1FIChtc2cpIDogIiIpOworICBtc2cgPSBnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZCAodGVzdF9idXMsICgzICsgMSArIDEgKyAxKSAqIEdTVF9TRUNPTkQsCisgICAgICBHU1RfTUVTU0FHRV9FUlJPUiB8IEdTVF9NRVNTQUdFX0VMRU1FTlQpOworICBmYWlsX3VubGVzcyAobXNnICE9IE5VTEwsICJleHBlY3RlZCBlbGVtZW50IG1lc3NhZ2UsIGJ1dCBnb3Qgbm90aGluZyIpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfTUVTU0FHRV9UWVBFIChtc2cpLCBHU1RfTUVTU0FHRV9FTEVNRU5UKTsKKyAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7CisgIG1zZyA9IGdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkICh0ZXN0X2J1cywgR1NUX0NMT0NLX1RJTUVfTk9ORSwKKyAgICAgIEdTVF9NRVNTQUdFX0FQUExJQ0FUSU9OKTsKKyAgZmFpbF91bmxlc3MgKG1zZyAhPSBOVUxMLCAiZXhwZWN0ZWQgYXBwbGljYXRpb24gbWVzc2FnZSwgYnV0IGdvdCBub3RoaW5nIik7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZyksIEdTVF9NRVNTQUdFX0FQUExJQ0FUSU9OKTsKKyAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7CisgIG1zZyA9IGdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkICh0ZXN0X2J1cywgR1NUX0NMT0NLX1RJTUVfTk9ORSwKKyAgICAgIEdTVF9NRVNTQUdFX0FQUExJQ0FUSU9OKTsKKyAgZmFpbF91bmxlc3MgKG1zZyAhPSBOVUxMLCAiZXhwZWN0ZWQgYXBwbGljYXRpb24gbWVzc2FnZSwgYnV0IGdvdCBub3RoaW5nIik7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZyksIEdTVF9NRVNTQUdFX0FQUExJQ0FUSU9OKTsKKyAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7CisgIG1zZyA9IGdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkICh0ZXN0X2J1cywgR1NUX1NFQ09ORCAvIDQsCisgICAgICBHU1RfTUVTU0FHRV9UQUcgfCBHU1RfTUVTU0FHRV9FUlJPUik7CisgIGZhaWxfdW5sZXNzIChtc2cgPT0gTlVMTCwgIkdvdCB1bmV4cGVjdGVkICVzIG1lc3NhZ2UiLAorICAgICAgKG1zZykgPyBHU1RfTUVTU0FHRV9UWVBFX05BTUUgKG1zZykgOiAiIik7CisKKyAgTUFJTl9TVE9QX1RIUkVBRFMgKCk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAodGVzdF9idXMpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIHRlc3QgdGhhdCB5b3UgZ2V0IHRoZSBtZXNzYWdlcyB3aXRoIHBvcCBmcm9tIGFub3RoZXIgdGhyZWFkLiAqLworc3RhdGljIGdwb2ludGVyCitwb3BfdGhyZWFkIChncG9pbnRlciBkYXRhKQoreworICBHc3RCdXMgKmJ1cyA9IEdTVF9CVVNfQ0FTVCAoZGF0YSk7CisgIGd1aW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCisgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKGdzdF9idXNfdGltZWRfcG9wIChidXMsIEdTVF9DTE9DS19USU1FX05PTkUpKTsKKworICByZXR1cm4gTlVMTDsKK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfdGltZWRfcG9wX3RocmVhZCkKK3sKKyAgR1RocmVhZCAqdGhyZWFkOworICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKworICB0ZXN0X2J1cyA9IGdzdF9idXNfbmV3ICgpOworCisgIHRocmVhZCA9IGdfdGhyZWFkX2NyZWF0ZSAocG9wX3RocmVhZCwgdGVzdF9idXMsIFRSVUUsICZlcnJvcik7CisgIGZhaWxfaWYgKGVycm9yICE9IE5VTEwpOworCisgIHNlbmRfMTBfYXBwX21lc3NhZ2VzICgpOworCisgIGdfdGhyZWFkX2pvaW4gKHRocmVhZCk7CisKKyAgZmFpbF9pZiAoZ3N0X2J1c19oYXZlX3BlbmRpbmcgKHRlc3RfYnVzKSwgInVuZXhwZWN0ZWQgbWVzc2FnZXMgb24gYnVzIik7CisKKyAgLyogdHJ5IHRvIHBvcCBhIG1lc3NhZ2Ugd2l0aG91dCB0aW1lb3V0LiAqLworICBmYWlsX2lmIChnc3RfYnVzX3RpbWVkX3BvcCAodGVzdF9idXMsIDApICE9IE5VTEwpOworCisgIC8qIHdpdGggYSBzbWFsbCB0aW1lb3V0ICovCisgIGZhaWxfaWYgKGdzdF9idXNfdGltZWRfcG9wICh0ZXN0X2J1cywgMTAwMCkgIT0gTlVMTCk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAodGVzdF9idXMpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBnYm9vbGVhbgorY2JfYnVzX2NhbGwgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1zZywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgR01haW5Mb29wICpsb29wID0gZGF0YTsKKworICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykpIHsKKyAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKKyAgICB7CisgICAgICBHU1RfSU5GTyAoIkVuZC1vZi1zdHJlYW0iKTsKKyAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6CisgICAgeworICAgICAgR0Vycm9yICplcnIgPSBOVUxMOworCisgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobXNnLCAmZXJyLCBOVUxMKTsKKyAgICAgIGdfZXJyb3IgKCJFcnJvcjogJXMiLCBlcnItPm1lc3NhZ2UpOworICAgICAgZ19lcnJvcl9mcmVlIChlcnIpOworCisgICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgIHsKKyAgICAgIEdTVF9MT0cgKCJCVVMgTUVTU0FHRTogdHlwZT0lcyIsIEdTVF9NRVNTQUdFX1RZUEVfTkFNRSAobXNnKSk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICByZXR1cm4gVFJVRTsKK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfY3VzdG9tX21haW5fY29udGV4dCkKK3sKKyAgR01haW5Db250ZXh0ICpjdHg7CisgIEdNYWluTG9vcCAqbG9vcDsKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmU7CisgIEdzdEVsZW1lbnQgKnNyYzsKKyAgR3N0RWxlbWVudCAqc2luazsKKyAgR1NvdXJjZSAqc291cmNlOworICBHc3RCdXMgKmJ1czsKKworICBjdHggPSBnX21haW5fY29udGV4dF9uZXcgKCk7CisgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKGN0eCwgRkFMU0UpOworCisgIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoTlVMTCk7CisgIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKKyAgZ19vYmplY3Rfc2V0IChzcmMsICJudW0tYnVmZmVycyIsIDIwMDAsIE5VTEwpOworCisgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOworCisgIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMpKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNpbmspKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKHNyYywgc2luaykpOworCisgIGJ1cyA9IGdzdF9waXBlbGluZV9nZXRfYnVzIChHU1RfUElQRUxJTkUgKHBpcGVsaW5lKSk7CisgIHNvdXJjZSA9IGdzdF9idXNfY3JlYXRlX3dhdGNoIChidXMpOworICBnX3NvdXJjZV9hdHRhY2ggKHNvdXJjZSwgY3R4KTsKKyAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrIChzb3VyY2UsIChHU291cmNlRnVuYykgY2JfYnVzX2NhbGwsIGxvb3AsIE5VTEwpOworICBnX3NvdXJjZV91bnJlZiAoc291cmNlKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKKworICBHU1RfSU5GTyAoInN0YXJ0aW5nIHBpcGVsaW5lIik7CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOworICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKworICBHU1RfSU5GTyAoInJ1bm5pbmcgZXZlbnQgbG9vcCwgY3R4PSVwIiwgY3R4KTsKKyAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKKworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7CisKKyAgLyogY2xlYW4gdXAgKi8KKyAgaWYgKGN0eCkKKyAgICBnX21haW5fY29udGV4dF91bnJlZiAoY3R4KTsKKyAgZ19tYWluX2xvb3BfdW5yZWYgKGxvb3ApOworICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIFN1aXRlICoKK2dzdF9idXNfc3VpdGUgKHZvaWQpCit7CisgIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0QnVzIik7CisgIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoInN0cmVzc3Rlc3QiKTsKKworICB0Y2FzZV9zZXRfdGltZW91dCAodGNfY2hhaW4sIDIwKTsKKworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2hhbW1lcl9idXMpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfd2F0Y2gpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfd2F0Y2hfd2l0aF9wb2xsKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3dhdGNoX3dpdGhfY3VzdG9tX2NvbnRleHQpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYWRkX3dhdGNoX3dpdGhfY3VzdG9tX2NvbnRleHQpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdGltZWRfcG9wKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3RpbWVkX3BvcF90aHJlYWQpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdGltZWRfcG9wX2ZpbHRlcmVkKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3RpbWVkX3BvcF9maWx0ZXJlZF93aXRoX3RpbWVvdXQpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfY3VzdG9tX21haW5fY29udGV4dCk7CisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoZ3N0X2J1cyk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWFmOTdlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYwpAQCAtMCwwICsxLDkzNyBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorICogQ29weXJpZ2h0IChDKSA8MjAwNT4gVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorICoKKyAqIGdzdGNhcHMuYzogVW5pdCB0ZXN0IGZvciBHc3RDYXBzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworCisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisjaW5jbHVkZSA8Z3N0L2dzdGNhcHMuaD4KKyNpbmNsdWRlICJjYXBzbGlzdC5oIgorCitHU1RfU1RBUlRfVEVTVCAodGVzdF9mcm9tX3N0cmluZykKK3sKKyAgR3N0Q2FwcyAqY2FwczsKKyAgR3N0Q2FwcyAqY2FwczI7CisgIGdjaGFyICp0b19zdHI7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKGNhcHNfbGlzdCk7IGkrKykgeworICAgIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoY2Fwc19saXN0W2ldKTsKKyAgICBmYWlsX2lmIChjYXBzID09IE5VTEwsCisgICAgICAgICJDb3VsZCBub3QgY3JlYXRlIGNhcHMgZnJvbSBzdHJpbmcgJXNcbiIsIGNhcHNfbGlzdFtpXSk7CisgICAgdG9fc3RyID0gZ3N0X2NhcHNfdG9fc3RyaW5nIChjYXBzKTsKKyAgICBmYWlsX2lmICh0b19zdHIgPT0gTlVMTCwKKyAgICAgICAgIkNvdWxkIG5vdCBjb252ZXJ0IGNhcHMgYmFjayB0byBzdHJpbmcgJXNcbiIsIGNhcHNfbGlzdFtpXSk7CisgICAgY2FwczIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoY2Fwc19saXN0W2ldKTsKKyAgICBmYWlsX2lmIChjYXBzMiA9PSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBjYXBzIGZyb20gc3RyaW5nICVzXG4iLCB0b19zdHIpOworCisgICAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChjYXBzLCBjYXBzKSk7CisgICAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChjYXBzLCBjYXBzMikpOworCisgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOworICAgIGdzdF9jYXBzX3VucmVmIChjYXBzMik7CisgICAgZ19mcmVlICh0b19zdHIpOworICB9Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfZG91YmxlX2FwcGVuZCkKK3sKKyAgR3N0U3RydWN0dXJlICpzMTsKKyAgR3N0Q2FwcyAqYzE7CisKKyAgYzEgPSBnc3RfY2Fwc19uZXdfYW55ICgpOworICBzMSA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxyYXRlPTQ0MTAwIiwgTlVMTCk7CisgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUgKGMxLCBzMSk7CisgIEFTU0VSVF9DUklUSUNBTCAoZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZSAoYzEsIHMxKSk7CisKKyAgZ3N0X2NhcHNfdW5yZWYgKGMxKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9tdXRhYmlsaXR5KQoreworICBHc3RTdHJ1Y3R1cmUgKnMxOworICBHc3RDYXBzICpjMTsKKyAgZ2ludCByZXQ7CisKKyAgYzEgPSBnc3RfY2Fwc19uZXdfYW55ICgpOworICBzMSA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxyYXRlPTQ0MTAwIiwgTlVMTCk7CisgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzMSwgInJhdGUiLCBHX1RZUEVfSU5ULCA0ODAwMCwgTlVMTCk7CisgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUgKGMxLCBzMSk7CisgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzMSwgInJhdGUiLCBHX1RZUEVfSU5ULCAyMjUwMCwgTlVMTCk7CisgIGdzdF9jYXBzX3JlZiAoYzEpOworICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9zdHJ1Y3R1cmVfc2V0IChzMSwgInJhdGUiLCBHX1RZUEVfSU5ULCAxMTI1MCwgTlVMTCkpOworICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzMSwgInJhdGUiLCAmcmV0KSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gMjI1MDApOworICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9jYXBzX3NldF9zaW1wbGUgKGMxLCAicmF0ZSIsIEdfVFlQRV9JTlQsIDExMjUwLCBOVUxMKSk7CisgIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMxLCAicmF0ZSIsICZyZXQpKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSAyMjUwMCk7CisgIGdzdF9jYXBzX3VucmVmIChjMSk7CisgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzMSwgInJhdGUiLCBHX1RZUEVfSU5ULCAxMTI1MCwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMxLCAicmF0ZSIsICZyZXQpKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSAxMTI1MCk7CisgIGdzdF9jYXBzX3NldF9zaW1wbGUgKGMxLCAicmF0ZSIsIEdfVFlQRV9JTlQsIDEsIE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzMSwgInJhdGUiLCAmcmV0KSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gMSk7CisgIGdzdF9jYXBzX3VucmVmIChjMSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3RhdGljX2NhcHMpCit7CisgIHN0YXRpYyBHc3RTdGF0aWNDYXBzIHNjYXBzID0gR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcscmF0ZT00NDEwMCIpOworICBHc3RDYXBzICpjYXBzMTsKKyAgR3N0Q2FwcyAqY2FwczI7CisKKyAgLyogY2FwcyBjcmVhdGlvbiAqLworICBjYXBzMSA9IGdzdF9zdGF0aWNfY2Fwc19nZXQgKCZzY2Fwcyk7CisgIGZhaWxfdW5sZXNzIChjYXBzMSAhPSBOVUxMKTsKKyAgLyogMSByZWZjb3VudCBjb3JlLCBvbmUgZnJvbSB1cyAqLworICBmYWlsX3VubGVzcyAoR1NUX0NBUFNfUkVGQ09VTlQgKGNhcHMxKSA9PSAyKTsKKworICAvKiBjYXBzIHNob3VsZCBiZSB0aGUgc2FtZSAqLworICBjYXBzMiA9IGdzdF9zdGF0aWNfY2Fwc19nZXQgKCZzY2Fwcyk7CisgIGZhaWxfdW5sZXNzIChjYXBzMiAhPSBOVUxMKTsKKyAgLyogMSByZWZjb3VudCBjb3JlLCB0d28gZnJvbSB1cyAqLworICBmYWlsX3VubGVzcyAoR1NUX0NBUFNfUkVGQ09VTlQgKGNhcHMxKSA9PSAzKTsKKyAgLyogY2FwcyBtdXN0IGJlIGVxdWFsICovCisgIGZhaWxfdW5sZXNzIChjYXBzMSA9PSBjYXBzMik7CisKKyAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMxKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMyKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgY29uc3QgZ2NoYXIgbm9uX3NpbXBsZV9jYXBzX3N0cmluZ1tdID0KKyAgICAidmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKUk0MjAsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAxLzEwMCwgMTAwIF0sICIKKyAgICAid2lkdGg9KGludClbIDE2LCA0MDk2IF0sIGhlaWdodD0oaW50KVsgMTYsIDQwOTYgXTsgdmlkZW8veC1yYXcsICIKKyAgICAiZm9ybWF0PShzdHJpbmcpWVVZMiwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDEvMTAwLCAxMDAgXSwgd2lkdGg9KGludClbIDE2LCA0MDk2IF0sICIKKyAgICAiaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdOyB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpUkdCOF9QQUxFVFRFRCwgIgorICAgICJmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMS8xMDAsIDEwMCBdLCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgIgorICAgICJoZWlnaHQ9KGludClbIDE2LCA0MDk2IF07IHZpZGVvL3gtcmF3LCAiCisgICAgImZvcm1hdD0oc3RyaW5nKXsgSTQyMCwgWVVZMiwgWVYxMiB9LCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgIgorICAgICJoZWlnaHQ9KGludClbIDE2LCA0MDk2IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAxLzEwMCwgMTAwIF0iOworCitzdGF0aWMgZ2Jvb2xlYW4KK2NoZWNrX3N0cmluZ19saXN0IChjb25zdCBHVmFsdWUgKiBmb3JtYXRfdmFsdWUpCit7CisgIGNvbnN0IEdWYWx1ZSAqc3RyaW5nX3ZhbHVlOworICBnYm9vbGVhbiBnb3RfcmdiOCA9IEZBTFNFOworICBnYm9vbGVhbiBnb3RfeXYxMiA9IEZBTFNFOworICBnYm9vbGVhbiBnb3RfaTQyMCA9IEZBTFNFOworICBnYm9vbGVhbiBnb3RfeXV5MiA9IEZBTFNFOworICBjb25zdCBnY2hhciAqc3RyaW5nOworCisgIHN0cmluZ192YWx1ZSA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoZm9ybWF0X3ZhbHVlLCAwKTsKKyAgZmFpbF91bmxlc3MgKHN0cmluZ192YWx1ZSAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKEdfVkFMVUVfSE9MRFNfU1RSSU5HIChzdHJpbmdfdmFsdWUpKTsKKyAgc3RyaW5nID0gZ192YWx1ZV9nZXRfc3RyaW5nIChzdHJpbmdfdmFsdWUpOworICBmYWlsX3VubGVzcyAoc3RyaW5nICE9IE5VTEwpOworICBnb3RfcmdiOCA9IGdvdF9yZ2I4IHx8IChnX3N0cl9lcXVhbCAoc3RyaW5nLCAiUkdCOF9QQUxFVFRFRCIpKTsKKyAgZ290X2k0MjAgPSBnb3RfaTQyMCB8fCAoZ19zdHJfZXF1YWwgKHN0cmluZywgIkk0MjAiKSk7CisgIGdvdF95dXkyID0gZ290X3l1eTIgfHwgKGdfc3RyX2VxdWFsIChzdHJpbmcsICJZVVkyIikpOworICBnb3RfeXYxMiA9IGdvdF95djEyIHx8IChnX3N0cl9lcXVhbCAoc3RyaW5nLCAiWVYxMiIpKTsKKworICBzdHJpbmdfdmFsdWUgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKGZvcm1hdF92YWx1ZSwgMSk7CisgIGZhaWxfdW5sZXNzIChzdHJpbmdfdmFsdWUgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChHX1ZBTFVFX0hPTERTX1NUUklORyAoc3RyaW5nX3ZhbHVlKSk7CisgIHN0cmluZyA9IGdfdmFsdWVfZ2V0X3N0cmluZyAoc3RyaW5nX3ZhbHVlKTsKKyAgZmFpbF91bmxlc3MgKHN0cmluZyAhPSBOVUxMKTsKKyAgZ290X3JnYjggPSBnb3RfcmdiOCB8fCAoZ19zdHJfZXF1YWwgKHN0cmluZywgIlJHQjhfUEFMRVRURUQiKSk7CisgIGdvdF9pNDIwID0gZ290X2k0MjAgfHwgKGdfc3RyX2VxdWFsIChzdHJpbmcsICJJNDIwIikpOworICBnb3RfeXV5MiA9IGdvdF95dXkyIHx8IChnX3N0cl9lcXVhbCAoc3RyaW5nLCAiWVVZMiIpKTsKKyAgZ290X3l2MTIgPSBnb3RfeXYxMiB8fCAoZ19zdHJfZXF1YWwgKHN0cmluZywgIllWMTIiKSk7CisKKyAgc3RyaW5nX3ZhbHVlID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlIChmb3JtYXRfdmFsdWUsIDIpOworICBmYWlsX3VubGVzcyAoc3RyaW5nX3ZhbHVlICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoR19WQUxVRV9IT0xEU19TVFJJTkcgKHN0cmluZ192YWx1ZSkpOworICBzdHJpbmcgPSBnX3ZhbHVlX2dldF9zdHJpbmcgKHN0cmluZ192YWx1ZSk7CisgIGZhaWxfdW5sZXNzIChzdHJpbmcgIT0gTlVMTCk7CisgIGdvdF9yZ2I4ID0gZ290X3JnYjggfHwgKGdfc3RyX2VxdWFsIChzdHJpbmcsICJSR0I4X1BBTEVUVEVEIikpOworICBnb3RfaTQyMCA9IGdvdF9pNDIwIHx8IChnX3N0cl9lcXVhbCAoc3RyaW5nLCAiSTQyMCIpKTsKKyAgZ290X3l1eTIgPSBnb3RfeXV5MiB8fCAoZ19zdHJfZXF1YWwgKHN0cmluZywgIllVWTIiKSk7CisgIGdvdF95djEyID0gZ290X3l2MTIgfHwgKGdfc3RyX2VxdWFsIChzdHJpbmcsICJZVjEyIikpOworCisgIHN0cmluZ192YWx1ZSA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoZm9ybWF0X3ZhbHVlLCAzKTsKKyAgZmFpbF91bmxlc3MgKHN0cmluZ192YWx1ZSAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKEdfVkFMVUVfSE9MRFNfU1RSSU5HIChzdHJpbmdfdmFsdWUpKTsKKyAgc3RyaW5nID0gZ192YWx1ZV9nZXRfc3RyaW5nIChzdHJpbmdfdmFsdWUpOworICBmYWlsX3VubGVzcyAoc3RyaW5nICE9IE5VTEwpOworICBnb3RfcmdiOCA9IGdvdF9yZ2I4IHx8IChnX3N0cl9lcXVhbCAoc3RyaW5nLCAiUkdCOF9QQUxFVFRFRCIpKTsKKyAgZ290X2k0MjAgPSBnb3RfaTQyMCB8fCAoZ19zdHJfZXF1YWwgKHN0cmluZywgIkk0MjAiKSk7CisgIGdvdF95dXkyID0gZ290X3l1eTIgfHwgKGdfc3RyX2VxdWFsIChzdHJpbmcsICJZVVkyIikpOworICBnb3RfeXYxMiA9IGdvdF95djEyIHx8IChnX3N0cl9lcXVhbCAoc3RyaW5nLCAiWVYxMiIpKTsKKworICByZXR1cm4gKGdvdF9yZ2I4ICYmIGdvdF9pNDIwICYmIGdvdF95dXkyICYmIGdvdF95djEyKTsKK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc2ltcGxpZnkpCit7CisgIEdzdFN0cnVjdHVyZSAqczE7CisgIGdib29sZWFuIGRpZF9zaW1wbGlmeTsKKyAgR3N0Q2FwcyAqY2FwczsKKworICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKG5vbl9zaW1wbGVfY2Fwc19zdHJpbmcpOworICBmYWlsX3VubGVzcyAoY2FwcyAhPSBOVUxMLAorICAgICAgImdzdF9jYXBzX2Zyb21fc3RyaW5nIChub25fc2ltcGxlX2NhcHNfc3RyaW5nKSBmYWlsZWQiKTsKKworICBkaWRfc2ltcGxpZnkgPSBnc3RfY2Fwc19kb19zaW1wbGlmeSAoY2Fwcyk7CisgIGZhaWxfdW5sZXNzIChkaWRfc2ltcGxpZnkgPT0gVFJVRSwKKyAgICAgICJnc3RfY2Fwc19kb19zaW1wbGlmeSgpIHNob3VsZCBoYXZlIHdvcmtlZCIpOworCisgIC8qIGNoZWNrIHNpbXBsaWZpZWQgY2Fwcywgc2hvdWxkIGJlOgorICAgKgorICAgKiB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBSR0I4X1BBTEVUVEVELCBZVjEyLCBZVVkyLCBJNDIwIH0sCisgICAqICAgICB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdLAorICAgKiAgICAgZnJhbWVyYXRlPShmcmFjdGlvbilbIDEvMTAwLCAxMDAgXQorICAgKi8KKyAgR1NUX0RFQlVHICgic2ltcGx5ZmllZCAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19nZXRfc2l6ZSAoY2FwcykgPT0gMSk7CisgIHMxID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7CisgIGZhaWxfdW5sZXNzIChzMSAhPSBOVUxMKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAoczEsICJ2aWRlby94LXJhdyIpKTsKKyAgeworICAgIGNvbnN0IEdWYWx1ZSAqZnJhbWVyYXRlX3ZhbHVlOworICAgIGNvbnN0IEdWYWx1ZSAqZm9ybWF0X3ZhbHVlOworICAgIGNvbnN0IEdWYWx1ZSAqd2lkdGhfdmFsdWU7CisgICAgY29uc3QgR1ZhbHVlICpoZWlnaHRfdmFsdWU7CisgICAgY29uc3QgR1ZhbHVlICp2YWxfZnBzOworICAgIEdWYWx1ZSB0ZXN0X2ZwcyA9IHsgMCwgfTsKKyAgICBnaW50IG1pbl93aWR0aCwgbWF4X3dpZHRoOworICAgIGdpbnQgbWluX2hlaWdodCwgbWF4X2hlaWdodDsKKworICAgIGZvcm1hdF92YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzMSwgImZvcm1hdCIpOworICAgIGZhaWxfdW5sZXNzIChmb3JtYXRfdmFsdWUgIT0gTlVMTCk7CisgICAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19MSVNUIChmb3JtYXRfdmFsdWUpKTsKKyAgICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUgKGZvcm1hdF92YWx1ZSkgPT0gNCk7CisgICAgZmFpbF91bmxlc3MgKGNoZWNrX3N0cmluZ19saXN0IChmb3JtYXRfdmFsdWUpID09IFRSVUUpOworCisgICAgZ192YWx1ZV9pbml0ICgmdGVzdF9mcHMsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKKyAgICBmcmFtZXJhdGVfdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoczEsICJmcmFtZXJhdGUiKTsKKyAgICBmYWlsX3VubGVzcyAoZnJhbWVyYXRlX3ZhbHVlICE9IE5VTEwpOworICAgIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT05fUkFOR0UgKGZyYW1lcmF0ZV92YWx1ZSkpOworCisgICAgdmFsX2ZwcyA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWluIChmcmFtZXJhdGVfdmFsdWUpOworICAgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZ0ZXN0X2ZwcywgMSwgMTAwKTsKKyAgICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZ0ZXN0X2ZwcywgdmFsX2ZwcykgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKKworICAgIHZhbF9mcHMgPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21heCAoZnJhbWVyYXRlX3ZhbHVlKTsKKyAgICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmdGVzdF9mcHMsIDEwMCwgMSk7CisgICAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmdGVzdF9mcHMsIHZhbF9mcHMpID09IEdTVF9WQUxVRV9FUVVBTCk7CisKKyAgICBnX3ZhbHVlX3Vuc2V0ICgmdGVzdF9mcHMpOworCisgICAgd2lkdGhfdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoczEsICJ3aWR0aCIpOworICAgIGZhaWxfdW5sZXNzICh3aWR0aF92YWx1ZSAhPSBOVUxMKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRSAod2lkdGhfdmFsdWUpKTsKKyAgICBtaW5fd2lkdGggPSBnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW4gKHdpZHRoX3ZhbHVlKTsKKyAgICBtYXhfd2lkdGggPSBnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXggKHdpZHRoX3ZhbHVlKTsKKyAgICBmYWlsX3VubGVzcyAobWluX3dpZHRoID09IDE2ICYmIG1heF93aWR0aCA9PSA0MDk2KTsKKworICAgIGhlaWdodF92YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzMSwgImhlaWdodCIpOworICAgIGZhaWxfdW5sZXNzIChoZWlnaHRfdmFsdWUgIT0gTlVMTCk7CisgICAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19JTlRfUkFOR0UgKGhlaWdodF92YWx1ZSkpOworICAgIG1pbl9oZWlnaHQgPSBnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW4gKGhlaWdodF92YWx1ZSk7CisgICAgbWF4X2hlaWdodCA9IGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heCAoaGVpZ2h0X3ZhbHVlKTsKKyAgICBmYWlsX3VubGVzcyAobWluX2hlaWdodCA9PSAxNiAmJiBtYXhfaGVpZ2h0ID09IDQwOTYpOworICB9CisKKyAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3RydW5jYXRlKQoreworICBHc3RDYXBzICpjYXBzOworCisgIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAobm9uX3NpbXBsZV9jYXBzX3N0cmluZyk7CisgIGZhaWxfdW5sZXNzIChjYXBzICE9IE5VTEwsCisgICAgICAiZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKG5vbl9zaW1wbGVfY2Fwc19zdHJpbmcpIGZhaWxlZCIpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfY2Fwc19nZXRfc2l6ZSAoY2FwcyksIDQpOworICBnc3RfY2Fwc190cnVuY2F0ZSAoY2Fwcyk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9jYXBzX2dldF9zaXplIChjYXBzKSwgMSk7CisgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9zdWJzZXQpCit7CisgIEdzdENhcHMgKmMxLCAqYzI7CisKKyAgYzEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInZpZGVvL3gtcmF3OyB2aWRlby94LXJhdyIpOworICBjMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKVlVWTIiKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX3N1YnNldCAoYzIsIGMxKSk7CisgIGZhaWxfaWYgKGdzdF9jYXBzX2lzX3N1YnNldCAoYzEsIGMyKSk7CisgIGdzdF9jYXBzX3VucmVmIChjMSk7CisgIGdzdF9jYXBzX3VucmVmIChjMik7CisKKyAgYzEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZworICAgICAgKCJhdWRpby94LXJhdywgY2hhbm5lbHM9KGludClbIDEsIDIgXSwgcmF0ZT0oaW50KTQ0MTAwIik7CisgIGMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdywgY2hhbm5lbHM9KGludCkxLCByYXRlPShpbnQpNDQxMDAiKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX3N1YnNldCAoYzIsIGMxKSk7CisgIGZhaWxfaWYgKGdzdF9jYXBzX2lzX3N1YnNldCAoYzEsIGMyKSk7CisgIGdzdF9jYXBzX3VucmVmIChjMSk7CisgIGdzdF9jYXBzX3VucmVmIChjMik7CisKKyAgYzEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LCBjaGFubmVscz0oaW50KSB7MX0iKTsKKyAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LCBjaGFubmVscz0oaW50KTEiKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX3N1YnNldCAoYzIsIGMxKSk7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19zdWJzZXQgKGMxLCBjMikpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGMxLCBjMikpOworICBnc3RfY2Fwc191bnJlZiAoYzEpOworICBnc3RfY2Fwc191bnJlZiAoYzIpOworCisgIGMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcKKyAgICAgICgiYXVkaW8veC1yYXcsIHJhdGU9KGludCk0NDEwMCwgY2hhbm5lbHM9KGludCkzLCBmb3JtYXQ9KHN0cmluZylVMTZfTEUiKTsKKyAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZworICAgICAgKCJhdWRpby94LXJhdywgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmb3JtYXQ9KHN0cmluZyl7IFMxNl9MRSwgVTE2X0xFIH0iKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX3N1YnNldCAoYzEsIGMyKSk7CisgIGZhaWxfaWYgKGdzdF9jYXBzX2lzX3N1YnNldCAoYzIsIGMxKSk7CisgIGdzdF9jYXBzX3VucmVmIChjMSk7CisgIGdzdF9jYXBzX3VucmVmIChjMik7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfbWVyZ2VfZnVuZGFtZW50YWwpCit7CisgIEdzdENhcHMgKmMxLCAqYzI7CisKKyAgLyogQU5ZICsgc3BlY2lmaWMgPSBBTlkgKi8KKyAgYzEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LHJhdGU9NDQxMDAiKTsKKyAgYzIgPSBnc3RfY2Fwc19uZXdfYW55ICgpOworICBnc3RfY2Fwc19tZXJnZSAoYzIsIGMxKTsKKyAgR1NUX0RFQlVHICgibWVyZ2VkOiAoJWQpICUiIEdTVF9QVFJfRk9STUFULCBnc3RfY2Fwc19nZXRfc2l6ZSAoYzIpLCBjMik7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19nZXRfc2l6ZSAoYzIpID09IDAsIE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfYW55IChjMiksIE5VTEwpOworICBnc3RfY2Fwc191bnJlZiAoYzIpOworCisgIC8qIHNwZWNpZmljICsgQU5ZID0gQU5ZICovCisgIGMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxyYXRlPTQ0MTAwIik7CisgIGMxID0gZ3N0X2NhcHNfbmV3X2FueSAoKTsKKyAgZ3N0X2NhcHNfbWVyZ2UgKGMyLCBjMSk7CisgIEdTVF9ERUJVRyAoIm1lcmdlZDogKCVkKSAlIiBHU1RfUFRSX0ZPUk1BVCwgZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSwgYzIpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSA9PSAwLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2FueSAoYzIpLCBOVUxMKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKKworICAvKiBFTVBUWSArIHNwZWNpZmljID0gc3BlY2lmaWMgKi8KKyAgYzEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LHJhdGU9NDQxMDAiKTsKKyAgYzIgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7CisgIGdzdF9jYXBzX21lcmdlIChjMiwgYzEpOworICBHU1RfREVCVUcgKCJtZXJnZWQ6ICglZCkgJSIgR1NUX1BUUl9GT1JNQVQsIGdzdF9jYXBzX2dldF9zaXplIChjMiksIGMyKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2dldF9zaXplIChjMikgPT0gMSwgTlVMTCk7CisgIGZhaWxfaWYgKGdzdF9jYXBzX2lzX2VtcHR5IChjMiksIE5VTEwpOworICBnc3RfY2Fwc191bnJlZiAoYzIpOworCisgIC8qIHNwZWNpZmljICsgRU1QVFkgPSBzcGVjaWZpYyAqLworICBjMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcscmF0ZT00NDEwMCIpOworICBjMSA9IGdzdF9jYXBzX25ld19lbXB0eSAoKTsKKyAgZ3N0X2NhcHNfbWVyZ2UgKGMyLCBjMSk7CisgIEdTVF9ERUJVRyAoIm1lcmdlZDogKCVkKSAlIiBHU1RfUFRSX0ZPUk1BVCwgZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSwgYzIpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSA9PSAxLCBOVUxMKTsKKyAgZmFpbF9pZiAoZ3N0X2NhcHNfaXNfZW1wdHkgKGMyKSwgTlVMTCk7CisgIGdzdF9jYXBzX3VucmVmIChjMik7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfbWVyZ2Vfc2FtZSkKK3sKKyAgR3N0Q2FwcyAqYzEsICpjMiwgKnRlc3Q7CisKKyAgLyogdGhpcyBpcyB0aGUgc2FtZSAqLworICBjMSA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcscmF0ZT00NDEwMCxjaGFubmVscz0xIik7CisgIGMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxyYXRlPTQ0MTAwLGNoYW5uZWxzPTEiKTsKKyAgZ3N0X2NhcHNfbWVyZ2UgKGMyLCBjMSk7CisgIEdTVF9ERUJVRyAoIm1lcmdlZDogKCVkKSAlIiBHU1RfUFRSX0ZPUk1BVCwgZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSwgYzIpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSA9PSAxLCBOVUxMKTsKKyAgdGVzdCA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcscmF0ZT00NDEwMCxjaGFubmVscz0xIik7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoYzIsIHRlc3QpKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKHRlc3QpOworICBnc3RfY2Fwc191bnJlZiAoYzIpOworCisgIC8qIGFuZCBzbyBpcyB0aGlzICovCisgIGMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxyYXRlPTQ0MTAwLGNoYW5uZWxzPTEiKTsKKyAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LGNoYW5uZWxzPTEscmF0ZT00NDEwMCIpOworICBnc3RfY2Fwc19tZXJnZSAoYzIsIGMxKTsKKyAgR1NUX0RFQlVHICgibWVyZ2VkOiAoJWQpICUiIEdTVF9QVFJfRk9STUFULCBnc3RfY2Fwc19nZXRfc2l6ZSAoYzIpLCBjMik7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19nZXRfc2l6ZSAoYzIpID09IDEsIE5VTEwpOworICBnc3RfY2Fwc191bnJlZiAoYzIpOworCisgIGMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJ2aWRlby94LWZvbywgZGF0YT0oYnVmZmVyKUFBIik7CisgIGMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJ2aWRlby94LWZvbywgZGF0YT0oYnVmZmVyKUFBQkIiKTsKKyAgZ3N0X2NhcHNfbWVyZ2UgKGMyLCBjMSk7CisgIEdTVF9ERUJVRyAoIm1lcmdlZDogKCVkKSAlIiBHU1RfUFRSX0ZPUk1BVCwgZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSwgYzIpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSA9PSAyLCBOVUxMKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKKworICBjMSA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidmlkZW8veC1mb28sIGRhdGE9KGJ1ZmZlcilBQUJCIik7CisgIGMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJ2aWRlby94LWZvbywgZGF0YT0oYnVmZmVyKUFBIik7CisgIGdzdF9jYXBzX21lcmdlIChjMiwgYzEpOworICBHU1RfREVCVUcgKCJtZXJnZWQ6ICglZCkgJSIgR1NUX1BUUl9GT1JNQVQsIGdzdF9jYXBzX2dldF9zaXplIChjMiksIGMyKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2dldF9zaXplIChjMikgPT0gMiwgTlVMTCk7CisgIGdzdF9jYXBzX3VucmVmIChjMik7CisKKyAgYzEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInZpZGVvL3gtZm9vLCBkYXRhPShidWZmZXIpQUEiKTsKKyAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInZpZGVvL3gtZm9vLCBkYXRhPShidWZmZXIpQUEiKTsKKyAgZ3N0X2NhcHNfbWVyZ2UgKGMyLCBjMSk7CisgIEdTVF9ERUJVRyAoIm1lcmdlZDogKCVkKSAlIiBHU1RfUFRSX0ZPUk1BVCwgZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSwgYzIpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSA9PSAxLCBOVUxMKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKKworICBjMSA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidmlkZW8veC1mb28sIGRhdGE9KGJ1ZmZlcilBQSIpOworICBjMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidmlkZW8veC1iYXIsIGRhdGE9KGJ1ZmZlcilBQSIpOworICBnc3RfY2Fwc19tZXJnZSAoYzIsIGMxKTsKKyAgR1NUX0RFQlVHICgibWVyZ2VkOiAoJWQpICUiIEdTVF9QVFJfRk9STUFULCBnc3RfY2Fwc19nZXRfc2l6ZSAoYzIpLCBjMik7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19nZXRfc2l6ZSAoYzIpID09IDIsIE5VTEwpOworICBnc3RfY2Fwc191bnJlZiAoYzIpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X21lcmdlX3N1YnNldCkKK3sKKyAgR3N0Q2FwcyAqYzEsICpjMiwgKnRlc3Q7CisKKyAgLyogdGhlIDJuZCBpcyBhbHJlYWR5IGNvdmVyZWQgKi8KKyAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LGNoYW5uZWxzPVsxLDJdIik7CisgIGMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxjaGFubmVscz0xIik7CisgIGdzdF9jYXBzX21lcmdlIChjMiwgYzEpOworICBHU1RfREVCVUcgKCJtZXJnZWQ6ICglZCkgJSIgR1NUX1BUUl9GT1JNQVQsIGdzdF9jYXBzX2dldF9zaXplIChjMiksIGMyKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2dldF9zaXplIChjMikgPT0gMSwgTlVMTCk7CisgIHRlc3QgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LGNoYW5uZWxzPVsxLDJdIik7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoYzIsIHRlc3QpKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKHRlc3QpOworCisgIC8qIGhlcmUgaXQgaXMgbm90ICovCisgIGMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxjaGFubmVscz0xLHJhdGU9NDQxMDAiKTsKKyAgYzEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LGNoYW5uZWxzPVsxLDJdLHJhdGU9NDQxMDAiKTsKKyAgZ3N0X2NhcHNfbWVyZ2UgKGMyLCBjMSk7CisgIEdTVF9ERUJVRyAoIm1lcmdlZDogKCVkKSAlIiBHU1RfUFRSX0ZPUk1BVCwgZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSwgYzIpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSA9PSAyLCBOVUxMKTsKKyAgdGVzdCA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcsY2hhbm5lbHM9WzEsMl0scmF0ZT00NDEwMCIpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGMyLCB0ZXN0KSk7CisgIGdzdF9jYXBzX3VucmVmIChjMik7CisgIGdzdF9jYXBzX3VucmVmICh0ZXN0KTsKKworICAvKiBzZWNvbmQgb25lIHdhcyBhbHJlYWR5IGNvbnRhaW5lZCBpbiB0aGUgZmlyc3Qgb25lICovCisgIGMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxjaGFubmVscz1bMSwzXSIpOworICBjMSA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcsY2hhbm5lbHM9WzEsMl0iKTsKKyAgZ3N0X2NhcHNfbWVyZ2UgKGMyLCBjMSk7CisgIEdTVF9ERUJVRyAoIm1lcmdlZDogKCVkKSAlIiBHU1RfUFRSX0ZPUk1BVCwgZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSwgYzIpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSA9PSAxLCBOVUxMKTsKKyAgdGVzdCA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcsY2hhbm5lbHM9WzEsM10iKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChjMiwgdGVzdCkpOworICBnc3RfY2Fwc191bnJlZiAoYzIpOworICBnc3RfY2Fwc191bnJlZiAodGVzdCk7CisKKyAgLyogc2Vjb25kIG9uZSB3YXMgYWxyZWFkeSBjb250YWluZWQgaW4gdGhlIGZpcnN0IG9uZSAqLworICBjMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcsY2hhbm5lbHM9WzEsNF0iKTsKKyAgYzEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LGNoYW5uZWxzPVsxLDJdIik7CisgIGdzdF9jYXBzX21lcmdlIChjMiwgYzEpOworICBHU1RfREVCVUcgKCJtZXJnZWQ6ICglZCkgJSIgR1NUX1BUUl9GT1JNQVQsIGdzdF9jYXBzX2dldF9zaXplIChjMiksIGMyKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2dldF9zaXplIChjMikgPT0gMSwgTlVMTCk7CisgIHRlc3QgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LGNoYW5uZWxzPVsxLDRdIik7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoYzIsIHRlc3QpKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKHRlc3QpOworCisgIC8qIHNlY29uZCBvbmUgd2FzIGFscmVhZHkgY29udGFpbmVkIGluIHRoZSBmaXJzdCBvbmUgKi8KKyAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LGNoYW5uZWxzPVsxLDRdIik7CisgIGMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxjaGFubmVscz1bMiw0XSIpOworICBnc3RfY2Fwc19tZXJnZSAoYzIsIGMxKTsKKyAgR1NUX0RFQlVHICgibWVyZ2VkOiAoJWQpICUiIEdTVF9QVFJfRk9STUFULCBnc3RfY2Fwc19nZXRfc2l6ZSAoYzIpLCBjMik7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19nZXRfc2l6ZSAoYzIpID09IDEsIE5VTEwpOworICB0ZXN0ID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxjaGFubmVscz1bMSw0XSIpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGMyLCB0ZXN0KSk7CisgIGdzdF9jYXBzX3VucmVmIChjMik7CisgIGdzdF9jYXBzX3VucmVmICh0ZXN0KTsKKworICAvKiBzZWNvbmQgb25lIHdhcyBhbHJlYWR5IGNvbnRhaW5lZCBpbiB0aGUgZmlyc3Qgb25lICovCisgIGMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxjaGFubmVscz1bMSw0XSIpOworICBjMSA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcsY2hhbm5lbHM9WzIsM10iKTsKKyAgZ3N0X2NhcHNfbWVyZ2UgKGMyLCBjMSk7CisgIEdTVF9ERUJVRyAoIm1lcmdlZDogKCVkKSAlIiBHU1RfUFRSX0ZPUk1BVCwgZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSwgYzIpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSA9PSAxLCBOVUxMKTsKKyAgdGVzdCA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcsY2hhbm5lbHM9WzEsNF0iKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChjMiwgdGVzdCkpOworICBnc3RfY2Fwc191bnJlZiAoYzIpOworICBnc3RfY2Fwc191bnJlZiAodGVzdCk7CisKKyAgLyogdGhlc2UgY2FwcyBjYW5ub3QgYmUgbWVyZ2VkICovCisgIGMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxjaGFubmVscz1bMiwzXSIpOworICBjMSA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcsY2hhbm5lbHM9WzEsNF0iKTsKKyAgZ3N0X2NhcHNfbWVyZ2UgKGMyLCBjMSk7CisgIEdTVF9ERUJVRyAoIm1lcmdlZDogKCVkKSAlIiBHU1RfUFRSX0ZPUk1BVCwgZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSwgYzIpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSA9PSAyLCBOVUxMKTsKKyAgdGVzdCA9CisgICAgICBnc3RfY2Fwc19mcm9tX3N0cmluZworICAgICAgKCJhdWRpby94LXJhdyxjaGFubmVscz1bMiwzXTthdWRpby94LXJhdyxjaGFubmVscz1bMSw0XSIpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGMyLCB0ZXN0KSk7CisgIGdzdF9jYXBzX3VucmVmIChjMik7CisgIGdzdF9jYXBzX3VucmVmICh0ZXN0KTsKKworICAvKiB0aGVzZSBjYXBzIGNhbm5vdCBiZSBtZXJnZWQgKi8KKyAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LGNoYW5uZWxzPVsxLDJdIik7CisgIGMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxjaGFubmVscz1bMSwzXSIpOworICBnc3RfY2Fwc19tZXJnZSAoYzIsIGMxKTsKKyAgR1NUX0RFQlVHICgibWVyZ2VkOiAoJWQpICUiIEdTVF9QVFJfRk9STUFULCBnc3RfY2Fwc19nZXRfc2l6ZSAoYzIpLCBjMik7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19nZXRfc2l6ZSAoYzIpID09IDIsIE5VTEwpOworICB0ZXN0ID0KKyAgICAgIGdzdF9jYXBzX2Zyb21fc3RyaW5nCisgICAgICAoImF1ZGlvL3gtcmF3LGNoYW5uZWxzPVsxLDJdO2F1ZGlvL3gtcmF3LGNoYW5uZWxzPVsxLDNdIik7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoYzIsIHRlc3QpKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKHRlc3QpOworCisgIGMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxjaGFubmVscz17MSwyfSIpOworICBjMSA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcsY2hhbm5lbHM9ezEsMiwzLDR9Iik7CisgIGdzdF9jYXBzX21lcmdlIChjMiwgYzEpOworICBHU1RfREVCVUcgKCJtZXJnZWQ6ICglZCkgJSIgR1NUX1BUUl9GT1JNQVQsIGdzdF9jYXBzX2dldF9zaXplIChjMiksIGMyKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2dldF9zaXplIChjMikgPT0gMiwgTlVMTCk7CisgIHRlc3QgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LGNoYW5uZWxzPXsxLDJ9OyIKKyAgICAgICJhdWRpby94LXJhdyxjaGFubmVscz17MSwyLDMsNH0iKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChjMiwgdGVzdCkpOworICBnc3RfY2Fwc191bnJlZiAoYzIpOworICBnc3RfY2Fwc191bnJlZiAodGVzdCk7CisKKyAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LGNoYW5uZWxzPXsxLDJ9Iik7CisgIGMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxjaGFubmVscz17MSwzfSIpOworICBnc3RfY2Fwc19tZXJnZSAoYzIsIGMxKTsKKyAgR1NUX0RFQlVHICgibWVyZ2VkOiAoJWQpICUiIEdTVF9QVFJfRk9STUFULCBnc3RfY2Fwc19nZXRfc2l6ZSAoYzIpLCBjMik7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19nZXRfc2l6ZSAoYzIpID09IDIsIE5VTEwpOworICB0ZXN0ID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxjaGFubmVscz17MSwyfTsiCisgICAgICAiYXVkaW8veC1yYXcsY2hhbm5lbHM9ezEsM30iKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChjMiwgdGVzdCkpOworICBnc3RfY2Fwc191bnJlZiAoYzIpOworICBnc3RfY2Fwc191bnJlZiAodGVzdCk7CisKKyAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInZpZGVvL3gtcmF3LCBmcmFtZXJhdGU9KGZyYWN0aW9uKXsgMTUvMiwgNS8xIH0iKTsKKyAgYzEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInZpZGVvL3gtcmF3LCBmcmFtZXJhdGU9KGZyYWN0aW9uKXsgMTUvMSwgNS8xIH0iKTsKKyAgdGVzdCA9IGdzdF9jYXBzX2NvcHkgKGMxKTsKKyAgZ3N0X2NhcHNfbWVyZ2UgKGMyLCBjMSk7CisgIEdTVF9ERUJVRyAoIm1lcmdlZDogKCVkKSAlIiBHU1RfUFRSX0ZPUk1BVCwgZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSwgYzIpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfc3Vic2V0ICh0ZXN0LCBjMikpOworICBnc3RfY2Fwc191bnJlZiAodGVzdCk7CisgIGdzdF9jYXBzX3VucmVmIChjMik7CisKKyAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3Iik7CisgIGMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxjaGFubmVscz0xIik7CisgIGdzdF9jYXBzX21lcmdlIChjMiwgYzEpOworICBHU1RfREVCVUcgKCJtZXJnZWQ6ICglZCkgJSIgR1NUX1BUUl9GT1JNQVQsIGdzdF9jYXBzX2dldF9zaXplIChjMiksIGMyKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2dldF9zaXplIChjMikgPT0gMSwgTlVMTCk7CisgIHRlc3QgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3Iik7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoYzIsIHRlc3QpKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKHRlc3QpOworCisgIGMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxjaGFubmVscz0xIik7CisgIGMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyIpOworICBnc3RfY2Fwc19tZXJnZSAoYzIsIGMxKTsKKyAgR1NUX0RFQlVHICgibWVyZ2VkOiAoJWQpICUiIEdTVF9QVFJfRk9STUFULCBnc3RfY2Fwc19nZXRfc2l6ZSAoYzIpLCBjMik7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19nZXRfc2l6ZSAoYzIpID09IDIsIE5VTEwpOworICB0ZXN0ID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxjaGFubmVscz0xOyBhdWRpby94LXJhdyIpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGMyLCB0ZXN0KSk7CisgIGdzdF9jYXBzX3VucmVmIChjMik7CisgIGdzdF9jYXBzX3VucmVmICh0ZXN0KTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9pbnRlcnNlY3QpCit7CisgIEdzdFN0cnVjdHVyZSAqczsKKyAgR3N0Q2FwcyAqYzEsICpjMiwgKmNpMSwgKmNpMjsKKworICAvKiBmaWVsZCBub3Qgc3BlY2lmaWVkID0gYW55IHZhbHVlIHBvc3NpYmxlLCBzbyB0aGUgaW50ZXJzZWN0aW9uCisgICAqIHNob3VsZCBrZWVwIGZpZWxkcyB3aGljaCBhcmUgb25seSBwYXJ0IG9mIG9uZSBzZXQgb2YgY2FwcyAqLworICBjMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidmlkZW8veC1yYXcsZm9ybWF0PShzdHJpbmcpSTQyMCx3aWR0aD0yMCIpOworICBjMSA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidmlkZW8veC1yYXcsZm9ybWF0PShzdHJpbmcpSTQyMCIpOworCisgIGNpMSA9IGdzdF9jYXBzX2ludGVyc2VjdCAoYzIsIGMxKTsKKyAgR1NUX0RFQlVHICgiaW50ZXJzZWN0ZWQ6ICUiIEdTVF9QVFJfRk9STUFULCBjaTEpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfZ2V0X3NpemUgKGNpMSkgPT0gMSwgTlVMTCk7CisgIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjaTEsIDApOworICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAocywgInZpZGVvL3gtcmF3IikpOworICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHMsICJmb3JtYXQiKSAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAid2lkdGgiKSAhPSBOVUxMKTsKKworICAvKiB3aXRoIGNoYW5nZWQgb3JkZXIgKi8KKyAgY2kyID0gZ3N0X2NhcHNfaW50ZXJzZWN0IChjMSwgYzIpOworICBHU1RfREVCVUcgKCJpbnRlcnNlY3RlZDogJSIgR1NUX1BUUl9GT1JNQVQsIGNpMik7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19nZXRfc2l6ZSAoY2kyKSA9PSAxLCBOVUxMKTsKKyAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNpMiwgMCk7CisgIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzLCAidmlkZW8veC1yYXciKSk7CisgIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAocywgImZvcm1hdCIpICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHMsICJ3aWR0aCIpICE9IE5VTEwpOworCisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoY2kxLCBjaTIpKTsKKworICBnc3RfY2Fwc191bnJlZiAoY2kxKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGNpMik7CisKKyAgZ3N0X2NhcHNfdW5yZWYgKGMxKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKKworICAvKiA9PT09PT09PT09ICovCisKKyAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInZpZGVvL3gtcmF3LGZvcm1hdD0oc3RyaW5nKUk0MjAsd2lkdGg9MjAiKTsKKyAgYzEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInZpZGVvL3gtcmF3LGZvcm1hdD0oc3RyaW5nKUk0MjAsd2lkdGg9MzAiKTsKKworICBjaTEgPSBnc3RfY2Fwc19pbnRlcnNlY3QgKGMyLCBjMSk7CisgIEdTVF9ERUJVRyAoImludGVyc2VjdGVkOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2kxKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VtcHR5IChjaTEpLCBOVUxMKTsKKworICAvKiB3aXRoIGNoYW5nZWQgb3JkZXIgKi8KKyAgY2kyID0gZ3N0X2NhcHNfaW50ZXJzZWN0IChjMSwgYzIpOworICBHU1RfREVCVUcgKCJpbnRlcnNlY3RlZDogJSIgR1NUX1BUUl9GT1JNQVQsIGNpMik7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lbXB0eSAoY2kyKSwgTlVMTCk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChjaTEsIGNpMikpOworCisgIGdzdF9jYXBzX3VucmVmIChjaTEpOworICBnc3RfY2Fwc191bnJlZiAoY2kyKTsKKworICBnc3RfY2Fwc191bnJlZiAoYzEpOworICBnc3RfY2Fwc191bnJlZiAoYzIpOworCisgIC8qID09PT09PT09PT0gKi8KKworICBjMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidmlkZW8veC1yYXcsZm9ybWF0PShzdHJpbmcpSTQyMCx3aWR0aD0yMCIpOworICBjMSA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidmlkZW8veC1yYXcyLGZvcm1hdD0oc3RyaW5nKUk0MjAsd2lkdGg9MjAiKTsKKworICBjaTEgPSBnc3RfY2Fwc19pbnRlcnNlY3QgKGMyLCBjMSk7CisgIEdTVF9ERUJVRyAoImludGVyc2VjdGVkOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2kxKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VtcHR5IChjaTEpLCBOVUxMKTsKKworICAvKiB3aXRoIGNoYW5nZWQgb3JkZXIgKi8KKyAgY2kyID0gZ3N0X2NhcHNfaW50ZXJzZWN0IChjMSwgYzIpOworICBHU1RfREVCVUcgKCJpbnRlcnNlY3RlZDogJSIgR1NUX1BUUl9GT1JNQVQsIGNpMik7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lbXB0eSAoY2kyKSwgTlVMTCk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChjaTEsIGNpMikpOworCisgIGdzdF9jYXBzX3VucmVmIChjaTEpOworICBnc3RfY2Fwc191bnJlZiAoY2kyKTsKKworICBnc3RfY2Fwc191bnJlZiAoYzEpOworICBnc3RfY2Fwc191bnJlZiAoYzIpOworCisgIC8qID09PT09PT09PT0gKi8KKworICBjMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidmlkZW8veC1yYXcsZm9ybWF0PShzdHJpbmcpSTQyMCx3aWR0aD0yMCIpOworICBjMSA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidmlkZW8veC1yYXcsZm9ybWF0PShzdHJpbmcpSTQyMCxoZWlnaHQ9MzAiKTsKKworICBjaTEgPSBnc3RfY2Fwc19pbnRlcnNlY3QgKGMyLCBjMSk7CisgIEdTVF9ERUJVRyAoImludGVyc2VjdGVkOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2kxKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2dldF9zaXplIChjaTEpID09IDEsIE5VTEwpOworICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2kxLCAwKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHMsICJ2aWRlby94LXJhdyIpKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAiZm9ybWF0IikgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAocywgIndpZHRoIikgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAocywgImhlaWdodCIpICE9IE5VTEwpOworCisgIC8qIHdpdGggY2hhbmdlZCBvcmRlciAqLworICBjaTIgPSBnc3RfY2Fwc19pbnRlcnNlY3QgKGMxLCBjMik7CisgIEdTVF9ERUJVRyAoImludGVyc2VjdGVkOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2kyKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2dldF9zaXplIChjaTIpID09IDEsIE5VTEwpOworICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2kyLCAwKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHMsICJ2aWRlby94LXJhdyIpKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAiZm9ybWF0IikgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAocywgImhlaWdodCIpICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHMsICJ3aWR0aCIpICE9IE5VTEwpOworCisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoY2kxLCBjaTIpKTsKKworICBnc3RfY2Fwc191bnJlZiAoY2kxKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGNpMik7CisKKyAgZ3N0X2NhcHNfdW5yZWYgKGMxKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9pbnRlcnNlY3QyKQoreworICBHc3RDYXBzICpjYXBzMSwgKmNhcHMyLCAqaWNhcHM7CisKKyAgLyogdGVzdHMgYXJyYXkgc3VidHJhY3Rpb24gKi8KKyAgY2FwczEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LCAiCisgICAgICAiY2hhbm5lbC1wb3NpdGlvbnM9KGludCk8ICAgICAgICAgICAgICAgICAgICAgICIKKyAgICAgICJ7IDEsIDIsIDMsIDQsIDUsIDYgfSwgICAgICAgICAgICAgICAgICAgICAgICAgIgorICAgICAgInsgMSwgMiwgMywgNCwgNSwgNiB9LCAgICAgICAgICAgICAgICAgICAgICAgICAiCisgICAgICAieyAxLCAyLCAzLCA0LCA1LCA2IH0sICAgICAgICAgICAgICAgICAgICAgICAgICIKKyAgICAgICJ7IDEsIDIsIDMsIDQsIDUsIDYgfSwgICAgICAgICAgICAgICAgICAgICAgICAgIgorICAgICAgInsgMSwgMiwgMywgNCwgNSwgNiB9LCAgICAgICAgICAgICAgICAgICAgICAgICAiICJ7IDEsIDIsIDMsIDQsIDUsIDYgfT4iKTsKKyAgY2FwczIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LCAiCisgICAgICAiY2hhbm5lbC1wb3NpdGlvbnM9KGludCk8IDEsIDIsIDMsIDQsIDUsIDYgPiIpOworICBpY2FwcyA9IGdzdF9jYXBzX2ludGVyc2VjdCAoY2FwczEsIGNhcHMyKTsKKyAgR1NUX0xPRyAoImludGVyc2VjdGVkIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBpY2Fwcyk7CisgIGZhaWxfaWYgKGdzdF9jYXBzX2lzX2VtcHR5IChpY2FwcykpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGljYXBzLCBjYXBzMikpOworICBnc3RfY2Fwc191bnJlZiAoY2FwczEpOworICBnc3RfY2Fwc191bnJlZiAoY2FwczIpOworICBnc3RfY2Fwc191bnJlZiAoaWNhcHMpOworCisgIC8qID09PT09ICovCisKKyAgY2FwczEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInNvbWUvdHlwZSwgZm9vPShpbnQpPCB7IDEsIDIgfSwgeyAzLCA0fSA+Iik7CisgIGNhcHMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJzb21lL3R5cGUsIGZvbz0oaW50KTwgMSwgMyA+Iik7CisgIGljYXBzID0gZ3N0X2NhcHNfaW50ZXJzZWN0IChjYXBzMSwgY2FwczIpOworICBHU1RfTE9HICgiaW50ZXJzZWN0ZWQgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGljYXBzKTsKKyAgZmFpbF9pZiAoZ3N0X2NhcHNfaXNfZW1wdHkgKGljYXBzKSk7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoaWNhcHMsIGNhcHMyKSk7CisgIGdzdF9jYXBzX3VucmVmIChjYXBzMSk7CisgIGdzdF9jYXBzX3VucmVmIChjYXBzMik7CisgIGdzdF9jYXBzX3VucmVmIChpY2Fwcyk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9pbnRlcnNlY3RfemlnemFnKQoreworICBHc3RDYXBzICpjYXBzMSwgKmNhcHMyLCAqaWNhcHMsICpyZXN1bHQ7CisKKyAgLyogdGVzdHMgaWYgY2FwcyBvcmRlciBpcyBtYWludGFpbmVkICovCisgIGNhcHMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJmb3JtYXQvQTsgZm9ybWF0L0I7IGZvcm1hdC9DOyBmb3JtYXQvRCIpOworICBjYXBzMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiZm9ybWF0L0Q7IGZvcm1hdC9BOyBmb3JtYXQvQjsgZm9ybWF0L0MiKTsKKworICBpY2FwcyA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChjYXBzMSwgY2FwczIsIEdTVF9DQVBTX0lOVEVSU0VDVF9aSUdfWkFHKTsKKyAgcmVzdWx0ID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJmb3JtYXQvQjsgZm9ybWF0L0E7IGZvcm1hdC9EOyBmb3JtYXQvQyIpOworICBHU1RfTE9HICgiaW50ZXJzZWN0ZWQgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGljYXBzKTsKKyAgZmFpbF9pZiAoZ3N0X2NhcHNfaXNfZW1wdHkgKGljYXBzKSk7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoaWNhcHMsIHJlc3VsdCkpOworICBnc3RfY2Fwc191bnJlZiAoaWNhcHMpOworICBnc3RfY2Fwc191bnJlZiAocmVzdWx0KTsKKworICBpY2FwcyA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChjYXBzMiwgY2FwczEsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7CisgIHJlc3VsdCA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiZm9ybWF0L0E7IGZvcm1hdC9COyBmb3JtYXQvRDsgZm9ybWF0L0MiKTsKKyAgR1NUX0xPRyAoImludGVyc2VjdGVkIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBpY2Fwcyk7CisgIGZhaWxfaWYgKGdzdF9jYXBzX2lzX2VtcHR5IChpY2FwcykpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGljYXBzLCByZXN1bHQpKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGljYXBzKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKHJlc3VsdCk7CisKKyAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMxKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMyKTsKK30KKworR1NUX0VORF9URVNUOworCisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2ludGVyc2VjdF9maXJzdCkKK3sKKyAgR3N0Q2FwcyAqY2FwczEsICpjYXBzMiwgKmljYXBzLCAqcmVzdWx0OworCisgIC8qIHRlc3RzIGlmIGNhcHMgb3JkZXIgaXMgbWFpbnRhaW5lZCAqLworICBjYXBzMSA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiZm9ybWF0L0E7IGZvcm1hdC9COyBmb3JtYXQvQzsgZm9ybWF0L0QiKTsKKyAgY2FwczIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImZvcm1hdC9DOyBmb3JtYXQvRDsgZm9ybWF0L0EiKTsKKyAgaWNhcHMgPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoY2FwczEsIGNhcHMyLCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOworICByZXN1bHQgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImZvcm1hdC9BOyBmb3JtYXQvQzsgZm9ybWF0L0QiKTsKKyAgR1NUX0xPRyAoImludGVyc2VjdGVkIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBpY2Fwcyk7CisgIGZhaWxfaWYgKGdzdF9jYXBzX2lzX2VtcHR5IChpY2FwcykpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGljYXBzLCByZXN1bHQpKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMxKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMyKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGljYXBzKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKHJlc3VsdCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9pbnRlcnNlY3RfZmlyc3QyKQoreworICBHc3RDYXBzICpjYXBzMSwgKmNhcHMyLCAqaWNhcHMsICpyZXN1bHQ7CisKKyAgLyogdGVzdHMgaWYgY2FwcyBvcmRlciBpcyBtYWludGFpbmVkICovCisgIGNhcHMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJmb3JtYXQvQTsgZm9ybWF0L0I7IGZvcm1hdC9DOyBmb3JtYXQvRCIpOworICBjYXBzMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiZm9ybWF0L0Q7IGZvcm1hdC9BOyBmb3JtYXQvQjsgZm9ybWF0L0MiKTsKKworICBpY2FwcyA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChjYXBzMSwgY2FwczIsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7CisgIHJlc3VsdCA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiZm9ybWF0L0E7IGZvcm1hdC9COyBmb3JtYXQvQzsgZm9ybWF0L0QiKTsKKyAgR1NUX0xPRyAoImludGVyc2VjdGVkIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBpY2Fwcyk7CisgIGZhaWxfaWYgKGdzdF9jYXBzX2lzX2VtcHR5IChpY2FwcykpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGljYXBzLCByZXN1bHQpKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGljYXBzKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKHJlc3VsdCk7CisKKyAgaWNhcHMgPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoY2FwczIsIGNhcHMxLCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOworICByZXN1bHQgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImZvcm1hdC9EOyBmb3JtYXQvQTsgZm9ybWF0L0I7IGZvcm1hdC9DIik7CisgIEdTVF9MT0cgKCJpbnRlcnNlY3RlZCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgaWNhcHMpOworICBmYWlsX2lmIChnc3RfY2Fwc19pc19lbXB0eSAoaWNhcHMpKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChpY2FwcywgcmVzdWx0KSk7CisgIGdzdF9jYXBzX3VucmVmIChpY2Fwcyk7CisgIGdzdF9jYXBzX3VucmVmIChyZXN1bHQpOworCisgIGdzdF9jYXBzX3VucmVmIChjYXBzMSk7CisgIGdzdF9jYXBzX3VucmVmIChjYXBzMik7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfaW50ZXJzZWN0X2R1cGxpY2F0aW9uKQoreworICBHc3RDYXBzICpjMSwgKmMyLCAqdGVzdDsKKworICBjMSA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nCisgICAgICAoImF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylTMTZfTEUsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIgXSIpOworICBjMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nCisgICAgICAoImF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZykgeyBTMTZfTEUsIFMxNl9CRSwgVTE2X0xFLCBVMTZfQkUgfSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMiBdOyBhdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpIHsgUzE2X0xFLCBTMTZfQkUsIFUxNl9MRSwgVTE2X0JFIH0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDExIF07IGF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZykgeyBTMTZfTEUsIFMxNl9CRSwgVTE2X0xFLCBVMTZfQkUgfSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMTEgXSIpOworCisgIHRlc3QgPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoYzEsIGMyLCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfY2Fwc19nZXRfc2l6ZSAodGVzdCksIDEpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGMxLCB0ZXN0KSk7CisgIGdzdF9jYXBzX3VucmVmIChjMSk7CisgIGdzdF9jYXBzX3VucmVmIChjMik7CisgIGdzdF9jYXBzX3VucmVmICh0ZXN0KTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgZ2Jvb2xlYW4KK19jYXBzX2lzX2ZpeGVkX2ZvcmVhY2ggKEdRdWFyayBmaWVsZF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIGdwb2ludGVyIHVudXNlZCkKK3sKKyAgcmV0dXJuIGdzdF92YWx1ZV9pc19maXhlZCAodmFsdWUpOworfQorCisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X25vcm1hbGl6ZSkKK3sKKyAgR3N0Q2FwcyAqaW4sICpub3JtLCAqb3V0OworICBndWludCBpOworCisgIGluID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJzb21lL3R5cGUsIGZvbz0oaW50KXsgMSAsIDIgfSIpOworICBvdXQgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInNvbWUvdHlwZSwgZm9vPShpbnQpIDE7IHNvbWUvdHlwZSwgZm9vPShpbnQpIDIiKTsKKyAgbm9ybSA9IGdzdF9jYXBzX25vcm1hbGl6ZSAoaW4pOworICBmYWlsX2lmIChnc3RfY2Fwc19pc19lbXB0eSAobm9ybSkpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKG5vcm0sIG91dCkpOworICBmb3IgKGkgPSAwOyBpIDwgZ3N0X2NhcHNfZ2V0X3NpemUgKG5vcm0pOyBpKyspIHsKKyAgICBHc3RTdHJ1Y3R1cmUgKnN0ID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAobm9ybSwgaSk7CisgICAgLyogTWFrZSBzdXJlIGFsbCBmaWVsZHMgb2YgYWxsIHN0cnVjdHVyZXMgYXJlIGZpeGVkICovCisgICAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZm9yZWFjaCAoc3QsIF9jYXBzX2lzX2ZpeGVkX2ZvcmVhY2gsIE5VTEwpKTsKKyAgfQorCisgIGdzdF9jYXBzX3VucmVmIChpbik7CisgIGdzdF9jYXBzX3VucmVmIChvdXQpOworICBnc3RfY2Fwc191bnJlZiAobm9ybSk7CisKKyAgaW4gPSBnc3RfY2Fwc19mcm9tX3N0cmluZworICAgICAgKCJzb21lL3R5cGUsIGZvbz0oaW50KXsgMSAsIDIgfSwgYmFyPShpbnQpeyAzLCA0IH0iKTsKKyAgb3V0ID0KKyAgICAgIGdzdF9jYXBzX2Zyb21fc3RyaW5nCisgICAgICAoInNvbWUvdHlwZSwgZm9vPShpbnQpIDEsIGJhcj0oaW50KSAzOyBzb21lL3R5cGUsIGZvbz0oaW50KSAyLCBiYXI9KGludCkgMzsiCisgICAgICAic29tZS90eXBlLCBmb289KGludCkgMSwgYmFyPShpbnQpIDQ7IHNvbWUvdHlwZSwgZm9vPShpbnQpIDIsIGJhcj0oaW50KSA0OyIpOworICBub3JtID0gZ3N0X2NhcHNfbm9ybWFsaXplIChpbik7CisgIGZhaWxfaWYgKGdzdF9jYXBzX2lzX2VtcHR5IChub3JtKSk7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAobm9ybSwgb3V0KSk7CisgIGZvciAoaSA9IDA7IGkgPCBnc3RfY2Fwc19nZXRfc2l6ZSAobm9ybSk7IGkrKykgeworICAgIEdzdFN0cnVjdHVyZSAqc3QgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChub3JtLCBpKTsKKyAgICAvKiBNYWtlIHN1cmUgYWxsIGZpZWxkcyBvZiBhbGwgc3RydWN0dXJlcyBhcmUgZml4ZWQgKi8KKyAgICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9mb3JlYWNoIChzdCwgX2NhcHNfaXNfZml4ZWRfZm9yZWFjaCwgTlVMTCkpOworICB9CisKKyAgZ3N0X2NhcHNfdW5yZWYgKGluKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKG91dCk7CisgIGdzdF9jYXBzX3VucmVmIChub3JtKTsKKworICBpbiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nCisgICAgICAoInNvbWUvdHlwZSwgZm9vPShzdHJpbmcpeyAxICwgMiB9LCBiYXI9KHN0cmluZykgeyAzIH0iKTsKKyAgb3V0ID0KKyAgICAgIGdzdF9jYXBzX2Zyb21fc3RyaW5nCisgICAgICAoInNvbWUvdHlwZSwgZm9vPShzdHJpbmcpIDEsIGJhcj0oc3RyaW5nKSAzOyBzb21lL3R5cGUsIGZvbz0oc3RyaW5nKSAyLCBiYXI9KHN0cmluZykgMyIpOworICBub3JtID0gZ3N0X2NhcHNfbm9ybWFsaXplIChpbik7CisgIGZhaWxfaWYgKGdzdF9jYXBzX2lzX2VtcHR5IChub3JtKSk7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAobm9ybSwgb3V0KSk7CisgIGZvciAoaSA9IDA7IGkgPCBnc3RfY2Fwc19nZXRfc2l6ZSAobm9ybSk7IGkrKykgeworICAgIEdzdFN0cnVjdHVyZSAqc3QgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChub3JtLCBpKTsKKyAgICAvKiBNYWtlIHN1cmUgYWxsIGZpZWxkcyBvZiBhbGwgc3RydWN0dXJlcyBhcmUgZml4ZWQgKi8KKyAgICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9mb3JlYWNoIChzdCwgX2NhcHNfaXNfZml4ZWRfZm9yZWFjaCwgTlVMTCkpOworICB9CisKKyAgZ3N0X2NhcHNfdW5yZWYgKGluKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKG91dCk7CisgIGdzdF9jYXBzX3VucmVmIChub3JtKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9icm9rZW4pCit7CisgIEdzdENhcHMgKmMxOworCisgIC8qIE5VTEwgaXMgbm90IHZhbGlkIGZvciBtZWRpYV90eXBlICovCisgIEFTU0VSVF9DUklUSUNBTCAoYzEgPQorICAgICAgZ3N0X2NhcHNfbmV3X3NpbXBsZSAoTlVMTCwgImZpZWxkIiwgR19UWVBFX0lOVCwgMSwgTlVMTCkpOworICBmYWlsX2lmIChjMSk7CisKKyNpZm5kZWYgR19ESVNBQkxFX0NIRUNLUworICAvKiBzdWNoIGEgbmFtZSBpcyBub3QgdmFsaWQsIHNlZSBnc3Rfc3RydWN0dXJlX3ZhbGlkYXRlX25hbWUoKSAqLworICBBU1NFUlRfQ1JJVElDQUwgKGMxID0KKyAgICAgIGdzdF9jYXBzX25ld19zaW1wbGUgKCIxI0BhYmMiLCAiZmllbGQiLCBHX1RZUEVfSU5ULCAxLCBOVUxMKSk7CisgIGZhaWxfaWYgKGMxKTsKKyNlbmRpZgorfQorCitHU1RfRU5EX1RFU1Q7CisKKworc3RhdGljIFN1aXRlICoKK2dzdF9jYXBzX3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdENhcHMiKTsKKyAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgib3BlcmF0aW9ucyIpOworCisgIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZnJvbV9zdHJpbmcpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZG91YmxlX2FwcGVuZCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9tdXRhYmlsaXR5KTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3N0YXRpY19jYXBzKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NpbXBsaWZ5KTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3RydW5jYXRlKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3N1YnNldCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9tZXJnZV9mdW5kYW1lbnRhbCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9tZXJnZV9zYW1lKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X21lcmdlX3N1YnNldCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9pbnRlcnNlY3QpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW50ZXJzZWN0Mik7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9pbnRlcnNlY3RfemlnemFnKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2ludGVyc2VjdF9maXJzdCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9pbnRlcnNlY3RfZmlyc3QyKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2ludGVyc2VjdF9kdXBsaWNhdGlvbik7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9ub3JtYWxpemUpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYnJva2VuKTsKKworICByZXR1cm4gczsKK30KKworR1NUX0NIRUNLX01BSU4gKGdzdF9jYXBzKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RjaGlsZHByb3h5LmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0Y2hpbGRwcm94eS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MjQ5ZmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9nc3QvZ3N0Y2hpbGRwcm94eS5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA5IFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KKyAqCisgKiBnc3RjaGlsZHByb3h5LmM6IFVuaXQgdGVzdCBmb3IgR3N0Q2hpbGRQcm94eSBpbnRlcmZhY2UKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2dldCkKK3sKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmU7CisgIGdjaGFyICpuYW1lOworCisgIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoImZvbyIpOworICBmYWlsX3VubGVzcyAocGlwZWxpbmUgIT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgcGlwZWxpbmUiKTsKKworICBnc3RfY2hpbGRfcHJveHlfZ2V0IChHU1RfT0JKRUNUIChwaXBlbGluZSksICJuYW1lIiwgJm5hbWUsIE5VTEwpOworICBmYWlsX2lmIChnX3N0cmNtcDAgKCJmb28iLCBuYW1lKSk7CisgIGdfZnJlZSAobmFtZSk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2NoaWxkX2dldCkKK3sKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICplbGVtOworICBnY2hhciAqbmFtZTsKKworICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKE5VTEwpOworICBmYWlsX3VubGVzcyAocGlwZWxpbmUgIT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgcGlwZWxpbmUiKTsKKworICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzcmMiKTsKKyAgZmFpbF9pZiAoZWxlbSA9PSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBmYWtlc3JjIik7CisKKyAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgZWxlbSk7CisKKyAgZ3N0X2NoaWxkX3Byb3h5X2dldCAoR1NUX09CSkVDVCAocGlwZWxpbmUpLCAic3JjOjpuYW1lIiwgJm5hbWUsIE5VTEwpOworICBmYWlsX2lmIChnX3N0cmNtcDAgKCJzcmMiLCBuYW1lKSk7CisgIGdfZnJlZSAobmFtZSk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKworc3RhdGljIFN1aXRlICoKK2dzdF9jaGlsZF9wcm94eV9zdWl0ZSAodm9pZCkKK3sKKyAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RDaGlsZFByb3h5Iik7CisgIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImNoaWxkIHByb3h5IHRlc3RzIik7CisKKyAgdGNhc2Vfc2V0X3RpbWVvdXQgKHRjX2NoYWluLCAwKTsKKworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2dldCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9jaGlsZF9nZXQpOworCisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoZ3N0X2NoaWxkX3Byb3h5KTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RjbG9jay5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdGNsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThmMzc0ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RjbG9jay5jCkBAIC0wLDAgKzEsOTMgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRlY2luYUBjb2xsYWJvcmEuY28udWs+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgorCitzdGF0aWMgdm9pZAord2Vha19ub3RpZnkgKGdwb2ludGVyIGRhdGEsIEdPYmplY3QgKiBvYmplY3QpCit7CisgICooZ2Jvb2xlYW4gKikgZGF0YSA9IEZBTFNFOworfQorCitzdGF0aWMgR3N0Q2xvY2tSZXR1cm4KK2Zha2Vfd2FpdF9hc3luYyAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0Q2xvY2tFbnRyeSAqIGVudHJ5KQoreworICByZXR1cm4gR1NUX0NMT0NLX09LOworfQorCitHU1RfU1RBUlRfVEVTVCAodGVzdF9zZXRfbWFzdGVyX3JlZmNvdW50KQoreworICBHc3RDbG9jayAqbWFzdGVyLCAqc2xhdmU7CisgIEdzdENsb2NrQ2xhc3MgKmtsYXNzOworICBnYm9vbGVhbiBtYXN0ZXJfYWxpdmUgPSBUUlVFOworCisgIC8qIGNyZWF0ZSBtYXN0ZXIgYW5kIHNsYXZlICovCisgIG1hc3RlciA9IGdfb2JqZWN0X25ldyAoR1NUX1RZUEVfQ0xPQ0ssICJuYW1lIiwgIlRlc3RDbG9ja01hc3RlciIsIE5VTEwpOworICBzbGF2ZSA9IGdfb2JqZWN0X25ldyAoR1NUX1RZUEVfQ0xPQ0ssICJuYW1lIiwgIlRlc3RDbG9ja01hc3RlciIsIE5VTEwpOworICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChzbGF2ZSwgR1NUX0NMT0NLX0ZMQUdfQ0FOX1NFVF9NQVNURVIpOworCisgIC8qIGxvb2sgbWEhIGknbSBkb2luZyBtb25rZXkgcGF0Y2hpbmcgaW4gQyAqLworICBrbGFzcyA9IEdTVF9DTE9DS19HRVRfQ0xBU1MgKG1hc3Rlcik7CisgIGtsYXNzLT53YWl0X2FzeW5jID0gZmFrZV93YWl0X2FzeW5jOworCisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9PQkpFQ1RfUkVGQ09VTlQgKG1hc3RlciksIDEpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfT0JKRUNUX1JFRkNPVU5UIChzbGF2ZSksIDEpOworCisgIGdfb2JqZWN0X3dlYWtfcmVmIChHX09CSkVDVCAobWFzdGVyKSwgd2Vha19ub3RpZnksICZtYXN0ZXJfYWxpdmUpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfT0JKRUNUX1JFRkNPVU5UIChtYXN0ZXIpLCAxKTsKKworICBnc3RfY2xvY2tfc2V0X21hc3RlciAoc2xhdmUsIG1hc3Rlcik7CisgIC8qIHNsYXZlIHN0b3JlcyBtYXN0ZXIgaW4gc2xhdmUtPm1hc3RlciAqLworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfT0JKRUNUX1JFRkNPVU5UIChtYXN0ZXIpLCAyKTsKKyAgLyogbWFzdGVyIHN0b3JlcyBhIHJlZiB0byBzbGF2ZSBpbiBtYXN0ZXItPmNsb2NraWQgKi8KKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX09CSkVDVF9SRUZDT1VOVCAoc2xhdmUpLCAyKTsKKworICAvKiBkaXNjYXJkIG91ciByZWYgKi8KKyAgZ3N0X29iamVjdF91bnJlZiAobWFzdGVyKTsKKworICAvKiBtYXN0ZXIgc2hvdWxkIHN0aWxsIGJlIHJlZmZlZCBpbnNpZGUgc2xhdmUgKi8KKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX09CSkVDVF9SRUZDT1VOVCAobWFzdGVyKSwgMSk7CisgIGZhaWxfdW5sZXNzIChtYXN0ZXJfYWxpdmUpOworCisgIC8qIGRyb3AgdGhlIGxhc3QgcmVmIHRvIG1hdGVyICovCisgIGdzdF9jbG9ja19zZXRfbWFzdGVyIChzbGF2ZSwgTlVMTCk7CisKKyAgZmFpbF9pZiAobWFzdGVyX2FsaXZlKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX09CSkVDVF9SRUZDT1VOVCAoc2xhdmUpLCAxKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChzbGF2ZSk7CisKKyAga2xhc3MtPndhaXRfYXN5bmMgPSBOVUxMOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBTdWl0ZSAqCitnc3RfY2xvY2tfc3VpdGUgKHZvaWQpCit7CisgIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0Q2xvY2siKTsKKyAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiY2xvY2siKTsKKworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NldF9tYXN0ZXJfcmVmY291bnQpOworCisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoZ3N0X2Nsb2NrKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RjcHAuY2MgYi90ZXN0cy9jaGVjay9nc3QvZ3N0Y3BwLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YWFmNzMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9nc3QvZ3N0Y3BwLmNjCkBAIC0wLDAgKzEsMiBAQAorI2luY2x1ZGUgImdzdC5jIgorCmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QvZ3N0ZGF0ZXRpbWUuYyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RkYXRldGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYzY5MmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9nc3QvZ3N0ZGF0ZXRpbWUuYwpAQCAtMCwwICsxLDMwNiBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ2hyaXN0aWFuIEhlcmdlcnQgPGNocmlzQGRyb25lbGFicy5jb20+CisgKgorICogZ3N0ZGF0ZXRpbWUuYzogVW5pdCB0ZXN0cyBmb3IgR3N0RGF0ZVRpbWUKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgorCisjZGVmaW5lIEFTU0VSVF9USU1FKGR0LEgsTSxTKSBHX1NUTVRfU1RBUlQgeyBcCisgIGFzc2VydF9lcXVhbHNfaW50ICgoSCksIGdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIgKChkdCkpKTsgXAorICBhc3NlcnRfZXF1YWxzX2ludCAoKE0pLCBnc3RfZGF0ZV90aW1lX2dldF9taW51dGUgKChkdCkpKTsgXAorICBhc3NlcnRfZXF1YWxzX2ludCAoKFMpLCBnc3RfZGF0ZV90aW1lX2dldF9zZWNvbmQgKChkdCkpKTsgXAorfSBHX1NUTVRfRU5ECisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X0dzdERhdGVUaW1lX25vdykKK3sKKyAgR3N0RGF0ZVRpbWUgKmR0OworICB0aW1lX3QgdDsKKyAgc3RydWN0IHRtIHRtOworCisgIG1lbXNldCAoJnRtLCAwLCBzaXplb2YgKHRtKSk7CisgIHQgPSB0aW1lIChOVUxMKTsKKyNpZmRlZiBIQVZFX0xPQ0FMVElNRV9SCisgIGxvY2FsdGltZV9yICgmdCwgJnRtKTsKKyNlbHNlCisgIG1lbWNweSAoJnRtLCBsb2NhbHRpbWUgKCZ0KSwgc2l6ZW9mIChzdHJ1Y3QgdG0pKTsKKyNlbmRpZgorICBkdCA9IGdzdF9kYXRlX3RpbWVfbmV3X25vd19sb2NhbF90aW1lICgpOworICBhc3NlcnRfZXF1YWxzX2ludCAoZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoZHQpLCAxOTAwICsgdG0udG1feWVhcik7CisgIGFzc2VydF9lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoZHQpLCAxICsgdG0udG1fbW9uKTsKKyAgYXNzZXJ0X2VxdWFsc19pbnQgKGdzdF9kYXRlX3RpbWVfZ2V0X2RheSAoZHQpLCB0bS50bV9tZGF5KTsKKyAgYXNzZXJ0X2VxdWFsc19pbnQgKGdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIgKGR0KSwgdG0udG1faG91cik7CisgIGFzc2VydF9lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF9taW51dGUgKGR0KSwgdG0udG1fbWluKTsKKyAgYXNzZXJ0X2VxdWFsc19pbnQgKGdzdF9kYXRlX3RpbWVfZ2V0X3NlY29uZCAoZHQpLCB0bS50bV9zZWMpOworICBnc3RfZGF0ZV90aW1lX3VucmVmIChkdCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfR3N0RGF0ZVRpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF9sb2NhbF90aW1lKQoreworICBHc3REYXRlVGltZSAqZHQ7CisgIHN0cnVjdCB0bSB0bTsKKyAgdGltZV90IHQ7CisKKyAgbWVtc2V0ICgmdG0sIDAsIHNpemVvZiAodG0pKTsKKyAgdCA9IHRpbWUgKE5VTEwpOworI2lmZGVmIEhBVkVfTE9DQUxUSU1FX1IKKyAgbG9jYWx0aW1lX3IgKCZ0LCAmdG0pOworI2Vsc2UKKyAgbWVtY3B5ICgmdG0sIGxvY2FsdGltZSAoJnQpLCBzaXplb2YgKHN0cnVjdCB0bSkpOworI2VuZGlmCisgIGR0ID0gZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV91bml4X2Vwb2NoX2xvY2FsX3RpbWUgKHQpOworICBhc3NlcnRfZXF1YWxzX2ludCAoZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoZHQpLCAxOTAwICsgdG0udG1feWVhcik7CisgIGFzc2VydF9lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoZHQpLCAxICsgdG0udG1fbW9uKTsKKyAgYXNzZXJ0X2VxdWFsc19pbnQgKGdzdF9kYXRlX3RpbWVfZ2V0X2RheSAoZHQpLCB0bS50bV9tZGF5KTsKKyAgYXNzZXJ0X2VxdWFsc19pbnQgKGdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIgKGR0KSwgdG0udG1faG91cik7CisgIGFzc2VydF9lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF9taW51dGUgKGR0KSwgdG0udG1fbWluKTsKKyAgYXNzZXJ0X2VxdWFsc19pbnQgKGdzdF9kYXRlX3RpbWVfZ2V0X3NlY29uZCAoZHQpLCB0bS50bV9zZWMpOworICBnc3RfZGF0ZV90aW1lX3VucmVmIChkdCk7CisKKyAgbWVtc2V0ICgmdG0sIDAsIHNpemVvZiAodG0pKTsKKyAgdG0udG1feWVhciA9IDcwOworICB0bS50bV9tZGF5ID0gMTsKKyAgdG0udG1fbW9uID0gMDsKKyAgdG0udG1faG91ciA9IDA7CisgIHRtLnRtX21pbiA9IDA7CisgIHRtLnRtX3NlYyA9IDA7CisgIHQgPSBta3RpbWUgKCZ0bSk7CisgIGR0ID0gZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV91bml4X2Vwb2NoX2xvY2FsX3RpbWUgKHQpOworICBhc3NlcnRfZXF1YWxzX2ludCAoZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoZHQpLCAxOTcwKTsKKyAgYXNzZXJ0X2VxdWFsc19pbnQgKGdzdF9kYXRlX3RpbWVfZ2V0X21vbnRoIChkdCksIDEpOworICBhc3NlcnRfZXF1YWxzX2ludCAoZ3N0X2RhdGVfdGltZV9nZXRfZGF5IChkdCksIDEpOworICBhc3NlcnRfZXF1YWxzX2ludCAoZ3N0X2RhdGVfdGltZV9nZXRfaG91ciAoZHQpLCAwKTsKKyAgYXNzZXJ0X2VxdWFsc19pbnQgKGdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZSAoZHQpLCAwKTsKKyAgYXNzZXJ0X2VxdWFsc19pbnQgKGdzdF9kYXRlX3RpbWVfZ2V0X3NlY29uZCAoZHQpLCAwKTsKKyAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZHQpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfR3N0RGF0ZVRpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF91dGMpCit7CisgIEdzdERhdGVUaW1lICpkdDsKKyAgc3RydWN0IHRtIHRtOworICB0aW1lX3QgdDsKKworICBtZW1zZXQgKCZ0bSwgMCwgc2l6ZW9mICh0bSkpOworICB0ID0gdGltZSAoTlVMTCk7CisjaWZkZWYgSEFWRV9HTVRJTUVfUgorICBnbXRpbWVfciAoJnQsICZ0bSk7CisjZWxzZQorICBtZW1jcHkgKCZ0bSwgZ210aW1lICgmdCksIHNpemVvZiAoc3RydWN0IHRtKSk7CisjZW5kaWYKKyAgZHQgPSBnc3RfZGF0ZV90aW1lX25ld19mcm9tX3VuaXhfZXBvY2hfdXRjICh0KTsKKyAgYXNzZXJ0X2VxdWFsc19pbnQgKGdzdF9kYXRlX3RpbWVfZ2V0X3llYXIgKGR0KSwgMTkwMCArIHRtLnRtX3llYXIpOworICBhc3NlcnRfZXF1YWxzX2ludCAoZ3N0X2RhdGVfdGltZV9nZXRfbW9udGggKGR0KSwgMSArIHRtLnRtX21vbik7CisgIGFzc2VydF9lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF9kYXkgKGR0KSwgdG0udG1fbWRheSk7CisgIGFzc2VydF9lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF9ob3VyIChkdCksIHRtLnRtX2hvdXIpOworICBhc3NlcnRfZXF1YWxzX2ludCAoZ3N0X2RhdGVfdGltZV9nZXRfbWludXRlIChkdCksIHRtLnRtX21pbik7CisgIGFzc2VydF9lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF9zZWNvbmQgKGR0KSwgdG0udG1fc2VjKTsKKyAgYXNzZXJ0X2VxdWFsc19pbnQgKGdzdF9kYXRlX3RpbWVfZ2V0X3RpbWVfem9uZV9vZmZzZXQgKGR0KSwgMCk7CisgIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGR0KTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9Hc3REYXRlVGltZV9nZXRfZG15KQoreworICBHc3REYXRlVGltZSAqZHQ7CisgIHRpbWVfdCB0OworICBzdHJ1Y3QgdG0gdHQ7CisKKyAgdCA9IHRpbWUgKE5VTEwpOworI2lmZGVmIEhBVkVfTE9DQUxUSU1FX1IKKyAgbG9jYWx0aW1lX3IgKCZ0LCAmdHQpOworI2Vsc2UKKyAgbWVtY3B5ICgmdHQsIGxvY2FsdGltZSAoJnQpLCBzaXplb2YgKHN0cnVjdCB0bSkpOworI2VuZGlmCisgIGR0ID0gZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV91bml4X2Vwb2NoX2xvY2FsX3RpbWUgKHQpOworICBhc3NlcnRfZXF1YWxzX2ludCAoZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoZHQpLCB0dC50bV95ZWFyICsgMTkwMCk7CisgIGFzc2VydF9lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoZHQpLCB0dC50bV9tb24gKyAxKTsKKyAgYXNzZXJ0X2VxdWFsc19pbnQgKGdzdF9kYXRlX3RpbWVfZ2V0X2RheSAoZHQpLCB0dC50bV9tZGF5KTsKKworICBnc3RfZGF0ZV90aW1lX3VucmVmIChkdCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfR3N0RGF0ZVRpbWVfZ2V0X2hvdXIpCit7CisgIEdzdERhdGVUaW1lICpkdDsKKworICBkdCA9IGdzdF9kYXRlX3RpbWVfbmV3ICgwLCAyMDA5LCAxMCwgMTksIDE1LCAxMywgMTEpOworICBhc3NlcnRfZXF1YWxzX2ludCAoMTUsIGdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIgKGR0KSk7CisgIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGR0KTsKKworICBkdCA9IGdzdF9kYXRlX3RpbWVfbmV3ICgwLCAxMDAsIDEwLCAxOSwgMSwgMCwgMCk7CisgIGFzc2VydF9lcXVhbHNfaW50ICgxLCBnc3RfZGF0ZV90aW1lX2dldF9ob3VyIChkdCkpOworICBnc3RfZGF0ZV90aW1lX3VucmVmIChkdCk7CisKKyAgZHQgPSBnc3RfZGF0ZV90aW1lX25ldyAoMCwgMTAwLCAxMCwgMTksIDAsIDAsIDApOworICBhc3NlcnRfZXF1YWxzX2ludCAoMCwgZ3N0X2RhdGVfdGltZV9nZXRfaG91ciAoZHQpKTsKKyAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZHQpOworCisgIGR0ID0gZ3N0X2RhdGVfdGltZV9uZXcgKDAsIDEwMCwgMTAsIDEsIDIzLCA1OSwgNTkpOworICBhc3NlcnRfZXF1YWxzX2ludCAoMjMsIGdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIgKGR0KSk7CisgIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGR0KTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9Hc3REYXRlVGltZV9nZXRfbWljcm9zZWNvbmQpCit7CisgIEdUaW1lVmFsIHR2OworICBHc3REYXRlVGltZSAqZHQ7CisKKyAgZ19nZXRfY3VycmVudF90aW1lICgmdHYpOworICBkdCA9IGdzdF9kYXRlX3RpbWVfbmV3ICgwLCAyMDEwLCA3LCAxNSwgMTEsIDEyLAorICAgICAgMTMgKyAodHYudHZfdXNlYyAvIDEwMDAwMDAuMCkpOworICBhc3NlcnRfZXF1YWxzX2ludCAodHYudHZfdXNlYywgZ3N0X2RhdGVfdGltZV9nZXRfbWljcm9zZWNvbmQgKGR0KSk7CisgIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGR0KTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9Hc3REYXRlVGltZV9nZXRfbWludXRlKQoreworICBHc3REYXRlVGltZSAqZHQ7CisKKyAgZHQgPSBnc3RfZGF0ZV90aW1lX25ldyAoMCwgMjAwOSwgMTIsIDEsIDEsIDMxLCAwKTsKKyAgYXNzZXJ0X2VxdWFsc19pbnQgKDMxLCBnc3RfZGF0ZV90aW1lX2dldF9taW51dGUgKGR0KSk7CisgIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGR0KTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9Hc3REYXRlVGltZV9nZXRfc2Vjb25kKQoreworICBHc3REYXRlVGltZSAqZHQ7CisKKyAgZHQgPSBnc3RfZGF0ZV90aW1lX25ldyAoMCwgMjAwOSwgMTIsIDEsIDEsIDMxLCA0NCk7CisgIGFzc2VydF9lcXVhbHNfaW50ICg0NCwgZ3N0X2RhdGVfdGltZV9nZXRfc2Vjb25kIChkdCkpOworICBnc3RfZGF0ZV90aW1lX3VucmVmIChkdCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfR3N0RGF0ZVRpbWVfbmV3X2Z1bGwpCit7CisgIEdzdERhdGVUaW1lICpkdDsKKworICBkdCA9IGdzdF9kYXRlX3RpbWVfbmV3ICgwLCAyMDA5LCAxMiwgMTEsIDEyLCAxMSwgMTAuMDAxMjM0KTsKKyAgYXNzZXJ0X2VxdWFsc19pbnQgKDIwMDksIGdzdF9kYXRlX3RpbWVfZ2V0X3llYXIgKGR0KSk7CisgIGFzc2VydF9lcXVhbHNfaW50ICgxMiwgZ3N0X2RhdGVfdGltZV9nZXRfbW9udGggKGR0KSk7CisgIGFzc2VydF9lcXVhbHNfaW50ICgxMSwgZ3N0X2RhdGVfdGltZV9nZXRfZGF5IChkdCkpOworICBhc3NlcnRfZXF1YWxzX2ludCAoMTIsIGdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIgKGR0KSk7CisgIGFzc2VydF9lcXVhbHNfaW50ICgxMSwgZ3N0X2RhdGVfdGltZV9nZXRfbWludXRlIChkdCkpOworICBhc3NlcnRfZXF1YWxzX2ludCAoMTAsIGdzdF9kYXRlX3RpbWVfZ2V0X3NlY29uZCAoZHQpKTsKKyAgYXNzZXJ0X2VxdWFsc19pbnQgKDEyMzQsIGdzdF9kYXRlX3RpbWVfZ2V0X21pY3Jvc2Vjb25kIChkdCkpOworICBhc3NlcnRfZXF1YWxzX2Zsb2F0ICgwLCBnc3RfZGF0ZV90aW1lX2dldF90aW1lX3pvbmVfb2Zmc2V0IChkdCkpOworICBnc3RfZGF0ZV90aW1lX3VucmVmIChkdCk7CisKKyAgZHQgPSBnc3RfZGF0ZV90aW1lX25ldyAoMi41LCAyMDEwLCAzLCAyOSwgMTIsIDEzLCAxNi41KTsKKyAgYXNzZXJ0X2VxdWFsc19pbnQgKDIwMTAsIGdzdF9kYXRlX3RpbWVfZ2V0X3llYXIgKGR0KSk7CisgIGFzc2VydF9lcXVhbHNfaW50ICgzLCBnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoZHQpKTsKKyAgYXNzZXJ0X2VxdWFsc19pbnQgKDI5LCBnc3RfZGF0ZV90aW1lX2dldF9kYXkgKGR0KSk7CisgIGFzc2VydF9lcXVhbHNfaW50ICgxMiwgZ3N0X2RhdGVfdGltZV9nZXRfaG91ciAoZHQpKTsKKyAgYXNzZXJ0X2VxdWFsc19pbnQgKDEzLCBnc3RfZGF0ZV90aW1lX2dldF9taW51dGUgKGR0KSk7CisgIGFzc2VydF9lcXVhbHNfaW50ICgxNiwgZ3N0X2RhdGVfdGltZV9nZXRfc2Vjb25kIChkdCkpOworICBhc3NlcnRfZXF1YWxzX2ludCAoNTAwMDAwLCBnc3RfZGF0ZV90aW1lX2dldF9taWNyb3NlY29uZCAoZHQpKTsKKyAgYXNzZXJ0X2VxdWFsc19mbG9hdCAoMi41LCBnc3RfZGF0ZV90aW1lX2dldF90aW1lX3pvbmVfb2Zmc2V0IChkdCkpOworICBnc3RfZGF0ZV90aW1lX3VucmVmIChkdCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfR3N0RGF0ZVRpbWVfdXRjX25vdykKK3sKKyAgR3N0RGF0ZVRpbWUgKmR0OworICB0aW1lX3QgdDsKKyAgc3RydWN0IHRtIHRtOworCisgIHQgPSB0aW1lIChOVUxMKTsKKyNpZmRlZiBIQVZFX0dNVElNRV9SCisgIGdtdGltZV9yICgmdCwgJnRtKTsKKyNlbHNlCisgIG1lbWNweSAoJnRtLCBnbXRpbWUgKCZ0KSwgc2l6ZW9mIChzdHJ1Y3QgdG0pKTsKKyNlbmRpZgorICBkdCA9IGdzdF9kYXRlX3RpbWVfbmV3X25vd191dGMgKCk7CisgIGFzc2VydF9lcXVhbHNfaW50ICh0bS50bV95ZWFyICsgMTkwMCwgZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoZHQpKTsKKyAgYXNzZXJ0X2VxdWFsc19pbnQgKHRtLnRtX21vbiArIDEsIGdzdF9kYXRlX3RpbWVfZ2V0X21vbnRoIChkdCkpOworICBhc3NlcnRfZXF1YWxzX2ludCAodG0udG1fbWRheSwgZ3N0X2RhdGVfdGltZV9nZXRfZGF5IChkdCkpOworICBhc3NlcnRfZXF1YWxzX2ludCAodG0udG1faG91ciwgZ3N0X2RhdGVfdGltZV9nZXRfaG91ciAoZHQpKTsKKyAgYXNzZXJ0X2VxdWFsc19pbnQgKHRtLnRtX21pbiwgZ3N0X2RhdGVfdGltZV9nZXRfbWludXRlIChkdCkpOworICBhc3NlcnRfZXF1YWxzX2ludCAodG0udG1fc2VjLCBnc3RfZGF0ZV90aW1lX2dldF9zZWNvbmQgKGR0KSk7CisgIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGR0KTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9Hc3REYXRlVGltZV9nZXRfdXRjX29mZnNldCkKK3sKKyAgR3N0RGF0ZVRpbWUgKmR0OworICBnZmxvYXQgdHM7CisgIHN0cnVjdCB0bSB0bTsKKyAgdGltZV90IHQ7CisKKyAgdCA9IHRpbWUgKE5VTEwpOworICBtZW1zZXQgKCZ0bSwgMCwgc2l6ZW9mICh0bSkpOworI2lmZGVmIEhBVkVfTE9DQUxUSU1FX1IKKyAgbG9jYWx0aW1lX3IgKCZ0LCAmdG0pOworI2Vsc2UKKyAgbWVtY3B5ICgmdG0sIGxvY2FsdGltZSAoJnQpLCBzaXplb2YgKHN0cnVjdCB0bSkpOworI2VuZGlmCisKKyAgZHQgPSBnc3RfZGF0ZV90aW1lX25ld19ub3dfbG9jYWxfdGltZSAoKTsKKyAgdHMgPSBnc3RfZGF0ZV90aW1lX2dldF90aW1lX3pvbmVfb2Zmc2V0IChkdCk7CisgIGFzc2VydF9lcXVhbHNfaW50ICh0cywgdG0udG1fZ210b2ZmIC8gMzYwMC4wKTsKKyAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZHQpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBTdWl0ZSAqCitnc3RfZGF0ZV90aW1lX3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdERhdGVUaW1lIik7CisgIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKKworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X0dzdERhdGVUaW1lX2dldF9kbXkpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfR3N0RGF0ZVRpbWVfZ2V0X2hvdXIpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfR3N0RGF0ZVRpbWVfZ2V0X21pY3Jvc2Vjb25kKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X0dzdERhdGVUaW1lX2dldF9taW51dGUpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfR3N0RGF0ZVRpbWVfZ2V0X3NlY29uZCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9Hc3REYXRlVGltZV9nZXRfdXRjX29mZnNldCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9Hc3REYXRlVGltZV9uZXdfZnJvbV91bml4X2Vwb2NoX2xvY2FsX3RpbWUpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfR3N0RGF0ZVRpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF91dGMpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfR3N0RGF0ZVRpbWVfbmV3X2Z1bGwpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfR3N0RGF0ZVRpbWVfbm93KTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X0dzdERhdGVUaW1lX3V0Y19ub3cpOworCisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoZ3N0X2RhdGVfdGltZSk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QvZ3N0ZWxlbWVudC5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdGVsZW1lbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmI0NWRhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hlY2svZ3N0L2dzdGVsZW1lbnQuYwpAQCAtMCwwICsxLDM2NyBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorICoKKyAqIGdzdGVsZW1lbnQuYzogVW5pdCB0ZXN0IGZvciBHc3RFbGVtZW50CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgorCitHU1RfU1RBUlRfVEVTVCAodGVzdF9hZGRfcmVtb3ZlX3BhZCkKK3sKKyAgR3N0RWxlbWVudCAqZTsKKyAgR3N0UGFkICpwOworCisgIC8qIGdldHRpbmcgYW4gZXhpc3RpbmcgZWxlbWVudCBjbGFzcyBpcyBjaGVhdGluZywgYnV0IGVhc2llciAqLworICBlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzb3VyY2UiKTsKKworICAvKiBjcmVhdGUgYSBuZXcgZmxvYXRpbmcgcGFkIHdpdGggcmVmY291bnQgMSAqLworICBwID0gZ3N0X3BhZF9uZXcgKCJzb3VyY2UiLCBHU1RfUEFEX1NSQyk7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHAsICJwYWQiLCAxKTsKKyAgLyogcmVmIGl0IGZvciBvdXJzZWx2ZXMgKi8KKyAgZ3N0X29iamVjdF9yZWYgKHApOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwLCAicGFkIiwgMik7CisgIC8qIGFkZGluZyBpdCBzaW5rcyB0aGUgcGFkIC0+IG5vdCBmbG9hdGluZywgc2FtZSByZWZjb3VudCAqLworICBnc3RfZWxlbWVudF9hZGRfcGFkIChlLCBwKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocCwgInBhZCIsIDIpOworCisgIC8qIHJlbW92aW5nIGl0IHJlZHVjZXMgdGhlIHJlZmNvdW50ICovCisgIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQgKGUsIHApOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwLCAicGFkIiwgMSk7CisKKyAgLyogY2xlYW4gdXAgb3VyIG93biByZWZlcmVuY2UgKi8KKyAgZ3N0X29iamVjdF91bnJlZiAocCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2FkZF9wYWRfdW5yZWZfZWxlbWVudCkKK3sKKyAgR3N0RWxlbWVudCAqZTsKKyAgR3N0UGFkICpwOworCisgIC8qIGdldHRpbmcgYW4gZXhpc3RpbmcgZWxlbWVudCBjbGFzcyBpcyBjaGVhdGluZywgYnV0IGVhc2llciAqLworICBlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzb3VyY2UiKTsKKworICAvKiBjcmVhdGUgYSBuZXcgZmxvYXRpbmcgcGFkIHdpdGggcmVmY291bnQgMSAqLworICBwID0gZ3N0X3BhZF9uZXcgKCJzb3VyY2UiLCBHU1RfUEFEX1NSQyk7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHAsICJwYWQiLCAxKTsKKyAgLyogcmVmIGl0IGZvciBvdXJzZWx2ZXMgKi8KKyAgZ3N0X29iamVjdF9yZWYgKHApOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwLCAicGFkIiwgMik7CisgIC8qIGFkZGluZyBpdCBzaW5rcyB0aGUgcGFkIC0+IG5vdCBmbG9hdGluZywgc2FtZSByZWZjb3VudCAqLworICBnc3RfZWxlbWVudF9hZGRfcGFkIChlLCBwKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocCwgInBhZCIsIDIpOworCisgIC8qIHVucmVmZmluZyB0aGUgZWxlbWVudCBzaG91bGQgY2xlYW4gaXQgdXAgKi8KKyAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAoZSkpOworCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHAsICJwYWQiLCAxKTsKKworICAvKiBjbGVhbiB1cCBvdXIgb3duIHJlZmVyZW5jZSAqLworICBnc3Rfb2JqZWN0X3VucmVmIChwKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9lcnJvcl9ub19idXMpCit7CisgIEdzdEVsZW1lbnQgKmU7CisgIEdzdEJ1cyAqYnVzOworCisgIGUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNvdXJjZSIpOworCisgIC8qIGdldCB0aGUgYnVzLCBzaG91bGQgYmUgTlVMTCAqLworICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChlKTsKKyAgZmFpbF9pZiAoYnVzICE9IE5VTEwpOworCisgIC8qIEkgZG9uJ3Qgd2FudCBlcnJvcnMgc2hvd24gKi8KKyAgZ3N0X2RlYnVnX3NldF9kZWZhdWx0X3RocmVzaG9sZCAoR1NUX0xFVkVMX05PTkUpOworCisgIEdTVF9FTEVNRU5UX0VSUk9SIChlLCBSRVNPVVJDRSwgT1BFTl9SRUFELCAoIkkgY291bGQgbm90IHJlYWQiKSwgKCJkZWJ1ZyIpKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChlKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiBsaW5rIGFuZCBydW4gdHdvIGVsZW1lbnRzIHdpdGhvdXQgcHV0dGluZyB0aGVtIGluIGEgcGlwZWxpbmUgKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X2xpbmspCit7CisgIEdzdEVsZW1lbnQgKnNyYywgKnNpbms7CisKKyAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzb3VyY2UiKTsKKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGlua19wYWRzIChzcmMsICJzcmMiLCBzaW5rLCAic2luayIpKTsKKworICAvKiBkbyBzaW5rIHRvIHNvdXJjZSBzdGF0ZSBjaGFuZ2UgKi8KKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzaW5rLCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcmMsIEdTVF9TVEFURV9QQVVTRUQpOworCisgIC8qIHdhaXQgZm9yIHByZXJvbGwgKi8KKyAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChzaW5rLCBOVUxMLCBOVUxMLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKworICAvKiBwbGF5IHNvbWUgbW9yZSAqLworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNpbmssIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcmMsIEdTVF9TVEFURV9QTEFZSU5HKTsKKworICBnX3VzbGVlcCAoR19VU0VDX1BFUl9TRUMpOworCisgIC8qIGFuZCBzdG9wICovCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2luaywgR1NUX1NUQVRFX1BBVVNFRCk7CisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3JjLCBHU1RfU1RBVEVfUEFVU0VEKTsKKworICAvKiB3YWl0IGZvciBwcmVyb2xsICovCisgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoc2luaywgTlVMTCwgTlVMTCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzaW5rLCBHU1RfU1RBVEVfTlVMTCk7CisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3JjLCBHU1RfU1RBVEVfTlVMTCk7CisKKyAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChzaW5rLCBOVUxMLCBOVUxMLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKyAgZ191c2xlZXAgKEdfVVNFQ19QRVJfU0VDIC8gMik7CisKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc2luaywgInNpbmsiLCAxKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjLCAic3JjIiwgMSk7CisgIGdzdF9lbGVtZW50X3VubGlua19wYWRzIChzcmMsICJzcmMiLCBzaW5rLCAic2luayIpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rLCAic2luayIsIDEpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmMsICJzcmMiLCAxKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChzcmMpOworICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiBsaW5raW5nIHR3byBlbGVtZW50cyB3aXRob3V0IHBhZHMgc2hvdWxkIGZhaWwgKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X2xpbmtfbm9fcGFkcykKK3sKKyAgR3N0RWxlbWVudCAqc3JjLCAqc2luazsKKworICBzcmMgPSBnc3RfYmluX25ldyAoInNyYyIpOworICBzaW5rID0gZ3N0X2Jpbl9uZXcgKCJzaW5rIik7CisKKyAgZmFpbF9pZiAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBzaW5rKSk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAoc3JjKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc2luayk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdFRlc3RFbGVtZW50Cit7CisgIEdzdEVsZW1lbnQgcGFyZW50OworCit9IEdzdFRlc3RFbGVtZW50OworCit0eXBlZGVmIHN0cnVjdCBfR3N0VGVzdEVsZW1lbnRDbGFzcworeworICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50OworCit9IEdzdFRlc3RFbGVtZW50Q2xhc3M7CisKK3N0YXRpYyB2b2lkCitnc3RfdGVzdF9lbGVtZW50X2NsYXNzX2luaXQgKEdzdFRlc3RFbGVtZW50Q2xhc3MgKiBrbGFzcykKK3sKKyAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKKyAgR3N0UGFkVGVtcGxhdGUgKnRlbXBsOworCisgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YSAoZWxlbWVudF9jbGFzcywgIlRlc3QgZWxlbWVudCIsCisgICAgICAiRWxlbWVudCIsICJEb2VzIG5vdGhpbmciLCAiRm9vIEJhciA8Zm9vQGJhci5jb20+Iik7CisKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZV9saXN0CisgICAgICAgICAgKGVsZW1lbnRfY2xhc3MpKSwgMCk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCisgICAgICAgICAgInRlc3QiKSA9PSBOVUxMKTsKKworICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAorICAgICAgZ3N0X3BhZF90ZW1wbGF0ZV9uZXcgKCJ0ZXN0IiwgR1NUX1BBRF9TUkMsIEdTVF9QQURfQUxXQVlTLCBHU1RfQ0FQU19BTlkpKTsKKworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlX2xpc3QKKyAgICAgICAgICAoZWxlbWVudF9jbGFzcykpLCAxKTsKKworICBmYWlsX3VubGVzcyAoKHRlbXBsID0KKyAgICAgICAgICBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLCAidGVzdCIpKSAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2FueSAodGVtcGwtPmNhcHMpKTsKKworICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAorICAgICAgZ3N0X3BhZF90ZW1wbGF0ZV9uZXcgKCJ0ZXN0MiIsIEdTVF9QQURfU1JDLCBHU1RfUEFEX0FMV0FZUywKKyAgICAgICAgICBHU1RfQ0FQU19BTlkpKTsKKworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlX2xpc3QKKyAgICAgICAgICAoZWxlbWVudF9jbGFzcykpLCAyKTsKKworICBmYWlsX3VubGVzcyAoKHRlbXBsID0KKyAgICAgICAgICBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLCAidGVzdDIiKSkgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19hbnkgKHRlbXBsLT5jYXBzKSk7CisKKyAgLyogQWRkICJ0ZXN0IiBhZ2Fpbiwgd2l0aCBOT05FIGNhcHMgdGhpcyB0aW1lICovCisgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCisgICAgICBnc3RfcGFkX3RlbXBsYXRlX25ldyAoInRlc3QiLCBHU1RfUEFEX1NSQywgR1NUX1BBRF9BTFdBWVMsCisgICAgICAgICAgR1NUX0NBUFNfTk9ORSkpOworCisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGVfbGlzdAorICAgICAgICAgIChlbGVtZW50X2NsYXNzKSksIDIpOworCisgIGZhaWxfdW5sZXNzICgodGVtcGwgPQorICAgICAgICAgIGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsICJ0ZXN0IikpICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZW1wdHkgKHRlbXBsLT5jYXBzKSk7Cit9CisKK3N0YXRpYyBHVHlwZQorZ3N0X3Rlc3RfZWxlbWVudF9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIEdUeXBlIGdzdF90ZXN0X2VsZW1lbnRfdHlwZSA9IEdfVFlQRV9OT05FOworCisgIGlmIChnc3RfdGVzdF9lbGVtZW50X3R5cGUgPT0gR19UWVBFX05PTkUpIHsKKyAgICBzdGF0aWMgY29uc3QgR1R5cGVJbmZvIGdzdF90ZXN0X2VsZW1lbnRfaW5mbyA9IHsKKyAgICAgIHNpemVvZiAoR3N0VGVzdEVsZW1lbnRDbGFzcyksCisgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGJhc2VfaW5pdCAqLworICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBiYXNlX2ZpbmFsaXplICovCisgICAgICAoR0NsYXNzSW5pdEZ1bmMpIGdzdF90ZXN0X2VsZW1lbnRfY2xhc3NfaW5pdCwKKyAgICAgIE5VTEwsCisgICAgICBOVUxMLAorICAgICAgc2l6ZW9mIChHc3RUZXN0RWxlbWVudCksCisgICAgICAwLAorICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBpbnN0YW5jZV9pbml0ICovCisgICAgICBOVUxMCisgICAgfTsKKworICAgIGdzdF90ZXN0X2VsZW1lbnRfdHlwZSA9IGdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMgKEdTVF9UWVBFX0VMRU1FTlQsCisgICAgICAgICJHc3RUZXN0RWxlbWVudCIsICZnc3RfdGVzdF9lbGVtZW50X2luZm8sIDApOworICB9CisgIHJldHVybiBnc3RfdGVzdF9lbGVtZW50X3R5cGU7Cit9CisKK3R5cGVkZWYgc3RydWN0IF9Hc3RUZXN0RWxlbWVudDIKK3sKKyAgR3N0VGVzdEVsZW1lbnQgcGFyZW50OworCit9IEdzdFRlc3RFbGVtZW50MjsKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdFRlc3RFbGVtZW50MkNsYXNzCit7CisgIEdzdFRlc3RFbGVtZW50Q2xhc3MgcGFyZW50OworCit9IEdzdFRlc3RFbGVtZW50MkNsYXNzOworCitzdGF0aWMgdm9pZAorZ3N0X3Rlc3RfZWxlbWVudDJfY2xhc3NfaW5pdCAoR3N0VGVzdEVsZW1lbnQyQ2xhc3MgKiBrbGFzcykKK3sKKyAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKKyAgR3N0UGFkVGVtcGxhdGUgKnRlbXBsOworCisgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YSAoZWxlbWVudF9jbGFzcywgIlRlc3QgZWxlbWVudCAyIiwKKyAgICAgICJFbGVtZW50IiwgIkRvZXMgbm90aGluZyIsICJGb28gQmFyIDxmb29AYmFyLmNvbT4iKTsKKworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlX2xpc3QKKyAgICAgICAgICAoZWxlbWVudF9jbGFzcykpLCAyKTsKKworICBmYWlsX3VubGVzcyAoKHRlbXBsID0KKyAgICAgICAgICBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLCAidGVzdCIpKSAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VtcHR5ICh0ZW1wbC0+Y2FwcykpOworCisgIGZhaWxfdW5sZXNzICgodGVtcGwgPQorICAgICAgICAgIGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsICJ0ZXN0MiIpKSAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2FueSAodGVtcGwtPmNhcHMpKTsKKworICAvKiBBZGQgInRlc3QiIHBhZCB3aXRoIEFOWSBjYXBzLCBzaG91bGQgaGF2ZSAidGVzdCIgcGFkIHdpdGggRU1QVFkgY2FwcyBiZWZvcmUgKi8KKyAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKKyAgICAgIGdzdF9wYWRfdGVtcGxhdGVfbmV3ICgidGVzdCIsIEdTVF9QQURfU1JDLCBHU1RfUEFEX0FMV0FZUywgR1NUX0NBUFNfQU5ZKSk7CisKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZV9saXN0CisgICAgICAgICAgKGVsZW1lbnRfY2xhc3MpKSwgMik7CisKKyAgZmFpbF91bmxlc3MgKCh0ZW1wbCA9CisgICAgICAgICAgZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgInRlc3QiKSkgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19hbnkgKHRlbXBsLT5jYXBzKSk7CisKKworICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAorICAgICAgZ3N0X3BhZF90ZW1wbGF0ZV9uZXcgKCJ0ZXN0NCIsIEdTVF9QQURfU1JDLCBHU1RfUEFEX0FMV0FZUywKKyAgICAgICAgICBHU1RfQ0FQU19BTlkpKTsKKworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlX2xpc3QKKyAgICAgICAgICAoZWxlbWVudF9jbGFzcykpLCAzKTsKKworICBmYWlsX3VubGVzcyAoKHRlbXBsID0KKyAgICAgICAgICBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLCAidGVzdDQiKSkgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19hbnkgKHRlbXBsLT5jYXBzKSk7Cit9CisKK3N0YXRpYyBHVHlwZQorZ3N0X3Rlc3RfZWxlbWVudDJfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBHVHlwZSBnc3RfdGVzdF9lbGVtZW50Ml90eXBlID0gR19UWVBFX05PTkU7CisKKyAgaWYgKGdzdF90ZXN0X2VsZW1lbnQyX3R5cGUgPT0gR19UWVBFX05PTkUpIHsKKyAgICBzdGF0aWMgY29uc3QgR1R5cGVJbmZvIGdzdF90ZXN0X2VsZW1lbnQyX2luZm8gPSB7CisgICAgICBzaXplb2YgKEdzdFRlc3RFbGVtZW50MkNsYXNzKSwKKyAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogYmFzZV9pbml0ICovCisgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGJhc2VfZmluYWxpemUgKi8KKyAgICAgIChHQ2xhc3NJbml0RnVuYykgZ3N0X3Rlc3RfZWxlbWVudDJfY2xhc3NfaW5pdCwKKyAgICAgIE5VTEwsCisgICAgICBOVUxMLAorICAgICAgc2l6ZW9mIChHc3RUZXN0RWxlbWVudDIpLAorICAgICAgMCwKKyAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogaW5zdGFuY2VfaW5pdCAqLworICAgICAgTlVMTAorICAgIH07CisKKyAgICBnc3RfdGVzdF9lbGVtZW50Ml90eXBlID0KKyAgICAgICAgZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyAoZ3N0X3Rlc3RfZWxlbWVudF9nZXRfdHlwZSAoKSwgIkdzdFRlc3RFbGVtZW50MiIsCisgICAgICAgICZnc3RfdGVzdF9lbGVtZW50Ml9pbmZvLCAwKTsKKyAgfQorICByZXR1cm4gZ3N0X3Rlc3RfZWxlbWVudDJfdHlwZTsKK30KKworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9wYWRfdGVtcGxhdGVzKQoreworICBHc3RUZXN0RWxlbWVudCAqdGVzdDsKKyAgR3N0VGVzdEVsZW1lbnQyICp0ZXN0MjsKKworICB0ZXN0ID0gZ19vYmplY3RfbmV3IChnc3RfdGVzdF9lbGVtZW50X2dldF90eXBlICgpLCBOVUxMKTsKKyAgdGVzdDIgPSBnX29iamVjdF9uZXcgKGdzdF90ZXN0X2VsZW1lbnQyX2dldF90eXBlICgpLCBOVUxMKTsKKworICBnX29iamVjdF91bnJlZiAodGVzdCk7CisgIGdfb2JqZWN0X3VucmVmICh0ZXN0Mik7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIFN1aXRlICoKK2dzdF9lbGVtZW50X3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdEVsZW1lbnQiKTsKKyAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZWxlbWVudCB0ZXN0cyIpOworCisgIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYWRkX3JlbW92ZV9wYWQpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYWRkX3BhZF91bnJlZl9lbGVtZW50KTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Vycm9yX25vX2J1cyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9saW5rKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2xpbmtfbm9fcGFkcyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYWRfdGVtcGxhdGVzKTsKKworICByZXR1cm4gczsKK30KKworR1NUX0NIRUNLX01BSU4gKGdzdF9lbGVtZW50KTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RlbGVtZW50ZmFjdG9yeS5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJiZGJjZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RlbGVtZW50ZmFjdG9yeS5jCkBAIC0wLDAgKzEsMTgxIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAxMSBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+CisgKgorICogZ3N0ZWxlbWVudGZhY3RvcnkuYzogVW5pdCB0ZXN0IGZvciBHc3RFbGVtZW50RmFjdG9yeQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KKworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAorICAgIEdTVF9QQURfU0lOSywKKyAgICBHU1RfUEFEX0FMV0FZUywKKyAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdy1pbnQsICIgImNoYW5uZWxzID0gKGludCkgWyAxLCA2IF0iKQorICAgICk7CitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjX3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAorICAgIEdTVF9QQURfU1JDLAorICAgIEdTVF9QQURfQUxXQVlTLAorICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtcmF3LWludCwgIiAiY2hhbm5lbHMgPSAoaW50KSBbIDEsIDYgXSIpCisgICAgKTsKKworc3RhdGljIHZvaWQKK3NldHVwX3BhZF90ZW1wbGF0ZSAoR3N0RWxlbWVudEZhY3RvcnkgKiBmYWN0b3J5LCBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqIHRtcGwpCit7CisgIEdzdFN0YXRpY1BhZFRlbXBsYXRlICp0ZW1wbGF0ZTsKKworICB0ZW1wbGF0ZSA9IGdfc2xpY2VfZHVwIChHc3RTdGF0aWNQYWRUZW1wbGF0ZSwgdG1wbCk7CisgIGZhY3RvcnktPnN0YXRpY3BhZHRlbXBsYXRlcyA9IGdfbGlzdF9hcHBlbmQgKGZhY3RvcnktPnN0YXRpY3BhZHRlbXBsYXRlcywKKyAgICAgIHRlbXBsYXRlKTsKKyAgZmFjdG9yeS0+bnVtcGFkdGVtcGxhdGVzKys7Cit9CisKK3N0YXRpYyBHc3RFbGVtZW50RmFjdG9yeSAqCitzZXR1cF9mYWN0b3J5ICh2b2lkKQoreworICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlOworICBHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeTsKKworICBmZWF0dXJlID0gZ19vYmplY3RfbmV3diAoR1NUX1RZUEVfRUxFTUVOVF9GQUNUT1JZLCAwLCBOVUxMKTsKKyAgZ3N0X3BsdWdpbl9mZWF0dXJlX3NldF9uYW1lIChmZWF0dXJlLCAidGVzdCIpOworCisgIGZhY3RvcnkgPSBHU1RfRUxFTUVOVF9GQUNUT1JZX0NBU1QgKGZlYXR1cmUpOworI2lmIDAKKyAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X21ldGFkYXRhIChmYWN0b3J5LCAidGVzdCIsICJ0ZXN0IiwgInRlc3QiLCAidGVzdCIpOworI2VuZGlmCisKKyAgc2V0dXBfcGFkX3RlbXBsYXRlIChmYWN0b3J5LCAmc2lua190ZW1wbGF0ZSk7CisgIHNldHVwX3BhZF90ZW1wbGF0ZSAoZmFjdG9yeSwgJnNyY190ZW1wbGF0ZSk7CisKKyAgcmV0dXJuIGZhY3Rvcnk7Cit9CisKKy8qIGNyZWF0ZSBhIGJhc2ljIGZhY3RvcnkgKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X2NyZWF0ZSkKK3sKKyAgR3N0RWxlbWVudEZhY3RvcnkgKmZhY3Rvcnk7CisKKyAgZmFjdG9yeSA9IHNldHVwX2ZhY3RvcnkgKCk7CisgIGZhaWxfaWYgKGZhY3RvcnkgPT0gTlVMTCk7CisKKyAgZ19vYmplY3RfdW5yZWYgKGZhY3RvcnkpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIHRlc3QgaWYgdGhlIGZhY3RvcnkgY2FuIGFjY2VwdCBzb21lIGNhcHMgKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X2Nhbl9zaW5rX2FueV9jYXBzKQoreworICBHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeTsKKyAgR3N0Q2FwcyAqY2FwczsKKyAgZ2Jvb2xlYW4gcmVzOworCisgIGZhY3RvcnkgPSBzZXR1cF9mYWN0b3J5ICgpOworICBmYWlsX2lmIChmYWN0b3J5ID09IE5VTEwpOworCisgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8veC1yYXctaW50IiwgTlVMTCk7CisgIGZhaWxfaWYgKGNhcHMgPT0gTlVMTCk7CisgIHJlcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NpbmtfYW55X2NhcHMgKGZhY3RvcnksIGNhcHMpOworICBmYWlsX2lmICghcmVzKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOworCisgIGdfb2JqZWN0X3VucmVmIChmYWN0b3J5KTsKK30KKworR1NUX0VORF9URVNUOworCisvKiB0ZXN0IGlmIHRoZSBmYWN0b3J5IGlzIGNvbXBhdGlibGUgd2l0aCBzb21lIGNhcHMgKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X2Nhbl9zaW5rX2FsbF9jYXBzKQoreworICBHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeTsKKyAgR3N0Q2FwcyAqY2FwczsKKyAgZ2Jvb2xlYW4gcmVzOworCisgIGZhY3RvcnkgPSBzZXR1cF9mYWN0b3J5ICgpOworICBmYWlsX2lmIChmYWN0b3J5ID09IE5VTEwpOworCisgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8veC1yYXctaW50IiwgTlVMTCk7CisgIGZhaWxfaWYgKGNhcHMgPT0gTlVMTCk7CisgIHJlcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NpbmtfYWxsX2NhcHMgKGZhY3RvcnksIGNhcHMpOworICBmYWlsX2lmIChyZXMpOworICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7CisKKyAgZ19vYmplY3RfdW5yZWYgKGZhY3RvcnkpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIGNoZWNrIGlmIHRoZSBlbGVtZW50ZmFjdG9yeSBvZiBhIGNsYXNzIGlzIGZpbGxlZCAoc2VlICMxMzEwNzkpICovCitHU1RfU1RBUlRfVEVTVCAodGVzdF9jbGFzcykKK3sKKyAgR3N0RWxlbWVudENsYXNzICprbGFzczsKKyAgR3N0RWxlbWVudEZhY3RvcnkgKmZhY3RvcnksICp0bXA7CisgIEdUeXBlIHR5cGU7CisKKyAgR1NUX0RFQlVHICgiZmluZGluZyBmYWN0b3J5IGZvciBxdWV1ZSIpOworICBmYWN0b3J5ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9maW5kICgicXVldWUiKTsKKyAgZmFpbF9pZiAoZmFjdG9yeSA9PSBOVUxMKTsKKworICAvKiBpdCBtYXkgYWxyZWFkeSBiZSBsb2FkZWQgaWYgY2hlY2sgaXMgYmVpbmcgcnVuIHdpdGggQ0tfRk9SSz1ubyAqLworICBpZiAoIUdTVF9QTFVHSU5fRkVBVFVSRSAoZmFjdG9yeSktPmxvYWRlZCkgeworICAgIEdTVF9ERUJVRyAoImdldHRpbmcgdGhlIHR5cGUiKTsKKyAgICAvKiBmZWF0dXJlIGlzIG5vdCBsb2FkZWQsIHNob3VsZCByZXR1cm4gMCBhcyB0aGUgdHlwZSAqLworICAgIHR5cGUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9lbGVtZW50X3R5cGUgKGZhY3RvcnkpOworICAgIGZhaWxfaWYgKHR5cGUgIT0gMCk7CisgIH0KKworICBHU1RfREVCVUcgKCJub3cgbG9hZGluZyB0aGUgcGx1Z2luIik7CisgIHRtcCA9CisgICAgICBHU1RfRUxFTUVOVF9GQUNUT1JZIChnc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZCAoR1NUX1BMVUdJTl9GRUFUVVJFCisgICAgICAgICAgKGZhY3RvcnkpKSk7CisgIGZhaWxfaWYgKHRtcCA9PSBOVUxMKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChmYWN0b3J5KTsKKyAgZmFjdG9yeSA9IHRtcDsKKworICAvKiBmZWF0dXJlIGlzIG5vdyBsb2FkZWQgKi8KKyAgdHlwZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X2VsZW1lbnRfdHlwZSAoZmFjdG9yeSk7CisgIGZhaWxfaWYgKHR5cGUgPT0gMCk7CisKKyAga2xhc3MgPSBnX3R5cGVfY2xhc3NfcmVmIChmYWN0b3J5LT50eXBlKTsKKyAgZmFpbF9pZiAoa2xhc3MgPT0gTlVMTCk7CisKKyAgR1NUX0RFQlVHICgiY2hlY2tpbmcgdGhlIGVsZW1lbnQgZmFjdG9yeSBjbGFzcyBmaWVsZCIpOworICAvKiBhbmQgZWxlbWVudGZhY3RvcnkgaXMgZmlsbGVkIGluICovCisgIGZhaWxfaWYgKGtsYXNzLT5lbGVtZW50ZmFjdG9yeSA9PSBOVUxMKTsKKyAgZmFpbF9pZiAoa2xhc3MtPmVsZW1lbnRmYWN0b3J5ICE9IGZhY3RvcnkpOworCit9CisKK0dTVF9FTkRfVEVTVDsKKworCitzdGF0aWMgU3VpdGUgKgorZ3N0X2VsZW1lbnRfZmFjdG9yeV9zdWl0ZSAodm9pZCkKK3sKKyAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RFbGVtZW50RmFjdG9yeSIpOworICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJlbGVtZW50LWZhY3RvcnkgdGVzdHMiKTsKKworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2NsYXNzKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2NyZWF0ZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9jYW5fc2lua19hbnlfY2Fwcyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9jYW5fc2lua19hbGxfY2Fwcyk7CisKKyAgcmV0dXJuIHM7Cit9CisKK0dTVF9DSEVDS19NQUlOIChnc3RfZWxlbWVudF9mYWN0b3J5KTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk2ZWM1NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jCkBAIC0wLDAgKzEsNTY0IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNSBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKyAqCisgKiBnc3RldmVudC5jOiBVbml0IHRlc3QgZm9yIGV2ZW50IGhhbmRsaW5nCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworCisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisKK0dTVF9TVEFSVF9URVNUIChjcmVhdGVfZXZlbnRzKQoreworICBHc3RFdmVudCAqZXZlbnQsICpldmVudDI7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworCisgIC8qIEZMVVNIX1NUQVJUICovCisgIHsKKyAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQgKCk7CisgICAgZmFpbF9pZiAoZXZlbnQgPT0gTlVMTCk7CisgICAgZmFpbF91bmxlc3MgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX0ZMVVNIX1NUQVJUKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX0lTX1VQU1RSRUFNIChldmVudCkpOworICAgIGZhaWxfdW5sZXNzIChHU1RfRVZFTlRfSVNfRE9XTlNUUkVBTSAoZXZlbnQpKTsKKyAgICBmYWlsX2lmIChHU1RfRVZFTlRfSVNfU0VSSUFMSVpFRCAoZXZlbnQpKTsKKyAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKyAgfQorICAvKiBGTFVTSF9TVE9QICovCisgIHsKKyAgICBnYm9vbGVhbiByZXNldF90aW1lOworCisgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AgKFRSVUUpOworICAgIGZhaWxfaWYgKGV2ZW50ID09IE5VTEwpOworICAgIGZhaWxfdW5sZXNzIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9GTFVTSF9TVE9QKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX0lTX1VQU1RSRUFNIChldmVudCkpOworICAgIGZhaWxfdW5sZXNzIChHU1RfRVZFTlRfSVNfRE9XTlNUUkVBTSAoZXZlbnQpKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX0lTX1NFUklBTElaRUQgKGV2ZW50KSk7CisKKyAgICBnc3RfZXZlbnRfcGFyc2VfZmx1c2hfc3RvcCAoZXZlbnQsICZyZXNldF90aW1lKTsKKyAgICBmYWlsX3VubGVzcyAocmVzZXRfdGltZSA9PSBUUlVFKTsKKyAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKyAgfQorICAvKiBFT1MgKi8KKyAgeworICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19lb3MgKCk7CisgICAgZmFpbF9pZiAoZXZlbnQgPT0gTlVMTCk7CisgICAgZmFpbF91bmxlc3MgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX0VPUyk7CisgICAgZmFpbF9pZiAoR1NUX0VWRU5UX0lTX1VQU1RSRUFNIChldmVudCkpOworICAgIGZhaWxfdW5sZXNzIChHU1RfRVZFTlRfSVNfRE9XTlNUUkVBTSAoZXZlbnQpKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX0lTX1NFUklBTElaRUQgKGV2ZW50KSk7CisgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgIH0KKyAgLyogU0VHTUVOVCAqLworICB7CisgICAgR3N0U2VnbWVudCBzZWdtZW50LCBwYXJzZWQ7CisKKyAgICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKKyAgICBzZWdtZW50LnJhdGUgPSAwLjU7CisgICAgc2VnbWVudC5hcHBsaWVkX3JhdGUgPSAxLjA7CisgICAgc2VnbWVudC5zdGFydCA9IDE7CisgICAgc2VnbWVudC5zdG9wID0gR19NQVhJTlQ2NDsKKyAgICBzZWdtZW50LnRpbWUgPSAweGRlYWRiZWVmOworCisgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KTsKKyAgICBmYWlsX2lmIChldmVudCA9PSBOVUxMKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfU0VHTUVOVCk7CisgICAgZmFpbF9pZiAoR1NUX0VWRU5UX0lTX1VQU1RSRUFNIChldmVudCkpOworICAgIGZhaWxfdW5sZXNzIChHU1RfRVZFTlRfSVNfRE9XTlNUUkVBTSAoZXZlbnQpKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX0lTX1NFUklBTElaRUQgKGV2ZW50KSk7CisKKyAgICBnc3RfZXZlbnRfY29weV9zZWdtZW50IChldmVudCwgJnBhcnNlZCk7CisgICAgZmFpbF91bmxlc3MgKHBhcnNlZC5yYXRlID09IDAuNSk7CisgICAgZmFpbF91bmxlc3MgKHBhcnNlZC5hcHBsaWVkX3JhdGUgPT0gMS4wKTsKKyAgICBmYWlsX3VubGVzcyAocGFyc2VkLmZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpOworICAgIGZhaWxfdW5sZXNzIChwYXJzZWQuc3RhcnQgPT0gMSk7CisgICAgZmFpbF91bmxlc3MgKHBhcnNlZC5zdG9wID09IEdfTUFYSU5UNjQpOworICAgIGZhaWxfdW5sZXNzIChwYXJzZWQudGltZSA9PSAweGRlYWRiZWVmKTsKKworICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworICB9CisKKyAgLyogVEFHUyAqLworICB7CisgICAgR3N0VGFnTGlzdCAqdGFnbGlzdCA9IGdzdF90YWdfbGlzdF9uZXcgKCk7CisgICAgR3N0VGFnTGlzdCAqdGwyID0gTlVMTDsKKworICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld190YWcgKHRhZ2xpc3QpOworICAgIGZhaWxfaWYgKHRhZ2xpc3QgPT0gTlVMTCk7CisgICAgZmFpbF9pZiAoZXZlbnQgPT0gTlVMTCk7CisgICAgZmFpbF91bmxlc3MgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX1RBRyk7CisgICAgZmFpbF9pZiAoR1NUX0VWRU5UX0lTX1VQU1RSRUFNIChldmVudCkpOworICAgIGZhaWxfdW5sZXNzIChHU1RfRVZFTlRfSVNfRE9XTlNUUkVBTSAoZXZlbnQpKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX0lTX1NFUklBTElaRUQgKGV2ZW50KSk7CisKKyAgICBnc3RfZXZlbnRfcGFyc2VfdGFnIChldmVudCwgJnRsMik7CisgICAgZmFpbF91bmxlc3MgKHRhZ2xpc3QgPT0gdGwyKTsKKyAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKyAgfQorCisgIC8qIFFPUyAqLworICB7CisgICAgR3N0UU9TVHlwZSB0MSA9IEdTVF9RT1NfVFlQRV9USFJPVFRMRSwgdDI7CisgICAgZ2RvdWJsZSBwMSA9IDEuMCwgcDI7CisgICAgR3N0Q2xvY2tUaW1lRGlmZiBjdGQxID0gR19HSU5UNjRfQ09OU1RBTlQgKDEwKSwgY3RkMjsKKyAgICBHc3RDbG9ja1RpbWUgY3QxID0gR19HVUlOVDY0X0NPTlNUQU5UICgyMCksIGN0MjsKKworICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19xb3MgKHQxLCBwMSwgY3RkMSwgY3QxKTsKKyAgICBmYWlsX2lmIChldmVudCA9PSBOVUxMKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfUU9TKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX0lTX1VQU1RSRUFNIChldmVudCkpOworICAgIGZhaWxfaWYgKEdTVF9FVkVOVF9JU19ET1dOU1RSRUFNIChldmVudCkpOworICAgIGZhaWxfaWYgKEdTVF9FVkVOVF9JU19TRVJJQUxJWkVEIChldmVudCkpOworCisgICAgZ3N0X2V2ZW50X3BhcnNlX3FvcyAoZXZlbnQsICZ0MiwgJnAyLCAmY3RkMiwgJmN0Mik7CisgICAgZmFpbF91bmxlc3MgKHAxID09IHAyKTsKKyAgICBmYWlsX3VubGVzcyAoY3RkMSA9PSBjdGQyKTsKKyAgICBmYWlsX3VubGVzcyAoY3QxID09IGN0Mik7CisgICAgZ3N0X2V2ZW50X3BhcnNlX3FvcyAoZXZlbnQsICZ0MiwgJnAyLCAmY3RkMiwgJmN0Mik7CisgICAgZmFpbF91bmxlc3MgKHQyID09IEdTVF9RT1NfVFlQRV9USFJPVFRMRSk7CisgICAgZmFpbF91bmxlc3MgKHAxID09IHAyKTsKKyAgICBmYWlsX3VubGVzcyAoY3RkMSA9PSBjdGQyKTsKKyAgICBmYWlsX3VubGVzcyAoY3QxID09IGN0Mik7CisgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisKKyAgICBjdGQxID0gR19HSU5UNjRfQ09OU1RBTlQgKC0xMCk7CisgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3FvcyAodDEsIHAxLCBjdGQxLCBjdDEpOworICAgIGdzdF9ldmVudF9wYXJzZV9xb3MgKGV2ZW50LCAmdDIsICZwMiwgJmN0ZDIsICZjdDIpOworICAgIGZhaWxfdW5sZXNzICh0MiA9PSBHU1RfUU9TX1RZUEVfVEhST1RUTEUpOworICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworCisgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3FvcyAodDEsIHAxLCBjdGQxLCBjdDEpOworICAgIGdzdF9ldmVudF9wYXJzZV9xb3MgKGV2ZW50LCAmdDIsICZwMiwgJmN0ZDIsICZjdDIpOworICAgIGZhaWxfdW5sZXNzICh0MiA9PSBHU1RfUU9TX1RZUEVfVEhST1RUTEUpOworICAgIGZhaWxfdW5sZXNzIChwMSA9PSBwMik7CisgICAgZmFpbF91bmxlc3MgKGN0ZDEgPT0gY3RkMik7CisgICAgZmFpbF91bmxlc3MgKGN0MSA9PSBjdDIpOworICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOworICB9CisKKyAgLyogU0VFSyAqLworICB7CisgICAgZ2RvdWJsZSByYXRlOworICAgIEdzdEZvcm1hdCBmb3JtYXQ7CisgICAgR3N0U2Vla0ZsYWdzIGZsYWdzOworICAgIEdzdFNlZWtUeXBlIGN1cl90eXBlLCBzdG9wX3R5cGU7CisgICAgZ2ludDY0IGN1ciwgc3RvcDsKKworICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWVrICgwLjUsIEdTVF9GT1JNQVRfQllURVMsCisgICAgICAgIEdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19GTEFHX0FDQ1VSQVRFLAorICAgICAgICBHU1RfU0VFS19UWVBFX1NFVCwgMSwgR1NUX1NFRUtfVFlQRV9OT05FLCAweGRlYWRiZWVmKTsKKworICAgIGZhaWxfaWYgKGV2ZW50ID09IE5VTEwpOworICAgIGZhaWxfdW5sZXNzIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9TRUVLKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX0lTX1VQU1RSRUFNIChldmVudCkpOworICAgIGZhaWxfaWYgKEdTVF9FVkVOVF9JU19ET1dOU1RSRUFNIChldmVudCkpOworICAgIGZhaWxfaWYgKEdTVF9FVkVOVF9JU19TRVJJQUxJWkVEIChldmVudCkpOworCisgICAgZ3N0X2V2ZW50X3BhcnNlX3NlZWsgKGV2ZW50LCAmcmF0ZSwgJmZvcm1hdCwgJmZsYWdzLCAmY3VyX3R5cGUsICZjdXIsCisgICAgICAgICZzdG9wX3R5cGUsICZzdG9wKTsKKyAgICBmYWlsX3VubGVzcyAocmF0ZSA9PSAwLjUpOworICAgIGZhaWxfdW5sZXNzIChmb3JtYXQgPT0gR1NUX0ZPUk1BVF9CWVRFUyk7CisgICAgZmFpbF91bmxlc3MgKGZsYWdzID09IChHU1RfU0VFS19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxBR19BQ0NVUkFURSkpOworICAgIGZhaWxfdW5sZXNzIChjdXJfdHlwZSA9PSBHU1RfU0VFS19UWVBFX1NFVCk7CisgICAgZmFpbF91bmxlc3MgKGN1ciA9PSAxKTsKKyAgICBmYWlsX3VubGVzcyAoc3RvcF90eXBlID09IEdTVF9TRUVLX1RZUEVfTk9ORSk7CisgICAgZmFpbF91bmxlc3MgKHN0b3AgPT0gMHhkZWFkYmVlZik7CisKKyAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKyAgfQorCisgIC8qIE5BVklHQVRJT04gKi8KKyAgeworICAgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgiYXBwbGljYXRpb24veC1nc3QtbmF2aWdhdGlvbiIsICJldmVudCIsCisgICAgICAgIEdfVFlQRV9TVFJJTkcsICJrZXktcHJlc3MiLCAia2V5IiwgR19UWVBFX1NUUklORywgIm1vbiIsIE5VTEwpOworICAgIGZhaWxfaWYgKHN0cnVjdHVyZSA9PSBOVUxMKTsKKyAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfbmF2aWdhdGlvbiAoc3RydWN0dXJlKTsKKyAgICBmYWlsX2lmIChldmVudCA9PSBOVUxMKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfTkFWSUdBVElPTik7CisgICAgZmFpbF91bmxlc3MgKEdTVF9FVkVOVF9JU19VUFNUUkVBTSAoZXZlbnQpKTsKKyAgICBmYWlsX2lmIChHU1RfRVZFTlRfSVNfRE9XTlNUUkVBTSAoZXZlbnQpKTsKKyAgICBmYWlsX2lmIChHU1RfRVZFTlRfSVNfU0VSSUFMSVpFRCAoZXZlbnQpKTsKKworICAgIGZhaWxfdW5sZXNzIChnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoZXZlbnQpID09IHN0cnVjdHVyZSk7CisgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7CisgIH0KKworICAvKiBDdXN0b20gZXZlbnQgdHlwZXMgKi8KKyAgeworICAgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfZW1wdHlfbmV3ICgiYXBwbGljYXRpb24veC1jdXN0b20iKTsKKyAgICBmYWlsX2lmIChzdHJ1Y3R1cmUgPT0gTlVMTCk7CisgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX0NVU1RPTV9VUFNUUkVBTSwgc3RydWN0dXJlKTsKKyAgICBmYWlsX2lmIChldmVudCA9PSBOVUxMKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfQ1VTVE9NX1VQU1RSRUFNKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX0lTX1VQU1RSRUFNIChldmVudCkpOworICAgIGZhaWxfaWYgKEdTVF9FVkVOVF9JU19ET1dOU1RSRUFNIChldmVudCkpOworICAgIGZhaWxfaWYgKEdTVF9FVkVOVF9JU19TRVJJQUxJWkVEIChldmVudCkpOworICAgIGZhaWxfdW5sZXNzIChnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoZXZlbnQpID09IHN0cnVjdHVyZSk7CisgICAgZmFpbF91bmxlc3MgKGdzdF9ldmVudF9oYXNfbmFtZSAoZXZlbnQsICJhcHBsaWNhdGlvbi94LWN1c3RvbSIpKTsKKyAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKworICAgIC8qIERlY2lkZWQgbm90IHRvIHRlc3QgdGhlIG90aGVyIGN1c3RvbSBlbnVtIHR5cGVzLCBhcyB0aGV5CisgICAgICogb25seSBkaWZmZXIgYnkgdGhlIHZhbHVlIG9mIHRoZSBlbnVtIHBhc3NlZCB0byBnc3RfZXZlbnRfbmV3X2N1c3RvbQorICAgICAqLworICB9CisKKyAgLyogRXZlbnQgY29weWluZyAqLworICB7CisgICAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9lbXB0eV9uZXcgKCJhcHBsaWNhdGlvbi94LWN1c3RvbSIpOworICAgIGZhaWxfaWYgKHN0cnVjdHVyZSA9PSBOVUxMKTsKKyAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfY3VzdG9tIChHU1RfRVZFTlRfQ1VTVE9NX0JPVEgsIHN0cnVjdHVyZSk7CisKKyAgICBmYWlsX2lmIChldmVudCA9PSBOVUxMKTsKKyAgICBldmVudDIgPSBnc3RfZXZlbnRfY29weSAoZXZlbnQpOworICAgIGZhaWxfaWYgKGV2ZW50MiA9PSBOVUxMKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfVFlQRSAoZXZlbnQyKSk7CisgICAgZmFpbF91bmxlc3MgKGdzdF9ldmVudF9oYXNfbmFtZSAoZXZlbnQsICJhcHBsaWNhdGlvbi94LWN1c3RvbSIpKTsKKworICAgIC8qIFRoZSBzdHJ1Y3R1cmUgc2hvdWxkIGhhdmUgYmVlbiBkdXBsaWNhdGVkICovCisgICAgZmFpbF9pZiAoZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUgKGV2ZW50KSA9PQorICAgICAgICBnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoZXZlbnQyKSk7CisKKyAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKyAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50Mik7CisgIH0KKworICAvKiBNYWtlIGV2ZW50cyB3cml0YWJsZSAqLworICB7CisgICAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9lbXB0eV9uZXcgKCJhcHBsaWNhdGlvbi94LWN1c3RvbSIpOworICAgIGZhaWxfaWYgKHN0cnVjdHVyZSA9PSBOVUxMKTsKKyAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfY3VzdG9tIChHU1RfRVZFTlRfQ1VTVE9NX0JPVEgsIHN0cnVjdHVyZSk7CisgICAgLyogcmVmIHRoZSBldmVudCBzbyB0aGF0IGl0IGJlY29tZXMgbm9uLXdyaXRhYmxlICovCisgICAgZ3N0X2V2ZW50X3JlZiAoZXZlbnQpOworICAgIGdzdF9ldmVudF9yZWYgKGV2ZW50KTsKKyAgICAvKiB0aGlzIHNob3VsZCBmYWlsIGlmIHRoZSBzdHJ1Y3R1cmUgaXNuJ3Qgd3JpdGFibGUgKi8KKyAgICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2FsbF9maWVsZHMgKChHc3RTdHJ1Y3R1cmUgKikKKyAgICAgICAgICAgIGdzdF9ldmVudF9nZXRfc3RydWN0dXJlIChldmVudCkpKTsKKyAgICBmYWlsX3VubGVzcyAoZ3N0X2V2ZW50X2hhc19uYW1lIChldmVudCwgImFwcGxpY2F0aW9uL3gtY3VzdG9tIikpOworCisgICAgLyogbm93IG1ha2Ugd3JpdGFibGUgKi8KKyAgICBldmVudDIgPQorICAgICAgICBHU1RfRVZFTlQgKGdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlIChHU1RfTUlOSV9PQkpFQ1QgKGV2ZW50KSkpOworICAgIGZhaWxfdW5sZXNzIChldmVudCAhPSBldmVudDIpOworICAgIC8qIHRoaXMgZmFpbCBpZiB0aGUgc3RydWN0dXJlIGlzbid0IHdyaXRhYmxlICovCisgICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfYWxsX2ZpZWxkcyAoKEdzdFN0cnVjdHVyZSAqKQorICAgICAgICBnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoZXZlbnQyKSk7CisgICAgZmFpbF91bmxlc3MgKGdzdF9ldmVudF9oYXNfbmFtZSAoZXZlbnQyLCAiYXBwbGljYXRpb24veC1jdXN0b20iKSk7CisKKyAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKyAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKKyAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50Mik7CisgIH0KK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgR1RpbWVWYWwgc2VudF9ldmVudF90aW1lOworc3RhdGljIEdzdEV2ZW50ICpnb3RfZXZlbnRfYmVmb3JlX3EsICpnb3RfZXZlbnRfYWZ0ZXJfcTsKK3N0YXRpYyBHVGltZVZhbCBnb3RfZXZlbnRfdGltZTsKKworc3RhdGljIEdzdFByb2JlUmV0dXJuCitldmVudF9wcm9iZSAoR3N0UGFkICogcGFkLCBHc3RQcm9iZVR5cGUgdHlwZSwgZ3BvaW50ZXIgdHlwZV9kYXRhLAorICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgR3N0TWluaU9iamVjdCAqZGF0YSA9IHR5cGVfZGF0YTsKKyAgZ2Jvb2xlYW4gYmVmb3JlX3EgPSAoZ2Jvb2xlYW4pIEdQT0lOVEVSX1RPX0lOVCAodXNlcl9kYXRhKTsKKworICBHU1RfREVCVUcgKCJldmVudCBwcm9iZSBjYWxsZWQgJXAiLCBkYXRhKTsKKworICBmYWlsX3VubGVzcyAoR1NUX0lTX0VWRU5UIChkYXRhKSk7CisKKyAgaWYgKGJlZm9yZV9xKSB7CisgICAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoR1NUX0VWRU5UIChkYXRhKSkpIHsKKyAgICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RPTV9VUFNUUkVBTToKKyAgICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RPTV9CT1RIOgorICAgICAgY2FzZSBHU1RfRVZFTlRfQ1VTVE9NX0JPVEhfT09COgorICAgICAgICBpZiAoZ290X2V2ZW50X2JlZm9yZV9xICE9IE5VTEwpCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGdzdF9ldmVudF9yZWYgKChHc3RFdmVudCAqKSBkYXRhKTsKKyAgICAgICAgZ19nZXRfY3VycmVudF90aW1lICgmZ290X2V2ZW50X3RpbWUpOworICAgICAgICBnb3RfZXZlbnRfYmVmb3JlX3EgPSBHU1RfRVZFTlQgKGRhdGEpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChHU1RfRVZFTlQgKGRhdGEpKSkgeworICAgICAgY2FzZSBHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU06CisgICAgICBjYXNlIEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTV9PT0I6CisgICAgICBjYXNlIEdTVF9FVkVOVF9DVVNUT01fQk9USDoKKyAgICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RPTV9CT1RIX09PQjoKKyAgICAgICAgaWYgKGdvdF9ldmVudF9hZnRlcl9xICE9IE5VTEwpCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGdzdF9ldmVudF9yZWYgKChHc3RFdmVudCAqKSBkYXRhKTsKKyAgICAgICAgZ19nZXRfY3VycmVudF90aW1lICgmZ290X2V2ZW50X3RpbWUpOworICAgICAgICBnb3RfZXZlbnRfYWZ0ZXJfcSA9IEdTVF9FVkVOVCAoZGF0YSk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgcmV0dXJuIEdTVF9QUk9CRV9PSzsKK30KKworCit0eXBlZGVmIHN0cnVjdAoreworICBHTXV0ZXggKmxvY2s7CisgIEdDb25kICpjb25kOworICBnYm9vbGVhbiBzaWduYWxlZDsKK30gU2lnbmFsRGF0YTsKKworc3RhdGljIHZvaWQKK3NpZ25hbF9kYXRhX2luaXQgKFNpZ25hbERhdGEgKiBkYXRhKQoreworICBHU1RfREVCVUcgKCJpbml0ICVwIiwgZGF0YSk7CisgIGRhdGEtPmxvY2sgPSBnX211dGV4X25ldyAoKTsKKyAgZGF0YS0+Y29uZCA9IGdfY29uZF9uZXcgKCk7CisgIGRhdGEtPnNpZ25hbGVkID0gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkCitzaWduYWxfZGF0YV9jbGVhbnVwIChTaWduYWxEYXRhICogZGF0YSkKK3sKKyAgR1NUX0RFQlVHICgiZnJlZSAlcCIsIGRhdGEpOworICBnX211dGV4X2ZyZWUgKGRhdGEtPmxvY2spOworICBnX2NvbmRfZnJlZSAoZGF0YS0+Y29uZCk7Cit9CisKK3N0YXRpYyB2b2lkCitzaWduYWxfZGF0YV9zaWduYWwgKFNpZ25hbERhdGEgKiBkYXRhKQoreworICBnX211dGV4X2xvY2sgKGRhdGEtPmxvY2spOworICBkYXRhLT5zaWduYWxlZCA9IFRSVUU7CisgIGdfY29uZF9icm9hZGNhc3QgKGRhdGEtPmNvbmQpOworICBHU1RfREVCVUcgKCJzaWduYWxpbmcgJXAiLCBkYXRhKTsKKyAgZ19tdXRleF91bmxvY2sgKGRhdGEtPmxvY2spOworfQorCitzdGF0aWMgdm9pZAorc2lnbmFsX2RhdGFfd2FpdCAoU2lnbmFsRGF0YSAqIGRhdGEpCit7CisgIGdfbXV0ZXhfbG9jayAoZGF0YS0+bG9jayk7CisgIEdTVF9ERUJVRyAoInNpZ25hbCB3YWl0ICVwIiwgZGF0YSk7CisgIHdoaWxlICghZGF0YS0+c2lnbmFsZWQpCisgICAgZ19jb25kX3dhaXQgKGRhdGEtPmNvbmQsIGRhdGEtPmxvY2spOworICBHU1RfREVCVUcgKCJzaWduYWwgd2FpdCBkb25lICVwIiwgZGF0YSk7CisgIGdfbXV0ZXhfdW5sb2NrIChkYXRhLT5sb2NrKTsKK30KKworc3RhdGljIEdzdFByb2JlUmV0dXJuCitzaWduYWxfYmxvY2tlZCAoR3N0UGFkICogcGFkLCBHc3RQcm9iZVR5cGUgdHlwZSwgZ3BvaW50ZXIgdHlwZV9kYXRhLAorICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgU2lnbmFsRGF0YSAqZGF0YSA9IChTaWduYWxEYXRhICopIHVzZXJfZGF0YTsKKworICBHU1RfREVCVUcgKCJzaWduYWwgY2FsbGVkICVwIiwgZGF0YSk7CisgIHNpZ25hbF9kYXRhX3NpZ25hbCAoZGF0YSk7CisgIEdTVF9ERUJVRyAoInNpZ25hbCBkb25lICVwIiwgZGF0YSk7CisKKyAgcmV0dXJuIEdTVF9QUk9CRV9PSzsKK30KKworc3RhdGljIHZvaWQgdGVzdF9ldmVudAorICAgIChHc3RCaW4gKiBwaXBlbGluZSwgR3N0RXZlbnRUeXBlIHR5cGUsIEdzdFBhZCAqIHBhZCwKKyAgICBnYm9vbGVhbiBleHBlY3RfYmVmb3JlX3EsIEdzdFBhZCAqIGZha2Vfc3JjcGFkKQoreworICBHc3RFdmVudCAqZXZlbnQ7CisgIEdzdFBhZCAqcGVlcjsKKyAgZ2ludCBpOworICBTaWduYWxEYXRhIGRhdGE7CisgIGd1bG9uZyBpZDsKKworICBnb3RfZXZlbnRfYmVmb3JlX3EgPSBnb3RfZXZlbnRfYWZ0ZXJfcSA9IE5VTEw7CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLCBHU1RfU1RBVEVfUExBWUlORyk7CisgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKHBpcGVsaW5lKSwgTlVMTCwgTlVMTCwKKyAgICAgIEdTVF9DTE9DS19USU1FX05PTkUpOworCisgIEdTVF9ERUJVRyAoInRlc3QgZXZlbnQgY2FsbGVkIik7CisKKyAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2N1c3RvbSAodHlwZSwKKyAgICAgIGdzdF9zdHJ1Y3R1cmVfZW1wdHlfbmV3ICgiYXBwbGljYXRpb24veC1jdXN0b20iKSk7CisgIGdfZ2V0X2N1cnJlbnRfdGltZSAoJnNlbnRfZXZlbnRfdGltZSk7CisgIGdvdF9ldmVudF90aW1lLnR2X3NlYyA9IDA7CisgIGdvdF9ldmVudF90aW1lLnR2X3VzZWMgPSAwOworCisgIHNpZ25hbF9kYXRhX2luaXQgKCZkYXRhKTsKKworICAvKiBXZSBibG9jayB0aGUgcGFkIHNvIHRoZSBzdHJlYW0gbG9jayBpcyByZWxlYXNlZCBhbmQgd2UgY2FuIHNlbmQgdGhlIGV2ZW50ICovCisgIGlkID0gZ3N0X3BhZF9hZGRfcHJvYmUgKGZha2Vfc3JjcGFkLCBHU1RfUFJPQkVfVFlQRV9CTE9DSywKKyAgICAgIHNpZ25hbF9ibG9ja2VkLCAmZGF0YSwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChpZCAhPSAwKTsKKworICBzaWduYWxfZGF0YV93YWl0ICgmZGF0YSk7CisKKyAgLyogV2Ugc2VuZCBvbiB0aGUgcGVlciBwYWQsIHNpbmNlIHRoZSBwYWQgaXMgYmxvY2tlZCAqLworICBHU1RfREVCVUcgKCJzZW5kaW5nIGV2ZW50ICVwIiwgZXZlbnQpOworICBmYWlsX3VubGVzcyAoKHBlZXIgPSBnc3RfcGFkX2dldF9wZWVyIChwYWQpKSAhPSBOVUxMKTsKKyAgZ3N0X3BhZF9zZW5kX2V2ZW50IChwZWVyLCBldmVudCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBlZXIpOworCisgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChmYWtlX3NyY3BhZCwgaWQpOworCisgIGlmIChleHBlY3RfYmVmb3JlX3EpIHsKKyAgICAvKiBXYWl0IHVwIHRvIDUgc2Vjb25kcyBmb3IgdGhlIGV2ZW50IHRvIGFwcGVhciAqLworICAgIGZvciAoaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgZ191c2xlZXAgKEdfVVNFQ19QRVJfU0VDIC8gMTAwKTsKKyAgICAgIGlmIChnb3RfZXZlbnRfYmVmb3JlX3EgIT0gTlVMTCkKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGZhaWxfaWYgKGdvdF9ldmVudF9iZWZvcmVfcSA9PSBOVUxMLAorICAgICAgICAiRXhwZWN0ZWQgZXZlbnQgZmFpbGVkIHRvIGFwcGVhciB1cHN0cmVhbSBvZiB0aGUgcXVldWUgIgorICAgICAgICAid2l0aGluIDUgc2Vjb25kcyIpOworICAgIGZhaWxfdW5sZXNzIChHU1RfRVZFTlRfVFlQRSAoZ290X2V2ZW50X2JlZm9yZV9xKSA9PSB0eXBlKTsKKyAgfSBlbHNlIHsKKyAgICAvKiBXYWl0IHVwIHRvIDEwIHNlY29uZHMgZm9yIHRoZSBldmVudCB0byBhcHBlYXIgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisgICAgICBnX3VzbGVlcCAoR19VU0VDX1BFUl9TRUMgLyAxMDApOworICAgICAgaWYgKGdvdF9ldmVudF9hZnRlcl9xICE9IE5VTEwpCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBmYWlsX2lmIChnb3RfZXZlbnRfYWZ0ZXJfcSA9PSBOVUxMLAorICAgICAgICAiRXhwZWN0ZWQgZXZlbnQgZmFpbGVkIHRvIGFwcGVhciBhZnRlciB0aGUgcXVldWUgd2l0aGluIDEwIHNlY29uZHMiKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX1RZUEUgKGdvdF9ldmVudF9hZnRlcl9xKSA9PSB0eXBlKTsKKyAgfQorCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKHBpcGVsaW5lKSwgR1NUX1NUQVRFX1BBVVNFRCk7CisgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKHBpcGVsaW5lKSwgTlVMTCwgTlVMTCwKKyAgICAgIEdTVF9DTE9DS19USU1FX05PTkUpOworCisgIGlmIChnb3RfZXZlbnRfYmVmb3JlX3EpCisgICAgZ3N0X2V2ZW50X3VucmVmIChnb3RfZXZlbnRfYmVmb3JlX3EpOworICBpZiAoZ290X2V2ZW50X2FmdGVyX3EpCisgICAgZ3N0X2V2ZW50X3VucmVmIChnb3RfZXZlbnRfYWZ0ZXJfcSk7CisKKyAgZ290X2V2ZW50X2JlZm9yZV9xID0gZ290X2V2ZW50X2FmdGVyX3EgPSBOVUxMOworCisgIHNpZ25hbF9kYXRhX2NsZWFudXAgKCZkYXRhKTsKK30KKworc3RhdGljIGdpbnQ2NAordGltZWRpZmYgKEdUaW1lVmFsICogZW5kLCBHVGltZVZhbCAqIHN0YXJ0KQoreworICByZXR1cm4gKGVuZC0+dHZfc2VjIC0gc3RhcnQtPnR2X3NlYykgKiBHX1VTRUNfUEVSX1NFQyArCisgICAgICAoZW5kLT50dl91c2VjIC0gc3RhcnQtPnR2X3VzZWMpOworfQorCitHU1RfU1RBUlRfVEVTVCAoc2VuZF9jdXN0b21fZXZlbnRzKQoreworICAvKiBSdW4gc29tZSB0ZXN0cyBvbiBjdXN0b20gZXZlbnRzLiBDaGVja2luZyBmb3Igc2VyaWFsaXNhdGlvbiBhbmQgd2hhdG5vdC4KKyAgICogcGlwZWxpbmUgaXMgZmFrZXNyYyAhIHF1ZXVlICEgZmFrZXNpbmsgKi8KKyAgR3N0QmluICpwaXBlbGluZTsKKyAgR3N0RWxlbWVudCAqZmFrZXNyYywgKmZha2VzaW5rLCAqcXVldWU7CisgIEdzdFBhZCAqc3JjcGFkLCAqc2lua3BhZDsKKworICBmYWlsX2lmICgocGlwZWxpbmUgPSAoR3N0QmluICopIGdzdF9waXBlbGluZV9uZXcgKCJ0ZXN0cGlwZSIpKSA9PSBOVUxMKTsKKyAgZmFpbF9pZiAoKGZha2VzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCkpID09IE5VTEwpOworICBmYWlsX2lmICgoZmFrZXNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpKSA9PSBOVUxMKTsKKyAgZmFpbF9pZiAoKHF1ZXVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicXVldWUiLCBOVUxMKSkgPT0gTlVMTCk7CisKKyAgZ3N0X2Jpbl9hZGRfbWFueSAocGlwZWxpbmUsIGZha2VzcmMsIHF1ZXVlLCBmYWtlc2luaywgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rX21hbnkgKGZha2VzcmMsIHF1ZXVlLCBmYWtlc2luaywgTlVMTCkpOworCisgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGZha2VzaW5rKSwgInN5bmMiLCBGQUxTRSwgTlVMTCk7CisKKyAgLyogU2VuZCAxMDAgYnVmZmVycyBwZXIgc2VjICovCisgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGZha2VzcmMpLCAic2lsZW50IiwgVFJVRSwgImRhdGFyYXRlIiwgMTAwLAorICAgICAgInNpemVtYXgiLCAxLCAic2l6ZXR5cGUiLCAyLCBOVUxMKTsKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAocXVldWUpLCAibWF4LXNpemUtYnVmZmVycyIsIDAsICJtYXgtc2l6ZS10aW1lIiwKKyAgICAgIChndWludDY0KSBHU1RfU0VDT05ELCAibWF4LXNpemUtYnl0ZXMiLCAwLCBOVUxMKTsKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZmFrZXNpbmspLCAic2lsZW50IiwgVFJVRSwgInN5bmMiLCBUUlVFLCBOVUxMKTsKKworICAvKiBhZGQgcGFkLXByb2JlcyB0byBmYWtzcmMuc3JjIGFuZCBmYWtlc2luay5zaW5rICovCisgIGZhaWxfaWYgKChzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZmFrZXNyYywgInNyYyIpKSA9PSBOVUxMKTsKKyAgZ3N0X3BhZF9hZGRfcHJvYmUgKHNyY3BhZCwgR1NUX1BST0JFX1RZUEVfRVZFTlQsCisgICAgICBldmVudF9wcm9iZSwgR0lOVF9UT19QT0lOVEVSIChUUlVFKSwgTlVMTCk7CisKKyAgZmFpbF9pZiAoKHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZmFrZXNpbmssICJzaW5rIikpID09IE5VTEwpOworICBnc3RfcGFkX2FkZF9wcm9iZSAoc2lua3BhZCwgR1NUX1BST0JFX1RZUEVfRVZFTlQsCisgICAgICBldmVudF9wcm9iZSwgR0lOVF9UT19QT0lOVEVSIChGQUxTRSksIE5VTEwpOworCisgIC8qIFVwc3RyZWFtIGV2ZW50cyAqLworICB0ZXN0X2V2ZW50IChwaXBlbGluZSwgR1NUX0VWRU5UX0NVU1RPTV9VUFNUUkVBTSwgc2lua3BhZCwgVFJVRSwgc3JjcGFkKTsKKyAgZmFpbF91bmxlc3MgKHRpbWVkaWZmICgmZ290X2V2ZW50X3RpbWUsCisgICAgICAgICAgJnNlbnRfZXZlbnRfdGltZSkgPCBHX1VTRUNfUEVSX1NFQyAvIDIsCisgICAgICAiR1NUX0VWRU5UX0NVU1RPTV9VUCB0b29rIHRvbyBsb25nIHRvIHJlYWNoIHNvdXJjZTogJSIKKyAgICAgIEdfR0lOVDY0X0ZPUk1BVCAiIHVzIiwgdGltZWRpZmYgKCZnb3RfZXZlbnRfdGltZSwgJnNlbnRfZXZlbnRfdGltZSkpOworCisgIHRlc3RfZXZlbnQgKHBpcGVsaW5lLCBHU1RfRVZFTlRfQ1VTVE9NX0JPVEgsIHNpbmtwYWQsIFRSVUUsIHNyY3BhZCk7CisgIGZhaWxfdW5sZXNzICh0aW1lZGlmZiAoJmdvdF9ldmVudF90aW1lLAorICAgICAgICAgICZzZW50X2V2ZW50X3RpbWUpIDwgR19VU0VDX1BFUl9TRUMgLyAyLAorICAgICAgIkdTVF9FVkVOVF9DVVNUT01fQk9USCB0b29rIHRvbyBsb25nIHRvIHJlYWNoIHNvdXJjZTogJSIKKyAgICAgIEdfR0lOVDY0X0ZPUk1BVCAiIHVzIiwgdGltZWRpZmYgKCZnb3RfZXZlbnRfdGltZSwgJnNlbnRfZXZlbnRfdGltZSkpOworCisgIHRlc3RfZXZlbnQgKHBpcGVsaW5lLCBHU1RfRVZFTlRfQ1VTVE9NX0JPVEhfT09CLCBzaW5rcGFkLCBUUlVFLCBzcmNwYWQpOworICBmYWlsX3VubGVzcyAodGltZWRpZmYgKCZnb3RfZXZlbnRfdGltZSwKKyAgICAgICAgICAmc2VudF9ldmVudF90aW1lKSA8IEdfVVNFQ19QRVJfU0VDIC8gMiwKKyAgICAgICJHU1RfRVZFTlRfQ1VTVE9NX0JPVEhfT09CIHRvb2sgdG9vIGxvbmcgdG8gcmVhY2ggc291cmNlOiAlIgorICAgICAgR19HSU5UNjRfRk9STUFUICIgdXMiLCB0aW1lZGlmZiAoJmdvdF9ldmVudF90aW1lLCAmc2VudF9ldmVudF90aW1lKSk7CisKKyAgLyogT3V0IG9mIGJhbmQgZG93bnN0cmVhbSBldmVudHMgKi8KKyAgdGVzdF9ldmVudCAocGlwZWxpbmUsIEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTV9PT0IsIHNyY3BhZCwgRkFMU0UsIHNyY3BhZCk7CisgIGZhaWxfdW5sZXNzICh0aW1lZGlmZiAoJmdvdF9ldmVudF90aW1lLAorICAgICAgICAgICZzZW50X2V2ZW50X3RpbWUpIDwgR19VU0VDX1BFUl9TRUMgLyAyLAorICAgICAgIkdTVF9FVkVOVF9DVVNUT01fRFNfT09CIHRvb2sgdG9vIGxvbmcgdG8gcmVhY2ggc291cmNlOiAlIgorICAgICAgR19HSU5UNjRfRk9STUFUICIgdXMiLCB0aW1lZGlmZiAoJmdvdF9ldmVudF90aW1lLCAmc2VudF9ldmVudF90aW1lKSk7CisKKyAgdGVzdF9ldmVudCAocGlwZWxpbmUsIEdTVF9FVkVOVF9DVVNUT01fQk9USF9PT0IsIHNyY3BhZCwgRkFMU0UsIHNyY3BhZCk7CisgIGZhaWxfdW5sZXNzICh0aW1lZGlmZiAoJmdvdF9ldmVudF90aW1lLAorICAgICAgICAgICZzZW50X2V2ZW50X3RpbWUpIDwgR19VU0VDX1BFUl9TRUMgLyAyLAorICAgICAgIkdTVF9FVkVOVF9DVVNUT01fQk9USF9PT0IgdG9vayB0b28gbG9uZyB0byByZWFjaCBzb3VyY2U6ICUiCisgICAgICBHX0dJTlQ2NF9GT1JNQVQgIiB1cyIsIHRpbWVkaWZmICgmZ290X2V2ZW50X3RpbWUsICZzZW50X2V2ZW50X3RpbWUpKTsKKworICAvKiBJbi1iYW5kIGRvd25zdHJlYW0gZXZlbnRzIGFyZSBleHBlY3RlZCB0byB0YWtlIGF0IGxlYXN0IDEgc2Vjb25kCisgICAqIHRvIHRyYXZlcnNlIHRoZSBxdWV1ZSAqLworICB0ZXN0X2V2ZW50IChwaXBlbGluZSwgR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNLCBzcmNwYWQsIEZBTFNFLCBzcmNwYWQpOworICBmYWlsX3VubGVzcyAodGltZWRpZmYgKCZnb3RfZXZlbnRfdGltZSwKKyAgICAgICAgICAmc2VudF9ldmVudF90aW1lKSA+PSBHX1VTRUNfUEVSX1NFQyAvIDIsCisgICAgICAiR1NUX0VWRU5UX0NVU1RPTV9EUyBhcnJpdmVkIHRvbyBxdWlja2x5IGZvciBhbiBpbi1iYW5kIGV2ZW50OiAlIgorICAgICAgR19HSU5UNjRfRk9STUFUICIgdXMiLCB0aW1lZGlmZiAoJmdvdF9ldmVudF90aW1lLCAmc2VudF9ldmVudF90aW1lKSk7CisKKyAgdGVzdF9ldmVudCAocGlwZWxpbmUsIEdTVF9FVkVOVF9DVVNUT01fQk9USCwgc3JjcGFkLCBGQUxTRSwgc3JjcGFkKTsKKyAgZmFpbF91bmxlc3MgKHRpbWVkaWZmICgmZ290X2V2ZW50X3RpbWUsCisgICAgICAgICAgJnNlbnRfZXZlbnRfdGltZSkgPj0gR19VU0VDX1BFUl9TRUMgLyAyLAorICAgICAgIkdTVF9FVkVOVF9DVVNUT01fQk9USCBhcnJpdmVkIHRvbyBxdWlja2x5IGZvciBhbiBpbi1iYW5kIGV2ZW50OiAlIgorICAgICAgR19HSU5UNjRfRk9STUFUICIgdXMiLCB0aW1lZGlmZiAoJmdvdF9ldmVudF90aW1lLCAmc2VudF9ldmVudF90aW1lKSk7CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLCBHU1RfU1RBVEVfTlVMTCk7CisgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKHBpcGVsaW5lKSwgTlVMTCwgTlVMTCwKKyAgICAgIEdTVF9DTE9DS19USU1FX05PTkUpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgU3VpdGUgKgorZ3N0X2V2ZW50X3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdEV2ZW50Iik7CisgIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImV2ZW50cyIpOworCisgIHRjYXNlX3NldF90aW1lb3V0ICh0Y19jaGFpbiwgMjApOworCisgIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIGNyZWF0ZV9ldmVudHMpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHNlbmRfY3VzdG9tX2V2ZW50cyk7CisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoZ3N0X2V2ZW50KTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY4YTZlOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jCkBAIC0wLDAgKzEsMTA4MyBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KKyAqCisgKiBnc3RnaG9zdHBhZC5jOiBVbml0IHRlc3QgZm9yIEdzdEdob3N0UGFkCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgorCisvKiB0ZXN0IGlmIHJlbW92aW5nIGEgYmluIGFsc28gY2xlYW5zIHVwIHRoZSBnaG9zdHBhZHMKKyAqLworR1NUX1NUQVJUX1RFU1QgKHRlc3RfcmVtb3ZlMSkKK3sKKyAgR3N0RWxlbWVudCAqYjEsICpiMiwgKnNyYywgKnNpbms7CisgIEdzdFBhZCAqc3JjcGFkLCAqc2lua3BhZDsKKyAgR3N0UGFkTGlua1JldHVybiByZXQ7CisKKyAgYjEgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJwaXBlbGluZSIsIE5VTEwpOworICBiMiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImJpbiIsIE5VTEwpOworICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCk7CisgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChiMSwgInBpcGVsaW5lIiwgMSk7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGIyLCAiYmluIiwgMSk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChiMiksIHNpbmspKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChiMSksIHNyYykpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChiMSwgInBpcGVsaW5lIiwgMSk7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGIyLCAiYmluIiwgMSk7CisgIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAoYjEpLCBiMikpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChiMSwgInBpcGVsaW5lIiwgMSk7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGIyLCAiYmluIiwgMSk7CisKKyAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rLCAic2luayIpOworICBnc3RfZWxlbWVudF9hZGRfcGFkIChiMiwgZ3N0X2dob3N0X3BhZF9uZXcgKCJzaW5rIiwgc2lua3BhZCkpOworICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKKworICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7CisgIC8qIGdldCB0aGUgZ2hvc3RwYWQgKi8KKyAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChiMiwgInNpbmsiKTsKKworICByZXQgPSBnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1BBRF9MSU5LX09LKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7CisKKyAgLyogbm93IHJlbW92ZSB0aGUgYmluIHdpdGggdGhlIGdob3N0cGFkLCBiMiBpcyBkaXNwb3NlZCBub3cuICovCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGIxLCAicGlwZWxpbmUiLCAxKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoYjIsICJiaW4iLCAxKTsKKyAgZ3N0X2Jpbl9yZW1vdmUgKEdTVF9CSU4gKGIxKSwgYjIpOworCisgIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMsICJzcmMiKTsKKyAgLyogcGFkIGNhbm5vdCBiZSBsaW5rZWQgbm93ICovCisgIGZhaWxfaWYgKGdzdF9wYWRfaXNfbGlua2VkIChzcmNwYWQpKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKKworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChiMSwgInBpcGVsaW5lIiwgMSk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGIxKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiB0ZXN0IGlmIHJlbW92aW5nIGEgYmluIGFsc28gY2xlYW5zIHVwIHRoZSBnaG9zdHBhZHMKKyAqLworR1NUX1NUQVJUX1RFU1QgKHRlc3RfcmVtb3ZlMikKK3sKKyAgR3N0RWxlbWVudCAqYjEsICpiMiwgKnNyYywgKnNpbms7CisgIEdzdFBhZCAqc3JjcGFkLCAqc2lua3BhZDsKKyAgR3N0UGFkTGlua1JldHVybiByZXQ7CisKKyAgYjEgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJwaXBlbGluZSIsIE5VTEwpOworICBiMiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImJpbiIsIE5VTEwpOworICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCk7CisgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmMsICJzcmMiLCAxKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGIyKSwgc2luaykpOworICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGIxKSwgc3JjKSk7CisgIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAoYjEpLCBiMikpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmMsICJzcmMiLCAxKTsKKworICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNpbmssICJzaW5rIik7CisgIGdzdF9lbGVtZW50X2FkZF9wYWQgKGIyLCBnc3RfZ2hvc3RfcGFkX25ldyAoInNpbmsiLCBzaW5rcGFkKSk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOworCisgIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMsICJzcmMiKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjcGFkLCAic3JjcGFkIiwgMik7IC8qIHNpbmNlIHdlIGdvdCBvbmUgKi8KKyAgLyogZ2V0IHRoZSBnaG9zdHBhZCAqLworICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGIyLCAic2luayIpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rcGFkLCAic2lua3BhZCIsIDIpOyAgICAgICAvKiBzaW5jZSB3ZSBnb3Qgb25lICovCisKKyAgR1NUX0RFQlVHICgibGlua2luZyBzcmNwYWQgYW5kIHNpbmtwYWQiKTsKKyAgcmV0ID0gZ3N0X3BhZF9saW5rIChzcmNwYWQsIHNpbmtwYWQpOworICBHU1RfREVCVUcgKCJsaW5rZWQgc3JjcGFkIGFuZCBzaW5rcGFkIik7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1BBRF9MSU5LX09LKTsKKyAgLyogdGhlIGxpbmtpbmcgY2F1c2VzIGEgcHJveHlwYWQgdG8gYmUgY3JlYXRlZCBmb3Igc3JjcGFkLAorICAgKiB0byB3aGljaCBzaW5rcGFkIGdldHMgbGlua2VkLiAgVGhpcyBwcm94eXBhZCBoYXMgYSByZWYgdG8gc3JjcGFkICovCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyY3BhZCwgInNyY3BhZCIsIDMpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rcGFkLCAic2lua3BhZCIsIDIpOworICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKKworICAvKiBub3cgcmVtb3ZlIHRoZSBzaW5rIGZyb20gdGhlIGJpbiAqLworICBnc3RfYmluX3JlbW92ZSAoR1NUX0JJTiAoYjIpLCBzaW5rKTsKKworICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7CisgIC8qIHBhZCBpcyBzdGlsbCBsaW5rZWQgdG8gZ2hvc3RwYWQgKi8KKyAgZmFpbF9pZiAoIWdzdF9wYWRfaXNfbGlua2VkIChzcmNwYWQpKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjLCAic3JjIiwgMSk7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyY3BhZCwgInNyY3BhZCIsIDMpOworICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rcGFkLCAic2lua3BhZCIsIDEpOworCisgIC8qIGNsZWFudXAgKi8KKyAgLyogbm93IHVubGluayB0aGUgcGFkcyAqLworICBnc3RfcGFkX3VubGluayAoc3JjcGFkLCBzaW5rcGFkKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjcGFkLCAic3JjcGFkIiwgMSk7IC8qIHByb3h5IGhhcyBkcm9wcGVkIHJlZiAqLworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rcGFkLCAic2lua3BhZCIsIDEpOworCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDEpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChiMiwgImJpbiIsIDEpOworICAvKiByZW1vdmUgYjIgZnJvbSBiMSAqLworICBnc3RfYmluX3JlbW92ZSAoR1NUX0JJTiAoYjEpLCBiMik7CisKKyAgLyogZmx1c2ggdGhlIG1lc3NhZ2UsIGRyb3BwaW5nIHRoZSBiMSByZWZjb3VudCB0byAxICovCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYjEsIEdTVF9TVEFURV9SRUFEWSk7CisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYjEsIEdTVF9TVEFURV9OVUxMKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoYjEsICJwaXBlbGluZSIsIDEpOworICBnc3Rfb2JqZWN0X3VucmVmIChiMSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworCisKKy8qIHRlc3QgaWYgYSBnaG9zdCBwYWQgd2l0aG91dCBhIHRhcmdldCBjYW4gYmUgbGlua2VkIGFuZAorICogdW5saW5rZWQuIEFuIHVudGFyZ2V0ZWQgZ2hvc3RwYWQgaGFzIGEgZGVmYXVsdCBBTlkgY2FwcyB1bmxlc3MgdGhlcmUgCisgKiBpcyBhIHBhZHRlbXBsYXRlIHRoYXQgc2F5cyBzb21ldGhpbmcgZWxzZS4KKyAqLworR1NUX1NUQVJUX1RFU1QgKHRlc3RfZ2hvc3RfcGFkc19ub3RhcmdldCkKK3sKKyAgR3N0RWxlbWVudCAqYjEsICpiMiwgKnNpbms7CisgIEdzdFBhZCAqc3JjcGFkLCAqc2lua3BhZCwgKnBlZXI7CisgIEdzdFBhZExpbmtSZXR1cm4gcmV0OworICBnYm9vbGVhbiBicmV0OworICBHc3RCdXMgKmJ1czsKKyAgR3N0Q2FwcyAqY2FwczsKKworICBiMSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInBpcGVsaW5lIiwgTlVMTCk7CisKKyAgLyogbWFrZSBzdXJlIGFsbCBtZXNzYWdlcyBhcmUgZGlzY2FyZGVkICovCisgIGJ1cyA9IGdzdF9waXBlbGluZV9nZXRfYnVzIChHU1RfUElQRUxJTkUgKGIxKSk7CisgIGdzdF9idXNfc2V0X2ZsdXNoaW5nIChidXMsIFRSVUUpOworICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOworCisgIGIyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYmluIiwgTlVMTCk7CisgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOworCisgIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAoYjEpLCBzaW5rKSk7CisgIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAoYjEpLCBiMikpOworCisgIHNyY3BhZCA9IGdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldCAoInNyYyIsIEdTVF9QQURfU1JDKTsKKyAgZmFpbF91bmxlc3MgKHNyY3BhZCAhPSBOVUxMKTsKKyAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rLCAic2luayIpOworICBmYWlsX3VubGVzcyAoc2lua3BhZCAhPSBOVUxMKTsKKworICByZXQgPSBnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1BBRF9MSU5LX09LKTsKKworICAvKiBjaGVjayBpZiB0aGUgcGVlcnMgYXJlIG9rICovCisgIHBlZXIgPSBnc3RfcGFkX2dldF9wZWVyIChzcmNwYWQpOworICBmYWlsX3VubGVzcyAocGVlciA9PSBzaW5rcGFkKTsKKyAgZ3N0X29iamVjdF91bnJlZiAocGVlcik7CisKKyAgcGVlciA9IGdzdF9wYWRfZ2V0X3BlZXIgKHNpbmtwYWQpOworICBmYWlsX3VubGVzcyAocGVlciA9PSBzcmNwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChwZWVyKTsKKworICAvKiBjaGVjayBjYXBzLCB1bnRhcmdldHRlZCBwYWQgc2hvdWxkIHJldHVybiBBTlkgb3IgdGhlIHBhZHRlbXBsYXRlIGNhcHMgCisgICAqIHdoZW4gaXQgd2FzIGNyZWF0ZWQgZnJvbSBhIHRlbXBsYXRlICovCisgIGNhcHMgPSBnc3RfcGFkX2dldF9jYXBzIChzcmNwYWQsIE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfYW55IChjYXBzKSk7CisgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKKworICAvKiB1bmxpbmsgKi8KKyAgYnJldCA9IGdzdF9wYWRfdW5saW5rIChzcmNwYWQsIHNpbmtwYWQpOworICBmYWlsX3VubGVzcyAoYnJldCA9PSBUUlVFKTsKKworICAvKiBjbGVhbnVwICovCisgIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChiMSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogVGVzdCB0aGF0IHJlbW92aW5nIHRoZSB0YXJnZXQgb2YgYSBnaG9zdHBhZCBwcm9wZXJseSBzZXRzIHRoZSB0YXJnZXQgb2YgdGhlCisgKiBnaG9zdHBhZCB0byBOVUxMICovCitHU1RfU1RBUlRfVEVTVCAodGVzdF9yZW1vdmVfdGFyZ2V0KQoreworICBHc3RFbGVtZW50ICpiMSwgKmIyLCAqc3JjLCAqc2luazsKKyAgR3N0UGFkICpzaW5rcGFkLCAqZ2hvc3QsICp0YXJnZXQ7CisKKyAgYjEgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJwaXBlbGluZSIsIE5VTEwpOworICBiMiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImJpbiIsIE5VTEwpOworICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCk7CisgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmMsICJzcmMiLCAxKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGIyKSwgc2luaykpOworICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGIxKSwgc3JjKSk7CisgIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAoYjEpLCBiMikpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmMsICJzcmMiLCAxKTsKKworICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNpbmssICJzaW5rIik7CisgIGdzdF9lbGVtZW50X2FkZF9wYWQgKGIyLCBnc3RfZ2hvc3RfcGFkX25ldyAoInNpbmsiLCBzaW5rcGFkKSk7CisKKyAgZ2hvc3QgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoYjIsICJzaW5rIik7CisKKyAgdGFyZ2V0ID0gZ3N0X2dob3N0X3BhZF9nZXRfdGFyZ2V0IChHU1RfR0hPU1RfUEFEIChnaG9zdCkpOworICBmYWlsX3VubGVzcyAodGFyZ2V0ID09IHNpbmtwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmICh0YXJnZXQpOworICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKKworICBnc3RfYmluX3JlbW92ZSAoR1NUX0JJTiAoYjIpLCBzaW5rKTsKKworICB0YXJnZXQgPSBnc3RfZ2hvc3RfcGFkX2dldF90YXJnZXQgKEdTVF9HSE9TVF9QQUQgKGdob3N0KSk7CisgIGZhaWxfdW5sZXNzICh0YXJnZXQgPT0gTlVMTCk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAoYjEpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKworLyogdGVzdCBpZiBsaW5raW5nIGZhaWxzIG92ZXIgZGlmZmVyZW50IGJpbnMgdXNpbmcgYSBwaXBlbGluZQorICogbGlrZSB0aGlzOgorICoKKyAqIGZha2VzcmMgbnVtX2J1ZmZlcnM9MTAgISAoIGZha2VzaW5rICkKKyAqCisgKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X2xpbmspCit7CisgIEdzdEVsZW1lbnQgKmIxLCAqYjIsICpzcmMsICpzaW5rOworICBHc3RQYWQgKnNyY3BhZCwgKnNpbmtwYWQsICpncGFkLCAqcHBhZCwgKnRtcDsKKyAgR3N0UGFkTGlua1JldHVybiByZXQ7CisKKyAgYjEgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJwaXBlbGluZSIsIE5VTEwpOworICBiMiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImJpbiIsIE5VTEwpOworICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCk7CisgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOworCisgIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAoYjIpLCBzaW5rKSk7CisgIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAoYjEpLCBzcmMpKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChiMSksIGIyKSk7CisKKyAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYywgInNyYyIpOworICBmYWlsX3VubGVzcyAoc3JjcGFkICE9IE5VTEwpOworICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNpbmssICJzaW5rIik7CisgIGZhaWxfdW5sZXNzIChzaW5rcGFkICE9IE5VTEwpOworCisgIC8qIGxpbmtpbmcgaW4gZGlmZmVyZW50IGhpZXJhcmNoaWVzIHNob3VsZCBmYWlsICovCisgIHJldCA9IGdzdF9wYWRfbGluayAoc3JjcGFkLCBzaW5rcGFkKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfUEFEX0xJTktfV1JPTkdfSElFUkFSQ0hZKTsKKworICAvKiBub3cgc2V0dXAgYSBnaG9zdHBhZCAqLworICBncGFkID0gZ3N0X2dob3N0X3BhZF9uZXcgKCJzaW5rIiwgc2lua3BhZCk7CisKKyAgLyogQ2hlY2sgaWYgdGhlIGludGVybmFsIHBhZHMgYXJlIHNldCBjb3JyZWN0bHkgKi8KKyAgcHBhZCA9IEdTVF9QQUQgKGdzdF9wcm94eV9wYWRfZ2V0X2ludGVybmFsIChHU1RfUFJPWFlfUEFEIChncGFkKSkpOworICBmYWlsX3VubGVzcyAocHBhZCA9PSBHU1RfUEFEX1BFRVIgKHNpbmtwYWQpKTsKKyAgdG1wID0gR1NUX1BBRCAoZ3N0X3Byb3h5X3BhZF9nZXRfaW50ZXJuYWwgKEdTVF9QUk9YWV9QQUQgKHBwYWQpKSk7CisgIGZhaWxfdW5sZXNzICh0bXAgPT0gZ3BhZCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHRtcCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKKyAgLyogbmVlZCB0byByZWYgYXMgX2FkZF9wYWQgdGFrZXMgb3duZXJzaGlwICovCisgIGdzdF9vYmplY3RfcmVmIChncGFkKTsKKyAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoYjIsIGdwYWQpOworCisgIC8qIG91ciBuZXcgc2lua3BhZCAqLworICBzaW5rcGFkID0gZ3BhZDsKKworICAvKiBhbmQgbGlua2luZyBzaG91bGQgd29yayBub3cgKi8KKyAgcmV0ID0gZ3N0X3BhZF9saW5rIChzcmNwYWQsIHNpbmtwYWQpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9QQURfTElOS19PSyk7CisKKyAgLyogZmx1c2ggdGhlIG1lc3NhZ2UsIGRyb3BwaW5nIHRoZSBiMSByZWZjb3VudCB0byAxICovCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYjEsIEdTVF9TVEFURV9SRUFEWSk7CisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYjEsIEdTVF9TVEFURV9OVUxMKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoYjEsICJwaXBlbGluZSIsIDEpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChiMSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogdGVzdCBpZiBnaG9zdHBhZHMgYXJlIGNyZWF0ZWQgYXV0b21hZ2ljYWxseSB3aGVuIHVzaW5nCisgKiBnc3RfZWxlbWVudF9saW5rX3BhZHMuCisgKgorICogZmFrZXNyYyBudW1fYnVmZmVycz0xMCAhICggaWRlbnRpdHkgKSAhIGZha2VzaW5rCisgKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X2dob3N0X3BhZHMpCit7CisgIEdzdEVsZW1lbnQgKmIxLCAqYjIsICpzcmMsICppMSwgKnNpbms7CisgIEdzdFBhZCAqZ3NpbmssICpnc3JjLCAqZ2lzcmMsICpnaXNpbmssICppc2luaywgKmlzcmMsICpmc3JjLCAqZnNpbms7CisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKKworICBiMSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInBpcGVsaW5lIiwgTlVMTCk7CisgIGIyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYmluIiwgTlVMTCk7CisgIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKKyAgZ19vYmplY3Rfc2V0IChzcmMsICJudW0tYnVmZmVycyIsIChpbnQpIDEwLCBOVUxMKTsKKyAgaTEgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpZGVudGl0eSIsIE5VTEwpOworICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGIyKSwgaTEpKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChiMSksIHNyYykpOworICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGIxKSwgYjIpKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChiMSksIHNpbmspKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmtfcGFkcyAoc3JjLCBOVUxMLCBpMSwgTlVMTCkpOworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGlua19wYWRzIChpMSwgTlVMTCwgc2luaywgTlVMTCkpOworICBHU1RfT0JKRUNUX0xPQ0sgKGIyKTsKKyAgZmFpbF91bmxlc3MgKGIyLT5udW1zaW5rcGFkcyA9PSAxKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9JU19HSE9TVF9QQUQgKGIyLT5zaW5rcGFkcy0+ZGF0YSkpOworICBmYWlsX3VubGVzcyAoYjItPm51bXNyY3BhZHMgPT0gMSk7CisgIGZhaWxfdW5sZXNzIChHU1RfSVNfR0hPU1RfUEFEIChiMi0+c3JjcGFkcy0+ZGF0YSkpOworICBHU1RfT0JKRUNUX1VOTE9DSyAoYjIpOworCisgIGZzcmMgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7CisgIGZhaWxfdW5sZXNzIChmc3JjICE9IE5VTEwpOworICBnc2luayA9IEdTVF9QQUQgKGdzdF9vYmplY3RfcmVmIChiMi0+c2lua3BhZHMtPmRhdGEpKTsKKyAgZmFpbF91bmxlc3MgKGdzaW5rICE9IE5VTEwpOworICBnc3JjID0gR1NUX1BBRCAoZ3N0X29iamVjdF9yZWYgKGIyLT5zcmNwYWRzLT5kYXRhKSk7CisgIGZhaWxfdW5sZXNzIChnc3JjICE9IE5VTEwpOworICBmc2luayA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rLCAic2luayIpOworICBmYWlsX3VubGVzcyAoZnNpbmsgIT0gTlVMTCk7CisKKyAgaXNpbmsgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoaTEsICJzaW5rIik7CisgIGZhaWxfdW5sZXNzIChpc2luayAhPSBOVUxMKTsKKyAgaXNyYyA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChpMSwgInNyYyIpOworICBmYWlsX3VubGVzcyAoaXNyYyAhPSBOVUxMKTsKKyAgZ2lzcmMgPSBnc3RfcGFkX2dldF9wZWVyIChpc2luayk7CisgIGZhaWxfdW5sZXNzIChnaXNyYyAhPSBOVUxMKTsKKyAgZ2lzaW5rID0gZ3N0X3BhZF9nZXRfcGVlciAoaXNyYyk7CisgIGZhaWxfdW5sZXNzIChnaXNpbmsgIT0gTlVMTCk7CisKKyAgLyogYWxsIG9iamVjdHMgYWJvdmUgaGF2ZSBvbmUgcmVmY291bnQgb3duZWQgYnkgdXMgYXMgd2VsbCAqLworCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGZzcmMsICJmc3JjIiwgMyk7ICAgICAvKiBwYXJlbnQgYW5kIGdpc3JjICovCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGdzaW5rLCAiZ3NpbmsiLCAyKTsgICAvKiBwYXJlbnQgKi8KKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoZ3NyYywgImdzcmMiLCAyKTsgICAgIC8qIHBhcmVudCAqLworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChmc2luaywgImZzaW5rIiwgMyk7ICAgLyogcGFyZW50IGFuZCBnaXNpbmsgKi8KKworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChnaXNyYywgImdpc3JjIiwgMik7ICAgLyogcGFyZW50ICovCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGlzaW5rLCAiaXNpbmsiLCAzKTsgICAvKiBwYXJlbnQgYW5kIGdzaW5rICovCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGdpc2luaywgImdpc2luayIsIDIpOyAvKiBwYXJlbnQgKi8KKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoaXNyYywgImlzcmMiLCAzKTsgICAgIC8qIHBhcmVudCBhbmQgZ3NyYyAqLworCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYjEsIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChiMSwgTlVMTCwgTlVMTCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKKworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGIxLCBHU1RfU1RBVEVfTlVMTCk7CisgIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoYjEsIE5VTEwsIE5VTEwsIEdTVF9DTE9DS19USU1FX05PTkUpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAoYjEpOworICAvKiB1bnJlZmZpbmcgdGhlIGJpbiB3aWxsIHVucmVmIGFsbCBlbGVtZW50cywgd2hpY2ggd2lsbCB1bmxpbmsgYW5kIHVucGFyZW50CisgICAqIGFsbCBwYWRzICovCisKKyAgLyogd2FpdCBmb3IgdGhyZWFkIHRvIHNldHRsZSBkb3duICovCisgIHdoaWxlIChHU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChmc3JjKSA+IDEpCisgICAgVEhSRUFEX1NXSVRDSCAoKTsKKworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChmc3JjLCAiZnNyYyIsIDEpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChnc2luaywgImdzaW5rIiwgMSk7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGdzcmMsICJnc2luayIsIDEpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChmc2luaywgImZzaW5rIiwgMSk7CisKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoZ2lzcmMsICJnaXNyYyIsIDIpOyAgIC8qIGdzaW5rICovCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGlzaW5rLCAiaXNpbmsiLCAxKTsgICAvKiBnc2luayAqLworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChnaXNpbmssICJnaXNpbmsiLCAyKTsgLyogZ3NyYyAqLworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChpc3JjLCAiaXNyYyIsIDEpOyAgICAgLyogZ3NyYyAqLworCisgIGdzdF9vYmplY3RfdW5yZWYgKGdzaW5rKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoaXNpbmssICJpc2luayIsIDEpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChnaXNyYywgImdpc3JjIiwgMSk7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGZzcmMsICJmc3JjIiwgMSk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGdpc3JjKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoZnNyYywgImZzcmMiLCAxKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChnc3JjKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoaXNyYywgImlzcmMiLCAxKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoZ2lzaW5rLCAiZ2lzaW5rIiwgMSk7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGZzaW5rLCAiZnNpbmsiLCAxKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoZ2lzaW5rKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoZnNpbmssICJmc2luayIsIDEpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKGZzcmMpOworICBnc3Rfb2JqZWN0X3VucmVmIChpc3JjKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoaXNpbmspOworICBnc3Rfb2JqZWN0X3VucmVmIChmc2luayk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfZ2hvc3RfcGFkc19iaW4pCit7CisgIEdzdEJpbiAqcGlwZWxpbmU7CisgIEdzdEJpbiAqc3JjYmluOworICBHc3RCaW4gKnNpbmtiaW47CisgIEdzdEVsZW1lbnQgKnNyYzsKKyAgR3N0RWxlbWVudCAqc2luazsKKyAgR3N0UGFkICpzcmNwYWQsICpzcmNnaG9zdCwgKnRhcmdldDsKKyAgR3N0UGFkICpzaW5rcGFkLCAqc2lua2dob3N0OworCisgIHBpcGVsaW5lID0gR1NUX0JJTiAoZ3N0X3BpcGVsaW5lX25ldyAoInBpcGUiKSk7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHBpcGVsaW5lLCAicGlwZWxpbmUiLCAxKTsKKworICBzcmNiaW4gPSBHU1RfQklOIChnc3RfYmluX25ldyAoInNyY2JpbiIpKTsKKyAgZ3N0X2Jpbl9hZGQgKHBpcGVsaW5lLCBHU1RfRUxFTUVOVCAoc3JjYmluKSk7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHBpcGVsaW5lLCAicGlwZWxpbmUiLCAxKTsKKworICBzaW5rYmluID0gR1NUX0JJTiAoZ3N0X2Jpbl9uZXcgKCJzaW5rYmluIikpOworICBnc3RfYmluX2FkZCAocGlwZWxpbmUsIEdTVF9FTEVNRU5UIChzaW5rYmluKSk7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHBpcGVsaW5lLCAicGlwZWxpbmUiLCAxKTsKKworICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYyIpOworICBnc3RfYmluX2FkZCAoc3JjYmluLCBzcmMpOworICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7CisgIHNyY2dob3N0ID0gZ3N0X2dob3N0X3BhZF9uZXcgKCJzcmMiLCBzcmNwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOworICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoc3JjYmluKSwgc3JjZ2hvc3QpOworCisgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7CisgIGdzdF9iaW5fYWRkIChzaW5rYmluLCBzaW5rKTsKKyAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rLCAic2luayIpOworICBzaW5rZ2hvc3QgPSBnc3RfZ2hvc3RfcGFkX25ldyAoInNpbmsiLCBzaW5rcGFkKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7CisgIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChzaW5rYmluKSwgc2lua2dob3N0KTsKKworICBnc3RfZWxlbWVudF9saW5rIChHU1RfRUxFTUVOVCAoc3JjYmluKSwgR1NUX0VMRU1FTlQgKHNpbmtiaW4pKTsKKworICBmYWlsX3VubGVzcyAoR1NUX1BBRF9QRUVSIChzcmNnaG9zdCkgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChHU1RfUEFEX1BFRVIgKHNpbmtnaG9zdCkgIT0gTlVMTCk7CisgIHRhcmdldCA9IGdzdF9naG9zdF9wYWRfZ2V0X3RhcmdldCAoR1NUX0dIT1NUX1BBRCAoc3JjZ2hvc3QpKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9QQURfUEVFUiAodGFyZ2V0KSAhPSBOVUxMKTsKKyAgZ3N0X29iamVjdF91bnJlZiAodGFyZ2V0KTsKKyAgdGFyZ2V0ID0gZ3N0X2dob3N0X3BhZF9nZXRfdGFyZ2V0IChHU1RfR0hPU1RfUEFEIChzaW5rZ2hvc3QpKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9QQURfUEVFUiAodGFyZ2V0KSAhPSBOVUxMKTsKKyAgZ3N0X29iamVjdF91bnJlZiAodGFyZ2V0KTsKKworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwaXBlbGluZSwgInBpcGVsaW5lIiwgMSk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIEdNdXRleCAqbXV0ZXg7CisgIEdDb25kICpjb25kOworfSBCbG9ja0RhdGE7CisKK3N0YXRpYyBHc3RQcm9iZVJldHVybgorYmxvY2tfY2FsbGJhY2sgKEdzdFBhZCAqIHBhZCwgR3N0UHJvYmVUeXBlIHR5cGUsIGdwb2ludGVyIHR5cGVfZGF0YSwKKyAgICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIEJsb2NrRGF0YSAqYmxvY2tfZGF0YSA9IChCbG9ja0RhdGEgKikgdXNlcl9kYXRhOworCisgIGdfbXV0ZXhfbG9jayAoYmxvY2tfZGF0YS0+bXV0ZXgpOworICBHU1RfREVCVUcgKCJibG9ja2VkXG4iKTsKKyAgZ19jb25kX3NpZ25hbCAoYmxvY2tfZGF0YS0+Y29uZCk7CisgIGdfbXV0ZXhfdW5sb2NrIChibG9ja19kYXRhLT5tdXRleCk7CisKKyAgcmV0dXJuIEdTVF9QUk9CRV9PSzsKK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfZ2hvc3RfcGFkc19ibG9jaykKK3sKKyAgR3N0QmluICpwaXBlbGluZTsKKyAgR3N0QmluICpzcmNiaW47CisgIEdzdEVsZW1lbnQgKnNyYzsKKyAgR3N0UGFkICpzcmNwYWQ7CisgIEdzdFBhZCAqc3JjZ2hvc3Q7CisgIEJsb2NrRGF0YSBibG9ja19kYXRhOworCisgIHBpcGVsaW5lID0gR1NUX0JJTiAoZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIikpOworCisgIHNyY2JpbiA9IEdTVF9CSU4gKGdzdF9iaW5fbmV3ICgic3JjYmluIikpOworICBnc3RfYmluX2FkZCAocGlwZWxpbmUsIEdTVF9FTEVNRU5UIChzcmNiaW4pKTsKKworICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYyIpOworICBnc3RfYmluX2FkZCAoc3JjYmluLCBzcmMpOworICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7CisgIHNyY2dob3N0ID0gZ3N0X2dob3N0X3BhZF9uZXcgKCJzcmMiLCBzcmNwYWQpOworICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoc3JjYmluKSwgc3JjZ2hvc3QpOworICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOworCisgIGJsb2NrX2RhdGEubXV0ZXggPSBnX211dGV4X25ldyAoKTsKKyAgYmxvY2tfZGF0YS5jb25kID0gZ19jb25kX25ldyAoKTsKKworICBnX211dGV4X2xvY2sgKGJsb2NrX2RhdGEubXV0ZXgpOworICBnc3RfcGFkX2FkZF9wcm9iZSAoc3JjZ2hvc3QsIEdTVF9QUk9CRV9UWVBFX0JMT0NLLCBibG9ja19jYWxsYmFjaywKKyAgICAgICZibG9ja19kYXRhLCBOVUxMKTsKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLCBHU1RfU1RBVEVfUExBWUlORyk7CisgIC8qIGFuZCB3YWl0IG5vdyAqLworICBnX2NvbmRfd2FpdCAoYmxvY2tfZGF0YS5jb25kLCBibG9ja19kYXRhLm11dGV4KTsKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLCBHU1RfU1RBVEVfTlVMTCk7CisgIGdfbXV0ZXhfdW5sb2NrIChibG9ja19kYXRhLm11dGV4KTsKKworICBnX211dGV4X2ZyZWUgKGJsb2NrX2RhdGEubXV0ZXgpOworICBnX2NvbmRfZnJlZSAoYmxvY2tfZGF0YS5jb25kKTsKKworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwaXBlbGluZSwgInBpcGVsaW5lIiwgMSk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9naG9zdF9wYWRzX3Byb2JlcykKK3sKKyAgR3N0QmluICpwaXBlbGluZTsKKyAgR3N0QmluICpzcmNiaW47CisgIEdzdEVsZW1lbnQgKnNyYzsKKyAgR3N0UGFkICpzcmNwYWQ7CisgIEdzdFBhZCAqc3JjZ2hvc3Q7CisgIEJsb2NrRGF0YSBibG9ja19kYXRhOworCisgIHBpcGVsaW5lID0gR1NUX0JJTiAoZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIikpOworCisgIHNyY2JpbiA9IEdTVF9CSU4gKGdzdF9iaW5fbmV3ICgic3JjYmluIikpOworICBnc3RfYmluX2FkZCAocGlwZWxpbmUsIEdTVF9FTEVNRU5UIChzcmNiaW4pKTsKKworICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYyIpOworICBnc3RfYmluX2FkZCAoc3JjYmluLCBzcmMpOworICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7CisgIHNyY2dob3N0ID0gZ3N0X2dob3N0X3BhZF9uZXcgKCJzcmMiLCBzcmNwYWQpOworICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoc3JjYmluKSwgc3JjZ2hvc3QpOworICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOworCisgIGJsb2NrX2RhdGEubXV0ZXggPSBnX211dGV4X25ldyAoKTsKKyAgYmxvY2tfZGF0YS5jb25kID0gZ19jb25kX25ldyAoKTsKKworICBnX211dGV4X2xvY2sgKGJsb2NrX2RhdGEubXV0ZXgpOworICBnc3RfcGFkX2FkZF9wcm9iZSAoc3JjZ2hvc3QsIEdTVF9QUk9CRV9UWVBFX0JMT0NLLCBibG9ja19jYWxsYmFjaywKKyAgICAgICZibG9ja19kYXRhLCBOVUxMKTsKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLCBHU1RfU1RBVEVfUExBWUlORyk7CisgIC8qIGFuZCB3YWl0IG5vdyAqLworICBnX2NvbmRfd2FpdCAoYmxvY2tfZGF0YS5jb25kLCBibG9ja19kYXRhLm11dGV4KTsKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLCBHU1RfU1RBVEVfTlVMTCk7CisgIGdfbXV0ZXhfdW5sb2NrIChibG9ja19kYXRhLm11dGV4KTsKKworICBnX211dGV4X2ZyZWUgKGJsb2NrX2RhdGEubXV0ZXgpOworICBnX2NvbmRfZnJlZSAoYmxvY2tfZGF0YS5jb25kKTsKKworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwaXBlbGluZSwgInBpcGVsaW5lIiwgMSk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9naG9zdF9wYWRzX25ld19mcm9tX3RlbXBsYXRlKQoreworICBHc3RQYWQgKnNpbmtwYWQsICpnaG9zdHBhZDsKKyAgR3N0UGFkVGVtcGxhdGUgKnBhZHRlbXBsLCAqZ2hvc3R0ZW1wbDsKKyAgR3N0Q2FwcyAqcGFkY2FwcywgKmdob3N0Y2FwcywgKm5ld2NhcHM7CisKKyAgcGFkY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgic29tZS9jYXBzIik7CisgIGZhaWxfdW5sZXNzIChwYWRjYXBzICE9IE5VTEwpOworICBnaG9zdGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInNvbWUvY2Fwcztzb21lL290aGVyLWNhcHMiKTsKKyAgZmFpbF91bmxlc3MgKGdob3N0Y2FwcyAhPSBOVUxMKTsKKworICBwYWR0ZW1wbCA9IGdzdF9wYWRfdGVtcGxhdGVfbmV3ICgicGFkdGVtcGwiLCBHU1RfUEFEX1NJTkssCisgICAgICBHU1RfUEFEX0FMV0FZUywgcGFkY2Fwcyk7CisgIGZhaWxfdW5sZXNzIChwYWR0ZW1wbCAhPSBOVUxMKTsKKyAgZ2hvc3R0ZW1wbCA9IGdzdF9wYWRfdGVtcGxhdGVfbmV3ICgiZ2hvc3R0ZW1wbCIsIEdTVF9QQURfU0lOSywKKyAgICAgIEdTVF9QQURfQUxXQVlTLCBnaG9zdGNhcHMpOworCisgIHNpbmtwYWQgPSBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlIChwYWR0ZW1wbCwgInNpbmtwYWQiKTsKKyAgZmFpbF91bmxlc3MgKHNpbmtwYWQgIT0gTlVMTCk7CisKKyAgZ2hvc3RwYWQgPSBnc3RfZ2hvc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlICgiZ2hvc3RwYWQiLCBzaW5rcGFkLCBnaG9zdHRlbXBsKTsKKyAgZmFpbF91bmxlc3MgKGdob3N0cGFkICE9IE5VTEwpOworCisgIC8qIGNoZWNrIHRlbXBsYXRlIGlzIHByb3Blcmx5IHNldCAqLworICBmYWlsX3VubGVzcyAoR1NUX1BBRF9QQURfVEVNUExBVEUgKGdob3N0cGFkKSA9PSBnaG9zdHRlbXBsKTsKKworICAvKiBjaGVjayBnaG9zdHBhZCBjYXBzIGFyZSBmcm9tIHRoZSBzaW5rcGFkICovCisgIG5ld2NhcHMgPSBnc3RfcGFkX2dldF9jYXBzIChnaG9zdHBhZCwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChuZXdjYXBzICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKG5ld2NhcHMsIHBhZGNhcHMpKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKG5ld2NhcHMpOworICBnc3RfY2Fwc191bnJlZiAocGFkY2Fwcyk7CisgIGdzdF9jYXBzX3VucmVmIChnaG9zdGNhcHMpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChnaG9zdHBhZCk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAocGFkdGVtcGwpOworICBnc3Rfb2JqZWN0X3VucmVmIChnaG9zdHRlbXBsKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9naG9zdF9wYWRzX25ld19ub190YXJnZXRfZnJvbV90ZW1wbGF0ZSkKK3sKKyAgR3N0UGFkICpzaW5rcGFkLCAqZ2hvc3RwYWQ7CisgIEdzdFBhZFRlbXBsYXRlICpwYWR0ZW1wbCwgKmdob3N0dGVtcGw7CisgIEdzdENhcHMgKnBhZGNhcHMsICpnaG9zdGNhcHMsICpuZXdjYXBzOworCisgIHBhZGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInNvbWUvY2FwcyIpOworICBmYWlsX3VubGVzcyAocGFkY2FwcyAhPSBOVUxMKTsKKyAgZ2hvc3RjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJzb21lL2NhcHM7c29tZS9vdGhlci1jYXBzIik7CisgIGZhaWxfdW5sZXNzIChnaG9zdGNhcHMgIT0gTlVMTCk7CisKKyAgcGFkdGVtcGwgPSBnc3RfcGFkX3RlbXBsYXRlX25ldyAoInBhZHRlbXBsIiwgR1NUX1BBRF9TSU5LLAorICAgICAgR1NUX1BBRF9BTFdBWVMsIHBhZGNhcHMpOworICBmYWlsX3VubGVzcyAocGFkdGVtcGwgIT0gTlVMTCk7CisgIGdob3N0dGVtcGwgPSBnc3RfcGFkX3RlbXBsYXRlX25ldyAoImdob3N0dGVtcGwiLCBHU1RfUEFEX1NJTkssCisgICAgICBHU1RfUEFEX0FMV0FZUywgZ2hvc3RjYXBzKTsKKworICBzaW5rcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAocGFkdGVtcGwsICJzaW5rcGFkIik7CisgIGZhaWxfdW5sZXNzIChzaW5rcGFkICE9IE5VTEwpOworCisgIGdob3N0cGFkID0gZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0X2Zyb21fdGVtcGxhdGUgKCJnaG9zdHBhZCIsIGdob3N0dGVtcGwpOworICBmYWlsX3VubGVzcyAoZ2hvc3RwYWQgIT0gTlVMTCk7CisKKyAgLyogY2hlY2sgdGVtcGxhdGUgaXMgcHJvcGVybHkgc2V0ICovCisgIGZhaWxfdW5sZXNzIChHU1RfUEFEX1BBRF9URU1QTEFURSAoZ2hvc3RwYWQpID09IGdob3N0dGVtcGwpOworCisgIC8qIGNoZWNrIGdob3N0cGFkIGNhcHMgYXJlIGZyb20gdGhlIGdob3N0cGFkIHRlbXBsYXRlICovCisgIG5ld2NhcHMgPSBnc3RfcGFkX2dldF9jYXBzIChnaG9zdHBhZCwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChuZXdjYXBzICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKG5ld2NhcHMsIGdob3N0Y2FwcykpOworICBnc3RfY2Fwc191bnJlZiAobmV3Y2Fwcyk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9naG9zdF9wYWRfc2V0X3RhcmdldCAoKEdzdEdob3N0UGFkICopIGdob3N0cGFkLCBzaW5rcGFkKSk7CisKKyAgLyogY2hlY2sgZ2hvc3RwYWQgY2FwcyBhcmUgbm93IGZyb20gdGhlIHRhcmdldCBwYWQgKi8KKyAgbmV3Y2FwcyA9IGdzdF9wYWRfZ2V0X2NhcHMgKGdob3N0cGFkLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKG5ld2NhcHMgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAobmV3Y2FwcywgcGFkY2FwcykpOworICBnc3RfY2Fwc191bnJlZiAobmV3Y2Fwcyk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGdob3N0cGFkKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChwYWR0ZW1wbCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGdob3N0dGVtcGwpOworCisgIGdzdF9jYXBzX3VucmVmIChwYWRjYXBzKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGdob3N0Y2Fwcyk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIHZvaWQKK2dob3N0X25vdGlmeV9jYXBzIChHT2JqZWN0ICogb2JqZWN0LCBHUGFyYW1TcGVjICogcHNwZWMsIGdwb2ludGVyICogdXNlcl9kYXRhKQoreworICBHU1RfREVCVUcgKCJjYXBzIG5vdGlmeSBjYWxsZWQiKTsKKyAgKCooZ2ludCAqKSB1c2VyX2RhdGEpKys7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2dob3N0X3BhZHNfZm9yd2FyZF9zZXRjYXBzKQoreworICBHc3RDYXBzICp0ZW1wbF9jYXBzLCAqY2FwczEsICpjYXBzMjsKKyAgR3N0UGFkVGVtcGxhdGUgKnNyY190ZW1wbGF0ZSwgKnNpbmtfdGVtcGxhdGU7CisgIEdzdFBhZCAqc3JjLCAqZ2hvc3QsICpzaW5rOworICBnaW50IG5vdGlmeV9jb3VudGVyID0gMDsKKworICB0ZW1wbF9jYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJtZWg7IG11aCIpOworICBzcmNfdGVtcGxhdGUgPSBnc3RfcGFkX3RlbXBsYXRlX25ldyAoInNyYyIsIEdTVF9QQURfU1JDLAorICAgICAgR1NUX1BBRF9BTFdBWVMsIHRlbXBsX2NhcHMpOworICBnc3RfY2Fwc191bnJlZiAodGVtcGxfY2Fwcyk7CisKKyAgdGVtcGxfY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgibXVoOyBtZWgiKTsKKyAgc2lua190ZW1wbGF0ZSA9IGdzdF9wYWRfdGVtcGxhdGVfbmV3ICgic2luayIsIEdTVF9QQURfU0lOSywKKyAgICAgIEdTVF9QQURfQUxXQVlTLCB0ZW1wbF9jYXBzKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKHRlbXBsX2NhcHMpOworCisgIHNyYyA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHNyY190ZW1wbGF0ZSwgInNyYyIpOworICBzaW5rID0gZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoc2lua190ZW1wbGF0ZSwgInNpbmsiKTsKKworICAvKiBnaG9zdCBzb3VyY2UgcGFkLCBzZXR0aW5nIGNhcHMgb24gdGhlIHNvdXJjZSBpbmZsdWVuY2VzIHRoZSBjYXBzIG9mIHRoZQorICAgKiBnaG9zdHBhZC4gKi8KKyAgZ2hvc3QgPSBnc3RfZ2hvc3RfcGFkX25ldyAoImdob3N0c3JjIiwgc3JjKTsKKyAgZ19zaWduYWxfY29ubmVjdCAoZ2hvc3QsICJub3RpZnk6OmNhcHMiLAorICAgICAgR19DQUxMQkFDSyAoZ2hvc3Rfbm90aWZ5X2NhcHMpLCAmbm90aWZ5X2NvdW50ZXIpOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rIChnaG9zdCwgc2luaykgPT0gR1NUX1BBRF9MSU5LX09LKTsKKworICAvKiBBY3RpdmF0ZSBwYWRzIGZvciBjYXBzIGZvcndhcmRpbmcvc2V0dGluZyB0byB3b3JrICovCisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjLCBUUlVFKTsKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlIChnaG9zdCwgVFJVRSk7CisKKyAgY2FwczEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoIm1laCIpOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9zZXRfY2FwcyAoc3JjLCBjYXBzMSkpOworICBjYXBzMiA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAoZ2hvc3QpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGNhcHMxLCBjYXBzMikpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChub3RpZnlfY291bnRlciwgMSk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAoZ2hvc3QpOworICBnc3RfY2Fwc191bnJlZiAoY2FwczEpOworCisgIC8qIHNvdXJjZSAyLCBzZXR0aW5nIHRoZSBjYXBzIG9uIHRoZSBnaG9zdHBhZCBkb2VzIG5vdCBpbmZsdWVuY2UgdGhlIGNhcHMgb2YKKyAgICogdGhlIHRhcmdldCAqLworICBub3RpZnlfY291bnRlciA9IDA7CisgIGdob3N0ID0gZ3N0X2dob3N0X3BhZF9uZXcgKCJnaG9zdHNyYyIsIHNyYyk7CisgIGdfc2lnbmFsX2Nvbm5lY3QgKGdob3N0LCAibm90aWZ5OjpjYXBzIiwKKyAgICAgIEdfQ0FMTEJBQ0sgKGdob3N0X25vdGlmeV9jYXBzKSwgJm5vdGlmeV9jb3VudGVyKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAoZ2hvc3QsIHNpbmspID09IEdTVF9QQURfTElOS19PSyk7CisKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlIChnaG9zdCwgVFJVRSk7CisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2luaywgVFJVRSk7CisKKyAgY2FwczEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoIm1laCIpOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9zZXRfY2FwcyAoZ2hvc3QsIGNhcHMxKSk7CisjaWYgMAorICBjYXBzMiA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAoc3JjKTsKKyAgZmFpbF91bmxlc3MgKGNhcHMyID09IE5VTEwpOworI2VuZGlmCisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKG5vdGlmeV9jb3VudGVyLCAxKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChnaG9zdCk7CisgIGdzdF9jYXBzX3VucmVmIChjYXBzMSk7CisKKworICAvKiBnaG9zdCBzaW5rIHBhZC4gU2V0dGluZyBjYXBzIG9uIHRoZSBnaG9zdHBhZCB3aWxsIGFsc28gc2V0IHRob3NlIGNhcHMgb24KKyAgICogdGhlIHRhcmdldCBwYWQuICovCisgIG5vdGlmeV9jb3VudGVyID0gMDsKKyAgZ2hvc3QgPSBnc3RfZ2hvc3RfcGFkX25ldyAoImdob3N0c2luayIsIHNpbmspOworICBnX3NpZ25hbF9jb25uZWN0IChnaG9zdCwgIm5vdGlmeTo6Y2FwcyIsCisgICAgICBHX0NBTExCQUNLIChnaG9zdF9ub3RpZnlfY2FwcyksICZub3RpZnlfY291bnRlcik7CisgIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHNyYywgZ2hvc3QpID09IEdTVF9QQURfTElOS19PSyk7CisKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzcmMsIFRSVUUpOworICBnc3RfcGFkX3NldF9hY3RpdmUgKGdob3N0LCBUUlVFKTsKKworICBjYXBzMSA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgibXVoIik7CisgIGZhaWxfdW5sZXNzIChnc3RfcGFkX3NldF9jYXBzIChnaG9zdCwgY2FwczEpKTsKKyAgY2FwczIgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKHNpbmspOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGNhcHMxLCBjYXBzMikpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChub3RpZnlfY291bnRlciwgMSk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAoZ2hvc3QpOworICBnc3RfY2Fwc191bnJlZiAoY2FwczEpOworCisgIC8qIGNsZWFyIGNhcHMgb24gcGFkcyAqLworICBnc3RfcGFkX3NldF9hY3RpdmUgKHNyYywgRkFMU0UpOworICBnc3RfcGFkX3NldF9hY3RpdmUgKHNyYywgVFJVRSk7CisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2luaywgRkFMU0UpOworICBnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmssIFRSVUUpOworCisgIC8qIHNpbmsgcGFkIDIsIHNldHRpbmcgY2FwcyBqdXN0IG9uIHRoZSB0YXJnZXQgcGFkIHNob3VsZCBub3QgaW5mbHVlbmNlIHRoZSBjYXBzCisgICAqIG9uIHRoZSBnaG9zdHBhZC4gKi8KKyAgbm90aWZ5X2NvdW50ZXIgPSAwOworICBnaG9zdCA9IGdzdF9naG9zdF9wYWRfbmV3ICgiZ2hvc3RzaW5rIiwgc2luayk7CisgIGZhaWxfdW5sZXNzIChnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKGdob3N0KSA9PSBOVUxMKTsKKyAgZ19zaWduYWxfY29ubmVjdCAoZ2hvc3QsICJub3RpZnk6OmNhcHMiLAorICAgICAgR19DQUxMQkFDSyAoZ2hvc3Rfbm90aWZ5X2NhcHMpLCAmbm90aWZ5X2NvdW50ZXIpOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rIChzcmMsIGdob3N0KSA9PSBHU1RfUEFEX0xJTktfT0spOworCisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoZ2hvc3QsIFRSVUUpOworCisgIGNhcHMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJtdWgiKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wYWRfc2V0X2NhcHMgKHNpbmssIGNhcHMxKSk7CisgIGNhcHMyID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChnaG9zdCk7CisgIGZhaWxfdW5sZXNzIChjYXBzMiA9PSBOVUxMKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobm90aWZ5X2NvdW50ZXIsIDApOworCisgIGdzdF9vYmplY3RfdW5yZWYgKGdob3N0KTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMxKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChzcmMpOworICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc3JjX3RlbXBsYXRlKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc2lua190ZW1wbGF0ZSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIGdpbnQgbGlua2VkX2NvdW50MTsKK3N0YXRpYyBnaW50IHVubGlua2VkX2NvdW50MTsKK3N0YXRpYyBnaW50IGxpbmtlZF9jb3VudDI7CitzdGF0aWMgZ2ludCB1bmxpbmtlZF9jb3VudDI7CisKK3N0YXRpYyBHc3RQYWRMaW5rUmV0dXJuCitwYWRfbGlua2VkMSAoR3N0UGFkICogcGFkLCBHc3RQYWQgKiBwZWVyKQoreworICBsaW5rZWRfY291bnQxKys7CisKKyAgcmV0dXJuIEdTVF9QQURfTElOS19PSzsKK30KKworc3RhdGljIHZvaWQKK3BhZF91bmxpbmtlZDEgKEdzdFBhZCAqIHBhZCkKK3sKKyAgdW5saW5rZWRfY291bnQxKys7Cit9CisKK3N0YXRpYyBHc3RQYWRMaW5rUmV0dXJuCitwYWRfbGlua2VkMiAoR3N0UGFkICogcGFkLCBHc3RQYWQgKiBwZWVyKQoreworICBsaW5rZWRfY291bnQyKys7CisKKyAgcmV0dXJuIEdTVF9QQURfTElOS19PSzsKK30KKworc3RhdGljIHZvaWQKK3BhZF91bmxpbmtlZDIgKEdzdFBhZCAqIHBhZCkKK3sKKyAgdW5saW5rZWRfY291bnQyKys7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2dob3N0X3BhZHNfc2lua19saW5rX3VubGluaykKK3sKKyAgR3N0Q2FwcyAqcGFkY2FwczsKKyAgR3N0UGFkICpzcmNwYWQsICpzaW5rcGFkLCAqZ2hvc3RwYWQ7CisgIEdzdFBhZFRlbXBsYXRlICpzcmN0ZW1wbCwgKnNpbmt0ZW1wbDsKKyAgR3N0UGFkTGlua1JldHVybiByZXQ7CisgIGdib29sZWFuIHJlczsKKworICBwYWRjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJzb21lL2NhcHMiKTsKKyAgZmFpbF91bmxlc3MgKHBhZGNhcHMgIT0gTlVMTCk7CisgIHNyY3RlbXBsID0gZ3N0X3BhZF90ZW1wbGF0ZV9uZXcgKCJzcmN0ZW1wbCIsIEdTVF9QQURfU1JDLAorICAgICAgR1NUX1BBRF9BTFdBWVMsIHBhZGNhcHMpOworICBnc3RfY2Fwc191bnJlZiAocGFkY2Fwcyk7CisKKyAgcGFkY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgic29tZS9jYXBzIik7CisgIGZhaWxfdW5sZXNzIChwYWRjYXBzICE9IE5VTEwpOworICBzaW5rdGVtcGwgPSBnc3RfcGFkX3RlbXBsYXRlX25ldyAoInNpbmt0ZW1wbCIsIEdTVF9QQURfU0lOSywKKyAgICAgIEdTVF9QQURfQUxXQVlTLCBwYWRjYXBzKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKHBhZGNhcHMpOworCisgIHNyY3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHNyY3RlbXBsLCAic3JjIik7CisgIGZhaWxfdW5sZXNzIChzcmNwYWQgIT0gTlVMTCk7CisgIHNpbmtwYWQgPSBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlIChzaW5rdGVtcGwsICJzaW5rIik7CisgIGZhaWxfdW5sZXNzIChzaW5rcGFkICE9IE5VTEwpOworCisgIC8qIHNldCB1cCBsaW5rL3VubGluayBmdW5jdGlvbnMgZm9yIHRoZSBwYWQgKi8KKyAgbGlua2VkX2NvdW50MSA9IHVubGlua2VkX2NvdW50MSA9IDA7CisgIGdzdF9wYWRfc2V0X2xpbmtfZnVuY3Rpb24gKHNpbmtwYWQsIHBhZF9saW5rZWQxKTsKKyAgZ3N0X3BhZF9zZXRfdW5saW5rX2Z1bmN0aW9uIChzaW5rcGFkLCBwYWRfdW5saW5rZWQxKTsKKyAgbGlua2VkX2NvdW50MiA9IHVubGlua2VkX2NvdW50MiA9IDA7CisgIGdzdF9wYWRfc2V0X2xpbmtfZnVuY3Rpb24gKHNyY3BhZCwgcGFkX2xpbmtlZDIpOworICBnc3RfcGFkX3NldF91bmxpbmtfZnVuY3Rpb24gKHNyY3BhZCwgcGFkX3VubGlua2VkMik7CisKKyAgLyogdGhpcyBzaG91bGQgdHJpZ2dlciBhIGxpbmsgZnJvbSB0aGUgaW50ZXJuYWwgcGFkIHRvIHRoZSBzaW5rcGFkICovCisgIGdob3N0cGFkID0gZ3N0X2dob3N0X3BhZF9uZXcgKCJnaG9zdHBhZCIsIHNpbmtwYWQpOworICBmYWlsX3VubGVzcyAoZ2hvc3RwYWQgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChsaW5rZWRfY291bnQxID09IDEpOworICBmYWlsX3VubGVzcyAodW5saW5rZWRfY291bnQxID09IDApOworICBmYWlsX3VubGVzcyAobGlua2VkX2NvdW50MiA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHVubGlua2VkX2NvdW50MiA9PSAwKTsKKworICAvKiB0aGlzIHNob3VsZCBub3QgdHJpZ2dlciBhbnl0aGluZyBiZWNhdXNlIHdlIGFyZSBub3QgZGlyZWN0bHkKKyAgICogbGlua2luZy91bmxpbmtpbmcgdGhlIHNpbmsgcGFkLiAqLworICByZXQgPSBnc3RfcGFkX2xpbmsgKHNyY3BhZCwgZ2hvc3RwYWQpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9QQURfTElOS19PSyk7CisgIGZhaWxfdW5sZXNzIChsaW5rZWRfY291bnQxID09IDEpOworICBmYWlsX3VubGVzcyAodW5saW5rZWRfY291bnQxID09IDApOworICBmYWlsX3VubGVzcyAobGlua2VkX2NvdW50MiA9PSAxKTsKKyAgZmFpbF91bmxlc3MgKHVubGlua2VkX2NvdW50MiA9PSAwKTsKKworICByZXMgPSBnc3RfcGFkX3VubGluayAoc3JjcGFkLCBnaG9zdHBhZCk7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChsaW5rZWRfY291bnQxID09IDEpOworICBmYWlsX3VubGVzcyAodW5saW5rZWRfY291bnQxID09IDApOworICBmYWlsX3VubGVzcyAobGlua2VkX2NvdW50MiA9PSAxKTsKKyAgZmFpbF91bmxlc3MgKHVubGlua2VkX2NvdW50MiA9PSAxKTsKKworICAvKiB0aGlzIHNob3VsZCB0cmlnZ2VyIHRoZSB1bmxpbmsgKi8KKyAgcmVzID0gZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0IChHU1RfR0hPU1RfUEFEX0NBU1QgKGdob3N0cGFkKSwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChsaW5rZWRfY291bnQxID09IDEpOworICBmYWlsX3VubGVzcyAodW5saW5rZWRfY291bnQxID09IDEpOworICBmYWlsX3VubGVzcyAobGlua2VkX2NvdW50MiA9PSAxKTsKKyAgZmFpbF91bmxlc3MgKHVubGlua2VkX2NvdW50MiA9PSAxKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChnaG9zdHBhZCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChzcmN0ZW1wbCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmt0ZW1wbCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfZ2hvc3RfcGFkc19zcmNfbGlua191bmxpbmspCit7CisgIEdzdENhcHMgKnBhZGNhcHM7CisgIEdzdFBhZCAqc3JjcGFkLCAqc2lua3BhZCwgKmdob3N0cGFkLCAqZHVtbXk7CisgIEdzdFBhZFRlbXBsYXRlICpzcmN0ZW1wbCwgKnNpbmt0ZW1wbDsKKyAgR3N0UGFkTGlua1JldHVybiByZXQ7CisgIGdib29sZWFuIHJlczsKKworICBwYWRjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJzb21lL2NhcHMiKTsKKyAgZmFpbF91bmxlc3MgKHBhZGNhcHMgIT0gTlVMTCk7CisgIHNyY3RlbXBsID0gZ3N0X3BhZF90ZW1wbGF0ZV9uZXcgKCJzcmN0ZW1wbCIsIEdTVF9QQURfU1JDLAorICAgICAgR1NUX1BBRF9BTFdBWVMsIHBhZGNhcHMpOworICBnc3RfY2Fwc191bnJlZiAocGFkY2Fwcyk7CisKKyAgcGFkY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgic29tZS9jYXBzIik7CisgIGZhaWxfdW5sZXNzIChwYWRjYXBzICE9IE5VTEwpOworICBzaW5rdGVtcGwgPSBnc3RfcGFkX3RlbXBsYXRlX25ldyAoInNpbmt0ZW1wbCIsIEdTVF9QQURfU0lOSywKKyAgICAgIEdTVF9QQURfQUxXQVlTLCBwYWRjYXBzKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKHBhZGNhcHMpOworCisgIHNyY3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHNyY3RlbXBsLCAic3JjIik7CisgIGZhaWxfdW5sZXNzIChzcmNwYWQgIT0gTlVMTCk7CisgIHNpbmtwYWQgPSBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlIChzaW5rdGVtcGwsICJzaW5rIik7CisgIGZhaWxfdW5sZXNzIChzaW5rcGFkICE9IE5VTEwpOworCisgIC8qIHNldCB1cCBsaW5rL3VubGluayBmdW5jdGlvbnMgZm9yIHRoZSBwYWQgKi8KKyAgbGlua2VkX2NvdW50MSA9IHVubGlua2VkX2NvdW50MSA9IDA7CisgIGdzdF9wYWRfc2V0X2xpbmtfZnVuY3Rpb24gKHNyY3BhZCwgcGFkX2xpbmtlZDEpOworICBnc3RfcGFkX3NldF91bmxpbmtfZnVuY3Rpb24gKHNyY3BhZCwgcGFkX3VubGlua2VkMSk7CisgIGxpbmtlZF9jb3VudDIgPSB1bmxpbmtlZF9jb3VudDIgPSAwOworICBnc3RfcGFkX3NldF9saW5rX2Z1bmN0aW9uIChzaW5rcGFkLCBwYWRfbGlua2VkMik7CisgIGdzdF9wYWRfc2V0X3VubGlua19mdW5jdGlvbiAoc2lua3BhZCwgcGFkX3VubGlua2VkMik7CisKKyAgLyogdGhpcyBzaG91bGQgdHJpZ2dlciBhIGxpbmsgZnJvbSB0aGUgaW50ZXJuYWwgcGFkIHRvIHRoZSBzcmNwYWQgKi8KKyAgZ2hvc3RwYWQgPSBnc3RfZ2hvc3RfcGFkX25ldyAoImdob3N0cGFkIiwgc3JjcGFkKTsKKyAgZmFpbF91bmxlc3MgKGdob3N0cGFkICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAobGlua2VkX2NvdW50MSA9PSAxKTsKKyAgZmFpbF91bmxlc3MgKHVubGlua2VkX2NvdW50MSA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKGxpbmtlZF9jb3VudDIgPT0gMCk7CisgIGZhaWxfdW5sZXNzICh1bmxpbmtlZF9jb3VudDIgPT0gMCk7CisKKyAgLyogdGhpcyBzaG91bGQgZmFpbCB3aXRoIGEgY3JpdGlhbCAqLworICBBU1NFUlRfQ1JJVElDQUwgKGR1bW15ID0gZ3N0X2dob3N0X3BhZF9uZXcgKCJnaG9zdHBhZCIsIHNyY3BhZCkpOworICBmYWlsX3VubGVzcyAoZHVtbXkgPT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChsaW5rZWRfY291bnQxID09IDEpOworICBmYWlsX3VubGVzcyAodW5saW5rZWRfY291bnQxID09IDApOworICBmYWlsX3VubGVzcyAobGlua2VkX2NvdW50MiA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHVubGlua2VkX2NvdW50MiA9PSAwKTsKKworICAvKiB0aGlzIHNob3VsZCBub3QgdHJpZ2dlciBhbnl0aGluZyBiZWNhdXNlIHdlIGFyZSBub3QgZGlyZWN0bHkKKyAgICogbGlua2luZy91bmxpbmtpbmcgdGhlIHNyYyBwYWQuICovCisgIHJldCA9IGdzdF9wYWRfbGluayAoZ2hvc3RwYWQsIHNpbmtwYWQpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9QQURfTElOS19PSyk7CisgIGZhaWxfdW5sZXNzIChsaW5rZWRfY291bnQxID09IDEpOworICBmYWlsX3VubGVzcyAodW5saW5rZWRfY291bnQxID09IDApOworICBmYWlsX3VubGVzcyAobGlua2VkX2NvdW50MiA9PSAxKTsKKyAgZmFpbF91bmxlc3MgKHVubGlua2VkX2NvdW50MiA9PSAwKTsKKworICAvKiB0aGlzIGxpbmsgc2hvdWxkIGZhaWwgYmVjYXVzZSB3ZSBhcmUgYWxyZWFkeSBsaW5rZWQuIExldCdzIG1ha2Ugc3VyZSB0aGUKKyAgICogbGluayBmdW5jdGlvbnMgYXJlIG5vdCBjYWxsZWQgKi8KKyAgcmV0ID0gZ3N0X3BhZF9saW5rIChnaG9zdHBhZCwgc2lua3BhZCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1BBRF9MSU5LX1dBU19MSU5LRUQpOworICBmYWlsX3VubGVzcyAobGlua2VkX2NvdW50MSA9PSAxKTsKKyAgZmFpbF91bmxlc3MgKHVubGlua2VkX2NvdW50MSA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKGxpbmtlZF9jb3VudDIgPT0gMSk7CisgIGZhaWxfdW5sZXNzICh1bmxpbmtlZF9jb3VudDIgPT0gMCk7CisKKyAgcmVzID0gZ3N0X3BhZF91bmxpbmsgKGdob3N0cGFkLCBzaW5rcGFkKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGxpbmtlZF9jb3VudDEgPT0gMSk7CisgIGZhaWxfdW5sZXNzICh1bmxpbmtlZF9jb3VudDEgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChsaW5rZWRfY291bnQyID09IDEpOworICBmYWlsX3VubGVzcyAodW5saW5rZWRfY291bnQyID09IDEpOworCisgIHJlcyA9IGdzdF9wYWRfdW5saW5rIChnaG9zdHBhZCwgc2lua3BhZCk7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gRkFMU0UpOworICBmYWlsX3VubGVzcyAobGlua2VkX2NvdW50MSA9PSAxKTsKKyAgZmFpbF91bmxlc3MgKHVubGlua2VkX2NvdW50MSA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKGxpbmtlZF9jb3VudDIgPT0gMSk7CisgIGZhaWxfdW5sZXNzICh1bmxpbmtlZF9jb3VudDIgPT0gMSk7CisKKyAgLyogdGhpcyBzaG91bGQgdHJpZ2dlciB0aGUgdW5saW5rIGZ1bmN0aW9uICovCisgIHJlcyA9IGdzdF9naG9zdF9wYWRfc2V0X3RhcmdldCAoR1NUX0dIT1NUX1BBRF9DQVNUIChnaG9zdHBhZCksIE5VTEwpOworICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUpOworICBmYWlsX3VubGVzcyAobGlua2VkX2NvdW50MSA9PSAxKTsKKyAgZmFpbF91bmxlc3MgKHVubGlua2VkX2NvdW50MSA9PSAxKTsKKyAgZmFpbF91bmxlc3MgKGxpbmtlZF9jb3VudDIgPT0gMSk7CisgIGZhaWxfdW5sZXNzICh1bmxpbmtlZF9jb3VudDIgPT0gMSk7CisKKyAgLyogYW5kIHRoaXMgdGhlIGxpbmsgZnVuY3Rpb24gYWdhaW4gKi8KKyAgcmVzID0gZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0IChHU1RfR0hPU1RfUEFEX0NBU1QgKGdob3N0cGFkKSwgc3JjcGFkKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGxpbmtlZF9jb3VudDEgPT0gMik7CisgIGZhaWxfdW5sZXNzICh1bmxpbmtlZF9jb3VudDEgPT0gMSk7CisgIGZhaWxfdW5sZXNzIChsaW5rZWRfY291bnQyID09IDEpOworICBmYWlsX3VubGVzcyAodW5saW5rZWRfY291bnQyID09IDEpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKGdob3N0cGFkKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNyY3RlbXBsKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc2lua3RlbXBsKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9naG9zdF9wYWRzX2NoYW5nZV93aGVuX2xpbmtlZCkKK3sKKyAgR3N0RWxlbWVudCAqYjEsICpiMiwgKnNyYywgKmZtdCwgKnNpbmsxLCAqc2luazI7CisgIEdzdFBhZCAqc2lua3BhZCwgKmdob3N0cGFkOworICBHc3RDYXBzICpjYXBzOworCisgIGIxID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicGlwZWxpbmUiLCBOVUxMKTsKKyAgYjIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJiaW4iLCBOVUxMKTsKKyAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOworICBmbXQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJjYXBzZmlsdGVyIiwgTlVMTCk7CisgIHNpbmsxID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKKyAgc2luazIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOworCisgIGdzdF9iaW5fYWRkIChHU1RfQklOIChiMiksIHNpbmsxKTsKKyAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGIyKSwgc2luazIpOworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAoYjEpLCBzcmMpOworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAoYjEpLCBmbXQpOworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAoYjEpLCBiMik7CisKKyAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXctaW50LCB3aWR0aD0xNiwgY2hhbm5lbHM9MSIpOworICBnX29iamVjdF9zZXQgKGZtdCwgImNhcHMiLCBjYXBzLCBOVUxMKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOworCisgIC8qIGNyZWF0ZSB0aGUgZ2hvc3RwYWQgYXMgYSBzaW5rLXBhZCBmb3IgYmluIDIgKi8KKyAgZ2hvc3RwYWQgPSBnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXQgKCJzaW5rIiwgR1NUX1BBRF9TSU5LKTsKKyAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoYjIsIGdob3N0cGFkKTsKKworICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNpbmsxLCAic2luayIpOworICBmYWlsX3VubGVzcyAoZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0ICgoR3N0R2hvc3RQYWQgKikgZ2hvc3RwYWQsIHNpbmtwYWQpKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmtfbWFueSAoc3JjLCBmbXQsIGIyLCBOVUxMKSk7CisKKyAgLyogc2V0IGRpZmZlcmVudCB0YXJnZXQgYWZ0ZXIgZ2hvc3RwYWQgaXMgbGlua2VkICovCisgIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc2luazIsICJzaW5rIik7CisgIGZhaWxfdW5sZXNzIChnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQgKChHc3RHaG9zdFBhZCAqKSBnaG9zdHBhZCwgc2lua3BhZCkpOworICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKKworICAvKiBjbGVhbiB1cCAqLworICBnc3Rfb2JqZWN0X3VucmVmIChiMSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworCitzdGF0aWMgU3VpdGUgKgorZ3N0X2dob3N0X3BhZF9zdWl0ZSAodm9pZCkKK3sKKyAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RHaG9zdFBhZCIpOworCisgIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdob3N0IHBhZCB0ZXN0cyIpOworCisgIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcmVtb3ZlMSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9yZW1vdmUyKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JlbW92ZV90YXJnZXQpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbGluayk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9naG9zdF9wYWRzKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2dob3N0X3BhZHNfYmluKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2dob3N0X3BhZHNfbm90YXJnZXQpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2hvc3RfcGFkc19ibG9jayk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9naG9zdF9wYWRzX3Byb2Jlcyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9naG9zdF9wYWRzX25ld19mcm9tX3RlbXBsYXRlKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2dob3N0X3BhZHNfbmV3X25vX3RhcmdldF9mcm9tX3RlbXBsYXRlKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2dob3N0X3BhZHNfZm9yd2FyZF9zZXRjYXBzKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2dob3N0X3BhZHNfc2lua19saW5rX3VubGluayk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9naG9zdF9wYWRzX3NyY19saW5rX3VubGluayk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9naG9zdF9wYWRzX2NoYW5nZV93aGVuX2xpbmtlZCk7CisKKyAgcmV0dXJuIHM7Cit9CisKK0dTVF9DSEVDS19NQUlOIChnc3RfZ2hvc3RfcGFkKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RpbmRleC5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdGluZGV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUzM2RkMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RpbmRleC5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qIEdTdHJlYW1lciBHc3RJbmRleCB1bml0IHRlc3QKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfaW5kZXhfZW50cmllcykKK3sKKyAgR3N0SW5kZXhFbnRyeSAqZW50cnk7CisgIEdzdEVsZW1lbnQgKnBpcGU7CisgIEdzdEluZGV4ICppbmRleDsKKyAgZ2ludCBpZCA9IC0xOworCisgIHBpcGUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKKworICBpbmRleCA9IGdzdF9pbmRleF9uZXcgKCk7CisgIGZhaWxfdW5sZXNzIChnc3RfaW5kZXhfZ2V0X3dyaXRlcl9pZCAoaW5kZXgsIEdTVF9PQkpFQ1QgKHBpcGUpLCAmaWQpKTsKKworICBlbnRyeSA9IGdzdF9pbmRleF9hZGRfZm9ybWF0IChpbmRleCwgaWQsIEdTVF9GT1JNQVRfQllURVMpOworICBnc3RfaW5kZXhfZW50cnlfZnJlZSAoZW50cnkpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKGluZGV4KTsKKyAgZ3N0X29iamVjdF91bnJlZiAocGlwZSk7CisKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgU3VpdGUgKgorZ3N0X2luZGV4X3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdEluZGV4Iik7CisgIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKKworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2luZGV4X2VudHJpZXMpOworCisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoZ3N0X2luZGV4KTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RpbmZvLmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0aW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NzU3ZDgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9nc3QvZ3N0aW5mby5jCkBAIC0wLDAgKzEsMjY2IEBACisvKiBHU3RyZWFtZXIKKyAqCisgKiBVbml0IHRlc3RzIGZvciBHc3RJbmZvCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgorCisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworCitzdGF0aWMgdm9pZAorcHJpbnRmX2V4dGVuc2lvbl9sb2dfZnVuYyAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdGVnb3J5LAorICAgIEdzdERlYnVnTGV2ZWwgbGV2ZWwsIGNvbnN0IGdjaGFyICogZmlsZSwgY29uc3QgZ2NoYXIgKiBmdW5jdGlvbiwKKyAgICBnaW50IGxpbmUsIEdPYmplY3QgKiBvYmplY3QsIEdzdERlYnVnTWVzc2FnZSAqIG1lc3NhZ2UsIGdwb2ludGVyIHVudXNlZCkKK3sKKyAgY29uc3QgZ2NoYXIgKmRiZ19tc2c7CisKKyAgZGJnX21zZyA9IGdzdF9kZWJ1Z19tZXNzYWdlX2dldCAobWVzc2FnZSk7CisgIGZhaWxfdW5sZXNzIChkYmdfbXNnICE9IE5VTEwpOworCisgIC8qIGdfcHJpbnQgKCIlc1xuIiwgZGJnX21zZyk7ICovCisKKyAgLyogcXVpY2sgaGFjayB0byBzdGlsbCBnZXQgc3R1ZmYgdG8gc2hvdyBpZiBHU1RfREVCVUcgaXMgc2V0ICovCisgIGlmIChnX2dldGVudiAoIkdTVF9ERUJVRyIpKSB7CisgICAgZ3N0X2RlYnVnX2xvZ19kZWZhdWx0IChjYXRlZ29yeSwgbGV2ZWwsIGZpbGUsIGZ1bmN0aW9uLCBsaW5lLCBvYmplY3QsCisgICAgICAgIG1lc3NhZ2UsIHVudXNlZCk7CisgIH0KK30KKworLyogY2hlY2sgb3VyIEdTVF9QVFJfRk9STUFUIHByaW50ZiBleHRlbnNpb24gc3R1ZmYgKi8KK0dTVF9TVEFSVF9URVNUIChpbmZvX3B0cl9mb3JtYXRfcHJpbnRmX2V4dGVuc2lvbikKK3sKKyAgLyogc2V0IHVwIG91ciBvd24gbG9nIGZ1bmN0aW9uIHRvIG1ha2Ugc3VyZSB0aGUgY29kZSBpbiBnc3RpbmZvIGlzIGFjdHVhbGx5CisgICAqIGV4ZWN1dGVkIHdpdGhvdXQgR1NUX0RFQlVHIGJlaW5nIHNldCBvciBpdCBiZWluZyBvdXRwdXQgdG8gc3Rkb3V0ICovCisgIGdzdF9kZWJ1Z19yZW1vdmVfbG9nX2Z1bmN0aW9uIChnc3RfZGVidWdfbG9nX2RlZmF1bHQpOworICBnc3RfZGVidWdfYWRkX2xvZ19mdW5jdGlvbiAocHJpbnRmX2V4dGVuc2lvbl9sb2dfZnVuYywgTlVMTCk7CisKKyAgZ3N0X2RlYnVnX3NldF9kZWZhdWx0X3RocmVzaG9sZCAoR1NUX0xFVkVMX0xPRyk7CisKKyAgLyogTlVMTCBvYmplY3QgKi8KKyAgR1NUX0xPRyAoIk5VTEw6ICUiIEdTVF9QVFJfRk9STUFULCAoZ3BvaW50ZXIpIE5VTEwpOworCisgIC8qIHN0cnVjdHVyZSAqLworICB7CisgICAgR3N0U3RydWN0dXJlICpzOworCisgICAgcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgiZm9vL2JhciIsICJudW1iZXIiLCBHX1RZUEVfSU5ULCAxLAorICAgICAgICAic3RyaW5nIiwgR19UWVBFX1NUUklORywgInMiLCAiZmxvYXQtbnVtYmVyIiwgR19UWVBFX0RPVUJMRSwKKyAgICAgICAgKGdkb3VibGUpIDQyNDI0Mi40MiwgTlVMTCk7CisKKyAgICBHU1RfTE9HICgiU1RSVUNUVVJFOiAlIiBHU1RfUFRSX0ZPUk1BVCwgcyk7CisgICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzKTsKKyAgfQorCisgIC8qIG1lc3NhZ2UgKi8KKyAgeworICAgIEdzdE1lc3NhZ2UgKm1zZzsKKworICAgIG1zZyA9IGdzdF9tZXNzYWdlX25ld19lbGVtZW50IChOVUxMLAorICAgICAgICBnc3Rfc3RydWN0dXJlX25ldyAoInJlZGlyZWN0IiwgIm5ldy1sb2NhdGlvbiIsIEdfVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAiaHR0cDovL2Zvb2Jhci5jb20vcjB4MHIub2dnIiwgIm1pbmltdW0tYml0cmF0ZSIsIEdfVFlQRV9JTlQsCisgICAgICAgICAgICA1NjAwMCwgTlVMTCkpOworCisgICAgR1NUX0xPRyAoIk1FU1NBR0U6ICUiIEdTVF9QVFJfRk9STUFULCBtc2cpOworICAgIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOworICB9CisKKyNpZiAwCisgIC8qIFRPRE86IEdPYmplY3QgKi8KKyAgeworICAgIEdTVF9MT0cgKCJHT0JKRUNUOiAlIiBHU1RfUFRSX0ZPUk1BVCwgb2JqKTsKKyAgfQorCisgIC8qIFRPRE86IEdzdE9iamVjdCAqLworICB7CisgICAgR1NUX0xPRyAoIkdTVE9CSkVDVDogJSIgR1NUX1BUUl9GT1JNQVQsIG9iaik7CisgIH0KKworICAvKiBUT0RPOiBHc3RQYWQgKi8KKyAgeworICAgIEdTVF9MT0cgKCJQQUQ6ICUiIEdTVF9QVFJfRk9STUFULCBwYWQpOworICB9CisKKyAgLyogVE9ETzogR3N0Q2FwcyAqLworICB7CisgICAgR1NUX0xPRyAoIlBBRDogJSIgR1NUX1BUUl9GT1JNQVQsIHBhZCk7CisgIH0KKyNlbmRpZgorCisgIC8qIGNsZWFuIHVwICovCisgIGdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGQgKEdTVF9MRVZFTF9OT05FKTsKKyAgZ3N0X2RlYnVnX2FkZF9sb2dfZnVuY3Rpb24gKGdzdF9kZWJ1Z19sb2dfZGVmYXVsdCwgTlVMTCk7CisgIGdzdF9kZWJ1Z19yZW1vdmVfbG9nX2Z1bmN0aW9uIChwcmludGZfZXh0ZW5zaW9uX2xvZ19mdW5jKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiBjaGVjayBvdXIgR1NUX1NFR01FTlRfRk9STUFUIHByaW50ZiBleHRlbnNpb24gc3R1ZmYgKi8KK0dTVF9TVEFSVF9URVNUIChpbmZvX3NlZ21lbnRfZm9ybWF0X3ByaW50Zl9leHRlbnNpb24pCit7CisgIC8qIHNldCB1cCBvdXIgb3duIGxvZyBmdW5jdGlvbiB0byBtYWtlIHN1cmUgdGhlIGNvZGUgaW4gZ3N0aW5mbyBpcyBhY3R1YWxseQorICAgKiBleGVjdXRlZCB3aXRob3V0IEdTVF9ERUJVRyBiZWluZyBzZXQgb3IgaXQgYmVpbmcgb3V0cHV0IHRvIHN0ZG91dCAqLworICBnc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbiAoZ3N0X2RlYnVnX2xvZ19kZWZhdWx0KTsKKyAgZ3N0X2RlYnVnX2FkZF9sb2dfZnVuY3Rpb24gKHByaW50Zl9leHRlbnNpb25fbG9nX2Z1bmMsIE5VTEwpOworCisgIGdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGQgKEdTVF9MRVZFTF9MT0cpOworCisgIC8qIFRJTUUgc2VnbWVudCAqLworICB7CisgICAgR3N0U2VnbWVudCBzZWdtZW50OworCisgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7CisKKyAgICBzZWdtZW50LnJhdGUgPSAxLjA7CisgICAgc2VnbWVudC5hcHBsaWVkX3JhdGUgPSAyLjA7CisgICAgc2VnbWVudC5zdGFydCA9IDA7CisgICAgc2VnbWVudC5zdG9wID0gNSAqIDYwICogR1NUX1NFQ09ORDsKKyAgICBzZWdtZW50LnRpbWUgPSAwOworCisgICAgc2VnbWVudC5wb3NpdGlvbiA9IDIgKiBHU1RfU0VDT05EOworICAgIHNlZ21lbnQuZHVyYXRpb24gPSA5MCAqIDYwICogR1NUX1NFQ09ORDsKKworICAgIEdTVF9MT0cgKCJUSU1FOiAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsICZzZWdtZW50KTsKKyAgfQorCisgIC8qIEJZVEUgc2VnbWVudCAqLworICB7CisgICAgR3N0U2VnbWVudCBzZWdtZW50OworCisgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMpOworCisgICAgc2VnbWVudC5yYXRlID0gMS4wOworICAgIHNlZ21lbnQuYXBwbGllZF9yYXRlID0gMS4wOworICAgIHNlZ21lbnQuc3RhcnQgPSAwOworICAgIHNlZ21lbnQuc3RvcCA9IDk5OTk5OTk7CisgICAgc2VnbWVudC50aW1lID0gMDsKKworICAgIEdTVF9MT0cgKCJCWVRFOiAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsICZzZWdtZW50KTsKKyAgfQorCisgIC8qIFVOS05PV04gZm9ybWF0IHNlZ21lbnQgKGZvcm1hdCBudW1iZXJzIGFyZSBjb25zZWN1dGl2ZSBmcm9tIDApICovCisgIHsKKyAgICBHc3RTZWdtZW50IHNlZ21lbnQ7CisKKyAgICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgOTg3NjU0MzIpOworCisgICAgc2VnbWVudC5yYXRlID0gMS4wOworICAgIHNlZ21lbnQuYXBwbGllZF9yYXRlID0gMS4wOworICAgIHNlZ21lbnQuc3RhcnQgPSAwOworICAgIHNlZ21lbnQuc3RvcCA9IDk4NzY1NDMyMTsKKyAgICBzZWdtZW50LnRpbWUgPSAwOworCisgICAgR1NUX0xPRyAoIlVOS05PV046ICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwgJnNlZ21lbnQpOworICB9CisKKyAgLyogVU5ERUZJTkVEIGZvcm1hdCBzZWdtZW50ICovCisgIHsKKyAgICBHc3RTZWdtZW50IHNlZ21lbnQ7CisKKyAgICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9VTkRFRklORUQpOworCisgICAgR1NUX0xPRyAoIlVOREVGSU5FRDogJSIgR1NUX1NFR01FTlRfRk9STUFULCAmc2VnbWVudCk7CisgIH0KKworICAvKiBOVUxMIHNlZ21lbnQgKi8KKyAgR1NUX0xPRyAoIk5VTEw6ICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwgKEdzdFNlZ21lbnQgKikgTlVMTCk7CisKKyAgLyogY2xlYW4gdXAgKi8KKyAgZ3N0X2RlYnVnX3NldF9kZWZhdWx0X3RocmVzaG9sZCAoR1NUX0xFVkVMX05PTkUpOworICBnc3RfZGVidWdfYWRkX2xvZ19mdW5jdGlvbiAoZ3N0X2RlYnVnX2xvZ19kZWZhdWx0LCBOVUxMKTsKKyAgZ3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb24gKHByaW50Zl9leHRlbnNpb25fbG9nX2Z1bmMpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUIChpbmZvX2xvZ19oYW5kbGVyKQoreworICBndWludCByZW1vdmVkOworCisgIHJlbW92ZWQgPSBnc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbiAoZ3N0X2RlYnVnX2xvZ19kZWZhdWx0KTsKKyAgZmFpbF91bmxlc3MgKHJlbW92ZWQgPT0gMSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKGluZm9fZHVtcF9tZW0pCit7CisgIEdzdERlYnVnQ2F0ZWdvcnkgKmNhdCA9IE5VTEw7CisgIEdzdEVsZW1lbnQgKmU7CisKKyAgY29uc3QgZ3VpbnQ4IGRhdGFbXSA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg2NiwgMHg3NCwgMHg3OSwgMHg3MCwKKyAgICAweDcxLCAweDc0LCAweDIwLCAweDIwLCAweDIwLCAweDA1LCAweDAzLCAweDAwLCAweDcxLCAweDc0LCAweDIwLCAweDIwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHhlZiwgMHhlMSwgMHg2ZCwgMHg2ZiwgMHg2ZiwgMHg3NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YywKKyAgICAweDZkLCAweDc2LCAweDY4LCAweDY0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJmLCAweGQxLCAweDAwLCAweDFkLAorICAgIDB4YmYsIDB4ZDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4MGIsIDB4YjUsIDB4MDAsIDB4MDQsIDB4NTksIDB4YzUsCisgICAgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAnJScsICdzJywgJyUnLCAncycKKyAgfTsKKworICBlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKKyAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGNhdCwgImR1bXBjYXQiLCAwLCAiZGF0YSBkdW1wIGRlYnVnIGNhdGVnb3J5Iik7CisgIEdTVF9NRU1EVU1QICgicXVpY2t0aW1lIGhlYWRlciIsIGRhdGEsIHNpemVvZiAoZGF0YSkpOworICBHU1RfTUVNRFVNUCAoTlVMTCwgZGF0YSwgc2l6ZW9mIChkYXRhKSk7CisgIEdTVF9DQVRfTUVNRFVNUCAoY2F0LCAicXVpY2t0aW1lIGhlYWRlciIsIGRhdGEsIHNpemVvZiAoZGF0YSkpOworICBHU1RfTUVNRFVNUF9PQkpFQ1QgKGUsICJvYmplY3Qgc3R1ZmYiLCBkYXRhLCBzaXplb2YgKGRhdGEpKTsKKyAgR1NUX0NBVF9NRU1EVU1QX09CSkVDVCAoY2F0LCBlLCAib2JqZWN0L2NhdCBzdHVmZiIsIGRhdGEsIHNpemVvZiAoZGF0YSkpOworICBnc3Rfb2JqZWN0X3VucmVmIChlKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAoaW5mb19maXhtZSkKK3sKKyAgR3N0RGVidWdDYXRlZ29yeSAqY2F0ID0gTlVMTDsKKyAgR3N0RWxlbWVudCAqZTsKKworICBlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKKyAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGNhdCwgImZpeGNhdCIsIDAsICJGSVhNRSBkZWJ1ZyBjYXRlZ29yeSIpOworICBHU1RfRklYTUUgKCJmaXggJXMgdGhpbmciLCAidGhpcyIpOworICBHU1RfRklYTUVfT0JKRUNUIChlLCAiZml4ICVzIG9iamVjdCIsICJ0aGlzIik7CisgIEdTVF9DQVRfRklYTUUgKGNhdCwgImZpeCBzb21lJXMgaW4gdGhpcyBjYXRlZ29yeSIsICJ0aGluZyIpOworICBHU1RfQ0FUX0ZJWE1FX09CSkVDVCAoY2F0LCBlLCAiZml4IHNvbWUlcyBpbiB0aGlzIGNhdCBhbmQgb2JqZWN0IiwgInRoaW5nIik7CisgIGdzdF9vYmplY3RfdW5yZWYgKGUpOworfQorCitHU1RfRU5EX1RFU1Q7CisjZW5kaWYKKworc3RhdGljIFN1aXRlICoKK2dzdF9pbmZvX3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdEluZm8iKTsKKyAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiaW5mbyIpOworCisgIHRjYXNlX3NldF90aW1lb3V0ICh0Y19jaGFpbiwgMzApOworCisgIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBpbmZvX3NlZ21lbnRfZm9ybWF0X3ByaW50Zl9leHRlbnNpb24pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIGluZm9fcHRyX2Zvcm1hdF9wcmludGZfZXh0ZW5zaW9uKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBpbmZvX2xvZ19oYW5kbGVyKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBpbmZvX2R1bXBfbWVtKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBpbmZvX2ZpeG1lKTsKKyNlbmRpZgorCisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoZ3N0X2luZm8pOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdGl0ZXJhdG9yLmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0aXRlcmF0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmQ5Mzg5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hlY2svZ3N0L2dzdGl0ZXJhdG9yLmMKQEAgLTAsMCArMSwyMjkgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKyAqCisgKiBnc3RpdGVyYXRvci5jOiBVbml0IHRlc3QgZm9yIGl0ZXJhdG9ycworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgorCisKK3N0YXRpYyBHTGlzdCAqCittYWtlX2xpc3Rfb2ZfaW50cyAoZ2ludCBuKQoreworICBHTGlzdCAqcmV0ID0gTlVMTDsKKyAgZ2ludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisgICAgcmV0ID0gZ19saXN0X3ByZXBlbmQgKHJldCwgR0lOVF9UT19QT0lOVEVSIChpKSk7CisKKyAgcmV0dXJuIGdfbGlzdF9yZXZlcnNlIChyZXQpOworfQorCisjZGVmaW5lIE5VTV9FTEVNRU5UUyAxMAorCitHU1RfU1RBUlRfVEVTVCAodGVzdF9tYW51YWxfaXRlcmF0aW9uKQoreworICBHTGlzdCAqbDsKKyAgZ3VpbnQzMiBjb29raWUgPSAwOworICBHTXV0ZXggKm07CisgIEdzdEl0ZXJhdG9yICppdGVyOworICBHc3RJdGVyYXRvclJlc3VsdCByZXM7CisgIEdWYWx1ZSBpdGVtID0geyAwLCB9OworICBnaW50IGkgPSAwOworCisgIGwgPSBtYWtlX2xpc3Rfb2ZfaW50cyAoTlVNX0VMRU1FTlRTKTsKKyAgbSA9IGdfbXV0ZXhfbmV3ICgpOworCisgIGl0ZXIgPSBnc3RfaXRlcmF0b3JfbmV3X2xpc3QgKEdfVFlQRV9QT0lOVEVSLCBtLCAmY29va2llLCAmbCwgTlVMTCwgTlVMTCk7CisKKyAgZmFpbF91bmxlc3MgKGl0ZXIgIT0gTlVMTCk7CisKKyAgd2hpbGUgKDEpIHsKKyAgICByZXMgPSBnc3RfaXRlcmF0b3JfbmV4dCAoaXRlciwgJml0ZW0pOworICAgIGlmIChpIDwgTlVNX0VMRU1FTlRTKSB7CisgICAgICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9JVEVSQVRPUl9PSyk7CisgICAgICBmYWlsX3VubGVzcyAoR1BPSU5URVJfVE9fSU5UIChnX3ZhbHVlX2dldF9wb2ludGVyICgmaXRlbSkpID09IGkpOworICAgICAgZ192YWx1ZV9yZXNldCAoJml0ZW0pOworICAgICAgaSsrOworICAgICAgY29udGludWU7CisgICAgfSBlbHNlIHsKKyAgICAgIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0lURVJBVE9SX0RPTkUpOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIC8qIGNsZWFuIHVwICovCisgIGdfdmFsdWVfdW5zZXQgKCZpdGVtKTsKKyAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0ZXIpOworICBnX211dGV4X2ZyZWUgKG0pOworICBnX2xpc3RfZnJlZSAobCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfcmVzeW5jKQoreworICBHTGlzdCAqbDsKKyAgZ3VpbnQzMiBjb29raWUgPSAwOworICBHTXV0ZXggKm07CisgIEdzdEl0ZXJhdG9yICppdGVyOworICBHc3RJdGVyYXRvclJlc3VsdCByZXM7CisgIEdWYWx1ZSBpdGVtID0geyAwLCB9OworICBnaW50IGkgPSAwOworICBnYm9vbGVhbiBoYWNrZWRfbGlzdCA9IEZBTFNFOworCisgIGwgPSBtYWtlX2xpc3Rfb2ZfaW50cyAoTlVNX0VMRU1FTlRTKTsKKyAgbSA9IGdfbXV0ZXhfbmV3ICgpOworCisgIGl0ZXIgPSBnc3RfaXRlcmF0b3JfbmV3X2xpc3QgKEdfVFlQRV9QT0lOVEVSLCBtLCAmY29va2llLCAmbCwgTlVMTCwgTlVMTCk7CisKKyAgZmFpbF91bmxlc3MgKGl0ZXIgIT0gTlVMTCk7CisKKyAgd2hpbGUgKDEpIHsKKyAgICByZXMgPSBnc3RfaXRlcmF0b3JfbmV4dCAoaXRlciwgJml0ZW0pOworICAgIGlmIChpIDwgTlVNX0VMRU1FTlRTIC8gMikgeworICAgICAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfSVRFUkFUT1JfT0spOworICAgICAgZmFpbF91bmxlc3MgKEdQT0lOVEVSX1RPX0lOVCAoZ192YWx1ZV9nZXRfcG9pbnRlciAoJml0ZW0pKSA9PSBpKTsKKyAgICAgIGdfdmFsdWVfcmVzZXQgKCZpdGVtKTsKKyAgICAgIGkrKzsKKyAgICAgIGNvbnRpbnVlOworICAgIH0gZWxzZSBpZiAoIWhhY2tlZF9saXN0KSB7CisgICAgICAvKiBoZXJlJ3Mgd2hlcmUgd2UgdGVzdCByZXN5bmMgKi8KKyAgICAgIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0lURVJBVE9SX09LKTsKKyAgICAgIGdfdmFsdWVfcmVzZXQgKCZpdGVtKTsKKyAgICAgIGwgPSBnX2xpc3RfcHJlcGVuZCAobCwgR0lOVF9UT19QT0lOVEVSICgtMSkpOworICAgICAgY29va2llKys7CisgICAgICBoYWNrZWRfbGlzdCA9IFRSVUU7CisgICAgICBjb250aW51ZTsKKyAgICB9IGVsc2UgeworICAgICAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfSVRFUkFUT1JfUkVTWU5DKTsKKyAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0ZXIpOworICAgICAgcmVzID0gZ3N0X2l0ZXJhdG9yX25leHQgKGl0ZXIsICZpdGVtKTsKKyAgICAgIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0lURVJBVE9SX09LKTsKKyAgICAgIGZhaWxfdW5sZXNzIChHUE9JTlRFUl9UT19JTlQgKGdfdmFsdWVfZ2V0X3BvaW50ZXIgKCZpdGVtKSkgPT0gLTEpOworICAgICAgZ192YWx1ZV9yZXNldCAoJml0ZW0pOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgLyogY2xlYW4gdXAgKi8KKyAgZ192YWx1ZV91bnNldCAoJml0ZW0pOworICBnc3RfaXRlcmF0b3JfZnJlZSAoaXRlcik7CisgIGdfbXV0ZXhfZnJlZSAobSk7CisgIGdfbGlzdF9mcmVlIChsKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgZ2Jvb2xlYW4KK2FkZF9mb2xkX2Z1bmMgKGNvbnN0IEdWYWx1ZSAqIGl0ZW0sIEdWYWx1ZSAqIHJldCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBnX3ZhbHVlX3NldF9pbnQgKHJldCwKKyAgICAgIGdfdmFsdWVfZ2V0X2ludCAocmV0KSArIEdQT0lOVEVSX1RPX0lOVCAoZ192YWx1ZV9nZXRfcG9pbnRlciAoaXRlbSkpKTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2ZvbGQpCit7CisgIEdMaXN0ICpsOworICBndWludDMyIGNvb2tpZSA9IDA7CisgIEdNdXRleCAqbTsKKyAgR3N0SXRlcmF0b3IgKml0ZXI7CisgIEdzdEl0ZXJhdG9yUmVzdWx0IHJlczsKKyAgZ2ludCBpLCBleHBlY3RlZDsKKyAgR1ZhbHVlIHJldCA9IHsgMCwgfTsKKworICBsID0gbWFrZV9saXN0X29mX2ludHMgKE5VTV9FTEVNRU5UUyk7CisgIG0gPSBnX211dGV4X25ldyAoKTsKKyAgaXRlciA9IGdzdF9pdGVyYXRvcl9uZXdfbGlzdCAoR19UWVBFX1BPSU5URVIsIG0sICZjb29raWUsICZsLCBOVUxMLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGl0ZXIgIT0gTlVMTCk7CisKKyAgZXhwZWN0ZWQgPSAwOworICBmb3IgKGkgPSAwOyBpIDwgTlVNX0VMRU1FTlRTOyBpKyspCisgICAgZXhwZWN0ZWQgKz0gaTsKKworICBnX3ZhbHVlX2luaXQgKCZyZXQsIEdfVFlQRV9JTlQpOworICBnX3ZhbHVlX3NldF9pbnQgKCZyZXQsIDApOworCisgIHJlcyA9IGdzdF9pdGVyYXRvcl9mb2xkIChpdGVyLCBhZGRfZm9sZF9mdW5jLCAmcmV0LCBOVUxMKTsKKworICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9JVEVSQVRPUl9ET05FKTsKKyAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X2ludCAoJnJldCkgPT0gZXhwZWN0ZWQpOworCisgIC8qIGNsZWFuIHVwICovCisgIGdzdF9pdGVyYXRvcl9mcmVlIChpdGVyKTsKKyAgZ19tdXRleF9mcmVlIChtKTsKKyAgZ19saXN0X2ZyZWUgKGwpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3NpbmdsZSkKK3sKKyAgR3N0SXRlcmF0b3IgKml0OworICBHc3RTdHJ1Y3R1cmUgKnMgPSBnc3Rfc3RydWN0dXJlX25ldyAoInRlc3QiLCBOVUxMKTsKKyAgR1ZhbHVlIHYgPSB7IDAsIH07CisgIEdzdFN0cnVjdHVyZSAqaTsKKworICBnX3ZhbHVlX2luaXQgKCZ2LCBHU1RfVFlQRV9TVFJVQ1RVUkUpOworICBnX3ZhbHVlX3NldF9ib3hlZCAoJnYsIHMpOworICBpdCA9IGdzdF9pdGVyYXRvcl9uZXdfc2luZ2xlIChHU1RfVFlQRV9TVFJVQ1RVUkUsICZ2KTsKKyAgZ192YWx1ZV9yZXNldCAoJnYpOworCisgIGZhaWxfdW5sZXNzIChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZ2KSA9PSBHU1RfSVRFUkFUT1JfT0spOworICBpID0gZ192YWx1ZV9nZXRfYm94ZWQgKCZ2KTsKKyAgZmFpbF91bmxlc3MgKHN0cmNtcCAoZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAocyksCisgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoaSkpID09IDApOworICBpID0gTlVMTDsKKyAgZ192YWx1ZV9yZXNldCAoJnYpOworCisgIGZhaWxfdW5sZXNzIChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZ2KSA9PSBHU1RfSVRFUkFUT1JfRE9ORSk7CisgIGZhaWxfdW5sZXNzIChnX3ZhbHVlX2dldF9ib3hlZCAoJnYpID09IE5VTEwpOworCisgIGdzdF9pdGVyYXRvcl9mcmVlIChpdCk7CisgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocyk7CisKKyAgaXQgPSBnc3RfaXRlcmF0b3JfbmV3X3NpbmdsZSAoR1NUX1RZUEVfU1RSVUNUVVJFLCBOVUxMKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2l0ZXJhdG9yX25leHQgKGl0LCAmdikgPT0gR1NUX0lURVJBVE9SX0RPTkUpOworICBmYWlsX3VubGVzcyAoZ192YWx1ZV9nZXRfYm94ZWQgKCZ2KSA9PSBOVUxMKTsKKworICBnX3ZhbHVlX3Jlc2V0ICgmdik7CisKKyAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgU3VpdGUgKgorZ3N0X2l0ZXJhdG9yX3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdEl0ZXJhdG9yIik7CisgIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImNvcnJlY3RuZXNzIik7CisKKyAgdGNhc2Vfc2V0X3RpbWVvdXQgKHRjX2NoYWluLCAwKTsKKworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X21hbnVhbF9pdGVyYXRpb24pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcmVzeW5jKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2ZvbGQpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc2luZ2xlKTsKKyAgcmV0dXJuIHM7Cit9CisKK0dTVF9DSEVDS19NQUlOIChnc3RfaXRlcmF0b3IpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdG1lc3NhZ2UuYyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RtZXNzYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIzMjI2YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RtZXNzYWdlLmMKQEAgLTAsMCArMSwzNjUgQEAKKy8qIEdTdHJlYW1lcgorICoKKyAqIHVuaXQgdGVzdCBmb3IgR3N0TWVzc2FnZQorICoKKyAqIENvcHlyaWdodCAoQykgPDIwMDU+IFdpbSBUYXltYW5zIDx3aW0gYXQgZmx1ZW5kbyBkb3QgY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KKworc3RhdGljIEdRdWFyayBkb21haW47CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3BhcnNpbmcpCit7CisgIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAgZG9tYWluID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJ0ZXN0Iik7CisKKyAgLyogR1NUX01FU1NBR0VfRU9TICovCisgIHsKKyAgICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2VvcyAoTlVMTCk7CisgICAgZmFpbF9pZiAobWVzc2FnZSA9PSBOVUxMKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfRU9TKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSA9PSBOVUxMKTsKKyAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7CisgIH0KKyAgLyogR1NUX01FU1NBR0VfRVJST1IgKi8KKyAgeworICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOworICAgIGdjaGFyICpkZWJ1ZzsKKworICAgIGVycm9yID0gZ19lcnJvcl9uZXcgKGRvbWFpbiwgMTAsICJ0ZXN0IGVycm9yIik7CisgICAgZmFpbF9pZiAoZXJyb3IgPT0gTlVMTCk7CisgICAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19lcnJvciAoTlVMTCwgZXJyb3IsICJlcnJvciBzdHJpbmciKTsKKyAgICBmYWlsX2lmIChtZXNzYWdlID09IE5VTEwpOworICAgIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9FUlJPUik7CisgICAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkgPT0gTlVMTCk7CisKKyAgICBnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKyAgICBlcnJvciA9IE5VTEw7CisgICAgZGVidWcgPSBOVUxMOworCisgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1lc3NhZ2UsICZlcnJvciwgJmRlYnVnKTsKKyAgICBmYWlsX2lmIChlcnJvciA9PSBOVUxMKTsKKyAgICBmYWlsX2lmIChkZWJ1ZyA9PSBOVUxMKTsKKyAgICBmYWlsX3VubGVzcyAoc3RyY21wIChlcnJvci0+bWVzc2FnZSwgInRlc3QgZXJyb3IiKSA9PSAwKTsKKyAgICBmYWlsX3VubGVzcyAoZXJyb3ItPmRvbWFpbiA9PSBkb21haW4pOworICAgIGZhaWxfdW5sZXNzIChlcnJvci0+Y29kZSA9PSAxMCk7CisgICAgZmFpbF91bmxlc3MgKHN0cmNtcCAoZGVidWcsICJlcnJvciBzdHJpbmciKSA9PSAwKTsKKworICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKKyAgICBnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKyAgICBnX2ZyZWUgKGRlYnVnKTsKKyAgfQorICAvKiBHU1RfTUVTU0FHRV9XQVJOSU5HICAgKi8KKyAgeworICAgIEdFcnJvciAqd2FybmluZyA9IE5VTEw7CisgICAgZ2NoYXIgKmRlYnVnOworCisgICAgd2FybmluZyA9IGdfZXJyb3JfbmV3IChkb21haW4sIDEwLCAidGVzdCB3YXJuaW5nIik7CisgICAgZmFpbF9pZiAod2FybmluZyA9PSBOVUxMKTsKKyAgICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X3dhcm5pbmcgKE5VTEwsIHdhcm5pbmcsICJ3YXJuaW5nIHN0cmluZyIpOworICAgIGZhaWxfaWYgKG1lc3NhZ2UgPT0gTlVMTCk7CisgICAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1dBUk5JTkcpOworICAgIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpID09IE5VTEwpOworCisgICAgZ19lcnJvcl9mcmVlICh3YXJuaW5nKTsKKyAgICB3YXJuaW5nID0gTlVMTDsKKyAgICBkZWJ1ZyA9IE5VTEw7CisKKyAgICBnc3RfbWVzc2FnZV9wYXJzZV93YXJuaW5nIChtZXNzYWdlLCAmd2FybmluZywgJmRlYnVnKTsKKyAgICBmYWlsX2lmICh3YXJuaW5nID09IE5VTEwpOworICAgIGZhaWxfaWYgKGRlYnVnID09IE5VTEwpOworICAgIGZhaWxfdW5sZXNzIChzdHJjbXAgKHdhcm5pbmctPm1lc3NhZ2UsICJ0ZXN0IHdhcm5pbmciKSA9PSAwKTsKKyAgICBmYWlsX3VubGVzcyAod2FybmluZy0+ZG9tYWluID09IGRvbWFpbik7CisgICAgZmFpbF91bmxlc3MgKHdhcm5pbmctPmNvZGUgPT0gMTApOworICAgIGZhaWxfdW5sZXNzIChzdHJjbXAgKGRlYnVnLCAid2FybmluZyBzdHJpbmciKSA9PSAwKTsKKworICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKKyAgICBnX2Vycm9yX2ZyZWUgKHdhcm5pbmcpOworICAgIGdfZnJlZSAoZGVidWcpOworICB9CisgIC8qIEdTVF9NRVNTQUdFX0lORk8gICAqLworICB7CisgIH0KKyAgLyogR1NUX01FU1NBR0VfVEFHICAqLworICB7CisgICAgR3N0VGFnTGlzdCAqdGFnOworCisgICAgLyogRklYTUUsIGRvIHNvbWUgbW9yZSB0YWcgYWRkaW5nICovCisgICAgdGFnID0gZ3N0X3RhZ19saXN0X25ldyAoKTsKKyAgICBmYWlsX2lmICh0YWcgPT0gTlVMTCk7CisgICAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld190YWcgKE5VTEwsIHRhZyk7CisgICAgZmFpbF9pZiAobWVzc2FnZSA9PSBOVUxMKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfVEFHKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSA9PSBOVUxMKTsKKyAgICB0YWcgPSBOVUxMOworICAgIGdzdF9tZXNzYWdlX3BhcnNlX3RhZyAobWVzc2FnZSwgJnRhZyk7CisgICAgZmFpbF9pZiAodGFnID09IE5VTEwpOworICAgIC8qIEZJWE1FLCBjaGVjayB0aGUgYWN0dWFsIHRhZ3MgKi8KKyAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7CisgICAgZ3N0X3RhZ19saXN0X2ZyZWUgKHRhZyk7CisgIH0KKyAgLyogR1NUX01FU1NBR0VfQlVGRkVSSU5HICAgKi8KKyAgeworICB9CisgIC8qIEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQgICAqLworICB7CisgICAgR3N0U3RhdGUgb2xkc3RhdGUsIG5ld3N0YXRlLCBwZW5kaW5nOworCisgICAgb2xkc3RhdGUgPSBHU1RfU1RBVEVfUEFVU0VEOworICAgIG5ld3N0YXRlID0gR1NUX1NUQVRFX1BMQVlJTkc7CisgICAgcGVuZGluZyA9IEdTVF9TVEFURV9WT0lEX1BFTkRJTkc7CisKKyAgICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X3N0YXRlX2NoYW5nZWQgKE5VTEwsIG9sZHN0YXRlLCBuZXdzdGF0ZSwgcGVuZGluZyk7CisgICAgZmFpbF9pZiAobWVzc2FnZSA9PSBOVUxMKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCk7CisgICAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkgPT0gTlVMTCk7CisKKyAgICAvKiBzZXQgc29tZSB3cm9uZyB2YWx1ZXMgdG8gY2hlY2sgaWYgdGhlIHBhcnNlIG1ldGhvZCBvdmVyd3JpdGVzIHRoZW0KKyAgICAgKiB3aXRoIHRoZSBnb29kIHZhbHVlcyAqLworICAgIG9sZHN0YXRlID0gR1NUX1NUQVRFX1JFQURZOworICAgIG5ld3N0YXRlID0gR1NUX1NUQVRFX1JFQURZOworICAgIHBlbmRpbmcgPSBHU1RfU1RBVEVfUkVBRFk7CisgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZCAobWVzc2FnZSwgJm9sZHN0YXRlLCAmbmV3c3RhdGUsICZwZW5kaW5nKTsKKyAgICBmYWlsX3VubGVzcyAob2xkc3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCk7CisgICAgZmFpbF91bmxlc3MgKG5ld3N0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgICBmYWlsX3VubGVzcyAocGVuZGluZyA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HKTsKKworICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKKyAgfQorICAvKiBHU1RfTUVTU0FHRV9TVEVQX0RPTkUgICAqLworICB7CisgIH0KKyAgLyogR1NUX01FU1NBR0VfTkVXX0NMT0NLICAqLworICB7CisgIH0KKyAgLyogR1NUX01FU1NBR0VfU1RSVUNUVVJFX0NIQU5HRSAgKi8KKyAgeworICB9CisgIC8qIEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFUVVMgICovCisgIHsKKyAgfQorICAvKiBHU1RfTUVTU0FHRV9BUFBMSUNBVElPTiAqLworICB7CisgICAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisgICAgY29uc3QgR3N0U3RydWN0dXJlICpzdHJ1YzsKKyAgICBnaW50IHNvbWVfaW50OworICAgIGdkb3VibGUgYV9kb3VibGU7CisKKyAgICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ldyAoInRlc3Rfc3RydWN0IiwKKyAgICAgICAgInNvbWVfaW50IiwgR19UWVBFX0lOVCwgMTAsCisgICAgICAgICJhX2RvdWJsZSIsIEdfVFlQRV9ET1VCTEUsIChnZG91YmxlKSAxLjgsIE5VTEwpOworICAgIGZhaWxfaWYgKHN0cnVjdHVyZSA9PSBOVUxMKTsKKyAgICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9uIChOVUxMLCBzdHJ1Y3R1cmUpOworICAgIGZhaWxfaWYgKG1lc3NhZ2UgPT0gTlVMTCk7CisgICAgc3RydWMgPSBnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlIChtZXNzYWdlKTsKKyAgICBmYWlsX2lmIChzdHJ1YyA9PSBOVUxMKTsKKyAgICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1YywgInNvbWVfaW50IiwgJnNvbWVfaW50KSk7CisgICAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZSAoc3RydWMsICJhX2RvdWJsZSIsICZhX2RvdWJsZSkpOworICAgIGZhaWxfdW5sZXNzIChzb21lX2ludCA9PSAxMCk7CisgICAgZmFpbF91bmxlc3MgKGFfZG91YmxlID09IDEuOCk7CisKKyAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7CisgIH0KKworICAvKgorICAgICB2b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfdGFnICAgICAgICAgICAoR3N0TWVzc2FnZSAqbWVzc2FnZSwgR3N0VGFnTGlzdCAqKnRhZ19saXN0KTsKKyAgICAgdm9pZCAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQgKEdzdE1lc3NhZ2UgKm1lc3NhZ2UsIEdzdFN0YXRlICpvbGRfc3RhdGUsCisgICAgIEdzdFN0YXRlICpuZXdfc3RhdGUpOworICAgICB2b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgICAgICAgICAoR3N0TWVzc2FnZSAqbWVzc2FnZSwgR0Vycm9yICoqZ2Vycm9yLCBnY2hhciAqKmRlYnVnKTsKKyAgICAgdm9pZCAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmcgICAgICAgKEdzdE1lc3NhZ2UgKm1lc3NhZ2UsIEdFcnJvciAqKmdlcnJvciwgZ2NoYXIgKipkZWJ1Zyk7CisgICAqLworCisgIC8qIEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFUVVMgICAqLworICB7CisgICAgR3N0U3RyZWFtU3RhdHVzVHlwZSB0eXBlOworICAgIEdzdFRhc2sgKnRhc2ssICp0YXNrMjsKKyAgICBHVmFsdWUgdmFsdWUgPSB7IDAgfTsKKyAgICBjb25zdCBHVmFsdWUgKnZhbDsKKworICAgIG1lc3NhZ2UgPQorICAgICAgICBnc3RfbWVzc2FnZV9uZXdfc3RyZWFtX3N0YXR1cyAoTlVMTCwgR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9FTlRFUiwKKyAgICAgICAgTlVMTCk7CisgICAgZmFpbF9pZiAobWVzc2FnZSA9PSBOVUxMKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfU1RSRUFNX1NUQVRVUyk7CisgICAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkgPT0gTlVMTCk7CisKKyAgICAvKiBzZXQgc29tZSB3cm9uZyB2YWx1ZXMgdG8gY2hlY2sgaWYgdGhlIHBhcnNlIG1ldGhvZCBvdmVyd3JpdGVzIHRoZW0KKyAgICAgKiB3aXRoIHRoZSBnb29kIHZhbHVlcyAqLworICAgIHR5cGUgPSBHU1RfU1RSRUFNX1NUQVRVU19UWVBFX1NUQVJUOworICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9zdGF0dXMgKG1lc3NhZ2UsICZ0eXBlLCBOVUxMKTsKKyAgICBmYWlsX3VubGVzcyAodHlwZSA9PSBHU1RfU1RSRUFNX1NUQVRVU19UWVBFX0VOVEVSKTsKKworICAgIC8qIGNyZWF0ZSBhIHRhc2sgd2l0aCBzb21lIGR1bW15IGZ1bmN0aW9uLCB3ZSdyZSBub3QgYWN0dWFsbHkgZ29pbmcgdG8gcnVuCisgICAgICogdGhlIHRhc2sgaGVyZSAqLworICAgIHRhc2sgPSBnc3RfdGFza19jcmVhdGUgKChHc3RUYXNrRnVuY3Rpb24pIGdzdF9vYmplY3RfdW5yZWYsIE5VTEwpOworCisgICAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAodGFzaywgInRhc2siLCAxKTsKKworICAgIC8qIHNldCB0aGUgdGFzayAqLworICAgIGdfdmFsdWVfaW5pdCAoJnZhbHVlLCBHU1RfVFlQRV9UQVNLKTsKKyAgICBnX3ZhbHVlX3NldF9vYmplY3QgKCZ2YWx1ZSwgdGFzayk7CisKKyAgICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UICh0YXNrLCAidGFzayIsIDIpOworCisgICAgZ3N0X21lc3NhZ2Vfc2V0X3N0cmVhbV9zdGF0dXNfb2JqZWN0IChtZXNzYWdlLCAmdmFsdWUpOworICAgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHRhc2ssICJ0YXNrIiwgMyk7CisgICAgZ192YWx1ZV91bnNldCAoJnZhbHVlKTsKKyAgICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UICh0YXNrLCAidGFzayIsIDIpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKHRhc2spOworICAgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHRhc2ssICJ0YXNrIiwgMSk7CisKKyAgICAvKiBnZXQgdGhlIG9iamVjdCBiYWNrLCBubyByZWZjb3VudCBpcyBjaGFuZ2VkICovCisgICAgdmFsID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cmVhbV9zdGF0dXNfb2JqZWN0IChtZXNzYWdlKTsKKyAgICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UICh0YXNrLCAidGFzayIsIDEpOworCisgICAgdGFzazIgPSBnX3ZhbHVlX2dldF9vYmplY3QgKHZhbCk7CisKKyAgICBmYWlsX3VubGVzcyAoR1NUX0lTX1RBU0sgKHRhc2syKSk7CisgICAgZmFpbF91bmxlc3MgKHRhc2syID09IHRhc2spOworCisgICAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAodGFzaywgInRhc2siLCAxKTsKKyAgICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UICh0YXNrMiwgInRhc2siLCAxKTsKKworICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKKyAgfQorCisgIC8qIEdTVF9NRVNTQUdFX1JFUVVFU1RfU1RBVEUgICAqLworICB7CisgICAgR3N0U3RhdGUgc3RhdGU7CisKKyAgICBzdGF0ZSA9IEdTVF9TVEFURV9QQVVTRUQ7CisKKyAgICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X3JlcXVlc3Rfc3RhdGUgKE5VTEwsIHN0YXRlKTsKKyAgICBmYWlsX2lmIChtZXNzYWdlID09IE5VTEwpOworICAgIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9SRVFVRVNUX1NUQVRFKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSA9PSBOVUxMKTsKKworICAgIC8qIHNldCBzb21lIHdyb25nIHZhbHVlcyB0byBjaGVjayBpZiB0aGUgcGFyc2UgbWV0aG9kIG92ZXJ3cml0ZXMgdGhlbQorICAgICAqIHdpdGggdGhlIGdvb2QgdmFsdWVzICovCisgICAgc3RhdGUgPSBHU1RfU1RBVEVfUkVBRFk7CisgICAgZ3N0X21lc3NhZ2VfcGFyc2VfcmVxdWVzdF9zdGF0ZSAobWVzc2FnZSwgJnN0YXRlKTsKKyAgICBmYWlsX3VubGVzcyAoc3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCk7CisKKyAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7CisgIH0KKyAgLyogR1NUX01FU1NBR0VfUU9TICAgKi8KKyAgeworICAgIGdib29sZWFuIGxpdmU7CisgICAgR3N0Q2xvY2tUaW1lIHJ1bm5pbmdfdGltZTsKKyAgICBHc3RDbG9ja1RpbWUgc3RyZWFtX3RpbWU7CisgICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgZHVyYXRpb247CisgICAgZ2ludDY0IGppdHRlcjsKKyAgICBnZG91YmxlIHByb3BvcnRpb247CisgICAgZ2ludCBxdWFsaXR5OworICAgIEdzdEZvcm1hdCBmb3JtYXQ7CisgICAgZ3VpbnQ2NCBwcm9jZXNzZWQ7CisgICAgZ3VpbnQ2NCBkcm9wcGVkOworCisgICAgcnVubmluZ190aW1lID0gMSAqIEdTVF9TRUNPTkQ7CisgICAgc3RyZWFtX3RpbWUgPSAyICogR1NUX1NFQ09ORDsKKyAgICB0aW1lc3RhbXAgPSAzICogR1NUX1NFQ09ORDsKKyAgICBkdXJhdGlvbiA9IDQgKiBHU1RfU0VDT05EOworCisgICAgbWVzc2FnZSA9CisgICAgICAgIGdzdF9tZXNzYWdlX25ld19xb3MgKE5VTEwsIFRSVUUsIHJ1bm5pbmdfdGltZSwgc3RyZWFtX3RpbWUsIHRpbWVzdGFtcCwKKyAgICAgICAgZHVyYXRpb24pOworICAgIGZhaWxfaWYgKG1lc3NhZ2UgPT0gTlVMTCk7CisgICAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1FPUyk7CisgICAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkgPT0gTlVMTCk7CisKKyAgICAvKiBjaGVjayBkZWZhdWx0cyAqLworICAgIGdzdF9tZXNzYWdlX3BhcnNlX3Fvc192YWx1ZXMgKG1lc3NhZ2UsICZqaXR0ZXIsICZwcm9wb3J0aW9uLCAmcXVhbGl0eSk7CisgICAgZmFpbF91bmxlc3MgKGppdHRlciA9PSAwKTsKKyAgICBmYWlsX3VubGVzcyAocHJvcG9ydGlvbiA9PSAxLjApOworICAgIGZhaWxfdW5sZXNzIChxdWFsaXR5ID09IDEwMDAwMDApOworCisgICAgZ3N0X21lc3NhZ2VfcGFyc2VfcW9zX3N0YXRzIChtZXNzYWdlLCAmZm9ybWF0LCAmcHJvY2Vzc2VkLCAmZHJvcHBlZCk7CisgICAgZmFpbF91bmxlc3MgKGZvcm1hdCA9PSBHU1RfRk9STUFUX1VOREVGSU5FRCk7CisgICAgZmFpbF91bmxlc3MgKHByb2Nlc3NlZCA9PSAtMSk7CisgICAgZmFpbF91bmxlc3MgKGRyb3BwZWQgPT0gLTEpOworCisgICAgLyogc2V0IHNvbWUgd3JvbmcgdmFsdWVzIHRvIGNoZWNrIGlmIHRoZSBwYXJzZSBtZXRob2Qgb3ZlcndyaXRlcyB0aGVtCisgICAgICogd2l0aCB0aGUgZ29vZCB2YWx1ZXMgKi8KKyAgICBydW5uaW5nX3RpbWUgPSBzdHJlYW1fdGltZSA9IHRpbWVzdGFtcCA9IGR1cmF0aW9uID0gNSAqIEdTVF9TRUNPTkQ7CisgICAgbGl2ZSA9IEZBTFNFOworICAgIGdzdF9tZXNzYWdlX3BhcnNlX3FvcyAobWVzc2FnZSwgJmxpdmUsICZydW5uaW5nX3RpbWUsICZzdHJlYW1fdGltZSwKKyAgICAgICAgJnRpbWVzdGFtcCwgJmR1cmF0aW9uKTsKKyAgICBmYWlsX3VubGVzcyAobGl2ZSA9PSBUUlVFKTsKKyAgICBmYWlsX3VubGVzcyAocnVubmluZ190aW1lID09IDEgKiBHU1RfU0VDT05EKTsKKyAgICBmYWlsX3VubGVzcyAoc3RyZWFtX3RpbWUgPT0gMiAqIEdTVF9TRUNPTkQpOworICAgIGZhaWxfdW5sZXNzICh0aW1lc3RhbXAgPT0gMyAqIEdTVF9TRUNPTkQpOworICAgIGZhaWxfdW5sZXNzIChkdXJhdGlvbiA9PSA0ICogR1NUX1NFQ09ORCk7CisKKyAgICAvKiBjaGFuZ2Ugc29tZSB2YWx1ZXMgKi8KKyAgICBnc3RfbWVzc2FnZV9zZXRfcW9zX3ZhbHVlcyAobWVzc2FnZSwgLTEwLCAyLjAsIDUwMDApOworICAgIGdzdF9tZXNzYWdlX3BhcnNlX3Fvc192YWx1ZXMgKG1lc3NhZ2UsICZqaXR0ZXIsICZwcm9wb3J0aW9uLCAmcXVhbGl0eSk7CisgICAgZmFpbF91bmxlc3MgKGppdHRlciA9PSAtMTApOworICAgIGZhaWxfdW5sZXNzIChwcm9wb3J0aW9uID09IDIuMCk7CisgICAgZmFpbF91bmxlc3MgKHF1YWxpdHkgPT0gNTAwMCk7CisKKyAgICBnc3RfbWVzc2FnZV9zZXRfcW9zX3N0YXRzIChtZXNzYWdlLCBHU1RfRk9STUFUX0RFRkFVTFQsIDEwMzAsIDY1KTsKKyAgICBnc3RfbWVzc2FnZV9wYXJzZV9xb3Nfc3RhdHMgKG1lc3NhZ2UsICZmb3JtYXQsICZwcm9jZXNzZWQsICZkcm9wcGVkKTsKKyAgICBmYWlsX3VubGVzcyAoZm9ybWF0ID09IEdTVF9GT1JNQVRfREVGQVVMVCk7CisgICAgZmFpbF91bmxlc3MgKHByb2Nlc3NlZCA9PSAxMDMwKTsKKyAgICBmYWlsX3VubGVzcyAoZHJvcHBlZCA9PSA2NSk7CisKKyAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7CisgIH0KKyAgLyogR1NUX01FU1NBR0VfUFJPR1JFU1MgICAqLworICB7CisgICAgR3N0UHJvZ3Jlc3NUeXBlIHR5cGU7CisgICAgZ2NoYXIgKmNhdGVnb3J5LCAqdGV4dDsKKworICAgIG1lc3NhZ2UgPQorICAgICAgICBnc3RfbWVzc2FnZV9uZXdfcHJvZ3Jlc3MgKE5VTEwsIEdTVF9QUk9HUkVTU19UWVBFX1NUQVJULCAiY29ubmVjdGluZyIsCisgICAgICAgICJDb25uZWN0aW5nIHRvIHlvdXRidWUuY29tIik7CisgICAgZmFpbF9pZiAobWVzc2FnZSA9PSBOVUxMKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfUFJPR1JFU1MpOworICAgIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpID09IE5VTEwpOworCisgICAgLyogc2V0IHNvbWUgd3JvbmcgdmFsdWVzIHRvIGNoZWNrIGlmIHRoZSBwYXJzZSBtZXRob2Qgb3ZlcndyaXRlcyB0aGVtCisgICAgICogd2l0aCB0aGUgZ29vZCB2YWx1ZXMgKi8KKyAgICB0eXBlID0gR1NUX1BST0dSRVNTX1RZUEVfRVJST1I7CisgICAgZ3N0X21lc3NhZ2VfcGFyc2VfcHJvZ3Jlc3MgKG1lc3NhZ2UsICZ0eXBlLCAmY2F0ZWdvcnksICZ0ZXh0KTsKKyAgICBmYWlsX3VubGVzcyAodHlwZSA9PSBHU1RfUFJPR1JFU1NfVFlQRV9TVEFSVCk7CisgICAgZmFpbF91bmxlc3MgKCFzdHJjbXAgKGNhdGVnb3J5LCAiY29ubmVjdGluZyIpKTsKKyAgICBmYWlsX3VubGVzcyAoIXN0cmNtcCAodGV4dCwgIkNvbm5lY3RpbmcgdG8geW91dGJ1ZS5jb20iKSk7CisgICAgZ19mcmVlIChjYXRlZ29yeSk7CisgICAgZ19mcmVlICh0ZXh0KTsKKworICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKKyAgfQorfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBTdWl0ZSAqCitnc3RfbWVzc2FnZV9zdWl0ZSAodm9pZCkKK3sKKyAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RNZXNzYWdlIik7CisgIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKKworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BhcnNpbmcpOworCisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoZ3N0X21lc3NhZ2UpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdG1ldGEuYyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RtZXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjllYjM3MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RtZXRhLmMKQEAgLTAsMCArMSwyMDAgQEAKKy8qIEdTdHJlYW1lcgorICoKKyAqIHVuaXQgdGVzdCBmb3IgR3N0TWV0YQorICoKKyAqIENvcHlyaWdodCAoQykgPDIwMDk+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2lmZGVmIEhBVkVfVkFMR1JJTkRfSAorIyBpbmNsdWRlIDx2YWxncmluZC92YWxncmluZC5oPgorI2Vsc2UKKyMgZGVmaW5lIFJVTk5JTkdfT05fVkFMR1JJTkQgRkFMU0UKKyNlbmRpZgorCisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisKKy8qIHRlc3QgbWV0YWRhdGEgZm9yIFBUUy9EVFMgYW5kIGR1cmF0aW9uICovCit0eXBlZGVmIHN0cnVjdAoreworICBHc3RNZXRhIG1ldGE7CisKKyAgR3N0Q2xvY2tUaW1lIHB0czsKKyAgR3N0Q2xvY2tUaW1lIGR0czsKKyAgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uOworICBHc3RDbG9ja1RpbWUgY2xvY2tfcmF0ZTsKK30gR3N0TWV0YVRlc3Q7CisKK3N0YXRpYyBjb25zdCBHc3RNZXRhSW5mbyAqZ3N0X21ldGFfdGVzdF9nZXRfaW5mbyAodm9pZCk7CisjZGVmaW5lIEdTVF9NRVRBX1RFU1RfSU5GTyAoZ3N0X21ldGFfdGVzdF9nZXRfaW5mbygpKQorCisjZGVmaW5lIEdTVF9NRVRBX1RFU1RfR0VUKGJ1ZikgKChHc3RNZXRhVGVzdCAqKWdzdF9idWZmZXJfZ2V0X21ldGEoYnVmLEdTVF9NRVRBX1RFU1RfSU5GTykpCisjZGVmaW5lIEdTVF9NRVRBX1RFU1RfQUREKGJ1ZikgKChHc3RNZXRhVGVzdCAqKWdzdF9idWZmZXJfYWRkX21ldGEoYnVmLEdTVF9NRVRBX1RFU1RfSU5GTyxOVUxMKSkKKworI2lmIDAKKy8qIHVudXNlZCBjdXJyZW50bHkuIFRoaXMgaXMgYSB1c2VyIGZ1bmN0aW9uIHRvIGZpbGwgdGhlIG1ldGFkYXRhIHdpdGggZGVmYXVsdAorICogdmFsdWVzLiBXZSBkb24ndCBjYWxsIHRoaXMgZnJvbSB0aGUgaW5pdCBmdW5jdGlvbiBiZWNhdXNlIHRoZSB1c2VyIGlzIG1vc3RseQorICogbGlrZWx5IGdvaW5nIHRvIG92ZXJyaWRlIHRoZSB2YWx1ZXMgaW1tZWRpYXRlbHkgYWZ0ZXIgKi8KK3N0YXRpYyB2b2lkCitnc3RfbWV0YV90ZXN0X2luaXQgKEdzdE1ldGFUZXN0ICogbWV0YSkKK3sKKyAgbWV0YS0+cHRzID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgbWV0YS0+ZHRzID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgbWV0YS0+ZHVyYXRpb24gPSBHU1RfQ0xPQ0tfVElNRV9OT05FOworICBtZXRhLT5jbG9ja19yYXRlID0gR1NUX1NFQ09ORDsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZAordGVzdF9pbml0X2Z1bmMgKEdzdE1ldGFUZXN0ICogbWV0YSwgR3N0QnVmZmVyICogYnVmZmVyKQoreworICBHU1RfREVCVUcgKCJpbml0IGNhbGxlZCBvbiBidWZmZXIgJXAsIG1ldGEgJXAiLCBidWZmZXIsIG1ldGEpOworICAvKiBub3RoaW5nIHRvIGluaXQgcmVhbGx5LCB0aGUgaW5pdCBmdW5jdGlvbiBpcyBtb3N0bHkgZm9yIGFsbG9jYXRpbmcKKyAgICogYWRkaXRpb25hbCBtZW1vcnkgb3IgZG9pbmcgc3BlY2lhbCBzZXR1cCBhcyBwYXJ0IG9mIGFkZGluZyB0aGUgbWV0YWRhdGEgdG8KKyAgICogdGhlIGJ1ZmZlciovCit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X2ZyZWVfZnVuYyAoR3N0TWV0YVRlc3QgKiBtZXRhLCBHc3RCdWZmZXIgKiBidWZmZXIpCit7CisgIEdTVF9ERUJVRyAoImZyZWUgY2FsbGVkIG9uIGJ1ZmZlciAlcCwgbWV0YSAlcCIsIGJ1ZmZlciwgbWV0YSk7CisgIC8qIG5vdGhpbmcgdG8gZnJlZSByZWFsbHkgKi8KK30KKworc3RhdGljIHZvaWQKK3Rlc3RfY29weV9mdW5jIChHc3RCdWZmZXIgKiBjb3B5YnVmLCBHc3RNZXRhVGVzdCAqIG1ldGEsCisgICAgR3N0QnVmZmVyICogYnVmZmVyLCBnc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUpCit7CisgIEdzdE1ldGFUZXN0ICp0ZXN0OworCisgIEdTVF9ERUJVRyAoImNvcHkgY2FsbGVkIGZyb20gYnVmZmVyICVwIHRvICVwLCBtZXRhICVwLCAldS0ldSIsIGJ1ZmZlciwKKyAgICAgIGNvcHlidWYsIG1ldGEsIG9mZnNldCwgc2l6ZSk7CisKKyAgdGVzdCA9IEdTVF9NRVRBX1RFU1RfQUREIChjb3B5YnVmKTsKKyAgaWYgKG9mZnNldCA9PSAwKSB7CisgICAgLyogc2FtZSBvZmZzZXQsIGNvcHkgdGltZXN0YW1wcyAqLworICAgIHRlc3QtPnB0cyA9IG1ldGEtPnB0czsKKyAgICB0ZXN0LT5kdHMgPSBtZXRhLT5kdHM7CisgICAgaWYgKHNpemUgPT0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSkgeworICAgICAgLyogc2FtZSBzaXplLCBjb3B5IGR1cmF0aW9uICovCisgICAgICB0ZXN0LT5kdXJhdGlvbiA9IG1ldGEtPmR1cmF0aW9uOworICAgIH0gZWxzZSB7CisgICAgICAvKiBlbHNlIGNsZWFyICovCisgICAgICB0ZXN0LT5kdXJhdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgICAgfQorICB9IGVsc2UgeworICAgIHRlc3QtPnB0cyA9IC0xOworICAgIHRlc3QtPmR0cyA9IC0xOworICAgIHRlc3QtPmR1cmF0aW9uID0gLTE7CisgIH0KKyAgdGVzdC0+Y2xvY2tfcmF0ZSA9IG1ldGEtPmNsb2NrX3JhdGU7Cit9CisKK3N0YXRpYyBjb25zdCBHc3RNZXRhSW5mbyAqCitnc3RfbWV0YV90ZXN0X2dldF9pbmZvICh2b2lkKQoreworICBzdGF0aWMgY29uc3QgR3N0TWV0YUluZm8gKm1ldGFfdGVzdF9pbmZvID0gTlVMTDsKKworICBpZiAobWV0YV90ZXN0X2luZm8gPT0gTlVMTCkgeworICAgIG1ldGFfdGVzdF9pbmZvID0gZ3N0X21ldGFfcmVnaXN0ZXIgKCJHc3RNZXRhVGVzdCIsICJHc3RNZXRhVGVzdCIsCisgICAgICAgIHNpemVvZiAoR3N0TWV0YVRlc3QpLAorICAgICAgICAoR3N0TWV0YUluaXRGdW5jdGlvbikgdGVzdF9pbml0X2Z1bmMsCisgICAgICAgIChHc3RNZXRhRnJlZUZ1bmN0aW9uKSB0ZXN0X2ZyZWVfZnVuYywKKyAgICAgICAgKEdzdE1ldGFDb3B5RnVuY3Rpb24pIHRlc3RfY29weV9mdW5jLCAoR3N0TWV0YVRyYW5zZm9ybUZ1bmN0aW9uKSBOVUxMKTsKKyAgfQorICByZXR1cm4gbWV0YV90ZXN0X2luZm87Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X21ldGFfdGVzdCkKK3sKKyAgR3N0QnVmZmVyICpidWZmZXIsICpjb3B5LCAqc3ViYnVmOworICBHc3RNZXRhVGVzdCAqbWV0YTsKKyAgZ3BvaW50ZXIgZGF0YTsKKworICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOworICBmYWlsX2lmIChidWZmZXIgPT0gTlVMTCk7CisKKyAgZGF0YSA9IGdzdF9idWZmZXJfbWFwIChidWZmZXIsIE5VTEwsIE5VTEwsIEdTVF9NQVBfV1JJVEUpOworICBmYWlsX2lmIChkYXRhID09IE5VTEwpOworICBtZW1zZXQgKGRhdGEsIDAsIDQpOworICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsIGRhdGEsIDQpOworCisgIC8qIGFkZCBzb21lIG1ldGFkYXRhICovCisgIG1ldGEgPSBHU1RfTUVUQV9URVNUX0FERCAoYnVmZmVyKTsKKyAgZmFpbF9pZiAobWV0YSA9PSBOVUxMKTsKKyAgLyogZmlsbCBzb21lIHZhbHVlcyAqLworICBtZXRhLT5wdHMgPSAxMDAwOworICBtZXRhLT5kdHMgPSAyMDAwOworICBtZXRhLT5kdXJhdGlvbiA9IDEwMDA7CisgIG1ldGEtPmNsb2NrX3JhdGUgPSAxMDAwOworCisgIC8qIGNvcHkgb2YgdGhlIGJ1ZmZlciAqLworICBjb3B5ID0gZ3N0X2J1ZmZlcl9jb3B5IChidWZmZXIpOworICAvKiBnZXQgbWV0YWRhdGEgb2YgdGhlIGJ1ZmZlciAqLworICBtZXRhID0gR1NUX01FVEFfVEVTVF9HRVQgKGNvcHkpOworICBmYWlsX2lmIChtZXRhID09IE5VTEwpOworICBmYWlsX2lmIChtZXRhLT5wdHMgIT0gMTAwMCk7CisgIGZhaWxfaWYgKG1ldGEtPmR0cyAhPSAyMDAwKTsKKyAgZmFpbF9pZiAobWV0YS0+ZHVyYXRpb24gIT0gMTAwMCk7CisgIGZhaWxfaWYgKG1ldGEtPmNsb2NrX3JhdGUgIT0gMTAwMCk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGNvcHkpOworCisgIC8qIG1ha2Ugc3ViYnVmZmVyICovCisgIHN1YmJ1ZiA9IGdzdF9idWZmZXJfY29weV9yZWdpb24gKGJ1ZmZlciwgR1NUX0JVRkZFUl9DT1BZX0FMTCwgMCwgMSk7CisgIC8qIGdldCBtZXRhZGF0YSBvZiB0aGUgYnVmZmVyICovCisgIG1ldGEgPSBHU1RfTUVUQV9URVNUX0dFVCAoc3ViYnVmKTsKKyAgZmFpbF9pZiAobWV0YSA9PSBOVUxMKTsKKyAgZmFpbF9pZiAobWV0YS0+cHRzICE9IDEwMDApOworICBmYWlsX2lmIChtZXRhLT5kdHMgIT0gMjAwMCk7CisgIGZhaWxfaWYgKG1ldGEtPmR1cmF0aW9uICE9IC0xKTsKKyAgZmFpbF9pZiAobWV0YS0+Y2xvY2tfcmF0ZSAhPSAxMDAwKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoc3ViYnVmKTsKKworICAvKiBtYWtlIGFub3RoZXIgc3ViYnVmZmVyICovCisgIHN1YmJ1ZiA9IGdzdF9idWZmZXJfY29weV9yZWdpb24gKGJ1ZmZlciwgR1NUX0JVRkZFUl9DT1BZX0FMTCwgMSwgMyk7CisgIC8qIGdldCBtZXRhZGF0YSBvZiB0aGUgYnVmZmVyICovCisgIG1ldGEgPSBHU1RfTUVUQV9URVNUX0dFVCAoc3ViYnVmKTsKKyAgZmFpbF9pZiAobWV0YSA9PSBOVUxMKTsKKyAgZmFpbF9pZiAobWV0YS0+cHRzICE9IC0xKTsKKyAgZmFpbF9pZiAobWV0YS0+ZHRzICE9IC0xKTsKKyAgZmFpbF9pZiAobWV0YS0+ZHVyYXRpb24gIT0gLTEpOworICBmYWlsX2lmIChtZXRhLT5jbG9ja19yYXRlICE9IDEwMDApOworICBnc3RfYnVmZmVyX3VucmVmIChzdWJidWYpOworCisgIC8qIGNsZWFuIHVwICovCisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIFN1aXRlICoKK2dzdF9idWZmZXJtZXRhX3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdE1ldGEiKTsKKyAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOworCisgIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWV0YV90ZXN0KTsKKworICByZXR1cm4gczsKK30KKworR1NUX0NIRUNLX01BSU4gKGdzdF9idWZmZXJtZXRhKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RtaW5pb2JqZWN0LmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0bWluaW9iamVjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzN2Y3ZTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9nc3QvZ3N0bWluaW9iamVjdC5jCkBAIC0wLDAgKzEsNDcxIEBACisvKiBHU3RyZWFtZXIKKyAqCisgKiB1bml0IHRlc3QgZm9yIEdzdE1pbmlPYmplY3QKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisgKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfY29weSkKK3sKKyAgR3N0QnVmZmVyICpidWZmZXIsICpjb3B5OworCisgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7CisKKyAgY29weSA9IEdTVF9CVUZGRVIgKGdzdF9taW5pX29iamVjdF9jb3B5IChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoYnVmZmVyKSkpOworCisgIGZhaWxfaWYgKGNvcHkgPT0gTlVMTCwgIkNvcHkgb2YgYnVmZmVyIHJldHVybmVkIE5VTEwiKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGNvcHkpID09IDQsCisgICAgICAiQ29weSBvZiBidWZmZXIgaGFzIGRpZmZlcmVudCBzaXplIik7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfaXNfd3JpdGFibGUpCit7CisgIEdzdEJ1ZmZlciAqYnVmZmVyOworICBHc3RNaW5pT2JqZWN0ICptb2JqOworCisgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7CisgIG1vYmogPSBHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoYnVmZmVyKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X21pbmlfb2JqZWN0X2lzX3dyaXRhYmxlIChtb2JqKSwKKyAgICAgICJBIGJ1ZmZlciB3aXRoIG9uZSByZWYgc2hvdWxkIGJlIHdyaXRhYmxlIik7CisKKyAgZmFpbF9pZiAoZ3N0X21pbmlfb2JqZWN0X3JlZiAobW9iaikgPT0gTlVMTCwgIkNvdWxkIG5vdCByZWYgdGhlIG1vYmoiKTsKKworICBmYWlsX2lmIChnc3RfbWluaV9vYmplY3RfaXNfd3JpdGFibGUgKG1vYmopLAorICAgICAgIkEgYnVmZmVyIHdpdGggdHdvIHJlZnMgc2hvdWxkIG5vdCBiZSB3cml0YWJsZSIpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X21ha2Vfd3JpdGFibGUpCit7CisgIEdzdEJ1ZmZlciAqYnVmZmVyOworICBHc3RNaW5pT2JqZWN0ICptb2JqLCAqbW9iajIsICptb2JqMzsKKworICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOworICBtb2JqID0gR1NUX01JTklfT0JKRUNUX0NBU1QgKGJ1ZmZlcik7CisKKyAgbW9iajIgPSBnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZSAobW9iaik7CisgIGZhaWxfdW5sZXNzIChHU1RfSVNfQlVGRkVSIChtb2JqMiksICJtYWtlX3dyaXRhYmxlIGRpZCBub3QgcmV0dXJuIGEgYnVmZmVyIik7CisgIGZhaWxfdW5sZXNzIChtb2JqID09IG1vYmoyLAorICAgICAgIm1ha2Vfd3JpdGFibGUgcmV0dXJuZWQgYSBjb3B5IGZvciBhIGJ1ZmZlciB3aXRoIHJlZmNvdW50IDEiKTsKKworICBtb2JqMiA9IGdzdF9taW5pX29iamVjdF9yZWYgKG1vYmopOworICBtb2JqMyA9IGdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlIChtb2JqKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9JU19CVUZGRVIgKG1vYmozKSwgIm1ha2Vfd3JpdGFibGUgZGlkIG5vdCByZXR1cm4gYSBidWZmZXIiKTsKKyAgZmFpbF9pZiAobW9iaiA9PSBtb2JqMywKKyAgICAgICJtYWtlX3dyaXRhYmxlIHJldHVybmVkIHNhbWUgb2JqZWN0IGZvciBhIGJ1ZmZlciB3aXRoIHJlZmNvdW50ID4gMSIpOworCisgIGZhaWxfdW5sZXNzIChHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKG1vYmopID09IDEsCisgICAgICAicmVmY291bnQgb2Ygb3JpZ2luYWwgbW9iaiBvYmplY3Qgc2hvdWxkIGJlIGJhY2sgdG8gMSIpOworCisgIG1vYmoyID0gZ3N0X21pbmlfb2JqZWN0X21ha2Vfd3JpdGFibGUgKG1vYmopOworICBmYWlsX3VubGVzcyAoR1NUX0lTX0JVRkZFUiAobW9iajIpLCAibWFrZV93cml0YWJsZSBkaWQgbm90IHJldHVybiBhIGJ1ZmZlciIpOworICBmYWlsX3VubGVzcyAobW9iaiA9PSBtb2JqMiwKKyAgICAgICJtYWtlX3dyaXRhYmxlIHJldHVybmVkIGEgY29weSBmb3IgYSBidWZmZXIgd2l0aCByZWZjb3VudCAxIik7CisKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgZ2ludCBudW1fdGhyZWFkcyA9IDEwOworc3RhdGljIGdpbnQgcmVmc19wZXJfdGhyZWFkID0gMTAwMDA7CisKKy8qIHRlc3QgdGhyZWFkLXNhZmUgcmVmY291bnRpbmcgb2YgR3N0TWluaU9iamVjdCAqLworc3RhdGljIHZvaWQKK3RocmVhZF9yZWYgKEdzdE1pbmlPYmplY3QgKiBtb2JqKQoreworICBpbnQgajsKKworICBUSFJFQURfU1RBUlQgKCk7CisKKyAgZm9yIChqID0gMDsgaiA8IHJlZnNfcGVyX3RocmVhZDsgKytqKSB7CisgICAgZ3N0X21pbmlfb2JqZWN0X3JlZiAobW9iaik7CisKKyAgICBpZiAoaiAlIG51bV90aHJlYWRzID09IDApCisgICAgICBUSFJFQURfU1dJVENIICgpOworICB9CisgIEdTVF9ERUJVRyAoInRocmVhZCBzdG9wcGVkIik7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3JlZl90aHJlYWRlZCkKK3sKKyAgR3N0QnVmZmVyICpidWZmZXI7CisgIEdzdE1pbmlPYmplY3QgKm1vYmo7CisgIGdpbnQgZXhwZWN0ZWQ7CisKKyAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0KTsKKworICBtb2JqID0gR1NUX01JTklfT0JKRUNUX0NBU1QgKGJ1ZmZlcik7CisKKyAgTUFJTl9TVEFSVF9USFJFQURTIChudW1fdGhyZWFkcywgdGhyZWFkX3JlZiwgbW9iaik7CisKKyAgTUFJTl9TVE9QX1RIUkVBRFMgKCk7CisKKyAgZXhwZWN0ZWQgPSBudW1fdGhyZWFkcyAqIHJlZnNfcGVyX3RocmVhZCArIDE7CisgIEFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCAobW9iaiwgIm1pbmlvYmplY3QiLCBleHBlY3RlZCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIHZvaWQKK3RocmVhZF91bnJlZiAoR3N0TWluaU9iamVjdCAqIG1vYmopCit7CisgIGludCBqOworCisgIFRIUkVBRF9TVEFSVCAoKTsKKworICBmb3IgKGogPSAwOyBqIDwgcmVmc19wZXJfdGhyZWFkOyArK2opIHsKKyAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKG1vYmopOworCisgICAgaWYgKGogJSBudW1fdGhyZWFkcyA9PSAwKQorICAgICAgVEhSRUFEX1NXSVRDSCAoKTsKKyAgfQorfQorCitHU1RfU1RBUlRfVEVTVCAodGVzdF91bnJlZl90aHJlYWRlZCkKK3sKKyAgR3N0QnVmZmVyICpidWZmZXI7CisgIEdzdE1pbmlPYmplY3QgKm1vYmo7CisgIGludCBpOworCisgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7CisKKyAgbW9iaiA9IEdTVF9NSU5JX09CSkVDVCAoYnVmZmVyKTsKKworICBmb3IgKGkgPSAwOyBpIDwgbnVtX3RocmVhZHMgKiByZWZzX3Blcl90aHJlYWQ7ICsraSkKKyAgICBnc3RfbWluaV9vYmplY3RfcmVmIChtb2JqKTsKKworICBNQUlOX1NUQVJUX1RIUkVBRFMgKG51bV90aHJlYWRzLCB0aHJlYWRfdW5yZWYsIG1vYmopOworCisgIE1BSU5fU1RPUF9USFJFQURTICgpOworCisgIEFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCAobW9iaiwgIm1pbmlvYmplY3QiLCAxKTsKKworICAvKiBmaW5hbCB1bnJlZiAqLworICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKG1vYmopOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qID09PT09PT09IHdlYWsgcmVmIHRlc3QgPT09PT09PT0gKi8KKworc3RhdGljIGdib29sZWFuIHdlYWtfcmVmX25vdGlmeV9zdWNjZWVkZWQgPSBGQUxTRTsKKworc3RhdGljIHZvaWQKK29uX3dlYWtfcmVmX25vdGlmeSAoZ3BvaW50ZXIgZGF0YSwgR3N0TWluaU9iamVjdCAqIHdoZXJlX29iamVjdF93YXMpCit7CisgIHdlYWtfcmVmX25vdGlmeV9zdWNjZWVkZWQgPSBUUlVFOworfQorCitHU1RfU1RBUlRfVEVTVCAodGVzdF93ZWFrX3JlZikKK3sKKyAgR3N0QnVmZmVyICpidWZmZXI7CisKKyAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0KTsKKworICBnc3RfbWluaV9vYmplY3Rfd2Vha19yZWYgKEdTVF9NSU5JX09CSkVDVCAoYnVmZmVyKSwgb25fd2Vha19yZWZfbm90aWZ5LAorICAgICAgJmJ1ZmZlcik7CisKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKworICBmYWlsX3VubGVzcyAod2Vha19yZWZfbm90aWZ5X3N1Y2NlZWRlZCwKKyAgICAgICJObyB3ZWFrIHJlZmVyZW5jZSBub3RpZmljYXRpb24gdG9vayBwbGFjZS4iKTsKK30KKworR1NUX0VORF9URVNUOworCisjaWYgMAorLyogPT09PT09PT0gcmVjeWNsZSB0ZXN0ID09PT09PT09ICovCisKK3N0YXRpYyBnaW50IHJlY3ljbGVfYnVmZmVyX2NvdW50ID0gMTA7CisKK3R5cGVkZWYgc3RydWN0IF9NeUJ1ZmZlclBvb2wgTXlCdWZmZXJQb29sOworCitzdHJ1Y3QgX015QnVmZmVyUG9vbAoreworICBHU0xpc3QgKmJ1ZmZlcnM7CisKKyAgdm9sYXRpbGUgZ2Jvb2xlYW4gaXNfY2xvc2VkOworfTsKKworc3RhdGljIHZvaWQgbXlfcmVjeWNsZV9idWZmZXJfZGVzdHJveSAoTXlSZWN5Y2xlQnVmZmVyICogYnVmKTsKKworc3RhdGljIE15QnVmZmVyUG9vbCAqCitteV9idWZmZXJfcG9vbF9uZXcgKHZvaWQpCit7CisgIHJldHVybiBnX25ldzAgKE15QnVmZmVyUG9vbCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkCitteV9idWZmZXJfcG9vbF9mcmVlIChNeUJ1ZmZlclBvb2wgKiBzZWxmKQoreworICB3aGlsZSAoc2VsZi0+YnVmZmVycyAhPSBOVUxMKSB7CisgICAgbXlfcmVjeWNsZV9idWZmZXJfZGVzdHJveSAoc2VsZi0+YnVmZmVycy0+ZGF0YSk7CisgICAgc2VsZi0+YnVmZmVycyA9IGdfc2xpc3RfZGVsZXRlX2xpbmsgKHNlbGYtPmJ1ZmZlcnMsIHNlbGYtPmJ1ZmZlcnMpOworICB9CisKKyAgZ19mcmVlIChzZWxmKTsKK30KKworc3RhdGljIHZvaWQKK215X2J1ZmZlcl9wb29sX2FkZCAoTXlCdWZmZXJQb29sICogc2VsZiwgR3N0QnVmZmVyICogYnVmKQoreworICBnX211dGV4X2xvY2sgKG11dGV4KTsKKyAgc2VsZi0+YnVmZmVycyA9IGdfc2xpc3RfcHJlcGVuZCAoc2VsZi0+YnVmZmVycywgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZikpOworICBnX211dGV4X3VubG9jayAobXV0ZXgpOworfQorCitzdGF0aWMgR3N0QnVmZmVyICoKK215X2J1ZmZlcl9wb29sX2RyYWluX29uZSAoTXlCdWZmZXJQb29sICogc2VsZikKK3sKKyAgR3N0QnVmZmVyICpidWYgPSBOVUxMOworCisgIGdfbXV0ZXhfbG9jayAobXV0ZXgpOworICBpZiAoc2VsZi0+YnVmZmVycyAhPSBOVUxMKSB7CisgICAgYnVmID0gc2VsZi0+YnVmZmVycy0+ZGF0YTsKKyAgICBzZWxmLT5idWZmZXJzID0gZ19zbGlzdF9kZWxldGVfbGluayAoc2VsZi0+YnVmZmVycywgc2VsZi0+YnVmZmVycyk7CisgIH0KKyAgZ19tdXRleF91bmxvY2sgKG11dGV4KTsKKworICByZXR1cm4gYnVmOworfQorCitzdGF0aWMgdm9pZAorbXlfcmVjeWNsZV9idWZmZXJfZmluYWxpemUgKEdzdE1pbmlPYmplY3QgKiBtaW5pX29iamVjdCkKK3sKKyAgR3N0QnVmZmVyICpzZWxmID0gR1NUX0JVRkZFUl9DQVNUIChtaW5pX29iamVjdCk7CisKKyAgaWYgKHNlbGYtPnBvb2wgIT0gTlVMTCkgeworICAgIG15X2J1ZmZlcl9wb29sX2FkZCAoc2VsZi0+cG9vbCwgR1NUX0JVRkZFUl9DQVNUIChzZWxmKSk7CisgICAgZ191c2xlZXAgKEdfVVNFQ19QRVJfU0VDIC8gMTAwKTsKKyAgfSBlbHNlIHsKKyAgICBHU1RfTUlOSV9PQkpFQ1RfQ0xBU1MgKG15X3JlY3ljbGVfYnVmZmVyX3BhcmVudF9jbGFzcyktPmZpbmFsaXplCisgICAgICAgIChtaW5pX29iamVjdCk7CisgIH0KK30KKworc3RhdGljIEdzdEJ1ZmZlciAqCitteV9yZWN5Y2xlX2J1ZmZlcl9uZXcgKE15QnVmZmVyUG9vbCAqIHBvb2wpCit7CisgIEdzdEJ1ZmZlciAqYnVmOworCisgIGJ1ZiA9IGdzdF9idWZmZXJfbmV3ICgpOworCisgIC8vYnVmLT5wb29sID0gcG9vbDsKKworICByZXR1cm4gR1NUX0JVRkZFUl9DQVNUIChidWYpOworfQorCitzdGF0aWMgdm9pZAorbXlfcmVjeWNsZV9idWZmZXJfZGVzdHJveSAoTXlSZWN5Y2xlQnVmZmVyICogYnVmKQoreworICBidWYtPnBvb2wgPSBOVUxMOworICBnc3RfYnVmZmVyX3VucmVmIChHU1RfQlVGRkVSX0NBU1QgKGJ1ZikpOworfQorCitzdGF0aWMgdm9pZAordGhyZWFkX2J1ZmZlcl9wcm9kdWNlciAoTXlCdWZmZXJQb29sICogcG9vbCkKK3sKKyAgaW50IGo7CisKKyAgVEhSRUFEX1NUQVJUICgpOworCisgIGZvciAoaiA9IDA7IGogPCByZWN5Y2xlX2J1ZmZlcl9jb3VudDsgKytqKSB7CisgICAgR3N0QnVmZmVyICpidWYgPSBteV9yZWN5Y2xlX2J1ZmZlcl9uZXcgKHBvb2wpOworICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7CisgIH0KKworICBwb29sLT5pc19jbG9zZWQgPSBUUlVFOworfQorCitzdGF0aWMgdm9pZAordGhyZWFkX2J1ZmZlcl9jb25zdW1lciAoTXlCdWZmZXJQb29sICogcG9vbCkKK3sKKyAgVEhSRUFEX1NUQVJUICgpOworCisgIGRvIHsKKyAgICBHc3RCdWZmZXIgKmJ1ZjsKKworICAgIGJ1ZiA9IG15X2J1ZmZlcl9wb29sX2RyYWluX29uZSAocG9vbCk7CisgICAgaWYgKGJ1ZiAhPSBOVUxMKQorICAgICAgbXlfcmVjeWNsZV9idWZmZXJfZGVzdHJveSAoTVlfUkVDWUNMRV9CVUZGRVJfQ0FTVCAoYnVmKSk7CisKKyAgICBUSFJFQURfU1dJVENIICgpOworICB9CisgIHdoaWxlICghcG9vbC0+aXNfY2xvc2VkKTsKK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfcmVjeWNsZV90aHJlYWRlZCkKK3sKKyAgTXlCdWZmZXJQb29sICpwb29sOworCisgIHBvb2wgPSBteV9idWZmZXJfcG9vbF9uZXcgKCk7CisKKyAgTUFJTl9TVEFSVF9USFJFQURTICgxLCB0aHJlYWRfYnVmZmVyX3Byb2R1Y2VyLCBwb29sKTsKKyAgTUFJTl9TVEFSVF9USFJFQURTICgxLCB0aHJlYWRfYnVmZmVyX2NvbnN1bWVyLCBwb29sKTsKKworICBNQUlOX1NUT1BfVEhSRUFEUyAoKTsKKworICBteV9idWZmZXJfcG9vbF9mcmVlIChwb29sKTsKK30KKworR1NUX0VORF9URVNUOworI2VuZGlmCisKKy8qID09PT09PT09IHZhbHVlIGNvbGxlY3Rpb24gdGVzdCA9PT09PT09PSAqLwordHlwZWRlZiBzdHJ1Y3QgX015Rm9vCit7CisgIEdPYmplY3Qgb2JqZWN0OworfSBNeUZvbzsKKwordHlwZWRlZiBzdHJ1Y3QgX015Rm9vQ2xhc3MKK3sKKyAgR09iamVjdENsYXNzIGdvYmplY3RfY2xhc3M7Cit9IE15Rm9vQ2xhc3M7CisKK2VudW0KK3sKKyAgUFJPUF9CVUZGRVIgPSAxCit9OworCitHVHlwZSBteV9mb29fZ2V0X3R5cGUgKHZvaWQpOworR19ERUZJTkVfVFlQRSAoTXlGb28sIG15X2ZvbywgR19UWVBFX09CSkVDVCk7CisKK3N0YXRpYyB2b2lkCitteV9mb29faW5pdCAoTXlGb28gKiBmb28pCit7Cit9CisKK3N0YXRpYyB2b2lkCitteV9mb29fZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKKyAgICBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIEdzdEJ1ZmZlciAqbmV3X2J1ZjsKKworICBnX2Fzc2VydCAocHJvcF9pZCA9PSBQUk9QX0JVRkZFUik7CisKKyAgbmV3X2J1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTAyNCk7CisgIGdfdmFsdWVfc2V0X2JveGVkICh2YWx1ZSwgR1NUX01JTklfT0JKRUNUIChuZXdfYnVmKSk7CisgIGdzdF9idWZmZXJfdW5yZWYgKG5ld19idWYpOworfQorCitzdGF0aWMgdm9pZAorbXlfZm9vX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsCisgICAgR1BhcmFtU3BlYyAqIHBzcGVjKQoreworICBHc3RNaW5pT2JqZWN0ICptaW5pX29iajsKKworICBnX2Fzc2VydCAocHJvcF9pZCA9PSBQUk9QX0JVRkZFUik7CisKKyAgbWluaV9vYmogPSBnX3ZhbHVlX2dldF9ib3hlZCAodmFsdWUpOworICBnX2Fzc2VydCAoR1NUX0lTX0JVRkZFUiAobWluaV9vYmopKTsKKworI2lmIDAKKyAgLyogZ3N0X3ZhbHVlX2R1cF9taW5pX29iamVjdCgpIGRvZXMgbm90IGV4aXN0IHlldCAqLworICBtaW5pX29iaiA9IGdzdF92YWx1ZV9kdXBfbWluaV9vYmplY3QgKHZhbHVlKTsKKyAgZ19hc3NlcnQgKEdTVF9JU19NSU5JX09CSkVDVCAobWluaV9vYmopKTsKKyAgZ19hc3NlcnQgKEdTVF9JU19CVUZGRVIgKG1pbmlfb2JqKSk7CisgIGdzdF9taW5pX29iamVjdF91bnJlZiAobWluaV9vYmopOworI2VuZGlmCit9CisKKworc3RhdGljIHZvaWQKK215X2Zvb19jbGFzc19pbml0IChNeUZvb0NsYXNzICoga2xhc3MpCit7CisgIEdPYmplY3RDbGFzcyAqZ29iamVjdF9rbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7CisKKyAgZ29iamVjdF9rbGFzcy0+Z2V0X3Byb3BlcnR5ID0gbXlfZm9vX2dldF9wcm9wZXJ0eTsKKyAgZ29iamVjdF9rbGFzcy0+c2V0X3Byb3BlcnR5ID0gbXlfZm9vX3NldF9wcm9wZXJ0eTsKKworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2tsYXNzLCBQUk9QX0JVRkZFUiwKKyAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCAoImJ1ZmZlciIsICJCdWZmZXIiLAorICAgICAgICAgICJhIG5ld2x5IGNyZWF0ZWQgR3N0QnVmZmVyIiwgR1NUX1RZUEVfQlVGRkVSLCBHX1BBUkFNX1JFQURXUklURSkpOworfQorCitHU1RfU1RBUlRfVEVTVCAodGVzdF92YWx1ZV9jb2xsZWN0aW9uKQoreworICBHc3RCdWZmZXIgKmJ1ZiA9IE5VTEw7CisgIE15Rm9vICpmb287CisKKyAgZm9vID0gKE15Rm9vICopIGdfb2JqZWN0X25ldyAobXlfZm9vX2dldF90eXBlICgpLCBOVUxMKTsKKworICAvKiB0ZXN0IGdfb2JqZWN0X2dldCgpIHJlZmNvdW50aW5nICovCisgIGdfb2JqZWN0X2dldCAoZm9vLCAiYnVmZmVyIiwgJmJ1ZiwgTlVMTCk7CisgIGdfYXNzZXJ0IChHU1RfSVNfQlVGRkVSIChidWYpKTsKKyAgZ19hc3NlcnQgKEdTVF9NSU5JX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGJ1ZikpID09IDEpOworICBnc3RfYnVmZmVyX3VucmVmIChidWYpOworCisgIC8qIHRlc3QgZ19vYmplY3Rfc2V0KCkgcmVmY291bnRpbmcgKi8KKyAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMDI0KTsKKyAgZ19vYmplY3Rfc2V0IChmb28sICJidWZmZXIiLCBidWYsIE5VTEwpOworICBnX2Fzc2VydCAoR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoYnVmKSkgPT0gMSk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7CisKKyAgZ19vYmplY3RfdW5yZWYgKGZvbyk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9kdXBfbnVsbF9taW5pX29iamVjdCkKK3sKKyAgR1ZhbHVlIHZhbHVlID0geyAwLCB9OworICBHc3RNaW5pT2JqZWN0ICptbzsKKworICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZSwgR1NUX1RZUEVfQlVGRkVSKTsKKworICBnX3ZhbHVlX3NldF9ib3hlZCAoJnZhbHVlLCBOVUxMKTsKKworICBtbyA9IEdTVF9NSU5JX09CSkVDVF9DQVNUIChnX3ZhbHVlX2R1cF9ib3hlZCAoJnZhbHVlKSk7CisgIGdfYXNzZXJ0IChtbyA9PSBOVUxMKTsKKworICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBTdWl0ZSAqCitnc3RfbWluaV9vYmplY3Rfc3VpdGUgKHZvaWQpCit7CisgIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0TWluaU9iamVjdCIpOworICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7CisKKyAgLyogdHVybiBvZmYgdGltZW91dCAqLworICB0Y2FzZV9zZXRfdGltZW91dCAodGNfY2hhaW4sIDYwKTsKKworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2NvcHkpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaXNfd3JpdGFibGUpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWFrZV93cml0YWJsZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9yZWZfdGhyZWFkZWQpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdW5yZWZfdGhyZWFkZWQpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfd2Vha19yZWYpOworICAvL3RjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9yZWN5Y2xlX3RocmVhZGVkKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3ZhbHVlX2NvbGxlY3Rpb24pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZHVwX251bGxfbWluaV9vYmplY3QpOworICByZXR1cm4gczsKK30KKworR1NUX0NIRUNLX01BSU4gKGdzdF9taW5pX29iamVjdCk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QvZ3N0b2JqZWN0LmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0b2JqZWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY3Y2NiOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RvYmplY3QuYwpAQCAtMCwwICsxLDU0NyBAQAorLyogR1N0cmVhbWVyCisgKgorICogdW5pdCB0ZXN0IGZvciBHc3RPYmplY3QKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDwyMDA0PiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisKKy8qCisgIENyZWF0ZSBhIGZha2Ugc3ViY2xhc3MKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX0dzdEZha2VPYmplY3RDbGFzcyBHc3RGYWtlT2JqZWN0Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfR3N0RmFrZU9iamVjdCBHc3RGYWtlT2JqZWN0OworCitzdHJ1Y3QgX0dzdEZha2VPYmplY3QKK3sKKyAgR3N0T2JqZWN0IG9iamVjdDsKK307CisKK3N0cnVjdCBfR3N0RmFrZU9iamVjdENsYXNzCit7CisgIEdzdE9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKKy8vc3RhdGljIEdzdE9iamVjdENsYXNzICpwYXJlbnRfY2xhc3MgPSBOVUxMOworLy9zdGF0aWMgZ3VpbnQgZ3N0X2Zha2Vfb2JqZWN0X3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07CisKK3N0YXRpYyBHVHlwZQorZ3N0X2Zha2Vfb2JqZWN0X2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgdm9sYXRpbGUgZ3NpemUgZmFrZV9vYmplY3RfdHlwZSA9IDA7CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmZmFrZV9vYmplY3RfdHlwZSkpIHsKKyAgICBHVHlwZSB0eXBlOworICAgIHN0YXRpYyBjb25zdCBHVHlwZUluZm8gZmFrZV9vYmplY3RfaW5mbyA9IHsKKyAgICAgIHNpemVvZiAoR3N0RmFrZU9iamVjdENsYXNzKSwKKyAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLy9nc3RfZmFrZV9vYmplY3RfYmFzZV9jbGFzc19pbml0LAorICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvL2dzdF9mYWtlX29iamVjdF9iYXNlX2NsYXNzX2ZpbmFsaXplLAorICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvLyhHQ2xhc3NJbml0RnVuYykgZ3N0X2Zha2Vfb2JqZWN0X2NsYXNzX2luaXQsCisgICAgICBOVUxMLAorICAgICAgTlVMTCwKKyAgICAgIHNpemVvZiAoR3N0RmFrZU9iamVjdCksCisgICAgICAwLAorICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvLyhHSW5zdGFuY2VJbml0RnVuYykgZ3N0X2Zha2Vfb2JqZWN0X2luaXQsCisgICAgICBOVUxMCisgICAgfTsKKworICAgIHR5cGUgPSBnX3R5cGVfcmVnaXN0ZXJfc3RhdGljIChHU1RfVFlQRV9PQkpFQ1QsCisgICAgICAgICJHc3RGYWtlT2JqZWN0IiwgJmZha2Vfb2JqZWN0X2luZm8sIDApOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmZmFrZV9vYmplY3RfdHlwZSwgdHlwZSk7CisgIH0KKyAgcmV0dXJuIGZha2Vfb2JqZWN0X3R5cGU7Cit9CisKKyNpZm5kZWYgSEFWRV9PU1gKKy8qIGdfb2JqZWN0X25ldyBvbiBhYnN0cmFjdCBHc3RPYmplY3Qgc2hvdWxkIGZhaWwgKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X2ZhaWxfYWJzdHJhY3RfbmV3KQoreworICBHc3RPYmplY3QgKm9iamVjdDsKKworICBBU1NFUlRfQ1JJVElDQUwgKG9iamVjdCA9IGdfb2JqZWN0X25ldyAoZ3N0X29iamVjdF9nZXRfdHlwZSAoKSwgTlVMTCkpOworICBmYWlsX3VubGVzcyAob2JqZWN0ID09IE5VTEwsICJDcmVhdGVkIGFuIGluc3RhbmNlIG9mIGFic3RyYWN0IEdzdE9iamVjdCIpOworfQorCitHU1RfRU5EX1RFU1Q7CisjZW5kaWYKKworLyogZ19vYmplY3RfbmV3IG9uIEdzdEZha2VPYmplY3Qgc2hvdWxkIHN1Y2NlZWQgKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X2Zha2Vfb2JqZWN0X25ldykKK3sKKyAgR3N0T2JqZWN0ICpvYmplY3Q7CisKKyAgb2JqZWN0ID0gZ19vYmplY3RfbmV3IChnc3RfZmFrZV9vYmplY3RfZ2V0X3R5cGUgKCksIE5VTEwpOworICBmYWlsX2lmIChvYmplY3QgPT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgaW5zdGFuY2Ugb2YgR3N0RmFrZU9iamVjdCIpOworICBmYWlsX3VubGVzcyAoR1NUX0lTX09CSkVDVCAob2JqZWN0KSwKKyAgICAgICJHc3RGYWtlT2JqZWN0IGluc3RhbmNlIGlzIG5vdCBhIEdzdE9iamVjdCIpOworICBnc3Rfb2JqZWN0X3VucmVmIChvYmplY3QpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIEdzdEZha2VPYmplY3QgbmFtZSB0ZXN0cyAqLworR1NUX1NUQVJUX1RFU1QgKHRlc3RfZmFrZV9vYmplY3RfbmFtZSkKK3sKKyAgR3N0T2JqZWN0ICpvYmplY3Q7CisgIGdjaGFyICpuYW1lOworICBnY2hhciAqbmFtZTI7CisKKyAgb2JqZWN0ID0gZ19vYmplY3RfbmV3IChnc3RfZmFrZV9vYmplY3RfZ2V0X3R5cGUgKCksIE5VTEwpOworCisgIG5hbWUgPSBnc3Rfb2JqZWN0X2dldF9uYW1lIChvYmplY3QpOworICBmYWlsX2lmIChuYW1lID09IE5VTEwsICJOZXdseSBjcmVhdGVkIG9iamVjdCBoYXMgbm8gbmFtZSIpOworICBmYWlsX2lmIChzdHJuY21wIChuYW1lLCAiZmFrZW9iamVjdCIsIDEwKSAhPSAwLAorICAgICAgIlJhbmRvbSBuYW1lICVzIGRvZXMgbm90IHN0YXJ0IHdpdGggR3N0IiwgbmFtZSk7CisgIGdfZnJlZSAobmFtZSk7CisKKyAgLyogZ2l2ZSBhIHJhbmRvbSBuYW1lIGJ5IHNldHRpbmcgd2l0aCBOVUxMOworICAgKiBHc3RGYWtlT2JqZWN0IGNsYXNzIC0+IGZha2VvYmplY3QlZCAqLworICBnc3Rfb2JqZWN0X3NldF9uYW1lIChvYmplY3QsIE5VTEwpOworICBuYW1lID0gZ3N0X29iamVjdF9nZXRfbmFtZSAob2JqZWN0KTsKKyAgZmFpbF9pZiAobmFtZSA9PSBOVUxMLCAiUmFuZG9tIG5hbWUgd2FzIG5vdCBhc3NpZ25lZCIpOworICBmYWlsX2lmIChzdHJuY21wIChuYW1lLCAiZmFrZW9iamVjdCIsIDEwKSAhPSAwLAorICAgICAgIlJhbmRvbSBuYW1lICVzIGRvZXMgbm90IHN0YXJ0IHdpdGggR3N0IiwgbmFtZSk7CisgIGdfZnJlZSAobmFtZSk7CisKKyAgZ3N0X29iamVjdF9zZXRfbmFtZSAob2JqZWN0LCAiZmFrZSIpOworICBuYW1lID0gZ3N0X29iamVjdF9nZXRfbmFtZSAob2JqZWN0KTsKKyAgZmFpbF9pZiAobmFtZSA9PSBOVUxMLCAiRmFpbGVkIHRvIGdldCBuYW1lIG9mIEdzdEZha2VPYmplY3QiKTsKKyAgZmFpbF9pZiAoc3RyY21wIChuYW1lLCAiZmFrZSIpICE9IDAsICJOYW1lIG9mIEdzdEZha2VPYmplY3QgaXMgbm90ICdmYWtlJyIpOworCisgIC8qIGNoYW5nZSB0aGUgZ290dGVuIG5hbWUgdG8gc2VlIHRoYXQgaXQncyBhIGNvcHkgYW5kIG5vdCB0aGUgb3JpZ2luYWwgKi8KKyAgbmFtZVswXSA9ICdtJzsKKyAgbmFtZTIgPSBnc3Rfb2JqZWN0X2dldF9uYW1lIChvYmplY3QpOworICBmYWlsX2lmIChzdHJjbXAgKG5hbWUyLCAiZmFrZSIpICE9IDAsCisgICAgICAiQ29weSBvZiBvYmplY3QgbmFtZSBhZmZlY3RlZCBhY3R1YWwgb2JqZWN0IG5hbWUiKTsKKyAgZ19mcmVlIChuYW1lKTsKKyAgZ19mcmVlIChuYW1lMik7CisKKyAgZ3N0X29iamVjdF91bnJlZiAob2JqZWN0KTsKK30KKworR1NUX0VORF9URVNUOworCisvKiB0aHJlYWQgZnVuY3Rpb24gZm9yIHRocmVhZGVkIG5hbWUgY2hhbmdlIHRlc3QgKi8KK3N0YXRpYyBncG9pbnRlcgordGhyZWFkX25hbWVfb2JqZWN0IChHc3RPYmplY3QgKiBvYmplY3QpCit7CisgIGdjaGFyICp0aHJlYWRfaWQgPSBnX3N0cmR1cF9wcmludGYgKCIlcCIsIGdfdGhyZWFkX3NlbGYgKCkpOworCisgIFRIUkVBRF9TVEFSVCAoKTsKKworICAvKiBnaXZlIG1haW4gdGhyZWFkIGEgaGVhZCBzdGFydCAqLworICBnX3VzbGVlcCAoMTAwMDAwKTsKKworICAvKiB3cml0ZSBvdXIgbmFtZSByZXBlYXRlZGx5ICovCisgIGdfbWVzc2FnZSAoIlRIUkVBRCAlczogc3RhcnRpbmcgbG9vcFxuIiwgdGhyZWFkX2lkKTsKKyAgd2hpbGUgKFRIUkVBRF9URVNUX1JVTk5JTkcgKCkpIHsKKyAgICBnc3Rfb2JqZWN0X3NldF9uYW1lIChvYmplY3QsIHRocmVhZF9pZCk7CisgICAgLyogYSBtaW5pbWFsIHNsZWVwIGludm9rZXMgYSB0aHJlYWQgc3dpdGNoICovCisgICAgVEhSRUFEX1NXSVRDSCAoKTsKKyAgfQorCisgIC8qIHRocmVhZCBpcyBkb25lLCBzbyBsZXQncyByZXR1cm4gKi8KKyAgZ19tZXNzYWdlICgiVEhSRUFEICVzOiBzZXQgbmFtZVxuIiwgdGhyZWFkX2lkKTsKKyAgZ19mcmVlICh0aHJlYWRfaWQpOworCisgIHJldHVybiBOVUxMOworfQorCisjaWYgMAorR1NUX1NUQVJUX1RFU1QgKHRlc3RfZmFrZV9vYmplY3RfbmFtZV90aHJlYWRlZF93cm9uZykKK3sKKyAgR3N0T2JqZWN0ICpvYmplY3Q7CisgIGdjaGFyICpuYW1lOworICBnaW50IGk7CisgIGdib29sZWFuIGV4cGVjdGVkX2ZhaWx1cmUgPSBGQUxTRTsKKworICBnX21lc3NhZ2UgKCJcblRFU1Q6IHNldC9nZXQgd2l0aG91dCBsb2NrXG4iKTsKKworICBvYmplY3QgPSBnX29iamVjdF9uZXcgKGdzdF9mYWtlX29iamVjdF9nZXRfdHlwZSAoKSwgTlVMTCk7CisgIGdzdF9vYmplY3Rfc2V0X25hbWUgKG9iamVjdCwgIm1haW4iKTsKKworICBNQUlOX1NUQVJUX1RIUkVBRFMgKDUsIHRocmVhZF9uYW1lX29iamVjdCwgb2JqZWN0KTsKKworICAvKiBzdGFydCBsb29waW5nIGFuZCBzZXQvZ2V0IG5hbWUgcmVwZWF0ZWRseSAqLworICBmb3IgKGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7CisgICAgZ3N0X29iamVjdF9zZXRfbmFtZSAob2JqZWN0LCAibWFpbiIpOworICAgIFRIUkVBRF9TV0lUQ0ggKCk7CisgICAgbmFtZSA9IGdzdF9vYmplY3RfZ2V0X25hbWUgKG9iamVjdCk7CisgICAgaWYgKHN0cmNtcCAobmFtZSwgIm1haW4iKSAhPSAwKSB7CisgICAgICBnX21lc3NhZ2UgKCJNQUlOOiBleHBlY3RlZCBmYWlsdXJlIGR1cmluZyBydW4gJWRcbiIsIGkpOworICAgICAgZXhwZWN0ZWRfZmFpbHVyZSA9IFRSVUU7CisgICAgICBnX2ZyZWUgKG5hbWUpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGdfZnJlZSAobmFtZSk7CisgIH0KKyAgTUFJTl9TVE9QX1RIUkVBRFMgKCk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAob2JqZWN0KTsKKworICBmYWlsX3VubGVzcyAoZXhwZWN0ZWRfZmFpbHVyZSwgIm5hbWUgZGlkIG5vdCBnZXQgY2hhbmdlZCIpOworfQorCitHU1RfRU5EX1RFU1Q7CisjZW5kaWYKKworLyoKKyAqIG1haW4gdGhyZWFkIHNldHMgYW5kIGdldHMgbmFtZSBkaXJlY3RseSBvbiBzdHJ1Y3QgaW5zaWRlIHRoZSBvYmplY3QgbG9jaworICogc3VjY2VlZCBiZWNhdXNlIGxvY2sgaXMgaGVsZCBkdXJpbmcgc2V0L2dldCwgYW5kIHRocmVhZHMgYXJlIGxvY2tlZCBvdXQKKyAqLworR1NUX1NUQVJUX1RFU1QgKHRlc3RfZmFrZV9vYmplY3RfbmFtZV90aHJlYWRlZF9yaWdodCkKK3sKKyAgR3N0T2JqZWN0ICpvYmplY3Q7CisgIGdjaGFyICpuYW1lOworICBnaW50IGk7CisKKyAgZ19tZXNzYWdlICgiXG5URVNUOiBzZXQvZ2V0IGluc2lkZSBsb2NrXG4iKTsKKworICBvYmplY3QgPSBnX29iamVjdF9uZXcgKGdzdF9mYWtlX29iamVjdF9nZXRfdHlwZSAoKSwgTlVMTCk7CisgIGdzdF9vYmplY3Rfc2V0X25hbWUgKG9iamVjdCwgIm1haW4iKTsKKworICBNQUlOX1NUQVJUX1RIUkVBRFMgKDUsIHRocmVhZF9uYW1lX29iamVjdCwgb2JqZWN0KTsKKworICAvKiBzdGFydCBsb29waW5nIGFuZCBzZXQvZ2V0IG5hbWUgcmVwZWF0ZWRseSAqLworICBmb3IgKGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7CisgICAgR1NUX09CSkVDVF9MT0NLIChvYmplY3QpOworICAgIGdfZnJlZSAoR1NUX09CSkVDVF9OQU1FIChvYmplY3QpKTsKKyAgICBHU1RfT0JKRUNUX05BTUUgKG9iamVjdCkgPSBnX3N0cmR1cCAoIm1haW4iKTsKKyAgICBUSFJFQURfU1dJVENIICgpOworICAgIG5hbWUgPSBnX3N0cmR1cCAoR1NUX09CSkVDVF9OQU1FIChvYmplY3QpKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyAob2JqZWN0KTsKKworICAgIGZhaWxfdW5sZXNzIChzdHJjbXAgKG5hbWUsICJtYWluIikgPT0gMCwKKyAgICAgICAgIk5hbWUgZ290IGNoYW5nZWQgd2hpbGUgbG9jayBoZWxkIGR1cmluZyBydW4gJWQiLCBpKTsKKyAgICBnX2ZyZWUgKG5hbWUpOworICB9CisgIE1BSU5fU1RPUF9USFJFQURTICgpOworICBnc3Rfb2JqZWN0X3VucmVmIChvYmplY3QpOworfQorCitHU1RfRU5EX1RFU1Q7CisvKgorICogbWFpbiB0aHJlYWQgY3JlYXRlcyBsb3RzIG9mIG9iamVjdHMKKyAqIGNoaWxkIHRocmVhZHMgc2V0cyBkZWZhdWx0IG5hbWVzIG9uIG9iamVjdHMKKyAqIHRoZW4gbWFpbiB0aHJlYWQgY2hlY2tzIHVuaXF1ZW5lc3Mgb2Ygb2JqZWN0IG5hbWVzCisgKi8KKworc3RhdGljIEdMaXN0ICpvYmplY3RfbGlzdCA9IE5VTEw7CitzdGF0aWMgZ2ludCBudW1fb2JqZWN0cyA9IDEwMDA7CitzdGF0aWMgZ2ludCBudW1fdGhyZWFkcyA9IDU7CisKKy8qIHRocmVhZCBmdW5jdGlvbiBmb3IgdGhyZWFkZWQgZGVmYXVsdCBuYW1lIGNoYW5nZSB0ZXN0ICovCitzdGF0aWMgZ3BvaW50ZXIKK3RocmVhZF9uYW1lX29iamVjdF9kZWZhdWx0IChpbnQgKmkpCit7CisgIGludCBqOworCisgIFRIUkVBRF9TVEFSVCAoKTsKKworICBmb3IgKGogPSAqaTsgaiA8IG51bV9vYmplY3RzOyBqICs9IG51bV90aHJlYWRzKSB7CisgICAgR3N0T2JqZWN0ICpvID0gR1NUX09CSkVDVCAoZ19saXN0X250aF9kYXRhIChvYmplY3RfbGlzdCwgaikpOworCisgICAgLyogZ19tZXNzYWdlICgiVEhSRUFEICVwOiBzZXR0aW5nIGRlZmF1bHQgbmFtZSBvbiBvYmplY3QgJWRcbiIsCisgICAgICAgZ190aHJlYWRfc2VsZiAoKSwgaik7ICovCisgICAgZ3N0X29iamVjdF9zZXRfbmFtZSAobywgTlVMTCk7CisgICAgVEhSRUFEX1NXSVRDSCAoKTsKKyAgfQorCisgIC8qIHRocmVhZCBpcyBkb25lLCBzbyBsZXQncyByZXR1cm4gKi8KKyAgZ19tZXNzYWdlICgiVEhSRUFEICVwOiBzZXQgbmFtZVxuIiwgZ190aHJlYWRfc2VsZiAoKSk7CisgIGdfZnJlZSAoaSk7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBnaW50Citnc3Rfb2JqZWN0X25hbWVfY29tcGFyZSAoR3N0T2JqZWN0ICogbywgR3N0T2JqZWN0ICogcCkKK3sKKyAgZ2ludCByZXN1bHQ7CisKKyAgR1NUX09CSkVDVF9MT0NLIChvKTsKKyAgR1NUX09CSkVDVF9MT0NLIChwKTsKKworICBpZiAoby0+bmFtZSA9PSBOVUxMICYmIHAtPm5hbWUgPT0gTlVMTCkgeworICAgIHJlc3VsdCA9IDA7CisgIH0gZWxzZSBpZiAoby0+bmFtZSA9PSBOVUxMKSB7CisgICAgcmVzdWx0ID0gLTE7CisgIH0gZWxzZSBpZiAocC0+bmFtZSA9PSBOVUxMKSB7CisgICAgcmVzdWx0ID0gMTsKKyAgfSBlbHNlIHsKKyAgICByZXN1bHQgPSBzdHJjbXAgKG8tPm5hbWUsIHAtPm5hbWUpOworICB9CisKKyAgR1NUX09CSkVDVF9VTkxPQ0sgKHApOworICBHU1RfT0JKRUNUX1VOTE9DSyAobyk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfZmFrZV9vYmplY3RfbmFtZV90aHJlYWRlZF91bmlxdWUpCit7CisgIEdzdE9iamVjdCAqb2JqZWN0OworICBnaW50IGk7CisgIGdpbnQgKmlwOworICBnY2hhciAqbmFtZTEsICpuYW1lMjsKKyAgR0xpc3QgKmw7CisKKyAgZ19tZXNzYWdlICgiXG5URVNUOiB1bmlxdWVuZXNzIG9mIGRlZmF1bHQgbmFtZXNcbiIpOworCisgIGZvciAoaSA9IDA7IGkgPCBudW1fb2JqZWN0czsgKytpKSB7CisgICAgb2JqZWN0ID0gZ19vYmplY3RfbmV3IChnc3RfZmFrZV9vYmplY3RfZ2V0X3R5cGUgKCksIE5VTEwpOworICAgIG9iamVjdF9saXN0ID0gZ19saXN0X2FwcGVuZCAob2JqZWN0X2xpc3QsIG9iamVjdCk7CisgIH0KKworICBNQUlOX0lOSVQgKCk7CisKKyAgbWFya19wb2ludCAoKTsKKyAgZm9yIChpID0gMDsgaSA8IG51bV90aHJlYWRzOyArK2kpIHsKKyAgICBpcCA9IGdfbmV3IChnaW50LCAxKTsKKyAgICAqaXAgPSBpOworICAgIE1BSU5fU1RBUlRfVEhSRUFEX0ZVTkNUSU9OIChpLCB0aHJlYWRfbmFtZV9vYmplY3RfZGVmYXVsdCwgaXApOworICB9CisKKyAgbWFya19wb2ludCAoKTsKKyAgTUFJTl9TWU5DSFJPTklaRSAoKTsKKyAgbWFya19wb2ludCAoKTsKKyAgTUFJTl9TVE9QX1RIUkVBRFMgKCk7CisKKyAgLyogc29ydCBHTGlzdCBiYXNlZCBvbiBvYmplY3QgbmFtZSAqLworICAvKiBGSVhNRTogc29ydCBhbmQgdGVzdCAqLworICBvYmplY3RfbGlzdCA9CisgICAgICBnX2xpc3Rfc29ydCAob2JqZWN0X2xpc3QsIChHQ29tcGFyZUZ1bmMpIGdzdF9vYmplY3RfbmFtZV9jb21wYXJlKTsKKworICBuYW1lMSA9IGdzdF9vYmplY3RfZ2V0X25hbWUgKEdTVF9PQkpFQ1QgKG9iamVjdF9saXN0LT5kYXRhKSk7CisgIGZvciAobCA9IG9iamVjdF9saXN0LT5uZXh0OyBsLT5uZXh0OyBsID0gbC0+bmV4dCkgeworICAgIGdfbWVzc2FnZSAoIm9iamVjdCB3aXRoIG5hbWUgJXNcbiIsIG5hbWUxKTsKKyAgICBuYW1lMiA9IGdzdF9vYmplY3RfZ2V0X25hbWUgKEdTVF9PQkpFQ1QgKGwtPmRhdGEpKTsKKyAgICBmYWlsX2lmIChzdHJjbXAgKG5hbWUxLCBuYW1lMikgPT0gMCwgIlR3byBvYmplY3RzIHdpdGggbmFtZSAlcyIsIG5hbWUyKTsKKyAgICBnX2ZyZWUgKG5hbWUxKTsKKyAgICBuYW1lMSA9IG5hbWUyOworICB9CisgIGdfZnJlZSAobmFtZTEpOworCisgIC8qIGZyZWUgc3R1ZmYgKi8KKyAgZ19saXN0X2ZvcmVhY2ggKG9iamVjdF9saXN0LCAoR0Z1bmMpIGdfb2JqZWN0X3VucmVmLCBOVUxMKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiBwYXJlbnRhZ2UgdGVzdCBvbiBHc3RGYWtlT2JqZWN0ICovCitHU1RfU1RBUlRfVEVTVCAodGVzdF9mYWtlX29iamVjdF9wYXJlbnRhZ2UpCit7CisgIEdzdE9iamVjdCAqb2JqZWN0MSwgKm9iamVjdDI7CisgIEdzdE9iamVjdCAqcGFyZW50OworICBnYm9vbGVhbiByZXN1bHQ7CisKKyAgLyogY3JlYXRlIG5ldyBvYmplY3QgKi8KKyAgb2JqZWN0MSA9IGdfb2JqZWN0X25ldyAoZ3N0X2Zha2Vfb2JqZWN0X2dldF90eXBlICgpLCBOVUxMKTsKKyAgZmFpbF9pZiAob2JqZWN0MSA9PSBOVUxMLCAiRmFpbGVkIHRvIGNyZWF0ZSBpbnN0YW5jZSBvZiBHc3RGYWtlT2JqZWN0Iik7CisgIGZhaWxfdW5sZXNzIChHU1RfSVNfT0JKRUNUIChvYmplY3QxKSwKKyAgICAgICJHc3RGYWtlT2JqZWN0IGluc3RhbmNlIGlzIG5vdCBhIEdzdE9iamVjdCIpOworICBmYWlsX3VubGVzcyAoZ19vYmplY3RfaXNfZmxvYXRpbmcgKG9iamVjdDEpLAorICAgICAgIkdzdEZha2VPYmplY3QgaW5zdGFuY2UgaXMgbm90IGZsb2F0aW5nIik7CisKKyAgLyogY2hlY2sgdGhlIHBhcmVudCAqLworICBwYXJlbnQgPSBnc3Rfb2JqZWN0X2dldF9wYXJlbnQgKG9iamVjdDEpOworICBmYWlsX2lmIChwYXJlbnQgIT0gTlVMTCwgIkdzdEZha2VPYmplY3QgaGFzIHBhcmVudCIpOworICAvKiB0cnkgdG8gc2V0IGEgTlVMTCBwYXJlbnQsIHRoaXMgc2hvdWxkIGdpdmUgYSB3YXJuaW5nICovCisgIEFTU0VSVF9DUklUSUNBTCAocmVzdWx0ID0gZ3N0X29iamVjdF9zZXRfcGFyZW50IChvYmplY3QxLCBOVUxMKSk7CisgIGZhaWxfaWYgKHJlc3VsdCA9PSBUUlVFLCAiR3N0RmFrZU9iamVjdCBhY2NlcHRlZCBOVUxMIHBhcmVudCIpOworICAvKiB0cnkgdG8gc2V0IGl0c2VsZiBhcyBwYXJlbnQsIHdlIGV4cGVjdCBhIHdhcm5pbmcgaGVyZSAqLworICBBU1NFUlRfQ1JJVElDQUwgKHJlc3VsdCA9IGdzdF9vYmplY3Rfc2V0X3BhcmVudCAob2JqZWN0MSwgb2JqZWN0MSkpOworICBmYWlsX2lmIChyZXN1bHQgPT0gVFJVRSwgIkdzdEZha2VPYmplY3QgYWNjZXB0ZWQgaXRzZWxmIGFzIHBhcmVudCIpOworCisgIC8qIHNob3VsZCBzdGlsbCBiZSBmbG9hdGluZyAqLworICBmYWlsX3VubGVzcyAoZ19vYmplY3RfaXNfZmxvYXRpbmcgKG9iamVjdDEpLAorICAgICAgIkdzdEZha2VPYmplY3QgaW5zdGFuY2UgaXMgbm90IGZsb2F0aW5nIik7CisKKyAgLyogY3JlYXRlIGFub3RoZXIgb2JqZWN0ICovCisgIG9iamVjdDIgPSBnX29iamVjdF9uZXcgKGdzdF9mYWtlX29iamVjdF9nZXRfdHlwZSAoKSwgTlVMTCk7CisgIGZhaWxfaWYgKG9iamVjdDIgPT0gTlVMTCwKKyAgICAgICJGYWlsZWQgdG8gY3JlYXRlIGFub3RoZXIgaW5zdGFuY2Ugb2YgR3N0RmFrZU9iamVjdCIpOworICBmYWlsX3VubGVzcyAoR1NUX0lTX09CSkVDVCAob2JqZWN0MiksCisgICAgICAic2Vjb25kIEdzdEZha2VPYmplY3QgaW5zdGFuY2UgaXMgbm90IGEgR3N0T2JqZWN0Iik7CisgIGZhaWxfdW5sZXNzIChnX29iamVjdF9pc19mbG9hdGluZyAob2JqZWN0MSksCisgICAgICAiR3N0RmFrZU9iamVjdCBpbnN0YW5jZSBpcyBub3QgZmxvYXRpbmciKTsKKworICAvKiB0cnkgdG8gc2V0IG90aGVyIG9iamVjdCBhcyBwYXJlbnQgKi8KKyAgcmVzdWx0ID0gZ3N0X29iamVjdF9zZXRfcGFyZW50IChvYmplY3QxLCBvYmplY3QyKTsKKyAgZmFpbF9pZiAocmVzdWx0ID09IEZBTFNFLAorICAgICAgIkdzdEZha2VPYmplY3QgY291bGQgbm90IGFjY2VwdCBvdGhlciBvYmplY3QgYXMgcGFyZW50Iik7CisKKyAgLyogc2hvdWxkIG5vdCBiZSBmbG9hdGluZyBhbnltb3JlICovCisgIGZhaWxfaWYgKGdfb2JqZWN0X2lzX2Zsb2F0aW5nIChvYmplY3QxKSwKKyAgICAgICJHc3RGYWtlT2JqZWN0IGluc3RhbmNlIGlzIHN0aWxsIGZsb2F0aW5nIik7CisgIC8qIHBhcmVudCBzaG91bGQgc3RpbGwgYmUgZmxvYXRpbmcgKi8KKyAgZmFpbF91bmxlc3MgKGdfb2JqZWN0X2lzX2Zsb2F0aW5nIChvYmplY3QyKSwKKyAgICAgICJHc3RGYWtlT2JqZWN0IGluc3RhbmNlIGlzIG5vdCBmbG9hdGluZyIpOworCisgIC8qIGNoZWNrIHRoZSBwYXJlbnQgKi8KKyAgcGFyZW50ID0gZ3N0X29iamVjdF9nZXRfcGFyZW50IChvYmplY3QxKTsKKyAgZmFpbF9pZiAocGFyZW50ICE9IG9iamVjdDIsICJHc3RGYWtlT2JqZWN0IGhhcyB3cm9uZyBwYXJlbnQiKTsKKyAgZ3N0X29iamVjdF91bnJlZiAocGFyZW50KTsKKyAgLyogdHJ5IHRvIHNldCBvdGhlciBvYmplY3QgYXMgcGFyZW50IGFnYWluICovCisgIHJlc3VsdCA9IGdzdF9vYmplY3Rfc2V0X3BhcmVudCAob2JqZWN0MSwgb2JqZWN0Mik7CisgIGZhaWxfaWYgKHJlc3VsdCA9PSBUUlVFLCAiR3N0RmFrZU9iamVjdCBjb3VsZCBzZXQgcGFyZW50IHR3aWNlIik7CisKKyAgLyogcmVmIGJlZm9yZSB1bnBhcmVudGluZyAqLworICBnc3Rfb2JqZWN0X3JlZiAob2JqZWN0MSk7CisgIC8qIGNsZWFyIHBhcmVudCBvZiBvYmplY3QgKi8KKyAgZ3N0X29iamVjdF91bnBhcmVudCAob2JqZWN0MSk7CisKKyAgLyogY2hlY2sgdGhlIHBhcmVudCAqLworICBwYXJlbnQgPSBnc3Rfb2JqZWN0X2dldF9wYXJlbnQgKG9iamVjdDEpOworICBmYWlsX2lmIChwYXJlbnQgIT0gTlVMTCwgIkdzdEZha2VPYmplY3QgaGFzIHBhcmVudCIpOworCisgIC8qIG9iamVjdCBzaG91bGQgbm90IGJlIGZsb2F0aW5nICovCisgIGZhaWxfaWYgKGdfb2JqZWN0X2lzX2Zsb2F0aW5nIChvYmplY3QxKSwKKyAgICAgICJHc3RGYWtlT2JqZWN0IGluc3RhbmNlIGlzIGZsb2F0aW5nIGFnYWluIik7CisKKyAgZ3N0X29iamVjdF91bnJlZiAob2JqZWN0MSk7CisgIGdzdF9vYmplY3RfdW5yZWYgKG9iamVjdDIpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIHBhcmVudGFnZSB0ZXN0IGRpc3Bvc2Ugb24gR3N0RmFrZU9iamVjdCwgc2luY2Ugb3VyIHRlc3RjYXNlCisgKiBkb2VzIG5vdCBoYW5kbGUgdGhlIHBhcmVudCByZWxhdGlvbiBjb21wbGV0ZWx5LCB0aGUgcGFyZW50IGRvZXMKKyAqIG5vdCBob2xkIGEgcmVmIHRvIHRoZSBjaGlsZCwgd2UgY2Fubm90IGRpc3Bvc2UgdGhlIHBhcmVudCB0bworICogZGlwb3NlIHRoZSBjaGlsZCBhcyB3ZWxsLiBUaGlzIHRlc3QgbmVlZHMgdG8gYmUgcnVuIHdpdGggREVCVUcKKyAqIGluZm8gdG8gY2hlY2sgaWYgdGhlIGZpbmFsaXplIG1ldGhvZHMgYXJlIGNhbGxlZCBjb3JyZWN0bHkuICovCitHU1RfU1RBUlRfVEVTVCAodGVzdF9mYWtlX29iamVjdF9wYXJlbnRhZ2VfZGlzcG9zZSkKK3sKKyAgR3N0T2JqZWN0ICpvYmplY3QxLCAqb2JqZWN0MjsKKyAgZ2Jvb2xlYW4gcmVzdWx0OworCisgIG9iamVjdDEgPSBnX29iamVjdF9uZXcgKGdzdF9mYWtlX29iamVjdF9nZXRfdHlwZSAoKSwgTlVMTCk7CisgIGZhaWxfaWYgKG9iamVjdDEgPT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgaW5zdGFuY2Ugb2YgR3N0RmFrZU9iamVjdCIpOworCisgIG9iamVjdDIgPSBnX29iamVjdF9uZXcgKGdzdF9mYWtlX29iamVjdF9nZXRfdHlwZSAoKSwgTlVMTCk7CisgIGZhaWxfaWYgKG9iamVjdDIgPT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgaW5zdGFuY2Ugb2YgR3N0RmFrZU9iamVjdCIpOworCisgIC8qIHRyeSB0byBzZXQgb3RoZXIgb2JqZWN0IGFzIHBhcmVudCAqLworICByZXN1bHQgPSBnc3Rfb2JqZWN0X3NldF9wYXJlbnQgKG9iamVjdDEsIG9iamVjdDIpOworICBmYWlsX2lmIChyZXN1bHQgPT0gRkFMU0UsCisgICAgICAiR3N0RmFrZU9iamVjdCBjb3VsZCBub3QgYWNjZXB0IG90aGVyIG9iamVjdCBhcyBwYXJlbnQiKTsKKworICAvKiBjbGVhciBwYXJlbnQgb2Ygb2JqZWN0ICovCisgIGdzdF9vYmplY3RfdW5wYXJlbnQgKG9iamVjdDEpOworCisgIC8qIG5vdyBkaXNwb3NlIHBhcmVudCAqLworICBnc3Rfb2JqZWN0X3VucmVmIChvYmplY3QyKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9mYWtlX29iamVjdF9oYXNfYW5jZXN0b3IpCit7CisgIEdzdE9iamVjdCAqb2JqZWN0MSwgKm9iamVjdDIsICpvYmplY3QzLCAqb2JqZWN0NDsKKyAgZ2Jvb2xlYW4gcmVzdWx0OworCisgIG9iamVjdDEgPSBnX29iamVjdF9uZXcgKGdzdF9mYWtlX29iamVjdF9nZXRfdHlwZSAoKSwgTlVMTCk7CisgIGZhaWxfaWYgKG9iamVjdDEgPT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgaW5zdGFuY2Ugb2YgR3N0RmFrZU9iamVjdCIpOworCisgIG9iamVjdDIgPSBnX29iamVjdF9uZXcgKGdzdF9mYWtlX29iamVjdF9nZXRfdHlwZSAoKSwgTlVMTCk7CisgIGZhaWxfaWYgKG9iamVjdDIgPT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgaW5zdGFuY2Ugb2YgR3N0RmFrZU9iamVjdCIpOworCisgIG9iamVjdDMgPSBnX29iamVjdF9uZXcgKGdzdF9mYWtlX29iamVjdF9nZXRfdHlwZSAoKSwgTlVMTCk7CisgIGZhaWxfaWYgKG9iamVjdDMgPT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgaW5zdGFuY2Ugb2YgR3N0RmFrZU9iamVjdCIpOworCisgIG9iamVjdDQgPSBnX29iamVjdF9uZXcgKGdzdF9mYWtlX29iamVjdF9nZXRfdHlwZSAoKSwgTlVMTCk7CisgIGZhaWxfaWYgKG9iamVjdDQgPT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgaW5zdGFuY2Ugb2YgR3N0RmFrZU9iamVjdCIpOworCisgIC8qIHRyeSB0byBzZXQgb3RoZXIgb2JqZWN0IGFzIHBhcmVudCAqLworICByZXN1bHQgPSBnc3Rfb2JqZWN0X3NldF9wYXJlbnQgKG9iamVjdDEsIG9iamVjdDMpOworICBmYWlsX2lmIChyZXN1bHQgPT0gRkFMU0UsCisgICAgICAiR3N0RmFrZU9iamVjdCBjb3VsZCBub3QgYWNjZXB0IG90aGVyIG9iamVjdCBhcyBwYXJlbnQiKTsKKyAgcmVzdWx0ID0gZ3N0X29iamVjdF9zZXRfcGFyZW50IChvYmplY3QyLCBvYmplY3QzKTsKKyAgZmFpbF9pZiAocmVzdWx0ID09IEZBTFNFLAorICAgICAgIkdzdEZha2VPYmplY3QgY291bGQgbm90IGFjY2VwdCBvdGhlciBvYmplY3QgYXMgcGFyZW50Iik7CisgIHJlc3VsdCA9IGdzdF9vYmplY3Rfc2V0X3BhcmVudCAob2JqZWN0Mywgb2JqZWN0NCk7CisgIGZhaWxfaWYgKHJlc3VsdCA9PSBGQUxTRSwKKyAgICAgICJHc3RGYWtlT2JqZWN0IGNvdWxkIG5vdCBhY2NlcHQgb3RoZXIgb2JqZWN0IGFzIHBhcmVudCIpOworCisgIGZhaWxfdW5sZXNzIChnc3Rfb2JqZWN0X2hhc19hbmNlc3RvciAob2JqZWN0MSwgb2JqZWN0MSkpOworICBmYWlsX2lmIChnc3Rfb2JqZWN0X2hhc19hbmNlc3RvciAob2JqZWN0MSwgb2JqZWN0MikpOworICBmYWlsX3VubGVzcyAoZ3N0X29iamVjdF9oYXNfYW5jZXN0b3IgKG9iamVjdDEsIG9iamVjdDMpKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9vYmplY3RfaGFzX2FuY2VzdG9yIChvYmplY3QxLCBvYmplY3Q0KSk7CisgIGZhaWxfaWYgKGdzdF9vYmplY3RfaGFzX2FuY2VzdG9yIChvYmplY3QzLCBvYmplY3QxKSk7CisgIGZhaWxfaWYgKGdzdF9vYmplY3RfaGFzX2FuY2VzdG9yIChvYmplY3Q0LCBvYmplY3QxKSk7CisgIGZhaWxfdW5sZXNzIChnc3Rfb2JqZWN0X2hhc19hbmNlc3RvciAob2JqZWN0Mywgb2JqZWN0NCkpOworICBmYWlsX2lmIChnc3Rfb2JqZWN0X2hhc19hbmNlc3RvciAob2JqZWN0NCwgb2JqZWN0MykpOworICBmYWlsX3VubGVzcyAoZ3N0X29iamVjdF9oYXNfYW5jZXN0b3IgKG9iamVjdDQsIG9iamVjdDQpKTsKKworICAvKiB1bnBhcmVudCBldmVyeXRoaW5nICovCisgIGdzdF9vYmplY3RfdW5wYXJlbnQgKG9iamVjdDMpOworICBnc3Rfb2JqZWN0X3VucGFyZW50IChvYmplY3QyKTsKKyAgZ3N0X29iamVjdF91bnBhcmVudCAob2JqZWN0MSk7CisKKyAgLyogbm93IGRpc3Bvc2Ugb2JqZWN0cyAqLworICBnc3Rfb2JqZWN0X3VucmVmIChvYmplY3Q0KTsKK30KKworR1NUX0VORF9URVNUOworCisvKiB0ZXN0OiB0cnkgcmVuYW1pbmcgYSBwYXJlbnRlZCBvYmplY3QsIG1ha2Ugc3VyZSBpdCBmYWlscyAqLworCitzdGF0aWMgU3VpdGUgKgorZ3N0X29iamVjdF9zdWl0ZSAodm9pZCkKK3sKKyAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RPYmplY3QiKTsKKyAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOworCisgIC8qIHR1cm4gb2ZmIHRpbWVvdXQgKi8KKyAgdGNhc2Vfc2V0X3RpbWVvdXQgKHRjX2NoYWluLCA2MCk7CisKKyAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mYWtlX29iamVjdF9uZXcpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZmFrZV9vYmplY3RfbmFtZSk7CisjaWYgMAorICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZmFrZV9vYmplY3RfbmFtZV90aHJlYWRlZF93cm9uZyk7CisjZW5kaWYKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Zha2Vfb2JqZWN0X25hbWVfdGhyZWFkZWRfcmlnaHQpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZmFrZV9vYmplY3RfbmFtZV90aHJlYWRlZF91bmlxdWUpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZmFrZV9vYmplY3RfcGFyZW50YWdlKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Zha2Vfb2JqZWN0X3BhcmVudGFnZV9kaXNwb3NlKTsKKworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZmFrZV9vYmplY3RfaGFzX2FuY2VzdG9yKTsKKyAgLy90Y2FzZV9hZGRfY2hlY2tlZF9maXh0dXJlICh0Y19jaGFpbiwgc2V0dXAsIHRlYXJkb3duKTsKKworICAvKiBGSVhNRTogR0xpYiBzaG91bGRuJ3QgY3Jhc2ggaGVyZSwgYnV0IGlzc3VlIGEgd2FybmluZyBhbmQgcmV0dXJuIGEgTlVMTAorICAgKiBvYmplY3QsIG9yIGF0IGxlYXN0IGdfZXJyb3IoKSBhbmQgdGhlbiBhYm9ydCBwcm9wZXJseSAuLi4gKHRwbSkgKi8KKyNpZm5kZWYgSEFWRV9PU1gKKyAgLyogRGlzYWJsZWQgZm9yIE9TL1ggYmVjYXVzZSBhKSBpdCdzIGEgcHJldHR5IHNpbGx5IHRlc3QgYW55d2F5IGFuZAorICAgKiBiKSBkaWZmZXJlbnQgT1MvWCB2ZXJzaW9ucyByYWlzZSBkaWZmZXJlbnQgc2lnbmFscyBhbmQgaXQgaXNuJ3Qgd29ydGgKKyAgICogdGhlIGVmZm9ydCB0byB0cnkgYW5kIGRldGVjdCB3aGljaCBvbmUgc2hvdWxkIGJlIHByb2R1Y2luZyB3aGljaAorICAgKi8KKyAgLyogU0VHViB0ZXN0cyBnbyBsYXN0IHNvIHdlIGNhbiBkZWJ1ZyB0aGUgb3RoZXJzICovCisgIGlmIChnX2dldGVudiAoIkNLX0ZPUksiKSA9PSBOVUxMIHx8IHN0cmNtcCAoZ19nZXRlbnYgKCJDS19GT1JLIiksICJubyIpICE9IDApCisgICAgdGNhc2VfYWRkX3Rlc3RfcmFpc2Vfc2lnbmFsICh0Y19jaGFpbiwgdGVzdF9mYWlsX2Fic3RyYWN0X25ldywgU0lHU0VHVik7CisjZW5kaWYKKworICByZXR1cm4gczsKK30KKworR1NUX0NIRUNLX01BSU4gKGdzdF9vYmplY3QpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNzYzZTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmMKQEAgLTAsMCArMSwxMDEzIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgPDIwMDU+IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKyAqCisgKiBnc3RwYWQuYzogVW5pdCB0ZXN0IGZvciBHc3RQYWQKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2xpbmspCit7CisgIEdzdFBhZCAqc3JjLCAqc2luazsKKyAgR3N0UGFkVGVtcGxhdGUgKnNyY3Q7CisKKyAgR3N0UGFkTGlua1JldHVybiByZXQ7CisgIGdjaGFyICpuYW1lOworCisgIHNyYyA9IGdzdF9wYWRfbmV3ICgic291cmNlIiwgR1NUX1BBRF9TUkMpOworICBmYWlsX2lmIChzcmMgPT0gTlVMTCk7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNvdXJjZSBwYWQiLCAxKTsKKworICBuYW1lID0gZ3N0X3BhZF9nZXRfbmFtZSAoc3JjKTsKKyAgZmFpbF91bmxlc3MgKHN0cmNtcCAobmFtZSwgInNvdXJjZSIpID09IDApOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmMsICJzb3VyY2UgcGFkIiwgMSk7CisgIGdfZnJlZSAobmFtZSk7CisKKyAgc2luayA9IGdzdF9wYWRfbmV3ICgic2luayIsIEdTVF9QQURfU0lOSyk7CisgIGZhaWxfaWYgKHNpbmsgPT0gTlVMTCk7CisKKyAgLyogbGlua2luZyB3aXRob3V0IHRlbXBsYXRlcyBvciBjYXBzIHNob3VsZCBmYWlsICovCisgIHJldCA9IGdzdF9wYWRfbGluayAoc3JjLCBzaW5rKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjLCAic291cmNlIHBhZCIsIDEpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rLCAic2luayBwYWQiLCAxKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfUEFEX0xJTktfTk9GT1JNQVQpOworCisgIEFTU0VSVF9DUklUSUNBTCAoZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlIChOVUxMKSk7CisKKyAgc3JjdCA9IGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZSAoc3JjKTsKKyAgZmFpbF91bmxlc3MgKHNyY3QgPT0gTlVMTCk7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNvdXJjZSBwYWQiLCAxKTsKKworICAvKiBjbGVhbiB1cCAqLworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmMsICJzb3VyY2UgcGFkIiwgMSk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIHRocmVhZGVkIGxpbmsvdW5saW5rICovCisvKiB1c2UgZ2xvYmFscyAqLworc3RhdGljIEdzdFBhZCAqc3JjLCAqc2luazsKKworc3RhdGljIHZvaWQKK3RocmVhZF9saW5rX3VubGluayAoZ3BvaW50ZXIgZGF0YSkKK3sKKyAgVEhSRUFEX1NUQVJUICgpOworCisgIHdoaWxlIChUSFJFQURfVEVTVF9SVU5OSU5HICgpKSB7CisgICAgZ3N0X3BhZF9saW5rIChzcmMsIHNpbmspOworICAgIGdzdF9wYWRfdW5saW5rIChzcmMsIHNpbmspOworICAgIFRIUkVBRF9TV0lUQ0ggKCk7CisgIH0KK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfbGlua191bmxpbmtfdGhyZWFkZWQpCit7CisgIEdzdENhcHMgKmNhcHM7CisgIGludCBpOworCisgIHNyYyA9IGdzdF9wYWRfbmV3ICgic291cmNlIiwgR1NUX1BBRF9TUkMpOworICBmYWlsX2lmIChzcmMgPT0gTlVMTCk7CisgIHNpbmsgPSBnc3RfcGFkX25ldyAoInNpbmsiLCBHU1RfUEFEX1NJTkspOworICBmYWlsX2lmIChzaW5rID09IE5VTEwpOworCisgIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImZvby9iYXIiKTsKKyAgZ3N0X3BhZF9zZXRfY2FwcyAoc3JjLCBjYXBzKTsKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rLCBUUlVFKTsKKyAgZ3N0X3BhZF9zZXRfY2FwcyAoc2luaywgY2Fwcyk7CisgIEFTU0VSVF9DQVBTX1JFRkNPVU5UIChjYXBzLCAiY2FwcyIsIDMpOworCisgIE1BSU5fU1RBUlRfVEhSRUFEUyAoNSwgdGhyZWFkX2xpbmtfdW5saW5rLCBOVUxMKTsKKyAgZm9yIChpID0gMDsgaSA8IDEwMDA7ICsraSkgeworICAgIGdzdF9wYWRfaXNfbGlua2VkIChzcmMpOworICAgIGdzdF9wYWRfaXNfbGlua2VkIChzaW5rKTsKKyAgICBUSFJFQURfU1dJVENIICgpOworICB9CisgIE1BSU5fU1RPUF9USFJFQURTICgpOworCisgIEFTU0VSVF9DQVBTX1JFRkNPVU5UIChjYXBzLCAiY2FwcyIsIDMpOworICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7CisKKyAgQVNTRVJUX0NBUFNfUkVGQ09VTlQgKGNhcHMsICJjYXBzIiwgMik7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3JlZmNvdW50KQoreworICBHc3RQYWQgKnNyYywgKnNpbms7CisgIEdzdENhcHMgKmNhcHM7CisgIEdzdFBhZExpbmtSZXR1cm4gcGxyOworCisgIHNpbmsgPSBnc3RfcGFkX25ldyAoInNpbmsiLCBHU1RfUEFEX1NJTkspOworICBmYWlsX2lmIChzaW5rID09IE5VTEwpOworCisgIHNyYyA9IGdzdF9wYWRfbmV3ICgic3JjIiwgR1NUX1BBRF9TUkMpOworICBmYWlsX2lmIChzcmMgPT0gTlVMTCk7CisKKyAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiZm9vL2JhciIpOworICAvKiBvbmUgZm9yIG1lICovCisgIEFTU0VSVF9DQVBTX1JFRkNPVU5UIChjYXBzLCAiY2FwcyIsIDEpOworCisgIGZhaWxfdW5sZXNzIChnc3RfcGFkX3NldF9jYXBzIChzcmMsIGNhcHMpID09IFRSVUUpOworICAvKiBjYW4ndCBzZXQgY2FwcyBvbiBmbHVzaGluZyBzaW5rcGFkICovCisgIGZhaWxfaWYgKGdzdF9wYWRfc2V0X2NhcHMgKHNpbmssIGNhcHMpID09IFRSVUUpOworICAvKiBvbmUgZm9yIG1lIGFuZCBvbmUgZm9yIGVhY2ggc2V0X2NhcHMgKi8KKyAgQVNTRVJUX0NBUFNfUkVGQ09VTlQgKGNhcHMsICJjYXBzIiwgMyk7CisKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rLCBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wYWRfc2V0X2NhcHMgKHNpbmssIGNhcHMpID09IFRSVUUpOworICBBU1NFUlRfQ0FQU19SRUZDT1VOVCAoY2FwcywgImNhcHMiLCAzKTsKKworICBwbHIgPSBnc3RfcGFkX2xpbmsgKHNyYywgc2luayk7CisgIGZhaWxfdW5sZXNzIChHU1RfUEFEX0xJTktfU1VDQ0VTU0ZVTCAocGxyKSk7CisgIC8qIHNyYyBjYXBzIGFkZGVkIHRvIHBlbmRpbmcgY2FwcyBvbiBzaW5rICovCisgIEFTU0VSVF9DQVBTX1JFRkNPVU5UIChjYXBzLCAiY2FwcyIsIDMpOworCisgIGdzdF9wYWRfdW5saW5rIChzcmMsIHNpbmspOworICBBU1NFUlRfQ0FQU19SRUZDT1VOVCAoY2FwcywgImNhcHMiLCAzKTsKKworICAvKiBjbGVhbnVwICovCisgIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOworICBBU1NFUlRfQ0FQU19SRUZDT1VOVCAoY2FwcywgImNhcHMiLCAxKTsKKworICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfZ2V0X2FsbG93ZWRfY2FwcykKK3sKKyAgR3N0UGFkICpzcmMsICpzaW5rOworICBHc3RDYXBzICpjYXBzLCAqZ290Y2FwczsKKyAgR3N0QnVmZmVyICpidWZmZXI7CisgIEdzdFBhZExpbmtSZXR1cm4gcGxyOworCisgIEFTU0VSVF9DUklUSUNBTCAoZ3N0X3BhZF9nZXRfYWxsb3dlZF9jYXBzIChOVUxMKSk7CisKKyAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisgIEFTU0VSVF9DUklUSUNBTCAoZ3N0X3BhZF9nZXRfYWxsb3dlZF9jYXBzICgoR3N0UGFkICopIGJ1ZmZlcikpOworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworCisgIHNyYyA9IGdzdF9wYWRfbmV3ICgic3JjIiwgR1NUX1BBRF9TUkMpOworICBmYWlsX2lmIChzcmMgPT0gTlVMTCk7CisgIGNhcHMgPSBnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHMgKHNyYyk7CisgIGZhaWxfdW5sZXNzIChjYXBzID09IE5VTEwpOworCisgIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImZvby9iYXIiKTsKKworICBzaW5rID0gZ3N0X3BhZF9uZXcgKCJzaW5rIiwgR1NUX1BBRF9TSU5LKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wYWRfc2V0X2NhcHMgKHNyYywgY2FwcykgPT0gVFJVRSk7CisgIGZhaWxfaWYgKGdzdF9wYWRfc2V0X2NhcHMgKHNpbmssIGNhcHMpID09IFRSVUUpOworICBBU1NFUlRfQ0FQU19SRUZDT1VOVCAoY2FwcywgImNhcHMiLCAzKTsKKworICBnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmssIFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9zZXRfY2FwcyAoc2luaywgY2FwcykgPT0gVFJVRSk7CisgIEFTU0VSVF9DQVBTX1JFRkNPVU5UIChjYXBzLCAiY2FwcyIsIDMpOworCisgIHBsciA9IGdzdF9wYWRfbGluayAoc3JjLCBzaW5rKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9QQURfTElOS19TVUNDRVNTRlVMIChwbHIpKTsKKworICBnb3RjYXBzID0gZ3N0X3BhZF9nZXRfYWxsb3dlZF9jYXBzIChzcmMpOworICBmYWlsX2lmIChnb3RjYXBzID09IE5VTEwpOworI2lmIDAKKyAgLyogRklYTUUsIGRvZXMgbm90IHdvcmssIGNhcHMgZXZlbnRzIGFyZSBkaWZmZXJlbnQgc28gdGhlIHNpbmtwYWQgbG9zZXMgY2FwcworICAgKiB3aGVuIGxpbmtpbmcgKi8KKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChnb3RjYXBzLCBjYXBzKSk7CisjZW5kaWYKKworICBBU1NFUlRfQ0FQU19SRUZDT1VOVCAoZ290Y2FwcywgImdvdGNhcHMiLCAxKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGdvdGNhcHMpOworCisgIGdzdF9wYWRfdW5saW5rIChzcmMsIHNpbmspOworCisgIC8qIGNsZWFudXAgKi8KKyAgQVNTRVJUX0NBUFNfUkVGQ09VTlQgKGNhcHMsICJjYXBzIiwgMyk7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDEpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rLCAic2luayIsIDEpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOworCisgIEFTU0VSVF9DQVBTX1JFRkNPVU5UIChjYXBzLCAiY2FwcyIsIDEpOworICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIGdib29sZWFuCituYW1lX2lzX3ZhbGlkIChjb25zdCBnY2hhciAqIG5hbWUsIEdzdFBhZFByZXNlbmNlIHByZXNlbmNlKQoreworICBHc3RQYWRUZW1wbGF0ZSAqbmV3OworICBHc3RDYXBzICphbnkgPSBHU1RfQ0FQU19BTlk7CisKKyAgbmV3ID0gZ3N0X3BhZF90ZW1wbGF0ZV9uZXcgKG5hbWUsIEdTVF9QQURfU1JDLCBwcmVzZW5jZSwgYW55KTsKKyAgaWYgKG5ldykgeworICAgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKG5ldykpOworICAgIHJldHVybiBUUlVFOworICB9CisgIHJldHVybiBGQUxTRTsKK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfbmFtZV9pc192YWxpZCkKK3sKKyAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisKKyAgZmFpbF91bmxlc3MgKG5hbWVfaXNfdmFsaWQgKCJzcmMiLCBHU1RfUEFEX0FMV0FZUykpOworICBBU1NFUlRfV0FSTklORyAobmFtZV9pc192YWxpZCAoInNyYyUiLCBHU1RfUEFEX0FMV0FZUykpOworICBBU1NFUlRfV0FSTklORyAocmVzdWx0ID0gbmFtZV9pc192YWxpZCAoInNyYyVkIiwgR1NUX1BBRF9BTFdBWVMpKTsKKyAgZmFpbF9pZiAocmVzdWx0KTsKKworICBmYWlsX3VubGVzcyAobmFtZV9pc192YWxpZCAoInNyYyIsIEdTVF9QQURfUkVRVUVTVCkpOworICBBU1NFUlRfV0FSTklORyAobmFtZV9pc192YWxpZCAoInNyYyVzJXMiLCBHU1RfUEFEX1JFUVVFU1QpKTsKKyAgQVNTRVJUX1dBUk5JTkcgKG5hbWVfaXNfdmFsaWQgKCJzcmMlYyIsIEdTVF9QQURfUkVRVUVTVCkpOworICBBU1NFUlRfV0FSTklORyAobmFtZV9pc192YWxpZCAoInNyYyUiLCBHU1RfUEFEX1JFUVVFU1QpKTsKKyAgQVNTRVJUX1dBUk5JTkcgKG5hbWVfaXNfdmFsaWQgKCJzcmMlZHNyYyIsIEdTVF9QQURfUkVRVUVTVCkpOworCisgIGZhaWxfdW5sZXNzIChuYW1lX2lzX3ZhbGlkICgic3JjIiwgR1NUX1BBRF9TT01FVElNRVMpKTsKKyAgZmFpbF91bmxlc3MgKG5hbWVfaXNfdmFsaWQgKCJzcmMlYyIsIEdTVF9QQURfU09NRVRJTUVTKSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIEdzdFByb2JlUmV0dXJuCitfcHJvYmVfaGFuZGxlciAoR3N0UGFkICogcGFkLCBHc3RQcm9iZVR5cGUgdHlwZSwgR3N0QnVmZmVyICogYnVmZmVyLAorICAgIGdwb2ludGVyIHVzZXJkYXRhKQoreworICBnaW50IHJldCA9IEdQT0lOVEVSX1RPX0lOVCAodXNlcmRhdGEpOworCisgIGlmIChyZXQgPT0gMSkKKyAgICByZXR1cm4gR1NUX1BST0JFX09LOworCisgIHJldHVybiBHU1RfUFJPQkVfRFJPUDsKK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfcHVzaF91bmxpbmtlZCkKK3sKKyAgR3N0UGFkICpzcmM7CisgIEdzdENhcHMgKmNhcHM7CisgIEdzdEJ1ZmZlciAqYnVmZmVyOworICBndWxvbmcgaWQ7CisKKyAgc3JjID0gZ3N0X3BhZF9uZXcgKCJzcmMiLCBHU1RfUEFEX1NSQyk7CisgIGZhaWxfaWYgKHNyYyA9PSBOVUxMKTsKKyAgY2FwcyA9IGdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwcyAoc3JjKTsKKyAgZmFpbF91bmxlc3MgKGNhcHMgPT0gTlVMTCk7CisKKyAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiZm9vL2JhciIpOworCisgIGdzdF9wYWRfc2V0X2NhcHMgKHNyYywgY2Fwcyk7CisgIEFTU0VSVF9DQVBTX1JFRkNPVU5UIChjYXBzLCAiY2FwcyIsIDIpOworCisgIC8qIHB1c2hpbmcgb24gYW4gaW5hY3RpdmUgcGFkIHdpbGwgcmV0dXJuIHdyb25nIHN0YXRlICovCisgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOworICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAoc3JjLCBidWZmZXIpID09IEdTVF9GTE9XX1dST05HX1NUQVRFKTsKKyAgQVNTRVJUX01JTklfT0JKRUNUX1JFRkNPVU5UIChidWZmZXIsICJidWZmZXIiLCAxKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKworICBnc3RfcGFkX3NldF9hY3RpdmUgKHNyYywgVFJVRSk7CisKKyAgLyogcHVzaGluZyBvbiBhbiB1bmxpbmtlZCBwYWQgd2lsbCBkcm9wIHRoZSBidWZmZXIgKi8KKyAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisgIGdzdF9idWZmZXJfcmVmIChidWZmZXIpOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChzcmMsIGJ1ZmZlcikgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCk7CisgIEFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCAoYnVmZmVyLCAiYnVmZmVyIiwgMSk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7CisKKyAgLyogYWRkaW5nIGEgcHJvYmUgdGhhdCByZXR1cm5zIEZBTFNFIHdpbGwgZHJvcCB0aGUgYnVmZmVyIHdpdGhvdXQgdHJ5aW5nCisgICAqIHRvIGNoYWluICovCisgIGlkID0gZ3N0X3BhZF9hZGRfcHJvYmUgKHNyYywgR1NUX1BST0JFX1RZUEVfQlVGRkVSLAorICAgICAgKEdzdFBhZFByb2JlQ2FsbGJhY2spIF9wcm9iZV9oYW5kbGVyLCBHSU5UX1RPX1BPSU5URVIgKDApLCBOVUxMKTsKKyAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisgIGdzdF9idWZmZXJfcmVmIChidWZmZXIpOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChzcmMsIGJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOworICBBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQgKGJ1ZmZlciwgImJ1ZmZlciIsIDEpOworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworICBnc3RfcGFkX3JlbW92ZV9wcm9iZSAoc3JjLCBpZCk7CisKKyAgLyogYWRkaW5nIGEgcHJvYmUgdGhhdCByZXR1cm5zIFRSVUUgd2lsbCBzdGlsbCBjaGFpbiB0aGUgYnVmZmVyLAorICAgKiBhbmQgaGVuY2UgZHJvcCBiZWNhdXNlIHBhZCBpcyB1bmxpbmtlZCAqLworICBpZCA9IGdzdF9wYWRfYWRkX3Byb2JlIChzcmMsIEdTVF9QUk9CRV9UWVBFX0JVRkZFUiwKKyAgICAgIChHc3RQYWRQcm9iZUNhbGxiYWNrKSBfcHJvYmVfaGFuZGxlciwgR0lOVF9UT19QT0lOVEVSICgxKSwgTlVMTCk7CisgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOworICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAoc3JjLCBidWZmZXIpID09IEdTVF9GTE9XX05PVF9MSU5LRUQpOworICBBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQgKGJ1ZmZlciwgImJ1ZmZlciIsIDEpOworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworICBnc3RfcGFkX3JlbW92ZV9wcm9iZSAoc3JjLCBpZCk7CisKKworICAvKiBjbGVhbnVwICovCisgIEFTU0VSVF9DQVBTX1JFRkNPVU5UIChjYXBzLCAiY2FwcyIsIDIpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmMsICJzcmMiLCAxKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChzcmMpOworCisgIEFTU0VSVF9DQVBTX1JFRkNPVU5UIChjYXBzLCAiY2FwcyIsIDEpOworICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfcHVzaF9saW5rZWQpCit7CisgIEdzdFBhZCAqc3JjLCAqc2luazsKKyAgR3N0UGFkTGlua1JldHVybiBwbHI7CisgIEdzdENhcHMgKmNhcHM7CisgIEdzdEJ1ZmZlciAqYnVmZmVyOworICBndWxvbmcgaWQ7CisKKyAgLyogc2V0dXAgKi8KKyAgc2luayA9IGdzdF9wYWRfbmV3ICgic2luayIsIEdTVF9QQURfU0lOSyk7CisgIGZhaWxfaWYgKHNpbmsgPT0gTlVMTCk7CisgIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChzaW5rLCBnc3RfY2hlY2tfY2hhaW5fZnVuYyk7CisKKyAgc3JjID0gZ3N0X3BhZF9uZXcgKCJzcmMiLCBHU1RfUEFEX1NSQyk7CisgIGZhaWxfaWYgKHNyYyA9PSBOVUxMKTsKKworICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJmb28vYmFyIik7CisgIC8qIG9uZSBmb3IgbWUgKi8KKyAgQVNTRVJUX0NBUFNfUkVGQ09VTlQgKGNhcHMsICJjYXBzIiwgMSk7CisKKyAgZ3N0X3BhZF9zZXRfY2FwcyAoc3JjLCBjYXBzKTsKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rLCBUUlVFKTsKKyAgZ3N0X3BhZF9zZXRfY2FwcyAoc2luaywgY2Fwcyk7CisgIC8qIG9uZSBmb3IgbWUgYW5kIG9uZSBmb3IgZWFjaCBzZXRfY2FwcyAqLworICBBU1NFUlRfQ0FQU19SRUZDT1VOVCAoY2FwcywgImNhcHMiLCAzKTsKKworICBwbHIgPSBnc3RfcGFkX2xpbmsgKHNyYywgc2luayk7CisgIGZhaWxfdW5sZXNzIChHU1RfUEFEX0xJTktfU1VDQ0VTU0ZVTCAocGxyKSk7CisgIEFTU0VSVF9DQVBTX1JFRkNPVU5UIChjYXBzLCAiY2FwcyIsIDMpOworCisgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOworI2lmIDAKKyAgLyogRklYTUUsIG5ldyBwYWQgc2hvdWxkIGJlIGZsdXNoaW5nICovCisgIGdzdF9idWZmZXJfcmVmIChidWZmZXIpOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChzcmMsIGJ1ZmZlcikgPT0gR1NUX0ZMT1dfV1JPTkdfU1RBVEUpOworICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wYWRfY2hhaW4gKHNpbmssIGJ1ZmZlcikgPT0gR1NUX0ZMT1dfV1JPTkdfU1RBVEUpOworI2VuZGlmCisKKyAgLyogYWN0aXZhdGUgcGFkcyAqLworICBnc3RfcGFkX3NldF9hY3RpdmUgKHNyYywgVFJVRSk7CisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2luaywgVFJVRSk7CisKKyAgLyogdGVzdCAqLworICAvKiBwdXNoaW5nIG9uIGEgbGlua2VkIHBhZCB3aWxsIGRyb3AgdGhlIHJlZiB0byB0aGUgYnVmZmVyICovCisgIGdzdF9idWZmZXJfcmVmIChidWZmZXIpOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChzcmMsIGJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOworICBBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQgKGJ1ZmZlciwgImJ1ZmZlciIsIDIpOworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7CisgIGJ1ZmZlciA9IEdTVF9CVUZGRVIgKGJ1ZmZlcnMtPmRhdGEpOworICBBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQgKGJ1ZmZlciwgImJ1ZmZlciIsIDEpOworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworICBnX2xpc3RfZnJlZSAoYnVmZmVycyk7CisgIGJ1ZmZlcnMgPSBOVUxMOworCisgIC8qIGFkZGluZyBhIHByb2JlIHRoYXQgcmV0dXJucyBGQUxTRSB3aWxsIGRyb3AgdGhlIGJ1ZmZlciB3aXRob3V0IHRyeWluZworICAgKiB0byBjaGFpbiAqLworICBpZCA9IGdzdF9wYWRfYWRkX3Byb2JlIChzcmMsIEdTVF9QUk9CRV9UWVBFX0JVRkZFUiwKKyAgICAgIChHc3RQYWRQcm9iZUNhbGxiYWNrKSBfcHJvYmVfaGFuZGxlciwgR0lOVF9UT19QT0lOVEVSICgwKSwgTlVMTCk7CisgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOworICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAoc3JjLCBidWZmZXIpID09IEdTVF9GTE9XX09LKTsKKyAgQVNTRVJUX01JTklfT0JKRUNUX1JFRkNPVU5UIChidWZmZXIsICJidWZmZXIiLCAxKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKyAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKHNyYywgaWQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMCk7CisKKyAgLyogYWRkaW5nIGEgcHJvYmUgdGhhdCByZXR1cm5zIFRSVUUgd2lsbCBzdGlsbCBjaGFpbiB0aGUgYnVmZmVyICovCisgIGlkID0gZ3N0X3BhZF9hZGRfcHJvYmUgKHNyYywgR1NUX1BST0JFX1RZUEVfQlVGRkVSLAorICAgICAgKEdzdFBhZFByb2JlQ2FsbGJhY2spIF9wcm9iZV9oYW5kbGVyLCBHSU5UX1RPX1BPSU5URVIgKDEpLCBOVUxMKTsKKyAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisgIGdzdF9idWZmZXJfcmVmIChidWZmZXIpOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChzcmMsIGJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOworICBnc3RfcGFkX3JlbW92ZV9wcm9iZSAoc3JjLCBpZCk7CisKKyAgQVNTRVJUX01JTklfT0JKRUNUX1JFRkNPVU5UIChidWZmZXIsICJidWZmZXIiLCAyKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEpOworICBidWZmZXIgPSBHU1RfQlVGRkVSIChidWZmZXJzLT5kYXRhKTsKKyAgQVNTRVJUX01JTklfT0JKRUNUX1JFRkNPVU5UIChidWZmZXIsICJidWZmZXIiLCAxKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKyAgZ19saXN0X2ZyZWUgKGJ1ZmZlcnMpOworICBidWZmZXJzID0gTlVMTDsKKworICAvKiB0ZWFyZG93biAqLworICBnc3RfcGFkX3VubGluayAoc3JjLCBzaW5rKTsKKyAgQVNTRVJUX0NBUFNfUkVGQ09VTlQgKGNhcHMsICJjYXBzIiwgMik7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOworICBBU1NFUlRfQ0FQU19SRUZDT1VOVCAoY2FwcywgImNhcHMiLCAxKTsKKworICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIEdzdEJ1ZmZlciAqCitidWZmZXJfZnJvbV9zdHJpbmcgKGNvbnN0IGdjaGFyICogc3RyKQoreworICBndWludCBzaXplOworICBHc3RCdWZmZXIgKmJ1ZjsKKyAgZ3BvaW50ZXIgZGF0YTsKKworICBzaXplID0gc3RybGVuIChzdHIpOworICBidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHNpemUpOworCisgIGRhdGEgPSBnc3RfYnVmZmVyX21hcCAoYnVmLCBOVUxMLCBOVUxMLCBHU1RfTUFQX1dSSVRFKTsKKyAgbWVtY3B5IChkYXRhLCBzdHIsIHNpemUpOworICBnc3RfYnVmZmVyX3VubWFwIChidWYsIGRhdGEsIHNpemUpOworCisgIHJldHVybiBidWY7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorYnVmZmVyX2NvbXBhcmUgKEdzdEJ1ZmZlciAqIGJ1ZiwgY29uc3QgZ2NoYXIgKiBzdHIsIGdzaXplIHNpemUpCit7CisgIGdib29sZWFuIHJlczsKKyAgZ3BvaW50ZXIgZGF0YTsKKworICBkYXRhID0gZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgTlVMTCwgTlVMTCwgR1NUX01BUF9SRUFEKTsKKyAgcmVzID0gbWVtY21wIChkYXRhLCBzdHIsIHNpemUpID09IDA7CisgIEdTVF9ERUJVRyAoIiVzIDwtPiAlczogJWQiLCAoZ2NoYXIgKikgZGF0YSwgc3RyLCByZXMpOworICBnc3RfYnVmZmVyX3VubWFwIChidWYsIGRhdGEsIHNpemUpOworCisgIHJldHVybiByZXM7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3B1c2hfYnVmZmVyX2xpc3RfY29tcGF0KQoreworICBHc3RQYWQgKnNyYywgKnNpbms7CisgIEdzdFBhZExpbmtSZXR1cm4gcGxyOworICBHc3RDYXBzICpjYXBzOworICBHc3RCdWZmZXJMaXN0ICpsaXN0OworICBHc3RCdWZmZXIgKmJ1ZmZlcjsKKworICAvKiBzZXR1cCAqLworICBzaW5rID0gZ3N0X3BhZF9uZXcgKCJzaW5rIiwgR1NUX1BBRF9TSU5LKTsKKyAgZmFpbF9pZiAoc2luayA9PSBOVUxMKTsKKyAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHNpbmssIGdzdF9jaGVja19jaGFpbl9mdW5jKTsKKyAgLyogbGVhdmUgY2hhaW5saXN0ZnVuYyB1bnNldCAqLworCisgIHNyYyA9IGdzdF9wYWRfbmV3ICgic3JjIiwgR1NUX1BBRF9TUkMpOworICBmYWlsX2lmIChzcmMgPT0gTlVMTCk7CisKKyAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiZm9vL2JhciIpOworCisgIGdzdF9wYWRfc2V0X2NhcHMgKHNyYywgY2Fwcyk7CisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2luaywgVFJVRSk7CisgIGdzdF9wYWRfc2V0X2NhcHMgKHNpbmssIGNhcHMpOworCisgIHBsciA9IGdzdF9wYWRfbGluayAoc3JjLCBzaW5rKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9QQURfTElOS19TVUNDRVNTRlVMIChwbHIpKTsKKworICBsaXN0ID0gZ3N0X2J1ZmZlcl9saXN0X25ldyAoKTsKKworICAvKiBhY3RpdmF0ZSBwYWRzICovCisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjLCBUUlVFKTsKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rLCBUUlVFKTsKKworICAvKiB0ZXN0ICovCisgIC8qIGFkZGluZyB0byBhIGJ1ZmZlciBsaXN0IHdpbGwgZHJvcCB0aGUgcmVmIHRvIHRoZSBidWZmZXIgKi8KKyAgZ3N0X2J1ZmZlcl9saXN0X2FkZCAobGlzdCwgYnVmZmVyX2Zyb21fc3RyaW5nICgiTGlzdEdyb3VwIikpOworICBnc3RfYnVmZmVyX2xpc3RfYWRkIChsaXN0LCBidWZmZXJfZnJvbV9zdHJpbmcgKCJBbm90aGVyTGlzdEdyb3VwIikpOworCisgIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfbGlzdCAoc3JjLCBsaXN0KSA9PSBHU1RfRkxPV19PSyk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAyKTsKKyAgYnVmZmVyID0gR1NUX0JVRkZFUiAoYnVmZmVycy0+ZGF0YSk7CisgIEFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCAoYnVmZmVyLCAiYnVmZmVyIiwgMSk7CisgIGZhaWxfdW5sZXNzIChidWZmZXJfY29tcGFyZSAoYnVmZmVyLCAiTGlzdEdyb3VwIiwgOSkpOworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworICBidWZmZXJzID0gZ19saXN0X2RlbGV0ZV9saW5rIChidWZmZXJzLCBidWZmZXJzKTsKKyAgYnVmZmVyID0gR1NUX0JVRkZFUiAoYnVmZmVycy0+ZGF0YSk7CisgIEFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCAoYnVmZmVyLCAiYnVmZmVyIiwgMSk7CisgIGZhaWxfdW5sZXNzIChidWZmZXJfY29tcGFyZSAoYnVmZmVyLCAiQW5vdGhlckxpc3RHcm91cCIsIDE2KSk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7CisgIGJ1ZmZlcnMgPSBnX2xpc3RfZGVsZXRlX2xpbmsgKGJ1ZmZlcnMsIGJ1ZmZlcnMpOworICBmYWlsX3VubGVzcyAoYnVmZmVycyA9PSBOVUxMKTsKKworICAvKiB0ZWFyZG93biAqLworICBnc3RfcGFkX3VubGluayAoc3JjLCBzaW5rKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc3JjKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc2luayk7CisgIEFTU0VSVF9DQVBTX1JFRkNPVU5UIChjYXBzLCAiY2FwcyIsIDEpOworICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfZmxvd3JldHVybikKK3sKKyAgR3N0Rmxvd1JldHVybiByZXQ7CisgIEdRdWFyayBxdWFyazsKKworICAvKiB0ZXN0IHNvbWUgb2YgdGhlIG1hY3JvcyAqLworICByZXQgPSBHU1RfRkxPV19VTkVYUEVDVEVEOworICBmYWlsX2lmIChzdHJjbXAgKGdzdF9mbG93X2dldF9uYW1lIChyZXQpLCAidW5leHBlY3RlZCIpKTsKKyAgcXVhcmsgPSBnc3RfZmxvd190b19xdWFyayAocmV0KTsKKyAgZmFpbF9pZiAoc3RyY21wIChnX3F1YXJrX3RvX3N0cmluZyAocXVhcmspLCAidW5leHBlY3RlZCIpKTsKKworICByZXQgPSBHU1RfRkxPV19SRVNFTkQ7CisgIGZhaWxfaWYgKHN0cmNtcCAoZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCksICJyZXNlbmQiKSk7CisgIHF1YXJrID0gZ3N0X2Zsb3dfdG9fcXVhcmsgKHJldCk7CisgIGZhaWxfaWYgKHN0cmNtcCAoZ19xdWFya190b19zdHJpbmcgKHF1YXJrKSwgInJlc2VuZCIpKTsKKworICAvKiBjdXN0b20gcmV0dXJucyAqLworICByZXQgPSBHU1RfRkxPV19DVVNUT01fU1VDQ0VTUzsKKyAgZmFpbF9pZiAoc3RyY21wIChnc3RfZmxvd19nZXRfbmFtZSAocmV0KSwgImN1c3RvbS1zdWNjZXNzIikpOworICBxdWFyayA9IGdzdF9mbG93X3RvX3F1YXJrIChyZXQpOworICBmYWlsX2lmIChzdHJjbXAgKGdfcXVhcmtfdG9fc3RyaW5nIChxdWFyayksICJjdXN0b20tc3VjY2VzcyIpKTsKKworICByZXQgPSBHU1RfRkxPV19DVVNUT01fRVJST1I7CisgIGZhaWxfaWYgKHN0cmNtcCAoZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCksICJjdXN0b20tZXJyb3IiKSk7CisgIHF1YXJrID0gZ3N0X2Zsb3dfdG9fcXVhcmsgKHJldCk7CisgIGZhaWxfaWYgKHN0cmNtcCAoZ19xdWFya190b19zdHJpbmcgKHF1YXJrKSwgImN1c3RvbS1lcnJvciIpKTsKKworICAvKiBjdXN0b20gcmV0dXJucyBjbGFtcGluZyAqLworICByZXQgPSBHU1RfRkxPV19DVVNUT01fU1VDQ0VTUyArIDI7CisgIGZhaWxfaWYgKHN0cmNtcCAoZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCksICJjdXN0b20tc3VjY2VzcyIpKTsKKyAgcXVhcmsgPSBnc3RfZmxvd190b19xdWFyayAocmV0KTsKKyAgZmFpbF9pZiAoc3RyY21wIChnX3F1YXJrX3RvX3N0cmluZyAocXVhcmspLCAiY3VzdG9tLXN1Y2Nlc3MiKSk7CisKKyAgcmV0ID0gR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SIC0gMjsKKyAgZmFpbF9pZiAoc3RyY21wIChnc3RfZmxvd19nZXRfbmFtZSAocmV0KSwgImN1c3RvbS1lcnJvciIpKTsKKyAgcXVhcmsgPSBnc3RfZmxvd190b19xdWFyayAocmV0KTsKKyAgZmFpbF9pZiAoc3RyY21wIChnX3F1YXJrX3RvX3N0cmluZyAocXVhcmspLCAiY3VzdG9tLWVycm9yIikpOworCisgIC8qIHVua25vd24gdmFsdWVzICovCisgIHJldCA9IEdTVF9GTE9XX0NVU1RPTV9FUlJPUiArIDI7CisgIGZhaWxfaWYgKHN0cmNtcCAoZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCksICJ1bmtub3duIikpOworICBxdWFyayA9IGdzdF9mbG93X3RvX3F1YXJrIChyZXQpOworICBmYWlsX3VubGVzcyAocXVhcmsgPT0gMCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfcHVzaF9uZWdvdGlhdGlvbikKK3sKKyAgR3N0UGFkICpzcmMsICpzaW5rOworICBHc3RQYWRMaW5rUmV0dXJuIHBscjsKKyAgR3N0Q2FwcyAqc3JjY2FwcyA9CisgICAgICBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LWludCx3aWR0aD17MTYsMzJ9LGRlcHRoPXsxNiwzMn0iKTsKKyAgR3N0Q2FwcyAqc2lua2NhcHMgPQorICAgICAgZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdy1pbnQsd2lkdGg9MzIsZGVwdGg9ezE2LDMyfSIpOworICBHc3RQYWRUZW1wbGF0ZSAqc3JjX3RlbXBsYXRlOworICBHc3RQYWRUZW1wbGF0ZSAqc2lua190ZW1wbGF0ZTsKKyAgR3N0Q2FwcyAqY2FwczsKKworICAvKiBzZXR1cCAqLworICBzcmNfdGVtcGxhdGUgPSBnc3RfcGFkX3RlbXBsYXRlX25ldyAoInNyYyIsIEdTVF9QQURfU1JDLAorICAgICAgR1NUX1BBRF9BTFdBWVMsIHNyY2NhcHMpOworICBzaW5rX3RlbXBsYXRlID0gZ3N0X3BhZF90ZW1wbGF0ZV9uZXcgKCJzaW5rIiwgR1NUX1BBRF9TSU5LLAorICAgICAgR1NUX1BBRF9BTFdBWVMsIHNpbmtjYXBzKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOworICBnc3RfY2Fwc191bnJlZiAoc2lua2NhcHMpOworCisgIHNpbmsgPSBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlIChzaW5rX3RlbXBsYXRlLCAic2luayIpOworICBmYWlsX2lmIChzaW5rID09IE5VTEwpOworICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoc2luaywgZ3N0X2NoZWNrX2NoYWluX2Z1bmMpOworCisgIHNyYyA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHNyY190ZW1wbGF0ZSwgInNyYyIpOworICBmYWlsX2lmIChzcmMgPT0gTlVMTCk7CisKKyAgcGxyID0gZ3N0X3BhZF9saW5rIChzcmMsIHNpbmspOworICBmYWlsX3VubGVzcyAoR1NUX1BBRF9MSU5LX1NVQ0NFU1NGVUwgKHBscikpOworCisgIC8qIGFjdGl2YXRlIHBhZHMgKi8KKyAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzcmMsIFRSVUUpOworICBnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmssIFRSVUUpOworCisgIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LWludCx3aWR0aD0xNixkZXB0aD0xNiIpOworCisgIC8qIFNob3VsZCBmYWlsIGlmIHNyYyBwYWQgY2FwcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggc2luayBwYWQgY2FwcyAqLworICBnc3RfcGFkX3NldF9jYXBzIChzcmMsIGNhcHMpOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9zZXRfY2FwcyAoc2luaywgY2FwcykgPT0gRkFMU0UpOworCisgIC8qIHRlYXJkb3duICovCisgIGdzdF9wYWRfdW5saW5rIChzcmMsIHNpbmspOworICBnc3Rfb2JqZWN0X3VucmVmIChzcmMpOworICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOworICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rX3RlbXBsYXRlKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc3JjX3RlbXBsYXRlKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiBzZWUgdGhhdCBhbiB1bnJlZiBhbHNvIHVubGlua3MgdGhlIHBhZHMgKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X3NyY191bnJlZl91bmxpbmspCit7CisgIEdzdFBhZCAqc3JjLCAqc2luazsKKyAgR3N0Q2FwcyAqY2FwczsKKyAgR3N0UGFkTGlua1JldHVybiBwbHI7CisKKyAgc2luayA9IGdzdF9wYWRfbmV3ICgic2luayIsIEdTVF9QQURfU0lOSyk7CisgIGZhaWxfaWYgKHNpbmsgPT0gTlVMTCk7CisKKyAgc3JjID0gZ3N0X3BhZF9uZXcgKCJzcmMiLCBHU1RfUEFEX1NSQyk7CisgIGZhaWxfaWYgKHNyYyA9PSBOVUxMKTsKKworICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJmb28vYmFyIik7CisKKyAgZ3N0X3BhZF9zZXRfY2FwcyAoc3JjLCBjYXBzKTsKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rLCBUUlVFKTsKKyAgZ3N0X3BhZF9zZXRfY2FwcyAoc2luaywgY2Fwcyk7CisKKyAgcGxyID0gZ3N0X3BhZF9saW5rIChzcmMsIHNpbmspOworICBmYWlsX3VubGVzcyAoR1NUX1BBRF9MSU5LX1NVQ0NFU1NGVUwgKHBscikpOworCisgIC8qIHVucmVmIHRoZSBzcmNwYWQgKi8KKyAgZ3N0X29iamVjdF91bnJlZiAoc3JjKTsKKworICAvKiBzaW5rIHNob3VsZCBiZSB1bmxpbmtlZCBub3cgKi8KKyAgZmFpbF9pZiAoZ3N0X3BhZF9pc19saW5rZWQgKHNpbmspKTsKKworICAvKiBjbGVhbnVwICovCisgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOworICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogc2VlIHRoYXQgYW4gdW5yZWYgYWxzbyB1bmxpbmtzIHRoZSBwYWRzICovCitHU1RfU1RBUlRfVEVTVCAodGVzdF9zaW5rX3VucmVmX3VubGluaykKK3sKKyAgR3N0UGFkICpzcmMsICpzaW5rOworICBHc3RDYXBzICpjYXBzOworICBHc3RQYWRMaW5rUmV0dXJuIHBscjsKKworICBzaW5rID0gZ3N0X3BhZF9uZXcgKCJzaW5rIiwgR1NUX1BBRF9TSU5LKTsKKyAgZmFpbF9pZiAoc2luayA9PSBOVUxMKTsKKworICBzcmMgPSBnc3RfcGFkX25ldyAoInNyYyIsIEdTVF9QQURfU1JDKTsKKyAgZmFpbF9pZiAoc3JjID09IE5VTEwpOworCisgIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImZvby9iYXIiKTsKKworICBnc3RfcGFkX3NldF9jYXBzIChzcmMsIGNhcHMpOworICBnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmssIFRSVUUpOworICBnc3RfcGFkX3NldF9jYXBzIChzaW5rLCBjYXBzKTsKKworICBwbHIgPSBnc3RfcGFkX2xpbmsgKHNyYywgc2luayk7CisgIGZhaWxfdW5sZXNzIChHU1RfUEFEX0xJTktfU1VDQ0VTU0ZVTCAocGxyKSk7CisKKyAgLyogdW5yZWYgdGhlIHNpbmtwYWQgKi8KKyAgZ3N0X29iamVjdF91bnJlZiAoc2luayk7CisKKyAgLyogc3JjIHNob3VsZCBiZSB1bmxpbmtlZCBub3cgKi8KKyAgZmFpbF9pZiAoZ3N0X3BhZF9pc19saW5rZWQgKHNyYykpOworCisgIC8qIGNsZWFudXAgKi8KKyAgZ3N0X29iamVjdF91bnJlZiAoc3JjKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBndWxvbmcgaWQ7CisKK3N0YXRpYyBHc3RQcm9iZVJldHVybgorYmxvY2tfYXN5bmNfY2IgKEdzdFBhZCAqIHBhZCwgR3N0UHJvYmVUeXBlIHR5cGUsIGdwb2ludGVyIHR5cGVfZGF0YSwKKyAgICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIGdib29sZWFuICpib29sX3VzZXJfZGF0YSA9IChnYm9vbGVhbiAqKSB1c2VyX2RhdGE7CisKKyAgZmFpbF91bmxlc3MgKCh0eXBlICYgR1NUX1BST0JFX1RZUEVfQkxPQ0spICE9IDApOworCisgIC8qIGhlcmUgd2Ugc2hvdWxkIGhhdmUgYmxvY2tlZCA9PSAwIHVuYmxvY2tlZCA9PSAwICovCisgIGZhaWxfdW5sZXNzIChib29sX3VzZXJfZGF0YVswXSA9PSBGQUxTRSk7CisgIGZhaWxfdW5sZXNzIChib29sX3VzZXJfZGF0YVsxXSA9PSBGQUxTRSk7CisKKyAgYm9vbF91c2VyX2RhdGFbMF0gPSBUUlVFOworCisgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChwYWQsIGlkKTsKKyAgYm9vbF91c2VyX2RhdGFbMV0gPSBUUlVFOworCisgIHJldHVybiBHU1RfUFJPQkVfT0s7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2Jsb2NrX2FzeW5jKQoreworICBHc3RQYWQgKnBhZDsKKyAgLyogd2Ugc2V0IGRhdGFbMF0gPSBUUlVFIHdoZW4gdGhlIHBhZCBpcyBibG9ja2VkLCBkYXRhWzFdID0gVFJVRSB3aGVuIGl0J3MKKyAgICogdW5ibG9ja2VkICovCisgIGdib29sZWFuIGRhdGFbMl0gPSB7IEZBTFNFLCBGQUxTRSB9OworCisgIHBhZCA9IGdzdF9wYWRfbmV3ICgic3JjIiwgR1NUX1BBRF9TUkMpOworICBmYWlsX3VubGVzcyAocGFkICE9IE5VTEwpOworCisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAocGFkLCBUUlVFKTsKKyAgaWQgPSBnc3RfcGFkX2FkZF9wcm9iZSAocGFkLCBHU1RfUFJPQkVfVFlQRV9CTE9DSywgYmxvY2tfYXN5bmNfY2IsICZkYXRhLAorICAgICAgTlVMTCk7CisKKyAgZmFpbF91bmxlc3MgKGRhdGFbMF0gPT0gRkFMU0UpOworICBmYWlsX3VubGVzcyAoZGF0YVsxXSA9PSBGQUxTRSk7CisgIGdzdF9wYWRfcHVzaCAocGFkLCBnc3RfYnVmZmVyX25ldyAoKSk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKK30KKworR1NUX0VORF9URVNUOworCisjaWYgMAorc3RhdGljIHZvaWQKK2Jsb2NrX2FzeW5jX3NlY29uZCAoR3N0UGFkICogcGFkLCBnYm9vbGVhbiBibG9ja2VkLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIGdzdF9wYWRfc2V0X2Jsb2NrZWQgKHBhZCwgRkFMU0UsIHVuYmxvY2tfYXN5bmNfY2IsIE5VTEwsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZAorYmxvY2tfYXN5bmNfZmlyc3QgKEdzdFBhZCAqIHBhZCwgZ2Jvb2xlYW4gYmxvY2tlZCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBzdGF0aWMgaW50IG5fY2FsbHMgPSAwOworICBnYm9vbGVhbiAqYm9vbF91c2VyX2RhdGEgPSAoZ2Jvb2xlYW4gKikgdXNlcl9kYXRhOworCisgIGlmICgrK25fY2FsbHMgPiAxKQorICAgIC8qIHdlIGV4cGVjdCB0aGlzIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBvbmx5IG9uY2UgKi8KKyAgICBnX3dhcm5faWZfcmVhY2hlZCAoKTsKKworICAqYm9vbF91c2VyX2RhdGEgPSBibG9ja2VkOworCisgIC8qIHJlcGxhY2UgYmxvY2tfYXN5bmNfZmlyc3Qgd2l0aCBibG9ja19hc3luY19zZWNvbmQgc28gbmV4dCB0aW1lIHRoZSBwYWQgaXMKKyAgICogYmxvY2tlZCB0aGUgbGF0dGVyIHNob3VsZCBiZSBjYWxsZWQgKi8KKyAgZ3N0X3BhZF9zZXRfYmxvY2tlZCAocGFkLCBUUlVFLCBibG9ja19hc3luY19zZWNvbmQsIE5VTEwsIE5VTEwpOworCisgIC8qIHVuYmxvY2sgdGVtcG9yYXJpbHksIGluIHRoZSBuZXh0IHB1c2ggYmxvY2tfYXN5bmNfc2Vjb25kIHNob3VsZCBiZSBjYWxsZWQKKyAgICovCisgIGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0ICgpKTsKK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfYmxvY2tfYXN5bmNfcmVwbGFjZV9jYWxsYmFjaykKK3sKKyAgR3N0UGFkICpwYWQ7CisgIGdib29sZWFuIGJsb2NrZWQ7CisKKyAgcGFkID0gZ3N0X3BhZF9uZXcgKCJzcmMiLCBHU1RfUEFEX1NSQyk7CisgIGZhaWxfdW5sZXNzIChwYWQgIT0gTlVMTCk7CisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAocGFkLCBUUlVFKTsKKworICBnc3RfcGFkX3NldF9ibG9ja2VkIChwYWQsIFRSVUUsIGJsb2NrX2FzeW5jX2ZpcnN0LCAmYmxvY2tlZCwgTlVMTCk7CisgIGJsb2NrZWQgPSBGQUxTRTsKKworICBnc3RfcGFkX3B1c2ggKHBhZCwgZ3N0X2J1ZmZlcl9uZXcgKCkpOworICBmYWlsX3VubGVzcyAoYmxvY2tlZCA9PSBUUlVFKTsKKyAgLyogYmxvY2tfYXN5bmNfZmlyc3QgZmx1c2hlcyB0byB1bmJsb2NrICovCisgIGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AgKCkpOworCisgIC8qIHB1c2ggYWdhaW4sIHRoaXMgdGltZSBibG9ja19hc3luY19zZWNvbmQgc2hvdWxkIGJlIGNhbGxlZCAqLworICBnc3RfcGFkX3B1c2ggKHBhZCwgZ3N0X2J1ZmZlcl9uZXcgKCkpOworICBmYWlsX3VubGVzcyAoYmxvY2tlZCA9PSBUUlVFKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOworfQorCitHU1RfRU5EX1RFU1Q7CisjZW5kaWYKKworc3RhdGljIHZvaWQKK2Jsb2NrX2FzeW5jX2Z1bGxfZGVzdHJveSAoZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBnaW50ICpzdGF0ZSA9IChnaW50ICopIHVzZXJfZGF0YTsKKworICBmYWlsX3VubGVzcyAoKnN0YXRlIDwgMik7CisKKyAgR1NUX0RFQlVHICgic2V0dGluZyBzdGF0ZSB0byAyIik7CisgICpzdGF0ZSA9IDI7Cit9CisKK3N0YXRpYyBHc3RQcm9iZVJldHVybgorYmxvY2tfYXN5bmNfZnVsbF9jYiAoR3N0UGFkICogcGFkLCBHc3RQcm9iZVR5cGUgdHlwZSwgZ3BvaW50ZXIgdHlwZV9kYXRhLAorICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgKihnaW50ICopIHVzZXJfZGF0YSA9IChnaW50KSBUUlVFOworCisgIGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0ICgpKTsKKyAgR1NUX0RFQlVHICgic2V0dGluZyBzdGF0ZSB0byAxIik7CisKKyAgcmV0dXJuIEdTVF9QUk9CRV9PSzsKK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfYmxvY2tfYXN5bmNfZnVsbF9kZXN0cm95KQoreworICBHc3RQYWQgKnBhZDsKKyAgLyogMCA9IHVuYmxvY2tlZCwgMSA9IGJsb2NrZWQsIDIgPSBkZXN0cm95ZWQgKi8KKyAgZ2ludCBzdGF0ZSA9IDA7CisgIGd1bG9uZyBpZDsKKworICBwYWQgPSBnc3RfcGFkX25ldyAoInNyYyIsIEdTVF9QQURfU1JDKTsKKyAgZmFpbF91bmxlc3MgKHBhZCAhPSBOVUxMKTsKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlIChwYWQsIFRSVUUpOworCisgIGlkID0gZ3N0X3BhZF9hZGRfcHJvYmUgKHBhZCwgR1NUX1BST0JFX1RZUEVfQkxPQ0ssIGJsb2NrX2FzeW5jX2Z1bGxfY2IsCisgICAgICAmc3RhdGUsIGJsb2NrX2FzeW5jX2Z1bGxfZGVzdHJveSk7CisgIGZhaWxfdW5sZXNzIChzdGF0ZSA9PSAwKTsKKworICBnc3RfcGFkX3B1c2ggKHBhZCwgZ3N0X2J1ZmZlcl9uZXcgKCkpOworICAvKiBibG9ja19hc3luY19mdWxsX2NiIHNldHMgc3RhdGUgdG8gMSBhbmQgdGhlbiBmbHVzaGVzIHRvIHVuYmxvY2sgdGVtcG9yYXJpbHkKKyAgICovCisgIGZhaWxfdW5sZXNzIChzdGF0ZSA9PSAxKTsKKyAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoVFJVRSkpOworCisgIC8qIHVuYmxvY2sgY2FsbGJhY2sgaXMgY2FsbGVkICovCisgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChwYWQsIGlkKTsKKyAgZmFpbF91bmxlc3MgKHN0YXRlID09IDIpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfYmxvY2tfYXN5bmNfZnVsbF9kZXN0cm95X2Rpc3Bvc2UpCit7CisgIEdzdFBhZCAqcGFkOworICAvKiAwID0gdW5ibG9ja2VkLCAxID0gYmxvY2tlZCwgMiA9IGRlc3Ryb3llZCAqLworICBnaW50IHN0YXRlID0gMDsKKworICBwYWQgPSBnc3RfcGFkX25ldyAoInNyYyIsIEdTVF9QQURfU1JDKTsKKyAgZmFpbF91bmxlc3MgKHBhZCAhPSBOVUxMKTsKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlIChwYWQsIFRSVUUpOworCisgICh2b2lkKSBnc3RfcGFkX2FkZF9wcm9iZSAocGFkLCBHU1RfUFJPQkVfVFlQRV9CTE9DSywgYmxvY2tfYXN5bmNfZnVsbF9jYiwKKyAgICAgICZzdGF0ZSwgYmxvY2tfYXN5bmNfZnVsbF9kZXN0cm95KTsKKworICBnc3RfcGFkX3B1c2ggKHBhZCwgZ3N0X2J1ZmZlcl9uZXcgKCkpOworICAvKiBibG9ja19hc3luY19mdWxsX2NiIHNldHMgc3RhdGUgdG8gMSBhbmQgdGhlbiBmbHVzaGVzIHRvIHVuYmxvY2sgdGVtcG9yYXJpbHkKKyAgICovCisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHN0YXRlLCAxKTsKKyAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoVFJVRSkpOworCisgIC8qIGdzdF9CTE9DSyBjYWxscyB0aGUgZGVzdHJveV9ub3RpZnkgZnVuY3Rpb24gaWYgbmVjZXNzYXJ5ICovCisgIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7CisKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoc3RhdGUsIDIpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKworI2lmIDAKK3N0YXRpYyB2b2lkCit1bmJsb2NrX2FzeW5jX25vX2ZsdXNoX2NiIChHc3RQYWQgKiBwYWQsIGdib29sZWFuIGJsb2NrZWQsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgZ2Jvb2xlYW4gKmJvb2xfdXNlcl9kYXRhID0gKGdib29sZWFuICopIHVzZXJfZGF0YTsKKworICAvKiBoZXJlIHdlIHNob3VsZCBoYXZlIGJsb2NrZWQgPT0gMSB1bmJsb2NrZWQgPT0gMCAqLworCisgIGZhaWxfdW5sZXNzIChibG9ja2VkID09IEZBTFNFKTsKKworICBmYWlsX3VubGVzcyAoYm9vbF91c2VyX2RhdGFbMF0gPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChib29sX3VzZXJfZGF0YVsxXSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGJvb2xfdXNlcl9kYXRhWzJdID09IEZBTFNFKTsKKworICBib29sX3VzZXJfZGF0YVsyXSA9IFRSVUU7Cit9CisjZW5kaWYKKworCisjaWYgMAorc3RhdGljIHZvaWQKK3VuYmxvY2tfYXN5bmNfbm90X2NhbGxlZCAoR3N0UGFkICogcGFkLCBnYm9vbGVhbiBibG9ja2VkLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIGdfd2Fybl9pZl9yZWFjaGVkICgpOworfQorI2VuZGlmCisKK3N0YXRpYyBHc3RQcm9iZVJldHVybgorYmxvY2tfYXN5bmNfc2Vjb25kX25vX2ZsdXNoIChHc3RQYWQgKiBwYWQsIEdzdFByb2JlVHlwZSB0eXBlLAorICAgIGdwb2ludGVyIHR5cGVfZGF0YSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBnYm9vbGVhbiAqYm9vbF91c2VyX2RhdGEgPSAoZ2Jvb2xlYW4gKikgdXNlcl9kYXRhOworCisgIEdTVF9ERUJVRyAoInNlY29uZCBwcm9iZSBjYWxsZWQiKTsKKworICBmYWlsX3VubGVzcyAodHlwZSAmIEdTVF9QUk9CRV9UWVBFX0JMT0NLKTsKKworICBmYWlsX3VubGVzcyAoYm9vbF91c2VyX2RhdGFbMF0gPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChib29sX3VzZXJfZGF0YVsxXSA9PSBGQUxTRSk7CisgIGZhaWxfdW5sZXNzIChib29sX3VzZXJfZGF0YVsyXSA9PSBGQUxTRSk7CisKKyAgYm9vbF91c2VyX2RhdGFbMV0gPSBUUlVFOworCisgIEdTVF9ERUJVRyAoInJlbW92aW5nIHNlY29uZCBwcm9iZSB3aXRoIGlkICVsdSIsIGlkKTsKKyAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKHBhZCwgaWQpOworCisgIHJldHVybiBHU1RfUFJPQkVfT0s7Cit9CisKK3N0YXRpYyBHc3RQcm9iZVJldHVybgorYmxvY2tfYXN5bmNfZmlyc3Rfbm9fZmx1c2ggKEdzdFBhZCAqIHBhZCwgR3N0UHJvYmVUeXBlIHR5cGUsIGdwb2ludGVyIHR5cGVfZGF0YSwKKyAgICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIHN0YXRpYyBpbnQgbl9jYWxscyA9IDA7CisgIGdib29sZWFuICpib29sX3VzZXJfZGF0YSA9IChnYm9vbGVhbiAqKSB1c2VyX2RhdGE7CisKKyAgZmFpbF91bmxlc3MgKHR5cGUgJiBHU1RfUFJPQkVfVFlQRV9CTE9DSyk7CisKKyAgR1NUX0RFQlVHICgiZmlyc3QgcHJvYmUgY2FsbGVkIik7CisKKyAgaWYgKCsrbl9jYWxscyA+IDEpCisgICAgLyogd2UgZXhwZWN0IHRoaXMgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9ubHkgb25jZSAqLworICAgIGdfd2Fybl9pZl9yZWFjaGVkICgpOworCisgICpib29sX3VzZXJfZGF0YSA9IFRSVUU7CisKKyAgZmFpbF91bmxlc3MgKGJvb2xfdXNlcl9kYXRhWzBdID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoYm9vbF91c2VyX2RhdGFbMV0gPT0gRkFMU0UpOworICBmYWlsX3VubGVzcyAoYm9vbF91c2VyX2RhdGFbMl0gPT0gRkFMU0UpOworCisgIEdTVF9ERUJVRyAoInJlbW92aW5nIGZpcnN0IHByb2JlIHdpdGggaWQgJWx1IiwgaWQpOworICBnc3RfcGFkX3JlbW92ZV9wcm9iZSAocGFkLCBpZCk7CisKKyAgR1NUX0RFQlVHICgiYWRkaW5nIHNlY29uZCBwcm9iZSIpOworICAvKiByZXBsYWNlIGJsb2NrX2FzeW5jX2ZpcnN0IHdpdGggYmxvY2tfYXN5bmNfc2Vjb25kIHNvIG5leHQgdGltZSB0aGUgcGFkIGlzCisgICAqIGJsb2NrZWQgdGhlIGxhdHRlciBzaG91bGQgYmUgY2FsbGVkICovCisgIGlkID0gZ3N0X3BhZF9hZGRfcHJvYmUgKHBhZCwgR1NUX1BST0JFX1RZUEVfQkxPQ0ssCisgICAgICBibG9ja19hc3luY19zZWNvbmRfbm9fZmx1c2gsIHVzZXJfZGF0YSwgTlVMTCk7CisgIEdTVF9ERUJVRyAoImFkZGVkIHByb2JlIHdpdGggaWQgJWx1IiwgaWQpOworCisgIHJldHVybiBHU1RfUFJPQkVfT0s7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2Jsb2NrX2FzeW5jX3JlcGxhY2VfY2FsbGJhY2tfbm9fZmx1c2gpCit7CisgIEdzdFBhZCAqcGFkOworICBnYm9vbGVhbiBib29sX3VzZXJfZGF0YVszXSA9IHsgRkFMU0UsIEZBTFNFLCBGQUxTRSB9OworCisgIHBhZCA9IGdzdF9wYWRfbmV3ICgic3JjIiwgR1NUX1BBRF9TUkMpOworICBmYWlsX3VubGVzcyAocGFkICE9IE5VTEwpOworICBnc3RfcGFkX3NldF9hY3RpdmUgKHBhZCwgVFJVRSk7CisKKyAgR1NUX0RFQlVHICgiYWRkaW5nIHByb2JlIik7CisgIGlkID0gZ3N0X3BhZF9hZGRfcHJvYmUgKHBhZCwgR1NUX1BST0JFX1RZUEVfQkxPQ0ssCisgICAgICBibG9ja19hc3luY19maXJzdF9ub19mbHVzaCwgYm9vbF91c2VyX2RhdGEsIE5VTEwpOworICBHU1RfREVCVUcgKCJhZGRlZCBwcm9iZSB3aXRoIGlkICVsdSIsIGlkKTsKKyAgZmFpbF9pZiAoaWQgPT0gMCk7CisKKyAgR1NUX0RFQlVHICgicHVzaGluZyBidWZmZXIiKTsKKyAgZ3N0X3BhZF9wdXNoIChwYWQsIGdzdF9idWZmZXJfbmV3ICgpKTsKKyAgZmFpbF91bmxlc3MgKGJvb2xfdXNlcl9kYXRhWzBdID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoYm9vbF91c2VyX2RhdGFbMV0gPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChib29sX3VzZXJfZGF0YVsyXSA9PSBGQUxTRSk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKK30KKworR1NUX0VORF9URVNUOworCisKK3N0YXRpYyBTdWl0ZSAqCitnc3RfcGFkX3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdFBhZCIpOworICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7CisKKyAgLyogdHVybiBvZmYgdGltZW91dCAqLworICB0Y2FzZV9zZXRfdGltZW91dCAodGNfY2hhaW4sIDYwKTsKKworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2xpbmspOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcmVmY291bnQpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2V0X2FsbG93ZWRfY2Fwcyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9saW5rX3VubGlua190aHJlYWRlZCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9uYW1lX2lzX3ZhbGlkKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3B1c2hfdW5saW5rZWQpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcHVzaF9saW5rZWQpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcHVzaF9idWZmZXJfbGlzdF9jb21wYXQpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZmxvd3JldHVybik7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wdXNoX25lZ290aWF0aW9uKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NyY191bnJlZl91bmxpbmspOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc2lua191bnJlZl91bmxpbmspOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYmxvY2tfYXN5bmMpOworI2lmIDAKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Jsb2NrX2FzeW5jX3JlcGxhY2VfY2FsbGJhY2spOworI2VuZGlmCisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9ibG9ja19hc3luY19mdWxsX2Rlc3Ryb3kpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYmxvY2tfYXN5bmNfZnVsbF9kZXN0cm95X2Rpc3Bvc2UpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYmxvY2tfYXN5bmNfcmVwbGFjZV9jYWxsYmFja19ub19mbHVzaCk7CisKKyAgcmV0dXJuIHM7Cit9CisKK0dTVF9DSEVDS19NQUlOIChnc3RfcGFkKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RwYXJhbXNwZWNzLmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0cGFyYW1zcGVjcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZDMwMjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9nc3QvZ3N0cGFyYW1zcGVjcy5jCkBAIC0wLDAgKzEsMTI4IEBACisvKiBHU3RyZWFtZXIgR3N0UGFyYW1TcGVjIHVuaXQgdGVzdHMKKyAqIENvcHlyaWdodCAoQykgMjAwNyBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qIHNvbWUgbWluaW1hbCBkdW1teSBvYmplY3QgKi8KKyNkZWZpbmUgR1NUX1RZUEVfRFVNTVlfT0JKIGdzdF9kdW1teV9vYmpfZ2V0X3R5cGUoKQorCit0eXBlZGVmIHN0cnVjdAoreworICBHc3RFbGVtZW50IHBhcmVudDsKKyAgZ3VpbnQgbnVtLCBkZW5vbTsKK30gR3N0RHVtbXlPYmo7CisKK3R5cGVkZWYgR3N0RWxlbWVudENsYXNzIEdzdER1bW15T2JqQ2xhc3M7CisKK0dUeXBlIGdzdF9kdW1teV9vYmpfZ2V0X3R5cGUgKHZvaWQpOworR19ERUZJTkVfVFlQRSAoR3N0RHVtbXlPYmosIGdzdF9kdW1teV9vYmosIEdTVF9UWVBFX0VMRU1FTlQpOworCitzdGF0aWMgdm9pZAorZ3N0X2R1bW15X29ial9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmosIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbCwKKyAgICBHUGFyYW1TcGVjICogcHNwZWMpOworc3RhdGljIHZvaWQKK2dzdF9kdW1teV9vYmpfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqLCBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWwsCisgICAgR1BhcmFtU3BlYyAqIHBzcGVjKTsKKworc3RhdGljIHZvaWQKK2dzdF9kdW1teV9vYmpfY2xhc3NfaW5pdCAoR3N0RHVtbXlPYmpDbGFzcyAqIGtsYXNzKQoreworICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOworCisgIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9kdW1teV9vYmpfZ2V0X3Byb3BlcnR5OworICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfZHVtbXlfb2JqX3NldF9wcm9wZXJ0eTsKKworICBBU1NFUlRfQ1JJVElDQUwgKAorICAgICAgLyogZGVmYXVsdCB2YWx1ZSBpcyBvdXQgb2YgYm91bmRzLCBzaG91bGQgcHJpbnQgYSB3YXJuaW5nICovCisgICAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCAxLAorICAgICAgICAgIGdzdF9wYXJhbV9zcGVjX2ZyYWN0aW9uICgicmF0aW8iLCAicmF0aW8iLCAicmF0aW8iLCAwLCAxLCAyLCAxLAorICAgICAgICAgICAgICAxNiwgNCwgR19QQVJBTV9SRUFEV1JJVEUpKTspOworCisgIC8qIHNob3VsZCBiZSB3aXRoaW4gYm91bmRzICovCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIDIsCisgICAgICBnc3RfcGFyYW1fc3BlY19mcmFjdGlvbiAoIm90aGVyLXJhdGlvIiwgIm90aGVyIHJhdGlvIiwgIm90aGVyIHJhdGlvIiwKKyAgICAgICAgICAwLCAxLCAyLCAxLCAxNiwgOSwgR19QQVJBTV9SRUFEV1JJVEUpKTsKKworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCAzLAorICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJmb28iLCAiZm9vIiwgImZvbyIsIFRSVUUsIEdfUEFSQU1fUkVBRFdSSVRFKSk7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfZHVtbXlfb2JqX2luaXQgKEdzdER1bW15T2JqICogb2JqKQoreworICAvKiBub3RoaW5nIHRvIGRvIHRoZXJlICovCit9CisKK3N0YXRpYyB2b2lkCitnc3RfZHVtbXlfb2JqX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iaiwgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlICogdmFsLAorICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgR3N0RHVtbXlPYmogKmRvYmogPSAoR3N0RHVtbXlPYmogKikgb2JqOworCisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHByb3BfaWQsIDIpOworICBkb2JqLT5udW0gPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvciAodmFsKTsKKyAgZG9iai0+ZGVub20gPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX2Rlbm9taW5hdG9yICh2YWwpOworfQorCitzdGF0aWMgdm9pZAorZ3N0X2R1bW15X29ial9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmosIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbCwKKyAgICBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgIEdzdER1bW15T2JqICpkb2JqID0gKEdzdER1bW15T2JqICopIG9iajsKKworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChwcm9wX2lkLCAyKTsKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAodmFsLCBkb2JqLT5udW0sIGRvYmotPmRlbm9tKTsKK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGFyYW1fc3BlY19mcmFjdGlvbikKK3sKKyAgR09iamVjdCAqb2JqOworICBHVmFsdWUgdmFsID0geyAwLCB9OworICBnaW50IG4gPSAwLCBkID0gMDsKKworICBvYmogPSBnX29iamVjdF9uZXcgKEdTVF9UWVBFX0RVTU1ZX09CSiwgIm90aGVyLXJhdGlvIiwgMTUsIDgsIE5VTEwpOworCisgIGdfdmFsdWVfaW5pdCAoJnZhbCwgR1NUX1RZUEVfRlJBQ1RJT04pOworICBnX29iamVjdF9nZXRfcHJvcGVydHkgKEdfT0JKRUNUIChvYmopLCAib3RoZXItcmF0aW8iLCAmdmFsKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9udW1lcmF0b3IgKCZ2YWwpLCAxNSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3IgKCZ2YWwpLCA4KTsKKyAgZ192YWx1ZV91bnNldCAoJnZhbCk7CisKKyAgZ19vYmplY3RfZ2V0IChvYmosICJvdGhlci1yYXRpbyIsICZuLCAmZCwgTlVMTCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKG4sIDE1KTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZCwgOCk7CisKKyAgZ19vYmplY3RfdW5yZWYgKG9iaik7Cit9CisKK0dTVF9FTkRfVEVTVCBzdGF0aWMgU3VpdGUgKgorZ3N0X3BhcmFtX3NwZWNfc3VpdGUgKHZvaWQpCit7CisgIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0UGFyYW1TcGVjIik7CisgIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKKworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BhcmFtX3NwZWNfZnJhY3Rpb24pOworCisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoZ3N0X3BhcmFtX3NwZWMpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0cGlwZWxpbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2RlNTQxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmMKQEAgLTAsMCArMSw1ODUgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA1IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKyAqCisgKiBnc3RwaXBlbGluZS5jOiBVbml0IHRlc3QgZm9yIEdzdFBpcGVsaW5lCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworI2RlZmluZSBXQUlUX1RJTUUgKDMwMCAqIEdTVF9NU0VDT05EKQorCisvKiBhbiBlbXB0eSBwaXBlbGluZSBjYW4gZ28gdG8gUExBWUlORyBpbiBvbmUgZ28gKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X2FzeW5jX3N0YXRlX2NoYW5nZV9lbXB0eSkKK3sKKyAgR3N0UGlwZWxpbmUgKnBpcGVsaW5lOworCisgIHBpcGVsaW5lID0gR1NUX1BJUEVMSU5FIChnc3RfcGlwZWxpbmVfbmV3IChOVUxMKSk7CisgIGZhaWxfdW5sZXNzIChwaXBlbGluZSAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBwaXBlbGluZSIpOworCisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKHBpcGVsaW5lKSwKKyAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORyksIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2FzeW5jX3N0YXRlX2NoYW5nZV9mYWtlX3JlYWR5KQoreworICBHc3RQaXBlbGluZSAqcGlwZWxpbmU7CisgIEdzdEVsZW1lbnQgKnNyYywgKnNpbms7CisKKyAgcGlwZWxpbmUgPSBHU1RfUElQRUxJTkUgKGdzdF9waXBlbGluZV9uZXcgKE5VTEwpKTsKKyAgZmFpbF91bmxlc3MgKHBpcGVsaW5lICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIHBpcGVsaW5lIik7CisKKyAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOworICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKKworICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIHNyYywgc2luaywgTlVMTCk7CisgIGdzdF9lbGVtZW50X2xpbmsgKHNyYywgc2luayk7CisKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLAorICAgICAgICAgIEdTVF9TVEFURV9SRUFEWSksIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2FzeW5jX3N0YXRlX2NoYW5nZV9mYWtlKQoreworICBHc3RQaXBlbGluZSAqcGlwZWxpbmU7CisgIEdzdEVsZW1lbnQgKnNyYywgKnNpbms7CisgIEdzdEJ1cyAqYnVzOworICBnYm9vbGVhbiBkb25lID0gRkFMU0U7CisKKyAgcGlwZWxpbmUgPSBHU1RfUElQRUxJTkUgKGdzdF9waXBlbGluZV9uZXcgKE5VTEwpKTsKKyAgZmFpbF91bmxlc3MgKHBpcGVsaW5lICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIHBpcGVsaW5lIik7CisKKyAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOworICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKKworICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIHNyYywgc2luaywgTlVMTCk7CisgIGdzdF9lbGVtZW50X2xpbmsgKHNyYywgc2luayk7CisKKyAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKHBpcGVsaW5lKTsKKworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChwaXBlbGluZSksCisgICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpLCBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKTsKKworICB3aGlsZSAoIWRvbmUpIHsKKyAgICBHc3RNZXNzYWdlICptZXNzYWdlOworICAgIEdzdFN0YXRlIG9sZCwgbmV3LCBwZW5kaW5nOworCisgICAgbWVzc2FnZSA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VELCAtMSk7CisgICAgaWYgKG1lc3NhZ2UpIHsKKyAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQgKG1lc3NhZ2UsICZvbGQsICZuZXcsICZwZW5kaW5nKTsKKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG1lc3NhZ2UtPnNyYywgInN0YXRlIGNoYW5nZSBmcm9tICVkIHRvICVkIiwgb2xkLCBuZXcpOworICAgICAgaWYgKG1lc3NhZ2UtPnNyYyA9PSBHU1RfT0JKRUNUIChwaXBlbGluZSkgJiYgbmV3ID09IEdTVF9TVEFURV9QTEFZSU5HKQorICAgICAgICBkb25lID0gVFJVRTsKKyAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKKyAgICB9CisgIH0KKworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChwaXBlbGluZSksCisgICAgICAgICAgR1NUX1NUQVRFX05VTEwpLCBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOworCisgIC8qIGhlcmUgd2UgZG9uJ3QgZ2V0IHRoZSBzdGF0ZSBjaGFuZ2UgbWVzc2FnZXMsIGJlY2F1c2Ugb2YgYXV0by1mbHVzaCBpbiAKKyAgICogdGhlIGJ1cyAqLworCisgIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9nZXRfYnVzKQoreworICBHc3RQaXBlbGluZSAqcGlwZWxpbmU7CisgIEdzdEJ1cyAqYnVzOworCisgIHBpcGVsaW5lID0gR1NUX1BJUEVMSU5FIChnc3RfcGlwZWxpbmVfbmV3IChOVUxMKSk7CisgIGZhaWxfdW5sZXNzIChwaXBlbGluZSAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBwaXBlbGluZSIpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwaXBlbGluZSwgInBpcGVsaW5lIiwgMSk7CisKKyAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKHBpcGVsaW5lKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGlwZWxpbmUsICJwaXBlbGluZSBhZnRlciBnZXRfYnVzIiwgMSk7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGJ1cywgImJ1cyIsIDIpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKKworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChidXMsICJidXMgYWZ0ZXIgdW5yZWYgcGlwZWxpbmUiLCAxKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgR01haW5Mb29wICpsb29wID0gTlVMTDsKKworc3RhdGljIGdib29sZWFuCittZXNzYWdlX3JlY2VpdmVkIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBncG9pbnRlciBkYXRhKQoreworICBHc3RFbGVtZW50ICpwaXBlbGluZSA9IEdTVF9FTEVNRU5UIChkYXRhKTsKKyAgR3N0TWVzc2FnZVR5cGUgdHlwZSA9IG1lc3NhZ2UtPnR5cGU7CisKKyAgR1NUX0RFQlVHICgibWVzc2FnZSByZWNlaXZlZCIpOworICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQ6CisgICAgeworICAgICAgR3N0U3RhdGUgb2xkLCBuZXcsIHBlbmRpbmc7CisKKyAgICAgIEdTVF9ERUJVRyAoInN0YXRlIGNoYW5nZSBtZXNzYWdlIHJlY2VpdmVkIik7CisgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkIChtZXNzYWdlLCAmb2xkLCAmbmV3LCAmcGVuZGluZyk7CisgICAgICBHU1RfREVCVUcgKCJuZXcgc3RhdGUgJWQiLCBuZXcpOworICAgICAgaWYgKG1lc3NhZ2UtPnNyYyA9PSBHU1RfT0JKRUNUIChwaXBlbGluZSkgJiYgbmV3ID09IEdTVF9TVEFURV9QTEFZSU5HKSB7CisgICAgICAgIEdTVF9ERUJVRyAoInF1aXR0aW5nIG1haW4gbG9vcCIpOworICAgICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKKyAgICAgIH0KKyAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOgorICAgIHsKKyAgICAgIGdfcHJpbnQgKCJlcnJvclxuIik7CisgICAgfQorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2J1cykKK3sKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmU7CisgIEdzdEVsZW1lbnQgKnNyYywgKnNpbms7CisgIEdzdEJ1cyAqYnVzOworICBndWludCBpZDsKKyAgR3N0U3RhdGUgY3VycmVudDsKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OworCisgIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoTlVMTCk7CisgIGZhaWxfdW5sZXNzIChwaXBlbGluZSAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBwaXBlbGluZSIpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwaXBlbGluZSwgInBpcGVsaW5lIiwgMSk7CisKKyAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOworICBmYWlsX3VubGVzcyAoc3JjICE9IE5VTEwpOworICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKHNpbmsgIT0gTlVMTCk7CisKKyAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMsIHNpbmssIE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBzaW5rKSk7CisKKyAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKEdTVF9QSVBFTElORSAocGlwZWxpbmUpKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGlwZWxpbmUsICJwaXBlbGluZSBhZnRlciBnZXRfYnVzIiwgMSk7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGJ1cywgImJ1cyIsIDIpOworCisgIGlkID0gZ3N0X2J1c19hZGRfd2F0Y2ggKGJ1cywgbWVzc2FnZV9yZWNlaXZlZCwgcGlwZWxpbmUpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwaXBlbGluZSwgInBpcGVsaW5lIGFmdGVyIGFkZF93YXRjaCIsIDEpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChidXMsICJidXMgYWZ0ZXIgYWRkX3dhdGNoIiwgMyk7CisKKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpOworCisgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKKyAgR1NUX0RFQlVHICgiZ29pbmcgaW50byBtYWluIGxvb3AiKTsKKyAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKKyAgR1NUX0RFQlVHICgibGVmdCBtYWluIGxvb3AiKTsKKworICAvKiBQTEFZSU5HIG5vdyAqLworCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlRfQkVUV0VFTiAocGlwZWxpbmUsICJwaXBlbGluZSBhZnRlciBnb25lIHRvIHBsYXlpbmciLCAxLAorICAgICAgMyk7CisKKyAgLyogY2xlYW51cCAqLworICBHU1RfREVCVUcgKCJjbGVhbnVwIik7CisKKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOworICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7CisgIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsICZjdXJyZW50LCBOVUxMLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOworICBmYWlsX3VubGVzcyAoY3VycmVudCA9PSBHU1RfU1RBVEVfTlVMTCwgInN0YXRlIGlzIG5vdCBOVUxMIGJ1dCAlZCIsIGN1cnJlbnQpOworCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHBpcGVsaW5lLCAicGlwZWxpbmUgYXQgc3RhcnQgb2YgY2xlYW51cCIsIDEpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChidXMsICJidXMgYXQgc3RhcnQgb2YgY2xlYW51cCIsIDMpOworCisgIGZhaWxfdW5sZXNzIChnX3NvdXJjZV9yZW1vdmUgKGlkKSk7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGJ1cywgImJ1cyBhZnRlciByZW1vdmluZyBzb3VyY2UiLCAyKTsKKworICBHU1RfREVCVUcgKCJ1bnJlZmZpbmcgcGlwZWxpbmUiKTsKKyAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOworCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGJ1cywgImJ1cyBhZnRlciB1bnJlZiBwaXBlbGluZSIsIDEpOworICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBHTXV0ZXggKnByb2JlX2xvY2s7CitzdGF0aWMgR0NvbmQgKnByb2JlX2NvbmQ7CisKK3N0YXRpYyBnYm9vbGVhbgorc2lua19wYWRfcHJvYmUgKEdzdFBhZCAqIHBhZCwgR3N0UHJvYmVUeXBlIHR5cGUsIEdzdEJ1ZmZlciAqIGJ1ZmZlciwKKyAgICBHc3RDbG9ja1RpbWUgKiBmaXJzdF90aW1lc3RhbXApCit7CisgIGZhaWxfaWYgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID09IEdTVF9DTE9DS19USU1FX05PTkUsCisgICAgICAidGVzdGluZyBpZiBidWZmZXIgdGltZXN0YW1wcyBhcmUgcmlnaHQsIGJ1dCBnb3QgQ0xPQ0tfVElNRV9OT05FIik7CisKKyAgaWYgKCpmaXJzdF90aW1lc3RhbXAgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkgeworICAgICpmaXJzdF90aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKTsKKyAgfQorCisgIGdfbXV0ZXhfbG9jayAocHJvYmVfbG9jayk7CisgIGdfY29uZF9zaWduYWwgKHByb2JlX2NvbmQpOworICBnX211dGV4X3VubG9jayAocHJvYmVfbG9jayk7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2Jhc2VfdGltZSkKK3sKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpmYWtlc3JjLCAqZmFrZXNpbms7CisgIEdzdFBhZCAqc2luazsKKyAgR3N0Q2xvY2tUaW1lIG9ic2VydmVkLCBsb3dlciwgdXBwZXIsIGJhc2UsIHN0cmVhbTsKKyAgR3N0Q2xvY2sgKmNsb2NrOworCisgIHBpcGVsaW5lID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicGlwZWxpbmUiLCAicGlwZWxpbmUiKTsKKyAgZmFrZXNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAiZmFrZXNyYyIpOworICBmYWtlc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgImZha2VzaW5rIik7CisKKyAgZmFpbF91bmxlc3MgKHBpcGVsaW5lICYmIGZha2VzcmMgJiYgZmFrZXNpbmssICJjb3VsZG4ndCBtYWtlIGVsZW1lbnRzIik7CisKKyAgZ19vYmplY3Rfc2V0IChmYWtlc3JjLCAiaXMtbGl2ZSIsIChnYm9vbGVhbikgVFJVRSwgTlVMTCk7CisKKyAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBmYWtlc3JjLCBmYWtlc2luaywgTlVMTCk7CisgIGdzdF9lbGVtZW50X2xpbmsgKGZha2VzcmMsIGZha2VzaW5rKTsKKworICBzaW5rID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGZha2VzaW5rLCAic2luayIpOworICBnc3RfcGFkX2FkZF9wcm9iZSAoc2luaywgR1NUX1BST0JFX1RZUEVfQlVGRkVSLAorICAgICAgKEdzdFBhZFByb2JlQ2FsbGJhY2spIHNpbmtfcGFkX3Byb2JlLCAmb2JzZXJ2ZWQsIE5VTEwpOworCisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKQorICAgICAgPT0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMLCAiZXhwZWN0ZWQgbm8tcHJlcm9sbCBmcm9tIGxpdmUgcGlwZWxpbmUiKTsKKworICBjbG9jayA9IGdzdF9zeXN0ZW1fY2xvY2tfb2J0YWluICgpOworICBmYWlsX3VubGVzcyAoY2xvY2sgJiYgR1NUX0lTX0NMT0NLIChjbG9jayksICJpIHdhbnQgYSBjbG9jayBkYW1taXQiKTsKKyAgZ3N0X3BpcGVsaW5lX3VzZV9jbG9jayAoR1NUX1BJUEVMSU5FIChwaXBlbGluZSksIGNsb2NrKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXJ0X3RpbWUgKHBpcGVsaW5lKSA9PSAwLAorICAgICAgInN0cmVhbSB0aW1lIGRvZXNuJ3Qgc3RhcnQgb2ZmIGF0IDAiKTsKKworICBwcm9iZV9sb2NrID0gZ19tdXRleF9uZXcgKCk7CisgIHByb2JlX2NvbmQgPSBnX2NvbmRfbmV3ICgpOworCisgIC8qIHRlc3QgdGhlIGZpcnN0OiB0aGF0IGJhc2UgdGltZSBpcyBiZWluZyBkaXN0cmlidXRlZCBjb3JyZWN0bHksIHRpbWVzdGFtcHMKKyAgICAgYXJlIGNvcnJlY3QgcmVsYXRpdmUgdG8gdGhlIHJ1bm5pbmcgY2xvY2sgYW5kIGJhc2UgdGltZSAqLworICB7CisgICAgbG93ZXIgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKGNsb2NrKTsKKworICAgIG9ic2VydmVkID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgIEdTVF9DTE9DS19USU1FX05PTkUpCisgICAgICAgID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImZhaWxlZCBzdGF0ZSBjaGFuZ2UiKTsKKworICAgIGdfbXV0ZXhfbG9jayAocHJvYmVfbG9jayk7CisgICAgd2hpbGUgKG9ic2VydmVkID09IEdTVF9DTE9DS19USU1FX05PTkUpCisgICAgICBnX2NvbmRfd2FpdCAocHJvYmVfY29uZCwgcHJvYmVfbG9jayk7CisgICAgZ19tdXRleF91bmxvY2sgKHByb2JlX2xvY2spOworCisgICAgLyogbm93IHNvbWV0aGluZyBhIGxpdHRsZSBtb3JlIHRoYW4gbG93ZXIgd2FzIGRpc3RyaWJ1dGVkIGFzIHRoZSBiYXNlIHRpbWUsCisgICAgICogYW5kIHRoZSBidWZmZXIgd2FzIHRpbWVzdGFtcGVkIGJldHdlZW4gMCBhbmQgdXBwZXItYmFzZQorICAgICAqLworCisgICAgYmFzZSA9IGdzdF9lbGVtZW50X2dldF9iYXNlX3RpbWUgKHBpcGVsaW5lKTsKKyAgICBmYWlsX2lmIChiYXNlID09IEdTVF9DTE9DS19USU1FX05PTkUpOworCisgICAgLyogc2V0IHN0cmVhbSB0aW1lICovCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7CisKKyAgICAvKiBwdWxsaW5nIHVwcGVyIGhlcmUgbWFrZXMgc3VyZSB0aGF0IHRoZSBwaXBlbGluZSdzIG5ldyBzdHJlYW0gdGltZSBoYXMKKyAgICAgICBhbHJlYWR5IGJlZW4gY29tcHV0ZWQgKi8KKyAgICB1cHBlciA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOworCisgICAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsIE5VTEwsIE5VTEwsCisgICAgICAgICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FKQorICAgICAgICA9PSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwsICJmYWlsZWQgc3RhdGUgY2hhbmdlIik7CisKKyAgICBmYWlsX2lmIChvYnNlcnZlZCA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FLCAibm8gdGltZXN0YW1wIHJlY29yZGVkIik7CisKKyAgICBmYWlsX3VubGVzcyAoYmFzZSA+PSBsb3dlciwgImVhcmx5IGJhc2UgdGltZTogJSIgR1NUX1RJTUVfRk9STUFUICIgPCAlIgorICAgICAgICBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKGJhc2UpLCBHU1RfVElNRV9BUkdTIChsb3dlcikpOworICAgIGZhaWxfdW5sZXNzICh1cHBlciA+PSBiYXNlLCAiYm9ndXMgYmFzZSB0aW1lOiAlIiBHU1RfVElNRV9GT1JNQVQgIiA+ICUiCisgICAgICAgIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAoYmFzZSksIEdTVF9USU1FX0FSR1MgKHVwcGVyKSk7CisKKyAgICBzdHJlYW0gPSBnc3RfZWxlbWVudF9nZXRfc3RhcnRfdGltZSAocGlwZWxpbmUpOworCisgICAgZmFpbF91bmxlc3MgKHN0cmVhbSA+IDAsICJib2d1cyBuZXcgc3RyZWFtIHRpbWU6ICUiIEdTVF9USU1FX0ZPUk1BVCAiID4gJSIKKyAgICAgICAgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChzdHJlYW0pLCBHU1RfVElNRV9BUkdTICgwKSk7CisgICAgZmFpbF91bmxlc3MgKHN0cmVhbSA8PSB1cHBlciwKKyAgICAgICAgImJvZ3VzIG5ldyBzdHJlYW0gdGltZTogJSIgR1NUX1RJTUVfRk9STUFUICIgPiAlIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICAgIEdTVF9USU1FX0FSR1MgKHN0cmVhbSksIEdTVF9USU1FX0FSR1MgKHVwcGVyKSk7CisKKyAgICBmYWlsX3VubGVzcyAob2JzZXJ2ZWQgPD0gc3RyZWFtLCAidGltZXN0YW1wcyBvdXRydW4gc3RyZWFtIHRpbWU6ICUiCisgICAgICAgIEdTVF9USU1FX0ZPUk1BVCAiID4gJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgICBHU1RfVElNRV9BUkdTIChvYnNlcnZlZCksIEdTVF9USU1FX0FSR1MgKHN0cmVhbSkpOworICAgIGZhaWxfdW5sZXNzIChvYnNlcnZlZCAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FLCAiZWFybHkgdGltZXN0YW1wOiAlIgorICAgICAgICBHU1RfVElNRV9GT1JNQVQgIiA8ICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAob2JzZXJ2ZWQpLAorICAgICAgICBHU1RfVElNRV9BUkdTIChsb3dlciAtIGJhc2UpKTsKKyAgICBmYWlsX3VubGVzcyAob2JzZXJ2ZWQgPD0gdXBwZXIgLSBiYXNlLAorICAgICAgICAibGF0ZSB0aW1lc3RhbXA6ICUiIEdTVF9USU1FX0ZPUk1BVCAiID4gJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgICBHU1RfVElNRV9BUkdTIChvYnNlcnZlZCksIEdTVF9USU1FX0FSR1MgKHVwcGVyIC0gYmFzZSkpOworICB9CisKKyAgLyogdGVzdCB0aGUgc2Vjb25kOiB0aGF0IHRoZSBiYXNlIHRpbWUgaXMgcmVkaXN0cmlidXRlZCB3aGVuIHdlIGdvIHRvIFBMQVlJTkcKKyAgICAgYWdhaW4gKi8KKyAgeworICAgIEdzdENsb2NrSUQgY2xvY2tfaWQ7CisgICAgR3N0Q2xvY2tUaW1lIG9sZGJhc2UgPSBiYXNlLCBvbGRzdHJlYW0gPSBzdHJlYW07CisKKyAgICAvKiBsZXQgc29tZSB0aW1lIHBhc3MgKi8KKyAgICBjbG9ja19pZCA9IGdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKGNsb2NrLCB1cHBlciArIFdBSVRfVElNRSk7CisgICAgZmFpbF91bmxlc3MgKGdzdF9jbG9ja19pZF93YWl0IChjbG9ja19pZCwgTlVMTCkgPT0gR1NUX0NMT0NLX09LLAorICAgICAgICAidW5leHBlY3RlZCBjbG9ja19pZF93YWl0IHJldHVybiIpOworICAgIGdzdF9jbG9ja19pZF91bnJlZiAoY2xvY2tfaWQpOworCisgICAgbG93ZXIgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKGNsb2NrKTsKKyAgICBmYWlsX2lmIChsb3dlciA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKworICAgIG9ic2VydmVkID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKworICAgIGZhaWxfdW5sZXNzIChsb3dlciA+PSB1cHBlciArIFdBSVRfVElNRSwgImNsb2NrIGRpZCBub3QgYWR2YW5jZT8iKTsKKworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgIEdTVF9DTE9DS19USU1FX05PTkUpCisgICAgICAgID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImZhaWxlZCBzdGF0ZSBjaGFuZ2UiKTsKKworICAgIGdfbXV0ZXhfbG9jayAocHJvYmVfbG9jayk7CisgICAgd2hpbGUgKG9ic2VydmVkID09IEdTVF9DTE9DS19USU1FX05PTkUpCisgICAgICBnX2NvbmRfd2FpdCAocHJvYmVfY29uZCwgcHJvYmVfbG9jayk7CisgICAgZ19tdXRleF91bmxvY2sgKHByb2JlX2xvY2spOworCisgICAgLyogbm93IHRoZSBiYXNlIHRpbWUgc2hvdWxkIGhhdmUgYWR2YW5jZWQgYnkgbW9yZSB0aGFuIFdBSVRfVElNRSBjb21wYXJlZAorICAgICAqIHRvIHdoYXQgaXQgd2FzLiBUaGUgYnVmZmVyIHdpbGwgYmUgdGltZXN0YW1wZWQgYmV0d2VlbiB0aGUgbGFzdCBzdHJlYW0KKyAgICAgKiB0aW1lIGFuZCB1cHBlciBtaW51cyBiYXNlLgorICAgICAqLworCisgICAgYmFzZSA9IGdzdF9lbGVtZW50X2dldF9iYXNlX3RpbWUgKHBpcGVsaW5lKTsKKyAgICBmYWlsX2lmIChiYXNlID09IEdTVF9DTE9DS19USU1FX05PTkUpOworCisgICAgLyogc2V0IHN0cmVhbSB0aW1lICovCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7CisKKyAgICAvKiBuZXcgc3RyZWFtIHRpbWUgYWxyZWFkeSBzZXQgKi8KKyAgICB1cHBlciA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOworCisgICAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsIE5VTEwsIE5VTEwsCisgICAgICAgICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FKQorICAgICAgICA9PSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwsICJmYWlsZWQgc3RhdGUgY2hhbmdlIik7CisKKyAgICBmYWlsX2lmIChvYnNlcnZlZCA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FLCAibm8gdGltZXN0YW1wIHJlY29yZGVkIik7CisKKyAgICBzdHJlYW0gPSBnc3RfZWxlbWVudF9nZXRfc3RhcnRfdGltZSAocGlwZWxpbmUpOworCisgICAgZmFpbF91bmxlc3MgKGJhc2UgPj0gb2xkYmFzZSArIFdBSVRfVElNRSwgImJhc2UgdGltZSBub3QgcmVzZXQiKTsKKyAgICBmYWlsX3VubGVzcyAodXBwZXIgPj0gYmFzZSArIHN0cmVhbSwgImJvZ3VzIGJhc2UgdGltZTogJSIKKyAgICAgICAgR1NUX1RJTUVfRk9STUFUICIgPiAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKGJhc2UpLAorICAgICAgICBHU1RfVElNRV9BUkdTICh1cHBlcikpOworCisgICAgZmFpbF91bmxlc3MgKGxvd2VyID49IGJhc2UpOworICAgIGZhaWxfdW5sZXNzIChvYnNlcnZlZCA+PSBsb3dlciAtIGJhc2UsICJlYXJseSB0aW1lc3RhbXA6ICUiCisgICAgICAgIEdTVF9USU1FX0ZPUk1BVCAiIDwgJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgICBHU1RfVElNRV9BUkdTIChvYnNlcnZlZCksIEdTVF9USU1FX0FSR1MgKGxvd2VyIC0gYmFzZSkpOworICAgIGZhaWxfdW5sZXNzIChvYnNlcnZlZCA8PSB1cHBlciAtIGJhc2UsICJsYXRlIHRpbWVzdGFtcDogJSIKKyAgICAgICAgR1NUX1RJTUVfRk9STUFUICIgPiAlIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICAgIEdTVF9USU1FX0FSR1MgKG9ic2VydmVkKSwgR1NUX1RJTUVfQVJHUyAodXBwZXIgLSBiYXNlKSk7CisgICAgZmFpbF91bmxlc3MgKHN0cmVhbSAtIG9sZHN0cmVhbSA8PSB1cHBlciAtIGxvd2VyLAorICAgICAgICAiaW5zdWZmaWNpZW50IHN0cmVhbSB0aW1lOiAlIiBHU1RfVElNRV9GT1JNQVQgIiA+ICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgICAgR1NUX1RJTUVfQVJHUyAob2JzZXJ2ZWQpLCBHU1RfVElNRV9BUkdTICh1cHBlcikpOworICB9CisKKyAgLyogdGVzdCB0aGUgdGhpcmQ6IHRoYXQgaWYgSSBzZXQgQ0xPQ0tfVElNRV9OT05FIGFzIHRoZSBzdHJlYW0gdGltZSwgdGhhdCB0aGUKKyAgICAgYmFzZSB0aW1lIGlzIG5vdCBjaGFuZ2VkICovCisgIHsKKyAgICBHc3RDbG9ja0lEIGNsb2NrX2lkOworICAgIEdzdENsb2NrVGltZSBvbGRiYXNlID0gYmFzZSwgb2xkb2JzZXJ2ZWQgPSBvYnNlcnZlZDsKKyAgICBHc3RDbG9ja1JldHVybiByZXQ7CisKKyAgICAvKiBsZXQgc29tZSB0aW1lIHBhc3MgKi8KKyAgICBjbG9ja19pZCA9IGdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKGNsb2NrLCB1cHBlciArIFdBSVRfVElNRSk7CisgICAgcmV0ID0gZ3N0X2Nsb2NrX2lkX3dhaXQgKGNsb2NrX2lkLCBOVUxMKTsKKyAgICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9DTE9DS19PSywKKyAgICAgICAgInVuZXhwZWN0ZWQgY2xvY2tfaWRfd2FpdCByZXR1cm4gJWQiLCByZXQpOworICAgIGdzdF9jbG9ja19pZF91bnJlZiAoY2xvY2tfaWQpOworCisgICAgbG93ZXIgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKGNsb2NrKTsKKworICAgIG9ic2VydmVkID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKworICAgIGZhaWxfdW5sZXNzIChsb3dlciA+PSB1cHBlciArIFdBSVRfVElNRSwgImNsb2NrIGRpZCBub3QgYWR2YW5jZT8iKTsKKworICAgIC8qIGJsaW5nICovCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXJ0X3RpbWUgKHBpcGVsaW5lLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgIEdTVF9DTE9DS19USU1FX05PTkUpCisgICAgICAgID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImZhaWxlZCBzdGF0ZSBjaGFuZ2UiKTsKKworICAgIGdfbXV0ZXhfbG9jayAocHJvYmVfbG9jayk7CisgICAgd2hpbGUgKG9ic2VydmVkID09IEdTVF9DTE9DS19USU1FX05PTkUpCisgICAgICBnX2NvbmRfd2FpdCAocHJvYmVfY29uZCwgcHJvYmVfbG9jayk7CisgICAgZ19tdXRleF91bmxvY2sgKHByb2JlX2xvY2spOworCisgICAgLyogbm93IHRoZSBiYXNlIHRpbWUgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIGl0IHdhcywgYW5kIHRoZSB0aW1lc3RhbXAgc2hvdWxkCisgICAgICogYmUgbW9yZSB0aGFuIFdBSVRfVElNRSBwYXN0IHdoYXQgaXQgd2FzLgorICAgICAqLworCisgICAgYmFzZSA9IGdzdF9lbGVtZW50X2dldF9iYXNlX3RpbWUgKHBpcGVsaW5lKTsKKworICAgIC8qIHNldCBzdHJlYW0gdGltZSAqLworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpOworCisgICAgLyogbmV3IHN0cmVhbSB0aW1lIGFscmVhZHkgc2V0ICovCisgICAgdXBwZXIgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKGNsb2NrKTsKKworICAgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLAorICAgICAgICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORSkKKyAgICAgICAgPT0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMLCAiZmFpbGVkIHN0YXRlIGNoYW5nZSIpOworCisgICAgZmFpbF9pZiAob2JzZXJ2ZWQgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSwgIm5vIHRpbWVzdGFtcCByZWNvcmRlZCIpOworCisgICAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2dldF9zdGFydF90aW1lIChwaXBlbGluZSkKKyAgICAgICAgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSwgInN0cmVhbSB0aW1lIHdhcyByZXNldCIpOworCisgICAgZmFpbF91bmxlc3MgKGJhc2UgPT0gb2xkYmFzZSwgImJhc2UgdGltZSB3YXMgcmVzZXQiKTsKKworICAgIGZhaWxfdW5sZXNzIChvYnNlcnZlZCA+PSBsb3dlciAtIGJhc2UsICJlYXJseSB0aW1lc3RhbXA6ICUiCisgICAgICAgIEdTVF9USU1FX0ZPUk1BVCAiIDwgJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgICBHU1RfVElNRV9BUkdTIChvYnNlcnZlZCksIEdTVF9USU1FX0FSR1MgKGxvd2VyIC0gYmFzZSkpOworICAgIGZhaWxfdW5sZXNzIChvYnNlcnZlZCA8PSB1cHBlciAtIGJhc2UsICJsYXRlIHRpbWVzdGFtcDogJSIKKyAgICAgICAgR1NUX1RJTUVfRk9STUFUICIgPiAlIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICAgIEdTVF9USU1FX0FSR1MgKG9ic2VydmVkKSwgR1NUX1RJTUVfQVJHUyAodXBwZXIgLSBiYXNlKSk7CisgICAgZmFpbF91bmxlc3MgKG9ic2VydmVkIC0gb2xkb2JzZXJ2ZWQgPj0gV0FJVF9USU1FLAorICAgICAgICAiaW5zdWZmaWNpZW50IHRzdGFtcCBkZWx0YTogJSIgR1NUX1RJTUVfRk9STUFUICIgPiAlIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICAgIEdTVF9USU1FX0FSR1MgKG9ic2VydmVkKSwgR1NUX1RJTUVfQVJHUyAob2xkb2JzZXJ2ZWQpKTsKKyAgfQorCisgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOworICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgZ3BvaW50ZXIKK3BpcGVsaW5lX3RocmVhZCAoZ3BvaW50ZXIgZGF0YSkKK3sKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpzcmMsICpzaW5rOworCisgIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKKyAgZ19vYmplY3Rfc2V0IChzcmMsICJudW0tYnVmZmVycyIsIDIwLCBOVUxMKTsKKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7CisgIGdfb2JqZWN0X3NldCAoc2luaywgInN5bmMiLCBUUlVFLCBOVUxMKTsKKyAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3IChOVUxMKTsKKyAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjKTsKKyAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc2luayk7CisgIGdzdF9lbGVtZW50X2xpbmsgKHNyYywgc2luayk7CisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgZ191c2xlZXAgKEdfVVNFQ19QRVJfU0VDIC8gMTApOworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2NvbmN1cnJlbnRfY3JlYXRlKQoreworICBHVGhyZWFkICp0aHJlYWRzWzMwXTsKKyAgaW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAodGhyZWFkcyk7ICsraSkgeworICAgIHRocmVhZHNbaV0gPSBnX3RocmVhZF9jcmVhdGUgKHBpcGVsaW5lX3RocmVhZCwgTlVMTCwgVFJVRSwgTlVMTCk7CisgIH0KKyAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAodGhyZWFkcyk7ICsraSkgeworICAgIGlmICh0aHJlYWRzW2ldKQorICAgICAgZ190aHJlYWRfam9pbiAodGhyZWFkc1tpXSk7CisgIH0KK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9waXBlbGluZV9pbl9waXBlbGluZSkKK3sKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpiaW4sICpmYWtlc3JjLCAqZmFrZXNpbms7CisgIEdzdE1lc3NhZ2UgKm1zZzsKKworICBwaXBlbGluZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInBpcGVsaW5lIiwgInBpcGVsaW5lIik7CisgIGJpbiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInBpcGVsaW5lIiwgInBpcGVsaW5lLWFzLWJpbiIpOworICBmYWtlc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJmYWtlc3JjIik7CisgIGZha2VzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAiZmFrZXNpbmsiKTsKKworICBmYWlsX3VubGVzcyAocGlwZWxpbmUgJiYgYmluICYmIGZha2VzcmMgJiYgZmFrZXNpbmspOworCisgIGdfb2JqZWN0X3NldCAoZmFrZXNyYywgIm51bS1idWZmZXJzIiwgMTAwLCBOVUxMKTsKKworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBiaW4pOworICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChiaW4pLCBmYWtlc3JjLCBmYWtlc2luaywgTlVMTCk7CisgIGdzdF9lbGVtZW50X2xpbmsgKGZha2VzcmMsIGZha2VzaW5rKTsKKworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyksCisgICAgICBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKTsKKworICBtc2cgPSBnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZCAoR1NUX0VMRU1FTlRfQlVTIChwaXBlbGluZSksIC0xLAorICAgICAgR1NUX01FU1NBR0VfRU9TKTsKKyAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgU3VpdGUgKgorZ3N0X3BpcGVsaW5lX3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdFBpcGVsaW5lIik7CisgIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoInBpcGVsaW5lIHRlc3RzIik7CisKKyAgdGNhc2Vfc2V0X3RpbWVvdXQgKHRjX2NoYWluLCAwKTsKKworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2FzeW5jX3N0YXRlX2NoYW5nZV9lbXB0eSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hc3luY19zdGF0ZV9jaGFuZ2VfZmFrZV9yZWFkeSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hc3luY19zdGF0ZV9jaGFuZ2VfZmFrZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9nZXRfYnVzKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2J1cyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9iYXNlX3RpbWUpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfY29uY3VycmVudF9jcmVhdGUpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGlwZWxpbmVfaW5fcGlwZWxpbmUpOworCisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoZ3N0X3BpcGVsaW5lKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RwbHVnaW4uYyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RwbHVnaW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzJhMWI0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hlY2svZ3N0L2dzdHBsdWdpbi5jCkBAIC0wLDAgKzEsMzE2IEBACisvKiBHU3RyZWFtZXIKKyAqCisgKiB1bml0IHRlc3QgZm9yIEdzdFBsdWdpbgorICoKKyAqIENvcHlyaWdodCAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKyAqIENvcHlyaWdodCAyMDA1IERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgorCisKK3N0YXRpYyBnYm9vbGVhbgorcmVnaXN0ZXJfY2hlY2tfZWxlbWVudHMgKEdzdFBsdWdpbiAqIHBsdWdpbikKK3sKKyAgcmV0dXJuIFRSVUU7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3JlZ2lzdGVyX3N0YXRpYykKK3sKKyAgR3N0UGx1Z2luICpwbHVnaW47CisKKyAgZmFpbF91bmxlc3MgKGdzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljIChHU1RfVkVSU0lPTl9NQUpPUiwKKyAgICAgICAgICBHU1RfVkVSU0lPTl9NSU5PUiwgIm1vcmUtZWxlbWVudHMiLCAibW9yZS1lbGVtZW50cyIsCisgICAgICAgICAgcmVnaXN0ZXJfY2hlY2tfZWxlbWVudHMsIFZFUlNJT04sIEdTVF9MSUNFTlNFLCBQQUNLQUdFLAorICAgICAgICAgIEdTVF9QQUNLQUdFX05BTUUsIEdTVF9QQUNLQUdFX09SSUdJTikpOworCisgIHBsdWdpbiA9IGdfb2JqZWN0X25ldyAoR1NUX1RZUEVfUExVR0lOLCBOVUxMKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChwbHVnaW4pOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3JlZ2lzdHJ5KQoreworICBHTGlzdCAqZzsKKyAgR3N0UmVnaXN0cnkgKnJlZ2lzdHJ5OworCisgIHJlZ2lzdHJ5ID0gZ3N0X3JlZ2lzdHJ5X2dldF9kZWZhdWx0ICgpOworCisgIGZvciAoZyA9IHJlZ2lzdHJ5LT5wbHVnaW5zOyBnOyBnID0gZy0+bmV4dCkgeworICAgIEdzdFBsdWdpbiAqcGx1Z2luID0gR1NUX1BMVUdJTiAoZy0+ZGF0YSk7CisKKyAgICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwbHVnaW4sICJwbHVnaW4gaW4gcmVnaXN0cnkiLCAxKTsKKyAgICBHU1RfREVCVUcgKCJyZWZjb3VudCAlZCAlcyIsIEdTVF9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKHBsdWdpbiksCisgICAgICAgIHBsdWdpbi0+ZGVzYy5uYW1lKTsKKyAgfQorICBmb3IgKGcgPSByZWdpc3RyeS0+ZmVhdHVyZXM7IGc7IGcgPSBnLT5uZXh0KSB7CisgICAgR3N0UGx1Z2luRmVhdHVyZSAqZmVhdHVyZSA9IEdTVF9QTFVHSU5fRkVBVFVSRSAoZy0+ZGF0YSk7CisKKyAgICBmYWlsX2lmIChHU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChmZWF0dXJlKSAhPSAxLAorICAgICAgICAiRmVhdHVyZSBpbiByZWdpc3RyeSBzaG91bGQgaGF2ZSByZWZjb3VudCBvZiAxIik7CisgICAgR1NUX0RFQlVHICgicmVmY291bnQgJWQgJXMiLCBHU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChmZWF0dXJlKSwKKyAgICAgICAgR1NUX09CSkVDVF9OQU1FIChmZWF0dXJlKSk7CisgIH0KK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9sb2FkX2NvcmVlbGVtZW50cykKK3sKKyAgR3N0UGx1Z2luICp1bmxvYWRlZF9wbHVnaW47CisgIEdzdFBsdWdpbiAqbG9hZGVkX3BsdWdpbjsKKworICB1bmxvYWRlZF9wbHVnaW4gPSBnc3RfZGVmYXVsdF9yZWdpc3RyeV9maW5kX3BsdWdpbiAoImNvcmVlbGVtZW50cyIpOworICBmYWlsX2lmICh1bmxvYWRlZF9wbHVnaW4gPT0gTlVMTCwgIkZhaWxlZCB0byBmaW5kIGNvcmVlbGVtZW50cyBwbHVnaW4iKTsKKyAgZmFpbF9pZiAoR1NUX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAodW5sb2FkZWRfcGx1Z2luKSAhPSAyLAorICAgICAgIlJlZmNvdW50IG9mIHVubG9hZGVkIHBsdWdpbiBpbiByZWdpc3RyeSBpbml0aWFsbHkgc2hvdWxkIGJlIDIiKTsKKyAgR1NUX0RFQlVHICgicmVmY291bnQgJWQiLCBHU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFICh1bmxvYWRlZF9wbHVnaW4pKTsKKworICBsb2FkZWRfcGx1Z2luID0gZ3N0X3BsdWdpbl9sb2FkICh1bmxvYWRlZF9wbHVnaW4pOworICBmYWlsX2lmIChsb2FkZWRfcGx1Z2luID09IE5VTEwsICJGYWlsZWQgdG8gbG9hZCBwbHVnaW4iKTsKKworICBpZiAobG9hZGVkX3BsdWdpbiAhPSB1bmxvYWRlZF9wbHVnaW4pIHsKKyAgICBmYWlsX2lmIChHU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChsb2FkZWRfcGx1Z2luKSAhPSAyLAorICAgICAgICAiUmVmY291bnQgb2YgbG9hZGVkIHBsdWdpbiBpbiByZWdpc3RyeSBzaG91bGQgYmUgMiIpOworICAgIEdTVF9ERUJVRyAoInJlZmNvdW50ICVkIiwgR1NUX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAobG9hZGVkX3BsdWdpbikpOworICAgIGZhaWxfaWYgKEdTVF9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKHVubG9hZGVkX3BsdWdpbikgIT0gMSwKKyAgICAgICAgIlJlZmNvdW50IG9mIHJlcGxhY2VkIHBsdWdpbiBzaG91bGQgYmUgMSIpOworICAgIEdTVF9ERUJVRyAoInJlZmNvdW50ICVkIiwgR1NUX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAodW5sb2FkZWRfcGx1Z2luKSk7CisgIH0KKworICBnc3Rfb2JqZWN0X3VucmVmICh1bmxvYWRlZF9wbHVnaW4pOworICBnc3Rfb2JqZWN0X3VucmVmIChsb2FkZWRfcGx1Z2luKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9yZWdpc3RyeV9nZXRfcGx1Z2luX2xpc3QpCit7CisgIEdMaXN0ICpsaXN0OworICBHc3RQbHVnaW4gKnBsdWdpbjsKKworICBwbHVnaW4gPSBnc3RfZGVmYXVsdF9yZWdpc3RyeV9maW5kX3BsdWdpbiAoImNvcmVlbGVtZW50cyIpOworICBmYWlsX2lmIChHU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChwbHVnaW4pICE9IDIsCisgICAgICAiUmVmY291bnQgb2YgcGx1Z2luIGluIHJlZ2lzdHJ5IHNob3VsZCBiZSAyIik7CisKKyAgbGlzdCA9IGdzdF9yZWdpc3RyeV9nZXRfcGx1Z2luX2xpc3QgKGdzdF9yZWdpc3RyeV9nZXRfZGVmYXVsdCAoKSk7CisKKyAgZmFpbF9pZiAoR1NUX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAocGx1Z2luKSAhPSAzLAorICAgICAgIlJlZmNvdW50IG9mIHBsdWdpbiBpbiByZWdpc3RyeStsaXN0IHNob3VsZCBiZSAzIik7CisKKyAgZ3N0X3BsdWdpbl9saXN0X2ZyZWUgKGxpc3QpOworCisgIGZhaWxfaWYgKEdTVF9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKHBsdWdpbikgIT0gMiwKKyAgICAgICJSZWZjb3VudCBvZiBwbHVnaW4gaW4gYWZ0ZXIgbGlzdCBmcmVlIHNob3VsZCBiZSAyIik7CisKKyAgZ3N0X29iamVjdF91bnJlZiAocGx1Z2luKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9maW5kX3BsdWdpbikKK3sKKyAgR3N0UGx1Z2luICpwbHVnaW47CisKKyAgcGx1Z2luID0gZ3N0X3JlZ2lzdHJ5X2ZpbmRfcGx1Z2luIChnc3RfcmVnaXN0cnlfZ2V0X2RlZmF1bHQgKCksCisgICAgICAiY29yZWVsZW1lbnRzIik7CisgIGZhaWxfaWYgKHBsdWdpbiA9PSBOVUxMLCAiRmFpbGVkIHRvIGZpbmQgY29yZWVsZW1lbnRzIHBsdWdpbiIpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwbHVnaW4sICJwbHVnaW4iLCAyKTsKKworICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChwbHVnaW4tPmRlc2MudmVyc2lvbiwgVkVSU0lPTik7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHBsdWdpbi0+ZGVzYy5saWNlbnNlLCAiTEdQTCIpOworICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChwbHVnaW4tPmRlc2Muc291cmNlLCAiZ3N0cmVhbWVyIik7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHBsdWdpbi0+ZGVzYy5wYWNrYWdlLCBHU1RfUEFDS0FHRV9OQU1FKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAocGx1Z2luLT5kZXNjLm9yaWdpbiwgR1NUX1BBQ0tBR0VfT1JJR0lOKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChwbHVnaW4pOworfQorCitHU1RfRU5EX1RFU1Q7CisKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfZmluZF9mZWF0dXJlKQoreworICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlOworCisgIGZlYXR1cmUgPSBnc3RfcmVnaXN0cnlfZmluZF9mZWF0dXJlIChnc3RfcmVnaXN0cnlfZ2V0X2RlZmF1bHQgKCksCisgICAgICAiaWRlbnRpdHkiLCBHU1RfVFlQRV9FTEVNRU5UX0ZBQ1RPUlkpOworICBmYWlsX2lmIChmZWF0dXJlID09IE5VTEwsICJGYWlsZWQgdG8gZmluZCBpZGVudGl0eSBlbGVtZW50IGZhY3RvcnkiKTsKKyAgZmFpbF9pZiAoc3RyY21wIChmZWF0dXJlLT5wbHVnaW5fbmFtZSwgImNvcmVlbGVtZW50cyIpLAorICAgICAgIkV4cGVjdGVkIGlkZW50aXR5IHRvIGJlIGZyb20gY29yZWVsZW1lbnRzIHBsdWdpbiIpOworCisgIGZhaWxfaWYgKEdTVF9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKGZlYXR1cmUpICE9IDIsCisgICAgICAiUmVmY291bnQgb2YgZmVhdHVyZSBzaG91bGQgYmUgMiIpOworICBHU1RfREVCVUcgKCJyZWZjb3VudCAlZCIsIEdTVF9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKGZlYXR1cmUpKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChmZWF0dXJlKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9maW5kX2VsZW1lbnQpCit7CisgIEdzdEVsZW1lbnRGYWN0b3J5ICplbGVtZW50X2ZhY3Rvcnk7CisKKyAgZWxlbWVudF9mYWN0b3J5ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9maW5kICgiaWRlbnRpdHkiKTsKKyAgZmFpbF9pZiAoZWxlbWVudF9mYWN0b3J5ID09IE5VTEwsICJGYWlsZWQgdG8gZmluZCBpZGVudGl0eSBlbGVtZW50IGZhY3RvcnkiKTsKKworICBmYWlsX2lmIChHU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChlbGVtZW50X2ZhY3RvcnkpICE9IDIsCisgICAgICAiUmVmY291bnQgb2YgcGx1Z2luIGluIHJlZ2lzdHJ5K2ZlYXR1cmUgc2hvdWxkIGJlIDIiKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtZW50X2ZhY3RvcnkpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKyNpZiAwCitndWludDggKgorcGVlayAoZ3BvaW50ZXIgZGF0YSwgZ2ludDY0IG9mZnNldCwgZ3VpbnQgc2l6ZSkKK3sKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK3N1Z2dlc3QgKGdwb2ludGVyIGRhdGEsIGd1aW50IHByb2JhYmlsaXR5LCBjb25zdCBHc3RDYXBzICogY2FwcykKK3sKKworfQorCitHU1RfU1RBUlRfVEVTVCAodGVzdF90eXBlZmluZCkKK3sKKyAgR3N0UGx1Z2luICpwbHVnaW47CisgIEdzdFBsdWdpbkZlYXR1cmUgKmZlYXR1cmU7CisgIEdzdFR5cGVGaW5kIHR5cGVmaW5kID0geworICAgIHBlZWssCisgICAgc3VnZ2VzdCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgR1NUX1BBRERJTkdfSU5JVAorICB9OworCisgIHBsdWdpbiA9IGdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2ZpbmRfcGx1Z2luICgidHlwZWZpbmRmdW5jdGlvbnMiKTsKKyAgZmFpbF9pZiAocGx1Z2luID09IE5VTEwsICJGYWlsZWQgdG8gZmluZCB0eXBlZmluZCBmdW5jdGlvbnMiKTsKKyAgZmFpbF9pZiAoR1NUX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAocGx1Z2luKSAhPSAyLAorICAgICAgIlJlZmNvdW50IG9mIHBsdWdpbiBpbiByZWdpc3RyeSBzaG91bGQgYmUgMiIpOworICBmYWlsX2lmIChnc3RfcGx1Z2luX2lzX2xvYWRlZCAocGx1Z2luKSwgIkV4cGVjdGVkIHBsdWdpbiB0byBiZSB1bmxvYWRlZCIpOworCisgIGZlYXR1cmUgPSBnc3RfcmVnaXN0cnlfZmluZF9mZWF0dXJlIChnc3RfcmVnaXN0cnlfZ2V0X2RlZmF1bHQgKCksCisgICAgICAiYXVkaW8veC1hdSIsIEdTVF9UWVBFX1RZUEVfRklORF9GQUNUT1JZKTsKKyAgZmFpbF9pZiAoZmVhdHVyZSA9PSBOVUxMLCAiRmFpbGVkIHRvIGZpbmQgYXVkaW8veC1hdyB0eXBlZmluZCBmYWN0b3J5Iik7CisgIGZhaWxfaWYgKGZlYXR1cmUtPnBsdWdpbiAhPSBwbHVnaW4sCisgICAgICAiRXhwZWN0ZWQgaWRlbnRpdHkgdG8gYmUgZnJvbSBjb3JlZWxlbWVudHMgcGx1Z2luIik7CisKKyAgZmFpbF9pZiAoR1NUX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAocGx1Z2luKSAhPSAzLAorICAgICAgIlJlZmNvdW50IG9mIHBsdWdpbiBpbiByZWdpc3RyeStmZWF0dXJlIHNob3VsZCBiZSAzIik7CisKKyAgZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2NhbGxfZnVuY3Rpb24gKEdTVF9UWVBFX0ZJTkRfRkFDVE9SWSAoZmVhdHVyZSksCisgICAgICAmdHlwZWZpbmQpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKGZlYXR1cmUtPnBsdWdpbik7CisKKyAgZmFpbF9pZiAoR1NUX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAocGx1Z2luKSAhPSAxLAorICAgICAgIlJlZmNvdW50IG9mIHBsdWdpbiBpbiBhZnRlciBsaXN0IGZyZWUgc2hvdWxkIGJlIDEiKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChwbHVnaW4pOworfQorCitHU1RfRU5EX1RFU1Q7CisjZW5kaWYKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfdmVyc2lvbl9jaGVja3MpCit7CisgIGZhaWxfaWYgKGdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2NoZWNrX2ZlYXR1cmVfdmVyc2lvbiAoImlkZW50aXR5IiwKKyAgICAgICAgICBHU1RfVkVSU0lPTl9NQUpPUiwgR1NUX1ZFUlNJT05fTUlOT1IsIEdTVF9WRVJTSU9OX01JQ1JPKSA9PSBGQUxTRSwKKyAgICAgICJVbmV4cGVjdGVkIHZlcnNpb24gY2hlY2sgcmVzdWx0Iik7CisKKyAgZmFpbF9pZiAoZ3N0X2RlZmF1bHRfcmVnaXN0cnlfY2hlY2tfZmVhdHVyZV92ZXJzaW9uICgiaWRlbnRpdHkiLAorICAgICAgICAgIEdTVF9WRVJTSU9OX01BSk9SICsgMSwgR1NUX1ZFUlNJT05fTUlOT1IsIEdTVF9WRVJTSU9OX01JQ1JPKSA9PSBUUlVFLAorICAgICAgIlVuZXhwZWN0ZWQgdmVyc2lvbiBjaGVjayByZXN1bHQiKTsKKworICBmYWlsX2lmIChnc3RfZGVmYXVsdF9yZWdpc3RyeV9jaGVja19mZWF0dXJlX3ZlcnNpb24gKCJpZGVudGl0eSIsCisgICAgICAgICAgR1NUX1ZFUlNJT05fTUFKT1IsIEdTVF9WRVJTSU9OX01JTk9SICsgMSwgR1NUX1ZFUlNJT05fTUlDUk8pID09IFRSVUUsCisgICAgICAiVW5leHBlY3RlZCB2ZXJzaW9uIGNoZWNrIHJlc3VsdCIpOworCisgIC8qIElmIHRoZSBuYW5vIGlzIHNldCwgdGhlbiB3ZSBleHBlY3QgdGhhdCBYLlkuWi0xLnggPj0gWC5ZLlosIHNvIHRoYXQgYQorICAgKiBkZXZlbCBwbHVnaW4gaXMgdmFsaWQgYWdhaW5zdCBhbiB1cGNvbWluZyByZWxlYXNlICovCisgIGlmIChHU1RfVkVSU0lPTl9OQU5PID4gMCkgeworICAgIGZhaWxfdW5sZXNzIChnc3RfZGVmYXVsdF9yZWdpc3RyeV9jaGVja19mZWF0dXJlX3ZlcnNpb24gKCJpZGVudGl0eSIsCisgICAgICAgICAgICBHU1RfVkVSU0lPTl9NQUpPUiwgR1NUX1ZFUlNJT05fTUlOT1IsIEdTVF9WRVJTSU9OX01JQ1JPICsgMSkgPT0KKyAgICAgICAgVFJVRSwgIlVuZXhwZWN0ZWQgdmVyc2lvbiBjaGVjayByZXN1bHQiKTsKKyAgfSBlbHNlIHsKKyAgICBmYWlsX2lmIChnc3RfZGVmYXVsdF9yZWdpc3RyeV9jaGVja19mZWF0dXJlX3ZlcnNpb24gKCJpZGVudGl0eSIsCisgICAgICAgICAgICBHU1RfVkVSU0lPTl9NQUpPUiwgR1NUX1ZFUlNJT05fTUlOT1IsIEdTVF9WRVJTSU9OX01JQ1JPICsgMSkgPT0KKyAgICAgICAgVFJVRSwgIlVuZXhwZWN0ZWQgdmVyc2lvbiBjaGVjayByZXN1bHQiKTsKKyAgfQorCisgIGlmIChHU1RfVkVSU0lPTl9NQUpPUiA+IDApIHsKKyAgICBmYWlsX2lmIChnc3RfZGVmYXVsdF9yZWdpc3RyeV9jaGVja19mZWF0dXJlX3ZlcnNpb24gKCJpZGVudGl0eSIsCisgICAgICAgICAgICBHU1RfVkVSU0lPTl9NQUpPUiAtIDEsIEdTVF9WRVJTSU9OX01JTk9SLAorICAgICAgICAgICAgR1NUX1ZFUlNJT05fTUlDUk8pID09IEZBTFNFLCAiVW5leHBlY3RlZCB2ZXJzaW9uIGNoZWNrIHJlc3VsdCIpOworICB9CisKKyAgaWYgKEdTVF9WRVJTSU9OX01JTk9SID4gMCkgeworICAgIGZhaWxfaWYgKGdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2NoZWNrX2ZlYXR1cmVfdmVyc2lvbiAoImlkZW50aXR5IiwKKyAgICAgICAgICAgIEdTVF9WRVJTSU9OX01BSk9SLCBHU1RfVkVSU0lPTl9NSU5PUiAtIDEsCisgICAgICAgICAgICBHU1RfVkVSU0lPTl9NSUNSTykgPT0gRkFMU0UsICJVbmV4cGVjdGVkIHZlcnNpb24gY2hlY2sgcmVzdWx0Iik7CisgIH0KKworICBpZiAoR1NUX1ZFUlNJT05fTUlDUk8gPiAwKSB7CisgICAgZmFpbF9pZiAoZ3N0X2RlZmF1bHRfcmVnaXN0cnlfY2hlY2tfZmVhdHVyZV92ZXJzaW9uICgiaWRlbnRpdHkiLAorICAgICAgICAgICAgR1NUX1ZFUlNJT05fTUFKT1IsIEdTVF9WRVJTSU9OX01JTk9SLAorICAgICAgICAgICAgR1NUX1ZFUlNJT05fTUlDUk8gLSAxKSA9PSBGQUxTRSwgIlVuZXhwZWN0ZWQgdmVyc2lvbiBjaGVjayByZXN1bHQiKTsKKyAgfQorCisgIGZhaWxfaWYgKGdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2NoZWNrX2ZlYXR1cmVfdmVyc2lvbiAoImVudGl0eWlkIiwKKyAgICAgICAgICBHU1RfVkVSU0lPTl9NQUpPUiwgR1NUX1ZFUlNJT05fTUlOT1IsIEdTVF9WRVJTSU9OX01JQ1JPKSA9PSBUUlVFLAorICAgICAgIlVuZXhwZWN0ZWQgdmVyc2lvbiBjaGVjayByZXN1bHQiKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgU3VpdGUgKgorZ3N0X3BsdWdpbl9zdWl0ZSAodm9pZCkKK3sKKyAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RQbHVnaW4iKTsKKyAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOworCisgIC8qIHR1cm4gb2ZmIHRpbWVvdXQgKi8KKyAgdGNhc2Vfc2V0X3RpbWVvdXQgKHRjX2NoYWluLCA2MCk7CisKKyAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7CisjaWZkZWYgR1NUX0dOVUNfQ09OU1RSVUNUT1JfREVGSU5FRAorICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfb2xkX3JlZ2lzdGVyX3N0YXRpYyk7CisjZW5kaWYKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JlZ2lzdGVyX3N0YXRpYyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9yZWdpc3RyeSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9sb2FkX2NvcmVlbGVtZW50cyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9yZWdpc3RyeV9nZXRfcGx1Z2luX2xpc3QpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZmluZF9wbHVnaW4pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZmluZF9mZWF0dXJlKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2ZpbmRfZWxlbWVudCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF92ZXJzaW9uX2NoZWNrcyk7CisgIC8vdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3R5cGVmaW5kKTsKKworICByZXR1cm4gczsKK30KKworR1NUX0NIRUNLX01BSU4gKGdzdF9wbHVnaW4pOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdHBvbGwuYyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3Rwb2xsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEyY2RhMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3Rwb2xsLmMKQEAgLTAsMCArMSwzNDEgQEAKKy8qIEdTdHJlYW1lcgorICoKKyAqIHVuaXQgdGVzdCBmb3IgR3N0UG9sbAorICoKKyAqIENvcHlyaWdodCAoQykgPDIwMDc+IFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KKworI2lmZGVmIEdfT1NfV0lOMzIKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjZGVmaW5lIEVJTlBST0dSRVNTIFdTQUVJTlBST0dSRVNTCisjZWxzZQorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorCitHU1RfU1RBUlRfVEVTVCAodGVzdF9wb2xsX3dhaXQpCit7CisgIEdzdFBvbGwgKnNldDsKKyAgR3N0UG9sbEZEIHJmZCA9IEdTVF9QT0xMX0ZEX0lOSVQ7CisgIEdzdFBvbGxGRCB3ZmQgPSBHU1RfUE9MTF9GRF9JTklUOworICBnaW50IHNvY2tzWzJdOworICBndWNoYXIgYyA9ICdBJzsKKworICBzZXQgPSBnc3RfcG9sbF9uZXcgKEZBTFNFKTsKKyAgZmFpbF9pZiAoc2V0ID09IE5VTEwsICJGYWlsZWQgdG8gY3JlYXRlIGEgR3N0UG9sbCIpOworCisjaWZkZWYgR19PU19XSU4zMgorICBmYWlsX2lmIChfcGlwZSAoc29ja3MsIDQwOTYsIF9PX0JJTkFSWSkgPCAwLCAiQ291bGQgbm90IGNyZWF0ZSBhIHBpcGUiKTsKKyNlbHNlCisgIGZhaWxfaWYgKHNvY2tldHBhaXIgKFBGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwLCBzb2NrcykgPCAwLAorICAgICAgIkNvdWxkIG5vdCBjcmVhdGUgYSBwaXBlIik7CisjZW5kaWYKKyAgcmZkLmZkID0gc29ja3NbMF07CisgIHdmZC5mZCA9IHNvY2tzWzFdOworCisgIGZhaWxfdW5sZXNzIChnc3RfcG9sbF9hZGRfZmQgKHNldCwgJnJmZCksICJDb3VsZCBub3QgYWRkIHJlYWQgZGVzY3JpcHRvciIpOworICBmYWlsX3VubGVzcyAoZ3N0X3BvbGxfZmRfY3RsX3JlYWQgKHNldCwgJnJmZCwgVFJVRSksCisgICAgICAiQ291bGQgbm90IG1hcmsgdGhlIGRlc2NyaXB0b3IgYXMgcmVhZGFibGUiKTsKKworICBmYWlsX3VubGVzcyAod3JpdGUgKHdmZC5mZCwgJmMsIDEpID09IDEsICJ3cml0ZSgpIGZhaWxlZCIpOworCisgIGZhaWxfdW5sZXNzIChnc3RfcG9sbF93YWl0IChzZXQsIEdTVF9DTE9DS19USU1FX05PTkUpID09IDEsCisgICAgICAiT25lIGRlc2NyaXB0b3Igc2hvdWxkIGJlIGF2YWlsYWJsZSIpOworICBmYWlsX3VubGVzcyAoZ3N0X3BvbGxfZmRfY2FuX3JlYWQgKHNldCwgJnJmZCksCisgICAgICAiUmVhZCBkZXNjcmlwdG9yIHNob3VsZCBiZSByZWFkYWJsZSIpOworICBmYWlsX2lmIChnc3RfcG9sbF9mZF9jYW5fd3JpdGUgKHNldCwgJnJmZCksCisgICAgICAiUmVhZCBkZXNjcmlwdG9yIHNob3VsZCBub3QgYmUgd3JpdGVhYmxlIik7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9wb2xsX2FkZF9mZCAoc2V0LCAmd2ZkKSwgIkNvdWxkIG5vdCBhZGQgd3JpdGUgZGVzY3JpcHRvciIpOworICBmYWlsX3VubGVzcyAoZ3N0X3BvbGxfZmRfY3RsX3dyaXRlIChzZXQsICZ3ZmQsIFRSVUUpLAorICAgICAgIkNvdWxkIG5vdCBtYXJrIHRoZSBkZXNjcmlwdG9yIGFzIHdyaXRlYWJsZSIpOworCisgIGZhaWxfdW5sZXNzIChnc3RfcG9sbF93YWl0IChzZXQsIEdTVF9DTE9DS19USU1FX05PTkUpID09IDIsCisgICAgICAiVHdvIGRlc2NyaXB0b3JzIHNob3VsZCBiZSBhdmFpbGFibGUiKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wb2xsX2ZkX2Nhbl9yZWFkIChzZXQsICZyZmQpLAorICAgICAgIlJlYWQgZGVzY3JpcHRvciBzaG91bGQgYmUgcmVhZGFibGUiKTsKKyAgZmFpbF9pZiAoZ3N0X3BvbGxfZmRfY2FuX3dyaXRlIChzZXQsICZyZmQpLAorICAgICAgIlJlYWQgZGVzY3JpcHRvciBzaG91bGQgbm90IGJlIHdyaXRlYWJsZSIpOworICBmYWlsX2lmIChnc3RfcG9sbF9mZF9jYW5fcmVhZCAoc2V0LCAmd2ZkKSwKKyAgICAgICJXcml0ZSBkZXNjcmlwdG9yIHNob3VsZCBub3QgYmUgcmVhZGFibGUiKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wb2xsX2ZkX2Nhbl93cml0ZSAoc2V0LCAmd2ZkKSwKKyAgICAgICJXcml0ZSBkZXNjcmlwdG9yIHNob3VsZCBiZSB3cml0ZWFibGUiKTsKKworICBmYWlsX3VubGVzcyAocmVhZCAocmZkLmZkLCAmYywgMSkgPT0gMSwgInJlYWQoKSBmYWlsZWQiKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X3BvbGxfd2FpdCAoc2V0LCBHU1RfQ0xPQ0tfVElNRV9OT05FKSA9PSAxLAorICAgICAgIk9uZSBkZXNjcmlwdG9yIHNob3VsZCBiZSBhdmFpbGFibGUiKTsKKyAgZmFpbF9pZiAoZ3N0X3BvbGxfZmRfY2FuX3JlYWQgKHNldCwgJnJmZCksCisgICAgICAiUmVhZCBkZXNjcmlwdG9yIHNob3VsZCBub3QgYmUgcmVhZGFibGUiKTsKKyAgZmFpbF9pZiAoZ3N0X3BvbGxfZmRfY2FuX3dyaXRlIChzZXQsICZyZmQpLAorICAgICAgIlJlYWQgZGVzY3JpcHRvciBzaG91bGQgbm90IGJlIHdyaXRlYWJsZSIpOworICBmYWlsX2lmIChnc3RfcG9sbF9mZF9jYW5fcmVhZCAoc2V0LCAmd2ZkKSwKKyAgICAgICJXcml0ZSBkZXNjcmlwdG9yIHNob3VsZCBub3QgYmUgcmVhZGFibGUiKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wb2xsX2ZkX2Nhbl93cml0ZSAoc2V0LCAmd2ZkKSwKKyAgICAgICJXcml0ZSBkZXNjcmlwdG9yIHNob3VsZCBiZSB3cml0ZWFibGUiKTsKKworICBnc3RfcG9sbF9mcmVlIChzZXQpOworICBjbG9zZSAoc29ja3NbMF0pOworICBjbG9zZSAoc29ja3NbMV0pOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3BvbGxfYmFzaWMpCit7CisgIEdzdFBvbGwgKnNldDsKKyAgR3N0UG9sbEZEIGZkID0gR1NUX1BPTExfRkRfSU5JVDsKKworICBmZC5mZCA9IDE7CisKKyAgc2V0ID0gZ3N0X3BvbGxfbmV3IChGQUxTRSk7CisgIGZhaWxfaWYgKHNldCA9PSBOVUxMLCAiRmFpbGVkIHRvIGNyZWF0ZSBhIEdzdFBvbGwiKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X3BvbGxfYWRkX2ZkIChzZXQsICZmZCksICJDb3VsZCBub3QgYWRkIGRlc2NyaXB0b3IiKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wb2xsX2ZkX2N0bF93cml0ZSAoc2V0LCAmZmQsIFRSVUUpLAorICAgICAgIkNvdWxkIG5vdCBtYXJrIHRoZSBkZXNjcmlwdG9yIGFzIHdyaXRlYWJsZSIpOworICBmYWlsX3VubGVzcyAoZ3N0X3BvbGxfZmRfY3RsX3JlYWQgKHNldCwgJmZkLCBUUlVFKSwKKyAgICAgICJDb3VsZCBub3QgbWFyayB0aGUgZGVzY3JpcHRvciBhcyByZWFkYWJsZSIpOworICBmYWlsX2lmIChnc3RfcG9sbF9mZF9oYXNfY2xvc2VkIChzZXQsICZmZCksCisgICAgICAiRGVzY3JpcHRvciBzaG91bGQgbm90IGJlIGNsb3NlZCIpOworICBmYWlsX2lmIChnc3RfcG9sbF9mZF9oYXNfZXJyb3IgKHNldCwgJmZkKSwKKyAgICAgICJEZXNjcmlwdG9yIHNob3VsZCBub3QgaGF2ZSBhbiBlcnJvciIpOworICBmYWlsX2lmIChnc3RfcG9sbF9mZF9jYW5fd3JpdGUgKHNldCwgJmZkKSwKKyAgICAgICJEZXNjcmlwdG9yIHNob3VsZCBub3QgYmUgd3JpdGVhYmxlIik7CisgIGZhaWxfaWYgKGdzdF9wb2xsX2ZkX2Nhbl9yZWFkIChzZXQsICZmZCksCisgICAgICAiRGVzY3JpcHRvciBzaG91bGQgbm90IGJlIHJlYWRhYmxlIik7CisgIGZhaWxfdW5sZXNzIChnc3RfcG9sbF9yZW1vdmVfZmQgKHNldCwgJmZkKSwgIkNvdWxkIG5vdCByZW1vdmUgZGVzY3JpcHRvciIpOworCisgIGZhaWxfaWYgKGdzdF9wb2xsX3JlbW92ZV9mZCAoc2V0LCAmZmQpLAorICAgICAgIkNvdWxkIHJlbW92ZSBhbHJlYWR5IHJlbW92ZWQgZGVzY3JpcHRvciIpOworCisgIGZhaWxfdW5sZXNzIChnc3RfcG9sbF93YWl0IChzZXQsIDUwICogR1NUX01TRUNPTkQpID09IDAsCisgICAgICAiV2FpdGluZyBkaWQgbm90IHRpbWVvdXQiKTsKKworICBnc3RfcG9sbF9mcmVlIChzZXQpOworCisgIHNldCA9IGdzdF9wb2xsX25ldyAoVFJVRSk7CisgIGZhaWxfaWYgKHNldCA9PSBOVUxMLCAiRmFpbGVkIHRvIGNyZWF0ZSBhIEdzdFBvbGwiKTsKKyAgZ3N0X3BvbGxfc2V0X2ZsdXNoaW5nIChzZXQsIFRSVUUpOworICBnc3RfcG9sbF9mcmVlIChzZXQpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBncG9pbnRlcgorZGVsYXllZF9zdG9wIChncG9pbnRlciBkYXRhKQoreworICBHc3RQb2xsICpzZXQgPSBkYXRhOworCisgIFRIUkVBRF9TVEFSVCAoKTsKKworICBnX3VzbGVlcCAoNTAwMDAwKTsKKworICBnc3RfcG9sbF9zZXRfZmx1c2hpbmcgKHNldCwgVFJVRSk7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3BvbGxfd2FpdF9zdG9wKQoreworICBHc3RQb2xsICpzZXQ7CisKKyAgc2V0ID0gZ3N0X3BvbGxfbmV3IChUUlVFKTsKKyAgZmFpbF9pZiAoc2V0ID09IE5VTEwsICJGYWlsZWQgdG8gY3JlYXRlIGEgR3N0UG9sbCIpOworCisgIE1BSU5fU1RBUlRfVEhSRUFEUyAoMSwgZGVsYXllZF9zdG9wLCBzZXQpOworCisgIGZhaWxfdW5sZXNzIChnc3RfcG9sbF93YWl0IChzZXQsIEdTVF9TRUNPTkQpICE9IDAsICJXYWl0aW5nIHRpbWVkIG91dCIpOworCisgIE1BSU5fU1RPUF9USFJFQURTICgpOworCisgIGdzdF9wb2xsX2ZyZWUgKHNldCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIGdwb2ludGVyCitkZWxheWVkX3Jlc3RhcnQgKGdwb2ludGVyIGRhdGEpCit7CisgIEdzdFBvbGwgKnNldCA9IGRhdGE7CisgIEdzdFBvbGxGRCBmZCA9IEdTVF9QT0xMX0ZEX0lOSVQ7CisKKyAgZmQuZmQgPSAxOworCisgIFRIUkVBRF9TVEFSVCAoKTsKKworICBnX3VzbGVlcCAoNTAwMDAwKTsKKworICBnc3RfcG9sbF9hZGRfZmQgKHNldCwgJmZkKTsKKyAgZ3N0X3BvbGxfZmRfY3RsX3dyaXRlIChzZXQsICZmZCwgVFJVRSk7CisgIGdzdF9wb2xsX3Jlc3RhcnQgKHNldCk7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3BvbGxfd2FpdF9yZXN0YXJ0KQoreworICBHc3RQb2xsICpzZXQ7CisgIEdzdFBvbGxGRCBmZCA9IEdTVF9QT0xMX0ZEX0lOSVQ7CisKKyAgZmQuZmQgPSAxOworCisgIHNldCA9IGdzdF9wb2xsX25ldyAoVFJVRSk7CisgIGZhaWxfaWYgKHNldCA9PSBOVUxMLCAiRmFpbGVkIHRvIGNyZWF0ZSBhIEdzdFBvbGwiKTsKKworICBNQUlOX1NUQVJUX1RIUkVBRFMgKDEsIGRlbGF5ZWRfcmVzdGFydCwgc2V0KTsKKworICBmYWlsX3VubGVzcyAoZ3N0X3BvbGxfd2FpdCAoc2V0LCBHU1RfU0VDT05EKSA+IDAsICJXYWl0aW5nIHdhcyBpbnRlcnJ1cHRlZCIpOworICBmYWlsX3VubGVzcyAoZ3N0X3BvbGxfZmRfY2FuX3dyaXRlIChzZXQsICZmZCksCisgICAgICAiV3JpdGUgZGVzY3JpcHRvciBzaG91bGQgYmUgd3JpdGVhYmxlIik7CisKKyAgTUFJTl9TVE9QX1RIUkVBRFMgKCk7CisKKyAgZ3N0X3BvbGxfZnJlZSAoc2V0KTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgZ3BvaW50ZXIKK2RlbGF5ZWRfZmx1c2ggKGdwb2ludGVyIGRhdGEpCit7CisgIEdzdFBvbGwgKnNldCA9IGRhdGE7CisKKyAgVEhSRUFEX1NUQVJUICgpOworCisgIGdfdXNsZWVwICg1MDAwMDApOworICBnc3RfcG9sbF9zZXRfZmx1c2hpbmcgKHNldCwgVFJVRSk7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3BvbGxfd2FpdF9mbHVzaCkKK3sKKyAgR3N0UG9sbCAqc2V0OworCisgIHNldCA9IGdzdF9wb2xsX25ldyAoVFJVRSk7CisgIGZhaWxfaWYgKHNldCA9PSBOVUxMLCAiRmFpbGVkIHRvIGNyZWF0ZSBhIEdzdFBvbGwiKTsKKworICBnc3RfcG9sbF9zZXRfZmx1c2hpbmcgKHNldCwgVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfcG9sbF93YWl0IChzZXQsIEdTVF9TRUNPTkQpID09IC0xICYmIGVycm5vID09IEVCVVNZLAorICAgICAgIldhaXRpbmcgd2FzIG5vdCBmbHVzaGVkIik7CisgIGZhaWxfdW5sZXNzIChnc3RfcG9sbF93YWl0IChzZXQsIEdTVF9TRUNPTkQpID09IC0xICYmIGVycm5vID09IEVCVVNZLAorICAgICAgIldhaXRpbmcgd2FzIG5vdCBmbHVzaGVkIik7CisKKyAgZ3N0X3BvbGxfc2V0X2ZsdXNoaW5nIChzZXQsIEZBTFNFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wb2xsX3dhaXQgKHNldCwgR1NUX1NFQ09ORCkgPT0gMCwgIldhaXRpbmcgZGlkIG5vdCB0aW1lb3V0Iik7CisKKyAgTUFJTl9TVEFSVF9USFJFQURTICgxLCBkZWxheWVkX2ZsdXNoLCBzZXQpOworCisgIGZhaWxfdW5sZXNzIChnc3RfcG9sbF93YWl0IChzZXQsIEdTVF9TRUNPTkQpID09IC0xICYmIGVycm5vID09IEVCVVNZLAorICAgICAgIldhaXRpbmcgd2FzIG5vdCBmbHVzaGVkIik7CisgIGZhaWxfdW5sZXNzIChnc3RfcG9sbF93YWl0IChzZXQsIEdTVF9TRUNPTkQpID09IC0xICYmIGVycm5vID09IEVCVVNZLAorICAgICAgIldhaXRpbmcgd2FzIG5vdCBmbHVzaGVkIik7CisKKyAgZ3N0X3BvbGxfc2V0X2ZsdXNoaW5nIChzZXQsIEZBTFNFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wb2xsX3dhaXQgKHNldCwgR1NUX1NFQ09ORCkgPT0gMCwgIldhaXRpbmcgZGlkIG5vdCB0aW1lb3V0Iik7CisKKyAgTUFJTl9TVE9QX1RIUkVBRFMgKCk7CisKKyAgZ3N0X3BvbGxfZnJlZSAoc2V0KTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgZ3BvaW50ZXIKK2RlbGF5ZWRfY29udHJvbCAoZ3BvaW50ZXIgZGF0YSkKK3sKKyAgR3N0UG9sbCAqc2V0ID0gZGF0YTsKKyAgR3N0UG9sbEZEIGZkID0gR1NUX1BPTExfRkRfSU5JVDsKKworICBmZC5mZCA9IDE7CisKKyAgVEhSRUFEX1NUQVJUICgpOworCisgIGdfdXNsZWVwICg1MDAwMDApOworCisgIGdzdF9wb2xsX2FkZF9mZCAoc2V0LCAmZmQpOworICBnc3RfcG9sbF9mZF9jdGxfd3JpdGUgKHNldCwgJmZkLCBUUlVFKTsKKyAgZ3N0X3BvbGxfcmVzdGFydCAoc2V0KTsKKworICBUSFJFQURfU1lOQ0hST05JWkUgKCk7CisKKyAgZ191c2xlZXAgKDUwMDAwMCk7CisKKyAgZ3N0X3BvbGxfYWRkX2ZkIChzZXQsICZmZCk7CisgIGdzdF9wb2xsX2ZkX2N0bF93cml0ZSAoc2V0LCAmZmQsIFRSVUUpOworICBnc3RfcG9sbF9yZXN0YXJ0IChzZXQpOworCisgIHJldHVybiBOVUxMOworfQorCitHU1RfU1RBUlRfVEVTVCAodGVzdF9wb2xsX2NvbnRyb2xsYWJsZSkKK3sKKyAgR3N0UG9sbCAqc2V0OworICBHc3RQb2xsRkQgZmQgPSBHU1RfUE9MTF9GRF9JTklUOworCisgIGZkLmZkID0gMTsKKworICBzZXQgPSBnc3RfcG9sbF9uZXcgKEZBTFNFKTsKKyAgZmFpbF9pZiAoc2V0ID09IE5VTEwsICJGYWlsZWQgdG8gY3JlYXRlIGEgR3N0UG9sbCIpOworCisgIE1BSU5fU1RBUlRfVEhSRUFEUyAoMSwgZGVsYXllZF9jb250cm9sLCBzZXQpOworCisgIGZhaWxfdW5sZXNzIChnc3RfcG9sbF93YWl0IChzZXQsIEdTVF9TRUNPTkQpID09IDAsICJXYWl0aW5nIGRpZCBub3QgdGltZW91dCIpOworCisgIGZhaWxfdW5sZXNzIChnc3RfcG9sbF9yZW1vdmVfZmQgKHNldCwgJmZkKSwgIkNvdWxkIG5vdCByZW1vdmUgZGVzY3JpcHRvciIpOworICBmYWlsX3VubGVzcyAoZ3N0X3BvbGxfc2V0X2NvbnRyb2xsYWJsZSAoc2V0LCBUUlVFKSwKKyAgICAgICJDb3VsZCBub3QgbWFrZSB0aGUgc2V0IGNvbnRyb2xsYWJsZSIpOworCisgIE1BSU5fU1lOQ0hST05JWkUgKCk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9wb2xsX3dhaXQgKHNldCwgR1NUX1NFQ09ORCkgPiAwLCAiV2FpdGluZyB3YXMgaW50ZXJydXB0ZWQiKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wb2xsX2ZkX2Nhbl93cml0ZSAoc2V0LCAmZmQpLAorICAgICAgIldyaXRlIGRlc2NyaXB0b3Igc2hvdWxkIGJlIHdyaXRlYWJsZSIpOworCisgIE1BSU5fU1RPUF9USFJFQURTICgpOworCisgIGdzdF9wb2xsX2ZyZWUgKHNldCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIFN1aXRlICoKK2dzdF9wb2xsX3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdFBvbGwiKTsKKyAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOworCisgIC8qIHR1cm4gb2ZmIHRpbWVvdXQgKi8KKyAgdGNhc2Vfc2V0X3RpbWVvdXQgKHRjX2NoYWluLCA2MCk7CisKKyAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wb2xsX2Jhc2ljKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BvbGxfd2FpdCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wb2xsX3dhaXRfc3RvcCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wb2xsX3dhaXRfcmVzdGFydCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wb2xsX3dhaXRfZmx1c2gpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcG9sbF9jb250cm9sbGFibGUpOworCisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoZ3N0X3BvbGwpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdHByZXNldC5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdHByZXNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNjI0YTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9nc3QvZ3N0cHJlc2V0LmMKQEAgLTAsMCArMSwzMDMgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZCBpdHMgc3Vic2lkYXJ5KC1pZXMpCisgKiAgICAgICAgICAgICAgIGNvbnRhY3Q6IDxzdGVmYW4ua29zdEBub2tpYS5jb20+CisgKgorICogZ3N0cHJlc2V0LmM6IFVuaXQgdGVzdCBmb3IgR3N0UHJlc2V0CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitzdGF0aWMgR1R5cGUgZ3N0X3ByZXNldF90ZXN0X2dldF90eXBlICh2b2lkKTsKKworI2RlZmluZSBHU1RfVFlQRV9QUkVTRVRfVEVTVCAgICAgICAgICAgIChnc3RfcHJlc2V0X3Rlc3RfZ2V0X3R5cGUgKCkpCisjZGVmaW5lIEdTVF9QUkVTRVRfVEVTVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfUFJFU0VUX1RFU1QsIEdzdFByZXNldFRlc3QpKQorI2RlZmluZSBHU1RfUFJFU0VUX1RFU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfUFJFU0VUX1RFU1QsIEdzdFByZXNldFRlc3RDbGFzcykpCisjZGVmaW5lIEdTVF9JU19QUkVTRVRfVEVTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfUFJFU0VUX1RFU1QpKQorI2RlZmluZSBHU1RfSVNfUFJFU0VUX1RFU1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfUFJFU0VUX1RFU1QpKQorI2RlZmluZSBHU1RfUFJFU0VUX1RFU1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfUFJFU0VUX1RFU1QsIEdzdFByZXNldFRlc3RDbGFzcykpCisjZGVmaW5lIEdTVF9QUkVTRVRfVEVTVF9OQU1FICAgICAgICAgICAgInByZXNldC10ZXN0IgorCitlbnVtCit7CisgIFBST1BfVEVTVCA9IDEsCit9OworCit0eXBlZGVmIHN0cnVjdCBfR3N0UHJlc2V0VGVzdAoreworICBHc3RFbGVtZW50IHBhcmVudDsKKworICBnaW50IHRlc3Q7Cit9IEdzdFByZXNldFRlc3Q7CisKK3R5cGVkZWYgc3RydWN0IF9Hc3RQcmVzZXRUZXN0Q2xhc3MKK3sKKyAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK30gR3N0UHJlc2V0VGVzdENsYXNzOworCitzdGF0aWMgdm9pZAorZ3N0X3ByZXNldF90ZXN0X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlfaWQsCisgICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgR3N0UHJlc2V0VGVzdCAqc2VsZiA9IEdTVF9QUkVTRVRfVEVTVCAob2JqZWN0KTsKKworICBzd2l0Y2ggKHByb3BlcnR5X2lkKSB7CisgICAgY2FzZSBQUk9QX1RFU1Q6CisgICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBzZWxmLT50ZXN0KTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcGVydHlfaWQsIHBzcGVjKTsKKyAgICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfcHJlc2V0X3Rlc3Rfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wZXJ0eV9pZCwKKyAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQoreworICBHc3RQcmVzZXRUZXN0ICpzZWxmID0gR1NUX1BSRVNFVF9URVNUIChvYmplY3QpOworCisgIHN3aXRjaCAocHJvcGVydHlfaWQpIHsKKyAgICBjYXNlIFBST1BfVEVTVDoKKyAgICAgIHNlbGYtPnRlc3QgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKKyAgICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfcHJlc2V0X3Rlc3RfY2xhc3NfaW5pdCAoR09iamVjdENsYXNzICoga2xhc3MpCit7CisgIGtsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfcHJlc2V0X3Rlc3Rfc2V0X3Byb3BlcnR5OworICBrbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3ByZXNldF90ZXN0X2dldF9wcm9wZXJ0eTsKKworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChrbGFzcywgUFJPUF9URVNULAorICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInRlc3QiLAorICAgICAgICAgICJ0ZXN0IHByb3AiLAorICAgICAgICAgICJ0ZXN0IHBhcmFtZXRlciBmb3IgcHJlc2V0IHRlc3QiLAorICAgICAgICAgIEdfTUlOSU5ULCBHX01BWElOVCwgMCwgR19QQVJBTV9SRUFEV1JJVEUpKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF9wcmVzZXRfdGVzdF9iYXNlX2luaXQgKEdzdFByZXNldFRlc3RDbGFzcyAqIGtsYXNzKQoreworICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOworCisgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZSAoZWxlbWVudF9jbGFzcywKKyAgICAgICJFbGVtZW50IGZvciB1bml0IHRlc3RzIiwKKyAgICAgICJUZXN0aW5nIiwgIlVzZSBpbiB1bml0IHRlc3RzIiwgIlN0ZWZhbiBLb3N0IDxzdGVmYW4ua29zdEBub2tpYS5jb20+Iik7Cit9CisKK3N0YXRpYyBHVHlwZQorZ3N0X3ByZXNldF90ZXN0X2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgdm9sYXRpbGUgZ3NpemUgcHJlc2V0X3Rlc3RfdHlwZSA9IDA7CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmcHJlc2V0X3Rlc3RfdHlwZSkpIHsKKyAgICBHVHlwZSB0eXBlOworICAgIGNvbnN0IEdUeXBlSW5mbyBpbmZvID0geworICAgICAgc2l6ZW9mIChHc3RQcmVzZXRUZXN0Q2xhc3MpLAorICAgICAgKEdCYXNlSW5pdEZ1bmMpIGdzdF9wcmVzZXRfdGVzdF9iYXNlX2luaXQsICAgICAgICAvKiBiYXNlX2luaXQgKi8KKyAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogYmFzZV9maW5hbGl6ZSAqLworICAgICAgKEdDbGFzc0luaXRGdW5jKSBnc3RfcHJlc2V0X3Rlc3RfY2xhc3NfaW5pdCwgICAgICAvKiBjbGFzc19pbml0ICovCisgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGNsYXNzX2ZpbmFsaXplICovCisgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGNsYXNzX2RhdGEgKi8KKyAgICAgIHNpemVvZiAoR3N0UHJlc2V0VGVzdCksCisgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5fcHJlYWxsb2NzICovCisgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGluc3RhbmNlX2luaXQgKi8KKyAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgLyogdmFsdWVfdGFibGUgKi8KKyAgICB9OworICAgIGNvbnN0IEdJbnRlcmZhY2VJbmZvIHByZXNldF9pbnRlcmZhY2VfaW5mbyA9IHsKKyAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogaW50ZXJmYWNlX2luaXQgKi8KKyAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogaW50ZXJmYWNlX2ZpbmFsaXplICovCisgICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgIC8qIGludGVyZmFjZV9kYXRhICovCisgICAgfTsKKyAgICB0eXBlID0gZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RZUEVfRUxFTUVOVCwgIkdzdFByZXNldFRlc3QiLCAmaW5mbywgMCk7CisgICAgZ190eXBlX2FkZF9pbnRlcmZhY2Vfc3RhdGljICh0eXBlLCBHU1RfVFlQRV9QUkVTRVQsICZwcmVzZXRfaW50ZXJmYWNlX2luZm8pOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmcHJlc2V0X3Rlc3RfdHlwZSwgdHlwZSk7CisgIH0KKyAgcmV0dXJuIHByZXNldF90ZXN0X3R5cGU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZ3N0X3ByZXNldF90ZXN0X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCit7CisgIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sIEdTVF9QUkVTRVRfVEVTVF9OQU1FLCBHU1RfUkFOS19OT05FLAorICAgICAgR1NUX1RZUEVfUFJFU0VUX1RFU1QpOworICByZXR1cm4gVFJVRTsKK30KKworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9jaGVjaykKK3sKKyAgR3N0RWxlbWVudCAqZWxlbTsKKworICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlIChHU1RfUFJFU0VUX1RFU1RfTkFNRSwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChHU1RfSVNfUFJFU0VUIChlbGVtKSk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAoZWxlbSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfbG9hZCkKK3sKKyAgR3N0RWxlbWVudCAqZWxlbTsKKyAgZ2Jvb2xlYW4gcmVzOworCisgIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKEdTVF9QUkVTRVRfVEVTVF9OQU1FLCBOVUxMKTsKKyAgcmVzID0gZ3N0X3ByZXNldF9sb2FkX3ByZXNldCAoR1NUX1BSRVNFVCAoZWxlbSksICJkb2VzLW5vdC1leGlzdCIpOworICBmYWlsX3VubGVzcyAoIXJlcyk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAoZWxlbSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfYWRkKQoreworICBHc3RFbGVtZW50ICplbGVtOworICBnYm9vbGVhbiByZXM7CisgIGdpbnQgdmFsOworCisgIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKEdTVF9QUkVTRVRfVEVTVF9OQU1FLCBOVUxMKTsKKyAgZ19vYmplY3Rfc2V0IChlbGVtLCAidGVzdCIsIDUsIE5VTEwpOworCisgIHJlcyA9IGdzdF9wcmVzZXRfc2F2ZV9wcmVzZXQgKEdTVF9QUkVTRVQgKGVsZW0pLCAidGVzdCIpOworICBmYWlsX3VubGVzcyAocmVzKTsKKworICByZXMgPSBnc3RfcHJlc2V0X2xvYWRfcHJlc2V0IChHU1RfUFJFU0VUIChlbGVtKSwgInRlc3QiKTsKKyAgZmFpbF91bmxlc3MgKHJlcyk7CisgIGdfb2JqZWN0X2dldCAoZWxlbSwgInRlc3QiLCAmdmFsLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKHZhbCA9PSA1KTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtKTsKK30KKworR1NUX0VORF9URVNUOworCisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2RlbCkKK3sKKyAgR3N0RWxlbWVudCAqZWxlbTsKKyAgZ2Jvb2xlYW4gcmVzOworCisgIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKEdTVF9QUkVTRVRfVEVTVF9OQU1FLCBOVUxMKTsKKyAgcmVzID0gZ3N0X3ByZXNldF9zYXZlX3ByZXNldCAoR1NUX1BSRVNFVCAoZWxlbSksICJ0ZXN0Iik7CisgIGZhaWxfdW5sZXNzIChyZXMpOworCisgIHJlcyA9IGdzdF9wcmVzZXRfZGVsZXRlX3ByZXNldCAoR1NUX1BSRVNFVCAoZWxlbSksICJ0ZXN0Iik7CisgIGZhaWxfdW5sZXNzIChyZXMpOworCisgIHJlcyA9IGdzdF9wcmVzZXRfbG9hZF9wcmVzZXQgKEdTVF9QUkVTRVQgKGVsZW0pLCAidGVzdCIpOworICBmYWlsX3VubGVzcyAoIXJlcyk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAoZWxlbSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfdHdvX2luc3RhbmNlcykKK3sKKyAgR3N0RWxlbWVudCAqZWxlbTEsICplbGVtMjsKKyAgZ2Jvb2xlYW4gcmVzOworICBnaW50IHZhbDsKKworICBlbGVtMSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoR1NUX1BSRVNFVF9URVNUX05BTUUsIE5VTEwpOworICBnX29iamVjdF9zZXQgKGVsZW0xLCAidGVzdCIsIDUsIE5VTEwpOworCisgIHJlcyA9IGdzdF9wcmVzZXRfc2F2ZV9wcmVzZXQgKEdTVF9QUkVTRVQgKGVsZW0xKSwgInRlc3QiKTsKKyAgZmFpbF91bmxlc3MgKHJlcyk7CisKKyAgZWxlbTIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKEdTVF9QUkVTRVRfVEVTVF9OQU1FLCBOVUxMKTsKKyAgcmVzID0gZ3N0X3ByZXNldF9sb2FkX3ByZXNldCAoR1NUX1BSRVNFVCAoZWxlbTIpLCAidGVzdCIpOworICBmYWlsX3VubGVzcyAocmVzKTsKKyAgZ19vYmplY3RfZ2V0IChlbGVtMiwgInRlc3QiLCAmdmFsLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKHZhbCA9PSA1KTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtMSk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0yKTsKK30KKworR1NUX0VORF9URVNUOworCisKK3N0YXRpYyB2b2lkCityZW1vdmVfcHJlc2V0X2ZpbGUgKHZvaWQpCit7CisgIGdjaGFyICpwcmVzZXRfZmlsZV9uYW1lOworCisgIHByZXNldF9maWxlX25hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lIChnX2dldF91c2VyX2RhdGFfZGlyICgpLAorICAgICAgImdzdHJlYW1lci0iIEdTVF9NQUpPUk1JTk9SLCAicHJlc2V0cyIsICJHc3RQcmVzZXRUZXN0LnBycyIsIE5VTEwpOworICBnX3VubGluayAocHJlc2V0X2ZpbGVfbmFtZSk7CisgIGdfZnJlZSAocHJlc2V0X2ZpbGVfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3NldHVwICh2b2lkKQoreworICByZW1vdmVfcHJlc2V0X2ZpbGUgKCk7CisgIGdzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljIChHU1RfVkVSU0lPTl9NQUpPUiwKKyAgICAgIEdTVF9WRVJTSU9OX01JTk9SLAorICAgICAgImdzdC10ZXN0IiwKKyAgICAgICJwcmVzZXQgdGVzdCBwbHVnaW4iLAorICAgICAgZ3N0X3ByZXNldF90ZXN0X3BsdWdpbl9pbml0LAorICAgICAgVkVSU0lPTiwgR1NUX0xJQ0VOU0UsIFBBQ0tBR0UsIEdTVF9QQUNLQUdFX05BTUUsIEdTVF9QQUNLQUdFX09SSUdJTik7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3RlYXJkb3duICh2b2lkKQoreworICByZW1vdmVfcHJlc2V0X2ZpbGUgKCk7Cit9CisKKworc3RhdGljIFN1aXRlICoKK2dzdF9wcmVzZXRfc3VpdGUgKHZvaWQpCit7CisgIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0UHJlc2V0Iik7CisgIFRDYXNlICp0YyA9IHRjYXNlX2NyZWF0ZSAoInByZXNldCIpOworICBnY2hhciAqZ3N0X2RpcjsKKyAgZ2Jvb2xlYW4gY2FuX3dyaXRlID0gRkFMU0U7CisKKyAgLyogY2hlY2sgaWYgd2UgY2FuIGNyZWF0ZSBwcmVzZXRzICovCisgIGdzdF9kaXIgPSBnX2J1aWxkX2ZpbGVuYW1lIChnX2dldF91c2VyX2RhdGFfZGlyICgpLAorICAgICAgImdzdHJlYW1lci0iIEdTVF9NQUpPUk1JTk9SLCBOVUxMKTsKKyAgY2FuX3dyaXRlID0gKGdfYWNjZXNzIChnc3RfZGlyLCBSX09LIHwgV19PSyB8IFhfT0spID09IDApOworICBnX2ZyZWUgKGdzdF9kaXIpOworCisgIHN1aXRlX2FkZF90Y2FzZSAocywgdGMpOworICB0Y2FzZV9hZGRfdGVzdCAodGMsIHRlc3RfY2hlY2spOworICB0Y2FzZV9hZGRfdGVzdCAodGMsIHRlc3RfbG9hZCk7CisgIGlmIChjYW5fd3JpdGUpIHsKKyAgICB0Y2FzZV9hZGRfdGVzdCAodGMsIHRlc3RfYWRkKTsKKyAgICB0Y2FzZV9hZGRfdGVzdCAodGMsIHRlc3RfZGVsKTsKKyAgICB0Y2FzZV9hZGRfdGVzdCAodGMsIHRlc3RfdHdvX2luc3RhbmNlcyk7CisgIH0KKyAgdGNhc2VfYWRkX3VuY2hlY2tlZF9maXh0dXJlICh0YywgdGVzdF9zZXR1cCwgdGVzdF90ZWFyZG93bik7CisKKyAgcmV0dXJuIHM7Cit9CisKK0dTVF9DSEVDS19NQUlOIChnc3RfcHJlc2V0KTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RxdWVyeS5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdHF1ZXJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM3ZWVjMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RxdWVyeS5jCkBAIC0wLDAgKzEsMjkzIEBACisvKiBHU3RyZWFtZXIKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKKyNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KK0dTVF9TVEFSVF9URVNUIChjcmVhdGVfcXVlcmllcykKK3sKKyAgR3N0UXVlcnkgKnF1ZXJ5OworCisgIC8qIFBPU0lUSU9OICovCisgIHsKKyAgICBHc3RGb3JtYXQgZm9ybWF0OworICAgIGdpbnQ2NCBwb3NpdGlvbjsKKworICAgIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19wb3NpdGlvbiAoR1NUX0ZPUk1BVF9USU1FKTsKKyAgICBmYWlsX2lmIChxdWVyeSA9PSBOVUxMKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfUE9TSVRJT04pOworCisgICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uIChxdWVyeSwgJmZvcm1hdCwgTlVMTCk7CisgICAgZmFpbF9pZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSk7CisKKyAgICBnc3RfcXVlcnlfc2V0X3Bvc2l0aW9uIChxdWVyeSwgR1NUX0ZPUk1BVF9USU1FLCAweGRlYWRiZWFmKTsKKworICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbiAocXVlcnksICZmb3JtYXQsICZwb3NpdGlvbik7CisgICAgZmFpbF9pZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSk7CisgICAgZmFpbF9pZiAocG9zaXRpb24gIT0gMHhkZWFkYmVhZik7CisKKyAgICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKKyAgfQorICAvKiBEVVJBVElPTiAqLworICB7CisgICAgR3N0Rm9ybWF0IGZvcm1hdDsKKyAgICBnaW50NjQgZHVyYXRpb247CisKKyAgICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfZHVyYXRpb24gKEdTVF9GT1JNQVRfVElNRSk7CisgICAgZmFpbF9pZiAocXVlcnkgPT0gTlVMTCk7CisgICAgZmFpbF91bmxlc3MgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX0RVUkFUSU9OKTsKKworICAgIGdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbiAocXVlcnksICZmb3JtYXQsIE5VTEwpOworICAgIGZhaWxfaWYgKGZvcm1hdCAhPSBHU1RfRk9STUFUX1RJTUUpOworCisgICAgZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbiAocXVlcnksIEdTVF9GT1JNQVRfVElNRSwgMHhkZWFkYmVhZik7CisKKyAgICBnc3RfcXVlcnlfcGFyc2VfZHVyYXRpb24gKHF1ZXJ5LCAmZm9ybWF0LCAmZHVyYXRpb24pOworICAgIGZhaWxfaWYgKGZvcm1hdCAhPSBHU1RfRk9STUFUX1RJTUUpOworICAgIGZhaWxfaWYgKGR1cmF0aW9uICE9IDB4ZGVhZGJlYWYpOworCisgICAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7CisgIH0KKyAgLyogQlVGRkVSSU5HIFJBTkdFUyAqLworICB7CisgICAgZ2ludDY0IHN0YXJ0LCBzdG9wOworCisgICAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2J1ZmZlcmluZyAoR1NUX0ZPUk1BVF9QRVJDRU5UKTsKKyAgICBmYWlsX2lmIChxdWVyeSA9PSBOVUxMKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfQlVGRkVSSU5HKTsKKworICAgIGZhaWxfdW5sZXNzIChnc3RfcXVlcnlfYWRkX2J1ZmZlcmluZ19yYW5nZSAocXVlcnksIDAsIDIwKSk7CisgICAgZmFpbF91bmxlc3MgKGdzdF9xdWVyeV9hZGRfYnVmZmVyaW5nX3JhbmdlIChxdWVyeSwgMjUsIDMwKSk7CisKKyAgICAvKiBjaGVjayBpbmNvaGVyZW50IHJhbmdlIGluc2VydGlvbiAqLworICAgIGZhaWxfaWYgKGdzdF9xdWVyeV9hZGRfYnVmZmVyaW5nX3JhbmdlIChxdWVyeSwgMTAsIDE1KSk7CisgICAgZmFpbF9pZiAoZ3N0X3F1ZXJ5X2FkZF9idWZmZXJpbmdfcmFuZ2UgKHF1ZXJ5LCA1MCwgNDApKTsKKworICAgIGZhaWxfdW5sZXNzIChnc3RfcXVlcnlfZ2V0X25fYnVmZmVyaW5nX3JhbmdlcyAocXVlcnkpID09IDIpOworCisgICAgZmFpbF91bmxlc3MgKGdzdF9xdWVyeV9wYXJzZV9udGhfYnVmZmVyaW5nX3JhbmdlIChxdWVyeSwgMCwgJnN0YXJ0LCAmc3RvcCkpOworICAgIGZhaWxfdW5sZXNzIChzdGFydCA9PSAwKTsKKyAgICBmYWlsX3VubGVzcyAoc3RvcCA9PSAyMCk7CisKKyAgICBmYWlsX3VubGVzcyAoZ3N0X3F1ZXJ5X3BhcnNlX250aF9idWZmZXJpbmdfcmFuZ2UgKHF1ZXJ5LCAxLCAmc3RhcnQsICZzdG9wKSk7CisgICAgZmFpbF91bmxlc3MgKHN0YXJ0ID09IDI1KTsKKyAgICBmYWlsX3VubGVzcyAoc3RvcCA9PSAzMCk7CisKKyAgICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKKyAgfQorICB7CisgICAgLyogRklYTUUgbWFrZSB0ZXN0cyBmb3I6CisgICAgICoKKyAgICAgKiBMQVRFTkNZCisgICAgICogSklUVEVSCisgICAgICogUkFURQorICAgICAqIFNFRUtJTkcKKyAgICAgKiBTRUdNRU5UCisgICAgICogQ09OVkVSVAorICAgICAqLworICB9CisgIC8qIFNFR01FTlQgKi8KKyAgeworICAgIGdkb3VibGUgcmF0ZTsKKyAgICBHc3RGb3JtYXQgZm9ybWF0OworICAgIGdpbnQ2NCBzdGFydCwgc3RvcDsKKworICAgIGZvcm1hdCA9IEdTVF9GT1JNQVRfQllURVM7CisgICAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X3NlZ21lbnQgKGZvcm1hdCk7CisKKyAgICBmYWlsX2lmIChxdWVyeSA9PSBOVUxMKTsKKyAgICBmYWlsX3VubGVzcyAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfU0VHTUVOVCk7CisKKyAgICBnc3RfcXVlcnlfcGFyc2Vfc2VnbWVudCAocXVlcnksICZyYXRlLCAmZm9ybWF0LCAmc3RhcnQsICZzdG9wKTsKKworICAgIC8qIHNlZSBpZiBlbXB0eSBnaXZlcyB1bmRlZmluZWQgZm9ybWF0cyAqLworICAgIGZhaWxfaWYgKHJhdGUgIT0gMC4wKTsKKyAgICBmYWlsX2lmIChmb3JtYXQgIT0gR1NUX0ZPUk1BVF9CWVRFUyk7CisgICAgZmFpbF9pZiAoc3RhcnQgIT0gLTEpOworICAgIGZhaWxfaWYgKHN0b3AgIT0gLTEpOworCisgICAgLyogY2hhbmdlIGFsbCB2YWx1ZXMgKi8KKyAgICBnc3RfcXVlcnlfc2V0X3NlZ21lbnQgKHF1ZXJ5LCAyLjAsIEdTVF9GT1JNQVRfVElNRSwgMSAqIEdTVF9TRUNPTkQsCisgICAgICAgIDMgKiBHU1RfU0VDT05EKTsKKworICAgIGdzdF9xdWVyeV9wYXJzZV9zZWdtZW50IChxdWVyeSwgJnJhdGUsICZmb3JtYXQsICZzdGFydCwgJnN0b3ApOworCisgICAgLyogc2VlIGlmIHRoZSB2YWx1ZXMgd2VyZSBjaGFuZ2VkICovCisgICAgZmFpbF9pZiAocmF0ZSAhPSAyLjApOworICAgIGZhaWxfaWYgKGZvcm1hdCAhPSBHU1RfRk9STUFUX1RJTUUpOworICAgIGZhaWxfaWYgKHN0YXJ0ICE9IDEgKiBHU1RfU0VDT05EKTsKKyAgICBmYWlsX2lmIChzdG9wICE9IDMgKiBHU1RfU0VDT05EKTsKKworICAgIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOworICB9CisKKyAgLyogRk9STUFUUyAqLworICB7CisgICAgZ3VpbnQgc2l6ZTsKKyAgICBHc3RGb3JtYXQgZm9ybWF0OworCisgICAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2Zvcm1hdHMgKCk7CisgICAgZmFpbF9pZiAocXVlcnkgPT0gTlVMTCk7CisgICAgZmFpbF91bmxlc3MgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX0ZPUk1BVFMpOworCisgICAgLyogZW1wdHkgKi8KKyAgICBnc3RfcXVlcnlfcGFyc2Vfbl9mb3JtYXRzIChxdWVyeSwgJnNpemUpOworICAgIGZhaWxfaWYgKHNpemUgIT0gMCk7CisKKyAgICAvKiBzZWUgaWYgZW1wdHkgZ2l2ZXMgdW5kZWZpbmVkIGZvcm1hdHMgKi8KKyAgICBnc3RfcXVlcnlfcGFyc2VfbnRoX2Zvcm1hdCAocXVlcnksIDAsICZmb3JtYXQpOworICAgIGZhaWxfaWYgKGZvcm1hdCAhPSBHU1RfRk9STUFUX1VOREVGSU5FRCk7CisgICAgZ3N0X3F1ZXJ5X3BhcnNlX250aF9mb3JtYXQgKHF1ZXJ5LCAxLCAmZm9ybWF0KTsKKyAgICBmYWlsX2lmIChmb3JtYXQgIT0gR1NUX0ZPUk1BVF9VTkRFRklORUQpOworCisgICAgLyogc2V0IDIgZm9ybWF0cyAqLworICAgIGdzdF9xdWVyeV9zZXRfZm9ybWF0cyAocXVlcnksIDIsIEdTVF9GT1JNQVRfVElNRSwgR1NUX0ZPUk1BVF9CWVRFUyk7CisKKyAgICBnc3RfcXVlcnlfcGFyc2Vfbl9mb3JtYXRzIChxdWVyeSwgJnNpemUpOworICAgIGZhaWxfaWYgKHNpemUgIT0gMik7CisKKyAgICBmb3JtYXQgPSBHU1RfRk9STUFUX1VOREVGSU5FRDsKKworICAgIGdzdF9xdWVyeV9wYXJzZV9udGhfZm9ybWF0IChxdWVyeSwgMCwgJmZvcm1hdCk7CisgICAgZmFpbF9pZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSk7CisgICAgZ3N0X3F1ZXJ5X3BhcnNlX250aF9mb3JtYXQgKHF1ZXJ5LCAxLCAmZm9ybWF0KTsKKyAgICBmYWlsX2lmIChmb3JtYXQgIT0gR1NUX0ZPUk1BVF9CWVRFUyk7CisKKyAgICAvKiBvdXQgb2YgYm91bmRzLCBzaG91bGQgcmV0dXJuIFVOREVGSU5FRCAqLworICAgIGdzdF9xdWVyeV9wYXJzZV9udGhfZm9ybWF0IChxdWVyeSwgMiwgJmZvcm1hdCk7CisgICAgZmFpbF9pZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKKworICAgIC8qIG92ZXJ3cml0ZSB3aXRoIDMgZm9ybWF0cyAqLworICAgIGdzdF9xdWVyeV9zZXRfZm9ybWF0cyAocXVlcnksIDMsIEdTVF9GT1JNQVRfVElNRSwgR1NUX0ZPUk1BVF9CWVRFUywKKyAgICAgICAgR1NUX0ZPUk1BVF9QRVJDRU5UKTsKKworICAgIGdzdF9xdWVyeV9wYXJzZV9uX2Zvcm1hdHMgKHF1ZXJ5LCAmc2l6ZSk7CisgICAgZmFpbF9pZiAoc2l6ZSAhPSAzKTsKKworICAgIGdzdF9xdWVyeV9wYXJzZV9udGhfZm9ybWF0IChxdWVyeSwgMiwgJmZvcm1hdCk7CisgICAgZmFpbF9pZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfUEVSQ0VOVCk7CisKKyAgICAvKiBjcmVhdGUgb25lIGZyb20gYW4gYXJyYXkgKi8KKyAgICB7CisgICAgICBzdGF0aWMgR3N0Rm9ybWF0IGZvcm1hdHNbXSA9IHsKKyAgICAgICAgR1NUX0ZPUk1BVF9USU1FLAorICAgICAgICBHU1RfRk9STUFUX0JZVEVTLAorICAgICAgICBHU1RfRk9STUFUX1BFUkNFTlQKKyAgICAgIH07CisgICAgICBnc3RfcXVlcnlfc2V0X2Zvcm1hdHN2IChxdWVyeSwgMywgZm9ybWF0cyk7CisKKyAgICAgIGdzdF9xdWVyeV9wYXJzZV9uX2Zvcm1hdHMgKHF1ZXJ5LCAmc2l6ZSk7CisgICAgICBmYWlsX2lmIChzaXplICE9IDMpOworCisgICAgICBnc3RfcXVlcnlfcGFyc2VfbnRoX2Zvcm1hdCAocXVlcnksIDAsICZmb3JtYXQpOworICAgICAgZmFpbF9pZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSk7CisgICAgICBnc3RfcXVlcnlfcGFyc2VfbnRoX2Zvcm1hdCAocXVlcnksIDIsICZmb3JtYXQpOworICAgICAgZmFpbF9pZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfUEVSQ0VOVCk7CisgICAgfQorICAgIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOworICB9Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfcXVlcmllcykKK3sKKyAgR3N0QmluICpiaW47CisgIEdzdEVsZW1lbnQgKnNyYywgKnNpbms7CisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKKyAgR3N0UGFkICpwYWQ7CisgIEdzdFF1ZXJ5ICpkdXIsICpwb3M7CisKKyAgZmFpbF91bmxlc3MgKChiaW4gPSAoR3N0QmluICopIGdzdF9waXBlbGluZV9uZXcgKE5VTEwpKSAhPSBOVUxMLAorICAgICAgIkNvdWxkIG5vdCBjcmVhdGUgcGlwZWxpbmUiKTsKKyAgZmFpbF91bmxlc3MgKChzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCkpICE9IE5VTEwsCisgICAgICAiQ291bGQgbm90IGNyZWF0ZSBmYWtlc3JjIik7CisgIGdfb2JqZWN0X3NldCAoc3JjLCAiZGF0YXJhdGUiLCAyMDAsICJzaXpldHlwZSIsIDIsIE5VTEwpOworCisgIGZhaWxfdW5sZXNzICgoc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCkpICE9IE5VTEwsCisgICAgICAiQ291bGQgbm90IGNyZWF0ZSBmYWtlc2luayIpOworICBnX29iamVjdF9zZXQgKHNpbmssICJzeW5jIiwgVFJVRSwgTlVMTCk7CisgIGZhaWxfdW5sZXNzICgoZHVyID0gZ3N0X3F1ZXJ5X25ld19kdXJhdGlvbiAoR1NUX0ZPUk1BVF9CWVRFUykpICE9IE5VTEwsCisgICAgICAiQ291bGQgbm90IHByZXBhcmUgZHVyYXRpb24gcXVlcnkiKTsKKyAgZmFpbF91bmxlc3MgKChwb3MgPSBnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uIChHU1RfRk9STUFUX0JZVEVTKSkgIT0gTlVMTCwKKyAgICAgICJDb3VsZCBub3QgcHJlcGFyZSBwb3NpdGlvbiBxdWVyeSIpOworCisgIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoYmluLCBzcmMpLCAiQ291bGQgbm90IGFkZCBzcmMgdG8gYmluIik7CisgIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoYmluLCBzaW5rKSwgIkNvdWxkIG5vdCBhZGQgc2luayB0byBiaW4iKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKHNyYywgc2luayksICJjb3VsZCBub3QgbGluayBzcmMgYW5kIHNpbmsiKTsKKworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pLCBHU1RfU1RBVEVfUExBWUlORyk7CisgIGZhaWxfaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUsICJGYWlsZWQgdG8gc2V0IHBpcGVsaW5lIFBMQVlJTkciKTsKKyAgaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKQorICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKGJpbiksIE5VTEwsIE5VTEwsIEdTVF9DTE9DS19USU1FX05PTkUpOworCisgIC8qIFF1ZXJ5IHRoZSBiaW4gKi8KKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3F1ZXJ5IChHU1RfRUxFTUVOVCAoYmluKSwgcG9zKSwKKyAgICAgICJDb3VsZCBub3QgcXVlcnkgcGlwZWxpbmUgcG9zaXRpb24iKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3F1ZXJ5IChHU1RfRUxFTUVOVCAoYmluKSwgZHVyKSwKKyAgICAgICJDb3VsZCBub3QgcXVlcnkgcGlwZWxpbmUgZHVyYXRpb24iKTsKKworICAvKiBRdWVyeSBlbGVtZW50cyAqLworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfcXVlcnkgKEdTVF9FTEVNRU5UIChzcmMpLCBwb3MpLAorICAgICAgIkNvdWxkIG5vdCBxdWVyeSBwb3NpdGlvbiBvZiBmYWtlc3JjIik7CisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9xdWVyeSAoR1NUX0VMRU1FTlQgKHNyYyksIHBvcyksCisgICAgICAiQ291bGQgbm90IHF1ZXJ5IGR1cmF0aW9uIG9mIGZha2VzcmMiKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfcXVlcnkgKEdTVF9FTEVNRU5UIChzaW5rKSwgcG9zKSwKKyAgICAgICJDb3VsZCBub3QgcXVlcnkgcG9zaXRpb24gb2YgZmFrZXNpbmsiKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3F1ZXJ5IChHU1RfRUxFTUVOVCAoc2luayksIHBvcyksCisgICAgICAiQ291bGQgbm90IHF1ZXJ5IGR1cmF0aW9uIG9mIGZha2VzaW5rIik7CisKKyAgLyogUXVlcnkgcGFkcyAqLworICBmYWlsX3VubGVzcyAoKHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMsICJzcmMiKSkgIT0gTlVMTCwKKyAgICAgICJDb3VsZCBub3QgZ2V0IHNvdXJjZSBwYWQgb2YgZmFrZXNyYyIpOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9xdWVyeSAocGFkLCBwb3MpLAorICAgICAgIkNvdWxkIG5vdCBxdWVyeSBwb3NpdGlvbiBvZiBmYWtlc3JjIHNyYyBwYWQiKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcXVlcnkgKHBhZCwgZHVyKSwKKyAgICAgICJDb3VsZCBub3QgcXVlcnkgZHVyYXRpb24gb2YgZmFrZXNyYyBzcmMgcGFkIik7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7CisKKyAgLyogV2UgZG9uJ3QgcXVlcnkgdGhlIHNpbmsgcGFkIG9mIGZha2VzaW5rLCBpdCBkb2Vzbid0IAorICAgKiBoYW5kbGUgZG93bnN0cmVhbSBxdWVyaWVzIGF0bSwgYnV0IGl0IG1pZ2h0IGxhdGVyLCB3aG8ga25vd3M/ICovCisKKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAoYmluKSwgR1NUX1NUQVRFX05VTEwpOworICBmYWlsX2lmIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFLCAiRmFpbGVkIHRvIHNldCBwaXBlbGluZSBOVUxMIik7CisgIGlmIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQykKKyAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pLCBOVUxMLCBOVUxMLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKworICBnc3RfcXVlcnlfdW5yZWYgKGR1cik7CisgIGdzdF9xdWVyeV91bnJlZiAocG9zKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoYmluKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgU3VpdGUgKgorZ3N0X3F1ZXJ5X3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdFF1ZXJ5Iik7CisgIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoInF1ZXJpZXMiKTsKKworICB0Y2FzZV9zZXRfdGltZW91dCAodGNfY2hhaW4sIDIwKTsKKworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBjcmVhdGVfcXVlcmllcyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9xdWVyaWVzKTsKKyAgcmV0dXJuIHM7Cit9CisKK0dTVF9DSEVDS19NQUlOIChnc3RfcXVlcnkpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdHJlZ2lzdHJ5LmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0cmVnaXN0cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTE5MGNjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hlY2svZ3N0L2dzdHJlZ2lzdHJ5LmMKQEAgLTAsMCArMSwyMTkgQEAKKy8qIEdTdHJlYW1lciB1bml0IHRlc3RzIGZvciB0aGUgcGx1Z2luIHJlZ2lzdHJ5CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitzdGF0aWMgZ2ludAorcGx1Z2luX25hbWVfY21wIChHc3RQbHVnaW4gKiBhLCBHc3RQbHVnaW4gKiBiKQoreworICBjb25zdCBnY2hhciAqbmFtZV9hID0gZ3N0X3BsdWdpbl9nZXRfbmFtZSAoYSk7CisgIGNvbnN0IGdjaGFyICpuYW1lX2IgPSBnc3RfcGx1Z2luX2dldF9uYW1lIChiKTsKKworICByZXR1cm4gc3RyY21wIChuYW1lX2EsIG5hbWVfYik7Cit9CisKK3N0YXRpYyBnaW50CitwbHVnaW5fcHRyX2NtcCAoR3N0UGx1Z2luICogYSwgR3N0UGx1Z2luICogYikKK3sKKyAgcmV0dXJuIChhID09IGIpID8gMCA6IDE7Cit9CisKK3N0YXRpYyB2b2lkCitwcmludF9wbHVnaW4gKGNvbnN0IGdjaGFyICogbWFya2VyLCBHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5LCBHc3RQbHVnaW4gKiBwbHVnaW4pCit7CisgIGNvbnN0IGdjaGFyICpuYW1lOworICBHTGlzdCAqZmVhdHVyZXMsICpmOworCisgIG5hbWUgPSBnc3RfcGx1Z2luX2dldF9uYW1lIChwbHVnaW4pOworCisgIEdTVF9ERUJVRyAoIiVzOiBwbHVnaW4gJXAgJWQgJXMgZmlsZTogJXMiLCBtYXJrZXIsIHBsdWdpbiwKKyAgICAgIEdTVF9PQkpFQ1RfUkVGQ09VTlQgKHBsdWdpbiksIG5hbWUsCisgICAgICBHU1RfU1RSX05VTEwgKGdzdF9wbHVnaW5fZ2V0X2ZpbGVuYW1lIChwbHVnaW4pKSk7CisKKyAgZmVhdHVyZXMgPSBnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9ieV9wbHVnaW4gKHJlZ2lzdHJ5LCBuYW1lKTsKKyAgZm9yIChmID0gZmVhdHVyZXM7IGYgIT0gTlVMTDsgZiA9IGYtPm5leHQpIHsKKyAgICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlOworCisgICAgZmVhdHVyZSA9IEdTVF9QTFVHSU5fRkVBVFVSRSAoZi0+ZGF0YSk7CisKKyAgICBHU1RfTE9HICgiJXM6ICAgIGZlYXR1cmU6ICVwICVzIiwgbWFya2VyLCBmZWF0dXJlLAorICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X25hbWUgKGZlYXR1cmUpKTsKKyAgfQorICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlIChmZWF0dXJlcyk7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3JlZ2lzdHJ5X3VwZGF0ZSkKK3sKKyAgR3N0UGx1Z2luRmVhdHVyZSAqb2xkX2lkZW50aXR5LCAqbmV3X2lkZW50aXR5OworICBHc3RQbHVnaW5GZWF0dXJlICpvbGRfcGlwZWxpbmUsICpuZXdfcGlwZWxpbmU7CisgIEdzdFJlZ2lzdHJ5ICpyZWdpc3RyeTsKKyAgR0xpc3QgKnBsdWdpbnNfYmVmb3JlLCAqcGx1Z2luc19hZnRlciwgKmw7CisKKyAgcmVnaXN0cnkgPSBnc3RfcmVnaXN0cnlfZ2V0X2RlZmF1bHQgKCk7CisgIGZhaWxfdW5sZXNzIChyZWdpc3RyeSAhPSBOVUxMKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocmVnaXN0cnksICJkZWZhdWx0IHJlZ2lzdHJ5IiwgMSk7CisKKyAgLyogcmVmY291bnQgc2hvdWxkIHN0aWxsIGJlIDEgdGhlIHNlY29uZCB0aW1lICovCisgIHJlZ2lzdHJ5ID0gZ3N0X3JlZ2lzdHJ5X2dldF9kZWZhdWx0ICgpOworICBmYWlsX3VubGVzcyAocmVnaXN0cnkgIT0gTlVMTCk7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHJlZ2lzdHJ5LCAiZGVmYXVsdCByZWdpc3RyeSIsIDEpOworCisgIG9sZF9pZGVudGl0eSA9IGdzdF9yZWdpc3RyeV9sb29rdXBfZmVhdHVyZSAocmVnaXN0cnksICJpZGVudGl0eSIpOworICBmYWlsX3VubGVzcyAob2xkX2lkZW50aXR5ICE9IE5VTEwsICJDYW4ndCBmaW5kIHBsdWdpbiBmZWF0dXJlICdpZGVudGl0eSciKTsKKworICBvbGRfcGlwZWxpbmUgPSBnc3RfcmVnaXN0cnlfbG9va3VwX2ZlYXR1cmUgKHJlZ2lzdHJ5LCAicGlwZWxpbmUiKTsKKyAgZmFpbF91bmxlc3MgKG9sZF9waXBlbGluZSAhPSBOVUxMLCAiQ2FuJ3QgZmluZCBwbHVnaW4gZmVhdHVyZSAncGlwZWxpbmUnIik7CisKKyAgLyogcGx1Z2lucyBzaG91bGQgaGF2ZSBhIHJlZmNvdW50IG9mIDI6IHRoZSByZWdpc3RyeSBob2xkcyBvbmUgcmVmZXJlbmNlLAorICAgKiBhbmQgdGhlIG90aGVyIG9uZSBpcyBvdXJzIGZvciB0aGUgbGlzdCAqLworICBwbHVnaW5zX2JlZm9yZSA9IGdzdF9yZWdpc3RyeV9nZXRfcGx1Z2luX2xpc3QgKHJlZ2lzdHJ5KTsKKyAgZm9yIChsID0gcGx1Z2luc19iZWZvcmU7IGw7IGwgPSBsLT5uZXh0KSB7CisgICAgR3N0UGx1Z2luICpwbHVnaW47CisKKyAgICBwbHVnaW4gPSBHU1RfUExVR0lOIChsLT5kYXRhKTsKKworICAgIHByaW50X3BsdWdpbiAoImJlZm9yZTEiLCByZWdpc3RyeSwgcGx1Z2luKTsKKworICAgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHBsdWdpbiwgInBsdWdpbiIsIDIpOworICB9CisKKyAgR1NUX0xPRyAoIiAtLS0tLSBjYWxsaW5nIGdzdF91cGRhdGVfcmVnaXN0cnkgLS0tLS0iKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X3VwZGF0ZV9yZWdpc3RyeSAoKSAhPSBGQUxTRSwgInJlZ2lzdHJ5IHVwZGF0ZSBmYWlsZWQiKTsKKworICBHU1RfTE9HICgiIC0tLS0tIHJlZ2lzdHJ5IHVwZGF0ZWQgLS0tLS0iKTsKKworICAvKiBzdGF0aWMgcGx1Z2lucyBzaG91bGQgaGF2ZSB0aGUgc2FtZSByZWZjb3VudCBhcyBiZWZvcmUgKGllLiAyKSwgd2hlcmVhcworICAgKiBmaWxlLWJhc2VkIHBsdWdpbnMgKm1heSogaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IGEgbmV3bHktY3JlYXRlZCBvYmplY3QKKyAgICogaWYgdGhlIG9uLWRpc2sgZmlsZSBjaGFuZ2VkIChhbmQgd2FzIG5vdCB5ZXQgbG9hZGVkKS4gVGhlcmUgc2hvdWxkIGJlCisgICAqIG9ubHkgb25lIHJlZmVyZW5jZSBsZWZ0IGZvciB0aG9zZSwgYW5kIHRoYXQncyBvdXJzICovCisgIGZvciAobCA9IHBsdWdpbnNfYmVmb3JlOyBsOyBsID0gbC0+bmV4dCkgeworICAgIEdzdFBsdWdpbiAqcGx1Z2luOworCisgICAgcGx1Z2luID0gR1NUX1BMVUdJTiAobC0+ZGF0YSk7CisKKyAgICBwcmludF9wbHVnaW4gKCJiZWZvcmUyIiwgcmVnaXN0cnksIHBsdWdpbik7CisKKyAgICBpZiAoZ3N0X3BsdWdpbl9nZXRfZmlsZW5hbWUgKHBsdWdpbikpIHsKKyAgICAgIC8qIGZpbGUtYmFzZWQgcGx1Z2luLiAqLworICAgICAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVF9CRVRXRUVOIChwbHVnaW4sICJwbHVnaW4iLCAxLCAyKTsKKyAgICB9IGVsc2UgeworICAgICAgLyogc3RhdGljIHBsdWdpbiAqLworICAgICAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGx1Z2luLCAicGx1Z2luIiwgMik7CisgICAgfQorICB9CisKKyAgR1NUX0xPRyAoIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworCisgIHBsdWdpbnNfYWZ0ZXIgPSBnc3RfcmVnaXN0cnlfZ2V0X3BsdWdpbl9saXN0IChyZWdpc3RyeSk7CisgIGZvciAobCA9IHBsdWdpbnNfYWZ0ZXI7IGw7IGwgPSBsLT5uZXh0KSB7CisgICAgR3N0UGx1Z2luICpwbHVnaW4gPSBHU1RfUExVR0lOIChsLT5kYXRhKTsKKworICAgIHByaW50X3BsdWdpbiAoImFmdGVyICAiLCByZWdpc3RyeSwgcGx1Z2luKTsKKworICAgIC8qIGZpbGUtYmFzZWQgcGx1Z2lucyBzaG91bGQgaGF2ZSBhIHJlZmNvdW50IG9mIDIgKG9uZSBmb3IgdGhlIHJlZ2lzdHJ5LAorICAgICAqIG9uZSBmb3IgdXMgZm9yIHRoZSBsaXN0KSBvciAzIChvbmUgZm9yIHRoZSByZWdpc3RyeSwgb25lIGZvciB0aGUgYmVmb3JlCisgICAgICogbGlzdCwgb25lIGZvciB0aGUgYWZ0ZXIgbGlzdCksIHN0YXRpYyBwbHVnaW5zIHNob3VsZCBoYXZlIG9uZSBvZiAzCisgICAgICogKG9uZSBmb3IgdGhlIHJlZ2lzdHJ5LCBvbmUgZm9yIHRoZSBuZXcgbGlzdCBhbmQgb25lIGZvciB0aGUgb2xkIGxpc3QpLgorICAgICAqIFRoaXMgaW1wbGljaXRseSBhbHNvIG1ha2VzIHN1cmUgdGhhdCBhbGwgc3RhdGljIHBsdWdpbnMgYXJlIHRoZSBzYW1lCisgICAgICogb2JqZWN0cyBhcyB0aGV5IHdlcmUgYmVmb3JlLiBOb24tc3RhdGljIG9uZXMgbWF5IG9yIG1heSBub3QgaGF2ZSBiZWVuCisgICAgICogcmVwbGFjZWQgYnkgbmV3IG9iamVjdHMgKi8KKyAgICBpZiAoZ3N0X3BsdWdpbl9nZXRfZmlsZW5hbWUgKHBsdWdpbikpIHsKKyAgICAgIGlmIChnX2xpc3RfZmluZF9jdXN0b20gKHBsdWdpbnNfYmVmb3JlLCBwbHVnaW4sCisgICAgICAgICAgICAgIChHQ29tcGFyZUZ1bmMpIHBsdWdpbl9wdHJfY21wKSAhPSBOVUxMKSB7CisgICAgICAgIC8qIFNhbWUgcGx1Z2luIGV4aXN0ZWQgaW4gdGhlIGJlZm9yZSBsaXN0LiBSZWZjb3VudCBtdXN0IGJlIDMgKi8KKyAgICAgICAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGx1Z2luLCAicGx1Z2luIiwgMyk7CisgICAgICB9IGVsc2UgeworICAgICAgICAvKiBUaGlzIHBsdWdpbiBpcyBuZXdseSBjcmVhdGVkLCBzbyBzaG91bGQgb25seSBleGlzdCBpbiB0aGUgYWZ0ZXIgbGlzdAorICAgICAgICAgKiBhbmQgdGhlIHJlZ2lzdHJ5OiBSZWZjb3VudCBtdXN0IGJlIDIgKi8KKyAgICAgICAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGx1Z2luLCAicGx1Z2luIiwgMik7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHBsdWdpbiwgInBsdWdpbiIsIDMpOworICAgIH0KKyAgfQorCisgIC8qIGNoZWNrIHRoYXQgd2Ugc3RpbGwgaGF2ZSBhbGwgcGx1Z2lucyBpbiB0aGUgbmV3IGxpc3QgdGhhdCB3ZSBoYWQgYmVmb3JlICovCisgIGZvciAobCA9IHBsdWdpbnNfYWZ0ZXI7IGw7IGwgPSBsLT5uZXh0KSB7CisgICAgR3N0UGx1Z2luICpwbHVnaW47CisKKyAgICBwbHVnaW4gPSBHU1RfUExVR0lOIChsLT5kYXRhKTsKKworICAgIGZhaWxfdW5sZXNzIChnX2xpc3RfZmluZF9jdXN0b20gKHBsdWdpbnNfYmVmb3JlLCBwbHVnaW4sCisgICAgICAgICAgICAoR0NvbXBhcmVGdW5jKSBwbHVnaW5fbmFtZV9jbXApICE9IE5VTEwsCisgICAgICAgICJQbHVnaW4gJXMgaXMgaW4gbmV3IGxpc3QgYnV0IG5vdCBpbiBvbGQgb25lPyEiLAorICAgICAgICBnc3RfcGx1Z2luX2dldF9uYW1lIChwbHVnaW4pKTsKKyAgfQorICBmb3IgKGwgPSBwbHVnaW5zX2JlZm9yZTsgbDsgbCA9IGwtPm5leHQpIHsKKyAgICBHc3RQbHVnaW4gKnBsdWdpbjsKKworICAgIHBsdWdpbiA9IEdTVF9QTFVHSU4gKGwtPmRhdGEpOworICAgIGZhaWxfdW5sZXNzIChnX2xpc3RfZmluZF9jdXN0b20gKHBsdWdpbnNfYWZ0ZXIsIHBsdWdpbiwKKyAgICAgICAgICAgIChHQ29tcGFyZUZ1bmMpIHBsdWdpbl9uYW1lX2NtcCkgIT0gTlVMTCwKKyAgICAgICAgIlBsdWdpbiAlcyBpcyBpbiBvbGQgbGlzdCBidXQgbm90IGluIG5ldyBvbmU/ISIsCisgICAgICAgIGdzdF9wbHVnaW5fZ2V0X25hbWUgKHBsdWdpbikpOworICB9CisKKyAgbmV3X2lkZW50aXR5ID0gZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9mZWF0dXJlIChyZWdpc3RyeSwgImlkZW50aXR5Iik7CisgIGZhaWxfdW5sZXNzIChuZXdfaWRlbnRpdHkgIT0gTlVMTCwgIkNhbid0IGZpbmQgcGx1Z2luIGZlYXR1cmUgJ2lkZW50aXR5JyIpOworICBmYWlsX3VubGVzcyAob2xkX2lkZW50aXR5ID09IG5ld19pZGVudGl0eSwgIk9sZCBhbmQgbmV3ICdpZGVudGl0eScgZmVhdHVyZSAiCisgICAgICAib2JqZWN0cyBzaG91bGQgYmUgdGhlIHNhbWUsIGJ1dCBhcmUgZGlmZmVyZW50IG9iamVjdHMiKTsKKworICAvKiBPbmUgcmVmIGVhY2ggZm9yOiB0aGUgcmVnaXN0cnksIG9sZF9pZGVudGl0eSwgbmV3X2lkZW50aXR5ICovCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKG9sZF9pZGVudGl0eSwgIm9sZCBpZGVudGl0eSBmZWF0dXJlIGFmdGVyIHVwZGF0ZSIsIDMpOworCisgIG5ld19waXBlbGluZSA9IGdzdF9yZWdpc3RyeV9sb29rdXBfZmVhdHVyZSAocmVnaXN0cnksICJwaXBlbGluZSIpOworICBmYWlsX3VubGVzcyAobmV3X3BpcGVsaW5lICE9IE5VTEwsICJDYW4ndCBmaW5kIHBsdWdpbiBmZWF0dXJlICdwaXBlbGluZSciKTsKKyAgZmFpbF91bmxlc3MgKG9sZF9waXBlbGluZSA9PSBuZXdfcGlwZWxpbmUsICJPbGQgYW5kIG5ldyAncGlwZWxpbmUnIGZlYXR1cmUgIgorICAgICAgIm9iamVjdHMgc2hvdWxkIGJlIHRoZSBzYW1lLCBidXQgYXJlIGRpZmZlcmVudCBvYmplY3RzIik7CisKKyAgZ3N0X3BsdWdpbl9saXN0X2ZyZWUgKHBsdWdpbnNfYmVmb3JlKTsKKyAgcGx1Z2luc19iZWZvcmUgPSBOVUxMOworICBnc3RfcGx1Z2luX2xpc3RfZnJlZSAocGx1Z2luc19hZnRlcik7CisgIHBsdWdpbnNfYWZ0ZXIgPSBOVUxMOworICByZWdpc3RyeSA9IE5VTEw7CisKKyAgZ3N0X29iamVjdF91bnJlZiAob2xkX2lkZW50aXR5KTsKKyAgZ3N0X29iamVjdF91bnJlZiAobmV3X2lkZW50aXR5KTsKKyAgZ3N0X29iamVjdF91bnJlZiAob2xkX3BpcGVsaW5lKTsKKyAgZ3N0X29iamVjdF91bnJlZiAobmV3X3BpcGVsaW5lKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgU3VpdGUgKgorcmVnaXN0cnlfc3VpdGUgKHZvaWQpCit7CisgIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgicmVnaXN0cnkiKTsKKyAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOworCisgIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOworCisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9yZWdpc3RyeV91cGRhdGUpOworCisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAocmVnaXN0cnkpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdHNlZ21lbnQuYyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RzZWdtZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E3OGFhMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RzZWdtZW50LmMKQEAgLTAsMCArMSwxNzkzIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNSBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKyAqICAgICAgICAgICAgICAgMjAwOSBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorICoKKyAqIGdzdHNlZ21lbnQuYzogVW5pdCB0ZXN0IGZvciBzZWdtZW50cworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KKworLyogbWVzcyB3aXRoIHRoZSBzZWdtZW50IHN0cnVjdHVyZSBpbiB0aGUgYnl0ZXMgZm9ybWF0ICovCitHU1RfU1RBUlRfVEVTVCAoc2VnbWVudF9zZWVrX25vc2l6ZSkKK3sKKyAgR3N0U2VnbWVudCBzZWdtZW50OworICBnYm9vbGVhbiByZXM7CisgIGd1aW50NjQgY3N0YXJ0LCBjc3RvcDsKKyAgZ2Jvb2xlYW4gdXBkYXRlOworCisgIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTKTsKKworICAvKiBjb25maWd1cmUgc2VnbWVudCB0byBzdGFydCAxMDAgKi8KKyAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlZ21lbnQsIDEuMCwKKyAgICAgIEdTVF9GT1JNQVRfQllURVMsCisgICAgICBHU1RfU0VFS19GTEFHX05PTkUsCisgICAgICBHU1RfU0VFS19UWVBFX1NFVCwgMTAwLCBHU1RfU0VFS19UWVBFX05PTkUsIC0xLCAmdXBkYXRlKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RhcnQgPT0gMTAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RvcCA9PSAtMSk7CisgIGZhaWxfdW5sZXNzICh1cGRhdGUgPT0gVFJVRSk7CisKKyAgLyogY29uZmlndXJlIHNlZ21lbnQgdG8gc3RvcCByZWxhdGl2ZSwgc2hvdWxkIG5vdCBkbyBhbnl0aGluZyBzaW5jZSAKKyAgICogc2l6ZSBpcyB1bmtub3duLiAqLworICBnc3Rfc2VnbWVudF9kb19zZWVrICgmc2VnbWVudCwgMS4wLAorICAgICAgR1NUX0ZPUk1BVF9CWVRFUywKKyAgICAgIEdTVF9TRUVLX0ZMQUdfTk9ORSwKKyAgICAgIEdTVF9TRUVLX1RZUEVfTk9ORSwgMjAwLCBHU1RfU0VFS19UWVBFX0NVUiwgLTEwMCwgJnVwZGF0ZSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0YXJ0ID09IDEwMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gLTEpOworICBmYWlsX3VubGVzcyAodXBkYXRlID09IEZBTFNFKTsKKworICAvKiBkbyBzb21lIGNsaXBwaW5nIG9uIHRoZSBvcGVuIHJhbmdlICovCisgIC8qIGNvbXBsZXRlbHkgb3V0c2lkZSAqLworICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgMCwgNTAsICZjc3RhcnQsICZjc3RvcCk7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gRkFMU0UpOworCisgIC8qIHRvdWNoaW5nIGxvd2VyIGJvdW5kLCBzdGlsbCBvdXRzaWRlIG9mIHRoZSBzZWdtZW50ICovCisgIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLCA1MCwgMTAwLCAmY3N0YXJ0LCAmY3N0b3ApOworICBmYWlsX3VubGVzcyAocmVzID09IEZBTFNFKTsKKworICAvKiBwYXJ0aWFsbHkgaW5zaWRlICovCisgIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLCA1MCwgMTUwLCAmY3N0YXJ0LCAmY3N0b3ApOworICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoY3N0YXJ0ID09IDEwMCk7CisgIGZhaWxfdW5sZXNzIChjc3RvcCA9PSAxNTApOworCisgIC8qIGluc2lkZSwgdG91Y2hpbmcgbG93ZXIgYm91bmQgKi8KKyAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsCisgICAgICAxMDAsIDE1MCwgJmNzdGFydCwgJmNzdG9wKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGNzdGFydCA9PSAxMDApOworICBmYWlsX3VubGVzcyAoY3N0b3AgPT0gMTUwKTsKKworICAvKiBzcGVjaWFsIGNhc2UsIDAgZHVyYXRpb24gYW5kIG91dHNpZGUgc2VnbWVudCAqLworICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgOTAsIDkwLCAmY3N0YXJ0LCAmY3N0b3ApOworICBmYWlsX3VubGVzcyAocmVzID09IEZBTFNFKTsKKworICAvKiBzcGVjaWFsIGNhc2UsIDAgZHVyYXRpb24gYW5kIHRvdWNoaW5nIGxvd2VyIGJvdW5kLCBpLmUuIGluc2lkZSBzZWdtZW50ICovCisgIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLAorICAgICAgMTAwLCAxMDAsICZjc3RhcnQsICZjc3RvcCk7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChjc3RhcnQgPT0gMTAwKTsKKyAgZmFpbF91bmxlc3MgKGNzdG9wID09IDEwMCk7CisKKyAgLyogc3BlY2lhbCBjYXNlLCAwIGR1cmF0aW9uIGFuZCBpbnNpZGUgdGhlIHNlZ21lbnQgKi8KKyAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsCisgICAgICAxMjAsIDEyMCwgJmNzdGFydCwgJmNzdG9wKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGNzdGFydCA9PSAxMjApOworICBmYWlsX3VubGVzcyAoY3N0b3AgPT0gMTIwKTsKKworICAvKiBjb21wbGV0ZWx5IGluc2lkZSAqLworICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywKKyAgICAgIDE1MCwgMjAwLCAmY3N0YXJ0LCAmY3N0b3ApOworICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoY3N0YXJ0ID09IDE1MCk7CisgIGZhaWxfdW5sZXNzIChjc3RvcCA9PSAyMDApOworCisgIC8qIGludmFsaWQgc3RhcnQgKi8KKyAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsIC0xLCAxMDAsICZjc3RhcnQsICZjc3RvcCk7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gRkFMU0UpOworCisgIC8qIHN0YXJ0IG91dHNpZGUsIHdlIGRvbid0IGtub3cgdGhlIHN0b3AgKi8KKyAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsIDUwLCAtMSwgJmNzdGFydCwgJmNzdG9wKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGNzdGFydCA9PSAxMDApOworICBmYWlsX3VubGVzcyAoY3N0b3AgPT0gLTEpOworCisgIC8qIHN0YXJ0IG9uIGxvd2VyIGJvdW5kICovCisgIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLCAxMDAsIC0xLCAmY3N0YXJ0LCAmY3N0b3ApOworICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoY3N0YXJ0ID09IDEwMCk7CisgIGZhaWxfdW5sZXNzIChjc3RvcCA9PSAtMSk7CisKKyAgLyogc3RhcnQgaW5zaWRlICovCisgIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLCAxNTAsIC0xLCAmY3N0YXJ0LCAmY3N0b3ApOworICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoY3N0YXJ0ID09IDE1MCk7CisgIGZhaWxfdW5sZXNzIChjc3RvcCA9PSAtMSk7CisKKyAgLyogYWRkIDEwMCB0byBzdGFydCwgc2V0IHN0b3AgdG8gMzAwICovCisgIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWdtZW50LCAxLjAsCisgICAgICBHU1RfRk9STUFUX0JZVEVTLAorICAgICAgR1NUX1NFRUtfRkxBR19OT05FLAorICAgICAgR1NUX1NFRUtfVFlQRV9DVVIsIDEwMCwgR1NUX1NFRUtfVFlQRV9TRVQsIDMwMCwgJnVwZGF0ZSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0YXJ0ID09IDIwMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMzAwKTsKKyAgZmFpbF91bmxlc3MgKHVwZGF0ZSA9PSBUUlVFKTsKKworICB1cGRhdGUgPSBGQUxTRTsKKyAgLyogYWRkIDEwMCB0byBzdGFydCAodG8gMzAwKSwgc2V0IHN0b3AgdG8gMjAwLCB0aGlzIGlzIG5vdCBhbGxvd2VkLgorICAgKiBub3RoaW5nIHNob3VsZCBiZSB1cGRhdGVkIGluIHRoZSBzZWdtZW50LiBBIGdfd2FybmluZyBpcworICAgKiBlbWl0ZWQuICovCisgIEFTU0VSVF9DUklUSUNBTCAoZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlZ21lbnQsIDEuMCwKKyAgICAgICAgICBHU1RfRk9STUFUX0JZVEVTLAorICAgICAgICAgIEdTVF9TRUVLX0ZMQUdfTk9ORSwKKyAgICAgICAgICBHU1RfU0VFS19UWVBFX0NVUiwgMTAwLCBHU1RfU0VFS19UWVBFX1NFVCwgMjAwLCAmdXBkYXRlKSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0YXJ0ID09IDIwMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMzAwKTsKKyAgLyogdXBkYXRlIGRpZG4ndCBjaGFuZ2UgKi8KKyAgZmFpbF91bmxlc3MgKHVwZGF0ZSA9PSBGQUxTRSk7CisKKyAgdXBkYXRlID0gVFJVRTsKKyAgLyogc2VlayByZWxhdGl2ZSB0byBlbmQsIHNob3VsZCBub3QgZG8gYW55dGhpbmcgc2luY2Ugc2l6ZSBpcworICAgKiB1bmtub3duLiAqLworICBnc3Rfc2VnbWVudF9kb19zZWVrICgmc2VnbWVudCwgMS4wLAorICAgICAgR1NUX0ZPUk1BVF9CWVRFUywKKyAgICAgIEdTVF9TRUVLX0ZMQUdfTk9ORSwKKyAgICAgIEdTVF9TRUVLX1RZUEVfRU5ELCAtMzAwLCBHU1RfU0VFS19UWVBFX0VORCwgLTEwMCwgJnVwZGF0ZSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0YXJ0ID09IDIwMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMzAwKTsKKyAgZmFpbF91bmxlc3MgKHVwZGF0ZSA9PSBGQUxTRSk7CisKKyAgLyogY29tcGxldGVseSBvdXRzaWRlICovCisgIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLCAwLCA1MCwgJmNzdGFydCwgJmNzdG9wKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBGQUxTRSk7CisKKyAgLyogdG91Y2hpbmcgbG93ZXIgYm91bmQgKi8KKyAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsIDUwLCAyMDAsICZjc3RhcnQsICZjc3RvcCk7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gRkFMU0UpOworCisgIC8qIHBhcnRpYWxseSBpbnNpZGUgKi8KKyAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsIDUwLCAyNTAsICZjc3RhcnQsICZjc3RvcCk7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChjc3RhcnQgPT0gMjAwKTsKKyAgZmFpbF91bmxlc3MgKGNzdG9wID09IDI1MCk7CisKKyAgLyogaW5zaWRlLCB0b3VjaGluZyBsb3dlciBib3VuZCAqLworICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywKKyAgICAgIDIwMCwgMjUwLCAmY3N0YXJ0LCAmY3N0b3ApOworICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoY3N0YXJ0ID09IDIwMCk7CisgIGZhaWxfdW5sZXNzIChjc3RvcCA9PSAyNTApOworCisgIC8qIGNvbXBsZXRlbHkgaW5zaWRlICovCisgIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLAorICAgICAgMjUwLCAyOTAsICZjc3RhcnQsICZjc3RvcCk7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChjc3RhcnQgPT0gMjUwKTsKKyAgZmFpbF91bmxlc3MgKGNzdG9wID09IDI5MCk7CisKKyAgLyogcGFydGlhbGx5IGluc2lkZSAqLworICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywKKyAgICAgIDI1MCwgMzUwLCAmY3N0YXJ0LCAmY3N0b3ApOworICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoY3N0YXJ0ID09IDI1MCk7CisgIGZhaWxfdW5sZXNzIChjc3RvcCA9PSAzMDApOworCisgIC8qIGludmFsaWQgc3RhcnQgKi8KKyAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsIC0xLCAxMDAsICZjc3RhcnQsICZjc3RvcCk7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gRkFMU0UpOworCisgIC8qIHN0YXJ0IG91dHNpZGUgKi8KKyAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsIDUwLCAtMSwgJmNzdGFydCwgJmNzdG9wKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGNzdGFydCA9PSAyMDApOworICBmYWlsX3VubGVzcyAoY3N0b3AgPT0gMzAwKTsKKworICAvKiBzdGFydCBvbiBsb3dlciBib3VuZCAqLworICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgMjAwLCAtMSwgJmNzdGFydCwgJmNzdG9wKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGNzdGFydCA9PSAyMDApOworICBmYWlsX3VubGVzcyAoY3N0b3AgPT0gMzAwKTsKKworICAvKiBzdGFydCBpbnNpZGUgKi8KKyAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsIDI1MCwgLTEsICZjc3RhcnQsICZjc3RvcCk7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChjc3RhcnQgPT0gMjUwKTsKKyAgZmFpbF91bmxlc3MgKGNzdG9wID09IDMwMCk7CisKKyAgLyogc3RhcnQgb3V0c2lkZSBvbiBib3VuZGFyeSAqLworICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgMzAwLCAtMSwgJmNzdGFydCwgJmNzdG9wKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBGQUxTRSk7CisKKyAgLyogc3RhcnQgY29tcGxldGVseSBvdXRzaWRlICovCisgIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLCAzNTAsIC0xLCAmY3N0YXJ0LCAmY3N0b3ApOworICBmYWlsX3VubGVzcyAocmVzID09IEZBTFNFKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiBtZXNzIHdpdGggdGhlIHNlZ21lbnQgc3RydWN0dXJlIGluIHRoZSBieXRlcyBmb3JtYXQgKi8KK0dTVF9TVEFSVF9URVNUIChzZWdtZW50X3NlZWtfc2l6ZSkKK3sKKyAgR3N0U2VnbWVudCBzZWdtZW50OworICBnYm9vbGVhbiByZXM7CisgIGd1aW50NjQgY3N0YXJ0LCBjc3RvcDsKKyAgZ2Jvb2xlYW4gdXBkYXRlOworCisgIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTKTsKKyAgc2VnbWVudC5kdXJhdGlvbiA9IDIwMDsKKworICAvKiBjb25maWd1cmUgc2VnbWVudCB0byBzdGFydCAxMDAgKi8KKyAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlZ21lbnQsIDEuMCwKKyAgICAgIEdTVF9GT1JNQVRfQllURVMsCisgICAgICBHU1RfU0VFS19GTEFHX05PTkUsCisgICAgICBHU1RfU0VFS19UWVBFX1NFVCwgMTAwLCBHU1RfU0VFS19UWVBFX05PTkUsIC0xLCAmdXBkYXRlKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RhcnQgPT0gMTAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RvcCA9PSAtMSk7CisgIGZhaWxfdW5sZXNzICh1cGRhdGUgPT0gVFJVRSk7CisKKyAgLyogY29uZmlndXJlIHNlZ21lbnQgdG8gc3RvcCByZWxhdGl2ZSwgZG9lcyBub3QgdXBkYXRlIHN0b3AKKyAgICogc2luY2Ugd2UgZGlkIG5vdCBzZXQgaXQgYmVmb3JlLiAqLworICBnc3Rfc2VnbWVudF9kb19zZWVrICgmc2VnbWVudCwgMS4wLAorICAgICAgR1NUX0ZPUk1BVF9CWVRFUywKKyAgICAgIEdTVF9TRUVLX0ZMQUdfTk9ORSwKKyAgICAgIEdTVF9TRUVLX1RZUEVfTk9ORSwgMjAwLCBHU1RfU0VFS19UWVBFX0NVUiwgLTEwMCwgJnVwZGF0ZSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0YXJ0ID09IDEwMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gLTEpOworICBmYWlsX3VubGVzcyAodXBkYXRlID09IEZBTFNFKTsKKworICAvKiBkbyBzb21lIGNsaXBwaW5nIG9uIHRoZSBvcGVuIHJhbmdlICovCisgIC8qIGNvbXBsZXRlbHkgb3V0c2lkZSAqLworICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgMCwgNTAsICZjc3RhcnQsICZjc3RvcCk7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gRkFMU0UpOworCisgIC8qIHRvdWNoaW5nIGxvd2VyIGJvdW5kICovCisgIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLCA1MCwgMTAwLCAmY3N0YXJ0LCAmY3N0b3ApOworICBmYWlsX3VubGVzcyAocmVzID09IEZBTFNFKTsKKworICAvKiBwYXJ0aWFsbHkgaW5zaWRlICovCisgIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLCA1MCwgMTUwLCAmY3N0YXJ0LCAmY3N0b3ApOworICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoY3N0YXJ0ID09IDEwMCk7CisgIGZhaWxfdW5sZXNzIChjc3RvcCA9PSAxNTApOworCisgIC8qIGluc2lkZSwgdG91Y2hpbmcgbG93ZXIgYm91bmQgKi8KKyAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsCisgICAgICAxMDAsIDE1MCwgJmNzdGFydCwgJmNzdG9wKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGNzdGFydCA9PSAxMDApOworICBmYWlsX3VubGVzcyAoY3N0b3AgPT0gMTUwKTsKKworICAvKiBjb21wbGV0ZWx5IGluc2lkZSAqLworICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywKKyAgICAgIDE1MCwgMjAwLCAmY3N0YXJ0LCAmY3N0b3ApOworICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoY3N0YXJ0ID09IDE1MCk7CisgIGZhaWxfdW5sZXNzIChjc3RvcCA9PSAyMDApOworCisgIC8qIHBhcnRpYWxseSBpbnNpZGUsIGNsaXAgdG8gc2l6ZSAqLworICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywKKyAgICAgIDE1MCwgMzAwLCAmY3N0YXJ0LCAmY3N0b3ApOworICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoY3N0YXJ0ID09IDE1MCk7CisgIGZhaWxfdW5sZXNzIChjc3RvcCA9PSAyMDApOworCisgIC8qIGludmFsaWQgc3RhcnQgKi8KKyAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsIC0xLCAxMDAsICZjc3RhcnQsICZjc3RvcCk7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gRkFMU0UpOworCisgIC8qIHN0YXJ0IG91dHNpZGUgKi8KKyAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsIDUwLCAtMSwgJmNzdGFydCwgJmNzdG9wKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGNzdGFydCA9PSAxMDApOworICBmYWlsX3VubGVzcyAoY3N0b3AgPT0gLTEpOworCisgIC8qIHN0YXJ0IG9uIGxvd2VyIGJvdW5kICovCisgIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLCAxMDAsIC0xLCAmY3N0YXJ0LCAmY3N0b3ApOworICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoY3N0YXJ0ID09IDEwMCk7CisgIGZhaWxfdW5sZXNzIChjc3RvcCA9PSAtMSk7CisKKyAgLyogc3RhcnQgaW5zaWRlICovCisgIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLCAxNTAsIC0xLCAmY3N0YXJ0LCAmY3N0b3ApOworICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoY3N0YXJ0ID09IDE1MCk7CisgIGZhaWxfdW5sZXNzIChjc3RvcCA9PSAtMSk7CisKKyAgLyogYWRkIDEwMCB0byBzdGFydCwgc2V0IHN0b3AgdG8gMzAwLCBzdG9wIGNsaXBzIHRvIDIwMCAqLworICBnc3Rfc2VnbWVudF9kb19zZWVrICgmc2VnbWVudCwgMS4wLAorICAgICAgR1NUX0ZPUk1BVF9CWVRFUywKKyAgICAgIEdTVF9TRUVLX0ZMQUdfTk9ORSwKKyAgICAgIEdTVF9TRUVLX1RZUEVfQ1VSLCAxMDAsIEdTVF9TRUVLX1RZUEVfU0VULCAzMDAsICZ1cGRhdGUpOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAyMDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdG9wID09IDIwMCk7CisKKyAgLyogYWRkIDEwMCB0byBzdGFydCAodG8gMzAwKSwgc2V0IHN0b3AgdG8gMjAwLCB0aGlzIGNsaXBzIHN0YXJ0CisgICAqIHRvIGR1cmF0aW9uICovCisgIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWdtZW50LCAxLjAsCisgICAgICBHU1RfRk9STUFUX0JZVEVTLAorICAgICAgR1NUX1NFRUtfRkxBR19OT05FLAorICAgICAgR1NUX1NFRUtfVFlQRV9DVVIsIDEwMCwgR1NUX1NFRUtfVFlQRV9TRVQsIDIwMCwgJnVwZGF0ZSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0YXJ0ID09IDIwMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMjAwKTsKKyAgZmFpbF91bmxlc3MgKHVwZGF0ZSA9PSBGQUxTRSk7CisKKyAgLyogc2VlayByZWxhdGl2ZSB0byBlbmQgKi8KKyAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlZ21lbnQsIDEuMCwKKyAgICAgIEdTVF9GT1JNQVRfQllURVMsCisgICAgICBHU1RfU0VFS19GTEFHX05PTkUsCisgICAgICBHU1RfU0VFS19UWVBFX0VORCwgLTEwMCwgR1NUX1NFRUtfVFlQRV9FTkQsIC0yMCwgJnVwZGF0ZSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0YXJ0ID09IDEwMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMTgwKTsKKyAgZmFpbF91bmxlc3MgKHVwZGF0ZSA9PSBUUlVFKTsKKworICAvKiBjb21wbGV0ZWx5IG91dHNpZGUgKi8KKyAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsIDAsIDUwLCAmY3N0YXJ0LCAmY3N0b3ApOworICBmYWlsX3VubGVzcyAocmVzID09IEZBTFNFKTsKKworICAvKiB0b3VjaGluZyBsb3dlciBib3VuZCAqLworICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgNTAsIDEwMCwgJmNzdGFydCwgJmNzdG9wKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBGQUxTRSk7CisKKyAgLyogcGFydGlhbGx5IGluc2lkZSAqLworICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgNTAsIDE1MCwgJmNzdGFydCwgJmNzdG9wKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGNzdGFydCA9PSAxMDApOworICBmYWlsX3VubGVzcyAoY3N0b3AgPT0gMTUwKTsKKworICAvKiBpbnNpZGUsIHRvdWNoaW5nIGxvd2VyIGJvdW5kICovCisgIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLAorICAgICAgMTAwLCAxNTAsICZjc3RhcnQsICZjc3RvcCk7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChjc3RhcnQgPT0gMTAwKTsKKyAgZmFpbF91bmxlc3MgKGNzdG9wID09IDE1MCk7CisKKyAgLyogY29tcGxldGVseSBpbnNpZGUgKi8KKyAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsCisgICAgICAxNTAsIDE3MCwgJmNzdGFydCwgJmNzdG9wKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGNzdGFydCA9PSAxNTApOworICBmYWlsX3VubGVzcyAoY3N0b3AgPT0gMTcwKTsKKworICAvKiBwYXJ0aWFsbHkgaW5zaWRlICovCisgIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLAorICAgICAgMTUwLCAyNTAsICZjc3RhcnQsICZjc3RvcCk7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChjc3RhcnQgPT0gMTUwKTsKKyAgZmFpbF91bmxlc3MgKGNzdG9wID09IDE4MCk7CisKKyAgLyogaW52YWxpZCBzdGFydCAqLworICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgLTEsIDEwMCwgJmNzdGFydCwgJmNzdG9wKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBGQUxTRSk7CisKKyAgLyogc3RhcnQgb3V0c2lkZSAqLworICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgNTAsIC0xLCAmY3N0YXJ0LCAmY3N0b3ApOworICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoY3N0YXJ0ID09IDEwMCk7CisgIGZhaWxfdW5sZXNzIChjc3RvcCA9PSAxODApOworCisgIC8qIHN0YXJ0IG9uIGxvd2VyIGJvdW5kICovCisgIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLCAxMDAsIC0xLCAmY3N0YXJ0LCAmY3N0b3ApOworICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoY3N0YXJ0ID09IDEwMCk7CisgIGZhaWxfdW5sZXNzIChjc3RvcCA9PSAxODApOworCisgIC8qIHN0YXJ0IGluc2lkZSAqLworICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgMTUwLCAtMSwgJmNzdGFydCwgJmNzdG9wKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGNzdGFydCA9PSAxNTApOworICBmYWlsX3VubGVzcyAoY3N0b3AgPT0gMTgwKTsKKworICAvKiBzdGFydCBvdXRzaWRlIG9uIGJvdW5kYXJ5ICovCisgIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLCAxODAsIC0xLCAmY3N0YXJ0LCAmY3N0b3ApOworICBmYWlsX3VubGVzcyAocmVzID09IEZBTFNFKTsKKworICAvKiBzdGFydCBjb21wbGV0ZWx5IG91dHNpZGUgKi8KKyAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsIDI1MCwgLTEsICZjc3RhcnQsICZjc3RvcCk7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gRkFMU0UpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUIChzZWdtZW50X3NlZWtfcmV2ZXJzZSkKK3sKKyAgR3N0U2VnbWVudCBzZWdtZW50OworICBnYm9vbGVhbiB1cGRhdGU7CisKKyAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMpOworICBzZWdtZW50LmR1cmF0aW9uID0gMjAwOworCisgIC8qIGNvbmZpZ3VyZSBzZWdtZW50IHRvIHN0b3AgMTAwICovCisgIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWdtZW50LCAtMS4wLAorICAgICAgR1NUX0ZPUk1BVF9CWVRFUywKKyAgICAgIEdTVF9TRUVLX0ZMQUdfTk9ORSwKKyAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCAwLCBHU1RfU0VFS19UWVBFX1NFVCwgMTAwLCAmdXBkYXRlKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RhcnQgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMTAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQudGltZSA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQucG9zaXRpb24gPT0gMTAwKTsKKyAgZmFpbF91bmxlc3MgKHVwZGF0ZSA9PSBUUlVFKTsKKworICAvKiB1cGRhdGUgKi8KKyAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlZ21lbnQsIC0xLjAsCisgICAgICBHU1RfRk9STUFUX0JZVEVTLAorICAgICAgR1NUX1NFRUtfRkxBR19OT05FLAorICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIDEwLCBHU1RfU0VFS19UWVBFX0NVUiwgLTIwLCAmdXBkYXRlKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RhcnQgPT0gMTApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdG9wID09IDgwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQudGltZSA9PSAxMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnBvc2l0aW9uID09IDgwKTsKKyAgZmFpbF91bmxlc3MgKHVwZGF0ZSA9PSBUUlVFKTsKKworICBnc3Rfc2VnbWVudF9kb19zZWVrICgmc2VnbWVudCwgLTEuMCwKKyAgICAgIEdTVF9GT1JNQVRfQllURVMsCisgICAgICBHU1RfU0VFS19GTEFHX05PTkUsCisgICAgICBHU1RfU0VFS19UWVBFX1NFVCwgMjAsIEdTVF9TRUVLX1RZUEVfTk9ORSwgMCwgJnVwZGF0ZSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0YXJ0ID09IDIwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RvcCA9PSA4MCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnRpbWUgPT0gMjApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5wb3NpdGlvbiA9PSA4MCk7CisgIGZhaWxfdW5sZXNzICh1cGRhdGUgPT0gRkFMU0UpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIG1lc3Mgd2l0aCB0aGUgc2VnbWVudCBzdHJ1Y3R1cmUgaW4gdGhlIGJ5dGVzIGZvcm1hdCAqLworR1NUX1NUQVJUX1RFU1QgKHNlZ21lbnRfc2Vla19yYXRlKQoreworICBHc3RTZWdtZW50IHNlZ21lbnQ7CisgIGdib29sZWFuIHVwZGF0ZTsKKworICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUyk7CisKKyAgLyogY29uZmlndXJlIHNlZ21lbnQgdG8gcmF0ZSAyLjAgKi8KKyAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlZ21lbnQsIDIuMCwKKyAgICAgIEdTVF9GT1JNQVRfQllURVMsCisgICAgICBHU1RfU0VFS19GTEFHX05PTkUsCisgICAgICBHU1RfU0VFS19UWVBFX05PTkUsIC0xLCBHU1RfU0VFS19UWVBFX05PTkUsIC0xLCAmdXBkYXRlKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZm9ybWF0ID09IEdTVF9GT1JNQVRfQllURVMpOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RvcCA9PSAtMSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnJhdGUgPT0gMi4wKTsKKyAgZmFpbF91bmxlc3MgKHVwZGF0ZSA9PSBGQUxTRSk7CisKKyNpZiAwCisgIC8qIDAgaXMgdGhlIHNhbWUgaW4gYWxsIGZvcm1hdHMgYW5kIHNob3VsZCBub3QgZmFpbCAqLworICBnc3Rfc2VnbWVudF9kb19zZWVrICgmc2VnbWVudCwgMi4wLAorICAgICAgR1NUX0ZPUk1BVF9USU1FLCBHU1RfU0VFS19GTEFHX05PTkUsCisgICAgICBHU1RfU0VFS19UWVBFX1NFVCwgMCwgR1NUX1NFRUtfVFlQRV9OT05FLCAtMSwgJnVwZGF0ZSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmZvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTKTsKKworICAvKiBzZXQgdG8gLTEgbWVhbnMgc3RhcnQgZnJvbSAwICovCisgIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWdtZW50LCAyLjAsCisgICAgICBHU1RfRk9STUFUX1RJTUUsIEdTVF9TRUVLX0ZMQUdfTk9ORSwKKyAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCAtMSwgR1NUX1NFRUtfVFlQRV9OT05FLCAtMSwgJnVwZGF0ZSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmZvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RhcnQgPT0gMCk7CisKKyAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlZ21lbnQsIDIuMCwKKyAgICAgIEdTVF9GT1JNQVRfVElNRSwgR1NUX1NFRUtfRkxBR19OT05FLAorICAgICAgR1NUX1NFRUtfVFlQRV9DVVIsIDAsIEdTVF9TRUVLX1RZUEVfTk9ORSwgLTEsICZ1cGRhdGUpOworCisgIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWdtZW50LCAyLjAsCisgICAgICBHU1RfRk9STUFUX1RJTUUsIEdTVF9TRUVLX0ZMQUdfTk9ORSwKKyAgICAgIEdTVF9TRUVLX1RZUEVfRU5ELCAwLCBHU1RfU0VFS19UWVBFX05PTkUsIC0xLCAmdXBkYXRlKTsKKworICAvKiAtMSBmb3IgZW5kIGlzIGZpbmUgdG9vIGluIGFsbCBmb3JtYXRzICovCisgIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWdtZW50LCAyLjAsCisgICAgICBHU1RfRk9STUFUX1RJTUUsIEdTVF9TRUVLX0ZMQUdfTk9ORSwKKyAgICAgIEdTVF9TRUVLX1RZUEVfTk9ORSwgLTEsIEdTVF9TRUVLX1RZUEVfU0VULCAtMSwgJnVwZGF0ZSk7CisKKyAgLyogMCBhcyByZWxhdGl2ZSBlbmQgaXMgZmluZSB0b28gKi8KKyAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlZ21lbnQsIDIuMCwKKyAgICAgIEdTVF9GT1JNQVRfVElNRSwgR1NUX1NFRUtfRkxBR19OT05FLAorICAgICAgR1NUX1NFRUtfVFlQRV9OT05FLCAtMSwgR1NUX1NFRUtfVFlQRV9DVVIsIDAsICZ1cGRhdGUpOworCisgIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWdtZW50LCAyLjAsCisgICAgICBHU1RfRk9STUFUX1RJTUUsIEdTVF9TRUVLX0ZMQUdfTk9ORSwKKyAgICAgIEdTVF9TRUVLX1RZUEVfTk9ORSwgLTEsIEdTVF9TRUVLX1RZUEVfRU5ELCAwLCAmdXBkYXRlKTsKKyNlbmRpZgorCisgIC8qIHNldCBhIHJlYWwgc3RvcCBwb3NpdGlvbiwgdGhpcyBtdXN0IGhhcHBlbiBpbiBieXRlcyAqLworICBnc3Rfc2VnbWVudF9kb19zZWVrICgmc2VnbWVudCwgMy4wLAorICAgICAgR1NUX0ZPUk1BVF9CWVRFUywKKyAgICAgIEdTVF9TRUVLX0ZMQUdfTk9ORSwKKyAgICAgIEdTVF9TRUVLX1RZUEVfTk9ORSwgLTEsIEdTVF9TRUVLX1RZUEVfU0VULCAxMDAsICZ1cGRhdGUpOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9CWVRFUyk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0YXJ0ID09IDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdG9wID09IDEwMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnJhdGUgPT0gMy4wKTsKKyAgLyogbm8gc2VlayBzaG91bGQgaGFwcGVuLCB3ZSBqdXN0IHVwZGF0ZWQgdGhlIHN0b3AgcG9zaXRpb24gaW4gZm9yd2FyZAorICAgKiBwbGF5YmFjayBtb2RlLiovCisgIGZhaWxfdW5sZXNzICh1cGRhdGUgPT0gRkFMU0UpOworCisjaWYgMAorICAvKiAwIGFzIHJlbGF0aXZlIGVuZCBpcyBmaW5lIHRvbyAqLworICBnc3Rfc2VnbWVudF9kb19zZWVrICgmc2VnbWVudCwgMi4wLAorICAgICAgR1NUX0ZPUk1BVF9USU1FLCBHU1RfU0VFS19GTEFHX05PTkUsCisgICAgICBHU1RfU0VFS19UWVBFX05PTkUsIC0xLCBHU1RfU0VFS19UWVBFX0NVUiwgMCwgJnVwZGF0ZSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMTAwKTsKKworICBnc3Rfc2VnbWVudF9kb19zZWVrICgmc2VnbWVudCwgMi4wLAorICAgICAgR1NUX0ZPUk1BVF9USU1FLCBHU1RfU0VFS19GTEFHX05PTkUsCisgICAgICBHU1RfU0VFS19UWVBFX05PTkUsIC0xLCBHU1RfU0VFS19UWVBFX0VORCwgMCwgJnVwZGF0ZSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMTAwKTsKKworICAvKiAtMSBmb3IgZW5kIGlzIGZpbmUgdG9vIGluIGFsbCBmb3JtYXRzICovCisgIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWdtZW50LCAyLjAsCisgICAgICBHU1RfRk9STUFUX1RJTUUsIEdTVF9TRUVLX0ZMQUdfTk9ORSwKKyAgICAgIEdTVF9TRUVLX1RZUEVfTk9ORSwgLTEsIEdTVF9TRUVLX1RZUEVfU0VULCAtMSwgJnVwZGF0ZSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gLTEpOworI2VuZGlmCisKKyAgLyogc2V0IHNvbWUgZHVyYXRpb24sIHN0b3AgLTEgRU5EIHNlZWtzIHdpbGwgbm93IHdvcmsgd2l0aCB0aGUKKyAgICogZHVyYXRpb24sIGlmIHRoZSBmb3JtYXRzIG1hdGNoICovCisgIHNlZ21lbnQuZHVyYXRpb24gPSAyMDA7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmR1cmF0aW9uID09IDIwMCk7CisKKyAgLyogc2VlayB0byBlbmQgd2l0aCAwIHNob3VsZCBzZXQgdGhlIHN0b3AgdG8gdGhlIGR1cmF0aW9uICovCisgIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWdtZW50LCAyLjAsCisgICAgICBHU1RfRk9STUFUX0JZVEVTLCBHU1RfU0VFS19GTEFHX05PTkUsCisgICAgICBHU1RfU0VFS19UWVBFX05PTkUsIC0xLCBHU1RfU0VFS19UWVBFX0VORCwgMCwgJnVwZGF0ZSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMjAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZHVyYXRpb24gPT0gMjAwKTsKKworICAvKiBzdWJ0cmFjdCAxMDAgZnJvbSB0aGUgZW5kICovCisgIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWdtZW50LCAyLjAsCisgICAgICBHU1RfRk9STUFUX0JZVEVTLCBHU1RfU0VFS19GTEFHX05PTkUsCisgICAgICBHU1RfU0VFS19UWVBFX05PTkUsIC0xLCBHU1RfU0VFS19UWVBFX0VORCwgLTEwMCwgJnVwZGF0ZSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMTAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZHVyYXRpb24gPT0gMjAwKTsKKworICAvKiBhZGQgMTAwIHRvIHRoZSBkdXJhdGlvbiwgdGhpcyBzaG91bGQgYmUgY2xhbXBlZCB0byB0aGUgZHVyYXRpb24gKi8KKyAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlZ21lbnQsIDIuMCwKKyAgICAgIEdTVF9GT1JNQVRfQllURVMsIEdTVF9TRUVLX0ZMQUdfTk9ORSwKKyAgICAgIEdTVF9TRUVLX1RZUEVfTk9ORSwgLTEsIEdTVF9TRUVLX1RZUEVfRU5ELCAxMDAsICZ1cGRhdGUpOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdG9wID09IDIwMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmR1cmF0aW9uID09IDIwMCk7CisKKyAgLyogYWRkIDMwMCB0byB0aGUgc3RhcnQsIHRoaXMgc2hvdWxkIGJlIGNsYW1wZWQgdG8gdGhlIGR1cmF0aW9uICovCisgIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWdtZW50LCAyLjAsCisgICAgICBHU1RfRk9STUFUX0JZVEVTLCBHU1RfU0VFS19GTEFHX05PTkUsCisgICAgICBHU1RfU0VFS19UWVBFX0NVUiwgMzAwLCBHU1RfU0VFS19UWVBFX0VORCwgMCwgJnVwZGF0ZSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0YXJ0ID09IDIwMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMjAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZHVyYXRpb24gPT0gMjAwKTsKKworICAvKiBzdWJ0cmFjdCAzMDAgZnJvbSB0aGUgc3RhcnQsIHRoaXMgc2hvdWxkIGJlIGNsYW1wZWQgdG8gMCAqLworICBnc3Rfc2VnbWVudF9kb19zZWVrICgmc2VnbWVudCwgMi4wLAorICAgICAgR1NUX0ZPUk1BVF9CWVRFUywgR1NUX1NFRUtfRkxBR19OT05FLAorICAgICAgR1NUX1NFRUtfVFlQRV9DVVIsIC0zMDAsIEdTVF9TRUVLX1RZUEVfRU5ELCAwLCAmdXBkYXRlKTsKKyAgR1NUX0RFQlVHICgiJSIgR19HSU5UNjRfRk9STUFULCBzZWdtZW50LnN0YXJ0KTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RhcnQgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMjAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZHVyYXRpb24gPT0gMjAwKTsKK30KKworR1NUX0VORF9URVNUOworCisjaWYgMAorLyogbWVzcyB3aXRoIHRoZSBzZWdtZW50IHN0cnVjdHVyZSBpbiB0aGUgYnl0ZXMgZm9ybWF0ICovCitHU1RfU1RBUlRfVEVTVCAoc2VnbWVudF9uZXdzZWdtZW50X29wZW4pCit7CisgIEdzdFNlZ21lbnQgc2VnbWVudDsKKworICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUyk7CisKKyAgLyogdGltZSBzaG91bGQgYWxzbyB3b3JrIGZvciBzdGFydGluZyBmcm9tIDAgKi8KKyAgZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnQgKCZzZWdtZW50LCBGQUxTRSwgMS4wLCAxLjAsIEdTVF9GT1JNQVRfVElNRSwgMCwgLTEsCisgICAgICAwKTsKKworICBmYWlsX3VubGVzcyAoc2VnbWVudC5yYXRlID09IDEuMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmZvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZmxhZ3MgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0YXJ0ID09IDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdG9wID09IC0xKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQudGltZSA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuYmFzZSA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQucG9zaXRpb24gPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmR1cmF0aW9uID09IC0xKTsKKworICAvKiB3ZSBzZXQgc3RvcCBidXQgaW4gdGhlIHdyb25nIGZvcm1hdCwgc3RvcCBzdGF5cyBvcGVuLiAqLworICBnc3Rfc2VnbWVudF9zZXRfbmV3c2VnbWVudCAoJnNlZ21lbnQsIEZBTFNFLCAxLjAsIDEuMCwgR1NUX0ZPUk1BVF9USU1FLCAwLAorICAgICAgMjAwLCAwKTsKKworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RvcCA9PSAtMSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnRpbWUgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmJhc2UgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnBvc2l0aW9uID09IDApOworCisgIC8qIHVwZGF0ZSwgbm90aGluZyBjaGFuZ2VzICovCisgIGdzdF9zZWdtZW50X3NldF9uZXdzZWdtZW50ICgmc2VnbWVudCwgVFJVRSwgMS4wLCAxLjAsIEdTVF9GT1JNQVRfQllURVMsIDAsIC0xLAorICAgICAgMCk7CisKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RhcnQgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gLTEpOworICBmYWlsX3VubGVzcyAoc2VnbWVudC50aW1lID09IDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5iYXNlID09IDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5wb3NpdGlvbiA9PSAwKTsKKworICAvKiB1cGRhdGUgKi8KKyAgZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnQgKCZzZWdtZW50LCBUUlVFLCAxLjAsIDEuMCwKKyAgICAgIEdTVF9GT1JNQVRfQllURVMsIDEwMCwgLTEsIDEwMCk7CisKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RhcnQgPT0gMTAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RvcCA9PSAtMSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnRpbWUgPT0gMTAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuYmFzZSA9PSAxMDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5wb3NpdGlvbiA9PSAxMDApOworCisgIC8qIGxhc3Rfc3RvcCAwLCBiYXNlIGRvZXMgbm90IGNoYW5nZSAqLworICBnc3Rfc2VnbWVudF9zZXRfbmV3c2VnbWVudCAoJnNlZ21lbnQsIEZBTFNFLCAxLjAsIDEuMCwgR1NUX0ZPUk1BVF9CWVRFUywgMCwKKyAgICAgIC0xLCAwKTsKKworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RvcCA9PSAtMSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnRpbWUgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmJhc2UgPT0gMTAwKTsKKworICBnc3Rfc2VnbWVudF9zZXRfbGFzdF9zdG9wICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgMjAwKTsKKworICBmYWlsX3VubGVzcyAoc2VnbWVudC5wb3NpdGlvbiA9PSAyMDApOworCisgIC8qIGxhc3Rfc3RvcCAyMDAsIGJhc2UgY2hhbmdlcyAqLworICBnc3Rfc2VnbWVudF9zZXRfbmV3c2VnbWVudCAoJnNlZ21lbnQsIEZBTFNFLCAxLjAsIDEuMCwgR1NUX0ZPUk1BVF9CWVRFUywgMCwKKyAgICAgIC0xLCAwKTsKKworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RvcCA9PSAtMSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnRpbWUgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmJhc2UgPT0gMzAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQucG9zaXRpb24gPT0gMCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworCisvKiBtZXNzIHdpdGggdGhlIHNlZ21lbnQgc3RydWN0dXJlIGluIHRoZSBieXRlcyBmb3JtYXQgKi8KK0dTVF9TVEFSVF9URVNUIChzZWdtZW50X25ld3NlZ21lbnRfY2xvc2VkKQoreworICBHc3RTZWdtZW50IHNlZ21lbnQ7CisKKyAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMpOworCisgIGdzdF9zZWdtZW50X3NldF9uZXdzZWdtZW50ICgmc2VnbWVudCwgRkFMU0UsIDEuMCwgMS4wLAorICAgICAgR1NUX0ZPUk1BVF9CWVRFUywgMCwgMjAwLCAwKTsKKworICBmYWlsX3VubGVzcyAoc2VnbWVudC5yYXRlID09IDEuMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmZvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZmxhZ3MgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0YXJ0ID09IDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdG9wID09IDIwMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnRpbWUgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmJhc2UgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnBvc2l0aW9uID09IDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5kdXJhdGlvbiA9PSAtMSk7CisKKyAgLyogYXNzdW1lIHdlIGFkdmFuY2VkIHRvIHBvc2l0aW9uIDQwICovCisgIGdzdF9zZWdtZW50X3NldF9sYXN0X3N0b3AgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLCA0MCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnBvc2l0aW9uID09IDQwKTsKKworICAvKiBkbyBhbiB1cGRhdGUgdG8gdGhlIHN0YXJ0LCBsYXN0X3N0b3AgaXMgdW5jaGFuZ2VkIGJlY2F1c2UgaXQncyBiaWdnZXIgKi8KKyAgZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnQgKCZzZWdtZW50LCBUUlVFLCAxLjAsIDEuMCwgR1NUX0ZPUk1BVF9CWVRFUywgMjAsCisgICAgICAyMDAsIDIwKTsKKworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAyMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMjAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQudGltZSA9PSAyMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmJhc2UgPT0gMjApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5wb3NpdGlvbiA9PSA0MCk7CisKKyAgLyogZG8gYW4gdXBkYXRlIHBhc3Qgb3VyIGxhc3Rfc3RvcCwgaXQgc2hvdWxkIGJlIHVwZGF0ZWQgbm93ICovCisgIGdzdF9zZWdtZW50X3NldF9uZXdzZWdtZW50ICgmc2VnbWVudCwgVFJVRSwgMS4wLCAxLjAsIEdTVF9GT1JNQVRfQllURVMsIDUwLAorICAgICAgMzAwLCA1MCk7CisKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RhcnQgPT0gNTApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdG9wID09IDMwMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnRpbWUgPT0gNTApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5iYXNlID09IDUwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQucG9zaXRpb24gPT0gNTApOworCisgIC8qIGFuZCBhIG5ldyBhY2N1bXVsYXRlZCBvbmUgKi8KKyAgZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnQgKCZzZWdtZW50LCBGQUxTRSwgMS4wLCAxLjAsCisgICAgICBHU1RfRk9STUFUX0JZVEVTLCAxMDAsIDQwMCwgMzAwKTsKKworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAxMDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdG9wID09IDQwMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnRpbWUgPT0gMzAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuYmFzZSA9PSAzMDApOworCisgIC8qIGFuZCBhIG5ldyB1cGRhdGVkIG9uZSAqLworICBnc3Rfc2VnbWVudF9zZXRfbmV3c2VnbWVudCAoJnNlZ21lbnQsIFRSVUUsIDEuMCwgMS4wLAorICAgICAgR1NUX0ZPUk1BVF9CWVRFUywgMTAwLCA1MDAsIDMwMCk7CisKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RhcnQgPT0gMTAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RvcCA9PSA1MDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC50aW1lID09IDMwMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmJhc2UgPT0gMzAwKTsKKworICAvKiBhbmQgYSBuZXcgcGFydGlhbGx5IHVwZGF0ZWQgb25lICovCisgIGdzdF9zZWdtZW50X3NldF9uZXdzZWdtZW50ICgmc2VnbWVudCwgVFJVRSwgMS4wLCAxLjAsCisgICAgICBHU1RfRk9STUFUX0JZVEVTLCAyMDAsIDUwMCwgNDAwKTsKKworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAyMDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdG9wID09IDUwMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnRpbWUgPT0gNDAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuYmFzZSA9PSA0MDApOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIG1lc3Mgd2l0aCB0aGUgc2VnbWVudCBzdHJ1Y3R1cmUgaW4gdGhlIHRpbWUgZm9ybWF0ICovCitHU1RfU1RBUlRfVEVTVCAoc2VnbWVudF9uZXdzZWdtZW50X3N0cmVhbXRpbWUpCit7CisgIEdzdFNlZ21lbnQgc2VnbWVudDsKKyAgZ3VpbnQ2NCByZXN1bHQ7CisKKyAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKiBOb3JtYWwgc2VnbWVudAorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICBnc3Rfc2VnbWVudF9zZXRfbmV3c2VnbWVudCAoJnNlZ21lbnQsIEZBTFNFLCAxLjAsIDEuMCwKKyAgICAgIEdTVF9GT1JNQVRfVElNRSwgMCwgMjAwLCAwKTsKKworICBmYWlsX3VubGVzcyAoc2VnbWVudC5yYXRlID09IDEuMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmFwcGxpZWRfcmF0ZSA9PSAxLjApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZmxhZ3MgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0YXJ0ID09IDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdG9wID09IDIwMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnRpbWUgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmJhc2UgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnBvc2l0aW9uID09IDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5kdXJhdGlvbiA9PSAtMSk7CisKKyAgLyogaW52YWxpZCB0aW1lIGdpdmVzIGludmFsaWQgcmVzdWx0ICovCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAtMSk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gLTEpOworCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAwKTsKKworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgMTAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAxMDApOworCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAyMDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDIwMCk7CisKKyAgLyogb3V0c2lkZSBvZiB0aGUgc2VnbWVudCAqLworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgMzAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAtMSk7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKgorICAgKiB0aW1lIHNoaWZ0ZWQgYnkgNTAwCisgICAqKioqKioqKioqKioqKioqKioqKiovCisgIGdzdF9zZWdtZW50X3NldF9uZXdzZWdtZW50ICgmc2VnbWVudCwgRkFMU0UsIDEuMCwgMS4wLAorICAgICAgR1NUX0ZPUk1BVF9USU1FLCAwLCAyMDAsIDUwMCk7CisKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuYmFzZSA9PSAyMDApOworCisgIC8qIGludmFsaWQgdGltZSBnaXZlcyBpbnZhbGlkIHJlc3VsdCAqLworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgLTEpOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IC0xKTsKKworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gNTAwKTsKKworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgMTAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSA2MDApOworCisgIC8qIG91dHNpZGUgb2YgdGhlIHNlZ21lbnQgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDUwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gLTEpOworCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAzMDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IC0xKTsKKworICAvKioqKioqKioqKioqKioqKioqKioqCisgICAqIHRpbWUgb2Zmc2V0IGJ5IDUwMAorICAgKioqKioqKioqKioqKioqKioqKioqLworICBnc3Rfc2VnbWVudF9zZXRfbmV3c2VnbWVudCAoJnNlZ21lbnQsIEZBTFNFLCAxLjAsIDEuMCwKKyAgICAgIEdTVF9GT1JNQVRfVElNRSwgNTAwLCA3MDAsIDApOworCisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmJhc2UgPT0gNDAwKTsKKworICAvKiBpbnZhbGlkIHRpbWUgZ2l2ZXMgaW52YWxpZCByZXN1bHQgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIC0xKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAtMSk7CisKKyAgLyogYmVmb3JlIHNlZ21lbnQgaXMgaW52YWxpZCAqLworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgNDAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAtMSk7CisKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDUwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gMCk7CisKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDYwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gMTAwKTsKKworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgNzAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAyMDApOworCisgIC8qIG91dHNpZGUgb2YgdGhlIHNlZ21lbnQgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDgwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gLTEpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqIHRpbWUgb2Zmc2V0IGJ5IDUwMCwgc2hpZnRlZCBieSAyMDAKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIGdzdF9zZWdtZW50X3NldF9uZXdzZWdtZW50ICgmc2VnbWVudCwgRkFMU0UsIDEuMCwgMS4wLAorICAgICAgR1NUX0ZPUk1BVF9USU1FLCA1MDAsIDcwMCwgMjAwKTsKKworICBmYWlsX3VubGVzcyAoc2VnbWVudC5iYXNlID09IDYwMCk7CisKKyAgLyogaW52YWxpZCB0aW1lIGdpdmVzIGludmFsaWQgcmVzdWx0ICovCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAtMSk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gLTEpOworCisgIC8qIGJlZm9yZSBzZWdtZW50IGlzIGludmFsaWQgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDQwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gLTEpOworCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCA1MDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDIwMCk7CisKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDYwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gMzAwKTsKKworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgNzAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSA0MDApOworCisgIC8qIG91dHNpZGUgb2YgdGhlIHNlZ21lbnQgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDgwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gLTEpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIG1lc3Mgd2l0aCB0aGUgc2VnbWVudCBzdHJ1Y3R1cmUgaW4gdGhlIHRpbWUgZm9ybWF0ICovCitHU1RfU1RBUlRfVEVTVCAoc2VnbWVudF9uZXdzZWdtZW50X3N0cmVhbXRpbWVfcmF0ZSkKK3sKKyAgR3N0U2VnbWVudCBzZWdtZW50OworICBndWludDY0IHJlc3VsdDsKKworICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqIE5vcm1hbCBzZWdtZW50IHJhdGUgMi4wCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIGdzdF9zZWdtZW50X3NldF9uZXdzZWdtZW50ICgmc2VnbWVudCwgRkFMU0UsIDIuMCwgMS4wLAorICAgICAgR1NUX0ZPUk1BVF9USU1FLCAwLCAyMDAsIDApOworCisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnJhdGUgPT0gMi4wKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuYXBwbGllZF9yYXRlID09IDEuMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5mbGFncyA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RhcnQgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMjAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQudGltZSA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuYmFzZSA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQucG9zaXRpb24gPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmR1cmF0aW9uID09IC0xKTsKKworICAvKiBpbnZhbGlkIHRpbWUgZ2l2ZXMgaW52YWxpZCByZXN1bHQgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIC0xKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAtMSk7CisKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDApOworCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAxMDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDEwMCk7CisKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDE1MCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gMTUwKTsKKworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgMjAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAyMDApOworCisgIC8qIG91dHNpZGUgb2YgdGhlIHNlZ21lbnQgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDMwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gLTEpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICogTm9ybWFsIHNlZ21lbnQgcmF0ZSAyLjAsIG9mZnNldAorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICBnc3Rfc2VnbWVudF9zZXRfbmV3c2VnbWVudCAoJnNlZ21lbnQsIEZBTFNFLCAyLjAsIDEuMCwKKyAgICAgIEdTVF9GT1JNQVRfVElNRSwgMTAwLCAzMDAsIDApOworCisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmJhc2UgPT0gMTAwKTsKKworICAvKiBpbnZhbGlkIHRpbWUgZ2l2ZXMgaW52YWxpZCByZXN1bHQgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIC0xKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAtMSk7CisKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDEwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gMCk7CisKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDIwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gMTAwKTsKKworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgMjUwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAxNTApOworCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAzMDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDIwMCk7CisKKyAgLyogb3V0c2lkZSBvZiB0aGUgc2VnbWVudCAqLworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgNDAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAtMSk7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKiBOb3JtYWwgc2VnbWVudCByYXRlIC0xLjAsIG9mZnNldAorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qIGJ1ZmZlcnMgd2lsbCBhcnJpdmUgZnJvbSAzMDAgdG8gMTAwIGluIGEgc2luaywgc3RyZWFtIHRpbWUKKyAgICogY2FsY3VsYXRpb24gaXMgdW5hZmZlY3RlZCBieSB0aGUgcmF0ZSAqLworICBnc3Rfc2VnbWVudF9zZXRfbmV3c2VnbWVudCAoJnNlZ21lbnQsIEZBTFNFLCAtMS4wLCAxLjAsCisgICAgICBHU1RfRk9STUFUX1RJTUUsIDEwMCwgMzAwLCAwKTsKKworICBmYWlsX3VubGVzcyAoc2VnbWVudC5iYXNlID09IDIwMCk7CisKKyAgLyogaW52YWxpZCB0aW1lIGdpdmVzIGludmFsaWQgcmVzdWx0ICovCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAtMSk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gLTEpOworCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAxMDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDApOworCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAyMDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDEwMCk7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqIE5vcm1hbCBzZWdtZW50IHJhdGUgLTEuMCwgb2Zmc2V0LCB0aW1lID0gMjAwCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnQgKCZzZWdtZW50LCBGQUxTRSwgLTEuMCwgMS4wLAorICAgICAgR1NUX0ZPUk1BVF9USU1FLCAxMDAsIDMwMCwgMjAwKTsKKworICAvKiBpbnZhbGlkIHRpbWUgZ2l2ZXMgaW52YWxpZCByZXN1bHQgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIC0xKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAtMSk7CisKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDEwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gMjAwKTsKKworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgMjAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAzMDApOworCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAzMDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDQwMCk7CisKKyAgLyogb3V0c2lkZSBvZiB0aGUgc2VnbWVudCAqLworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgNDAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAtMSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogbWVzcyB3aXRoIHRoZSBzZWdtZW50IHN0cnVjdHVyZSBpbiB0aGUgdGltZSBmb3JtYXQgKi8KK0dTVF9TVEFSVF9URVNUIChzZWdtZW50X25ld3NlZ21lbnRfc3RyZWFtdGltZV9hcHBsaWVkX3JhdGUpCit7CisgIEdzdFNlZ21lbnQgc2VnbWVudDsKKyAgZ3VpbnQ2NCByZXN1bHQ7CisKKyAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqIE5vcm1hbCBzZWdtZW50IHJhdGUgMS4wLCBhcHBsaWVkIHJhdGUgLTEuMAorICAgKiBUaGlzIG1lYW5zIHRoZSB0aW1lc3RhbXBzIHJlcHJlc2VudHMgYSBzdHJlYW0gZ29pbmcgYmFja3dhcmRzCisgICAqIHN0YXJ0aW5nIGZyb20gQHRpbWUgdG8gMC4KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnQgKCZzZWdtZW50LCBGQUxTRSwgMS4wLCAtMS4wLAorICAgICAgR1NUX0ZPUk1BVF9USU1FLCAwLCAyMDAsIDIwMCk7CisKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQucmF0ZSA9PSAxLjApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5hcHBsaWVkX3JhdGUgPT0gLTEuMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5mbGFncyA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RhcnQgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMjAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQudGltZSA9PSAyMDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5iYXNlID09IDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5wb3NpdGlvbiA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZHVyYXRpb24gPT0gLTEpOworCisgIC8qIGludmFsaWQgdGltZSBnaXZlcyBpbnZhbGlkIHJlc3VsdCAqLworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgLTEpOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IC0xKTsKKworICAvKiB3ZSBjb3VudCBiYWNrd2FyZHMgZnJvbSAyMDAgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDIwMCk7CisKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDEwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gMTAwKTsKKworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgMTUwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSA1MCk7CisKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDIwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gMCk7CisKKyAgLyogb3V0c2lkZSBvZiB0aGUgc2VnbWVudCAqLworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgMzAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAtMSk7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqIE5vcm1hbCBzZWdtZW50IHJhdGUgMS4wLCBhcHBsaWVkIHJhdGUgMi4wCisgICAqIFRoaXMgbWVhbnMgdGhlIHRpbWVzdGFtcHMgcmVwcmVzZW50cyBhIHN0cmVhbSBhdCB0d2ljZSB0aGUKKyAgICogbm9ybWFsIHJhdGUKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnQgKCZzZWdtZW50LCBGQUxTRSwgMS4wLCAyLjAsCisgICAgICBHU1RfRk9STUFUX1RJTUUsIDAsIDIwMCwgMCk7CisKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQucmF0ZSA9PSAxLjApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5hcHBsaWVkX3JhdGUgPT0gMi4wKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmZsYWdzID09IDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RvcCA9PSAyMDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC50aW1lID09IDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5iYXNlID09IDIwMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnBvc2l0aW9uID09IDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5kdXJhdGlvbiA9PSAtMSk7CisKKyAgLyogaW52YWxpZCB0aW1lIGdpdmVzIGludmFsaWQgcmVzdWx0ICovCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAtMSk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gLTEpOworCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAwKTsKKworICAvKiB0aGUgc3RyZWFtIHByZXByZXNlbnRzIGEgc3RyZWFtIGdvaW5nIHR3aWNlIGFzIGZhc3QsIHRoZSBwb3NpdGlvbiAKKyAgICogaW4gdGhlIHNlZ21lbnQgaXMgdGhlcmVmb3JlIHNjYWxlZCBieSB0aGUgYXBwbGllZCByYXRlICovCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAxMDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDIwMCk7CisKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDE1MCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gMzAwKTsKKworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgMjAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSA0MDApOworCisgIC8qIG91dHNpZGUgb2YgdGhlIHNlZ21lbnQgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDMwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gLTEpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKiBOb3JtYWwgc2VnbWVudCByYXRlIDEuMCwgYXBwbGllZCByYXRlIC0yLjAKKyAgICogVGhpcyBtZWFucyB0aGUgdGltZXN0YW1wcyByZXByZXNlbnRzIGEgc3RyZWFtIGF0IHR3aWNlIHRoZQorICAgKiByZXZlcnNlIHJhdGUKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnQgKCZzZWdtZW50LCBGQUxTRSwgMS4wLCAtMi4wLAorICAgICAgR1NUX0ZPUk1BVF9USU1FLCAwLCAyMDAsIDQwMCk7CisKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQucmF0ZSA9PSAxLjApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5hcHBsaWVkX3JhdGUgPT0gLTIuMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5mbGFncyA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RhcnQgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMjAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQudGltZSA9PSA0MDApOworICAvKiBwcmV2aW91cyBzZWdtZW50IGxhc3RlZCAyMDAsIHJhdGUgb2YgMi4wIHdhcyBhbHJlYWR5IGFwcGxpZWQgKi8KKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuYmFzZSA9PSA0MDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5wb3NpdGlvbiA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZHVyYXRpb24gPT0gLTEpOworCisgIC8qIGludmFsaWQgdGltZSBnaXZlcyBpbnZhbGlkIHJlc3VsdCAqLworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgLTEpOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IC0xKTsKKworICAvKiB3ZSBjb3VudCBiYWNrd2FyZHMgZnJvbSA0MDAgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDQwMCk7CisKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDEwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gMjAwKTsKKworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgMTUwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAxMDApOworCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAyMDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDApOworCisgIC8qIG91dHNpZGUgb2YgdGhlIHNlZ21lbnQgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDMwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gLTEpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKiBOb3JtYWwgc2VnbWVudCByYXRlIDEuMCwgYXBwbGllZCByYXRlIC0yLjAKKyAgICogVGhpcyBtZWFucyB0aGUgdGltZXN0YW1wcyByZXByZXNlbnRzIGEgc3RyZWFtIGF0IHR3aWNlIHRoZQorICAgKiByZXZlcnNlIHJhdGUsIHN0YXJ0IHRpbWUgY2Fubm90IGNvbXBlbnNhdGUgdGhlIGNvbXBsZXRlCisgICAqIGR1cmF0aW9uIG9mIHRoZSBzZWdtZW50IHNvIHdlIHN0b3AgYXQgMAorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICBnc3Rfc2VnbWVudF9zZXRfbmV3c2VnbWVudCAoJnNlZ21lbnQsIEZBTFNFLCAxLjAsIC0yLjAsCisgICAgICBHU1RfRk9STUFUX1RJTUUsIDAsIDIwMCwgMjAwKTsKKworICBmYWlsX3VubGVzcyAoc2VnbWVudC5yYXRlID09IDEuMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmFwcGxpZWRfcmF0ZSA9PSAtMi4wKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmZsYWdzID09IDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RvcCA9PSAyMDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC50aW1lID09IDIwMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmJhc2UgPT0gNjAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQucG9zaXRpb24gPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmR1cmF0aW9uID09IC0xKTsKKworICAvKiBpbnZhbGlkIHRpbWUgZ2l2ZXMgaW52YWxpZCByZXN1bHQgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIC0xKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAtMSk7CisKKyAgLyogd2UgY291bnQgYmFja3dhcmRzIGZyb20gMjAwICovCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAyMDApOworCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAxMDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDApOworCisgIC8qIGNsYW1wIGF0IDAgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDE1MCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gMCk7CisKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDIwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gMCk7CisKKyAgLyogb3V0c2lkZSBvZiB0aGUgc2VnbWVudCAqLworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgMzAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAtMSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogbWVzcyB3aXRoIHRoZSBzZWdtZW50IHN0cnVjdHVyZSBpbiB0aGUgdGltZSBmb3JtYXQgKi8KK0dTVF9TVEFSVF9URVNUIChzZWdtZW50X25ld3NlZ21lbnRfc3RyZWFtdGltZV9hcHBsaWVkX3JhdGVfcmF0ZSkKK3sKKyAgR3N0U2VnbWVudCBzZWdtZW50OworICBndWludDY0IHJlc3VsdDsKKworICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICogU2VnbWVudCByYXRlIDIuMCwgYXBwbGllZCByYXRlIDIuMAorICAgKiB0aGlzIG1lYW5zIHdlIGhhdmUgYSBkb3VibGUgc3BlZWQgc3RyZWFtIHRoYXQgd2Ugc2hvdWxkCisgICAqIHNwZWVkIHVwIGJ5IGEgZmFjdG9yIG9mIDIuMCBzb21lIG1vcmUuIHRoZSByZXN1bHRpbmcKKyAgICogc3RyZWFtIHdpbGwgYmUgcGxheWVkIGF0IGZvdXIgdGltZXMgdGhlIHNwZWVkLiAKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnQgKCZzZWdtZW50LCBGQUxTRSwgMi4wLCAyLjAsCisgICAgICBHU1RfRk9STUFUX1RJTUUsIDAsIDIwMCwgMCk7CisKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQucmF0ZSA9PSAyLjApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5hcHBsaWVkX3JhdGUgPT0gMi4wKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmZsYWdzID09IDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RvcCA9PSAyMDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC50aW1lID09IDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5iYXNlID09IDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5wb3NpdGlvbiA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZHVyYXRpb24gPT0gLTEpOworCisgIC8qIGludmFsaWQgdGltZSBnaXZlcyBpbnZhbGlkIHJlc3VsdCAqLworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgLTEpOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IC0xKTsKKworICAvKiBvbmx5IGFwcGxpZWQgcmF0ZSBhZmZlY3RzIG91ciBjYWxjdWxhdGlvbiBvZiB0aGUgc3RyZWFtIHRpbWUgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDApOworCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAxMDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDIwMCk7CisKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDE1MCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gMzAwKTsKKworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgMjAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSA0MDApOworCisgIC8qIG91dHNpZGUgb2YgdGhlIHNlZ21lbnQgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDMwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gLTEpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKiBTZWdtZW50IHJhdGUgMi4wLCBhcHBsaWVkIHJhdGUgLTEuMAorICAgKiB0aGlzIG1lYW5zIHdlIGhhdmUgYSByZXZlcnNlIHN0cmVhbSB0aGF0IHdlIHNob3VsZAorICAgKiBzcGVlZCB1cCBieSBhIGZhY3RvciBvZiAyLjAKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnQgKCZzZWdtZW50LCBGQUxTRSwgMi4wLCAtMS4wLAorICAgICAgR1NUX0ZPUk1BVF9USU1FLCAwLCAyMDAsIDIwMCk7CisKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQucmF0ZSA9PSAyLjApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5hcHBsaWVkX3JhdGUgPT0gLTEuMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5mbGFncyA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RhcnQgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMjAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQudGltZSA9PSAyMDApOworICAvKiBwcmV2aW91cyBzZWdtZW50IGxhc3RlZCAxMDAgKi8KKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuYmFzZSA9PSAxMDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5wb3NpdGlvbiA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZHVyYXRpb24gPT0gLTEpOworCisgIC8qIGludmFsaWQgdGltZSBnaXZlcyBpbnZhbGlkIHJlc3VsdCAqLworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgLTEpOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IC0xKTsKKworICAvKiBvbmx5IGFwcGxpZWQgcmF0ZSBhZmZlY3RzIG91ciBjYWxjdWxhdGlvbiBvZiB0aGUgc3RyZWFtIHRpbWUgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDIwMCk7CisKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDEwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gMTAwKTsKKworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgMTUwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSA1MCk7CisKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDIwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gMCk7CisKKyAgLyogb3V0c2lkZSBvZiB0aGUgc2VnbWVudCAqLworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgMzAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAtMSk7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqIFNlZ21lbnQgcmF0ZSAtMS4wLCBhcHBsaWVkIHJhdGUgLTEuMAorICAgKiB0aGlzIG1lYW5zIHdlIGhhdmUgYSByZXZlcnNlIHN0cmVhbSB0aGF0IHdlIHNob3VsZAorICAgKiByZXZlcnNlIHRvIGdldCB0aGUgbm9ybWFsIHN0cmVhbSBhZ2Fpbi4KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnQgKCZzZWdtZW50LCBGQUxTRSwgLTEuMCwgLTEuMCwKKyAgICAgIEdTVF9GT1JNQVRfVElNRSwgMCwgMjAwLCAyMDApOworCisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnJhdGUgPT0gLTEuMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmFwcGxpZWRfcmF0ZSA9PSAtMS4wKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmZsYWdzID09IDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RvcCA9PSAyMDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC50aW1lID09IDIwMCk7CisgIC8qIGFjY3VtdWxhdGVkIDEwMCBvZiBwcmV2aW91cyBzZWdtZW50IHRvIG1ha2UgMjAwICovCisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmJhc2UgPT0gMjAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQucG9zaXRpb24gPT0gMjAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZHVyYXRpb24gPT0gLTEpOworCisgIC8qIGludmFsaWQgdGltZSBnaXZlcyBpbnZhbGlkIHJlc3VsdCAqLworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgLTEpOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IC0xKTsKKworICAvKiBvbmx5IGFwcGxpZWQgcmF0ZSBhZmZlY3RzIG91ciBjYWxjdWxhdGlvbiBvZiB0aGUgc3RyZWFtIHRpbWUgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDIwMCk7CisKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDEwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gMTAwKTsKKworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgMTUwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSA1MCk7CisKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDIwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gMCk7CisKKyAgLyogb3V0c2lkZSBvZiB0aGUgc2VnbWVudCAqLworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgMzAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAtMSk7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqIFNlZ21lbnQgcmF0ZSAtMS4wLCBhcHBsaWVkIHJhdGUgLTEuMAorICAgKiB0aGlzIG1lYW5zIHdlIGhhdmUgYSByZXZlcnNlIHN0cmVhbSB0aGF0IHdlIHNob3VsZAorICAgKiByZXZlcnNlIHRvIGdldCB0aGUgbm9ybWFsIHN0cmVhbSBhZ2Fpbi4KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnQgKCZzZWdtZW50LCBGQUxTRSwgLTEuMCwgMi4wLAorICAgICAgR1NUX0ZPUk1BVF9USU1FLCAwLCAyMDAsIDApOworCisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnJhdGUgPT0gLTEuMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmFwcGxpZWRfcmF0ZSA9PSAyLjApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZmxhZ3MgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0YXJ0ID09IDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdG9wID09IDIwMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnRpbWUgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmJhc2UgPT0gNDAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQucG9zaXRpb24gPT0gMjAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZHVyYXRpb24gPT0gLTEpOworCisgIC8qIGludmFsaWQgdGltZSBnaXZlcyBpbnZhbGlkIHJlc3VsdCAqLworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgLTEpOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IC0xKTsKKworICAvKiBvbmx5IGFwcGxpZWQgcmF0ZSBhZmZlY3RzIG91ciBjYWxjdWxhdGlvbiBvZiB0aGUgc3RyZWFtIHRpbWUgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDApOworCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAxMDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDIwMCk7CisKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDE1MCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gMzAwKTsKKworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgMjAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSA0MDApOworCisgIC8qIG91dHNpZGUgb2YgdGhlIHNlZ21lbnQgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDMwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gLTEpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIG1lc3Mgd2l0aCB0aGUgc2VnbWVudCBzdHJ1Y3R1cmUgaW4gdGhlIHRpbWUgZm9ybWF0ICovCitHU1RfU1RBUlRfVEVTVCAoc2VnbWVudF9uZXdzZWdtZW50X3J1bm5pbmd0aW1lKQoreworICBHc3RTZWdtZW50IHNlZ21lbnQ7CisgIGd1aW50NjQgcmVzdWx0OworCisgIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICogTm9ybWFsIHNlZ21lbnQKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnQgKCZzZWdtZW50LCBGQUxTRSwgMS4wLCAxLjAsCisgICAgICBHU1RfRk9STUFUX1RJTUUsIDAsIDIwMCwgMCk7CisKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQucmF0ZSA9PSAxLjApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5hcHBsaWVkX3JhdGUgPT0gMS4wKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmZsYWdzID09IDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RvcCA9PSAyMDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC50aW1lID09IDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5iYXNlID09IDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5wb3NpdGlvbiA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZHVyYXRpb24gPT0gLTEpOworCisgIC8qIGludmFsaWQgdGltZSBnaXZlcyBpbnZhbGlkIHJlc3VsdCAqLworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIC0xKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAtMSk7CisKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAwKTsKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fcG9zaXRpb24gKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIHJlc3VsdCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gMCk7CisKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAxMDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDEwMCk7CisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3Bvc2l0aW9uICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCByZXN1bHQpOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDEwMCk7CisKKyAgLyogYXQgZWRnZSBpcyBleGFjdGx5IHRoZSBzZWdtZW50IGR1cmF0aW9uICovCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgMjAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAyMDApOworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19wb3NpdGlvbiAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgcmVzdWx0KTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAyMDApOworCisgIC8qIG91dHNpZGUgb2YgdGhlIHNlZ21lbnQgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAzMDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IC0xKTsKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fcG9zaXRpb24gKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDMwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gLTEpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKiB0aW1lIHNoaWZ0ZWQgYnkgNTAwLCBjaGVjayBpZiBhY2N1bXVsYXRpb24gd29ya2VkLgorICAgKiBSYXRlIGNvbnZlcnQgdG8gdHdpY2UgdGhlIHNwZWVkIHdoaWNoIG1lYW5zIHNjYWxpbmcgZG93bgorICAgKiBhbGwgcG9zaXRpb25zIGJ5IDIuMCBpbiB0aGlzIHNlZ21lbnQuCisgICAqIFRoZW4gdGltZSBhcmd1bWVudCBpcyBub3QgdXNlZCBhdCBhbGwgaGVyZS4KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICBnc3Rfc2VnbWVudF9zZXRfbmV3c2VnbWVudCAoJnNlZ21lbnQsIEZBTFNFLCAyLjAsIDEuMCwKKyAgICAgIEdTVF9GT1JNQVRfVElNRSwgMCwgMjAwLCA1MDApOworCisgIC8qIG5vcm1hbCBzcGVlZCBnaXZlcyBlbGFwc2VkIG9mIDIwMCAqLworICBmYWlsX3VubGVzcyAoc2VnbWVudC5iYXNlID09IDIwMCk7CisKKyAgLyogaW52YWxpZCB0aW1lIGdpdmVzIGludmFsaWQgcmVzdWx0ICovCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgLTEpOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IC0xKTsKKworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDIwMCk7CisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3Bvc2l0aW9uICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCByZXN1bHQpOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDApOworCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgMTAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAyNTApOworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19wb3NpdGlvbiAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgcmVzdWx0KTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAxMDApOworCisgIC8qIG91dHNpZGUgb2YgdGhlIHNlZ21lbnQgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCA1MDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IC0xKTsKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fcG9zaXRpb24gKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDMxMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gLTEpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKiB0aW1lIG9mZnNldCBieSA1MDAKKyAgICogYXBwbGllZCByYXRlIGlzIG5vdCB1c2VkIGZvciBydW5uaW5nIHRpbWUKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICBnc3Rfc2VnbWVudF9zZXRfbmV3c2VnbWVudCAoJnNlZ21lbnQsIEZBTFNFLCAxLjAsIDIuMCwKKyAgICAgIEdTVF9GT1JNQVRfVElNRSwgNTAwLCA3MDAsIDApOworCisgIC8qIHByZXZpb3VzIHNlZ21lbnQgcGxheWVkIGF0IGRvdWJsZSBzcGVlZCBnaXZlcyBlbGFwc2VkIHRpbWUgb2YKKyAgICogMTAwIGFkZGVkIHRvIHByZXZpb3VzIGFjY3VtIG9mIDIwMCBnaXZlcyAzMDAuICovCisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmJhc2UgPT0gMzAwKTsKKworICAvKiBpbnZhbGlkIHRpbWUgZ2l2ZXMgaW52YWxpZCByZXN1bHQgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAtMSk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gLTEpOworCisgIC8qIGJlZm9yZSBzZWdtZW50IGlzIGludmFsaWQgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCA0MDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IC0xKTsKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fcG9zaXRpb24gKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDIwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gLTEpOworCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgNTAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAzMDApOworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19wb3NpdGlvbiAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgcmVzdWx0KTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSA1MDApOworCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgNjAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSA0MDApOworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19wb3NpdGlvbiAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgcmVzdWx0KTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSA2MDApOworCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgNzAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSA1MDApOworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19wb3NpdGlvbiAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgcmVzdWx0KTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSA3MDApOworCisgIC8qIG91dHNpZGUgb2YgdGhlIHNlZ21lbnQgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCA4MDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IC0xKTsKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fcG9zaXRpb24gKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDYwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gLTEpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqIHRpbWUgb2Zmc2V0IGJ5IDUwMCwgc2hpZnRlZCBieSAyMDAKKyAgICogTmVnYXRpdmUgcmF0ZSBtYWtlcyB0aGUgcnVubmluZyB0aW1lIGdvIGJhY2t3YXJkcyAKKyAgICogcmVsYXRpdmUgdG8gdGhlIHNlZ21lbnQgc3RvcCBwb3NpdGlvbi4gYWdhaW4gdGltZQorICAgKiBpcyBpZ25vcmVkLgorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnQgKCZzZWdtZW50LCBGQUxTRSwgLTEuMCwgMS4wLAorICAgICAgR1NUX0ZPUk1BVF9USU1FLCA1MDAsIDcwMCwgMjAwKTsKKworICBmYWlsX3VubGVzcyAoc2VnbWVudC5iYXNlID09IDUwMCk7CisKKyAgLyogaW52YWxpZCB0aW1lIGdpdmVzIGludmFsaWQgcmVzdWx0ICovCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgLTEpOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IC0xKTsKKworICAvKiBiZWZvcmUgc2VnbWVudCBpcyBpbnZhbGlkICovCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgNDAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAtMSk7CisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3Bvc2l0aW9uICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCA0MDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IC0xKTsKKworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDUwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gNzAwKTsKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fcG9zaXRpb24gKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIHJlc3VsdCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gNTAwKTsKKworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDYwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gNjAwKTsKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fcG9zaXRpb24gKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIHJlc3VsdCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gNjAwKTsKKworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDcwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gNTAwKTsKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fcG9zaXRpb24gKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIHJlc3VsdCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gNzAwKTsKKworICAvKiBvdXRzaWRlIG9mIHRoZSBzZWdtZW50ICovCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgODAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAtMSk7CisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3Bvc2l0aW9uICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCA4MDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IC0xKTsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKiB0aW1lIG9mZnNldCBieSA1MDAsIHNoaWZ0ZWQgYnkgMjAwCisgICAqIE5lZ2F0aXZlIHJhdGUgbWFrZXMgdGhlIHJ1bm5pbmcgdGltZSBnbyBiYWNrd2FyZHMgYXQKKyAgICogdHdpY2Ugc3BlZWQgcmVsYXRpdmUgdG8gdGhlIHNlZ21lbnQgc3RvcCBwb3NpdGlvbi4gYWdhaW4gCisgICAqIHRpbWUgaXMgaWdub3JlZC4KKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIGdzdF9zZWdtZW50X3NldF9uZXdzZWdtZW50ICgmc2VnbWVudCwgRkFMU0UsIC0yLjAsIC0yLjAsCisgICAgICBHU1RfRk9STUFUX1RJTUUsIDUwMCwgNzAwLCAyMDApOworCisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmJhc2UgPT0gNzAwKTsKKworICAvKiBpbnZhbGlkIHRpbWUgZ2l2ZXMgaW52YWxpZCByZXN1bHQgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAtMSk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gLTEpOworCisgIC8qIGJlZm9yZSBzZWdtZW50IGlzIGludmFsaWQgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCA0MDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IC0xKTsKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fcG9zaXRpb24gKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDYwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gLTEpOworCisgIC8qIHRvdGFsIHNjYWxlZCBzZWdtZW50IHRpbWUgaXMgMTAwLCBhY2N1bSBpcyA3MDAsIHNvIHdlIGdldCA4MDAgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCA1MDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDgwMCk7CisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3Bvc2l0aW9uICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCByZXN1bHQpOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDUwMCk7CisKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCA2MDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDc1MCk7CisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3Bvc2l0aW9uICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCByZXN1bHQpOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDYwMCk7CisKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCA3MDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDcwMCk7CisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3Bvc2l0aW9uICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCByZXN1bHQpOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDcwMCk7CisKKyAgLyogb3V0c2lkZSBvZiB0aGUgc2VnbWVudCAqLworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDgwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gLTEpOworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19wb3NpdGlvbiAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgOTAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAtMSk7CisKKyAgLyogc2VlIGlmIG5lZ2F0aXZlIHJhdGUgY2xvc2VkIHNlZ21lbnQgY29ycmVjdGx5ICovCisgIGdzdF9zZWdtZW50X3NldF9uZXdzZWdtZW50ICgmc2VnbWVudCwgRkFMU0UsIC0yLjAsIC0xLjAsCisgICAgICBHU1RfRk9STUFUX1RJTUUsIDUwMCwgNzAwLCAyMDApOworCisgIC8qIHByZXZpb3VzIHNlZ21lbnQgbGFzdGVkIDEwMCwgYW5kIHdhcyBhdCA3MDAgc28gd2Ugc2hvdWxkIGdldCA4MDAgKi8KKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuYmFzZSA9PSA4MDApOworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19wb3NpdGlvbiAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgODAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSA3MDApOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIG1lc3Mgd2l0aCB0aGUgc2VnbWVudCBzdHJ1Y3R1cmUgaW4gdGhlIHRpbWUgZm9ybWF0ICovCitHU1RfU1RBUlRfVEVTVCAoc2VnbWVudF9uZXdzZWdtZW50X2FjY3VtKQoreworICBHc3RTZWdtZW50IHNlZ21lbnQ7CisgIGd1aW50NjQgcmVzdWx0OworCisgIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICogTm9ybWFsIHJldmVyc2Ugc2VnbWVudAorICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICBnc3Rfc2VnbWVudF9zZXRfbmV3c2VnbWVudCAoJnNlZ21lbnQsIEZBTFNFLCAtMS4wLCAxLjAsCisgICAgICBHU1RfRk9STUFUX1RJTUUsIDAsIDIwMCwgMCk7CisKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQucmF0ZSA9PSAtMS4wKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuYXBwbGllZF9yYXRlID09IDEuMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5mbGFncyA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RhcnQgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMjAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQudGltZSA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuYmFzZSA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQucG9zaXRpb24gPT0gMjAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZHVyYXRpb24gPT0gLTEpOworCisgIC8qIGludmFsaWQgdGltZSBnaXZlcyBpbnZhbGlkIHJlc3VsdCAqLworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIC0xKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAtMSk7CisKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAyMDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDApOworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19wb3NpdGlvbiAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgcmVzdWx0KTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAyMDApOworCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgMTUwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSA1MCk7CisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3Bvc2l0aW9uICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCByZXN1bHQpOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDE1MCk7CisKKyAgLyogdXBkYXRlIHNlZ21lbnQsIHRoaXMgYWNjdW11bGF0ZXMgNTAgZnJvbSB0aGUgcHJldmlvdXMgc2VnbWVudC4gKi8KKyAgZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnQgKCZzZWdtZW50LCBUUlVFLCAtMi4wLCAxLjAsCisgICAgICBHU1RfRk9STUFUX1RJTUUsIDAsIDE1MCwgMCk7CisKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQucmF0ZSA9PSAtMi4wKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuYXBwbGllZF9yYXRlID09IDEuMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5mbGFncyA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RhcnQgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMTUwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQudGltZSA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuYmFzZSA9PSA1MCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnBvc2l0aW9uID09IDE1MCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmR1cmF0aW9uID09IC0xKTsKKworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDE1MCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gNTApOworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19wb3NpdGlvbiAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgcmVzdWx0KTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAxNTApOworCisgIC8qIDUwIGFjY3VtdWxhdGVkICsgNTAgLyAyICovCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgMTAwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSA3NSk7CisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3Bvc2l0aW9uICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCByZXN1bHQpOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDEwMCk7CisKKyAgLyogdXBkYXRlIHNlZ21lbnQsIHRoaXMgZG9lcyBub3QgYWNjdW11bGF0ZSBhbnl0aGluZy4gKi8KKyAgZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnQgKCZzZWdtZW50LCBUUlVFLCAxLjAsIDEuMCwKKyAgICAgIEdTVF9GT1JNQVRfVElNRSwgMTAwLCAyMDAsIDEwMCk7CisKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQucmF0ZSA9PSAxLjApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5hcHBsaWVkX3JhdGUgPT0gMS4wKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmZsYWdzID09IDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAxMDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdG9wID09IDIwMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnRpbWUgPT0gMTAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuYmFzZSA9PSA1MCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnBvc2l0aW9uID09IDE1MCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmR1cmF0aW9uID09IC0xKTsKKworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDEwMCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gNTApOworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19wb3NpdGlvbiAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgcmVzdWx0KTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAxMDApOworCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgMTUwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAxMDApOworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19wb3NpdGlvbiAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgcmVzdWx0KTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAxNTApOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIG1lc3Mgd2l0aCB0aGUgc2VnbWVudCBzdHJ1Y3R1cmUgaW4gdGhlIHRpbWUgZm9ybWF0ICovCitHU1RfU1RBUlRfVEVTVCAoc2VnbWVudF9uZXdzZWdtZW50X2FjY3VtMikKK3sKKyAgR3N0U2VnbWVudCBzZWdtZW50OworICBndWludDY0IHJlc3VsdDsKKworICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqIE5vcm1hbCByZXZlcnNlIHNlZ21lbnQKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnQgKCZzZWdtZW50LCBGQUxTRSwgLTEuMCwgMS4wLAorICAgICAgR1NUX0ZPUk1BVF9USU1FLCAwLCAyMDAsIDApOworCisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnJhdGUgPT0gLTEuMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmFwcGxpZWRfcmF0ZSA9PSAxLjApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZmxhZ3MgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0YXJ0ID09IDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdG9wID09IDIwMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnRpbWUgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmJhc2UgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnBvc2l0aW9uID09IDIwMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmR1cmF0aW9uID09IC0xKTsKKworICAvKiBpbnZhbGlkIHRpbWUgZ2l2ZXMgaW52YWxpZCByZXN1bHQgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAtMSk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gLTEpOworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19wb3NpdGlvbiAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgcmVzdWx0KTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAtMSk7CisKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAyMDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDApOworICByZXN1bHQgPSBnc3Rfc2VnbWVudF90b19wb3NpdGlvbiAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgcmVzdWx0KTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSAyMDApOworCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgMTUwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSA1MCk7CisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3Bvc2l0aW9uICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCByZXN1bHQpOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDE1MCk7CisKKyAgLyogY2xvc2Ugc2VnbWVudCwgdGhpcyBhY2N1bXVsYXRlcyBub3RoaW5nLiAqLworICBnc3Rfc2VnbWVudF9zZXRfbmV3c2VnbWVudCAoJnNlZ21lbnQsIFRSVUUsIC0xLjAsIDEuMCwKKyAgICAgIEdTVF9GT1JNQVRfVElNRSwgMTUwLCAyMDAsIDApOworCisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnJhdGUgPT0gLTEuMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmFwcGxpZWRfcmF0ZSA9PSAxLjApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZmxhZ3MgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0YXJ0ID09IDE1MCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMjAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQudGltZSA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuYmFzZSA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQucG9zaXRpb24gPT0gMjAwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZHVyYXRpb24gPT0gLTEpOworCisgIC8qIG5ldyBzZWdtZW50LCB0aGlzIGFjY3VtdWxhdGVzIDUwLiAqLworICBnc3Rfc2VnbWVudF9zZXRfbmV3c2VnbWVudCAoJnNlZ21lbnQsIEZBTFNFLCAxLjAsIDEuMCwKKyAgICAgIEdTVF9GT1JNQVRfVElNRSwgMTUwLCAzMDAsIDE1MCk7CisKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQucmF0ZSA9PSAxLjApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5hcHBsaWVkX3JhdGUgPT0gMS4wKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmZsYWdzID09IDApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAxNTApOworICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdG9wID09IDMwMCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnRpbWUgPT0gMTUwKTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQuYmFzZSA9PSA1MCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LnBvc2l0aW9uID09IDE1MCk7CisgIGZhaWxfdW5sZXNzIChzZWdtZW50LmR1cmF0aW9uID09IC0xKTsKKworICAvKiBpbnZhbGlkIHRpbWUgZ2l2ZXMgaW52YWxpZCByZXN1bHQgKi8KKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAtMSk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gLTEpOworCisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgMTUwKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSA1MCk7CisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3Bvc2l0aW9uICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCByZXN1bHQpOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDE1MCk7CisKKyAgcmVzdWx0ID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAyMDApOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDEwMCk7CisgIHJlc3VsdCA9IGdzdF9zZWdtZW50X3RvX3Bvc2l0aW9uICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCByZXN1bHQpOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IDIwMCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKyNlbmRpZgorCitHU1RfU1RBUlRfVEVTVCAoc2VnbWVudF9jb3B5KQoreworICBHc3RTZWdtZW50ICpjb3B5OworICBHc3RTZWdtZW50IHNlZ21lbnQgPSB7IDAuMCwgfTsKKworICAvKiB0aGlzIGlzIGEgYm94ZWQgdHlwZSBjb3B5IGZ1bmN0aW9uLCB3ZSBzdXBwb3J0IGNvcHlpbmcgTlVMTCAqLworICBmYWlsX3VubGVzcyAoZ3N0X3NlZ21lbnRfY29weSAoTlVMTCkgPT0gTlVMTCk7CisKKyAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7CisKKyAgc2VnbWVudC5yYXRlID0gLTEuMDsKKyAgc2VnbWVudC5hcHBsaWVkX3JhdGUgPSAxLjA7CisgIHNlZ21lbnQuc3RhcnQgPSAwOworICBzZWdtZW50LnN0b3AgPSAyMDA7CisgIHNlZ21lbnQudGltZSA9IDA7CisKKyAgY29weSA9IGdzdF9zZWdtZW50X2NvcHkgKCZzZWdtZW50KTsKKyAgZmFpbF91bmxlc3MgKGNvcHkgIT0gTlVMTCk7CisgIC8qIHdlIGluaXRlZCB0aGUgc3RydWN0IG9uIHRoZSBzdGFjayB0byB6ZXJvZXMsIHNvIGRpcmVjdCBjb21wYXJpc29uIHNob3VsZAorICAgKiBiZSBvayBoZXJlIGRlc3BpdGUgdGhlIHBhZGRpbmcgZmllbGQgYW5kIHJlZ2FyZGxlc3Mgb2YgaW1wbGVtZW50YXRpb24gKi8KKyAgZmFpbF91bmxlc3MgKG1lbWNtcCAoY29weSwgJnNlZ21lbnQsIHNpemVvZiAoR3N0U2VnbWVudCkpID09IDApOworICBnc3Rfc2VnbWVudF9mcmVlIChjb3B5KTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgU3VpdGUgKgorZ3N0X3NlZ21lbnRfc3VpdGUgKHZvaWQpCit7CisgIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0U2VnbWVudCIpOworICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJzZWdtZW50cyIpOworCisgIHRjYXNlX3NldF90aW1lb3V0ICh0Y19jaGFpbiwgMjApOworCisgIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHNlZ21lbnRfc2Vla19ub3NpemUpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHNlZ21lbnRfc2Vla19zaXplKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBzZWdtZW50X3NlZWtfcmV2ZXJzZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgc2VnbWVudF9zZWVrX3JhdGUpOworI2lmIDAKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBzZWdtZW50X25ld3NlZ21lbnRfb3Blbik7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgc2VnbWVudF9uZXdzZWdtZW50X2Nsb3NlZCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgc2VnbWVudF9uZXdzZWdtZW50X3N0cmVhbXRpbWUpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHNlZ21lbnRfbmV3c2VnbWVudF9zdHJlYW10aW1lX3JhdGUpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHNlZ21lbnRfbmV3c2VnbWVudF9zdHJlYW10aW1lX2FwcGxpZWRfcmF0ZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgc2VnbWVudF9uZXdzZWdtZW50X3N0cmVhbXRpbWVfYXBwbGllZF9yYXRlX3JhdGUpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHNlZ21lbnRfbmV3c2VnbWVudF9ydW5uaW5ndGltZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgc2VnbWVudF9uZXdzZWdtZW50X2FjY3VtKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBzZWdtZW50X25ld3NlZ21lbnRfYWNjdW0yKTsKKyNlbmRpZgorICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHNlZ21lbnRfY29weSk7CisKKyAgcmV0dXJuIHM7Cit9CisKK0dTVF9DSEVDS19NQUlOIChnc3Rfc2VnbWVudCk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYwOGVjOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYwpAQCAtMCwwICsxLDYxMyBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisgKgorICogZ3N0c3RydWN0dXJlLmM6IFVuaXQgdGVzdHMgZm9yIEdzdFN0cnVjdHVyZQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworI2luY2x1ZGUgPGdzdC9nc3RzdHJ1Y3R1cmUuaD4KKyNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KKworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9mcm9tX3N0cmluZ19pbnQpCit7CisgIGNvbnN0IGNoYXIgKnN0cmluZ3NbXSA9IHsKKyAgICAidmlkZW8veC1yYXctcmdiLCB3aWR0aCA9IChpbnQpIDEyMzQ1NiIsCisgICAgInZpZGVvL3gtcmF3LXJnYiwgc3RyaWRlID0gKGludCkgLTEyMzQ1NiIsCisgICAgInZpZGVvL3gtcmF3LXJnYiwgcmVkX21hc2sgPSAoaW50KSAweEZGRkYiLAorICAgICJ2aWRlby94LXJhdy1yZ2IsIHJlZF9tYXNrID0gKGludCkgMHgwMDAwRkZGRiIsCisgICAgInZpZGVvL3gtcmF3LXJnYiwgcmVkX21hc2sgPSAoaW50KSAweDdGRkZGRkZGIiwKKyAgICAidmlkZW8veC1yYXctcmdiLCByZWRfbWFzayA9IChpbnQpIDB4ODAwMDAwMDAiLAorICAgICJ2aWRlby94LXJhdy1yZ2IsIHJlZF9tYXNrID0gKGludCkgMHhGRjAwMDAwMCIsCisgICAgLyogcmVzdWx0IGZyb20KKyAgICAgKiBnc3QtbGF1bmNoIC4uLiAhICJ2aWRlby94LXJhdy1yZ2IsIHJlZF9tYXNrPShpbnQpMHhGRjAwMDAwMCIgISAuLi4gKi8KKyAgICAidmlkZW8veC1yYXctcmdiLFxcIHJlZF9tYXNrPShpbnQpMHhGRjAwMDAwMCIsCisgIH07CisgIGdpbnQgcmVzdWx0c1tdID0geworICAgIDEyMzQ1NiwKKyAgICAtMTIzNDU2LAorICAgIDB4RkZGRiwKKyAgICAweEZGRkYsCisgICAgMHg3RkZGRkZGRiwKKyAgICAoZ2ludCkgMHg4MDAwMDAwMCwKKyAgICAoZ2ludCkgMHhGRjAwMDAwMCwKKyAgICAoZ2ludCkgMHhGRjAwMDAwMCwKKyAgfTsKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKHN0cmluZ3MpOyArK2kpIHsKKyAgICBjb25zdCBjaGFyICpzOworICAgIGNvbnN0IGdjaGFyICpuYW1lOworICAgIGdpbnQgdmFsdWU7CisKKyAgICBzID0gc3RyaW5nc1tpXTsKKworICAgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKHMsIE5VTEwpOworICAgIGZhaWxfaWYgKHN0cnVjdHVyZSA9PSBOVUxMLCAiQ291bGQgbm90IGdldCBzdHJ1Y3R1cmUgZnJvbSBzdHJpbmcgJXMiLCBzKTsKKyAgICBuYW1lID0gZ3N0X3N0cnVjdHVyZV9udGhfZmllbGRfbmFtZSAoc3RydWN0dXJlLCAwKTsKKyAgICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsIG5hbWUsICZ2YWx1ZSkpOworICAgIGZhaWxfdW5sZXNzICh2YWx1ZSA9PSByZXN1bHRzW2ldLAorICAgICAgICAiVmFsdWUgJWQgaXMgbm90IHRoZSBleHBlY3RlZCByZXN1bHQgJWQgZm9yIHN0cmluZyAlcyIsCisgICAgICAgIHZhbHVlLCByZXN1bHRzW2ldLCBzKTsKKworICAgIC8qIGNsZWFudXAgKi8KKyAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHN0cnVjdHVyZSk7CisgIH0KK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9mcm9tX3N0cmluZ191aW50KQoreworICBjb25zdCBjaGFyICpzdHJpbmdzW10gPSB7CisgICAgInRhZ2xpc3QsIGJhciA9ICh1aW50KSAxMjM0NTYiLAorICAgICJ0YWdsaXN0LCBiYXIgPSAodWludCkgMHhGRkZGIiwKKyAgICAidGFnbGlzdCwgYmFyID0gKHVpbnQpIDB4MDAwMEZGRkYiLAorICAgICJ0YWdsaXN0LCBiYXIgPSAodWludCkgMHg3RkZGRkZGRiIsCisgICAgInRhZ2xpc3QsIGJhciA9ICh1aW50KSAweDgwMDAwMDAwIiwKKyAgICAidGFnbGlzdCwgYmFyID0gKHVpbnQpIDB4RkYwMDAwMDAiCisgIH07CisgIGd1aW50IHJlc3VsdHNbXSA9IHsKKyAgICAxMjM0NTYsCisgICAgMHhGRkZGLAorICAgIDB4RkZGRiwKKyAgICAweDdGRkZGRkZGLAorICAgIDB4ODAwMDAwMDAsCisgICAgMHhGRjAwMDAwMCwKKyAgfTsKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKHN0cmluZ3MpOyArK2kpIHsKKyAgICBjb25zdCBjaGFyICpzOworICAgIGNvbnN0IGdjaGFyICpuYW1lOworICAgIGd1aW50IHZhbHVlOworCisgICAgcyA9IHN0cmluZ3NbaV07CisKKyAgICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChzLCBOVUxMKTsKKyAgICBmYWlsX2lmIChzdHJ1Y3R1cmUgPT0gTlVMTCwgIkNvdWxkIG5vdCBnZXQgc3RydWN0dXJlIGZyb20gc3RyaW5nICVzIiwgcyk7CisgICAgbmFtZSA9IGdzdF9zdHJ1Y3R1cmVfbnRoX2ZpZWxkX25hbWUgKHN0cnVjdHVyZSwgMCk7CisgICAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQgKHN0cnVjdHVyZSwgbmFtZSwgJnZhbHVlKSk7CisgICAgZmFpbF91bmxlc3MgKHZhbHVlID09IHJlc3VsdHNbaV0sCisgICAgICAgICJWYWx1ZSAldSBpcyBub3QgdGhlIGV4cGVjdGVkIHJlc3VsdCAldSBmb3Igc3RyaW5nICVzIiwKKyAgICAgICAgdmFsdWUsIHJlc3VsdHNbaV0sIHMpOworCisgICAgLyogY2xlYW51cCAqLworICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoc3RydWN0dXJlKTsKKyAgfQorfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIFRlc3QgdHlwZSBjb252ZXJzaW9ucyBmcm9tIHN0cmluZyAqLworR1NUX1NUQVJUX1RFU1QgKHRlc3RfZnJvbV9zdHJpbmcpCit7CisgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOworICBjb25zdCBnY2hhciAqczsKKyAgY29uc3QgR1ZhbHVlICp2YWw7CisKKyAgcyA9ICJ0ZXN0LXN0cmluZyx2YWx1ZT0xIjsKKyAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAocywgTlVMTCk7CisgIGZhaWxfaWYgKHN0cnVjdHVyZSA9PSBOVUxMLCAiQ291bGQgbm90IGdldCBzdHJ1Y3R1cmUgZnJvbSBzdHJpbmcgJXMiLCBzKTsKKyAgZmFpbF91bmxlc3MgKCh2YWwgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoc3RydWN0dXJlLCAidmFsdWUiKSkgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChHX1ZBTFVFX0hPTERTX0lOVCAodmFsKSk7CisgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoc3RydWN0dXJlKTsKKworICBzID0gInRlc3Qtc3RyaW5nLHZhbHVlPTEuMCI7CisgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKHMsIE5VTEwpOworICBmYWlsX2lmIChzdHJ1Y3R1cmUgPT0gTlVMTCwgIkNvdWxkIG5vdCBnZXQgc3RydWN0dXJlIGZyb20gc3RyaW5nICVzIiwgcyk7CisgIGZhaWxfdW5sZXNzICgodmFsID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgInZhbHVlIikpICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoR19WQUxVRV9IT0xEU19ET1VCTEUgKHZhbCkpOworICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHN0cnVjdHVyZSk7CisKKyAgcyA9ICJ0ZXN0LXN0cmluZyx2YWx1ZT0xLzEiOworICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChzLCBOVUxMKTsKKyAgZmFpbF9pZiAoc3RydWN0dXJlID09IE5VTEwsICJDb3VsZCBub3QgZ2V0IHN0cnVjdHVyZSBmcm9tIHN0cmluZyAlcyIsIHMpOworICBmYWlsX3VubGVzcyAoKHZhbCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsICJ2YWx1ZSIpKSAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19GUkFDVElPTiAodmFsKSk7CisgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoc3RydWN0dXJlKTsKKworICBzID0gInRlc3Qtc3RyaW5nLHZhbHVlPWJhciI7CisgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKHMsIE5VTEwpOworICBmYWlsX2lmIChzdHJ1Y3R1cmUgPT0gTlVMTCwgIkNvdWxkIG5vdCBnZXQgc3RydWN0dXJlIGZyb20gc3RyaW5nICVzIiwgcyk7CisgIGZhaWxfdW5sZXNzICgodmFsID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgInZhbHVlIikpICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoR19WQUxVRV9IT0xEU19TVFJJTkcgKHZhbCkpOworICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHN0cnVjdHVyZSk7CisKKyAgcyA9ICJ0ZXN0LXN0cmluZyx2YWx1ZT10cnVlIjsKKyAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAocywgTlVMTCk7CisgIGZhaWxfaWYgKHN0cnVjdHVyZSA9PSBOVUxMLCAiQ291bGQgbm90IGdldCBzdHJ1Y3R1cmUgZnJvbSBzdHJpbmcgJXMiLCBzKTsKKyAgZmFpbF91bmxlc3MgKCh2YWwgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoc3RydWN0dXJlLCAidmFsdWUiKSkgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChHX1ZBTFVFX0hPTERTX0JPT0xFQU4gKHZhbCkpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX3ZhbHVlX2dldF9ib29sZWFuICh2YWwpLCBUUlVFKTsKKyAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzdHJ1Y3R1cmUpOworCisgIHMgPSAiMC4xMDpkZWNvZGVyLXZpZGVvL21wZWcsIGFiYz0oYm9vbGVhbilmYWxzZSI7CisgIEFTU0VSVF9DUklUSUNBTCAoc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAocywgTlVMTCkpOworICBmYWlsX3VubGVzcyAoc3RydWN0dXJlID09IE5VTEwsICJDb3VsZCBub3QgZ2V0IHN0cnVjdHVyZSBmcm9tIHN0cmluZyAlcyIsIHMpOworCisgIC8qIG1ha2Ugc3VyZSB3ZSBiYWlsIG91dCBjb3JyZWN0bHkgaW4gY2FzZSBvZiBhbiBlcnJvciBvciBpZiBwYXJzaW5nIGZhaWxzICovCisgIHMgPSAiKioqZm9vKioqLCBhYmM9KGJvb2xlYW4pZmFsc2UiOworICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChzLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKHN0cnVjdHVyZSA9PSBOVUxMKTsKKworICAvKiBhc3NlcnQgdGhhdCB3ZSBnZXQgYSB3YXJuaW5nIGlmIHRoZSBzdHJ1Y3R1cmUgd2Fzbid0IGVudGlyZWx5IGNvbnN1bWVkLCBidXQKKyAgICogd2UgZGlkbid0IHByb3ZpZGUgYW4gZW5kIHBvaW50ZXIgKi8KKyAgcyA9ICJmb28vYmFyOyBvdGhlciByYW5kb20gZGF0YSI7CisgIEFTU0VSVF9XQVJOSU5HIChzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChzLCBOVUxMKSk7CisgIGZhaWxfaWYgKHN0cnVjdHVyZSA9PSBOVUxMLCAiQ291bGQgbm90IGdldCBzdHJ1Y3R1cmUgZnJvbSBzdHJpbmcgJXMiLCBzKTsKKyAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzdHJ1Y3R1cmUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfdG9fc3RyaW5nKQoreworICBHc3RTdHJ1Y3R1cmUgKnN0MTsKKworICBBU1NFUlRfQ1JJVElDQUwgKHN0MSA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgiRm9vXG53aXRoLW5ld2xpbmUiLCBOVUxMKSk7CisgIGZhaWxfdW5sZXNzIChzdDEgPT0gTlVMTCk7CisKKyAgQVNTRVJUX0NSSVRJQ0FMIChzdDEgPSBnc3Rfc3RydWN0dXJlX25ldyAoIkZvbyB3aXRoIHdoaXRlc3BhY2UiLCBOVUxMKSk7CisgIGZhaWxfdW5sZXNzIChzdDEgPT0gTlVMTCk7CisgIEFTU0VSVF9DUklUSUNBTCAoc3QxID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCIxc3QiLCBOVUxMKSk7CisgIGZhaWxfdW5sZXNzIChzdDEgPT0gTlVMTCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworCitHU1RfU1RBUlRfVEVTVCAodGVzdF90b19mcm9tX3N0cmluZykKK3sKKyAgR3N0Q2FwcyAqY2FwczEsICpjYXBzMjsKKyAgR3N0U3RydWN0dXJlICpzdDEsICpzdDI7CisgIGdjaGFyICpzdHIsICpyZXMxLCAqcmVzMjsKKworICAvKiB0ZXN0IGVzY2FwaW5nL3VuZXNjYXBpbmcgKi8KKyAgc3QxID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJGb29CYXItMTIzLzBfMSIsICJudW0iLCBHX1RZUEVfSU5ULCA5MTczLAorICAgICAgInN0cmluZyIsIEdfVFlQRV9TVFJJTkcsICJTb21ldGhpbmcgTGlrZSBGYWNlL09mZiIsIE5VTEwpOworICBzdHIgPSBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyAoc3QxKTsKKyAgc3QyID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAoc3RyLCBOVUxMKTsKKyAgZ19mcmVlIChzdHIpOworCisgIGZhaWxfdW5sZXNzIChzdDIgIT0gTlVMTCk7CisKKyAgLyogbmVlZCB0byBwdXQgc3R1Y3R1cmVzIGludG8gY2FwcyB0byBjb21wYXJlICovCisgIGNhcHMxID0gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOworICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlIChjYXBzMSwgc3QxKTsKKyAgY2FwczIgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7CisgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUgKGNhcHMyLCBzdDIpOworICByZXMxID0gZ3N0X2NhcHNfdG9fc3RyaW5nIChjYXBzMSk7CisgIHJlczIgPSBnc3RfY2Fwc190b19zdHJpbmcgKGNhcHMyKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChjYXBzMSwgY2FwczIpLAorICAgICAgIlN0cnVjdHVyZXMgZGlkIG5vdCBtYXRjaDpcblx0U3RydWN0dXJlIDE6ICVzXG5cdFN0cnVjdHVyZSAyOiAlc1xuIiwKKyAgICAgIHJlczEsIHJlczIpOworICBnc3RfY2Fwc191bnJlZiAoY2FwczEpOworICBnc3RfY2Fwc191bnJlZiAoY2FwczIpOworICBnX2ZyZWUgKHJlczEpOworICBnX2ZyZWUgKHJlczIpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2NvbXBsZXRlX3N0cnVjdHVyZSkKK3sKKyAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7CisgIGNvbnN0IGdjaGFyICpzOworCisgIHMgPSAiR3N0RXZlbnRTZWVrLCByYXRlPShkb3VibGUpMSwgZm9ybWF0PShHc3RGb3JtYXQpR1NUX0ZPUk1BVF9USU1FLCBmbGFncz0oR3N0U2Vla0ZsYWdzKUdTVF9TRUVLX0ZMQUdTX05PTkUsIGN1cl90eXBlPShHc3RTZWVrVHlwZSlHU1RfU0VFS19UWVBFX1NFVCwgY3VyPShnaW50NjQpMTAwMDAwMDAwMCwgc3RvcF90eXBlPShHc3RTZWVrVHlwZSlHU1RfU0VFS19UWVBFX05PTkUsIHN0b3A9KGdpbnQ2NCkwIjsKKyAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAocywgTlVMTCk7CisgIGZhaWxfaWYgKHN0cnVjdHVyZSA9PSBOVUxMLCAiQ291bGQgbm90IGdldCBzdHJ1Y3R1cmUgZnJvbSBzdHJpbmcgJXMiLCBzKTsKKyAgLyogRklYTUU6IFRPRE86IGFkZCBjaGVja3MgZm9yIGNvcnJlY3Qgc2VyaWFsaXphdGlvbiBvZiBtZW1iZXJzID8gKi8KKyAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzdHJ1Y3R1cmUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3N0cmluZ19wcm9wZXJ0aWVzKQoreworICBHc3RDYXBzICpjYXBzMSwgKmNhcHMyOworICBHc3RTdHJ1Y3R1cmUgKnN0MSwgKnN0MjsKKyAgZ2NoYXIgKnN0ciwgKnJlczEsICpyZXMyOworCisgIC8qIHRlc3QgZXNjYXBpbmcvdW5lc2NhcGluZyAqLworICBzdDEgPSBnc3Rfc3RydWN0dXJlX25ldyAoIlJhbmRvbVN0cnVjdHVyZSIsICJwcm9wMSIsIEdfVFlQRV9TVFJJTkcsICJmb28iLAorICAgICAgInByb3AyIiwgR19UWVBFX1NUUklORywgIiIsICJwcm9wMyIsIEdfVFlQRV9TVFJJTkcsIE5VTEwsCisgICAgICAicHJvcDQiLCBHX1RZUEVfU1RSSU5HLCAiTlVMTCIsIE5VTEwpOworICBzdHIgPSBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyAoc3QxKTsKKyAgc3QyID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAoc3RyLCBOVUxMKTsKKyAgZ19mcmVlIChzdHIpOworCisgIGZhaWxfdW5sZXNzIChzdDIgIT0gTlVMTCk7CisKKyAgLyogbmVlZCB0byBwdXQgc3R1Y3R1cmVzIGludG8gY2FwcyB0byBjb21wYXJlICovCisgIGNhcHMxID0gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOworICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlIChjYXBzMSwgc3QxKTsKKyAgY2FwczIgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7CisgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUgKGNhcHMyLCBzdDIpOworICByZXMxID0gZ3N0X2NhcHNfdG9fc3RyaW5nIChjYXBzMSk7CisgIHJlczIgPSBnc3RfY2Fwc190b19zdHJpbmcgKGNhcHMyKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChjYXBzMSwgY2FwczIpLAorICAgICAgIlN0cnVjdHVyZXMgZGlkIG5vdCBtYXRjaDpcblx0U3RydWN0dXJlIDE6ICVzXG5cdFN0cnVjdHVyZSAyOiAlc1xuIiwKKyAgICAgIHJlczEsIHJlczIpOworICBnc3RfY2Fwc191bnJlZiAoY2FwczEpOworICBnc3RfY2Fwc191bnJlZiAoY2FwczIpOworICBnX2ZyZWUgKHJlczEpOworICBnX2ZyZWUgKHJlczIpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3N0cnVjdHVyZV9uZXcpCit7CisgIEdzdFN0cnVjdHVyZSAqczsKKyAgR0Vycm9yICplOworICBHUXVhcmsgZG9tYWluOworICBnYm9vbGVhbiBib29sOworICBnaW50IG51bSwgZGVuOworICBHc3RDbG9ja1RpbWUgY2xvY2t0aW1lOworCisgIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoIm5hbWUiLAorICAgICAgImtleSIsIEdfVFlQRV9TVFJJTkcsICJ2YWx1ZSIsCisgICAgICAiYm9vbCIsIEdfVFlQRV9CT09MRUFOLCBUUlVFLAorICAgICAgImZyYWN0aW9uIiwgR1NUX1RZUEVfRlJBQ1RJT04sIDEsIDUsCisgICAgICAiY2xvY2t0aW1lIiwgR1NUX1RZUEVfQ0xPQ0tfVElNRSwgR1NUX0NMT0NLX1RJTUVfTk9ORSwgTlVMTCk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ZpZWxkX3R5cGUgKHMsICJ1bmtub3duIikgPT0gR19UWVBFX0lOVkFMSUQpOworICAvKiB0ZXN0IHNldHRpbmcgYSBkaWZmZXJlbnQgbmFtZSAqLworICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lIChzLCAibmV3bmFtZSIpOworICBmYWlsX3VubGVzcyAoc3RyY21wIChnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHMsICJrZXkiKSwgInZhbHVlIikgPT0gMCk7CisgIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZCAocywgImtleSIpKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3N0cnVjdHVyZV9uX2ZpZWxkcyAocyksIDQpOworICAvKiB0ZXN0IHJlbW92aW5nIGEgZmllbGQgKi8KKyAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKHMsICJrZXkiKTsKKyAgZmFpbF9pZiAoZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzLCAia2V5IikpOworICBmYWlsX2lmIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZCAocywgImtleSIpKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3N0cnVjdHVyZV9uX2ZpZWxkcyAocyksIDMpOworCisgIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF9ib29sZWFuIChzLCAiYm9vbCIsICZib29sKSk7CisgIGZhaWxfdW5sZXNzIChib29sKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfZnJhY3Rpb24gKHMsICJmcmFjdGlvbiIsICZudW0sICZkZW4pKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobnVtLCAxKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZGVuLCA1KTsKKworICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfY2xvY2tfdGltZSAocywgImNsb2NrdGltZSIsICZjbG9ja3RpbWUpKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoY2xvY2t0aW1lLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKworICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOworCisgIGRvbWFpbiA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgidGVzdCIpOworICBlID0gZ19lcnJvcl9uZXcgKGRvbWFpbiwgMCwgImEgdGVzdCBlcnJvciIpOworICBzID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJuYW1lIiwgImtleSIsIEdTVF9UWVBFX0dfRVJST1IsIGUsIE5VTEwpOworICBnX2Vycm9yX2ZyZWUgKGUpOworICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOworCisgIEFTU0VSVF9DUklUSUNBTCAoZ3N0X3N0cnVjdHVyZV9mcmVlIChnc3Rfc3RydWN0dXJlX25ldworICAgICAgICAgICgiMC4xMDpkZWNvZGVyLXZpZGVvL21wZWciLCBOVUxMKSkpOworCisgIC8qIG1ha2Ugc3VyZSB3ZSBiYWlsIG91dCBjb3JyZWN0bHkgaW4gY2FzZSBvZiBhbiBlcnJvciBvciBpZiBwYXJzaW5nIGZhaWxzICovCisgIEFTU0VSVF9DUklUSUNBTCAocyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgiXmpvb1xuYmFcbmRvb14iLAorICAgICAgICAgICJhYmMiLCBHX1RZUEVfQk9PTEVBTiwgRkFMU0UsIE5VTEwpKTsKKyAgZmFpbF91bmxlc3MgKHMgPT0gTlVMTCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfZml4YXRlKQoreworICBHc3RTdHJ1Y3R1cmUgKnM7CisKKyAgcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgibmFtZSIsCisgICAgICAiaW50IiwgR19UWVBFX0lOVCwgNSwKKyAgICAgICJpbnRyYW5nZSIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgNSwgMTAsCisgICAgICAiaW50cmFuZ2UyIiwgR1NUX1RZUEVfSU5UX1JBTkdFLCA1LCAxMCwgTlVMTCk7CisKKyAgZmFpbF9pZiAoZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9pbnQgKHMsICJpbnQiLCA1KSk7CisgIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ludCAocywgImludHJhbmdlIiwgNSkpOworICBmYWlsX2lmIChnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ludCAocywgImludHJhbmdlIiwgNSkpOworICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9pbnQgKHMsICJpbnRyYW5nZTIiLCAxNSkpOworICBmYWlsX2lmIChnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ludCAocywgImludHJhbmdlMiIsIDE1KSk7CisgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocyk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfZml4YXRlX2ZyYWNfbGlzdCkKK3sKKyAgR3N0U3RydWN0dXJlICpzLCAqczI7CisgIEdWYWx1ZSBsaXN0ID0geyAwIH07CisgIEdWYWx1ZSBmcmFjID0geyAwIH07CisgIGdjaGFyICpzdHI7CisgIGdpbnQgbnVtLCBkZW5vbTsKKworICBnX3ZhbHVlX2luaXQgKCZsaXN0LCBHU1RfVFlQRV9MSVNUKTsKKyAgZ192YWx1ZV9pbml0ICgmZnJhYywgR1NUX1RZUEVfRlJBQ1RJT04pOworCisgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZmcmFjLCAzMCwgMSk7CisgIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoJmxpc3QsICZmcmFjKTsKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJmZyYWMsIDE1LCAxKTsKKyAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlICgmbGlzdCwgJmZyYWMpOworICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmZnJhYywgMTAsIDEpOworICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZsaXN0LCAmZnJhYyk7CisKKyAgcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgibmFtZSIsIE5VTEwpOworICBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAocywgImZyYWMiLCAmbGlzdCk7CisgIGdfdmFsdWVfdW5zZXQgKCZmcmFjKTsKKyAgZ192YWx1ZV91bnNldCAoJmxpc3QpOworCisgIHN0ciA9IGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChzKTsKKyAgR1NUX0RFQlVHICgibGlzdCAlcyIsIHN0cik7CisgIGdfZnJlZSAoc3RyKTsKKworICAvKiB0YWtlIGNvcHkgKi8KKyAgczIgPSBnc3Rfc3RydWN0dXJlX2NvcHkgKHMpOworCisgIC8qIGZpeGF0ZSB0byB0aGUgbmVhcmVzdCBmcmFjdGlvbiwgdGhpcyBzaG91bGQgZ2l2ZSAxNS8xICovCisgIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ZyYWN0aW9uIChzLCAiZnJhYyIsIDE0LCAxKSk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ZyYWN0aW9uIChzLCAiZnJhYyIsICZudW0sICZkZW5vbSkpOworICBmYWlsX3VubGVzcyAobnVtID09IDE1KTsKKyAgZmFpbF91bmxlc3MgKGRlbm9tID09IDEpOworCisgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocyk7CisgIHMgPSBzMjsKKworICAvKiBmaXhhdGUgdG8gdGhlIG5lYXJlc3QgZnJhY3Rpb24sIHRoaXMgc2hvdWxkIGdpdmUgMzAvMSAqLworICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9mcmFjdGlvbiAocywgImZyYWMiLCBHX01BWElOVCwKKyAgICAgICAgICAxKSk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ZyYWN0aW9uIChzLCAiZnJhYyIsICZudW0sICZkZW5vbSkpOworICBmYWlsX3VubGVzcyAobnVtID09IDMwKTsKKyAgZmFpbF91bmxlc3MgKGRlbm9tID09IDEpOworICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3N0cnVjdHVyZV9uZXN0ZWQpCit7CisgIEdzdFN0cnVjdHVyZSAqc3AsICpzYzEsICpzYzI7CisgIGdjaGFyICpzdHI7CisKKyAgc2MxID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJDYW1lcmEiLAorICAgICAgIlhSZXNvbHV0aW9uIiwgR19UWVBFX0lOVCwgNzIsICJZUmVzb2x1dGlvbiIsIEdfVFlQRV9JTlQsIDczLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKHNjMSAhPSBOVUxMKTsKKworICBzYzIgPSBnc3Rfc3RydWN0dXJlX25ldyAoIkltYWdlLURhdGEiLAorICAgICAgIk9yaWVudGF0aW9uIiwgR19UWVBFX1NUUklORywgInRvcC1sZWZ0IiwKKyAgICAgICJDb21tZW50IiwgR19UWVBFX1NUUklORywgInN1cGVyIHBob3RvIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChzYzIgIT0gTlVMTCk7CisKKyAgc3AgPSBnc3Rfc3RydWN0dXJlX25ldyAoIkV4aWYiLCAiQ2FtZXJhIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBzYzEsCisgICAgICAiSW1hZ2UgRGF0YSIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgc2MyLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKHNwICE9IE5VTEwpOworCisgIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX25fZmllbGRzIChzcCkgPT0gMik7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkX3R5cGVkIChzcCwgIkNhbWVyYSIsCisgICAgICAgICAgR1NUX1RZUEVfU1RSVUNUVVJFKSk7CisKKyAgc3RyID0gZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKHNwKTsKKyAgZmFpbF91bmxlc3MgKHN0ciAhPSBOVUxMKTsKKworICBHU1RfREVCVUcgKCJzZXJpYWxpemVkIHRvICclcyciLCBzdHIpOworCisgIGZhaWxfdW5sZXNzIChnX3N0cl9lcXVhbCAoc3RyLAorICAgICAgICAgICJFeGlmIgorICAgICAgICAgICIsIENhbWVyYT0oc3RydWN0dXJlKVwiQ2FtZXJhXFwsXFwgWFJlc29sdXRpb25cXD1cXChpbnRcXCk3MlxcLFxcIFlSZXNvbHV0aW9uXFw9XFwoaW50XFwpNzNcXDtcIiIKKyAgICAgICAgICAiLCBJbWFnZSBEYXRhPShzdHJ1Y3R1cmUpXCJJbWFnZS1EYXRhXFwsXFwgT3JpZW50YXRpb25cXD1cXChzdHJpbmdcXCl0b3AtbGVmdFxcLFxcIENvbW1lbnRcXD1cXChzdHJpbmdcXClcXFwic3VwZXJcXFxcXFwgcGhvdG9cXFwiXFw7XCI7IikpOworCisgIGdfZnJlZSAoc3RyKTsKKyAgc3RyID0gTlVMTDsKKworICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHNjMSk7CisgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoc2MyKTsKKyAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzcCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3RydWN0dXJlX25lc3RlZF9mcm9tX2FuZF90b19zdHJpbmcpCit7CisgIEdzdFN0cnVjdHVyZSAqczsKKyAgY29uc3QgZ2NoYXIgKnN0cjE7CisgIGdjaGFyICpzdHIyLCAqZW5kID0gTlVMTDsKKworICBzdHIxID0gIm1haW4iCisgICAgICAiLCBtYWluLXN1YjE9KHN0cnVjdHVyZSlcInR5cGUtYlxcLFxcIG1hY2hpbmUtdHlwZVxcPVxcKGludFxcKTBcXDtcIiIKKyAgICAgICIsIG1haW4tc3ViMj0oc3RydWN0dXJlKVwidHlwZS1hXFwsXFwgcGx1Z2luLWZpbGVuYW1lXFw9XFwoc3RyaW5nXFwpXFxcIi9ob21lL3VzZXIvbGliL2xpYlxcXFxcXCB3aXRoXFxcXFxcIHNwYWNlcy5kbGxcXFwiXFwsXFwgbWFjaGluZS10eXBlXFw9XFwoaW50XFwpMVxcO1wiIgorICAgICAgIiwgbWFpbi1zdWIzPShzdHJ1Y3R1cmUpXCJ0eXBlLWJcXCxcXCBwbHVnaW4tZmlsZW5hbWVcXD1cXChzdHJpbmdcXCkvaG9tZS91c2VyL2xpYi9saWJfbm9fc3BhY2VzLnNvXFwsXFwgbWFjaGluZS10eXBlXFw9XFwoaW50XFwpMVxcO1wiIgorICAgICAgIjsiOworCisgIHMgPSBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChzdHIxLCAmZW5kKTsKKyAgZmFpbF91bmxlc3MgKHMgIT0gTlVMTCk7CisKKyAgR1NUX0RFQlVHICgibm90IHBhcnNlZCBwYXJ0IDogJXMiLCBlbmQpOworICBmYWlsX3VubGVzcyAoKmVuZCA9PSAnXDAnKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9uX2ZpZWxkcyAocykgPT0gMyk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkX3R5cGVkIChzLCAibWFpbi1zdWIxIiwKKyAgICAgICAgICBHU1RfVFlQRV9TVFJVQ1RVUkUpKTsKKworICBzdHIyID0gZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKHMpOworICBmYWlsX3VubGVzcyAoc3RyMiAhPSBOVUxMKTsKKworICBmYWlsX3VubGVzcyAoZ19zdHJfZXF1YWwgKHN0cjEsIHN0cjIpKTsKKworICBnX2ZyZWUgKHN0cjIpOworCisgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocyk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfdmFyYXJnX2dldHRlcnMpCit7CisgIEdzdFN0cnVjdHVyZSAqczsKKyAgR3N0QnVmZmVyICpidWYsICpidWYyOworICBnYm9vbGVhbiByZXQ7CisgIEdzdENhcHMgKmNhcHMsICpjYXBzMjsKKyAgZ2RvdWJsZSBkOworICBnaW50NjQgaTY0OworICBnY2hhciAqYzsKKyAgZ2ludCBpLCBudW0sIGRlbm9tOworICBndWludDggKmRhdGE7CisKKyAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgzKTsKKworICBkYXRhID0gZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgTlVMTCwgTlVMTCwgR1NUX01BUF9XUklURSk7CisgIGRhdGFbMF0gPSAweGYwOworICBkYXRhWzFdID0gMHg2NjsKKyAgZGF0YVsyXSA9IDB4MGQ7CisgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgZGF0YSwgMyk7CisKKyAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby94LWZvbyIsIE5VTEwpOworCisgIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoInRlc3QiLCAiaW50IiwgR19UWVBFX0lOVCwgMTIzNDU2NzgsICJzdHJpbmciLAorICAgICAgR19UWVBFX1NUUklORywgIkhlbGxvIFdvcmxkISIsICJidWYiLCBHU1RfVFlQRV9CVUZGRVIsIGJ1ZiwgImNhcHMiLAorICAgICAgR1NUX1RZUEVfQ0FQUywgY2FwcywgImludDY0IiwgR19UWVBFX0lOVDY0LCBHX0dJTlQ2NF9DT05TVEFOVCAoLTk5KSwKKyAgICAgICJkb3VibGUiLCBHX1RZUEVfRE9VQkxFLCBHX01BWERPVUJMRSwgImZyYWciLCBHU1RfVFlQRV9GUkFDVElPTiwgMzksIDE0LAorICAgICAgTlVMTCk7CisKKyAgLyogZmlyc3QgdGhlIHBsYWluIG9uZSAqLworICByZXQgPSBnc3Rfc3RydWN0dXJlX2dldCAocywgImRvdWJsZSIsIEdfVFlQRV9ET1VCTEUsICZkLCAic3RyaW5nIiwKKyAgICAgIEdfVFlQRV9TVFJJTkcsICZjLCAiY2FwcyIsIEdTVF9UWVBFX0NBUFMsICZjYXBzMiwgImJ1ZiIsCisgICAgICBHU1RfVFlQRV9CVUZGRVIsICZidWYyLCAiZnJhZyIsIEdTVF9UWVBFX0ZSQUNUSU9OLCAmbnVtLCAmZGVub20sICJpbnQiLAorICAgICAgR19UWVBFX0lOVCwgJmksICJpbnQ2NCIsIEdfVFlQRV9JTlQ2NCwgJmk2NCwgTlVMTCk7CisKKyAgZmFpbF91bmxlc3MgKHJldCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGMsICJIZWxsbyBXb3JsZCEiKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoaSwgMTIzNDU2NzgpOworICBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQgKGQsIEdfTUFYRE9VQkxFKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobnVtLCAzOSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGRlbm9tLCAxNCk7CisgIGZhaWxfdW5sZXNzIChpNjQgPT0gLTk5KTsKKyAgZmFpbF91bmxlc3MgKGNhcHMgPT0gY2FwczIpOworICBmYWlsX3VubGVzcyAoYnVmID09IGJ1ZjIpOworCisgIC8qIGV4cGVjdGVkIGZhaWx1cmVzICovCisgIEFTU0VSVF9DUklUSUNBTCAoZ3N0X3N0cnVjdHVyZV9nZXQgKHMsIE5VTEwsIEdfVFlQRV9JTlQsICZpLCBOVUxMKSk7CisgIGZhaWxfaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0IChzLCAiaW50IiwgR19UWVBFX0lOVCwgJmksICJkb3VibGUiLAorICAgICAgICAgIEdfVFlQRV9GTE9BVCwgJmQsIE5VTEwpKTsKKyAgZmFpbF9pZiAoZ3N0X3N0cnVjdHVyZV9nZXQgKHMsICJpbnQiLCBHX1RZUEVfSU5ULCAmaSwgImRvb2JsZSIsCisgICAgICAgICAgR19UWVBFX0RPVUJMRSwgJmQsIE5VTEwpKTsKKworICBnX2ZyZWUgKGMpOworICBjID0gTlVMTDsKKyAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMyKTsKKyAgY2FwczIgPSBOVUxMOworICBnc3RfYnVmZmVyX3VucmVmIChidWYyKTsKKyAgYnVmMiA9IE5VTEw7CisKKyAgLyogYW5kIG5vdyB0aGUgX2lkIHZhcmlhbnQgKi8KKyAgcmV0ID0gZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKHMsIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgiZG91YmxlIiksCisgICAgICBHX1RZUEVfRE9VQkxFLCAmZCwgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJzdHJpbmciKSwgR19UWVBFX1NUUklORywKKyAgICAgICZjLCBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoImNhcHMiKSwgR1NUX1RZUEVfQ0FQUywgJmNhcHMyLAorICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJidWYiKSwgR1NUX1RZUEVfQlVGRkVSLCAmYnVmMiwKKyAgICAgIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgiaW50IiksIEdfVFlQRV9JTlQsICZpLAorICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJpbnQ2NCIpLCBHX1RZUEVfSU5UNjQsICZpNjQsIE5VTEwpOworCisgIGZhaWxfdW5sZXNzIChyZXQpOworICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChjLCAiSGVsbG8gV29ybGQhIik7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGksIDEyMzQ1Njc4KTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0IChkLCBHX01BWERPVUJMRSk7CisgIGZhaWxfdW5sZXNzIChpNjQgPT0gLTk5KTsKKyAgZmFpbF91bmxlc3MgKGNhcHMgPT0gY2FwczIpOworICBmYWlsX3VubGVzcyAoYnVmID09IGJ1ZjIpOworCisgIC8qIGV4cGVjdGVkIGZhaWx1cmVzICovCisgIEFTU0VSVF9DUklUSUNBTCAoZ3N0X3N0cnVjdHVyZV9nZXQgKHMsIDAsIEdfVFlQRV9JTlQsICZpLCBOVUxMKSk7CisgIGZhaWxfaWYgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0IChzLCBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoImludCIpLAorICAgICAgICAgIEdfVFlQRV9JTlQsICZpLCBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoImRvdWJsZSIpLCBHX1RZUEVfRkxPQVQsCisgICAgICAgICAgJmQsIE5VTEwpKTsKKyAgZmFpbF9pZiAoZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKHMsIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgiaW50IiksCisgICAgICAgICAgR19UWVBFX0lOVCwgJmksIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgiZG9vYmxlIiksIEdfVFlQRV9ET1VCTEUsCisgICAgICAgICAgJmQsIE5VTEwpKTsKKworICBnX2ZyZWUgKGMpOworICBnc3RfY2Fwc191bnJlZiAoY2FwczIpOworICBnc3RfYnVmZmVyX3VucmVmIChidWYyKTsKKworICAvKiBmaW5hbGx5IG1ha2Ugc3VyZSBOVUxMIGFzIHJldHVybiBsb2NhdGlvbiBpcyBoYW5kbGVkIGdyYWNlZnVsbHkgKi8KKyAgcmV0ID0gZ3N0X3N0cnVjdHVyZV9nZXQgKHMsICJkb3VibGUiLCBHX1RZUEVfRE9VQkxFLCBOVUxMLCAic3RyaW5nIiwKKyAgICAgIEdfVFlQRV9TVFJJTkcsIE5VTEwsICJjYXBzIiwgR1NUX1RZUEVfQ0FQUywgTlVMTCwgImJ1ZiIsCisgICAgICBHU1RfVFlQRV9CVUZGRVIsIE5VTEwsICJpbnQiLCBHX1RZUEVfSU5ULCAmaSwgImZyYWciLCBHU1RfVFlQRV9GUkFDVElPTiwKKyAgICAgIE5VTEwsIE5VTEwsICJpbnQ2NCIsIEdfVFlQRV9JTlQ2NCwgJmk2NCwgTlVMTCk7CisKKyAgQVNTRVJUX1dBUk5JTkcgKGdzdF9zdHJ1Y3R1cmVfZ2V0IChzLCAiZnJhZyIsIEdTVF9UWVBFX0ZSQUNUSU9OLCBOVUxMLAorICAgICAgICAgICZkZW5vbSwgTlVMTCkpOworICBBU1NFUlRfV0FSTklORyAoZ3N0X3N0cnVjdHVyZV9nZXQgKHMsICJmcmFnIiwgR1NUX1RZUEVfRlJBQ1RJT04sICZudW0sCisgICAgICAgICAgTlVMTCwgTlVMTCkpOworCisgIC8qIGNsZWFuIHVwICovCisgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKKyAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgU3VpdGUgKgorZ3N0X3N0cnVjdHVyZV9zdWl0ZSAodm9pZCkKK3sKKyAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RTdHJ1Y3R1cmUiKTsKKyAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOworCisgIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZnJvbV9zdHJpbmdfaW50KTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Zyb21fc3RyaW5nX3VpbnQpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZnJvbV9zdHJpbmcpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdG9fc3RyaW5nKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3RvX2Zyb21fc3RyaW5nKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3N0cmluZ19wcm9wZXJ0aWVzKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2NvbXBsZXRlX3N0cnVjdHVyZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdHJ1Y3R1cmVfbmV3KTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2ZpeGF0ZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9maXhhdGVfZnJhY19saXN0KTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3N0cnVjdHVyZV9uZXN0ZWQpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc3RydWN0dXJlX25lc3RlZF9mcm9tX2FuZF90b19zdHJpbmcpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdmFyYXJnX2dldHRlcnMpOworICByZXR1cm4gczsKK30KKworR1NUX0NIRUNLX01BSU4gKGdzdF9zdHJ1Y3R1cmUpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdHN5c3RlbWNsb2NrLmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0c3lzdGVtY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjA3NjY3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hlY2svZ3N0L2dzdHN5c3RlbWNsb2NrLmMKQEAgLTAsMCArMSw2NjggQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+CisgKgorICogZ3N0c3lzdGVtY2xvY2suYzogVW5pdCB0ZXN0IGZvciBHc3RTeXN0ZW1DbG9jaworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KKworc3RhdGljIEdNdXRleCAqYWZfbG9jazsKK3N0YXRpYyBHQ29uZCAqYWZfY29uZDsKKworLyogc2VlIGlmIHRoZSBkZWZpbmVzIG1ha2Ugc2Vuc2UgKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X3JhbmdlKQoreworICBHc3RDbG9ja1RpbWUgdGltZSwgdGltZTI7CisKKyAgdGltZSA9IEdTVF9TRUNPTkQ7CisgIGZhaWxfdW5sZXNzICh0aW1lID09IEdfR1VJTlQ2NF9DT05TVEFOVCAoMTAwMDAwMDAwMCkpOworCisgIHRpbWUyID0gdGltZSAvIDEwMDA7CisgIGZhaWxfdW5sZXNzICh0aW1lMiA9PSAxMDAwMDAwKTsKKyAgZmFpbF91bmxlc3MgKHRpbWUyID09IEdTVF9NU0VDT05EKTsKKyAgZmFpbF91bmxlc3MgKHRpbWUyID09IEdTVF9USU1FX0FTX1VTRUNPTkRTICh0aW1lKSk7CisKKyAgdGltZTIgPSB0aW1lIC8gMTAwMDAwMDsKKyAgZmFpbF91bmxlc3MgKHRpbWUyID09IDEwMDApOworICBmYWlsX3VubGVzcyAodGltZTIgPT0gR1NUX1VTRUNPTkQpOworICBmYWlsX3VubGVzcyAodGltZTIgPT0gR1NUX1RJTUVfQVNfTVNFQ09ORFMgKHRpbWUpKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9zaWduZWRuZXNzKQoreworICBHc3RDbG9ja1RpbWUgdGltZVtdID0geyAwLCAxLCBHX01BWFVJTlQ2NCAvIEdTVF9TRUNPTkQgfTsKKyAgR3N0Q2xvY2tUaW1lRGlmZiBkaWZmW10gPQorICAgICAgeyAwLCAxLCAtMSwgR19NQVhJTlQ2NCAvIEdTVF9TRUNPTkQsIEdfTUlOSU5UNjQgLyBHU1RfU0VDT05EIH07CisgIGd1aW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAodGltZSk7IGkrKykgeworICAgIGZhaWxfaWYgKHRpbWVbaV0gIT0gKHRpbWVbaV0gKiBHU1RfU0VDT05EIC8gR1NUX1NFQ09ORCkpOworICB9CisgIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKGRpZmYpOyBpKyspIHsKKyAgICBmYWlsX2lmIChkaWZmW2ldICE9IChkaWZmW2ldICogR1NUX1NFQ09ORCAvIEdTVF9TRUNPTkQpKTsKKyAgfQorfQorCitHU1RfRU5EX1RFU1Q7CisKKyNkZWZpbmUgVElNRV9VTklUIChHU1RfU0VDT05EIC8gNSkKK3N0YXRpYyB2b2lkCitnc3RfY2xvY2tfZGVidWcgKEdzdENsb2NrICogY2xvY2spCit7CisgIEdzdENsb2NrVGltZSB0aW1lOworCisgIHRpbWUgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKGNsb2NrKTsKKyAgR1NUX0RFQlVHICgiQ2xvY2sgaW5mbzogdGltZSAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKHRpbWUpKTsKK30KKworc3RhdGljIGdib29sZWFuCitva19jYWxsYmFjayAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0Q2xvY2tUaW1lIHRpbWUsCisgICAgR3N0Q2xvY2tJRCBpZCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBHU1RfTE9HICgidW5sb2NrZWQgYXN5bmMgaWQgJXAiLCBpZCk7CisgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFuCitlcnJvcl9jYWxsYmFjayAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0Q2xvY2tUaW1lIHRpbWUsCisgICAgR3N0Q2xvY2tJRCBpZCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBHU1RfV0FSTklORyAoInVubG9ja2VkIHVuc2NoZWR1bGVkIGFzeW5jIGlkICVwLCB0aGlzIGlzIHdyb25nIiwgaWQpOworICBmYWlsX2lmIChUUlVFKTsKKworICByZXR1cm4gRkFMU0U7Cit9CisKK0dNdXRleCAqc3RvcmVfbG9jazsKKworc3RhdGljIGdib29sZWFuCitzdG9yZV9jYWxsYmFjayAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0Q2xvY2tUaW1lIHRpbWUsCisgICAgR3N0Q2xvY2tJRCBpZCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBHTGlzdCAqKmxpc3QgPSB1c2VyX2RhdGE7CisKKyAgR1NUX0RFQlVHICgidW5sb2NrZWQgYXN5bmMgaWQgJXAiLCBpZCk7CisgIGdfbXV0ZXhfbG9jayAoc3RvcmVfbG9jayk7CisgICpsaXN0ID0gZ19saXN0X2FwcGVuZCAoKmxpc3QsIGlkKTsKKyAgZ19tdXRleF91bmxvY2sgKHN0b3JlX2xvY2spOworICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorbm90aWZ5X2NhbGxiYWNrIChHc3RDbG9jayAqIGNsb2NrLCBHc3RDbG9ja1RpbWUgdGltZSwKKyAgICBHc3RDbG9ja0lEIGlkLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIGdib29sZWFuICpyZXQgPSAoZ2Jvb2xlYW4gKikgdXNlcl9kYXRhOworCisgIGlmIChyZXQgIT0gTlVMTCkKKyAgICAqcmV0ID0gVFJVRTsKKworICByZXR1cm4gRkFMU0U7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3NpbmdsZV9zaG90KQoreworICBHc3RDbG9jayAqY2xvY2s7CisgIEdzdENsb2NrSUQgaWQsIGlkMjsKKyAgR3N0Q2xvY2tUaW1lIGJhc2U7CisgIEdzdENsb2NrUmV0dXJuIHJlc3VsdDsKKworICBjbG9jayA9IGdzdF9zeXN0ZW1fY2xvY2tfb2J0YWluICgpOworICBmYWlsX3VubGVzcyAoY2xvY2sgIT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgaW5zdGFuY2Ugb2YgR3N0U3lzdGVtQ2xvY2siKTsKKworICBnc3RfY2xvY2tfZGVidWcgKGNsb2NrKTsKKyAgYmFzZSA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOworCisgIGlkID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIGJhc2UgKyBUSU1FX1VOSVQpOworICBmYWlsX3VubGVzcyAoaWQgIT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgc2luZ2xlIHNob3QgaWQiKTsKKworICBHU1RfREVCVUcgKCJ3YWl0aW5nIG9uZSB0aW1lIHVuaXQiKTsKKyAgcmVzdWx0ID0gZ3N0X2Nsb2NrX2lkX3dhaXQgKGlkLCBOVUxMKTsKKyAgZ3N0X2Nsb2NrX2RlYnVnIChjbG9jayk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gR1NUX0NMT0NLX09LLCAiV2FpdGluZyBkaWQgbm90IHJldHVybiBPSyAocmVzdWx0PSVkKSIsCisgICAgICByZXN1bHQpOworICBmYWlsX3VubGVzcyAoZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jaykgPiAoYmFzZSArIFRJTUVfVU5JVCksCisgICAgICAidGFyZ2V0IHRpbWUgaGFzIG5vdCBiZWVuIHJlYWNoZWQiKTsKKworICBHU1RfREVCVUcgKCJ3YWl0aW5nIGluIHRoZSBwYXN0Iik7CisgIHJlc3VsdCA9IGdzdF9jbG9ja19pZF93YWl0IChpZCwgTlVMTCk7CisgIGdzdF9jbG9ja19kZWJ1ZyAoY2xvY2spOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IEdTVF9DTE9DS19FQVJMWSwKKyAgICAgICJXYWl0aW5nIGRpZCBub3QgcmV0dXJuIEVBUkxZKHJlc3VsdD0lZCkiLCByZXN1bHQpOworICBnc3RfY2xvY2tfaWRfdW5yZWYgKGlkKTsKKworICBpZCA9IGdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKGNsb2NrLCBiYXNlICsgMiAqIFRJTUVfVU5JVCk7CisgIEdTVF9ERUJVRyAoIndhaXRpbmcgb25lIHNlY29uZCBhc3luYyBpZCAlcCIsIGlkKTsKKyAgcmVzdWx0ID0gZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMgKGlkLCBva19jYWxsYmFjaywgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gR1NUX0NMT0NLX09LLCAiV2FpdGluZyBkaWQgbm90IHJldHVybiBPSyIpOworICBnX3VzbGVlcCAoVElNRV9VTklUIC8gKDIgKiAxMDAwKSk7CisgIGdzdF9jbG9ja19pZF91bnNjaGVkdWxlIChpZCk7CisgIGdzdF9jbG9ja19pZF91bnJlZiAoaWQpOworCisgIGlkID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIGJhc2UgKyA1ICogVElNRV9VTklUKTsKKyAgR1NUX0RFQlVHICgid2FpdGluZyBvbmUgc2Vjb25kIGFzeW5jLCB3aXRoIGNhbmNlbCBvbiBpZCAlcCIsIGlkKTsKKyAgcmVzdWx0ID0gZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMgKGlkLCBlcnJvcl9jYWxsYmFjaywgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gR1NUX0NMT0NLX09LLCAiV2FpdGluZyBkaWQgbm90IHJldHVybiBPSyIpOworICBnX3VzbGVlcCAoVElNRV9VTklUIC8gKDIgKiAxMDAwKSk7CisgIEdTVF9ERUJVRyAoImNhbmNlbCBpZCAlcCBhZnRlciBoYWxmIGEgdGltZSB1bml0IiwgaWQpOworICBnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSAoaWQpOworICBnc3RfY2xvY2tfaWRfdW5yZWYgKGlkKTsKKyAgR1NUX0RFQlVHICgiY2FuY2VsZWQgaWQgJXAiLCBpZCk7CisKKyAgR1NUX0RFQlVHICgid2FpdGluZyBtdWx0aXBsZSBvbmUgc2Vjb25kIGFzeW5jLCB3aXRoIGNhbmNlbCIpOworICBpZCA9IGdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKGNsb2NrLCBiYXNlICsgNSAqIFRJTUVfVU5JVCk7CisgIGlkMiA9IGdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKGNsb2NrLCBiYXNlICsgNiAqIFRJTUVfVU5JVCk7CisgIEdTVF9ERUJVRyAoIndhaXRpbmcgaWQgJXAiLCBpZCk7CisgIHJlc3VsdCA9IGdzdF9jbG9ja19pZF93YWl0X2FzeW5jIChpZCwgb2tfY2FsbGJhY2ssIE5VTEwpOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IEdTVF9DTE9DS19PSywgIldhaXRpbmcgZGlkIG5vdCByZXR1cm4gT0siKTsKKworICBHU1RfREVCVUcgKCJ3YWl0aW5nIGlkICVwIiwgaWQyKTsKKyAgcmVzdWx0ID0gZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMgKGlkMiwgZXJyb3JfY2FsbGJhY2ssIE5VTEwpOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IEdTVF9DTE9DS19PSywgIldhaXRpbmcgZGlkIG5vdCByZXR1cm4gT0siKTsKKyAgZ191c2xlZXAgKFRJTUVfVU5JVCAvICgyICogMTAwMCkpOworICBHU1RfREVCVUcgKCJjYW5jZWwgaWQgJXAgYWZ0ZXIgaGFsZiBhIHRpbWUgdW5pdCIsIGlkMik7CisgIGdzdF9jbG9ja19pZF91bnNjaGVkdWxlIChpZDIpOworICBHU1RfREVCVUcgKCJjYW5jZWxlZCBpZCAlcCIsIGlkMik7CisgIGdzdF9jbG9ja19pZF91bnJlZiAoaWQyKTsKKworICAvKiB3YWl0IGZvciB0aGUgZW50cnkgdG8gdGltZSBvdXQgKi8KKyAgZ191c2xlZXAgKFRJTUVfVU5JVCAvIDEwMDAgKiA1KTsKKyAgZmFpbF91bmxlc3MgKCgoR3N0Q2xvY2tFbnRyeSAqKSBpZCktPnN0YXR1cyA9PSBHU1RfQ0xPQ0tfT0ssCisgICAgICAiV2FpdGluZyBkaWQgbm90IGZpbmlzaCIpOworICBnc3RfY2xvY2tfaWRfdW5yZWYgKGlkKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGVyaW9kaWNfc2hvdCkKK3sKKyAgR3N0Q2xvY2sgKmNsb2NrOworICBHc3RDbG9ja0lEIGlkLCBpZDI7CisgIEdzdENsb2NrVGltZSBiYXNlOworICBHc3RDbG9ja1JldHVybiByZXN1bHQ7CisKKyAgY2xvY2sgPSBnc3Rfc3lzdGVtX2Nsb2NrX29idGFpbiAoKTsKKyAgZmFpbF91bmxlc3MgKGNsb2NrICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGluc3RhbmNlIG9mIEdzdFN5c3RlbUNsb2NrIik7CisKKyAgZ3N0X2Nsb2NrX2RlYnVnIChjbG9jayk7CisgIGJhc2UgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKGNsb2NrKTsKKworICAvKiBzaWduYWwgZXZlcnkgaGFsZiBhIHRpbWUgdW5pdCAqLworICBpZCA9IGdzdF9jbG9ja19uZXdfcGVyaW9kaWNfaWQgKGNsb2NrLCBiYXNlICsgVElNRV9VTklULCBUSU1FX1VOSVQgLyAyKTsKKyAgZmFpbF91bmxlc3MgKGlkICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIHBlcmlvZGljIGlkIik7CisKKyAgR1NUX0RFQlVHICgid2FpdGluZyBvbmUgdGltZSB1bml0Iik7CisgIHJlc3VsdCA9IGdzdF9jbG9ja19pZF93YWl0IChpZCwgTlVMTCk7CisgIGdzdF9jbG9ja19kZWJ1ZyAoY2xvY2spOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IEdTVF9DTE9DS19PSywgIldhaXRpbmcgZGlkIG5vdCByZXR1cm4gT0siKTsKKworICBHU1RfREVCVUcgKCJ3YWl0aW5nIGZvciB0aGUgbmV4dCIpOworICByZXN1bHQgPSBnc3RfY2xvY2tfaWRfd2FpdCAoaWQsIE5VTEwpOworICBnc3RfY2xvY2tfZGVidWcgKGNsb2NrKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSBHU1RfQ0xPQ0tfT0ssICJXYWl0aW5nIGRpZCBub3QgcmV0dXJuIE9LIik7CisKKyAgR1NUX0RFQlVHICgid2FpdGluZyBmb3IgdGhlIG5leHQgYXN5bmMgJXAiLCBpZCk7CisgIHJlc3VsdCA9IGdzdF9jbG9ja19pZF93YWl0X2FzeW5jIChpZCwgb2tfY2FsbGJhY2ssIE5VTEwpOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IEdTVF9DTE9DS19PSywgIldhaXRpbmcgZGlkIG5vdCByZXR1cm4gT0siKTsKKyAgZ191c2xlZXAgKFRJTUVfVU5JVCAvICgyICogMTAwMCkpOworCisgIEdTVF9ERUJVRyAoIndhaXRpbmcgc29tZSBtb3JlIGZvciB0aGUgbmV4dCBhc3luYyAlcCIsIGlkKTsKKyAgcmVzdWx0ID0gZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMgKGlkLCBva19jYWxsYmFjaywgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gR1NUX0NMT0NLX09LLCAiV2FpdGluZyBkaWQgbm90IHJldHVybiBPSyIpOworICBnX3VzbGVlcCAoVElNRV9VTklUIC8gKDIgKiAxMDAwKSk7CisKKyAgaWQyID0gZ3N0X2Nsb2NrX25ld19wZXJpb2RpY19pZCAoY2xvY2ssIGJhc2UgKyBUSU1FX1VOSVQsIFRJTUVfVU5JVCAvIDIpOworICBmYWlsX3VubGVzcyAoaWQyICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIHNlY29uZCBwZXJpb2RpYyBpZCIpOworCisgIEdTVF9ERUJVRyAoIndhaXRpbmcgc29tZSBtb3JlIGZvciBhbm90aGVyIGFzeW5jICVwIiwgaWQyKTsKKyAgcmVzdWx0ID0gZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMgKGlkMiwgb2tfY2FsbGJhY2ssIE5VTEwpOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IEdTVF9DTE9DS19PSywgIldhaXRpbmcgZGlkIG5vdCByZXR1cm4gT0siKTsKKyAgZ191c2xlZXAgKFRJTUVfVU5JVCAvICgyICogMTAwMCkpOworCisgIEdTVF9ERUJVRyAoInVuc2NoZWR1bGUgJXAiLCBpZCk7CisgIGdzdF9jbG9ja19pZF91bnNjaGVkdWxlIChpZCk7CisKKyAgLyogZW50cnkgY2Fubm90IGJlIHVzZWQgYWdhaW4gKi8KKyAgcmVzdWx0ID0gZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMgKGlkLCBlcnJvcl9jYWxsYmFjaywgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gR1NUX0NMT0NLX1VOU0NIRURVTEVELAorICAgICAgIldhaXRpbmcgZGlkIG5vdCByZXR1cm4gVU5TQ0hFRFVMRUQiKTsKKyAgcmVzdWx0ID0gZ3N0X2Nsb2NrX2lkX3dhaXQgKGlkLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSBHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQsCisgICAgICAiV2FpdGluZyBkaWQgbm90IHJldHVybiBVTlNDSEVEVUxFRCIpOworICBnX3VzbGVlcCAoVElNRV9VTklUIC8gKDIgKiAxMDAwKSk7CisKKyAgLyogY2xlYW4gdXAgKi8KKyAgZ3N0X2Nsb2NrX2lkX3VucmVmIChpZCk7CisgIGdzdF9jbG9ja19pZF91bnNjaGVkdWxlIChpZDIpOworICBnc3RfY2xvY2tfaWRfdW5yZWYgKGlkMik7CisKKyAgZ3N0X29iamVjdF91bnJlZiAoY2xvY2spOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2FzeW5jX29yZGVyKQoreworICBHc3RDbG9jayAqY2xvY2s7CisgIEdzdENsb2NrSUQgaWQxLCBpZDI7CisgIEdMaXN0ICpjYl9saXN0ID0gTlVMTCwgKm5leHQ7CisgIEdzdENsb2NrVGltZSBiYXNlOworICBHc3RDbG9ja1JldHVybiByZXN1bHQ7CisKKyAgc3RvcmVfbG9jayA9IGdfbXV0ZXhfbmV3ICgpOworCisgIGNsb2NrID0gZ3N0X3N5c3RlbV9jbG9ja19vYnRhaW4gKCk7CisgIGZhaWxfdW5sZXNzIChjbG9jayAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBpbnN0YW5jZSBvZiBHc3RTeXN0ZW1DbG9jayIpOworCisgIGdzdF9jbG9ja19kZWJ1ZyAoY2xvY2spOworICBiYXNlID0gZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jayk7CisKKyAgaWQxID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIGJhc2UgKyAyICogVElNRV9VTklUKTsKKyAgaWQyID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIGJhc2UgKyAxICogVElNRV9VTklUKTsKKyAgcmVzdWx0ID0gZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMgKGlkMSwgc3RvcmVfY2FsbGJhY2ssICZjYl9saXN0KTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSBHU1RfQ0xPQ0tfT0ssICJXYWl0aW5nIGRpZCBub3QgcmV0dXJuIE9LIik7CisgIGdfdXNsZWVwIChUSU1FX1VOSVQgLyAoMiAqIDEwMDApKTsKKyAgcmVzdWx0ID0gZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMgKGlkMiwgc3RvcmVfY2FsbGJhY2ssICZjYl9saXN0KTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSBHU1RfQ0xPQ0tfT0ssICJXYWl0aW5nIGRpZCBub3QgcmV0dXJuIE9LIik7CisgIGdfdXNsZWVwIChUSU1FX1VOSVQgLyAxMDAwKTsKKyAgLyogYXQgdGhpcyBwb2ludCBhdCBsZWFzdCBvbmUgb2YgdGhlIHRpbWVycyBzaG91bGQgaGF2ZSB0aW1lZCBvdXQgKi8KKyAgZ19tdXRleF9sb2NrIChzdG9yZV9sb2NrKTsKKyAgZmFpbF91bmxlc3MgKGNiX2xpc3QgIT0gTlVMTCwgImV4cGVjdGVkIG5vdGlmaWNhdGlvbiIpOworICBmYWlsX3VubGVzcyAoY2JfbGlzdC0+ZGF0YSA9PSBpZDIsCisgICAgICAiRXhwZWN0ZWQgbm90aWZpY2F0aW9uIGZvciBpZDIgdG8gY29tZSBmaXJzdCIpOworICBnX211dGV4X3VubG9jayAoc3RvcmVfbG9jayk7CisgIGdfdXNsZWVwIChUSU1FX1VOSVQgLyAxMDAwKTsKKyAgZ19tdXRleF9sb2NrIChzdG9yZV9sb2NrKTsKKyAgLyogbm93IGJvdGggc2hvdWxkIGhhdmUgdGltZWQgb3V0ICovCisgIG5leHQgPSBnX2xpc3RfbmV4dCAoY2JfbGlzdCk7CisgIGZhaWxfdW5sZXNzIChuZXh0ICE9IE5VTEwsICJleHBlY3RlZCBzZWNvbmQgbm90aWZpY2F0aW9uIik7CisgIGZhaWxfdW5sZXNzIChuZXh0LT5kYXRhID09IGlkMSwgIk1pc3Npbmcgbm90aWZpY2F0aW9uIGZvciBpZDEiKTsKKyAgZ19tdXRleF91bmxvY2sgKHN0b3JlX2xvY2spOworCisgIGdzdF9jbG9ja19pZF91bnJlZiAoaWQxKTsKKyAgZ3N0X2Nsb2NrX2lkX3VucmVmIChpZDIpOworICBnX2xpc3RfZnJlZSAoY2JfbGlzdCk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAoY2xvY2spOworICBnX211dGV4X2ZyZWUgKHN0b3JlX2xvY2spOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0cnVjdCB0ZXN0X2FzeW5jX3N5bmNfaW50ZXJhY3Rpb25fZGF0YQoreworICBHTXV0ZXggKmxvY2s7CisKKyAgR3N0Q2xvY2tJRCBzeW5jX2lkOworICBHc3RDbG9ja0lEIHN5bmNfaWQyOworCisgIEdzdENsb2NrSUQgYXN5bmNfaWQ7CisgIEdzdENsb2NrSUQgYXN5bmNfaWQyOworICBHc3RDbG9ja0lEIGFzeW5jX2lkMzsKK307CisKK3N0YXRpYyBnYm9vbGVhbgordGVzdF9hc3luY19zeW5jX2ludGVyYWN0aW9uX2NiIChHc3RDbG9jayAqIGNsb2NrLCBHc3RDbG9ja1RpbWUgdGltZSwKKyAgICBHc3RDbG9ja0lEIGlkLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIHN0cnVjdCB0ZXN0X2FzeW5jX3N5bmNfaW50ZXJhY3Rpb25fZGF0YSAqdGQgPQorICAgICAgKHN0cnVjdCB0ZXN0X2FzeW5jX3N5bmNfaW50ZXJhY3Rpb25fZGF0YSAqKSAodXNlcl9kYXRhKTsKKworICBnX211dGV4X2xvY2sgKHRkLT5sb2NrKTsKKyAgLyogVGhlIGZpcnN0IGFzeW5jIGNhbGxiYWNrIGlzIGlnbm9yZWQgKi8KKyAgaWYgKGlkID09IHRkLT5hc3luY19pZCkKKyAgICBnb3RvIG91dDsKKworICBpZiAoaWQgIT0gdGQtPmFzeW5jX2lkMiAmJiBpZCAhPSB0ZC0+YXN5bmNfaWQzKQorICAgIGdvdG8gb3V0OworCisgIC8qIFVuc2NoZWR1bGUgdGhlIHN5bmMgY2FsbGJhY2sgKi8KKyAgaWYgKGlkID09IHRkLT5hc3luY19pZDMpIHsKKyAgICBnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSAodGQtPnN5bmNfaWQpOworICAgIGdzdF9jbG9ja19pZF91bnNjaGVkdWxlICh0ZC0+YXN5bmNfaWQyKTsKKyAgfQorb3V0OgorICBnX211dGV4X3VubG9jayAodGQtPmxvY2spOworICByZXR1cm4gRkFMU0U7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2FzeW5jX3N5bmNfaW50ZXJhY3Rpb24pCit7CisgIC8qIFRoaXMgdGVzdCBzY2hlZHVsZXMgYW4gYXN5bmMgY2FsbGJhY2ssIHRoZW4gYmVmb3JlIGl0IGNvbXBsZXRlcywgc2NoZWR1bGVzCisgICAqIGFuIGVhcmxpZXIgYXN5bmMgY2FsbGJhY2ssIGFuZCBxdWlja2x5IHVuc2NoZWR1bGVzIHRoZSBmaXJzdCwgYW5kIGluc2VydHMKKyAgICogYSBUSElSRCBldmVuIGVhcmxpZXIgYXN5bmMgY2FsbGJhY2suIEl0IHRoZW4gYXR0ZW1wdHMgdG8gd2FpdCBvbiBhCisgICAqIHN5bmMgY2xvY2sgSUQuIFdoaWxlIHRoYXQncyBzbGVlcGluZywgdGhlIDNyZCBhc3luYyBjYWxsYmFjayBzaG91bGQgZmlyZQorICAgKiBhbmQgdW5zY2hlZHVsZSBpdC4gVGhpcyB0ZXN0cyBmb3IgcHJvYmxlbXMgd2l0aCB1bnNjaGVkdWxpbmcgYXN5bmMgYW5kCisgICAqIHN5bmMgY2FsbGJhY2tzIG9uIHRoZSBzeXN0ZW0gY2xvY2suICovCisgIEdzdENsb2NrICpjbG9jazsKKyAgR3N0Q2xvY2tSZXR1cm4gcmVzdWx0OworICBHc3RDbG9ja1RpbWUgYmFzZTsKKyAgR3N0Q2xvY2tUaW1lRGlmZiBqaXR0ZXI7CisgIHN0cnVjdCB0ZXN0X2FzeW5jX3N5bmNfaW50ZXJhY3Rpb25fZGF0YSB0ZDsKKyAgaW50IGk7CisKKyAgY2xvY2sgPSBnc3Rfc3lzdGVtX2Nsb2NrX29idGFpbiAoKTsKKyAgZmFpbF91bmxlc3MgKGNsb2NrICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGluc3RhbmNlIG9mIEdzdFN5c3RlbUNsb2NrIik7CisKKyAgdGQubG9jayA9IGdfbXV0ZXhfbmV3ICgpOworCisgIGZvciAoaSA9IDA7IGkgPCA1MDsgaSsrKSB7CisgICAgZ3N0X2Nsb2NrX2RlYnVnIChjbG9jayk7CisgICAgYmFzZSA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOworICAgIGdfbXV0ZXhfbG9jayAodGQubG9jayk7CisgICAgdGQuYXN5bmNfaWQgPSBnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkIChjbG9jaywgYmFzZSArIDQwICogR1NUX01TRUNPTkQpOworICAgIHRkLmFzeW5jX2lkMiA9CisgICAgICAgIGdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKGNsb2NrLCBiYXNlICsgMzAgKiBHU1RfTVNFQ09ORCk7CisgICAgdGQuYXN5bmNfaWQzID0KKyAgICAgICAgZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIGJhc2UgKyAyMCAqIEdTVF9NU0VDT05EKTsKKyAgICB0ZC5zeW5jX2lkMiA9IGdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKGNsb2NrLCBiYXNlICsgMTAgKiBHU1RfTVNFQ09ORCk7CisgICAgdGQuc3luY19pZCA9IGdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKGNsb2NrLCBiYXNlICsgNTAgKiBHU1RfTVNFQ09ORCk7CisgICAgZ19tdXRleF91bmxvY2sgKHRkLmxvY2spOworCisgICAgcmVzdWx0ID0gZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMgKHRkLmFzeW5jX2lkLAorICAgICAgICB0ZXN0X2FzeW5jX3N5bmNfaW50ZXJhY3Rpb25fY2IsICZ0ZCk7CisgICAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSBHU1RfQ0xPQ0tfT0ssICJXYWl0aW5nIGRpZCBub3QgcmV0dXJuIE9LIik7CisKKyAgICAvKiBXYWl0IDEwbXMsIHRoZW4gdW5zY2hlZHVsZSBhc3luY19pZCBhbmQgc2NoZWR1bGUgYXN5bmNfaWQyICovCisgICAgcmVzdWx0ID0gZ3N0X2Nsb2NrX2lkX3dhaXQgKHRkLnN5bmNfaWQyLCAmaml0dGVyKTsKKyAgICBmYWlsX3VubGVzcyAocmVzdWx0ID09IEdTVF9DTE9DS19PSyB8fCByZXN1bHQgPT0gR1NUX0NMT0NLX0VBUkxZLAorICAgICAgICAiV2FpdGluZyBkaWQgbm90IHJldHVybiBPSyBvciBFQVJMWSIpOworICAgIC8qIGFzeW5jX2lkMiBpcyBlYXJsaWVyIHRoYW4gYXN5bmNfaWQgLSBzaG91bGQgYmVjb21lIGhlYWQgb2YgdGhlIHF1ZXVlICovCisgICAgcmVzdWx0ID0gZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMgKHRkLmFzeW5jX2lkMiwKKyAgICAgICAgdGVzdF9hc3luY19zeW5jX2ludGVyYWN0aW9uX2NiLCAmdGQpOworICAgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gR1NUX0NMT0NLX09LLCAiV2FpdGluZyBkaWQgbm90IHJldHVybiBPSyIpOworICAgIGdzdF9jbG9ja19pZF91bnNjaGVkdWxlICh0ZC5hc3luY19pZCk7CisKKyAgICAvKiBhc3luY19pZDMgaXMgZWFybGllciB0aGFuIGFzeW5jX2lkMiAtIHNob3VsZCBiZWNvbWUgaGVhZCBvZiB0aGUgcXVldWUgKi8KKyAgICByZXN1bHQgPSBnc3RfY2xvY2tfaWRfd2FpdF9hc3luYyAodGQuYXN5bmNfaWQzLAorICAgICAgICB0ZXN0X2FzeW5jX3N5bmNfaW50ZXJhY3Rpb25fY2IsICZ0ZCk7CisgICAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSBHU1RfQ0xPQ0tfT0ssICJXYWl0aW5nIGRpZCBub3QgcmV0dXJuIE9LIik7CisKKyAgICAvKiBXaGlsZSB0aGlzIGlzIHNsZWVwaW5nLCB0aGUgYXN5bmMzIGlkIHNob3VsZCBmaXJlIGFuZCB1bnNjaGVkdWxlIGl0ICovCisgICAgcmVzdWx0ID0gZ3N0X2Nsb2NrX2lkX3dhaXQgKHRkLnN5bmNfaWQsICZqaXR0ZXIpOworICAgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gR1NUX0NMT0NLX1VOU0NIRURVTEVEIHx8IHJlc3VsdCA9PSBHU1RfQ0xPQ0tfRUFSTFksCisgICAgICAgICJXYWl0aW5nIGRpZCBub3QgcmV0dXJuIFVOU0NIRURVTEVEICh3YXMgJWQpIiwgcmVzdWx0KTsKKworICAgIGdzdF9jbG9ja19pZF91bnNjaGVkdWxlICh0ZC5hc3luY19pZDMpOworICAgIGdfbXV0ZXhfbG9jayAodGQubG9jayk7CisKKyAgICBnc3RfY2xvY2tfaWRfdW5yZWYgKHRkLnN5bmNfaWQpOworICAgIGdzdF9jbG9ja19pZF91bnJlZiAodGQuc3luY19pZDIpOworICAgIGdzdF9jbG9ja19pZF91bnJlZiAodGQuYXN5bmNfaWQpOworICAgIGdzdF9jbG9ja19pZF91bnJlZiAodGQuYXN5bmNfaWQyKTsKKyAgICBnc3RfY2xvY2tfaWRfdW5yZWYgKHRkLmFzeW5jX2lkMyk7CisgICAgZ19tdXRleF91bmxvY2sgKHRkLmxvY2spOworICB9CisKKyAgZ19tdXRleF9mcmVlICh0ZC5sb2NrKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoY2xvY2spOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3BlcmlvZGljX211bHRpKQoreworICBHc3RDbG9jayAqY2xvY2s7CisgIEdzdENsb2NrSUQgY2xvY2tfaWQ7CisgIEdzdENsb2NrSUQgY2xvY2tfaWRfYXN5bmM7CisgIEdzdENsb2NrVGltZSBiYXNlOworICBHc3RDbG9ja1JldHVybiByZXN1bHQ7CisgIGdib29sZWFuIGdvdF9jYWxsYmFjayA9IEZBTFNFOworCisgIGNsb2NrID0gZ3N0X3N5c3RlbV9jbG9ja19vYnRhaW4gKCk7CisgIGZhaWxfdW5sZXNzIChjbG9jayAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBpbnN0YW5jZSBvZiBHc3RTeXN0ZW1DbG9jayIpOworCisgIGdzdF9jbG9ja19kZWJ1ZyAoY2xvY2spOworICBiYXNlID0gZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jayk7CisKKyAgY2xvY2tfaWQgPSBnc3RfY2xvY2tfbmV3X3BlcmlvZGljX2lkIChjbG9jaywgYmFzZSArIFRJTUVfVU5JVCwgVElNRV9VTklUKTsKKyAgZ3N0X2Nsb2NrX2lkX3dhaXQgKGNsb2NrX2lkLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spID49IGJhc2UgKyBUSU1FX1VOSVQpOworICBmYWlsX3VubGVzcyAoZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jaykgPCBiYXNlICsgMiAqIFRJTUVfVU5JVCk7CisKKyAgLyogbm93IHBlcmZvcm0gYSBjb25jdXJyZW50IHdhaXQgYW5kIHdhaXRfYXN5bmMgKi8KKworICBjbG9ja19pZF9hc3luYyA9CisgICAgICBnc3RfY2xvY2tfbmV3X3BlcmlvZGljX2lkIChjbG9jaywgYmFzZSArIFRJTUVfVU5JVCwgVElNRV9VTklUKTsKKyAgcmVzdWx0ID0KKyAgICAgIGdzdF9jbG9ja19pZF93YWl0X2FzeW5jIChjbG9ja19pZF9hc3luYywgbm90aWZ5X2NhbGxiYWNrLCAmZ290X2NhbGxiYWNrKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSBHU1RfQ0xPQ0tfT0ssICJBc3luYyB3YWl0aW5nIGRpZCBub3QgcmV0dXJuIE9LIik7CisKKyAgcmVzdWx0ID0gZ3N0X2Nsb2NrX2lkX3dhaXQgKGNsb2NrX2lkLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSBHU1RfQ0xPQ0tfT0ssICJXYWl0aW5nIGRpZCBub3QgcmV0dXJuIE9LIik7CisgIGZhaWxfdW5sZXNzIChnc3RfY2xvY2tfZ2V0X3RpbWUgKGNsb2NrKSA+PSBiYXNlICsgMiAqIFRJTUVfVU5JVCk7CisgIC8qIGdpdmUgdGhlIGFzeW5jIHRocmVhZCBzb21lIHRpbWUgdG8gY2FsbCBvdXIgY2FsbGJhY2s6ICovCisgIGdfdXNsZWVwIChUSU1FX1VOSVQgLyAoMTAgKiAxMDAwKSk7CisgIGZhaWxfdW5sZXNzIChnb3RfY2FsbGJhY2sgPT0gVFJVRSwgImdvdCBubyBhc3luYyBjYWxsYmFjayAoMSkiKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spIDwgYmFzZSArIDMgKiBUSU1FX1VOSVQpOworICBnb3RfY2FsbGJhY2sgPSBGQUxTRTsKKworICByZXN1bHQgPSBnc3RfY2xvY2tfaWRfd2FpdCAoY2xvY2tfaWQsIE5VTEwpOworICBmYWlsX3VubGVzcyAocmVzdWx0ID09IEdTVF9DTE9DS19PSywgIldhaXRpbmcgZGlkIG5vdCByZXR1cm4gT0siKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spID49IGJhc2UgKyAzICogVElNRV9VTklUKTsKKyAgLyogZ2l2ZSB0aGUgYXN5bmMgdGhyZWFkIHNvbWUgdGltZSB0byBjYWxsIG91ciBjYWxsYmFjazogKi8KKyAgZ191c2xlZXAgKFRJTUVfVU5JVCAvICgxMCAqIDEwMDApKTsKKyAgZmFpbF91bmxlc3MgKGdvdF9jYWxsYmFjayA9PSBUUlVFLCAiZ290IG5vIGFzeW5jIGNhbGxiYWNrICgyKSIpOworICBmYWlsX3VubGVzcyAoZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jaykgPCBiYXNlICsgNCAqIFRJTUVfVU5JVCk7CisKKyAgLyogY2xlYW4gdXAgKi8KKyAgZ3N0X2Nsb2NrX2lkX3VucmVmIChjbG9ja19pZCk7CisgIGdzdF9jbG9ja19pZF91bnNjaGVkdWxlIChjbG9ja19pZF9hc3luYyk7CisgIGdzdF9jbG9ja19pZF91bnJlZiAoY2xvY2tfaWRfYXN5bmMpOworICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfZGlmZikKK3sKKyAgR3N0Q2xvY2tUaW1lIHRpbWUxW10gPSB7IDAsIChHc3RDbG9ja1RpbWUpIC0gMSwgMCwgMSwgMiAqIEdTVF9TRUNPTkQsCisgICAgKEdzdENsb2NrVGltZSkgLSBHU1RfU0VDT05ELCAoR3N0Q2xvY2tUaW1lKSAtIEdTVF9TRUNPTkQKKyAgfTsKKyAgR3N0Q2xvY2tUaW1lIHRpbWUyW10gPQorICAgICAgeyAwLCAxLCAxLCAwLCAxICogR1NUX1NFQ09ORCwgKEdzdENsb2NrVGltZSkgLSBHU1RfU0VDT05ELCBHU1RfU0VDT05EIH07CisgIEdzdENsb2NrVGltZURpZmYgZFtdID0geyAwLCAyLCAxLCAtMSwgLUdTVF9TRUNPTkQsIDAsIDIgKiBHU1RfU0VDT05EIH07CisgIGd1aW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoZCk7IGkrKykgeworICAgIGZhaWxfaWYgKGRbaV0gIT0gR1NUX0NMT0NLX0RJRkYgKHRpbWUxW2ldLCB0aW1lMltpXSkpOworICB9Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogdGVzdCBpZiBhIGJsb2NraW5nIHdhaXQsIHVuYmxvY2tlZCBieSBhbiBhc3luYyBlbnRyeSBjb250aW51ZXMgdG8gYmUKKyAqIHNjaGVkdWxlZCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgR3N0Q2xvY2sgKmNsb2NrOworICBHc3RDbG9ja0lEIGlkOworICBHc3RDbG9ja1RpbWVEaWZmIGppdHRlcjsKKyAgR3N0Q2xvY2tSZXR1cm4gcmV0OworfSBNaXhlZEluZm87CisKK3N0YXRpYyBncG9pbnRlcgorbWl4ZWRfdGhyZWFkIChNaXhlZEluZm8gKiBpbmZvKQoreworICBpbmZvLT5yZXQgPSBnc3RfY2xvY2tfaWRfd2FpdCAoaW5mby0+aWQsICZpbmZvLT5qaXR0ZXIpOworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGdib29sZWFuCittaXhlZF9hc3luY19jYiAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0Q2xvY2tUaW1lIHRpbWUsCisgICAgR3N0Q2xvY2tJRCBpZCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICByZXR1cm4gVFJVRTsKK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfbWl4ZWQpCit7CisgIEdUaHJlYWQgKnRocmVhZDsKKyAgR0Vycm9yICplcnJvciA9IE5VTEw7CisgIE1peGVkSW5mbyBpbmZvOworICBHc3RDbG9ja1RpbWUgYmFzZTsKKyAgR3N0Q2xvY2tJRCBpZDsKKworICBpbmZvLmNsb2NrID0gZ3N0X3N5c3RlbV9jbG9ja19vYnRhaW4gKCk7CisgIGZhaWxfdW5sZXNzIChpbmZvLmNsb2NrICE9IE5VTEwsCisgICAgICAiQ291bGQgbm90IGNyZWF0ZSBpbnN0YW5jZSBvZiBHc3RTeXN0ZW1DbG9jayIpOworCisgIC8qIGdldCBjdXJyZW50IHRpbWUgb2YgdGhlIGNsb2NrIGFzIGJhc2UgdGltZSAqLworICBiYXNlID0gZ3N0X2Nsb2NrX2dldF90aW1lIChpbmZvLmNsb2NrKTsKKworICAvKiBjcmVhdGUgZW50cnkgdG8gd2FpdCBmb3IgMSBzZWNvbmQgKi8KKyAgaW5mby5pZCA9IGdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKGluZm8uY2xvY2ssIGJhc2UgKyBHU1RfU0VDT05EKTsKKworICAvKiBtYWtlIGFuZCBzdGFydCBhbiBlbnRyeSB0aGF0IGlzIHNjaGVkdWxlZCBldmVyeSAxMG1zICovCisgIGlkID0gZ3N0X2Nsb2NrX25ld19wZXJpb2RpY19pZCAoaW5mby5jbG9jaywgYmFzZSwgMTAgKiBHU1RfTVNFQ09ORCk7CisKKyAgLyogc3RhcnQgd2FpdGluZyBmb3IgdGhlIGVudHJ5ICovCisgIHRocmVhZCA9IGdfdGhyZWFkX2NyZWF0ZSAoKEdUaHJlYWRGdW5jKSBtaXhlZF90aHJlYWQsICZpbmZvLCBUUlVFLCAmZXJyb3IpOworICBmYWlsX3VubGVzcyAoZXJyb3IgPT0gTlVMTCwgImVycm9yIGNyZWF0aW5nIHRocmVhZCIpOworICBmYWlsX3VubGVzcyAodGhyZWFkICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIHRocmVhZCIpOworCisgIC8qIHdhaXQgaGFsZiBhIHNlY29uZCBzbyB3ZSBhcmUgc3VyZSB0byBiZSBpbiB0aGUgdGhyZWFkICovCisgIGdfdXNsZWVwIChHX1VTRUNfUEVSX1NFQyAvIDIpOworCisgIC8qIHN0YXJ0IHNjaGVkdWxpbmcgdGhlIGVudHJ5ICovCisgIGdzdF9jbG9ja19pZF93YWl0X2FzeW5jIChpZCwgbWl4ZWRfYXN5bmNfY2IsIE5VTEwpOworCisgIC8qIHdhaXQgZm9yIHRocmVhZCB0byBmaW5pc2ggKi8KKyAgZ190aHJlYWRfam9pbiAodGhyZWFkKTsKKyAgLyogZW50cnkgbXVzdCBoYXZlIHRpbWVkIG91dCBjb3JyZWN0bHkgKi8KKyAgZmFpbF91bmxlc3MgKGluZm8ucmV0ID09IEdTVF9DTE9DS19PSywgImNsb2NrIHJldHVybiB3YXMgJWQiLCBpbmZvLnJldCk7CisKKyAgZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUgKGlkKTsKKyAgZ3N0X2Nsb2NrX2lkX3VucmVmIChpZCk7CisgIGdzdF9jbG9ja19pZF91bnJlZiAoaW5mby5pZCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGluZm8uY2xvY2spOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBnYm9vbGVhbgordGVzdF9hc3luY19mdWxsX3NsYXZlX2NhbGxiYWNrIChHc3RDbG9jayAqIG1hc3RlciwgR3N0Q2xvY2tUaW1lIHRpbWUsCisgICAgR3N0Q2xvY2tJRCBpZCwgR3N0Q2xvY2sgKiBjbG9jaykKK3sKKyAgR3N0Q2xvY2tUaW1lIHN0aW1lLCBtdGltZTsKKyAgZ2RvdWJsZSByX3NxdWFyZWQ7CisKKyAgLyogbm90aWZ5IHRoZSB0ZXN0IGNhc2UgdGhhdCB3ZSBzdGFydGVkICovCisgIEdTVF9JTkZPICgiY2FsbGJhY2sgc3RhcnRlZCIpOworICBnX211dGV4X2xvY2sgKGFmX2xvY2spOworICBnX2NvbmRfc2lnbmFsIChhZl9jb25kKTsKKworICAvKiB3YWl0IGZvciB0aGUgdGVzdCBjYXNlIHRvIHVucmVmICJjbG9jayIgYW5kIHNpZ25hbCAqLworICBHU1RfSU5GTyAoIndhaXRpbmcgZm9yIHRlc3QgY2FzZSB0byBzaWduYWwiKTsKKyAgZ19jb25kX3dhaXQgKGFmX2NvbmQsIGFmX2xvY2spOworCisgIHN0aW1lID0gZ3N0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lIChjbG9jayk7CisgIG10aW1lID0gZ3N0X2Nsb2NrX2dldF90aW1lIChtYXN0ZXIpOworCisgIGdzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb24gKGNsb2NrLCBzdGltZSwgbXRpbWUsICZyX3NxdWFyZWQpOworCisgIGdfY29uZF9zaWduYWwgKGFmX2NvbmQpOworICBnX211dGV4X3VubG9jayAoYWZfbG9jayk7CisgIEdTVF9JTkZPICgiY2FsbGJhY2sgZmluaXNoZWQiKTsKKworICByZXR1cm4gVFJVRTsKK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfYXN5bmNfZnVsbCkKK3sKKyAgR3N0Q2xvY2sgKm1hc3RlciwgKnNsYXZlOworICBHc3RDbG9ja0lEICpjbG9ja2lkOworCisgIGFmX2xvY2sgPSBnX211dGV4X25ldyAoKTsKKyAgYWZfY29uZCA9IGdfY29uZF9uZXcgKCk7CisKKyAgLyogY3JlYXRlIG1hc3RlciBhbmQgc2xhdmUgKi8KKyAgbWFzdGVyID0KKyAgICAgIGdfb2JqZWN0X25ldyAoR1NUX1RZUEVfU1lTVEVNX0NMT0NLLCAibmFtZSIsICJUZXN0Q2xvY2tNYXN0ZXIiLCBOVUxMKTsKKyAgc2xhdmUgPSBnX29iamVjdF9uZXcgKEdTVF9UWVBFX1NZU1RFTV9DTE9DSywgIm5hbWUiLCAiVGVzdENsb2NrTWFzdGVyIiwgTlVMTCk7CisgIEdTVF9PQkpFQ1RfRkxBR19TRVQgKHNsYXZlLCBHU1RfQ0xPQ0tfRkxBR19DQU5fU0VUX01BU1RFUik7CisgIGdfb2JqZWN0X3NldCAoc2xhdmUsICJ0aW1lb3V0IiwgNTAgKiBHU1RfTVNFQ09ORCwgTlVMTCk7CisKKyAgZmFpbF91bmxlc3MgKEdTVF9PQkpFQ1RfUkVGQ09VTlQgKG1hc3RlcikgPT0gMSk7CisgIGZhaWxfdW5sZXNzIChHU1RfT0JKRUNUX1JFRkNPVU5UIChzbGF2ZSkgPT0gMSk7CisKKyAgLyogcmVnaXN0ZXIgYSBwZXJpb2RpYyBzaG90IG9uIHRoZSBtYXN0ZXIgdG8gY2FsaWJyYXRlIHRoZSBzbGF2ZSAqLworICBnX211dGV4X2xvY2sgKGFmX2xvY2spOworICBjbG9ja2lkID0gZ3N0X2Nsb2NrX25ld19wZXJpb2RpY19pZCAobWFzdGVyLAorICAgICAgZ3N0X2Nsb2NrX2dldF90aW1lIChtYXN0ZXIpLCBzbGF2ZS0+dGltZW91dCk7CisgIGdzdF9jbG9ja19pZF93YWl0X2FzeW5jX2Z1bGwgKGNsb2NraWQsCisgICAgICAoR3N0Q2xvY2tDYWxsYmFjaykgdGVzdF9hc3luY19mdWxsX3NsYXZlX2NhbGxiYWNrLAorICAgICAgZ3N0X29iamVjdF9yZWYgKHNsYXZlKSwgKEdEZXN0cm95Tm90aWZ5KSBnc3Rfb2JqZWN0X3VucmVmKTsKKworICAvKiB3YWl0IGZvciB0aGUgc2hvdCB0byBiZSBmaXJlZCBhbmQgdGVzdF9hc3luY19mdWxsX3NsYXZlX2NhbGxiYWNrIHRvIGJlCisgICAqIGNhbGxlZCAqLworICBHU1RfSU5GTyAoIndhaXRpbmcgZm9yIHRoZSBzbGF2ZSBjYWxsYmFjayB0byBzdGFydCIpOworICBnX2NvbmRfd2FpdCAoYWZfY29uZCwgYWZfbG9jayk7CisgIEdTVF9JTkZPICgic2xhdmUgY2FsbGJhY2sgcnVubmluZywgdW5yZWZmaW5nIHNsYXZlIik7CisKKyAgLyogdW5yZWYgdGhlIHNsYXZlIGNsb2NrIHdoaWxlIHRoZSBzbGF2ZV9jYWxsYmFjayBpcyBydW5uaW5nLiBUaGlzIHNob3VsZCBiZQorICAgKiBzYWZlIHNpbmNlIHRoZSBtYXN0ZXIgY2xvY2sgbm93IHN0b3JlcyBhIHJlZiB0byB0aGUgc2xhdmUgKi8KKyAgZ3N0X29iamVjdF91bnJlZiAoc2xhdmUpOworCisgIC8qIHVucmVmIHRoZSBjbG9jayBlbnRyeS4gVGhpcyBzaG91bGQgYmUgc2FmZSBhcyB3ZWxsIHNpbmNlIHRoZSBjbG9jayB0aHJlYWQKKyAgICogcmVmcyB0aGUgZW50cnkgYmVmb3JlIGV4ZWN1dGluZyBpdCAqLworICBnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSAoY2xvY2tpZCk7CisgIGdzdF9jbG9ja19pZF91bnJlZiAoY2xvY2tpZCk7CisKKyAgLyogc2lnbmFsIGFuZCB3YWl0IGZvciB0aGUgY2FsbGJhY2sgdG8gY29tcGxldGUgKi8KKyAgZ19jb25kX3NpZ25hbCAoYWZfY29uZCk7CisKKyAgR1NUX0lORk8gKCJ3YWl0aW5nIGZvciBjYWxsYmFjayB0byBmaW5pc2giKTsKKyAgZ19jb25kX3dhaXQgKGFmX2NvbmQsIGFmX2xvY2spOworICBHU1RfSU5GTyAoImNhbGxiYWNrIGZpbmlzaGVkIik7CisgIGdfbXV0ZXhfdW5sb2NrIChhZl9sb2NrKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChtYXN0ZXIpOworCisgIGdfbXV0ZXhfZnJlZSAoYWZfbG9jayk7CisgIGdfY29uZF9mcmVlIChhZl9jb25kKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgU3VpdGUgKgorZ3N0X3N5c3RlbWNsb2NrX3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdFN5c3RlbUNsb2NrIik7CisgIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoIndhaXRpbmciKTsKKworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JhbmdlKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NpZ25lZG5lc3MpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc2luZ2xlX3Nob3QpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGVyaW9kaWNfc2hvdCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wZXJpb2RpY19tdWx0aSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hc3luY19vcmRlcik7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hc3luY19zeW5jX2ludGVyYWN0aW9uKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2RpZmYpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWl4ZWQpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYXN5bmNfZnVsbCk7CisKKyAgcmV0dXJuIHM7Cit9CisKK0dTVF9DSEVDS19NQUlOIChnc3Rfc3lzdGVtY2xvY2spOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdHRhZy5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdHRhZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMjQ5ZGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9nc3QvZ3N0dGFnLmMKQEAgLTAsMCArMSw0NzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgQmVuamFtaW4gT3R0ZSA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qIG11bHRpcGxlIGFydGlzdHMgYXJlIHBvc3NpYmxlICh1bmZpeGVkKSAqLworI2RlZmluZSBVVEFHIEdTVF9UQUdfQVJUSVNUCisjZGVmaW5lIFVORklYRUQxICJCcml0bmV5IFNwZWFycyIKKyNkZWZpbmUgVU5GSVhFRDIgIkV2YW5lc2NlbmNlIgorI2RlZmluZSBVTkZJWEVEMyAiQUMvREMiCisjZGVmaW5lIFVORklYRUQ0ICJUaGUgUHJvZGlneSIKKworLyogbGljZW5zZSBpcyBmaXhlZCAqLworI2RlZmluZSBGVEFHIEdTVF9UQUdfTElDRU5TRQorI2RlZmluZSBGSVhFRDEgIkxlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIgorI2RlZmluZSBGSVhFRDIgIk1pY3Jvc29mdCBFbmQgVXNlciBMaWNlbnNlIEFncmVlbWVudCIKKyNkZWZpbmUgRklYRUQzICJNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIgorI2RlZmluZSBGSVhFRDQgIlB1YmxpYyBEb21haW4iCisKKy8qIGNoZWNrcyB0aGF0IGEgdGFnIGNvbnRhaW5zIHRoZSBnaXZlbiB2YWx1ZXMgYW5kIG5vdCBtb3JlIHZhbHVlcyAqLworc3RhdGljIHZvaWQKK2NoZWNrX3RhZ3MgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LCBjb25zdCBnY2hhciAqIHRhZywgY29uc3QgZ2NoYXIgKiB2YWx1ZSwKKyAgICAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgZ2NoYXIgKnN0cjsKKyAgZ3VpbnQgaSA9IDA7CisKKyAgdmFfc3RhcnQgKGFyZ3MsIHZhbHVlKTsKKyAgd2hpbGUgKHZhbHVlICE9IE5VTEwpIHsKKyAgICBmYWlsX3VubGVzcyAoZ3N0X3RhZ19saXN0X2dldF9zdHJpbmdfaW5kZXggKGxpc3QsIHRhZywgaSwgJnN0cikpOworICAgIGZhaWxfdW5sZXNzIChzdHJjbXAgKHZhbHVlLCBzdHIpID09IDApOworICAgIGdfZnJlZSAoc3RyKTsKKworICAgIHZhbHVlID0gdmFfYXJnIChhcmdzLCBnY2hhciAqKTsKKyAgICBpKys7CisgIH0KKyAgZmFpbF91bmxlc3MgKGkgPT0gZ3N0X3RhZ19saXN0X2dldF90YWdfc2l6ZSAobGlzdCwgdGFnKSk7CisgIHZhX2VuZCAoYXJncyk7Cit9CisKK3N0YXRpYyB2b2lkCitjaGVja190YWdzX2VtcHR5IChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCkKK3sKKyAgR1NUX0RFQlVHICgidGFnbGlzdDogJSIgR1NUX1BUUl9GT1JNQVQsIGxpc3QpOworICBmYWlsX3VubGVzcyAoKGxpc3QgPT0gTlVMTCkgfHwgKGdzdF90YWdfbGlzdF9pc19lbXB0eSAobGlzdCkpKTsKK30KKworI2RlZmluZSBORVdfTElTVF9GSVhFRChtb2RlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK0dfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmIChsaXN0KSBnc3RfdGFnX2xpc3RfZnJlZSAobGlzdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBsaXN0ID0gZ3N0X3RhZ19saXN0X25ldyAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZ3N0X3RhZ19saXN0X2FkZCAobGlzdCwgbW9kZSwgRlRBRywgRklYRUQxLCBGVEFHLCBGSVhFRDIsICAgICBcCisgICAgICAgICAgICAgICAgICAgIEZUQUcsIEZJWEVEMywgRlRBRywgRklYRUQ0LCBOVUxMKTsgICAgICAgICAgXAorICBtYXJrX3BvaW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gR19TVE1UX0VORDsKKworI2RlZmluZSBORVdfTElTVF9VTkZJWEVEKG1vZGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK0dfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmIChsaXN0KSBnc3RfdGFnX2xpc3RfZnJlZSAobGlzdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBsaXN0ID0gZ3N0X3RhZ19saXN0X25ldyAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZ3N0X3RhZ19saXN0X2FkZCAobGlzdCwgbW9kZSwgVVRBRywgVU5GSVhFRDEsIFVUQUcsIFVORklYRUQyLCBcCisgICAgICAgICAgICAgICAgICAgIFVUQUcsIFVORklYRUQzLCBVVEFHLCBVTkZJWEVENCwgTlVMTCk7ICAgICAgXAorICBtYXJrX3BvaW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gR19TVE1UX0VORDsKKworI2RlZmluZSBORVdfTElTVFNfRklYRUQobW9kZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK0dfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmIChsaXN0KSBnc3RfdGFnX2xpc3RfZnJlZSAobGlzdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBsaXN0ID0gZ3N0X3RhZ19saXN0X25ldyAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZ3N0X3RhZ19saXN0X2FkZCAobGlzdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQsIEZUQUcsIEZJWEVEMSwgICBcCisgICAgICAgICAgICAgICAgICAgIEZUQUcsIEZJWEVEMiwgTlVMTCk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAobGlzdDIpIGdzdF90YWdfbGlzdF9mcmVlIChsaXN0Mik7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgbGlzdDIgPSBnc3RfdGFnX2xpc3RfbmV3ICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGdzdF90YWdfbGlzdF9hZGQgKGxpc3QyLCBHU1RfVEFHX01FUkdFX0FQUEVORCwgRlRBRywgRklYRUQzLCAgXAorICAgICAgICAgICAgICAgICAgICBGVEFHLCBGSVhFRDQsIE5VTEwpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYgKG1lcmdlKSBnc3RfdGFnX2xpc3RfZnJlZSAobWVyZ2UpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIG1lcmdlID0gZ3N0X3RhZ19saXN0X21lcmdlIChsaXN0LCBsaXN0MiwgbW9kZSk7ICAgICAgICAgICAgICAgXAorICBtYXJrX3BvaW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gR19TVE1UX0VORDsKKworI2RlZmluZSBORVdfTElTVFNfVU5GSVhFRChtb2RlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK0dfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmIChsaXN0KSBnc3RfdGFnX2xpc3RfZnJlZSAobGlzdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBsaXN0ID0gZ3N0X3RhZ19saXN0X25ldyAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZ3N0X3RhZ19saXN0X2FkZCAobGlzdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQsIFVUQUcsIFVORklYRUQxLCBcCisgICAgICAgICAgICAgICAgICAgIFVUQUcsIFVORklYRUQyLCBOVUxMKTsgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAobGlzdDIpIGdzdF90YWdfbGlzdF9mcmVlIChsaXN0Mik7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgbGlzdDIgPSBnc3RfdGFnX2xpc3RfbmV3ICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGdzdF90YWdfbGlzdF9hZGQgKGxpc3QyLCBHU1RfVEFHX01FUkdFX0FQUEVORCwgVVRBRywgVU5GSVhFRDMsXAorICAgICAgICAgICAgICAgICAgICBVVEFHLCBVTkZJWEVENCwgTlVMTCk7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYgKG1lcmdlKSBnc3RfdGFnX2xpc3RfZnJlZSAobWVyZ2UpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIG1lcmdlID0gZ3N0X3RhZ19saXN0X21lcmdlIChsaXN0LCBsaXN0MiwgbW9kZSk7ICAgICAgICAgICAgICAgXAorICBtYXJrX3BvaW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gR19TVE1UX0VORDsKKworI2RlZmluZSBORVdfTElTVFNfRU1QVFkxKG1vZGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK0dfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmIChsaXN0KSBnc3RfdGFnX2xpc3RfZnJlZSAobGlzdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBsaXN0ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYgKGxpc3QyKSBnc3RfdGFnX2xpc3RfZnJlZSAobGlzdDIpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGxpc3QyID0gZ3N0X3RhZ19saXN0X25ldyAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBnc3RfdGFnX2xpc3RfYWRkIChsaXN0MiwgR1NUX1RBR19NRVJHRV9BUFBFTkQsIEZUQUcsIEZJWEVEMywgIFwKKyAgICAgICAgICAgICAgICAgICAgRlRBRywgRklYRUQ0LCBOVUxMKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmIChtZXJnZSkgZ3N0X3RhZ19saXN0X2ZyZWUgKG1lcmdlKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBtZXJnZSA9IGdzdF90YWdfbGlzdF9tZXJnZSAobGlzdCwgbGlzdDIsIG1vZGUpOyAgICAgICAgICAgICAgIFwKKyAgbWFya19wb2ludCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IEdfU1RNVF9FTkQ7CisKKyNkZWZpbmUgTkVXX0xJU1RTX0VNUFRZMihtb2RlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYgKGxpc3QpIGdzdF90YWdfbGlzdF9mcmVlIChsaXN0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGxpc3QgPSBnc3RfdGFnX2xpc3RfbmV3ICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBnc3RfdGFnX2xpc3RfYWRkIChsaXN0LCBHU1RfVEFHX01FUkdFX0FQUEVORCwgRlRBRywgRklYRUQxLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgRlRBRywgRklYRUQyLCBOVUxMKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmIChsaXN0MikgZ3N0X3RhZ19saXN0X2ZyZWUgKGxpc3QyKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBsaXN0MiA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYgKG1lcmdlKSBnc3RfdGFnX2xpc3RfZnJlZSAobWVyZ2UpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIG1lcmdlID0gZ3N0X3RhZ19saXN0X21lcmdlIChsaXN0LCBsaXN0MiwgbW9kZSk7ICAgICAgICAgICAgICAgXAorICBtYXJrX3BvaW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gR19TVE1UX0VORDsKKworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9iYXNpY3MpCit7CisgIC8qIG1ha2Ugc3VyZSB0aGUgYXNzdW1wdGlvbnMgd29yayAqLworICBmYWlsX3VubGVzcyAoZ3N0X3RhZ19pc19maXhlZCAoRlRBRykpOworICBmYWlsX3VubGVzcyAoIWdzdF90YWdfaXNfZml4ZWQgKFVUQUcpKTsKKyAgLyogd2UgY2hlY2sgc3RyaW5nIGhlcmUgb25seSAqLworICBmYWlsX3VubGVzcyAoZ3N0X3RhZ19nZXRfdHlwZSAoRlRBRykgPT0gR19UWVBFX1NUUklORyk7CisgIGZhaWxfdW5sZXNzIChnc3RfdGFnX2dldF90eXBlIChVVEFHKSA9PSBHX1RZUEVfU1RSSU5HKTsKK30KKworR1NUX0VORF9URVNUCitHU1RfU1RBUlRfVEVTVCAodGVzdF9hZGQpCit7CisgIEdzdFRhZ0xpc3QgKmxpc3QgPSBOVUxMOworCisgIC8qIGNoZWNrIGFkZGl0aW9ucyAqLworICAvKiB1bmZpeGVkICovCisgIE5FV19MSVNUX1VORklYRUQgKEdTVF9UQUdfTUVSR0VfUkVQTEFDRV9BTEwpOworICBjaGVja190YWdzIChsaXN0LCBVVEFHLCBVTkZJWEVENCwgTlVMTCk7CisgIE5FV19MSVNUX1VORklYRUQgKEdTVF9UQUdfTUVSR0VfUkVQTEFDRSk7CisgIGNoZWNrX3RhZ3MgKGxpc3QsIFVUQUcsIFVORklYRUQ0LCBOVUxMKTsKKyAgTkVXX0xJU1RfVU5GSVhFRCAoR1NUX1RBR19NRVJHRV9QUkVQRU5EKTsKKyAgY2hlY2tfdGFncyAobGlzdCwgVVRBRywgVU5GSVhFRDQsIFVORklYRUQzLCBVTkZJWEVEMiwgVU5GSVhFRDEsIE5VTEwpOworICBORVdfTElTVF9VTkZJWEVEIChHU1RfVEFHX01FUkdFX0FQUEVORCk7CisgIGNoZWNrX3RhZ3MgKGxpc3QsIFVUQUcsIFVORklYRUQxLCBVTkZJWEVEMiwgVU5GSVhFRDMsIFVORklYRUQ0LCBOVUxMKTsKKyAgTkVXX0xJU1RfVU5GSVhFRCAoR1NUX1RBR19NRVJHRV9LRUVQKTsKKyAgY2hlY2tfdGFncyAobGlzdCwgVVRBRywgVU5GSVhFRDEsIE5VTEwpOworICBORVdfTElTVF9VTkZJWEVEIChHU1RfVEFHX01FUkdFX0tFRVBfQUxMKTsKKyAgY2hlY2tfdGFncyAobGlzdCwgVVRBRywgTlVMTCk7CisKKyAgLyogZml4ZWQgKi8KKyAgTkVXX0xJU1RfRklYRUQgKEdTVF9UQUdfTUVSR0VfUkVQTEFDRV9BTEwpOworICBjaGVja190YWdzIChsaXN0LCBGVEFHLCBGSVhFRDQsIE5VTEwpOworICBORVdfTElTVF9GSVhFRCAoR1NUX1RBR19NRVJHRV9SRVBMQUNFKTsKKyAgY2hlY2tfdGFncyAobGlzdCwgRlRBRywgRklYRUQ0LCBOVUxMKTsKKyAgTkVXX0xJU1RfRklYRUQgKEdTVF9UQUdfTUVSR0VfUFJFUEVORCk7CisgIGNoZWNrX3RhZ3MgKGxpc3QsIEZUQUcsIEZJWEVENCwgTlVMTCk7CisgIE5FV19MSVNUX0ZJWEVEIChHU1RfVEFHX01FUkdFX0FQUEVORCk7CisgIGNoZWNrX3RhZ3MgKGxpc3QsIEZUQUcsIEZJWEVEMSwgTlVMTCk7CisgIE5FV19MSVNUX0ZJWEVEIChHU1RfVEFHX01FUkdFX0tFRVApOworICBjaGVja190YWdzIChsaXN0LCBGVEFHLCBGSVhFRDEsIE5VTEwpOworICBORVdfTElTVF9GSVhFRCAoR1NUX1RBR19NRVJHRV9LRUVQX0FMTCk7CisgIGNoZWNrX3RhZ3MgKGxpc3QsIEZUQUcsIE5VTEwpOworCisgIC8qIGNsZWFuIHVwICovCisgIGlmIChsaXN0KQorICAgIGdzdF90YWdfbGlzdF9mcmVlIChsaXN0KTsKK30KKworR1NUX0VORF9URVNUCitHU1RfU1RBUlRfVEVTVCAodGVzdF9tZXJnZSkKK3sKKyAgR3N0VGFnTGlzdCAqbGlzdCA9IE5VTEwsICpsaXN0MiA9IE5VTEwsICptZXJnZSA9IE5VTEw7CisKKyAgLyogY2hlY2sgbWVyZ2luZyAqLworICAvKiB1bmZpeGVkICovCisgIEdTVF9ERUJVRyAoInVuZml4ZWQiKTsKKyAgTkVXX0xJU1RTX1VORklYRUQgKEdTVF9UQUdfTUVSR0VfUkVQTEFDRV9BTEwpOworICBjaGVja190YWdzIChtZXJnZSwgVVRBRywgVU5GSVhFRDMsIFVORklYRUQ0LCBOVUxMKTsKKyAgTkVXX0xJU1RTX1VORklYRUQgKEdTVF9UQUdfTUVSR0VfUkVQTEFDRSk7CisgIGNoZWNrX3RhZ3MgKG1lcmdlLCBVVEFHLCBVTkZJWEVEMywgVU5GSVhFRDQsIE5VTEwpOworICBORVdfTElTVFNfVU5GSVhFRCAoR1NUX1RBR19NRVJHRV9QUkVQRU5EKTsKKyAgY2hlY2tfdGFncyAobWVyZ2UsIFVUQUcsIFVORklYRUQzLCBVTkZJWEVENCwgVU5GSVhFRDEsIFVORklYRUQyLCBOVUxMKTsKKyAgTkVXX0xJU1RTX1VORklYRUQgKEdTVF9UQUdfTUVSR0VfQVBQRU5EKTsKKyAgY2hlY2tfdGFncyAobWVyZ2UsIFVUQUcsIFVORklYRUQxLCBVTkZJWEVEMiwgVU5GSVhFRDMsIFVORklYRUQ0LCBOVUxMKTsKKyAgTkVXX0xJU1RTX1VORklYRUQgKEdTVF9UQUdfTUVSR0VfS0VFUCk7CisgIGNoZWNrX3RhZ3MgKG1lcmdlLCBVVEFHLCBVTkZJWEVEMSwgVU5GSVhFRDIsIE5VTEwpOworICBORVdfTElTVFNfVU5GSVhFRCAoR1NUX1RBR19NRVJHRV9LRUVQX0FMTCk7CisgIGNoZWNrX3RhZ3MgKG1lcmdlLCBVVEFHLCBVTkZJWEVEMSwgVU5GSVhFRDIsIE5VTEwpOworCisgIC8qIGZpeGVkICovCisgIEdTVF9ERUJVRyAoImZpeGVkIik7CisgIE5FV19MSVNUU19GSVhFRCAoR1NUX1RBR19NRVJHRV9SRVBMQUNFX0FMTCk7CisgIGNoZWNrX3RhZ3MgKG1lcmdlLCBGVEFHLCBGSVhFRDMsIE5VTEwpOworICBORVdfTElTVFNfRklYRUQgKEdTVF9UQUdfTUVSR0VfUkVQTEFDRSk7CisgIGNoZWNrX3RhZ3MgKG1lcmdlLCBGVEFHLCBGSVhFRDMsIE5VTEwpOworICBORVdfTElTVFNfRklYRUQgKEdTVF9UQUdfTUVSR0VfUFJFUEVORCk7CisgIGNoZWNrX3RhZ3MgKG1lcmdlLCBGVEFHLCBGSVhFRDMsIE5VTEwpOworICBORVdfTElTVFNfRklYRUQgKEdTVF9UQUdfTUVSR0VfQVBQRU5EKTsKKyAgY2hlY2tfdGFncyAobWVyZ2UsIEZUQUcsIEZJWEVEMSwgTlVMTCk7CisgIE5FV19MSVNUU19GSVhFRCAoR1NUX1RBR19NRVJHRV9LRUVQKTsKKyAgY2hlY2tfdGFncyAobWVyZ2UsIEZUQUcsIEZJWEVEMSwgTlVMTCk7CisgIE5FV19MSVNUU19GSVhFRCAoR1NUX1RBR19NRVJHRV9LRUVQX0FMTCk7CisgIGNoZWNrX3RhZ3MgKG1lcmdlLCBGVEFHLCBGSVhFRDEsIE5VTEwpOworCisgIC8qIGZpcnN0IGxpc3QgZW1wdHkgKi8KKyAgR1NUX0RFQlVHICgiZmlyc3QgZW1wdHkiKTsKKyAgTkVXX0xJU1RTX0VNUFRZMSAoR1NUX1RBR19NRVJHRV9SRVBMQUNFX0FMTCk7CisgIGNoZWNrX3RhZ3MgKG1lcmdlLCBGVEFHLCBGSVhFRDMsIE5VTEwpOworICBORVdfTElTVFNfRU1QVFkxIChHU1RfVEFHX01FUkdFX1JFUExBQ0UpOworICBjaGVja190YWdzIChtZXJnZSwgRlRBRywgRklYRUQzLCBOVUxMKTsKKyAgTkVXX0xJU1RTX0VNUFRZMSAoR1NUX1RBR19NRVJHRV9QUkVQRU5EKTsKKyAgY2hlY2tfdGFncyAobWVyZ2UsIEZUQUcsIEZJWEVEMywgTlVMTCk7CisgIE5FV19MSVNUU19FTVBUWTEgKEdTVF9UQUdfTUVSR0VfQVBQRU5EKTsKKyAgY2hlY2tfdGFncyAobWVyZ2UsIEZUQUcsIEZJWEVEMywgTlVMTCk7CisgIE5FV19MSVNUU19FTVBUWTEgKEdTVF9UQUdfTUVSR0VfS0VFUCk7CisgIGNoZWNrX3RhZ3MgKG1lcmdlLCBGVEFHLCBGSVhFRDMsIE5VTEwpOworICBORVdfTElTVFNfRU1QVFkxIChHU1RfVEFHX01FUkdFX0tFRVBfQUxMKTsKKyAgY2hlY2tfdGFnc19lbXB0eSAobWVyZ2UpOworCisgIC8qIHNlY29uZCBsaXN0IGVtcHR5ICovCisgIEdTVF9ERUJVRyAoInNlY29uZCBlbXB0eSIpOworICBORVdfTElTVFNfRU1QVFkyIChHU1RfVEFHX01FUkdFX1JFUExBQ0VfQUxMKTsKKyAgY2hlY2tfdGFnc19lbXB0eSAobWVyZ2UpOworICBORVdfTElTVFNfRU1QVFkyIChHU1RfVEFHX01FUkdFX1JFUExBQ0UpOworICBjaGVja190YWdzIChtZXJnZSwgRlRBRywgRklYRUQxLCBOVUxMKTsKKyAgTkVXX0xJU1RTX0VNUFRZMiAoR1NUX1RBR19NRVJHRV9QUkVQRU5EKTsKKyAgY2hlY2tfdGFncyAobWVyZ2UsIEZUQUcsIEZJWEVEMSwgTlVMTCk7CisgIE5FV19MSVNUU19FTVBUWTIgKEdTVF9UQUdfTUVSR0VfQVBQRU5EKTsKKyAgY2hlY2tfdGFncyAobWVyZ2UsIEZUQUcsIEZJWEVEMSwgTlVMTCk7CisgIE5FV19MSVNUU19FTVBUWTIgKEdTVF9UQUdfTUVSR0VfS0VFUCk7CisgIGNoZWNrX3RhZ3MgKG1lcmdlLCBGVEFHLCBGSVhFRDEsIE5VTEwpOworICBORVdfTElTVFNfRU1QVFkyIChHU1RfVEFHX01FUkdFX0tFRVBfQUxMKTsKKyAgY2hlY2tfdGFncyAobWVyZ2UsIEZUQUcsIEZJWEVEMSwgTlVMTCk7CisKKyAgLyogY2xlYW4gdXAgKi8KKyAgaWYgKGxpc3QpCisgICAgZ3N0X3RhZ19saXN0X2ZyZWUgKGxpc3QpOworICBpZiAobGlzdDIpCisgICAgZ3N0X3RhZ19saXN0X2ZyZWUgKGxpc3QyKTsKKyAgaWYgKG1lcmdlKQorICAgIGdzdF90YWdfbGlzdF9mcmVlIChtZXJnZSk7Cit9CisKK0dTVF9FTkRfVEVTVAorR1NUX1NUQVJUX1RFU1QgKHRlc3RfZGF0ZV90YWdzKQoreworICBHc3RUYWdMaXN0ICp0YWdfbGlzdCwgKnRhZ19saXN0MjsKKyAgR0RhdGUgKmRhdGUsICpkYXRlMjsKKyAgZ2NoYXIgKnN0cjsKKworICBkYXRlID0gZ19kYXRlX25ld19kbXkgKDE0LCAxMCwgMjAwNSk7CisgIHRhZ19saXN0ID0gZ3N0X3RhZ19saXN0X25ldyAoKTsKKyAgZ3N0X3RhZ19saXN0X2FkZCAodGFnX2xpc3QsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBHU1RfVEFHX0RBVEUsIGRhdGUsIE5VTEwpOworCisgIHN0ciA9IGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nICh0YWdfbGlzdCk7CisgIGZhaWxfaWYgKHN0ciA9PSBOVUxMKTsKKyAgZmFpbF9pZiAoc3Ryc3RyIChzdHIsICIyMDA1LTEwLTE0IikgPT0gTlVMTCk7CisKKyAgdGFnX2xpc3QyID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAoc3RyLCBOVUxMKTsKKyAgZmFpbF9pZiAodGFnX2xpc3QyID09IE5VTEwpOworICBmYWlsX2lmICghZ3N0X3RhZ19saXN0X2dldF9kYXRlICh0YWdfbGlzdDIsIEdTVF9UQUdfREFURSwgJmRhdGUyKSk7CisgIGdzdF90YWdfbGlzdF9mcmVlICh0YWdfbGlzdDIpOworICBnX2ZyZWUgKHN0cik7CisKKyAgZmFpbF9pZiAoZ19kYXRlX2NvbXBhcmUgKGRhdGUsIGRhdGUyKSAhPSAwKTsKKyAgZmFpbF9pZiAoZ19kYXRlX2dldF9kYXkgKGRhdGUpICE9IDE0KTsKKyAgZmFpbF9pZiAoZ19kYXRlX2dldF9tb250aCAoZGF0ZSkgIT0gMTApOworICBmYWlsX2lmIChnX2RhdGVfZ2V0X3llYXIgKGRhdGUpICE9IDIwMDUpOworICBmYWlsX2lmIChnX2RhdGVfZ2V0X2RheSAoZGF0ZTIpICE9IDE0KTsKKyAgZmFpbF9pZiAoZ19kYXRlX2dldF9tb250aCAoZGF0ZTIpICE9IDEwKTsKKyAgZmFpbF9pZiAoZ19kYXRlX2dldF95ZWFyIChkYXRlMikgIT0gMjAwNSk7CisgIGdfZGF0ZV9mcmVlIChkYXRlMik7CisKKyAgZ3N0X3RhZ19saXN0X2ZyZWUgKHRhZ19saXN0KTsKKyAgZ19kYXRlX2ZyZWUgKGRhdGUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3R5cGUpCit7CisgIEdzdFRhZ0xpc3QgKnRhZ2xpc3Q7CisKKyAgdGFnbGlzdCA9IGdzdF90YWdfbGlzdF9uZXcgKCk7CisgIGZhaWxfdW5sZXNzIChHU1RfSVNfVEFHX0xJU1QgKHRhZ2xpc3QpKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9pc190YWdfbGlzdCAodGFnbGlzdCkpOworICBnc3RfdGFnX2xpc3RfZnJlZSAodGFnbGlzdCk7CisKKyAgLyogdGhpcyBpc24ndCBva2F5ICovCisgIEFTU0VSVF9DUklUSUNBTCAoZmFpbF9pZiAoZ3N0X2lzX3RhZ19saXN0IChOVUxMKSkpOworCisgIC8qIHRoaXMgaG93ZXZlciBzaG91bGQgYmUgZmluZSAqLworICBmYWlsX2lmIChHU1RfSVNfVEFHX0xJU1QgKE5VTEwpKTsKKworICAvKiBjaGVjayBnc3RfdGFnX2xpc3RfaXNfZW1wdHkgKi8KKyAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfdGFnX2xpc3RfaXNfZW1wdHkgKE5VTEwpKTsKKyAgdGFnbGlzdCA9IGdzdF90YWdfbGlzdF9uZXcgKCk7CisgIGZhaWxfdW5sZXNzIChnc3RfdGFnX2xpc3RfaXNfZW1wdHkgKHRhZ2xpc3QpKTsKKyAgZ3N0X3RhZ19saXN0X2FkZCAodGFnbGlzdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQsIEdTVF9UQUdfQVJUSVNULCAiSkQiLCBOVUxMKTsKKyAgZmFpbF9pZiAoZ3N0X3RhZ19saXN0X2lzX2VtcHR5ICh0YWdsaXN0KSk7CisgIGdzdF90YWdfbGlzdF9mcmVlICh0YWdsaXN0KTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9zZXRfbm9uX3V0Zjhfc3RyaW5nKQoreworICBHc3RUYWdMaXN0ICp0YWdsaXN0OworICBndWludDggZm9vYmFyWzJdID0geyAweGZmLCAweDAwIH07ICAgIC8qIG5vdCBVVEYtOCAqLworCisgIHRhZ2xpc3QgPSBnc3RfdGFnX2xpc3RfbmV3ICgpOworICBmYWlsX3VubGVzcyAodGFnbGlzdCAhPSBOVUxMKTsKKworICBBU1NFUlRfV0FSTklORyAoZ3N0X3RhZ19saXN0X2FkZCAodGFnbGlzdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQsCisgICAgICAgICAgR1NUX1RBR19BUlRJU1QsIChnY2hhciAqKSBmb29iYXIsIE5VTEwpKTsKKworICAvKiBUaGF0IHN0cmluZyBmaWVsZCB3aXRoIGEgbm9uLVVURjggc3RyaW5nIHNob3VsZCBub3QgaGF2ZSBiZWVuIGFkZGVkICovCisgIGZhaWxfdW5sZXNzIChnc3RfdGFnX2xpc3RfaXNfZW1wdHkgKHRhZ2xpc3QpKTsKKworICBnc3RfdGFnX2xpc3RfZnJlZSAodGFnbGlzdCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfYnVmZmVyX3RhZ3MpCit7CisgIEdzdFRhZ0xpc3QgKnRhZ3M7CisgIEdzdEJ1ZmZlciAqYnVmMSwgKmJ1ZjI7CisKKyAgdGFncyA9IGdzdF90YWdfbGlzdF9uZXcgKCk7CisgIGJ1ZjEgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDIyMik7CisgIGJ1ZjIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEwMCk7CisgIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBHU1RfVEFHX0lNQUdFLCBidWYxLAorICAgICAgR1NUX1RBR19QUkVWSUVXX0lNQUdFLCBidWYyLCBOVUxMKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmMSk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZjIpOworCisgIGJ1ZjEgPSBidWYyID0gTlVMTDsKKyAgZmFpbF9pZiAoIWdzdF90YWdfbGlzdF9nZXRfYnVmZmVyICh0YWdzLCBHU1RfVEFHX0lNQUdFLCAmYnVmMSkpOworICBnc3RfYnVmZmVyX3VucmVmIChidWYxKTsKKyAgZmFpbF9pZiAoIWdzdF90YWdfbGlzdF9nZXRfYnVmZmVyICh0YWdzLCBHU1RfVEFHX1BSRVZJRVdfSU1BR0UsICZidWYyKSk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZjIpOworCisgIGZhaWxfaWYgKGdzdF90YWdfbGlzdF9nZXRfYnVmZmVyX2luZGV4ICh0YWdzLCBHU1RfVEFHX0lNQUdFLCAxLCAmYnVmMSkpOworICBmYWlsX2lmIChnc3RfdGFnX2xpc3RfZ2V0X2J1ZmZlcl9pbmRleCAodGFncywgR1NUX1RBR19JTUFHRSwgMiwgJmJ1ZjEpKTsKKyAgZmFpbF9pZiAoZ3N0X3RhZ19saXN0X2dldF9idWZmZXJfaW5kZXggKHRhZ3MsIEdTVF9UQUdfUFJFVklFV19JTUFHRSwgMSwKKyAgICAgICAgICAmYnVmMSkpOworICBmYWlsX2lmIChnc3RfdGFnX2xpc3RfZ2V0X2J1ZmZlcl9pbmRleCAodGFncywgR1NUX1RBR19QUkVWSUVXX0lNQUdFLCAyLAorICAgICAgICAgICZidWYxKSk7CisKKyAgZmFpbF9pZiAoIWdzdF90YWdfbGlzdF9nZXRfYnVmZmVyX2luZGV4ICh0YWdzLCBHU1RfVEFHX0lNQUdFLCAwLCAmYnVmMSkpOworICBmYWlsX2lmICghZ3N0X3RhZ19saXN0X2dldF9idWZmZXJfaW5kZXggKHRhZ3MsIEdTVF9UQUdfUFJFVklFV19JTUFHRSwgMCwKKyAgICAgICAgICAmYnVmMikpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnVmZmVyX2dldF9zaXplIChidWYxKSwgMjIyKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmMiksIDEwMCk7CisKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmMSk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZjIpOworCisgIGdzdF90YWdfbGlzdF9mcmVlICh0YWdzKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9lbXB0eV90YWdzKQoreworICBHc3RUYWdMaXN0ICp0YWdzOworCisgIC8qIG9ubHkgZ2V0IGdfd2FybmluZ3MoKSB3aXRoIGdpdCAqLworICBpZiAoR1NUX1ZFUlNJT05fTkFOTyAhPSAxKQorICAgIHJldHVybjsKKworICB0YWdzID0gZ3N0X3RhZ19saXN0X25ldyAoKTsKKyAgQVNTRVJUX1dBUk5JTkcgKGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELAorICAgICAgICAgIEdTVF9UQUdfQVJUSVNULCBOVUxMLCBOVUxMKSk7CisgIEFTU0VSVF9XQVJOSU5HIChnc3RfdGFnX2xpc3RfYWRkICh0YWdzLCBHU1RfVEFHX01FUkdFX0FQUEVORCwKKyAgICAgICAgICBHU1RfVEFHX0FSVElTVCwgIiIsIE5VTEwpKTsKKyAgZ3N0X3RhZ19saXN0X2FkZCAodGFncywgR1NUX1RBR19NRVJHRV9BUFBFTkQsIEdTVF9UQUdfQVJUSVNULCAieHl6IiwgTlVMTCk7CisgIGdzdF90YWdfbGlzdF9mcmVlICh0YWdzKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9uZXdfZnVsbCkKK3sKKyAgR3N0VGFnTGlzdCAqdGFnczsKKyAgZ2NoYXIgKmFydGlzdCwgKnRpdGxlOworICBnZG91YmxlIHRyYWNrX2dhaW47CisgIGd1aW50IHRyYWNrX251bTsKKworICB0YWdzID0gZ3N0X3RhZ19saXN0X25ld19mdWxsIChHU1RfVEFHX0FSVElTVCwgIkFydHkgSXN0IiwKKyAgICAgIEdTVF9UQUdfVFJBQ0tfTlVNQkVSLCA5LCBHU1RfVEFHX1RSQUNLX0dBSU4sIDQuMjQyLCBHU1RfVEFHX1RJVExFLAorICAgICAgIlRpdGxlISIsIE5VTEwpOworCisgIGZhaWxfdW5sZXNzIChnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZyAodGFncywgR1NUX1RBR19BUlRJU1QsICZhcnRpc3QpKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoYXJ0aXN0LCAiQXJ0eSBJc3QiKTsKKyAgZmFpbF91bmxlc3MgKGdzdF90YWdfbGlzdF9nZXRfc3RyaW5nICh0YWdzLCBHU1RfVEFHX1RJVExFLCAmdGl0bGUpKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAodGl0bGUsICJUaXRsZSEiKTsKKyAgZmFpbF91bmxlc3MgKGdzdF90YWdfbGlzdF9nZXRfdWludCAodGFncywgR1NUX1RBR19UUkFDS19OVU1CRVIsICZ0cmFja19udW0pKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAodHJhY2tfbnVtLCA5KTsKKyAgZmFpbF91bmxlc3MgKGdzdF90YWdfbGlzdF9nZXRfZG91YmxlICh0YWdzLCBHU1RfVEFHX1RSQUNLX0dBSU4sICZ0cmFja19nYWluKSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCAodHJhY2tfZ2FpbiwgNC4yNDIpOworICBmYWlsX3VubGVzcyAodGFncyAhPSBOVUxMKTsKKworICBnc3RfdGFnX2xpc3RfZnJlZSAodGFncyk7CisgIGdfZnJlZSAoYXJ0aXN0KTsKKyAgZ19mcmVlICh0aXRsZSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfbWVyZ2Vfc3RyaW5nc193aXRoX2NvbW1hKQoreworICBHc3RUYWdMaXN0ICp0YWdzOworICBnY2hhciAqYXJ0aXN0cyA9IE5VTEw7CisKKyAgdGFncyA9IGdzdF90YWdfbGlzdF9uZXcgKCk7CisgIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBHU1RfVEFHX0FSVElTVCwgIkZvbyIsIE5VTEwpOworICBnc3RfdGFnX2xpc3RfYWRkICh0YWdzLCBHU1RfVEFHX01FUkdFX0FQUEVORCwgR1NUX1RBR19BUlRJU1QsICJCYXIiLCBOVUxMKTsKKyAgZ3N0X3RhZ19saXN0X2FkZCAodGFncywgR1NUX1RBR19NRVJHRV9BUFBFTkQsIEdTVF9UQUdfQVJUSVNULCAiWWF5IiwgTlVMTCk7CisgIGdzdF90YWdfbGlzdF9nZXRfc3RyaW5nICh0YWdzLCBHU1RfVEFHX0FSVElTVCwgJmFydGlzdHMpOworICBmYWlsX3VubGVzcyAoYXJ0aXN0cyAhPSBOVUxMKTsKKyAgLyogY2FuJ3QgY2hlY2sgZm9yIGV4YWN0IHN0cmluZyBzaW5jZSB0aGUgY29tbWEgc2VwYXJhdG9yIGlzIGkxOG4tZWQgKi8KKyAgZmFpbF91bmxlc3MgKHN0cnN0ciAoYXJ0aXN0cywgIkZvbyIpICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoc3Ryc3RyIChhcnRpc3RzLCAiQmFyIikgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChzdHJzdHIgKGFydGlzdHMsICJZYXkiKSAhPSBOVUxMKTsKKyAgZ19mcmVlIChhcnRpc3RzKTsKKyAgZ3N0X3RhZ19saXN0X2ZyZWUgKHRhZ3MpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBTdWl0ZSAqCitnc3RfdGFnX3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdFRhZyIpOworICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7CisKKyAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9iYXNpY3MpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYWRkKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X21lcmdlKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X21lcmdlX3N0cmluZ3Nfd2l0aF9jb21tYSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9kYXRlX3RhZ3MpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdHlwZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zZXRfbm9uX3V0Zjhfc3RyaW5nKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2J1ZmZlcl90YWdzKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2VtcHR5X3RhZ3MpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbmV3X2Z1bGwpOworCisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoZ3N0X3RhZyk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QvZ3N0dGFnc2V0dGVyLmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0dGFnc2V0dGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI1ZWE4ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3R0YWdzZXR0ZXIuYwpAQCAtMCwwICsxLDMzNCBAQAorLyogR1N0cmVhbWVyIEdzdFRhZ1NldHRlciBpbnRlcmZhY2UgdW5pdCB0ZXN0cworICogQ29weXJpZ2h0IChDKSAyMDA3IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogc29tZSBtaW5pbWFsIEdzdFRhZ1NldHRlciBvYmplY3QgKi8KKyNkZWZpbmUgR1NUX1RZUEVfRFVNTVlfRU5DIGdzdF9kdW1teV9lbmNfZ2V0X3R5cGUoKQorCit0eXBlZGVmIEdzdEVsZW1lbnQgR3N0RHVtbXlFbmM7Cit0eXBlZGVmIEdzdEVsZW1lbnRDbGFzcyBHc3REdW1teUVuY0NsYXNzOworCitHVHlwZSBnc3RfZHVtbXlfZW5jX2dldF90eXBlICh2b2lkKTsKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3REdW1teUVuYywgZ3N0X2R1bW15X2VuYywKKyAgICBHU1RfVFlQRV9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UgKEdTVF9UWVBFX1RBR19TRVRURVIsIE5VTEwpKTsKKworc3RhdGljIHZvaWQKK2dzdF9kdW1teV9lbmNfY2xhc3NfaW5pdCAoR3N0RHVtbXlFbmNDbGFzcyAqIGtsYXNzKQoreworfQorCitzdGF0aWMgdm9pZAorZ3N0X2R1bW15X2VuY19pbml0IChHc3REdW1teUVuYyAqIGVuYykKK3sKK30KKworc3RhdGljIHZvaWQKK3RhZ19saXN0X2ZvcmVhY2ggKGNvbnN0IEdzdFRhZ0xpc3QgKiB0YWdsaXN0LCBjb25zdCBnY2hhciAqIHRhZywgZ3VpbnQgKiBwX251bSkKK3sKKyAgZ3VpbnQgdGFnX3NpemU7CisKKyAgdGFnX3NpemUgPSBnc3RfdGFnX2xpc3RfZ2V0X3RhZ19zaXplICh0YWdsaXN0LCB0YWcpOworICBHU1RfTE9HICgiJXUrJXUgdGFnID0gJXMiLCAqcF9udW0sIHRhZ19zaXplLCB0YWcpOworICAqcF9udW0gKz0gdGFnX3NpemU7Cit9CisKK3N0YXRpYyBndWludAordGFnX3NldHRlcl9saXN0X2xlbmd0aCAoR3N0VGFnU2V0dGVyICogc2V0dGVyKQoreworICBndWludCBsZW4gPSAwOworCisgIGlmIChnc3RfdGFnX3NldHRlcl9nZXRfdGFnX2xpc3QgKHNldHRlcikgPT0gTlVMTCkKKyAgICByZXR1cm4gMDsKKworICBnc3RfdGFnX2xpc3RfZm9yZWFjaCAoZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19saXN0IChzZXR0ZXIpLAorICAgICAgKEdzdFRhZ0ZvcmVhY2hGdW5jKSB0YWdfbGlzdF9mb3JlYWNoLCAmbGVuKTsKKyAgcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGd1aW50Cit0YWdfbGlzdF9sZW5ndGggKGNvbnN0IEdzdFRhZ0xpc3QgKiB0YWdfbGlzdCkKK3sKKyAgZ3VpbnQgbGVuID0gMDsKKworICBpZiAodGFnX2xpc3QgPT0gTlVMTCkKKyAgICByZXR1cm4gMDsKKworICBnc3RfdGFnX2xpc3RfZm9yZWFjaCAodGFnX2xpc3QsIChHc3RUYWdGb3JlYWNoRnVuYykgdGFnX2xpc3RfZm9yZWFjaCwgJmxlbik7CisgIHJldHVybiBsZW47Cit9CisKKyNkZWZpbmUgYXNzZXJ0X3RhZ19zZXR0ZXJfbGlzdF9sZW5ndGgoc2V0dGVyLGxlbikgXAorICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHRhZ19zZXR0ZXJfbGlzdF9sZW5ndGgoc2V0dGVyKSwgbGVuKTsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfbWVyZ2UpCit7CisgIEdzdFRhZ1NldHRlciAqc2V0dGVyOworICBHc3RUYWdMaXN0ICpsaXN0MSwgKmxpc3QyOworICBHc3RFbGVtZW50ICplbmM7CisKKyAgZW5jID0gZ19vYmplY3RfbmV3IChHU1RfVFlQRV9EVU1NWV9FTkMsIE5VTEwpOworICBmYWlsX3VubGVzcyAoZW5jICE9IE5VTEwpOworCisgIHNldHRlciA9IEdTVF9UQUdfU0VUVEVSIChlbmMpOworCisgIGxpc3QxID0gZ3N0X3RhZ19saXN0X25ldyAoKTsKKyAgZ3N0X3RhZ19saXN0X2FkZCAobGlzdDEsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBHU1RfVEFHX0FSVElTVCwgImFydGlzdDEiLAorICAgICAgTlVMTCk7CisgIGdzdF90YWdfc2V0dGVyX21lcmdlX3RhZ3MgKHNldHRlciwgbGlzdDEsIEdTVF9UQUdfTUVSR0VfQVBQRU5EKTsKKyAgYXNzZXJ0X3RhZ19zZXR0ZXJfbGlzdF9sZW5ndGggKHNldHRlciwgMSk7CisKKyAgbGlzdDIgPSBnc3RfdGFnX2xpc3RfbmV3ICgpOworICBnc3RfdGFnX2xpc3RfYWRkIChsaXN0MiwgR1NUX1RBR19NRVJHRV9BUFBFTkQsIEdTVF9UQUdfQVJUSVNULCAiYXJ0aXN0MiIsCisgICAgICBHU1RfVEFHX1RJVExFLCAidGl0bGUxIiwgTlVMTCk7CisgIGdzdF90YWdfc2V0dGVyX21lcmdlX3RhZ3MgKHNldHRlciwgbGlzdDIsIEdTVF9UQUdfTUVSR0VfQVBQRU5EKTsKKyAgYXNzZXJ0X3RhZ19zZXR0ZXJfbGlzdF9sZW5ndGggKHNldHRlciwgMyk7CisKKyAgZ3N0X3RhZ19zZXR0ZXJfbWVyZ2VfdGFncyAoc2V0dGVyLCBsaXN0MiwgR1NUX1RBR19NRVJHRV9SRVBMQUNFX0FMTCk7CisgIGFzc2VydF90YWdfc2V0dGVyX2xpc3RfbGVuZ3RoIChzZXR0ZXIsIDIpOworCisgIGdzdF90YWdfc2V0dGVyX21lcmdlX3RhZ3MgKHNldHRlciwgbGlzdDEsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRV9BTEwpOworICBhc3NlcnRfdGFnX3NldHRlcl9saXN0X2xlbmd0aCAoc2V0dGVyLCAxKTsKKworICBnc3RfdGFnX3NldHRlcl9hZGRfdGFncyAoc2V0dGVyLCBHU1RfVEFHX01FUkdFX0FQUEVORCwgR1NUX1RBR19BTEJVTSwgInh5eiIsCisgICAgICBOVUxMKTsKKyAgYXNzZXJ0X3RhZ19zZXR0ZXJfbGlzdF9sZW5ndGggKHNldHRlciwgMik7CisKKyAgZ3N0X3RhZ19saXN0X2ZyZWUgKGxpc3QyKTsKKyAgZ3N0X3RhZ19saXN0X2ZyZWUgKGxpc3QxKTsKKworICBnX29iamVjdF91bnJlZiAoZW5jKTsKK30KKworR1NUX0VORF9URVNUCitHU1RfU1RBUlRfVEVTVCAodGVzdF9tZXJnZV9tb2RlcykKK3sKKyAgR3N0VGFnTWVyZ2VNb2RlIG1vZGU7CisKKyAgZm9yIChtb2RlID0gR1NUX1RBR19NRVJHRV9SRVBMQUNFX0FMTDsgbW9kZSA8IEdTVF9UQUdfTUVSR0VfQ09VTlQ7IG1vZGUrKykgeworICAgIGdpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAgIEdzdEVsZW1lbnQgKmVuYzsKKyAgICAgIEdzdFRhZ1NldHRlciAqc2V0dGVyOworICAgICAgR3N0VGFnTGlzdCAqbGlzdDEsICpsaXN0MiwgKm1lcmdlZDsKKworICAgICAgZW5jID0gZ19vYmplY3RfbmV3IChHU1RfVFlQRV9EVU1NWV9FTkMsIE5VTEwpOworICAgICAgZmFpbF91bmxlc3MgKGVuYyAhPSBOVUxMKTsKKworICAgICAgc2V0dGVyID0gR1NUX1RBR19TRVRURVIgKGVuYyk7CisgICAgICBsaXN0MSA9IGdzdF90YWdfbGlzdF9uZXcgKCk7CisgICAgICBsaXN0MiA9IGdzdF90YWdfbGlzdF9uZXcgKCk7CisKKyAgICAgIC8qIGkgPSAwOiAtICAgICAtCisgICAgICAgKiBpID0gMTogbGlzdDEgLQorICAgICAgICogaSA9IDI6IC0gICAgIGxpc3QyCisgICAgICAgKiBpID0gMzogbGlzdDEgbGlzdDIgKi8KKworICAgICAgaWYgKGkgJSAyID09IDEpIHsKKyAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCAobGlzdDEsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBHU1RfVEFHX0FSVElTVCwKKyAgICAgICAgICAgICJhcnRpc3QxIiwgTlVMTCk7CisgICAgICB9CisgICAgICBpZiAoaSA+IDEpIHsKKyAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCAobGlzdDIsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBHU1RfVEFHX0FSVElTVCwKKyAgICAgICAgICAgICJhcnRpc3QyIiwgTlVMTCk7CisgICAgICB9CisKKyAgICAgIGdzdF90YWdfc2V0dGVyX21lcmdlX3RhZ3MgKHNldHRlciwgbGlzdDEsIEdTVF9UQUdfTUVSR0VfQVBQRU5EKTsKKyAgICAgIGdzdF90YWdfc2V0dGVyX21lcmdlX3RhZ3MgKHNldHRlciwgbGlzdDIsIG1vZGUpOworCisgICAgICBtZXJnZWQgPSBnc3RfdGFnX2xpc3RfbWVyZ2UgKGxpc3QxLCBsaXN0MiwgbW9kZSk7CisKKyAgICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHRhZ19saXN0X2xlbmd0aCAoZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19saXN0CisgICAgICAgICAgICAgIChzZXR0ZXIpKSwgdGFnX2xpc3RfbGVuZ3RoIChtZXJnZWQpKTsKKworICAgICAgZ3N0X3RhZ19saXN0X2ZyZWUgKGxpc3QxKTsKKyAgICAgIGdzdF90YWdfbGlzdF9mcmVlIChsaXN0Mik7CisgICAgICBnc3RfdGFnX2xpc3RfZnJlZSAobWVyZ2VkKTsKKyAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGVuYyk7CisgICAgfQorICB9Cit9CisKK0dTVF9FTkRfVEVTVAorR1NUX1NUQVJUX1RFU1QgKHRlc3RfbWVyZ2VfbW9kZXNfc2tpcF9lbXB0eSkKK3sKKyAgR3N0VGFnTWVyZ2VNb2RlIG1vZGU7CisKKyAgZm9yIChtb2RlID0gR1NUX1RBR19NRVJHRV9SRVBMQUNFX0FMTDsgbW9kZSA8IEdTVF9UQUdfTUVSR0VfQ09VTlQ7IG1vZGUrKykgeworICAgIGdpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKyAgICAgIEdzdEVsZW1lbnQgKmVuYzsKKyAgICAgIEdzdFRhZ1NldHRlciAqc2V0dGVyOworICAgICAgR3N0VGFnTGlzdCAqbGlzdDEsICpsaXN0MiwgKm1lcmdlZDsKKworICAgICAgZW5jID0gZ19vYmplY3RfbmV3IChHU1RfVFlQRV9EVU1NWV9FTkMsIE5VTEwpOworICAgICAgZmFpbF91bmxlc3MgKGVuYyAhPSBOVUxMKTsKKworICAgICAgc2V0dGVyID0gR1NUX1RBR19TRVRURVIgKGVuYyk7CisgICAgICBsaXN0MSA9IGdzdF90YWdfbGlzdF9uZXcgKCk7CisgICAgICBsaXN0MiA9IGdzdF90YWdfbGlzdF9uZXcgKCk7CisKKyAgICAgIGlmIChpID09IDEpIHsKKyAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCAobGlzdDIsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBHU1RfVEFHX0FSVElTVCwKKyAgICAgICAgICAgICJhcnRpc3QyIiwgTlVMTCk7CisgICAgICB9CisKKyAgICAgIGdzdF90YWdfc2V0dGVyX21lcmdlX3RhZ3MgKHNldHRlciwgbGlzdDIsIG1vZGUpOworCisgICAgICBtZXJnZWQgPSBnc3RfdGFnX2xpc3RfbWVyZ2UgKGxpc3QxLCBsaXN0MiwgbW9kZSk7CisKKyAgICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHRhZ19saXN0X2xlbmd0aCAoZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19saXN0CisgICAgICAgICAgICAgIChzZXR0ZXIpKSwgdGFnX2xpc3RfbGVuZ3RoIChtZXJnZWQpKTsKKworICAgICAgZ3N0X3RhZ19saXN0X2ZyZWUgKGxpc3QxKTsKKyAgICAgIGdzdF90YWdfbGlzdF9mcmVlIChsaXN0Mik7CisgICAgICBnc3RfdGFnX2xpc3RfZnJlZSAobWVyZ2VkKTsKKyAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGVuYyk7CisgICAgfQorICB9Cit9CisKK0dTVF9FTkRfVEVTVCBzdGF0aWMgaW50IHNwaW5fYW5kX3dhaXQgPSAxOworc3RhdGljIGludCB0aHJlYWRzX3J1bm5pbmcgPSAwOworCisjZGVmaW5lIFRIUkVBRFNfVEVTVF9TRUNPTkRTIDEuNQorCitzdGF0aWMgZ3BvaW50ZXIKK3Rlc3RfdGhyZWFkc190aHJlYWRfZnVuYzEgKGdwb2ludGVyIGRhdGEpCit7CisgIEdzdFRhZ1NldHRlciAqc2V0dGVyID0gR1NUX1RBR19TRVRURVIgKGRhdGEpOworICBHVGltZXIgKnRpbWVyOworCisgIHRpbWVyID0gZ190aW1lcl9uZXcgKCk7CisKKyAgZ19hdG9taWNfaW50X2luYyAoJnRocmVhZHNfcnVubmluZyk7CisgIHdoaWxlIChnX2F0b21pY19pbnRfZ2V0ICgmc3Bpbl9hbmRfd2FpdCkpCisgICAgZ191c2xlZXAgKDApOworCisgIEdTVF9JTkZPICgiR28hIik7CisgIGdfdGltZXJfc3RhcnQgKHRpbWVyKTsKKworICB3aGlsZSAoZ190aW1lcl9lbGFwc2VkICh0aW1lciwgTlVMTCkgPCBUSFJFQURTX1RFU1RfU0VDT05EUykgeworICAgIGdzdF90YWdfc2V0dGVyX2FkZF90YWdzIChzZXR0ZXIsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBHU1RfVEFHX0FSVElTVCwKKyAgICAgICAgInNvbWUgYXJ0aXN0IiwgR1NUX1RBR19USVRMRSwgInNvbWUgdGl0bGUiLCBHU1RfVEFHX1RSQUNLX05VTUJFUiwgNiwKKyAgICAgICAgTlVMTCk7CisgIH0KKworICBnX3RpbWVyX2Rlc3Ryb3kgKHRpbWVyKTsKKyAgR1NUX0lORk8gKCJEb25lIik7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBncG9pbnRlcgordGVzdF90aHJlYWRzX3RocmVhZF9mdW5jMiAoZ3BvaW50ZXIgZGF0YSkKK3sKKyAgR3N0VGFnU2V0dGVyICpzZXR0ZXIgPSBHU1RfVEFHX1NFVFRFUiAoZGF0YSk7CisgIEdUaW1lciAqdGltZXI7CisKKyAgdGltZXIgPSBnX3RpbWVyX25ldyAoKTsKKworICBnX2F0b21pY19pbnRfaW5jICgmdGhyZWFkc19ydW5uaW5nKTsKKyAgd2hpbGUgKGdfYXRvbWljX2ludF9nZXQgKCZzcGluX2FuZF93YWl0KSkKKyAgICBnX3VzbGVlcCAoMCk7CisKKyAgR1NUX0lORk8gKCJHbyEiKTsKKyAgZ190aW1lcl9zdGFydCAodGltZXIpOworCisgIHdoaWxlIChnX3RpbWVyX2VsYXBzZWQgKHRpbWVyLCBOVUxMKSA8IFRIUkVBRFNfVEVTVF9TRUNPTkRTKSB7CisgICAgZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ3MgKHNldHRlciwgR1NUX1RBR19NRVJHRV9QUkVQRU5ELCBHU1RfVEFHX0NPREVDLAorICAgICAgICAiTVA0MiIsIEdTVF9UQUdfQ09NTUVOVCwgImRlZXAgaW5zaWdodHMgZ28gaGVyZSIsIEdTVF9UQUdfVFJBQ0tfQ09VTlQsCisgICAgICAgIDEwLCBOVUxMKTsKKyAgfQorCisgIGdfdGltZXJfZGVzdHJveSAodGltZXIpOworICBHU1RfSU5GTyAoIkRvbmUiKTsKKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGdwb2ludGVyCit0ZXN0X3RocmVhZHNfdGhyZWFkX2Z1bmMzIChncG9pbnRlciBkYXRhKQoreworICBHc3RUYWdTZXR0ZXIgKnNldHRlciA9IEdTVF9UQUdfU0VUVEVSIChkYXRhKTsKKyAgR1RpbWVyICp0aW1lcjsKKworICB0aW1lciA9IGdfdGltZXJfbmV3ICgpOworCisgIGdfYXRvbWljX2ludF9pbmMgKCZ0aHJlYWRzX3J1bm5pbmcpOworICB3aGlsZSAoZ19hdG9taWNfaW50X2dldCAoJnNwaW5fYW5kX3dhaXQpKQorICAgIGdfdXNsZWVwICgwKTsKKworICBHU1RfSU5GTyAoIkdvISIpOworICBnX3RpbWVyX3N0YXJ0ICh0aW1lcik7CisKKyAgd2hpbGUgKGdfdGltZXJfZWxhcHNlZCAodGltZXIsIE5VTEwpIDwgVEhSRUFEU19URVNUX1NFQ09ORFMpIHsKKyAgICBnc3RfdGFnX3NldHRlcl9yZXNldF90YWdzIChzZXR0ZXIpOworICB9CisKKyAgZ190aW1lcl9kZXN0cm95ICh0aW1lcik7CisgIEdTVF9JTkZPICgiRG9uZSIpOworCisgIHJldHVybiBOVUxMOworfQorCitHU1RfU1RBUlRfVEVTVCAodGVzdF90aHJlYWRzKQoreworICBHc3RUYWdTZXR0ZXIgKnNldHRlcjsKKyAgR1RocmVhZCAqdGhyZWFkc1szXTsKKworICBzZXR0ZXIgPSBHU1RfVEFHX1NFVFRFUiAoZ19vYmplY3RfbmV3IChHU1RfVFlQRV9EVU1NWV9FTkMsIE5VTEwpKTsKKworICBzcGluX2FuZF93YWl0ID0gVFJVRTsKKyAgdGhyZWFkc1swXSA9IGdfdGhyZWFkX2NyZWF0ZSAodGVzdF90aHJlYWRzX3RocmVhZF9mdW5jMSwgc2V0dGVyLCBUUlVFLCBOVUxMKTsKKyAgdGhyZWFkc1sxXSA9IGdfdGhyZWFkX2NyZWF0ZSAodGVzdF90aHJlYWRzX3RocmVhZF9mdW5jMiwgc2V0dGVyLCBUUlVFLCBOVUxMKTsKKyAgdGhyZWFkc1syXSA9IGdfdGhyZWFkX2NyZWF0ZSAodGVzdF90aHJlYWRzX3RocmVhZF9mdW5jMywgc2V0dGVyLCBUUlVFLCBOVUxMKTsKKworICB3aGlsZSAoZ19hdG9taWNfaW50X2dldCAoJnRocmVhZHNfcnVubmluZykgPCAzKQorICAgIGdfdXNsZWVwICgxMCk7CisKKyAgZ19hdG9taWNfaW50X3NldCAoJnNwaW5fYW5kX3dhaXQsIEZBTFNFKTsKKworICBnX3RocmVhZF9qb2luICh0aHJlYWRzWzBdKTsKKyAgZ190aHJlYWRfam9pbiAodGhyZWFkc1sxXSk7CisgIGdfdGhyZWFkX2pvaW4gKHRocmVhZHNbMl0pOworCisgIGdfb2JqZWN0X3VucmVmIChHX09CSkVDVCAoc2V0dGVyKSk7Cit9CisKK0dTVF9FTkRfVEVTVCBzdGF0aWMgU3VpdGUgKgorZ3N0X3RhZ19zZXR0ZXJfc3VpdGUgKHZvaWQpCit7CisgIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0VGFnU2V0dGVyIik7CisgIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKKworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X21lcmdlKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X21lcmdlX21vZGVzKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X21lcmdlX21vZGVzX3NraXBfZW1wdHkpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdGhyZWFkcyk7CisKKyAgcmV0dXJuIHM7Cit9CisKK0dTVF9DSEVDS19NQUlOIChnc3RfdGFnX3NldHRlcik7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QvZ3N0dGFzay5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdHRhc2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2IxNjlhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hlY2svZ3N0L2dzdHRhc2suYwpAQCAtMCwwICsxLDIwNyBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorICoKKyAqIGdzdHRhc2suYzogVW5pdCB0ZXN0IGZvciBHc3RUYXNrCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgorCitzdGF0aWMgR011dGV4ICp0YXNrX2xvY2s7CitzdGF0aWMgR0NvbmQgKnRhc2tfY29uZDsKKworc3RhdGljIEdTdGF0aWNSZWNNdXRleCB0YXNrX211dGV4ID0gR19TVEFUSUNfUkVDX01VVEVYX0lOSVQ7CisKK3N0YXRpYyB2b2lkCit0YXNrX2Z1bmMyICh2b2lkICpkYXRhKQoreworICBnYm9vbGVhbiByZXQ7CisgIEdzdFRhc2sgKnQgPSAqKChHc3RUYXNrICoqKSBkYXRhKTsKKworICBnX211dGV4X2xvY2sgKHRhc2tfbG9jayk7CisgIEdTVF9ERUJVRyAoInNpZ25hbCIpOworICBnX2NvbmRfc2lnbmFsICh0YXNrX2NvbmQpOworICBnX211dGV4X3VubG9jayAodGFza19sb2NrKTsKKworICBBU1NFUlRfV0FSTklORyAocmV0ID0gZ3N0X3Rhc2tfam9pbiAodCkpOworICBmYWlsX3VubGVzcyAocmV0ID09IEZBTFNFKTsKK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfam9pbikKK3sKKyAgR3N0VGFzayAqdDsKKyAgZ2Jvb2xlYW4gcmV0OworCisgIHQgPSBnc3RfdGFza19jcmVhdGUgKHRhc2tfZnVuYzIsICZ0KTsKKyAgZmFpbF9pZiAodCA9PSBOVUxMKTsKKworICBnc3RfdGFza19zZXRfbG9jayAodCwgJnRhc2tfbXV0ZXgpOworCisgIHRhc2tfY29uZCA9IGdfY29uZF9uZXcgKCk7CisgIHRhc2tfbG9jayA9IGdfbXV0ZXhfbmV3ICgpOworCisgIGdfbXV0ZXhfbG9jayAodGFza19sb2NrKTsKKyAgR1NUX0RFQlVHICgic3RhcnRpbmciKTsKKyAgcmV0ID0gZ3N0X3Rhc2tfc3RhcnQgKHQpOworICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOworICAvKiB3YWl0IGZvciBpdCB0byBzcGluIHVwICovCisgIEdTVF9ERUJVRyAoIndhaXRpbmciKTsKKyAgZ19jb25kX3dhaXQgKHRhc2tfY29uZCwgdGFza19sb2NrKTsKKyAgR1NUX0RFQlVHICgiZG9uZSB3YWl0aW5nIik7CisgIGdfbXV0ZXhfdW5sb2NrICh0YXNrX2xvY2spOworCisgIEdTVF9ERUJVRyAoImpvaW5pbmciKTsKKyAgcmV0ID0gZ3N0X3Rhc2tfam9pbiAodCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7CisKKyAgZ3N0X3Rhc2tfY2xlYW51cF9hbGwgKCk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAodCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIHZvaWQKK3Rhc2tfZnVuYyAodm9pZCAqZGF0YSkKK3sKKyAgZ19tdXRleF9sb2NrICh0YXNrX2xvY2spOworICBHU1RfREVCVUcgKCJzaWduYWwiKTsKKyAgZ19jb25kX3NpZ25hbCAodGFza19jb25kKTsKKyAgZ19tdXRleF91bmxvY2sgKHRhc2tfbG9jayk7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2xvY2tfc3RhcnQpCit7CisgIEdzdFRhc2sgKnQ7CisgIGdib29sZWFuIHJldDsKKworICB0ID0gZ3N0X3Rhc2tfY3JlYXRlICh0YXNrX2Z1bmMsIE5VTEwpOworICBmYWlsX2lmICh0ID09IE5VTEwpOworCisgIGdzdF90YXNrX3NldF9sb2NrICh0LCAmdGFza19tdXRleCk7CisKKyAgdGFza19jb25kID0gZ19jb25kX25ldyAoKTsKKyAgdGFza19sb2NrID0gZ19tdXRleF9uZXcgKCk7CisKKyAgZ19tdXRleF9sb2NrICh0YXNrX2xvY2spOworICBHU1RfREVCVUcgKCJzdGFydGluZyIpOworICByZXQgPSBnc3RfdGFza19zdGFydCAodCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7CisgIC8qIHdhaXQgZm9yIGl0IHRvIHNwaW4gdXAgKi8KKyAgR1NUX0RFQlVHICgid2FpdGluZyIpOworICBnX2NvbmRfd2FpdCAodGFza19jb25kLCB0YXNrX2xvY2spOworICBHU1RfREVCVUcgKCJkb25lIHdhaXRpbmciKTsKKyAgZ19tdXRleF91bmxvY2sgKHRhc2tfbG9jayk7CisKKyAgLyogY2Fubm90IHNldCBtdXRleCBub3cgKi8KKyAgQVNTRVJUX1dBUk5JTkcgKGdzdF90YXNrX3NldF9sb2NrICh0LCAmdGFza19tdXRleCkpOworCisgIEdTVF9ERUJVRyAoImpvaW5pbmciKTsKKyAgcmV0ID0gZ3N0X3Rhc2tfam9pbiAodCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7CisKKyAgZ3N0X3Rhc2tfY2xlYW51cF9hbGwgKCk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAodCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfbG9jaykKK3sKKyAgR3N0VGFzayAqdDsKKyAgZ2Jvb2xlYW4gcmV0OworCisgIHQgPSBnc3RfdGFza19jcmVhdGUgKHRhc2tfZnVuYywgTlVMTCk7CisgIGZhaWxfaWYgKHQgPT0gTlVMTCk7CisKKyAgZ3N0X3Rhc2tfc2V0X2xvY2sgKHQsICZ0YXNrX211dGV4KTsKKworICBHU1RfREVCVUcgKCJwYXVzZSIpOworICByZXQgPSBnc3RfdGFza19wYXVzZSAodCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7CisKKyAgZ191c2xlZXAgKDEgKiBHX1VTRUNfUEVSX1NFQyAvIDIpOworCisgIEdTVF9ERUJVRyAoImpvaW5pbmciKTsKKyAgcmV0ID0gZ3N0X3Rhc2tfam9pbiAodCk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7CisKKyAgZ191c2xlZXAgKDEgKiBHX1VTRUNfUEVSX1NFQyAvIDIpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHQpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X25vX2xvY2spCit7CisgIEdzdFRhc2sgKnQ7CisgIGdib29sZWFuIHJldDsKKworICB0ID0gZ3N0X3Rhc2tfY3JlYXRlICh0YXNrX2Z1bmMsIE5VTEwpOworICBmYWlsX2lmICh0ID09IE5VTEwpOworCisgIC8qIHN0b3Agc2hvdWxkIGJlIHBvc3NpYmxlIHdpdGhvdXQgbG9jayAqLworICBnc3RfdGFza19zdG9wICh0KTsKKworICAvKiBwYXVzZSBzaG91bGQgZ2l2ZSBhIHdhcm5pbmcgKi8KKyAgQVNTRVJUX1dBUk5JTkcgKHJldCA9IGdzdF90YXNrX3BhdXNlICh0KSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOworCisgIC8qIHN0YXJ0IHNob3VsZCBnaXZlIGEgd2FybmluZyAqLworICBBU1NFUlRfV0FSTklORyAocmV0ID0gZ3N0X3Rhc2tfc3RhcnQgKHQpKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7CisKKyAgLyogc3RvcCBzaG91bGQgYmUgcG9zc2libGUgd2l0aG91dCBsb2NrICovCisgIGdzdF90YXNrX3N0b3AgKHQpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHQpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2NyZWF0ZSkKK3sKKyAgR3N0VGFzayAqdDsKKworICB0ID0gZ3N0X3Rhc2tfY3JlYXRlICh0YXNrX2Z1bmMsIE5VTEwpOworICBmYWlsX2lmICh0ID09IE5VTEwpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHQpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKworc3RhdGljIFN1aXRlICoKK2dzdF90YXNrX3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdFRhc2siKTsKKyAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgidGFzayB0ZXN0cyIpOworCisgIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfY3JlYXRlKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X25vX2xvY2spOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbG9jayk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9sb2NrX3N0YXJ0KTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2pvaW4pOworCisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoZ3N0X3Rhc2spOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdHVyaS5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdHVyaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNmMyYzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9nc3QvZ3N0dXJpLmMKQEAgLTAsMCArMSwxMjYgQEAKKy8qIEdTdHJlYW1lciB1bml0IHRlc3RzIGZvciBHc3RVUkkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3Byb3RvY29sX2Nhc2UpCit7CisgIEdzdEVsZW1lbnQgKmVsZW1lbnQ7CisKKyAgZWxlbWVudCA9IGdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkgKEdTVF9VUklfU1JDLCAiZmlsZTovLy9mb28vYmFyIiwgTlVMTCk7CisKKyAgLyogbm8gZWxlbWVudD8gcHJvYmFibHkgbm8gcmVnaXN0cnksIGJhaWwgb3V0ICovCisgIGlmIChlbGVtZW50ID09IE5VTEwpCisgICAgcmV0dXJuOworCisgIGdzdF9vYmplY3RfdW5yZWYgKGVsZW1lbnQpOworICBlbGVtZW50ID0gZ3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaSAoR1NUX1VSSV9TUkMsICJGSUxFOi8vL2Zvby9iYXIiLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGVsZW1lbnQgIT0gTlVMTCwKKyAgICAgICJHb3Qgc291cmNlIGZvciAnZmlsZTovLycgVVJJIGJ1dCBub3QgZm9yICdGSUxFOi8vJyBVUkkiKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoZWxlbWVudCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfdXJpX2dldF9sb2NhdGlvbikKK3sKKyAgZ2NoYXIgKmw7CisKKyAgLyogVVJJIHdpdGggbm8gbG9jYXRpb24gc2hvdWxkIHJldHVybiBlbXB0eSBzdHJpbmcgKi8KKyAgbCA9IGdzdF91cmlfZ2V0X2xvY2F0aW9uICgiZHZkOi8vIik7CisgIGZhaWxfdW5sZXNzIChsICE9IE5VTEwpOworICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChsLCAiIik7CisgIGdfZnJlZSAobCk7CisKKyAgLyogVVJJIHdpdGggaG9zdG5hbWUgKi8KKyAgbCA9IGdzdF91cmlfZ2V0X2xvY2F0aW9uICgic21iOi8vc3VwZXJjb21wdXRlci9wYXRoL3RvL2ZpbGUiKTsKKyAgZmFpbF91bmxlc3MgKGwgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGwsICJzdXBlcmNvbXB1dGVyL3BhdGgvdG8vZmlsZSIpOworICBnX2ZyZWUgKGwpOworCisgIC8qIFVSSSAqLworICBsID0gZ3N0X3VyaV9nZXRfbG9jYXRpb24gKCJmaWxlOi8vL3BhdGgvdG8vZmlsZSIpOworICBmYWlsX3VubGVzcyAobCAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAobCwgIi9wYXRoL3RvL2ZpbGUiKTsKKyAgZ19mcmVlIChsKTsKKworICAvKiB1bmVzY2FwaW5nICovCisgIGwgPSBnc3RfdXJpX2dldF9sb2NhdGlvbiAoImZpbGU6Ly8vcGF0aC90by9zb21lJTIwZmlsZSIpOworICBmYWlsX3VubGVzcyAobCAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAobCwgIi9wYXRoL3RvL3NvbWUgZmlsZSIpOworICBnX2ZyZWUgKGwpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKyNpZmRlZiBHX09TX1dJTjMyCisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3dpbjMyX3VyaSkKK3sKKyAgZ2NoYXIgKnVyaSwgKmw7CisKKyAgdXJpID0gZ19zdHJkdXAgKCJmaWxlOi8vL2M6L215JTIwbXVzaWMvZm9vLm9nZyIpOworICBsID0gZ3N0X3VyaV9nZXRfbG9jYXRpb24gKHVyaSk7CisgIGZhaWxfdW5sZXNzIChsICE9IE5VTEwpOworICAvKiBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIHdpbGwgc2NyZXcgdXAgaGVyZSBpbiB0aGUgZmFpbHVyZSBjYXNlCisgICAqIGJlY2F1c2UgdGhlIHN0cmluZyBjb25zdGFudCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBwcmludGYgZm9ybWF0CisgICAqIG1lc3NhZ2Ugc3RyaW5nIGFuZCBjb250YWlucyBhICclJywgdGhhdCdzIHdoeSB3ZSB1c2UgZmFpbF91bmxlc3MgaGVyZSAqLworICBmYWlsX3VubGVzcyAoZ19zdHJfZXF1YWwgKGwsICJjOi9teSBtdXNpYy9mb28ub2dnIiksCisgICAgICAid3JvbmcgbG9jYXRpb24gJyVzJyByZXR1cm5lZCBmb3IgVVJJICclcyciLCBsLCB1cmkpOworICBnX2ZyZWUgKGwpOworICBnX2ZyZWUgKHVyaSk7CisKKyAgLyogbWFrZSBzdXJlIHRoZSBvdGhlciB2YXJpYW50IHdpdGggdHdvIHNsYXNoZXMgYmVmb3JlIHRoZSBDOiAod2hpY2ggd2FzCisgICAqIG5lZWRlZCBiZWZvcmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBfZ2V0X2xvY2F0aW9uKCkpIHN0aWxsIHdvcmtzICovCisgIHVyaSA9IGdfc3RyZHVwICgiZmlsZTovL2M6L215JTIwbXVzaWMvZm9vLm9nZyIpOworICBsID0gZ3N0X3VyaV9nZXRfbG9jYXRpb24gKHVyaSk7CisgIGZhaWxfdW5sZXNzIChsICE9IE5VTEwpOworICAvKiBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIHdpbGwgc2NyZXcgdXAgaGVyZSBpbiB0aGUgZmFpbHVyZSBjYXNlCisgICAqIGJlY2F1c2UgdGhlIHN0cmluZyBjb25zdGFudCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBwcmludGYgZm9ybWF0CisgICAqIG1lc3NhZ2Ugc3RyaW5nIGFuZCBjb250YWlucyBhICclJywgdGhhdCdzIHdoeSB3ZSB1c2UgZmFpbF91bmxlc3MgaGVyZSAqLworICBmYWlsX3VubGVzcyAoZ19zdHJfZXF1YWwgKGwsICJjOi9teSBtdXNpYy9mb28ub2dnIiksCisgICAgICAid3JvbmcgbG9jYXRpb24gJyVzJyByZXR1cm5lZCBmb3IgVVJJICclcyciLCBsLCB1cmkpOworICBnX2ZyZWUgKGwpOworICBnX2ZyZWUgKHVyaSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworI2VuZGlmIC8qIEdfT1NfV0lOMzIgKi8KKworc3RhdGljIFN1aXRlICoKK2dzdF91cmlfc3VpdGUgKHZvaWQpCit7CisgIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0VVJJIik7CisgIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoInVyaSIpOworCisgIHRjYXNlX3NldF90aW1lb3V0ICh0Y19jaGFpbiwgMjApOworCisgIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcHJvdG9jb2xfY2FzZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF91cmlfZ2V0X2xvY2F0aW9uKTsKKyNpZmRlZiBHX09TX1dJTjMyCisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF93aW4zMl91cmkpOworI2VuZGlmCisKKyAgcmV0dXJuIHM7Cit9CisKK0dTVF9DSEVDS19NQUlOIChnc3RfdXJpKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ5OGMwNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jCkBAIC0wLDAgKzEsMTExNiBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+CisgKiBDb3B5cmlnaHQgKEMpIDwyMDA2PiBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgorICoKKyAqIGdzdHV0aWxzLmM6IFVuaXQgdGVzdCBmb3IgZnVuY3Rpb25zIGluIGdzdHV0aWxzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisKKyNkZWZpbmUgU1BFQ0lBTF9QT0lOVEVSKHgpICgodm9pZCopKDE5MjgzODQ3Kyh4KSkpCisKK3N0YXRpYyBpbnQgbl9kYXRhX3Byb2JlcyA9IDA7CitzdGF0aWMgaW50IG5fYnVmZmVyX3Byb2JlcyA9IDA7CitzdGF0aWMgaW50IG5fZXZlbnRfcHJvYmVzID0gMDsKKworc3RhdGljIEdzdFByb2JlUmV0dXJuCitwcm9iZV9kb19ub3RoaW5nIChHc3RQYWQgKiBwYWQsIEdzdFByb2JlVHlwZSB0eXBlLCBncG9pbnRlciB0eXBlX2RhdGEsCisgICAgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgR3N0TWluaU9iamVjdCAqb2JqID0gdHlwZV9kYXRhOworICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJpcyBidWZmZXI6JWQiLCBHU1RfSVNfQlVGRkVSIChvYmopKTsKKyAgcmV0dXJuIEdTVF9QUk9CRV9PSzsKK30KKworc3RhdGljIEdzdFByb2JlUmV0dXJuCitkYXRhX3Byb2JlIChHc3RQYWQgKiBwYWQsIEdzdFByb2JlVHlwZSB0eXBlLCBncG9pbnRlciB0eXBlX2RhdGEsIGdwb2ludGVyIGRhdGEpCit7CisgIEdzdE1pbmlPYmplY3QgKm9iaiA9IHR5cGVfZGF0YTsKKyAgbl9kYXRhX3Byb2JlcysrOworICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJkYXRhIHByb2JlICVkIiwgbl9kYXRhX3Byb2Jlcyk7CisgIGdfYXNzZXJ0IChHU1RfSVNfQlVGRkVSIChvYmopIHx8IEdTVF9JU19FVkVOVCAob2JqKSk7CisgIGdfYXNzZXJ0IChkYXRhID09IFNQRUNJQUxfUE9JTlRFUiAoMCkpOworICByZXR1cm4gR1NUX1BST0JFX09LOworfQorCitzdGF0aWMgR3N0UHJvYmVSZXR1cm4KK2J1ZmZlcl9wcm9iZSAoR3N0UGFkICogcGFkLCBHc3RQcm9iZVR5cGUgdHlwZSwgZ3BvaW50ZXIgdHlwZV9kYXRhLAorICAgIGdwb2ludGVyIGRhdGEpCit7CisgIEdzdEJ1ZmZlciAqb2JqID0gdHlwZV9kYXRhOworICBuX2J1ZmZlcl9wcm9iZXMrKzsKKyAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiYnVmZmVyIHByb2JlICVkIiwgbl9idWZmZXJfcHJvYmVzKTsKKyAgZ19hc3NlcnQgKEdTVF9JU19CVUZGRVIgKG9iaikpOworICBnX2Fzc2VydCAoZGF0YSA9PSBTUEVDSUFMX1BPSU5URVIgKDEpKTsKKyAgcmV0dXJuIEdTVF9QUk9CRV9PSzsKK30KKworc3RhdGljIEdzdFByb2JlUmV0dXJuCitldmVudF9wcm9iZSAoR3N0UGFkICogcGFkLCBHc3RQcm9iZVR5cGUgdHlwZSwgZ3BvaW50ZXIgdHlwZV9kYXRhLCBncG9pbnRlciBkYXRhKQoreworICBHc3RFdmVudCAqb2JqID0gdHlwZV9kYXRhOworICBuX2V2ZW50X3Byb2JlcysrOworICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJldmVudCBwcm9iZSAlZCBbJXNdIiwKKyAgICAgIG5fZXZlbnRfcHJvYmVzLCBHU1RfRVZFTlRfVFlQRV9OQU1FIChvYmopKTsKKyAgZ19hc3NlcnQgKEdTVF9JU19FVkVOVCAob2JqKSk7CisgIGdfYXNzZXJ0IChkYXRhID09IFNQRUNJQUxfUE9JTlRFUiAoMikpOworICByZXR1cm4gR1NUX1BST0JFX09LOworfQorCitHU1RfU1RBUlRfVEVTVCAodGVzdF9idWZmZXJfcHJvYmVfbl90aW1lcykKK3sKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpmYWtlc3JjLCAqZmFrZXNpbms7CisgIEdzdEJ1cyAqYnVzOworICBHc3RNZXNzYWdlICptZXNzYWdlOworICBHc3RQYWQgKnBhZDsKKworICBwaXBlbGluZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInBpcGVsaW5lIiwgTlVMTCk7CisgIGZha2VzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCk7CisgIGZha2VzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKKworICBnX29iamVjdF9zZXQgKGZha2VzcmMsICJudW0tYnVmZmVycyIsIChpbnQpIDEwLCBOVUxMKTsKKworICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIGZha2VzcmMsIGZha2VzaW5rLCBOVUxMKTsKKyAgZ3N0X2VsZW1lbnRfbGluayAoZmFrZXNyYywgZmFrZXNpbmspOworCisgIHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChmYWtlc2luaywgInNpbmsiKTsKKworICAvKiBhZGQgdGhlIHByb2JlcyB3ZSBuZWVkIGZvciB0aGUgdGVzdCAqLworICBnc3RfcGFkX2FkZF9wcm9iZSAocGFkLCBHU1RfUFJPQkVfVFlQRV9EQVRBLCBkYXRhX3Byb2JlLCBTUEVDSUFMX1BPSU5URVIgKDApLAorICAgICAgTlVMTCk7CisgIGdzdF9wYWRfYWRkX3Byb2JlIChwYWQsIEdTVF9QUk9CRV9UWVBFX0JVRkZFUiwgYnVmZmVyX3Byb2JlLAorICAgICAgU1BFQ0lBTF9QT0lOVEVSICgxKSwgTlVMTCk7CisgIGdzdF9wYWRfYWRkX3Byb2JlIChwYWQsIEdTVF9QUk9CRV9UWVBFX0VWRU5ULCBldmVudF9wcm9iZSwKKyAgICAgIFNQRUNJQUxfUE9JTlRFUiAoMiksIE5VTEwpOworCisgIC8qIGFkZCBzb21lIHN0cmluZyBwcm9iZXMganVzdCB0byB0ZXN0IHRoYXQgdGhlIGRhdGEgaXMgZnJlZSdkCisgICAqIHByb3Blcmx5IGFzIGl0IHNob3VsZCBiZSAqLworICBnc3RfcGFkX2FkZF9wcm9iZSAocGFkLCBHU1RfUFJPQkVfVFlQRV9EQVRBLCBwcm9iZV9kb19ub3RoaW5nLAorICAgICAgZ19zdHJkdXAgKCJkYXRhIHByb2JlIHN0cmluZyIpLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSk7CisgIGdzdF9wYWRfYWRkX3Byb2JlIChwYWQsIEdTVF9QUk9CRV9UWVBFX0JVRkZFUiwgcHJvYmVfZG9fbm90aGluZywKKyAgICAgIGdfc3RyZHVwICgiYnVmZmVyIHByb2JlIHN0cmluZyIpLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSk7CisgIGdzdF9wYWRfYWRkX3Byb2JlIChwYWQsIEdTVF9QUk9CRV9UWVBFX0VWRU5ULCBwcm9iZV9kb19ub3RoaW5nLAorICAgICAgZ19zdHJkdXAgKCJldmVudCBwcm9iZSBzdHJpbmciKSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOworCisgIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGVsaW5lKTsKKyAgbWVzc2FnZSA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9FT1MsIC0xKTsKKyAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOworICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOworCisgIGdfYXNzZXJ0IChuX2J1ZmZlcl9wcm9iZXMgPT0gMTApOyAgICAgLyogb25lIGZvciBldmVyeSBidWZmZXIgKi8KKyAgZ19hc3NlcnQgKG5fZXZlbnRfcHJvYmVzID09IDMpOyAgICAgICAvKiBuZXcgc2VnbWVudCwgbGF0ZW5jeSBhbmQgZW9zICovCisgIGdfYXNzZXJ0IChuX2RhdGFfcHJvYmVzID09IDEzKTsgICAgICAgLyogZHVoICovCisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOworICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7CisKKyAgLyogbWFrZSBzdXJlIG5vdGhpbmcgd2FzIHNlbnQgaW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlIHdoZW4gc2h1dHRpbmcgZG93biAqLworICBnX2Fzc2VydCAobl9idWZmZXJfcHJvYmVzID09IDEwKTsgICAgIC8qIG9uZSBmb3IgZXZlcnkgYnVmZmVyICovCisgIGdfYXNzZXJ0IChuX2V2ZW50X3Byb2JlcyA9PSAzKTsgICAgICAgLyogbmV3IHNlZ21lbnQsIGxhdGVuY3kgYW5kIGVvcyAqLworICBnX2Fzc2VydCAobl9kYXRhX3Byb2JlcyA9PSAxMyk7ICAgICAgIC8qIGR1aCAqLworfSBHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBpbnQgbl9kYXRhX3Byb2Jlc19vbmNlID0gMDsKK3N0YXRpYyBpbnQgbl9idWZmZXJfcHJvYmVzX29uY2UgPSAwOworc3RhdGljIGludCBuX2V2ZW50X3Byb2Jlc19vbmNlID0gMDsKKworc3RhdGljIEdzdFByb2JlUmV0dXJuCitkYXRhX3Byb2JlX29uY2UgKEdzdFBhZCAqIHBhZCwgR3N0UHJvYmVUeXBlIHR5cGUsIEdzdE1pbmlPYmplY3QgKiBvYmosCisgICAgZ3VpbnQgKiBkYXRhKQoreworICBuX2RhdGFfcHJvYmVzX29uY2UrKzsKKyAgZ19hc3NlcnQgKEdTVF9JU19CVUZGRVIgKG9iaikgfHwgR1NUX0lTX0VWRU5UIChvYmopKTsKKworICBnc3RfcGFkX3JlbW92ZV9wcm9iZSAocGFkLCAqZGF0YSk7CisKKyAgcmV0dXJuIEdTVF9QUk9CRV9PSzsKK30KKworc3RhdGljIEdzdFByb2JlUmV0dXJuCitidWZmZXJfcHJvYmVfb25jZSAoR3N0UGFkICogcGFkLCBHc3RQcm9iZVR5cGUgdHlwZSwgR3N0QnVmZmVyICogb2JqLAorICAgIGd1aW50ICogZGF0YSkKK3sKKyAgbl9idWZmZXJfcHJvYmVzX29uY2UrKzsKKyAgZ19hc3NlcnQgKEdTVF9JU19CVUZGRVIgKG9iaikpOworCisgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChwYWQsICpkYXRhKTsKKworICByZXR1cm4gR1NUX1BST0JFX09LOworfQorCitzdGF0aWMgR3N0UHJvYmVSZXR1cm4KK2V2ZW50X3Byb2JlX29uY2UgKEdzdFBhZCAqIHBhZCwgR3N0UHJvYmVUeXBlIHR5cGUsIEdzdEV2ZW50ICogb2JqLCBndWludCAqIGRhdGEpCit7CisgIG5fZXZlbnRfcHJvYmVzX29uY2UrKzsKKyAgZ19hc3NlcnQgKEdTVF9JU19FVkVOVCAob2JqKSk7CisKKyAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKHBhZCwgKmRhdGEpOworCisgIHJldHVybiBHU1RfUFJPQkVfT0s7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2J1ZmZlcl9wcm9iZV9vbmNlKQoreworICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKmZha2VzcmMsICpmYWtlc2luazsKKyAgR3N0QnVzICpidXM7CisgIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7CisgIEdzdFBhZCAqcGFkOworICBndWludCBpZDEsIGlkMiwgaWQzOworCisgIHBpcGVsaW5lID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicGlwZWxpbmUiLCBOVUxMKTsKKyAgZmFrZXNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKKyAgZmFrZXNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOworCisgIGdfb2JqZWN0X3NldCAoZmFrZXNyYywgIm51bS1idWZmZXJzIiwgKGludCkgMTAsIE5VTEwpOworCisgIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgZmFrZXNyYywgZmFrZXNpbmssIE5VTEwpOworICBnc3RfZWxlbWVudF9saW5rIChmYWtlc3JjLCBmYWtlc2luayk7CisKKyAgcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGZha2VzaW5rLCAic2luayIpOworICBpZDEgPQorICAgICAgZ3N0X3BhZF9hZGRfcHJvYmUgKHBhZCwgR1NUX1BST0JFX1RZUEVfREFUQSwKKyAgICAgIChHc3RQYWRQcm9iZUNhbGxiYWNrKSBkYXRhX3Byb2JlX29uY2UsICZpZDEsIE5VTEwpOworICBpZDIgPQorICAgICAgZ3N0X3BhZF9hZGRfcHJvYmUgKHBhZCwgR1NUX1BST0JFX1RZUEVfQlVGRkVSLAorICAgICAgKEdzdFBhZFByb2JlQ2FsbGJhY2spIGJ1ZmZlcl9wcm9iZV9vbmNlLCAmaWQyLCBOVUxMKTsKKyAgaWQzID0KKyAgICAgIGdzdF9wYWRfYWRkX3Byb2JlIChwYWQsIEdTVF9QUk9CRV9UWVBFX0VWRU5ULAorICAgICAgKEdzdFBhZFByb2JlQ2FsbGJhY2spIGV2ZW50X3Byb2JlX29uY2UsICZpZDMsIE5VTEwpOworICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOworCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKKworICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChwaXBlbGluZSk7CisgIG1lc3NhZ2UgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfRU9TLCAtMSk7CisgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKKworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKKworICBnX2Fzc2VydCAobl9idWZmZXJfcHJvYmVzX29uY2UgPT0gMSk7IC8qIGNhbiB3ZSBoaXQgaXQgYW5kIHF1aXQ/ICovCisgIGdfYXNzZXJ0IChuX2V2ZW50X3Byb2Jlc19vbmNlID09IDEpOyAgLyogaSBzYWlkLCBjYW4gd2UgaGl0IGl0IGFuZCBxdWl0PyAqLworICBnX2Fzc2VydCAobl9kYXRhX3Byb2Jlc19vbmNlID09IDEpOyAgIC8qIGxldCdzIGhpdCBpdCBhbmQgcXVpdCEhISAqLworfSBHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X21hdGhfc2NhbGUpCit7CisgIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKDEsIDEsIDEpICE9IDEpOworCisgIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKDEwLCAxMCwgMSkgIT0gMTAwKTsKKyAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAoMTAsIDEwLCAyKSAhPSA1MCk7CisKKyAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAoMCwgMTAsIDIpICE9IDApOworICBmYWlsX2lmIChnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50ICgwLCAwLCAyKSAhPSAwKTsKKworICBmYWlsX2lmIChnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChHX01BWFVJTlQzMiwgNSwgMSkgIT0gR19NQVhVSU5UMzIgKiA1TEwpOworICBmYWlsX2lmIChnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChHX01BWFVJTlQzMiwgMTAsIDIpICE9IEdfTUFYVUlOVDMyICogNUxMKTsKKworICBmYWlsX2lmIChnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChHX01BWFVJTlQzMiwgMSwgNSkgIT0gR19NQVhVSU5UMzIgLyA1TEwpOworICBmYWlsX2lmIChnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChHX01BWFVJTlQzMiwgMiwgMTApICE9IEdfTUFYVUlOVDMyIC8gNUxMKTsKKworICAvKiBub3QgcXVpdGUgb3ZlcmZsb3cgKi8KKyAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAoR19NQVhVSU5UNjQgLSAxLCAxMCwKKyAgICAgICAgICAxMCkgIT0gR19NQVhVSU5UNjQgLSAxKTsKKyAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAoR19NQVhVSU5UNjQgLSAxLCBHX01BWElOVDMyLAorICAgICAgICAgIEdfTUFYSU5UMzIpICE9IEdfTUFYVUlOVDY0IC0gMSk7CisgIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKEdfTUFYVUlOVDY0IC0gMTAwLCBHX01BWElOVDMyLAorICAgICAgICAgIEdfTUFYSU5UMzIpICE9IEdfTUFYVUlOVDY0IC0gMTAwKTsKKworICAvKiBvdmVyZmxvdyAqLworICBmYWlsX2lmIChnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChHX01BWFVJTlQ2NCAtIDEsIDEwLCAxKSAhPSBHX01BWFVJTlQ2NCk7CisgIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKEdfTUFYVUlOVDY0IC0gMSwgR19NQVhJTlQzMiwKKyAgICAgICAgICAxKSAhPSBHX01BWFVJTlQ2NCk7CisKK30gR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9tYXRoX3NjYWxlX3JvdW5kKQoreworICBmYWlsX2lmIChnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kICgyLCAxLCAyKSAhPSAxKTsKKyAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCAoMywgMSwgMikgIT0gMik7CisgIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQgKDQsIDEsIDIpICE9IDIpOworCisgIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQgKDIwMCwgMTAwLCAyMDAwMCkgIT0gMSk7CisgIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQgKDI5OSwgMTAwLCAyMDAwMCkgIT0gMSk7CisgIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQgKDMwMCwgMTAwLCAyMDAwMCkgIT0gMik7CisgIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQgKDMwMSwgMTAwLCAyMDAwMCkgIT0gMik7CisgIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQgKDQwMCwgMTAwLCAyMDAwMCkgIT0gMik7Cit9IEdTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfbWF0aF9zY2FsZV9jZWlsKQoreworICBmYWlsX2lmIChnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWwgKDIsIDEsIDIpICE9IDEpOworICBmYWlsX2lmIChnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWwgKDMsIDEsIDIpICE9IDIpOworICBmYWlsX2lmIChnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWwgKDQsIDEsIDIpICE9IDIpOworCisgIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbCAoMjAwLCAxMDAsIDIwMDAwKSAhPSAxKTsKKyAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9jZWlsICgyOTksIDEwMCwgMjAwMDApICE9IDIpOworICBmYWlsX2lmIChnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWwgKDMwMCwgMTAwLCAyMDAwMCkgIT0gMik7CisgIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbCAoMzAxLCAxMDAsIDIwMDAwKSAhPSAyKTsKKyAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9jZWlsICg0MDAsIDEwMCwgMjAwMDApICE9IDIpOworfSBHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X21hdGhfc2NhbGVfdWludDY0KQoreworICBmYWlsX2lmIChnc3RfdXRpbF91aW50NjRfc2NhbGUgKDEsIDEsIDEpICE9IDEpOworCisgIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoMTAsIDEwLCAxKSAhPSAxMDApOworICBmYWlsX2lmIChnc3RfdXRpbF91aW50NjRfc2NhbGUgKDEwLCAxMCwgMikgIT0gNTApOworCisgIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoMCwgMTAsIDIpICE9IDApOworICBmYWlsX2lmIChnc3RfdXRpbF91aW50NjRfc2NhbGUgKDAsIDAsIDIpICE9IDApOworCisgIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoR19NQVhVSU5UMzIsIDUsIDEpICE9IEdfTUFYVUlOVDMyICogNUxMKTsKKyAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlIChHX01BWFVJTlQzMiwgMTAsIDIpICE9IEdfTUFYVUlOVDMyICogNUxMKTsKKworICBmYWlsX2lmIChnc3RfdXRpbF91aW50NjRfc2NhbGUgKEdfTUFYVUlOVDMyLCAxLCA1KSAhPSBHX01BWFVJTlQzMiAvIDVMTCk7CisgIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoR19NQVhVSU5UMzIsIDIsIDEwKSAhPSBHX01BWFVJTlQzMiAvIDVMTCk7CisKKyAgLyogbm90IHF1aXRlIG92ZXJmbG93ICovCisgIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoR19NQVhVSU5UNjQgLSAxLCAxMCwgMTApICE9IEdfTUFYVUlOVDY0IC0gMSk7CisgIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoR19NQVhVSU5UNjQgLSAxLCBHX01BWFVJTlQzMiwKKyAgICAgICAgICBHX01BWFVJTlQzMikgIT0gR19NQVhVSU5UNjQgLSAxKTsKKyAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlIChHX01BWFVJTlQ2NCAtIDEwMCwgR19NQVhVSU5UMzIsCisgICAgICAgICAgR19NQVhVSU5UMzIpICE9IEdfTUFYVUlOVDY0IC0gMTAwKTsKKworICBmYWlsX2lmIChnc3RfdXRpbF91aW50NjRfc2NhbGUgKEdfTUFYVUlOVDY0IC0gMSwgMTAsIDEwKSAhPSBHX01BWFVJTlQ2NCAtIDEpOworICBmYWlsX2lmIChnc3RfdXRpbF91aW50NjRfc2NhbGUgKEdfTUFYVUlOVDY0IC0gMSwgR19NQVhVSU5UNjQsCisgICAgICAgICAgR19NQVhVSU5UNjQpICE9IEdfTUFYVUlOVDY0IC0gMSk7CisgIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoR19NQVhVSU5UNjQgLSAxMDAsIEdfTUFYVUlOVDY0LAorICAgICAgICAgIEdfTUFYVUlOVDY0KSAhPSBHX01BWFVJTlQ2NCAtIDEwMCk7CisKKyAgLyogb3ZlcmZsb3cgKi8KKyAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlIChHX01BWFVJTlQ2NCAtIDEsIDEwLCAxKSAhPSBHX01BWFVJTlQ2NCk7CisgIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoR19NQVhVSU5UNjQgLSAxLCBHX01BWFVJTlQ2NCwKKyAgICAgICAgICAxKSAhPSBHX01BWFVJTlQ2NCk7CisKK30gR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9tYXRoX3NjYWxlX3JhbmRvbSkKK3sKKyAgZ3VpbnQ2NCB2YWwsIG51bSwgZGVub20sIHJlczsKKyAgR1JhbmQgKnJhbmQ7CisgIGdpbnQgaTsKKworICByYW5kID0gZ19yYW5kX25ldyAoKTsKKworICBpID0gMTAwMDAwOworICB3aGlsZSAoaS0tKSB7CisgICAgZ3VpbnQ2NCBjaGVjaywgZGlmZjsKKworICAgIHZhbCA9ICgoZ3VpbnQ2NCkgZ19yYW5kX2ludCAocmFuZCkpIDw8IDMyIHwgZ19yYW5kX2ludCAocmFuZCk7CisgICAgbnVtID0gKChndWludDY0KSBnX3JhbmRfaW50IChyYW5kKSkgPDwgMzIgfCBnX3JhbmRfaW50IChyYW5kKTsKKyAgICBkZW5vbSA9ICgoZ3VpbnQ2NCkgZ19yYW5kX2ludCAocmFuZCkpIDw8IDMyIHwgZ19yYW5kX2ludCAocmFuZCk7CisKKyAgICByZXMgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHZhbCwgbnVtLCBkZW5vbSk7CisgICAgY2hlY2sgPSBnc3RfZ2RvdWJsZV90b19ndWludDY0IChnc3RfZ3VpbnQ2NF90b19nZG91YmxlICh2YWwpICoKKyAgICAgICAgZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSAobnVtKSAvIGdzdF9ndWludDY0X3RvX2dkb3VibGUgKGRlbm9tKSk7CisKKyAgICBpZiAocmVzIDwgR19NQVhVSU5UNjQgJiYgY2hlY2sgPCBHX01BWFVJTlQ2NCkgeworICAgICAgaWYgKHJlcyA+IGNoZWNrKQorICAgICAgICBkaWZmID0gcmVzIC0gY2hlY2s7CisgICAgICBlbHNlCisgICAgICAgIGRpZmYgPSBjaGVjayAtIHJlczsKKworICAgICAgLyogc29tZSBhcmJpdHJhcnkgdmFsdWUsIHJlYWxseS4uIHNvbWVvbmUgZG8gdGhlIHByb3BlciBtYXRoIHRvIGdldAorICAgICAgICogdGhlIHVwcGVyIGJvdW5kICovCisgICAgICBpZiAoZGlmZiA+IDIwMDAwKQorICAgICAgICBmYWlsX2lmIChkaWZmID4gMjAwMDApOworICAgIH0KKyAgfQorICBnX3JhbmRfZnJlZSAocmFuZCk7CisKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9ndWludDY0X3RvX2dkb3VibGUpCit7CisgIGd1aW50NjQgZnJvbVtdID0geyAwLCAxLCAxMDAsIDEwMDAwLCAoZ3VpbnQ2NCkgKDEpIDw8IDYzLAorICAgICgoZ3VpbnQ2NCkgKDEpIDw8IDYzKSArIDEsCisgICAgKChndWludDY0KSAoMSkgPDwgNjMpICsgKEdfR0lOVDY0X0NPTlNUQU5UICgxKSA8PCA2MikKKyAgfTsKKyAgZ2RvdWJsZSB0b1tdID0geyAwLiwgMS4sIDEwMC4sIDEwMDAwLiwgOTIyMzM3MjAzNjg1NDc3NTgwOC4sCisgICAgOTIyMzM3MjAzNjg1NDc3NTgwOS4sIDEzODM1MDU4MDU1MjgyMTYzNzEyLgorICB9OworICBnZG91YmxlIHRvbGVyYW5jZVtdID0geyAwLiwgMC4sIDAuLCAwLiwgMC4sIDEuLCAxLiB9OworICBnaW50IGk7CisgIGdkb3VibGUgcmVzdWx0OworICBnZG91YmxlIGRlbHRhOworCisgIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKGZyb20pOyArK2kpIHsKKyAgICByZXN1bHQgPSBnc3RfdXRpbF9ndWludDY0X3RvX2dkb3VibGUgKGZyb21baV0pOworICAgIGRlbHRhID0gQUJTICh0b1tpXSAtIHJlc3VsdCk7CisgICAgZmFpbF91bmxlc3MgKGRlbHRhIDw9IHRvbGVyYW5jZVtpXSwKKyAgICAgICAgIkNvdWxkIG5vdCBjb252ZXJ0ICVkOiAlIiBHX0dVSU5UNjRfRk9STUFUCisgICAgICAgICIgLT4gJWYsIGdvdCAlZiBpbnN0ZWFkLCBkZWx0YSBvZiAlZSB3aXRoIHRvbGVyYW5jZSBvZiAlZSIsCisgICAgICAgIGksIGZyb21baV0sIHRvW2ldLCByZXN1bHQsIGRlbHRhLCB0b2xlcmFuY2VbaV0pOworICB9Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfZ2RvdWJsZV90b19ndWludDY0KQoreworICBnZG91YmxlIGZyb21bXSA9IHsgMC4sIDEuLCAxMDAuLCAxMDAwMC4sIDkyMjMzNzIwMzY4NTQ3NzU4MDguLAorICAgIDkyMjMzNzIwMzY4NTQ3NzU4MDkuLCAxMzgzNTA1ODA1NTI4MjE2MzcxMi4KKyAgfTsKKyAgZ3VpbnQ2NCB0b1tdID0geyAwLCAxLCAxMDAsIDEwMDAwLCAoZ3VpbnQ2NCkgKDEpIDw8IDYzLAorICAgICgoZ3VpbnQ2NCkgKDEpIDw8IDYzKSArIDEsCisgICAgKChndWludDY0KSAoMSkgPDwgNjMpICsgKEdfR0lOVDY0X0NPTlNUQU5UICgxKSA8PCA2MikKKyAgfTsKKyAgZ3VpbnQ2NCB0b2xlcmFuY2VbXSA9IHsgMCwgMCwgMCwgMCwgMCwgMSwgMSB9OworICBnaW50IGk7CisgIGdkb3VibGUgcmVzdWx0OworICBndWludDY0IGRlbHRhOworCisgIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKGZyb20pOyArK2kpIHsKKyAgICByZXN1bHQgPSBnc3RfdXRpbF9nZG91YmxlX3RvX2d1aW50NjQgKGZyb21baV0pOworICAgIGRlbHRhID0gQUJTICh0b1tpXSAtIHJlc3VsdCk7CisgICAgZmFpbF91bmxlc3MgKGRlbHRhIDw9IHRvbGVyYW5jZVtpXSwKKyAgICAgICAgIkNvdWxkIG5vdCBjb252ZXJ0ICVmOiAlIiBHX0dVSU5UNjRfRk9STUFUCisgICAgICAgICIgLT4gJWQsIGdvdCAlZCBpbnN0ZWFkLCBkZWx0YSBvZiAlZSB3aXRoIHRvbGVyYW5jZSBvZiAlZSIsCisgICAgICAgIGksIGZyb21baV0sIHRvW2ldLCByZXN1bHQsIGRlbHRhLCB0b2xlcmFuY2VbaV0pOworICB9Cit9CisKK0dTVF9FTkRfVEVTVDsKKworI2lmbmRlZiBHU1RfRElTQUJMRV9QQVJTRQorR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb24pCit7CisgIHN0cnVjdAorICB7CisgICAgY29uc3QgZ2NoYXIgKmJpbl9kZXNjOworICAgIGNvbnN0IGdjaGFyICpwYWRfbmFtZXM7CisgIH0gYmluX3Rlc3RzW10gPSB7CisgICAgeworICAgICJpZGVudGl0eSIsICJpZGVudGl0eTAvc2luayxpZGVudGl0eTAvc3JjIn0sIHsKKyAgICAiaWRlbnRpdHkgISBpZGVudGl0eSAhIGlkZW50aXR5IiwgImlkZW50aXR5MS9zaW5rLGlkZW50aXR5My9zcmMifSwgeworICAgICJpZGVudGl0eSAhIGZha2VzaW5rIiwgImlkZW50aXR5NC9zaW5rIn0sIHsKKyAgICAiZmFrZXNyYyAhIGlkZW50aXR5IiwgImlkZW50aXR5NS9zcmMifSwgeworICAgICJmYWtlc3JjICEgZmFrZXNpbmsiLCAiIn0KKyAgfTsKKyAgZ2ludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKGJpbl90ZXN0cyk7ICsraSkgeworICAgIEdzdEVsZW1lbnQgKmJpbiwgKnBhcmVudDsKKyAgICBHU3RyaW5nICpzOworICAgIEdzdFBhZCAqZ2hvc3RfcGFkLCAqdGFyZ2V0X3BhZDsKKyAgICBHRXJyb3IgKmVyciA9IE5VTEw7CisKKyAgICBiaW4gPSBnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb24gKGJpbl90ZXN0c1tpXS5iaW5fZGVzYywgVFJVRSwgJmVycik7CisgICAgaWYgKGVycikgeworICAgICAgZ19lcnJvciAoIkVSUk9SIGluIGdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbiAoJXMpOiAlcyIsCisgICAgICAgICAgYmluX3Rlc3RzW2ldLmJpbl9kZXNjLCBlcnItPm1lc3NhZ2UpOworICAgIH0KKyAgICBnX2Fzc2VydCAoYmluICE9IE5VTEwpOworCisgICAgcyA9IGdfc3RyaW5nX25ldyAoIiIpOworICAgIGlmICgoZ2hvc3RfcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGJpbiwgInNpbmsiKSkpIHsKKyAgICAgIGdfYXNzZXJ0IChHU1RfSVNfR0hPU1RfUEFEIChnaG9zdF9wYWQpKTsKKworICAgICAgdGFyZ2V0X3BhZCA9IGdzdF9naG9zdF9wYWRfZ2V0X3RhcmdldCAoR1NUX0dIT1NUX1BBRCAoZ2hvc3RfcGFkKSk7CisgICAgICBnX2Fzc2VydCAodGFyZ2V0X3BhZCAhPSBOVUxMKTsKKyAgICAgIGdfYXNzZXJ0IChHU1RfSVNfUEFEICh0YXJnZXRfcGFkKSk7CisKKyAgICAgIHBhcmVudCA9IGdzdF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50ICh0YXJnZXRfcGFkKTsKKyAgICAgIGdfYXNzZXJ0IChwYXJlbnQgIT0gTlVMTCk7CisKKyAgICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHMsICIlcy9zaW5rIiwgR1NUX0VMRU1FTlRfTkFNRSAocGFyZW50KSk7CisKKyAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhcmVudCk7CisgICAgICBnc3Rfb2JqZWN0X3VucmVmICh0YXJnZXRfcGFkKTsKKyAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGdob3N0X3BhZCk7CisgICAgfQorCisgICAgaWYgKChnaG9zdF9wYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoYmluLCAic3JjIikpKSB7CisgICAgICBnX2Fzc2VydCAoR1NUX0lTX0dIT1NUX1BBRCAoZ2hvc3RfcGFkKSk7CisKKyAgICAgIHRhcmdldF9wYWQgPSBnc3RfZ2hvc3RfcGFkX2dldF90YXJnZXQgKEdTVF9HSE9TVF9QQUQgKGdob3N0X3BhZCkpOworICAgICAgZ19hc3NlcnQgKHRhcmdldF9wYWQgIT0gTlVMTCk7CisgICAgICBnX2Fzc2VydCAoR1NUX0lTX1BBRCAodGFyZ2V0X3BhZCkpOworCisgICAgICBwYXJlbnQgPSBnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudCAodGFyZ2V0X3BhZCk7CisgICAgICBnX2Fzc2VydCAocGFyZW50ICE9IE5VTEwpOworCisgICAgICBpZiAocy0+bGVuID4gMCkgeworICAgICAgICBnX3N0cmluZ19hcHBlbmQgKHMsICIsIik7CisgICAgICB9CisKKyAgICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHMsICIlcy9zcmMiLCBHU1RfRUxFTUVOVF9OQU1FIChwYXJlbnQpKTsKKworICAgICAgZ3N0X29iamVjdF91bnJlZiAocGFyZW50KTsKKyAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHRhcmdldF9wYWQpOworICAgICAgZ3N0X29iamVjdF91bnJlZiAoZ2hvc3RfcGFkKTsKKyAgICB9CisKKyAgICBpZiAoc3RyY21wIChzLT5zdHIsIGJpbl90ZXN0c1tpXS5wYWRfbmFtZXMpICE9IDApIHsKKyAgICAgIGdfZXJyb3IgKCJGQUlMRUQ6IGV4cGVjdGVkICclcycsIGdvdCAnJXMnIGZvciBiaW4gJyVzJyIsCisgICAgICAgICAgYmluX3Rlc3RzW2ldLnBhZF9uYW1lcywgcy0+c3RyLCBiaW5fdGVzdHNbaV0uYmluX2Rlc2MpOworICAgIH0KKyAgICBnX3N0cmluZ19mcmVlIChzLCBUUlVFKTsKKworICAgIGdzdF9vYmplY3RfdW5yZWYgKGJpbik7CisgIH0KK30KKworR1NUX0VORF9URVNUOworI2VuZGlmCisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2VsZW1lbnRfZm91bmRfdGFncykKK3sKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpmYWtlc3JjLCAqZmFrZXNpbms7CisgIEdzdFRhZ0xpc3QgKmxpc3Q7CisgIEdzdEJ1cyAqYnVzOworICBHc3RNZXNzYWdlICptZXNzYWdlOworCisgIHBpcGVsaW5lID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicGlwZWxpbmUiLCBOVUxMKTsKKyAgZmFrZXNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKKyAgZmFrZXNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOworICBsaXN0ID0gZ3N0X3RhZ19saXN0X25ldyAoKTsKKworICBnX29iamVjdF9zZXQgKGZha2VzcmMsICJudW0tYnVmZmVycyIsIChpbnQpIDEwLCBOVUxMKTsKKworICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIGZha2VzcmMsIGZha2VzaW5rLCBOVUxMKTsKKyAgZ3N0X2VsZW1lbnRfbGluayAoZmFrZXNyYywgZmFrZXNpbmspOworCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKKworICBnc3RfZWxlbWVudF9mb3VuZF90YWdzIChHU1RfRUxFTUVOVCAoZmFrZXNyYyksIGxpc3QpOworCisgIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGVsaW5lKTsKKyAgbWVzc2FnZSA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9FT1MsIC0xKTsKKyAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOworICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOworCisgIC8qIEZJWE1FOiBtYXliZSBhbHNvIGNoZWNrIGlmIHRoZSBmYWtlc2luayByZWNlaXZlcyB0aGUgbWVzc2FnZSAqLworCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKKyAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2VsZW1lbnRfdW5saW5rKQoreworICBHc3RFbGVtZW50ICpzcmMsICpzaW5rOworCisgIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rIChzcmMsIHNpbmspICE9IEZBTFNFKTsKKyAgZ3N0X2VsZW1lbnRfdW5saW5rIChzcmMsIHNpbmspOworICBnc3Rfb2JqZWN0X3VucmVmIChzcmMpOworICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9zZXRfdmFsdWVfZnJvbV9zdHJpbmcpCit7CisgIEdWYWx1ZSB2YWwgPSB7IDAsIH07CisKKyAgLyogZ19yZXR1cm5faWZfZmFpbCAqLworICBBU1NFUlRfQ1JJVElDQUwgKGdzdF91dGlsX3NldF92YWx1ZV9mcm9tX3N0cmluZyAoTlVMTCwgInh5eiIpKTsKKworICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdfVFlQRV9TVFJJTkcpOworICBBU1NFUlRfQ1JJVElDQUwgKGdzdF91dGlsX3NldF92YWx1ZV9mcm9tX3N0cmluZyAoJnZhbCwgTlVMTCkpOworICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKKworICAvKiBzdHJpbmcgPT4gc3RyaW5nICovCisgIGdfdmFsdWVfaW5pdCAoJnZhbCwgR19UWVBFX1NUUklORyk7CisgIGdzdF91dGlsX3NldF92YWx1ZV9mcm9tX3N0cmluZyAoJnZhbCwgIlkwMCIpOworICBmYWlsX3VubGVzcyAoZ192YWx1ZV9nZXRfc3RyaW5nICgmdmFsKSAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoZ192YWx1ZV9nZXRfc3RyaW5nICgmdmFsKSwgIlkwMCIpOworICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKKworICAvKiBzdHJpbmcgPT4gaW50ICovCisgIGdfdmFsdWVfaW5pdCAoJnZhbCwgR19UWVBFX0lOVCk7CisgIGdzdF91dGlsX3NldF92YWx1ZV9mcm9tX3N0cmluZyAoJnZhbCwgIjk4NzY1NDMyMSIpOworICBmYWlsX3VubGVzcyAoZ192YWx1ZV9nZXRfaW50ICgmdmFsKSA9PSA5ODc2NTQzMjEpOworICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKKworICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdfVFlQRV9JTlQpOworICBBU1NFUlRfQ1JJVElDQUwgKGdzdF91dGlsX3NldF92YWx1ZV9mcm9tX3N0cmluZyAoJnZhbCwgInh5eiIpKTsKKyAgZ192YWx1ZV91bnNldCAoJnZhbCk7CisKKyAgLyogc3RyaW5nID0+IHVpbnQgKi8KKyAgZ192YWx1ZV9pbml0ICgmdmFsLCBHX1RZUEVfVUlOVCk7CisgIGdzdF91dGlsX3NldF92YWx1ZV9mcm9tX3N0cmluZyAoJnZhbCwgIjk4NzY1NDMyMSIpOworICBmYWlsX3VubGVzcyAoZ192YWx1ZV9nZXRfdWludCAoJnZhbCkgPT0gOTg3NjU0MzIxKTsKKyAgZ192YWx1ZV91bnNldCAoJnZhbCk7CisKKyAgLyogQ0hFQ0tNRTogaXMgdGhpcyByZWFsbHkgZGVzaXJlZCBiZWhhdmlvdXI/ICh0cG0pICovCisgIGdfdmFsdWVfaW5pdCAoJnZhbCwgR19UWVBFX1VJTlQpOworICBnc3RfdXRpbF9zZXRfdmFsdWVfZnJvbV9zdHJpbmcgKCZ2YWwsICItOTk5Iik7CisgIGZhaWxfdW5sZXNzIChnX3ZhbHVlX2dldF91aW50ICgmdmFsKSA9PSAoKGd1aW50KSAwIC0gKGd1aW50KSA5OTkpKTsKKyAgZ192YWx1ZV91bnNldCAoJnZhbCk7CisKKyAgZ192YWx1ZV9pbml0ICgmdmFsLCBHX1RZUEVfVUlOVCk7CisgIEFTU0VSVF9DUklUSUNBTCAoZ3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nICgmdmFsLCAieHl6IikpOworICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKKworICAvKiBzdHJpbmcgPT4gbG9uZyAqLworICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdfVFlQRV9MT05HKTsKKyAgZ3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nICgmdmFsLCAiOTg3NjU0MzIxIik7CisgIGZhaWxfdW5sZXNzIChnX3ZhbHVlX2dldF9sb25nICgmdmFsKSA9PSA5ODc2NTQzMjEpOworICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKKworICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdfVFlQRV9MT05HKTsKKyAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfdXRpbF9zZXRfdmFsdWVfZnJvbV9zdHJpbmcgKCZ2YWwsICJ4eXoiKSk7CisgIGdfdmFsdWVfdW5zZXQgKCZ2YWwpOworCisgIC8qIHN0cmluZyA9PiB1bG9uZyAqLworICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdfVFlQRV9VTE9ORyk7CisgIGdzdF91dGlsX3NldF92YWx1ZV9mcm9tX3N0cmluZyAoJnZhbCwgIjk4NzY1NDMyMSIpOworICBmYWlsX3VubGVzcyAoZ192YWx1ZV9nZXRfdWxvbmcgKCZ2YWwpID09IDk4NzY1NDMyMSk7CisgIGdfdmFsdWVfdW5zZXQgKCZ2YWwpOworCisgIC8qIENIRUNLTUU6IGlzIHRoaXMgcmVhbGx5IGRlc2lyZWQgYmVoYXZpb3VyPyAodHBtKSAqLworICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdfVFlQRV9VTE9ORyk7CisgIGdzdF91dGlsX3NldF92YWx1ZV9mcm9tX3N0cmluZyAoJnZhbCwgIi05OTkiKTsKKyAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X3Vsb25nICgmdmFsKSA9PSAoKGd1bG9uZykgMCAtIChndWxvbmcpIDk5OSkpOworICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKKworICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdfVFlQRV9VTE9ORyk7CisgIEFTU0VSVF9DUklUSUNBTCAoZ3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nICgmdmFsLCAieHl6IikpOworICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKKworICAvKiBzdHJpbmcgPT4gYm9vbGVhbiAqLworICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdfVFlQRV9CT09MRUFOKTsKKyAgZ3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nICgmdmFsLCAidHJ1ZSIpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX3ZhbHVlX2dldF9ib29sZWFuICgmdmFsKSwgVFJVRSk7CisgIGdfdmFsdWVfdW5zZXQgKCZ2YWwpOworCisgIGdfdmFsdWVfaW5pdCAoJnZhbCwgR19UWVBFX0JPT0xFQU4pOworICBnc3RfdXRpbF9zZXRfdmFsdWVfZnJvbV9zdHJpbmcgKCZ2YWwsICJUUlVFIik7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKCZ2YWwpLCBUUlVFKTsKKyAgZ192YWx1ZV91bnNldCAoJnZhbCk7CisKKyAgZ192YWx1ZV9pbml0ICgmdmFsLCBHX1RZUEVfQk9PTEVBTik7CisgIGdzdF91dGlsX3NldF92YWx1ZV9mcm9tX3N0cmluZyAoJnZhbCwgImZhbHNlIik7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKCZ2YWwpLCBGQUxTRSk7CisgIGdfdmFsdWVfdW5zZXQgKCZ2YWwpOworCisgIGdfdmFsdWVfaW5pdCAoJnZhbCwgR19UWVBFX0JPT0xFQU4pOworICBnc3RfdXRpbF9zZXRfdmFsdWVfZnJvbV9zdHJpbmcgKCZ2YWwsICJGQUxTRSIpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX3ZhbHVlX2dldF9ib29sZWFuICgmdmFsKSwgRkFMU0UpOworICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKKworICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdfVFlQRV9CT09MRUFOKTsKKyAgZ3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nICgmdmFsLCAiYmxlaCIpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX3ZhbHVlX2dldF9ib29sZWFuICgmdmFsKSwgRkFMU0UpOworICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKKworI2lmIDAKKyAgLyogc3RyaW5nID0+IGZsb2F0ICh5YXksIGxvY2FsaXNhdGlvbiBpc3N1ZXMgaW52b2x2ZWQpICovCisgIGdfdmFsdWVfaW5pdCAoJnZhbCwgR19UWVBFX0ZMT0FUKTsKKyAgZ3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nICgmdmFsLCAiOTg3LjY1NCIpOworICBmYWlsX3VubGVzcyAoZ192YWx1ZV9nZXRfZmxvYXQgKCZ2YWwpID49IDk4Ny42NTMgJiYKKyAgICAgIGdfdmFsdWVfZ2V0X2Zsb2F0ICgmdmFsKSA8PSA5ODcuNjU1KTsKKyAgZ192YWx1ZV91bnNldCAoJnZhbCk7CisKKyAgZ192YWx1ZV9pbml0ICgmdmFsLCBHX1RZUEVfRkxPQVQpOworICBnc3RfdXRpbF9zZXRfdmFsdWVfZnJvbV9zdHJpbmcgKCZ2YWwsICI5ODcsNjU0Iik7CisgIGZhaWxfdW5sZXNzIChnX3ZhbHVlX2dldF9mbG9hdCAoJnZhbCkgPj0gOTg3LjY1MyAmJgorICAgICAgZ192YWx1ZV9nZXRfZmxvYXQgKCZ2YWwpIDw9IDk4Ny42NTUpOworICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKKworICAvKiBzdHJpbmcgPT4gZG91YmxlICh5YXksIGxvY2FsaXNhdGlvbiBpc3N1ZXMgaW52b2x2ZWQpICovCisgIGdfdmFsdWVfaW5pdCAoJnZhbCwgR19UWVBFX0RPVUJMRSk7CisgIGdzdF91dGlsX3NldF92YWx1ZV9mcm9tX3N0cmluZyAoJnZhbCwgIjk4Ny42NTQiKTsKKyAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X2RvdWJsZSAoJnZhbCkgPj0gOTg3LjY1MyAmJgorICAgICAgZ192YWx1ZV9nZXRfZG91YmxlICgmdmFsKSA8PSA5ODcuNjU1KTsKKyAgZ192YWx1ZV91bnNldCAoJnZhbCk7CisKKyAgZ192YWx1ZV9pbml0ICgmdmFsLCBHX1RZUEVfRE9VQkxFKTsKKyAgZ3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nICgmdmFsLCAiOTg3LDY1NCIpOworICBmYWlsX3VubGVzcyAoZ192YWx1ZV9nZXRfZG91YmxlICgmdmFsKSA+PSA5ODcuNjUzICYmCisgICAgICBnX3ZhbHVlX2dldF9kb3VibGUgKCZ2YWwpIDw9IDk4Ny42NTUpOworICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKKyNlbmRpZgorfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBnaW50CitfYmluYXJ5X3NlYXJjaF9jb21wYXJlIChndWludDMyICogYSwgZ3VpbnQzMiAqIGIpCit7CisgIHJldHVybiAqYSAtICpiOworfQorCitHU1RfU1RBUlRfVEVTVCAodGVzdF9iaW5hcnlfc2VhcmNoKQoreworICBndWludDMyIGRhdGFbMjU3XTsKKyAgZ3VpbnQzMiAqbWF0Y2g7CisgIGd1aW50MzIgc2VhcmNoX2VsZW1lbnQgPSAxMjEgKiAyOworICBndWludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCAyNTc7IGkrKykKKyAgICBkYXRhW2ldID0gKGkgKyAxKSAqIDI7CisKKyAgbWF0Y2ggPQorICAgICAgKGd1aW50MzIgKikgZ3N0X3V0aWxfYXJyYXlfYmluYXJ5X3NlYXJjaCAoZGF0YSwgMjU3LCBzaXplb2YgKGd1aW50MzIpLAorICAgICAgKEdDb21wYXJlRGF0YUZ1bmMpIF9iaW5hcnlfc2VhcmNoX2NvbXBhcmUsIEdTVF9TRUFSQ0hfTU9ERV9FWEFDVCwKKyAgICAgICZzZWFyY2hfZWxlbWVudCwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChtYXRjaCAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobWF0Y2ggLSBkYXRhLCAxMjApOworCisgIG1hdGNoID0KKyAgICAgIChndWludDMyICopIGdzdF91dGlsX2FycmF5X2JpbmFyeV9zZWFyY2ggKGRhdGEsIDI1Nywgc2l6ZW9mIChndWludDMyKSwKKyAgICAgIChHQ29tcGFyZURhdGFGdW5jKSBfYmluYXJ5X3NlYXJjaF9jb21wYXJlLCBHU1RfU0VBUkNIX01PREVfQkVGT1JFLAorICAgICAgJnNlYXJjaF9lbGVtZW50LCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKG1hdGNoICE9IE5VTEwpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChtYXRjaCAtIGRhdGEsIDEyMCk7CisKKyAgbWF0Y2ggPQorICAgICAgKGd1aW50MzIgKikgZ3N0X3V0aWxfYXJyYXlfYmluYXJ5X3NlYXJjaCAoZGF0YSwgMjU3LCBzaXplb2YgKGd1aW50MzIpLAorICAgICAgKEdDb21wYXJlRGF0YUZ1bmMpIF9iaW5hcnlfc2VhcmNoX2NvbXBhcmUsIEdTVF9TRUFSQ0hfTU9ERV9BRlRFUiwKKyAgICAgICZzZWFyY2hfZWxlbWVudCwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChtYXRjaCAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobWF0Y2ggLSBkYXRhLCAxMjApOworCisgIHNlYXJjaF9lbGVtZW50ID0gMDsKKyAgbWF0Y2ggPQorICAgICAgKGd1aW50MzIgKikgZ3N0X3V0aWxfYXJyYXlfYmluYXJ5X3NlYXJjaCAoZGF0YSwgMjU3LCBzaXplb2YgKGd1aW50MzIpLAorICAgICAgKEdDb21wYXJlRGF0YUZ1bmMpIF9iaW5hcnlfc2VhcmNoX2NvbXBhcmUsIEdTVF9TRUFSQ0hfTU9ERV9FWEFDVCwKKyAgICAgICZzZWFyY2hfZWxlbWVudCwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChtYXRjaCA9PSBOVUxMKTsKKworICBtYXRjaCA9CisgICAgICAoZ3VpbnQzMiAqKSBnc3RfdXRpbF9hcnJheV9iaW5hcnlfc2VhcmNoIChkYXRhLCAyNTcsIHNpemVvZiAoZ3VpbnQzMiksCisgICAgICAoR0NvbXBhcmVEYXRhRnVuYykgX2JpbmFyeV9zZWFyY2hfY29tcGFyZSwgR1NUX1NFQVJDSF9NT0RFX0FGVEVSLAorICAgICAgJnNlYXJjaF9lbGVtZW50LCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKG1hdGNoICE9IE5VTEwpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChtYXRjaCAtIGRhdGEsIDApOworCisgIG1hdGNoID0KKyAgICAgIChndWludDMyICopIGdzdF91dGlsX2FycmF5X2JpbmFyeV9zZWFyY2ggKGRhdGEsIDI1Nywgc2l6ZW9mIChndWludDMyKSwKKyAgICAgIChHQ29tcGFyZURhdGFGdW5jKSBfYmluYXJ5X3NlYXJjaF9jb21wYXJlLCBHU1RfU0VBUkNIX01PREVfQkVGT1JFLAorICAgICAgJnNlYXJjaF9lbGVtZW50LCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKG1hdGNoID09IE5VTEwpOworCisgIHNlYXJjaF9lbGVtZW50ID0gMTAwMDsKKyAgbWF0Y2ggPQorICAgICAgKGd1aW50MzIgKikgZ3N0X3V0aWxfYXJyYXlfYmluYXJ5X3NlYXJjaCAoZGF0YSwgMjU3LCBzaXplb2YgKGd1aW50MzIpLAorICAgICAgKEdDb21wYXJlRGF0YUZ1bmMpIF9iaW5hcnlfc2VhcmNoX2NvbXBhcmUsIEdTVF9TRUFSQ0hfTU9ERV9FWEFDVCwKKyAgICAgICZzZWFyY2hfZWxlbWVudCwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChtYXRjaCA9PSBOVUxMKTsKKworICBtYXRjaCA9CisgICAgICAoZ3VpbnQzMiAqKSBnc3RfdXRpbF9hcnJheV9iaW5hcnlfc2VhcmNoIChkYXRhLCAyNTcsIHNpemVvZiAoZ3VpbnQzMiksCisgICAgICAoR0NvbXBhcmVEYXRhRnVuYykgX2JpbmFyeV9zZWFyY2hfY29tcGFyZSwgR1NUX1NFQVJDSF9NT0RFX0FGVEVSLAorICAgICAgJnNlYXJjaF9lbGVtZW50LCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKG1hdGNoID09IE5VTEwpOworCisgIG1hdGNoID0KKyAgICAgIChndWludDMyICopIGdzdF91dGlsX2FycmF5X2JpbmFyeV9zZWFyY2ggKGRhdGEsIDI1Nywgc2l6ZW9mIChndWludDMyKSwKKyAgICAgIChHQ29tcGFyZURhdGFGdW5jKSBfYmluYXJ5X3NlYXJjaF9jb21wYXJlLCBHU1RfU0VBUkNIX01PREVfQkVGT1JFLAorICAgICAgJnNlYXJjaF9lbGVtZW50LCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKG1hdGNoICE9IE5VTEwpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChtYXRjaCAtIGRhdGEsIDI1Nik7CisKKyAgc2VhcmNoX2VsZW1lbnQgPSAxMjEgKiAyIC0gMTsKKyAgbWF0Y2ggPQorICAgICAgKGd1aW50MzIgKikgZ3N0X3V0aWxfYXJyYXlfYmluYXJ5X3NlYXJjaCAoZGF0YSwgMjU3LCBzaXplb2YgKGd1aW50MzIpLAorICAgICAgKEdDb21wYXJlRGF0YUZ1bmMpIF9iaW5hcnlfc2VhcmNoX2NvbXBhcmUsIEdTVF9TRUFSQ0hfTU9ERV9FWEFDVCwKKyAgICAgICZzZWFyY2hfZWxlbWVudCwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChtYXRjaCA9PSBOVUxMKTsKKworICBtYXRjaCA9CisgICAgICAoZ3VpbnQzMiAqKSBnc3RfdXRpbF9hcnJheV9iaW5hcnlfc2VhcmNoIChkYXRhLCAyNTcsIHNpemVvZiAoZ3VpbnQzMiksCisgICAgICAoR0NvbXBhcmVEYXRhRnVuYykgX2JpbmFyeV9zZWFyY2hfY29tcGFyZSwgR1NUX1NFQVJDSF9NT0RFX0FGVEVSLAorICAgICAgJnNlYXJjaF9lbGVtZW50LCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKG1hdGNoICE9IE5VTEwpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChtYXRjaCAtIGRhdGEsIDEyMCk7CisKKyAgbWF0Y2ggPQorICAgICAgKGd1aW50MzIgKikgZ3N0X3V0aWxfYXJyYXlfYmluYXJ5X3NlYXJjaCAoZGF0YSwgMjU3LCBzaXplb2YgKGd1aW50MzIpLAorICAgICAgKEdDb21wYXJlRGF0YUZ1bmMpIF9iaW5hcnlfc2VhcmNoX2NvbXBhcmUsIEdTVF9TRUFSQ0hfTU9ERV9CRUZPUkUsCisgICAgICAmc2VhcmNoX2VsZW1lbnQsIE5VTEwpOworICBmYWlsX3VubGVzcyAobWF0Y2ggIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKG1hdGNoIC0gZGF0YSwgMTE5KTsKKworfQorCitHU1RfRU5EX1RFU1Q7CisKKyNpZmRlZiBIQVZFX0dTTAorI2lmZGVmIEhBVkVfR01QCisKKyNpbmNsdWRlIDxnc2wvZ3NsX3JuZy5oPgorI2luY2x1ZGUgPGdtcC5oPgorCitzdGF0aWMgZ3VpbnQ2NAorcmFuZGd1aW50NjQgKGdzbF9ybmcgKiBybmcsIGd1aW50NjQgbikKK3sKKyAgdW5pb24KKyAgeworICAgIGd1aW50NjQgeDsKKyAgICBzdHJ1Y3QKKyAgICB7CisgICAgICBndWludDE2IGEsIGIsIGMsIGQ7CisgICAgfSBwYXJ0czsKKyAgfSB4OworICB4LnBhcnRzLmEgPSBnc2xfcm5nX3VuaWZvcm1faW50IChybmcsIDEgPDwgMTYpOworICB4LnBhcnRzLmIgPSBnc2xfcm5nX3VuaWZvcm1faW50IChybmcsIDEgPDwgMTYpOworICB4LnBhcnRzLmMgPSBnc2xfcm5nX3VuaWZvcm1faW50IChybmcsIDEgPDwgMTYpOworICB4LnBhcnRzLmQgPSBnc2xfcm5nX3VuaWZvcm1faW50IChybmcsIDEgPDwgMTYpOworICByZXR1cm4geC54ICUgbjsKK30KKworCitlbnVtIHJvdW5kX3QKK3sKKyAgUk9VTkRfVE9ORUFSRVNUID0gMCwKKyAgUk9VTkRfVVAsCisgIFJPVU5EX0RPV04KK307CisKK3N0YXRpYyB2b2lkCitnbXBfc2V0X3VpbnQ2NCAobXB6X3QgbXAsIGd1aW50NjQgeCkKK3sKKyAgbXB6X3QgdHdvXzMyLCB0bXA7CisKKyAgbXB6X2luaXQgKHR3b18zMik7CisgIG1wel9pbml0ICh0bXApOworCisgIG1wel91aV9wb3dfdWkgKHR3b18zMiwgMiwgMzIpOworICBtcHpfc2V0X3VpIChtcCwgKHVuc2lnbmVkIGxvbmcpICgoeCA+PiAzMikgJiBHX01BWFVJTlQzMikpOworICBtcHpfbXVsICh0bXAsIG1wLCB0d29fMzIpOworICBtcHpfYWRkX3VpIChtcCwgdG1wLCAodW5zaWduZWQgbG9uZykgKHggJiBHX01BWFVJTlQzMikpOworICBtcHpfY2xlYXIgKHR3b18zMik7CisgIG1wel9jbGVhciAodG1wKTsKK30KKworc3RhdGljIGd1aW50NjQKK2dtcF9nZXRfdWludDY0IChtcHpfdCBtcCkKK3sKKyAgbXB6X3QgdHdvXzY0LCB0d29fMzIsIHRtcDsKKyAgZ3VpbnQ2NCByZXQ7CisKKyAgbXB6X2luaXQgKHR3b182NCk7CisgIG1wel9pbml0ICh0d29fMzIpOworICBtcHpfaW5pdCAodG1wKTsKKworICBtcHpfdWlfcG93X3VpICh0d29fNjQsIDIsIDY0KTsKKyAgbXB6X3VpX3Bvd191aSAodHdvXzMyLCAyLCAzMik7CisgIGlmIChtcHpfY21wICh0bXAsIHR3b182NCkgPj0gMCkKKyAgICByZXR1cm4gR19NQVhVSU5UNjQ7CisgIG1wel9jbGVhciAodHdvXzY0KTsKKworICBtcHpfdGRpdl9xICh0bXAsIG1wLCB0d29fMzIpOworICByZXQgPSBtcHpfZ2V0X3VpICh0bXApOworICByZXQgPDw9IDMyOworICByZXQgfD0gbXB6X2dldF91aSAobXApOworICBtcHpfY2xlYXIgKHR3b18zMik7CisgIG1wel9jbGVhciAodG1wKTsKKworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgZ3VpbnQ2NAorZ21wX3NjYWxlIChndWludDY0IHgsIGd1aW50NjQgYSwgZ3VpbnQ2NCBiLCBlbnVtIHJvdW5kX3QgbW9kZSkKK3sKKyAgbXB6X3QgbXAxLCBtcDIsIG1wMzsKKyAgaWYgKCFiKQorICAgIC8qIG92ZXJmbG93ICovCisgICAgcmV0dXJuIEdfTUFYVUlOVDY0OworICBtcHpfaW5pdCAobXAxKTsKKyAgbXB6X2luaXQgKG1wMik7CisgIG1wel9pbml0IChtcDMpOworCisgIGdtcF9zZXRfdWludDY0IChtcDEsIHgpOworICBnbXBfc2V0X3VpbnQ2NCAobXAzLCBhKTsKKyAgbXB6X211bCAobXAyLCBtcDEsIG1wMyk7CisgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgUk9VTkRfVE9ORUFSRVNUOgorICAgICAgZ21wX3NldF91aW50NjQgKG1wMSwgYik7CisgICAgICBtcHpfdGRpdl9xX3VpIChtcDMsIG1wMSwgMik7CisgICAgICBtcHpfYWRkIChtcDEsIG1wMiwgbXAzKTsKKyAgICAgIG1wel9zZXQgKG1wMiwgbXAxKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUk9VTkRfVVA6CisgICAgICBnbXBfc2V0X3VpbnQ2NCAobXAxLCBiKTsKKyAgICAgIG1wel9zdWJfdWkgKG1wMywgbXAxLCAxKTsKKyAgICAgIG1wel9hZGQgKG1wMSwgbXAyLCBtcDMpOworICAgICAgbXB6X3NldCAobXAyLCBtcDEpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBST1VORF9ET1dOOgorICAgICAgYnJlYWs7CisgIH0KKyAgZ21wX3NldF91aW50NjQgKG1wMywgYik7CisgIG1wel90ZGl2X3EgKG1wMSwgbXAyLCBtcDMpOworICB4ID0gZ21wX2dldF91aW50NjQgKG1wMSk7CisgIG1wel9jbGVhciAobXAxKTsKKyAgbXB6X2NsZWFyIChtcDIpOworICBtcHpfY2xlYXIgKG1wMyk7CisgIHJldHVybiB4OworfQorCitzdGF0aWMgdm9pZAorX2dtcF90ZXN0X3NjYWxlIChnc2xfcm5nICogcm5nKQoreworICBndWludDY0IGJ5Z3N0LCBieWdtcDsKKyAgZ3VpbnQ2NCBhID0gcmFuZGd1aW50NjQgKHJuZywgZ3NsX3JuZ191bmlmb3JtX2ludCAocm5nLAorICAgICAgICAgIDIpID8gR19NQVhVSU5UNjQgOiBHX01BWFVJTlQzMik7CisgIGd1aW50NjQgYiA9IHJhbmRndWludDY0IChybmcsIGdzbF9ybmdfdW5pZm9ybV9pbnQgKHJuZywgMikgPyBHX01BWFVJTlQ2NCAtIDEgOiBHX01BWFVJTlQzMiAtIDEpICsgMTsgIC8qIDAgbm90IGFsbG93ZWQgKi8KKyAgZ3VpbnQ2NCB2YWwgPSByYW5kZ3VpbnQ2NCAocm5nLCBnbXBfc2NhbGUgKEdfTUFYVUlOVDY0LCBiLCBhLCBST1VORF9ET1dOKSk7CisgIGVudW0gcm91bmRfdCBtb2RlID0gZ3NsX3JuZ191bmlmb3JtX2ludCAocm5nLCAzKTsKKyAgY29uc3QgY2hhciAqZnVuYzsKKworICBieWdtcCA9IGdtcF9zY2FsZSAodmFsLCBhLCBiLCBtb2RlKTsKKyAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBST1VORF9UT05FQVJFU1Q6CisgICAgICBieWdzdCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCAodmFsLCBhLCBiKTsKKyAgICAgIGZ1bmMgPSAiZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUk9VTkRfVVA6CisgICAgICBieWdzdCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlsICh2YWwsIGEsIGIpOworICAgICAgZnVuYyA9ICJnc3RfdXRpbF91aW50NjRfc2NhbGVfY2VpbCI7CisgICAgICBicmVhazsKKyAgICBjYXNlIFJPVU5EX0RPV046CisgICAgICBieWdzdCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAodmFsLCBhLCBiKTsKKyAgICAgIGZ1bmMgPSAiZ3N0X3V0aWxfdWludDY0X3NjYWxlIjsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKKyAgICAgIGJyZWFrOworICB9CisgIGZhaWxfdW5sZXNzIChieWdzdCA9PSBieWdtcCwKKyAgICAgICJlcnJvcjogJXMoKTogJSIgR19HVUlOVDY0X0ZPUk1BVCAiICogJSIgR19HVUlOVDY0X0ZPUk1BVCAiIC8gJSIKKyAgICAgIEdfR1VJTlQ2NF9GT1JNQVQgIiA9ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgY29ycmVjdCA9ICUiIEdfR1VJTlQ2NF9GT1JNQVQKKyAgICAgICJcbiIsIGZ1bmMsIHZhbCwgYSwgYiwgYnlnc3QsIGJ5Z21wKTsKK30KKworc3RhdGljIHZvaWQKK19nbXBfdGVzdF9zY2FsZV9pbnQgKGdzbF9ybmcgKiBybmcpCit7CisgIGd1aW50NjQgYnlnc3QsIGJ5Z21wOworICBnaW50MzIgYSA9IHJhbmRndWludDY0IChybmcsIEdfTUFYSU5UMzIpOworICBnaW50MzIgYiA9IHJhbmRndWludDY0IChybmcsIEdfTUFYSU5UMzIgLSAxKSArIDE7ICAgICAvKiAwIG5vdCBhbGxvd2VkICovCisgIGd1aW50NjQgdmFsID0gcmFuZGd1aW50NjQgKHJuZywgZ21wX3NjYWxlIChHX01BWFVJTlQ2NCwgYiwgYSwgUk9VTkRfRE9XTikpOworICBlbnVtIHJvdW5kX3QgbW9kZSA9IGdzbF9ybmdfdW5pZm9ybV9pbnQgKHJuZywgMyk7CisgIGNvbnN0IGNoYXIgKmZ1bmM7CisKKyAgYnlnbXAgPSBnbXBfc2NhbGUgKHZhbCwgYSwgYiwgbW9kZSk7CisgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgUk9VTkRfVE9ORUFSRVNUOgorICAgICAgYnlnc3QgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kICh2YWwsIGEsIGIpOworICAgICAgZnVuYyA9ICJnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUk9VTkRfVVA6CisgICAgICBieWdzdCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbCAodmFsLCBhLCBiKTsKKyAgICAgIGZ1bmMgPSAiZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9jZWlsIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUk9VTkRfRE9XTjoKKyAgICAgIGJ5Z3N0ID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAodmFsLCBhLCBiKTsKKyAgICAgIGZ1bmMgPSAiZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCI7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7CisgICAgICBicmVhazsKKyAgfQorICBmYWlsX3VubGVzcyAoYnlnc3QgPT0gYnlnbXAsCisgICAgICAiZXJyb3I6ICVzKCk6ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiAqICVkIC8gJWQgPSAlIiBHX0dVSU5UNjRfRk9STUFUCisgICAgICAiLCBjb3JyZWN0ID0gJSIgR19HVUlOVDY0X0ZPUk1BVCAiXG4iLCBmdW5jLCB2YWwsIGEsIGIsIGJ5Z3N0LCBieWdtcCk7Cit9CisKKyNkZWZpbmUgR01QX1RFU1RfUlVOUyAxMDAwMDAKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfbWF0aF9zY2FsZV9nbXApCit7CisgIGdzbF9ybmcgKnJuZyA9IGdzbF9ybmdfYWxsb2MgKGdzbF9ybmdfbXQxOTkzNyk7CisgIGdpbnQgbjsKKworICBmb3IgKG4gPSAwOyBuIDwgR01QX1RFU1RfUlVOUzsgbisrKQorICAgIF9nbXBfdGVzdF9zY2FsZSAocm5nKTsKKworICBnc2xfcm5nX2ZyZWUgKHJuZyk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfbWF0aF9zY2FsZV9nbXBfaW50KQoreworICBnc2xfcm5nICpybmcgPSBnc2xfcm5nX2FsbG9jIChnc2xfcm5nX210MTk5MzcpOworICBnaW50IG47CisKKyAgZm9yIChuID0gMDsgbiA8IEdNUF9URVNUX1JVTlM7IG4rKykKKyAgICBfZ21wX3Rlc3Rfc2NhbGVfaW50IChybmcpOworCisgIGdzbF9ybmdfZnJlZSAocm5nKTsKK30KKworR1NUX0VORF9URVNUOworCisjZW5kaWYKKyNlbmRpZgorCitHU1RfU1RBUlRfVEVTVCAodGVzdF9wYWRfcHJveHlfZ2V0Y2Fwc19hZ2dyZWdhdGlvbikKK3sKKyAgR3N0RWxlbWVudCAqdGVlLCAqc2luazEsICpzaW5rMjsKKyAgR3N0Q2FwcyAqY2FwczsKKyAgR3N0UGFkICp0ZWVfc3JjMSwgKnRlZV9zcmMyLCAqdGVlX3NpbmssICpzaW5rMV9zaW5rLCAqc2luazJfc2luazsKKworICB0ZWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZWUiLCAidGVlIik7CisKKyAgc2luazEgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rMSIpOworICB0ZWVfc3JjMSA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAodGVlLCAic3JjJWQiKTsKKyAgc2luazFfc2luayA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rMSwgInNpbmsiKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3BhZF9saW5rICh0ZWVfc3JjMSwgc2luazFfc2luayksIEdTVF9QQURfTElOS19PSyk7CisKKyAgc2luazIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rMiIpOworICB0ZWVfc3JjMiA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAodGVlLCAic3JjJWQiKTsKKyAgc2luazJfc2luayA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rMiwgInNpbmsiKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3BhZF9saW5rICh0ZWVfc3JjMiwgc2luazJfc2luayksIEdTVF9QQURfTElOS19PSyk7CisKKyAgdGVlX3NpbmsgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAodGVlLCAic2luayIpOworCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2luazEsIEdTVF9TVEFURV9QQVVTRUQpOworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNpbmsyLCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlICh0ZWUsIEdTVF9TVEFURV9QQVVTRUQpOworCisgIC8qIGJ5IGRlZmF1bHQsIEFOWSBjYXBzIHNob3VsZCBpbnRlcnNlY3QgdG8gQU5ZICovCisgIGNhcHMgPSBnc3RfcGFkX2dldF9jYXBzICh0ZWVfc2luaywgTlVMTCk7CisgIEdTVF9JTkZPICgiZ290IGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKKyAgZmFpbF91bmxlc3MgKGNhcHMgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19hbnkgKGNhcHMpKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOworCisgIC8qIHRoZXNlIGRvbid0IGludGVyc2VjdCB3ZSBzaG91bGQgZ2V0IGVtcHR5IGNhcHMgKi8KKyAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJmb28vYmFyIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfcGFkX3NldF9jYXBzIChzaW5rMV9zaW5rLCBjYXBzKSk7CisgIGdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKHNpbmsxX3NpbmspOworICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7CisKKyAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJiYXIvdGVyIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfcGFkX3NldF9jYXBzIChzaW5rMl9zaW5rLCBjYXBzKSk7CisgIGdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKHNpbmsyX3NpbmspOworICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7CisKKyAgY2FwcyA9IGdzdF9wYWRfZ2V0X2NhcHMgKHRlZV9zaW5rLCBOVUxMKTsKKyAgR1NUX0lORk8gKCJnb3QgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOworICBmYWlsX3VubGVzcyAoY2FwcyAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VtcHR5IChjYXBzKSk7CisgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKKworICAvKiB0ZXN0IGludGVyc2VjdGlvbiAqLworICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImZvby9iYXIiLCAiYmFydmVyc2lvbiIsIEdfVFlQRV9JTlQsIDEsIE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9zZXRfY2FwcyAoc2luazJfc2luaywgY2FwcykpOworICBnc3RfcGFkX3VzZV9maXhlZF9jYXBzIChzaW5rMl9zaW5rKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOworCisgIGNhcHMgPSBnc3RfcGFkX2dldF9jYXBzICh0ZWVfc2luaywgTlVMTCk7CisgIEdTVF9JTkZPICgiZ290IGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKKyAgZmFpbF91bmxlc3MgKGNhcHMgIT0gTlVMTCk7CisgIGZhaWxfaWYgKGdzdF9jYXBzX2lzX2VtcHR5IChjYXBzKSk7CisgIHsKKyAgICBHc3RTdHJ1Y3R1cmUgKnMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKKworICAgIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKHMpLCAiZm9vL2JhciIpOworICAgIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZF90eXBlZCAocywgImJhcnZlcnNpb24iLCBHX1RZUEVfSU5UKSk7CisgIH0KKyAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOworCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2luazEsIEdTVF9TVEFURV9OVUxMKTsKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzaW5rMiwgR1NUX1NUQVRFX05VTEwpOworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHRlZSwgR1NUX1NUQVRFX05VTEwpOworCisgIC8qIGNsZWFuIHVwICovCisgIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKHRlZSwgdGVlX3NyYzEpOworICBnc3Rfb2JqZWN0X3VucmVmICh0ZWVfc3JjMSk7CisgIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKHRlZSwgdGVlX3NyYzIpOworICBnc3Rfb2JqZWN0X3VucmVmICh0ZWVfc3JjMik7CisgIGdzdF9vYmplY3RfdW5yZWYgKHRlZV9zaW5rKTsKKyAgZ3N0X29iamVjdF91bnJlZiAodGVlKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc2luazFfc2luayk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmsxKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc2luazJfc2luayk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmsyKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9ncmVhdGVzdF9jb21tb25fZGl2aXNvcikKK3sKKyAgZmFpbF9pZiAoZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKDEsIDEpICE9IDEpOworICBmYWlsX2lmIChnc3RfdXRpbF9ncmVhdGVzdF9jb21tb25fZGl2aXNvciAoMiwgMykgIT0gMSk7CisgIGZhaWxfaWYgKGdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yICgzLCA1KSAhPSAxKTsKKyAgZmFpbF9pZiAoZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKC0xLCAxKSAhPSAxKTsKKyAgZmFpbF9pZiAoZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKC0yLCAzKSAhPSAxKTsKKyAgZmFpbF9pZiAoZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKC0zLCA1KSAhPSAxKTsKKyAgZmFpbF9pZiAoZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKC0xLCAtMSkgIT0gMSk7CisgIGZhaWxfaWYgKGdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yICgtMiwgLTMpICE9IDEpOworICBmYWlsX2lmIChnc3RfdXRpbF9ncmVhdGVzdF9jb21tb25fZGl2aXNvciAoLTMsIC01KSAhPSAxKTsKKyAgZmFpbF9pZiAoZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKDEsIC0xKSAhPSAxKTsKKyAgZmFpbF9pZiAoZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKDIsIC0zKSAhPSAxKTsKKyAgZmFpbF9pZiAoZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKDMsIC01KSAhPSAxKTsKKyAgZmFpbF9pZiAoZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKDIsIDIpICE9IDIpOworICBmYWlsX2lmIChnc3RfdXRpbF9ncmVhdGVzdF9jb21tb25fZGl2aXNvciAoMiwgNCkgIT0gMik7CisgIGZhaWxfaWYgKGdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yICgxMDAxLCAxMSkgIT0gMTEpOworCit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIFN1aXRlICoKK2dzdF91dGlsc19zdWl0ZSAodm9pZCkKK3sKKyAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RVdGlscyIpOworICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7CisKKyAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9idWZmZXJfcHJvYmVfbl90aW1lcyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9idWZmZXJfcHJvYmVfb25jZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9tYXRoX3NjYWxlKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X21hdGhfc2NhbGVfcm91bmQpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWF0aF9zY2FsZV9jZWlsKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X21hdGhfc2NhbGVfdWludDY0KTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X21hdGhfc2NhbGVfcmFuZG9tKTsKKyNpZmRlZiBIQVZFX0dTTAorI2lmZGVmIEhBVkVfR01QCisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9tYXRoX3NjYWxlX2dtcCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9tYXRoX3NjYWxlX2dtcF9pbnQpOworI2VuZGlmCisjZW5kaWYKKworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ3VpbnQ2NF90b19nZG91YmxlKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2dkb3VibGVfdG9fZ3VpbnQ2NCk7CisjaWZuZGVmIEdTVF9ESVNBQkxFX1BBUlNFCisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbik7CisjZW5kaWYKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2VsZW1lbnRfZm91bmRfdGFncyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9lbGVtZW50X3VubGluayk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zZXRfdmFsdWVfZnJvbV9zdHJpbmcpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYmluYXJ5X3NlYXJjaCk7CisKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BhZF9wcm94eV9nZXRjYXBzX2FnZ3JlZ2F0aW9uKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yKTsKKyAgcmV0dXJuIHM7Cit9CisKK0dTVF9DSEVDS19NQUlOIChnc3RfdXRpbHMpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWE1NTg0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmMKQEAgLTAsMCArMSwyNTQ1IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgPDIwMDQ+IERhdmlkIFNjaGxlZWYgPGRhdmlkIGF0IHNjaGxlZWYgZG90IG9yZz4KKyAqIENvcHlyaWdodCAoQykgPDIwMDU+IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKyAqCisgKiBnc3R2YWx1ZS5jOiBVbml0IHRlc3RzIGZvciBHc3RWYWx1ZQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgorCisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2Rlc2VyaWFsaXplX2J1ZmZlcikKK3sKKyAgR1ZhbHVlIHZhbHVlID0geyAwIH07CisgIEdzdEJ1ZmZlciAqYnVmOworCisgIGdfdmFsdWVfaW5pdCAoJnZhbHVlLCBHU1RfVFlQRV9CVUZGRVIpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplICgmdmFsdWUsICIxMjM0NTY3ODkwYWJjZGVmIikpOworICAvKiBkb2VzIG5vdCBpbmNyZWFzZSB0aGUgcmVmY291bnQgKi8KKyAgYnVmID0gR1NUX0JVRkZFUiAoZ192YWx1ZV9nZXRfYm94ZWQgKCZ2YWx1ZSkpOworICBBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQgKGJ1ZiwgImJ1ZmZlciIsIDEpOworCisgIC8qIGRvZXMgbm90IGluY3JlYXNlIHRoZSByZWZjb3VudCAqLworICBidWYgPSBnc3RfdmFsdWVfZ2V0X2J1ZmZlciAoJnZhbHVlKTsKKyAgQVNTRVJUX01JTklfT0JKRUNUX1JFRkNPVU5UIChidWYsICJidWZmZXIiLCAxKTsKKworICAvKiBjbGVhbnVwICovCisgIGdfdmFsdWVfdW5zZXQgKCZ2YWx1ZSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogY3JlYXRlIGFuZCBzZXJpYWxpemUgYSBidWZmZXIgKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X3NlcmlhbGl6ZV9idWZmZXIpCit7CisgIEdWYWx1ZSB2YWx1ZSA9IHsgMCB9OworICBHc3RCdWZmZXIgKmJ1ZjsKKyAgZ2NoYXIgKnNlcmlhbGl6ZWQ7CisgIHN0YXRpYyBjb25zdCBjaGFyICpidWZfZGF0YSA9ICIxMjM0NTY3ODkwYWJjZGVmIjsKKyAgZ2ludCBsZW47CisgIGdwb2ludGVyIGRhdGE7CisKKyAgbGVuID0gc3RybGVuIChidWZfZGF0YSk7CisgIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAobGVuKTsKKworICBkYXRhID0gZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgTlVMTCwgTlVMTCwgR1NUX01BUF9XUklURSk7CisgIG1lbWNweSAoZGF0YSwgYnVmX2RhdGEsIGxlbik7CisgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgZGF0YSwgbGVuKTsKKworICBBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQgKGJ1ZiwgImJ1ZmZlciIsIDEpOworCisgIC8qIGFuZCBhc3NpZ24gYnVmZmVyIHRvIG1pbmkgb2JqZWN0ICovCisgIGdfdmFsdWVfaW5pdCAoJnZhbHVlLCBHU1RfVFlQRV9CVUZGRVIpOworICBnc3RfdmFsdWVfdGFrZV9idWZmZXIgKCZ2YWx1ZSwgYnVmKTsKKyAgQVNTRVJUX01JTklfT0JKRUNUX1JFRkNPVU5UIChidWYsICJidWZmZXIiLCAxKTsKKworICAvKiBub3cgc2VyaWFsaXplIGl0ICovCisgIHNlcmlhbGl6ZWQgPSBnc3RfdmFsdWVfc2VyaWFsaXplICgmdmFsdWUpOworICBHU1RfREVCVUcgKCJzZXJpYWxpemVkIGJ1ZmZlciB0byAlcyIsIHNlcmlhbGl6ZWQpOworICBmYWlsX3VubGVzcyAoc2VyaWFsaXplZCAhPSBOVUxMKTsKKworICAvKiByZWZjb3VudCBzaG91bGQgbm90IGNoYW5nZSAqLworICBBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQgKGJ1ZiwgImJ1ZmZlciIsIDEpOworCisgIC8qIGNsZWFudXAgKi8KKyAgZ19mcmVlIChzZXJpYWxpemVkKTsKKyAgZ192YWx1ZV91bnNldCAoJnZhbHVlKTsKKworICAvKiB0YWtlIE5VTEwgYnVmZmVyICovCisgIGdfdmFsdWVfaW5pdCAoJnZhbHVlLCBHU1RfVFlQRV9CVUZGRVIpOworICBHU1RfREVCVUcgKCJzZXR0aW5nIE5VTEwgYnVmZmVyIik7CisgIGdzdF92YWx1ZV90YWtlX2J1ZmZlciAoJnZhbHVlLCBOVUxMKTsKKworICAvKiBub3cgc2VyaWFsaXplIGl0ICovCisgIEdTVF9ERUJVRyAoInNlcmlhbGl6aW5nIE5VTEwgYnVmZmVyIik7CisgIHNlcmlhbGl6ZWQgPSBnc3RfdmFsdWVfc2VyaWFsaXplICgmdmFsdWUpOworICAvKiBzaG91bGQgcmV0dXJuIE5VTEwgKi8KKyAgZmFpbF91bmxlc3MgKHNlcmlhbGl6ZWQgPT0gTlVMTCk7CisKKyAgZ19mcmVlIChzZXJpYWxpemVkKTsKKyAgZ192YWx1ZV91bnNldCAoJnZhbHVlKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9kZXNlcmlhbGl6ZV9naW50NjQpCit7CisgIEdWYWx1ZSB2YWx1ZSA9IHsgMCB9OworICBjb25zdCBjaGFyICpzdHJpbmdzW10gPSB7CisgICAgIjEyMzQ1Njc4OTAxIiwKKyAgICAiLTEyMzQ1Njc4OTAxIiwKKyAgICAiMTE1MjkyMTUwNDYwNjg0Njk3NiIsCisgICAgIi0xMTUyOTIxNTA0NjA2ODQ2OTc2IiwKKyAgfTsKKyAgZ2ludDY0IHJlc3VsdHNbXSA9IHsKKyAgICAxMjM0NTY3ODkwMUxMLAorICAgIC0xMjM0NTY3ODkwMUxMLAorICAgIDExNTI5MjE1MDQ2MDY4NDY5NzZMTCwKKyAgICAtMTE1MjkyMTUwNDYwNjg0Njk3NkxMLAorICB9OworICBpbnQgaTsKKworICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZSwgR19UWVBFX0lOVDY0KTsKKworICBmb3IgKGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTIChzdHJpbmdzKTsgKytpKSB7CisgICAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZSAoJnZhbHVlLCBzdHJpbmdzW2ldKSwKKyAgICAgICAgImNvdWxkIG5vdCBkZXNlcmlhbGl6ZSAlcyAoJWQpIiwgc3RyaW5nc1tpXSwgaSk7CisgICAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X2ludDY0ICgmdmFsdWUpID09IHJlc3VsdHNbaV0sCisgICAgICAgICJyZXN1bHRpbmcgdmFsdWUgaXMgJSIgR19HSU5UNjRfRk9STUFUICIsIG5vdCAlIiBHX0dJTlQ2NF9GT1JNQVQKKyAgICAgICAgIiwgZm9yIHN0cmluZyAlcyAoJWQpIiwgZ192YWx1ZV9nZXRfaW50NjQgKCZ2YWx1ZSksCisgICAgICAgIHJlc3VsdHNbaV0sIHN0cmluZ3NbaV0sIGkpOworICB9Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfZGVzZXJpYWxpemVfZ3VpbnQ2NCkKK3sKKyAgR1ZhbHVlIHZhbHVlID0geyAwIH07CisgIGNvbnN0IGNoYXIgKnN0cmluZ3NbXSA9IHsKKyAgICAiMHhmZmZmZmZmZmZmZmZmZmZmIiwKKyAgICAiOTIyMzM3MjAzNjg1NDc3NTgxMCIsCisgICAgIi05MjIzMzcyMDM2ODU0Nzc1ODEwIiwKKyAgICAiLTEiLAorICAgICIxIiwKKyAgICAiLTAiLAorICB9OworICBndWludDY0IHJlc3VsdHNbXSA9IHsKKyAgICAweGZmZmZmZmZmZmZmZmZmZmZVTEwsCisgICAgOTIyMzM3MjAzNjg1NDc3NTgxMFVMTCwKKyAgICA5MjIzMzcyMDM2ODU0Nzc1ODA2VUxMLAorICAgIChndWludDY0KSAtIDEsCisgICAgMSwKKyAgICAwLAorICB9OworICBpbnQgaTsKKworICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZSwgR19UWVBFX1VJTlQ2NCk7CisKKyAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoc3RyaW5ncyk7ICsraSkgeworICAgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZGVzZXJpYWxpemUgKCZ2YWx1ZSwgc3RyaW5nc1tpXSksCisgICAgICAgICJjb3VsZCBub3QgZGVzZXJpYWxpemUgJXMgKCVkKSIsIHN0cmluZ3NbaV0sIGkpOworICAgIGZhaWxfdW5sZXNzIChnX3ZhbHVlX2dldF91aW50NjQgKCZ2YWx1ZSkgPT0gcmVzdWx0c1tpXSwKKyAgICAgICAgInJlc3VsdGluZyB2YWx1ZSBpcyAlIiBHX0dVSU5UNjRfRk9STUFUICIsIG5vdCAlIiBHX0dVSU5UNjRfRk9STUFUCisgICAgICAgICIsIGZvciBzdHJpbmcgJXMgKCVkKSIsIGdfdmFsdWVfZ2V0X3VpbnQ2NCAoJnZhbHVlKSwKKyAgICAgICAgcmVzdWx0c1tpXSwgc3RyaW5nc1tpXSwgaSk7CisgIH0KK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9kZXNlcmlhbGl6ZV9ndWNoYXIpCit7CisgIEdWYWx1ZSB2YWx1ZSA9IHsgMCB9OworICBjb25zdCBjaGFyICpzdHJpbmdzW10gPSB7CisgICAgIjB4ZmYiLAorICAgICIyNTUiLAorICAgICItMSIsCisgICAgIjEiLAorICAgICItMCIsCisgIH07CisgIGd1Y2hhciByZXN1bHRzW10gPSB7CisgICAgMHhmZiwKKyAgICAyNTUsCisgICAgKGd1Y2hhcikgLSAxLAorICAgIDEsCisgICAgMCwKKyAgfTsKKyAgaW50IGk7CisKKyAgZ192YWx1ZV9pbml0ICgmdmFsdWUsIEdfVFlQRV9VQ0hBUik7CisKKyAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoc3RyaW5ncyk7ICsraSkgeworICAgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZGVzZXJpYWxpemUgKCZ2YWx1ZSwgc3RyaW5nc1tpXSksCisgICAgICAgICJjb3VsZCBub3QgZGVzZXJpYWxpemUgJXMgKCVkKSIsIHN0cmluZ3NbaV0sIGkpOworICAgIGZhaWxfdW5sZXNzIChnX3ZhbHVlX2dldF91Y2hhciAoJnZhbHVlKSA9PSByZXN1bHRzW2ldLAorICAgICAgICAicmVzdWx0aW5nIHZhbHVlIGlzICV1IG5vdCAldSwgZm9yIHN0cmluZyAlcyAoJWQpIiwKKyAgICAgICAgZ192YWx1ZV9nZXRfdWNoYXIgKCZ2YWx1ZSksIHJlc3VsdHNbaV0sIHN0cmluZ3NbaV0sIGkpOworICB9CisKKyAgLyogdGVzdCBzZXJpYWxpc2F0aW9uIGFzIHdlbGwgd2hpbGUgd2UncmUgYXQgaXQgKi8KKyAgeworICAgIGdjaGFyICpzdHI7CisgICAgR1ZhbHVlIHZhbHVlID0geyAwIH07CisgICAgZ192YWx1ZV9pbml0ICgmdmFsdWUsIEdfVFlQRV9VQ0hBUik7CisKKyAgICBnX3ZhbHVlX3NldF91Y2hhciAoJnZhbHVlLCAyNTUpOworICAgIHN0ciA9IGdzdF92YWx1ZV9zZXJpYWxpemUgKCZ2YWx1ZSk7CisKKyAgICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChzdHIsICIyNTUiKTsKKyAgICBnX2ZyZWUgKHN0cik7CisgIH0KK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9kZXNlcmlhbGl6ZV9nc3RmcmFjdGlvbikKK3sKKyAgR1ZhbHVlIHZhbHVlID0geyAwIH07CisgIGNvbnN0IGNoYXIgKnN0cmluZ3NbXSA9IHsKKyAgICAiNC81IiwKKyAgICAiLTgvOSIKKyAgfTsKKyAgZ2ludDY0IHJlc3VsdF9udW1lcnNbXSA9IHsKKyAgICA0LAorICAgIC04CisgIH07CisgIGdpbnQ2NCByZXN1bHRfZGVub21zW10gPSB7CisgICAgNSwKKyAgICA5CisgIH07CisKKyAgaW50IGk7CisKKyAgZ192YWx1ZV9pbml0ICgmdmFsdWUsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKKyAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoc3RyaW5ncyk7ICsraSkgeworICAgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZGVzZXJpYWxpemUgKCZ2YWx1ZSwgc3RyaW5nc1tpXSksCisgICAgICAgICJjb3VsZCBub3QgZGVzZXJpYWxpemUgJXMgKCVkKSIsIHN0cmluZ3NbaV0sIGkpOworICAgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvciAoJnZhbHVlKSA9PSByZXN1bHRfbnVtZXJzW2ldLAorICAgICAgICAicmVzdWx0aW5nIG51bWVyYXRvciB2YWx1ZSBpcyAlZCwgbm90ICVkIgorICAgICAgICAiLCBmb3Igc3RyaW5nICVzICglZCkiLCBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvciAoJnZhbHVlKSwKKyAgICAgICAgcmVzdWx0X251bWVyc1tpXSwgc3RyaW5nc1tpXSwgaSk7CisgICAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3IgKCZ2YWx1ZSkgPT0KKyAgICAgICAgcmVzdWx0X2Rlbm9tc1tpXSwgInJlc3VsdGluZyBkZW5vbWluYXRvciB2YWx1ZSBpcyAlZCwgbm90ICVkIgorICAgICAgICAiLCBmb3Igc3RyaW5nICVzICglZCkiLCBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX2Rlbm9taW5hdG9yICgmdmFsdWUpLAorICAgICAgICByZXN1bHRfZGVub21zW2ldLCBzdHJpbmdzW2ldLCBpKTsKKyAgfQorfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2Rlc2VyaWFsaXplX2dpbnQpCit7CisgIEdWYWx1ZSB2YWx1ZSA9IHsgMCB9OworICBjb25zdCBjaGFyICpzdHJpbmdzW10gPSB7CisgICAgIjEyMzQ1NiIsCisgICAgIi0xMjM0NTYiLAorICAgICIweEZGRkYiLAorICAgICIweDAwMDBGRkZGIiwKKyAgICAvKiBhIHBvc2l0aXZlIGxvbmcgbG9uZywgc2VyaWFsaXppbmcgdG8gaGlnaGVzdCBwb3NzaWJsZSBwb3NpdGl2ZSBzaW50ICovCisgICAgIjB4N0ZGRkZGRkYiLAorICAgIC8qIGEgcG9zaXRpdmUgbG9uZyBsb25nLCBzZXJpYWxpemluZyB0byBsb3dlc3QgcG9zc2libGUgbmVnYXRpdmUgc2ludCAqLworICAgICIweDgwMDAwMDAwIiwKKyAgICAvKiBhIG5lZ2F0aXZlIGxvbmcgbG9uZywgc2VyaWFsaXppbmcgdG8gbG93ZXN0IHBvc3NpYmxlIG5lZ2F0aXZlIHNpbnQgKi8KKyAgICAiMHhGRkZGRkZGRjgwMDAwMDAwIiwKKyAgICAiMHhGRjAwMDAwMCIsCisgICAgLyogYSBwb3NpdGl2ZSBsb25nIGxvbmcgc2VyaWFsaXppbmcgdG8gLTEgKi8KKyAgICAiMHhGRkZGRkZGRiIsCisgICAgIjB4RkZGRkZGRkYiLAorICAgIC8qIGEgbmVnYXRpdmUgbG9uZyBsb25nIHNlcmlhbGl6aW5nIHRvIC0xICovCisgICAgIjB4RkZGRkZGRkZGRkZGRkZGRiIsCisgICAgIjB4RkZGRkZGRkZGRkZGRkZGRiIsCisgICAgIjB4RUZGRkZGRkYiLAorICB9OworICAvKiBzb21lIGNhc3RzIG5lZWQgdG8gYmUgZXhwbGljaXQgYmVjYXVzZSBvZiB1bnNpZ25lZCAtPiBzaWduZWQgKi8KKyAgZ2ludCByZXN1bHRzW10gPSB7CisgICAgMTIzNDU2LAorICAgIC0xMjM0NTYsCisgICAgMHhGRkZGLAorICAgIDB4RkZGRiwKKyAgICAweDdGRkZGRkZGLAorICAgIChnaW50KSAweDgwMDAwMDAwLAorICAgIChnaW50KSAweDgwMDAwMDAwLAorICAgIChnaW50KSAweEZGMDAwMDAwLAorICAgIC0xLAorICAgIChnaW50KSAweEZGRkZGRkZGLAorICAgIC0xLAorICAgIChnaW50KSAweEZGRkZGRkZGRkZGRkZGRkZMTCwKKyAgICAoZ2ludCkgMHhFRkZGRkZGRiwKKyAgfTsKKyAgaW50IGk7CisKKyAgZ192YWx1ZV9pbml0ICgmdmFsdWUsIEdfVFlQRV9JTlQpOworCisgIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKHN0cmluZ3MpOyArK2kpIHsKKyAgICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplICgmdmFsdWUsIHN0cmluZ3NbaV0pLAorICAgICAgICAiY291bGQgbm90IGRlc2VyaWFsaXplICVzICglZCkiLCBzdHJpbmdzW2ldLCBpKTsKKyAgICBmYWlsX3VubGVzcyAoZ192YWx1ZV9nZXRfaW50ICgmdmFsdWUpID09IHJlc3VsdHNbaV0sCisgICAgICAgICJyZXN1bHRpbmcgdmFsdWUgaXMgJWQsIG5vdCAlZCwgZm9yIHN0cmluZyAlcyAoJWQpIiwKKyAgICAgICAgZ192YWx1ZV9nZXRfaW50ICgmdmFsdWUpLCByZXN1bHRzW2ldLCBzdHJpbmdzW2ldLCBpKTsKKyAgfQorfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2Rlc2VyaWFsaXplX2dpbnRfZmFpbHVyZXMpCit7CisgIEdWYWx1ZSB2YWx1ZSA9IHsgMCB9OworICBjb25zdCBjaGFyICpzdHJpbmdzW10gPSB7CisgICAgIi0iLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vdCBhIGNvbXBsZXRlIG51bWJlciAqLworICAgICItIFRFU1QiLCAgICAgICAgICAgICAgICAgICAvKiBub3QgYSBjb21wbGV0ZSBudW1iZXIgKi8KKyAgICAiMHgwMDAwMDAwMTAwMDAwMDAwIiwgICAgICAgLyogbG93ZXN0IGxvbmcgbG9uZyB0aGF0IGNhbm5vdCBmaXQgaW4gMzIgYml0cyAqLworICAgICIweEYwMDAwMDAwMDAwMDAwMDAiLAorICAgICIweEZGRkZGRkYwMDAwMDAwMDAiLAorICAgICIweEZGRkZGRkZGMDAwMDAwMDAiLAorICAgICIweDEwMDAwMDAwMDAwMDAwMDAwIiwgICAgICAvKiBmaXJzdCBudW1iZXIgdG9vIGxvbmcgdG8gZml0IGludG8gYSBsb25nIGxvbmcgKi8KKyAgICAvKiBpbnZlbnQgYSBuZXcgcHJvY2Vzc29yIGZpcnN0IGJlZm9yZSB0cnlpbmcgdG8gbWFrZSB0aGlzIG9uZSBwYXNzICovCisgICAgIjB4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLAorICB9OworICBpbnQgaTsKKworICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZSwgR19UWVBFX0lOVCk7CisKKyAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoc3RyaW5ncyk7ICsraSkgeworICAgIGZhaWxfaWYgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZSAoJnZhbHVlLCBzdHJpbmdzW2ldKSwKKyAgICAgICAgImRlc2VyaWFsaXplZCAlcyAoJWQpLCB3aGlsZSBpdCBzaG91bGQgaGF2ZSBmYWlsZWQiLCBzdHJpbmdzW2ldLCBpKTsKKyAgfQorfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2Rlc2VyaWFsaXplX2d1aW50KQoreworICBHVmFsdWUgdmFsdWUgPSB7IDAgfTsKKyAgY29uc3QgY2hhciAqc3RyaW5nc1tdID0geworICAgICIxMjM0NTYiLAorICAgICItMTIzNDU2IiwKKyAgICAiMHhGRkZGIiwKKyAgICAiMHgwMDAwRkZGRiIsCisgICAgLyogYSBwb3NpdGl2ZSBsb25nIGxvbmcsIHNlcmlhbGl6aW5nIHRvIGhpZ2hlc3QgcG9zc2libGUgcG9zaXRpdmUgc2ludCAqLworICAgICIweDdGRkZGRkZGIiwKKyAgICAvKiBhIHBvc2l0aXZlIGxvbmcgbG9uZywgc2VyaWFsaXppbmcgdG8gbG93ZXN0IHBvc3NpYmxlIG5lZ2F0aXZlIHNpbnQgKi8KKyAgICAiMHg4MDAwMDAwMCIsCisgICAgIjIxNDc0ODM2NDgiLAorICAgIC8qIGEgbmVnYXRpdmUgbG9uZyBsb25nLCBzZXJpYWxpemluZyB0byBsb3dlc3QgcG9zc2libGUgbmVnYXRpdmUgc2ludCAqLworICAgICIweEZGRkZGRkZGODAwMDAwMDAiLAorICAgIC8qIGEgdmFsdWUgdHlwaWNhbGx5IHVzZWQgZm9yIHJnYiBtYXNrcyAqLworICAgICIweEZGMDAwMDAwIiwKKyAgICAvKiBhIHBvc2l0aXZlIGxvbmcgbG9uZyBzZXJpYWxpemluZyB0byBoaWdoZXN0IHBvc3NpYmxlIHBvc2l0aXZlIHVpbnQgKi8KKyAgICAiMHhGRkZGRkZGRiIsCisgICAgIjB4RkZGRkZGRkYiLAorICAgIC8qIGEgbmVnYXRpdmUgbG9uZyBsb25nIHNlcmlhbGl6aW5nIHRvIGhpZ2hlc3QgcG9zc2libGUgcG9zaXRpdmUgdWludCAqLworICAgICIweEZGRkZGRkZGRkZGRkZGRkYiLAorICAgICIweEVGRkZGRkZGIiwKKyAgfTsKKyAgZ3VpbnQgcmVzdWx0c1tdID0geworICAgIDEyMzQ1NiwKKyAgICAoZ3VpbnQpIC0gMTIzNDU2LAorICAgIDB4RkZGRiwKKyAgICAweEZGRkYsCisgICAgMHg3RkZGRkZGRiwKKyAgICAweDgwMDAwMDAwLAorICAgIChndWludCkgMjE0NzQ4MzY0OExMLAorICAgIDB4ODAwMDAwMDAsCisgICAgMHhGRjAwMDAwMCwKKyAgICAweEZGRkZGRkZGLAorICAgIEdfTUFYVUlOVCwKKyAgICAoZ3VpbnQpIDB4RkZGRkZGRkZGRkZGRkZGRkxMLAorICAgIDB4RUZGRkZGRkYsCisgIH07CisgIGludCBpOworCisgIGdfdmFsdWVfaW5pdCAoJnZhbHVlLCBHX1RZUEVfVUlOVCk7CisKKyAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoc3RyaW5ncyk7ICsraSkgeworICAgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZGVzZXJpYWxpemUgKCZ2YWx1ZSwgc3RyaW5nc1tpXSksCisgICAgICAgICJjb3VsZCBub3QgZGVzZXJpYWxpemUgJXMgKCVkKSIsIHN0cmluZ3NbaV0sIGkpOworICAgIGZhaWxfdW5sZXNzIChnX3ZhbHVlX2dldF91aW50ICgmdmFsdWUpID09IHJlc3VsdHNbaV0sCisgICAgICAgICJyZXN1bHRpbmcgdmFsdWUgaXMgJWQsIG5vdCAlZCwgZm9yIHN0cmluZyAlcyAoJWQpIiwKKyAgICAgICAgZ192YWx1ZV9nZXRfdWludCAoJnZhbHVlKSwgcmVzdWx0c1tpXSwgc3RyaW5nc1tpXSwgaSk7CisgIH0KK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9kZXNlcmlhbGl6ZV9ndWludF9mYWlsdXJlcykKK3sKKyAgR1ZhbHVlIHZhbHVlID0geyAwIH07CisgIGNvbnN0IGNoYXIgKnN0cmluZ3NbXSA9IHsKKyAgICAiLSIsICAgICAgICAgICAgICAgICAgICAgICAgLyogbm90IGEgY29tcGxldGUgbnVtYmVyICovCisgICAgIi0gVEVTVCIsICAgICAgICAgICAgICAgICAgIC8qIG5vdCBhIGNvbXBsZXRlIG51bWJlciAqLworI2lmIDAKKy8qIEZJWE1FOiB0aGVzZSB2YWx1ZXMgc2hvdWxkIG5vdCBiZSBkZXNlcmlhbGl6YWJsZSwgc2luY2UgdGhleSBvdmVyZmxvdworICogdGhlIHRhcmdldCBmb3JtYXQgKi8KKyAgICAiMHgwMDAwMDAwMTAwMDAwMDAwIiwgICAgICAgLyogbG93ZXN0IGxvbmcgbG9uZyB0aGF0IGNhbm5vdCBmaXQgaW4gMzIgYml0cyAqLworICAgICIweEYwMDAwMDAwMDAwMDAwMDAiLAorICAgICIweEZGRkZGRkYwMDAwMDAwMDAiLAorICAgICIweEZGRkZGRkZGMDAwMDAwMDAiLAorICAgICIweDEwMDAwMDAwMDAwMDAwMDAwIiwgICAgICAvKiBmaXJzdCBudW1iZXIgdG9vIGxvbmcgdG8gZml0IGludG8gYSBsb25nIGxvbmcgKi8KKyAgICAvKiBpbnZlbnQgYSBuZXcgcHJvY2Vzc29yIGZpcnN0IGJlZm9yZSB0cnlpbmcgdG8gbWFrZSB0aGlzIG9uZSBwYXNzICovCisgICAgIjB4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLAorI2VuZGlmCisgIH07CisgIGludCBpOworCisgIGdfdmFsdWVfaW5pdCAoJnZhbHVlLCBHX1RZUEVfVUlOVCk7CisKKyAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoc3RyaW5ncyk7ICsraSkgeworICAgIGZhaWxfaWYgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZSAoJnZhbHVlLCBzdHJpbmdzW2ldKSwKKyAgICAgICAgImRlc2VyaWFsaXplZCAlcyAoJWQpLCB3aGlsZSBpdCBzaG91bGQgaGF2ZSBmYWlsZWQiLCBzdHJpbmdzW2ldLCBpKTsKKyAgfQorfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3NlcmlhbGl6ZV9mbGFncykKK3sKKyAgR1ZhbHVlIHZhbHVlID0geyAwIH07CisgIGdjaGFyICpzdHJpbmc7CisgIEdzdFNlZWtGbGFncyBmbGFnc1tdID0geworICAgIDAsCisgICAgR1NUX1NFRUtfRkxBR19OT05FLAorICAgIEdTVF9TRUVLX0ZMQUdfRkxVU0gsCisgICAgR1NUX1NFRUtfRkxBR19GTFVTSCB8IEdTVF9TRUVLX0ZMQUdfQUNDVVJBVEUsCisgIH07CisgIGNvbnN0IGNoYXIgKnJlc3VsdHNbXSA9IHsKKyAgICAiR1NUX1NFRUtfRkxBR19OT05FIiwKKyAgICAiR1NUX1NFRUtfRkxBR19OT05FIiwKKyAgICAiR1NUX1NFRUtfRkxBR19GTFVTSCIsCisgICAgIkdTVF9TRUVLX0ZMQUdfRkxVU0grR1NUX1NFRUtfRkxBR19BQ0NVUkFURSIsCisgIH07CisgIGludCBpOworCisgIGdfdmFsdWVfaW5pdCAoJnZhbHVlLCBHU1RfVFlQRV9TRUVLX0ZMQUdTKTsKKworICBmb3IgKGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTIChmbGFncyk7ICsraSkgeworICAgIGdfdmFsdWVfc2V0X2ZsYWdzICgmdmFsdWUsIGZsYWdzW2ldKTsKKyAgICBzdHJpbmcgPSBnc3RfdmFsdWVfc2VyaWFsaXplICgmdmFsdWUpOworICAgIGZhaWxfaWYgKHN0cmluZyA9PSBOVUxMLCAiY291bGQgbm90IHNlcmlhbGl6ZSBmbGFncyAlZCIsIGkpOworICAgIGZhaWxfdW5sZXNzIChzdHJjbXAgKHN0cmluZywgcmVzdWx0c1tpXSkgPT0gMCwKKyAgICAgICAgInJlc3VsdGluZyB2YWx1ZSBpcyAlcywgbm90ICVzLCBmb3IgZmxhZ3MgIyVkIiwgc3RyaW5nLCByZXN1bHRzW2ldLCBpKTsKKyAgICBnX2ZyZWUgKHN0cmluZyk7CisgIH0KK30KKworR1NUX0VORF9URVNUOworCisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2Rlc2VyaWFsaXplX2ZsYWdzKQoreworICBHVmFsdWUgdmFsdWUgPSB7IDAgfTsKKyAgY29uc3QgY2hhciAqc3RyaW5nc1tdID0geworICAgICIiLAorICAgICIwIiwKKyAgICAiR1NUX1NFRUtfRkxBR19OT05FIiwKKyAgICAiR1NUX1NFRUtfRkxBR19GTFVTSCIsCisgICAgIkdTVF9TRUVLX0ZMQUdfRkxVU0grR1NUX1NFRUtfRkxBR19BQ0NVUkFURSIsCisgIH07CisgIEdzdFNlZWtGbGFncyByZXN1bHRzW10gPSB7CisgICAgR1NUX1NFRUtfRkxBR19OT05FLAorICAgIEdTVF9TRUVLX0ZMQUdfTk9ORSwKKyAgICBHU1RfU0VFS19GTEFHX05PTkUsCisgICAgR1NUX1NFRUtfRkxBR19GTFVTSCwKKyAgICBHU1RfU0VFS19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxBR19BQ0NVUkFURSwKKyAgfTsKKyAgaW50IGk7CisKKyAgZ192YWx1ZV9pbml0ICgmdmFsdWUsIEdTVF9UWVBFX1NFRUtfRkxBR1MpOworCisgIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKHN0cmluZ3MpOyArK2kpIHsKKyAgICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplICgmdmFsdWUsIHN0cmluZ3NbaV0pLAorICAgICAgICAiY291bGQgbm90IGRlc2VyaWFsaXplICVzICglZCkiLCBzdHJpbmdzW2ldLCBpKTsKKyAgICBmYWlsX3VubGVzcyAoZ192YWx1ZV9nZXRfZmxhZ3MgKCZ2YWx1ZSkgPT0gcmVzdWx0c1tpXSwKKyAgICAgICAgInJlc3VsdGluZyB2YWx1ZSBpcyAlZCwgbm90ICVkLCBmb3Igc3RyaW5nICVzICglZCkiLAorICAgICAgICBnX3ZhbHVlX2dldF9mbGFncyAoJnZhbHVlKSwgcmVzdWx0c1tpXSwgc3RyaW5nc1tpXSwgaSk7CisgIH0KK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9zdHJpbmcpCit7CisgIGNvbnN0IGdjaGFyICp0cnlbXSA9IHsKKyAgICAiRHVkZSIsCisgICAgIkhpLCBJJ20gYSBzdHJpbmciLAorICAgICJ0w7zDvMO8dCEiLAorICAgICJcIlwiIiAgICAgICAgICAgICAgICAgICAgICAvKiBFbXB0eSBzdHJpbmcgKi8KKyAgfTsKKyAgZ2NoYXIgKnRtcDsKKyAgR1ZhbHVlIHYgPSB7IDAsIH07CisgIGd1aW50IGk7CisKKyAgZ192YWx1ZV9pbml0ICgmdiwgR19UWVBFX1NUUklORyk7CisgIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKHRyeSk7IGkrKykgeworICAgIGdfdmFsdWVfc2V0X3N0cmluZyAoJnYsIHRyeVtpXSk7CisgICAgdG1wID0gZ3N0X3ZhbHVlX3NlcmlhbGl6ZSAoJnYpOworICAgIGZhaWxfaWYgKHRtcCA9PSBOVUxMLCAiY291bGRuJ3Qgc2VyaWFsaXplOiAlc1xuIiwgdHJ5W2ldKTsKKyAgICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplICgmdiwgdG1wKSwKKyAgICAgICAgImNvdWxkbid0IGRlc2VyaWFsaXplOiAlc1xuIiwgdG1wKTsKKyAgICBnX2ZyZWUgKHRtcCk7CisKKyAgICBmYWlsX3VubGVzcyAoZ19zdHJfZXF1YWwgKGdfdmFsdWVfZ2V0X3N0cmluZyAoJnYpLCB0cnlbaV0pLAorICAgICAgICAiXG5zZXJpYWxpemVkICA6ICVzXG5kZXNlcmlhbGl6ZWQ6ICVzIiwgdHJ5W2ldLAorICAgICAgICBnX3ZhbHVlX2dldF9zdHJpbmcgKCZ2KSk7CisgIH0KKyAgLyogTlVMTCBzdHJpbmdzIHNob3VsZCBub3QgYmUgc2VyaWFsaXphYmxlICovCisgIGdfdmFsdWVfc2V0X3N0cmluZyAoJnYsIE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX3NlcmlhbGl6ZSAoJnYpID09IE5VTEwpOworICBnX3ZhbHVlX3Vuc2V0ICgmdik7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfZGVzZXJpYWxpemVfc3RyaW5nKQoreworICBzdHJ1Y3QKKyAgeworICAgIGNvbnN0IGdjaGFyICpmcm9tOworICAgIGNvbnN0IGdjaGFyICp0bzsKKyAgfSB0ZXN0c1tdID0geworICAgIHsKKyAgICAiIiwgIiJ9LCAgICAgICAgICAgICAgICAgICAgLyogZW1wdHkgc3RyaW5ncyAqLworICAgIHsKKyAgICAiXCJcIiIsICIifSwgICAgICAgICAgICAgICAgLyogcXVvdGVkIGVtcHR5IHN0cmluZyAtPiBlbXB0eSBzdHJpbmcgKi8KKyAgICAgICAgLyogRXhwZWN0ZWQgRkFJTFVSRVM6ICovCisgICAgeworICAgICJcIiIsIE5VTEx9LCAgICAgICAgICAgICAgICAvKiBtaXNzaW5nIHNlY29uZCBxdW90ZSAqLworICAgIHsKKyAgICAiXCJIZWxsb1xcIFdvcmxkIiwgTlVMTH0sICAgLyogbWlzc2luZyBzZWNvbmQgcXVvdGUgKi8KKyAgICB7CisgICAgIlwiXFwiLCBOVUxMfSwgICAgICAgICAgICAgIC8qIHF1b3RlIGF0IGVuZCwgbWlzc2luZyBzZWNvbmQgcXVvdGUgKi8KKyAgICB7CisgICAgIlwiXFwwIiwgTlVMTH0sICAgICAgICAgICAgIC8qIG1pc3Npbmcgc2Vjb25kIHF1b3RlICovCisgICAgeworICAgICJcIlxcMFwiIiwgTlVMTH0sICAgICAgICAgICAvKiB1bmZpbmlzaGVkIGVzY2FwZWQgY2hhcmFjdGVyICovCisgICAgeworICAgICJcIiBcIiIsIE5VTEx9LCAgICAgICAgICAgICAvKiBzcGFjZXMgbXVzdCBiZSBlc2NhcGVkICovCisjaWYgMAorICAgICAgICAvKiBGSVhNRSAwLjk6IHRoaXMgdGVzdCBzaG91bGQgZmFpbCwgYnV0IGl0IGRvZXNuJ3QgKi8KKyAgICB7CisgICAgInTDvMO8dCIsIE5VTEx9ICAgICAgICAgICAgIC8qIHN0cmluZyB3aXRoIHNwZWNpYWwgY2hhcnMgbXVzdCBiZSBlc2NhcGVkICovCisjZW5kaWYKKyAgfTsKKyAgZ3VpbnQgaTsKKyAgR1ZhbHVlIHYgPSB7IDAsIH07CisKKyAgZ192YWx1ZV9pbml0ICgmdiwgR19UWVBFX1NUUklORyk7CisgIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKHRlc3RzKTsgaSsrKSB7CisgICAgaWYgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZSAoJnYsIHRlc3RzW2ldLmZyb20pKSB7CisgICAgICBmYWlsX2lmICh0ZXN0c1tpXS50byA9PSBOVUxMLAorICAgICAgICAgICJJIGdvdCAlcyBpbnN0ZWFkIG9mIGEgZmFpbHVyZSIsIGdfdmFsdWVfZ2V0X3N0cmluZyAoJnYpKTsKKyAgICAgIGZhaWxfdW5sZXNzIChnX3N0cl9lcXVhbCAoZ192YWx1ZV9nZXRfc3RyaW5nICgmdiksIHRlc3RzW2ldLnRvKSwKKyAgICAgICAgICAiXG53YW50ZWQ6ICVzXG5nb3QgICAgOiAlcyIsIHRlc3RzW2ldLnRvLCBnX3ZhbHVlX2dldF9zdHJpbmcgKCZ2KSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGZhaWxfaWYgKHRlc3RzW2ldLnRvICE9IE5VTEwsICJmYWlsZWQsIGJ1dCB3YW50ZWQ6ICVzIiwgdGVzdHNbaV0udG8pOworICAgIH0KKyAgfQorICBnX3ZhbHVlX3Vuc2V0ICgmdik7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfdmFsdWVfY29tcGFyZSkKK3sKKyAgR1ZhbHVlIHZhbHVlMSA9IHsgMCB9OworICBHVmFsdWUgdmFsdWUyID0geyAwIH07CisgIEdWYWx1ZSB0bXAgPSB7IDAgfTsKKworICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZTEsIEdfVFlQRV9JTlQpOworICBnX3ZhbHVlX3NldF9pbnQgKCZ2YWx1ZTEsIDEwKTsKKyAgZ192YWx1ZV9pbml0ICgmdmFsdWUyLCBHX1RZUEVfSU5UKTsKKyAgZ192YWx1ZV9zZXRfaW50ICgmdmFsdWUyLCAyMCk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMSwgJnZhbHVlMikgPT0gR1NUX1ZBTFVFX0xFU1NfVEhBTik7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMiwgJnZhbHVlMSkgPT0gR1NUX1ZBTFVFX0dSRUFURVJfVEhBTik7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMSwgJnZhbHVlMSkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKKyAgZ192YWx1ZV91bnNldCAoJnZhbHVlMSk7CisgIGdfdmFsdWVfdW5zZXQgKCZ2YWx1ZTIpOworCisgIGdfdmFsdWVfaW5pdCAoJnZhbHVlMSwgR19UWVBFX0RPVUJMRSk7CisgIGdfdmFsdWVfc2V0X2RvdWJsZSAoJnZhbHVlMSwgMTApOworICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZTIsIEdfVFlQRV9ET1VCTEUpOworICBnX3ZhbHVlX3NldF9kb3VibGUgKCZ2YWx1ZTIsIDIwKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmdmFsdWUxLCAmdmFsdWUyKSA9PSBHU1RfVkFMVUVfTEVTU19USEFOKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmdmFsdWUyLCAmdmFsdWUxKSA9PSBHU1RfVkFMVUVfR1JFQVRFUl9USEFOKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmdmFsdWUxLCAmdmFsdWUxKSA9PSBHU1RfVkFMVUVfRVFVQUwpOworICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUxKTsKKyAgZ192YWx1ZV91bnNldCAoJnZhbHVlMik7CisKKyAgZ192YWx1ZV9pbml0ICgmdmFsdWUxLCBHX1RZUEVfU1RSSU5HKTsKKyAgZ192YWx1ZV9zZXRfc3RyaW5nICgmdmFsdWUxLCAiYSIpOworICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZTIsIEdfVFlQRV9TVFJJTkcpOworICBnX3ZhbHVlX3NldF9zdHJpbmcgKCZ2YWx1ZTIsICJiIik7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMSwgJnZhbHVlMikgPT0gR1NUX1ZBTFVFX0xFU1NfVEhBTik7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMiwgJnZhbHVlMSkgPT0gR1NUX1ZBTFVFX0dSRUFURVJfVEhBTik7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMSwgJnZhbHVlMSkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKKyAgLyogVGVzdCBzb21lIE5VTEwgc3RyaW5nIGNvbXBhcmlzb25zICovCisgIGdfdmFsdWVfc2V0X3N0cmluZyAoJnZhbHVlMiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMSwgJnZhbHVlMikgPT0gR1NUX1ZBTFVFX1VOT1JERVJFRCk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMiwgJnZhbHVlMSkgPT0gR1NUX1ZBTFVFX1VOT1JERVJFRCk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMiwgJnZhbHVlMikgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKKworICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUxKTsKKyAgZ192YWx1ZV91bnNldCAoJnZhbHVlMik7CisKKyAgLyogY29tcGFyaW5nIDIvMyB3aXRoIDMvNCAqLworICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZTEsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJnZhbHVlMSwgMiwgMyk7CisgIGdfdmFsdWVfaW5pdCAoJnZhbHVlMiwgR1NUX1RZUEVfRlJBQ1RJT04pOworICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmdmFsdWUyLCAzLCA0KTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmdmFsdWUxLCAmdmFsdWUyKSA9PSBHU1RfVkFMVUVfTEVTU19USEFOKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmdmFsdWUyLCAmdmFsdWUxKSA9PSBHU1RfVkFMVUVfR1JFQVRFUl9USEFOKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmdmFsdWUxLCAmdmFsdWUxKSA9PSBHU1RfVkFMVUVfRVFVQUwpOworICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUxKTsKKyAgZ192YWx1ZV91bnNldCAoJnZhbHVlMik7CisKKyAgLyogY29tcGFyaW5nIC00LzUgd2l0aCAyLy0zICovCisgIGdfdmFsdWVfaW5pdCAoJnZhbHVlMSwgR1NUX1RZUEVfRlJBQ1RJT04pOworICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmdmFsdWUxLCAtNCwgNSk7CisgIGdfdmFsdWVfaW5pdCAoJnZhbHVlMiwgR1NUX1RZUEVfRlJBQ1RJT04pOworICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmdmFsdWUyLCAyLCAtMyk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMSwgJnZhbHVlMikgPT0gR1NUX1ZBTFVFX0xFU1NfVEhBTik7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMiwgJnZhbHVlMSkgPT0gR1NUX1ZBTFVFX0dSRUFURVJfVEhBTik7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMSwgJnZhbHVlMSkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKKyAgZ192YWx1ZV91bnNldCAoJnZhbHVlMSk7CisgIGdfdmFsdWVfdW5zZXQgKCZ2YWx1ZTIpOworCisgIC8qIGNvbXBhcmluZyAxMC8xMDAgd2l0aCAyMDAvMjAwMCAqLworICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZTEsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJnZhbHVlMSwgMTAsIDEwMCk7CisgIGdfdmFsdWVfaW5pdCAoJnZhbHVlMiwgR1NUX1RZUEVfRlJBQ1RJT04pOworICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmdmFsdWUyLCAyMDAsIDIwMDApOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZ2YWx1ZTEsICZ2YWx1ZTIpID09IEdTVF9WQUxVRV9FUVVBTCk7CisgIGdfdmFsdWVfdW5zZXQgKCZ2YWx1ZTEpOworICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUyKTsKKworICAvKiBjb21wYXJpbmcgLTQvNSB3aXRoIDIvLTMgKi8KKyAgZ192YWx1ZV9pbml0ICgmdmFsdWUxLCBHU1RfVFlQRV9GUkFDVElPTik7CisgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZ2YWx1ZTEsIC00LCA1KTsKKyAgZ192YWx1ZV9pbml0ICgmdmFsdWUyLCBHU1RfVFlQRV9GUkFDVElPTik7CisgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZ2YWx1ZTIsIDIsIC0zKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmdmFsdWUxLCAmdmFsdWUyKSA9PSBHU1RfVkFMVUVfTEVTU19USEFOKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmdmFsdWUyLCAmdmFsdWUxKSA9PSBHU1RfVkFMVUVfR1JFQVRFUl9USEFOKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmdmFsdWUxLCAmdmFsdWUxKSA9PSBHU1RfVkFMVUVfRVFVQUwpOworICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUxKTsKKyAgZ192YWx1ZV91bnNldCAoJnZhbHVlMik7CisKKyAgLyogQ2hlY2sgdGhhdCBsaXN0cyBhcmUgZXF1YWwgcmVnYXJkbGVzcyBvZiBvcmRlciAqLworICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZTEsIEdTVF9UWVBFX0xJU1QpOworICBnX3ZhbHVlX2luaXQgKCZ0bXAsIEdfVFlQRV9JTlQpOworICBnX3ZhbHVlX3NldF9pbnQgKCZ0bXAsIDEpOworICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZ2YWx1ZTEsICZ0bXApOworICBnX3ZhbHVlX3NldF9pbnQgKCZ0bXAsIDIpOworICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZ2YWx1ZTEsICZ0bXApOworICBnX3ZhbHVlX3NldF9pbnQgKCZ0bXAsIDMpOworICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZ2YWx1ZTEsICZ0bXApOworICBnX3ZhbHVlX3NldF9pbnQgKCZ0bXAsIDQpOworICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZ2YWx1ZTEsICZ0bXApOworCisgIGdfdmFsdWVfaW5pdCAoJnZhbHVlMiwgR1NUX1RZUEVfTElTVCk7CisgIGdfdmFsdWVfc2V0X2ludCAoJnRtcCwgNCk7CisgIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoJnZhbHVlMiwgJnRtcCk7CisgIGdfdmFsdWVfc2V0X2ludCAoJnRtcCwgMyk7CisgIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoJnZhbHVlMiwgJnRtcCk7CisgIGdfdmFsdWVfc2V0X2ludCAoJnRtcCwgMik7CisgIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoJnZhbHVlMiwgJnRtcCk7CisgIGdfdmFsdWVfc2V0X2ludCAoJnRtcCwgMSk7CisgIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoJnZhbHVlMiwgJnRtcCk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmdmFsdWUxLCAmdmFsdWUyKSA9PSBHU1RfVkFMVUVfRVFVQUwsCisgICAgICAidmFsdWUgbGlzdHMgd2l0aCBkaWZmZXJlbnQgb3JkZXIgd2VyZSBub3QgZXF1YWwgd2hlbiB0aGV5IHNob3VsZCBiZSIpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZ2YWx1ZTEsICZ2YWx1ZTEpID09IEdTVF9WQUxVRV9FUVVBTCwKKyAgICAgICJ2YWx1ZSBsaXN0cyB3aXRoIHNhbWUgb3JkZXIgd2VyZSBub3QgZXF1YWwgd2hlbiB0aGV5IHNob3VsZCBiZSIpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZ2YWx1ZTIsICZ2YWx1ZTIpID09IEdTVF9WQUxVRV9FUVVBTCwKKyAgICAgICJ2YWx1ZSBsaXN0cyB3aXRoIHNhbWUgb3JkZXIgd2VyZSBub3QgZXF1YWwgd2hlbiB0aGV5IHNob3VsZCBiZSIpOworCisgIC8qIENhcnJ5IG92ZXIgdGhlIGxpc3RzIHRvIHRoaXMgbmV4dCBjaGVjazogKi8KKyAgLyogTGlzdHMgd2l0aCBkaWZmZXJlbnQgc2l6ZXMgYXJlIHVuZXF1YWwgKi8KKyAgZ192YWx1ZV9zZXRfaW50ICgmdG1wLCAxKTsKKyAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlICgmdmFsdWUyLCAmdG1wKTsKKworICBmYWlsX2lmIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMSwgJnZhbHVlMikgPT0gR1NUX1ZBTFVFX0VRVUFMLAorICAgICAgIlZhbHVlIGxpc3RzIHdpdGggZGlmZmVyZW50IHNpemUgd2VyZSBlcXVhbCB3aGVuIHRoZXkgc2hvdWxkbid0IGJlIik7CisKKyAgLyogQ2Fycnkgb3ZlciB0aGUgbGlzdHMgdG8gdGhpcyBuZXh0IGNoZWNrOiAqLworICAvKiBMaXN0cyB3aXRoIHNhbWUgc2l6ZSBidXQgbGlzdDEgY29udGFpbnMgb25lIG1vcmUgZWxlbWVudCBub3QgaW4gbGlzdDIgKi8KKyAgZ192YWx1ZV9zZXRfaW50ICgmdG1wLCA1KTsKKyAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlICgmdmFsdWUxLCAmdG1wKTsKKworICBmYWlsX2lmIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMSwgJnZhbHVlMikgPT0gR1NUX1ZBTFVFX0VRVUFMLAorICAgICAgIlZhbHVlIGxpc3RzIHdpdGggZGlmZmVyZW50IGVsZW1lbnRzIHdlcmUgZXF1YWwgd2hlbiB0aGV5IHNob3VsZG4ndCBiZSIpOworICBmYWlsX2lmIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMiwgJnZhbHVlMSkgPT0gR1NUX1ZBTFVFX0VRVUFMLAorICAgICAgIlZhbHVlIGxpc3RzIHdpdGggZGlmZmVyZW50IGVsZW1lbnRzIHdlcmUgZXF1YWwgd2hlbiB0aGV5IHNob3VsZG4ndCBiZSIpOworCisgIGdfdmFsdWVfdW5zZXQgKCZ2YWx1ZTEpOworICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUyKTsKKyAgZ192YWx1ZV91bnNldCAoJnRtcCk7CisKKyAgLyogQXJyYXlzIGFyZSBvbmx5IGVxdWFsIHdoZW4gaW4gdGhlIHNhbWUgb3JkZXIgKi8KKyAgZ192YWx1ZV9pbml0ICgmdmFsdWUxLCBHU1RfVFlQRV9BUlJBWSk7CisgIGdfdmFsdWVfaW5pdCAoJnRtcCwgR19UWVBFX0lOVCk7CisgIGdfdmFsdWVfc2V0X2ludCAoJnRtcCwgMSk7CisgIGdzdF92YWx1ZV9hcnJheV9hcHBlbmRfdmFsdWUgKCZ2YWx1ZTEsICZ0bXApOworICBnX3ZhbHVlX3NldF9pbnQgKCZ0bXAsIDIpOworICBnc3RfdmFsdWVfYXJyYXlfYXBwZW5kX3ZhbHVlICgmdmFsdWUxLCAmdG1wKTsKKyAgZ192YWx1ZV9zZXRfaW50ICgmdG1wLCAzKTsKKyAgZ3N0X3ZhbHVlX2FycmF5X2FwcGVuZF92YWx1ZSAoJnZhbHVlMSwgJnRtcCk7CisgIGdfdmFsdWVfc2V0X2ludCAoJnRtcCwgNCk7CisgIGdzdF92YWx1ZV9hcnJheV9hcHBlbmRfdmFsdWUgKCZ2YWx1ZTEsICZ0bXApOworCisgIGdfdmFsdWVfaW5pdCAoJnZhbHVlMiwgR1NUX1RZUEVfQVJSQVkpOworICBnX3ZhbHVlX3NldF9pbnQgKCZ0bXAsIDQpOworICBnc3RfdmFsdWVfYXJyYXlfYXBwZW5kX3ZhbHVlICgmdmFsdWUyLCAmdG1wKTsKKyAgZ192YWx1ZV9zZXRfaW50ICgmdG1wLCAzKTsKKyAgZ3N0X3ZhbHVlX2FycmF5X2FwcGVuZF92YWx1ZSAoJnZhbHVlMiwgJnRtcCk7CisgIGdfdmFsdWVfc2V0X2ludCAoJnRtcCwgMik7CisgIGdzdF92YWx1ZV9hcnJheV9hcHBlbmRfdmFsdWUgKCZ2YWx1ZTIsICZ0bXApOworICBnX3ZhbHVlX3NldF9pbnQgKCZ0bXAsIDEpOworICBnc3RfdmFsdWVfYXJyYXlfYXBwZW5kX3ZhbHVlICgmdmFsdWUyLCAmdG1wKTsKKworICBmYWlsX2lmIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMSwgJnZhbHVlMikgPT0gR1NUX1ZBTFVFX0VRVUFMLAorICAgICAgIlZhbHVlIGFycmF5cyB3aXRoIGRpZmZlcmVudCBvcmRlciB3ZXJlIGVxdWFsIHdoZW4gdGhleSBzaG91bGRuJ3QgYmUiKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmdmFsdWUxLCAmdmFsdWUxKSA9PSBHU1RfVkFMVUVfRVFVQUwsCisgICAgICAiSWRlbnRpY2FsIHZhbHVlIGFycmF5cyB3ZXJlIG5vdCBlcXVhbCB3aGVuIHRoZXkgc2hvdWxkIGJlIik7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMiwgJnZhbHVlMikgPT0gR1NUX1ZBTFVFX0VRVUFMLAorICAgICAgIklkZW50aWNhbCB2YWx1ZSBhcnJheXMgd2VyZSBub3QgZXF1YWwgd2hlbiB0aGV5IHNob3VsZCBiZSIpOworCisgIC8qIENhcnJ5IG92ZXIgdGhlIGFycmF5cyB0byB0aGlzIG5leHQgY2hlY2s6ICovCisgIC8qIEFycmF5cyB3aXRoIGRpZmZlcmVudCBzaXplcyBhcmUgdW5lcXVhbCAqLworICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUyKTsKKyAgZ192YWx1ZV9pbml0ICgmdmFsdWUyLCBHU1RfVFlQRV9BUlJBWSk7CisgIGdfdmFsdWVfY29weSAoJnZhbHVlMSwgJnZhbHVlMik7CisKKyAgZ192YWx1ZV9zZXRfaW50ICgmdG1wLCAxKTsKKyAgZ3N0X3ZhbHVlX2FycmF5X2FwcGVuZF92YWx1ZSAoJnZhbHVlMiwgJnRtcCk7CisKKyAgZmFpbF9pZiAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZ2YWx1ZTEsICZ2YWx1ZTIpID09IEdTVF9WQUxVRV9FUVVBTCwKKyAgICAgICJWYWx1ZSBhcnJheXMgd2l0aCBkaWZmZXJlbnQgc2l6ZSB3ZXJlIGVxdWFsIHdoZW4gdGhleSBzaG91bGRuJ3QgYmUiKTsKKyAgLyogb3JkZXIgc2hvdWxkIG5vdCBtYXR0ZXIgKi8KKyAgZmFpbF9pZiAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZ2YWx1ZTIsICZ2YWx1ZTEpID09IEdTVF9WQUxVRV9FUVVBTCwKKyAgICAgICJWYWx1ZSBhcnJheXMgd2l0aCBkaWZmZXJlbnQgc2l6ZSB3ZXJlIGVxdWFsIHdoZW4gdGhleSBzaG91bGRuJ3QgYmUiKTsKKworICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUxKTsKKyAgZ192YWx1ZV91bnNldCAoJnZhbHVlMik7CisgIGdfdmFsdWVfdW5zZXQgKCZ0bXApOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3ZhbHVlX2ludGVyc2VjdCkKK3sKKyAgR1ZhbHVlIGRlc3QgPSB7IDAgfTsKKyAgR1ZhbHVlIHNyYzEgPSB7IDAgfTsKKyAgR1ZhbHVlIHNyYzIgPSB7IDAgfTsKKyAgR1ZhbHVlIGl0ZW0gPSB7IDAgfTsKKyAgZ2Jvb2xlYW4gcmV0OworCisgIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdfVFlQRV9JTlQpOworICBnX3ZhbHVlX3NldF9pbnQgKCZzcmMxLCAxMCk7CisgIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdfVFlQRV9JTlQpOworICBnX3ZhbHVlX3NldF9pbnQgKCZzcmMyLCAyMCk7CisgIHJldCA9IGdzdF92YWx1ZV9pbnRlcnNlY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzIpOworICBmYWlsX3VubGVzcyAocmV0ID09IEZBTFNFKTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzEpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7CisKKyAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR19UWVBFX1NUUklORyk7CisgIGdfdmFsdWVfc2V0X3N0cmluZyAoJnNyYzEsICJZVVkyIik7CisgIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0xJU1QpOworICBnX3ZhbHVlX2luaXQgKCZpdGVtLCBHX1RZUEVfU1RSSU5HKTsKKyAgZ192YWx1ZV9zZXRfc3RyaW5nICgmaXRlbSwgIllVWTIiKTsKKyAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlICgmc3JjMiwgJml0ZW0pOworICBnX3ZhbHVlX3NldF9zdHJpbmcgKCZpdGVtLCAiSTQyMCIpOworICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZzcmMyLCAmaXRlbSk7CisgIGdfdmFsdWVfc2V0X3N0cmluZyAoJml0ZW0sICJBQkNEIik7CisgIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoJnNyYzIsICZpdGVtKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2ludGVyc2VjdCAoJmRlc3QsICZzcmMxLCAmc3JjMikpOworICBmYWlsX3VubGVzcyAoR19WQUxVRV9IT0xEU19TVFJJTkcgKCZkZXN0KSk7CisgIGZhaWxfdW5sZXNzIChnX3N0cl9lcXVhbCAoZ192YWx1ZV9nZXRfc3RyaW5nICgmZGVzdCksICJZVVkyIikpOworCisgIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzIpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfdmFsdWVfc3VidHJhY3RfaW50KQoreworICBHVmFsdWUgZGVzdCA9IHsgMCB9OworICBHVmFsdWUgc3JjMSA9IHsgMCB9OworICBHVmFsdWUgc3JjMiA9IHsgMCB9OworICBjb25zdCBHVmFsdWUgKnRtcDsKKyAgZ2Jvb2xlYW4gcmV0OworCisgIC8qICBpbnQgPC0+IGludAorICAgKi8KKyAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR19UWVBFX0lOVCk7CisgIGdfdmFsdWVfc2V0X2ludCAoJnNyYzEsIDEwKTsKKyAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR19UWVBFX0lOVCk7CisgIGdfdmFsdWVfc2V0X2ludCAoJnNyYzIsIDIwKTsKKyAgLyogc3VidHJhY3QgYXMgaW4gc2V0cywgcmVzdWx0IGlzIDEwICovCisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJmRlc3QsICZzcmMxKSA9PSBHU1RfVkFMVUVfRVFVQUwpOworICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7CisKKyAgLyogc2FtZSB2YWx1ZXMsIHlpZWxkcyBlbXB0eSBzZXQgKi8KKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMxKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzIpOworCisgIC8qICBpbnQgPC0+IGludF9yYW5nZQorICAgKi8KKworICAvKiB3b3VsZCB5aWVsZCBhbiBlbXB0eSBzZXQgKi8KKyAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR19UWVBFX0lOVCk7CisgIGdfdmFsdWVfc2V0X2ludCAoJnNyYzEsIDEwKTsKKyAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfSU5UX1JBTkdFKTsKKyAgZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2UgKCZzcmMyLCAwLCAyMCk7CisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOworCisgIC8qIGFuZCB0aGUgb3RoZXIgd2F5IGFyb3VuZCwgc2hvdWxkIGNyZWF0ZSBhIGxpc3Qgb2YgdHdvIHJhbmdlcy4gKi8KKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19MSVNUICgmZGVzdCkgPT0gVFJVRSk7CisgIHRtcCA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoJmRlc3QsIDApOworICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRSAodG1wKSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAodG1wKSA9PSAwKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heCAodG1wKSA9PSA5KTsKKyAgdG1wID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlICgmZGVzdCwgMSk7CisgIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfSU5UX1JBTkdFICh0bXApID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWluICh0bXApID09IDExKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heCAodG1wKSA9PSAyMCk7CisgIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzEpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7CisKKyAgLyogYm9yZGVyIGNhc2UgMSwgZW1wdHkgc2V0ICovCisgIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdfVFlQRV9JTlQpOworICBnX3ZhbHVlX3NldF9pbnQgKCZzcmMxLCAxMCk7CisgIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0lOVF9SQU5HRSk7CisgIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlICgmc3JjMiwgMTAsIDIwKTsKKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7CisKKyAgLyogYW5kIHRoZSBvdGhlciB3YXkgYXJvdW5kLCBzaG91bGQgY3JlYXRlIGEgbmV3IHJhbmdlLiAqLworICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOworICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRSAoJmRlc3QpID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWluICgmZGVzdCkgPT0gMTEpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWF4ICgmZGVzdCkgPT0gMjApOworICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzIpOworCisgIC8qIGJvcmRlciBjYXNlIDIsIGVtcHR5IHNldCAqLworICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHX1RZUEVfSU5UKTsKKyAgZ192YWx1ZV9zZXRfaW50ICgmc3JjMSwgMjApOworICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9JTlRfUkFOR0UpOworICBnc3RfdmFsdWVfc2V0X2ludF9yYW5nZSAoJnNyYzIsIDEwLCAyMCk7CisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOworCisgIC8qIGFuZCB0aGUgb3RoZXIgd2F5IGFyb3VuZCwgc2hvdWxkIGNyZWF0ZSBhIG5ldyByYW5nZS4gKi8KKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19JTlRfUkFOR0UgKCZkZXN0KSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAoJmRlc3QpID09IDEwKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heCAoJmRlc3QpID09IDE5KTsKKyAgZ192YWx1ZV91bnNldCAoJmRlc3QpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKKworICAvKiBjYXNlIDMsIHZhbGlkIHNldCAqLworICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHX1RZUEVfSU5UKTsKKyAgZ192YWx1ZV9zZXRfaW50ICgmc3JjMSwgMCk7CisgIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0lOVF9SQU5HRSk7CisgIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlICgmc3JjMiwgMTAsIDIwKTsKKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKEdfVkFMVUVfSE9MRFNfSU5UICgmZGVzdCkgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJmRlc3QsICZzcmMxKSA9PSBHU1RfVkFMVUVfRVFVQUwpOworICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7CisKKyAgLyogYW5kIHRoZSBvdGhlciB3YXkgYXJvdW5kLCBzaG91bGQga2VlcCB0aGUgcmFuZ2UuICovCisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMyLCAmc3JjMSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfSU5UX1JBTkdFICgmZGVzdCkgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW4gKCZkZXN0KSA9PSAxMCk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXggKCZkZXN0KSA9PSAyMCk7CisgIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzEpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7CisKKyAgLyogIGludF9yYW5nZSA8LT4gaW50X3JhbmdlCisgICAqLworCisgIC8qIHNhbWUgcmFuZ2UsIGVtcHR5IHNldCAqLworICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHU1RfVFlQRV9JTlRfUkFOR0UpOworICBnc3RfdmFsdWVfc2V0X2ludF9yYW5nZSAoJnNyYzEsIDEwLCAyMCk7CisgIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0lOVF9SQU5HRSk7CisgIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlICgmc3JjMiwgMTAsIDIwKTsKKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7CisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMyLCAmc3JjMSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKKworICAvKiBub24gb3ZlcmxhcHBpbmcgcmFuZ2VzICovCisgIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdTVF9UWVBFX0lOVF9SQU5HRSk7CisgIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlICgmc3JjMSwgMTAsIDIwKTsKKyAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfSU5UX1JBTkdFKTsKKyAgZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2UgKCZzcmMyLCAzMCwgNDApOworICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzIpOworICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRSAoJmRlc3QpID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWluICgmZGVzdCkgPT0gMTApOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWF4ICgmZGVzdCkgPT0gMjApOworICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7CisgIC8qIHRoZSBvdGhlciB3YXkgKi8KKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19JTlRfUkFOR0UgKCZkZXN0KSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAoJmRlc3QpID09IDMwKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heCAoJmRlc3QpID09IDQwKTsKKyAgZ192YWx1ZV91bnNldCAoJmRlc3QpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKKworICAvKiBjb21wbGV0ZWx5IG92ZXJsYXBwaW5nIHJhbmdlcyAqLworICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHU1RfVFlQRV9JTlRfUkFOR0UpOworICBnc3RfdmFsdWVfc2V0X2ludF9yYW5nZSAoJnNyYzEsIDEwLCAyMCk7CisgIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0lOVF9SQU5HRSk7CisgIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlICgmc3JjMiwgMTAsIDMwKTsKKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7CisgIC8qIHRoZSBvdGhlciB3YXkgKi8KKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19JTlRfUkFOR0UgKCZkZXN0KSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAoJmRlc3QpID09IDIxKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heCAoJmRlc3QpID09IDMwKTsKKyAgZ192YWx1ZV91bnNldCAoJmRlc3QpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKKworICAvKiBwYXJ0aWFsbHkgb3ZlcmxhcHBpbmcgcmFuZ2VzICovCisgIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdTVF9UWVBFX0lOVF9SQU5HRSk7CisgIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlICgmc3JjMSwgMTAsIDIwKTsKKyAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfSU5UX1JBTkdFKTsKKyAgZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2UgKCZzcmMyLCAxNSwgMzApOworICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzIpOworICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRSAoJmRlc3QpID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWluICgmZGVzdCkgPT0gMTApOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWF4ICgmZGVzdCkgPT0gMTQpOworICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7CisgIC8qIHRoZSBvdGhlciB3YXkgKi8KKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19JTlRfUkFOR0UgKCZkZXN0KSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAoJmRlc3QpID09IDIxKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heCAoJmRlc3QpID09IDMwKTsKKyAgZ192YWx1ZV91bnNldCAoJmRlc3QpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKKworICAvKiBjcmVhdGUgYSBob2xlIHsgaW50X3JhbmdlLCBpbnRfcmFuZ2UgfSAqLworICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHU1RfVFlQRV9JTlRfUkFOR0UpOworICBnc3RfdmFsdWVfc2V0X2ludF9yYW5nZSAoJnNyYzEsIDEwLCAzMCk7CisgIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0lOVF9SQU5HRSk7CisgIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlICgmc3JjMiwgMTUsIDIwKTsKKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19MSVNUICgmZGVzdCkgPT0gVFJVRSk7CisgIHRtcCA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoJmRlc3QsIDApOworICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRSAodG1wKSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAodG1wKSA9PSAxMCk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXggKHRtcCkgPT0gMTQpOworICB0bXAgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKCZkZXN0LCAxKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19JTlRfUkFOR0UgKHRtcCkgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW4gKHRtcCkgPT0gMjEpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWF4ICh0bXApID09IDMwKTsKKyAgZ192YWx1ZV91bnNldCAoJmRlc3QpOworICAvKiB0aGUgb3RoZXIgd2F5ICovCisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMyLCAmc3JjMSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKKworICAvKiBjcmVhdGUgYSBob2xlLCB7IGludCwgaW50IH0gKi8KKyAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR1NUX1RZUEVfSU5UX1JBTkdFKTsKKyAgZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2UgKCZzcmMxLCAxMCwgMzApOworICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9JTlRfUkFOR0UpOworICBnc3RfdmFsdWVfc2V0X2ludF9yYW5nZSAoJnNyYzIsIDExLCAyOSk7CisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfTElTVCAoJmRlc3QpID09IFRSVUUpOworICB0bXAgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKCZkZXN0LCAwKTsKKyAgZmFpbF91bmxlc3MgKEdfVkFMVUVfSE9MRFNfSU5UICh0bXApID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ192YWx1ZV9nZXRfaW50ICh0bXApID09IDEwKTsKKyAgdG1wID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlICgmZGVzdCwgMSk7CisgIGZhaWxfdW5sZXNzIChHX1ZBTFVFX0hPTERTX0lOVCAodG1wKSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X2ludCAodG1wKSA9PSAzMCk7CisgIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKKyAgLyogdGhlIG90aGVyIHdheSAqLworICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOworICBmYWlsX3VubGVzcyAocmV0ID09IEZBTFNFKTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzEpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7CisKKyAgLyogY3JlYXRlIGEgaG9sZSwgeyBpbnQsIGludF9yYW5nZSB9ICovCisgIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdTVF9UWVBFX0lOVF9SQU5HRSk7CisgIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlICgmc3JjMSwgMTAsIDMwKTsKKyAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfSU5UX1JBTkdFKTsKKyAgZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2UgKCZzcmMyLCAxMSwgMjgpOworICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzIpOworICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0xJU1QgKCZkZXN0KSA9PSBUUlVFKTsKKyAgdG1wID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlICgmZGVzdCwgMCk7CisgIGZhaWxfdW5sZXNzIChHX1ZBTFVFX0hPTERTX0lOVCAodG1wKSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X2ludCAodG1wKSA9PSAxMCk7CisgIHRtcCA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoJmRlc3QsIDEpOworICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRSAodG1wKSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAodG1wKSA9PSAyOSk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXggKHRtcCkgPT0gMzApOworICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7CisgIC8qIHRoZSBvdGhlciB3YXkgKi8KKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzIpOworCisgIC8qIGNyZWF0ZSBhIGhvbGUsIHsgaW50X3JhbmdlLCBpbnQgfSAqLworICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHU1RfVFlQRV9JTlRfUkFOR0UpOworICBnc3RfdmFsdWVfc2V0X2ludF9yYW5nZSAoJnNyYzEsIDEwLCAzMCk7CisgIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0lOVF9SQU5HRSk7CisgIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlICgmc3JjMiwgMTIsIDI5KTsKKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19MSVNUICgmZGVzdCkgPT0gVFJVRSk7CisgIHRtcCA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoJmRlc3QsIDApOworICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRSAodG1wKSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAodG1wKSA9PSAxMCk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXggKHRtcCkgPT0gMTEpOworICB0bXAgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKCZkZXN0LCAxKTsKKyAgZmFpbF91bmxlc3MgKEdfVkFMVUVfSE9MRFNfSU5UICh0bXApID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ192YWx1ZV9nZXRfaW50ICh0bXApID09IDMwKTsKKyAgZ192YWx1ZV91bnNldCAoJmRlc3QpOworICAvKiB0aGUgb3RoZXIgd2F5ICovCisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMyLCAmc3JjMSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF92YWx1ZV9zdWJ0cmFjdF9pbnQ2NCkKK3sKKyAgR1ZhbHVlIGRlc3QgPSB7IDAgfTsKKyAgR1ZhbHVlIHNyYzEgPSB7IDAgfTsKKyAgR1ZhbHVlIHNyYzIgPSB7IDAgfTsKKyAgY29uc3QgR1ZhbHVlICp0bXA7CisgIGdib29sZWFuIHJldDsKKworICAvKiAgaW50NjQgPC0+IGludDY0CisgICAqLworICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHX1RZUEVfSU5UNjQpOworICBnX3ZhbHVlX3NldF9pbnQ2NCAoJnNyYzEsIDEwKTsKKyAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR19UWVBFX0lOVDY0KTsKKyAgZ192YWx1ZV9zZXRfaW50NjQgKCZzcmMyLCAyMCk7CisgIC8qIHN1YnRyYWN0IGFzIGluIHNldHMsIHJlc3VsdCBpcyAxMCAqLworICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzIpOworICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZkZXN0LCAmc3JjMSkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKKyAgZ192YWx1ZV91bnNldCAoJmRlc3QpOworCisgIC8qIHNhbWUgdmFsdWVzLCB5aWVsZHMgZW1wdHkgc2V0ICovCisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKKworICAvKiAgaW50NjQgPC0+IGludDY0X3JhbmdlCisgICAqLworCisgIC8qIHdvdWxkIHlpZWxkIGFuIGVtcHR5IHNldCAqLworICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHX1RZUEVfSU5UNjQpOworICBnX3ZhbHVlX3NldF9pbnQ2NCAoJnNyYzEsIDEwKTsKKyAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfSU5UNjRfUkFOR0UpOworICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlICgmc3JjMiwgMCwgMjApOworICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzIpOworICBmYWlsX3VubGVzcyAocmV0ID09IEZBTFNFKTsKKworICAvKiBhbmQgdGhlIG90aGVyIHdheSBhcm91bmQsIHNob3VsZCBjcmVhdGUgYSBsaXN0IG9mIHR3byByYW5nZXMuICovCisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMyLCAmc3JjMSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfTElTVCAoJmRlc3QpID09IFRSVUUpOworICB0bXAgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKCZkZXN0LCAwKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19JTlQ2NF9SQU5HRSAodG1wKSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWluICh0bXApID09IDApOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9tYXggKHRtcCkgPT0gOSk7CisgIHRtcCA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoJmRlc3QsIDEpOworICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0lOVDY0X1JBTkdFICh0bXApID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9taW4gKHRtcCkgPT0gMTEpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9tYXggKHRtcCkgPT0gMjApOworICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzIpOworCisgIC8qIGJvcmRlciBjYXNlIDEsIGVtcHR5IHNldCAqLworICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHX1RZUEVfSU5UNjQpOworICBnX3ZhbHVlX3NldF9pbnQ2NCAoJnNyYzEsIDEwKTsKKyAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfSU5UNjRfUkFOR0UpOworICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlICgmc3JjMiwgMTAsIDIwKTsKKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7CisKKyAgLyogYW5kIHRoZSBvdGhlciB3YXkgYXJvdW5kLCBzaG91bGQgY3JlYXRlIGEgbmV3IHJhbmdlLiAqLworICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOworICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0lOVDY0X1JBTkdFICgmZGVzdCkgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21pbiAoJmRlc3QpID09IDExKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWF4ICgmZGVzdCkgPT0gMjApOworICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzIpOworCisgIC8qIGJvcmRlciBjYXNlIDIsIGVtcHR5IHNldCAqLworICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHX1RZUEVfSU5UNjQpOworICBnX3ZhbHVlX3NldF9pbnQ2NCAoJnNyYzEsIDIwKTsKKyAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfSU5UNjRfUkFOR0UpOworICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlICgmc3JjMiwgMTAsIDIwKTsKKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7CisKKyAgLyogYW5kIHRoZSBvdGhlciB3YXkgYXJvdW5kLCBzaG91bGQgY3JlYXRlIGEgbmV3IHJhbmdlLiAqLworICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOworICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0lOVDY0X1JBTkdFICgmZGVzdCkgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21pbiAoJmRlc3QpID09IDEwKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWF4ICgmZGVzdCkgPT0gMTkpOworICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzIpOworCisgIC8qIGNhc2UgMywgdmFsaWQgc2V0ICovCisgIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdfVFlQRV9JTlQ2NCk7CisgIGdfdmFsdWVfc2V0X2ludDY0ICgmc3JjMSwgMCk7CisgIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0lOVDY0X1JBTkdFKTsKKyAgZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZSAoJnNyYzIsIDEwLCAyMCk7CisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChHX1ZBTFVFX0hPTERTX0lOVDY0ICgmZGVzdCkgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJmRlc3QsICZzcmMxKSA9PSBHU1RfVkFMVUVfRVFVQUwpOworICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7CisKKyAgLyogYW5kIHRoZSBvdGhlciB3YXkgYXJvdW5kLCBzaG91bGQga2VlcCB0aGUgcmFuZ2UuICovCisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMyLCAmc3JjMSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfSU5UNjRfUkFOR0UgKCZkZXN0KSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWluICgmZGVzdCkgPT0gMTApOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9tYXggKCZkZXN0KSA9PSAyMCk7CisgIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzEpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7CisKKyAgLyogIGludDY0X3JhbmdlIDwtPiBpbnQ2NF9yYW5nZQorICAgKi8KKworICAvKiBzYW1lIHJhbmdlLCBlbXB0eSBzZXQgKi8KKyAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR1NUX1RZUEVfSU5UNjRfUkFOR0UpOworICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlICgmc3JjMSwgMTAsIDIwKTsKKyAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfSU5UNjRfUkFOR0UpOworICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlICgmc3JjMiwgMTAsIDIwKTsKKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7CisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMyLCAmc3JjMSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKKworICAvKiBub24gb3ZlcmxhcHBpbmcgcmFuZ2VzICovCisgIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdTVF9UWVBFX0lOVDY0X1JBTkdFKTsKKyAgZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZSAoJnNyYzEsIDEwLCAyMCk7CisgIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0lOVDY0X1JBTkdFKTsKKyAgZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZSAoJnNyYzIsIDMwLCA0MCk7CisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfSU5UNjRfUkFOR0UgKCZkZXN0KSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWluICgmZGVzdCkgPT0gMTApOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9tYXggKCZkZXN0KSA9PSAyMCk7CisgIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKKyAgLyogdGhlIG90aGVyIHdheSAqLworICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOworICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0lOVDY0X1JBTkdFICgmZGVzdCkgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21pbiAoJmRlc3QpID09IDMwKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWF4ICgmZGVzdCkgPT0gNDApOworICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzIpOworCisgIC8qIGNvbXBsZXRlbHkgb3ZlcmxhcHBpbmcgcmFuZ2VzICovCisgIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdTVF9UWVBFX0lOVDY0X1JBTkdFKTsKKyAgZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZSAoJnNyYzEsIDEwLCAyMCk7CisgIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0lOVDY0X1JBTkdFKTsKKyAgZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZSAoJnNyYzIsIDEwLCAzMCk7CisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOworICAvKiB0aGUgb3RoZXIgd2F5ICovCisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMyLCAmc3JjMSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfSU5UNjRfUkFOR0UgKCZkZXN0KSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWluICgmZGVzdCkgPT0gMjEpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9tYXggKCZkZXN0KSA9PSAzMCk7CisgIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzEpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7CisKKyAgLyogcGFydGlhbGx5IG92ZXJsYXBwaW5nIHJhbmdlcyAqLworICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHU1RfVFlQRV9JTlQ2NF9SQU5HRSk7CisgIGdzdF92YWx1ZV9zZXRfaW50NjRfcmFuZ2UgKCZzcmMxLCAxMCwgMjApOworICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9JTlQ2NF9SQU5HRSk7CisgIGdzdF92YWx1ZV9zZXRfaW50NjRfcmFuZ2UgKCZzcmMyLCAxNSwgMzApOworICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzIpOworICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0lOVDY0X1JBTkdFICgmZGVzdCkgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21pbiAoJmRlc3QpID09IDEwKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWF4ICgmZGVzdCkgPT0gMTQpOworICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7CisgIC8qIHRoZSBvdGhlciB3YXkgKi8KKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19JTlQ2NF9SQU5HRSAoJmRlc3QpID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9taW4gKCZkZXN0KSA9PSAyMSk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21heCAoJmRlc3QpID09IDMwKTsKKyAgZ192YWx1ZV91bnNldCAoJmRlc3QpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKKworICAvKiBjcmVhdGUgYSBob2xlIHsgaW50NjRfcmFuZ2UsIGludDY0X3JhbmdlIH0gKi8KKyAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR1NUX1RZUEVfSU5UNjRfUkFOR0UpOworICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlICgmc3JjMSwgMTAsIDMwKTsKKyAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfSU5UNjRfUkFOR0UpOworICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlICgmc3JjMiwgMTUsIDIwKTsKKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19MSVNUICgmZGVzdCkgPT0gVFJVRSk7CisgIHRtcCA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoJmRlc3QsIDApOworICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0lOVDY0X1JBTkdFICh0bXApID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9taW4gKHRtcCkgPT0gMTApOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9tYXggKHRtcCkgPT0gMTQpOworICB0bXAgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKCZkZXN0LCAxKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19JTlQ2NF9SQU5HRSAodG1wKSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWluICh0bXApID09IDIxKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWF4ICh0bXApID09IDMwKTsKKyAgZ192YWx1ZV91bnNldCAoJmRlc3QpOworICAvKiB0aGUgb3RoZXIgd2F5ICovCisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMyLCAmc3JjMSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKKworICAvKiBjcmVhdGUgYSBob2xlLCB7IGludDY0LCBpbnQ2NCB9ICovCisgIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdTVF9UWVBFX0lOVDY0X1JBTkdFKTsKKyAgZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZSAoJnNyYzEsIDEwLCAzMCk7CisgIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0lOVDY0X1JBTkdFKTsKKyAgZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZSAoJnNyYzIsIDExLCAyOSk7CisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfTElTVCAoJmRlc3QpID09IFRSVUUpOworICB0bXAgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKCZkZXN0LCAwKTsKKyAgZmFpbF91bmxlc3MgKEdfVkFMVUVfSE9MRFNfSU5UNjQgKHRtcCkgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnX3ZhbHVlX2dldF9pbnQ2NCAodG1wKSA9PSAxMCk7CisgIHRtcCA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoJmRlc3QsIDEpOworICBmYWlsX3VubGVzcyAoR19WQUxVRV9IT0xEU19JTlQ2NCAodG1wKSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X2ludDY0ICh0bXApID09IDMwKTsKKyAgZ192YWx1ZV91bnNldCAoJmRlc3QpOworICAvKiB0aGUgb3RoZXIgd2F5ICovCisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMyLCAmc3JjMSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKKworICAvKiBjcmVhdGUgYSBob2xlLCB7IGludDY0LCBpbnQ2NF9yYW5nZSB9ICovCisgIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdTVF9UWVBFX0lOVDY0X1JBTkdFKTsKKyAgZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZSAoJnNyYzEsIDEwLCAzMCk7CisgIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0lOVDY0X1JBTkdFKTsKKyAgZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZSAoJnNyYzIsIDExLCAyOCk7CisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfTElTVCAoJmRlc3QpID09IFRSVUUpOworICB0bXAgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKCZkZXN0LCAwKTsKKyAgZmFpbF91bmxlc3MgKEdfVkFMVUVfSE9MRFNfSU5UNjQgKHRtcCkgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnX3ZhbHVlX2dldF9pbnQ2NCAodG1wKSA9PSAxMCk7CisgIHRtcCA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoJmRlc3QsIDEpOworICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0lOVDY0X1JBTkdFICh0bXApID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9taW4gKHRtcCkgPT0gMjkpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9tYXggKHRtcCkgPT0gMzApOworICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7CisgIC8qIHRoZSBvdGhlciB3YXkgKi8KKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzIpOworCisgIC8qIGNyZWF0ZSBhIGhvbGUsIHsgaW50NjRfcmFuZ2UsIGludDY0IH0gKi8KKyAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR1NUX1RZUEVfSU5UNjRfUkFOR0UpOworICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlICgmc3JjMSwgMTAsIDMwKTsKKyAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfSU5UNjRfUkFOR0UpOworICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlICgmc3JjMiwgMTIsIDI5KTsKKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19MSVNUICgmZGVzdCkgPT0gVFJVRSk7CisgIHRtcCA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoJmRlc3QsIDApOworICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0lOVDY0X1JBTkdFICh0bXApID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9taW4gKHRtcCkgPT0gMTApOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9tYXggKHRtcCkgPT0gMTEpOworICB0bXAgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKCZkZXN0LCAxKTsKKyAgZmFpbF91bmxlc3MgKEdfVkFMVUVfSE9MRFNfSU5UNjQgKHRtcCkgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnX3ZhbHVlX2dldF9pbnQ2NCAodG1wKSA9PSAzMCk7CisgIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKKyAgLyogdGhlIG90aGVyIHdheSAqLworICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOworICBmYWlsX3VubGVzcyAocmV0ID09IEZBTFNFKTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzEpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfdmFsdWVfc3VidHJhY3RfZG91YmxlKQoreworICBHVmFsdWUgZGVzdCA9IHsgMCB9OworICBHVmFsdWUgc3JjMSA9IHsgMCB9OworICBHVmFsdWUgc3JjMiA9IHsgMCB9OworICBjb25zdCBHVmFsdWUgKnRtcDsKKyAgZ2Jvb2xlYW4gcmV0OworCisgIC8qICBkb3VibGUgPC0+IGRvdWJsZQorICAgKi8KKyAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR19UWVBFX0RPVUJMRSk7CisgIGdfdmFsdWVfc2V0X2RvdWJsZSAoJnNyYzEsIDEwLjApOworICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHX1RZUEVfRE9VQkxFKTsKKyAgZ192YWx1ZV9zZXRfZG91YmxlICgmc3JjMiwgMjAuMCk7CisgIC8qIHN1YnRyYWN0IGFzIGluIHNldHMsIHJlc3VsdCBpcyAxMCAqLworICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzIpOworICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZkZXN0LCAmc3JjMSkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKKyAgZ192YWx1ZV91bnNldCAoJmRlc3QpOworCisgIC8qIHNhbWUgdmFsdWVzLCB5aWVsZHMgZW1wdHkgc2V0ICovCisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKKworICAvKiAgZG91YmxlIDwtPiBkb3VibGVfcmFuZ2UKKyAgICovCisKKyAgLyogd291bGQgeWllbGQgYW4gZW1wdHkgc2V0ICovCisgIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdfVFlQRV9ET1VCTEUpOworICBnX3ZhbHVlX3NldF9kb3VibGUgKCZzcmMxLCAxMC4wKTsKKyAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfRE9VQkxFX1JBTkdFKTsKKyAgZ3N0X3ZhbHVlX3NldF9kb3VibGVfcmFuZ2UgKCZzcmMyLCAwLjAsIDIwLjApOworICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzIpOworICBmYWlsX3VubGVzcyAocmV0ID09IEZBTFNFKTsKKworICAvKiBhbmQgdGhlIG90aGVyIHdheSBhcm91bmQsIHdlIGNhbm5vdCBjcmVhdGUgb3BlbiByYW5nZXMKKyAgICogc28gdGhlIHJlc3VsdCBpcyB0aGUgcmFuZ2UgYWdhaW4gKi8KKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19ET1VCTEVfUkFOR0UgKCZkZXN0KSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21pbiAoJmRlc3QpID09IDAuMCk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2RvdWJsZV9yYW5nZV9tYXggKCZkZXN0KSA9PSAyMC4wKTsKKyAgZ192YWx1ZV91bnNldCAoJmRlc3QpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKKworICAvKiBib3JkZXIgY2FzZSAxLCBlbXB0eSBzZXQgKi8KKyAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR19UWVBFX0RPVUJMRSk7CisgIGdfdmFsdWVfc2V0X2RvdWJsZSAoJnNyYzEsIDEwLjApOworICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9ET1VCTEVfUkFOR0UpOworICBnc3RfdmFsdWVfc2V0X2RvdWJsZV9yYW5nZSAoJnNyYzIsIDEwLjAsIDIwLjApOworICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzIpOworICBmYWlsX3VubGVzcyAocmV0ID09IEZBTFNFKTsKKworICAvKiBhbmQgdGhlIG90aGVyIHdheSBhcm91bmQsIHNob3VsZCBrZWVwIHNhbWUgcmFuZ2UgYXMKKyAgICogd2UgZG9uJ3QgaGF2ZSBvcGVuIHJhbmdlcy4gKi8KKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19ET1VCTEVfUkFOR0UgKCZkZXN0KSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21pbiAoJmRlc3QpID09IDEwLjApOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWF4ICgmZGVzdCkgPT0gMjAuMCk7CisgIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzEpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7CisKKyAgLyogYm9yZGVyIGNhc2UgMiwgZW1wdHkgc2V0ICovCisgIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdfVFlQRV9ET1VCTEUpOworICBnX3ZhbHVlX3NldF9kb3VibGUgKCZzcmMxLCAyMC4wKTsKKyAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfRE9VQkxFX1JBTkdFKTsKKyAgZ3N0X3ZhbHVlX3NldF9kb3VibGVfcmFuZ2UgKCZzcmMyLCAxMC4wLCAyMC4wKTsKKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7CisKKyAgLyogYW5kIHRoZSBvdGhlciB3YXkgYXJvdW5kLCBzaG91bGQga2VlcCBzYW1lIHJhbmdlIGFzCisgICAqIHdlIGRvbid0IGhhdmUgb3BlbiByYW5nZXMuICovCisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMyLCAmc3JjMSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfRE9VQkxFX1JBTkdFICgmZGVzdCkgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2RvdWJsZV9yYW5nZV9taW4gKCZkZXN0KSA9PSAxMC4wKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21heCAoJmRlc3QpID09IDIwLjApOworICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzIpOworCisgIC8qIGNhc2UgMywgdmFsaWQgc2V0ICovCisgIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdfVFlQRV9ET1VCTEUpOworICBnX3ZhbHVlX3NldF9kb3VibGUgKCZzcmMxLCAwLjApOworICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9ET1VCTEVfUkFOR0UpOworICBnc3RfdmFsdWVfc2V0X2RvdWJsZV9yYW5nZSAoJnNyYzIsIDEwLjAsIDIwLjApOworICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzIpOworICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoR19WQUxVRV9IT0xEU19ET1VCTEUgKCZkZXN0KSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmZGVzdCwgJnNyYzEpID09IEdTVF9WQUxVRV9FUVVBTCk7CisgIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKKworICAvKiBhbmQgdGhlIG90aGVyIHdheSBhcm91bmQsIHNob3VsZCBrZWVwIHRoZSByYW5nZS4gKi8KKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19ET1VCTEVfUkFOR0UgKCZkZXN0KSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21pbiAoJmRlc3QpID09IDEwLjApOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWF4ICgmZGVzdCkgPT0gMjAuMCk7CisgIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzEpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7CisKKyAgLyogIGRvdWJsZV9yYW5nZSA8LT4gZG91YmxlX3JhbmdlCisgICAqLworCisgIC8qIHNhbWUgcmFuZ2UsIGVtcHR5IHNldCAqLworICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHU1RfVFlQRV9ET1VCTEVfUkFOR0UpOworICBnc3RfdmFsdWVfc2V0X2RvdWJsZV9yYW5nZSAoJnNyYzEsIDEwLjAsIDIwLjApOworICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9ET1VCTEVfUkFOR0UpOworICBnc3RfdmFsdWVfc2V0X2RvdWJsZV9yYW5nZSAoJnNyYzIsIDEwLjAsIDIwLjApOworICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzIpOworICBmYWlsX3VubGVzcyAocmV0ID09IEZBTFNFKTsKKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzIpOworCisgIC8qIG5vbiBvdmVybGFwcGluZyByYW5nZXMgKi8KKyAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR1NUX1RZUEVfRE9VQkxFX1JBTkdFKTsKKyAgZ3N0X3ZhbHVlX3NldF9kb3VibGVfcmFuZ2UgKCZzcmMxLCAxMC4wLCAyMC4wKTsKKyAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfRE9VQkxFX1JBTkdFKTsKKyAgZ3N0X3ZhbHVlX3NldF9kb3VibGVfcmFuZ2UgKCZzcmMyLCAzMC4wLCA0MC4wKTsKKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19ET1VCTEVfUkFOR0UgKCZkZXN0KSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21pbiAoJmRlc3QpID09IDEwLjApOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWF4ICgmZGVzdCkgPT0gMjAuMCk7CisgIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKKyAgLyogdGhlIG90aGVyIHdheSAqLworICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOworICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0RPVUJMRV9SQU5HRSAoJmRlc3QpID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWluICgmZGVzdCkgPT0gMzAuMCk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2RvdWJsZV9yYW5nZV9tYXggKCZkZXN0KSA9PSA0MC4wKTsKKyAgZ192YWx1ZV91bnNldCAoJmRlc3QpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKKworICAvKiBjb21wbGV0ZWx5IG92ZXJsYXBwaW5nIHJhbmdlcyAqLworICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHU1RfVFlQRV9ET1VCTEVfUkFOR0UpOworICBnc3RfdmFsdWVfc2V0X2RvdWJsZV9yYW5nZSAoJnNyYzEsIDEwLjAsIDIwLjApOworICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9ET1VCTEVfUkFOR0UpOworICBnc3RfdmFsdWVfc2V0X2RvdWJsZV9yYW5nZSAoJnNyYzIsIDEwLjAsIDMwLjApOworICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzIpOworICBmYWlsX3VubGVzcyAocmV0ID09IEZBTFNFKTsKKyAgLyogdGhlIG90aGVyIHdheSAqLworICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOworICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0RPVUJMRV9SQU5HRSAoJmRlc3QpID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWluICgmZGVzdCkgPT0gMjAuMCk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2RvdWJsZV9yYW5nZV9tYXggKCZkZXN0KSA9PSAzMC4wKTsKKyAgZ192YWx1ZV91bnNldCAoJmRlc3QpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKKworICAvKiBwYXJ0aWFsbHkgb3ZlcmxhcHBpbmcgcmFuZ2VzICovCisgIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdTVF9UWVBFX0RPVUJMRV9SQU5HRSk7CisgIGdzdF92YWx1ZV9zZXRfZG91YmxlX3JhbmdlICgmc3JjMSwgMTAuMCwgMjAuMCk7CisgIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0RPVUJMRV9SQU5HRSk7CisgIGdzdF92YWx1ZV9zZXRfZG91YmxlX3JhbmdlICgmc3JjMiwgMTUuMCwgMzAuMCk7CisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfRE9VQkxFX1JBTkdFICgmZGVzdCkgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2RvdWJsZV9yYW5nZV9taW4gKCZkZXN0KSA9PSAxMC4wKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21heCAoJmRlc3QpID09IDE1LjApOworICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7CisgIC8qIHRoZSBvdGhlciB3YXkgKi8KKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19ET1VCTEVfUkFOR0UgKCZkZXN0KSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21pbiAoJmRlc3QpID09IDIwLjApOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWF4ICgmZGVzdCkgPT0gMzAuMCk7CisgIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzEpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7CisKKyAgLyogY3JlYXRlIGEgaG9sZSB7IGRvdWJsZV9yYW5nZSwgZG91YmxlX3JhbmdlIH0gKi8KKyAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR1NUX1RZUEVfRE9VQkxFX1JBTkdFKTsKKyAgZ3N0X3ZhbHVlX3NldF9kb3VibGVfcmFuZ2UgKCZzcmMxLCAxMC4wLCAzMC4wKTsKKyAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfRE9VQkxFX1JBTkdFKTsKKyAgZ3N0X3ZhbHVlX3NldF9kb3VibGVfcmFuZ2UgKCZzcmMyLCAxNS4wLCAyMC4wKTsKKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19MSVNUICgmZGVzdCkgPT0gVFJVRSk7CisgIHRtcCA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoJmRlc3QsIDApOworICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0RPVUJMRV9SQU5HRSAodG1wKSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21pbiAodG1wKSA9PSAxMC4wKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21heCAodG1wKSA9PSAxNS4wKTsKKyAgdG1wID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlICgmZGVzdCwgMSk7CisgIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfRE9VQkxFX1JBTkdFICh0bXApID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWluICh0bXApID09IDIwLjApOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWF4ICh0bXApID09IDMwLjApOworICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7CisgIC8qIHRoZSBvdGhlciB3YXkgKi8KKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzIpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIFRlc3QgYXJpdGhtZXRpYyBzdWJ0cmFjdGlvbiBvZiBmcmFjdGlvbnMgKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X3ZhbHVlX3N1YnRyYWN0X2ZyYWN0aW9uKQoreworICBHVmFsdWUgcmVzdWx0ID0geyAwIH07CisgIEdWYWx1ZSBzcmMxID0geyAwIH07CisgIEdWYWx1ZSBzcmMyID0geyAwIH07CisKKyAgLyogU3VidHJhY3QgMS80IGZyb20gMS8yICovCisgIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKKyAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfRlJBQ1RJT04pOworICBnX3ZhbHVlX2luaXQgKCZyZXN1bHQsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJnNyYzEsIDEsIDIpOworICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmc3JjMiwgMSwgNCk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZnJhY3Rpb25fc3VidHJhY3QgKCZyZXN1bHQsICZzcmMxLCAmc3JjMikgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvciAoJnJlc3VsdCkgPT0gMSk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX2Rlbm9taW5hdG9yICgmcmVzdWx0KSA9PSA0KTsKKworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKKyAgZ192YWx1ZV91bnNldCAoJnJlc3VsdCk7CisKKyAgLyogU3VidHJhY3QgMS8xMiBmcm9tIDcvOCAqLworICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHU1RfVFlQRV9GUkFDVElPTik7CisgIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKKyAgZ192YWx1ZV9pbml0ICgmcmVzdWx0LCBHU1RfVFlQRV9GUkFDVElPTik7CisgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZzcmMxLCA3LCA4KTsKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJnNyYzIsIDEsIDEyKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9mcmFjdGlvbl9zdWJ0cmFjdCAoJnJlc3VsdCwgJnNyYzEsICZzcmMyKSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fbnVtZXJhdG9yICgmcmVzdWx0KSA9PSAxOSk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX2Rlbm9taW5hdG9yICgmcmVzdWx0KSA9PSAyNCk7CisKKyAgZ192YWx1ZV91bnNldCAoJnNyYzEpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7CisgIGdfdmFsdWVfdW5zZXQgKCZyZXN1bHQpOworCisgIC8qIFN1YnRyYWN0IDEyLzEzIGZyb20gNC8zICovCisgIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKKyAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfRlJBQ1RJT04pOworICBnX3ZhbHVlX2luaXQgKCZyZXN1bHQsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJnNyYzEsIDQsIDMpOworICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmc3JjMiwgMTIsIDEzKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9mcmFjdGlvbl9zdWJ0cmFjdCAoJnJlc3VsdCwgJnNyYzEsICZzcmMyKSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fbnVtZXJhdG9yICgmcmVzdWx0KSA9PSAxNik7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX2Rlbm9taW5hdG9yICgmcmVzdWx0KSA9PSAzOSk7CisKKyAgZ192YWx1ZV91bnNldCAoJnNyYzEpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7CisgIGdfdmFsdWVfdW5zZXQgKCZyZXN1bHQpOworCisgIC8qIFN1YnRyYWN0IDEvMTIgZnJvbSA3LzggKi8KK30KKworR1NUX0VORF9URVNUOworCisvKiBUZXN0IHNldCBzdWJ0cmFjdGlvbiBvcGVyYXRpb25zIG9uIGZyYWN0aW9uIHJhbmdlcyAqLworR1NUX1NUQVJUX1RFU1QgKHRlc3RfdmFsdWVfc3VidHJhY3RfZnJhY3Rpb25fcmFuZ2UpCit7CisgIEdWYWx1ZSBkZXN0ID0geyAwIH07CisgIEdWYWx1ZSBzcmMxID0geyAwIH07CisgIEdWYWx1ZSBzcmMyID0geyAwIH07CisgIEdWYWx1ZSBjbXAgPSB7IDAgfTsKKyAgY29uc3QgR1ZhbHVlICp0bXA7CisgIGdib29sZWFuIHJldDsKKworICAvKiBWYWx1ZSBmb3IgdGVzdHMgKi8KKyAgZ192YWx1ZV9pbml0ICgmY21wLCBHU1RfVFlQRV9GUkFDVElPTik7CisKKyAgLyogIGZyYWN0aW9uIDwtPiBmcmFjdGlvbgorICAgKi8KKyAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR1NUX1RZUEVfRlJBQ1RJT04pOworICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmc3JjMSwgMTAsIDEpOworICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9GUkFDVElPTik7CisgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZzcmMyLCAyMCwgMSk7CisgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZzcmMxLCAxMCwgMSk7CisKKyAgLyogc3VidHJhY3QgYXMgaW4gc2V0cywgcmVzdWx0IGlzIDEwICovCisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJmRlc3QsICZzcmMxKSA9PSBHU1RfVkFMVUVfRVFVQUwpOworICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7CisKKyAgLyogc2FtZSB2YWx1ZXMsIHlpZWxkcyBlbXB0eSBzZXQgKi8KKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMxKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzIpOworCisgIC8qICBmcmFjdGlvbiA8LT4gZnJhY3Rpb25fcmFuZ2UKKyAgICovCisKKyAgLyogd291bGQgeWllbGQgYW4gZW1wdHkgc2V0ICovCisgIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJnNyYzEsIDEwLCAxKTsKKyAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UpOworICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlX2Z1bGwgKCZzcmMyLCAwLCAxLCAyMCwgMSk7CisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOworCisgIC8qIGFuZCB0aGUgb3RoZXIgd2F5IGFyb3VuZCwgd2UgY2Fubm90IGNyZWF0ZSBvcGVuIHJhbmdlcworICAgKiBzbyB0aGUgcmVzdWx0IGlzIHRoZSByYW5nZSBhZ2FpbiAqLworICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOworICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OX1JBTkdFICgmZGVzdCkgPT0gVFJVRSk7CisgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZjbXAsIDAsIDEpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWluICgmZGVzdCksCisgICAgICAgICAgJmNtcCkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJmNtcCwgMjAsIDEpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWF4ICgmZGVzdCksCisgICAgICAgICAgJmNtcCkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKKyAgZ192YWx1ZV91bnNldCAoJmRlc3QpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKKworICAvKiBib3JkZXIgY2FzZSAxLCBlbXB0eSBzZXQgKi8KKyAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR1NUX1RZUEVfRlJBQ1RJT04pOworICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmc3JjMSwgMTAsIDEpOworICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSk7CisgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2VfZnVsbCAoJnNyYzIsIDEwLCAxLCAyMCwgMSk7CisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOworCisgIC8qIGFuZCB0aGUgb3RoZXIgd2F5IGFyb3VuZCwgc2hvdWxkIGtlZXAgc2FtZSByYW5nZSBhcworICAgKiB3ZSBkb24ndCBoYXZlIG9wZW4gcmFuZ2VzLiAqLworICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOworICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OX1JBTkdFICgmZGVzdCkgPT0gVFJVRSk7CisgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZjbXAsIDEwLCAxKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlIChnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21pbiAoJmRlc3QpLAorICAgICAgICAgICZjbXApID09IEdTVF9WQUxVRV9FUVVBTCk7CisgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZjbXAsIDIwLCAxKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlIChnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21heCAoJmRlc3QpLAorICAgICAgICAgICZjbXApID09IEdTVF9WQUxVRV9FUVVBTCk7CisgIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzEpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7CisKKyAgLyogY2FzZSAyLCB2YWxpZCBzZXQgKi8KKyAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR1NUX1RZUEVfRlJBQ1RJT04pOworICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmc3JjMSwgMCwgMSk7CisgIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFKTsKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZV9mdWxsICgmc3JjMiwgMTAsIDEsIDIwLCAxKTsKKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19GUkFDVElPTiAoJmRlc3QpID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZkZXN0LCAmc3JjMSkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKKyAgZ192YWx1ZV91bnNldCAoJmRlc3QpOworCisgIC8qIGFuZCB0aGUgb3RoZXIgd2F5IGFyb3VuZCwgc2hvdWxkIGtlZXAgdGhlIHJhbmdlLiAqLworICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOworICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OX1JBTkdFICgmZGVzdCkgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJmRlc3QsICZzcmMyKSA9PSBHU1RfVkFMVUVfRVFVQUwpOworICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzIpOworCisgIC8qICBmcmFjdGlvbl9yYW5nZSA8LT4gZnJhY3Rpb25fcmFuZ2UKKyAgICovCisKKyAgLyogc2FtZSByYW5nZSwgZW1wdHkgc2V0ICovCisgIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFKTsKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZV9mdWxsICgmc3JjMSwgMTAsIDIsIDIwLCAyKTsKKyAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UpOworICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlX2Z1bGwgKCZzcmMyLCAxMCwgMiwgMjAsIDIpOworICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzIpOworICBmYWlsX3VubGVzcyAocmV0ID09IEZBTFNFKTsKKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzIpOworCisgIC8qIG5vbiBvdmVybGFwcGluZyByYW5nZXMgKi8KKyAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UpOworICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlX2Z1bGwgKCZzcmMxLCAxMCwgMiwgMTAsIDEpOworICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSk7CisgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2VfZnVsbCAoJnNyYzIsIDMwLCAyLCA0MCwgMik7CisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT05fUkFOR0UgKCZkZXN0KSA9PSBUUlVFKTsKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJmNtcCwgNSwgMSk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9taW4gKCZkZXN0KSwKKyAgICAgICAgICAmY21wKSA9PSBHU1RfVkFMVUVfRVFVQUwpOworICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmY21wLCAxMCwgMSk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9tYXggKCZkZXN0KSwKKyAgICAgICAgICAmY21wKSA9PSBHU1RfVkFMVUVfRVFVQUwpOworCisgIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKKyAgLyogdGhlIG90aGVyIHdheSAqLworICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOworICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OX1JBTkdFICgmZGVzdCkgPT0gVFJVRSk7CisgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZjbXAsIDE1LCAxKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlIChnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21pbiAoJmRlc3QpLAorICAgICAgICAgICZjbXApID09IEdTVF9WQUxVRV9FUVVBTCk7CisgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZjbXAsIDIwLCAxKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlIChnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21heCAoJmRlc3QpLAorICAgICAgICAgICZjbXApID09IEdTVF9WQUxVRV9FUVVBTCk7CisgIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzEpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7CisKKyAgLyogY29tcGxldGVseSBvdmVybGFwcGluZyByYW5nZXMgKi8KKyAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UpOworICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlX2Z1bGwgKCZzcmMxLCAxMCwgMSwgMjAsIDEpOworICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSk7CisgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2VfZnVsbCAoJnNyYzIsIDEwLCAxLCAzMCwgMSk7CisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOworICAvKiB0aGUgb3RoZXIgd2F5ICovCisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMyLCAmc3JjMSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT05fUkFOR0UgKCZkZXN0KSA9PSBUUlVFKTsKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJmNtcCwgMjAsIDEpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWluICgmZGVzdCksCisgICAgICAgICAgJmNtcCkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJmNtcCwgMzAsIDEpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWF4ICgmZGVzdCksCisgICAgICAgICAgJmNtcCkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKKyAgZ192YWx1ZV91bnNldCAoJmRlc3QpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKKworICAvKiBwYXJ0aWFsbHkgb3ZlcmxhcHBpbmcgcmFuZ2VzICovCisgIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFKTsKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZV9mdWxsICgmc3JjMSwgMTAsIDEsIDIwLCAxKTsKKyAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UpOworICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlX2Z1bGwgKCZzcmMyLCAxNSwgMSwgMzAsIDEpOworICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzIpOworICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OX1JBTkdFICgmZGVzdCkgPT0gVFJVRSk7CisgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZjbXAsIDEwLCAxKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlIChnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21pbiAoJmRlc3QpLAorICAgICAgICAgICZjbXApID09IEdTVF9WQUxVRV9FUVVBTCk7CisgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZjbXAsIDE1LCAxKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlIChnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21heCAoJmRlc3QpLAorICAgICAgICAgICZjbXApID09IEdTVF9WQUxVRV9FUVVBTCk7CisgIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKKworICAvKiB0aGUgb3RoZXIgd2F5ICovCisgIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMyLCAmc3JjMSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT05fUkFOR0UgKCZkZXN0KSA9PSBUUlVFKTsKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJmNtcCwgMjAsIDEpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWluICgmZGVzdCksCisgICAgICAgICAgJmNtcCkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJmNtcCwgMzAsIDEpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWF4ICgmZGVzdCksCisgICAgICAgICAgJmNtcCkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKKyAgZ192YWx1ZV91bnNldCAoJmRlc3QpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKKworICAvKiBjcmVhdGUgYSBob2xlIHsgZG91YmxlX3JhbmdlLCBkb3VibGVfcmFuZ2UgfSAqLworICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSk7CisgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2VfZnVsbCAoJnNyYzEsIDEwLCAxLCAzMCwgMSk7CisgIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFKTsKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZV9mdWxsICgmc3JjMiwgMTUsIDEsIDIwLCAxKTsKKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19MSVNUICgmZGVzdCkgPT0gVFJVRSk7CisgIC8qIDFzdCBsaXN0IGVudHJ5ICovCisgIHRtcCA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoJmRlc3QsIDApOworICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OX1JBTkdFICh0bXApID09IFRSVUUpOworICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmY21wLCAxMCwgMSk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9taW4gKHRtcCksCisgICAgICAgICAgJmNtcCkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJmNtcCwgMTUsIDEpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWF4ICh0bXApLAorICAgICAgICAgICZjbXApID09IEdTVF9WQUxVRV9FUVVBTCk7CisgIC8qIDJuZCBsaXN0IGVudHJ5ICovCisgIHRtcCA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoJmRlc3QsIDEpOworICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OX1JBTkdFICh0bXApID09IFRSVUUpOworICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmY21wLCAyMCwgMSk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9taW4gKHRtcCksCisgICAgICAgICAgJmNtcCkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJmNtcCwgMzAsIDEpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWF4ICh0bXApLAorICAgICAgICAgICZjbXApID09IEdTVF9WQUxVRV9FUVVBTCk7CisgIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKKyAgLyogdGhlIG90aGVyIHdheSAqLworICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOworICBmYWlsX3VubGVzcyAocmV0ID09IEZBTFNFKTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYzEpOworICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7CisKKyAgZ192YWx1ZV91bnNldCAoJmNtcCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogVGVzdCBzZXQgc3VidHJhY3Rpb24gb3BlcmF0aW9ucyBvbiBmcmFjdGlvbiBsaXN0cyAqLworR1NUX1NUQVJUX1RFU1QgKHRlc3RfdmFsdWVfc3VidHJhY3RfZnJhY3Rpb25fbGlzdCkKK3sKKyAgR1ZhbHVlIGxpc3QxID0geyAwIH07CisgIEdWYWx1ZSBsaXN0MiA9IHsgMCB9OworICBHVmFsdWUgdmFsMSA9IHsgMCB9OworICBHVmFsdWUgdmFsMiA9IHsgMCB9OworICBHVmFsdWUgdG1wID0geyAwIH07CisgIGdib29sZWFuIHJldDsKKworICBnX3ZhbHVlX2luaXQgKCZsaXN0MSwgR1NUX1RZUEVfTElTVCk7CisgIGdfdmFsdWVfaW5pdCAoJnZhbDEsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJnZhbDEsIDE1LCAyKTsKKyAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlICgmbGlzdDEsICZ2YWwxKTsKKyAgZ192YWx1ZV9pbml0ICgmdG1wLCBHU1RfVFlQRV9GUkFDVElPTik7CisgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZ0bXAsIDUsIDEpOworICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZsaXN0MSwgJnRtcCk7CisgIGdfdmFsdWVfdW5zZXQgKCZ0bXApOworCisgIGdfdmFsdWVfaW5pdCAoJmxpc3QyLCBHU1RfVFlQRV9MSVNUKTsKKyAgZ192YWx1ZV9pbml0ICgmdmFsMiwgR1NUX1RZUEVfRlJBQ1RJT04pOworICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmdmFsMiwgMTUsIDEpOworICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZsaXN0MiwgJnZhbDIpOworICBnX3ZhbHVlX2luaXQgKCZ0bXAsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJnRtcCwgNSwgMSk7CisgIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoJmxpc3QyLCAmdG1wKTsKKyAgZ192YWx1ZV91bnNldCAoJnRtcCk7CisKKyAgLyogc2hvdWxkIHN1YnRyYWN0IGFsbCBjb21tb24gZWxlbWVudHMgKi8KKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmdG1wLCAmbGlzdDEsICZsaXN0Mik7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnRtcCwgJnZhbDEpID09IEdTVF9WQUxVRV9FUVVBTCk7CisgIGdfdmFsdWVfdW5zZXQgKCZ2YWwxKTsKKyAgZ192YWx1ZV91bnNldCAoJnRtcCk7CisKKyAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmdG1wLCAmbGlzdDIsICZsaXN0MSk7CisgIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnRtcCwgJnZhbDIpID09IEdTVF9WQUxVRV9FUVVBTCk7CisgIGdfdmFsdWVfdW5zZXQgKCZ2YWwyKTsKKyAgZ192YWx1ZV91bnNldCAoJnRtcCk7CisKKyAgZ192YWx1ZV91bnNldCAoJmxpc3QxKTsKKyAgZ192YWx1ZV91bnNldCAoJmxpc3QyKTsKK30KKworR1NUX0VORF9URVNUOworCisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2RhdGUpCit7CisgIEdzdFN0cnVjdHVyZSAqczsKKyAgR0RhdGUgKmRhdGUsICpkYXRlMjsKKyAgZ2NoYXIgKnN0cjsKKworICBkYXRlID0gZ19kYXRlX25ld19kbXkgKDIyLCA5LCAyMDA1KTsKKworICBzID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJtZWRpYS94LXR5cGUiLCAiU09NRV9EQVRFX1RBRyIsIEdTVF9UWVBFX0RBVEUsCisgICAgICBkYXRlLCBOVUxMKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGRfdHlwZWQgKHMsICJTT01FX0RBVEVfVEFHIiwKKyAgICAgICAgICBHU1RfVFlQRV9EQVRFKSk7CisgIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF9kYXRlIChzLCAiU09NRV9EQVRFX1RBRyIsICZkYXRlMikpOworICBmYWlsX3VubGVzcyAoZGF0ZTIgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnX2RhdGVfdmFsaWQgKGRhdGUyKSk7CisgIGZhaWxfdW5sZXNzIChnX2RhdGVfY29tcGFyZSAoZGF0ZSwgZGF0ZTIpID09IDApOworCisgIGdfZGF0ZV9mcmVlIChkYXRlKTsKKyAgZ19kYXRlX2ZyZWUgKGRhdGUyKTsKKyAgZGF0ZSA9IE5VTEw7CisgIGRhdGUyID0gTlVMTDsKKworICBzdHIgPSBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyAocyk7CisgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocyk7CisgIHMgPSBOVUxMOworCisgIGZhaWxfdW5sZXNzIChnX3N0cl9lcXVhbCAoc3RyLAorICAgICAgICAgICJtZWRpYS94LXR5cGUsIFNPTUVfREFURV9UQUc9KGRhdGUpMjAwNS0wOS0yMjsiKSk7CisKKyAgcyA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKHN0ciwgTlVMTCk7CisgIGdfZnJlZSAoc3RyKTsKKyAgc3RyID0gTlVMTDsKKworICBmYWlsX3VubGVzcyAocyAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHMsICJtZWRpYS94LXR5cGUiKSk7CisgIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZF90eXBlZCAocywgIlNPTUVfREFURV9UQUciLAorICAgICAgICAgIEdTVF9UWVBFX0RBVEUpKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2RhdGUgKHMsICJTT01FX0RBVEVfVEFHIiwgJmRhdGUpKTsKKyAgZmFpbF91bmxlc3MgKGRhdGUgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnX2RhdGVfdmFsaWQgKGRhdGUpKTsKKyAgZmFpbF91bmxlc3MgKGdfZGF0ZV9nZXRfZGF5IChkYXRlKSA9PSAyMik7CisgIGZhaWxfdW5sZXNzIChnX2RhdGVfZ2V0X21vbnRoIChkYXRlKSA9PSA5KTsKKyAgZmFpbF91bmxlc3MgKGdfZGF0ZV9nZXRfeWVhciAoZGF0ZSkgPT0gMjAwNSk7CisgIGdfZGF0ZV9mcmVlIChkYXRlKTsKKyAgZGF0ZSA9IE5VTEw7CisKKyAgc3RyID0gZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKHMpOworICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOworICBzID0gTlVMTDsKKworICBmYWlsX3VubGVzcyAoZ19zdHJfZXF1YWwgKHN0ciwKKyAgICAgICAgICAibWVkaWEveC10eXBlLCBTT01FX0RBVEVfVEFHPShkYXRlKTIwMDUtMDktMjI7IikpOworICBnX2ZyZWUgKHN0cik7CisgIHN0ciA9IE5VTEw7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIGdib29sZWFuCitkYXRlX3RpbWVfZXF1YWwgKEdzdERhdGVUaW1lICogYSwgR3N0RGF0ZVRpbWUgKiBiKQoreworICBpZiAoZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoYSkgIT0gZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoYikgfHwKKyAgICAgIGdzdF9kYXRlX3RpbWVfZ2V0X21vbnRoIChhKSAhPSBnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoYikgfHwKKyAgICAgIGdzdF9kYXRlX3RpbWVfZ2V0X2RheSAoYSkgIT0gZ3N0X2RhdGVfdGltZV9nZXRfZGF5IChiKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgaWYgKGdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIgKGEpICE9IGdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIgKGIpIHx8CisgICAgICBnc3RfZGF0ZV90aW1lX2dldF9taW51dGUgKGEpICE9IGdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZSAoYikgfHwKKyAgICAgIGdzdF9kYXRlX3RpbWVfZ2V0X3NlY29uZCAoYSkgIT0gZ3N0X2RhdGVfdGltZV9nZXRfc2Vjb25kIChiKSB8fAorICAgICAgZ3N0X2RhdGVfdGltZV9nZXRfbWljcm9zZWNvbmQgKGEpICE9IGdzdF9kYXRlX3RpbWVfZ2V0X21pY3Jvc2Vjb25kIChiKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgaWYgKGdzdF9kYXRlX3RpbWVfZ2V0X3RpbWVfem9uZV9vZmZzZXQgKGEpICE9CisgICAgICBnc3RfZGF0ZV90aW1lX2dldF90aW1lX3pvbmVfb2Zmc2V0IChiKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2RhdGVfdGltZSkKK3sKKyAgR3N0U3RydWN0dXJlICpzOworICBHc3REYXRlVGltZSAqZGF0ZXRpbWUsICpkYXRldGltZTI7CisgIGdjaGFyICpzdHI7CisKKyAgLyogdXRjIHRpbWV6b25lICovCisgIGRhdGV0aW1lID0gZ3N0X2RhdGVfdGltZV9uZXcgKDAsIDIwMTAsIDYsIDIzLCA3LCA0MCwgMTApOworCisgIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoIm1lZGlhL3gtdHlwZSIsICJTT01FX0RBVEVfVElNRV9UQUciLAorICAgICAgR1NUX1RZUEVfREFURV9USU1FLCBkYXRldGltZSwgTlVMTCk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkX3R5cGVkIChzLCAiU09NRV9EQVRFX1RJTUVfVEFHIiwKKyAgICAgICAgICBHU1RfVFlQRV9EQVRFX1RJTUUpKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2RhdGVfdGltZSAocywgIlNPTUVfREFURV9USU1FX1RBRyIsCisgICAgICAgICAgJmRhdGV0aW1lMikpOworICBmYWlsX3VubGVzcyAoZGF0ZXRpbWUyICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoZGF0ZV90aW1lX2VxdWFsIChkYXRldGltZSwgZGF0ZXRpbWUyKSk7CisKKyAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZGF0ZXRpbWUpOworICBnc3RfZGF0ZV90aW1lX3VucmVmIChkYXRldGltZTIpOworICBkYXRldGltZSA9IE5VTEw7CisgIGRhdGV0aW1lMiA9IE5VTEw7CisKKyAgc3RyID0gZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKHMpOworICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOworICBzID0gTlVMTDsKKworICBmYWlsX3VubGVzcyAoZ19zdHJfZXF1YWwgKHN0ciwKKyAgICAgICAgICAibWVkaWEveC10eXBlLCBTT01FX0RBVEVfVElNRV9UQUc9KGRhdGV0aW1lKVwiMjAxMC0wNi0yM1QwNzo0MDoxMC4wMDAwMDArMDAwMFwiOyIpKTsKKworICBzID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAoc3RyLCBOVUxMKTsKKyAgZ19mcmVlIChzdHIpOworICBzdHIgPSBOVUxMOworCisgIGZhaWxfdW5sZXNzIChzICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAocywgIm1lZGlhL3gtdHlwZSIpKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkX3R5cGVkIChzLCAiU09NRV9EQVRFX1RJTUVfVEFHIiwKKyAgICAgICAgICBHU1RfVFlQRV9EQVRFX1RJTUUpKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2RhdGVfdGltZSAocywgIlNPTUVfREFURV9USU1FX1RBRyIsCisgICAgICAgICAgJmRhdGV0aW1lKSk7CisgIGZhaWxfdW5sZXNzIChkYXRldGltZSAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X3llYXIgKGRhdGV0aW1lKSA9PSAyMDEwKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X21vbnRoIChkYXRldGltZSkgPT0gNik7CisgIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9kYXkgKGRhdGV0aW1lKSA9PSAyMyk7CisgIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9ob3VyIChkYXRldGltZSkgPT0gNyk7CisgIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9taW51dGUgKGRhdGV0aW1lKSA9PSA0MCk7CisgIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9zZWNvbmQgKGRhdGV0aW1lKSA9PSAxMCk7CisgIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9taWNyb3NlY29uZCAoZGF0ZXRpbWUpID09IDApOworICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfdGltZV96b25lX29mZnNldCAoZGF0ZXRpbWUpID09IDApOworICBnc3RfZGF0ZV90aW1lX3VucmVmIChkYXRldGltZSk7CisgIGRhdGV0aW1lID0gTlVMTDsKKworICBzdHIgPSBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyAocyk7CisgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocyk7CisgIHMgPSBOVUxMOworCisgIGZhaWxfdW5sZXNzIChnX3N0cl9lcXVhbCAoc3RyLAorICAgICAgICAgICJtZWRpYS94LXR5cGUsIFNPTUVfREFURV9USU1FX1RBRz0oZGF0ZXRpbWUpXCIyMDEwLTA2LTIzVDA3OjQwOjEwLjAwMDAwMCswMDAwXCI7IikpOworICBnX2ZyZWUgKHN0cik7CisgIHN0ciA9IE5VTEw7CisKKyAgLyogd2l0aCB0aW1lem9uZSAqLworICBkYXRldGltZSA9IGdzdF9kYXRlX3RpbWVfbmV3ICgtMy4wLCAyMDEwLCA2LCAyMywgNywgNDAsIDEwLjAwMDAwMSk7CisKKyAgcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgibWVkaWEveC10eXBlIiwgIlNPTUVfREFURV9USU1FX1RBRyIsCisgICAgICBHU1RfVFlQRV9EQVRFX1RJTUUsIGRhdGV0aW1lLCBOVUxMKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGRfdHlwZWQgKHMsICJTT01FX0RBVEVfVElNRV9UQUciLAorICAgICAgICAgIEdTVF9UWVBFX0RBVEVfVElNRSkpOworICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfZGF0ZV90aW1lIChzLCAiU09NRV9EQVRFX1RJTUVfVEFHIiwKKyAgICAgICAgICAmZGF0ZXRpbWUyKSk7CisgIGZhaWxfdW5sZXNzIChkYXRldGltZTIgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChkYXRlX3RpbWVfZXF1YWwgKGRhdGV0aW1lLCBkYXRldGltZTIpKTsKKworICBnc3RfZGF0ZV90aW1lX3VucmVmIChkYXRldGltZSk7CisgIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGRhdGV0aW1lMik7CisgIGRhdGV0aW1lID0gTlVMTDsKKyAgZGF0ZXRpbWUyID0gTlVMTDsKKworICBzdHIgPSBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyAocyk7CisgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocyk7CisgIHMgPSBOVUxMOworCisgIGZhaWxfdW5sZXNzIChnX3N0cl9lcXVhbCAoc3RyLAorICAgICAgICAgICJtZWRpYS94LXR5cGUsIFNPTUVfREFURV9USU1FX1RBRz0oZGF0ZXRpbWUpXCIyMDEwLTA2LTIzVDA3OjQwOjEwLjAwMDAwMS0wMzAwXCI7IikpOworCisgIHMgPSBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChzdHIsIE5VTEwpOworICBnX2ZyZWUgKHN0cik7CisgIHN0ciA9IE5VTEw7CisKKyAgZmFpbF91bmxlc3MgKHMgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzLCAibWVkaWEveC10eXBlIikpOworICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGRfdHlwZWQgKHMsICJTT01FX0RBVEVfVElNRV9UQUciLAorICAgICAgICAgIEdTVF9UWVBFX0RBVEVfVElNRSkpOworICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfZGF0ZV90aW1lIChzLCAiU09NRV9EQVRFX1RJTUVfVEFHIiwKKyAgICAgICAgICAmZGF0ZXRpbWUpKTsKKyAgZmFpbF91bmxlc3MgKGRhdGV0aW1lICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoZGF0ZXRpbWUpID09IDIwMTApOworICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfbW9udGggKGRhdGV0aW1lKSA9PSA2KTsKKyAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X2RheSAoZGF0ZXRpbWUpID09IDIzKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIgKGRhdGV0aW1lKSA9PSA3KTsKKyAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZSAoZGF0ZXRpbWUpID09IDQwKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X3NlY29uZCAoZGF0ZXRpbWUpID09IDEwKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X21pY3Jvc2Vjb25kIChkYXRldGltZSkgPT0gMSk7CisgIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF90aW1lX3pvbmVfb2Zmc2V0IChkYXRldGltZSkgPT0gLTMpOworICBnc3RfZGF0ZV90aW1lX3VucmVmIChkYXRldGltZSk7CisgIGRhdGV0aW1lID0gTlVMTDsKKworICBzdHIgPSBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyAocyk7CisgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocyk7CisgIHMgPSBOVUxMOworICBmYWlsX3VubGVzcyAoZ19zdHJfZXF1YWwgKHN0ciwKKyAgICAgICAgICAibWVkaWEveC10eXBlLCBTT01FX0RBVEVfVElNRV9UQUc9KGRhdGV0aW1lKVwiMjAxMC0wNi0yM1QwNzo0MDoxMC4wMDAwMDEtMDMwMFwiOyIpKTsKKworICBnX2ZyZWUgKHN0cik7CisgIHN0ciA9IE5VTEw7CisKKyAgLyogd2l0aCBwb3NpdGl2ZSB0aW1lem9uZSAqLworICBkYXRldGltZSA9IGdzdF9kYXRlX3RpbWVfbmV3ICgyLjAsIDIwMTAsIDYsIDIzLCA3LCA0MCwgMTAuMDAwMDAxKTsKKworICBzID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJtZWRpYS94LXR5cGUiLCAiU09NRV9EQVRFX1RJTUVfVEFHIiwKKyAgICAgIEdTVF9UWVBFX0RBVEVfVElNRSwgZGF0ZXRpbWUsIE5VTEwpOworCisgIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZF90eXBlZCAocywgIlNPTUVfREFURV9USU1FX1RBRyIsCisgICAgICAgICAgR1NUX1RZUEVfREFURV9USU1FKSk7CisgIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF9kYXRlX3RpbWUgKHMsICJTT01FX0RBVEVfVElNRV9UQUciLAorICAgICAgICAgICZkYXRldGltZTIpKTsKKyAgZmFpbF91bmxlc3MgKGRhdGV0aW1lMiAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGRhdGVfdGltZV9lcXVhbCAoZGF0ZXRpbWUsIGRhdGV0aW1lMikpOworCisgIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGRhdGV0aW1lKTsKKyAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZGF0ZXRpbWUyKTsKKyAgZGF0ZXRpbWUgPSBOVUxMOworICBkYXRldGltZTIgPSBOVUxMOworCisgIHN0ciA9IGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChzKTsKKyAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzKTsKKyAgcyA9IE5VTEw7CisKKyAgZmFpbF91bmxlc3MgKGdfc3RyX2VxdWFsIChzdHIsCisgICAgICAgICAgIm1lZGlhL3gtdHlwZSwgU09NRV9EQVRFX1RJTUVfVEFHPShkYXRldGltZSlcIjIwMTAtMDYtMjNUMDc6NDA6MTAuMDAwMDAxKzAyMDBcIjsiKSk7CisKKyAgcyA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKHN0ciwgTlVMTCk7CisgIGdfZnJlZSAoc3RyKTsKKyAgc3RyID0gTlVMTDsKKworICBmYWlsX3VubGVzcyAocyAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHMsICJtZWRpYS94LXR5cGUiKSk7CisgIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZF90eXBlZCAocywgIlNPTUVfREFURV9USU1FX1RBRyIsCisgICAgICAgICAgR1NUX1RZUEVfREFURV9USU1FKSk7CisgIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF9kYXRlX3RpbWUgKHMsICJTT01FX0RBVEVfVElNRV9UQUciLAorICAgICAgICAgICZkYXRldGltZSkpOworICBmYWlsX3VubGVzcyAoZGF0ZXRpbWUgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF95ZWFyIChkYXRldGltZSkgPT0gMjAxMCk7CisgIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoZGF0ZXRpbWUpID09IDYpOworICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfZGF5IChkYXRldGltZSkgPT0gMjMpOworICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfaG91ciAoZGF0ZXRpbWUpID09IDcpOworICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfbWludXRlIChkYXRldGltZSkgPT0gNDApOworICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfc2Vjb25kIChkYXRldGltZSkgPT0gMTApOworICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfbWljcm9zZWNvbmQgKGRhdGV0aW1lKSA9PSAxKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X3RpbWVfem9uZV9vZmZzZXQgKGRhdGV0aW1lKSA9PSAyKTsKKyAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZGF0ZXRpbWUpOworICBkYXRldGltZSA9IE5VTEw7CisKKyAgc3RyID0gZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKHMpOworICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOworICBzID0gTlVMTDsKKyAgZmFpbF91bmxlc3MgKGdfc3RyX2VxdWFsIChzdHIsCisgICAgICAgICAgIm1lZGlhL3gtdHlwZSwgU09NRV9EQVRFX1RJTUVfVEFHPShkYXRldGltZSlcIjIwMTAtMDYtMjNUMDc6NDA6MTAuMDAwMDAxKzAyMDBcIjsiKSk7CisKKyAgZ19mcmVlIChzdHIpOworICBzdHIgPSBOVUxMOworCit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfZnJhY3Rpb25fcmFuZ2UpCit7CisgIEdWYWx1ZSByYW5nZSA9IHsgMCwgfTsKKyAgR1ZhbHVlIHN0YXJ0ID0geyAwLCB9OworICBHVmFsdWUgZW5kID0geyAwLCB9OworICBHVmFsdWUgc3JjID0geyAwLCB9OworICBHVmFsdWUgZGVzdCA9IHsgMCwgfTsKKyAgR1ZhbHVlIHJhbmdlMiA9IHsgMCwgfTsKKworICBnX3ZhbHVlX2luaXQgKCZyYW5nZSwgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UpOworICBnX3ZhbHVlX2luaXQgKCZyYW5nZTIsIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFKTsKKyAgZ192YWx1ZV9pbml0ICgmc3RhcnQsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKKyAgZ192YWx1ZV9pbml0ICgmZW5kLCBHU1RfVFlQRV9GUkFDVElPTik7CisgIGdfdmFsdWVfaW5pdCAoJnNyYywgR1NUX1RZUEVfRlJBQ1RJT04pOworCisgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZzcmMsIDEsIDIpOworCisgIC8qIENoZWNrIHRoYXQgYSBpbnRlcnNlY3Rpb24gb2YgZnJhY3Rpb24gJiByYW5nZSA9IGZyYWN0aW9uICovCisgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZzdGFydCwgMSwgNCk7CisgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZlbmQsIDIsIDMpOworICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlICgmcmFuZ2UsICZzdGFydCwgJmVuZCk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9pbnRlcnNlY3QgKCZkZXN0LCAmc3JjLCAmcmFuZ2UpID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoR19WQUxVRV9UWVBFICgmZGVzdCkgPT0gR1NUX1RZUEVfRlJBQ1RJT04pOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZkZXN0LCAmc3JjKSA9PSBHU1RfVkFMVUVfRVFVQUwpOworCisgIC8qIENoZWNrIHRoYXQgYSBpbnRlcnNlY3Rpb24gc2VsZWN0cyB0aGUgb3ZlcmxhcHBpbmcgcmFuZ2UgKi8KKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJnN0YXJ0LCAxLCAzKTsKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJmVuZCwgMiwgMyk7CisgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2UgKCZyYW5nZTIsICZzdGFydCwgJmVuZCk7CisgIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9pbnRlcnNlY3QgKCZkZXN0LCAmcmFuZ2UsICZyYW5nZTIpID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoR19WQUxVRV9UWVBFICgmZGVzdCkgPT0gR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UpOworCisgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2UgKCZyYW5nZTIsICZzdGFydCwgJmVuZCk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJmRlc3QsICZyYW5nZTIpID09IEdTVF9WQUxVRV9FUVVBTCk7CisKKyAgLyogQ2hlY2sgdGhhdCBub24gaW50ZXJzZWN0aW9uIHJhbmdlcyBkb24ndCBpbnRlcnNlY3QgKi8KKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJnN0YXJ0LCA0LCAyKTsKKyAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJmVuZCwgNSwgMik7CisgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2UgKCZyYW5nZTIsICZzdGFydCwgJmVuZCk7CisgIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9pbnRlcnNlY3QgKCZkZXN0LCAmcmFuZ2UsICZyYW5nZTIpID09IEZBTFNFKTsKKworICBnX3ZhbHVlX3Vuc2V0ICgmc3RhcnQpOworICBnX3ZhbHVlX3Vuc2V0ICgmZW5kKTsKKyAgZ192YWx1ZV91bnNldCAoJnJhbmdlKTsKKyAgZ192YWx1ZV91bnNldCAoJnJhbmdlMik7CisgIGdfdmFsdWVfdW5zZXQgKCZzcmMpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3NlcmlhbGl6ZV9kZXNlcmlhbGl6ZV9mb3JtYXRfZW51bSkKK3sKKyAgR3N0U3RydWN0dXJlICpzLCAqczI7CisgIEdzdEZvcm1hdCBmb29iYXJfZm10OworICBnY2hhciAqc3RyLCAqc3RyMiwgKmVuZCA9IE5VTEw7CisKKyAgLyogbWFrZSBzdXJlIGN1c3RvbSBmb3JtYXRzIGFyZSBzZXJpYWxpc2VkIHByb3Blcmx5IGFzIHdlbGwgKi8KKyAgZm9vYmFyX2ZtdCA9IGdzdF9mb3JtYXRfcmVnaXN0ZXIgKCJmb29iYXIiLCAiR1NUX0ZPUk1BVF9GT09CQVIiKTsKKyAgZmFpbF91bmxlc3MgKGZvb2Jhcl9mbXQgIT0gR1NUX0ZPUk1BVF9VTkRFRklORUQpOworCisgIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoImZvby9iYXIiLCAiZm9ybWF0MSIsIEdTVF9UWVBFX0ZPUk1BVCwKKyAgICAgIEdTVF9GT1JNQVRfQllURVMsICJmb3JtYXQyIiwgR1NUX1RZUEVfRk9STUFULCBHU1RfRk9STUFUX1RJTUUsCisgICAgICAiZm9ybWF0MyIsIEdTVF9UWVBFX0ZPUk1BVCwgR1NUX0ZPUk1BVF9ERUZBVUxULCAiZm9ybWF0NCIsCisgICAgICBHU1RfVFlQRV9GT1JNQVQsIGZvb2Jhcl9mbXQsIE5VTEwpOworCisgIHN0ciA9IGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChzKTsKKyAgR1NUX0xPRyAoIkdvdCBzdHJ1Y3R1cmUgc3RyaW5nICclcyciLCBHU1RfU1RSX05VTEwgKHN0cikpOworICBmYWlsX3VubGVzcyAoc3RyICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoc3Ryc3RyIChzdHIsICJUSU1FIikgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChzdHJzdHIgKHN0ciwgIkJZVEUiKSAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKHN0cnN0ciAoc3RyLCAiREVGQVVMVCIpICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoc3Ryc3RyIChzdHIsICJGT09CQVIiKSAhPSBOVUxMKTsKKworICBzMiA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKHN0ciwgJmVuZCk7CisgIGZhaWxfdW5sZXNzIChzMiAhPSBOVUxMKTsKKworICBzdHIyID0gZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKHMyKTsKKyAgZmFpbF91bmxlc3MgKHN0cjIgIT0gTlVMTCk7CisKKyAgZmFpbF91bmxlc3MgKGdfc3RyX2VxdWFsIChzdHIsIHN0cjIpKTsKKworICBnX2ZyZWUgKHN0cik7CisgIGdfZnJlZSAoc3RyMik7CisgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocyk7CisgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoczIpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3NlcmlhbGl6ZV9kZXNlcmlhbGl6ZV9jYXBzKQoreworICBHVmFsdWUgdmFsdWUgPSB7IDAgfQorICAsIHZhbHVlMiA9IHsKKyAgMH07CisgIEdzdENhcHMgKmNhcHMsICpjYXBzMjsKKyAgZ2NoYXIgKnNlcmlhbGl6ZWQ7CisKKyAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ0ZXN0L2NhcHMiLAorICAgICAgImZvbyIsIEdfVFlQRV9JTlQsIDEwLCAiYmFyIiwgR19UWVBFX1NUUklORywgInRlc3QiLCBOVUxMKTsKKyAgZmFpbF9pZiAoR1NUX0NBUFNfUkVGQ09VTlRfVkFMVUUgKGNhcHMpICE9IDEpOworCisgIC8qIGFuZCBhc3NpZ24gY2FwcyB0byBndmFsdWUgKi8KKyAgZ192YWx1ZV9pbml0ICgmdmFsdWUsIEdTVF9UWVBFX0NBUFMpOworICBnX3ZhbHVlX3Rha2VfYm94ZWQgKCZ2YWx1ZSwgY2Fwcyk7CisgIGZhaWxfaWYgKEdTVF9DQVBTX1JFRkNPVU5UX1ZBTFVFIChjYXBzKSAhPSAxKTsKKworICAvKiBub3cgc2VyaWFsaXplIGl0ICovCisgIHNlcmlhbGl6ZWQgPSBnc3RfdmFsdWVfc2VyaWFsaXplICgmdmFsdWUpOworICBHU1RfREVCVUcgKCJzZXJpYWxpemVkIGNhcHMgdG8gJXMiLCBzZXJpYWxpemVkKTsKKyAgZmFpbF91bmxlc3MgKHNlcmlhbGl6ZWQgIT0gTlVMTCk7CisKKyAgLyogcmVmY291bnQgc2hvdWxkIG5vdCBjaGFuZ2UgKi8KKyAgZmFpbF9pZiAoR1NUX0NBUFNfUkVGQ09VTlRfVkFMVUUgKGNhcHMpICE9IDEpOworCisgIC8qIG5vdyBkZXNlcmlhbGl6ZSBhZ2FpbiAqLworICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZTIsIEdTVF9UWVBFX0NBUFMpOworICBnc3RfdmFsdWVfZGVzZXJpYWxpemUgKCZ2YWx1ZTIsIHNlcmlhbGl6ZWQpOworCisgIGNhcHMyID0gZ192YWx1ZV9nZXRfYm94ZWQgKCZ2YWx1ZTIpOworICBmYWlsX2lmIChHU1RfQ0FQU19SRUZDT1VOVF9WQUxVRSAoY2FwczIpICE9IDEpOworCisgIC8qIHRoZXkgc2hvdWxkIGJlIGVxdWFsICovCisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoY2FwcywgY2FwczIpKTsKKworICAvKiBjbGVhbnVwICovCisgIGdfdmFsdWVfdW5zZXQgKCZ2YWx1ZSk7CisgIGdfdmFsdWVfdW5zZXQgKCZ2YWx1ZTIpOworICBnX2ZyZWUgKHNlcmlhbGl6ZWQpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2ludF9yYW5nZSkKK3sKKyAgR1ZhbHVlIHJhbmdlID0geyAwLCB9OworICBHVmFsdWUgc3RhcnQgPSB7IDAsIH07CisgIEdWYWx1ZSBlbmQgPSB7IDAsIH07CisgIEdWYWx1ZSBzcmMgPSB7IDAsIH07CisgIEdWYWx1ZSBkZXN0ID0geyAwLCB9OworICBHVmFsdWUgcmFuZ2UyID0geyAwLCB9OworCisgIGdfdmFsdWVfaW5pdCAoJnJhbmdlLCBHU1RfVFlQRV9JTlRfUkFOR0UpOworICBnX3ZhbHVlX2luaXQgKCZyYW5nZTIsIEdTVF9UWVBFX0lOVF9SQU5HRSk7CisgIGdfdmFsdWVfaW5pdCAoJnN0YXJ0LCBHX1RZUEVfSU5UKTsKKyAgZ192YWx1ZV9pbml0ICgmZW5kLCBHX1RZUEVfSU5UKTsKKyAgZ192YWx1ZV9pbml0ICgmc3JjLCBHX1RZUEVfSU5UKTsKKworICBnX3ZhbHVlX3NldF9pbnQgKCZzcmMsIDIpOworCisgIC8qIENoZWNrIHRoYXQgYSBpbnRlcnNlY3Rpb24gb2YgaW50ICYgcmFuZ2UgPSBpbnQgKi8KKyAgZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2UgKCZyYW5nZSwgMSwgNSk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9pbnRlcnNlY3QgKCZkZXN0LCAmc3JjLCAmcmFuZ2UpID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoR19WQUxVRV9UWVBFICgmZGVzdCkgPT0gR19UWVBFX0lOVCk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJmRlc3QsICZzcmMpID09IEdTVF9WQUxVRV9FUVVBTCk7CisKKyAgLyogQ2hlY2sgdGhhdCBhIGludGVyc2VjdGlvbiBzZWxlY3RzIHRoZSBvdmVybGFwcGluZyByYW5nZSAqLworICBnc3RfdmFsdWVfc2V0X2ludF9yYW5nZSAoJnJhbmdlMiwgMiwgMyk7CisgIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9pbnRlcnNlY3QgKCZkZXN0LCAmcmFuZ2UsICZyYW5nZTIpID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoR19WQUxVRV9UWVBFICgmZGVzdCkgPT0gR1NUX1RZUEVfSU5UX1JBTkdFKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZkZXN0LCAmcmFuZ2UyKSA9PSBHU1RfVkFMVUVfRVFVQUwpOworCisgIC8qIENoZWNrIHRoYXQgbm9uIGludGVyc2VjdGlvbiByYW5nZXMgZG9uJ3QgaW50ZXJzZWN0ICovCisgIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlICgmcmFuZ2UyLCA2LCA3KTsKKyAgZ192YWx1ZV91bnNldCAoJmRlc3QpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2ludGVyc2VjdCAoJmRlc3QsICZyYW5nZSwgJnJhbmdlMikgPT0gRkFMU0UpOworCisgIGdfdmFsdWVfdW5zZXQgKCZzdGFydCk7CisgIGdfdmFsdWVfdW5zZXQgKCZlbmQpOworICBnX3ZhbHVlX3Vuc2V0ICgmcmFuZ2UpOworICBnX3ZhbHVlX3Vuc2V0ICgmcmFuZ2UyKTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYyk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfaW50NjRfcmFuZ2UpCit7CisgIEdWYWx1ZSByYW5nZSA9IHsgMCwgfTsKKyAgR1ZhbHVlIHN0YXJ0ID0geyAwLCB9OworICBHVmFsdWUgZW5kID0geyAwLCB9OworICBHVmFsdWUgc3JjID0geyAwLCB9OworICBHVmFsdWUgZGVzdCA9IHsgMCwgfTsKKyAgR1ZhbHVlIHJhbmdlMiA9IHsgMCwgfTsKKworICBnX3ZhbHVlX2luaXQgKCZyYW5nZSwgR1NUX1RZUEVfSU5UNjRfUkFOR0UpOworICBnX3ZhbHVlX2luaXQgKCZyYW5nZTIsIEdTVF9UWVBFX0lOVDY0X1JBTkdFKTsKKyAgZ192YWx1ZV9pbml0ICgmc3RhcnQsIEdfVFlQRV9JTlQ2NCk7CisgIGdfdmFsdWVfaW5pdCAoJmVuZCwgR19UWVBFX0lOVDY0KTsKKyAgZ192YWx1ZV9pbml0ICgmc3JjLCBHX1RZUEVfSU5UNjQpOworCisgIGdfdmFsdWVfc2V0X2ludDY0ICgmc3JjLCAyKTsKKworICAvKiBDaGVjayB0aGF0IGEgaW50ZXJzZWN0aW9uIG9mIGludDY0ICYgcmFuZ2UgPSBpbnQ2NCAqLworICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlICgmcmFuZ2UsIDEsIDUpOworCisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfaW50ZXJzZWN0ICgmZGVzdCwgJnNyYywgJnJhbmdlKSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKEdfVkFMVUVfVFlQRSAoJmRlc3QpID09IEdfVFlQRV9JTlQ2NCk7CisgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJmRlc3QsICZzcmMpID09IEdTVF9WQUxVRV9FUVVBTCk7CisKKyAgLyogQ2hlY2sgdGhhdCBhIGludGVyc2VjdGlvbiBzZWxlY3RzIHRoZSBvdmVybGFwcGluZyByYW5nZSAqLworICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlICgmcmFuZ2UyLCAyLCAzKTsKKyAgZ192YWx1ZV91bnNldCAoJmRlc3QpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2ludGVyc2VjdCAoJmRlc3QsICZyYW5nZSwgJnJhbmdlMikgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChHX1ZBTFVFX1RZUEUgKCZkZXN0KSA9PSBHU1RfVFlQRV9JTlQ2NF9SQU5HRSk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmZGVzdCwgJnJhbmdlMikgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKKworICAvKiBDaGVjayB0aGF0IG5vbiBpbnRlcnNlY3Rpb24gcmFuZ2VzIGRvbid0IGludGVyc2VjdCAqLworICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlICgmcmFuZ2UyLCA2LCA3KTsKKyAgZ192YWx1ZV91bnNldCAoJmRlc3QpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2ludGVyc2VjdCAoJmRlc3QsICZyYW5nZSwgJnJhbmdlMikgPT0gRkFMU0UpOworCisgIGdfdmFsdWVfdW5zZXQgKCZzdGFydCk7CisgIGdfdmFsdWVfdW5zZXQgKCZlbmQpOworICBnX3ZhbHVlX3Vuc2V0ICgmcmFuZ2UpOworICBnX3ZhbHVlX3Vuc2V0ICgmcmFuZ2UyKTsKKyAgZ192YWx1ZV91bnNldCAoJnNyYyk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc2VyaWFsaXplX2ludDY0X3JhbmdlKQoreworICBpbnQgaSA9IDA7CisKKyAgZ2ludDY0IGludDY0X3Jhbmdlc1tdID0geworICAgIDAsIDUsCisgICAgMCwgR19NQVhJTlQsCisgICAgNSwgR19NQVhJTlQzMiwKKyAgICA1LCBHX01BWElOVDY0LAorICB9OworICBnaW50IGludDY0X3Jhbmdlc19zaXplID0gc2l6ZW9mIChpbnQ2NF9yYW5nZXMpIC8gc2l6ZW9mIChpbnQ2NF9yYW5nZXNbMF0pIC8gMjsKKworICBnY2hhciAqaW50NjRfcmFuZ2Vfc3RyaW5nc1tdID0geworICAgIGdfc3RyZHVwICgiWyAwLCA1IF0iKSwKKyAgICBnX3N0cmR1cF9wcmludGYgKCJbIDAsICUiIEdfR0lOVDY0X0ZPUk1BVCAiIF0iLCAoZ2ludDY0KSBHX01BWElOVCksCisgICAgZ19zdHJkdXBfcHJpbnRmICgiWyA1LCAlIiBHX0dJTlQ2NF9GT1JNQVQgIiBdIiwgKGdpbnQ2NCkgR19NQVhJTlQzMiksCisgICAgZ19zdHJkdXBfcHJpbnRmICgiWyA1LCAlIiBHX0dJTlQ2NF9GT1JNQVQgIiBdIiwgR19NQVhJTlQ2NCksCisgIH07CisgIGdpbnQgaW50NjRfcmFuZ2Vfc3RyaW5nc19zaXplID0KKyAgICAgIHNpemVvZiAoaW50NjRfcmFuZ2Vfc3RyaW5ncykgLyBzaXplb2YgKGludDY0X3JhbmdlX3N0cmluZ3NbMF0pOworCisgIGZhaWxfdW5sZXNzIChpbnQ2NF9yYW5nZXNfc2l6ZSA9PSBpbnQ2NF9yYW5nZV9zdHJpbmdzX3NpemUpOworCisgIHdoaWxlIChpICsgMSA8IChpbnQ2NF9yYW5nZXNfc2l6ZSAqIDIpKSB7CisgICAgaWYgKChpICsgMSkgJSAyKSB7CisgICAgICBnY2hhciAqc3RyOworICAgICAgZ2NoYXIgKnN0cjI7CisgICAgICBHVmFsdWUgdmFsdWUgPSB7IDAgfTsKKyAgICAgIGNvbnN0IEdWYWx1ZSAqZGVzZXJpYWxpemVkX3ZhbHVlOworICAgICAgaW50IGlkeCA9IGkgLyAyOworICAgICAgR3N0U3RydWN0dXJlICpzOworCisgICAgICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZSwgR1NUX1RZUEVfSU5UNjRfUkFOR0UpOworCisgICAgICAvKiBjaGVjayBzZXJpYWxpemF0aW9uICovCisgICAgICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlICgmdmFsdWUsIGludDY0X3Jhbmdlc1tpXSwgaW50NjRfcmFuZ2VzW2kgKyAxXSk7CisgICAgICBzdHIgPSBnc3RfdmFsdWVfc2VyaWFsaXplICgmdmFsdWUpOworICAgICAgZmFpbF91bmxlc3MgKHN0cmNtcCAoc3RyLCBpbnQ2NF9yYW5nZV9zdHJpbmdzW2lkeF0pID09IDApOworICAgICAgZ19mcmVlIChpbnQ2NF9yYW5nZV9zdHJpbmdzW2lkeF0pOworCisgICAgICAvKiBub3cgZGVzZXJpYWxpemUgYWdhaW4gdG8gYW4gaW50NjQgcmFuZ2UgKi8KKyAgICAgIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoImZvby9iYXIiLCAicmFuZ2UiLCBHU1RfVFlQRV9JTlQ2NF9SQU5HRSwKKyAgICAgICAgICBpbnQ2NF9yYW5nZXNbaV0sIGludDY0X3Jhbmdlc1tpICsgMV0sIE5VTEwpOworICAgICAgZGVzZXJpYWxpemVkX3ZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHMsICJyYW5nZSIpOworICAgICAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19JTlQ2NF9SQU5HRSAoZGVzZXJpYWxpemVkX3ZhbHVlKSA9PSBUUlVFKTsKKyAgICAgIHN0cjIgPSBnc3RfdmFsdWVfc2VyaWFsaXplIChkZXNlcmlhbGl6ZWRfdmFsdWUpOworCisgICAgICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9taW4gKGRlc2VyaWFsaXplZF92YWx1ZSkgPT0KKyAgICAgICAgICBpbnQ2NF9yYW5nZXNbaV0pOworICAgICAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWF4IChkZXNlcmlhbGl6ZWRfdmFsdWUpID09CisgICAgICAgICAgaW50NjRfcmFuZ2VzW2kgKyAxXSk7CisKKyAgICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocyk7CisgICAgICBnX2ZyZWUgKHN0cik7CisgICAgICBnX2ZyZWUgKHN0cjIpOworICAgIH0KKyAgICBpKys7CisgIH0KK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9kZXNlcmlhbGl6ZV9pbnRfcmFuZ2UpCit7CisgIEdzdFN0cnVjdHVyZSAqczsKKyAgZ2NoYXIgKnN0ciwgKnN0cjI7CisgIGdjaGFyICplbmQgPSBOVUxMOworICBjb25zdCBHVmFsdWUgKmRlc2VyaWFsaXplZF92YWx1ZTsKKworICAvKiBjaGVjayBhIHZhbGlkIGludF9yYW5nZSBkZXNlcmlhbGl6YXRpb24gKi8KKyAgc3RyID0gZ19zdHJkdXBfcHJpbnRmICgiZm9vL2JhciwgcmFuZ2U9WyAxLCAlZCBdOyIsIEdfTUFYSU5UKTsKKyAgcyA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKHN0ciwgJmVuZCk7CisgIGZhaWxfdW5sZXNzICgqZW5kID09ICdcMCcpOworICBkZXNlcmlhbGl6ZWRfdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAocywgInJhbmdlIik7CisgIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfSU5UX1JBTkdFIChkZXNlcmlhbGl6ZWRfdmFsdWUpID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWluIChkZXNlcmlhbGl6ZWRfdmFsdWUpID09IDEpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWF4IChkZXNlcmlhbGl6ZWRfdmFsdWUpID09IEdfTUFYSU5UKTsKKyAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzKTsKKyAgZW5kID0gTlVMTDsKKyAgZ19mcmVlIChzdHIpOworCisgIC8qIGNoZWNrIGludmFsaWQgaW50X3JhbmdlIGRlc2VyaWFsaXphdGlvbiAqLworICBzdHIgPQorICAgICAgZ19zdHJkdXBfcHJpbnRmICgiZm9vL2JhciwgcmFuZ2U9WyAxLCAlIiBHX0dJTlQ2NF9GT1JNQVQgIiBdOyIsCisgICAgICAoZ2ludDY0KSBHX01BWElOVCArIDEpOworICBBU1NFUlRfQ1JJVElDQUwgKHMgPSBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChzdHIsICZlbmQpKTsKKyAgZ19mcmVlIChzdHIpOworICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOworICBzdHIgPQorICAgICAgZ19zdHJkdXBfcHJpbnRmICgiZm9vL2JhciwgcmFuZ2U9WyAlIiBHX0dJTlQ2NF9GT1JNQVQgIiwgJSIKKyAgICAgIEdfR0lOVDY0X0ZPUk1BVCAiIF07IiwgKGdpbnQ2NCkgR19NQVhJTlQsIChnaW50NjQpIEdfTUFYSU5UICsgMSk7CisgIEFTU0VSVF9DUklUSUNBTCAocyA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKHN0ciwgTlVMTCkpOworICBlbmQgPSBOVUxMOworICBnX2ZyZWUgKHN0cik7CisgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocyk7CisKKyAgLyogY2hlY2sgYSB2YWxpZCBpbnQ2NF9yYW5nZSBkZXNlcmlhbGl6YXRpb24uIFRob3NlIHJhbmdlcyBuZWVkIHRvCisgICAqIGJlIGV4cGxpY2l0IGFib3V0IHRoZWlyIHN0b3JhZ2UgdHlwZS4gKi8KKyAgc3RyID0gZ19zdHJkdXBfcHJpbnRmICgiZm9vL2JhciwgcmFuZ2U9KGdpbnQ2NClbIDEsICVkIF07IiwgR19NQVhJTlQpOworICBzID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAoc3RyLCAmZW5kKTsKKyAgZmFpbF91bmxlc3MgKCplbmQgPT0gJ1wwJyk7CisgIGRlc2VyaWFsaXplZF92YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAicmFuZ2UiKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19JTlQ2NF9SQU5HRSAoZGVzZXJpYWxpemVkX3ZhbHVlKSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWluIChkZXNlcmlhbGl6ZWRfdmFsdWUpID09IDEpOworICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9tYXggKGRlc2VyaWFsaXplZF92YWx1ZSkgPT0gR19NQVhJTlQpOworICBzdHIyID0gZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKHMpOworICBmYWlsX3VubGVzcyAoc3RyY21wIChzdHIsIHN0cjIpID09IDApOworICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOworICBlbmQgPSBOVUxMOworICBnX2ZyZWUgKHN0cik7CisgIGdfZnJlZSAoc3RyMik7CisKKyAgLyogY2hlY2sgaW52YWxpZCBpbnQ2NF9yYW5nZSAoc3RhcnRpbmcgd2l0aCBhIGdpbnQpIGRlc2VyaWFsaXphdGlvbiAqLworICBzdHIgPQorICAgICAgZ19zdHJkdXBfcHJpbnRmICgiZm9vL2JhciwgcmFuZ2U9KGdpbnQ2NClbIDEsICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBdOyIsCisgICAgICAoZ3VpbnQ2NCkgR19NQVhJTlQ2NCArIDEpOworICBBU1NFUlRfQ1JJVElDQUwgKHMgPSBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChzdHIsICZlbmQpKTsKKyAgZmFpbF91bmxlc3MgKCplbmQgPT0gJ1wwJyk7CisgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocyk7CisgIGVuZCA9IE5VTEw7CisgIGdfZnJlZSAoc3RyKTsKKworICAvKiBjaGVjayBpbnZhbGlkIGludDY0X3JhbmdlIGRlc2VyaWFsaXphdGlvbiBpbnRvIGEgaW50NjRfcmFuZ2UgKi8KKyAgc3RyID0KKyAgICAgIGdfc3RyZHVwX3ByaW50ZiAoImZvby9iYXIsIHJhbmdlPShnaW50NjQpWyAlIiBHX0dJTlQ2NF9GT1JNQVQgIiwgJSIKKyAgICAgIEdfR1VJTlQ2NF9GT1JNQVQgIiBdOyIsIChnaW50NjQpIEdfTUFYSU5ULCAoZ3VpbnQ2NCkgR19NQVhJTlQ2NCArIDEpOworICBBU1NFUlRfQ1JJVElDQUwgKHMgPSBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChzdHIsIE5VTEwpKTsKKyAgZ19mcmVlIChzdHIpOworICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOworCisgIC8qIGNoZWNrIGludmFsaWQgaW50NjRfcmFuZ2UgZGVzZXJpYWxpemF0aW9uIGludG8gYSBpbnRfcmFuZ2UgKi8KKyAgc3RyID0KKyAgICAgIGdfc3RyZHVwX3ByaW50ZiAoImZvby9iYXIsIHJhbmdlPVsgJSIgR19HSU5UNjRfRk9STUFUICIsICUiCisgICAgICBHX0dVSU5UNjRfRk9STUFUICIgXTsiLCAoZ2ludDY0KSBHX01BWElOVCwgKGd1aW50NjQpIEdfTUFYSU5UNjQgKyAxKTsKKyAgcyA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKHN0ciwgJmVuZCk7CisgIGZhaWxfdW5sZXNzIChzID09IE5VTEwpOworICBmYWlsX3VubGVzcyAoZW5kID09IE5VTEwpOworICBnX2ZyZWUgKHN0cik7Cit9CisKK0dTVF9FTkRfVEVTVCBzdGF0aWMgU3VpdGUgKgorZ3N0X3ZhbHVlX3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdFZhbHVlIik7CisgIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKKworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Rlc2VyaWFsaXplX2J1ZmZlcik7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zZXJpYWxpemVfYnVmZmVyKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Rlc2VyaWFsaXplX2dpbnQpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZGVzZXJpYWxpemVfZ2ludF9mYWlsdXJlcyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9kZXNlcmlhbGl6ZV9ndWludCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9kZXNlcmlhbGl6ZV9ndWludF9mYWlsdXJlcyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9kZXNlcmlhbGl6ZV9naW50NjQpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZGVzZXJpYWxpemVfZ3VpbnQ2NCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9kZXNlcmlhbGl6ZV9ndWNoYXIpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZGVzZXJpYWxpemVfZ3N0ZnJhY3Rpb24pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc2VyaWFsaXplX2ZsYWdzKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Rlc2VyaWFsaXplX2ZsYWdzKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NlcmlhbGl6ZV9kZXNlcmlhbGl6ZV9mb3JtYXRfZW51bSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdHJpbmcpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZGVzZXJpYWxpemVfc3RyaW5nKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3ZhbHVlX2NvbXBhcmUpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdmFsdWVfaW50ZXJzZWN0KTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3ZhbHVlX3N1YnRyYWN0X2ludCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF92YWx1ZV9zdWJ0cmFjdF9pbnQ2NCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF92YWx1ZV9zdWJ0cmFjdF9kb3VibGUpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdmFsdWVfc3VidHJhY3RfZnJhY3Rpb24pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdmFsdWVfc3VidHJhY3RfZnJhY3Rpb25fcmFuZ2UpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdmFsdWVfc3VidHJhY3RfZnJhY3Rpb25fbGlzdCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9kYXRlKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2RhdGVfdGltZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mcmFjdGlvbl9yYW5nZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zZXJpYWxpemVfZGVzZXJpYWxpemVfY2Fwcyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9pbnRfcmFuZ2UpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW50NjRfcmFuZ2UpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc2VyaWFsaXplX2ludDY0X3JhbmdlKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Rlc2VyaWFsaXplX2ludF9yYW5nZSk7CisKKyAgcmV0dXJuIHM7Cit9CisKK0dTVF9DSEVDS19NQUlOIChnc3RfdmFsdWUpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9hcm0uaCBiL3Rlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfYXJtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM3NjRjOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfYXJtLmgKQEAgLTAsMCArMSw3MCBAQAorCitHc3RDaGVja0FCSVN0cnVjdCBsaXN0W10gPSB7CisgIHsiR3N0QmluIiwgc2l6ZW9mIChHc3RCaW4pLCAxOTJ9LAorICB7IkdzdEJpbkNsYXNzIiwgc2l6ZW9mIChHc3RCaW5DbGFzcyksIDI4OH0sCisgIHsiR3N0QnVmZmVyIiwgc2l6ZW9mIChHc3RCdWZmZXIpLCA4OH0sCisgIHsiR3N0QnVmZmVyQ2xhc3MiLCBzaXplb2YgKEdzdEJ1ZmZlckNsYXNzKSwgMTZ9LAorICB7IkdzdEJ1cyIsIHNpemVvZiAoR3N0QnVzKSwgODB9LAorICB7IkdzdEJ1c0NsYXNzIiwgc2l6ZW9mIChHc3RCdXNDbGFzcyksIDE0NH0sCisgIHsiR3N0Q2FwcyIsIHNpemVvZiAoR3N0Q2FwcyksIDMyfSwKKyAgeyJHc3RTdGF0aWNDYXBzIiwgc2l6ZW9mIChHc3RTdGF0aWNDYXBzKSwgNTJ9LAorICB7IkdzdENoaWxkUHJveHlJbnRlcmZhY2UiLCBzaXplb2YgKEdzdENoaWxkUHJveHlJbnRlcmZhY2UpLCA0MH0sCisgIHsiR3N0Q2xvY2siLCBzaXplb2YgKEdzdENsb2NrKSwgMTc2fSwKKyAgeyJHc3RDbG9ja0NsYXNzIiwgc2l6ZW9mIChHc3RDbG9ja0NsYXNzKSwgMTYwfSwKKyAgeyJHc3RFbGVtZW50Iiwgc2l6ZW9mIChHc3RFbGVtZW50KSwgMTM2fSwKKyAgeyJHc3RFbGVtZW50Q2xhc3MiLCBzaXplb2YgKEdzdEVsZW1lbnRDbGFzcyksIDI0OH0sCisgIHsiR3N0RWxlbWVudEZhY3RvcnkiLCBzaXplb2YgKEdzdEVsZW1lbnRGYWN0b3J5KSwgMTQ0fSwKKyAgeyJHc3RFbGVtZW50RmFjdG9yeUNsYXNzIiwgc2l6ZW9mIChHc3RFbGVtZW50RmFjdG9yeUNsYXNzKSwgMTUyfSwKKyAgeyJHc3RFbGVtZW50RGV0YWlscyIsIHNpemVvZiAoR3N0RWxlbWVudERldGFpbHMpLCAzMn0sCisgIHsiR3N0RXZlbnQiLCBzaXplb2YgKEdzdEV2ZW50KSwgNDh9LAorICB7IkdzdEV2ZW50Q2xhc3MiLCBzaXplb2YgKEdzdEV2ZW50Q2xhc3MpLCAzMn0sCisgIHsiR3N0Rm9ybWF0RGVmaW5pdGlvbiIsIHNpemVvZiAoR3N0Rm9ybWF0RGVmaW5pdGlvbiksIDE2fSwKKyAgeyJHc3RJbmRleEVudHJ5Iiwgc2l6ZW9mIChHc3RJbmRleEVudHJ5KSwgMjB9LAorICB7IkdzdEluZGV4R3JvdXAiLCBzaXplb2YgKEdzdEluZGV4R3JvdXApLCAxNn0sCisgIHsiR3N0SW5kZXgiLCBzaXplb2YgKEdzdEluZGV4KSwgMTAwfSwKKyAgeyJHc3RJbmRleENsYXNzIiwgc2l6ZW9mIChHc3RJbmRleENsYXNzKSwgMTU2fSwKKyAgeyJHc3RJbmRleEFzc29jaWF0aW9uIiwgc2l6ZW9mIChHc3RJbmRleEFzc29jaWF0aW9uKSwgMTZ9LAorICB7IkdzdEluZGV4RmFjdG9yeSIsIHNpemVvZiAoR3N0SW5kZXhGYWN0b3J5KSwgOTZ9LAorICB7IkdzdEluZGV4RmFjdG9yeUNsYXNzIiwgc2l6ZW9mIChHc3RJbmRleEZhY3RvcnlDbGFzcyksIDE1Mn0sCisgIHsiR3N0RGVidWdDYXRlZ29yeSIsIHNpemVvZiAoR3N0RGVidWdDYXRlZ29yeSksIDE2fSwKKyAgeyJHc3RJdGVyYXRvciIsIHNpemVvZiAoR3N0SXRlcmF0b3IpLCA1Mn0sCisgIHsiR3N0TWVzc2FnZSIsIHNpemVvZiAoR3N0TWVzc2FnZSksIDY0fSwKKyAgeyJHc3RNZXNzYWdlQ2xhc3MiLCBzaXplb2YgKEdzdE1lc3NhZ2VDbGFzcyksIDMyfSwKKyAgeyJHc3RNaW5pT2JqZWN0Iiwgc2l6ZW9mIChHc3RNaW5pT2JqZWN0KSwgMTZ9LAorICB7IkdzdE1pbmlPYmplY3RDbGFzcyIsIHNpemVvZiAoR3N0TWluaU9iamVjdENsYXNzKSwgMTZ9LAorICB7IkdzdE9iamVjdCIsIHNpemVvZiAoR3N0T2JqZWN0KSwgNDB9LAorICB7IkdzdE9iamVjdENsYXNzIiwgc2l6ZW9mIChHc3RPYmplY3RDbGFzcyksIDEyMH0sCisgIHsiR3N0UGFkIiwgc2l6ZW9mIChHc3RQYWQpLCAxODh9LAorICB7IkdzdFBhZENsYXNzIiwgc2l6ZW9mIChHc3RQYWRDbGFzcyksIDE1Mn0sCisgIHsiR3N0UGFkVGVtcGxhdGUiLCBzaXplb2YgKEdzdFBhZFRlbXBsYXRlKSwgNzJ9LAorICB7IkdzdFBhZFRlbXBsYXRlQ2xhc3MiLCBzaXplb2YgKEdzdFBhZFRlbXBsYXRlQ2xhc3MpLCAxNDB9LAorICB7IkdzdFN0YXRpY1BhZFRlbXBsYXRlIiwgc2l6ZW9mIChHc3RTdGF0aWNQYWRUZW1wbGF0ZSksIDY0fSwKKyAgeyJHc3RQaXBlbGluZSIsIHNpemVvZiAoR3N0UGlwZWxpbmUpLCAyMzJ9LAorICB7IkdzdFBpcGVsaW5lQ2xhc3MiLCBzaXplb2YgKEdzdFBpcGVsaW5lQ2xhc3MpLCAzMDR9LAorICB7IkdzdFBsdWdpbiIsIHNpemVvZiAoR3N0UGx1Z2luKSwgMTUyfSwKKyAgeyJHc3RQbHVnaW5DbGFzcyIsIHNpemVvZiAoR3N0UGx1Z2luQ2xhc3MpLCAxMzZ9LAorICB7IkdzdFBsdWdpbkRlc2MiLCBzaXplb2YgKEdzdFBsdWdpbkRlc2MpLCA1Nn0sCisgIHsiR3N0UGx1Z2luRmVhdHVyZSIsIHNpemVvZiAoR3N0UGx1Z2luRmVhdHVyZSksIDcyfSwKKyAgeyJHc3RQbHVnaW5GZWF0dXJlQ2xhc3MiLCBzaXplb2YgKEdzdFBsdWdpbkZlYXR1cmVDbGFzcyksIDEzNn0sCisgIHsiR3N0UXVlcnlUeXBlRGVmaW5pdGlvbiIsIHNpemVvZiAoR3N0UXVlcnlUeXBlRGVmaW5pdGlvbiksIDE2fSwKKyAgeyJHc3RRdWVyeSIsIHNpemVvZiAoR3N0UXVlcnkpLCAyOH0sCisgIHsiR3N0UXVlcnlDbGFzcyIsIHNpemVvZiAoR3N0UXVlcnlDbGFzcyksIDMyfSwKKyAgeyJHc3RSZWdpc3RyeSIsIHNpemVvZiAoR3N0UmVnaXN0cnkpLCA3Mn0sCisgIHsiR3N0UmVnaXN0cnlDbGFzcyIsIHNpemVvZiAoR3N0UmVnaXN0cnlDbGFzcyksIDE0NH0sCisgIHsiR3N0U2VnbWVudCIsIHNpemVvZiAoR3N0U2VnbWVudCksIDg4fSwKKyAgeyJHc3RTdHJ1Y3R1cmUiLCBzaXplb2YgKEdzdFN0cnVjdHVyZSksIDIwfSwKKyAgeyJHc3RTeXN0ZW1DbG9jayIsIHNpemVvZiAoR3N0U3lzdGVtQ2xvY2spLCAyMDB9LAorICB7IkdzdFN5c3RlbUNsb2NrQ2xhc3MiLCBzaXplb2YgKEdzdFN5c3RlbUNsb2NrQ2xhc3MpLCAxNzZ9LAorICB7IkdzdFRhZ1NldHRlcklGYWNlIiwgc2l6ZW9mIChHc3RUYWdTZXR0ZXJJRmFjZSksIDh9LAorICB7IkdzdFRhc2siLCBzaXplb2YgKEdzdFRhc2spLCA4MH0sCisgIHsiR3N0VGFza0NsYXNzIiwgc2l6ZW9mIChHc3RUYXNrQ2xhc3MpLCAxNDB9LAorICB7IkdzdFRyYWNlIiwgc2l6ZW9mIChHc3RUcmFjZSksIDIwfSwKKyAgeyJHc3RUcmFjZUVudHJ5Iiwgc2l6ZW9mIChHc3RUcmFjZUVudHJ5KSwgMTI4fSwKKyAgeyJHc3RBbGxvY1RyYWNlIiwgc2l6ZW9mIChHc3RBbGxvY1RyYWNlKSwgMTZ9LAorICB7IkdzdFR5cGVGaW5kIiwgc2l6ZW9mIChHc3RUeXBlRmluZCksIDMyfSwKKyAgeyJHc3RUeXBlRmluZEZhY3RvcnkiLCBzaXplb2YgKEdzdFR5cGVGaW5kRmFjdG9yeSksIDEwOH0sCisgIHsiR3N0VHlwZUZpbmRGYWN0b3J5Q2xhc3MiLCBzaXplb2YgKEdzdFR5cGVGaW5kRmFjdG9yeUNsYXNzKSwgMTUyfSwKKyAgeyJHc3RVUklIYW5kbGVySW50ZXJmYWNlIiwgc2l6ZW9mIChHc3RVUklIYW5kbGVySW50ZXJmYWNlKSwgNDR9LAorICB7IkdzdFZhbHVlVGFibGUiLCBzaXplb2YgKEdzdFZhbHVlVGFibGUpLCAzMn0sCisgIHtOVUxMLCAwLCAwfQorfTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfaHBwYS5oIGIvdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9ocHBhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YzMjVmMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfaHBwYS5oCkBAIC0wLDAgKzEsNjkgQEAKK3N0YXRpYyBHc3RDaGVja0FCSVN0cnVjdCBsaXN0W10gPSB7CisgIHsiR3N0QmluIiwgc2l6ZW9mIChHc3RCaW4pLCAxOTJ9LAorICB7IkdzdEJpbkNsYXNzIiwgc2l6ZW9mIChHc3RCaW5DbGFzcyksIDI4OH0sCisgIHsiR3N0QnVmZmVyIiwgc2l6ZW9mIChHc3RCdWZmZXIpLCA4OH0sCisgIHsiR3N0QnVmZmVyQ2xhc3MiLCBzaXplb2YgKEdzdEJ1ZmZlckNsYXNzKSwgMTZ9LAorICB7IkdzdEJ1cyIsIHNpemVvZiAoR3N0QnVzKSwgODB9LAorICB7IkdzdEJ1c0NsYXNzIiwgc2l6ZW9mIChHc3RCdXNDbGFzcyksIDE0NH0sCisgIHsiR3N0Q2FwcyIsIHNpemVvZiAoR3N0Q2FwcyksIDMyfSwKKyAgeyJHc3RTdGF0aWNDYXBzIiwgc2l6ZW9mIChHc3RTdGF0aWNDYXBzKSwgNTJ9LAorICB7IkdzdENoaWxkUHJveHlJbnRlcmZhY2UiLCBzaXplb2YgKEdzdENoaWxkUHJveHlJbnRlcmZhY2UpLCA0MH0sCisgIHsiR3N0Q2xvY2siLCBzaXplb2YgKEdzdENsb2NrKSwgMTc2fSwKKyAgeyJHc3RDbG9ja0NsYXNzIiwgc2l6ZW9mIChHc3RDbG9ja0NsYXNzKSwgMTYwfSwKKyAgeyJHc3RFbGVtZW50Iiwgc2l6ZW9mIChHc3RFbGVtZW50KSwgMTM2fSwKKyAgeyJHc3RFbGVtZW50Q2xhc3MiLCBzaXplb2YgKEdzdEVsZW1lbnRDbGFzcyksIDI0OH0sCisgIHsiR3N0RWxlbWVudEZhY3RvcnkiLCBzaXplb2YgKEdzdEVsZW1lbnRGYWN0b3J5KSwgMTQ0fSwKKyAgeyJHc3RFbGVtZW50RmFjdG9yeUNsYXNzIiwgc2l6ZW9mIChHc3RFbGVtZW50RmFjdG9yeUNsYXNzKSwgMTUyfSwKKyAgeyJHc3RFbGVtZW50RGV0YWlscyIsIHNpemVvZiAoR3N0RWxlbWVudERldGFpbHMpLCAzMn0sCisgIHsiR3N0RXZlbnQiLCBzaXplb2YgKEdzdEV2ZW50KSwgNDh9LAorICB7IkdzdEV2ZW50Q2xhc3MiLCBzaXplb2YgKEdzdEV2ZW50Q2xhc3MpLCAzMn0sCisgIHsiR3N0Rm9ybWF0RGVmaW5pdGlvbiIsIHNpemVvZiAoR3N0Rm9ybWF0RGVmaW5pdGlvbiksIDE2fSwKKyAgeyJHc3RJbmRleEVudHJ5Iiwgc2l6ZW9mIChHc3RJbmRleEVudHJ5KSwgMjB9LAorICB7IkdzdEluZGV4R3JvdXAiLCBzaXplb2YgKEdzdEluZGV4R3JvdXApLCAxNn0sCisgIHsiR3N0SW5kZXgiLCBzaXplb2YgKEdzdEluZGV4KSwgMTAwfSwKKyAgeyJHc3RJbmRleENsYXNzIiwgc2l6ZW9mIChHc3RJbmRleENsYXNzKSwgMTU2fSwKKyAgeyJHc3RJbmRleEFzc29jaWF0aW9uIiwgc2l6ZW9mIChHc3RJbmRleEFzc29jaWF0aW9uKSwgMTZ9LAorICB7IkdzdEluZGV4RmFjdG9yeSIsIHNpemVvZiAoR3N0SW5kZXhGYWN0b3J5KSwgOTZ9LAorICB7IkdzdEluZGV4RmFjdG9yeUNsYXNzIiwgc2l6ZW9mIChHc3RJbmRleEZhY3RvcnlDbGFzcyksIDE1Mn0sCisgIHsiR3N0RGVidWdDYXRlZ29yeSIsIHNpemVvZiAoR3N0RGVidWdDYXRlZ29yeSksIDE2fSwKKyAgeyJHc3RJdGVyYXRvciIsIHNpemVvZiAoR3N0SXRlcmF0b3IpLCA1Mn0sCisgIHsiR3N0TWVzc2FnZSIsIHNpemVvZiAoR3N0TWVzc2FnZSksIDY0fSwKKyAgeyJHc3RNZXNzYWdlQ2xhc3MiLCBzaXplb2YgKEdzdE1lc3NhZ2VDbGFzcyksIDMyfSwKKyAgeyJHc3RNaW5pT2JqZWN0Iiwgc2l6ZW9mIChHc3RNaW5pT2JqZWN0KSwgMTZ9LAorICB7IkdzdE1pbmlPYmplY3RDbGFzcyIsIHNpemVvZiAoR3N0TWluaU9iamVjdENsYXNzKSwgMTZ9LAorICB7IkdzdE9iamVjdCIsIHNpemVvZiAoR3N0T2JqZWN0KSwgNDB9LAorICB7IkdzdE9iamVjdENsYXNzIiwgc2l6ZW9mIChHc3RPYmplY3RDbGFzcyksIDEyMH0sCisgIHsiR3N0UGFkIiwgc2l6ZW9mIChHc3RQYWQpLCAxODh9LAorICB7IkdzdFBhZENsYXNzIiwgc2l6ZW9mIChHc3RQYWRDbGFzcyksIDE1Mn0sCisgIHsiR3N0UGFkVGVtcGxhdGUiLCBzaXplb2YgKEdzdFBhZFRlbXBsYXRlKSwgNzJ9LAorICB7IkdzdFBhZFRlbXBsYXRlQ2xhc3MiLCBzaXplb2YgKEdzdFBhZFRlbXBsYXRlQ2xhc3MpLCAxNDB9LAorICB7IkdzdFN0YXRpY1BhZFRlbXBsYXRlIiwgc2l6ZW9mIChHc3RTdGF0aWNQYWRUZW1wbGF0ZSksIDY0fSwKKyAgeyJHc3RQaXBlbGluZSIsIHNpemVvZiAoR3N0UGlwZWxpbmUpLCAyMzJ9LAorICB7IkdzdFBpcGVsaW5lQ2xhc3MiLCBzaXplb2YgKEdzdFBpcGVsaW5lQ2xhc3MpLCAzMDR9LAorICB7IkdzdFBsdWdpbiIsIHNpemVvZiAoR3N0UGx1Z2luKSwgMTUyfSwKKyAgeyJHc3RQbHVnaW5DbGFzcyIsIHNpemVvZiAoR3N0UGx1Z2luQ2xhc3MpLCAxMzZ9LAorICB7IkdzdFBsdWdpbkRlc2MiLCBzaXplb2YgKEdzdFBsdWdpbkRlc2MpLCA1Nn0sCisgIHsiR3N0UGx1Z2luRmVhdHVyZSIsIHNpemVvZiAoR3N0UGx1Z2luRmVhdHVyZSksIDcyfSwKKyAgeyJHc3RQbHVnaW5GZWF0dXJlQ2xhc3MiLCBzaXplb2YgKEdzdFBsdWdpbkZlYXR1cmVDbGFzcyksIDEzNn0sCisgIHsiR3N0UXVlcnlUeXBlRGVmaW5pdGlvbiIsIHNpemVvZiAoR3N0UXVlcnlUeXBlRGVmaW5pdGlvbiksIDE2fSwKKyAgeyJHc3RRdWVyeSIsIHNpemVvZiAoR3N0UXVlcnkpLCAyOH0sCisgIHsiR3N0UXVlcnlDbGFzcyIsIHNpemVvZiAoR3N0UXVlcnlDbGFzcyksIDMyfSwKKyAgeyJHc3RSZWdpc3RyeSIsIHNpemVvZiAoR3N0UmVnaXN0cnkpLCA3Mn0sCisgIHsiR3N0UmVnaXN0cnlDbGFzcyIsIHNpemVvZiAoR3N0UmVnaXN0cnlDbGFzcyksIDE0NH0sCisgIHsiR3N0U2VnbWVudCIsIHNpemVvZiAoR3N0U2VnbWVudCksIDg4fSwKKyAgeyJHc3RTdHJ1Y3R1cmUiLCBzaXplb2YgKEdzdFN0cnVjdHVyZSksIDIwfSwKKyAgeyJHc3RTeXN0ZW1DbG9jayIsIHNpemVvZiAoR3N0U3lzdGVtQ2xvY2spLCAyMDB9LAorICB7IkdzdFN5c3RlbUNsb2NrQ2xhc3MiLCBzaXplb2YgKEdzdFN5c3RlbUNsb2NrQ2xhc3MpLCAxNzZ9LAorICB7IkdzdFRhZ1NldHRlcklGYWNlIiwgc2l6ZW9mIChHc3RUYWdTZXR0ZXJJRmFjZSksIDh9LAorICB7IkdzdFRhc2siLCBzaXplb2YgKEdzdFRhc2spLCA4MH0sCisgIHsiR3N0VGFza0NsYXNzIiwgc2l6ZW9mIChHc3RUYXNrQ2xhc3MpLCAxNDB9LAorICB7IkdzdFRyYWNlIiwgc2l6ZW9mIChHc3RUcmFjZSksIDIwfSwKKyAgeyJHc3RUcmFjZUVudHJ5Iiwgc2l6ZW9mIChHc3RUcmFjZUVudHJ5KSwgMTI4fSwKKyAgeyJHc3RBbGxvY1RyYWNlIiwgc2l6ZW9mIChHc3RBbGxvY1RyYWNlKSwgMTZ9LAorICB7IkdzdFR5cGVGaW5kIiwgc2l6ZW9mIChHc3RUeXBlRmluZCksIDMyfSwKKyAgeyJHc3RUeXBlRmluZEZhY3RvcnkiLCBzaXplb2YgKEdzdFR5cGVGaW5kRmFjdG9yeSksIDEwOH0sCisgIHsiR3N0VHlwZUZpbmRGYWN0b3J5Q2xhc3MiLCBzaXplb2YgKEdzdFR5cGVGaW5kRmFjdG9yeUNsYXNzKSwgMTUyfSwKKyAgeyJHc3RVUklIYW5kbGVySW50ZXJmYWNlIiwgc2l6ZW9mIChHc3RVUklIYW5kbGVySW50ZXJmYWNlKSwgNDR9LAorICB7IkdzdFZhbHVlVGFibGUiLCBzaXplb2YgKEdzdFZhbHVlVGFibGUpLCAzMn0sCisgIHtOVUxMLCAwLCAwfQorfTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfaTM4Ni5oIGIvdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9pMzg2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc4NjhiOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfaTM4Ni5oCkBAIC0wLDAgKzEsNjkgQEAKK3N0YXRpYyBHc3RDaGVja0FCSVN0cnVjdCBsaXN0W10gPSB7CisgeyJHc3RCaW4iLCBzaXplb2YgKEdzdEJpbiksIDE4NH0sCisgeyJHc3RCaW5DbGFzcyIsIHNpemVvZihHc3RCaW5DbGFzcyksIDI4OH0sCisgeyJHc3RCdWZmZXIiLCBzaXplb2YoR3N0QnVmZmVyKSwgODB9LAorIHsiR3N0QnVmZmVyQ2xhc3MiLCBzaXplb2YoR3N0QnVmZmVyQ2xhc3MpLCAxNn0sCisgeyJHc3RCdXMiLCBzaXplb2YoR3N0QnVzKSwgODB9LAorIHsiR3N0QnVzQ2xhc3MiLCBzaXplb2YoR3N0QnVzQ2xhc3MpLCAxNDR9LAorIHsiR3N0Q2FwcyIsIHNpemVvZihHc3RDYXBzKSwgMzJ9LAorIHsiR3N0U3RhdGljQ2FwcyIsIHNpemVvZihHc3RTdGF0aWNDYXBzKSwgNTJ9LAorIHsiR3N0Q2hpbGRQcm94eUludGVyZmFjZSIsIHNpemVvZihHc3RDaGlsZFByb3h5SW50ZXJmYWNlKSwgNDB9LAorIHsiR3N0Q2xvY2siLCBzaXplb2YoR3N0Q2xvY2spLCAxNzJ9LAorIHsiR3N0Q2xvY2tDbGFzcyIsIHNpemVvZihHc3RDbG9ja0NsYXNzKSwgMTYwfSwKKyB7IkdzdEVsZW1lbnQiLCBzaXplb2YoR3N0RWxlbWVudCksIDEyOH0sCisgeyJHc3RFbGVtZW50Q2xhc3MiLCBzaXplb2YoR3N0RWxlbWVudENsYXNzKSwgMjQ4fSwKKyB7IkdzdEVsZW1lbnRGYWN0b3J5Iiwgc2l6ZW9mKEdzdEVsZW1lbnRGYWN0b3J5KSwgMTQ0fSwKKyB7IkdzdEVsZW1lbnRGYWN0b3J5Q2xhc3MiLCBzaXplb2YoR3N0RWxlbWVudEZhY3RvcnlDbGFzcyksIDE1Mn0sCisgeyJHc3RFbGVtZW50RGV0YWlscyIsIHNpemVvZihHc3RFbGVtZW50RGV0YWlscyksIDMyfSwKKyB7IkdzdEV2ZW50Iiwgc2l6ZW9mKEdzdEV2ZW50KSwgNDB9LAorIHsiR3N0RXZlbnRDbGFzcyIsIHNpemVvZihHc3RFdmVudENsYXNzKSwgMzJ9LAorIHsiR3N0Rm9ybWF0RGVmaW5pdGlvbiIsIHNpemVvZihHc3RGb3JtYXREZWZpbml0aW9uKSwgMTZ9LAorIHsiR3N0SW5kZXhFbnRyeSIsIHNpemVvZihHc3RJbmRleEVudHJ5KSwgMjB9LAorIHsiR3N0SW5kZXhHcm91cCIsIHNpemVvZihHc3RJbmRleEdyb3VwKSwgMTZ9LAorIHsiR3N0SW5kZXgiLCBzaXplb2YoR3N0SW5kZXgpLCAxMDB9LAorIHsiR3N0SW5kZXhDbGFzcyIsIHNpemVvZihHc3RJbmRleENsYXNzKSwgMTU2fSwKKyB7IkdzdEluZGV4QXNzb2NpYXRpb24iLCBzaXplb2YoR3N0SW5kZXhBc3NvY2lhdGlvbiksIDEyfSwKKyB7IkdzdEluZGV4RmFjdG9yeSIsIHNpemVvZihHc3RJbmRleEZhY3RvcnkpLCA5Nn0sCisgeyJHc3RJbmRleEZhY3RvcnlDbGFzcyIsIHNpemVvZihHc3RJbmRleEZhY3RvcnlDbGFzcyksIDE1Mn0sCisgeyJHc3REZWJ1Z0NhdGVnb3J5Iiwgc2l6ZW9mKEdzdERlYnVnQ2F0ZWdvcnkpLCAxNn0sCisgeyJHc3RJdGVyYXRvciIsIHNpemVvZihHc3RJdGVyYXRvciksIDUyfSwKKyB7IkdzdE1lc3NhZ2UiLCBzaXplb2YoR3N0TWVzc2FnZSksIDYwfSwKKyB7IkdzdE1lc3NhZ2VDbGFzcyIsIHNpemVvZihHc3RNZXNzYWdlQ2xhc3MpLCAzMn0sCisgeyJHc3RNaW5pT2JqZWN0Iiwgc2l6ZW9mKEdzdE1pbmlPYmplY3QpLCAxNn0sCisgeyJHc3RNaW5pT2JqZWN0Q2xhc3MiLCBzaXplb2YoR3N0TWluaU9iamVjdENsYXNzKSwgMTZ9LAorIHsiR3N0T2JqZWN0Iiwgc2l6ZW9mKEdzdE9iamVjdCksIDQwfSwKKyB7IkdzdE9iamVjdENsYXNzIiwgc2l6ZW9mKEdzdE9iamVjdENsYXNzKSwgMTIwfSwKKyB7IkdzdFBhZCIsIHNpemVvZihHc3RQYWQpLCAxODh9LAorIHsiR3N0UGFkQ2xhc3MiLCBzaXplb2YoR3N0UGFkQ2xhc3MpLCAxNTJ9LAorIHsiR3N0UGFkVGVtcGxhdGUiLCBzaXplb2YoR3N0UGFkVGVtcGxhdGUpLCA3Mn0sCisgeyJHc3RQYWRUZW1wbGF0ZUNsYXNzIiwgc2l6ZW9mKEdzdFBhZFRlbXBsYXRlQ2xhc3MpLCAxNDB9LAorIHsiR3N0U3RhdGljUGFkVGVtcGxhdGUiLCBzaXplb2YoR3N0U3RhdGljUGFkVGVtcGxhdGUpLCA2NH0sCisgeyJHc3RQaXBlbGluZSIsIHNpemVvZihHc3RQaXBlbGluZSksIDIyMH0sCisgeyJHc3RQaXBlbGluZUNsYXNzIiwgc2l6ZW9mKEdzdFBpcGVsaW5lQ2xhc3MpLCAzMDR9LAorIHsiR3N0UGx1Z2luIiwgc2l6ZW9mKEdzdFBsdWdpbiksIDE0OH0sCisgeyJHc3RQbHVnaW5DbGFzcyIsIHNpemVvZihHc3RQbHVnaW5DbGFzcyksIDEzNn0sCisgeyJHc3RQbHVnaW5EZXNjIiwgc2l6ZW9mKEdzdFBsdWdpbkRlc2MpLCA1Nn0sCisgeyJHc3RQbHVnaW5GZWF0dXJlIiwgc2l6ZW9mKEdzdFBsdWdpbkZlYXR1cmUpLCA3Mn0sCisgeyJHc3RQbHVnaW5GZWF0dXJlQ2xhc3MiLCBzaXplb2YoR3N0UGx1Z2luRmVhdHVyZUNsYXNzKSwgMTM2fSwKKyB7IkdzdFF1ZXJ5VHlwZURlZmluaXRpb24iLCBzaXplb2YoR3N0UXVlcnlUeXBlRGVmaW5pdGlvbiksIDE2fSwKKyB7IkdzdFF1ZXJ5Iiwgc2l6ZW9mKEdzdFF1ZXJ5KSwgMjh9LAorIHsiR3N0UXVlcnlDbGFzcyIsIHNpemVvZihHc3RRdWVyeUNsYXNzKSwgMzJ9LAorIHsiR3N0UmVnaXN0cnkiLCBzaXplb2YoR3N0UmVnaXN0cnkpLCA3Mn0sCisgeyJHc3RSZWdpc3RyeUNsYXNzIiwgc2l6ZW9mKEdzdFJlZ2lzdHJ5Q2xhc3MpLCAxNDR9LAorIHsiR3N0U2VnbWVudCIsIHNpemVvZihHc3RTZWdtZW50KSwgODh9LAorIHsiR3N0U3RydWN0dXJlIiwgc2l6ZW9mKEdzdFN0cnVjdHVyZSksIDIwfSwKKyB7IkdzdFN5c3RlbUNsb2NrIiwgc2l6ZW9mKEdzdFN5c3RlbUNsb2NrKSwgMTk2fSwKKyB7IkdzdFN5c3RlbUNsb2NrQ2xhc3MiLCBzaXplb2YoR3N0U3lzdGVtQ2xvY2tDbGFzcyksIDE3Nn0sCisgeyJHc3RUYWdTZXR0ZXJJRmFjZSIsIHNpemVvZihHc3RUYWdTZXR0ZXJJRmFjZSksIDh9LAorIHsiR3N0VGFzayIsIHNpemVvZihHc3RUYXNrKSwgODB9LAorIHsiR3N0VGFza0NsYXNzIiwgc2l6ZW9mKEdzdFRhc2tDbGFzcyksIDE0MH0sCisgeyJHc3RUcmFjZSIsIHNpemVvZihHc3RUcmFjZSksIDIwfSwKKyB7IkdzdFRyYWNlRW50cnkiLCBzaXplb2YoR3N0VHJhY2VFbnRyeSksIDEyOH0sCisgeyJHc3RBbGxvY1RyYWNlIiwgc2l6ZW9mKEdzdEFsbG9jVHJhY2UpLCAxNn0sCisgeyJHc3RUeXBlRmluZCIsIHNpemVvZihHc3RUeXBlRmluZCksIDMyfSwKKyB7IkdzdFR5cGVGaW5kRmFjdG9yeSIsIHNpemVvZihHc3RUeXBlRmluZEZhY3RvcnkpLCAxMDh9LAorIHsiR3N0VHlwZUZpbmRGYWN0b3J5Q2xhc3MiLCBzaXplb2YoR3N0VHlwZUZpbmRGYWN0b3J5Q2xhc3MpLCAxNTJ9LAorIHsiR3N0VVJJSGFuZGxlckludGVyZmFjZSIsIHNpemVvZihHc3RVUklIYW5kbGVySW50ZXJmYWNlKSwgNDR9LAorIHsiR3N0VmFsdWVUYWJsZSIsIHNpemVvZihHc3RWYWx1ZVRhYmxlKSwgMzJ9LAorIHtOVUxMLCAwLCAwfQorfTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfcHBjMzIuaCBiL3Rlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfcHBjMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjMyNWYzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9wcGMzMi5oCkBAIC0wLDAgKzEsNjkgQEAKK3N0YXRpYyBHc3RDaGVja0FCSVN0cnVjdCBsaXN0W10gPSB7CisgIHsiR3N0QmluIiwgc2l6ZW9mIChHc3RCaW4pLCAxOTJ9LAorICB7IkdzdEJpbkNsYXNzIiwgc2l6ZW9mIChHc3RCaW5DbGFzcyksIDI4OH0sCisgIHsiR3N0QnVmZmVyIiwgc2l6ZW9mIChHc3RCdWZmZXIpLCA4OH0sCisgIHsiR3N0QnVmZmVyQ2xhc3MiLCBzaXplb2YgKEdzdEJ1ZmZlckNsYXNzKSwgMTZ9LAorICB7IkdzdEJ1cyIsIHNpemVvZiAoR3N0QnVzKSwgODB9LAorICB7IkdzdEJ1c0NsYXNzIiwgc2l6ZW9mIChHc3RCdXNDbGFzcyksIDE0NH0sCisgIHsiR3N0Q2FwcyIsIHNpemVvZiAoR3N0Q2FwcyksIDMyfSwKKyAgeyJHc3RTdGF0aWNDYXBzIiwgc2l6ZW9mIChHc3RTdGF0aWNDYXBzKSwgNTJ9LAorICB7IkdzdENoaWxkUHJveHlJbnRlcmZhY2UiLCBzaXplb2YgKEdzdENoaWxkUHJveHlJbnRlcmZhY2UpLCA0MH0sCisgIHsiR3N0Q2xvY2siLCBzaXplb2YgKEdzdENsb2NrKSwgMTc2fSwKKyAgeyJHc3RDbG9ja0NsYXNzIiwgc2l6ZW9mIChHc3RDbG9ja0NsYXNzKSwgMTYwfSwKKyAgeyJHc3RFbGVtZW50Iiwgc2l6ZW9mIChHc3RFbGVtZW50KSwgMTM2fSwKKyAgeyJHc3RFbGVtZW50Q2xhc3MiLCBzaXplb2YgKEdzdEVsZW1lbnRDbGFzcyksIDI0OH0sCisgIHsiR3N0RWxlbWVudEZhY3RvcnkiLCBzaXplb2YgKEdzdEVsZW1lbnRGYWN0b3J5KSwgMTQ0fSwKKyAgeyJHc3RFbGVtZW50RmFjdG9yeUNsYXNzIiwgc2l6ZW9mIChHc3RFbGVtZW50RmFjdG9yeUNsYXNzKSwgMTUyfSwKKyAgeyJHc3RFbGVtZW50RGV0YWlscyIsIHNpemVvZiAoR3N0RWxlbWVudERldGFpbHMpLCAzMn0sCisgIHsiR3N0RXZlbnQiLCBzaXplb2YgKEdzdEV2ZW50KSwgNDh9LAorICB7IkdzdEV2ZW50Q2xhc3MiLCBzaXplb2YgKEdzdEV2ZW50Q2xhc3MpLCAzMn0sCisgIHsiR3N0Rm9ybWF0RGVmaW5pdGlvbiIsIHNpemVvZiAoR3N0Rm9ybWF0RGVmaW5pdGlvbiksIDE2fSwKKyAgeyJHc3RJbmRleEVudHJ5Iiwgc2l6ZW9mIChHc3RJbmRleEVudHJ5KSwgMjB9LAorICB7IkdzdEluZGV4R3JvdXAiLCBzaXplb2YgKEdzdEluZGV4R3JvdXApLCAxNn0sCisgIHsiR3N0SW5kZXgiLCBzaXplb2YgKEdzdEluZGV4KSwgMTAwfSwKKyAgeyJHc3RJbmRleENsYXNzIiwgc2l6ZW9mIChHc3RJbmRleENsYXNzKSwgMTU2fSwKKyAgeyJHc3RJbmRleEFzc29jaWF0aW9uIiwgc2l6ZW9mIChHc3RJbmRleEFzc29jaWF0aW9uKSwgMTZ9LAorICB7IkdzdEluZGV4RmFjdG9yeSIsIHNpemVvZiAoR3N0SW5kZXhGYWN0b3J5KSwgOTZ9LAorICB7IkdzdEluZGV4RmFjdG9yeUNsYXNzIiwgc2l6ZW9mIChHc3RJbmRleEZhY3RvcnlDbGFzcyksIDE1Mn0sCisgIHsiR3N0RGVidWdDYXRlZ29yeSIsIHNpemVvZiAoR3N0RGVidWdDYXRlZ29yeSksIDE2fSwKKyAgeyJHc3RJdGVyYXRvciIsIHNpemVvZiAoR3N0SXRlcmF0b3IpLCA1Mn0sCisgIHsiR3N0TWVzc2FnZSIsIHNpemVvZiAoR3N0TWVzc2FnZSksIDY0fSwKKyAgeyJHc3RNZXNzYWdlQ2xhc3MiLCBzaXplb2YgKEdzdE1lc3NhZ2VDbGFzcyksIDMyfSwKKyAgeyJHc3RNaW5pT2JqZWN0Iiwgc2l6ZW9mIChHc3RNaW5pT2JqZWN0KSwgMTZ9LAorICB7IkdzdE1pbmlPYmplY3RDbGFzcyIsIHNpemVvZiAoR3N0TWluaU9iamVjdENsYXNzKSwgMTZ9LAorICB7IkdzdE9iamVjdCIsIHNpemVvZiAoR3N0T2JqZWN0KSwgNDB9LAorICB7IkdzdE9iamVjdENsYXNzIiwgc2l6ZW9mIChHc3RPYmplY3RDbGFzcyksIDEyMH0sCisgIHsiR3N0UGFkIiwgc2l6ZW9mIChHc3RQYWQpLCAxODh9LAorICB7IkdzdFBhZENsYXNzIiwgc2l6ZW9mIChHc3RQYWRDbGFzcyksIDE1Mn0sCisgIHsiR3N0UGFkVGVtcGxhdGUiLCBzaXplb2YgKEdzdFBhZFRlbXBsYXRlKSwgNzJ9LAorICB7IkdzdFBhZFRlbXBsYXRlQ2xhc3MiLCBzaXplb2YgKEdzdFBhZFRlbXBsYXRlQ2xhc3MpLCAxNDB9LAorICB7IkdzdFN0YXRpY1BhZFRlbXBsYXRlIiwgc2l6ZW9mIChHc3RTdGF0aWNQYWRUZW1wbGF0ZSksIDY0fSwKKyAgeyJHc3RQaXBlbGluZSIsIHNpemVvZiAoR3N0UGlwZWxpbmUpLCAyMzJ9LAorICB7IkdzdFBpcGVsaW5lQ2xhc3MiLCBzaXplb2YgKEdzdFBpcGVsaW5lQ2xhc3MpLCAzMDR9LAorICB7IkdzdFBsdWdpbiIsIHNpemVvZiAoR3N0UGx1Z2luKSwgMTUyfSwKKyAgeyJHc3RQbHVnaW5DbGFzcyIsIHNpemVvZiAoR3N0UGx1Z2luQ2xhc3MpLCAxMzZ9LAorICB7IkdzdFBsdWdpbkRlc2MiLCBzaXplb2YgKEdzdFBsdWdpbkRlc2MpLCA1Nn0sCisgIHsiR3N0UGx1Z2luRmVhdHVyZSIsIHNpemVvZiAoR3N0UGx1Z2luRmVhdHVyZSksIDcyfSwKKyAgeyJHc3RQbHVnaW5GZWF0dXJlQ2xhc3MiLCBzaXplb2YgKEdzdFBsdWdpbkZlYXR1cmVDbGFzcyksIDEzNn0sCisgIHsiR3N0UXVlcnlUeXBlRGVmaW5pdGlvbiIsIHNpemVvZiAoR3N0UXVlcnlUeXBlRGVmaW5pdGlvbiksIDE2fSwKKyAgeyJHc3RRdWVyeSIsIHNpemVvZiAoR3N0UXVlcnkpLCAyOH0sCisgIHsiR3N0UXVlcnlDbGFzcyIsIHNpemVvZiAoR3N0UXVlcnlDbGFzcyksIDMyfSwKKyAgeyJHc3RSZWdpc3RyeSIsIHNpemVvZiAoR3N0UmVnaXN0cnkpLCA3Mn0sCisgIHsiR3N0UmVnaXN0cnlDbGFzcyIsIHNpemVvZiAoR3N0UmVnaXN0cnlDbGFzcyksIDE0NH0sCisgIHsiR3N0U2VnbWVudCIsIHNpemVvZiAoR3N0U2VnbWVudCksIDg4fSwKKyAgeyJHc3RTdHJ1Y3R1cmUiLCBzaXplb2YgKEdzdFN0cnVjdHVyZSksIDIwfSwKKyAgeyJHc3RTeXN0ZW1DbG9jayIsIHNpemVvZiAoR3N0U3lzdGVtQ2xvY2spLCAyMDB9LAorICB7IkdzdFN5c3RlbUNsb2NrQ2xhc3MiLCBzaXplb2YgKEdzdFN5c3RlbUNsb2NrQ2xhc3MpLCAxNzZ9LAorICB7IkdzdFRhZ1NldHRlcklGYWNlIiwgc2l6ZW9mIChHc3RUYWdTZXR0ZXJJRmFjZSksIDh9LAorICB7IkdzdFRhc2siLCBzaXplb2YgKEdzdFRhc2spLCA4MH0sCisgIHsiR3N0VGFza0NsYXNzIiwgc2l6ZW9mIChHc3RUYXNrQ2xhc3MpLCAxNDB9LAorICB7IkdzdFRyYWNlIiwgc2l6ZW9mIChHc3RUcmFjZSksIDIwfSwKKyAgeyJHc3RUcmFjZUVudHJ5Iiwgc2l6ZW9mIChHc3RUcmFjZUVudHJ5KSwgMTI4fSwKKyAgeyJHc3RBbGxvY1RyYWNlIiwgc2l6ZW9mIChHc3RBbGxvY1RyYWNlKSwgMTZ9LAorICB7IkdzdFR5cGVGaW5kIiwgc2l6ZW9mIChHc3RUeXBlRmluZCksIDMyfSwKKyAgeyJHc3RUeXBlRmluZEZhY3RvcnkiLCBzaXplb2YgKEdzdFR5cGVGaW5kRmFjdG9yeSksIDEwOH0sCisgIHsiR3N0VHlwZUZpbmRGYWN0b3J5Q2xhc3MiLCBzaXplb2YgKEdzdFR5cGVGaW5kRmFjdG9yeUNsYXNzKSwgMTUyfSwKKyAgeyJHc3RVUklIYW5kbGVySW50ZXJmYWNlIiwgc2l6ZW9mIChHc3RVUklIYW5kbGVySW50ZXJmYWNlKSwgNDR9LAorICB7IkdzdFZhbHVlVGFibGUiLCBzaXplb2YgKEdzdFZhbHVlVGFibGUpLCAzMn0sCisgIHtOVUxMLCAwLCAwfQorfTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfcHBjNjQuaCBiL3Rlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfcHBjNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzNkYmNkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9wcGM2NC5oCkBAIC0wLDAgKzEsNjkgQEAKK3N0YXRpYyBHc3RDaGVja0FCSVN0cnVjdCBsaXN0W10gPSB7CisgIHsiR3N0QmluIiwgc2l6ZW9mIChHc3RCaW4pLCAzMzZ9LAorICB7IkdzdEJpbkNsYXNzIiwgc2l6ZW9mIChHc3RCaW5DbGFzcyksIDU2OH0sCisgIHsiR3N0QnVmZmVyIiwgc2l6ZW9mIChHc3RCdWZmZXIpLCAxMjB9ICwKKyAgeyJHc3RCdWZmZXJDbGFzcyIsIHNpemVvZiAoR3N0QnVmZmVyQ2xhc3MpLCAzMn0gLAorICB7IkdzdEJ1cyIsIHNpemVvZiAoR3N0QnVzKSwgMTUyfSAsCisgIHsiR3N0QnVzQ2xhc3MiLCBzaXplb2YgKEdzdEJ1c0NsYXNzKSwgMjg4fSAsCisgIHsiR3N0Q2FwcyIsIHNpemVvZiAoR3N0Q2FwcyksIDU2fSAsCisgIHsiR3N0U3RhdGljQ2FwcyIsIHNpemVvZiAoR3N0U3RhdGljQ2FwcyksIDk2fSAsCisgIHsiR3N0Q2hpbGRQcm94eUludGVyZmFjZSIsIHNpemVvZiAoR3N0Q2hpbGRQcm94eUludGVyZmFjZSksIDgwfSAsCisgIHsiR3N0Q2xvY2siLCBzaXplb2YgKEdzdENsb2NrKSwgMjQwfSAsCisgIHsiR3N0Q2xvY2tDbGFzcyIsIHNpemVvZiAoR3N0Q2xvY2tDbGFzcyksIDMyMH0gLAorICB7IkdzdEVsZW1lbnQiLCBzaXplb2YgKEdzdEVsZW1lbnQpLCAyMzJ9ICwKKyAgeyJHc3RFbGVtZW50Q2xhc3MiLCBzaXplb2YgKEdzdEVsZW1lbnRDbGFzcyksIDQ4OH0gLAorICB7IkdzdEVsZW1lbnRGYWN0b3J5Iiwgc2l6ZW9mIChHc3RFbGVtZW50RmFjdG9yeSksIDI4MH0gLAorICB7IkdzdEVsZW1lbnRGYWN0b3J5Q2xhc3MiLCBzaXplb2YgKEdzdEVsZW1lbnRGYWN0b3J5Q2xhc3MpLCAzMDR9ICwKKyAgeyJHc3RFbGVtZW50RGV0YWlscyIsIHNpemVvZiAoR3N0RWxlbWVudERldGFpbHMpLCA2NH0gLAorICB7IkdzdEV2ZW50Iiwgc2l6ZW9mIChHc3RFdmVudCksIDY0fSAsCisgIHsiR3N0RXZlbnRDbGFzcyIsIHNpemVvZiAoR3N0RXZlbnRDbGFzcyksIDY0fSAsCisgIHsiR3N0Rm9ybWF0RGVmaW5pdGlvbiIsIHNpemVvZiAoR3N0Rm9ybWF0RGVmaW5pdGlvbiksIDMyfSAsCisgIHsiR3N0SW5kZXhFbnRyeSIsIHNpemVvZiAoR3N0SW5kZXhFbnRyeSksIDMyfSAsCisgIHsiR3N0SW5kZXhHcm91cCIsIHNpemVvZiAoR3N0SW5kZXhHcm91cCksIDI0fSAsCisgIHsiR3N0SW5kZXgiLCBzaXplb2YgKEdzdEluZGV4KSwgMTkyfSAsCisgIHsiR3N0SW5kZXhDbGFzcyIsIHNpemVvZiAoR3N0SW5kZXhDbGFzcyksIDMxMn0gLAorICB7IkdzdEluZGV4QXNzb2NpYXRpb24iLCBzaXplb2YgKEdzdEluZGV4QXNzb2NpYXRpb24pLCAxNn0gLAorICB7IkdzdEluZGV4RmFjdG9yeSIsIHNpemVvZiAoR3N0SW5kZXhGYWN0b3J5KSwgMTkyfSAsCisgIHsiR3N0SW5kZXhGYWN0b3J5Q2xhc3MiLCBzaXplb2YgKEdzdEluZGV4RmFjdG9yeUNsYXNzKSwgMzA0fSAsCisgIHsiR3N0RGVidWdDYXRlZ29yeSIsIHNpemVvZiAoR3N0RGVidWdDYXRlZ29yeSksIDI0fSAsCisgIHsiR3N0SXRlcmF0b3IiLCBzaXplb2YgKEdzdEl0ZXJhdG9yKSwgMTA0fSAsCisgIHsiR3N0TWVzc2FnZSIsIHNpemVvZiAoR3N0TWVzc2FnZSksIDEwNH0gLAorICB7IkdzdE1lc3NhZ2VDbGFzcyIsIHNpemVvZiAoR3N0TWVzc2FnZUNsYXNzKSwgNjR9ICwKKyAgeyJHc3RNaW5pT2JqZWN0Iiwgc2l6ZW9mIChHc3RNaW5pT2JqZWN0KSwgMjR9ICwKKyAgeyJHc3RNaW5pT2JqZWN0Q2xhc3MiLCBzaXplb2YgKEdzdE1pbmlPYmplY3RDbGFzcyksIDMyfSAsCisgIHsiR3N0T2JqZWN0Iiwgc2l6ZW9mIChHc3RPYmplY3QpLCA4MH0gLAorICB7IkdzdE9iamVjdENsYXNzIiwgc2l6ZW9mIChHc3RPYmplY3RDbGFzcyksIDI0MH0gLAorICB7IkdzdFBhZCIsIHNpemVvZiAoR3N0UGFkKSwgMzY4fSAsCisgIHsiR3N0UGFkQ2xhc3MiLCBzaXplb2YgKEdzdFBhZENsYXNzKSwgMzA0fSAsCisgIHsiR3N0UGFkVGVtcGxhdGUiLCBzaXplb2YgKEdzdFBhZFRlbXBsYXRlKSwgMTM2fSAsCisgIHsiR3N0UGFkVGVtcGxhdGVDbGFzcyIsIHNpemVvZiAoR3N0UGFkVGVtcGxhdGVDbGFzcyksIDI4MH0gLAorICB7IkdzdFN0YXRpY1BhZFRlbXBsYXRlIiwgc2l6ZW9mIChHc3RTdGF0aWNQYWRUZW1wbGF0ZSksIDExMn0gLAorICB7IkdzdFBpcGVsaW5lIiwgc2l6ZW9mIChHc3RQaXBlbGluZSksIDM5Mn0gLAorICB7IkdzdFBpcGVsaW5lQ2xhc3MiLCBzaXplb2YgKEdzdFBpcGVsaW5lQ2xhc3MpLCA2MDB9ICwKKyAgeyJHc3RQbHVnaW4iLCBzaXplb2YgKEdzdFBsdWdpbiksIDI4MH0gLAorICB7IkdzdFBsdWdpbkNsYXNzIiwgc2l6ZW9mIChHc3RQbHVnaW5DbGFzcyksIDI3Mn0gLAorICB7IkdzdFBsdWdpbkRlc2MiLCBzaXplb2YgKEdzdFBsdWdpbkRlc2MpLCAxMDR9ICwKKyAgeyJHc3RQbHVnaW5GZWF0dXJlIiwgc2l6ZW9mIChHc3RQbHVnaW5GZWF0dXJlKSwgMTQ0fSAsCisgIHsiR3N0UGx1Z2luRmVhdHVyZUNsYXNzIiwgc2l6ZW9mIChHc3RQbHVnaW5GZWF0dXJlQ2xhc3MpLCAyNzJ9ICwKKyAgeyJHc3RRdWVyeVR5cGVEZWZpbml0aW9uIiwgc2l6ZW9mIChHc3RRdWVyeVR5cGVEZWZpbml0aW9uKSwgMzJ9ICwKKyAgeyJHc3RRdWVyeSIsIHNpemVvZiAoR3N0UXVlcnkpLCA0OH0gLAorICB7IkdzdFF1ZXJ5Q2xhc3MiLCBzaXplb2YgKEdzdFF1ZXJ5Q2xhc3MpLCA2NH0gLAorICB7IkdzdFJlZ2lzdHJ5Iiwgc2l6ZW9mIChHc3RSZWdpc3RyeSksIDE0NH0gLAorICB7IkdzdFJlZ2lzdHJ5Q2xhc3MiLCBzaXplb2YgKEdzdFJlZ2lzdHJ5Q2xhc3MpLCAyODh9ICwKKyAgeyJHc3RTZWdtZW50Iiwgc2l6ZW9mIChHc3RTZWdtZW50KSwgMTA0fSAsCisgIHsiR3N0U3RydWN0dXJlIiwgc2l6ZW9mIChHc3RTdHJ1Y3R1cmUpLCA0MH0gLAorICB7IkdzdFN5c3RlbUNsb2NrIiwgc2l6ZW9mIChHc3RTeXN0ZW1DbG9jayksIDI4OH0gLAorICB7IkdzdFN5c3RlbUNsb2NrQ2xhc3MiLCBzaXplb2YgKEdzdFN5c3RlbUNsb2NrQ2xhc3MpLCAzNTJ9ICwKKyAgeyJHc3RUYWdTZXR0ZXJJRmFjZSIsIHNpemVvZiAoR3N0VGFnU2V0dGVySUZhY2UpLCAxNn0gLAorICB7IkdzdFRhc2siLCBzaXplb2YgKEdzdFRhc2spLCAxNjB9ICwKKyAgeyJHc3RUYXNrQ2xhc3MiLCBzaXplb2YgKEdzdFRhc2tDbGFzcyksIDI4MH0gLAorICB7IkdzdFRyYWNlIiwgc2l6ZW9mIChHc3RUcmFjZSksIDMyfSAsCisgIHsiR3N0VHJhY2VFbnRyeSIsIHNpemVvZiAoR3N0VHJhY2VFbnRyeSksIDEyOH0gLAorICB7IkdzdEFsbG9jVHJhY2UiLCBzaXplb2YgKEdzdEFsbG9jVHJhY2UpLCAyNH0gLAorICB7IkdzdFR5cGVGaW5kIiwgc2l6ZW9mIChHc3RUeXBlRmluZCksIDY0fSAsCisgIHsiR3N0VHlwZUZpbmRGYWN0b3J5Iiwgc2l6ZW9mIChHc3RUeXBlRmluZEZhY3RvcnkpLCAyMTZ9ICwKKyAgeyJHc3RUeXBlRmluZEZhY3RvcnlDbGFzcyIsIHNpemVvZiAoR3N0VHlwZUZpbmRGYWN0b3J5Q2xhc3MpLCAzMDR9ICwKKyAgeyJHc3RVUklIYW5kbGVySW50ZXJmYWNlIiwgc2l6ZW9mIChHc3RVUklIYW5kbGVySW50ZXJmYWNlKSwgODh9ICwKKyAgeyJHc3RWYWx1ZVRhYmxlIiwgc2l6ZW9mIChHc3RWYWx1ZVRhYmxlKSwgNjR9ICwKKyAge05VTEwsIDAsIDB9Cit9OwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9zcGFyYy5oIGIvdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9zcGFyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNzY0YzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3NwYXJjLmgKQEAgLTAsMCArMSw3MCBAQAorCitHc3RDaGVja0FCSVN0cnVjdCBsaXN0W10gPSB7CisgIHsiR3N0QmluIiwgc2l6ZW9mIChHc3RCaW4pLCAxOTJ9LAorICB7IkdzdEJpbkNsYXNzIiwgc2l6ZW9mIChHc3RCaW5DbGFzcyksIDI4OH0sCisgIHsiR3N0QnVmZmVyIiwgc2l6ZW9mIChHc3RCdWZmZXIpLCA4OH0sCisgIHsiR3N0QnVmZmVyQ2xhc3MiLCBzaXplb2YgKEdzdEJ1ZmZlckNsYXNzKSwgMTZ9LAorICB7IkdzdEJ1cyIsIHNpemVvZiAoR3N0QnVzKSwgODB9LAorICB7IkdzdEJ1c0NsYXNzIiwgc2l6ZW9mIChHc3RCdXNDbGFzcyksIDE0NH0sCisgIHsiR3N0Q2FwcyIsIHNpemVvZiAoR3N0Q2FwcyksIDMyfSwKKyAgeyJHc3RTdGF0aWNDYXBzIiwgc2l6ZW9mIChHc3RTdGF0aWNDYXBzKSwgNTJ9LAorICB7IkdzdENoaWxkUHJveHlJbnRlcmZhY2UiLCBzaXplb2YgKEdzdENoaWxkUHJveHlJbnRlcmZhY2UpLCA0MH0sCisgIHsiR3N0Q2xvY2siLCBzaXplb2YgKEdzdENsb2NrKSwgMTc2fSwKKyAgeyJHc3RDbG9ja0NsYXNzIiwgc2l6ZW9mIChHc3RDbG9ja0NsYXNzKSwgMTYwfSwKKyAgeyJHc3RFbGVtZW50Iiwgc2l6ZW9mIChHc3RFbGVtZW50KSwgMTM2fSwKKyAgeyJHc3RFbGVtZW50Q2xhc3MiLCBzaXplb2YgKEdzdEVsZW1lbnRDbGFzcyksIDI0OH0sCisgIHsiR3N0RWxlbWVudEZhY3RvcnkiLCBzaXplb2YgKEdzdEVsZW1lbnRGYWN0b3J5KSwgMTQ0fSwKKyAgeyJHc3RFbGVtZW50RmFjdG9yeUNsYXNzIiwgc2l6ZW9mIChHc3RFbGVtZW50RmFjdG9yeUNsYXNzKSwgMTUyfSwKKyAgeyJHc3RFbGVtZW50RGV0YWlscyIsIHNpemVvZiAoR3N0RWxlbWVudERldGFpbHMpLCAzMn0sCisgIHsiR3N0RXZlbnQiLCBzaXplb2YgKEdzdEV2ZW50KSwgNDh9LAorICB7IkdzdEV2ZW50Q2xhc3MiLCBzaXplb2YgKEdzdEV2ZW50Q2xhc3MpLCAzMn0sCisgIHsiR3N0Rm9ybWF0RGVmaW5pdGlvbiIsIHNpemVvZiAoR3N0Rm9ybWF0RGVmaW5pdGlvbiksIDE2fSwKKyAgeyJHc3RJbmRleEVudHJ5Iiwgc2l6ZW9mIChHc3RJbmRleEVudHJ5KSwgMjB9LAorICB7IkdzdEluZGV4R3JvdXAiLCBzaXplb2YgKEdzdEluZGV4R3JvdXApLCAxNn0sCisgIHsiR3N0SW5kZXgiLCBzaXplb2YgKEdzdEluZGV4KSwgMTAwfSwKKyAgeyJHc3RJbmRleENsYXNzIiwgc2l6ZW9mIChHc3RJbmRleENsYXNzKSwgMTU2fSwKKyAgeyJHc3RJbmRleEFzc29jaWF0aW9uIiwgc2l6ZW9mIChHc3RJbmRleEFzc29jaWF0aW9uKSwgMTZ9LAorICB7IkdzdEluZGV4RmFjdG9yeSIsIHNpemVvZiAoR3N0SW5kZXhGYWN0b3J5KSwgOTZ9LAorICB7IkdzdEluZGV4RmFjdG9yeUNsYXNzIiwgc2l6ZW9mIChHc3RJbmRleEZhY3RvcnlDbGFzcyksIDE1Mn0sCisgIHsiR3N0RGVidWdDYXRlZ29yeSIsIHNpemVvZiAoR3N0RGVidWdDYXRlZ29yeSksIDE2fSwKKyAgeyJHc3RJdGVyYXRvciIsIHNpemVvZiAoR3N0SXRlcmF0b3IpLCA1Mn0sCisgIHsiR3N0TWVzc2FnZSIsIHNpemVvZiAoR3N0TWVzc2FnZSksIDY0fSwKKyAgeyJHc3RNZXNzYWdlQ2xhc3MiLCBzaXplb2YgKEdzdE1lc3NhZ2VDbGFzcyksIDMyfSwKKyAgeyJHc3RNaW5pT2JqZWN0Iiwgc2l6ZW9mIChHc3RNaW5pT2JqZWN0KSwgMTZ9LAorICB7IkdzdE1pbmlPYmplY3RDbGFzcyIsIHNpemVvZiAoR3N0TWluaU9iamVjdENsYXNzKSwgMTZ9LAorICB7IkdzdE9iamVjdCIsIHNpemVvZiAoR3N0T2JqZWN0KSwgNDB9LAorICB7IkdzdE9iamVjdENsYXNzIiwgc2l6ZW9mIChHc3RPYmplY3RDbGFzcyksIDEyMH0sCisgIHsiR3N0UGFkIiwgc2l6ZW9mIChHc3RQYWQpLCAxODh9LAorICB7IkdzdFBhZENsYXNzIiwgc2l6ZW9mIChHc3RQYWRDbGFzcyksIDE1Mn0sCisgIHsiR3N0UGFkVGVtcGxhdGUiLCBzaXplb2YgKEdzdFBhZFRlbXBsYXRlKSwgNzJ9LAorICB7IkdzdFBhZFRlbXBsYXRlQ2xhc3MiLCBzaXplb2YgKEdzdFBhZFRlbXBsYXRlQ2xhc3MpLCAxNDB9LAorICB7IkdzdFN0YXRpY1BhZFRlbXBsYXRlIiwgc2l6ZW9mIChHc3RTdGF0aWNQYWRUZW1wbGF0ZSksIDY0fSwKKyAgeyJHc3RQaXBlbGluZSIsIHNpemVvZiAoR3N0UGlwZWxpbmUpLCAyMzJ9LAorICB7IkdzdFBpcGVsaW5lQ2xhc3MiLCBzaXplb2YgKEdzdFBpcGVsaW5lQ2xhc3MpLCAzMDR9LAorICB7IkdzdFBsdWdpbiIsIHNpemVvZiAoR3N0UGx1Z2luKSwgMTUyfSwKKyAgeyJHc3RQbHVnaW5DbGFzcyIsIHNpemVvZiAoR3N0UGx1Z2luQ2xhc3MpLCAxMzZ9LAorICB7IkdzdFBsdWdpbkRlc2MiLCBzaXplb2YgKEdzdFBsdWdpbkRlc2MpLCA1Nn0sCisgIHsiR3N0UGx1Z2luRmVhdHVyZSIsIHNpemVvZiAoR3N0UGx1Z2luRmVhdHVyZSksIDcyfSwKKyAgeyJHc3RQbHVnaW5GZWF0dXJlQ2xhc3MiLCBzaXplb2YgKEdzdFBsdWdpbkZlYXR1cmVDbGFzcyksIDEzNn0sCisgIHsiR3N0UXVlcnlUeXBlRGVmaW5pdGlvbiIsIHNpemVvZiAoR3N0UXVlcnlUeXBlRGVmaW5pdGlvbiksIDE2fSwKKyAgeyJHc3RRdWVyeSIsIHNpemVvZiAoR3N0UXVlcnkpLCAyOH0sCisgIHsiR3N0UXVlcnlDbGFzcyIsIHNpemVvZiAoR3N0UXVlcnlDbGFzcyksIDMyfSwKKyAgeyJHc3RSZWdpc3RyeSIsIHNpemVvZiAoR3N0UmVnaXN0cnkpLCA3Mn0sCisgIHsiR3N0UmVnaXN0cnlDbGFzcyIsIHNpemVvZiAoR3N0UmVnaXN0cnlDbGFzcyksIDE0NH0sCisgIHsiR3N0U2VnbWVudCIsIHNpemVvZiAoR3N0U2VnbWVudCksIDg4fSwKKyAgeyJHc3RTdHJ1Y3R1cmUiLCBzaXplb2YgKEdzdFN0cnVjdHVyZSksIDIwfSwKKyAgeyJHc3RTeXN0ZW1DbG9jayIsIHNpemVvZiAoR3N0U3lzdGVtQ2xvY2spLCAyMDB9LAorICB7IkdzdFN5c3RlbUNsb2NrQ2xhc3MiLCBzaXplb2YgKEdzdFN5c3RlbUNsb2NrQ2xhc3MpLCAxNzZ9LAorICB7IkdzdFRhZ1NldHRlcklGYWNlIiwgc2l6ZW9mIChHc3RUYWdTZXR0ZXJJRmFjZSksIDh9LAorICB7IkdzdFRhc2siLCBzaXplb2YgKEdzdFRhc2spLCA4MH0sCisgIHsiR3N0VGFza0NsYXNzIiwgc2l6ZW9mIChHc3RUYXNrQ2xhc3MpLCAxNDB9LAorICB7IkdzdFRyYWNlIiwgc2l6ZW9mIChHc3RUcmFjZSksIDIwfSwKKyAgeyJHc3RUcmFjZUVudHJ5Iiwgc2l6ZW9mIChHc3RUcmFjZUVudHJ5KSwgMTI4fSwKKyAgeyJHc3RBbGxvY1RyYWNlIiwgc2l6ZW9mIChHc3RBbGxvY1RyYWNlKSwgMTZ9LAorICB7IkdzdFR5cGVGaW5kIiwgc2l6ZW9mIChHc3RUeXBlRmluZCksIDMyfSwKKyAgeyJHc3RUeXBlRmluZEZhY3RvcnkiLCBzaXplb2YgKEdzdFR5cGVGaW5kRmFjdG9yeSksIDEwOH0sCisgIHsiR3N0VHlwZUZpbmRGYWN0b3J5Q2xhc3MiLCBzaXplb2YgKEdzdFR5cGVGaW5kRmFjdG9yeUNsYXNzKSwgMTUyfSwKKyAgeyJHc3RVUklIYW5kbGVySW50ZXJmYWNlIiwgc2l6ZW9mIChHc3RVUklIYW5kbGVySW50ZXJmYWNlKSwgNDR9LAorICB7IkdzdFZhbHVlVGFibGUiLCBzaXplb2YgKEdzdFZhbHVlVGFibGUpLCAzMn0sCisgIHtOVUxMLCAwLCAwfQorfTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfeDg2XzY0LmggYi90ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3g4Nl82NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxY2RjZjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3g4Nl82NC5oCkBAIC0wLDAgKzEsODMgQEAKK3N0YXRpYyBHc3RDaGVja0FCSVN0cnVjdCBsaXN0W10gPSB7CisgIHsiR3N0QWxsb2NUcmFjZSIsIHNpemVvZiAoR3N0QWxsb2NUcmFjZSksIDI0fSwKKyAgeyJHc3RCaW5DbGFzcyIsIHNpemVvZiAoR3N0QmluQ2xhc3MpLCA1Njh9LAorICB7IkdzdEJpbiIsIHNpemVvZiAoR3N0QmluKSwgMzM2fSwKKyAgeyJHc3RCdWZmZXJDbGFzcyIsIHNpemVvZiAoR3N0QnVmZmVyQ2xhc3MpLCAzMn0sCisgIHsiR3N0QnVmZmVyIiwgc2l6ZW9mIChHc3RCdWZmZXIpLCAxMjB9LAorICB7IkdzdEJ1c0NsYXNzIiwgc2l6ZW9mIChHc3RCdXNDbGFzcyksIDI4OH0sCisgIHsiR3N0QnVzIiwgc2l6ZW9mIChHc3RCdXMpLCAxNTJ9LAorICB7IkdzdENhcHMiLCBzaXplb2YgKEdzdENhcHMpLCA1Nn0sCisgIHsiR3N0Q2hpbGRQcm94eUludGVyZmFjZSIsIHNpemVvZiAoR3N0Q2hpbGRQcm94eUludGVyZmFjZSksIDgwfSwKKyAgeyJHc3RDbG9ja0NsYXNzIiwgc2l6ZW9mIChHc3RDbG9ja0NsYXNzKSwgMzIwfSwKKyAgeyJHc3RDbG9ja0VudHJ5Iiwgc2l6ZW9mIChHc3RDbG9ja0VudHJ5KSwgODB9LAorICB7IkdzdENsb2NrIiwgc2l6ZW9mIChHc3RDbG9jayksIDI0MH0sCisgIHsiR3N0RGVidWdDYXRlZ29yeSIsIHNpemVvZiAoR3N0RGVidWdDYXRlZ29yeSksIDI0fSwKKyAgeyJHc3RFbGVtZW50Q2xhc3MiLCBzaXplb2YgKEdzdEVsZW1lbnRDbGFzcyksIDQ4OH0sCisgIHsiR3N0RWxlbWVudERldGFpbHMiLCBzaXplb2YgKEdzdEVsZW1lbnREZXRhaWxzKSwgNjR9LAorICB7IkdzdEVsZW1lbnRGYWN0b3J5Q2xhc3MiLCBzaXplb2YgKEdzdEVsZW1lbnRGYWN0b3J5Q2xhc3MpLCAzMDR9LAorICB7IkdzdEVsZW1lbnRGYWN0b3J5Iiwgc2l6ZW9mIChHc3RFbGVtZW50RmFjdG9yeSksIDI4MH0sCisgIHsiR3N0RWxlbWVudCIsIHNpemVvZiAoR3N0RWxlbWVudCksIDIzMn0sCisgIHsiR3N0RXZlbnRDbGFzcyIsIHNpemVvZiAoR3N0RXZlbnRDbGFzcyksIDY0fSwKKyAgeyJHc3RFdmVudCIsIHNpemVvZiAoR3N0RXZlbnQpLCA2NH0sCisgIHsiR3N0Rm9ybWF0RGVmaW5pdGlvbiIsIHNpemVvZiAoR3N0Rm9ybWF0RGVmaW5pdGlvbiksIDMyfSwKKyAgeyJHc3RHaG9zdFBhZENsYXNzIiwgc2l6ZW9mIChHc3RHaG9zdFBhZENsYXNzKSwgMzQ0fSwKKyAgeyJHc3RHaG9zdFBhZCIsIHNpemVvZiAoR3N0R2hvc3RQYWQpLCAzODR9LAorICB7IkdzdEluZGV4QXNzb2NpYXRpb24iLCBzaXplb2YgKEdzdEluZGV4QXNzb2NpYXRpb24pLCAxNn0sCisgIHsiR3N0SW5kZXhDbGFzcyIsIHNpemVvZiAoR3N0SW5kZXhDbGFzcyksIDMxMn0sCisgIHsiR3N0SW5kZXhFbnRyeSIsIHNpemVvZiAoR3N0SW5kZXhFbnRyeSksIDMyfSwKKyAgeyJHc3RJbmRleEZhY3RvcnlDbGFzcyIsIHNpemVvZiAoR3N0SW5kZXhGYWN0b3J5Q2xhc3MpLCAzMDR9LAorICB7IkdzdEluZGV4RmFjdG9yeSIsIHNpemVvZiAoR3N0SW5kZXhGYWN0b3J5KSwgMTkyfSwKKyAgeyJHc3RJbmRleEdyb3VwIiwgc2l6ZW9mIChHc3RJbmRleEdyb3VwKSwgMjR9LAorICB7IkdzdEluZGV4Iiwgc2l6ZW9mIChHc3RJbmRleCksIDE5Mn0sCisgIHsiR3N0SXRlcmF0b3IiLCBzaXplb2YgKEdzdEl0ZXJhdG9yKSwgMTA0fSwKKyAgeyJHc3RNZXNzYWdlQ2xhc3MiLCBzaXplb2YgKEdzdE1lc3NhZ2VDbGFzcyksIDY0fSwKKyAgeyJHc3RNZXNzYWdlIiwgc2l6ZW9mIChHc3RNZXNzYWdlKSwgMTA0fSwKKyAgeyJHc3RNaW5pT2JqZWN0Q2xhc3MiLCBzaXplb2YgKEdzdE1pbmlPYmplY3RDbGFzcyksIDMyfSwKKyAgeyJHc3RNaW5pT2JqZWN0Iiwgc2l6ZW9mIChHc3RNaW5pT2JqZWN0KSwgMjR9LAorICB7IkdzdE9iamVjdENsYXNzIiwgc2l6ZW9mIChHc3RPYmplY3RDbGFzcyksIDI0MH0sCisgIHsiR3N0T2JqZWN0Iiwgc2l6ZW9mIChHc3RPYmplY3QpLCA4MH0sCisgIHsiR3N0UGFkQ2xhc3MiLCBzaXplb2YgKEdzdFBhZENsYXNzKSwgMzA0fSwKKyAgeyJHc3RQYWQiLCBzaXplb2YgKEdzdFBhZCksIDM2OH0sCisgIHsiR3N0UGFkVGVtcGxhdGVDbGFzcyIsIHNpemVvZiAoR3N0UGFkVGVtcGxhdGVDbGFzcyksIDI4MH0sCisgIHsiR3N0UGFkVGVtcGxhdGUiLCBzaXplb2YgKEdzdFBhZFRlbXBsYXRlKSwgMTM2fSwKKyAgeyJHc3RQYWRUZW1wbGF0ZSIsIHNpemVvZiAoR3N0UGFkVGVtcGxhdGUpLCAxMzZ9LAorICB7IkdzdFBhcmFtU3BlY0ZyYWN0aW9uIiwgc2l6ZW9mIChHc3RQYXJhbVNwZWNGcmFjdGlvbiksIDk2fSwKKyAgeyJHc3RQYXJhbVNwZWNNaW5pT2JqZWN0Iiwgc2l6ZW9mIChHc3RQYXJhbVNwZWNNaW5pT2JqZWN0KSwgNzJ9LAorICB7IkdzdFBpcGVsaW5lQ2xhc3MiLCBzaXplb2YgKEdzdFBpcGVsaW5lQ2xhc3MpLCA2MDB9LAorICB7IkdzdFBpcGVsaW5lIiwgc2l6ZW9mIChHc3RQaXBlbGluZSksIDM5Mn0sCisgIHsiR3N0UGx1Z2luQ2xhc3MiLCBzaXplb2YgKEdzdFBsdWdpbkNsYXNzKSwgMjcyfSwKKyAgeyJHc3RQbHVnaW5EZXNjIiwgc2l6ZW9mIChHc3RQbHVnaW5EZXNjKSwgMTA0fSwKKyAgeyJHc3RQbHVnaW5GZWF0dXJlQ2xhc3MiLCBzaXplb2YgKEdzdFBsdWdpbkZlYXR1cmVDbGFzcyksIDI3Mn0sCisgIHsiR3N0UGx1Z2luRmVhdHVyZSIsIHNpemVvZiAoR3N0UGx1Z2luRmVhdHVyZSksIDE0NH0sCisgIHsiR3N0UGx1Z2luIiwgc2l6ZW9mIChHc3RQbHVnaW4pLCAyODB9LAorICB7IkdzdFByZXNldEludGVyZmFjZSIsIHNpemVvZiAoR3N0UHJlc2V0SW50ZXJmYWNlKSwgMTEyfSwKKyAgeyJHc3RQcm94eVBhZENsYXNzIiwgc2l6ZW9mIChHc3RQcm94eVBhZENsYXNzKSwgMzEyfSwKKyAgeyJHc3RQcm94eVBhZCIsIHNpemVvZiAoR3N0UHJveHlQYWQpLCAzNzZ9LAorICB7IkdzdFF1ZXJ5Q2xhc3MiLCBzaXplb2YgKEdzdFF1ZXJ5Q2xhc3MpLCA2NH0sCisgIHsiR3N0UXVlcnkiLCBzaXplb2YgKEdzdFF1ZXJ5KSwgNDh9LAorICB7IkdzdFF1ZXJ5VHlwZURlZmluaXRpb24iLCBzaXplb2YgKEdzdFF1ZXJ5VHlwZURlZmluaXRpb24pLCAzMn0sCisgIHsiR3N0UmVnaXN0cnlDbGFzcyIsIHNpemVvZiAoR3N0UmVnaXN0cnlDbGFzcyksIDI4OH0sCisgIHsiR3N0UmVnaXN0cnkiLCBzaXplb2YgKEdzdFJlZ2lzdHJ5KSwgMTQ0fSwKKyAgeyJHc3RTZWdtZW50Iiwgc2l6ZW9mIChHc3RTZWdtZW50KSwgMTA0fSwKKyAgeyJHc3RTdGF0aWNDYXBzIiwgc2l6ZW9mIChHc3RTdGF0aWNDYXBzKSwgOTZ9LAorICB7IkdzdFN0YXRpY1BhZFRlbXBsYXRlIiwgc2l6ZW9mIChHc3RTdGF0aWNQYWRUZW1wbGF0ZSksIDExMn0sCisgIHsiR3N0U3RydWN0dXJlIiwgc2l6ZW9mIChHc3RTdHJ1Y3R1cmUpLCA0MH0sCisgIHsiR3N0U3lzdGVtQ2xvY2tDbGFzcyIsIHNpemVvZiAoR3N0U3lzdGVtQ2xvY2tDbGFzcyksIDM1Mn0sCisgIHsiR3N0U3lzdGVtQ2xvY2siLCBzaXplb2YgKEdzdFN5c3RlbUNsb2NrKSwgMjg4fSwKKyAgeyJHc3RUYWdMaXN0Iiwgc2l6ZW9mIChHc3RUYWdMaXN0KSwgNDB9LAorICB7IkdzdFRhZ1NldHRlcklGYWNlIiwgc2l6ZW9mIChHc3RUYWdTZXR0ZXJJRmFjZSksIDE2fSwKKyAgeyJHc3RUYXNrQ2xhc3MiLCBzaXplb2YgKEdzdFRhc2tDbGFzcyksIDI4MH0sCisgIHsiR3N0VGFzayIsIHNpemVvZiAoR3N0VGFzayksIDE2MH0sCisgIHsiR3N0VGFza1Bvb2xDbGFzcyIsIHNpemVvZiAoR3N0VGFza1Bvb2xDbGFzcyksIDMwNH0sCisgIHsiR3N0VGFza1Bvb2wiLCBzaXplb2YgKEdzdFRhc2tQb29sKSwgMTIwfSwKKyAgeyJHc3RUYXNrVGhyZWFkQ2FsbGJhY2tzIiwgc2l6ZW9mIChHc3RUYXNrVGhyZWFkQ2FsbGJhY2tzKSwgNDh9LAorICB7IkdzdFRyYWNlRW50cnkiLCBzaXplb2YgKEdzdFRyYWNlRW50cnkpLCAxMjh9LAorICB7IkdzdFRyYWNlIiwgc2l6ZW9mIChHc3RUcmFjZSksIDMyfSwKKyAgeyJHc3RUeXBlRmluZEZhY3RvcnlDbGFzcyIsIHNpemVvZiAoR3N0VHlwZUZpbmRGYWN0b3J5Q2xhc3MpLCAzMDR9LAorICB7IkdzdFR5cGVGaW5kRmFjdG9yeSIsIHNpemVvZiAoR3N0VHlwZUZpbmRGYWN0b3J5KSwgMjE2fSwKKyAgeyJHc3RUeXBlRmluZCIsIHNpemVvZiAoR3N0VHlwZUZpbmQpLCA2NH0sCisgIHsiR3N0VHlwZU5hbWVEYXRhIiwgc2l6ZW9mIChHc3RUeXBlTmFtZURhdGEpLCAxNn0sCisgIHsiR3N0VVJJSGFuZGxlckludGVyZmFjZSIsIHNpemVvZiAoR3N0VVJJSGFuZGxlckludGVyZmFjZSksIDg4fSwKKyAgeyJHc3RWYWx1ZVRhYmxlIiwgc2l6ZW9mIChHc3RWYWx1ZVRhYmxlKSwgNjR9LAorICB7TlVMTCwgMCwgMH0KK307CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9saWJzL2FkYXB0ZXIuYyBiL3Rlc3RzL2NoZWNrL2xpYnMvYWRhcHRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NTY0NzMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9saWJzL2FkYXB0ZXIuYwpAQCAtMCwwICsxLDgyMyBAQAorLyogR1N0cmVhbWVyCisgKgorICogdW5pdCB0ZXN0IGZvciBhZGFwdGVyCisgKgorICogQ29weXJpZ2h0IChDKSA8MjAwNT4gV2ltIFRheW1hbnMgPHdpbSBhdCBmbHVlbmRvIGRvdCBjb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgorCisjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgorCisvKiBkb2VzIHNvbWUgaW1wbGVtZW50YXRpb24gZGVwZW5kZW50IGNoZWNraW5nIHRoYXQgc2hvdWxkIAorICogYWxzbyBiZSBvcHRpbWFsIAorICovCisKKy8qCisgKiBTdGFydCBwZWVraW5nIG9uIGFuIGFkYXB0ZXIgd2l0aCAxIGJ1ZmZlciBwdXNoZWQuIAorICovCitHU1RfU1RBUlRfVEVTVCAodGVzdF9wZWVrMSkKK3sKKyAgR3N0QWRhcHRlciAqYWRhcHRlcjsKKyAgR3N0QnVmZmVyICpidWZmZXI7CisgIGd1aW50IGF2YWlsOworICBjb25zdCBndWludDggKmJ1ZmRhdGEsICpkYXRhMSwgKmRhdGEyOworCisgIGFkYXB0ZXIgPSBnc3RfYWRhcHRlcl9uZXcgKCk7CisgIGZhaWxfaWYgKGFkYXB0ZXIgPT0gTlVMTCk7CisKKyAgLyogcHVzaCBzaW5nbGUgYnVmZmVyIGluIGFkYXB0ZXIgKi8KKyAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg1MTIpOworCisgIGJ1ZmRhdGEgPSBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCBOVUxMLCBOVUxMLCBHU1RfTUFQX1JFQUQpOworCisgIGZhaWxfaWYgKGJ1ZmZlciA9PSBOVUxMKTsKKyAgZ3N0X2FkYXB0ZXJfcHVzaCAoYWRhcHRlciwgYnVmZmVyKTsKKworICAvKiBhdmFpbGFibGUgYW5kIGF2YWlsYWJsZV9mYXN0IHNob3VsZCByZXR1cm4gdGhlIHNpemUgb2YgdGhlIAorICAgKiBidWZmZXIgKi8KKyAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOworICBmYWlsX2lmIChhdmFpbCAhPSA1MTIpOworICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZV9mYXN0IChhZGFwdGVyKTsKKyAgZmFpbF9pZiAoYXZhaWwgIT0gNTEyKTsKKworICAvKiBzaG91bGQgZ19jcml0aWNhbCB3aXRoIE5VTEwgYXMgcmVzdWx0ICovCisgIEFTU0VSVF9DUklUSUNBTCAoZGF0YTEgPSBnc3RfYWRhcHRlcl9tYXAgKGFkYXB0ZXIsIDApKTsKKyAgZmFpbF9pZiAoZGF0YTEgIT0gTlVMTCk7CisKKyAgLyogc2hvdWxkIHJldHVybiBOVUxMIGFzIHJlc3VsdCAqLworICBkYXRhMSA9IGdzdF9hZGFwdGVyX21hcCAoYWRhcHRlciwgNTEzKTsKKyAgZmFpbF9pZiAoZGF0YTEgIT0gTlVMTCk7CisKKyAgLyogdGhpcyBzaG91bGQgd29yayAqLworICBkYXRhMSA9IGdzdF9hZGFwdGVyX21hcCAoYWRhcHRlciwgNTEyKTsKKyAgZmFpbF9pZiAoZGF0YTEgPT0gTlVMTCk7CisgIC8qIGl0IHNob3VsZCBwb2ludCB0byB0aGUgYnVmZmVyIGRhdGEgYXMgd2VsbCAqLworICBmYWlsX2lmIChkYXRhMSAhPSBidWZkYXRhKTsKKyAgZ3N0X2FkYXB0ZXJfdW5tYXAgKGFkYXB0ZXIsIDApOworCisgIGRhdGEyID0gZ3N0X2FkYXB0ZXJfbWFwIChhZGFwdGVyLCA1MTIpOworICBmYWlsX2lmIChkYXRhMiA9PSBOVUxMKTsKKyAgLyogc2Vjb25kIHBlZWsgc2hvdWxkIHJldHVybiB0aGUgc2FtZSBwb2ludGVyICovCisgIGZhaWxfaWYgKGRhdGEyICE9IGRhdGExKTsKKyAgZ3N0X2FkYXB0ZXJfdW5tYXAgKGFkYXB0ZXIsIDApOworCisgIC8qIHRoaXMgc2hvdWxkIGZhaWwgc2luY2Ugd2UgZG9uJ3QgaGF2ZSB0aGF0IG1hbnkgYnl0ZXMgKi8KKyAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfYWRhcHRlcl9mbHVzaCAoYWRhcHRlciwgNTEzKSk7CisKKyAgLyogdGhpcyBzaG91bGQgd29yayBmaW5lICovCisgIGdzdF9hZGFwdGVyX2ZsdXNoIChhZGFwdGVyLCAxMCk7CisKKyAgLyogc2VlIGlmIHdlIGhhdmUgMTAgYnl0ZXMgbGVzcyBhdmFpbGFibGUgKi8KKyAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOworICBmYWlsX2lmIChhdmFpbCAhPSA1MDIpOworICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZV9mYXN0IChhZGFwdGVyKTsKKyAgZmFpbF9pZiAoYXZhaWwgIT0gNTAyKTsKKworICAvKiBzaG91bGQgcmV0dXJuIE5VTEwgYXMgcmVzdWx0ICovCisgIGRhdGEyID0gZ3N0X2FkYXB0ZXJfbWFwIChhZGFwdGVyLCA1MDMpOworICBmYWlsX2lmIChkYXRhMiAhPSBOVUxMKTsKKworICAvKiBzaG91bGQgd29yayBmaW5lICovCisgIGRhdGEyID0gZ3N0X2FkYXB0ZXJfbWFwIChhZGFwdGVyLCA1MDIpOworICBmYWlsX2lmIChkYXRhMiA9PSBOVUxMKTsKKyAgLyogcGVlayBzaG91bGQgcmV0dXJuIHRoZSBzYW1lIG9sZCBwb2ludGVyICsgMTAgKi8KKyAgZmFpbF9pZiAoZGF0YTIgIT0gZGF0YTEgKyAxMCk7CisgIGZhaWxfaWYgKGRhdGEyICE9IGJ1ZmRhdGEgKyAxMCk7CisgIGdzdF9hZGFwdGVyX3VubWFwIChhZGFwdGVyLCAwKTsKKworICAvKiBmbHVzaCBzb21lIG1vcmUgKi8KKyAgZ3N0X2FkYXB0ZXJfZmx1c2ggKGFkYXB0ZXIsIDUwMCk7CisKKyAgLyogc2VlIGlmIHdlIGhhdmUgMiBieXRlcyBhdmFpbGFibGUgKi8KKyAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOworICBmYWlsX2lmIChhdmFpbCAhPSAyKTsKKyAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGVfZmFzdCAoYWRhcHRlcik7CisgIGZhaWxfaWYgKGF2YWlsICE9IDIpOworCisgIGRhdGEyID0gZ3N0X2FkYXB0ZXJfbWFwIChhZGFwdGVyLCAyKTsKKyAgZmFpbF9pZiAoZGF0YTIgPT0gTlVMTCk7CisgIGZhaWxfaWYgKGRhdGEyICE9IGRhdGExICsgNTEwKTsKKyAgZmFpbF9pZiAoZGF0YTIgIT0gYnVmZGF0YSArIDUxMCk7CisgIGdzdF9hZGFwdGVyX3VubWFwIChhZGFwdGVyLCAwKTsKKworICAvKiBmbHVzaCBzb21lIG1vcmUgKi8KKyAgZ3N0X2FkYXB0ZXJfZmx1c2ggKGFkYXB0ZXIsIDIpOworCisgIC8qIHNlZSBpZiB3ZSBoYXZlIDAgYnl0ZXMgYXZhaWxhYmxlICovCisgIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKTsKKyAgZmFpbF9pZiAoYXZhaWwgIT0gMCk7CisgIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlX2Zhc3QgKGFkYXB0ZXIpOworICBmYWlsX2lmIChhdmFpbCAhPSAwKTsKKworICAvKiBzaWxseSBjbGVhciBqdXN0IGZvciBmdW4gKi8KKyAgZ3N0X2FkYXB0ZXJfY2xlYXIgKGFkYXB0ZXIpOworCisgIGdfb2JqZWN0X3VucmVmIChhZGFwdGVyKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiBTdGFydCBwZWVraW5nIG9uIGFuIGFkYXB0ZXIgd2l0aCAyIG5vbi1tZXJnZWFibGUgYnVmZmVycyAKKyAqIHB1c2hlZC4gCisgKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X3BlZWsyKQoreworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIFN0YXJ0IHBlZWtpbmcgb24gYW4gYWRhcHRlciB3aXRoIDIgbWVyZ2VhYmxlIGJ1ZmZlcnMgCisgKiBwdXNoZWQuIAorICovCitHU1RfU1RBUlRfVEVTVCAodGVzdF9wZWVrMykKK3sKK30KKworR1NUX0VORF9URVNUOworCisvKiB0YWtlIGRhdGEgZnJvbSBhbiBhZGFwdGVyIHdpdGggMSBidWZmZXIgcHVzaGVkLgorICovCitHU1RfU1RBUlRfVEVTVCAodGVzdF90YWtlMSkKK3sKKyAgR3N0QWRhcHRlciAqYWRhcHRlcjsKKyAgR3N0QnVmZmVyICpidWZmZXIsICpidWZmZXIyOworICBndWludCBhdmFpbDsKKyAgZ3VpbnQ4ICpkYXRhLCAqZGF0YTI7CisgIGdzaXplIHNpemUsIHNpemUyOworCisgIGFkYXB0ZXIgPSBnc3RfYWRhcHRlcl9uZXcgKCk7CisgIGZhaWxfdW5sZXNzIChhZGFwdGVyICE9IE5VTEwpOworCisgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTAwKTsKKyAgZmFpbF91bmxlc3MgKGJ1ZmZlciAhPSBOVUxMKTsKKyAgZGF0YSA9IGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZzaXplLCBOVUxMLCBHU1RfTUFQX1JFQUQpOworICBmYWlsX3VubGVzcyAoZGF0YSAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKHNpemUgPT0gMTAwKTsKKworICAvKiBwdXNoIGluIHRoZSBhZGFwdGVyICovCisgIGdzdF9hZGFwdGVyX3B1c2ggKGFkYXB0ZXIsIGJ1ZmZlcik7CisKKyAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOworICBmYWlsX3VubGVzcyAoYXZhaWwgPT0gMTAwKTsKKworICAvKiB0YWtlIG91dCBidWZmZXIgKi8KKyAgYnVmZmVyMiA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChhZGFwdGVyLCAxMDApOworICBmYWlsX3VubGVzcyAoYnVmZmVyMiAhPSBOVUxMKTsKKworICBkYXRhMiA9IGdzdF9idWZmZXJfbWFwIChidWZmZXIyLCAmc2l6ZTIsIE5VTEwsIEdTVF9NQVBfUkVBRCk7CisgIGZhaWxfdW5sZXNzIChkYXRhMiAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKHNpemUyID09IDEwMCk7CisKKyAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOworICBmYWlsX3VubGVzcyAoYXZhaWwgPT0gMCk7CisKKyAgLyogdGhlIGJ1ZmZlciBzaG91bGQgYmUgdGhlIHNhbWUgKi8KKyAgZmFpbF91bmxlc3MgKGJ1ZmZlciA9PSBidWZmZXIyKTsKKyAgZmFpbF91bmxlc3MgKGRhdGEgPT0gZGF0YTIpOworCisgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgZGF0YSwgc2l6ZSk7CisgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlcjIsIGRhdGEyLCBzaXplMik7CisKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyMik7CisKKyAgZ19vYmplY3RfdW5yZWYgKGFkYXB0ZXIpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIHRha2UgZGF0YSBmcm9tIGFuIGFkYXB0ZXIgd2l0aCAyIG5vbi1tZXJnZWFibGUgYnVmZmVycyAKKyAqIHB1c2hlZC4KKyAqLworR1NUX1NUQVJUX1RFU1QgKHRlc3RfdGFrZTIpCit7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogdGFrZSBkYXRhIGZyb20gYW4gYWRhcHRlciB3aXRoIDIgbWVyZ2VhYmxlIGJ1ZmZlcnMgCisgKiBwdXNoZWQuCisgKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X3Rha2UzKQoreworICBHc3RBZGFwdGVyICphZGFwdGVyOworICBHc3RCdWZmZXIgKmJ1ZmZlciwgKmJ1ZmZlcjI7CisgIGd1aW50IGF2YWlsOworICBndWludDggKmRhdGEsICpkYXRhMjsKKyAgZ3NpemUgc2l6ZSwgc2l6ZTI7CisKKyAgYWRhcHRlciA9IGdzdF9hZGFwdGVyX25ldyAoKTsKKyAgZmFpbF91bmxlc3MgKGFkYXB0ZXIgIT0gTlVMTCk7CisKKyAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMDApOworICBmYWlsX3VubGVzcyAoYnVmZmVyICE9IE5VTEwpOworICBkYXRhID0gZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJnNpemUsIE5VTEwsIEdTVF9NQVBfUkVBRCk7CisgIGZhaWxfdW5sZXNzIChkYXRhICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoc2l6ZSA9PSAxMDApOworCisgIC8qIHNldCB1cCBhbmQgcHVzaCBzdWJidWZmZXJzICovCisgIGJ1ZmZlcjIgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChidWZmZXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIDAsIDI1KTsKKyAgZ3N0X2FkYXB0ZXJfcHVzaCAoYWRhcHRlciwgYnVmZmVyMik7CisgIGJ1ZmZlcjIgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChidWZmZXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIDI1LCAyNSk7CisgIGdzdF9hZGFwdGVyX3B1c2ggKGFkYXB0ZXIsIGJ1ZmZlcjIpOworICBidWZmZXIyID0gZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAoYnVmZmVyLCBHU1RfQlVGRkVSX0NPUFlfQUxMLCA1MCwgMjUpOworICBnc3RfYWRhcHRlcl9wdXNoIChhZGFwdGVyLCBidWZmZXIyKTsKKyAgYnVmZmVyMiA9IGdzdF9idWZmZXJfY29weV9yZWdpb24gKGJ1ZmZlciwgR1NUX0JVRkZFUl9DT1BZX0FMTCwgNzUsIDI1KTsKKyAgZ3N0X2FkYXB0ZXJfcHVzaCAoYWRhcHRlciwgYnVmZmVyMik7CisKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKworICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcik7CisgIGZhaWxfdW5sZXNzIChhdmFpbCA9PSAxMDApOworCisgIC8qIHRha2Ugb3V0IGJ1ZmZlciAqLworICBidWZmZXIyID0gZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIgKGFkYXB0ZXIsIDEwMCk7CisgIGZhaWxfdW5sZXNzIChidWZmZXIyICE9IE5VTEwpOworICBkYXRhMiA9IGdzdF9idWZmZXJfbWFwIChidWZmZXIyLCAmc2l6ZTIsIE5VTEwsIEdTVF9NQVBfUkVBRCk7CisgIGZhaWxfdW5sZXNzIChkYXRhMiAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKHNpemUyID09IDEwMCk7CisKKyAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOworICBmYWlsX3VubGVzcyAoYXZhaWwgPT0gMCk7CisKKyAgLyogdGhlIGRhdGEgc2hvdWxkIGJlIHRoZSBzYW1lICovCisgIGZhaWxfdW5sZXNzIChkYXRhID09IGRhdGEyKTsKKworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIyKTsKKworICBnX29iamVjdF91bnJlZiAoYWRhcHRlcik7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIEdzdEFkYXB0ZXIgKgorY3JlYXRlX2FuZF9maWxsX2FkYXB0ZXIgKHZvaWQpCit7CisgIEdzdEFkYXB0ZXIgKmFkYXB0ZXI7CisgIGdpbnQgaSwgajsKKworICBhZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOworICBmYWlsX3VubGVzcyAoYWRhcHRlciAhPSBOVUxMKTsKKworICBmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkgKz0gNCkgeworICAgIEdzdEJ1ZmZlciAqYnVmOworICAgIGd1aW50OCAqZGF0YSwgKnB0cjsKKworICAgIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoc2l6ZW9mIChndWludDMyKSAqIDQpOworICAgIGZhaWxfdW5sZXNzIChidWYgIT0gTlVMTCk7CisKKyAgICBwdHIgPSBkYXRhID0gZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgTlVMTCwgTlVMTCwgR1NUX01BUF9XUklURSk7CisKKyAgICBmb3IgKGogPSAwOyBqIDwgNDsgaisrKSB7CisgICAgICBHU1RfV1JJVEVfVUlOVDMyX0xFIChwdHIsIGkgKyBqKTsKKyAgICAgIHB0ciArPSBzaXplb2YgKGd1aW50MzIpOworICAgIH0KKyAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsIGRhdGEsIHNpemVvZiAoZ3VpbnQzMikgKiA0KTsKKworICAgIGdzdF9hZGFwdGVyX3B1c2ggKGFkYXB0ZXIsIGJ1Zik7CisgIH0KKworICByZXR1cm4gYWRhcHRlcjsKK30KKworLyogRmlsbCBhIGJ1ZmZlciB3aXRoIGEgc2VxdWVuY2Ugb2YgMzIgYml0IGludHMgYW5kIHJlYWQgdGhlbSBiYWNrIG91dCwKKyAqIGNoZWNraW5nIHRoYXQgdGhleSdyZSBzdGlsbCBpbiB0aGUgcmlnaHQgb3JkZXIgKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X3Rha2Vfb3JkZXIpCit7CisgIEdzdEFkYXB0ZXIgKmFkYXB0ZXI7CisgIGludCBpID0gMDsKKworICBhZGFwdGVyID0gY3JlYXRlX2FuZF9maWxsX2FkYXB0ZXIgKCk7CisgIHdoaWxlIChnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpID49IHNpemVvZiAoZ3VpbnQzMikpIHsKKyAgICBndWludDggKmRhdGEgPSBnc3RfYWRhcHRlcl90YWtlIChhZGFwdGVyLCBzaXplb2YgKGd1aW50MzIpKTsKKyAgICBndWludDMyIHZhbCA9IEdTVF9SRUFEX1VJTlQzMl9MRSAoZGF0YSk7CisKKyAgICBHU1RfREVCVUcgKCJ2YWwgJTh1IiwgdmFsKTsKKyAgICBmYWlsX3VubGVzcyAodmFsID09IGkpOworICAgIGkrKzsKKyAgICBnX2ZyZWUgKGRhdGEpOworICB9CisgIGZhaWxfdW5sZXNzIChnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpID09IDAsCisgICAgICAiRGF0YSB3YXMgbGVmdCBpbiB0aGUgYWRhcHRlciIpOworCisgIGdfb2JqZWN0X3VucmVmIChhZGFwdGVyKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiBGaWxsIGEgYnVmZmVyIHdpdGggYSBzZXF1ZW5jZSBvZiAzMiBiaXQgaW50cyBhbmQgcmVhZCB0aGVtIGJhY2sgb3V0CisgKiB1c2luZyB0YWtlX2J1ZmZlciwgY2hlY2tpbmcgdGhhdCB0aGV5J3JlIHN0aWxsIGluIHRoZSByaWdodCBvcmRlciAqLworR1NUX1NUQVJUX1RFU1QgKHRlc3RfdGFrZV9idWZfb3JkZXIpCit7CisgIEdzdEFkYXB0ZXIgKmFkYXB0ZXI7CisgIGludCBpID0gMDsKKworICBhZGFwdGVyID0gY3JlYXRlX2FuZF9maWxsX2FkYXB0ZXIgKCk7CisgIHdoaWxlIChnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpID49IHNpemVvZiAoZ3VpbnQzMikpIHsKKyAgICBHc3RCdWZmZXIgKmJ1ZiA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChhZGFwdGVyLCBzaXplb2YgKGd1aW50MzIpKTsKKyAgICBncG9pbnRlciBkYXRhOworICAgIGdzaXplIHNpemU7CisKKyAgICBkYXRhID0gZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJnNpemUsIE5VTEwsIEdTVF9NQVBfUkVBRCk7CisgICAgZmFpbF91bmxlc3MgKEdTVF9SRUFEX1VJTlQzMl9MRSAoZGF0YSkgPT0gaSk7CisgICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCBkYXRhLCBzaXplKTsKKworICAgIGkrKzsKKworICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7CisgIH0KKyAgZmFpbF91bmxlc3MgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcikgPT0gMCwKKyAgICAgICJEYXRhIHdhcyBsZWZ0IGluIHRoZSBhZGFwdGVyIik7CisKKyAgZ19vYmplY3RfdW5yZWYgKGFkYXB0ZXIpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3RpbWVzdGFtcCkKK3sKKyAgR3N0QWRhcHRlciAqYWRhcHRlcjsKKyAgR3N0QnVmZmVyICpidWZmZXI7CisgIGd1aW50IGF2YWlsOworICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wOworICBndWludDY0IGRpc3Q7CisgIGd1aW50OCAqZGF0YTsKKyAgY29uc3QgZ3VpbnQ4ICpjZGF0YTsKKworICBhZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOworICBmYWlsX3VubGVzcyAoYWRhcHRlciAhPSBOVUxMKTsKKworICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEwMCk7CisKKyAgLyogcHVzaCBpbiB0aGUgYWRhcHRlciAqLworICBnc3RfYWRhcHRlcl9wdXNoIChhZGFwdGVyLCBidWZmZXIpOworICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcik7CisgIGZhaWxfdW5sZXNzIChhdmFpbCA9PSAxMDApOworCisgIC8qIHRpbWVzdGFtcCBpcyBub3cgdW5kZWZpbmVkICovCisgIHRpbWVzdGFtcCA9IGdzdF9hZGFwdGVyX3ByZXZfdGltZXN0YW1wIChhZGFwdGVyLCAmZGlzdCk7CisgIGZhaWxfdW5sZXNzICh0aW1lc3RhbXAgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisgIGZhaWxfdW5sZXNzIChkaXN0ID09IDApOworCisgIGdzdF9hZGFwdGVyX2ZsdXNoIChhZGFwdGVyLCA1MCk7CisgIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKTsKKyAgZmFpbF91bmxlc3MgKGF2YWlsID09IDUwKTsKKworICAvKiBzdGlsbCB1bmRlZmluZWQsIGRpc3QgY2hhbmdlZCwgdGhvdWdoICovCisgIHRpbWVzdGFtcCA9IGdzdF9hZGFwdGVyX3ByZXZfdGltZXN0YW1wIChhZGFwdGVyLCAmZGlzdCk7CisgIGZhaWxfdW5sZXNzICh0aW1lc3RhbXAgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisgIGZhaWxfdW5sZXNzIChkaXN0ID09IDUwKTsKKworICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEwMCk7CisgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gMSAqIEdTVF9TRUNPTkQ7CisKKyAgLyogcHVzaCBpbiB0aGUgYWRhcHRlciAqLworICBnc3RfYWRhcHRlcl9wdXNoIChhZGFwdGVyLCBidWZmZXIpOworICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcik7CisgIGZhaWxfdW5sZXNzIChhdmFpbCA9PSAxNTApOworCisgIC8qIHRpbWVzdGFtcCBpcyBzdGlsbCB1bmRlZmluZWQgKi8KKyAgdGltZXN0YW1wID0gZ3N0X2FkYXB0ZXJfcHJldl90aW1lc3RhbXAgKGFkYXB0ZXIsICZkaXN0KTsKKyAgZmFpbF91bmxlc3MgKHRpbWVzdGFtcCA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKyAgZmFpbF91bmxlc3MgKGRpc3QgPT0gNTApOworCisgIC8qIGZsdXNoIG91dCBmaXJzdCBidWZmZXIgd2UgYXJlIG5vdyBhdCB0aGUgc2Vjb25kIGJ1ZmZlciB0aW1lc3RhbXAgKi8KKyAgZ3N0X2FkYXB0ZXJfZmx1c2ggKGFkYXB0ZXIsIDUwKTsKKyAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOworICBmYWlsX3VubGVzcyAoYXZhaWwgPT0gMTAwKTsKKworICB0aW1lc3RhbXAgPSBnc3RfYWRhcHRlcl9wcmV2X3RpbWVzdGFtcCAoYWRhcHRlciwgJmRpc3QpOworICBmYWlsX3VubGVzcyAodGltZXN0YW1wID09IDEgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3MgKGRpc3QgPT0gMCk7CisKKyAgLyogbW92ZSBzb21lIG1vcmUsIHN0aWxsIHRoZSBzYW1lIHRpbWVzdGFtcCBidXQgZnVydGhlciBhd2F5ICovCisgIGdzdF9hZGFwdGVyX2ZsdXNoIChhZGFwdGVyLCA1MCk7CisgIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKTsKKyAgZmFpbF91bmxlc3MgKGF2YWlsID09IDUwKTsKKworICB0aW1lc3RhbXAgPSBnc3RfYWRhcHRlcl9wcmV2X3RpbWVzdGFtcCAoYWRhcHRlciwgJmRpc3QpOworICBmYWlsX3VubGVzcyAodGltZXN0YW1wID09IDEgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3MgKGRpc3QgPT0gNTApOworCisgIC8qIHB1c2ggYSBidWZmZXIgd2l0aG91dCB0aW1lc3RhbXAgaW4gdGhlIGFkYXB0ZXIgKi8KKyAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMDApOworICBnc3RfYWRhcHRlcl9wdXNoIChhZGFwdGVyLCBidWZmZXIpOworICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcik7CisgIGZhaWxfdW5sZXNzIChhdmFpbCA9PSAxNTApOworICAvKiBwdXNoIGEgYnVmZmVyIHdpdGggdGltZXN0YW1wIGluIHRoZSBhZGFwdGVyICovCisgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTAwKTsKKyAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSAyICogR1NUX1NFQ09ORDsKKyAgZ3N0X2FkYXB0ZXJfcHVzaCAoYWRhcHRlciwgYnVmZmVyKTsKKyAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOworICBmYWlsX3VubGVzcyAoYXZhaWwgPT0gMjUwKTsKKworICAvKiB0aW1lc3RhbXAgc3RpbGwgYXMgaXQgd2FzIGJlZm9yZSB0aGUgcHVzaCAqLworICB0aW1lc3RhbXAgPSBnc3RfYWRhcHRlcl9wcmV2X3RpbWVzdGFtcCAoYWRhcHRlciwgJmRpc3QpOworICBmYWlsX3VubGVzcyAodGltZXN0YW1wID09IDEgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3MgKGRpc3QgPT0gNTApOworCisgIC8qIGZsdXNoIGF3YXkgYnVmZmVyIHdpdGggdGhlIHRpbWVzdGFtcCAqLworICBnc3RfYWRhcHRlcl9mbHVzaCAoYWRhcHRlciwgNTApOworICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcik7CisgIGZhaWxfdW5sZXNzIChhdmFpbCA9PSAyMDApOworICB0aW1lc3RhbXAgPSBnc3RfYWRhcHRlcl9wcmV2X3RpbWVzdGFtcCAoYWRhcHRlciwgJmRpc3QpOworICBmYWlsX3VubGVzcyAodGltZXN0YW1wID09IDEgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3MgKGRpc3QgPT0gMTAwKTsKKworICAvKiBtb3ZlIGludG8gdGhlIHNlY29uZCBidWZmZXIgKi8KKyAgZ3N0X2FkYXB0ZXJfZmx1c2ggKGFkYXB0ZXIsIDUwKTsKKyAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOworICBmYWlsX3VubGVzcyAoYXZhaWwgPT0gMTUwKTsKKyAgdGltZXN0YW1wID0gZ3N0X2FkYXB0ZXJfcHJldl90aW1lc3RhbXAgKGFkYXB0ZXIsICZkaXN0KTsKKyAgZmFpbF91bmxlc3MgKHRpbWVzdGFtcCA9PSAxICogR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzIChkaXN0ID09IDE1MCk7CisKKyAgLyogbW92ZSB0byB0aGlyZCBidWZmZXIgd2UgbW92ZSB0byB0aGUgbmV3IHRpbWVzdGFtcCAqLworICBnc3RfYWRhcHRlcl9mbHVzaCAoYWRhcHRlciwgNTApOworICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcik7CisgIGZhaWxfdW5sZXNzIChhdmFpbCA9PSAxMDApOworICB0aW1lc3RhbXAgPSBnc3RfYWRhcHRlcl9wcmV2X3RpbWVzdGFtcCAoYWRhcHRlciwgJmRpc3QpOworICBmYWlsX3VubGVzcyAodGltZXN0YW1wID09IDIgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3MgKGRpc3QgPT0gMCk7CisKKyAgLyogbW92ZSBldmVyeXRoaW5nIG91dCAqLworICBnc3RfYWRhcHRlcl9mbHVzaCAoYWRhcHRlciwgMTAwKTsKKyAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOworICBmYWlsX3VubGVzcyAoYXZhaWwgPT0gMCk7CisgIHRpbWVzdGFtcCA9IGdzdF9hZGFwdGVyX3ByZXZfdGltZXN0YW1wIChhZGFwdGVyLCAmZGlzdCk7CisgIGZhaWxfdW5sZXNzICh0aW1lc3RhbXAgPT0gMiAqIEdTVF9TRUNPTkQpOworICBmYWlsX3VubGVzcyAoZGlzdCA9PSAxMDApOworCisgIC8qIGNsZWFyIGV2ZXJ5dGhpbmcgKi8KKyAgZ3N0X2FkYXB0ZXJfY2xlYXIgKGFkYXB0ZXIpOworICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcik7CisgIGZhaWxfdW5sZXNzIChhdmFpbCA9PSAwKTsKKyAgdGltZXN0YW1wID0gZ3N0X2FkYXB0ZXJfcHJldl90aW1lc3RhbXAgKGFkYXB0ZXIsICZkaXN0KTsKKyAgZmFpbF91bmxlc3MgKHRpbWVzdGFtcCA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKyAgZmFpbF91bmxlc3MgKGRpc3QgPT0gMCk7CisKKyAgLyogcHVzaCBhbiBlbXB0eSBidWZmZXIgd2l0aCB0aW1lc3RhbXAgaW4gdGhlIGFkYXB0ZXIgKi8KKyAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gMiAqIEdTVF9TRUNPTkQ7CisgIGdzdF9hZGFwdGVyX3B1c2ggKGFkYXB0ZXIsIGJ1ZmZlcik7CisgIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKTsKKyAgZmFpbF91bmxlc3MgKGF2YWlsID09IDApOworICB0aW1lc3RhbXAgPSBnc3RfYWRhcHRlcl9wcmV2X3RpbWVzdGFtcCAoYWRhcHRlciwgJmRpc3QpOworICBmYWlsX3VubGVzcyAodGltZXN0YW1wID09IDIgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3MgKGRpc3QgPT0gMCk7CisKKyAgLyogcHVzaCBhbm90aGVyIGVtcHR5IGJ1ZmZlciAqLworICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKKyAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSAzICogR1NUX1NFQ09ORDsKKyAgZ3N0X2FkYXB0ZXJfcHVzaCAoYWRhcHRlciwgYnVmZmVyKTsKKyAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOworICBmYWlsX3VubGVzcyAoYXZhaWwgPT0gMCk7CisgIHRpbWVzdGFtcCA9IGdzdF9hZGFwdGVyX3ByZXZfdGltZXN0YW1wIChhZGFwdGVyLCAmZGlzdCk7CisgIGZhaWxfdW5sZXNzICh0aW1lc3RhbXAgPT0gMiAqIEdTVF9TRUNPTkQpOworICBmYWlsX3VubGVzcyAoZGlzdCA9PSAwKTsKKworICAvKiBwdXNoIGEgYnVmZmVyIHdpdGggdGltZXN0YW1wIGluIHRoZSBhZGFwdGVyICovCisgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTAwKTsKKyAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSA0ICogR1NUX1NFQ09ORDsKKyAgZ3N0X2FkYXB0ZXJfcHVzaCAoYWRhcHRlciwgYnVmZmVyKTsKKyAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOworICBmYWlsX3VubGVzcyAoYXZhaWwgPT0gMTAwKTsKKyAgdGltZXN0YW1wID0gZ3N0X2FkYXB0ZXJfcHJldl90aW1lc3RhbXAgKGFkYXB0ZXIsICZkaXN0KTsKKyAgZmFpbF91bmxlc3MgKHRpbWVzdGFtcCA9PSAyICogR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzIChkaXN0ID09IDApOworCisgIGdzdF9hZGFwdGVyX2ZsdXNoIChhZGFwdGVyLCAxKTsKKyAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOworICBmYWlsX3VubGVzcyAoYXZhaWwgPT0gOTkpOworICB0aW1lc3RhbXAgPSBnc3RfYWRhcHRlcl9wcmV2X3RpbWVzdGFtcCAoYWRhcHRlciwgJmRpc3QpOworICBmYWlsX3VubGVzcyAodGltZXN0YW1wID09IDQgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3MgKGRpc3QgPT0gMSk7CisKKyAgLyogcHVzaCBhbiBlbXB0eSBidWZmZXIgd2l0aCB0aW1lc3RhbXAgaW4gdGhlIGFkYXB0ZXIgKi8KKyAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gNSAqIEdTVF9TRUNPTkQ7CisgIGdzdF9hZGFwdGVyX3B1c2ggKGFkYXB0ZXIsIGJ1ZmZlcik7CisgIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKTsKKyAgZmFpbF91bmxlc3MgKGF2YWlsID09IDk5KTsKKyAgdGltZXN0YW1wID0gZ3N0X2FkYXB0ZXJfcHJldl90aW1lc3RhbXAgKGFkYXB0ZXIsICZkaXN0KTsKKyAgZmFpbF91bmxlc3MgKHRpbWVzdGFtcCA9PSA0ICogR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzIChkaXN0ID09IDEpOworCisgIC8qIHB1c2ggYnVmZmVyIHdpdGhvdXQgdGltZXN0YW1wICovCisgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTAwKTsKKyAgZ3N0X2FkYXB0ZXJfcHVzaCAoYWRhcHRlciwgYnVmZmVyKTsKKyAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOworICBmYWlsX3VubGVzcyAoYXZhaWwgPT0gMTk5KTsKKyAgdGltZXN0YW1wID0gZ3N0X2FkYXB0ZXJfcHJldl90aW1lc3RhbXAgKGFkYXB0ZXIsICZkaXN0KTsKKyAgZmFpbF91bmxlc3MgKHRpbWVzdGFtcCA9PSA0ICogR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzIChkaXN0ID09IDEpOworCisgIC8qIHJlbW92ZSBmaXJzdCBidWZmZXIsIHRpbWVzdGFtcCBvZiBlbXB0eSBidWZmZXIgaXMgdmlzaWJsZSAqLworICBidWZmZXIgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAoYWRhcHRlciwgOTkpOworICBmYWlsX3VubGVzcyAoYnVmZmVyICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSA9PSA5OSk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7CisgIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKTsKKyAgZmFpbF91bmxlc3MgKGF2YWlsID09IDEwMCk7CisgIHRpbWVzdGFtcCA9IGdzdF9hZGFwdGVyX3ByZXZfdGltZXN0YW1wIChhZGFwdGVyLCAmZGlzdCk7CisgIGZhaWxfdW5sZXNzICh0aW1lc3RhbXAgPT0gNSAqIEdTVF9TRUNPTkQpOworICBmYWlsX3VubGVzcyAoZGlzdCA9PSAwKTsKKworICAvKiByZW1vdmUgZW1wdHkgYnVmZmVyLCB0aW1lc3RhbXAgc3RpbGwgdmlzaWJsZSAqLworICBjZGF0YSA9IGdzdF9hZGFwdGVyX21hcCAoYWRhcHRlciwgNTApOworICBmYWlsX3VubGVzcyAoY2RhdGEgIT0gTlVMTCk7CisgIGdzdF9hZGFwdGVyX3VubWFwIChhZGFwdGVyLCAwKTsKKworICBkYXRhID0gZ3N0X2FkYXB0ZXJfdGFrZSAoYWRhcHRlciwgNTApOworICBmYWlsX3VubGVzcyAoZGF0YSAhPSBOVUxMKTsKKyAgZ19mcmVlIChkYXRhKTsKKyAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOworICBmYWlsX3VubGVzcyAoYXZhaWwgPT0gNTApOworICB0aW1lc3RhbXAgPSBnc3RfYWRhcHRlcl9wcmV2X3RpbWVzdGFtcCAoYWRhcHRlciwgJmRpc3QpOworICBmYWlsX3VubGVzcyAodGltZXN0YW1wID09IDUgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3MgKGRpc3QgPT0gNTApOworCisgIGdfb2JqZWN0X3VucmVmIChhZGFwdGVyKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9zY2FuKQoreworICBHc3RBZGFwdGVyICphZGFwdGVyOworICBHc3RCdWZmZXIgKmJ1ZmZlcjsKKyAgZ3VpbnQ4ICpkYXRhOworICBndWludCBvZmZzZXQ7CisgIGd1aW50IGk7CisKKyAgYWRhcHRlciA9IGdzdF9hZGFwdGVyX25ldyAoKTsKKyAgZmFpbF91bmxlc3MgKGFkYXB0ZXIgIT0gTlVMTCk7CisKKyAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMDApOworCisgIGRhdGEgPSBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCBOVUxMLCBOVUxMLCBHU1RfTUFQX1dSSVRFKTsKKyAgLyogZmlsbCB3aXRoIHBhdHRlcm4gKi8KKyAgZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKQorICAgIGRhdGFbaV0gPSBpOworICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsIGRhdGEsIDEwMCk7CisKKyAgZ3N0X2FkYXB0ZXJfcHVzaCAoYWRhcHRlciwgYnVmZmVyKTsKKworICAvKiBmaW5kIGZpcnN0IGJ5dGVzICovCisgIG9mZnNldCA9CisgICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4MDAwMTAyMDMsIDAsIDEwMCk7CisgIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMCk7CisgIG9mZnNldCA9CisgICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4MDEwMjAzMDQsIDAsIDEwMCk7CisgIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMSk7CisgIG9mZnNldCA9CisgICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4MDEwMjAzMDQsIDEsIDk5KTsKKyAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAxKTsKKyAgLyogb2Zmc2V0IGlzIHBhc3QgdGhlIHBhdHRlcm4gc3RhcnQgKi8KKyAgb2Zmc2V0ID0KKyAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmZmZmZiwgMHgwMTAyMDMwNCwgMiwgOTgpOworICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IC0xKTsKKyAgLyogbm90IGVub3VnaCBieXRlcyB0byBmaW5kIHRoZSBwYXR0ZXJuICovCisgIG9mZnNldCA9CisgICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4MDIwMzA0MDUsIDIsIDMpOworICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IC0xKTsKKyAgb2Zmc2V0ID0KKyAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmZmZmZiwgMHgwMjAzMDQwNSwgMiwgNCk7CisgIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMik7CisgIC8qIHNpemUgZG9lcyBub3QgaW5jbHVkZSB0aGUgbGFzdCBzY2FubmVkIGJ5dGUgKi8KKyAgb2Zmc2V0ID0KKyAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmZmZmZiwgMHg0MDQxNDI0MywgMCwgMHg0MSk7CisgIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gLTEpOworICBvZmZzZXQgPQorICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmZmZmZmLCAweDQwNDE0MjQzLCAwLCAweDQzKTsKKyAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAtMSk7CisgIG9mZnNldCA9CisgICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4NDA0MTQyNDMsIDAsIDB4NDQpOworICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDB4NDApOworICAvKiBwYXN0IHRoZSBzdGFydCAqLworICBvZmZzZXQgPQorICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmZmZmZmLCAweDQwNDE0MjQzLCA2NSwgMTApOworICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IC0xKTsKKyAgb2Zmc2V0ID0KKyAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmZmZmZiwgMHg0MDQxNDI0MywgNjQsIDUpOworICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDY0KTsKKyAgb2Zmc2V0ID0KKyAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmZmZmZiwgMHg2MDYxNjI2MywgNjUsIDM1KTsKKyAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAweDYwKTsKKyAgb2Zmc2V0ID0KKyAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmZmZmZiwgMHg2MDYxNjI2MywgMHg2MCwgNCk7CisgIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMHg2MCk7CisgIC8qIHBhc3QgdGhlIHN0YXJ0ICovCisgIG9mZnNldCA9CisgICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4NjA2MTYyNjMsIDB4NjEsIDMpOworICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IC0xKTsKKworICBvZmZzZXQgPQorICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmZmZmZmLCAweDYwNjE2MjYzLCA5OSwgMSk7CisgIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gLTEpOworCisgIC8qIGFkZCBhbm90aGVyIGJ1ZmZlciAqLworICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEwMCk7CisKKyAgZGF0YSA9IGdzdF9idWZmZXJfbWFwIChidWZmZXIsIE5VTEwsIE5VTEwsIEdTVF9NQVBfV1JJVEUpOworICAvKiBmaWxsIHdpdGggcGF0dGVybiAqLworICBmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgZGF0YVtpXSA9IGkgKyAxMDA7CisgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgZGF0YSwgMTAwKTsKKworICBnc3RfYWRhcHRlcl9wdXNoIChhZGFwdGVyLCBidWZmZXIpOworCisgIC8qIHBhc3QgdGhlIHN0YXJ0ICovCisgIG9mZnNldCA9CisgICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4NjA2MTYyNjMsIDB4NjEsIDYpOworICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IC0xKTsKKyAgLyogdGhpcyBzaG91bGQgd29yayAqLworICBvZmZzZXQgPQorICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmZmZmZmLCAweDYxNjI2MzY0LCAweDYxLCA0KTsKKyAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAweDYxKTsKKyAgLyogbm90IGVub3VnaCBkYXRhICovCisgIG9mZnNldCA9CisgICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4NjI2MzY0NjUsIDB4NjEsIDQpOworICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IC0xKTsKKyAgb2Zmc2V0ID0KKyAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmZmZmZiwgMHg2MjYzNjQ2NSwgMHg2MSwgNSk7CisgIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMHg2Mik7CisgIG9mZnNldCA9CisgICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4NjI2MzY0NjUsIDAsIDEyMCk7CisgIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMHg2Mik7CisKKyAgLyogYm9yZGVyIGNvbmRpdGlvbnMgKi8KKyAgb2Zmc2V0ID0KKyAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmZmZmZiwgMHg2MjYzNjQ2NSwgMCwgMjAwKTsKKyAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAweDYyKTsKKyAgb2Zmc2V0ID0KKyAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmZmZmZiwgMHg2MzY0NjU2NiwgMCwgMjAwKTsKKyAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAweDYzKTsKKyAgLyogd2UgY29tcGxldGVseSBzZWFyY2hlZCB0aGUgZmlyc3QgbGlzdCAqLworICBvZmZzZXQgPQorICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmZmZmZmLCAweDY0NjU2NjY3LCAwLCAyMDApOworICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDB4NjQpOworICAvKiBza2lwIGZpcnN0IGJ1ZmZlciAqLworICBvZmZzZXQgPQorICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmZmZmZmLCAweDY0NjU2NjY3LCAweDY0LAorICAgICAgMTAwKTsKKyAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAweDY0KTsKKyAgLyogcGFzdCB0aGUgc3RhcnQgKi8KKyAgb2Zmc2V0ID0KKyAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmZmZmZiwgMHg2NDY1NjY2NywgMHg2NSwKKyAgICAgIDEwKTsKKyAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAtMSk7CisgIC8qIG5vdCBlbm91Z2ggZGF0YSB0byBzY2FuICovCisgIG9mZnNldCA9CisgICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4NjQ2NTY2NjcsIDB4NjMsIDQpOworICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IC0xKTsKKyAgb2Zmc2V0ID0KKyAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmZmZmZiwgMHg2NDY1NjY2NywgMHg2MywgNSk7CisgIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMHg2NCk7CisgIG9mZnNldCA9CisgICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4YzRjNWM2YzcsIDAsIDE5OSk7CisgIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gLTEpOworICBvZmZzZXQgPQorICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmZmZmZmLCAweGM0YzVjNmM3LCAweDYyLAorICAgICAgMTAyKTsKKyAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAweGM0KTsKKyAgLyogZGlmZmVyZW50IG1hc2tzICovCisgIG9mZnNldCA9CisgICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4MDBmZmZmZmYsIDB4MDA2NTY2NjcsIDB4NjQsCisgICAgICAxMDApOworICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDB4NjQpOworICBvZmZzZXQgPQorICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweDAwMDAwMGZmLCAweDAwMDAwMDAwLCAwLCAxMDApOworICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IC0xKTsKKyAgb2Zmc2V0ID0KKyAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHgwMDAwMDBmZiwgMHgwMDAwMDAwMywgMCwgMTAwKTsKKyAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAwKTsKKyAgb2Zmc2V0ID0KKyAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHgwMDAwMDBmZiwgMHgwMDAwMDA2MSwgMHg2MSwKKyAgICAgIDEwMCk7CisgIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gLTEpOworICBvZmZzZXQgPQorICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmMDAwMDAwLCAweDYxMDAwMDAwLCAwLCAweDYyKTsKKyAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAtMSk7CisgIC8qIGRvZXMgbm90IGV2ZW4gZXhpc3QgKi8KKyAgQVNTRVJUX0NSSVRJQ0FMIChvZmZzZXQgPQorICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweDAwZmZmZmZmLCAweGZmZmZmZmZmLCAweDY1LAorICAgICAgICAgIDk5KSk7CisgIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gLTEpOworCisgIC8qIGZsdXNoIHNvbWUgYnl0ZXMgKi8KKyAgZ3N0X2FkYXB0ZXJfZmx1c2ggKGFkYXB0ZXIsIDB4MjApOworCisgIG9mZnNldCA9CisgICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4MjAyMTIyMjMsIDAsIDEwMCk7CisgIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMCk7CisgIG9mZnNldCA9CisgICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4MjAyMTIyMjMsIDAsIDQpOworICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDApOworICBvZmZzZXQgPQorICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmZmZmZmLCAweGM0YzVjNmM3LCAweDYyLAorICAgICAgNzApOworICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDB4YTQpOworICBvZmZzZXQgPQorICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmZmZmZmLCAweGM0YzVjNmM3LCAwLCAxNjgpOworICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDB4YTQpOworCisgIG9mZnNldCA9CisgICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4YzRjNWM2YzcsIDE2NCwgNCk7CisgIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMHhhNCk7CisgIG9mZnNldCA9CisgICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4YzRjNWM2YzcsIDB4NDQsCisgICAgICAxMDApOworICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDB4YTQpOworICAvKiBub3QgZW5vdWdoIGJ5dGVzICovCisgIG9mZnNldCA9CisgICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4YzRjNWM2YzcsIDB4NDQsCisgICAgICA5OSk7CisgIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gLTEpOworCisgIGdfb2JqZWN0X3VucmVmIChhZGFwdGVyKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiBGaWxsIGEgYnVmZmVyIHdpdGggYSBzZXF1ZW5jZSBvZiAzMiBiaXQgaW50cyBhbmQgcmVhZCB0aGVtIGJhY2sgb3V0CisgKiB1c2luZyB0YWtlX2J1ZmZlciwgY2hlY2tpbmcgdGhhdCB0aGV5J3JlIHN0aWxsIGluIHRoZSByaWdodCBvcmRlciAqLworR1NUX1NUQVJUX1RFU1QgKHRlc3RfdGFrZV9saXN0KQoreworICBHc3RBZGFwdGVyICphZGFwdGVyOworICBpbnQgaSA9IDA7CisKKyAgYWRhcHRlciA9IGNyZWF0ZV9hbmRfZmlsbF9hZGFwdGVyICgpOworICB3aGlsZSAoZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKSA+PSBzaXplb2YgKGd1aW50MzIpKSB7CisgICAgR0xpc3QgKmxpc3QsICp3YWxrOworICAgIEdzdEJ1ZmZlciAqYnVmOworICAgIGdzaXplIHNpemUsIGxlZnQ7CisgICAgZ3VpbnQ4ICpkYXRhLCAqcHRyOworCisgICAgbGlzdCA9IGdzdF9hZGFwdGVyX3Rha2VfbGlzdCAoYWRhcHRlciwgc2l6ZW9mIChndWludDMyKSAqIDUpOworICAgIGZhaWxfdW5sZXNzIChsaXN0ICE9IE5VTEwpOworCisgICAgZm9yICh3YWxrID0gbGlzdDsgd2Fsazsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgeworICAgICAgYnVmID0gd2Fsay0+ZGF0YTsKKworICAgICAgcHRyID0gZGF0YSA9IGdzdF9idWZmZXJfbWFwIChidWYsICZzaXplLCBOVUxMLCBHU1RfTUFQX1JFQUQpOworCisgICAgICBsZWZ0ID0gc2l6ZTsKKyAgICAgIHdoaWxlIChsZWZ0ID4gMCkgeworICAgICAgICBmYWlsX3VubGVzcyAoR1NUX1JFQURfVUlOVDMyX0xFIChwdHIpID09IGkpOworICAgICAgICBpKys7CisgICAgICAgIHB0ciArPSBzaXplb2YgKGd1aW50MzIpOworICAgICAgICBsZWZ0IC09IHNpemVvZiAoZ3VpbnQzMik7CisgICAgICB9CisgICAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsIGRhdGEsIHNpemUpOworCisgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOworICAgIH0KKyAgICBnX2xpc3RfZnJlZSAobGlzdCk7CisgIH0KKyAgZmFpbF91bmxlc3MgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcikgPT0gMCwKKyAgICAgICJEYXRhIHdhcyBsZWZ0IGluIHRoZSBhZGFwdGVyIik7CisKKyAgZ19vYmplY3RfdW5yZWYgKGFkYXB0ZXIpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBTdWl0ZSAqCitnc3RfYWRhcHRlcl9zdWl0ZSAodm9pZCkKK3sKKyAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJhZGFwdGVyIik7CisgIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKKworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BlZWsxKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BlZWsyKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BlZWszKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3Rha2UxKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3Rha2UyKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3Rha2UzKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3Rha2Vfb3JkZXIpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdGFrZV9idWZfb3JkZXIpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdGltZXN0YW1wKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NjYW4pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdGFrZV9saXN0KTsKKworICByZXR1cm4gczsKK30KKworR1NUX0NIRUNLX01BSU4gKGdzdF9hZGFwdGVyKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2xpYnMvYmFzZXNpbmsuYyBiL3Rlc3RzL2NoZWNrL2xpYnMvYmFzZXNpbmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmEyZmNlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hlY2svbGlicy9iYXNlc2luay5jCkBAIC0wLDAgKzEsMTMzIEBACisvKiBHU3RyZWFtZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZGVjaW5hQGNvbGxhYm9yYS5jby51az4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgorI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2VzaW5rLmg+CisKK0dTVF9TVEFSVF9URVNUIChiYXNlc2lua19sYXN0X2J1ZmZlcl9lbmFibGVkKQoreworICBHc3RFbGVtZW50ICpzcmMsICpzaW5rLCAqcGlwZWxpbmU7CisgIEdzdEJ1cyAqYnVzOworICBHc3RNZXNzYWdlICptc2c7CisgIEdzdEJ1ZmZlciAqbGFzdF9idWZmZXI7CisKKyAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKKyAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzcmMiKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjKSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNpbmspID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBzaW5rKSA9PSBUUlVFKTsKKworICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChwaXBlbGluZSk7CisKKyAgLyogdHJ5IHdpdGggZW5hYmxlLWxhc3QtYnVmZmVyIHNldCB0byBUUlVFICovCisgIGdfb2JqZWN0X3NldCAoc3JjLCAibnVtLWJ1ZmZlcnMiLCAxLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKQorICAgICAgIT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKKyAgbXNnID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0VPUyB8IEdTVF9NRVNTQUdFX0VSUk9SLCAtMSk7CisgIGZhaWxfdW5sZXNzIChtc2cgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpICE9IEdTVF9NRVNTQUdFX0VSUk9SKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfRU9TKTsKKyAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7CisKKyAgLyogbGFzdC1idWZmZXIgc2hvdWxkIGJlICE9IE5VTEwgKi8KKyAgZmFpbF91bmxlc3MgKGdzdF9iYXNlX3NpbmtfaXNfbGFzdF9idWZmZXJfZW5hYmxlZCAoR1NUX0JBU0VfU0lOSyAoc2luaykpCisgICAgICA9PSBUUlVFKTsKKyAgZ19vYmplY3RfZ2V0IChzaW5rLCAibGFzdC1idWZmZXIiLCAmbGFzdF9idWZmZXIsIE5VTEwpOworICBmYWlsX3VubGVzcyAobGFzdF9idWZmZXIgIT0gTlVMTCk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGxhc3RfYnVmZmVyKTsKKworICAvKiBzZXQgZW5hYmxlLWxhc3QtYnVmZmVyIHRvIEZBTFNFIG5vdywgdGhpcyBzaG91bGQgc2V0IGxhc3QtYnVmZmVyIHRvIE5VTEwgKi8KKyAgZ19vYmplY3Rfc2V0IChzaW5rLCAiZW5hYmxlLWxhc3QtYnVmZmVyIiwgRkFMU0UsIE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2Jhc2Vfc2lua19pc19sYXN0X2J1ZmZlcl9lbmFibGVkIChHU1RfQkFTRV9TSU5LIChzaW5rKSkKKyAgICAgID09IEZBTFNFKTsKKyAgZ19vYmplY3RfZ2V0IChzaW5rLCAibGFzdC1idWZmZXIiLCAmbGFzdF9idWZmZXIsIE5VTEwpOworICBmYWlsX3VubGVzcyAobGFzdF9idWZmZXIgPT0gTlVMTCk7CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOworCisgIEdTVF9JTkZPICgic3RvcHBlZCIpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAoYmFzZXNpbmtfbGFzdF9idWZmZXJfZGlzYWJsZWQpCit7CisgIEdzdEVsZW1lbnQgKnNyYywgKnNpbmssICpwaXBlbGluZTsKKyAgR3N0QnVzICpidXM7CisgIEdzdE1lc3NhZ2UgKm1zZzsKKyAgR3N0QnVmZmVyICpsYXN0X2J1ZmZlcjsKKworICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOworICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOworICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYyIpOworCisgIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMpID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc2luaykgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rIChzcmMsIHNpbmspID09IFRSVUUpOworCisgIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGVsaW5lKTsKKworICAvKiBzZXQgZW5hYmxlLWxhc3QtYnVmZmVyIHRvIEZBTFNFICovCisgIGdfb2JqZWN0X3NldCAoc3JjLCAibnVtLWJ1ZmZlcnMiLCAxLCBOVUxMKTsKKyAgZ3N0X2Jhc2Vfc2lua19zZXRfbGFzdF9idWZmZXJfZW5hYmxlZCAoR1NUX0JBU0VfU0lOSyAoc2luayksIEZBTFNFKTsKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOworICBtc2cgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfRU9TIHwgR1NUX01FU1NBR0VfRVJST1IsIC0xKTsKKyAgZmFpbF91bmxlc3MgKG1zZyAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgIT0gR1NUX01FU1NBR0VfRVJST1IpOworICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSA9PSBHU1RfTUVTU0FHRV9FT1MpOworICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKKworICAvKiBsYXN0LWJ1ZmZlciBzaG91bGQgYmUgTlVMTCAqLworICBnX29iamVjdF9nZXQgKHNpbmssICJsYXN0LWJ1ZmZlciIsICZsYXN0X2J1ZmZlciwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChsYXN0X2J1ZmZlciA9PSBOVUxMKTsKKworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7CisKKyAgR1NUX0lORk8gKCJzdG9wcGVkIik7CisKKyAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKKyAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBTdWl0ZSAqCitnc3RfYmFzZXNyY19zdWl0ZSAodm9pZCkKK3sKKyAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RCYXNlU2luayIpOworICBUQ2FzZSAqdGMgPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7CisKKyAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Yyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0YywgYmFzZXNpbmtfbGFzdF9idWZmZXJfZW5hYmxlZCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0YywgYmFzZXNpbmtfbGFzdF9idWZmZXJfZGlzYWJsZWQpOworCisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoZ3N0X2Jhc2VzcmMpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svbGlicy9iYXNlc3JjLmMgYi90ZXN0cy9jaGVjay9saWJzL2Jhc2VzcmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODUzZWU5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hlY2svbGlicy9iYXNlc3JjLmMKQEAgLTAsMCArMSw2MTEgQEAKKy8qIEdTdHJlYW1lcgorICoKKyAqIHNvbWUgdW5pdCB0ZXN0cyBmb3IgR3N0QmFzZVNyYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXNyYy5oPgorCitzdGF0aWMgR3N0UHJvYmVSZXR1cm4KK2Vvc19ldmVudF9jb3VudGVyIChHc3RPYmplY3QgKiBwYWQsIEdzdFByb2JlVHlwZSB0eXBlLCBHc3RFdmVudCAqIGV2ZW50LAorICAgIGd1aW50ICogcF9udW1fZW9zKQoreworICBmYWlsX3VubGVzcyAoZXZlbnQgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChHU1RfSVNfRVZFTlQgKGV2ZW50KSk7CisKKyAgaWYgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX0VPUykKKyAgICAqcF9udW1fZW9zICs9IDE7CisKKyAgcmV0dXJuIEdTVF9QUk9CRV9PSzsKK30KKworLyogYmFzZXNyY19lb3NfZXZlbnRzX3B1c2hfbGl2ZV9vcDoKKyAqICAtIG1ha2Ugc3VyZSBzb3VyY2UgZG9lcyBzZW5kIGFuIEVPUyBldmVudCB3aGVuIG9wZXJhdGluZyBpbiBwdXNoCisgKiAgICBtb2RlIGFuZCBiZWluZyBzZXQgdG8gUkVBRFkgZXhwbGljaXRseSAobGlrZSBvbmUgbWlnaHQgd2l0aAorICogICAgbGl2ZSBzb3VyY2VzKQorICovCitHU1RfU1RBUlRfVEVTVCAoYmFzZXNyY19lb3NfZXZlbnRzX3B1c2hfbGl2ZV9vcCkKK3sKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3RhdGVfcmV0OworICBHc3RFbGVtZW50ICpzcmMsICpzaW5rLCAqcGlwZTsKKyAgR3N0TWVzc2FnZSAqbXNnOworICBHc3RCdXMgKmJ1czsKKyAgR3N0UGFkICpzcmNwYWQ7CisgIGd1aW50IHByb2JlLCBudW1fZW9zID0gMDsKKworICBwaXBlID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7CisgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7CisgIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAic3JjIik7CisKKyAgZ19hc3NlcnQgKHBpcGUgIT0gTlVMTCk7CisgIGdfYXNzZXJ0IChzaW5rICE9IE5VTEwpOworICBnX2Fzc2VydCAoc3JjICE9IE5VTEwpOworCisgIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZSksIHNyYykgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZSksIHNpbmspID09IFRSVUUpOworCisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rIChzcmMsIHNpbmspID09IFRSVUUpOworCisgIGdfb2JqZWN0X3NldCAoc2luaywgImNhbi1hY3RpdmF0ZS1wdXNoIiwgVFJVRSwgTlVMTCk7CisgIGdfb2JqZWN0X3NldCAoc2luaywgImNhbi1hY3RpdmF0ZS1wdWxsIiwgRkFMU0UsIE5VTEwpOworCisgIGdfb2JqZWN0X3NldCAoc3JjLCAiY2FuLWFjdGl2YXRlLXB1c2giLCBUUlVFLCBOVUxMKTsKKyAgZ19vYmplY3Rfc2V0IChzcmMsICJjYW4tYWN0aXZhdGUtcHVsbCIsIEZBTFNFLCBOVUxMKTsKKworICAvKiBzZXQgdXAgZXZlbnQgcHJvYmUgdG8gY291bnQgRU9TIGV2ZW50cyAqLworICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7CisgIGZhaWxfdW5sZXNzIChzcmNwYWQgIT0gTlVMTCk7CisKKyAgcHJvYmUgPSBnc3RfcGFkX2FkZF9wcm9iZSAoc3JjcGFkLCBHU1RfUFJPQkVfVFlQRV9FVkVOVCwKKyAgICAgIChHc3RQYWRQcm9iZUNhbGxiYWNrKSBlb3NfZXZlbnRfY291bnRlciwgJm51bV9lb3MsIE5VTEwpOworCisgIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGUpOworCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX1BMQVlJTkcpOworICBzdGF0ZV9yZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGUsIE5VTEwsIE5VTEwsIC0xKTsKKyAgZmFpbF91bmxlc3MgKHN0YXRlX3JldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOworCisgIC8qIHdhaXQgYSBzZWNvbmQsIHRoZW4gZG8gY29udHJvbGxlZCBzaHV0ZG93biAqLworICBnX3VzbGVlcCAoR1NUX1VTRUNPTkQgKiAxKTsKKworICAvKiBzaHV0IGRvd24gcGlwZWxpbmUgKHNob3VsZCBzZW5kIEVPUyBtZXNzYWdlKSAuLi4gKi8KKyAgZ3N0X2VsZW1lbnRfc2VuZF9ldmVudCAocGlwZSwgZ3N0X2V2ZW50X25ld19lb3MgKCkpOworCisgIC8qIC4uLiBhbmQgd2FpdCBmb3IgdGhlIEVPUyBtZXNzYWdlIGZyb20gdGhlIHNpbmsgKi8KKyAgbXNnID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0VPUyB8IEdTVF9NRVNTQUdFX0VSUk9SLCAtMSk7CisgIGZhaWxfdW5sZXNzIChtc2cgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpICE9IEdTVF9NRVNTQUdFX0VSUk9SKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfRU9TKTsKKworICAvKiBzaG91bGQgYmUgZXhhY3RseSBvbmUgRU9TIGV2ZW50ICovCisgIGZhaWxfdW5sZXNzIChudW1fZW9zID09IDEpOworCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX05VTEwpOworICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGUsIE5VTEwsIE5VTEwsIC0xKTsKKworICAvKiBtYWtlIHN1cmUgc291cmNlIGhhc24ndCBzZW50IGEgc2Vjb25kIG9uZSB3aGVuIGdvaW5nIFBBVVNFRCA9PiBSRUFEWSAqLworICBmYWlsX3VubGVzcyAobnVtX2VvcyA9PSAxKTsKKworICBnc3RfcGFkX3JlbW92ZV9wcm9iZSAoc3JjcGFkLCBwcm9iZSk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7CisgIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOworICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOworICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlKTsKK30KKworR1NUX0VORF9URVNUOworCisKKworLyogYmFzZXNyY19lb3NfZXZlbnRzX3B1c2g6CisgKiAgLSBtYWtlIHN1cmUgc291cmNlIG9ubHkgc2VuZHMgb25lIEVPUyB3aGVuIG9wZXJhdGluZyBpbiBwdXNoLW1vZGUsCisgKiAgICByZWFjaGluZyB0aGUgbWF4IG51bWJlciBvZiBidWZmZXJzLCBhbmQgaXMgdGhlbiBzaHV0IGRvd24uCisgKi8KK0dTVF9TVEFSVF9URVNUIChiYXNlc3JjX2Vvc19ldmVudHNfcHVzaCkKK3sKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3RhdGVfcmV0OworICBHc3RFbGVtZW50ICpzcmMsICpzaW5rLCAqcGlwZTsKKyAgR3N0TWVzc2FnZSAqbXNnOworICBHc3RCdXMgKmJ1czsKKyAgR3N0UGFkICpzcmNwYWQ7CisgIGd1aW50IHByb2JlLCBudW1fZW9zID0gMDsKKworICBwaXBlID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7CisgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7CisgIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAic3JjIik7CisKKyAgZ19hc3NlcnQgKHBpcGUgIT0gTlVMTCk7CisgIGdfYXNzZXJ0IChzaW5rICE9IE5VTEwpOworICBnX2Fzc2VydCAoc3JjICE9IE5VTEwpOworCisgIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZSksIHNyYykgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZSksIHNpbmspID09IFRSVUUpOworCisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rIChzcmMsIHNpbmspID09IFRSVUUpOworCisgIGdfb2JqZWN0X3NldCAoc2luaywgImNhbi1hY3RpdmF0ZS1wdXNoIiwgVFJVRSwgTlVMTCk7CisgIGdfb2JqZWN0X3NldCAoc2luaywgImNhbi1hY3RpdmF0ZS1wdWxsIiwgRkFMU0UsIE5VTEwpOworCisgIGdfb2JqZWN0X3NldCAoc3JjLCAiY2FuLWFjdGl2YXRlLXB1c2giLCBUUlVFLCBOVUxMKTsKKyAgZ19vYmplY3Rfc2V0IChzcmMsICJjYW4tYWN0aXZhdGUtcHVsbCIsIEZBTFNFLCBOVUxMKTsKKyAgZ19vYmplY3Rfc2V0IChzcmMsICJudW0tYnVmZmVycyIsIDgsIE5VTEwpOworCisgIC8qIHNldCB1cCBldmVudCBwcm9iZSB0byBjb3VudCBFT1MgZXZlbnRzICovCisgIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMsICJzcmMiKTsKKyAgZmFpbF91bmxlc3MgKHNyY3BhZCAhPSBOVUxMKTsKKworICBwcm9iZSA9IGdzdF9wYWRfYWRkX3Byb2JlIChzcmNwYWQsIEdTVF9QUk9CRV9UWVBFX0VWRU5ULAorICAgICAgKEdzdFBhZFByb2JlQ2FsbGJhY2spIGVvc19ldmVudF9jb3VudGVyLCAmbnVtX2VvcywgTlVMTCk7CisKKyAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAocGlwZSk7CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfUExBWUlORyk7CisgIHN0YXRlX3JldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZSwgTlVMTCwgTlVMTCwgLTEpOworICBmYWlsX3VubGVzcyAoc3RhdGVfcmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7CisKKyAgbXNnID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0VPUyB8IEdTVF9NRVNTQUdFX0VSUk9SLCAtMSk7CisgIGZhaWxfdW5sZXNzIChtc2cgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpICE9IEdTVF9NRVNTQUdFX0VSUk9SKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfRU9TKTsKKworICAvKiBzaG91bGQgYmUgZXhhY3RseSBvbmUgRU9TIGV2ZW50ICovCisgIGZhaWxfdW5sZXNzIChudW1fZW9zID09IDEpOworCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX05VTEwpOworICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGUsIE5VTEwsIE5VTEwsIC0xKTsKKworICAvKiBtYWtlIHN1cmUgc291cmNlIGhhc24ndCBzZW50IGEgc2Vjb25kIG9uZSB3aGVuIGdvaW5nIFBBVVNFRCA9PiBSRUFEWSAqLworICBmYWlsX3VubGVzcyAobnVtX2VvcyA9PSAxKTsKKworICBnc3RfcGFkX3JlbW92ZV9wcm9iZSAoc3JjcGFkLCBwcm9iZSk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7CisgIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOworICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOworICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiBiYXNlc3JjX2Vvc19ldmVudHNfcHVsbF9saXZlX29wOgorICogIC0gbWFrZSBzdXJlIHNvdXJjZSBkb2Vzbid0IHNlbmQgYW4gRU9TIGV2ZW50IHdoZW4gb3BlcmF0aW5nIGluCisgKiAgICBwdWxsIG1vZGUgYW5kIGJlaW5nIHNldCB0byBSRUFEWSBleHBsaWNpdGx5IChsaWtlIG9uZSBtaWdodCB3aXRoCisgKiAgICBsaXZlIHNvdXJjZXMpCisgKi8KK0dTVF9TVEFSVF9URVNUIChiYXNlc3JjX2Vvc19ldmVudHNfcHVsbF9saXZlX29wKQoreworICBHc3RTdGF0ZUNoYW5nZVJldHVybiBzdGF0ZV9yZXQ7CisgIEdzdEVsZW1lbnQgKnNyYywgKnNpbmssICpwaXBlOworICBHc3RQYWQgKnNyY3BhZDsKKyAgZ3VpbnQgcHJvYmUsIG51bV9lb3MgPSAwOworCisgIHBpcGUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKKyAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzcmMiKTsKKworICBnX2Fzc2VydCAocGlwZSAhPSBOVUxMKTsKKyAgZ19hc3NlcnQgKHNpbmsgIT0gTlVMTCk7CisgIGdfYXNzZXJ0IChzcmMgIT0gTlVMTCk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlKSwgc3JjKSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlKSwgc2luaykgPT0gVFJVRSk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKHNyYywgc2luaykgPT0gVFJVRSk7CisKKyAgZ19vYmplY3Rfc2V0IChzaW5rLCAiY2FuLWFjdGl2YXRlLXB1c2giLCBGQUxTRSwgTlVMTCk7CisgIGdfb2JqZWN0X3NldCAoc2luaywgImNhbi1hY3RpdmF0ZS1wdWxsIiwgVFJVRSwgTlVMTCk7CisKKyAgZ19vYmplY3Rfc2V0IChzcmMsICJjYW4tYWN0aXZhdGUtcHVzaCIsIEZBTFNFLCBOVUxMKTsKKyAgZ19vYmplY3Rfc2V0IChzcmMsICJjYW4tYWN0aXZhdGUtcHVsbCIsIFRSVUUsIE5VTEwpOworCisgIC8qIHNldCB1cCBldmVudCBwcm9iZSB0byBjb3VudCBFT1MgZXZlbnRzICovCisgIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMsICJzcmMiKTsKKyAgZmFpbF91bmxlc3MgKHNyY3BhZCAhPSBOVUxMKTsKKworICBwcm9iZSA9IGdzdF9wYWRfYWRkX3Byb2JlIChzcmNwYWQsIEdTVF9QUk9CRV9UWVBFX0VWRU5ULAorICAgICAgKEdzdFBhZFByb2JlQ2FsbGJhY2spIGVvc19ldmVudF9jb3VudGVyLCAmbnVtX2VvcywgTlVMTCk7CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfUExBWUlORyk7CisgIHN0YXRlX3JldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZSwgTlVMTCwgTlVMTCwgLTEpOworICBmYWlsX3VubGVzcyAoc3RhdGVfcmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7CisKKyAgLyogd2FpdCBhIHNlY29uZCwgdGhlbiBkbyBjb250cm9sbGVkIHNodXRkb3duICovCisgIGdfdXNsZWVwIChHU1RfVVNFQ09ORCAqIDEpOworCisgIC8qIHNodXQgZG93biBzb3VyY2Ugb25seSAuLi4gKi8KKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcmMsIEdTVF9TVEFURV9OVUxMKTsKKyAgc3RhdGVfcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChzcmMsIE5VTEwsIE5VTEwsIC0xKTsKKyAgZmFpbF91bmxlc3MgKHN0YXRlX3JldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOworCisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlIChzcmMsIFRSVUUpID09IFRSVUUpOworCisgIC8qIHNvdXJjZSBzaG91bGRuJ3QgaGF2ZSBzZW50IGFueSBFT1MgZXZlbnQgaW4gcHVsbCBtb2RlICovCisgIGZhaWxfdW5sZXNzIChudW1fZW9zID09IDApOworCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX05VTEwpOworICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGUsIE5VTEwsIE5VTEwsIC0xKTsKKworICAvKiBtYWtlIHN1cmUgc291cmNlIGhhc24ndCBzZW50IGFuIEVPUyB3aGVuIGdvaW5nIFBBVVNFRCA9PiBSRUFEWSBlaXRoZXIgKi8KKyAgZmFpbF91bmxlc3MgKG51bV9lb3MgPT0gMCk7CisKKyAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKHNyY3BhZCwgcHJvYmUpOworICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiBiYXNlc3JjX2Vvc19ldmVudHNfcHVsbDoKKyAqICAtIG1ha2VzIHN1cmUgc291cmNlIGRvZXNuJ3Qgc2VuZCBFT1MgZXZlbnQgd2hlbiByZWFjaGluZyB0aGUgbWF4LgorICogICAgbnVtYmVyIG9mIGJ1ZmZlcnMgY29uZmlndXJlZCBpbiBwdWxsLW1vZGUKKyAqICAtIG1ha2Ugc3VyZSBzb3VyY2UgZG9lc24ndCBzZW5kIEVPUyBldmVudCBlaXRoZXIgd2hlbiBiZWluZyBzaHV0IGRvd24KKyAqICAgIChQQVVTRUQgPT4gUkVBRFkgc3RhdGUgY2hhbmdlKSBhZnRlciBFT1NpbmcgaW4gcHVsbCBtb2RlIAorICovCitHU1RfU1RBUlRfVEVTVCAoYmFzZXNyY19lb3NfZXZlbnRzX3B1bGwpCit7CisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHN0YXRlX3JldDsKKyAgR3N0RWxlbWVudCAqc3JjLCAqc2luaywgKnBpcGU7CisgIEdzdE1lc3NhZ2UgKm1zZzsKKyAgR3N0QnVzICpidXM7CisgIEdzdFBhZCAqc3JjcGFkOworICBndWludCBwcm9iZSwgbnVtX2VvcyA9IDA7CisKKyAgcGlwZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOworICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOworICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYyIpOworCisgIGdfYXNzZXJ0IChwaXBlICE9IE5VTEwpOworICBnX2Fzc2VydCAoc2luayAhPSBOVUxMKTsKKyAgZ19hc3NlcnQgKHNyYyAhPSBOVUxMKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGUpLCBzcmMpID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGUpLCBzaW5rKSA9PSBUUlVFKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBzaW5rKSA9PSBUUlVFKTsKKworICBnX29iamVjdF9zZXQgKHNpbmssICJjYW4tYWN0aXZhdGUtcHVzaCIsIEZBTFNFLCBOVUxMKTsKKyAgZ19vYmplY3Rfc2V0IChzaW5rLCAiY2FuLWFjdGl2YXRlLXB1bGwiLCBUUlVFLCBOVUxMKTsKKworICBnX29iamVjdF9zZXQgKHNyYywgImNhbi1hY3RpdmF0ZS1wdXNoIiwgRkFMU0UsIE5VTEwpOworICBnX29iamVjdF9zZXQgKHNyYywgImNhbi1hY3RpdmF0ZS1wdWxsIiwgVFJVRSwgTlVMTCk7CisgIGdfb2JqZWN0X3NldCAoc3JjLCAibnVtLWJ1ZmZlcnMiLCA4LCBOVUxMKTsKKworICAvKiBzZXQgdXAgZXZlbnQgcHJvYmUgdG8gY291bnQgRU9TIGV2ZW50cyAqLworICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7CisgIGZhaWxfdW5sZXNzIChzcmNwYWQgIT0gTlVMTCk7CisKKyAgcHJvYmUgPSBnc3RfcGFkX2FkZF9wcm9iZSAoc3JjcGFkLCBHU1RfUFJPQkVfVFlQRV9FVkVOVCwKKyAgICAgIChHc3RQYWRQcm9iZUNhbGxiYWNrKSBlb3NfZXZlbnRfY291bnRlciwgJm51bV9lb3MsIE5VTEwpOworCisgIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGUpOworCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX1BMQVlJTkcpOworICBzdGF0ZV9yZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGUsIE5VTEwsIE5VTEwsIC0xKTsKKyAgZmFpbF91bmxlc3MgKHN0YXRlX3JldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOworCisgIG1zZyA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9FT1MgfCBHU1RfTUVTU0FHRV9FUlJPUiwgLTEpOworICBmYWlsX3VubGVzcyAobXNnICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSAhPSBHU1RfTUVTU0FHRV9FUlJPUik7CisgIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpID09IEdTVF9NRVNTQUdFX0VPUyk7CisKKyAgLyogc291cmNlIHNob3VsZG4ndCBoYXZlIHNlbnQgYW55IEVPUyBldmVudCBpbiBwdWxsIG1vZGUgKi8KKyAgZmFpbF91bmxlc3MgKG51bV9lb3MgPT0gMCk7CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfTlVMTCk7CisgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZSwgTlVMTCwgTlVMTCwgLTEpOworCisgIC8qIG1ha2Ugc3VyZSBzb3VyY2UgaGFzbid0IHNlbnQgYW4gRU9TIHdoZW4gZ29pbmcgUEFVU0VEID0+IFJFQURZIGVpdGhlciAqLworICBmYWlsX3VubGVzcyAobnVtX2VvcyA9PSAwKTsKKworICBnc3RfcGFkX3JlbW92ZV9wcm9iZSAoc3JjcGFkLCBwcm9iZSk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7CisgIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOworICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOworICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlKTsKK30KKworR1NUX0VORF9URVNUOworCisKKy8qIGJhc2VzcmNfZW9zX2V2ZW50c19wdXNoX2xpdmVfZW9zOgorICogIC0gbWFrZSBzdXJlIHRoZSBzb3VyY2Ugc3RvcHMgYW5kIGVtaXRzIEVPUyB3aGVuIHdlIHNlbmQgYW4gRU9TIGV2ZW50IHRvIHRoZQorICogICAgcGlwZWxpbmUuCisgKi8KK0dTVF9TVEFSVF9URVNUIChiYXNlc3JjX2Vvc19ldmVudHNfcHVzaF9saXZlX2VvcykKK3sKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3RhdGVfcmV0OworICBHc3RFbGVtZW50ICpzcmMsICpzaW5rLCAqcGlwZTsKKyAgR3N0TWVzc2FnZSAqbXNnOworICBHc3RCdXMgKmJ1czsKKyAgR3N0UGFkICpzcmNwYWQ7CisgIGd1aW50IHByb2JlLCBudW1fZW9zID0gMDsKKyAgZ2Jvb2xlYW4gcmVzOworCisgIHBpcGUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKKyAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzcmMiKTsKKworICBnX2Fzc2VydCAocGlwZSAhPSBOVUxMKTsKKyAgZ19hc3NlcnQgKHNpbmsgIT0gTlVMTCk7CisgIGdfYXNzZXJ0IChzcmMgIT0gTlVMTCk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlKSwgc3JjKSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlKSwgc2luaykgPT0gVFJVRSk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKHNyYywgc2luaykgPT0gVFJVRSk7CisKKyAgZ19vYmplY3Rfc2V0IChzaW5rLCAiY2FuLWFjdGl2YXRlLXB1c2giLCBUUlVFLCBOVUxMKTsKKyAgZ19vYmplY3Rfc2V0IChzaW5rLCAiY2FuLWFjdGl2YXRlLXB1bGwiLCBGQUxTRSwgTlVMTCk7CisKKyAgZ19vYmplY3Rfc2V0IChzcmMsICJjYW4tYWN0aXZhdGUtcHVzaCIsIFRSVUUsIE5VTEwpOworICBnX29iamVjdF9zZXQgKHNyYywgImNhbi1hY3RpdmF0ZS1wdWxsIiwgRkFMU0UsIE5VTEwpOworCisgIC8qIHNldCB1cCBldmVudCBwcm9iZSB0byBjb3VudCBFT1MgZXZlbnRzICovCisgIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMsICJzcmMiKTsKKyAgZmFpbF91bmxlc3MgKHNyY3BhZCAhPSBOVUxMKTsKKworICBwcm9iZSA9IGdzdF9wYWRfYWRkX3Byb2JlIChzcmNwYWQsIEdTVF9QUk9CRV9UWVBFX0VWRU5ULAorICAgICAgKEdzdFBhZFByb2JlQ2FsbGJhY2spIGVvc19ldmVudF9jb3VudGVyLCAmbnVtX2VvcywgTlVMTCk7CisKKyAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAocGlwZSk7CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfUExBWUlORyk7CisgIHN0YXRlX3JldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZSwgTlVMTCwgTlVMTCwgLTEpOworICBmYWlsX3VubGVzcyAoc3RhdGVfcmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7CisKKyAgLyogd2FpdCBhIHNlY29uZCwgdGhlbiBlbWl0IHRoZSBFT1MgKi8KKyAgZ191c2xlZXAgKEdTVF9VU0VDT05EICogMSk7CisKKyAgLyogc2h1dCBkb3duIHNvdXJjZSBvbmx5IChzaG91bGQgc2VuZCBFT1MgZXZlbnQpIC4uLiAqLworICByZXMgPSBnc3RfZWxlbWVudF9zZW5kX2V2ZW50IChwaXBlLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSk7CisKKyAgLyogLi4uIGFuZCB3YWl0IGZvciB0aGUgRU9TIG1lc3NhZ2UgZnJvbSB0aGUgc2luayAqLworICBtc2cgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfRU9TIHwgR1NUX01FU1NBR0VfRVJST1IsIC0xKTsKKyAgZmFpbF91bmxlc3MgKG1zZyAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgIT0gR1NUX01FU1NBR0VfRVJST1IpOworICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSA9PSBHU1RfTUVTU0FHRV9FT1MpOworCisgIC8qIHNob3VsZCBiZSBleGFjdGx5IG9uZSBFT1MgZXZlbnQgKi8KKyAgZmFpbF91bmxlc3MgKG51bV9lb3MgPT0gMSk7CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfTlVMTCk7CisgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZSwgTlVMTCwgTlVMTCwgLTEpOworCisgIC8qIG1ha2Ugc3VyZSBzb3VyY2UgaGFzbid0IHNlbnQgYSBzZWNvbmQgb25lIHdoZW4gZ29pbmcgUEFVU0VEID0+IFJFQURZICovCisgIGZhaWxfdW5sZXNzIChudW1fZW9zID09IDEpOworCisgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChzcmNwYWQsIHByb2JlKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKKyAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIGJhc2VzcmNfZW9zX2V2ZW50c19wdWxsX2xpdmVfZW9zOgorICogIC0gbWFrZSBzdXJlIHRoZSBzb3VyY2Ugc3RvcHMgYW5kIGVtaXRzIEVPUyB3aGVuIHdlIHNlbmQgYW4gRU9TIGV2ZW50IHRvIHRoZQorICogICAgcGlwZWxpbmUuCisgKi8KK0dTVF9TVEFSVF9URVNUIChiYXNlc3JjX2Vvc19ldmVudHNfcHVsbF9saXZlX2VvcykKK3sKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3RhdGVfcmV0OworICBHc3RFbGVtZW50ICpzcmMsICpzaW5rLCAqcGlwZTsKKyAgR3N0TWVzc2FnZSAqbXNnOworICBHc3RCdXMgKmJ1czsKKyAgR3N0UGFkICpzcmNwYWQ7CisgIGd1aW50IHByb2JlLCBudW1fZW9zID0gMDsKKyAgZ2Jvb2xlYW4gcmVzOworCisgIHBpcGUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKKyAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzcmMiKTsKKworICBnX2Fzc2VydCAocGlwZSAhPSBOVUxMKTsKKyAgZ19hc3NlcnQgKHNpbmsgIT0gTlVMTCk7CisgIGdfYXNzZXJ0IChzcmMgIT0gTlVMTCk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlKSwgc3JjKSA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlKSwgc2luaykgPT0gVFJVRSk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKHNyYywgc2luaykgPT0gVFJVRSk7CisKKyAgZ19vYmplY3Rfc2V0IChzaW5rLCAiY2FuLWFjdGl2YXRlLXB1c2giLCBGQUxTRSwgTlVMTCk7CisgIGdfb2JqZWN0X3NldCAoc2luaywgImNhbi1hY3RpdmF0ZS1wdWxsIiwgVFJVRSwgTlVMTCk7CisKKyAgZ19vYmplY3Rfc2V0IChzcmMsICJjYW4tYWN0aXZhdGUtcHVzaCIsIEZBTFNFLCBOVUxMKTsKKyAgZ19vYmplY3Rfc2V0IChzcmMsICJjYW4tYWN0aXZhdGUtcHVsbCIsIFRSVUUsIE5VTEwpOworCisgIC8qIHNldCB1cCBldmVudCBwcm9iZSB0byBjb3VudCBFT1MgZXZlbnRzICovCisgIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMsICJzcmMiKTsKKyAgZmFpbF91bmxlc3MgKHNyY3BhZCAhPSBOVUxMKTsKKworICBwcm9iZSA9IGdzdF9wYWRfYWRkX3Byb2JlIChzcmNwYWQsIEdTVF9QUk9CRV9UWVBFX0VWRU5ULAorICAgICAgKEdzdFBhZFByb2JlQ2FsbGJhY2spIGVvc19ldmVudF9jb3VudGVyLCAmbnVtX2VvcywgTlVMTCk7CisKKyAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAocGlwZSk7CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfUExBWUlORyk7CisgIHN0YXRlX3JldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZSwgTlVMTCwgTlVMTCwgLTEpOworICBmYWlsX3VubGVzcyAoc3RhdGVfcmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7CisKKyAgLyogd2FpdCBhIHNlY29uZCwgdGhlbiBlbWl0IHRoZSBFT1MgKi8KKyAgZ191c2xlZXAgKEdTVF9VU0VDT05EICogMSk7CisKKyAgLyogc2h1dCBkb3duIHNvdXJjZSBvbmx5IChzaG91bGQgc2VuZCBFT1MgZXZlbnQpIC4uLiAqLworICByZXMgPSBnc3RfZWxlbWVudF9zZW5kX2V2ZW50IChwaXBlLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSk7CisKKyAgLyogLi4uIGFuZCB3YWl0IGZvciB0aGUgRU9TIG1lc3NhZ2UgZnJvbSB0aGUgc2luayAqLworICBtc2cgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfRU9TIHwgR1NUX01FU1NBR0VfRVJST1IsIC0xKTsKKyAgZmFpbF91bmxlc3MgKG1zZyAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgIT0gR1NUX01FU1NBR0VfRVJST1IpOworICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSA9PSBHU1RfTUVTU0FHRV9FT1MpOworCisgIC8qIG5vIEVPUyBpbiBwdWxsIG1vZGUgKi8KKyAgZmFpbF91bmxlc3MgKG51bV9lb3MgPT0gMCk7CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfTlVMTCk7CisgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZSwgTlVMTCwgTlVMTCwgLTEpOworCisgIC8qIG1ha2Ugc3VyZSBzb3VyY2UgaGFzbid0IHNlbnQgYSBzZWNvbmQgb25lIHdoZW4gZ29pbmcgUEFVU0VEID0+IFJFQURZICovCisgIGZhaWxfdW5sZXNzIChudW1fZW9zID09IDApOworCisgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChzcmNwYWQsIHByb2JlKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKKyAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKworc3RhdGljIEdzdFByb2JlUmV0dXJuCitzZWdtZW50X2V2ZW50X2NhdGNoZXIgKEdzdE9iamVjdCAqIHBhZCwgR3N0UHJvYmVUeXBlIHR5cGUsIEdzdEV2ZW50ICogZXZlbnQsCisgICAgZ3BvaW50ZXIgKiB1c2VyX2RhdGEpCit7CisgIEdzdEV2ZW50ICoqbGFzdF9ldmVudCA9IChHc3RFdmVudCAqKikgdXNlcl9kYXRhOworICBmYWlsX3VubGVzcyAoZXZlbnQgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChHU1RfSVNfRVZFTlQgKGV2ZW50KSk7CisgIGZhaWxfdW5sZXNzICh1c2VyX2RhdGEgIT0gTlVMTCk7CisKKyAgaWYgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX1NFR01FTlQpIHsKKyAgICBpZiAoKmxhc3RfZXZlbnQpCisgICAgICBnc3RfZXZlbnRfdW5yZWYgKCpsYXN0X2V2ZW50KTsKKyAgICAqbGFzdF9ldmVudCA9IGdzdF9ldmVudF9jb3B5IChldmVudCk7CisgIH0KKworICByZXR1cm4gR1NUX1BST0JFX09LOworfQorCisvKiBiYXNlc3JjX3NlZWtfZXZlbnRzX3JhdGVfdXBkYXRlOgorICogIC0gbWFrZSBzdXJlIHdlIGdldCBleHBlY3RlZCBzZWdtZW50IGFmdGVyIHNlbmRpbmcgYSBzZWVrIGV2ZW50CisgKi8KK0dTVF9TVEFSVF9URVNUIChiYXNlc3JjX3NlZWtfZXZlbnRzX3JhdGVfdXBkYXRlKQoreworICBHc3RTdGF0ZUNoYW5nZVJldHVybiBzdGF0ZV9yZXQ7CisgIEdzdEVsZW1lbnQgKnNyYywgKnNpbmssICpwaXBlOworICBHc3RNZXNzYWdlICptc2c7CisgIEdzdEJ1cyAqYnVzOworICBHc3RQYWQgKnByb2JlX3BhZDsKKyAgZ3VpbnQgcHJvYmU7CisgIEdzdEV2ZW50ICpzZWdfZXZlbnQgPSBOVUxMOworICBHc3RFdmVudCAqcmF0ZV9zZWVrOworICBnYm9vbGVhbiBldmVudF9yZXQ7CisgIGNvbnN0IEdzdFNlZ21lbnQgKnNlZ21lbnQ7CisKKyAgcGlwZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOworICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOworICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYyIpOworCisgIGdfYXNzZXJ0IChwaXBlICE9IE5VTEwpOworICBnX2Fzc2VydCAoc2luayAhPSBOVUxMKTsKKyAgZ19hc3NlcnQgKHNyYyAhPSBOVUxMKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGUpLCBzcmMpID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGUpLCBzaW5rKSA9PSBUUlVFKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBzaW5rKSA9PSBUUlVFKTsKKworICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChwaXBlKTsKKworICAvKiBzZXQgdXAgZXZlbnQgcHJvYmUgdG8gY2F0Y2ggbmV3IHNlZ21lbnQgZXZlbnQgKi8KKyAgcHJvYmVfcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNpbmssICJzaW5rIik7CisgIGZhaWxfdW5sZXNzIChwcm9iZV9wYWQgIT0gTlVMTCk7CisKKyAgcHJvYmUgPSBnc3RfcGFkX2FkZF9wcm9iZSAocHJvYmVfcGFkLCBHU1RfUFJPQkVfVFlQRV9FVkVOVCwKKyAgICAgIChHc3RQYWRQcm9iZUNhbGxiYWNrKSBzZWdtZW50X2V2ZW50X2NhdGNoZXIsICZzZWdfZXZlbnQsIE5VTEwpOworCisgIC8qIHByZXBhcmUgdGhlIHNlZWsgKi8KKyAgcmF0ZV9zZWVrID0gZ3N0X2V2ZW50X25ld19zZWVrICgwLjUsIEdTVF9GT1JNQVRfVElNRSwgR1NUX1NFRUtfRkxBR19OT05FLAorICAgICAgR1NUX1NFRUtfVFlQRV9OT05FLCBHU1RfQ0xPQ0tfVElNRV9OT05FLAorICAgICAgR1NUX1NFRUtfVFlQRV9OT05FLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKworICBHU1RfSU5GTyAoImdvaW5nIHRvIHBsYXlpbmciKTsKKworICAvKiBwbGF5ICovCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX1BMQVlJTkcpOworICBzdGF0ZV9yZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGUsIE5VTEwsIE5VTEwsIC0xKTsKKyAgZmFpbF91bmxlc3MgKHN0YXRlX3JldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOworCisgIEdTVF9JTkZPICgic2Vla2luZyIpOworCisgIC8qIHNlZWsgKi8KKyAgZXZlbnRfcmV0ID0gZ3N0X2VsZW1lbnRfc2VuZF9ldmVudCAocGlwZSwgcmF0ZV9zZWVrKTsKKyAgZmFpbF91bmxlc3MgKGV2ZW50X3JldCA9PSBUUlVFKTsKKworICAvKiB3YWl0IGEgc2Vjb25kLCB0aGVuIGRvIGNvbnRyb2xsZWQgc2h1dGRvd24gKi8KKyAgZ191c2xlZXAgKEdTVF9VU0VDT05EICogMSk7CisKKyAgLyogc2h1dCBkb3duIHBpcGVsaW5lIG9ubHkgKHNob3VsZCBzZW5kIEVPUyBtZXNzYWdlKSAuLi4gKi8KKyAgZ3N0X2VsZW1lbnRfc2VuZF9ldmVudCAocGlwZSwgZ3N0X2V2ZW50X25ld19lb3MgKCkpOworCisgIC8qIC4uLiBhbmQgd2FpdCBmb3IgdGhlIEVPUyBtZXNzYWdlIGZyb20gdGhlIHNpbmsgKi8KKyAgbXNnID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0VPUyB8IEdTVF9NRVNTQUdFX0VSUk9SLCAtMSk7CisgIGZhaWxfdW5sZXNzIChtc2cgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpICE9IEdTVF9NRVNTQUdFX0VSUk9SKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfRU9TKTsKKworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9OVUxMKTsKKyAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlLCBOVUxMLCBOVUxMLCAtMSk7CisKKyAgR1NUX0lORk8gKCJzdG9wcGVkIik7CisKKyAgLyogY2hlY2sgdGhhdCB3ZSBoYXZlIGdvIHRoZSBldmVudCAqLworICBmYWlsX3VubGVzcyAoc2VnX2V2ZW50ICE9IE5VTEwpOworCisgIGdzdF9ldmVudF9wYXJzZV9zZWdtZW50IChzZWdfZXZlbnQsICZzZWdtZW50KTsKKyAgZmFpbF91bmxlc3MgKHNlZ21lbnQtPnJhdGUgPT0gMC41KTsKKworICBnc3RfcGFkX3JlbW92ZV9wcm9iZSAocHJvYmVfcGFkLCBwcm9iZSk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHByb2JlX3BhZCk7CisgIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOworICBnc3RfZXZlbnRfdW5yZWYgKHNlZ19ldmVudCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKworc3RhdGljIFN1aXRlICoKK2dzdF9iYXNlc3JjX3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdEJhc2VTcmMiKTsKKyAgVENhc2UgKnRjID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOworCisgIHN1aXRlX2FkZF90Y2FzZSAocywgdGMpOworICB0Y2FzZV9hZGRfdGVzdCAodGMsIGJhc2VzcmNfZW9zX2V2ZW50c19wdWxsKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBiYXNlc3JjX2Vvc19ldmVudHNfcHVzaCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0YywgYmFzZXNyY19lb3NfZXZlbnRzX3B1c2hfbGl2ZV9vcCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0YywgYmFzZXNyY19lb3NfZXZlbnRzX3B1bGxfbGl2ZV9vcCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0YywgYmFzZXNyY19lb3NfZXZlbnRzX3B1c2hfbGl2ZV9lb3MpOworICB0Y2FzZV9hZGRfdGVzdCAodGMsIGJhc2VzcmNfZW9zX2V2ZW50c19wdWxsX2xpdmVfZW9zKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBiYXNlc3JjX3NlZWtfZXZlbnRzX3JhdGVfdXBkYXRlKTsKKworICByZXR1cm4gczsKK30KKworR1NUX0NIRUNLX01BSU4gKGdzdF9iYXNlc3JjKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2xpYnMvYml0cmVhZGVyLmMgYi90ZXN0cy9jaGVjay9saWJzL2JpdHJlYWRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NmIwMGUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9saWJzL2JpdHJlYWRlci5jCkBAIC0wLDAgKzEsMjU0IEBACisvKiBHU3RyZWFtZXIKKyAqCisgKiB1bml0IHRlc3QgZm9yIEdzdEJpdFJlYWRlcgorICoKKyAqIENvcHlyaWdodCAoQykgPDIwMDg+IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KKyNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiaXRyZWFkZXIuaD4KKworI2lmbmRlZiBmYWlsX3VubGVzc19lcXVhbHNfaW50NjQKKyNkZWZpbmUgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0KGEsIGIpCQkJCQlcCitHX1NUTVRfU1RBUlQgewkJCQkJCQkJXAorICBnaW50NjQgZmlyc3QgPSBhOwkJCQkJCQlcCisgIGdpbnQ2NCBzZWNvbmQgPSBiOwkJCQkJCQlcCisgIGZhaWxfdW5sZXNzKGZpcnN0ID09IHNlY29uZCwJCQkJCQlcCisgICAgIiciICNhICInICglIiBHX0dJTlQ2NF9GT1JNQVQgIikgaXMgbm90IGVxdWFsIHRvICciICNiIicgKCUiCVwKKyAgICBHX0dJTlQ2NF9GT1JNQVQgIikiLCBmaXJzdCwgc2Vjb25kKTsJCQkJXAorfSBHX1NUTVRfRU5EOworI2VuZGlmCisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2luaXRpYWxpemF0aW9uKQoreworICBndWludDggZGF0YVtdID0geyAweDAxLCAweDAyLCAweDAzLCAweDA0IH07CisgIEdzdEJ1ZmZlciAqYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisgIEdzdEJpdFJlYWRlciByZWFkZXIgPSBHU1RfQklUX1JFQURFUl9JTklUIChkYXRhLCA0KTsKKyAgR3N0Qml0UmVhZGVyICpyZWFkZXIyOworICBndWludDggeCA9IDA7CisgIGd1aW50OCAqYmRhdGE7CisgIGdzaXplIGJzaXplOworCisgIGdzdF9idWZmZXJfdGFrZV9tZW1vcnkgKGJ1ZmZlciwgLTEsCisgICAgICBnc3RfbWVtb3J5X25ld193cmFwcGVkIChHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFksIGRhdGEsIE5VTEwsIDQsIDAsIDQpKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDggKCZyZWFkZXIsICZ4LCA4KSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHgsIDB4MDEpOworICBmYWlsX3VubGVzcyAoZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDggKCZyZWFkZXIsICZ4LCA4KSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHgsIDB4MDIpOworCisgIG1lbXNldCAoJnJlYWRlciwgMCwgc2l6ZW9mIChHc3RCaXRSZWFkZXIpKTsKKworICBnc3RfYml0X3JlYWRlcl9pbml0ICgmcmVhZGVyLCBkYXRhLCA0KTsKKyAgZmFpbF91bmxlc3MgKGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4ICgmcmVhZGVyLCAmeCwgOCkpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICh4LCAweDAxKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4ICgmcmVhZGVyLCAmeCwgOCkpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICh4LCAweDAyKTsKKworICBiZGF0YSA9IGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZic2l6ZSwgTlVMTCwgR1NUX01BUF9SRUFEKTsKKyAgZ3N0X2JpdF9yZWFkZXJfaW5pdCAoJnJlYWRlciwgYmRhdGEsIGJzaXplKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4ICgmcmVhZGVyLCAmeCwgOCkpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICh4LCAweDAxKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4ICgmcmVhZGVyLCAmeCwgOCkpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICh4LCAweDAyKTsKKyAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCBiZGF0YSwgYnNpemUpOworCisgIHJlYWRlcjIgPSBnc3RfYml0X3JlYWRlcl9uZXcgKGRhdGEsIDQpOworICBmYWlsX3VubGVzcyAoZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDggKHJlYWRlcjIsICZ4LCA4KSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHgsIDB4MDEpOworICBmYWlsX3VubGVzcyAoZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDggKHJlYWRlcjIsICZ4LCA4KSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHgsIDB4MDIpOworICBnc3RfYml0X3JlYWRlcl9mcmVlIChyZWFkZXIyKTsKKworICBiZGF0YSA9IGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZic2l6ZSwgTlVMTCwgR1NUX01BUF9SRUFEKTsKKyAgcmVhZGVyMiA9IGdzdF9iaXRfcmVhZGVyX25ldyAoYmRhdGEsIGJzaXplKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4IChyZWFkZXIyLCAmeCwgOCkpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICh4LCAweDAxKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4IChyZWFkZXIyLCAmeCwgOCkpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICh4LCAweDAyKTsKKyAgZ3N0X2JpdF9yZWFkZXJfZnJlZSAocmVhZGVyMik7CisgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgYmRhdGEsIGJzaXplKTsKKworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKyNkZWZpbmUgR0VUX0NIRUNLKHJlYWRlciwgZGVzdCwgYml0cywgbmJpdHMsIHZhbCkgeyBcCisgIGZhaWxfdW5sZXNzIChnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50IyNiaXRzIChyZWFkZXIsICZkZXN0LCBuYml0cykpOyBcCisgIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKGRlc3QsIHZhbCk7IFwKK30KKworI2RlZmluZSBQRUVLX0NIRUNLKHJlYWRlciwgZGVzdCwgYml0cywgbmJpdHMsIHZhbCkgeyBcCisgIGZhaWxfdW5sZXNzIChnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludCMjYml0cyAocmVhZGVyLCAmZGVzdCwgbmJpdHMpKTsgXAorICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChkZXN0LCB2YWwpOyBcCit9CisKKyNkZWZpbmUgR0VUX0NIRUNLX0ZBSUwocmVhZGVyLCBkZXN0LCBiaXRzLCBuYml0cykgeyBcCisgIGZhaWxfaWYgKGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQjI2JpdHMgKHJlYWRlciwgJmRlc3QsIG5iaXRzKSk7IFwKK30KKworI2RlZmluZSBQRUVLX0NIRUNLX0ZBSUwocmVhZGVyLCBkZXN0LCBiaXRzLCBuYml0cykgeyBcCisgIGZhaWxfaWYgKGdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50IyNiaXRzIChyZWFkZXIsICZkZXN0LCBuYml0cykpOyBcCit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2dldF9iaXRzKQoreworICBndWludDggZGF0YVtdID0geyAweDEyLCAweDM0LCAweDU2LCAweDc4LCAweDkwLCAweGFiLCAweGNkLCAweGVmLAorICAgIDB4ZmUsIDB4ZGMsIDB4YmEsIDB4MDksIDB4ODcsIDB4NjUsIDB4NDMsIDB4MjEKKyAgfTsKKyAgR3N0Qml0UmVhZGVyIHJlYWRlciA9IEdTVF9CSVRfUkVBREVSX0lOSVQgKGRhdGEsIDE2KTsKKyAgZ3VpbnQ4IGEgPSAwOworICBndWludDE2IGIgPSAwOworICBndWludDMyIGMgPSAwOworICBndWludDY0IGQgPSAwOworCisgIC8qIDggYml0ICovCisgIEdFVF9DSEVDSyAoJnJlYWRlciwgYSwgOCwgOCwgMHgxMik7CisgIEdFVF9DSEVDSyAoJnJlYWRlciwgYSwgOCwgNCwgMHgwMyk7CisgIEdFVF9DSEVDSyAoJnJlYWRlciwgYSwgOCwgNCwgMHgwNCk7CisgIEdFVF9DSEVDSyAoJnJlYWRlciwgYSwgOCwgMywgMHgwMik7CisgIEdFVF9DSEVDSyAoJnJlYWRlciwgYSwgOCwgMSwgMHgwMSk7CisgIEdFVF9DSEVDSyAoJnJlYWRlciwgYSwgOCwgMiwgMHgwMSk7CisgIEdFVF9DSEVDSyAoJnJlYWRlciwgYSwgOCwgMiwgMHgwMik7CisKKyAgUEVFS19DSEVDSyAoJnJlYWRlciwgYSwgOCwgOCwgMHg3OCk7CisgIFBFRUtfQ0hFQ0sgKCZyZWFkZXIsIGEsIDgsIDgsIDB4NzgpOworICBmYWlsX3VubGVzcyAoZ3N0X2JpdF9yZWFkZXJfc2tpcCAoJnJlYWRlciwgOCkpOworCisgIFBFRUtfQ0hFQ0sgKCZyZWFkZXIsIGEsIDgsIDgsIDB4OTApOworICBHRVRfQ0hFQ0sgKCZyZWFkZXIsIGEsIDgsIDEsIDB4MDEpOworICBHRVRfQ0hFQ0sgKCZyZWFkZXIsIGEsIDgsIDEsIDB4MDApOworICBHRVRfQ0hFQ0sgKCZyZWFkZXIsIGEsIDgsIDEsIDB4MDApOworICBHRVRfQ0hFQ0sgKCZyZWFkZXIsIGEsIDgsIDEsIDB4MDEpOworICBmYWlsX3VubGVzcyAoZ3N0X2JpdF9yZWFkZXJfc2tpcCAoJnJlYWRlciwgNCkpOworCisgIGZhaWxfdW5sZXNzIChnc3RfYml0X3JlYWRlcl9za2lwICgmcmVhZGVyLCAxMCAqIDgpKTsKKyAgR0VUX0NIRUNLICgmcmVhZGVyLCBhLCA4LCA4LCAweDIxKTsKKyAgR0VUX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGEsIDgsIDEpOworICBQRUVLX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGEsIDgsIDEpOworCisgIC8qIDE2IGJpdCAqLworICBnc3RfYml0X3JlYWRlcl9pbml0ICgmcmVhZGVyLCBkYXRhLCAxNik7CisKKyAgR0VUX0NIRUNLICgmcmVhZGVyLCBiLCAxNiwgMTYsIDB4MTIzNCk7CisgIFBFRUtfQ0hFQ0sgKCZyZWFkZXIsIGIsIDE2LCAxMywgMHgwYWNmKTsKKyAgR0VUX0NIRUNLICgmcmVhZGVyLCBiLCAxNiwgOCwgMHg1Nik7CisgIEdFVF9DSEVDSyAoJnJlYWRlciwgYiwgMTYsIDQsIDB4MDcpOworICBHRVRfQ0hFQ0sgKCZyZWFkZXIsIGIsIDE2LCAyLCAweDAyKTsKKyAgR0VUX0NIRUNLICgmcmVhZGVyLCBiLCAxNiwgMiwgMHgwMCk7CisgIFBFRUtfQ0hFQ0sgKCZyZWFkZXIsIGIsIDE2LCA4LCAweDkwKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9iaXRfcmVhZGVyX3NraXAgKCZyZWFkZXIsIDExICogOCkpOworICBHRVRfQ0hFQ0sgKCZyZWFkZXIsIGIsIDE2LCA4LCAweDIxKTsKKyAgR0VUX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGIsIDE2LCAxNik7CisgIFBFRUtfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgYiwgMTYsIDE2KTsKKworICAvKiAzMiBiaXQgKi8KKyAgZ3N0X2JpdF9yZWFkZXJfaW5pdCAoJnJlYWRlciwgZGF0YSwgMTYpOworCisgIEdFVF9DSEVDSyAoJnJlYWRlciwgYywgMzIsIDMyLCAweDEyMzQ1Njc4KTsKKyAgR0VUX0NIRUNLICgmcmVhZGVyLCBjLCAzMiwgMjQsIDB4OTBhYmNkKTsKKyAgR0VUX0NIRUNLICgmcmVhZGVyLCBjLCAzMiwgMTYsIDB4ZWZmZSk7CisgIEdFVF9DSEVDSyAoJnJlYWRlciwgYywgMzIsIDgsIDB4ZGMpOworICBHRVRfQ0hFQ0sgKCZyZWFkZXIsIGMsIDMyLCA0LCAweDBiKTsKKyAgR0VUX0NIRUNLICgmcmVhZGVyLCBjLCAzMiwgMiwgMHgwMik7CisgIEdFVF9DSEVDSyAoJnJlYWRlciwgYywgMzIsIDIsIDB4MDIpOworICBQRUVLX0NIRUNLICgmcmVhZGVyLCBjLCAzMiwgOCwgMHgwOSk7CisgIGZhaWxfdW5sZXNzIChnc3RfYml0X3JlYWRlcl9za2lwICgmcmVhZGVyLCAzICogOCkpOworICBHRVRfQ0hFQ0sgKCZyZWFkZXIsIGMsIDMyLCAxNSwgMHgyMTkwKTsKKyAgR0VUX0NIRUNLICgmcmVhZGVyLCBjLCAzMiwgMSwgMHgxKTsKKyAgR0VUX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGMsIDMyLCAxKTsKKworICAvKiA2NCBiaXQgKi8KKyAgZ3N0X2JpdF9yZWFkZXJfaW5pdCAoJnJlYWRlciwgZGF0YSwgMTYpOworCisgIEdFVF9DSEVDSyAoJnJlYWRlciwgZCwgNjQsIDY0LCBHX0dJTlQ2NF9DT05TVEFOVCAoMHgxMjM0NTY3ODkwYWJjZGVmKSk7CisgIEdFVF9DSEVDSyAoJnJlYWRlciwgZCwgNjQsIDcsIDB4ZmUgPj4gMSk7CisgIEdFVF9DSEVDSyAoJnJlYWRlciwgZCwgNjQsIDEsIDB4MDApOworICBHRVRfQ0hFQ0sgKCZyZWFkZXIsIGQsIDY0LCAyNCwgMHhkY2JhMDkpOworICBHRVRfQ0hFQ0sgKCZyZWFkZXIsIGQsIDY0LCAzMiwgMHg4NzY1NDMyMSk7CisgIEdFVF9DSEVDS19GQUlMICgmcmVhZGVyLCBkLCA2NCwgMzIpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKyN1bmRlZiBHRVRfQ0hFQ0sKKyN1bmRlZiBQRUVLX0NIRUNLCisjdW5kZWYgR0VUX0NIRUNLX0ZBSUwKKyN1bmRlZiBQRUVLX0NIRUNLX0ZBSUwKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfcG9zaXRpb25fdHJhY2tpbmcpCit7CisgIGd1aW50OCBkYXRhW10gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorICB9OworICBHc3RCaXRSZWFkZXIgcmVhZGVyID0gR1NUX0JJVF9SRUFERVJfSU5JVCAoZGF0YSwgMTYpOworICBndWludDggYSA9IDA7CisKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2JpdF9yZWFkZXJfZ2V0X3BvcyAoJnJlYWRlciksIDApOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYml0X3JlYWRlcl9nZXRfcmVtYWluaW5nICgmcmVhZGVyKSwgMTYgKiA4KTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDggKCZyZWFkZXIsICZhLCAzKSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9iaXRfcmVhZGVyX2dldF9wb3MgKCZyZWFkZXIpLCAzKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2JpdF9yZWFkZXJfZ2V0X3JlbWFpbmluZyAoJnJlYWRlciksIDE2ICogOCAtIDMpOworCisgIGZhaWxfdW5sZXNzIChnc3RfYml0X3JlYWRlcl9zZXRfcG9zICgmcmVhZGVyLCA5KSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9iaXRfcmVhZGVyX2dldF9wb3MgKCZyZWFkZXIpLCA5KTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2JpdF9yZWFkZXJfZ2V0X3JlbWFpbmluZyAoJnJlYWRlciksIDE2ICogOCAtIDkpOworCisgIGZhaWxfdW5sZXNzIChnc3RfYml0X3JlYWRlcl9za2lwICgmcmVhZGVyLCAzKSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9iaXRfcmVhZGVyX2dldF9wb3MgKCZyZWFkZXIpLCAxMik7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9iaXRfcmVhZGVyX2dldF9yZW1haW5pbmcgKCZyZWFkZXIpLCAxNiAqIDggLSAxMik7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9iaXRfcmVhZGVyX3NraXBfdG9fYnl0ZSAoJnJlYWRlcikpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYml0X3JlYWRlcl9nZXRfcG9zICgmcmVhZGVyKSwgMTYpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYml0X3JlYWRlcl9nZXRfcmVtYWluaW5nICgmcmVhZGVyKSwgMTYgKiA4IC0gMTYpOworCisgIGZhaWxfdW5sZXNzIChnc3RfYml0X3JlYWRlcl9zZXRfcG9zICgmcmVhZGVyLCAxNiAqIDgpKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2JpdF9yZWFkZXJfZ2V0X3BvcyAoJnJlYWRlciksIDE2ICogOCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9iaXRfcmVhZGVyX2dldF9yZW1haW5pbmcgKCZyZWFkZXIpLCAwKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2JpdF9yZWFkZXJfc2tpcCAoJnJlYWRlciwgMCkpOworICBmYWlsX2lmIChnc3RfYml0X3JlYWRlcl9za2lwICgmcmVhZGVyLCAxKSk7CisgIGZhaWxfdW5sZXNzIChnc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGUgKCZyZWFkZXIpKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgU3VpdGUgKgorZ3N0X2JpdF9yZWFkZXJfc3VpdGUgKHZvaWQpCit7CisgIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0Qml0UmVhZGVyIik7CisgIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKKworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKKworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW5pdGlhbGl6YXRpb24pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2V0X2JpdHMpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcG9zaXRpb25fdHJhY2tpbmcpOworCisgIHJldHVybiBzOworfQorCisKK0dTVF9DSEVDS19NQUlOIChnc3RfYml0X3JlYWRlcik7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9saWJzL2J5dGVyZWFkZXIuYyBiL3Rlc3RzL2NoZWNrL2xpYnMvYnl0ZXJlYWRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYjdlZjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9saWJzL2J5dGVyZWFkZXIuYwpAQCAtMCwwICsxLDcxMyBAQAorLyogR1N0cmVhbWVyCisgKgorICogdW5pdCB0ZXN0IGZvciBHc3RCeXRlUmVhZGVyCisgKgorICogQ29weXJpZ2h0IChDKSA8MjAwOD4gU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgorI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaD4KKworI2lmbmRlZiBmYWlsX3VubGVzc19lcXVhbHNfaW50NjQKKyNkZWZpbmUgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0KGEsIGIpCQkJCQlcCitHX1NUTVRfU1RBUlQgewkJCQkJCQkJXAorICBnaW50NjQgZmlyc3QgPSBhOwkJCQkJCQlcCisgIGdpbnQ2NCBzZWNvbmQgPSBiOwkJCQkJCQlcCisgIGZhaWxfdW5sZXNzKGZpcnN0ID09IHNlY29uZCwJCQkJCQlcCisgICAgIiciICNhICInICglIiBHX0dJTlQ2NF9GT1JNQVQgIikgaXMgbm90IGVxdWFsIHRvICciICNiIicgKCUiCVwKKyAgICBHX0dJTlQ2NF9GT1JNQVQgIikiLCBmaXJzdCwgc2Vjb25kKTsJCQkJXAorfSBHX1NUTVRfRU5EOworI2VuZGlmCisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2luaXRpYWxpemF0aW9uKQoreworICBndWludDggZGF0YVtdID0geyAweDAxLCAweDAyLCAweDAzLCAweDA0IH07CisgIEdzdEJ1ZmZlciAqYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisgIEdzdEJ5dGVSZWFkZXIgcmVhZGVyID0gR1NUX0JZVEVfUkVBREVSX0lOSVQgKGRhdGEsIDQpOworICBHc3RCeXRlUmVhZGVyICpyZWFkZXIyOworICBndWludDggeCA9IDA7CisgIGd1aW50OCAqYmRhdGE7CisgIGdzaXplIGJzaXplOworCisgIGdzdF9idWZmZXJfdGFrZV9tZW1vcnkgKGJ1ZmZlciwgLTEsCisgICAgICBnc3RfbWVtb3J5X25ld193cmFwcGVkIChHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFksIGRhdGEsIE5VTEwsIDQsIDAsIDQpKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OCAoJnJlYWRlciwgJngpKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoeCwgMHgwMSk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4ICgmcmVhZGVyLCAmeCkpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICh4LCAweDAyKTsKKworICBtZW1zZXQgKCZyZWFkZXIsIDAsIHNpemVvZiAoR3N0Qnl0ZVJlYWRlcikpOworCisgIGdzdF9ieXRlX3JlYWRlcl9pbml0ICgmcmVhZGVyLCBkYXRhLCA0KTsKKyAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDggKCZyZWFkZXIsICZ4KSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHgsIDB4MDEpOworICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OCAoJnJlYWRlciwgJngpKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoeCwgMHgwMik7CisKKyAgYmRhdGEgPSBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmYnNpemUsIE5VTEwsIEdTVF9NQVBfUkVBRCk7CisgIGdzdF9ieXRlX3JlYWRlcl9pbml0ICgmcmVhZGVyLCBiZGF0YSwgYnNpemUpOworICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OCAoJnJlYWRlciwgJngpKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoeCwgMHgwMSk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4ICgmcmVhZGVyLCAmeCkpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICh4LCAweDAyKTsKKyAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCBiZGF0YSwgYnNpemUpOworCisgIHJlYWRlcjIgPSBnc3RfYnl0ZV9yZWFkZXJfbmV3IChkYXRhLCA0KTsKKyAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDggKHJlYWRlcjIsICZ4KSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHgsIDB4MDEpOworICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OCAocmVhZGVyMiwgJngpKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoeCwgMHgwMik7CisgIGdzdF9ieXRlX3JlYWRlcl9mcmVlIChyZWFkZXIyKTsKKworICBiZGF0YSA9IGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZic2l6ZSwgTlVMTCwgR1NUX01BUF9SRUFEKTsKKyAgcmVhZGVyMiA9IGdzdF9ieXRlX3JlYWRlcl9uZXcgKGJkYXRhLCBic2l6ZSk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4IChyZWFkZXIyLCAmeCkpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICh4LCAweDAxKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDggKHJlYWRlcjIsICZ4KSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHgsIDB4MDIpOworICBnc3RfYnl0ZV9yZWFkZXJfZnJlZSAocmVhZGVyMik7CisgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgYmRhdGEsIGJzaXplKTsKKworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKyNkZWZpbmUgR0VUX0NIRUNLOChyZWFkZXIsIGRlc3QsIHZhbCkgeyBcCisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4IChyZWFkZXIsICZkZXN0KSk7IFwKKyAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoZGVzdCwgdmFsKTsgXAorfQorCisjZGVmaW5lIEdFVF9DSEVDSyhyZWFkZXIsIGRlc3QsIGJpdHMsIGVuZGlhbm5lc3MsIHZhbCkgeyBcCisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQjI2JpdHMjI18jI2VuZGlhbm5lc3MgKHJlYWRlciwgJmRlc3QpKTsgXAorICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChkZXN0LCB2YWwpOyBcCit9CisKKyNkZWZpbmUgR0VUX0NIRUNLX0ZBSUw4KHJlYWRlciwgZGVzdCkgeyBcCisgIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDggKHJlYWRlciwgJmRlc3QpKTsgXAorfQorCisjZGVmaW5lIEdFVF9DSEVDS19GQUlMKHJlYWRlciwgZGVzdCwgYml0cywgZW5kaWFubmVzcykgeyBcCisgIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludCMjYml0cyMjXyMjZW5kaWFubmVzcyAocmVhZGVyLCAmZGVzdCkpOyBcCit9CisKKyNkZWZpbmUgUEVFS19DSEVDSzgocmVhZGVyLCBkZXN0LCB2YWwpIHsgXAorICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDggKHJlYWRlciwgJmRlc3QpKTsgXAorICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChkZXN0LCB2YWwpOyBcCit9CisKKyNkZWZpbmUgUEVFS19DSEVDSyhyZWFkZXIsIGRlc3QsIGJpdHMsIGVuZGlhbm5lc3MsIHZhbCkgeyBcCisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50IyNiaXRzIyNfIyNlbmRpYW5uZXNzIChyZWFkZXIsICZkZXN0KSk7IFwKKyAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoZGVzdCwgdmFsKTsgXAorfQorCisjZGVmaW5lIFBFRUtfQ0hFQ0tfRkFJTDgocmVhZGVyLCBkZXN0KSB7IFwKKyAgZmFpbF9pZiAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDggKHJlYWRlciwgJmRlc3QpKTsgXAorfQorCisjZGVmaW5lIFBFRUtfQ0hFQ0tfRkFJTChyZWFkZXIsIGRlc3QsIGJpdHMsIGVuZGlhbm5lc3MpIHsgXAorICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50IyNiaXRzIyNfIyNlbmRpYW5uZXNzIChyZWFkZXIsICZkZXN0KSk7IFwKK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfZ2V0X3VpbnRfbGUpCit7CisgIGd1aW50OCBkYXRhW10gPSB7IDB4MTIsIDB4MzQsIDB4NTYsIDB4NzgsIDB4OTAsIDB4YWIsIDB4Y2QsIDB4ZWYsCisgICAgMHhmZSwgMHhkYywgMHhiYSwgMHgwOSwgMHg4NywgMHg2NSwgMHg0MywgMHgyMQorICB9OworICBHc3RCeXRlUmVhZGVyIHJlYWRlciA9IEdTVF9CWVRFX1JFQURFUl9JTklUIChkYXRhLCAxNik7CisgIGd1aW50OCBhID0gMDsKKyAgZ3VpbnQxNiBiID0gMDsKKyAgZ3VpbnQzMiBjID0gMDsKKyAgZ3VpbnQ2NCBkID0gMDsKKworICBHRVRfQ0hFQ0s4ICgmcmVhZGVyLCBhLCAweDEyKTsKKyAgR0VUX0NIRUNLICgmcmVhZGVyLCBiLCAxNiwgbGUsIDB4NTYzNCk7CisgIEdFVF9DSEVDSyAoJnJlYWRlciwgYywgMjQsIGxlLCAweGFiOTA3OCk7CisgIEdFVF9DSEVDSyAoJnJlYWRlciwgYywgMzIsIGxlLCAweGRjZmVlZmNkKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9zZXRfcG9zICgmcmVhZGVyLCAwKSk7CisgIEdFVF9DSEVDSyAoJnJlYWRlciwgZCwgNjQsIGxlLCBHX0dJTlQ2NF9DT05TVEFOVCAoMHhlZmNkYWI5MDc4NTYzNDEyKSk7CisgIEdFVF9DSEVDSyAoJnJlYWRlciwgZCwgNjQsIGxlLCBHX0dJTlQ2NF9DT05TVEFOVCAoMHgyMTQzNjU4NzA5YmFkY2ZlKSk7CisKKyAgR0VUX0NIRUNLX0ZBSUw4ICgmcmVhZGVyLCBhKTsKKyAgR0VUX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGIsIDE2LCBsZSk7CisgIEdFVF9DSEVDS19GQUlMICgmcmVhZGVyLCBjLCAyNCwgbGUpOworICBHRVRfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgYywgMzIsIGxlKTsKKyAgR0VUX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGQsIDY0LCBsZSk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9zZXRfcG9zICgmcmVhZGVyLCAwKSk7CisKKyAgUEVFS19DSEVDSzggKCZyZWFkZXIsIGEsIDB4MTIpOworICBQRUVLX0NIRUNLICgmcmVhZGVyLCBiLCAxNiwgbGUsIDB4MzQxMik7CisgIFBFRUtfQ0hFQ0sgKCZyZWFkZXIsIGMsIDI0LCBsZSwgMHg1NjM0MTIpOworICBQRUVLX0NIRUNLICgmcmVhZGVyLCBjLCAzMiwgbGUsIDB4Nzg1NjM0MTIpOworICBQRUVLX0NIRUNLICgmcmVhZGVyLCBkLCA2NCwgbGUsIEdfR0lOVDY0X0NPTlNUQU5UICgweGVmY2RhYjkwNzg1NjM0MTIpKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3NldF9wb3MgKCZyZWFkZXIsIDE2KSk7CisgIFBFRUtfQ0hFQ0tfRkFJTDggKCZyZWFkZXIsIGEpOworICBQRUVLX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGIsIDE2LCBsZSk7CisgIFBFRUtfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgYywgMjQsIGxlKTsKKyAgUEVFS19DSEVDS19GQUlMICgmcmVhZGVyLCBjLCAzMiwgbGUpOworICBQRUVLX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGQsIDY0LCBsZSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfZ2V0X3VpbnRfYmUpCit7CisgIGd1aW50OCBkYXRhW10gPSB7IDB4MTIsIDB4MzQsIDB4NTYsIDB4NzgsIDB4OTAsIDB4YWIsIDB4Y2QsIDB4ZWYsCisgICAgMHhmZSwgMHhkYywgMHhiYSwgMHgwOSwgMHg4NywgMHg2NSwgMHg0MywgMHgyMQorICB9OworICBHc3RCeXRlUmVhZGVyIHJlYWRlciA9IEdTVF9CWVRFX1JFQURFUl9JTklUIChkYXRhLCAxNik7CisgIGd1aW50OCBhID0gMDsKKyAgZ3VpbnQxNiBiID0gMDsKKyAgZ3VpbnQzMiBjID0gMDsKKyAgZ3VpbnQ2NCBkID0gMDsKKworICBHRVRfQ0hFQ0s4ICgmcmVhZGVyLCBhLCAweDEyKTsKKyAgR0VUX0NIRUNLICgmcmVhZGVyLCBiLCAxNiwgYmUsIDB4MzQ1Nik7CisgIEdFVF9DSEVDSyAoJnJlYWRlciwgYywgMjQsIGJlLCAweDc4OTBhYik7CisgIEdFVF9DSEVDSyAoJnJlYWRlciwgYywgMzIsIGJlLCAweGNkZWZmZWRjKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9zZXRfcG9zICgmcmVhZGVyLCAwKSk7CisgIEdFVF9DSEVDSyAoJnJlYWRlciwgZCwgNjQsIGJlLCBHX0dJTlQ2NF9DT05TVEFOVCAoMHgxMjM0NTY3ODkwYWJjZGVmKSk7CisgIEdFVF9DSEVDSyAoJnJlYWRlciwgZCwgNjQsIGJlLCBHX0dJTlQ2NF9DT05TVEFOVCAoMHhmZWRjYmEwOTg3NjU0MzIxKSk7CisKKyAgR0VUX0NIRUNLX0ZBSUw4ICgmcmVhZGVyLCBhKTsKKyAgR0VUX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGIsIDE2LCBiZSk7CisgIEdFVF9DSEVDS19GQUlMICgmcmVhZGVyLCBjLCAyNCwgYmUpOworICBHRVRfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgYywgMzIsIGJlKTsKKyAgR0VUX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGQsIDY0LCBiZSk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9zZXRfcG9zICgmcmVhZGVyLCAwKSk7CisKKyAgUEVFS19DSEVDSzggKCZyZWFkZXIsIGEsIDB4MTIpOworICBQRUVLX0NIRUNLICgmcmVhZGVyLCBiLCAxNiwgYmUsIDB4MTIzNCk7CisgIFBFRUtfQ0hFQ0sgKCZyZWFkZXIsIGMsIDI0LCBiZSwgMHgxMjM0NTYpOworICBQRUVLX0NIRUNLICgmcmVhZGVyLCBjLCAzMiwgYmUsIDB4MTIzNDU2NzgpOworICBQRUVLX0NIRUNLICgmcmVhZGVyLCBkLCA2NCwgYmUsIEdfR0lOVDY0X0NPTlNUQU5UICgweDEyMzQ1Njc4OTBhYmNkZWYpKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3NldF9wb3MgKCZyZWFkZXIsIDE2KSk7CisgIFBFRUtfQ0hFQ0tfRkFJTDggKCZyZWFkZXIsIGEpOworICBQRUVLX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGIsIDE2LCBiZSk7CisgIFBFRUtfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgYywgMjQsIGJlKTsKKyAgUEVFS19DSEVDS19GQUlMICgmcmVhZGVyLCBjLCAzMiwgYmUpOworICBQRUVLX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGQsIDY0LCBiZSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworI3VuZGVmIEdFVF9DSEVDSzgKKyN1bmRlZiBHRVRfQ0hFQ0sKKyN1bmRlZiBQRUVLX0NIRUNLOAorI3VuZGVmIFBFRUtfQ0hFQ0sKKyN1bmRlZiBHRVRfQ0hFQ0tfRkFJTDgKKyN1bmRlZiBHRVRfQ0hFQ0tfRkFJTAorI3VuZGVmIFBFRUtfQ0hFQ0tfRkFJTDgKKyN1bmRlZiBQRUVLX0NIRUNLX0ZBSUwKKworI2RlZmluZSBHRVRfQ0hFQ0s4KHJlYWRlciwgZGVzdCwgdmFsKSB7IFwKKyAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50OCAocmVhZGVyLCAmZGVzdCkpOyBcCisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NCAoZGVzdCwgdmFsKTsgXAorfQorCisjZGVmaW5lIEdFVF9DSEVDSyhyZWFkZXIsIGRlc3QsIGJpdHMsIGVuZGlhbm5lc3MsIHZhbCkgeyBcCisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludCMjYml0cyMjXyMjZW5kaWFubmVzcyAocmVhZGVyLCAmZGVzdCkpOyBcCisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NCAoZGVzdCwgdmFsKTsgXAorfQorCisjZGVmaW5lIEdFVF9DSEVDS19GQUlMOChyZWFkZXIsIGRlc3QpIHsgXAorICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDggKHJlYWRlciwgJmRlc3QpKTsgXAorfQorCisjZGVmaW5lIEdFVF9DSEVDS19GQUlMKHJlYWRlciwgZGVzdCwgYml0cywgZW5kaWFubmVzcykgeyBcCisgIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50IyNiaXRzIyNfIyNlbmRpYW5uZXNzIChyZWFkZXIsICZkZXN0KSk7IFwKK30KKworI2RlZmluZSBQRUVLX0NIRUNLOChyZWFkZXIsIGRlc3QsIHZhbCkgeyBcCisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ4IChyZWFkZXIsICZkZXN0KSk7IFwKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0IChkZXN0LCB2YWwpOyBcCit9CisKKyNkZWZpbmUgUEVFS19DSEVDSyhyZWFkZXIsIGRlc3QsIGJpdHMsIGVuZGlhbm5lc3MsIHZhbCkgeyBcCisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQjI2JpdHMjI18jI2VuZGlhbm5lc3MgKHJlYWRlciwgJmRlc3QpKTsgXAorICBmYWlsX3VubGVzc19lcXVhbHNfaW50NjQgKGRlc3QsIHZhbCk7IFwKK30KKworI2RlZmluZSBQRUVLX0NIRUNLX0ZBSUw4KHJlYWRlciwgZGVzdCkgeyBcCisgIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDggKHJlYWRlciwgJmRlc3QpKTsgXAorfQorCisjZGVmaW5lIFBFRUtfQ0hFQ0tfRkFJTChyZWFkZXIsIGRlc3QsIGJpdHMsIGVuZGlhbm5lc3MpIHsgXAorICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQjI2JpdHMjI18jI2VuZGlhbm5lc3MgKHJlYWRlciwgJmRlc3QpKTsgXAorfQorCitHU1RfU1RBUlRfVEVTVCAodGVzdF9nZXRfaW50X2xlKQoreworICBndWludDggZGF0YVtdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYKKyAgfTsKKyAgR3N0Qnl0ZVJlYWRlciByZWFkZXIgPSBHU1RfQllURV9SRUFERVJfSU5JVCAoZGF0YSwgMTYpOworICBnaW50OCBhID0gMDsKKyAgZ2ludDE2IGIgPSAwOworICBnaW50MzIgYyA9IDA7CisgIGdpbnQ2NCBkID0gMDsKKworICBHRVRfQ0hFQ0s4ICgmcmVhZGVyLCBhLCAtMSk7CisgIEdFVF9DSEVDSyAoJnJlYWRlciwgYiwgMTYsIGxlLCAtMSk7CisgIEdFVF9DSEVDSyAoJnJlYWRlciwgYywgMjQsIGxlLCAtMSk7CisgIEdFVF9DSEVDSyAoJnJlYWRlciwgYywgMzIsIGxlLCAtMSk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfc2V0X3BvcyAoJnJlYWRlciwgMCkpOworICBHRVRfQ0hFQ0sgKCZyZWFkZXIsIGQsIDY0LCBsZSwgR19HSU5UNjRfQ09OU1RBTlQgKC0xKSk7CisgIEdFVF9DSEVDSyAoJnJlYWRlciwgZCwgNjQsIGxlLCBHX0dJTlQ2NF9DT05TVEFOVCAoLTEpKTsKKworICBHRVRfQ0hFQ0tfRkFJTDggKCZyZWFkZXIsIGEpOworICBHRVRfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgYiwgMTYsIGxlKTsKKyAgR0VUX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGMsIDI0LCBsZSk7CisgIEdFVF9DSEVDS19GQUlMICgmcmVhZGVyLCBjLCAzMiwgbGUpOworICBHRVRfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgZCwgNjQsIGxlKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3NldF9wb3MgKCZyZWFkZXIsIDApKTsKKworICBQRUVLX0NIRUNLOCAoJnJlYWRlciwgYSwgLTEpOworICBQRUVLX0NIRUNLICgmcmVhZGVyLCBiLCAxNiwgbGUsIC0xKTsKKyAgUEVFS19DSEVDSyAoJnJlYWRlciwgYywgMjQsIGxlLCAtMSk7CisgIFBFRUtfQ0hFQ0sgKCZyZWFkZXIsIGMsIDMyLCBsZSwgLTEpOworICBQRUVLX0NIRUNLICgmcmVhZGVyLCBkLCA2NCwgbGUsIEdfR0lOVDY0X0NPTlNUQU5UICgtMSkpOworCisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfc2V0X3BvcyAoJnJlYWRlciwgMTYpKTsKKyAgUEVFS19DSEVDS19GQUlMOCAoJnJlYWRlciwgYSk7CisgIFBFRUtfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgYiwgMTYsIGxlKTsKKyAgUEVFS19DSEVDS19GQUlMICgmcmVhZGVyLCBjLCAyNCwgbGUpOworICBQRUVLX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGMsIDMyLCBsZSk7CisgIFBFRUtfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgZCwgNjQsIGxlKTsKKworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2dldF9pbnRfYmUpCit7CisgIGd1aW50OCBkYXRhW10gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorICB9OworICBHc3RCeXRlUmVhZGVyIHJlYWRlciA9IEdTVF9CWVRFX1JFQURFUl9JTklUIChkYXRhLCAxNik7CisgIGdpbnQ4IGEgPSAwOworICBnaW50MTYgYiA9IDA7CisgIGdpbnQzMiBjID0gMDsKKyAgZ2ludDY0IGQgPSAwOworCisgIEdFVF9DSEVDSzggKCZyZWFkZXIsIGEsIC0xKTsKKyAgR0VUX0NIRUNLICgmcmVhZGVyLCBiLCAxNiwgYmUsIC0xKTsKKyAgR0VUX0NIRUNLICgmcmVhZGVyLCBjLCAyNCwgYmUsIC0xKTsKKyAgR0VUX0NIRUNLICgmcmVhZGVyLCBjLCAzMiwgYmUsIC0xKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9zZXRfcG9zICgmcmVhZGVyLCAwKSk7CisgIEdFVF9DSEVDSyAoJnJlYWRlciwgZCwgNjQsIGJlLCBHX0dJTlQ2NF9DT05TVEFOVCAoLTEpKTsKKyAgR0VUX0NIRUNLICgmcmVhZGVyLCBkLCA2NCwgYmUsIEdfR0lOVDY0X0NPTlNUQU5UICgtMSkpOworCisgIEdFVF9DSEVDS19GQUlMOCAoJnJlYWRlciwgYSk7CisgIEdFVF9DSEVDS19GQUlMICgmcmVhZGVyLCBiLCAxNiwgYmUpOworICBHRVRfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgYywgMjQsIGJlKTsKKyAgR0VUX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGMsIDMyLCBiZSk7CisgIEdFVF9DSEVDS19GQUlMICgmcmVhZGVyLCBkLCA2NCwgYmUpOworCisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfc2V0X3BvcyAoJnJlYWRlciwgMCkpOworCisgIFBFRUtfQ0hFQ0s4ICgmcmVhZGVyLCBhLCAtMSk7CisgIFBFRUtfQ0hFQ0sgKCZyZWFkZXIsIGIsIDE2LCBiZSwgLTEpOworICBQRUVLX0NIRUNLICgmcmVhZGVyLCBjLCAyNCwgYmUsIC0xKTsKKyAgUEVFS19DSEVDSyAoJnJlYWRlciwgYywgMzIsIGJlLCAtMSk7CisgIFBFRUtfQ0hFQ0sgKCZyZWFkZXIsIGQsIDY0LCBiZSwgR19HSU5UNjRfQ09OU1RBTlQgKC0xKSk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9zZXRfcG9zICgmcmVhZGVyLCAxNikpOworICBQRUVLX0NIRUNLX0ZBSUw4ICgmcmVhZGVyLCBhKTsKKyAgUEVFS19DSEVDS19GQUlMICgmcmVhZGVyLCBiLCAxNiwgYmUpOworICBQRUVLX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGMsIDI0LCBiZSk7CisgIFBFRUtfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgYywgMzIsIGJlKTsKKyAgUEVFS19DSEVDS19GQUlMICgmcmVhZGVyLCBkLCA2NCwgYmUpOworCit9CisKK0dTVF9FTkRfVEVTVDsKKworI3VuZGVmIEdFVF9DSEVDSzgKKyN1bmRlZiBHRVRfQ0hFQ0sKKyN1bmRlZiBQRUVLX0NIRUNLOAorI3VuZGVmIFBFRUtfQ0hFQ0sKKyN1bmRlZiBHRVRfQ0hFQ0tfRkFJTDgKKyN1bmRlZiBHRVRfQ0hFQ0tfRkFJTAorI3VuZGVmIFBFRUtfQ0hFQ0tfRkFJTDgKKyN1bmRlZiBQRUVLX0NIRUNLX0ZBSUwKKworI2RlZmluZSBHRVRfQ0hFQ0socmVhZGVyLCBkZXN0LCBiaXRzLCBlbmRpYW5uZXNzLCB2YWwpIHsgXAorICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdCMjYml0cyMjXyMjZW5kaWFubmVzcyAocmVhZGVyLCAmZGVzdCkpOyBcCisgIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCAoZGVzdCwgdmFsKTsgXAorfQorCisjZGVmaW5lIEdFVF9DSEVDS19GQUlMKHJlYWRlciwgZGVzdCwgYml0cywgZW5kaWFubmVzcykgeyBcCisgIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQjI2JpdHMjI18jI2VuZGlhbm5lc3MgKHJlYWRlciwgJmRlc3QpKTsgXAorfQorCisjZGVmaW5lIFBFRUtfQ0hFQ0socmVhZGVyLCBkZXN0LCBiaXRzLCBlbmRpYW5uZXNzLCB2YWwpIHsgXAorICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQjI2JpdHMjI18jI2VuZGlhbm5lc3MgKHJlYWRlciwgJmRlc3QpKTsgXAorICBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQgKGRlc3QsIHZhbCk7IFwKK30KKworI2RlZmluZSBQRUVLX0NIRUNLX0ZBSUwocmVhZGVyLCBkZXN0LCBiaXRzLCBlbmRpYW5uZXNzKSB7IFwKKyAgZmFpbF9pZiAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQjI2JpdHMjI18jI2VuZGlhbm5lc3MgKHJlYWRlciwgJmRlc3QpKTsgXAorfQorCitHU1RfU1RBUlRfVEVTVCAodGVzdF9nZXRfZmxvYXRfbGUpCit7CisgIGd1aW50OCBkYXRhW10gPSB7CisgICAgMHgwMCwgMHgwMCwgMHg4MCwgMHgzZiwKKyAgICAweDAwLCAweDAwLCAweDgwLCAweGJmLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4M2YsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhiZiwKKyAgfTsKKyAgR3N0Qnl0ZVJlYWRlciByZWFkZXIgPSBHU1RfQllURV9SRUFERVJfSU5JVCAoZGF0YSwgMjQpOworICBnZmxvYXQgYSA9IDAuMDsKKyAgZ2RvdWJsZSBiID0gMC4wOworCisgIFBFRUtfQ0hFQ0sgKCZyZWFkZXIsIGEsIDMyLCBsZSwgMS4wKTsKKyAgR0VUX0NIRUNLICgmcmVhZGVyLCBhLCAzMiwgbGUsIDEuMCk7CisgIEdFVF9DSEVDSyAoJnJlYWRlciwgYSwgMzIsIGxlLCAtMS4wKTsKKyAgUEVFS19DSEVDSyAoJnJlYWRlciwgYiwgNjQsIGxlLCAxLjApOworICBHRVRfQ0hFQ0sgKCZyZWFkZXIsIGIsIDY0LCBsZSwgMS4wKTsKKyAgR0VUX0NIRUNLICgmcmVhZGVyLCBiLCA2NCwgbGUsIC0xLjApOworICBHRVRfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgYSwgMzIsIGxlKTsKKyAgR0VUX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGIsIDY0LCBsZSk7CisgIFBFRUtfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgYSwgMzIsIGxlKTsKKyAgUEVFS19DSEVDS19GQUlMICgmcmVhZGVyLCBiLCA2NCwgbGUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2dldF9mbG9hdF9iZSkKK3sKKyAgZ3VpbnQ4IGRhdGFbXSA9IHsKKyAgICAweDNmLCAweDgwLCAweDAwLCAweDAwLAorICAgIDB4YmYsIDB4ODAsIDB4MDAsIDB4MDAsCisgICAgMHgzZiwgMHhmMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweGJmLCAweGYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCisgIH07CisgIEdzdEJ5dGVSZWFkZXIgcmVhZGVyID0gR1NUX0JZVEVfUkVBREVSX0lOSVQgKGRhdGEsIDI0KTsKKyAgZ2Zsb2F0IGEgPSAwLjA7CisgIGdkb3VibGUgYiA9IDAuMDsKKworICBQRUVLX0NIRUNLICgmcmVhZGVyLCBhLCAzMiwgYmUsIDEuMCk7CisgIEdFVF9DSEVDSyAoJnJlYWRlciwgYSwgMzIsIGJlLCAxLjApOworICBHRVRfQ0hFQ0sgKCZyZWFkZXIsIGEsIDMyLCBiZSwgLTEuMCk7CisgIFBFRUtfQ0hFQ0sgKCZyZWFkZXIsIGIsIDY0LCBiZSwgMS4wKTsKKyAgR0VUX0NIRUNLICgmcmVhZGVyLCBiLCA2NCwgYmUsIDEuMCk7CisgIEdFVF9DSEVDSyAoJnJlYWRlciwgYiwgNjQsIGJlLCAtMS4wKTsKKyAgR0VUX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGEsIDMyLCBiZSk7CisgIEdFVF9DSEVDS19GQUlMICgmcmVhZGVyLCBiLCA2NCwgYmUpOworICBQRUVLX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGEsIDMyLCBiZSk7CisgIFBFRUtfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgYiwgNjQsIGJlKTsKK30KKworR1NUX0VORF9URVNUOworCisjdW5kZWYgR0VUX0NIRUNLCisjdW5kZWYgUEVFS19DSEVDSworI3VuZGVmIEdFVF9DSEVDS19GQUlMCisjdW5kZWYgUEVFS19DSEVDS19GQUlMCisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3Bvc2l0aW9uX3RyYWNraW5nKQoreworICBndWludDggZGF0YVtdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYKKyAgfTsKKyAgR3N0Qnl0ZVJlYWRlciByZWFkZXIgPSBHU1RfQllURV9SRUFERVJfSU5JVCAoZGF0YSwgMTYpOworICBndWludDggYSA9IDA7CisKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfcmVhZGVyX2dldF9wb3MgKCZyZWFkZXIpLCAwKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKCZyZWFkZXIpLCAxNik7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDggKCZyZWFkZXIsICZhKSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3JlYWRlcl9nZXRfcG9zICgmcmVhZGVyKSwgMSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nICgmcmVhZGVyKSwgMTYgLSAxKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3NldF9wb3MgKCZyZWFkZXIsIDgpKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfcmVhZGVyX2dldF9wb3MgKCZyZWFkZXIpLCA4KTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKCZyZWFkZXIpLCAxNiAtIDgpOworCisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfc2tpcCAoJnJlYWRlciwgNCkpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3BvcyAoJnJlYWRlciksIDEyKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKCZyZWFkZXIpLCAxNiAtIDEyKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3NldF9wb3MgKCZyZWFkZXIsIDE2KSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3JlYWRlcl9nZXRfcG9zICgmcmVhZGVyKSwgMTYpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAoJnJlYWRlciksIDApOworCisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfc2tpcCAoJnJlYWRlciwgMCkpOworICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfc2tpcCAoJnJlYWRlciwgMSkpOworfQorCitHU1RfRU5EX1RFU1Q7CisKKyNkZWZpbmUgZG9fc2NhbihyLG0scCxvLHMseCkgXAorICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKHIsbSxwLG8scyksIHgpOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9zY2FuKQoreworICBHc3RCeXRlUmVhZGVyIHJlYWRlcjsKKyAgZ3VpbnQ4IGRhdGFbMjAwXTsKKyAgZ3VpbnQgaTsKKworICAvKiBmaWxsIGhhbGYgdGhlIGJ1ZmZlciB3aXRoIGEgcGF0dGVybiAqLworICBmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgZGF0YVtpXSA9IGk7CisKKyAgZ3N0X2J5dGVfcmVhZGVyX2luaXQgKCZyZWFkZXIsIGRhdGEsIDEwMCk7CisKKyAgLyogZmluZCBmaXJzdCBieXRlcyAqLworICBkb19zY2FuICgmcmVhZGVyLCAweGZmZmZmZmZmLCAweDAwMDEwMjAzLCAwLCAxMDAsIDApOworICBkb19zY2FuICgmcmVhZGVyLCAweGZmZmZmZmZmLCAweDAxMDIwMzA0LCAwLCAxMDAsIDEpOworICBkb19zY2FuICgmcmVhZGVyLCAweGZmZmZmZmZmLCAweDAxMDIwMzA0LCAxLCA5OSwgMSk7CisgIC8qIG9mZnNldCBpcyBwYXN0IHRoZSBwYXR0ZXJuIHN0YXJ0ICovCisgIGRvX3NjYW4gKCZyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4MDEwMjAzMDQsIDIsIDk4LCAtMSk7CisgIC8qIG5vdCBlbm91Z2ggYnl0ZXMgdG8gZmluZCB0aGUgcGF0dGVybiAqLworICBkb19zY2FuICgmcmVhZGVyLCAweGZmZmZmZmZmLCAweDAyMDMwNDA1LCAyLCAzLCAtMSk7CisgIGRvX3NjYW4gKCZyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4MDIwMzA0MDUsIDIsIDQsIDIpOworICAvKiBzaXplIGRvZXMgbm90IGluY2x1ZGUgdGhlIGxhc3Qgc2Nhbm5lZCBieXRlICovCisgIGRvX3NjYW4gKCZyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4NDA0MTQyNDMsIDAsIDB4NDEsIC0xKTsKKyAgZG9fc2NhbiAoJnJlYWRlciwgMHhmZmZmZmZmZiwgMHg0MDQxNDI0MywgMCwgMHg0MywgLTEpOworICBkb19zY2FuICgmcmVhZGVyLCAweGZmZmZmZmZmLCAweDQwNDE0MjQzLCAwLCAweDQ0LCAweDQwKTsKKyAgLyogcGFzdCB0aGUgc3RhcnQgKi8KKyAgZG9fc2NhbiAoJnJlYWRlciwgMHhmZmZmZmZmZiwgMHg0MDQxNDI0MywgNjUsIDEwLCAtMSk7CisgIGRvX3NjYW4gKCZyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4NDA0MTQyNDMsIDY0LCA1LCA2NCk7CisgIGRvX3NjYW4gKCZyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4NjA2MTYyNjMsIDY1LCAzNSwgMHg2MCk7CisgIGRvX3NjYW4gKCZyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4NjA2MTYyNjMsIDB4NjAsIDQsIDB4NjApOworICAvKiBwYXN0IHRoZSBzdGFydCAqLworICBkb19zY2FuICgmcmVhZGVyLCAweGZmZmZmZmZmLCAweDYwNjE2MjYzLCAweDYxLCAzLCAtMSk7CisgIGRvX3NjYW4gKCZyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4NjA2MTYyNjMsIDk5LCAxLCAtMSk7CisKKyAgLyogYWRkIG1vcmUgZGF0YSB0byB0aGUgYnVmZmVyICovCisgIGZvciAoaSA9IDEwMDsgaSA8IDIwMDsgaSsrKQorICAgIGRhdGFbaV0gPSBpOworICBnc3RfYnl0ZV9yZWFkZXJfaW5pdCAoJnJlYWRlciwgZGF0YSwgMjAwKTsKKworICAvKiBwYXN0IHRoZSBzdGFydCAqLworICBkb19zY2FuICgmcmVhZGVyLCAweGZmZmZmZmZmLCAweDYwNjE2MjYzLCAweDYxLCA2LCAtMSk7CisgIC8qIHRoaXMgc2hvdWxkIHdvcmsgKi8KKyAgZG9fc2NhbiAoJnJlYWRlciwgMHhmZmZmZmZmZiwgMHg2MTYyNjM2NCwgMHg2MSwgNCwgMHg2MSk7CisgIC8qIG5vdCBlbm91Z2ggZGF0YSAqLworICBkb19zY2FuICgmcmVhZGVyLCAweGZmZmZmZmZmLCAweDYyNjM2NDY1LCAweDYxLCA0LCAtMSk7CisgIGRvX3NjYW4gKCZyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4NjI2MzY0NjUsIDB4NjEsIDUsIDB4NjIpOworICBkb19zY2FuICgmcmVhZGVyLCAweGZmZmZmZmZmLCAweDYyNjM2NDY1LCAwLCAxMjAsIDB4NjIpOworCisgIC8qIGJvcmRlciBjb25kaXRpb25zICovCisgIGRvX3NjYW4gKCZyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4NjI2MzY0NjUsIDAsIDIwMCwgMHg2Mik7CisgIGRvX3NjYW4gKCZyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4NjM2NDY1NjYsIDAsIDIwMCwgMHg2Myk7CisgIC8qIHdlIGNvbXBsZXRlbHkgc2VhcmNoZWQgdGhlIGZpcnN0IGxpc3QgKi8KKyAgZG9fc2NhbiAoJnJlYWRlciwgMHhmZmZmZmZmZiwgMHg2NDY1NjY2NywgMCwgMjAwLCAweDY0KTsKKyAgLyogc2tpcCBmaXJzdCBidWZmZXIgKi8KKyAgZG9fc2NhbiAoJnJlYWRlciwgMHhmZmZmZmZmZiwgMHg2NDY1NjY2NywgMHg2NCwgMTAwLCAweDY0KTsKKyAgLyogcGFzdCB0aGUgc3RhcnQgKi8KKyAgZG9fc2NhbiAoJnJlYWRlciwgMHhmZmZmZmZmZiwgMHg2NDY1NjY2NywgMHg2NSwgMTAsIC0xKTsKKyAgLyogbm90IGVub3VnaCBkYXRhIHRvIHNjYW4gKi8KKyAgZG9fc2NhbiAoJnJlYWRlciwgMHhmZmZmZmZmZiwgMHg2NDY1NjY2NywgMHg2MywgNCwgLTEpOworICBkb19zY2FuICgmcmVhZGVyLCAweGZmZmZmZmZmLCAweDY0NjU2NjY3LCAweDYzLCA1LCAweDY0KTsKKyAgZG9fc2NhbiAoJnJlYWRlciwgMHhmZmZmZmZmZiwgMHhjNGM1YzZjNywgMCwgMTk5LCAtMSk7CisgIGRvX3NjYW4gKCZyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4YzRjNWM2YzcsIDB4NjIsIDEwMiwgMHhjNCk7CisgIC8qIGRpZmZlcmVudCBtYXNrcyAqLworICBkb19zY2FuICgmcmVhZGVyLCAweDAwZmZmZmZmLCAweDAwNjU2NjY3LCAweDY0LCAxMDAsIDB4NjQpOworICBkb19zY2FuICgmcmVhZGVyLCAweDAwMDAwMGZmLCAweDAwMDAwMDAwLCAwLCAxMDAsIC0xKTsKKyAgZG9fc2NhbiAoJnJlYWRlciwgMHgwMDAwMDBmZiwgMHgwMDAwMDAwMywgMCwgMTAwLCAwKTsKKyAgZG9fc2NhbiAoJnJlYWRlciwgMHgwMDAwMDBmZiwgMHgwMDAwMDA2MSwgMHg2MSwgMTAwLCAtMSk7CisgIGRvX3NjYW4gKCZyZWFkZXIsIDB4ZmYwMDAwMDAsIDB4NjEwMDAwMDAsIDAsIDB4NjIsIC0xKTsKKyAgLyogZG9lcyBub3QgZXZlbiBleGlzdCAqLworICBkb19zY2FuICgmcmVhZGVyLCAweDAwZmZmZmZmLCAweGZmZmZmZmZmLCAweDY1LCA5OSwgLTEpOworCisgIC8qIGZsdXNoIHNvbWUgYnl0ZXMgKi8KKyAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9za2lwICgmcmVhZGVyLCAweDIwKSk7CisKKyAgZG9fc2NhbiAoJnJlYWRlciwgMHhmZmZmZmZmZiwgMHgyMDIxMjIyMywgMCwgMTAwLCAwKTsKKyAgZG9fc2NhbiAoJnJlYWRlciwgMHhmZmZmZmZmZiwgMHgyMDIxMjIyMywgMCwgNCwgMCk7CisgIGRvX3NjYW4gKCZyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4YzRjNWM2YzcsIDB4NjIsIDcwLCAweGE0KTsKKyAgZG9fc2NhbiAoJnJlYWRlciwgMHhmZmZmZmZmZiwgMHhjNGM1YzZjNywgMCwgMTY4LCAweGE0KTsKKworICBkb19zY2FuICgmcmVhZGVyLCAweGZmZmZmZmZmLCAweGM0YzVjNmM3LCAxNjQsIDQsIDB4YTQpOworICBkb19zY2FuICgmcmVhZGVyLCAweGZmZmZmZmZmLCAweGM0YzVjNmM3LCAweDQ0LCAxMDAsIDB4YTQpOworCisgIC8qIG5vdCBlbm91Z2ggYnl0ZXMgKi8KKyAgZG9fc2NhbiAoJnJlYWRlciwgMHhmZmZmZmZmZiwgMHhjNGM1YzZjNywgMHg0NCwgOTksIC0xKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9zdHJpbmdfZnVuY3MpCit7CisgIEdzdEJ5dGVSZWFkZXIgcmVhZGVyLCBiYWNrdXA7CisgIGNvbnN0IGdjaGFyICpzODsKKyAgZ3VpbnQzMiAqYzMyOworICBndWludDE2ICpjMTY7CisgIGdjaGFyICpjODsKKyAgZ3VpbnQ4IGRhdGFbMjAwXSwgKmQgPSAwOworICBndWludCBpOworCisgIC8qIGZpbGwgaGFsZiB0aGUgYnVmZmVyIHdpdGggYSBwYXR0ZXJuICovCisgIGZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICBkYXRhW2ldID0gaSArIDE7CisKKyAgZ3N0X2J5dGVfcmVhZGVyX2luaXQgKCZyZWFkZXIsIGRhdGEsIDEwMCk7CisKKyAgLyogbm8gTlVMIHRlcm1pbmF0b3IsIHNvIHRoZXNlIHNob3VsZCBhbGwgZmFpbCAqLworICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3N0cmluZyAoJnJlYWRlciwgJnM4KSk7CisgIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9nZXRfc3RyaW5nX3V0ZjggKCZyZWFkZXIsICZzOCkpOworICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZyAoJnJlYWRlciwgJmM4KSk7CisgIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjggKCZyZWFkZXIsICZjOCkpOworICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmcgKCZyZWFkZXIpKTsKKyAgZmFpbF9pZiAoZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjggKCZyZWFkZXIpKTsKKyAgZmFpbF9pZiAoZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjE2ICgmcmVhZGVyKSk7CisgIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGYzMiAoJnJlYWRlcikpOworICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfcGVla19zdHJpbmcgKCZyZWFkZXIsICZzOCkpOworICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfcGVla19zdHJpbmdfdXRmOCAoJnJlYWRlciwgJnM4KSk7CisgIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjE2ICgmcmVhZGVyLCAmYzE2KSk7CisgIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjMyICgmcmVhZGVyLCAmYzMyKSk7CisKKyAgLyogbGV0J3MgYWRkIGEgc2luZ2xlIE5VTCB0ZXJtaW5hdG9yICovCisgIGRhdGFbODBdID0gJ1wwJzsKKyAgYmFja3VwID0gcmVhZGVyOworICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmMzIgKCZyZWFkZXIpKTsKKyAgZmFpbF9pZiAoZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjE2ICgmcmVhZGVyKSk7CisgIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjE2ICgmcmVhZGVyLCAmYzE2KSk7CisgIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjMyICgmcmVhZGVyLCAmYzMyKSk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmcgKCZyZWFkZXIpKTsKKyAgcmVhZGVyID0gYmFja3VwOworICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjggKCZyZWFkZXIpKTsKKyAgcmVhZGVyID0gYmFja3VwOworICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3RyaW5nICgmcmVhZGVyLCAmczgpKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9wZWVrX3N0cmluZ191dGY4ICgmcmVhZGVyLCAmczgpKTsKKyAgZmFpbF9pZiAoZ3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmdfdXRmMTYgKCZyZWFkZXIsICZjMTYpKTsKKyAgZmFpbF9pZiAoZ3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmdfdXRmMzIgKCZyZWFkZXIsICZjMzIpKTsKKworICAvKiBsZXQncyBhZGQgYW5vdGhlciBOVUwgdGVybWluYXRvciAqLworICBkYXRhWzgxXSA9ICdcMCc7CisgIHJlYWRlciA9IGJhY2t1cDsKKyAgZmFpbF9pZiAoZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjMyICgmcmVhZGVyKSk7CisgIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjMyICgmcmVhZGVyLCAmYzMyKSk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmMTYgKCZyZWFkZXIpKTsKKyAgcmVhZGVyID0gYmFja3VwOworICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmdfdXRmMTYgKCZyZWFkZXIsICZjMTYpKTsKKyAgZ19mcmVlIChjMTYpOworICByZWFkZXIgPSBiYWNrdXA7CisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmcgKCZyZWFkZXIpKTsKKyAgcmVhZGVyID0gYmFja3VwOworICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjggKCZyZWFkZXIpKTsKKyAgcmVhZGVyID0gYmFja3VwOworICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3RyaW5nICgmcmVhZGVyLCAmczgpKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9wZWVrX3N0cmluZ191dGY4ICgmcmVhZGVyLCAmczgpKTsKKyAgZmFpbF9pZiAoZ3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmdfdXRmMzIgKCZyZWFkZXIsICZjMzIpKTsKKworICAvKiB0d28gbW9yZSBOVUwgdGVybWluYXRvcnMgKi8KKyAgZGF0YVs3OV0gPSAnXDAnOworICBkYXRhWzgyXSA9ICdcMCc7CisgIHJlYWRlciA9IGJhY2t1cDsKKyAgLyogd2UncmUgYXQgcG9zLiA4MCBub3csIHNvIGhhdmUgb25seSAzIE5VTCB0ZXJtaW5hdG9ycyBpbiBmcm9udCBvZiB1cyAqLworICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmMzIgKCZyZWFkZXIpKTsKKyAgLyogbGV0J3MgcmV3aW5kICovCisgIGdzdF9ieXRlX3JlYWRlcl9pbml0ICgmcmVhZGVyLCBkYXRhLCAxMDApOworICBiYWNrdXAgPSByZWFkZXI7CisgIC8qIG9vcHMsIDc5IGlzIG5vdCBkaXZpZGFibGUgYnkgNCwgc28gbm90IGFsaWduZWQsIHNvIHNob3VsZCBmYWlsIGFzIHdlbGwhICovCisgIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGYzMiAoJnJlYWRlcikpOworICAvKiBsZXQncyB0cnkgdGhhdCBhZ2FpbiAqLworICBkYXRhWzgzXSA9ICdcMCc7CisgIGdzdF9ieXRlX3JlYWRlcl9pbml0ICgmcmVhZGVyLCBkYXRhLCAxMDApOworICBiYWNrdXAgPSByZWFkZXI7CisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmMTYgKCZyZWFkZXIpKTsKKyAgcmVhZGVyID0gYmFja3VwOworICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nICgmcmVhZGVyKSk7CisgIHJlYWRlciA9IGJhY2t1cDsKKyAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGY4ICgmcmVhZGVyKSk7CisgIHJlYWRlciA9IGJhY2t1cDsKKyAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9wZWVrX3N0cmluZyAoJnJlYWRlciwgJnM4KSk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfcGVla19zdHJpbmdfdXRmOCAoJnJlYWRlciwgJnM4KSk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGYxNiAoJnJlYWRlciwgJmMxNikpOworICBnX2ZyZWUgKGMxNik7CisgIHJlYWRlciA9IGJhY2t1cDsKKyAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjMyICgmcmVhZGVyLCAmYzMyKSk7CisgIGdfZnJlZSAoYzMyKTsKKworICAvKiBhbmQgYWdhaW4gZnJvbSB0aGUgc3RhcnQgKi8KKyAgZ3N0X2J5dGVfcmVhZGVyX2luaXQgKCZyZWFkZXIsIGRhdGEsIDEwMCk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmMTYgKCZyZWFkZXIpKTsKKyAgZmFpbF9pZiAoZ3N0X2J5dGVfcmVhZGVyX2R1cF9kYXRhICgmcmVhZGVyLCAyMDAsICZkKSk7CisgIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9kdXBfZGF0YSAoJnJlYWRlciwgMTAwLCAmZCkpOworICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfZHVwX2RhdGEgKCZyZWFkZXIsIDIwLCAmZCkpOworICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX2R1cF9kYXRhICgmcmVhZGVyLCAxMCwgJmQpKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZFswXSwgMCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGRbMV0sIDApOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChkWzJdLCA4NSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGRbM10sIDg2KTsKKyAgZ19mcmVlIChkKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9kdXBfc3RyaW5nKQoreworICBjb25zdCBnY2hhciBtb3JlZGF0YVtdID0geyAweDk5LCAweDEwLCAnZicsICcwJywgJzAnLCAnIScsICdcMCcsIDB4ZmYgfTsKKyAgR3N0Qnl0ZVJlYWRlciByZWFkZXI7CisgIGd1aW50MTYgbnVtID0gMDsKKyAgZ3VpbnQ4IHggPSAwOworICBnY2hhciAqczsKKworICBnc3RfYnl0ZV9yZWFkZXJfaW5pdCAoJnJlYWRlciwgKGd1aW50OCAqKSBtb3JlZGF0YSwgc2l6ZW9mIChtb3JlZGF0YSkpOworICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmUgKCZyZWFkZXIsICZudW0pKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobnVtLCAweDk5MTApOworICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmcgKCZyZWFkZXIsICZzKSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHMsICJmMDAhIik7CisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4ICgmcmVhZGVyLCAmeCkpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICh4LCAweGZmKTsKKyAgZ19mcmVlIChzKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgU3VpdGUgKgorZ3N0X2J5dGVfcmVhZGVyX3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdEJ5dGVSZWFkZXIiKTsKKyAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOworCisgIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOworCisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9pbml0aWFsaXphdGlvbik7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9nZXRfdWludF9sZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9nZXRfdWludF9iZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9nZXRfaW50X2xlKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2dldF9pbnRfYmUpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2V0X2Zsb2F0X2xlKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2dldF9mbG9hdF9iZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wb3NpdGlvbl90cmFja2luZyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zY2FuKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3N0cmluZ19mdW5jcyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9kdXBfc3RyaW5nKTsKKworICByZXR1cm4gczsKK30KKworCitHU1RfQ0hFQ0tfTUFJTiAoZ3N0X2J5dGVfcmVhZGVyKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2xpYnMvYnl0ZXdyaXRlci5jIGIvdGVzdHMvY2hlY2svbGlicy9ieXRld3JpdGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFiNGE1ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2xpYnMvYnl0ZXdyaXRlci5jCkBAIC0wLDAgKzEsMjU4IEBACisvKiBHU3RyZWFtZXIKKyAqCisgKiB1bml0IHRlc3QgZm9yIEdzdEJ5dGVXcml0ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDwyMDA5PiBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5oPgorCitHU1RfU1RBUlRfVEVTVCAodGVzdF9pbml0aWFsaXphdGlvbikKK3sKKyAgR3N0Qnl0ZVdyaXRlciB3cml0ZXIsICp3cml0ZXIyOworICBzdGF0aWMgZ3VpbnQ4IHNkYXRhW10gPSB7IDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDkgfTsKKyAgZ3VpbnQ4ICpkYXRhLCAqdG1wOworCisgIGdzdF9ieXRlX3dyaXRlcl9pbml0X3dpdGhfc2l6ZSAoJndyaXRlciwgMjQsIEZBTFNFKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfd3JpdGVyX2dldF9wb3MgKCZ3cml0ZXIpLCAwKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfd3JpdGVyX2dldF9zaXplICgmd3JpdGVyKSwgMCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3dyaXRlcl9nZXRfcmVtYWluaW5nICgmd3JpdGVyKSwgLTEpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAoR1NUX0JZVEVfUkVBREVSCisgICAgICAgICAgKCZ3cml0ZXIpKSwgMCk7CisgIGdzdF9ieXRlX3dyaXRlcl9yZXNldCAoJndyaXRlcik7CisKKyAgZGF0YSA9IGdfbWVtZHVwIChzZGF0YSwgc2l6ZW9mIChzZGF0YSkpOworICBnc3RfYnl0ZV93cml0ZXJfaW5pdF93aXRoX2RhdGEgKCZ3cml0ZXIsIGRhdGEsIHNpemVvZiAoc2RhdGEpLCBGQUxTRSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3dyaXRlcl9nZXRfcG9zICgmd3JpdGVyKSwgMCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3dyaXRlcl9nZXRfc2l6ZSAoJndyaXRlciksIDApOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV93cml0ZXJfZ2V0X3JlbWFpbmluZyAoJndyaXRlciksCisgICAgICBzaXplb2YgKHNkYXRhKSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nIChHU1RfQllURV9SRUFERVIKKyAgICAgICAgICAoJndyaXRlcikpLCAwKQorICAgICAgdG1wID0gZ3N0X2J5dGVfd3JpdGVyX3Jlc2V0X2FuZF9nZXRfZGF0YSAoJndyaXRlcik7CisgIGZhaWxfaWYgKHRtcCA9PSBkYXRhKTsKKyAgZ19mcmVlICh0bXApOworICBnX2ZyZWUgKGRhdGEpOworICBkYXRhID0gdG1wID0gTlVMTDsKKworICBkYXRhID0gZ19tZW1kdXAgKHNkYXRhLCBzaXplb2YgKHNkYXRhKSk7CisgIGdzdF9ieXRlX3dyaXRlcl9pbml0X3dpdGhfZGF0YSAoJndyaXRlciwgZGF0YSwgc2l6ZW9mIChzZGF0YSksIFRSVUUpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV93cml0ZXJfZ2V0X3BvcyAoJndyaXRlciksIDApOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV93cml0ZXJfZ2V0X3NpemUgKCZ3cml0ZXIpLCBzaXplb2YgKHNkYXRhKSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3dyaXRlcl9nZXRfcmVtYWluaW5nICgmd3JpdGVyKSwKKyAgICAgIHNpemVvZiAoc2RhdGEpKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKEdTVF9CWVRFX1JFQURFUgorICAgICAgICAgICgmd3JpdGVyKSksIHNpemVvZiAoc2RhdGEpKTsKKyAgdG1wID0gZ3N0X2J5dGVfd3JpdGVyX3Jlc2V0X2FuZF9nZXRfZGF0YSAoJndyaXRlcik7CisgIGZhaWxfdW5sZXNzICh0bXAgIT0gZGF0YSk7CisgIGdfZnJlZSAodG1wKTsKKyAgZ19mcmVlIChkYXRhKTsKKyAgZGF0YSA9IHRtcCA9IE5VTEw7CisKKyAgd3JpdGVyMiA9IGdzdF9ieXRlX3dyaXRlcl9uZXdfd2l0aF9zaXplICgyNCwgRkFMU0UpOworICBkYXRhID0gZ3N0X2J5dGVfd3JpdGVyX2ZyZWVfYW5kX2dldF9kYXRhICh3cml0ZXIyKTsKKyAgZmFpbF91bmxlc3MgKGRhdGEgIT0gTlVMTCk7CisgIGdfZnJlZSAoZGF0YSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfd3JpdGVfZml4ZWQpCit7CisgIEdzdEJ5dGVXcml0ZXIgd3JpdGVyOworICBndWludDY0IGVuZF9kYXRhID0gR19HVUlOVDY0X0NPTlNUQU5UICgweGZmMzQ1Njc4OTBhYmNkZWYpOworICBndWludDggKmRhdGE7CisgIGd1aW50OCBiID0gMDsKKyAgZ3VpbnQ2NCBsID0gMDsKKworICBlbmRfZGF0YSA9IEdVSU5UNjRfVE9fQkUgKGVuZF9kYXRhKTsKKworICBnc3RfYnl0ZV93cml0ZXJfaW5pdF93aXRoX3NpemUgKCZ3cml0ZXIsIDgsIFRSVUUpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV93cml0ZXJfZ2V0X3JlbWFpbmluZyAoJndyaXRlciksIDgpOworCisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4ICgmd3JpdGVyLCAweDEyKSk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9iZSAoJndyaXRlciwgMHgzNDU2KSk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9sZSAoJndyaXRlciwgMHg5MDc4KSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3dyaXRlcl9nZXRfcG9zICgmd3JpdGVyKSwgNSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3dyaXRlcl9nZXRfc2l6ZSAoJndyaXRlciksIDUpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV93cml0ZXJfZ2V0X3JlbWFpbmluZyAoJndyaXRlciksIDggLSA1KTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKEdTVF9CWVRFX1JFQURFUgorICAgICAgICAgICgmd3JpdGVyKSksIDApOworICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4IChHU1RfQllURV9SRUFERVIgKCZ3cml0ZXIpLCAmYikpOworICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfYmUgKCZ3cml0ZXIsIDB4YWJjZGVmKSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3dyaXRlcl9nZXRfcG9zICgmd3JpdGVyKSwgOCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3dyaXRlcl9nZXRfc2l6ZSAoJndyaXRlciksIDgpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV93cml0ZXJfZ2V0X3JlbWFpbmluZyAoJndyaXRlciksIDggLSA4KTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKEdTVF9CWVRFX1JFQURFUgorICAgICAgICAgICgmd3JpdGVyKSksIDApOworICBmYWlsX2lmIChnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4ICgmd3JpdGVyLCAweDEyKSk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV93cml0ZXJfc2V0X3BvcyAoJndyaXRlciwgMCkpOworICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2JlIChHU1RfQllURV9SRUFERVIgKCZ3cml0ZXIpLCAmbCkpOworICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChsLCBHX0dVSU5UNjRfQ09OU1RBTlQgKDB4MTIzNDU2Nzg5MGFiY2RlZikpOworICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50OCAoJndyaXRlciwgMHhmZikpOworICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfd3JpdGVyX3NldF9wb3MgKCZ3cml0ZXIsIDApKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2JlIChHU1RfQllURV9SRUFERVIgKCZ3cml0ZXIpLCAmbCkpOworICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChsLCBHX0dVSU5UNjRfQ09OU1RBTlQgKDB4ZmYzNDU2Nzg5MGFiY2RlZikpOworICBmYWlsX2lmIChnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9iZSAoJndyaXRlciwKKyAgICAgICAgICBHX0dVSU5UNjRfQ09OU1RBTlQgKDB4MTIzNDU2Nzg5MGFiY2RlZikpKTsKKworICBkYXRhID0gZ3N0X2J5dGVfd3JpdGVyX3Jlc2V0X2FuZF9nZXRfZGF0YSAoJndyaXRlcik7CisgIGZhaWxfdW5sZXNzIChkYXRhICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAobWVtY21wICgmZW5kX2RhdGEsIGRhdGEsIDgpID09IDApOworICBnX2ZyZWUgKGRhdGEpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3dyaXRlX25vbl9maXhlZCkKK3sKKyAgR3N0Qnl0ZVdyaXRlciB3cml0ZXI7CisgIGd1aW50NjQgZW5kX2RhdGEgPSBHX0dVSU5UNjRfQ09OU1RBTlQgKDB4ZmYzNDU2Nzg5MGFiY2RlZik7CisgIGd1aW50OCAqZGF0YTsKKyAgZ3VpbnQ2NCBsID0gMDsKKworICBlbmRfZGF0YSA9IEdVSU5UNjRfVE9fQkUgKGVuZF9kYXRhKTsKKworICBnc3RfYnl0ZV93cml0ZXJfaW5pdF93aXRoX3NpemUgKCZ3cml0ZXIsIDYsIEZBTFNFKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfd3JpdGVyX2dldF9yZW1haW5pbmcgKCZ3cml0ZXIpLCAtMSk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDggKCZ3cml0ZXIsIDB4MTIpKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2JlICgmd3JpdGVyLCAweDM0NTYpKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2xlICgmd3JpdGVyLCAweDkwNzgpKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfd3JpdGVyX2dldF9wb3MgKCZ3cml0ZXIpLCA1KTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfd3JpdGVyX2dldF9zaXplICgmd3JpdGVyKSwgNSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3dyaXRlcl9nZXRfcmVtYWluaW5nICgmd3JpdGVyKSwgLTEpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAoR1NUX0JZVEVfUkVBREVSCisgICAgICAgICAgKCZ3cml0ZXIpKSwgMCk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9iZSAoJndyaXRlciwgMHhhYmNkZWYpKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfd3JpdGVyX2dldF9wb3MgKCZ3cml0ZXIpLCA4KTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfd3JpdGVyX2dldF9zaXplICgmd3JpdGVyKSwgOCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3dyaXRlcl9nZXRfcmVtYWluaW5nICgmd3JpdGVyKSwgLTEpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAoR1NUX0JZVEVfUkVBREVSCisgICAgICAgICAgKCZ3cml0ZXIpKSwgMCk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV93cml0ZXJfc2V0X3BvcyAoJndyaXRlciwgMCkpOworICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2JlIChHU1RfQllURV9SRUFERVIgKCZ3cml0ZXIpLCAmbCkpOworICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChsLCBHX0dVSU5UNjRfQ09OU1RBTlQgKDB4MTIzNDU2Nzg5MGFiY2RlZikpOworICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50OCAoJndyaXRlciwgMHhmZikpOworICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfd3JpdGVyX3NldF9wb3MgKCZ3cml0ZXIsIDApKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2JlIChHU1RfQllURV9SRUFERVIgKCZ3cml0ZXIpLCAmbCkpOworICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChsLCBHX0dVSU5UNjRfQ09OU1RBTlQgKDB4ZmYzNDU2Nzg5MGFiY2RlZikpOworICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfd3JpdGVyX3NldF9wb3MgKCZ3cml0ZXIsIDgpKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2JlICgmd3JpdGVyLAorICAgICAgICAgIEdfR1VJTlQ2NF9DT05TVEFOVCAoMHgxMjM0NTY3ODkwYWJjZGVmKSkpOworCisgIGRhdGEgPSBnc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9kYXRhICgmd3JpdGVyKTsKKyAgZmFpbF91bmxlc3MgKGRhdGEgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChtZW1jbXAgKCZlbmRfZGF0YSwgZGF0YSwgOCkgPT0gMCk7CisgIGVuZF9kYXRhID0gR1VJTlQ2NF9UT19CRSAoR19HVUlOVDY0X0NPTlNUQU5UICgweDEyMzQ1Njc4OTBhYmNkZWYpKTsKKyAgZmFpbF91bmxlc3MgKG1lbWNtcCAoJmVuZF9kYXRhLCBkYXRhICsgOCwgOCkgPT0gMCk7CisgIGdfZnJlZSAoZGF0YSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfZnJvbV9kYXRhKQoreworICBHc3RCeXRlV3JpdGVyIHdyaXRlcjsKKyAgZ3VpbnQ4IGRhdGFbXSA9IHsgMHgxMiwgMHgzNCwgMHg1NiwgMHg3OCwKKyAgICAweDkwLCAweGFiLCAweGNkLCAweGVmCisgIH07CisgIGd1aW50OCAqZGF0YTI7CisKKyAgZ3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9kYXRhICgmd3JpdGVyLCBkYXRhLCBzaXplb2YgKGRhdGEpLCBUUlVFKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfd3JpdGVyX2dldF9yZW1haW5pbmcgKCZ3cml0ZXIpLCA4KTsKKyAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDggKCZ3cml0ZXIsIDB4ZmYpKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZGF0YVswXSwgMHhmZik7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3dyaXRlcl9nZXRfcmVtYWluaW5nICgmd3JpdGVyKSwgNyk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3dyaXRlcl9nZXRfcG9zICgmd3JpdGVyKSwgMSk7CisgIGZhaWxfaWYgKGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2JlICgmd3JpdGVyLAorICAgICAgICAgIEdfR1VJTlQ2NF9DT05TVEFOVCAoMHgxMjM0NTY3ODkwYWJjZGVmKSkpOworICBkYXRhMiA9IGdzdF9ieXRlX3dyaXRlcl9yZXNldF9hbmRfZ2V0X2RhdGEgKCZ3cml0ZXIpOworICBmYWlsX3VubGVzcyAoZGF0YTIgIT0gTlVMTCk7CisgIGZhaWxfaWYgKGRhdGEyID09IGRhdGEpOworICBmYWlsX3VubGVzcyAobWVtY21wIChkYXRhLCBkYXRhMiwgOCkgPT0gMCk7CisgIGdfZnJlZSAoZGF0YTIpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3B1dF9kYXRhX3N0cmluZ3MpCit7CisgIEdzdEJ5dGVXcml0ZXIgd3JpdGVyOworICBndWludDggZGF0YVtdID0geyAweDEyLCAweDM0LCAweDU2LCAweDc4LAorICAgIDB4OTAsIDB4YWIsIDB4Y2QsIDB4ZWYKKyAgfTsKKyAgZ3VpbnQ4ICpkYXRhMjsKKworICBnc3RfYnl0ZV93cml0ZXJfaW5pdCAoJndyaXRlcik7CisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGEgKCZ3cml0ZXIsIGRhdGEsIDgpKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nICgmd3JpdGVyLCAic29tZXJhbmRvbXRlc3RzdHJpbmciKSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3dyaXRlcl9nZXRfcG9zICgmd3JpdGVyKSwKKyAgICAgIDggKyBzaXplb2YgKCJzb21lcmFuZG9tdGVzdHN0cmluZyIpKTsKKworICBkYXRhMiA9IGdzdF9ieXRlX3dyaXRlcl9yZXNldF9hbmRfZ2V0X2RhdGEgKCZ3cml0ZXIpOworICBmYWlsX3VubGVzcyAoZGF0YTIgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChtZW1jbXAgKGRhdGEyLCBkYXRhLCA4KSA9PSAwKTsKKyAgZ19mcmVlIChkYXRhMik7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfZmlsbCkKK3sKKyAgR3N0Qnl0ZVdyaXRlciB3cml0ZXI7CisgIGd1aW50OCBkYXRhW10gPSB7IDB4MCwgMHgwLCAweDAsIDB4MCwgMHg1LCAweDUgfTsKKyAgZ3VpbnQ4ICpkYXRhMjsKKworICBnc3RfYnl0ZV93cml0ZXJfaW5pdCAoJndyaXRlcik7CisgIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV93cml0ZXJfZmlsbCAoJndyaXRlciwgMCwgNCkpOworICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfd3JpdGVyX2ZpbGwgKCZ3cml0ZXIsIDUsIDIpKTsKKworICBkYXRhMiA9IGdzdF9ieXRlX3dyaXRlcl9yZXNldF9hbmRfZ2V0X2RhdGEgKCZ3cml0ZXIpOworICBmYWlsX3VubGVzcyAoZGF0YTIgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChtZW1jbXAgKGRhdGEyLCBkYXRhLCA2KSA9PSAwKTsKKyAgZ19mcmVlIChkYXRhMik7Cit9CisKK0dTVF9FTkRfVEVTVDsKK3N0YXRpYyBTdWl0ZSAqCitnc3RfYnl0ZV93cml0ZXJfc3VpdGUgKHZvaWQpCit7CisgIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0Qnl0ZVdyaXRlciIpOworICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7CisKKyAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7CisKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2luaXRpYWxpemF0aW9uKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3dyaXRlX2ZpeGVkKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3dyaXRlX25vbl9maXhlZCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mcm9tX2RhdGEpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcHV0X2RhdGFfc3RyaW5ncyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9maWxsKTsKKworICByZXR1cm4gczsKK30KKworCitHU1RfQ0hFQ0tfTUFJTiAoZ3N0X2J5dGVfd3JpdGVyKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2xpYnMvY29sbGVjdHBhZHMuYyBiL3Rlc3RzL2NoZWNrL2xpYnMvY29sbGVjdHBhZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTY2MTAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hlY2svbGlicy9jb2xsZWN0cGFkcy5jCkBAIC0wLDAgKzEsMzQ4IEBACisvKgorICogY29sbGVjdHBhZHMuYyAtIEdzdENvbGxlY3RQYWRzIHRlc3RzdWl0ZQorICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvQG5udmEub3JnPgorICoKKyAqIEF1dGhvcnM6CisgKiAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvQG5udmEub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KKyNpbmNsdWRlIDxnc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oPgorCisjZGVmaW5lIGZhaWxfdW5sZXNzX2NvbGxlY3RlZChleHBlY3RlZCkgICAgICAgICAgIFwKK0dfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBnX211dGV4X2xvY2sgKGxvY2spOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHdoaWxlIChleHBlY3RlZCA9PSBUUlVFICYmIGNvbGxlY3RlZCA9PSBGQUxTRSkgIFwKKyAgICBnX2NvbmRfd2FpdCAoY29uZCwgbG9jayk7ICAgICAgICAgICAgICAgICAgICAgXAorICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChjb2xsZWN0ZWQsIGV4cGVjdGVkKTsgICBcCisgIGdfbXV0ZXhfdW5sb2NrIChsb2NrKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gR19TVE1UX0VORDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgY2hhciBmb287Cit9IEJhZENvbGxlY3REYXRhOworCit0eXBlZGVmIHN0cnVjdAoreworICBHc3RDb2xsZWN0RGF0YSBkYXRhOworICBHc3RQYWQgKnBhZDsKKyAgR3N0QnVmZmVyICpidWZmZXI7CisgIEdzdEV2ZW50ICpldmVudDsKK30gVGVzdERhdGE7CisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKKyAgICBHU1RfUEFEX1NSQywKKyAgICBHU1RfUEFEX0FMV0FZUywKKyAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKKworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCisgICAgR1NUX1BBRF9TSU5LLAorICAgIEdTVF9QQURfQUxXQVlTLAorICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOworCitzdGF0aWMgR3N0Q29sbGVjdFBhZHMgKmNvbGxlY3Q7CitzdGF0aWMgZ2Jvb2xlYW4gY29sbGVjdGVkOworc3RhdGljIEdzdFBhZCAqc3JjcGFkMSwgKnNyY3BhZDI7CitzdGF0aWMgR3N0UGFkICpzaW5rcGFkMSwgKnNpbmtwYWQyOworc3RhdGljIFRlc3REYXRhICpkYXRhMSwgKmRhdGEyOworCitzdGF0aWMgR011dGV4ICpsb2NrOworc3RhdGljIEdDb25kICpjb25kOworCitzdGF0aWMgR3N0Rmxvd1JldHVybgorY29sbGVjdGVkX2NiIChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgZ19tdXRleF9sb2NrIChsb2NrKTsKKyAgY29sbGVjdGVkID0gVFJVRTsKKyAgZ19jb25kX3NpZ25hbCAoY29uZCk7CisgIGdfbXV0ZXhfdW5sb2NrIChsb2NrKTsKKworICByZXR1cm4gR1NUX0ZMT1dfT0s7Cit9CisKK3N0YXRpYyBncG9pbnRlcgorcHVzaF9idWZmZXIgKGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgVGVzdERhdGEgKnRlc3RfZGF0YSA9IChUZXN0RGF0YSAqKSB1c2VyX2RhdGE7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAodGVzdF9kYXRhLT5wYWQsIHRlc3RfZGF0YS0+YnVmZmVyKQorICAgICAgPT0gR1NUX0ZMT1dfT0spOworCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgZ3BvaW50ZXIKK3B1c2hfZXZlbnQgKGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgVGVzdERhdGEgKnRlc3RfZGF0YSA9IChUZXN0RGF0YSAqKSB1c2VyX2RhdGE7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAodGVzdF9kYXRhLT5wYWQsIHRlc3RfZGF0YS0+ZXZlbnQpID09IFRSVUUpOworCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorc2V0dXAgKHZvaWQpCit7CisgIGNvbGxlY3QgPSBnc3RfY29sbGVjdF9wYWRzX25ldyAoKTsKKyAgZ3N0X2NvbGxlY3RfcGFkc19zZXRfZnVuY3Rpb24gKGNvbGxlY3QsIGNvbGxlY3RlZF9jYiwgTlVMTCk7CisKKyAgc3JjcGFkMSA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc3JjdGVtcGxhdGUsICJzcmMxIik7CisgIHNyY3BhZDIgPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJnNyY3RlbXBsYXRlLCAic3JjMiIpOworICBzaW5rcGFkMSA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc2lua3RlbXBsYXRlLCAic2luazEiKTsKKyAgc2lua3BhZDIgPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJnNpbmt0ZW1wbGF0ZSwgInNpbmsyIik7CisgIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHNyY3BhZDEsIHNpbmtwYWQxKSA9PSBHU1RfUEFEX0xJTktfT0spOworICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rIChzcmNwYWQyLCBzaW5rcGFkMikgPT0gR1NUX1BBRF9MSU5LX09LKTsKKworICBjb25kID0gZ19jb25kX25ldyAoKTsKKyAgbG9jayA9IGdfbXV0ZXhfbmV3ICgpOworICBkYXRhMSA9IE5VTEw7CisgIGRhdGEyID0gTlVMTDsKKyAgY29sbGVjdGVkID0gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkCit0ZWFyZG93biAodm9pZCkKK3sKKyAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZDEpOworICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkMik7CisgIGdzdF9vYmplY3RfdW5yZWYgKGNvbGxlY3QpOworICBnX2NvbmRfZnJlZSAoY29uZCk7CisgIGdfbXV0ZXhfZnJlZSAobG9jayk7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3BhZF9hZGRfcmVtb3ZlKQoreworICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZCAoY29sbGVjdCwgc2lua3BhZDEsCisgICAgICAgICAgc2l6ZW9mIChCYWRDb2xsZWN0RGF0YSkpKTsKKworICBkYXRhMSA9IChUZXN0RGF0YSAqKSBnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQgKGNvbGxlY3QsCisgICAgICBzaW5rcGFkMSwgc2l6ZW9mIChUZXN0RGF0YSkpOworICBmYWlsX3VubGVzcyAoZGF0YTEgIT0gTlVMTCk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZCAoY29sbGVjdCwgc2lua3BhZDIpID09IEZBTFNFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZCAoY29sbGVjdCwgc2lua3BhZDEpID09IFRSVUUpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2NvbGxlY3QpCit7CisgIEdzdEJ1ZmZlciAqYnVmMSwgKmJ1ZjIsICp0bXA7CisgIEdUaHJlYWQgKnRocmVhZDEsICp0aHJlYWQyOworCisgIGRhdGExID0gKFRlc3REYXRhICopIGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZCAoY29sbGVjdCwKKyAgICAgIHNpbmtwYWQxLCBzaXplb2YgKFRlc3REYXRhKSk7CisgIGZhaWxfdW5sZXNzIChkYXRhMSAhPSBOVUxMKTsKKworICBkYXRhMiA9IChUZXN0RGF0YSAqKSBnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQgKGNvbGxlY3QsCisgICAgICBzaW5rcGFkMiwgc2l6ZW9mIChUZXN0RGF0YSkpOworICBmYWlsX3VubGVzcyAoZGF0YTIgIT0gTlVMTCk7CisKKyAgYnVmMSA9IGdzdF9idWZmZXJfbmV3ICgpOworICBidWYyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisKKyAgLyogc3RhcnQgY29sbGVjdCBwYWRzICovCisgIGdzdF9jb2xsZWN0X3BhZHNfc3RhcnQgKGNvbGxlY3QpOworCisgIC8qIHB1c2ggYnVmZmVycyBvbiB0aGUgcGFkcyAqLworICBkYXRhMS0+cGFkID0gc3JjcGFkMTsKKyAgZGF0YTEtPmJ1ZmZlciA9IGJ1ZjE7CisgIHRocmVhZDEgPSBnX3RocmVhZF9jcmVhdGUgKHB1c2hfYnVmZmVyLCBkYXRhMSwgVFJVRSwgTlVMTCk7CisgIC8qIGhlcmUgdGhyZWFkMSBpcyBibG9ja2VkIGFuZCBzcmNwYWQxIGhhcyBhIHF1ZXVlZCBidWZmZXIgKi8KKyAgZmFpbF91bmxlc3NfY29sbGVjdGVkIChGQUxTRSk7CisKKyAgZGF0YTItPnBhZCA9IHNyY3BhZDI7CisgIGRhdGEyLT5idWZmZXIgPSBidWYyOworICB0aHJlYWQyID0gZ190aHJlYWRfY3JlYXRlIChwdXNoX2J1ZmZlciwgZGF0YTIsIFRSVUUsIE5VTEwpOworCisgIC8qIG5vdyBib3RoIHBhZHMgaGF2ZSBhIGJ1ZmZlciAqLworICBmYWlsX3VubGVzc19jb2xsZWN0ZWQgKFRSVUUpOworCisgIHRtcCA9IGdzdF9jb2xsZWN0X3BhZHNfcG9wIChjb2xsZWN0LCAoR3N0Q29sbGVjdERhdGEgKikgZGF0YTEpOworICBmYWlsX3VubGVzcyAodG1wID09IGJ1ZjEpOworICB0bXAgPSBnc3RfY29sbGVjdF9wYWRzX3BvcCAoY29sbGVjdCwgKEdzdENvbGxlY3REYXRhICopIGRhdGEyKTsKKyAgZmFpbF91bmxlc3MgKHRtcCA9PSBidWYyKTsKKworICAvKiB0aGVzZSB3aWxsIHJldHVybiBpbW1lZGlhdGVseSBhcyBhdCB0aGlzIHBvaW50IHRoZSB0aHJlYWRzIGhhdmUgYmVlbgorICAgKiB1bmxvY2tlZCBhbmQgYXJlIGZpbmlzaGVkICovCisgIGdfdGhyZWFkX2pvaW4gKHRocmVhZDEpOworICBnX3RocmVhZF9qb2luICh0aHJlYWQyKTsKKworICBnc3RfY29sbGVjdF9wYWRzX3N0b3AgKGNvbGxlY3QpOworCisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZjEpOworICBnc3RfYnVmZmVyX3VucmVmIChidWYyKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9jb2xsZWN0X2VvcykKK3sKKyAgR3N0QnVmZmVyICpidWYxLCAqdG1wOworICBHVGhyZWFkICp0aHJlYWQxLCAqdGhyZWFkMjsKKworICBkYXRhMSA9IChUZXN0RGF0YSAqKSBnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQgKGNvbGxlY3QsCisgICAgICBzaW5rcGFkMSwgc2l6ZW9mIChUZXN0RGF0YSkpOworICBmYWlsX3VubGVzcyAoZGF0YTEgIT0gTlVMTCk7CisKKyAgZGF0YTIgPSAoVGVzdERhdGEgKikgZ3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkIChjb2xsZWN0LAorICAgICAgc2lua3BhZDIsIHNpemVvZiAoVGVzdERhdGEpKTsKKyAgZmFpbF91bmxlc3MgKGRhdGEyICE9IE5VTEwpOworCisgIGJ1ZjEgPSBnc3RfYnVmZmVyX25ldyAoKTsKKworICAvKiBzdGFydCBjb2xsZWN0IHBhZHMgKi8KKyAgZ3N0X2NvbGxlY3RfcGFkc19zdGFydCAoY29sbGVjdCk7CisKKyAgLyogcHVzaCBhIGJ1ZmZlciBvbiBzcmNwYWQxIGFuZCBFT1Mgb24gc3JjcGFkMiAqLworICBkYXRhMS0+cGFkID0gc3JjcGFkMTsKKyAgZGF0YTEtPmJ1ZmZlciA9IGJ1ZjE7CisgIHRocmVhZDEgPSBnX3RocmVhZF9jcmVhdGUgKHB1c2hfYnVmZmVyLCBkYXRhMSwgVFJVRSwgTlVMTCk7CisgIC8qIGhlcmUgdGhyZWFkMSBpcyBibG9ja2VkIGFuZCBzcmNwYWQxIGhhcyBhIHF1ZXVlZCBidWZmZXIgKi8KKyAgZmFpbF91bmxlc3NfY29sbGVjdGVkIChGQUxTRSk7CisKKyAgZGF0YTItPnBhZCA9IHNyY3BhZDI7CisgIGRhdGEyLT5ldmVudCA9IGdzdF9ldmVudF9uZXdfZW9zICgpOworICB0aHJlYWQyID0gZ190aHJlYWRfY3JlYXRlIChwdXNoX2V2ZW50LCBkYXRhMiwgVFJVRSwgTlVMTCk7CisgIC8qIG5vdyBzaW5rcGFkMSBoYXMgYSBidWZmZXIgYW5kIHNpbmtwYWQyIGhhcyBFT1MgKi8KKyAgZmFpbF91bmxlc3NfY29sbGVjdGVkIChUUlVFKTsKKworICB0bXAgPSBnc3RfY29sbGVjdF9wYWRzX3BvcCAoY29sbGVjdCwgKEdzdENvbGxlY3REYXRhICopIGRhdGExKTsKKyAgZmFpbF91bmxlc3MgKHRtcCA9PSBidWYxKTsKKyAgLyogc2lua3BhZDIgaGFzIEVPUyBzbyBhIE5VTEwgYnVmZmVyIGlzIHJldHVybmVkICovCisgIHRtcCA9IGdzdF9jb2xsZWN0X3BhZHNfcG9wIChjb2xsZWN0LCAoR3N0Q29sbGVjdERhdGEgKikgZGF0YTIpOworICBmYWlsX3VubGVzcyAodG1wID09IE5VTEwpOworCisgIC8qIHRoZXNlIHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5IGFzIHdoZW4gdGhlIGRhdGEgaXMgcG9wcGVkIHRoZSB0aHJlYWRzIGFyZQorICAgKiB1bmxvY2tlZCBhbmQgd2lsbCB0ZXJtaW5hdGUgKi8KKyAgZ190aHJlYWRfam9pbiAodGhyZWFkMSk7CisgIGdfdGhyZWFkX2pvaW4gKHRocmVhZDIpOworCisgIGdzdF9jb2xsZWN0X3BhZHNfc3RvcCAoY29sbGVjdCk7CisKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmMSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfY29sbGVjdF90d2ljZSkKK3sKKyAgR3N0QnVmZmVyICpidWYxLCAqYnVmMiwgKnRtcDsKKyAgR1RocmVhZCAqdGhyZWFkMSwgKnRocmVhZDI7CisKKyAgZGF0YTEgPSAoVGVzdERhdGEgKikgZ3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkIChjb2xsZWN0LAorICAgICAgc2lua3BhZDEsIHNpemVvZiAoVGVzdERhdGEpKTsKKyAgZmFpbF91bmxlc3MgKGRhdGExICE9IE5VTEwpOworCisgIGRhdGEyID0gKFRlc3REYXRhICopIGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZCAoY29sbGVjdCwKKyAgICAgIHNpbmtwYWQyLCBzaXplb2YgKFRlc3REYXRhKSk7CisgIGZhaWxfdW5sZXNzIChkYXRhMiAhPSBOVUxMKTsKKworICBidWYxID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisKKyAgLyogc3RhcnQgY29sbGVjdCBwYWRzICovCisgIGdzdF9jb2xsZWN0X3BhZHNfc3RhcnQgKGNvbGxlY3QpOworCisgIC8qIHF1ZXVlIGEgYnVmZmVyICovCisgIGRhdGExLT5wYWQgPSBzcmNwYWQxOworICBkYXRhMS0+YnVmZmVyID0gYnVmMTsKKyAgdGhyZWFkMSA9IGdfdGhyZWFkX2NyZWF0ZSAocHVzaF9idWZmZXIsIGRhdGExLCBUUlVFLCBOVUxMKTsKKyAgLyogaGVyZSB0aHJlYWQxIGlzIGJsb2NrZWQgYW5kIHNyY3BhZDEgaGFzIGEgcXVldWVkIGJ1ZmZlciAqLworICBmYWlsX3VubGVzc19jb2xsZWN0ZWQgKEZBTFNFKTsKKworICAvKiBwdXNoIEVPUyBvbiB0aGUgb3RoZXIgcGFkICovCisgIGRhdGEyLT5wYWQgPSBzcmNwYWQyOworICBkYXRhMi0+ZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2VvcyAoKTsKKyAgdGhyZWFkMiA9IGdfdGhyZWFkX2NyZWF0ZSAocHVzaF9ldmVudCwgZGF0YTIsIFRSVUUsIE5VTEwpOworCisgIC8qIG9uZSBvZiB0aGUgcGFkcyBoYXMgYSBidWZmZXIsIHRoZSBvdGhlciBoYXMgRU9TICovCisgIGZhaWxfdW5sZXNzX2NvbGxlY3RlZCAoVFJVRSk7CisKKyAgdG1wID0gZ3N0X2NvbGxlY3RfcGFkc19wb3AgKGNvbGxlY3QsIChHc3RDb2xsZWN0RGF0YSAqKSBkYXRhMSk7CisgIGZhaWxfdW5sZXNzICh0bXAgPT0gYnVmMSk7CisgIC8qIHRoZXJlJ3Mgbm90aGluZyB0byBwb3AgZnJvbSB0aGUgb25lIHdoaWNoIHJlY2VpdmVkIEVPUyAqLworICB0bXAgPSBnc3RfY29sbGVjdF9wYWRzX3BvcCAoY29sbGVjdCwgKEdzdENvbGxlY3REYXRhICopIGRhdGEyKTsKKyAgZmFpbF91bmxlc3MgKHRtcCA9PSBOVUxMKTsKKworICAvKiB0aGVzZSB3aWxsIHJldHVybiBpbW1lZGlhdGVseSBhcyBhdCB0aGlzIHBvaW50IHRoZSB0aHJlYWRzIGhhdmUgYmVlbgorICAgKiB1bmxvY2tlZCBhbmQgYXJlIGZpbmlzaGVkICovCisgIGdfdGhyZWFkX2pvaW4gKHRocmVhZDEpOworICBnX3RocmVhZF9qb2luICh0aHJlYWQyKTsKKworICBnc3RfY29sbGVjdF9wYWRzX3N0b3AgKGNvbGxlY3QpOworICBjb2xsZWN0ZWQgPSBGQUxTRTsKKworICBidWYyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7CisKKyAgLyogc3RhcnQgY29sbGVjdCBwYWRzICovCisgIGdzdF9jb2xsZWN0X3BhZHNfc3RhcnQgKGNvbGxlY3QpOworCisgIC8qIHB1c2ggYnVmZmVycyBvbiB0aGUgcGFkcyAqLworICBkYXRhMS0+cGFkID0gc3JjcGFkMTsKKyAgZGF0YTEtPmJ1ZmZlciA9IGJ1ZjE7CisgIHRocmVhZDEgPSBnX3RocmVhZF9jcmVhdGUgKHB1c2hfYnVmZmVyLCBkYXRhMSwgVFJVRSwgTlVMTCk7CisgIC8qIGhlcmUgdGhyZWFkMSBpcyBibG9ja2VkIGFuZCBzcmNwYWQxIGhhcyBhIHF1ZXVlZCBidWZmZXIgKi8KKyAgZmFpbF91bmxlc3NfY29sbGVjdGVkIChGQUxTRSk7CisKKyAgZGF0YTItPnBhZCA9IHNyY3BhZDI7CisgIGRhdGEyLT5idWZmZXIgPSBidWYyOworICB0aHJlYWQyID0gZ190aHJlYWRfY3JlYXRlIChwdXNoX2J1ZmZlciwgZGF0YTIsIFRSVUUsIE5VTEwpOworCisgIC8qIG5vdyBib3RoIHBhZHMgaGF2ZSBhIGJ1ZmZlciAqLworICBmYWlsX3VubGVzc19jb2xsZWN0ZWQgKFRSVUUpOworCisgIHRtcCA9IGdzdF9jb2xsZWN0X3BhZHNfcG9wIChjb2xsZWN0LCAoR3N0Q29sbGVjdERhdGEgKikgZGF0YTEpOworICBmYWlsX3VubGVzcyAodG1wID09IGJ1ZjEpOworICB0bXAgPSBnc3RfY29sbGVjdF9wYWRzX3BvcCAoY29sbGVjdCwgKEdzdENvbGxlY3REYXRhICopIGRhdGEyKTsKKyAgZmFpbF91bmxlc3MgKHRtcCA9PSBidWYyKTsKKworICAvKiB0aGVzZSB3aWxsIHJldHVybiBpbW1lZGlhdGVseSBhcyBhdCB0aGlzIHBvaW50IHRoZSB0aHJlYWRzIGhhdmUgYmVlbgorICAgKiB1bmxvY2tlZCBhbmQgYXJlIGZpbmlzaGVkICovCisgIGdfdGhyZWFkX2pvaW4gKHRocmVhZDEpOworICBnX3RocmVhZF9qb2luICh0aHJlYWQyKTsKKworICBnc3RfY29sbGVjdF9wYWRzX3N0b3AgKGNvbGxlY3QpOworCisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZjEpOworICBnc3RfYnVmZmVyX3VucmVmIChidWYyKTsKKworfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBTdWl0ZSAqCitnc3RfY29sbGVjdF9wYWRzX3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqc3VpdGU7CisgIFRDYXNlICpnZW5lcmFsOworCisgIHN1aXRlID0gc3VpdGVfY3JlYXRlICgiR3N0Q29sbGVjdFBhZHMiKTsKKyAgZ2VuZXJhbCA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKKyAgc3VpdGVfYWRkX3RjYXNlIChzdWl0ZSwgZ2VuZXJhbCk7CisgIHRjYXNlX2FkZF9jaGVja2VkX2ZpeHR1cmUgKGdlbmVyYWwsIHNldHVwLCB0ZWFyZG93bik7CisgIHRjYXNlX2FkZF90ZXN0IChnZW5lcmFsLCB0ZXN0X3BhZF9hZGRfcmVtb3ZlKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKGdlbmVyYWwsIHRlc3RfY29sbGVjdCk7CisgIHRjYXNlX2FkZF90ZXN0IChnZW5lcmFsLCB0ZXN0X2NvbGxlY3RfZW9zKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKGdlbmVyYWwsIHRlc3RfY29sbGVjdF90d2ljZSk7CisKKyAgcmV0dXJuIHN1aXRlOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoZ3N0X2NvbGxlY3RfcGFkcyk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9saWJzL2NvbnRyb2xsZXIuYyBiL3Rlc3RzL2NoZWNrL2xpYnMvY29udHJvbGxlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1Y2Q0MzIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9saWJzL2NvbnRyb2xsZXIuYwpAQCAtMCwwICsxLDIzMDYgQEAKKy8qIEdTdHJlYW1lcgorICoKKyAqIHVuaXQgdGVzdCBmb3IgdGhlIGNvbnRyb2xsZXIgbGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoQykgPDIwMDU+IFN0ZWZhbiBLb3N0IDxlbnNvbmljIGF0IHVzZXJzIGRvdCBzZiBkb3QgbmV0PgorICogQ29weXJpZ2h0IChDKSA8MjAwNi0yMDA3PiBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KKyNpbmNsdWRlIDxnc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmg+CisjaW5jbHVkZSA8Z3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbHNvdXJjZS5oPgorI2luY2x1ZGUgPGdzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmg+CisjaW5jbHVkZSA8Z3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5oPgorCisvKiBMT0NBTCBURVNUIEVMRU1FTlQgKi8KKworZW51bQoreworICBBUkdfVUxPTkcgPSAxLAorICBBUkdfRkxPQVQsCisgIEFSR19ET1VCTEUsCisgIEFSR19CT09MRUFOLAorICBBUkdfUkVBRE9OTFksCisgIEFSR19TVEFUSUMsCisgIEFSR19DT05TVFJVQ1RPTkxZLAorICBBUkdfQ09VTlQKK307CisKKyNkZWZpbmUgR1NUX1RZUEVfVEVTVF9NT05PX1NPVVJDRSAgICAgICAgICAgIChnc3RfdGVzdF9tb25vX3NvdXJjZV9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgR1NUX1RFU1RfTU9OT19TT1VSQ0Uob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX1RFU1RfTU9OT19TT1VSQ0UsIEdzdFRlc3RNb25vU291cmNlKSkKKyNkZWZpbmUgR1NUX1RFU1RfTU9OT19TT1VSQ0VfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfVEVTVF9NT05PX1NPVVJDRSwgR3N0VGVzdE1vbm9Tb3VyY2VDbGFzcykpCisjZGVmaW5lIEdTVF9JU19URVNUX01PTk9fU09VUkNFKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9URVNUX01PTk9fU09VUkNFKSkKKyNkZWZpbmUgR1NUX0lTX1RFU1RfTU9OT19TT1VSQ0VfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfVEVTVF9NT05PX1NPVVJDRSkpCisjZGVmaW5lIEdTVF9URVNUX01PTk9fU09VUkNFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIEdTVF9UWVBFX1RFU1RfTU9OT19TT1VSQ0UsIEdzdFRlc3RNb25vU291cmNlQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfR3N0VGVzdE1vbm9Tb3VyY2UgR3N0VGVzdE1vbm9Tb3VyY2U7Cit0eXBlZGVmIHN0cnVjdCBfR3N0VGVzdE1vbm9Tb3VyY2VDbGFzcyBHc3RUZXN0TW9ub1NvdXJjZUNsYXNzOworCitzdHJ1Y3QgX0dzdFRlc3RNb25vU291cmNlCit7CisgIEdzdEVsZW1lbnQgcGFyZW50OworICBndWxvbmcgdmFsX3Vsb25nOworICBnZmxvYXQgdmFsX2Zsb2F0OworICBnZG91YmxlIHZhbF9kb3VibGU7CisgIGdib29sZWFuIHZhbF9ib29sZWFuOworfTsKK3N0cnVjdCBfR3N0VGVzdE1vbm9Tb3VyY2VDbGFzcworeworICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworc3RhdGljIEdUeXBlIGdzdF90ZXN0X21vbm9fc291cmNlX2dldF90eXBlICh2b2lkKTsKKworc3RhdGljIHZvaWQKK2dzdF90ZXN0X21vbm9fc291cmNlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKKyAgICBndWludCBwcm9wZXJ0eV9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgR3N0VGVzdE1vbm9Tb3VyY2UgKnNlbGYgPSBHU1RfVEVTVF9NT05PX1NPVVJDRSAob2JqZWN0KTsKKworICBzd2l0Y2ggKHByb3BlcnR5X2lkKSB7CisgICAgY2FzZSBBUkdfVUxPTkc6CisgICAgICBnX3ZhbHVlX3NldF91bG9uZyAodmFsdWUsIHNlbGYtPnZhbF91bG9uZyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEFSR19GTE9BVDoKKyAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0ICh2YWx1ZSwgc2VsZi0+dmFsX2Zsb2F0KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQVJHX0RPVUJMRToKKyAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAodmFsdWUsIHNlbGYtPnZhbF9kb3VibGUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBBUkdfQk9PTEVBTjoKKyAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBzZWxmLT52YWxfYm9vbGVhbik7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BlcnR5X2lkLCBwc3BlYyk7CisgICAgICBicmVhazsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZ3N0X3Rlc3RfbW9ub19zb3VyY2Vfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAorICAgIGd1aW50IHByb3BlcnR5X2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQoreworICBHc3RUZXN0TW9ub1NvdXJjZSAqc2VsZiA9IEdTVF9URVNUX01PTk9fU09VUkNFIChvYmplY3QpOworCisgIHN3aXRjaCAocHJvcGVydHlfaWQpIHsKKyAgICBjYXNlIEFSR19VTE9ORzoKKyAgICAgIHNlbGYtPnZhbF91bG9uZyA9IGdfdmFsdWVfZ2V0X3Vsb25nICh2YWx1ZSk7CisgICAgICBHU1RfREVCVUcgKCJ0ZXN0IHZhbHVlIHVsb25nPSVsdSIsIHNlbGYtPnZhbF91bG9uZyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEFSR19GTE9BVDoKKyAgICAgIHNlbGYtPnZhbF9mbG9hdCA9IGdfdmFsdWVfZ2V0X2Zsb2F0ICh2YWx1ZSk7CisgICAgICBHU1RfREVCVUcgKCJ0ZXN0IHZhbHVlIGZsb2F0PSVmIiwgc2VsZi0+dmFsX2Zsb2F0KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQVJHX0RPVUJMRToKKyAgICAgIHNlbGYtPnZhbF9kb3VibGUgPSBnX3ZhbHVlX2dldF9kb3VibGUgKHZhbHVlKTsKKyAgICAgIEdTVF9ERUJVRyAoInRlc3QgdmFsdWUgZG91YmxlPSVmIiwgc2VsZi0+dmFsX2RvdWJsZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEFSR19CT09MRUFOOgorICAgICAgc2VsZi0+dmFsX2Jvb2xlYW4gPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7CisgICAgICBHU1RfREVCVUcgKCJ0ZXN0IHZhbHVlIGJvb2xlYW49JWQiLCBzZWxmLT52YWxfYm9vbGVhbik7CisgICAgICBicmVhazsKKyAgICBjYXNlIEFSR19DT05TVFJVQ1RPTkxZOgorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wZXJ0eV9pZCwgcHNwZWMpOworICAgICAgYnJlYWs7CisgIH0KK30KKworc3RhdGljIHZvaWQKK2dzdF90ZXN0X21vbm9fc291cmNlX2NsYXNzX2luaXQgKEdzdFRlc3RNb25vU291cmNlQ2xhc3MgKiBrbGFzcykKK3sKKyAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKKworICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfdGVzdF9tb25vX3NvdXJjZV9zZXRfcHJvcGVydHk7CisgIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF90ZXN0X21vbm9fc291cmNlX2dldF9wcm9wZXJ0eTsKKworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBBUkdfVUxPTkcsCisgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcgKCJ1bG9uZyIsCisgICAgICAgICAgInVsb25nIHByb3AiLAorICAgICAgICAgICJ1bG9uZyBudW1iZXIgcGFyYW1ldGVyIGZvciB0aGUgdGVzdF9tb25vX3NvdXJjZSIsCisgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFKSk7CisKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgQVJHX0ZMT0FULAorICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0ICgiZmxvYXQiLAorICAgICAgICAgICJmbG9hdCBwcm9wIiwKKyAgICAgICAgICAiZmxvYXQgbnVtYmVyIHBhcmFtZXRlciBmb3IgdGhlIHRlc3RfbW9ub19zb3VyY2UiLAorICAgICAgICAgIDAuMCwgMTAwLjAsIDAuMCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFKSk7CisKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgQVJHX0RPVUJMRSwKKyAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUgKCJkb3VibGUiLAorICAgICAgICAgICJkb3VibGUgcHJvcCIsCisgICAgICAgICAgImRvdWJsZSBudW1iZXIgcGFyYW1ldGVyIGZvciB0aGUgdGVzdF9tb25vX3NvdXJjZSIsCisgICAgICAgICAgMC4wLCAxMDAuMCwgMC4wLCBHX1BBUkFNX1JFQURXUklURSB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUpKTsKKworICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBBUkdfQk9PTEVBTiwKKyAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiYm9vbGVhbiIsCisgICAgICAgICAgImJvb2xlYW4gcHJvcCIsCisgICAgICAgICAgImJvb2xlYW4gcGFyYW1ldGVyIGZvciB0aGUgdGVzdF9tb25vX3NvdXJjZSIsCisgICAgICAgICAgRkFMU0UsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSkpOworCisgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIEFSR19SRUFET05MWSwKKyAgICAgIGdfcGFyYW1fc3BlY191bG9uZyAoInJlYWRvbmx5IiwKKyAgICAgICAgICAicmVhZG9ubHkgcHJvcCIsCisgICAgICAgICAgInJlYWRvbmx5IHBhcmFtZXRlciBmb3IgdGhlIHRlc3RfbW9ub19zb3VyY2UiLAorICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsIEdfUEFSQU1fUkVBREFCTEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFKSk7CisKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgQVJHX1NUQVRJQywKKyAgICAgIGdfcGFyYW1fc3BlY191bG9uZyAoInN0YXRpYyIsCisgICAgICAgICAgInN0YXRpYyBwcm9wIiwKKyAgICAgICAgICAic3RhdGljIHBhcmFtZXRlciBmb3IgdGhlIHRlc3RfbW9ub19zb3VyY2UiLAorICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsIEdfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgQVJHX0NPTlNUUlVDVE9OTFksCisgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcgKCJjb25zdHJ1Y3Qtb25seSIsCisgICAgICAgICAgImNvbnN0cnVjdC1vbmx5IHByb3AiLAorICAgICAgICAgICJjb25zdHJ1Y3Qtb25seSBwYXJhbWV0ZXIgZm9yIHRoZSB0ZXN0X21vbm9fc291cmNlIiwKKyAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKTsKK30KKworc3RhdGljIHZvaWQKK2dzdF90ZXN0X21vbm9fc291cmNlX2Jhc2VfaW5pdCAoR3N0VGVzdE1vbm9Tb3VyY2VDbGFzcyAqIGtsYXNzKQoreworICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOworCisgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZSAoZWxlbWVudF9jbGFzcywKKyAgICAgICJNb25vcGhvbmljIHNvdXJjZSBmb3IgdW5pdCB0ZXN0cyIsCisgICAgICAiU291cmNlL0F1ZGlvL01vbm9Tb3VyY2UiLAorICAgICAgIlVzZSBpbiB1bml0IHRlc3RzIiwgIlN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4iKTsKK30KKworc3RhdGljIEdUeXBlCitnc3RfdGVzdF9tb25vX3NvdXJjZV9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIHZvbGF0aWxlIGdzaXplIHRlc3RfbW9ub19zb3VyY2VfdHlwZSA9IDA7CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmdGVzdF9tb25vX3NvdXJjZV90eXBlKSkgeworICAgIEdUeXBlIHR5cGU7CisgICAgc3RhdGljIGNvbnN0IEdUeXBlSW5mbyBpbmZvID0geworICAgICAgKGd1aW50MTYpIHNpemVvZiAoR3N0VGVzdE1vbm9Tb3VyY2VDbGFzcyksCisgICAgICAoR0Jhc2VJbml0RnVuYykgZ3N0X3Rlc3RfbW9ub19zb3VyY2VfYmFzZV9pbml0LCAgIC8vIGJhc2VfaW5pdAorICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvLyBiYXNlX2ZpbmFsaXplCisgICAgICAoR0NsYXNzSW5pdEZ1bmMpIGdzdF90ZXN0X21vbm9fc291cmNlX2NsYXNzX2luaXQsIC8vIGNsYXNzX2luaXQKKyAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLy8gY2xhc3NfZmluYWxpemUKKyAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLy8gY2xhc3NfZGF0YQorICAgICAgKGd1aW50MTYpIHNpemVvZiAoR3N0VGVzdE1vbm9Tb3VyY2UpLAorICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAvLyBuX3ByZWFsbG9jcworICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvLyBpbnN0YW5jZV9pbml0CisgICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlX3RhYmxlCisgICAgfTsKKyAgICB0eXBlID0KKyAgICAgICAgZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RZUEVfRUxFTUVOVCwgIkdzdFRlc3RNb25vU291cmNlIiwgJmluZm8sCisgICAgICAgIDApOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmdGVzdF9tb25vX3NvdXJjZV90eXBlLCB0eXBlKTsKKyAgfQorICByZXR1cm4gdGVzdF9tb25vX3NvdXJjZV90eXBlOworfQorCisvKiBzbyB3ZSBkb24ndCBoYXZlIHRvIHBhc3RlIHRoZSBnc3RfZWxlbWVudF9yZWdpc3RlciBpbnRvIDUwIHBsYWNlcyBiZWxvdyAqLworc3RhdGljIGdib29sZWFuCitsb2NhbF9nc3RfY29udHJvbGxlcl9pbml0IChpbnQgKmFyZ2MsIGNoYXIgKioqYXJndikKK3sKKyAgZmFpbF91bmxlc3MgKGdzdF9jb250cm9sbGVyX2luaXQgKGFyZ2MsIGFyZ3YpKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKE5VTEwsICJ0ZXN0bW9ub3NvdXJjZSIsIEdTVF9SQU5LX05PTkUsCisgICAgICAgICAgR1NUX1RZUEVfVEVTVF9NT05PX1NPVVJDRSkpOworCisgIHJldHVybiBUUlVFOworfQorCisjZGVmaW5lIGdzdF9jb250cm9sbGVyX2luaXQoYSxiKSBsb2NhbF9nc3RfY29udHJvbGxlcl9pbml0KGEsYikKKworLyogVEVTVFMgKi8KKy8qIGRvdWJsZSBpbml0IHNob3VsZCBub3QgaGFybSAqLworR1NUX1NUQVJUX1RFU1QgKGNvbnRyb2xsZXJfaW5pdCkKK3sKKyAgZ3N0X2NvbnRyb2xsZXJfaW5pdCAoTlVMTCwgTlVMTCk7CisgIGdzdF9jb250cm9sbGVyX2luaXQgKE5VTEwsIE5VTEwpOworICBnc3RfY29udHJvbGxlcl9pbml0IChOVUxMLCBOVUxMKTsKKyAgZ3N0X2NvbnRyb2xsZXJfaW5pdCAoTlVMTCwgTlVMTCk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogdGVzdHMgZm9yIGFuIGVsZW1lbnQgd2l0aCBubyBjb250cm9sbGVkIHBhcmFtcyAqLworR1NUX1NUQVJUX1RFU1QgKGNvbnRyb2xsZXJfbmV3X2ZhaWwxKQoreworICBHc3RDb250cm9sbGVyICpjdHJsOworICBHc3RFbGVtZW50ICplbGVtOworCisgIGdzdF9jb250cm9sbGVyX2luaXQgKE5VTEwsIE5VTEwpOworCisgIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInRlc3Rfc291cmNlIik7CisKKyAgLyogdGhhdCBwcm9wZXJ0eSBzaG91bGQgbm90IGV4aXN0ICovCisgIGN0cmwgPSBnc3RfY29udHJvbGxlcl9uZXcgKEdfT0JKRUNUIChlbGVtKSwgIl9zY2hyb21wZl8iLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGN0cmwgPT0gTlVMTCwgTlVMTCk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAoZWxlbSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogdGVzdHMgZm9yIGFuIGVsZW1lbnQgd2l0aCBjb250cm9sbGVkIHBhcmFtcywgYnV0IG5vbmUgZ2l2ZW4gKi8KK0dTVF9TVEFSVF9URVNUIChjb250cm9sbGVyX25ld19mYWlsMikKK3sKKyAgR3N0Q29udHJvbGxlciAqY3RybDsKKyAgR3N0RWxlbWVudCAqZWxlbTsKKworICBnc3RfY29udHJvbGxlcl9pbml0IChOVUxMLCBOVUxMKTsKKworICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVzdG1vbm9zb3VyY2UiLCAidGVzdF9zb3VyY2UiKTsKKworICAvKiBubyBwcm9wZXJ0eSBnaXZlbiAqLworICBjdHJsID0gZ3N0X2NvbnRyb2xsZXJfbmV3IChHX09CSkVDVCAoZWxlbSksIE5VTEwpOworICBmYWlsX3VubGVzcyAoY3RybCA9PSBOVUxMLCBOVUxMKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiB0ZXN0cyBmb3IgcmVhZG9ubHkgcGFyYW1zICovCitHU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9uZXdfZmFpbDMpCit7CisgIEdzdENvbnRyb2xsZXIgKmN0cmw7CisgIEdzdEVsZW1lbnQgKmVsZW07CisKKyAgZ3N0X2NvbnRyb2xsZXJfaW5pdCAoTlVMTCwgTlVMTCk7CisKKyAgZWxlbSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlc3Rtb25vc291cmNlIiwgInRlc3Rfc291cmNlIik7CisKKyAgLyogdGhhdCBwcm9wZXJ0eSBzaG91bGQgZXhpc3QgYW5kIGJ1dCBpcyByZWFkb25seSAqLworICBBU1NFUlRfQ1JJVElDQUwgKGN0cmwgPQorICAgICAgZ3N0X2NvbnRyb2xsZXJfbmV3IChHX09CSkVDVCAoZWxlbSksICJyZWFkb25seSIsIE5VTEwpKTsKKyAgZmFpbF91bmxlc3MgKGN0cmwgPT0gTlVMTCwgTlVMTCk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAoZWxlbSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogdGVzdHMgZm9yIHN0YXRpYyBwYXJhbXMgKi8KK0dTVF9TVEFSVF9URVNUIChjb250cm9sbGVyX25ld19mYWlsNCkKK3sKKyAgR3N0Q29udHJvbGxlciAqY3RybDsKKyAgR3N0RWxlbWVudCAqZWxlbTsKKworICBnc3RfY29udHJvbGxlcl9pbml0IChOVUxMLCBOVUxMKTsKKworICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVzdG1vbm9zb3VyY2UiLCAidGVzdF9zb3VyY2UiKTsKKworICAvKiB0aGF0IHByb3BlcnR5IHNob3VsZCBleGlzdCBhbmQgYnV0IGlzIG5vdCBjb250cm9sYWJsZSAqLworICBBU1NFUlRfQ1JJVElDQUwgKGN0cmwgPSBnc3RfY29udHJvbGxlcl9uZXcgKEdfT0JKRUNUIChlbGVtKSwgInN0YXRpYyIsIE5VTEwpKTsKKyAgZmFpbF91bmxlc3MgKGN0cmwgPT0gTlVMTCwgTlVMTCk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAoZWxlbSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogdGVzdHMgZm9yIGNvbnN0cnVjdC1vbmx5IHBhcmFtcyAqLworR1NUX1NUQVJUX1RFU1QgKGNvbnRyb2xsZXJfbmV3X2ZhaWw1KQoreworICBHc3RDb250cm9sbGVyICpjdHJsOworICBHc3RFbGVtZW50ICplbGVtOworCisgIGdzdF9jb250cm9sbGVyX2luaXQgKE5VTEwsIE5VTEwpOworCisgIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0bW9ub3NvdXJjZSIsICJ0ZXN0X3NvdXJjZSIpOworCisgIC8qIHRoYXQgcHJvcGVydHkgc2hvdWxkIGV4aXN0IGFuZCBidXQgaXMgY29uc3RydWN0LW9ubHkgKi8KKyAgQVNTRVJUX0NSSVRJQ0FMIChjdHJsID0KKyAgICAgIGdzdF9jb250cm9sbGVyX25ldyAoR19PQkpFQ1QgKGVsZW0pLCAiY29uc3RydWN0LW9ubHkiLCBOVUxMKSk7CisgIGZhaWxfdW5sZXNzIChjdHJsID09IE5VTEwsIE5VTEwpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOworfQorCitHU1RfRU5EX1RFU1Q7CisKKworLyogdGVzdHMgZm9yIGFuIGVsZW1lbnQgd2l0aCBjb250cm9sbGVkIHBhcmFtcyAqLworR1NUX1NUQVJUX1RFU1QgKGNvbnRyb2xsZXJfbmV3X29rYXkxKQoreworICBHc3RDb250cm9sbGVyICpjdHJsOworICBHc3RFbGVtZW50ICplbGVtOworCisgIGdzdF9jb250cm9sbGVyX2luaXQgKE5VTEwsIE5VTEwpOworCisgIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0bW9ub3NvdXJjZSIsICJ0ZXN0X3NvdXJjZSIpOworCisgIC8qIHRoYXQgcHJvcGVydHkgc2hvdWxkIGV4aXN0IGFuZCBzaG91bGQgYmUgY29udHJvbGxhYmxlICovCisgIGN0cmwgPSBnc3RfY29udHJvbGxlcl9uZXcgKEdfT0JKRUNUIChlbGVtKSwgInVsb25nIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChjdHJsICE9IE5VTEwsIE5VTEwpOworCisgIEdTVF9JTkZPICgiY29udHJvbGxlci0+cmVmX2NvdW50PSVkIiwgR19PQkpFQ1QgKGN0cmwpLT5yZWZfY291bnQpOworICBnX29iamVjdF91bnJlZiAoY3RybCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIHRlc3RzIGZvciBhbiBlbGVtZW50IHdpdGggc2V2ZXJhbCBjb250cm9sbGVkIHBhcmFtcyAqLworR1NUX1NUQVJUX1RFU1QgKGNvbnRyb2xsZXJfbmV3X29rYXkyKQoreworICBHc3RDb250cm9sbGVyICpjdHJsLCAqY3RybDIsICpjdHJsMzsKKyAgR3N0RWxlbWVudCAqZWxlbTsKKworICBnc3RfY29udHJvbGxlcl9pbml0IChOVUxMLCBOVUxMKTsKKworICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVzdG1vbm9zb3VyY2UiLCAidGVzdF9zb3VyY2UiKTsKKworICAvKiB0aGF0IHByb3BlcnR5IHNob3VsZCBleGlzdCBhbmQgc2hvdWxkIGJlIGNvbnRyb2xsYWJsZSAqLworICBjdHJsID0gZ3N0X2NvbnRyb2xsZXJfbmV3IChHX09CSkVDVCAoZWxlbSksICJ1bG9uZyIsICJkb3VibGUiLCAiZmxvYXQiLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGN0cmwgIT0gTlVMTCwgTlVMTCk7CisKKyAgR1NUX0lORk8gKCJjb250cm9sbGVyLT5yZWZfY291bnQ9JWQiLCBHX09CSkVDVCAoY3RybCktPnJlZl9jb3VudCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdfT0JKRUNUIChjdHJsKS0+cmVmX2NvdW50LCAxKTsKKworICBjdHJsMiA9IGdzdF9jb250cm9sbGVyX25ldyAoR19PQkpFQ1QgKGVsZW0pLCAiYm9vbGVhbiIsIE5VTEwpOworICBmYWlsX3VubGVzcyAoY3RybDIgIT0gTlVMTCwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChjdHJsMiA9PSBjdHJsLCBOVUxMKTsKKworICBHU1RfSU5GTyAoImNvbnRyb2xsZXItPnJlZl9jb3VudD0lZCIsIEdfT0JKRUNUIChjdHJsKS0+cmVmX2NvdW50KTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR19PQkpFQ1QgKGN0cmwpLT5yZWZfY291bnQsIDIpOworCisgIC8qIHRyeWluZyB0byBjb250cm9sIHRoZSBzYW1lIHByb3BlcnRpZXMgYWdhaW4gc2hvdWxkIGNvcnJlY3RseQorICAgKiBpbmNyZWFzZSB0aGUgcmVmY291bnQgb2YgdGhlIG9iamVjdCByZXR1cm5lZCBhcyB3ZWxsICovCisgIGN0cmwzID0KKyAgICAgIGdzdF9jb250cm9sbGVyX25ldyAoR19PQkpFQ1QgKGVsZW0pLCAidWxvbmciLCAiZG91YmxlIiwgImZsb2F0IiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChjdHJsMyAhPSBOVUxMLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGN0cmwzID09IGN0cmwsIE5VTEwpOworCisgIEdTVF9JTkZPICgiY29udHJvbGxlci0+cmVmX2NvdW50PSVkIiwgR19PQkpFQ1QgKGN0cmwpLT5yZWZfY291bnQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHX09CSkVDVCAoY3RybCktPnJlZl9jb3VudCwgMyk7CisKKyAgZ19vYmplY3RfdW5yZWYgKGN0cmwpOworICBnX29iamVjdF91bnJlZiAoY3RybDIpOworICBnX29iamVjdF91bnJlZiAoY3RybDMpOworICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiBjb250cm9sbGluZyBzZXZlcmFsIHBhcmFtcyBzaG91bGQgcmV0dXJuIHRoZSBzYW1lIGNvbnRyb2xsZXIgKi8KK0dTVF9TVEFSVF9URVNUIChjb250cm9sbGVyX25ld19va2F5MykKK3sKKyAgR3N0Q29udHJvbGxlciAqY3RybDEsICpjdHJsMiwgKmN0cmwzOworICBHc3RFbGVtZW50ICplbGVtOworCisgIGdzdF9jb250cm9sbGVyX2luaXQgKE5VTEwsIE5VTEwpOworCisgIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0bW9ub3NvdXJjZSIsICJ0ZXN0X3NvdXJjZSIpOworCisgIC8qIHRoYXQgcHJvcGVydHkgc2hvdWxkIGV4aXN0IGFuZCBzaG91bGQgYmUgY29udHJvbGxhYmxlICovCisgIGN0cmwxID0gZ3N0X2NvbnRyb2xsZXJfbmV3IChHX09CSkVDVCAoZWxlbSksICJ1bG9uZyIsIE5VTEwpOworICBmYWlsX3VubGVzcyAoY3RybDEgIT0gTlVMTCwgTlVMTCk7CisKKyAgLyogdGhhdCBwcm9wZXJ0eSBzaG91bGQgZXhpc3QgYW5kIHNob3VsZCBiZSBjb250cm9sbGFibGUgKi8KKyAgY3RybDIgPSBnc3RfY29udHJvbGxlcl9uZXcgKEdfT0JKRUNUIChlbGVtKSwgImRvdWJsZSIsIE5VTEwpOworICBmYWlsX3VubGVzcyAoY3RybDIgIT0gTlVMTCwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChjdHJsMSA9PSBjdHJsMiwgTlVMTCk7CisKKyAgLyogdGhhdCBwcm9wZXJ0eSBzaG91bGQgZXhpc3QgYW5kIHNob3VsZCBiZSBjb250cm9sbGFibGUgKi8KKyAgY3RybDMgPSBnc3RfY29udHJvbGxlcl9uZXcgKEdfT0JKRUNUIChlbGVtKSwgImZsb2F0IiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChjdHJsMyAhPSBOVUxMLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGN0cmwxID09IGN0cmwzLCBOVUxMKTsKKworICBHU1RfSU5GTyAoImNvbnRyb2xsZXItPnJlZl9jb3VudD0lZCIsIEdfT0JKRUNUIChjdHJsMSktPnJlZl9jb3VudCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdfT0JKRUNUIChjdHJsMSktPnJlZl9jb3VudCwgMyk7CisgIGdfb2JqZWN0X3VucmVmIChjdHJsMSk7CisgIGdfb2JqZWN0X3VucmVmIChjdHJsMik7CisgIGdfb2JqZWN0X3VucmVmIChjdHJsMyk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIGNvbnRyb2xsaW5nIGEgcGFyYW1zIHR3aWNlIHNob3VsZCBiZSBoYW5kbGVkICovCitHU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9wYXJhbV90d2ljZSkKK3sKKyAgR3N0Q29udHJvbGxlciAqY3RybDsKKyAgR3N0RWxlbWVudCAqZWxlbTsKKyAgZ2Jvb2xlYW4gcmVzOworCisgIGdzdF9jb250cm9sbGVyX2luaXQgKE5VTEwsIE5VTEwpOworCisgIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0bW9ub3NvdXJjZSIsICJ0ZXN0X3NvdXJjZSIpOworCisgIC8qIHRoYXQgcHJvcGVydHkgc2hvdWxkIGV4aXN0IGFuZCBzaG91bGQgYmUgY29udHJvbGxhYmxlICovCisgIGN0cmwgPSBnc3RfY29udHJvbGxlcl9uZXcgKEdfT0JKRUNUIChlbGVtKSwgInVsb25nIiwgInVsb25nIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChjdHJsICE9IE5VTEwsIE5VTEwpOworCisgIC8qIGl0IHNob3VsZCBoYXZlIGJlZW4gYWRkZWQgYXQgbGVhc3Qgb25jZSwgbGV0IHJlbW92ZSBpdCAqLworICByZXMgPSBnc3RfY29udHJvbGxlcl9yZW1vdmVfcHJvcGVydGllcyAoY3RybCwgInVsb25nIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChyZXMsIE5VTEwpOworCisgIC8qIHJlbW92aW5nIGl0IGFnYWluIHNob3VsZCBub3Qgd29yayAqLworICByZXMgPSBnc3RfY29udHJvbGxlcl9yZW1vdmVfcHJvcGVydGllcyAoY3RybCwgInVsb25nIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzICghcmVzLCBOVUxMKTsKKworICBHU1RfSU5GTyAoImNvbnRyb2xsZXItPnJlZl9jb3VudD0lZCIsIEdfT0JKRUNUIChjdHJsKS0+cmVmX2NvdW50KTsKKyAgZ19vYmplY3RfdW5yZWYgKGN0cmwpOworICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiB0ZXN0cyBpZiB3ZSBjbGVhbnVwIHByb3Blcmx5ICovCitHU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9maW5hbGl6ZSkKK3sKKyAgR3N0Q29udHJvbGxlciAqY3RybDsKKyAgR3N0RWxlbWVudCAqZWxlbTsKKworICBnc3RfY29udHJvbGxlcl9pbml0IChOVUxMLCBOVUxMKTsKKworICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVzdG1vbm9zb3VyY2UiLCAidGVzdF9zb3VyY2UiKTsKKworICAvKiB0aGF0IHByb3BlcnR5IHNob3VsZCBleGlzdCBhbmQgc2hvdWxkIGJlIGNvbnRyb2xsYWJsZSAqLworICBjdHJsID0gZ3N0X2NvbnRyb2xsZXJfbmV3IChHX09CSkVDVCAoZWxlbSksICJ1bG9uZyIsIE5VTEwpOworICBmYWlsX3VubGVzcyAoY3RybCAhPSBOVUxMLCBOVUxMKTsKKworICAvKiBmcmVlIHRoZSBjb250cm9sbGVyICovCisgIGdfb2JqZWN0X3VucmVmIChjdHJsKTsKKworICAvKiBvYmplY3Qgc2hvdWxkbid0IGhhdmUgYSBjb250cm9sbGVyIGFueW1vcmUgKi8KKyAgY3RybCA9IGdzdF9vYmplY3RfZ2V0X2NvbnRyb2xsZXIgKEdfT0JKRUNUIChlbGVtKSk7CisgIGZhaWxfdW5sZXNzIChjdHJsID09IE5VTEwsIE5VTEwpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIHRlc3RzIGlmIHdlIGNsZWFudXAgcHJvcGVybHkgKi8KK0dTVF9TVEFSVF9URVNUIChjb250cm9sbGVyX2NvbnRyb2xzb3VyY2VfcmVmY291bnRzKQoreworICBHc3RDb250cm9sbGVyICpjdHJsOworICBHc3RFbGVtZW50ICplbGVtOworICBHc3RDb250cm9sU291cmNlICpjc291cmNlLCAqdGVzdF9jc291cmNlOworCisgIGdzdF9jb250cm9sbGVyX2luaXQgKE5VTEwsIE5VTEwpOworCisgIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0bW9ub3NvdXJjZSIsICJ0ZXN0X3NvdXJjZSIpOworCisgIC8qIHRoYXQgcHJvcGVydHkgc2hvdWxkIGV4aXN0IGFuZCBzaG91bGQgYmUgY29udHJvbGxhYmxlICovCisgIGN0cmwgPSBnc3RfY29udHJvbGxlcl9uZXcgKEdfT0JKRUNUIChlbGVtKSwgInVsb25nIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChjdHJsICE9IE5VTEwsIE5VTEwpOworCisgIGNzb3VyY2UgPSAoR3N0Q29udHJvbFNvdXJjZSAqKSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKCk7CisgIGZhaWxfdW5sZXNzIChjc291cmNlICE9IE5VTEwsIE5VTEwpOworCisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdfT0JKRUNUIChjc291cmNlKS0+cmVmX2NvdW50LCAxKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jb250cm9sbGVyX3NldF9jb250cm9sX3NvdXJjZSAoY3RybCwgInVsb25nIiwgY3NvdXJjZSkpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHX09CSkVDVCAoY3NvdXJjZSktPnJlZl9jb3VudCwgMik7CisKKyAgZ19vYmplY3RfdW5yZWYgKEdfT0JKRUNUIChjc291cmNlKSk7CisKKyAgdGVzdF9jc291cmNlID0gZ3N0X2NvbnRyb2xsZXJfZ2V0X2NvbnRyb2xfc291cmNlIChjdHJsLCAidWxvbmciKTsKKyAgZmFpbF91bmxlc3MgKHRlc3RfY3NvdXJjZSAhPSBOVUxMLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKHRlc3RfY3NvdXJjZSA9PSBjc291cmNlKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR19PQkpFQ1QgKGNzb3VyY2UpLT5yZWZfY291bnQsIDIpOworICBnX29iamVjdF91bnJlZiAoY3NvdXJjZSk7CisKKyAgLyogZnJlZSB0aGUgY29udHJvbGxlciAqLworICBnX29iamVjdF91bnJlZiAoY3RybCk7CisKKyAgLyogb2JqZWN0IHNob3VsZG4ndCBoYXZlIGEgY29udHJvbGxlciBhbnltb3JlICovCisgIGN0cmwgPSBnc3Rfb2JqZWN0X2dldF9jb250cm9sbGVyIChHX09CSkVDVCAoZWxlbSkpOworICBmYWlsX3VubGVzcyAoY3RybCA9PSBOVUxMLCBOVUxMKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiB0ZXN0cyBpZiB3ZSBkb24ndCBmYWlsIG9uIGVtcHR5IGNvbnRyb2xsZXJzICovCitHU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9jb250cm9sc291cmNlX2VtcHR5MSkKK3sKKyAgR3N0Q29udHJvbGxlciAqY3RybDsKKyAgR3N0RWxlbWVudCAqZWxlbTsKKyAgR3N0Q29udHJvbFNvdXJjZSAqY3NvdXJjZTsKKworICBnc3RfY29udHJvbGxlcl9pbml0IChOVUxMLCBOVUxMKTsKKworICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVzdG1vbm9zb3VyY2UiLCAidGVzdF9zb3VyY2UiKTsKKworICAvKiB0aGF0IHByb3BlcnR5IHNob3VsZCBleGlzdCBhbmQgc2hvdWxkIGJlIGNvbnRyb2xsYWJsZSAqLworICBjdHJsID0gZ3N0X2NvbnRyb2xsZXJfbmV3IChHX09CSkVDVCAoZWxlbSksICJ1bG9uZyIsIE5VTEwpOworICBmYWlsX3VubGVzcyAoY3RybCAhPSBOVUxMLCBOVUxMKTsKKworICBjc291cmNlID0gKEdzdENvbnRyb2xTb3VyY2UgKikgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfbmV3ICgpOworICBmYWlsX3VubGVzcyAoY3NvdXJjZSAhPSBOVUxMLCBOVUxMKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2NvbnRyb2xsZXJfc2V0X2NvbnRyb2xfc291cmNlIChjdHJsLCAidWxvbmciLCBjc291cmNlKSk7CisKKyAgLyogZG9uJ3QgZmFpbCBvbiBlbXB0eSBjb250cm9sIHBvaW50IGxpc3RzICovCisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAwICogR1NUX1NFQ09ORCk7CisKKyAgLyogdW5yZWYgb2JqZWN0cyAqLworICBnX29iamVjdF91bnJlZiAoY3NvdXJjZSk7CisgIGdfb2JqZWN0X3VucmVmIChjdHJsKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoZWxlbSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogdGVzdHMgaWYgd2UgZG9uJ3QgZmFpbCBvbiBjb250cm9sbGVycyB0aGF0IGFyZSBlbXB0eSBhZ2FpbiAqLworR1NUX1NUQVJUX1RFU1QgKGNvbnRyb2xsZXJfY29udHJvbHNvdXJjZV9lbXB0eTIpCit7CisgIEdzdENvbnRyb2xsZXIgKmN0cmw7CisgIEdzdEVsZW1lbnQgKmVsZW07CisgIEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlICpjc291cmNlOworICBHVmFsdWUgdmFsID0geyAwLCB9OworCisgIGdzdF9jb250cm9sbGVyX2luaXQgKE5VTEwsIE5VTEwpOworCisgIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0bW9ub3NvdXJjZSIsICJ0ZXN0X3NvdXJjZSIpOworCisgIC8qIHRoYXQgcHJvcGVydHkgc2hvdWxkIGV4aXN0IGFuZCBzaG91bGQgYmUgY29udHJvbGxhYmxlICovCisgIGN0cmwgPSBnc3RfY29udHJvbGxlcl9uZXcgKEdfT0JKRUNUIChlbGVtKSwgInVsb25nIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChjdHJsICE9IE5VTEwsIE5VTEwpOworCisgIGNzb3VyY2UgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKCk7CisgIGZhaWxfdW5sZXNzIChjc291cmNlICE9IE5VTEwsIE5VTEwpOworCisgIGZhaWxfdW5sZXNzIChnc3RfY29udHJvbGxlcl9zZXRfY29udHJvbF9zb3VyY2UgKGN0cmwsICJ1bG9uZyIsCisgICAgICAgICAgKEdzdENvbnRyb2xTb3VyY2UgKikgY3NvdXJjZSkpOworCisgIC8qIHNldCBjb250cm9sIHZhbHVlcyAqLworICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdfVFlQRV9VTE9ORyk7CisgIGdfdmFsdWVfc2V0X3Vsb25nICgmdmFsLCAwKTsKKyAgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0IChjc291cmNlLCAwICogR1NUX1NFQ09ORCwgJnZhbCk7CisKKyAgLyogLi4uIGFuZCB1bnNldCB0aGUgdmFsdWUgKi8KKyAgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfdW5zZXQgKGNzb3VyY2UsIDAgKiBHU1RfU0VDT05EKTsKKworICAvKiBkb24ndCBmYWlsIG9uIGVtcHR5IGNvbnRyb2wgcG9pbnQgbGlzdHMgKi8KKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDAgKiBHU1RfU0VDT05EKTsKKworICAvKiB1bnJlZiBvYmplY3RzICovCisgIGdfb2JqZWN0X3VucmVmIChjc291cmNlKTsKKyAgZ19vYmplY3RfdW5yZWYgKGN0cmwpOworICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiB0ZXN0IHRpbWVkIHZhbHVlIGhhbmRsaW5nIHdpdGhvdXQgaW50ZXJwb2xhdGlvbiAqLworR1NUX1NUQVJUX1RFU1QgKGNvbnRyb2xsZXJfaW50ZXJwb2xhdGVfbm9uZSkKK3sKKyAgR3N0Q29udHJvbGxlciAqY3RybDsKKyAgR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UgKmNzb3VyY2U7CisgIEdzdEVsZW1lbnQgKmVsZW07CisgIGdib29sZWFuIHJlczsKKyAgR1ZhbHVlIHZhbF91bG9uZyA9IHsgMCwgfTsKKworICBnc3RfY29udHJvbGxlcl9pbml0IChOVUxMLCBOVUxMKTsKKworICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVzdG1vbm9zb3VyY2UiLCAidGVzdF9zb3VyY2UiKTsKKworICAvKiB0aGF0IHByb3BlcnR5IHNob3VsZCBleGlzdCBhbmQgc2hvdWxkIGJlIGNvbnRyb2xsYWJsZSAqLworICBjdHJsID0gZ3N0X2NvbnRyb2xsZXJfbmV3IChHX09CSkVDVCAoZWxlbSksICJ1bG9uZyIsIE5VTEwpOworICBmYWlsX3VubGVzcyAoY3RybCAhPSBOVUxMLCBOVUxMKTsKKworICAvKiBHZXQgaW50ZXJwb2xhdGlvbiBjb250cm9sIHNvdXJjZSAqLworICBjc291cmNlID0gZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfbmV3ICgpOworCisgIGZhaWxfdW5sZXNzIChjc291cmNlICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2NvbnRyb2xsZXJfc2V0X2NvbnRyb2xfc291cmNlIChjdHJsLCAidWxvbmciLAorICAgICAgICAgIEdTVF9DT05UUk9MX1NPVVJDRSAoY3NvdXJjZSkpKTsKKworICAvKiBzZXQgaW50ZXJwb2xhdGlvbiBtb2RlICovCisgIGZhaWxfdW5sZXNzIChnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXRfaW50ZXJwb2xhdGlvbl9tb2RlIChjc291cmNlLAorICAgICAgICAgIEdTVF9JTlRFUlBPTEFURV9OT05FKSk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2dldF9jb3VudCAoY3NvdXJjZSkgPT0gMCk7CisKKyAgLyogc2V0IGNvbnRyb2wgdmFsdWVzICovCisgIGdfdmFsdWVfaW5pdCAoJnZhbF91bG9uZywgR19UWVBFX1VMT05HKTsKKyAgZ192YWx1ZV9zZXRfdWxvbmcgKCZ2YWxfdWxvbmcsIDApOworICByZXMgPQorICAgICAgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0IChjc291cmNlLCAwICogR1NUX1NFQ09ORCwKKyAgICAgICZ2YWxfdWxvbmcpOworICBmYWlsX3VubGVzcyAocmVzLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2dldF9jb3VudCAoY3NvdXJjZSkgPT0gMSk7CisgIGdfdmFsdWVfc2V0X3Vsb25nICgmdmFsX3Vsb25nLCAxMDApOworICByZXMgPQorICAgICAgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0IChjc291cmNlLCAyICogR1NUX1NFQ09ORCwKKyAgICAgICZ2YWxfdWxvbmcpOworICBmYWlsX3VubGVzcyAocmVzLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2dldF9jb3VudCAoY3NvdXJjZSkgPT0gMik7CisKKyAgZ19vYmplY3RfdW5yZWYgKEdfT0JKRUNUIChjc291cmNlKSk7CisKKyAgLyogbm93IHB1bGwgaW4gdmFsdWVzIGZvciBzb21lIHRpbWVzdGFtcHMgKi8KKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDAgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMSAqIEdTVF9TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAyICogR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAxMDApOworCisgIEdTVF9JTkZPICgiY29udHJvbGxlci0+cmVmX2NvdW50PSVkIiwgR19PQkpFQ1QgKGN0cmwpLT5yZWZfY291bnQpOworICBnX29iamVjdF91bnJlZiAoY3RybCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIHRlc3QgdGltZWQgdmFsdWUgaGFuZGxpbmcgaW4gdHJpZ2dlciBtb2RlICovCitHU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9pbnRlcnBvbGF0ZV90cmlnZ2VyKQoreworICBHc3RDb250cm9sbGVyICpjdHJsOworICBHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSAqY3NvdXJjZTsKKyAgR3N0RWxlbWVudCAqZWxlbTsKKyAgZ2Jvb2xlYW4gcmVzOworICBHVmFsdWUgdmFsX3Vsb25nID0geyAwLCB9OworCisgIGdzdF9jb250cm9sbGVyX2luaXQgKE5VTEwsIE5VTEwpOworCisgIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0bW9ub3NvdXJjZSIsICJ0ZXN0X3NvdXJjZSIpOworCisgIC8qIHRoYXQgcHJvcGVydHkgc2hvdWxkIGV4aXN0IGFuZCBzaG91bGQgYmUgY29udHJvbGxhYmxlICovCisgIGN0cmwgPSBnc3RfY29udHJvbGxlcl9uZXcgKEdfT0JKRUNUIChlbGVtKSwgInVsb25nIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChjdHJsICE9IE5VTEwsIE5VTEwpOworCisgIC8qIEdldCBpbnRlcnBvbGF0aW9uIGNvbnRyb2wgc291cmNlICovCisgIGNzb3VyY2UgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKCk7CisKKyAgZmFpbF91bmxlc3MgKGNzb3VyY2UgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfY29udHJvbGxlcl9zZXRfY29udHJvbF9zb3VyY2UgKGN0cmwsICJ1bG9uZyIsCisgICAgICAgICAgR1NUX0NPTlRST0xfU09VUkNFIChjc291cmNlKSkpOworCisgIC8qIHNldCBpbnRlcnBvbGF0aW9uIG1vZGUgKi8KKyAgZmFpbF91bmxlc3MgKGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldF9pbnRlcnBvbGF0aW9uX21vZGUgKGNzb3VyY2UsCisgICAgICAgICAgR1NUX0lOVEVSUE9MQVRFX1RSSUdHRVIpKTsKKworICBnX3ZhbHVlX2luaXQgKCZ2YWxfdWxvbmcsIEdfVFlQRV9VTE9ORyk7CisgIGZhaWxfaWYgKGdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWUgKEdTVF9DT05UUk9MX1NPVVJDRSAoY3NvdXJjZSksCisgICAgICAgICAgMCAqIEdTVF9TRUNPTkQsICZ2YWxfdWxvbmcpKTsKKworICAvKiBzZXQgY29udHJvbCB2YWx1ZXMgKi8KKyAgZ192YWx1ZV9zZXRfdWxvbmcgKCZ2YWxfdWxvbmcsIDUwKTsKKyAgcmVzID0KKyAgICAgIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldCAoY3NvdXJjZSwgMCAqIEdTVF9TRUNPTkQsCisgICAgICAmdmFsX3Vsb25nKTsKKyAgZmFpbF91bmxlc3MgKHJlcywgTlVMTCk7CisgIGdfdmFsdWVfc2V0X3Vsb25nICgmdmFsX3Vsb25nLCAxMDApOworICByZXMgPQorICAgICAgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0IChjc291cmNlLCAyICogR1NUX1NFQ09ORCwKKyAgICAgICZ2YWxfdWxvbmcpOworICBmYWlsX3VubGVzcyAocmVzLCBOVUxMKTsKKworCisgIC8qIG5vdyBwdWxsIGluIHZhbHVlcyBmb3Igc29tZSB0aW1lc3RhbXBzICovCisgIGZhaWxfdW5sZXNzIChnc3RfY29udHJvbF9zb3VyY2VfZ2V0X3ZhbHVlIChHU1RfQ09OVFJPTF9TT1VSQ0UgKGNzb3VyY2UpLAorICAgICAgICAgIDAgKiBHU1RfU0VDT05ELCAmdmFsX3Vsb25nKSk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAwICogR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCA1MCk7CisgIGZhaWxfdW5sZXNzIChnc3RfY29udHJvbF9zb3VyY2VfZ2V0X3ZhbHVlIChHU1RfQ09OVFJPTF9TT1VSQ0UgKGNzb3VyY2UpLAorICAgICAgICAgIDEgKiBHU1RfU0VDT05ELCAmdmFsX3Vsb25nKSk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxICogR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAwKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWUgKEdTVF9DT05UUk9MX1NPVVJDRSAoY3NvdXJjZSksCisgICAgICAgICAgMiAqIEdTVF9TRUNPTkQsICZ2YWxfdWxvbmcpKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDIgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDEwMCk7CisKKyAgR1NUX0lORk8gKCJjb250cm9sbGVyLT5yZWZfY291bnQ9JWQiLCBHX09CSkVDVCAoY3RybCktPnJlZl9jb3VudCk7CisgIGdfb2JqZWN0X3VucmVmIChHX09CSkVDVCAoY3NvdXJjZSkpOworICBnX29iamVjdF91bnJlZiAoY3RybCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIHRlc3QgdGltZWQgdmFsdWUgaGFuZGxpbmcgd2l0aCBsaW5lYXIgaW50ZXJwb2xhdGlvbiAqLworR1NUX1NUQVJUX1RFU1QgKGNvbnRyb2xsZXJfaW50ZXJwb2xhdGVfbGluZWFyKQoreworICBHc3RDb250cm9sbGVyICpjdHJsOworICBHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSAqY3NvdXJjZTsKKyAgR3N0RWxlbWVudCAqZWxlbTsKKyAgZ2Jvb2xlYW4gcmVzOworICBHVmFsdWUgdmFsX3Vsb25nID0geyAwLCB9OworCisgIGdzdF9jb250cm9sbGVyX2luaXQgKE5VTEwsIE5VTEwpOworCisgIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0bW9ub3NvdXJjZSIsICJ0ZXN0X3NvdXJjZSIpOworCisgIC8qIHRoYXQgcHJvcGVydHkgc2hvdWxkIGV4aXN0IGFuZCBzaG91bGQgYmUgY29udHJvbGxhYmxlICovCisgIGN0cmwgPSBnc3RfY29udHJvbGxlcl9uZXcgKEdfT0JKRUNUIChlbGVtKSwgInVsb25nIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChjdHJsICE9IE5VTEwsIE5VTEwpOworCisgIC8qIEdldCBpbnRlcnBvbGF0aW9uIGNvbnRyb2wgc291cmNlICovCisgIGNzb3VyY2UgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKCk7CisKKyAgZmFpbF91bmxlc3MgKGNzb3VyY2UgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfY29udHJvbGxlcl9zZXRfY29udHJvbF9zb3VyY2UgKGN0cmwsICJ1bG9uZyIsCisgICAgICAgICAgR1NUX0NPTlRST0xfU09VUkNFIChjc291cmNlKSkpOworCisgIC8qIHNldCBpbnRlcnBvbGF0aW9uIG1vZGUgKi8KKyAgZmFpbF91bmxlc3MgKGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldF9pbnRlcnBvbGF0aW9uX21vZGUgKGNzb3VyY2UsCisgICAgICAgICAgR1NUX0lOVEVSUE9MQVRFX0xJTkVBUikpOworCisgIC8qIHNldCBjb250cm9sIHZhbHVlcyAqLworICBnX3ZhbHVlX2luaXQgKCZ2YWxfdWxvbmcsIEdfVFlQRV9VTE9ORyk7CisgIGdfdmFsdWVfc2V0X3Vsb25nICgmdmFsX3Vsb25nLCAwKTsKKyAgcmVzID0KKyAgICAgIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldCAoY3NvdXJjZSwgMCAqIEdTVF9TRUNPTkQsCisgICAgICAmdmFsX3Vsb25nKTsKKyAgZmFpbF91bmxlc3MgKHJlcywgTlVMTCk7CisgIGdfdmFsdWVfc2V0X3Vsb25nICgmdmFsX3Vsb25nLCAxMDApOworICByZXMgPQorICAgICAgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0IChjc291cmNlLCAyICogR1NUX1NFQ09ORCwKKyAgICAgICZ2YWxfdWxvbmcpOworICBmYWlsX3VubGVzcyAocmVzLCBOVUxMKTsKKworICBnX29iamVjdF91bnJlZiAoR19PQkpFQ1QgKGNzb3VyY2UpKTsKKworICAvKiBub3cgcHVsbCBpbiB2YWx1ZXMgZm9yIHNvbWUgdGltZXN0YW1wcyAqLworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMCAqIEdTVF9TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxICogR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCA1MCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAyICogR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAxMDApOworCisgIEdTVF9JTkZPICgiY29udHJvbGxlci0+cmVmX2NvdW50PSVkIiwgR19PQkpFQ1QgKGN0cmwpLT5yZWZfY291bnQpOworICBnX29iamVjdF91bnJlZiAoY3RybCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIHRlc3QgdGltZWQgdmFsdWUgaGFuZGxpbmcgd2l0aCBjdWJpYyBpbnRlcnBvbGF0aW9uICovCitHU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9pbnRlcnBvbGF0ZV9jdWJpYykKK3sKKyAgR3N0Q29udHJvbGxlciAqY3RybDsKKyAgR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UgKmNzb3VyY2U7CisgIEdzdEVsZW1lbnQgKmVsZW07CisgIGdib29sZWFuIHJlczsKKyAgR1ZhbHVlIHZhbF9kb3VibGUgPSB7IDAsIH07CisKKyAgZ3N0X2NvbnRyb2xsZXJfaW5pdCAoTlVMTCwgTlVMTCk7CisKKyAgZWxlbSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlc3Rtb25vc291cmNlIiwgInRlc3Rfc291cmNlIik7CisKKyAgLyogdGhhdCBwcm9wZXJ0eSBzaG91bGQgZXhpc3QgYW5kIHNob3VsZCBiZSBjb250cm9sbGFibGUgKi8KKyAgY3RybCA9IGdzdF9jb250cm9sbGVyX25ldyAoR19PQkpFQ1QgKGVsZW0pLCAiZG91YmxlIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChjdHJsICE9IE5VTEwsIE5VTEwpOworCisgIC8qIEdldCBpbnRlcnBvbGF0aW9uIGNvbnRyb2wgc291cmNlICovCisgIGNzb3VyY2UgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKCk7CisKKyAgZmFpbF91bmxlc3MgKGNzb3VyY2UgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfY29udHJvbGxlcl9zZXRfY29udHJvbF9zb3VyY2UgKGN0cmwsICJkb3VibGUiLAorICAgICAgICAgIEdTVF9DT05UUk9MX1NPVVJDRSAoY3NvdXJjZSkpKTsKKworICAvKiBzZXQgaW50ZXJwb2xhdGlvbiBtb2RlICovCisgIGZhaWxfdW5sZXNzIChnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXRfaW50ZXJwb2xhdGlvbl9tb2RlIChjc291cmNlLAorICAgICAgICAgIEdTVF9JTlRFUlBPTEFURV9DVUJJQykpOworCisgIC8qIHNldCBjb250cm9sIHZhbHVlcyAqLworICBnX3ZhbHVlX2luaXQgKCZ2YWxfZG91YmxlLCBHX1RZUEVfRE9VQkxFKTsKKyAgZ192YWx1ZV9zZXRfZG91YmxlICgmdmFsX2RvdWJsZSwgMC4wKTsKKyAgcmVzID0KKyAgICAgIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldCAoY3NvdXJjZSwgMCAqIEdTVF9TRUNPTkQsCisgICAgICAmdmFsX2RvdWJsZSk7CisgIGZhaWxfdW5sZXNzIChyZXMsIE5VTEwpOworICBnX3ZhbHVlX3NldF9kb3VibGUgKCZ2YWxfZG91YmxlLCA1LjApOworICByZXMgPQorICAgICAgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0IChjc291cmNlLCAxICogR1NUX1NFQ09ORCwKKyAgICAgICZ2YWxfZG91YmxlKTsKKyAgZmFpbF91bmxlc3MgKHJlcywgTlVMTCk7CisgIGdfdmFsdWVfc2V0X2RvdWJsZSAoJnZhbF9kb3VibGUsIDIuMCk7CisgIHJlcyA9CisgICAgICBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXQgKGNzb3VyY2UsIDIgKiBHU1RfU0VDT05ELAorICAgICAgJnZhbF9kb3VibGUpOworICBmYWlsX3VubGVzcyAocmVzLCBOVUxMKTsKKyAgZ192YWx1ZV9zZXRfZG91YmxlICgmdmFsX2RvdWJsZSwgOC4wKTsKKyAgcmVzID0KKyAgICAgIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldCAoY3NvdXJjZSwgNCAqIEdTVF9TRUNPTkQsCisgICAgICAmdmFsX2RvdWJsZSk7CisgIGZhaWxfdW5sZXNzIChyZXMsIE5VTEwpOworCisgIGdfb2JqZWN0X3VucmVmIChHX09CSkVDVCAoY3NvdXJjZSkpOworCisgIC8qIG5vdyBwdWxsIGluIHZhbHVlcyBmb3Igc29tZSB0aW1lc3RhbXBzICovCisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAwICogR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfZG91YmxlLCAwLjApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMSAqIEdTVF9TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX2RvdWJsZSwgNS4wKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDIgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF9kb3VibGUsIDIuMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAzICogR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzIChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF9kb3VibGUgPiAyLjAgJiYKKyAgICAgIEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX2RvdWJsZSA8IDguMCwgTlVMTCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCA0ICogR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfZG91YmxlLCA4LjApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgNSAqIEdTVF9TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX2RvdWJsZSwgOC4wKTsKKworICBHU1RfSU5GTyAoImNvbnRyb2xsZXItPnJlZl9jb3VudD0lZCIsIEdfT0JKRUNUIChjdHJsKS0+cmVmX2NvdW50KTsKKyAgZ19vYmplY3RfdW5yZWYgKGN0cmwpOworICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiB0ZXN0IHRpbWVkIHZhbHVlIGhhbmRsaW5nIHdpdGggY3ViaWMgaW50ZXJwb2xhdGlvbiAqLworR1NUX1NUQVJUX1RFU1QgKGNvbnRyb2xsZXJfaW50ZXJwb2xhdGVfY3ViaWNfdG9vX2Zld19jcCkKK3sKKyAgR3N0Q29udHJvbGxlciAqY3RybDsKKyAgR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UgKmNzb3VyY2U7CisgIEdzdEVsZW1lbnQgKmVsZW07CisgIGdib29sZWFuIHJlczsKKyAgR1ZhbHVlIHZhbF9kb3VibGUgPSB7IDAsIH07CisKKyAgZ3N0X2NvbnRyb2xsZXJfaW5pdCAoTlVMTCwgTlVMTCk7CisKKyAgZWxlbSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlc3Rtb25vc291cmNlIiwgInRlc3Rfc291cmNlIik7CisKKyAgLyogdGhhdCBwcm9wZXJ0eSBzaG91bGQgZXhpc3QgYW5kIHNob3VsZCBiZSBjb250cm9sbGFibGUgKi8KKyAgY3RybCA9IGdzdF9jb250cm9sbGVyX25ldyAoR19PQkpFQ1QgKGVsZW0pLCAiZG91YmxlIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChjdHJsICE9IE5VTEwsIE5VTEwpOworCisgIC8qIEdldCBpbnRlcnBvbGF0aW9uIGNvbnRyb2wgc291cmNlICovCisgIGNzb3VyY2UgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKCk7CisKKyAgZmFpbF91bmxlc3MgKGNzb3VyY2UgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfY29udHJvbGxlcl9zZXRfY29udHJvbF9zb3VyY2UgKGN0cmwsICJkb3VibGUiLAorICAgICAgICAgIEdTVF9DT05UUk9MX1NPVVJDRSAoY3NvdXJjZSkpKTsKKworICAvKiBzZXQgaW50ZXJwb2xhdGlvbiBtb2RlICovCisgIGZhaWxfdW5sZXNzIChnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXRfaW50ZXJwb2xhdGlvbl9tb2RlIChjc291cmNlLAorICAgICAgICAgIEdTVF9JTlRFUlBPTEFURV9DVUJJQykpOworCisgIC8qIHNldCAyIGNvbnRyb2wgdmFsdWVzICovCisgIGdfdmFsdWVfaW5pdCAoJnZhbF9kb3VibGUsIEdfVFlQRV9ET1VCTEUpOworICBnX3ZhbHVlX3NldF9kb3VibGUgKCZ2YWxfZG91YmxlLCAwLjApOworICByZXMgPQorICAgICAgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0IChjc291cmNlLCAwICogR1NUX1NFQ09ORCwKKyAgICAgICZ2YWxfZG91YmxlKTsKKyAgZmFpbF91bmxlc3MgKHJlcywgTlVMTCk7CisgIGdfdmFsdWVfc2V0X2RvdWJsZSAoJnZhbF9kb3VibGUsIDQuMCk7CisgIHJlcyA9CisgICAgICBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXQgKGNzb3VyY2UsIDIgKiBHU1RfU0VDT05ELAorICAgICAgJnZhbF9kb3VibGUpOworICBmYWlsX3VubGVzcyAocmVzLCBOVUxMKTsKKworICBnX29iamVjdF91bnJlZiAoR19PQkpFQ1QgKGNzb3VyY2UpKTsKKworICAvKiBub3cgcHVsbCBpbiB2YWx1ZXMgZm9yIHNvbWUgdGltZXN0YW1wcyBhbmQgdmVyaWZ5IHRoYXQgaXQgdXNlZCBsaW5lYXIKKyAgICogaW50ZXJwb2xhdGlvbiBhcyB3ZSBkb24ndCBnYXZlIGVub3VnaCBjb250cm9sIHBvaW50cworICAgKi8KKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDAgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF9kb3VibGUsIDAuMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxICogR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfZG91YmxlLCAyLjApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMiAqIEdTVF9TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX2RvdWJsZSwgNC4wKTsKKworICBHU1RfSU5GTyAoImNvbnRyb2xsZXItPnJlZl9jb3VudD0lZCIsIEdfT0JKRUNUIChjdHJsKS0+cmVmX2NvdW50KTsKKyAgZ19vYmplY3RfdW5yZWYgKGN0cmwpOworICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiBtYWtlIHN1cmUgd2UgZG9uJ3QgY3Jhc2ggd2hlbiBzb21lb25lIHNldHMgYW4gdW5zdXBwb3J0ZWQgaW50ZXJwb2xhdGlvbgorICogbW9kZSAqLworR1NUX1NUQVJUX1RFU1QgKGNvbnRyb2xsZXJfaW50ZXJwb2xhdGVfdW5pbXBsZW1lbnRlZCkKK3sKKyAgR3N0Q29udHJvbGxlciAqY3RybDsKKyAgR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UgKmNzb3VyY2U7CisgIEdzdEVsZW1lbnQgKmVsZW07CisKKyAgZ3N0X2NvbnRyb2xsZXJfaW5pdCAoTlVMTCwgTlVMTCk7CisKKyAgZWxlbSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlc3Rtb25vc291cmNlIiwgInRlc3Rfc291cmNlIik7CisKKyAgLyogdGhhdCBwcm9wZXJ0eSBzaG91bGQgZXhpc3QgYW5kIHNob3VsZCBiZSBjb250cm9sbGFibGUgKi8KKyAgY3RybCA9IGdzdF9jb250cm9sbGVyX25ldyAoR19PQkpFQ1QgKGVsZW0pLCAidWxvbmciLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGN0cmwgIT0gTlVMTCwgTlVMTCk7CisKKyAgLyogR2V0IGludGVycG9sYXRpb24gY29udHJvbCBzb3VyY2UgKi8KKyAgY3NvdXJjZSA9IGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX25ldyAoKTsKKworICBmYWlsX3VubGVzcyAoY3NvdXJjZSAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jb250cm9sbGVyX3NldF9jb250cm9sX3NvdXJjZSAoY3RybCwgInVsb25nIiwKKyAgICAgICAgICBHU1RfQ09OVFJPTF9TT1VSQ0UgKGNzb3VyY2UpKSk7CisKKyAgLyogc2V0IGNvbXBsZXRlbHkgYm9ndXMgaW50ZXJwb2xhdGlvbiBtb2RlICovCisgIGZhaWxfaWYgKGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldF9pbnRlcnBvbGF0aW9uX21vZGUgKGNzb3VyY2UsCisgICAgICAgICAgKEdzdEludGVycG9sYXRlTW9kZSkgOTM4NzEpKTsKKworICBnX29iamVjdF91bnJlZiAoR19PQkpFQ1QgKGNzb3VyY2UpKTsKKworICBnX29iamVjdF91bnJlZiAoY3RybCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIHRlc3QgX3Vuc2V0KCkgKi8KK0dTVF9TVEFSVF9URVNUIChjb250cm9sbGVyX2ludGVycG9sYXRpb25fdW5zZXQpCit7CisgIEdzdENvbnRyb2xsZXIgKmN0cmw7CisgIEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlICpjc291cmNlOworICBHc3RFbGVtZW50ICplbGVtOworICBnYm9vbGVhbiByZXM7CisgIEdWYWx1ZSB2YWxfdWxvbmcgPSB7IDAsIH07CisKKyAgZ3N0X2NvbnRyb2xsZXJfaW5pdCAoTlVMTCwgTlVMTCk7CisKKyAgZWxlbSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlc3Rtb25vc291cmNlIiwgInRlc3Rfc291cmNlIik7CisKKyAgLyogdGhhdCBwcm9wZXJ0eSBzaG91bGQgZXhpc3QgYW5kIHNob3VsZCBiZSBjb250cm9sbGFibGUgKi8KKyAgY3RybCA9IGdzdF9jb250cm9sbGVyX25ldyAoR19PQkpFQ1QgKGVsZW0pLCAidWxvbmciLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGN0cmwgIT0gTlVMTCwgTlVMTCk7CisKKyAgLyogR2V0IGludGVycG9sYXRpb24gY29udHJvbCBzb3VyY2UgKi8KKyAgY3NvdXJjZSA9IGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX25ldyAoKTsKKworICBmYWlsX3VubGVzcyAoY3NvdXJjZSAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jb250cm9sbGVyX3NldF9jb250cm9sX3NvdXJjZSAoY3RybCwgInVsb25nIiwKKyAgICAgICAgICBHU1RfQ09OVFJPTF9TT1VSQ0UgKGNzb3VyY2UpKSk7CisKKyAgLyogc2V0IGludGVycG9sYXRpb24gbW9kZSAqLworICBmYWlsX3VubGVzcyAoZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0X2ludGVycG9sYXRpb25fbW9kZSAoY3NvdXJjZSwKKyAgICAgICAgICBHU1RfSU5URVJQT0xBVEVfTk9ORSkpOworCisgIC8qIHNldCBjb250cm9sIHZhbHVlcyAqLworICBnX3ZhbHVlX2luaXQgKCZ2YWxfdWxvbmcsIEdfVFlQRV9VTE9ORyk7CisgIGdfdmFsdWVfc2V0X3Vsb25nICgmdmFsX3Vsb25nLCAwKTsKKyAgcmVzID0KKyAgICAgIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldCAoY3NvdXJjZSwgMCAqIEdTVF9TRUNPTkQsCisgICAgICAmdmFsX3Vsb25nKTsKKyAgZmFpbF91bmxlc3MgKHJlcywgTlVMTCk7CisgIGdfdmFsdWVfc2V0X3Vsb25nICgmdmFsX3Vsb25nLCAxMDApOworICByZXMgPQorICAgICAgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0IChjc291cmNlLCAxICogR1NUX1NFQ09ORCwKKyAgICAgICZ2YWxfdWxvbmcpOworICBmYWlsX3VubGVzcyAocmVzLCBOVUxMKTsKKyAgZ192YWx1ZV9zZXRfdWxvbmcgKCZ2YWxfdWxvbmcsIDUwKTsKKyAgcmVzID0KKyAgICAgIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldCAoY3NvdXJjZSwgMiAqIEdTVF9TRUNPTkQsCisgICAgICAmdmFsX3Vsb25nKTsKKyAgZmFpbF91bmxlc3MgKHJlcywgTlVMTCk7CisKKyAgLyogdmVyaWZ5IHZhbHVlcyAqLworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMCAqIEdTVF9TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxICogR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAxMDApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMiAqIEdTVF9TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgNTApOworCisgIC8qIHVuc2V0IHNlY29uZCAqLworICByZXMgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV91bnNldCAoY3NvdXJjZSwgMSAqIEdTVF9TRUNPTkQpOworICBmYWlsX3VubGVzcyAocmVzLCBOVUxMKTsKKworICAvKiB2ZXJpZnkgdmFsdWUgYWdhaW4gKi8KKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDEgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMiAqIEdTVF9TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgNTApOworCisgIC8qIHVuc2V0IGFsbCB2YWx1ZXMsIHJlc2V0IGFuZCB0cnkgdG8gdW5zZXQgYWdhaW4gKi8KKyAgZmFpbF91bmxlc3MgKGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3Vuc2V0IChjc291cmNlLAorICAgICAgICAgIDAgKiBHU1RfU0VDT05EKSk7CisgIGZhaWxfdW5sZXNzIChnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV91bnNldCAoY3NvdXJjZSwKKyAgICAgICAgICAyICogR1NUX1NFQ09ORCkpOworICBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV91bnNldF9hbGwgKGNzb3VyY2UpOworICBmYWlsX2lmIChnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV91bnNldCAoY3NvdXJjZSwgMiAqIEdTVF9TRUNPTkQpKTsKKworICBnX29iamVjdF91bnJlZiAoY3NvdXJjZSk7CisKKyAgR1NUX0lORk8gKCJjb250cm9sbGVyLT5yZWZfY291bnQ9JWQiLCBHX09CSkVDVCAoY3RybCktPnJlZl9jb3VudCk7CisgIGdfb2JqZWN0X3VucmVmIChjdHJsKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoZWxlbSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogdGVzdCBfdW5zZXRfYWxsKCkgKi8KK0dTVF9TVEFSVF9URVNUIChjb250cm9sbGVyX2ludGVycG9sYXRpb25fdW5zZXRfYWxsKQoreworICBHc3RDb250cm9sbGVyICpjdHJsOworICBHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSAqY3NvdXJjZTsKKyAgR3N0RWxlbWVudCAqZWxlbTsKKyAgZ2Jvb2xlYW4gcmVzOworICBHVmFsdWUgdmFsX3Vsb25nID0geyAwLCB9OworCisgIGdzdF9jb250cm9sbGVyX2luaXQgKE5VTEwsIE5VTEwpOworCisgIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0bW9ub3NvdXJjZSIsICJ0ZXN0X3NvdXJjZSIpOworCisgIC8qIHRoYXQgcHJvcGVydHkgc2hvdWxkIGV4aXN0IGFuZCBzaG91bGQgYmUgY29udHJvbGxhYmxlICovCisgIGN0cmwgPSBnc3RfY29udHJvbGxlcl9uZXcgKEdfT0JKRUNUIChlbGVtKSwgInVsb25nIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChjdHJsICE9IE5VTEwsIE5VTEwpOworCisgIC8qIEdldCBpbnRlcnBvbGF0aW9uIGNvbnRyb2wgc291cmNlICovCisgIGNzb3VyY2UgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKCk7CisKKyAgZmFpbF91bmxlc3MgKGNzb3VyY2UgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfY29udHJvbGxlcl9zZXRfY29udHJvbF9zb3VyY2UgKGN0cmwsICJ1bG9uZyIsCisgICAgICAgICAgR1NUX0NPTlRST0xfU09VUkNFIChjc291cmNlKSkpOworCisgIC8qIHNldCBpbnRlcnBvbGF0aW9uIG1vZGUgKi8KKyAgZmFpbF91bmxlc3MgKGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldF9pbnRlcnBvbGF0aW9uX21vZGUgKGNzb3VyY2UsCisgICAgICAgICAgR1NUX0lOVEVSUE9MQVRFX05PTkUpKTsKKworICAvKiBzZXQgY29udHJvbCB2YWx1ZXMgKi8KKyAgZ192YWx1ZV9pbml0ICgmdmFsX3Vsb25nLCBHX1RZUEVfVUxPTkcpOworICBnX3ZhbHVlX3NldF91bG9uZyAoJnZhbF91bG9uZywgMCk7CisgIHJlcyA9CisgICAgICBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXQgKGNzb3VyY2UsIDAgKiBHU1RfU0VDT05ELAorICAgICAgJnZhbF91bG9uZyk7CisgIGZhaWxfdW5sZXNzIChyZXMsIE5VTEwpOworICBnX3ZhbHVlX3NldF91bG9uZyAoJnZhbF91bG9uZywgMTAwKTsKKyAgcmVzID0KKyAgICAgIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldCAoY3NvdXJjZSwgMSAqIEdTVF9TRUNPTkQsCisgICAgICAmdmFsX3Vsb25nKTsKKyAgZmFpbF91bmxlc3MgKHJlcywgTlVMTCk7CisKKyAgLyogdmVyaWZ5IHZhbHVlcyAqLworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMCAqIEdTVF9TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxICogR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAxMDApOworCisgIC8qIHVuc2V0IGFsbCAqLworICBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV91bnNldF9hbGwgKGNzb3VyY2UpOworCisgIGdfb2JqZWN0X3VucmVmIChjc291cmNlKTsKKworICAvKiB2ZXJpZnkgdmFsdWUgYWdhaW4gKi8KKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDEgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDApOworCisgIEdTVF9JTkZPICgiY29udHJvbGxlci0+cmVmX2NvdW50PSVkIiwgR19PQkpFQ1QgKGN0cmwpLT5yZWZfY291bnQpOworICBnX29iamVjdF91bnJlZiAoY3RybCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIHRlc3QgcmV0cmlldmFsIG9mIGFuIGFycmF5IG9mIHZhbHVlcyB3aXRoIGdldF92YWx1ZV9hcnJheSgpICovCitHU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9pbnRlcnBvbGF0aW9uX2xpbmVhcl92YWx1ZV9hcnJheSkKK3sKKyAgR3N0Q29udHJvbGxlciAqY3RybDsKKyAgR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UgKmNzb3VyY2U7CisgIEdzdEVsZW1lbnQgKmVsZW07CisgIGdib29sZWFuIHJlczsKKyAgR1ZhbHVlIHZhbF91bG9uZyA9IHsgMCwgfTsKKyAgR3N0VmFsdWVBcnJheSB2YWx1ZXMgPSB7IE5VTEwsIH07CisKKyAgZ3N0X2NvbnRyb2xsZXJfaW5pdCAoTlVMTCwgTlVMTCk7CisKKyAgZWxlbSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlc3Rtb25vc291cmNlIiwgInRlc3Rfc291cmNlIik7CisKKyAgLyogdGhhdCBwcm9wZXJ0eSBzaG91bGQgZXhpc3QgYW5kIHNob3VsZCBiZSBjb250cm9sbGFibGUgKi8KKyAgY3RybCA9IGdzdF9jb250cm9sbGVyX25ldyAoR19PQkpFQ1QgKGVsZW0pLCAidWxvbmciLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGN0cmwgIT0gTlVMTCwgTlVMTCk7CisKKyAgLyogR2V0IGludGVycG9sYXRpb24gY29udHJvbCBzb3VyY2UgKi8KKyAgY3NvdXJjZSA9IGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX25ldyAoKTsKKworICBmYWlsX3VubGVzcyAoY3NvdXJjZSAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jb250cm9sbGVyX3NldF9jb250cm9sX3NvdXJjZSAoY3RybCwgInVsb25nIiwKKyAgICAgICAgICBHU1RfQ09OVFJPTF9TT1VSQ0UgKGNzb3VyY2UpKSk7CisKKyAgLyogc2V0IGludGVycG9sYXRpb24gbW9kZSAqLworICBmYWlsX3VubGVzcyAoZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0X2ludGVycG9sYXRpb25fbW9kZSAoY3NvdXJjZSwKKyAgICAgICAgICBHU1RfSU5URVJQT0xBVEVfTElORUFSKSk7CisKKyAgLyogc2V0IGNvbnRyb2wgdmFsdWVzICovCisgIGdfdmFsdWVfaW5pdCAoJnZhbF91bG9uZywgR19UWVBFX1VMT05HKTsKKyAgZ192YWx1ZV9zZXRfdWxvbmcgKCZ2YWxfdWxvbmcsIDApOworICByZXMgPQorICAgICAgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0IChjc291cmNlLCAwICogR1NUX1NFQ09ORCwKKyAgICAgICZ2YWxfdWxvbmcpOworICBmYWlsX3VubGVzcyAocmVzLCBOVUxMKTsKKyAgZ192YWx1ZV9zZXRfdWxvbmcgKCZ2YWxfdWxvbmcsIDEwMCk7CisgIHJlcyA9CisgICAgICBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXQgKGNzb3VyY2UsIDIgKiBHU1RfU0VDT05ELAorICAgICAgJnZhbF91bG9uZyk7CisgIGZhaWxfdW5sZXNzIChyZXMsIE5VTEwpOworCisgIC8qIG5vdyBwdWxsIGluIHZhbHVlcyBmb3Igc29tZSB0aW1lc3RhbXBzICovCisgIHZhbHVlcy5wcm9wZXJ0eV9uYW1lID0gKGNoYXIgKikgInVsb25nIjsKKyAgdmFsdWVzLm5ic2FtcGxlcyA9IDM7CisgIHZhbHVlcy5zYW1wbGVfaW50ZXJ2YWwgPSBHU1RfU0VDT05EOworICB2YWx1ZXMudmFsdWVzID0gKGdwb2ludGVyKSBnX25ldyAoZ3Vsb25nLCAzKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZV9hcnJheSAoR1NUX0NPTlRST0xfU09VUkNFIChjc291cmNlKSwKKyAgICAgICAgICAwLCAmdmFsdWVzKSk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKCgoZ3Vsb25nICopIHZhbHVlcy52YWx1ZXMpWzBdLCAwKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoKChndWxvbmcgKikgdmFsdWVzLnZhbHVlcylbMV0sIDUwKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoKChndWxvbmcgKikgdmFsdWVzLnZhbHVlcylbMl0sIDEwMCk7CisKKyAgZ19vYmplY3RfdW5yZWYgKGNzb3VyY2UpOworCisgIEdTVF9JTkZPICgiY29udHJvbGxlci0+cmVmX2NvdW50PSVkIiwgR19PQkpFQ1QgKGN0cmwpLT5yZWZfY291bnQpOworICBnX2ZyZWUgKHZhbHVlcy52YWx1ZXMpOworICBnX29iamVjdF91bnJlZiAoY3RybCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIHRlc3QgaWYgdmFsdWVzIGJlbG93IG1pbmltdW0gYW5kIGFib3ZlIG1heGltdW0gYXJlIGNsaXBwZWQgKi8KK0dTVF9TVEFSVF9URVNUIChjb250cm9sbGVyX2ludGVycG9sYXRpb25fbGluZWFyX2ludmFsaWRfdmFsdWVzKQoreworICBHc3RDb250cm9sbGVyICpjdHJsOworICBHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSAqY3NvdXJjZTsKKyAgR3N0RWxlbWVudCAqZWxlbTsKKyAgZ2Jvb2xlYW4gcmVzOworICBHVmFsdWUgdmFsX2Zsb2F0ID0geyAwLCB9OworCisgIGdzdF9jb250cm9sbGVyX2luaXQgKE5VTEwsIE5VTEwpOworCisgIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0bW9ub3NvdXJjZSIsICJ0ZXN0X3NvdXJjZSIpOworCisgIC8qIHRoYXQgcHJvcGVydHkgc2hvdWxkIGV4aXN0IGFuZCBzaG91bGQgYmUgY29udHJvbGxhYmxlICovCisgIGN0cmwgPSBnc3RfY29udHJvbGxlcl9uZXcgKEdfT0JKRUNUIChlbGVtKSwgImZsb2F0IiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChjdHJsICE9IE5VTEwsIE5VTEwpOworCisgIC8qIEdldCBpbnRlcnBvbGF0aW9uIGNvbnRyb2wgc291cmNlICovCisgIGNzb3VyY2UgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKCk7CisKKyAgZmFpbF91bmxlc3MgKGNzb3VyY2UgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfY29udHJvbGxlcl9zZXRfY29udHJvbF9zb3VyY2UgKGN0cmwsICJmbG9hdCIsCisgICAgICAgICAgR1NUX0NPTlRST0xfU09VUkNFIChjc291cmNlKSkpOworCisgIC8qIHNldCBpbnRlcnBvbGF0aW9uIG1vZGUgKi8KKyAgZmFpbF91bmxlc3MgKGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldF9pbnRlcnBvbGF0aW9uX21vZGUgKGNzb3VyY2UsCisgICAgICAgICAgR1NUX0lOVEVSUE9MQVRFX0xJTkVBUikpOworCisgIC8qIHNldCBjb250cm9sIHZhbHVlcyAqLworICBnX3ZhbHVlX2luaXQgKCZ2YWxfZmxvYXQsIEdfVFlQRV9GTE9BVCk7CisgIGdfdmFsdWVfc2V0X2Zsb2F0ICgmdmFsX2Zsb2F0LCAyMDAuMCk7CisgIHJlcyA9CisgICAgICBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXQgKGNzb3VyY2UsIDAgKiBHU1RfU0VDT05ELAorICAgICAgJnZhbF9mbG9hdCk7CisgIGZhaWxfdW5sZXNzIChyZXMsIE5VTEwpOworICBnX3ZhbHVlX3NldF9mbG9hdCAoJnZhbF9mbG9hdCwgLTIwMC4wKTsKKyAgcmVzID0KKyAgICAgIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldCAoY3NvdXJjZSwgNCAqIEdTVF9TRUNPTkQsCisgICAgICAmdmFsX2Zsb2F0KTsKKyAgZmFpbF91bmxlc3MgKHJlcywgTlVMTCk7CisKKyAgZ19vYmplY3RfdW5yZWYgKGNzb3VyY2UpOworCisgIC8qIG5vdyBwdWxsIGluIHZhbHVlcyBmb3Igc29tZSB0aW1lc3RhbXBzIGFuZCBzZWUgaWYgY2xpcHBpbmcgd29ya3MgKi8KKyAgLyogMjAwLjAgKi8KKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDAgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF9mbG9hdCwgMTAwLjApOworICAvKiAxMDAuMCAqLworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMSAqIEdTVF9TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX2Zsb2F0LCAxMDAuMCk7CisgIC8qIDUwLjAgKi8KKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDEgKiBHU1RfU0VDT05EICsgNTAwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX2Zsb2F0LCA1MC4wKTsKKyAgLyogMC4wICovCisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAyICogR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfZmxvYXQsIDAuMCk7CisgIC8qIC0xMDAuMCAqLworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMyAqIEdTVF9TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX2Zsb2F0LCAwLjApOworICAvKiAtMjAwLjAgKi8KKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDQgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF9mbG9hdCwgMC4wKTsKKworICBHU1RfSU5GTyAoImNvbnRyb2xsZXItPnJlZl9jb3VudD0lZCIsIEdfT0JKRUNUIChjdHJsKS0+cmVmX2NvdW50KTsKKyAgZ19vYmplY3RfdW5yZWYgKGN0cmwpOworICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9pbnRlcnBvbGF0aW9uX2xpbmVhcl9kZWZhdWx0X3ZhbHVlcykKK3sKKyAgR3N0Q29udHJvbGxlciAqY3RybDsKKyAgR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UgKmNzb3VyY2U7CisgIEdzdEVsZW1lbnQgKmVsZW07CisgIGdib29sZWFuIHJlczsKKyAgR1ZhbHVlIHZhbF91bG9uZyA9IHsgMCwgfTsKKworICBnc3RfY29udHJvbGxlcl9pbml0IChOVUxMLCBOVUxMKTsKKworICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVzdG1vbm9zb3VyY2UiLCAidGVzdF9zb3VyY2UiKTsKKworICAvKiB0aGF0IHByb3BlcnR5IHNob3VsZCBleGlzdCBhbmQgc2hvdWxkIGJlIGNvbnRyb2xsYWJsZSAqLworICBjdHJsID0gZ3N0X2NvbnRyb2xsZXJfbmV3IChHX09CSkVDVCAoZWxlbSksICJ1bG9uZyIsIE5VTEwpOworICBmYWlsX3VubGVzcyAoY3RybCAhPSBOVUxMLCBOVUxMKTsKKworICAvKiBHZXQgaW50ZXJwb2xhdGlvbiBjb250cm9sIHNvdXJjZSAqLworICBjc291cmNlID0gZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfbmV3ICgpOworCisgIGZhaWxfdW5sZXNzIChjc291cmNlICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2NvbnRyb2xsZXJfc2V0X2NvbnRyb2xfc291cmNlIChjdHJsLCAidWxvbmciLAorICAgICAgICAgIEdTVF9DT05UUk9MX1NPVVJDRSAoY3NvdXJjZSkpKTsKKworICAvKiBzZXQgaW50ZXJwb2xhdGlvbiBtb2RlICovCisgIGZhaWxfdW5sZXNzIChnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXRfaW50ZXJwb2xhdGlvbl9tb2RlIChjc291cmNlLAorICAgICAgICAgIEdTVF9JTlRFUlBPTEFURV9MSU5FQVIpKTsKKworICBnX3ZhbHVlX2luaXQgKCZ2YWxfdWxvbmcsIEdfVFlQRV9VTE9ORyk7CisKKyAgLyogU2hvdWxkIGZhaWwgaWYgbm8gdmFsdWUgd2FzIHNldCB5ZXQKKyAgICogRklYTUU6IHdpbGwgbm90IGZhaWwsIGFzIGludGVycG9sYXRpb24gYXNzdW1lcyB2YWxbMF09ZGVmYXVsdF92YWx1ZSBpZgorICAgKiBub3RoaW5nIGVsc2UgaXMgc2V0LgorICAgZmFpbF9pZiAoZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZSAoR1NUX0NPTlRST0xfU09VUkNFIChjc291cmNlKSwKKyAgIDEgKiBHU1RfU0VDT05ELCAmdmFsX3Vsb25nKSk7CisgICAqLworCisgIC8qIHNldCBjb250cm9sIHZhbHVlcyAqLworICBnX3ZhbHVlX3NldF91bG9uZyAoJnZhbF91bG9uZywgMCk7CisgIHJlcyA9CisgICAgICBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXQgKGNzb3VyY2UsIDEgKiBHU1RfU0VDT05ELAorICAgICAgJnZhbF91bG9uZyk7CisgIGZhaWxfdW5sZXNzIChyZXMsIE5VTEwpOworICBnX3ZhbHVlX3NldF91bG9uZyAoJnZhbF91bG9uZywgMTAwKTsKKyAgcmVzID0KKyAgICAgIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldCAoY3NvdXJjZSwgMyAqIEdTVF9TRUNPTkQsCisgICAgICAmdmFsX3Vsb25nKTsKKyAgZmFpbF91bmxlc3MgKHJlcywgTlVMTCk7CisKKyAgLyogbm93IHB1bGwgaW4gdmFsdWVzIGZvciBzb21lIHRpbWVzdGFtcHMgKi8KKyAgLyogc2hvdWxkIGdpdmUgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBjb250cm9sIHBvaW50IGZvciB0aW1lc3RhbXBzIGJlZm9yZSBpdCAqLworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMCAqIEdTVF9TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxICogR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDIgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDUwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDMgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDEwMCk7CisKKyAgLyogc2V0IGNvbnRyb2wgdmFsdWVzICovCisgIGdfdmFsdWVfc2V0X3Vsb25nICgmdmFsX3Vsb25nLCAwKTsKKyAgcmVzID0KKyAgICAgIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldCAoY3NvdXJjZSwgMCAqIEdTVF9TRUNPTkQsCisgICAgICAmdmFsX3Vsb25nKTsKKyAgZmFpbF91bmxlc3MgKHJlcywgTlVMTCk7CisgIGdfdmFsdWVfc2V0X3Vsb25nICgmdmFsX3Vsb25nLCAxMDApOworICByZXMgPQorICAgICAgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0IChjc291cmNlLCAyICogR1NUX1NFQ09ORCwKKyAgICAgICZ2YWxfdWxvbmcpOworICBmYWlsX3VubGVzcyAocmVzLCBOVUxMKTsKKworICAvKiB1bnNldCB0aGUgb2xkIG9uZXMgKi8KKyAgcmVzID0gZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfdW5zZXQgKGNzb3VyY2UsIDEgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3MgKHJlcywgTlVMTCk7CisgIHJlcyA9IGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3Vuc2V0IChjc291cmNlLCAzICogR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzIChyZXMsIE5VTEwpOworCisgIC8qIG5vdyBwdWxsIGluIHZhbHVlcyBmb3Igc29tZSB0aW1lc3RhbXBzICovCisgIC8qIHNob3VsZCBub3cgZ2l2ZSBvdXIgdmFsdWUgZm9yIHRpbWVzdGFtcCAwICovCisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAwICogR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDEgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDUwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDIgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDEwMCk7CisKKyAgZ19vYmplY3RfdW5yZWYgKEdfT0JKRUNUIChjc291cmNlKSk7CisKKyAgR1NUX0lORk8gKCJjb250cm9sbGVyLT5yZWZfY291bnQ9JWQiLCBHX09CSkVDVCAoY3RybCktPnJlZl9jb3VudCk7CisgIGdfb2JqZWN0X3VucmVmIChjdHJsKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoZWxlbSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogdGVzdCBnc3RfY29udHJvbGxlcl9zZXRfZGlzYWJsZWQoKSB3aXRoIGxpbmVhciBpbnRlcnBvbGF0aW9uICovCitHU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9pbnRlcnBvbGF0ZV9saW5lYXJfZGlzYWJsZWQpCit7CisgIEdzdENvbnRyb2xsZXIgKmN0cmw7CisgIEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlICpjc291cmNlLCAqY3NvdXJjZTI7CisgIEdzdEVsZW1lbnQgKmVsZW07CisgIGdib29sZWFuIHJlczsKKyAgR1ZhbHVlIHZhbF91bG9uZyA9IHsgMCwgfQorICAsIHZhbF9kb3VibGUgPSB7CisgIDAsfTsKKworICBnc3RfY29udHJvbGxlcl9pbml0IChOVUxMLCBOVUxMKTsKKworICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVzdG1vbm9zb3VyY2UiLCAidGVzdF9zb3VyY2UiKTsKKworICAvKiB0aGF0IHByb3BlcnR5IHNob3VsZCBleGlzdCBhbmQgc2hvdWxkIGJlIGNvbnRyb2xsYWJsZSAqLworICBjdHJsID0gZ3N0X2NvbnRyb2xsZXJfbmV3IChHX09CSkVDVCAoZWxlbSksICJ1bG9uZyIsICJkb3VibGUiLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGN0cmwgIT0gTlVMTCwgTlVMTCk7CisKKyAgLyogR2V0IGludGVycG9sYXRpb24gY29udHJvbCBzb3VyY2UgKi8KKyAgY3NvdXJjZSA9IGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX25ldyAoKTsKKyAgY3NvdXJjZTIgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKCk7CisKKyAgZmFpbF91bmxlc3MgKGNzb3VyY2UgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfY29udHJvbGxlcl9zZXRfY29udHJvbF9zb3VyY2UgKGN0cmwsICJ1bG9uZyIsCisgICAgICAgICAgR1NUX0NPTlRST0xfU09VUkNFIChjc291cmNlKSkpOworICBmYWlsX3VubGVzcyAoY3NvdXJjZTIgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfY29udHJvbGxlcl9zZXRfY29udHJvbF9zb3VyY2UgKGN0cmwsICJkb3VibGUiLAorICAgICAgICAgIEdTVF9DT05UUk9MX1NPVVJDRSAoY3NvdXJjZTIpKSk7CisKKyAgLyogc2V0IGludGVycG9sYXRpb24gbW9kZSAqLworICBmYWlsX3VubGVzcyAoZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0X2ludGVycG9sYXRpb25fbW9kZSAoY3NvdXJjZSwKKyAgICAgICAgICBHU1RfSU5URVJQT0xBVEVfTElORUFSKSk7CisgIGZhaWxfdW5sZXNzIChnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXRfaW50ZXJwb2xhdGlvbl9tb2RlCisgICAgICAoY3NvdXJjZTIsIEdTVF9JTlRFUlBPTEFURV9MSU5FQVIpKTsKKworICAvKiBzZXQgY29udHJvbCB2YWx1ZXMgKi8KKyAgZ192YWx1ZV9pbml0ICgmdmFsX3Vsb25nLCBHX1RZUEVfVUxPTkcpOworICBnX3ZhbHVlX3NldF91bG9uZyAoJnZhbF91bG9uZywgMCk7CisgIHJlcyA9CisgICAgICBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXQgKGNzb3VyY2UsIDAgKiBHU1RfU0VDT05ELAorICAgICAgJnZhbF91bG9uZyk7CisgIGZhaWxfdW5sZXNzIChyZXMsIE5VTEwpOworICBnX3ZhbHVlX3NldF91bG9uZyAoJnZhbF91bG9uZywgMTAwKTsKKyAgcmVzID0KKyAgICAgIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldCAoY3NvdXJjZSwgMiAqIEdTVF9TRUNPTkQsCisgICAgICAmdmFsX3Vsb25nKTsKKyAgZmFpbF91bmxlc3MgKHJlcywgTlVMTCk7CisKKyAgZ19vYmplY3RfdW5yZWYgKEdfT0JKRUNUIChjc291cmNlKSk7CisKKy8qIHNldCBjb250cm9sIHZhbHVlcyAqLworICBnX3ZhbHVlX2luaXQgKCZ2YWxfZG91YmxlLCBHX1RZUEVfRE9VQkxFKTsKKyAgZ192YWx1ZV9zZXRfZG91YmxlICgmdmFsX2RvdWJsZSwgMi4wKTsKKyAgcmVzID0KKyAgICAgIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldCAoY3NvdXJjZTIsIDAgKiBHU1RfU0VDT05ELAorICAgICAgJnZhbF9kb3VibGUpOworICBmYWlsX3VubGVzcyAocmVzLCBOVUxMKTsKKyAgZ192YWx1ZV9zZXRfZG91YmxlICgmdmFsX2RvdWJsZSwgNC4wKTsKKyAgcmVzID0KKyAgICAgIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldCAoY3NvdXJjZTIsIDIgKiBHU1RfU0VDT05ELAorICAgICAgJnZhbF9kb3VibGUpOworICBmYWlsX3VubGVzcyAocmVzLCBOVUxMKTsKKworICBnX29iamVjdF91bnJlZiAoR19PQkpFQ1QgKGNzb3VyY2UyKSk7CisKKyAgLyogbm93IHB1bGwgaW4gdmFsdWVzIGZvciBzb21lIHRpbWVzdGFtcHMgKi8KKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDAgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDApOworICBmYWlsX3VubGVzcyAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfZG91YmxlID09IDIuMCwgTlVMTCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxICogR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCA1MCk7CisgIGZhaWxfdW5sZXNzIChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF9kb3VibGUgPT0gMy4wLCBOVUxMKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDIgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDEwMCk7CisgIGZhaWxfdW5sZXNzIChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF9kb3VibGUgPT0gNC4wLCBOVUxMKTsKKworICAvKiBub3cgcHVsbCBpbiB2YWx1ZXMgZm9yIHNvbWUgdGltZXN0YW1wcywgcHJvcCBkb3VibGUgZGlzYWJsZWQgKi8KKyAgR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcgPSAwOworICBHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF9kb3VibGUgPSAwLjA7CisgIGdzdF9jb250cm9sbGVyX3NldF9wcm9wZXJ0eV9kaXNhYmxlZCAoY3RybCwgImRvdWJsZSIsIFRSVUUpOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMCAqIEdTVF9TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMCk7CisgIGZhaWxfdW5sZXNzIChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF9kb3VibGUgPT0gMC4wLCBOVUxMKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDEgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDUwKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX2RvdWJsZSA9PSAwLjAsIE5VTEwpOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMiAqIEdTVF9TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMTAwKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX2RvdWJsZSA9PSAwLjAsIE5VTEwpOworCisgIC8qIG5vdyBwdWxsIGluIHZhbHVlcyBmb3Igc29tZSB0aW1lc3RhbXBzLCBhZnRlciBlbmFibGluZyBkb3VibGUgYWdhaW4gKi8KKyAgR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcgPSAwOworICBHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF9kb3VibGUgPSAwLjA7CisgIGdzdF9jb250cm9sbGVyX3NldF9wcm9wZXJ0eV9kaXNhYmxlZCAoY3RybCwgImRvdWJsZSIsIEZBTFNFKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDAgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDApOworICBmYWlsX3VubGVzcyAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfZG91YmxlID09IDIuMCwgTlVMTCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxICogR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCA1MCk7CisgIGZhaWxfdW5sZXNzIChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF9kb3VibGUgPT0gMy4wLCBOVUxMKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDIgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDEwMCk7CisgIGZhaWxfdW5sZXNzIChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF9kb3VibGUgPT0gNC4wLCBOVUxMKTsKKworICAvKiBub3cgcHVsbCBpbiB2YWx1ZXMgZm9yIHNvbWUgdGltZXN0YW1wcywgYWZ0ZXIgZGlzYWJsaW5nIGFsbCBwcm9wcyAqLworICBHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZyA9IDA7CisgIEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX2RvdWJsZSA9IDAuMDsKKyAgZ3N0X2NvbnRyb2xsZXJfc2V0X2Rpc2FibGVkIChjdHJsLCBUUlVFKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDAgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDApOworICBmYWlsX3VubGVzcyAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfZG91YmxlID09IDAuMCwgTlVMTCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxICogR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAwKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX2RvdWJsZSA9PSAwLjAsIE5VTEwpOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMiAqIEdTVF9TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMCk7CisgIGZhaWxfdW5sZXNzIChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF9kb3VibGUgPT0gMC4wLCBOVUxMKTsKKworICAvKiBub3cgcHVsbCBpbiB2YWx1ZXMgZm9yIHNvbWUgdGltZXN0YW1wcywgZW5hYmxpbmcgZG91YmxlIGFnYWluICovCisgIEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nID0gMDsKKyAgR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfZG91YmxlID0gMC4wOworICBnc3RfY29udHJvbGxlcl9zZXRfcHJvcGVydHlfZGlzYWJsZWQgKGN0cmwsICJkb3VibGUiLCBGQUxTRSk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAwICogR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAwKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX2RvdWJsZSA9PSAyLjAsIE5VTEwpOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMSAqIEdTVF9TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMCk7CisgIGZhaWxfdW5sZXNzIChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF9kb3VibGUgPT0gMy4wLCBOVUxMKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDIgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDApOworICBmYWlsX3VubGVzcyAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfZG91YmxlID09IDQuMCwgTlVMTCk7CisKKyAgLyogbm93IHB1bGwgaW4gdmFsdWVzIGZvciBzb21lIHRpbWVzdGFtcHMsIGVuYWJsaW5nIGFsbCAqLworICBHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZyA9IDA7CisgIEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX2RvdWJsZSA9IDAuMDsKKyAgZ3N0X2NvbnRyb2xsZXJfc2V0X2Rpc2FibGVkIChjdHJsLCBGQUxTRSk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAwICogR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAwKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX2RvdWJsZSA9PSAyLjAsIE5VTEwpOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMSAqIEdTVF9TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgNTApOworICBmYWlsX3VubGVzcyAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfZG91YmxlID09IDMuMCwgTlVMTCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAyICogR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAxMDApOworICBmYWlsX3VubGVzcyAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfZG91YmxlID09IDQuMCwgTlVMTCk7CisKKyAgR1NUX0lORk8gKCJjb250cm9sbGVyLT5yZWZfY291bnQ9JWQiLCBHX09CSkVDVCAoY3RybCktPnJlZl9jb3VudCk7CisgIGdfb2JqZWN0X3VucmVmIChjdHJsKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoZWxlbSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworCitHU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9pbnRlcnBvbGF0aW9uX3NldF9mcm9tX2xpc3QpCit7CisgIEdzdENvbnRyb2xsZXIgKmN0cmw7CisgIEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlICpjc291cmNlOworICBHc3RUaW1lZFZhbHVlICp0dmFsOworICBHc3RFbGVtZW50ICplbGVtOworICBHU0xpc3QgKmxpc3QgPSBOVUxMOworCisgIGdzdF9jb250cm9sbGVyX2luaXQgKE5VTEwsIE5VTEwpOworCisgIC8qIHRlc3QgdGhhdCBhbiBpbnZhbGlkIHRpbWVzdGFtcCB0aHJvd3MgYSB3YXJuaW5nIG9mIHNvbWUgc29ydCAqLworICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVzdG1vbm9zb3VyY2UiLCAidGVzdF9zb3VyY2UiKTsKKworICAvKiB0aGF0IHByb3BlcnR5IHNob3VsZCBleGlzdCBhbmQgc2hvdWxkIGJlIGNvbnRyb2xsYWJsZSAqLworICBjdHJsID0gZ3N0X2NvbnRyb2xsZXJfbmV3IChHX09CSkVDVCAoZWxlbSksICJ1bG9uZyIsIE5VTEwpOworICBmYWlsX3VubGVzcyAoY3RybCAhPSBOVUxMLCBOVUxMKTsKKworICAvKiBHZXQgaW50ZXJwb2xhdGlvbiBjb250cm9sIHNvdXJjZSAqLworICBjc291cmNlID0gZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfbmV3ICgpOworCisgIGZhaWxfdW5sZXNzIChjc291cmNlICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2NvbnRyb2xsZXJfc2V0X2NvbnRyb2xfc291cmNlIChjdHJsLCAidWxvbmciLAorICAgICAgICAgIEdTVF9DT05UUk9MX1NPVVJDRSAoY3NvdXJjZSkpKTsKKworICAvKiBzZXQgaW50ZXJwb2xhdGlvbiBtb2RlICovCisgIGZhaWxfdW5sZXNzIChnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXRfaW50ZXJwb2xhdGlvbl9tb2RlIChjc291cmNlLAorICAgICAgICAgIEdTVF9JTlRFUlBPTEFURV9MSU5FQVIpKTsKKworICAvKiBzZXQgY29udHJvbCB2YWx1ZSAqLworICB0dmFsID0gZ19uZXcwIChHc3RUaW1lZFZhbHVlLCAxKTsKKyAgdHZhbC0+dGltZXN0YW1wID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgZ192YWx1ZV9pbml0ICgmdHZhbC0+dmFsdWUsIEdfVFlQRV9VTE9ORyk7CisgIGdfdmFsdWVfc2V0X3Vsb25nICgmdHZhbC0+dmFsdWUsIDApOworCisgIGxpc3QgPSBnX3NsaXN0X2FwcGVuZCAobGlzdCwgdHZhbCk7CisKKyAgZmFpbF9pZiAoZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0X2Zyb21fbGlzdCAoY3NvdXJjZSwgbGlzdCkpOworCisgIC8qIHRyeSBhZ2FpbiB3aXRoIGEgdmFsaWQgc3RhbXAsIHNob3VsZCB3b3JrIG5vdyAqLworICB0dmFsLT50aW1lc3RhbXAgPSAwOworICBmYWlsX3VubGVzcyAoZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0X2Zyb21fbGlzdCAoY3NvdXJjZSwgbGlzdCkpOworCisgIGdfb2JqZWN0X3VucmVmIChjc291cmNlKTsKKworICAvKiBhbGxvY2F0ZWQgR3N0VGltZWRWYWx1ZSBub3cgYmVsb25ncyB0byB0aGUgY29udHJvbGxlciwgYnV0IGxpc3Qgbm90ICovCisgIGdfdmFsdWVfdW5zZXQgKCZ0dmFsLT52YWx1ZSk7CisgIGdfZnJlZSAodHZhbCk7CisgIGdfc2xpc3RfZnJlZSAobGlzdCk7CisgIGdfb2JqZWN0X3VucmVmIChjdHJsKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoZWxlbSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogdGVzdCBsZm8gY29udHJvbCBzb3VyY2Ugd2l0aCBzaW5lIHdhdmVmb3JtICovCitHU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9sZm9fc2luZSkKK3sKKyAgR3N0Q29udHJvbGxlciAqY3RybDsKKyAgR3N0TEZPQ29udHJvbFNvdXJjZSAqY3NvdXJjZTsKKyAgR3N0RWxlbWVudCAqZWxlbTsKKyAgR1ZhbHVlIGFtcCA9IHsgMCwgfQorICAsIG9mZiA9IHsKKyAgMCx9OworCisgIGdzdF9jb250cm9sbGVyX2luaXQgKE5VTEwsIE5VTEwpOworCisgIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0bW9ub3NvdXJjZSIsICJ0ZXN0X3NvdXJjZSIpOworCisgIC8qIHRoYXQgcHJvcGVydHkgc2hvdWxkIGV4aXN0IGFuZCBzaG91bGQgYmUgY29udHJvbGxhYmxlICovCisgIGN0cmwgPSBnc3RfY29udHJvbGxlcl9uZXcgKEdfT0JKRUNUIChlbGVtKSwgInVsb25nIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChjdHJsICE9IE5VTEwsIE5VTEwpOworCisgIC8qIEdldCBpbnRlcnBvbGF0aW9uIGNvbnRyb2wgc291cmNlICovCisgIGNzb3VyY2UgPSBnc3RfbGZvX2NvbnRyb2xfc291cmNlX25ldyAoKTsKKworICBmYWlsX3VubGVzcyAoY3NvdXJjZSAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jb250cm9sbGVyX3NldF9jb250cm9sX3NvdXJjZSAoY3RybCwgInVsb25nIiwKKyAgICAgICAgICBHU1RfQ09OVFJPTF9TT1VSQ0UgKGNzb3VyY2UpKSk7CisKKyAgLyogc2V0IGFtcGxpdHVkZSBhbmQgb2Zmc2V0IHZhbHVlcyAqLworICBnX3ZhbHVlX2luaXQgKCZhbXAsIEdfVFlQRV9VTE9ORyk7CisgIGdfdmFsdWVfaW5pdCAoJm9mZiwgR19UWVBFX1VMT05HKTsKKyAgZ192YWx1ZV9zZXRfdWxvbmcgKCZhbXAsIDEwMCk7CisgIGdfdmFsdWVfc2V0X3Vsb25nICgmb2ZmLCAxMDApOworCisgIC8qIHNldCB3YXZlZm9ybSBtb2RlICovCisgIGdfb2JqZWN0X3NldCAoY3NvdXJjZSwgIndhdmVmb3JtIiwgR1NUX0xGT19XQVZFRk9STV9TSU5FLAorICAgICAgImZyZXF1ZW5jeSIsIDEuMCwgInRpbWVzaGlmdCIsIChHc3RDbG9ja1RpbWUpIDAsCisgICAgICAiYW1wbGl0dWRlIiwgJmFtcCwgIm9mZnNldCIsICZvZmYsIE5VTEwpOworCisgIGdfb2JqZWN0X3VucmVmIChHX09CSkVDVCAoY3NvdXJjZSkpOworCisgIC8qIG5vdyBwdWxsIGluIHZhbHVlcyBmb3Igc29tZSB0aW1lc3RhbXBzICovCisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMTAwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDI1MCAqIEdTVF9NU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDIwMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCA1MDAgKiBHU1RfTVNFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAxMDApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgNzUwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxMDAwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMTAwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDEyNTAgKiBHU1RfTVNFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAyMDApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMTUwMCAqIEdTVF9NU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDEwMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxNzUwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAyMDAwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMTAwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDEyNTAgKiBHU1RfTVNFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAyMDApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMTUwMCAqIEdTVF9NU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDEwMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxNzUwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMCk7CisKKyAgR1NUX0lORk8gKCJjb250cm9sbGVyLT5yZWZfY291bnQ9JWQiLCBHX09CSkVDVCAoY3RybCktPnJlZl9jb3VudCk7CisgIGdfb2JqZWN0X3VucmVmIChjdHJsKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoZWxlbSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogdGVzdCBsZm8gY29udHJvbCBzb3VyY2Ugd2l0aCBzaW5lIHdhdmVmb3JtIGFuZCB0aW1lc2hpZnQgKi8KK0dTVF9TVEFSVF9URVNUIChjb250cm9sbGVyX2xmb19zaW5lX3RpbWVzaGlmdCkKK3sKKyAgR3N0Q29udHJvbGxlciAqY3RybDsKKyAgR3N0TEZPQ29udHJvbFNvdXJjZSAqY3NvdXJjZTsKKyAgR3N0RWxlbWVudCAqZWxlbTsKKyAgR1ZhbHVlIGFtcCA9IHsgMCwgfQorICAsIG9mZiA9IHsKKyAgMCx9OworCisgIGdzdF9jb250cm9sbGVyX2luaXQgKE5VTEwsIE5VTEwpOworCisgIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0bW9ub3NvdXJjZSIsICJ0ZXN0X3NvdXJjZSIpOworCisgIC8qIHRoYXQgcHJvcGVydHkgc2hvdWxkIGV4aXN0IGFuZCBzaG91bGQgYmUgY29udHJvbGxhYmxlICovCisgIGN0cmwgPSBnc3RfY29udHJvbGxlcl9uZXcgKEdfT0JKRUNUIChlbGVtKSwgInVsb25nIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChjdHJsICE9IE5VTEwsIE5VTEwpOworCisgIC8qIEdldCBpbnRlcnBvbGF0aW9uIGNvbnRyb2wgc291cmNlICovCisgIGNzb3VyY2UgPSBnc3RfbGZvX2NvbnRyb2xfc291cmNlX25ldyAoKTsKKworICBmYWlsX3VubGVzcyAoY3NvdXJjZSAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jb250cm9sbGVyX3NldF9jb250cm9sX3NvdXJjZSAoY3RybCwgInVsb25nIiwKKyAgICAgICAgICBHU1RfQ09OVFJPTF9TT1VSQ0UgKGNzb3VyY2UpKSk7CisKKyAgLyogc2V0IGFtcGxpdHVkZSBhbmQgb2Zmc2V0IHZhbHVlcyAqLworICBnX3ZhbHVlX2luaXQgKCZhbXAsIEdfVFlQRV9VTE9ORyk7CisgIGdfdmFsdWVfaW5pdCAoJm9mZiwgR19UWVBFX1VMT05HKTsKKyAgZ192YWx1ZV9zZXRfdWxvbmcgKCZhbXAsIDEwMCk7CisgIGdfdmFsdWVfc2V0X3Vsb25nICgmb2ZmLCAxMDApOworCisgIC8qIHNldCB3YXZlZm9ybSBtb2RlICovCisgIGdfb2JqZWN0X3NldCAoY3NvdXJjZSwgIndhdmVmb3JtIiwgR1NUX0xGT19XQVZFRk9STV9TSU5FLAorICAgICAgImZyZXF1ZW5jeSIsIDEuMCwgInRpbWVzaGlmdCIsIDI1MCAqIEdTVF9NU0VDT05ELAorICAgICAgImFtcGxpdHVkZSIsICZhbXAsICJvZmZzZXQiLCAmb2ZmLCBOVUxMKTsKKworICBnX29iamVjdF91bnJlZiAoR19PQkpFQ1QgKGNzb3VyY2UpKTsKKworLyogbm93IHB1bGwgaW4gdmFsdWVzIGZvciBzb21lIHRpbWVzdGFtcHMgKi8KKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDAgKiBHU1RfTVNFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDI1MCAqIEdTVF9NU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDEwMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCA1MDAgKiBHU1RfTVNFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAyMDApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgNzUwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMTAwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDEwMDAgKiBHU1RfTVNFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDEyNTAgKiBHU1RfTVNFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAxMDApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMTUwMCAqIEdTVF9NU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDIwMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxNzUwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMTAwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDIwMDAgKiBHU1RfTVNFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDEyNTAgKiBHU1RfTVNFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAxMDApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMTUwMCAqIEdTVF9NU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDIwMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxNzUwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMTAwKTsKKworICBHU1RfSU5GTyAoImNvbnRyb2xsZXItPnJlZl9jb3VudD0lZCIsIEdfT0JKRUNUIChjdHJsKS0+cmVmX2NvdW50KTsKKyAgZ19vYmplY3RfdW5yZWYgKGN0cmwpOworICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiB0ZXN0IGxmbyBjb250cm9sIHNvdXJjZSB3aXRoIHNxdWFyZSB3YXZlZm9ybSAqLworR1NUX1NUQVJUX1RFU1QgKGNvbnRyb2xsZXJfbGZvX3NxdWFyZSkKK3sKKyAgR3N0Q29udHJvbGxlciAqY3RybDsKKyAgR3N0TEZPQ29udHJvbFNvdXJjZSAqY3NvdXJjZTsKKyAgR3N0RWxlbWVudCAqZWxlbTsKKyAgR1ZhbHVlIGFtcCA9IHsgMCwgfQorICAsIG9mZiA9IHsKKyAgMCx9OworCisgIGdzdF9jb250cm9sbGVyX2luaXQgKE5VTEwsIE5VTEwpOworCisgIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0bW9ub3NvdXJjZSIsICJ0ZXN0X3NvdXJjZSIpOworCisgIC8qIHRoYXQgcHJvcGVydHkgc2hvdWxkIGV4aXN0IGFuZCBzaG91bGQgYmUgY29udHJvbGxhYmxlICovCisgIGN0cmwgPSBnc3RfY29udHJvbGxlcl9uZXcgKEdfT0JKRUNUIChlbGVtKSwgInVsb25nIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChjdHJsICE9IE5VTEwsIE5VTEwpOworCisgIC8qIEdldCBpbnRlcnBvbGF0aW9uIGNvbnRyb2wgc291cmNlICovCisgIGNzb3VyY2UgPSBnc3RfbGZvX2NvbnRyb2xfc291cmNlX25ldyAoKTsKKworICBmYWlsX3VubGVzcyAoY3NvdXJjZSAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jb250cm9sbGVyX3NldF9jb250cm9sX3NvdXJjZSAoY3RybCwgInVsb25nIiwKKyAgICAgICAgICBHU1RfQ09OVFJPTF9TT1VSQ0UgKGNzb3VyY2UpKSk7CisKKyAgLyogc2V0IGFtcGxpdHVkZSBhbmQgb2Zmc2V0IHZhbHVlcyAqLworICBnX3ZhbHVlX2luaXQgKCZhbXAsIEdfVFlQRV9VTE9ORyk7CisgIGdfdmFsdWVfaW5pdCAoJm9mZiwgR19UWVBFX1VMT05HKTsKKyAgZ192YWx1ZV9zZXRfdWxvbmcgKCZhbXAsIDEwMCk7CisgIGdfdmFsdWVfc2V0X3Vsb25nICgmb2ZmLCAxMDApOworCisgIC8qIHNldCB3YXZlZm9ybSBtb2RlICovCisgIGdfb2JqZWN0X3NldCAoY3NvdXJjZSwgIndhdmVmb3JtIiwgR1NUX0xGT19XQVZFRk9STV9TUVVBUkUsCisgICAgICAiZnJlcXVlbmN5IiwgMS4wLCAidGltZXNoaWZ0IiwgKEdzdENsb2NrVGltZSkgMCwKKyAgICAgICJhbXBsaXR1ZGUiLCAmYW1wLCAib2Zmc2V0IiwgJm9mZiwgTlVMTCk7CisKKyAgZ19vYmplY3RfdW5yZWYgKEdfT0JKRUNUIChjc291cmNlKSk7CisKKyAgLyogbm93IHB1bGwgaW4gdmFsdWVzIGZvciBzb21lIHRpbWVzdGFtcHMgKi8KKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDAgKiBHU1RfTVNFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDI1MCAqIEdTVF9NU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgNTAwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMjAwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDc1MCAqIEdTVF9NU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDIwMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxMDAwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxMjUwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxNTAwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMjAwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDE3NTAgKiBHU1RfTVNFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAyMDApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMjAwMCAqIEdTVF9NU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMTI1MCAqIEdTVF9NU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMTUwMCAqIEdTVF9NU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDIwMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxNzUwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMjAwKTsKKworICBHU1RfSU5GTyAoImNvbnRyb2xsZXItPnJlZl9jb3VudD0lZCIsIEdfT0JKRUNUIChjdHJsKS0+cmVmX2NvdW50KTsKKyAgZ19vYmplY3RfdW5yZWYgKGN0cmwpOworICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiB0ZXN0IGxmbyBjb250cm9sIHNvdXJjZSB3aXRoIHNhdyB3YXZlZm9ybSAqLworR1NUX1NUQVJUX1RFU1QgKGNvbnRyb2xsZXJfbGZvX3NhdykKK3sKKyAgR3N0Q29udHJvbGxlciAqY3RybDsKKyAgR3N0TEZPQ29udHJvbFNvdXJjZSAqY3NvdXJjZTsKKyAgR3N0RWxlbWVudCAqZWxlbTsKKyAgR1ZhbHVlIGFtcCA9IHsgMCwgfQorICAsIG9mZiA9IHsKKyAgMCx9OworCisgIGdzdF9jb250cm9sbGVyX2luaXQgKE5VTEwsIE5VTEwpOworCisgIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0bW9ub3NvdXJjZSIsICJ0ZXN0X3NvdXJjZSIpOworCisgIC8qIHRoYXQgcHJvcGVydHkgc2hvdWxkIGV4aXN0IGFuZCBzaG91bGQgYmUgY29udHJvbGxhYmxlICovCisgIGN0cmwgPSBnc3RfY29udHJvbGxlcl9uZXcgKEdfT0JKRUNUIChlbGVtKSwgInVsb25nIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChjdHJsICE9IE5VTEwsIE5VTEwpOworCisgIC8qIEdldCBpbnRlcnBvbGF0aW9uIGNvbnRyb2wgc291cmNlICovCisgIGNzb3VyY2UgPSBnc3RfbGZvX2NvbnRyb2xfc291cmNlX25ldyAoKTsKKworICBmYWlsX3VubGVzcyAoY3NvdXJjZSAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jb250cm9sbGVyX3NldF9jb250cm9sX3NvdXJjZSAoY3RybCwgInVsb25nIiwKKyAgICAgICAgICBHU1RfQ09OVFJPTF9TT1VSQ0UgKGNzb3VyY2UpKSk7CisKKyAgLyogc2V0IGFtcGxpdHVkZSBhbmQgb2Zmc2V0IHZhbHVlcyAqLworICBnX3ZhbHVlX2luaXQgKCZhbXAsIEdfVFlQRV9VTE9ORyk7CisgIGdfdmFsdWVfaW5pdCAoJm9mZiwgR19UWVBFX1VMT05HKTsKKyAgZ192YWx1ZV9zZXRfdWxvbmcgKCZhbXAsIDEwMCk7CisgIGdfdmFsdWVfc2V0X3Vsb25nICgmb2ZmLCAxMDApOworCisgIC8qIHNldCB3YXZlZm9ybSBtb2RlICovCisgIGdfb2JqZWN0X3NldCAoY3NvdXJjZSwgIndhdmVmb3JtIiwgR1NUX0xGT19XQVZFRk9STV9TQVcsCisgICAgICAiZnJlcXVlbmN5IiwgMS4wLCAidGltZXNoaWZ0IiwgKEdzdENsb2NrVGltZSkgMCwKKyAgICAgICJhbXBsaXR1ZGUiLCAmYW1wLCAib2Zmc2V0IiwgJm9mZiwgTlVMTCk7CisKKyAgZ19vYmplY3RfdW5yZWYgKEdfT0JKRUNUIChjc291cmNlKSk7CisKKyAgLyogbm93IHB1bGwgaW4gdmFsdWVzIGZvciBzb21lIHRpbWVzdGFtcHMgKi8KKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDAgKiBHU1RfTVNFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAyMDApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMjUwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMTUwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDUwMCAqIEdTVF9NU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDEwMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCA3NTAgKiBHU1RfTVNFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCA1MCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxMDAwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMjAwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDEyNTAgKiBHU1RfTVNFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAxNTApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMTUwMCAqIEdTVF9NU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDEwMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxNzUwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgNTApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMjAwMCAqIEdTVF9NU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDIwMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxMjUwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMTUwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDE1MDAgKiBHU1RfTVNFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAxMDApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMTc1MCAqIEdTVF9NU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDUwKTsKKworICBHU1RfSU5GTyAoImNvbnRyb2xsZXItPnJlZl9jb3VudD0lZCIsIEdfT0JKRUNUIChjdHJsKS0+cmVmX2NvdW50KTsKKyAgZ19vYmplY3RfdW5yZWYgKGN0cmwpOworICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiB0ZXN0IGxmbyBjb250cm9sIHNvdXJjZSB3aXRoIHJldmVyc2Ugc2F3IHdhdmVmb3JtICovCitHU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9sZm9fcnNhdykKK3sKKyAgR3N0Q29udHJvbGxlciAqY3RybDsKKyAgR3N0TEZPQ29udHJvbFNvdXJjZSAqY3NvdXJjZTsKKyAgR3N0RWxlbWVudCAqZWxlbTsKKyAgR1ZhbHVlIGFtcCA9IHsgMCwgfQorICAsIG9mZiA9IHsKKyAgMCx9OworCisgIGdzdF9jb250cm9sbGVyX2luaXQgKE5VTEwsIE5VTEwpOworCisgIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0bW9ub3NvdXJjZSIsICJ0ZXN0X3NvdXJjZSIpOworCisgIC8qIHRoYXQgcHJvcGVydHkgc2hvdWxkIGV4aXN0IGFuZCBzaG91bGQgYmUgY29udHJvbGxhYmxlICovCisgIGN0cmwgPSBnc3RfY29udHJvbGxlcl9uZXcgKEdfT0JKRUNUIChlbGVtKSwgInVsb25nIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChjdHJsICE9IE5VTEwsIE5VTEwpOworCisgIC8qIEdldCBpbnRlcnBvbGF0aW9uIGNvbnRyb2wgc291cmNlICovCisgIGNzb3VyY2UgPSBnc3RfbGZvX2NvbnRyb2xfc291cmNlX25ldyAoKTsKKworICBmYWlsX3VubGVzcyAoY3NvdXJjZSAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jb250cm9sbGVyX3NldF9jb250cm9sX3NvdXJjZSAoY3RybCwgInVsb25nIiwKKyAgICAgICAgICBHU1RfQ09OVFJPTF9TT1VSQ0UgKGNzb3VyY2UpKSk7CisKKyAgLyogc2V0IGFtcGxpdHVkZSBhbmQgb2Zmc2V0IHZhbHVlcyAqLworICBnX3ZhbHVlX2luaXQgKCZhbXAsIEdfVFlQRV9VTE9ORyk7CisgIGdfdmFsdWVfaW5pdCAoJm9mZiwgR19UWVBFX1VMT05HKTsKKyAgZ192YWx1ZV9zZXRfdWxvbmcgKCZhbXAsIDEwMCk7CisgIGdfdmFsdWVfc2V0X3Vsb25nICgmb2ZmLCAxMDApOworCisgIC8qIHNldCB3YXZlZm9ybSBtb2RlICovCisgIGdfb2JqZWN0X3NldCAoY3NvdXJjZSwgIndhdmVmb3JtIiwgR1NUX0xGT19XQVZFRk9STV9SRVZFUlNFX1NBVywKKyAgICAgICJmcmVxdWVuY3kiLCAxLjAsICJ0aW1lc2hpZnQiLCAoR3N0Q2xvY2tUaW1lKSAwLAorICAgICAgImFtcGxpdHVkZSIsICZhbXAsICJvZmZzZXQiLCAmb2ZmLCBOVUxMKTsKKworICBnX29iamVjdF91bnJlZiAoR19PQkpFQ1QgKGNzb3VyY2UpKTsKKworICAvKiBub3cgcHVsbCBpbiB2YWx1ZXMgZm9yIHNvbWUgdGltZXN0YW1wcyAqLworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMCAqIEdTVF9NU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMjUwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgNTApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgNTAwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMTAwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDc1MCAqIEdTVF9NU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDE1MCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxMDAwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxMjUwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgNTApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMTUwMCAqIEdTVF9NU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDEwMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxNzUwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMTUwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDIwMDAgKiBHU1RfTVNFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDEyNTAgKiBHU1RfTVNFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCA1MCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxNTAwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMTAwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDE3NTAgKiBHU1RfTVNFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAxNTApOworCisgIEdTVF9JTkZPICgiY29udHJvbGxlci0+cmVmX2NvdW50PSVkIiwgR19PQkpFQ1QgKGN0cmwpLT5yZWZfY291bnQpOworICBnX29iamVjdF91bnJlZiAoY3RybCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIHRlc3QgbGZvIGNvbnRyb2wgc291cmNlIHdpdGggc2F3IHdhdmVmb3JtICovCitHU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9sZm9fdHJpYW5nbGUpCit7CisgIEdzdENvbnRyb2xsZXIgKmN0cmw7CisgIEdzdExGT0NvbnRyb2xTb3VyY2UgKmNzb3VyY2U7CisgIEdzdEVsZW1lbnQgKmVsZW07CisgIEdWYWx1ZSBhbXAgPSB7IDAsIH0KKyAgLCBvZmYgPSB7CisgIDAsfTsKKworICBnc3RfY29udHJvbGxlcl9pbml0IChOVUxMLCBOVUxMKTsKKworICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVzdG1vbm9zb3VyY2UiLCAidGVzdF9zb3VyY2UiKTsKKworICAvKiB0aGF0IHByb3BlcnR5IHNob3VsZCBleGlzdCBhbmQgc2hvdWxkIGJlIGNvbnRyb2xsYWJsZSAqLworICBjdHJsID0gZ3N0X2NvbnRyb2xsZXJfbmV3IChHX09CSkVDVCAoZWxlbSksICJ1bG9uZyIsIE5VTEwpOworICBmYWlsX3VubGVzcyAoY3RybCAhPSBOVUxMLCBOVUxMKTsKKworICAvKiBHZXQgaW50ZXJwb2xhdGlvbiBjb250cm9sIHNvdXJjZSAqLworICBjc291cmNlID0gZ3N0X2xmb19jb250cm9sX3NvdXJjZV9uZXcgKCk7CisKKyAgZmFpbF91bmxlc3MgKGNzb3VyY2UgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfY29udHJvbGxlcl9zZXRfY29udHJvbF9zb3VyY2UgKGN0cmwsICJ1bG9uZyIsCisgICAgICAgICAgR1NUX0NPTlRST0xfU09VUkNFIChjc291cmNlKSkpOworCisgIC8qIHNldCBhbXBsaXR1ZGUgYW5kIG9mZnNldCB2YWx1ZXMgKi8KKyAgZ192YWx1ZV9pbml0ICgmYW1wLCBHX1RZUEVfVUxPTkcpOworICBnX3ZhbHVlX2luaXQgKCZvZmYsIEdfVFlQRV9VTE9ORyk7CisgIGdfdmFsdWVfc2V0X3Vsb25nICgmYW1wLCAxMDApOworICBnX3ZhbHVlX3NldF91bG9uZyAoJm9mZiwgMTAwKTsKKworICAvKiBzZXQgd2F2ZWZvcm0gbW9kZSAqLworICBnX29iamVjdF9zZXQgKGNzb3VyY2UsICJ3YXZlZm9ybSIsIEdTVF9MRk9fV0FWRUZPUk1fVFJJQU5HTEUsCisgICAgICAiZnJlcXVlbmN5IiwgMS4wLCAidGltZXNoaWZ0IiwgKEdzdENsb2NrVGltZSkgMCwKKyAgICAgICJhbXBsaXR1ZGUiLCAmYW1wLCAib2Zmc2V0IiwgJm9mZiwgTlVMTCk7CisKKyAgZ19vYmplY3RfdW5yZWYgKEdfT0JKRUNUIChjc291cmNlKSk7CisKKyAgLyogbm93IHB1bGwgaW4gdmFsdWVzIGZvciBzb21lIHRpbWVzdGFtcHMgKi8KKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDAgKiBHU1RfTVNFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAxMDApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMjUwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMjAwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDUwMCAqIEdTVF9NU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDEwMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCA3NTAgKiBHU1RfTVNFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDEwMDAgKiBHU1RfTVNFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAxMDApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMTI1MCAqIEdTVF9NU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDIwMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxNTAwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMTAwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDE3NTAgKiBHU1RfTVNFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDIwMDAgKiBHU1RfTVNFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAxMDApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMTI1MCAqIEdTVF9NU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDIwMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxNTAwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMTAwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDE3NTAgKiBHU1RfTVNFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAwKTsKKworICBHU1RfSU5GTyAoImNvbnRyb2xsZXItPnJlZl9jb3VudD0lZCIsIEdfT0JKRUNUIChjdHJsKS0+cmVmX2NvdW50KTsKKyAgZ19vYmplY3RfdW5yZWYgKGN0cmwpOworICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiB0ZXN0IGxmbyBjb250cm9sIHNvdXJjZSB3aXRoIG5vdGhpbmcgc2V0ICovCitHU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9sZm9fbm9uZSkKK3sKKyAgR3N0Q29udHJvbGxlciAqY3RybDsKKyAgR3N0TEZPQ29udHJvbFNvdXJjZSAqY3NvdXJjZTsKKyAgR3N0RWxlbWVudCAqZWxlbTsKKworICBnc3RfY29udHJvbGxlcl9pbml0IChOVUxMLCBOVUxMKTsKKworICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVzdG1vbm9zb3VyY2UiLCAidGVzdF9zb3VyY2UiKTsKKworICAvKiB0aGF0IHByb3BlcnR5IHNob3VsZCBleGlzdCBhbmQgc2hvdWxkIGJlIGNvbnRyb2xsYWJsZSAqLworICBjdHJsID0gZ3N0X2NvbnRyb2xsZXJfbmV3IChHX09CSkVDVCAoZWxlbSksICJ1bG9uZyIsIE5VTEwpOworICBmYWlsX3VubGVzcyAoY3RybCAhPSBOVUxMLCBOVUxMKTsKKworICAvKiBHZXQgaW50ZXJwb2xhdGlvbiBjb250cm9sIHNvdXJjZSAqLworICBjc291cmNlID0gZ3N0X2xmb19jb250cm9sX3NvdXJjZV9uZXcgKCk7CisKKyAgZmFpbF91bmxlc3MgKGNzb3VyY2UgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfY29udHJvbGxlcl9zZXRfY29udHJvbF9zb3VyY2UgKGN0cmwsICJ1bG9uZyIsCisgICAgICAgICAgR1NUX0NPTlRST0xfU09VUkNFIChjc291cmNlKSkpOworCisgIGdfb2JqZWN0X3VucmVmIChHX09CSkVDVCAoY3NvdXJjZSkpOworCisgIC8qIG5vdyBwdWxsIGluIHZhbHVlcyBmb3Igc29tZSB0aW1lc3RhbXBzICovCisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAyNTAgKiBHU1RfTVNFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDUwMCAqIEdTVF9NU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgNzUwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxMDAwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxMjUwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxNTAwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxNzUwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAyMDAwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxMjUwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxNTAwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMCk7CisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAxNzUwICogR1NUX01TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMCk7CisKKyAgR1NUX0lORk8gKCJjb250cm9sbGVyLT5yZWZfY291bnQ9JWQiLCBHX09CSkVDVCAoY3RybCktPnJlZl9jb3VudCk7CisgIGdfb2JqZWN0X3VucmVmIChjdHJsKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoZWxlbSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogdGVzdHMgaWYgd2UgY2FuIHJ1biBoZWxwZXIgbWV0aG9kcyBhZ2FpbnN0IGFueSBHT2JqZWN0ICovCitHU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9oZWxwZXJfYW55X2dvYmplY3QpCit7CisgIEdzdEVsZW1lbnQgKmVsZW07CisgIGdib29sZWFuIHJlczsKKworICBnc3RfY29udHJvbGxlcl9pbml0IChOVUxMLCBOVUxMKTsKKworICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYmluIiwgInRlc3RfZWxlbSIpOworCisgIC8qIHRoYXQgZWxlbWVudCBpcyBub3QgY29udHJvbGxhYmxlICovCisgIHJlcyA9IGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdfT0JKRUNUIChlbGVtKSwgMExMKTsKKyAgLyogU3luY2luZyBzaG91bGQgc3RpbGwgc3VjY2VlZCBhcyB0aGVyZSdzIG5vdGhpbmcgdG8gc3luYyAqLworICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUsIE5VTEwpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUIChjb250cm9sbGVyX3JlZmNvdW50X25ld19saXN0KQoreworICBHc3RDb250cm9sbGVyICpjdHJsLCAqY3RybDI7CisgIEdzdEVsZW1lbnQgKmVsZW07CisgIEdMaXN0ICpsaXN0ID0gTlVMTDsKKworICBnc3RfY29udHJvbGxlcl9pbml0IChOVUxMLCBOVUxMKTsKKworICAvKiB0aGF0IHByb3BlcnR5IHNob3VsZCBleGlzdCBhbmQgc2hvdWxkIGJlIGNvbnRyb2xsYWJsZSAqLworICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVzdG1vbm9zb3VyY2UiLCAidGVzdF9zb3VyY2UiKTsKKyAgbGlzdCA9IGdfbGlzdF9hcHBlbmQgKE5VTEwsIChjaGFyICopICJ1bG9uZyIpOworICBjdHJsID0gZ3N0X2NvbnRyb2xsZXJfbmV3X2xpc3QgKEdfT0JKRUNUIChlbGVtKSwgbGlzdCk7CisgIGZhaWxfdW5sZXNzIChjdHJsICE9IE5VTEwsIE5VTEwpOworICBHU1RfSU5GTyAoImNvbnRyb2xsZXItPnJlZl9jb3VudD0lZCIsIEdfT0JKRUNUIChjdHJsKS0+cmVmX2NvdW50KTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR19PQkpFQ1QgKGN0cmwpLT5yZWZfY291bnQsIDEpOworICBnX2xpc3RfZnJlZSAobGlzdCk7CisgIGdfb2JqZWN0X3VucmVmIChjdHJsKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoZWxlbSk7CisKKyAgLyogdHJ5IHRoZSBzYW1lIHByb3BlcnR5IHR3aWNlLCBtYWtlIHN1cmUgdGhlIHJlZmNvdW50IGlzIHN0aWxsIDEgKi8KKyAgZWxlbSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlc3Rtb25vc291cmNlIiwgInRlc3Rfc291cmNlIik7CisgIGxpc3QgPSBnX2xpc3RfYXBwZW5kIChOVUxMLCAoY2hhciAqKSAidWxvbmciKTsKKyAgbGlzdCA9IGdfbGlzdF9hcHBlbmQgKGxpc3QsIChjaGFyICopICJ1bG9uZyIpOworICBjdHJsID0gZ3N0X2NvbnRyb2xsZXJfbmV3X2xpc3QgKEdfT0JKRUNUIChlbGVtKSwgbGlzdCk7CisgIGZhaWxfdW5sZXNzIChjdHJsICE9IE5VTEwsIE5VTEwpOworICBHU1RfSU5GTyAoImNvbnRyb2xsZXItPnJlZl9jb3VudD0lZCIsIEdfT0JKRUNUIChjdHJsKS0+cmVmX2NvdW50KTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR19PQkpFQ1QgKGN0cmwpLT5yZWZfY291bnQsIDEpOworICBnX2xpc3RfZnJlZSAobGlzdCk7CisgIGdfb2JqZWN0X3VucmVmIChjdHJsKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoZWxlbSk7CisKKyAgLyogdHJ5IHR3byBwcm9wZXJ0aWVzLCBtYWtlIHN1cmUgdGhlIHJlZmNvdW50IGlzIHN0aWxsIDEgKi8KKyAgZWxlbSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlc3Rtb25vc291cmNlIiwgInRlc3Rfc291cmNlIik7CisgIGxpc3QgPSBnX2xpc3RfYXBwZW5kIChOVUxMLCAoY2hhciAqKSAidWxvbmciKTsKKyAgbGlzdCA9IGdfbGlzdF9hcHBlbmQgKGxpc3QsIChjaGFyICopICJib29sZWFuIik7CisgIGN0cmwgPSBnc3RfY29udHJvbGxlcl9uZXdfbGlzdCAoR19PQkpFQ1QgKGVsZW0pLCBsaXN0KTsKKyAgZmFpbF91bmxlc3MgKGN0cmwgIT0gTlVMTCwgTlVMTCk7CisgIEdTVF9JTkZPICgiY29udHJvbGxlci0+cmVmX2NvdW50PSVkIiwgR19PQkpFQ1QgKGN0cmwpLT5yZWZfY291bnQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHX09CSkVDVCAoY3RybCktPnJlZl9jb3VudCwgMSk7CisgIGdfbGlzdF9mcmVlIChsaXN0KTsKKyAgZ19vYmplY3RfdW5yZWYgKGN0cmwpOworICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtKTsKKworICAvKiB0cnkgX25ld19saXN0IHdpdGggZXhpc3RpbmcgY29udHJvbGxlciAqLworICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVzdG1vbm9zb3VyY2UiLCAidGVzdF9zb3VyY2UiKTsKKyAgY3RybCA9IGdzdF9jb250cm9sbGVyX25ldyAoR19PQkpFQ1QgKGVsZW0pLCAidWxvbmciLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGN0cmwgIT0gTlVMTCwgTlVMTCk7CisgIEdTVF9JTkZPICgiY29udHJvbGxlci0+cmVmX2NvdW50PSVkIiwgR19PQkpFQ1QgKGN0cmwpLT5yZWZfY291bnQpOworICBsaXN0ID0gZ19saXN0X2FwcGVuZCAoTlVMTCwgKGNoYXIgKikgInVsb25nIik7CisgIGN0cmwyID0gZ3N0X2NvbnRyb2xsZXJfbmV3X2xpc3QgKEdfT0JKRUNUIChlbGVtKSwgbGlzdCk7CisgIGZhaWxfdW5sZXNzIChjdHJsMiAhPSBOVUxMLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGN0cmwgPT0gY3RybDIsIE5VTEwpOworICBHU1RfSU5GTyAoImNvbnRyb2xsZXItPnJlZl9jb3VudD0lZCIsIEdfT0JKRUNUIChjdHJsKS0+cmVmX2NvdW50KTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR19PQkpFQ1QgKGN0cmwpLT5yZWZfY291bnQsIDIpOworICBnX2xpc3RfZnJlZSAobGlzdCk7CisgIGdfb2JqZWN0X3VucmVmIChjdHJsKTsKKyAgZ19vYmplY3RfdW5yZWYgKGN0cmwyKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoZWxlbSk7CisKKyAgLyogdHJ5IF9uZXdfbGlzdCBmaXJzdCBhbmQgdGhlbiBfbmV3ICovCisgIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0bW9ub3NvdXJjZSIsICJ0ZXN0X3NvdXJjZSIpOworICBsaXN0ID0gZ19saXN0X2FwcGVuZCAoTlVMTCwgKGNoYXIgKikgInVsb25nIik7CisgIGN0cmwgPSBnc3RfY29udHJvbGxlcl9uZXdfbGlzdCAoR19PQkpFQ1QgKGVsZW0pLCBsaXN0KTsKKyAgZmFpbF91bmxlc3MgKGN0cmwgIT0gTlVMTCwgTlVMTCk7CisgIEdTVF9JTkZPICgiY29udHJvbGxlci0+cmVmX2NvdW50PSVkIiwgR19PQkpFQ1QgKGN0cmwpLT5yZWZfY291bnQpOworICBjdHJsMiA9IGdzdF9jb250cm9sbGVyX25ldyAoR19PQkpFQ1QgKGVsZW0pLCAidWxvbmciLCBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGN0cmwyICE9IE5VTEwsIE5VTEwpOworICBmYWlsX3VubGVzcyAoY3RybCA9PSBjdHJsMiwgTlVMTCk7CisgIEdTVF9JTkZPICgiY29udHJvbGxlci0+cmVmX2NvdW50PSVkIiwgR19PQkpFQ1QgKGN0cmwpLT5yZWZfY291bnQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHX09CSkVDVCAoY3RybCktPnJlZl9jb3VudCwgMik7CisgIGdfbGlzdF9mcmVlIChsaXN0KTsKKyAgZ19vYmplY3RfdW5yZWYgKGN0cmwpOworICBnX29iamVjdF91bnJlZiAoY3RybDIpOworICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtKTsKK30KKworR1NUX0VORF9URVNUOworCisvKiB0ZXN0IGxpbmVhciBpbnRlcnBvbGF0aW9uIGZvciB0cyA8IGZpcnN0IGNvbnRyb2wgcG9pbnQgKi8KK0dTVF9TVEFSVF9URVNUIChjb250cm9sbGVyX2ludGVycG9sYXRlX2xpbmVhcl9iZWZvcmVfdHMwKQoreworICBHc3RDb250cm9sbGVyICpjdHJsOworICBHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSAqY3NvdXJjZTsKKyAgR3N0RWxlbWVudCAqZWxlbTsKKyAgZ2Jvb2xlYW4gcmVzOworICBHVmFsdWUgdmFsX3Vsb25nID0geyAwLCB9OworCisgIGdzdF9jb250cm9sbGVyX2luaXQgKE5VTEwsIE5VTEwpOworCisgIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0bW9ub3NvdXJjZSIsICJ0ZXN0X3NvdXJjZSIpOworCisgIC8qIHRoYXQgcHJvcGVydHkgc2hvdWxkIGV4aXN0IGFuZCBzaG91bGQgYmUgY29udHJvbGxhYmxlICovCisgIGN0cmwgPSBnc3RfY29udHJvbGxlcl9uZXcgKEdfT0JKRUNUIChlbGVtKSwgInVsb25nIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChjdHJsICE9IE5VTEwsIE5VTEwpOworCisgIC8qIEdldCBpbnRlcnBvbGF0aW9uIGNvbnRyb2wgc291cmNlICovCisgIGNzb3VyY2UgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKCk7CisKKyAgZmFpbF91bmxlc3MgKGNzb3VyY2UgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfY29udHJvbGxlcl9zZXRfY29udHJvbF9zb3VyY2UgKGN0cmwsICJ1bG9uZyIsCisgICAgICAgICAgR1NUX0NPTlRST0xfU09VUkNFIChjc291cmNlKSkpOworCisgIC8qIHNldCBpbnRlcnBvbGF0aW9uIG1vZGUgKi8KKyAgZmFpbF91bmxlc3MgKGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldF9pbnRlcnBvbGF0aW9uX21vZGUgKGNzb3VyY2UsCisgICAgICAgICAgR1NUX0lOVEVSUE9MQVRFX0xJTkVBUikpOworCisgIC8qIHNldCBjb250cm9sIHZhbHVlcyAqLworICBnX3ZhbHVlX2luaXQgKCZ2YWxfdWxvbmcsIEdfVFlQRV9VTE9ORyk7CisgIGdfdmFsdWVfc2V0X3Vsb25nICgmdmFsX3Vsb25nLCAxMDApOworICByZXMgPQorICAgICAgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0IChjc291cmNlLCAyICogR1NUX1NFQ09ORCwKKyAgICAgICZ2YWxfdWxvbmcpOworICBmYWlsX3VubGVzcyAocmVzLCBOVUxMKTsKKyAgZ192YWx1ZV9zZXRfdWxvbmcgKCZ2YWxfdWxvbmcsIDApOworICByZXMgPQorICAgICAgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0IChjc291cmNlLCA0ICogR1NUX1NFQ09ORCwKKyAgICAgICZ2YWxfdWxvbmcpOworICBmYWlsX3VubGVzcyAocmVzLCBOVUxMKTsKKworICBnX29iamVjdF91bnJlZiAoR19PQkpFQ1QgKGNzb3VyY2UpKTsKKworICAvKiBub3cgcHVsbCBpbiB2YWx1ZXMgZm9yIHNvbWUgdGltZXN0YW1wcyBhZnRlciBmaXJzdCBjb250cm9sIHBvaW50ICovCisgIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzIChjdHJsLCAyICogR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX01PTk9fU09VUkNFIChlbGVtKS0+dmFsX3Vsb25nLCAxMDApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgMyAqIEdTVF9TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgNTApOworICBnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyAoY3RybCwgNCAqIEdTVF9TRUNPTkQpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9NT05PX1NPVVJDRSAoZWxlbSktPnZhbF91bG9uZywgMCk7CisKKyAgLyogbm93IHB1bGwgaW4gdmFsdWVzIGZvciBzb21lIHRpbWVzdGFtcHMgYmVmb3JlIGZpcnN0IGNvbnRyb2wgcG9pbnQgKi8KKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDEgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDUwKTsKKyAgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMgKGN0cmwsIDAgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfTU9OT19TT1VSQ0UgKGVsZW0pLT52YWxfdWxvbmcsIDApOworCisgIEdTVF9JTkZPICgiY29udHJvbGxlci0+cmVmX2NvdW50PSVkIiwgR19PQkpFQ1QgKGN0cmwpLT5yZWZfY291bnQpOworICBnX29iamVjdF91bnJlZiAoY3RybCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOworfQorCitHU1RfRU5EX1RFU1Q7CisKKy8qIHRlc3QgY29udHJvbC1wb2ludCBoYW5kbGluZyBpbiBpbnRlcnBvbGF0aW9uIGNvbnRyb2wgc291cmNlICovCitHU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9pbnRlcnBvbGF0aW9uX2NwX2NvdW50KQoreworICBHc3RDb250cm9sbGVyICpjdHJsOworICBHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSAqY3NvdXJjZTsKKyAgR3N0RWxlbWVudCAqZWxlbTsKKyAgZ2Jvb2xlYW4gcmVzOworICBHVmFsdWUgdmFsX3Vsb25nID0geyAwLCB9OworCisgIGdzdF9jb250cm9sbGVyX2luaXQgKE5VTEwsIE5VTEwpOworCisgIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0bW9ub3NvdXJjZSIsICJ0ZXN0X3NvdXJjZSIpOworCisgIC8qIHRoYXQgcHJvcGVydHkgc2hvdWxkIGV4aXN0IGFuZCBzaG91bGQgYmUgY29udHJvbGxhYmxlICovCisgIGN0cmwgPSBnc3RfY29udHJvbGxlcl9uZXcgKEdfT0JKRUNUIChlbGVtKSwgInVsb25nIiwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChjdHJsICE9IE5VTEwsIE5VTEwpOworCisgIC8qIEdldCBpbnRlcnBvbGF0aW9uIGNvbnRyb2wgc291cmNlICovCisgIGNzb3VyY2UgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKCk7CisKKyAgZmFpbF91bmxlc3MgKGNzb3VyY2UgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfY29udHJvbGxlcl9zZXRfY29udHJvbF9zb3VyY2UgKGN0cmwsICJ1bG9uZyIsCisgICAgICAgICAgR1NUX0NPTlRST0xfU09VUkNFIChjc291cmNlKSkpOworCisgIC8qIHNldCBpbnRlcnBvbGF0aW9uIG1vZGUgKi8KKyAgZmFpbF91bmxlc3MgKGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldF9pbnRlcnBvbGF0aW9uX21vZGUgKGNzb3VyY2UsCisgICAgICAgICAgR1NUX0lOVEVSUE9MQVRFX05PTkUpKTsKKworICBmYWlsX3VubGVzcyAoZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfZ2V0X2NvdW50IChjc291cmNlKSA9PSAwKTsKKworICAvKiBzZXQgY29udHJvbCB2YWx1ZXMgKi8KKyAgZ192YWx1ZV9pbml0ICgmdmFsX3Vsb25nLCBHX1RZUEVfVUxPTkcpOworICBnX3ZhbHVlX3NldF91bG9uZyAoJnZhbF91bG9uZywgMCk7CisgIHJlcyA9CisgICAgICBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXQgKGNzb3VyY2UsIDAgKiBHU1RfU0VDT05ELAorICAgICAgJnZhbF91bG9uZyk7CisgIGZhaWxfdW5sZXNzIChyZXMsIE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfZ2V0X2NvdW50IChjc291cmNlKSA9PSAxKTsKKyAgZ192YWx1ZV9zZXRfdWxvbmcgKCZ2YWxfdWxvbmcsIDEwMCk7CisgIHJlcyA9CisgICAgICBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXQgKGNzb3VyY2UsIDIgKiBHU1RfU0VDT05ELAorICAgICAgJnZhbF91bG9uZyk7CisgIGZhaWxfdW5sZXNzIChyZXMsIE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfZ2V0X2NvdW50IChjc291cmNlKSA9PSAyKTsKKworICAvKiBub3cgdW5zZXQgY29udHJvbCB2YWx1ZXMgKi8KKyAgcmVzID0gZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfdW5zZXQgKGNzb3VyY2UsIDIgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3MgKHJlcywgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9nZXRfY291bnQgKGNzb3VyY2UpID09IDEpOworCisgIHJlcyA9IGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3Vuc2V0IChjc291cmNlLCAwICogR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzIChyZXMsIE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfZ2V0X2NvdW50IChjc291cmNlKSA9PSAwKTsKKworICBnX29iamVjdF91bnJlZiAoR19PQkpFQ1QgKGNzb3VyY2UpKTsKKworICBHU1RfSU5GTyAoImNvbnRyb2xsZXItPnJlZl9jb3VudD0lZCIsIEdfT0JKRUNUIChjdHJsKS0+cmVmX2NvdW50KTsKKyAgZ19vYmplY3RfdW5yZWYgKGN0cmwpOworICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtKTsKK30KKworR1NUX0VORF9URVNUOworCisKK3N0YXRpYyBTdWl0ZSAqCitnc3RfY29udHJvbGxlcl9zdWl0ZSAodm9pZCkKK3sKKyAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJDb250cm9sbGVyIik7CisgIFRDYXNlICp0YyA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKKworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBjb250cm9sbGVyX2luaXQpOworICB0Y2FzZV9hZGRfdGVzdCAodGMsIGNvbnRyb2xsZXJfcmVmY291bnRfbmV3X2xpc3QpOworICB0Y2FzZV9hZGRfdGVzdCAodGMsIGNvbnRyb2xsZXJfbmV3X2ZhaWwxKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBjb250cm9sbGVyX25ld19mYWlsMik7CisgIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9uZXdfZmFpbDMpOworICB0Y2FzZV9hZGRfdGVzdCAodGMsIGNvbnRyb2xsZXJfbmV3X2ZhaWw0KTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBjb250cm9sbGVyX25ld19mYWlsNSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9uZXdfb2theTEpOworICB0Y2FzZV9hZGRfdGVzdCAodGMsIGNvbnRyb2xsZXJfbmV3X29rYXkyKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBjb250cm9sbGVyX25ld19va2F5Myk7CisgIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9wYXJhbV90d2ljZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9maW5hbGl6ZSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9jb250cm9sc291cmNlX3JlZmNvdW50cyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9jb250cm9sc291cmNlX2VtcHR5MSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9jb250cm9sc291cmNlX2VtcHR5Mik7CisgIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9pbnRlcnBvbGF0ZV9ub25lKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBjb250cm9sbGVyX2ludGVycG9sYXRlX3RyaWdnZXIpOworICB0Y2FzZV9hZGRfdGVzdCAodGMsIGNvbnRyb2xsZXJfaW50ZXJwb2xhdGVfbGluZWFyKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBjb250cm9sbGVyX2ludGVycG9sYXRlX2N1YmljKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBjb250cm9sbGVyX2ludGVycG9sYXRlX2N1YmljX3Rvb19mZXdfY3ApOworICB0Y2FzZV9hZGRfdGVzdCAodGMsIGNvbnRyb2xsZXJfaW50ZXJwb2xhdGVfdW5pbXBsZW1lbnRlZCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9pbnRlcnBvbGF0aW9uX3Vuc2V0KTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBjb250cm9sbGVyX2ludGVycG9sYXRpb25fdW5zZXRfYWxsKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBjb250cm9sbGVyX2ludGVycG9sYXRpb25fbGluZWFyX3ZhbHVlX2FycmF5KTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBjb250cm9sbGVyX2ludGVycG9sYXRpb25fbGluZWFyX2ludmFsaWRfdmFsdWVzKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBjb250cm9sbGVyX2ludGVycG9sYXRpb25fbGluZWFyX2RlZmF1bHRfdmFsdWVzKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBjb250cm9sbGVyX2ludGVycG9sYXRlX2xpbmVhcl9kaXNhYmxlZCk7CisgIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9pbnRlcnBvbGF0aW9uX3NldF9mcm9tX2xpc3QpOworICB0Y2FzZV9hZGRfdGVzdCAodGMsIGNvbnRyb2xsZXJfbGZvX3NpbmUpOworICB0Y2FzZV9hZGRfdGVzdCAodGMsIGNvbnRyb2xsZXJfbGZvX3NpbmVfdGltZXNoaWZ0KTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBjb250cm9sbGVyX2xmb19zcXVhcmUpOworICB0Y2FzZV9hZGRfdGVzdCAodGMsIGNvbnRyb2xsZXJfbGZvX3Nhdyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9sZm9fcnNhdyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9sZm9fdHJpYW5nbGUpOworICB0Y2FzZV9hZGRfdGVzdCAodGMsIGNvbnRyb2xsZXJfbGZvX25vbmUpOworICB0Y2FzZV9hZGRfdGVzdCAodGMsIGNvbnRyb2xsZXJfaGVscGVyX2FueV9nb2JqZWN0KTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBjb250cm9sbGVyX2ludGVycG9sYXRlX2xpbmVhcl9iZWZvcmVfdHMwKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBjb250cm9sbGVyX2ludGVycG9sYXRpb25fY3BfY291bnQpOworCisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoZ3N0X2NvbnRyb2xsZXIpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svbGlicy9nZHAuYyBiL3Rlc3RzL2NoZWNrL2xpYnMvZ2RwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZmNGVkNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2xpYnMvZ2RwLmMKQEAgLTAsMCArMSwxMDUgQEAKKy8qIEdTdHJlYW1lcgorICoKKyAqIHVuaXQgdGVzdCBmb3IgZGF0YSBwcm90b2NvbAorICoKKyAqIENvcHlyaWdodCAoQykgPDIwMDQ+IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KKworI2lmbmRlZiBHU1RfUkVNT1ZFX0RFUFJFQ0FURUQKKyN1bmRlZiBHU1RfRElTQUJMRV9ERVBSRUNBVEVECisjZW5kaWYKKworI2luY2x1ZGUgPGdzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmg+CisjaW5jbHVkZSAibGlicy9nc3QvZGF0YXByb3RvY29sL2RwLXByaXZhdGUuaCIgICAvKiBwcml2YXRlIGhlYWRlciAqLworCisvKiB0ZXN0IG91ciBtZXRob2Qgb2YgcmVhZGluZyBhbmQgd3JpdGluZyBoZWFkZXJzIHVzaW5nIFRPL0ZST01fQkUgKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X2NvbnZlcnNpb24pCit7CisgIGd1aW50OCBhcnJheVs5XTsKKyAgZ3VpbnQ4IHdyaXRlX2FycmF5WzldOworICBndWludDE2IHJlYWRfdHdvLCBleHBlY3RfdHdvOworICBndWludDMyIHJlYWRfZm91ciwgZXhwZWN0X2ZvdXI7CisgIGd1aW50NjQgcmVhZF9laWdodCwgZXhwZWN0X2VpZ2h0OworICBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgOTsgKytpKSB7CisgICAgYXJyYXlbaV0gPSBpICogMHgxMDsKKyAgfQorCisgIC8qIHJlYWQgOCAxNiBiaXRzICovCisgIGZvciAoaSA9IDA7IGkgPCA4OyArK2kpIHsKKyAgICByZWFkX3R3byA9IEdTVF9SRUFEX1VJTlQxNl9CRSAoYXJyYXkgKyBpKTsKKyAgICBleHBlY3RfdHdvID0gYXJyYXlbaV0gKiAoMSA8PCA4KSArIGFycmF5W2kgKyAxXTsKKyAgICBmYWlsX3VubGVzcyAocmVhZF90d28gPT0gZXhwZWN0X3R3bywKKyAgICAgICAgIkdTVF9SRUFEX1VJTlQxNl9CRSAlZDogcmVhZCAlZCAhPSAlZCIsIGksIHJlYWRfdHdvLCBleHBlY3RfdHdvKTsKKyAgfQorCisgIC8qIHdyaXRlIDggMTYgYml0cyAqLworICBmb3IgKGkgPSAwOyBpIDwgODsgKytpKSB7CisgICAgR1NUX1dSSVRFX1VJTlQxNl9CRSAoJndyaXRlX2FycmF5W2ldLCByZWFkX3R3byk7CisgICAgZmFpbF91bmxlc3MgKG1lbWNtcCAoYXJyYXkgKyA3LCB3cml0ZV9hcnJheSArIGksIDIpID09IDAsCisgICAgICAgICJHU1RfV1JJVEVfVUlOVDE2X0JFICVkOiBtZW1jbXAgZmFpbGVkIiwgaSk7CisgIH0KKworICAvKiByZWFkIDUgMzIgYml0cyAqLworICBmb3IgKGkgPSAwOyBpIDwgNTsgKytpKSB7CisgICAgcmVhZF9mb3VyID0gR1NUX1JFQURfVUlOVDMyX0JFIChhcnJheSArIGkpOworICAgIGV4cGVjdF9mb3VyID0gYXJyYXlbaV0gKiAoMSA8PCAyNCkgKyBhcnJheVtpICsgMV0gKiAoMSA8PCAxNikKKyAgICAgICAgKyBhcnJheVtpICsgMl0gKiAoMSA8PCA4KSArIGFycmF5W2kgKyAzXTsKKyAgICBmYWlsX3VubGVzcyAocmVhZF9mb3VyID09IGV4cGVjdF9mb3VyLAorICAgICAgICAiR1NUX1JFQURfVUlOVDMyX0JFICVkOiByZWFkICVkICE9ICVkIiwgaSwgcmVhZF9mb3VyLCBleHBlY3RfZm91cik7CisgIH0KKworICAvKiByZWFkIDIgNjQgYml0cyAqLworICBmb3IgKGkgPSAwOyBpIDwgMjsgKytpKSB7CisgICAgcmVhZF9laWdodCA9IEdTVF9SRUFEX1VJTlQ2NF9CRSAoYXJyYXkgKyBpKTsKKyAgICBleHBlY3RfZWlnaHQgPSBhcnJheVtpXSAqICgxTEwgPDwgNTYpICsgYXJyYXlbaSArIDFdICogKDFMTCA8PCA0OCkKKyAgICAgICAgKyBhcnJheVtpICsgMl0gKiAoMUxMIDw8IDQwKSArIGFycmF5W2kgKyAzXSAqICgxTEwgPDwgMzIpCisgICAgICAgICsgYXJyYXlbaSArIDRdICogKDEgPDwgMjQpICsgYXJyYXlbaSArIDVdICogKDEgPDwgMTYpCisgICAgICAgICsgYXJyYXlbaSArIDZdICogKDEgPDwgOCkgKyBhcnJheVtpICsgN107CisgICAgZmFpbF91bmxlc3MgKHJlYWRfZWlnaHQgPT0gZXhwZWN0X2VpZ2h0LAorICAgICAgICAiR1NUX1JFQURfVUlOVDY0X0JFICVkOiByZWFkICUiIEdfR1VJTlQ2NF9GT1JNQVQKKyAgICAgICAgIiAhPSAlIiBHX0dVSU5UNjRfRk9STUFULCBpLCByZWFkX2VpZ2h0LCBleHBlY3RfZWlnaHQpOworICB9CisKKyAgLyogd3JpdGUgMSA2NCBiaXQgKi8KKyAgR1NUX1dSSVRFX1VJTlQ2NF9CRSAoJndyaXRlX2FycmF5WzBdLCByZWFkX2VpZ2h0KTsKKyAgZmFpbF91bmxlc3MgKG1lbWNtcCAoYXJyYXkgKyAxLCB3cml0ZV9hcnJheSwgOCkgPT0gMCwKKyAgICAgICJHU1RfV1JJVEVfVUlOVDY0X0JFOiBtZW1jbXAgZmFpbGVkIik7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIFN1aXRlICoKK2dzdF9kcF9zdWl0ZSAodm9pZCkKK3sKKyAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJkYXRhIHByb3RvY29sIik7CisgIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKKworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKKyAgdGNhc2VfYWRkX2NoZWNrZWRfZml4dHVyZSAodGNfY2hhaW4sIGdzdF9kcF9pbml0LCBOVUxMKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2NvbnZlcnNpb24pOworCisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoZ3N0X2RwKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2xpYnMvZ3N0bGlic2NwcC5jYyBiL3Rlc3RzL2NoZWNrL2xpYnMvZ3N0bGlic2NwcC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzA3OWU4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hlY2svbGlicy9nc3RsaWJzY3BwLmNjCkBAIC0wLDAgKzEsNzUgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDExIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgorCisjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgorI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2VzaW5rLmg+CisjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXNyYy5oPgorI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KKyNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiaXRyZWFkZXIuaD4KKyNpbmNsdWRlIDxnc3QvYmFzZS9nc3RieXRlcmVhZGVyLmg+CisjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5oPgorI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg+CisjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmg+CisjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0cHVzaHNyYy5oPgorI2luY2x1ZGUgPGdzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmg+CisKKyNpbmNsdWRlIDxnc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmg+CisjaW5jbHVkZSA8Z3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlcnByaXZhdGUuaD4KKyNpbmNsdWRlIDxnc3QvY29udHJvbGxlci9nc3Rjb250cm9sc291cmNlLmg+CisjaW5jbHVkZSA8Z3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuaD4KKyNpbmNsdWRlIDxnc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZXByaXZhdGUuaD4KKyNpbmNsdWRlIDxnc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmg+CisjaW5jbHVkZSA8Z3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZXByaXZhdGUuaD4KKworI2luY2x1ZGUgPGdzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmg+CisKKyNpbmNsdWRlIDxnc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmg+CisjaW5jbHVkZSA8Z3N0L25ldC9nc3RuZXQuaD4KKyNpbmNsdWRlIDxnc3QvbmV0L2dzdG5ldHRpbWVwYWNrZXQuaD4KKyNpbmNsdWRlIDxnc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5oPgorCisvKiB3ZSBtb3N0bHkganVzdCB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IG91ciBsaWJyYXJ5IGhlYWRlcnMgZG9uJ3QKKyAqIGNvbnRhaW4gYW55dGhpbmcgYSBDKysgY29tcGlsZXIgbWlnaHQgbm90IGxpa2UgKi8KK0dTVF9TVEFSVF9URVNUICh0ZXN0X25vdGhpbmcpCit7CisgIGdzdF9pbml0IChOVUxMLCBOVUxMKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgU3VpdGUgKgorbGlic2NwcF9zdWl0ZSAodm9pZCkKK3sKKyAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RMaWJzQ3BwIik7CisgIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoIkMrKyBsaWJzIGhlYWRlciB0ZXN0cyIpOworCisgIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfbm90aGluZyk7CisKKyAgcmV0dXJuIHM7Cit9CisKK0dTVF9DSEVDS19NQUlOIChsaWJzY3BwKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2xpYnMvZ3N0bmV0Y2xpZW50Y2xvY2suYyBiL3Rlc3RzL2NoZWNrL2xpYnMvZ3N0bmV0Y2xpZW50Y2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzIxMDlhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hlY2svbGlicy9nc3RuZXRjbGllbnRjbG9jay5jCkBAIC0wLDAgKzEsMTI4IEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+CisgKgorICogZ3N0bmV0Y2xpZW50Y2xvY2suYzogVW5pdCB0ZXN0IGZvciB0aGUgbmV0d29yayBjbGllbnQgY2xvY2sKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisjaW5jbHVkZSA8Z3N0L25ldC9nc3RuZXQuaD4KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitHU1RfU1RBUlRfVEVTVCAodGVzdF9pbnN0YW50aWF0aW9uKQoreworICBHc3RDbG9jayAqY2xpZW50LCAqbG9jYWw7CisKKyAgbG9jYWwgPSBnc3Rfc3lzdGVtX2Nsb2NrX29idGFpbiAoKTsKKyAgY2xpZW50ID0gZ3N0X25ldF9jbGllbnRfY2xvY2tfbmV3IChOVUxMLCAiMTI3LjAuMC4xIiwgMTIzNCwgR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzIChsb2NhbCAhPSBOVUxMLCAiZmFpbGVkIHRvIGdldCBzeXN0ZW0gY2xvY2siKTsKKyAgZmFpbF91bmxlc3MgKGNsaWVudCAhPSBOVUxMLCAiZmFpbGVkIHRvIGdldCBuZXR3b3JrIGNsaWVudCBjbG9jayIpOworCisgIC8qIG9uZSBmb3IgZ3N0cmVhbWVyLCBvbmUgZm9yIHVzICovCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGxvY2FsLCAic3lzdGVtIGNsb2NrIiwgMik7CisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGNsaWVudCwgIm5ldHdvcmsgY2xpZW50IGNsb2NrIiwgMSk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAoY2xpZW50KTsKKworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChsb2NhbCwgInN5c3RlbSBjbG9jayIsIDIpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKGxvY2FsKTsKK30KKworR1NUX0VORF9URVNUOworCitHU1RfU1RBUlRfVEVTVCAodGVzdF9mdW5jdGlvbmluZykKK3sKKyAgR3N0TmV0VGltZVByb3ZpZGVyICpudHA7CisgIEdzdENsb2NrICpjbGllbnQsICpzZXJ2ZXI7CisgIEdzdENsb2NrVGltZSBiYXNleCwgYmFzZXksIHJhdGVfbnVtLCByYXRlX2Rlbm9tOworICBHc3RDbG9ja1RpbWUgc2VydnRpbWUsIGNsaWVudHRpbWU7CisgIGdpbnQgcG9ydDsKKworICBzZXJ2ZXIgPSBnc3Rfc3lzdGVtX2Nsb2NrX29idGFpbiAoKTsKKyAgZmFpbF91bmxlc3MgKHNlcnZlciAhPSBOVUxMLCAiZmFpbGVkIHRvIGdldCBzeXN0ZW0gY2xvY2siKTsKKworICAvKiBtb3ZlIHRoZSBjbG9jayBhaGVhZCAxMDAgc2Vjb25kcyAqLworICBnc3RfY2xvY2tfZ2V0X2NhbGlicmF0aW9uIChzZXJ2ZXIsICZiYXNleCwgJmJhc2V5LCAmcmF0ZV9udW0sICZyYXRlX2Rlbm9tKTsKKyAgYmFzZXkgKz0gMTAwICogR1NUX1NFQ09ORDsKKyAgZ3N0X2Nsb2NrX3NldF9jYWxpYnJhdGlvbiAoc2VydmVyLCBiYXNleCwgYmFzZXksIHJhdGVfbnVtLCByYXRlX2Rlbm9tKTsKKworICBudHAgPSBnc3RfbmV0X3RpbWVfcHJvdmlkZXJfbmV3IChzZXJ2ZXIsICIxMjcuMC4wLjEiLCAwKTsKKyAgZmFpbF91bmxlc3MgKG50cCAhPSBOVUxMLCAiZmFpbGVkIHRvIGNyZWF0ZSBuZXR3b3JrIHRpbWUgcHJvdmlkZXIiKTsKKworICBnX29iamVjdF9nZXQgKG50cCwgInBvcnQiLCAmcG9ydCwgTlVMTCk7CisKKyAgY2xpZW50ID0gZ3N0X25ldF9jbGllbnRfY2xvY2tfbmV3IChOVUxMLCAiMTI3LjAuMC4xIiwgcG9ydCwgR1NUX1NFQ09ORCk7CisgIGZhaWxfdW5sZXNzIChjbGllbnQgIT0gTlVMTCwgImZhaWxlZCB0byBnZXQgbmV0d29yayBjbGllbnQgY2xvY2siKTsKKworICBnX29iamVjdF9nZXQgKGNsaWVudCwgInBvcnQiLCAmcG9ydCwgTlVMTCk7CisKKyAgLyogbGV0IHRoZSBjbG9ja3Mgc3luY2hyb25pemUgKi8KKyAgZ191c2xlZXAgKEdfVVNFQ19QRVJfU0VDIC8gMik7CisKKyAgc2VydnRpbWUgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKHNlcnZlcik7CisgIGNsaWVudHRpbWUgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKGNsaWVudCk7CisKKyAgLyogY2FuJ3QgaW4gZ2VuZXJhbCBtYWtlIGEgcHJlY2lzZSBhc3NlcnRpb24gaGVyZSwgYmVjYXVzZSB0aGlzIGRlcGVuZHMgb24KKyAgICogc3lzdGVtIGxvYWQgYW5kIGEgbG90IG9mIHRoaW5ncy4gaG93ZXZlciB3aXRoaW4gaGFsZiBhIHNlY29uZCB0aGV5IHNob3VsZAorICAgKiBhdCBsZWFzdCBiZSB3aXRoaW4gMS8xMCBvZiBhIHNlY29uZCBvZiBlYWNoIG90aGVyLi4uICovCisgIGlmIChzZXJ2dGltZSA+IGNsaWVudHRpbWUpCisgICAgZmFpbF91bmxlc3MgKHNlcnZ0aW1lIC0gY2xpZW50dGltZSA8IDEwMCAqIEdTVF9NU0VDT05ELAorICAgICAgICAiY2xvY2tzIG5vdCBpbiBzeW5jICglIiBHU1RfVElNRV9GT1JNQVQgIikiLAorICAgICAgICBHU1RfVElNRV9BUkdTIChzZXJ2dGltZSAtIGNsaWVudHRpbWUpKTsKKyAgZWxzZQorICAgIGZhaWxfdW5sZXNzIChjbGllbnR0aW1lIC0gc2VydnRpbWUgPCAxMDAgKiBHU1RfTVNFQ09ORCwKKyAgICAgICAgImNsb2NrcyBub3QgaW4gc3luYyAoJSIgR1NUX1RJTUVfRk9STUFUICIpIiwKKyAgICAgICAgR1NUX1RJTUVfQVJHUyAoY2xpZW50dGltZSAtIHNlcnZ0aW1lKSk7CisKKyAgLyoKKyAgICAgZ19wcmludCAoImRpZmY6ICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgR1NUX1RJTUVfQVJHUyAoc2VydnRpbWUgPiBjbGllbnR0aW1lID8gc2VydnRpbWUgLSBjbGllbnR0aW1lCisgICAgIDogY2xpZW50dGltZSAtIHNlcnZ0aW1lKSk7CisgICAqLworCisgIC8qIG9uZSBmb3IgZ3N0cmVhbWVyLCBvbmUgZm9yIG50cCwgb25lIGZvciB1cyAqLworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzZXJ2ZXIsICJzeXN0ZW0gY2xvY2siLCAzKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoY2xpZW50LCAibmV0d29yayBjbGllbnQgY2xvY2siLCAxKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChudHApOworCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNlcnZlciwgInN5c3RlbSBjbG9jayIsIDIpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKGNsaWVudCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHNlcnZlcik7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIFN1aXRlICoKK2dzdF9uZXRfY2xpZW50X2Nsb2NrX3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdE5ldENsaWVudENsb2NrIik7CisgIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyaWMgdGVzdHMiKTsKKworICB0Y2FzZV9zZXRfdGltZW91dCAodGNfY2hhaW4sIDApOworCisgIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW5zdGFudGlhdGlvbik7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mdW5jdGlvbmluZyk7CisKKyAgcmV0dXJuIHM7Cit9CisKK0dTVF9DSEVDS19NQUlOIChnc3RfbmV0X2NsaWVudF9jbG9jayk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9saWJzL2dzdG5ldHRpbWVwcm92aWRlci5jIGIvdGVzdHMvY2hlY2svbGlicy9nc3RuZXR0aW1lcHJvdmlkZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTYzMjcwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hlY2svbGlicy9nc3RuZXR0aW1lcHJvdmlkZXIuYwpAQCAtMCwwICsxLDEyOSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorICoKKyAqIGdzdG5ldHRpbWVwcm92aWRlci5jOiBVbml0IHRlc3QgZm9yIHRoZSBuZXR3b3JrIHRpbWUgcHJvdmlkZXIKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisjaW5jbHVkZSA8Z3N0L25ldC9nc3RuZXQuaD4KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitHU1RfU1RBUlRfVEVTVCAodGVzdF9yZWZjb3VudHMpCit7CisgIEdzdE5ldFRpbWVQcm92aWRlciAqbnRwOworICBHc3RDbG9jayAqY2xvY2s7CisKKyAgY2xvY2sgPSBnc3Rfc3lzdGVtX2Nsb2NrX29idGFpbiAoKTsKKyAgZmFpbF91bmxlc3MgKGNsb2NrICE9IE5VTEwsICJmYWlsZWQgdG8gZ2V0IHN5c3RlbSBjbG9jayIpOworCisgIC8qIG9uZSBmb3IgZ3N0cmVhbWVyLCBvbmUgZm9yIHVzICovCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGNsb2NrLCAic3lzdGVtIGNsb2NrIiwgMik7CisKKyAgbnRwID0gZ3N0X25ldF90aW1lX3Byb3ZpZGVyX25ldyAoY2xvY2ssIE5VTEwsIDApOworICBmYWlsX3VubGVzcyAobnRwICE9IE5VTEwsICJmYWlsZWQgdG8gY3JlYXRlIG5ldCB0aW1lIHByb3ZpZGVyIik7CisKKyAgLyogb25lIGZvciBudHAsIG9uZSBmb3IgZ3N0cmVhbWVyLCBvbmUgZm9yIHVzICovCisgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGNsb2NrLCAic3lzdGVtIGNsb2NrIiwgMyk7CisgIC8qIG9uZSBmb3IgdXMgKi8KKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAobnRwLCAibmV0IHRpbWUgcHJvdmlkZXIiLCAxKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChudHApOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChjbG9jaywgIm5ldCB0aW1lIHByb3ZpZGVyIiwgMik7CisKKyAgZ3N0X29iamVjdF91bnJlZiAoY2xvY2spOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2Z1bmN0aW9uaW5nKQoreworICBHc3ROZXRUaW1lUHJvdmlkZXIgKm50cDsKKyAgR3N0TmV0VGltZVBhY2tldCAqcGFja2V0OworICBHc3RDbG9jayAqY2xvY2s7CisgIEdzdENsb2NrVGltZSBsb2NhbDsKKyAgc3RydWN0IHNvY2thZGRyX2luIHNlcnZhZGRyOworICBnaW50IHBvcnQgPSAtMSwgc29ja2ZkLCByZXQ7CisgIHNvY2tsZW5fdCBsZW47CisKKyAgY2xvY2sgPSBnc3Rfc3lzdGVtX2Nsb2NrX29idGFpbiAoKTsKKyAgZmFpbF91bmxlc3MgKGNsb2NrICE9IE5VTEwsICJmYWlsZWQgdG8gZ2V0IHN5c3RlbSBjbG9jayIpOworICBudHAgPSBnc3RfbmV0X3RpbWVfcHJvdmlkZXJfbmV3IChjbG9jaywgIjEyNy4wLjAuMSIsIDApOworICBmYWlsX3VubGVzcyAobnRwICE9IE5VTEwsICJmYWlsZWQgdG8gY3JlYXRlIG5ldCB0aW1lIHByb3ZpZGVyIik7CisKKyAgZ19vYmplY3RfZ2V0IChudHAsICJwb3J0IiwgJnBvcnQsIE5VTEwpOworICBmYWlsX3VubGVzcyAocG9ydCA+IDApOworCisgIHNvY2tmZCA9IHNvY2tldCAoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7CisgIGZhaWxfaWYgKHNvY2tmZCA8IDAsICJzb2NrZXQgZmFpbGVkIik7CisKKyAgbWVtc2V0ICgmc2VydmFkZHIsIDAsIHNpemVvZiAoc2VydmFkZHIpKTsKKyAgc2VydmFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgIHNlcnZhZGRyLnNpbl9wb3J0ID0gaHRvbnMgKHBvcnQpOworI2lmbmRlZiBHX09TX1dJTjMyCisgIGluZXRfYXRvbiAoIjEyNy4wLjAuMSIsICZzZXJ2YWRkci5zaW5fYWRkcik7CisjZWxzZQorICBzZXJ2YWRkci5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIgKCIxMjcuMC4wLjEiKTsKKyNlbmRpZgorCisgIHBhY2tldCA9IGdzdF9uZXRfdGltZV9wYWNrZXRfbmV3IChOVUxMKTsKKyAgZmFpbF91bmxlc3MgKHBhY2tldCAhPSBOVUxMLCAiZmFpbGVkIHRvIGNyZWF0ZSBwYWNrZXQiKTsKKworICBwYWNrZXQtPmxvY2FsX3RpbWUgPSBsb2NhbCA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOworCisgIGxlbiA9IHNpemVvZiAoc2VydmFkZHIpOworICByZXQgPSBnc3RfbmV0X3RpbWVfcGFja2V0X3NlbmQgKHBhY2tldCwgc29ja2ZkLAorICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSAmc2VydmFkZHIsIGxlbik7CisKKyAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfTkVUX1RJTUVfUEFDS0VUX1NJWkUsICJmYWlsZWQgdG8gc2VuZCBwYWNrZXQiKTsKKworICBnX2ZyZWUgKHBhY2tldCk7CisKKyAgcGFja2V0ID0gZ3N0X25ldF90aW1lX3BhY2tldF9yZWNlaXZlIChzb2NrZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNlcnZhZGRyLAorICAgICAgJmxlbik7CisKKyAgZmFpbF91bmxlc3MgKHBhY2tldCAhPSBOVUxMLCAiZmFpbGVkIHRvIHJlY2VpdmUgcGFja2V0Iik7CisgIGZhaWxfdW5sZXNzIChwYWNrZXQtPmxvY2FsX3RpbWUgPT0gbG9jYWwsICJsb2NhbCB0aW1lIGlzIG5vdCB0aGUgc2FtZSIpOworICBmYWlsX3VubGVzcyAocGFja2V0LT5yZW1vdGVfdGltZSA+IGxvY2FsLCAicmVtb3RlIHRpbWUgbm90IGFmdGVyIGxvY2FsIHRpbWUiKTsKKyAgZmFpbF91bmxlc3MgKHBhY2tldC0+cmVtb3RlX3RpbWUgPCBnc3RfY2xvY2tfZ2V0X3RpbWUgKGNsb2NrKSwKKyAgICAgICJyZW1vdGUgdGltZSBpbiB0aGUgZnV0dXJlIik7CisKKyAgZ19mcmVlIChwYWNrZXQpOworCisgIGNsb3NlIChzb2NrZmQpOworCisgIGdzdF9vYmplY3RfdW5yZWYgKG50cCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgU3VpdGUgKgorZ3N0X25ldF90aW1lX3Byb3ZpZGVyX3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdE5ldFRpbWVQcm92aWRlciIpOworICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmljIHRlc3RzIik7CisKKyAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9yZWZjb3VudHMpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZnVuY3Rpb25pbmcpOworCisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoZ3N0X25ldF90aW1lX3Byb3ZpZGVyKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2xpYnMvc3RydWN0X2FybS5oIGIvdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfYXJtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYzYzcxYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2xpYnMvc3RydWN0X2FybS5oCkBAIC0wLDAgKzEsMjYgQEAKKworR3N0Q2hlY2tBQklTdHJ1Y3QgbGlzdFtdID0geworICB7IkdzdEFkYXB0ZXIiLCBzaXplb2YgKEdzdEFkYXB0ZXIpLCA1Mn0sCisgIHsiR3N0QWRhcHRlckNsYXNzIiwgc2l6ZW9mIChHc3RBZGFwdGVyQ2xhc3MpLCA4NH0sCisgIHsiR3N0QmFzZVNpbmsiLCBzaXplb2YgKEdzdEJhc2VTaW5rKSwgNDA4fSwKKyAgeyJHc3RCYXNlU2lua0NsYXNzIiwgc2l6ZW9mIChHc3RCYXNlU2lua0NsYXNzKSwgMzY4fSwKKyAgeyJHc3RCYXNlU3JjIiwgc2l6ZW9mIChHc3RCYXNlU3JjKSwgMzkyfSwKKyAgeyJHc3RCYXNlU3JjQ2xhc3MiLCBzaXplb2YgKEdzdEJhc2VTcmNDbGFzcyksIDM3Nn0sCisgIHsiR3N0QmFzZVRyYW5zZm9ybSIsIHNpemVvZiAoR3N0QmFzZVRyYW5zZm9ybSksIDM2OH0sCisgIHsiR3N0QmFzZVRyYW5zZm9ybUNsYXNzIiwgc2l6ZW9mIChHc3RCYXNlVHJhbnNmb3JtQ2xhc3MpLCAzNzZ9LAorICB7IkdzdENvbGxlY3REYXRhIiwgc2l6ZW9mIChHc3RDb2xsZWN0RGF0YSksIDEyMH0sCisgIHsiR3N0Q29sbGVjdFBhZHMiLCBzaXplb2YgKEdzdENvbGxlY3RQYWRzKSwgOTJ9LAorICB7IkdzdENvbGxlY3RQYWRzQ2xhc3MiLCBzaXplb2YgKEdzdENvbGxlY3RQYWRzQ2xhc3MpLCAxMzZ9LAorICB7IkdzdFB1c2hTcmMiLCBzaXplb2YgKEdzdFB1c2hTcmMpLCA0MDh9LAorICB7IkdzdFB1c2hTcmNDbGFzcyIsIHNpemVvZiAoR3N0UHVzaFNyY0NsYXNzKSwgMzk2fSwKKyAgeyJHc3RUaW1lZFZhbHVlIiwgc2l6ZW9mIChHc3RUaW1lZFZhbHVlKSwgMzJ9LAorICB7IkdzdFZhbHVlQXJyYXkiLCBzaXplb2YgKEdzdFZhbHVlQXJyYXkpLCAyNH0sCisgIHsiR3N0Q29udHJvbGxlciIsIHNpemVvZiAoR3N0Q29udHJvbGxlciksIDQwfSwKKyAgeyJHc3RDb250cm9sbGVyQ2xhc3MiLCBzaXplb2YgKEdzdENvbnRyb2xsZXJDbGFzcyksIDg0fSwKKyAgeyJHc3ROZXRDbGllbnRDbG9jayIsIHNpemVvZiAoR3N0TmV0Q2xpZW50Q2xvY2spLCAyNTZ9LAorICB7IkdzdE5ldENsaWVudENsb2NrQ2xhc3MiLCBzaXplb2YgKEdzdE5ldENsaWVudENsb2NrQ2xhc3MpLCAxOTJ9LAorICB7IkdzdE5ldFRpbWVQYWNrZXQiLCBzaXplb2YgKEdzdE5ldFRpbWVQYWNrZXQpLCAxNn0sCisgIHsiR3N0TmV0VGltZVByb3ZpZGVyIiwgc2l6ZW9mIChHc3ROZXRUaW1lUHJvdmlkZXIpLCA4NH0sCisgIHsiR3N0TmV0VGltZVByb3ZpZGVyQ2xhc3MiLCBzaXplb2YgKEdzdE5ldFRpbWVQcm92aWRlckNsYXNzKSwgMTIwfSwKKyAge05VTEwsIDAsIDB9Cit9OwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfaHBwYS5oIGIvdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfaHBwYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2M2Y4YTcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9ocHBhLmgKQEAgLTAsMCArMSwyNyBAQAorc3RhdGljIEdzdENoZWNrQUJJU3RydWN0IGxpc3RbXSA9IHsKKyAgeyJHc3RBZGFwdGVyIiwgc2l6ZW9mIChHc3RBZGFwdGVyKSwgNTJ9LAorICB7IkdzdEFkYXB0ZXJDbGFzcyIsIHNpemVvZiAoR3N0QWRhcHRlckNsYXNzKSwgODR9LAorICB7IkdzdEJhc2VTaW5rIiwgc2l6ZW9mIChHc3RCYXNlU2luayksIDQwOH0sCisgIHsiR3N0QmFzZVNpbmtDbGFzcyIsIHNpemVvZiAoR3N0QmFzZVNpbmtDbGFzcyksIDM2OH0sCisgIHsiR3N0QmFzZVNyYyIsIHNpemVvZiAoR3N0QmFzZVNyYyksIDM5Mn0sCisgIHsiR3N0QmFzZVNyY0NsYXNzIiwgc2l6ZW9mIChHc3RCYXNlU3JjQ2xhc3MpLCAzNzZ9LAorICB7IkdzdEJhc2VUcmFuc2Zvcm0iLCBzaXplb2YgKEdzdEJhc2VUcmFuc2Zvcm0pLCAzNjh9LAorICB7IkdzdEJhc2VUcmFuc2Zvcm1DbGFzcyIsIHNpemVvZiAoR3N0QmFzZVRyYW5zZm9ybUNsYXNzKSwgMzc2fSwKKyAgeyJHc3RDb2xsZWN0RGF0YSIsIHNpemVvZiAoR3N0Q29sbGVjdERhdGEpLCAxMjB9LAorICB7IkdzdENvbGxlY3RQYWRzIiwgc2l6ZW9mIChHc3RDb2xsZWN0UGFkcyksIDkyfSwKKyAgeyJHc3RDb2xsZWN0UGFkc0NsYXNzIiwgc2l6ZW9mIChHc3RDb2xsZWN0UGFkc0NsYXNzKSwgMTM2fSwKKyAgeyJHc3RQdXNoU3JjIiwgc2l6ZW9mIChHc3RQdXNoU3JjKSwgNDA4fSwKKyAgeyJHc3RQdXNoU3JjQ2xhc3MiLCBzaXplb2YgKEdzdFB1c2hTcmNDbGFzcyksIDM5Nn0sCisKKyAgeyJHc3RUaW1lZFZhbHVlIiwgc2l6ZW9mIChHc3RUaW1lZFZhbHVlKSwgMzJ9LAorICB7IkdzdFZhbHVlQXJyYXkiLCBzaXplb2YgKEdzdFZhbHVlQXJyYXkpLCAyNH0sCisgIHsiR3N0Q29udHJvbGxlciIsIHNpemVvZiAoR3N0Q29udHJvbGxlciksIDQwfSwKKyAgeyJHc3RDb250cm9sbGVyQ2xhc3MiLCBzaXplb2YgKEdzdENvbnRyb2xsZXJDbGFzcyksIDg0fSwKKworICB7IkdzdE5ldENsaWVudENsb2NrIiwgc2l6ZW9mIChHc3ROZXRDbGllbnRDbG9jayksIDI1Nn0sCisgIHsiR3N0TmV0Q2xpZW50Q2xvY2tDbGFzcyIsIHNpemVvZiAoR3N0TmV0Q2xpZW50Q2xvY2tDbGFzcyksIDE5Mn0sCisgIHsiR3N0TmV0VGltZVBhY2tldCIsIHNpemVvZiAoR3N0TmV0VGltZVBhY2tldCksIDE2fSwKKyAgeyJHc3ROZXRUaW1lUHJvdmlkZXIiLCBzaXplb2YgKEdzdE5ldFRpbWVQcm92aWRlciksIDg0fSwKKyAgeyJHc3ROZXRUaW1lUHJvdmlkZXJDbGFzcyIsIHNpemVvZiAoR3N0TmV0VGltZVByb3ZpZGVyQ2xhc3MpLCAxMjB9LAorICB7TlVMTCwgMCwgMH0KK307CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9pMzg2LmggYi90ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9pMzg2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcxN2ZkYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2xpYnMvc3RydWN0X2kzODYuaApAQCAtMCwwICsxLDI4IEBACitzdGF0aWMgR3N0Q2hlY2tBQklTdHJ1Y3QgbGlzdFtdID0geworIHsiR3N0QWRhcHRlciIsIHNpemVvZihHc3RBZGFwdGVyKSwgNTJ9LAorIHsiR3N0QWRhcHRlckNsYXNzIiwgc2l6ZW9mKEdzdEFkYXB0ZXJDbGFzcyksIDg0fSwKKyB7IkdzdEJhc2VTaW5rIiwgc2l6ZW9mKEdzdEJhc2VTaW5rKSwgMzg0fSwKKyB7IkdzdEJhc2VTaW5rQ2xhc3MiLCBzaXplb2YoR3N0QmFzZVNpbmtDbGFzcyksIDM2OH0sCisgeyJHc3RCYXNlU3JjIiwgc2l6ZW9mKEdzdEJhc2VTcmMpLCAzNzZ9LAorIHsiR3N0QmFzZVNyY0NsYXNzIiwgc2l6ZW9mKEdzdEJhc2VTcmNDbGFzcyksIDM3Nn0sCisgeyJHc3RCYXNlVHJhbnNmb3JtIiwgc2l6ZW9mKEdzdEJhc2VUcmFuc2Zvcm0pLCAzNTJ9LAorIHsiR3N0QmFzZVRyYW5zZm9ybUNsYXNzIiwgc2l6ZW9mKEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyksIDM3Nn0sCisgeyJHc3RDb2xsZWN0RGF0YSIsIHNpemVvZihHc3RDb2xsZWN0RGF0YSksIDEyMH0sCisgeyJHc3RDb2xsZWN0UGFkcyIsIHNpemVvZihHc3RDb2xsZWN0UGFkcyksIDkyfSwKKyB7IkdzdENvbGxlY3RQYWRzQ2xhc3MiLCBzaXplb2YoR3N0Q29sbGVjdFBhZHNDbGFzcyksIDEzNn0sCisgeyJHc3RQdXNoU3JjIiwgc2l6ZW9mKEdzdFB1c2hTcmMpLCAzOTJ9LAorIHsiR3N0UHVzaFNyY0NsYXNzIiwgc2l6ZW9mKEdzdFB1c2hTcmNDbGFzcyksIDM5Nn0sCisKKyB7IkdzdFRpbWVkVmFsdWUiLCBzaXplb2YoR3N0VGltZWRWYWx1ZSksIDI4fSwKKyB7IkdzdFZhbHVlQXJyYXkiLCBzaXplb2YoR3N0VmFsdWVBcnJheSksIDIwfSwKKyB7IkdzdENvbnRyb2xsZXIiLCBzaXplb2YoR3N0Q29udHJvbGxlciksIDQwfSwKKyB7IkdzdENvbnRyb2xsZXJDbGFzcyIsIHNpemVvZihHc3RDb250cm9sbGVyQ2xhc3MpLCA4NH0sCisKKyB7IkdzdE5ldENsaWVudENsb2NrIiwgc2l6ZW9mKEdzdE5ldENsaWVudENsb2NrKSwgMjQ4fSwKKyB7IkdzdE5ldENsaWVudENsb2NrQ2xhc3MiLCBzaXplb2YoR3N0TmV0Q2xpZW50Q2xvY2tDbGFzcyksIDE5Mn0sCisgeyJHc3ROZXRUaW1lUGFja2V0Iiwgc2l6ZW9mKEdzdE5ldFRpbWVQYWNrZXQpLCAxNn0sCisgeyJHc3ROZXRUaW1lUHJvdmlkZXIiLCBzaXplb2YoR3N0TmV0VGltZVByb3ZpZGVyKSwgODR9LAorIHsiR3N0TmV0VGltZVByb3ZpZGVyQ2xhc3MiLCBzaXplb2YoR3N0TmV0VGltZVByb3ZpZGVyQ2xhc3MpLCAxMjB9LAorCisge05VTEwsIDAsIDB9Cit9OwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfcHBjMzIuaCBiL3Rlc3RzL2NoZWNrL2xpYnMvc3RydWN0X3BwYzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJmOTJkYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2xpYnMvc3RydWN0X3BwYzMyLmgKQEAgLTAsMCArMSwyNSBAQAorc3RhdGljIEdzdENoZWNrQUJJU3RydWN0IGxpc3RbXSA9IHsKKyAgeyJHc3RBZGFwdGVyIiwgc2l6ZW9mIChHc3RBZGFwdGVyKSwgNTJ9LAorICB7IkdzdEFkYXB0ZXJDbGFzcyIsIHNpemVvZiAoR3N0QWRhcHRlckNsYXNzKSwgODR9LAorICB7IkdzdEJhc2VTaW5rIiwgc2l6ZW9mIChHc3RCYXNlU2luayksIDQwOH0sCisgIHsiR3N0QmFzZVNpbmtDbGFzcyIsIHNpemVvZiAoR3N0QmFzZVNpbmtDbGFzcyksIDM2OH0sCisgIHsiR3N0QmFzZVNyYyIsIHNpemVvZiAoR3N0QmFzZVNyYyksIDM5Mn0sCisgIHsiR3N0QmFzZVNyY0NsYXNzIiwgc2l6ZW9mIChHc3RCYXNlU3JjQ2xhc3MpLCAzNzZ9LAorICB7IkdzdEJhc2VUcmFuc2Zvcm0iLCBzaXplb2YgKEdzdEJhc2VUcmFuc2Zvcm0pLCAzNjh9LAorICB7IkdzdEJhc2VUcmFuc2Zvcm1DbGFzcyIsIHNpemVvZiAoR3N0QmFzZVRyYW5zZm9ybUNsYXNzKSwgMzc2fSwKKyAgeyJHc3RDb2xsZWN0RGF0YSIsIHNpemVvZiAoR3N0Q29sbGVjdERhdGEpLCAxMjB9LAorICB7IkdzdENvbGxlY3RQYWRzIiwgc2l6ZW9mIChHc3RDb2xsZWN0UGFkcyksIDkyfSwKKyAgeyJHc3RDb2xsZWN0UGFkc0NsYXNzIiwgc2l6ZW9mIChHc3RDb2xsZWN0UGFkc0NsYXNzKSwgMTM2fSwKKyAgeyJHc3RQdXNoU3JjIiwgc2l6ZW9mIChHc3RQdXNoU3JjKSwgNDA4fSwKKyAgeyJHc3RQdXNoU3JjQ2xhc3MiLCBzaXplb2YgKEdzdFB1c2hTcmNDbGFzcyksIDM5Nn0sCisgIHsiR3N0VGltZWRWYWx1ZSIsIHNpemVvZiAoR3N0VGltZWRWYWx1ZSksIDMyfSwKKyAgeyJHc3RWYWx1ZUFycmF5Iiwgc2l6ZW9mIChHc3RWYWx1ZUFycmF5KSwgMjR9LAorICB7IkdzdENvbnRyb2xsZXIiLCBzaXplb2YgKEdzdENvbnRyb2xsZXIpLCA0MH0sCisgIHsiR3N0Q29udHJvbGxlckNsYXNzIiwgc2l6ZW9mIChHc3RDb250cm9sbGVyQ2xhc3MpLCA4NH0sCisgIHsiR3N0TmV0Q2xpZW50Q2xvY2siLCBzaXplb2YgKEdzdE5ldENsaWVudENsb2NrKSwgMjU2fSwKKyAgeyJHc3ROZXRDbGllbnRDbG9ja0NsYXNzIiwgc2l6ZW9mIChHc3ROZXRDbGllbnRDbG9ja0NsYXNzKSwgMTkyfSwKKyAgeyJHc3ROZXRUaW1lUGFja2V0Iiwgc2l6ZW9mIChHc3ROZXRUaW1lUGFja2V0KSwgMTZ9LAorICB7IkdzdE5ldFRpbWVQcm92aWRlciIsIHNpemVvZiAoR3N0TmV0VGltZVByb3ZpZGVyKSwgODR9LAorICB7IkdzdE5ldFRpbWVQcm92aWRlckNsYXNzIiwgc2l6ZW9mIChHc3ROZXRUaW1lUHJvdmlkZXJDbGFzcyksIDEyMH0sCisgIHtOVUxMLCAwLCAwfQorfTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2xpYnMvc3RydWN0X3BwYzY0LmggYi90ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9wcGM2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNjU0ZTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9wcGM2NC5oCkBAIC0wLDAgKzEsNDcgQEAKK3N0YXRpYyBHc3RDaGVja0FCSVN0cnVjdCBsaXN0W10gPSB7CisgIHsiR3N0QWRhcHRlciIsIHNpemVvZiAoR3N0QWRhcHRlciksIDg4fQorICAsCisgIHsiR3N0QWRhcHRlckNsYXNzIiwgc2l6ZW9mIChHc3RBZGFwdGVyQ2xhc3MpLCAxNjh9CisgICwKKyAgeyJHc3RCYXNlU2luayIsIHNpemVvZiAoR3N0QmFzZVNpbmspLCA2MDB9CisgICwKKyAgeyJHc3RCYXNlU2lua0NsYXNzIiwgc2l6ZW9mIChHc3RCYXNlU2lua0NsYXNzKSwgNzI4fQorICAsCisgIHsiR3N0QmFzZVNyYyIsIHNpemVvZiAoR3N0QmFzZVNyYyksIDYwMH0KKyAgLAorICB7IkdzdEJhc2VTcmNDbGFzcyIsIHNpemVvZiAoR3N0QmFzZVNyY0NsYXNzKSwgNzQ0fQorICAsCisgIHsiR3N0QmFzZVRyYW5zZm9ybSIsIHNpemVvZiAoR3N0QmFzZVRyYW5zZm9ybSksIDU3Nn0KKyAgLAorICB7IkdzdEJhc2VUcmFuc2Zvcm1DbGFzcyIsIHNpemVvZiAoR3N0QmFzZVRyYW5zZm9ybUNsYXNzKSwgNzQ0fQorICAsCisgIHsiR3N0Q29sbGVjdERhdGEiLCBzaXplb2YgKEdzdENvbGxlY3REYXRhKSwgMTY4fQorICAsCisgIHsiR3N0Q29sbGVjdFBhZHMiLCBzaXplb2YgKEdzdENvbGxlY3RQYWRzKSwgMTY4fQorICAsCisgIHsiR3N0Q29sbGVjdFBhZHNDbGFzcyIsIHNpemVvZiAoR3N0Q29sbGVjdFBhZHNDbGFzcyksIDI3Mn0KKyAgLAorICB7IkdzdFB1c2hTcmMiLCBzaXplb2YgKEdzdFB1c2hTcmMpLCA2MzJ9CisgICwKKyAgeyJHc3RQdXNoU3JjQ2xhc3MiLCBzaXplb2YgKEdzdFB1c2hTcmNDbGFzcyksIDc4NH0KKyAgLAorICB7IkdzdFRpbWVkVmFsdWUiLCBzaXplb2YgKEdzdFRpbWVkVmFsdWUpLCAzMn0KKyAgLAorICB7IkdzdFZhbHVlQXJyYXkiLCBzaXplb2YgKEdzdFZhbHVlQXJyYXkpLCAzMn0KKyAgLAorICB7IkdzdENvbnRyb2xsZXIiLCBzaXplb2YgKEdzdENvbnRyb2xsZXIpLCA4MH0KKyAgLAorICB7IkdzdENvbnRyb2xsZXJDbGFzcyIsIHNpemVvZiAoR3N0Q29udHJvbGxlckNsYXNzKSwgMTY4fQorICAsCisgIHsiR3N0TmV0Q2xpZW50Q2xvY2siLCBzaXplb2YgKEdzdE5ldENsaWVudENsb2NrKSwgMzY4fQorICAsCisgIHsiR3N0TmV0Q2xpZW50Q2xvY2tDbGFzcyIsIHNpemVvZiAoR3N0TmV0Q2xpZW50Q2xvY2tDbGFzcyksIDM4NH0KKyAgLAorICB7IkdzdE5ldFRpbWVQYWNrZXQiLCBzaXplb2YgKEdzdE5ldFRpbWVQYWNrZXQpLCAxNn0KKyAgLAorICB7IkdzdE5ldFRpbWVQcm92aWRlciIsIHNpemVvZiAoR3N0TmV0VGltZVByb3ZpZGVyKSwgMTUyfQorICAsCisgIHsiR3N0TmV0VGltZVByb3ZpZGVyQ2xhc3MiLCBzaXplb2YgKEdzdE5ldFRpbWVQcm92aWRlckNsYXNzKSwgMjQwfQorICAsCisgIHtOVUxMLCAwLCAwfQorfTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2xpYnMvc3RydWN0X3NwYXJjLmggYi90ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9zcGFyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2M2M3MWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9zcGFyYy5oCkBAIC0wLDAgKzEsMjYgQEAKKworR3N0Q2hlY2tBQklTdHJ1Y3QgbGlzdFtdID0geworICB7IkdzdEFkYXB0ZXIiLCBzaXplb2YgKEdzdEFkYXB0ZXIpLCA1Mn0sCisgIHsiR3N0QWRhcHRlckNsYXNzIiwgc2l6ZW9mIChHc3RBZGFwdGVyQ2xhc3MpLCA4NH0sCisgIHsiR3N0QmFzZVNpbmsiLCBzaXplb2YgKEdzdEJhc2VTaW5rKSwgNDA4fSwKKyAgeyJHc3RCYXNlU2lua0NsYXNzIiwgc2l6ZW9mIChHc3RCYXNlU2lua0NsYXNzKSwgMzY4fSwKKyAgeyJHc3RCYXNlU3JjIiwgc2l6ZW9mIChHc3RCYXNlU3JjKSwgMzkyfSwKKyAgeyJHc3RCYXNlU3JjQ2xhc3MiLCBzaXplb2YgKEdzdEJhc2VTcmNDbGFzcyksIDM3Nn0sCisgIHsiR3N0QmFzZVRyYW5zZm9ybSIsIHNpemVvZiAoR3N0QmFzZVRyYW5zZm9ybSksIDM2OH0sCisgIHsiR3N0QmFzZVRyYW5zZm9ybUNsYXNzIiwgc2l6ZW9mIChHc3RCYXNlVHJhbnNmb3JtQ2xhc3MpLCAzNzZ9LAorICB7IkdzdENvbGxlY3REYXRhIiwgc2l6ZW9mIChHc3RDb2xsZWN0RGF0YSksIDEyMH0sCisgIHsiR3N0Q29sbGVjdFBhZHMiLCBzaXplb2YgKEdzdENvbGxlY3RQYWRzKSwgOTJ9LAorICB7IkdzdENvbGxlY3RQYWRzQ2xhc3MiLCBzaXplb2YgKEdzdENvbGxlY3RQYWRzQ2xhc3MpLCAxMzZ9LAorICB7IkdzdFB1c2hTcmMiLCBzaXplb2YgKEdzdFB1c2hTcmMpLCA0MDh9LAorICB7IkdzdFB1c2hTcmNDbGFzcyIsIHNpemVvZiAoR3N0UHVzaFNyY0NsYXNzKSwgMzk2fSwKKyAgeyJHc3RUaW1lZFZhbHVlIiwgc2l6ZW9mIChHc3RUaW1lZFZhbHVlKSwgMzJ9LAorICB7IkdzdFZhbHVlQXJyYXkiLCBzaXplb2YgKEdzdFZhbHVlQXJyYXkpLCAyNH0sCisgIHsiR3N0Q29udHJvbGxlciIsIHNpemVvZiAoR3N0Q29udHJvbGxlciksIDQwfSwKKyAgeyJHc3RDb250cm9sbGVyQ2xhc3MiLCBzaXplb2YgKEdzdENvbnRyb2xsZXJDbGFzcyksIDg0fSwKKyAgeyJHc3ROZXRDbGllbnRDbG9jayIsIHNpemVvZiAoR3N0TmV0Q2xpZW50Q2xvY2spLCAyNTZ9LAorICB7IkdzdE5ldENsaWVudENsb2NrQ2xhc3MiLCBzaXplb2YgKEdzdE5ldENsaWVudENsb2NrQ2xhc3MpLCAxOTJ9LAorICB7IkdzdE5ldFRpbWVQYWNrZXQiLCBzaXplb2YgKEdzdE5ldFRpbWVQYWNrZXQpLCAxNn0sCisgIHsiR3N0TmV0VGltZVByb3ZpZGVyIiwgc2l6ZW9mIChHc3ROZXRUaW1lUHJvdmlkZXIpLCA4NH0sCisgIHsiR3N0TmV0VGltZVByb3ZpZGVyQ2xhc3MiLCBzaXplb2YgKEdzdE5ldFRpbWVQcm92aWRlckNsYXNzKSwgMTIwfSwKKyAge05VTEwsIDAsIDB9Cit9OwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfeDg2XzY0LmggYi90ZXN0cy9jaGVjay9saWJzL3N0cnVjdF94ODZfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDE3YWE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfeDg2XzY0LmgKQEAgLTAsMCArMSw0MCBAQAorCitHc3RDaGVja0FCSVN0cnVjdCBsaXN0W10gPSB7CisgIHsiR3N0QWRhcHRlckNsYXNzIiwgc2l6ZW9mIChHc3RBZGFwdGVyQ2xhc3MpLCAxNjh9LAorICB7IkdzdEFkYXB0ZXIiLCBzaXplb2YgKEdzdEFkYXB0ZXIpLCA4OH0sCisgIHsiR3N0QmFzZVNpbmtDbGFzcyIsIHNpemVvZiAoR3N0QmFzZVNpbmtDbGFzcyksIDcyOH0sCisgIHsiR3N0QmFzZVNpbmsiLCBzaXplb2YgKEdzdEJhc2VTaW5rKSwgNjAwfSwKKyAgeyJHc3RCYXNlU3JjQ2xhc3MiLCBzaXplb2YgKEdzdEJhc2VTcmNDbGFzcyksIDc0NH0sCisgIHsiR3N0QmFzZVNyYyIsIHNpemVvZiAoR3N0QmFzZVNyYyksIDYwMH0sCisgIHsiR3N0QmFzZVRyYW5zZm9ybUNsYXNzIiwgc2l6ZW9mIChHc3RCYXNlVHJhbnNmb3JtQ2xhc3MpLCA3NDR9LAorICB7IkdzdEJhc2VUcmFuc2Zvcm0iLCBzaXplb2YgKEdzdEJhc2VUcmFuc2Zvcm0pLCA1NzZ9LAorICB7IkdzdEJpdFJlYWRlciIsIHNpemVvZiAoR3N0Qml0UmVhZGVyKSwgMjR9LAorICB7IkdzdEJ5dGVSZWFkZXIiLCBzaXplb2YgKEdzdEJ5dGVSZWFkZXIpLCAxNn0sCisgIHsiR3N0Qnl0ZVdyaXRlciIsIHNpemVvZiAoR3N0Qnl0ZVdyaXRlciksIDMyfSwKKyAgeyJHc3RDb2xsZWN0RGF0YSIsIHNpemVvZiAoR3N0Q29sbGVjdERhdGEpLCAxNjh9LAorICB7IkdzdENvbGxlY3RQYWRzQ2xhc3MiLCBzaXplb2YgKEdzdENvbGxlY3RQYWRzQ2xhc3MpLCAyNzJ9LAorICB7IkdzdENvbGxlY3RQYWRzIiwgc2l6ZW9mIChHc3RDb2xsZWN0UGFkcyksIDE2OH0sCisgIHsiR3N0Q29udHJvbGxlckNsYXNzIiwgc2l6ZW9mIChHc3RDb250cm9sbGVyQ2xhc3MpLCAxNjh9LAorICB7IkdzdENvbnRyb2xsZXIiLCBzaXplb2YgKEdzdENvbnRyb2xsZXIpLCA4MH0sCisgIHsiR3N0Q29udHJvbFNvdXJjZUNsYXNzIiwgc2l6ZW9mIChHc3RDb250cm9sU291cmNlQ2xhc3MpLCAxNzZ9LAorICB7IkdzdENvbnRyb2xTb3VyY2UiLCBzaXplb2YgKEdzdENvbnRyb2xTb3VyY2UpLCA4MH0sCisgIHsiR3N0RGF0YVF1ZXVlQ2xhc3MiLCBzaXplb2YgKEdzdERhdGFRdWV1ZUNsYXNzKSwgMTg0fSwKKyAgeyJHc3REYXRhUXVldWVJdGVtIiwgc2l6ZW9mIChHc3REYXRhUXVldWVJdGVtKSwgNDB9LAorICB7IkdzdERhdGFRdWV1ZSIsIHNpemVvZiAoR3N0RGF0YVF1ZXVlKSwgMTI4fSwKKyAgeyJHc3REYXRhUXVldWVTaXplIiwgc2l6ZW9mIChHc3REYXRhUXVldWVTaXplKSwgMTZ9LAorICB7IkdzdERQUGFja2V0aXplciIsIHNpemVvZiAoR3N0RFBQYWNrZXRpemVyKSwgNjR9LAorICB7IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlQ2xhc3MiLCBzaXplb2YgKEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlQ2xhc3MpLCAyMDh9LAorICB7IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlIiwgc2l6ZW9mIChHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSksIDEyOH0sCisgIHsiR3N0TEZPQ29udHJvbFNvdXJjZUNsYXNzIiwgc2l6ZW9mIChHc3RMRk9Db250cm9sU291cmNlQ2xhc3MpLCAyMDh9LAorICB7IkdzdExGT0NvbnRyb2xTb3VyY2UiLCBzaXplb2YgKEdzdExGT0NvbnRyb2xTb3VyY2UpLCAxMjh9LAorICB7IkdzdE5ldENsaWVudENsb2NrQ2xhc3MiLCBzaXplb2YgKEdzdE5ldENsaWVudENsb2NrQ2xhc3MpLCAzODR9LAorICB7IkdzdE5ldENsaWVudENsb2NrIiwgc2l6ZW9mIChHc3ROZXRDbGllbnRDbG9jayksIDM2OH0sCisgIHsiR3N0TmV0VGltZVBhY2tldCIsIHNpemVvZiAoR3N0TmV0VGltZVBhY2tldCksIDE2fSwKKyAgeyJHc3ROZXRUaW1lUHJvdmlkZXJDbGFzcyIsIHNpemVvZiAoR3N0TmV0VGltZVByb3ZpZGVyQ2xhc3MpLCAyNDB9LAorICB7IkdzdE5ldFRpbWVQcm92aWRlciIsIHNpemVvZiAoR3N0TmV0VGltZVByb3ZpZGVyKSwgMTUyfSwKKyAgeyJHc3RQdXNoU3JjQ2xhc3MiLCBzaXplb2YgKEdzdFB1c2hTcmNDbGFzcyksIDc4NH0sCisgIHsiR3N0UHVzaFNyYyIsIHNpemVvZiAoR3N0UHVzaFNyYyksIDYzMn0sCisgIHsiR3N0VGltZWRWYWx1ZSIsIHNpemVvZiAoR3N0VGltZWRWYWx1ZSksIDMyfSwKKyAgeyJHc3RWYWx1ZUFycmF5Iiwgc2l6ZW9mIChHc3RWYWx1ZUFycmF5KSwgMzJ9LAorICB7TlVMTCwgMCwgMH0KK307CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9saWJzL3Rlc3RfdHJhbnNmb3JtLmMgYi90ZXN0cy9jaGVjay9saWJzL3Rlc3RfdHJhbnNmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIyMjlkMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2xpYnMvdGVzdF90cmFuc2Zvcm0uYwpAQCAtMCwwICsxLDIzMCBAQAorCisjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oPgorCit0eXBlZGVmIHN0cnVjdAoreworICBHc3RQYWQgKnNyY3BhZDsKKyAgR3N0UGFkICpzaW5rcGFkOworICBHTGlzdCAqZXZlbnRzOworICBHTGlzdCAqYnVmZmVyczsKKyAgR3N0RWxlbWVudCAqdHJhbnM7CisgIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqa2xhc3M7Cit9IFRlc3RUcmFuc0RhdGE7CisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfdGVzdF90cmFuc19zcmNfdGVtcGxhdGUgPQorR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAorICAgIEdTVF9QQURfU1JDLAorICAgIEdTVF9QQURfQUxXQVlTLAorICAgIEdTVF9TVEFUSUNfQ0FQUyAoImZvby94LWJhciIpCisgICAgKTsKKworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF90ZXN0X3RyYW5zX3NpbmtfdGVtcGxhdGUgPQorR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKKyAgICBHU1RfUEFEX1NJTkssCisgICAgR1NUX1BBRF9BTFdBWVMsCisgICAgR1NUX1NUQVRJQ19DQVBTICgiZm9vL3gtYmFyIikKKyAgICApOworCit0eXBlZGVmIHN0cnVjdCBfR3N0VGVzdFRyYW5zIEdzdFRlc3RUcmFuczsKK3R5cGVkZWYgc3RydWN0IF9Hc3RUZXN0VHJhbnNDbGFzcyBHc3RUZXN0VHJhbnNDbGFzczsKKworI2RlZmluZSBHU1RfVFlQRV9URVNUX1RSQU5TIFwKKyAgKGdzdF90ZXN0X3RyYW5zX2dldF90eXBlKCkpCisjZGVmaW5lIEdTVF9URVNUX1RSQU5TKG9iaikgXAorICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfVEVTVF9UUkFOUyxHc3RUZXN0VHJhbnMpKQorI2RlZmluZSBHU1RfVEVTVF9UUkFOU19DTEFTUyhrbGFzcykgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9URVNUX1RSQU5TLEdzdFRlc3RUcmFuc0NsYXNzKSkKKyNkZWZpbmUgR1NUX1RFU1RfVFJBTlNfR0VUX0NMQVNTKG9iaikgXAorICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgR1NUX1RZUEVfVEVTVF9UUkFOUywgR3N0VGVzdFRyYW5zQ2xhc3MpKQorI2RlZmluZSBHU1RfSVNfVEVTVF9UUkFOUyhvYmopIFwKKyAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1RFU1RfVFJBTlMpKQorI2RlZmluZSBHU1RfSVNfVEVTVF9UUkFOU19DTEFTUyhrbGFzcykgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9URVNUX1RSQU5TKSkKKworc3RydWN0IF9Hc3RUZXN0VHJhbnMKK3sKKyAgR3N0QmFzZVRyYW5zZm9ybSBlbGVtZW50OworCisgIFRlc3RUcmFuc0RhdGEgKmRhdGE7Cit9OworCitzdHJ1Y3QgX0dzdFRlc3RUcmFuc0NsYXNzCit7CisgIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitHVHlwZSBnc3RfdGVzdF90cmFuc19nZXRfdHlwZSAodm9pZCk7CisKK0dfREVGSU5FX1RZUEUgKEdzdFRlc3RUcmFucywgZ3N0X3Rlc3RfdHJhbnMsIEdTVF9UWVBFX0JBU0VfVFJBTlNGT1JNKTsKKworc3RhdGljIEdzdEZsb3dSZXR1cm4gKCprbGFzc190cmFuc2Zvcm0pIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCisgICAgR3N0QnVmZmVyICogaW5idWYsIEdzdEJ1ZmZlciAqIG91dGJ1ZikgPSBOVUxMOworc3RhdGljIEdzdEZsb3dSZXR1cm4gKCprbGFzc190cmFuc2Zvcm1faXApIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCisgICAgR3N0QnVmZmVyICogYnVmKSA9IE5VTEw7CitzdGF0aWMgZ2Jvb2xlYW4gKCprbGFzc19zZXRfY2FwcykgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0Q2FwcyAqIGluY2FwcywKKyAgICBHc3RDYXBzICogb3V0Y2FwcykgPSBOVUxMOworc3RhdGljIEdzdENhcHMgKigqa2xhc3NfdHJhbnNmb3JtX2NhcHMpIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCisgICAgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwgR3N0Q2FwcyAqIGNhcHMsIEdzdENhcHMgKiBmaWx0ZXIpID0gTlVMTDsKK3N0YXRpYyBnYm9vbGVhbiAoKmtsYXNzX3RyYW5zZm9ybV9zaXplKSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAorICAgIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdENhcHMgKiBjYXBzLCBnc2l6ZSBzaXplLCBHc3RDYXBzICogb3RoZXJjYXBzLAorICAgIGdzaXplICogb3RoZXJzaXplKSA9IE5VTEw7CitzdGF0aWMgZ2Jvb2xlYW4ga2xhc3NfcGFzc3Rocm91Z2hfb25fc2FtZV9jYXBzID0gRkFMU0U7CisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqc2lua190ZW1wbGF0ZSA9ICZnc3RfdGVzdF90cmFuc19zaW5rX3RlbXBsYXRlOworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlICpzcmNfdGVtcGxhdGUgPSAmZ3N0X3Rlc3RfdHJhbnNfc3JjX3RlbXBsYXRlOworCitzdGF0aWMgdm9pZAorZ3N0X3Rlc3RfdHJhbnNfY2xhc3NfaW5pdCAoR3N0VGVzdFRyYW5zQ2xhc3MgKiBrbGFzcykKK3sKKyAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzOworICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKnRyYW5zX2NsYXNzOworCisgIGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOworICB0cmFuc19jbGFzcyA9IChHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKikga2xhc3M7CisKKyAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2ltcGxlIChlbGVtZW50X2NsYXNzLCAiVGVzdFRyYW5zIiwKKyAgICAgICJGaWx0ZXIvVGVzdCIsICJUZXN0IHRyYW5zZm9ybSIsICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiIpOworCisgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCisgICAgICBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgKHNpbmtfdGVtcGxhdGUpKTsKKyAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKKyAgICAgIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoc3JjX3RlbXBsYXRlKSk7CisKKyAgdHJhbnNfY2xhc3MtPnBhc3N0aHJvdWdoX29uX3NhbWVfY2FwcyA9IGtsYXNzX3Bhc3N0aHJvdWdoX29uX3NhbWVfY2FwczsKKyAgdHJhbnNfY2xhc3MtPnRyYW5zZm9ybV9pcCA9IGtsYXNzX3RyYW5zZm9ybV9pcDsKKyAgdHJhbnNfY2xhc3MtPnRyYW5zZm9ybSA9IGtsYXNzX3RyYW5zZm9ybTsKKyAgdHJhbnNfY2xhc3MtPnRyYW5zZm9ybV9jYXBzID0ga2xhc3NfdHJhbnNmb3JtX2NhcHM7CisgIHRyYW5zX2NsYXNzLT50cmFuc2Zvcm1fc2l6ZSA9IGtsYXNzX3RyYW5zZm9ybV9zaXplOworICB0cmFuc19jbGFzcy0+c2V0X2NhcHMgPSBrbGFzc19zZXRfY2FwczsKK30KKworc3RhdGljIHZvaWQKK2dzdF90ZXN0X3RyYW5zX2luaXQgKEdzdFRlc3RUcmFucyAqIHRoaXMpCit7Cit9CisKK3N0YXRpYyB2b2lkCitnc3RfdGVzdF90cmFuc19zZXRfZGF0YSAoR3N0VGVzdFRyYW5zICogdGhpcywgVGVzdFRyYW5zRGF0YSAqIGRhdGEpCit7CisgIHRoaXMtPmRhdGEgPSBkYXRhOworfQorCitzdGF0aWMgR3N0Rmxvd1JldHVybgorcmVzdWx0X3NpbmtfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0QnVmZmVyICogYnVmZmVyKQoreworICBUZXN0VHJhbnNEYXRhICpkYXRhOworCisgIGRhdGEgPSBnc3RfcGFkX2dldF9lbGVtZW50X3ByaXZhdGUgKHBhZCk7CisKKyAgZGF0YS0+YnVmZmVycyA9IGdfbGlzdF9hcHBlbmQgKGRhdGEtPmJ1ZmZlcnMsIGJ1ZmZlcik7CisKKyAgcmV0dXJuIEdTVF9GTE9XX09LOworfQorCisjaWYgMAorc3RhdGljIEdzdEZsb3dSZXR1cm4KK3Jlc3VsdF9idWZmZXJfYWxsb2MgKEdzdFBhZCAqIHBhZCwgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50IHNpemUsIEdzdENhcHMgKiBjYXBzLAorICAgIEdzdEJ1ZmZlciAqKiBidWYpCit7CisgIEdzdEZsb3dSZXR1cm4gcmVzOworICBUZXN0VHJhbnNEYXRhICpkYXRhOworCisgIGRhdGEgPSBnc3RfcGFkX2dldF9lbGVtZW50X3ByaXZhdGUgKHBhZCk7CisKKyAgKmJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoc2l6ZSk7CisgIGdzdF9idWZmZXJfc2V0X2NhcHMgKCpidWYsIGNhcHMpOworICByZXMgPSBHU1RfRkxPV19PSzsKKworICByZXR1cm4gcmVzOworfQorI2VuZGlmCisKK3N0YXRpYyBUZXN0VHJhbnNEYXRhICoKK2dzdF90ZXN0X3RyYW5zX25ldyAodm9pZCkKK3sKKyAgVGVzdFRyYW5zRGF0YSAqcmVzOworICBHc3RQYWQgKnRtcDsKKyAgR3N0UGFkVGVtcGxhdGUgKnRlbXBsOworCisgIHJlcyA9IGdfbmV3MCAoVGVzdFRyYW5zRGF0YSwgMSk7CisgIHJlcy0+dHJhbnMgPSBnX29iamVjdF9uZXcgKEdTVF9UWVBFX1RFU1RfVFJBTlMsIE5VTEwpOworCisgIHRlbXBsID0gZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0IChzaW5rX3RlbXBsYXRlKTsKKyAgdGVtcGwtPmRpcmVjdGlvbiA9IEdTVF9QQURfU1JDOworICByZXMtPnNyY3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHRlbXBsLCAic3JjIik7CisgIGdzdF9vYmplY3RfdW5yZWYgKHRlbXBsKTsKKworICB0ZW1wbCA9IGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoc3JjX3RlbXBsYXRlKTsKKyAgdGVtcGwtPmRpcmVjdGlvbiA9IEdTVF9QQURfU0lOSzsKKyAgcmVzLT5zaW5rcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAodGVtcGwsICJzaW5rIik7CisgIGdzdF9vYmplY3RfdW5yZWYgKHRlbXBsKTsKKworICByZXMtPmtsYXNzID0gR1NUX0JBU0VfVFJBTlNGT1JNX0dFVF9DTEFTUyAocmVzLT50cmFucyk7CisKKyAgZ3N0X3Rlc3RfdHJhbnNfc2V0X2RhdGEgKEdTVF9URVNUX1RSQU5TIChyZXMtPnRyYW5zKSwgcmVzKTsKKyAgZ3N0X3BhZF9zZXRfZWxlbWVudF9wcml2YXRlIChyZXMtPnNpbmtwYWQsIHJlcyk7CisKKyAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHJlcy0+c2lua3BhZCwgcmVzdWx0X3NpbmtfY2hhaW4pOworCisgIHRtcCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChyZXMtPnRyYW5zLCAic2luayIpOworICBnc3RfcGFkX2xpbmsgKHJlcy0+c3JjcGFkLCB0bXApOworICBnc3Rfb2JqZWN0X3VucmVmICh0bXApOworCisgIHRtcCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChyZXMtPnRyYW5zLCAic3JjIik7CisgIGdzdF9wYWRfbGluayAodG1wLCByZXMtPnNpbmtwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmICh0bXApOworCisgIGdzdF9wYWRfc2V0X2FjdGl2ZSAocmVzLT5zaW5rcGFkLCBUUlVFKTsKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChyZXMtPnRyYW5zLCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgZ3N0X3BhZF9zZXRfYWN0aXZlIChyZXMtPnNyY3BhZCwgVFJVRSk7CisKKyAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQKK2dzdF90ZXN0X3RyYW5zX2ZyZWUgKFRlc3RUcmFuc0RhdGEgKiBkYXRhKQoreworICBHc3RQYWQgKnRtcDsKKworICBnc3RfcGFkX3NldF9hY3RpdmUgKGRhdGEtPnNpbmtwYWQsIEZBTFNFKTsKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChkYXRhLT50cmFucywgR1NUX1NUQVRFX05VTEwpOworICBnc3RfcGFkX3NldF9hY3RpdmUgKGRhdGEtPnNyY3BhZCwgRkFMU0UpOworCisgIHRtcCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChkYXRhLT50cmFucywgInNyYyIpOworICBnc3RfcGFkX3VubGluayAodG1wLCBkYXRhLT5zaW5rcGFkKTsKKyAgZ3N0X29iamVjdF91bnJlZiAodG1wKTsKKworICB0bXAgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZGF0YS0+dHJhbnMsICJzaW5rIik7CisgIGdzdF9wYWRfbGluayAoZGF0YS0+c3JjcGFkLCB0bXApOworICBnc3Rfb2JqZWN0X3VucmVmICh0bXApOworCisgIGdzdF9vYmplY3RfdW5yZWYgKGRhdGEtPnNyY3BhZCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGRhdGEtPnNpbmtwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChkYXRhLT50cmFucyk7CisKKyAgZ19mcmVlIChkYXRhKTsKK30KKworc3RhdGljIEdzdEZsb3dSZXR1cm4KK2dzdF90ZXN0X3RyYW5zX3B1c2ggKFRlc3RUcmFuc0RhdGEgKiBkYXRhLCBHc3RCdWZmZXIgKiBidWZmZXIpCit7CisgIEdzdEZsb3dSZXR1cm4gcmV0OworCisgIHJldCA9IGdzdF9wYWRfcHVzaCAoZGF0YS0+c3JjcGFkLCBidWZmZXIpOworCisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBHc3RCdWZmZXIgKgorZ3N0X3Rlc3RfdHJhbnNfcG9wIChUZXN0VHJhbnNEYXRhICogZGF0YSkKK3sKKyAgR3N0QnVmZmVyICpyZXQ7CisKKyAgaWYgKGRhdGEtPmJ1ZmZlcnMpIHsKKyAgICByZXQgPSBkYXRhLT5idWZmZXJzLT5kYXRhOworICAgIGRhdGEtPmJ1ZmZlcnMgPSBnX2xpc3RfZGVsZXRlX2xpbmsgKGRhdGEtPmJ1ZmZlcnMsIGRhdGEtPmJ1ZmZlcnMpOworICB9IGVsc2UgeworICAgIHJldCA9IE5VTEw7CisgIH0KKyAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2xpYnMvdHJhbnNmb3JtMS5jIGIvdGVzdHMvY2hlY2svbGlicy90cmFuc2Zvcm0xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZhYTUyZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL2xpYnMvdHJhbnNmb3JtMS5jCkBAIC0wLDAgKzEsMTM5MyBAQAorLyogR1N0cmVhbWVyCisgKgorICogc29tZSB1bml0IHRlc3RzIGZvciBHc3RCYXNlVHJhbnNmb3JtCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KKyNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg+CisKKyNpbmNsdWRlICJ0ZXN0X3RyYW5zZm9ybS5jIgorCitzdGF0aWMgZ2Jvb2xlYW4gYnVmZmVyX2FsbG9jX3B0MV9jYWxsZWQ7CisKKyNpZiAwCitzdGF0aWMgR3N0Rmxvd1JldHVybgorYnVmZmVyX2FsbG9jX3B0MSAoR3N0UGFkICogcGFkLCBndWludDY0IG9mZnNldCwgZ3VpbnQgc2l6ZSwgR3N0Q2FwcyAqIGNhcHMsCisgICAgR3N0QnVmZmVyICoqIGJ1ZikKK3sKKyAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiYnVmZmVyX2FsbG9jIGNhbGxlZCAlIiBHX0dVSU5UNjRfRk9STUFUICIsICV1LCAlIgorICAgICAgR1NUX1BUUl9GT1JNQVQsIG9mZnNldCwgc2l6ZSwgY2Fwcyk7CisKKyAgYnVmZmVyX2FsbG9jX3B0MV9jYWxsZWQgPSBUUlVFOworCisgICpidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHNpemUpOworICBnc3RfYnVmZmVyX3NldF9jYXBzICgqYnVmLCBjYXBzKTsKKworICByZXR1cm4gR1NUX0ZMT1dfT0s7Cit9CisjZW5kaWYKKworc3RhdGljIGdib29sZWFuIHNldF9jYXBzX3B0MV9jYWxsZWQ7CisKK3N0YXRpYyBnYm9vbGVhbgorc2V0X2NhcHNfcHQxIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdENhcHMgKiBpbmNhcHMsIEdzdENhcHMgKiBvdXRjYXBzKQoreworICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgInNldF9jYXBzIGNhbGxlZCIpOworCisgIHNldF9jYXBzX3B0MV9jYWxsZWQgPSBUUlVFOworCisgIHJldHVybiBUUlVFOworfQorCisvKiBiYXNpYyBwYXNzdGhyb3VnaCwgd2UgZG9uJ3QgaGF2ZSBhbnkgdHJhbnNmb3JtIGZ1bmN0aW9ucyBzbyB3ZSBjYW4gb25seQorICogcGVyZm9ybSBwYXNzdGhyb3VnaC4gV2UgYWxzbyBkb24ndCBoYXZlIGNhcHMsIHdoaWNoIGlzIGZpbmUgKi8KK0dTVF9TVEFSVF9URVNUIChiYXNldHJhbnNmb3JtX2NoYWluX3B0MSkKK3sKKyAgVGVzdFRyYW5zRGF0YSAqdHJhbnM7CisgIEdzdEJ1ZmZlciAqYnVmZmVyOworICBHc3RGbG93UmV0dXJuIHJlczsKKyAgLy9Hc3RDYXBzICpjYXBzOworCisgIGtsYXNzX3NldF9jYXBzID0gc2V0X2NhcHNfcHQxOworICB0cmFucyA9IGdzdF90ZXN0X3RyYW5zX25ldyAoKTsKKworICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImJ1ZmZlciB3aXRob3V0IGNhcHMsIHNpemUgMjAiKTsKKworICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDIwKTsKKworICBidWZmZXJfYWxsb2NfcHQxX2NhbGxlZCA9IEZBTFNFOworICBzZXRfY2Fwc19wdDFfY2FsbGVkID0gRkFMU0U7CisgIHJlcyA9IGdzdF90ZXN0X3RyYW5zX3B1c2ggKHRyYW5zLCBidWZmZXIpOworICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9GTE9XX09LKTsKKyAgLyogRklYTUUsIHBhc3N0aG91Z2ggd2l0aG91dCBwYWQtYWxsb2MsIGRvIHBhZC1hbGxvYyBvbiB0aGUgc3JjcGFkICovCisgIC8vZmFpbF91bmxlc3MgKGJ1ZmZlcl9hbGxvY19wdDFfY2FsbGVkID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoc2V0X2NhcHNfcHQxX2NhbGxlZCA9PSBGQUxTRSk7CisKKyAgYnVmZmVyID0gZ3N0X3Rlc3RfdHJhbnNfcG9wICh0cmFucyk7CisgIGZhaWxfdW5sZXNzIChidWZmZXIgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpID09IDIwKTsKKyNpZiAwCisgIC8qIGNhcHMgc2hvdWxkIG5vdCBoYXZlIGJlZW4gc2V0ICovCisgIGZhaWxfdW5sZXNzIChHU1RfQlVGRkVSX0NBUFMgKGJ1ZmZlcikgPT0gTlVMTCk7CisjZW5kaWYKKworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiYnVmZmVyIHdpdGhvdXQgY2Fwcywgc2l6ZSAxMCIpOworCisgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTApOworICBidWZmZXJfYWxsb2NfcHQxX2NhbGxlZCA9IEZBTFNFOworICBzZXRfY2Fwc19wdDFfY2FsbGVkID0gRkFMU0U7CisgIHJlcyA9IGdzdF90ZXN0X3RyYW5zX3B1c2ggKHRyYW5zLCBidWZmZXIpOworICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9GTE9XX09LKTsKKyAgLyogRklYTUUsIHBhc3N0aG91Z2ggd2l0aG91dCBwYWQtYWxsb2MsIGRvIHBhZC1hbGxvYyBvbiB0aGUgc3JjcGFkICovCisgIC8vZmFpbF91bmxlc3MgKGJ1ZmZlcl9hbGxvY19wdDFfY2FsbGVkID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoc2V0X2NhcHNfcHQxX2NhbGxlZCA9PSBGQUxTRSk7CisKKyAgYnVmZmVyID0gZ3N0X3Rlc3RfdHJhbnNfcG9wICh0cmFucyk7CisgIGZhaWxfdW5sZXNzIChidWZmZXIgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpID09IDEwKTsKKyNpZiAwCisgIC8qIGNhcHMgc2hvdWxkIG5vdCBoYXZlIGJlZW4gc2V0ICovCisgIGZhaWxfdW5sZXNzIChHU1RfQlVGRkVSX0NBUFMgKGJ1ZmZlcikgPT0gTlVMTCk7CisjZW5kaWYKKworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworCisjaWYgMAorICAvKiB3aXRoIGNhcHMgYnVmZmVyICovCisgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiYWxsb2Mgd2l0aCBjYXBzLCBzaXplIDEwIik7CisKKyAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJmb28veC1iYXIiLCBOVUxMKTsKKyAgYnVmZmVyX2FsbG9jX3B0MV9jYWxsZWQgPSBGQUxTRTsKKyAgc2V0X2NhcHNfcHQxX2NhbGxlZCA9IEZBTFNFOworICByZXMgPSBnc3RfcGFkX2FsbG9jX2J1ZmZlciAodHJhbnMtPnNyY3BhZCwgMCwgMTAsIGNhcHMsICZidWZmZXIpOworICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9GTE9XX09LKTsKKyAgZmFpbF91bmxlc3MgKGJ1ZmZlcl9hbGxvY19wdDFfY2FsbGVkID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoc2V0X2NhcHNfcHQxX2NhbGxlZCA9PSBGQUxTRSk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7CisKKyAgLyogb25jZSBtb3JlICovCisgIGJ1ZmZlcl9hbGxvY19wdDFfY2FsbGVkID0gRkFMU0U7CisgIHNldF9jYXBzX3B0MV9jYWxsZWQgPSBGQUxTRTsKKyAgcmVzID0gZ3N0X3BhZF9hbGxvY19idWZmZXIgKHRyYW5zLT5zcmNwYWQsIDAsIDEwLCBjYXBzLCAmYnVmZmVyKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyk7CisgIGZhaWxfdW5sZXNzIChidWZmZXJfYWxsb2NfcHQxX2NhbGxlZCA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKHNldF9jYXBzX3B0MV9jYWxsZWQgPT0gRkFMU0UpOworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworCisgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKKyNlbmRpZgorCisgIGdzdF90ZXN0X3RyYW5zX2ZyZWUgKHRyYW5zKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgZ2Jvb2xlYW4gc2V0X2NhcHNfcHQyX2NhbGxlZDsKKworc3RhdGljIGdib29sZWFuCitzZXRfY2Fwc19wdDIgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0Q2FwcyAqIGluY2FwcywgR3N0Q2FwcyAqIG91dGNhcHMpCit7CisgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAic2V0X2NhcHMgY2FsbGVkIik7CisKKyAgc2V0X2NhcHNfcHQyX2NhbGxlZCA9IFRSVUU7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChpbmNhcHMsIG91dGNhcHMpKTsKKworICByZXR1cm4gVFJVRTsKK30KKworLyogYmFzaWMgcGFzc3Rocm91Z2gsIHdlIGRvbid0IGhhdmUgYW55IHRyYW5zZm9ybSBmdW5jdGlvbnMgc28gd2UgY2FuIG9ubHkKKyAqIHBlcmZvcm0gcGFzc3Rocm91Z2ggd2l0aCBzYW1lIGNhcHMgKi8KK0dTVF9TVEFSVF9URVNUIChiYXNldHJhbnNmb3JtX2NoYWluX3B0MikKK3sKKyAgVGVzdFRyYW5zRGF0YSAqdHJhbnM7CisgIEdzdEJ1ZmZlciAqYnVmZmVyOworICBHc3RDYXBzICpjYXBzOworICBHc3RGbG93UmV0dXJuIHJlczsKKworICBrbGFzc19zZXRfY2FwcyA9IHNldF9jYXBzX3B0MjsKKyAgdHJhbnMgPSBnc3RfdGVzdF90cmFuc19uZXcgKCk7CisKKyAgLyogZmlyc3QgYnVmZmVyICovCisgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiZm9vL3gtYmFyIiwgTlVMTCk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJidWZmZXIgd2l0aCBjYXBzLCBzaXplIDIwIik7CisKKyAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgyMCk7CisjaWYgMAorICBnc3RfYnVmZmVyX3NldF9jYXBzIChidWZmZXIsIGNhcHMpOworI2VuZGlmCisKKyAgYnVmZmVyX2FsbG9jX3B0MV9jYWxsZWQgPSBGQUxTRTsKKyAgc2V0X2NhcHNfcHQyX2NhbGxlZCA9IEZBTFNFOworICByZXMgPSBnc3RfdGVzdF90cmFuc19wdXNoICh0cmFucywgYnVmZmVyKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyk7CisgIC8qIEZJWE1FLCBwYXNzdGhvdWdoIHdpdGhvdXQgcGFkLWFsbG9jLCBkbyBwYWQtYWxsb2Mgb24gdGhlIHNyY3BhZCAqLworICAvL2ZhaWxfdW5sZXNzIChidWZmZXJfYWxsb2NfcHQxX2NhbGxlZCA9PSBUUlVFKTsKKyAgLy9mYWlsX3VubGVzcyAoc2V0X2NhcHNfcHQyX2NhbGxlZCA9PSBUUlVFKTsKKworICBidWZmZXIgPSBnc3RfdGVzdF90cmFuc19wb3AgKHRyYW5zKTsKKyAgZmFpbF91bmxlc3MgKGJ1ZmZlciAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikgPT0gMjApOworI2lmIDAKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChHU1RfQlVGRkVSX0NBUFMgKGJ1ZmZlciksIGNhcHMpKTsKKyNlbmRpZgorCisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7CisKKyNpZiAwCisgIC8qIHdpdGggY2FwcyBidWZmZXIgKi8KKyAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJhbGxvYyB3aXRoIGNhcHMsIHNpemUgMjAiKTsKKworICBidWZmZXJfYWxsb2NfcHQxX2NhbGxlZCA9IEZBTFNFOworICBzZXRfY2Fwc19wdDJfY2FsbGVkID0gRkFMU0U7CisgIHJlcyA9IGdzdF9wYWRfYWxsb2NfYnVmZmVyICh0cmFucy0+c3JjcGFkLCAwLCAyMCwgY2FwcywgJmJ1ZmZlcik7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfT0spOworICBmYWlsX3VubGVzcyAoYnVmZmVyX2FsbG9jX3B0MV9jYWxsZWQgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChzZXRfY2Fwc19wdDJfY2FsbGVkID09IEZBTFNFKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKyNlbmRpZgorCisgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKKworICAvKiBzZWNvbmQgYnVmZmVyLCByZW5lZ290aWF0ZXMsIGtlZXBzIGV4dHJhIHR5cGUgYXJnIGluIGNhcHMgKi8KKyAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJmb28veC1iYXIiLCAidHlwZSIsIEdfVFlQRV9JTlQsIDEsIE5VTEwpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiYnVmZmVyIHdpdGggY2Fwcywgc2l6ZSAxMCIpOworCisgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTApOworI2lmIDAKKyAgZ3N0X2J1ZmZlcl9zZXRfY2FwcyAoYnVmZmVyLCBjYXBzKTsKKyNlbmRpZgorCisgIGJ1ZmZlcl9hbGxvY19wdDFfY2FsbGVkID0gRkFMU0U7CisgIHNldF9jYXBzX3B0Ml9jYWxsZWQgPSBGQUxTRTsKKyAgcmVzID0gZ3N0X3Rlc3RfdHJhbnNfcHVzaCAodHJhbnMsIGJ1ZmZlcik7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfT0spOworICAvKiBGSVhNRSwgcGFzc3Rob3VnaCB3aXRob3V0IHBhZC1hbGxvYywgZG8gcGFkLWFsbG9jIG9uIHRoZSBzcmNwYWQgKi8KKyAgLy9mYWlsX3VubGVzcyAoYnVmZmVyX2FsbG9jX3B0MV9jYWxsZWQgPT0gVFJVRSk7CisgIC8vZmFpbF91bmxlc3MgKHNldF9jYXBzX3B0Ml9jYWxsZWQgPT0gVFJVRSk7CisKKyAgYnVmZmVyID0gZ3N0X3Rlc3RfdHJhbnNfcG9wICh0cmFucyk7CisgIGZhaWxfdW5sZXNzIChidWZmZXIgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpID09IDEwKTsKKyNpZiAwCisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoR1NUX0JVRkZFUl9DQVBTIChidWZmZXIpLCBjYXBzKSk7CisjZW5kaWYKKworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworCisjaWYgMAorICAvKiB3aXRoIGNhcHMgYnVmZmVyICovCisgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiYWxsb2Mgd2l0aCBjYXBzLCBzaXplIDIwIik7CisKKyAgYnVmZmVyX2FsbG9jX3B0MV9jYWxsZWQgPSBGQUxTRTsKKyAgc2V0X2NhcHNfcHQyX2NhbGxlZCA9IEZBTFNFOworICByZXMgPSBnc3RfcGFkX2FsbG9jX2J1ZmZlciAodHJhbnMtPnNyY3BhZCwgMCwgMjAsIGNhcHMsICZidWZmZXIpOworICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9GTE9XX09LKTsKKyAgZmFpbF91bmxlc3MgKGJ1ZmZlcl9hbGxvY19wdDFfY2FsbGVkID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoc2V0X2NhcHNfcHQyX2NhbGxlZCA9PSBGQUxTRSk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7CisjZW5kaWYKKworICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7CisKKyAgLyogd2l0aCBjYXBzIHRoYXQgaXMgYSBzdXBlcnNldCAqLworICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImZvby94LWJhciIsIE5VTEwpOworCisjaWYgMAorICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImFsbG9jIHdpdGggc3VwZXJzZXQgY2Fwcywgc2l6ZSAyMCIpOworCisgIGJ1ZmZlcl9hbGxvY19wdDFfY2FsbGVkID0gRkFMU0U7CisgIHNldF9jYXBzX3B0Ml9jYWxsZWQgPSBGQUxTRTsKKyAgcmVzID0gZ3N0X3BhZF9hbGxvY19idWZmZXIgKHRyYW5zLT5zcmNwYWQsIDAsIDIwLCBjYXBzLCAmYnVmZmVyKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyk7CisgIGZhaWxfdW5sZXNzIChidWZmZXJfYWxsb2NfcHQxX2NhbGxlZCA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKHNldF9jYXBzX3B0Ml9jYWxsZWQgPT0gRkFMU0UpOworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworI2VuZGlmCisKKyAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOworCisgIGdzdF90ZXN0X3RyYW5zX2ZyZWUgKHRyYW5zKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgZ2Jvb2xlYW4gdHJhbnNmb3JtX2lwXzFfY2FsbGVkOworc3RhdGljIGdib29sZWFuIHRyYW5zZm9ybV9pcF8xX3dyaXRhYmxlOworCitzdGF0aWMgR3N0Rmxvd1JldHVybgordHJhbnNmb3JtX2lwXzEgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0QnVmZmVyICogYnVmKQoreworICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgInRyYW5zZm9ybSBjYWxsZWQiKTsKKworICB0cmFuc2Zvcm1faXBfMV9jYWxsZWQgPSBUUlVFOworICB0cmFuc2Zvcm1faXBfMV93cml0YWJsZSA9IGdzdF9idWZmZXJfaXNfd3JpdGFibGUgKGJ1Zik7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJ3cml0YWJsZTogJWQiLCB0cmFuc2Zvcm1faXBfMV93cml0YWJsZSk7CisKKyAgcmV0dXJuIEdTVF9GTE9XX09LOworfQorCisvKiBiYXNpYyBpbi1wbGFjZSwgY2hlY2sgaWYgdGhlIF9pcCBmdW5jdGlvbiBpcyBjYWxsZWQsIGJ1ZmZlciBzaG91bGQKKyAqIGJlIHdyaXRhYmxlLiBubyBzZXRjYXBzIGlzIHNldCAqLworR1NUX1NUQVJUX1RFU1QgKGJhc2V0cmFuc2Zvcm1fY2hhaW5faXAxKQoreworICBUZXN0VHJhbnNEYXRhICp0cmFuczsKKyAgR3N0QnVmZmVyICpidWZmZXI7CisgIEdzdEZsb3dSZXR1cm4gcmVzOworCisgIGtsYXNzX3RyYW5zZm9ybV9pcCA9IHRyYW5zZm9ybV9pcF8xOworICB0cmFucyA9IGdzdF90ZXN0X3RyYW5zX25ldyAoKTsKKworICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImJ1ZmZlciB3aXRob3V0IGNhcHMsIHNpemUgMjAiKTsKKworICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDIwKTsKKworICB0cmFuc2Zvcm1faXBfMV9jYWxsZWQgPSBGQUxTRTsKKyAgdHJhbnNmb3JtX2lwXzFfd3JpdGFibGUgPSBUUlVFOworICBidWZmZXJfYWxsb2NfcHQxX2NhbGxlZCA9IEZBTFNFOworICByZXMgPSBnc3RfdGVzdF90cmFuc19wdXNoICh0cmFucywgYnVmZmVyKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyk7CisgIGZhaWxfdW5sZXNzICh0cmFuc2Zvcm1faXBfMV9jYWxsZWQgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzICh0cmFuc2Zvcm1faXBfMV93cml0YWJsZSA9PSBUUlVFKTsKKyAgLyogRklYTUUsIGluLXBsYWNlIHdpdGhvdXQgcGFkLWFsbG9jLCBkbyBwYWQtYWxsb2Mgb24gdGhlIHNyY3BhZCAqLworICAvL2ZhaWxfdW5sZXNzIChidWZmZXJfYWxsb2NfcHQxX2NhbGxlZCA9PSBUUlVFKTsKKworICBidWZmZXIgPSBnc3RfdGVzdF90cmFuc19wb3AgKHRyYW5zKTsKKyAgZmFpbF91bmxlc3MgKGJ1ZmZlciAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikgPT0gMjApOworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiYnVmZmVyIHdpdGhvdXQgY2FwcyBleHRyYSByZWYsIHNpemUgMjAiKTsKKworICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDIwKTsKKyAgLyogdGFrZSBhZGRpdGlvbmFsIHJlZiB0byBtYWtlIGl0IG5vbi13cml0YWJsZSAqLworICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKTsKKworICBmYWlsX3VubGVzcyAoR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChidWZmZXIpID09IDIpOworCisgIHRyYW5zZm9ybV9pcF8xX2NhbGxlZCA9IEZBTFNFOworICB0cmFuc2Zvcm1faXBfMV93cml0YWJsZSA9IEZBTFNFOworICBidWZmZXJfYWxsb2NfcHQxX2NhbGxlZCA9IEZBTFNFOworICByZXMgPSBnc3RfdGVzdF90cmFuc19wdXNoICh0cmFucywgYnVmZmVyKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyk7CisgIGZhaWxfdW5sZXNzICh0cmFuc2Zvcm1faXBfMV9jYWxsZWQgPT0gVFJVRSk7CisgIC8qIGNvcHkgc2hvdWxkIGhhdmUgYmVlbiB0YWtlbiB3aXRoIHBhZC1hbGxvYyAqLworICBmYWlsX3VubGVzcyAodHJhbnNmb3JtX2lwXzFfd3JpdGFibGUgPT0gVFJVRSk7CisgIC8vZmFpbF91bmxlc3MgKGJ1ZmZlcl9hbGxvY19wdDFfY2FsbGVkID09IFRSVUUpOworICAvKiBhZnRlciBwdXNoLCBnZXQgcmlkIG9mIHRoZSBmaW5hbCByZWYgd2UgaGFkICovCisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7CisKKyAgYnVmZmVyID0gZ3N0X3Rlc3RfdHJhbnNfcG9wICh0cmFucyk7CisgIGZhaWxfdW5sZXNzIChidWZmZXIgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpID09IDIwKTsKKworICAvKiBvdXRwdXQgYnVmZmVyIGhhcyByZWZjb3VudCAxICovCisgIGZhaWxfdW5sZXNzIChHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKGJ1ZmZlcikgPT0gMSk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7CisKKyAgLyogd2l0aCBjYXBzIGJ1ZmZlciAqLworICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImFsbG9jIHdpdGhvdXQgY2Fwcywgc2l6ZSAyMCIpOworCisjaWYgMAorICBidWZmZXJfYWxsb2NfcHQxX2NhbGxlZCA9IEZBTFNFOworICByZXMgPSBnc3RfcGFkX2FsbG9jX2J1ZmZlciAodHJhbnMtPnNyY3BhZCwgMCwgMjAsIE5VTEwsICZidWZmZXIpOworICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9GTE9XX09LKTsKKyAgZmFpbF91bmxlc3MgKGJ1ZmZlcl9hbGxvY19wdDFfY2FsbGVkID09IFRSVUUpOworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworI2VuZGlmCisKKyAgZ3N0X3Rlc3RfdHJhbnNfZnJlZSAodHJhbnMpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBnYm9vbGVhbiBzZXRfY2Fwc18xX2NhbGxlZDsKKworc3RhdGljIGdib29sZWFuCitzZXRfY2Fwc18xIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdENhcHMgKiBpbmNhcHMsIEdzdENhcHMgKiBvdXRjYXBzKQoreworICBHc3RDYXBzICpjYXBzOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAic2V0X2NhcHMgY2FsbGVkIik7CisKKyAgc2V0X2NhcHNfMV9jYWxsZWQgPSBUUlVFOworCisgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiZm9vL3gtYmFyIiwgTlVMTCk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChpbmNhcHMsIGNhcHMpKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChvdXRjYXBzLCBjYXBzKSk7CisKKyAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOworCisgIHJldHVybiBUUlVFOworfQorCisvKiBiYXNpYyBpbi1wbGFjZSwgY2hlY2sgaWYgdGhlIF9pcCBmdW5jdGlvbiBpcyBjYWxsZWQsIGJ1ZmZlciBzaG91bGQgYmUKKyAqIHdyaXRhYmxlLiB3ZSBhbHNvIHNldCBhIHNldGNhcHMgZnVuY3Rpb24gYW5kIHNlZSBpZiBpdCdzIGNhbGxlZC4gKi8KK0dTVF9TVEFSVF9URVNUIChiYXNldHJhbnNmb3JtX2NoYWluX2lwMikKK3sKKyAgVGVzdFRyYW5zRGF0YSAqdHJhbnM7CisgIEdzdEJ1ZmZlciAqYnVmZmVyOworICBHc3RGbG93UmV0dXJuIHJlczsKKyAgR3N0Q2FwcyAqY2FwczsKKworICBrbGFzc190cmFuc2Zvcm1faXAgPSB0cmFuc2Zvcm1faXBfMTsKKyAga2xhc3Nfc2V0X2NhcHMgPSBzZXRfY2Fwc18xOworCisgIHRyYW5zID0gZ3N0X3Rlc3RfdHJhbnNfbmV3ICgpOworCisjaWYgMAorICAvKiB3aXRoIGNhcHMgYnVmZmVyICovCisgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiYWxsb2Mgd2l0aG91dCBjYXBzLCBzaXplIDIwIik7CisKKyAgYnVmZmVyX2FsbG9jX3B0MV9jYWxsZWQgPSBGQUxTRTsKKyAgcmVzID0gZ3N0X3BhZF9hbGxvY19idWZmZXIgKHRyYW5zLT5zcmNwYWQsIDAsIDIwLCBOVUxMLCAmYnVmZmVyKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyk7CisgIGZhaWxfdW5sZXNzIChidWZmZXJfYWxsb2NfcHQxX2NhbGxlZCA9PSBUUlVFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikgPT0gMjApOworICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9DQVBTIChidWZmZXIpID09IE5VTEwpOworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworI2VuZGlmCisKKyAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJmb28veC1iYXIiLCBOVUxMKTsKKworI2lmIDAKKyAgLyogd2l0aCBjYXBzIGJ1ZmZlciAqLworICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImFsbG9jIHdpdGggY2Fwcywgc2l6ZSAyMCIpOworCisgIGJ1ZmZlcl9hbGxvY19wdDFfY2FsbGVkID0gRkFMU0U7CisgIHJlcyA9IGdzdF9wYWRfYWxsb2NfYnVmZmVyICh0cmFucy0+c3JjcGFkLCAwLCAyMCwgY2FwcywgJmJ1ZmZlcik7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfT0spOworICBmYWlsX3VubGVzcyAoYnVmZmVyX2FsbG9jX3B0MV9jYWxsZWQgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpID09IDIwKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9CVUZGRVJfQ0FQUyAoYnVmZmVyKSA9PSBjYXBzKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKyNlbmRpZgorCisgIC8qIGZpcnN0IHRyeSB0byBwdXNoIGEgYnVmZmVyIHdpdGhvdXQgY2FwcywgdGhpcyBzaG91bGQgZmFpbCAqLworICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDIwKTsKKworICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImJ1ZmZlciB3aXRob3V0IGNhcHMsIHNpemUgMjAiKTsKKworICB0cmFuc2Zvcm1faXBfMV9jYWxsZWQgPSBGQUxTRTsKKyAgdHJhbnNmb3JtX2lwXzFfd3JpdGFibGUgPSBGQUxTRTsKKyAgYnVmZmVyX2FsbG9jX3B0MV9jYWxsZWQgPSBGQUxTRTsKKyAgc2V0X2NhcHNfMV9jYWxsZWQgPSBGQUxTRTsKKyAgcmVzID0gZ3N0X3Rlc3RfdHJhbnNfcHVzaCAodHJhbnMsIGJ1ZmZlcik7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfTk9UX05FR09USUFURUQpOworICBmYWlsX3VubGVzcyAodHJhbnNmb3JtX2lwXzFfY2FsbGVkID09IEZBTFNFKTsKKyAgZmFpbF91bmxlc3MgKHRyYW5zZm9ybV9pcF8xX3dyaXRhYmxlID09IEZBTFNFKTsKKyAgZmFpbF91bmxlc3MgKHNldF9jYXBzXzFfY2FsbGVkID09IEZBTFNFKTsKKyAgZmFpbF91bmxlc3MgKGJ1ZmZlcl9hbGxvY19wdDFfY2FsbGVkID09IEZBTFNFKTsKKworICAvKiB0cnkgdG8gcHVzaCBhIGJ1ZmZlciB3aXRoIGNhcHMgKi8KKyAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJidWZmZXIgd2l0aCBjYXBzLCBzaXplIDIwIik7CisKKyAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgyMCk7CisjaWYgMAorICBnc3RfYnVmZmVyX3NldF9jYXBzIChidWZmZXIsIGNhcHMpOworI2VuZGlmCisKKyAgdHJhbnNmb3JtX2lwXzFfY2FsbGVkID0gRkFMU0U7CisgIHRyYW5zZm9ybV9pcF8xX3dyaXRhYmxlID0gRkFMU0U7CisgIHNldF9jYXBzXzFfY2FsbGVkID0gRkFMU0U7CisgIGJ1ZmZlcl9hbGxvY19wdDFfY2FsbGVkID0gRkFMU0U7CisgIHJlcyA9IGdzdF90ZXN0X3RyYW5zX3B1c2ggKHRyYW5zLCBidWZmZXIpOworICAvL2ZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfT0spOworICAvL2ZhaWxfdW5sZXNzICh0cmFuc2Zvcm1faXBfMV9jYWxsZWQgPT0gVFJVRSk7CisgIC8vZmFpbF91bmxlc3MgKHRyYW5zZm9ybV9pcF8xX3dyaXRhYmxlID09IFRSVUUpOworICAvL2ZhaWxfdW5sZXNzIChzZXRfY2Fwc18xX2NhbGxlZCA9PSBUUlVFKTsKKyAgLyogRklYTUUsIGluLXBsYWNlIHdpdGhvdXQgcGFkLWFsbG9jLCBkbyBwYWQtYWxsb2Mgb24gdGhlIHNyY3BhZCAqLworICAvL2ZhaWxfdW5sZXNzIChidWZmZXJfYWxsb2NfcHQxX2NhbGxlZCA9PSBUUlVFKTsKKworICBidWZmZXIgPSBnc3RfdGVzdF90cmFuc19wb3AgKHRyYW5zKTsKKyAgLy9mYWlsX3VubGVzcyAoYnVmZmVyICE9IE5VTEwpOworICAvL2ZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpID09IDIwKTsKKyNpZiAwCisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoR1NUX0JVRkZFUl9DQVBTIChidWZmZXIpLCBjYXBzKSk7CisjZW5kaWYKKyAgLy9nc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworCisjaWYgMAorICAvKiB3aXRoIGNhcHMgYnVmZmVyICovCisgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiYWxsb2Mgd2l0aCBjYXBzLCBzaXplIDIwIik7CisKKyAgYnVmZmVyX2FsbG9jX3B0MV9jYWxsZWQgPSBGQUxTRTsKKyAgcmVzID0gZ3N0X3BhZF9hbGxvY19idWZmZXIgKHRyYW5zLT5zcmNwYWQsIDAsIDIwLCBjYXBzLCAmYnVmZmVyKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyk7CisgIGZhaWxfdW5sZXNzIChidWZmZXJfYWxsb2NfcHQxX2NhbGxlZCA9PSBUUlVFKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKyNlbmRpZgorCisgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiYnVmZmVyIHdpdGggY2FwcyBleHRyYSByZWYsIHNpemUgMjAiKTsKKworICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDIwKTsKKyNpZiAwCisgIGdzdF9idWZmZXJfc2V0X2NhcHMgKGJ1ZmZlciwgY2Fwcyk7CisjZW5kaWYKKyAgLyogdGFrZSBhZGRpdGlvbmFsIHJlZiB0byBtYWtlIGl0IG5vbi13cml0YWJsZSAqLworICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKTsKKworICBmYWlsX3VubGVzcyAoR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChidWZmZXIpID09IDIpOworCisgIHRyYW5zZm9ybV9pcF8xX2NhbGxlZCA9IEZBTFNFOworICB0cmFuc2Zvcm1faXBfMV93cml0YWJsZSA9IEZBTFNFOworICBidWZmZXJfYWxsb2NfcHQxX2NhbGxlZCA9IEZBTFNFOworICByZXMgPSBnc3RfdGVzdF90cmFuc19wdXNoICh0cmFucywgYnVmZmVyKTsKKyAgLy9mYWlsX3VubGVzcyAocmVzID09IEdTVF9GTE9XX09LKTsKKyAgLy9mYWlsX3VubGVzcyAodHJhbnNmb3JtX2lwXzFfY2FsbGVkID09IFRSVUUpOworICAvL2ZhaWxfdW5sZXNzICh0cmFuc2Zvcm1faXBfMV93cml0YWJsZSA9PSBUUlVFKTsKKyAgLy9mYWlsX3VubGVzcyAoYnVmZmVyX2FsbG9jX3B0MV9jYWxsZWQgPT0gVFJVRSk7CisgIC8qIGFmdGVyIHB1c2gsIGdldCByaWQgb2YgdGhlIGZpbmFsIHJlZiB3ZSBoYWQgKi8KKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKworICBidWZmZXIgPSBnc3RfdGVzdF90cmFuc19wb3AgKHRyYW5zKTsKKyAgLy9mYWlsX3VubGVzcyAoYnVmZmVyICE9IE5VTEwpOworICAvL2ZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpID09IDIwKTsKKyNpZiAwCisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoR1NUX0JVRkZFUl9DQVBTIChidWZmZXIpLCBjYXBzKSk7CisjZW5kaWYKKworICAvKiBvdXRwdXQgYnVmZmVyIGhhcyByZWZjb3VudCAxICovCisgIC8vZmFpbF91bmxlc3MgKEdTVF9NSU5JX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAoYnVmZmVyKSA9PSAxKTsKKyAgLy9nc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworCisjaWYgMAorICAvKiB3aXRoIGNhcHMgYnVmZmVyICovCisgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiYWxsb2Mgd2l0aCBjYXBzLCBzaXplIDIwIik7CisKKyAgYnVmZmVyX2FsbG9jX3B0MV9jYWxsZWQgPSBGQUxTRTsKKyAgcmVzID0gZ3N0X3BhZF9hbGxvY19idWZmZXIgKHRyYW5zLT5zcmNwYWQsIDAsIDIwLCBjYXBzLCAmYnVmZmVyKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyk7CisgIGZhaWxfdW5sZXNzIChidWZmZXJfYWxsb2NfcHQxX2NhbGxlZCA9PSBUUlVFKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKyNlbmRpZgorCisgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKKworICBnc3RfdGVzdF90cmFuc19mcmVlICh0cmFucyk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfdGVtcGxhdGVfY3QxID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKKyAgICBHU1RfUEFEX1NJTkssCisgICAgR1NUX1BBRF9BTFdBWVMsCisgICAgR1NUX1NUQVRJQ19DQVBTICgiYmF6L3gtZm9vIikKKyAgICApOworCitzdGF0aWMgZ2Jvb2xlYW4gc2V0X2NhcHNfY3QxX2NhbGxlZDsKKworc3RhdGljIGdib29sZWFuCitzZXRfY2Fwc19jdDEgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0Q2FwcyAqIGluY2FwcywgR3N0Q2FwcyAqIG91dGNhcHMpCit7CisgIEdzdENhcHMgKmNhcHMxLCAqY2FwczI7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJzZXRfY2FwcyBjYWxsZWQiKTsKKworICBjYXBzMSA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJiYXoveC1mb28iLCBOVUxMKTsKKyAgY2FwczIgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiZm9vL3gtYmFyIiwgTlVMTCk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChpbmNhcHMsIGNhcHMxKSk7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAob3V0Y2FwcywgY2FwczIpKTsKKworICBzZXRfY2Fwc19jdDFfY2FsbGVkID0gVFJVRTsKKworICBnc3RfY2Fwc191bnJlZiAoY2FwczEpOworICBnc3RfY2Fwc191bnJlZiAoY2FwczIpOworCisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gdHJhbnNmb3JtX2N0MV9jYWxsZWQ7CitzdGF0aWMgZ2Jvb2xlYW4gdHJhbnNmb3JtX2N0MV93cml0YWJsZTsKKworc3RhdGljIEdzdEZsb3dSZXR1cm4KK3RyYW5zZm9ybV9jdDEgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0QnVmZmVyICogaW4sIEdzdEJ1ZmZlciAqIG91dCkKK3sKKyAgdHJhbnNmb3JtX2N0MV9jYWxsZWQgPSBUUlVFOworICB0cmFuc2Zvcm1fY3QxX3dyaXRhYmxlID0gZ3N0X2J1ZmZlcl9pc193cml0YWJsZSAob3V0KTsKKworICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgIndyaXRhYmxlOiAlZCIsIHRyYW5zZm9ybV9jdDFfd3JpdGFibGUpOworCisgIHJldHVybiBHU1RfRkxPV19PSzsKK30KKworc3RhdGljIEdzdENhcHMgKgordHJhbnNmb3JtX2NhcHNfY3QxIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdFBhZERpcmVjdGlvbiBkaXIsCisgICAgR3N0Q2FwcyAqIGNhcHMsIEdzdENhcHMgKiBmaWx0ZXIpCit7CisgIEdzdENhcHMgKnJlczsKKworICBpZiAoZGlyID09IEdTVF9QQURfU0lOSykgeworICAgIHJlcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJmb28veC1iYXIiLCBOVUxMKTsKKyAgfSBlbHNlIHsKKyAgICByZXMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYmF6L3gtZm9vIiwgTlVMTCk7CisgIH0KKworICBpZiAoZmlsdGVyKSB7CisgICAgR3N0Q2FwcyAqdGVtcCA9CisgICAgICAgIGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChmaWx0ZXIsIHJlcywgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKKyAgICBnc3RfY2Fwc191bnJlZiAocmVzKTsKKyAgICByZXMgPSB0ZW1wOworICB9CisKKyAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIGdib29sZWFuCit0cmFuc2Zvcm1fc2l6ZV9jdDEgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwKKyAgICBHc3RDYXBzICogY2FwcywgZ3NpemUgc2l6ZSwgR3N0Q2FwcyAqIG90aGVyY2FwcywgZ3NpemUgKiBvdGhlcnNpemUpCit7CisgIGlmIChkaXJlY3Rpb24gPT0gR1NUX1BBRF9TSU5LKSB7CisgICAgKm90aGVyc2l6ZSA9IHNpemUgKiAyOworICB9IGVsc2UgeworICAgICpvdGhlcnNpemUgPSBzaXplIC8gMjsKKyAgfQorCisgIHJldHVybiBUUlVFOworfQorCitnYm9vbGVhbiBidWZmZXJfYWxsb2NfY3QxX2NhbGxlZDsKKworI2lmIDAKK3N0YXRpYyBHc3RGbG93UmV0dXJuCitidWZmZXJfYWxsb2NfY3QxIChHc3RQYWQgKiBwYWQsIGd1aW50NjQgb2Zmc2V0LCBndWludCBzaXplLCBHc3RDYXBzICogY2FwcywKKyAgICBHc3RCdWZmZXIgKiogYnVmKQoreworICBHc3RDYXBzICpvdXRjYXBzOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImJ1ZmZlcl9hbGxvYyBjYWxsZWQgJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCAldSwgJSIKKyAgICAgIEdTVF9QVFJfRk9STUFULCBvZmZzZXQsIHNpemUsIGNhcHMpOworCisgIGJ1ZmZlcl9hbGxvY19jdDFfY2FsbGVkID0gVFJVRTsKKworICBvdXRjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImZvby94LWJhciIsIE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKG91dGNhcHMsIGNhcHMpKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKG91dGNhcHMpOworCisgICpidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHNpemUpOworICBnc3RfYnVmZmVyX3NldF9jYXBzICgqYnVmLCBjYXBzKTsKKworICByZXR1cm4gR1NUX0ZMT1dfT0s7Cit9CisjZW5kaWYKKworLyogYmFzaWMgY29weS10cmFuc2Zvcm0sIGNoZWNrIGlmIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gaXMgY2FsbGVkLAorICogYnVmZmVyIHNob3VsZCBiZSB3cml0YWJsZS4gd2UgYWxzbyBzZXQgYSBzZXRjYXBzIGZ1bmN0aW9uIGFuZAorICogc2VlIGlmIGl0J3MgY2FsbGVkLiAqLworR1NUX1NUQVJUX1RFU1QgKGJhc2V0cmFuc2Zvcm1fY2hhaW5fY3QxKQoreworICBUZXN0VHJhbnNEYXRhICp0cmFuczsKKyAgR3N0QnVmZmVyICpidWZmZXI7CisgIEdzdEZsb3dSZXR1cm4gcmVzOworICBHc3RDYXBzICppbmNhcHMsICpvdXRjYXBzOworCisgIHNpbmtfdGVtcGxhdGUgPSAmc2lua190ZW1wbGF0ZV9jdDE7CisgIGtsYXNzX3RyYW5zZm9ybSA9IHRyYW5zZm9ybV9jdDE7CisgIGtsYXNzX3NldF9jYXBzID0gc2V0X2NhcHNfY3QxOworICBrbGFzc190cmFuc2Zvcm1fY2FwcyA9IHRyYW5zZm9ybV9jYXBzX2N0MTsKKyAga2xhc3NfdHJhbnNmb3JtX3NpemUgPSB0cmFuc2Zvcm1fc2l6ZV9jdDE7CisKKyAgdHJhbnMgPSBnc3RfdGVzdF90cmFuc19uZXcgKCk7CisKKyAgaW5jYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImJhei94LWZvbyIsIE5VTEwpOworICBvdXRjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImZvby94LWJhciIsIE5VTEwpOworCisjaWYgMAorICAvKiB3aXRob3V0IGNhcHMgYnVmZmVyLCBJIHRoaW5rIHRoaXMgc2hvdWxkIGZhaWwgKi8KKyAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJhbGxvYyB3aXRob3V0IGNhcHMsIHNpemUgMjAiKTsKKworICBidWZmZXJfYWxsb2NfY3QxX2NhbGxlZCA9IEZBTFNFOworICByZXMgPSBnc3RfcGFkX2FsbG9jX2J1ZmZlciAodHJhbnMtPnNyY3BhZCwgMCwgMjAsIE5VTEwsICZidWZmZXIpOworICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9GTE9XX05PVF9ORUdPVElBVEVEKTsKKyAgLyogc2hvdWxkIG5vdCBjYWxsIHBhZC1hbGxvYyBiZWNhdXNlIHRoZSBjYXBzIGFuZCBzaXplcyBhcmUgZGlmZmVyZW50ICovCisgIGZhaWxfdW5sZXNzIChidWZmZXJfYWxsb2NfY3QxX2NhbGxlZCA9PSBGQUxTRSk7CisjZW5kaWYKKworI2lmIDAKKyAgLyogd2l0aCB3cm9uZyAodW5zdXBwb3J0ZWQpIGNhcHMgKi8KKyAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJhbGxvYyB3aXRoIHdyb25nIGNhcHMsIHNpemUgMjAiKTsKKworICBidWZmZXJfYWxsb2NfY3QxX2NhbGxlZCA9IEZBTFNFOworICByZXMgPSBnc3RfcGFkX2FsbG9jX2J1ZmZlciAodHJhbnMtPnNyY3BhZCwgMCwgMjAsIG91dGNhcHMsICZidWZmZXIpOworICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9GTE9XX09LKTsKKyAgZmFpbF9pZiAoYnVmZmVyID09IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKEdTVF9CVUZGRVJfQ0FQUyAoYnVmZmVyKSwgaW5jYXBzKSk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7CisgIC8qIEZJWE1FLCB3aHkgd291bGQgdGhpcyBjYWxsIHRoZSBhbGxvYyBmdW5jdGlvbj8gd2UgdHJ5IHRvIGFsbG9jIHNvbWV0aGluZworICAgKiB3aXRoIGNhcHMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBvbiB0aGUgc2lua3BhZCAqLworICBmYWlsX3VubGVzcyAoYnVmZmVyX2FsbG9jX2N0MV9jYWxsZWQgPT0gRkFMU0UpOworCisgIC8qIHdpdGggY2FwcyBidWZmZXIgKi8KKyAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJhbGxvYyB3aXRoIGNhcHMsIHNpemUgMjAiKTsKKworICBidWZmZXJfYWxsb2NfY3QxX2NhbGxlZCA9IEZBTFNFOworICByZXMgPSBnc3RfcGFkX2FsbG9jX2J1ZmZlciAodHJhbnMtPnNyY3BhZCwgMCwgMjAsIGluY2FwcywgJmJ1ZmZlcik7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfT0spOworICAvKiBzaG91bGQgbm90IGNhbGwgcGFkLWFsbG9jIGJlY2F1c2UgdGhlIGNhcHMgYW5kIHNpemVzIGFyZSBkaWZmZXJlbnQgKi8KKyAgZmFpbF91bmxlc3MgKGJ1ZmZlcl9hbGxvY19jdDFfY2FsbGVkID09IEZBTFNFKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKyNlbmRpZgorCisgIC8qIGZpcnN0IHRyeSB0byBwdXNoIGEgYnVmZmVyIHdpdGhvdXQgY2FwcywgdGhpcyBzaG91bGQgZmFpbCAqLworICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDIwKTsKKworICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImJ1ZmZlciB3aXRob3V0IGNhcHMiKTsKKworICB0cmFuc2Zvcm1fY3QxX2NhbGxlZCA9IEZBTFNFOworICB0cmFuc2Zvcm1fY3QxX3dyaXRhYmxlID0gRkFMU0U7CisgIHNldF9jYXBzX2N0MV9jYWxsZWQgPSBGQUxTRTsKKyAgYnVmZmVyX2FsbG9jX2N0MV9jYWxsZWQgPSBGQUxTRTsKKyAgcmVzID0gZ3N0X3Rlc3RfdHJhbnNfcHVzaCAodHJhbnMsIGJ1ZmZlcik7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfTk9UX05FR09USUFURUQpOworICBmYWlsX3VubGVzcyAodHJhbnNmb3JtX2N0MV9jYWxsZWQgPT0gRkFMU0UpOworICBmYWlsX3VubGVzcyAodHJhbnNmb3JtX2N0MV93cml0YWJsZSA9PSBGQUxTRSk7CisgIGZhaWxfdW5sZXNzIChzZXRfY2Fwc19jdDFfY2FsbGVkID09IEZBTFNFKTsKKyAgZmFpbF91bmxlc3MgKGJ1ZmZlcl9hbGxvY19jdDFfY2FsbGVkID09IEZBTFNFKTsKKworICAvKiB0cnkgdG8gcHVzaCBhIGJ1ZmZlciB3aXRoIGNhcHMgKi8KKyAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgyMCk7CisjaWYgMAorICBnc3RfYnVmZmVyX3NldF9jYXBzIChidWZmZXIsIGluY2Fwcyk7CisjZW5kaWYKKworICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImJ1ZmZlciB3aXRoIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIGluY2Fwcyk7CisKKyAgdHJhbnNmb3JtX2N0MV9jYWxsZWQgPSBGQUxTRTsKKyAgdHJhbnNmb3JtX2N0MV93cml0YWJsZSA9IEZBTFNFOworICBzZXRfY2Fwc19jdDFfY2FsbGVkID0gRkFMU0U7CisgIGJ1ZmZlcl9hbGxvY19jdDFfY2FsbGVkID0gRkFMU0U7CisgIHJlcyA9IGdzdF90ZXN0X3RyYW5zX3B1c2ggKHRyYW5zLCBidWZmZXIpOworICAvL2ZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfT0spOworICAvL2ZhaWxfdW5sZXNzICh0cmFuc2Zvcm1fY3QxX2NhbGxlZCA9PSBUUlVFKTsKKyAgLy9mYWlsX3VubGVzcyAodHJhbnNmb3JtX2N0MV93cml0YWJsZSA9PSBUUlVFKTsKKyAgLy9mYWlsX3VubGVzcyAoc2V0X2NhcHNfY3QxX2NhbGxlZCA9PSBUUlVFKTsKKyAgLy9mYWlsX3VubGVzcyAoYnVmZmVyX2FsbG9jX2N0MV9jYWxsZWQgPT0gVFJVRSk7CisKKyAgYnVmZmVyID0gZ3N0X3Rlc3RfdHJhbnNfcG9wICh0cmFucyk7CisgIC8vZmFpbF91bmxlc3MgKGJ1ZmZlciAhPSBOVUxMKTsKKyAgLy9mYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSA9PSA0MCk7CisjaWYgMAorICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKEdTVF9CVUZGRVJfQ0FQUyAoYnVmZmVyKSwgb3V0Y2FwcykpOworI2VuZGlmCisgIC8vZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKworICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDIwKTsKKyNpZiAwCisgIGdzdF9idWZmZXJfc2V0X2NhcHMgKGJ1ZmZlciwgaW5jYXBzKTsKKyNlbmRpZgorICAvKiB0YWtlIGFkZGl0aW9uYWwgcmVmIHRvIG1ha2UgaXQgbm9uLXdyaXRhYmxlICovCisgIGdzdF9idWZmZXJfcmVmIChidWZmZXIpOworCisgIGZhaWxfdW5sZXNzIChHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKGJ1ZmZlcikgPT0gMik7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJidWZmZXIgd2l0aCBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBpbmNhcHMpOworCisgIHRyYW5zZm9ybV9jdDFfY2FsbGVkID0gRkFMU0U7CisgIHRyYW5zZm9ybV9jdDFfd3JpdGFibGUgPSBGQUxTRTsKKyAgYnVmZmVyX2FsbG9jX2N0MV9jYWxsZWQgPSBGQUxTRTsKKyAgcmVzID0gZ3N0X3Rlc3RfdHJhbnNfcHVzaCAodHJhbnMsIGJ1ZmZlcik7CisgIC8vZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyk7CisgIC8vZmFpbF91bmxlc3MgKHRyYW5zZm9ybV9jdDFfY2FsbGVkID09IFRSVUUpOworICAvL2ZhaWxfdW5sZXNzICh0cmFuc2Zvcm1fY3QxX3dyaXRhYmxlID09IFRSVUUpOworICAvL2ZhaWxfdW5sZXNzIChidWZmZXJfYWxsb2NfY3QxX2NhbGxlZCA9PSBUUlVFKTsKKyAgLyogYWZ0ZXIgcHVzaCwgZ2V0IHJpZCBvZiB0aGUgZmluYWwgcmVmIHdlIGhhZCAqLworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworCisgIGJ1ZmZlciA9IGdzdF90ZXN0X3RyYW5zX3BvcCAodHJhbnMpOworICAvL2ZhaWxfdW5sZXNzIChidWZmZXIgIT0gTlVMTCk7CisgIC8vZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikgPT0gNDApOworI2lmIDAKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChHU1RfQlVGRkVSX0NBUFMgKGJ1ZmZlciksIG91dGNhcHMpKTsKKyNlbmRpZgorCisgIC8qIG91dHB1dCBidWZmZXIgaGFzIHJlZmNvdW50IDEgKi8KKyAgLy9mYWlsX3VubGVzcyAoR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChidWZmZXIpID09IDEpOworICAvL2dzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7CisKKyNpZiAwCisgIC8qIHdpdGggY2FwcyBidWZmZXIgKi8KKyAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJhbGxvYyB3aXRoIGNhcHMsIHNpemUgMTAiKTsKKworICBidWZmZXJfYWxsb2NfY3QxX2NhbGxlZCA9IEZBTFNFOworICByZXMgPSBnc3RfcGFkX2FsbG9jX2J1ZmZlciAodHJhbnMtPnNyY3BhZCwgMCwgMTAsIGluY2FwcywgJmJ1ZmZlcik7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfT0spOworICAvKiBzaG91bGQgbm90IGNhbGwgcGFkLWFsbG9jIGJlY2F1c2UgdGhlIGNhcHMgYW5kIHNpemVzIGFyZSBkaWZmZXJlbnQsIGl0CisgICAqIGN1cnJlbnRseSBzdGlsbCBjYWxscyB0aGUgcGFkIGFsbG9jIGZvciBubyByZWFzb24gYW5kIHRoZW4gdGhyb3dzIGF3YXkgdGhlCisgICAqIGJ1ZmZlci4gKi8KKyAgZmFpbF91bmxlc3MgKGJ1ZmZlcl9hbGxvY19jdDFfY2FsbGVkID09IEZBTFNFKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikgPT0gMTApOworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworCisgIC8qIHdpdGggY2FwcyBidWZmZXIgKi8KKyAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJhbGxvYyB3aXRoIHdyb25nIGNhcHMsIHNpemUgMTAiKTsKKworICBidWZmZXJfYWxsb2NfY3QxX2NhbGxlZCA9IEZBTFNFOworICByZXMgPSBnc3RfcGFkX2FsbG9jX2J1ZmZlciAodHJhbnMtPnNyY3BhZCwgMCwgMTAsIG91dGNhcHMsICZidWZmZXIpOworICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9GTE9XX09LKTsKKyAgZmFpbF9pZiAoYnVmZmVyID09IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKEdTVF9CVUZGRVJfQ0FQUyAoYnVmZmVyKSwgaW5jYXBzKSk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7CisgIC8qIHNob3VsZCBub3QgY2FsbCB0aGUgcGFkLWFsbG9jIGZ1bmN0aW9uICovCisgIGZhaWxfdW5sZXNzIChidWZmZXJfYWxsb2NfY3QxX2NhbGxlZCA9PSBGQUxTRSk7CisjZW5kaWYKKworICBnc3RfY2Fwc191bnJlZiAoaW5jYXBzKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKG91dGNhcHMpOworCisgIGdzdF90ZXN0X3RyYW5zX2ZyZWUgKHRyYW5zKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjX3RlbXBsYXRlX2N0MiA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKKyAgICBHU1RfUEFEX1NSQywKKyAgICBHU1RfUEFEX0FMV0FZUywKKyAgICBHU1RfU1RBVElDX0NBUFMgKCJiYXoveC1mb287IGZvby94LWJhciIpCisgICAgKTsKKworc3RhdGljIGdpbnQgc2V0X2NhcHNfY3QyX2Nhc2U7CitzdGF0aWMgZ2Jvb2xlYW4gc2V0X2NhcHNfY3QyX2NhbGxlZDsKKworc3RhdGljIGdib29sZWFuCitzZXRfY2Fwc19jdDIgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0Q2FwcyAqIGluY2FwcywgR3N0Q2FwcyAqIG91dGNhcHMpCit7CisgIEdzdENhcHMgKmNhcHMxLCAqY2FwczI7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJzZXRfY2FwcyBjYWxsZWQiKTsKKworICBjYXBzMSA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJmb28veC1iYXIiLCBOVUxMKTsKKworICBpZiAoc2V0X2NhcHNfY3QyX2Nhc2UgPT0gMSkKKyAgICBjYXBzMiA9IGdzdF9jYXBzX2NvcHkgKGNhcHMxKTsKKyAgZWxzZQorICAgIGNhcHMyID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImJhei94LWZvbyIsIE5VTEwpOworCisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoaW5jYXBzLCBjYXBzMSkpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKG91dGNhcHMsIGNhcHMyKSk7CisKKyAgc2V0X2NhcHNfY3QyX2NhbGxlZCA9IFRSVUU7CisKKyAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMxKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMyKTsKKworICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIHRyYW5zZm9ybV9jdDJfY2FsbGVkOworc3RhdGljIGdib29sZWFuIHRyYW5zZm9ybV9jdDJfd3JpdGFibGU7CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuCit0cmFuc2Zvcm1fY3QyIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdEJ1ZmZlciAqIGluLCBHc3RCdWZmZXIgKiBvdXQpCit7CisgIHRyYW5zZm9ybV9jdDJfY2FsbGVkID0gVFJVRTsKKyAgdHJhbnNmb3JtX2N0Ml93cml0YWJsZSA9IGdzdF9idWZmZXJfaXNfd3JpdGFibGUgKG91dCk7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJ3cml0YWJsZTogJWQiLCB0cmFuc2Zvcm1fY3QyX3dyaXRhYmxlKTsKKworICByZXR1cm4gR1NUX0ZMT1dfT0s7Cit9CisKK3N0YXRpYyBHc3RDYXBzICoKK3RyYW5zZm9ybV9jYXBzX2N0MiAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBHc3RQYWREaXJlY3Rpb24gZGlyLAorICAgIEdzdENhcHMgKiBjYXBzLCBHc3RDYXBzICogZmlsdGVyKQoreworICBHc3RDYXBzICpyZXM7CisKKyAgaWYgKGRpciA9PSBHU1RfUEFEX1NJTkspIHsKKyAgICAvKiBldmVyeXRoaW5nIG9uIHRoZSBzaW5rcGFkIGNhbiBiZSB0cmFuc2Zvcm1lZCB0byB0aGUgb3V0cHV0IGZvcm1hdHMgKi8KKyAgICByZXMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImZvby94LWJhcjtiYXoveC1mb28iKTsKKyAgfSBlbHNlIHsKKyAgICAvKiBhbGwgb24gdGhlIHNyY3BhZCBjYW4gYmUgdHJhbnNmb3JtZWQgdG8gdGhlIGZvcm1hdCBvZiB0aGUgc2lua3BhZCAqLworICAgIHJlcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJmb28veC1iYXIiLCBOVUxMKTsKKyAgfQorCisgIGlmIChmaWx0ZXIpIHsKKyAgICBHc3RDYXBzICp0ZW1wID0KKyAgICAgICAgZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGZpbHRlciwgcmVzLCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOworICAgIGdzdF9jYXBzX3VucmVmIChyZXMpOworICAgIHJlcyA9IHRlbXA7CisgIH0KKworICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3RyYW5zZm9ybV9zaXplX2N0MiAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLAorICAgIEdzdENhcHMgKiBjYXBzLCBnc2l6ZSBzaXplLCBHc3RDYXBzICogb3RoZXJjYXBzLCBnc2l6ZSAqIG90aGVyc2l6ZSkKK3sKKyAgaWYgKGdzdF9jYXBzX2lzX2VxdWFsIChjYXBzLCBvdGhlcmNhcHMpKSB7CisgICAgKm90aGVyc2l6ZSA9IHNpemU7CisgIH0gZWxzZSB7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBHU1RfUEFEX1NJTkspIHsKKyAgICAgICpvdGhlcnNpemUgPSBzaXplICogMjsKKyAgICB9IGVsc2UgeworICAgICAgKm90aGVyc2l6ZSA9IHNpemUgLyAyOworICAgIH0KKyAgfQorCisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2ludCBidWZmZXJfYWxsb2NfY3QyX2Nhc2U7CitzdGF0aWMgZ2Jvb2xlYW4gYnVmZmVyX2FsbG9jX2N0Ml9jYWxsZWQ7CitzdGF0aWMgZ2Jvb2xlYW4gYnVmZmVyX2FsbG9jX2N0Ml9zdWdnZXN0OworCisjaWYgMAorc3RhdGljIEdzdEZsb3dSZXR1cm4KK2J1ZmZlcl9hbGxvY19jdDIgKEdzdFBhZCAqIHBhZCwgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50IHNpemUsIEdzdENhcHMgKiBjYXBzLAorICAgIEdzdEJ1ZmZlciAqKiBidWYpCit7CisgIEdzdENhcHMgKmluY2FwcywgKm91dGNhcHM7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiYnVmZmVyX2FsbG9jIGNhbGxlZCAlIiBHX0dVSU5UNjRfRk9STUFUICIsICV1LCAlIgorICAgICAgR1NUX1BUUl9GT1JNQVQsIG9mZnNldCwgc2l6ZSwgY2Fwcyk7CisKKyAgYnVmZmVyX2FsbG9jX2N0Ml9jYWxsZWQgPSBUUlVFOworCisgIGlmIChidWZmZXJfYWxsb2NfY3QyX2Nhc2UgPT0gMSkgeworICAgIGluY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJmb28veC1iYXIiLCBOVUxMKTsKKyAgICBpZiAoYnVmZmVyX2FsbG9jX2N0Ml9zdWdnZXN0KSB7CisgICAgICBvdXRjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImJhei94LWZvbyIsIE5VTEwpOworICAgICAgc2l6ZSAqPSAyOworICAgIH0gZWxzZQorICAgICAgb3V0Y2FwcyA9IGdzdF9jYXBzX3JlZiAoaW5jYXBzKTsKKyAgfSBlbHNlIHsKKyAgICBpbmNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYmF6L3gtZm9vIiwgTlVMTCk7CisgICAgaWYgKGJ1ZmZlcl9hbGxvY19jdDJfc3VnZ2VzdCkgeworICAgICAgb3V0Y2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJmb28veC1iYXIiLCBOVUxMKTsKKyAgICAgIHNpemUgLz0gMjsKKyAgICB9IGVsc2UKKyAgICAgIG91dGNhcHMgPSBnc3RfY2Fwc19yZWYgKGluY2Fwcyk7CisgIH0KKyAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiZXhwZWN0ICUiIEdTVF9QVFJfRk9STUFULCBpbmNhcHMpOworCisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoY2FwcywgaW5jYXBzKSk7CisKKyAgKmJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoc2l6ZSk7CisgIGdzdF9idWZmZXJfc2V0X2NhcHMgKCpidWYsIG91dGNhcHMpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInJldHVybiBidWZmZXIgb2Ygc2l6ZSAldSwgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwKKyAgICAgIHNpemUsIG91dGNhcHMpOworCisgIGdzdF9jYXBzX3VucmVmIChvdXRjYXBzKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKGluY2Fwcyk7CisKKyAgcmV0dXJuIEdTVF9GTE9XX09LOworfQorI2VuZGlmCisKKy8qIGJhc2ljIGNvcHktdHJhbnNmb3JtLCBjaGVjayBpZiB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uIGlzIGNhbGxlZCwKKyAqIGJ1ZmZlciBzaG91bGQgYmUgd3JpdGFibGUuIHdlIGFsc28gc2V0IGEgc2V0Y2FwcyBmdW5jdGlvbiBhbmQKKyAqIHNlZSBpZiBpdCdzIGNhbGxlZC4gKi8KK0dTVF9TVEFSVF9URVNUIChiYXNldHJhbnNmb3JtX2NoYWluX2N0MikKK3sKKyAgVGVzdFRyYW5zRGF0YSAqdHJhbnM7CisgIEdzdEJ1ZmZlciAqYnVmZmVyOworICBHc3RGbG93UmV0dXJuIHJlczsKKyAgR3N0Q2FwcyAqaW5jYXBzLCAqb3V0Y2FwczsKKworICBzcmNfdGVtcGxhdGUgPSAmc3JjX3RlbXBsYXRlX2N0MjsKKyAga2xhc3NfdHJhbnNmb3JtID0gdHJhbnNmb3JtX2N0MjsKKyAga2xhc3Nfc2V0X2NhcHMgPSBzZXRfY2Fwc19jdDI7CisgIGtsYXNzX3RyYW5zZm9ybV9jYXBzID0gdHJhbnNmb3JtX2NhcHNfY3QyOworICBrbGFzc190cmFuc2Zvcm1fc2l6ZSA9IHRyYW5zZm9ybV9zaXplX2N0MjsKKworICB0cmFucyA9IGdzdF90ZXN0X3RyYW5zX25ldyAoKTsKKworICBpbmNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiZm9vL3gtYmFyIiwgTlVMTCk7CisgIG91dGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYmF6L3gtZm9vIiwgTlVMTCk7CisKKyNpZiAwCisgIC8qIHdpdGhvdXQgY2FwcyBidWZmZXIsIEkgdGhpbmsgdGhpcyBzaG91bGQgZmFpbCAqLworICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImFsbG9jIHdpdGhvdXQgY2Fwcywgc2l6ZSAyMCIpOworCisgIGJ1ZmZlcl9hbGxvY19jdDJfY2FsbGVkID0gRkFMU0U7CisgIHJlcyA9IGdzdF9wYWRfYWxsb2NfYnVmZmVyICh0cmFucy0+c3JjcGFkLCAwLCAyMCwgTlVMTCwgJmJ1ZmZlcik7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfTk9UX05FR09USUFURUQpOworICAvKiBzaG91bGQgbm90IGNhbGwgcGFkLWFsbG9jIGJlY2F1c2UgdGhlIGNhcHMgYW5kIHNpemVzIGFyZSBkaWZmZXJlbnQgKi8KKyAgZmFpbF91bmxlc3MgKGJ1ZmZlcl9hbGxvY19jdDJfY2FsbGVkID09IEZBTFNFKTsKKyNlbmRpZgorCisjaWYgMAorICAvKiB3aXRoIHBhc3N0aHJvdWdoIGNhcHMgKi8KKyAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJhbGxvYyBzaXplIDIwLCB3aXRoIHBhc3N0aHJvdWdoIGNhcHMgJSIKKyAgICAgIEdTVF9QVFJfRk9STUFULCBpbmNhcHMpOworCisgIGJ1ZmZlcl9hbGxvY19jdDJfY2FzZSA9IDE7CisgIGJ1ZmZlcl9hbGxvY19jdDJfY2FsbGVkID0gRkFMU0U7CisgIHJlcyA9IGdzdF9wYWRfYWxsb2NfYnVmZmVyICh0cmFucy0+c3JjcGFkLCAwLCAyMCwgaW5jYXBzLCAmYnVmZmVyKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyk7CisgIGZhaWxfdW5sZXNzIChidWZmZXJfYWxsb2NfY3QyX2NhbGxlZCA9PSBUUlVFKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKworICAvKiB3aXRoIGNhcHMgYnVmZmVyICovCisgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiYWxsb2Mgc2l6ZSAyMCwgd2l0aCB3cm9uZyBjYXBzICUiIEdTVF9QVFJfRk9STUFULAorICAgICAgb3V0Y2Fwcyk7CisKKyAgYnVmZmVyX2FsbG9jX2N0Ml9jYXNlID0gMjsKKyAgYnVmZmVyX2FsbG9jX2N0Ml9jYWxsZWQgPSBGQUxTRTsKKyAgcmVzID0gZ3N0X3BhZF9hbGxvY19idWZmZXIgKHRyYW5zLT5zcmNwYWQsIDAsIDIwLCBvdXRjYXBzLCAmYnVmZmVyKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyk7CisgIGZhaWxfaWYgKGJ1ZmZlciA9PSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChHU1RfQlVGRkVSX0NBUFMgKGJ1ZmZlciksIGluY2FwcykpOworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworICAvKiBzaG91bGQgbm90IGNhbGwgcGFkLWFsbG9jIGJlY2F1c2UgdGhlIGNhcHMgYW5kIHNpemVzIGFyZSBkaWZmZXJlbnQgKi8KKyAgZmFpbF91bmxlc3MgKGJ1ZmZlcl9hbGxvY19jdDJfY2FsbGVkID09IEZBTFNFKTsKKyNlbmRpZgorCisgIC8qIGZpcnN0IHRyeSB0byBwdXNoIGEgYnVmZmVyIHdpdGhvdXQgY2FwcywgdGhpcyBzaG91bGQgZmFpbCAqLworICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDIwKTsKKworICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImJ1ZmZlciB3aXRob3V0IGNhcHMiKTsKKworICB0cmFuc2Zvcm1fY3QyX2NhbGxlZCA9IEZBTFNFOworICB0cmFuc2Zvcm1fY3QyX3dyaXRhYmxlID0gRkFMU0U7CisgIHNldF9jYXBzX2N0Ml9jYWxsZWQgPSBGQUxTRTsKKyAgYnVmZmVyX2FsbG9jX2N0Ml9jYWxsZWQgPSBGQUxTRTsKKyAgcmVzID0gZ3N0X3Rlc3RfdHJhbnNfcHVzaCAodHJhbnMsIGJ1ZmZlcik7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfTk9UX05FR09USUFURUQpOworICBmYWlsX3VubGVzcyAodHJhbnNmb3JtX2N0Ml9jYWxsZWQgPT0gRkFMU0UpOworICBmYWlsX3VubGVzcyAodHJhbnNmb3JtX2N0Ml93cml0YWJsZSA9PSBGQUxTRSk7CisgIGZhaWxfdW5sZXNzIChzZXRfY2Fwc19jdDJfY2FsbGVkID09IEZBTFNFKTsKKyAgZmFpbF91bmxlc3MgKGJ1ZmZlcl9hbGxvY19jdDJfY2FsbGVkID09IEZBTFNFKTsKKworICAvKiB0cnkgdG8gcHVzaCBhIGJ1ZmZlciB3aXRoIGNhcHMgKi8KKyAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgyMCk7CisjaWYgMAorICBnc3RfYnVmZmVyX3NldF9jYXBzIChidWZmZXIsIGluY2Fwcyk7CisjZW5kaWYKKworICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImJ1ZmZlciB3aXRoIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIGluY2Fwcyk7CisKKyAgYnVmZmVyX2FsbG9jX2N0Ml9jYXNlID0gMTsKKyAgc2V0X2NhcHNfY3QyX2Nhc2UgPSAxOworICB0cmFuc2Zvcm1fY3QyX2NhbGxlZCA9IEZBTFNFOworICB0cmFuc2Zvcm1fY3QyX3dyaXRhYmxlID0gRkFMU0U7CisgIHNldF9jYXBzX2N0Ml9jYWxsZWQgPSBGQUxTRTsKKyAgYnVmZmVyX2FsbG9jX2N0Ml9jYWxsZWQgPSBGQUxTRTsKKyAgcmVzID0gZ3N0X3Rlc3RfdHJhbnNfcHVzaCAodHJhbnMsIGJ1ZmZlcik7CisgIC8vZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyk7CisgIC8vZmFpbF91bmxlc3MgKHRyYW5zZm9ybV9jdDJfY2FsbGVkID09IFRSVUUpOworICAvL2ZhaWxfdW5sZXNzICh0cmFuc2Zvcm1fY3QyX3dyaXRhYmxlID09IFRSVUUpOworICAvL2ZhaWxfdW5sZXNzIChzZXRfY2Fwc19jdDJfY2FsbGVkID09IFRSVUUpOworICAvL2ZhaWxfdW5sZXNzIChidWZmZXJfYWxsb2NfY3QyX2NhbGxlZCA9PSBUUlVFKTsKKworICBidWZmZXIgPSBnc3RfdGVzdF90cmFuc19wb3AgKHRyYW5zKTsKKyAgLy9mYWlsX3VubGVzcyAoYnVmZmVyICE9IE5VTEwpOworICAvL2ZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpID09IDIwKTsKKyNpZiAwCisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoR1NUX0JVRkZFUl9DQVBTIChidWZmZXIpLCBpbmNhcHMpKTsKKyNlbmRpZgorICAvL2dzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7CisKKyAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgyMCk7CisjaWYgMAorICBnc3RfYnVmZmVyX3NldF9jYXBzIChidWZmZXIsIGluY2Fwcyk7CisjZW5kaWYKKyAgLyogdGFrZSBhZGRpdGlvbmFsIHJlZiB0byBtYWtlIGl0IG5vbi13cml0YWJsZSAqLworICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKTsKKworICBmYWlsX3VubGVzcyAoR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChidWZmZXIpID09IDIpOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiYnVmZmVyIHdpdGggY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgaW5jYXBzKTsKKworICB0cmFuc2Zvcm1fY3QyX2NhbGxlZCA9IEZBTFNFOworICB0cmFuc2Zvcm1fY3QyX3dyaXRhYmxlID0gRkFMU0U7CisgIGJ1ZmZlcl9hbGxvY19jdDJfY2FsbGVkID0gRkFMU0U7CisgIHJlcyA9IGdzdF90ZXN0X3RyYW5zX3B1c2ggKHRyYW5zLCBidWZmZXIpOworICAvL2ZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfT0spOworICAvL2ZhaWxfdW5sZXNzICh0cmFuc2Zvcm1fY3QyX2NhbGxlZCA9PSBUUlVFKTsKKyAgLy9mYWlsX3VubGVzcyAodHJhbnNmb3JtX2N0Ml93cml0YWJsZSA9PSBUUlVFKTsKKyAgLy9mYWlsX3VubGVzcyAoYnVmZmVyX2FsbG9jX2N0Ml9jYWxsZWQgPT0gVFJVRSk7CisgIC8qIGFmdGVyIHB1c2gsIGdldCByaWQgb2YgdGhlIGZpbmFsIHJlZiB3ZSBoYWQgKi8KKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKworICBidWZmZXIgPSBnc3RfdGVzdF90cmFuc19wb3AgKHRyYW5zKTsKKyAgLy9mYWlsX3VubGVzcyAoYnVmZmVyICE9IE5VTEwpOworICAvL2ZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpID09IDIwKTsKKyNpZiAwCisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoR1NUX0JVRkZFUl9DQVBTIChidWZmZXIpLCBpbmNhcHMpKTsKKyNlbmRpZgorCisgIC8qIG91dHB1dCBidWZmZXIgaGFzIHJlZmNvdW50IDEgKi8KKyAgLy9mYWlsX3VubGVzcyAoR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChidWZmZXIpID09IDEpOworICAvL2dzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7CisKKyNpZiAwCisgIC8qIHdpdGggY2FwcyBidWZmZXIgKi8KKyAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJhbGxvYyB3aXRoIGNhcHMsIHNpemUgMTAiKTsKKworICBidWZmZXJfYWxsb2NfY3QyX2Nhc2UgPSAxOworICBidWZmZXJfYWxsb2NfY3QyX2NhbGxlZCA9IEZBTFNFOworICByZXMgPSBnc3RfcGFkX2FsbG9jX2J1ZmZlciAodHJhbnMtPnNyY3BhZCwgMCwgMTAsIGluY2FwcywgJmJ1ZmZlcik7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfT0spOworICBmYWlsX3VubGVzcyAoYnVmZmVyX2FsbG9jX2N0Ml9jYWxsZWQgPT0gVFJVRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpID09IDEwKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKworICAvKiB3aXRoIGNhcHMgYnVmZmVyICovCisgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiYWxsb2Mgd2l0aCB3cm9uZyBjYXBzLCBzaXplIDEwIik7CisKKyAgYnVmZmVyX2FsbG9jX2N0Ml9jYXNlID0gMjsKKyAgYnVmZmVyX2FsbG9jX2N0Ml9jYWxsZWQgPSBGQUxTRTsKKyAgcmVzID0gZ3N0X3BhZF9hbGxvY19idWZmZXIgKHRyYW5zLT5zcmNwYWQsIDAsIDEwLCBvdXRjYXBzLCAmYnVmZmVyKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyk7CisgIGZhaWxfaWYgKGJ1ZmZlciA9PSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChHU1RfQlVGRkVSX0NBUFMgKGJ1ZmZlciksIGluY2FwcykpOworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworICAvKiBzaG91bGQgbm90IGNhbGwgdGhlIHBhZC1hbGxvYyBmdW5jdGlvbiAqLworICBmYWlsX3VubGVzcyAoYnVmZmVyX2FsbG9jX2N0Ml9jYWxsZWQgPT0gRkFMU0UpOworI2VuZGlmCisKKyAgZ3N0X2NhcHNfdW5yZWYgKGluY2Fwcyk7CisgIGdzdF9jYXBzX3VucmVmIChvdXRjYXBzKTsKKworICBnc3RfdGVzdF90cmFuc19mcmVlICh0cmFucyk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworLyogYmFzaWMgY29weS10cmFuc2Zvcm0sIHdlIHdvcmsgaW4gcGFzc3Rocm91Z2ggaGVyZS4gKi8KK0dTVF9TVEFSVF9URVNUIChiYXNldHJhbnNmb3JtX2NoYWluX2N0MykKK3sKKyAgVGVzdFRyYW5zRGF0YSAqdHJhbnM7CisgIEdzdEJ1ZmZlciAqYnVmZmVyOworICBHc3RGbG93UmV0dXJuIHJlczsKKyAgR3N0Q2FwcyAqaW5jYXBzLCAqb3V0Y2FwczsKKworICBzcmNfdGVtcGxhdGUgPSAmc3JjX3RlbXBsYXRlX2N0MjsKKyAga2xhc3NfcGFzc3Rocm91Z2hfb25fc2FtZV9jYXBzID0gVFJVRTsKKyAga2xhc3NfdHJhbnNmb3JtID0gdHJhbnNmb3JtX2N0MjsKKyAga2xhc3Nfc2V0X2NhcHMgPSBzZXRfY2Fwc19jdDI7CisgIGtsYXNzX3RyYW5zZm9ybV9jYXBzID0gdHJhbnNmb3JtX2NhcHNfY3QyOworICBrbGFzc190cmFuc2Zvcm1fc2l6ZSA9IHRyYW5zZm9ybV9zaXplX2N0MjsKKworICB0cmFucyA9IGdzdF90ZXN0X3RyYW5zX25ldyAoKTsKKworICBpbmNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiZm9vL3gtYmFyIiwgTlVMTCk7CisgIG91dGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYmF6L3gtZm9vIiwgTlVMTCk7CisKKyNpZiAwCisgIC8qIHdpdGhvdXQgY2FwcyBidWZmZXIsIEkgdGhpbmsgdGhpcyBzaG91bGQgZmFpbCAqLworICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImFsbG9jIHdpdGhvdXQgY2Fwcywgc2l6ZSAyMCIpOworCisgIGJ1ZmZlcl9hbGxvY19jdDJfY2FsbGVkID0gRkFMU0U7CisgIHJlcyA9IGdzdF9wYWRfYWxsb2NfYnVmZmVyICh0cmFucy0+c3JjcGFkLCAwLCAyMCwgTlVMTCwgJmJ1ZmZlcik7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfTk9UX05FR09USUFURUQpOworICAvKiBzaG91bGQgbm90IGNhbGwgcGFkLWFsbG9jIGJlY2F1c2UgdGhlIGNhcHMgYW5kIHNpemVzIGFyZSBkaWZmZXJlbnQgKi8KKyAgZmFpbF91bmxlc3MgKGJ1ZmZlcl9hbGxvY19jdDJfY2FsbGVkID09IEZBTFNFKTsKKyNlbmRpZgorCisgIC8qIHdpdGggcGFzc3Rocm91Z2ggY2FwcyAqLworICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImFsbG9jIHNpemUgMjAsIHdpdGggcGFzc3Rocm91Z2ggY2FwcyAlIgorICAgICAgR1NUX1BUUl9GT1JNQVQsIGluY2Fwcyk7CisKKyNpZiAwCisgIGJ1ZmZlcl9hbGxvY19jdDJfY2FzZSA9IDE7CisgIGJ1ZmZlcl9hbGxvY19jdDJfY2FsbGVkID0gRkFMU0U7CisgIHJlcyA9IGdzdF9wYWRfYWxsb2NfYnVmZmVyICh0cmFucy0+c3JjcGFkLCAwLCAyMCwgaW5jYXBzLCAmYnVmZmVyKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyk7CisgIGZhaWxfdW5sZXNzIChidWZmZXJfYWxsb2NfY3QyX2NhbGxlZCA9PSBUUlVFKTsKKyAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKworICAvKiB3aXRoIGNhcHMgYnVmZmVyICovCisgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiYWxsb2Mgc2l6ZSAyMCwgd2l0aCB3cm9uZyBjYXBzICUiIEdTVF9QVFJfRk9STUFULAorICAgICAgb3V0Y2Fwcyk7CisKKyAgYnVmZmVyX2FsbG9jX2N0Ml9jYXNlID0gMjsKKyAgYnVmZmVyX2FsbG9jX2N0Ml9jYWxsZWQgPSBGQUxTRTsKKyAgcmVzID0gZ3N0X3BhZF9hbGxvY19idWZmZXIgKHRyYW5zLT5zcmNwYWQsIDAsIDIwLCBvdXRjYXBzLCAmYnVmZmVyKTsKKyAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyk7CisgIGZhaWxfaWYgKGJ1ZmZlciA9PSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChHU1RfQlVGRkVSX0NBUFMgKGJ1ZmZlciksIGluY2FwcykpOworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworICAvKiBzaG91bGQgbm90IGNhbGwgcGFkLWFsbG9jIGJlY2F1c2UgdGhlIGNhcHMgYW5kIHNpemVzIGFyZSBkaWZmZXJlbnQgKi8KKyAgZmFpbF91bmxlc3MgKGJ1ZmZlcl9hbGxvY19jdDJfY2FsbGVkID09IEZBTFNFKTsKKyNlbmRpZgorCisgIC8qIGZpcnN0IHRyeSB0byBwdXNoIGEgYnVmZmVyIHdpdGhvdXQgY2FwcywgdGhpcyBzaG91bGQgZmFpbCAqLworICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDIwKTsKKworICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImJ1ZmZlciB3aXRob3V0IGNhcHMiKTsKKworICB0cmFuc2Zvcm1fY3QyX2NhbGxlZCA9IEZBTFNFOworICB0cmFuc2Zvcm1fY3QyX3dyaXRhYmxlID0gRkFMU0U7CisgIHNldF9jYXBzX2N0Ml9jYWxsZWQgPSBGQUxTRTsKKyAgYnVmZmVyX2FsbG9jX2N0Ml9jYWxsZWQgPSBGQUxTRTsKKyAgcmVzID0gZ3N0X3Rlc3RfdHJhbnNfcHVzaCAodHJhbnMsIGJ1ZmZlcik7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfTk9UX05FR09USUFURUQpOworICBmYWlsX3VubGVzcyAodHJhbnNmb3JtX2N0Ml9jYWxsZWQgPT0gRkFMU0UpOworICBmYWlsX3VubGVzcyAodHJhbnNmb3JtX2N0Ml93cml0YWJsZSA9PSBGQUxTRSk7CisgIGZhaWxfdW5sZXNzIChzZXRfY2Fwc19jdDJfY2FsbGVkID09IEZBTFNFKTsKKyAgZmFpbF91bmxlc3MgKGJ1ZmZlcl9hbGxvY19jdDJfY2FsbGVkID09IEZBTFNFKTsKKworICAvKiB0cnkgdG8gcHVzaCBhIGJ1ZmZlciB3aXRoIGNhcHMgKi8KKyAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgyMCk7CisjaWYgMAorICBnc3RfYnVmZmVyX3NldF9jYXBzIChidWZmZXIsIGluY2Fwcyk7CisjZW5kaWYKKworICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImJ1ZmZlciB3aXRoIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIGluY2Fwcyk7CisKKyAgYnVmZmVyX2FsbG9jX2N0Ml9jYXNlID0gMTsKKyAgc2V0X2NhcHNfY3QyX2Nhc2UgPSAxOworICB0cmFuc2Zvcm1fY3QyX2NhbGxlZCA9IEZBTFNFOworICBzZXRfY2Fwc19jdDJfY2FsbGVkID0gRkFMU0U7CisgIGJ1ZmZlcl9hbGxvY19jdDJfY2FsbGVkID0gRkFMU0U7CisgIHJlcyA9IGdzdF90ZXN0X3RyYW5zX3B1c2ggKHRyYW5zLCBidWZmZXIpOworICAvL2ZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfT0spOworICAvL2ZhaWxfdW5sZXNzICh0cmFuc2Zvcm1fY3QyX2NhbGxlZCA9PSBGQUxTRSk7CisgIC8vZmFpbF91bmxlc3MgKHNldF9jYXBzX2N0Ml9jYWxsZWQgPT0gVFJVRSk7CisgIC8vZmFpbF91bmxlc3MgKGJ1ZmZlcl9hbGxvY19jdDJfY2FsbGVkID09IFRSVUUpOworCisgIGJ1ZmZlciA9IGdzdF90ZXN0X3RyYW5zX3BvcCAodHJhbnMpOworICAvL2ZhaWxfdW5sZXNzIChidWZmZXIgIT0gTlVMTCk7CisgIC8vZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikgPT0gMjApOworI2lmIDAKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChHU1RfQlVGRkVSX0NBUFMgKGJ1ZmZlciksIGluY2FwcykpOworI2VuZGlmCisgIC8vZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKworICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDIwKTsKKyNpZiAwCisgIGdzdF9idWZmZXJfc2V0X2NhcHMgKGJ1ZmZlciwgaW5jYXBzKTsKKyNlbmRpZgorICAvKiB0YWtlIGFkZGl0aW9uYWwgcmVmIHRvIG1ha2UgaXQgbm9uLXdyaXRhYmxlICovCisgIGdzdF9idWZmZXJfcmVmIChidWZmZXIpOworCisgIGZhaWxfdW5sZXNzIChHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKGJ1ZmZlcikgPT0gMik7CisKKyAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJidWZmZXIgd2l0aCBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBpbmNhcHMpOworCisgIHRyYW5zZm9ybV9jdDJfY2FsbGVkID0gRkFMU0U7CisgIGJ1ZmZlcl9hbGxvY19jdDJfY2FsbGVkID0gRkFMU0U7CisgIHJlcyA9IGdzdF90ZXN0X3RyYW5zX3B1c2ggKHRyYW5zLCBidWZmZXIpOworICAvL2ZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfT0spOworICAvL2ZhaWxfdW5sZXNzICh0cmFuc2Zvcm1fY3QyX2NhbGxlZCA9PSBGQUxTRSk7CisgIC8vZmFpbF91bmxlc3MgKGJ1ZmZlcl9hbGxvY19jdDJfY2FsbGVkID09IFRSVUUpOworICAvKiBhZnRlciBwdXNoLCBnZXQgcmlkIG9mIHRoZSBmaW5hbCByZWYgd2UgaGFkICovCisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7CisKKyAgYnVmZmVyID0gZ3N0X3Rlc3RfdHJhbnNfcG9wICh0cmFucyk7CisgIC8vZmFpbF91bmxlc3MgKGJ1ZmZlciAhPSBOVUxMKTsKKyAgLy9mYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSA9PSAyMCk7CisjaWYgMAorICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKEdTVF9CVUZGRVJfQ0FQUyAoYnVmZmVyKSwgaW5jYXBzKSk7CisjZW5kaWYKKworICAvKiBvdXRwdXQgYnVmZmVyIGhhcyByZWZjb3VudCAxICovCisgIC8vZmFpbF91bmxlc3MgKEdTVF9NSU5JX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAoYnVmZmVyKSA9PSAxKTsKKyAgLy9nc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworCisjaWYgMAorICAvKiB3aXRoIGNhcHMgYnVmZmVyICovCisgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiYWxsb2Mgd2l0aCBjYXBzLCBzaXplIDEwIik7CisKKyAgYnVmZmVyX2FsbG9jX2N0Ml9jYXNlID0gMTsKKyAgYnVmZmVyX2FsbG9jX2N0Ml9jYWxsZWQgPSBGQUxTRTsKKyAgcmVzID0gZ3N0X3BhZF9hbGxvY19idWZmZXIgKHRyYW5zLT5zcmNwYWQsIDAsIDEwLCBpbmNhcHMsICZidWZmZXIpOworICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9GTE9XX09LKTsKKyAgZmFpbF91bmxlc3MgKGJ1ZmZlcl9hbGxvY19jdDJfY2FsbGVkID09IFRSVUUpOworICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSA9PSAxMCk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7CisKKyAgLyogd2l0aCBjYXBzIGJ1ZmZlciAqLworICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImFsbG9jIHdpdGggd3JvbmcgY2Fwcywgc2l6ZSAxMCIpOworCisgIGJ1ZmZlcl9hbGxvY19jdDJfY2FzZSA9IDI7CisgIGJ1ZmZlcl9hbGxvY19jdDJfY2FsbGVkID0gRkFMU0U7CisgIHJlcyA9IGdzdF9wYWRfYWxsb2NfYnVmZmVyICh0cmFucy0+c3JjcGFkLCAwLCAxMCwgb3V0Y2FwcywgJmJ1ZmZlcik7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfT0spOworICBmYWlsX2lmIChidWZmZXIgPT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoR1NUX0JVRkZFUl9DQVBTIChidWZmZXIpLCBpbmNhcHMpKTsKKyAgLyogaWYgd2UgZG9uJ3QgcHVzaCBoZXJlLCBiYXNldHJhbnNmb3JtIHdpbGwgdGhpbmsgaXQgZG9lc24ndCBuZWVkIGRvIGEKKyAgICogcGFkIGFsbG9jIGZvciBkb3duc3RyZWFtIGNhcHMgc3VnZ2VzdGlvbnMgKi8KKyAgcmVzID0gZ3N0X3Rlc3RfdHJhbnNfcHVzaCAodHJhbnMsIGJ1ZmZlcik7CisgIGJ1ZmZlciA9IGdzdF90ZXN0X3RyYW5zX3BvcCAodHJhbnMpOworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworICAvKiBGSVhNRSBzaG91bGQgbm90IGNhbGwgdGhlIHBhZC1hbGxvYyBmdW5jdGlvbiBidXQgaXQgY3VycmVudGx5IGRvZXMgKi8KKyAgZmFpbF91bmxlc3MgKGJ1ZmZlcl9hbGxvY19jdDJfY2FsbGVkID09IEZBTFNFKTsKKyNlbmRpZgorCisgIC8qIGNoYW5nZSB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBidWZmZXItYWxsb2MgZnVuY3Rpb24gKi8KKyAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJzd2l0Y2hpbmcgdHJhbnNmb3JtIG91dHB1dCIpOworICBidWZmZXJfYWxsb2NfY3QyX3N1Z2dlc3QgPSBUUlVFOworCisgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLAorICAgICAgImJ1ZmZlciB3aXRoIGluIHBhc3N0aHJvdWdoIHdpdGggY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgaW5jYXBzKTsKKyAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMCk7CisjaWYgMAorICBnc3RfYnVmZmVyX3NldF9jYXBzIChidWZmZXIsIGluY2Fwcyk7CisjZW5kaWYKKworICAvKiBkb24ndCBzdWdnZXN0IGFueXRoaW5nIGVsc2UgKi8KKyAgYnVmZmVyX2FsbG9jX2N0Ml9jYXNlID0gMTsKKyAgc2V0X2NhcHNfY3QyX2Nhc2UgPSAyOworICB0cmFuc2Zvcm1fY3QyX2NhbGxlZCA9IEZBTFNFOworICBidWZmZXJfYWxsb2NfY3QyX2NhbGxlZCA9IEZBTFNFOworICByZXMgPSBnc3RfdGVzdF90cmFuc19wdXNoICh0cmFucywgYnVmZmVyKTsKKyAgLy9mYWlsX3VubGVzcyAocmVzID09IEdTVF9GTE9XX09LKTsKKyAgLy9mYWlsX3VubGVzcyAodHJhbnNmb3JtX2N0Ml9jYWxsZWQgPT0gVFJVRSk7CisgIC8qIEZJWE1FLCBwYWQgYWxsb2MgbXVzdCBiZSBjYWxsZWQgdG8gZ2V0IHRoZSBuZXcgY2FwcywgYmVjYXVzZSB3ZSBkb24ndCBjYWxsCisgICAqIHBhZCBhbGxvYyAqLworICAvL2ZhaWxfdW5sZXNzIChidWZmZXJfYWxsb2NfY3QyX2NhbGxlZCA9PSBUUlVFKTsKKworICBidWZmZXIgPSBnc3RfdGVzdF90cmFuc19wb3AgKHRyYW5zKTsKKyAgLy9mYWlsX3VubGVzcyAoYnVmZmVyICE9IE5VTEwpOworICAvKiBGSVhNRSBjaGFuZ2luZyBzcmMgY2FwcyBzaG91bGQgcHJvZHVjZSBjb252ZXJ0ZWQgYnVmZmVyICovCisjaWYgMAorICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgInJlY2VpdmVkIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsCisgICAgICBHU1RfQlVGRkVSX0NBUFMgKGJ1ZmZlcikpOworI2VuZGlmCisgIC8vZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChHU1RfQlVGRkVSX0NBUFMgKGJ1ZmZlciksIG91dGNhcHMpKTsKKyAgLy9mYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSA9PSAyMCk7CisKKyAgLyogb3V0cHV0IGJ1ZmZlciBoYXMgcmVmY291bnQgMSAqLworICAvL2ZhaWxfdW5sZXNzIChHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKGJ1ZmZlcikgPT0gMSk7CisgIC8vZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKworI2lmIDAKKyAgLyogd2l0aCBjYXBzIGJ1ZmZlciAqLworICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImFsbG9jIHdpdGggY2Fwcywgc2l6ZSAxMCIpOworCisgIHNldF9jYXBzX2N0Ml9jYXNlID0gMDsKKyAgYnVmZmVyX2FsbG9jX2N0Ml9jYXNlID0gMTsKKyAgYnVmZmVyX2FsbG9jX2N0Ml9jYWxsZWQgPSBGQUxTRTsKKyAgc2V0X2NhcHNfY3QyX2NhbGxlZCA9IEZBTFNFOworICByZXMgPSBnc3RfcGFkX2FsbG9jX2J1ZmZlciAodHJhbnMtPnNyY3BhZCwgMCwgMTAsIGluY2FwcywgJmJ1ZmZlcik7CisgIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfT0spOworICBmYWlsX3VubGVzcyAoYnVmZmVyX2FsbG9jX2N0Ml9jYWxsZWQgPT0gVFJVRSk7CisgIC8qIEZJWE1FIGEgYnVmZmVyIGFsbG9jIHNob3VsZCBuZXZlciBzZXQgY2FwcyAqLworICBmYWlsX3VubGVzcyAoc2V0X2NhcHNfY3QyX2NhbGxlZCA9PSBGQUxTRSk7CisgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpID09IDEwKTsKKyAgLyogRklYTUUsIGlkZWFsbHkgd2Ugd2FudCB0byByZXVzZSB0aGVzZSBjYXBzICovCisgIGZhaWxfdW5sZXNzIChHU1RfQlVGRkVSX0NBUFMgKGJ1ZmZlcikgPT0gaW5jYXBzKTsKKyAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChHU1RfQlVGRkVSX0NBUFMgKGJ1ZmZlciksIGluY2FwcykpOworICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOworI2VuZGlmCisKKyAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJidWZmZXIgd2l0aCBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBpbmNhcHMpOworICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEwKTsKKyNpZiAwCisgIGdzdF9idWZmZXJfc2V0X2NhcHMgKGJ1ZmZlciwgaW5jYXBzKTsKKyNlbmRpZgorCisgIC8qIGRvbid0IHN1Z2dlc3QgYW55dGhpbmcgZWxzZSAqLworICBidWZmZXJfYWxsb2NfY3QyX3N1Z2dlc3QgPSBGQUxTRTsKKyAgYnVmZmVyX2FsbG9jX2N0Ml9jYXNlID0gMDsKKyAgdHJhbnNmb3JtX2N0Ml9jYWxsZWQgPSBGQUxTRTsKKyAgYnVmZmVyX2FsbG9jX2N0Ml9jYWxsZWQgPSBGQUxTRTsKKyAgcmVzID0gZ3N0X3Rlc3RfdHJhbnNfcHVzaCAodHJhbnMsIGJ1ZmZlcik7CisgIC8vZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyk7CisgIC8vZmFpbF91bmxlc3MgKHRyYW5zZm9ybV9jdDJfY2FsbGVkID09IFRSVUUpOworICAvL2ZhaWxfdW5sZXNzIChidWZmZXJfYWxsb2NfY3QyX2NhbGxlZCA9PSBUUlVFKTsKKyAgLyogYWZ0ZXIgcHVzaCwgZ2V0IHJpZCBvZiB0aGUgZmluYWwgcmVmIHdlIGhhZCAqLworCisgIGJ1ZmZlciA9IGdzdF90ZXN0X3RyYW5zX3BvcCAodHJhbnMpOworICAvL2ZhaWxfdW5sZXNzIChidWZmZXIgIT0gTlVMTCk7CisgIC8vZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikgPT0gMjApOworICAvL2ZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoR1NUX0JVRkZFUl9DQVBTIChidWZmZXIpLCBvdXRjYXBzKSk7CisKKyAgLyogb3V0cHV0IGJ1ZmZlciBoYXMgcmVmY291bnQgMSAqLworICAvL2ZhaWxfdW5sZXNzIChHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKGJ1ZmZlcikgPT0gMSk7CisgIC8vZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKworICBnc3RfY2Fwc191bnJlZiAoaW5jYXBzKTsKKyAgZ3N0X2NhcHNfdW5yZWYgKG91dGNhcHMpOworCisgIGdzdF90ZXN0X3RyYW5zX2ZyZWUgKHRyYW5zKTsKK30KKworR1NUX0VORF9URVNUOworCisKK3N0YXRpYyBTdWl0ZSAqCitnc3RfYmFzZXRyYW5zZm9ybV9zdWl0ZSAodm9pZCkKK3sKKyAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RCYXNlVHJhbnNmb3JtIik7CisgIFRDYXNlICp0YyA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKKworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjKTsKKyAgLyogcGFzcyB0aHJvdWdoICovCisgIHRjYXNlX2FkZF90ZXN0ICh0YywgYmFzZXRyYW5zZm9ybV9jaGFpbl9wdDEpOworICB0Y2FzZV9hZGRfdGVzdCAodGMsIGJhc2V0cmFuc2Zvcm1fY2hhaW5fcHQyKTsKKyAgLyogaW4gcGxhY2UgKi8KKyAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBiYXNldHJhbnNmb3JtX2NoYWluX2lwMSk7CisgIHRjYXNlX2FkZF90ZXN0ICh0YywgYmFzZXRyYW5zZm9ybV9jaGFpbl9pcDIpOworICAvKiBjb3B5IHRyYW5zZm9ybSAqLworICB0Y2FzZV9hZGRfdGVzdCAodGMsIGJhc2V0cmFuc2Zvcm1fY2hhaW5fY3QxKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBiYXNldHJhbnNmb3JtX2NoYWluX2N0Mik7CisgIHRjYXNlX2FkZF90ZXN0ICh0YywgYmFzZXRyYW5zZm9ybV9jaGFpbl9jdDMpOworCisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoZ3N0X2Jhc2V0cmFuc2Zvcm0pOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svbGlicy90eXBlZmluZGhlbHBlci5jIGIvdGVzdHMvY2hlY2svbGlicy90eXBlZmluZGhlbHBlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNTVmODQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9saWJzL3R5cGVmaW5kaGVscGVyLmMKQEAgLTAsMCArMSwxMjUgQEAKKy8qIEdTdHJlYW1lcgorICoKKyAqIHVuaXQgdGVzdCBmb3IgdHlwZWZpbmQgaGVscGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gY2VudHJpY3VsYXIgbmV0PgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgorCisjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuaD4KKworc3RhdGljIGNvbnN0IGd1aW50OCB2b3JiaXNpZFszMF0gPSB7IDB4MDEsIDB4NzYsIDB4NmYsIDB4NzIsIDB4NjIsIDB4NjksIDB4NzMsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4NDQsIDB4YWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDMsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4MDEKK307CisKK3N0YXRpYyB2b2lkIGZvb2Jhcl90eXBlZmluZCAoR3N0VHlwZUZpbmQgKiB0ZiwgZ3BvaW50ZXIgdW51c2VkKTsKKworc3RhdGljIEdzdFN0YXRpY0NhcHMgZm9vYmFyX2NhcHMgPSBHU1RfU1RBVElDX0NBUFMgKCJmb28veC1iYXIiKTsKKworI2RlZmluZSBGT09CQVJfQ0FQUyAoZ3N0X3N0YXRpY19jYXBzX2dldCAoJmZvb2Jhcl9jYXBzKSkKKworLyogbWFrZSBzdXJlIHRoZSBlbnRpcmUgZGF0YSBpbiB0aGUgYnVmZmVyIGlzIGF2YWlsYWJsZSBmb3IgcGVla2luZyAqLworR1NUX1NUQVJUX1RFU1QgKHRlc3RfYnVmZmVyX3JhbmdlKQoreworICBzdGF0aWMgZ2NoYXIgKmZvb2Jhcl9leHRzW10gPSB7IChjaGFyICopICJmb29iYXIiLCBOVUxMIH07CisKKyAgR3N0U3RydWN0dXJlICpzOworICBHc3RCdWZmZXIgKmJ1ZjsKKyAgR3N0Q2FwcyAqY2FwczsKKworICBmYWlsX3VubGVzcyAoZ3N0X3R5cGVfZmluZF9yZWdpc3RlciAoTlVMTCwgImZvby94LWJhciIsCisgICAgICAgICAgR1NUX1JBTktfUFJJTUFSWSArIDUwLCBmb29iYXJfdHlwZWZpbmQsIChnY2hhciAqKikgZm9vYmFyX2V4dHMsCisgICAgICAgICAgRk9PQkFSX0NBUFMsIE5VTEwsIE5VTEwpKTsKKworICBidWYgPSBnc3RfYnVmZmVyX25ldyAoKTsKKyAgZmFpbF91bmxlc3MgKGJ1ZiAhPSBOVUxMKTsKKworICBnc3RfYnVmZmVyX3Rha2VfbWVtb3J5IChidWYsIC0xLAorICAgICAgZ3N0X21lbW9yeV9uZXdfd3JhcHBlZCAoR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZLAorICAgICAgICAgIChncG9pbnRlcikgdm9yYmlzaWQsIE5VTEwsIDMwLCAwLCAzMCkpOworCisgIGNhcHMgPSBnc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfYnVmZmVyIChOVUxMLCBidWYsIE5VTEwpOworICBmYWlsX3VubGVzcyAoY2FwcyAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9DQVBTX0lTX1NJTVBMRSAoY2FwcykpOworICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZml4ZWQgKGNhcHMpKTsKKworICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7CisgIGZhaWxfdW5sZXNzIChzICE9IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAocywgImZvby94LWJhciIpKTsKKworICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7CisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIFN1aXRlICoKK2dzdF90eXBlZmluZGhlbHBlcl9zdWl0ZSAodm9pZCkKK3sKKyAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJ0eXBlZmluZGhlbHBlciIpOworICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7CisKKyAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9idWZmZXJfcmFuZ2UpOworCisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoZ3N0X3R5cGVmaW5kaGVscGVyKTsKKworc3RhdGljIHZvaWQKK2Zvb2Jhcl90eXBlZmluZCAoR3N0VHlwZUZpbmQgKiB0ZiwgZ3BvaW50ZXIgdW51c2VkKQoreworICBjb25zdCBndWludDggKmRhdGE7CisKKyAgZGF0YSA9IGdzdF90eXBlX2ZpbmRfcGVlayAodGYsIDAsIDEwKTsKKyAgZmFpbF91bmxlc3MgKGRhdGEgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChtZW1jbXAgKGRhdGEsIHZvcmJpc2lkLCAxMCkgPT0gMCk7CisKKyAgZGF0YSA9IGdzdF90eXBlX2ZpbmRfcGVlayAodGYsIDAsIDIwKTsKKyAgZmFpbF91bmxlc3MgKGRhdGEgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChtZW1jbXAgKGRhdGEsIHZvcmJpc2lkLCAyMCkgPT0gMCk7CisKKyAgZGF0YSA9IGdzdF90eXBlX2ZpbmRfcGVlayAodGYsIDAsIDMwKTsKKyAgZmFpbF91bmxlc3MgKGRhdGEgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChtZW1jbXAgKGRhdGEsIHZvcmJpc2lkLCAzMCkgPT0gMCk7CisKKyAgZmFpbF91bmxlc3MgKGdzdF90eXBlX2ZpbmRfcGVlayAodGYsIDAsIDMxKSA9PSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF90eXBlX2ZpbmRfcGVlayAodGYsIDEsIDMwKSA9PSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKGdzdF90eXBlX2ZpbmRfcGVlayAodGYsIDI1LCA2KSA9PSBOVUxMKTsKKworICBkYXRhID0gZ3N0X3R5cGVfZmluZF9wZWVrICh0ZiwgMSwgMjkpOworICBmYWlsX3VubGVzcyAoZGF0YSAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKG1lbWNtcCAoZGF0YSwgdm9yYmlzaWQgKyAxLCAyOSkgPT0gMCk7CisKKyAgZGF0YSA9IGdzdF90eXBlX2ZpbmRfcGVlayAodGYsIDI1LCA0KTsKKyAgZmFpbF91bmxlc3MgKGRhdGEgIT0gTlVMTCk7CisgIGZhaWxfdW5sZXNzIChtZW1jbXAgKGRhdGEsIHZvcmJpc2lkICsgMjUsIDQpID09IDApOworCisgIGZhaWxfdW5sZXNzIChnc3RfdHlwZV9maW5kX3BlZWsgKHRmLCAtMSwgMjkpID09IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X3R5cGVfZmluZF9wZWVrICh0ZiwgLTEsIDEpID09IE5VTEwpOworICBmYWlsX3VubGVzcyAoZ3N0X3R5cGVfZmluZF9wZWVrICh0ZiwgLTEsIDApID09IE5VTEwpOworCisgIGdzdF90eXBlX2ZpbmRfc3VnZ2VzdCAodGYsIEdTVF9UWVBFX0ZJTkRfTUFYSU1VTSwgRk9PQkFSX0NBUFMpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svcGlwZWxpbmVzL2NsZWFudXAuYyBiL3Rlc3RzL2NoZWNrL3BpcGVsaW5lcy9jbGVhbnVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM3MjMyYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL3BpcGVsaW5lcy9jbGVhbnVwLmMKQEAgLTAsMCArMSwxMTkgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSA8MjAwNT4gVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgorICoKKyAqIGNsZWFudXAuYzogVW5pdCB0ZXN0IGZvciBjbGVhbnVwIG9mIHBpcGVsaW5lcworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgorCisKK3N0YXRpYyBHc3RFbGVtZW50ICoKK3NldHVwX3BpcGVsaW5lIChjb25zdCBnY2hhciAqIHBpcGVfZGVzY3IpCit7CisgIEdzdEVsZW1lbnQgKnBpcGVsaW5lOworCisgIHBpcGVsaW5lID0gZ3N0X3BhcnNlX2xhdW5jaCAocGlwZV9kZXNjciwgTlVMTCk7CisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUElQRUxJTkUgKHBpcGVsaW5lKSwgTlVMTCk7CisgIHJldHVybiBwaXBlbGluZTsKK30KKworLyogZXZlbnRzIGlzIGEgbWFzayBvZiBleHBlY3RlZCBldmVudHMuIHRldmVudCBpcyB0aGUgZXhwZWN0ZWQgdGVybWluYWwgZXZlbnQuCisgICB0aGUgcG9sbCBjYWxsIHdpbGwgdGltZSBvdXQgYWZ0ZXIgaGFsZiBhIHNlY29uZC4KKyAqLworc3RhdGljIHZvaWQKK3J1bl9waXBlbGluZSAoR3N0RWxlbWVudCAqIHBpcGVsaW5lLCBjb25zdCBnY2hhciAqIGRlc2NyLAorICAgIEdzdE1lc3NhZ2VUeXBlIGV2ZW50cywgR3N0TWVzc2FnZVR5cGUgdGV2ZW50KQoreworICBHc3RCdXMgKmJ1czsKKyAgR3N0TWVzc2FnZVR5cGUgcmV2ZW50OworCisgIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGVsaW5lKTsKKyAgZ19hc3NlcnQgKGJ1cyk7CisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKKworICB3aGlsZSAoMSkgeworICAgIEdzdE1lc3NhZ2UgKm1lc3NhZ2UgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfQU5ZLCBHU1RfU0VDT05EIC8gMik7CisKKyAgICBpZiAobWVzc2FnZSkgeworICAgICAgcmV2ZW50ID0gR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSk7CisgICAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldmVudCA9IEdTVF9NRVNTQUdFX1VOS05PV047CisgICAgfQorCisgICAgaWYgKHJldmVudCA9PSB0ZXZlbnQpIHsKKyAgICAgIGJyZWFrOworICAgIH0gZWxzZSBpZiAocmV2ZW50ID09IEdTVF9NRVNTQUdFX1VOS05PV04pIHsKKyAgICAgIGdfY3JpdGljYWwgKCJVbmV4cGVjdGVkIHRpbWVvdXQgaW4gZ3N0X2J1c19wb2xsLCBsb29raW5nIGZvciAlZDogJXMiLAorICAgICAgICAgIHRldmVudCwgZGVzY3IpOworICAgICAgYnJlYWs7CisgICAgfSBlbHNlIGlmIChyZXZlbnQgJiBldmVudHMpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBnX2NyaXRpY2FsCisgICAgICAgICgiVW5leHBlY3RlZCBtZXNzYWdlIHJlY2VpdmVkIG9mIHR5cGUgJWQsICclcycsIGxvb2tpbmcgZm9yICVkOiAlcyIsCisgICAgICAgIHJldmVudCwgZ3N0X21lc3NhZ2VfdHlwZV9nZXRfbmFtZSAocmV2ZW50KSwgdGV2ZW50LCBkZXNjcik7CisgIH0KKworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGlwZWxpbmVfdW5yZWYpCit7CisgIGNvbnN0IGdjaGFyICpzOworICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKnNyYywgKnNpbms7CisKKyAgcyA9ICJmYWtlc3JjIG5hbWU9c3JjIG51bS1idWZmZXJzPTIwICEgZmFrZXNpbmsgbmFtZT1zaW5rIjsKKyAgcGlwZWxpbmUgPSBzZXR1cF9waXBlbGluZSAocyk7CisgIC8qIGdldF9ieV9uYW1lIHRha2VzIGEgcmVmICovCisgIHNyYyA9IGdzdF9iaW5fZ2V0X2J5X25hbWUgKEdTVF9CSU4gKHBpcGVsaW5lKSwgInNyYyIpOworICBmYWlsX2lmIChzcmMgPT0gTlVMTCk7CisgIHNpbmsgPSBnc3RfYmluX2dldF9ieV9uYW1lIChHU1RfQklOIChwaXBlbGluZSksICJzaW5rIik7CisgIGZhaWxfaWYgKHNpbmsgPT0gTlVMTCk7CisKKyAgcnVuX3BpcGVsaW5lIChwaXBlbGluZSwgcywKKyAgICAgIEdTVF9NRVNTQUdFX05FV19DTE9DSyB8IEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQgfAorICAgICAgR1NUX01FU1NBR0VfU1RSRUFNX1NUQVRVUyB8IEdTVF9NRVNTQUdFX0FTWU5DX0RPTkUsIEdTVF9NRVNTQUdFX0VPUyk7CisgIHdoaWxlIChHU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChzcmMpID4gMSkKKyAgICBUSFJFQURfU1dJVENIICgpOworICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmMsICJzcmMiLCAxKTsKKyAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc2luaywgInNpbmsiLCAxKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc3JjKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoc2luayk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIFN1aXRlICoKK2NsZWFudXBfc3VpdGUgKHZvaWQpCit7CisgIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiUGlwZWxpbmUgY2xlYW51cCIpOworICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJsaW5lYXIiKTsKKworICAvKiB0aW1lIG91dCBhZnRlciAyMHMsIG5vdCB0aGUgZGVmYXVsdCAzICovCisgIHRjYXNlX3NldF90aW1lb3V0ICh0Y19jaGFpbiwgMjApOworCisgIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGlwZWxpbmVfdW5yZWYpOworICByZXR1cm4gczsKK30KKworR1NUX0NIRUNLX01BSU4gKGNsZWFudXApOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWRpc2FibGVkLmMgYi90ZXN0cy9jaGVjay9waXBlbGluZXMvcGFyc2UtZGlzYWJsZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzBhNWY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWRpc2FibGVkLmMKQEAgLTAsMCArMSw3MiBAQAorLyogR1N0cmVhbWVyIHVuaXQgdGVzdCBmb3IgZGlzYWJsZWQgZ3N0LXBhcnNlCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KKyAqICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisKKyNpbmNsdWRlIDxnc3QvZ3N0Y29uZmlnLmg+CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3BhcnNlX2xhdW5jaF9lcnJvcnMpCit7CisgIEdzdEVsZW1lbnQgKnBpcGU7CisgIEdFcnJvciAqZXJyOworICBjb25zdCBnY2hhciAqYXJyW10gPSB7ICJmYWtlc3JjIiwgImZha2VzaW5rIiwgTlVMTCB9OworCisgIGVyciA9IE5VTEw7CisgIHBpcGUgPSBnc3RfcGFyc2VfbGF1bmNoICgiZmFrZXNyYyAhIGZha2VzaW5rIiwgJmVycik7CisgIGZhaWxfdW5sZXNzIChlcnIgIT0gTlVMTCwgImV4cGVjdGVkIGFuIGVycm9yLCBidXQgZGlkIG5vdCBnZXQgb25lIik7CisgIGZhaWxfdW5sZXNzIChwaXBlID09IE5VTEwsICJnb3QgcGlwZWxpbmUsIGJ1dCBleHBlY3RlZCBOVUxMIik7CisgIGZhaWxfdW5sZXNzIChlcnItPmRvbWFpbiA9PSBHU1RfQ09SRV9FUlJPUik7CisgIGZhaWxfdW5sZXNzIChlcnItPmNvZGUgPT0gR1NUX0NPUkVfRVJST1JfRElTQUJMRUQpOworICBnX2Vycm9yX2ZyZWUgKGVycik7CisKKyAgZXJyID0gTlVMTDsKKyAgcGlwZSA9IGdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbiAoImZha2VzcmMgISBmYWtlc2luayIsIFRSVUUsICZlcnIpOworICBmYWlsX3VubGVzcyAoZXJyICE9IE5VTEwsICJleHBlY3RlZCBhbiBlcnJvciwgYnV0IGRpZCBub3QgZ2V0IG9uZSIpOworICBmYWlsX3VubGVzcyAocGlwZSA9PSBOVUxMLCAiZ290IHBpcGVsaW5lLCBidXQgZXhwZWN0ZWQgTlVMTCIpOworICBmYWlsX3VubGVzcyAoZXJyLT5kb21haW4gPT0gR1NUX0NPUkVfRVJST1IpOworICBmYWlsX3VubGVzcyAoZXJyLT5jb2RlID09IEdTVF9DT1JFX0VSUk9SX0RJU0FCTEVEKTsKKyAgZ19lcnJvcl9mcmVlIChlcnIpOworCisgIGVyciA9IE5VTEw7CisgIHBpcGUgPSBnc3RfcGFyc2VfbGF1bmNodiAoYXJyLCAmZXJyKTsKKyAgZmFpbF91bmxlc3MgKGVyciAhPSBOVUxMLCAiZXhwZWN0ZWQgYW4gZXJyb3IsIGJ1dCBkaWQgbm90IGdldCBvbmUiKTsKKyAgZmFpbF91bmxlc3MgKHBpcGUgPT0gTlVMTCwgImdvdCBwaXBlbGluZSwgYnV0IGV4cGVjdGVkIE5VTEwiKTsKKyAgZmFpbF91bmxlc3MgKGVyci0+ZG9tYWluID09IEdTVF9DT1JFX0VSUk9SKTsKKyAgZmFpbF91bmxlc3MgKGVyci0+Y29kZSA9PSBHU1RfQ09SRV9FUlJPUl9ESVNBQkxFRCk7CisgIGdfZXJyb3JfZnJlZSAoZXJyKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgU3VpdGUgKgorcGFyc2VkaXNhYmxlZF9zdWl0ZSAodm9pZCkKK3sKKyAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJQYXJzZSBMYXVuY2ggKERpc2FibGVkIE1vZGUpIik7CisgIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoInBhcnNlbGF1bmNoZGlzYWJsZWQiKTsKKworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BhcnNlX2xhdW5jaF9lcnJvcnMpOworICByZXR1cm4gczsKK30KKworR1NUX0NIRUNLX01BSU4gKHBhcnNlZGlzYWJsZWQpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jIGIvdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjODk0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9waXBlbGluZXMvcGFyc2UtbGF1bmNoLmMKQEAgLTAsMCArMSw2ODggQEAKKy8qIEdTdHJlYW1lciBnc3RfcGFyc2VfbGF1bmNoIHVuaXQgdGVzdHMKKyAqIENvcHlyaWdodCAoQykgPDIwMDU+IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KKyAqIENvcHlyaWdodCAoQykgPDIwMDg+IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1ZBTEdSSU5EX0gKKyMgaW5jbHVkZSA8dmFsZ3JpbmQvdmFsZ3JpbmQuaD4KKyMgaW5jbHVkZSA8dmFsZ3JpbmQvbWVtY2hlY2suaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisKKyNkZWZpbmUgR1NUX1RZUEVfUEFSU0VfVEVTVF9FTEVNRU5UIChnc3RfcGFyc2VfdGVzdF9lbGVtZW50X2dldF90eXBlKCkpCitzdGF0aWMgR1R5cGUgZ3N0X3BhcnNlX3Rlc3RfZWxlbWVudF9nZXRfdHlwZSAodm9pZCk7CisKK3N0YXRpYyBHc3RFbGVtZW50ICoKK3NldHVwX3BpcGVsaW5lIChjb25zdCBnY2hhciAqIHBpcGVfZGVzY3IpCit7CisgIEdzdEVsZW1lbnQgKnBpcGVsaW5lOworICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKworICBwaXBlbGluZSA9IGdzdF9wYXJzZV9sYXVuY2ggKHBpcGVfZGVzY3IsICZlcnJvcik7CisKKyAgR1NUX0RFQlVHICgiY3JlYXRlZCAlcyIsIHBpcGVfZGVzY3IpOworCisgIGlmIChlcnJvciAhPSBOVUxMKSB7CisgICAgZmFpbF9pZiAoZXJyb3IgIT0gTlVMTCwgIkVycm9yIHBhcnNpbmcgcGlwZWxpbmUgJXM6ICVzIiwgcGlwZV9kZXNjciwKKyAgICAgICAgZXJyb3ItPm1lc3NhZ2UpOworICAgIGdfZXJyb3JfZnJlZSAoZXJyb3IpOworICB9CisgIGZhaWxfdW5sZXNzIChwaXBlbGluZSAhPSBOVUxMLCAiRmFpbGVkIHRvIGNyZWF0ZSBwaXBlbGluZSAlcyIsIHBpcGVfZGVzY3IpOworICByZXR1cm4gcGlwZWxpbmU7Cit9CisKK3N0YXRpYyB2b2lkCitleHBlY3RlZF9mYWlsX3BpcGUgKGNvbnN0IGdjaGFyICogcGlwZV9kZXNjcikKK3sKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmU7CisgIEdFcnJvciAqZXJyb3IgPSBOVUxMOworCisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICBnc3RfZGVidWdfc2V0X2RlZmF1bHRfdGhyZXNob2xkIChHU1RfTEVWRUxfTk9ORSk7CisjZW5kaWYKKworICBwaXBlbGluZSA9IGdzdF9wYXJzZV9sYXVuY2ggKHBpcGVfZGVzY3IsICZlcnJvcik7CisgIGZhaWxfdW5sZXNzIChwaXBlbGluZSA9PSBOVUxMIHx8IGVycm9yICE9IE5VTEwsCisgICAgICAiRXhwZWN0ZWQgZmFpbHVyZSBwaXBlbGluZSAlczogc3VjY2VlZGVkISIsIHBpcGVfZGVzY3IpOworICBnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKworICAvKiBXZSBnZXQgYSBwaXBlbGluZSBiYWNrIGV2ZW4gd2hlbiBwYXJzaW5nIGhhcyBmYWlsZWQsIHNvbWV0aW1lcyEgKi8KKyAgaWYgKHBpcGVsaW5lKQorICAgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKK30KKworc3RhdGljIHZvaWQKK2NoZWNrX3BpcGVsaW5lX3J1bnMgKEdzdEVsZW1lbnQgKiBwKQoreworICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7CisKKyAgLyogQ2hlY2sgdGhhdCB0aGUgcGlwZWxpbmUgY2hhbmdlcyBzdGF0ZSB0byBQQVVTRUQgYW5kIGJhY2sgdG8gTlVMTCAqLworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHAsIEdTVF9TVEFURV9QQVVTRUQpOworICBpZiAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpCisgICAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwLCBOVUxMLCBOVUxMLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKyAgZmFpbF91bmxlc3MgKHJldCAhPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUsCisgICAgICAiQ291bGQgbm90IHNldCBwaXBlbGluZSB0byBwYXVzZWQiKTsKKworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHAsIEdTVF9TVEFURV9OVUxMKTsKKyAgaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKQorICAgIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocCwgTlVMTCwgTlVMTCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisgIGZhaWxfdW5sZXNzIChyZXQgIT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFLAorICAgICAgIkNvdWxkIG5vdCBzZXQgcGlwZWxpbmUgdG8gbnVsbCIpOworfQorCitzdGF0aWMgY29uc3QgZ2NoYXIgKnRlc3RfbGluZXNbXSA9IHsKKyAgImZpbGVzcmMgbG9jYXRpb249bXVzaWMubXAzICEgaWRlbnRpdHkgc2lsZW50PXRydWUgISBmYWtlc2luayBzaWxlbnQ9dHJ1ZSIsCisgICJmaWxlc3JjIGxvY2F0aW9uPW11c2ljLm9nZyAhIHRlZSAhIGlkZW50aXR5IHNpbGVudD10cnVlICEgaWRlbnRpdHkgc2lsZW50PXRydWUgISBmYWtlc2luayBzaWxlbnQ9dHJ1ZSIsCisgICJmaWxlc3JjIGxvY2F0aW9uPWh0dHA6Ly9kb21haW4uY29tL211c2ljLm1wMyAhIGlkZW50aXR5IHNpbGVudD10cnVlICEgZmFrZXNpbmsgc2lsZW50PXRydWUiLAorICAiZmlsZXNyYyBsb2NhdGlvbj1tb3ZpZS5hdmkgISB0ZWUgbmFtZT1kZW11eGVyICEgKCBxdWV1ZSAhIGlkZW50aXR5IHNpbGVudD10cnVlICEgZmFrZXNpbmsgc2lsZW50PXRydWUgKSAoIGRlbXV4ZXIuICEgcXVldWUgISBpZGVudGl0eSBzaWxlbnQ9dHJ1ZSAhIGZha2VzaW5rIHNpbGVudD10cnVlICkiLAorICAiZmFrZXNyYyAhIHZpZGVvL3gtcmF3LXl1diAhIGZha2VzaW5rIHNpbGVudD10cnVlIiwKKyAgImZha2VzcmMgISAgIHZpZGVvL3JhdywgIGZvcm1hdD0oc3RyaW5nKVlVWTI7IHZpZGVvL3JhdywgZm9ybWF0PShzdHJpbmcpWVYxMiAhIGZha2VzaW5rIHNpbGVudD10cnVlIiwKKyAgImZha2VzcmMgISBhdWRpby94LXJhdy1pbnQsIHdpZHRoPVsxNiwgIDMyXSwgZGVwdGg9ezE2LCAyNCwgMzJ9LCBzaWduZWQ9VFJVRSAhIGZha2VzaW5rIHNpbGVudD10cnVlIiwKKyAgImZha2VzcmMgISBpZGVudGl0eSBzaWxlbnQ9dHJ1ZSAhIGlkZW50aXR5IHNpbGVudD10cnVlICEgaWRlbnRpdHkgc2lsZW50PXRydWUgISBmYWtlc2luayBzaWxlbnQ9dHJ1ZSIsCisgICJmYWtlc3JjIG5hbWU9MTAwIGZha2VzaW5rIG5hbWU9MTAxIHNpbGVudD10cnVlIDEwMC4gISAxMDEuIiwKKyAgImZha2VzcmMgISAxZGVudGl0eSAhIGZha2VzaW5rIHNpbGVudD10cnVlIiwKKyAgTlVMTAorfTsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfbGF1bmNoX2xpbmVzKQoreworICBHc3RFbGVtZW50ICpwaXBlbGluZTsKKyAgY29uc3QgZ2NoYXIgKipzOworICBHVHlwZSB0eXBlOworICBHc3RFbGVtZW50RmFjdG9yeSAqZWZhYzsKKworICBlZmFjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9maW5kICgiaWRlbnRpdHkiKTsKKyAgZmFpbF91bmxlc3MgKGVmYWMgIT0gTlVMTCk7CisgIGVmYWMgPQorICAgICAgR1NUX0VMRU1FTlRfRkFDVE9SWSAoZ3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQgKEdTVF9QTFVHSU5fRkVBVFVSRSAoZWZhYykpKTsKKyAgZmFpbF91bmxlc3MgKGVmYWMgIT0gTlVMTCk7CisgIHR5cGUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9lbGVtZW50X3R5cGUgKGVmYWMpOworICBmYWlsX3VubGVzcyAodHlwZSAhPSAwKTsKKyAgZ19vYmplY3RfdW5yZWYgKGVmYWMpOworICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKE5VTEwsICIxZGVudGl0eSIsIEdTVF9SQU5LX05PTkUsIHR5cGUpKTsKKworICBmb3IgKHMgPSB0ZXN0X2xpbmVzOyAqcyAhPSBOVUxMOyBzKyspIHsKKyAgICBwaXBlbGluZSA9IHNldHVwX3BpcGVsaW5lICgqcyk7CisgICAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOworICB9Cit9CisKK0dTVF9FTkRfVEVTVDsKKworI2RlZmluZSBQSVBFTElORTEgICJmYWtlc3JjIgorI2RlZmluZSBQSVBFTElORTIgICJmYWtlc3JjIG5hbWU9ZG9uYWxkIG51bS1idWZmZXJzPSAyNyBzaWxlbnQgPVRydUUgc2l6ZXR5cGUgPSAzIGRhdGE9ICAgU3ViYnVmZmVyXFwgZGF0YSIKKyNkZWZpbmUgUElQRUxJTkUzICAiZmFrZXNyYyBpZGVudGl0eSBzaWxlbnQ9dHJ1ZSBmYWtlc2luayBzaWxlbnQ9dHJ1ZSIKKyNkZWZpbmUgUElQRUxJTkU0ICAiZmFrZXNyYyBudW0tYnVmZmVycz00IC5zcmMgISBpZGVudGl0eSBzaWxlbnQ9dHJ1ZSAhLnNpbmsgaWRlbnRpdHkgc2lsZW50PXRydWUgLnNyYyAhIC5zaW5rIGZha2VzaW5rIHNpbGVudD10cnVlIgorI2RlZmluZSBQSVBFTElORTUgICJmYWtlc3JjIG51bS1idWZmZXJzPTQgbmFtZT1zcmMgaWRlbnRpdHkgc2lsZW50PXRydWUgbmFtZT1pZDEgaWRlbnRpdHkgc2lsZW50PXRydWUgbmFtZSA9IGlkMiBmYWtlc2luayBzaWxlbnQ9dHJ1ZSBuYW1lID1zaW5rIHNyYy4gISBpZDEuIGlkMS4hIGlkMi5zaW5rIGlkMi5zcmMhc2luay5zaW5rIgorI2RlZmluZSBQSVBFTElORTYgICJwaXBlbGluZS4obmFtZT1cImpvaG5cIiBmYWtlc3JjIG51bS1idWZmZXJzPTQgKCBiaW4uICggISBxdWV1ZSAhIGlkZW50aXR5IHNpbGVudD10cnVlICEoIHF1ZXVlICEgZmFrZXNpbmsgc2lsZW50PXRydWUgKSkgKSkiCisjZGVmaW5lIFBJUEVMSU5FNyAgImZha2VzcmMgbnVtLWJ1ZmZlcnM9NCAhIHRlZSBuYW1lPXRlZSAuc3JjJWQhIHF1ZXVlICEgZmFrZXNpbmsgc2lsZW50PXRydWUgdGVlLnNyYyVkICEgcXVldWUgISBmYWtlc2luayBzaWxlbnQ9dHJ1ZSBxdWV1ZSBuYW1lID1cImZvb1wiICEgZmFrZXNpbmsgc2lsZW50PXRydWUgdGVlLnNyYyVkICEgZm9vLiIKKy8qIGFnZ3JlZ2F0b3IgaXMgYm9ya2VkCisgKiAjZGVmaW5lIFBJUEVMSU5FOCAgImZha2VzcmMgbnVtLWJ1ZmZlcnM9NCAhIHRlZSBuYW1lPXRlZTEgLnNyYzAsc3JjMSAhIC5zaW5rMCwgc2luazEgYWdncmVnYXRvciAhIGZha2VzaW5rIHNpbGVudD10cnVlIgorICogKi8KKyNkZWZpbmUgUElQRUxJTkU4ICAiZmFrZXNyYyBudW0tYnVmZmVycz00ICEgZmFrZXNpbmsgc2lsZW50PXRydWUiCisjZGVmaW5lIFBJUEVMSU5FOSAgImZha2VzcmMgbnVtLWJ1ZmZlcnM9NCAhIHRlc3QuIGZha2VzaW5rIHNpbGVudD10cnVlIG5hbWU9dGVzdCIKKyNkZWZpbmUgUElQRUxJTkUxMCAiKCBmYWtlc3JjIG51bS1idWZmZXJzPVwiNFwiICEgKSBpZGVudGl0eSBzaWxlbnQ9dHJ1ZSAhIGZha2VzaW5rIHNpbGVudD10cnVlIgorI2RlZmluZSBQSVBFTElORTExICJmYWtlc2luayBzaWxlbnQ9dHJ1ZSBuYW1lID0gc2luayBpZGVudGl0eSBzaWxlbnQ9dHJ1ZSBuYW1lPWlkICggZmFrZXNyYyBudW0tYnVmZmVycz1cIjRcIiAhIGlkLiApIGlkLiAhIHNpbmsuIgorI2RlZmluZSBQSVBFTElORTEyICJmaWxlOi8vL3RtcC90ZXN0LmZpbGUgISBmYWtlc2luayBzaWxlbnQ9dHJ1ZSIKKyNkZWZpbmUgUElQRUxJTkUxMyAiZmFrZXNyYyAhIGZpbGU6Ly8vdG1wL3Rlc3QuZmlsZSIKKyNkZWZpbmUgUElQRUxJTkUxNCAiY2Fwc2ZpbHRlciBjYXBzPWFwcGxpY2F0aW9uL3gtcnRwLHNwcm9wLXBhcmFtZXRlci1zZXRzPShzdHJpbmcpXCJ4XFwseFwiIgorI2RlZmluZSBQSVBFTElORTE1ICJjYXBzZmlsdGVyIGNhcHM9YXBwbGljYXRpb24veC1ydHAsc3Byb3AtcGFyYW1ldGVyLXNldHM9KHN0cmluZylcInhcXFwieFxcLHhcIiIKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfbGF1bmNoX2xpbmVzMikKK3sKKyAgR3N0RWxlbWVudCAqY3VyOworICBnaW50IGk7CisgIGdib29sZWFuIGI7CisgIGdjaGFyICpzID0gTlVMTDsKKworICAvKioKKyAgICogY2hlY2tzOgorICAgKiAtIHNwZWNpZnlpbmcgYW4gZWxlbWVudCB3b3JrcyA6KQorICAgKiAtIGlmIG9ubHkgMSBlbGVtZW50IGlzIHJlcXVlc3RlZCwgbm8gYmluIGlzIHJldHVybmVkLCBidXQgdGhlIGVsZW1lbnQKKyAgICovCisgIGN1ciA9IHNldHVwX3BpcGVsaW5lIChQSVBFTElORTEpOworICBmYWlsX3VubGVzcyAoR19PQkpFQ1RfVFlQRSAoY3VyKSA9PSBnX3R5cGVfZnJvbV9uYW1lICgiR3N0RmFrZVNyYyIpLAorICAgICAgInBhcnNlX2xhdW5jaCBkaWQgbm90IHByb2R1Y2UgYSBmYWtlc3JjIik7CisgIGdzdF9vYmplY3RfdW5yZWYgKGN1cik7CisKKyAgLyoqCisgICAqIGNoZWNrczoKKyAgICogLSBwcm9wZXJ0aWVzIHdvcmtzCisgICAqIC0gc3RyaW5nLCBpbnQsIGJvb2xlYW4gYW5kIGVudW1zIGNhbiBiZSBwcm9wZXJseSBzZXQKKyAgICogLSBmaXJzdCB0ZXN0IG9mIGVzY2FwaW5nIHN0cmluZ3MKKyAgICovCisgIGN1ciA9IHNldHVwX3BpcGVsaW5lIChQSVBFTElORTIpOworICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChjdXIpLCAibmFtZSIsICZzLCAibnVtLWJ1ZmZlcnMiLCAmaSwKKyAgICAgICJzaWxlbnQiLCAmYiwgTlVMTCk7CisgIGZhaWxfaWYgKHMgPT0gTlVMTCwgIm5hbWUgd2FzIE5VTEwiKTsKKyAgZmFpbF91bmxlc3MgKHN0cmNtcCAocywgImRvbmFsZCIpID09IDAsICJmYWtlc3JjIG5hbWUgd2FzIG5vdCAnZG9uYWxkJyIpOworICBmYWlsX3VubGVzcyAoaSA9PSAyNywgIm51bS1idWZmZXJzIHdhcyBub3QgMjciKTsKKyAgZmFpbF91bmxlc3MgKGIgPT0gVFJVRSwgInNpbGVudCB3YXMgbm90IFRSVUUiKTsKKyAgZ19mcmVlIChzKTsKKworICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChjdXIpLCAic2l6ZXR5cGUiLCAmaSwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChpID09IDMsICJzaXpldHlwZSAhPSAzIik7CisKKyAgZ19vYmplY3RfZ2V0IChHX09CSkVDVCAoY3VyKSwgImRhdGEiLCAmaSwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChpID09IDIsICJkYXRhICE9IDIiKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoY3VyKTsKKworICAvKioKKyAgICogY2hlY2tzOgorICAgKiAtIHNwZWNpZnlpbmcgbXVsdGlwbGUgZWxlbWVudHMgd2l0aG91dCBsaW5rcyB3b3JrcworICAgKiAtIGlmIG11bHRpcGxlIHRvcGxldmVsIGVsZW1lbnRzIGV4aXN0LCBhIHBpcGVsaW5lIGlzIHJldHVybmVkCisgICAqLworICBjdXIgPSBzZXR1cF9waXBlbGluZSAoUElQRUxJTkUzKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9CSU5fTlVNQ0hJTERSRU4gKGN1cikgPT0gMywKKyAgICAgICJQaXBlbGluZSBkb2VzIG5vdCBjb250YWluIDMgY2hpbGRyZW4iKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoY3VyKTsKKworICAvKioKKyAgICogY2hlY2tzOgorICAgKiAtIHRlc3QgZGVmYXVsdCBsaW5rICIhIgorICAgKiAtIHRlc3QgaWYgc3BlY2lmeWluZyBwYWRzIG9uIGxpbmtzIHdvcmtzCisgICAqLworICBjdXIgPSBzZXR1cF9waXBlbGluZSAoUElQRUxJTkU0KTsKKyAgY2hlY2tfcGlwZWxpbmVfcnVucyAoY3VyKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoY3VyKTsKKworICAvKioKKyAgICogY2hlY2tzOgorICAgKiAtIHRlc3QgaWYgYXBwZW5kaW5nIHRoZSBsaW5rcyB3b3JrcywgdG9vCisgICAqIC0gY2hlY2sgaWYgdGhlIHBpcGVsaW5lIGNvbnN0cnVjdGVkIHdvcmtzIHRoZSBzYW1lIGFzIHRoZSBvbmUgYmVmb3JlIChob3c/KQorICAgKi8KKyAgY3VyID0gc2V0dXBfcGlwZWxpbmUgKFBJUEVMSU5FNSk7CisgIGNoZWNrX3BpcGVsaW5lX3J1bnMgKGN1cik7CisgIGdzdF9vYmplY3RfdW5yZWYgKGN1cik7CisKKyAgLyoqCisgICAqIGNoZWNrczoKKyAgICogLSB0ZXN0IHZhcmlvdXMgdHlwZXMgb2YgYmlucworICAgKiAtIHRlc3QgaWYgbGlua2luZyBhY3Jvc3MgYmlucyB3b3JrcworICAgKiAtIHRlc3QgaWYgZXNjYXBpbmcgc3RyaW5ncyB3b3JrcworICAgKi8KKyAgY3VyID0gc2V0dXBfcGlwZWxpbmUgKFBJUEVMSU5FNik7CisgIGZhaWxfdW5sZXNzIChHU1RfSVNfUElQRUxJTkUgKGN1ciksICJQYXJzZSBkaWQgbm90IHByb2R1Y2UgYSBwaXBlbGluZSIpOworICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChjdXIpLCAibmFtZSIsICZzLCBOVUxMKTsKKyAgZmFpbF9pZiAocyA9PSBOVUxMLCAibmFtZSB3YXMgTlVMTCIpOworICBmYWlsX3VubGVzcyAoc3RyY21wIChzLCAiam9obiIpID09IDAsICJOYW1lIHdhcyBub3QgJ2pvaG4nIik7CisgIGdfZnJlZSAocyk7CisgIGNoZWNrX3BpcGVsaW5lX3J1bnMgKGN1cik7CisgIGdzdF9vYmplY3RfdW5yZWYgKGN1cik7CisKKyAgLyoqCisgICAqIGNoZWNrczoKKyAgICogLSB0ZXN0IHJlcXVlc3QgcGFkcworICAgKi8KKyAgY3VyID0gc2V0dXBfcGlwZWxpbmUgKFBJUEVMSU5FNyk7CisgIGNoZWNrX3BpcGVsaW5lX3J1bnMgKGN1cik7CisgIGdzdF9vYmplY3RfdW5yZWYgKGN1cik7CisKKyAgLyoqCisgICAqIGNoZWNrczoKKyAgICogLSBtdWx0aXBsZSBwYWRzIG9uIDEgbGluaworICAgKi8KKyAgY3VyID0gc2V0dXBfcGlwZWxpbmUgKFBJUEVMSU5FOCk7CisgIGNoZWNrX3BpcGVsaW5lX3J1bnMgKGN1cik7CisgIGdzdF9vYmplY3RfdW5yZWYgKGN1cik7CisKKyAgLyoqCisgICAqIGNoZWNrczoKKyAgICogLSBmYWlsZWQgaW4gZ3JhbW1hci55IGN2cyB2ZXJzaW9uIDEuMTcKKyAgICovCisgIGN1ciA9IHNldHVwX3BpcGVsaW5lIChQSVBFTElORTkpOworICBjaGVja19waXBlbGluZV9ydW5zIChjdXIpOworICBnc3Rfb2JqZWN0X3VucmVmIChjdXIpOworCisgIC8qKgorICAgKiBjaGVja3M6CisgICAqIC0gZmFpbGVkIGluIGdyYW1tYXIueSBjdnMgdmVyc2lvbiAxLjE3CisgICAqLworICBjdXIgPSBzZXR1cF9waXBlbGluZSAoUElQRUxJTkUxMCk7CisgIGNoZWNrX3BpcGVsaW5lX3J1bnMgKGN1cik7CisgIGdzdF9vYmplY3RfdW5yZWYgKGN1cik7CisKKyAgLyoqCisgICAqIGNoZWNrczoKKyAgICogLSBmYWlsZWQgaW4gZ3JhbW1hci55IGN2cyB2ZXJzaW9uIDEuMTgKKyAgICovCisgIGN1ciA9IHNldHVwX3BpcGVsaW5lIChQSVBFTElORTExKTsKKyAgY2hlY2tfcGlwZWxpbmVfcnVucyAoY3VyKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoY3VyKTsKKworICAvKioKKyAgICogY2hlY2tzOgorICAgKiAtIFVSSSBkZXRlY3Rpb24gd29ya3MKKyAgICovCisgIGN1ciA9IHNldHVwX3BpcGVsaW5lIChQSVBFTElORTEyKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoY3VyKTsKKworICAvKiogKiBjaGVja3M6CisgICAqIC0gVVJJIHNpbmsgZGV0ZWN0aW9uIHdvcmtzCisgICAqLworICBjdXIgPSBzZXR1cF9waXBlbGluZSAoUElQRUxJTkUxMyk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGN1cik7CisKKyAgLyogQ2hlY2tzIGhhbmRsaW5nIG9mIGEgYXNzaWdubWVudCBmb2xsb3dlZCBieSBlcnJvciBpbnNpZGUgYSBiaW4uIAorICAgKiBUaGlzIHNob3VsZCB3YXJuLCBidXQgaWdub3JlIHRoZSBlcnJvciBhbmQgY2Fycnkgb24gKi8KKyAgY3VyID0gc2V0dXBfcGlwZWxpbmUgKCIoIGZpbGVzcmMgYmxvY2tzaXplPTQgbG9jYXRpb249L2Rldi9udWxsIEAgKSIpOworICBnc3Rfb2JqZWN0X3VucmVmIChjdXIpOworCisgIC8qKgorICAgKiBDaGVja3MgaWYgY2hhcmFjdGVycyBpbnNpZGUgcXVvdGVzIGFyZSBub3QgZXNjYXBlZC4KKyAgKi8KKyAgY3VyID0gc2V0dXBfcGlwZWxpbmUgKFBJUEVMSU5FMTQpOworICBnc3Rfb2JqZWN0X3VucmVmIChjdXIpOworCisgIC8qKgorICAgKiBDaGVja3MgaWYgZXNjYXBlZCBxdW90ZXMgaW5zaWRlIHF1b3RlcyBhcmUgbm90IHRyZWF0ZWQgYXMgZW5kIHN0cmluZyBxdW90ZXMuCisgICAqIFRoaXMgd291bGQgbWFrZSB0aGUgcmVzdCBvZiBjaGFyYWN0ZXJzIHRvIGJlIGVzY2FwZWQgaW5jb3JyZWN0bHkuCisgICAqLworICBjdXIgPSBzZXR1cF9waXBlbGluZSAoUElQRUxJTkUxNSk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGN1cik7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIGNvbnN0IGdjaGFyICpleHBlY3RlZF9mYWlsdXJlc1tdID0geworICAvKiBjaGVja3M6IGZhaWxzIGJlY2F1c2UgYT1iLiBpcyBub3QgYSB2YWxpZCBlbGVtZW50IHJlZmVyZW5jZSBpbiBwYXJzZS5sICovCisgICJmYWtlc3JjIG51bS1idWZmZXJzPTQgbmFtZT1cImE9YlwiICBhPWIuICEgZmFrZXNpbmsgc2lsZW50PXRydWUiLAorICAvKiBjaGVja3M6IEVycm9yIGJyYW5jaCBmb3IgYSBub24tZGVzZXJpYWxpc2FibGUgcHJvcGVydHkgdmFsdWUgKi8KKyAgImZpbGVzcmMgYmxvY2tzaXplPWFic2RmZiIsCisgIC8qIGNoZWNrczogVGhhdCBicm9rZW4gY2FwcyB3aGljaCBkb24ndCBwYXJzZSBjYW4ndCBjcmVhdGUgYSBwaXBlbGluZSAqLworICAiZmFrZXNyYyAhIHZpZGVvL3Jhdyxmb3JtYXQ9KGFudHdlcnApbW9ua2V5cyAhIGZha2VzaW5rIHNpbGVudD10cnVlIiwKKyAgLyogY2hlY2tzOiBFbXB0eSBwaXBlbGluZSBpcyBpbnZhbGlkICovCisgICIiLAorICAvKiBjaGVja3M6IExpbmsgd2l0aG91dCBzaW5rIGVsZW1lbnQgZmFpbGVzICovCisgICJmYWtlc3JjICEgIiwKKyAgLyogY2hlY2tzOiBMaW5rIHdpdGhvdXQgc3JjIGVsZW1lbnQgZmFpbGVzICovCisgICIgISBmYWtlc2luayBzaWxlbnQ9dHJ1ZSIsCisgIC8qIGNoZWNrczogU291cmNlIFVSSSBmb3Igd2hpY2ggbm8gZWxlbWVudCBleGlzdHMgaXMgYSBmYWlsdXJlICovCisgICJib3JreTovL2ZkYWZmZCAhIGZha2VzaW5rIHNpbGVudD10cnVlIiwKKyAgLyogY2hlY2tzOiBTaW5rIFVSSSBmb3Igd2hpY2ggbm8gZWxlbWVudCBleGlzdHMgaXMgYSBmYWlsdXJlICovCisgICJmYWtlc3JjICEgYm9ya3k6Ly9mZGFmZmQiLAorICAvKiBjaGVja3M6IFJlZmVyZW5jaW5nIG5vbi1leGlzdGVudCBzb3VyY2UgZWxlbWVudCBieSBuYW1lIGNhbid0IGxpbmsgKi8KKyAgImZha2VzcmMgbmFtZT1zcmMgZmFrZXNpbmsgc2lsZW50PXRydWUgbmFtZT1zaW5rIG5vZXhpc3RlLiAhIHNpbmsuIiwKKyAgLyogY2hlY2tzOiBSZWZlcmVuY2luZyBub24tZXhpc3RlbnQgc2luayBlbGVtZW50IGJ5IG5hbWUgY2FuJ3QgbGluayAqLworICAiZmFrZXNyYyBuYW1lPXNyYyBmYWtlc2luayBzaWxlbnQ9dHJ1ZSBuYW1lPXNpbmsgc3JjLiAhIG5vZXhpc3RlLiIsCisgIC8qIGNoZWNrczogQ2FuJ3QgbGluayAyIGVsZW1lbnRzIHRoYXQgb25seSBoYXZlIHNpbmsgcGFkcyAqLworICAiZmFrZXNpbmsgc2lsZW50PXRydWUgISBmYWtlc2luayBzaWxlbnQ9dHJ1ZSIsCisgIC8qIGNoZWNrcyBtdWx0aS1jaGFpbiBsaW5rIHdpdGhvdXQgc3JjIGVsZW1lbnQgZmFpbHMuICovCisgICIhIGlkZW50aXR5IHNpbGVudD10cnVlICEgaWRlbnRpdHkgc2lsZW50PXRydWUgISBmYWtlc2luayBzaWxlbnQ9dHJ1ZSIsCisgIC8qIEVtcHR5IGJpbiBub3QgYWxsb3dlZCAqLworICAiYmluLiggKSIsCisgIC8qIGJpbiB3aXRoIG5vbi1leGlzdGVudCBlbGVtZW50IGNvdW50cyBhcyBlbXB0eSwgYW5kIG5vdCBhbGxvd2VkICovCisgICJiaW4uKCBub25fZXhpc3RlbnRfZWxlbWVudCApIiwKKyAgLyogRU5EOiAqLworICBOVUxMCit9OworCitHU1RfU1RBUlRfVEVTVCAoZXhwZWN0ZWRfdG9fZmFpbF9waXBlcykKK3sKKyAgY29uc3QgZ2NoYXIgKipzOworCisgIGZvciAocyA9IGV4cGVjdGVkX2ZhaWx1cmVzOyAqcyAhPSBOVUxMOyBzKyspIHsKKyAgICBleHBlY3RlZF9mYWlsX3BpcGUgKCpzKTsKKyAgfQorfQorCitHU1RfRU5EX1RFU1Q7CisKK3N0YXRpYyBjb25zdCBnY2hhciAqbGVha2luZ19mYWlsdXJlc1tdID0geworICAvKiBjaGVja3M6IEludmFsaWQgcGlwZWxpbmUgc3ludGF4IGZhaWxzICovCisgICJmYWtlc3JjICEgaWRlbnRpdHkgc2lsZW50PXRydWUgISBzZ3NkZmFnZmQgQCBnZmRnZmRzZ2ZzZ1NGIiwKKyAgLyogY2hlY2tzOiBBdHRlbXB0aW5nIHRvIGxpbmsgdG8gYSBub24tZXhpc3RlbnQgcGFkIG9uIGFuIGVsZW1lbnQgCisgICAqIGNyZWF0ZWQgdmlhIFVSSSBoYW5kbGVyIHNob3VsZCBmYWlsICovCisgICJmYWtlc3JjICEgLmZvbyBmaWxlOi8vL2Rldi9udWxsIiwKKyAgLyogY2hlY2tzOiBUaGF0IHJlcXVlc3RpbmcgYW4gZWxlbWVudCB3aGljaCBkb2Vzbid0IGV4aXN0IGRvZXNuJ3Qgd29yayAqLworICAiZXJyb3ItZG9lcy1ub3QtZXhpc3Qtc3JjIiwKKyAgTlVMTAorfTsKKworR1NUX1NUQVJUX1RFU1QgKGxlYWtpbmdfZmFpbF9waXBlcykKK3sKKyAgY29uc3QgZ2NoYXIgKipzOworCisgIGZvciAocyA9IGxlYWtpbmdfZmFpbHVyZXM7ICpzICE9IE5VTEw7IHMrKykgeworICAgIC8qIFVuY29tbWVudCBpZiB5b3Ugd2FudCB0byB0cnkgZml4aW5nIHRoZSBsZWFrcyAqLworI2lmIDAKKyAgICBnX3ByaW50ICgiVHJ5aW5nIHBpcGU6ICVzXG4iLCAqcyk7CisgICAgZXhwZWN0ZWRfZmFpbF9waXBlICgqcyk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX1ZBTEdSSU5EX0gKKyAgICBWQUxHUklORF9ET19MRUFLX0NIRUNLOworI2VuZGlmCisgIH0KK30KKworR1NUX0VORF9URVNUOworCisvKiBIZWxwZXIgZnVuY3Rpb24gdG8gdGVzdCBkZWxheWVkIGxpbmtpbmcgc3VwcG9ydCBpbiBwYXJzZV9sYXVuY2ggYnkgY3JlYXRpbmcKKyAqIGEgdGVzdCBlbGVtZW50IGJhc2VkIG9uIGJpbiwgd2hpY2ggY29udGFpbnMgYSBmYWtlc3JjIGFuZCBhIHNvbWV0aW1lcyAKKyAqIHBhZC10ZW1wbGF0ZSwgYW5kIHRyeWluZyB0byBsaW5rIHRvIGEgZmFrZXNpbmsuIFdoZW4gdGhlIGJpbiB0cmFuc2l0aW9ucworICogdG8gcGF1c2VkIGl0IGFkZHMgYSBwYWQsIHdoaWNoIHNob3VsZCBnZXQgbGlua2VkIHRvIHRoZSBmYWtlc2luayAqLworc3RhdGljIHZvaWQKK3J1bl9kZWxheWVkX3Rlc3QgKGNvbnN0IGdjaGFyICogcGlwZV9zdHIsIGNvbnN0IGdjaGFyICogcGVlciwKKyAgICBnYm9vbGVhbiBleHBlY3RfbGluaykKK3sKKyAgR3N0RWxlbWVudCAqcGlwZSwgKnNyYywgKnNpbms7CisgIEdzdFBhZCAqc3JjcGFkLCAqc2lua3BhZCwgKnBlZXJwYWQgPSBOVUxMOworCisgIHBpcGUgPSBzZXR1cF9waXBlbGluZSAocGlwZV9zdHIpOworCisgIHNyYyA9IGdzdF9iaW5fZ2V0X2J5X25hbWUgKEdTVF9CSU4gKHBpcGUpLCAic3JjIik7CisgIGZhaWxfaWYgKHNyYyA9PSBOVUxMLCAiVGVzdCBzb3VyY2UgZWxlbWVudCB3YXMgbm90IGNyZWF0ZWQiKTsKKworICBzaW5rID0gZ3N0X2Jpbl9nZXRfYnlfbmFtZSAoR1NUX0JJTiAocGlwZSksICJzaW5rIik7CisgIGZhaWxfaWYgKHNpbmsgPT0gTlVMTCwgIlRlc3Qgc2luayBlbGVtZW50IHdhcyBub3QgY3JlYXRlZCIpOworCisgIC8qIFRoZSBzcmMgc2hvdWxkIG5vdCB5ZXQgaGF2ZSBhIHNyYyBwYWQgKi8KKyAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYywgInNyYyIpOworICBmYWlsX3VubGVzcyAoc3JjcGFkID09IE5VTEwsICJTb3VyY2UgZWxlbWVudCBhbHJlYWR5IGhhcyBhIHNvdXJjZSBwYWQiKTsKKworICAvKiBTZXQgdGhlIHN0YXRlIHRvIFBBVVNFRCBhbmQgd2FpdCB1bnRpbCB0aGUgc3JjIGF0IGxlYXN0IHJlYWNoZXMgdGhhdAorICAgKiBzdGF0ZSAqLworICBmYWlsX2lmIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9QQVVTRUQpID09CisgICAgICBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpOworCisgIGZhaWxfaWYgKGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoc3JjLCBOVUxMLCBOVUxMLCBHU1RfQ0xPQ0tfVElNRV9OT05FKSA9PQorICAgICAgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKKworICAvKiBOb3csIHRoZSBzb3VyY2UgZWxlbWVudCBzaG91bGQgaGF2ZSBhIHNyYyBwYWQsIGFuZCBpZiAicGVlciIgd2FzIHBhc3NlZCwgCisgICAqIHRoZW4gdGhlIHNyYyBwYWQgc2hvdWxkIGhhdmUgZ290dGVuIGxpbmtlZCB0byB0aGUgJ3NpbmsnIHBhZCBvZiB0aGF0IAorICAgKiBwZWVyICovCisgIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMsICJzcmMiKTsKKyAgZmFpbF9pZiAoc3JjcGFkID09IE5VTEwsICJTb3VyY2UgZWxlbWVudCBkaWQgbm90IGNyZWF0ZSBzb3VyY2UgcGFkIik7CisKKyAgcGVlcnBhZCA9IGdzdF9wYWRfZ2V0X3BlZXIgKHNyY3BhZCk7CisKKyAgaWYgKGV4cGVjdF9saW5rID09IFRSVUUpIHsKKyAgICBmYWlsX2lmIChwZWVycGFkID09IE5VTEwsICJTb3VyY2UgZWxlbWVudCBwYWQgZGlkIG5vdCBnZXQgbGlua2VkIik7CisgIH0gZWxzZSB7CisgICAgZmFpbF9pZiAocGVlcnBhZCAhPSBOVUxMLAorICAgICAgICAiU291cmNlIGVsZW1lbnQgcGFkIGdvdCBsaW5rZWQgYnV0IHNob3VsZCBub3QgaGF2ZSIpOworICB9CisgIGlmIChwZWVycGFkICE9IE5VTEwpCisgICAgZ3N0X29iamVjdF91bnJlZiAocGVlcnBhZCk7CisKKyAgaWYgKHBlZXIgIT0gTlVMTCkgeworICAgIEdzdEVsZW1lbnQgKnBlZXJfZWxlbSA9IGdzdF9iaW5fZ2V0X2J5X25hbWUgKEdTVF9CSU4gKHBpcGUpLCBwZWVyKTsKKworICAgIGZhaWxfaWYgKHBlZXJfZWxlbSA9PSBOVUxMLCAiQ291bGQgbm90IHJldHJpZXZlIHBlZXIgJXMiLCBwZWVyKTsKKworICAgIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAocGVlcl9lbGVtLCAic2luayIpOworICAgIGZhaWxfaWYgKHNpbmtwYWQgPT0gTlVMTCwgIlBlZXIgZWxlbWVudCBkaWQgbm90IGhhdmUgYSAnc2luaycgcGFkIik7CisKKyAgICBmYWlsX3VubGVzcyAocGVlcnBhZCA9PSBzaW5rcGFkLAorICAgICAgICAiU291cmNlIHNyYyBwYWQgZ290IGNvbm5lY3RlZCB0byB0aGUgd3JvbmcgcGVlciIpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOworICB9CisKKyAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKKworICBnc3Rfb2JqZWN0X3VucmVmIChzcmMpOworICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rKTsKKworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9OVUxMKTsKKyAgZ3N0X29iamVjdF91bnJlZiAocGlwZSk7Cit9CisKK0dTVF9TVEFSVF9URVNUIChkZWxheWVkX2xpbmspCit7CisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9yZWdpc3RlciAoTlVMTCwgInBhcnNldGVzdGVsZW1lbnQiLAorICAgICAgICAgIEdTVF9SQU5LX05PTkUsIEdTVF9UWVBFX1BBUlNFX1RFU1RfRUxFTUVOVCkpOworCisgIC8qIFRoaXMgdGVzdHMgdGhlIGRlbGF5ZWQgbGlua2luZyBzdXBwb3J0IGluIHBhcnNlX2xhdW5jaCBieSBjcmVhdGluZworICAgKiBhIHRlc3QgZWxlbWVudCBiYXNlZCBvbiBiaW4sIHdoaWNoIGNvbnRhaW5zIGEgZmFrZXNyYyBhbmQgYSBzb21ldGltZXMgCisgICAqIHBhZC10ZW1wbGF0ZSwgYW5kIHRyeWluZyB0byBsaW5rIHRvIGEgZmFrZXNpbmsuIFdoZW4gdGhlIGJpbiB0cmFuc2l0aW9ucworICAgKiB0byBwYXVzZWQgaXQgYWRkcyBhIHBhZCwgd2hpY2ggc2hvdWxkIGdldCBsaW5rZWQgdG8gdGhlIGZha2VzaW5rICovCisgIHJ1bl9kZWxheWVkX3Rlc3QKKyAgICAgICgicGFyc2V0ZXN0ZWxlbWVudCBuYW1lPXNyYyAhIGZha2VzaW5rIHNpbGVudD10cnVlIG5hbWU9c2luayIsICJzaW5rIiwKKyAgICAgIFRSVUUpOworCisgIC8qIFRlc3QsIGJ1dCB0aGlzIHRpbWUgc3BlY2lmeWluZyBib3RoIHBhZCBuYW1lcyAqLworICBydW5fZGVsYXllZF90ZXN0ICgicGFyc2V0ZXN0ZWxlbWVudCBuYW1lPXNyYyAuc3JjICEgIgorICAgICAgIi5zaW5rIGZha2VzaW5rIHNpbGVudD10cnVlIG5hbWU9c2luayIsICJzaW5rIiwgVFJVRSk7CisKKyAgLyogTm93IHRyeSB3aXRoIGEgY2FwcyBmaWx0ZXIsIGJ1dCBub3QgdGVzdGluZyB0aGF0CisgICAqIHRoZSBwZWVycGFkID09IHNpbmtwYWQsIGJlY2F1c2UgdGhlIHBlZXIgd2lsbCBhY3R1YWxseQorICAgKiBiZSBhIGNhcHNmaWx0ZXIgKi8KKyAgcnVuX2RlbGF5ZWRfdGVzdCAoInBhcnNldGVzdGVsZW1lbnQgbmFtZT1zcmMgISBhcHBsaWNhdGlvbi94LXRlc3QtY2FwcyAhICIKKyAgICAgICJmYWtlc2luayBzaWxlbnQ9dHJ1ZSBuYW1lPXNpbmsiLCBOVUxMLCBUUlVFKTsKKworICAvKiBOb3cgdHJ5IHdpdGggbXV0dWFsbHkgZXhjbHVzaXZlIGNhcHMgZmlsdGVycyB0aGF0IAorICAgKiB3aWxsIHByZXZlbnQgbGlua2luZywgYnV0IG9ubHkgb25jZSBnZXRzIGFyb3VuZCB0byBoYXBwZW5pbmcgLQorICAgKiBpZSwgdGhlIHBpcGVsaW5lIHNob3VsZCBjcmVhdGUgb2sgYnV0IGZhaWwgdG8gY2hhbmdlIHN0YXRlICovCisgIHJ1bl9kZWxheWVkX3Rlc3QgKCJwYXJzZXRlc3RlbGVtZW50IG5hbWU9c3JjICEgYXBwbGljYXRpb24veC10ZXN0LWNhcHMgISAiCisgICAgICAiaWRlbnRpdHkgc2lsZW50PXRydWUgISBhcHBsaWNhdGlvbi94LW90aGVyLWNhcHMgISAiCisgICAgICAiZmFrZXNpbmsgc2lsZW50PXRydWUgbmFtZT1zaW5rIHNpbGVudD10cnVlIiwgTlVMTCwgRkFMU0UpOworfQorCitHU1RfRU5EX1RFU1Q7CisKK3R5cGVkZWYgc3RydWN0IF9Hc3RQYXJzZVRlc3RFbGVtZW50Cit7CisgIEdzdEJpbiBwYXJlbnQ7CisKKyAgR3N0RWxlbWVudCAqZmFrZXNyYzsKK30gR3N0UGFyc2VUZXN0RWxlbWVudDsKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdFBhcnNlVGVzdEVsZW1lbnRDbGFzcworeworICBHc3RCaW5DbGFzcyBwYXJlbnQ7Cit9IEdzdFBhcnNlVGVzdEVsZW1lbnRDbGFzczsKKworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHRlc3RfZWxlbWVudF9wYWRfdGVtcGxhdGUgPQorR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLCBHU1RfUEFEX1NSQywKKyAgICBHU1RfUEFEX1NPTUVUSU1FUywgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC10ZXN0LWNhcHMiKSk7CisjZGVmaW5lIGdzdF9wYXJzZV90ZXN0X2VsZW1lbnRfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcworR19ERUZJTkVfVFlQRSAoR3N0UGFyc2VUZXN0RWxlbWVudCwgZ3N0X3BhcnNlX3Rlc3RfZWxlbWVudCwgR1NUX1RZUEVfQklOKTsKKworc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCitnc3RfcGFyc2VfdGVzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCisgICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7CisKK3N0YXRpYyB2b2lkCitnc3RfcGFyc2VfdGVzdF9lbGVtZW50X2NsYXNzX2luaXQgKEdzdFBhcnNlVGVzdEVsZW1lbnRDbGFzcyAqIGtsYXNzKQoreworICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOworCisgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCisgICAgICBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgKCZ0ZXN0X2VsZW1lbnRfcGFkX3RlbXBsYXRlKSk7CisKKyAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2ltcGxlIChnc3RlbGVtZW50X2NsYXNzLAorICAgICAgIlRlc3QgZWxlbWVudCBmb3IgcGFyc2UgbGF1bmNoIHRlc3RzIiwgIlNvdXJjZSIsCisgICAgICAiVGVzdCBlbGVtZW50IGZvciBwYXJzZSBsYXVuY2ggdGVzdHMgaW4gY29yZSIsCisgICAgICAiR1N0cmVhbWVyIERldmVsIDxnc3RyZWFtZXItZGV2ZWxAbGlzdHMuc2YubmV0PiIpOworCisgIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IGdzdF9wYXJzZV90ZXN0X2VsZW1lbnRfY2hhbmdlX3N0YXRlOworfQorCitzdGF0aWMgdm9pZAorZ3N0X3BhcnNlX3Rlc3RfZWxlbWVudF9pbml0IChHc3RQYXJzZVRlc3RFbGVtZW50ICogc3JjKQoreworICAvKiBDcmVhdGUgYSBmYWtlc3JjIGFuZCBhZGQgaXQgdG8gb3Vyc2VsdmVzICovCisgIHNyYy0+ZmFrZXNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKKyAgaWYgKHNyYy0+ZmFrZXNyYykKKyAgICBnc3RfYmluX2FkZCAoR1NUX0JJTiAoc3JjKSwgc3JjLT5mYWtlc3JjKTsKK30KKworc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCitnc3RfcGFyc2VfdGVzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCisgICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKK3sKKyAgR3N0UGFyc2VUZXN0RWxlbWVudCAqc3JjID0gKEdzdFBhcnNlVGVzdEVsZW1lbnQgKikgZWxlbWVudDsKKworICBpZiAodHJhbnNpdGlvbiA9PSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRCkgeworICAgIC8qIEFkZCBvdXIgcGFkICovCisgICAgR3N0UGFkICpwYWQ7CisgICAgR3N0UGFkICpnaG9zdDsKKworICAgIGlmIChzcmMtPmZha2VzcmMgPT0gTlVMTCkKKyAgICAgIHJldHVybiBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU7CisKKyAgICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLT5mYWtlc3JjLCAic3JjIik7CisgICAgaWYgKHBhZCA9PSBOVUxMKQorICAgICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKKworICAgIGdob3N0ID0gZ3N0X2dob3N0X3BhZF9uZXcgKCJzcmMiLCBwYWQpOworICAgIGZhaWxfaWYgKGdob3N0ID09IE5VTEwsICJGYWlsZWQgdG8gY3JlYXRlIGdob3N0IHBhZCIpOworICAgIC8qIGFjdGl2YXRlIGFuZCBhZGQgKi8KKyAgICBnc3RfcGFkX3NldF9hY3RpdmUgKGdob3N0LCBUUlVFKTsKKyAgICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoc3JjKSwgZ2hvc3QpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7CisgIH0KKworICByZXR1cm4gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X21pc3NpbmdfZWxlbWVudHMpCit7CisgIEdzdFBhcnNlQ29udGV4dCAqY3R4OworICBHc3RFbGVtZW50ICplbGVtZW50OworICBHRXJyb3IgKmVyciA9IE5VTEw7CisgIGdjaGFyICoqYXJyOworCisgIC8qIGF2b2lkIG1pc2xlYWRpbmcgJ25vIHN1Y2ggZWxlbWVudCcgZXJyb3IgZGVidWcgbWVzc2FnZXMgd2hlbiB1c2luZyBjdnMgKi8KKyAgaWYgKCFnX2dldGVudiAoIkdTVF9ERUJVRyIpKQorICAgIGdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGQgKEdTVF9MRVZFTF9OT05FKTsKKworICAvKiBvbmUgbWlzc2luZyBlbGVtZW50ICovCisgIGN0eCA9IGdzdF9wYXJzZV9jb250ZXh0X25ldyAoKTsKKyAgZWxlbWVudCA9IGdzdF9wYXJzZV9sYXVuY2hfZnVsbCAoImZha2VzcmMgISBjb2ZmZWVzaW5rIiwgY3R4LAorICAgICAgR1NUX1BBUlNFX0ZMQUdfRkFUQUxfRVJST1JTLCAmZXJyKTsKKyAgZmFpbF91bmxlc3MgKGVyciAhPSBOVUxMLCAiZXhwZWN0ZWQgZXJyb3IiKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZXJyLT5jb2RlLCBHU1RfUEFSU0VfRVJST1JfTk9fU1VDSF9FTEVNRU5UKTsKKyAgZmFpbF91bmxlc3MgKGVsZW1lbnQgPT0gTlVMTCwgImV4cGVjdGVkIE5VTEwgcmV0dXJuIHdpdGggRkFUQUxfRVJST1JTIik7CisgIGFyciA9IGdzdF9wYXJzZV9jb250ZXh0X2dldF9taXNzaW5nX2VsZW1lbnRzIChjdHgpOworICBmYWlsX3VubGVzcyAoYXJyICE9IE5VTEwsICJleHBlY3RlZCBtaXNzaW5nIGVsZW1lbnRzIik7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGFyclswXSwgImNvZmZlZXNpbmsiKTsKKyAgZmFpbF91bmxlc3MgKGFyclsxXSA9PSBOVUxMKTsKKyAgZ19zdHJmcmVldiAoYXJyKTsKKyAgZ3N0X3BhcnNlX2NvbnRleHRfZnJlZSAoY3R4KTsKKyAgZ19lcnJvcl9mcmVlIChlcnIpOworICBlcnIgPSBOVUxMOworCisgIC8qIG11bHRpcGxlIG1pc3NpbmcgZWxlbWVudHMgKi8KKyAgY3R4ID0gZ3N0X3BhcnNlX2NvbnRleHRfbmV3ICgpOworICBlbGVtZW50ID0gZ3N0X3BhcnNlX2xhdW5jaF9mdWxsICgiZmFrZXNyYyAhIGJvZ3VzZW5jICEgaWRlbnRpdHkgISBnb29tdXggISAiCisgICAgICAiZmFrZXNpbmsiLCBjdHgsIEdTVF9QQVJTRV9GTEFHX0ZBVEFMX0VSUk9SUywgJmVycik7CisgIGZhaWxfdW5sZXNzIChlcnIgIT0gTlVMTCwgImV4cGVjdGVkIGVycm9yIik7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGVyci0+Y29kZSwgR1NUX1BBUlNFX0VSUk9SX05PX1NVQ0hfRUxFTUVOVCk7CisgIGZhaWxfdW5sZXNzIChlbGVtZW50ID09IE5VTEwsICJleHBlY3RlZCBOVUxMIHJldHVybiB3aXRoIEZBVEFMX0VSUk9SUyIpOworICBhcnIgPSBnc3RfcGFyc2VfY29udGV4dF9nZXRfbWlzc2luZ19lbGVtZW50cyAoY3R4KTsKKyAgZmFpbF91bmxlc3MgKGFyciAhPSBOVUxMLCAiZXhwZWN0ZWQgbWlzc2luZyBlbGVtZW50cyIpOworICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChhcnJbMF0sICJib2d1c2VuYyIpOworICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChhcnJbMV0sICJnb29tdXgiKTsKKyAgZmFpbF91bmxlc3MgKGFyclsyXSA9PSBOVUxMKTsKKyAgZ19zdHJmcmVldiAoYXJyKTsKKyAgZ3N0X3BhcnNlX2NvbnRleHRfZnJlZSAoY3R4KTsKKyAgZ19lcnJvcl9mcmVlIChlcnIpOworICBlcnIgPSBOVUxMOworCisgIC8qIG11bHRpcGxlIG1pc3NpbmcgZWxlbWVudHMsIGRpZmZlcmVudCBsaW5rIHBhdHRlcm4gKi8KKyAgY3R4ID0gZ3N0X3BhcnNlX2NvbnRleHRfbmV3ICgpOworICBlbGVtZW50ID0gZ3N0X3BhcnNlX2xhdW5jaF9mdWxsICgiZmFrZXNyYyAhIGJvZ3VzZW5jICEgbXV4LnNpbmsgIgorICAgICAgImJsYWhzcmMgISBnb29tdXggbmFtZT1tdXggISBmYWtlc2luayAgIGZha2VzcmMgISBnb29zaW5rIiwgY3R4LAorICAgICAgR1NUX1BBUlNFX0ZMQUdfRkFUQUxfRVJST1JTLCAmZXJyKTsKKyAgZmFpbF91bmxlc3MgKGVyciAhPSBOVUxMLCAiZXhwZWN0ZWQgZXJyb3IiKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZXJyLT5jb2RlLCBHU1RfUEFSU0VfRVJST1JfTk9fU1VDSF9FTEVNRU5UKTsKKyAgZmFpbF91bmxlc3MgKGVsZW1lbnQgPT0gTlVMTCwgImV4cGVjdGVkIE5VTEwgcmV0dXJuIHdpdGggRkFUQUxfRVJST1JTIik7CisgIGFyciA9IGdzdF9wYXJzZV9jb250ZXh0X2dldF9taXNzaW5nX2VsZW1lbnRzIChjdHgpOworICBmYWlsX3VubGVzcyAoYXJyICE9IE5VTEwsICJleHBlY3RlZCBtaXNzaW5nIGVsZW1lbnRzIik7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGFyclswXSwgImJvZ3VzZW5jIik7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGFyclsxXSwgImJsYWhzcmMiKTsKKyAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoYXJyWzJdLCAiZ29vbXV4Iik7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGFyclszXSwgImdvb3NpbmsiKTsKKyAgZmFpbF91bmxlc3MgKGFycls0XSA9PSBOVUxMKTsKKyAgZ19zdHJmcmVldiAoYXJyKTsKKyAgZ3N0X3BhcnNlX2NvbnRleHRfZnJlZSAoY3R4KTsKKyAgZ19lcnJvcl9mcmVlIChlcnIpOworICBlcnIgPSBOVUxMOworfQorCitHU1RfRU5EX1RFU1Q7CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X2ZsYWdzKQoreworICBHc3RFbGVtZW50ICplbGVtZW50OworICBHRXJyb3IgKmVyciA9IE5VTEw7CisKKyAgLyogYXZvaWQgbWlzbGVhZGluZyAnbm8gc3VjaCBlbGVtZW50JyBlcnJvciBkZWJ1ZyBtZXNzYWdlcyB3aGVuIHVzaW5nIGN2cyAqLworICBpZiAoIWdfZ2V0ZW52ICgiR1NUX0RFQlVHIikpCisgICAgZ3N0X2RlYnVnX3NldF9kZWZhdWx0X3RocmVzaG9sZCAoR1NUX0xFVkVMX05PTkUpOworCisgIC8qIGRlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIHJldHVybiBhbnkgYWxyZWFkeSBjb25zdHJ1Y3RlZCBiaW5zL2VsZW1lbnRzICovCisgIGVsZW1lbnQgPSBnc3RfcGFyc2VfbGF1bmNoX2Z1bGwgKCJmYWtlc3JjICEgY29mZmVlc2luayIsIE5VTEwsIDAsICZlcnIpOworICBmYWlsX3VubGVzcyAoZXJyICE9IE5VTEwsICJleHBlY3RlZCBlcnJvciIpOworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChlcnItPmNvZGUsIEdTVF9QQVJTRV9FUlJPUl9OT19TVUNIX0VMRU1FTlQpOworICBmYWlsX3VubGVzcyAoZWxlbWVudCAhPSBOVUxMLCAiZXhwZWN0ZWQgcGFydGlhbCBwaXBlbGluZS9lbGVtZW50Iik7CisgIGdfZXJyb3JfZnJlZSAoZXJyKTsKKyAgZXJyID0gTlVMTDsKKyAgZ3N0X29iamVjdF91bnJlZiAoZWxlbWVudCk7CisKKyAgLyogdGVzdCBHU1RfUEFSU0VfRkxBR19GQVRBTF9FUlJPUlMgKi8KKyAgZWxlbWVudCA9IGdzdF9wYXJzZV9sYXVuY2hfZnVsbCAoImZha2VzcmMgISBjb2ZmZWVzaW5rIiwgTlVMTCwKKyAgICAgIEdTVF9QQVJTRV9GTEFHX0ZBVEFMX0VSUk9SUywgJmVycik7CisgIGZhaWxfdW5sZXNzIChlcnIgIT0gTlVMTCwgImV4cGVjdGVkIGVycm9yIik7CisgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGVyci0+Y29kZSwgR1NUX1BBUlNFX0VSUk9SX05PX1NVQ0hfRUxFTUVOVCk7CisgIGZhaWxfdW5sZXNzIChlbGVtZW50ID09IE5VTEwsICJleHBlY3RlZCBOVUxMIHJldHVybiB3aXRoIEZBVEFMX0VSUk9SUyIpOworICBnX2Vycm9yX2ZyZWUgKGVycik7CisgIGVyciA9IE5VTEw7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGFyc2luZykKK3sKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmU7CisKKyAgLyogbWFrZSBzdXJlIHdlIGRvbid0IHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHN0cmluZyAqLworICBwaXBlbGluZSA9IGdzdF9wYXJzZV9sYXVuY2hfZnVsbCAoImZpbGVzcmMgbG9jYXRpb249eFxcIiwgTlVMTCwgMCwgTlVMTCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgU3VpdGUgKgorcGFyc2Vfc3VpdGUgKHZvaWQpCit7CisgIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiUGFyc2UgTGF1bmNoIHN5bnRheCIpOworICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJwYXJzZWxhdW5jaCIpOworCisgIC8qIHRpbWUgb3V0IGFmdGVyIDIwcywgbm90IHRoZSBkZWZhdWx0IDMgKi8KKyAgdGNhc2Vfc2V0X3RpbWVvdXQgKHRjX2NoYWluLCAyMCk7CisKKyAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9sYXVuY2hfbGluZXMpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbGF1bmNoX2xpbmVzMik7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgZXhwZWN0ZWRfdG9fZmFpbF9waXBlcyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgbGVha2luZ19mYWlsX3BpcGVzKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBkZWxheWVkX2xpbmspOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZmxhZ3MpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWlzc2luZ19lbGVtZW50cyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYXJzaW5nKTsKKyAgcmV0dXJuIHM7Cit9CisKK0dTVF9DSEVDS19NQUlOIChwYXJzZSk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9waXBlbGluZXMvcXVldWUtZXJyb3IuYyBiL3Rlc3RzL2NoZWNrL3BpcGVsaW5lcy9xdWV1ZS1lcnJvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYzQzYTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVjay9waXBlbGluZXMvcXVldWUtZXJyb3IuYwpAQCAtMCwwICsxLDExMiBAQAorLyogR1N0cmVhbWVyIHVuaXQgdGVzdCBmb3IgcXVldWUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBjZW50cmljdWxhciBuZXQ+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWFyayBOYXV3ZWxhZXJ0cyAgPG1uYXV3IHVzZXJzIHNvdXJjZWZvcmdlIG5ldD4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+CisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKK3N0YXRpYyBHc3RQcm9iZVJldHVybgorbW9kaWZ5X2NhcHMgKEdzdE9iamVjdCAqIHBhZCwgR3N0UHJvYmVUeXBlIHR5cGUsIEdzdEV2ZW50ICogZXZlbnQsCisgICAgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgR3N0RWxlbWVudCAqZmlsdGVyID0gR1NUX0VMRU1FTlQgKGRhdGEpOworICBHc3RDYXBzICpjYXBzOworCisgIGZhaWxfdW5sZXNzIChldmVudCAhPSBOVUxMKTsKKyAgZmFpbF91bmxlc3MgKEdTVF9JU19FVkVOVCAoZXZlbnQpKTsKKworICBpZiAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSAhPSBHU1RfRVZFTlRfRU9TKQorICAgIHJldHVybiBHU1RfUFJPQkVfT0s7CisKKyAgLyogdHJpZ2dlciBjYXBzIG5lZ290aWF0aW9uIGVycm9yICovCisgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1yYXctcmdiIiwgTlVMTCk7CisgIGdfb2JqZWN0X3NldCAoZmlsdGVyLCAiY2FwcyIsIGNhcHMsIE5VTEwpOworICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7CisKKyAgcmV0dXJuIEdTVF9QUk9CRV9PSzsKK30KKworR1NUX1NUQVJUX1RFU1QgKHRlc3RfcXVldWUpCit7CisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHN0YXRlX3JldDsKKyAgR3N0TWVzc2FnZSAqbXNnOworICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKmZpbHRlciwgKnF1ZXVlOworICBHc3RCdXMgKmJ1czsKKyAgR3N0UGFkICpwYWQ7CisgIGd1aW50IHByb2JlOworICBnY2hhciAqcGlwZV9kZXNjID0KKyAgICAgIGdfc3RyZHVwX3ByaW50ZiAoImZha2VzcmMgbnVtLWJ1ZmZlcnM9MSAhIHZpZGVvL3gtcmF3LXl1diAhICIKKyAgICAgICJxdWV1ZSBtaW4tdGhyZXNob2xkLWJ1ZmZlcnM9MiBuYW1lPXF1ZXVlICEgIgorICAgICAgImNhcHNmaWx0ZXIgbmFtZT1uYXN0eSAhIGZha2VzaW5rIik7CisKKyAgcGlwZWxpbmUgPSBnc3RfcGFyc2VfbGF1bmNoIChwaXBlX2Rlc2MsIE5VTEwpOworICBmYWlsX3VubGVzcyAocGlwZWxpbmUgIT0gTlVMTCk7CisgIGdfZnJlZSAocGlwZV9kZXNjKTsKKworICBmaWx0ZXIgPSBnc3RfYmluX2dldF9ieV9uYW1lIChHU1RfQklOIChwaXBlbGluZSksICJuYXN0eSIpOworICBmYWlsX3VubGVzcyAoZmlsdGVyICE9IE5VTEwpOworCisgIC8qIHF1ZXVlIHdhaXRzIGZvciBhbGwgZGF0YSBhbmQgRU9TIHRvIGFycml2ZSAqLworICAvKiB0aGVuIHByb2JlIGZvcmNlcyBkb3duc3RyZWFtIGVsZW1lbnQgdG8gcmV0dXJuIG5lZ290aWF0aW9uIGVycm9yICovCisgIHF1ZXVlID0gZ3N0X2Jpbl9nZXRfYnlfbmFtZSAoR1NUX0JJTiAocGlwZWxpbmUpLCAicXVldWUiKTsKKyAgZmFpbF91bmxlc3MgKHF1ZXVlICE9IE5VTEwpOworICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAocXVldWUsICJzaW5rIik7CisgIGZhaWxfdW5sZXNzIChwYWQgIT0gTlVMTCk7CisgIHByb2JlID0KKyAgICAgIGdzdF9wYWRfYWRkX3Byb2JlIChwYWQsIEdTVF9QUk9CRV9UWVBFX0VWRU5ULAorICAgICAgKEdzdFBhZFByb2JlQ2FsbGJhY2spIG1vZGlmeV9jYXBzLCBmaWx0ZXIsIE5VTEwpOworCisgIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGVsaW5lKTsKKworICBzdGF0ZV9yZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7CisgIGZhaWxfdW5sZXNzIChzdGF0ZV9yZXQgIT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKKworICBtc2cgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfRVJST1IgfCBHU1RfTUVTU0FHRV9FT1MsIDUgKiBHU1RfU0VDT05EKTsKKyAgZmFpbF91bmxlc3MgKG1zZyAhPSBOVUxMLCAidGltZW91dCB3YWl0aW5nIGZvciBlcnJvciBvciBlb3MgbWVzc2FnZSIpOzsKKworICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKKworICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCksCisgICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOworCisgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChwYWQsIHByb2JlKTsKKyAgZ3N0X29iamVjdF91bnJlZiAocXVldWUpOworICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOworICBnc3Rfb2JqZWN0X3VucmVmIChmaWx0ZXIpOworICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworc3RhdGljIFN1aXRlICoKK3F1ZXVlX3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoInF1ZXVlIik7CisgIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKKworICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKKyAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3F1ZXVlKTsKKworICByZXR1cm4gczsKK30KKworR1NUX0NIRUNLX01BSU4gKHF1ZXVlKQpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYyBiL3Rlc3RzL2NoZWNrL3BpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ4NWI3YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL3BpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmMKQEAgLTAsMCArMSwzNDIgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKyAqCisgKiBzaW1wbGVfbGF1bmNoX2xpbmVzLmM6IFVuaXQgdGVzdCBmb3Igc2ltcGxlIHBpcGVsaW5lcworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgorCisKK3N0YXRpYyBHc3RFbGVtZW50ICoKK3NldHVwX3BpcGVsaW5lIChjb25zdCBnY2hhciAqIHBpcGVfZGVzY3IpCit7CisgIEdzdEVsZW1lbnQgKnBpcGVsaW5lOworCisgIHBpcGVsaW5lID0gZ3N0X3BhcnNlX2xhdW5jaCAocGlwZV9kZXNjciwgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChHU1RfSVNfUElQRUxJTkUgKHBpcGVsaW5lKSk7CisgIHJldHVybiBwaXBlbGluZTsKK30KKworLyoKKyAqIHJ1bl9waXBlbGluZToKKyAqIEBwaXBlOiB0aGUgcGlwZWxpbmUgdG8gcnVuCisgKiBAZGVzYzogdGhlIGRlc2NyaXB0aW9uIGZvciB1c2UgaW4gbWVzc2FnZXMKKyAqIEBtZXNzYWdlX3R5cGVzOiBpcyBhIG1hc2sgb2YgZXhwZWN0ZWQgbWVzc2FnZV90eXBlcworICogQHRtZXNzYWdlOiBpcyB0aGUgZXhwZWN0ZWQgdGVybWluYWwgbWVzc2FnZQorICoKKyAqIHRoZSBwb2xsIGNhbGwgd2lsbCB0aW1lIG91dCBhZnRlciBoYWxmIGEgc2Vjb25kLgorICovCitzdGF0aWMgdm9pZAorcnVuX3BpcGVsaW5lIChHc3RFbGVtZW50ICogcGlwZWxpbmUsIGNvbnN0IGdjaGFyICogZGVzY3IsCisgICAgR3N0TWVzc2FnZVR5cGUgbWVzc2FnZV90eXBlcywgR3N0TWVzc2FnZVR5cGUgdG1lc3NhZ2UpCit7CisgIEdzdEJ1cyAqYnVzOworICBHc3RNZXNzYWdlVHlwZSBybWVzc2FnZTsKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OworCisgIGZhaWxfaWYgKHBpcGVsaW5lID09IE5VTEwpOworICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChwaXBlbGluZSk7CisgIGZhaWxfaWYgKGJ1cyA9PSBOVUxMKTsKKworICBHU1RfREVCVUcgKCJydW5uaW5nIHBpcGVsaW5lICVzIiwgZGVzY3IpOworCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgTlVMTCwgTlVMTCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisKKyAgaWYgKHJldCAhPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpIHsKKyAgICBHU1RfV0FSTklORyAoImhhdmUgZmFpbGVkIHN0YXRlIGNoYW5nZSAlZCIsIHJldCk7CisgICAgZ19jcml0aWNhbCAoIkNvdWxkbid0IHNldCBwaXBlbGluZSB0byBQTEFZSU5HIik7CisgICAgZ290byBkb25lOworICB9CisKKyAgd2hpbGUgKDEpIHsKKyAgICBHc3RNZXNzYWdlICptZXNzYWdlID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0FOWSwgR1NUX1NFQ09ORCAvIDIpOworCisgICAgaWYgKG1lc3NhZ2UpIHsKKyAgICAgIHJtZXNzYWdlID0gR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSk7CisgICAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJtZXNzYWdlID0gR1NUX01FU1NBR0VfVU5LTk9XTjsKKyAgICB9CisKKyAgICBpZiAocm1lc3NhZ2UgPT0gdG1lc3NhZ2UpIHsKKyAgICAgIGJyZWFrOworICAgIH0gZWxzZSBpZiAocm1lc3NhZ2UgPT0gR1NUX01FU1NBR0VfVU5LTk9XTikgeworICAgICAgZ19jcml0aWNhbCAoIlVuZXhwZWN0ZWQgdGltZW91dCBpbiBnc3RfYnVzX3BvbGwsIGxvb2tpbmcgZm9yICVkOiAlcyIsCisgICAgICAgICAgdG1lc3NhZ2UsIGRlc2NyKTsKKyAgICAgIGJyZWFrOworICAgIH0gZWxzZSBpZiAocm1lc3NhZ2UgJiBtZXNzYWdlX3R5cGVzKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgZ19jcml0aWNhbAorICAgICAgICAoIlVuZXhwZWN0ZWQgbWVzc2FnZSByZWNlaXZlZCBvZiB0eXBlICVkLCAnJXMnLCBsb29raW5nIGZvciAlZDogJXMiLAorICAgICAgICBybWVzc2FnZSwgZ3N0X21lc3NhZ2VfdHlwZV9nZXRfbmFtZSAocm1lc3NhZ2UpLCB0bWVzc2FnZSwgZGVzY3IpOworICB9CisKK2RvbmU6CisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKKyAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOworICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOworfQorCitHU1RfU1RBUlRfVEVTVCAodGVzdF8yX2VsZW1lbnRzKQoreworICBjb25zdCBnY2hhciAqczsKKworICBzID0gImZha2VzcmMgY2FuLWFjdGl2YXRlLXB1c2g9ZmFsc2UgISBmYWtlc2luayBjYW4tYWN0aXZhdGUtcHVsbD10cnVlIjsKKyAgcnVuX3BpcGVsaW5lIChzZXR1cF9waXBlbGluZSAocyksIHMsCisgICAgICBHU1RfTUVTU0FHRV9ORVdfQ0xPQ0sgfCBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEIHwKKyAgICAgIEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFUVVMgfCBHU1RfTUVTU0FHRV9BU1lOQ19ET05FLCBHU1RfTUVTU0FHRV9VTktOT1dOKTsKKworICBzID0gImZha2VzcmMgY2FuLWFjdGl2YXRlLXB1c2g9dHJ1ZSAhIGZha2VzaW5rIGNhbi1hY3RpdmF0ZS1wdWxsPWZhbHNlIjsKKyAgcnVuX3BpcGVsaW5lIChzZXR1cF9waXBlbGluZSAocyksIHMsCisgICAgICBHU1RfTUVTU0FHRV9ORVdfQ0xPQ0sgfCBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEIHwKKyAgICAgIEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFUVVMgfCBHU1RfTUVTU0FHRV9BU1lOQ19ET05FLCBHU1RfTUVTU0FHRV9VTktOT1dOKTsKKworICBzID0gImZha2VzcmMgY2FuLWFjdGl2YXRlLXB1c2g9ZmFsc2UgbnVtLWJ1ZmZlcnM9MTAgISBmYWtlc2luayBjYW4tYWN0aXZhdGUtcHVsbD10cnVlIjsKKyAgcnVuX3BpcGVsaW5lIChzZXR1cF9waXBlbGluZSAocyksIHMsCisgICAgICBHU1RfTUVTU0FHRV9ORVdfQ0xPQ0sgfCBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEIHwKKyAgICAgIEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFUVVMgfCBHU1RfTUVTU0FHRV9BU1lOQ19ET05FLCBHU1RfTUVTU0FHRV9FT1MpOworCisgIHMgPSAiZmFrZXNyYyBjYW4tYWN0aXZhdGUtcHVzaD10cnVlIG51bS1idWZmZXJzPTEwICEgZmFrZXNpbmsgY2FuLWFjdGl2YXRlLXB1bGw9ZmFsc2UiOworICBydW5fcGlwZWxpbmUgKHNldHVwX3BpcGVsaW5lIChzKSwgcywKKyAgICAgIEdTVF9NRVNTQUdFX05FV19DTE9DSyB8IEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQgfAorICAgICAgR1NUX01FU1NBR0VfU1RSRUFNX1NUQVRVUyB8IEdTVF9NRVNTQUdFX0FTWU5DX0RPTkUsIEdTVF9NRVNTQUdFX0VPUyk7CisKKyAgcyA9ICJmYWtlc3JjIGNhbi1hY3RpdmF0ZS1wdXNoPWZhbHNlICEgZmFrZXNpbmsgY2FuLWFjdGl2YXRlLXB1bGw9ZmFsc2UiOworICBBU1NFUlRfQ1JJVElDQUwgKHJ1bl9waXBlbGluZSAoc2V0dXBfcGlwZWxpbmUgKHMpLCBzLAorICAgICAgICAgIEdTVF9NRVNTQUdFX05FV19DTE9DSyB8IEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQgfAorICAgICAgICAgIEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFUVVMgfCBHU1RfTUVTU0FHRV9BU1lOQ19ET05FLAorICAgICAgICAgIEdTVF9NRVNTQUdFX1VOS05PV04pKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgdm9pZAorY2hlY2tfc3RhdGVfY2hhbmdlX3JldHVybiAoR3N0RWxlbWVudCAqIHBpcGVsaW5lLCBHc3RTdGF0ZSBzdGF0ZSwKKyAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiBpbW1lZGlhdGUsIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGZpbmFsKQoreworICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7CisKKyAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgc3RhdGUpOworICBpZiAocmV0ICE9IGltbWVkaWF0ZSkKKyAgICBnX2NyaXRpY2FsICgiVW5leHBlY3RlZCBzZXRfc3RhdGUgcmV0dXJuIC0+JXM6ICVkICE9ICVkIiwKKyAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKHN0YXRlKSwgcmV0LCBpbW1lZGlhdGUpOworICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKyAgaWYgKHJldCAhPSBmaW5hbCkKKyAgICBnX2NyaXRpY2FsICgiVW5leHBlY3RlZCBnZXRfc3RhdGUgcmV0dXJuIC0+JXM6ICVkICE9ICVkIiwKKyAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKHN0YXRlKSwgcmV0LCBmaW5hbCk7Cit9CisKKworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3RhdGVfY2hhbmdlX3JldHVybnMpCit7CisgIGNvbnN0IGdjaGFyICpzOworICBHc3RFbGVtZW50ICpwaXBlbGluZTsKKworICBzID0gImZha2VzcmMgY2FuLWFjdGl2YXRlLXB1bGw9ZmFsc2UgISBmYWtlc2luayI7CisgIHBpcGVsaW5lID0gZ3N0X3BhcnNlX2xhdW5jaCAocywgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChHU1RfSVNfUElQRUxJTkUgKHBpcGVsaW5lKSk7CisgIGNoZWNrX3N0YXRlX2NoYW5nZV9yZXR1cm4gKHBpcGVsaW5lLCBHU1RfU1RBVEVfUkVBRFksCisgICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7CisgIGNoZWNrX3N0YXRlX2NoYW5nZV9yZXR1cm4gKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VELCBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DLAorICAgICAgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKKyAgY2hlY2tfc3RhdGVfY2hhbmdlX3JldHVybiAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HLAorICAgICAgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOworICAvKiBjYW4ndCBjaGVjayBQQVVTRUQsIGl0J3Mgbm90IGRldGVybWluaXN0aWMgKi8KKyAgY2hlY2tfc3RhdGVfY2hhbmdlX3JldHVybiAocGlwZWxpbmUsIEdTVF9TVEFURV9SRUFEWSwKKyAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKKyAgY2hlY2tfc3RhdGVfY2hhbmdlX3JldHVybiAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMLCBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCisgICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOworICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7CisKKyAgcyA9ICJmYWtlc3JjIGNhbi1hY3RpdmF0ZS1wdXNoPWZhbHNlICEgZmFrZXNpbmsgY2FuLWFjdGl2YXRlLXB1bGw9dHJ1ZSI7CisgIHBpcGVsaW5lID0gZ3N0X3BhcnNlX2xhdW5jaCAocywgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChHU1RfSVNfUElQRUxJTkUgKHBpcGVsaW5lKSk7CisgIGNoZWNrX3N0YXRlX2NoYW5nZV9yZXR1cm4gKHBpcGVsaW5lLCBHU1RfU1RBVEVfUkVBRFksCisgICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7CisgIGNoZWNrX3N0YXRlX2NoYW5nZV9yZXR1cm4gKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VELAorICAgICAgR1NUX1NUQVRFX0NIQU5HRV9BU1lOQywgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKKyAgY2hlY2tfc3RhdGVfY2hhbmdlX3JldHVybiAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HLAorICAgICAgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOworICAvKiBjYW4ndCBjaGVjayBQQVVTRUQsIGl0J3Mgbm90IGRldGVybWluaXN0aWMgKi8KKyAgY2hlY2tfc3RhdGVfY2hhbmdlX3JldHVybiAocGlwZWxpbmUsIEdTVF9TVEFURV9SRUFEWSwKKyAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKKyAgY2hlY2tfc3RhdGVfY2hhbmdlX3JldHVybiAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMLCBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCisgICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOworICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR19HTlVDX1VOVVNFRAorR1NUX1NUQVJUX1RFU1QgKHRlc3RfdGVlKQoreworICBjb25zdCBnY2hhciAqczsKKworICBzID0gImZha2VzcmMgY2FuLWFjdGl2YXRlLXB1c2g9dHJ1ZSAhIHRlZSAhIGZha2VzaW5rIGNhbi1hY3RpdmF0ZS1wdXNoPXRydWUiOworICBydW5fcGlwZWxpbmUgKHNldHVwX3BpcGVsaW5lIChzKSwgcywKKyAgICAgIEdTVF9NRVNTQUdFX05FV19DTE9DSyB8IEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQsIEdTVF9NRVNTQUdFX1VOS05PV04pOworCisgIHMgPSAiZmFrZXNyYyBjYW4tYWN0aXZhdGUtcHVzaD10cnVlIG51bS1idWZmZXJzPTEwICEgdGVlICEgZmFrZXNpbmsgY2FuLWFjdGl2YXRlLXB1c2g9dHJ1ZSI7CisgIHJ1bl9waXBlbGluZSAoc2V0dXBfcGlwZWxpbmUgKHMpLCBzLAorICAgICAgR1NUX01FU1NBR0VfTkVXX0NMT0NLIHwgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCwgR1NUX01FU1NBR0VfRU9TKTsKKworICBzID0gImZha2VzcmMgY2FuLWFjdGl2YXRlLXB1c2g9ZmFsc2UgY2FuLWFjdGl2YXRlLXB1bGw9dHJ1ZSAhIHRlZSAhIGZha2VzaW5rIGNhbi1hY3RpdmF0ZS1wdWxsPXRydWUiOworICBBU1NFUlRfQ1JJVElDQUwgKHJ1bl9waXBlbGluZSAoc2V0dXBfcGlwZWxpbmUgKHMpLCBzLAorICAgICAgICAgIEdTVF9NRVNTQUdFX05FV19DTE9DSyB8IEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQsCisgICAgICAgICAgR1NUX01FU1NBR0VfVU5LTk9XTikpOworCisgIHMgPSAiZmFrZXNyYyBjYW4tYWN0aXZhdGUtcHVzaD1mYWxzZSBjYW4tYWN0aXZhdGUtcHVsbD10cnVlICIKKyAgICAgICIhIHRlZSBwdWxsLW1vZGU9c2luZ2xlICEgZmFrZXNpbmsgY2FuLWFjdGl2YXRlLXB1bGw9dHJ1ZSI7CisgIHJ1bl9waXBlbGluZSAoc2V0dXBfcGlwZWxpbmUgKHMpLCBzLAorICAgICAgR1NUX01FU1NBR0VfTkVXX0NMT0NLIHwgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCwgR1NUX01FU1NBR0VfVU5LTk9XTik7CisKKyAgcyA9ICJmYWtlc3JjIGNhbi1hY3RpdmF0ZS1wdXNoPWZhbHNlIGNhbi1hY3RpdmF0ZS1wdWxsPXRydWUgbnVtLWJ1ZmZlcnM9MTAgIgorICAgICAgIiEgdGVlIHB1bGwtbW9kZT1zaW5nbGUgISBmYWtlc2luayBjYW4tYWN0aXZhdGUtcHVsbD10cnVlIjsKKyAgcnVuX3BpcGVsaW5lIChzZXR1cF9waXBlbGluZSAocyksIHMsCisgICAgICBHU1RfTUVTU0FHRV9ORVdfQ0xPQ0sgfCBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VELCBHU1RfTUVTU0FHRV9FT1MpOworCisgIHMgPSAiZmFrZXNyYyBjYW4tYWN0aXZhdGUtcHVzaD1mYWxzZSBjYW4tYWN0aXZhdGUtcHVsbD10cnVlICIKKyAgICAgICIhIHRlZSBuYW1lPXQgcHVsbC1tb2RlPXNpbmdsZSAhIGZha2VzaW5rIGNhbi1hY3RpdmF0ZS1wdWxsPXRydWUgIgorICAgICAgInQuICEgcXVldWUgISBmYWtlc2luayBjYW4tYWN0aXZhdGUtcHVsbD10cnVlIGNhbi1hY3RpdmF0ZS1wdXNoPWZhbHNlIjsKKyAgQVNTRVJUX0NSSVRJQ0FMIChydW5fcGlwZWxpbmUgKHNldHVwX3BpcGVsaW5lIChzKSwgcywKKyAgICAgICAgICBHU1RfTUVTU0FHRV9ORVdfQ0xPQ0sgfCBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VELAorICAgICAgICAgIEdTVF9NRVNTQUdFX1VOS05PV04pKTsKKworICBzID0gImZha2VzcmMgY2FuLWFjdGl2YXRlLXB1c2g9ZmFsc2UgY2FuLWFjdGl2YXRlLXB1bGw9dHJ1ZSAiCisgICAgICAiISB0ZWUgbmFtZT10IHB1bGwtbW9kZT1zaW5nbGUgISBmYWtlc2luayBjYW4tYWN0aXZhdGUtcHVsbD10cnVlICIKKyAgICAgICJ0LiAhIHF1ZXVlICEgZmFrZXNpbmsiOworICBydW5fcGlwZWxpbmUgKHNldHVwX3BpcGVsaW5lIChzKSwgcywKKyAgICAgIEdTVF9NRVNTQUdFX05FV19DTE9DSyB8IEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQsIEdTVF9NRVNTQUdFX1VOS05PV04pOworCisgIHMgPSAiZmFrZXNyYyBjYW4tYWN0aXZhdGUtcHVzaD1mYWxzZSBjYW4tYWN0aXZhdGUtcHVsbD10cnVlIG51bS1idWZmZXJzPTEwICIKKyAgICAgICIhIHRlZSBuYW1lPXQgcHVsbC1tb2RlPXNpbmdsZSAhIGZha2VzaW5rIGNhbi1hY3RpdmF0ZS1wdWxsPXRydWUgIgorICAgICAgInQuICEgcXVldWUgISBmYWtlc2luayI7CisgIHJ1bl9waXBlbGluZSAoc2V0dXBfcGlwZWxpbmUgKHMpLCBzLAorICAgICAgR1NUX01FU1NBR0VfTkVXX0NMT0NLIHwgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCwgR1NUX01FU1NBR0VfRU9TKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgdm9pZAorZ290X2hhbmRvZmYgKEdzdEVsZW1lbnQgKiBzaW5rLCBHc3RCdWZmZXIgKiBidWYsIEdzdFBhZCAqIHBhZCwgZ3BvaW50ZXIgdW51c2VkKQoreworICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UKKyAgICAgIChzaW5rLCBnc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRpb24gKE5VTEwsIGdzdF9zdHJ1Y3R1cmVfbmV3ICgiZm9vIiwKKyAgICAgICAgICAgICAgTlVMTCkpKTsKK30KKworc3RhdGljIHZvaWQKK2Fzc2VydF9saXZlX2NvdW50IChHVHlwZSB0eXBlLCBnaW50IGxpdmUpCit7CisgIEdzdEFsbG9jVHJhY2UgKnRyYWNlOworICBjb25zdCBnY2hhciAqbmFtZTsKKworICBpZiAoZ3N0X2FsbG9jX3RyYWNlX2F2YWlsYWJsZSAoKSkgeworICAgIG5hbWUgPSBnX3R5cGVfbmFtZSAodHlwZSk7CisgICAgZmFpbF9pZiAobmFtZSA9PSBOVUxMKTsKKyAgICB0cmFjZSA9IGdzdF9hbGxvY190cmFjZV9nZXQgKG5hbWUpOworICAgIGlmICh0cmFjZSkgeworICAgICAgZ19yZXR1cm5faWZfZmFpbCAodHJhY2UtPmxpdmUgPT0gbGl2ZSk7CisgICAgfQorICB9IGVsc2UgeworICAgIGdfcHJpbnQgKCJcblNraXBwaW5nIGxpdmUgY291bnQgdGVzdHM7IHJlY29tcGlsZSB3aXRoIHRyYWNlcyB0byBlbmFibGVcbiIpOworICB9Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3N0b3BfZnJvbV9hcHApCit7CisgIEdzdEVsZW1lbnQgKmZha2VzcmMsICpmYWtlc2luaywgKnBpcGVsaW5lOworICBHc3RCdXMgKmJ1czsKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OworICBHc3RNZXNzYWdlVHlwZSBybWVzc2FnZTsKKyAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKKworICBhc3NlcnRfbGl2ZV9jb3VudCAoR1NUX1RZUEVfQlVGRkVSLCAwKTsKKworICBmYWtlc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOworICBmYWtlc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7CisgIHBpcGVsaW5lID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicGlwZWxpbmUiLCBOVUxMKTsKKworICBmYWlsX3VubGVzcyAoZmFrZXNyYyAmJiBmYWtlc2luayAmJiBwaXBlbGluZSk7CisKKyAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBmYWtlc3JjLCBmYWtlc2luaywgTlVMTCk7CisgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rIChmYWtlc3JjLCBmYWtlc2luaykgIT0gRkFMU0UpOworCisgIGdfb2JqZWN0X3NldCAoZmFrZXNpbmssICJzaWduYWwtaGFuZG9mZnMiLCAoZ2Jvb2xlYW4pIFRSVUUsIE5VTEwpOworICBnX3NpZ25hbF9jb25uZWN0IChmYWtlc2luaywgImhhbmRvZmYiLCBHX0NBTExCQUNLIChnb3RfaGFuZG9mZiksIE5VTEwpOworCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpOworICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLCA1ICogR1NUX1NFQ09ORCk7CisgIHN3aXRjaCAocmV0KSB7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU6CisgICAgICBnX2Vycm9yICgiRmFpbGVkIHRvIGNoYW5nZSBzdGF0ZSB0byBQQVVTRUQiKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9BU1lOQzoKKyAgICAgIGdfZXJyb3IgKCJGYWlsZWQgdG8gY2hhbmdlIHN0YXRlIHRvIFBBVVNFRCB3aXRoaW4gNSBzZWNvbmRzIik7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7CisKKyAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAocGlwZWxpbmUpOworICBmYWlsX2lmIChidXMgPT0gTlVMTCk7CisKKyAgLyogd2lsbCB0aW1lIG91dCBhZnRlciBoYWxmIGEgc2Vjb25kICovCisgIG1lc3NhZ2UgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfQVBQTElDQVRJT04sIEdTVF9TRUNPTkQgLyAyKTsKKyAgaWYgKG1lc3NhZ2UpIHsKKyAgICBybWVzc2FnZSA9IEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpOworICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKKyAgfSBlbHNlIHsKKyAgICBybWVzc2FnZSA9IEdTVF9NRVNTQUdFX1VOS05PV047CisgIH0KKyAgZmFpbF91bmxlc3MgKHJtZXNzYWdlID09IEdTVF9NRVNTQUdFX0FQUExJQ0FUSU9OLAorICAgICAgInBvbGxlZCBtZXNzYWdlIGlzIG5vdCBBUFBMSUNBVElPTiBidXQgJXMiLAorICAgICAgZ3N0X21lc3NhZ2VfdHlwZV9nZXRfbmFtZSAocm1lc3NhZ2UpKTsKKworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKKworICBhc3NlcnRfbGl2ZV9jb3VudCAoR1NUX1RZUEVfQlVGRkVSLCAwKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgU3VpdGUgKgorc2ltcGxlX2xhdW5jaF9saW5lc19zdWl0ZSAodm9pZCkKK3sKKyAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJQaXBlbGluZXMiKTsKKyAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgibGluZWFyIik7CisKKyAgLyogdGltZSBvdXQgYWZ0ZXIgMjBzLCBub3QgdGhlIGRlZmF1bHQgMyAqLworICB0Y2FzZV9zZXRfdGltZW91dCAodGNfY2hhaW4sIDApOworCisgIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfMl9lbGVtZW50cyk7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdGF0ZV9jaGFuZ2VfcmV0dXJucyk7CisgIC8qIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF90ZWUpOyBGSVhNRSAqLworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc3RvcF9mcm9tX2FwcCk7CisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoc2ltcGxlX2xhdW5jaF9saW5lcyk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9waXBlbGluZXMvc3RyZXNzLmMgYi90ZXN0cy9jaGVjay9waXBlbGluZXMvc3RyZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc3NjYzMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2NoZWNrL3BpcGVsaW5lcy9zdHJlc3MuYwpAQCAtMCwwICsxLDEzMiBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgorCitzdGF0aWMgaW50IHBsYXlpbmcgPSAxOworc3RhdGljIGludCBxdWl0ID0gMDsKKworc3RhdGljIGdib29sZWFuCitjaGFuZ2Vfc3RhdGVfdGltZW91dCAoZ3BvaW50ZXIgZGF0YSkKK3sKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmUgPSAoR3N0RWxlbWVudCAqKSBkYXRhOworCisgIGlmIChxdWl0KQorICAgIHJldHVybiBGQUxTRTsKKworICBpZiAocGxheWluZykgeworICAgIHBsYXlpbmcgPSAwOworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKKyAgfSBlbHNlIHsKKyAgICBwbGF5aW5nID0gMTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7CisgIH0KKworICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuCitxdWl0X3RpbWVvdXQgKGdwb2ludGVyIGRhdGEpCit7CisgIHF1aXQgPSAxOworICByZXR1cm4gRkFMU0U7Cit9CisKK0dTVF9TVEFSVF9URVNUICh0ZXN0X3N0cmVzc19wcmVyb2xsKQoreworICBHc3RFbGVtZW50ICpmYWtlc3JjLCAqZmFrZXNpbms7CisgIEdzdEVsZW1lbnQgKnBpcGVsaW5lOworCisgIGZha2VzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCk7CisgIGZha2VzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKKyAgcGlwZWxpbmUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJwaXBlbGluZSIsIE5VTEwpOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKGZha2VzcmMgJiYgZmFrZXNpbmsgJiYgcGlwZWxpbmUpOworCisgIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgZmFrZXNyYywgZmFrZXNpbmssIE5VTEwpOworICBnc3RfZWxlbWVudF9saW5rIChmYWtlc3JjLCBmYWtlc2luayk7CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOworCisgIGdfdGltZW91dF9hZGQgKDUwMCwgJmNoYW5nZV9zdGF0ZV90aW1lb3V0LCBwaXBlbGluZSk7CisgIGdfdGltZW91dF9hZGQgKDEwMDAwLCAmcXVpdF90aW1lb3V0LCBOVUxMKTsKKworICB3aGlsZSAoIXF1aXQpIHsKKyAgICBnX21haW5fY29udGV4dF9pdGVyYXRpb24gKE5VTEwsIFRSVUUpOworICB9CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOworICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Cit9CisKK0dTVF9FTkRfVEVTVDsKKworR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3RyZXNzKQoreworICBHc3RFbGVtZW50ICpmYWtlc3JjLCAqZmFrZXNpbmssICpwaXBlbGluZTsKKyAgZ2ludCBpOworCisgIGZha2VzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCk7CisgIGZha2VzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKKyAgcGlwZWxpbmUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJwaXBlbGluZSIsIE5VTEwpOworCisgIGdfcmV0dXJuX2lmX2ZhaWwgKGZha2VzcmMgJiYgZmFrZXNpbmsgJiYgcGlwZWxpbmUpOworCisgIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgZmFrZXNyYywgZmFrZXNpbmssIE5VTEwpOworICBnc3RfZWxlbWVudF9saW5rIChmYWtlc3JjLCBmYWtlc2luayk7CisKKyAgaSA9IDEwMDsKKyAgd2hpbGUgKGktLSkgeworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpOworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKKworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpOworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUkVBRFkpOworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUkVBRFkpOworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpOworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKKyAgfQorCisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKK30KKworR1NUX0VORF9URVNUOworCitzdGF0aWMgU3VpdGUgKgorc3RyZXNzX3N1aXRlICh2b2lkKQoreworICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoInN0cmVzcyIpOworICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJsaW5lYXIiKTsKKworICAvKiBDb21wbGV0ZWx5IGRpc2FibGUgdGltZW91dCBmb3IgdGhpcyB0ZXN0ICovCisgIHRjYXNlX3NldF90aW1lb3V0ICh0Y19jaGFpbiwgMCk7CisKKyAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7CisgIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdHJlc3MpOworICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc3RyZXNzX3ByZXJvbGwpOworCisgIHJldHVybiBzOworfQorCitHU1RfQ0hFQ0tfTUFJTiAoc3RyZXNzKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL01ha2VmaWxlLmFtIGIvdGVzdHMvZXhhbXBsZXMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRlMDU5YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2V4YW1wbGVzL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNDcgQEAKK2lmIEdTVF9ESVNBQkxFX1BBUlNFCitHU1RfUEFSU0VfRElSUyA9IAorZWxzZQorR1NUX1BBUlNFX0RJUlMgPSBsYXVuY2gKK2VuZGlmCisKKyMgYWRhcHRlciB0ZXN0IG5lZWRzIHN5cy90aW1lcy5oIGFuZCB1bmlzdGQuaAoraWYgSEFWRV9TWVNfVElNRVNfSF9BTkRfVU5JU1REX0gKKyAgQURBUFRFUl9URVNUX0RJUiA9IGFkYXB0ZXIKK2Vsc2UKKyAgQURBUFRFUl9URVNUX0RJUiA9CitlbmRpZgorCithbHdheXNfZGlycyA9IFwKKwljb250cm9sbGVyIFwKKwloZWxsb3dvcmxkIFwKKwltYW51YWwgICAgIFwKKwltZXRhZGF0YSAgIFwKKwlxdWV1ZSAgICAgIFwKKwlzdGVwcGluZyBcCisJc3RyZWFtcyBcCisJdHlwZWZpbmQKKworI2FwcHJlYWRlcgorI2N1dHRlcgorI2V2ZW50cworI2hlbGxvd29ybGQyCisjbGF1bmNoCisjbWFudWFsCisjbWl4ZXIKKyNwaW5ncG9uZworI3BsdWdpbnMKKyNwd2cKKyNxdWV1ZTIKKyNxdWV1ZTMKKyNxdWV1ZTQKKyNyZXRhZworI3RocmVhZAorCitTVUJESVJTID0gCQkJCVwKKwkkKGFsd2F5c19kaXJzKQkJCVwKKwkkKEFEQVBURVJfVEVTVF9ESVIpCQlcCisJJChHU1RfUEFSU0VfRElSUykKKworRElTVF9TVUJESVJTID0gJChhbHdheXNfZGlycykgYWRhcHRlciBsYXVuY2gKKworaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9wYXJhbGxlbC1zdWJkaXJzLm1hawpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvTWFrZWZpbGUuaW4gYi90ZXN0cy9leGFtcGxlcy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjg4NTdhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZXhhbXBsZXMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw3OTAgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMgaW5jbHVkZSB0aGlzIGF0IHRoZSBlbmQgb2YgJE1PRFVMRS9leHQvTWFrZWZpbGUuYW0gdG8gZm9yY2UgbWFrZSB0bworIyBidWlsZCBzdWJkaXJlY3RvcmllcyBpbiBwYXJhbGxlbCB3aGVuIG1ha2UgLWpOIGlzIHVzZWQuIFdlIHdpbGwgZW5kIHVwCisjIGRlc2NlbmRpbmcgaW50byBhbGwgc3ViZGlyZWN0b3JpZXMgYSBzZWNvbmQgdGltZSwgYnV0IG9ubHkgYWZ0ZXIgdGhlIGZpcnN0CisjIChwYXJhbGxlbCkgcnVuIGhhcyBmaW5pc2hlZCwgc28gaXQgc2hvdWxkIGdvIHJpZ2h0IHRocm91Z2ggdGhlIHNlY29uZCB0aW1lLgorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluIFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9wYXJhbGxlbC1zdWJkaXJzLm1haworc3ViZGlyID0gdGVzdHMvZXhhbXBsZXMKK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1weXRob24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXNjcnViLWluY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorQU1fVl9HRU4gPSAkKGFtX192X0dFTl8kKFYpKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworQU1fVl9hdCA9ICQoYW1fX3ZfYXRfJChWKSkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9hdF8wID0gQAorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorUkVDVVJTSVZFX1RBUkdFVFMgPSBhbGwtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIFwKKwlodG1sLXJlY3Vyc2l2ZSBpbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWR2aS1yZWN1cnNpdmUgaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZSBpbnN0YWxsLWluZm8tcmVjdXJzaXZlIFwKKwlpbnN0YWxsLXBkZi1yZWN1cnNpdmUgaW5zdGFsbC1wcy1yZWN1cnNpdmUgaW5zdGFsbC1yZWN1cnNpdmUgXAorCWluc3RhbGxjaGVjay1yZWN1cnNpdmUgaW5zdGFsbGRpcnMtcmVjdXJzaXZlIHBkZi1yZWN1cnNpdmUgXAorCXBzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtcmVjdXJzaXZlCitSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyA9IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBjbGVhbi1yZWN1cnNpdmUJXAorICBkaXN0Y2xlYW4tcmVjdXJzaXZlIG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCitBTV9SRUNVUlNJVkVfVEFSR0VUUyA9ICQoUkVDVVJTSVZFX1RBUkdFVFM6LXJlY3Vyc2l2ZT0pIFwKKwkkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTOi1yZWN1cnNpdmU9KSB0YWdzIFRBR1MgY3RhZ3MgQ1RBR1MgXAorCWRpc3RkaXIKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCithbV9fcmVsYXRpdml6ZSA9IFwKKyAgZGlyMD1gcHdkYDsgXAorICBzZWRfZmlyc3Q9J3MsXlwoW14vXSpcKS8uKiQkLFwxLCc7IFwKKyAgc2VkX3Jlc3Q9J3MsXlteL10qLyosLCc7IFwKKyAgc2VkX2xhc3Q9J3MsXi4qL1woW14vXSpcKSQkLFwxLCc7IFwKKyAgc2VkX2J1dGxhc3Q9J3MsLypbXi9dKiQkLCwnOyBcCisgIHdoaWxlIHRlc3QgLW4gIiQkZGlyMSI7IGRvIFwKKyAgICBmaXJzdD1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAorICAgIGlmIHRlc3QgIiQkZmlyc3QiICE9ICIuIjsgdGhlbiBcCisgICAgICBpZiB0ZXN0ICIkJGZpcnN0IiA9ICIuLiI7IHRoZW4gXAorICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9sYXN0ImAvIiQkZGlyMiI7IFwKKyAgICAgICAgZGlyMD1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfYnV0bGFzdCJgOyBcCisgICAgICBlbHNlIFwKKyAgICAgICAgZmlyc3QyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCisgICAgICAgIGlmIHRlc3QgIiQkZmlyc3QyIiA9ICIkJGZpcnN0IjsgdGhlbiBcCisgICAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCisgICAgICAgIGVsc2UgXAorICAgICAgICAgIGRpcjI9Ii4uLyQkZGlyMiI7IFwKKyAgICAgICAgZmk7IFwKKyAgICAgICAgZGlyMD0iJCRkaXIwIi8iJCRmaXJzdCI7IFwKKyAgICAgIGZpOyBcCisgICAgZmk7IFwKKyAgICBkaXIxPWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKKyAgZG9uZTsgXAorICByZWxkaXI9IiQkZGlyMiIKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBUyA9IEBBU0AKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAorQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAorQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKK0NDID0gQENDQAorQ0NBUyA9IEBDQ0FTQAorQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACitDQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDSEVDS19NQUpPUl9WRVJTSU9OID0gQENIRUNLX01BSk9SX1ZFUlNJT05ACitDSEVDS19NSUNST19WRVJTSU9OID0gQENIRUNLX01JQ1JPX1ZFUlNJT05ACitDSEVDS19NSU5PUl9WRVJTSU9OID0gQENIRUNLX01JTk9SX1ZFUlNJT05ACitDSEVDS19WRVJTSU9OID0gQENIRUNLX1ZFUlNJT05ACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEFESVIgPSBAREFUQURJUkAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRU5BQkxFX1NVQlVOSVQgPSBARU5BQkxFX1NVQlVOSVRACitFUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZGTEFHUyA9IEBGRkxBR1NACitGR1JFUCA9IEBGR1JFUEAKK0ZMRVhfUEFUSCA9IEBGTEVYX1BBVEhACitHQ09WID0gQEdDT1ZACitHQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKK0dDT1ZfTElCUyA9IEBHQ09WX0xJQlNACitHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAorR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKK0dMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAorR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKK0dMSUJfT05MWV9DRkxBR1MgPSBAR0xJQl9PTkxZX0NGTEFHU0AKK0dMSUJfT05MWV9MSUJTID0gQEdMSUJfT05MWV9MSUJTQAorR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACitHTElCX1JFUSA9IEBHTElCX1JFUUAKK0dNUF9MSUJTID0gQEdNUF9MSUJTQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHUkVQID0gQEdSRVBACitHU0xfTElCUyA9IEBHU0xfTElCU0AKK0dTVF9BR0UgPSBAR1NUX0FHRUAKK0dTVF9BTExfQ0ZMQUdTID0gQEdTVF9BTExfQ0ZMQUdTQAorR1NUX0FMTF9DWFhGTEFHUyA9IEBHU1RfQUxMX0NYWEZMQUdTQAorR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKK0dTVF9BTExfTElCUyA9IEBHU1RfQUxMX0xJQlNACitHU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKK0dTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9ERUZJTkVACitHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkVACitHU1RfRElTQUJMRV9ORVRfREVGSU5FID0gQEdTVF9ESVNBQkxFX05FVF9ERUZJTkVACitHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAorR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKK0dTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKK0dTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACitHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfVFJBQ0VfREVGSU5FQAorR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAorR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAorR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTU19ERUZJTkUgPSBAR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTU19ERUZJTkVACitHU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKK0dTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAorR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKK0dTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAorR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACitHU1RfTUFKT1JNSU5PUiA9IEBHU1RfTUFKT1JNSU5PUkAKK0dTVF9PQkpfQ0ZMQUdTID0gQEdTVF9PQkpfQ0ZMQUdTQAorR1NUX09CSl9DWFhGTEFHUyA9IEBHU1RfT0JKX0NYWEZMQUdTQAorR1NUX09CSl9MSUJTID0gQEdTVF9PQkpfTElCU0AKK0dTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAorR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAorR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAorR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKK0dTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKK0dTVF9QS0dfREVQUyA9IEBHU1RfUEtHX0RFUFNACitHU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAorR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAorR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1BPSU5URVJfRk9STUFUX0RFRklORUAKK0dTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORSA9IEBHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkVACitHU1RfUkVHSVNUUllfRE9DX1RZUEVTID0gQEdTVF9SRUdJU1RSWV9ET0NfVFlQRVNACitHU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAorR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FID0gQEdTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OX0RFRklORUAKK0dUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACitIQVZFX0RPQ0JPT0sySFRNTCA9IEBIQVZFX0RPQ0JPT0sySFRNTEAKK0hBVkVfRE9DQk9PSzJQUyA9IEBIQVZFX0RPQ0JPT0syUFNACitIQVZFX0RWSVBTID0gQEhBVkVfRFZJUFNACitIQVZFX0VQU1RPUERGID0gQEhBVkVfRVBTVE9QREZACitIQVZFX0ZJRzJERVYgPSBASEFWRV9GSUcyREVWQAorSEFWRV9HTVAgPSBASEFWRV9HTVBACitIQVZFX0dTTCA9IEBIQVZFX0dTTEAKK0hBVkVfSkFERVRFWCA9IEBIQVZFX0pBREVURVhACitIQVZFX1BOR1RPUE5NID0gQEhBVkVfUE5HVE9QTk1ACitIQVZFX1BOTVRPUFMgPSBASEFWRV9QTk1UT1BTQAorSEFWRV9QUzJQREYgPSBASEFWRV9QUzJQREZACitIQVZFX1hNTExJTlQgPSBASEFWRV9YTUxMSU5UQAorSE9TVF9DUFUgPSBASE9TVF9DUFVACitIVE1MX0RJUiA9IEBIVE1MX0RJUkAKK0lORVRfQVRPTl9MSUJTID0gQElORVRfQVRPTl9MSUJTQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAorSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAorSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAorSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACitJTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAorSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAorSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkRJUiA9IEBMSUJESVJACitMSUJJQ09OViA9IEBMSUJJQ09OVkAKK0xJQklOVEwgPSBATElCSU5UTEAKK0xJQk0gPSBATElCTUAKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xPQ0FMRURJUiA9IEBMT0NBTEVESVJACitMVExJQklDT05WID0gQExUTElCSUNPTlZACitMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BSU5UID0gQE1BSU5UQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAorUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKK1BBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACitQQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKK1BBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMX1BBVEggPSBAUEVSTF9QQVRIQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUExVR0lORElSID0gQFBMVUdJTkRJUkAKK1BPU1VCID0gQFBPU1VCQAorUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACitQWVRIT04gPSBAUFlUSE9OQAorUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKK1BZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACitQWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACitQWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKK1ZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKK1ZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1dBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAorV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAorWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKK1hTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK2x0X0VDSE8gPSBAbHRfRUNIT0AKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKK3BrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACitwbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKK3B5dGhvbmRpciA9IEBweXRob25kaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK0BHU1RfRElTQUJMRV9QQVJTRV9GQUxTRUBHU1RfUEFSU0VfRElSUyA9IGxhdW5jaAorQEdTVF9ESVNBQkxFX1BBUlNFX1RSVUVAR1NUX1BBUlNFX0RJUlMgPSAKK0BIQVZFX1NZU19USU1FU19IX0FORF9VTklTVERfSF9GQUxTRUBBREFQVEVSX1RFU1RfRElSID0gCisKKyMgYWRhcHRlciB0ZXN0IG5lZWRzIHN5cy90aW1lcy5oIGFuZCB1bmlzdGQuaAorQEhBVkVfU1lTX1RJTUVTX0hfQU5EX1VOSVNURF9IX1RSVUVAQURBUFRFUl9URVNUX0RJUiA9IGFkYXB0ZXIKK2Fsd2F5c19kaXJzID0gXAorCWNvbnRyb2xsZXIgXAorCWhlbGxvd29ybGQgXAorCW1hbnVhbCAgICAgXAorCW1ldGFkYXRhICAgXAorCXF1ZXVlICAgICAgXAorCXN0ZXBwaW5nIFwKKwlzdHJlYW1zIFwKKwl0eXBlZmluZAorCisKKyNhcHByZWFkZXIKKyNjdXR0ZXIKKyNldmVudHMKKyNoZWxsb3dvcmxkMgorI2xhdW5jaAorI21hbnVhbAorI21peGVyCisjcGluZ3BvbmcKKyNwbHVnaW5zCisjcHdnCisjcXVldWUyCisjcXVldWUzCisjcXVldWU0CisjcmV0YWcKKyN0aHJlYWQKK1NVQkRJUlMgPSBcCisJJChhbHdheXNfZGlycykJCQlcCisJJChBREFQVEVSX1RFU1RfRElSKQkJXAorCSQoR1NUX1BBUlNFX0RJUlMpCisKK0RJU1RfU1VCRElSUyA9ICQoYWx3YXlzX2RpcnMpIGFkYXB0ZXIgbGF1bmNoCithbGw6IGFsbC1yZWN1cnNpdmUKKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9wYXJhbGxlbC1zdWJkaXJzLm1hayAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKKyMgaW50byB0aGVtIGFuZCBydW4gYG1ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgorIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiBgbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAorIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiBgY29uZmlnLnN0YXR1cycsIGVkaXQgYGNvbmZpZy5zdGF0dXMnCisjICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biBgbWFrZScpOworIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgYG1ha2UnIGNvbW1hbmQgbGluZS4KKyQoUkVDVVJTSVZFX1RBUkdFVFMpOgorCUBmYWlsPSBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgZG90X3NlZW49eWVzOyBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmU7IFwKKwlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKKwlmaTsgdGVzdCAteiAiJCRmYWlsIgorCiskKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKToKKwlAZmFpbD0gZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKwkgIGNhc2UgJCRmIGluIFwKKwkgICAgKj0qIHwgLS1bIWtdKik7OyBcCisJICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCWNhc2UgIiRAIiBpbiBcCisJICBkaXN0Y2xlYW4tKiB8IG1haW50YWluZXItY2xlYW4tKikgbGlzdD0nJChESVNUX1NVQkRJUlMpJyA7OyBcCisJICAqKSBsaXN0PSckKFNVQkRJUlMpJyA7OyBcCisJZXNhYzsgXAorCXJldj0nJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgcmV2PSIkJHN1YmRpciAkJHJldiI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCXJldj0iJCRyZXYgLiI7IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJZm9yIHN1YmRpciBpbiAkJHJldjsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZSAmJiB0ZXN0IC16ICIkJGZhaWwiCit0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAorCWRvbmUKK2N0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjdGFncyk7IFwKKwlkb25lCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PS47IFwKKwllbHNlIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PTsgXAorCWZpOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCisJICAgICAgc2V0ICIkJEAiICIkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiBjdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCAkKE1LRElSX1ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJQGxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKGRpc3RkaXIpLyQkc3ViZGlyIjsgXAorCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAorCSAgICBuZXdfZGlzdGRpcj0kJHJlbGRpcjsgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKHRvcF9kaXN0ZGlyKSI7IFwKKwkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKKwkgICAgbmV3X3RvcF9kaXN0ZGlyPSQkcmVsZGlyOyBcCisJICAgIGVjaG8gIiAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcXCI7IFwKKwkgICAgZWNobyAiICAgICBhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBhbV9fc2tpcF9tb2RlX2ZpeD06IGRpc3RkaXIpIjsgXAorCSAgICAoJChhbV9fY2QpICQkc3ViZGlyICYmIFwKKwkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCisJICAgICAgICB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIFwKKwkgICAgICAgIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFwKKwkJYW1fX3JlbW92ZV9kaXN0ZGlyPTogXAorCQlhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBcCisJCWFtX19za2lwX21vZGVfZml4PTogXAorCSAgICAgICAgZGlzdGRpcikgXAorCSAgICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stcmVjdXJzaXZlCithbGwtYW06IE1ha2VmaWxlCitpbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtcmVjdXJzaXZlCitpbnN0YWxsZGlycy1hbToKK2luc3RhbGw6IGluc3RhbGwtcmVjdXJzaXZlCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQordW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1yZWN1cnNpdmUKKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktcmVjdXJzaXZlCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1yZWN1cnNpdmUKKworaHRtbC1hbToKKworaW5mbzogaW5mby1yZWN1cnNpdmUKKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktcmVjdXJzaXZlCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtcmVjdXJzaXZlCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLXJlY3Vyc2l2ZQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1yZWN1cnNpdmUKKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1yZWN1cnNpdmUKKworcGRmLWFtOgorCitwczogcHMtcmVjdXJzaXZlCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBjdGFncy1yZWN1cnNpdmUgXAorCWluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcCB0YWdzLXJlY3Vyc2l2ZQorCisuUEhPTlk6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIFwKKwlhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisJY3RhZ3MgY3RhZ3MtcmVjdXJzaXZlIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAorCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAorCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAorCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCisJaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKKwlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBpbnN0YWxsZGlycy1hbSBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1yZWN1cnNpdmUgXAorCXVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworCisuUEhPTlk6IGluZGVwZW5kZW50LXN1YmRpcnMgJChTVUJESVJTKQorCitpbmRlcGVuZGVudC1zdWJkaXJzOiAkKFNVQkRJUlMpCisKKyQoU1VCRElSUyk6CisJJChNQUtFKSAtQyAkQAorCithbGwtcmVjdXJzaXZlOiBpbmRlcGVuZGVudC1zdWJkaXJzCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL2FkYXB0ZXIvTWFrZWZpbGUuYW0gYi90ZXN0cy9leGFtcGxlcy9hZGFwdGVyL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNGE0ZjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9leGFtcGxlcy9hZGFwdGVyL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNCBAQAorbm9pbnN0X1BST0dSQU1TID0gYWRhcHRlcl90ZXN0CisKK2FkYXB0ZXJfdGVzdF9MREFERCA9ICQoR1NUX09CSl9MSUJTKSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEKK2FkYXB0ZXJfdGVzdF9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvYWRhcHRlci9NYWtlZmlsZS5pbiBiL3Rlc3RzL2V4YW1wbGVzL2FkYXB0ZXIvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIwYWE2YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2V4YW1wbGVzL2FkYXB0ZXIvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2ODggQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK25vaW5zdF9QUk9HUkFNUyA9IGFkYXB0ZXJfdGVzdCQoRVhFRVhUKQorc3ViZGlyID0gdGVzdHMvZXhhbXBsZXMvYWRhcHRlcgorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtcHl0aG9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1zY3J1Yi1pbmNsdWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZnVuY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYXJzZXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2ludHJvc3BlY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jaGVjay1jaGVja3MubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ljb252Lm00ICQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00ICQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L25scy5tNCAkKHRvcF9zcmNkaXIpL200L3BvLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK1BST0dSQU1TID0gJChub2luc3RfUFJPR1JBTVMpCithZGFwdGVyX3Rlc3RfU09VUkNFUyA9IGFkYXB0ZXJfdGVzdC5jCithZGFwdGVyX3Rlc3RfT0JKRUNUUyA9IGFkYXB0ZXJfdGVzdC1hZGFwdGVyX3Rlc3QuJChPQkpFWFQpCithbV9fREVQRU5ERU5DSUVTXzEgPQorYWRhcHRlcl90ZXN0X0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhCitBTV9WX2x0ID0gJChhbV9fdl9sdF8kKFYpKQorYW1fX3ZfbHRfID0gJChhbV9fdl9sdF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X2x0XzAgPSAtLXNpbGVudAorYWRhcHRlcl90ZXN0X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKGFkYXB0ZXJfdGVzdF9DRkxBR1MpIFwKKwkkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCisJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfJChWKSkKK2FtX192X0NDXyA9ICQoYW1fX3ZfQ0NfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgIiAkQDsKK0FNX1ZfYXQgPSAkKGFtX192X2F0XyQoVikpCithbV9fdl9hdF8gPSAkKGFtX192X2F0XyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfYXRfMCA9IEAKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEXyQoVikpCithbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICIgJEA7CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOXyQoVikpCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitTT1VSQ0VTID0gYWRhcHRlcl90ZXN0LmMKK0RJU1RfU09VUkNFUyA9IGFkYXB0ZXJfdGVzdC5jCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKK0NDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKK0NIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKK0NIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKK0NIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUiA9IEBEQVRBRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAorRExMVE9PTCA9IEBETExUT09MQAorRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKK0VSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACitFWEVFWFQgPSBARVhFRVhUQAorRkZMQUdTID0gQEZGTEFHU0AKK0ZHUkVQID0gQEZHUkVQQAorRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKK0dDT1YgPSBAR0NPVkAKK0dDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAorR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACitHTElCX0xJQlMgPSBAR0xJQl9MSUJTQAorR0xJQl9PTkxZX0NGTEFHUyA9IEBHTElCX09OTFlfQ0ZMQUdTQAorR0xJQl9PTkxZX0xJQlMgPSBAR0xJQl9PTkxZX0xJQlNACitHTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKK0dMSUJfUkVRID0gQEdMSUJfUkVRQAorR01QX0xJQlMgPSBAR01QX0xJQlNACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dSRVAgPSBAR1JFUEAKK0dTTF9MSUJTID0gQEdTTF9MSUJTQAorR1NUX0FHRSA9IEBHU1RfQUdFQAorR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACitHU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACitHU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAorR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKK0dTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAorR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORUAKK0dTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKK0dTVF9ESVNBQkxFX05FVF9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfTkVUX0RFRklORUAKK0dTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACitHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAorR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAorR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKK0dTVF9ESVNBQkxFX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkVACitHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACitHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACitHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORSA9IEBHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORUAKK0dTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAorR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACitHU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAorR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACitHU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKK0dTVF9NQUpPUk1JTk9SID0gQEdTVF9NQUpPUk1JTk9SQAorR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACitHU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACitHU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAorR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACitHU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACitHU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACitHU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAorR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAorR1NUX1BLR19ERVBTID0gQEdTVF9QS0dfREVQU0AKK0dTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACitHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FQAorR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORUAKK0dTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKK0dTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACitHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkUgPSBAR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FQAorR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKK0hBVkVfRE9DQk9PSzJIVE1MID0gQEhBVkVfRE9DQk9PSzJIVE1MQAorSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKK0hBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKK0hBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKK0hBVkVfRklHMkRFViA9IEBIQVZFX0ZJRzJERVZACitIQVZFX0dNUCA9IEBIQVZFX0dNUEAKK0hBVkVfR1NMID0gQEhBVkVfR1NMQAorSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKK0hBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKK0hBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACitIQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKK0hBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACitIT1NUX0NQVSA9IEBIT1NUX0NQVUAKK0hUTUxfRElSID0gQEhUTUxfRElSQAorSU5FVF9BVE9OX0xJQlMgPSBASU5FVF9BVE9OX0xJQlNACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCRElSID0gQExJQkRJUkAKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCTSA9IEBMSUJNQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTE9DQUxFRElSID0gQExPQ0FMRURJUkAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACitQQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAorUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKK1BBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAorUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BFUkxfUEFUSCA9IEBQRVJMX1BBVEhACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQTFVHSU5ESVIgPSBAUExVR0lORElSQAorUE9TVUIgPSBAUE9TVUJACitQUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAorVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAorVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACitXSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACitYTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKK1hTTFRQUk9DID0gQFhTTFRQUk9DQAorWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3BsdWdpbmRpciA9IEBwbHVnaW5kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorYWRhcHRlcl90ZXN0X0xEQUREID0gJChHU1RfT0JKX0xJQlMpICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYQorYWRhcHRlcl90ZXN0X0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy9hZGFwdGVyL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251IHRlc3RzL2V4YW1wbGVzL2FkYXB0ZXIvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisKK2NsZWFuLW5vaW5zdFBST0dSQU1TOgorCUBsaXN0PSckKG5vaW5zdF9QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCisJdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKKwlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QKK2FkYXB0ZXJfdGVzdCQoRVhFRVhUKTogJChhZGFwdGVyX3Rlc3RfT0JKRUNUUykgJChhZGFwdGVyX3Rlc3RfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgYWRhcHRlcl90ZXN0JChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChhZGFwdGVyX3Rlc3RfTElOSykgJChhZGFwdGVyX3Rlc3RfT0JKRUNUUykgJChhZGFwdGVyX3Rlc3RfTERBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2FkYXB0ZXJfdGVzdC1hZGFwdGVyX3Rlc3QuUG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworYWRhcHRlcl90ZXN0LWFkYXB0ZXJfdGVzdC5vOiBhZGFwdGVyX3Rlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFkYXB0ZXJfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYWRhcHRlcl90ZXN0LWFkYXB0ZXJfdGVzdC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9hZGFwdGVyX3Rlc3QtYWRhcHRlcl90ZXN0LlRwbyAtYyAtbyBhZGFwdGVyX3Rlc3QtYWRhcHRlcl90ZXN0Lm8gYHRlc3QgLWYgJ2FkYXB0ZXJfdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhZGFwdGVyX3Rlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWRhcHRlcl90ZXN0LWFkYXB0ZXJfdGVzdC5UcG8gJChERVBESVIpL2FkYXB0ZXJfdGVzdC1hZGFwdGVyX3Rlc3QuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdhZGFwdGVyX3Rlc3QuYycgb2JqZWN0PSdhZGFwdGVyX3Rlc3QtYWRhcHRlcl90ZXN0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFkYXB0ZXJfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhZGFwdGVyX3Rlc3QtYWRhcHRlcl90ZXN0Lm8gYHRlc3QgLWYgJ2FkYXB0ZXJfdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhZGFwdGVyX3Rlc3QuYworCithZGFwdGVyX3Rlc3QtYWRhcHRlcl90ZXN0Lm9iajogYWRhcHRlcl90ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhZGFwdGVyX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGFkYXB0ZXJfdGVzdC1hZGFwdGVyX3Rlc3Qub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9hZGFwdGVyX3Rlc3QtYWRhcHRlcl90ZXN0LlRwbyAtYyAtbyBhZGFwdGVyX3Rlc3QtYWRhcHRlcl90ZXN0Lm9iaiBgaWYgdGVzdCAtZiAnYWRhcHRlcl90ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYWRhcHRlcl90ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2FkYXB0ZXJfdGVzdC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hZGFwdGVyX3Rlc3QtYWRhcHRlcl90ZXN0LlRwbyAkKERFUERJUikvYWRhcHRlcl90ZXN0LWFkYXB0ZXJfdGVzdC5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2FkYXB0ZXJfdGVzdC5jJyBvYmplY3Q9J2FkYXB0ZXJfdGVzdC1hZGFwdGVyX3Rlc3Qub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhZGFwdGVyX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYWRhcHRlcl90ZXN0LWFkYXB0ZXJfdGVzdC5vYmogYGlmIHRlc3QgLWYgJ2FkYXB0ZXJfdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2FkYXB0ZXJfdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9hZGFwdGVyX3Rlc3QuYyc7IGZpYAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIGN0YWdzIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKKwlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL2FkYXB0ZXIvYWRhcHRlcl90ZXN0LmMgYi90ZXN0cy9leGFtcGxlcy9hZGFwdGVyL2FkYXB0ZXJfdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYjViNGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9leGFtcGxlcy9hZGFwdGVyL2FkYXB0ZXJfdGVzdC5jCkBAIC0wLDAgKzEsMTM5IEBACisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3RpbWVzLmg+CisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgorCitzdHJ1Y3QgVGVzdFBhcmFtcworeworICBnaW50IHRvdF9zaXplOworICBnaW50IHJlYWRfc2l6ZTsKKyAgZ2ludCB3cml0ZV9zaXplOworfTsKKworLyogVGhpcyB0ZXN0IHB1c2hlcyAnbicgYnVmZmVycyBvZiAnd3JpdGUgc2l6ZScgaW50byBhbiBhZGFwdGVyLCB0aGVuIHJlYWRzCisgKiB0aGVtIG91dCBpbiAncmVhZCBzaXplJyBzaXplZCBwaWVjZXMsIHVzaW5nIHRha2UgYW5kIHRoZW4gdGFrZV9idWZmZXIsIAorICogYW5kIHByaW50cyB0aGUgdGltaW5ncyAqLworCitzdGF0aWMgc3RydWN0IFRlc3RQYXJhbXMgcGFyYW1fc2V0c1tdID0geworLyogVGhlc2UgdmFsdWVzIHB1dCB+MjU2TUIgaW4gMU1CIGNodW5rcyBpbiBhbiBhZGFwdGVyLCB0aGVuIHJlYWRzIHRoZW0gb3V0CisgKiBpbiAyNTBrYiBibG9ja3MgKi8KKyAgezI1NjAwMDAwMCwgMjUwMDAwLCAxMDAwMDAwfSwKKy8qIFRoZXNlIHZhbHVlcyBwdXQgfjI1Nk1CIGluIDEwMDAgYnl0ZSBjaHVua3MgaW4gYW4gYWRhcHRlciwgdGhlbiByZWFkcyB0aGVtIAorICogb3V0IGluIDIwMCBieXRlIGJsb2NrcyAqLworICB7MjU2MDAwMDAsIDIwMCwgMTAwMH0sCisvKiBUaGVzZSB2YWx1ZXMgcHV0IH4yNTZNQiBpbiAyMDAgY2h1bmtzIGluIGFuIGFkYXB0ZXIsIHRoZW4gcmVhZHMgdGhlbSBvdXQKKyAqIGluIDEwMDAgYnl0ZSBibG9ja3MgKi8KKyAgezI1NjAwMDAwLCAxMDAwLCAyMDB9Cit9OworCitzdGF0aWMgY29uc3QgZ2ludCBuX3Rlc3RzID0gc2l6ZW9mIChwYXJhbV9zZXRzKSAvIHNpemVvZiAoc3RydWN0IFRlc3RQYXJhbXMpOworCitzdGF0aWMgZ2ludCB0aWNrc19wZXJfc2VjOworCitzdGF0aWMgdm9pZAorcnVuX3Rlc3RfdGFrZSAoc3RydWN0IFRlc3RQYXJhbXMgKnBhcmFtcykKK3sKKyAgLyogQ3JlYXRlIGFuIGFkYXB0ZXIgYW5kIGZlZWQgaXQgZGF0YSBvZiBmaXhlZCBzaXplLCB0aGVuIHJldHJpZXZlIGl0IGluIAorICAgKiBhIGRpZmZlcmVudCBzaXplICovCisgIEdzdEFkYXB0ZXIgKmFkYXB0ZXIgPSBnc3RfYWRhcHRlcl9uZXcgKCk7CisgIGd1aW50OCAqZGF0YTsKKyAgR3N0QnVmZmVyICpidWY7CisgIGludCBpOworICBnaW50IG50aW1lcyA9IHBhcmFtcy0+dG90X3NpemUgLyBwYXJhbXMtPndyaXRlX3NpemU7CisKKyAgZm9yIChpID0gMDsgaSA8IG50aW1lczsgaSsrKSB7CisgICAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChwYXJhbXMtPndyaXRlX3NpemUpOworCisgICAgZGF0YSA9IGdzdF9idWZmZXJfbWFwIChidWYsIE5VTEwsIE5VTEwsIEdTVF9NQVBfV1JJVEUpOworICAgIG1lbXNldCAoZGF0YSwgMCwgcGFyYW1zLT53cml0ZV9zaXplKTsKKyAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsIGRhdGEsIHBhcmFtcy0+d3JpdGVfc2l6ZSk7CisKKyAgICBnc3RfYWRhcHRlcl9wdXNoIChhZGFwdGVyLCBidWYpOworICB9CisKKyAgZG8geworICAgIGRhdGEgPSBnc3RfYWRhcHRlcl90YWtlIChhZGFwdGVyLCBwYXJhbXMtPnJlYWRfc2l6ZSk7CisgICAgaWYgKGRhdGEgPT0gTlVMTCkKKyAgICAgIGJyZWFrOworICAgIGdfZnJlZSAoZGF0YSk7CisgIH0gd2hpbGUgKFRSVUUpOworCisgIGdfb2JqZWN0X3VucmVmIChhZGFwdGVyKTsKK30KKworc3RhdGljIHZvaWQKK3J1bl90ZXN0X3Rha2VfYnVmZmVyIChzdHJ1Y3QgVGVzdFBhcmFtcyAqcGFyYW1zKQoreworICAvKiBDcmVhdGUgYW4gYWRhcHRlciBhbmQgZmVlZCBpdCBkYXRhIG9mIGZpeGVkIHNpemUsIHRoZW4gcmV0cmlldmUgaXQgaW4gCisgICAqIGEgZGlmZmVyZW50IHNpemUKKyAgICovCisgIEdzdEFkYXB0ZXIgKmFkYXB0ZXIgPSBnc3RfYWRhcHRlcl9uZXcgKCk7CisgIEdzdEJ1ZmZlciAqYnVmOworICBpbnQgaTsKKyAgZ2ludCBudGltZXMgPSBwYXJhbXMtPnRvdF9zaXplIC8gcGFyYW1zLT53cml0ZV9zaXplOworICBndWludDggKmRhdGE7CisKKyAgZm9yIChpID0gMDsgaSA8IG50aW1lczsgaSsrKSB7CisgICAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChwYXJhbXMtPndyaXRlX3NpemUpOworCisgICAgZGF0YSA9IGdzdF9idWZmZXJfbWFwIChidWYsIE5VTEwsIE5VTEwsIEdTVF9NQVBfV1JJVEUpOworICAgIG1lbXNldCAoZGF0YSwgMCwgcGFyYW1zLT53cml0ZV9zaXplKTsKKyAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsIGRhdGEsIHBhcmFtcy0+d3JpdGVfc2l6ZSk7CisKKyAgICBnc3RfYWRhcHRlcl9wdXNoIChhZGFwdGVyLCBidWYpOworICB9CisKKyAgZG8geworICAgIGJ1ZiA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChhZGFwdGVyLCBwYXJhbXMtPnJlYWRfc2l6ZSk7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKQorICAgICAgYnJlYWs7CisgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKKyAgfSB3aGlsZSAoVFJVRSk7CisKKyAgZ19vYmplY3RfdW5yZWYgKGFkYXB0ZXIpOworfQorCitzdGF0aWMgdm9pZAorcnVuX3Rlc3RzIChzdHJ1Y3QgVGVzdFBhcmFtcyAqcGFyYW1zKQoreworICBzdHJ1Y3QgdG1zIHRpbWVfZGF0YTsKKyAgZ2RvdWJsZSBzdGFydDsKKyAgZ2RvdWJsZSBkdXI7CisKKyAgZ19wcmludCAoIlJ1bm5pbmcgb24gJWQgYnl0ZXMsIHdyaXRpbmcgJWQgYnl0ZXMvYnVmLCByZWFkaW5nICVkIGJ5dGVzL2J1ZlxuIiwKKyAgICAgIHBhcmFtcy0+dG90X3NpemUsIHBhcmFtcy0+d3JpdGVfc2l6ZSwgcGFyYW1zLT5yZWFkX3NpemUpOworCisgIHN0YXJ0ID0gMC4wOworICBydW5fdGVzdF90YWtlIChwYXJhbXMpOworCisgIHRpbWVzICgmdGltZV9kYXRhKTsKKyAgZHVyID0gKGdkb3VibGUpICh0aW1lX2RhdGEudG1zX3V0aW1lICsgdGltZV9kYXRhLnRtc19zdGltZSkgLyB0aWNrc19wZXJfc2VjOworICBnX3ByaW50ICgiVGltZSBmb3IgdGFrZSB0ZXN0OiAlZyBzZWNzXG4iLCBkdXIgLSBzdGFydCk7CisKKyAgc3RhcnQgPSBkdXI7CisgIHJ1bl90ZXN0X3Rha2VfYnVmZmVyIChwYXJhbXMpOworCisgIHRpbWVzICgmdGltZV9kYXRhKTsKKyAgZHVyID0gKGdkb3VibGUpICh0aW1lX2RhdGEudG1zX3V0aW1lICsgdGltZV9kYXRhLnRtc19zdGltZSkgLyB0aWNrc19wZXJfc2VjOworICBnX3ByaW50ICgiVGltZSBmb3IgVGFrZUJ1ZmZlciB0ZXN0OiAlZyBzZWNzXG4iLCBkdXIgLSBzdGFydCk7CisKKyAgZ19wcmludCAoIlxuIik7Cit9CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBnaW50IGk7CisKKyAgdGlja3NfcGVyX3NlYyA9IHN5c2NvbmYgKF9TQ19DTEtfVENLKTsKKworICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKKworICBmb3IgKGkgPSAwOyBpIDwgbl90ZXN0czsgaSsrKQorICAgIHJ1bl90ZXN0cyAocGFyYW1fc2V0cyArIGkpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci9NYWtlZmlsZS5hbSBiL3Rlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI1NWVhNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw2IEBACitub2luc3RfUFJPR1JBTVMgPSBhdWRpby1leGFtcGxlCisKK2F1ZGlvX2V4YW1wbGVfQ0ZMQUdTICA9ICQoR1NUX09CSl9DRkxBR1MpIC1JJCh0b3BfYnVpbGRkaXIpL2xpYnMKK2F1ZGlvX2V4YW1wbGVfTERBREQgPSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NvbnRyb2xsZXIvbGliZ3N0Y29udHJvbGxlci1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKEdTVF9PQkpfTElCUykKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvTWFrZWZpbGUuaW4gYi90ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhM2ZhZTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNjkxIEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitub2luc3RfUFJPR1JBTVMgPSBhdWRpby1leGFtcGxlJChFWEVFWFQpCitzdWJkaXIgPSB0ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1weXRob24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXNjcnViLWluY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorUFJPR1JBTVMgPSAkKG5vaW5zdF9QUk9HUkFNUykKK2F1ZGlvX2V4YW1wbGVfU09VUkNFUyA9IGF1ZGlvLWV4YW1wbGUuYworYXVkaW9fZXhhbXBsZV9PQkpFQ1RTID0gYXVkaW9fZXhhbXBsZS1hdWRpby1leGFtcGxlLiQoT0JKRVhUKQorYW1fX0RFUEVOREVOQ0lFU18xID0KK2F1ZGlvX2V4YW1wbGVfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NvbnRyb2xsZXIvbGliZ3N0Y29udHJvbGxlci1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK0FNX1ZfbHQgPSAkKGFtX192X2x0XyQoVikpCithbV9fdl9sdF8gPSAkKGFtX192X2x0XyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfbHRfMCA9IC0tc2lsZW50CithdWRpb19leGFtcGxlX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKGF1ZGlvX2V4YW1wbGVfQ0ZMQUdTKSBcCisJJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCithbV9fbXYgPSBtdiAtZgorQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0FNX1ZfQ0MgPSAkKGFtX192X0NDXyQoVikpCithbV9fdl9DQ18gPSAkKGFtX192X0NDXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF8kKFYpKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X2F0XzAgPSBACitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0FNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF8kKFYpKQorYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAiICRAOworQU1fVl9HRU4gPSAkKGFtX192X0dFTl8kKFYpKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworU09VUkNFUyA9IGF1ZGlvLWV4YW1wbGUuYworRElTVF9TT1VSQ0VTID0gYXVkaW8tZXhhbXBsZS5jCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKK0NDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKK0NIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKK0NIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKK0NIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUiA9IEBEQVRBRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAorRExMVE9PTCA9IEBETExUT09MQAorRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKK0VSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACitFWEVFWFQgPSBARVhFRVhUQAorRkZMQUdTID0gQEZGTEFHU0AKK0ZHUkVQID0gQEZHUkVQQAorRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKK0dDT1YgPSBAR0NPVkAKK0dDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAorR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACitHTElCX0xJQlMgPSBAR0xJQl9MSUJTQAorR0xJQl9PTkxZX0NGTEFHUyA9IEBHTElCX09OTFlfQ0ZMQUdTQAorR0xJQl9PTkxZX0xJQlMgPSBAR0xJQl9PTkxZX0xJQlNACitHTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKK0dMSUJfUkVRID0gQEdMSUJfUkVRQAorR01QX0xJQlMgPSBAR01QX0xJQlNACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dSRVAgPSBAR1JFUEAKK0dTTF9MSUJTID0gQEdTTF9MSUJTQAorR1NUX0FHRSA9IEBHU1RfQUdFQAorR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACitHU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACitHU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAorR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKK0dTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAorR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORUAKK0dTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKK0dTVF9ESVNBQkxFX05FVF9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfTkVUX0RFRklORUAKK0dTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACitHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAorR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAorR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKK0dTVF9ESVNBQkxFX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkVACitHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACitHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACitHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORSA9IEBHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORUAKK0dTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAorR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACitHU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAorR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACitHU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKK0dTVF9NQUpPUk1JTk9SID0gQEdTVF9NQUpPUk1JTk9SQAorR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACitHU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACitHU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAorR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACitHU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACitHU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACitHU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAorR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAorR1NUX1BLR19ERVBTID0gQEdTVF9QS0dfREVQU0AKK0dTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACitHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FQAorR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORUAKK0dTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKK0dTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACitHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkUgPSBAR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FQAorR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKK0hBVkVfRE9DQk9PSzJIVE1MID0gQEhBVkVfRE9DQk9PSzJIVE1MQAorSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKK0hBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKK0hBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKK0hBVkVfRklHMkRFViA9IEBIQVZFX0ZJRzJERVZACitIQVZFX0dNUCA9IEBIQVZFX0dNUEAKK0hBVkVfR1NMID0gQEhBVkVfR1NMQAorSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKK0hBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKK0hBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACitIQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKK0hBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACitIT1NUX0NQVSA9IEBIT1NUX0NQVUAKK0hUTUxfRElSID0gQEhUTUxfRElSQAorSU5FVF9BVE9OX0xJQlMgPSBASU5FVF9BVE9OX0xJQlNACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCRElSID0gQExJQkRJUkAKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCTSA9IEBMSUJNQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTE9DQUxFRElSID0gQExPQ0FMRURJUkAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACitQQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAorUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKK1BBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAorUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BFUkxfUEFUSCA9IEBQRVJMX1BBVEhACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQTFVHSU5ESVIgPSBAUExVR0lORElSQAorUE9TVUIgPSBAUE9TVUJACitQUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAorVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAorVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACitXSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACitYTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKK1hTTFRQUk9DID0gQFhTTFRQUk9DQAorWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3BsdWdpbmRpciA9IEBwbHVnaW5kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorYXVkaW9fZXhhbXBsZV9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKSAtSSQodG9wX2J1aWxkZGlyKS9saWJzCithdWRpb19leGFtcGxlX0xEQUREID0gXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jb250cm9sbGVyL2xpYmdzdGNvbnRyb2xsZXItQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChHU1RfT0JKX0xJQlMpCisKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbnUgdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworY2xlYW4tbm9pbnN0UFJPR1JBTVM6CisJQGxpc3Q9JyQobm9pbnN0X1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKKwl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAorCWxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdAorYXVkaW8tZXhhbXBsZSQoRVhFRVhUKTogJChhdWRpb19leGFtcGxlX09CSkVDVFMpICQoYXVkaW9fZXhhbXBsZV9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBhdWRpby1leGFtcGxlJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChhdWRpb19leGFtcGxlX0xJTkspICQoYXVkaW9fZXhhbXBsZV9PQkpFQ1RTKSAkKGF1ZGlvX2V4YW1wbGVfTERBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2F1ZGlvX2V4YW1wbGUtYXVkaW8tZXhhbXBsZS5Qb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCithdWRpb19leGFtcGxlLWF1ZGlvLWV4YW1wbGUubzogYXVkaW8tZXhhbXBsZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXVkaW9fZXhhbXBsZV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXVkaW9fZXhhbXBsZS1hdWRpby1leGFtcGxlLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2F1ZGlvX2V4YW1wbGUtYXVkaW8tZXhhbXBsZS5UcG8gLWMgLW8gYXVkaW9fZXhhbXBsZS1hdWRpby1leGFtcGxlLm8gYHRlc3QgLWYgJ2F1ZGlvLWV4YW1wbGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXVkaW8tZXhhbXBsZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdWRpb19leGFtcGxlLWF1ZGlvLWV4YW1wbGUuVHBvICQoREVQRElSKS9hdWRpb19leGFtcGxlLWF1ZGlvLWV4YW1wbGUuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdhdWRpby1leGFtcGxlLmMnIG9iamVjdD0nYXVkaW9fZXhhbXBsZS1hdWRpby1leGFtcGxlLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF1ZGlvX2V4YW1wbGVfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXVkaW9fZXhhbXBsZS1hdWRpby1leGFtcGxlLm8gYHRlc3QgLWYgJ2F1ZGlvLWV4YW1wbGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXVkaW8tZXhhbXBsZS5jCisKK2F1ZGlvX2V4YW1wbGUtYXVkaW8tZXhhbXBsZS5vYmo6IGF1ZGlvLWV4YW1wbGUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF1ZGlvX2V4YW1wbGVfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF1ZGlvX2V4YW1wbGUtYXVkaW8tZXhhbXBsZS5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2F1ZGlvX2V4YW1wbGUtYXVkaW8tZXhhbXBsZS5UcG8gLWMgLW8gYXVkaW9fZXhhbXBsZS1hdWRpby1leGFtcGxlLm9iaiBgaWYgdGVzdCAtZiAnYXVkaW8tZXhhbXBsZS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2F1ZGlvLWV4YW1wbGUuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYXVkaW8tZXhhbXBsZS5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdWRpb19leGFtcGxlLWF1ZGlvLWV4YW1wbGUuVHBvICQoREVQRElSKS9hdWRpb19leGFtcGxlLWF1ZGlvLWV4YW1wbGUuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdhdWRpby1leGFtcGxlLmMnIG9iamVjdD0nYXVkaW9fZXhhbXBsZS1hdWRpby1leGFtcGxlLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXVkaW9fZXhhbXBsZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhdWRpb19leGFtcGxlLWF1ZGlvLWV4YW1wbGUub2JqIGBpZiB0ZXN0IC1mICdhdWRpby1leGFtcGxlLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYXVkaW8tZXhhbXBsZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9hdWRpby1leGFtcGxlLmMnOyBmaWAKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChQUk9HUkFNUykKK2luc3RhbGxkaXJzOgoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIFwKKwltb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbToKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCisJY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBjdGFncyBkaXN0Y2xlYW4gXAorCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisJcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL2F1ZGlvLWV4YW1wbGUuYyBiL3Rlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvYXVkaW8tZXhhbXBsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YjI3NzQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL2F1ZGlvLWV4YW1wbGUuYwpAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIGF1ZGlvLWV4YW1wbGUuYworICoKKyAqIEJ1aWxkcyBhIHBpcGVsaW5lIHdpdGggYXVkaW90ZXN0c291cmNlLT5hbHNhc2luayBhbmQgc3dlZXBzIGZyZXF1ZW5jeSBhbmQKKyAqIHZvbHVtZS4KKyAqCisgKiBOZWVkcyBnc3QtcGx1Z2luLWJhc2UgaW5zdGFsbGVkLgorICovCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5oPgorI2luY2x1ZGUgPGdzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmg+CisKK2dpbnQKK21haW4gKGdpbnQgYXJnYywgZ2NoYXIgKiogYXJndikKK3sKKyAgZ2ludCByZXMgPSAxOworICBHc3RFbGVtZW50ICpzcmMsICpzaW5rOworICBHc3RFbGVtZW50ICpiaW47CisgIEdzdENvbnRyb2xsZXIgKmN0cmw7CisgIEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlICpjc291cmNlMSwgKmNzb3VyY2UyOworICBHc3RDbG9jayAqY2xvY2s7CisgIEdzdENsb2NrSUQgY2xvY2tfaWQ7CisgIEdzdENsb2NrUmV0dXJuIHdhaXRfcmV0OworICBHVmFsdWUgdm9sID0geyAwLCB9OworCisgIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOworICBnc3RfY29udHJvbGxlcl9pbml0ICgmYXJnYywgJmFyZ3YpOworCisgIC8qIGJ1aWxkIHBpcGVsaW5lICovCisgIGJpbiA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOworICBjbG9jayA9IGdzdF9waXBlbGluZV9nZXRfY2xvY2sgKEdTVF9QSVBFTElORSAoYmluKSk7CisgIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1ZGlvdGVzdHNyYyIsICJnZW5fYXVkaW8iKTsKKyAgaWYgKCFzcmMpIHsKKyAgICBHU1RfV0FSTklORyAoIm5lZWQgYXVkaW90ZXN0c3JjIGZyb20gZ3N0LXBsdWdpbnMtYmFzZSIpOworICAgIGdvdG8gRXJyb3I7CisgIH0KKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1dG9hdWRpb3NpbmsiLCAicGxheV9hdWRpbyIpOworICBpZiAoIXNpbmspIHsKKyAgICBHU1RfV0FSTklORyAoIm5lZWQgYXV0b2F1ZGlvc2luayBmcm9tIGdzdC1wbHVnaW5zLWJhc2UiKTsKKyAgICBnb3RvIEVycm9yOworICB9CisKKyAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAoYmluKSwgc3JjLCBzaW5rLCBOVUxMKTsKKyAgaWYgKCFnc3RfZWxlbWVudF9saW5rIChzcmMsIHNpbmspKSB7CisgICAgR1NUX1dBUk5JTkcgKCJjYW4ndCBsaW5rIGVsZW1lbnRzIik7CisgICAgZ290byBFcnJvcjsKKyAgfQorCisgIC8qIHNxdWFyZSB3YXZlCisgICAgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1Qoc3JjKSwgIndhdmUiLCAxLCBOVUxMKTsKKyAgICovCisKKyAgLyogYWRkIGEgY29udHJvbGxlciB0byB0aGUgc291cmNlICovCisgIGlmICghKGN0cmwgPSBnc3RfY29udHJvbGxlcl9uZXcgKEdfT0JKRUNUIChzcmMpLCAiZnJlcSIsICJ2b2x1bWUiLCBOVUxMKSkpIHsKKyAgICBHU1RfV0FSTklORyAoImNhbid0IGNvbnRyb2wgc291cmNlIGVsZW1lbnQiKTsKKyAgICBnb3RvIEVycm9yOworICB9CisKKyAgY3NvdXJjZTEgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKCk7CisgIGNzb3VyY2UyID0gZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfbmV3ICgpOworCisgIGdzdF9jb250cm9sbGVyX3NldF9jb250cm9sX3NvdXJjZSAoY3RybCwgInZvbHVtZSIsCisgICAgICBHU1RfQ09OVFJPTF9TT1VSQ0UgKGNzb3VyY2UxKSk7CisgIGdzdF9jb250cm9sbGVyX3NldF9jb250cm9sX3NvdXJjZSAoY3RybCwgImZyZXEiLAorICAgICAgR1NUX0NPTlRST0xfU09VUkNFIChjc291cmNlMikpOworCisgIC8qIFNldCBpbnRlcnBvbGF0aW9uIG1vZGUgKi8KKworICBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXRfaW50ZXJwb2xhdGlvbl9tb2RlIChjc291cmNlMSwKKyAgICAgIEdTVF9JTlRFUlBPTEFURV9MSU5FQVIpOworICBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXRfaW50ZXJwb2xhdGlvbl9tb2RlIChjc291cmNlMiwKKyAgICAgIEdTVF9JTlRFUlBPTEFURV9MSU5FQVIpOworCisgIC8qIHNldCBjb250cm9sIHZhbHVlcyAqLworICBnX3ZhbHVlX2luaXQgKCZ2b2wsIEdfVFlQRV9ET1VCTEUpOworICBnX3ZhbHVlX3NldF9kb3VibGUgKCZ2b2wsIDAuMCk7CisgIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldCAoY3NvdXJjZTEsIDAgKiBHU1RfU0VDT05ELCAmdm9sKTsKKyAgZ192YWx1ZV9zZXRfZG91YmxlICgmdm9sLCAxLjApOworICBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXQgKGNzb3VyY2UxLCA1ICogR1NUX1NFQ09ORCwgJnZvbCk7CisKKyAgZ19vYmplY3RfdW5yZWYgKGNzb3VyY2UxKTsKKworICBnX3ZhbHVlX3NldF9kb3VibGUgKCZ2b2wsIDIyMC4wKTsKKyAgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0IChjc291cmNlMiwgMCAqIEdTVF9TRUNPTkQsICZ2b2wpOworICBnX3ZhbHVlX3NldF9kb3VibGUgKCZ2b2wsIDM1MjAuMCk7CisgIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldCAoY3NvdXJjZTIsIDMgKiBHU1RfU0VDT05ELCAmdm9sKTsKKyAgZ192YWx1ZV9zZXRfZG91YmxlICgmdm9sLCA0NDAuMCk7CisgIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldCAoY3NvdXJjZTIsIDYgKiBHU1RfU0VDT05ELCAmdm9sKTsKKworICBnX29iamVjdF91bnJlZiAoY3NvdXJjZTIpOworCisgIGNsb2NrX2lkID0KKyAgICAgIGdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKGNsb2NrLAorICAgICAgZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jaykgKyAoNyAqIEdTVF9TRUNPTkQpKTsKKworICAvKiBydW4gZm9yIDcgc2Vjb25kcyAqLworICBpZiAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9QTEFZSU5HKSkgeworICAgIGlmICgod2FpdF9yZXQgPSBnc3RfY2xvY2tfaWRfd2FpdCAoY2xvY2tfaWQsIE5VTEwpKSAhPSBHU1RfQ0xPQ0tfT0spIHsKKyAgICAgIEdTVF9XQVJOSU5HICgiY2xvY2tfaWRfd2FpdCByZXR1cm5lZDogJWQiLCB3YWl0X3JldCk7CisgICAgfQorICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfTlVMTCk7CisgIH0KKworICAvKiBjbGVhbnVwICovCisgIGdfb2JqZWN0X3VucmVmIChHX09CSkVDVCAoY3RybCkpOworICBnc3RfY2xvY2tfaWRfdW5yZWYgKGNsb2NrX2lkKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoR19PQkpFQ1QgKGNsb2NrKSk7CisgIGdzdF9vYmplY3RfdW5yZWYgKEdfT0JKRUNUIChiaW4pKTsKKyAgcmVzID0gMDsKK0Vycm9yOgorICByZXR1cm4gKHJlcyk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9oZWxsb3dvcmxkL01ha2VmaWxlLmFtIGIvdGVzdHMvZXhhbXBsZXMvaGVsbG93b3JsZC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2QxYmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZXhhbXBsZXMvaGVsbG93b3JsZC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDQgQEAKK25vaW5zdF9QUk9HUkFNUyA9IGhlbGxvd29ybGQKKworaGVsbG93b3JsZF9MREFERCA9ICQoR1NUX09CSl9MSUJTKQoraGVsbG93b3JsZF9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvaGVsbG93b3JsZC9NYWtlZmlsZS5pbiBiL3Rlc3RzL2V4YW1wbGVzL2hlbGxvd29ybGQvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg2YTlkMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2V4YW1wbGVzL2hlbGxvd29ybGQvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2ODcgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK25vaW5zdF9QUk9HUkFNUyA9IGhlbGxvd29ybGQkKEVYRUVYVCkKK3N1YmRpciA9IHRlc3RzL2V4YW1wbGVzL2hlbGxvd29ybGQKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXB5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtc2NydWItaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitQUk9HUkFNUyA9ICQobm9pbnN0X1BST0dSQU1TKQoraGVsbG93b3JsZF9TT1VSQ0VTID0gaGVsbG93b3JsZC5jCitoZWxsb3dvcmxkX09CSkVDVFMgPSBoZWxsb3dvcmxkLWhlbGxvd29ybGQuJChPQkpFWFQpCithbV9fREVQRU5ERU5DSUVTXzEgPQoraGVsbG93b3JsZF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKK0FNX1ZfbHQgPSAkKGFtX192X2x0XyQoVikpCithbV9fdl9sdF8gPSAkKGFtX192X2x0XyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfbHRfMCA9IC0tc2lsZW50CitoZWxsb3dvcmxkX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKGhlbGxvd29ybGRfQ0ZMQUdTKSBcCisJJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCithbV9fbXYgPSBtdiAtZgorQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0FNX1ZfQ0MgPSAkKGFtX192X0NDXyQoVikpCithbV9fdl9DQ18gPSAkKGFtX192X0NDXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF8kKFYpKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X2F0XzAgPSBACitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0FNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF8kKFYpKQorYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAiICRAOworQU1fVl9HRU4gPSAkKGFtX192X0dFTl8kKFYpKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworU09VUkNFUyA9IGhlbGxvd29ybGQuYworRElTVF9TT1VSQ0VTID0gaGVsbG93b3JsZC5jCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKK0NDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKK0NIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKK0NIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKK0NIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUiA9IEBEQVRBRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAorRExMVE9PTCA9IEBETExUT09MQAorRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKK0VSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACitFWEVFWFQgPSBARVhFRVhUQAorRkZMQUdTID0gQEZGTEFHU0AKK0ZHUkVQID0gQEZHUkVQQAorRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKK0dDT1YgPSBAR0NPVkAKK0dDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAorR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACitHTElCX0xJQlMgPSBAR0xJQl9MSUJTQAorR0xJQl9PTkxZX0NGTEFHUyA9IEBHTElCX09OTFlfQ0ZMQUdTQAorR0xJQl9PTkxZX0xJQlMgPSBAR0xJQl9PTkxZX0xJQlNACitHTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKK0dMSUJfUkVRID0gQEdMSUJfUkVRQAorR01QX0xJQlMgPSBAR01QX0xJQlNACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dSRVAgPSBAR1JFUEAKK0dTTF9MSUJTID0gQEdTTF9MSUJTQAorR1NUX0FHRSA9IEBHU1RfQUdFQAorR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACitHU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACitHU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAorR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKK0dTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAorR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORUAKK0dTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKK0dTVF9ESVNBQkxFX05FVF9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfTkVUX0RFRklORUAKK0dTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACitHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAorR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAorR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKK0dTVF9ESVNBQkxFX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkVACitHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACitHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACitHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORSA9IEBHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORUAKK0dTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAorR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACitHU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAorR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACitHU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKK0dTVF9NQUpPUk1JTk9SID0gQEdTVF9NQUpPUk1JTk9SQAorR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACitHU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACitHU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAorR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACitHU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACitHU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACitHU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAorR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAorR1NUX1BLR19ERVBTID0gQEdTVF9QS0dfREVQU0AKK0dTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACitHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FQAorR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORUAKK0dTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKK0dTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACitHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkUgPSBAR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FQAorR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKK0hBVkVfRE9DQk9PSzJIVE1MID0gQEhBVkVfRE9DQk9PSzJIVE1MQAorSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKK0hBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKK0hBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKK0hBVkVfRklHMkRFViA9IEBIQVZFX0ZJRzJERVZACitIQVZFX0dNUCA9IEBIQVZFX0dNUEAKK0hBVkVfR1NMID0gQEhBVkVfR1NMQAorSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKK0hBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKK0hBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACitIQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKK0hBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACitIT1NUX0NQVSA9IEBIT1NUX0NQVUAKK0hUTUxfRElSID0gQEhUTUxfRElSQAorSU5FVF9BVE9OX0xJQlMgPSBASU5FVF9BVE9OX0xJQlNACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCRElSID0gQExJQkRJUkAKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCTSA9IEBMSUJNQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTE9DQUxFRElSID0gQExPQ0FMRURJUkAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACitQQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAorUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKK1BBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAorUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BFUkxfUEFUSCA9IEBQRVJMX1BBVEhACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQTFVHSU5ESVIgPSBAUExVR0lORElSQAorUE9TVUIgPSBAUE9TVUJACitQUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAorVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAorVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACitXSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACitYTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKK1hTTFRQUk9DID0gQFhTTFRQUk9DQAorWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3BsdWdpbmRpciA9IEBwbHVnaW5kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAoraGVsbG93b3JsZF9MREFERCA9ICQoR1NUX09CSl9MSUJTKQoraGVsbG93b3JsZF9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgdGVzdHMvZXhhbXBsZXMvaGVsbG93b3JsZC9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy9oZWxsb3dvcmxkL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorCitjbGVhbi1ub2luc3RQUk9HUkFNUzoKKwlAbGlzdD0nJChub2luc3RfUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAorCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCisJbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0CitoZWxsb3dvcmxkJChFWEVFWFQpOiAkKGhlbGxvd29ybGRfT0JKRUNUUykgJChoZWxsb3dvcmxkX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGhlbGxvd29ybGQkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKGhlbGxvd29ybGRfTElOSykgJChoZWxsb3dvcmxkX09CSkVDVFMpICQoaGVsbG93b3JsZF9MREFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvaGVsbG93b3JsZC1oZWxsb3dvcmxkLlBvQGFtX19xdW90ZUAKKworLmMubzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgJDwKKworLmMub2JqOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisKK2hlbGxvd29ybGQtaGVsbG93b3JsZC5vOiBoZWxsb3dvcmxkLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChoZWxsb3dvcmxkX0NGTEFHUykgJChDRkxBR1MpIC1NVCBoZWxsb3dvcmxkLWhlbGxvd29ybGQubyAtTUQgLU1QIC1NRiAkKERFUERJUikvaGVsbG93b3JsZC1oZWxsb3dvcmxkLlRwbyAtYyAtbyBoZWxsb3dvcmxkLWhlbGxvd29ybGQubyBgdGVzdCAtZiAnaGVsbG93b3JsZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BoZWxsb3dvcmxkLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2hlbGxvd29ybGQtaGVsbG93b3JsZC5UcG8gJChERVBESVIpL2hlbGxvd29ybGQtaGVsbG93b3JsZC5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2hlbGxvd29ybGQuYycgb2JqZWN0PSdoZWxsb3dvcmxkLWhlbGxvd29ybGQubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoaGVsbG93b3JsZF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBoZWxsb3dvcmxkLWhlbGxvd29ybGQubyBgdGVzdCAtZiAnaGVsbG93b3JsZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BoZWxsb3dvcmxkLmMKKworaGVsbG93b3JsZC1oZWxsb3dvcmxkLm9iajogaGVsbG93b3JsZC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoaGVsbG93b3JsZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgaGVsbG93b3JsZC1oZWxsb3dvcmxkLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvaGVsbG93b3JsZC1oZWxsb3dvcmxkLlRwbyAtYyAtbyBoZWxsb3dvcmxkLWhlbGxvd29ybGQub2JqIGBpZiB0ZXN0IC1mICdoZWxsb3dvcmxkLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnaGVsbG93b3JsZC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9oZWxsb3dvcmxkLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2hlbGxvd29ybGQtaGVsbG93b3JsZC5UcG8gJChERVBESVIpL2hlbGxvd29ybGQtaGVsbG93b3JsZC5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2hlbGxvd29ybGQuYycgb2JqZWN0PSdoZWxsb3dvcmxkLWhlbGxvd29ybGQub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChoZWxsb3dvcmxkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGhlbGxvd29ybGQtaGVsbG93b3JsZC5vYmogYGlmIHRlc3QgLWYgJ2hlbGxvd29ybGQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdoZWxsb3dvcmxkLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2hlbGxvd29ybGQuYyc7IGZpYAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIGN0YWdzIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKKwlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL2hlbGxvd29ybGQvaGVsbG93b3JsZC5jIGIvdGVzdHMvZXhhbXBsZXMvaGVsbG93b3JsZC9oZWxsb3dvcmxkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY1OWY1YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2V4YW1wbGVzL2hlbGxvd29ybGQvaGVsbG93b3JsZC5jCkBAIC0wLDAgKzEsODAgQEAKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKK3N0YXRpYyBnYm9vbGVhbgorYnVzX2NhbGwgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1zZywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgR01haW5Mb29wICpsb29wID0gKEdNYWluTG9vcCAqKSBkYXRhOworCisgIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSkgeworICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOnsKKyAgICAgIGdfcHJpbnQgKCJFbmQtb2Ytc3RyZWFtXG4iKTsKKyAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6eworICAgICAgZ2NoYXIgKmRlYnVnOworICAgICAgR0Vycm9yICplcnI7CisKKyAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtc2csICZlcnIsICZkZWJ1Zyk7CisgICAgICBnX2ZyZWUgKGRlYnVnKTsKKworICAgICAgZ19wcmludCAoIkVycm9yOiAlc1xuIiwgZXJyLT5tZXNzYWdlKTsKKyAgICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKKworICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7CisKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKyAgcmV0dXJuIFRSVUU7Cit9CisKK2dpbnQKK21haW4gKGdpbnQgYXJnYywgZ2NoYXIgKiBhcmd2W10pCit7CisgIEdzdEVsZW1lbnQgKnBsYXliaW47CisgIEdNYWluTG9vcCAqbG9vcDsKKyAgR3N0QnVzICpidXM7CisgIGdjaGFyICp1cmk7CisKKyAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7CisKKyAgaWYgKGFyZ2MgPCAyKSB7CisgICAgZ19wcmludCAoInVzYWdlOiAlcyA8bWVkaWEgZmlsZSBvciB1cmk+XG4iLCBhcmd2WzBdKTsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIHBsYXliaW4gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJwbGF5YmluMiIsIE5VTEwpOworICBpZiAoIXBsYXliaW4pIHsKKyAgICBnX3ByaW50ICgiJ3BsYXliaW4yJyBnc3RyZWFtZXIgcGx1Z2luIG1pc3NpbmdcbiIpOworICAgIHJldHVybiAxOworICB9CisKKyAgLyogdGFrZSB0aGUgY29tbWFuZGxpbmUgYXJndW1lbnQgYW5kIGVuc3VyZSB0aGF0IGl0IGlzIGEgdXJpICovCisgIGlmIChnc3RfdXJpX2lzX3ZhbGlkIChhcmd2WzFdKSkKKyAgICB1cmkgPSBnX3N0cmR1cCAoYXJndlsxXSk7CisgIGVsc2UKKyAgICB1cmkgPSBnc3RfZmlsZW5hbWVfdG9fdXJpIChhcmd2WzFdLCBOVUxMKTsKKyAgZ19vYmplY3Rfc2V0IChwbGF5YmluLCAidXJpIiwgdXJpLCBOVUxMKTsKKyAgZ19mcmVlICh1cmkpOworCisgIC8qIGNyZWF0ZSBhbmQgZXZlbnQgbG9vcCBhbmQgZmVlZCBnc3RyZWFtZXIgYnVzIG1lc2FnZXMgdG8gaXQgKi8KKyAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOworCisgIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBsYXliaW4pOworICBnc3RfYnVzX2FkZF93YXRjaCAoYnVzLCBidXNfY2FsbCwgbG9vcCk7CisgIGdfb2JqZWN0X3VucmVmIChidXMpOworCisgIC8qIHN0YXJ0IHBsYXkgYmFjayBhbmQgbGlzdGVkIHRvIGV2ZW50cyAqLworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBsYXliaW4sIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKKworICAvKiBjbGVhbnVwICovCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGxheWJpbiwgR1NUX1NUQVRFX05VTEwpOworICBnX29iamVjdF91bnJlZiAocGxheWJpbik7CisgIGdfbWFpbl9sb29wX3VucmVmIChsb29wKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL2xhdW5jaC9NYWtlZmlsZS5hbSBiL3Rlc3RzL2V4YW1wbGVzL2xhdW5jaC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWU1Nzg5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZXhhbXBsZXMvbGF1bmNoL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNyBAQAorbm9pbnN0X1BST0dSQU1TID0gbXAzcGFyc2VsYXVuY2gKKworbXAzcGFyc2VsYXVuY2hfTERBREQgPSAkKEdTVF9PQkpfTElCUykKK21wM3BhcnNlbGF1bmNoX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCisKKyNub2luc3RfU0NSSVBUUyA9IG1wM3BsYXkKKyNFWFRSQV9ESVNUID0gbXAzcGxheQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvbGF1bmNoL01ha2VmaWxlLmluIGIvdGVzdHMvZXhhbXBsZXMvbGF1bmNoL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNjgxOTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9leGFtcGxlcy9sYXVuY2gvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2OTEgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK25vaW5zdF9QUk9HUkFNUyA9IG1wM3BhcnNlbGF1bmNoJChFWEVFWFQpCitzdWJkaXIgPSB0ZXN0cy9leGFtcGxlcy9sYXVuY2gKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXB5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtc2NydWItaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitQUk9HUkFNUyA9ICQobm9pbnN0X1BST0dSQU1TKQorbXAzcGFyc2VsYXVuY2hfU09VUkNFUyA9IG1wM3BhcnNlbGF1bmNoLmMKK21wM3BhcnNlbGF1bmNoX09CSkVDVFMgPSBtcDNwYXJzZWxhdW5jaC1tcDNwYXJzZWxhdW5jaC4kKE9CSkVYVCkKK2FtX19ERVBFTkRFTkNJRVNfMSA9CittcDNwYXJzZWxhdW5jaF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKK0FNX1ZfbHQgPSAkKGFtX192X2x0XyQoVikpCithbV9fdl9sdF8gPSAkKGFtX192X2x0XyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfbHRfMCA9IC0tc2lsZW50CittcDNwYXJzZWxhdW5jaF9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKKwkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAorCSQobXAzcGFyc2VsYXVuY2hfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vIFwKKwkkQAorREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCithbV9fbXYgPSBtdiAtZgorQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0FNX1ZfQ0MgPSAkKGFtX192X0NDXyQoVikpCithbV9fdl9DQ18gPSAkKGFtX192X0NDXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF8kKFYpKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X2F0XzAgPSBACitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0FNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF8kKFYpKQorYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAiICRAOworQU1fVl9HRU4gPSAkKGFtX192X0dFTl8kKFYpKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworU09VUkNFUyA9IG1wM3BhcnNlbGF1bmNoLmMKK0RJU1RfU09VUkNFUyA9IG1wM3BhcnNlbGF1bmNoLmMKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVMgPSBAQVNACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JJU09OX1BBVEggPSBAQklTT05fUEFUSEAKK0NBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKK0NBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACitDQyA9IEBDQ0AKK0NDQVMgPSBAQ0NBU0AKK0NDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAorQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAorQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAorQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAorQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRBRElSID0gQERBVEFESVJACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACitETExUT09MID0gQERMTFRPT0xACitET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAorRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKK0VYRUVYVCA9IEBFWEVFWFRACitGRkxBR1MgPSBARkZMQUdTQAorRkdSRVAgPSBARkdSRVBACitGTEVYX1BBVEggPSBARkxFWF9QQVRIQAorR0NPViA9IEBHQ09WQAorR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACitHQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAorR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACitHTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKK0dMSUJfTElCUyA9IEBHTElCX0xJQlNACitHTElCX09OTFlfQ0ZMQUdTID0gQEdMSUJfT05MWV9DRkxBR1NACitHTElCX09OTFlfTElCUyA9IEBHTElCX09OTFlfTElCU0AKK0dMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAorR0xJQl9SRVEgPSBAR0xJQl9SRVFACitHTVBfTElCUyA9IEBHTVBfTElCU0AKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAorR1JFUCA9IEBHUkVQQAorR1NMX0xJQlMgPSBAR1NMX0xJQlNACitHU1RfQUdFID0gQEdTVF9BR0VACitHU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKK0dTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKK0dTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACitHU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAorR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACitHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FQAorR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAorR1NUX0RJU0FCTEVfTkVUX0RFRklORSA9IEBHU1RfRElTQUJMRV9ORVRfREVGSU5FQAorR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKK0dTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACitHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACitHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAorR1NUX0RJU0FCTEVfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1RSQUNFX0RFRklORUAKK0dTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkUgPSBAR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORUAKK0dTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkUgPSBAR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORUAKK0dTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FID0gQEdTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FQAorR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACitHU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKK0dTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACitHU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKK0dTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAorR1NUX01BSk9STUlOT1IgPSBAR1NUX01BSk9STUlOT1JACitHU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKK0dTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKK0dTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACitHU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKK0dTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKK0dTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKK0dTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACitHU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACitHU1RfUEtHX0RFUFMgPSBAR1NUX1BLR19ERVBTQAorR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKK0dTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgPSBAR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFREAKK0dTVF9QUklOVEZfRVhURU5TSU9OX1BPSU5URVJfRk9STUFUX0RFRklORSA9IEBHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkVACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FQAorR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAorR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKK0dTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OX0RFRklORSA9IEBHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkVACitHVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAorSEFWRV9ET0NCT09LMkhUTUwgPSBASEFWRV9ET0NCT09LMkhUTUxACitIQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAorSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAorSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAorSEFWRV9GSUcyREVWID0gQEhBVkVfRklHMkRFVkAKK0hBVkVfR01QID0gQEhBVkVfR01QQAorSEFWRV9HU0wgPSBASEFWRV9HU0xACitIQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAorSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAorSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKK0hBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAorSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKK0hPU1RfQ1BVID0gQEhPU1RfQ1BVQAorSFRNTF9ESVIgPSBASFRNTF9ESVJACitJTkVUX0FUT05fTElCUyA9IEBJTkVUX0FUT05fTElCU0AKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACitJTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKK0lOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKK0lOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKK0lOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAorSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKK0lOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKK0lOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACitJTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJESVIgPSBATElCRElSQAorTElCSUNPTlYgPSBATElCSUNPTlZACitMSUJJTlRMID0gQExJQklOVExACitMSUJNID0gQExJQk1ACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMT0NBTEVESVIgPSBATE9DQUxFRElSQAorTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAorTFRMSUJJTlRMID0gQExUTElCSU5UTEAKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUlOVCA9IEBNQUlOVEAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKK01TR01FUkdFID0gQE1TR01FUkdFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKK1BBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACitQQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAorUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACitQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BMVUdJTkRJUiA9IEBQTFVHSU5ESVJACitQT1NVQiA9IEBQT1NVQkAKK1BST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAorUFlUSE9OID0gQFBZVEhPTkAKK1BZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACitQWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAorUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAorUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1ZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACitWQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACitWQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACitWRVJTSU9OID0gQFZFUlNJT05ACitXQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKK1dJTjMyX0xJQlMgPSBAV0lOMzJfTElCU0AKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKK1hHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKK1hNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAorWFNMVFBST0MgPSBAWFNMVFBST0NACitYU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3BrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACitwa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAorcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3B5ZXhlY2RpciA9IEBweWV4ZWNkaXJACitweXRob25kaXIgPSBAcHl0aG9uZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACittcDNwYXJzZWxhdW5jaF9MREFERCA9ICQoR1NUX09CSl9MSUJTKQorbXAzcGFyc2VsYXVuY2hfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IHRlc3RzL2V4YW1wbGVzL2xhdW5jaC9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy9sYXVuY2gvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisKK2NsZWFuLW5vaW5zdFBST0dSQU1TOgorCUBsaXN0PSckKG5vaW5zdF9QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCisJdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKKwlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QKK21wM3BhcnNlbGF1bmNoJChFWEVFWFQpOiAkKG1wM3BhcnNlbGF1bmNoX09CSkVDVFMpICQobXAzcGFyc2VsYXVuY2hfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbXAzcGFyc2VsYXVuY2gkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKG1wM3BhcnNlbGF1bmNoX0xJTkspICQobXAzcGFyc2VsYXVuY2hfT0JKRUNUUykgJChtcDNwYXJzZWxhdW5jaF9MREFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbXAzcGFyc2VsYXVuY2gtbXAzcGFyc2VsYXVuY2guUG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbXAzcGFyc2VsYXVuY2gtbXAzcGFyc2VsYXVuY2gubzogbXAzcGFyc2VsYXVuY2guYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKG1wM3BhcnNlbGF1bmNoX0NGTEFHUykgJChDRkxBR1MpIC1NVCBtcDNwYXJzZWxhdW5jaC1tcDNwYXJzZWxhdW5jaC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9tcDNwYXJzZWxhdW5jaC1tcDNwYXJzZWxhdW5jaC5UcG8gLWMgLW8gbXAzcGFyc2VsYXVuY2gtbXAzcGFyc2VsYXVuY2gubyBgdGVzdCAtZiAnbXAzcGFyc2VsYXVuY2guYycgfHwgZWNobyAnJChzcmNkaXIpLydgbXAzcGFyc2VsYXVuY2guYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbXAzcGFyc2VsYXVuY2gtbXAzcGFyc2VsYXVuY2guVHBvICQoREVQRElSKS9tcDNwYXJzZWxhdW5jaC1tcDNwYXJzZWxhdW5jaC5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J21wM3BhcnNlbGF1bmNoLmMnIG9iamVjdD0nbXAzcGFyc2VsYXVuY2gtbXAzcGFyc2VsYXVuY2gubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobXAzcGFyc2VsYXVuY2hfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbXAzcGFyc2VsYXVuY2gtbXAzcGFyc2VsYXVuY2gubyBgdGVzdCAtZiAnbXAzcGFyc2VsYXVuY2guYycgfHwgZWNobyAnJChzcmNkaXIpLydgbXAzcGFyc2VsYXVuY2guYworCittcDNwYXJzZWxhdW5jaC1tcDNwYXJzZWxhdW5jaC5vYmo6IG1wM3BhcnNlbGF1bmNoLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChtcDNwYXJzZWxhdW5jaF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbXAzcGFyc2VsYXVuY2gtbXAzcGFyc2VsYXVuY2gub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9tcDNwYXJzZWxhdW5jaC1tcDNwYXJzZWxhdW5jaC5UcG8gLWMgLW8gbXAzcGFyc2VsYXVuY2gtbXAzcGFyc2VsYXVuY2gub2JqIGBpZiB0ZXN0IC1mICdtcDNwYXJzZWxhdW5jaC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ21wM3BhcnNlbGF1bmNoLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL21wM3BhcnNlbGF1bmNoLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL21wM3BhcnNlbGF1bmNoLW1wM3BhcnNlbGF1bmNoLlRwbyAkKERFUERJUikvbXAzcGFyc2VsYXVuY2gtbXAzcGFyc2VsYXVuY2guUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdtcDNwYXJzZWxhdW5jaC5jJyBvYmplY3Q9J21wM3BhcnNlbGF1bmNoLW1wM3BhcnNlbGF1bmNoLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobXAzcGFyc2VsYXVuY2hfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbXAzcGFyc2VsYXVuY2gtbXAzcGFyc2VsYXVuY2gub2JqIGBpZiB0ZXN0IC1mICdtcDNwYXJzZWxhdW5jaC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ21wM3BhcnNlbGF1bmNoLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL21wM3BhcnNlbGF1bmNoLmMnOyBmaWAKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChQUk9HUkFNUykKK2luc3RhbGxkaXJzOgoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIFwKKwltb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbToKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCisJY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBjdGFncyBkaXN0Y2xlYW4gXAorCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisJcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworCisjbm9pbnN0X1NDUklQVFMgPSBtcDNwbGF5CisjRVhUUkFfRElTVCA9IG1wM3BsYXkKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvbGF1bmNoL21wM3BhcnNlbGF1bmNoLmMgYi90ZXN0cy9leGFtcGxlcy9sYXVuY2gvbXAzcGFyc2VsYXVuY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzAwYTA3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZXhhbXBsZXMvbGF1bmNoL21wM3BhcnNlbGF1bmNoLmMKQEAgLTAsMCArMSw4NiBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCitzdGF0aWMgdm9pZAorZXZlbnRfbG9vcCAoR3N0RWxlbWVudCAqIHBpcGUpCit7CisgIEdzdEJ1cyAqYnVzOworICBHc3RNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKyAgZ2Jvb2xlYW4gcnVubmluZyA9IFRSVUU7CisKKyAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAoR1NUX0VMRU1FTlQgKHBpcGUpKTsKKworICB3aGlsZSAocnVubmluZykgeworICAgIG1lc3NhZ2UgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfQU5ZLCAtMSk7CisKKyAgICBnX2Fzc2VydCAobWVzc2FnZSAhPSBOVUxMKTsKKworICAgIHN3aXRjaCAobWVzc2FnZS0+dHlwZSkgeworICAgICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6CisgICAgICAgIHJ1bm5pbmcgPSBGQUxTRTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9NRVNTQUdFX1dBUk5JTkc6eworICAgICAgICBHRXJyb3IgKmdlcnJvcjsKKyAgICAgICAgZ2NoYXIgKmRlYnVnOworCisgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmcgKG1lc3NhZ2UsICZnZXJyb3IsICZkZWJ1Zyk7CisgICAgICAgIGdzdF9vYmplY3RfZGVmYXVsdF9lcnJvciAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSwgZ2Vycm9yLCBkZWJ1Zyk7CisgICAgICAgIGdfZXJyb3JfZnJlZSAoZ2Vycm9yKTsKKyAgICAgICAgZ19mcmVlIChkZWJ1Zyk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjp7CisgICAgICAgIEdFcnJvciAqZ2Vycm9yOworICAgICAgICBnY2hhciAqZGVidWc7CisKKyAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1lc3NhZ2UsICZnZXJyb3IsICZkZWJ1Zyk7CisgICAgICAgIGdzdF9vYmplY3RfZGVmYXVsdF9lcnJvciAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSwgZ2Vycm9yLCBkZWJ1Zyk7CisgICAgICAgIGdfZXJyb3JfZnJlZSAoZ2Vycm9yKTsKKyAgICAgICAgZ19mcmVlIChkZWJ1Zyk7CisgICAgICAgIHJ1bm5pbmcgPSBGQUxTRTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOworICB9CisgIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Cit9CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgR3N0RWxlbWVudCAqYmluOworICBHc3RFbGVtZW50ICpmaWxlc3JjOworICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKworICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKKworICBpZiAoYXJnYyAhPSAyKSB7CisgICAgZ19wcmludCAoInVzYWdlOiAlcyA8bXAzIGZpbGU+XG4iLCBhcmd2WzBdKTsKKyAgICBleGl0ICgtMSk7CisgIH0KKworICBiaW4gPSAoR3N0RWxlbWVudCAqKQorICAgICAgZ3N0X3BhcnNlX2xhdW5jaCAoImZpbGVzcmMgbmFtZT1teV9maWxlc3JjICEgbWFkICEgb3Nzc2luayIsICZlcnJvcik7CisgIGlmICghYmluKSB7CisgICAgZnByaW50ZiAoc3RkZXJyLCAiUGFyc2UgZXJyb3I6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgIGV4aXQgKC0xKTsKKyAgfQorCisgIGZpbGVzcmMgPSBnc3RfYmluX2dldF9ieV9uYW1lIChHU1RfQklOIChiaW4pLCAibXlfZmlsZXNyYyIpOworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChmaWxlc3JjKSwgImxvY2F0aW9uIiwgYXJndlsxXSwgTlVMTCk7CisKKyAgLyogc3RhcnQgcGxheWluZyAqLworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX1BMQVlJTkcpOworCisgIC8qIFJ1biBldmVudCBsb29wIGxpc3RlbmluZyBmb3IgYnVzIG1lc3NhZ2VzIHVudGlsIEVPUyBvciBFUlJPUiAqLworICBldmVudF9sb29wIChiaW4pOworCisgIC8qIHN0b3AgdGhlIGJpbiAqLworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX05VTEwpOworCisgIGV4aXQgKDApOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlLmFtIGIvdGVzdHMvZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxODBhOTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw5NCBAQAorIyBpZiBIQVZFX0xJQkdOT01FVUkKKyMgR05PTUUgPSBnbm9tZQorIyBlbHNlCitHTk9NRSA9CisjIGVuZGlmCisKKyMgZ25vbWVfTERBREQgPSAkKEdTVF9PQkpfTElCUykgJChMSUJHTk9NRVVJX0xJQlMpCisjIGdub21lX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpICQoTElCR05PTUVVSV9DRkxBR1MpCisKK0NIRUNLX1JFR0lTVFJZID0gJCh0b3BfYnVpbGRkaXIpL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC90ZXN0LXJlZ2lzdHJ5LnJlZworCitSRUdJU1RSWV9FTlZJUk9OTUVOVCA9IFwKKyAgICAgICAgR1NUX1JFR0lTVFJZPSQoQ0hFQ0tfUkVHSVNUUlkpCisKK1RFU1RTX0VOVklST05NRU5UID0gXAorICAgICAgICAkKFJFR0lTVFJZX0VOVklST05NRU5UKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgR1NUX1BMVUdJTl9TQ0FOTkVSPSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9oZWxwZXJzL2dzdC1wbHVnaW4tc2Nhbm5lciBcCisgICAgICAgIEdTVF9QTFVHSU5fU1lTVEVNX1BBVEg9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBHU1RfUExVR0lOX1BBVEg9JCh0b3BfYnVpbGRkaXIpL3BsdWdpbnMKKworRVhUUkFfRElTVCA9IGV4dHJhY3QucGwKKworRVhBTVBMRVMgPSBcCisJZHluYW1pYyBcCisJJChHTk9NRSkgXAorCWVsZW1lbnRjcmVhdGUgXAorCWVsZW1lbnRtYWtlIFwKKwllbGVtZW50ZmFjdG9yeSBcCisJZWxlbWVudGdldCBcCisJZWxlbWVudGxpbmsgXAorCWJpbiBcCisJcGFkIFwKKwlnaG9zdHBhZCBcCisJaGVsbG93b3JsZCBcCisJaW5pdCBcCisJcXVlcnkgXAorCXR5cGVmaW5kIFwKKwlmYWtlc3JjIFwKKwlwbGF5YmluIFwKKwlkZWNvZGViaW4KKworQlVJTFRfU09VUkNFUyA9IFwKKwllbGVtZW50bWFrZS5jIGVsZW1lbnRjcmVhdGUuYyBlbGVtZW50Z2V0LmMgZWxlbWVudGxpbmsuYyBlbGVtZW50ZmFjdG9yeS5jIFwKKwliaW4uYyBcCisJcGFkLmMgZ2hvc3RwYWQuYyBcCisJZ25vbWUuYyBcCisJaGVsbG93b3JsZC5jIFwKKwlpbml0LmMgXAorCXF1ZXJ5LmMgXAorCXR5cGVmaW5kLmMgZHluYW1pYy5jIFwKKwlmYWtlc3JjLmMgXAorCXBsYXliaW4uYyBkZWNvZGViaW4uYworCitDTEVBTkZJTEVTID0gY29yZSBjb3JlLiogdGVzdC1yZWdpc3RyeS4qICouZ2NubyAqLmdjZGEgJChCVUlMVF9TT1VSQ0VTKQorCitBTV9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQorTERBREQgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoR1NUX09CSl9MSUJTKQorCitlbGVtZW50bWFrZS5jIGVsZW1lbnRjcmVhdGUuYyBlbGVtZW50Z2V0LmMgZWxlbWVudGxpbmsuYyBlbGVtZW50ZmFjdG9yeS5jOiAkKHRvcF9zcmNkaXIpL2RvY3MvbWFudWFsL2Jhc2ljcy1lbGVtZW50cy54bWwKKwkkKFBFUkxfUEFUSCkgJChzcmNkaXIpL2V4dHJhY3QucGwgJEAgJDwKKworYmluLmMgOiAkKHRvcF9zcmNkaXIpL2RvY3MvbWFudWFsL2Jhc2ljcy1iaW5zLnhtbAorCSQoUEVSTF9QQVRIKSAkKHNyY2RpcikvZXh0cmFjdC5wbCAkQCAkPAorCitwYWQuYyBnaG9zdHBhZC5jOiAkKHRvcF9zcmNkaXIpL2RvY3MvbWFudWFsL2Jhc2ljcy1wYWRzLnhtbAorCSQoUEVSTF9QQVRIKSAkKHNyY2RpcikvZXh0cmFjdC5wbCAkQCAkPAorCitnbm9tZS5jOiAkKHRvcF9zcmNkaXIpL2RvY3MvbWFudWFsL2FwcGVuZGl4LWludGVncmF0aW9uLnhtbAorCSQoUEVSTF9QQVRIKSAkKHNyY2RpcikvZXh0cmFjdC5wbCAkQCAkPAorCitoZWxsb3dvcmxkLmM6ICQodG9wX3NyY2RpcikvZG9jcy9tYW51YWwvYmFzaWNzLWhlbGxvd29ybGQueG1sCisJJChQRVJMX1BBVEgpICQoc3JjZGlyKS9leHRyYWN0LnBsICRAICQ8CisKK2luaXQuYzogJCh0b3Bfc3JjZGlyKS9kb2NzL21hbnVhbC9iYXNpY3MtaW5pdC54bWwKKwkkKFBFUkxfUEFUSCkgJChzcmNkaXIpL2V4dHJhY3QucGwgJEAgJDwKKworcXVlcnkuYzogJCh0b3Bfc3JjZGlyKS9kb2NzL21hbnVhbC9hZHZhbmNlZC1wb3NpdGlvbi54bWwKKwkkKFBFUkxfUEFUSCkgJChzcmNkaXIpL2V4dHJhY3QucGwgJEAgJDwKKwordHlwZWZpbmQuYyBkeW5hbWljLmM6ICQodG9wX3NyY2RpcikvZG9jcy9tYW51YWwvYWR2YW5jZWQtYXV0b3BsdWdnaW5nLnhtbAorCSQoUEVSTF9QQVRIKSAkKHNyY2RpcikvZXh0cmFjdC5wbCAkQCAkPAorCitmYWtlc3JjLmM6ICQodG9wX3NyY2RpcikvZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWwKKwkkKFBFUkxfUEFUSCkgJChzcmNkaXIpL2V4dHJhY3QucGwgJEAgJDwKKworcGxheWJpbi5jIGRlY29kZWJpbi5jOiAkKHRvcF9zcmNkaXIpL2RvY3MvbWFudWFsL2hpZ2hsZXZlbC1jb21wb25lbnRzLnhtbAorCSQoUEVSTF9QQVRIKSAkKHNyY2RpcikvZXh0cmFjdC5wbCAkQCAkPAorCitURVNUUyA9IGJpbiBcCisJZWxlbWVudGNyZWF0ZSBlbGVtZW50ZmFjdG9yeSBlbGVtZW50Z2V0IGVsZW1lbnRsaW5rIGVsZW1lbnRtYWtlIFwKKwlnaG9zdHBhZCBpbml0CisKK25vaW5zdF9QUk9HUkFNUyA9ICQoRVhBTVBMRVMpCmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuaW4gYi90ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIzMjNmNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDEwMjEgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK1RFU1RTID0gYmluJChFWEVFWFQpIGVsZW1lbnRjcmVhdGUkKEVYRUVYVCkgZWxlbWVudGZhY3RvcnkkKEVYRUVYVCkgXAorCWVsZW1lbnRnZXQkKEVYRUVYVCkgZWxlbWVudGxpbmskKEVYRUVYVCkgZWxlbWVudG1ha2UkKEVYRUVYVCkgXAorCWdob3N0cGFkJChFWEVFWFQpIGluaXQkKEVYRUVYVCkKK25vaW5zdF9QUk9HUkFNUyA9ICQoYW1fX0VYRUVYVF8yKQorc3ViZGlyID0gdGVzdHMvZXhhbXBsZXMvbWFudWFsCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1weXRob24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXNjcnViLWluY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorYW1fX0VYRUVYVF8xID0KK2FtX19FWEVFWFRfMiA9IGR5bmFtaWMkKEVYRUVYVCkgJChhbV9fRVhFRVhUXzEpIGVsZW1lbnRjcmVhdGUkKEVYRUVYVCkgXAorCWVsZW1lbnRtYWtlJChFWEVFWFQpIGVsZW1lbnRmYWN0b3J5JChFWEVFWFQpIFwKKwllbGVtZW50Z2V0JChFWEVFWFQpIGVsZW1lbnRsaW5rJChFWEVFWFQpIGJpbiQoRVhFRVhUKSBcCisJcGFkJChFWEVFWFQpIGdob3N0cGFkJChFWEVFWFQpIGhlbGxvd29ybGQkKEVYRUVYVCkgXAorCWluaXQkKEVYRUVYVCkgcXVlcnkkKEVYRUVYVCkgdHlwZWZpbmQkKEVYRUVYVCkgXAorCWZha2VzcmMkKEVYRUVYVCkgcGxheWJpbiQoRVhFRVhUKSBkZWNvZGViaW4kKEVYRUVYVCkKK1BST0dSQU1TID0gJChub2luc3RfUFJPR1JBTVMpCitiaW5fU09VUkNFUyA9IGJpbi5jCitiaW5fT0JKRUNUUyA9IGJpbi4kKE9CSkVYVCkKK2Jpbl9MREFERCA9ICQoTERBREQpCithbV9fREVQRU5ERU5DSUVTXzEgPQorYmluX0RFUEVOREVOQ0lFUyA9ICBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK0FNX1ZfbHQgPSAkKGFtX192X2x0XyQoVikpCithbV9fdl9sdF8gPSAkKGFtX192X2x0XyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfbHRfMCA9IC0tc2lsZW50CitkZWNvZGViaW5fU09VUkNFUyA9IGRlY29kZWJpbi5jCitkZWNvZGViaW5fT0JKRUNUUyA9IGRlY29kZWJpbi4kKE9CSkVYVCkKK2RlY29kZWJpbl9MREFERCA9ICQoTERBREQpCitkZWNvZGViaW5fREVQRU5ERU5DSUVTID0gIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorZHluYW1pY19TT1VSQ0VTID0gZHluYW1pYy5jCitkeW5hbWljX09CSkVDVFMgPSBkeW5hbWljLiQoT0JKRVhUKQorZHluYW1pY19MREFERCA9ICQoTERBREQpCitkeW5hbWljX0RFUEVOREVOQ0lFUyA9ICBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2VsZW1lbnRjcmVhdGVfU09VUkNFUyA9IGVsZW1lbnRjcmVhdGUuYworZWxlbWVudGNyZWF0ZV9PQkpFQ1RTID0gZWxlbWVudGNyZWF0ZS4kKE9CSkVYVCkKK2VsZW1lbnRjcmVhdGVfTERBREQgPSAkKExEQUREKQorZWxlbWVudGNyZWF0ZV9ERVBFTkRFTkNJRVMgPSAgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitlbGVtZW50ZmFjdG9yeV9TT1VSQ0VTID0gZWxlbWVudGZhY3RvcnkuYworZWxlbWVudGZhY3RvcnlfT0JKRUNUUyA9IGVsZW1lbnRmYWN0b3J5LiQoT0JKRVhUKQorZWxlbWVudGZhY3RvcnlfTERBREQgPSAkKExEQUREKQorZWxlbWVudGZhY3RvcnlfREVQRU5ERU5DSUVTID0gIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorZWxlbWVudGdldF9TT1VSQ0VTID0gZWxlbWVudGdldC5jCitlbGVtZW50Z2V0X09CSkVDVFMgPSBlbGVtZW50Z2V0LiQoT0JKRVhUKQorZWxlbWVudGdldF9MREFERCA9ICQoTERBREQpCitlbGVtZW50Z2V0X0RFUEVOREVOQ0lFUyA9ICBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2VsZW1lbnRsaW5rX1NPVVJDRVMgPSBlbGVtZW50bGluay5jCitlbGVtZW50bGlua19PQkpFQ1RTID0gZWxlbWVudGxpbmsuJChPQkpFWFQpCitlbGVtZW50bGlua19MREFERCA9ICQoTERBREQpCitlbGVtZW50bGlua19ERVBFTkRFTkNJRVMgPSAgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitlbGVtZW50bWFrZV9TT1VSQ0VTID0gZWxlbWVudG1ha2UuYworZWxlbWVudG1ha2VfT0JKRUNUUyA9IGVsZW1lbnRtYWtlLiQoT0JKRVhUKQorZWxlbWVudG1ha2VfTERBREQgPSAkKExEQUREKQorZWxlbWVudG1ha2VfREVQRU5ERU5DSUVTID0gIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorZmFrZXNyY19TT1VSQ0VTID0gZmFrZXNyYy5jCitmYWtlc3JjX09CSkVDVFMgPSBmYWtlc3JjLiQoT0JKRVhUKQorZmFrZXNyY19MREFERCA9ICQoTERBREQpCitmYWtlc3JjX0RFUEVOREVOQ0lFUyA9ICBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2dob3N0cGFkX1NPVVJDRVMgPSBnaG9zdHBhZC5jCitnaG9zdHBhZF9PQkpFQ1RTID0gZ2hvc3RwYWQuJChPQkpFWFQpCitnaG9zdHBhZF9MREFERCA9ICQoTERBREQpCitnaG9zdHBhZF9ERVBFTkRFTkNJRVMgPSAgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitoZWxsb3dvcmxkX1NPVVJDRVMgPSBoZWxsb3dvcmxkLmMKK2hlbGxvd29ybGRfT0JKRUNUUyA9IGhlbGxvd29ybGQuJChPQkpFWFQpCitoZWxsb3dvcmxkX0xEQUREID0gJChMREFERCkKK2hlbGxvd29ybGRfREVQRU5ERU5DSUVTID0gIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKQoraW5pdF9TT1VSQ0VTID0gaW5pdC5jCitpbml0X09CSkVDVFMgPSBpbml0LiQoT0JKRVhUKQoraW5pdF9MREFERCA9ICQoTERBREQpCitpbml0X0RFUEVOREVOQ0lFUyA9ICBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK3BhZF9TT1VSQ0VTID0gcGFkLmMKK3BhZF9PQkpFQ1RTID0gcGFkLiQoT0JKRVhUKQorcGFkX0xEQUREID0gJChMREFERCkKK3BhZF9ERVBFTkRFTkNJRVMgPSAgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitwbGF5YmluX1NPVVJDRVMgPSBwbGF5YmluLmMKK3BsYXliaW5fT0JKRUNUUyA9IHBsYXliaW4uJChPQkpFWFQpCitwbGF5YmluX0xEQUREID0gJChMREFERCkKK3BsYXliaW5fREVQRU5ERU5DSUVTID0gIFwKKwkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfTUFKT1JNSU5PUkAubGEgXAorCSQoYW1fX0RFUEVOREVOQ0lFU18xKQorcXVlcnlfU09VUkNFUyA9IHF1ZXJ5LmMKK3F1ZXJ5X09CSkVDVFMgPSBxdWVyeS4kKE9CSkVYVCkKK3F1ZXJ5X0xEQUREID0gJChMREFERCkKK3F1ZXJ5X0RFUEVOREVOQ0lFUyA9ICBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK3R5cGVmaW5kX1NPVVJDRVMgPSB0eXBlZmluZC5jCit0eXBlZmluZF9PQkpFQ1RTID0gdHlwZWZpbmQuJChPQkpFWFQpCit0eXBlZmluZF9MREFERCA9ICQoTERBREQpCit0eXBlZmluZF9ERVBFTkRFTkNJRVMgPSAgXAorCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9NQUpPUk1JTk9SQC5sYSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCisJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfJChWKSkKK2FtX192X0NDXyA9ICQoYW1fX3ZfQ0NfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgIiAkQDsKK0FNX1ZfYXQgPSAkKGFtX192X2F0XyQoVikpCithbV9fdl9hdF8gPSAkKGFtX192X2F0XyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfYXRfMCA9IEAKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEXyQoVikpCithbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICIgJEA7CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOXyQoVikpCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitTT1VSQ0VTID0gYmluLmMgZGVjb2RlYmluLmMgZHluYW1pYy5jIGVsZW1lbnRjcmVhdGUuYyBlbGVtZW50ZmFjdG9yeS5jIFwKKwllbGVtZW50Z2V0LmMgZWxlbWVudGxpbmsuYyBlbGVtZW50bWFrZS5jIGZha2VzcmMuYyBnaG9zdHBhZC5jIFwKKwloZWxsb3dvcmxkLmMgaW5pdC5jIHBhZC5jIHBsYXliaW4uYyBxdWVyeS5jIHR5cGVmaW5kLmMKK0RJU1RfU09VUkNFUyA9IGJpbi5jIGRlY29kZWJpbi5jIGR5bmFtaWMuYyBlbGVtZW50Y3JlYXRlLmMgXAorCWVsZW1lbnRmYWN0b3J5LmMgZWxlbWVudGdldC5jIGVsZW1lbnRsaW5rLmMgZWxlbWVudG1ha2UuYyBcCisJZmFrZXNyYy5jIGdob3N0cGFkLmMgaGVsbG93b3JsZC5jIGluaXQuYyBwYWQuYyBwbGF5YmluLmMgXAorCXF1ZXJ5LmMgdHlwZWZpbmQuYworRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworYW1fX3R0eV9jb2xvcnMgPSBcCityZWQ9OyBncm49OyBsZ249OyBibHU9OyBzdGQ9CitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKK0NDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKK0NIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKK0NIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKK0NIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUiA9IEBEQVRBRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAorRExMVE9PTCA9IEBETExUT09MQAorRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKK0VSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACitFWEVFWFQgPSBARVhFRVhUQAorRkZMQUdTID0gQEZGTEFHU0AKK0ZHUkVQID0gQEZHUkVQQAorRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKK0dDT1YgPSBAR0NPVkAKK0dDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAorR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACitHTElCX0xJQlMgPSBAR0xJQl9MSUJTQAorR0xJQl9PTkxZX0NGTEFHUyA9IEBHTElCX09OTFlfQ0ZMQUdTQAorR0xJQl9PTkxZX0xJQlMgPSBAR0xJQl9PTkxZX0xJQlNACitHTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKK0dMSUJfUkVRID0gQEdMSUJfUkVRQAorR01QX0xJQlMgPSBAR01QX0xJQlNACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dSRVAgPSBAR1JFUEAKK0dTTF9MSUJTID0gQEdTTF9MSUJTQAorR1NUX0FHRSA9IEBHU1RfQUdFQAorR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACitHU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACitHU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAorR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKK0dTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAorR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORUAKK0dTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKK0dTVF9ESVNBQkxFX05FVF9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfTkVUX0RFRklORUAKK0dTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACitHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAorR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAorR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKK0dTVF9ESVNBQkxFX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkVACitHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACitHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACitHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORSA9IEBHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORUAKK0dTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAorR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACitHU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAorR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACitHU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKK0dTVF9NQUpPUk1JTk9SID0gQEdTVF9NQUpPUk1JTk9SQAorR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACitHU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACitHU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAorR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACitHU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACitHU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACitHU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAorR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAorR1NUX1BLR19ERVBTID0gQEdTVF9QS0dfREVQU0AKK0dTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACitHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FQAorR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORUAKK0dTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKK0dTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACitHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkUgPSBAR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FQAorR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKK0hBVkVfRE9DQk9PSzJIVE1MID0gQEhBVkVfRE9DQk9PSzJIVE1MQAorSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKK0hBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKK0hBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKK0hBVkVfRklHMkRFViA9IEBIQVZFX0ZJRzJERVZACitIQVZFX0dNUCA9IEBIQVZFX0dNUEAKK0hBVkVfR1NMID0gQEhBVkVfR1NMQAorSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKK0hBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKK0hBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACitIQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKK0hBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACitIT1NUX0NQVSA9IEBIT1NUX0NQVUAKK0hUTUxfRElSID0gQEhUTUxfRElSQAorSU5FVF9BVE9OX0xJQlMgPSBASU5FVF9BVE9OX0xJQlNACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCRElSID0gQExJQkRJUkAKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCTSA9IEBMSUJNQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTE9DQUxFRElSID0gQExPQ0FMRURJUkAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACitQQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAorUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKK1BBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAorUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BFUkxfUEFUSCA9IEBQRVJMX1BBVEhACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQTFVHSU5ESVIgPSBAUExVR0lORElSQAorUE9TVUIgPSBAUE9TVUJACitQUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAorVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAorVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACitXSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACitYTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKK1hTTFRQUk9DID0gQFhTTFRQUk9DQAorWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3BsdWdpbmRpciA9IEBwbHVnaW5kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorCisjIGlmIEhBVkVfTElCR05PTUVVSQorIyBHTk9NRSA9IGdub21lCisjIGVsc2UKK0dOT01FID0gCisjIGVuZGlmCisKKyMgZ25vbWVfTERBREQgPSAkKEdTVF9PQkpfTElCUykgJChMSUJHTk9NRVVJX0xJQlMpCisjIGdub21lX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpICQoTElCR05PTUVVSV9DRkxBR1MpCitDSEVDS19SRUdJU1RSWSA9ICQodG9wX2J1aWxkZGlyKS90ZXN0cy9leGFtcGxlcy9tYW51YWwvdGVzdC1yZWdpc3RyeS5yZWcKK1JFR0lTVFJZX0VOVklST05NRU5UID0gXAorICAgICAgICBHU1RfUkVHSVNUUlk9JChDSEVDS19SRUdJU1RSWSkKKworVEVTVFNfRU5WSVJPTk1FTlQgPSBcCisgICAgICAgICQoUkVHSVNUUllfRU5WSVJPTk1FTlQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBHU1RfUExVR0lOX1NDQU5ORVI9JCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2hlbHBlcnMvZ3N0LXBsdWdpbi1zY2FubmVyIFwKKyAgICAgICAgR1NUX1BMVUdJTl9TWVNURU1fUEFUSD0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIEdTVF9QTFVHSU5fUEFUSD0kKHRvcF9idWlsZGRpcikvcGx1Z2lucworCitFWFRSQV9ESVNUID0gZXh0cmFjdC5wbAorRVhBTVBMRVMgPSBcCisJZHluYW1pYyBcCisJJChHTk9NRSkgXAorCWVsZW1lbnRjcmVhdGUgXAorCWVsZW1lbnRtYWtlIFwKKwllbGVtZW50ZmFjdG9yeSBcCisJZWxlbWVudGdldCBcCisJZWxlbWVudGxpbmsgXAorCWJpbiBcCisJcGFkIFwKKwlnaG9zdHBhZCBcCisJaGVsbG93b3JsZCBcCisJaW5pdCBcCisJcXVlcnkgXAorCXR5cGVmaW5kIFwKKwlmYWtlc3JjIFwKKwlwbGF5YmluIFwKKwlkZWNvZGViaW4KKworQlVJTFRfU09VUkNFUyA9IFwKKwllbGVtZW50bWFrZS5jIGVsZW1lbnRjcmVhdGUuYyBlbGVtZW50Z2V0LmMgZWxlbWVudGxpbmsuYyBlbGVtZW50ZmFjdG9yeS5jIFwKKwliaW4uYyBcCisJcGFkLmMgZ2hvc3RwYWQuYyBcCisJZ25vbWUuYyBcCisJaGVsbG93b3JsZC5jIFwKKwlpbml0LmMgXAorCXF1ZXJ5LmMgXAorCXR5cGVmaW5kLmMgZHluYW1pYy5jIFwKKwlmYWtlc3JjLmMgXAorCXBsYXliaW4uYyBkZWNvZGViaW4uYworCitDTEVBTkZJTEVTID0gY29yZSBjb3JlLiogdGVzdC1yZWdpc3RyeS4qICouZ2NubyAqLmdjZGEgJChCVUlMVF9TT1VSQ0VTKQorQU1fQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykKK0xEQUREID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX01BSk9STUlOT1JALmxhIFwKKwkkKEdTVF9PQkpfTElCUykKKworYWxsOiAkKEJVSUxUX1NPVVJDRVMpCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IHRlc3RzL2V4YW1wbGVzL21hbnVhbC9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisKK2NsZWFuLW5vaW5zdFBST0dSQU1TOgorCUBsaXN0PSckKG5vaW5zdF9QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCisJdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKKwlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QKK2JpbiQoRVhFRVhUKTogJChiaW5fT0JKRUNUUykgJChiaW5fREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgYmluJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKGJpbl9PQkpFQ1RTKSAkKGJpbl9MREFERCkgJChMSUJTKQorZGVjb2RlYmluJChFWEVFWFQpOiAkKGRlY29kZWJpbl9PQkpFQ1RTKSAkKGRlY29kZWJpbl9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBkZWNvZGViaW4kKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZGVjb2RlYmluX09CSkVDVFMpICQoZGVjb2RlYmluX0xEQUREKSAkKExJQlMpCitkeW5hbWljJChFWEVFWFQpOiAkKGR5bmFtaWNfT0JKRUNUUykgJChkeW5hbWljX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGR5bmFtaWMkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZHluYW1pY19PQkpFQ1RTKSAkKGR5bmFtaWNfTERBREQpICQoTElCUykKK2VsZW1lbnRjcmVhdGUkKEVYRUVYVCk6ICQoZWxlbWVudGNyZWF0ZV9PQkpFQ1RTKSAkKGVsZW1lbnRjcmVhdGVfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgZWxlbWVudGNyZWF0ZSQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChlbGVtZW50Y3JlYXRlX09CSkVDVFMpICQoZWxlbWVudGNyZWF0ZV9MREFERCkgJChMSUJTKQorZWxlbWVudGZhY3RvcnkkKEVYRUVYVCk6ICQoZWxlbWVudGZhY3RvcnlfT0JKRUNUUykgJChlbGVtZW50ZmFjdG9yeV9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBlbGVtZW50ZmFjdG9yeSQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChlbGVtZW50ZmFjdG9yeV9PQkpFQ1RTKSAkKGVsZW1lbnRmYWN0b3J5X0xEQUREKSAkKExJQlMpCitlbGVtZW50Z2V0JChFWEVFWFQpOiAkKGVsZW1lbnRnZXRfT0JKRUNUUykgJChlbGVtZW50Z2V0X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGVsZW1lbnRnZXQkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudGdldF9PQkpFQ1RTKSAkKGVsZW1lbnRnZXRfTERBREQpICQoTElCUykKK2VsZW1lbnRsaW5rJChFWEVFWFQpOiAkKGVsZW1lbnRsaW5rX09CSkVDVFMpICQoZWxlbWVudGxpbmtfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgZWxlbWVudGxpbmskKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudGxpbmtfT0JKRUNUUykgJChlbGVtZW50bGlua19MREFERCkgJChMSUJTKQorZWxlbWVudG1ha2UkKEVYRUVYVCk6ICQoZWxlbWVudG1ha2VfT0JKRUNUUykgJChlbGVtZW50bWFrZV9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBlbGVtZW50bWFrZSQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgJChlbGVtZW50bWFrZV9PQkpFQ1RTKSAkKGVsZW1lbnRtYWtlX0xEQUREKSAkKExJQlMpCitmYWtlc3JjJChFWEVFWFQpOiAkKGZha2VzcmNfT0JKRUNUUykgJChmYWtlc3JjX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGZha2VzcmMkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZmFrZXNyY19PQkpFQ1RTKSAkKGZha2VzcmNfTERBREQpICQoTElCUykKK2dob3N0cGFkJChFWEVFWFQpOiAkKGdob3N0cGFkX09CSkVDVFMpICQoZ2hvc3RwYWRfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgZ2hvc3RwYWQkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ2hvc3RwYWRfT0JKRUNUUykgJChnaG9zdHBhZF9MREFERCkgJChMSUJTKQoraGVsbG93b3JsZCQoRVhFRVhUKTogJChoZWxsb3dvcmxkX09CSkVDVFMpICQoaGVsbG93b3JsZF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBoZWxsb3dvcmxkJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKGhlbGxvd29ybGRfT0JKRUNUUykgJChoZWxsb3dvcmxkX0xEQUREKSAkKExJQlMpCitpbml0JChFWEVFWFQpOiAkKGluaXRfT0JKRUNUUykgJChpbml0X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGluaXQkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoaW5pdF9PQkpFQ1RTKSAkKGluaXRfTERBREQpICQoTElCUykKK3BhZCQoRVhFRVhUKTogJChwYWRfT0JKRUNUUykgJChwYWRfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgcGFkJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKHBhZF9PQkpFQ1RTKSAkKHBhZF9MREFERCkgJChMSUJTKQorcGxheWJpbiQoRVhFRVhUKTogJChwbGF5YmluX09CSkVDVFMpICQocGxheWJpbl9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBwbGF5YmluJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKHBsYXliaW5fT0JKRUNUUykgJChwbGF5YmluX0xEQUREKSAkKExJQlMpCitxdWVyeSQoRVhFRVhUKTogJChxdWVyeV9PQkpFQ1RTKSAkKHF1ZXJ5X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHF1ZXJ5JChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChMSU5LKSAkKHF1ZXJ5X09CSkVDVFMpICQocXVlcnlfTERBREQpICQoTElCUykKK3R5cGVmaW5kJChFWEVFWFQpOiAkKHR5cGVmaW5kX09CSkVDVFMpICQodHlwZWZpbmRfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgdHlwZWZpbmQkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQodHlwZWZpbmRfT0JKRUNUUykgJCh0eXBlZmluZF9MREFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYmluLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9kZWNvZGViaW4uUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2R5bmFtaWMuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2VsZW1lbnRjcmVhdGUuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2VsZW1lbnRmYWN0b3J5LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9lbGVtZW50Z2V0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9lbGVtZW50bGluay5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZWxlbWVudG1ha2UuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Zha2VzcmMuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dob3N0cGFkLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9oZWxsb3dvcmxkLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9pbml0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wYWQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3BsYXliaW4uUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3F1ZXJ5LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90eXBlZmluZC5Qb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitjaGVjay1URVNUUzogJChURVNUUykKKwlAZmFpbGVkPTA7IGFsbD0wOyB4ZmFpbD0wOyB4cGFzcz0wOyBza2lwPTA7IFwKKwlzcmNkaXI9JChzcmNkaXIpOyBleHBvcnQgc3JjZGlyOyBcCisJbGlzdD0nICQoVEVTVFMpICc7IFwKKwkkKGFtX190dHlfY29sb3JzKTsgXAorCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAorCSAgZm9yIHRzdCBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAuLyQkdHN0OyB0aGVuIGRpcj0uLzsgXAorCSAgICBlbGlmIHRlc3QgLWYgJCR0c3Q7IHRoZW4gZGlyPTsgXAorCSAgICBlbHNlIGRpcj0iJChzcmNkaXIpLyI7IGZpOyBcCisJICAgIGlmICQoVEVTVFNfRU5WSVJPTk1FTlQpICQke2Rpcn0kJHRzdDsgdGhlbiBcCisJICAgICAgYWxsPWBleHByICQkYWxsICsgMWA7IFwKKwkgICAgICBjYXNlICIgJChYRkFJTF9URVNUUykgIiBpbiBcCisJICAgICAgKltcIFwJXSQkdHN0W1wgXAldKikgXAorCQl4cGFzcz1gZXhwciAkJHhwYXNzICsgMWA7IFwKKwkJZmFpbGVkPWBleHByICQkZmFpbGVkICsgMWA7IFwKKwkJY29sPSQkcmVkOyByZXM9WFBBU1M7IFwKKwkgICAgICA7OyBcCisJICAgICAgKikgXAorCQljb2w9JCRncm47IHJlcz1QQVNTOyBcCisJICAgICAgOzsgXAorCSAgICAgIGVzYWM7IFwKKwkgICAgZWxpZiB0ZXN0ICQkPyAtbmUgNzc7IHRoZW4gXAorCSAgICAgIGFsbD1gZXhwciAkJGFsbCArIDFgOyBcCisJICAgICAgY2FzZSAiICQoWEZBSUxfVEVTVFMpICIgaW4gXAorCSAgICAgICpbXCBcCV0kJHRzdFtcIFwJXSopIFwKKwkJeGZhaWw9YGV4cHIgJCR4ZmFpbCArIDFgOyBcCisJCWNvbD0kJGxnbjsgcmVzPVhGQUlMOyBcCisJICAgICAgOzsgXAorCSAgICAgICopIFwKKwkJZmFpbGVkPWBleHByICQkZmFpbGVkICsgMWA7IFwKKwkJY29sPSQkcmVkOyByZXM9RkFJTDsgXAorCSAgICAgIDs7IFwKKwkgICAgICBlc2FjOyBcCisJICAgIGVsc2UgXAorCSAgICAgIHNraXA9YGV4cHIgJCRza2lwICsgMWA7IFwKKwkgICAgICBjb2w9JCRibHU7IHJlcz1TS0lQOyBcCisJICAgIGZpOyBcCisJICAgIGVjaG8gIiQke2NvbH0kJHJlcyQke3N0ZH06ICQkdHN0IjsgXAorCSAgZG9uZTsgXAorCSAgaWYgdGVzdCAiJCRhbGwiIC1lcSAxOyB0aGVuIFwKKwkgICAgdGVzdHM9InRlc3QiOyBcCisJICAgIEFsbD0iIjsgXAorCSAgZWxzZSBcCisJICAgIHRlc3RzPSJ0ZXN0cyI7IFwKKwkgICAgQWxsPSJBbGwgIjsgXAorCSAgZmk7IFwKKwkgIGlmIHRlc3QgIiQkZmFpbGVkIiAtZXEgMDsgdGhlbiBcCisJICAgIGlmIHRlc3QgIiQkeGZhaWwiIC1lcSAwOyB0aGVuIFwKKwkgICAgICBiYW5uZXI9IiQkQWxsJCRhbGwgJCR0ZXN0cyBwYXNzZWQiOyBcCisJICAgIGVsc2UgXAorCSAgICAgIGlmIHRlc3QgIiQkeGZhaWwiIC1lcSAxOyB0aGVuIGZhaWx1cmVzPWZhaWx1cmU7IGVsc2UgZmFpbHVyZXM9ZmFpbHVyZXM7IGZpOyBcCisJICAgICAgYmFubmVyPSIkJEFsbCQkYWxsICQkdGVzdHMgYmVoYXZlZCBhcyBleHBlY3RlZCAoJCR4ZmFpbCBleHBlY3RlZCAkJGZhaWx1cmVzKSI7IFwKKwkgICAgZmk7IFwKKwkgIGVsc2UgXAorCSAgICBpZiB0ZXN0ICIkJHhwYXNzIiAtZXEgMDsgdGhlbiBcCisJICAgICAgYmFubmVyPSIkJGZhaWxlZCBvZiAkJGFsbCAkJHRlc3RzIGZhaWxlZCI7IFwKKwkgICAgZWxzZSBcCisJICAgICAgaWYgdGVzdCAiJCR4cGFzcyIgLWVxIDE7IHRoZW4gcGFzc2VzPXBhc3M7IGVsc2UgcGFzc2VzPXBhc3NlczsgZmk7IFwKKwkgICAgICBiYW5uZXI9IiQkZmFpbGVkIG9mICQkYWxsICQkdGVzdHMgZGlkIG5vdCBiZWhhdmUgYXMgZXhwZWN0ZWQgKCQkeHBhc3MgdW5leHBlY3RlZCAkJHBhc3NlcykiOyBcCisJICAgIGZpOyBcCisJICBmaTsgXAorCSAgZGFzaGVzPSIkJGJhbm5lciI7IFwKKwkgIHNraXBwZWQ9IiI7IFwKKwkgIGlmIHRlc3QgIiQkc2tpcCIgLW5lIDA7IHRoZW4gXAorCSAgICBpZiB0ZXN0ICIkJHNraXAiIC1lcSAxOyB0aGVuIFwKKwkgICAgICBza2lwcGVkPSIoJCRza2lwIHRlc3Qgd2FzIG5vdCBydW4pIjsgXAorCSAgICBlbHNlIFwKKwkgICAgICBza2lwcGVkPSIoJCRza2lwIHRlc3RzIHdlcmUgbm90IHJ1bikiOyBcCisJICAgIGZpOyBcCisJICAgIHRlc3QgYGVjaG8gIiQkc2tpcHBlZCIgfCB3YyAtY2AgLWxlIGBlY2hvICIkJGJhbm5lciIgfCB3YyAtY2AgfHwgXAorCSAgICAgIGRhc2hlcz0iJCRza2lwcGVkIjsgXAorCSAgZmk7IFwKKwkgIHJlcG9ydD0iIjsgXAorCSAgaWYgdGVzdCAiJCRmYWlsZWQiIC1uZSAwICYmIHRlc3QgLW4gIiQoUEFDS0FHRV9CVUdSRVBPUlQpIjsgdGhlbiBcCisJICAgIHJlcG9ydD0iUGxlYXNlIHJlcG9ydCB0byAkKFBBQ0tBR0VfQlVHUkVQT1JUKSI7IFwKKwkgICAgdGVzdCBgZWNobyAiJCRyZXBvcnQiIHwgd2MgLWNgIC1sZSBgZWNobyAiJCRiYW5uZXIiIHwgd2MgLWNgIHx8IFwKKwkgICAgICBkYXNoZXM9IiQkcmVwb3J0IjsgXAorCSAgZmk7IFwKKwkgIGRhc2hlcz1gZWNobyAiJCRkYXNoZXMiIHwgc2VkIHMvLi89L2dgOyBcCisJICBpZiB0ZXN0ICIkJGZhaWxlZCIgLWVxIDA7IHRoZW4gXAorCSAgICBlY2hvICIkJGdybiQkZGFzaGVzIjsgXAorCSAgZWxzZSBcCisJICAgIGVjaG8gIiQkcmVkJCRkYXNoZXMiOyBcCisJICBmaTsgXAorCSAgZWNobyAiJCRiYW5uZXIiOyBcCisJICB0ZXN0IC16ICIkJHNraXBwZWQiIHx8IGVjaG8gIiQkc2tpcHBlZCI7IFwKKwkgIHRlc3QgLXogIiQkcmVwb3J0IiB8fCBlY2hvICIkJHJlcG9ydCI7IFwKKwkgIGVjaG8gIiQkZGFzaGVzJCRzdGQiOyBcCisJICB0ZXN0ICIkJGZhaWxlZCIgLWVxIDA7IFwKKwllbHNlIDo7IGZpCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrLVRFU1RTCitjaGVjazogJChCVUlMVF9TT1VSQ0VTKQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoUFJPR1JBTVMpCitpbnN0YWxsZGlyczoKK2luc3RhbGw6ICQoQlVJTFRfU09VUkNFUykKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChDTEVBTkZJTEVTKQorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCisJLXRlc3QgLXogIiQoQlVJTFRfU09VUkNFUykiIHx8IHJtIC1mICQoQlVJTFRfU09VUkNFUykKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIFwKKwltb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbToKKworLk1BS0U6IGFsbCBjaGVjayBjaGVjay1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stVEVTVFMgY2hlY2stYW0gY2xlYW4gXAorCWNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBjdGFncyBcCisJZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCisJaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCisJaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCisJaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKKwlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAorCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCisJaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKKwltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisJdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisKKworZWxlbWVudG1ha2UuYyBlbGVtZW50Y3JlYXRlLmMgZWxlbWVudGdldC5jIGVsZW1lbnRsaW5rLmMgZWxlbWVudGZhY3RvcnkuYzogJCh0b3Bfc3JjZGlyKS9kb2NzL21hbnVhbC9iYXNpY3MtZWxlbWVudHMueG1sCisJJChQRVJMX1BBVEgpICQoc3JjZGlyKS9leHRyYWN0LnBsICRAICQ8CisKK2Jpbi5jIDogJCh0b3Bfc3JjZGlyKS9kb2NzL21hbnVhbC9iYXNpY3MtYmlucy54bWwKKwkkKFBFUkxfUEFUSCkgJChzcmNkaXIpL2V4dHJhY3QucGwgJEAgJDwKKworcGFkLmMgZ2hvc3RwYWQuYzogJCh0b3Bfc3JjZGlyKS9kb2NzL21hbnVhbC9iYXNpY3MtcGFkcy54bWwKKwkkKFBFUkxfUEFUSCkgJChzcmNkaXIpL2V4dHJhY3QucGwgJEAgJDwKKworZ25vbWUuYzogJCh0b3Bfc3JjZGlyKS9kb2NzL21hbnVhbC9hcHBlbmRpeC1pbnRlZ3JhdGlvbi54bWwKKwkkKFBFUkxfUEFUSCkgJChzcmNkaXIpL2V4dHJhY3QucGwgJEAgJDwKKworaGVsbG93b3JsZC5jOiAkKHRvcF9zcmNkaXIpL2RvY3MvbWFudWFsL2Jhc2ljcy1oZWxsb3dvcmxkLnhtbAorCSQoUEVSTF9QQVRIKSAkKHNyY2RpcikvZXh0cmFjdC5wbCAkQCAkPAorCitpbml0LmM6ICQodG9wX3NyY2RpcikvZG9jcy9tYW51YWwvYmFzaWNzLWluaXQueG1sCisJJChQRVJMX1BBVEgpICQoc3JjZGlyKS9leHRyYWN0LnBsICRAICQ8CisKK3F1ZXJ5LmM6ICQodG9wX3NyY2RpcikvZG9jcy9tYW51YWwvYWR2YW5jZWQtcG9zaXRpb24ueG1sCisJJChQRVJMX1BBVEgpICQoc3JjZGlyKS9leHRyYWN0LnBsICRAICQ8CisKK3R5cGVmaW5kLmMgZHluYW1pYy5jOiAkKHRvcF9zcmNkaXIpL2RvY3MvbWFudWFsL2FkdmFuY2VkLWF1dG9wbHVnZ2luZy54bWwKKwkkKFBFUkxfUEFUSCkgJChzcmNkaXIpL2V4dHJhY3QucGwgJEAgJDwKKworZmFrZXNyYy5jOiAkKHRvcF9zcmNkaXIpL2RvY3MvbWFudWFsL2FkdmFuY2VkLWRhdGFhY2Nlc3MueG1sCisJJChQRVJMX1BBVEgpICQoc3JjZGlyKS9leHRyYWN0LnBsICRAICQ8CisKK3BsYXliaW4uYyBkZWNvZGViaW4uYzogJCh0b3Bfc3JjZGlyKS9kb2NzL21hbnVhbC9oaWdobGV2ZWwtY29tcG9uZW50cy54bWwKKwkkKFBFUkxfUEFUSCkgJChzcmNkaXIpL2V4dHJhY3QucGwgJEAgJDwKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2Jpbi5jIGIvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2Jpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkY2RiYWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9leGFtcGxlcy9tYW51YWwvYmluLmMKQEAgLTAsMCArMSwzMiBAQAorCisvKioqIGJsb2NrIGEgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYmFzaWNzLWJpbnMueG1sICoqKi8KKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKK2ludAorbWFpbiAoaW50ICAgYXJnYywKKyAgICAgIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgR3N0RWxlbWVudCAqYmluLCAqcGlwZWxpbmUsICpzb3VyY2UsICpzaW5rOworCisgIC8qIGluaXQgKi8KKyAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7CisKKyAgLyogY3JlYXRlICovCisgIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoIm15X3BpcGVsaW5lIik7CisgIGJpbiA9IGdzdF9iaW5fbmV3ICgibXlfYmluIik7CisgIHNvdXJjZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAic291cmNlIik7CisgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7CisKKyAgLyogRmlyc3QgYWRkIHRoZSBlbGVtZW50cyB0byB0aGUgYmluICovCisgIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKGJpbiksIHNvdXJjZSwgc2luaywgTlVMTCk7CisgIC8qIGFkZCB0aGUgYmluIHRvIHRoZSBwaXBlbGluZSAqLworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBiaW4pOworCisgIC8qIGxpbmsgdGhlIGVsZW1lbnRzICovCisgIGdzdF9lbGVtZW50X2xpbmsgKHNvdXJjZSwgc2luayk7CisKKy8qKiogYmxvY2sgYiAgZnJvbSAuLi8uLi8uLi9kb2NzL21hbnVhbC9iYXNpY3MtYmlucy54bWwgKioqLworICByZXR1cm4gMDsKKworLyoqKiBibG9jayBjICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2Jhc2ljcy1iaW5zLnhtbCAqKiovCit9CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9tYW51YWwvZGVjb2RlYmluLmMgYi90ZXN0cy9leGFtcGxlcy9tYW51YWwvZGVjb2RlYmluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZiYmI1ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9kZWNvZGViaW4uYwpAQCAtMCwwICsxLDEyOSBAQAorCisvKioqIGJsb2NrIGEgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvaGlnaGxldmVsLWNvbXBvbmVudHMueG1sICoqKi8KKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKKy8qKiogYmxvY2sgYiAgZnJvbSAuLi8uLi8uLi9kb2NzL21hbnVhbC9oaWdobGV2ZWwtY29tcG9uZW50cy54bWwgKioqLworc3RhdGljIGdib29sZWFuCitteV9idXNfY2FsbGJhY2sgKEdzdEJ1cyAgICAgKmJ1cywKKwkJIEdzdE1lc3NhZ2UgKm1lc3NhZ2UsCisJCSBncG9pbnRlciAgICBkYXRhKQoreworICBHTWFpbkxvb3AgKmxvb3AgPSBkYXRhOworCisgIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkpIHsKKyAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOiB7CisgICAgICBHRXJyb3IgKmVycjsKKyAgICAgIGdjaGFyICpkZWJ1ZzsKKworICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1lc3NhZ2UsICZlcnIsICZkZWJ1Zyk7CisgICAgICBnX3ByaW50ICgiRXJyb3I6ICVzXG4iLCBlcnItPm1lc3NhZ2UpOworICAgICAgZ19lcnJvcl9mcmVlIChlcnIpOworICAgICAgZ19mcmVlIChkZWJ1Zyk7CisKKyAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOgorICAgICAgLyogZW5kLW9mLXN0cmVhbSAqLworICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgLyogdW5oYW5kbGVkIG1lc3NhZ2UgKi8KKyAgICAgIGJyZWFrOworICB9CisKKyAgLyogcmVtb3ZlIG1lc3NhZ2UgZnJvbSB0aGUgcXVldWUgKi8KKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qKiogYmxvY2sgYyAgZnJvbSAuLi8uLi8uLi9kb2NzL21hbnVhbC9oaWdobGV2ZWwtY29tcG9uZW50cy54bWwgKioqLworR3N0RWxlbWVudCAqcGlwZWxpbmUsICphdWRpbzsKKworc3RhdGljIHZvaWQKK2NiX25ld3BhZCAoR3N0RWxlbWVudCAqZGVjb2RlYmluLAorCSAgIEdzdFBhZCAgICAgKnBhZCwKKwkgICBnYm9vbGVhbiAgICBsYXN0LAorCSAgIGdwb2ludGVyICAgIGRhdGEpCit7CisgIEdzdENhcHMgKmNhcHM7CisgIEdzdFN0cnVjdHVyZSAqc3RyOworICBHc3RQYWQgKmF1ZGlvcGFkOworCisgIC8qIG9ubHkgbGluayBvbmNlICovCisgIGF1ZGlvcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGF1ZGlvLCAic2luayIpOworICBpZiAoR1NUX1BBRF9JU19MSU5LRUQgKGF1ZGlvcGFkKSkgeworICAgIGdfb2JqZWN0X3VucmVmIChhdWRpb3BhZCk7CisgICAgcmV0dXJuOworICB9CisKKyAgLyogY2hlY2sgbWVkaWEgdHlwZSAqLworICBjYXBzID0gZ3N0X3BhZF9nZXRfY2FwcyAocGFkLCBOVUxMKTsKKyAgc3RyID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7CisgIGlmICghZ19zdHJyc3RyIChnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzdHIpLCAiYXVkaW8iKSkgeworICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChhdWRpb3BhZCk7CisgICAgcmV0dXJuOworICB9CisgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKKworICAvKiBsaW5rJ24ncGxheSAqLworICBnc3RfcGFkX2xpbmsgKHBhZCwgYXVkaW9wYWQpOworCisgIGdfb2JqZWN0X3VucmVmIChhdWRpb3BhZCk7Cit9CisKK2dpbnQKK21haW4gKGdpbnQgICBhcmdjLAorICAgICAgZ2NoYXIgKmFyZ3ZbXSkKK3sKKyAgR01haW5Mb29wICpsb29wOworICBHc3RFbGVtZW50ICpzcmMsICpkZWMsICpjb252LCAqc2luazsKKyAgR3N0UGFkICphdWRpb3BhZDsKKyAgR3N0QnVzICpidXM7CisKKyAgLyogaW5pdCBHU3RyZWFtZXIgKi8KKyAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7CisgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKKworICAvKiBtYWtlIHN1cmUgd2UgaGF2ZSBpbnB1dCAqLworICBpZiAoYXJnYyAhPSAyKSB7CisgICAgZ19wcmludCAoIlVzYWdlOiAlcyA8ZmlsZW5hbWU+XG4iLCBhcmd2WzBdKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICAvKiBzZXR1cCAqLworICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOworCisgIGJ1cyA9IGdzdF9waXBlbGluZV9nZXRfYnVzIChHU1RfUElQRUxJTkUgKHBpcGVsaW5lKSk7CisgIGdzdF9idXNfYWRkX3dhdGNoIChidXMsIG15X2J1c19jYWxsYmFjaywgbG9vcCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7CisKKyAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmlsZXNyYyIsICJzb3VyY2UiKTsKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3JjKSwgImxvY2F0aW9uIiwgYXJndlsxXSwgTlVMTCk7CisgIGRlYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImRlY29kZWJpbiIsICJkZWNvZGVyIik7CisgIGdfc2lnbmFsX2Nvbm5lY3QgKGRlYywgIm5ldy1kZWNvZGVkLXBhZCIsIEdfQ0FMTEJBQ0sgKGNiX25ld3BhZCksIE5VTEwpOworICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIHNyYywgZGVjLCBOVUxMKTsKKyAgZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBkZWMpOworCisgIC8qIGNyZWF0ZSBhdWRpbyBvdXRwdXQgKi8KKyAgYXVkaW8gPSBnc3RfYmluX25ldyAoImF1ZGlvYmluIik7CisgIGNvbnYgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhdWRpb2NvbnZlcnQiLCAiYWNvbnYiKTsKKyAgYXVkaW9wYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoY29udiwgInNpbmsiKTsKKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImFsc2FzaW5rIiwgInNpbmsiKTsKKyAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAoYXVkaW8pLCBjb252LCBzaW5rLCBOVUxMKTsKKyAgZ3N0X2VsZW1lbnRfbGluayAoY29udiwgc2luayk7CisgIGdzdF9lbGVtZW50X2FkZF9wYWQgKGF1ZGlvLAorICAgICAgZ3N0X2dob3N0X3BhZF9uZXcgKCJzaW5rIiwgYXVkaW9wYWQpKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoYXVkaW9wYWQpOworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBhdWRpbyk7CisKKyAgLyogcnVuICovCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKKworICAvKiBjbGVhbnVwICovCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAocGlwZWxpbmUpKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9keW5hbWljLmMgYi90ZXN0cy9leGFtcGxlcy9tYW51YWwvZHluYW1pYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMzNlZjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9leGFtcGxlcy9tYW51YWwvZHluYW1pYy5jCkBAIC0wLDAgKzEsMzMwIEBACisKKy8qKiogYmxvY2sgYSAgZnJvbSAuLi8uLi8uLi9kb2NzL21hbnVhbC9hZHZhbmNlZC1hdXRvcGx1Z2dpbmcueG1sICoqKi8KKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKK0dzdEVsZW1lbnQgKnBpcGVsaW5lOworCisvKioqIGJsb2NrIGIgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYWR2YW5jZWQtYXV0b3BsdWdnaW5nLnhtbCAqKiovCitzdGF0aWMgR0xpc3QgKmZhY3RvcmllczsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSByZWdpc3RyeSBsb2FkZXIuIEl0cyByZXR1cm4gdmFsdWUKKyAqIChUUlVFIG9yIEZBTFNFKSBkZWNpZGVzIHdoZXRoZXIgdGhlIGdpdmVuIGZlYXR1cmUgd2lsbCBiZSBpbmNsdWRlZAorICogaW4gdGhlIGxpc3QgdGhhdCB3ZSdyZSBnZW5lcmF0aW5nIGZ1cnRoZXIgZG93bi4KKyAqLworCitzdGF0aWMgZ2Jvb2xlYW4KK2NiX2ZlYXR1cmVfZmlsdGVyIChHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlLAorCQkgICBncG9pbnRlciAgICAgICAgICBkYXRhKQoreworICBjb25zdCBnY2hhciAqa2xhc3M7CisgIGd1aW50IHJhbms7CisKKyAgLyogd2Ugb25seSBjYXJlIGFib3V0IGVsZW1lbnQgZmFjdG9yaWVzICovCisgIGlmICghR1NUX0lTX0VMRU1FTlRfRkFDVE9SWSAoZmVhdHVyZSkpCisgICAgcmV0dXJuIEZBTFNFOworCisgIC8qIG9ubHkgcGFyc2VycywgZGVtdXhlcnMgYW5kIGRlY29kZXJzICovCisgIGtsYXNzID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfa2xhc3MgKEdTVF9FTEVNRU5UX0ZBQ1RPUlkgKGZlYXR1cmUpKTsKKyAgaWYgKGdfc3RycnN0ciAoa2xhc3MsICJEZW11eCIpID09IE5VTEwgJiYKKyAgICAgIGdfc3RycnN0ciAoa2xhc3MsICJEZWNvZGVyIikgPT0gTlVMTCAmJgorICAgICAgZ19zdHJyc3RyIChrbGFzcywgIlBhcnNlIikgPT0gTlVMTCkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgLyogb25seSBzZWxlY3QgZWxlbWVudHMgd2l0aCBhdXRvcGx1Z2dpbmcgcmFuayAqLworICByYW5rID0gZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9yYW5rIChmZWF0dXJlKTsKKyAgaWYgKHJhbmsgPCBHU1RfUkFOS19NQVJHSU5BTCkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBzb3J0IGZlYXR1cmVzIGJ5IHJhbmsuCisgKi8KKworc3RhdGljIGdpbnQKK2NiX2NvbXBhcmVfcmFua3MgKEdzdFBsdWdpbkZlYXR1cmUgKmYxLAorCQkgIEdzdFBsdWdpbkZlYXR1cmUgKmYyKQoreworICByZXR1cm4gZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9yYW5rIChmMikgLSBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3JhbmsgKGYxKTsKK30KKworc3RhdGljIHZvaWQKK2luaXRfZmFjdG9yaWVzICh2b2lkKQoreworICAvKiBmaXJzdCBmaWx0ZXIgb3V0IHRoZSBpbnRlcmVzdGluZyBlbGVtZW50IGZhY3RvcmllcyAqLworICBmYWN0b3JpZXMgPSBnc3RfcmVnaXN0cnlfZmVhdHVyZV9maWx0ZXIgKAorICAgICAgZ3N0X3JlZ2lzdHJ5X2dldF9kZWZhdWx0ICgpLAorICAgICAgKEdzdFBsdWdpbkZlYXR1cmVGaWx0ZXIpIGNiX2ZlYXR1cmVfZmlsdGVyLCBGQUxTRSwgTlVMTCk7CisKKyAgLyogc29ydCB0aGVtIGFjY29yZGluZyB0byB0aGVpciByYW5rcyAqLworICBmYWN0b3JpZXMgPSBnX2xpc3Rfc29ydCAoZmFjdG9yaWVzLCAoR0NvbXBhcmVGdW5jKSBjYl9jb21wYXJlX3JhbmtzKTsKK30KKworLyoqKiBibG9jayBjICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2FkdmFuY2VkLWF1dG9wbHVnZ2luZy54bWwgKioqLworc3RhdGljIHZvaWQgdHJ5X3RvX3BsdWcgKEdzdFBhZCAqcGFkLCBjb25zdCBHc3RDYXBzICpjYXBzKTsKKworc3RhdGljIEdzdEVsZW1lbnQgKmF1ZGlvc2luazsKKworc3RhdGljIHZvaWQKK2NiX25ld3BhZCAoR3N0RWxlbWVudCAqZWxlbWVudCwKKwkgICBHc3RQYWQgICAgICpwYWQsCisJICAgZ3BvaW50ZXIgICAgZGF0YSkKK3sKKyAgR3N0Q2FwcyAqY2FwczsKKworICBjYXBzID0gZ3N0X3BhZF9nZXRfY2FwcyAocGFkLCBOVUxMKTsKKyAgdHJ5X3RvX3BsdWcgKHBhZCwgY2Fwcyk7CisgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKK30KKworc3RhdGljIHZvaWQKK2Nsb3NlX2xpbmsgKEdzdFBhZCAgICAgICpzcmNwYWQsCisJICAgIEdzdEVsZW1lbnQgICpzaW5rZWxlbWVudCwKKwkgICAgY29uc3QgZ2NoYXIgKnBhZG5hbWUsCisJICAgIGNvbnN0IEdMaXN0ICp0ZW1wbGxpc3QpCit7CisgIEdzdFBhZCAqcGFkOworICBnYm9vbGVhbiBoYXNfZHluYW1pY19wYWRzID0gRkFMU0U7CisKKyAgZ19wcmludCAoIlBsdWdnaW5nIHBhZCAlczolcyB0byBuZXdseSBjcmVhdGVkICVzOiVzXG4iLAorCSAgIGdzdF9vYmplY3RfZ2V0X25hbWUgKEdTVF9PQkpFQ1QgKGdzdF9wYWRfZ2V0X3BhcmVudCAoc3JjcGFkKSkpLAorCSAgIGdzdF9wYWRfZ2V0X25hbWUgKHNyY3BhZCksCisJICAgZ3N0X29iamVjdF9nZXRfbmFtZSAoR1NUX09CSkVDVCAoc2lua2VsZW1lbnQpKSwgcGFkbmFtZSk7CisKKyAgLyogYWRkIHRoZSBlbGVtZW50IHRvIHRoZSBwaXBlbGluZSBhbmQgc2V0IGNvcnJlY3Qgc3RhdGUgKi8KKyAgaWYgKHNpbmtlbGVtZW50ICE9IGF1ZGlvc2luaykgeworICAgIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNpbmtlbGVtZW50KTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNpbmtlbGVtZW50LCBHU1RfU1RBVEVfUkVBRFkpOworICB9CisgIHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rZWxlbWVudCwgcGFkbmFtZSk7CisgIGdzdF9wYWRfbGluayAoc3JjcGFkLCBwYWQpOworICBpZiAoc2lua2VsZW1lbnQgIT0gYXVkaW9zaW5rKSB7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzaW5rZWxlbWVudCwgR1NUX1NUQVRFX1BBVVNFRCk7CisgIH0KKyAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAocGFkKSk7CisKKyAgLyogaWYgd2UgaGF2ZSBzdGF0aWMgc291cmNlIHBhZHMsIGxpbmsgdGhvc2UuIElmIHdlIGhhdmUgZHluYW1pYworICAgKiBzb3VyY2UgcGFkcywgbGlzdGVuIGZvciBwYWQtYWRkZWQgc2lnbmFscyBvbiB0aGUgZWxlbWVudCAqLworICBmb3IgKCA7IHRlbXBsbGlzdCAhPSBOVUxMOyB0ZW1wbGxpc3QgPSB0ZW1wbGxpc3QtPm5leHQpIHsKKyAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqdGVtcGwgPSB0ZW1wbGxpc3QtPmRhdGE7CisKKyAgICAvKiBvbmx5IHNvdXJjZXBhZHMsIG5vIHJlcXVlc3QgcGFkcyAqLworICAgIGlmICh0ZW1wbC0+ZGlyZWN0aW9uICE9IEdTVF9QQURfU1JDIHx8CisgICAgICAgIHRlbXBsLT5wcmVzZW5jZSA9PSBHU1RfUEFEX1JFUVVFU1QpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIHN3aXRjaCAodGVtcGwtPnByZXNlbmNlKSB7CisgICAgICBjYXNlIEdTVF9QQURfQUxXQVlTOiB7CisgICAgICAgIEdzdFBhZCAqcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNpbmtlbGVtZW50LCB0ZW1wbC0+bmFtZV90ZW1wbGF0ZSk7CisgICAgICAgIEdzdENhcHMgKmNhcHMgPSBnc3RfcGFkX2dldF9jYXBzIChwYWQsIE5VTEwpOworCisgICAgICAgIC8qIGxpbmsgKi8KKyAgICAgICAgdHJ5X3RvX3BsdWcgKHBhZCwgY2Fwcyk7CisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKHBhZCkpOworICAgICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBHU1RfUEFEX1NPTUVUSU1FUzoKKyAgICAgICAgaGFzX2R5bmFtaWNfcGFkcyA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgLyogbGlzdGVuIGZvciBuZXdseSBjcmVhdGVkIHBhZHMgaWYgdGhpcyBlbGVtZW50IHN1cHBvcnRzIHRoYXQgKi8KKyAgaWYgKGhhc19keW5hbWljX3BhZHMpIHsKKyAgICBnX3NpZ25hbF9jb25uZWN0IChzaW5rZWxlbWVudCwgInBhZC1hZGRlZCIsIEdfQ0FMTEJBQ0sgKGNiX25ld3BhZCksIE5VTEwpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCit0cnlfdG9fcGx1ZyAoR3N0UGFkICAgICAgICAqcGFkLAorCSAgICAgY29uc3QgR3N0Q2FwcyAqY2FwcykKK3sKKyAgR3N0T2JqZWN0ICpwYXJlbnQgPSBHU1RfT0JKRUNUIChHU1RfT0JKRUNUX1BBUkVOVCAocGFkKSk7CisgIGNvbnN0IGdjaGFyICptaW1lOworICBjb25zdCBHTGlzdCAqaXRlbTsKKyAgR3N0Q2FwcyAqcmVzLCAqYXVkaW9jYXBzOworCisgIC8qIGRvbid0IHBsdWcgaWYgd2UncmUgYWxyZWFkeSBwbHVnZ2VkIC0gRklYTUU6IG1lbWxlYWsgZm9yIHBhZCAqLworICBpZiAoR1NUX1BBRF9JU19MSU5LRUQgKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChhdWRpb3NpbmssICJzaW5rIikpKSB7CisgICAgZ19wcmludCAoIk9taXR0aW5nIGxpbmsgZm9yIHBhZCAlczolcyBiZWNhdXNlIHdlJ3JlIGFscmVhZHkgbGlua2VkXG4iLAorCSAgICAgR1NUX09CSkVDVF9OQU1FIChwYXJlbnQpLCBHU1RfT0JKRUNUX05BTUUgKHBhZCkpOworICAgIHJldHVybjsKKyAgfQorCisgIC8qIGFzIHNhaWQgYWJvdmUsIHdlIG9ubHkgdHJ5IHRvIHBsdWcgYXVkaW8uLi4gT21pdCB2aWRlbyAqLworICBtaW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCkpOworICBpZiAoZ19zdHJyc3RyIChtaW1lLCAidmlkZW8iKSkgeworICAgIGdfcHJpbnQgKCJPbWl0dGluZyBsaW5rIGZvciBwYWQgJXM6JXMgYmVjYXVzZSBtaW1ldHlwZSAlcyBpcyBub24tYXVkaW9cbiIsCisJICAgICBHU1RfT0JKRUNUX05BTUUgKHBhcmVudCksIEdTVF9PQkpFQ1RfTkFNRSAocGFkKSwgbWltZSk7CisgICAgcmV0dXJuOworICB9CisKKyAgLyogY2FuIGl0IGxpbmsgdG8gdGhlIGF1ZGlvcGFkPyAqLworICBhdWRpb2NhcHMgPSBnc3RfcGFkX2dldF9jYXBzIChnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoYXVkaW9zaW5rLCAic2luayIpLAorICBOVUxMKTsKKyAgcmVzID0gZ3N0X2NhcHNfaW50ZXJzZWN0IChjYXBzLCBhdWRpb2NhcHMpOworICBpZiAocmVzICYmICFnc3RfY2Fwc19pc19lbXB0eSAocmVzKSkgeworICAgIGdfcHJpbnQgKCJGb3VuZCBwYWQgdG8gbGluayB0byBhdWRpb3NpbmsgLSBwbHVnZ2luZyBpcyBub3cgZG9uZVxuIik7CisgICAgY2xvc2VfbGluayAocGFkLCBhdWRpb3NpbmssICJzaW5rIiwgTlVMTCk7CisgICAgZ3N0X2NhcHNfdW5yZWYgKGF1ZGlvY2Fwcyk7CisgICAgZ3N0X2NhcHNfdW5yZWYgKHJlcyk7CisgICAgcmV0dXJuOworICB9CisgIGdzdF9jYXBzX3VucmVmIChhdWRpb2NhcHMpOworICBnc3RfY2Fwc191bnJlZiAocmVzKTsKKworICAvKiB0cnkgdG8gcGx1ZyBmcm9tIG91ciBsaXN0ICovCisgIGZvciAoaXRlbSA9IGZhY3RvcmllczsgaXRlbSAhPSBOVUxMOyBpdGVtID0gaXRlbS0+bmV4dCkgeworICAgIEdzdEVsZW1lbnRGYWN0b3J5ICpmYWN0b3J5ID0gR1NUX0VMRU1FTlRfRkFDVE9SWSAoaXRlbS0+ZGF0YSk7CisgICAgY29uc3QgR0xpc3QgKnBhZHM7CisKKyAgICBmb3IgKHBhZHMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9zdGF0aWNfcGFkX3RlbXBsYXRlcyAoZmFjdG9yeSk7CisgICAgICAgICBwYWRzICE9IE5VTEw7IHBhZHMgPSBwYWRzLT5uZXh0KSB7CisgICAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqdGVtcGwgPSBwYWRzLT5kYXRhOworCisgICAgICAvKiBmaW5kIHRoZSBzaW5rIHRlbXBsYXRlIC0gbmVlZCBhbiBhbHdheXMgcGFkKi8KKyAgICAgIGlmICh0ZW1wbC0+ZGlyZWN0aW9uICE9IEdTVF9QQURfU0lOSyB8fAorICAgICAgICAgIHRlbXBsLT5wcmVzZW5jZSAhPSBHU1RfUEFEX0FMV0FZUykgeworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgLyogY2FuIGl0IGxpbms/ICovCisgICAgICByZXMgPSBnc3RfY2Fwc19pbnRlcnNlY3QgKGNhcHMsCisgICAgICAgICAgZ3N0X3N0YXRpY19jYXBzX2dldCAoJnRlbXBsLT5zdGF0aWNfY2FwcykpOworICAgICAgaWYgKHJlcyAmJiAhZ3N0X2NhcHNfaXNfZW1wdHkgKHJlcykpIHsKKyAgICAgICAgR3N0RWxlbWVudCAqZWxlbWVudDsKKyAgICAgICAgZ2NoYXIgKm5hbWVfdGVtcGxhdGUgPSBnX3N0cmR1cCAodGVtcGwtPm5hbWVfdGVtcGxhdGUpOworCisgICAgICAgIC8qIGNsb3NlIGxpbmsgYW5kIHJldHVybiAqLworICAgICAgICBnc3RfY2Fwc191bnJlZiAocmVzKTsKKyAgICAgICAgZWxlbWVudCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlIChmYWN0b3J5LCBOVUxMKTsKKyAgICAgICAgY2xvc2VfbGluayAocGFkLCBlbGVtZW50LCBuYW1lX3RlbXBsYXRlLAorCQkgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfc3RhdGljX3BhZF90ZW1wbGF0ZXMgKGZhY3RvcnkpKTsKKyAgICAgICAgZ19mcmVlIChuYW1lX3RlbXBsYXRlKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgZ3N0X2NhcHNfdW5yZWYgKHJlcyk7CisKKyAgICAgIC8qIHdlIG9ubHkgY2hlY2sgb25lIHNpbmsgdGVtcGxhdGUgcGVyIGZhY3RvcnksIHNvIG1vdmUgb24gdG8gdGhlCisgICAgICAgKiBuZXh0IGZhY3Rvcnkgbm93ICovCisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICAvKiBpZiB3ZSBnZXQgaGVyZSwgbm8gaXRlbSB3YXMgZm91bmQgKi8KKyAgZ19wcmludCAoIk5vIGNvbXBhdGlibGUgcGFkIGZvdW5kIHRvIGRlY29kZSAlcyBvbiAlczolc1xuIiwKKwkgICBtaW1lLCBHU1RfT0JKRUNUX05BTUUgKHBhcmVudCksIEdTVF9PQkpFQ1RfTkFNRSAocGFkKSk7Cit9CisKK3N0YXRpYyB2b2lkCitjYl90eXBlZm91bmQgKEdzdEVsZW1lbnQgKnR5cGVmaW5kLAorCSAgICAgIGd1aW50ICAgICAgIHByb2JhYmlsaXR5LAorCSAgICAgIEdzdENhcHMgICAgKmNhcHMsCisJICAgICAgZ3BvaW50ZXIgICAgZGF0YSkKK3sKKyAgZ2NoYXIgKnM7CisgIEdzdFBhZCAqcGFkOworCisgIHMgPSBnc3RfY2Fwc190b19zdHJpbmcgKGNhcHMpOworICBnX3ByaW50ICgiRGV0ZWN0ZWQgbWVkaWEgdHlwZSAlc1xuIiwgcyk7CisgIGdfZnJlZSAocyk7CisKKyAgLyogYWN0dWFsbHkgcGx1ZyBub3cgKi8KKyAgcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHR5cGVmaW5kLCAic3JjIik7CisgIHRyeV90b19wbHVnIChwYWQsIGNhcHMpOworICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChwYWQpKTsKK30KKworLyoqKiBibG9jayBkICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2FkdmFuY2VkLWF1dG9wbHVnZ2luZy54bWwgKioqLworc3RhdGljIGdib29sZWFuCitteV9idXNfY2FsbGJhY2sgKEdzdEJ1cyAgICAgKmJ1cywKKyAgICAgICAgICAgICAgICAgR3N0TWVzc2FnZSAqbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgZGF0YSkKK3sKKyAgR01haW5Mb29wICpsb29wID0gZGF0YTsKKworICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpKSB7CisgICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjogeworICAgICAgR0Vycm9yICplcnI7CisgICAgICBnY2hhciAqZGVidWc7CisKKyAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtZXNzYWdlLCAmZXJyLCAmZGVidWcpOworICAgICAgZ19wcmludCAoIkVycm9yOiAlc1xuIiwgZXJyLT5tZXNzYWdlKTsKKyAgICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKKyAgICAgIGdfZnJlZSAoZGVidWcpOworCisgICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKKyAgICAgIC8qIGVuZC1vZi1zdHJlYW0gKi8KKyAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgLyogcmVtb3ZlIGZyb20gcXVldWUgKi8KKyAgcmV0dXJuIFRSVUU7Cit9CisKK2dpbnQKK21haW4gKGdpbnQgICBhcmdjLAorICAgICAgZ2NoYXIgKmFyZ3ZbXSkKK3sKKyAgR01haW5Mb29wICpsb29wOworICBHc3RFbGVtZW50ICp0eXBlZmluZCwgKnJlYWxzaW5rOworICBHc3RCdXMgKmJ1czsKKyAgR0Vycm9yICplcnIgPSBOVUxMOworICBnY2hhciAqcDsKKworICAvKiBpbml0IEdTdHJlYW1lciBhbmQgb3Vyc2VsdmVzICovCisgIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOworICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7CisgIGluaXRfZmFjdG9yaWVzICgpOworCisgIC8qIGFyZ3MgKi8KKyAgaWYgKGFyZ2MgIT0gMikgeworICAgIGdfcHJpbnQgKCJVc2FnZTogJXMgPGZpbGVuYW1lPlxuIiwgYXJndlswXSk7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgLyogcGlwZWxpbmUgKi8KKyAgcCA9IGdfc3RyZHVwX3ByaW50ZiAoImZpbGVzcmMgbG9jYXRpb249XCIlc1wiICEgdHlwZWZpbmQgbmFtZT10ZiIsIGFyZ3ZbMV0pOworICBwaXBlbGluZSA9IGdzdF9wYXJzZV9sYXVuY2ggKHAsICZlcnIpOworICBnX2ZyZWUgKHApOworCisgIGlmIChlcnIpIHsKKyAgICBnX2Vycm9yICgiQ291bGQgbm90IGNvbnN0cnVjdCBwaXBlbGluZTogJXMiLCBlcnItPm1lc3NhZ2UpOworICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBidXMgPSBnc3RfcGlwZWxpbmVfZ2V0X2J1cyAoR1NUX1BJUEVMSU5FIChwaXBlbGluZSkpOworICBnc3RfYnVzX2FkZF93YXRjaCAoYnVzLCBteV9idXNfY2FsbGJhY2ssIE5VTEwpOworICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOworCisgIHR5cGVmaW5kID0gZ3N0X2Jpbl9nZXRfYnlfbmFtZSAoR1NUX0JJTiAocGlwZWxpbmUpLCAidGYiKTsKKyAgZ19zaWduYWxfY29ubmVjdCAodHlwZWZpbmQsICJoYXZlLXR5cGUiLCBHX0NBTExCQUNLIChjYl90eXBlZm91bmQpLCBOVUxMKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAodHlwZWZpbmQpKTsKKyAgYXVkaW9zaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW9jb252ZXJ0IiwgImFjb252Iik7CisgIHJlYWxzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYWxzYXNpbmsiLCAiYXVkaW9zaW5rIik7CisgIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgYXVkaW9zaW5rLCByZWFsc2luaywgTlVMTCk7CisgIGdzdF9lbGVtZW50X2xpbmsgKGF1ZGlvc2luaywgcmVhbHNpbmspOworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7CisKKyAgLyogcnVuICovCisgIGdfbWFpbl9sb29wX3J1biAobG9vcCk7CisKKyAgLyogZXhpdCAqLworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKHBpcGVsaW5lKSk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9tYW51YWwvZWxlbWVudGNyZWF0ZS5jIGIvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2VsZW1lbnRjcmVhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGQ5MDQzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2VsZW1lbnRjcmVhdGUuYwpAQCAtMCwwICsxLDMwIEBACisKKy8qKiogYmxvY2sgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYmFzaWNzLWVsZW1lbnRzLnhtbCAqKiovCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCitpbnQKK21haW4gKGludCAgIGFyZ2MsCisgICAgICBjaGFyICphcmd2W10pCit7CisgIEdzdEVsZW1lbnRGYWN0b3J5ICpmYWN0b3J5OworICBHc3RFbGVtZW50ICogZWxlbWVudDsKKworICAvKiBpbml0IEdTdHJlYW1lciAqLworICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKKworICAvKiBjcmVhdGUgZWxlbWVudCwgbWV0aG9kICMyICovCisgIGZhY3RvcnkgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmQgKCJmYWtlc3JjIik7CisgIGlmICghZmFjdG9yeSkgeworICAgIGdfcHJpbnQgKCJGYWlsZWQgdG8gZmluZCBmYWN0b3J5IG9mIHR5cGUgJ2Zha2VzcmMnXG4iKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgZWxlbWVudCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlIChmYWN0b3J5LCAic291cmNlIik7CisgIGlmICghZWxlbWVudCkgeworICAgIGdfcHJpbnQgKCJGYWlsZWQgdG8gY3JlYXRlIGVsZW1lbnQsIGV2ZW4gdGhvdWdoIGl0cyBmYWN0b3J5IGV4aXN0cyFcbiIpOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKGVsZW1lbnQpKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9lbGVtZW50ZmFjdG9yeS5jIGIvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2VsZW1lbnRmYWN0b3J5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEwZGY2MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9lbGVtZW50ZmFjdG9yeS5jCkBAIC0wLDAgKzEsMjkgQEAKKworLyoqKiBibG9jayAgZnJvbSAuLi8uLi8uLi9kb2NzL21hbnVhbC9iYXNpY3MtZWxlbWVudHMueG1sICoqKi8KKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKK2ludAorbWFpbiAoaW50ICAgYXJnYywKKyAgICAgIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgR3N0RWxlbWVudEZhY3RvcnkgKmZhY3Rvcnk7CisKKyAgLyogaW5pdCBHU3RyZWFtZXIgKi8KKyAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7CisKKyAgLyogZ2V0IGZhY3RvcnkgKi8KKyAgZmFjdG9yeSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZCAoImZha2VzcmMiKTsKKyAgaWYgKCFmYWN0b3J5KSB7CisgICAgZ19wcmludCAoIllvdSBkb24ndCBoYXZlIHRoZSAnZmFrZXNyYycgZWxlbWVudCBpbnN0YWxsZWQhXG4iKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICAvKiBkaXNwbGF5IGluZm9ybWF0aW9uICovCisgIGdfcHJpbnQgKCJUaGUgJyVzJyBlbGVtZW50IGlzIGEgbWVtYmVyIG9mIHRoZSBjYXRlZ29yeSAlcy5cbiIKKyAgICAgICAgICAgIkRlc2NyaXB0aW9uOiAlc1xuIiwKKyAgICAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9uYW1lIChHU1RfUExVR0lOX0ZFQVRVUkUgKGZhY3RvcnkpKSwKKyAgICAgICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfa2xhc3MgKGZhY3RvcnkpLAorICAgICAgICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9kZXNjcmlwdGlvbiAoZmFjdG9yeSkpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2VsZW1lbnRnZXQuYyBiL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9lbGVtZW50Z2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIwZTZlOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9lbGVtZW50Z2V0LmMKQEAgLTAsMCArMSwyNiBAQAorCisvKioqIGJsb2NrICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2Jhc2ljcy1lbGVtZW50cy54bWwgKioqLworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworaW50CittYWluIChpbnQgICBhcmdjLAorICAgICAgY2hhciAqYXJndltdKQoreworICBHc3RFbGVtZW50ICplbGVtZW50OworICBnY2hhciAqbmFtZTsKKworICAvKiBpbml0IEdTdHJlYW1lciAqLworICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKKworICAvKiBjcmVhdGUgZWxlbWVudCAqLworICBlbGVtZW50ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzb3VyY2UiKTsKKworICAvKiBnZXQgbmFtZSAqLworICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChlbGVtZW50KSwgIm5hbWUiLCAmbmFtZSwgTlVMTCk7CisgIGdfcHJpbnQgKCJUaGUgbmFtZSBvZiB0aGUgZWxlbWVudCBpcyAnJXMnLlxuIiwgbmFtZSk7CisgIGdfZnJlZSAobmFtZSk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAoZWxlbWVudCkpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2VsZW1lbnRsaW5rLmMgYi90ZXN0cy9leGFtcGxlcy9tYW51YWwvZWxlbWVudGxpbmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDVjNmJlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2VsZW1lbnRsaW5rLmMKQEAgLTAsMCArMSwzNSBAQAorCisvKioqIGJsb2NrIGEgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYmFzaWNzLWVsZW1lbnRzLnhtbCAqKiovCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCitpbnQKK21haW4gKGludCAgIGFyZ2MsCisgICAgICBjaGFyICphcmd2W10pCit7CisgIEdzdEVsZW1lbnQgKnBpcGVsaW5lOworICBHc3RFbGVtZW50ICpzb3VyY2UsICpmaWx0ZXIsICpzaW5rOworCisgIC8qIGluaXQgKi8KKyAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7CisKKyAgLyogY3JlYXRlIHBpcGVsaW5lICovCisgIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoIm15LXBpcGVsaW5lIik7CisKKyAgLyogY3JlYXRlIGVsZW1lbnRzICovCisgIHNvdXJjZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAic291cmNlIik7CisgIGZpbHRlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImlkZW50aXR5IiwgImZpbHRlciIpOworICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOworCisgIC8qIG11c3QgYWRkIGVsZW1lbnRzIHRvIHBpcGVsaW5lIGJlZm9yZSBsaW5raW5nIHRoZW0gKi8KKyAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzb3VyY2UsIGZpbHRlciwgc2luaywgTlVMTCk7CisKKyAgLyogbGluayAqLworICBpZiAoIWdzdF9lbGVtZW50X2xpbmtfbWFueSAoc291cmNlLCBmaWx0ZXIsIHNpbmssIE5VTEwpKSB7CisgICAgZ193YXJuaW5nICgiRmFpbGVkIHRvIGxpbmsgZWxlbWVudHMhIik7CisgIH0KKworLyoqKiBibG9jayBiICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2Jhc2ljcy1lbGVtZW50cy54bWwgKioqLworICByZXR1cm4gMDsKKworLyoqKiBibG9jayBjICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2Jhc2ljcy1lbGVtZW50cy54bWwgKioqLworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2VsZW1lbnRtYWtlLmMgYi90ZXN0cy9leGFtcGxlcy9tYW51YWwvZWxlbWVudG1ha2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWUyZTA0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2VsZW1lbnRtYWtlLmMKQEAgLTAsMCArMSwyNCBAQAorCisvKioqIGJsb2NrICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2Jhc2ljcy1lbGVtZW50cy54bWwgKioqLworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworaW50CittYWluIChpbnQgICBhcmdjLAorICAgICAgY2hhciAqYXJndltdKQoreworICBHc3RFbGVtZW50ICplbGVtZW50OworCisgIC8qIGluaXQgR1N0cmVhbWVyICovCisgIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOworCisgIC8qIGNyZWF0ZSBlbGVtZW50ICovCisgIGVsZW1lbnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNvdXJjZSIpOworICBpZiAoIWVsZW1lbnQpIHsKKyAgICBnX3ByaW50ICgiRmFpbGVkIHRvIGNyZWF0ZSBlbGVtZW50IG9mIHR5cGUgJ2Zha2VzcmMnXG4iKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChlbGVtZW50KSk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9tYW51YWwvZXh0cmFjdC5wbCBiL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9leHRyYWN0LnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE0YjdjMWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9leGFtcGxlcy9tYW51YWwvZXh0cmFjdC5wbApAQCAtMCwwICsxLDg5IEBACisjIS91c3IvYmluL3BlcmwKKworIyBleHRyYWN0IGNvZGUgZnJhZ21lbnRzIGZyb20geG1sIHByb2dyYW0gbGlzdGluZ3MKKyMgZmlyc3QgYXJndW1lbnQ6IHNvdXJjZSBjb2RlIGZpbGUgdG8gZmluZAorIyBzZWNvbmQgYXJndW1lbnQ6IHhtbCBmaWxlcyB0byBleHRyYWN0IGNvZGUgZnJvbQorCisjIG1haW4KKworIyBkZWNvZGVzIHhtbCBieSB0cmFuc2xhdGluZyAmYW1wOyAmbHQ7ICZndDsgYmFjayB0byB3aGF0IHRoZXkgc2hvdWxkIGJlCisjIGFuZCBhbHNvIGlnbm9yZQorIyA8IVtDREFUQVsgYW5kIF1dPiBhbmQgPCEtLSBhbmQgLS0+CitzdWIKK3htbF9kZWNvZGUgKCQpCit7CisgIG15ICRpbnB1dCA9IHNoaWZ0OworCisgICRpbnB1dCA9fiBzL1wmYW1wOy8mL2c7CisgICRpbnB1dCA9fiBzLyZsdDsvPC9nOworICAkaW5wdXQgPX4gcy8mZ3Q7Lz4vZzsKKworICBpZiAoJGlucHV0ID1+IC88IVxbQ0RBVEFcWy8pIHsgJGlucHV0ID0gIiI7IH0KKyAgaWYgKCRpbnB1dCA9fiAvXV0+LykgeyAkaW5wdXQgPSAiIjsgfQorICBpZiAoJGlucHV0ID1+IC88IS0tLykgeyAkaW5wdXQgPSAiIjsgfQorICBpZiAoJGlucHV0ID1+IC8tLT4vKSB7ICRpbnB1dCA9ICIiOyB9CisKKyAgI3ByaW50ICJSZXR1cm5pbmcgbGluZSAkaW5wdXQiOworICByZXR1cm4gJGlucHV0OworfQorCisjIG1haW4KK215ICRvdXRwdXQgPSBzaGlmdCBAQVJHVjsKK215ICRvdXRwdXRuYW1lOworCisjIHN0cmlwIHBhdGggcGFydHMKK2lmICgkb3V0cHV0ID1+IG0vLipcLyguKikkLykKK3sKKyAgJG91dHB1dG5hbWUgPSAkMTsKK30KK2Vsc2UKK3sKKyAgJG91dHB1dG5hbWUgPSAkb3V0cHV0OworfQorCiskZm91bmQgPSAwOworJWJsb2NrcyA9ICgpOworCitmb3JlYWNoICRmaWxlIChAQVJHVikKK3sKKyAgb3BlbiBGSUxFLCAkZmlsZSBvciBkaWUgIkNhbm5vdCBvcGVuIGZpbGUgJGZpbGUiOworCisgIHdoaWxlICgkbGluZSA9IDxGSUxFPikKKyAgeworICAgIGlmICgkbGluZSA9fiAvPCEtLSBleGFtcGxlLWJlZ2luICRvdXRwdXRuYW1lICguKj8pLS0+LykKKyAgICB7CisgICAgICAkZm91bmQgPSAxOworICAgICAgJGJsb2NrX2lkID0gJDE7CisgICAgICAkYmxvY2sgPSAiXG4vKioqIGJsb2NrICRibG9ja19pZCBmcm9tICRmaWxlICoqKi9cbiI7CisKKyAgICAgIHByaW50ICJFeHRyYWN0aW5nICRvdXRwdXRuYW1lIGJsb2NrICRibG9ja19pZCBmcm9tICRmaWxlXG4iOworCisgICAgICB3aGlsZSAoJGxpbmUgPSA8RklMRT4pCisgICAgICB7CisgICAgICAgIGlmICgkbGluZSA9fiAvPCEtLSBleGFtcGxlLWVuZCAkb3V0cHV0bmFtZSAoLio/KS0tPi8pCisgICAgICAgIHsKKyAgICAgICAgICBsYXN0OworICAgICAgICB9CisgICAgICAgICRibG9jayAuPSB4bWxfZGVjb2RlICgkbGluZSk7CisgICAgICB9CisgICAgICAkYmxvY2tzeyRibG9ja19pZH0gPSAkYmxvY2s7CisgICAgfQorICB9Cit9CisKKworaWYgKCEkZm91bmQpCit7CisgIHByaW50ICJDb3VsZCBub3QgZmluZCAkb3V0cHV0bmFtZSBleGFtcGxlICFcbiI7CisgIGV4aXQoMSk7Cit9CisKKyMgbm93IG91dHB1dCBhbGwgdGhlIGJsb2NrcyBpbiB0aGUgcmlnaHQgb3JkZXIKK29wZW4gT1VUUFVULCAiPiRvdXRwdXQiOworQGJsb2NrX2lkcyA9IGtleXMgJWJsb2NrczsKK2ZvcmVhY2ggJGJsb2NrX2lkIChzb3J0IEBibG9ja19pZHMpCit7CisgIHByaW50ICJXcml0aW5nICRvdXRwdXQgYmxvY2sgJGJsb2NrX2lkXG4iOworICBwcmludCBPVVRQVVQgJGJsb2Nrc3skYmxvY2tfaWR9OworfQorY2xvc2UgT1VUUFVUOwpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2Zha2VzcmMuYyBiL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9mYWtlc3JjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVkYmUwNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9mYWtlc3JjLmMKQEAgLTAsMCArMSw3MiBAQAorCisvKioqIGJsb2NrICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2FkdmFuY2VkLWRhdGFhY2Nlc3MueG1sICoqKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4gLyogZm9yIG1lbXNldCAoKSAqLworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworc3RhdGljIHZvaWQKK2NiX2hhbmRvZmYgKEdzdEVsZW1lbnQgKmZha2VzcmMsCisJICAgIEdzdEJ1ZmZlciAgKmJ1ZmZlciwKKwkgICAgR3N0UGFkICAgICAqcGFkLAorCSAgICBncG9pbnRlciAgICB1c2VyX2RhdGEpCit7CisgIHN0YXRpYyBnYm9vbGVhbiB3aGl0ZSA9IEZBTFNFOworICBncG9pbnRlciBkYXRhOworICBnc2l6ZSBzaXplOworICAKKyAgZGF0YSA9IGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZzaXplLCBOVUxMLCBHU1RfTUFQX1dSSVRFKTsKKworICAvKiB0aGlzIG1ha2VzIHRoZSBpbWFnZSBibGFjay93aGl0ZSAqLworICBtZW1zZXQgKGRhdGEsIHdoaXRlID8gMHhmZiA6IDB4MCwgc2l6ZSk7CisgIHdoaXRlID0gIXdoaXRlOworCisgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgZGF0YSwgc2l6ZSk7Cit9CisKK2dpbnQKK21haW4gKGdpbnQgICBhcmdjLAorICAgICAgZ2NoYXIgKmFyZ3ZbXSkKK3sKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpmYWtlc3JjLCAqZmx0LCAqY29udiwgKnZpZGVvc2luazsKKyAgR01haW5Mb29wICpsb29wOworCisgIC8qIGluaXQgR1N0cmVhbWVyICovCisgIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOworICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7CisKKyAgLyogc2V0dXAgcGlwZWxpbmUgKi8KKyAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKKyAgZmFrZXNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAic291cmNlIik7CisgIGZsdCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImNhcHNmaWx0ZXIiLCAiZmx0Iik7CisgIGNvbnYgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmZm1wZWdjb2xvcnNwYWNlIiwgImNvbnYiKTsKKyAgdmlkZW9zaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgieHZpbWFnZXNpbmsiLCAidmlkZW9zaW5rIik7CisKKyAgLyogc2V0dXAgKi8KKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZmx0KSwgImNhcHMiLAorICAJCWdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby94LXJhdy1yZ2IiLAorCQkJCSAgICAgIndpZHRoIiwgR19UWVBFX0lOVCwgMzg0LAorCQkJCSAgICAgImhlaWdodCIsIEdfVFlQRV9JTlQsIDI4OCwKKwkJCQkgICAgICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTiwgMSwgMSwKKwkJCQkgICAgICJicHAiLCBHX1RZUEVfSU5ULCAxNiwKKwkJCQkgICAgICJkZXB0aCIsIEdfVFlQRV9JTlQsIDE2LAorCQkJCSAgICAgImVuZGlhbm5lc3MiLCBHX1RZUEVfSU5ULCBHX0JZVEVfT1JERVIsCisJCQkJICAgICBOVUxMKSwgTlVMTCk7CisgIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgZmFrZXNyYywgZmx0LCBjb252LCB2aWRlb3NpbmssIE5VTEwpOworICBnc3RfZWxlbWVudF9saW5rX21hbnkgKGZha2VzcmMsIGZsdCwgY29udiwgdmlkZW9zaW5rLCBOVUxMKTsKKworICAvKiBzZXR1cCBmYWtlIHNvdXJjZSAqLworICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChmYWtlc3JjKSwKKwkJInNpZ25hbC1oYW5kb2ZmcyIsIFRSVUUsCisJCSJzaXplbWF4IiwgMzg0ICogMjg4ICogMiwKKwkJInNpemV0eXBlIiwgMiwgTlVMTCk7CisgIGdfc2lnbmFsX2Nvbm5lY3QgKGZha2VzcmMsICJoYW5kb2ZmIiwgR19DQUxMQkFDSyAoY2JfaGFuZG9mZiksIE5VTEwpOworCisgIC8qIHBsYXkgKi8KKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOworICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOworCisgIC8qIGNsZWFuIHVwICovCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAocGlwZWxpbmUpKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9naG9zdHBhZC5jIGIvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2dob3N0cGFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RjYzRhNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9naG9zdHBhZC5jCkBAIC0wLDAgKzEsMjkgQEAKKworLyoqKiBibG9jayBhICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2Jhc2ljcy1wYWRzLnhtbCAqKiovCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCitpbnQKK21haW4gKGludCAgIGFyZ2MsCisgICAgICBjaGFyICphcmd2W10pCit7CisgIEdzdEVsZW1lbnQgKmJpbiwgKnNpbms7CisgIEdzdFBhZCAqcGFkOworCisgIC8qIGluaXQgKi8KKyAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7CisKKyAgLyogY3JlYXRlIGVsZW1lbnQsIGFkZCB0byBiaW4gKi8KKyAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKKyAgYmluID0gZ3N0X2Jpbl9uZXcgKCJteWJpbiIpOworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAoYmluKSwgc2luayk7CisKKyAgLyogYWRkIGdob3N0cGFkICovCisgIHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rLCAic2luayIpOworICBnc3RfZWxlbWVudF9hZGRfcGFkIChiaW4sIGdzdF9naG9zdF9wYWRfbmV3ICgic2luayIsIHBhZCkpOworICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChwYWQpKTsKKworLyoqKiBibG9jayBiICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2Jhc2ljcy1wYWRzLnhtbCAqKiovCisgIHJldHVybiAwOworCisvKioqIGJsb2NrIGMgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYmFzaWNzLXBhZHMueG1sICoqKi8KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9oZWxsb3dvcmxkLmMgYi90ZXN0cy9leGFtcGxlcy9tYW51YWwvaGVsbG93b3JsZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNmYzMzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9leGFtcGxlcy9tYW51YWwvaGVsbG93b3JsZC5jCkBAIC0wLDAgKzEsMTQ0IEBACisKKy8qKiogYmxvY2sgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYmFzaWNzLWhlbGxvd29ybGQueG1sICoqKi8KKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorCisKK3N0YXRpYyBnYm9vbGVhbgorYnVzX2NhbGwgKEdzdEJ1cyAgICAgKmJ1cywKKyAgICAgICAgICBHc3RNZXNzYWdlICptc2csCisgICAgICAgICAgZ3BvaW50ZXIgICAgZGF0YSkKK3sKKyAgR01haW5Mb29wICpsb29wID0gKEdNYWluTG9vcCAqKSBkYXRhOworCisgIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSkgeworCisgICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6CisgICAgICBnX3ByaW50ICgiRW5kIG9mIHN0cmVhbVxuIik7CisgICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjogeworICAgICAgZ2NoYXIgICpkZWJ1ZzsKKyAgICAgIEdFcnJvciAqZXJyb3I7CisKKyAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtc2csICZlcnJvciwgJmRlYnVnKTsKKyAgICAgIGdfZnJlZSAoZGVidWcpOworCisgICAgICBnX3ByaW50ZXJyICgiRXJyb3I6ICVzXG4iLCBlcnJvci0+bWVzc2FnZSk7CisgICAgICBnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKworICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworc3RhdGljIHZvaWQKK29uX3BhZF9hZGRlZCAoR3N0RWxlbWVudCAqZWxlbWVudCwKKyAgICAgICAgICAgICAgR3N0UGFkICAgICAqcGFkLAorICAgICAgICAgICAgICBncG9pbnRlciAgICBkYXRhKQoreworICBHc3RQYWQgKnNpbmtwYWQ7CisgIEdzdEVsZW1lbnQgKmRlY29kZXIgPSAoR3N0RWxlbWVudCAqKSBkYXRhOworCisgIC8qIFdlIGNhbiBub3cgbGluayB0aGlzIHBhZCB3aXRoIHRoZSB2b3JiaXMtZGVjb2RlciBzaW5rIHBhZCAqLworICBnX3ByaW50ICgiRHluYW1pYyBwYWQgY3JlYXRlZCwgbGlua2luZyBkZW11eGVyL2RlY29kZXJcbiIpOworCisgIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZGVjb2RlciwgInNpbmsiKTsKKworICBnc3RfcGFkX2xpbmsgKHBhZCwgc2lua3BhZCk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Cit9CisKKworCitpbnQKK21haW4gKGludCAgIGFyZ2MsCisgICAgICBjaGFyICphcmd2W10pCit7CisgIEdNYWluTG9vcCAqbG9vcDsKKworICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKnNvdXJjZSwgKmRlbXV4ZXIsICpkZWNvZGVyLCAqY29udiwgKnNpbms7CisgIEdzdEJ1cyAqYnVzOworCisgIC8qIEluaXRpYWxpc2F0aW9uICovCisgIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOworCisgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKKworCisgIC8qIENoZWNrIGlucHV0IGFyZ3VtZW50cyAqLworICBpZiAoYXJnYyAhPSAyKSB7CisgICAgZ19wcmludGVyciAoIlVzYWdlOiAlcyA8T2dnL1ZvcmJpcyBmaWxlbmFtZT5cbiIsIGFyZ3ZbMF0pOworICAgIHJldHVybiAtMTsKKyAgfQorCisKKyAgLyogQ3JlYXRlIGdzdHJlYW1lciBlbGVtZW50cyAqLworICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJhdWRpby1wbGF5ZXIiKTsKKyAgc291cmNlICAgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmaWxlc3JjIiwgICAgICAgImZpbGUtc291cmNlIik7CisgIGRlbXV4ZXIgID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgib2dnZGVtdXgiLCAgICAgICJvZ2ctZGVtdXhlciIpOworICBkZWNvZGVyICA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZvcmJpc2RlYyIsICAgICAidm9yYmlzLWRlY29kZXIiKTsKKyAgY29udiAgICAgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhdWRpb2NvbnZlcnQiLCAgImNvbnZlcnRlciIpOworICBzaW5rICAgICA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1dG9hdWRpb3NpbmsiLCAiYXVkaW8tb3V0cHV0Iik7CisKKyAgaWYgKCFwaXBlbGluZSB8fCAhc291cmNlIHx8ICFkZW11eGVyIHx8ICFkZWNvZGVyIHx8ICFjb252IHx8ICFzaW5rKSB7CisgICAgZ19wcmludGVyciAoIk9uZSBlbGVtZW50IGNvdWxkIG5vdCBiZSBjcmVhdGVkLiBFeGl0aW5nLlxuIik7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgLyogU2V0IHVwIHRoZSBwaXBlbGluZSAqLworCisgIC8qIHdlIHNldCB0aGUgaW5wdXQgZmlsZW5hbWUgdG8gdGhlIHNvdXJjZSBlbGVtZW50ICovCisgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNvdXJjZSksICJsb2NhdGlvbiIsIGFyZ3ZbMV0sIE5VTEwpOworCisgIC8qIHdlIGFkZCBhIG1lc3NhZ2UgaGFuZGxlciAqLworICBidXMgPSBnc3RfcGlwZWxpbmVfZ2V0X2J1cyAoR1NUX1BJUEVMSU5FIChwaXBlbGluZSkpOworICBnc3RfYnVzX2FkZF93YXRjaCAoYnVzLCBidXNfY2FsbCwgbG9vcCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7CisKKyAgLyogd2UgYWRkIGFsbCBlbGVtZW50cyBpbnRvIHRoZSBwaXBlbGluZSAqLworICAvKiBmaWxlLXNvdXJjZSB8IG9nZy1kZW11eGVyIHwgdm9yYmlzLWRlY29kZXIgfCBjb252ZXJ0ZXIgfCBhbHNhLW91dHB1dCAqLworICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgZGVtdXhlciwgZGVjb2RlciwgY29udiwgc2luaywgTlVMTCk7CisKKyAgLyogd2UgbGluayB0aGUgZWxlbWVudHMgdG9nZXRoZXIgKi8KKyAgLyogZmlsZS1zb3VyY2UgLT4gb2dnLWRlbXV4ZXIgfj4gdm9yYmlzLWRlY29kZXIgLT4gY29udmVydGVyIC0+IGFsc2Etb3V0cHV0ICovCisgIGdzdF9lbGVtZW50X2xpbmsgKHNvdXJjZSwgZGVtdXhlcik7CisgIGdzdF9lbGVtZW50X2xpbmtfbWFueSAoZGVjb2RlciwgY29udiwgc2luaywgTlVMTCk7CisgIGdfc2lnbmFsX2Nvbm5lY3QgKGRlbXV4ZXIsICJwYWQtYWRkZWQiLCBHX0NBTExCQUNLIChvbl9wYWRfYWRkZWQpLCBkZWNvZGVyKTsKKworICAvKiBub3RlIHRoYXQgdGhlIGRlbXV4ZXIgd2lsbCBiZSBsaW5rZWQgdG8gdGhlIGRlY29kZXIgZHluYW1pY2FsbHkuCisgICAgIFRoZSByZWFzb24gaXMgdGhhdCBPZ2cgbWF5IGNvbnRhaW4gdmFyaW91cyBzdHJlYW1zIChmb3IgZXhhbXBsZQorICAgICBhdWRpbyBhbmQgdmlkZW8pLiBUaGUgc291cmNlIHBhZChzKSB3aWxsIGJlIGNyZWF0ZWQgYXQgcnVuIHRpbWUsCisgICAgIGJ5IHRoZSBkZW11eGVyIHdoZW4gaXQgZGV0ZWN0cyB0aGUgYW1vdW50IGFuZCBuYXR1cmUgb2Ygc3RyZWFtcy4KKyAgICAgVGhlcmVmb3JlIHdlIGNvbm5lY3QgYSBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIGV4ZWN1dGVkCisgICAgIHdoZW4gdGhlICJwYWQtYWRkZWQiIGlzIGVtaXR0ZWQuKi8KKworCisgIC8qIFNldCB0aGUgcGlwZWxpbmUgdG8gInBsYXlpbmciIHN0YXRlKi8KKyAgZ19wcmludCAoIk5vdyBwbGF5aW5nOiAlc1xuIiwgYXJndlsxXSk7CisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKKworCisgIC8qIEl0ZXJhdGUgKi8KKyAgZ19wcmludCAoIlJ1bm5pbmcuLi5cbiIpOworICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOworCisKKyAgLyogT3V0IG9mIHRoZSBtYWluIGxvb3AsIGNsZWFuIHVwIG5pY2VseSAqLworICBnX3ByaW50ICgiUmV0dXJuZWQsIHN0b3BwaW5nIHBsYXliYWNrXG4iKTsKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOworCisgIGdfcHJpbnQgKCJEZWxldGluZyBwaXBlbGluZVxuIik7CisgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKHBpcGVsaW5lKSk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9tYW51YWwvaW5pdC5jIGIvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDUzMDQyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2luaXQuYwpAQCAtMCwwICsxLDI4IEBACisKKy8qKiogYmxvY2sgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYmFzaWNzLWluaXQueG1sICoqKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworaW50CittYWluIChpbnQgICBhcmdjLAorICAgICAgY2hhciAqYXJndltdKQoreworICBjb25zdCBnY2hhciAqbmFub19zdHI7CisgIGd1aW50IG1ham9yLCBtaW5vciwgbWljcm8sIG5hbm87CisKKyAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7CisKKyAgZ3N0X3ZlcnNpb24gKCZtYWpvciwgJm1pbm9yLCAmbWljcm8sICZuYW5vKTsKKworICBpZiAobmFubyA9PSAxKQorICAgIG5hbm9fc3RyID0gIihDVlMpIjsKKyAgZWxzZSBpZiAobmFubyA9PSAyKQorICAgIG5hbm9fc3RyID0gIihQcmVyZWxlYXNlKSI7CisgIGVsc2UKKyAgICBuYW5vX3N0ciA9ICIiOworCisgIHByaW50ZiAoIlRoaXMgcHJvZ3JhbSBpcyBsaW5rZWQgYWdhaW5zdCBHU3RyZWFtZXIgJWQuJWQuJWQgJXNcbiIsCisgICAgICAgICAgbWFqb3IsIG1pbm9yLCBtaWNybywgbmFub19zdHIpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL3BhZC5jIGIvdGVzdHMvZXhhbXBsZXMvbWFudWFsL3BhZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YzVjYWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9leGFtcGxlcy9tYW51YWwvcGFkLmMKQEAgLTAsMCArMSw1MyBAQAorCisvKioqIGJsb2NrIGEgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYmFzaWNzLXBhZHMueG1sICoqKi8KKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKK3N0YXRpYyB2b2lkCitjYl9uZXdfcGFkIChHc3RFbGVtZW50ICplbGVtZW50LAorCSAgICBHc3RQYWQgICAgICpwYWQsCisJICAgIGdwb2ludGVyICAgIGRhdGEpCit7CisgIGdjaGFyICpuYW1lOworCisgIG5hbWUgPSBnc3RfcGFkX2dldF9uYW1lIChwYWQpOworICBnX3ByaW50ICgiQSBuZXcgcGFkICVzIHdhcyBjcmVhdGVkXG4iLCBuYW1lKTsKKyAgZ19mcmVlIChuYW1lKTsKKworICAvKiBoZXJlLCB5b3Ugd291bGQgc2V0dXAgYSBuZXcgcGFkIGxpbmsgZm9yIHRoZSBuZXdseSBjcmVhdGVkIHBhZCAqLworCisvKioqIGJsb2NrIGIgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYmFzaWNzLXBhZHMueG1sICoqKi8KK30KKworaW50IAorbWFpbiAoaW50ICAgYXJnYywKKyAgICAgIGNoYXIgKmFyZ3ZbXSkgCit7CisgIEdzdEVsZW1lbnQgKnBpcGVsaW5lLCAqc291cmNlLCAqZGVtdXg7CisgIEdNYWluTG9vcCAqbG9vcDsKKworICAvKiBpbml0ICovCisgIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOworCisgIC8qIGNyZWF0ZSBlbGVtZW50cyAqLworICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJteV9waXBlbGluZSIpOworICBzb3VyY2UgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmaWxlc3JjIiwgInNvdXJjZSIpOworICBnX29iamVjdF9zZXQgKHNvdXJjZSwgImxvY2F0aW9uIiwgYXJndlsxXSwgTlVMTCk7CisgIGRlbXV4ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgib2dnZGVtdXgiLCAiZGVtdXhlciIpOworCisgIC8qIHlvdSB3b3VsZCBub3JtYWxseSBjaGVjayB0aGF0IHRoZSBlbGVtZW50cyB3ZXJlIGNyZWF0ZWQgcHJvcGVybHkgKi8KKworICAvKiBwdXQgdG9nZXRoZXIgYSBwaXBlbGluZSAqLworICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIHNvdXJjZSwgZGVtdXgsIE5VTEwpOworICBnc3RfZWxlbWVudF9saW5rX3BhZHMgKHNvdXJjZSwgInNyYyIsIGRlbXV4LCAic2luayIpOworCisgIC8qIGxpc3RlbiBmb3IgbmV3bHkgY3JlYXRlZCBwYWRzICovCisgIGdfc2lnbmFsX2Nvbm5lY3QgKGRlbXV4LCAicGFkLWFkZGVkIiwgR19DQUxMQkFDSyAoY2JfbmV3X3BhZCksIE5VTEwpOworCisgIC8qIHN0YXJ0IHRoZSBwaXBlbGluZSAqLworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChwaXBlbGluZSksIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOworICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOworICByZXR1cm4gMDsKKworLyoqKiBibG9jayBkICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2Jhc2ljcy1wYWRzLnhtbCAqKiovCit9CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9tYW51YWwvcGxheWJpbi5jIGIvdGVzdHMvZXhhbXBsZXMvbWFudWFsL3BsYXliaW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjhiNTg2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZXhhbXBsZXMvbWFudWFsL3BsYXliaW4uYwpAQCAtMCwwICsxLDc2IEBACisKKy8qKiogYmxvY2sgYSAgZnJvbSAuLi8uLi8uLi9kb2NzL21hbnVhbC9oaWdobGV2ZWwtY29tcG9uZW50cy54bWwgKioqLworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworLyoqKiBibG9jayBiICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2hpZ2hsZXZlbC1jb21wb25lbnRzLnhtbCAqKiovCitzdGF0aWMgZ2Jvb2xlYW4KK215X2J1c19jYWxsYmFjayAoR3N0QnVzICAgICAqYnVzLAorCQkgR3N0TWVzc2FnZSAqbWVzc2FnZSwKKwkJIGdwb2ludGVyICAgIGRhdGEpCit7CisgIEdNYWluTG9vcCAqbG9vcCA9IGRhdGE7CisKKyAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSkgeworICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6IHsKKyAgICAgIEdFcnJvciAqZXJyOworICAgICAgZ2NoYXIgKmRlYnVnOworCisgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobWVzc2FnZSwgJmVyciwgJmRlYnVnKTsKKyAgICAgIGdfcHJpbnQgKCJFcnJvcjogJXNcbiIsIGVyci0+bWVzc2FnZSk7CisgICAgICBnX2Vycm9yX2ZyZWUgKGVycik7CisgICAgICBnX2ZyZWUgKGRlYnVnKTsKKworICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6CisgICAgICAvKiBlbmQtb2Ytc3RyZWFtICovCisgICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAvKiB1bmhhbmRsZWQgbWVzc2FnZSAqLworICAgICAgYnJlYWs7CisgIH0KKworICAvKiByZW1vdmUgbWVzc2FnZSBmcm9tIHRoZSBxdWV1ZSAqLworICByZXR1cm4gVFJVRTsKK30KKworLyoqKiBibG9jayBjICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2hpZ2hsZXZlbC1jb21wb25lbnRzLnhtbCAqKiovCitnaW50CittYWluIChnaW50ICAgYXJnYywKKyAgICAgIGdjaGFyICphcmd2W10pCit7CisgIEdNYWluTG9vcCAqbG9vcDsKKyAgR3N0RWxlbWVudCAqcGxheTsKKyAgR3N0QnVzICpidXM7CisKKyAgLyogaW5pdCBHU3RyZWFtZXIgKi8KKyAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7CisgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKKworICAvKiBtYWtlIHN1cmUgd2UgaGF2ZSBhIFVSSSAqLworICBpZiAoYXJnYyAhPSAyKSB7CisgICAgZ19wcmludCAoIlVzYWdlOiAlcyA8VVJJPlxuIiwgYXJndlswXSk7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgLyogc2V0IHVwICovCisgIHBsYXkgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJwbGF5YmluIiwgInBsYXkiKTsKKyAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAocGxheSksICJ1cmkiLCBhcmd2WzFdLCBOVUxMKTsKKworICBidXMgPSBnc3RfcGlwZWxpbmVfZ2V0X2J1cyAoR1NUX1BJUEVMSU5FIChwbGF5KSk7CisgIGdzdF9idXNfYWRkX3dhdGNoIChidXMsIG15X2J1c19jYWxsYmFjaywgbG9vcCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7CisKKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwbGF5LCBHU1RfU1RBVEVfUExBWUlORyk7CisKKyAgLyogbm93IHJ1biAqLworICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOworCisgIC8qIGFsc28gY2xlYW4gdXAgKi8KKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwbGF5LCBHU1RfU1RBVEVfTlVMTCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKHBsYXkpKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9xdWVyeS5jIGIvdGVzdHMvZXhhbXBsZXMvbWFudWFsL3F1ZXJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhlZjU1YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9xdWVyeS5jCkBAIC0wLDAgKzEsMTEzIEBACisKKy8qKiogYmxvY2sgYSAgZnJvbSAuLi8uLi8uLi9kb2NzL21hbnVhbC9hZHZhbmNlZC1wb3NpdGlvbi54bWwgKioqLworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworLyoqKiBibG9jayBiICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2FkdmFuY2VkLXBvc2l0aW9uLnhtbCAqKiovCitzdGF0aWMgdm9pZAorbXlfYnVzX21lc3NhZ2VfY2IgKEdzdEJ1cyAgICAgKmJ1cywKKyAgICAgICAgICAgICAgICAgICBHc3RNZXNzYWdlICptZXNzYWdlLAorICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgIGRhdGEpCit7CisgIEdNYWluTG9vcCAqbG9vcCA9IChHTWFpbkxvb3AgKikgZGF0YTsKKworICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpKSB7CisgICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjogeworICAgICAgR0Vycm9yICplcnI7CisgICAgICBnY2hhciAqZGVidWc7CisKKyAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtZXNzYWdlLCAmZXJyLCAmZGVidWcpOworICAgICAgZ19wcmludCAoIkVycm9yOiAlc1xuIiwgZXJyLT5tZXNzYWdlKTsKKyAgICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKKyAgICAgIGdfZnJlZSAoZGVidWcpOworCisgICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKKyAgICAgIC8qIGVuZC1vZi1zdHJlYW0gKi8KKyAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9Cit9CisKKy8qKiogYmxvY2sgYyAgZnJvbSAuLi8uLi8uLi9kb2NzL21hbnVhbC9hZHZhbmNlZC1wb3NpdGlvbi54bWwgKioqLworc3RhdGljIGdib29sZWFuCitjYl9wcmludF9wb3NpdGlvbiAoR3N0RWxlbWVudCAqcGlwZWxpbmUpCit7CisgIGdpbnQ2NCBwb3MsIGxlbjsKKworICBpZiAoZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24gKHBpcGVsaW5lLCBHU1RfRk9STUFUX1RJTUUsICZwb3MpCisgICAgJiYgZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24gKHBpcGVsaW5lLCBHU1RfRk9STUFUX1RJTUUsICZsZW4pKSB7CisgICAgZ19wcmludCAoIlRpbWU6ICUiIEdTVF9USU1FX0ZPUk1BVCAiIC8gJSIgR1NUX1RJTUVfRk9STUFUICJcciIsCisJICAgICBHU1RfVElNRV9BUkdTIChwb3MpLCBHU1RfVElNRV9BUkdTIChsZW4pKTsKKyAgfQorCisgIC8qIGNhbGwgbWUgYWdhaW4gKi8KKyAgcmV0dXJuIFRSVUU7Cit9CisKK2dpbnQKK21haW4gKGdpbnQgICBhcmdjLAorICAgICAgZ2NoYXIgKmFyZ3ZbXSkKK3sKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmU7CisKKy8qKiogYmxvY2sgZCAgZnJvbSAuLi8uLi8uLi9kb2NzL21hbnVhbC9hZHZhbmNlZC1wb3NpdGlvbi54bWwgKioqLworICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7CisgIEdNYWluTG9vcCAqbG9vcDsKKyAgR0Vycm9yICplcnIgPSBOVUxMOworICBHc3RCdXMgKmJ1czsKKyAgZ2NoYXIgKmw7CisKKyAgLyogaW5pdCAqLworICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKKworICAvKiBhcmdzICovCisgIGlmIChhcmdjICE9IDIpIHsKKyAgICBnX3ByaW50ICgiVXNhZ2U6ICVzIDxmaWxlbmFtZT5cbiIsIGFyZ3ZbMF0pOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKKworICAvKiBidWlsZCBwaXBlbGluZSwgdGhlIGVhc3kgd2F5ICovCisgIGwgPSBnX3N0cmR1cF9wcmludGYgKCJmaWxlc3JjIGxvY2F0aW9uPVwiJXNcIiAhIG9nZ2RlbXV4ICEgdm9yYmlzZGVjICEgIgorCQkgICAgICAgImF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUgISBhbHNhc2luayIsCisJCSAgICAgICBhcmd2WzFdKTsKKyAgcGlwZWxpbmUgPSBnc3RfcGFyc2VfbGF1bmNoIChsLCAmZXJyKTsKKyAgaWYgKHBpcGVsaW5lID09IE5VTEwgfHwgZXJyICE9IE5VTEwpIHsKKyAgICBnX3ByaW50ZXJyICgiQ2Fubm90IGJ1aWxkIHBpcGVsaW5lOiAlc1xuIiwgZXJyLT5tZXNzYWdlKTsKKyAgICBnX2Vycm9yX2ZyZWUgKGVycik7CisgICAgZ19mcmVlIChsKTsKKyAgICBpZiAocGlwZWxpbmUpCisgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7CisgICAgcmV0dXJuIC0xOworICB9CisgIGdfZnJlZSAobCk7CisKKyAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKEdTVF9QSVBFTElORSAocGlwZWxpbmUpKTsKKyAgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoIChidXMpOworICBnX3NpZ25hbF9jb25uZWN0IChidXMsICJtZXNzYWdlIiwgR19DQUxMQkFDSyAobXlfYnVzX21lc3NhZ2VfY2IpLCBsb29wKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKKworICAvKiBwbGF5ICovCisgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpCisgICAgZ19lcnJvciAoIkZhaWxlZCB0byBzZXQgcGlwZWxpbmUgdG8gUExBWUlORy5cbiIpOworCisvKioqIGJsb2NrIGUgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYWR2YW5jZWQtcG9zaXRpb24ueG1sICoqKi8KKyAgLyogcnVuIHBpcGVsaW5lICovCisgIGdfdGltZW91dF9hZGQgKDIwMCwgKEdTb3VyY2VGdW5jKSBjYl9wcmludF9wb3NpdGlvbiwgcGlwZWxpbmUpOworICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOworCisvKioqIGJsb2NrIGYgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYWR2YW5jZWQtcG9zaXRpb24ueG1sICoqKi8KKyAgLyogY2xlYW4gdXAgKi8KKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOworICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChwaXBlbGluZSkpOworCisgIHJldHVybiAwOworCisvKioqIGJsb2NrIGcgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYWR2YW5jZWQtcG9zaXRpb24ueG1sICoqKi8KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC90eXBlZmluZC5jIGIvdGVzdHMvZXhhbXBsZXMvbWFudWFsL3R5cGVmaW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE2MjY2YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC90eXBlZmluZC5jCkBAIC0wLDAgKzEsMTEwIEBACisKKy8qKiogYmxvY2sgYSAgZnJvbSAuLi8uLi8uLi9kb2NzL21hbnVhbC9hZHZhbmNlZC1hdXRvcGx1Z2dpbmcueG1sICoqKi8KKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKKy8qKiogYmxvY2sgYiAgZnJvbSAuLi8uLi8uLi9kb2NzL21hbnVhbC9hZHZhbmNlZC1hdXRvcGx1Z2dpbmcueG1sICoqKi8KK3N0YXRpYyBnYm9vbGVhbgorbXlfYnVzX2NhbGxiYWNrIChHc3RCdXMgICAgICpidXMsCisgICAgICAgICAgICAgICAgIEdzdE1lc3NhZ2UgKm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgIGRhdGEpCit7CisgIEdNYWluTG9vcCAqbG9vcCA9IGRhdGE7CisKKyAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSkgeworICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6IHsKKyAgICAgIEdFcnJvciAqZXJyOworICAgICAgZ2NoYXIgKmRlYnVnOworCisgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobWVzc2FnZSwgJmVyciwgJmRlYnVnKTsKKyAgICAgIGdfcHJpbnQgKCJFcnJvcjogJXNcbiIsIGVyci0+bWVzc2FnZSk7CisgICAgICBnX2Vycm9yX2ZyZWUgKGVycik7CisgICAgICBnX2ZyZWUgKGRlYnVnKTsKKworICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6CisgICAgICAvKiBlbmQtb2Ytc3RyZWFtICovCisgICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorCisgIC8qIHJlbW92ZSBmcm9tIHF1ZXVlICovCisgIHJldHVybiBUUlVFOworfQorCisvKioqIGJsb2NrIGMgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYWR2YW5jZWQtYXV0b3BsdWdnaW5nLnhtbCAqKiovCitzdGF0aWMgZ2Jvb2xlYW4KK2lkbGVfZXhpdF9sb29wIChncG9pbnRlciBkYXRhKQoreworICBnX21haW5fbG9vcF9xdWl0ICgoR01haW5Mb29wICopIGRhdGEpOworCisgIC8qIG9uY2UgKi8KKyAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZAorY2JfdHlwZWZvdW5kIChHc3RFbGVtZW50ICp0eXBlZmluZCwKKwkgICAgICBndWludCAgICAgICBwcm9iYWJpbGl0eSwKKwkgICAgICBHc3RDYXBzICAgICpjYXBzLAorCSAgICAgIGdwb2ludGVyICAgIGRhdGEpCit7CisgIEdNYWluTG9vcCAqbG9vcCA9IGRhdGE7CisgIGdjaGFyICp0eXBlOworCisgIHR5cGUgPSBnc3RfY2Fwc190b19zdHJpbmcgKGNhcHMpOworICBnX3ByaW50ICgiTWVkaWEgdHlwZSAlcyBmb3VuZCwgcHJvYmFiaWxpdHkgJWQlJVxuIiwgdHlwZSwgcHJvYmFiaWxpdHkpOworICBnX2ZyZWUgKHR5cGUpOworCisgIC8qIHNpbmNlIHdlIGNvbm5lY3QgdG8gYSBzaWduYWwgaW4gdGhlIHBpcGVsaW5lIHRocmVhZCBjb250ZXh0LCB3ZSBuZWVkCisgICAqIHRvIHNldCBhbiBpZGxlIGhhbmRsZXIgdG8gZXhpdCB0aGUgbWFpbiBsb29wIGluIHRoZSBtYWlubG9vcCBjb250ZXh0LgorICAgKiBOb3JtYWxseSwgeW91ciBhcHAgc2hvdWxkIG5vdCBuZWVkIHRvIHdvcnJ5IGFib3V0IHN1Y2ggdGhpbmdzLiAqLworICBnX2lkbGVfYWRkIChpZGxlX2V4aXRfbG9vcCwgbG9vcCk7Cit9CisKK2dpbnQgCittYWluIChnaW50ICAgYXJnYywKKyAgICAgIGdjaGFyICphcmd2W10pCit7CisgIEdNYWluTG9vcCAqbG9vcDsKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpmaWxlc3JjLCAqdHlwZWZpbmQsICpmYWtlc2luazsKKyAgR3N0QnVzICpidXM7CisKKyAgLyogaW5pdCBHU3RyZWFtZXIgKi8KKyAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7CisgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKKworICAvKiBjaGVjayBhcmdzICovCisgIGlmIChhcmdjICE9IDIpIHsKKyAgICBnX3ByaW50ICgiVXNhZ2U6ICVzIDxmaWxlbmFtZT5cbiIsIGFyZ3ZbMF0pOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIC8qIGNyZWF0ZSBhIG5ldyBwaXBlbGluZSB0byBob2xkIHRoZSBlbGVtZW50cyAqLworICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlIik7CisKKyAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKEdTVF9QSVBFTElORSAocGlwZWxpbmUpKTsKKyAgZ3N0X2J1c19hZGRfd2F0Y2ggKGJ1cywgbXlfYnVzX2NhbGxiYWNrLCBOVUxMKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKKworICAvKiBjcmVhdGUgZmlsZSBzb3VyY2UgYW5kIHR5cGVmaW5kIGVsZW1lbnQgKi8KKyAgZmlsZXNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZpbGVzcmMiLCAic291cmNlIik7CisgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGZpbGVzcmMpLCAibG9jYXRpb24iLCBhcmd2WzFdLCBOVUxMKTsKKyAgdHlwZWZpbmQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0eXBlZmluZCIsICJ0eXBlZmluZGVyIik7CisgIGdfc2lnbmFsX2Nvbm5lY3QgKHR5cGVmaW5kLCAiaGF2ZS10eXBlIiwgR19DQUxMQkFDSyAoY2JfdHlwZWZvdW5kKSwgbG9vcCk7CisgIGZha2VzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOworCisgIC8qIHNldHVwICovCisgIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgZmlsZXNyYywgdHlwZWZpbmQsIGZha2VzaW5rLCBOVUxMKTsKKyAgZ3N0X2VsZW1lbnRfbGlua19tYW55IChmaWxlc3JjLCB0eXBlZmluZCwgZmFrZXNpbmssIE5VTEwpOworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChwaXBlbGluZSksIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKKworICAvKiB1bnNldCAqLworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChwaXBlbGluZSksIEdTVF9TVEFURV9OVUxMKTsKKyAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAocGlwZWxpbmUpKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL21ldGFkYXRhL01ha2VmaWxlLmFtIGIvdGVzdHMvZXhhbXBsZXMvbWV0YWRhdGEvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFkMmViOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2V4YW1wbGVzL21ldGFkYXRhL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNCBAQAorbm9pbnN0X1BST0dSQU1TID0gcmVhZC1tZXRhZGF0YQorCityZWFkX21ldGFkYXRhX0xEQUREID0gJChHU1RfT0JKX0xJQlMpCityZWFkX21ldGFkYXRhX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9tZXRhZGF0YS9NYWtlZmlsZS5pbiBiL3Rlc3RzL2V4YW1wbGVzL21ldGFkYXRhL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3OGQ5NWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9leGFtcGxlcy9tZXRhZGF0YS9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDY4NyBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4xIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorbm9pbnN0X1BST0dSQU1TID0gcmVhZC1tZXRhZGF0YSQoRVhFRVhUKQorc3ViZGlyID0gdGVzdHMvZXhhbXBsZXMvbWV0YWRhdGEKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXB5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtc2NydWItaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitQUk9HUkFNUyA9ICQobm9pbnN0X1BST0dSQU1TKQorcmVhZF9tZXRhZGF0YV9TT1VSQ0VTID0gcmVhZC1tZXRhZGF0YS5jCityZWFkX21ldGFkYXRhX09CSkVDVFMgPSByZWFkX21ldGFkYXRhLXJlYWQtbWV0YWRhdGEuJChPQkpFWFQpCithbV9fREVQRU5ERU5DSUVTXzEgPQorcmVhZF9tZXRhZGF0YV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKK0FNX1ZfbHQgPSAkKGFtX192X2x0XyQoVikpCithbV9fdl9sdF8gPSAkKGFtX192X2x0XyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfbHRfMCA9IC0tc2lsZW50CityZWFkX21ldGFkYXRhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKHJlYWRfbWV0YWRhdGFfQ0ZMQUdTKSBcCisJJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCithbV9fbXYgPSBtdiAtZgorQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0FNX1ZfQ0MgPSAkKGFtX192X0NDXyQoVikpCithbV9fdl9DQ18gPSAkKGFtX192X0NDXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF8kKFYpKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X2F0XzAgPSBACitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0FNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF8kKFYpKQorYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAiICRAOworQU1fVl9HRU4gPSAkKGFtX192X0dFTl8kKFYpKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworU09VUkNFUyA9IHJlYWQtbWV0YWRhdGEuYworRElTVF9TT1VSQ0VTID0gcmVhZC1tZXRhZGF0YS5jCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKK0NDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKK0NIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKK0NIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKK0NIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUiA9IEBEQVRBRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAorRExMVE9PTCA9IEBETExUT09MQAorRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKK0VSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACitFWEVFWFQgPSBARVhFRVhUQAorRkZMQUdTID0gQEZGTEFHU0AKK0ZHUkVQID0gQEZHUkVQQAorRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKK0dDT1YgPSBAR0NPVkAKK0dDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAorR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACitHTElCX0xJQlMgPSBAR0xJQl9MSUJTQAorR0xJQl9PTkxZX0NGTEFHUyA9IEBHTElCX09OTFlfQ0ZMQUdTQAorR0xJQl9PTkxZX0xJQlMgPSBAR0xJQl9PTkxZX0xJQlNACitHTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKK0dMSUJfUkVRID0gQEdMSUJfUkVRQAorR01QX0xJQlMgPSBAR01QX0xJQlNACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dSRVAgPSBAR1JFUEAKK0dTTF9MSUJTID0gQEdTTF9MSUJTQAorR1NUX0FHRSA9IEBHU1RfQUdFQAorR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACitHU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACitHU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAorR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKK0dTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAorR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORUAKK0dTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKK0dTVF9ESVNBQkxFX05FVF9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfTkVUX0RFRklORUAKK0dTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACitHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAorR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAorR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKK0dTVF9ESVNBQkxFX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkVACitHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACitHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACitHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORSA9IEBHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORUAKK0dTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAorR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACitHU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAorR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACitHU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKK0dTVF9NQUpPUk1JTk9SID0gQEdTVF9NQUpPUk1JTk9SQAorR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACitHU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACitHU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAorR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACitHU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACitHU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACitHU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAorR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAorR1NUX1BLR19ERVBTID0gQEdTVF9QS0dfREVQU0AKK0dTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACitHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FQAorR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORUAKK0dTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKK0dTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACitHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkUgPSBAR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FQAorR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKK0hBVkVfRE9DQk9PSzJIVE1MID0gQEhBVkVfRE9DQk9PSzJIVE1MQAorSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKK0hBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKK0hBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKK0hBVkVfRklHMkRFViA9IEBIQVZFX0ZJRzJERVZACitIQVZFX0dNUCA9IEBIQVZFX0dNUEAKK0hBVkVfR1NMID0gQEhBVkVfR1NMQAorSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKK0hBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKK0hBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACitIQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKK0hBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACitIT1NUX0NQVSA9IEBIT1NUX0NQVUAKK0hUTUxfRElSID0gQEhUTUxfRElSQAorSU5FVF9BVE9OX0xJQlMgPSBASU5FVF9BVE9OX0xJQlNACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCRElSID0gQExJQkRJUkAKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCTSA9IEBMSUJNQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTE9DQUxFRElSID0gQExPQ0FMRURJUkAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACitQQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAorUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKK1BBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAorUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BFUkxfUEFUSCA9IEBQRVJMX1BBVEhACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQTFVHSU5ESVIgPSBAUExVR0lORElSQAorUE9TVUIgPSBAUE9TVUJACitQUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAorVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAorVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACitXSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACitYTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKK1hTTFRQUk9DID0gQFhTTFRQUk9DQAorWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3BsdWdpbmRpciA9IEBwbHVnaW5kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorcmVhZF9tZXRhZGF0YV9MREFERCA9ICQoR1NUX09CSl9MSUJTKQorcmVhZF9tZXRhZGF0YV9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgdGVzdHMvZXhhbXBsZXMvbWV0YWRhdGEvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbnUgdGVzdHMvZXhhbXBsZXMvbWV0YWRhdGEvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisKK2NsZWFuLW5vaW5zdFBST0dSQU1TOgorCUBsaXN0PSckKG5vaW5zdF9QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCisJdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKKwlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QKK3JlYWQtbWV0YWRhdGEkKEVYRUVYVCk6ICQocmVhZF9tZXRhZGF0YV9PQkpFQ1RTKSAkKHJlYWRfbWV0YWRhdGFfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgcmVhZC1tZXRhZGF0YSQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQocmVhZF9tZXRhZGF0YV9MSU5LKSAkKHJlYWRfbWV0YWRhdGFfT0JKRUNUUykgJChyZWFkX21ldGFkYXRhX0xEQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9yZWFkX21ldGFkYXRhLXJlYWQtbWV0YWRhdGEuUG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworcmVhZF9tZXRhZGF0YS1yZWFkLW1ldGFkYXRhLm86IHJlYWQtbWV0YWRhdGEuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJlYWRfbWV0YWRhdGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHJlYWRfbWV0YWRhdGEtcmVhZC1tZXRhZGF0YS5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9yZWFkX21ldGFkYXRhLXJlYWQtbWV0YWRhdGEuVHBvIC1jIC1vIHJlYWRfbWV0YWRhdGEtcmVhZC1tZXRhZGF0YS5vIGB0ZXN0IC1mICdyZWFkLW1ldGFkYXRhLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHJlYWQtbWV0YWRhdGEuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvcmVhZF9tZXRhZGF0YS1yZWFkLW1ldGFkYXRhLlRwbyAkKERFUERJUikvcmVhZF9tZXRhZGF0YS1yZWFkLW1ldGFkYXRhLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0ncmVhZC1tZXRhZGF0YS5jJyBvYmplY3Q9J3JlYWRfbWV0YWRhdGEtcmVhZC1tZXRhZGF0YS5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChyZWFkX21ldGFkYXRhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHJlYWRfbWV0YWRhdGEtcmVhZC1tZXRhZGF0YS5vIGB0ZXN0IC1mICdyZWFkLW1ldGFkYXRhLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHJlYWQtbWV0YWRhdGEuYworCityZWFkX21ldGFkYXRhLXJlYWQtbWV0YWRhdGEub2JqOiByZWFkLW1ldGFkYXRhLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChyZWFkX21ldGFkYXRhX0NGTEFHUykgJChDRkxBR1MpIC1NVCByZWFkX21ldGFkYXRhLXJlYWQtbWV0YWRhdGEub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9yZWFkX21ldGFkYXRhLXJlYWQtbWV0YWRhdGEuVHBvIC1jIC1vIHJlYWRfbWV0YWRhdGEtcmVhZC1tZXRhZGF0YS5vYmogYGlmIHRlc3QgLWYgJ3JlYWQtbWV0YWRhdGEuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdyZWFkLW1ldGFkYXRhLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3JlYWQtbWV0YWRhdGEuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvcmVhZF9tZXRhZGF0YS1yZWFkLW1ldGFkYXRhLlRwbyAkKERFUERJUikvcmVhZF9tZXRhZGF0YS1yZWFkLW1ldGFkYXRhLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0ncmVhZC1tZXRhZGF0YS5jJyBvYmplY3Q9J3JlYWRfbWV0YWRhdGEtcmVhZC1tZXRhZGF0YS5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJlYWRfbWV0YWRhdGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcmVhZF9tZXRhZGF0YS1yZWFkLW1ldGFkYXRhLm9iaiBgaWYgdGVzdCAtZiAncmVhZC1tZXRhZGF0YS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3JlYWQtbWV0YWRhdGEuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvcmVhZC1tZXRhZGF0YS5jJzsgZmlgCisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJc2V0IHg7IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoUFJPR1JBTVMpCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBcCisJbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgY3RhZ3MgZGlzdGNsZWFuIFwKKwlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCisJaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCisJaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKKwltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCisJbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAorCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvbWV0YWRhdGEvcmVhZC1tZXRhZGF0YS5jIGIvdGVzdHMvZXhhbXBsZXMvbWV0YWRhdGEvcmVhZC1tZXRhZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZWJmZTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9leGFtcGxlcy9tZXRhZGF0YS9yZWFkLW1ldGFkYXRhLmMKQEAgLTAsMCArMSwyMTcgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAyMDAzIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgorICogICAgICAgICAgICAgICAyMDAzIEJlbmphbWluIE90dGUgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgorICogICAgICAgICAgICAgICAyMDA1IEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KKyAqICAgICAgICAgICAgICAgMjAwNSBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KKyAqCisgKiBnc3QtbWV0YWRhdGEuYzogVXNlIEdTdHJlYW1lciB0byBkaXNwbGF5IG1ldGFkYXRhIHdpdGhpbiBmaWxlcy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCitzdGF0aWMgY2hhciAqZmlsZW5hbWUgPSBOVUxMOworc3RhdGljIEdzdEVsZW1lbnQgKnBpcGVsaW5lID0gTlVMTDsKK3N0YXRpYyBHc3RFbGVtZW50ICpzb3VyY2UgPSBOVUxMOworCisjZGVmaW5lIE5FV19QSVBFX1BFUl9GSUxFCisKK3N0YXRpYyBnYm9vbGVhbgorbWVzc2FnZV9sb29wIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0VGFnTGlzdCAqKiB0YWdzKQoreworICBHc3RCdXMgKmJ1czsKKyAgZ2Jvb2xlYW4gZG9uZSA9IEZBTFNFOworCisgIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKGVsZW1lbnQpOworICBnX3JldHVybl92YWxfaWZfZmFpbCAoYnVzICE9IE5VTEwsIEZBTFNFKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRhZ3MgIT0gTlVMTCwgRkFMU0UpOworCisgIHdoaWxlICghZG9uZSkgeworICAgIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAgICBtZXNzYWdlID0gZ3N0X2J1c19wb3AgKGJ1cyk7CisgICAgaWYgKG1lc3NhZ2UgPT0gTlVMTCkKKyAgICAgIC8qIEFsbCBtZXNzYWdlcyByZWFkLCB3ZSdyZSBkb25lICovCisgICAgICBicmVhazsKKworICAgIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkpIHsKKyAgICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6CisgICAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKKyAgICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgIGNhc2UgR1NUX01FU1NBR0VfVEFHOgorICAgICAgeworICAgICAgICBHc3RUYWdMaXN0ICpuZXdfdGFncywgKm9sZF90YWdzOworCisgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3RhZyAobWVzc2FnZSwgJm5ld190YWdzKTsKKyAgICAgICAgaWYgKCp0YWdzKSB7CisgICAgICAgICAgb2xkX3RhZ3MgPSAqdGFnczsKKyAgICAgICAgICAqdGFncyA9IGdzdF90YWdfbGlzdF9tZXJnZSAob2xkX3RhZ3MsIG5ld190YWdzLCBHU1RfVEFHX01FUkdFX0tFRVApOworICAgICAgICAgIGdzdF90YWdfbGlzdF9mcmVlIChvbGRfdGFncyk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICp0YWdzID0gbmV3X3RhZ3M7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKKyAgfQorICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOworICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQKK21ha2VfcGlwZWxpbmUgKHZvaWQpCit7CisgIEdzdEVsZW1lbnQgKmRlY29kZWJpbjsKKworICBpZiAocGlwZWxpbmUgIT0gTlVMTCkKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7CisKKyAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3IChOVUxMKTsKKworICBzb3VyY2UgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmaWxlc3JjIiwgInNvdXJjZSIpOworICBnX2Fzc2VydCAoR1NUX0lTX0VMRU1FTlQgKHNvdXJjZSkpOworICBkZWNvZGViaW4gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJkZWNvZGViaW4iLCAiZGVjb2RlYmluIik7CisgIGdfYXNzZXJ0IChHU1RfSVNfRUxFTUVOVCAoZGVjb2RlYmluKSk7CisKKyAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzb3VyY2UsIGRlY29kZWJpbiwgTlVMTCk7CisgIGdzdF9lbGVtZW50X2xpbmsgKHNvdXJjZSwgZGVjb2RlYmluKTsKK30KKworc3RhdGljIHZvaWQKK3ByaW50X3RhZyAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsIGNvbnN0IGdjaGFyICogdGFnLCBncG9pbnRlciB1bnVzZWQpCit7CisgIGdpbnQgaSwgY291bnQ7CisKKyAgY291bnQgPSBnc3RfdGFnX2xpc3RfZ2V0X3RhZ19zaXplIChsaXN0LCB0YWcpOworCisgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgZ2NoYXIgKnN0cjsKKworICAgIGlmIChnc3RfdGFnX2dldF90eXBlICh0YWcpID09IEdfVFlQRV9TVFJJTkcpIHsKKyAgICAgIGlmICghZ3N0X3RhZ19saXN0X2dldF9zdHJpbmdfaW5kZXggKGxpc3QsIHRhZywgaSwgJnN0cikpCisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOworICAgIH0gZWxzZSB7CisgICAgICBzdHIgPQorICAgICAgICAgIGdfc3RyZHVwX3ZhbHVlX2NvbnRlbnRzIChnc3RfdGFnX2xpc3RfZ2V0X3ZhbHVlX2luZGV4IChsaXN0LCB0YWcsIGkpKTsKKyAgICB9CisKKyAgICBpZiAoaSA9PSAwKSB7CisgICAgICBnX3ByaW50ICgiICAlMTVzOiAlc1xuIiwgZ3N0X3RhZ19nZXRfbmljayAodGFnKSwgc3RyKTsKKyAgICB9IGVsc2UgeworICAgICAgZ19wcmludCAoIiAgICAgICAgICAgICAgICAgOiAlc1xuIiwgc3RyKTsKKyAgICB9CisKKyAgICBnX2ZyZWUgKHN0cik7CisgIH0KK30KKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICBndWludCBpID0gMTsKKworICBzZXRsb2NhbGUgKExDX0FMTCwgIiIpOworCisgIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOworCisgIGlmIChhcmdjIDwgMikgeworICAgIGdfcHJpbnQgKCJQbGVhc2UgZ2l2ZSBmaWxlbmFtZXMgdG8gcmVhZCBtZXRhZGF0YSBmcm9tXG5cbiIpOworICAgIHJldHVybiAxOworICB9CisKKyAgbWFrZV9waXBlbGluZSAoKTsKKyAgd2hpbGUgKGkgPCBhcmdjKSB7CisgICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3JldDsKKyAgICBHc3RTdGF0ZSBzdGF0ZTsKKyAgICBHc3RUYWdMaXN0ICp0YWdzID0gTlVMTDsKKworICAgIGZpbGVuYW1lID0gYXJndltpXTsKKyAgICBnX29iamVjdF9zZXQgKHNvdXJjZSwgImxvY2F0aW9uIiwgZmlsZW5hbWUsIE5VTEwpOworCisgICAgR1NUX0RFQlVHICgiU3RhcnRpbmcgcmVhZGluZyBmb3IgJXMiLCBmaWxlbmFtZSk7CisKKyAgICAvKiBEZWNvZGViaW4gd2lsbCBvbmx5IGNvbW1pdCB0byBQQVVTRUQgaWYgaXQgYWN0dWFsbHkgZmluZHMgYSB0eXBlOworICAgICAqIG90aGVyd2lzZSB0aGUgc3RhdGUgY2hhbmdlIGZhaWxzICovCisgICAgc3JldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKHBpcGVsaW5lKSwgR1NUX1NUQVRFX1BBVVNFRCk7CisKKyAgICBpZiAoR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyA9PSBzcmV0KSB7CisgICAgICBpZiAoR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTICE9CisgICAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLCAmc3RhdGUsIE5VTEwsCisgICAgICAgICAgICAgIDUgKiBHU1RfU0VDT05EKSkgeworICAgICAgICBnX3ByaW50ICgiU3RhdGUgY2hhbmdlIGZhaWxlZCBmb3IgJXMuIEFib3J0aW5nXG4iLCBmaWxlbmFtZSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0gZWxzZSBpZiAoc3JldCAhPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpIHsKKyAgICAgIGdfcHJpbnQgKCIlcyAtIENvdWxkIG5vdCByZWFkIGZpbGVcbiIsIGZpbGVuYW1lKTsKKyAgICAgIGdvdG8gbmV4dF9maWxlOworICAgIH0KKworICAgIGlmICghbWVzc2FnZV9sb29wIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLCAmdGFncykpIHsKKyAgICAgIGdfcHJpbnQgKCJGYWlsZWQgaW4gbWVzc2FnZSByZWFkaW5nIGZvciAlc1xuIiwgYXJndltpXSk7CisgICAgfQorCisgICAgaWYgKHRhZ3MpIHsKKyAgICAgIGdfcHJpbnQgKCJNZXRhZGF0YSBmb3IgJXM6XG4iLCBhcmd2W2ldKTsKKyAgICAgIGdzdF90YWdfbGlzdF9mb3JlYWNoICh0YWdzLCBwcmludF90YWcsIE5VTEwpOworICAgICAgZ3N0X3RhZ19saXN0X2ZyZWUgKHRhZ3MpOworICAgICAgdGFncyA9IE5VTEw7CisgICAgfSBlbHNlCisgICAgICBnX3ByaW50ICgiTm8gbWV0YWRhdGEgZm91bmQgZm9yICVzXG4iLCBhcmd2W2ldKTsKKworICAgIHNyZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChwaXBlbGluZSksIEdTVF9TVEFURV9OVUxMKTsKKyNpZmRlZiBORVdfUElQRV9QRVJfRklMRQorICAgIGlmIChzcmV0ICE9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUykgeworICAgICAgZ19wcmludCAoIlN0YXRlIGNoYW5nZSBmYWlsZWQuIEFib3J0aW5nXG4iKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyNlbHNlCisgICAgaWYgKEdTVF9TVEFURV9DSEFOR0VfQVNZTkMgPT0gc3JldCkgeworICAgICAgaWYgKEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSA9PQorICAgICAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKHBpcGVsaW5lKSwgJnN0YXRlLCBOVUxMLAorICAgICAgICAgICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FKSkgeworICAgICAgICBnX3ByaW50ICgiU3RhdGUgY2hhbmdlIGZhaWxlZC4gQWJvcnRpbmciKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfSBlbHNlIGlmIChzcmV0ICE9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUykgeworICAgICAgZ19wcmludCAoIlN0YXRlIGNoYW5nZSBmYWlsZWQuIEFib3J0aW5nXG4iKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgorCisgIG5leHRfZmlsZToKKyAgICBpKys7CisKKyNpZmRlZiBORVdfUElQRV9QRVJfRklMRQorICAgIG1ha2VfcGlwZWxpbmUgKCk7CisjZW5kaWYKKyAgfQorCisgIGlmIChwaXBlbGluZSkKKyAgICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvcXVldWUvTWFrZWZpbGUuYW0gYi90ZXN0cy9leGFtcGxlcy9xdWV1ZS9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDY2ODM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZXhhbXBsZXMvcXVldWUvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw1IEBACitub2luc3RfUFJPR1JBTVMgPSBxdWV1ZQorCitxdWV1ZV9MREFERCA9ICQoR1NUX09CSl9MSUJTKQorcXVldWVfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvcXVldWUvTWFrZWZpbGUuaW4gYi90ZXN0cy9leGFtcGxlcy9xdWV1ZS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTU4Y2U3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZXhhbXBsZXMvcXVldWUvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2ODcgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK25vaW5zdF9QUk9HUkFNUyA9IHF1ZXVlJChFWEVFWFQpCitzdWJkaXIgPSB0ZXN0cy9leGFtcGxlcy9xdWV1ZQorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtcHl0aG9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1zY3J1Yi1pbmNsdWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZnVuY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYXJzZXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2ludHJvc3BlY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jaGVjay1jaGVja3MubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ljb252Lm00ICQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00ICQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L25scy5tNCAkKHRvcF9zcmNkaXIpL200L3BvLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK1BST0dSQU1TID0gJChub2luc3RfUFJPR1JBTVMpCitxdWV1ZV9TT1VSQ0VTID0gcXVldWUuYworcXVldWVfT0JKRUNUUyA9IHF1ZXVlLXF1ZXVlLiQoT0JKRVhUKQorYW1fX0RFUEVOREVOQ0lFU18xID0KK3F1ZXVlX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQorQU1fVl9sdCA9ICQoYW1fX3ZfbHRfJChWKSkKK2FtX192X2x0XyA9ICQoYW1fX3ZfbHRfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9sdF8wID0gLS1zaWxlbnQKK3F1ZXVlX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKHF1ZXVlX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKwkkKEFNX0NGTEFHUykgJChDRkxBR1MpCitBTV9WX0NDID0gJChhbV9fdl9DQ18kKFYpKQorYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ18kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAiICRAOworQU1fVl9hdCA9ICQoYW1fX3ZfYXRfJChWKSkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9hdF8wID0gQAorQ0NMRCA9ICQoQ0MpCitMSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitBTV9WX0NDTEQgPSAkKGFtX192X0NDTERfJChWKSkKK2FtX192X0NDTERfID0gJChhbV9fdl9DQ0xEXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgIiAkQDsKK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fJChWKSkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgIiAkQDsKK1NPVVJDRVMgPSBxdWV1ZS5jCitESVNUX1NPVVJDRVMgPSBxdWV1ZS5jCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKK0NDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKK0NIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKK0NIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKK0NIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUiA9IEBEQVRBRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAorRExMVE9PTCA9IEBETExUT09MQAorRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKK0VSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACitFWEVFWFQgPSBARVhFRVhUQAorRkZMQUdTID0gQEZGTEFHU0AKK0ZHUkVQID0gQEZHUkVQQAorRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKK0dDT1YgPSBAR0NPVkAKK0dDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAorR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACitHTElCX0xJQlMgPSBAR0xJQl9MSUJTQAorR0xJQl9PTkxZX0NGTEFHUyA9IEBHTElCX09OTFlfQ0ZMQUdTQAorR0xJQl9PTkxZX0xJQlMgPSBAR0xJQl9PTkxZX0xJQlNACitHTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKK0dMSUJfUkVRID0gQEdMSUJfUkVRQAorR01QX0xJQlMgPSBAR01QX0xJQlNACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dSRVAgPSBAR1JFUEAKK0dTTF9MSUJTID0gQEdTTF9MSUJTQAorR1NUX0FHRSA9IEBHU1RfQUdFQAorR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACitHU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACitHU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAorR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKK0dTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAorR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORUAKK0dTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKK0dTVF9ESVNBQkxFX05FVF9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfTkVUX0RFRklORUAKK0dTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACitHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAorR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAorR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKK0dTVF9ESVNBQkxFX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkVACitHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACitHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACitHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORSA9IEBHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORUAKK0dTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAorR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACitHU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAorR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACitHU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKK0dTVF9NQUpPUk1JTk9SID0gQEdTVF9NQUpPUk1JTk9SQAorR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACitHU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACitHU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAorR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACitHU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACitHU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACitHU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAorR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAorR1NUX1BLR19ERVBTID0gQEdTVF9QS0dfREVQU0AKK0dTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACitHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FQAorR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORUAKK0dTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKK0dTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACitHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkUgPSBAR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FQAorR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKK0hBVkVfRE9DQk9PSzJIVE1MID0gQEhBVkVfRE9DQk9PSzJIVE1MQAorSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKK0hBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKK0hBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKK0hBVkVfRklHMkRFViA9IEBIQVZFX0ZJRzJERVZACitIQVZFX0dNUCA9IEBIQVZFX0dNUEAKK0hBVkVfR1NMID0gQEhBVkVfR1NMQAorSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKK0hBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKK0hBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACitIQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKK0hBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACitIT1NUX0NQVSA9IEBIT1NUX0NQVUAKK0hUTUxfRElSID0gQEhUTUxfRElSQAorSU5FVF9BVE9OX0xJQlMgPSBASU5FVF9BVE9OX0xJQlNACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCRElSID0gQExJQkRJUkAKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCTSA9IEBMSUJNQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTE9DQUxFRElSID0gQExPQ0FMRURJUkAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACitQQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAorUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKK1BBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAorUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BFUkxfUEFUSCA9IEBQRVJMX1BBVEhACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQTFVHSU5ESVIgPSBAUExVR0lORElSQAorUE9TVUIgPSBAUE9TVUJACitQUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAorVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAorVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACitXSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACitYTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKK1hTTFRQUk9DID0gQFhTTFRQUk9DQAorWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3BsdWdpbmRpciA9IEBwbHVnaW5kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorcXVldWVfTERBREQgPSAkKEdTVF9PQkpfTElCUykKK3F1ZXVlX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy9xdWV1ZS9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy9xdWV1ZS9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworY2xlYW4tbm9pbnN0UFJPR1JBTVM6CisJQGxpc3Q9JyQobm9pbnN0X1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKKwl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAorCWxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdAorcXVldWUkKEVYRUVYVCk6ICQocXVldWVfT0JKRUNUUykgJChxdWV1ZV9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBxdWV1ZSQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQocXVldWVfTElOSykgJChxdWV1ZV9PQkpFQ1RTKSAkKHF1ZXVlX0xEQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9xdWV1ZS1xdWV1ZS5Qb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCitxdWV1ZS1xdWV1ZS5vOiBxdWV1ZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocXVldWVfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHF1ZXVlLXF1ZXVlLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3F1ZXVlLXF1ZXVlLlRwbyAtYyAtbyBxdWV1ZS1xdWV1ZS5vIGB0ZXN0IC1mICdxdWV1ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BxdWV1ZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9xdWV1ZS1xdWV1ZS5UcG8gJChERVBESVIpL3F1ZXVlLXF1ZXVlLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0ncXVldWUuYycgb2JqZWN0PSdxdWV1ZS1xdWV1ZS5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChxdWV1ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBxdWV1ZS1xdWV1ZS5vIGB0ZXN0IC1mICdxdWV1ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BxdWV1ZS5jCisKK3F1ZXVlLXF1ZXVlLm9iajogcXVldWUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHF1ZXVlX0NGTEFHUykgJChDRkxBR1MpIC1NVCBxdWV1ZS1xdWV1ZS5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL3F1ZXVlLXF1ZXVlLlRwbyAtYyAtbyBxdWV1ZS1xdWV1ZS5vYmogYGlmIHRlc3QgLWYgJ3F1ZXVlLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAncXVldWUuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvcXVldWUuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvcXVldWUtcXVldWUuVHBvICQoREVQRElSKS9xdWV1ZS1xdWV1ZS5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3F1ZXVlLmMnIG9iamVjdD0ncXVldWUtcXVldWUub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChxdWV1ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBxdWV1ZS1xdWV1ZS5vYmogYGlmIHRlc3QgLWYgJ3F1ZXVlLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAncXVldWUuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvcXVldWUuYyc7IGZpYAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIGN0YWdzIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKKwlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL3F1ZXVlL3F1ZXVlLmMgYi90ZXN0cy9leGFtcGxlcy9xdWV1ZS9xdWV1ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3Y2E5NGUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9leGFtcGxlcy9xdWV1ZS9xdWV1ZS5jCkBAIC0wLDAgKzEsMTA2IEBACisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCisvKiBUaGlzIGV4YW1wbGUgdXNlcyB0aGUgcXVldWUgZWxlbWVudCB0byBjcmVhdGUgYSBidWZmZXIgYmV0d2VlbiAyIGVsZW1lbnRzLgorICogVGhlIHNjaGVkdWxlciBhdXRvbWF0aWNhbGx5IHVzZXMgMiB0aHJlYWRzLCAxIHRvIGZlZWQgYW5kIGFub3RoZXIgdG8gY29uc3VtZQorICogZGF0YSBmcm9tIHRoZSBxdWV1ZSBidWZmZXIKKyAqLworCisvKiBFdmVudCBsb29wIHRvIGxpc3RlbiB0byBldmVudHMgcG9zdGVkIG9uIHRoZSBHc3RCdXMgZnJvbSB0aGUgcGlwZWxpbmUuIEV4aXRzCisgKiBvbiBFT1Mgb3IgRVJST1IgZXZlbnRzCisgKi8KK3N0YXRpYyB2b2lkCitldmVudF9sb29wIChHc3RFbGVtZW50ICogcGlwZSkKK3sKKyAgR3N0QnVzICpidXM7CisgIEdzdE1lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMOworICBnYm9vbGVhbiBydW5uaW5nID0gVFJVRTsKKworICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChHU1RfRUxFTUVOVCAocGlwZSkpOworCisgIHdoaWxlIChydW5uaW5nKSB7CisgICAgbWVzc2FnZSA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9BTlksIC0xKTsKKworICAgIGdfYXNzZXJ0IChtZXNzYWdlICE9IE5VTEwpOworCisgICAgc3dpdGNoIChtZXNzYWdlLT50eXBlKSB7CisgICAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKKyAgICAgICAgcnVubmluZyA9IEZBTFNFOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR1NUX01FU1NBR0VfV0FSTklORzp7CisgICAgICAgIEdFcnJvciAqZ2Vycm9yOworICAgICAgICBnY2hhciAqZGVidWc7CisKKyAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfd2FybmluZyAobWVzc2FnZSwgJmdlcnJvciwgJmRlYnVnKTsKKyAgICAgICAgZ3N0X29iamVjdF9kZWZhdWx0X2Vycm9yIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpLCBnZXJyb3IsIGRlYnVnKTsKKyAgICAgICAgZ19lcnJvcl9mcmVlIChnZXJyb3IpOworICAgICAgICBnX2ZyZWUgKGRlYnVnKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOnsKKyAgICAgICAgR0Vycm9yICpnZXJyb3I7CisgICAgICAgIGdjaGFyICpkZWJ1ZzsKKworICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobWVzc2FnZSwgJmdlcnJvciwgJmRlYnVnKTsKKyAgICAgICAgZ3N0X29iamVjdF9kZWZhdWx0X2Vycm9yIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpLCBnZXJyb3IsIGRlYnVnKTsKKyAgICAgICAgZ19lcnJvcl9mcmVlIChnZXJyb3IpOworICAgICAgICBnX2ZyZWUgKGRlYnVnKTsKKyAgICAgICAgcnVubmluZyA9IEZBTFNFOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7CisgIH0KKyAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKK30KKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICBHc3RFbGVtZW50ICpmaWxlc3JjLCAqYXVkaW9zaW5rLCAqZGVjb2RlLCAqcXVldWU7CisgIEdzdEVsZW1lbnQgKnBpcGVsaW5lOworCisgIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOworCisgIGlmIChhcmdjICE9IDIpIHsKKyAgICBnX3ByaW50ICgidXNhZ2U6ICVzIDxmaWxlbmFtZT5cbiIsIGFyZ3ZbMF0pOworICAgIGV4aXQgKC0xKTsKKyAgfQorCisgIC8qIGNyZWF0ZSBhIG5ldyBwaXBlbGluZSB0byBob2xkIHRoZSBlbGVtZW50cyAqLworICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOworICBnX2Fzc2VydCAocGlwZWxpbmUgIT0gTlVMTCk7CisKKyAgLyogY3JlYXRlIGEgZGlzayByZWFkZXIgKi8KKyAgZmlsZXNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZpbGVzcmMiLCAiZGlza19zb3VyY2UiKTsKKyAgZ19hc3NlcnQgKGZpbGVzcmMgIT0gTlVMTCk7CisgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGZpbGVzcmMpLCAibG9jYXRpb24iLCBhcmd2WzFdLCBOVUxMKTsKKworICBkZWNvZGUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJtYWQiLCAiZGVjb2RlIik7CisgIGdfYXNzZXJ0IChkZWNvZGUgIT0gTlVMTCk7CisKKyAgcXVldWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJxdWV1ZSIsICJxdWV1ZSIpOworICBnX2Fzc2VydCAocXVldWUgIT0gTlVMTCk7CisKKyAgLyogYW5kIGFuIGF1ZGlvIHNpbmsgKi8KKyAgYXVkaW9zaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYWxzYXNpbmsiLCAicGxheV9hdWRpbyIpOworICBnX2Fzc2VydCAoYXVkaW9zaW5rICE9IE5VTEwpOworCisgIC8qIGFkZCBvYmplY3RzIHRvIHRoZSBtYWluIHBpcGVsaW5lICovCisgIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgZmlsZXNyYywgZGVjb2RlLCBxdWV1ZSwgYXVkaW9zaW5rLAorICAgICAgTlVMTCk7CisKKyAgZ3N0X2VsZW1lbnRfbGlua19tYW55IChmaWxlc3JjLCBkZWNvZGUsIHF1ZXVlLCBhdWRpb3NpbmssIE5VTEwpOworCisgIC8qIHN0YXJ0IHBsYXlpbmcgKi8KKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLCBHU1RfU1RBVEVfUExBWUlORyk7CisKKyAgLyogTGlzdGVuIGZvciBFT1MgKi8KKyAgZXZlbnRfbG9vcCAocGlwZWxpbmUpOworCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKHBpcGVsaW5lKSwgR1NUX1NUQVRFX05VTEwpOworCisgIGV4aXQgKDApOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvc3RlcHBpbmcvTWFrZWZpbGUuYW0gYi90ZXN0cy9leGFtcGxlcy9zdGVwcGluZy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTZmYmMxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZXhhbXBsZXMvc3RlcHBpbmcvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw0IEBACitub2luc3RfUFJPR1JBTVMgPSBmcmFtZXN0ZXAxCisKK2ZyYW1lc3RlcDFfTERBREQgPSAkKEdTVF9PQkpfTElCUykKK2ZyYW1lc3RlcDFfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL3N0ZXBwaW5nL01ha2VmaWxlLmluIGIvdGVzdHMvZXhhbXBsZXMvc3RlcHBpbmcvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFiM2QzZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2V4YW1wbGVzL3N0ZXBwaW5nL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNjg3IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitub2luc3RfUFJPR1JBTVMgPSBmcmFtZXN0ZXAxJChFWEVFWFQpCitzdWJkaXIgPSB0ZXN0cy9leGFtcGxlcy9zdGVwcGluZworRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtcHl0aG9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1zY3J1Yi1pbmNsdWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZnVuY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYXJzZXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2ludHJvc3BlY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jaGVjay1jaGVja3MubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2ljb252Lm00ICQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00ICQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L25scy5tNCAkKHRvcF9zcmNkaXIpL200L3BvLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK1BST0dSQU1TID0gJChub2luc3RfUFJPR1JBTVMpCitmcmFtZXN0ZXAxX1NPVVJDRVMgPSBmcmFtZXN0ZXAxLmMKK2ZyYW1lc3RlcDFfT0JKRUNUUyA9IGZyYW1lc3RlcDEtZnJhbWVzdGVwMS4kKE9CSkVYVCkKK2FtX19ERVBFTkRFTkNJRVNfMSA9CitmcmFtZXN0ZXAxX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQorQU1fVl9sdCA9ICQoYW1fX3ZfbHRfJChWKSkKK2FtX192X2x0XyA9ICQoYW1fX3ZfbHRfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9sdF8wID0gLS1zaWxlbnQKK2ZyYW1lc3RlcDFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoZnJhbWVzdGVwMV9DRkxBR1MpIFwKKwkkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCisJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfJChWKSkKK2FtX192X0NDXyA9ICQoYW1fX3ZfQ0NfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgIiAkQDsKK0FNX1ZfYXQgPSAkKGFtX192X2F0XyQoVikpCithbV9fdl9hdF8gPSAkKGFtX192X2F0XyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfYXRfMCA9IEAKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEXyQoVikpCithbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICIgJEA7CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOXyQoVikpCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitTT1VSQ0VTID0gZnJhbWVzdGVwMS5jCitESVNUX1NPVVJDRVMgPSBmcmFtZXN0ZXAxLmMKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVMgPSBAQVNACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JJU09OX1BBVEggPSBAQklTT05fUEFUSEAKK0NBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKK0NBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACitDQyA9IEBDQ0AKK0NDQVMgPSBAQ0NBU0AKK0NDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAorQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAorQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAorQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAorQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRBRElSID0gQERBVEFESVJACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACitETExUT09MID0gQERMTFRPT0xACitET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAorRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKK0VYRUVYVCA9IEBFWEVFWFRACitGRkxBR1MgPSBARkZMQUdTQAorRkdSRVAgPSBARkdSRVBACitGTEVYX1BBVEggPSBARkxFWF9QQVRIQAorR0NPViA9IEBHQ09WQAorR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACitHQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAorR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACitHTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKK0dMSUJfTElCUyA9IEBHTElCX0xJQlNACitHTElCX09OTFlfQ0ZMQUdTID0gQEdMSUJfT05MWV9DRkxBR1NACitHTElCX09OTFlfTElCUyA9IEBHTElCX09OTFlfTElCU0AKK0dMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAorR0xJQl9SRVEgPSBAR0xJQl9SRVFACitHTVBfTElCUyA9IEBHTVBfTElCU0AKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAorR1JFUCA9IEBHUkVQQAorR1NMX0xJQlMgPSBAR1NMX0xJQlNACitHU1RfQUdFID0gQEdTVF9BR0VACitHU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKK0dTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKK0dTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACitHU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAorR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACitHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FQAorR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAorR1NUX0RJU0FCTEVfTkVUX0RFRklORSA9IEBHU1RfRElTQUJMRV9ORVRfREVGSU5FQAorR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKK0dTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACitHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACitHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAorR1NUX0RJU0FCTEVfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1RSQUNFX0RFRklORUAKK0dTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkUgPSBAR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORUAKK0dTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkUgPSBAR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORUAKK0dTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FID0gQEdTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1NfREVGSU5FQAorR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACitHU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKK0dTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACitHU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKK0dTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAorR1NUX01BSk9STUlOT1IgPSBAR1NUX01BSk9STUlOT1JACitHU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKK0dTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKK0dTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACitHU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKK0dTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKK0dTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKK0dTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACitHU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACitHU1RfUEtHX0RFUFMgPSBAR1NUX1BLR19ERVBTQAorR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKK0dTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgPSBAR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFREAKK0dTVF9QUklOVEZfRVhURU5TSU9OX1BPSU5URVJfRk9STUFUX0RFRklORSA9IEBHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkVACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FQAorR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAorR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKK0dTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OX0RFRklORSA9IEBHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkVACitHVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAorSEFWRV9ET0NCT09LMkhUTUwgPSBASEFWRV9ET0NCT09LMkhUTUxACitIQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAorSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAorSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAorSEFWRV9GSUcyREVWID0gQEhBVkVfRklHMkRFVkAKK0hBVkVfR01QID0gQEhBVkVfR01QQAorSEFWRV9HU0wgPSBASEFWRV9HU0xACitIQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAorSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAorSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKK0hBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAorSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKK0hPU1RfQ1BVID0gQEhPU1RfQ1BVQAorSFRNTF9ESVIgPSBASFRNTF9ESVJACitJTkVUX0FUT05fTElCUyA9IEBJTkVUX0FUT05fTElCU0AKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACitJTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKK0lOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKK0lOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKK0lOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAorSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKK0lOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKK0lOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACitJTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJESVIgPSBATElCRElSQAorTElCSUNPTlYgPSBATElCSUNPTlZACitMSUJJTlRMID0gQExJQklOVExACitMSUJNID0gQExJQk1ACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMT0NBTEVESVIgPSBATE9DQUxFRElSQAorTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAorTFRMSUJJTlRMID0gQExUTElCSU5UTEAKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUlOVCA9IEBNQUlOVEAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKK01TR01FUkdFID0gQE1TR01FUkdFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKK1BBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACitQQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAorUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACitQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BMVUdJTkRJUiA9IEBQTFVHSU5ESVJACitQT1NVQiA9IEBQT1NVQkAKK1BST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAorUFlUSE9OID0gQFBZVEhPTkAKK1BZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACitQWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAorUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAorUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1ZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACitWQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACitWQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACitWRVJTSU9OID0gQFZFUlNJT05ACitXQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKK1dJTjMyX0xJQlMgPSBAV0lOMzJfTElCU0AKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKK1hHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKK1hNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAorWFNMVFBST0MgPSBAWFNMVFBST0NACitYU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3BrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACitwa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAorcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3B5ZXhlY2RpciA9IEBweWV4ZWNkaXJACitweXRob25kaXIgPSBAcHl0aG9uZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitmcmFtZXN0ZXAxX0xEQUREID0gJChHU1RfT0JKX0xJQlMpCitmcmFtZXN0ZXAxX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy9zdGVwcGluZy9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy9zdGVwcGluZy9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworY2xlYW4tbm9pbnN0UFJPR1JBTVM6CisJQGxpc3Q9JyQobm9pbnN0X1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKKwl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAorCWxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdAorZnJhbWVzdGVwMSQoRVhFRVhUKTogJChmcmFtZXN0ZXAxX09CSkVDVFMpICQoZnJhbWVzdGVwMV9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBmcmFtZXN0ZXAxJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChmcmFtZXN0ZXAxX0xJTkspICQoZnJhbWVzdGVwMV9PQkpFQ1RTKSAkKGZyYW1lc3RlcDFfTERBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2ZyYW1lc3RlcDEtZnJhbWVzdGVwMS5Qb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCitmcmFtZXN0ZXAxLWZyYW1lc3RlcDEubzogZnJhbWVzdGVwMS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZnJhbWVzdGVwMV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZnJhbWVzdGVwMS1mcmFtZXN0ZXAxLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2ZyYW1lc3RlcDEtZnJhbWVzdGVwMS5UcG8gLWMgLW8gZnJhbWVzdGVwMS1mcmFtZXN0ZXAxLm8gYHRlc3QgLWYgJ2ZyYW1lc3RlcDEuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZnJhbWVzdGVwMS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9mcmFtZXN0ZXAxLWZyYW1lc3RlcDEuVHBvICQoREVQRElSKS9mcmFtZXN0ZXAxLWZyYW1lc3RlcDEuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdmcmFtZXN0ZXAxLmMnIG9iamVjdD0nZnJhbWVzdGVwMS1mcmFtZXN0ZXAxLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGZyYW1lc3RlcDFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZnJhbWVzdGVwMS1mcmFtZXN0ZXAxLm8gYHRlc3QgLWYgJ2ZyYW1lc3RlcDEuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZnJhbWVzdGVwMS5jCisKK2ZyYW1lc3RlcDEtZnJhbWVzdGVwMS5vYmo6IGZyYW1lc3RlcDEuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGZyYW1lc3RlcDFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGZyYW1lc3RlcDEtZnJhbWVzdGVwMS5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2ZyYW1lc3RlcDEtZnJhbWVzdGVwMS5UcG8gLWMgLW8gZnJhbWVzdGVwMS1mcmFtZXN0ZXAxLm9iaiBgaWYgdGVzdCAtZiAnZnJhbWVzdGVwMS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2ZyYW1lc3RlcDEuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZnJhbWVzdGVwMS5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9mcmFtZXN0ZXAxLWZyYW1lc3RlcDEuVHBvICQoREVQRElSKS9mcmFtZXN0ZXAxLWZyYW1lc3RlcDEuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdmcmFtZXN0ZXAxLmMnIG9iamVjdD0nZnJhbWVzdGVwMS1mcmFtZXN0ZXAxLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZnJhbWVzdGVwMV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBmcmFtZXN0ZXAxLWZyYW1lc3RlcDEub2JqIGBpZiB0ZXN0IC1mICdmcmFtZXN0ZXAxLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZnJhbWVzdGVwMS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9mcmFtZXN0ZXAxLmMnOyBmaWAKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChQUk9HUkFNUykKK2luc3RhbGxkaXJzOgoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIFwKKwltb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbToKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCisJY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBjdGFncyBkaXN0Y2xlYW4gXAorCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisJcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9zdGVwcGluZy9mcmFtZXN0ZXAxLmMgYi90ZXN0cy9leGFtcGxlcy9zdGVwcGluZy9mcmFtZXN0ZXAxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmViMTg4MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2V4YW1wbGVzL3N0ZXBwaW5nL2ZyYW1lc3RlcDEuYwpAQCAtMCwwICsxLDE2NSBAQAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworc3RhdGljIHZvaWQKK2V2ZW50X2xvb3AgKEdzdEVsZW1lbnQgKiBwaXBlKQoreworICBHc3RCdXMgKmJ1czsKKyAgR3N0TWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisgIGdib29sZWFuIHJ1bm5pbmcgPSBUUlVFOworCisgIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKEdTVF9FTEVNRU5UIChwaXBlKSk7CisKKyAgd2hpbGUgKHJ1bm5pbmcpIHsKKyAgICBtZXNzYWdlID0gZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQgKGJ1cywgLTEsIEdTVF9NRVNTQUdFX0FOWSk7CisKKyAgICBnX2Fzc2VydCAobWVzc2FnZSAhPSBOVUxMKTsKKworICAgIHN3aXRjaCAobWVzc2FnZS0+dHlwZSkgeworICAgICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6CisgICAgICAgIGdfbWVzc2FnZSAoImdvdCBFT1MiKTsKKyAgICAgICAgcnVubmluZyA9IEZBTFNFOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR1NUX01FU1NBR0VfV0FSTklORzp7CisgICAgICAgIEdFcnJvciAqZ2Vycm9yOworICAgICAgICBnY2hhciAqZGVidWc7CisKKyAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfd2FybmluZyAobWVzc2FnZSwgJmdlcnJvciwgJmRlYnVnKTsKKyAgICAgICAgZ3N0X29iamVjdF9kZWZhdWx0X2Vycm9yIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpLCBnZXJyb3IsIGRlYnVnKTsKKyAgICAgICAgZ19lcnJvcl9mcmVlIChnZXJyb3IpOworICAgICAgICBnX2ZyZWUgKGRlYnVnKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOgorICAgICAgeworICAgICAgICBHRXJyb3IgKmdlcnJvcjsKKyAgICAgICAgZ2NoYXIgKmRlYnVnOworCisgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtZXNzYWdlLCAmZ2Vycm9yLCAmZGVidWcpOworICAgICAgICBnc3Rfb2JqZWN0X2RlZmF1bHRfZXJyb3IgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSksIGdlcnJvciwgZGVidWcpOworICAgICAgICBnX2Vycm9yX2ZyZWUgKGdlcnJvcik7CisgICAgICAgIGdfZnJlZSAoZGVidWcpOworICAgICAgICBydW5uaW5nID0gRkFMU0U7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBHU1RfTUVTU0FHRV9TVEVQX0RPTkU6CisgICAgICB7CisgICAgICAgIEdzdEZvcm1hdCBmb3JtYXQ7CisgICAgICAgIGd1aW50NjQgYW1vdW50OworICAgICAgICBnZG91YmxlIHJhdGU7CisgICAgICAgIGdib29sZWFuIGZsdXNoLCBpbnRlcm1lZGlhdGU7CisgICAgICAgIGd1aW50NjQgZHVyYXRpb247CisgICAgICAgIGdib29sZWFuIGVvczsKKworICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9zdGVwX2RvbmUgKG1lc3NhZ2UsICZmb3JtYXQsICZhbW91bnQsICZyYXRlLAorICAgICAgICAgICAgJmZsdXNoLCAmaW50ZXJtZWRpYXRlLCAmZHVyYXRpb24sICZlb3MpOworCisgICAgICAgIGlmIChmb3JtYXQgPT0gR1NUX0ZPUk1BVF9ERUZBVUxUKSB7CisgICAgICAgICAgZ19tZXNzYWdlICgic3RlcCBkb25lOiAlIiBHU1RfVElNRV9GT1JNQVQgIiBza2lwcGVkIGluICUiCisgICAgICAgICAgICAgIEdfR1VJTlQ2NF9GT1JNQVQgIiBmcmFtZXMiLCBHU1RfVElNRV9BUkdTIChkdXJhdGlvbiksIGFtb3VudCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgZ19tZXNzYWdlICgic3RlcCBkb25lOiAlIiBHU1RfVElNRV9GT1JNQVQgIiBza2lwcGVkIiwKKyAgICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAoZHVyYXRpb24pKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7CisgIH0KKyAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKK30KKworLyogc2lnbmFsbGVkIHdoZW4gYSBuZXcgcHJlcm9sbCBidWZmZXIgaXMgYXZhaWxhYmxlICovCitzdGF0aWMgdm9pZAorbmV3X3ByZXJvbGwgKEdzdEVsZW1lbnQgKiBhcHBzaW5rLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIEdzdEJ1ZmZlciAqYnVmZmVyOworCisgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSAoYXBwc2luaywgInB1bGwtcHJlcm9sbCIsICZidWZmZXIpOworCisgIGdfbWVzc2FnZSAoImhhdmUgbmV3LXByZXJvbGwgYnVmZmVyICVwLCB0aW1lc3RhbXAgJSIgR1NUX1RJTUVfRk9STUFULCBidWZmZXIsCisgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSkpOworCisgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Cit9CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgR3N0RWxlbWVudCAqYmluLCAqdmlkZW90ZXN0c3JjLCAqYXBwc2luazsKKyAgZ2ludDY0IHBvczsKKworICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKKworICAvKiBjcmVhdGUgYSBuZXcgYmluIHRvIGhvbGQgdGhlIGVsZW1lbnRzICovCisgIGJpbiA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOworICBnX2Fzc2VydCAoYmluKTsKKworICAvKiBjcmVhdGUgYSBmYWtlIHNvdXJjZSAqLworICB2aWRlb3Rlc3RzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ2aWRlb3Rlc3RzcmMiLCAidmlkZW90ZXN0c3JjIik7CisgIGdfYXNzZXJ0ICh2aWRlb3Rlc3RzcmMpOworICBnX29iamVjdF9zZXQgKHZpZGVvdGVzdHNyYywgIm51bS1idWZmZXJzIiwgMTAsIE5VTEwpOworCisgIC8qIGFuZCBhIGZha2Ugc2luayAqLworICBhcHBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXBwc2luayIsICJhcHBzaW5rIik7CisgIGdfYXNzZXJ0IChhcHBzaW5rKTsKKyAgZ19vYmplY3Rfc2V0IChhcHBzaW5rLCAiZW1pdC1zaWduYWxzIiwgVFJVRSwgTlVMTCk7CisgIGdfb2JqZWN0X3NldCAoYXBwc2luaywgInN5bmMiLCBUUlVFLCBOVUxMKTsKKyAgZ19zaWduYWxfY29ubmVjdCAoYXBwc2luaywgIm5ldy1wcmVyb2xsIiwgKEdDYWxsYmFjaykgbmV3X3ByZXJvbGwsIE5VTEwpOworCisgIC8qIGFkZCBvYmplY3RzIHRvIHRoZSBtYWluIHBpcGVsaW5lICovCisgIGdzdF9iaW5fYWRkIChHU1RfQklOIChiaW4pLCB2aWRlb3Rlc3RzcmMpOworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAoYmluKSwgYXBwc2luayk7CisKKyAgLyogbGluayB0aGUgZWxlbWVudHMgKi8KKyAgZ3N0X2VsZW1lbnRfbGlua19tYW55ICh2aWRlb3Rlc3RzcmMsIGFwcHNpbmssIE5VTEwpOworCisgIC8qIGdvIHRvIHRoZSBQQVVTRUQgc3RhdGUgYW5kIHdhaXQgZm9yIHByZXJvbGwgKi8KKyAgZ19tZXNzYWdlICgicHJlcm9sbGluZyBmaXJzdCBmcmFtZSIpOworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX1BBVVNFRCk7CisgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoYmluLCBOVUxMLCBOVUxMLCAtMSk7CisKKyAgLyogc3RlcCB0d28gZnJhbWVzLCBmbHVzaCBzbyB0aGF0IG5ldyBwcmVyb2xsIGlzIHF1ZXVlZCAqLworICBnX21lc3NhZ2UgKCJzdGVwcGluZyB0aHJlZSBmcmFtZXMiKTsKKyAgZ19hc3NlcnQgKGdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKGJpbiwKKyAgICAgICAgICBnc3RfZXZlbnRfbmV3X3N0ZXAgKEdTVF9GT1JNQVRfQlVGRkVSUywgMiwgMS4wLCBUUlVFLCBGQUxTRSkpKTsKKworICAvKiBibG9ja3MgYW5kIHJldHVybnMgd2hlbiB3ZSByZWNlaXZlZCB0aGUgc3RlcCBkb25lIG1lc3NhZ2UgKi8KKyAgZXZlbnRfbG9vcCAoYmluKTsKKworICAvKiB3YWl0IGZvciBzdGVwIHRvIHJlYWxseSBjb21wbGV0ZSAqLworICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKGJpbiwgTlVMTCwgTlVMTCwgLTEpOworCisgIGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uIChiaW4sIEdTVF9GT1JNQVRfVElNRSwgJnBvcyk7CisgIGdfbWVzc2FnZSAoInN0ZXBwZWQgdHdvIGZyYW1lcywgbm93IGF0ICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAgICAgIEdTVF9USU1FX0FSR1MgKHBvcykpOworCisgIC8qIHN0ZXAgMyBmcmFtZXMsIGZsdXNoIHNvIHRoYXQgbmV3IHByZXJvbGwgaXMgcXVldWVkICovCisgIGdfbWVzc2FnZSAoInN0ZXBwaW5nIDEyMCBtaWxsaXNlY29uZHMgIik7CisgIGdfYXNzZXJ0IChnc3RfZWxlbWVudF9zZW5kX2V2ZW50IChiaW4sCisgICAgICAgICAgZ3N0X2V2ZW50X25ld19zdGVwIChHU1RfRk9STUFUX1RJTUUsIDEyMCAqIEdTVF9NU0VDT05ELCAxLjAsIFRSVUUsCisgICAgICAgICAgICAgIEZBTFNFKSkpOworCisgIC8qIGJsb2NrcyBhbmQgcmV0dXJucyB3aGVuIHdlIHJlY2VpdmVkIHRoZSBzdGVwIGRvbmUgbWVzc2FnZSAqLworICBldmVudF9sb29wIChiaW4pOworCisgIC8qIHdhaXQgZm9yIHN0ZXAgdG8gcmVhbGx5IGNvbXBsZXRlICovCisgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoYmluLCBOVUxMLCBOVUxMLCAtMSk7CisKKyAgZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24gKGJpbiwgR1NUX0ZPUk1BVF9USU1FLCAmcG9zKTsKKyAgZ19tZXNzYWdlICgic3RlcHBlZCAxMjBtcyBmcmFtZXMsIG5vdyBhdCAlIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICBHU1RfVElNRV9BUkdTIChwb3MpKTsKKworICBnX21lc3NhZ2UgKCJwbGF5aW5nIHVudGlsIEVPUyIpOworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX1BMQVlJTkcpOworICAvKiBSdW4gZXZlbnQgbG9vcCBsaXN0ZW5pbmcgZm9yIGJ1cyBtZXNzYWdlcyB1bnRpbCBFT1Mgb3IgRVJST1IgKi8KKyAgZXZlbnRfbG9vcCAoYmluKTsKKyAgZ19tZXNzYWdlICgiZmluaXNoZWQiKTsKKworICAvKiBzdG9wIHRoZSBiaW4gKi8KKyAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9OVUxMKTsKKworICBleGl0ICgwKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL3N0cmVhbXMvTWFrZWZpbGUuYW0gYi90ZXN0cy9leGFtcGxlcy9zdHJlYW1zL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMGRmMGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9leGFtcGxlcy9zdHJlYW1zL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMTQgQEAKK25vaW5zdF9QUk9HUkFNUyA9IHN0cmVhbS1zdGF0dXMKK2lmIEhBVkVfUFRIUkVBRF9ICitub2luc3RfUFJPR1JBTVMgKz0gcnRwb29sLXRlc3QKK2VuZGlmCisKK3N0cmVhbV9zdGF0dXNfU09VUkNFUyA9IHN0cmVhbS1zdGF0dXMuYworc3RyZWFtX3N0YXR1c19MREFERCA9ICQoR1NUX09CSl9MSUJTKQorc3RyZWFtX3N0YXR1c19DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQorCitydHBvb2xfdGVzdF9TT1VSQ0VTID0gcnRwb29sLXRlc3QuYyB0ZXN0cnRwb29sLmggdGVzdHJ0cG9vbC5jCitydHBvb2xfdGVzdF9MREFERCA9ICQoR1NUX09CSl9MSUJTKSAtbHB0aHJlYWQKK3J0cG9vbF90ZXN0X0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCisKK0VYVFJBX0RJU1QgPSBydHBvb2wtdGVzdC5jIHRlc3RydHBvb2wuaCB0ZXN0cnRwb29sLmMKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL3N0cmVhbXMvTWFrZWZpbGUuaW4gYi90ZXN0cy9leGFtcGxlcy9zdHJlYW1zL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNTdhNzMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9leGFtcGxlcy9zdHJlYW1zL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNzM4IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitub2luc3RfUFJPR1JBTVMgPSBzdHJlYW0tc3RhdHVzJChFWEVFWFQpICQoYW1fX0VYRUVYVF8xKQorQEhBVkVfUFRIUkVBRF9IX1RSVUVAYW1fX2FwcGVuZF8xID0gcnRwb29sLXRlc3QKK3N1YmRpciA9IHRlc3RzL2V4YW1wbGVzL3N0cmVhbXMKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXB5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtc2NydWItaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitASEFWRV9QVEhSRUFEX0hfVFJVRUBhbV9fRVhFRVhUXzEgPSBydHBvb2wtdGVzdCQoRVhFRVhUKQorUFJPR1JBTVMgPSAkKG5vaW5zdF9QUk9HUkFNUykKK2FtX3J0cG9vbF90ZXN0X09CSkVDVFMgPSBydHBvb2xfdGVzdC1ydHBvb2wtdGVzdC4kKE9CSkVYVCkgXAorCXJ0cG9vbF90ZXN0LXRlc3RydHBvb2wuJChPQkpFWFQpCitydHBvb2xfdGVzdF9PQkpFQ1RTID0gJChhbV9ydHBvb2xfdGVzdF9PQkpFQ1RTKQorYW1fX0RFUEVOREVOQ0lFU18xID0KK3J0cG9vbF90ZXN0X0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQorQU1fVl9sdCA9ICQoYW1fX3ZfbHRfJChWKSkKK2FtX192X2x0XyA9ICQoYW1fX3ZfbHRfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9sdF8wID0gLS1zaWxlbnQKK3J0cG9vbF90ZXN0X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKHJ0cG9vbF90ZXN0X0NGTEFHUykgXAorCSQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK2FtX3N0cmVhbV9zdGF0dXNfT0JKRUNUUyA9IHN0cmVhbV9zdGF0dXMtc3RyZWFtLXN0YXR1cy4kKE9CSkVYVCkKK3N0cmVhbV9zdGF0dXNfT0JKRUNUUyA9ICQoYW1fc3RyZWFtX3N0YXR1c19PQkpFQ1RTKQorc3RyZWFtX3N0YXR1c19ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKK3N0cmVhbV9zdGF0dXNfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoc3RyZWFtX3N0YXR1c19DRkxBR1MpIFwKKwkkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCisJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfJChWKSkKK2FtX192X0NDXyA9ICQoYW1fX3ZfQ0NfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgIiAkQDsKK0FNX1ZfYXQgPSAkKGFtX192X2F0XyQoVikpCithbV9fdl9hdF8gPSAkKGFtX192X2F0XyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfYXRfMCA9IEAKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEXyQoVikpCithbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICIgJEA7CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOXyQoVikpCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitTT1VSQ0VTID0gJChydHBvb2xfdGVzdF9TT1VSQ0VTKSAkKHN0cmVhbV9zdGF0dXNfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQocnRwb29sX3Rlc3RfU09VUkNFUykgJChzdHJlYW1fc3RhdHVzX1NPVVJDRVMpCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKK0NDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKK0NIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKK0NIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKK0NIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUiA9IEBEQVRBRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAorRExMVE9PTCA9IEBETExUT09MQAorRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKK0VSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACitFWEVFWFQgPSBARVhFRVhUQAorRkZMQUdTID0gQEZGTEFHU0AKK0ZHUkVQID0gQEZHUkVQQAorRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKK0dDT1YgPSBAR0NPVkAKK0dDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAorR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACitHTElCX0xJQlMgPSBAR0xJQl9MSUJTQAorR0xJQl9PTkxZX0NGTEFHUyA9IEBHTElCX09OTFlfQ0ZMQUdTQAorR0xJQl9PTkxZX0xJQlMgPSBAR0xJQl9PTkxZX0xJQlNACitHTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKK0dMSUJfUkVRID0gQEdMSUJfUkVRQAorR01QX0xJQlMgPSBAR01QX0xJQlNACitHTVNHRk1UID0gQEdNU0dGTVRACitHTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKK0dSRVAgPSBAR1JFUEAKK0dTTF9MSUJTID0gQEdTTF9MSUJTQAorR1NUX0FHRSA9IEBHU1RfQUdFQAorR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACitHU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACitHU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAorR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKK0dTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAorR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORUAKK0dTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKK0dTVF9ESVNBQkxFX05FVF9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfTkVUX0RFRklORUAKK0dTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACitHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAorR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAorR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKK0dTVF9ESVNBQkxFX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkVACitHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACitHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACitHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORSA9IEBHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTX0RFRklORUAKK0dTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAorR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACitHU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAorR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACitHU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKK0dTVF9NQUpPUk1JTk9SID0gQEdTVF9NQUpPUk1JTk9SQAorR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACitHU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACitHU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAorR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACitHU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACitHU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACitHU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAorR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAorR1NUX1BLR19ERVBTID0gQEdTVF9QS0dfREVQU0AKK0dTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACitHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACitHU1RfUFJJTlRGX0VYVEVOU0lPTl9QT0lOVEVSX0ZPUk1BVF9ERUZJTkUgPSBAR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FQAorR1NUX1BSSU5URl9FWFRFTlNJT05fU0VHTUVOVF9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORUAKK0dTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKK0dTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACitHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTl9ERUZJTkUgPSBAR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FQAorR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKK0hBVkVfRE9DQk9PSzJIVE1MID0gQEhBVkVfRE9DQk9PSzJIVE1MQAorSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKK0hBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKK0hBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKK0hBVkVfRklHMkRFViA9IEBIQVZFX0ZJRzJERVZACitIQVZFX0dNUCA9IEBIQVZFX0dNUEAKK0hBVkVfR1NMID0gQEhBVkVfR1NMQAorSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKK0hBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKK0hBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACitIQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKK0hBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACitIT1NUX0NQVSA9IEBIT1NUX0NQVUAKK0hUTUxfRElSID0gQEhUTUxfRElSQAorSU5FVF9BVE9OX0xJQlMgPSBASU5FVF9BVE9OX0xJQlNACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCRElSID0gQExJQkRJUkAKK0xJQklDT05WID0gQExJQklDT05WQAorTElCSU5UTCA9IEBMSUJJTlRMQAorTElCTSA9IEBMSUJNQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTE9DQUxFRElSID0gQExPQ0FMRURJUkAKK0xUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKK0xUTElCSU5UTCA9IEBMVExJQklOVExACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACitQQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAorUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKK1BBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAorUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BFUkxfUEFUSCA9IEBQRVJMX1BBVEhACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQTFVHSU5ESVIgPSBAUExVR0lORElSQAorUE9TVUIgPSBAUE9TVUJACitQUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAorVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAorVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACitXSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACitYTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKK1hTTFRQUk9DID0gQFhTTFRQUk9DQAorWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3BsdWdpbmRpciA9IEBwbHVnaW5kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorc3RyZWFtX3N0YXR1c19TT1VSQ0VTID0gc3RyZWFtLXN0YXR1cy5jCitzdHJlYW1fc3RhdHVzX0xEQUREID0gJChHU1RfT0JKX0xJQlMpCitzdHJlYW1fc3RhdHVzX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCitydHBvb2xfdGVzdF9TT1VSQ0VTID0gcnRwb29sLXRlc3QuYyB0ZXN0cnRwb29sLmggdGVzdHJ0cG9vbC5jCitydHBvb2xfdGVzdF9MREFERCA9ICQoR1NUX09CSl9MSUJTKSAtbHB0aHJlYWQKK3J0cG9vbF90ZXN0X0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCitFWFRSQV9ESVNUID0gcnRwb29sLXRlc3QuYyB0ZXN0cnRwb29sLmggdGVzdHJ0cG9vbC5jCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy9zdHJlYW1zL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251IHRlc3RzL2V4YW1wbGVzL3N0cmVhbXMvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisKK2NsZWFuLW5vaW5zdFBST0dSQU1TOgorCUBsaXN0PSckKG5vaW5zdF9QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCisJdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKKwlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QKK3J0cG9vbC10ZXN0JChFWEVFWFQpOiAkKHJ0cG9vbF90ZXN0X09CSkVDVFMpICQocnRwb29sX3Rlc3RfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgcnRwb29sLXRlc3QkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKHJ0cG9vbF90ZXN0X0xJTkspICQocnRwb29sX3Rlc3RfT0JKRUNUUykgJChydHBvb2xfdGVzdF9MREFERCkgJChMSUJTKQorc3RyZWFtLXN0YXR1cyQoRVhFRVhUKTogJChzdHJlYW1fc3RhdHVzX09CSkVDVFMpICQoc3RyZWFtX3N0YXR1c19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBzdHJlYW0tc3RhdHVzJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChzdHJlYW1fc3RhdHVzX0xJTkspICQoc3RyZWFtX3N0YXR1c19PQkpFQ1RTKSAkKHN0cmVhbV9zdGF0dXNfTERBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3J0cG9vbF90ZXN0LXJ0cG9vbC10ZXN0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9ydHBvb2xfdGVzdC10ZXN0cnRwb29sLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zdHJlYW1fc3RhdHVzLXN0cmVhbS1zdGF0dXMuUG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworcnRwb29sX3Rlc3QtcnRwb29sLXRlc3QubzogcnRwb29sLXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJ0cG9vbF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBydHBvb2xfdGVzdC1ydHBvb2wtdGVzdC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9ydHBvb2xfdGVzdC1ydHBvb2wtdGVzdC5UcG8gLWMgLW8gcnRwb29sX3Rlc3QtcnRwb29sLXRlc3QubyBgdGVzdCAtZiAncnRwb29sLXRlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcnRwb29sLXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvcnRwb29sX3Rlc3QtcnRwb29sLXRlc3QuVHBvICQoREVQRElSKS9ydHBvb2xfdGVzdC1ydHBvb2wtdGVzdC5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3J0cG9vbC10ZXN0LmMnIG9iamVjdD0ncnRwb29sX3Rlc3QtcnRwb29sLXRlc3QubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocnRwb29sX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcnRwb29sX3Rlc3QtcnRwb29sLXRlc3QubyBgdGVzdCAtZiAncnRwb29sLXRlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcnRwb29sLXRlc3QuYworCitydHBvb2xfdGVzdC1ydHBvb2wtdGVzdC5vYmo6IHJ0cG9vbC10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChydHBvb2xfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcnRwb29sX3Rlc3QtcnRwb29sLXRlc3Qub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9ydHBvb2xfdGVzdC1ydHBvb2wtdGVzdC5UcG8gLWMgLW8gcnRwb29sX3Rlc3QtcnRwb29sLXRlc3Qub2JqIGBpZiB0ZXN0IC1mICdydHBvb2wtdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3J0cG9vbC10ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3J0cG9vbC10ZXN0LmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3J0cG9vbF90ZXN0LXJ0cG9vbC10ZXN0LlRwbyAkKERFUERJUikvcnRwb29sX3Rlc3QtcnRwb29sLXRlc3QuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdydHBvb2wtdGVzdC5jJyBvYmplY3Q9J3J0cG9vbF90ZXN0LXJ0cG9vbC10ZXN0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocnRwb29sX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcnRwb29sX3Rlc3QtcnRwb29sLXRlc3Qub2JqIGBpZiB0ZXN0IC1mICdydHBvb2wtdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3J0cG9vbC10ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3J0cG9vbC10ZXN0LmMnOyBmaWAKKworcnRwb29sX3Rlc3QtdGVzdHJ0cG9vbC5vOiB0ZXN0cnRwb29sLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChydHBvb2xfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcnRwb29sX3Rlc3QtdGVzdHJ0cG9vbC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9ydHBvb2xfdGVzdC10ZXN0cnRwb29sLlRwbyAtYyAtbyBydHBvb2xfdGVzdC10ZXN0cnRwb29sLm8gYHRlc3QgLWYgJ3Rlc3RydHBvb2wuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdGVzdHJ0cG9vbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9ydHBvb2xfdGVzdC10ZXN0cnRwb29sLlRwbyAkKERFUERJUikvcnRwb29sX3Rlc3QtdGVzdHJ0cG9vbC5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3Rlc3RydHBvb2wuYycgb2JqZWN0PSdydHBvb2xfdGVzdC10ZXN0cnRwb29sLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJ0cG9vbF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHJ0cG9vbF90ZXN0LXRlc3RydHBvb2wubyBgdGVzdCAtZiAndGVzdHJ0cG9vbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0ZXN0cnRwb29sLmMKKworcnRwb29sX3Rlc3QtdGVzdHJ0cG9vbC5vYmo6IHRlc3RydHBvb2wuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJ0cG9vbF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBydHBvb2xfdGVzdC10ZXN0cnRwb29sLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvcnRwb29sX3Rlc3QtdGVzdHJ0cG9vbC5UcG8gLWMgLW8gcnRwb29sX3Rlc3QtdGVzdHJ0cG9vbC5vYmogYGlmIHRlc3QgLWYgJ3Rlc3RydHBvb2wuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd0ZXN0cnRwb29sLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3Rlc3RydHBvb2wuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvcnRwb29sX3Rlc3QtdGVzdHJ0cG9vbC5UcG8gJChERVBESVIpL3J0cG9vbF90ZXN0LXRlc3RydHBvb2wuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSd0ZXN0cnRwb29sLmMnIG9iamVjdD0ncnRwb29sX3Rlc3QtdGVzdHJ0cG9vbC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJ0cG9vbF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHJ0cG9vbF90ZXN0LXRlc3RydHBvb2wub2JqIGBpZiB0ZXN0IC1mICd0ZXN0cnRwb29sLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndGVzdHJ0cG9vbC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS90ZXN0cnRwb29sLmMnOyBmaWAKKworc3RyZWFtX3N0YXR1cy1zdHJlYW0tc3RhdHVzLm86IHN0cmVhbS1zdGF0dXMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHN0cmVhbV9zdGF0dXNfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHN0cmVhbV9zdGF0dXMtc3RyZWFtLXN0YXR1cy5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9zdHJlYW1fc3RhdHVzLXN0cmVhbS1zdGF0dXMuVHBvIC1jIC1vIHN0cmVhbV9zdGF0dXMtc3RyZWFtLXN0YXR1cy5vIGB0ZXN0IC1mICdzdHJlYW0tc3RhdHVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHN0cmVhbS1zdGF0dXMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvc3RyZWFtX3N0YXR1cy1zdHJlYW0tc3RhdHVzLlRwbyAkKERFUERJUikvc3RyZWFtX3N0YXR1cy1zdHJlYW0tc3RhdHVzLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nc3RyZWFtLXN0YXR1cy5jJyBvYmplY3Q9J3N0cmVhbV9zdGF0dXMtc3RyZWFtLXN0YXR1cy5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzdHJlYW1fc3RhdHVzX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHN0cmVhbV9zdGF0dXMtc3RyZWFtLXN0YXR1cy5vIGB0ZXN0IC1mICdzdHJlYW0tc3RhdHVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHN0cmVhbS1zdGF0dXMuYworCitzdHJlYW1fc3RhdHVzLXN0cmVhbS1zdGF0dXMub2JqOiBzdHJlYW0tc3RhdHVzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzdHJlYW1fc3RhdHVzX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzdHJlYW1fc3RhdHVzLXN0cmVhbS1zdGF0dXMub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9zdHJlYW1fc3RhdHVzLXN0cmVhbS1zdGF0dXMuVHBvIC1jIC1vIHN0cmVhbV9zdGF0dXMtc3RyZWFtLXN0YXR1cy5vYmogYGlmIHRlc3QgLWYgJ3N0cmVhbS1zdGF0dXMuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdzdHJlYW0tc3RhdHVzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3N0cmVhbS1zdGF0dXMuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvc3RyZWFtX3N0YXR1cy1zdHJlYW0tc3RhdHVzLlRwbyAkKERFUERJUikvc3RyZWFtX3N0YXR1cy1zdHJlYW0tc3RhdHVzLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nc3RyZWFtLXN0YXR1cy5jJyBvYmplY3Q9J3N0cmVhbV9zdGF0dXMtc3RyZWFtLXN0YXR1cy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHN0cmVhbV9zdGF0dXNfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3RyZWFtX3N0YXR1cy1zdHJlYW0tc3RhdHVzLm9iaiBgaWYgdGVzdCAtZiAnc3RyZWFtLXN0YXR1cy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3N0cmVhbS1zdGF0dXMuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvc3RyZWFtLXN0YXR1cy5jJzsgZmlgCisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJc2V0IHg7IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoUFJPR1JBTVMpCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBcCisJbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgY3RhZ3MgZGlzdGNsZWFuIFwKKwlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCisJaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCisJaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKKwltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCisJbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAorCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy9ydHBvb2wtdGVzdC5jIGIvdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy9ydHBvb2wtdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MGI2ZWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9leGFtcGxlcy9zdHJlYW1zL3J0cG9vbC10ZXN0LmMKQEAgLTAsMCArMSwxNzIgQEAKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKKyNpbmNsdWRlICJ0ZXN0cnRwb29sLmgiCisKK3N0YXRpYyBHc3RUYXNrUG9vbCAqcG9vbDsKKworc3RhdGljIHZvaWQKK2V2ZW50X2xvb3AgKEdzdEJ1cyAqIGJ1cywgR3N0RWxlbWVudCAqIHBpcGUpCit7CisgIEdzdE1lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMOworCisgIHdoaWxlIChUUlVFKSB7CisgICAgbWVzc2FnZSA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9BTlksIC0xKTsKKworICAgIGdfYXNzZXJ0IChtZXNzYWdlICE9IE5VTEwpOworCisgICAgc3dpdGNoIChtZXNzYWdlLT50eXBlKSB7CisgICAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKKyAgICAgICAgZ19tZXNzYWdlICgicmVjZWl2ZWQgRU9TIik7CisgICAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgY2FzZSBHU1RfTUVTU0FHRV9XQVJOSU5HOgorICAgICAgeworICAgICAgICBHRXJyb3IgKmdlcnJvcjsKKyAgICAgICAgZ2NoYXIgKmRlYnVnOworCisgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmcgKG1lc3NhZ2UsICZnZXJyb3IsICZkZWJ1Zyk7CisgICAgICAgIGdzdF9vYmplY3RfZGVmYXVsdF9lcnJvciAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSwgZ2Vycm9yLCBkZWJ1Zyk7CisgICAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKKyAgICAgICAgZ19lcnJvcl9mcmVlIChnZXJyb3IpOworICAgICAgICBnX2ZyZWUgKGRlYnVnKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjp7CisgICAgICAgIEdFcnJvciAqZ2Vycm9yOworICAgICAgICBnY2hhciAqZGVidWc7CisKKyAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1lc3NhZ2UsICZnZXJyb3IsICZkZWJ1Zyk7CisgICAgICAgIGdzdF9vYmplY3RfZGVmYXVsdF9lcnJvciAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSwgZ2Vycm9yLCBkZWJ1Zyk7CisgICAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKKyAgICAgICAgZ19lcnJvcl9mcmVlIChnZXJyb3IpOworICAgICAgICBnX2ZyZWUgKGRlYnVnKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgZGVmYXVsdDoKKyAgICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOworICAgICAgICBicmVhazsKKyAgICB9CisgIH0KK30KKworc3RhdGljIEdzdEJ1c1N5bmNSZXBseQorc3luY19idXNfaGFuZGxlciAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbWVzc2FnZSwgR3N0RWxlbWVudCAqIGJpbikKK3sKKyAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSkgeworICAgIGNhc2UgR1NUX01FU1NBR0VfU1RSRUFNX1NUQVRVUzoKKyAgICB7CisgICAgICBHc3RTdHJlYW1TdGF0dXNUeXBlIHR5cGU7CisgICAgICBHc3RFbGVtZW50ICpvd25lcjsKKyAgICAgIGNvbnN0IEdWYWx1ZSAqdmFsOworICAgICAgZ2NoYXIgKnBhdGg7CisgICAgICBHc3RUYXNrICp0YXNrID0gTlVMTDsKKworICAgICAgZ19tZXNzYWdlICgicmVjZWl2ZWQgU1RSRUFNX1NUQVRVUyIpOworICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RyZWFtX3N0YXR1cyAobWVzc2FnZSwgJnR5cGUsICZvd25lcik7CisKKyAgICAgIHZhbCA9IGdzdF9tZXNzYWdlX2dldF9zdHJlYW1fc3RhdHVzX29iamVjdCAobWVzc2FnZSk7CisKKyAgICAgIGdfbWVzc2FnZSAoInR5cGU6ICAgJWQiLCB0eXBlKTsKKyAgICAgIHBhdGggPSBnc3Rfb2JqZWN0X2dldF9wYXRoX3N0cmluZyAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSk7CisgICAgICBnX21lc3NhZ2UgKCJzb3VyY2U6ICVzIiwgcGF0aCk7CisgICAgICBnX2ZyZWUgKHBhdGgpOworICAgICAgcGF0aCA9IGdzdF9vYmplY3RfZ2V0X3BhdGhfc3RyaW5nIChHU1RfT0JKRUNUIChvd25lcikpOworICAgICAgZ19tZXNzYWdlICgib3duZXI6ICAlcyIsIHBhdGgpOworICAgICAgZ19mcmVlIChwYXRoKTsKKworICAgICAgaWYgKEdfVkFMVUVfSE9MRFNfT0JKRUNUICh2YWwpKSB7CisgICAgICAgIGdfbWVzc2FnZSAoIm9iamVjdDogdHlwZSAlcywgdmFsdWUgJXAiLCBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsKSwKKyAgICAgICAgICAgIGdfdmFsdWVfZ2V0X29iamVjdCAodmFsKSk7CisgICAgICB9IGVsc2UgaWYgKEdfVkFMVUVfSE9MRFNfUE9JTlRFUiAodmFsKSkgeworICAgICAgICBnX21lc3NhZ2UgKCJvYmplY3Q6IHR5cGUgJXMsIHZhbHVlICVwIiwgR19WQUxVRV9UWVBFX05BTUUgKHZhbCksCisgICAgICAgICAgICBnX3ZhbHVlX2dldF9wb2ludGVyICh2YWwpKTsKKyAgICAgIH0gZWxzZSBpZiAoR19JU19WQUxVRSAodmFsKSkgeworICAgICAgICBnX21lc3NhZ2UgKCJvYmplY3Q6IHR5cGUgJXMiLCBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsKSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBnX21lc3NhZ2UgKCJvYmplY3Q6IChudWxsKSIpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgLyogc2VlIGlmIHdlIGtub3cgaG93IHRvIGRlYWwgd2l0aCB0aGlzIG9iamVjdCAqLworICAgICAgaWYgKEdfVkFMVUVfVFlQRSAodmFsKSA9PSBHU1RfVFlQRV9UQVNLKSB7CisgICAgICAgIHRhc2sgPSBnX3ZhbHVlX2dldF9vYmplY3QgKHZhbCk7CisgICAgICB9CisKKyAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfQ1JFQVRFOgorICAgICAgICAgIGlmICh0YXNrKSB7CisgICAgICAgICAgICBnX21lc3NhZ2UgKCJjcmVhdGVkIHRhc2sgJXAsIHNldHRpbmcgcG9vbCIsIHRhc2spOworICAgICAgICAgICAgZ3N0X3Rhc2tfc2V0X3Bvb2wgKHRhc2ssIHBvb2wpOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHU1RfU1RSRUFNX1NUQVRVU19UWVBFX0VOVEVSOgorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfTEVBVkU6CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisgIC8qIHBhc3MgYWxsIG1lc3NhZ2VzIG9uIHRoZSBhc3luYyBxdWV1ZSAqLworICByZXR1cm4gR1NUX0JVU19QQVNTOworfQorCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIEdzdEVsZW1lbnQgKmJpbiwgKmFsc2FzcmMsICphbHNhc2luazsKKyAgR3N0QnVzICpidXM7CisgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKKworICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKKworICAvKiBjcmVhdGUgYSBjdXN0b20gdGhyZWFkIHBvb2wgKi8KKyAgcG9vbCA9IHRlc3RfcnRfcG9vbF9uZXcgKCk7CisKKyAgLyogY3JlYXRlIGEgbmV3IGJpbiB0byBob2xkIHRoZSBlbGVtZW50cyAqLworICBiaW4gPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKKyAgZ19hc3NlcnQgKGJpbik7CisKKyAgLyogY3JlYXRlIGEgc291cmNlICovCisgIGFsc2FzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhbHNhc3JjIiwgImFsc2FzcmMiKTsKKyAgZ19hc3NlcnQgKGFsc2FzcmMpOworICBnX29iamVjdF9zZXQgKGFsc2FzcmMsICJkZXZpY2UiLCAiaHc6MCIsIE5VTEwpOworICBnX29iamVjdF9zZXQgKGFsc2FzcmMsICJsYXRlbmN5LXRpbWUiLCAoZ2ludDY0KSAyMDAwLCBOVUxMKTsKKyAgZ19vYmplY3Rfc2V0IChhbHNhc3JjLCAic2xhdmUtbWV0aG9kIiwgMiwgTlVMTCk7CisKKyAgLyogYW5kIGEgc2luayAqLworICBhbHNhc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImFsc2FzaW5rIiwgImFsc2FzaW5rIik7CisgIGdfYXNzZXJ0IChhbHNhc2luayk7CisgIGdfb2JqZWN0X3NldCAoYWxzYXNpbmssICJkZXZpY2UiLCAiaHc6MCIsIE5VTEwpOworICBnX29iamVjdF9zZXQgKGFsc2FzaW5rLCAibGF0ZW5jeS10aW1lIiwgKGdpbnQ2NCkgMjAwMCwgTlVMTCk7CisgIGdfb2JqZWN0X3NldCAoYWxzYXNpbmssICJidWZmZXItdGltZSIsIChnaW50NjQpIDEwMDAwLCBOVUxMKTsKKworICAvKiBhZGQgb2JqZWN0cyB0byB0aGUgbWFpbiBwaXBlbGluZSAqLworICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChiaW4pLCBhbHNhc3JjLCBhbHNhc2luaywgTlVMTCk7CisKKyAgLyogbGluayB0aGUgZWxlbWVudHMgKi8KKyAgZ3N0X2VsZW1lbnRfbGluayAoYWxzYXNyYywgYWxzYXNpbmspOworCisgIC8qIGdldCB0aGUgYnVzLCB3ZSBuZWVkIHRvIGluc3RhbGwgYSBzeW5jIGhhbmRsZXIgKi8KKyAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKEdTVF9QSVBFTElORSAoYmluKSk7CisgIGdzdF9idXNfc2V0X3N5bmNfaGFuZGxlciAoYnVzLCAoR3N0QnVzU3luY0hhbmRsZXIpIHN5bmNfYnVzX2hhbmRsZXIsIGJpbik7CisKKyAgLyogc3RhcnQgcGxheWluZyAqLworICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX1BMQVlJTkcpOworICBpZiAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkKKyAgICByZXR1cm4gMDsKKworICAvKiBSdW4gZXZlbnQgbG9vcCBsaXN0ZW5pbmcgZm9yIGJ1cyBtZXNzYWdlcyB1bnRpbCBFT1Mgb3IgRVJST1IgKi8KKyAgZXZlbnRfbG9vcCAoYnVzLCBiaW4pOworCisgIC8qIHN0b3AgdGhlIGJpbiAqLworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX05VTEwpOworICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOworCisgIGV4aXQgKDApOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy9zdHJlYW0tc3RhdHVzLmMgYi90ZXN0cy9leGFtcGxlcy9zdHJlYW1zL3N0cmVhbS1zdGF0dXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjY3NDY4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy9zdHJlYW0tc3RhdHVzLmMKQEAgLTAsMCArMSwxNDYgQEAKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKK3N0YXRpYyB2b2lkCitldmVudF9sb29wIChHc3RCdXMgKiBidXMsIEdzdEVsZW1lbnQgKiBwaXBlKQoreworICBHc3RNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKworICB3aGlsZSAoVFJVRSkgeworICAgIG1lc3NhZ2UgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfQU5ZLCAtMSk7CisKKyAgICBnX2Fzc2VydCAobWVzc2FnZSAhPSBOVUxMKTsKKworICAgIHN3aXRjaCAobWVzc2FnZS0+dHlwZSkgeworICAgICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6CisgICAgICAgIGdfbWVzc2FnZSAoInJlY2VpdmVkIEVPUyIpOworICAgICAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIGNhc2UgR1NUX01FU1NBR0VfV0FSTklORzp7CisgICAgICAgIEdFcnJvciAqZ2Vycm9yOworICAgICAgICBnY2hhciAqZGVidWc7CisKKyAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfd2FybmluZyAobWVzc2FnZSwgJmdlcnJvciwgJmRlYnVnKTsKKyAgICAgICAgZ3N0X29iamVjdF9kZWZhdWx0X2Vycm9yIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpLCBnZXJyb3IsIGRlYnVnKTsKKyAgICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOworICAgICAgICBnX2Vycm9yX2ZyZWUgKGdlcnJvcik7CisgICAgICAgIGdfZnJlZSAoZGVidWcpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6eworICAgICAgICBHRXJyb3IgKmdlcnJvcjsKKyAgICAgICAgZ2NoYXIgKmRlYnVnOworCisgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtZXNzYWdlLCAmZ2Vycm9yLCAmZGVidWcpOworICAgICAgICBnc3Rfb2JqZWN0X2RlZmF1bHRfZXJyb3IgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSksIGdlcnJvciwgZGVidWcpOworICAgICAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7CisgICAgICAgIGdfZXJyb3JfZnJlZSAoZ2Vycm9yKTsKKyAgICAgICAgZ19mcmVlIChkZWJ1Zyk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyBHc3RCdXNTeW5jUmVwbHkKK3N5bmNfYnVzX2hhbmRsZXIgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIEdzdEVsZW1lbnQgKiBiaW4pCit7CisgIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkpIHsKKyAgICBjYXNlIEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFUVVM6CisgICAgeworICAgICAgR3N0U3RyZWFtU3RhdHVzVHlwZSB0eXBlOworICAgICAgR3N0RWxlbWVudCAqb3duZXI7CisgICAgICBjb25zdCBHVmFsdWUgKnZhbDsKKyAgICAgIGdjaGFyICpwYXRoOworICAgICAgR3N0VGFzayAqdGFzayA9IE5VTEw7CisKKyAgICAgIGdfbWVzc2FnZSAoInJlY2VpdmVkIFNUUkVBTV9TVEFUVVMiKTsKKyAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9zdGF0dXMgKG1lc3NhZ2UsICZ0eXBlLCAmb3duZXIpOworCisgICAgICB2YWwgPSBnc3RfbWVzc2FnZV9nZXRfc3RyZWFtX3N0YXR1c19vYmplY3QgKG1lc3NhZ2UpOworCisgICAgICBnX21lc3NhZ2UgKCJ0eXBlOiAgICVkIiwgdHlwZSk7CisgICAgICBwYXRoID0gZ3N0X29iamVjdF9nZXRfcGF0aF9zdHJpbmcgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkpOworICAgICAgZ19tZXNzYWdlICgic291cmNlOiAlcyIsIHBhdGgpOworICAgICAgZ19mcmVlIChwYXRoKTsKKyAgICAgIHBhdGggPSBnc3Rfb2JqZWN0X2dldF9wYXRoX3N0cmluZyAoR1NUX09CSkVDVCAob3duZXIpKTsKKyAgICAgIGdfbWVzc2FnZSAoIm93bmVyOiAgJXMiLCBwYXRoKTsKKyAgICAgIGdfZnJlZSAocGF0aCk7CisgICAgICBnX21lc3NhZ2UgKCJvYmplY3Q6IHR5cGUgJXMsIHZhbHVlICVwIiwgR19WQUxVRV9UWVBFX05BTUUgKHZhbCksCisgICAgICAgICAgZ192YWx1ZV9nZXRfb2JqZWN0ICh2YWwpKTsKKworICAgICAgLyogc2VlIGlmIHdlIGtub3cgaG93IHRvIGRlYWwgd2l0aCB0aGlzIG9iamVjdCAqLworICAgICAgaWYgKEdfVkFMVUVfVFlQRSAodmFsKSA9PSBHU1RfVFlQRV9UQVNLKSB7CisgICAgICAgIHRhc2sgPSBnX3ZhbHVlX2dldF9vYmplY3QgKHZhbCk7CisgICAgICB9CisKKyAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfQ1JFQVRFOgorICAgICAgICAgIGdfbWVzc2FnZSAoImNyZWF0ZWQgdGFzayAlcCIsIHRhc2spOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfRU5URVI6CisgICAgICAgICAgaWYgKHRhc2spIHsKKyAgICAgICAgICAgIGdfbWVzc2FnZSAoInJhaXNpbmcgdGFzayBwcmlvcml0eSBmb3IgJXAiLCB0YXNrKTsKKyAgICAgICAgICAgIGdzdF90YXNrX3NldF9wcmlvcml0eSAodGFzaywgR19USFJFQURfUFJJT1JJVFlfSElHSCk7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfTEVBVkU6CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICB9CisgIC8qIHBhc3MgYWxsIG1lc3NhZ2VzIG9uIHRoZSBhc3luYyBxdWV1ZSAqLworICByZXR1cm4gR1NUX0JVU19QQVNTOworfQorCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIEdzdEVsZW1lbnQgKmJpbiwgKmZha2VzcmMsICpmYWtlc2luazsKKyAgR3N0QnVzICpidXM7CisKKyAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7CisKKyAgLyogY3JlYXRlIGEgbmV3IGJpbiB0byBob2xkIHRoZSBlbGVtZW50cyAqLworICBiaW4gPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKKyAgZ19hc3NlcnQgKGJpbik7CisKKyAgLyogY3JlYXRlIGEgc291cmNlICovCisgIGZha2VzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgImZha2VzcmMiKTsKKyAgZ19hc3NlcnQgKGZha2VzcmMpOworICBnX29iamVjdF9zZXQgKGZha2VzcmMsICJudW0tYnVmZmVycyIsIDUwLCBOVUxMKTsKKworICAvKiBhbmQgYSBzaW5rICovCisgIGZha2VzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAiZmFrZXNpbmsiKTsKKyAgZ19hc3NlcnQgKGZha2VzaW5rKTsKKworICAvKiBhZGQgb2JqZWN0cyB0byB0aGUgbWFpbiBwaXBlbGluZSAqLworICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChiaW4pLCBmYWtlc3JjLCBmYWtlc2luaywgTlVMTCk7CisKKyAgLyogbGluayB0aGUgZWxlbWVudHMgKi8KKyAgZ3N0X2VsZW1lbnRfbGluayAoZmFrZXNyYywgZmFrZXNpbmspOworCisgIC8qIGdldCB0aGUgYnVzLCB3ZSBuZWVkIHRvIGluc3RhbGwgYSBzeW5jIGhhbmRsZXIgKi8KKyAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKEdTVF9QSVBFTElORSAoYmluKSk7CisgIGdzdF9idXNfc2V0X3N5bmNfaGFuZGxlciAoYnVzLCAoR3N0QnVzU3luY0hhbmRsZXIpIHN5bmNfYnVzX2hhbmRsZXIsIGJpbik7CisKKyAgLyogc3RhcnQgcGxheWluZyAqLworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX1BMQVlJTkcpOworCisgIC8qIFJ1biBldmVudCBsb29wIGxpc3RlbmluZyBmb3IgYnVzIG1lc3NhZ2VzIHVudGlsIEVPUyBvciBFUlJPUiAqLworICBldmVudF9sb29wIChidXMsIGJpbik7CisKKyAgLyogc3RvcCB0aGUgYmluICovCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfTlVMTCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7CisKKyAgZXhpdCAoMCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9zdHJlYW1zL3Rlc3RydHBvb2wuYyBiL3Rlc3RzL2V4YW1wbGVzL3N0cmVhbXMvdGVzdHJ0cG9vbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZTZmYTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9leGFtcGxlcy9zdHJlYW1zL3Rlc3RydHBvb2wuYwpAQCAtMCwwICsxLDEzNSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8cHRocmVhZC5oPgorCisjaW5jbHVkZSAidGVzdHJ0cG9vbC5oIgorCitzdGF0aWMgdm9pZCB0ZXN0X3J0X3Bvb2xfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOworCit0eXBlZGVmIHN0cnVjdAoreworICBwdGhyZWFkX3QgdGhyZWFkOworfSBUZXN0UlRJZDsKKworR19ERUZJTkVfVFlQRSAoVGVzdFJUUG9vbCwgdGVzdF9ydF9wb29sLCBHU1RfVFlQRV9UQVNLX1BPT0wpOworCitzdGF0aWMgdm9pZAorZGVmYXVsdF9wcmVwYXJlIChHc3RUYXNrUG9vbCAqIHBvb2wsIEdFcnJvciAqKiBlcnJvcikKK3sKKyAgLyogd2UgZG9uJ3QgZG8gYW55dGhpbmcgaGVyZS4gV2UgY291bGQgY29uc3RydWN0IGEgcG9vbCBvZiB0aHJlYWRzIGhlcmUgdGhhdAorICAgKiB3ZSBjb3VsZCByZXVzZSBsYXRlciBidXQgd2UgZG9uJ3QgKi8KKyAgZ19tZXNzYWdlICgicHJlcGFyZSBSZWFsdGltZSBwb29sICVwIiwgcG9vbCk7Cit9CisKK3N0YXRpYyB2b2lkCitkZWZhdWx0X2NsZWFudXAgKEdzdFRhc2tQb29sICogcG9vbCkKK3sKKyAgZ19tZXNzYWdlICgiY2xlYW51cCBSZWFsdGltZSBwb29sICVwIiwgcG9vbCk7Cit9CisKK3N0YXRpYyBncG9pbnRlcgorZGVmYXVsdF9wdXNoIChHc3RUYXNrUG9vbCAqIHBvb2wsIEdzdFRhc2tQb29sRnVuY3Rpb24gZnVuYywgZ3BvaW50ZXIgZGF0YSwKKyAgICBHRXJyb3IgKiogZXJyb3IpCit7CisgIFRlc3RSVElkICp0aWQ7CisgIGdpbnQgcmVzOworICBwdGhyZWFkX2F0dHJfdCBhdHRyOworICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW07CisKKyAgZ19tZXNzYWdlICgicHVzaGluZyBSZWFsdGltZSBwb29sICVwLCAlcCIsIHBvb2wsIGZ1bmMpOworCisgIHRpZCA9IGdfc2xpY2VfbmV3MCAoVGVzdFJUSWQpOworCisgIGdfbWVzc2FnZSAoInNldCBwb2xpY3kiKTsKKyAgcHRocmVhZF9hdHRyX2luaXQgKCZhdHRyKTsKKyAgaWYgKChyZXMgPSBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwb2xpY3kgKCZhdHRyLCBTQ0hFRF9SUikpICE9IDApCisgICAgZ193YXJuaW5nICgic2V0c2NoZWRwb2xpY3k6IGZhaWx1cmU6ICVwIiwgZ19zdHJlcnJvciAocmVzKSk7CisKKyAgZ19tZXNzYWdlICgic2V0IHByaW8iKTsKKyAgcGFyYW0uc2NoZWRfcHJpb3JpdHkgPSA1MDsKKyAgaWYgKChyZXMgPSBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwYXJhbSAoJmF0dHIsICZwYXJhbSkpICE9IDApCisgICAgZ193YXJuaW5nICgic2V0c2NoZWRwYXJhbTogZmFpbHVyZTogJXAiLCBnX3N0cmVycm9yIChyZXMpKTsKKworICBnX21lc3NhZ2UgKCJzZXQgaW5oZXJpdCIpOworICBpZiAoKHJlcyA9IHB0aHJlYWRfYXR0cl9zZXRpbmhlcml0c2NoZWQgKCZhdHRyLCBQVEhSRUFEX0VYUExJQ0lUX1NDSEVEKSkgIT0gMCkKKyAgICBnX3dhcm5pbmcgKCJzZXRpbmhlcml0c2NoZWQ6IGZhaWx1cmU6ICVwIiwgZ19zdHJlcnJvciAocmVzKSk7CisKKyAgZ19tZXNzYWdlICgiY3JlYXRlIHRocmVhZCIpOworICByZXMgPSBwdGhyZWFkX2NyZWF0ZSAoJnRpZC0+dGhyZWFkLCAmYXR0ciwgKHZvaWQgKigqKSh2b2lkICopKSBmdW5jLCBkYXRhKTsKKworICBpZiAocmVzICE9IDApIHsKKyAgICBnX3NldF9lcnJvciAoZXJyb3IsIEdfVEhSRUFEX0VSUk9SLCBHX1RIUkVBRF9FUlJPUl9BR0FJTiwKKyAgICAgICAgIkVycm9yIGNyZWF0aW5nIHRocmVhZDogJXMiLCBnX3N0cmVycm9yIChyZXMpKTsKKyAgICBnX3NsaWNlX2ZyZWUgKFRlc3RSVElkLCB0aWQpOworICAgIHRpZCA9IE5VTEw7CisgIH0KKworICByZXR1cm4gdGlkOworfQorCitzdGF0aWMgdm9pZAorZGVmYXVsdF9qb2luIChHc3RUYXNrUG9vbCAqIHBvb2wsIGdwb2ludGVyIGlkKQoreworICBUZXN0UlRJZCAqdGlkID0gKFRlc3RSVElkICopIGlkOworCisgIGdfbWVzc2FnZSAoImpvaW5pbmcgUmVhbHRpbWUgcG9vbCAlcCIsIHBvb2wpOworCisgIHB0aHJlYWRfam9pbiAodGlkLT50aHJlYWQsIE5VTEwpOworCisgIGdfc2xpY2VfZnJlZSAoVGVzdFJUSWQsIHRpZCk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3J0X3Bvb2xfY2xhc3NfaW5pdCAoVGVzdFJUUG9vbENsYXNzICoga2xhc3MpCit7CisgIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKKyAgR3N0VGFza1Bvb2xDbGFzcyAqZ3N0dGFza3Bvb2xfY2xhc3M7CisKKyAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7CisgIGdzdHRhc2twb29sX2NsYXNzID0gKEdzdFRhc2tQb29sQ2xhc3MgKikga2xhc3M7CisKKyAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBHU1RfREVCVUdfRlVOQ1BUUiAodGVzdF9ydF9wb29sX2ZpbmFsaXplKTsKKworICBnc3R0YXNrcG9vbF9jbGFzcy0+cHJlcGFyZSA9IGRlZmF1bHRfcHJlcGFyZTsKKyAgZ3N0dGFza3Bvb2xfY2xhc3MtPmNsZWFudXAgPSBkZWZhdWx0X2NsZWFudXA7CisgIGdzdHRhc2twb29sX2NsYXNzLT5wdXNoID0gZGVmYXVsdF9wdXNoOworICBnc3R0YXNrcG9vbF9jbGFzcy0+am9pbiA9IGRlZmF1bHRfam9pbjsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfcnRfcG9vbF9pbml0IChUZXN0UlRQb29sICogcG9vbCkKK3sKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfcnRfcG9vbF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKK3sKKyAgR19PQkpFQ1RfQ0xBU1MgKHRlc3RfcnRfcG9vbF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworR3N0VGFza1Bvb2wgKgordGVzdF9ydF9wb29sX25ldyAodm9pZCkKK3sKKyAgR3N0VGFza1Bvb2wgKnBvb2w7CisKKyAgcG9vbCA9IGdfb2JqZWN0X25ldyAoVEVTVF9UWVBFX1JUX1BPT0wsIE5VTEwpOworCisgIHJldHVybiBwb29sOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy90ZXN0cnRwb29sLmggYi90ZXN0cy9leGFtcGxlcy9zdHJlYW1zL3Rlc3RydHBvb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODBjZmZhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy90ZXN0cnRwb29sLmgKQEAgLTAsMCArMSw1MyBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDwyMDA5PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19URVNUX1JUX1BPT0xfSF9fCisjZGVmaW5lIF9fVEVTVF9SVF9QT09MX0hfXworCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qIC0tLSBzdGFuZGFyZCB0eXBlIG1hY3JvcyAtLS0gKi8KKyNkZWZpbmUgVEVTVF9UWVBFX1JUX1BPT0wgICAgICAgICAgICAgKHRlc3RfcnRfcG9vbF9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgVEVTVF9SVF9QT09MKHBvb2wpICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgocG9vbCksIFRFU1RfVFlQRV9SVF9QT09MLCBUZXN0UlRQb29sKSkKKyNkZWZpbmUgVEVTVF9JU19SVF9QT09MKHBvb2wpICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgocG9vbCksIFRFU1RfVFlQRV9SVF9QT09MKSkKKyNkZWZpbmUgVEVTVF9SVF9QT09MX0NMQVNTKHBjbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgocGNsYXNzKSwgVEVTVF9UWVBFX1JUX1BPT0wsIFRlc3RSVFBvb2xDbGFzcykpCisjZGVmaW5lIFRFU1RfSVNfUlRfUE9PTF9DTEFTUyhwY2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKHBjbGFzcyksIFRFU1RfVFlQRV9SVF9QT09MKSkKKyNkZWZpbmUgVEVTVF9SVF9QT09MX0dFVF9DTEFTUyhwb29sKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChwb29sKSwgVEVTVF9UWVBFX1JUX1BPT0wsIFRlc3RSVFBvb2xDbGFzcykpCisjZGVmaW5lIFRFU1RfUlRfUE9PTF9DQVNUKHBvb2wpICAgICAgICgoVGVzdFJUUG9vbCopKHBvb2wpKQorCit0eXBlZGVmIHN0cnVjdCBfVGVzdFJUUG9vbCBUZXN0UlRQb29sOwordHlwZWRlZiBzdHJ1Y3QgX1Rlc3RSVFBvb2xDbGFzcyBUZXN0UlRQb29sQ2xhc3M7CisKK3N0cnVjdCBfVGVzdFJUUG9vbCB7CisgIEdzdFRhc2tQb29sICAgIG9iamVjdDsKK307CisKK3N0cnVjdCBfVGVzdFJUUG9vbENsYXNzIHsKKyAgR3N0VGFza1Bvb2xDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitHVHlwZSAgICAgICAgICAgdGVzdF9ydF9wb29sX2dldF90eXBlICAgICh2b2lkKTsKKworR3N0VGFza1Bvb2wgKiAgIHRlc3RfcnRfcG9vbF9uZXcgICAgICAgICAodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX1RFU1RfUlRfUE9PTF9IX18gKi8KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL3R5cGVmaW5kL01ha2VmaWxlLmFtIGIvdGVzdHMvZXhhbXBsZXMvdHlwZWZpbmQvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M5OTgwMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2V4YW1wbGVzL3R5cGVmaW5kL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNSBAQAorbm9pbnN0X1BST0dSQU1TID0gdHlwZWZpbmQKKwordHlwZWZpbmRfTERBREQgPSAkKEdTVF9PQkpfTElCUykKK3R5cGVmaW5kX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCisKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL3R5cGVmaW5kL01ha2VmaWxlLmluIGIvdGVzdHMvZXhhbXBsZXMvdHlwZWZpbmQvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFkYWQ2MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2V4YW1wbGVzL3R5cGVmaW5kL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNjg3IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitub2luc3RfUFJPR1JBTVMgPSB0eXBlZmluZCQoRVhFRVhUKQorc3ViZGlyID0gdGVzdHMvZXhhbXBsZXMvdHlwZWZpbmQKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXB5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtc2NydWItaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitQUk9HUkFNUyA9ICQobm9pbnN0X1BST0dSQU1TKQordHlwZWZpbmRfU09VUkNFUyA9IHR5cGVmaW5kLmMKK3R5cGVmaW5kX09CSkVDVFMgPSB0eXBlZmluZC10eXBlZmluZC4kKE9CSkVYVCkKK2FtX19ERVBFTkRFTkNJRVNfMSA9Cit0eXBlZmluZF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKK0FNX1ZfbHQgPSAkKGFtX192X2x0XyQoVikpCithbV9fdl9sdF8gPSAkKGFtX192X2x0XyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfbHRfMCA9IC0tc2lsZW50Cit0eXBlZmluZF9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJCh0eXBlZmluZF9DRkxBR1MpIFwKKwkkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCisJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfJChWKSkKK2FtX192X0NDXyA9ICQoYW1fX3ZfQ0NfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgIiAkQDsKK0FNX1ZfYXQgPSAkKGFtX192X2F0XyQoVikpCithbV9fdl9hdF8gPSAkKGFtX192X2F0XyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfYXRfMCA9IEAKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEXyQoVikpCithbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICIgJEA7CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOXyQoVikpCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitTT1VSQ0VTID0gdHlwZWZpbmQuYworRElTVF9TT1VSQ0VTID0gdHlwZWZpbmQuYworRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBUyA9IEBBU0AKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAorQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAorQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKK0NDID0gQENDQAorQ0NBUyA9IEBDQ0FTQAorQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACitDQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDSEVDS19NQUpPUl9WRVJTSU9OID0gQENIRUNLX01BSk9SX1ZFUlNJT05ACitDSEVDS19NSUNST19WRVJTSU9OID0gQENIRUNLX01JQ1JPX1ZFUlNJT05ACitDSEVDS19NSU5PUl9WRVJTSU9OID0gQENIRUNLX01JTk9SX1ZFUlNJT05ACitDSEVDS19WRVJTSU9OID0gQENIRUNLX1ZFUlNJT05ACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEFESVIgPSBAREFUQURJUkAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRU5BQkxFX1NVQlVOSVQgPSBARU5BQkxFX1NVQlVOSVRACitFUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZGTEFHUyA9IEBGRkxBR1NACitGR1JFUCA9IEBGR1JFUEAKK0ZMRVhfUEFUSCA9IEBGTEVYX1BBVEhACitHQ09WID0gQEdDT1ZACitHQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKK0dDT1ZfTElCUyA9IEBHQ09WX0xJQlNACitHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAorR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKK0dMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAorR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKK0dMSUJfT05MWV9DRkxBR1MgPSBAR0xJQl9PTkxZX0NGTEFHU0AKK0dMSUJfT05MWV9MSUJTID0gQEdMSUJfT05MWV9MSUJTQAorR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACitHTElCX1JFUSA9IEBHTElCX1JFUUAKK0dNUF9MSUJTID0gQEdNUF9MSUJTQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHUkVQID0gQEdSRVBACitHU0xfTElCUyA9IEBHU0xfTElCU0AKK0dTVF9BR0UgPSBAR1NUX0FHRUAKK0dTVF9BTExfQ0ZMQUdTID0gQEdTVF9BTExfQ0ZMQUdTQAorR1NUX0FMTF9DWFhGTEFHUyA9IEBHU1RfQUxMX0NYWEZMQUdTQAorR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKK0dTVF9BTExfTElCUyA9IEBHU1RfQUxMX0xJQlNACitHU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKK0dTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9ERUZJTkVACitHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkVACitHU1RfRElTQUJMRV9ORVRfREVGSU5FID0gQEdTVF9ESVNBQkxFX05FVF9ERUZJTkVACitHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAorR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKK0dTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKK0dTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACitHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfVFJBQ0VfREVGSU5FQAorR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAorR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAorR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTU19ERUZJTkUgPSBAR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTU19ERUZJTkVACitHU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKK0dTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAorR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKK0dTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAorR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACitHU1RfTUFKT1JNSU5PUiA9IEBHU1RfTUFKT1JNSU5PUkAKK0dTVF9PQkpfQ0ZMQUdTID0gQEdTVF9PQkpfQ0ZMQUdTQAorR1NUX09CSl9DWFhGTEFHUyA9IEBHU1RfT0JKX0NYWEZMQUdTQAorR1NUX09CSl9MSUJTID0gQEdTVF9PQkpfTElCU0AKK0dTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAorR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAorR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAorR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKK0dTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKK0dTVF9QS0dfREVQUyA9IEBHU1RfUEtHX0RFUFNACitHU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAorR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAorR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1BPSU5URVJfRk9STUFUX0RFRklORUAKK0dTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORSA9IEBHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkVACitHU1RfUkVHSVNUUllfRE9DX1RZUEVTID0gQEdTVF9SRUdJU1RSWV9ET0NfVFlQRVNACitHU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAorR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FID0gQEdTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OX0RFRklORUAKK0dUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACitIQVZFX0RPQ0JPT0sySFRNTCA9IEBIQVZFX0RPQ0JPT0sySFRNTEAKK0hBVkVfRE9DQk9PSzJQUyA9IEBIQVZFX0RPQ0JPT0syUFNACitIQVZFX0RWSVBTID0gQEhBVkVfRFZJUFNACitIQVZFX0VQU1RPUERGID0gQEhBVkVfRVBTVE9QREZACitIQVZFX0ZJRzJERVYgPSBASEFWRV9GSUcyREVWQAorSEFWRV9HTVAgPSBASEFWRV9HTVBACitIQVZFX0dTTCA9IEBIQVZFX0dTTEAKK0hBVkVfSkFERVRFWCA9IEBIQVZFX0pBREVURVhACitIQVZFX1BOR1RPUE5NID0gQEhBVkVfUE5HVE9QTk1ACitIQVZFX1BOTVRPUFMgPSBASEFWRV9QTk1UT1BTQAorSEFWRV9QUzJQREYgPSBASEFWRV9QUzJQREZACitIQVZFX1hNTExJTlQgPSBASEFWRV9YTUxMSU5UQAorSE9TVF9DUFUgPSBASE9TVF9DUFVACitIVE1MX0RJUiA9IEBIVE1MX0RJUkAKK0lORVRfQVRPTl9MSUJTID0gQElORVRfQVRPTl9MSUJTQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAorSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAorSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAorSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACitJTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAorSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAorSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkRJUiA9IEBMSUJESVJACitMSUJJQ09OViA9IEBMSUJJQ09OVkAKK0xJQklOVEwgPSBATElCSU5UTEAKK0xJQk0gPSBATElCTUAKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xPQ0FMRURJUiA9IEBMT0NBTEVESVJACitMVExJQklDT05WID0gQExUTElCSUNPTlZACitMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BSU5UID0gQE1BSU5UQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAorUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKK1BBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACitQQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKK1BBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMX1BBVEggPSBAUEVSTF9QQVRIQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUExVR0lORElSID0gQFBMVUdJTkRJUkAKK1BPU1VCID0gQFBPU1VCQAorUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACitQWVRIT04gPSBAUFlUSE9OQAorUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKK1BZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACitQWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACitQWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKK1ZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKK1ZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1dBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAorV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAorWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKK1hTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK2x0X0VDSE8gPSBAbHRfRUNIT0AKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKK3BrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACitwbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKK3B5dGhvbmRpciA9IEBweXRob25kaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK3R5cGVmaW5kX0xEQUREID0gJChHU1RfT0JKX0xJQlMpCit0eXBlZmluZF9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgdGVzdHMvZXhhbXBsZXMvdHlwZWZpbmQvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbnUgdGVzdHMvZXhhbXBsZXMvdHlwZWZpbmQvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisKK2NsZWFuLW5vaW5zdFBST0dSQU1TOgorCUBsaXN0PSckKG5vaW5zdF9QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCisJdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKKwlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QKK3R5cGVmaW5kJChFWEVFWFQpOiAkKHR5cGVmaW5kX09CSkVDVFMpICQodHlwZWZpbmRfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgdHlwZWZpbmQkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKHR5cGVmaW5kX0xJTkspICQodHlwZWZpbmRfT0JKRUNUUykgJCh0eXBlZmluZF9MREFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdHlwZWZpbmQtdHlwZWZpbmQuUG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKwordHlwZWZpbmQtdHlwZWZpbmQubzogdHlwZWZpbmQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHR5cGVmaW5kX0NGTEFHUykgJChDRkxBR1MpIC1NVCB0eXBlZmluZC10eXBlZmluZC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS90eXBlZmluZC10eXBlZmluZC5UcG8gLWMgLW8gdHlwZWZpbmQtdHlwZWZpbmQubyBgdGVzdCAtZiAndHlwZWZpbmQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdHlwZWZpbmQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdHlwZWZpbmQtdHlwZWZpbmQuVHBvICQoREVQRElSKS90eXBlZmluZC10eXBlZmluZC5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J3R5cGVmaW5kLmMnIG9iamVjdD0ndHlwZWZpbmQtdHlwZWZpbmQubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodHlwZWZpbmRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdHlwZWZpbmQtdHlwZWZpbmQubyBgdGVzdCAtZiAndHlwZWZpbmQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdHlwZWZpbmQuYworCit0eXBlZmluZC10eXBlZmluZC5vYmo6IHR5cGVmaW5kLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0eXBlZmluZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdHlwZWZpbmQtdHlwZWZpbmQub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS90eXBlZmluZC10eXBlZmluZC5UcG8gLWMgLW8gdHlwZWZpbmQtdHlwZWZpbmQub2JqIGBpZiB0ZXN0IC1mICd0eXBlZmluZC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3R5cGVmaW5kLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3R5cGVmaW5kLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3R5cGVmaW5kLXR5cGVmaW5kLlRwbyAkKERFUERJUikvdHlwZWZpbmQtdHlwZWZpbmQuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSd0eXBlZmluZC5jJyBvYmplY3Q9J3R5cGVmaW5kLXR5cGVmaW5kLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodHlwZWZpbmRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdHlwZWZpbmQtdHlwZWZpbmQub2JqIGBpZiB0ZXN0IC1mICd0eXBlZmluZC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3R5cGVmaW5kLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3R5cGVmaW5kLmMnOyBmaWAKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChQUk9HUkFNUykKK2luc3RhbGxkaXJzOgoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIFwKKwltb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbToKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCisJY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBjdGFncyBkaXN0Y2xlYW4gXAorCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisJcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy90eXBlZmluZC90eXBlZmluZC5jIGIvdGVzdHMvZXhhbXBsZXMvdHlwZWZpbmQvdHlwZWZpbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGYxMWRiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZXhhbXBsZXMvdHlwZWZpbmQvdHlwZWZpbmQuYwpAQCAtMCwwICsxLDEzNSBAQAorLyogR1N0cmVhbWVyIHR5cGVmaW5kIGVsZW1lbnQgZXhhbXBsZQorICogQ29weXJpZ2h0IChDKSA8MjAwNT4gU3RlZmFuIEtvc3QKKyAqIENvcHlyaWdodCAoQykgPDIwMDY+IFRpbS1QaGlsaXBwIE3DvGxsZXIKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK3N0YXRpYyB2b2lkCit0eXBlX2ZvdW5kIChHc3RFbGVtZW50ICogdHlwZWZpbmQsIGd1aW50IHByb2JhYmlsaXR5LCBjb25zdCBHc3RDYXBzICogY2FwcywKKyAgICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIGdjaGFyICp4bWwsICpjYXBzX3N0cjsKKworICBjYXBzX3N0ciA9IGdzdF9jYXBzX3RvX3N0cmluZyAoY2Fwcyk7CisgIHhtbCA9IGdfbWFya3VwX3ByaW50Zl9lc2NhcGVkICgiPD94bWwgdmVyc2lvbj1cIjEuMFwiPz5cbjxDYXBhYmlsaXRpZXM+XG4iCisgICAgICAiIDxDYXBzMT4lczwvQ2FwczE+XG48L0NhcGFiaWxpdGllcz4iLCBjYXBzX3N0cik7CisgIGdfZnJlZSAoY2Fwc19zdHIpOworCisgIGdfcHJpbnQgKCIlc1xuIiwgeG1sKTsKKyAgZ19mcmVlICh4bWwpOworfQorCitzdGF0aWMgdm9pZAorZXZlbnRfbG9vcCAoR3N0RWxlbWVudCAqIHBpcGUpCit7CisgIEdzdEJ1cyAqYnVzOworICBHc3RNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKKyAgZ2Jvb2xlYW4gcnVubmluZyA9IFRSVUU7CisKKyAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAoR1NUX0VMRU1FTlQgKHBpcGUpKTsKKworICB3aGlsZSAocnVubmluZykgeworICAgIG1lc3NhZ2UgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfQU5ZLCAtMSk7CisKKyAgICBnX2Fzc2VydCAobWVzc2FnZSAhPSBOVUxMKTsKKworICAgIHN3aXRjaCAobWVzc2FnZS0+dHlwZSkgeworICAgICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6CisgICAgICAgIHJ1bm5pbmcgPSBGQUxTRTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9NRVNTQUdFX1dBUk5JTkc6eworICAgICAgICBHRXJyb3IgKmdlcnJvcjsKKyAgICAgICAgZ2NoYXIgKmRlYnVnOworCisgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmcgKG1lc3NhZ2UsICZnZXJyb3IsICZkZWJ1Zyk7CisgICAgICAgIGdzdF9vYmplY3RfZGVmYXVsdF9lcnJvciAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSwgZ2Vycm9yLCBkZWJ1Zyk7CisgICAgICAgIGdfZXJyb3JfZnJlZSAoZ2Vycm9yKTsKKyAgICAgICAgZ19mcmVlIChkZWJ1Zyk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjp7CisgICAgICAgIEdFcnJvciAqZ2Vycm9yOworICAgICAgICBnY2hhciAqZGVidWc7CisKKyAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1lc3NhZ2UsICZnZXJyb3IsICZkZWJ1Zyk7CisgICAgICAgIGdzdF9vYmplY3RfZGVmYXVsdF9lcnJvciAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSwgZ2Vycm9yLCBkZWJ1Zyk7CisgICAgICAgIGdfZXJyb3JfZnJlZSAoZ2Vycm9yKTsKKyAgICAgICAgZ19mcmVlIChkZWJ1Zyk7CisgICAgICAgIHJ1bm5pbmcgPSBGQUxTRTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOworICB9CisgIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Cit9CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpmaWxlc3JjLCAqdHlwZWZpbmQsICpzaW5rOworCisgIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOworCisgIGlmIChhcmdjICE9IDIpIHsKKyAgICBnX3ByaW50ICgidXNhZ2U6ICVzIDxmaWxlbmFtZT5cbiIsIGFyZ3ZbMF0pOworICAgIGV4aXQgKC0xKTsKKyAgfQorCisgIC8qIGNyZWF0ZSBhIG5ldyBwaXBlbGluZSB0byBob2xkIHRoZSBlbGVtZW50cyAqLworICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOworICBnX2Fzc2VydCAocGlwZWxpbmUgIT0gTlVMTCk7CisKKyAgLyogY3JlYXRlIGEgZmlsZSByZWFkZXIgKi8KKyAgZmlsZXNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZpbGVzcmMiLCAiZmlsZV9zb3VyY2UiKTsKKyAgZ19hc3NlcnQgKGZpbGVzcmMgIT0gTlVMTCk7CisgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGZpbGVzcmMpLCAibG9jYXRpb24iLCBhcmd2WzFdLCBOVUxMKTsKKworICB0eXBlZmluZCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInR5cGVmaW5kIiwgInR5cGVmaW5kIik7CisgIGdfYXNzZXJ0ICh0eXBlZmluZCAhPSBOVUxMKTsKKworICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOworICBnX2Fzc2VydCAoc2luayAhPSBOVUxMKTsKKworICAvKiBhZGQgb2JqZWN0cyB0byB0aGUgbWFpbiBwaXBlbGluZSAqLworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBmaWxlc3JjKTsKKyAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgdHlwZWZpbmQpOworICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzaW5rKTsKKworICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAodHlwZWZpbmQpLCAiaGF2ZS10eXBlIiwKKyAgICAgIEdfQ0FMTEJBQ0sgKHR5cGVfZm91bmQpLCBOVUxMKTsKKworICBnc3RfZWxlbWVudF9saW5rX21hbnkgKGZpbGVzcmMsIHR5cGVmaW5kLCBzaW5rLCBOVUxMKTsKKworICAvKiBzdGFydCBwbGF5aW5nICovCisgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKKworICAvKiBSdW4gZXZlbnQgbG9vcCBsaXN0ZW5pbmcgZm9yIGJ1cyBtZXNzYWdlcyB1bnRpbCBFT1Mgb3IgRVJST1IgKi8KKyAgZXZlbnRfbG9vcCAocGlwZWxpbmUpOworCisgIC8qIHN0b3AgdGhlIGJpbiAqLworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKKworICBleGl0ICgwKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL21pc2MvTWFrZWZpbGUuYW0gYi90ZXN0cy9taXNjL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYTg1NzIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9taXNjL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNCBAQAorRVhUUkFfRElTVCA9IFwKKwluZXR3b3JrLWNsb2NrLnNjbSBcCisJbmV0d29yay1jbG9jay11dGlscy5zY20gXAorCXBsb3QtZGF0YQpkaWZmIC0tZ2l0IGEvdGVzdHMvbWlzYy9NYWtlZmlsZS5pbiBiL3Rlc3RzL21pc2MvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E4OWUzMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21pc2MvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw1NDEgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSB0ZXN0cy9taXNjCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1weXRob24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXNjcnViLWluY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorQU1fVl9HRU4gPSAkKGFtX192X0dFTl8kKFYpKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworQU1fVl9hdCA9ICQoYW1fX3ZfYXRfJChWKSkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9hdF8wID0gQAorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBUyA9IEBBU0AKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAorQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAorQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKK0NDID0gQENDQAorQ0NBUyA9IEBDQ0FTQAorQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACitDQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDSEVDS19NQUpPUl9WRVJTSU9OID0gQENIRUNLX01BSk9SX1ZFUlNJT05ACitDSEVDS19NSUNST19WRVJTSU9OID0gQENIRUNLX01JQ1JPX1ZFUlNJT05ACitDSEVDS19NSU5PUl9WRVJTSU9OID0gQENIRUNLX01JTk9SX1ZFUlNJT05ACitDSEVDS19WRVJTSU9OID0gQENIRUNLX1ZFUlNJT05ACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEFESVIgPSBAREFUQURJUkAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRU5BQkxFX1NVQlVOSVQgPSBARU5BQkxFX1NVQlVOSVRACitFUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZGTEFHUyA9IEBGRkxBR1NACitGR1JFUCA9IEBGR1JFUEAKK0ZMRVhfUEFUSCA9IEBGTEVYX1BBVEhACitHQ09WID0gQEdDT1ZACitHQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKK0dDT1ZfTElCUyA9IEBHQ09WX0xJQlNACitHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAorR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKK0dMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAorR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKK0dMSUJfT05MWV9DRkxBR1MgPSBAR0xJQl9PTkxZX0NGTEFHU0AKK0dMSUJfT05MWV9MSUJTID0gQEdMSUJfT05MWV9MSUJTQAorR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACitHTElCX1JFUSA9IEBHTElCX1JFUUAKK0dNUF9MSUJTID0gQEdNUF9MSUJTQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHUkVQID0gQEdSRVBACitHU0xfTElCUyA9IEBHU0xfTElCU0AKK0dTVF9BR0UgPSBAR1NUX0FHRUAKK0dTVF9BTExfQ0ZMQUdTID0gQEdTVF9BTExfQ0ZMQUdTQAorR1NUX0FMTF9DWFhGTEFHUyA9IEBHU1RfQUxMX0NYWEZMQUdTQAorR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKK0dTVF9BTExfTElCUyA9IEBHU1RfQUxMX0xJQlNACitHU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKK0dTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9ERUZJTkVACitHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkVACitHU1RfRElTQUJMRV9ORVRfREVGSU5FID0gQEdTVF9ESVNBQkxFX05FVF9ERUZJTkVACitHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAorR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKK0dTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKK0dTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACitHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfVFJBQ0VfREVGSU5FQAorR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAorR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAorR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTU19ERUZJTkUgPSBAR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTU19ERUZJTkVACitHU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKK0dTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAorR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKK0dTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAorR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACitHU1RfTUFKT1JNSU5PUiA9IEBHU1RfTUFKT1JNSU5PUkAKK0dTVF9PQkpfQ0ZMQUdTID0gQEdTVF9PQkpfQ0ZMQUdTQAorR1NUX09CSl9DWFhGTEFHUyA9IEBHU1RfT0JKX0NYWEZMQUdTQAorR1NUX09CSl9MSUJTID0gQEdTVF9PQkpfTElCU0AKK0dTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAorR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAorR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAorR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKK0dTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKK0dTVF9QS0dfREVQUyA9IEBHU1RfUEtHX0RFUFNACitHU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAorR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAorR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1BPSU5URVJfRk9STUFUX0RFRklORUAKK0dTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORSA9IEBHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkVACitHU1RfUkVHSVNUUllfRE9DX1RZUEVTID0gQEdTVF9SRUdJU1RSWV9ET0NfVFlQRVNACitHU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAorR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FID0gQEdTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OX0RFRklORUAKK0dUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACitIQVZFX0RPQ0JPT0sySFRNTCA9IEBIQVZFX0RPQ0JPT0sySFRNTEAKK0hBVkVfRE9DQk9PSzJQUyA9IEBIQVZFX0RPQ0JPT0syUFNACitIQVZFX0RWSVBTID0gQEhBVkVfRFZJUFNACitIQVZFX0VQU1RPUERGID0gQEhBVkVfRVBTVE9QREZACitIQVZFX0ZJRzJERVYgPSBASEFWRV9GSUcyREVWQAorSEFWRV9HTVAgPSBASEFWRV9HTVBACitIQVZFX0dTTCA9IEBIQVZFX0dTTEAKK0hBVkVfSkFERVRFWCA9IEBIQVZFX0pBREVURVhACitIQVZFX1BOR1RPUE5NID0gQEhBVkVfUE5HVE9QTk1ACitIQVZFX1BOTVRPUFMgPSBASEFWRV9QTk1UT1BTQAorSEFWRV9QUzJQREYgPSBASEFWRV9QUzJQREZACitIQVZFX1hNTExJTlQgPSBASEFWRV9YTUxMSU5UQAorSE9TVF9DUFUgPSBASE9TVF9DUFVACitIVE1MX0RJUiA9IEBIVE1MX0RJUkAKK0lORVRfQVRPTl9MSUJTID0gQElORVRfQVRPTl9MSUJTQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAorSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAorSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAorSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACitJTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAorSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAorSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkRJUiA9IEBMSUJESVJACitMSUJJQ09OViA9IEBMSUJJQ09OVkAKK0xJQklOVEwgPSBATElCSU5UTEAKK0xJQk0gPSBATElCTUAKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xPQ0FMRURJUiA9IEBMT0NBTEVESVJACitMVExJQklDT05WID0gQExUTElCSUNPTlZACitMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BSU5UID0gQE1BSU5UQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAorUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKK1BBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACitQQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKK1BBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMX1BBVEggPSBAUEVSTF9QQVRIQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUExVR0lORElSID0gQFBMVUdJTkRJUkAKK1BPU1VCID0gQFBPU1VCQAorUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACitQWVRIT04gPSBAUFlUSE9OQAorUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKK1BZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACitQWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACitQWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKK1ZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKK1ZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1dBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAorV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAorWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKK1hTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK2x0X0VDSE8gPSBAbHRfRUNIT0AKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKK3BrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACitwbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKK3B5dGhvbmRpciA9IEBweXRob25kaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK0VYVFJBX0RJU1QgPSBcCisJbmV0d29yay1jbG9jay5zY20gXAorCW5ldHdvcmstY2xvY2stdXRpbHMuc2NtIFwKKwlwbG90LWRhdGEKKworYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgdGVzdHMvbWlzYy9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9taXNjL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicwordGFnczogVEFHUworVEFHUzoKKworY3RhZ3M6IENUQUdTCitDVEFHUzoKKworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RkaXIgZHZpIFwKKwlkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gXAorCWluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBcCisJaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBcCisJaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgXAorCWluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvdGVzdHMvbWlzYy9uZXR3b3JrLWNsb2NrLXV0aWxzLnNjbSBiL3Rlc3RzL21pc2MvbmV0d29yay1jbG9jay11dGlscy5zY20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc0YjVmNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21pc2MvbmV0d29yay1jbG9jay11dGlscy5zY20KQEAgLTAsMCArMSwyMjkgQEAKKzs7IEdTdHJlYW1lcgorOzsgQ29weXJpZ2h0IChDKSAyMDA1IEFuZHkgV2luZ28gPHdpbmdvIGF0IHBvYm94LmNvbT4KKworOzsgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAgICAKKzs7IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzICAgCis7OyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAgIAorOzsgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAKKzs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCis7OyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgIAorOzsgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAKKzs7IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgCis7OyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgIAorOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKzs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7OyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBjb250YWN0OgorOzsKKzs7IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiAgICAgICAgICAgVm9pY2U6ICArMS02MTctNTQyLTU5NDIKKzs7IDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCAgICAgICAgRmF4OiAgICArMS02MTctNTQyLTI2NTIKKzs7IEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsICBVU0EgICAgICAgZ251QGdudS5vcmcKKworCis7OzsgQ29tbWVudGFyeToKKzs7Cis7OyBVdGlsaXRpZXMgZm9yIHRoZSBuZXR3b3JrIGNsb2NrIHNpbXVsYXRvci4KKzs7Cis7OzsgQ29kZToKKworCis7OyBJbml0IHRoZSBybmcuCisKKyh1c2UtbW9kdWxlcyAoKHNyZmkgc3JmaS0xKSAoZm9sZCB1bmZvbGQpKSkKKworKGRlZmluZSAocmVhZC1ieXRlcy1mcm9tLWZpbGUtYXMtaW50ZWdlciBmIG4pCisgICh3aXRoLWlucHV0LWZyb20tZmlsZSBmCisgICAgKGxhbWJkYSAoKQorICAgICAgKGZvbGQgKGxhbWJkYSAoeCBzZWVkKSAoKyB4IChhc2ggc2VlZCA4KSkpCisgICAgICAgICAgICAwCisgICAgICAgICAgICAodW5mb2xkIHplcm8/IChsYW1iZGEgKG4pIChjaGFyLT5pbnRlZ2VyIChyZWFkLWNoYXIpKSkgMS0gbikpKSkpCisKKyhzZXQhICpyYW5kb20tc3RhdGUqIChzZWVkLT5yYW5kb20tc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAocmVhZC1ieXRlcy1mcm9tLWZpbGUtYXMtaW50ZWdlciAiL2Rldi9yYW5kb20iIDQpKSkKKworOzsgR2VuZXJhbCB1dGlsaXRpZXMuCisKKyhkZWZpbmUgKGlyb3VuZCB4KQorICAoaWYgKGluZXhhY3Q/IHgpCisgICAgICAoaW5leGFjdC0+ZXhhY3QgKHJvdW5kIHgpKQorICAgICAgeCkpCisKKyhkZWZpbmUgKGZpbHRlciBwcm9jIGwpCisgIChjb25kCisgICAoKG51bGw/IGwpICcoKSkKKyAgICgocHJvYyAoY2FyIGwpKSAoY29ucyAoY2FyIGwpIChmaWx0ZXIgcHJvYyAoY2RyIGwpKSkpCisgICAoZWxzZSAoZmlsdGVyIHByb2MgKGNkciBsKSkpKSkKKworKGRlZmluZSAoc3VtIGwpCisgIChhcHBseSArIGwpKQorCisoZGVmaW5lIChhdmcgLiBudW1zKQorICAoLyAoc3VtIG51bXMpIChsZW5ndGggbnVtcykpKQorCisoZGVmaW5lIChzcSB4KQorICAoKiB4IHgpKQorCisoZGVmaW5lIChkZWJ1ZyBzdHIgLiBhcmdzKQorICAoaWYgKmRlYnVnKgorICAgICAgKGFwcGx5IGZvcm1hdCAoY3VycmVudC1lcnJvci1wb3J0KSBzdHIgYXJncykpKQorCisoZGVmaW5lIChwcmludC1ldmVudCBraW5kIHggeSkKKyAgKGZvcm1hdCAjdCAifmEgfmEgfmFcbiIga2luZCB4IHkpKQorCis7OyBMaW5lYXIgbGVhc3Qgc3F1YXJlcy4KKzs7Cis7OyBTZWUgaHR0cDovL21hdGh3b3JsZC53b2xmcmFtLmNvbS9MZWFzdFNxdWFyZXNGaXR0aW5nLmh0bWwKKzs7IHJldHVybnMgKHZhbHVlcyBzbG9wZSBpbnRlcmNlcHQgci1zcXVhcmVkKQorCisoZGVmaW5lIChsZWFzdC1zcXVhcmVzIHggeSkKKyAgKGxldCAoKG4gKGxlbmd0aCB4KSkpCisgICAgKGxldCAoKHhiYXIgKGFwcGx5IGF2ZyB4KSkKKyAgICAgICAgICAoeWJhciAoYXBwbHkgYXZnIHkpKSkKKyAgICAgIChsZXQgKChzeHggKC0gKHN1bSAobWFwIHNxIHgpKSAoKiBuIChzcSB4YmFyKSkpKQorICAgICAgICAgICAgKHN5eSAoLSAoc3VtIChtYXAgc3EgeSkpICgqIG4gKHNxIHliYXIpKSkpCisgICAgICAgICAgICAoc3h5ICgtIChzdW0gKG1hcCAqIHggeSkpICgqIG4geGJhciB5YmFyKSkpKQorICAgICAgICAobGV0ICgoc2xvcGUgKC8gc3h5IHN4eCkpKQorICAgICAgICAgICh2YWx1ZXMKKyAgICAgICAgICAgc2xvcGUKKyAgICAgICAgICAgKC0geWJhciAoKiBzbG9wZSB4YmFyKSkKKyAgICAgICAgICAgKC8gKHNxIHN4eSkgKCogc3h4IHN5eSkpKSkpKSkpCisKKzs7IFN0cmVhbXM6IGxpc3RzIHdpdGggbGF6eSBjZHJzLgorCisoZGVmaW5lLW1hY3JvIChzdHJlYW0tY29ucyBrYXIga2RyKQorICBgKGNvbnMgLGthciAoZGVsYXkgLGtkcikpKQorCisoZGVmaW5lIChzdHJlYW0tY2RyIHN0cmVhbSkKKyAgKGZvcmNlIChjZHIgc3RyZWFtKSkpCisKKyhkZWZpbmUgKHN0cmVhbS1jYXIgc3RyZWFtKQorICAoY2FyIHN0cmVhbSkpCisKKyhkZWZpbmUgKHN0cmVhbS1udWxsPyBzdHJlYW0pCisgIChudWxsPyBzdHJlYW0pKQorCisoZGVmaW5lIChzdHJlYW0tcmVmIHN0cmVhbSBuKQorICAoaWYgKHplcm8/IG4pCisgICAgICAoc3RyZWFtLWNhciBzdHJlYW0pCisgICAgICAoc3RyZWFtLXJlZiAoc3RyZWFtLWNkciBzdHJlYW0pICgxLSBuKSkpKQorCisoZGVmaW5lIChzdHJlYW0tPmxpc3Qgc3RyZWFtIG4pCisgIChsZXQgbHAgKChpbiBzdHJlYW0pIChvdXQgJygpKSAobiBuKSkKKyAgICAoaWYgKHplcm8/IG4pCisgICAgICAgIChyZXZlcnNlISBvdXQpCisgICAgICAgIChscCAoc3RyZWFtLWNkciBpbikgKGNvbnMgKHN0cmVhbS1jYXIgaW4pIG91dCkgKDEtIG4pKSkpKQorCisoZGVmaW5lIChzdHJlYW0tc2tpcCBzdHJlYW0gbikKKyAgKGlmICh6ZXJvPyBuKQorICAgICAgc3RyZWFtCisgICAgICAoc3RyZWFtLXNraXAgKHN0cmVhbS1jZHIgc3RyZWFtKSAoMS0gbikpKSkKKworKGRlZmluZSAoc3RyZWFtLXNhbXBsZSBzdHJlYW0gbikKKyAgKHN0cmVhbS1jb25zIChzdHJlYW0tY2FyIHN0cmVhbSkKKyAgICAgICAgICAgICAgIChzdHJlYW0tc2FtcGxlIChzdHJlYW0tc2tpcCBzdHJlYW0gbikgbikpKQorCisoZGVmaW5lIChzdHJlYW0tbWFwIHByb2MgLiBzdHJlYW1zKQorICAoc3RyZWFtLWNvbnMgKGFwcGx5IHByb2MgKG1hcCBzdHJlYW0tY2FyIHN0cmVhbXMpKQorICAgICAgICAgICAgICAgKGFwcGx5IHN0cmVhbS1tYXAgcHJvYyAobWFwIHN0cmVhbS1jZHIgc3RyZWFtcykpKSkKKworKGRlZmluZSAoYXJpdGhtZXRpYy1zZXJpZXMgc3RhcnQgc3RlcCkKKyAgKHN0cmVhbS1jb25zIHN0YXJ0IChhcml0aG1ldGljLXNlcmllcyAoKyBzdGFydCBzdGVwKSBzdGVwKSkpCisKKyhkZWZpbmUgKHNjYWxlLXN0cmVhbSBzdHJlYW0gZmFjdG9yKQorICAoc3RyZWFtLW1hcCAobGFtYmRhICh0KSAoKiB0IGZhY3RvcikpIHN0cmVhbSkpCisKKyhkZWZpbmUgKHN0cmVhbS13aGlsZSBwcmVkIHByb2MgLiBzdHJlYW1zKQorICAoaWYgKGFwcGx5IHByZWQgKG1hcCBzdHJlYW0tY2FyIHN0cmVhbXMpKQorICAgICAgKGJlZ2luCisgICAgICAgIChhcHBseSBwcm9jIChtYXAgc3RyZWFtLWNhciBzdHJlYW1zKSkKKyAgICAgICAgKGFwcGx5IHN0cmVhbS13aGlsZSBwcmVkIHByb2MgKG1hcCBzdHJlYW0tY2RyIHN0cmVhbXMpKSkpKQorCisoZGVmaW5lIChzdHJlYW0tb2YgdmFsKQorICAoc3RyZWFtLWNvbnMgdmFsIChzdHJlYW0tb2YgdmFsKSkpCisKKyhkZWZpbmUgKHBlcmlvZGljLXN0cmVhbSB2YWwgcGVyaW9kKQorICAobGV0ICgocGVyaW9kIChpcm91bmQgKG1heCAxICgqICpzYW1wbGUtZnJlcXVlbmN5KiBwZXJpb2QpKSkpKQorICAgIChsZXQgbHAgKChuIDApKQorICAgICAgKGlmICh6ZXJvPyBuKQorICAgICAgICAgIChzdHJlYW0tY29ucyB2YWwgKGxwIHBlcmlvZCkpCisgICAgICAgICAgKHN0cmVhbS1jb25zICNmIChscCAoMS0gbikpKSkpKSkKKworCis7OyBRdWV1ZXMgd2l0aCBhIG1heGltdW0gbGVuZ3RoLgorCisoZGVmaW5lIChtYWtlLXEgbCkKKyAgKGNvbnMgbCAobGFzdC1wYWlyIGwpKSkKKworKGRlZmluZSAocS1oZWFkIHEpCisgIChjYXIgcSkpCisKKyhkZWZpbmUgKHEtdGFpbCBxKQorICAoY2FyIHEpKQorCisoZGVmaW5lIChxLXB1c2ggcSB2YWwpCisgIChsZXQgKCh0YWlsIChjb25zIHZhbCAnKCkpKSkKKyAgICAoaWYgKG51bGw/IChxLXRhaWwgcSkpCisgICAgICAgIChtYWtlLXEgdGFpbCkKKyAgICAgICAgKGxldCAoKGwgKGFwcGVuZCEgKHEtaGVhZCBxKSB0YWlsKSkpCisgICAgICAgICAgKGlmICg+IChsZW5ndGggKHEtaGVhZCBxKSkgKndpbmRvdy1zaXplKikKKyAgICAgICAgICAgICAgKG1ha2UtcSAoY2RyIChxLWhlYWQgcSkpKQorICAgICAgICAgICAgICBxKSkpKSkKKworCis7OyBQYXJhbWV0ZXJzLCBzZXR0YWJsZSB2aWEgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KKworKGRlZmluZSAlcGFyYW1ldGVycyAnKCkpCisoZGVmaW5lLW1hY3JvIChkZWZpbmUtcGFyYW1ldGVyIG5hbWUgdmFsKQorICAobGV0ICgoc3RyIChzeW1ib2wtPnN0cmluZyBuYW1lKSkpCisgICAgKG9yIChhbmQgKGVxdj8gKHN0cmluZy1yZWYgc3RyIDApICNcKikKKyAgICAgICAgICAgICAoZXF2PyAoc3RyaW5nLXJlZiBzdHIgKDEtIChzdHJpbmctbGVuZ3RoIHN0cikpKSAjXCopKQorICAgICAgICAoZXJyb3IgIkludmFsaWQgcGFyYW1ldGVyIG5hbWUiIG5hbWUpKQorICAgIChsZXQgKChwYXJhbSAoc3RyaW5nLT5zeW1ib2wKKyAgICAgICAgICAgICAgICAgIChzdWJzdHJpbmcgc3RyIDEgKDEtIChzdHJpbmctbGVuZ3RoIHN0cikpKSkpCisgICAgICAgICAgKHZhbC1zeW0gKGdlbnN5bSkpKQorICAgICAgYChiZWdpbgorICAgICAgICAgKGRlZmluZSAsbmFtZSAjZikKKyAgICAgICAgIChsZXQgKCgsdmFsLXN5bSAsdmFsKSkKKyAgICAgICAgICAgKHNldCEgLG5hbWUgLHZhbC1zeW0pCisgICAgICAgICAgIChzZXQhICVwYXJhbWV0ZXJzIChjb25zIChjb25zICcscGFyYW0gLHZhbC1zeW0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVwYXJhbWV0ZXJzKSkpKSkpKQorKGRlZmluZSAoc2V0LXBhcmFtZXRlciEgbmFtZSB2YWwpCisgIChkZWZpbmUgKHN5bWJvbC1hcHBlbmQgLiBhcmdzKQorICAgIChzdHJpbmctPnN5bWJvbCAoYXBwbHkgc3RyaW5nLWFwcGVuZCAobWFwIHN5bWJvbC0+c3RyaW5nIGFyZ3MpKSkpCisgIChvciAoYXNzcSBuYW1lICVwYXJhbWV0ZXJzKQorICAgICAgKGVycm9yICJVbmtub3duIHBhcmFtZXRlciIgbmFtZSkpCisgIChtb2R1bGUtc2V0ISAoY3VycmVudC1tb2R1bGUpIChzeW1ib2wtYXBwZW5kICcqIG5hbWUgJyopIHZhbCkpCisKKyhkZWZpbmUgKHBhcnNlLXBhcmFtZXRlci1hcmd1bWVudHMgYXJncykKKyAgKGRlZmluZSAodXNhZ2UpCisgICAgKGZvcm1hdCAjdCAiVXNhZ2U6IH5hIEFSRzEuLi5cblxuIiAibmV0d29yay1jbG9jay5zY20iKQorICAgIChmb3ItZWFjaAorICAgICAobGFtYmRhIChwYWlyKQorICAgICAgIChmb3JtYXQgI3QgIlx0LS1+YT1WQUwgXHQoZGVmYXVsdDogfmEpXG4iIChjYXIgcGFpcikgKGNkciBwYWlyKSkpCisgICAgICVwYXJhbWV0ZXJzKSkKKyAgKGRlZmluZSAodW5rbm93bi1hcmcgYXJnKQorICAgICh3aXRoLW91dHB1dC10by1wb3J0IChjdXJyZW50LWVycm9yLXBvcnQpCisgICAgICAobGFtYmRhICgpCisgICAgICAgIChmb3JtYXQgI3QgIlxuVW5rbm93biBhcmd1bWVudDogfmFcblxuIiBhcmcpCisgICAgICAgICh1c2FnZSkKKyAgICAgICAgKHF1aXQpKSkpCisgIChkZWZpbmUgKHBhcnNlLWFyZ3VtZW50cyBhcmdzKQorICAgIChsZXQgbHAgKChpbiBhcmdzKSAob3V0ICcoKSkpCisgICAgICAoY29uZAorICAgICAgICgobnVsbD8gaW4pCisgICAgICAgIChyZXZlcnNlISBvdXQpKQorICAgICAgICgobm90IChzdHJpbmc9PyAoc3Vic3RyaW5nIChjYXIgaW4pIDAgMikgIi0tIikpCisgICAgICAgICh1bmtub3duLWFyZyAoY2FyIGluKSkpCisgICAgICAgKGVsc2UKKyAgICAgICAgKGxldCAoKGRpdmlkZXIgKG9yIChzdHJpbmctaW5kZXggKGNhciBpbikgI1w9KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVua25vd24tYXJnIChjYXIgaW4pKSkpKQorICAgICAgICAgIChvciAoPiBkaXZpZGVyIDIpICh1bmtub3duLWFyZyAoY2FyIGluKSkpCisgICAgICAgICAgKGxldCAoKHBhcmFtIChzdHJpbmctPnN5bWJvbCAoc3Vic3RyaW5nIChjYXIgaW4pIDIgZGl2aWRlcikpKQorICAgICAgICAgICAgICAgICh2YWwgKHdpdGgtaW5wdXQtZnJvbS1zdHJpbmcgKHN1YnN0cmluZyAoY2FyIGluKSAoMSsgZGl2aWRlcikpCisgICAgICAgICAgICAgICAgICAgICAgIHJlYWQpKSkKKyAgICAgICAgICAgIChscCAoY2RyIGluKSAoYWNvbnMgcGFyYW0gdmFsIG91dCkpKSkpKSkpCisgIChmb3ItZWFjaAorICAgKGxhbWJkYSAocGFpcikKKyAgICAgKG9yIChmYWxzZS1pZi1leGNlcHRpb24KKyAgICAgICAgICAoc2V0LXBhcmFtZXRlciEgKGNhciBwYWlyKSAoY2RyIHBhaXIpKSkKKyAgICAgICAgICh1bmtub3duLWFyZyAoZm9ybWF0ICNmICItLX5hPX5hIiAoY2FyIHBhaXIpIChjZHIgcGFpcikpKSkpCisgICAocGFyc2UtYXJndW1lbnRzIGFyZ3MpKSkKZGlmZiAtLWdpdCBhL3Rlc3RzL21pc2MvbmV0d29yay1jbG9jay5zY20gYi90ZXN0cy9taXNjL25ldHdvcmstY2xvY2suc2NtCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEwODc4YzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9taXNjL25ldHdvcmstY2xvY2suc2NtCkBAIC0wLDAgKzEsMjA1IEBACisjIS9iaW4vYmFzaAorIyAtKi0gc2NoZW1lIC0qLQorZXhlYyBndWlsZSAtLWRlYnVnIC1sICQwIC1lIG1haW4gLS0gIiRAIgorISMKKworOzsgR1N0cmVhbWVyCis7OyBDb3B5cmlnaHQgKEMpIDIwMDUgQW5keSBXaW5nbyA8d2luZ28gYXQgcG9ib3guY29tPgorCis7OyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yICAgIAorOzsgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgICAKKzs7IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mICAgCis7OyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgIAorOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKzs7IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgCis7OyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgIAorOzsgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAKKzs7IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgCis7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorOzsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKzs7IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIGNvbnRhY3Q6Cis7OworOzsgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uICAgICAgICAgICBWb2ljZTogICsxLTYxNy01NDItNTk0MgorOzsgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwICAgICAgICBGYXg6ICAgICsxLTYxNy01NDItMjY1MgorOzsgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgIFVTQSAgICAgICBnbnVAZ251Lm9yZworCisKKzs7OyBDb21tZW50YXJ5OgorOzsKKzs7IE5ldHdvcmsgY2xvY2sgc2ltdWxhdG9yLgorOzsKKzs7IFNpbXVsYXRlcyB0aGUgYXR0ZW1wdHMgb2Ygb25lIGNsb2NrIHRvIHN5bmNocm9uaXplIHdpdGggYW5vdGhlciBvdmVyCis7OyB0aGUgbmV0d29yay4gUGFja2V0cyBhcmUgc2VudCBvdXQgd2l0aCBhIGxvY2FsIHRpbWVzdGFtcCwgYW5kIGNvbWUKKzs7IGJhY2sgd2l0aCB0aGUgcmVtb3RlIHRpbWUgYWRkZWQgb24gdG8gdGhlIHBhY2tldC4gVGhlIHJlbW90ZSB0aW1lIGlzCis7OyBhc3N1bWVkIHRvIGhhdmUgYmVlbiBvYnNlcnZlZCBhdCB0aGUgbG9jYWwgdGltZSBpbiBiZXR3ZWVuIHNlbmRpbmcKKzs7IHRoZSBxdWVyeSBhbmQgcmVjZWl2aW5nIHRoZSByZXBseS4KKzs7Cis7OyBUaGUgbG9jYWwgY2xvY2sgd2lsbCBhdHRlbXB0IHRvIGFkanVzdCBpdHMgcmF0ZSBhbmQgb2Zmc2V0IGJ5IGZpdHRpbmcKKzs7IGEgbGluZSB0byB0aGUgbGFzdCBOIGRhdGFwb2ludHMgb24gaGFuZCwgYnkgZGVmYXVsdCAzMi4gQSBiZXR0ZXIgZml0LAorOzsgYXMgbWVhc3VyZWQgYnkgdGhlIGNvcnJlbGF0aW9uIGNvZWZmaWNpZW50LCB3aWxsIHJlc3VsdCBpbiBhIGxvbmdlcgorOzsgdGltZSBiZWZvcmUgdGhlIG5leHQgcXVlcnkuIEJhZCBmaXRzIG9yIGEgbm90LXlldC1mdWxsIHNldCBvZiBkYXRhCis7OyB3aWxsIHJlc3VsdCBpbiBtYW55IHF1ZXJpZXMgaW4gcXVpY2sgc3VjY2Vzc2lvbi4KKzs7Cis7OyBUaGUgcmF0ZSBhbmQgb2Zmc2V0IGFyZSBzZXQgZGlyZWN0bHkgdG8gdGhlIHNsb3BlIGFuZCBpbnRlcmNlcHQgZnJvbQorOzsgdGhlIGxpbmVhciByZWdyZXNzaW9uLiBUaGlzIHJlc3VsdHMgaW4gZGlzY29udGludWl0aWVzIGluIHRoZSBsb2NhbAorOzsgdGltZS4gQXMgY2xvY2sgdGltZXMgbXVzdCBiZSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcsIGEganVtcCBkb3duIGluCis7OyB0aW1lIHdpbGwgcmVzdWx0IGluc3RlYWQgaW4gdGltZSBzdGFuZGluZyBzdGlsbCBmb3IgYSB3aGlsZS4gU21vb3RobHkKKzs7IHZhcnlpbmcgdGhlIHJhdGUgc3VjaCB0aGF0IG5vIGRpc2NvbnRpbnVpdGllcyBhcmUgcHJlc2VudCBoYXMgbm90Cis7OyBiZWVuIGludmVzdGlnYXRlZC4KKzs7Cis7OyBJbXBsZW1lbnRhdGlvbi13aXNlLCB0aGlzIHNpbXVsYXRvciBwcm9jZXNzZXMgZXZlbnRzIGFuZCBjYWxjdWxhdGVzCis7OyB0aW1lcyBkaXNjcmV0ZWx5LiBUaW1lcyBhcmUgcmVwcmVzZW50ZWQgYXMgc3RyZWFtcywgYWxzbyBrbm93biBhcworOzsgbGF6eSBsaXN0cy4gVGhpcyBpcyBhbiBhbG1vc3QtcHVyZSBmdW5jdGlvbmFsIHNpbXVsYXRvci4gVGhlIHRoaW5nIHRvCis7OyByZW1lbWJlciB3aGlsZSByZWFkaW5nIGlzIHRoYXQgc3RyZWFtLWNvbnMgZG9lcyBub3QgZXZhbHVhdGUgaXRzCis7OyBzZWNvbmQgYXJndW1lbnQsIHJhdGhlciBkZWZlcnJpbmcgdGhhdCBjYWxjdWxhdGlvbiB1bnRpbCBzdHJlYW0tY2RyCis7OyBpcyBjYWxsZWQuIEluIHRoYXQgd2F5IGFsbCB0aW1lcyBhcmUgYWN0dWFsbHkgaW5maW5pdGUgc2VyaWVzLgorOzsKKzs7IFVzYWdlOiBTZWUgbmV0d29yay1jbG9jay5zY20gLS1oZWxwLgorOzsKKzs7OyBDb2RlOgorCisKKyh1c2UtbW9kdWxlcyAoaWNlLTkgcG9wZW4pKQorCisKKyhsb2FkICJuZXR3b3JrLWNsb2NrLXV0aWxzLnNjbSIpCisKKworKGRlZmluZSAodGltZS0+c2FtcGxlcyB0KQorICAoaXJvdW5kICgqIHQgKnNhbXBsZS1mcmVxdWVuY3kqKSkpCisKKworKGRlZmluZSAoc2NoZWR1bGUtZXZlbnQgZXZlbnRzIGUgdGltZSkKKyAgKGxldCBscCAoKHJlc3BvbnNlLXRpbWUgKHRpbWUtPnNhbXBsZXMgdGltZSkpCisgICAgICAgICAgIChzdHJlYW0gZXZlbnRzKSkKKyAgICAoaWYgKHplcm8/IHJlc3BvbnNlLXRpbWUpCisgICAgICAgIChpZiAobm90IChzdHJlYW0tY2FyIHN0cmVhbSkpCisgICAgICAgICAgICAoc3RyZWFtLWNvbnMgZSAoc3RyZWFtLWNkciBzdHJlYW0pKQorICAgICAgICAgICAgKHN0cmVhbS1jb25zIChzdHJlYW0tY2FyIHN0cmVhbSkgKGxwIDAgKHN0cmVhbS1jZHIgc3RyZWFtKSkpKQorICAgICAgICAoc3RyZWFtLWNvbnMgKHN0cmVhbS1jYXIgc3RyZWFtKSAobHAgKDEtIHJlc3BvbnNlLXRpbWUpIChzdHJlYW0tY2RyIHN0cmVhbSkpKSkpKQorCisoZGVmaW5lIChzY2hlZHVsZS1zZW5kLXRpbWUtcXVlcnkgZXZlbnRzIHRpbWUpCisgIChzY2hlZHVsZS1ldmVudCBldmVudHMgKGxpc3QgJ3NlbmQtdGltZS1xdWVyeSkgdGltZSkpCisKKyhkZWZpbmUgKHNjaGVkdWxlLXRpbWUtcXVlcnkgZXZlbnRzIGwpCisgIChzY2hlZHVsZS1ldmVudCBldmVudHMgKGxpc3QgJ3RpbWUtcXVlcnkgbCkKKyAgICAgICAgICAgICAgICAgICgrICpzZW5kLWRlbGF5KiAocmFuZG9tICpzZW5kLWppdHRlciopKSkpCisKKyhkZWZpbmUgKHNjaGVkdWxlLXRpbWUtcmVzcG9uc2UgZXZlbnRzIGwgcikKKyAgKHNjaGVkdWxlLWV2ZW50IGV2ZW50cyAobGlzdCAndGltZS1yZXNwb25zZSBsIHIpCisgICAgICAgICAgICAgICAgICAoKyAqcmVjdi1kZWxheSogKHJhbmRvbSAqcmVjdi1qaXR0ZXIqKSkpKQorCisoZGVmaW5lIChuZXR3b3JrLXRpbWUgcmVtb3RlLXRpbWUgbG9jYWwtdGltZSBldmVudHMgbSBiIHggeSB0KQorICAobGV0ICgociAoc3RyZWFtLWNhciByZW1vdGUtdGltZSkpCisgICAgICAgIChsIChzdHJlYW0tY2FyIGxvY2FsLXRpbWUpKQorICAgICAgICAoZXZlbnQgKHN0cmVhbS1jYXIgZXZlbnRzKSkKKyAgICAgICAgKGV2ZW50cyAoc3RyZWFtLWNkciBldmVudHMpKSkKKworICAgIChkZWZpbmUgKG5leHQgZXZlbnRzIG0gYiB4IHkgdCkKKyAgICAgIChzdHJlYW0tY29ucworICAgICAgICgrICgqIG0gbCkgYikKKyAgICAgICAobmV0d29yay10aW1lCisgICAgICAgIChzdHJlYW0tY2RyIHJlbW90ZS10aW1lKSAoc3RyZWFtLWNkciBsb2NhbC10aW1lKSBldmVudHMgbSBiIHggeSB0KSkpCisKKyAgICAoY2FzZSAoYW5kPT4gZXZlbnQgY2FyKQorICAgICAgKChzZW5kLXRpbWUtcXVlcnkpCisgICAgICAgKGNvbmQKKyAgICAgICAgKCg8IChyYW5kb20gMS4wKSAqcGFja2V0LWxvc3MqKQorICAgICAgICAgKGRlYnVnICI7IGRyb3BwZWQgdGltZSBxdWVyeTogfmFcbiIgbCkKKyAgICAgICAgIChwcmludC1ldmVudCAncGFja2V0LWxvc3QgbCAoKyAoKiBtIGwpIGIpKQorICAgICAgICAgKG5leHQgZXZlbnRzIG0gYiB4IHkgKHRpbWUtPnNhbXBsZXMgKnRpbWVvdXQqKSkpCisgICAgICAgIChlbHNlCisgICAgICAgICAoZGVidWcgIjsgc2VuZGluZyB0aW1lIHF1ZXJ5OiB+YVxuIiBsKQorICAgICAgICAgKHByaW50LWV2ZW50ICdwYWNrZXQtc2VudCBsICgrICgqIG0gbCkgYikpCisgICAgICAgICAobmV4dCAoc2NoZWR1bGUtdGltZS1xdWVyeSBldmVudHMgbCkgbSBiIHggeSAodGltZS0+c2FtcGxlcyAqdGltZW91dCopKSkpKQorCisgICAgICAoKHRpbWUtcXVlcnkpCisgICAgICAgKGRlYnVnICI7IHRpbWUgcXVlcnkgcmVjZWl2ZWQsIHJlcGx5aW5nIHdpdGggfmFcbiIgcikKKyAgICAgICAobmV4dCAoc2NoZWR1bGUtdGltZS1yZXNwb25zZSBldmVudHMgKGNhZHIgZXZlbnQpIHIpIG0gYiB4IHkgKGFuZCB0ICgxLSB0KSkpKQorCisgICAgICAoKHRpbWUtcmVzcG9uc2UpCisgICAgICAgKGxldCAoKHggKHEtcHVzaCB4IChhdmcgKGNhZHIgZXZlbnQpIGwpKSkKKyAgICAgICAgICAgICAoeSAocS1wdXNoIHkgKGNhZGRyIGV2ZW50KSkpKQorICAgICAgICAgKGNhbGwtd2l0aC12YWx1ZXMKKyAgICAgICAgICAgICAobGFtYmRhICgpIChsZWFzdC1zcXVhcmVzIChxLWhlYWQgeCkgKHEtaGVhZCB5KSkpCisgICAgICAgICAgIChsYW1iZGEgKG0gYiByLXNxdWFyZWQpCisgICAgICAgICAgICAgKGRlZmluZSAobmV4dC10aW1lKSAKKyAgICAgICAgICAgICAgIChtYXgKKyAgICAgICAgICAgICAgICAoaWYgKDwgKGxlbmd0aCAocS1oZWFkIHgpKSAqd2luZG93LXNpemUqKQorICAgICAgICAgICAgICAgICAgICAwCisgICAgICAgICAgICAgICAgICAgICgvIDEgKC0gMSAobWluIHItc3F1YXJlZCAwLjk5OTk5KSkgMTAwMCkpCisgICAgICAgICAgICAgICAgMC4xMCkpCisgICAgICAgICAgICAgKGRlYnVnICI7IG5ldyBzbG9wZSBhbmQgb2Zmc2V0OiB+YSB+YSAofmEpXG4iIG0gYiByLXNxdWFyZWQpCisgICAgICAgICAgICAgKHByaW50LWV2ZW50ICdwYWNrZXQtb2JzZXJ2ZWQgKGF2ZyAoY2FkciBldmVudCkgbCkgKGNhZGRyIGV2ZW50KSkKKyAgICAgICAgICAgICAocHJpbnQtZXZlbnQgJ3BhY2tldC1yZWNlaXZlZCBsICgrICgqIG0gbCkgYikpCisgICAgICAgICAgICAgKG5leHQgKHNjaGVkdWxlLXNlbmQtdGltZS1xdWVyeSBldmVudHMgKG5leHQtdGltZSkpIG0gYiB4IHkgI2YpKSkpKQorCisgICAgICAoZWxzZQorICAgICAgIChjb25kCisgICAgICAgICgobm90IHQpCisgICAgICAgICA7OyBub3Qgd2FpdGluZyBmb3IgYSByZXNwb25zZQorICAgICAgICAgKG5leHQgZXZlbnRzIG0gYiB4IHkgdCkpCisgICAgICAgICgoPD0gdCAwKQorICAgICAgICAgOzsgd2UgdGltZWQgb3V0CisgICAgICAgICAobmV4dCAoc2NoZWR1bGUtc2VuZC10aW1lLXF1ZXJ5IGV2ZW50cyAwLjApIG0gYiB4IHkgMCkpCisgICAgICAgIChlbHNlCisgICAgICAgICAobmV4dCBldmVudHMgbSBiIHggeSAoMS0gdCkpKSkpKSkpCisKKyhkZWZpbmUgKHJ1bi1zaW11bGF0aW9uIHJlbW90ZS1zcGVlZCBsb2NhbC1zcGVlZCkKKyAgKGxldCAoKGFic29sdXRlLXRpbWUgKGFyaXRobWV0aWMtc2VyaWVzIDAuMCAoLyAxLjAgKnNhbXBsZS1mcmVxdWVuY3kqKSkpCisgICAgICAgIChldmVudC1zdHJlYW0gKHN0cmVhbS1vZiAjZikpKQorICAgIChsZXQgKChyZW1vdGUtdGltZSAoc2NhbGUtc3RyZWFtIGFic29sdXRlLXRpbWUgcmVtb3RlLXNwZWVkKSkKKyAgICAgICAgICAobG9jYWwtdGltZSAoc2NhbGUtc3RyZWFtIGFic29sdXRlLXRpbWUgbG9jYWwtc3BlZWQpKSkKKyAgICAgICh2YWx1ZXMKKyAgICAgICBhYnNvbHV0ZS10aW1lCisgICAgICAgcmVtb3RlLXRpbWUKKyAgICAgICBsb2NhbC10aW1lCisgICAgICAgKG5ldHdvcmstdGltZQorICAgICAgICByZW1vdGUtdGltZQorICAgICAgICBsb2NhbC10aW1lCisgICAgICAgIChzY2hlZHVsZS1zZW5kLXRpbWUtcXVlcnkgZXZlbnQtc3RyZWFtIDAuMCkKKyAgICAgICAgMS4wCisgICAgICAgIChzdHJlYW0tY2FyIGxvY2FsLXRpbWUpCisgICAgICAgIChtYWtlLXEgKGxpc3QgKHN0cmVhbS1jYXIgbG9jYWwtdGltZSkpKQorICAgICAgICAobWFrZS1xIChsaXN0IChzdHJlYW0tY2FyIHJlbW90ZS10aW1lKSkpCisgICAgICAgICNmKSkpKSkKKworKGRlZmluZSAocHJpbnQtc2ltdWxhdGlvbikKKyAgKGRpc3BsYXkgIkFic29sdXRlIHRpbWU7IFJlbW90ZSB0aW1lOyBMb2NhbCB0aW1lOyBOZXR3b3JrIHRpbWVcbiIpCisgIChjYWxsLXdpdGgtdmFsdWVzCisgICAgICAobGFtYmRhICgpIChydW4tc2ltdWxhdGlvbiAqcmVtb3RlLXJhdGUqICpsb2NhbC1yYXRlKikpCisgICAgKGxhbWJkYSBzdHJlYW1zCisgICAgICAoYXBwbHkKKyAgICAgICBzdHJlYW0td2hpbGUKKyAgICAgICAobGFtYmRhIChhIHIgbCBuKSAoPD0gYSAqdG90YWwtdGltZSopKQorICAgICAgIChsYW1iZGEgKGEgciBsIG4pIChmb3JtYXQgI3QgIn5hIH5hIH5hIH5hXG4iIGEgciBsIG4pKQorICAgICAgIHN0cmVhbXMpKSkpCisKKyhkZWZpbmUgKHBsb3Qtc2ltdWxhdGlvbikKKyAgKGxldCAoKHBvcnQgKG9wZW4tb3V0cHV0LXBpcGUgIi4vcGxvdC1kYXRhIE5ldHdvcmsgQ2xvY2sgU2ltdWxhdGlvbiIpKSkKKyAgICAod2l0aC1vdXRwdXQtdG8tcG9ydCBwb3J0CisgICAgICBwcmludC1zaW11bGF0aW9uKQorICAgIChjbG9zZS1waXBlIHBvcnQpKSkKKworICAgICAKKyhkZWZpbmUtcGFyYW1ldGVyICpzYW1wbGUtZnJlcXVlbmN5KiA0MCkKKyhkZWZpbmUtcGFyYW1ldGVyICpzZW5kLWRlbGF5KiAwLjEpCisoZGVmaW5lLXBhcmFtZXRlciAqcmVjdi1kZWxheSogMC4xKQorKGRlZmluZS1wYXJhbWV0ZXIgKnBhY2tldC1sb3NzKiAwLjAxKQorKGRlZmluZS1wYXJhbWV0ZXIgKnNlbmQtaml0dGVyKiAwLjEpCisoZGVmaW5lLXBhcmFtZXRlciAqcmVjdi1qaXR0ZXIqIDAuMSkKKyhkZWZpbmUtcGFyYW1ldGVyICp3aW5kb3ctc2l6ZSogMzIpCisoZGVmaW5lLXBhcmFtZXRlciAqbG9jYWwtcmF0ZSogMS4wKQorKGRlZmluZS1wYXJhbWV0ZXIgKnJlbW90ZS1yYXRlKiAxLjEpCisoZGVmaW5lLXBhcmFtZXRlciAqdG90YWwtdGltZSogNS4wKQorKGRlZmluZS1wYXJhbWV0ZXIgKnRpbWVvdXQqIDEuMCkKKyhkZWZpbmUtcGFyYW1ldGVyICpkZWJ1ZyogI2YpCisoZGVmaW5lLXBhcmFtZXRlciAqd2l0aC1ncmFwaCogI3QpCisKKworKGRlZmluZSAobWFpbiBhcmdzKQorICAocGFyc2UtcGFyYW1ldGVyLWFyZ3VtZW50cyAoY2RyIGFyZ3MpKQorICAoaWYgKndpdGgtZ3JhcGgqCisgICAgICAocGxvdC1zaW11bGF0aW9uKQorICAgICAgKHByaW50LXNpbXVsYXRpb24pKQorICAocXVpdCkpCmRpZmYgLS1naXQgYS90ZXN0cy9taXNjL3Bsb3QtZGF0YSBiL3Rlc3RzL21pc2MvcGxvdC1kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY2MjdhNjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9taXNjL3Bsb3QtZGF0YQpAQCAtMCwwICsxLDgxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgorCitpbXBvcnQgcHlsYWIKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IHN5cworCitkZWYgcGFyc2VfZGF0YShsLCBzdGF0ZSk6CisgICAgc3RhdGVbJ2RhdGEnXS5hcHBlbmQoW2Zsb2F0KHgpIGZvciB4IGluIGZpbHRlcihOb25lLCBsLnNwbGl0KCcgJykpXSkKKyAgICByZXR1cm4gc3RhdGUKKworZGVmIHBhcnNlX2V2ZW50KGwsIHN0YXRlKToKKyAgICBjb21wb25lbnRzID0gZmlsdGVyKE5vbmUsIGwuc3BsaXQoJyAnKSkKKyAgICB2YWxzID0gW2Zsb2F0KHgpIGZvciB4IGluIGNvbXBvbmVudHNbMTpdXQorICAgIGlmIG5vdCBjb21wb25lbnRzWzBdIGluIHN0YXRlOgorICAgICAgICBzdGF0ZVtjb21wb25lbnRzWzBdXSA9IFt2YWxzXQorICAgIGVsc2U6CisgICAgICAgIHN0YXRlW2NvbXBvbmVudHNbMF1dLmFwcGVuZCh2YWxzKQorICAgIHJldHVybiBzdGF0ZQorCitkZWYgcmVhZF9saW5lKGZkLCBzdGF0ZSk6CisgICAgbCA9IGZkLnJlYWRsaW5lKCkKKyAgICBpZiBub3QgbDoKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICBsID0gbC5zdHJpcCgpCisgICAgaWYgbFswXS5pc2RpZ2l0KCk6CisgICAgICAgIHJldHVybiBwYXJzZV9kYXRhKGwsIHN0YXRlKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBwYXJzZV9ldmVudChsLCBzdGF0ZSkKKworZGVmIHJlYWRfZGF0YShmZCk6CisgICAgc3RhdGUgPSB7J2RhdGEnOltdLAorICAgICAgICAgICAgICdwYWNrZXQtc2VudCc6W10sCisgICAgICAgICAgICAgJ3BhY2tldC1sb3N0JzpbXSwKKyAgICAgICAgICAgICAncGFja2V0LXJlY2VpdmVkJzpbXSwKKyAgICAgICAgICAgICAncGFja2V0LW9ic2VydmVkJzpbXX0KKyAgICBuZXdzdGF0ZSA9IHN0YXRlCisgICAgd2hpbGUgbmV3c3RhdGU6CisgICAgICAgIHN0YXRlID0gbmV3c3RhdGUKKyAgICAgICAgbmV3c3RhdGUgPSByZWFkX2xpbmUoZmQsIHN0YXRlKQorICAgIHJldHVybiBzdGF0ZQorCitkZWYgbWFrZV94dGlja3Moc3RhcnQsIGVuZCwgbnVtdGlja3MpOgorICAgIHJldHVybiByYW5nZShpbnQoc3RhcnQpLCBpbnQoZW5kKSwgaW50KChzdGFydC1lbmQpL251bXRpY2tzKSkKKworZGVmIG1ha2VfcGxvdCh0aXRsZSk6CisgICAgbCA9IHN5cy5zdGRpbi5yZWFkbGluZSgpCisgICAgbGFiZWxzID0gbC5zdHJpcCgpLnNwbGl0KCc7JykKKyAgICBzdGF0ZSA9IHJlYWRfZGF0YShzeXMuc3RkaW4pCisgICAgZGF0YSA9IHN0YXRlWydkYXRhJ10KKyAgICBsb3N0X3BhY2tldHMgPSBzdGF0ZVsncGFja2V0LWxvc3QnXQorICAgIG9ic3ZfcGFja2V0cyA9IHN0YXRlWydwYWNrZXQtb2JzZXJ2ZWQnXQorICAgIHNlbnRfcGFja2V0cyA9IHN0YXRlWydwYWNrZXQtc2VudCddCisgICAgcmVjZF9wYWNrZXRzID0gc3RhdGVbJ3BhY2tldC1yZWNlaXZlZCddCisKKyAgICBkb21haW4gPSBbeFswXSBmb3IgeCBpbiBkYXRhXQorICAgIGZvciBpIGluIHJhbmdlKDEsbGVuKGxhYmVscykpOgorICAgICAgICBweWxhYi5wbG90KGRvbWFpbiwgW3hbaV0gZm9yIHggaW4gZGF0YV0sIGxhYmVsPWxhYmVsc1tpXSkKKyAgICBweWxhYi5wbG90KFt4WzBdIGZvciB4IGluIGxvc3RfcGFja2V0c10sIFt4WzFdIGZvciB4IGluIGxvc3RfcGFja2V0c10sCisgICAgICAgICAgICAgICBsYWJlbD0nQ2xpZW50IHNlbnQgcGFja2V0LCBidXQgZHJvcHBlZCcsIG1hcmtlcj0neCcsIGxpbmVzdHlsZT1Ob25lLCBtcz04KQorICAgIHB5bGFiLnBsb3QoW3hbMF0gZm9yIHggaW4gc2VudF9wYWNrZXRzXSwgW3hbMV0gZm9yIHggaW4gc2VudF9wYWNrZXRzXSwKKyAgICAgICAgICAgICAgIGxhYmVsPSdDbGllbnQgc2VudCBwYWNrZXQnLCBtYXJrZXI9J14nLCBsaW5lc3R5bGU9Tm9uZSwgbXM9OCkKKyAgICBweWxhYi5wbG90KFt4WzBdIGZvciB4IGluIG9ic3ZfcGFja2V0c10sIFt4WzFdIGZvciB4IGluIG9ic3ZfcGFja2V0c10sCisgICAgICAgICAgICAgICBsYWJlbD0nUmVtb3RlIHRpbWUgb2JzZXJ2YXRpb24nLCBtYXJrZXI9J0QnLCBsaW5lc3R5bGU9Tm9uZSwgbXM9OCkKKyAgICBweWxhYi5wbG90KFt4WzBdIGZvciB4IGluIHJlY2RfcGFja2V0c10sIFt4WzFdIGZvciB4IGluIHJlY2RfcGFja2V0c10sCisgICAgICAgICAgICAgICBsYWJlbD0nQ2xpZW50IHJlY2VpdmVkIHBhY2tldCcsIG1hcmtlcj0ndicsIGxpbmVzdHlsZT1Ob25lLCBtcz04KQorICAgIHB5bGFiLmxlZ2VuZCgpCisgICAgcHlsYWIueWxhYmVsKHInQ2xvY2sgdGltZSAocyknKQorICAgIHB5bGFiLnhsYWJlbChyJ1JlYWwgdGltZSAocyknKQorICAgIHB5bGFiLnRpdGxlKHRpdGxlKQorICAgIHB5bGFiLmdyaWQoVHJ1ZSkKKyAgICBweWxhYi5zaG93KCkKKyAgICAKK2RlZiBtYWluKGFyZ3MpOgorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigpCisKKyAgICB0aXRsZSA9ICcgJy5qb2luKGFyZ3NbMTpdKQorICAgIG1ha2VfcGxvdCh0aXRsZSkKKworbWFpbihzeXMuYXJndikKZGlmZiAtLWdpdCBhL3Rvb2xzL01ha2VmaWxlLmFtIGIvdG9vbHMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZlMTk0YwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNjcgQEAKKworYmluX1BST0dSQU1TID0gXAorCWdzdC1pbnNwZWN0LUBHU1RfTUFKT1JNSU5PUkAgXAorCWdzdC10eXBlZmluZC1AR1NUX01BSk9STUlOT1JACisKK2dzdF9pbnNwZWN0X0BHU1RfTUFKT1JNSU5PUkBfU09VUkNFUyA9IGdzdC1pbnNwZWN0LmMgdG9vbHMuaAorZ3N0X2luc3BlY3RfQEdTVF9NQUpPUk1JTk9SQF9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQorZ3N0X2luc3BlY3RfQEdTVF9NQUpPUk1JTk9SQF9MREFERCA9ICQoR1NUX09CSl9MSUJTKQorCitnc3RfdHlwZWZpbmRfQEdTVF9NQUpPUk1JTk9SQF9TT1VSQ0VTID0gZ3N0LXR5cGVmaW5kLmMgdG9vbHMuaAorZ3N0X3R5cGVmaW5kX0BHU1RfTUFKT1JNSU5PUkBfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykKK2dzdF90eXBlZmluZF9AR1NUX01BSk9STUlOT1JAX0xEQUREID0gJChHU1RfT0JKX0xJQlMpCisKK2lmICFHU1RfRElTQUJMRV9QQVJTRQorYmluX1BST0dSQU1TICs9IGdzdC1sYXVuY2gtQEdTVF9NQUpPUk1JTk9SQAorCitnc3RfbGF1bmNoX0BHU1RfTUFKT1JNSU5PUkBfU09VUkNFUyA9IGdzdC1sYXVuY2guYyB0b29scy5oCitnc3RfbGF1bmNoX0BHU1RfTUFKT1JNSU5PUkBfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykKK2dzdF9sYXVuY2hfQEdTVF9NQUpPUk1JTk9SQF9MREFERCA9ICQoR1NUX09CSl9MSUJTKQorZW5kaWYKKworQW5kcm9pZC5tazogTWFrZWZpbGUuYW0KKwlhbmRyb2dlbml6ZXIgLTpQUk9KRUNUIGdzdHJlYW1lciBcCisJIC06UkVMX1RPUCAkKHRvcF9zcmNkaXIpIC06QUJTX1RPUCAkKGFic190b3Bfc3JjZGlyKSBcCisJIC06RVhFQ1VUQUJMRSBnc3QtaW5zcGVjdC1AR1NUX01BSk9STUlOT1JAIC06VEFHUyBlbmcgZGVidWcgXAorCSAtOlNPVVJDRVMgJChnc3RfaW5zcGVjdF9AR1NUX01BSk9STUlOT1JAX1NPVVJDRVMpIFwKKwkgLTpDRkxBR1MgJChERUZTKSAkKGdzdF9pbnNwZWN0X0BHU1RfTUFKT1JNSU5PUkBfQ0ZMQUdTKSBcCisJIC06TERGTEFHUyAkKGdzdF9pbnNwZWN0X0BHU1RfTUFKT1JNSU5PUkBfTERBREQpIFwKKwkgLTpQQVNTVEhST1VHSCBMT0NBTF9BUk1fTU9ERTo9YXJtIFwKKwkgLTpFWEVDVVRBQkxFIGdzdC1sYXVuY2gtQEdTVF9NQUpPUk1JTk9SQCAtOlRBR1MgZW5nIGRlYnVnIFwKKwkgLTpTT1VSQ0VTICQoZ3N0X2xhdW5jaF9AR1NUX01BSk9STUlOT1JAX1NPVVJDRVMpIFwKKwkgLTpDRkxBR1MgJChERUZTKSAkKGdzdF9sYXVuY2hfQEdTVF9NQUpPUk1JTk9SQF9DRkxBR1MpIFwKKwkgLTpMREZMQUdTICQoZ3N0X2xhdW5jaF9AR1NUX01BSk9STUlOT1JAX0xEQUREKSBcCisJIC06UEFTU1RIUk9VR0ggTE9DQUxfQVJNX01PREU6PWFybSBcCisJPiAkQAorCittYW5wYWdlcyA9IFwKKwlnc3QtaW5zcGVjdC1AR1NUX01BSk9STUlOT1JALjEgXAorCWdzdC10eXBlZmluZC1AR1NUX01BSk9STUlOT1JALjEKKworaWYgIUdTVF9ESVNBQkxFX1BBUlNFCittYW5wYWdlcyArPSBnc3QtbGF1bmNoLUBHU1RfTUFKT1JNSU5PUkAuMQorZW5kaWYKKworQ0xFQU5GSUxFUyA9ICQobWFucGFnZXMpICouZ2NubyAqLmdjZGEKK21hbl9NQU5TID0gJChtYW5wYWdlcykKKworIyBkZXZlbG9wZXIgaGVscGVyIHRvb2xzLCBub3QgbWVhbnQgZm9yIGluc3RhbGxhdGlvbgorbm9pbnN0X1NDUklQVFMgPSBnc3QtaW5kZW50CisKK25vaW5zdF9IRUFERVJTID0gdG9vbHMuaAorCitFWFRSQV9ESVNUID0gXAorCSQobm9pbnN0X1NDUklQVFMpIFwKKwlnc3QtaW5zcGVjdC4xLmluIFwKKwlnc3QtbGF1bmNoLjEuaW4gXAorCWdzdC10eXBlZmluZC4xLmluIFwKKwlnc3QtcGxvdC10aW1lbGluZS5weQorCislLUBHU1RfTUFKT1JNSU5PUkAuMTogJS4xLmluCisJJChBTV9WX0dFTilzZWQgXAorCQktZSBzLGdzdC1pbnNwZWN0LGdzdC1pbnNwZWN0LUBHU1RfTUFKT1JNSU5PUkAsZyBcCisJCS1lIHMsZ3N0LWxhdW5jaCxnc3QtbGF1bmNoLUBHU1RfTUFKT1JNSU5PUkAsZyBcCisJCS1lIHMsZ3N0LXR5cGVmaW5kLGdzdC10eXBlZmluZC1AR1NUX01BSk9STUlOT1JALGcgXAorCQktZSBzLEdTVF9NQUpPUk1JTk9SLEBHU1RfTUFKT1JNSU5PUkAsZyBcCisJCSQ8ID4kQAorCmRpZmYgLS1naXQgYS90b29scy9NYWtlZmlsZS5pbiBiL3Rvb2xzL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZDJmMGIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDkyNSBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4xIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworCisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK2Jpbl9QUk9HUkFNUyA9IGdzdC1pbnNwZWN0LUBHU1RfTUFKT1JNSU5PUkAkKEVYRUVYVCkgXAorCWdzdC10eXBlZmluZC1AR1NUX01BSk9STUlOT1JAJChFWEVFWFQpICQoYW1fX0VYRUVYVF8xKQorQEdTVF9ESVNBQkxFX1BBUlNFX0ZBTFNFQGFtX19hcHBlbmRfMSA9IGdzdC1sYXVuY2gtQEdTVF9NQUpPUk1JTk9SQAorQEdTVF9ESVNBQkxFX1BBUlNFX0ZBTFNFQGFtX19hcHBlbmRfMiA9IGdzdC1sYXVuY2gtQEdTVF9NQUpPUk1JTk9SQC4xCitzdWJkaXIgPSB0b29scworRElTVF9DT01NT04gPSAkKG5vaW5zdF9IRUFERVJTKSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gXAorCSQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXB5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtc2NydWItaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitAR1NUX0RJU0FCTEVfUEFSU0VfRkFMU0VAYW1fX0VYRUVYVF8xID0gIFwKK0BHU1RfRElTQUJMRV9QQVJTRV9GQUxTRUAJZ3N0LWxhdW5jaC1AR1NUX01BSk9STUlOT1JAJChFWEVFWFQpCithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQoYmluZGlyKSIgIiQoREVTVERJUikkKG1hbjFkaXIpIgorUFJPR1JBTVMgPSAkKGJpbl9QUk9HUkFNUykKK2FtX2dzdF9pbnNwZWN0X0BHU1RfTUFKT1JNSU5PUkBfT0JKRUNUUyA9ICBcCisJZ3N0X2luc3BlY3RfQEdTVF9NQUpPUk1JTk9SQC1nc3QtaW5zcGVjdC4kKE9CSkVYVCkKK2dzdF9pbnNwZWN0X0BHU1RfTUFKT1JNSU5PUkBfT0JKRUNUUyA9ICBcCisJJChhbV9nc3RfaW5zcGVjdF9AR1NUX01BSk9STUlOT1JAX09CSkVDVFMpCithbV9fREVQRU5ERU5DSUVTXzEgPQorZ3N0X2luc3BlY3RfQEdTVF9NQUpPUk1JTk9SQF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKK0FNX1ZfbHQgPSAkKGFtX192X2x0XyQoVikpCithbV9fdl9sdF8gPSAkKGFtX192X2x0XyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfbHRfMCA9IC0tc2lsZW50Citnc3RfaW5zcGVjdF9AR1NUX01BSk9STUlOT1JAX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAorCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCisJJChnc3RfaW5zcGVjdF9AR1NUX01BSk9STUlOT1JAX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK2FtX19nc3RfbGF1bmNoX0BHU1RfTUFKT1JNSU5PUkBfU09VUkNFU19ESVNUID0gZ3N0LWxhdW5jaC5jIHRvb2xzLmgKK0BHU1RfRElTQUJMRV9QQVJTRV9GQUxTRUBhbV9nc3RfbGF1bmNoX0BHU1RfTUFKT1JNSU5PUkBfT0JKRUNUUyA9IGdzdF9sYXVuY2hfQEdTVF9NQUpPUk1JTk9SQC1nc3QtbGF1bmNoLiQoT0JKRVhUKQorZ3N0X2xhdW5jaF9AR1NUX01BSk9STUlOT1JAX09CSkVDVFMgPSAgXAorCSQoYW1fZ3N0X2xhdW5jaF9AR1NUX01BSk9STUlOT1JAX09CSkVDVFMpCitAR1NUX0RJU0FCTEVfUEFSU0VfRkFMU0VAZ3N0X2xhdW5jaF9AR1NUX01BSk9STUlOT1JAX0RFUEVOREVOQ0lFUyA9ICBcCitAR1NUX0RJU0FCTEVfUEFSU0VfRkFMU0VACSQoYW1fX0RFUEVOREVOQ0lFU18xKQorZ3N0X2xhdW5jaF9AR1NUX01BSk9STUlOT1JAX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAorCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCisJJChnc3RfbGF1bmNoX0BHU1RfTUFKT1JNSU5PUkBfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCisJJChMREZMQUdTKSAtbyAkQAorYW1fZ3N0X3R5cGVmaW5kX0BHU1RfTUFKT1JNSU5PUkBfT0JKRUNUUyA9ICBcCisJZ3N0X3R5cGVmaW5kX0BHU1RfTUFKT1JNSU5PUkAtZ3N0LXR5cGVmaW5kLiQoT0JKRVhUKQorZ3N0X3R5cGVmaW5kX0BHU1RfTUFKT1JNSU5PUkBfT0JKRUNUUyA9ICBcCisJJChhbV9nc3RfdHlwZWZpbmRfQEdTVF9NQUpPUk1JTk9SQF9PQkpFQ1RTKQorZ3N0X3R5cGVmaW5kX0BHU1RfTUFKT1JNSU5PUkBfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCitnc3RfdHlwZWZpbmRfQEdTVF9NQUpPUk1JTk9SQF9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKKwkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAorCSQoZ3N0X3R5cGVmaW5kX0BHU1RfTUFKT1JNSU5PUkBfQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorU0NSSVBUUyA9ICQobm9pbnN0X1NDUklQVFMpCitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCisJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfJChWKSkKK2FtX192X0NDXyA9ICQoYW1fX3ZfQ0NfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgIiAkQDsKK0FNX1ZfYXQgPSAkKGFtX192X2F0XyQoVikpCithbV9fdl9hdF8gPSAkKGFtX192X2F0XyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorYW1fX3ZfYXRfMCA9IEAKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEXyQoVikpCithbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICIgJEA7CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOXyQoVikpCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitTT1VSQ0VTID0gJChnc3RfaW5zcGVjdF9AR1NUX01BSk9STUlOT1JAX1NPVVJDRVMpIFwKKwkkKGdzdF9sYXVuY2hfQEdTVF9NQUpPUk1JTk9SQF9TT1VSQ0VTKSBcCisJJChnc3RfdHlwZWZpbmRfQEdTVF9NQUpPUk1JTk9SQF9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChnc3RfaW5zcGVjdF9AR1NUX01BSk9STUlOT1JAX1NPVVJDRVMpIFwKKwkkKGFtX19nc3RfbGF1bmNoX0BHU1RfTUFKT1JNSU5PUkBfU09VUkNFU19ESVNUKSBcCisJJChnc3RfdHlwZWZpbmRfQEdTVF9NQUpPUk1JTk9SQF9TT1VSQ0VTKQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbF9tYXggPSA0MAorYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKKyAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorYW1fX25vYmFzZV9zdHJpcCA9IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCithbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisgIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCisgICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisgICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCisgICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworYW1fX2Jhc2VfbGlzdCA9IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworbWFuMWRpciA9ICQobWFuZGlyKS9tYW4xCitOUk9GRiA9IG5yb2ZmCitNQU5TID0gJChtYW5fTUFOUykKK0hFQURFUlMgPSAkKG5vaW5zdF9IRUFERVJTKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBUyA9IEBBU0AKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAorQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAorQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKK0NDID0gQENDQAorQ0NBUyA9IEBDQ0FTQAorQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACitDQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDSEVDS19NQUpPUl9WRVJTSU9OID0gQENIRUNLX01BSk9SX1ZFUlNJT05ACitDSEVDS19NSUNST19WRVJTSU9OID0gQENIRUNLX01JQ1JPX1ZFUlNJT05ACitDSEVDS19NSU5PUl9WRVJTSU9OID0gQENIRUNLX01JTk9SX1ZFUlNJT05ACitDSEVDS19WRVJTSU9OID0gQENIRUNLX1ZFUlNJT05ACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEFESVIgPSBAREFUQURJUkAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRU5BQkxFX1NVQlVOSVQgPSBARU5BQkxFX1NVQlVOSVRACitFUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZGTEFHUyA9IEBGRkxBR1NACitGR1JFUCA9IEBGR1JFUEAKK0ZMRVhfUEFUSCA9IEBGTEVYX1BBVEhACitHQ09WID0gQEdDT1ZACitHQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKK0dDT1ZfTElCUyA9IEBHQ09WX0xJQlNACitHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAorR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKK0dMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAorR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKK0dMSUJfT05MWV9DRkxBR1MgPSBAR0xJQl9PTkxZX0NGTEFHU0AKK0dMSUJfT05MWV9MSUJTID0gQEdMSUJfT05MWV9MSUJTQAorR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACitHTElCX1JFUSA9IEBHTElCX1JFUUAKK0dNUF9MSUJTID0gQEdNUF9MSUJTQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACitHUkVQID0gQEdSRVBACitHU0xfTElCUyA9IEBHU0xfTElCU0AKK0dTVF9BR0UgPSBAR1NUX0FHRUAKK0dTVF9BTExfQ0ZMQUdTID0gQEdTVF9BTExfQ0ZMQUdTQAorR1NUX0FMTF9DWFhGTEFHUyA9IEBHU1RfQUxMX0NYWEZMQUdTQAorR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKK0dTVF9BTExfTElCUyA9IEBHU1RfQUxMX0xJQlNACitHU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKK0dTVF9ESVNBQkxFX0FMTE9DX1RSQUNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9BTExPQ19UUkFDRV9ERUZJTkVACitHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkVACitHU1RfRElTQUJMRV9ORVRfREVGSU5FID0gQEdTVF9ESVNBQkxFX05FVF9ERUZJTkVACitHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAorR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKK0dTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKK0dTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACitHU1RfRElTQUJMRV9UUkFDRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfVFJBQ0VfREVGSU5FQAorR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAorR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAorR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTU19ERUZJTkUgPSBAR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTU19ERUZJTkVACitHU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKK0dTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAorR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKK0dTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAorR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACitHU1RfTUFKT1JNSU5PUiA9IEBHU1RfTUFKT1JNSU5PUkAKK0dTVF9PQkpfQ0ZMQUdTID0gQEdTVF9PQkpfQ0ZMQUdTQAorR1NUX09CSl9DWFhGTEFHUyA9IEBHU1RfT0JKX0NYWEZMQUdTQAorR1NUX09CSl9MSUJTID0gQEdTVF9PQkpfTElCU0AKK0dTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAorR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAorR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAorR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKK0dTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKK0dTVF9QS0dfREVQUyA9IEBHU1RfUEtHX0RFUFNACitHU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAorR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAorR1NUX1BSSU5URl9FWFRFTlNJT05fUE9JTlRFUl9GT1JNQVRfREVGSU5FID0gQEdTVF9QUklOVEZfRVhURU5TSU9OX1BPSU5URVJfRk9STUFUX0RFRklORUAKK0dTVF9QUklOVEZfRVhURU5TSU9OX1NFR01FTlRfRk9STUFUX0RFRklORSA9IEBHU1RfUFJJTlRGX0VYVEVOU0lPTl9TRUdNRU5UX0ZPUk1BVF9ERUZJTkVACitHU1RfUkVHSVNUUllfRE9DX1RZUEVTID0gQEdTVF9SRUdJU1RSWV9ET0NfVFlQRVNACitHU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAorR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT05fREVGSU5FID0gQEdTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OX0RFRklORUAKK0dUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACitIQVZFX0RPQ0JPT0sySFRNTCA9IEBIQVZFX0RPQ0JPT0sySFRNTEAKK0hBVkVfRE9DQk9PSzJQUyA9IEBIQVZFX0RPQ0JPT0syUFNACitIQVZFX0RWSVBTID0gQEhBVkVfRFZJUFNACitIQVZFX0VQU1RPUERGID0gQEhBVkVfRVBTVE9QREZACitIQVZFX0ZJRzJERVYgPSBASEFWRV9GSUcyREVWQAorSEFWRV9HTVAgPSBASEFWRV9HTVBACitIQVZFX0dTTCA9IEBIQVZFX0dTTEAKK0hBVkVfSkFERVRFWCA9IEBIQVZFX0pBREVURVhACitIQVZFX1BOR1RPUE5NID0gQEhBVkVfUE5HVE9QTk1ACitIQVZFX1BOTVRPUFMgPSBASEFWRV9QTk1UT1BTQAorSEFWRV9QUzJQREYgPSBASEFWRV9QUzJQREZACitIQVZFX1hNTExJTlQgPSBASEFWRV9YTUxMSU5UQAorSE9TVF9DUFUgPSBASE9TVF9DUFVACitIVE1MX0RJUiA9IEBIVE1MX0RJUkAKK0lORVRfQVRPTl9MSUJTID0gQElORVRfQVRPTl9MSUJTQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAorSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAorSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAorSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACitJTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAorSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAorSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkRJUiA9IEBMSUJESVJACitMSUJJQ09OViA9IEBMSUJJQ09OVkAKK0xJQklOVEwgPSBATElCSU5UTEAKK0xJQk0gPSBATElCTUAKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xPQ0FMRURJUiA9IEBMT0NBTEVESVJACitMVExJQklDT05WID0gQExUTElCSUNPTlZACitMVExJQklOVEwgPSBATFRMSUJJTlRMQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BSU5UID0gQE1BSU5UQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAorUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKK1BBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACitQQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKK1BBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQRVJMX1BBVEggPSBAUEVSTF9QQVRIQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUExVR0lORElSID0gQFBMVUdJTkRJUkAKK1BPU1VCID0gQFBPU1VCQAorUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACitQWVRIT04gPSBAUFlUSE9OQAorUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKK1BZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACitQWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACitQWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKK1ZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKK1ZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1dBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAorV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAorWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAorWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKK1hTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK2x0X0VDSE8gPSBAbHRfRUNIT0AKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKK3BrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACitwbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKK3B5dGhvbmRpciA9IEBweXRob25kaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK2dzdF9pbnNwZWN0X0BHU1RfTUFKT1JNSU5PUkBfU09VUkNFUyA9IGdzdC1pbnNwZWN0LmMgdG9vbHMuaAorZ3N0X2luc3BlY3RfQEdTVF9NQUpPUk1JTk9SQF9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQorZ3N0X2luc3BlY3RfQEdTVF9NQUpPUk1JTk9SQF9MREFERCA9ICQoR1NUX09CSl9MSUJTKQorZ3N0X3R5cGVmaW5kX0BHU1RfTUFKT1JNSU5PUkBfU09VUkNFUyA9IGdzdC10eXBlZmluZC5jIHRvb2xzLmgKK2dzdF90eXBlZmluZF9AR1NUX01BSk9STUlOT1JAX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCitnc3RfdHlwZWZpbmRfQEdTVF9NQUpPUk1JTk9SQF9MREFERCA9ICQoR1NUX09CSl9MSUJTKQorQEdTVF9ESVNBQkxFX1BBUlNFX0ZBTFNFQGdzdF9sYXVuY2hfQEdTVF9NQUpPUk1JTk9SQF9TT1VSQ0VTID0gZ3N0LWxhdW5jaC5jIHRvb2xzLmgKK0BHU1RfRElTQUJMRV9QQVJTRV9GQUxTRUBnc3RfbGF1bmNoX0BHU1RfTUFKT1JNSU5PUkBfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykKK0BHU1RfRElTQUJMRV9QQVJTRV9GQUxTRUBnc3RfbGF1bmNoX0BHU1RfTUFKT1JNSU5PUkBfTERBREQgPSAkKEdTVF9PQkpfTElCUykKK21hbnBhZ2VzID0gZ3N0LWluc3BlY3QtQEdTVF9NQUpPUk1JTk9SQC4xIFwKKwlnc3QtdHlwZWZpbmQtQEdTVF9NQUpPUk1JTk9SQC4xICQoYW1fX2FwcGVuZF8yKQorQ0xFQU5GSUxFUyA9ICQobWFucGFnZXMpICouZ2NubyAqLmdjZGEKK21hbl9NQU5TID0gJChtYW5wYWdlcykKKworIyBkZXZlbG9wZXIgaGVscGVyIHRvb2xzLCBub3QgbWVhbnQgZm9yIGluc3RhbGxhdGlvbgorbm9pbnN0X1NDUklQVFMgPSBnc3QtaW5kZW50Citub2luc3RfSEVBREVSUyA9IHRvb2xzLmgKK0VYVFJBX0RJU1QgPSBcCisJJChub2luc3RfU0NSSVBUUykgXAorCWdzdC1pbnNwZWN0LjEuaW4gXAorCWdzdC1sYXVuY2guMS5pbiBcCisJZ3N0LXR5cGVmaW5kLjEuaW4gXAorCWdzdC1wbG90LXRpbWVsaW5lLnB5CisKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IHRvb2xzL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251IHRvb2xzL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgoraW5zdGFsbC1iaW5QUk9HUkFNUzogJChiaW5fUFJPR1JBTVMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChiaW5kaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChiaW5kaXIpIgorCUBsaXN0PSckKGJpbl9QUk9HUkFNUyknOyB0ZXN0IC1uICIkKGJpbmRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKKwlzZWQgJ3MvJChFWEVFWFQpJCQvLycgfCBcCisJd2hpbGUgcmVhZCBwIHAxOyBkbyBpZiB0ZXN0IC1mICQkcCB8fCB0ZXN0IC1mICQkcDE7IFwKKwkgIHRoZW4gZWNobyAiJCRwIjsgZWNobyAiJCRwIjsgZWxzZSA6OyBmaTsgXAorCWRvbmUgfCBcCisJc2VkIC1lICdwO3MsLiovLCw7bjtoJyAtZSAnc3wuKnwufCcgXAorCSAgICAtZSAncDt4O3MsLiovLCw7cy8kKEVYRUVYVCkkJC8vOyQodHJhbnNmb3JtKTtzLyQkLyQoRVhFRVhUKS8nIHwgXAorCXNlZCAnTjtOO047cyxcbiwgLGcnIHwgXAorCSQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiI7IGRpcnNbIi4iXSA9IDEgfSBcCisJICB7IGQ9JCQzOyBpZiAoZGlyc1tkXSAhPSAxKSB7IHByaW50ICJkIiwgZDsgZGlyc1tkXSA9IDEgfSBcCisJICAgIGlmICgkJDIgPT0gJCQ0KSBmaWxlc1tkXSA9IGZpbGVzW2RdICIgIiAkJDE7IFwKKwkgICAgZWxzZSB7IHByaW50ICJmIiwgJCQzICIvIiAkJDQsICQkMTsgfSB9IFwKKwkgIEVORCB7IGZvciAoZCBpbiBmaWxlcykgcHJpbnQgImYiLCBkLCBmaWxlc1tkXSB9JyB8IFwKKwl3aGlsZSByZWFkIHR5cGUgZGlyIGZpbGVzOyBkbyBcCisJICAgIGlmIHRlc3QgIiQkZGlyIiA9IC47IHRoZW4gZGlyPTsgZWxzZSBkaXI9LyQkZGlyOyBmaTsgXAorCSAgICB0ZXN0IC16ICIkJGZpbGVzIiB8fCB7IFwKKwkgICAgZWNobyAiICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTF9QUk9HUkFNKSAkJGZpbGVzICckKERFU1RESVIpJChiaW5kaXIpJCRkaXInIjsgXAorCSAgICAkKElOU1RBTExfUFJPR1JBTV9FTlYpICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTExfUFJPR1JBTSkgJCRmaWxlcyAiJChERVNURElSKSQoYmluZGlyKSQkZGlyIiB8fCBleGl0ICQkPzsgXAorCSAgICB9IFwKKwk7IGRvbmUKKwordW5pbnN0YWxsLWJpblBST0dSQU1TOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQoYmluX1BST0dSQU1TKSc7IHRlc3QgLW4gIiQoYmluZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgXAorCSAgc2VkIC1lICdoO3MsXi4qLywsO3MvJChFWEVFWFQpJCQvLzskKHRyYW5zZm9ybSknIFwKKwkgICAgICAtZSAncy8kJC8kKEVYRUVYVCkvJyBgOyBcCisJdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKKwllY2hvICIgKCBjZCAnJChERVNURElSKSQoYmluZGlyKScgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisJY2QgIiQoREVTVERJUikkKGJpbmRpcikiICYmIHJtIC1mICQkZmlsZXMKKworY2xlYW4tYmluUFJPR1JBTVM6CisJQGxpc3Q9JyQoYmluX1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKKwl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAorCWxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdAorZ3N0LWluc3BlY3QtQEdTVF9NQUpPUk1JTk9SQCQoRVhFRVhUKTogJChnc3RfaW5zcGVjdF9AR1NUX01BSk9STUlOT1JAX09CSkVDVFMpICQoZ3N0X2luc3BlY3RfQEdTVF9NQUpPUk1JTk9SQF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBnc3QtaW5zcGVjdC1AR1NUX01BSk9STUlOT1JAJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChnc3RfaW5zcGVjdF9AR1NUX01BSk9STUlOT1JAX0xJTkspICQoZ3N0X2luc3BlY3RfQEdTVF9NQUpPUk1JTk9SQF9PQkpFQ1RTKSAkKGdzdF9pbnNwZWN0X0BHU1RfTUFKT1JNSU5PUkBfTERBREQpICQoTElCUykKK2dzdC1sYXVuY2gtQEdTVF9NQUpPUk1JTk9SQCQoRVhFRVhUKTogJChnc3RfbGF1bmNoX0BHU1RfTUFKT1JNSU5PUkBfT0JKRUNUUykgJChnc3RfbGF1bmNoX0BHU1RfTUFKT1JNSU5PUkBfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgZ3N0LWxhdW5jaC1AR1NUX01BSk9STUlOT1JAJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChnc3RfbGF1bmNoX0BHU1RfTUFKT1JNSU5PUkBfTElOSykgJChnc3RfbGF1bmNoX0BHU1RfTUFKT1JNSU5PUkBfT0JKRUNUUykgJChnc3RfbGF1bmNoX0BHU1RfTUFKT1JNSU5PUkBfTERBREQpICQoTElCUykKK2dzdC10eXBlZmluZC1AR1NUX01BSk9STUlOT1JAJChFWEVFWFQpOiAkKGdzdF90eXBlZmluZF9AR1NUX01BSk9STUlOT1JAX09CSkVDVFMpICQoZ3N0X3R5cGVmaW5kX0BHU1RfTUFKT1JNSU5PUkBfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgZ3N0LXR5cGVmaW5kLUBHU1RfTUFKT1JNSU5PUkAkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKGdzdF90eXBlZmluZF9AR1NUX01BSk9STUlOT1JAX0xJTkspICQoZ3N0X3R5cGVmaW5kX0BHU1RfTUFKT1JNSU5PUkBfT0JKRUNUUykgJChnc3RfdHlwZWZpbmRfQEdTVF9NQUpPUk1JTk9SQF9MREFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ3N0X2luc3BlY3RfQEdTVF9NQUpPUk1JTk9SQC1nc3QtaW5zcGVjdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ3N0X2xhdW5jaF9AR1NUX01BSk9STUlOT1JALWdzdC1sYXVuY2guUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dzdF90eXBlZmluZF9AR1NUX01BSk9STUlOT1JALWdzdC10eXBlZmluZC5Qb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCitnc3RfaW5zcGVjdF9AR1NUX01BSk9STUlOT1JALWdzdC1pbnNwZWN0Lm86IGdzdC1pbnNwZWN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnc3RfaW5zcGVjdF9AR1NUX01BSk9STUlOT1JAX0NGTEFHUykgJChDRkxBR1MpIC1NVCBnc3RfaW5zcGVjdF9AR1NUX01BSk9STUlOT1JALWdzdC1pbnNwZWN0Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdF9pbnNwZWN0X0BHU1RfTUFKT1JNSU5PUkAtZ3N0LWluc3BlY3QuVHBvIC1jIC1vIGdzdF9pbnNwZWN0X0BHU1RfTUFKT1JNSU5PUkAtZ3N0LWluc3BlY3QubyBgdGVzdCAtZiAnZ3N0LWluc3BlY3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0LWluc3BlY3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ3N0X2luc3BlY3RfQEdTVF9NQUpPUk1JTk9SQC1nc3QtaW5zcGVjdC5UcG8gJChERVBESVIpL2dzdF9pbnNwZWN0X0BHU1RfTUFKT1JNSU5PUkAtZ3N0LWluc3BlY3QuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3QtaW5zcGVjdC5jJyBvYmplY3Q9J2dzdF9pbnNwZWN0X0BHU1RfTUFKT1JNSU5PUkAtZ3N0LWluc3BlY3QubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ3N0X2luc3BlY3RfQEdTVF9NQUpPUk1JTk9SQF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RfaW5zcGVjdF9AR1NUX01BSk9STUlOT1JALWdzdC1pbnNwZWN0Lm8gYHRlc3QgLWYgJ2dzdC1pbnNwZWN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC1pbnNwZWN0LmMKKworZ3N0X2luc3BlY3RfQEdTVF9NQUpPUk1JTk9SQC1nc3QtaW5zcGVjdC5vYmo6IGdzdC1pbnNwZWN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnc3RfaW5zcGVjdF9AR1NUX01BSk9STUlOT1JAX0NGTEFHUykgJChDRkxBR1MpIC1NVCBnc3RfaW5zcGVjdF9AR1NUX01BSk9STUlOT1JALWdzdC1pbnNwZWN0Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0X2luc3BlY3RfQEdTVF9NQUpPUk1JTk9SQC1nc3QtaW5zcGVjdC5UcG8gLWMgLW8gZ3N0X2luc3BlY3RfQEdTVF9NQUpPUk1JTk9SQC1nc3QtaW5zcGVjdC5vYmogYGlmIHRlc3QgLWYgJ2dzdC1pbnNwZWN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0LWluc3BlY3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0LWluc3BlY3QuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ3N0X2luc3BlY3RfQEdTVF9NQUpPUk1JTk9SQC1nc3QtaW5zcGVjdC5UcG8gJChERVBESVIpL2dzdF9pbnNwZWN0X0BHU1RfTUFKT1JNSU5PUkAtZ3N0LWluc3BlY3QuUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3QtaW5zcGVjdC5jJyBvYmplY3Q9J2dzdF9pbnNwZWN0X0BHU1RfTUFKT1JNSU5PUkAtZ3N0LWluc3BlY3Qub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnc3RfaW5zcGVjdF9AR1NUX01BSk9STUlOT1JAX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdF9pbnNwZWN0X0BHU1RfTUFKT1JNSU5PUkAtZ3N0LWluc3BlY3Qub2JqIGBpZiB0ZXN0IC1mICdnc3QtaW5zcGVjdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC1pbnNwZWN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC1pbnNwZWN0LmMnOyBmaWAKKworZ3N0X2xhdW5jaF9AR1NUX01BSk9STUlOT1JALWdzdC1sYXVuY2gubzogZ3N0LWxhdW5jaC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ3N0X2xhdW5jaF9AR1NUX01BSk9STUlOT1JAX0NGTEFHUykgJChDRkxBR1MpIC1NVCBnc3RfbGF1bmNoX0BHU1RfTUFKT1JNSU5PUkAtZ3N0LWxhdW5jaC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9nc3RfbGF1bmNoX0BHU1RfTUFKT1JNSU5PUkAtZ3N0LWxhdW5jaC5UcG8gLWMgLW8gZ3N0X2xhdW5jaF9AR1NUX01BSk9STUlOT1JALWdzdC1sYXVuY2gubyBgdGVzdCAtZiAnZ3N0LWxhdW5jaC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QtbGF1bmNoLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdF9sYXVuY2hfQEdTVF9NQUpPUk1JTk9SQC1nc3QtbGF1bmNoLlRwbyAkKERFUERJUikvZ3N0X2xhdW5jaF9AR1NUX01BSk9STUlOT1JALWdzdC1sYXVuY2guUG8KK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdnc3QtbGF1bmNoLmMnIG9iamVjdD0nZ3N0X2xhdW5jaF9AR1NUX01BSk9STUlOT1JALWdzdC1sYXVuY2gubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ3N0X2xhdW5jaF9AR1NUX01BSk9STUlOT1JAX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdF9sYXVuY2hfQEdTVF9NQUpPUk1JTk9SQC1nc3QtbGF1bmNoLm8gYHRlc3QgLWYgJ2dzdC1sYXVuY2guYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0LWxhdW5jaC5jCisKK2dzdF9sYXVuY2hfQEdTVF9NQUpPUk1JTk9SQC1nc3QtbGF1bmNoLm9iajogZ3N0LWxhdW5jaC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ3N0X2xhdW5jaF9AR1NUX01BSk9STUlOT1JAX0NGTEFHUykgJChDRkxBR1MpIC1NVCBnc3RfbGF1bmNoX0BHU1RfTUFKT1JNSU5PUkAtZ3N0LWxhdW5jaC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdF9sYXVuY2hfQEdTVF9NQUpPUk1JTk9SQC1nc3QtbGF1bmNoLlRwbyAtYyAtbyBnc3RfbGF1bmNoX0BHU1RfTUFKT1JNSU5PUkAtZ3N0LWxhdW5jaC5vYmogYGlmIHRlc3QgLWYgJ2dzdC1sYXVuY2guYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QtbGF1bmNoLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC1sYXVuY2guYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ3N0X2xhdW5jaF9AR1NUX01BSk9STUlOT1JALWdzdC1sYXVuY2guVHBvICQoREVQRElSKS9nc3RfbGF1bmNoX0BHU1RfTUFKT1JNSU5PUkAtZ3N0LWxhdW5jaC5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC1sYXVuY2guYycgb2JqZWN0PSdnc3RfbGF1bmNoX0BHU1RfTUFKT1JNSU5PUkAtZ3N0LWxhdW5jaC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdzdF9sYXVuY2hfQEdTVF9NQUpPUk1JTk9SQF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RfbGF1bmNoX0BHU1RfTUFKT1JNSU5PUkAtZ3N0LWxhdW5jaC5vYmogYGlmIHRlc3QgLWYgJ2dzdC1sYXVuY2guYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QtbGF1bmNoLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC1sYXVuY2guYyc7IGZpYAorCitnc3RfdHlwZWZpbmRfQEdTVF9NQUpPUk1JTk9SQC1nc3QtdHlwZWZpbmQubzogZ3N0LXR5cGVmaW5kLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnc3RfdHlwZWZpbmRfQEdTVF9NQUpPUk1JTk9SQF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0X3R5cGVmaW5kX0BHU1RfTUFKT1JNSU5PUkAtZ3N0LXR5cGVmaW5kLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdF90eXBlZmluZF9AR1NUX01BSk9STUlOT1JALWdzdC10eXBlZmluZC5UcG8gLWMgLW8gZ3N0X3R5cGVmaW5kX0BHU1RfTUFKT1JNSU5PUkAtZ3N0LXR5cGVmaW5kLm8gYHRlc3QgLWYgJ2dzdC10eXBlZmluZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QtdHlwZWZpbmQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ3N0X3R5cGVmaW5kX0BHU1RfTUFKT1JNSU5PUkAtZ3N0LXR5cGVmaW5kLlRwbyAkKERFUERJUikvZ3N0X3R5cGVmaW5kX0BHU1RfTUFKT1JNSU5PUkAtZ3N0LXR5cGVmaW5kLlBvCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nZ3N0LXR5cGVmaW5kLmMnIG9iamVjdD0nZ3N0X3R5cGVmaW5kX0BHU1RfTUFKT1JNSU5PUkAtZ3N0LXR5cGVmaW5kLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdzdF90eXBlZmluZF9AR1NUX01BSk9STUlOT1JAX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdF90eXBlZmluZF9AR1NUX01BSk9STUlOT1JALWdzdC10eXBlZmluZC5vIGB0ZXN0IC1mICdnc3QtdHlwZWZpbmQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0LXR5cGVmaW5kLmMKKworZ3N0X3R5cGVmaW5kX0BHU1RfTUFKT1JNSU5PUkAtZ3N0LXR5cGVmaW5kLm9iajogZ3N0LXR5cGVmaW5kLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnc3RfdHlwZWZpbmRfQEdTVF9NQUpPUk1JTk9SQF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0X3R5cGVmaW5kX0BHU1RfTUFKT1JNSU5PUkAtZ3N0LXR5cGVmaW5kLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0X3R5cGVmaW5kX0BHU1RfTUFKT1JNSU5PUkAtZ3N0LXR5cGVmaW5kLlRwbyAtYyAtbyBnc3RfdHlwZWZpbmRfQEdTVF9NQUpPUk1JTk9SQC1nc3QtdHlwZWZpbmQub2JqIGBpZiB0ZXN0IC1mICdnc3QtdHlwZWZpbmQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QtdHlwZWZpbmQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0LXR5cGVmaW5kLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdF90eXBlZmluZF9AR1NUX01BSk9STUlOT1JALWdzdC10eXBlZmluZC5UcG8gJChERVBESVIpL2dzdF90eXBlZmluZF9AR1NUX01BSk9STUlOT1JALWdzdC10eXBlZmluZC5QbworQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQykgQEFNX0JBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9J2dzdC10eXBlZmluZC5jJyBvYmplY3Q9J2dzdF90eXBlZmluZF9AR1NUX01BSk9STUlOT1JALWdzdC10eXBlZmluZC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdzdF90eXBlZmluZF9AR1NUX01BSk9STUlOT1JAX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdF90eXBlZmluZF9AR1NUX01BSk9STUlOT1JALWdzdC10eXBlZmluZC5vYmogYGlmIHRlc3QgLWYgJ2dzdC10eXBlZmluZC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC10eXBlZmluZC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QtdHlwZWZpbmQuYyc7IGZpYAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworaW5zdGFsbC1tYW4xOiAkKG1hbl9NQU5TKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQobWFuMWRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKG1hbjFkaXIpIgorCUBsaXN0PScnOyB0ZXN0IC1uICIkKG1hbjFkaXIpIiB8fCBleGl0IDA7IFwKKwl7IGZvciBpIGluICQkbGlzdDsgZG8gZWNobyAiJCRpIjsgZG9uZTsgXAorCWwyPSckKG1hbl9NQU5TKSc7IGZvciBpIGluICQkbDI7IGRvIGVjaG8gIiQkaSI7IGRvbmUgfCBcCisJICBzZWQgLW4gJy9cLjFbYS16XSokJC9wJzsgXAorCX0gfCB3aGlsZSByZWFkIHA7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgZWNobyAiJCRwIjsgXAorCWRvbmUgfCBcCisJc2VkIC1lICduO3MsLiovLCw7cDtoO3MsLipcLiwsO3MsXlteMV1bMC05YS16XSokJCwxLDt4JyBcCisJICAgICAgLWUgJ3MsXC5bMC05YS16XSokJCwsOyQodHJhbnNmb3JtKTtHO3MsXG4sLiwnIHwgXAorCXNlZCAnTjtOO3MsXG4sICxnJyB8IHsgXAorCWxpc3Q9OyB3aGlsZSByZWFkIGZpbGUgYmFzZSBpbnN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJGJhc2UiID0gIiQkaW5zdCI7IHRoZW4gbGlzdD0iJCRsaXN0ICQkZmlsZSI7IGVsc2UgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICckJGZpbGUnICckKERFU1RESVIpJChtYW4xZGlyKS8kJGluc3QnIjsgXAorCSAgICAkKElOU1RBTExfREFUQSkgIiQkZmlsZSIgIiQoREVTVERJUikkKG1hbjFkaXIpLyQkaW5zdCIgfHwgZXhpdCAkJD87IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCWZvciBpIGluICQkbGlzdDsgZG8gZWNobyAiJCRpIjsgZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgdGVzdCAteiAiJCRmaWxlcyIgfHwgeyBcCisJICAgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQobWFuMWRpciknIjsgXAorCSAgICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQobWFuMWRpcikiIHx8IGV4aXQgJCQ/OyB9OyBcCisJZG9uZTsgfQorCit1bmluc3RhbGwtbWFuMToKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PScnOyB0ZXN0IC1uICIkKG1hbjFkaXIpIiB8fCBleGl0IDA7IFwKKwlmaWxlcz1geyBmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkaSI7IGRvbmU7IFwKKwlsMj0nJChtYW5fTUFOUyknOyBmb3IgaSBpbiAkJGwyOyBkbyBlY2hvICIkJGkiOyBkb25lIHwgXAorCSAgc2VkIC1uICcvXC4xW2Etel0qJCQvcCc7IFwKKwl9IHwgc2VkIC1lICdzLC4qLywsO2g7cywuKlwuLCw7cyxeW14xXVswLTlhLXpdKiQkLDEsO3gnIFwKKwkgICAgICAtZSAncyxcLlswLTlhLXpdKiQkLCw7JCh0cmFuc2Zvcm0pO0c7cyxcbiwuLCdgOyBcCisJdGVzdCAteiAiJCRmaWxlcyIgfHwgeyBcCisJICBlY2hvICIgKCBjZCAnJChERVNURElSKSQobWFuMWRpciknICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorCSAgY2QgIiQoREVTVERJUikkKG1hbjFkaXIpIiAmJiBybSAtZiAkJGZpbGVzOyB9CisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJc2V0IHg7IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBsaXN0PSckKE1BTlMpJzsgaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCisJICBsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICAgIGlmIHRlc3QgLWYgIiQkZCQkcCI7IHRoZW4gZWNobyAiJCRkJCRwIjsgZWxzZSA6OyBmaTsgZG9uZWA7IFwKKwkgIGlmIHRlc3QgLW4gIiQkbGlzdCIgJiYgXAorCSAgICBncmVwICdhYiBoZWxwMm1hbiBpcyByZXF1aXJlZCB0byBnZW5lcmF0ZSB0aGlzIHBhZ2UnICQkbGlzdCA+L2Rldi9udWxsOyB0aGVuIFwKKwkgICAgZWNobyAiZXJyb3I6IGZvdW5kIG1hbiBwYWdlcyBjb250YWluaW5nIHRoZSBcYG1pc3NpbmcgaGVscDJtYW4nIHJlcGxhY2VtZW50IHRleHQ6IiA+JjI7IFwKKwkgICAgZ3JlcCAtbCAnYWIgaGVscDJtYW4gaXMgcmVxdWlyZWQgdG8gZ2VuZXJhdGUgdGhpcyBwYWdlJyAkJGxpc3QgfCBzZWQgJ3MvXi8gICAgICAgICAvJyA+JjI7IFwKKwkgICAgZWNobyAiICAgICAgIHRvIGZpeCB0aGVtLCBpbnN0YWxsIGhlbHAybWFuLCByZW1vdmUgYW5kIHJlZ2VuZXJhdGUgdGhlIG1hbiBwYWdlczsiID4mMjsgXAorCSAgICBlY2hvICIgICAgICAgdHlwaWNhbGx5IFxgbWFrZSBtYWludGFpbmVyLWNsZWFuJyB3aWxsIHJlbW92ZSB0aGVtIiA+JjI7IFwKKwkgICAgZXhpdCAxOyBcCisJICBlbHNlIDo7IGZpOyBcCisJZWxzZSA6OyBmaQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoUFJPR1JBTVMpICQoU0NSSVBUUykgJChNQU5TKSAkKEhFQURFUlMpCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChiaW5kaXIpIiAiJChERVNURElSKSQobWFuMWRpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1iaW5QUk9HUkFNUyBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtbWFuCisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLWJpblBST0dSQU1TCisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjogaW5zdGFsbC1tYW4xCisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1iaW5QUk9HUkFNUyB1bmluc3RhbGwtbWFuCisKK3VuaW5zdGFsbC1tYW46IHVuaW5zdGFsbC1tYW4xCisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWJpblBST0dSQU1TIFwKKwljbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY3RhZ3MgZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIFwKKwlkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBcCisJZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKKwlpbnN0YWxsLWJpblBST0dSQU1TIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1tYW4xIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgXAorCWluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIFwKKwlpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB1bmluc3RhbGwgXAorCXVuaW5zdGFsbC1hbSB1bmluc3RhbGwtYmluUFJPR1JBTVMgdW5pbnN0YWxsLW1hbiBcCisJdW5pbnN0YWxsLW1hbjEKKworCitBbmRyb2lkLm1rOiBNYWtlZmlsZS5hbQorCWFuZHJvZ2VuaXplciAtOlBST0pFQ1QgZ3N0cmVhbWVyIFwKKwkgLTpSRUxfVE9QICQodG9wX3NyY2RpcikgLTpBQlNfVE9QICQoYWJzX3RvcF9zcmNkaXIpIFwKKwkgLTpFWEVDVVRBQkxFIGdzdC1pbnNwZWN0LUBHU1RfTUFKT1JNSU5PUkAgLTpUQUdTIGVuZyBkZWJ1ZyBcCisJIC06U09VUkNFUyAkKGdzdF9pbnNwZWN0X0BHU1RfTUFKT1JNSU5PUkBfU09VUkNFUykgXAorCSAtOkNGTEFHUyAkKERFRlMpICQoZ3N0X2luc3BlY3RfQEdTVF9NQUpPUk1JTk9SQF9DRkxBR1MpIFwKKwkgLTpMREZMQUdTICQoZ3N0X2luc3BlY3RfQEdTVF9NQUpPUk1JTk9SQF9MREFERCkgXAorCSAtOlBBU1NUSFJPVUdIIExPQ0FMX0FSTV9NT0RFOj1hcm0gXAorCSAtOkVYRUNVVEFCTEUgZ3N0LWxhdW5jaC1AR1NUX01BSk9STUlOT1JAIC06VEFHUyBlbmcgZGVidWcgXAorCSAtOlNPVVJDRVMgJChnc3RfbGF1bmNoX0BHU1RfTUFKT1JNSU5PUkBfU09VUkNFUykgXAorCSAtOkNGTEFHUyAkKERFRlMpICQoZ3N0X2xhdW5jaF9AR1NUX01BSk9STUlOT1JAX0NGTEFHUykgXAorCSAtOkxERkxBR1MgJChnc3RfbGF1bmNoX0BHU1RfTUFKT1JNSU5PUkBfTERBREQpIFwKKwkgLTpQQVNTVEhST1VHSCBMT0NBTF9BUk1fTU9ERTo9YXJtIFwKKwk+ICRACisKKyUtQEdTVF9NQUpPUk1JTk9SQC4xOiAlLjEuaW4KKwkkKEFNX1ZfR0VOKXNlZCBcCisJCS1lIHMsZ3N0LWluc3BlY3QsZ3N0LWluc3BlY3QtQEdTVF9NQUpPUk1JTk9SQCxnIFwKKwkJLWUgcyxnc3QtbGF1bmNoLGdzdC1sYXVuY2gtQEdTVF9NQUpPUk1JTk9SQCxnIFwKKwkJLWUgcyxnc3QtdHlwZWZpbmQsZ3N0LXR5cGVmaW5kLUBHU1RfTUFKT1JNSU5PUkAsZyBcCisJCS1lIHMsR1NUX01BSk9STUlOT1IsQEdTVF9NQUpPUk1JTk9SQCxnIFwKKwkJJDwgPiRACisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3Rvb2xzL2dzdC1pbmRlbnQgYi90b29scy9nc3QtaW5kZW50Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkzMDllZDMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9nc3QtaW5kZW50CkBAIC0wLDAgKzEsNDAgQEAKKyMhL2Jpbi9zaAorCit2ZXJzaW9uPWBnbnVpbmRlbnQgLS12ZXJzaW9uIDI+L2Rldi9udWxsYAoraWYgdGVzdCAieCR2ZXJzaW9uIiA9ICJ4IjsgdGhlbgorICB2ZXJzaW9uPWBpbmRlbnQgLS12ZXJzaW9uIDI+L2Rldi9udWxsYAorICBpZiB0ZXN0ICJ4JHZlcnNpb24iID0gIngiOyB0aGVuCisgICAgZWNobyAiR1N0cmVhbWVyIGdpdCBwcmUtY29tbWl0IGhvb2s6IgorICAgIGVjaG8gIkRpZCBub3QgZmluZCBHTlUgaW5kZW50LCBwbGVhc2UgaW5zdGFsbCBpdCBiZWZvcmUgY29udGludWluZy4iCisgICAgZXhpdCAxCisgIGZpCisgIElOREVOVD1pbmRlbnQKK2Vsc2UKKyAgSU5ERU5UPWdudWluZGVudAorZmkKKworY2FzZSBgJElOREVOVCAtLXZlcnNpb25gIGluCisgIEdOVSopCisgICAgICA7OworICBkZWZhdWx0KQorICAgICAgZWNobyAiRGlkIG5vdCBmaW5kIEdOVSBpbmRlbnQsIHBsZWFzZSBpbnN0YWxsIGl0IGJlZm9yZSBjb250aW51aW5nLiIKKyAgICAgIGVjaG8gIihGb3VuZCAkSU5ERU5ULCBidXQgaXQgZG9lc24ndCBzZWVtIHRvIGJlIEdOVSBpbmRlbnQpIgorICAgICAgZXhpdCAxCisgICAgICA7OworZXNhYworCiskSU5ERU5UIFwKKyAgLS1icmFjZXMtb24taWYtbGluZSBcCisgIC0tY2FzZS1icmFjZS1pbmRlbnRhdGlvbjAgXAorICAtLWNhc2UtaW5kZW50YXRpb24yIFwKKyAgLS1icmFjZXMtYWZ0ZXItc3RydWN0LWRlY2wtbGluZSBcCisgIC0tbGluZS1sZW5ndGg4MCBcCisgIC0tbm8tdGFicyBcCisgIC0tY3VkZGxlLWVsc2UgXAorICAtLWRvbnQtbGluZS11cC1wYXJlbnRoZXNlcyBcCisgIC0tY29udGludWF0aW9uLWluZGVudGF0aW9uNCBcCisgIC0taG9ub3VyLW5ld2xpbmVzIFwKKyAgLS10YWItc2l6ZTggXAorICAtLWluZGVudC1sZXZlbDIgXAorICAtLWxlYXZlLXByZXByb2Nlc3Nvci1zcGFjZSBcCisgICQqCmRpZmYgLS1naXQgYS90b29scy9nc3QtaW5zcGVjdC4xLmluIGIvdG9vbHMvZ3N0LWluc3BlY3QuMS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmE5NzY2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvZ3N0LWluc3BlY3QuMS5pbgpAQCAtMCwwICsxLDU4IEBACisuVEggR1N0cmVhbWVyIDEgIkRlY2VtYmVyIDIwMDUiCisuU0ggIk5BTUUiCitnc3RcLWluc3BlY3QgLSBwcmludCBpbmZvIGFib3V0IGEgR1N0cmVhbWVyIHBsdWdpbiBvciBlbGVtZW50CisuU0ggIlNZTk9QU0lTIgorLkIgIGdzdFwtaW5zcGVjdCBbT1BUSU9OLi4uXSBbUExVR0lOfEVMRU1FTlRdCisuU0ggIkRFU0NSSVBUSU9OIgorLlBQCitcZklnc3RcLWluc3BlY3RcZlAgaXMgYSB0b29sIHRoYXQgcHJpbnRzIG91dCBpbmZvcm1hdGlvbiBvbgorYXZhaWxhYmxlIFxmSUdTdHJlYW1lclxmUCBwbHVnaW5zLCBpbmZvcm1hdGlvbiBhYm91dCBhIHBhcnRpY3VsYXIKK3BsdWdpbiwgb3IgaW5mb3JtYXRpb24gYWJvdXQgYSBwYXJ0aWN1bGFyIGVsZW1lbnQuICBXaGVuIGV4ZWN1dGVkCit3aXRoIG5vIFBMVUdJTiBvciBFTEVNRU5UIGFyZ3VtZW50LCBcZklnc3RcLWluc3BlY3RcZlAgd2lsbCBwcmludAorYSBsaXN0IG9mIGFsbCBwbHVnaW5zIGFuZCBlbGVtZW50cyB0b2dldGhlciB3aXRoIGEgc3VtbWFyeS4KK1doZW4gZXhlY3V0ZWQgd2l0aCBhIFBMVUdJTiBvciBFTEVNRU5UIGFyZ3VtZW50LAorXGZJZ3N0XC1pbnNwZWN0XGZQIHdpbGwgcHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgdGhhdCBwbHVnLWluIG9yCitlbGVtZW50LgorLgorLlNIICJPUFRJT05TIgorLmwKK1xmSWdzdFwtaW5zcGVjdFxmUCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIGFuZCBvcHRpb25zOgorLlRQIDgKKy5CICBQTFVHSU4KK05hbWUgb2YgYSBwbHVnaW4KKy5UUCA4CisuQiAgRUxFTUVOVAorTmFtZSBvZiBhbiBlbGVtZW50CisuVFAgOAorLkIgIFwtXC1oZWxwCitQcmludCBoZWxwIHN5bm9wc2lzIGFuZCBhdmFpbGFibGUgRkxBR1MKKy5UUCA4CisuQiAgXC1cLWdzdFwtaW5mb1wtbWFzaz1GTEFHUworXGZJR1N0cmVhbWVyXGZQIGluZm8gZmxhZ3MgdG8gc2V0IChsaXN0IHdpdGggXC1cLWhlbHApCisuVFAgOAorLkIgIFwtYSwgXC1cLXByaW50XC1hbGwKK1ByaW50IGFsbCBwbHVnaW5zIGFuZCBlbGVtZW50cworLlRQIDgKKy5CICBcLVwtcHJpbnRcLXBsdWdpblwtYXV0b1wtaW5zdGFsbFwtaW5mbworUHJpbnQgYSBtYWNoaW5lLXBhcnNhYmxlIGxpc3Qgb2YgZmVhdHVyZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4gcHJvdmlkZXMuCitVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsIGF1dG9tYXRpYyBwbHVnaW4gaW5zdGFsbGF0aW9uIG1lY2hhbmlzbXMuCisuVFAgOAorLkIgIFwtXC1nc3RcLWRlYnVnXC1tYXNrPUZMQUdTCitcZklHU3RyZWFtZXJcZlAgZGVidWdnaW5nIGZsYWdzIHRvIHNldCAobGlzdCB3aXRoIFwtXC1oZWxwKQorLlRQIDgKKy5CICBcLVwtZ3N0XC1tYXNrPUZMQUdTCitcZklHU3RyZWFtZXJcZlAgaW5mbyBhbmQgZGVidWdnaW5nIGZsYWdzIHRvIHNldCAobGlzdCB3aXRoIFwtXC1oZWxwKQorLlRQIDgKKy5CICBcLVwtZ3N0XC1wbHVnaW5cLXNwZXcKK1xmSUdTdHJlYW1lclxmUCBpbmZvIGZsYWdzIHRvIHNldAorRW5hYmxlIHByaW50b3V0IG9mIGVycm9ycyB3aGlsZSBsb2FkaW5nIFxmSUdTdHJlYW1lclxmUCBwbHVnaW5zCisuVFAgOAorLkIgIFwtXC1nc3RcLXBsdWdpblwtcGF0aD1QQVRICitBZGQgZGlyZWN0b3JpZXMgc2VwYXJhdGVkIHdpdGggJzonIHRvIHRoZSBwbHVnaW4gc2VhcmNoIHBhdGgKKy4KKy5TSCAiU0VFIEFMU08iCisuQlIgZ3N0XC1mZWVkYmFjayAoMSksCisuQlIgZ3N0XC1sYXVuY2ggKDEpLAorLkJSIGdzdFwtdHlwZWZpbmQgKDEpCisuU0ggIkFVVEhPUiIKK1RoZSBHU3RyZWFtZXIgdGVhbSBhdCBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy8KZGlmZiAtLWdpdCBhL3Rvb2xzL2dzdC1pbnNwZWN0LmMgYi90b29scy9nc3QtaW5zcGVjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmOTQ3ZWQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9nc3QtaW5zcGVjdC5jCkBAIC0wLDAgKzEsMTY3MSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KKyAqICAgICAgICAgICAgICAgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKyAqCisgKiBnc3QtaW5zcGVjdC5jOiB0b29sIHRvIGluc3BlY3QgdGhlIEdTdHJlYW1lciByZWdpc3RyeQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8Z3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5oPgorCisjaW5jbHVkZSAidG9vbHMuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGxvY2FsZS5oPgorI2luY2x1ZGUgPGdsaWIvZ3ByaW50Zi5oPgorCitzdGF0aWMgY2hhciAqX25hbWUgPSBOVUxMOworCitzdGF0aWMgaW50IHByaW50X2VsZW1lbnRfaW5mbyAoR3N0RWxlbWVudEZhY3RvcnkgKiBmYWN0b3J5LAorICAgIGdib29sZWFuIHByaW50X25hbWVzKTsKKworc3RhdGljIHZvaWQKK25fcHJpbnQgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ3M7CisKKyAgaWYgKF9uYW1lKQorICAgIGdfcHJpbnQgKCIlcyIsIF9uYW1lKTsKKworICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKyAgZ192cHJpbnRmIChmb3JtYXQsIGFyZ3MpOworICB2YV9lbmQgKGFyZ3MpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3ByaW50X2ZpZWxkIChHUXVhcmsgZmllbGQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBncG9pbnRlciBwZngpCit7CisgIGdjaGFyICpzdHIgPSBnc3RfdmFsdWVfc2VyaWFsaXplICh2YWx1ZSk7CisKKyAgbl9wcmludCAoIiVzICAlMTVzOiAlc1xuIiwgKGdjaGFyICopIHBmeCwgZ19xdWFya190b19zdHJpbmcgKGZpZWxkKSwgc3RyKTsKKyAgZ19mcmVlIChzdHIpOworICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQKK3ByaW50X2NhcHMgKGNvbnN0IEdzdENhcHMgKiBjYXBzLCBjb25zdCBnY2hhciAqIHBmeCkKK3sKKyAgZ3VpbnQgaTsKKworICBnX3JldHVybl9pZl9mYWlsIChjYXBzICE9IE5VTEwpOworCisgIGlmIChnc3RfY2Fwc19pc19hbnkgKGNhcHMpKSB7CisgICAgbl9wcmludCAoIiVzQU5ZXG4iLCBwZngpOworICAgIHJldHVybjsKKyAgfQorICBpZiAoZ3N0X2NhcHNfaXNfZW1wdHkgKGNhcHMpKSB7CisgICAgbl9wcmludCAoIiVzRU1QVFlcbiIsIHBmeCk7CisgICAgcmV0dXJuOworICB9CisKKyAgZm9yIChpID0gMDsgaSA8IGdzdF9jYXBzX2dldF9zaXplIChjYXBzKTsgaSsrKSB7CisgICAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCBpKTsKKworICAgIG5fcHJpbnQgKCIlcyVzXG4iLCBwZngsIGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKHN0cnVjdHVyZSkpOworICAgIGdzdF9zdHJ1Y3R1cmVfZm9yZWFjaCAoc3RydWN0dXJlLCBwcmludF9maWVsZCwgKGdwb2ludGVyKSBwZngpOworICB9Cit9CisKKyNpZiAwCitzdGF0aWMgdm9pZAorcHJpbnRfZm9ybWF0cyAoY29uc3QgR3N0Rm9ybWF0ICogZm9ybWF0cykKK3sKKyAgd2hpbGUgKGZvcm1hdHMgJiYgKmZvcm1hdHMpIHsKKyAgICBjb25zdCBHc3RGb3JtYXREZWZpbml0aW9uICpkZWZpbml0aW9uOworCisgICAgZGVmaW5pdGlvbiA9IGdzdF9mb3JtYXRfZ2V0X2RldGFpbHMgKCpmb3JtYXRzKTsKKyAgICBpZiAoZGVmaW5pdGlvbikKKyAgICAgIG5fcHJpbnQgKCJcdFx0KCVkKTpcdCVzICglcylcbiIsICpmb3JtYXRzLAorICAgICAgICAgIGRlZmluaXRpb24tPm5pY2ssIGRlZmluaXRpb24tPmRlc2NyaXB0aW9uKTsKKyAgICBlbHNlCisgICAgICBuX3ByaW50ICgiXHRcdCglZCk6XHRVbmtub3duIGZvcm1hdFxuIiwgKmZvcm1hdHMpOworCisgICAgZm9ybWF0cysrOworICB9Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQKK3ByaW50X3F1ZXJ5X3R5cGVzIChjb25zdCBHc3RRdWVyeVR5cGUgKiB0eXBlcykKK3sKKyAgd2hpbGUgKHR5cGVzICYmICp0eXBlcykgeworICAgIGNvbnN0IEdzdFF1ZXJ5VHlwZURlZmluaXRpb24gKmRlZmluaXRpb247CisKKyAgICBkZWZpbml0aW9uID0gZ3N0X3F1ZXJ5X3R5cGVfZ2V0X2RldGFpbHMgKCp0eXBlcyk7CisgICAgaWYgKGRlZmluaXRpb24pCisgICAgICBuX3ByaW50ICgiXHRcdCglZCk6XHQlcyAoJXMpXG4iLCAqdHlwZXMsCisgICAgICAgICAgZGVmaW5pdGlvbi0+bmljaywgZGVmaW5pdGlvbi0+ZGVzY3JpcHRpb24pOworICAgIGVsc2UKKyAgICAgIG5fcHJpbnQgKCJcdFx0KCVkKTpcdFVua25vd24gcXVlcnkgZm9ybWF0XG4iLCAqdHlwZXMpOworCisgICAgdHlwZXMrKzsKKyAgfQorfQorCisjaWYgMAorc3RhdGljIHZvaWQKK3ByaW50X2V2ZW50X21hc2tzIChjb25zdCBHc3RFdmVudE1hc2sgKiBtYXNrcykKK3sKKyAgR1R5cGUgZXZlbnRfdHlwZTsKKyAgR0VudW1DbGFzcyAqa2xhc3M7CisgIEdUeXBlIGV2ZW50X2ZsYWdzOworICBHRmxhZ3NDbGFzcyAqZmxhZ3NfY2xhc3MgPSBOVUxMOworCisgIGV2ZW50X3R5cGUgPSBnc3RfZXZlbnRfdHlwZV9nZXRfdHlwZSAoKTsKKyAga2xhc3MgPSAoR0VudW1DbGFzcyAqKSBnX3R5cGVfY2xhc3NfcmVmIChldmVudF90eXBlKTsKKworICB3aGlsZSAobWFza3MgJiYgbWFza3MtPnR5cGUpIHsKKyAgICBHRW51bVZhbHVlICp2YWx1ZTsKKyAgICBnaW50IGZsYWdzID0gMCwgaW5kZXggPSAwOworCisgICAgc3dpdGNoIChtYXNrcy0+dHlwZSkgeworICAgICAgY2FzZSBHU1RfRVZFTlRfU0VFSzoKKyAgICAgICAgZmxhZ3MgPSBtYXNrcy0+ZmxhZ3M7CisgICAgICAgIGV2ZW50X2ZsYWdzID0gZ3N0X3NlZWtfdHlwZV9nZXRfdHlwZSAoKTsKKyAgICAgICAgZmxhZ3NfY2xhc3MgPSAoR0ZsYWdzQ2xhc3MgKikgZ190eXBlX2NsYXNzX3JlZiAoZXZlbnRfZmxhZ3MpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHZhbHVlID0gZ19lbnVtX2dldF92YWx1ZSAoa2xhc3MsIG1hc2tzLT50eXBlKTsKKyAgICBnX3ByaW50ICgiXHRcdCVzICIsIHZhbHVlLT52YWx1ZV9uaWNrKTsKKworICAgIHdoaWxlIChmbGFncykgeworICAgICAgR0ZsYWdzVmFsdWUgKnZhbHVlOworCisgICAgICBpZiAoZmxhZ3MgJiAxKSB7CisgICAgICAgIHZhbHVlID0gZ19mbGFnc19nZXRfZmlyc3RfdmFsdWUgKGZsYWdzX2NsYXNzLCAxIDw8IGluZGV4KTsKKworICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgZ19wcmludCAoInwgJXMgIiwgdmFsdWUtPnZhbHVlX25pY2spOworICAgICAgICBlbHNlCisgICAgICAgICAgZ19wcmludCAoInwgPyAiKTsKKyAgICAgIH0KKyAgICAgIGZsYWdzID4+PSAxOworICAgICAgaW5kZXgrKzsKKyAgICB9CisgICAgZ19wcmludCAoIlxuIik7CisKKyAgICBtYXNrcysrOworICB9Cit9CisjZW5kaWYKKworc3RhdGljIGNvbnN0IGNoYXIgKgorZ2V0X3JhbmtfbmFtZSAoY2hhciAqcywgZ2ludCByYW5rKQoreworICBzdGF0aWMgY29uc3QgaW50IHJhbmtzWzRdID0geworICAgIEdTVF9SQU5LX05PTkUsIEdTVF9SQU5LX01BUkdJTkFMLCBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9SQU5LX1BSSU1BUlkKKyAgfTsKKyAgc3RhdGljIGNvbnN0IGNoYXIgKnJhbmtfbmFtZXNbNF0gPSB7ICJub25lIiwgIm1hcmdpbmFsIiwgInNlY29uZGFyeSIsCisgICAgInByaW1hcnkiCisgIH07CisgIGludCBpOworICBpbnQgYmVzdF9pOworCisgIGJlc3RfaSA9IDA7CisgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICBpZiAocmFuayA9PSByYW5rc1tpXSkKKyAgICAgIHJldHVybiByYW5rX25hbWVzW2ldOworICAgIGlmIChhYnMgKHJhbmsgLSByYW5rc1tpXSkgPCBhYnMgKHJhbmsgLSByYW5rc1tiZXN0X2ldKSkgeworICAgICAgYmVzdF9pID0gaTsKKyAgICB9CisgIH0KKworICBzcHJpbnRmIChzLCAiJXMgJWMgJWQiLCByYW5rX25hbWVzW2Jlc3RfaV0sCisgICAgICAocmFuayAtIHJhbmtzW2Jlc3RfaV0gPiAwKSA/ICcrJyA6ICctJywgYWJzIChyYW5rc1tiZXN0X2ldIC0gcmFuaykpOworCisgIHJldHVybiBzOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3ByaW50X2ZhY3RvcnlfZGV0YWlsc19tZXRhZGF0YSAoR1F1YXJrIGZpZWxkX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwKKyAgICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIGdjaGFyICp2YWwgPSBnX3N0cmR1cF92YWx1ZV9jb250ZW50cyAodmFsdWUpOworICBnY2hhciAqa2V5ID0gZ19zdHJkdXAgKGdfcXVhcmtfdG9fc3RyaW5nIChmaWVsZF9pZCkpOworCisgIGtleVswXSA9IGdfYXNjaWlfdG91cHBlciAoa2V5WzBdKTsKKyAgbl9wcmludCAoIiAgJXM6XHRcdCVzXG4iLCBrZXksIHZhbCk7CisgIGdfZnJlZSAodmFsKTsKKyAgZ19mcmVlIChrZXkpOworICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQKK3ByaW50X2ZhY3RvcnlfZGV0YWlsc19pbmZvIChHc3RFbGVtZW50RmFjdG9yeSAqIGZhY3RvcnkpCit7CisgIGNoYXIgc1syMF07CisKKyAgbl9wcmludCAoIkZhY3RvcnkgRGV0YWlsczpcbiIpOworICBuX3ByaW50ICgiICBSYW5rOlx0XHQlcyAoJWQpXG4iLAorICAgICAgZ2V0X3JhbmtfbmFtZSAocywgR1NUX1BMVUdJTl9GRUFUVVJFIChmYWN0b3J5KS0+cmFuayksCisgICAgICBHU1RfUExVR0lOX0ZFQVRVUkUgKGZhY3RvcnkpLT5yYW5rKTsKKyAgZ3N0X3N0cnVjdHVyZV9mb3JlYWNoICgoR3N0U3RydWN0dXJlICopIGZhY3RvcnktPm1ldGFkYXRhLAorICAgICAgcHJpbnRfZmFjdG9yeV9kZXRhaWxzX21ldGFkYXRhLCBOVUxMKTsKKyAgbl9wcmludCAoIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkCitwcmludF9oaWVyYXJjaHkgKEdUeXBlIHR5cGUsIGdpbnQgbGV2ZWwsIGdpbnQgKiBtYXhsZXZlbCkKK3sKKyAgR1R5cGUgcGFyZW50OworICBnaW50IGk7CisKKyAgcGFyZW50ID0gZ190eXBlX3BhcmVudCAodHlwZSk7CisKKyAgKm1heGxldmVsID0gKm1heGxldmVsICsgMTsKKyAgbGV2ZWwrKzsKKworICBpZiAocGFyZW50KQorICAgIHByaW50X2hpZXJhcmNoeSAocGFyZW50LCBsZXZlbCwgbWF4bGV2ZWwpOworCisgIGlmIChfbmFtZSkKKyAgICBnX3ByaW50ICgiJXMiLCBfbmFtZSk7CisKKyAgZm9yIChpID0gMTsgaSA8ICptYXhsZXZlbCAtIGxldmVsOyBpKyspCisgICAgZ19wcmludCAoIiAgICAgICIpOworICBpZiAoKm1heGxldmVsIC0gbGV2ZWwpCisgICAgZ19wcmludCAoIiArLS0tLSIpOworCisgIGdfcHJpbnQgKCIlc1xuIiwgZ190eXBlX25hbWUgKHR5cGUpKTsKKworICBpZiAobGV2ZWwgPT0gMSkKKyAgICBuX3ByaW50ICgiXG4iKTsKK30KKworc3RhdGljIHZvaWQKK3ByaW50X2ludGVyZmFjZXMgKEdUeXBlIHR5cGUpCit7CisgIGd1aW50IG5faWZhY2VzOworICBHVHlwZSAqaWZhY2UsICppZmFjZXMgPSBnX3R5cGVfaW50ZXJmYWNlcyAodHlwZSwgJm5faWZhY2VzKTsKKworICBpZiAoaWZhY2VzKSB7CisgICAgaWYgKG5faWZhY2VzKSB7CisgICAgICBpZiAoX25hbWUpCisgICAgICAgIGdfcHJpbnQgKCIlcyIsIF9uYW1lKTsKKyAgICAgIGdfcHJpbnQgKF8oIkltcGxlbWVudGVkIEludGVyZmFjZXM6XG4iKSk7CisgICAgICBpZmFjZSA9IGlmYWNlczsKKyAgICAgIHdoaWxlICgqaWZhY2UpIHsKKyAgICAgICAgaWYgKF9uYW1lKQorICAgICAgICAgIGdfcHJpbnQgKCIlcyIsIF9uYW1lKTsKKyAgICAgICAgZ19wcmludCAoIiAgJXNcbiIsIGdfdHlwZV9uYW1lICgqaWZhY2UpKTsKKyAgICAgICAgaWZhY2UrKzsKKyAgICAgIH0KKyAgICAgIGlmIChfbmFtZSkKKyAgICAgICAgZ19wcmludCAoIiVzIiwgX25hbWUpOworICAgICAgZ19wcmludCAoIlxuIik7CisgICAgfQorICAgIGdfZnJlZSAoaWZhY2VzKTsKKyAgfQorfQorCitzdGF0aWMgZ2NoYXIgKgorZmxhZ3NfdG9fc3RyaW5nIChHRmxhZ3NWYWx1ZSAqIHZhbHMsIGd1aW50IGZsYWdzKQoreworICBHU3RyaW5nICpzID0gTlVMTDsKKyAgZ3VpbnQgZmxhZ3NfbGVmdCwgaTsKKworICAvKiBmaXJzdCBsb29rIGZvciBhbiBleGFjdCBtYXRjaCBhbmQgY291bnQgdGhlIG51bWJlciBvZiB2YWx1ZXMgKi8KKyAgZm9yIChpID0gMDsgdmFsc1tpXS52YWx1ZV9uYW1lICE9IE5VTEw7ICsraSkgeworICAgIGlmICh2YWxzW2ldLnZhbHVlID09IGZsYWdzKQorICAgICAgcmV0dXJuIGdfc3RyZHVwICh2YWxzW2ldLnZhbHVlX25pY2spOworICB9CisKKyAgcyA9IGdfc3RyaW5nX25ldyAoTlVMTCk7CisKKyAgLyogd2UgYXNzdW1lIHRoZSB2YWx1ZXMgYXJlIHNvcnRlZCBmcm9tIGxvd2VzdCB0byBoaWdoZXN0IHZhbHVlICovCisgIGZsYWdzX2xlZnQgPSBmbGFnczsKKyAgd2hpbGUgKGkgPiAwKSB7CisgICAgLS1pOworICAgIGlmICh2YWxzW2ldLnZhbHVlICE9IDAgJiYgKGZsYWdzX2xlZnQgJiB2YWxzW2ldLnZhbHVlKSA9PSB2YWxzW2ldLnZhbHVlKSB7CisgICAgICBpZiAocy0+bGVuID4gMCkKKyAgICAgICAgZ19zdHJpbmdfYXBwZW5kX2MgKHMsICcrJyk7CisgICAgICBnX3N0cmluZ19hcHBlbmQgKHMsIHZhbHNbaV0udmFsdWVfbmljayk7CisgICAgICBmbGFnc19sZWZ0IC09IHZhbHNbaV0udmFsdWU7CisgICAgICBpZiAoZmxhZ3NfbGVmdCA9PSAwKQorICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICBpZiAocy0+bGVuID09IDApCisgICAgZ19zdHJpbmdfYXNzaWduIChzLCAiKG5vbmUpIik7CisKKyAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUgKHMsIEZBTFNFKTsKK30KKworI2RlZmluZSBLTk9XTl9QQVJBTV9GTEFHUyBcCisgIChHX1BBUkFNX0NPTlNUUlVDVCB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkgfCBcCisgIEdfUEFSQU1fTEFYX1ZBTElEQVRJT04gfCAgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8IFwKKyAgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fV1JJVEFCTEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIHwgXAorICBHU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HIHwgR1NUX1BBUkFNX01VVEFCTEVfUEFVU0VEIHwgXAorICBHU1RfUEFSQU1fTVVUQUJMRV9SRUFEWSkKKworc3RhdGljIHZvaWQKK3ByaW50X2VsZW1lbnRfcHJvcGVydGllc19pbmZvIChHc3RFbGVtZW50ICogZWxlbWVudCkKK3sKKyAgR1BhcmFtU3BlYyAqKnByb3BlcnR5X3NwZWNzOworICBndWludCBudW1fcHJvcGVydGllcywgaTsKKyAgZ2Jvb2xlYW4gcmVhZGFibGU7CisgIGdib29sZWFuIGZpcnN0X2ZsYWc7CisKKyAgcHJvcGVydHlfc3BlY3MgPSBnX29iamVjdF9jbGFzc19saXN0X3Byb3BlcnRpZXMKKyAgICAgIChHX09CSkVDVF9HRVRfQ0xBU1MgKGVsZW1lbnQpLCAmbnVtX3Byb3BlcnRpZXMpOworICBuX3ByaW50ICgiXG4iKTsKKyAgbl9wcmludCAoIkVsZW1lbnQgUHJvcGVydGllczpcbiIpOworCisgIGZvciAoaSA9IDA7IGkgPCBudW1fcHJvcGVydGllczsgaSsrKSB7CisgICAgR1ZhbHVlIHZhbHVlID0geyAwLCB9OworICAgIEdQYXJhbVNwZWMgKnBhcmFtID0gcHJvcGVydHlfc3BlY3NbaV07CisKKyAgICByZWFkYWJsZSA9IEZBTFNFOworCisgICAgZ192YWx1ZV9pbml0ICgmdmFsdWUsIHBhcmFtLT52YWx1ZV90eXBlKTsKKworICAgIG5fcHJpbnQgKCIgICUtMjBzOiAlc1xuIiwgZ19wYXJhbV9zcGVjX2dldF9uYW1lIChwYXJhbSksCisgICAgICAgIGdfcGFyYW1fc3BlY19nZXRfYmx1cmIgKHBhcmFtKSk7CisKKyAgICBmaXJzdF9mbGFnID0gVFJVRTsKKyAgICBuX3ByaW50ICgiJS0yMy4yM3MgZmxhZ3M6ICIsICIiKTsKKyAgICBpZiAocGFyYW0tPmZsYWdzICYgR19QQVJBTV9SRUFEQUJMRSkgeworICAgICAgZ19vYmplY3RfZ2V0X3Byb3BlcnR5IChHX09CSkVDVCAoZWxlbWVudCksIHBhcmFtLT5uYW1lLCAmdmFsdWUpOworICAgICAgcmVhZGFibGUgPSBUUlVFOworICAgICAgZ19wcmludCAoIiVzJXMiLCAoZmlyc3RfZmxhZykgPyAiIiA6ICIsICIsIF8oInJlYWRhYmxlIikpOworICAgICAgZmlyc3RfZmxhZyA9IEZBTFNFOworICAgIH0KKyAgICBpZiAocGFyYW0tPmZsYWdzICYgR19QQVJBTV9XUklUQUJMRSkgeworICAgICAgZ19wcmludCAoIiVzJXMiLCAoZmlyc3RfZmxhZykgPyAiIiA6ICIsICIsIF8oIndyaXRhYmxlIikpOworICAgICAgZmlyc3RfZmxhZyA9IEZBTFNFOworICAgIH0KKyAgICBpZiAocGFyYW0tPmZsYWdzICYgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSkgeworICAgICAgZ19wcmludCAoIiwgJXMiLCBfKCJjb250cm9sbGFibGUiKSk7CisgICAgICBmaXJzdF9mbGFnID0gRkFMU0U7CisgICAgfQorICAgIGlmIChwYXJhbS0+ZmxhZ3MgJiBHU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HKSB7CisgICAgICBnX3ByaW50ICgiLCAlcyIsIF8oImNoYW5nZWFibGUgaW4gTlVMTCwgUkVBRFksIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlIikpOworICAgIH0gZWxzZSBpZiAocGFyYW0tPmZsYWdzICYgR1NUX1BBUkFNX01VVEFCTEVfUEFVU0VEKSB7CisgICAgICBnX3ByaW50ICgiLCAlcyIsIF8oImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiKSk7CisgICAgfSBlbHNlIGlmIChwYXJhbS0+ZmxhZ3MgJiBHU1RfUEFSQU1fTVVUQUJMRV9SRUFEWSkgeworICAgICAgZ19wcmludCAoIiwgJXMiLCBfKCJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIpKTsKKyAgICB9CisgICAgaWYgKHBhcmFtLT5mbGFncyAmIH5LTk9XTl9QQVJBTV9GTEFHUykgeworICAgICAgZ19wcmludCAoIiVzMHglMHgiLCAoZmlyc3RfZmxhZykgPyAiIiA6ICIsICIsCisgICAgICAgICAgcGFyYW0tPmZsYWdzICYgfktOT1dOX1BBUkFNX0ZMQUdTKTsKKyAgICB9CisgICAgbl9wcmludCAoIlxuIik7CisKKyAgICBzd2l0Y2ggKEdfVkFMVUVfVFlQRSAoJnZhbHVlKSkgeworICAgICAgY2FzZSBHX1RZUEVfU1RSSU5HOgorICAgICAgeworICAgICAgICBHUGFyYW1TcGVjU3RyaW5nICpwc3RyaW5nID0gR19QQVJBTV9TUEVDX1NUUklORyAocGFyYW0pOworCisgICAgICAgIG5fcHJpbnQgKCIlLTIzLjIzcyBTdHJpbmcuICIsICIiKTsKKworICAgICAgICBpZiAocHN0cmluZy0+ZGVmYXVsdF92YWx1ZSA9PSBOVUxMKQorICAgICAgICAgIGdfcHJpbnQgKCJEZWZhdWx0OiBudWxsICIpOworICAgICAgICBlbHNlCisgICAgICAgICAgZ19wcmludCAoIkRlZmF1bHQ6IFwiJXNcIiAiLCBwc3RyaW5nLT5kZWZhdWx0X3ZhbHVlKTsKKworICAgICAgICBpZiAocmVhZGFibGUpIHsKKyAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmdfdmFsID0gZ192YWx1ZV9nZXRfc3RyaW5nICgmdmFsdWUpOworCisgICAgICAgICAgaWYgKHN0cmluZ192YWwgPT0gTlVMTCkKKyAgICAgICAgICAgIGdfcHJpbnQgKCJDdXJyZW50OiBudWxsIik7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZ19wcmludCAoIkN1cnJlbnQ6IFwiJXNcIiIsIHN0cmluZ192YWwpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBHX1RZUEVfQk9PTEVBTjoKKyAgICAgIHsKKyAgICAgICAgR1BhcmFtU3BlY0Jvb2xlYW4gKnBib29sZWFuID0gR19QQVJBTV9TUEVDX0JPT0xFQU4gKHBhcmFtKTsKKworICAgICAgICBuX3ByaW50ICgiJS0yMy4yM3MgQm9vbGVhbi4gIiwgIiIpOworICAgICAgICBnX3ByaW50ICgiRGVmYXVsdDogJXMgIiwgKHBib29sZWFuLT5kZWZhdWx0X3ZhbHVlID8gInRydWUiIDogImZhbHNlIikpOworICAgICAgICBpZiAocmVhZGFibGUpCisgICAgICAgICAgZ19wcmludCAoIkN1cnJlbnQ6ICVzIiwKKyAgICAgICAgICAgICAgKGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKCZ2YWx1ZSkgPyAidHJ1ZSIgOiAiZmFsc2UiKSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBHX1RZUEVfVUxPTkc6CisgICAgICB7CisgICAgICAgIEdQYXJhbVNwZWNVTG9uZyAqcHVsb25nID0gR19QQVJBTV9TUEVDX1VMT05HIChwYXJhbSk7CisKKyAgICAgICAgbl9wcmludCAoIiUtMjMuMjNzIFVuc2lnbmVkIExvbmcuICIsICIiKTsKKyAgICAgICAgZ19wcmludCAoIlJhbmdlOiAlbHUgLSAlbHUgRGVmYXVsdDogJWx1ICIsCisgICAgICAgICAgICBwdWxvbmctPm1pbmltdW0sIHB1bG9uZy0+bWF4aW11bSwgcHVsb25nLT5kZWZhdWx0X3ZhbHVlKTsKKyAgICAgICAgaWYgKHJlYWRhYmxlKQorICAgICAgICAgIGdfcHJpbnQgKCJDdXJyZW50OiAlbHUiLCBnX3ZhbHVlX2dldF91bG9uZyAoJnZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBHX1RZUEVfTE9ORzoKKyAgICAgIHsKKyAgICAgICAgR1BhcmFtU3BlY0xvbmcgKnBsb25nID0gR19QQVJBTV9TUEVDX0xPTkcgKHBhcmFtKTsKKworICAgICAgICBuX3ByaW50ICgiJS0yMy4yM3MgTG9uZy4gIiwgIiIpOworICAgICAgICBnX3ByaW50ICgiUmFuZ2U6ICVsZCAtICVsZCBEZWZhdWx0OiAlbGQgIiwKKyAgICAgICAgICAgIHBsb25nLT5taW5pbXVtLCBwbG9uZy0+bWF4aW11bSwgcGxvbmctPmRlZmF1bHRfdmFsdWUpOworICAgICAgICBpZiAocmVhZGFibGUpCisgICAgICAgICAgZ19wcmludCAoIkN1cnJlbnQ6ICVsZCIsIGdfdmFsdWVfZ2V0X2xvbmcgKCZ2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2UgR19UWVBFX1VJTlQ6CisgICAgICB7CisgICAgICAgIEdQYXJhbVNwZWNVSW50ICpwdWludCA9IEdfUEFSQU1fU1BFQ19VSU5UIChwYXJhbSk7CisKKyAgICAgICAgbl9wcmludCAoIiUtMjMuMjNzIFVuc2lnbmVkIEludGVnZXIuICIsICIiKTsKKyAgICAgICAgZ19wcmludCAoIlJhbmdlOiAldSAtICV1IERlZmF1bHQ6ICV1ICIsCisgICAgICAgICAgICBwdWludC0+bWluaW11bSwgcHVpbnQtPm1heGltdW0sIHB1aW50LT5kZWZhdWx0X3ZhbHVlKTsKKyAgICAgICAgaWYgKHJlYWRhYmxlKQorICAgICAgICAgIGdfcHJpbnQgKCJDdXJyZW50OiAldSIsIGdfdmFsdWVfZ2V0X3VpbnQgKCZ2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2UgR19UWVBFX0lOVDoKKyAgICAgIHsKKyAgICAgICAgR1BhcmFtU3BlY0ludCAqcGludCA9IEdfUEFSQU1fU1BFQ19JTlQgKHBhcmFtKTsKKworICAgICAgICBuX3ByaW50ICgiJS0yMy4yM3MgSW50ZWdlci4gIiwgIiIpOworICAgICAgICBnX3ByaW50ICgiUmFuZ2U6ICVkIC0gJWQgRGVmYXVsdDogJWQgIiwKKyAgICAgICAgICAgIHBpbnQtPm1pbmltdW0sIHBpbnQtPm1heGltdW0sIHBpbnQtPmRlZmF1bHRfdmFsdWUpOworICAgICAgICBpZiAocmVhZGFibGUpCisgICAgICAgICAgZ19wcmludCAoIkN1cnJlbnQ6ICVkIiwgZ192YWx1ZV9nZXRfaW50ICgmdmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIEdfVFlQRV9VSU5UNjQ6CisgICAgICB7CisgICAgICAgIEdQYXJhbVNwZWNVSW50NjQgKnB1aW50NjQgPSBHX1BBUkFNX1NQRUNfVUlOVDY0IChwYXJhbSk7CisKKyAgICAgICAgbl9wcmludCAoIiUtMjMuMjNzIFVuc2lnbmVkIEludGVnZXI2NC4gIiwgIiIpOworICAgICAgICBnX3ByaW50ICgiUmFuZ2U6ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiAtICUiIEdfR1VJTlQ2NF9GT1JNQVQKKyAgICAgICAgICAgICIgRGVmYXVsdDogJSIgR19HVUlOVDY0X0ZPUk1BVCAiICIsCisgICAgICAgICAgICBwdWludDY0LT5taW5pbXVtLCBwdWludDY0LT5tYXhpbXVtLCBwdWludDY0LT5kZWZhdWx0X3ZhbHVlKTsKKyAgICAgICAgaWYgKHJlYWRhYmxlKQorICAgICAgICAgIGdfcHJpbnQgKCJDdXJyZW50OiAlIiBHX0dVSU5UNjRfRk9STUFULCBnX3ZhbHVlX2dldF91aW50NjQgKCZ2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2UgR19UWVBFX0lOVDY0OgorICAgICAgeworICAgICAgICBHUGFyYW1TcGVjSW50NjQgKnBpbnQ2NCA9IEdfUEFSQU1fU1BFQ19JTlQ2NCAocGFyYW0pOworCisgICAgICAgIG5fcHJpbnQgKCIlLTIzLjIzcyBJbnRlZ2VyNjQuICIsICIiKTsKKyAgICAgICAgZ19wcmludCAoIlJhbmdlOiAlIiBHX0dJTlQ2NF9GT1JNQVQgIiAtICUiIEdfR0lOVDY0X0ZPUk1BVAorICAgICAgICAgICAgIiBEZWZhdWx0OiAlIiBHX0dJTlQ2NF9GT1JNQVQgIiAiLAorICAgICAgICAgICAgcGludDY0LT5taW5pbXVtLCBwaW50NjQtPm1heGltdW0sIHBpbnQ2NC0+ZGVmYXVsdF92YWx1ZSk7CisgICAgICAgIGlmIChyZWFkYWJsZSkKKyAgICAgICAgICBnX3ByaW50ICgiQ3VycmVudDogJSIgR19HSU5UNjRfRk9STUFULCBnX3ZhbHVlX2dldF9pbnQ2NCAoJnZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBHX1RZUEVfRkxPQVQ6CisgICAgICB7CisgICAgICAgIEdQYXJhbVNwZWNGbG9hdCAqcGZsb2F0ID0gR19QQVJBTV9TUEVDX0ZMT0FUIChwYXJhbSk7CisKKyAgICAgICAgbl9wcmludCAoIiUtMjMuMjNzIEZsb2F0LiAiLCAiIik7CisgICAgICAgIGdfcHJpbnQgKCJSYW5nZTogJTE1LjdnIC0gJTE1LjdnIERlZmF1bHQ6ICUxNS43ZyAiLAorICAgICAgICAgICAgcGZsb2F0LT5taW5pbXVtLCBwZmxvYXQtPm1heGltdW0sIHBmbG9hdC0+ZGVmYXVsdF92YWx1ZSk7CisgICAgICAgIGlmIChyZWFkYWJsZSkKKyAgICAgICAgICBnX3ByaW50ICgiQ3VycmVudDogJTE1LjdnIiwgZ192YWx1ZV9nZXRfZmxvYXQgKCZ2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2UgR19UWVBFX0RPVUJMRToKKyAgICAgIHsKKyAgICAgICAgR1BhcmFtU3BlY0RvdWJsZSAqcGRvdWJsZSA9IEdfUEFSQU1fU1BFQ19ET1VCTEUgKHBhcmFtKTsKKworICAgICAgICBuX3ByaW50ICgiJS0yMy4yM3MgRG91YmxlLiAiLCAiIik7CisgICAgICAgIGdfcHJpbnQgKCJSYW5nZTogJTE1LjdnIC0gJTE1LjdnIERlZmF1bHQ6ICUxNS43ZyAiLAorICAgICAgICAgICAgcGRvdWJsZS0+bWluaW11bSwgcGRvdWJsZS0+bWF4aW11bSwgcGRvdWJsZS0+ZGVmYXVsdF92YWx1ZSk7CisgICAgICAgIGlmIChyZWFkYWJsZSkKKyAgICAgICAgICBnX3ByaW50ICgiQ3VycmVudDogJTE1LjdnIiwgZ192YWx1ZV9nZXRfZG91YmxlICgmdmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBkZWZhdWx0OgorICAgICAgICBpZiAocGFyYW0tPnZhbHVlX3R5cGUgPT0gR1NUX1RZUEVfQ0FQUykgeworICAgICAgICAgIGNvbnN0IEdzdENhcHMgKmNhcHMgPSBnc3RfdmFsdWVfZ2V0X2NhcHMgKCZ2YWx1ZSk7CisKKyAgICAgICAgICBpZiAoIWNhcHMpCisgICAgICAgICAgICBuX3ByaW50ICgiJS0yMy4yM3MgQ2FwcyAoTlVMTCkiLCAiIik7CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwcmludF9jYXBzIChjYXBzLCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgIik7CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19FTlVNIChwYXJhbSkpIHsKKyAgICAgICAgICBHUGFyYW1TcGVjRW51bSAqcGVudW0gPSBHX1BBUkFNX1NQRUNfRU5VTSAocGFyYW0pOworICAgICAgICAgIEdFbnVtVmFsdWUgKnZhbHVlczsKKyAgICAgICAgICBndWludCBqID0gMDsKKyAgICAgICAgICBnaW50IGVudW1fdmFsdWU7CisgICAgICAgICAgY29uc3QgZ2NoYXIgKmRlZl92YWxfbmljayA9ICIiLCAqY3VyX3ZhbF9uaWNrID0gIiI7CisKKyAgICAgICAgICB2YWx1ZXMgPSBHX0VOVU1fQ0xBU1MgKGdfdHlwZV9jbGFzc19yZWYgKHBhcmFtLT52YWx1ZV90eXBlKSktPnZhbHVlczsKKyAgICAgICAgICBlbnVtX3ZhbHVlID0gZ192YWx1ZV9nZXRfZW51bSAoJnZhbHVlKTsKKworICAgICAgICAgIHdoaWxlICh2YWx1ZXNbal0udmFsdWVfbmFtZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlc1tqXS52YWx1ZSA9PSBlbnVtX3ZhbHVlKQorICAgICAgICAgICAgICBjdXJfdmFsX25pY2sgPSB2YWx1ZXNbal0udmFsdWVfbmljazsKKyAgICAgICAgICAgIGlmICh2YWx1ZXNbal0udmFsdWUgPT0gcGVudW0tPmRlZmF1bHRfdmFsdWUpCisgICAgICAgICAgICAgIGRlZl92YWxfbmljayA9IHZhbHVlc1tqXS52YWx1ZV9uaWNrOworICAgICAgICAgICAgaisrOworICAgICAgICAgIH0KKworICAgICAgICAgIG5fcHJpbnQKKyAgICAgICAgICAgICAgKCIlLTIzLjIzcyBFbnVtIFwiJXNcIiBEZWZhdWx0OiAlZCwgXCIlc1wiIEN1cnJlbnQ6ICVkLCBcIiVzXCIiLAorICAgICAgICAgICAgICAiIiwgZ190eXBlX25hbWUgKEdfVkFMVUVfVFlQRSAoJnZhbHVlKSksIHBlbnVtLT5kZWZhdWx0X3ZhbHVlLAorICAgICAgICAgICAgICBkZWZfdmFsX25pY2ssIGVudW1fdmFsdWUsIGN1cl92YWxfbmljayk7CisKKyAgICAgICAgICBqID0gMDsKKyAgICAgICAgICB3aGlsZSAodmFsdWVzW2pdLnZhbHVlX25hbWUpIHsKKyAgICAgICAgICAgIGdfcHJpbnQgKCJcbiIpOworICAgICAgICAgICAgaWYgKF9uYW1lKQorICAgICAgICAgICAgICBnX3ByaW50ICgiJXMiLCBfbmFtZSk7CisgICAgICAgICAgICBnX3ByaW50ICgiJS0yMy4yM3MgICAgKCVkKTogJS0xNnMgLSAlcyIsICIiLAorICAgICAgICAgICAgICAgIHZhbHVlc1tqXS52YWx1ZSwgdmFsdWVzW2pdLnZhbHVlX25pY2ssIHZhbHVlc1tqXS52YWx1ZV9uYW1lKTsKKyAgICAgICAgICAgIGorKzsKKyAgICAgICAgICB9CisgICAgICAgICAgLyogZ190eXBlX2NsYXNzX3VucmVmIChlYyk7ICovCisgICAgICAgIH0gZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX0ZMQUdTIChwYXJhbSkpIHsKKyAgICAgICAgICBHUGFyYW1TcGVjRmxhZ3MgKnBmbGFncyA9IEdfUEFSQU1fU1BFQ19GTEFHUyAocGFyYW0pOworICAgICAgICAgIEdGbGFnc1ZhbHVlICp2YWxzOworICAgICAgICAgIGdjaGFyICpjdXIsICpkZWY7CisKKyAgICAgICAgICB2YWxzID0gcGZsYWdzLT5mbGFnc19jbGFzcy0+dmFsdWVzOworCisgICAgICAgICAgY3VyID0gZmxhZ3NfdG9fc3RyaW5nICh2YWxzLCBnX3ZhbHVlX2dldF9mbGFncyAoJnZhbHVlKSk7CisgICAgICAgICAgZGVmID0gZmxhZ3NfdG9fc3RyaW5nICh2YWxzLCBwZmxhZ3MtPmRlZmF1bHRfdmFsdWUpOworCisgICAgICAgICAgbl9wcmludAorICAgICAgICAgICAgICAoIiUtMjMuMjNzIEZsYWdzIFwiJXNcIiBEZWZhdWx0OiAweCUwOHgsIFwiJXNcIiBDdXJyZW50OiAweCUwOHgsIFwiJXNcIiIsCisgICAgICAgICAgICAgICIiLCBnX3R5cGVfbmFtZSAoR19WQUxVRV9UWVBFICgmdmFsdWUpKSwgcGZsYWdzLT5kZWZhdWx0X3ZhbHVlLAorICAgICAgICAgICAgICBkZWYsIGdfdmFsdWVfZ2V0X2ZsYWdzICgmdmFsdWUpLCBjdXIpOworCisgICAgICAgICAgd2hpbGUgKHZhbHNbMF0udmFsdWVfbmFtZSkgeworICAgICAgICAgICAgZ19wcmludCAoIlxuIik7CisgICAgICAgICAgICBpZiAoX25hbWUpCisgICAgICAgICAgICAgIGdfcHJpbnQgKCIlcyIsIF9uYW1lKTsKKyAgICAgICAgICAgIGdfcHJpbnQgKCIlLTIzLjIzcyAgICAoMHglMDh4KTogJS0xNnMgLSAlcyIsICIiLAorICAgICAgICAgICAgICAgIHZhbHNbMF0udmFsdWUsIHZhbHNbMF0udmFsdWVfbmljaywgdmFsc1swXS52YWx1ZV9uYW1lKTsKKyAgICAgICAgICAgICsrdmFsczsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBnX2ZyZWUgKGN1cik7CisgICAgICAgICAgZ19mcmVlIChkZWYpOworICAgICAgICB9IGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19PQkpFQ1QgKHBhcmFtKSkgeworICAgICAgICAgIG5fcHJpbnQgKCIlLTIzLjIzcyBPYmplY3Qgb2YgdHlwZSBcIiVzXCIiLCAiIiwKKyAgICAgICAgICAgICAgZ190eXBlX25hbWUgKHBhcmFtLT52YWx1ZV90eXBlKSk7CisgICAgICAgIH0gZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX0JPWEVEIChwYXJhbSkpIHsKKyAgICAgICAgICBuX3ByaW50ICgiJS0yMy4yM3MgQm94ZWQgcG9pbnRlciBvZiB0eXBlIFwiJXNcIiIsICIiLAorICAgICAgICAgICAgICBnX3R5cGVfbmFtZSAocGFyYW0tPnZhbHVlX3R5cGUpKTsKKyAgICAgICAgfSBlbHNlIGlmIChHX0lTX1BBUkFNX1NQRUNfUE9JTlRFUiAocGFyYW0pKSB7CisgICAgICAgICAgaWYgKHBhcmFtLT52YWx1ZV90eXBlICE9IEdfVFlQRV9QT0lOVEVSKSB7CisgICAgICAgICAgICBuX3ByaW50ICgiJS0yMy4yM3MgUG9pbnRlciBvZiB0eXBlIFwiJXNcIi4iLCAiIiwKKyAgICAgICAgICAgICAgICBnX3R5cGVfbmFtZSAocGFyYW0tPnZhbHVlX3R5cGUpKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbl9wcmludCAoIiUtMjMuMjNzIFBvaW50ZXIuIiwgIiIpOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChwYXJhbS0+dmFsdWVfdHlwZSA9PSBHX1RZUEVfVkFMVUVfQVJSQVkpIHsKKyAgICAgICAgICBHUGFyYW1TcGVjVmFsdWVBcnJheSAqcHZhcnJheSA9IEdfUEFSQU1fU1BFQ19WQUxVRV9BUlJBWSAocGFyYW0pOworCisgICAgICAgICAgaWYgKHB2YXJyYXktPmVsZW1lbnRfc3BlYykgeworICAgICAgICAgICAgbl9wcmludCAoIiUtMjMuMjNzIEFycmF5IG9mIEdWYWx1ZXMgb2YgdHlwZSBcIiVzXCIiLCAiIiwKKyAgICAgICAgICAgICAgICBnX3R5cGVfbmFtZSAocHZhcnJheS0+ZWxlbWVudF9zcGVjLT52YWx1ZV90eXBlKSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG5fcHJpbnQgKCIlLTIzLjIzcyBBcnJheSBvZiBHVmFsdWVzIiwgIiIpOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChHU1RfSVNfUEFSQU1fU1BFQ19GUkFDVElPTiAocGFyYW0pKSB7CisgICAgICAgICAgR3N0UGFyYW1TcGVjRnJhY3Rpb24gKnBmcmFjdGlvbiA9IEdTVF9QQVJBTV9TUEVDX0ZSQUNUSU9OIChwYXJhbSk7CisKKyAgICAgICAgICBuX3ByaW50ICgiJS0yMy4yM3MgRnJhY3Rpb24uICIsICIiKTsKKworICAgICAgICAgIGdfcHJpbnQgKCJSYW5nZTogJWQvJWQgLSAlZC8lZCBEZWZhdWx0OiAlZC8lZCAiLAorICAgICAgICAgICAgICBwZnJhY3Rpb24tPm1pbl9udW0sIHBmcmFjdGlvbi0+bWluX2RlbiwKKyAgICAgICAgICAgICAgcGZyYWN0aW9uLT5tYXhfbnVtLCBwZnJhY3Rpb24tPm1heF9kZW4sCisgICAgICAgICAgICAgIHBmcmFjdGlvbi0+ZGVmX251bSwgcGZyYWN0aW9uLT5kZWZfZGVuKTsKKyAgICAgICAgICBpZiAocmVhZGFibGUpCisgICAgICAgICAgICBnX3ByaW50ICgiQ3VycmVudDogJWQvJWQiLAorICAgICAgICAgICAgICAgIGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fbnVtZXJhdG9yICgmdmFsdWUpLAorICAgICAgICAgICAgICAgIGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3IgKCZ2YWx1ZSkpOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbl9wcmludCAoIiUtMjMuMjNzIFVua25vd24gdHlwZSAlbGQgXCIlc1wiIiwgIiIsIHBhcmFtLT52YWx1ZV90eXBlLAorICAgICAgICAgICAgICBnX3R5cGVfbmFtZSAocGFyYW0tPnZhbHVlX3R5cGUpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKCFyZWFkYWJsZSkKKyAgICAgIGdfcHJpbnQgKCIgV3JpdGUgb25seVxuIik7CisgICAgZWxzZQorICAgICAgZ19wcmludCAoIlxuIik7CisKKyAgICBnX3ZhbHVlX3Jlc2V0ICgmdmFsdWUpOworICB9CisgIGlmIChudW1fcHJvcGVydGllcyA9PSAwKQorICAgIG5fcHJpbnQgKCIgIG5vbmVcbiIpOworCisgIGdfZnJlZSAocHJvcGVydHlfc3BlY3MpOworfQorCitzdGF0aWMgdm9pZAorcHJpbnRfcGFkX3RlbXBsYXRlc19pbmZvIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0RWxlbWVudEZhY3RvcnkgKiBmYWN0b3J5KQoreworICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7CisgIGNvbnN0IEdMaXN0ICpwYWRzOworICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqcGFkdGVtcGxhdGU7CisKKyAgbl9wcmludCAoIlBhZCBUZW1wbGF0ZXM6XG4iKTsKKyAgaWYgKCFmYWN0b3J5LT5udW1wYWR0ZW1wbGF0ZXMpIHsKKyAgICBuX3ByaW50ICgiICBub25lXG4iKTsKKyAgICByZXR1cm47CisgIH0KKworICBnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKEdfT0JKRUNUX0dFVF9DTEFTUyAoZWxlbWVudCkpOworCisgIHBhZHMgPSBmYWN0b3J5LT5zdGF0aWNwYWR0ZW1wbGF0ZXM7CisgIHdoaWxlIChwYWRzKSB7CisgICAgcGFkdGVtcGxhdGUgPSAoR3N0U3RhdGljUGFkVGVtcGxhdGUgKikgKHBhZHMtPmRhdGEpOworICAgIHBhZHMgPSBnX2xpc3RfbmV4dCAocGFkcyk7CisKKyAgICBpZiAocGFkdGVtcGxhdGUtPmRpcmVjdGlvbiA9PSBHU1RfUEFEX1NSQykKKyAgICAgIG5fcHJpbnQgKCIgIFNSQyB0ZW1wbGF0ZTogJyVzJ1xuIiwgcGFkdGVtcGxhdGUtPm5hbWVfdGVtcGxhdGUpOworICAgIGVsc2UgaWYgKHBhZHRlbXBsYXRlLT5kaXJlY3Rpb24gPT0gR1NUX1BBRF9TSU5LKQorICAgICAgbl9wcmludCAoIiAgU0lOSyB0ZW1wbGF0ZTogJyVzJ1xuIiwgcGFkdGVtcGxhdGUtPm5hbWVfdGVtcGxhdGUpOworICAgIGVsc2UKKyAgICAgIG5fcHJpbnQgKCIgIFVOS05PV04hISEgdGVtcGxhdGU6ICclcydcbiIsIHBhZHRlbXBsYXRlLT5uYW1lX3RlbXBsYXRlKTsKKworICAgIGlmIChwYWR0ZW1wbGF0ZS0+cHJlc2VuY2UgPT0gR1NUX1BBRF9BTFdBWVMpCisgICAgICBuX3ByaW50ICgiICAgIEF2YWlsYWJpbGl0eTogQWx3YXlzXG4iKTsKKyAgICBlbHNlIGlmIChwYWR0ZW1wbGF0ZS0+cHJlc2VuY2UgPT0gR1NUX1BBRF9TT01FVElNRVMpCisgICAgICBuX3ByaW50ICgiICAgIEF2YWlsYWJpbGl0eTogU29tZXRpbWVzXG4iKTsKKyAgICBlbHNlIGlmIChwYWR0ZW1wbGF0ZS0+cHJlc2VuY2UgPT0gR1NUX1BBRF9SRVFVRVNUKSB7CisgICAgICBuX3ByaW50ICgiICAgIEF2YWlsYWJpbGl0eTogT24gcmVxdWVzdFxuIik7CisgICAgICBuX3ByaW50ICgiICAgICAgSGFzIHJlcXVlc3RfbmV3X3BhZCgpIGZ1bmN0aW9uOiAlc1xuIiwKKyAgICAgICAgICBHU1RfREVCVUdfRlVOQ1BUUl9OQU1FIChnc3RlbGVtZW50X2NsYXNzLT5yZXF1ZXN0X25ld19wYWQpKTsKKyAgICB9IGVsc2UKKyAgICAgIG5fcHJpbnQgKCIgICAgQXZhaWxhYmlsaXR5OiBVTktOT1dOISEhXG4iKTsKKworICAgIGlmIChwYWR0ZW1wbGF0ZS0+c3RhdGljX2NhcHMuc3RyaW5nKSB7CisgICAgICBuX3ByaW50ICgiICAgIENhcGFiaWxpdGllczpcbiIpOworICAgICAgcHJpbnRfY2FwcyAoZ3N0X3N0YXRpY19jYXBzX2dldCAoJnBhZHRlbXBsYXRlLT5zdGF0aWNfY2FwcyksICIgICAgICAiKTsKKyAgICB9CisKKyAgICBuX3ByaW50ICgiXG4iKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorcHJpbnRfZWxlbWVudF9mbGFnX2luZm8gKEdzdEVsZW1lbnQgKiBlbGVtZW50KQoreworICBnYm9vbGVhbiBoYXZlX2ZsYWdzID0gRkFMU0U7CisKKyAgbl9wcmludCAoIlxuIik7CisgIG5fcHJpbnQgKCJFbGVtZW50IEZsYWdzOlxuIik7CisKKyAgaWYgKCFoYXZlX2ZsYWdzKQorICAgIG5fcHJpbnQgKCIgIG5vIGZsYWdzIHNldFxuIik7CisKKyAgaWYgKEdTVF9JU19CSU4gKGVsZW1lbnQpKSB7CisgICAgbl9wcmludCAoIlxuIik7CisgICAgbl9wcmludCAoIkJpbiBGbGFnczpcbiIpOworICAgIGlmICghaGF2ZV9mbGFncykKKyAgICAgIG5fcHJpbnQgKCIgIG5vIGZsYWdzIHNldFxuIik7CisgIH0KK30KKworc3RhdGljIHZvaWQKK3ByaW50X2ltcGxlbWVudGF0aW9uX2luZm8gKEdzdEVsZW1lbnQgKiBlbGVtZW50KQoreworICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7CisKKyAgZ3N0ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChHX09CSkVDVF9HRVRfQ0xBU1MgKGVsZW1lbnQpKTsKKworICBuX3ByaW50ICgiXG4iKTsKKyAgbl9wcmludCAoIkVsZW1lbnQgSW1wbGVtZW50YXRpb246XG4iKTsKKworICBuX3ByaW50ICgiICBIYXMgY2hhbmdlX3N0YXRlKCkgZnVuY3Rpb246ICVzXG4iLAorICAgICAgR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRSAoZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlKSk7Cit9CisKK3N0YXRpYyB2b2lkCitwcmludF9jbG9ja2luZ19pbmZvIChHc3RFbGVtZW50ICogZWxlbWVudCkKK3sKKyAgaWYgKCFnc3RfZWxlbWVudF9yZXF1aXJlc19jbG9jayAoZWxlbWVudCkgJiYKKyAgICAgICEoZ3N0X2VsZW1lbnRfcHJvdmlkZXNfY2xvY2sgKGVsZW1lbnQpICYmCisgICAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X2Nsb2NrIChlbGVtZW50KSkpIHsKKyAgICBuX3ByaW50ICgiXG4iKTsKKyAgICBuX3ByaW50ICgiRWxlbWVudCBoYXMgbm8gY2xvY2tpbmcgY2FwYWJpbGl0aWVzLiIpOworICAgIHJldHVybjsKKyAgfQorCisgIG5fcHJpbnQgKCJcbiIpOworICBuX3ByaW50ICgiQ2xvY2tpbmcgSW50ZXJhY3Rpb246XG4iKTsKKyAgaWYgKGdzdF9lbGVtZW50X3JlcXVpcmVzX2Nsb2NrIChlbGVtZW50KSkgeworICAgIG5fcHJpbnQgKCIgIGVsZW1lbnQgcmVxdWlyZXMgYSBjbG9ja1xuIik7CisgIH0KKworICBpZiAoZ3N0X2VsZW1lbnRfcHJvdmlkZXNfY2xvY2sgKGVsZW1lbnQpKSB7CisgICAgR3N0Q2xvY2sgKmNsb2NrOworCisgICAgY2xvY2sgPSBnc3RfZWxlbWVudF9nZXRfY2xvY2sgKGVsZW1lbnQpOworICAgIGlmIChjbG9jaykKKyAgICAgIG5fcHJpbnQgKCIgIGVsZW1lbnQgcHJvdmlkZXMgYSBjbG9jazogJXNcbiIsIEdTVF9PQkpFQ1RfTkFNRSAoY2xvY2spKTsKKyAgICBlbHNlCisgICAgICBuX3ByaW50ICgiICBlbGVtZW50IGlzIHN1cHBvc2VkIHRvIHByb3ZpZGUgYSBjbG9jayBidXQgcmV0dXJuZWQgTlVMTFxuIik7CisgIH0KK30KKworc3RhdGljIHZvaWQKK3ByaW50X2luZGV4X2luZm8gKEdzdEVsZW1lbnQgKiBlbGVtZW50KQoreworICBpZiAoZ3N0X2VsZW1lbnRfaXNfaW5kZXhhYmxlIChlbGVtZW50KSkgeworICAgIG5fcHJpbnQgKCJcbiIpOworICAgIG5fcHJpbnQgKCJJbmRleGluZyBjYXBhYmlsaXRpZXM6XG4iKTsKKyAgICBuX3ByaW50ICgiICBlbGVtZW50IGNhbiBkbyBpbmRleGluZ1xuIik7CisgIH0gZWxzZSB7CisgICAgbl9wcmludCAoIlxuIik7CisgICAgbl9wcmludCAoIkVsZW1lbnQgaGFzIG5vIGluZGV4aW5nIGNhcGFiaWxpdGllcy5cbiIpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitwcmludF91cmlfaGFuZGxlcl9pbmZvIChHc3RFbGVtZW50ICogZWxlbWVudCkKK3sKKyAgaWYgKEdTVF9JU19VUklfSEFORExFUiAoZWxlbWVudCkpIHsKKyAgICBjb25zdCBnY2hhciAqdXJpX3R5cGU7CisgICAgZ2NoYXIgKip1cmlfcHJvdG9jb2xzOworCisgICAgaWYgKGdzdF91cmlfaGFuZGxlcl9nZXRfdXJpX3R5cGUgKEdTVF9VUklfSEFORExFUiAoZWxlbWVudCkpID09IEdTVF9VUklfU1JDKQorICAgICAgdXJpX3R5cGUgPSAic291cmNlIjsKKyAgICBlbHNlIGlmIChnc3RfdXJpX2hhbmRsZXJfZ2V0X3VyaV90eXBlIChHU1RfVVJJX0hBTkRMRVIgKGVsZW1lbnQpKSA9PQorICAgICAgICBHU1RfVVJJX1NJTkspCisgICAgICB1cmlfdHlwZSA9ICJzaW5rIjsKKyAgICBlbHNlCisgICAgICB1cmlfdHlwZSA9ICJ1bmtub3duIjsKKworICAgIHVyaV9wcm90b2NvbHMgPSBnc3RfdXJpX2hhbmRsZXJfZ2V0X3Byb3RvY29scyAoR1NUX1VSSV9IQU5ETEVSIChlbGVtZW50KSk7CisKKyAgICBuX3ByaW50ICgiXG4iKTsKKyAgICBuX3ByaW50ICgiVVJJIGhhbmRsaW5nIGNhcGFiaWxpdGllczpcbiIpOworICAgIG5fcHJpbnQgKCIgIEVsZW1lbnQgY2FuIGFjdCBhcyAlcy5cbiIsIHVyaV90eXBlKTsKKworICAgIGlmICh1cmlfcHJvdG9jb2xzICYmICp1cmlfcHJvdG9jb2xzKSB7CisgICAgICBuX3ByaW50ICgiICBTdXBwb3J0ZWQgVVJJIHByb3RvY29sczpcbiIpOworICAgICAgZm9yICg7ICp1cmlfcHJvdG9jb2xzICE9IE5VTEw7IHVyaV9wcm90b2NvbHMrKykKKyAgICAgICAgbl9wcmludCAoIiAgICAlc1xuIiwgKnVyaV9wcm90b2NvbHMpOworICAgIH0gZWxzZSB7CisgICAgICBuX3ByaW50ICgiICBObyBzdXBwb3J0ZWQgVVJJIHByb3RvY29sc1xuIik7CisgICAgfQorICB9IGVsc2UgeworICAgIG5fcHJpbnQgKCJFbGVtZW50IGhhcyBubyBVUkkgaGFuZGxpbmcgY2FwYWJpbGl0aWVzLlxuIik7CisgIH0KK30KKworc3RhdGljIHZvaWQKK3ByaW50X3BhZF9pbmZvIChHc3RFbGVtZW50ICogZWxlbWVudCkKK3sKKyAgY29uc3QgR0xpc3QgKnBhZHM7CisgIEdzdFBhZCAqcGFkOworCisgIG5fcHJpbnQgKCJcbiIpOworICBuX3ByaW50ICgiUGFkczpcbiIpOworCisgIGlmICghZWxlbWVudC0+bnVtcGFkcykgeworICAgIG5fcHJpbnQgKCIgIG5vbmVcbiIpOworICAgIHJldHVybjsKKyAgfQorCisgIHBhZHMgPSBlbGVtZW50LT5wYWRzOworICB3aGlsZSAocGFkcykgeworICAgIGdjaGFyICpuYW1lOworICAgIEdzdENhcHMgKmNhcHM7CisKKyAgICBwYWQgPSBHU1RfUEFEIChwYWRzLT5kYXRhKTsKKyAgICBwYWRzID0gZ19saXN0X25leHQgKHBhZHMpOworCisgICAgbl9wcmludCAoIiIpOworCisgICAgbmFtZSA9IGdzdF9wYWRfZ2V0X25hbWUgKHBhZCk7CisgICAgaWYgKGdzdF9wYWRfZ2V0X2RpcmVjdGlvbiAocGFkKSA9PSBHU1RfUEFEX1NSQykKKyAgICAgIGdfcHJpbnQgKCIgIFNSQzogJyVzJyIsIG5hbWUpOworICAgIGVsc2UgaWYgKGdzdF9wYWRfZ2V0X2RpcmVjdGlvbiAocGFkKSA9PSBHU1RfUEFEX1NJTkspCisgICAgICBnX3ByaW50ICgiICBTSU5LOiAnJXMnIiwgbmFtZSk7CisgICAgZWxzZQorICAgICAgZ19wcmludCAoIiAgVU5LTk9XTiEhITogJyVzJyIsIG5hbWUpOworCisgICAgZ19mcmVlIChuYW1lKTsKKworICAgIGdfcHJpbnQgKCJcbiIpOworCisgICAgbl9wcmludCAoIiAgICBJbXBsZW1lbnRhdGlvbjpcbiIpOworICAgIGlmIChwYWQtPmNoYWluZnVuYykKKyAgICAgIG5fcHJpbnQgKCIgICAgICBIYXMgY2hhaW5mdW5jKCk6ICVzXG4iLAorICAgICAgICAgIEdTVF9ERUJVR19GVU5DUFRSX05BTUUgKHBhZC0+Y2hhaW5mdW5jKSk7CisgICAgaWYgKHBhZC0+Z2V0cmFuZ2VmdW5jKQorICAgICAgbl9wcmludCAoIiAgICAgIEhhcyBnZXRyYW5nZWZ1bmMoKTogJXNcbiIsCisgICAgICAgICAgR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRSAocGFkLT5nZXRyYW5nZWZ1bmMpKTsKKyAgICBpZiAocGFkLT5ldmVudGZ1bmMgIT0gZ3N0X3BhZF9ldmVudF9kZWZhdWx0KQorICAgICAgbl9wcmludCAoIiAgICAgIEhhcyBjdXN0b20gZXZlbnRmdW5jKCk6ICVzXG4iLAorICAgICAgICAgIEdTVF9ERUJVR19GVU5DUFRSX05BTUUgKHBhZC0+ZXZlbnRmdW5jKSk7CisgICAgaWYgKHBhZC0+cXVlcnlmdW5jICE9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCkKKyAgICAgIG5fcHJpbnQgKCIgICAgICBIYXMgY3VzdG9tIHF1ZXJ5ZnVuYygpOiAlc1xuIiwKKyAgICAgICAgICBHU1RfREVCVUdfRlVOQ1BUUl9OQU1FIChwYWQtPnF1ZXJ5ZnVuYykpOworICAgIGlmIChwYWQtPnF1ZXJ5dHlwZWZ1bmMgIT0gZ3N0X3BhZF9nZXRfcXVlcnlfdHlwZXNfZGVmYXVsdCkgeworICAgICAgY29uc3QgR3N0UXVlcnlUeXBlICpxdWVyeV90eXBlcyA9IGdzdF9wYWRfZ2V0X3F1ZXJ5X3R5cGVzIChwYWQpOworICAgICAgaWYgKHF1ZXJ5X3R5cGVzKSB7CisgICAgICAgIG5fcHJpbnQgKCIgICAgICAgIFByb3ZpZGVzIHF1ZXJ5IHR5cGVzOlxuIik7CisgICAgICAgIHByaW50X3F1ZXJ5X3R5cGVzIChxdWVyeV90eXBlcyk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHBhZC0+aXRlcmludGxpbmtmdW5jICE9IGdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19kZWZhdWx0KQorICAgICAgbl9wcmludCAoIiAgICAgIEhhcyBjdXN0b20gaXRlcmludGxpbmtmdW5jKCk6ICVzXG4iLAorICAgICAgICAgIEdTVF9ERUJVR19GVU5DUFRSX05BTUUgKHBhZC0+aXRlcmludGxpbmtmdW5jKSk7CisKKyAgICBpZiAocGFkLT5nZXRjYXBzZnVuYykKKyAgICAgIG5fcHJpbnQgKCIgICAgICBIYXMgZ2V0Y2Fwc2Z1bmMoKTogJXNcbiIsCisgICAgICAgICAgR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRSAocGFkLT5nZXRjYXBzZnVuYykpOworICAgIC8qIGdzdF9wYWRfYWNjZXB0Y2Fwc19kZWZhdWx0IGlzIHN0YXRpYyA6LyAqLworICAgIGlmIChwYWQtPmFjY2VwdGNhcHNmdW5jKQorICAgICAgbl9wcmludCAoIiAgICAgIEhhcyBhY2NlcHRjYXBzZnVuYygpOiAlc1xuIiwKKyAgICAgICAgICBHU1RfREVCVUdfRlVOQ1BUUl9OQU1FIChwYWQtPmFjY2VwdGNhcHNmdW5jKSk7CisgICAgaWYgKHBhZC0+Zml4YXRlY2Fwc2Z1bmMpCisgICAgICBuX3ByaW50ICgiICAgICAgSGFzIGZpeGF0ZWNhcHNmdW5jKCk6ICVzXG4iLAorICAgICAgICAgIEdTVF9ERUJVR19GVU5DUFRSX05BTUUgKHBhZC0+Zml4YXRlY2Fwc2Z1bmMpKTsKKworCisgICAgaWYgKHBhZC0+cGFkdGVtcGxhdGUpCisgICAgICBuX3ByaW50ICgiICAgIFBhZCBUZW1wbGF0ZTogJyVzJ1xuIiwgcGFkLT5wYWR0ZW1wbGF0ZS0+bmFtZV90ZW1wbGF0ZSk7CisKKyAgICBjYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChwYWQpOworICAgIGlmIChjYXBzKSB7CisgICAgICBuX3ByaW50ICgiICAgIENhcGFiaWxpdGllczpcbiIpOworICAgICAgcHJpbnRfY2FwcyAoY2FwcywgIiAgICAgICIpOworICAgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOworICAgIH0KKyAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2hhc19zb21ldGltZXNfdGVtcGxhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQoreworICBHc3RFbGVtZW50Q2xhc3MgKmtsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChlbGVtZW50KTsKKyAgR0xpc3QgKmw7CisKKyAgZm9yIChsID0ga2xhc3MtPnBhZHRlbXBsYXRlczsgbCAhPSBOVUxMOyBsID0gbC0+bmV4dCkgeworICAgIGlmIChHU1RfUEFEX1RFTVBMQVRFIChsLT5kYXRhKS0+cHJlc2VuY2UgPT0gR1NUX1BBRF9TT01FVElNRVMpCisgICAgICByZXR1cm4gVFJVRTsKKyAgfQorCisgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQKK3ByaW50X3NpZ25hbF9pbmZvIChHc3RFbGVtZW50ICogZWxlbWVudCkKK3sKKyAgLyogU2lnbmFscy9BY3Rpb25zIEJsb2NrICovCisgIGd1aW50ICpzaWduYWxzOworICBndWludCBuc2lnbmFsczsKKyAgZ2ludCBpID0gMCwgaiwgazsKKyAgR1NpZ25hbFF1ZXJ5ICpxdWVyeSA9IE5VTEw7CisgIEdUeXBlIHR5cGU7CisgIEdTTGlzdCAqZm91bmRfc2lnbmFscywgKmw7CisKKyAgZm9yIChrID0gMDsgayA8IDI7IGsrKykgeworICAgIGZvdW5kX3NpZ25hbHMgPSBOVUxMOworCisgICAgLyogRm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBzb21ldGltZXMgcGFkcywgYWxzbyBsaXN0IGEgZmV3IHVzZWZ1bCBHc3RFbGVtZW50CisgICAgICogc2lnbmFscy4gUHV0IHRoZXNlIGZpcnN0LCBzbyBlbGVtZW50LXNwZWNpZmljIG9uZXMgY29tZSBsYXRlci4gKi8KKyAgICBpZiAoayA9PSAwICYmIGhhc19zb21ldGltZXNfdGVtcGxhdGUgKGVsZW1lbnQpKSB7CisgICAgICBxdWVyeSA9IGdfbmV3MCAoR1NpZ25hbFF1ZXJ5LCAxKTsKKyAgICAgIGdfc2lnbmFsX3F1ZXJ5IChnX3NpZ25hbF9sb29rdXAgKCJwYWQtYWRkZWQiLCBHU1RfVFlQRV9FTEVNRU5UKSwgcXVlcnkpOworICAgICAgZm91bmRfc2lnbmFscyA9IGdfc2xpc3RfYXBwZW5kIChmb3VuZF9zaWduYWxzLCBxdWVyeSk7CisgICAgICBxdWVyeSA9IGdfbmV3MCAoR1NpZ25hbFF1ZXJ5LCAxKTsKKyAgICAgIGdfc2lnbmFsX3F1ZXJ5IChnX3NpZ25hbF9sb29rdXAgKCJwYWQtcmVtb3ZlZCIsIEdTVF9UWVBFX0VMRU1FTlQpLCBxdWVyeSk7CisgICAgICBmb3VuZF9zaWduYWxzID0gZ19zbGlzdF9hcHBlbmQgKGZvdW5kX3NpZ25hbHMsIHF1ZXJ5KTsKKyAgICAgIHF1ZXJ5ID0gZ19uZXcwIChHU2lnbmFsUXVlcnksIDEpOworICAgICAgZ19zaWduYWxfcXVlcnkgKGdfc2lnbmFsX2xvb2t1cCAoIm5vLW1vcmUtcGFkcyIsIEdTVF9UWVBFX0VMRU1FTlQpLAorICAgICAgICAgIHF1ZXJ5KTsKKyAgICAgIGZvdW5kX3NpZ25hbHMgPSBnX3NsaXN0X2FwcGVuZCAoZm91bmRfc2lnbmFscywgcXVlcnkpOworICAgIH0KKworICAgIGZvciAodHlwZSA9IEdfT0JKRUNUX1RZUEUgKGVsZW1lbnQpOyB0eXBlOyB0eXBlID0gZ190eXBlX3BhcmVudCAodHlwZSkpIHsKKyAgICAgIGlmICh0eXBlID09IEdTVF9UWVBFX0VMRU1FTlQgfHwgdHlwZSA9PSBHU1RfVFlQRV9PQkpFQ1QpCisgICAgICAgIGJyZWFrOworCisgICAgICBpZiAodHlwZSA9PSBHU1RfVFlQRV9CSU4gJiYgR19PQkpFQ1RfVFlQRSAoZWxlbWVudCkgIT0gR1NUX1RZUEVfQklOKQorICAgICAgICBjb250aW51ZTsKKworICAgICAgc2lnbmFscyA9IGdfc2lnbmFsX2xpc3RfaWRzICh0eXBlLCAmbnNpZ25hbHMpOworICAgICAgZm9yIChpID0gMDsgaSA8IG5zaWduYWxzOyBpKyspIHsKKyAgICAgICAgcXVlcnkgPSBnX25ldzAgKEdTaWduYWxRdWVyeSwgMSk7CisgICAgICAgIGdfc2lnbmFsX3F1ZXJ5IChzaWduYWxzW2ldLCBxdWVyeSk7CisKKyAgICAgICAgaWYgKChrID09IDAgJiYgIShxdWVyeS0+c2lnbmFsX2ZsYWdzICYgR19TSUdOQUxfQUNUSU9OKSkgfHwKKyAgICAgICAgICAgIChrID09IDEgJiYgKHF1ZXJ5LT5zaWduYWxfZmxhZ3MgJiBHX1NJR05BTF9BQ1RJT04pKSkKKyAgICAgICAgICBmb3VuZF9zaWduYWxzID0gZ19zbGlzdF9hcHBlbmQgKGZvdW5kX3NpZ25hbHMsIHF1ZXJ5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGdfZnJlZSAocXVlcnkpOworICAgICAgfQorICAgICAgZ19mcmVlIChzaWduYWxzKTsKKyAgICAgIHNpZ25hbHMgPSBOVUxMOworICAgIH0KKworICAgIGlmIChmb3VuZF9zaWduYWxzKSB7CisgICAgICBuX3ByaW50ICgiXG4iKTsKKyAgICAgIGlmIChrID09IDApCisgICAgICAgIG5fcHJpbnQgKCJFbGVtZW50IFNpZ25hbHM6XG4iKTsKKyAgICAgIGVsc2UKKyAgICAgICAgbl9wcmludCAoIkVsZW1lbnQgQWN0aW9uczpcbiIpOworICAgIH0gZWxzZSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBmb3IgKGwgPSBmb3VuZF9zaWduYWxzOyBsOyBsID0gbC0+bmV4dCkgeworICAgICAgZ2NoYXIgKmluZGVudDsKKyAgICAgIGludCBpbmRlbnRfbGVuOworCisgICAgICBxdWVyeSA9IChHU2lnbmFsUXVlcnkgKikgbC0+ZGF0YTsKKyAgICAgIGluZGVudF9sZW4gPSBzdHJsZW4gKHF1ZXJ5LT5zaWduYWxfbmFtZSkgKworICAgICAgICAgIHN0cmxlbiAoZ190eXBlX25hbWUgKHF1ZXJ5LT5yZXR1cm5fdHlwZSkpICsgMjQ7CisKKyAgICAgIGluZGVudCA9IGdfbmV3MCAoZ2NoYXIsIGluZGVudF9sZW4gKyAxKTsKKyAgICAgIG1lbXNldCAoaW5kZW50LCAnICcsIGluZGVudF9sZW4pOworCisgICAgICBuX3ByaW50ICgiICBcIiVzXCIgOiAgJXMgdXNlcl9mdW5jdGlvbiAoJXMqIG9iamVjdCIsCisgICAgICAgICAgcXVlcnktPnNpZ25hbF9uYW1lLAorICAgICAgICAgIGdfdHlwZV9uYW1lIChxdWVyeS0+cmV0dXJuX3R5cGUpLCBnX3R5cGVfbmFtZSAodHlwZSkpOworCisgICAgICBmb3IgKGogPSAwOyBqIDwgcXVlcnktPm5fcGFyYW1zOyBqKyspIHsKKyAgICAgICAgaWYgKF9uYW1lKQorICAgICAgICAgIGdfcHJpbnQgKCIlcyIsIF9uYW1lKTsKKyAgICAgICAgaWYgKEdfVFlQRV9JU19GVU5EQU1FTlRBTCAocXVlcnktPnBhcmFtX3R5cGVzW2pdKSkgeworICAgICAgICAgIGdfcHJpbnQgKCIsXG4lcyVzIGFyZyVkIiwgaW5kZW50LAorICAgICAgICAgICAgICBnX3R5cGVfbmFtZSAocXVlcnktPnBhcmFtX3R5cGVzW2pdKSwgaik7CisgICAgICAgIH0gZWxzZSBpZiAoR19UWVBFX0lTX0VOVU0gKHF1ZXJ5LT5wYXJhbV90eXBlc1tqXSkpIHsKKyAgICAgICAgICBnX3ByaW50ICgiLFxuJXMlcyBhcmclZCIsIGluZGVudCwKKyAgICAgICAgICAgICAgZ190eXBlX25hbWUgKHF1ZXJ5LT5wYXJhbV90eXBlc1tqXSksIGopOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGdfcHJpbnQgKCIsXG4lcyVzKiBhcmclZCIsIGluZGVudCwKKyAgICAgICAgICAgICAgZ190eXBlX25hbWUgKHF1ZXJ5LT5wYXJhbV90eXBlc1tqXSksIGopOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChrID09IDApIHsKKyAgICAgICAgaWYgKF9uYW1lKQorICAgICAgICAgIGdfcHJpbnQgKCIlcyIsIF9uYW1lKTsKKyAgICAgICAgZ19wcmludCAoIixcbiVzZ3BvaW50ZXIgdXNlcl9kYXRhKTtcbiIsIGluZGVudCk7CisgICAgICB9IGVsc2UKKyAgICAgICAgZ19wcmludCAoIik7XG4iKTsKKworICAgICAgZ19mcmVlIChpbmRlbnQpOworICAgIH0KKworICAgIGlmIChmb3VuZF9zaWduYWxzKSB7CisgICAgICBnX3NsaXN0X2ZvcmVhY2ggKGZvdW5kX3NpZ25hbHMsIChHRnVuYykgZ19mcmVlLCBOVUxMKTsKKyAgICAgIGdfc2xpc3RfZnJlZSAoZm91bmRfc2lnbmFscyk7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyB2b2lkCitwcmludF9jaGlsZHJlbl9pbmZvIChHc3RFbGVtZW50ICogZWxlbWVudCkKK3sKKyAgR0xpc3QgKmNoaWxkcmVuOworCisgIGlmICghR1NUX0lTX0JJTiAoZWxlbWVudCkpCisgICAgcmV0dXJuOworCisgIGNoaWxkcmVuID0gKEdMaXN0ICopIEdTVF9CSU4gKGVsZW1lbnQpLT5jaGlsZHJlbjsKKyAgaWYgKGNoaWxkcmVuKSB7CisgICAgbl9wcmludCAoIlxuIik7CisgICAgZ19wcmludCAoIkNoaWxkcmVuOlxuIik7CisgIH0KKworICB3aGlsZSAoY2hpbGRyZW4pIHsKKyAgICBuX3ByaW50ICgiICAlc1xuIiwgR1NUX0VMRU1FTlRfTkFNRSAoR1NUX0VMRU1FTlQgKGNoaWxkcmVuLT5kYXRhKSkpOworICAgIGNoaWxkcmVuID0gZ19saXN0X25leHQgKGNoaWxkcmVuKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorcHJpbnRfYmxhY2tsaXN0ICh2b2lkKQoreworICBHTGlzdCAqcGx1Z2lucywgKmN1cjsKKyAgZ2ludCBjb3VudCA9IDA7CisKKyAgZ19wcmludCAoIiVzXG4iLCBfKCJCbGFja2xpc3RlZCBmaWxlczoiKSk7CisKKyAgcGx1Z2lucyA9IGdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2dldF9wbHVnaW5fbGlzdCAoKTsKKyAgZm9yIChjdXIgPSBwbHVnaW5zOyBjdXIgIT0gTlVMTDsgY3VyID0gZ19saXN0X25leHQgKGN1cikpIHsKKyAgICBHc3RQbHVnaW4gKnBsdWdpbiA9IChHc3RQbHVnaW4gKikgKGN1ci0+ZGF0YSk7CisgICAgaWYgKHBsdWdpbi0+ZmxhZ3MgJiBHU1RfUExVR0lOX0ZMQUdfQkxBQ0tMSVNURUQpIHsKKyAgICAgIGdfcHJpbnQgKCIgICVzXG4iLCBwbHVnaW4tPmRlc2MubmFtZSk7CisgICAgICBjb3VudCsrOworICAgIH0KKyAgfQorCisgIGdfcHJpbnQgKCJcbiIpOworICBnX3ByaW50IChfKCJUb3RhbCBjb3VudDogIikpOworICBnX3ByaW50IChuZ2V0dGV4dCAoIiVkIGJsYWNrbGlzdGVkIGZpbGUiLCAiJWQgYmxhY2tsaXN0ZWQgZmlsZXMiLCBjb3VudCksCisgICAgICBjb3VudCk7CisgIGdfcHJpbnQgKCJcbiIpOworICBnc3RfcGx1Z2luX2xpc3RfZnJlZSAocGx1Z2lucyk7Cit9CisKK3N0YXRpYyB2b2lkCitwcmludF9lbGVtZW50X2xpc3QgKGdib29sZWFuIHByaW50X2FsbCkKK3sKKyAgaW50IHBsdWdpbmNvdW50ID0gMCwgZmVhdHVyZWNvdW50ID0gMCwgYmxhY2tsaXN0Y291bnQgPSAwOworICBHTGlzdCAqcGx1Z2lucywgKm9yaWdfcGx1Z2luczsKKworICBvcmlnX3BsdWdpbnMgPSBwbHVnaW5zID0gZ3N0X2RlZmF1bHRfcmVnaXN0cnlfZ2V0X3BsdWdpbl9saXN0ICgpOworICB3aGlsZSAocGx1Z2lucykgeworICAgIEdMaXN0ICpmZWF0dXJlcywgKm9yaWdfZmVhdHVyZXM7CisgICAgR3N0UGx1Z2luICpwbHVnaW47CisKKyAgICBwbHVnaW4gPSAoR3N0UGx1Z2luICopIChwbHVnaW5zLT5kYXRhKTsKKyAgICBwbHVnaW5zID0gZ19saXN0X25leHQgKHBsdWdpbnMpOworICAgIHBsdWdpbmNvdW50Kys7CisKKyAgICBpZiAocGx1Z2luLT5mbGFncyAmIEdTVF9QTFVHSU5fRkxBR19CTEFDS0xJU1RFRCkgeworICAgICAgYmxhY2tsaXN0Y291bnQrKzsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIG9yaWdfZmVhdHVyZXMgPSBmZWF0dXJlcyA9CisgICAgICAgIGdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2J5X3BsdWdpbiAoZ3N0X3JlZ2lzdHJ5X2dldF9kZWZhdWx0ICgpLAorICAgICAgICBwbHVnaW4tPmRlc2MubmFtZSk7CisgICAgd2hpbGUgKGZlYXR1cmVzKSB7CisgICAgICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlOworCisgICAgICBpZiAoR19VTkxJS0VMWSAoZmVhdHVyZXMtPmRhdGEgPT0gTlVMTCkpCisgICAgICAgIGdvdG8gbmV4dDsKKyAgICAgIGZlYXR1cmUgPSBHU1RfUExVR0lOX0ZFQVRVUkUgKGZlYXR1cmVzLT5kYXRhKTsKKyAgICAgIGZlYXR1cmVjb3VudCsrOworCisgICAgICBpZiAoR1NUX0lTX0VMRU1FTlRfRkFDVE9SWSAoZmVhdHVyZSkpIHsKKyAgICAgICAgR3N0RWxlbWVudEZhY3RvcnkgKmZhY3Rvcnk7CisKKyAgICAgICAgZmFjdG9yeSA9IEdTVF9FTEVNRU5UX0ZBQ1RPUlkgKGZlYXR1cmUpOworICAgICAgICBpZiAocHJpbnRfYWxsKQorICAgICAgICAgIHByaW50X2VsZW1lbnRfaW5mbyAoZmFjdG9yeSwgVFJVRSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBnX3ByaW50ICgiJXM6ICAlczogJXNcbiIsIHBsdWdpbi0+ZGVzYy5uYW1lLAorICAgICAgICAgICAgICBHU1RfT0JKRUNUX05BTUUgKGZhY3RvcnkpLAorICAgICAgICAgICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9sb25nbmFtZSAoZmFjdG9yeSkpOworICAgICAgfSBlbHNlIGlmIChHU1RfSVNfSU5ERVhfRkFDVE9SWSAoZmVhdHVyZSkpIHsKKyAgICAgICAgR3N0SW5kZXhGYWN0b3J5ICpmYWN0b3J5OworCisgICAgICAgIGZhY3RvcnkgPSBHU1RfSU5ERVhfRkFDVE9SWSAoZmVhdHVyZSk7CisgICAgICAgIGlmICghcHJpbnRfYWxsKQorICAgICAgICAgIGdfcHJpbnQgKCIlczogICVzOiAlc1xuIiwgcGx1Z2luLT5kZXNjLm5hbWUsCisgICAgICAgICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoZmFjdG9yeSksIGZhY3RvcnktPmxvbmdkZXNjKTsKKyAgICAgIH0gZWxzZSBpZiAoR1NUX0lTX1RZUEVfRklORF9GQUNUT1JZIChmZWF0dXJlKSkgeworICAgICAgICBHc3RUeXBlRmluZEZhY3RvcnkgKmZhY3Rvcnk7CisKKyAgICAgICAgZmFjdG9yeSA9IEdTVF9UWVBFX0ZJTkRfRkFDVE9SWSAoZmVhdHVyZSk7CisgICAgICAgIGlmICghcHJpbnRfYWxsKQorICAgICAgICAgIGdfcHJpbnQgKCIlczogJXM6ICIsIHBsdWdpbi0+ZGVzYy5uYW1lLAorICAgICAgICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X25hbWUgKGZlYXR1cmUpKTsKKyAgICAgICAgaWYgKGZhY3RvcnktPmV4dGVuc2lvbnMpIHsKKyAgICAgICAgICBndWludCBpID0gMDsKKworICAgICAgICAgIHdoaWxlIChmYWN0b3J5LT5leHRlbnNpb25zW2ldKSB7CisgICAgICAgICAgICBpZiAoIXByaW50X2FsbCkKKyAgICAgICAgICAgICAgZ19wcmludCAoIiVzJXMiLCBpID4gMCA/ICIsICIgOiAiIiwgZmFjdG9yeS0+ZXh0ZW5zaW9uc1tpXSk7CisgICAgICAgICAgICBpKys7CisgICAgICAgICAgfQorICAgICAgICAgIGlmICghcHJpbnRfYWxsKQorICAgICAgICAgICAgZ19wcmludCAoIlxuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaWYgKCFwcmludF9hbGwpCisgICAgICAgICAgICBnX3ByaW50ICgibm8gZXh0ZW5zaW9uc1xuIik7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghcHJpbnRfYWxsKQorICAgICAgICAgIG5fcHJpbnQgKCIlczogICVzICglcylcbiIsIHBsdWdpbi0+ZGVzYy5uYW1lLAorICAgICAgICAgICAgICBHU1RfT0JKRUNUX05BTUUgKGZlYXR1cmUpLCBnX3R5cGVfbmFtZSAoR19PQkpFQ1RfVFlQRSAoZmVhdHVyZSkpKTsKKyAgICAgIH0KKworICAgIG5leHQ6CisgICAgICBmZWF0dXJlcyA9IGdfbGlzdF9uZXh0IChmZWF0dXJlcyk7CisgICAgfQorCisgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSAob3JpZ19mZWF0dXJlcyk7CisgIH0KKworICBnc3RfcGx1Z2luX2xpc3RfZnJlZSAob3JpZ19wbHVnaW5zKTsKKworICBnX3ByaW50ICgiXG4iKTsKKyAgZ19wcmludCAoXygiVG90YWwgY291bnQ6ICIpKTsKKyAgZ19wcmludCAobmdldHRleHQgKCIlZCBwbHVnaW4iLCAiJWQgcGx1Z2lucyIsIHBsdWdpbmNvdW50KSwgcGx1Z2luY291bnQpOworICBpZiAoYmxhY2tsaXN0Y291bnQpIHsKKyAgICBnX3ByaW50ICgiICgiKTsKKyAgICBnX3ByaW50IChuZ2V0dGV4dCAoIiVkIGJsYWNrbGlzdCBlbnRyeSIsICIlZCBibGFja2xpc3QgZW50cmllcyIsCisgICAgICAgICAgICBibGFja2xpc3Rjb3VudCksIGJsYWNrbGlzdGNvdW50KTsKKyAgICBnX3ByaW50ICgiIG5vdCBzaG93bikiKTsKKyAgfQorICBnX3ByaW50ICgiLCAiKTsKKyAgZ19wcmludCAobmdldHRleHQgKCIlZCBmZWF0dXJlIiwgIiVkIGZlYXR1cmVzIiwgZmVhdHVyZWNvdW50KSwgZmVhdHVyZWNvdW50KTsKKyAgZ19wcmludCAoIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkCitwcmludF9hbGxfdXJpX2hhbmRsZXJzICh2b2lkKQoreworICBHTGlzdCAqcGx1Z2lucywgKnAsICpmZWF0dXJlcywgKmY7CisKKyAgcGx1Z2lucyA9IGdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2dldF9wbHVnaW5fbGlzdCAoKTsKKworICBmb3IgKHAgPSBwbHVnaW5zOyBwOyBwID0gcC0+bmV4dCkgeworICAgIEdzdFBsdWdpbiAqcGx1Z2luID0gKEdzdFBsdWdpbiAqKSAocC0+ZGF0YSk7CisKKyAgICBmZWF0dXJlcyA9CisgICAgICAgIGdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2J5X3BsdWdpbiAoZ3N0X3JlZ2lzdHJ5X2dldF9kZWZhdWx0ICgpLAorICAgICAgICBwbHVnaW4tPmRlc2MubmFtZSk7CisKKyAgICBmb3IgKGYgPSBmZWF0dXJlczsgZjsgZiA9IGYtPm5leHQpIHsKKyAgICAgIEdzdFBsdWdpbkZlYXR1cmUgKmZlYXR1cmUgPSBHU1RfUExVR0lOX0ZFQVRVUkUgKGYtPmRhdGEpOworCisgICAgICBpZiAoR1NUX0lTX0VMRU1FTlRfRkFDVE9SWSAoZmVhdHVyZSkpIHsKKyAgICAgICAgR3N0RWxlbWVudEZhY3RvcnkgKmZhY3Rvcnk7CisgICAgICAgIEdzdEVsZW1lbnQgKmVsZW1lbnQ7CisKKyAgICAgICAgZmFjdG9yeSA9IEdTVF9FTEVNRU5UX0ZBQ1RPUlkgKGdzdF9wbHVnaW5fZmVhdHVyZV9sb2FkIChmZWF0dXJlKSk7CisgICAgICAgIGlmICghZmFjdG9yeSkgeworICAgICAgICAgIGdfcHJpbnQgKCJlbGVtZW50IHBsdWdpbiAlcyBjb3VsZG4ndCBiZSBsb2FkZWRcbiIsIHBsdWdpbi0+ZGVzYy5uYW1lKTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGVsZW1lbnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2NyZWF0ZSAoZmFjdG9yeSwgTlVMTCk7CisgICAgICAgIGlmICghZWxlbWVudCkgeworICAgICAgICAgIGdfcHJpbnQgKCJjb3VsZG4ndCBjb25zdHJ1Y3QgZWxlbWVudCBmb3IgJXMgZm9yIHNvbWUgcmVhc29uXG4iLAorICAgICAgICAgICAgICBHU1RfT0JKRUNUX05BTUUgKGZhY3RvcnkpKTsKKyAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChmYWN0b3J5KTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChHU1RfSVNfVVJJX0hBTkRMRVIgKGVsZW1lbnQpKSB7CisgICAgICAgICAgY29uc3QgZ2NoYXIgKmRpcjsKKyAgICAgICAgICBnY2hhciAqKnVyaV9wcm90b2NvbHMsICpqb2luZWQ7CisKKyAgICAgICAgICBzd2l0Y2ggKGdzdF91cmlfaGFuZGxlcl9nZXRfdXJpX3R5cGUgKEdTVF9VUklfSEFORExFUiAoZWxlbWVudCkpKSB7CisgICAgICAgICAgICBjYXNlIEdTVF9VUklfU1JDOgorICAgICAgICAgICAgICBkaXIgPSAicmVhZCI7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBHU1RfVVJJX1NJTks6CisgICAgICAgICAgICAgIGRpciA9ICJ3cml0ZSI7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgZGlyID0gInVua25vd24iOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICB1cmlfcHJvdG9jb2xzID0KKyAgICAgICAgICAgICAgZ3N0X3VyaV9oYW5kbGVyX2dldF9wcm90b2NvbHMgKEdTVF9VUklfSEFORExFUiAoZWxlbWVudCkpOworICAgICAgICAgIGpvaW5lZCA9IGdfc3Ryam9pbnYgKCIsICIsIHVyaV9wcm90b2NvbHMpOworCisgICAgICAgICAgZ19wcmludCAoIiVzICglcywgcmFuayAldSk6ICVzXG4iLAorICAgICAgICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X25hbWUgKEdTVF9QTFVHSU5fRkVBVFVSRSAoZmFjdG9yeSkpLCBkaXIsCisgICAgICAgICAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfcmFuayAoR1NUX1BMVUdJTl9GRUFUVVJFIChmYWN0b3J5KSksCisgICAgICAgICAgICAgIGpvaW5lZCk7CisKKyAgICAgICAgICBnX2ZyZWUgKGpvaW5lZCk7CisgICAgICAgIH0KKworICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtZW50KTsKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZiAoZmFjdG9yeSk7CisgICAgICB9CisgICAgfQorCisgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSAoZmVhdHVyZXMpOworICB9CisKKyAgZ3N0X3BsdWdpbl9saXN0X2ZyZWUgKHBsdWdpbnMpOworfQorCitzdGF0aWMgdm9pZAorcHJpbnRfcGx1Z2luX2luZm8gKEdzdFBsdWdpbiAqIHBsdWdpbikKK3sKKyAgbl9wcmludCAoIlBsdWdpbiBEZXRhaWxzOlxuIik7CisgIG5fcHJpbnQgKCIgIE5hbWU6XHRcdFx0JXNcbiIsIHBsdWdpbi0+ZGVzYy5uYW1lKTsKKyAgbl9wcmludCAoIiAgRGVzY3JpcHRpb246XHRcdCVzXG4iLCBwbHVnaW4tPmRlc2MuZGVzY3JpcHRpb24pOworICBuX3ByaW50ICgiICBGaWxlbmFtZTpcdFx0JXNcbiIsCisgICAgICBwbHVnaW4tPmZpbGVuYW1lID8gcGx1Z2luLT5maWxlbmFtZSA6ICIobnVsbCkiKTsKKyAgbl9wcmludCAoIiAgVmVyc2lvbjpcdFx0JXNcbiIsIHBsdWdpbi0+ZGVzYy52ZXJzaW9uKTsKKyAgbl9wcmludCAoIiAgTGljZW5zZTpcdFx0JXNcbiIsIHBsdWdpbi0+ZGVzYy5saWNlbnNlKTsKKyAgbl9wcmludCAoIiAgU291cmNlIG1vZHVsZTpcdCVzXG4iLCBwbHVnaW4tPmRlc2Muc291cmNlKTsKKyAgaWYgKHBsdWdpbi0+ZGVzYy5yZWxlYXNlX2RhdGV0aW1lICE9IE5VTEwpIHsKKyAgICBjb25zdCBnY2hhciAqdHogPSAiKFVUQykiOworICAgIGdjaGFyICpzdHIsICpzZXA7CisKKyAgICAvKiBtYXkgYmU6IFlZWVktTU0tREQgb3IgWVlZWS1NTS1ERFRISDpNTVogKi8KKyAgICAvKiBZWVlZLU1NLUREVEhIOk1NWiA9PiBZWVlZLU1NLUREIEhIOk1NIChVVEMpICovCisgICAgc3RyID0gZ19zdHJkdXAgKHBsdWdpbi0+ZGVzYy5yZWxlYXNlX2RhdGV0aW1lKTsKKyAgICBzZXAgPSBzdHJzdHIgKHN0ciwgIlQiKTsKKyAgICBpZiAoc2VwICE9IE5VTEwpIHsKKyAgICAgICpzZXAgPSAnICc7CisgICAgICBzZXAgPSBzdHJzdHIgKHNlcCArIDEsICJaIik7CisgICAgICBpZiAoc2VwICE9IE5VTEwpCisgICAgICAgICpzZXAgPSAnICc7CisgICAgfSBlbHNlIHsKKyAgICAgIHR6ID0gIiI7CisgICAgfQorICAgIG5fcHJpbnQgKCIgIFNvdXJjZSByZWxlYXNlIGRhdGU6XHQlcyVzXG4iLCBzdHIsIHR6KTsKKyAgICBnX2ZyZWUgKHN0cik7CisgIH0KKyAgbl9wcmludCAoIiAgQmluYXJ5IHBhY2thZ2U6XHQlc1xuIiwgcGx1Z2luLT5kZXNjLnBhY2thZ2UpOworICBuX3ByaW50ICgiICBPcmlnaW4gVVJMOlx0XHQlc1xuIiwgcGx1Z2luLT5kZXNjLm9yaWdpbik7CisgIG5fcHJpbnQgKCJcbiIpOworfQorCitzdGF0aWMgdm9pZAorcHJpbnRfcGx1Z2luX2ZlYXR1cmVzIChHc3RQbHVnaW4gKiBwbHVnaW4pCit7CisgIEdMaXN0ICpmZWF0dXJlczsKKyAgZ2ludCBudW1fZmVhdHVyZXMgPSAwOworICBnaW50IG51bV9lbGVtZW50cyA9IDA7CisgIGdpbnQgbnVtX3R5cGVmaW5kZXJzID0gMDsKKyAgZ2ludCBudW1faW5kZXhlcyA9IDA7CisgIGdpbnQgbnVtX290aGVyID0gMDsKKworICBmZWF0dXJlcyA9CisgICAgICBnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9ieV9wbHVnaW4gKGdzdF9yZWdpc3RyeV9nZXRfZGVmYXVsdCAoKSwKKyAgICAgIHBsdWdpbi0+ZGVzYy5uYW1lKTsKKworICB3aGlsZSAoZmVhdHVyZXMpIHsKKyAgICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlOworCisgICAgZmVhdHVyZSA9IEdTVF9QTFVHSU5fRkVBVFVSRSAoZmVhdHVyZXMtPmRhdGEpOworCisgICAgaWYgKEdTVF9JU19FTEVNRU5UX0ZBQ1RPUlkgKGZlYXR1cmUpKSB7CisgICAgICBHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeTsKKworICAgICAgZmFjdG9yeSA9IEdTVF9FTEVNRU5UX0ZBQ1RPUlkgKGZlYXR1cmUpOworICAgICAgbl9wcmludCAoIiAgJXM6ICVzXG4iLCBHU1RfT0JKRUNUX05BTUUgKGZhY3RvcnkpLAorICAgICAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X2xvbmduYW1lIChmYWN0b3J5KSk7CisgICAgICBudW1fZWxlbWVudHMrKzsKKyAgICB9IGVsc2UgaWYgKEdTVF9JU19JTkRFWF9GQUNUT1JZIChmZWF0dXJlKSkgeworICAgICAgR3N0SW5kZXhGYWN0b3J5ICpmYWN0b3J5OworCisgICAgICBmYWN0b3J5ID0gR1NUX0lOREVYX0ZBQ1RPUlkgKGZlYXR1cmUpOworICAgICAgbl9wcmludCAoIiAgJXM6ICVzXG4iLCBHU1RfT0JKRUNUX05BTUUgKGZhY3RvcnkpLCBmYWN0b3J5LT5sb25nZGVzYyk7CisgICAgICBudW1faW5kZXhlcysrOworICAgIH0gZWxzZSBpZiAoR1NUX0lTX1RZUEVfRklORF9GQUNUT1JZIChmZWF0dXJlKSkgeworICAgICAgR3N0VHlwZUZpbmRGYWN0b3J5ICpmYWN0b3J5OworCisgICAgICBmYWN0b3J5ID0gR1NUX1RZUEVfRklORF9GQUNUT1JZIChmZWF0dXJlKTsKKyAgICAgIGlmIChmYWN0b3J5LT5leHRlbnNpb25zKSB7CisgICAgICAgIGd1aW50IGkgPSAwOworCisgICAgICAgIGdfcHJpbnQgKCIlczogJXM6ICIsIHBsdWdpbi0+ZGVzYy5uYW1lLAorICAgICAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9uYW1lIChmZWF0dXJlKSk7CisgICAgICAgIHdoaWxlIChmYWN0b3J5LT5leHRlbnNpb25zW2ldKSB7CisgICAgICAgICAgZ19wcmludCAoIiVzJXMiLCBpID4gMCA/ICIsICIgOiAiIiwgZmFjdG9yeS0+ZXh0ZW5zaW9uc1tpXSk7CisgICAgICAgICAgaSsrOworICAgICAgICB9CisgICAgICAgIGdfcHJpbnQgKCJcbiIpOworICAgICAgfSBlbHNlCisgICAgICAgIGdfcHJpbnQgKCIlczogJXM6IG5vIGV4dGVuc2lvbnNcbiIsIHBsdWdpbi0+ZGVzYy5uYW1lLAorICAgICAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9uYW1lIChmZWF0dXJlKSk7CisKKyAgICAgIG51bV90eXBlZmluZGVycysrOworICAgIH0gZWxzZSBpZiAoZmVhdHVyZSkgeworICAgICAgbl9wcmludCAoIiAgJXMgKCVzKVxuIiwgZ3N0X29iamVjdF9nZXRfbmFtZSAoR1NUX09CSkVDVCAoZmVhdHVyZSkpLAorICAgICAgICAgIGdfdHlwZV9uYW1lIChHX09CSkVDVF9UWVBFIChmZWF0dXJlKSkpOworICAgICAgbnVtX290aGVyKys7CisgICAgfQorICAgIG51bV9mZWF0dXJlcysrOworICAgIGZlYXR1cmVzID0gZ19saXN0X25leHQgKGZlYXR1cmVzKTsKKyAgfQorICBuX3ByaW50ICgiXG4iKTsKKyAgbl9wcmludCAoIiAgJWQgZmVhdHVyZXM6XG4iLCBudW1fZmVhdHVyZXMpOworICBpZiAobnVtX2VsZW1lbnRzID4gMCkKKyAgICBuX3ByaW50ICgiICArLS0gJWQgZWxlbWVudHNcbiIsIG51bV9lbGVtZW50cyk7CisgIGlmIChudW1fdHlwZWZpbmRlcnMgPiAwKQorICAgIG5fcHJpbnQgKCIgICstLSAlZCB0eXBlZmluZGVyc1xuIiwgbnVtX3R5cGVmaW5kZXJzKTsKKyAgaWYgKG51bV9pbmRleGVzID4gMCkKKyAgICBuX3ByaW50ICgiICArLS0gJWQgaW5kZXhlc1xuIiwgbnVtX2luZGV4ZXMpOworICBpZiAobnVtX290aGVyID4gMCkKKyAgICBuX3ByaW50ICgiICArLS0gJWQgb3RoZXIgb2JqZWN0c1xuIiwgbnVtX290aGVyKTsKKworICBuX3ByaW50ICgiXG4iKTsKK30KKworc3RhdGljIGludAorcHJpbnRfZWxlbWVudF9mZWF0dXJlcyAoY29uc3QgZ2NoYXIgKiBlbGVtZW50X25hbWUpCit7CisgIEdzdFBsdWdpbkZlYXR1cmUgKmZlYXR1cmU7CisKKyAgLyogRklYTUUgaW1wbGVtZW50IG90aGVyIHByZXR0eSBwcmludCBmdW5jdGlvbiBmb3IgdGhlc2UgKi8KKyAgZmVhdHVyZSA9IGdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2ZpbmRfZmVhdHVyZSAoZWxlbWVudF9uYW1lLAorICAgICAgR1NUX1RZUEVfSU5ERVhfRkFDVE9SWSk7CisgIGlmIChmZWF0dXJlKSB7CisgICAgbl9wcmludCAoIiVzOiBhbiBpbmRleFxuIiwgZWxlbWVudF9uYW1lKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBmZWF0dXJlID0gZ3N0X2RlZmF1bHRfcmVnaXN0cnlfZmluZF9mZWF0dXJlIChlbGVtZW50X25hbWUsCisgICAgICBHU1RfVFlQRV9UWVBFX0ZJTkRfRkFDVE9SWSk7CisgIGlmIChmZWF0dXJlKSB7CisgICAgbl9wcmludCAoIiVzOiBhIHR5cGVmaW5kIGZ1bmN0aW9uXG4iLCBlbGVtZW50X25hbWUpOworICAgIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50CitwcmludF9lbGVtZW50X2luZm8gKEdzdEVsZW1lbnRGYWN0b3J5ICogZmFjdG9yeSwgZ2Jvb2xlYW4gcHJpbnRfbmFtZXMpCit7CisgIEdzdEVsZW1lbnQgKmVsZW1lbnQ7CisgIGdpbnQgbWF4bGV2ZWwgPSAwOworCisgIGZhY3RvcnkgPQorICAgICAgR1NUX0VMRU1FTlRfRkFDVE9SWSAoZ3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQgKEdTVF9QTFVHSU5fRkVBVFVSRQorICAgICAgICAgIChmYWN0b3J5KSkpOworCisgIGlmICghZmFjdG9yeSkgeworICAgIGdfcHJpbnQgKCJlbGVtZW50IHBsdWdpbiBjb3VsZG4ndCBiZSBsb2FkZWRcbiIpOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIGVsZW1lbnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2NyZWF0ZSAoZmFjdG9yeSwgTlVMTCk7CisgIGlmICghZWxlbWVudCkgeworICAgIGdfcHJpbnQgKCJjb3VsZG4ndCBjb25zdHJ1Y3QgZWxlbWVudCBmb3Igc29tZSByZWFzb25cbiIpOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIGlmIChwcmludF9uYW1lcykKKyAgICBfbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzOiAiLCBHU1RfT0JKRUNUX05BTUUgKGZhY3RvcnkpKTsKKyAgZWxzZQorICAgIF9uYW1lID0gTlVMTDsKKworICBwcmludF9mYWN0b3J5X2RldGFpbHNfaW5mbyAoZmFjdG9yeSk7CisgIGlmIChHU1RfUExVR0lOX0ZFQVRVUkUgKGZhY3RvcnkpLT5wbHVnaW5fbmFtZSkgeworICAgIEdzdFBsdWdpbiAqcGx1Z2luOworCisgICAgcGx1Z2luID0gZ3N0X3JlZ2lzdHJ5X2ZpbmRfcGx1Z2luIChnc3RfcmVnaXN0cnlfZ2V0X2RlZmF1bHQgKCksCisgICAgICAgIEdTVF9QTFVHSU5fRkVBVFVSRSAoZmFjdG9yeSktPnBsdWdpbl9uYW1lKTsKKyAgICBpZiAocGx1Z2luKSB7CisgICAgICBwcmludF9wbHVnaW5faW5mbyAocGx1Z2luKTsKKyAgICB9CisgIH0KKworICBwcmludF9oaWVyYXJjaHkgKEdfT0JKRUNUX1RZUEUgKGVsZW1lbnQpLCAwLCAmbWF4bGV2ZWwpOworICBwcmludF9pbnRlcmZhY2VzIChHX09CSkVDVF9UWVBFIChlbGVtZW50KSk7CisKKyAgcHJpbnRfcGFkX3RlbXBsYXRlc19pbmZvIChlbGVtZW50LCBmYWN0b3J5KTsKKyAgcHJpbnRfZWxlbWVudF9mbGFnX2luZm8gKGVsZW1lbnQpOworICBwcmludF9pbXBsZW1lbnRhdGlvbl9pbmZvIChlbGVtZW50KTsKKyAgcHJpbnRfY2xvY2tpbmdfaW5mbyAoZWxlbWVudCk7CisgIHByaW50X2luZGV4X2luZm8gKGVsZW1lbnQpOworICBwcmludF91cmlfaGFuZGxlcl9pbmZvIChlbGVtZW50KTsKKyAgcHJpbnRfcGFkX2luZm8gKGVsZW1lbnQpOworICBwcmludF9lbGVtZW50X3Byb3BlcnRpZXNfaW5mbyAoZWxlbWVudCk7CisgIHByaW50X3NpZ25hbF9pbmZvIChlbGVtZW50KTsKKyAgcHJpbnRfY2hpbGRyZW5faW5mbyAoZWxlbWVudCk7CisKKyAgZ3N0X29iamVjdF91bnJlZiAoZWxlbWVudCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKGZhY3RvcnkpOworICBnX2ZyZWUgKF9uYW1lKTsKKworICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZAorcHJpbnRfcGx1Z2luX2F1dG9tYXRpY19pbnN0YWxsX2luZm9fY29kZWNzIChHc3RFbGVtZW50RmFjdG9yeSAqIGZhY3RvcnkpCit7CisgIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb247CisgIGNvbnN0IGdjaGFyICp0eXBlX25hbWU7CisgIGNvbnN0IGdjaGFyICprbGFzczsKKyAgY29uc3QgR0xpc3QgKnN0YXRpY190ZW1wbGF0ZXMsICpsOworICBHc3RDYXBzICpjYXBzID0gTlVMTDsKKyAgZ3VpbnQgaSwgbnVtOworCisgIGtsYXNzID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfa2xhc3MgKGZhY3RvcnkpOworICBnX3JldHVybl9pZl9mYWlsIChrbGFzcyAhPSBOVUxMKTsKKworICBpZiAoc3Ryc3RyIChrbGFzcywgIkRlbXV4ZXIiKSB8fAorICAgICAgc3Ryc3RyIChrbGFzcywgIkRlY29kZXIiKSB8fAorICAgICAgc3Ryc3RyIChrbGFzcywgIkRlcGF5IikgfHwgc3Ryc3RyIChrbGFzcywgIlBhcnNlciIpKSB7CisgICAgdHlwZV9uYW1lID0gImRlY29kZXIiOworICAgIGRpcmVjdGlvbiA9IEdTVF9QQURfU0lOSzsKKyAgfSBlbHNlIGlmIChzdHJzdHIgKGtsYXNzLCAiTXV4ZXIiKSB8fAorICAgICAgc3Ryc3RyIChrbGFzcywgIkVuY29kZXIiKSB8fCBzdHJzdHIgKGtsYXNzLCAiUGF5IikpIHsKKyAgICB0eXBlX25hbWUgPSAiZW5jb2RlciI7CisgICAgZGlyZWN0aW9uID0gR1NUX1BBRF9TUkM7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuOworICB9CisKKyAgLyogZGVjb2Rlci9kZW11eGVyIHNpbmsgcGFkcyBzaG91bGQgYWx3YXlzIGJlIHN0YXRpYyBhbmQgdGhlcmUgc2hvdWxkIG9ubHkKKyAgICogYmUgb25lLCB0aGUgc2FtZSBhcHBsaWVzIHRvIGVuY29kZXJzL211eGVycyBhbmQgc291cmNlIHBhZHMgKi8KKyAgc3RhdGljX3RlbXBsYXRlcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3N0YXRpY19wYWRfdGVtcGxhdGVzIChmYWN0b3J5KTsKKyAgZm9yIChsID0gc3RhdGljX3RlbXBsYXRlczsgbCAhPSBOVUxMOyBsID0gbC0+bmV4dCkgeworICAgIEdzdFN0YXRpY1BhZFRlbXBsYXRlICp0bXBsID0gTlVMTDsKKworICAgIHRtcGwgPSAoR3N0U3RhdGljUGFkVGVtcGxhdGUgKikgbC0+ZGF0YTsKKyAgICBpZiAodG1wbC0+ZGlyZWN0aW9uID09IGRpcmVjdGlvbikgeworICAgICAgY2FwcyA9IGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldF9jYXBzICh0bXBsKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIGlmIChjYXBzID09IE5VTEwpIHsKKyAgICBnX3ByaW50ZXJyICgiQ291bGRuJ3QgZmluZCBzdGF0aWMgcGFkIHRlbXBsYXRlIGZvciAlcyAnJXMnXG4iLAorICAgICAgICB0eXBlX25hbWUsIEdTVF9PQkpFQ1RfTkFNRSAoZmFjdG9yeSkpOworICAgIHJldHVybjsKKyAgfQorCisgIGNhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChjYXBzKTsKKyAgbnVtID0gZ3N0X2NhcHNfZ2V0X3NpemUgKGNhcHMpOworICBmb3IgKGkgPSAwOyBpIDwgbnVtOyArK2kpIHsKKyAgICBHc3RTdHJ1Y3R1cmUgKnM7CisgICAgZ2NoYXIgKnNfc3RyOworCisgICAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIGkpOworICAgIC8qIHJlbW92ZSBmaWVsZHMgdGhhdCBhcmUgYWxtb3N0IGFsd2F5cyBqdXN0IE1JTi1NQVggb2Ygc29tZSBzb3J0CisgICAgICogaW4gb3JkZXIgdG8gbWFrZSB0aGUgY2FwcyBsb29rIGxlc3MgbWVzc3kgKi8KKyAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCAocywgInBpeGVsLWFzcGVjdC1yYXRpbyIpOworICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkIChzLCAiZnJhbWVyYXRlIik7CisgICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKHMsICJjaGFubmVscyIpOworICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkIChzLCAid2lkdGgiKTsKKyAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCAocywgImhlaWdodCIpOworICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkIChzLCAicmF0ZSIpOworICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkIChzLCAiZGVwdGgiKTsKKyAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCAocywgImNsb2NrLXJhdGUiKTsKKyAgICBzX3N0ciA9IGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChzKTsKKyAgICBnX3ByaW50ICgiJXMtJXNcbiIsIHR5cGVfbmFtZSwgc19zdHIpOworICAgIGdfZnJlZSAoc19zdHIpOworICB9CisgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKK30KKworc3RhdGljIHZvaWQKK3ByaW50X3BsdWdpbl9hdXRvbWF0aWNfaW5zdGFsbF9pbmZvX3Byb3RvY29scyAoR3N0RWxlbWVudEZhY3RvcnkgKiBmYWN0b3J5KQoreworICBnY2hhciAqKnByb3RvY29scywgKipwOworCisgIHByb3RvY29scyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3VyaV9wcm90b2NvbHMgKGZhY3RvcnkpOworICBpZiAocHJvdG9jb2xzICE9IE5VTEwgJiYgKnByb3RvY29scyAhPSBOVUxMKSB7CisgICAgc3dpdGNoIChnc3RfZWxlbWVudF9mYWN0b3J5X2dldF91cmlfdHlwZSAoZmFjdG9yeSkpIHsKKyAgICAgIGNhc2UgR1NUX1VSSV9TSU5LOgorICAgICAgICBmb3IgKHAgPSBwcm90b2NvbHM7ICpwICE9IE5VTEw7ICsrcCkKKyAgICAgICAgICBnX3ByaW50ICgidXJpc2luay0lc1xuIiwgKnApOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR1NUX1VSSV9TUkM6CisgICAgICAgIGZvciAocCA9IHByb3RvY29sczsgKnAgIT0gTlVMTDsgKytwKQorICAgICAgICAgIGdfcHJpbnQgKCJ1cmlzb3VyY2UtJXNcbiIsICpwKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgZ19zdHJmcmVldiAocHJvdG9jb2xzKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorcHJpbnRfcGx1Z2luX2F1dG9tYXRpY19pbnN0YWxsX2luZm8gKEdzdFBsdWdpbiAqIHBsdWdpbikKK3sKKyAgY29uc3QgZ2NoYXIgKnBsdWdpbl9uYW1lOworICBHTGlzdCAqZmVhdHVyZXMsICpsOworCisgIHBsdWdpbl9uYW1lID0gZ3N0X3BsdWdpbl9nZXRfbmFtZSAocGx1Z2luKTsKKworICAvKiBub3QgaW50ZXJlc3RlZCBpbiB0eXBlZmluZCBmYWN0b3JpZXMsIG9ubHkgZWxlbWVudCBmYWN0b3JpZXMgKi8KKyAgZmVhdHVyZXMgPSBnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdCAoZ3N0X3JlZ2lzdHJ5X2dldF9kZWZhdWx0ICgpLAorICAgICAgR1NUX1RZUEVfRUxFTUVOVF9GQUNUT1JZKTsKKworICBmb3IgKGwgPSBmZWF0dXJlczsgbCAhPSBOVUxMOyBsID0gbC0+bmV4dCkgeworICAgIEdzdFBsdWdpbkZlYXR1cmUgKmZlYXR1cmU7CisKKyAgICBmZWF0dXJlID0gR1NUX1BMVUdJTl9GRUFUVVJFIChsLT5kYXRhKTsKKworICAgIC8qIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgb25lcyB0aGF0IGFyZSBpbiB0aGUgcGx1Z2luIHdlIGp1c3QgbG9hZGVkICovCisgICAgaWYgKGdfc3RyX2VxdWFsIChwbHVnaW5fbmFtZSwgZmVhdHVyZS0+cGx1Z2luX25hbWUpKSB7CisgICAgICBHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeTsKKworICAgICAgZ19wcmludCAoImVsZW1lbnQtJXNcbiIsIGdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfbmFtZSAoZmVhdHVyZSkpOworCisgICAgICBmYWN0b3J5ID0gR1NUX0VMRU1FTlRfRkFDVE9SWSAoZmVhdHVyZSk7CisgICAgICBwcmludF9wbHVnaW5fYXV0b21hdGljX2luc3RhbGxfaW5mb19wcm90b2NvbHMgKGZhY3RvcnkpOworICAgICAgcHJpbnRfcGx1Z2luX2F1dG9tYXRpY19pbnN0YWxsX2luZm9fY29kZWNzIChmYWN0b3J5KTsKKyAgICB9CisgIH0KKworICBnX2xpc3RfZm9yZWFjaCAoZmVhdHVyZXMsIChHRnVuYykgZ3N0X29iamVjdF91bnJlZiwgTlVMTCk7CisgIGdfbGlzdF9mcmVlIChmZWF0dXJlcyk7Cit9CisKK3N0YXRpYyB2b2lkCitwcmludF9hbGxfcGx1Z2luX2F1dG9tYXRpY19pbnN0YWxsX2luZm8gKHZvaWQpCit7CisgIEdMaXN0ICpwbHVnaW5zLCAqb3JpZ19wbHVnaW5zOworCisgIG9yaWdfcGx1Z2lucyA9IHBsdWdpbnMgPSBnc3RfZGVmYXVsdF9yZWdpc3RyeV9nZXRfcGx1Z2luX2xpc3QgKCk7CisgIHdoaWxlIChwbHVnaW5zKSB7CisgICAgR3N0UGx1Z2luICpwbHVnaW47CisKKyAgICBwbHVnaW4gPSAoR3N0UGx1Z2luICopIChwbHVnaW5zLT5kYXRhKTsKKyAgICBwbHVnaW5zID0gZ19saXN0X25leHQgKHBsdWdpbnMpOworCisgICAgcHJpbnRfcGx1Z2luX2F1dG9tYXRpY19pbnN0YWxsX2luZm8gKHBsdWdpbik7CisgIH0KKyAgZ3N0X3BsdWdpbl9saXN0X2ZyZWUgKG9yaWdfcGx1Z2lucyk7Cit9CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgZ2Jvb2xlYW4gcHJpbnRfYWxsID0gRkFMU0U7CisgIGdib29sZWFuIGRvX3ByaW50X2JsYWNrbGlzdCA9IEZBTFNFOworICBnYm9vbGVhbiBwbHVnaW5fbmFtZSA9IEZBTFNFOworICBnYm9vbGVhbiBwcmludF9haWkgPSBGQUxTRTsKKyAgZ2Jvb2xlYW4gdXJpX2hhbmRsZXJzID0gRkFMU0U7CisjaWZuZGVmIEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HCisgIEdPcHRpb25FbnRyeSBvcHRpb25zW10gPSB7CisgICAgeyJwcmludC1hbGwiLCAnYScsIDAsIEdfT1BUSU9OX0FSR19OT05FLCAmcHJpbnRfYWxsLAorICAgICAgICBOXygiUHJpbnQgYWxsIGVsZW1lbnRzIiksIE5VTEx9LAorICAgIHsicHJpbnQtYmxhY2tsaXN0IiwgJ2InLCAwLCBHX09QVElPTl9BUkdfTk9ORSwgJmRvX3ByaW50X2JsYWNrbGlzdCwKKyAgICAgICAgTl8oIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiKSwgTlVMTH0sCisgICAgeyJwcmludC1wbHVnaW4tYXV0by1pbnN0YWxsLWluZm8iLCAnXDAnLCAwLCBHX09QVElPTl9BUkdfTk9ORSwgJnByaW50X2FpaSwKKyAgICAgICAgTl8oIlByaW50IGEgbWFjaGluZS1wYXJzYWJsZSBsaXN0IG9mIGZlYXR1cmVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luICIKKyAgICAgICAgICAgICAgIm9yIGFsbCBwbHVnaW5zIHByb3ZpZGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICAgICJVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsIGF1dG9tYXRpYyBwbHVnaW4gIgorICAgICAgICAgICAgICAiaW5zdGFsbGF0aW9uIG1lY2hhbmlzbXMiKSwgTlVMTH0sCisgICAgeyJwbHVnaW4iLCAnXDAnLCAwLCBHX09QVElPTl9BUkdfTk9ORSwgJnBsdWdpbl9uYW1lLAorICAgICAgICBOXygiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIiksIE5VTEx9LAorICAgIHsidXJpLWhhbmRsZXJzIiwgJ3UnLCAwLCBHX09QVElPTl9BUkdfTk9ORSwgJnVyaV9oYW5kbGVycywKKyAgICAgICAgICBOXworICAgICAgICAgICgiUHJpbnQgc3VwcG9ydGVkIFVSSSBzY2hlbWVzLCB3aXRoIHRoZSBlbGVtZW50cyB0aGF0IGltcGxlbWVudCB0aGVtIiksCisgICAgICAgIE5VTEx9LAorICAgIEdTVF9UT09MU19HT1BUSU9OX1ZFUlNJT04sCisgICAge05VTEx9CisgIH07CisgIEdPcHRpb25Db250ZXh0ICpjdHg7CisgIEdFcnJvciAqZXJyID0gTlVMTDsKKyNlbmRpZgorCisjaWZkZWYgRU5BQkxFX05MUworICBiaW5kdGV4dGRvbWFpbiAoR0VUVEVYVF9QQUNLQUdFLCBMT0NBTEVESVIpOworICBiaW5kX3RleHRkb21haW5fY29kZXNldCAoR0VUVEVYVF9QQUNLQUdFLCAiVVRGLTgiKTsKKyAgdGV4dGRvbWFpbiAoR0VUVEVYVF9QQUNLQUdFKTsKKyNlbmRpZgorCisgIGdfdGhyZWFkX2luaXQgKE5VTEwpOworCisgIGdzdF90b29sc19zZXRfcHJnbmFtZSAoImdzdC1pbnNwZWN0Iik7CisKKyNpZm5kZWYgR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkcKKyAgY3R4ID0gZ19vcHRpb25fY29udGV4dF9uZXcgKCJbRUxFTUVOVC1OQU1FIHwgUExVR0lOLU5BTUVdIik7CisgIGdfb3B0aW9uX2NvbnRleHRfYWRkX21haW5fZW50cmllcyAoY3R4LCBvcHRpb25zLCBHRVRURVhUX1BBQ0tBR0UpOworICBnX29wdGlvbl9jb250ZXh0X2FkZF9ncm91cCAoY3R4LCBnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwICgpKTsKKyAgaWYgKCFnX29wdGlvbl9jb250ZXh0X3BhcnNlIChjdHgsICZhcmdjLCAmYXJndiwgJmVycikpIHsKKyAgICBnX3ByaW50ICgiRXJyb3IgaW5pdGlhbGl6aW5nOiAlc1xuIiwgZXJyLT5tZXNzYWdlKTsKKyAgICBleGl0ICgxKTsKKyAgfQorICBnX29wdGlvbl9jb250ZXh0X2ZyZWUgKGN0eCk7CisjZWxzZQorICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKKyNlbmRpZgorCisgIGdzdF90b29sc19wcmludF92ZXJzaW9uICgiZ3N0LWluc3BlY3QiKTsKKworICBpZiAocHJpbnRfYWxsICYmIGFyZ2MgPiAxKSB7CisgICAgZ19wcmludCAoIi1hIHJlcXVpcmVzIG5vIGV4dHJhIGFyZ3VtZW50c1xuIik7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBpZiAodXJpX2hhbmRsZXJzICYmIGFyZ2MgPiAxKSB7CisgICAgZ19wcmludCAoIi11IHJlcXVpcmVzIG5vIGV4dHJhIGFyZ3VtZW50c1xuIik7CisgICAgZXhpdCAoMSk7CisgIH0KKworICAvKiBpZiBubyBhcmd1bWVudHMsIHByaW50IG91dCBsaXN0IG9mIGVsZW1lbnRzICovCisgIGlmICh1cmlfaGFuZGxlcnMpIHsKKyAgICBwcmludF9hbGxfdXJpX2hhbmRsZXJzICgpOworICB9IGVsc2UgaWYgKGFyZ2MgPT0gMSB8fCBwcmludF9hbGwpIHsKKyAgICBpZiAoZG9fcHJpbnRfYmxhY2tsaXN0KQorICAgICAgcHJpbnRfYmxhY2tsaXN0ICgpOworICAgIGVsc2UgeworICAgICAgaWYgKHByaW50X2FpaSkKKyAgICAgICAgcHJpbnRfYWxsX3BsdWdpbl9hdXRvbWF0aWNfaW5zdGFsbF9pbmZvICgpOworICAgICAgZWxzZQorICAgICAgICBwcmludF9lbGVtZW50X2xpc3QgKHByaW50X2FsbCk7CisgICAgfQorICB9IGVsc2UgeworICAgIC8qIGVsc2Ugd2UgdHJ5IHRvIGdldCBhIGZhY3RvcnkgKi8KKyAgICBHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeTsKKyAgICBHc3RQbHVnaW4gKnBsdWdpbjsKKyAgICBjb25zdCBjaGFyICphcmcgPSBhcmd2W2FyZ2MgLSAxXTsKKyAgICBpbnQgcmV0dmFsOworCisgICAgaWYgKCFwbHVnaW5fbmFtZSkgeworICAgICAgZmFjdG9yeSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZCAoYXJnKTsKKworICAgICAgLyogaWYgdGhlcmUncyBhIGZhY3RvcnksIHByaW50IG91dCB0aGUgaW5mbyAqLworICAgICAgaWYgKGZhY3RvcnkpIHsKKyAgICAgICAgcmV0dmFsID0gcHJpbnRfZWxlbWVudF9pbmZvIChmYWN0b3J5LCBwcmludF9hbGwpOworICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChmYWN0b3J5KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHZhbCA9IHByaW50X2VsZW1lbnRfZmVhdHVyZXMgKGFyZyk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHZhbCA9IC0xOworICAgIH0KKworICAgIC8qIG90aGVyd2lzZSBjaGVjayBpZiBpdCdzIGEgcGx1Z2luICovCisgICAgaWYgKHJldHZhbCkgeworICAgICAgcGx1Z2luID0gZ3N0X2RlZmF1bHRfcmVnaXN0cnlfZmluZF9wbHVnaW4gKGFyZyk7CisKKyAgICAgIC8qIGlmIHRoZXJlIGlzIHN1Y2ggYSBwbHVnaW4sIHByaW50IG91dCBpbmZvICovCisgICAgICBpZiAocGx1Z2luKSB7CisgICAgICAgIGlmIChwcmludF9haWkpIHsKKyAgICAgICAgICBwcmludF9wbHVnaW5fYXV0b21hdGljX2luc3RhbGxfaW5mbyAocGx1Z2luKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBwcmludF9wbHVnaW5faW5mbyAocGx1Z2luKTsKKyAgICAgICAgICBwcmludF9wbHVnaW5fZmVhdHVyZXMgKHBsdWdpbik7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOworCisgICAgICAgIGlmIChnX2ZpbGVfdGVzdCAoYXJnLCBHX0ZJTEVfVEVTVF9FWElTVFMpKSB7CisgICAgICAgICAgcGx1Z2luID0gZ3N0X3BsdWdpbl9sb2FkX2ZpbGUgKGFyZywgJmVycm9yKTsKKworICAgICAgICAgIGlmIChwbHVnaW4pIHsKKyAgICAgICAgICAgIGlmIChwcmludF9haWkpIHsKKyAgICAgICAgICAgICAgcHJpbnRfcGx1Z2luX2F1dG9tYXRpY19pbnN0YWxsX2luZm8gKHBsdWdpbik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBwcmludF9wbHVnaW5faW5mbyAocGx1Z2luKTsKKyAgICAgICAgICAgICAgcHJpbnRfcGx1Z2luX2ZlYXR1cmVzIChwbHVnaW4pOworICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBnX3ByaW50IChfKCJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmlsZTogJXNcbiIpLCBlcnJvci0+bWVzc2FnZSk7CisgICAgICAgICAgICBnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgZ19wcmludCAoXygiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iKSwgYXJnKTsKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2dzdC1sYXVuY2guMS5pbiBiL3Rvb2xzL2dzdC1sYXVuY2guMS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjcwMmY0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvZ3N0LWxhdW5jaC4xLmluCkBAIC0wLDAgKzEsNDYwIEBACisuVEggIkdTdHJlYW1lciIgIjEiICJNYXkgMjAwNyIKKy5TSCAiTkFNRSIKK2dzdFwtbGF1bmNoIFwtIGJ1aWxkIGFuZCBydW4gYSBHU3RyZWFtZXIgcGlwZWxpbmUKKy5TSCAiU1lOT1BTSVMiCitcZkJnc3RcLWxhdW5jaFxmUiBcZklbT1BUSU9OLi4uXVxmUiBQSVBFTElORVwtREVTQ1JJUFRJT04KKy5TSCAiREVTQ1JJUFRJT04iCisuTFAKK1xmSWdzdFwtbGF1bmNoXGZQIGlzIGEgdG9vbCB0aGF0IGJ1aWxkcyBhbmQgcnVucyBiYXNpYworXGZJR1N0cmVhbWVyXGZQIHBpcGVsaW5lcy4KKworSW4gc2ltcGxlIGZvcm0sIGEgUElQRUxJTkVcLURFU0NSSVBUSU9OIGlzIGEgbGlzdCBvZgorZWxlbWVudHMgc2VwYXJhdGVkIGJ5IGV4Y2xhbWF0aW9uIG1hcmtzICghKS4gUHJvcGVydGllcyBtYXkgYmUgYXBwZW5kZWQgdG8KK2VsZW1lbnRzLCBpbiB0aGUgZm9ybSBcZklwcm9wZXJ0eT12YWx1ZVxmUi4KKworRm9yIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgcG9zc2libGUgUElQRUxJTkUtREVTQ1JJUFRJT05TIHNlZSB0aGUgc2VjdGlvbgorXGZJcGlwZWxpbmUgZGVzY3JpcHRpb25cZlIgYmVsb3cgb3IgY29uc3VsdCB0aGUgR1N0cmVhbWVyIGRvY3VtZW50YXRpb24uCisKK1BsZWFzZSBub3RlIHRoYXQgXGZJZ3N0XC1sYXVuY2hcZlAgaXMgcHJpbWFyaWx5IGEgZGVidWdnaW5nIHRvb2wgZm9yCitkZXZlbG9wZXJzIGFuZCB1c2Vycy4gWW91IHNob3VsZCBub3QgYnVpbGQgYXBwbGljYXRpb25zIG9uIHRvcCBvZiBpdC4gRm9yCithcHBsaWNhdGlvbnMsIHVzZSB0aGUgZ3N0X3BhcnNlX2xhdW5jaCgpIGZ1bmN0aW9uIG9mIHRoZSBHU3RyZWFtZXIgQVBJIGFzIGFuCitlYXN5IHdheSB0byBjb25zdHJ1Y3QgcGlwZWxpbmVzIGZyb20gcGlwZWxpbmUgZGVzY3JpcHRpb25zLgorLgorLlNIICJPUFRJT05TIgorLmwKK1xmSWdzdFwtbGF1bmNoXGZQIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBvcHRpb25zOgorLlRQIDgKKy5CICBcLVwtaGVscAorUHJpbnQgaGVscCBzeW5vcHNpcyBhbmQgYXZhaWxhYmxlIEZMQUdTCisuVFAgOAorLkIgIFwtdiwgXC1cLXZlcmJvc2UKK091dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMKKy5UUCA4CisuQiAgXC1xLCBcLVwtcXVpZXQKK0RvIG5vdCBwcmludCBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24KKy5UUCA4CisuQiAgXC1tLCBcLVwtbWVzc2FnZXMKK091dHB1dCBtZXNzYWdlcyBwb3N0ZWQgb24gdGhlIHBpcGVsaW5lJ3MgYnVzCisuVFAgOAorLkIgIFwtdCwgXC1cLXRhZ3MKK091dHB1dCB0YWdzIChhbHNvIGtub3duIGFzIG1ldGFkYXRhKQorLlRQIDgKKy5CICBcLWUsIFwtXC1lb3NcLW9uXC1zaHV0ZG93bgorRm9yY2UgYW4gRU9TIGV2ZW50IG9uIHNvdXJjZXMgYmVmb3JlIHNodXR0aW5nIHRoZSBwaXBlbGluZSBkb3duLiBUaGlzIGlzCit1c2VmdWwgdG8gbWFrZSBzdXJlIG11eGVycyBjcmVhdGUgcmVhZGFibGUgZmlsZXMgd2hlbiBhIG11eGluZyBwaXBlbGluZSBpcworc2h1dCBkb3duIGZvcmNlZnVsbHkgdmlhIENvbnRyb2wtQy4KKy5UUCA4CisuQiAgXC1pLCBcLVwtaW5kZXgKK0dhdGhlciBhbmQgcHJpbnQgaW5kZXggc3RhdGlzdGljcy4gVGhpcyBpcyBtb3N0bHkgdXNlZnVsIGZvciBwbGF5YmFjayBvcgorcmVjb3JkaW5nIHBpcGVsaW5lcy4KKy5UUCA4CisuQiAgXC1mLCBcLVwtbm9cLWZhdWx0CitEbyBub3QgaW5zdGFsbCBhIGZhdWx0IGhhbmRsZXIKKy5UUCA4CisuQiAgXC1ULCBcLVwtdHJhY2UKK1ByaW50IG1lbW9yeSBhbGxvY2F0aW9uIHRyYWNlcy4gVGhlIGZlYXR1cmUgbXVzdCBiZSBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSB0bword29yay4KKy5UUCA4CisKKy4KKy5TSCAiR1NUUkVBTUVSIE9QVElPTlMiCisubAorXGZJZ3N0XC1sYXVuY2hcZlAgYWxzbyBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyB0aGF0IGFyZSBjb21tb24KK3RvIGFsbCBHU3RyZWFtZXIgYXBwbGljYXRpb25zOgorLlRQIDgKKy5CICBcLVwtZ3N0XC12ZXJzaW9uCitQcmludHMgdGhlIHZlcnNpb24gc3RyaW5nIG9mIHRoZSBcZklHU3RyZWFtZXJcZlAgY29yZSBsaWJyYXJ5LgorLlRQIDgKKy5CICBcLVwtZ3N0XC1mYXRhbFwtd2FybmluZ3MKK0NhdXNlcyBcZklHU3RyZWFtZXJcZlAgdG8gYWJvcnQgaWYgYSB3YXJuaW5nIG1lc3NhZ2Ugb2NjdXJzLiBUaGlzIGlzIGVxdWl2YWxlbnQKK3RvIHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEdfREVCVUcgdG8gJ2ZhdGFsX3dhcm5pbmdzJyAoc2VlIHRoZQorc2VjdGlvbiBcZkllbnZpcm9ubWVudCB2YXJpYWJsZXNcZlIgYmVsb3cgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24pLgorLlRQIDgKKy5CICBcLVwtZ3N0XC1kZWJ1Zz1TVFJJTkcKK0EgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzcGVjaWZ5IGRlYnVnZ2luZyBsZXZlbHMKK2ZvciBlYWNoIGNhdGVnb3J5LiBMZXZlbCBpcyBpbiB0aGUgcmFuZ2UgMC01IHdoZXJlIDAgd2lsbCBzaG93IG5vIG1lc3NhZ2VzLCBhbmQKKzUgd2lsbCBzaG93IGFsbCBtZXNzYWdlcy4gVGhlIHdpbGRjYXJkICogY2FuIGJlIHVzZWQgdG8gbWF0Y2ggY2F0ZWdvcnkgbmFtZXMuCisKK1VzZSBcLVwtZ3N0XC1kZWJ1Z1wtaGVscCB0byBzaG93IGNhdGVnb3J5IG5hbWVzCisKK0V4YW1wbGU6CitHU1RfQ0FUOjUsR1NUX0VMRU1FTlRfKjozLG9nZ2RlbXV4OjUKKworLlRQIDgKKy5CICBcLVwtZ3N0XC1kZWJ1Z1wtbGV2ZWw9TEVWRUwKK1NldHMgdGhlIHRocmVzaG9sZCBmb3IgcHJpbnRpbmcgZGVidWdnaW5nIG1lc3NhZ2VzLiAgQSBoaWdoZXIgbGV2ZWwKK3dpbGwgcHJpbnQgbW9yZSBtZXNzYWdlcy4gIFRoZSB1c2VmdWwgcmFuZ2UgaXMgMC01LCB3aXRoIHRoZSBkZWZhdWx0CitiZWluZyAwLgorLlRQIDgKKy5CICBcLVwtZ3N0XC1kZWJ1Z1wtbm9cLWNvbG9yCitcZklHU3RyZWFtZXJcZlAgbm9ybWFsbHkgcHJpbnRzIGRlYnVnZ2luZyBtZXNzYWdlcyBzbyB0aGF0IHRoZQorbWVzc2FnZXMgYXJlIGNvbG9yLWNvZGVkIHdoZW4gcHJpbnRlZCB0byBhIHRlcm1pbmFsIHRoYXQgaGFuZGxlcworQU5TSSBlc2NhcGUgc2VxdWVuY2VzLiAgVXNpbmcgdGhpcyBvcHRpb24gY2F1c2VzIFxmSUdTdHJlYW1lclxmUAordG8gcHJpbnQgbWVzc2FnZXMgd2l0aG91dCBjb2xvci4gU2V0dGluZyB0aGUgXGZCR1NUX0RFQlVHX05PX0NPTE9SXGZSCitlbnZpcm9ubWVudCB2YXJpYWJsZSB3aWxsIGFjaGlldmUgdGhlIHNhbWUgdGhpbmcuCisuVFAgOAorLkIgIFwtXC1nc3RcLWRlYnVnXC1kaXNhYmxlCitEaXNhYmxlcyBkZWJ1Z2dpbmcuCisuVFAgOAorLkIgIFwtXC1nc3RcLWRlYnVnXC1oZWxwCitQcmludHMgYSBsaXN0IG9mIGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCB0aGVpciBkZWZhdWx0IGRlYnVnZ2luZyBsZXZlbC4KKy5UUCA4CisuQiAgXC1cLWdzdFwtcGx1Z2luXC1zcGV3CitcZklHU3RyZWFtZXJcZlAgaW5mbyBmbGFncyB0byBzZXQKK0VuYWJsZSBwcmludG91dCBvZiBlcnJvcnMgd2hpbGUgbG9hZGluZyBcZklHU3RyZWFtZXJcZlAgcGx1Z2lucworLlRQIDgKKy5CICBcLVwtZ3N0XC1wbHVnaW5cLXBhdGg9UEFUSAorQWRkIGRpcmVjdG9yaWVzIHNlcGFyYXRlZCB3aXRoICc6JyB0byB0aGUgcGx1Z2luIHNlYXJjaCBwYXRoCisuVFAgOAorLkIgIFwtXC1nc3RcLXBsdWdpblwtbG9hZD1QTFVHSU5TCitQcmVsb2FkIHBsdWdpbnMgc3BlY2lmaWVkIGluIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QuIEFub3RoZXIgd2F5IHRvIHNwZWNpZnkKK3BsdWdpbnMgdG8gcHJlbG9hZCBpcyB0byB1c2UgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSAorCisuU0ggIlBJUEVMSU5FIERFU0NSSVBUSU9OIgorCitBIHBpcGVsaW5lIGNvbnNpc3RzIFxmSWVsZW1lbnRzXGZSIGFuZCBcZklsaW5rc1xmUi4gXGZJRWxlbWVudHNcZlIgY2FuIGJlIHB1dAoraW50byBcZkliaW5zXGZSIG9mIGRpZmZlcmVudCBzb3J0cy4gXGZJRWxlbWVudHNcZlIsIFxmSWxpbmtzXGZSIGFuZCBcZkliaW5zXGZSCitjYW4gYmUgc3BlY2lmaWVkIGluIGEgcGlwZWxpbmUgZGVzY3JpcHRpb24gaW4gYW55IG9yZGVyLgorCisuQiBFbGVtZW50cworCitFTEVNRU5UVFlQRSBcZklbUFJPUEVSVFkxIC4uLl1cZlIKKworQ3JlYXRlcyBhbiBlbGVtZW50IG9mIHR5cGUgRUxFTUVOVFRZUEUgYW5kIHNldHMgdGhlIFBST1BFUlRJRVMuCisKKy5CIFByb3BlcnRpZXMKKworUFJPUEVSVFk9VkFMVUUgLi4uCisKK1NldHMgdGhlIHByb3BlcnR5IHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuIFlvdSBjYW4gdXNlIFxmQmdzdFwtaW5zcGVjdFxmUigxKSB0bworZmluZCBvdXQgYWJvdXQgcHJvcGVydGllcyBhbmQgYWxsb3dlZCB2YWx1ZXMgb2YgZGlmZmVyZW50IGVsZW1lbnRzLgorLmJyCitFbnVtZXJhdGlvbiBwcm9wZXJ0aWVzIGNhbiBiZSBzZXQgYnkgbmFtZSwgbmljayBvciB2YWx1ZS4KKworLkIgQmlucworCitcZklbQklOVFlQRS5dXGZSICggXGZJW1BST1BFUlRZMSAuLi5dXGZSIFBJUEVMSU5FLURFU0NSSVBUSU9OICkKKy5icgorCitTcGVjaWZpZXMgdGhhdCBhIGJpbiBvZiB0eXBlIEJJTlRZUEUgaXMgY3JlYXRlZCBhbmQgdGhlIGdpdmVuIHByb3BlcnRpZXMgYXJlCitzZXQuIEV2ZXJ5IGVsZW1lbnQgYmV0d2VlbiB0aGUgYnJhY2VzIGlzIHB1dCBpbnRvIHRoZSBiaW4uIFBsZWFzZSBub3RlIHRoZSBkb3QKK3RoYXQgaGFzIHRvIGJlIHVzZWQgYWZ0ZXIgdGhlIEJJTlRZUEUuIFlvdSB3aWxsIGFsbW9zdCBuZXZlciBuZWVkIHRoaXMKK2Z1bmN0aW9uYWxpdHksIGl0IGlzIG9ubHkgcmVhbGx5IHVzZWZ1bCBmb3IgYXBwbGljYXRpb25zIHVzaW5nIHRoZQorZ3N0X2xhdW5jaF9wYXJzZSgpIEFQSSB3aXRoICdiaW4nIGFzIGJpbnR5cGUuIFRoYXQgd2F5IGl0IGlzIHBvc3NpYmxlIHRvIGJ1aWxkCitwYXJ0aWFsIHBpcGVsaW5lcyBpbnN0ZWFkIG9mIGEgZnVsbC1mbGVkZ2VkIHRvcC1sZXZlbCBwaXBlbGluZS4KKworLkIgTGlua3MKKworXGZJW1tTUkNFTEVNRU5UXS5bUEFEMSwuLi5dXVxmUiAhIFxmSVtbU0lOS0VMRU1FTlRdLltQQUQxLC4uLl1dXGZSCitcZklbW1NSQ0VMRU1FTlRdLltQQUQxLC4uLl1dXGZSICEgQ0FQUyAhIFxmSVtbU0lOS0VMRU1FTlRdLltQQUQxLC4uLl1dXGZSCisKK0xpbmtzIHRoZSBlbGVtZW50IHdpdGggbmFtZSBTUkNFTEVNRU5UIHRvIHRoZSBlbGVtZW50IHdpdGggbmFtZSBTSU5LRUxFTUVOVCwKK3VzaW5nIHRoZSBjYXBzIHNwZWNpZmllZCBpbiBDQVBTIGFzIGEgZmlsdGVyLgorTmFtZXMgY2FuIGJlIHNldCBvbiBlbGVtZW50cyB3aXRoIHRoZSBuYW1lIHByb3BlcnR5LiBJZiB0aGUgbmFtZSBpcyBvbWl0dGVkLCB0aGUKK2VsZW1lbnQgdGhhdCB3YXMgc3BlY2lmaWVkIGRpcmVjdGx5IGluIGZyb250IG9mIG9yIGFmdGVyIHRoZSBsaW5rIGlzIHVzZWQuIFRoaXMKK3dvcmtzIGFjcm9zcyBiaW5zLiBJZiBhIHBhZG5hbWUgaXMgZ2l2ZW4sIHRoZSBsaW5rIGlzIGRvbmUgd2l0aCB0aGVzZSBwYWRzLiBJZgorbm8gcGFkIG5hbWVzIGFyZSBnaXZlbiBhbGwgcG9zc2liaWxpdGllcyBhcmUgdHJpZWQgYW5kIGEgbWF0Y2hpbmcgcGFkIGlzIHVzZWQuCitJZiBtdWx0aXBsZSBwYWRuYW1lcyBhcmUgZ2l2ZW4sIGJvdGggc2lkZXMgbXVzdCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBwYWRzCitzcGVjaWZpZWQgYW5kIG11bHRpcGxlIGxpbmtzIGFyZSBkb25lIGluIHRoZSBnaXZlbiBvcmRlci4KKy5icgorU28gdGhlIHNpbXBsZXN0IGxpbmsgaXMgYSBzaW1wbGUgZXhjbGFtYXRpb24gbWFyaywgdGhhdCBsaW5rcyB0aGUgZWxlbWVudCB0bwordGhlIGxlZnQgb2YgaXQgdG8gdGhlIGVsZW1lbnQgcmlnaHQgb2YgaXQuCisuYnIKKworLkIgQ2FwcworCitNSU1FVFlQRSBcZklbLCBQUk9QRVJUWVssIFBST1BFUlRZIC4uLl1dXVxmUiBcZklbOyBDQVBTWzsgQ0FQUyAuLi5dXVxmUgorCitDcmVhdGVzIGEgY2FwYWJpbGl0eSB3aXRoIHRoZSBnaXZlbiBtaW1ldHlwZSBhbmQgb3B0aW9uYWxseSB3aXRoIGdpdmVuCitwcm9wZXJ0aWVzLiBUaGUgbWltZXR5cGUgY2FuIGJlIGVzY2FwZWQgdXNpbmcgIiBvciAnLgorSWYgeW91IHdhbnQgdG8gY2hhaW4gY2FwcywgeW91IGNhbiBhZGQgbW9yZSBjYXBzIGluIHRoZSBzYW1lIGZvcm1hdCBhZnRlcndhcmRzLgorCisuQiBQcm9wZXJ0aWVzCisKK05BTUU9XGZJWyhUWVBFKV1cZlJWQUxVRQorLmJyCitpbiBsaXN0cyBhbmQgcmFuZ2VzOiBcZklbKFRZUEUpXVxmUlZBTFVFCisKK1NldHMgdGhlIHJlcXVlc3RlZCBwcm9wZXJ0eSBpbiBjYXBhYmlsaXRpZXMuIFRoZSBuYW1lIGlzIGFuIGFscGhhbnVtZXJpYyB2YWx1ZQorYW5kIHRoZSB0eXBlIGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcgY2FzZS1pbnNlbnNpdGl2ZSB2YWx1ZXM6CisuYnIKKy0gXGZCaVxmUiBvciBcZkJpbnRcZlIgZm9yIGludGVnZXIgdmFsdWVzIG9yIHJhbmdlcworLmJyCistIFxmQmZcZlIgb3IgXGZCZmxvYXRcZlIgZm9yIGZsb2F0IHZhbHVlcyBvciByYW5nZXMKKy5icgorLSBcZkI0XGZSIG9yIFxmQmZvdXJjY1xmUiBmb3IgRk9VUkNDIHZhbHVlcworLmJyCistIFxmQmJcZlIsIFxmQmJvb2xcZlIgb3IgXGZCYm9vbGVhblxmUiBmb3IgYm9vbGVhbiB2YWx1ZXMKKy5icgorLSBcZkJzXGZSLCBcZkJzdHJcZlIgb3IgXGZCc3RyaW5nXGZSIGZvciBzdHJpbmdzCisuYnIKKy0gXGZCZnJhY3Rpb25cZlIgZm9yIGZyYWN0aW9ucyAoZnJhbWVyYXRlLCBwaXhlbC1hc3BlY3QtcmF0aW8pCisuYnIKKy0gXGZCbFxmUiBvciBcZkJsaXN0XGZSIGZvciBsaXN0cworLmJyCitJZiBubyB0eXBlIHdhcyBnaXZlbiwgdGhlIGZvbGxvd2luZyBvcmRlciBpcyB0cmllZDogaW50ZWdlciwgZmxvYXQsIGJvb2xlYW4sCitzdHJpbmcuCisuYnIKK0ludGVnZXIgdmFsdWVzIG11c3QgYmUgcGFyc2FibGUgYnkgXGZCc3RydG9sKClcZlAsIGZsb2F0cyBieSBcZkJzdHJ0b2QoKVxmUC4gRk9VUkNDIHZhbHVlcyBtYXkKK2VpdGhlciBiZSBpbnRlZ2VycyBvciBzdHJpbmdzLiBCb29sZWFuIHZhbHVlcyBhcmUgKGNhc2UgaW5zZW5zaXRpdmUpIFxmSXllc1xmUiwKK1xmSW5vXGZSLCBcZkl0cnVlXGZSIG9yIFxmSWZhbHNlXGZSIGFuZCBtYXkgbGlrZSBzdHJpbmdzIGJlIGVzY2FwZWQgd2l0aCAiIG9yICcuCisuYnIKK1JhbmdlcyBhcmUgaW4gdGhpcyBmb3JtYXQ6ICBbIFZBTFVFLCBWQUxVRSBdCisuYnIKK0xpc3RzIHVzZSB0aGlzIGZvcm1hdDogICAgICAoIFZBTFVFIFxmSVssIFZBTFVFIC4uLl1cZlIgKQorCisuU0ggIlBJUEVMSU5FIEVYQU1QTEVTIgorCitUaGUgZXhhbXBsZXMgYmVsb3cgYXNzdW1lIHRoYXQgeW91IGhhdmUgdGhlIGNvcnJlY3QgcGx1Zy1pbnMgYXZhaWxhYmxlLgorSW4gZ2VuZXJhbCwgIm9zc3NpbmsiIGNhbiBiZSBzdWJzdGl0dXRlZCB3aXRoIGFub3RoZXIgYXVkaW8gb3V0cHV0CitwbHVnLWluIHN1Y2ggYXMgImVzZHNpbmsiLCAiYWxzYXNpbmsiLCAib3N4YXVkaW9zaW5rIiwgb3IgImFydHNkc2luayIuCitMaWtld2lzZSwgInh2aW1hZ2VzaW5rIiBjYW4gYmUgc3Vic3RpdHV0ZWQgd2l0aCAieGltYWdlc2luayIsICJzZGx2aWRlb3NpbmsiLAorIm9zeHZpZGVvc2luayIsIG9yICJhYXNpbmsiLiBLZWVwIGluIG1pbmQgdGhvdWdoIHRoYXQgZGlmZmVyZW50IHNpbmtzIG1pZ2h0CithY2NlcHQgZGlmZmVyZW50IGZvcm1hdHMgYW5kIGV2ZW4gdGhlIHNhbWUgc2luayBtaWdodCBhY2NlcHQgZGlmZmVyZW50IGZvcm1hdHMKK29uIGRpZmZlcmVudCBtYWNoaW5lcywgc28geW91IG1pZ2h0IG5lZWQgdG8gYWRkIGNvbnZlcnRlciBlbGVtZW50cyBsaWtlCithdWRpb2NvbnZlcnQgYW5kIGF1ZGlvcmVzYW1wbGUgKGZvciBhdWRpbykgb3IgZmZtcGVnY29sb3JzcGFjZSAoZm9yIHZpZGVvKQoraW4gZnJvbnQgb2YgdGhlIHNpbmsgdG8gbWFrZSB0aGluZ3Mgd29yay4KKworLkIgQXVkaW8gcGxheWJhY2sKKworLkIKKyAgICAgICAgZ3N0XC1sYXVuY2ggZmlsZXNyYyBsb2NhdGlvbj1tdXNpYy5tcDMgISBtYWQgISBhdWRpb2NvbnZlcnQgISBhdWRpb3Jlc2FtcGxlICEgb3Nzc2luaworLmJyCitQbGF5IHRoZSBtcDMgbXVzaWMgZmlsZSAibXVzaWMubXAzIiB1c2luZyBhIGxpYm1hZC1iYXNlZCBwbHVnLWluIGFuZAorb3V0cHV0IHRvIGFuIE9TUyBkZXZpY2UKKworLkIKKyAgICAgICAgZ3N0XC1sYXVuY2ggZmlsZXNyYyBsb2NhdGlvbj1tdXNpYy5vZ2cgISBvZ2dkZW11eCAhIHZvcmJpc2RlYyAhIGF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUgISBvc3NzaW5rCisuYnIKK1BsYXkgYW4gT2dnIFZvcmJpcyBmb3JtYXQgZmlsZQorCisuQgorICAgICAgICBnc3RcLWxhdW5jaCBnbm9tZXZmc3NyYyBsb2NhdGlvbj1tdXNpYy5tcDMgISBtYWQgISBvc3NzaW5rCisuYnIKKy5CCisgICAgICAgIGdzdFwtbGF1bmNoIGdub21ldmZzc3JjIGxvY2F0aW9uPWh0dHA6Ly9kb21haW4uY29tL211c2ljLm1wMyAhIG1hZCAhIGF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUgISBvc3NzaW5rCisuYnIKK1BsYXkgYW4gbXAzIGZpbGUgb3IgYW4gaHR0cCBzdHJlYW0gdXNpbmcgR05PTUVcLVZGUworCisuQgorICAgICAgICBnc3RcLWxhdW5jaCBnbm9tZXZmc3NyYyBsb2NhdGlvbj1zbWI6Ly9jb21wdXRlci9tdXNpYy5tcDMgISBtYWQgISBhdWRpb2NvbnZlcnQgISBhdWRpb3Jlc2FtcGxlICEgb3Nzc2luaworLmJyCitVc2UgR05PTUVcLVZGUyB0byBwbGF5IGFuIG1wMyBmaWxlIGxvY2F0ZWQgb24gYW4gU01CIHNlcnZlcgorCisuQiBGb3JtYXQgY29udmVyc2lvbgorCisuQgorICAgICAgICBnc3RcLWxhdW5jaCBmaWxlc3JjIGxvY2F0aW9uPW11c2ljLm1wMyAhIG1hZCAhIGF1ZGlvY29udmVydCAhIHZvcmJpc2VuYyAhIG9nZ211eCAhIGZpbGVzaW5rIGxvY2F0aW9uPW11c2ljLm9nZworLmJyCitDb252ZXJ0IGFuIG1wMyBtdXNpYyBmaWxlIHRvIGFuIE9nZyBWb3JiaXMgZmlsZQorCisuQgorICAgICAgICBnc3RcLWxhdW5jaCBmaWxlc3JjIGxvY2F0aW9uPW11c2ljLm1wMyAhIG1hZCAhIGF1ZGlvY29udmVydCAhIGZsYWNlbmMgISBmaWxlc2luayBsb2NhdGlvbj10ZXN0LmZsYWMKKy5icgorQ29udmVydCB0byB0aGUgRkxBQyBmb3JtYXQKKworLkIgT3RoZXIKKworLkIKKyAgICAgICAgZ3N0XC1sYXVuY2ggZmlsZXNyYyBsb2NhdGlvbj1tdXNpYy53YXYgISB3YXZwYXJzZSAhIGF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUgISBvc3NzaW5rCisuYnIKK1BsYXlzIGEgLldBViBmaWxlIHRoYXQgY29udGFpbnMgcmF3IGF1ZGlvIGRhdGEgKFBDTSkuCisKKy5CCisgICAgICAgIGdzdFwtbGF1bmNoIGZpbGVzcmMgbG9jYXRpb249bXVzaWMud2F2ICEgd2F2cGFyc2UgISBhdWRpb2NvbnZlcnQgISB2b3JiaXNlbmMgISBvZ2dtdXggISBmaWxlc2luayBsb2NhdGlvbj1tdXNpYy5vZ2cKKy5icgorLkIKKyAgICAgICAgZ3N0XC1sYXVuY2ggZmlsZXNyYyBsb2NhdGlvbj1tdXNpYy53YXYgISB3YXZwYXJzZSAhIGF1ZGlvY29udmVydCAhIGxhbWUgISBmaWxlc2luayBsb2NhdGlvbj1tdXNpYy5tcDMKKy5icgorQ29udmVydCBhIC5XQVYgZmlsZSBjb250YWluaW5nIHJhdyBhdWRpbyBkYXRhIGludG8gYW4gT2dnIFZvcmJpcyBvciBtcDMgZmlsZQorCisuQgorICAgICAgICBnc3RcLWxhdW5jaCBjZHBhcmFub2lhc3JjIG1vZGU9Y29udGludW91cyAhIGF1ZGlvY29udmVydCAhIGxhbWUgISBpZDN2Mm11eCAhIGZpbGVzaW5rIGxvY2F0aW9uPWNkLm1wMworLmJyCityaXBzIGFsbCB0cmFja3MgZnJvbSBjb21wYWN0IGRpc2MgYW5kIGNvbnZlcnQgdGhlbSBpbnRvIGEgc2luZ2xlIG1wMyBmaWxlCisKKy5CCisgICAgICAgIGdzdFwtbGF1bmNoIGNkcGFyYW5vaWFzcmMgdHJhY2s9NSAhIGF1ZGlvY29udmVydCAhIGxhbWUgISBpZDN2Mm11eCAhIGZpbGVzaW5rIGxvY2F0aW9uPXRyYWNrNS5tcDMKKy5icgorcmlwcyB0cmFjayA1IGZyb20gdGhlIENEIGFuZCBjb252ZXJ0cyBpdCBpbnRvIGEgc2luZ2xlIG1wMyBmaWxlCisKK1VzaW5nIFxmQmdzdFwtaW5zcGVjdFxmUigxKSwgaXQgaXMgcG9zc2libGUgdG8gZGlzY292ZXIgc2V0dGluZ3MgbGlrZSB0aGUgYWJvdmUKK2ZvciBjZHBhcmFub2lhc3JjIHRoYXQgd2lsbCB0ZWxsIGl0IHRvIHJpcCB0aGUgZW50aXJlIGNkIG9yIG9ubHkgdHJhY2tzIG9mIGl0LgorQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgYW4gVVJJIGFuZCBnc3QtbGF1bmNoIHdpbGwgZmluZCBhbiBlbGVtZW50IChzdWNoIGFzCitjZHBhcmFub2lhKSB0aGF0IHN1cHBvcnRzIHRoYXQgcHJvdG9jb2wgZm9yIHlvdSwgZS5nLjoKKy5CCisgICAgICAgZ3N0XC1sYXVuY2ggY2RkYTovLzUgISBsYW1lIHZicj1uZXcgdmJyLXF1YWxpdHk9NiAhIGZpbGVzaW5rIGxvY2F0aW9uPXRyYWNrNS5tcDMKKworLkIKKyAgICAgICAgZ3N0XC1sYXVuY2ggb3Nzc3JjICEgYXVkaW9jb252ZXJ0ICEgdm9yYmlzZW5jICEgb2dnbXV4ICEgZmlsZXNpbmsgbG9jYXRpb249aW5wdXQub2dnCisuYnIKK3JlY29yZHMgc291bmQgZnJvbSB5b3VyIGF1ZGlvIGlucHV0IGFuZCBlbmNvZGVzIGl0IGludG8gYW4gb2dnIGZpbGUKKworLkIgVmlkZW8KKworLkIKKyAgICAgICAgZ3N0XC1sYXVuY2ggZmlsZXNyYyBsb2NhdGlvbj1KQl9GRjlfVGhlR3Jhdml0eU9mTG92ZS5tcGcgISBkdmRkZW11eCAhIG1wZWcyZGVjICEgeHZpbWFnZXNpbmsKKy5icgorRGlzcGxheSBvbmx5IHRoZSB2aWRlbyBwb3J0aW9uIG9mIGFuIE1QRUctMSB2aWRlbyBmaWxlLCBvdXRwdXR0aW5nIHRvCithbiBYIGRpc3BsYXkgd2luZG93CisKKy5CCisgICAgICAgIGdzdFwtbGF1bmNoIGZpbGVzcmMgbG9jYXRpb249L2ZsZmxmai52b2IgISBkdmRkZW11eCAhIG1wZWcyZGVjICEgc2RsdmlkZW9zaW5rCisuYnIKK0Rpc3BsYXkgdGhlIHZpZGVvIHBvcnRpb24gb2YgYSAudm9iIGZpbGUgKHVzZWQgb24gRFZEcyksIG91dHB1dHRpbmcgdG8KK2FuIFNETCB3aW5kb3cKKworLkIKKyAgICAgICAgZ3N0XC1sYXVuY2ggZmlsZXNyYyBsb2NhdGlvbj1tb3ZpZS5tcGcgISBkdmRkZW11eCBuYW1lPWRlbXV4ZXIgIGRlbXV4ZXIuICEgcXVldWUgISBtcGVnMmRlYyAhIHNkbHZpZGVvc2luayAgZGVtdXhlci4gISBxdWV1ZSAhIG1hZCAhIGF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUgISBvc3NzaW5rCisuYnIKK1BsYXkgYm90aCB2aWRlbyBhbmQgYXVkaW8gcG9ydGlvbnMgb2YgYW4gTVBFRyBtb3ZpZQorCisuQgorICAgICAgICBnc3RcLWxhdW5jaCBmaWxlc3JjIGxvY2F0aW9uPW1vdmllLm1wZyAhIG1wZWdkZW11eCBuYW1lPWRlbXV4ZXIgIGRlbXV4ZXIuICEgcXVldWUgISBtcGVnMmRlYyAhIGZmbXBlZ2NvbG9yc3BhY2UgISBzZGx2aWRlb3NpbmsgICBkZW11eGVyLiAhIHF1ZXVlICEgbWFkICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSAhIG9zc3NpbmsKKy5icgorUGxheSBhbiBBVkkgbW92aWUgd2l0aCBhbiBleHRlcm5hbCB0ZXh0IHN1YnRpdGxlIHN0cmVhbQorCitUaGlzIGV4YW1wbGUgYWxzbyBzaG93cyBob3cgdG8gcmVmZXIgdG8gc3BlY2lmaWMgcGFkcyBieSBuYW1lIGlmIGFuIGVsZW1lbnQKKyhoZXJlOiB0ZXh0b3ZlcmxheSkgaGFzIG11bHRpcGxlIHNpbmsgb3Igc291cmNlIHBhZHMuCisKKy5CCisgICAgICAgIGdzdFwtbGF1bmNoIHRleHRvdmVybGF5IG5hbWU9b3ZlcmxheSAhIGZmbXBlZ2NvbG9yc3BhY2UgISB2aWRlb3NjYWxlICEgYXV0b3ZpZGVvc2luayAgIGZpbGVzcmMgbG9jYXRpb249bW92aWUuYXZpICEgZGVjb2RlYmluMiAhIGZmbXBlZ2NvbG9yc3BhY2UgISBvdmVybGF5LnZpZGVvX3NpbmsgICBmaWxlc3JjIGxvY2F0aW9uPW1vdmllLnNydCAhIHN1YnBhcnNlICEgb3ZlcmxheS50ZXh0X3NpbmsKKworLmJyCitQbGF5IGFuIEFWSSBtb3ZpZSB3aXRoIGFuIGV4dGVybmFsIHRleHQgc3VidGl0bGUgc3RyZWFtIHVzaW5nIHBsYXliaW4yCisKKy5CCisgICAgICAgIGdzdFwtbGF1bmNoIHBsYXliaW4yIHVyaT1maWxlOi8vL3BhdGgvdG8vbW92aWUuYXZpIHN1YnVyaT1maWxlOi8vL3BhdGgvdG8vbW92aWUuc3J0CisKKy5CIE5ldHdvcmsgc3RyZWFtaW5nCisKK1N0cmVhbSB2aWRlbyB1c2luZyBSVFAgYW5kIG5ldHdvcmsgZWxlbWVudHMuCisKKy5CCisgICAgICAgIGdzdFwtbGF1bmNoIHY0bDJzcmMgISB2aWRlby94LXJhdy15dXYsd2lkdGg9MTI4LGhlaWdodD05Nixmb3JtYXQ9Jyhmb3VyY2MpJ1VZVlkgISBmZm1wZWdjb2xvcnNwYWNlICEgZmZlbmNfaDI2MyAhIHZpZGVvL3gtaDI2MyAhIHJ0cGgyNjNwcGF5IHB0PTk2ICEgdWRwc2luayBob3N0PTE5Mi4xNjguMS4xIHBvcnQ9NTAwMCBzeW5jPWZhbHNlCisuYnIKK1RoaXMgY29tbWFuZCB3b3VsZCBiZSBydW4gb24gdGhlIHRyYW5zbWl0dGVyCisKKy5CCisgICAgICAgIGdzdFwtbGF1bmNoIHVkcHNyYyBwb3J0PTUwMDAgISBhcHBsaWNhdGlvbi94LXJ0cCwgY2xvY2stcmF0ZT05MDAwMCxwYXlsb2FkPTk2ICEgcnRwaDI2M3BkZXBheSBxdWV1ZS1kZWxheT0wICEgZmZkZWNfaDI2MyAhIHh2aW1hZ2VzaW5rCisuYnIKK1VzZSB0aGlzIGNvbW1hbmQgb24gdGhlIHJlY2VpdmVyCisKKy5CIERpYWdub3N0aWMKKworLkIKKyAgICAgICAgZ3N0XC1sYXVuY2ggLXYgZmFrZXNyYyBudW0tYnVmZmVycz0xNiAhIGZha2VzaW5rCisuYnIKK0dlbmVyYXRlIGEgbnVsbCBzdHJlYW0gYW5kIGlnbm9yZSBpdCAoYW5kIHByaW50IG91dCBkZXRhaWxzKS4KKworLkIKKyAgICAgICAgZ3N0XC1sYXVuY2ggYXVkaW90ZXN0c3JjICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSAhIG9zc3NpbmsKKy5icgorR2VuZXJhdGUgYSBwdXJlIHNpbmUgdG9uZSB0byB0ZXN0IHRoZSBhdWRpbyBvdXRwdXQKKworLkIKKyAgICAgICAgZ3N0XC1sYXVuY2ggdmlkZW90ZXN0c3JjICEgeHZpbWFnZXNpbmsKKy5icgorLkIKKyAgICAgICAgZ3N0XC1sYXVuY2ggdmlkZW90ZXN0c3JjICEgeGltYWdlc2luaworLmJyCitHZW5lcmF0ZSBhIGZhbWlsaWFyIHRlc3QgcGF0dGVybiB0byB0ZXN0IHRoZSB2aWRlbyBvdXRwdXQKKworLkIgQXV0b21hdGljIGxpbmtpbmcKKworWW91IGNhbiB1c2UgdGhlIGRlY29kZWJpbiBlbGVtZW50IHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSByaWdodCBlbGVtZW50cwordG8gZ2V0IGEgd29ya2luZyBwaXBlbGluZS4KKworLkIKKyAgICAgICAgZ3N0XC1sYXVuY2ggZmlsZXNyYyBsb2NhdGlvbj1tdXNpY2ZpbGUgISBkZWNvZGViaW4gISBhdWRpb2NvbnZlcnQgISBhdWRpb3Jlc2FtcGxlICEgb3Nzc2luaworLmJyCitQbGF5IGFueSBzdXBwb3J0ZWQgYXVkaW8gZm9ybWF0CisKKy5CCisgICAgICAgIGdzdFwtbGF1bmNoIGZpbGVzcmMgbG9jYXRpb249dmlkZW9maWxlICEgZGVjb2RlYmluIG5hbWU9ZGVjb2RlciAgZGVjb2Rlci4gISBxdWV1ZSAhIGF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUgISBvc3NzaW5rICAgZGVjb2Rlci4gISBmZm1wZWdjb2xvcnNwYWNlICEgeHZpbWFnZXNpbmsKKy5icgorUGxheSBhbnkgc3VwcG9ydGVkIHZpZGVvIGZvcm1hdCB3aXRoIHZpZGVvIGFuZCBhdWRpbyBvdXRwdXQuIFRocmVhZHMgYXJlIHVzZWQKK2F1dG9tYXRpY2FsbHkuIFRvIG1ha2UgdGhpcyBldmVuIGVhc2llciwgeW91IGNhbiB1c2UgdGhlIHBsYXliaW4gZWxlbWVudDoKKworLkIKKyAgICAgICAgZ3N0XC1sYXVuY2ggcGxheWJpbiB1cmk9ZmlsZTovLy9ob21lL2pvZS9mb28uYXZpCisuYnIKKworCisuQiBGaWx0ZXJlZCBjb25uZWN0aW9ucworCitUaGVzZSBleGFtcGxlcyBzaG93IHlvdSBob3cgdG8gdXNlIGZpbHRlcmVkIGNhcHMuCisKKy5CCisgICAgICAgIGdzdFwtbGF1bmNoIHZpZGVvdGVzdHNyYyAhICd2aWRlby94LXJhdy15dXYsZm9ybWF0PShmb3VyY2MpWVVZMjt2aWRlby94LXJhdy15dXYsZm9ybWF0PShmb3VyY2MpWVYxMicgISB4dmltYWdlc2luaworLmJyCitTaG93IGEgdGVzdCBpbWFnZSBhbmQgdXNlIHRoZSBZVVkyIG9yIFlWMTIgdmlkZW8gZm9ybWF0IGZvciB0aGlzLgorCisuQgorICAgICAgICBnc3RcLWxhdW5jaCBvc3NzcmMgISAnYXVkaW8veC1yYXctaW50LHJhdGU9WzMyMDAwLDY0MDAwXSx3aWR0aD1bMTYsMzJdLGRlcHRoPXsxNiwyNCwzMn0sc2lnbmVkPShib29sZWFuKXRydWUnICEgd2F2ZW5jICEgZmlsZXNpbmsgbG9jYXRpb249cmVjb3JkaW5nLndhdgorLmJyCityZWNvcmQgYXVkaW8gYW5kIHdyaXRlIGl0IHRvIGEgLndhdiBmaWxlLiBGb3JjZSB1c2FnZSBvZiBzaWduZWQgMTYgdG8gMzIgYml0CitzYW1wbGVzIGFuZCBhIHNhbXBsZSByYXRlIGJldHdlZW4gMzJrSHogYW5kIDY0S0h6LgorCisKKy5TSCAiRU5WSVJPTk1FTlQgVkFSSUFCTEVTIgorLlRQCitcZkJHU1RfREVCVUdcZlIKK0NvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGRlYnVnIGNhdGVnb3JpZXMgYW5kIGxldmVscywgZS5nLgorR1NUX0RFQlVHPXRvdGVtOjQsdHlwZWZpbmQ6NQorLlRQCitcZkJHU1RfREVCVUdfTk9fQ09MT1JcZlIKK1doZW4gdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIGNvbG91cmVkIGRlYnVnIG91dHB1dCBpcyBkaXNhYmxlZC4KKy5UUAorXGZCR1NUX0RFQlVHX0RVTVBfRE9UX0RJUlxmUgorV2hlbiBzZXQgdG8gYSBmaWxlc3lzdGVtIHBhdGgsIHN0b3JlIGRvdCBmaWxlcyBvZiBwaXBlbGluZSBncmFwaHMgdGhlcmUuCisuVFAKK1xmQkdTVF9SRUdJU1RSWVxmUgorUGF0aCBvZiB0aGUgcGx1Z2luIHJlZ2lzdHJ5IGZpbGUuIERlZmF1bHQgaXMKK34vLmdzdHJlYW1lci1HU1RfTUFKT1JNSU5PUi9yZWdpc3RyeS1DUFUuYmluIHdoZXJlIENQVSBpcyB0aGUgbWFjaGluZS9jcHUgdHlwZQorR1N0cmVhbWVyIHdhcyBjb21waWxlZCBmb3IsIGUuZy4gJ2k0ODYnLCAnaTY4NicsICd4ODYtNjQnLCAncHBjJywgZXRjLiAoY2hlY2sKK3RoZSBvdXRwdXQgb2YgInVuYW1lIC1pIiBhbmQgInVuYW1lIC1tIiBmb3IgZGV0YWlscykuCisuVFAKK1xmQkdTVF9SRUdJU1RSWV9VUERBVEVcZlIKK1NldCB0byAibm8iIHRvIGZvcmNlIEdTdHJlYW1lciB0byBhc3N1bWUgdGhhdCBubyBwbHVnaW5zIGhhdmUgY2hhbmdlZCwKK2JlZW4gYWRkZWQgb3IgYmVlbiByZW1vdmVkLiBUaGlzIHdpbGwgbWFrZSBHU3RyZWFtZXIgc2tpcCB0aGUgaW5pdGlhbCBjaGVjaword2hldGhlciBhIHJlYnVpbGQgb2YgdGhlIHJlZ2lzdHJ5IGNhY2hlIGlzIHJlcXVpcmVkIG9yIG5vdC4gVGhpcyBtYXkgYmUgdXNlZnVsCitpbiBlbWJlZGRlZCBlbnZpcm9ubWVudHMgd2hlcmUgdGhlIGluc3RhbGxlZCBwbHVnaW5zIG5ldmVyIGNoYW5nZS4gRG8gbm90Cit1c2UgdGhpcyBvcHRpb24gaW4gYW55IG90aGVyIHNldHVwLgorLlRQCitcZkJHU1RfUExVR0lOX1BBVEhcZlIKK1NwZWNpZmllcyBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2NhbiBmb3IgYWRkaXRpb25hbCBwbHVnaW5zLgorVGhlc2UgdGFrZSBwcmVjZWRlbmNlIG92ZXIgdGhlIHN5c3RlbSBwbHVnaW5zLgorLlRQCitcZkJHU1RfUExVR0lOX1NZU1RFTV9QQVRIXGZSCitTcGVjaWZpZXMgYSBsaXN0IG9mIHBsdWdpbnMgdGhhdCBhcmUgYWx3YXlzIGxvYWRlZCBieSBkZWZhdWx0LiAgSWYgbm90IHNldCwKK3RoaXMgZGVmYXVsdHMgdG8gdGhlIHN5c3RlbS1pbnN0YWxsZWQgcGF0aCwgYW5kIHRoZSBwbHVnaW5zIGluc3RhbGxlZCBpbiB0aGUKK3VzZXIncyBob21lIGRpcmVjdG9yeQorLlRQCitcZkJPUkNfQ09ERVxmUgorVXNlZnVsIE9yYyBlbnZpcm9ubWVudCB2YXJpYWJsZS4gU2V0IE9SQ19DT0RFPWRlYnVnIHRvIGVuYWJsZSBkZWJ1Z2dlcnMKK3N1Y2ggYXMgZ2RiIHRvIGNyZWF0ZSB1c2VmdWwgYmFja3RyYWNlcyBmcm9tIE9yYy1nZW5lcmF0ZWQgY29kZS4gIFNldAorT1JDX0NPREU9YmFja3VwIG9yIE9SQ19DT0RFPWVtdWxhdGUgaWYgeW91IHN1c3BlY3QgT3JjJ3MgU0lNRCBjb2RlCitnZW5lcmF0b3IgaXMgcHJvZHVjaW5nIGluY29ycmVjdCBjb2RlLiAgKFF1aXRlIGEgZmV3IGltcG9ydGFudAorR1N0cmVhbWVyIHBsdWdpbnMgbGlrZSB2aWRlb3Rlc3RzcmMsIGF1ZGlvY29udmVydCBvciBhdWRpb3Jlc2FtcGxlIHVzZSBPcmMpLgorLlRQCitcZkJHX0RFQlVHXGZSCitVc2VmdWwgR0xpYiBlbnZpcm9ubWVudCB2YXJpYWJsZS4gU2V0IEdfREVCVUc9ZmF0YWxfd2FybmluZ3MgdG8gbWFrZQorR1N0cmVhbWVyIHByb2dyYW1zIGFib3J0IHdoZW4gYSBjcml0aWNhbCB3YXJuaW5nIHN1Y2ggYXMgYW4gYXNzZXJ0aW9uIGZhaWx1cmUKK29jY3Vycy4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gZmluZCBvdXQgd2hpY2ggcGFydCBvZiB0aGUgY29kZSBjYXVzZWQKK3RoYXQgd2FybmluZyB0byBiZSB0cmlnZ2VyZWQgYW5kIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcy4gU2ltcGx5IHNldCBHX0RFQlVHCithcyBtZW50aW9uZWQgYWJvdmUgYW5kIHJ1biB0aGUgcHJvZ3JhbSBpbiBnZGIgKG9yIGxldCBpdCBjb3JlIGR1bXApLiBUaGVuIGdldAorYSBzdGFjayB0cmFjZSBpbiB0aGUgdXN1YWwgd2F5LgorLgorLlNIIEZJTEVTCisuVFAgOAorfi8uZ3N0cmVhbWVyLUdTVF9NQUpPUk1JTk9SL3JlZ2lzdHJ5LSouYmluCitUaGUgcGx1Z2luIGNhY2hlOyBjYW4gYmUgZGVsZXRlZCBhdCBhbnkgdGltZSwgd2lsbCBiZSByZS1jcmVhdGVkCithdXRvbWF0aWNhbGx5IHdoZW4gaXQgZG9lcyBub3QgZXhpc3QgeWV0IG9yIHBsdWdpbnMgY2hhbmdlLgorLgorLlNIICJTRUUgQUxTTyIKKy5CUiBnc3RcLWZlZWRiYWNrICgxKSwKKy5CUiBnc3RcLWluc3BlY3QgKDEpLAorLkJSIGdzdFwtdHlwZWZpbmQgKDEpCisuU0ggIkFVVEhPUiIKK1RoZSBHU3RyZWFtZXIgdGVhbSBhdCBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy8KZGlmZiAtLWdpdCBhL3Rvb2xzL2dzdC1sYXVuY2guYyBiL3Rvb2xzL2dzdC1sYXVuY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjg3ZGZkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvZ3N0LWxhdW5jaC5jCkBAIC0wLDAgKzEsMTA4MSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgorICogICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KKyAqICAgICAgICAgICAgICAgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KKyAqCisgKiBnc3QtbGF1bmNoLmM6IHRvb2wgdG8gbGF1bmNoIEdTdHJlYW1lciBwaXBlbGluZXMgZnJvbSB0aGUgY29tbWFuZCBsaW5lCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKy8qIEZJWE1FOiBoYWNrIGFsZXJ0ICovCisjaWZkZWYgSEFWRV9XSU4zMgorI2RlZmluZSBESVNBQkxFX0ZBVUxUX0hBTkRMRVIKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZm5kZWYgRElTQUJMRV9GQVVMVF9IQU5ETEVSCisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGxvY2FsZS5oPiAgICAgICAgICAgICAvKiBmb3IgTENfQUxMICovCisjaW5jbHVkZSAidG9vbHMuaCIKKworLyogRklYTUU6IFRoaXMgaXMganVzdCBhIHRlbXBvcmFyeSBoYWNrLiAgV2Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIKKyAqIGNoZWNrIGZvciBzaWdpbmZvIGhhbmRsaW5nLiAqLworI2lmZGVmIFNBX1NJR0lORk8KKyNkZWZpbmUgVVNFX1NJR0lORk8KKyNlbmRpZgorCitleHRlcm4gdm9sYXRpbGUgZ2Jvb2xlYW4gZ2xpYl9vbl9lcnJvcl9oYWx0OworCisjaWZuZGVmIERJU0FCTEVfRkFVTFRfSEFORExFUgorc3RhdGljIHZvaWQgZmF1bHRfcmVzdG9yZSAodm9pZCk7CitzdGF0aWMgdm9pZCBmYXVsdF9zcGluICh2b2lkKTsKK3N0YXRpYyB2b2lkIHNpZ2ludF9yZXN0b3JlICh2b2lkKTsKK3N0YXRpYyBnYm9vbGVhbiBjYXVnaHRfaW50ciA9IEZBTFNFOworI2VuZGlmCisKKy8qIGV2ZW50X2xvb3AgcmV0dXJuIGNvZGVzICovCit0eXBlZGVmIGVudW0gX0V2ZW50TG9vcFJlc3VsdAoreworICBFTFJfTk9fRVJST1IgPSAwLAorICBFTFJfRVJST1IsCisgIEVMUl9JTlRFUlJVUFQKK30gRXZlbnRMb29wUmVzdWx0OworCitzdGF0aWMgR3N0RWxlbWVudCAqcGlwZWxpbmU7CitzdGF0aWMgRXZlbnRMb29wUmVzdWx0IGNhdWdodF9lcnJvciA9IEVMUl9OT19FUlJPUjsKK3N0YXRpYyBnYm9vbGVhbiBxdWlldCA9IEZBTFNFOworc3RhdGljIGdib29sZWFuIHRhZ3MgPSBGQUxTRTsKK3N0YXRpYyBnYm9vbGVhbiBtZXNzYWdlcyA9IEZBTFNFOworc3RhdGljIGdib29sZWFuIGlzX2xpdmUgPSBGQUxTRTsKK3N0YXRpYyBnYm9vbGVhbiB3YWl0aW5nX2VvcyA9IEZBTFNFOworCisvKiBjb252ZW5pZW5jZSBtYWNybyBzbyB3ZSBkb24ndCBoYXZlIHRvIGxpdHRlciB0aGUgY29kZSB3aXRoIGlmKCFxdWlldCkgKi8KKyNkZWZpbmUgUFJJTlQgaWYoIXF1aWV0KWdfcHJpbnQKKworI2lmbmRlZiBESVNBQkxFX0ZBVUxUX0hBTkRMRVIKKyNpZm5kZWYgVVNFX1NJR0lORk8KK3N0YXRpYyB2b2lkCitmYXVsdF9oYW5kbGVyX3NpZ2hhbmRsZXIgKGludCBzaWdudW0pCit7CisgIGZhdWx0X3Jlc3RvcmUgKCk7CisKKyAgLyogcHJpbnRmIGlzIHVzZWQgaW5zdGVhZCBvZiBnX3ByaW50KCksIHNpbmNlIGl0J3MgbGVzcyBsaWtlbHkgdG8KKyAgICogZGVhZGxvY2sgKi8KKyAgc3dpdGNoIChzaWdudW0pIHsKKyAgICBjYXNlIFNJR1NFR1Y6CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJDYXVnaHQgU0lHU0VHVlxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlIFNJR1FVSVQ6CisgICAgICBpZiAoIXF1aWV0KQorICAgICAgICBwcmludGYgKCJDYXVnaHQgU0lHUVVJVFxuIik7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgZnByaW50ZiAoc3RkZXJyLCAic2lnbm86ICAlZFxuIiwgc2lnbnVtKTsKKyAgICAgIGJyZWFrOworICB9CisKKyAgZmF1bHRfc3BpbiAoKTsKK30KKworI2Vsc2UgLyogVVNFX1NJR0lORk8gKi8KKworc3RhdGljIHZvaWQKK2ZhdWx0X2hhbmRsZXJfc2lnYWN0aW9uIChpbnQgc2lnbnVtLCBzaWdpbmZvX3QgKiBzaSwgdm9pZCAqbWlzYykKK3sKKyAgZmF1bHRfcmVzdG9yZSAoKTsKKworICAvKiBwcmludGYgaXMgdXNlZCBpbnN0ZWFkIG9mIGdfcHJpbnQoKSwgc2luY2UgaXQncyBsZXNzIGxpa2VseSB0bworICAgKiBkZWFkbG9jayAqLworICBzd2l0Y2ggKHNpLT5zaV9zaWdubykgeworICAgIGNhc2UgU0lHU0VHVjoKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIkNhdWdodCBTSUdTRUdWIGFjY2Vzc2luZyBhZGRyZXNzICVwXG4iLCBzaS0+c2lfYWRkcik7CisgICAgICBicmVhazsKKyAgICBjYXNlIFNJR1FVSVQ6CisgICAgICBpZiAoIXF1aWV0KQorICAgICAgICBwcmludGYgKCJDYXVnaHQgU0lHUVVJVFxuIik7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgZnByaW50ZiAoc3RkZXJyLCAic2lnbm86ICAlZFxuIiwgc2ktPnNpX3NpZ25vKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgImVycm5vOiAgJWRcbiIsIHNpLT5zaV9lcnJubyk7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJjb2RlOiAgICVkXG4iLCBzaS0+c2lfY29kZSk7CisgICAgICBicmVhazsKKyAgfQorCisgIGZhdWx0X3NwaW4gKCk7Cit9CisjZW5kaWYgLyogVVNFX1NJR0lORk8gKi8KKworc3RhdGljIHZvaWQKK2ZhdWx0X3NwaW4gKHZvaWQpCit7CisgIGludCBzcGlubmluZyA9IFRSVUU7CisKKyAgZ2xpYl9vbl9lcnJvcl9oYWx0ID0gRkFMU0U7CisgIGdfb25fZXJyb3Jfc3RhY2tfdHJhY2UgKCJnc3QtbGF1bmNoIik7CisKKyAgd2FpdCAoTlVMTCk7CisKKyAgLyogRklYTUUgaG93IGRvIHdlIGtub3cgaWYgd2Ugd2VyZSBydW4gYnkgbGlidG9vbD8gKi8KKyAgZnByaW50ZiAoc3RkZXJyLAorICAgICAgIlNwaW5uaW5nLiAgUGxlYXNlIHJ1biAnZ2RiIGdzdC1sYXVuY2ggJWQnIHRvIGNvbnRpbnVlIGRlYnVnZ2luZywgIgorICAgICAgIkN0cmwtQyB0byBxdWl0LCBvciBDdHJsLVxcIHRvIGR1bXAgY29yZS5cbiIsIChnaW50KSBnZXRwaWQgKCkpOworICB3aGlsZSAoc3Bpbm5pbmcpCisgICAgZ191c2xlZXAgKDEwMDAwMDApOworfQorCitzdGF0aWMgdm9pZAorZmF1bHRfcmVzdG9yZSAodm9pZCkKK3sKKyAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247CisKKyAgbWVtc2V0ICgmYWN0aW9uLCAwLCBzaXplb2YgKGFjdGlvbikpOworICBhY3Rpb24uc2FfaGFuZGxlciA9IFNJR19ERkw7CisKKyAgc2lnYWN0aW9uIChTSUdTRUdWLCAmYWN0aW9uLCBOVUxMKTsKKyAgc2lnYWN0aW9uIChTSUdRVUlULCAmYWN0aW9uLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQKK2ZhdWx0X3NldHVwICh2b2lkKQoreworICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKKworICBtZW1zZXQgKCZhY3Rpb24sIDAsIHNpemVvZiAoYWN0aW9uKSk7CisjaWZkZWYgVVNFX1NJR0lORk8KKyAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IGZhdWx0X2hhbmRsZXJfc2lnYWN0aW9uOworICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9TSUdJTkZPOworI2Vsc2UKKyAgYWN0aW9uLnNhX2hhbmRsZXIgPSBmYXVsdF9oYW5kbGVyX3NpZ2hhbmRsZXI7CisjZW5kaWYKKworICBzaWdhY3Rpb24gKFNJR1NFR1YsICZhY3Rpb24sIE5VTEwpOworICBzaWdhY3Rpb24gKFNJR1FVSVQsICZhY3Rpb24sIE5VTEwpOworfQorI2VuZGlmIC8qIERJU0FCTEVfRkFVTFRfSEFORExFUiAqLworCit0eXBlZGVmIHN0cnVjdCBfR3N0SW5kZXhTdGF0cworeworICBnaW50IGlkOworICBnY2hhciAqZGVzYzsKKworICBndWludCBudW1fZnJhbWVzOworICBndWludCBudW1fa2V5ZnJhbWVzOworICBndWludCBudW1fZGx0ZnJhbWVzOworICBHc3RDbG9ja1RpbWUgbGFzdF9rZXlmcmFtZTsKKyAgR3N0Q2xvY2tUaW1lIGxhc3RfZGx0ZnJhbWU7CisgIEdzdENsb2NrVGltZSBtaW5fa2V5ZnJhbWVfZ2FwOworICBHc3RDbG9ja1RpbWUgbWF4X2tleWZyYW1lX2dhcDsKKyAgR3N0Q2xvY2tUaW1lIGF2Z19rZXlmcmFtZV9nYXA7Cit9IEdzdEluZGV4U3RhdHM7CisKK3N0YXRpYyB2b2lkCitlbnRyeV9hZGRlZCAoR3N0SW5kZXggKiBpbmRleCwgR3N0SW5kZXhFbnRyeSAqIGVudHJ5LCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIEdQdHJBcnJheSAqaW5kZXhfc3RhdHMgPSAoR1B0ckFycmF5ICopIHVzZXJfZGF0YTsKKyAgR3N0SW5kZXhTdGF0cyAqczsKKworICBzd2l0Y2ggKGVudHJ5LT50eXBlKSB7CisgICAgY2FzZSBHU1RfSU5ERVhfRU5UUllfSUQ6CisgICAgICAvKiB3ZSBoYXZlIGEgbmV3IHdyaXRlciAqLworICAgICAgR1NUX0RFQlVHX09CSkVDVCAoaW5kZXgsICJpZCAlZDogZGVzY3JpYmVzIHdyaXRlciAlcyIsIGVudHJ5LT5pZCwKKyAgICAgICAgICBHU1RfSU5ERVhfSURfREVTQ1JJUFRJT04gKGVudHJ5KSk7CisgICAgICBpZiAoZW50cnktPmlkID49IGluZGV4X3N0YXRzLT5sZW4pIHsKKyAgICAgICAgZ19wdHJfYXJyYXlfc2V0X3NpemUgKGluZGV4X3N0YXRzLCBlbnRyeS0+aWQgKyAxKTsKKyAgICAgIH0KKyAgICAgIHMgPSBnX25ldyAoR3N0SW5kZXhTdGF0cywgMSk7CisgICAgICBzLT5pZCA9IGVudHJ5LT5pZDsKKyAgICAgIHMtPmRlc2MgPSBnX3N0cmR1cCAoR1NUX0lOREVYX0lEX0RFU0NSSVBUSU9OIChlbnRyeSkpOworICAgICAgcy0+bnVtX2ZyYW1lcyA9IHMtPm51bV9rZXlmcmFtZXMgPSBzLT5udW1fZGx0ZnJhbWVzID0gMDsKKyAgICAgIHMtPmxhc3Rfa2V5ZnJhbWUgPSBzLT5sYXN0X2RsdGZyYW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgICAgIHMtPm1pbl9rZXlmcmFtZV9nYXAgPSBzLT5tYXhfa2V5ZnJhbWVfZ2FwID0gcy0+YXZnX2tleWZyYW1lX2dhcCA9CisgICAgICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyAgICAgIGdfcHRyX2FycmF5X2luZGV4IChpbmRleF9zdGF0cywgZW50cnktPmlkKSA9IHM7CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9JTkRFWF9FTlRSWV9GT1JNQVQ6CisgICAgICAvKiBoYXZlIG5vdCBmb3VuZCBhbnkgY29kZSBjYWxsaW5nIHRoaXMgKi8KKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGluZGV4LCAiaWQgJWQ6IHJlZ2lzdGVyZWQgZm9ybWF0ICVkIGZvciAlc1xuIiwKKyAgICAgICAgICBlbnRyeS0+aWQsIEdTVF9JTkRFWF9GT1JNQVRfRk9STUFUIChlbnRyeSksCisgICAgICAgICAgR1NUX0lOREVYX0ZPUk1BVF9LRVkgKGVudHJ5KSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9JTkRFWF9FTlRSWV9BU1NPQ0lBVElPTjoKKyAgICB7CisgICAgICBnaW50NjQgdHM7CisgICAgICBHc3RBc3NvY0ZsYWdzIGZsYWdzID0gR1NUX0lOREVYX0FTU09DX0ZMQUdTIChlbnRyeSk7CisKKyAgICAgIHMgPSBnX3B0cl9hcnJheV9pbmRleCAoaW5kZXhfc3RhdHMsIGVudHJ5LT5pZCk7CisgICAgICBnc3RfaW5kZXhfZW50cnlfYXNzb2NfbWFwIChlbnRyeSwgR1NUX0ZPUk1BVF9USU1FLCAmdHMpOworCisgICAgICBpZiAoZmxhZ3MgJiBHU1RfQVNTT0NJQVRJT05fRkxBR19LRVlfVU5JVCkgeworICAgICAgICBzLT5udW1fa2V5ZnJhbWVzKys7CisKKyAgICAgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0cykpIHsKKyAgICAgICAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHMtPmxhc3Rfa2V5ZnJhbWUpKSB7CisgICAgICAgICAgICBHc3RDbG9ja1RpbWVEaWZmIGQgPSBHU1RfQ0xPQ0tfRElGRiAocy0+bGFzdF9rZXlmcmFtZSwgdHMpOworCisgICAgICAgICAgICBpZiAoR19VTkxJS0VMWSAoZCA8IDApKSB7CisgICAgICAgICAgICAgIEdTVF9XQVJOSU5HICgicmVjZWl2ZWQgb3V0LW9mLW9yZGVyIGtleWZyYW1lIGF0ICUiCisgICAgICAgICAgICAgICAgICBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKHRzKSk7CisgICAgICAgICAgICAgIC8qIEZJWE1FOiBkb2VzIGl0IHN0aWxsIG1ha2Ugc2Vuc2UgdG8gdXNlIHRoYXQgZm9yIHRoZSBzdGF0aXN0aWNzICovCisgICAgICAgICAgICAgIGQgPSBHU1RfQ0xPQ0tfRElGRiAodHMsIHMtPmxhc3Rfa2V5ZnJhbWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHMtPm1pbl9rZXlmcmFtZV9nYXApKSB7CisgICAgICAgICAgICAgIGlmIChkIDwgcy0+bWluX2tleWZyYW1lX2dhcCkKKyAgICAgICAgICAgICAgICBzLT5taW5fa2V5ZnJhbWVfZ2FwID0gZDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHMtPm1pbl9rZXlmcmFtZV9nYXAgPSBkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzLT5tYXhfa2V5ZnJhbWVfZ2FwKSkgeworICAgICAgICAgICAgICBpZiAoZCA+IHMtPm1heF9rZXlmcmFtZV9nYXApCisgICAgICAgICAgICAgICAgcy0+bWF4X2tleWZyYW1lX2dhcCA9IGQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBzLT5tYXhfa2V5ZnJhbWVfZ2FwID0gZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocy0+YXZnX2tleWZyYW1lX2dhcCkpIHsKKyAgICAgICAgICAgICAgcy0+YXZnX2tleWZyYW1lX2dhcCA9IChkICsgcy0+bnVtX2ZyYW1lcyAqIHMtPmF2Z19rZXlmcmFtZV9nYXApIC8KKyAgICAgICAgICAgICAgICAgIChzLT5udW1fZnJhbWVzICsgMSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBzLT5hdmdfa2V5ZnJhbWVfZ2FwID0gZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgcy0+bGFzdF9rZXlmcmFtZSA9IHRzOworICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAoZmxhZ3MgJiBHU1RfQVNTT0NJQVRJT05fRkxBR19ERUxUQV9VTklUKSB7CisgICAgICAgIHMtPm51bV9kbHRmcmFtZXMrKzsKKyAgICAgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0cykpIHsKKyAgICAgICAgICBzLT5sYXN0X2RsdGZyYW1lID0gdHM7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHMtPm51bV9mcmFtZXMrKzsKKworICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorfQorCisvKiBwcmludCBzdGF0aXN0aWNzIGZyb20gdGhlIGVudHJ5X2FkZGVkIGNhbGxiYWNrLCBmcmVlIHRoZSBlbnRyaWVzICovCitzdGF0aWMgdm9pZAorcHJpbnRfaW5kZXhfc3RhdHMgKEdQdHJBcnJheSAqIGluZGV4X3N0YXRzKQoreworICBnaW50IGk7CisKKyAgaWYgKGluZGV4X3N0YXRzLT5sZW4pIHsKKyAgICBnX3ByaW50ICgiJXM6XG4iLCBfKCJJbmRleCBzdGF0aXN0aWNzIikpOworICB9CisKKyAgZm9yIChpID0gMDsgaSA8IGluZGV4X3N0YXRzLT5sZW47IGkrKykgeworICAgIEdzdEluZGV4U3RhdHMgKnMgPSBnX3B0cl9hcnJheV9pbmRleCAoaW5kZXhfc3RhdHMsIGkpOworICAgIGlmIChzKSB7CisgICAgICBnX3ByaW50ICgiaWQgJWQsICVzXG4iLCBzLT5pZCwgcy0+ZGVzYyk7CisgICAgICBpZiAocy0+bnVtX2ZyYW1lcykgeworICAgICAgICBHc3RDbG9ja1RpbWUgbGFzdF9mcmFtZSA9IHMtPmxhc3Rfa2V5ZnJhbWU7CisKKyAgICAgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzLT5sYXN0X2RsdGZyYW1lKSkgeworICAgICAgICAgIGlmICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGxhc3RfZnJhbWUpIHx8CisgICAgICAgICAgICAgIChzLT5sYXN0X2RsdGZyYW1lID4gbGFzdF9mcmFtZSkpCisgICAgICAgICAgICBsYXN0X2ZyYW1lID0gcy0+bGFzdF9kbHRmcmFtZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAobGFzdF9mcmFtZSkpIHsKKyAgICAgICAgICBnX3ByaW50ICgiICB0b3RhbCB0aW1lICAgICAgICAgICAgICAgPSAlIiBHU1RfVElNRV9GT1JNQVQgIlxuIiwKKyAgICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAobGFzdF9mcmFtZSkpOworICAgICAgICB9CisgICAgICAgIGdfcHJpbnQgKCIgIGZyYW1lL2tleWZyYW1lIHJhdGUgICAgICA9ICV1IC8gJXUgPSAiLCBzLT5udW1fZnJhbWVzLAorICAgICAgICAgICAgcy0+bnVtX2tleWZyYW1lcyk7CisgICAgICAgIGlmIChzLT5udW1fa2V5ZnJhbWVzKQorICAgICAgICAgIGdfcHJpbnQgKCIlbGZcbiIsIHMtPm51bV9mcmFtZXMgLyAoZ2RvdWJsZSkgcy0+bnVtX2tleWZyYW1lcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBnX3ByaW50ICgiLVxuIik7CisgICAgICAgIGlmIChzLT5udW1fa2V5ZnJhbWVzKSB7CisgICAgICAgICAgZ19wcmludCAoIiAgbWluL2F2Zy9tYXgga2V5ZnJhbWUgZ2FwID0gJSIgR1NUX1RJTUVfRk9STUFUICIsICUiCisgICAgICAgICAgICAgIEdTVF9USU1FX0ZPUk1BVCAiLCAlIiBHU1RfVElNRV9GT1JNQVQgIlxuIiwKKyAgICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAocy0+bWluX2tleWZyYW1lX2dhcCksCisgICAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHMtPmF2Z19rZXlmcmFtZV9nYXApLAorICAgICAgICAgICAgICBHU1RfVElNRV9BUkdTIChzLT5tYXhfa2V5ZnJhbWVfZ2FwKSk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGdfcHJpbnQgKCIgIG5vIHN0YXRzXG4iKTsKKyAgICAgIH0KKworICAgICAgZ19mcmVlIChzLT5kZXNjKTsKKyAgICAgIGdfZnJlZSAocyk7CisgICAgfQorICB9Cit9CisKKy8qIEtpZHMsIHVzZSB0aGUgZnVuY3Rpb25zIGZyb20gbGliZ3N0cGJ1dGlscyBpbiBnc3QtcGx1Z2lucy1iYXNlIGluIHlvdXIKKyAqIG93biBjb2RlICh3ZSBjYW4ndCBkbyB0aGF0IGhlcmUgYmVjYXVzZSBpdCB3b3VsZCBpbnRyb2R1Y2UgYSBjaXJjdWxhcgorICogZGVwZW5kZW5jeSkgKi8KK3N0YXRpYyBnYm9vbGVhbgorZ3N0X2lzX21pc3NpbmdfcGx1Z2luX21lc3NhZ2UgKEdzdE1lc3NhZ2UgKiBtc2cpCit7CisgIGlmIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpICE9IEdTVF9NRVNTQUdFX0VMRU1FTlQKKyAgICAgIHx8IGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUgKG1zZykgPT0gTlVMTCkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgcmV0dXJuIGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUgKG1zZyksCisgICAgICAibWlzc2luZy1wbHVnaW4iKTsKK30KKworc3RhdGljIGNvbnN0IGdjaGFyICoKK2dzdF9taXNzaW5nX3BsdWdpbl9tZXNzYWdlX2dldF9kZXNjcmlwdGlvbiAoR3N0TWVzc2FnZSAqIG1zZykKK3sKKyAgcmV0dXJuIGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZSAobXNnKSwgIm5hbWUiKTsKK30KKworc3RhdGljIHZvaWQKK3ByaW50X2Vycm9yX21lc3NhZ2UgKEdzdE1lc3NhZ2UgKiBtc2cpCit7CisgIEdFcnJvciAqZXJyID0gTlVMTDsKKyAgZ2NoYXIgKm5hbWUsICpkZWJ1ZyA9IE5VTEw7CisKKyAgbmFtZSA9IGdzdF9vYmplY3RfZ2V0X3BhdGhfc3RyaW5nIChtc2ctPnNyYyk7CisgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtc2csICZlcnIsICZkZWJ1Zyk7CisKKyAgZ19wcmludGVyciAoXygiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIpLCBuYW1lLCBlcnItPm1lc3NhZ2UpOworICBpZiAoZGVidWcgIT0gTlVMTCkKKyAgICBnX3ByaW50ZXJyIChfKCJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4lc1xuIiksIGRlYnVnKTsKKworICBnX2Vycm9yX2ZyZWUgKGVycik7CisgIGdfZnJlZSAoZGVidWcpOworICBnX2ZyZWUgKG5hbWUpOworfQorCitzdGF0aWMgdm9pZAorcHJpbnRfdGFnIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwgY29uc3QgZ2NoYXIgKiB0YWcsIGdwb2ludGVyIHVudXNlZCkKK3sKKyAgZ2ludCBpLCBjb3VudDsKKworICBjb3VudCA9IGdzdF90YWdfbGlzdF9nZXRfdGFnX3NpemUgKGxpc3QsIHRhZyk7CisKKyAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICBnY2hhciAqc3RyOworCisgICAgaWYgKGdzdF90YWdfZ2V0X3R5cGUgKHRhZykgPT0gR19UWVBFX1NUUklORykgeworICAgICAgaWYgKCFnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZ19pbmRleCAobGlzdCwgdGFnLCBpLCAmc3RyKSkKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7CisgICAgfSBlbHNlIGlmIChnc3RfdGFnX2dldF90eXBlICh0YWcpID09IEdTVF9UWVBFX0JVRkZFUikgeworICAgICAgR3N0QnVmZmVyICppbWc7CisKKyAgICAgIGltZyA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyIChnc3RfdGFnX2xpc3RfZ2V0X3ZhbHVlX2luZGV4IChsaXN0LCB0YWcsIGkpKTsKKyAgICAgIGlmIChpbWcpIHsKKyAgICAgICAgZ2NoYXIgKmNhcHNfc3RyOworCisgICAgICAgIGNhcHNfc3RyID0gZ19zdHJkdXAgKCJ1bmtub3duIik7CisgICAgICAgIHN0ciA9IGdfc3RyZHVwX3ByaW50ZiAoImJ1ZmZlciBvZiAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzLCB0eXBlOiAlcyIsCisgICAgICAgICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChpbWcpLCBjYXBzX3N0cik7CisgICAgICAgIGdfZnJlZSAoY2Fwc19zdHIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgc3RyID0gZ19zdHJkdXAgKCJOVUxMIGJ1ZmZlciIpOworICAgICAgfQorICAgIH0gZWxzZSBpZiAoZ3N0X3RhZ19nZXRfdHlwZSAodGFnKSA9PSBHU1RfVFlQRV9EQVRFX1RJTUUpIHsKKyAgICAgIEdzdERhdGVUaW1lICpkdCA9IE5VTEw7CisKKyAgICAgIGdzdF90YWdfbGlzdF9nZXRfZGF0ZV90aW1lX2luZGV4IChsaXN0LCB0YWcsIGksICZkdCk7CisgICAgICBpZiAoZ3N0X2RhdGVfdGltZV9nZXRfaG91ciAoZHQpIDwgMCkgeworICAgICAgICBzdHIgPSBnX3N0cmR1cF9wcmludGYgKCIlMDJ1LSUwMnUtJTA0dSIsIGdzdF9kYXRlX3RpbWVfZ2V0X2RheSAoZHQpLAorICAgICAgICAgICAgZ3N0X2RhdGVfdGltZV9nZXRfbW9udGggKGR0KSwgZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoZHQpKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGdkb3VibGUgdHpfb2Zmc2V0ID0gZ3N0X2RhdGVfdGltZV9nZXRfdGltZV96b25lX29mZnNldCAoZHQpOworICAgICAgICBnY2hhciB0el9zdHJbMzJdOworCisgICAgICAgIGlmICh0el9vZmZzZXQgIT0gMC4wKSB7CisgICAgICAgICAgZ19zbnByaW50ZiAodHpfc3RyLCBzaXplb2YgKHR6X3N0ciksICIoVVRDICVzJWdoKSIsCisgICAgICAgICAgICAgICh0el9vZmZzZXQgPiAwLjApID8gIisiIDogIiIsIHR6X29mZnNldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgZ19zbnByaW50ZiAodHpfc3RyLCBzaXplb2YgKHR6X3N0ciksICIoVVRDKSIpOworICAgICAgICB9CisKKyAgICAgICAgc3RyID0gZ19zdHJkdXBfcHJpbnRmICgiJTA0dS0lMDJ1LSUwMnUgJTAydTolMDJ1OiUwMnUgJXMiLAorICAgICAgICAgICAgZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoZHQpLCBnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoZHQpLAorICAgICAgICAgICAgZ3N0X2RhdGVfdGltZV9nZXRfZGF5IChkdCksIGdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIgKGR0KSwKKyAgICAgICAgICAgIGdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZSAoZHQpLCBnc3RfZGF0ZV90aW1lX2dldF9zZWNvbmQgKGR0KSwKKyAgICAgICAgICAgIHR6X3N0cik7CisgICAgICB9CisgICAgICBnc3RfZGF0ZV90aW1lX3VucmVmIChkdCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHN0ciA9CisgICAgICAgICAgZ19zdHJkdXBfdmFsdWVfY29udGVudHMgKGdzdF90YWdfbGlzdF9nZXRfdmFsdWVfaW5kZXggKGxpc3QsIHRhZywgaSkpOworICAgIH0KKworICAgIGlmIChpID09IDApIHsKKyAgICAgIFBSSU5UICgiJTE2czogJXNcbiIsIGdzdF90YWdfZ2V0X25pY2sgKHRhZyksIHN0cik7CisgICAgfSBlbHNlIHsKKyAgICAgIFBSSU5UICgiJTE2czogJXNcbiIsICIiLCBzdHIpOworICAgIH0KKworICAgIGdfZnJlZSAoc3RyKTsKKyAgfQorfQorCisjaWZuZGVmIERJU0FCTEVfRkFVTFRfSEFORExFUgorLyogd2Ugb25seSB1c2Ugc2lnaGFuZGxlciBoZXJlIGJlY2F1c2UgdGhlIHJlZ2lzdGVycyBhcmUgbm90IGltcG9ydGFudCAqLworc3RhdGljIHZvaWQKK3NpZ2ludF9oYW5kbGVyX3NpZ2hhbmRsZXIgKGludCBzaWdudW0pCit7CisgIFBSSU5UICgiQ2F1Z2h0IGludGVycnVwdCAtLSAiKTsKKworICAvKiBJZiB3ZSB3ZXJlIHdhaXRpbmcgZm9yIGFuIEVPUywgd2Ugc3RpbGwgd2FudCB0byBjYXRjaAorICAgKiB0aGUgbmV4dCBzaWduYWwgdG8gc2h1dGRvd24gcHJvcGVybHkgKGFuZCB0aGUgZm9sbG93aW5nIG9uZQorICAgKiB3aWxsIHF1aXQgdGhlIHByb2dyYW0pLiAqLworICBpZiAod2FpdGluZ19lb3MpIHsKKyAgICB3YWl0aW5nX2VvcyA9IEZBTFNFOworICB9IGVsc2UgeworICAgIHNpZ2ludF9yZXN0b3JlICgpOworICB9CisgIC8qIHdlIHNldCBhIGZsYWcgdGhhdCBpcyBjaGVja2VkIGJ5IHRoZSBtYWlubG9vcCwgd2UgY2Fubm90IGRvIG11Y2ggaW4gdGhlCisgICAqIGludGVycnVwdCBoYW5kbGVyIChubyBtdXRleCBvciBvdGhlciBibG9ja2luZyBzdHVmZikgKi8KKyAgY2F1Z2h0X2ludHIgPSBUUlVFOworfQorCisvKiBpcyBjYWxsZWQgZXZlcnkgMjUwIG1pbGxpc2Vjb25kcyAoNCB0aW1lcyBhIHNlY29uZCksIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcgorICogd2lsbCBzZXQgYSBmbGFnIGZvciB1cy4gV2UgcmVhY3QgdG8gdGhpcyBieSBwb3N0aW5nIGEgbWVzc2FnZS4gKi8KK3N0YXRpYyBnYm9vbGVhbgorY2hlY2tfaW50ciAoR3N0RWxlbWVudCAqIHBpcGVsaW5lKQoreworICBpZiAoIWNhdWdodF9pbnRyKSB7CisgICAgcmV0dXJuIFRSVUU7CisgIH0gZWxzZSB7CisgICAgY2F1Z2h0X2ludHIgPSBGQUxTRTsKKyAgICBQUklOVCAoImhhbmRsaW5nIGludGVycnVwdC5cbiIpOworCisgICAgLyogcG9zdCBhbiBhcHBsaWNhdGlvbiBzcGVjaWZpYyBtZXNzYWdlICovCisgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLAorICAgICAgICBnc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRpb24gKEdTVF9PQkpFQ1QgKHBpcGVsaW5lKSwKKyAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3ICgiR3N0TGF1bmNoSW50ZXJydXB0IiwKKyAgICAgICAgICAgICAgICAibWVzc2FnZSIsIEdfVFlQRV9TVFJJTkcsICJQaXBlbGluZSBpbnRlcnJ1cHRlZCIsIE5VTEwpKSk7CisKKyAgICAvKiByZW1vdmUgdGltZW91dCBoYW5kbGVyICovCisgICAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitzaWdpbnRfc2V0dXAgKHZvaWQpCit7CisgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworCisgIG1lbXNldCAoJmFjdGlvbiwgMCwgc2l6ZW9mIChhY3Rpb24pKTsKKyAgYWN0aW9uLnNhX2hhbmRsZXIgPSBzaWdpbnRfaGFuZGxlcl9zaWdoYW5kbGVyOworCisgIHNpZ2FjdGlvbiAoU0lHSU5ULCAmYWN0aW9uLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQKK3NpZ2ludF9yZXN0b3JlICh2b2lkKQoreworICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKKworICBtZW1zZXQgKCZhY3Rpb24sIDAsIHNpemVvZiAoYWN0aW9uKSk7CisgIGFjdGlvbi5zYV9oYW5kbGVyID0gU0lHX0RGTDsKKworICBzaWdhY3Rpb24gKFNJR0lOVCwgJmFjdGlvbiwgTlVMTCk7Cit9CisjZW5kaWYgLyogRElTQUJMRV9GQVVMVF9IQU5ETEVSICovCisKKy8qIHJldHVybnMgRUxSX0VSUk9SIGlmIHRoZXJlIHdhcyBhbiBlcnJvcgorICogb3IgRUxSX0lOVEVSUlVQVCBpZiB3ZSBjYXVnaHQgYSBrZXlib2FyZCBpbnRlcnJ1cHQKKyAqIG9yIEVMUl9OT19FUlJPUiBvdGhlcndpc2UuICovCitzdGF0aWMgRXZlbnRMb29wUmVzdWx0CitldmVudF9sb29wIChHc3RFbGVtZW50ICogcGlwZWxpbmUsIGdib29sZWFuIGJsb2NraW5nLCBHc3RTdGF0ZSB0YXJnZXRfc3RhdGUpCit7CisjaWZuZGVmIERJU0FCTEVfRkFVTFRfSEFORExFUgorICBndWxvbmcgdGltZW91dF9pZDsKKyNlbmRpZgorICBHc3RCdXMgKmJ1czsKKyAgR3N0TWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisgIEV2ZW50TG9vcFJlc3VsdCByZXMgPSBFTFJfTk9fRVJST1I7CisgIGdib29sZWFuIGJ1ZmZlcmluZyA9IEZBTFNFOworCisgIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKEdTVF9FTEVNRU5UIChwaXBlbGluZSkpOworCisjaWZuZGVmIERJU0FCTEVfRkFVTFRfSEFORExFUgorICB0aW1lb3V0X2lkID0gZ190aW1lb3V0X2FkZCAoMjUwLCAoR1NvdXJjZUZ1bmMpIGNoZWNrX2ludHIsIHBpcGVsaW5lKTsKKyNlbmRpZgorCisgIHdoaWxlIChUUlVFKSB7CisgICAgbWVzc2FnZSA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9BTlksIGJsb2NraW5nID8gLTEgOiAwKTsKKworICAgIC8qIGlmIHRoZSBwb2xsIHRpbWVkIG91dCwgb25seSB3aGVuICFibG9ja2luZyAqLworICAgIGlmIChtZXNzYWdlID09IE5VTEwpCisgICAgICBnb3RvIGV4aXQ7CisKKyAgICAvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIGR1bXAgbWVzc2FnZXMgdG8gdGhlIGNvbnNvbGUgKi8KKyAgICBpZiAobWVzc2FnZXMpIHsKKyAgICAgIEdzdE9iamVjdCAqc3JjX29iajsKKyAgICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqczsKKyAgICAgIGd1aW50MzIgc2VxbnVtOworCisgICAgICBzZXFudW0gPSBnc3RfbWVzc2FnZV9nZXRfc2VxbnVtIChtZXNzYWdlKTsKKworICAgICAgcyA9IGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUgKG1lc3NhZ2UpOworCisgICAgICBzcmNfb2JqID0gR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKTsKKworICAgICAgaWYgKEdTVF9JU19FTEVNRU5UIChzcmNfb2JqKSkgeworICAgICAgICBQUklOVCAoXygiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIiksCisgICAgICAgICAgICAoZ3VpbnQpIHNlcW51bSwgR1NUX0VMRU1FTlRfTkFNRSAoc3JjX29iaiksCisgICAgICAgICAgICBHU1RfTUVTU0FHRV9UWVBFX05BTUUgKG1lc3NhZ2UpKTsKKyAgICAgIH0gZWxzZSBpZiAoR1NUX0lTX1BBRCAoc3JjX29iaikpIHsKKyAgICAgICAgUFJJTlQgKF8oIkdvdCBtZXNzYWdlICMldSBmcm9tIHBhZCBcIiVzOiVzXCIgKCVzKTogIiksCisgICAgICAgICAgICAoZ3VpbnQpIHNlcW51bSwgR1NUX0RFQlVHX1BBRF9OQU1FIChzcmNfb2JqKSwKKyAgICAgICAgICAgIEdTVF9NRVNTQUdFX1RZUEVfTkFNRSAobWVzc2FnZSkpOworICAgICAgfSBlbHNlIGlmIChHU1RfSVNfT0JKRUNUIChzcmNfb2JqKSkgeworICAgICAgICBQUklOVCAoXygiR290IG1lc3NhZ2UgIyV1IGZyb20gb2JqZWN0IFwiJXNcIiAoJXMpOiAiKSwKKyAgICAgICAgICAgIChndWludCkgc2VxbnVtLCBHU1RfT0JKRUNUX05BTUUgKHNyY19vYmopLAorICAgICAgICAgICAgR1NUX01FU1NBR0VfVFlQRV9OQU1FIChtZXNzYWdlKSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBQUklOVCAoXygiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIpLCAoZ3VpbnQpIHNlcW51bSwKKyAgICAgICAgICAgIEdTVF9NRVNTQUdFX1RZUEVfTkFNRSAobWVzc2FnZSkpOworICAgICAgfQorCisgICAgICBpZiAocykgeworICAgICAgICBnY2hhciAqc3N0cjsKKworICAgICAgICBzc3RyID0gZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKHMpOworICAgICAgICBQUklOVCAoIiVzXG4iLCBzc3RyKTsKKyAgICAgICAgZ19mcmVlIChzc3RyKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIFBSSU5UICgibm8gbWVzc2FnZSBkZXRhaWxzXG4iKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpKSB7CisgICAgICBjYXNlIEdTVF9NRVNTQUdFX05FV19DTE9DSzoKKyAgICAgIHsKKyAgICAgICAgR3N0Q2xvY2sgKmNsb2NrOworCisgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX25ld19jbG9jayAobWVzc2FnZSwgJmNsb2NrKTsKKworICAgICAgICBQUklOVCAoIk5ldyBjbG9jazogJXNcbiIsIChjbG9jayA/IEdTVF9PQkpFQ1RfTkFNRSAoY2xvY2spIDogIk5VTEwiKSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBHU1RfTUVTU0FHRV9DTE9DS19MT1NUOgorICAgICAgICBQUklOVCAoIkNsb2NrIGxvc3QsIHNlbGVjdGluZyBhIG5ldyBvbmVcbiIpOworICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOnsKKyAgICAgICAgd2FpdGluZ19lb3MgPSBGQUxTRTsKKyAgICAgICAgUFJJTlQgKF8oIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIpLAorICAgICAgICAgICAgR1NUX01FU1NBR0VfU1JDX05BTUUgKG1lc3NhZ2UpKTsKKyAgICAgICAgZ290byBleGl0OworICAgICAgfQorICAgICAgY2FzZSBHU1RfTUVTU0FHRV9UQUc6CisgICAgICAgIGlmICh0YWdzKSB7CisgICAgICAgICAgR3N0VGFnTGlzdCAqdGFnczsKKworICAgICAgICAgIGlmIChHU1RfSVNfRUxFTUVOVCAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSkpIHsKKyAgICAgICAgICAgIFBSSU5UIChfKCJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIiksCisgICAgICAgICAgICAgICAgR1NUX01FU1NBR0VfU1JDX05BTUUgKG1lc3NhZ2UpKTsKKyAgICAgICAgICB9IGVsc2UgaWYgKEdTVF9JU19QQUQgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkpKSB7CisgICAgICAgICAgICBQUklOVCAoXygiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBwYWQgXCIlczolc1wiLlxuIiksCisgICAgICAgICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpKSk7CisgICAgICAgICAgfSBlbHNlIGlmIChHU1RfSVNfT0JKRUNUIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpKSkgeworICAgICAgICAgICAgUFJJTlQgKF8oIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIpLAorICAgICAgICAgICAgICAgIEdTVF9NRVNTQUdFX1NSQ19OQU1FIChtZXNzYWdlKSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFBSSU5UIChfKCJGT1VORCBUQUdcbiIpKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV90YWcgKG1lc3NhZ2UsICZ0YWdzKTsKKyAgICAgICAgICBnc3RfdGFnX2xpc3RfZm9yZWFjaCAodGFncywgcHJpbnRfdGFnLCBOVUxMKTsKKyAgICAgICAgICBnc3RfdGFnX2xpc3RfZnJlZSAodGFncyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9NRVNTQUdFX0lORk86eworICAgICAgICBHRXJyb3IgKmdlcnJvcjsKKyAgICAgICAgZ2NoYXIgKmRlYnVnOworICAgICAgICBnY2hhciAqbmFtZSA9IGdzdF9vYmplY3RfZ2V0X3BhdGhfc3RyaW5nIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpKTsKKworICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9pbmZvIChtZXNzYWdlLCAmZ2Vycm9yLCAmZGVidWcpOworICAgICAgICBpZiAoZGVidWcpIHsKKyAgICAgICAgICBQUklOVCAoXygiSU5GTzpcbiVzXG4iKSwgZGVidWcpOworICAgICAgICB9CisgICAgICAgIGdfZXJyb3JfZnJlZSAoZ2Vycm9yKTsKKyAgICAgICAgZ19mcmVlIChkZWJ1Zyk7CisgICAgICAgIGdfZnJlZSAobmFtZSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBHU1RfTUVTU0FHRV9XQVJOSU5HOnsKKyAgICAgICAgR0Vycm9yICpnZXJyb3I7CisgICAgICAgIGdjaGFyICpkZWJ1ZzsKKyAgICAgICAgZ2NoYXIgKm5hbWUgPSBnc3Rfb2JqZWN0X2dldF9wYXRoX3N0cmluZyAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSk7CisKKyAgICAgICAgLyogZHVtcCBncmFwaCBvbiB3YXJuaW5nICovCisgICAgICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyAoR1NUX0JJTiAocGlwZWxpbmUpLAorICAgICAgICAgICAgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMLCAiZ3N0LWxhdW5jaC53YXJuaW5nIik7CisKKyAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfd2FybmluZyAobWVzc2FnZSwgJmdlcnJvciwgJmRlYnVnKTsKKyAgICAgICAgUFJJTlQgKF8oIldBUk5JTkc6IGZyb20gZWxlbWVudCAlczogJXNcbiIpLCBuYW1lLCBnZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICBpZiAoZGVidWcpIHsKKyAgICAgICAgICBQUklOVCAoXygiQWRkaXRpb25hbCBkZWJ1ZyBpbmZvOlxuJXNcbiIpLCBkZWJ1Zyk7CisgICAgICAgIH0KKyAgICAgICAgZ19lcnJvcl9mcmVlIChnZXJyb3IpOworICAgICAgICBnX2ZyZWUgKGRlYnVnKTsKKyAgICAgICAgZ19mcmVlIChuYW1lKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOnsKKyAgICAgICAgLyogZHVtcCBncmFwaCBvbiBlcnJvciAqLworICAgICAgICBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFX1dJVEhfVFMgKEdTVF9CSU4gKHBpcGVsaW5lKSwKKyAgICAgICAgICAgIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgImdzdC1sYXVuY2guZXJyb3IiKTsKKworICAgICAgICBwcmludF9lcnJvcl9tZXNzYWdlIChtZXNzYWdlKTsKKworICAgICAgICAvKiB3ZSBoYXZlIGFuIGVycm9yICovCisgICAgICAgIHJlcyA9IEVMUl9FUlJPUjsKKyAgICAgICAgZ290byBleGl0OworICAgICAgfQorICAgICAgY2FzZSBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEOnsKKyAgICAgICAgR3N0U3RhdGUgb2xkLCBuZXcsIHBlbmRpbmc7CisKKyAgICAgICAgLyogd2Ugb25seSBjYXJlIGFib3V0IHBpcGVsaW5lIHN0YXRlIGNoYW5nZSBtZXNzYWdlcyAqLworICAgICAgICBpZiAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSAhPSBHU1RfT0JKRUNUX0NBU1QgKHBpcGVsaW5lKSkKKyAgICAgICAgICBicmVhazsKKworICAgICAgICAvKiBpZ25vcmUgd2hlbiB3ZSBhcmUgYnVmZmVyaW5nIHNpbmNlIHRoZW4gd2UgbWVzcyB3aXRoIHRoZSBzdGF0ZXMKKyAgICAgICAgICogb3Vyc2VsdmVzLiAqLworICAgICAgICBpZiAoYnVmZmVyaW5nKSB7CisgICAgICAgICAgUFJJTlQgKF8oIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIikpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZCAobWVzc2FnZSwgJm9sZCwgJm5ldywgJnBlbmRpbmcpOworCisgICAgICAgIC8qIGlmIHdlIHJlYWNoZWQgdGhlIGZpbmFsIHRhcmdldCBzdGF0ZSwgZXhpdCAqLworICAgICAgICBpZiAodGFyZ2V0X3N0YXRlID09IEdTVF9TVEFURV9QQVVTRUQgJiYgbmV3ID09IHRhcmdldF9zdGF0ZSkKKyAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgLyogZWxzZSBub3QgYW4gaW50ZXJlc3RpbmcgbWVzc2FnZSAqLworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2UgR1NUX01FU1NBR0VfQlVGRkVSSU5HOnsKKyAgICAgICAgZ2ludCBwZXJjZW50OworCisgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZyAobWVzc2FnZSwgJnBlcmNlbnQpOworICAgICAgICBQUklOVCAoIiVzICVkJSUgIFxyIiwgXygiYnVmZmVyaW5nLi4uIiksIHBlcmNlbnQpOworCisgICAgICAgIC8qIG5vIHN0YXRlIG1hbmFnZW1lbnQgbmVlZGVkIGZvciBsaXZlIHBpcGVsaW5lcyAqLworICAgICAgICBpZiAoaXNfbGl2ZSkKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAocGVyY2VudCA9PSAxMDApIHsKKyAgICAgICAgICAvKiBhIDEwMCUgbWVzc2FnZSBtZWFucyBidWZmZXJpbmcgaXMgZG9uZSAqLworICAgICAgICAgIGJ1ZmZlcmluZyA9IEZBTFNFOworICAgICAgICAgIC8qIGlmIHRoZSBkZXNpcmVkIHN0YXRlIGlzIHBsYXlpbmcsIGdvIGJhY2sgKi8KKyAgICAgICAgICBpZiAodGFyZ2V0X3N0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKSB7CisgICAgICAgICAgICBQUklOVCAoXygiRG9uZSBidWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIpKTsKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAvKiBidWZmZXJpbmcgYnVzeSAqLworICAgICAgICAgIGlmIChidWZmZXJpbmcgPT0gRkFMU0UgJiYgdGFyZ2V0X3N0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKSB7CisgICAgICAgICAgICAvKiB3ZSB3ZXJlIG5vdCBidWZmZXJpbmcgYnV0IFBMQVlJTkcsIFBBVVNFICB0aGUgcGlwZWxpbmUuICovCisgICAgICAgICAgICBQUklOVCAoXygiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIpKTsKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpOworICAgICAgICAgIH0KKyAgICAgICAgICBidWZmZXJpbmcgPSBUUlVFOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBHU1RfTUVTU0FHRV9MQVRFTkNZOgorICAgICAgeworICAgICAgICBQUklOVCAoXygiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIpKTsKKyAgICAgICAgZ3N0X2Jpbl9yZWNhbGN1bGF0ZV9sYXRlbmN5IChHU1RfQklOIChwaXBlbGluZSkpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2UgR1NUX01FU1NBR0VfUkVRVUVTVF9TVEFURToKKyAgICAgIHsKKyAgICAgICAgR3N0U3RhdGUgc3RhdGU7CisgICAgICAgIGdjaGFyICpuYW1lID0gZ3N0X29iamVjdF9nZXRfcGF0aF9zdHJpbmcgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkpOworCisgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3JlcXVlc3Rfc3RhdGUgKG1lc3NhZ2UsICZzdGF0ZSk7CisKKyAgICAgICAgUFJJTlQgKF8oIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iKSwKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChzdGF0ZSksIG5hbWUpOworCisgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIHN0YXRlKTsKKworICAgICAgICBnX2ZyZWUgKG5hbWUpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2UgR1NUX01FU1NBR0VfQVBQTElDQVRJT046eworICAgICAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnM7CisKKyAgICAgICAgcyA9IGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUgKG1lc3NhZ2UpOworCisgICAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzLCAiR3N0TGF1bmNoSW50ZXJydXB0IikpIHsKKyAgICAgICAgICAvKiB0aGlzIGFwcGxpY2F0aW9uIG1lc3NhZ2UgaXMgcG9zdGVkIHdoZW4gd2UgY2F1Z2h0IGFuIGludGVycnVwdCBhbmQKKyAgICAgICAgICAgKiB3ZSBuZWVkIHRvIHN0b3AgdGhlIHBpcGVsaW5lLiAqLworICAgICAgICAgIFBSSU5UIChfKCJJbnRlcnJ1cHQ6IFN0b3BwaW5nIHBpcGVsaW5lIC4uLlxuIikpOworICAgICAgICAgIHJlcyA9IEVMUl9JTlRFUlJVUFQ7CisgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBHU1RfTUVTU0FHRV9FTEVNRU5UOnsKKyAgICAgICAgaWYgKGdzdF9pc19taXNzaW5nX3BsdWdpbl9tZXNzYWdlIChtZXNzYWdlKSkgeworICAgICAgICAgIGNvbnN0IGdjaGFyICpkZXNjOworCisgICAgICAgICAgZGVzYyA9IGdzdF9taXNzaW5nX3BsdWdpbl9tZXNzYWdlX2dldF9kZXNjcmlwdGlvbiAobWVzc2FnZSk7CisgICAgICAgICAgUFJJTlQgKF8oIk1pc3NpbmcgZWxlbWVudDogJXNcbiIpLCBkZXNjID8gZGVzYyA6ICIobm8gZGVzY3JpcHRpb24pIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBkZWZhdWx0OgorICAgICAgICAvKiBqdXN0IGJlIHF1aWV0IGJ5IGRlZmF1bHQgKi8KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChtZXNzYWdlKQorICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOworICB9CisgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOworCitleGl0OgorICB7CisgICAgaWYgKG1lc3NhZ2UpCisgICAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7CisgICAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKKyNpZm5kZWYgRElTQUJMRV9GQVVMVF9IQU5ETEVSCisgICAgZ19zb3VyY2VfcmVtb3ZlICh0aW1lb3V0X2lkKTsKKyNlbmRpZgorICAgIHJldHVybiByZXM7CisgIH0KK30KKworc3RhdGljIEdzdEJ1c1N5bmNSZXBseQorYnVzX3N5bmNfaGFuZGxlciAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmUgPSAoR3N0RWxlbWVudCAqKSBkYXRhOworCisgIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkpIHsKKyAgICBjYXNlIEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQ6CisgICAgICAvKiB3ZSBvbmx5IGNhcmUgYWJvdXQgcGlwZWxpbmUgc3RhdGUgY2hhbmdlIG1lc3NhZ2VzICovCisgICAgICBpZiAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSA9PSBHU1RfT0JKRUNUX0NBU1QgKHBpcGVsaW5lKSkgeworICAgICAgICBHc3RTdGF0ZSBvbGQsIG5ldywgcGVuZGluZzsKKyAgICAgICAgZ2NoYXIgKnN0YXRlX3RyYW5zaXRpb25fbmFtZTsKKworICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkIChtZXNzYWdlLCAmb2xkLCAmbmV3LCAmcGVuZGluZyk7CisKKyAgICAgICAgc3RhdGVfdHJhbnNpdGlvbl9uYW1lID0gZ19zdHJkdXBfcHJpbnRmICgiJXNfJXMiLAorICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKG9sZCksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChuZXcpKTsKKworICAgICAgICAvKiBkdW1wIGdyYXBoIGZvciAoc29tZSkgcGlwZWxpbmUgc3RhdGUgY2hhbmdlcyAqLworICAgICAgICB7CisgICAgICAgICAgZ2NoYXIgKmR1bXBfbmFtZSA9IGdfc3RyY29uY2F0ICgiZ3N0LWxhdW5jaC4iLCBzdGF0ZV90cmFuc2l0aW9uX25hbWUsCisgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyAoR1NUX0JJTiAocGlwZWxpbmUpLAorICAgICAgICAgICAgICBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsIGR1bXBfbmFtZSk7CisgICAgICAgICAgZ19mcmVlIChkdW1wX25hbWUpOworICAgICAgICB9CisKKyAgICAgICAgLyogcGxhY2UgYSBtYXJrZXIgaW50byBlLmcuIHN0cmFjZSBsb2dzICovCisgICAgICAgIHsKKyAgICAgICAgICBnY2hhciAqYWNjZXNzX25hbWUgPSBnX3N0cmNvbmNhdCAoZ19nZXRfdG1wX2RpciAoKSwgR19ESVJfU0VQQVJBVE9SX1MsCisgICAgICAgICAgICAgICJnc3QtbGF1bmNoIiwgR19ESVJfU0VQQVJBVE9SX1MsIHN0YXRlX3RyYW5zaXRpb25fbmFtZSwgTlVMTCk7CisgICAgICAgICAgZ19maWxlX3Rlc3QgKGFjY2Vzc19uYW1lLCBHX0ZJTEVfVEVTVF9FWElTVFMpOworICAgICAgICAgIGdfZnJlZSAoYWNjZXNzX25hbWUpOworICAgICAgICB9CisKKyAgICAgICAgZ19mcmVlIChzdGF0ZV90cmFuc2l0aW9uX25hbWUpOworICAgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgfQorICByZXR1cm4gR1NUX0JVU19QQVNTOworfQorCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIC8qIG9wdGlvbnMgKi8KKyAgZ2Jvb2xlYW4gdmVyYm9zZSA9IEZBTFNFOworICBnYm9vbGVhbiBub19mYXVsdCA9IEZBTFNFOworICBnYm9vbGVhbiB0cmFjZSA9IEZBTFNFOworICBnYm9vbGVhbiBlb3Nfb25fc2h1dGRvd24gPSBGQUxTRTsKKyAgZ2Jvb2xlYW4gY2hlY2tfaW5kZXggPSBGQUxTRTsKKyAgZ2NoYXIgKnNhdmVmaWxlID0gTlVMTDsKKyAgZ2NoYXIgKmV4Y2x1ZGVfYXJncyA9IE5VTEw7CisjaWZuZGVmIEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HCisgIEdPcHRpb25FbnRyeSBvcHRpb25zW10gPSB7CisgICAgeyJ0YWdzIiwgJ3QnLCAwLCBHX09QVElPTl9BUkdfTk9ORSwgJnRhZ3MsCisgICAgICAgIE5fKCJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiKSwgTlVMTH0sCisgICAgeyJ2ZXJib3NlIiwgJ3YnLCAwLCBHX09QVElPTl9BUkdfTk9ORSwgJnZlcmJvc2UsCisgICAgICAgIE5fKCJPdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBwcm9wZXJ0eSBub3RpZmljYXRpb25zIiksIE5VTEx9LAorICAgIHsicXVpZXQiLCAncScsIDAsIEdfT1BUSU9OX0FSR19OT05FLCAmcXVpZXQsCisgICAgICAgIE5fKCJEbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uIiksIE5VTEx9LAorICAgIHsibWVzc2FnZXMiLCAnbScsIDAsIEdfT1BUSU9OX0FSR19OT05FLCAmbWVzc2FnZXMsCisgICAgICAgIE5fKCJPdXRwdXQgbWVzc2FnZXMiKSwgTlVMTH0sCisgICAgeyJleGNsdWRlIiwgJ1gnLCAwLCBHX09QVElPTl9BUkdfTk9ORSwgJmV4Y2x1ZGVfYXJncywKKyAgICAgICAgTl8oIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIFRZUEUiKSwgTl8oIlRZUEUxLFRZUEUyLC4uLiIpfSwKKyAgICB7Im5vLWZhdWx0IiwgJ2YnLCAwLCBHX09QVElPTl9BUkdfTk9ORSwgJm5vX2ZhdWx0LAorICAgICAgICBOXygiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIiksIE5VTEx9LAorICAgIHsidHJhY2UiLCAnVCcsIDAsIEdfT1BUSU9OX0FSR19OT05FLCAmdHJhY2UsCisgICAgICAgIE5fKCJQcmludCBhbGxvYyB0cmFjZSAoaWYgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUpIiksIE5VTEx9LAorICAgIHsiZW9zLW9uLXNodXRkb3duIiwgJ2UnLCAwLCBHX09QVElPTl9BUkdfTk9ORSwgJmVvc19vbl9zaHV0ZG93biwKKyAgICAgICAgTl8oIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIpLCBOVUxMfSwKKyAgICB7ImluZGV4IiwgJ2knLCAwLCBHX09QVElPTl9BUkdfTk9ORSwgJmNoZWNrX2luZGV4LAorICAgICAgICBOXygiR2F0aGVyIGFuZCBwcmludCBpbmRleCBzdGF0aXN0aWNzIiksIE5VTEx9LAorICAgIEdTVF9UT09MU19HT1BUSU9OX1ZFUlNJT04sCisgICAge05VTEx9CisgIH07CisgIEdPcHRpb25Db250ZXh0ICpjdHg7CisgIEdFcnJvciAqZXJyID0gTlVMTDsKKyNlbmRpZgorICBHc3RJbmRleCAqaW5kZXg7CisgIEdQdHJBcnJheSAqaW5kZXhfc3RhdHMgPSBOVUxMOworICBnY2hhciAqKmFyZ3ZuOworICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKyAgZ2ludCByZXMgPSAwOworCisgIGZyZWUgKG1hbGxvYyAoOCkpOyAgICAgICAgICAgIC8qIC1sZWZlbmNlICovCisKKyNpZmRlZiBFTkFCTEVfTkxTCisgIGJpbmR0ZXh0ZG9tYWluIChHRVRURVhUX1BBQ0tBR0UsIExPQ0FMRURJUik7CisgIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChHRVRURVhUX1BBQ0tBR0UsICJVVEYtOCIpOworICB0ZXh0ZG9tYWluIChHRVRURVhUX1BBQ0tBR0UpOworI2VuZGlmCisKKyAgZ190aHJlYWRfaW5pdCAoTlVMTCk7CisKKyAgZ3N0X3Rvb2xzX3NldF9wcmduYW1lICgiZ3N0LWxhdW5jaCIpOworCisjaWZuZGVmIEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HCisgIGN0eCA9IGdfb3B0aW9uX2NvbnRleHRfbmV3ICgiUElQRUxJTkUtREVTQ1JJUFRJT04iKTsKKyAgZ19vcHRpb25fY29udGV4dF9hZGRfbWFpbl9lbnRyaWVzIChjdHgsIG9wdGlvbnMsIEdFVFRFWFRfUEFDS0FHRSk7CisgIGdfb3B0aW9uX2NvbnRleHRfYWRkX2dyb3VwIChjdHgsIGdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXAgKCkpOworICBpZiAoIWdfb3B0aW9uX2NvbnRleHRfcGFyc2UgKGN0eCwgJmFyZ2MsICZhcmd2LCAmZXJyKSkgeworICAgIGlmIChlcnIpCisgICAgICBnX3ByaW50ZXJyICgiRXJyb3IgaW5pdGlhbGl6aW5nOiAlc1xuIiwgR1NUX1NUUl9OVUxMIChlcnItPm1lc3NhZ2UpKTsKKyAgICBlbHNlCisgICAgICBnX3ByaW50ZXJyICgiRXJyb3IgaW5pdGlhbGl6aW5nOiBVbmtub3duIGVycm9yIVxuIik7CisgICAgZXhpdCAoMSk7CisgIH0KKyAgZ19vcHRpb25fY29udGV4dF9mcmVlIChjdHgpOworI2Vsc2UKKyAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7CisjZW5kaWYKKworICBnc3RfdG9vbHNfcHJpbnRfdmVyc2lvbiAoImdzdC1sYXVuY2giKTsKKworI2lmbmRlZiBESVNBQkxFX0ZBVUxUX0hBTkRMRVIKKyAgaWYgKCFub19mYXVsdCkKKyAgICBmYXVsdF9zZXR1cCAoKTsKKworICBzaWdpbnRfc2V0dXAgKCk7CisjZW5kaWYKKworICBpZiAodHJhY2UpIHsKKyAgICBpZiAoIWdzdF9hbGxvY190cmFjZV9hdmFpbGFibGUgKCkpIHsKKyAgICAgIGdfd2FybmluZyAoIlRyYWNlIG5vdCBhdmFpbGFibGUgKHJlY29tcGlsZSB3aXRoIHRyYWNlIGVuYWJsZWQpLiIpOworICAgIH0KKyAgICBnc3RfYWxsb2NfdHJhY2Vfc2V0X2ZsYWdzX2FsbCAoR1NUX0FMTE9DX1RSQUNFX0xJVkUgfAorICAgICAgICBHU1RfQUxMT0NfVFJBQ0VfTUVNX0xJVkUpOworICAgIGdzdF9hbGxvY190cmFjZV9wcmludF9saXZlICgpOworICB9CisKKyAgLyogbWFrZSBhIG51bGwtdGVybWluYXRlZCB2ZXJzaW9uIG9mIGFyZ3YgKi8KKyAgYXJndm4gPSBnX25ldzAgKGNoYXIgKiwgYXJnYyk7CisgIG1lbWNweSAoYXJndm4sIGFyZ3YgKyAxLCBzaXplb2YgKGNoYXIgKikgKiAoYXJnYyAtIDEpKTsKKyAgeworICAgIHBpcGVsaW5lID0KKyAgICAgICAgKEdzdEVsZW1lbnQgKikgZ3N0X3BhcnNlX2xhdW5jaHYgKChjb25zdCBnY2hhciAqKikgYXJndm4sICZlcnJvcik7CisgIH0KKyAgZ19mcmVlIChhcmd2bik7CisKKyAgaWYgKCFwaXBlbGluZSkgeworICAgIGlmIChlcnJvcikgeworICAgICAgZ19wcmludGVyciAoXygiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZDogJXMuXG4iKSwKKyAgICAgICAgICBHU1RfU1RSX05VTEwgKGVycm9yLT5tZXNzYWdlKSk7CisgICAgICBnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKyAgICB9IGVsc2UgeworICAgICAgZ19wcmludGVyciAoXygiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIpKTsKKyAgICB9CisgICAgcmV0dXJuIDE7CisgIH0gZWxzZSBpZiAoZXJyb3IpIHsKKyAgICBnX3ByaW50ZXJyIChfKCJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iKSwKKyAgICAgICAgR1NUX1NUUl9OVUxMIChlcnJvci0+bWVzc2FnZSkpOworICAgIGdfZXJyb3JfZnJlZSAoZXJyb3IpOworICAgIHJldHVybiAxOworICB9CisKKyAgaWYgKHZlcmJvc2UpIHsKKyAgICBnY2hhciAqKmV4Y2x1ZGVfbGlzdCA9CisgICAgICAgIGV4Y2x1ZGVfYXJncyA/IGdfc3Ryc3BsaXQgKGV4Y2x1ZGVfYXJncywgIiwiLCAwKSA6IE5VTEw7CisgICAgZ19zaWduYWxfY29ubmVjdCAocGlwZWxpbmUsICJkZWVwLW5vdGlmeSIsCisgICAgICAgIEdfQ0FMTEJBQ0sgKGdzdF9vYmplY3RfZGVmYXVsdF9kZWVwX25vdGlmeSksIGV4Y2x1ZGVfbGlzdCk7CisgIH0KKworICBpZiAoIXNhdmVmaWxlKSB7CisgICAgR3N0U3RhdGUgc3RhdGUsIHBlbmRpbmc7CisgICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OworICAgIEdzdEJ1cyAqYnVzOworCisgICAgLyogSWYgdGhlIHRvcC1sZXZlbCBvYmplY3QgaXMgbm90IGEgcGlwZWxpbmUsIHBsYWNlIGl0IGluIGEgcGlwZWxpbmUuICovCisgICAgaWYgKCFHU1RfSVNfUElQRUxJTkUgKHBpcGVsaW5lKSkgeworICAgICAgR3N0RWxlbWVudCAqcmVhbF9waXBlbGluZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInBpcGVsaW5lIiwgTlVMTCk7CisKKyAgICAgIGlmIChyZWFsX3BpcGVsaW5lID09IE5VTEwpIHsKKyAgICAgICAgZ19wcmludGVyciAoXygiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIikpOworICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICAgIGdzdF9iaW5fYWRkIChHU1RfQklOIChyZWFsX3BpcGVsaW5lKSwgcGlwZWxpbmUpOworICAgICAgcGlwZWxpbmUgPSByZWFsX3BpcGVsaW5lOworICAgIH0KKworICAgIGlmIChjaGVja19pbmRleCkgeworICAgICAgLyogZ3N0X2luZGV4X25ldygpIGNyZWF0ZXMgYSBudWxsLWluZGV4LCBpdCBkb2VzIG5vdCBzdG9yZSBhbnl0aGluZywgYnV0CisgICAgICAgKiB0aGUgZW50cnktYWRkZWQgc2lnbmFsIHdvcmtzIGFuZCB0aGlzIGlzIHdoYXQgd2UgdXNlIHRvIGJ1aWxkIHRoZQorICAgICAgICogc3RhdGlzdGljcyAqLworICAgICAgaW5kZXggPSBnc3RfaW5kZXhfbmV3ICgpOworICAgICAgaWYgKGluZGV4KSB7CisgICAgICAgIGluZGV4X3N0YXRzID0gZ19wdHJfYXJyYXlfbmV3ICgpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAoaW5kZXgpLCAiZW50cnktYWRkZWQiLAorICAgICAgICAgICAgR19DQUxMQkFDSyAoZW50cnlfYWRkZWQpLCBpbmRleF9zdGF0cyk7CisgICAgICAgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGluZGV4KSwgInJlc29sdmVyIiwgR1NUX0lOREVYX1JFU09MVkVSX0dUWVBFLAorICAgICAgICAgICAgTlVMTCk7CisgICAgICAgIGdzdF9lbGVtZW50X3NldF9pbmRleCAocGlwZWxpbmUsIGluZGV4KTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChwaXBlbGluZSk7CisgICAgZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyIChidXMsIGJ1c19zeW5jX2hhbmRsZXIsIChncG9pbnRlcikgcGlwZWxpbmUpOworICAgIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7CisKKyAgICBQUklOVCAoXygiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iKSk7CisgICAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7CisKKyAgICBzd2l0Y2ggKHJldCkgeworICAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU6CisgICAgICAgIGdfcHJpbnRlcnIgKF8oIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iKSk7CisgICAgICAgIHJlcyA9IC0xOworICAgICAgICBldmVudF9sb29wIChwaXBlbGluZSwgRkFMU0UsIEdTVF9TVEFURV9WT0lEX1BFTkRJTkcpOworICAgICAgICBnb3RvIGVuZDsKKyAgICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMOgorICAgICAgICBQUklOVCAoXygiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIikpOworICAgICAgICBpc19saXZlID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfQVNZTkM6CisgICAgICAgIFBSSU5UIChfKCJQaXBlbGluZSBpcyBQUkVST0xMSU5HIC4uLlxuIikpOworICAgICAgICBjYXVnaHRfZXJyb3IgPSBldmVudF9sb29wIChwaXBlbGluZSwgVFJVRSwgR1NUX1NUQVRFX1BBVVNFRCk7CisgICAgICAgIGlmIChjYXVnaHRfZXJyb3IpIHsKKyAgICAgICAgICBnX3ByaW50ZXJyIChfKCJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHByZXJvbGwuXG4iKSk7CisgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUgPSBHU1RfU1RBVEVfUEFVU0VEOworICAgICAgICAvKiBmYWxsdGhyb3VnaCAqLworICAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M6CisgICAgICAgIFBSSU5UIChfKCJQaXBlbGluZSBpcyBQUkVST0xMRUQgLi4uXG4iKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhdWdodF9lcnJvciA9IGV2ZW50X2xvb3AgKHBpcGVsaW5lLCBGQUxTRSwgR1NUX1NUQVRFX1BMQVlJTkcpOworCisgICAgaWYgKGNhdWdodF9lcnJvcikgeworICAgICAgZ19wcmludGVyciAoXygiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIikpOworICAgIH0gZWxzZSB7CisgICAgICBHc3RDbG9ja1RpbWUgdGZ0aGVuLCB0Zm5vdzsKKyAgICAgIEdzdENsb2NrVGltZURpZmYgZGlmZjsKKworICAgICAgUFJJTlQgKF8oIlNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIpKTsKKworICAgICAgaWYgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsCisgICAgICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpIHsKKyAgICAgICAgR3N0TWVzc2FnZSAqZXJyX21zZzsKKyAgICAgICAgR3N0QnVzICpidXM7CisKKyAgICAgICAgZ19wcmludGVyciAoXygiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIikpOworICAgICAgICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChwaXBlbGluZSk7CisgICAgICAgIGlmICgoZXJyX21zZyA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9FUlJPUiwgMCkpKSB7CisgICAgICAgICAgcHJpbnRfZXJyb3JfbWVzc2FnZSAoZXJyX21zZyk7CisgICAgICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKGVycl9tc2cpOworICAgICAgICB9CisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7CisgICAgICAgIHJlcyA9IC0xOworICAgICAgICBnb3RvIGVuZDsKKyAgICAgIH0KKworICAgICAgdGZ0aGVuID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKKyAgICAgIGNhdWdodF9lcnJvciA9IGV2ZW50X2xvb3AgKHBpcGVsaW5lLCBUUlVFLCBHU1RfU1RBVEVfUExBWUlORyk7CisgICAgICBpZiAoZW9zX29uX3NodXRkb3duICYmIGNhdWdodF9lcnJvciA9PSBFTFJfSU5URVJSVVBUKSB7CisgICAgICAgIFBSSU5UIChfKCJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIpKTsKKyAgICAgICAgd2FpdGluZ19lb3MgPSBUUlVFOworICAgICAgICBnc3RfZWxlbWVudF9zZW5kX2V2ZW50IChwaXBlbGluZSwgZ3N0X2V2ZW50X25ld19lb3MgKCkpOworICAgICAgICBQUklOVCAoXygiV2FpdGluZyBmb3IgRU9TLi4uXG4iKSk7CisgICAgICAgIGNhdWdodF9lcnJvciA9IGV2ZW50X2xvb3AgKHBpcGVsaW5lLCBUUlVFLCBHU1RfU1RBVEVfUExBWUlORyk7CisKKyAgICAgICAgaWYgKGNhdWdodF9lcnJvciA9PSBFTFJfTk9fRVJST1IpIHsKKyAgICAgICAgICAvKiB3ZSBnb3QgRU9TICovCisgICAgICAgICAgUFJJTlQgKF8oIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iKSk7CisgICAgICAgIH0gZWxzZSBpZiAoY2F1Z2h0X2Vycm9yID09IEVMUl9FUlJPUikgeworICAgICAgICAgIFBSSU5UIChfKCJBbiBlcnJvciBoYXBwZW5lZCB3aGlsZSB3YWl0aW5nIGZvciBFT1NcbiIpKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgdGZub3cgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOworCisgICAgICBkaWZmID0gR1NUX0NMT0NLX0RJRkYgKHRmdGhlbiwgdGZub3cpOworCisgICAgICBQUklOVCAoXygiRXhlY3V0aW9uIGVuZGVkIGFmdGVyICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBucy5cbiIpLCBkaWZmKTsKKyAgICB9CisKKyAgICBQUklOVCAoXygiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iKSk7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7CisgICAgaWYgKGNhdWdodF9lcnJvciA9PSBFTFJfTk9fRVJST1IpCisgICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCAmc3RhdGUsICZwZW5kaW5nLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKworICAgIC8qIGl0ZXJhdGUgbWFpbmxvb3AgdG8gcHJvY2VzcyBwZW5kaW5nIHN0dWZmICovCisgICAgd2hpbGUgKGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbiAoTlVMTCwgRkFMU0UpKTsKKworICAgIFBSSU5UIChfKCJTZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIC4uLlxuIikpOworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9SRUFEWSk7CisgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgJnN0YXRlLCAmcGVuZGluZywgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisKKyAgICBpZiAoY2hlY2tfaW5kZXgpIHsKKyAgICAgIHByaW50X2luZGV4X3N0YXRzIChpbmRleF9zdGF0cyk7CisgICAgICBnX3B0cl9hcnJheV9mcmVlIChpbmRleF9zdGF0cywgVFJVRSk7CisgICAgfQorCisgIGVuZDoKKyAgICBQUklOVCAoXygiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIikpOworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKKyAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCAmc3RhdGUsICZwZW5kaW5nLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKyAgfQorCisgIFBSSU5UIChfKCJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIikpOworICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7CisKKyAgZ3N0X2RlaW5pdCAoKTsKKyAgaWYgKHRyYWNlKQorICAgIGdzdF9hbGxvY190cmFjZV9wcmludF9saXZlICgpOworCisgIHJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS90b29scy9nc3QtcGxvdC10aW1lbGluZS5weSBiL3Rvb2xzL2dzdC1wbG90LXRpbWVsaW5lLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRhZWMwYmUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9nc3QtcGxvdC10aW1lbGluZS5weQpAQCAtMCwwICsxLDMxNCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIGJhc2VkIG9uIHBsb3QtdGltZWxpbmUucHkgYnkgRmVkZXJpY28gTWVuYS1RdWludGVybyA8ZmVkZXJpY28gYXQgeGltaWFuIGRvdGNvbT4KKyMgZXhhbXBsZToKKyMgICBHU1RfREVCVUdfTk9fQ09MT1I9MSBHU1RfREVCVUc9Iio6MyIgZ3N0LWxhdW5jaC0wLjEwIDI+ZGVidWcubG9nIGF1ZGlvdGVzdHNyYyBudW0tYnVmZmVycz0xMCAhIGF1ZGlvY29udmVydCAhIGFsc2FzaW5rCisjICAgZ3N0LXBsb3QtdGltZWxpbmUucHkgZGVidWcubG9nIC0tb3V0cHV0PWRlYnVnLnBuZworCitpbXBvcnQgbWF0aAoraW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN5cworCitpbXBvcnQgY2Fpcm8KKworRk9OVF9OQU1FID0gIkJpdHN0cmVhbSBWZXJhIFNhbnMiCitGT05UX1NJWkUgPSA4CisjIGhvdyBtYW55IHBpeGVscyBmb3IgYSBzZWNvbmQgb24gdGhlIHRpbWVsaW5lCitQSVhFTFNfUEVSX1NFQ09ORCA9IDMwMAorIyBob3cgbWFueSBwaXhlbHMgZm9yIG9uZSBsaW5lIG9mIGxvZworUElYRUxTX1BFUl9MSU5FID0gMTAKK1BMT1RfV0lEVEggPSAxNDAwCitUSU1FX1NDQUxFX1dJRFRIID0gMjAKK1NZU0NBTExfTUFSS0VSX1dJRFRIID0gMjAKK0xPR19URVhUX1hQT1MgPSA0MDAKK0xPR19NQVJLRVJfV0lEVEggPSAyMAorQkFDS0dST1VORF9DT0xPUiA9ICgwLCAwLCAwKQorCisjIGFzc3VtZXMgR1NUX0RFQlVHX0xPR19DT0xPUj0xCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAgICAgICAgICAgcGlkICB0aHJlYWQgICAgICAgIGxldmVsICAgY2F0ZWdvcnksZmlsZSxsaW5lLG1zZworbWFya19yZWdleCA9IHJlLmNvbXBpbGUgKHInXihcZCs6XGQrOlxkK1wuXGQrKSArXGQrICswP3g/WzAtOWEtZl0rIFtBLVpdKyArKFstYS16QS1aMC05X10rICkoLiopJykKK21hcmtfdGltZXN0YW1wX2dyb3VwID0gMQorbWFya19wcm9ncmFtX2dyb3VwID0gMgorbWFya19sb2dfZ3JvdXAgPSAzCisKK3N1Y2Nlc3NfcmVzdWx0ID0gIjAiCisKK3NraXBfbGluZXMgPSAwCittYXhfbGluZXMgPSA1MDAKK2ZpbHRlcl9yZWdleCA9IHJlLmNvbXBpbGUgKCcnKQorc2tpcF9yZWdleCA9IHJlLmNvbXBpbGUoJycpCisKK2NsYXNzIEJhc2VNYXJrOgorICAgIGNvbG9ycyA9IDAsIDAsIDAKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGltZXN0YW1wLCBsb2cpOgorICAgICAgICBzZWxmLnRpbWVzdGFtcCA9IHRpbWVzdGFtcAorICAgICAgICBzZWxmLmxvZyA9IGxvZworICAgICAgICBzZWxmLnRpbWVzdGFtcF95cG9zID0gMAorICAgICAgICBzZWxmLmxvZ195cG9zID0gMAorCitjbGFzcyBBY2Nlc3NNYXJrKEJhc2VNYXJrKToKKyAgICBwYXNzCisKK2NsYXNzIExhc3RNYXJrKEJhc2VNYXJrKToKKyAgICBjb2xvcnMgPSAxLjAsIDAsIDAKKworY2xhc3MgRmlyc3RNYXJrKEJhc2VNYXJrKToKKyAgICBjb2xvcnMgPSAxLjAsIDAsIDAKKworY2xhc3MgRXhlY01hcmsoQmFzZU1hcmspOgorIyAgICBjb2xvcnMgPSAwLjc1LCAwLjMzLCAwLjMzCisgICAgY29sb3JzID0gKDEuMCwgMC4wLCAwLjApCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRpbWVzdGFtcCwgbG9nKToKKyAgICAgICAgQmFzZU1hcmsuX19pbml0X18oc2VsZiwgdGltZXN0YW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhlY3ZlOiAnICsgb3MucGF0aC5iYXNlbmFtZShsb2cpKQorCitjbGFzcyBNZXRyaWNzOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi53aWR0aCA9IDAKKyAgICAgICAgc2VsZi5oZWlnaHQgPSAwCisKKyMgZG9uJ3QgdXNlIGJsYWNrIG9yIHJlZAorcGFsZXR0ZSA9IFsKKyAgICAoMC4xMiwgMC4yOSwgMC40OSksCisgICAgKDAuMzYsIDAuNTEsIDAuNzEpLAorICAgICgwLjc1LCAwLjMxLCAwLjMwKSwKKyAgICAoMC42MiwgMC43MywgMC4zOCksCisgICAgKDAuNTAsIDAuNDAsIDAuNjMpLAorICAgICgwLjI5LCAwLjY3LCAwLjc4KSwKKyAgICAoMC45NiwgMC42MiwgMC4zNCkKKyAgICBdCisKK2NsYXNzIFN5c2NhbGxQYXJzZXI6CisgICAgZGVmIF9faW5pdF9fIChzZWxmKToKKyAgICAgICAgc2VsZi5zeXNjYWxscyA9IFtdCisKKyAgICBkZWYgYWRkX2xpbmUgKHNlbGYsIHN0cik6CisgICAgICAgIG0gPSBtYXJrX3JlZ2V4LnNlYXJjaCAoc3RyKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgdGltZXN0ciA9IG0uZ3JvdXAgKG1hcmtfdGltZXN0YW1wX2dyb3VwKS5zcGxpdCgnOicpCisgICAgICAgICAgICB0aW1lc3RhbXAgPSBmbG9hdCAodGltZXN0clsyXSkgKyAoZmxvYXQgKHRpbWVzdHJbMV0pICogNjAuMCkgKyAoZmxvYXQgKHRpbWVzdHJbMF0pICogMzYwMC4wKQorICAgICAgICAgICAgcHJvZ3JhbSA9IG0uZ3JvdXAgKG1hcmtfcHJvZ3JhbV9ncm91cCkKKyAgICAgICAgICAgIHRleHQgPSBwcm9ncmFtICsgbS5ncm91cCAobWFya19sb2dfZ3JvdXApCisgICAgICAgICAgICBpZiB0ZXh0ID09ICdsYXN0JzoKKyAgICAgICAgICAgICAgICBzZWxmLnN5c2NhbGxzLmFwcGVuZCAoTGFzdE1hcmsgKHRpbWVzdGFtcCwgdGV4dCkpCisgICAgICAgICAgICBlbGlmIHRleHQgPT0gJ2ZpcnN0JzoKKyAgICAgICAgICAgICAgICBzZWxmLnN5c2NhbGxzLmFwcGVuZCAoRmlyc3RNYXJrICh0aW1lc3RhbXAsIHRleHQpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzID0gQWNjZXNzTWFyayAodGltZXN0YW1wLCB0ZXh0KQorICAgICAgICAgICAgICAgIHByb2dyYW1faGFzaCA9IHByb2dyYW0uX19oYXNoX18gKCkKKyAgICAgICAgICAgICAgICBzLmNvbG9ycyA9IHBhbGV0dGVbcHJvZ3JhbV9oYXNoICUgbGVuIChwYWxldHRlKV0KKyAgICAgICAgICAgICAgICBzZWxmLnN5c2NhbGxzLmFwcGVuZCAocykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICdObyBsb2cgaW4gJXMnICUgc3RyCisgICAgICAgICAgICByZXR1cm4KKworZGVmIHBhcnNlX3N0cmFjZShmaWxlbmFtZSk6CisgICAgcGFyc2VyID0gU3lzY2FsbFBhcnNlciAoKQorCisgICAgZ2xvYmFsIHNraXBfbGluZXMKKyAgICBnbG9iYWwgbWF4X2xpbmVzCisgICAgZ2xvYmFsIHNraXBfcmVnZXgKKworICAgIHNraXBfZm91bmQgPSBGYWxzZQorCisgICAgZm9yIGxpbmUgaW4gZmlsZShmaWxlbmFtZSwgInIiKS5yZWFkbGluZXMoKToKKyAgICAgICAgaWYgbGluZSA9PSAiIjoKKyAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgbm90IHNraXBfZm91bmQ6CisgICAgICAgICAgICBpZiBza2lwX3JlZ2V4LnNlYXJjaChsaW5lKToKKyAgICAgICAgICAgICAgICBza2lwX2ZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGlmIHNraXBfbGluZXMgPiAwOgorICAgICAgICAgICAgc2tpcF9saW5lcyAtPSAxCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGlmIGxlbihwYXJzZXIuc3lzY2FsbHMpID49IG1heF9saW5lczoKKyAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgZmlsdGVyX3JlZ2V4LnNlYXJjaChsaW5lKToKKyAgICAgICAgICAgIHBhcnNlci5hZGRfbGluZSAobGluZSkKKworICAgIHJldHVybiBwYXJzZXIuc3lzY2FsbHMKKworZGVmIG5vcm1hbGl6ZV90aW1lc3RhbXBzKHN5c2NhbGxzKToKKworICAgIGZpcnN0X3RpbWVzdGFtcCA9IHN5c2NhbGxzWzBdLnRpbWVzdGFtcAorCisgICAgZm9yIHN5c2NhbGwgaW4gc3lzY2FsbHM6CisgICAgICAgIHN5c2NhbGwudGltZXN0YW1wIC09IGZpcnN0X3RpbWVzdGFtcAorCitkZWYgY29tcHV0ZV9zeXNjYWxsX21ldHJpY3Moc3lzY2FsbHMpOgorICAgIGdsb2JhbCBQSVhFTFNfUEVSX1NFQ09ORAorICAgIGdsb2JhbCBQSVhFTFNfUEVSX0xJTkUKKyAgICAKKyAgICBudW1fc3lzY2FsbHMgPSBsZW4oc3lzY2FsbHMpCisKKyAgICBtZXRyaWNzID0gTWV0cmljcygpCisgICAgbWV0cmljcy53aWR0aCA9IFBMT1RfV0lEVEgKKworICAgIGxhc3RfdGltZXN0YW1wID0gc3lzY2FsbHNbbnVtX3N5c2NhbGxzIC0gMV0udGltZXN0YW1wCisKKyAgICB0aW1lX2hlaWdodCA9IGludChtYXRoLmNlaWwobGFzdF90aW1lc3RhbXAgKiBQSVhFTFNfUEVSX1NFQ09ORCkpCisgICAgbGluZV9oZWlnaHQgPSBudW1fc3lzY2FsbHMgKiBQSVhFTFNfUEVSX0xJTkUKKworICAgIGlmIHRpbWVfaGVpZ2h0ID4gbGluZV9oZWlnaHQ6CisgICAgICAgIG1ldHJpY3MuaGVpZ2h0ID0gdGltZV9oZWlnaHQKKyAgICAgICAgcHJpbnQgIkFkanVzdGluZyBQSVhFTFNfUEVSX0xJTkUgPSAlZCIgJSBQSVhFTFNfUEVSX0xJTkUKKyAgICAgICAgUElYRUxTX1BFUl9MSU5FID0gbWV0cmljcy5oZWlnaHQgLyBudW1fc3lzY2FsbHMKKyAgICAgICAgcHJpbnQgIiAgICAgICAgICBQSVhFTFNfUEVSX0xJTkUgPSAlZCIgJSBQSVhFTFNfUEVSX0xJTkUKKyAgICBlbHNlOgorICAgICAgICBtZXRyaWNzLmhlaWdodCA9IGxpbmVfaGVpZ2h0CisgICAgICAgIHByaW50ICJBZGp1c3RpbmcgUElYRUxTX1BFUl9TRUNPTkQgJWQiICUgUElYRUxTX1BFUl9TRUNPTkQKKyAgICAgICAgUElYRUxTX1BFUl9TRUNPTkQgPSBpbnQobWF0aC5jZWlsKG1ldHJpY3MuaGVpZ2h0IC8gbGFzdF90aW1lc3RhbXApKQorICAgICAgICBwcmludCAiICAgICAgICAgIFBJWEVMU19QRVJfU0VDT05EICVkIiAlIFBJWEVMU19QRVJfU0VDT05ECisKKyAgICB0ZXh0X3lwb3MgPSAwCisKKyAgICBmb3Igc3lzY2FsbCBpbiBzeXNjYWxsczoKKyAgICAgICAgc3lzY2FsbC50aW1lc3RhbXBfeXBvcyA9IHN5c2NhbGwudGltZXN0YW1wICogUElYRUxTX1BFUl9TRUNPTkQKKyAgICAgICAgc3lzY2FsbC5sb2dfeXBvcyA9IHRleHRfeXBvcyArIEZPTlRfU0laRQorCisgICAgICAgIHRleHRfeXBvcyArPSBQSVhFTFNfUEVSX0xJTkUKKworICAgIHJldHVybiBtZXRyaWNzCisKK2RlZiBwbG90X3RpbWVfc2NhbGUoc3VyZmFjZSwgY3R4LCBtZXRyaWNzKToKKyAgICBudW1fc2Vjb25kcyA9IChtZXRyaWNzLmhlaWdodCArIFBJWEVMU19QRVJfU0VDT05EIC0gMSkgLyBQSVhFTFNfUEVSX1NFQ09ORAorCisgICAgY3R4LnNldF9zb3VyY2VfcmdiKDAuNSwgMC41LCAwLjUpCisgICAgY3R4LnNldF9saW5lX3dpZHRoKDEuMCkKKworICAgIGZvciBpIGluIHJhbmdlKG51bV9zZWNvbmRzKToKKyAgICAgICAgeXBvcyA9IGkgKiBQSVhFTFNfUEVSX1NFQ09ORAorCisgICAgICAgIGN0eC5tb3ZlX3RvKDAsIHlwb3MgKyAwLjUpCisgICAgICAgIGN0eC5saW5lX3RvKFRJTUVfU0NBTEVfV0lEVEgsIHlwb3MgKyAwLjUpCisgICAgICAgIGN0eC5zdHJva2UoKQorCisgICAgICAgIGN0eC5tb3ZlX3RvKDAsIHlwb3MgKyAyICsgRk9OVF9TSVpFKQorICAgICAgICBjdHguc2hvd190ZXh0KCIlZCBzIiAlIGkpCisKK2RlZiBwbG90X3N5c2NhbGwoc3VyZmFjZSwgY3R4LCBzeXNjYWxsKToKKyAgICBjdHguc2V0X3NvdXJjZV9yZ2IoKnN5c2NhbGwuY29sb3JzKQorCisgICAgIyBMaW5lCisKKyAgICBjdHgubW92ZV90byhUSU1FX1NDQUxFX1dJRFRILCBzeXNjYWxsLnRpbWVzdGFtcF95cG9zKQorICAgIGN0eC5saW5lX3RvKFRJTUVfU0NBTEVfV0lEVEggKyBTWVNDQUxMX01BUktFUl9XSURUSCwgc3lzY2FsbC50aW1lc3RhbXBfeXBvcykKKyAgICBjdHgubGluZV90byhMT0dfVEVYVF9YUE9TIC0gTE9HX01BUktFUl9XSURUSCwgc3lzY2FsbC5sb2dfeXBvcyAtIEZPTlRfU0laRSAvIDIgKyAwLjUpCisgICAgY3R4LmxpbmVfdG8oTE9HX1RFWFRfWFBPUywgc3lzY2FsbC5sb2dfeXBvcyAtIEZPTlRfU0laRSAvIDIgKyAwLjUpCisgICAgY3R4LnN0cm9rZSgpCisKKyAgICAjIExvZyB0ZXh0CisKKyAgICBjdHgubW92ZV90byhMT0dfVEVYVF9YUE9TLCBzeXNjYWxsLmxvZ195cG9zKQorICAgIGN0eC5zaG93X3RleHQoIiU4LjVmOiAlcyIgJSAoc3lzY2FsbC50aW1lc3RhbXAsIHN5c2NhbGwubG9nKSkKKworZGVmIHBsb3Rfc3lzY2FsbHNfdG9fc3VyZmFjZShzeXNjYWxscywgbWV0cmljcyk6CisgICAgbnVtX3N5c2NhbGxzID0gbGVuKHN5c2NhbGxzKQorCisgICAgcHJpbnQgJ3BpY3R1cmUgc2l6ZTogJWQgeCAlZCcgJSAobWV0cmljcy53aWR0aCwgbWV0cmljcy5oZWlnaHQpOworCisgICAgc3VyZmFjZSA9IGNhaXJvLkltYWdlU3VyZmFjZShjYWlyby5GT1JNQVRfUkdCMjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWNzLndpZHRoLCBtZXRyaWNzLmhlaWdodCkKKworICAgIGN0eCA9IGNhaXJvLkNvbnRleHQoc3VyZmFjZSkKKyAgICBjdHguc2VsZWN0X2ZvbnRfZmFjZShGT05UX05BTUUpCisgICAgY3R4LnNldF9mb250X3NpemUoRk9OVF9TSVpFKQorCisgICAgIyBCYWNrZ3JvdW5kCisKKyAgICBjdHguc2V0X3NvdXJjZV9yZ2IgKCpCQUNLR1JPVU5EX0NPTE9SKQorICAgIGN0eC5yZWN0YW5nbGUoMCwgMCwgbWV0cmljcy53aWR0aCwgbWV0cmljcy5oZWlnaHQpCisgICAgY3R4LmZpbGwoKQorCisgICAgIyBUaW1lIHNjYWxlCisKKyAgICBwbG90X3RpbWVfc2NhbGUoc3VyZmFjZSwgY3R4LCBtZXRyaWNzKQorCisgICAgIyBDb250ZW50cworCisgICAgY3R4LnNldF9saW5lX3dpZHRoKDEuMCkKKworICAgIGZvciBzeXNjYWxsIGluIHN5c2NhbGxzOgorICAgICAgICBwbG90X3N5c2NhbGwoc3VyZmFjZSwgY3R4LCBzeXNjYWxsKQorCisgICAgcmV0dXJuIHN1cmZhY2UKKworZGVmIG1haW4oYXJncyk6CisKKyAgICBnbG9iYWwgc2tpcF9saW5lcworICAgIGdsb2JhbCBtYXhfbGluZXMKKyAgICBnbG9iYWwgZmlsdGVyX3JlZ2V4CisgICAgZ2xvYmFsIHNraXBfcmVnZXgKKworICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoCisgICAgICAgIHVzYWdlPSJ1c2FnZTogJXByb2cgLW8gb3V0cHV0LnBuZyA8ZGVidWcubG9nPiIpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCItbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLW91dHB1dCIsIGRlc3Q9Im91dHB1dCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9IkZJTEUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJOYW1lIG9mIG91dHB1dCBmaWxlIChvdXRwdXQgaXMgYSBQTkcgZmlsZSkiKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbigiLXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1za2lwIiwgZGVzdD0ic2tpcCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9IkxJTkVTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iU2tpcCBhIG51bWJlciBvZiBsb2dsaW5lcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIG9yIHdhaXQgdGlsbCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBoYXBwZW5zIikKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIi1tIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tbWF4LWxpbmVzIiwgZGVzdD0ibWF4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ibWF4IGxpbmVzIHRoYXQgbmVlZCB0byBiZSBwbG90dGVkIikKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oIi1mIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tZmlsdGVyIiwgZGVzdD0iZmlsdGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iZmlsdGVyIHRoZSBsb2cgbGluZXMgb24gYSByZWd1bGFyIGV4cHJlc3Npb24iKQorCisgICAgb3B0aW9ucywgYXJncyA9IG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBpZiBub3Qgb3B0aW9ucy5vdXRwdXQ6CisgICAgICAgIHByaW50ICdQbGVhc2Ugc3BlY2lmeSBhbiBvdXRwdXQgZmlsZW5hbWUgd2l0aCAiLW8gZmlsZS5wbmciIG9yICItLW91dHB1dD1maWxlLnBuZyIuJworICAgICAgICByZXR1cm4gMQorCisgICAgaWYgbGVuKGFyZ3MpICE9IDE6CisgICAgICAgIHByaW50ICdQbGVhc2Ugc3BlY2lmeSBvbmx5IG9uZSBpbnB1dCBmaWxlbmFtZSwgd2hpY2ggaXMgYW4gZGVidWcgbG9nIHRha2VuIHdpdGggIkdTVF9ERUJVR19OT19DT0xPUj0xIEdTVF9ERUJVRz1YWFggPGFwcGxpY2F0aW9uPiInCisgICAgICAgIHJldHVybiAxCisKKyAgICBpbl9maWxlbmFtZSA9IGFyZ3NbMF0KKyAgICBvdXRfZmlsZW5hbWUgPSBvcHRpb25zLm91dHB1dAorCisgICAgaWYgb3B0aW9ucy5za2lwOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBza2lwX2xpbmVzID0gaW50KG9wdGlvbnMuc2tpcCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2tpcF9yZWdleCA9IHJlLmNvbXBpbGUob3B0aW9ucy5za2lwKQorICAgICAgICAgICAgc2tpcF9saW5lcyA9IDAKKworICAgIGlmIG9wdGlvbnMubWF4OgorICAgICAgICBtYXhfbGluZXMgPSBpbnQob3B0aW9ucy5tYXgpCisKKyAgICBpZiBvcHRpb25zLmZpbHRlcjoKKyAgICAgICAgZmlsdGVyX3JlZ2V4ID0gcmUuY29tcGlsZShvcHRpb25zLmZpbHRlcikKKworICAgIHN5c2NhbGxzID0gW10KKyAgICBmb3Igc3lzY2FsbCBpbiBwYXJzZV9zdHJhY2UoaW5fZmlsZW5hbWUpOgorICAgICAgICBzeXNjYWxscy5hcHBlbmQoc3lzY2FsbCkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzeXNjYWxsLCBGaXJzdE1hcmspOgorICAgICAgICAgICAgc3lzY2FsbHMgPSBbXQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc3lzY2FsbCwgTGFzdE1hcmspOgorICAgICAgICAgICAgYnJlYWsKKworICAgIGlmIG5vdCBzeXNjYWxsczoKKyAgICAgICAgcHJpbnQgJ05vIGxvZ3MgaW4gJXMnICUgaW5fZmlsZW5hbWUKKyAgICAgICAgcmV0dXJuIDEKKworICAgIG5vcm1hbGl6ZV90aW1lc3RhbXBzKHN5c2NhbGxzKQorICAgIG1ldHJpY3MgPSBjb21wdXRlX3N5c2NhbGxfbWV0cmljcyhzeXNjYWxscykKKworICAgIHN1cmZhY2UgPSBwbG90X3N5c2NhbGxzX3RvX3N1cmZhY2Uoc3lzY2FsbHMsIG1ldHJpY3MpCisgICAgc3VyZmFjZS53cml0ZV90b19wbmcob3V0X2ZpbGVuYW1lKQorCisgICAgcmV0dXJuIDAKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2KSkKZGlmZiAtLWdpdCBhL3Rvb2xzL2dzdC10eXBlZmluZC4xLmluIGIvdG9vbHMvZ3N0LXR5cGVmaW5kLjEuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ3MTMwNAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2dzdC10eXBlZmluZC4xLmluCkBAIC0wLDAgKzEsNDAgQEAKKy5USCBHU3RyZWFtZXIgMSAiTWF5IDIwMDMiCisuU0ggIk5BTUUiCitnc3RcLXR5cGVmaW5kIC0gcHJpbnQgTUlNRSB0eXBlIG9mIGZpbGUKKy5TSCAiU1lOT1BTSVMiCisuQiAgZ3N0XC10eXBlZmluZCA8ZmlsZT4KKy5TSCAiREVTQ1JJUFRJT04iCisuUFAKK1xmSWdzdFwtdHlwZWZpbmRcZlAgdXNlcyB0aGUgR1N0cmVhbWVyIHR5cGUgZmluZGluZyBzeXN0ZW0gdG8KK2RldGVybWluZSB0aGUgcmVsZXZhbnQgR1N0cmVhbWVyIHBsdWdpbiB0byBwYXJzZSBvciBkZWNvZGUgXGZCZmlsZVxmUCwKK2FuZCB0aGUgY29ycmVzcG9uZGluZyBNSU1FIHR5cGUuCisuCisuU0ggIk9QVElPTlMiCisubAorXGZJZ3N0XC10eXBlZmluZFxmUCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKy5UUCA4CisuQiAgXC1cLWhlbHAKK1ByaW50IGhlbHAgc3lub3BzaXMgYW5kIGF2YWlsYWJsZSBGTEFHUworLlRQIDgKKy5CICBcLVwtZ3N0XC1pbmZvXC1tYXNrPUZMQUdTCitcZklHU3RyZWFtZXJcZlAgaW5mbyBmbGFncyB0byBzZXQgKGxpc3Qgd2l0aCBcLVwtaGVscCkKKy5UUCA4CisuQiAgXC1cLWdzdFwtZGVidWdcLW1hc2s9RkxBR1MKK1xmSUdTdHJlYW1lclxmUCBkZWJ1Z2dpbmcgZmxhZ3MgdG8gc2V0IChsaXN0IHdpdGggXC1cLWhlbHApCisuVFAgOAorLkIgIFwtXC1nc3RcLW1hc2s9RkxBR1MKK1xmSUdTdHJlYW1lclxmUCBpbmZvIGFuZCBkZWJ1Z2dpbmcgZmxhZ3MgdG8gc2V0IChsaXN0IHdpdGggXC1cLWhlbHApCisuVFAgOAorLkIgIFwtXC1nc3RcLXBsdWdpblwtc3BldworXGZJR1N0cmVhbWVyXGZQIGluZm8gZmxhZ3MgdG8gc2V0CitFbmFibGUgcHJpbnRvdXQgb2YgZXJyb3JzIHdoaWxlIGxvYWRpbmcgXGZJR1N0cmVhbWVyXGZQIHBsdWdpbnMKKy5UUCA4CisuQiAgXC1cLWdzdFwtcGx1Z2luXC1wYXRoPVBBVEgKK0FkZCBkaXJlY3RvcmllcyBzZXBhcmF0ZWQgd2l0aCAnOicgdG8gdGhlIHBsdWdpbiBzZWFyY2ggcGF0aAorLgorLlNIICJTRUUgQUxTTyIKKy5CUiBnc3RcLWZlZWRiYWNrICgxKSwKKy5CUiBnc3RcLWluc3BlY3QgKDEpLAorLkJSIGdzdFwtbGF1bmNoICgxKQorLlNIICJBVVRIT1IiCitUaGUgR1N0cmVhbWVyIHRlYW0gYXQgaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvCmRpZmYgLS1naXQgYS90b29scy9nc3QtdHlwZWZpbmQuYyBiL3Rvb2xzL2dzdC10eXBlZmluZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNjM1ZDYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9nc3QtdHlwZWZpbmQuYwpAQCAtMCwwICsxLDE4NSBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+CisgKiAgICAgICAgICAgICAgIDIwMDMgQmVuamFtaW4gT3R0ZSA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+CisgKiAgICAgICAgICAgICAgIDIwMDUgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgorICoKKyAqIGdzdC10eXBlZmluZC5jOiBVc2UgR1N0cmVhbWVyIHRvIGZpbmQgdGhlIHR5cGUgb2YgYSBmaWxlCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGxvY2FsZS5oPgorCisjaW5jbHVkZSAidG9vbHMuaCIKKworc3RhdGljIHZvaWQKK2hhdmVfdHlwZV9oYW5kbGVyIChHc3RFbGVtZW50ICogdHlwZWZpbmQsIGd1aW50IHByb2JhYmlsaXR5LAorICAgIGNvbnN0IEdzdENhcHMgKiBjYXBzLCBHc3RDYXBzICoqIHBfY2FwcykKK3sKKyAgaWYgKHBfY2FwcykgeworICAgICpwX2NhcHMgPSBnc3RfY2Fwc19jb3B5IChjYXBzKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAordHlwZWZpbmRfZmlsZSAoY29uc3QgZ2NoYXIgKiBmaWxlbmFtZSkKK3sKKyAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3JldDsKKyAgR3N0RWxlbWVudCAqcGlwZWxpbmU7CisgIEdzdEVsZW1lbnQgKnNvdXJjZTsKKyAgR3N0RWxlbWVudCAqdHlwZWZpbmQ7CisgIEdzdEVsZW1lbnQgKmZha2VzaW5rOworICBHc3RTdGF0ZSBzdGF0ZTsKKyAgR3N0Q2FwcyAqY2FwcyA9IE5VTEw7CisgIEdEaXIgKmRpcjsKKworICBpZiAoKGRpciA9IGdfZGlyX29wZW4gKGZpbGVuYW1lLCAwLCBOVUxMKSkpIHsKKyAgICBjb25zdCBnY2hhciAqZW50cnk7CisKKyAgICB3aGlsZSAoKGVudHJ5ID0gZ19kaXJfcmVhZF9uYW1lIChkaXIpKSkgeworICAgICAgZ2NoYXIgKnBhdGg7CisKKyAgICAgIHBhdGggPSBnX3N0cmNvbmNhdCAoZmlsZW5hbWUsIEdfRElSX1NFUEFSQVRPUl9TLCBlbnRyeSwgTlVMTCk7CisgICAgICB0eXBlZmluZF9maWxlIChwYXRoKTsKKyAgICAgIGdfZnJlZSAocGF0aCk7CisgICAgfQorCisgICAgZ19kaXJfY2xvc2UgKGRpcik7CisgICAgcmV0dXJuOworICB9CisKKyAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKKworICBzb3VyY2UgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmaWxlc3JjIiwgInNvdXJjZSIpOworICBnX2Fzc2VydCAoR1NUX0lTX0VMRU1FTlQgKHNvdXJjZSkpOworICB0eXBlZmluZCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInR5cGVmaW5kIiwgInR5cGVmaW5kIik7CisgIGdfYXNzZXJ0IChHU1RfSVNfRUxFTUVOVCAodHlwZWZpbmQpKTsKKyAgZmFrZXNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJmYWtlc2luayIpOworICBnX2Fzc2VydCAoR1NUX0lTX0VMRU1FTlQgKHR5cGVmaW5kKSk7CisKKyAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzb3VyY2UsIHR5cGVmaW5kLCBmYWtlc2luaywgTlVMTCk7CisgIGdzdF9lbGVtZW50X2xpbmtfbWFueSAoc291cmNlLCB0eXBlZmluZCwgZmFrZXNpbmssIE5VTEwpOworCisgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUICh0eXBlZmluZCksICJoYXZlLXR5cGUiLAorICAgICAgR19DQUxMQkFDSyAoaGF2ZV90eXBlX2hhbmRsZXIpLCAmY2Fwcyk7CisKKyAgZ19vYmplY3Rfc2V0IChzb3VyY2UsICJsb2NhdGlvbiIsIGZpbGVuYW1lLCBOVUxMKTsKKworICBHU1RfREVCVUcgKCJTdGFydGluZyB0eXBlZmluZGluZyBmb3IgJXMiLCBmaWxlbmFtZSk7CisKKyAgLyogdHlwZWZpbmQgd2lsbCBvbmx5IGNvbW1pdCB0byBQQVVTRUQgaWYgaXQgYWN0dWFsbHkgZmluZHMgYSB0eXBlOworICAgKiBvdGhlcndpc2UgdGhlIHN0YXRlIGNoYW5nZSBmYWlscyAqLworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChwaXBlbGluZSksIEdTVF9TVEFURV9QQVVTRUQpOworCisgIC8qIHdhaXQgdW50aWwgc3RhdGUgY2hhbmdlIGVpdGhlciBjb21wbGV0ZXMgb3IgZmFpbHMgKi8KKyAgc3JldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKHBpcGVsaW5lKSwgJnN0YXRlLCBOVUxMLCAtMSk7CisKKyAgc3dpdGNoIChzcmV0KSB7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU6eworICAgICAgR3N0TWVzc2FnZSAqbXNnOworICAgICAgR3N0QnVzICpidXM7CisgICAgICBHRXJyb3IgKmVyciA9IE5VTEw7CisKKyAgICAgIGJ1cyA9IGdzdF9waXBlbGluZV9nZXRfYnVzIChHU1RfUElQRUxJTkUgKHBpcGVsaW5lKSk7CisgICAgICBtc2cgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfRVJST1IsIDApOworICAgICAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKKworICAgICAgaWYgKG1zZykgeworICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobXNnLCAmZXJyLCBOVUxMKTsKKyAgICAgICAgZ19wcmludGVyciAoIiVzIC0gRkFJTEVEOiAlc1xuIiwgZmlsZW5hbWUsIGVyci0+bWVzc2FnZSk7CisgICAgICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKKyAgICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7CisgICAgICB9IGVsc2UgeworICAgICAgICBnX3ByaW50ZXJyICgiJXMgLSBGQUlMRUQ6IHVua25vd24gZXJyb3JcbiIsIGZpbGVuYW1lKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzp7CisgICAgICBpZiAoY2FwcykgeworICAgICAgICBnY2hhciAqY2Fwc19zdHI7CisKKyAgICAgICAgY2Fwc19zdHIgPSBnc3RfY2Fwc190b19zdHJpbmcgKGNhcHMpOworICAgICAgICBnX3ByaW50ICgiJXMgLSAlc1xuIiwgZmlsZW5hbWUsIGNhcHNfc3RyKTsKKyAgICAgICAgZ19mcmVlIChjYXBzX3N0cik7CisgICAgICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGdfcHJpbnQgKCIlcyAtICVzXG4iLCBmaWxlbmFtZSwgIk5vIHR5cGUgZm91bmQiKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7CisgIH0KKworICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7CisgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKK30KKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICBnY2hhciAqKmZpbGVuYW1lcyA9IE5VTEw7CisgIGd1aW50IG51bSwgaTsKKyAgR0Vycm9yICplcnIgPSBOVUxMOworICBHT3B0aW9uQ29udGV4dCAqY3R4OworICBHT3B0aW9uRW50cnkgb3B0aW9uc1tdID0geworICAgIEdTVF9UT09MU19HT1BUSU9OX1ZFUlNJT04sCisgICAge0dfT1BUSU9OX1JFTUFJTklORywgMCwgMCwgR19PUFRJT05fQVJHX0ZJTEVOQU1FX0FSUkFZLCAmZmlsZW5hbWVzLCBOVUxMfSwKKyAgICB7TlVMTH0KKyAgfTsKKworI2lmZGVmIEVOQUJMRV9OTFMKKyAgYmluZHRleHRkb21haW4gKEdFVFRFWFRfUEFDS0FHRSwgTE9DQUxFRElSKTsKKyAgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKEdFVFRFWFRfUEFDS0FHRSwgIlVURi04Iik7CisgIHRleHRkb21haW4gKEdFVFRFWFRfUEFDS0FHRSk7CisjZW5kaWYKKworICBnX3RocmVhZF9pbml0IChOVUxMKTsKKworICBnc3RfdG9vbHNfc2V0X3ByZ25hbWUgKCJnc3QtdHlwZWZpbmQiKTsKKworICBjdHggPSBnX29wdGlvbl9jb250ZXh0X25ldyAoIkZJTEVTIik7CisgIGdfb3B0aW9uX2NvbnRleHRfYWRkX21haW5fZW50cmllcyAoY3R4LCBvcHRpb25zLCBHRVRURVhUX1BBQ0tBR0UpOworICBnX29wdGlvbl9jb250ZXh0X2FkZF9ncm91cCAoY3R4LCBnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwICgpKTsKKyAgaWYgKCFnX29wdGlvbl9jb250ZXh0X3BhcnNlIChjdHgsICZhcmdjLCAmYXJndiwgJmVycikpIHsKKyAgICBnX3ByaW50ICgiRXJyb3IgaW5pdGlhbGl6aW5nOiAlc1xuIiwgR1NUX1NUUl9OVUxMIChlcnItPm1lc3NhZ2UpKTsKKyAgICBleGl0ICgxKTsKKyAgfQorICBnX29wdGlvbl9jb250ZXh0X2ZyZWUgKGN0eCk7CisKKyAgZ3N0X3Rvb2xzX3ByaW50X3ZlcnNpb24gKCJnc3QtdHlwZWZpbmQiKTsKKworICBpZiAoZmlsZW5hbWVzID09IE5VTEwgfHwgKmZpbGVuYW1lcyA9PSBOVUxMKSB7CisgICAgZ19wcmludCAoIlBsZWFzZSBnaXZlIGEgZmlsZW5hbWUgdG8gdHlwZWZpbmRcblxuIik7CisgICAgcmV0dXJuIDE7CisgIH0KKworICBudW0gPSBnX3N0cnZfbGVuZ3RoIChmaWxlbmFtZXMpOworCisgIGZvciAoaSA9IDA7IGkgPCBudW07ICsraSkgeworICAgIHR5cGVmaW5kX2ZpbGUgKGZpbGVuYW1lc1tpXSk7CisgIH0KKworICBnX3N0cmZyZWV2IChmaWxlbmFtZXMpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdG9vbHMuaCBiL3Rvb2xzL3Rvb2xzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNhYzU0MgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Rvb2xzLmgKQEAgLTAsMCArMSw3MCBAQAorLyogR1N0cmVhbWVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQmVuamFtaW4gT3R0ZSA8b3R0ZUBnbm9tZS5vcmc+CisgKgorICogdG9vbHMuaDogaGVhZGVyIGZvciBjb21tb24gc3R1ZmYgb2YgYWxsIEdTdHJlYW1lciB0b29scworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKworI2lmbmRlZiBfX0dTVF9UT09MU19IX18KKyNkZWZpbmUgX19HU1RfVE9PTFNfSF9fCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlICJnc3QvZ3N0LWkxOG4tYXBwLmgiCisKKy8qCisgKiBUaGlzIGlzIGEga2luZCBvZiBoYWNreSB3YXkgdG8gbWFrZSBhbGwgdGhlIHRvb2xzIHVzZSB0aGUgc2FtZSB2ZXJzaW9uIGNvZGUuCisgKiBJZiBhbnlvbmUga25vd3MgYSBsZXNzIGhhY2t5IHdheSB0byBnZXQgdGhpcyBkb25lLCBmZWVsIGZyZWUgdG8gaW1wbGVtZW50IGl0LgorICogCisgKiBJdCBhbHNvIGluY2x1ZGVzIGFsbCB0aGUgZmlsZXMgdGhhdCBhbGwgdGhlIHRvb2xzIHJlcXVpcmUuCisgKi8KKworc3RhdGljIGdib29sZWFuIF9fZ3N0X3Rvb2xzX3ZlcnNpb24gPSBGQUxTRTsKKworI2RlZmluZSBHU1RfVE9PTFNfR09QVElPTl9WRVJTSU9OIFwKKyAgICB7ICJ2ZXJzaW9uIiwgMCwgMCwgR19PUFRJT05fQVJHX05PTkUsICZfX2dzdF90b29sc192ZXJzaW9uLCBcCisgICAgICBOXygiUHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdCIpLCBOVUxMIH0KKworc3RhdGljIHZvaWQKK2dzdF90b29sc19wcmludF92ZXJzaW9uIChjb25zdCBnY2hhciAqIHRvb2wpCit7CisgIGlmIChfX2dzdF90b29sc192ZXJzaW9uKSB7CisgICAgZ2NoYXIgKnZlcnNpb25fc3RyOworCisgICAgdmVyc2lvbl9zdHIgPSBnc3RfdmVyc2lvbl9zdHJpbmcgKCk7CisgICAgZ19wcmludCAoIiVzIHZlcnNpb24gJXUuJXUuJXVcbiIsIGdfZ2V0X3ByZ25hbWUgKCksCisgICAgICAgIEdTVF9WRVJTSU9OX01BSk9SLCBHU1RfVkVSU0lPTl9NSU5PUiwgR1NUX1ZFUlNJT05fTUlDUk8pOworICAgIGdfcHJpbnQgKCIlc1xuIiwgdmVyc2lvbl9zdHIpOworICAgIGdfcHJpbnQgKCIlc1xuIiwgR1NUX1BBQ0tBR0VfT1JJR0lOKTsKKyAgICBnX2ZyZWUgKHZlcnNpb25fc3RyKTsKKyAgICBleGl0ICgwKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZ3N0X3Rvb2xzX3NldF9wcmduYW1lIChjb25zdCBnY2hhciAqIHRvb2wpCit7CisgIGdjaGFyICpzOworCisgIHMgPSBnX3N0cmR1cF9wcmludGYgKCIlcy0ldS4ldSIsIHRvb2wsIEdTVF9WRVJTSU9OX01BSk9SLCBHU1RfVkVSU0lPTl9NSU5PUik7CisgIGdfc2V0X3ByZ25hbWUgKHMpOworICBnX2ZyZWUgKHMpOworfQorCisjZW5kaWYgLyogX19HU1RfVE9PTFNfSF9fICovCmRpZmYgLS1naXQgYS93aW4zMi9NQU5JRkVTVCBiL3dpbjMyL01BTklGRVNUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZjg4NmUKLS0tIC9kZXYvbnVsbAorKysgYi93aW4zMi9NQU5JRkVTVApAQCAtMCwwICsxLDQxIEBACit3aW4zMi9NQU5JRkVTVAord2luMzIvUkVBRE1FLnR4dAord2luMzIvY29tbW9uL2NvbmZpZy5oCit3aW4zMi9jb21tb24vZGlyZW50LmMKK3dpbjMyL2NvbW1vbi9kaXJlbnQuaAord2luMzIvY29tbW9uL2dzdGNvbmZpZy5oCit3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmMKK3dpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuaAord2luMzIvY29tbW9uL2dzdHZlcnNpb24uaAord2luMzIvY29tbW9uL2d0Y2hhci5oCit3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWYKK3dpbjMyL2NvbW1vbi9saWJnc3Rjb250cm9sbGVyLmRlZgord2luMzIvY29tbW9uL2xpYmdzdGRhdGFwcm90b2NvbC5kZWYKK3dpbjMyL2NvbW1vbi9saWJnc3RuZXQuZGVmCit3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZgord2luMzIvdnM2L2dzdHJlYW1lci5kc3cKK3dpbjMyL3ZzNi9ncmFtbWFyLmRzcAord2luMzIvdnM2L2dzdF9pbnNwZWN0LmRzcAord2luMzIvdnM2L2dzdF9sYXVuY2guZHNwCit3aW4zMi92czYvbGliZ3N0YmFzZS5kc3AKK3dpbjMyL3ZzNi9saWJnc3Rjb250cm9sbGVyLmRzcAord2luMzIvdnM2L2xpYmdzdGNvcmVlbGVtZW50cy5kc3AKK3dpbjMyL3ZzNi9saWJnc3RkYXRhcHJvdG9jb2wuZHNwCit3aW4zMi92czYvbGliZ3N0bmV0LmRzcAord2luMzIvdnM2L2xpYmdzdHJlYW1lci5kc3AKK3dpbjMyL3ZzNy9nc3RyZWFtZXIuc2xuCit3aW4zMi92czcvZ3JhbW1hci52Y3Byb2oKK3dpbjMyL3ZzNy9nc3QtaW5zcGVjdC52Y3Byb2oKK3dpbjMyL3ZzNy9nc3QtbGF1bmNoLnZjcHJvagord2luMzIvdnM3L2xpYmdzdGJhc2UudmNwcm9qCit3aW4zMi92czcvbGliZ3N0Y29udHJvbGxlci52Y3Byb2oKK3dpbjMyL3ZzNy9saWJnc3Rjb3JlZWxlbWVudHMudmNwcm9qCit3aW4zMi92czcvbGliZ3N0cmVhbWVyLnZjcHJvagord2luMzIvdnM4L2dzdHJlYW1lci5zbG4KK3dpbjMyL3ZzOC9ncmFtbWFyLnZjcHJvagord2luMzIvdnM4L2dzdC1pbnNwZWN0LnZjcHJvagord2luMzIvdnM4L2dzdC1sYXVuY2gudmNwcm9qCit3aW4zMi92czgvbGliZ3N0YmFzZS52Y3Byb2oKK3dpbjMyL3ZzOC9saWJnc3Rjb250cm9sbGVyLnZjcHJvagord2luMzIvdnM4L2xpYmdzdGNvcmVlbGVtZW50cy52Y3Byb2oKK3dpbjMyL3ZzOC9saWJnc3RyZWFtZXIudmNwcm9qClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd2luMzIvUkVBRE1FLnR4dCBiL3dpbjMyL1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVhZmE1MgotLS0gL2Rldi9udWxsCisrKyBiL3dpbjMyL1JFQURNRS50eHQKQEAgLTAsMCArMSwyOCBAQAorQnVpbGRpbmcgR1N0cmVhbWVyIG9uIFdpbmRvd3MNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KK1J1bm5pbmcgR1N0cmVhbWVyIG9uIFdpbmRvd3MgaXMgY3VycmVudGx5IGV4cGVyaW1lbnRhbCwgYnV0IGltcHJvdmluZy4NCisNCitCdWlsZGluZyBvbiBNaW5HVy9NU3lzDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK1Nob3VsZCB3b3JrIG91dCBvZiB0aGUgYm94IGZyb20gdGhlIHRvcGxldmVsIGRpcmVjdG9yeSB1c2luZyB0aGUgc3RhbmRhcmQNCitVbml4IGJ1aWxkIHN5c3RlbSBwcm92aWRlZC4NCisNCitUaGlzIGJ1aWxkIHR5cGUgaXMgZmFpcmx5IHdlbGwgc3VwcG9ydGVkLg0KKw0KK0J1aWxkaW5nIHdpdGggVmlzdWFsIFN0dWRpbyA2DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitUaGUgZGlyZWN0b3J5IHZzNi8gY29udGFpbnMgdGhlIHdvcmtzcGFjZXMgbmVlZGVkIHRvIGJ1aWxkIEdTdHJlYW1lciBmcm9tDQorVmlzdWFsIFN0dWRpby4NCisNCitUaGlzIGJ1aWxkIHR5cGUgaXMgZmFpcmx5IHdlbGwgc3VwcG9ydGVkLg0KKw0KK0J1aWxkaW5nIHdpdGggVmlzdWFsIFN0dWRpbyA3DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2czcvIGNvbnRhaW5zIHRoZSBmaWxlcyBuZWVkZWQsIGJ1dCB0aGV5IGhhdmVuJ3QgYmVlbiB1cGRhdGVkIHNpbmNlIHRoZQ0KKzAuOCBzZXJpZXMuDQorDQorVGhpcyBidWlsZCBpcyBjdXJyZW50bHkgdW5zdXBwb3J0ZWQuDQorDQorVGhlIGNvbW1vbi8gZGlyZWN0b3J5IGNvbnRhaW5zIHN1cHBvcnQgZmlsZXMgdGhhdCBjYW4gYmUgc2hhcmVkIGJldHdlZW4NCit0aGVzZSB0d28gdmVyc2lvbnMgb2YgVmlzdWFsIFN0dWRpby4NCmRpZmYgLS1naXQgYS93aW4zMi9jb21tb24vY29uZmlnLmggYi93aW4zMi9jb21tb24vY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA1NGNmZQotLS0gL2Rldi9udWxsCisrKyBiL3dpbjMyL2NvbW1vbi9jb25maWcuaApAQCAtMCwwICsxLDQwNCBAQAorLyogQXV0b2dlbmVyYXRlZCBjb25maWcuaCBjcmVhdGVkIGZvciB3aW4zMiBWaXN1YWwgU3R1ZGlvIGJ1aWxkcyAqLworCisvKiBQUkVGSVggLS0gc3BlY2lmaWNhbGx5IGFkZGVkIGZvciBXaW5kb3dzIGZvciBlYXNpZXIgbW92aW5nICovCisjZGVmaW5lIFBSRUZJWCAiQzpcXGdzdHJlYW1lciIKKworLyogRGVmaW5lIGlmIGJ1aWxkaW5nIHVuaXZlcnNhbCAoaW50ZXJuYWwgaGVscGVyIG1hY3JvKSAqLworI3VuZGVmIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRAorCisvKiBwb2xsIGRvZXNuJ3Qgd29yayBvbiBkZXZpY2VzICovCisjdW5kZWYgQlJPS0VOX1BPTEwKKworLyogRGVmaW5lIHRvIDEgaWYgdHJhbnNsYXRpb24gb2YgcHJvZ3JhbSBtZXNzYWdlcyB0byB0aGUgdXNlcidzIG5hdGl2ZQorICAgbGFuZ3VhZ2UgaXMgcmVxdWVzdGVkLiAqLworI3VuZGVmIEVOQUJMRV9OTFMKKworLyogU3VidW5pdCBwcm90b2NvbCByZXN1bHQgb3V0cHV0ICovCisjdW5kZWYgRU5BQkxFX1NVQlVOSVQKKworLyogZ2V0dGV4dCBwYWNrYWdlIG5hbWUgKi8KKyNkZWZpbmUgR0VUVEVYVF9QQUNLQUdFICJnc3RyZWFtZXItMC4xMSIKKworLyogZGF0YSBkaXIgKi8KKyNkZWZpbmUgR1NUX0RBVEFESVIgUFJFRklYICJcXHNoYXJlIgorCisvKiBEZWZpbmUgaWYgb3B0aW9uIHBhcnNpbmcgaXMgZGlzYWJsZWQgKi8KKyN1bmRlZiBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lORworCisvKiBEZWZpbmUgaWYgcGlwZWxpbmUgcGFyc2luZyBjb2RlIGlzIGRpc2FibGVkICovCisjdW5kZWYgR1NUX0RJU0FCTEVfUEFSU0UKKworLyogRXh0cmEgcGxhdGZvcm0gc3BlY2lmaWMgcGx1Z2luIHN1ZmZpeCAqLworI3VuZGVmIEdTVF9FWFRSQV9NT0RVTEVfU1VGRklYCisKKy8qIG1hY3JvIHRvIHVzZSB0byBzaG93IGZ1bmN0aW9uIG5hbWUgKi8KKyN1bmRlZiBHU1RfRlVOQ1RJT04KKworLyogRGVmaW5lZCBpZiBnY292IGlzIGVuYWJsZWQgdG8gZm9yY2UgYSByZWJ1aWxkIGR1ZSB0byBjb25maWcuaCBjaGFuZ2luZyAqLworI3VuZGVmIEdTVF9HQ09WX0VOQUJMRUQKKworLyogRGVmaW5lZCB3aGVuIHJlZ2lzdHJ5IHNjYW5uaW5nIHRocm91Z2ggZm9yayBpcyB1bnNhZmUgKi8KKyN1bmRlZiBHU1RfSEFWRV9VTlNBRkVfRk9SSworCisvKiBEZWZhdWx0IGVycm9ybGV2ZWwgdG8gdXNlICovCisjZGVmaW5lIEdTVF9MRVZFTF9ERUZBVUxUIEdTVF9MRVZFTF9FUlJPUgorCisvKiBHU3RyZWFtZXIgbGljZW5zZSAqLworI2RlZmluZSBHU1RfTElDRU5TRSAiTEdQTCIKKworLyogbGlicmFyeSBtYWpvci5taW5vciB2ZXJzaW9uICovCisjZGVmaW5lIEdTVF9NQUpPUk1JTk9SICIwLjExIgorCisvKiBwYWNrYWdlIG5hbWUgaW4gcGx1Z2lucyAqLworI2RlZmluZSBHU1RfUEFDS0FHRV9OQU1FICJHU3RyZWFtZXIgc291cmNlIHJlbGVhc2UiCisKKy8qIHBhY2thZ2Ugb3JpZ2luICovCisjZGVmaW5lIEdTVF9QQUNLQUdFX09SSUdJTiAiVW5rbm93biBwYWNrYWdlIG9yaWdpbiIKKworLyogR1N0cmVhbWVyIHBhY2thZ2UgcmVsZWFzZSBkYXRlL3RpbWUgZm9yIHBsdWdpbnMgYXMgWVlZWS1NTS1ERCAqLworI2RlZmluZSBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FICIyMDExLTA5LTI5IgorCisvKiBsb2NhdGlvbiBvZiB0aGUgaW5zdGFsbGVkIGdzdC1wbHVnaW4tc2Nhbm5lciAqLworI2RlZmluZSBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEIExJQkRJUiAiXFxnc3QtcGx1Z2luLXNjYW5uZXIiCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBNYWNPUyBYIGZ1bmN0aW9uIENGTG9jYWxlQ29weUN1cnJlbnQgaW4gdGhlCisgICBDb3JlRm91bmRhdGlvbiBmcmFtZXdvcmsuICovCisjdW5kZWYgSEFWRV9DRkxPQ0FMRUNPUFlDVVJSRU5UCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBNYWNPUyBYIGZ1bmN0aW9uIENGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUgaW4KKyAgIHRoZSBDb3JlRm91bmRhdGlvbiBmcmFtZXdvcmsuICovCisjdW5kZWYgSEFWRV9DRlBSRUZFUkVOQ0VTQ09QWUFQUFZBTFVFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2xvY2tfZ2V0dGltZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9DTE9DS19HRVRUSU1FCisKKy8qIERlZmluZSBpZiB0aGUgaG9zdCBDUFUgaXMgYW4gQWxwaGEgKi8KKyN1bmRlZiBIQVZFX0NQVV9BTFBIQQorCisvKiBEZWZpbmUgaWYgdGhlIGhvc3QgQ1BVIGlzIGFuIEFSTSAqLworI3VuZGVmIEhBVkVfQ1BVX0FSTQorCisvKiBEZWZpbmUgaWYgdGhlIGhvc3QgQ1BVIGlzIGEgQ1JJUyAqLworI3VuZGVmIEhBVkVfQ1BVX0NSSVMKKworLyogRGVmaW5lIGlmIHRoZSBob3N0IENQVSBpcyBhIENSSVN2MzIgKi8KKyN1bmRlZiBIQVZFX0NQVV9DUklTVjMyCisKKy8qIERlZmluZSBpZiB0aGUgaG9zdCBDUFUgaXMgYSBIUFBBICovCisjdW5kZWYgSEFWRV9DUFVfSFBQQQorCisvKiBEZWZpbmUgaWYgdGhlIGhvc3QgQ1BVIGlzIGFuIHg4NiAqLworI2RlZmluZSBIQVZFX0NQVV9JMzg2IDEKKworLyogRGVmaW5lIGlmIHRoZSBob3N0IENQVSBpcyBhIElBNjQgKi8KKyN1bmRlZiBIQVZFX0NQVV9JQTY0CisKKy8qIERlZmluZSBpZiB0aGUgaG9zdCBDUFUgaXMgYSBNNjhLICovCisjdW5kZWYgSEFWRV9DUFVfTTY4SworCisvKiBEZWZpbmUgaWYgdGhlIGhvc3QgQ1BVIGlzIGEgTUlQUyAqLworI3VuZGVmIEhBVkVfQ1BVX01JUFMKKworLyogRGVmaW5lIGlmIHRoZSBob3N0IENQVSBpcyBhIFBvd2VyUEMgKi8KKyN1bmRlZiBIQVZFX0NQVV9QUEMKKworLyogRGVmaW5lIGlmIHRoZSBob3N0IENQVSBpcyBhIDY0IGJpdCBQb3dlclBDICovCisjdW5kZWYgSEFWRV9DUFVfUFBDNjQKKworLyogRGVmaW5lIGlmIHRoZSBob3N0IENQVSBpcyBhIFMzOTAgKi8KKyN1bmRlZiBIQVZFX0NQVV9TMzkwCisKKy8qIERlZmluZSBpZiB0aGUgaG9zdCBDUFUgaXMgYSBTUEFSQyAqLworI3VuZGVmIEhBVkVfQ1BVX1NQQVJDCisKKy8qIERlZmluZSBpZiB0aGUgaG9zdCBDUFUgaXMgYSB4ODZfNjQgKi8KKyN1bmRlZiBIQVZFX0NQVV9YODZfNjQKKworLyogRGVmaW5lIGlmIHRoZSBHTlUgZGNnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC4KKyAgICovCisjdW5kZWYgSEFWRV9EQ0dFVFRFWFQKKworLyogRGVmaW5lZCBpZiB3ZSBoYXZlIGRsYWRkciAoKSAqLworI3VuZGVmIEhBVkVfRExBRERSCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGxmY24uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ETEZDTl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmdldHBvcycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRkdFVFBPUyAxCisKKy8qIERlZmluZSB0byAxIGlmIGZzZWVrbyAoYW5kIHByZXN1bWFibHkgZnRlbGxvKSBleGlzdHMgYW5kIGlzIGRlY2xhcmVkLiAqLworI3VuZGVmIEhBVkVfRlNFRUtPCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZnNldHBvcycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRlNFVFBPUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZnRlbGxvJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0ZURUxMTworCisvKiBkZWZpbmVkIGlmIHRoZSBjb21waWxlciBpbXBsZW1lbnRzIF9fZnVuY19fICovCisjdW5kZWYgSEFWRV9GVU5DCisKKy8qIGRlZmluZWQgaWYgdGhlIGNvbXBpbGVyIGltcGxlbWVudHMgX19GVU5DVElPTl9fICovCisjdW5kZWYgSEFWRV9GVU5DVElPTgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHBhZ2VzaXplJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFBBR0VTSVpFCisKKy8qIERlZmluZSBpZiB0aGUgR05VIGdldHRleHQoKSBmdW5jdGlvbiBpcyBhbHJlYWR5IHByZXNlbnQgb3IgcHJlaW5zdGFsbGVkLiAqLworI3VuZGVmIEhBVkVfR0VUVEVYVAorCisvKiBIYXZlIEdNUCBsaWJyYXJ5ICovCisjdW5kZWYgSEFWRV9HTVAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnbXRpbWVfcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HTVRJTUVfUgorCisvKiBIYXZlIEdTTCBsaWJyYXJ5ICovCisjdW5kZWYgSEFWRV9HU0wKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBpY29udigpIGZ1bmN0aW9uIGFuZCBpdCB3b3Jrcy4gKi8KKyN1bmRlZiBIQVZFX0lDT05WCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9JTlRUWVBFU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbnNsJyBsaWJyYXJ5ICgtbG5zbCkuICovCisjdW5kZWYgSEFWRV9MSUJOU0wKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZXNvbHYnIGxpYnJhcnkgKC1scmVzb2x2KS4gKi8KKyN1bmRlZiBIQVZFX0xJQlJFU09MVgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNvY2tldCcgbGlicmFyeSAoLWxzb2NrZXQpLiAqLworI3VuZGVmIEhBVkVfTElCU09DS0VUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbG9jYWx0aW1lX3InIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTE9DQUxUSU1FX1IKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtZW1vcnkuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9NRU1PUllfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIHdvcmtpbmcgYG1tYXAnIHN5c3RlbSBjYWxsLiAqLworI3VuZGVmIEhBVkVfTU1BUAorCisvKiBIYXZlIGEgbW9ub3RvbmljIGNsb2NrICovCisjdW5kZWYgSEFWRV9NT05PVE9OSUNfQ0xPQ0sKKworLyogRGVmaW5lZCBpZiBjb21waWxpbmcgZm9yIE9TWCAqLworI3VuZGVmIEhBVkVfT1NYCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcG9sbCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9QT0xMCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcG9zaXhfbWVtYWxpZ24nIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUE9TSVhfTUVNQUxJR04KKworLyogSGF2ZSBwb3NpeCB0aW1lcnMgKi8KKyN1bmRlZiBIQVZFX1BPU0lYX1RJTUVSUworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBwb2xsJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1BQT0xMCisKKy8qIGRlZmluZWQgaWYgdGhlIGNvbXBpbGVyIGltcGxlbWVudHMgX19QUkVUVFlfRlVOQ1RJT05fXyAqLworI3VuZGVmIEhBVkVfUFJFVFRZX0ZVTkNUSU9OCisKKy8qIERlZmluZWQgaWYgd2UgaGF2ZSBwcmludGYgc3BlY2lmaWVyIGV4dGVuc2lvbnMgYXZhaWxhYmxlICovCisjdW5kZWYgSEFWRV9QUklOVEZfRVhURU5TSU9OCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cHJvY2Vzcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9QUk9DRVNTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBzZWxlY3QnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUFNFTEVDVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHB0aHJlYWQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9QVEhSRUFEX0gKKworLyogRGVmaW5lIGlmIFJEVFNDIGlzIGF2YWlsYWJsZSAqLworI3VuZGVmIEhBVkVfUkRUU0MKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZWdpc3Rlcl9wcmludGZfZnVuY3Rpb24nIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUkVHSVNURVJfUFJJTlRGX0ZVTkNUSU9OCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmVnaXN0ZXJfcHJpbnRmX3NwZWNpZmllcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9SRUdJU1RFUl9QUklOVEZfU1BFQ0lGSUVSCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2lnYWN0aW9uJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NJR0FDVElPTgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NURElOVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW9fZXh0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RESU9fRVhUX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RETElCX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVFJJTkdTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RSSU5HX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9wYXJhbS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19QQVJBTV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3ByY3RsLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1BSQ1RMX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc29ja2V0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWVzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1RJTUVTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19USU1FX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy91dHNuYW1lLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1VUU05BTUVfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy93YWl0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1dBSVRfSAorCisvKiBIYXZlIHRtX2dtdG9mZiBmaWVsZCBpbiBzdHJ1Y3QgdG0gKi8KKyN1bmRlZiBIQVZFX1RNX0dNVE9GRgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVjb250ZXh0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfVUNPTlRFWFRfSAorCisvKiBIYXZlIF9fdWludDEyOF90IHR5cGUgKi8KKyN1bmRlZiBIQVZFX1VJTlQxMjhfVAorCisvKiBkZWZpbmVkIGlmIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzIHdvcmtzIGNvcnJlY3RseSAqLworI3VuZGVmIEhBVkVfVU5BTElHTkVEX0FDQ0VTUworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1VOSVNURF9ICisKKy8qIERlZmluZSBpZiB2YWxncmluZCBzaG91bGQgYmUgdXNlZCAqLworI3VuZGVmIEhBVkVfVkFMR1JJTkQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx2YWxncmluZC92YWxncmluZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1ZBTEdSSU5EX1ZBTEdSSU5EX0gKKworLyogRGVmaW5lZCBpZiBjb21waWxpbmcgZm9yIFdpbmRvd3MgKi8KKyNkZWZpbmUgSEFWRV9XSU4zMiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d2luc29jazIuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfV0lOU09DSzJfSCAxCisKKy8qIHRoZSBob3N0IENQVSAqLworI2RlZmluZSBIT1NUX0NQVSAiaTY4NiIKKworLyogbGlicmFyeSBkaXIgKi8KKyNpZmRlZiBfREVCVUcKKyMgIGRlZmluZSBMSUJESVIgUFJFRklYICJcXGRlYnVnXFxsaWIiCisjZWxzZQorIyAgZGVmaW5lIExJQkRJUiBQUkVGSVggIlxcbGliIgorI2VuZGlmCisKKy8qIGdldHRleHQgbG9jYWxlIGRpciAqLworI2RlZmluZSBMT0NBTEVESVIgUFJFRklYICJcXHNoYXJlXFxsb2NhbGUiCisKKy8qIERlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSBpbiB3aGljaCBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuCisgICAqLworI3VuZGVmIExUX09CSkRJUgorCisvKiBNZW1vcnkgYWxpZ25tZW50IHRvIHVzZSAqLworI3VuZGVmIE1FTU9SWV9BTElHTk1FTlQKKworLyogTWVtb3J5IGFsaWdubWVudCBieSBtYWxsb2MgZGVmYXVsdCAqLworI2RlZmluZSBNRU1PUllfQUxJR05NRU5UX01BTExPQyAxCisKKy8qIE1lbW9yeSBhbGlnbm1lbnQgYnkgcGFnZXNpemUgKi8KKyN1bmRlZiBNRU1PUllfQUxJR05NRU5UX1BBR0VTSVpFCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSBubyBuYXRpdmUgaW5ldF9hdG9uKCkgZnVuY3Rpb24uICovCisjdW5kZWYgTk9fSU5FVF9BVE9OCisKKy8qIERlZmluZSB0byAxIGlmIHlvdXIgQyBjb21waWxlciBkb2Vzbid0IGFjY2VwdCAtYyBhbmQgLW8gdG9nZXRoZXIuICovCisjdW5kZWYgTk9fTUlOVVNfQ19NSU5VU19PCisKKy8qIE5hbWUgb2YgcGFja2FnZSAqLworI2RlZmluZSBQQUNLQUdFICJnc3RyZWFtZXIiCisKKy8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLworI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9R1N0cmVhbWVyIgorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIFBBQ0tBR0VfTkFNRSAiR1N0cmVhbWVyIgorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICJHU3RyZWFtZXIgMC4xMS4xIgorCisvKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiZ3N0cmVhbWVyIgorCisvKiBEZWZpbmUgdG8gdGhlIGhvbWUgcGFnZSBmb3IgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfVVJMCisKKy8qIERlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiMC4xMS4xIgorCisvKiBkaXJlY3Rvcnkgd2hlcmUgcGx1Z2lucyBhcmUgbG9jYXRlZCAqLworI2lmZGVmIF9ERUJVRworIyAgZGVmaW5lIFBMVUdJTkRJUiBQUkVGSVggIlxcZGVidWdcXGxpYlxcZ3N0cmVhbWVyLTAuMTEiCisjZWxzZQorIyAgZGVmaW5lIFBMVUdJTkRJUiBQUkVGSVggIlxcbGliXFxnc3RyZWFtZXItMC4xMSIKKyNlbmRpZgorCisvKiBUaGUgc2l6ZSBvZiBgY2hhcicsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyN1bmRlZiBTSVpFT0ZfQ0hBUgorCisvKiBUaGUgc2l6ZSBvZiBgaW50JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI3VuZGVmIFNJWkVPRl9JTlQKKworLyogVGhlIHNpemUgb2YgYGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX0xPTkcKKworLyogVGhlIHNpemUgb2YgYHNob3J0JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI3VuZGVmIFNJWkVPRl9TSE9SVAorCisvKiBUaGUgc2l6ZSBvZiBgdm9pZConLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX1ZPSURQCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLworI3VuZGVmIFNURENfSEVBREVSUworCisvKiBEZWZpbmUgaWYgd2Ugc2hvdWxkIHBvaXNvbiBkZWFsbG9jYXRlZCBtZW1vcnkgKi8KKyN1bmRlZiBVU0VfUE9JU09OSU5HCisKKy8qIFZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2UgKi8KKyNkZWZpbmUgVkVSU0lPTiAiMC4xMS4xIgorCisvKiBEZWZpbmUgV09SRFNfQklHRU5ESUFOIHRvIDEgaWYgeW91ciBwcm9jZXNzb3Igc3RvcmVzIHdvcmRzIHdpdGggdGhlIG1vc3QKKyAgIHNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKGxpa2UgTW90b3JvbGEgYW5kIFNQQVJDLCB1bmxpa2UgSW50ZWwpLiAqLworI2lmIGRlZmluZWQgQUNfQVBQTEVfVU5JVkVSU0FMX0JVSUxECisjIGlmIGRlZmluZWQgX19CSUdfRU5ESUFOX18KKyMgIGRlZmluZSBXT1JEU19CSUdFTkRJQU4gMQorIyBlbmRpZgorI2Vsc2UKKyMgaWZuZGVmIFdPUkRTX0JJR0VORElBTgorIyAgdW5kZWYgV09SRFNfQklHRU5ESUFOCisjIGVuZGlmCisjZW5kaWYKKworLyogTnVtYmVyIG9mIGJpdHMgaW4gYSBmaWxlIG9mZnNldCwgb24gaG9zdHMgd2hlcmUgdGhpcyBpcyBzZXR0YWJsZS4gKi8KKyN1bmRlZiBfRklMRV9PRkZTRVRfQklUUworCisvKiBEZWZpbmUgdG8gMSB0byBtYWtlIGZzZWVrbyB2aXNpYmxlIG9uIHNvbWUgaG9zdHMgKGUuZy4gZ2xpYmMgMi4yKS4gKi8KKyN1bmRlZiBfTEFSR0VGSUxFX1NPVVJDRQorCisvKiBEZWZpbmUgZm9yIGxhcmdlIGZpbGVzLCBvbiBBSVgtc3R5bGUgaG9zdHMuICovCisjdW5kZWYgX0xBUkdFX0ZJTEVTCisKKy8qIFdlIG5lZWQgYXQgbGVhc3QgV2luWFAgU1AyIGZvciBfX3N0YXQ2NCAqLworI3VuZGVmIF9fTVNWQ1JUX1ZFUlNJT05fXwpkaWZmIC0tZ2l0IGEvd2luMzIvY29tbW9uL2RpcmVudC5jIGIvd2luMzIvY29tbW9uL2RpcmVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YmU5Y2IKLS0tIC9kZXYvbnVsbAorKysgYi93aW4zMi9jb21tb24vZGlyZW50LmMKQEAgLTAsMCArMSw1NzcgQEAKKy8qCisKKyAqIGRpcmVudC5jCisKKyAqCisKKyAqIERlcml2ZWQgZnJvbSBESVJMSUIuQyBieSBNYXR0IEouIFdlaW5zdGVpbiAKKworICogVGhpcyBub3RlIGFwcGVhcnMgaW4gdGhlIERJUkxJQi5ICisKKyAqIERJUkxJQi5IIGJ5IE0uIEouIFdlaW5zdGVpbiAgIFJlbGVhc2VkIHRvIHB1YmxpYyBkb21haW4gMS1KYW4tODkKKworICoKKworICogVXBkYXRlZCBieSBKZXJlbXkgQmV0dGlzIDxqZXJlbXlAaGtzeXMuY29tPgorCisgKiBTaWduaWZpY2FudGx5IHJldmlzZWQgYW5kIHJld2luZGRpciwgc2Vla2RpciBhbmQgdGVsbGRpciBhZGRlZCBieSBDb2xpbgorCisgKiBQZXRlcnMgPGNvbGluQGZ1LmlzLnNhZ2EtdS5hYy5qcD4KKworICoKKworICogUmVzb3VyY2UgbGVha3MgZml4ZWQgYnkgPHN0ZXZlLmxob21tZUBmcmVlLmZyPgorCisgKgorCisgKiAgICAgIAorCisgKiAkUmV2aXNpb24kCisKKyAqICRBdXRob3IkCisKKyAqICREYXRlJAorCisgKgorCisgKi8KKworCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGlvLmg+CisKKyNpbmNsdWRlIDxkaXJlY3QuaD4KKworI2luY2x1ZGUgPGRpcmVudC5oPgorCisjaW5jbHVkZSA8Z3RjaGFyLmg+CisKKyNkZWZpbmUgU1VGRklYICBfVCgiKiIpCisKKyNkZWZpbmUgU0xBU0ggICBfVCgiXFwiKQorCisKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKworCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKworI2luY2x1ZGUgPHdpbmRvd3MuaD4gICAgICAgICAgICAvKiBmb3IgR2V0RmlsZUF0dHJpYnV0ZXMgKi8KKworCisKKy8qCisKKyAqIG9wZW5kaXIKKworICoKKworICogUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBESVIgc3RydWN0dXJlIGFwcHJvcHJpYXRlbHkgZmlsbGVkIGluIHRvIGJlZ2luCisKKyAqIHNlYXJjaGluZyBhIGRpcmVjdG9yeS4KKworICovCisKK19URElSICoKK190b3BlbmRpciAoY29uc3QgX1RDSEFSICogc3pQYXRoKQoreworCisgIF9URElSICpuZDsKKworICB1bnNpZ25lZCBpbnQgcmM7CisKKworICBfVENIQVIgc3pGdWxsUGF0aFtNQVhfUEFUSF07CisKKworICBlcnJubyA9IDA7CisKKworICBpZiAoIXN6UGF0aCkgeworCisgICAgZXJybm8gPSBFRkFVTFQ7CisKKyAgICByZXR1cm4gKF9URElSICopIDA7CisKKyAgfQorCisKKyAgaWYgKHN6UGF0aFswXSA9PSBfVCAoJ1wwJykpIHsKKworICAgIGVycm5vID0gRU5PVERJUjsKKworICAgIHJldHVybiAoX1RESVIgKikgMDsKKworICB9CisKKworCisgIC8qIEF0dGVtcHQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBnaXZlbiBwYXRoIHJlYWxseSBpcyBhIGRpcmVjdG9yeS4gKi8KKworICByYyA9IEdldEZpbGVBdHRyaWJ1dGVzIChzelBhdGgpOworCisgIGlmIChyYyA9PSAodW5zaWduZWQgaW50KSAtMSkgeworCisKKyAgICAvKiBjYWxsIEdldExhc3RFcnJvciBmb3IgbW9yZSBlcnJvciBpbmZvICovCisKKyAgICBlcnJubyA9IEVOT0VOVDsKKworICAgIHJldHVybiAoX1RESVIgKikgMDsKKworICB9CisKKyAgaWYgKCEocmMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpKSB7CisKKworICAgIC8qIEVycm9yLCBlbnRyeSBleGlzdHMgYnV0IG5vdCBhIGRpcmVjdG9yeS4gKi8KKworICAgIGVycm5vID0gRU5PVERJUjsKKworICAgIHJldHVybiAoX1RESVIgKikgMDsKKworICB9CisKKworCisgIC8qIE1ha2UgYW4gYWJzb2x1dGUgcGF0aG5hbWUuICAqLworCisgIF90ZnVsbHBhdGggKHN6RnVsbFBhdGgsIHN6UGF0aCwgTUFYX1BBVEgpOworCisKKworICAvKiBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UgdG8gc3RvcmUgRElSIHN0cnVjdHVyZSBhbmQgdGhlIGNvbXBsZXRlCisKKyAgICogZGlyZWN0b3J5IHBhdGggZ2l2ZW4uICovCisKKyAgbmQgPSAoX1RESVIgKikgbWFsbG9jIChzaXplb2YgKF9URElSKSArIChfdGNzbGVuIChzekZ1bGxQYXRoKSArCisgICAgICAgICAgX3Rjc2xlbiAoU0xBU0gpICsgX3Rjc2xlbiAoU1VGRklYKSArIDEpICogc2l6ZW9mIChfVENIQVIpKTsKKworCisgIGlmICghbmQpIHsKKworCisgICAgLyogRXJyb3IsIG91dCBvZiBtZW1vcnkuICovCisKKyAgICBlcnJubyA9IEVOT01FTTsKKworICAgIHJldHVybiAoX1RESVIgKikgMDsKKworICB9CisKKworCisgIC8qIENyZWF0ZSB0aGUgc2VhcmNoIGV4cHJlc3Npb24uICovCisKKyAgX3Rjc2NweSAobmQtPmRkX25hbWUsIHN6RnVsbFBhdGgpOworCisKKworICAvKiBBZGQgb24gYSBzbGFzaCBpZiB0aGUgcGF0aCBkb2VzIG5vdCBlbmQgd2l0aCBvbmUuICovCisKKyAgaWYgKG5kLT5kZF9uYW1lWzBdICE9IF9UICgnXDAnKQorICAgICAgJiYgbmQtPmRkX25hbWVbX3Rjc2xlbiAobmQtPmRkX25hbWUpIC0gMV0gIT0gX1QgKCcvJykKKyAgICAgICYmIG5kLT5kZF9uYW1lW190Y3NsZW4gKG5kLT5kZF9uYW1lKSAtIDFdICE9IF9UICgnXFwnKSkgeworCisgICAgX3Rjc2NhdCAobmQtPmRkX25hbWUsIFNMQVNIKTsKKworICB9CisKKworCisgIC8qIEFkZCBvbiB0aGUgc2VhcmNoIHBhdHRlcm4gKi8KKworICBfdGNzY2F0IChuZC0+ZGRfbmFtZSwgU1VGRklYKTsKKworCisKKyAgLyogSW5pdGlhbGl6ZSBoYW5kbGUgdG8gLTEgc28gdGhhdCBhIHByZW1hdHVyZSBjbG9zZWRpciBkb2Vzbid0IHRyeQorCisgICAqIHRvIGNhbGwgX2ZpbmRjbG9zZSBvbiBpdC4gKi8KKworICBuZC0+ZGRfaGFuZGxlID0gLTE7CisKKworCisgIC8qIEluaXRpYWxpemUgdGhlIHN0YXR1cy4gKi8KKworICBuZC0+ZGRfc3RhdCA9IDA7CisKKworCisgIC8qIEluaXRpYWxpemUgdGhlIGRpcmVudCBzdHJ1Y3R1cmUuIGlubyBhbmQgcmVjbGVuIGFyZSBpbnZhbGlkIHVuZGVyCisKKyAgICogV2luMzIsIGFuZCBuYW1lIHNpbXBseSBwb2ludHMgYXQgdGhlIGFwcHJvcHJpYXRlIHBhcnQgb2YgdGhlCisKKyAgICogZmluZGZpcnN0X3Qgc3RydWN0dXJlLiAqLworCisgIG5kLT5kZF9kaXIuZF9pbm8gPSAwOworCisgIG5kLT5kZF9kaXIuZF9yZWNsZW4gPSAwOworCisgIG5kLT5kZF9kaXIuZF9uYW1sZW4gPSAwOworCisKKyAgLy8gQWRkZWQgYnkgamNzc3RvbiAwMi8wNC8yMDA0LCBtZW1zZXQgd2FzIHdyaXRpbmcgdG8gYSBiYWQgcG9pbnRlcgorCisgIG5kLT5kZF9kaXIuZF9uYW1lID0gbWFsbG9jIChGSUxFTkFNRV9NQVgpOworCisKKyAgLy8gRW5kIGFkZAorCisgIG1lbXNldCAobmQtPmRkX2Rpci5kX25hbWUsIDAsIEZJTEVOQU1FX01BWCk7CisKKworICByZXR1cm4gbmQ7CisKK30KKworCisKKworCisvKgorCisgKiByZWFkZGlyCisKKyAqCisKKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gYSBkaXJlbnQgc3RydWN0dXJlIGZpbGxlZCB3aXRoIHRoZSBpbmZvcm1hdGlvbiBvbiB0aGUKKworICogbmV4dCBlbnRyeSBpbiB0aGUgZGlyZWN0b3J5LgorCisgKi8KKworc3RydWN0IF90ZGlyZW50ICoKK190cmVhZGRpciAoX1RESVIgKiBkaXJwKQoreworCisgIGVycm5vID0gMDsKKworCisKKyAgLyogQ2hlY2sgZm9yIHZhbGlkIERJUiBzdHJ1Y3QuICovCisKKyAgaWYgKCFkaXJwKSB7CisKKyAgICBlcnJubyA9IEVGQVVMVDsKKworICAgIHJldHVybiAoc3RydWN0IF90ZGlyZW50ICopIDA7CisKKyAgfQorCisKKyAgaWYgKGRpcnAtPmRkX3N0YXQgPCAwKSB7CisKKworICAgIC8qIFdlIGhhdmUgYWxyZWFkeSByZXR1cm5lZCBhbGwgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeQorCisgICAgICogKG9yIHRoZSBzdHJ1Y3R1cmUgaGFzIGFuIGludmFsaWQgZGRfc3RhdCkuICovCisKKyAgICByZXR1cm4gKHN0cnVjdCBfdGRpcmVudCAqKSAwOworCisgIH0gZWxzZSBpZiAoZGlycC0+ZGRfc3RhdCA9PSAwKSB7CisKKworICAgIC8qIFdlIGhhdmVuJ3Qgc3RhcnRlZCB0aGUgc2VhcmNoIHlldC4gKi8KKworICAgIC8qIFN0YXJ0IHRoZSBzZWFyY2ggKi8KKworICAgIGRpcnAtPmRkX2hhbmRsZSA9IChsb25nKSBfdGZpbmRmaXJzdCAoZGlycC0+ZGRfbmFtZSwgJihkaXJwLT5kZF9kdGEpKTsKKworCisgICAgaWYgKGRpcnAtPmRkX2hhbmRsZSA9PSAtMSkgeworCisKKyAgICAgIC8qIFdob29wcyEgU2VlbXMgdGhlcmUgYXJlIG5vIGZpbGVzIGluIHRoYXQKKworICAgICAgICogZGlyZWN0b3J5LiAqLworCisgICAgICBkaXJwLT5kZF9zdGF0ID0gLTE7CisKKyAgICB9IGVsc2UgeworCisgICAgICBkaXJwLT5kZF9zdGF0ID0gMTsKKworICAgIH0KKworICB9IGVsc2UgeworCisKKyAgICAvKiBHZXQgdGhlIG5leHQgc2VhcmNoIGVudHJ5LiAqLworCisgICAgaWYgKF90ZmluZG5leHQgKGRpcnAtPmRkX2hhbmRsZSwgJihkaXJwLT5kZF9kdGEpKSkgeworCisKKyAgICAgIC8qIFdlIGFyZSBvZmYgdGhlIGVuZCBvciBvdGhlcndpc2UgZXJyb3IuICAgICAKKworICAgICAgICAgX2ZpbmRuZXh0IHNldHMgZXJybm8gdG8gRU5PRU5UIGlmIG5vIG1vcmUgZmlsZQorCisgICAgICAgICBVbmRvIHRoaXMuICovCisKKyAgICAgIERXT1JEIHdpbmVyciA9IEdldExhc3RFcnJvciAoKTsKKworCisgICAgICBpZiAod2luZXJyID09IEVSUk9SX05PX01PUkVfRklMRVMpCisKKyAgICAgICAgZXJybm8gPSAwOworCisgICAgICBfZmluZGNsb3NlIChkaXJwLT5kZF9oYW5kbGUpOworCisgICAgICBkaXJwLT5kZF9oYW5kbGUgPSAtMTsKKworICAgICAgZGlycC0+ZGRfc3RhdCA9IC0xOworCisgICAgfSBlbHNlIHsKKworCisgICAgICAvKiBVcGRhdGUgdGhlIHN0YXR1cyB0byBpbmRpY2F0ZSB0aGUgY29ycmVjdAorCisgICAgICAgKiBudW1iZXIuICovCisKKyAgICAgIGRpcnAtPmRkX3N0YXQrKzsKKworICAgIH0KKworICB9CisKKworICBpZiAoZGlycC0+ZGRfc3RhdCA+IDApIHsKKworCisgICAgLyogU3VjY2Vzc2Z1bGx5IGdvdCBhbiBlbnRyeS4gRXZlcnl0aGluZyBhYm91dCB0aGUgZmlsZSBpcworCisgICAgICogYWxyZWFkeSBhcHByb3ByaWF0ZWx5IGZpbGxlZCBpbiBleGNlcHQgdGhlIGxlbmd0aCBvZiB0aGUKKworICAgICAqIGZpbGUgbmFtZS4gKi8KKworICAgIGRpcnAtPmRkX2Rpci5kX25hbWxlbiA9ICh1bnNpZ25lZCBzaG9ydCkgX3Rjc2xlbiAoZGlycC0+ZGRfZHRhLm5hbWUpOworCisgICAgX3Rjc2NweSAoZGlycC0+ZGRfZGlyLmRfbmFtZSwgZGlycC0+ZGRfZHRhLm5hbWUpOworCisgICAgcmV0dXJuICZkaXJwLT5kZF9kaXI7CisKKyAgfQorCisKKyAgcmV0dXJuIChzdHJ1Y3QgX3RkaXJlbnQgKikgMDsKKworfQorCisKKworCisvKgorCisgKiBjbG9zZWRpcgorCisgKgorCisgKiBGcmVlcyB1cCByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IG9wZW5kaXIuCisKKyAqLworCitpbnQKK190Y2xvc2VkaXIgKF9URElSICogZGlycCkKK3sKKworICBpbnQgcmM7CisKKworCisgIGVycm5vID0gMDsKKworICByYyA9IDA7CisKKworICBpZiAoIWRpcnApIHsKKworICAgIGVycm5vID0gRUZBVUxUOworCisgICAgcmV0dXJuIC0xOworCisgIH0KKworCisgIGlmIChkaXJwLT5kZF9oYW5kbGUgIT0gLTEpIHsKKworICAgIHJjID0gX2ZpbmRjbG9zZSAoZGlycC0+ZGRfaGFuZGxlKTsKKworICB9CisKKworICBpZiAoZGlycC0+ZGRfZGlyLmRfbmFtZSkKKworICAgIGZyZWUgKGRpcnAtPmRkX2Rpci5kX25hbWUpOworCisKKworICAvKiBEZWxldGUgdGhlIGRpciBzdHJ1Y3R1cmUuICovCisKKyAgZnJlZSAoZGlycCk7CisKKworICByZXR1cm4gcmM7CisKK30KKworCisKKworLyoKKworICogcmV3aW5kZGlyCisKKyAqCisKKyAqIFJldHVybiB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkaXJlY3RvcnkgInN0cmVhbSIuIFdlIHNpbXBseSBjYWxsIGZpbmRjbG9zZQorCisgKiBhbmQgdGhlbiByZXNldCB0aGluZ3MgbGlrZSBhbiBvcGVuZGlyLgorCisgKi8KKwordm9pZAorX3RyZXdpbmRkaXIgKF9URElSICogZGlycCkKK3sKKworICBlcnJubyA9IDA7CisKKworICBpZiAoIWRpcnApIHsKKworICAgIGVycm5vID0gRUZBVUxUOworCisgICAgcmV0dXJuOworCisgIH0KKworCisgIGlmIChkaXJwLT5kZF9oYW5kbGUgIT0gLTEpIHsKKworICAgIF9maW5kY2xvc2UgKGRpcnAtPmRkX2hhbmRsZSk7CisKKyAgfQorCisKKyAgZGlycC0+ZGRfaGFuZGxlID0gLTE7CisKKyAgZGlycC0+ZGRfc3RhdCA9IDA7CisKK30KKworCisKKworLyoKKworICogdGVsbGRpcgorCisgKgorCisgKiBSZXR1cm5zIHRoZSAicG9zaXRpb24iIGluIHRoZSAiZGlyZWN0b3J5IHN0cmVhbSIgd2hpY2ggY2FuIGJlIHVzZWQgd2l0aAorCisgKiBzZWVrZGlyIHRvIGdvIGJhY2sgdG8gYW4gb2xkIGVudHJ5LiBXZSBzaW1wbHkgcmV0dXJuIHRoZSB2YWx1ZSBpbiBzdGF0LgorCisgKi8KKworbG9uZworX3R0ZWxsZGlyIChfVERJUiAqIGRpcnApCit7CisKKyAgZXJybm8gPSAwOworCisKKyAgaWYgKCFkaXJwKSB7CisKKyAgICBlcnJubyA9IEVGQVVMVDsKKworICAgIHJldHVybiAtMTsKKworICB9CisKKyAgcmV0dXJuIGRpcnAtPmRkX3N0YXQ7CisKK30KKworCisKKworLyoKKworICogc2Vla2RpcgorCisgKgorCisgKiBTZWVrIHRvIGFuIGVudHJ5IHByZXZpb3VzbHkgcmV0dXJuZWQgYnkgdGVsbGRpci4gV2UgcmV3aW5kIHRoZSBkaXJlY3RvcnkKKworICogYW5kIGNhbGwgcmVhZGRpciByZXBlYXRlZGx5IHVudGlsIGVpdGhlciBkZF9zdGF0IGlzIHRoZSBwb3NpdGlvbiBudW1iZXIKKworICogb3IgLTEgKG9mZiB0aGUgZW5kKS4gVGhpcyBpcyBub3QgcGVyZmVjdCwgaW4gdGhhdCB0aGUgZGlyZWN0b3J5IG1heQorCisgKiBoYXZlIGNoYW5nZWQgd2hpbGUgd2Ugd2VyZW4ndCBsb29raW5nLiBCdXQgdGhhdCBpcyBwcm9iYWJseSB0aGUgY2FzZSB3aXRoCisKKyAqIGFueSBzdWNoIHN5c3RlbS4KKworICovCisKK3ZvaWQKK190c2Vla2RpciAoX1RESVIgKiBkaXJwLCBsb25nIGxQb3MpCit7CisKKyAgZXJybm8gPSAwOworCisKKyAgaWYgKCFkaXJwKSB7CisKKyAgICBlcnJubyA9IEVGQVVMVDsKKworICAgIHJldHVybjsKKworICB9CisKKworICBpZiAobFBvcyA8IC0xKSB7CisKKworICAgIC8qIFNlZWtpbmcgdG8gYW4gaW52YWxpZCBwb3NpdGlvbi4gKi8KKworICAgIGVycm5vID0gRUlOVkFMOworCisgICAgcmV0dXJuOworCisgIH0gZWxzZSBpZiAobFBvcyA9PSAtMSkgeworCisKKyAgICAvKiBTZWVrIHBhc3QgZW5kLiAqLworCisgICAgaWYgKGRpcnAtPmRkX2hhbmRsZSAhPSAtMSkgeworCisgICAgICBfZmluZGNsb3NlIChkaXJwLT5kZF9oYW5kbGUpOworCisgICAgfQorCisgICAgZGlycC0+ZGRfaGFuZGxlID0gLTE7CisKKyAgICBkaXJwLT5kZF9zdGF0ID0gLTE7CisKKyAgfSBlbHNlIHsKKworCisgICAgLyogUmV3aW5kIGFuZCByZWFkIGZvcndhcmQgdG8gdGhlIGFwcHJvcHJpYXRlIGluZGV4LiAqLworCisgICAgX3RyZXdpbmRkaXIgKGRpcnApOworCisKKyAgICB3aGlsZSAoKGRpcnAtPmRkX3N0YXQgPCBsUG9zKSAmJiBfdHJlYWRkaXIgKGRpcnApKTsKKworICB9CisKK30KZGlmZiAtLWdpdCBhL3dpbjMyL2NvbW1vbi9kaXJlbnQuaCBiL3dpbjMyL2NvbW1vbi9kaXJlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGYyMzA3Ci0tLSAvZGV2L251bGwKKysrIGIvd2luMzIvY29tbW9uL2RpcmVudC5oCkBAIC0wLDAgKzEsMjk0IEBACisvKgorCisgKiBESVJFTlQuSCAoZm9ybWVybHkgRElSTElCLkgpCisKKyAqCisKKyAqIGJ5IE0uIEouIFdlaW5zdGVpbiAgIFJlbGVhc2VkIHRvIHB1YmxpYyBkb21haW4gMS1KYW4tODkKKworICoKKworICogQmVjYXVzZSBJIGhhdmUgaGVhcmQgdGhhdCB0aGlzIGZlYXR1cmUgKG9wZW5kaXIsIHJlYWRkaXIsIGNsb3NlZGlyKQorCisgKiBpdCBzbyB1c2VmdWwgZm9yIHByb2dyYW1tZXJzIGNvbWluZyBmcm9tIFVOSVggb3IgYXR0ZW1wdGluZyB0byBwb3J0CisKKyAqIFVOSVggY29kZSwgYW5kIGJlY2F1c2UgaXQgaXMgcmVhc29uYWJseSBsaWdodCB3ZWlnaHQsIEkgaGF2ZSBpbmNsdWRlZAorCisgKiBpdCBpbiB0aGUgTWluZ3czMiBwYWNrYWdlLiBJIGhhdmUgYWxzbyBhZGRlZCBhbiBpbXBsZW1lbnRhdGlvbiBvZgorCisgKiByZXdpbmRkaXIsIHNlZWtkaXIgYW5kIHRlbGxkaXIuCisKKyAqICAgLSBDb2xpbiBQZXRlcnMgPGNvbGluQGJpcmQuZnUuaXMuc2FnYS11LmFjLmpwPgorCisgKgorCisgKiAgVGhpcyBjb2RlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXMgd2lsbCBiZSB1c2VmdWwgYnV0CisKKyAqICBXSVRIT1VUIEFOWSBXQVJSQU5UWS4gQUxMIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRCBBUkUgSEVSRUJZCisKKyAqICBESVNDTEFJTUVELiBUaGlzIGluY2x1ZGVkcyBidXQgaXMgbm90IGxpbWl0ZWQgdG8gd2FycmFudGllcyBvZgorCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCisgKgorCisgKiAkUmV2aXNpb24kCisKKyAqICRBdXRob3IkCisKKyAqICREYXRlJAorCisgKgorCisgKi8KKworCisKKyNpZm5kZWYJX19TVFJJQ1RfQU5TSV9fCisKKworCisjaWZuZGVmIF9ESVJFTlRfSF8KKworI2RlZmluZSBfRElSRU5UX0hfCisKKworCisvKiBBbGwgdGhlIGhlYWRlcnMgaW5jbHVkZSB0aGlzIGZpbGUuICovCisKKy8qI2luY2x1ZGUgPF9taW5ndy5oPiovCisKKworCisjaW5jbHVkZSA8aW8uaD4KKworCisKKyNpZm5kZWYgUkNfSU5WT0tFRAorCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCisKK2V4dGVybiAiQyIgeworCisjZW5kaWYKKworCisKK3N0cnVjdCBkaXJlbnQKKworeworCisJbG9uZwkJZF9pbm87CQkvKiBBbHdheXMgemVyby4gKi8KKworCXVuc2lnbmVkIHNob3J0CWRfcmVjbGVuOwkvKiBBbHdheXMgemVyby4gKi8KKworCXVuc2lnbmVkIHNob3J0CWRfbmFtbGVuOwkvKiBMZW5ndGggb2YgbmFtZSBpbiBkX25hbWUuICovCisKKwljaGFyKgkJZF9uYW1lOwkJLyogRmlsZSBuYW1lLiAqLworCisJLyogTk9URTogVGhlIG5hbWUgaW4gdGhlIGRpcmVudCBzdHJ1Y3R1cmUgcG9pbnRzIHRvIHRoZSBuYW1lIGluIHRoZQorCisJICogICAgICAgZmluZGRhdGFfdCBzdHJ1Y3R1cmUgaW4gdGhlIERJUi4gKi8KKworfTsKKworCisKKy8qCisKKyAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUuIEdvb2QgcHJvZ3JhbW1lcnMgd2lsbCBub3QgdXNlIGl0CisKKyAqIGV4Y2VwdCBhcyBhbiBhcmd1bWVudCB0byBvbmUgb2YgdGhlIGZ1bmN0aW9ucyBiZWxvdy4KKworICogZGRfc3RhdCBmaWVsZCBpcyBub3cgaW50ICh3YXMgc2hvcnQgaW4gb2xkZXIgdmVyc2lvbnMpLgorCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QKKworeworCisJLyogZGlzayB0cmFuc2ZlciBhcmVhIGZvciB0aGlzIGRpciAqLworCisJc3RydWN0IF9maW5kZGF0YV90CWRkX2R0YTsKKworCisKKwkvKiBkaXJlbnQgc3RydWN0IHRvIHJldHVybiBmcm9tIGRpciAoTk9URTogdGhpcyBtYWtlcyB0aGlzIHRocmVhZAorCisJICogc2FmZSBhcyBsb25nIGFzIG9ubHkgb25lIHRocmVhZCB1c2VzIGEgcGFydGljdWxhciBESVIgc3RydWN0IGF0CisKKwkgKiBhIHRpbWUpICovCisKKwlzdHJ1Y3QgZGlyZW50CQlkZF9kaXI7CisKKworCisJLyogX2ZpbmRuZXh0IGhhbmRsZSAqLworCisJbG9uZwkJCWRkX2hhbmRsZTsKKworCisKKwkvKgorCisgICAgICAgICAqIFN0YXR1cyBvZiBzZWFyY2g6CisKKwkgKiAgIDAgPSBub3Qgc3RhcnRlZCB5ZXQgKG5leHQgZW50cnkgdG8gcmVhZCBpcyBmaXJzdCBlbnRyeSkKKworCSAqICAtMSA9IG9mZiB0aGUgZW5kCisKKwkgKiAgIHBvc2l0aXZlID0gMCBiYXNlZCBpbmRleCBvZiBuZXh0IGVudHJ5CisKKwkgKi8KKworCWludAkJCWRkX3N0YXQ7CisKKworCisJLyogZ2l2ZW4gcGF0aCBmb3IgZGlyIHdpdGggc2VhcmNoIHBhdHRlcm4gKHN0cnVjdCBpcyBleHRlbmRlZCkgKi8KKworCWNoYXIJCQlkZF9uYW1lWzFdOworCit9IERJUjsKKworCisKK0RJUioJCW9wZW5kaXIgKGNvbnN0IGNoYXIqKTsKKworc3RydWN0IGRpcmVudCoJcmVhZGRpciAoRElSKik7CisKK2ludAkJY2xvc2VkaXIgKERJUiopOworCit2b2lkCQlyZXdpbmRkaXIgKERJUiopOworCitsb25nCQl0ZWxsZGlyIChESVIqKTsKKwordm9pZAkJc2Vla2RpciAoRElSKiwgbG9uZyk7CisKKworCisKKworLyogd2lkZSBjaGFyIHZlcnNpb25zICovCisKKworCitzdHJ1Y3QgX3dkaXJlbnQKKworeworCisJbG9uZwkJZF9pbm87CQkvKiBBbHdheXMgemVyby4gKi8KKworCXVuc2lnbmVkIHNob3J0CWRfcmVjbGVuOwkvKiBBbHdheXMgemVyby4gKi8KKworCXVuc2lnbmVkIHNob3J0CWRfbmFtbGVuOwkvKiBMZW5ndGggb2YgbmFtZSBpbiBkX25hbWUuICovCisKKwl3Y2hhcl90KglkX25hbWU7CQkvKiBGaWxlIG5hbWUuICovCisKKwkvKiBOT1RFOiBUaGUgbmFtZSBpbiB0aGUgZGlyZW50IHN0cnVjdHVyZSBwb2ludHMgdG8gdGhlIG5hbWUgaW4gdGhlCSAqICAgICAgIHdmaW5kZGF0YV90IHN0cnVjdHVyZSBpbiB0aGUgX1dESVIuICovCisKK307CisKKworCisvKgorCisgKiBUaGlzIGlzIGFuIGludGVybmFsIGRhdGEgc3RydWN0dXJlLiBHb29kIHByb2dyYW1tZXJzIHdpbGwgbm90IHVzZSBpdAorCisgKiBleGNlcHQgYXMgYW4gYXJndW1lbnQgdG8gb25lIG9mIHRoZSBmdW5jdGlvbnMgYmVsb3cuCisKKyAqLworCit0eXBlZGVmIHN0cnVjdAorCit7CisKKwkvKiBkaXNrIHRyYW5zZmVyIGFyZWEgZm9yIHRoaXMgZGlyICovCisKKwlzdHJ1Y3QgX3dmaW5kZGF0YV90CWRkX2R0YTsKKworCisKKwkvKiBkaXJlbnQgc3RydWN0IHRvIHJldHVybiBmcm9tIGRpciAoTk9URTogdGhpcyBtYWtlcyB0aGlzIHRocmVhZAorCisJICogc2FmZSBhcyBsb25nIGFzIG9ubHkgb25lIHRocmVhZCB1c2VzIGEgcGFydGljdWxhciBESVIgc3RydWN0IGF0CisKKwkgKiBhIHRpbWUpICovCisKKwlzdHJ1Y3QgX3dkaXJlbnQJCWRkX2RpcjsKKworCisKKwkvKiBfZmluZG5leHQgaGFuZGxlICovCisKKwlsb25nCQkJZGRfaGFuZGxlOworCisKKworCS8qCisKKyAgICAgICAgICogU3RhdHVzIG9mIHNlYXJjaDoKKworCSAqICAgMCA9IG5vdCBzdGFydGVkIHlldCAobmV4dCBlbnRyeSB0byByZWFkIGlzIGZpcnN0IGVudHJ5KQorCisJICogIC0xID0gb2ZmIHRoZSBlbmQKKworCSAqICAgcG9zaXRpdmUgPSAwIGJhc2VkIGluZGV4IG9mIG5leHQgZW50cnkKKworCSAqLworCisJaW50CQkJZGRfc3RhdDsKKworCisKKwkvKiBnaXZlbiBwYXRoIGZvciBkaXIgd2l0aCBzZWFyY2ggcGF0dGVybiAoc3RydWN0IGlzIGV4dGVuZGVkKSAqLworCisJd2NoYXJfdAkJCWRkX25hbWVbMV07CisKK30gX1dESVI7CisKKworCisKKworCisKK19XRElSKgkJX3dvcGVuZGlyIChjb25zdCB3Y2hhcl90Kik7CisKK3N0cnVjdCBfd2RpcmVudCogX3dyZWFkZGlyIChfV0RJUiopOworCitpbnQJCV93Y2xvc2VkaXIgKF9XRElSKik7CisKK3ZvaWQJCV93cmV3aW5kZGlyIChfV0RJUiopOworCitsb25nCQlfd3RlbGxkaXIgKF9XRElSKik7CisKK3ZvaWQJCV93c2Vla2RpciAoX1dESVIqLCBsb25nKTsKKworCisKKworCisjaWZkZWYJX19jcGx1c3BsdXMKKworfQorCisjZW5kaWYKKworCisKKyNlbmRpZgkvKiBOb3QgUkNfSU5WT0tFRCAqLworCisKKworI2VuZGlmCS8qIE5vdCBfRElSRU5UX0hfICovCisKKworCisjZW5kaWYJLyogTm90IF9fU1RSSUNUX0FOU0lfXyAqLworCisKKwpkaWZmIC0tZ2l0IGEvd2luMzIvY29tbW9uL2dzdGNvbmZpZy5oIGIvd2luMzIvY29tbW9uL2dzdGNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmM2IwMGIKLS0tIC9kZXYvbnVsbAorKysgYi93aW4zMi9jb21tb24vZ3N0Y29uZmlnLmgKQEAgLTAsMCArMSwxNjQgQEAKKy8qIEdTdHJlYW1lcgorICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KKyAqICAgICAgICAgICAgICAgMjAwNCwyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+CisgKgorICogZ3N0Y29uZmlnLmg6IEdTVF9ESVNBQkxFXyogbWFjcm9zIGZvciBidWlsZCBjb25maWd1cmF0aW9uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKy8qKgorICogU0VDVElPTjpnc3Rjb25maWcKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogQnVpbGQgY29uZmlndXJhdGlvbiBvcHRpb25zCisgKgorICogVGhpcyBkZXNjcmliZXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgR1N0cmVhbWVyLiBXaGVuIGJ1aWxkaW5nCisgKiBHU3RyZWFtZXIgdGhlcmUgYXJlIGEgbG90IG9mIHBhcnRzIChrbm93biBpbnRlcm5hbGx5IGFzICJzdWJzeXN0ZW1zIiApIHRoYXQKKyAqIGNhbiBiZSBkaXNhYmxlZCBmb3IgdmFyaW91cyByZWFzb25zLiBUaGUgbW9zdCBjb21tb24gcmVhc29ucyBhcmUgc3BlZWQgYW5kCisgKiBzaXplLCB3aGljaCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBHU3RyZWFtZXIgaXMgZGVzaWduZWQgdG8gcnVuIG9uIGVtYmVkZGVkCisgKiBzeXN0ZW1zLgorICoKKyAqIElmIGEgc3Vic3lzdGVtIGlzIGRpc2FibGVkLCBtb3N0IG9mIHRoaXMgY2hhbmdlcyBhcmUgZG9uZSBpbiBhbiBBUEkKKyAqIGNvbXBhdGlibGUgd2F5LCBzbyB5b3UgZG9uJ3QgbmVlZCB0byBhZGFwdCB5b3VyIGNvZGUgaW4gbW9zdCBjYXNlcy4gSXQgaXMKKyAqIG5ldmVyIGRvbmUgaW4gYW4gQUJJIGNvbXBhdGlibGUgd2F5IHRob3VnaC4gU28gaWYgeW91IHdhbnQgdG8gZGlzYWJsZSBhCisgKiBzdXlic3lzdGVtLCB5b3UgaGF2ZSB0byByZWJ1aWxkIGFsbCBwcm9ncmFtcyBkZXBlbmRpbmcgb24gR1N0cmVhbWVyLCB0b28uCisgKgorICogSWYgYSBzdWJzeXN0ZW0gaXMgZGlzYWJsZWQgaW4gR1N0cmVhbWVyLCBhIHZhbHVlIGlzIGRlZmluZWQgaW4KKyAqICZsdDtnc3QvZ3N0LmgmZ3Q7LiBZb3UgY2FuIGNoZWNrIHRoaXMgaWYgeW91IGRvIHN1YnN5c3RlbS1zcGVjaWZpYyBzdHVmZi4KKyAqIDxleGFtcGxlPgorICogPHRpdGxlPkRvaW5nIHN1YnN5c3RlbSBzcGVjaWZpYyB0aGluZ3M8L3RpdGxlPgorICogPHByb2dyYW1saXN0aW5nPgorICogJmhhc2g7aWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICogLy8gZG8gc3R1ZmYgc3BlY2lmaWMgdG8gdGhlIGRlYnVnZ2luZyBzdWJzeXN0ZW0KKyAqICZoYXNoO2VuZGlmIC8vIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICogPC9wcm9ncmFtbGlzdGluZz4KKyAqIDwvZXhhbXBsZT4KKyAqLworCisjaWZuZGVmIF9fR1NUX0NPTkZJR19IX18KKyNkZWZpbmUgX19HU1RfQ09ORklHX0hfXworCisvKioqIHRyaWNrIGd0ay1kb2MgaW50byBiZWxpZXZpbmcgdGhlc2Ugc3ltYm9scyBhcmUgZGVmaW5lZCAoeWVzLCBpdCdzIHVnbHkpICovCisKKyNpZiAwCisjZGVmaW5lIEdTVF9ESVNBQkxFX0xPQURTQVZFX1JFR0lTVFJZIDEKKyNkZWZpbmUgR1NUX0RJU0FCTEVfR1NUX0RFQlVHIDEKKyNkZWZpbmUgR1NUX0RJU0FCTEVfTE9BRFNBVkUgMQorI2RlZmluZSBHU1RfRElTQUJMRV9QQVJTRSAxCisjZGVmaW5lIEdTVF9ESVNBQkxFX1RSQUNFIDEKKyNkZWZpbmUgR1NUX0RJU0FCTEVfQUxMT0NfVFJBQ0UgMQorI2RlZmluZSBHU1RfRElTQUJMRV9SRUdJU1RSWSAxCisjZGVmaW5lIEdTVF9ESVNBQkxFX1BMVUdJTiAxCisjZGVmaW5lIEdTVF9IQVZFX0dMSUJfMl84IDEKKyNlbmRpZgorCisvKioqKiogZGVmYXVsdCBwYWRkaW5nIG9mIHN0cnVjdHVyZXMgKioqKiovCisjZGVmaW5lIEdTVF9QQURESU5HCQk0CisjZGVmaW5lIEdTVF9QQURESU5HX0lOSVQJezB9CisKKy8qKioqKiBwYWRkaW5nIGZvciB2ZXJ5IGV4dGVuc2libGUgYmFzZSBjbGFzc2VzICoqKioqLworI2RlZmluZSBHU1RfUEFERElOR19MQVJHRSAgICAgICAyMAorCisKKy8qKioqKiBkaXNhYmxpbmcgb2Ygc3Vic3lzdGVtcyAqKioqKi8KKworLyogd2V0aGVyIG9yIG5vdCB0aGUgZGVidWdnaW5nIHN1YnN5c3RlbSBpcyBlbmFibGVkICovCisvKiAjdW5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHICovCisKKy8qIERPRVMgTk9UIFdPUksgKi8KKy8qICN1bmRlZiBHU1RfRElTQUJMRV9MT0FEU0FWRSAqLworCisvKiBET0VTIE5PVCBXT1JLICovCisvKiAjdW5kZWYgR1NUX0RJU0FCTEVfUEFSU0UgKi8KKworLyogRE9FUyBOT1QgV09SSyAqLworLyogI3VuZGVmIEdTVF9ESVNBQkxFX1RSQUNFICovCisKKy8qIERPRVMgTk9UIFdPUksgKi8KKy8qICN1bmRlZiBHU1RfRElTQUJMRV9BTExPQ19UUkFDRSAqLworCisvKiBET0VTIE5PVCBXT1JLICovCisvKiAjdW5kZWYgR1NUX0RJU0FCTEVfUkVHSVNUUlkgKi8KKworLyogRE9FUyBOT1QgV09SSyAqLworLyogI3VuZGVmIEdTVF9ESVNBQkxFX1BMVUdJTiAqLworCisvKiBwcmludGYgZXh0ZW5zaW9uIGZvcm1hdCAqLworLyoqCisgKiBHU1RfUFRSX0ZPUk1BVDoKKyAqCisgKiBwcmludGYgZm9ybWF0IHR5cGUgdXNlZCB0byBkZWJ1ZyBHU3RyZWFtZXIgdHlwZXMuCisgKiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgb24gdHlwZXMgd2hvc2Ugc2l6ZSBpcyA+PSBzaXplb2YoZ3BvaW50ZXIpLgorICovCisjZGVmaW5lIEdTVF9QVFJfRk9STUFUICJwIgorCisvKioKKyAqIEdTVF9TRUdNRU5UX0ZPUk1BVDoKKyAqCisgKiBwcmludGYgZm9ybWF0IHR5cGUgdXNlZCB0byBkZWJ1ZyBHU3RyZWFtZXIgc2VnbWVudHMuCisgKiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgb24gcG9pbnRlcnMgdG8gR3N0U2VnbWVudCBzdHJ1Y3R1cmVzLgorICoKKyAqIFNpbmNlOiAwLjEwLjEwCisgKi8KKyNkZWZpbmUgR1NUX1NFR01FTlRfRk9STUFUICJwIgorCisvKiB3aGV0aGVyIG9yIG5vdCBHU1RfUFRSX0ZPUk1BVCBvciBHU1RfU0VHTUVOVF9GT1JNQVQgYXJlIHVzaW5nCisgKiB0aGUgcHJpbnRmIGV4dGVuc2lvbiBtZWNoYW5pc20uIFRoaXMgaXMgZm9yIGludGVybmFsIHVzZSBpbiBvdXIKKyAqIGhlYWRlciBmaWxlcyBzbyB3ZSBrbm93IHdoZXRoZXIgd2UgY2FuIHVzZSBHX0dOVUNfUFJJTlRGIG9yIG5vdCAqLworI3VuZGVmIEdTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OCisKKy8qIHdoZXRoZXIgb3Igbm90IHRoZSBDUFUgc3VwcG9ydHMgdW5hbGlnbmVkIGFjY2VzcyAqLworI2RlZmluZSBHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTIDEKKworLyogd2hldGhlciBvciBub3Qgd2UgYXJlIHVzaW5nIGdsaWIgMi44IGFwaSwgZS5nLiBhdG9taWMgZ29iamVjdAorICAgcmVmY291bnRpbmcgKi8KKyNkZWZpbmUgR1NUX0hBVkVfR0xJQl8yXzggMQorCisvKioqKiogRGVhbCB3aXRoIFhNTCBzdHVmZiwgd2UgaGF2ZSB0byBoYW5kbGUgYm90aCBsb2Fkc2F2ZSBhbmQgcmVnaXN0cnkgKioqKiovCisKKyNpZiAoISAoZGVmaW5lZChHU1RfRElTQUJMRV9MT0FEU0FWRSkgJiYgZGVmaW5lZChHU1RfRElTQUJMRV9SRUdJU1RSWSkpICkKKyMgaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgorI2Vsc2UKKyMgZGVmaW5lIEdTVF9ESVNBQkxFX0xPQURTQVZFX1JFR0lTVFJZCisjZW5kaWYKKworLyoqCisgKiBHU1RfRVhQT1JUOgorICoKKyAqIEV4cG9ydCB0aGUgZ2l2ZW4gdmFyaWFibGUgZnJvbSB0aGUgYnVpbHQgc2hhcmVkIG9iamVjdC4KKyAqCisgKiBPbiBXaW5kb3dzLCB0aGlzIGV4cG9ydHMgdGhlIHZhcmlhYmxlIGZyb20gdGhlIERMTC4KKyAqIE9uIG90aGVyIHBsYXRmb3JtcywgdGhpcyBnZXRzIGRlZmluZWQgdG8gImV4dGVybiIuCisgKi8KKy8qKgorICogR1NUX1BMVUdJTl9FWFBPUlQ6CisgKgorICogRXhwb3J0IHRoZSBwbHVnaW4ncyBkZWZpbml0aW9uLgorICoKKyAqIE9uIFdpbmRvd3MsIHRoaXMgZXhwb3J0cyB0aGUgcGx1Z2luIGRlZmluaXRpb24gZnJvbSB0aGUgRExMLgorICogT24gb3RoZXIgcGxhdGZvcm1zLCB0aGlzIGdldHMgZGVmaW5lZCBhcyBhIG5vLW9wLgorICovCisjaWYgZGVmaW5lZChXSU4zMikgJiYgKCFkZWZpbmVkKF9fTUlOR1czMl9fKSkKKyNkZWZpbmUgR1NUX1BMVUdJTl9FWFBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQpIGV4dGVybgorI2lmZGVmIEdTVF9FWFBPUlRTCisjZGVmaW5lIEdTVF9FWFBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQpIGV4dGVybgorI2Vsc2UKKyNkZWZpbmUgR1NUX0VYUE9SVCBfX2RlY2xzcGVjKGRsbGltcG9ydCkgZXh0ZXJuCisjZW5kaWYKKyNlbHNlIC8qIG5vdCBXSU4zMiAqLworI2RlZmluZSBHU1RfUExVR0lOX0VYUE9SVAorI2RlZmluZSBHU1RfRVhQT1JUIGV4dGVybgorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0dTVF9DT05GSUdfSF9fICovCmRpZmYgLS1naXQgYS93aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmMgYi93aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTExYmI1NgotLS0gL2Rldi9udWxsCisrKyBiL3dpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYwpAQCAtMCwwICsxLDE3MTcgQEAKKworCisKKyNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNkZWZpbmUgQ19FTlVNKHYpICgoZ2ludCkgdikKKyNkZWZpbmUgQ19GTEFHUyh2KSAoKGd1aW50KSB2KQorCisKKy8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RvYmplY3QuaCIgKi8KK0dUeXBlCitnc3Rfb2JqZWN0X2ZsYWdzX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICBzdGF0aWMgY29uc3QgR0ZsYWdzVmFsdWUgdmFsdWVzW10gPSB7CisgICAge0NfRkxBR1MgKEdTVF9PQkpFQ1RfRkxBR19MQVNUKSwgIkdTVF9PQkpFQ1RfRkxBR19MQVNUIiwgImxhc3QifSwKKyAgICB7MCwgTlVMTCwgTlVMTH0KKyAgfTsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKKyAgICBHVHlwZSB0bXAgPSBnX2ZsYWdzX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdE9iamVjdEZsYWdzIiwgdmFsdWVzKTsKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOworICB9CisKKyAgcmV0dXJuIChHVHlwZSkgaWQ7Cit9CisKKy8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RiaW4uaCIgKi8KK0dUeXBlCitnc3RfYmluX2ZsYWdzX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICBzdGF0aWMgY29uc3QgR0ZsYWdzVmFsdWUgdmFsdWVzW10gPSB7CisgICAge0NfRkxBR1MgKEdTVF9CSU5fRkxBR19MQVNUKSwgIkdTVF9CSU5fRkxBR19MQVNUIiwgImxhc3QifSwKKyAgICB7MCwgTlVMTCwgTlVMTH0KKyAgfTsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKKyAgICBHVHlwZSB0bXAgPSBnX2ZsYWdzX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdEJpbkZsYWdzIiwgdmFsdWVzKTsKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOworICB9CisKKyAgcmV0dXJuIChHVHlwZSkgaWQ7Cit9CisKKy8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RidWZmZXIuaCIgKi8KK0dUeXBlCitnc3RfYnVmZmVyX2ZsYWdzX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICBzdGF0aWMgY29uc3QgR0ZsYWdzVmFsdWUgdmFsdWVzW10gPSB7CisgICAge0NfRkxBR1MgKEdTVF9CVUZGRVJfRkxBR19MSVZFKSwgIkdTVF9CVUZGRVJfRkxBR19MSVZFIiwgImxpdmUifSwKKyAgICB7Q19GTEFHUyAoR1NUX0JVRkZFUl9GTEFHX0RFQ09ERV9PTkxZKSwgIkdTVF9CVUZGRVJfRkxBR19ERUNPREVfT05MWSIsCisgICAgICAgICJkZWNvZGUtb25seSJ9LAorICAgIHtDX0ZMQUdTIChHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCksICJHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCIsICJkaXNjb250In0sCisgICAge0NfRkxBR1MgKEdTVF9CVUZGRVJfRkxBR19SRVNZTkMpLCAiR1NUX0JVRkZFUl9GTEFHX1JFU1lOQyIsICJyZXN5bmMifSwKKyAgICB7Q19GTEFHUyAoR1NUX0JVRkZFUl9GTEFHX0NPUlJVUFRFRCksICJHU1RfQlVGRkVSX0ZMQUdfQ09SUlVQVEVEIiwKKyAgICAgICAgImNvcnJ1cHRlZCJ9LAorICAgIHtDX0ZMQUdTIChHU1RfQlVGRkVSX0ZMQUdfTUFSS0VSKSwgIkdTVF9CVUZGRVJfRkxBR19NQVJLRVIiLCAibWFya2VyIn0sCisgICAge0NfRkxBR1MgKEdTVF9CVUZGRVJfRkxBR19IRUFERVIpLCAiR1NUX0JVRkZFUl9GTEFHX0hFQURFUiIsICJoZWFkZXIifSwKKyAgICB7Q19GTEFHUyAoR1NUX0JVRkZFUl9GTEFHX0dBUCksICJHU1RfQlVGRkVSX0ZMQUdfR0FQIiwgImdhcCJ9LAorICAgIHtDX0ZMQUdTIChHU1RfQlVGRkVSX0ZMQUdfRFJPUFBBQkxFKSwgIkdTVF9CVUZGRVJfRkxBR19EUk9QUEFCTEUiLAorICAgICAgICAiZHJvcHBhYmxlIn0sCisgICAge0NfRkxBR1MgKEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKSwgIkdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUIiwKKyAgICAgICAgImRlbHRhLXVuaXQifSwKKyAgICB7Q19GTEFHUyAoR1NUX0JVRkZFUl9GTEFHX0lOX0NBUFMpLCAiR1NUX0JVRkZFUl9GTEFHX0lOX0NBUFMiLCAiaW4tY2FwcyJ9LAorICAgIHtDX0ZMQUdTIChHU1RfQlVGRkVSX0ZMQUdfTEFTVCksICJHU1RfQlVGRkVSX0ZMQUdfTEFTVCIsICJsYXN0In0sCisgICAgezAsIE5VTEwsIE5VTEx9CisgIH07CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7CisgICAgR1R5cGUgdG1wID0gZ19mbGFnc19yZWdpc3Rlcl9zdGF0aWMgKCJHc3RCdWZmZXJGbGFncyIsIHZhbHVlcyk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKKyAgfQorCisgIHJldHVybiAoR1R5cGUpIGlkOworfQorCitHVHlwZQorZ3N0X2J1ZmZlcl9jb3B5X2ZsYWdzX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICBzdGF0aWMgY29uc3QgR0ZsYWdzVmFsdWUgdmFsdWVzW10gPSB7CisgICAge0NfRkxBR1MgKEdTVF9CVUZGRVJfQ09QWV9OT05FKSwgIkdTVF9CVUZGRVJfQ09QWV9OT05FIiwgIm5vbmUifSwKKyAgICB7Q19GTEFHUyAoR1NUX0JVRkZFUl9DT1BZX0ZMQUdTKSwgIkdTVF9CVUZGRVJfQ09QWV9GTEFHUyIsICJmbGFncyJ9LAorICAgIHtDX0ZMQUdTIChHU1RfQlVGRkVSX0NPUFlfVElNRVNUQU1QUyksICJHU1RfQlVGRkVSX0NPUFlfVElNRVNUQU1QUyIsCisgICAgICAgICJ0aW1lc3RhbXBzIn0sCisgICAge0NfRkxBR1MgKEdTVF9CVUZGRVJfQ09QWV9NRU1PUlkpLCAiR1NUX0JVRkZFUl9DT1BZX01FTU9SWSIsICJtZW1vcnkifSwKKyAgICB7Q19GTEFHUyAoR1NUX0JVRkZFUl9DT1BZX01FUkdFKSwgIkdTVF9CVUZGRVJfQ09QWV9NRVJHRSIsICJtZXJnZSJ9LAorICAgIHswLCBOVUxMLCBOVUxMfQorICB9OworCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgeworICAgIEdUeXBlIHRtcCA9IGdfZmxhZ3NfcmVnaXN0ZXJfc3RhdGljICgiR3N0QnVmZmVyQ29weUZsYWdzIiwgdmFsdWVzKTsKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOworICB9CisKKyAgcmV0dXJuIChHVHlwZSkgaWQ7Cit9CisKKy8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RidWZmZXJwb29sLmgiICovCitHVHlwZQorZ3N0X2J1ZmZlcl9wb29sX2ZsYWdzX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICBzdGF0aWMgY29uc3QgR0ZsYWdzVmFsdWUgdmFsdWVzW10gPSB7CisgICAge0NfRkxBR1MgKEdTVF9CVUZGRVJfUE9PTF9GTEFHX05PTkUpLCAiR1NUX0JVRkZFUl9QT09MX0ZMQUdfTk9ORSIsICJub25lIn0sCisgICAge0NfRkxBR1MgKEdTVF9CVUZGRVJfUE9PTF9GTEFHX0tFWV9VTklUKSwgIkdTVF9CVUZGRVJfUE9PTF9GTEFHX0tFWV9VTklUIiwKKyAgICAgICAgImtleS11bml0In0sCisgICAge0NfRkxBR1MgKEdTVF9CVUZGRVJfUE9PTF9GTEFHX0RPTlRXQUlUKSwgIkdTVF9CVUZGRVJfUE9PTF9GTEFHX0RPTlRXQUlUIiwKKyAgICAgICAgImRvbnR3YWl0In0sCisgICAge0NfRkxBR1MgKEdTVF9CVUZGRVJfUE9PTF9GTEFHX0RJU0NPTlQpLCAiR1NUX0JVRkZFUl9QT09MX0ZMQUdfRElTQ09OVCIsCisgICAgICAgICJkaXNjb250In0sCisgICAge0NfRkxBR1MgKEdTVF9CVUZGRVJfUE9PTF9GTEFHX0xBU1QpLCAiR1NUX0JVRkZFUl9QT09MX0ZMQUdfTEFTVCIsICJsYXN0In0sCisgICAgezAsIE5VTEwsIE5VTEx9CisgIH07CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7CisgICAgR1R5cGUgdG1wID0gZ19mbGFnc19yZWdpc3Rlcl9zdGF0aWMgKCJHc3RCdWZmZXJQb29sRmxhZ3MiLCB2YWx1ZXMpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7CisgIH0KKworICByZXR1cm4gKEdUeXBlKSBpZDsKK30KKworLyogZW51bWVyYXRpb25zIGZyb20gImdzdGJ1cy5oIiAqLworR1R5cGUKK2dzdF9idXNfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBnc2l6ZSBpZCA9IDA7CisgIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19GTEFHUyAoR1NUX0JVU19GTFVTSElORyksICJHU1RfQlVTX0ZMVVNISU5HIiwgImZsdXNoaW5nIn0sCisgICAge0NfRkxBR1MgKEdTVF9CVVNfRkxBR19MQVNUKSwgIkdTVF9CVVNfRkxBR19MQVNUIiwgImZsYWctbGFzdCJ9LAorICAgIHswLCBOVUxMLCBOVUxMfQorICB9OworCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgeworICAgIEdUeXBlIHRtcCA9IGdfZmxhZ3NfcmVnaXN0ZXJfc3RhdGljICgiR3N0QnVzRmxhZ3MiLCB2YWx1ZXMpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7CisgIH0KKworICByZXR1cm4gKEdUeXBlKSBpZDsKK30KKworR1R5cGUKK2dzdF9idXNfc3luY19yZXBseV9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIGdzaXplIGlkID0gMDsKKyAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7CisgICAge0NfRU5VTSAoR1NUX0JVU19EUk9QKSwgIkdTVF9CVVNfRFJPUCIsICJkcm9wIn0sCisgICAge0NfRU5VTSAoR1NUX0JVU19QQVNTKSwgIkdTVF9CVVNfUEFTUyIsICJwYXNzIn0sCisgICAge0NfRU5VTSAoR1NUX0JVU19BU1lOQyksICJHU1RfQlVTX0FTWU5DIiwgImFzeW5jIn0sCisgICAgezAsIE5VTEwsIE5VTEx9CisgIH07CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7CisgICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdEJ1c1N5bmNSZXBseSIsIHZhbHVlcyk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKKyAgfQorCisgIHJldHVybiAoR1R5cGUpIGlkOworfQorCisvKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0Y2Fwcy5oIiAqLworR1R5cGUKK2dzdF9jYXBzX2ZsYWdzX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICBzdGF0aWMgY29uc3QgR0ZsYWdzVmFsdWUgdmFsdWVzW10gPSB7CisgICAge0NfRkxBR1MgKEdTVF9DQVBTX0ZMQUdTX0FOWSksICJHU1RfQ0FQU19GTEFHU19BTlkiLCAiYW55In0sCisgICAgezAsIE5VTEwsIE5VTEx9CisgIH07CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7CisgICAgR1R5cGUgdG1wID0gZ19mbGFnc19yZWdpc3Rlcl9zdGF0aWMgKCJHc3RDYXBzRmxhZ3MiLCB2YWx1ZXMpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7CisgIH0KKworICByZXR1cm4gKEdUeXBlKSBpZDsKK30KKworR1R5cGUKK2dzdF9jYXBzX2ludGVyc2VjdF9tb2RlX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19FTlVNIChHU1RfQ0FQU19JTlRFUlNFQ1RfWklHX1pBRyksICJHU1RfQ0FQU19JTlRFUlNFQ1RfWklHX1pBRyIsCisgICAgICAgICJ6aWctemFnIn0sCisgICAge0NfRU5VTSAoR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKSwgIkdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCIsICJmaXJzdCJ9LAorICAgIHswLCBOVUxMLCBOVUxMfQorICB9OworCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgeworICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RDYXBzSW50ZXJzZWN0TW9kZSIsIHZhbHVlcyk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKKyAgfQorCisgIHJldHVybiAoR1R5cGUpIGlkOworfQorCisvKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0Y2xvY2suaCIgKi8KK0dUeXBlCitnc3RfY2xvY2tfcmV0dXJuX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19FTlVNIChHU1RfQ0xPQ0tfT0spLCAiR1NUX0NMT0NLX09LIiwgIm9rIn0sCisgICAge0NfRU5VTSAoR1NUX0NMT0NLX0VBUkxZKSwgIkdTVF9DTE9DS19FQVJMWSIsICJlYXJseSJ9LAorICAgIHtDX0VOVU0gKEdTVF9DTE9DS19VTlNDSEVEVUxFRCksICJHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQiLCAidW5zY2hlZHVsZWQifSwKKyAgICB7Q19FTlVNIChHU1RfQ0xPQ0tfQlVTWSksICJHU1RfQ0xPQ0tfQlVTWSIsICJidXN5In0sCisgICAge0NfRU5VTSAoR1NUX0NMT0NLX0JBRFRJTUUpLCAiR1NUX0NMT0NLX0JBRFRJTUUiLCAiYmFkdGltZSJ9LAorICAgIHtDX0VOVU0gKEdTVF9DTE9DS19FUlJPUiksICJHU1RfQ0xPQ0tfRVJST1IiLCAiZXJyb3IifSwKKyAgICB7Q19FTlVNIChHU1RfQ0xPQ0tfVU5TVVBQT1JURUQpLCAiR1NUX0NMT0NLX1VOU1VQUE9SVEVEIiwgInVuc3VwcG9ydGVkIn0sCisgICAge0NfRU5VTSAoR1NUX0NMT0NLX0RPTkUpLCAiR1NUX0NMT0NLX0RPTkUiLCAiZG9uZSJ9LAorICAgIHswLCBOVUxMLCBOVUxMfQorICB9OworCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgeworICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RDbG9ja1JldHVybiIsIHZhbHVlcyk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKKyAgfQorCisgIHJldHVybiAoR1R5cGUpIGlkOworfQorCitHVHlwZQorZ3N0X2Nsb2NrX2VudHJ5X3R5cGVfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBnc2l6ZSBpZCA9IDA7CisgIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0geworICAgIHtDX0VOVU0gKEdTVF9DTE9DS19FTlRSWV9TSU5HTEUpLCAiR1NUX0NMT0NLX0VOVFJZX1NJTkdMRSIsICJzaW5nbGUifSwKKyAgICB7Q19FTlVNIChHU1RfQ0xPQ0tfRU5UUllfUEVSSU9ESUMpLCAiR1NUX0NMT0NLX0VOVFJZX1BFUklPRElDIiwgInBlcmlvZGljIn0sCisgICAgezAsIE5VTEwsIE5VTEx9CisgIH07CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7CisgICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdENsb2NrRW50cnlUeXBlIiwgdmFsdWVzKTsKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOworICB9CisKKyAgcmV0dXJuIChHVHlwZSkgaWQ7Cit9CisKK0dUeXBlCitnc3RfY2xvY2tfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBnc2l6ZSBpZCA9IDA7CisgIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19GTEFHUyAoR1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1NJTkdMRV9TWU5DKSwKKyAgICAgICAgIkdTVF9DTE9DS19GTEFHX0NBTl9ET19TSU5HTEVfU1lOQyIsICJjYW4tZG8tc2luZ2xlLXN5bmMifSwKKyAgICB7Q19GTEFHUyAoR1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1NJTkdMRV9BU1lOQyksCisgICAgICAgICJHU1RfQ0xPQ0tfRkxBR19DQU5fRE9fU0lOR0xFX0FTWU5DIiwgImNhbi1kby1zaW5nbGUtYXN5bmMifSwKKyAgICB7Q19GTEFHUyAoR1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1BFUklPRElDX1NZTkMpLAorICAgICAgICAiR1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1BFUklPRElDX1NZTkMiLCAiY2FuLWRvLXBlcmlvZGljLXN5bmMifSwKKyAgICB7Q19GTEFHUyAoR1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1BFUklPRElDX0FTWU5DKSwKKyAgICAgICAgIkdTVF9DTE9DS19GTEFHX0NBTl9ET19QRVJJT0RJQ19BU1lOQyIsICJjYW4tZG8tcGVyaW9kaWMtYXN5bmMifSwKKyAgICB7Q19GTEFHUyAoR1NUX0NMT0NLX0ZMQUdfQ0FOX1NFVF9SRVNPTFVUSU9OKSwKKyAgICAgICAgIkdTVF9DTE9DS19GTEFHX0NBTl9TRVRfUkVTT0xVVElPTiIsICJjYW4tc2V0LXJlc29sdXRpb24ifSwKKyAgICB7Q19GTEFHUyAoR1NUX0NMT0NLX0ZMQUdfQ0FOX1NFVF9NQVNURVIpLCAiR1NUX0NMT0NLX0ZMQUdfQ0FOX1NFVF9NQVNURVIiLAorICAgICAgICAiY2FuLXNldC1tYXN0ZXIifSwKKyAgICB7Q19GTEFHUyAoR1NUX0NMT0NLX0ZMQUdfTEFTVCksICJHU1RfQ0xPQ0tfRkxBR19MQVNUIiwgImxhc3QifSwKKyAgICB7MCwgTlVMTCwgTlVMTH0KKyAgfTsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKKyAgICBHVHlwZSB0bXAgPSBnX2ZsYWdzX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdENsb2NrRmxhZ3MiLCB2YWx1ZXMpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7CisgIH0KKworICByZXR1cm4gKEdUeXBlKSBpZDsKK30KKworLyogZW51bWVyYXRpb25zIGZyb20gImdzdGRlYnVndXRpbHMuaCIgKi8KK0dUeXBlCitnc3RfZGVidWdfZ3JhcGhfZGV0YWlsc19nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIGdzaXplIGlkID0gMDsKKyAgc3RhdGljIGNvbnN0IEdGbGFnc1ZhbHVlIHZhbHVlc1tdID0geworICAgIHtDX0ZMQUdTIChHU1RfREVCVUdfR1JBUEhfU0hPV19NRURJQV9UWVBFKSwKKyAgICAgICAgIkdTVF9ERUJVR19HUkFQSF9TSE9XX01FRElBX1RZUEUiLCAibWVkaWEtdHlwZSJ9LAorICAgIHtDX0ZMQUdTIChHU1RfREVCVUdfR1JBUEhfU0hPV19DQVBTX0RFVEFJTFMpLAorICAgICAgICAiR1NUX0RFQlVHX0dSQVBIX1NIT1dfQ0FQU19ERVRBSUxTIiwgImNhcHMtZGV0YWlscyJ9LAorICAgIHtDX0ZMQUdTIChHU1RfREVCVUdfR1JBUEhfU0hPV19OT05fREVGQVVMVF9QQVJBTVMpLAorICAgICAgICAiR1NUX0RFQlVHX0dSQVBIX1NIT1dfTk9OX0RFRkFVTFRfUEFSQU1TIiwgIm5vbi1kZWZhdWx0LXBhcmFtcyJ9LAorICAgIHtDX0ZMQUdTIChHU1RfREVCVUdfR1JBUEhfU0hPV19TVEFURVMpLCAiR1NUX0RFQlVHX0dSQVBIX1NIT1dfU1RBVEVTIiwKKyAgICAgICAgInN0YXRlcyJ9LAorICAgIHtDX0ZMQUdTIChHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwpLCAiR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMIiwgImFsbCJ9LAorICAgIHswLCBOVUxMLCBOVUxMfQorICB9OworCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgeworICAgIEdUeXBlIHRtcCA9IGdfZmxhZ3NfcmVnaXN0ZXJfc3RhdGljICgiR3N0RGVidWdHcmFwaERldGFpbHMiLCB2YWx1ZXMpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7CisgIH0KKworICByZXR1cm4gKEdUeXBlKSBpZDsKK30KKworLyogZW51bWVyYXRpb25zIGZyb20gImdzdGVsZW1lbnQuaCIgKi8KK0dUeXBlCitnc3Rfc3RhdGVfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBnc2l6ZSBpZCA9IDA7CisgIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0geworICAgIHtDX0VOVU0gKEdTVF9TVEFURV9WT0lEX1BFTkRJTkcpLCAiR1NUX1NUQVRFX1ZPSURfUEVORElORyIsICJ2b2lkLXBlbmRpbmcifSwKKyAgICB7Q19FTlVNIChHU1RfU1RBVEVfTlVMTCksICJHU1RfU1RBVEVfTlVMTCIsICJudWxsIn0sCisgICAge0NfRU5VTSAoR1NUX1NUQVRFX1JFQURZKSwgIkdTVF9TVEFURV9SRUFEWSIsICJyZWFkeSJ9LAorICAgIHtDX0VOVU0gKEdTVF9TVEFURV9QQVVTRUQpLCAiR1NUX1NUQVRFX1BBVVNFRCIsICJwYXVzZWQifSwKKyAgICB7Q19FTlVNIChHU1RfU1RBVEVfUExBWUlORyksICJHU1RfU1RBVEVfUExBWUlORyIsICJwbGF5aW5nIn0sCisgICAgezAsIE5VTEwsIE5VTEx9CisgIH07CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7CisgICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFN0YXRlIiwgdmFsdWVzKTsKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOworICB9CisKKyAgcmV0dXJuIChHVHlwZSkgaWQ7Cit9CisKK0dUeXBlCitnc3Rfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIGdzaXplIGlkID0gMDsKKyAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7CisgICAge0NfRU5VTSAoR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKSwgIkdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSIsICJmYWlsdXJlIn0sCisgICAge0NfRU5VTSAoR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKSwgIkdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyIsICJzdWNjZXNzIn0sCisgICAge0NfRU5VTSAoR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyksICJHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DIiwgImFzeW5jIn0sCisgICAge0NfRU5VTSAoR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMKSwgIkdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCIsCisgICAgICAgICJuby1wcmVyb2xsIn0sCisgICAgezAsIE5VTEwsIE5VTEx9CisgIH07CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7CisgICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFN0YXRlQ2hhbmdlUmV0dXJuIiwgdmFsdWVzKTsKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOworICB9CisKKyAgcmV0dXJuIChHVHlwZSkgaWQ7Cit9CisKK0dUeXBlCitnc3Rfc3RhdGVfY2hhbmdlX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19FTlVNIChHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFkpLCAiR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZIiwKKyAgICAgICAgIm51bGwtdG8tcmVhZHkifSwKKyAgICB7Q19FTlVNIChHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRCksCisgICAgICAgICJHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRCIsICJyZWFkeS10by1wYXVzZWQifSwKKyAgICB7Q19FTlVNIChHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19QTEFZSU5HKSwKKyAgICAgICAgIkdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1BMQVlJTkciLCAicGF1c2VkLXRvLXBsYXlpbmcifSwKKyAgICB7Q19FTlVNIChHU1RfU1RBVEVfQ0hBTkdFX1BMQVlJTkdfVE9fUEFVU0VEKSwKKyAgICAgICAgIkdTVF9TVEFURV9DSEFOR0VfUExBWUlOR19UT19QQVVTRUQiLCAicGxheWluZy10by1wYXVzZWQifSwKKyAgICB7Q19FTlVNIChHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWSksCisgICAgICAgICJHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWSIsICJwYXVzZWQtdG8tcmVhZHkifSwKKyAgICB7Q19FTlVNIChHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEwpLCAiR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMIiwKKyAgICAgICAgInJlYWR5LXRvLW51bGwifSwKKyAgICB7MCwgTlVMTCwgTlVMTH0KKyAgfTsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKKyAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0U3RhdGVDaGFuZ2UiLCB2YWx1ZXMpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7CisgIH0KKworICByZXR1cm4gKEdUeXBlKSBpZDsKK30KKworR1R5cGUKK2dzdF9lbGVtZW50X2ZsYWdzX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICBzdGF0aWMgY29uc3QgR0ZsYWdzVmFsdWUgdmFsdWVzW10gPSB7CisgICAge0NfRkxBR1MgKEdTVF9FTEVNRU5UX0xPQ0tFRF9TVEFURSksICJHU1RfRUxFTUVOVF9MT0NLRURfU1RBVEUiLAorICAgICAgICAibG9ja2VkLXN0YXRlIn0sCisgICAge0NfRkxBR1MgKEdTVF9FTEVNRU5UX0lTX1NJTkspLCAiR1NUX0VMRU1FTlRfSVNfU0lOSyIsICJpcy1zaW5rIn0sCisgICAge0NfRkxBR1MgKEdTVF9FTEVNRU5UX1VOUEFSRU5USU5HKSwgIkdTVF9FTEVNRU5UX1VOUEFSRU5USU5HIiwKKyAgICAgICAgInVucGFyZW50aW5nIn0sCisgICAge0NfRkxBR1MgKEdTVF9FTEVNRU5UX0lTX1NPVVJDRSksICJHU1RfRUxFTUVOVF9JU19TT1VSQ0UiLCAiaXMtc291cmNlIn0sCisgICAge0NfRkxBR1MgKEdTVF9FTEVNRU5UX0ZMQUdfTEFTVCksICJHU1RfRUxFTUVOVF9GTEFHX0xBU1QiLCAiZmxhZy1sYXN0In0sCisgICAgezAsIE5VTEwsIE5VTEx9CisgIH07CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7CisgICAgR1R5cGUgdG1wID0gZ19mbGFnc19yZWdpc3Rlcl9zdGF0aWMgKCJHc3RFbGVtZW50RmxhZ3MiLCB2YWx1ZXMpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7CisgIH0KKworICByZXR1cm4gKEdUeXBlKSBpZDsKK30KKworLyogZW51bWVyYXRpb25zIGZyb20gImdzdGVycm9yLmgiICovCitHVHlwZQorZ3N0X2NvcmVfZXJyb3JfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBnc2l6ZSBpZCA9IDA7CisgIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0geworICAgIHtDX0VOVU0gKEdTVF9DT1JFX0VSUk9SX0ZBSUxFRCksICJHU1RfQ09SRV9FUlJPUl9GQUlMRUQiLCAiZmFpbGVkIn0sCisgICAge0NfRU5VTSAoR1NUX0NPUkVfRVJST1JfVE9PX0xBWlkpLCAiR1NUX0NPUkVfRVJST1JfVE9PX0xBWlkiLCAidG9vLWxhenkifSwKKyAgICB7Q19FTlVNIChHU1RfQ09SRV9FUlJPUl9OT1RfSU1QTEVNRU5URUQpLCAiR1NUX0NPUkVfRVJST1JfTk9UX0lNUExFTUVOVEVEIiwKKyAgICAgICAgIm5vdC1pbXBsZW1lbnRlZCJ9LAorICAgIHtDX0VOVU0gKEdTVF9DT1JFX0VSUk9SX1NUQVRFX0NIQU5HRSksICJHU1RfQ09SRV9FUlJPUl9TVEFURV9DSEFOR0UiLAorICAgICAgICAic3RhdGUtY2hhbmdlIn0sCisgICAge0NfRU5VTSAoR1NUX0NPUkVfRVJST1JfUEFEKSwgIkdTVF9DT1JFX0VSUk9SX1BBRCIsICJwYWQifSwKKyAgICB7Q19FTlVNIChHU1RfQ09SRV9FUlJPUl9USFJFQUQpLCAiR1NUX0NPUkVfRVJST1JfVEhSRUFEIiwgInRocmVhZCJ9LAorICAgIHtDX0VOVU0gKEdTVF9DT1JFX0VSUk9SX05FR09USUFUSU9OKSwgIkdTVF9DT1JFX0VSUk9SX05FR09USUFUSU9OIiwKKyAgICAgICAgIm5lZ290aWF0aW9uIn0sCisgICAge0NfRU5VTSAoR1NUX0NPUkVfRVJST1JfRVZFTlQpLCAiR1NUX0NPUkVfRVJST1JfRVZFTlQiLCAiZXZlbnQifSwKKyAgICB7Q19FTlVNIChHU1RfQ09SRV9FUlJPUl9TRUVLKSwgIkdTVF9DT1JFX0VSUk9SX1NFRUsiLCAic2VlayJ9LAorICAgIHtDX0VOVU0gKEdTVF9DT1JFX0VSUk9SX0NBUFMpLCAiR1NUX0NPUkVfRVJST1JfQ0FQUyIsICJjYXBzIn0sCisgICAge0NfRU5VTSAoR1NUX0NPUkVfRVJST1JfVEFHKSwgIkdTVF9DT1JFX0VSUk9SX1RBRyIsICJ0YWcifSwKKyAgICB7Q19FTlVNIChHU1RfQ09SRV9FUlJPUl9NSVNTSU5HX1BMVUdJTiksICJHU1RfQ09SRV9FUlJPUl9NSVNTSU5HX1BMVUdJTiIsCisgICAgICAgICJtaXNzaW5nLXBsdWdpbiJ9LAorICAgIHtDX0VOVU0gKEdTVF9DT1JFX0VSUk9SX0NMT0NLKSwgIkdTVF9DT1JFX0VSUk9SX0NMT0NLIiwgImNsb2NrIn0sCisgICAge0NfRU5VTSAoR1NUX0NPUkVfRVJST1JfRElTQUJMRUQpLCAiR1NUX0NPUkVfRVJST1JfRElTQUJMRUQiLCAiZGlzYWJsZWQifSwKKyAgICB7Q19FTlVNIChHU1RfQ09SRV9FUlJPUl9OVU1fRVJST1JTKSwgIkdTVF9DT1JFX0VSUk9SX05VTV9FUlJPUlMiLAorICAgICAgICAibnVtLWVycm9ycyJ9LAorICAgIHswLCBOVUxMLCBOVUxMfQorICB9OworCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgeworICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RDb3JlRXJyb3IiLCB2YWx1ZXMpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7CisgIH0KKworICByZXR1cm4gKEdUeXBlKSBpZDsKK30KKworR1R5cGUKK2dzdF9saWJyYXJ5X2Vycm9yX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19FTlVNIChHU1RfTElCUkFSWV9FUlJPUl9GQUlMRUQpLCAiR1NUX0xJQlJBUllfRVJST1JfRkFJTEVEIiwgImZhaWxlZCJ9LAorICAgIHtDX0VOVU0gKEdTVF9MSUJSQVJZX0VSUk9SX1RPT19MQVpZKSwgIkdTVF9MSUJSQVJZX0VSUk9SX1RPT19MQVpZIiwKKyAgICAgICAgInRvby1sYXp5In0sCisgICAge0NfRU5VTSAoR1NUX0xJQlJBUllfRVJST1JfSU5JVCksICJHU1RfTElCUkFSWV9FUlJPUl9JTklUIiwgImluaXQifSwKKyAgICB7Q19FTlVNIChHU1RfTElCUkFSWV9FUlJPUl9TSFVURE9XTiksICJHU1RfTElCUkFSWV9FUlJPUl9TSFVURE9XTiIsCisgICAgICAgICJzaHV0ZG93biJ9LAorICAgIHtDX0VOVU0gKEdTVF9MSUJSQVJZX0VSUk9SX1NFVFRJTkdTKSwgIkdTVF9MSUJSQVJZX0VSUk9SX1NFVFRJTkdTIiwKKyAgICAgICAgInNldHRpbmdzIn0sCisgICAge0NfRU5VTSAoR1NUX0xJQlJBUllfRVJST1JfRU5DT0RFKSwgIkdTVF9MSUJSQVJZX0VSUk9SX0VOQ09ERSIsICJlbmNvZGUifSwKKyAgICB7Q19FTlVNIChHU1RfTElCUkFSWV9FUlJPUl9OVU1fRVJST1JTKSwgIkdTVF9MSUJSQVJZX0VSUk9SX05VTV9FUlJPUlMiLAorICAgICAgICAibnVtLWVycm9ycyJ9LAorICAgIHswLCBOVUxMLCBOVUxMfQorICB9OworCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgeworICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RMaWJyYXJ5RXJyb3IiLCB2YWx1ZXMpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7CisgIH0KKworICByZXR1cm4gKEdUeXBlKSBpZDsKK30KKworR1R5cGUKK2dzdF9yZXNvdXJjZV9lcnJvcl9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIGdzaXplIGlkID0gMDsKKyAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7CisgICAge0NfRU5VTSAoR1NUX1JFU09VUkNFX0VSUk9SX0ZBSUxFRCksICJHU1RfUkVTT1VSQ0VfRVJST1JfRkFJTEVEIiwgImZhaWxlZCJ9LAorICAgIHtDX0VOVU0gKEdTVF9SRVNPVVJDRV9FUlJPUl9UT09fTEFaWSksICJHU1RfUkVTT1VSQ0VfRVJST1JfVE9PX0xBWlkiLAorICAgICAgICAidG9vLWxhenkifSwKKyAgICB7Q19FTlVNIChHU1RfUkVTT1VSQ0VfRVJST1JfTk9UX0ZPVU5EKSwgIkdTVF9SRVNPVVJDRV9FUlJPUl9OT1RfRk9VTkQiLAorICAgICAgICAibm90LWZvdW5kIn0sCisgICAge0NfRU5VTSAoR1NUX1JFU09VUkNFX0VSUk9SX0JVU1kpLCAiR1NUX1JFU09VUkNFX0VSUk9SX0JVU1kiLCAiYnVzeSJ9LAorICAgIHtDX0VOVU0gKEdTVF9SRVNPVVJDRV9FUlJPUl9PUEVOX1JFQUQpLCAiR1NUX1JFU09VUkNFX0VSUk9SX09QRU5fUkVBRCIsCisgICAgICAgICJvcGVuLXJlYWQifSwKKyAgICB7Q19FTlVNIChHU1RfUkVTT1VSQ0VfRVJST1JfT1BFTl9XUklURSksICJHU1RfUkVTT1VSQ0VfRVJST1JfT1BFTl9XUklURSIsCisgICAgICAgICJvcGVuLXdyaXRlIn0sCisgICAge0NfRU5VTSAoR1NUX1JFU09VUkNFX0VSUk9SX09QRU5fUkVBRF9XUklURSksCisgICAgICAgICJHU1RfUkVTT1VSQ0VfRVJST1JfT1BFTl9SRUFEX1dSSVRFIiwgIm9wZW4tcmVhZC13cml0ZSJ9LAorICAgIHtDX0VOVU0gKEdTVF9SRVNPVVJDRV9FUlJPUl9DTE9TRSksICJHU1RfUkVTT1VSQ0VfRVJST1JfQ0xPU0UiLCAiY2xvc2UifSwKKyAgICB7Q19FTlVNIChHU1RfUkVTT1VSQ0VfRVJST1JfUkVBRCksICJHU1RfUkVTT1VSQ0VfRVJST1JfUkVBRCIsICJyZWFkIn0sCisgICAge0NfRU5VTSAoR1NUX1JFU09VUkNFX0VSUk9SX1dSSVRFKSwgIkdTVF9SRVNPVVJDRV9FUlJPUl9XUklURSIsICJ3cml0ZSJ9LAorICAgIHtDX0VOVU0gKEdTVF9SRVNPVVJDRV9FUlJPUl9TRUVLKSwgIkdTVF9SRVNPVVJDRV9FUlJPUl9TRUVLIiwgInNlZWsifSwKKyAgICB7Q19FTlVNIChHU1RfUkVTT1VSQ0VfRVJST1JfU1lOQyksICJHU1RfUkVTT1VSQ0VfRVJST1JfU1lOQyIsICJzeW5jIn0sCisgICAge0NfRU5VTSAoR1NUX1JFU09VUkNFX0VSUk9SX1NFVFRJTkdTKSwgIkdTVF9SRVNPVVJDRV9FUlJPUl9TRVRUSU5HUyIsCisgICAgICAgICJzZXR0aW5ncyJ9LAorICAgIHtDX0VOVU0gKEdTVF9SRVNPVVJDRV9FUlJPUl9OT19TUEFDRV9MRUZUKSwKKyAgICAgICAgIkdTVF9SRVNPVVJDRV9FUlJPUl9OT19TUEFDRV9MRUZUIiwgIm5vLXNwYWNlLWxlZnQifSwKKyAgICB7Q19FTlVNIChHU1RfUkVTT1VSQ0VfRVJST1JfTlVNX0VSUk9SUyksICJHU1RfUkVTT1VSQ0VfRVJST1JfTlVNX0VSUk9SUyIsCisgICAgICAgICJudW0tZXJyb3JzIn0sCisgICAgezAsIE5VTEwsIE5VTEx9CisgIH07CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7CisgICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFJlc291cmNlRXJyb3IiLCB2YWx1ZXMpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7CisgIH0KKworICByZXR1cm4gKEdUeXBlKSBpZDsKK30KKworR1R5cGUKK2dzdF9zdHJlYW1fZXJyb3JfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBnc2l6ZSBpZCA9IDA7CisgIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0geworICAgIHtDX0VOVU0gKEdTVF9TVFJFQU1fRVJST1JfRkFJTEVEKSwgIkdTVF9TVFJFQU1fRVJST1JfRkFJTEVEIiwgImZhaWxlZCJ9LAorICAgIHtDX0VOVU0gKEdTVF9TVFJFQU1fRVJST1JfVE9PX0xBWlkpLCAiR1NUX1NUUkVBTV9FUlJPUl9UT09fTEFaWSIsCisgICAgICAgICJ0b28tbGF6eSJ9LAorICAgIHtDX0VOVU0gKEdTVF9TVFJFQU1fRVJST1JfTk9UX0lNUExFTUVOVEVEKSwKKyAgICAgICAgIkdTVF9TVFJFQU1fRVJST1JfTk9UX0lNUExFTUVOVEVEIiwgIm5vdC1pbXBsZW1lbnRlZCJ9LAorICAgIHtDX0VOVU0gKEdTVF9TVFJFQU1fRVJST1JfVFlQRV9OT1RfRk9VTkQpLAorICAgICAgICAiR1NUX1NUUkVBTV9FUlJPUl9UWVBFX05PVF9GT1VORCIsICJ0eXBlLW5vdC1mb3VuZCJ9LAorICAgIHtDX0VOVU0gKEdTVF9TVFJFQU1fRVJST1JfV1JPTkdfVFlQRSksICJHU1RfU1RSRUFNX0VSUk9SX1dST05HX1RZUEUiLAorICAgICAgICAid3JvbmctdHlwZSJ9LAorICAgIHtDX0VOVU0gKEdTVF9TVFJFQU1fRVJST1JfQ09ERUNfTk9UX0ZPVU5EKSwKKyAgICAgICAgIkdTVF9TVFJFQU1fRVJST1JfQ09ERUNfTk9UX0ZPVU5EIiwgImNvZGVjLW5vdC1mb3VuZCJ9LAorICAgIHtDX0VOVU0gKEdTVF9TVFJFQU1fRVJST1JfREVDT0RFKSwgIkdTVF9TVFJFQU1fRVJST1JfREVDT0RFIiwgImRlY29kZSJ9LAorICAgIHtDX0VOVU0gKEdTVF9TVFJFQU1fRVJST1JfRU5DT0RFKSwgIkdTVF9TVFJFQU1fRVJST1JfRU5DT0RFIiwgImVuY29kZSJ9LAorICAgIHtDX0VOVU0gKEdTVF9TVFJFQU1fRVJST1JfREVNVVgpLCAiR1NUX1NUUkVBTV9FUlJPUl9ERU1VWCIsICJkZW11eCJ9LAorICAgIHtDX0VOVU0gKEdTVF9TVFJFQU1fRVJST1JfTVVYKSwgIkdTVF9TVFJFQU1fRVJST1JfTVVYIiwgIm11eCJ9LAorICAgIHtDX0VOVU0gKEdTVF9TVFJFQU1fRVJST1JfRk9STUFUKSwgIkdTVF9TVFJFQU1fRVJST1JfRk9STUFUIiwgImZvcm1hdCJ9LAorICAgIHtDX0VOVU0gKEdTVF9TVFJFQU1fRVJST1JfREVDUllQVCksICJHU1RfU1RSRUFNX0VSUk9SX0RFQ1JZUFQiLCAiZGVjcnlwdCJ9LAorICAgIHtDX0VOVU0gKEdTVF9TVFJFQU1fRVJST1JfREVDUllQVF9OT0tFWSksICJHU1RfU1RSRUFNX0VSUk9SX0RFQ1JZUFRfTk9LRVkiLAorICAgICAgICAiZGVjcnlwdC1ub2tleSJ9LAorICAgIHtDX0VOVU0gKEdTVF9TVFJFQU1fRVJST1JfTlVNX0VSUk9SUyksICJHU1RfU1RSRUFNX0VSUk9SX05VTV9FUlJPUlMiLAorICAgICAgICAibnVtLWVycm9ycyJ9LAorICAgIHswLCBOVUxMLCBOVUxMfQorICB9OworCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgeworICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RTdHJlYW1FcnJvciIsIHZhbHVlcyk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKKyAgfQorCisgIHJldHVybiAoR1R5cGUpIGlkOworfQorCisvKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0ZXZlbnQuaCIgKi8KK0dUeXBlCitnc3RfZXZlbnRfdHlwZV9mbGFnc19nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIGdzaXplIGlkID0gMDsKKyAgc3RhdGljIGNvbnN0IEdGbGFnc1ZhbHVlIHZhbHVlc1tdID0geworICAgIHtDX0ZMQUdTIChHU1RfRVZFTlRfVFlQRV9VUFNUUkVBTSksICJHU1RfRVZFTlRfVFlQRV9VUFNUUkVBTSIsICJ1cHN0cmVhbSJ9LAorICAgIHtDX0ZMQUdTIChHU1RfRVZFTlRfVFlQRV9ET1dOU1RSRUFNKSwgIkdTVF9FVkVOVF9UWVBFX0RPV05TVFJFQU0iLAorICAgICAgICAiZG93bnN0cmVhbSJ9LAorICAgIHtDX0ZMQUdTIChHU1RfRVZFTlRfVFlQRV9TRVJJQUxJWkVEKSwgIkdTVF9FVkVOVF9UWVBFX1NFUklBTElaRUQiLAorICAgICAgICAic2VyaWFsaXplZCJ9LAorICAgIHtDX0ZMQUdTIChHU1RfRVZFTlRfVFlQRV9TVElDS1kpLCAiR1NUX0VWRU5UX1RZUEVfU1RJQ0tZIiwgInN0aWNreSJ9LAorICAgIHswLCBOVUxMLCBOVUxMfQorICB9OworCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgeworICAgIEdUeXBlIHRtcCA9IGdfZmxhZ3NfcmVnaXN0ZXJfc3RhdGljICgiR3N0RXZlbnRUeXBlRmxhZ3MiLCB2YWx1ZXMpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7CisgIH0KKworICByZXR1cm4gKEdUeXBlKSBpZDsKK30KKworR1R5cGUKK2dzdF9ldmVudF90eXBlX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19FTlVNIChHU1RfRVZFTlRfVU5LTk9XTiksICJHU1RfRVZFTlRfVU5LTk9XTiIsICJ1bmtub3duIn0sCisgICAge0NfRU5VTSAoR1NUX0VWRU5UX0ZMVVNIX1NUQVJUKSwgIkdTVF9FVkVOVF9GTFVTSF9TVEFSVCIsICJmbHVzaC1zdGFydCJ9LAorICAgIHtDX0VOVU0gKEdTVF9FVkVOVF9GTFVTSF9TVE9QKSwgIkdTVF9FVkVOVF9GTFVTSF9TVE9QIiwgImZsdXNoLXN0b3AifSwKKyAgICB7Q19FTlVNIChHU1RfRVZFTlRfQ0FQUyksICJHU1RfRVZFTlRfQ0FQUyIsICJjYXBzIn0sCisgICAge0NfRU5VTSAoR1NUX0VWRU5UX1NFR01FTlQpLCAiR1NUX0VWRU5UX1NFR01FTlQiLCAic2VnbWVudCJ9LAorICAgIHtDX0VOVU0gKEdTVF9FVkVOVF9UQUcpLCAiR1NUX0VWRU5UX1RBRyIsICJ0YWcifSwKKyAgICB7Q19FTlVNIChHU1RfRVZFTlRfQlVGRkVSU0laRSksICJHU1RfRVZFTlRfQlVGRkVSU0laRSIsICJidWZmZXJzaXplIn0sCisgICAge0NfRU5VTSAoR1NUX0VWRU5UX1NJTktfTUVTU0FHRSksICJHU1RfRVZFTlRfU0lOS19NRVNTQUdFIiwgInNpbmstbWVzc2FnZSJ9LAorICAgIHtDX0VOVU0gKEdTVF9FVkVOVF9FT1MpLCAiR1NUX0VWRU5UX0VPUyIsICJlb3MifSwKKyAgICB7Q19FTlVNIChHU1RfRVZFTlRfUU9TKSwgIkdTVF9FVkVOVF9RT1MiLCAicW9zIn0sCisgICAge0NfRU5VTSAoR1NUX0VWRU5UX1NFRUspLCAiR1NUX0VWRU5UX1NFRUsiLCAic2VlayJ9LAorICAgIHtDX0VOVU0gKEdTVF9FVkVOVF9OQVZJR0FUSU9OKSwgIkdTVF9FVkVOVF9OQVZJR0FUSU9OIiwgIm5hdmlnYXRpb24ifSwKKyAgICB7Q19FTlVNIChHU1RfRVZFTlRfTEFURU5DWSksICJHU1RfRVZFTlRfTEFURU5DWSIsICJsYXRlbmN5In0sCisgICAge0NfRU5VTSAoR1NUX0VWRU5UX1NURVApLCAiR1NUX0VWRU5UX1NURVAiLCAic3RlcCJ9LAorICAgIHtDX0VOVU0gKEdTVF9FVkVOVF9SRUNPTkZJR1VSRSksICJHU1RfRVZFTlRfUkVDT05GSUdVUkUiLCAicmVjb25maWd1cmUifSwKKyAgICB7Q19FTlVNIChHU1RfRVZFTlRfQ1VTVE9NX1VQU1RSRUFNKSwgIkdTVF9FVkVOVF9DVVNUT01fVVBTVFJFQU0iLAorICAgICAgICAiY3VzdG9tLXVwc3RyZWFtIn0sCisgICAge0NfRU5VTSAoR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNKSwgIkdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTSIsCisgICAgICAgICJjdXN0b20tZG93bnN0cmVhbSJ9LAorICAgIHtDX0VOVU0gKEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTV9PT0IpLAorICAgICAgICAiR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX09PQiIsICJjdXN0b20tZG93bnN0cmVhbS1vb2IifSwKKyAgICB7Q19FTlVNIChHU1RfRVZFTlRfQ1VTVE9NX0JPVEgpLCAiR1NUX0VWRU5UX0NVU1RPTV9CT1RIIiwgImN1c3RvbS1ib3RoIn0sCisgICAge0NfRU5VTSAoR1NUX0VWRU5UX0NVU1RPTV9CT1RIX09PQiksICJHU1RfRVZFTlRfQ1VTVE9NX0JPVEhfT09CIiwKKyAgICAgICAgImN1c3RvbS1ib3RoLW9vYiJ9LAorICAgIHswLCBOVUxMLCBOVUxMfQorICB9OworCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgeworICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RFdmVudFR5cGUiLCB2YWx1ZXMpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7CisgIH0KKworICByZXR1cm4gKEdUeXBlKSBpZDsKK30KKworR1R5cGUKK2dzdF9xb3NfdHlwZV9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIGdzaXplIGlkID0gMDsKKyAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7CisgICAge0NfRU5VTSAoR1NUX1FPU19UWVBFX09WRVJGTE9XKSwgIkdTVF9RT1NfVFlQRV9PVkVSRkxPVyIsICJvdmVyZmxvdyJ9LAorICAgIHtDX0VOVU0gKEdTVF9RT1NfVFlQRV9VTkRFUkZMT1cpLCAiR1NUX1FPU19UWVBFX1VOREVSRkxPVyIsICJ1bmRlcmZsb3cifSwKKyAgICB7Q19FTlVNIChHU1RfUU9TX1RZUEVfVEhST1RUTEUpLCAiR1NUX1FPU19UWVBFX1RIUk9UVExFIiwgInRocm90dGxlIn0sCisgICAgezAsIE5VTEwsIE5VTEx9CisgIH07CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7CisgICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFFPU1R5cGUiLCB2YWx1ZXMpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7CisgIH0KKworICByZXR1cm4gKEdUeXBlKSBpZDsKK30KKworLyogZW51bWVyYXRpb25zIGZyb20gImdzdGZvcm1hdC5oIiAqLworR1R5cGUKK2dzdF9mb3JtYXRfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBnc2l6ZSBpZCA9IDA7CisgIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0geworICAgIHtDX0VOVU0gKEdTVF9GT1JNQVRfVU5ERUZJTkVEKSwgIkdTVF9GT1JNQVRfVU5ERUZJTkVEIiwgInVuZGVmaW5lZCJ9LAorICAgIHtDX0VOVU0gKEdTVF9GT1JNQVRfREVGQVVMVCksICJHU1RfRk9STUFUX0RFRkFVTFQiLCAiZGVmYXVsdCJ9LAorICAgIHtDX0VOVU0gKEdTVF9GT1JNQVRfQllURVMpLCAiR1NUX0ZPUk1BVF9CWVRFUyIsICJieXRlcyJ9LAorICAgIHtDX0VOVU0gKEdTVF9GT1JNQVRfVElNRSksICJHU1RfRk9STUFUX1RJTUUiLCAidGltZSJ9LAorICAgIHtDX0VOVU0gKEdTVF9GT1JNQVRfQlVGRkVSUyksICJHU1RfRk9STUFUX0JVRkZFUlMiLCAiYnVmZmVycyJ9LAorICAgIHtDX0VOVU0gKEdTVF9GT1JNQVRfUEVSQ0VOVCksICJHU1RfRk9STUFUX1BFUkNFTlQiLCAicGVyY2VudCJ9LAorICAgIHswLCBOVUxMLCBOVUxMfQorICB9OworCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgeworICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RGb3JtYXQiLCB2YWx1ZXMpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7CisgIH0KKworICByZXR1cm4gKEdUeXBlKSBpZDsKK30KKworLyogZW51bWVyYXRpb25zIGZyb20gImdzdGluZGV4LmgiICovCitHVHlwZQorZ3N0X2luZGV4X2NlcnRhaW50eV9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIGdzaXplIGlkID0gMDsKKyAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7CisgICAge0NfRU5VTSAoR1NUX0lOREVYX1VOS05PV04pLCAiR1NUX0lOREVYX1VOS05PV04iLCAidW5rbm93biJ9LAorICAgIHtDX0VOVU0gKEdTVF9JTkRFWF9DRVJUQUlOKSwgIkdTVF9JTkRFWF9DRVJUQUlOIiwgImNlcnRhaW4ifSwKKyAgICB7Q19FTlVNIChHU1RfSU5ERVhfRlVaWlkpLCAiR1NUX0lOREVYX0ZVWlpZIiwgImZ1enp5In0sCisgICAgezAsIE5VTEwsIE5VTEx9CisgIH07CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7CisgICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdEluZGV4Q2VydGFpbnR5IiwgdmFsdWVzKTsKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOworICB9CisKKyAgcmV0dXJuIChHVHlwZSkgaWQ7Cit9CisKK0dUeXBlCitnc3RfaW5kZXhfZW50cnlfdHlwZV9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIGdzaXplIGlkID0gMDsKKyAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7CisgICAge0NfRU5VTSAoR1NUX0lOREVYX0VOVFJZX0lEKSwgIkdTVF9JTkRFWF9FTlRSWV9JRCIsICJpZCJ9LAorICAgIHtDX0VOVU0gKEdTVF9JTkRFWF9FTlRSWV9BU1NPQ0lBVElPTiksICJHU1RfSU5ERVhfRU5UUllfQVNTT0NJQVRJT04iLAorICAgICAgICAiYXNzb2NpYXRpb24ifSwKKyAgICB7Q19FTlVNIChHU1RfSU5ERVhfRU5UUllfT0JKRUNUKSwgIkdTVF9JTkRFWF9FTlRSWV9PQkpFQ1QiLCAib2JqZWN0In0sCisgICAge0NfRU5VTSAoR1NUX0lOREVYX0VOVFJZX0ZPUk1BVCksICJHU1RfSU5ERVhfRU5UUllfRk9STUFUIiwgImZvcm1hdCJ9LAorICAgIHswLCBOVUxMLCBOVUxMfQorICB9OworCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgeworICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RJbmRleEVudHJ5VHlwZSIsIHZhbHVlcyk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKKyAgfQorCisgIHJldHVybiAoR1R5cGUpIGlkOworfQorCitHVHlwZQorZ3N0X2luZGV4X2xvb2t1cF9tZXRob2RfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBnc2l6ZSBpZCA9IDA7CisgIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0geworICAgIHtDX0VOVU0gKEdTVF9JTkRFWF9MT09LVVBfRVhBQ1QpLCAiR1NUX0lOREVYX0xPT0tVUF9FWEFDVCIsICJleGFjdCJ9LAorICAgIHtDX0VOVU0gKEdTVF9JTkRFWF9MT09LVVBfQkVGT1JFKSwgIkdTVF9JTkRFWF9MT09LVVBfQkVGT1JFIiwgImJlZm9yZSJ9LAorICAgIHtDX0VOVU0gKEdTVF9JTkRFWF9MT09LVVBfQUZURVIpLCAiR1NUX0lOREVYX0xPT0tVUF9BRlRFUiIsICJhZnRlciJ9LAorICAgIHswLCBOVUxMLCBOVUxMfQorICB9OworCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgeworICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RJbmRleExvb2t1cE1ldGhvZCIsIHZhbHVlcyk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKKyAgfQorCisgIHJldHVybiAoR1R5cGUpIGlkOworfQorCitHVHlwZQorZ3N0X2Fzc29jX2ZsYWdzX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICBzdGF0aWMgY29uc3QgR0ZsYWdzVmFsdWUgdmFsdWVzW10gPSB7CisgICAge0NfRkxBR1MgKEdTVF9BU1NPQ0lBVElPTl9GTEFHX05PTkUpLCAiR1NUX0FTU09DSUFUSU9OX0ZMQUdfTk9ORSIsICJub25lIn0sCisgICAge0NfRkxBR1MgKEdTVF9BU1NPQ0lBVElPTl9GTEFHX0tFWV9VTklUKSwgIkdTVF9BU1NPQ0lBVElPTl9GTEFHX0tFWV9VTklUIiwKKyAgICAgICAgImtleS11bml0In0sCisgICAge0NfRkxBR1MgKEdTVF9BU1NPQ0lBVElPTl9GTEFHX0RFTFRBX1VOSVQpLAorICAgICAgICAiR1NUX0FTU09DSUFUSU9OX0ZMQUdfREVMVEFfVU5JVCIsICJkZWx0YS11bml0In0sCisgICAge0NfRkxBR1MgKEdTVF9BU1NPQ0lBVElPTl9GTEFHX0xBU1QpLCAiR1NUX0FTU09DSUFUSU9OX0ZMQUdfTEFTVCIsICJsYXN0In0sCisgICAgezAsIE5VTEwsIE5VTEx9CisgIH07CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7CisgICAgR1R5cGUgdG1wID0gZ19mbGFnc19yZWdpc3Rlcl9zdGF0aWMgKCJHc3RBc3NvY0ZsYWdzIiwgdmFsdWVzKTsKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOworICB9CisKKyAgcmV0dXJuIChHVHlwZSkgaWQ7Cit9CisKK0dUeXBlCitnc3RfaW5kZXhfcmVzb2x2ZXJfbWV0aG9kX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19FTlVNIChHU1RfSU5ERVhfUkVTT0xWRVJfQ1VTVE9NKSwgIkdTVF9JTkRFWF9SRVNPTFZFUl9DVVNUT00iLCAiY3VzdG9tIn0sCisgICAge0NfRU5VTSAoR1NUX0lOREVYX1JFU09MVkVSX0dUWVBFKSwgIkdTVF9JTkRFWF9SRVNPTFZFUl9HVFlQRSIsICJndHlwZSJ9LAorICAgIHtDX0VOVU0gKEdTVF9JTkRFWF9SRVNPTFZFUl9QQVRIKSwgIkdTVF9JTkRFWF9SRVNPTFZFUl9QQVRIIiwgInBhdGgifSwKKyAgICB7MCwgTlVMTCwgTlVMTH0KKyAgfTsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKKyAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0SW5kZXhSZXNvbHZlck1ldGhvZCIsIHZhbHVlcyk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKKyAgfQorCisgIHJldHVybiAoR1R5cGUpIGlkOworfQorCitHVHlwZQorZ3N0X2luZGV4X2ZsYWdzX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICBzdGF0aWMgY29uc3QgR0ZsYWdzVmFsdWUgdmFsdWVzW10gPSB7CisgICAge0NfRkxBR1MgKEdTVF9JTkRFWF9XUklUQUJMRSksICJHU1RfSU5ERVhfV1JJVEFCTEUiLCAid3JpdGFibGUifSwKKyAgICB7Q19GTEFHUyAoR1NUX0lOREVYX1JFQURBQkxFKSwgIkdTVF9JTkRFWF9SRUFEQUJMRSIsICJyZWFkYWJsZSJ9LAorICAgIHtDX0ZMQUdTIChHU1RfSU5ERVhfRkxBR19MQVNUKSwgIkdTVF9JTkRFWF9GTEFHX0xBU1QiLCAiZmxhZy1sYXN0In0sCisgICAgezAsIE5VTEwsIE5VTEx9CisgIH07CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7CisgICAgR1R5cGUgdG1wID0gZ19mbGFnc19yZWdpc3Rlcl9zdGF0aWMgKCJHc3RJbmRleEZsYWdzIiwgdmFsdWVzKTsKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOworICB9CisKKyAgcmV0dXJuIChHVHlwZSkgaWQ7Cit9CisKKy8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RpbmZvLmgiICovCitHVHlwZQorZ3N0X2RlYnVnX2xldmVsX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19FTlVNIChHU1RfTEVWRUxfTk9ORSksICJHU1RfTEVWRUxfTk9ORSIsICJub25lIn0sCisgICAge0NfRU5VTSAoR1NUX0xFVkVMX0VSUk9SKSwgIkdTVF9MRVZFTF9FUlJPUiIsICJlcnJvciJ9LAorICAgIHtDX0VOVU0gKEdTVF9MRVZFTF9XQVJOSU5HKSwgIkdTVF9MRVZFTF9XQVJOSU5HIiwgIndhcm5pbmcifSwKKyAgICB7Q19FTlVNIChHU1RfTEVWRUxfSU5GTyksICJHU1RfTEVWRUxfSU5GTyIsICJpbmZvIn0sCisgICAge0NfRU5VTSAoR1NUX0xFVkVMX0RFQlVHKSwgIkdTVF9MRVZFTF9ERUJVRyIsICJkZWJ1ZyJ9LAorICAgIHtDX0VOVU0gKEdTVF9MRVZFTF9MT0cpLCAiR1NUX0xFVkVMX0xPRyIsICJsb2cifSwKKyAgICB7Q19FTlVNIChHU1RfTEVWRUxfRklYTUUpLCAiR1NUX0xFVkVMX0ZJWE1FIiwgImZpeG1lIn0sCisgICAge0NfRU5VTSAoR1NUX0xFVkVMX1RSQUNFKSwgIkdTVF9MRVZFTF9UUkFDRSIsICJ0cmFjZSJ9LAorICAgIHtDX0VOVU0gKEdTVF9MRVZFTF9NRU1EVU1QKSwgIkdTVF9MRVZFTF9NRU1EVU1QIiwgIm1lbWR1bXAifSwKKyAgICB7Q19FTlVNIChHU1RfTEVWRUxfQ09VTlQpLCAiR1NUX0xFVkVMX0NPVU5UIiwgImNvdW50In0sCisgICAgezAsIE5VTEwsIE5VTEx9CisgIH07CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7CisgICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdERlYnVnTGV2ZWwiLCB2YWx1ZXMpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7CisgIH0KKworICByZXR1cm4gKEdUeXBlKSBpZDsKK30KKworR1R5cGUKK2dzdF9kZWJ1Z19jb2xvcl9mbGFnc19nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIGdzaXplIGlkID0gMDsKKyAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7CisgICAge0NfRU5VTSAoR1NUX0RFQlVHX0ZHX0JMQUNLKSwgIkdTVF9ERUJVR19GR19CTEFDSyIsICJmZy1ibGFjayJ9LAorICAgIHtDX0VOVU0gKEdTVF9ERUJVR19GR19SRUQpLCAiR1NUX0RFQlVHX0ZHX1JFRCIsICJmZy1yZWQifSwKKyAgICB7Q19FTlVNIChHU1RfREVCVUdfRkdfR1JFRU4pLCAiR1NUX0RFQlVHX0ZHX0dSRUVOIiwgImZnLWdyZWVuIn0sCisgICAge0NfRU5VTSAoR1NUX0RFQlVHX0ZHX1lFTExPVyksICJHU1RfREVCVUdfRkdfWUVMTE9XIiwgImZnLXllbGxvdyJ9LAorICAgIHtDX0VOVU0gKEdTVF9ERUJVR19GR19CTFVFKSwgIkdTVF9ERUJVR19GR19CTFVFIiwgImZnLWJsdWUifSwKKyAgICB7Q19FTlVNIChHU1RfREVCVUdfRkdfTUFHRU5UQSksICJHU1RfREVCVUdfRkdfTUFHRU5UQSIsICJmZy1tYWdlbnRhIn0sCisgICAge0NfRU5VTSAoR1NUX0RFQlVHX0ZHX0NZQU4pLCAiR1NUX0RFQlVHX0ZHX0NZQU4iLCAiZmctY3lhbiJ9LAorICAgIHtDX0VOVU0gKEdTVF9ERUJVR19GR19XSElURSksICJHU1RfREVCVUdfRkdfV0hJVEUiLCAiZmctd2hpdGUifSwKKyAgICB7Q19FTlVNIChHU1RfREVCVUdfQkdfQkxBQ0spLCAiR1NUX0RFQlVHX0JHX0JMQUNLIiwgImJnLWJsYWNrIn0sCisgICAge0NfRU5VTSAoR1NUX0RFQlVHX0JHX1JFRCksICJHU1RfREVCVUdfQkdfUkVEIiwgImJnLXJlZCJ9LAorICAgIHtDX0VOVU0gKEdTVF9ERUJVR19CR19HUkVFTiksICJHU1RfREVCVUdfQkdfR1JFRU4iLCAiYmctZ3JlZW4ifSwKKyAgICB7Q19FTlVNIChHU1RfREVCVUdfQkdfWUVMTE9XKSwgIkdTVF9ERUJVR19CR19ZRUxMT1ciLCAiYmcteWVsbG93In0sCisgICAge0NfRU5VTSAoR1NUX0RFQlVHX0JHX0JMVUUpLCAiR1NUX0RFQlVHX0JHX0JMVUUiLCAiYmctYmx1ZSJ9LAorICAgIHtDX0VOVU0gKEdTVF9ERUJVR19CR19NQUdFTlRBKSwgIkdTVF9ERUJVR19CR19NQUdFTlRBIiwgImJnLW1hZ2VudGEifSwKKyAgICB7Q19FTlVNIChHU1RfREVCVUdfQkdfQ1lBTiksICJHU1RfREVCVUdfQkdfQ1lBTiIsICJiZy1jeWFuIn0sCisgICAge0NfRU5VTSAoR1NUX0RFQlVHX0JHX1dISVRFKSwgIkdTVF9ERUJVR19CR19XSElURSIsICJiZy13aGl0ZSJ9LAorICAgIHtDX0VOVU0gKEdTVF9ERUJVR19CT0xEKSwgIkdTVF9ERUJVR19CT0xEIiwgImJvbGQifSwKKyAgICB7Q19FTlVNIChHU1RfREVCVUdfVU5ERVJMSU5FKSwgIkdTVF9ERUJVR19VTkRFUkxJTkUiLCAidW5kZXJsaW5lIn0sCisgICAgezAsIE5VTEwsIE5VTEx9CisgIH07CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7CisgICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdERlYnVnQ29sb3JGbGFncyIsIHZhbHVlcyk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKKyAgfQorCisgIHJldHVybiAoR1R5cGUpIGlkOworfQorCisvKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0aXRlcmF0b3IuaCIgKi8KK0dUeXBlCitnc3RfaXRlcmF0b3JfcmVzdWx0X2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19FTlVNIChHU1RfSVRFUkFUT1JfRE9ORSksICJHU1RfSVRFUkFUT1JfRE9ORSIsICJkb25lIn0sCisgICAge0NfRU5VTSAoR1NUX0lURVJBVE9SX09LKSwgIkdTVF9JVEVSQVRPUl9PSyIsICJvayJ9LAorICAgIHtDX0VOVU0gKEdTVF9JVEVSQVRPUl9SRVNZTkMpLCAiR1NUX0lURVJBVE9SX1JFU1lOQyIsICJyZXN5bmMifSwKKyAgICB7Q19FTlVNIChHU1RfSVRFUkFUT1JfRVJST1IpLCAiR1NUX0lURVJBVE9SX0VSUk9SIiwgImVycm9yIn0sCisgICAgezAsIE5VTEwsIE5VTEx9CisgIH07CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7CisgICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdEl0ZXJhdG9yUmVzdWx0IiwgdmFsdWVzKTsKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOworICB9CisKKyAgcmV0dXJuIChHVHlwZSkgaWQ7Cit9CisKK0dUeXBlCitnc3RfaXRlcmF0b3JfaXRlbV9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIGdzaXplIGlkID0gMDsKKyAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7CisgICAge0NfRU5VTSAoR1NUX0lURVJBVE9SX0lURU1fU0tJUCksICJHU1RfSVRFUkFUT1JfSVRFTV9TS0lQIiwgInNraXAifSwKKyAgICB7Q19FTlVNIChHU1RfSVRFUkFUT1JfSVRFTV9QQVNTKSwgIkdTVF9JVEVSQVRPUl9JVEVNX1BBU1MiLCAicGFzcyJ9LAorICAgIHtDX0VOVU0gKEdTVF9JVEVSQVRPUl9JVEVNX0VORCksICJHU1RfSVRFUkFUT1JfSVRFTV9FTkQiLCAiZW5kIn0sCisgICAgezAsIE5VTEwsIE5VTEx9CisgIH07CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7CisgICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdEl0ZXJhdG9ySXRlbSIsIHZhbHVlcyk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKKyAgfQorCisgIHJldHVybiAoR1R5cGUpIGlkOworfQorCisvKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0bWVzc2FnZS5oIiAqLworR1R5cGUKK2dzdF9tZXNzYWdlX3R5cGVfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBnc2l6ZSBpZCA9IDA7CisgIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfVU5LTk9XTiksICJHU1RfTUVTU0FHRV9VTktOT1dOIiwgInVua25vd24ifSwKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfRU9TKSwgIkdTVF9NRVNTQUdFX0VPUyIsICJlb3MifSwKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfRVJST1IpLCAiR1NUX01FU1NBR0VfRVJST1IiLCAiZXJyb3IifSwKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfV0FSTklORyksICJHU1RfTUVTU0FHRV9XQVJOSU5HIiwgIndhcm5pbmcifSwKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfSU5GTyksICJHU1RfTUVTU0FHRV9JTkZPIiwgImluZm8ifSwKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfVEFHKSwgIkdTVF9NRVNTQUdFX1RBRyIsICJ0YWcifSwKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfQlVGRkVSSU5HKSwgIkdTVF9NRVNTQUdFX0JVRkZFUklORyIsICJidWZmZXJpbmcifSwKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCksICJHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEIiwKKyAgICAgICAgInN0YXRlLWNoYW5nZWQifSwKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfU1RBVEVfRElSVFkpLCAiR1NUX01FU1NBR0VfU1RBVEVfRElSVFkiLAorICAgICAgICAic3RhdGUtZGlydHkifSwKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfU1RFUF9ET05FKSwgIkdTVF9NRVNTQUdFX1NURVBfRE9ORSIsICJzdGVwLWRvbmUifSwKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfQ0xPQ0tfUFJPVklERSksICJHU1RfTUVTU0FHRV9DTE9DS19QUk9WSURFIiwKKyAgICAgICAgImNsb2NrLXByb3ZpZGUifSwKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfQ0xPQ0tfTE9TVCksICJHU1RfTUVTU0FHRV9DTE9DS19MT1NUIiwgImNsb2NrLWxvc3QifSwKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfTkVXX0NMT0NLKSwgIkdTVF9NRVNTQUdFX05FV19DTE9DSyIsICJuZXctY2xvY2sifSwKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfU1RSVUNUVVJFX0NIQU5HRSksICJHU1RfTUVTU0FHRV9TVFJVQ1RVUkVfQ0hBTkdFIiwKKyAgICAgICAgInN0cnVjdHVyZS1jaGFuZ2UifSwKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfU1RSRUFNX1NUQVRVUyksICJHU1RfTUVTU0FHRV9TVFJFQU1fU1RBVFVTIiwKKyAgICAgICAgInN0cmVhbS1zdGF0dXMifSwKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfQVBQTElDQVRJT04pLCAiR1NUX01FU1NBR0VfQVBQTElDQVRJT04iLAorICAgICAgICAiYXBwbGljYXRpb24ifSwKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfRUxFTUVOVCksICJHU1RfTUVTU0FHRV9FTEVNRU5UIiwgImVsZW1lbnQifSwKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfU0VHTUVOVF9TVEFSVCksICJHU1RfTUVTU0FHRV9TRUdNRU5UX1NUQVJUIiwKKyAgICAgICAgInNlZ21lbnQtc3RhcnQifSwKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfU0VHTUVOVF9ET05FKSwgIkdTVF9NRVNTQUdFX1NFR01FTlRfRE9ORSIsCisgICAgICAgICJzZWdtZW50LWRvbmUifSwKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfRFVSQVRJT04pLCAiR1NUX01FU1NBR0VfRFVSQVRJT04iLCAiZHVyYXRpb24ifSwKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfTEFURU5DWSksICJHU1RfTUVTU0FHRV9MQVRFTkNZIiwgImxhdGVuY3kifSwKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfQVNZTkNfU1RBUlQpLCAiR1NUX01FU1NBR0VfQVNZTkNfU1RBUlQiLAorICAgICAgICAiYXN5bmMtc3RhcnQifSwKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfQVNZTkNfRE9ORSksICJHU1RfTUVTU0FHRV9BU1lOQ19ET05FIiwgImFzeW5jLWRvbmUifSwKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfUkVRVUVTVF9TVEFURSksICJHU1RfTUVTU0FHRV9SRVFVRVNUX1NUQVRFIiwKKyAgICAgICAgInJlcXVlc3Qtc3RhdGUifSwKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfU1RFUF9TVEFSVCksICJHU1RfTUVTU0FHRV9TVEVQX1NUQVJUIiwgInN0ZXAtc3RhcnQifSwKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfUU9TKSwgIkdTVF9NRVNTQUdFX1FPUyIsICJxb3MifSwKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfUFJPR1JFU1MpLCAiR1NUX01FU1NBR0VfUFJPR1JFU1MiLCAicHJvZ3Jlc3MifSwKKyAgICB7Q19GTEFHUyAoR1NUX01FU1NBR0VfQU5ZKSwgIkdTVF9NRVNTQUdFX0FOWSIsICJhbnkifSwKKyAgICB7MCwgTlVMTCwgTlVMTH0KKyAgfTsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKKyAgICBHVHlwZSB0bXAgPSBnX2ZsYWdzX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdE1lc3NhZ2VUeXBlIiwgdmFsdWVzKTsKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOworICB9CisKKyAgcmV0dXJuIChHVHlwZSkgaWQ7Cit9CisKK0dUeXBlCitnc3Rfc3RydWN0dXJlX2NoYW5nZV90eXBlX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19FTlVNIChHU1RfU1RSVUNUVVJFX0NIQU5HRV9UWVBFX1BBRF9MSU5LKSwKKyAgICAgICAgIkdTVF9TVFJVQ1RVUkVfQ0hBTkdFX1RZUEVfUEFEX0xJTksiLCAibGluayJ9LAorICAgIHtDX0VOVU0gKEdTVF9TVFJVQ1RVUkVfQ0hBTkdFX1RZUEVfUEFEX1VOTElOSyksCisgICAgICAgICJHU1RfU1RSVUNUVVJFX0NIQU5HRV9UWVBFX1BBRF9VTkxJTksiLCAidW5saW5rIn0sCisgICAgezAsIE5VTEwsIE5VTEx9CisgIH07CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7CisgICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFN0cnVjdHVyZUNoYW5nZVR5cGUiLCB2YWx1ZXMpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7CisgIH0KKworICByZXR1cm4gKEdUeXBlKSBpZDsKK30KKworR1R5cGUKK2dzdF9zdHJlYW1fc3RhdHVzX3R5cGVfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBnc2l6ZSBpZCA9IDA7CisgIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0geworICAgIHtDX0VOVU0gKEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfQ1JFQVRFKSwgIkdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfQ1JFQVRFIiwKKyAgICAgICAgImNyZWF0ZSJ9LAorICAgIHtDX0VOVU0gKEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfRU5URVIpLCAiR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9FTlRFUiIsCisgICAgICAgICJlbnRlciJ9LAorICAgIHtDX0VOVU0gKEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfTEVBVkUpLCAiR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9MRUFWRSIsCisgICAgICAgICJsZWF2ZSJ9LAorICAgIHtDX0VOVU0gKEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfREVTVFJPWSksICJHU1RfU1RSRUFNX1NUQVRVU19UWVBFX0RFU1RST1kiLAorICAgICAgICAiZGVzdHJveSJ9LAorICAgIHtDX0VOVU0gKEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfU1RBUlQpLCAiR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9TVEFSVCIsCisgICAgICAgICJzdGFydCJ9LAorICAgIHtDX0VOVU0gKEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfUEFVU0UpLCAiR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9QQVVTRSIsCisgICAgICAgICJwYXVzZSJ9LAorICAgIHtDX0VOVU0gKEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfU1RPUCksICJHU1RfU1RSRUFNX1NUQVRVU19UWVBFX1NUT1AiLAorICAgICAgICAic3RvcCJ9LAorICAgIHswLCBOVUxMLCBOVUxMfQorICB9OworCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgeworICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RTdHJlYW1TdGF0dXNUeXBlIiwgdmFsdWVzKTsKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOworICB9CisKKyAgcmV0dXJuIChHVHlwZSkgaWQ7Cit9CisKK0dUeXBlCitnc3RfcHJvZ3Jlc3NfdHlwZV9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIGdzaXplIGlkID0gMDsKKyAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7CisgICAge0NfRU5VTSAoR1NUX1BST0dSRVNTX1RZUEVfU1RBUlQpLCAiR1NUX1BST0dSRVNTX1RZUEVfU1RBUlQiLCAic3RhcnQifSwKKyAgICB7Q19FTlVNIChHU1RfUFJPR1JFU1NfVFlQRV9DT05USU5VRSksICJHU1RfUFJPR1JFU1NfVFlQRV9DT05USU5VRSIsCisgICAgICAgICJjb250aW51ZSJ9LAorICAgIHtDX0VOVU0gKEdTVF9QUk9HUkVTU19UWVBFX0NPTVBMRVRFKSwgIkdTVF9QUk9HUkVTU19UWVBFX0NPTVBMRVRFIiwKKyAgICAgICAgImNvbXBsZXRlIn0sCisgICAge0NfRU5VTSAoR1NUX1BST0dSRVNTX1RZUEVfQ0FOQ0VMRUQpLCAiR1NUX1BST0dSRVNTX1RZUEVfQ0FOQ0VMRUQiLAorICAgICAgICAiY2FuY2VsZWQifSwKKyAgICB7Q19FTlVNIChHU1RfUFJPR1JFU1NfVFlQRV9FUlJPUiksICJHU1RfUFJPR1JFU1NfVFlQRV9FUlJPUiIsICJlcnJvciJ9LAorICAgIHswLCBOVUxMLCBOVUxMfQorICB9OworCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgeworICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RQcm9ncmVzc1R5cGUiLCB2YWx1ZXMpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7CisgIH0KKworICByZXR1cm4gKEdUeXBlKSBpZDsKK30KKworLyogZW51bWVyYXRpb25zIGZyb20gImdzdG1lbW9yeS5oIiAqLworR1R5cGUKK2dzdF9tZW1vcnlfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBnc2l6ZSBpZCA9IDA7CisgIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19GTEFHUyAoR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZKSwgIkdTVF9NRU1PUllfRkxBR19SRUFET05MWSIsCisgICAgICAgICJyZWFkb25seSJ9LAorICAgIHtDX0ZMQUdTIChHU1RfTUVNT1JZX0ZMQUdfTk9fU0hBUkUpLCAiR1NUX01FTU9SWV9GTEFHX05PX1NIQVJFIiwKKyAgICAgICAgIm5vLXNoYXJlIn0sCisgICAge0NfRkxBR1MgKEdTVF9NRU1PUllfRkxBR19MQVNUKSwgIkdTVF9NRU1PUllfRkxBR19MQVNUIiwgImxhc3QifSwKKyAgICB7MCwgTlVMTCwgTlVMTH0KKyAgfTsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKKyAgICBHVHlwZSB0bXAgPSBnX2ZsYWdzX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdE1lbW9yeUZsYWdzIiwgdmFsdWVzKTsKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOworICB9CisKKyAgcmV0dXJuIChHVHlwZSkgaWQ7Cit9CisKK0dUeXBlCitnc3RfbWFwX2ZsYWdzX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICBzdGF0aWMgY29uc3QgR0ZsYWdzVmFsdWUgdmFsdWVzW10gPSB7CisgICAge0NfRkxBR1MgKEdTVF9NQVBfUkVBRCksICJHU1RfTUFQX1JFQUQiLCAicmVhZCJ9LAorICAgIHtDX0ZMQUdTIChHU1RfTUFQX1dSSVRFKSwgIkdTVF9NQVBfV1JJVEUiLCAid3JpdGUifSwKKyAgICB7MCwgTlVMTCwgTlVMTH0KKyAgfTsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKKyAgICBHVHlwZSB0bXAgPSBnX2ZsYWdzX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdE1hcEZsYWdzIiwgdmFsdWVzKTsKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOworICB9CisKKyAgcmV0dXJuIChHVHlwZSkgaWQ7Cit9CisKKy8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RtaW5pb2JqZWN0LmgiICovCitHVHlwZQorZ3N0X21pbmlfb2JqZWN0X2ZsYWdzX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICBzdGF0aWMgY29uc3QgR0ZsYWdzVmFsdWUgdmFsdWVzW10gPSB7CisgICAge0NfRkxBR1MgKEdTVF9NSU5JX09CSkVDVF9GTEFHX0xBU1QpLCAiR1NUX01JTklfT0JKRUNUX0ZMQUdfTEFTVCIsICJsYXN0In0sCisgICAgezAsIE5VTEwsIE5VTEx9CisgIH07CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7CisgICAgR1R5cGUgdG1wID0gZ19mbGFnc19yZWdpc3Rlcl9zdGF0aWMgKCJHc3RNaW5pT2JqZWN0RmxhZ3MiLCB2YWx1ZXMpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7CisgIH0KKworICByZXR1cm4gKEdUeXBlKSBpZDsKK30KKworLyogZW51bWVyYXRpb25zIGZyb20gImdzdHBhZC5oIiAqLworR1R5cGUKK2dzdF9wYWRfZGlyZWN0aW9uX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19FTlVNIChHU1RfUEFEX1VOS05PV04pLCAiR1NUX1BBRF9VTktOT1dOIiwgInVua25vd24ifSwKKyAgICB7Q19FTlVNIChHU1RfUEFEX1NSQyksICJHU1RfUEFEX1NSQyIsICJzcmMifSwKKyAgICB7Q19FTlVNIChHU1RfUEFEX1NJTkspLCAiR1NUX1BBRF9TSU5LIiwgInNpbmsifSwKKyAgICB7MCwgTlVMTCwgTlVMTH0KKyAgfTsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKKyAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0UGFkRGlyZWN0aW9uIiwgdmFsdWVzKTsKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOworICB9CisKKyAgcmV0dXJuIChHVHlwZSkgaWQ7Cit9CisKK0dUeXBlCitnc3RfcGFkX2xpbmtfcmV0dXJuX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19FTlVNIChHU1RfUEFEX0xJTktfT0spLCAiR1NUX1BBRF9MSU5LX09LIiwgIm9rIn0sCisgICAge0NfRU5VTSAoR1NUX1BBRF9MSU5LX1dST05HX0hJRVJBUkNIWSksICJHU1RfUEFEX0xJTktfV1JPTkdfSElFUkFSQ0hZIiwKKyAgICAgICAgIndyb25nLWhpZXJhcmNoeSJ9LAorICAgIHtDX0VOVU0gKEdTVF9QQURfTElOS19XQVNfTElOS0VEKSwgIkdTVF9QQURfTElOS19XQVNfTElOS0VEIiwgIndhcy1saW5rZWQifSwKKyAgICB7Q19FTlVNIChHU1RfUEFEX0xJTktfV1JPTkdfRElSRUNUSU9OKSwgIkdTVF9QQURfTElOS19XUk9OR19ESVJFQ1RJT04iLAorICAgICAgICAid3JvbmctZGlyZWN0aW9uIn0sCisgICAge0NfRU5VTSAoR1NUX1BBRF9MSU5LX05PRk9STUFUKSwgIkdTVF9QQURfTElOS19OT0ZPUk1BVCIsICJub2Zvcm1hdCJ9LAorICAgIHtDX0VOVU0gKEdTVF9QQURfTElOS19OT1NDSEVEKSwgIkdTVF9QQURfTElOS19OT1NDSEVEIiwgIm5vc2NoZWQifSwKKyAgICB7Q19FTlVNIChHU1RfUEFEX0xJTktfUkVGVVNFRCksICJHU1RfUEFEX0xJTktfUkVGVVNFRCIsICJyZWZ1c2VkIn0sCisgICAgezAsIE5VTEwsIE5VTEx9CisgIH07CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7CisgICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFBhZExpbmtSZXR1cm4iLCB2YWx1ZXMpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7CisgIH0KKworICByZXR1cm4gKEdUeXBlKSBpZDsKK30KKworR1R5cGUKK2dzdF9mbG93X3JldHVybl9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIGdzaXplIGlkID0gMDsKKyAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7CisgICAge0NfRU5VTSAoR1NUX0ZMT1dfQ1VTVE9NX1NVQ0NFU1NfMiksICJHU1RfRkxPV19DVVNUT01fU1VDQ0VTU18yIiwKKyAgICAgICAgImN1c3RvbS1zdWNjZXNzLTIifSwKKyAgICB7Q19FTlVNIChHU1RfRkxPV19DVVNUT01fU1VDQ0VTU18xKSwgIkdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTXzEiLAorICAgICAgICAiY3VzdG9tLXN1Y2Nlc3MtMSJ9LAorICAgIHtDX0VOVU0gKEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTKSwgIkdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTIiwKKyAgICAgICAgImN1c3RvbS1zdWNjZXNzIn0sCisgICAge0NfRU5VTSAoR1NUX0ZMT1dfUkVTRU5EKSwgIkdTVF9GTE9XX1JFU0VORCIsICJyZXNlbmQifSwKKyAgICB7Q19FTlVNIChHU1RfRkxPV19PSyksICJHU1RfRkxPV19PSyIsICJvayJ9LAorICAgIHtDX0VOVU0gKEdTVF9GTE9XX05PVF9MSU5LRUQpLCAiR1NUX0ZMT1dfTk9UX0xJTktFRCIsICJub3QtbGlua2VkIn0sCisgICAge0NfRU5VTSAoR1NUX0ZMT1dfV1JPTkdfU1RBVEUpLCAiR1NUX0ZMT1dfV1JPTkdfU1RBVEUiLCAid3Jvbmctc3RhdGUifSwKKyAgICB7Q19FTlVNIChHU1RfRkxPV19VTkVYUEVDVEVEKSwgIkdTVF9GTE9XX1VORVhQRUNURUQiLCAidW5leHBlY3RlZCJ9LAorICAgIHtDX0VOVU0gKEdTVF9GTE9XX05PVF9ORUdPVElBVEVEKSwgIkdTVF9GTE9XX05PVF9ORUdPVElBVEVEIiwKKyAgICAgICAgIm5vdC1uZWdvdGlhdGVkIn0sCisgICAge0NfRU5VTSAoR1NUX0ZMT1dfRVJST1IpLCAiR1NUX0ZMT1dfRVJST1IiLCAiZXJyb3IifSwKKyAgICB7Q19FTlVNIChHU1RfRkxPV19OT1RfU1VQUE9SVEVEKSwgIkdTVF9GTE9XX05PVF9TVVBQT1JURUQiLAorICAgICAgICAibm90LXN1cHBvcnRlZCJ9LAorICAgIHtDX0VOVU0gKEdTVF9GTE9XX0NVU1RPTV9FUlJPUiksICJHU1RfRkxPV19DVVNUT01fRVJST1IiLCAiY3VzdG9tLWVycm9yIn0sCisgICAge0NfRU5VTSAoR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SXzEpLCAiR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SXzEiLAorICAgICAgICAiY3VzdG9tLWVycm9yLTEifSwKKyAgICB7Q19FTlVNIChHU1RfRkxPV19DVVNUT01fRVJST1JfMiksICJHU1RfRkxPV19DVVNUT01fRVJST1JfMiIsCisgICAgICAgICJjdXN0b20tZXJyb3ItMiJ9LAorICAgIHswLCBOVUxMLCBOVUxMfQorICB9OworCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgeworICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RGbG93UmV0dXJuIiwgdmFsdWVzKTsKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOworICB9CisKKyAgcmV0dXJuIChHVHlwZSkgaWQ7Cit9CisKK0dUeXBlCitnc3RfcGFkX2xpbmtfY2hlY2tfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBnc2l6ZSBpZCA9IDA7CisgIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19GTEFHUyAoR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpLCAiR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkciLAorICAgICAgICAibm90aGluZyJ9LAorICAgIHtDX0ZMQUdTIChHU1RfUEFEX0xJTktfQ0hFQ0tfSElFUkFSQ0hZKSwgIkdTVF9QQURfTElOS19DSEVDS19ISUVSQVJDSFkiLAorICAgICAgICAiaGllcmFyY2h5In0sCisgICAge0NfRkxBR1MgKEdTVF9QQURfTElOS19DSEVDS19URU1QTEFURV9DQVBTKSwKKyAgICAgICAgIkdTVF9QQURfTElOS19DSEVDS19URU1QTEFURV9DQVBTIiwgInRlbXBsYXRlLWNhcHMifSwKKyAgICB7Q19GTEFHUyAoR1NUX1BBRF9MSU5LX0NIRUNLX0NBUFMpLCAiR1NUX1BBRF9MSU5LX0NIRUNLX0NBUFMiLCAiY2FwcyJ9LAorICAgIHswLCBOVUxMLCBOVUxMfQorICB9OworCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgeworICAgIEdUeXBlIHRtcCA9IGdfZmxhZ3NfcmVnaXN0ZXJfc3RhdGljICgiR3N0UGFkTGlua0NoZWNrIiwgdmFsdWVzKTsKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOworICB9CisKKyAgcmV0dXJuIChHVHlwZSkgaWQ7Cit9CisKK0dUeXBlCitnc3RfYWN0aXZhdGVfbW9kZV9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIGdzaXplIGlkID0gMDsKKyAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7CisgICAge0NfRU5VTSAoR1NUX0FDVElWQVRFX05PTkUpLCAiR1NUX0FDVElWQVRFX05PTkUiLCAibm9uZSJ9LAorICAgIHtDX0VOVU0gKEdTVF9BQ1RJVkFURV9QVVNIKSwgIkdTVF9BQ1RJVkFURV9QVVNIIiwgInB1c2gifSwKKyAgICB7Q19FTlVNIChHU1RfQUNUSVZBVEVfUFVMTCksICJHU1RfQUNUSVZBVEVfUFVMTCIsICJwdWxsIn0sCisgICAgezAsIE5VTEwsIE5VTEx9CisgIH07CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7CisgICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdEFjdGl2YXRlTW9kZSIsIHZhbHVlcyk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKKyAgfQorCisgIHJldHVybiAoR1R5cGUpIGlkOworfQorCitHVHlwZQorZ3N0X3Byb2JlX3R5cGVfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBnc2l6ZSBpZCA9IDA7CisgIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19GTEFHUyAoR1NUX1BST0JFX1RZUEVfSU5WQUxJRCksICJHU1RfUFJPQkVfVFlQRV9JTlZBTElEIiwgImludmFsaWQifSwKKyAgICB7Q19GTEFHUyAoR1NUX1BST0JFX1RZUEVfSURMRSksICJHU1RfUFJPQkVfVFlQRV9JRExFIiwgImlkbGUifSwKKyAgICB7Q19GTEFHUyAoR1NUX1BST0JFX1RZUEVfQkxPQ0spLCAiR1NUX1BST0JFX1RZUEVfQkxPQ0siLCAiYmxvY2sifSwKKyAgICB7Q19GTEFHUyAoR1NUX1BST0JFX1RZUEVfQlVGRkVSKSwgIkdTVF9QUk9CRV9UWVBFX0JVRkZFUiIsICJidWZmZXIifSwKKyAgICB7Q19GTEFHUyAoR1NUX1BST0JFX1RZUEVfQlVGRkVSX0xJU1QpLCAiR1NUX1BST0JFX1RZUEVfQlVGRkVSX0xJU1QiLAorICAgICAgICAiYnVmZmVyLWxpc3QifSwKKyAgICB7Q19GTEFHUyAoR1NUX1BST0JFX1RZUEVfRVZFTlQpLCAiR1NUX1BST0JFX1RZUEVfRVZFTlQiLCAiZXZlbnQifSwKKyAgICB7Q19GTEFHUyAoR1NUX1BST0JFX1RZUEVfUFVTSCksICJHU1RfUFJPQkVfVFlQRV9QVVNIIiwgInB1c2gifSwKKyAgICB7Q19GTEFHUyAoR1NUX1BST0JFX1RZUEVfUFVMTCksICJHU1RfUFJPQkVfVFlQRV9QVUxMIiwgInB1bGwifSwKKyAgICB7MCwgTlVMTCwgTlVMTH0KKyAgfTsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKKyAgICBHVHlwZSB0bXAgPSBnX2ZsYWdzX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFByb2JlVHlwZSIsIHZhbHVlcyk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKKyAgfQorCisgIHJldHVybiAoR1R5cGUpIGlkOworfQorCitHVHlwZQorZ3N0X3Byb2JlX3JldHVybl9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIGdzaXplIGlkID0gMDsKKyAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7CisgICAge0NfRU5VTSAoR1NUX1BST0JFX0RST1ApLCAiR1NUX1BST0JFX0RST1AiLCAiZHJvcCJ9LAorICAgIHtDX0VOVU0gKEdTVF9QUk9CRV9PSyksICJHU1RfUFJPQkVfT0siLCAib2sifSwKKyAgICB7Q19FTlVNIChHU1RfUFJPQkVfUkVNT1ZFKSwgIkdTVF9QUk9CRV9SRU1PVkUiLCAicmVtb3ZlIn0sCisgICAge0NfRU5VTSAoR1NUX1BST0JFX1BBU1MpLCAiR1NUX1BST0JFX1BBU1MiLCAicGFzcyJ9LAorICAgIHswLCBOVUxMLCBOVUxMfQorICB9OworCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgeworICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RQcm9iZVJldHVybiIsIHZhbHVlcyk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKKyAgfQorCisgIHJldHVybiAoR1R5cGUpIGlkOworfQorCitHVHlwZQorZ3N0X3BhZF9mbGFnc19nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIGdzaXplIGlkID0gMDsKKyAgc3RhdGljIGNvbnN0IEdGbGFnc1ZhbHVlIHZhbHVlc1tdID0geworICAgIHtDX0ZMQUdTIChHU1RfUEFEX0JMT0NLRUQpLCAiR1NUX1BBRF9CTE9DS0VEIiwgImJsb2NrZWQifSwKKyAgICB7Q19GTEFHUyAoR1NUX1BBRF9GTFVTSElORyksICJHU1RfUEFEX0ZMVVNISU5HIiwgImZsdXNoaW5nIn0sCisgICAge0NfRkxBR1MgKEdTVF9QQURfSU5fR0VUQ0FQUyksICJHU1RfUEFEX0lOX0dFVENBUFMiLCAiaW4tZ2V0Y2FwcyJ9LAorICAgIHtDX0ZMQUdTIChHU1RfUEFEX0JMT0NLSU5HKSwgIkdTVF9QQURfQkxPQ0tJTkciLCAiYmxvY2tpbmcifSwKKyAgICB7Q19GTEFHUyAoR1NUX1BBRF9ORUVEX1JFQ09ORklHVVJFKSwgIkdTVF9QQURfTkVFRF9SRUNPTkZJR1VSRSIsCisgICAgICAgICJuZWVkLXJlY29uZmlndXJlIn0sCisgICAge0NfRkxBR1MgKEdTVF9QQURfTkVFRF9FVkVOVFMpLCAiR1NUX1BBRF9ORUVEX0VWRU5UUyIsICJuZWVkLWV2ZW50cyJ9LAorICAgIHtDX0ZMQUdTIChHU1RfUEFEX0ZJWEVEX0NBUFMpLCAiR1NUX1BBRF9GSVhFRF9DQVBTIiwgImZpeGVkLWNhcHMifSwKKyAgICB7Q19GTEFHUyAoR1NUX1BBRF9GTEFHX0xBU1QpLCAiR1NUX1BBRF9GTEFHX0xBU1QiLCAiZmxhZy1sYXN0In0sCisgICAgezAsIE5VTEwsIE5VTEx9CisgIH07CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7CisgICAgR1R5cGUgdG1wID0gZ19mbGFnc19yZWdpc3Rlcl9zdGF0aWMgKCJHc3RQYWRGbGFncyIsIHZhbHVlcyk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKKyAgfQorCisgIHJldHVybiAoR1R5cGUpIGlkOworfQorCisvKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0cGFkdGVtcGxhdGUuaCIgKi8KK0dUeXBlCitnc3RfcGFkX3ByZXNlbmNlX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19FTlVNIChHU1RfUEFEX0FMV0FZUyksICJHU1RfUEFEX0FMV0FZUyIsICJhbHdheXMifSwKKyAgICB7Q19FTlVNIChHU1RfUEFEX1NPTUVUSU1FUyksICJHU1RfUEFEX1NPTUVUSU1FUyIsICJzb21ldGltZXMifSwKKyAgICB7Q19FTlVNIChHU1RfUEFEX1JFUVVFU1QpLCAiR1NUX1BBRF9SRVFVRVNUIiwgInJlcXVlc3QifSwKKyAgICB7MCwgTlVMTCwgTlVMTH0KKyAgfTsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKKyAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0UGFkUHJlc2VuY2UiLCB2YWx1ZXMpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7CisgIH0KKworICByZXR1cm4gKEdUeXBlKSBpZDsKK30KKworR1R5cGUKK2dzdF9wYWRfdGVtcGxhdGVfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBnc2l6ZSBpZCA9IDA7CisgIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19GTEFHUyAoR1NUX1BBRF9URU1QTEFURV9GTEFHX0xBU1QpLCAiR1NUX1BBRF9URU1QTEFURV9GTEFHX0xBU1QiLAorICAgICAgICAibGFzdCJ9LAorICAgIHswLCBOVUxMLCBOVUxMfQorICB9OworCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgeworICAgIEdUeXBlIHRtcCA9IGdfZmxhZ3NfcmVnaXN0ZXJfc3RhdGljICgiR3N0UGFkVGVtcGxhdGVGbGFncyIsIHZhbHVlcyk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKKyAgfQorCisgIHJldHVybiAoR1R5cGUpIGlkOworfQorCisvKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0cGlwZWxpbmUuaCIgKi8KK0dUeXBlCitnc3RfcGlwZWxpbmVfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBnc2l6ZSBpZCA9IDA7CisgIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19GTEFHUyAoR1NUX1BJUEVMSU5FX0ZMQUdfRklYRURfQ0xPQ0spLCAiR1NUX1BJUEVMSU5FX0ZMQUdfRklYRURfQ0xPQ0siLAorICAgICAgICAiZml4ZWQtY2xvY2sifSwKKyAgICB7Q19GTEFHUyAoR1NUX1BJUEVMSU5FX0ZMQUdfTEFTVCksICJHU1RfUElQRUxJTkVfRkxBR19MQVNUIiwgImxhc3QifSwKKyAgICB7MCwgTlVMTCwgTlVMTH0KKyAgfTsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKKyAgICBHVHlwZSB0bXAgPSBnX2ZsYWdzX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFBpcGVsaW5lRmxhZ3MiLCB2YWx1ZXMpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7CisgIH0KKworICByZXR1cm4gKEdUeXBlKSBpZDsKK30KKworLyogZW51bWVyYXRpb25zIGZyb20gImdzdHBsdWdpbi5oIiAqLworR1R5cGUKK2dzdF9wbHVnaW5fZXJyb3JfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBnc2l6ZSBpZCA9IDA7CisgIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0geworICAgIHtDX0VOVU0gKEdTVF9QTFVHSU5fRVJST1JfTU9EVUxFKSwgIkdTVF9QTFVHSU5fRVJST1JfTU9EVUxFIiwgIm1vZHVsZSJ9LAorICAgIHtDX0VOVU0gKEdTVF9QTFVHSU5fRVJST1JfREVQRU5ERU5DSUVTKSwgIkdTVF9QTFVHSU5fRVJST1JfREVQRU5ERU5DSUVTIiwKKyAgICAgICAgImRlcGVuZGVuY2llcyJ9LAorICAgIHtDX0VOVU0gKEdTVF9QTFVHSU5fRVJST1JfTkFNRV9NSVNNQVRDSCksICJHU1RfUExVR0lOX0VSUk9SX05BTUVfTUlTTUFUQ0giLAorICAgICAgICAibmFtZS1taXNtYXRjaCJ9LAorICAgIHswLCBOVUxMLCBOVUxMfQorICB9OworCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgeworICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RQbHVnaW5FcnJvciIsIHZhbHVlcyk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKKyAgfQorCisgIHJldHVybiAoR1R5cGUpIGlkOworfQorCitHVHlwZQorZ3N0X3BsdWdpbl9mbGFnc19nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIGdzaXplIGlkID0gMDsKKyAgc3RhdGljIGNvbnN0IEdGbGFnc1ZhbHVlIHZhbHVlc1tdID0geworICAgIHtDX0ZMQUdTIChHU1RfUExVR0lOX0ZMQUdfQ0FDSEVEKSwgIkdTVF9QTFVHSU5fRkxBR19DQUNIRUQiLCAiY2FjaGVkIn0sCisgICAge0NfRkxBR1MgKEdTVF9QTFVHSU5fRkxBR19CTEFDS0xJU1RFRCksICJHU1RfUExVR0lOX0ZMQUdfQkxBQ0tMSVNURUQiLAorICAgICAgICAiYmxhY2tsaXN0ZWQifSwKKyAgICB7MCwgTlVMTCwgTlVMTH0KKyAgfTsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKKyAgICBHVHlwZSB0bXAgPSBnX2ZsYWdzX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFBsdWdpbkZsYWdzIiwgdmFsdWVzKTsKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOworICB9CisKKyAgcmV0dXJuIChHVHlwZSkgaWQ7Cit9CisKK0dUeXBlCitnc3RfcGx1Z2luX2RlcGVuZGVuY3lfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBnc2l6ZSBpZCA9IDA7CisgIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19GTEFHUyAoR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfTk9ORSksCisgICAgICAgICJHU1RfUExVR0lOX0RFUEVOREVOQ1lfRkxBR19OT05FIiwgIm5vbmUifSwKKyAgICB7Q19GTEFHUyAoR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfUkVDVVJTRSksCisgICAgICAgICJHU1RfUExVR0lOX0RFUEVOREVOQ1lfRkxBR19SRUNVUlNFIiwgInJlY3Vyc2UifSwKKyAgICB7Q19GTEFHUyAoR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfUEFUSFNfQVJFX0RFRkFVTFRfT05MWSksCisgICAgICAgICAgIkdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX1BBVEhTX0FSRV9ERUZBVUxUX09OTFkiLAorICAgICAgICAicGF0aHMtYXJlLWRlZmF1bHQtb25seSJ9LAorICAgIHtDX0ZMQUdTIChHU1RfUExVR0lOX0RFUEVOREVOQ1lfRkxBR19GSUxFX05BTUVfSVNfU1VGRklYKSwKKyAgICAgICAgICAiR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfRklMRV9OQU1FX0lTX1NVRkZJWCIsCisgICAgICAgICJmaWxlLW5hbWUtaXMtc3VmZml4In0sCisgICAgezAsIE5VTEwsIE5VTEx9CisgIH07CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7CisgICAgR1R5cGUgdG1wID0gZ19mbGFnc19yZWdpc3Rlcl9zdGF0aWMgKCJHc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3MiLCB2YWx1ZXMpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7CisgIH0KKworICByZXR1cm4gKEdUeXBlKSBpZDsKK30KKworLyogZW51bWVyYXRpb25zIGZyb20gImdzdHBsdWdpbmZlYXR1cmUuaCIgKi8KK0dUeXBlCitnc3RfcmFua19nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIGdzaXplIGlkID0gMDsKKyAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7CisgICAge0NfRU5VTSAoR1NUX1JBTktfTk9ORSksICJHU1RfUkFOS19OT05FIiwgIm5vbmUifSwKKyAgICB7Q19FTlVNIChHU1RfUkFOS19NQVJHSU5BTCksICJHU1RfUkFOS19NQVJHSU5BTCIsICJtYXJnaW5hbCJ9LAorICAgIHtDX0VOVU0gKEdTVF9SQU5LX1NFQ09OREFSWSksICJHU1RfUkFOS19TRUNPTkRBUlkiLCAic2Vjb25kYXJ5In0sCisgICAge0NfRU5VTSAoR1NUX1JBTktfUFJJTUFSWSksICJHU1RfUkFOS19QUklNQVJZIiwgInByaW1hcnkifSwKKyAgICB7MCwgTlVMTCwgTlVMTH0KKyAgfTsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKKyAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0UmFuayIsIHZhbHVlcyk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKKyAgfQorCisgIHJldHVybiAoR1R5cGUpIGlkOworfQorCisvKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0cXVlcnkuaCIgKi8KK0dUeXBlCitnc3RfcXVlcnlfdHlwZV9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIGdzaXplIGlkID0gMDsKKyAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7CisgICAge0NfRU5VTSAoR1NUX1FVRVJZX05PTkUpLCAiR1NUX1FVRVJZX05PTkUiLCAibm9uZSJ9LAorICAgIHtDX0VOVU0gKEdTVF9RVUVSWV9QT1NJVElPTiksICJHU1RfUVVFUllfUE9TSVRJT04iLCAicG9zaXRpb24ifSwKKyAgICB7Q19FTlVNIChHU1RfUVVFUllfRFVSQVRJT04pLCAiR1NUX1FVRVJZX0RVUkFUSU9OIiwgImR1cmF0aW9uIn0sCisgICAge0NfRU5VTSAoR1NUX1FVRVJZX0xBVEVOQ1kpLCAiR1NUX1FVRVJZX0xBVEVOQ1kiLCAibGF0ZW5jeSJ9LAorICAgIHtDX0VOVU0gKEdTVF9RVUVSWV9KSVRURVIpLCAiR1NUX1FVRVJZX0pJVFRFUiIsICJqaXR0ZXIifSwKKyAgICB7Q19FTlVNIChHU1RfUVVFUllfUkFURSksICJHU1RfUVVFUllfUkFURSIsICJyYXRlIn0sCisgICAge0NfRU5VTSAoR1NUX1FVRVJZX1NFRUtJTkcpLCAiR1NUX1FVRVJZX1NFRUtJTkciLCAic2Vla2luZyJ9LAorICAgIHtDX0VOVU0gKEdTVF9RVUVSWV9TRUdNRU5UKSwgIkdTVF9RVUVSWV9TRUdNRU5UIiwgInNlZ21lbnQifSwKKyAgICB7Q19FTlVNIChHU1RfUVVFUllfQ09OVkVSVCksICJHU1RfUVVFUllfQ09OVkVSVCIsICJjb252ZXJ0In0sCisgICAge0NfRU5VTSAoR1NUX1FVRVJZX0ZPUk1BVFMpLCAiR1NUX1FVRVJZX0ZPUk1BVFMiLCAiZm9ybWF0cyJ9LAorICAgIHtDX0VOVU0gKEdTVF9RVUVSWV9CVUZGRVJJTkcpLCAiR1NUX1FVRVJZX0JVRkZFUklORyIsICJidWZmZXJpbmcifSwKKyAgICB7Q19FTlVNIChHU1RfUVVFUllfQ1VTVE9NKSwgIkdTVF9RVUVSWV9DVVNUT00iLCAiY3VzdG9tIn0sCisgICAge0NfRU5VTSAoR1NUX1FVRVJZX1VSSSksICJHU1RfUVVFUllfVVJJIiwgInVyaSJ9LAorICAgIHtDX0VOVU0gKEdTVF9RVUVSWV9BTExPQ0FUSU9OKSwgIkdTVF9RVUVSWV9BTExPQ0FUSU9OIiwgImFsbG9jYXRpb24ifSwKKyAgICB7Q19FTlVNIChHU1RfUVVFUllfU0NIRURVTElORyksICJHU1RfUVVFUllfU0NIRURVTElORyIsICJzY2hlZHVsaW5nIn0sCisgICAgezAsIE5VTEwsIE5VTEx9CisgIH07CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7CisgICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFF1ZXJ5VHlwZSIsIHZhbHVlcyk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKKyAgfQorCisgIHJldHVybiAoR1R5cGUpIGlkOworfQorCitHVHlwZQorZ3N0X2J1ZmZlcmluZ19tb2RlX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19FTlVNIChHU1RfQlVGRkVSSU5HX1NUUkVBTSksICJHU1RfQlVGRkVSSU5HX1NUUkVBTSIsICJzdHJlYW0ifSwKKyAgICB7Q19FTlVNIChHU1RfQlVGRkVSSU5HX0RPV05MT0FEKSwgIkdTVF9CVUZGRVJJTkdfRE9XTkxPQUQiLCAiZG93bmxvYWQifSwKKyAgICB7Q19FTlVNIChHU1RfQlVGRkVSSU5HX1RJTUVTSElGVCksICJHU1RfQlVGRkVSSU5HX1RJTUVTSElGVCIsICJ0aW1lc2hpZnQifSwKKyAgICB7Q19FTlVNIChHU1RfQlVGRkVSSU5HX0xJVkUpLCAiR1NUX0JVRkZFUklOR19MSVZFIiwgImxpdmUifSwKKyAgICB7MCwgTlVMTCwgTlVMTH0KKyAgfTsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKKyAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0QnVmZmVyaW5nTW9kZSIsIHZhbHVlcyk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKKyAgfQorCisgIHJldHVybiAoR1R5cGUpIGlkOworfQorCisvKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0c2VnbWVudC5oIiAqLworR1R5cGUKK2dzdF9zZWVrX3R5cGVfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBnc2l6ZSBpZCA9IDA7CisgIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0geworICAgIHtDX0VOVU0gKEdTVF9TRUVLX1RZUEVfTk9ORSksICJHU1RfU0VFS19UWVBFX05PTkUiLCAibm9uZSJ9LAorICAgIHtDX0VOVU0gKEdTVF9TRUVLX1RZUEVfQ1VSKSwgIkdTVF9TRUVLX1RZUEVfQ1VSIiwgImN1ciJ9LAorICAgIHtDX0VOVU0gKEdTVF9TRUVLX1RZUEVfU0VUKSwgIkdTVF9TRUVLX1RZUEVfU0VUIiwgInNldCJ9LAorICAgIHtDX0VOVU0gKEdTVF9TRUVLX1RZUEVfRU5EKSwgIkdTVF9TRUVLX1RZUEVfRU5EIiwgImVuZCJ9LAorICAgIHswLCBOVUxMLCBOVUxMfQorICB9OworCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgeworICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RTZWVrVHlwZSIsIHZhbHVlcyk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKKyAgfQorCisgIHJldHVybiAoR1R5cGUpIGlkOworfQorCitHVHlwZQorZ3N0X3NlZWtfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBnc2l6ZSBpZCA9IDA7CisgIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19GTEFHUyAoR1NUX1NFRUtfRkxBR19OT05FKSwgIkdTVF9TRUVLX0ZMQUdfTk9ORSIsICJub25lIn0sCisgICAge0NfRkxBR1MgKEdTVF9TRUVLX0ZMQUdfRkxVU0gpLCAiR1NUX1NFRUtfRkxBR19GTFVTSCIsICJmbHVzaCJ9LAorICAgIHtDX0ZMQUdTIChHU1RfU0VFS19GTEFHX0FDQ1VSQVRFKSwgIkdTVF9TRUVLX0ZMQUdfQUNDVVJBVEUiLCAiYWNjdXJhdGUifSwKKyAgICB7Q19GTEFHUyAoR1NUX1NFRUtfRkxBR19LRVlfVU5JVCksICJHU1RfU0VFS19GTEFHX0tFWV9VTklUIiwgImtleS11bml0In0sCisgICAge0NfRkxBR1MgKEdTVF9TRUVLX0ZMQUdfU0VHTUVOVCksICJHU1RfU0VFS19GTEFHX1NFR01FTlQiLCAic2VnbWVudCJ9LAorICAgIHtDX0ZMQUdTIChHU1RfU0VFS19GTEFHX1NLSVApLCAiR1NUX1NFRUtfRkxBR19TS0lQIiwgInNraXAifSwKKyAgICB7MCwgTlVMTCwgTlVMTH0KKyAgfTsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKKyAgICBHVHlwZSB0bXAgPSBnX2ZsYWdzX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFNlZWtGbGFncyIsIHZhbHVlcyk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKKyAgfQorCisgIHJldHVybiAoR1R5cGUpIGlkOworfQorCitHVHlwZQorZ3N0X3NlZ21lbnRfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBnc2l6ZSBpZCA9IDA7CisgIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0geworICAgIHtDX0VOVU0gKEdTVF9TRUdNRU5UX0ZMQUdfTk9ORSksICJHU1RfU0VHTUVOVF9GTEFHX05PTkUiLCAibm9uZSJ9LAorICAgIHtDX0VOVU0gKEdTVF9TRUdNRU5UX0ZMQUdfUkVTRVQpLCAiR1NUX1NFR01FTlRfRkxBR19SRVNFVCIsICJyZXNldCJ9LAorICAgIHtDX0VOVU0gKEdTVF9TRUdNRU5UX0ZMQUdfU0tJUCksICJHU1RfU0VHTUVOVF9GTEFHX1NLSVAiLCAic2tpcCJ9LAorICAgIHswLCBOVUxMLCBOVUxMfQorICB9OworCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgeworICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RTZWdtZW50RmxhZ3MiLCB2YWx1ZXMpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7CisgIH0KKworICByZXR1cm4gKEdUeXBlKSBpZDsKK30KKworLyogZW51bWVyYXRpb25zIGZyb20gImdzdHN5c3RlbWNsb2NrLmgiICovCitHVHlwZQorZ3N0X2Nsb2NrX3R5cGVfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBnc2l6ZSBpZCA9IDA7CisgIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0geworICAgIHtDX0VOVU0gKEdTVF9DTE9DS19UWVBFX1JFQUxUSU1FKSwgIkdTVF9DTE9DS19UWVBFX1JFQUxUSU1FIiwgInJlYWx0aW1lIn0sCisgICAge0NfRU5VTSAoR1NUX0NMT0NLX1RZUEVfTU9OT1RPTklDKSwgIkdTVF9DTE9DS19UWVBFX01PTk9UT05JQyIsCisgICAgICAgICJtb25vdG9uaWMifSwKKyAgICB7MCwgTlVMTCwgTlVMTH0KKyAgfTsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKKyAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0Q2xvY2tUeXBlIiwgdmFsdWVzKTsKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOworICB9CisKKyAgcmV0dXJuIChHVHlwZSkgaWQ7Cit9CisKKy8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3R0YWdsaXN0LmgiICovCitHVHlwZQorZ3N0X3RhZ19tZXJnZV9tb2RlX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19FTlVNIChHU1RfVEFHX01FUkdFX1VOREVGSU5FRCksICJHU1RfVEFHX01FUkdFX1VOREVGSU5FRCIsICJ1bmRlZmluZWQifSwKKyAgICB7Q19FTlVNIChHU1RfVEFHX01FUkdFX1JFUExBQ0VfQUxMKSwgIkdTVF9UQUdfTUVSR0VfUkVQTEFDRV9BTEwiLAorICAgICAgICAicmVwbGFjZS1hbGwifSwKKyAgICB7Q19FTlVNIChHU1RfVEFHX01FUkdFX1JFUExBQ0UpLCAiR1NUX1RBR19NRVJHRV9SRVBMQUNFIiwgInJlcGxhY2UifSwKKyAgICB7Q19FTlVNIChHU1RfVEFHX01FUkdFX0FQUEVORCksICJHU1RfVEFHX01FUkdFX0FQUEVORCIsICJhcHBlbmQifSwKKyAgICB7Q19FTlVNIChHU1RfVEFHX01FUkdFX1BSRVBFTkQpLCAiR1NUX1RBR19NRVJHRV9QUkVQRU5EIiwgInByZXBlbmQifSwKKyAgICB7Q19FTlVNIChHU1RfVEFHX01FUkdFX0tFRVApLCAiR1NUX1RBR19NRVJHRV9LRUVQIiwgImtlZXAifSwKKyAgICB7Q19FTlVNIChHU1RfVEFHX01FUkdFX0tFRVBfQUxMKSwgIkdTVF9UQUdfTUVSR0VfS0VFUF9BTEwiLCAia2VlcC1hbGwifSwKKyAgICB7Q19FTlVNIChHU1RfVEFHX01FUkdFX0NPVU5UKSwgIkdTVF9UQUdfTUVSR0VfQ09VTlQiLCAiY291bnQifSwKKyAgICB7MCwgTlVMTCwgTlVMTH0KKyAgfTsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKKyAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0VGFnTWVyZ2VNb2RlIiwgdmFsdWVzKTsKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOworICB9CisKKyAgcmV0dXJuIChHVHlwZSkgaWQ7Cit9CisKK0dUeXBlCitnc3RfdGFnX2ZsYWdfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBnc2l6ZSBpZCA9IDA7CisgIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0geworICAgIHtDX0VOVU0gKEdTVF9UQUdfRkxBR19VTkRFRklORUQpLCAiR1NUX1RBR19GTEFHX1VOREVGSU5FRCIsICJ1bmRlZmluZWQifSwKKyAgICB7Q19FTlVNIChHU1RfVEFHX0ZMQUdfTUVUQSksICJHU1RfVEFHX0ZMQUdfTUVUQSIsICJtZXRhIn0sCisgICAge0NfRU5VTSAoR1NUX1RBR19GTEFHX0VOQ09ERUQpLCAiR1NUX1RBR19GTEFHX0VOQ09ERUQiLCAiZW5jb2RlZCJ9LAorICAgIHtDX0VOVU0gKEdTVF9UQUdfRkxBR19ERUNPREVEKSwgIkdTVF9UQUdfRkxBR19ERUNPREVEIiwgImRlY29kZWQifSwKKyAgICB7Q19FTlVNIChHU1RfVEFHX0ZMQUdfQ09VTlQpLCAiR1NUX1RBR19GTEFHX0NPVU5UIiwgImNvdW50In0sCisgICAgezAsIE5VTEwsIE5VTEx9CisgIH07CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7CisgICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFRhZ0ZsYWciLCB2YWx1ZXMpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7CisgIH0KKworICByZXR1cm4gKEdUeXBlKSBpZDsKK30KKworLyogZW51bWVyYXRpb25zIGZyb20gImdzdHRhc2suaCIgKi8KK0dUeXBlCitnc3RfdGFza19zdGF0ZV9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIGdzaXplIGlkID0gMDsKKyAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7CisgICAge0NfRU5VTSAoR1NUX1RBU0tfU1RBUlRFRCksICJHU1RfVEFTS19TVEFSVEVEIiwgInN0YXJ0ZWQifSwKKyAgICB7Q19FTlVNIChHU1RfVEFTS19TVE9QUEVEKSwgIkdTVF9UQVNLX1NUT1BQRUQiLCAic3RvcHBlZCJ9LAorICAgIHtDX0VOVU0gKEdTVF9UQVNLX1BBVVNFRCksICJHU1RfVEFTS19QQVVTRUQiLCAicGF1c2VkIn0sCisgICAgezAsIE5VTEwsIE5VTEx9CisgIH07CisKKyAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7CisgICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFRhc2tTdGF0ZSIsIHZhbHVlcyk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKKyAgfQorCisgIHJldHVybiAoR1R5cGUpIGlkOworfQorCisvKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0dHJhY2UuaCIgKi8KK0dUeXBlCitnc3RfYWxsb2NfdHJhY2VfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBnc2l6ZSBpZCA9IDA7CisgIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19GTEFHUyAoR1NUX0FMTE9DX1RSQUNFX05PTkUpLCAiR1NUX0FMTE9DX1RSQUNFX05PTkUiLCAibm9uZSJ9LAorICAgIHtDX0ZMQUdTIChHU1RfQUxMT0NfVFJBQ0VfTElWRSksICJHU1RfQUxMT0NfVFJBQ0VfTElWRSIsICJsaXZlIn0sCisgICAge0NfRkxBR1MgKEdTVF9BTExPQ19UUkFDRV9NRU1fTElWRSksICJHU1RfQUxMT0NfVFJBQ0VfTUVNX0xJVkUiLAorICAgICAgICAibWVtLWxpdmUifSwKKyAgICB7MCwgTlVMTCwgTlVMTH0KKyAgfTsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKKyAgICBHVHlwZSB0bXAgPSBnX2ZsYWdzX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdEFsbG9jVHJhY2VGbGFncyIsIHZhbHVlcyk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKKyAgfQorCisgIHJldHVybiAoR1R5cGUpIGlkOworfQorCisvKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0dHlwZWZpbmQuaCIgKi8KK0dUeXBlCitnc3RfdHlwZV9maW5kX3Byb2JhYmlsaXR5X2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19FTlVNIChHU1RfVFlQRV9GSU5EX05PTkUpLCAiR1NUX1RZUEVfRklORF9OT05FIiwgIm5vbmUifSwKKyAgICB7Q19FTlVNIChHU1RfVFlQRV9GSU5EX01JTklNVU0pLCAiR1NUX1RZUEVfRklORF9NSU5JTVVNIiwgIm1pbmltdW0ifSwKKyAgICB7Q19FTlVNIChHU1RfVFlQRV9GSU5EX1BPU1NJQkxFKSwgIkdTVF9UWVBFX0ZJTkRfUE9TU0lCTEUiLCAicG9zc2libGUifSwKKyAgICB7Q19FTlVNIChHU1RfVFlQRV9GSU5EX0xJS0VMWSksICJHU1RfVFlQRV9GSU5EX0xJS0VMWSIsICJsaWtlbHkifSwKKyAgICB7Q19FTlVNIChHU1RfVFlQRV9GSU5EX05FQVJMWV9DRVJUQUlOKSwgIkdTVF9UWVBFX0ZJTkRfTkVBUkxZX0NFUlRBSU4iLAorICAgICAgICAibmVhcmx5LWNlcnRhaW4ifSwKKyAgICB7Q19FTlVNIChHU1RfVFlQRV9GSU5EX01BWElNVU0pLCAiR1NUX1RZUEVfRklORF9NQVhJTVVNIiwgIm1heGltdW0ifSwKKyAgICB7MCwgTlVMTCwgTlVMTH0KKyAgfTsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKKyAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0VHlwZUZpbmRQcm9iYWJpbGl0eSIsIHZhbHVlcyk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKKyAgfQorCisgIHJldHVybiAoR1R5cGUpIGlkOworfQorCisvKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0dXJpLmgiICovCitHVHlwZQorZ3N0X3VyaV90eXBlX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19FTlVNIChHU1RfVVJJX1VOS05PV04pLCAiR1NUX1VSSV9VTktOT1dOIiwgInVua25vd24ifSwKKyAgICB7Q19FTlVNIChHU1RfVVJJX1NJTkspLCAiR1NUX1VSSV9TSU5LIiwgInNpbmsifSwKKyAgICB7Q19FTlVNIChHU1RfVVJJX1NSQyksICJHU1RfVVJJX1NSQyIsICJzcmMifSwKKyAgICB7MCwgTlVMTCwgTlVMTH0KKyAgfTsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKKyAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0VVJJVHlwZSIsIHZhbHVlcyk7CisgICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKKyAgfQorCisgIHJldHVybiAoR1R5cGUpIGlkOworfQorCisvKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0dXRpbHMuaCIgKi8KK0dUeXBlCitnc3Rfc2VhcmNoX21vZGVfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBnc2l6ZSBpZCA9IDA7CisgIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0geworICAgIHtDX0VOVU0gKEdTVF9TRUFSQ0hfTU9ERV9FWEFDVCksICJHU1RfU0VBUkNIX01PREVfRVhBQ1QiLCAiZXhhY3QifSwKKyAgICB7Q19FTlVNIChHU1RfU0VBUkNIX01PREVfQkVGT1JFKSwgIkdTVF9TRUFSQ0hfTU9ERV9CRUZPUkUiLCAiYmVmb3JlIn0sCisgICAge0NfRU5VTSAoR1NUX1NFQVJDSF9NT0RFX0FGVEVSKSwgIkdTVF9TRUFSQ0hfTU9ERV9BRlRFUiIsICJhZnRlciJ9LAorICAgIHswLCBOVUxMLCBOVUxMfQorICB9OworCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgeworICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RTZWFyY2hNb2RlIiwgdmFsdWVzKTsKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOworICB9CisKKyAgcmV0dXJuIChHVHlwZSkgaWQ7Cit9CisKKy8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RwYXJzZS5oIiAqLworR1R5cGUKK2dzdF9wYXJzZV9lcnJvcl9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIGdzaXplIGlkID0gMDsKKyAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7CisgICAge0NfRU5VTSAoR1NUX1BBUlNFX0VSUk9SX1NZTlRBWCksICJHU1RfUEFSU0VfRVJST1JfU1lOVEFYIiwgInN5bnRheCJ9LAorICAgIHtDX0VOVU0gKEdTVF9QQVJTRV9FUlJPUl9OT19TVUNIX0VMRU1FTlQpLAorICAgICAgICAiR1NUX1BBUlNFX0VSUk9SX05PX1NVQ0hfRUxFTUVOVCIsICJuby1zdWNoLWVsZW1lbnQifSwKKyAgICB7Q19FTlVNIChHU1RfUEFSU0VfRVJST1JfTk9fU1VDSF9QUk9QRVJUWSksCisgICAgICAgICJHU1RfUEFSU0VfRVJST1JfTk9fU1VDSF9QUk9QRVJUWSIsICJuby1zdWNoLXByb3BlcnR5In0sCisgICAge0NfRU5VTSAoR1NUX1BBUlNFX0VSUk9SX0xJTkspLCAiR1NUX1BBUlNFX0VSUk9SX0xJTksiLCAibGluayJ9LAorICAgIHtDX0VOVU0gKEdTVF9QQVJTRV9FUlJPUl9DT1VMRF9OT1RfU0VUX1BST1BFUlRZKSwKKyAgICAgICAgIkdTVF9QQVJTRV9FUlJPUl9DT1VMRF9OT1RfU0VUX1BST1BFUlRZIiwgImNvdWxkLW5vdC1zZXQtcHJvcGVydHkifSwKKyAgICB7Q19FTlVNIChHU1RfUEFSU0VfRVJST1JfRU1QVFlfQklOKSwgIkdTVF9QQVJTRV9FUlJPUl9FTVBUWV9CSU4iLAorICAgICAgICAiZW1wdHktYmluIn0sCisgICAge0NfRU5VTSAoR1NUX1BBUlNFX0VSUk9SX0VNUFRZKSwgIkdTVF9QQVJTRV9FUlJPUl9FTVBUWSIsICJlbXB0eSJ9LAorICAgIHswLCBOVUxMLCBOVUxMfQorICB9OworCisgIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgeworICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RQYXJzZUVycm9yIiwgdmFsdWVzKTsKKyAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOworICB9CisKKyAgcmV0dXJuIChHVHlwZSkgaWQ7Cit9CisKK0dUeXBlCitnc3RfcGFyc2VfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBnc2l6ZSBpZCA9IDA7CisgIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICB7Q19GTEFHUyAoR1NUX1BBUlNFX0ZMQUdfTk9ORSksICJHU1RfUEFSU0VfRkxBR19OT05FIiwgIm5vbmUifSwKKyAgICB7Q19GTEFHUyAoR1NUX1BBUlNFX0ZMQUdfRkFUQUxfRVJST1JTKSwgIkdTVF9QQVJTRV9GTEFHX0ZBVEFMX0VSUk9SUyIsCisgICAgICAgICJmYXRhbC1lcnJvcnMifSwKKyAgICB7MCwgTlVMTCwgTlVMTH0KKyAgfTsKKworICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKKyAgICBHVHlwZSB0bXAgPSBnX2ZsYWdzX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFBhcnNlRmxhZ3MiLCB2YWx1ZXMpOworICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7CisgIH0KKworICByZXR1cm4gKEdUeXBlKSBpZDsKK30KZGlmZiAtLWdpdCBhL3dpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuaCBiL3dpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2U4YjZmCi0tLSAvZGV2L251bGwKKysrIGIvd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5oCkBAIC0wLDAgKzEsMjI1IEBACisKKworCisjaWZuZGVmIF9fR1NUX0VOVU1fVFlQRVNfSF9fCisjZGVmaW5lIF9fR1NUX0VOVU1fVFlQRVNfSF9fCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RvYmplY3QuaCIgKi8KK0dUeXBlIGdzdF9vYmplY3RfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpOworI2RlZmluZSBHU1RfVFlQRV9PQkpFQ1RfRkxBR1MgKGdzdF9vYmplY3RfZmxhZ3NfZ2V0X3R5cGUoKSkKKworLyogZW51bWVyYXRpb25zIGZyb20gImdzdGJpbi5oIiAqLworR1R5cGUgZ3N0X2Jpbl9mbGFnc19nZXRfdHlwZSAodm9pZCk7CisjZGVmaW5lIEdTVF9UWVBFX0JJTl9GTEFHUyAoZ3N0X2Jpbl9mbGFnc19nZXRfdHlwZSgpKQorCisvKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0YnVmZmVyLmgiICovCitHVHlwZSBnc3RfYnVmZmVyX2ZsYWdzX2dldF90eXBlICh2b2lkKTsKKyNkZWZpbmUgR1NUX1RZUEVfQlVGRkVSX0ZMQUdTIChnc3RfYnVmZmVyX2ZsYWdzX2dldF90eXBlKCkpCitHVHlwZSBnc3RfYnVmZmVyX2NvcHlfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpOworI2RlZmluZSBHU1RfVFlQRV9CVUZGRVJfQ09QWV9GTEFHUyAoZ3N0X2J1ZmZlcl9jb3B5X2ZsYWdzX2dldF90eXBlKCkpCisKKy8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RidWZmZXJwb29sLmgiICovCitHVHlwZSBnc3RfYnVmZmVyX3Bvb2xfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpOworI2RlZmluZSBHU1RfVFlQRV9CVUZGRVJfUE9PTF9GTEFHUyAoZ3N0X2J1ZmZlcl9wb29sX2ZsYWdzX2dldF90eXBlKCkpCisKKy8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RidXMuaCIgKi8KK0dUeXBlIGdzdF9idXNfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpOworI2RlZmluZSBHU1RfVFlQRV9CVVNfRkxBR1MgKGdzdF9idXNfZmxhZ3NfZ2V0X3R5cGUoKSkKK0dUeXBlIGdzdF9idXNfc3luY19yZXBseV9nZXRfdHlwZSAodm9pZCk7CisjZGVmaW5lIEdTVF9UWVBFX0JVU19TWU5DX1JFUExZIChnc3RfYnVzX3N5bmNfcmVwbHlfZ2V0X3R5cGUoKSkKKworLyogZW51bWVyYXRpb25zIGZyb20gImdzdGNhcHMuaCIgKi8KK0dUeXBlIGdzdF9jYXBzX2ZsYWdzX2dldF90eXBlICh2b2lkKTsKKyNkZWZpbmUgR1NUX1RZUEVfQ0FQU19GTEFHUyAoZ3N0X2NhcHNfZmxhZ3NfZ2V0X3R5cGUoKSkKK0dUeXBlIGdzdF9jYXBzX2ludGVyc2VjdF9tb2RlX2dldF90eXBlICh2b2lkKTsKKyNkZWZpbmUgR1NUX1RZUEVfQ0FQU19JTlRFUlNFQ1RfTU9ERSAoZ3N0X2NhcHNfaW50ZXJzZWN0X21vZGVfZ2V0X3R5cGUoKSkKKworLyogZW51bWVyYXRpb25zIGZyb20gImdzdGNsb2NrLmgiICovCitHVHlwZSBnc3RfY2xvY2tfcmV0dXJuX2dldF90eXBlICh2b2lkKTsKKyNkZWZpbmUgR1NUX1RZUEVfQ0xPQ0tfUkVUVVJOIChnc3RfY2xvY2tfcmV0dXJuX2dldF90eXBlKCkpCitHVHlwZSBnc3RfY2xvY2tfZW50cnlfdHlwZV9nZXRfdHlwZSAodm9pZCk7CisjZGVmaW5lIEdTVF9UWVBFX0NMT0NLX0VOVFJZX1RZUEUgKGdzdF9jbG9ja19lbnRyeV90eXBlX2dldF90eXBlKCkpCitHVHlwZSBnc3RfY2xvY2tfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpOworI2RlZmluZSBHU1RfVFlQRV9DTE9DS19GTEFHUyAoZ3N0X2Nsb2NrX2ZsYWdzX2dldF90eXBlKCkpCisKKy8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RkZWJ1Z3V0aWxzLmgiICovCitHVHlwZSBnc3RfZGVidWdfZ3JhcGhfZGV0YWlsc19nZXRfdHlwZSAodm9pZCk7CisjZGVmaW5lIEdTVF9UWVBFX0RFQlVHX0dSQVBIX0RFVEFJTFMgKGdzdF9kZWJ1Z19ncmFwaF9kZXRhaWxzX2dldF90eXBlKCkpCisKKy8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RlbGVtZW50LmgiICovCitHVHlwZSBnc3Rfc3RhdGVfZ2V0X3R5cGUgKHZvaWQpOworI2RlZmluZSBHU1RfVFlQRV9TVEFURSAoZ3N0X3N0YXRlX2dldF90eXBlKCkpCitHVHlwZSBnc3Rfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRfdHlwZSAodm9pZCk7CisjZGVmaW5lIEdTVF9UWVBFX1NUQVRFX0NIQU5HRV9SRVRVUk4gKGdzdF9zdGF0ZV9jaGFuZ2VfcmV0dXJuX2dldF90eXBlKCkpCitHVHlwZSBnc3Rfc3RhdGVfY2hhbmdlX2dldF90eXBlICh2b2lkKTsKKyNkZWZpbmUgR1NUX1RZUEVfU1RBVEVfQ0hBTkdFIChnc3Rfc3RhdGVfY2hhbmdlX2dldF90eXBlKCkpCitHVHlwZSBnc3RfZWxlbWVudF9mbGFnc19nZXRfdHlwZSAodm9pZCk7CisjZGVmaW5lIEdTVF9UWVBFX0VMRU1FTlRfRkxBR1MgKGdzdF9lbGVtZW50X2ZsYWdzX2dldF90eXBlKCkpCisKKy8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RlcnJvci5oIiAqLworR1R5cGUgZ3N0X2NvcmVfZXJyb3JfZ2V0X3R5cGUgKHZvaWQpOworI2RlZmluZSBHU1RfVFlQRV9DT1JFX0VSUk9SIChnc3RfY29yZV9lcnJvcl9nZXRfdHlwZSgpKQorR1R5cGUgZ3N0X2xpYnJhcnlfZXJyb3JfZ2V0X3R5cGUgKHZvaWQpOworI2RlZmluZSBHU1RfVFlQRV9MSUJSQVJZX0VSUk9SIChnc3RfbGlicmFyeV9lcnJvcl9nZXRfdHlwZSgpKQorR1R5cGUgZ3N0X3Jlc291cmNlX2Vycm9yX2dldF90eXBlICh2b2lkKTsKKyNkZWZpbmUgR1NUX1RZUEVfUkVTT1VSQ0VfRVJST1IgKGdzdF9yZXNvdXJjZV9lcnJvcl9nZXRfdHlwZSgpKQorR1R5cGUgZ3N0X3N0cmVhbV9lcnJvcl9nZXRfdHlwZSAodm9pZCk7CisjZGVmaW5lIEdTVF9UWVBFX1NUUkVBTV9FUlJPUiAoZ3N0X3N0cmVhbV9lcnJvcl9nZXRfdHlwZSgpKQorCisvKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0ZXZlbnQuaCIgKi8KK0dUeXBlIGdzdF9ldmVudF90eXBlX2ZsYWdzX2dldF90eXBlICh2b2lkKTsKKyNkZWZpbmUgR1NUX1RZUEVfRVZFTlRfVFlQRV9GTEFHUyAoZ3N0X2V2ZW50X3R5cGVfZmxhZ3NfZ2V0X3R5cGUoKSkKK0dUeXBlIGdzdF9ldmVudF90eXBlX2dldF90eXBlICh2b2lkKTsKKyNkZWZpbmUgR1NUX1RZUEVfRVZFTlRfVFlQRSAoZ3N0X2V2ZW50X3R5cGVfZ2V0X3R5cGUoKSkKK0dUeXBlIGdzdF9xb3NfdHlwZV9nZXRfdHlwZSAodm9pZCk7CisjZGVmaW5lIEdTVF9UWVBFX1FPU19UWVBFIChnc3RfcW9zX3R5cGVfZ2V0X3R5cGUoKSkKKworLyogZW51bWVyYXRpb25zIGZyb20gImdzdGZvcm1hdC5oIiAqLworR1R5cGUgZ3N0X2Zvcm1hdF9nZXRfdHlwZSAodm9pZCk7CisjZGVmaW5lIEdTVF9UWVBFX0ZPUk1BVCAoZ3N0X2Zvcm1hdF9nZXRfdHlwZSgpKQorCisvKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0aW5kZXguaCIgKi8KK0dUeXBlIGdzdF9pbmRleF9jZXJ0YWludHlfZ2V0X3R5cGUgKHZvaWQpOworI2RlZmluZSBHU1RfVFlQRV9JTkRFWF9DRVJUQUlOVFkgKGdzdF9pbmRleF9jZXJ0YWludHlfZ2V0X3R5cGUoKSkKK0dUeXBlIGdzdF9pbmRleF9lbnRyeV90eXBlX2dldF90eXBlICh2b2lkKTsKKyNkZWZpbmUgR1NUX1RZUEVfSU5ERVhfRU5UUllfVFlQRSAoZ3N0X2luZGV4X2VudHJ5X3R5cGVfZ2V0X3R5cGUoKSkKK0dUeXBlIGdzdF9pbmRleF9sb29rdXBfbWV0aG9kX2dldF90eXBlICh2b2lkKTsKKyNkZWZpbmUgR1NUX1RZUEVfSU5ERVhfTE9PS1VQX01FVEhPRCAoZ3N0X2luZGV4X2xvb2t1cF9tZXRob2RfZ2V0X3R5cGUoKSkKK0dUeXBlIGdzdF9hc3NvY19mbGFnc19nZXRfdHlwZSAodm9pZCk7CisjZGVmaW5lIEdTVF9UWVBFX0FTU09DX0ZMQUdTIChnc3RfYXNzb2NfZmxhZ3NfZ2V0X3R5cGUoKSkKK0dUeXBlIGdzdF9pbmRleF9yZXNvbHZlcl9tZXRob2RfZ2V0X3R5cGUgKHZvaWQpOworI2RlZmluZSBHU1RfVFlQRV9JTkRFWF9SRVNPTFZFUl9NRVRIT0QgKGdzdF9pbmRleF9yZXNvbHZlcl9tZXRob2RfZ2V0X3R5cGUoKSkKK0dUeXBlIGdzdF9pbmRleF9mbGFnc19nZXRfdHlwZSAodm9pZCk7CisjZGVmaW5lIEdTVF9UWVBFX0lOREVYX0ZMQUdTIChnc3RfaW5kZXhfZmxhZ3NfZ2V0X3R5cGUoKSkKKworLyogZW51bWVyYXRpb25zIGZyb20gImdzdGluZm8uaCIgKi8KK0dUeXBlIGdzdF9kZWJ1Z19sZXZlbF9nZXRfdHlwZSAodm9pZCk7CisjZGVmaW5lIEdTVF9UWVBFX0RFQlVHX0xFVkVMIChnc3RfZGVidWdfbGV2ZWxfZ2V0X3R5cGUoKSkKK0dUeXBlIGdzdF9kZWJ1Z19jb2xvcl9mbGFnc19nZXRfdHlwZSAodm9pZCk7CisjZGVmaW5lIEdTVF9UWVBFX0RFQlVHX0NPTE9SX0ZMQUdTIChnc3RfZGVidWdfY29sb3JfZmxhZ3NfZ2V0X3R5cGUoKSkKKworLyogZW51bWVyYXRpb25zIGZyb20gImdzdGl0ZXJhdG9yLmgiICovCitHVHlwZSBnc3RfaXRlcmF0b3JfcmVzdWx0X2dldF90eXBlICh2b2lkKTsKKyNkZWZpbmUgR1NUX1RZUEVfSVRFUkFUT1JfUkVTVUxUIChnc3RfaXRlcmF0b3JfcmVzdWx0X2dldF90eXBlKCkpCitHVHlwZSBnc3RfaXRlcmF0b3JfaXRlbV9nZXRfdHlwZSAodm9pZCk7CisjZGVmaW5lIEdTVF9UWVBFX0lURVJBVE9SX0lURU0gKGdzdF9pdGVyYXRvcl9pdGVtX2dldF90eXBlKCkpCisKKy8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RtZXNzYWdlLmgiICovCitHVHlwZSBnc3RfbWVzc2FnZV90eXBlX2dldF90eXBlICh2b2lkKTsKKyNkZWZpbmUgR1NUX1RZUEVfTUVTU0FHRV9UWVBFIChnc3RfbWVzc2FnZV90eXBlX2dldF90eXBlKCkpCitHVHlwZSBnc3Rfc3RydWN0dXJlX2NoYW5nZV90eXBlX2dldF90eXBlICh2b2lkKTsKKyNkZWZpbmUgR1NUX1RZUEVfU1RSVUNUVVJFX0NIQU5HRV9UWVBFIChnc3Rfc3RydWN0dXJlX2NoYW5nZV90eXBlX2dldF90eXBlKCkpCitHVHlwZSBnc3Rfc3RyZWFtX3N0YXR1c190eXBlX2dldF90eXBlICh2b2lkKTsKKyNkZWZpbmUgR1NUX1RZUEVfU1RSRUFNX1NUQVRVU19UWVBFIChnc3Rfc3RyZWFtX3N0YXR1c190eXBlX2dldF90eXBlKCkpCitHVHlwZSBnc3RfcHJvZ3Jlc3NfdHlwZV9nZXRfdHlwZSAodm9pZCk7CisjZGVmaW5lIEdTVF9UWVBFX1BST0dSRVNTX1RZUEUgKGdzdF9wcm9ncmVzc190eXBlX2dldF90eXBlKCkpCisKKy8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RtZW1vcnkuaCIgKi8KK0dUeXBlIGdzdF9tZW1vcnlfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpOworI2RlZmluZSBHU1RfVFlQRV9NRU1PUllfRkxBR1MgKGdzdF9tZW1vcnlfZmxhZ3NfZ2V0X3R5cGUoKSkKK0dUeXBlIGdzdF9tYXBfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpOworI2RlZmluZSBHU1RfVFlQRV9NQVBfRkxBR1MgKGdzdF9tYXBfZmxhZ3NfZ2V0X3R5cGUoKSkKKworLyogZW51bWVyYXRpb25zIGZyb20gImdzdG1pbmlvYmplY3QuaCIgKi8KK0dUeXBlIGdzdF9taW5pX29iamVjdF9mbGFnc19nZXRfdHlwZSAodm9pZCk7CisjZGVmaW5lIEdTVF9UWVBFX01JTklfT0JKRUNUX0ZMQUdTIChnc3RfbWluaV9vYmplY3RfZmxhZ3NfZ2V0X3R5cGUoKSkKKworLyogZW51bWVyYXRpb25zIGZyb20gImdzdHBhZC5oIiAqLworR1R5cGUgZ3N0X3BhZF9kaXJlY3Rpb25fZ2V0X3R5cGUgKHZvaWQpOworI2RlZmluZSBHU1RfVFlQRV9QQURfRElSRUNUSU9OIChnc3RfcGFkX2RpcmVjdGlvbl9nZXRfdHlwZSgpKQorR1R5cGUgZ3N0X3BhZF9saW5rX3JldHVybl9nZXRfdHlwZSAodm9pZCk7CisjZGVmaW5lIEdTVF9UWVBFX1BBRF9MSU5LX1JFVFVSTiAoZ3N0X3BhZF9saW5rX3JldHVybl9nZXRfdHlwZSgpKQorR1R5cGUgZ3N0X2Zsb3dfcmV0dXJuX2dldF90eXBlICh2b2lkKTsKKyNkZWZpbmUgR1NUX1RZUEVfRkxPV19SRVRVUk4gKGdzdF9mbG93X3JldHVybl9nZXRfdHlwZSgpKQorR1R5cGUgZ3N0X3BhZF9saW5rX2NoZWNrX2dldF90eXBlICh2b2lkKTsKKyNkZWZpbmUgR1NUX1RZUEVfUEFEX0xJTktfQ0hFQ0sgKGdzdF9wYWRfbGlua19jaGVja19nZXRfdHlwZSgpKQorR1R5cGUgZ3N0X2FjdGl2YXRlX21vZGVfZ2V0X3R5cGUgKHZvaWQpOworI2RlZmluZSBHU1RfVFlQRV9BQ1RJVkFURV9NT0RFIChnc3RfYWN0aXZhdGVfbW9kZV9nZXRfdHlwZSgpKQorR1R5cGUgZ3N0X3Byb2JlX3R5cGVfZ2V0X3R5cGUgKHZvaWQpOworI2RlZmluZSBHU1RfVFlQRV9QUk9CRV9UWVBFIChnc3RfcHJvYmVfdHlwZV9nZXRfdHlwZSgpKQorR1R5cGUgZ3N0X3Byb2JlX3JldHVybl9nZXRfdHlwZSAodm9pZCk7CisjZGVmaW5lIEdTVF9UWVBFX1BST0JFX1JFVFVSTiAoZ3N0X3Byb2JlX3JldHVybl9nZXRfdHlwZSgpKQorR1R5cGUgZ3N0X3BhZF9mbGFnc19nZXRfdHlwZSAodm9pZCk7CisjZGVmaW5lIEdTVF9UWVBFX1BBRF9GTEFHUyAoZ3N0X3BhZF9mbGFnc19nZXRfdHlwZSgpKQorCisvKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0cGFkdGVtcGxhdGUuaCIgKi8KK0dUeXBlIGdzdF9wYWRfcHJlc2VuY2VfZ2V0X3R5cGUgKHZvaWQpOworI2RlZmluZSBHU1RfVFlQRV9QQURfUFJFU0VOQ0UgKGdzdF9wYWRfcHJlc2VuY2VfZ2V0X3R5cGUoKSkKK0dUeXBlIGdzdF9wYWRfdGVtcGxhdGVfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpOworI2RlZmluZSBHU1RfVFlQRV9QQURfVEVNUExBVEVfRkxBR1MgKGdzdF9wYWRfdGVtcGxhdGVfZmxhZ3NfZ2V0X3R5cGUoKSkKKworLyogZW51bWVyYXRpb25zIGZyb20gImdzdHBpcGVsaW5lLmgiICovCitHVHlwZSBnc3RfcGlwZWxpbmVfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpOworI2RlZmluZSBHU1RfVFlQRV9QSVBFTElORV9GTEFHUyAoZ3N0X3BpcGVsaW5lX2ZsYWdzX2dldF90eXBlKCkpCisKKy8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RwbHVnaW4uaCIgKi8KK0dUeXBlIGdzdF9wbHVnaW5fZXJyb3JfZ2V0X3R5cGUgKHZvaWQpOworI2RlZmluZSBHU1RfVFlQRV9QTFVHSU5fRVJST1IgKGdzdF9wbHVnaW5fZXJyb3JfZ2V0X3R5cGUoKSkKK0dUeXBlIGdzdF9wbHVnaW5fZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpOworI2RlZmluZSBHU1RfVFlQRV9QTFVHSU5fRkxBR1MgKGdzdF9wbHVnaW5fZmxhZ3NfZ2V0X3R5cGUoKSkKK0dUeXBlIGdzdF9wbHVnaW5fZGVwZW5kZW5jeV9mbGFnc19nZXRfdHlwZSAodm9pZCk7CisjZGVmaW5lIEdTVF9UWVBFX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdTIChnc3RfcGx1Z2luX2RlcGVuZGVuY3lfZmxhZ3NfZ2V0X3R5cGUoKSkKKworLyogZW51bWVyYXRpb25zIGZyb20gImdzdHBsdWdpbmZlYXR1cmUuaCIgKi8KK0dUeXBlIGdzdF9yYW5rX2dldF90eXBlICh2b2lkKTsKKyNkZWZpbmUgR1NUX1RZUEVfUkFOSyAoZ3N0X3JhbmtfZ2V0X3R5cGUoKSkKKworLyogZW51bWVyYXRpb25zIGZyb20gImdzdHF1ZXJ5LmgiICovCitHVHlwZSBnc3RfcXVlcnlfdHlwZV9nZXRfdHlwZSAodm9pZCk7CisjZGVmaW5lIEdTVF9UWVBFX1FVRVJZX1RZUEUgKGdzdF9xdWVyeV90eXBlX2dldF90eXBlKCkpCitHVHlwZSBnc3RfYnVmZmVyaW5nX21vZGVfZ2V0X3R5cGUgKHZvaWQpOworI2RlZmluZSBHU1RfVFlQRV9CVUZGRVJJTkdfTU9ERSAoZ3N0X2J1ZmZlcmluZ19tb2RlX2dldF90eXBlKCkpCisKKy8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RzZWdtZW50LmgiICovCitHVHlwZSBnc3Rfc2Vla190eXBlX2dldF90eXBlICh2b2lkKTsKKyNkZWZpbmUgR1NUX1RZUEVfU0VFS19UWVBFIChnc3Rfc2Vla190eXBlX2dldF90eXBlKCkpCitHVHlwZSBnc3Rfc2Vla19mbGFnc19nZXRfdHlwZSAodm9pZCk7CisjZGVmaW5lIEdTVF9UWVBFX1NFRUtfRkxBR1MgKGdzdF9zZWVrX2ZsYWdzX2dldF90eXBlKCkpCitHVHlwZSBnc3Rfc2VnbWVudF9mbGFnc19nZXRfdHlwZSAodm9pZCk7CisjZGVmaW5lIEdTVF9UWVBFX1NFR01FTlRfRkxBR1MgKGdzdF9zZWdtZW50X2ZsYWdzX2dldF90eXBlKCkpCisKKy8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RzeXN0ZW1jbG9jay5oIiAqLworR1R5cGUgZ3N0X2Nsb2NrX3R5cGVfZ2V0X3R5cGUgKHZvaWQpOworI2RlZmluZSBHU1RfVFlQRV9DTE9DS19UWVBFIChnc3RfY2xvY2tfdHlwZV9nZXRfdHlwZSgpKQorCisvKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0dGFnbGlzdC5oIiAqLworR1R5cGUgZ3N0X3RhZ19tZXJnZV9tb2RlX2dldF90eXBlICh2b2lkKTsKKyNkZWZpbmUgR1NUX1RZUEVfVEFHX01FUkdFX01PREUgKGdzdF90YWdfbWVyZ2VfbW9kZV9nZXRfdHlwZSgpKQorR1R5cGUgZ3N0X3RhZ19mbGFnX2dldF90eXBlICh2b2lkKTsKKyNkZWZpbmUgR1NUX1RZUEVfVEFHX0ZMQUcgKGdzdF90YWdfZmxhZ19nZXRfdHlwZSgpKQorCisvKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0dGFzay5oIiAqLworR1R5cGUgZ3N0X3Rhc2tfc3RhdGVfZ2V0X3R5cGUgKHZvaWQpOworI2RlZmluZSBHU1RfVFlQRV9UQVNLX1NUQVRFIChnc3RfdGFza19zdGF0ZV9nZXRfdHlwZSgpKQorCisvKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0dHJhY2UuaCIgKi8KK0dUeXBlIGdzdF9hbGxvY190cmFjZV9mbGFnc19nZXRfdHlwZSAodm9pZCk7CisjZGVmaW5lIEdTVF9UWVBFX0FMTE9DX1RSQUNFX0ZMQUdTIChnc3RfYWxsb2NfdHJhY2VfZmxhZ3NfZ2V0X3R5cGUoKSkKKworLyogZW51bWVyYXRpb25zIGZyb20gImdzdHR5cGVmaW5kLmgiICovCitHVHlwZSBnc3RfdHlwZV9maW5kX3Byb2JhYmlsaXR5X2dldF90eXBlICh2b2lkKTsKKyNkZWZpbmUgR1NUX1RZUEVfVFlQRV9GSU5EX1BST0JBQklMSVRZIChnc3RfdHlwZV9maW5kX3Byb2JhYmlsaXR5X2dldF90eXBlKCkpCisKKy8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3R1cmkuaCIgKi8KK0dUeXBlIGdzdF91cmlfdHlwZV9nZXRfdHlwZSAodm9pZCk7CisjZGVmaW5lIEdTVF9UWVBFX1VSSV9UWVBFIChnc3RfdXJpX3R5cGVfZ2V0X3R5cGUoKSkKKworLyogZW51bWVyYXRpb25zIGZyb20gImdzdHV0aWxzLmgiICovCitHVHlwZSBnc3Rfc2VhcmNoX21vZGVfZ2V0X3R5cGUgKHZvaWQpOworI2RlZmluZSBHU1RfVFlQRV9TRUFSQ0hfTU9ERSAoZ3N0X3NlYXJjaF9tb2RlX2dldF90eXBlKCkpCisKKy8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RwYXJzZS5oIiAqLworR1R5cGUgZ3N0X3BhcnNlX2Vycm9yX2dldF90eXBlICh2b2lkKTsKKyNkZWZpbmUgR1NUX1RZUEVfUEFSU0VfRVJST1IgKGdzdF9wYXJzZV9lcnJvcl9nZXRfdHlwZSgpKQorR1R5cGUgZ3N0X3BhcnNlX2ZsYWdzX2dldF90eXBlICh2b2lkKTsKKyNkZWZpbmUgR1NUX1RZUEVfUEFSU0VfRkxBR1MgKGdzdF9wYXJzZV9mbGFnc19nZXRfdHlwZSgpKQorR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fR1NUX0VOVU1fVFlQRVNfSF9fICovCisKKworCmRpZmYgLS1naXQgYS93aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oIGIvd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmM1YmIwCi0tLSAvZGV2L251bGwKKysrIGIvd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaApAQCAtMCwwICsxLDkwIEBACisvKiBHU3RyZWFtZXIKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+CisgKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+CisgKgorICogZ3N0dmVyc2lvbi5oOiBWZXJzaW9uIGluZm9ybWF0aW9uIGZvciBHU3RyZWFtZXIKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworLyoqCisgKiBTRUNUSU9OOmdzdHZlcnNpb24KKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogR1N0cmVhbWVyIHZlcnNpb24gbWFjcm9zLgorICoKKyAqIFVzZSB0aGUgR1NUX1ZFUlNJT05fKiBtYWNyb3MgZS5nLiB3aGVuIGRlZmluaW5nIG93biBwbHVnaW5zLiBUaGUgR1N0cmVhbWVyCisgKiBydW50aW1lIGNoZWNrcyBpZiB0aGVzZSBwbHVnaW4gYW5kIGNvcmUgdmVyc2lvbiBtYXRjaCBhbmQgcmVmdXNlcyB0byB1c2UgYQorICogcGx1Z2luIGNvbXBpbGVkIGFnYWluc3QgYSBkaWZmZXJlbnQgdmVyc2lvbiBvZiBHU3RyZWFtZXIuCisgKiBZb3UgY2FuIGFsc28gdXNlIHRoZSBtYWNyb3MgdG8ga2VlcCB0aGUgR1N0cmVhbWVyIHZlcnNpb24gaW5mb3JtYXRpb24gaW4KKyAqIHlvdXIgYXBwbGljYXRpb24uCisgKgorICogVXNlIHRoZSBnc3RfdmVyc2lvbigpIGZ1bmN0aW9uIGlmIHlvdSB3YW50IHRvIGtub3cgd2hpY2ggdmVyc2lvbiBvZgorICogR1N0cmVhbWVyIHlvdSBhcmUgY3VycmVudGx5IGxpbmtlZCBhZ2FpbnN0LgorICoKKyAqIFRoZSB2ZXJzaW9uIG1hY3JvcyBnZXQgZGVmaW5lZCBieSBpbmNsdWRpbmcgImdzdC9nc3QuaCIuCisgKi8KKworI2lmbmRlZiBfX0dTVF9WRVJTSU9OX0hfXworI2RlZmluZSBfX0dTVF9WRVJTSU9OX0hfXworCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICogR1NUX1ZFUlNJT05fTUFKT1I6CisgKgorICogVGhlIG1ham9yIHZlcnNpb24gb2YgR1N0cmVhbWVyIGF0IGNvbXBpbGUgdGltZToKKyAqLworI2RlZmluZSBHU1RfVkVSU0lPTl9NQUpPUiAoMCkKKy8qKgorICogR1NUX1ZFUlNJT05fTUlOT1I6CisgKgorICogVGhlIG1pbm9yIHZlcnNpb24gb2YgR1N0cmVhbWVyIGF0IGNvbXBpbGUgdGltZToKKyAqLworI2RlZmluZSBHU1RfVkVSU0lPTl9NSU5PUiAoMTEpCisvKioKKyAqIEdTVF9WRVJTSU9OX01JQ1JPOgorICoKKyAqIFRoZSBtaWNybyB2ZXJzaW9uIG9mIEdTdHJlYW1lciBhdCBjb21waWxlIHRpbWU6CisgKi8KKyNkZWZpbmUgR1NUX1ZFUlNJT05fTUlDUk8gKDEpCisvKioKKyAqIEdTVF9WRVJTSU9OX05BTk86CisgKgorICogVGhlIG5hbm8gdmVyc2lvbiBvZiBHU3RyZWFtZXIgYXQgY29tcGlsZSB0aW1lOgorICogQWN0dWFsIHJlbGVhc2VzIGhhdmUgMCwgR0lUIHZlcnNpb25zIGhhdmUgMSwgcHJlcmVsZWFzZSB2ZXJzaW9ucyBoYXZlIDItLi4uCisgKi8KKyNkZWZpbmUgR1NUX1ZFUlNJT05fTkFOTyAoMCkKKworLyoqCisgKiBHU1RfQ0hFQ0tfVkVSU0lPTjoKKyAqIEBtYWpvcjogYSBudW1iZXIgaW5kaWNhdGluZyB0aGUgbWFqb3IgdmVyc2lvbgorICogQG1pbm9yOiBhIG51bWJlciBpbmRpY2F0aW5nIHRoZSBtaW5vciB2ZXJzaW9uCisgKiBAbWljcm86IGEgbnVtYmVyIGluZGljYXRpbmcgdGhlIG1pY3JvIHZlcnNpb24KKyAqCisgKiBDaGVjayB3aGV0aGVyIGEgR1N0cmVhbWVyIHZlcnNpb24gZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuCisgKiBtYWpvci5taW5vci5taWNybyBpcyBwcmVzZW50LgorICoKKyAqIFNpbmNlOiAwLjEwLjE4CisgKi8KKyNkZWZpbmUJR1NUX0NIRUNLX1ZFUlNJT04obWFqb3IsbWlub3IsbWljcm8pCVwKKyAgICAoR1NUX1ZFUlNJT05fTUFKT1IgPiAobWFqb3IpIHx8IFwKKyAgICAgKEdTVF9WRVJTSU9OX01BSk9SID09IChtYWpvcikgJiYgR1NUX1ZFUlNJT05fTUlOT1IgPiAobWlub3IpKSB8fCBcCisgICAgIChHU1RfVkVSU0lPTl9NQUpPUiA9PSAobWFqb3IpICYmIEdTVF9WRVJTSU9OX01JTk9SID09IChtaW5vcikgJiYgXAorICAgICAgR1NUX1ZFUlNJT05fTUlDUk8gPj0gKG1pY3JvKSkgfHwgXAorICAgICAoR1NUX1ZFUlNJT05fTUFKT1IgPT0gKG1ham9yKSAmJiBHU1RfVkVSU0lPTl9NSU5PUiA9PSAobWlub3IpICYmIFwKKyAgICAgIEdTVF9WRVJTSU9OX01JQ1JPICsgMSA9PSAobWljcm8pICYmIEdTVF9WRVJTSU9OX05BTk8gPiAwKSkKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fR1NUX1ZFUlNJT05fSF9fICovCmRpZmYgLS1naXQgYS93aW4zMi9jb21tb24vZ3RjaGFyLmggYi93aW4zMi9jb21tb24vZ3RjaGFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRhYTgxOAotLS0gL2Rldi9udWxsCisrKyBiL3dpbjMyL2NvbW1vbi9ndGNoYXIuaApAQCAtMCwwICsxLDc5NCBAQAorLyogCisKKyAqIHRjaGFyLmgKKworICoKKworICogVW5pY29kZSBtYXBwaW5nIGxheWVyIGZvciB0aGUgc3RhbmRhcmQgQyBsaWJyYXJ5LiBCeSBpbmNsdWRpbmcgdGhpcworCisgKiBmaWxlIGFuZCB1c2luZyB0aGUgJ3QnIG5hbWVzIGZvciBzdHJpbmcgZnVuY3Rpb25zCisKKyAqIChlZy4gX3RwcmludGYpIHlvdSBjYW4gbWFrZSBjb2RlIHdoaWNoIGNhbiBiZSBlYXNpbHkgYWRhcHRlZCB0byBib3RoCisKKyAqIFVuaWNvZGUgYW5kIG5vbi11bmljb2RlIGVudmlyb25tZW50cy4gSW4gYSB1bmljb2RlIGVuYWJsZWQgY29tcGlsZSBkZWZpbmUKKworICogX1VOSUNPREUgYmVmb3JlIGluY2x1ZGluZyB0Y2hhci5oLCBvdGhlcndpc2UgdGhlIHN0YW5kYXJkIG5vbi11bmljb2RlCisKKyAqIGxpYnJhcnkgZnVuY3Rpb25zIHdpbGwgYmUgdXNlZC4KKworICoKKworICogTm90ZSB0aGF0IHlvdSBzdGlsbCBuZWVkIHRvIGluY2x1ZGUgc3RyaW5nLmggb3Igc3RkbGliLmggZXRjLiB0byBkZWZpbmUKKworICogdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9ucy4gQWxzbyBub3RlIHRoYXQgdGhlcmUgYXJlIHNldmVyYWwgZGVmaW5lcworCisgKiBpbmNsdWRlZCBmb3Igbm9uLUFOU0kgZnVuY3Rpb25zIHdoaWNoIGFyZSBjb21tb25seSBhdmFpbGFibGUgKGJ1dCB1c2luZworCisgKiB0aGUgY29udmVudGlvbiBvZiBwcmVwZW5kaW5nIGFuIHVuZGVyc2NvcmUgdG8gbm9uLUFOU0kgbGlicmFyeSBmdW5jdGlvbgorCisgKiBuYW1lcykuCisKKyAqCisKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBNaW5ndzMyIHBhY2thZ2UuCisKKyAqCisKKyAqIENvbnRyaWJ1dG9yczoKKworICogIENyZWF0ZWQgYnkgQ29saW4gUGV0ZXJzIDxjb2xpbkBiaXJkLmZ1LmlzLnNhZ2EtdS5hYy5qcD4KKworICoKKworICogIFRISVMgU09GVFdBUkUgSVMgTk9UIENPUFlSSUdIVEVECisKKyAqCisKKyAqICBUaGlzIHNvdXJjZSBjb2RlIGlzIG9mZmVyZWQgZm9yIHVzZSBpbiB0aGUgcHVibGljIGRvbWFpbi4gWW91IG1heQorCisgKiAgdXNlLCBtb2RpZnkgb3IgZGlzdHJpYnV0ZSBpdCBmcmVlbHkuCisKKyAqCisKKyAqICBUaGlzIGNvZGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCBidXQKKworICogIFdJVEhPVVQgQU5ZIFdBUlJBTlRZLiBBTEwgV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVEIEFSRSBIRVJFQlkKKworICogIERJU0NMQUlNRUQuIFRoaXMgaW5jbHVkZXMgYnV0IGlzIG5vdCBsaW1pdGVkIHRvIHdhcnJhbnRpZXMgb2YKKworICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworICoKKworICogJFJldmlzaW9uJAorCisgKiAkQXV0aG9yJAorCisgKiAkRGF0ZSQKKworICoKKworICovCisKKworCisjaWZuZGVmCV9UQ0hBUl9IXworCisjZGVmaW5lIF9UQ0hBUl9IXworCisKKworLyogQWxsIHRoZSBoZWFkZXJzIGluY2x1ZGUgdGhpcyBmaWxlLiAqLworCisvKiNpbmNsdWRlIDxfbWluZ3cuaD4qLworCisKKworLyoKKworICogTk9URTogVGhpcyB0ZXN0cyBfVU5JQ09ERSwgd2hpY2ggaXMgZGlmZmVyZW50IGZyb20gdGhlIFVOSUNPREUgZGVmaW5lCisKKyAqICAgICAgIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSBXaW4zMiBBUEkgY2FsbHMuCisKKyAqLworCisjaWZkZWYJX1VOSUNPREUKKworCisKKworCisvKgorCisgKiBVc2UgVENIQVIgaW5zdGVhZCBvZiBjaGFyIG9yIHdjaGFyX3QuIEl0IHdpbGwgYmUgYXBwcm9wcmlhdGVseSB0cmFuc2xhdGVkCisKKyAqIGlmIF9VTklDT0RFIGlzIGNvcnJlY3RseSBkZWZpbmVkIChvciBub3QpLgorCisgKi8KKworI2lmbmRlZiBfVENIQVJfREVGSU5FRAorCisjaWZuZGVmIFJDX0lOVk9LRUQKKwordHlwZWRlZgl3Y2hhcl90CVRDSEFSOworCit0eXBlZGVmIHdjaGFyX3QgX1RDSEFSOworCisjZW5kaWYJLyogTm90IFJDX0lOVk9LRUQgKi8KKworI2RlZmluZSBfVENIQVJfREVGSU5FRAorCisjZW5kaWYKKworCisKKworCisvKgorCisgKiBfX1RFWFQgaXMgYSBwcml2YXRlIG1hY3JvIHdob3NlIHNwZWNpZmljIHVzZSBpcyB0byBmb3JjZSB0aGUgZXhwYW5zaW9uIG9mIGEKKworICogbWFjcm8gcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBtYWNyb3MgX1Qgb3IgX1RFWFQuICBETyBOT1QgdXNlIHRoaXMKKworICogbWFjcm8gd2l0aGluIHlvdXIgcHJvZ3JhbXMuICBJdCdzIG5hbWUgYW5kIGZ1bmN0aW9uIGNvdWxkIGNoYW5nZSB3aXRob3V0CisKKyAqIG5vdGljZS4KKworICovCisKKyNkZWZpbmUJX19URVhUKHEpCUwjI3EKKworCisKKy8qICBmb3IgcG9ydGluZyBmcm9tIG90aGVyIFdpbmRvd3MgY29tcGlsZXJzICovCisKKyNpZiAwICAvLyBubyAgd2lkZSBzdGFydHVwIG1vZHVsZQorCisjZGVmaW5lIF90bWFpbiAgICAgIHdtYWluCisKKyNkZWZpbmUgX3RXaW5NYWluICAgd1dpbk1haW4KKworI2RlZmluZSBfdGVudmlyb24gICBfd2Vudmlyb24KKworI2RlZmluZSBfX3Rhcmd2ICAgICBfX3dhcmd2CisKKyNlbmRpZgorCisKKworLyoKKworICogVW5pY29kZSBmdW5jdGlvbnMKKworICovCisKKyNkZWZpbmUJX3RwcmludGYJd3ByaW50ZgorCisjZGVmaW5lCV9mdHByaW50Zglmd3ByaW50ZgorCisjZGVmaW5lCV9zdHByaW50Zglzd3ByaW50ZgorCisjZGVmaW5lCV9zbnRwcmludGYJX3Nud3ByaW50ZgorCisjZGVmaW5lCV92dHByaW50Zgl2d3ByaW50ZgorCisjZGVmaW5lCV92ZnRwcmludGYJdmZ3cHJpbnRmCisKKyNkZWZpbmUgX3ZzdHByaW50Zgl2c3dwcmludGYKKworI2RlZmluZQlfdnNudHByaW50ZglfdnNud3ByaW50ZgorCisjZGVmaW5lCV90c2NhbmYJCXdzY2FuZgorCisjZGVmaW5lCV9mdHNjYW5mCWZ3c2NhbmYKKworI2RlZmluZQlfc3RzY2FuZglzd3NjYW5mCisKKyNkZWZpbmUJX2ZnZXR0YwkJZmdldHdjCisKKyNkZWZpbmUJX2ZnZXR0Y2hhcglfZmdldHdjaGFyCisKKyNkZWZpbmUJX2ZnZXR0cwkJZmdldHdzCisKKyNkZWZpbmUJX2ZwdXR0YwkJZnB1dHdjCisKKyNkZWZpbmUJX2ZwdXR0Y2hhcglfZnB1dHdjaGFyCisKKyNkZWZpbmUJX2ZwdXR0cwkJZnB1dHdzCisKKyNkZWZpbmUJX2dldHRjCQlnZXR3YworCisjZGVmaW5lCV9nZXR0cwkJX2dldHdzCisKKyNkZWZpbmUJX3B1dHRjCQlwdXR3YworCisjZGVmaW5lCV9wdXR0cwkJX3B1dHdzCisKKyNkZWZpbmUJX3VuZ2V0dGMJdW5nZXR3YworCisjZGVmaW5lCV90Y3N0b2QJCXdjc3RvZAorCisjZGVmaW5lCV90Y3N0b2wJCXdjc3RvbAorCisjZGVmaW5lIF90Y3N0b3VsCXdjc3RvdWwKKworI2RlZmluZQlfaXRvdAkJX2l0b3cKKworI2RlZmluZQlfbHRvdAkJX2x0b3cKKworI2RlZmluZQlfdWx0b3QJCV91bHRvdworCisjZGVmaW5lCV90dG9pCQlfd3RvaQorCisjZGVmaW5lCV90dG9sCQlfd3RvbAorCisjZGVmaW5lCV90Y3NjYXQJCXdjc2NhdAorCisjZGVmaW5lIF90Y3NjaHIJCXdjc2NocgorCisjZGVmaW5lIF90Y3NjbXAJCXdjc2NtcAorCisjZGVmaW5lIF90Y3NjcHkJCXdjc2NweQorCisjZGVmaW5lIF90Y3Njc3BuCXdjc2NzcG4KKworI2RlZmluZQlfdGNzbGVuCQl3Y3NsZW4KKworI2RlZmluZQlfdGNzbmNhdAl3Y3NuY2F0CisKKyNkZWZpbmUJX3Rjc25jbXAJd2NzbmNtcAorCisjZGVmaW5lCV90Y3NuY3B5CXdjc25jcHkKKworI2RlZmluZQlfdGNzcGJyawl3Y3NwYnJrCisKKyNkZWZpbmUJX3Rjc3JjaHIJd2NzcmNocgorCisjZGVmaW5lIF90Y3NzcG4JCXdjc3NwbgorCisjZGVmaW5lCV90Y3NzdHIJCXdjc3N0cgorCisjZGVmaW5lIF90Y3N0b2sJCXdjc3RvaworCisjZGVmaW5lCV90Y3NkdXAJCV93Y3NkdXAKKworI2RlZmluZQlfdGNzaWNtcAlfd2NzaWNtcAorCisjZGVmaW5lCV90Y3NuaWNtcAlfd2NzbmljbXAKKworI2RlZmluZQlfdGNzbnNldAlfd2NzbnNldAorCisjZGVmaW5lCV90Y3NyZXYJCV93Y3NyZXYKKworI2RlZmluZSBfdGNzc2V0CQlfd2Nzc2V0CisKKyNkZWZpbmUJX3Rjc2x3cgkJX3djc2x3cgorCisjZGVmaW5lCV90Y3N1cHIJCV93Y3N1cHIKKworI2RlZmluZQlfdGNzeGZybQl3Y3N4ZnJtCisKKyNkZWZpbmUJX3Rjc2NvbGwJd2NzY29sbAorCisjZGVmaW5lCV90Y3NpY29sbAlfd2NzaWNvbGwKKworI2RlZmluZQlfaXN0YWxwaGEJaXN3YWxwaGEKKworI2RlZmluZQlfaXN0dXBwZXIJaXN3dXBwZXIKKworI2RlZmluZQlfaXN0bG93ZXIJaXN3bG93ZXIKKworI2RlZmluZQlfaXN0ZGlnaXQJaXN3ZGlnaXQKKworI2RlZmluZQlfaXN0eGRpZ2l0CWlzd3hkaWdpdAorCisjZGVmaW5lCV9pc3RzcGFjZQlpc3dzcGFjZQorCisjZGVmaW5lCV9pc3RwdW5jdAlpc3dwdW5jdAorCisjZGVmaW5lCV9pc3RhbG51bQlpc3dhbG51bQorCisjZGVmaW5lCV9pc3RwcmludAlpc3dwcmludAorCisjZGVmaW5lCV9pc3RncmFwaAlpc3dncmFwaAorCisjZGVmaW5lCV9pc3RjbnRybAlpc3djbnRybAorCisjZGVmaW5lCV9pc3Rhc2NpaQlpc3dhc2NpaQorCisjZGVmaW5lIF90b3R1cHBlcgl0b3d1cHBlcgorCisjZGVmaW5lCV90b3Rsb3dlcgl0b3dsb3dlcgorCisjZGVmaW5lIF90Y3NmdGltZQl3Y3NmdGltZQorCisvKiBNYWNybyBmdW5jdGlvbnMgKi8gCisKKyNkZWZpbmUgX3Rjc2RlYyAgICAgX3djc2RlYworCisjZGVmaW5lIF90Y3NpbmMgICAgIF93Y3NpbmMKKworI2RlZmluZSBfdGNzbmJjbnQgICBfd2NzbmNudAorCisjZGVmaW5lIF90Y3NuY2NudCAgIF93Y3NuY250CisKKyNkZWZpbmUgX3Rjc25leHRjICAgX3djc25leHRjCisKKyNkZWZpbmUgX3Rjc25pbmMgICAgX3djc25pbmMKKworI2RlZmluZSBfdGNzc3BucCAgICBfd2Nzc3BucAorCisjZGVmaW5lIF93Y3NkZWMoX3djczEsIF93Y3MyKSAoKF93Y3MxKT49KF93Y3MyKSA/IE5VTEwgOiAoX3djczIpLTEpCisKKyNkZWZpbmUgX3djc2luYyhfd2NzKSAgKChfd2NzKSsxKQorCisjZGVmaW5lIF93Y3NuZXh0Yyhfd2NzKSAoKHVuc2lnbmVkIGludCkgKihfd2NzKSkKKworI2RlZmluZSBfd2NzbmluYyhfd2NzLCBfaW5jKSAoKChfd2NzKSsoX2luYykpKQorCisjZGVmaW5lIF93Y3NuY250KF93Y3MsIF9jbnQpICgod2NzbGVuKF93Y3MpPl9jbnQpID8gX2NvdW50IDogd2NzbGVuKF93Y3MpKQorCisjZGVmaW5lIF93Y3NzcG5wKF93Y3MxLCBfd2NzMikgKCgqKChfd2NzMSkrd2Nzc3BuKF93Y3MxLF93Y3MyKSkpID8gKChfd2NzMSkrd2Nzc3BuKF93Y3MxLF93Y3MyKSkgOiBOVUxMKQorCisKKworI2lmIDEgIC8qIGRlZmluZWQgX19NU1ZDUlRfXyAqLworCisvKgorCisgKiAgIFRoZXNlIHdpZGUgZnVuY3Rpb25zIG5vdCBpbiBjcnRkbGwuZGxsLgorCisgKiAgIERlZmluZSBtYWNyb3MgYW55d2F5IHNvIHRoYXQgX3dmb28gcmF0aGVyIHRoYW4gX3Rmb28gaXMgdW5kZWZpbmVkCisKKyAqLworCisjZGVmaW5lIF90dG9pNjQgICAgIF93dG9pNjQKKworI2RlZmluZSBfaTY0dG90ICAgICBfaTY0dG93CisKKyNkZWZpbmUgX3VpNjR0b3QgICAgX3VpNjR0b3cKKworI2RlZmluZQlfdGFzY3RpbWUJX3dhc2N0aW1lCisKKyNkZWZpbmUJX3RjdGltZQkJX3djdGltZQorCisjZGVmaW5lCV90c3RyZGF0ZQlfd3N0cmRhdGUKKworI2RlZmluZQlfdHN0cnRpbWUJX3dzdHJ0aW1lCisKKyNkZWZpbmUJX3R1dGltZQkJX3d1dGltZQorCisjZGVmaW5lIF90Y3NuY2NvbGwgIF93Y3NuY29sbAorCisjZGVmaW5lIF90Y3NuY29sbCAgIF93Y3NuY29sbAorCisjZGVmaW5lIF90Y3NuY2ljb2xsIF93Y3NuaWNvbGwKKworI2RlZmluZSBfdGNzbmljb2xsICBfd2Nzbmljb2xsCisKKyNkZWZpbmUgX3RhY2Nlc3MgICAgX3dhY2Nlc3MKKworI2RlZmluZSBfdGNobW9kICAgICBfd2NobW9kCisKKyNkZWZpbmUgX3RjcmVhdCAgICAgX3djcmVhdAorCisjZGVmaW5lIF90ZmluZGZpcnN0IF93ZmluZGZpcnN0CisKKyNkZWZpbmUgX3RmaW5kbmV4dCAgX3dmaW5kbmV4dAorCisjZGVmaW5lIF90ZmRvcGVuICAgIF93ZmRvcGVuCisKKyNkZWZpbmUgX3Rmb3BlbiAgICAgX3dmb3BlbgorCisjZGVmaW5lIF90Z2V0ZW52ICAgIF93Z2V0ZW52CisKKyNkZWZpbmUgX3RwdXRlbnYgICAgX3dwdXRlbnYKKworI2RlZmluZSBfdHNlYXJjaGVudiBfd3NlYXJjaGVudgorCisjZGVmaW5lIF90bWFrZXBhdGggIF93bWFrZXBhdGgKKworI2RlZmluZSBfdHNwbGl0cGF0aCBfd3NwbGl0cGF0aAorCisjZGVmaW5lIF90ZnVsbHBhdGggIF93ZnVsbHBhdGgKKworI2RlZmluZSBfdG1rdGVtcCAgICBfd21rdGVtcAorCisjZGVmaW5lIF90b3BlbiAgICAgIF93b3BlbgorCisjZGVmaW5lIF90cmVtb3ZlICAgIF93cmVtb3ZlCisKKyNkZWZpbmUgX3RyZW5hbWUgICAgX3dyZW5hbWUKKworI2RlZmluZSBfdHNvcGVuICAgICBfd3NvcGVuCisKKyNkZWZpbmUgX3RzZXRsb2NhbGUgX3dzZXRsb2NhbGUKKworI2RlZmluZSBfdHVubGluayAgICBfd3VubGluaworCisjZGVmaW5lIF90ZmluZGRhdGFfdCAgICBfd2ZpbmRkYXRhX3QKKworI2RlZmluZSBfdGZpbmRmaXJzdGk2NCAgX3dmaW5kZmlyc3RpNjQKKworI2RlZmluZSBfdGZpbmRuZXh0aTY0ICAgX3dmaW5kbmV4dGk2NAorCisjZGVmaW5lIF90ZmluZGRhdGFpNjRfdCBfd2ZpbmRkYXRhaTY0X3QKKworI2VuZGlmICAvKiBfX01TVkNSVF9fICovCisKKworCisvKiBkaXJlbnQgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zICovCisKKyNkZWZpbmUgX3RkaXJlbnQJX3dkaXJlbnQKKworI2RlZmluZSBfVERJUiAJCV9XRElSCisKKyNkZWZpbmUgX3RvcGVuZGlyCV93b3BlbmRpcgorCisjZGVmaW5lIF90Y2xvc2VkaXIJX3djbG9zZWRpcgorCisjZGVmaW5lIF90cmVhZGRpcglfd3JlYWRkaXIKKworI2RlZmluZSBfdHJld2luZGRpcglfd3Jld2luZGRpcgorCisjZGVmaW5lIF90dGVsbGRpcglfd3RlbGxkaXIKKworI2RlZmluZSBfdHNlZWtkaXIJX3dzZWVrZGlyCisKKyNlbHNlCS8qIE5vdCBfVU5JQ09ERSAqLworCisKKworLyoKKworICogVENIQVIsIHRoZSB0eXBlIHlvdSBzaG91bGQgdXNlIGluc3RlYWQgb2YgY2hhci4KKworICovCisKKyNpZm5kZWYgX1RDSEFSX0RFRklORUQKKworI2lmbmRlZiBSQ19JTlZPS0VECisKK3R5cGVkZWYgY2hhcglUQ0hBUjsKKwordHlwZWRlZiBjaGFyCV9UQ0hBUjsKKworI2VuZGlmCisKKyNkZWZpbmUgX1RDSEFSX0RFRklORUQKKworI2VuZGlmCisKKworCisvKgorCisgKiBfX1RFWFQgaXMgYSBwcml2YXRlIG1hY3JvIHdob3NlIHNwZWNpZmljIHVzZSBpcyB0byBmb3JjZSB0aGUgZXhwYW5zaW9uIG9mIGEKKworICogbWFjcm8gcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBtYWNyb3MgX1Qgb3IgX1RFWFQuICBETyBOT1QgdXNlIHRoaXMKKworICogbWFjcm8gd2l0aGluIHlvdXIgcHJvZ3JhbXMuICBJdCdzIG5hbWUgYW5kIGZ1bmN0aW9uIGNvdWxkIGNoYW5nZSB3aXRob3V0CisKKyAqIG5vdGljZS4KKworICovCisKKyNkZWZpbmUJX19URVhUKHEpCXEKKworCisKKy8qICBmb3IgcG9ydGluZyBmcm9tIG90aGVyIFdpbmRvd3MgY29tcGlsZXJzICovCisKKyNkZWZpbmUgX3RtYWluICAgICAgbWFpbgorCisjZGVmaW5lIF90V2luTWFpbiAgIFdpbk1haW4KKworI2RlZmluZSBfdGVudmlyb24gIF9lbnZpcm9uCisKKyNkZWZpbmUgX190YXJndiAgICAgX19hcmd2CisKKworCisvKgorCisgKiBOb24tdW5pY29kZSAoc3RhbmRhcmQpIGZ1bmN0aW9ucworCisgKi8KKworCisKKyNkZWZpbmUJX3RwcmludGYJcHJpbnRmCisKKyNkZWZpbmUgX2Z0cHJpbnRmCWZwcmludGYKKworI2RlZmluZQlfc3RwcmludGYJc3ByaW50ZgorCisjZGVmaW5lCV9zbnRwcmludGYJX3NucHJpbnRmCisKKyNkZWZpbmUJX3Z0cHJpbnRmCXZwcmludGYKKworI2RlZmluZQlfdmZ0cHJpbnRmCXZmcHJpbnRmCisKKyNkZWZpbmUgX3ZzdHByaW50Zgl2c3ByaW50ZgorCisjZGVmaW5lCV92c250cHJpbnRmCV92c25wcmludGYKKworI2RlZmluZQlfdHNjYW5mCQlzY2FuZgorCisjZGVmaW5lCV9mdHNjYW5mCWZzY2FuZgorCisjZGVmaW5lCV9zdHNjYW5mCXNzY2FuZgorCisjZGVmaW5lCV9mZ2V0dGMJCWZnZXRjCisKKyNkZWZpbmUJX2ZnZXR0Y2hhcglfZmdldGNoYXIKKworI2RlZmluZQlfZmdldHRzCQlmZ2V0cworCisjZGVmaW5lCV9mcHV0dGMJCWZwdXRjCisKKyNkZWZpbmUJX2ZwdXR0Y2hhcglfZnB1dGNoYXIKKworI2RlZmluZQlfZnB1dHRzCQlmcHV0cworCisjZGVmaW5lIF90ZmRvcGVuCV9mZG9wZW4KKworI2RlZmluZQlfdGZvcGVuCQlmb3BlbgorCisjZGVmaW5lCV90Z2V0ZW52CWdldGVudgorCisjZGVmaW5lCV90cHV0ZW52CV9wdXRlbnYKKworI2RlZmluZQlfdHNlYXJjaGVudglfc2VhcmNoZW52CisKKyNkZWZpbmUJX3RtYWtlcGF0aAlfbWFrZXBhdGgKKworI2RlZmluZQlfdHNwbGl0cGF0aAlfc3BsaXRwYXRoCisKKyNkZWZpbmUJX3RmdWxscGF0aAlfZnVsbHBhdGgKKworI2RlZmluZQlfZ2V0dGMJCWdldGMKKworI2RlZmluZQlfZ2V0dHMJCWdldHMKKworI2RlZmluZQlfcHV0dGMJCXB1dGMKKworI2RlZmluZQlfcHV0dHMJCXB1dHMKKworI2RlZmluZQlfdW5nZXR0Ywl1bmdldGMKKworI2RlZmluZQlfdGNzdG9kCQlzdHJ0b2QKKworI2RlZmluZQlfdGNzdG9sCQlzdHJ0b2wKKworI2RlZmluZSBfdGNzdG91bAlzdHJ0b3VsCisKKyNkZWZpbmUJX2l0b3QJCV9pdG9hCisKKyNkZWZpbmUJX2x0b3QJCV9sdG9hCisKKyNkZWZpbmUJX3VsdG90CQlfdWx0b2EKKworI2RlZmluZQlfdHRvaQkJYXRvaQorCisjZGVmaW5lCV90dG9sCQlhdG9sCisKKyNkZWZpbmUJX3Rjc2NhdAkJc3RyY2F0CisKKyNkZWZpbmUgX3Rjc2NocgkJc3RyY2hyCisKKyNkZWZpbmUgX3Rjc2NtcAkJc3RyY21wCisKKyNkZWZpbmUgX3Rjc2NweQkJc3RyY3B5CisKKyNkZWZpbmUgX3Rjc2NzcG4Jc3RyY3NwbgorCisjZGVmaW5lCV90Y3NsZW4JCXN0cmxlbgorCisjZGVmaW5lCV90Y3NuY2F0CXN0cm5jYXQKKworI2RlZmluZQlfdGNzbmNtcAlzdHJuY21wCisKKyNkZWZpbmUJX3Rjc25jcHkJc3RybmNweQorCisjZGVmaW5lCV90Y3NwYnJrCXN0cnBicmsKKworI2RlZmluZQlfdGNzcmNocglzdHJyY2hyCisKKyNkZWZpbmUgX3Rjc3NwbgkJc3Ryc3BuCisKKyNkZWZpbmUJX3Rjc3N0cgkJc3Ryc3RyCisKKyNkZWZpbmUgX3Rjc3RvawkJc3RydG9rCisKKyNkZWZpbmUJX3Rjc2R1cAkJX3N0cmR1cAorCisjZGVmaW5lCV90Y3NpY21wCV9zdHJpY21wCisKKyNkZWZpbmUJX3Rjc25pY21wCV9zdHJuaWNtcAorCisjZGVmaW5lCV90Y3Nuc2V0CV9zdHJuc2V0CisKKyNkZWZpbmUJX3Rjc3JldgkJX3N0cnJldgorCisjZGVmaW5lIF90Y3NzZXQJCV9zdHJzZXQKKworI2RlZmluZQlfdGNzbHdyCQlfc3RybHdyCisKKyNkZWZpbmUJX3Rjc3VwcgkJX3N0cnVwcgorCisjZGVmaW5lCV90Y3N4ZnJtCXN0cnhmcm0KKworI2RlZmluZQlfdGNzY29sbAlzdHJjb2xsCisKKyNkZWZpbmUJX3Rjc2ljb2xsCV9zdHJpY29sbAorCisjZGVmaW5lCV9pc3RhbHBoYQlpc2FscGhhCisKKyNkZWZpbmUJX2lzdHVwcGVyCWlzdXBwZXIKKworI2RlZmluZQlfaXN0bG93ZXIJaXNsb3dlcgorCisjZGVmaW5lCV9pc3RkaWdpdAlpc2RpZ2l0CisKKyNkZWZpbmUJX2lzdHhkaWdpdAlpc3hkaWdpdAorCisjZGVmaW5lCV9pc3RzcGFjZQlpc3NwYWNlCisKKyNkZWZpbmUJX2lzdHB1bmN0CWlzcHVuY3QKKworI2RlZmluZQlfaXN0YWxudW0JaXNhbG51bQorCisjZGVmaW5lCV9pc3RwcmludAlpc3ByaW50CisKKyNkZWZpbmUJX2lzdGdyYXBoCWlzZ3JhcGgKKworI2RlZmluZQlfaXN0Y250cmwJaXNjbnRybAorCisjZGVmaW5lCV9pc3Rhc2NpaQlpc2FzY2lpCisKKyNkZWZpbmUgX3RvdHVwcGVyCXRvdXBwZXIKKworI2RlZmluZQlfdG90bG93ZXIJdG9sb3dlcgorCisjZGVmaW5lCV90YXNjdGltZQlhc2N0aW1lCisKKyNkZWZpbmUJX3RjdGltZQkJY3RpbWUKKworI2RlZmluZQlfdHN0cmRhdGUJX3N0cmRhdGUKKworI2RlZmluZQlfdHN0cnRpbWUJX3N0cnRpbWUKKworI2RlZmluZQlfdHV0aW1lCQlfdXRpbWUKKworI2RlZmluZSBfdGNzZnRpbWUJc3RyZnRpbWUKKworLyogTWFjcm8gZnVuY3Rpb25zICovIAorCisjZGVmaW5lIF90Y3NkZWMgICAgIF9zdHJkZWMKKworI2RlZmluZSBfdGNzaW5jICAgICBfc3RyaW5jCisKKyNkZWZpbmUgX3Rjc25iY250ICAgX3N0cm5jbnQKKworI2RlZmluZSBfdGNzbmNjbnQgICBfc3RybmNudAorCisjZGVmaW5lIF90Y3NuZXh0YyAgIF9zdHJuZXh0YworCisjZGVmaW5lIF90Y3NuaW5jICAgIF9zdHJuaW5jCisKKyNkZWZpbmUgX3Rjc3NwbnAgICAgX3N0cnNwbnAKKworI2RlZmluZSBfc3RyZGVjKF9zdHIxLCBfc3RyMikgKChfc3RyMSk+PShfc3RyMikgPyBOVUxMIDogKF9zdHIyKS0xKQorCisjZGVmaW5lIF9zdHJpbmMoX3N0cikgICgoX3N0cikrMSkKKworI2RlZmluZSBfc3RybmV4dGMoX3N0cikgKCh1bnNpZ25lZCBpbnQpICooX3N0cikpCisKKyNkZWZpbmUgX3N0cm5pbmMoX3N0ciwgX2luYykgKCgoX3N0cikrKF9pbmMpKSkKKworI2RlZmluZSBfc3RybmNudChfc3RyLCBfY250KSAoKHN0cmxlbihfc3RyKT5fY250KSA/IF9jb3VudCA6IHN0cmxlbihfc3RyKSkKKworI2RlZmluZSBfc3Ryc3BucChfc3RyMSwgX3N0cjIpICgoKigoX3N0cjEpK3N0cnNwbihfc3RyMSxfc3RyMikpKSA/ICgoX3N0cjEpK3N0cnNwbihfc3RyMSxfc3RyMikpIDogTlVMTCkKKworCisKKyNkZWZpbmUgX3RjaG1vZCAgICAgX2NobW9kCisKKyNkZWZpbmUgX3RjcmVhdCAgICAgX2NyZWF0CisKKyNkZWZpbmUgX3RmaW5kZmlyc3QgX2ZpbmRmaXJzdAorCisjZGVmaW5lIF90ZmluZG5leHQgIF9maW5kbmV4dAorCisjZGVmaW5lIF90bWt0ZW1wICAgIF9ta3RlbXAKKworI2RlZmluZSBfdG9wZW4gICAgICBfb3BlbgorCisjZGVmaW5lIF90YWNjZXNzICAgIF9hY2Nlc3MKKworI2RlZmluZSBfdHJlbW92ZSAgICByZW1vdmUKKworI2RlZmluZSBfdHJlbmFtZSAgICByZW5hbWUKKworI2RlZmluZSBfdHNvcGVuICAgICBfc29wZW4KKworI2RlZmluZSBfdHNldGxvY2FsZSBzZXRsb2NhbGUKKworI2RlZmluZSBfdHVubGluayAgICBfdW5saW5rCisKKyNkZWZpbmUgX3RmaW5kZGF0YV90ICAgIF9maW5kZGF0YV90CisKKworCisjaWYgMSAgLyogZGVmaW5lZCBfX01TVkNSVF9fICovCisKKy8qIE5vdCBpbiBjcnRkbGwuZGxsLiBEZWZpbmUgbWFjcm9zIGFueXdheT8gKi8KKworI2RlZmluZSBfdHRvaTY0ICAgICBfYXRvaTY0CisKKyNkZWZpbmUgX2k2NHRvdCAgICAgX2k2NHRvYQorCisjZGVmaW5lIF91aTY0dG90ICAgIF91aTY0dG9hCisKKyNkZWZpbmUgX3Rjc25jY29sbCAgX3N0cm5jb2xsCisKKyNkZWZpbmUgX3Rjc25jb2xsICAgX3N0cm5jb2xsCisKKyNkZWZpbmUgX3Rjc25jaWNvbGwgX3N0cm5pY29sbAorCisjZGVmaW5lIF90Y3NuaWNvbGwgIF9zdHJuaWNvbGwKKworI2RlZmluZSBfdGZpbmRmaXJzdGk2NCAgX2ZpbmRmaXJzdGk2NAorCisjZGVmaW5lIF90ZmluZG5leHRpNjQgICBfZmluZG5leHRpNjQKKworI2RlZmluZSBfdGZpbmRkYXRhaTY0X3QgX2ZpbmRkYXRhaTY0X3QKKworI2VuZGlmICAvKiBfX01TVkNSVF9fICovCisKKworCisvKiBkaXJlbnQgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zICovCisKKyNkZWZpbmUgX3RkaXJlbnQJZGlyZW50CisKKyNkZWZpbmUgX1RESVIgCQlESVIKKworI2RlZmluZSBfdG9wZW5kaXIJb3BlbmRpcgorCisjZGVmaW5lIF90Y2xvc2VkaXIJY2xvc2VkaXIKKworI2RlZmluZSBfdHJlYWRkaXIJcmVhZGRpcgorCisjZGVmaW5lIF90cmV3aW5kZGlyCXJld2luZGRpcgorCisjZGVmaW5lIF90dGVsbGRpcgl0ZWxsZGlyCisKKyNkZWZpbmUgX3RzZWVrZGlyCXNlZWtkaXIKKworCisKKyNlbmRpZgkvKiBOb3QgX1VOSUNPREUgKi8KKworCisKKy8qCisKKyAqIFVOSUNPREUgYSBjb25zdGFudCBzdHJpbmcgd2hlbiBfVU5JQ09ERSBpcyBkZWZpbmVkIGVsc2UgcmV0dXJucyB0aGUgc3RyaW5nCisKKyAqIHVubW9kaWZpZWQuICBBbHNvIGRlZmluZWQgaW4gdzMyYXBpL3dpbm50LmguCisKKyAqLworCisjZGVmaW5lIF9URVhUKHgpCV9fVEVYVCh4KQorCisjZGVmaW5lCV9UKHgpCQlfX1RFWFQoeCkKKworCisKKyNlbmRpZgkvKiBOb3QgX1RDSEFSX0hfICovCisKKworCmRpZmYgLS1naXQgYS93aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWYgYi93aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQxNWRhMgotLS0gL2Rldi9udWxsCisrKyBiL3dpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZgpAQCAtMCwwICsxLDI0MyBAQAorRVhQT1JUUworCWdzdF9hZGFwdGVyX2F2YWlsYWJsZQorCWdzdF9hZGFwdGVyX2F2YWlsYWJsZV9mYXN0CisJZ3N0X2FkYXB0ZXJfY2xlYXIKKwlnc3RfYWRhcHRlcl9jb3B5CisJZ3N0X2FkYXB0ZXJfZmx1c2gKKwlnc3RfYWRhcHRlcl9nZXRfdHlwZQorCWdzdF9hZGFwdGVyX21hcAorCWdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMgorCWdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMl9wZWVrCisJZ3N0X2FkYXB0ZXJfbmV3CisJZ3N0X2FkYXB0ZXJfcHJldl90aW1lc3RhbXAKKwlnc3RfYWRhcHRlcl9wdXNoCisJZ3N0X2FkYXB0ZXJfdGFrZQorCWdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyCisJZ3N0X2FkYXB0ZXJfdGFrZV9saXN0CisJZ3N0X2FkYXB0ZXJfdW5tYXAKKwlnc3RfYmFzZV9wYXJzZV9hZGRfaW5kZXhfZW50cnkKKwlnc3RfYmFzZV9wYXJzZV9jb252ZXJ0X2RlZmF1bHQKKwlnc3RfYmFzZV9wYXJzZV9mcmFtZV9mcmVlCisJZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfZ2V0X3R5cGUKKwlnc3RfYmFzZV9wYXJzZV9mcmFtZV9pbml0CisJZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfbmV3CisJZ3N0X2Jhc2VfcGFyc2VfZ2V0X3R5cGUKKwlnc3RfYmFzZV9wYXJzZV9wdXNoX2ZyYW1lCisJZ3N0X2Jhc2VfcGFyc2Vfc2V0X2F2ZXJhZ2VfYml0cmF0ZQorCWdzdF9iYXNlX3BhcnNlX3NldF9kdXJhdGlvbgorCWdzdF9iYXNlX3BhcnNlX3NldF9mcmFtZV9yYXRlCisJZ3N0X2Jhc2VfcGFyc2Vfc2V0X2hhc190aW1pbmdfaW5mbworCWdzdF9iYXNlX3BhcnNlX3NldF9sYXRlbmN5CisJZ3N0X2Jhc2VfcGFyc2Vfc2V0X21pbl9mcmFtZV9zaXplCisJZ3N0X2Jhc2VfcGFyc2Vfc2V0X3Bhc3N0aHJvdWdoCisJZ3N0X2Jhc2VfcGFyc2Vfc2V0X3N5bmNhYmxlCisJZ3N0X2Jhc2Vfc2lua19kb19wcmVyb2xsCisJZ3N0X2Jhc2Vfc2lua19nZXRfYmxvY2tzaXplCisJZ3N0X2Jhc2Vfc2lua19nZXRfbGFzdF9idWZmZXIKKwlnc3RfYmFzZV9zaW5rX2dldF9sYXRlbmN5CisJZ3N0X2Jhc2Vfc2lua19nZXRfbWF4X2xhdGVuZXNzCisJZ3N0X2Jhc2Vfc2lua19nZXRfcmVuZGVyX2RlbGF5CisJZ3N0X2Jhc2Vfc2lua19nZXRfc3luYworCWdzdF9iYXNlX3NpbmtfZ2V0X3Rocm90dGxlX3RpbWUKKwlnc3RfYmFzZV9zaW5rX2dldF90c19vZmZzZXQKKwlnc3RfYmFzZV9zaW5rX2dldF90eXBlCisJZ3N0X2Jhc2Vfc2lua19pc19hc3luY19lbmFibGVkCisJZ3N0X2Jhc2Vfc2lua19pc19sYXN0X2J1ZmZlcl9lbmFibGVkCisJZ3N0X2Jhc2Vfc2lua19pc19xb3NfZW5hYmxlZAorCWdzdF9iYXNlX3NpbmtfcXVlcnlfbGF0ZW5jeQorCWdzdF9iYXNlX3Npbmtfc2V0X2FzeW5jX2VuYWJsZWQKKwlnc3RfYmFzZV9zaW5rX3NldF9ibG9ja3NpemUKKwlnc3RfYmFzZV9zaW5rX3NldF9sYXN0X2J1ZmZlcl9lbmFibGVkCisJZ3N0X2Jhc2Vfc2lua19zZXRfbWF4X2xhdGVuZXNzCisJZ3N0X2Jhc2Vfc2lua19zZXRfcW9zX2VuYWJsZWQKKwlnc3RfYmFzZV9zaW5rX3NldF9yZW5kZXJfZGVsYXkKKwlnc3RfYmFzZV9zaW5rX3NldF9zeW5jCisJZ3N0X2Jhc2Vfc2lua19zZXRfdGhyb3R0bGVfdGltZQorCWdzdF9iYXNlX3Npbmtfc2V0X3RzX29mZnNldAorCWdzdF9iYXNlX3Npbmtfd2FpdF9jbG9jaworCWdzdF9iYXNlX3Npbmtfd2FpdF9lb3MKKwlnc3RfYmFzZV9zaW5rX3dhaXRfcHJlcm9sbAorCWdzdF9iYXNlX3NyY19nZXRfYmxvY2tzaXplCisJZ3N0X2Jhc2Vfc3JjX2dldF9kb190aW1lc3RhbXAKKwlnc3RfYmFzZV9zcmNfZ2V0X3R5cGUKKwlnc3RfYmFzZV9zcmNfaXNfbGl2ZQorCWdzdF9iYXNlX3NyY19uZXdfc2VhbWxlc3Nfc2VnbWVudAorCWdzdF9iYXNlX3NyY19xdWVyeV9sYXRlbmN5CisJZ3N0X2Jhc2Vfc3JjX3NldF9ibG9ja3NpemUKKwlnc3RfYmFzZV9zcmNfc2V0X2NhcHMKKwlnc3RfYmFzZV9zcmNfc2V0X2RvX3RpbWVzdGFtcAorCWdzdF9iYXNlX3NyY19zZXRfZHluYW1pY19zaXplCisJZ3N0X2Jhc2Vfc3JjX3NldF9mb3JtYXQKKwlnc3RfYmFzZV9zcmNfc2V0X2xpdmUKKwlnc3RfYmFzZV9zcmNfd2FpdF9wbGF5aW5nCisJZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldF90eXBlCisJZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX2luX3BsYWNlCisJZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Bhc3N0aHJvdWdoCisJZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Fvc19lbmFibGVkCisJZ3N0X2Jhc2VfdHJhbnNmb3JtX3JlY29uZmlndXJlCisJZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9nYXBfYXdhcmUKKwlnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2luX3BsYWNlCisJZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wYXNzdGhyb3VnaAorCWdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcW9zX2VuYWJsZWQKKwlnc3RfYmFzZV90cmFuc2Zvcm1fc3VnZ2VzdAorCWdzdF9iYXNlX3RyYW5zZm9ybV91cGRhdGVfcW9zCisJZ3N0X2JpdF9yZWFkZXJfZnJlZQorCWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQxNgorCWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQzMgorCWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ2NAorCWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4CisJZ3N0X2JpdF9yZWFkZXJfZ2V0X3BvcworCWdzdF9iaXRfcmVhZGVyX2dldF9yZW1haW5pbmcKKwlnc3RfYml0X3JlYWRlcl9nZXRfc2l6ZQorCWdzdF9iaXRfcmVhZGVyX2luaXQKKwlnc3RfYml0X3JlYWRlcl9uZXcKKwlnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDE2CisJZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQzMgorCWdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50NjQKKwlnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDgKKwlnc3RfYml0X3JlYWRlcl9zZXRfcG9zCisJZ3N0X2JpdF9yZWFkZXJfc2tpcAorCWdzdF9iaXRfcmVhZGVyX3NraXBfdG9fYnl0ZQorCWdzdF9ieXRlX3JlYWRlcl9kdXBfZGF0YQorCWdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjE2CisJZ3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmdfdXRmMzIKKwlnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGY4CisJZ3N0X2J5dGVfcmVhZGVyX2ZyZWUKKwlnc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGEKKwlnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0MzJfYmUKKwlnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0MzJfbGUKKwlnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfYmUKKwlnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfbGUKKwlnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2JlCisJZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9sZQorCWdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfYmUKKwlnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDI0X2xlCisJZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9iZQorCWdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfbGUKKwlnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2JlCisJZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9sZQorCWdzdF9ieXRlX3JlYWRlcl9nZXRfaW50OAorCWdzdF9ieXRlX3JlYWRlcl9nZXRfcG9zCisJZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcKKwlnc3RfYnl0ZV9yZWFkZXJfZ2V0X3NpemUKKwlnc3RfYnl0ZV9yZWFkZXJfZ2V0X3N0cmluZ191dGY4CisJZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmUKKwlnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9sZQorCWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2JlCisJZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfbGUKKwlnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZQorCWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlCisJZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmUKKwlnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9sZQorCWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDgKKwlnc3RfYnl0ZV9yZWFkZXJfaW5pdAorCWdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzIKKwlnc3RfYnl0ZV9yZWFkZXJfbmV3CisJZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YQorCWdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfYmUKKwlnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2xlCisJZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9iZQorCWdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfbGUKKwlnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQxNl9iZQorCWdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2xlCisJZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfYmUKKwlnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9sZQorCWdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2JlCisJZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfbGUKKwlnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9iZQorCWdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2xlCisJZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50OAorCWdzdF9ieXRlX3JlYWRlcl9wZWVrX3N0cmluZ191dGY4CisJZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2JlCisJZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2xlCisJZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2JlCisJZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2xlCisJZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2JlCisJZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2xlCisJZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2JlCisJZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2xlCisJZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDgKKwlnc3RfYnl0ZV9yZWFkZXJfc2V0X3BvcworCWdzdF9ieXRlX3JlYWRlcl9za2lwCisJZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjE2CisJZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjMyCisJZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjgKKwlnc3RfYnl0ZV93cml0ZXJfZW5zdXJlX2ZyZWVfc3BhY2UKKwlnc3RfYnl0ZV93cml0ZXJfZmlsbAorCWdzdF9ieXRlX3dyaXRlcl9mcmVlCisJZ3N0X2J5dGVfd3JpdGVyX2ZyZWVfYW5kX2dldF9idWZmZXIKKwlnc3RfYnl0ZV93cml0ZXJfZnJlZV9hbmRfZ2V0X2RhdGEKKwlnc3RfYnl0ZV93cml0ZXJfZ2V0X3JlbWFpbmluZworCWdzdF9ieXRlX3dyaXRlcl9pbml0CisJZ3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9kYXRhCisJZ3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9zaXplCisJZ3N0X2J5dGVfd3JpdGVyX25ldworCWdzdF9ieXRlX3dyaXRlcl9uZXdfd2l0aF9kYXRhCisJZ3N0X2J5dGVfd3JpdGVyX25ld193aXRoX3NpemUKKwlnc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGEKKwlnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfYmUKKwlnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfbGUKKwlnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfYmUKKwlnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfbGUKKwlnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2JlCisJZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9sZQorCWdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfYmUKKwlnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2xlCisJZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9iZQorCWdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfbGUKKwlnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2JlCisJZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9sZQorCWdzdF9ieXRlX3dyaXRlcl9wdXRfaW50OAorCWdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nX3V0ZjE2CisJZ3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmdfdXRmMzIKKwlnc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZ191dGY4CisJZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfYmUKKwlnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9sZQorCWdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2JlCisJZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfbGUKKwlnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9iZQorCWdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlCisJZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfYmUKKwlnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9sZQorCWdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDgKKwlnc3RfYnl0ZV93cml0ZXJfcmVzZXQKKwlnc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9idWZmZXIKKwlnc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9kYXRhCisJZ3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkCisJZ3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkX2Z1bGwKKwlnc3RfY29sbGVjdF9wYWRzX2F2YWlsYWJsZQorCWdzdF9jb2xsZWN0X3BhZHNfY29sbGVjdAorCWdzdF9jb2xsZWN0X3BhZHNfY29sbGVjdF9yYW5nZQorCWdzdF9jb2xsZWN0X3BhZHNfZmx1c2gKKwlnc3RfY29sbGVjdF9wYWRzX2dldF90eXBlCisJZ3N0X2NvbGxlY3RfcGFkc19pc19hY3RpdmUKKwlnc3RfY29sbGVjdF9wYWRzX25ldworCWdzdF9jb2xsZWN0X3BhZHNfcGVlaworCWdzdF9jb2xsZWN0X3BhZHNfcG9wCisJZ3N0X2NvbGxlY3RfcGFkc19yZWFkX2J1ZmZlcgorCWdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZAorCWdzdF9jb2xsZWN0X3BhZHNfc2V0X2NsaXBfZnVuY3Rpb24KKwlnc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaGluZworCWdzdF9jb2xsZWN0X3BhZHNfc2V0X2Z1bmN0aW9uCisJZ3N0X2NvbGxlY3RfcGFkc19zdGFydAorCWdzdF9jb2xsZWN0X3BhZHNfc3RvcAorCWdzdF9jb2xsZWN0X3BhZHNfdGFrZV9idWZmZXIKKwlnc3RfZGF0YV9xdWV1ZV9kcm9wX2hlYWQKKwlnc3RfZGF0YV9xdWV1ZV9mbHVzaAorCWdzdF9kYXRhX3F1ZXVlX2dldF9sZXZlbAorCWdzdF9kYXRhX3F1ZXVlX2dldF90eXBlCisJZ3N0X2RhdGFfcXVldWVfaXNfZW1wdHkKKwlnc3RfZGF0YV9xdWV1ZV9pc19mdWxsCisJZ3N0X2RhdGFfcXVldWVfbGltaXRzX2NoYW5nZWQKKwlnc3RfZGF0YV9xdWV1ZV9uZXcKKwlnc3RfZGF0YV9xdWV1ZV9uZXdfZnVsbAorCWdzdF9kYXRhX3F1ZXVlX3BvcAorCWdzdF9kYXRhX3F1ZXVlX3B1c2gKKwlnc3RfZGF0YV9xdWV1ZV9zZXRfZmx1c2hpbmcKKwlnc3RfcHVzaF9zcmNfZ2V0X3R5cGUKKwlnc3RfdHlwZV9maW5kX2hlbHBlcgorCWdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9idWZmZXIKKwlnc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfZGF0YQorCWdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9leHRlbnNpb24KKwlnc3RfdHlwZV9maW5kX2hlbHBlcl9nZXRfcmFuZ2UKKwlnc3RfdHlwZV9maW5kX2hlbHBlcl9nZXRfcmFuZ2VfZXh0CmRpZmYgLS1naXQgYS93aW4zMi9jb21tb24vbGliZ3N0Y29udHJvbGxlci5kZWYgYi93aW4zMi9jb21tb24vbGliZ3N0Y29udHJvbGxlci5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE1Zjc2ZgotLS0gL2Rldi9udWxsCisrKyBiL3dpbjMyL2NvbW1vbi9saWJnc3Rjb250cm9sbGVyLmRlZgpAQCAtMCwwICsxLDQ2IEBACitFWFBPUlRTCisJZ3N0X2NvbnRyb2xfc291cmNlX2JpbmQKKwlnc3RfY29udHJvbF9zb3VyY2VfZ2V0X3R5cGUKKwlnc3RfY29udHJvbF9zb3VyY2VfZ2V0X3ZhbHVlCisJZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZV9hcnJheQorCWdzdF9jb250cm9sbGVyX2dldAorCWdzdF9jb250cm9sbGVyX2dldF9jb250cm9sX3NvdXJjZQorCWdzdF9jb250cm9sbGVyX2dldF90eXBlCisJZ3N0X2NvbnRyb2xsZXJfZ2V0X3ZhbHVlX2FycmF5CisJZ3N0X2NvbnRyb2xsZXJfZ2V0X3ZhbHVlX2FycmF5cworCWdzdF9jb250cm9sbGVyX2luaXQKKwlnc3RfY29udHJvbGxlcl9uZXcKKwlnc3RfY29udHJvbGxlcl9uZXdfbGlzdAorCWdzdF9jb250cm9sbGVyX25ld192YWxpc3QKKwlnc3RfY29udHJvbGxlcl9yZW1vdmVfcHJvcGVydGllcworCWdzdF9jb250cm9sbGVyX3JlbW92ZV9wcm9wZXJ0aWVzX2xpc3QKKwlnc3RfY29udHJvbGxlcl9yZW1vdmVfcHJvcGVydGllc192YWxpc3QKKwlnc3RfY29udHJvbGxlcl9zZXRfY29udHJvbF9zb3VyY2UKKwlnc3RfY29udHJvbGxlcl9zZXRfZGlzYWJsZWQKKwlnc3RfY29udHJvbGxlcl9zZXRfcHJvcGVydHlfZGlzYWJsZWQKKwlnc3RfY29udHJvbGxlcl9zdWdnZXN0X25leHRfc3luYworCWdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzCisJZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfZ2V0X2FsbAorCWdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2dldF9jb3VudAorCWdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2dldF90eXBlCisJZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfbmV3CisJZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0CisJZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0X2Zyb21fbGlzdAorCWdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldF9pbnRlcnBvbGF0aW9uX21vZGUKKwlnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV91bnNldAorCWdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3Vuc2V0X2FsbAorCWdzdF9sZm9fY29udHJvbF9zb3VyY2VfZ2V0X3R5cGUKKwlnc3RfbGZvX2NvbnRyb2xfc291cmNlX25ldworCWdzdF9sZm9fd2F2ZWZvcm1fZ2V0X3R5cGUKKwlnc3Rfb2JqZWN0X2NvbnRyb2xfcHJvcGVydGllcworCWdzdF9vYmplY3RfZ2V0X2NvbnRyb2xfcmF0ZQorCWdzdF9vYmplY3RfZ2V0X2NvbnRyb2xfc291cmNlCisJZ3N0X29iamVjdF9nZXRfY29udHJvbGxlcgorCWdzdF9vYmplY3RfZ2V0X3ZhbHVlX2FycmF5CisJZ3N0X29iamVjdF9nZXRfdmFsdWVfYXJyYXlzCisJZ3N0X29iamVjdF9zZXRfY29udHJvbF9yYXRlCisJZ3N0X29iamVjdF9zZXRfY29udHJvbF9zb3VyY2UKKwlnc3Rfb2JqZWN0X3NldF9jb250cm9sbGVyCisJZ3N0X29iamVjdF9zdWdnZXN0X25leHRfc3luYworCWdzdF9vYmplY3Rfc3luY192YWx1ZXMKKwlnc3Rfb2JqZWN0X3VuY29udHJvbF9wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS93aW4zMi9jb21tb24vbGliZ3N0ZGF0YXByb3RvY29sLmRlZiBiL3dpbjMyL2NvbW1vbi9saWJnc3RkYXRhcHJvdG9jb2wuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwOThhMjUKLS0tIC9kZXYvbnVsbAorKysgYi93aW4zMi9jb21tb24vbGliZ3N0ZGF0YXByb3RvY29sLmRlZgpAQCAtMCwwICsxLDE1IEBACitFWFBPUlRTCisJZ3N0X2RwX2J1ZmZlcl9mcm9tX2hlYWRlcgorCWdzdF9kcF9jYXBzX2Zyb21fcGFja2V0CisJZ3N0X2RwX2NyYworCWdzdF9kcF9kdW1wX2J5dGVfYXJyYXkKKwlnc3RfZHBfZXZlbnRfZnJvbV9wYWNrZXQKKwlnc3RfZHBfaGVhZGVyX3BheWxvYWRfbGVuZ3RoCisJZ3N0X2RwX2hlYWRlcl9wYXlsb2FkX3R5cGUKKwlnc3RfZHBfaW5pdAorCWdzdF9kcF9wYWNrZXRpemVyX2ZyZWUKKwlnc3RfZHBfcGFja2V0aXplcl9uZXcKKwlnc3RfZHBfdmFsaWRhdGVfaGVhZGVyCisJZ3N0X2RwX3ZhbGlkYXRlX3BhY2tldAorCWdzdF9kcF92YWxpZGF0ZV9wYXlsb2FkCisJZ3N0X2RwX3ZlcnNpb25fZ2V0X3R5cGUKZGlmZiAtLWdpdCBhL3dpbjMyL2NvbW1vbi9saWJnc3RuZXQuZGVmIGIvd2luMzIvY29tbW9uL2xpYmdzdG5ldC5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU5ZmZlYgotLS0gL2Rldi9udWxsCisrKyBiL3dpbjMyL2NvbW1vbi9saWJnc3RuZXQuZGVmCkBAIC0wLDAgKzEsOSBAQAorRVhQT1JUUworCWdzdF9uZXRfY2xpZW50X2Nsb2NrX2dldF90eXBlCisJZ3N0X25ldF9jbGllbnRfY2xvY2tfbmV3CisJZ3N0X25ldF90aW1lX3BhY2tldF9uZXcKKwlnc3RfbmV0X3RpbWVfcGFja2V0X3JlY2VpdmUKKwlnc3RfbmV0X3RpbWVfcGFja2V0X3NlbmQKKwlnc3RfbmV0X3RpbWVfcGFja2V0X3NlcmlhbGl6ZQorCWdzdF9uZXRfdGltZV9wcm92aWRlcl9nZXRfdHlwZQorCWdzdF9uZXRfdGltZV9wcm92aWRlcl9uZXcKZGlmZiAtLWdpdCBhL3dpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmIGIvd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNlZWU3ZQotLS0gL2Rldi9udWxsCisrKyBiL3dpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmCkBAIC0wLDAgKzEsMTIzNiBAQAorRVhQT1JUUworCUdTVF9DQVRfQVVUT1BMVUcgREFUQQorCUdTVF9DQVRfQVVUT1BMVUdfQVRURU1QVCBEQVRBCisJR1NUX0NBVF9CVUZGRVIgREFUQQorCUdTVF9DQVRfQlVGRkVSX0xJU1QgREFUQQorCUdTVF9DQVRfQlVTIERBVEEKKwlHU1RfQ0FUX0NBTExfVFJBQ0UgREFUQQorCUdTVF9DQVRfQ0FQUyBEQVRBCisJR1NUX0NBVF9DTE9DSyBEQVRBCisJR1NUX0NBVF9ERUZBVUxUIERBVEEKKwlHU1RfQ0FUX0VMRU1FTlRfUEFEUyBEQVRBCisJR1NUX0NBVF9FUlJPUl9TWVNURU0gREFUQQorCUdTVF9DQVRfRVZFTlQgREFUQQorCUdTVF9DQVRfR1NUX0lOSVQgREFUQQorCUdTVF9DQVRfTUVTU0FHRSBEQVRBCisJR1NUX0NBVF9ORUdPVElBVElPTiBEQVRBCisJR1NUX0NBVF9QQURTIERBVEEKKwlHU1RfQ0FUX1BBUkFNUyBEQVRBCisJR1NUX0NBVF9QQVJFTlRBR0UgREFUQQorCUdTVF9DQVRfUEVSRk9STUFOQ0UgREFUQQorCUdTVF9DQVRfUElQRUxJTkUgREFUQQorCUdTVF9DQVRfUExVR0lOX0lORk8gREFUQQorCUdTVF9DQVRfUExVR0lOX0xPQURJTkcgREFUQQorCUdTVF9DQVRfUFJPQkUgREFUQQorCUdTVF9DQVRfUFJPUEVSVElFUyBEQVRBCisJR1NUX0NBVF9RT1MgREFUQQorCUdTVF9DQVRfUkVGQ09VTlRJTkcgREFUQQorCUdTVF9DQVRfUkVHSVNUUlkgREFUQQorCUdTVF9DQVRfU0NIRURVTElORyBEQVRBCisJR1NUX0NBVF9TSUdOQUwgREFUQQorCUdTVF9DQVRfU1RBVEVTIERBVEEKKwlHU1RfQ0FUX1RZUEVTIERBVEEKKwlfX2dzdF9kZWJ1Z19lbmFibGVkIERBVEEKKwlfX2dzdF9kZWJ1Z19taW4gREFUQQorCV9nc3RfYWxsb2NfdHJhY2VfcmVnaXN0ZXIKKwlfZ3N0X2J1ZmZlcl9saXN0X3R5cGUgREFUQQorCV9nc3RfYnVmZmVyX3R5cGUgREFUQQorCV9nc3RfY2Fwc190eXBlIERBVEEKKwlfZ3N0X2RlYnVnX2Jpbl90b19kb3RfZmlsZQorCV9nc3RfZGVidWdfYmluX3RvX2RvdF9maWxlX3dpdGhfdHMKKwlfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldworCV9nc3RfZGVidWdfZHVtcF9tZW0KKwlfZ3N0X2RlYnVnX2dldF9jYXRlZ29yeQorCV9nc3RfZGVidWdfbmFtZW9mX2Z1bmNwdHIKKwlfZ3N0X2RlYnVnX3JlZ2lzdGVyX2Z1bmNwdHIKKwlfZ3N0X2Rpc2FibGVfcmVnaXN0cnlfY2FjaGUgREFUQQorCV9nc3RfZWxlbWVudF9lcnJvcl9wcmludGYKKwlfZ3N0X2VsZW1lbnRjbGFzc19mYWN0b3J5IERBVEEKKwlfZ3N0X2V2ZW50X3R5cGUgREFUQQorCV9nc3RfcGx1Z2luX2xvYWRlcl9jbGllbnRfcnVuCisJX2dzdF9zdHJ1Y3R1cmVfdHlwZSBEQVRBCisJX2dzdF90cmFjZV9hZGRfZW50cnkKKwlfZ3N0X3RyYWNlX211dGV4IERBVEEKKwlfZ3N0X3RyYWNlX29uIERBVEEKKwlnc3RfYWN0aXZhdGVfbW9kZV9nZXRfdHlwZQorCWdzdF9hbGxvY190cmFjZV9hdmFpbGFibGUKKwlnc3RfYWxsb2NfdHJhY2VfZmxhZ3NfZ2V0X3R5cGUKKwlnc3RfYWxsb2NfdHJhY2VfZ2V0CisJZ3N0X2FsbG9jX3RyYWNlX2xpc3QKKwlnc3RfYWxsb2NfdHJhY2VfbGl2ZV9hbGwKKwlnc3RfYWxsb2NfdHJhY2VfcHJpbnQKKwlnc3RfYWxsb2NfdHJhY2VfcHJpbnRfYWxsCisJZ3N0X2FsbG9jX3RyYWNlX3ByaW50X2xpdmUKKwlnc3RfYWxsb2NfdHJhY2Vfc2V0X2ZsYWdzCisJZ3N0X2FsbG9jX3RyYWNlX3NldF9mbGFnc19hbGwKKwlnc3RfYWxsb2NhdG9yX2FsbG9jCisJZ3N0X2FsbG9jYXRvcl9maW5kCisJZ3N0X2FsbG9jYXRvcl9yZWdpc3RlcgorCWdzdF9hbGxvY2F0b3Jfc2V0X2RlZmF1bHQKKwlnc3RfYXNzb2NfZmxhZ3NfZ2V0X3R5cGUKKwlnc3RfYXRvbWljX3F1ZXVlX2xlbmd0aAorCWdzdF9hdG9taWNfcXVldWVfbmV3CisJZ3N0X2F0b21pY19xdWV1ZV9wZWVrCisJZ3N0X2F0b21pY19xdWV1ZV9wb3AKKwlnc3RfYXRvbWljX3F1ZXVlX3B1c2gKKwlnc3RfYXRvbWljX3F1ZXVlX3JlZgorCWdzdF9hdG9taWNfcXVldWVfdW5yZWYKKwlnc3RfYmluX2FkZAorCWdzdF9iaW5fYWRkX21hbnkKKwlnc3RfYmluX2ZpbmRfdW5saW5rZWRfcGFkCisJZ3N0X2Jpbl9mbGFnc19nZXRfdHlwZQorCWdzdF9iaW5fZ2V0X2J5X2ludGVyZmFjZQorCWdzdF9iaW5fZ2V0X2J5X25hbWUKKwlnc3RfYmluX2dldF9ieV9uYW1lX3JlY3Vyc2VfdXAKKwlnc3RfYmluX2dldF90eXBlCisJZ3N0X2Jpbl9pdGVyYXRlX2FsbF9ieV9pbnRlcmZhY2UKKwlnc3RfYmluX2l0ZXJhdGVfZWxlbWVudHMKKwlnc3RfYmluX2l0ZXJhdGVfcmVjdXJzZQorCWdzdF9iaW5faXRlcmF0ZV9zaW5rcworCWdzdF9iaW5faXRlcmF0ZV9zb3J0ZWQKKwlnc3RfYmluX2l0ZXJhdGVfc291cmNlcworCWdzdF9iaW5fbmV3CisJZ3N0X2Jpbl9yZWNhbGN1bGF0ZV9sYXRlbmN5CisJZ3N0X2Jpbl9yZW1vdmUKKwlnc3RfYmluX3JlbW92ZV9tYW55CisJZ3N0X2J1ZmZlcl9hZGRfbWV0YQorCWdzdF9idWZmZXJfY29weV9mbGFnc19nZXRfdHlwZQorCWdzdF9idWZmZXJfY29weV9pbnRvCisJZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbgorCWdzdF9idWZmZXJfZXh0cmFjdAorCWdzdF9idWZmZXJfZmlsbAorCWdzdF9idWZmZXJfZmxhZ3NfZ2V0X3R5cGUKKwlnc3RfYnVmZmVyX2dldF9tZXRhCisJZ3N0X2J1ZmZlcl9nZXRfc2l6ZXMKKwlnc3RfYnVmZmVyX2dldF90eXBlCisJZ3N0X2J1ZmZlcl9pc19zcGFuX2Zhc3QKKwlnc3RfYnVmZmVyX2l0ZXJhdGVfbWV0YQorCWdzdF9idWZmZXJfam9pbgorCWdzdF9idWZmZXJfbGlzdF9mb3JlYWNoCisJZ3N0X2J1ZmZlcl9saXN0X2dldAorCWdzdF9idWZmZXJfbGlzdF9nZXRfdHlwZQorCWdzdF9idWZmZXJfbGlzdF9pbnNlcnQKKwlnc3RfYnVmZmVyX2xpc3RfbGVuCisJZ3N0X2J1ZmZlcl9saXN0X25ldworCWdzdF9idWZmZXJfbGlzdF9yZW1vdmUKKwlnc3RfYnVmZmVyX2xpc3Rfc2l6ZWRfbmV3CisJZ3N0X2J1ZmZlcl9tYXAKKwlnc3RfYnVmZmVyX21lbWNtcAorCWdzdF9idWZmZXJfbWVtc2V0CisJZ3N0X2J1ZmZlcl9tZXJnZQorCWdzdF9idWZmZXJfbl9tZW1vcnkKKwlnc3RfYnVmZmVyX25ldworCWdzdF9idWZmZXJfbmV3X2FsbG9jYXRlCisJZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZAorCWdzdF9idWZmZXJfbmV3X3dyYXBwZWRfZnVsbAorCWdzdF9idWZmZXJfcGVla19tZW1vcnkKKwlnc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXIKKwlnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2FkZF9vcHRpb24KKwlnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldAorCWdzdF9idWZmZXJfcG9vbF9jb25maWdfZ2V0X29wdGlvbgorCWdzdF9idWZmZXJfcG9vbF9jb25maWdfaGFzX29wdGlvbgorCWdzdF9idWZmZXJfcG9vbF9jb25maWdfbl9vcHRpb25zCisJZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXQKKwlnc3RfYnVmZmVyX3Bvb2xfZmxhZ3NfZ2V0X3R5cGUKKwlnc3RfYnVmZmVyX3Bvb2xfZ2V0X2NvbmZpZworCWdzdF9idWZmZXJfcG9vbF9nZXRfb3B0aW9ucworCWdzdF9idWZmZXJfcG9vbF9nZXRfdHlwZQorCWdzdF9idWZmZXJfcG9vbF9oYXNfb3B0aW9uCisJZ3N0X2J1ZmZlcl9wb29sX2lzX2FjdGl2ZQorCWdzdF9idWZmZXJfcG9vbF9uZXcKKwlnc3RfYnVmZmVyX3Bvb2xfcmVsZWFzZV9idWZmZXIKKwlnc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZQorCWdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnCisJZ3N0X2J1ZmZlcl9yZW1vdmVfbWVtb3J5X3JhbmdlCisJZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YQorCWdzdF9idWZmZXJfcmVzaXplCisJZ3N0X2J1ZmZlcl9zcGFuCisJZ3N0X2J1ZmZlcl90YWtlX21lbW9yeQorCWdzdF9idWZmZXJfdW5tYXAKKwlnc3RfYnVmZmVyaW5nX21vZGVfZ2V0X3R5cGUKKwlnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2gKKwlnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2hfZnVsbAorCWdzdF9idXNfYWRkX3dhdGNoCisJZ3N0X2J1c19hZGRfd2F0Y2hfZnVsbAorCWdzdF9idXNfYXN5bmNfc2lnbmFsX2Z1bmMKKwlnc3RfYnVzX2NyZWF0ZV93YXRjaAorCWdzdF9idXNfZGlzYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24KKwlnc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24KKwlnc3RfYnVzX2ZsYWdzX2dldF90eXBlCisJZ3N0X2J1c19nZXRfdHlwZQorCWdzdF9idXNfaGF2ZV9wZW5kaW5nCisJZ3N0X2J1c19uZXcKKwlnc3RfYnVzX3BlZWsKKwlnc3RfYnVzX3BvbGwKKwlnc3RfYnVzX3BvcAorCWdzdF9idXNfcG9wX2ZpbHRlcmVkCisJZ3N0X2J1c19wb3N0CisJZ3N0X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNoCisJZ3N0X2J1c19zZXRfZmx1c2hpbmcKKwlnc3RfYnVzX3NldF9zeW5jX2hhbmRsZXIKKwlnc3RfYnVzX3N5bmNfcmVwbHlfZ2V0X3R5cGUKKwlnc3RfYnVzX3N5bmNfc2lnbmFsX2hhbmRsZXIKKwlnc3RfYnVzX3RpbWVkX3BvcAorCWdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkCisJZ3N0X2NhcHNfYXBwZW5kCisJZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZQorCWdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QKKwlnc3RfY2Fwc19jb3B5X250aAorCWdzdF9jYXBzX2RvX3NpbXBsaWZ5CisJZ3N0X2NhcHNfZml4YXRlCisJZ3N0X2NhcHNfZmxhZ3NfZ2V0X3R5cGUKKwlnc3RfY2Fwc19mcm9tX3N0cmluZworCWdzdF9jYXBzX2dldF9zaXplCisJZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZQorCWdzdF9jYXBzX2dldF90eXBlCisJZ3N0X2NhcHNfaW50ZXJzZWN0CisJZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwKKwlnc3RfY2Fwc19pbnRlcnNlY3RfbW9kZV9nZXRfdHlwZQorCWdzdF9jYXBzX2lzX2Fsd2F5c19jb21wYXRpYmxlCisJZ3N0X2NhcHNfaXNfYW55CisJZ3N0X2NhcHNfaXNfZW1wdHkKKwlnc3RfY2Fwc19pc19lcXVhbAorCWdzdF9jYXBzX2lzX2VxdWFsX2ZpeGVkCisJZ3N0X2NhcHNfaXNfZml4ZWQKKwlnc3RfY2Fwc19pc19zdWJzZXQKKwlnc3RfY2Fwc19pc19zdWJzZXRfc3RydWN0dXJlCisJZ3N0X2NhcHNfbWVyZ2UKKwlnc3RfY2Fwc19tZXJnZV9zdHJ1Y3R1cmUKKwlnc3RfY2Fwc19uZXdfYW55CisJZ3N0X2NhcHNfbmV3X2VtcHR5CisJZ3N0X2NhcHNfbmV3X2Z1bGwKKwlnc3RfY2Fwc19uZXdfZnVsbF92YWxpc3QKKwlnc3RfY2Fwc19uZXdfc2ltcGxlCisJZ3N0X2NhcHNfbm9ybWFsaXplCisJZ3N0X2NhcHNfcmVtb3ZlX3N0cnVjdHVyZQorCWdzdF9jYXBzX3NldF9zaW1wbGUKKwlnc3RfY2Fwc19zZXRfc2ltcGxlX3ZhbGlzdAorCWdzdF9jYXBzX3NldF92YWx1ZQorCWdzdF9jYXBzX3N0ZWFsX3N0cnVjdHVyZQorCWdzdF9jYXBzX3N1YnRyYWN0CisJZ3N0X2NhcHNfdG9fc3RyaW5nCisJZ3N0X2NhcHNfdHJ1bmNhdGUKKwlnc3RfY2Fwc191bmlvbgorCWdzdF9jaGlsZF9wcm94eV9jaGlsZF9hZGRlZAorCWdzdF9jaGlsZF9wcm94eV9jaGlsZF9yZW1vdmVkCisJZ3N0X2NoaWxkX3Byb3h5X2dldAorCWdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfaW5kZXgKKwlnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X25hbWUKKwlnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkcmVuX2NvdW50CisJZ3N0X2NoaWxkX3Byb3h5X2dldF9wcm9wZXJ0eQorCWdzdF9jaGlsZF9wcm94eV9nZXRfdHlwZQorCWdzdF9jaGlsZF9wcm94eV9nZXRfdmFsaXN0CisJZ3N0X2NoaWxkX3Byb3h5X2xvb2t1cAorCWdzdF9jaGlsZF9wcm94eV9zZXQKKwlnc3RfY2hpbGRfcHJveHlfc2V0X3Byb3BlcnR5CisJZ3N0X2NoaWxkX3Byb3h5X3NldF92YWxpc3QKKwlnc3RfY2xvY2tfYWRkX29ic2VydmF0aW9uCisJZ3N0X2Nsb2NrX2FkanVzdF91bmxvY2tlZAorCWdzdF9jbG9ja19lbnRyeV90eXBlX2dldF90eXBlCisJZ3N0X2Nsb2NrX2ZsYWdzX2dldF90eXBlCisJZ3N0X2Nsb2NrX2dldF9jYWxpYnJhdGlvbgorCWdzdF9jbG9ja19nZXRfaW50ZXJuYWxfdGltZQorCWdzdF9jbG9ja19nZXRfbWFzdGVyCisJZ3N0X2Nsb2NrX2dldF9yZXNvbHV0aW9uCisJZ3N0X2Nsb2NrX2dldF90aW1lCisJZ3N0X2Nsb2NrX2dldF90eXBlCisJZ3N0X2Nsb2NrX2lkX2NvbXBhcmVfZnVuYworCWdzdF9jbG9ja19pZF9nZXRfdGltZQorCWdzdF9jbG9ja19pZF9yZWYKKwlnc3RfY2xvY2tfaWRfdW5yZWYKKwlnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZQorCWdzdF9jbG9ja19pZF93YWl0CisJZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMKKwlnc3RfY2xvY2tfaWRfd2FpdF9hc3luY19mdWxsCisJZ3N0X2Nsb2NrX25ld19wZXJpb2RpY19pZAorCWdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQKKwlnc3RfY2xvY2tfcGVyaW9kaWNfaWRfcmVpbml0CisJZ3N0X2Nsb2NrX3JldHVybl9nZXRfdHlwZQorCWdzdF9jbG9ja19zZXRfY2FsaWJyYXRpb24KKwlnc3RfY2xvY2tfc2V0X21hc3RlcgorCWdzdF9jbG9ja19zZXRfcmVzb2x1dGlvbgorCWdzdF9jbG9ja19zaW5nbGVfc2hvdF9pZF9yZWluaXQKKwlnc3RfY2xvY2tfdHlwZV9nZXRfdHlwZQorCWdzdF9jbG9ja191bmFkanVzdF91bmxvY2tlZAorCWdzdF9jb3JlX2Vycm9yX2dldF90eXBlCisJZ3N0X2NvcmVfZXJyb3JfcXVhcmsKKwlnc3RfZGF0ZV9nZXRfdHlwZQorCWdzdF9kYXRlX3RpbWVfZ2V0X2RheQorCWdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIKKwlnc3RfZGF0ZV90aW1lX2dldF9taWNyb3NlY29uZAorCWdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZQorCWdzdF9kYXRlX3RpbWVfZ2V0X21vbnRoCisJZ3N0X2RhdGVfdGltZV9nZXRfc2Vjb25kCisJZ3N0X2RhdGVfdGltZV9nZXRfdGltZV96b25lX29mZnNldAorCWdzdF9kYXRlX3RpbWVfZ2V0X3R5cGUKKwlnc3RfZGF0ZV90aW1lX2dldF95ZWFyCisJZ3N0X2RhdGVfdGltZV9uZXcKKwlnc3RfZGF0ZV90aW1lX25ld19mcm9tX3VuaXhfZXBvY2hfbG9jYWxfdGltZQorCWdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF91dGMKKwlnc3RfZGF0ZV90aW1lX25ld19sb2NhbF90aW1lCisJZ3N0X2RhdGVfdGltZV9uZXdfbm93X2xvY2FsX3RpbWUKKwlnc3RfZGF0ZV90aW1lX25ld19ub3dfdXRjCisJZ3N0X2RhdGVfdGltZV9yZWYKKwlnc3RfZGF0ZV90aW1lX3VucmVmCisJZ3N0X2RlYnVnX2FkZF9sb2dfZnVuY3Rpb24KKwlnc3RfZGVidWdfY2F0ZWdvcnlfZnJlZQorCWdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfY29sb3IKKwlnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X2Rlc2NyaXB0aW9uCisJZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9uYW1lCisJZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF90aHJlc2hvbGQKKwlnc3RfZGVidWdfY2F0ZWdvcnlfcmVzZXRfdGhyZXNob2xkCisJZ3N0X2RlYnVnX2NhdGVnb3J5X3NldF90aHJlc2hvbGQKKwlnc3RfZGVidWdfY29sb3JfZmxhZ3NfZ2V0X3R5cGUKKwlnc3RfZGVidWdfY29uc3RydWN0X3Rlcm1fY29sb3IKKwlnc3RfZGVidWdfY29uc3RydWN0X3dpbl9jb2xvcgorCWdzdF9kZWJ1Z19nZXRfYWxsX2NhdGVnb3JpZXMKKwlnc3RfZGVidWdfZ2V0X2RlZmF1bHRfdGhyZXNob2xkCisJZ3N0X2RlYnVnX2dyYXBoX2RldGFpbHNfZ2V0X3R5cGUKKwlnc3RfZGVidWdfaXNfYWN0aXZlCisJZ3N0X2RlYnVnX2lzX2NvbG9yZWQKKwlnc3RfZGVidWdfbGV2ZWxfZ2V0X25hbWUKKwlnc3RfZGVidWdfbGV2ZWxfZ2V0X3R5cGUKKwlnc3RfZGVidWdfbG9nCisJZ3N0X2RlYnVnX2xvZ19kZWZhdWx0CisJZ3N0X2RlYnVnX2xvZ192YWxpc3QKKwlnc3RfZGVidWdfbWVzc2FnZV9nZXQKKwlnc3RfZGVidWdfcHJpbnRfc3RhY2tfdHJhY2UKKwlnc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbgorCWdzdF9kZWJ1Z19yZW1vdmVfbG9nX2Z1bmN0aW9uX2J5X2RhdGEKKwlnc3RfZGVidWdfc2V0X2FjdGl2ZQorCWdzdF9kZWJ1Z19zZXRfY29sb3JlZAorCWdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGQKKwlnc3RfZGVidWdfc2V0X3RocmVzaG9sZF9mb3JfbmFtZQorCWdzdF9kZWJ1Z191bnNldF90aHJlc2hvbGRfZm9yX25hbWUKKwlnc3RfZGVmYXVsdF9yZWdpc3RyeV9jaGVja19mZWF0dXJlX3ZlcnNpb24KKwlnc3RfZGVpbml0CisJZ3N0X2RvdWJsZV9yYW5nZV9nZXRfdHlwZQorCWdzdF9lbGVtZW50X2Fib3J0X3N0YXRlCisJZ3N0X2VsZW1lbnRfYWRkX3BhZAorCWdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZQorCWdzdF9lbGVtZW50X2NsYXNzX2FkZF9tZXRhZGF0YQorCWdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUKKwlnc3RfZWxlbWVudF9jbGFzc19nZXRfbWV0YWRhdGEKKwlnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlCisJZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZV9saXN0CisJZ3N0X2VsZW1lbnRfY2xhc3NfaW5zdGFsbF9zdGRfcHJvcHMKKwlnc3RfZWxlbWVudF9jbGFzc19zZXRfbWV0YWRhdGEKKwlnc3RfZWxlbWVudF9jb250aW51ZV9zdGF0ZQorCWdzdF9lbGVtZW50X2NyZWF0ZV9hbGxfcGFkcworCWdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NpbmtfYWxsX2NhcHMKKwlnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zaW5rX2FueV9jYXBzCisJZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc3JjX2FsbF9jYXBzCisJZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc3JjX2FueV9jYXBzCisJZ3N0X2VsZW1lbnRfZmFjdG9yeV9jcmVhdGUKKwlnc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmQKKwlnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9lbGVtZW50X3R5cGUKKwlnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YQorCWdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X251bV9wYWRfdGVtcGxhdGVzCisJZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfc3RhdGljX3BhZF90ZW1wbGF0ZXMKKwlnc3RfZWxlbWVudF9mYWN0b3J5X2dldF90eXBlCisJZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfdXJpX3Byb3RvY29scworCWdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3VyaV90eXBlCisJZ3N0X2VsZW1lbnRfZmFjdG9yeV9oYXNfaW50ZXJmYWNlCisJZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2ZpbHRlcgorCWdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMKKwlnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfaXNfdHlwZQorCWdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZQorCWdzdF9lbGVtZW50X2ZsYWdzX2dldF90eXBlCisJZ3N0X2VsZW1lbnRfZm91bmRfdGFncworCWdzdF9lbGVtZW50X2ZvdW5kX3RhZ3NfZm9yX3BhZAorCWdzdF9lbGVtZW50X2dldF9iYXNlX3RpbWUKKwlnc3RfZWxlbWVudF9nZXRfYnVzCisJZ3N0X2VsZW1lbnRfZ2V0X2Nsb2NrCisJZ3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkCisJZ3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkX3RlbXBsYXRlCisJZ3N0X2VsZW1lbnRfZ2V0X2ZhY3RvcnkKKwlnc3RfZWxlbWVudF9nZXRfaW5kZXgKKwlnc3RfZWxlbWVudF9nZXRfcXVlcnlfdHlwZXMKKwlnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQKKwlnc3RfZWxlbWVudF9nZXRfc3RhcnRfdGltZQorCWdzdF9lbGVtZW50X2dldF9zdGF0ZQorCWdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkCisJZ3N0X2VsZW1lbnRfZ2V0X3R5cGUKKwlnc3RfZWxlbWVudF9pc19pbmRleGFibGUKKwlnc3RfZWxlbWVudF9pc19sb2NrZWRfc3RhdGUKKwlnc3RfZWxlbWVudF9pdGVyYXRlX3BhZHMKKwlnc3RfZWxlbWVudF9pdGVyYXRlX3NpbmtfcGFkcworCWdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMKKwlnc3RfZWxlbWVudF9saW5rCisJZ3N0X2VsZW1lbnRfbGlua19maWx0ZXJlZAorCWdzdF9lbGVtZW50X2xpbmtfbWFueQorCWdzdF9lbGVtZW50X2xpbmtfcGFkcworCWdzdF9lbGVtZW50X2xpbmtfcGFkc19maWx0ZXJlZAorCWdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsCisJZ3N0X2VsZW1lbnRfbG9zdF9zdGF0ZQorCWdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkKKwlnc3RfZWxlbWVudF9tZXNzYWdlX2Z1bGwKKwlnc3RfZWxlbWVudF9ub19tb3JlX3BhZHMKKwlnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UKKwlnc3RfZWxlbWVudF9wcm92aWRlX2Nsb2NrCisJZ3N0X2VsZW1lbnRfcHJvdmlkZXNfY2xvY2sKKwlnc3RfZWxlbWVudF9xdWVyeQorCWdzdF9lbGVtZW50X3F1ZXJ5X2NvbnZlcnQKKwlnc3RfZWxlbWVudF9xdWVyeV9kdXJhdGlvbgorCWdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uCisJZ3N0X2VsZW1lbnRfcmVnaXN0ZXIKKwlnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkCisJZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZAorCWdzdF9lbGVtZW50X3JlcXVlc3RfcGFkCisJZ3N0X2VsZW1lbnRfcmVxdWlyZXNfY2xvY2sKKwlnc3RfZWxlbWVudF9zZWVrCisJZ3N0X2VsZW1lbnRfc2Vla19zaW1wbGUKKwlnc3RfZWxlbWVudF9zZW5kX2V2ZW50CisJZ3N0X2VsZW1lbnRfc2V0X2Jhc2VfdGltZQorCWdzdF9lbGVtZW50X3NldF9idXMKKwlnc3RfZWxlbWVudF9zZXRfY2xvY2sKKwlnc3RfZWxlbWVudF9zZXRfaW5kZXgKKwlnc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlCisJZ3N0X2VsZW1lbnRfc2V0X3N0YXJ0X3RpbWUKKwlnc3RfZWxlbWVudF9zZXRfc3RhdGUKKwlnc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VfcmV0dXJuX2dldF9uYW1lCisJZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUKKwlnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50CisJZ3N0X2VsZW1lbnRfdW5saW5rCisJZ3N0X2VsZW1lbnRfdW5saW5rX21hbnkKKwlnc3RfZWxlbWVudF91bmxpbmtfcGFkcworCWdzdF9lcnJvcl9nZXRfbWVzc2FnZQorCWdzdF9ldmVudF9jb3B5X3NlZ21lbnQKKwlnc3RfZXZlbnRfZ2V0X3NlcW51bQorCWdzdF9ldmVudF9nZXRfc3RydWN0dXJlCisJZ3N0X2V2ZW50X2dldF90eXBlCisJZ3N0X2V2ZW50X2hhc19uYW1lCisJZ3N0X2V2ZW50X25ld19idWZmZXJfc2l6ZQorCWdzdF9ldmVudF9uZXdfY2FwcworCWdzdF9ldmVudF9uZXdfY3VzdG9tCisJZ3N0X2V2ZW50X25ld19lb3MKKwlnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0CisJZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wCisJZ3N0X2V2ZW50X25ld19sYXRlbmN5CisJZ3N0X2V2ZW50X25ld19uYXZpZ2F0aW9uCisJZ3N0X2V2ZW50X25ld19xb3MKKwlnc3RfZXZlbnRfbmV3X3JlY29uZmlndXJlCisJZ3N0X2V2ZW50X25ld19zZWVrCisJZ3N0X2V2ZW50X25ld19zZWdtZW50CisJZ3N0X2V2ZW50X25ld19zaW5rX21lc3NhZ2UKKwlnc3RfZXZlbnRfbmV3X3N0ZXAKKwlnc3RfZXZlbnRfbmV3X3RhZworCWdzdF9ldmVudF9wYXJzZV9idWZmZXJfc2l6ZQorCWdzdF9ldmVudF9wYXJzZV9jYXBzCisJZ3N0X2V2ZW50X3BhcnNlX2ZsdXNoX3N0b3AKKwlnc3RfZXZlbnRfcGFyc2VfbGF0ZW5jeQorCWdzdF9ldmVudF9wYXJzZV9xb3MKKwlnc3RfZXZlbnRfcGFyc2Vfc2VlaworCWdzdF9ldmVudF9wYXJzZV9zZWdtZW50CisJZ3N0X2V2ZW50X3BhcnNlX3NpbmtfbWVzc2FnZQorCWdzdF9ldmVudF9wYXJzZV9zdGVwCisJZ3N0X2V2ZW50X3BhcnNlX3RhZworCWdzdF9ldmVudF9zZXRfc2VxbnVtCisJZ3N0X2V2ZW50X3R5cGVfZmxhZ3NfZ2V0X3R5cGUKKwlnc3RfZXZlbnRfdHlwZV9nZXRfZmxhZ3MKKwlnc3RfZXZlbnRfdHlwZV9nZXRfbmFtZQorCWdzdF9ldmVudF90eXBlX2dldF90eXBlCisJZ3N0X2V2ZW50X3R5cGVfdG9fcXVhcmsKKwlnc3RfZXZlbnRfd3JpdGFibGVfc3RydWN0dXJlCisJZ3N0X2ZpbGVuYW1lX3RvX3VyaQorCWdzdF9maWx0ZXJfcnVuCisJZ3N0X2Zsb3dfZ2V0X25hbWUKKwlnc3RfZmxvd19yZXR1cm5fZ2V0X3R5cGUKKwlnc3RfZmxvd190b19xdWFyaworCWdzdF9mb3JtYXRfZ2V0X2J5X25pY2sKKwlnc3RfZm9ybWF0X2dldF9kZXRhaWxzCisJZ3N0X2Zvcm1hdF9nZXRfbmFtZQorCWdzdF9mb3JtYXRfZ2V0X3R5cGUKKwlnc3RfZm9ybWF0X2l0ZXJhdGVfZGVmaW5pdGlvbnMKKwlnc3RfZm9ybWF0X3JlZ2lzdGVyCisJZ3N0X2Zvcm1hdF90b19xdWFyaworCWdzdF9mb3JtYXRzX2NvbnRhaW5zCisJZ3N0X2ZyYWN0aW9uX2dldF90eXBlCisJZ3N0X2ZyYWN0aW9uX3JhbmdlX2dldF90eXBlCisJZ3N0X2dfZXJyb3JfZ2V0X3R5cGUKKwlnc3RfZ2hvc3RfcGFkX2FjdGl2YXRlX3B1bGxfZGVmYXVsdAorCWdzdF9naG9zdF9wYWRfYWN0aXZhdGVfcHVzaF9kZWZhdWx0CisJZ3N0X2dob3N0X3BhZF9jb25zdHJ1Y3QKKwlnc3RfZ2hvc3RfcGFkX2dldF90YXJnZXQKKwlnc3RfZ2hvc3RfcGFkX2dldF90eXBlCisJZ3N0X2dob3N0X3BhZF9pbnRlcm5hbF9hY3RpdmF0ZV9wdWxsX2RlZmF1bHQKKwlnc3RfZ2hvc3RfcGFkX2ludGVybmFsX2FjdGl2YXRlX3B1c2hfZGVmYXVsdAorCWdzdF9naG9zdF9wYWRfbGlua19kZWZhdWx0CisJZ3N0X2dob3N0X3BhZF9uZXcKKwlnc3RfZ2hvc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlCisJZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0CisJZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0X2Zyb21fdGVtcGxhdGUKKwlnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQKKwlnc3RfZ2hvc3RfcGFkX3VubGlua19kZWZhdWx0CisJZ3N0X2luZGV4X2FkZF9hc3NvY2lhdGlvbgorCWdzdF9pbmRleF9hZGRfYXNzb2NpYXRpb252CisJZ3N0X2luZGV4X2FkZF9mb3JtYXQKKwlnc3RfaW5kZXhfYWRkX2lkCisJZ3N0X2luZGV4X2FkZF9vYmplY3QKKwlnc3RfaW5kZXhfY2VydGFpbnR5X2dldF90eXBlCisJZ3N0X2luZGV4X2NvbW1pdAorCWdzdF9pbmRleF9lbnRyeV9hc3NvY19tYXAKKwlnc3RfaW5kZXhfZW50cnlfY29weQorCWdzdF9pbmRleF9lbnRyeV9mcmVlCisJZ3N0X2luZGV4X2VudHJ5X2dldF90eXBlCisJZ3N0X2luZGV4X2VudHJ5X3R5cGVfZ2V0X3R5cGUKKwlnc3RfaW5kZXhfZmFjdG9yeV9jcmVhdGUKKwlnc3RfaW5kZXhfZmFjdG9yeV9kZXN0cm95CisJZ3N0X2luZGV4X2ZhY3RvcnlfZmluZAorCWdzdF9pbmRleF9mYWN0b3J5X2dldF90eXBlCisJZ3N0X2luZGV4X2ZhY3RvcnlfbWFrZQorCWdzdF9pbmRleF9mYWN0b3J5X25ldworCWdzdF9pbmRleF9mbGFnc19nZXRfdHlwZQorCWdzdF9pbmRleF9nZXRfYXNzb2NfZW50cnkKKwlnc3RfaW5kZXhfZ2V0X2Fzc29jX2VudHJ5X2Z1bGwKKwlnc3RfaW5kZXhfZ2V0X2NlcnRhaW50eQorCWdzdF9pbmRleF9nZXRfZ3JvdXAKKwlnc3RfaW5kZXhfZ2V0X3R5cGUKKwlnc3RfaW5kZXhfZ2V0X3dyaXRlcl9pZAorCWdzdF9pbmRleF9sb29rdXBfbWV0aG9kX2dldF90eXBlCisJZ3N0X2luZGV4X25ldworCWdzdF9pbmRleF9uZXdfZ3JvdXAKKwlnc3RfaW5kZXhfcmVzb2x2ZXJfbWV0aG9kX2dldF90eXBlCisJZ3N0X2luZGV4X3NldF9jZXJ0YWludHkKKwlnc3RfaW5kZXhfc2V0X2ZpbHRlcgorCWdzdF9pbmRleF9zZXRfZmlsdGVyX2Z1bGwKKwlnc3RfaW5kZXhfc2V0X2dyb3VwCisJZ3N0X2luZGV4X3NldF9yZXNvbHZlcgorCWdzdF9pbmRleF9zZXRfcmVzb2x2ZXJfZnVsbAorCWdzdF9pbml0CisJZ3N0X2luaXRfY2hlY2sKKwlnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwCisJZ3N0X2ludDY0X3JhbmdlX2dldF90eXBlCisJZ3N0X2ludF9yYW5nZV9nZXRfdHlwZQorCWdzdF9pc19pbml0aWFsaXplZAorCWdzdF9pc190YWdfbGlzdAorCWdzdF9pdGVyYXRvcl9jb3B5CisJZ3N0X2l0ZXJhdG9yX2ZpbHRlcgorCWdzdF9pdGVyYXRvcl9maW5kX2N1c3RvbQorCWdzdF9pdGVyYXRvcl9mb2xkCisJZ3N0X2l0ZXJhdG9yX2ZvcmVhY2gKKwlnc3RfaXRlcmF0b3JfZnJlZQorCWdzdF9pdGVyYXRvcl9nZXRfdHlwZQorCWdzdF9pdGVyYXRvcl9pdGVtX2dldF90eXBlCisJZ3N0X2l0ZXJhdG9yX25ldworCWdzdF9pdGVyYXRvcl9uZXdfbGlzdAorCWdzdF9pdGVyYXRvcl9uZXdfc2luZ2xlCisJZ3N0X2l0ZXJhdG9yX25leHQKKwlnc3RfaXRlcmF0b3JfcHVzaAorCWdzdF9pdGVyYXRvcl9yZXN1bHRfZ2V0X3R5cGUKKwlnc3RfaXRlcmF0b3JfcmVzeW5jCisJZ3N0X2xpYnJhcnlfZXJyb3JfZ2V0X3R5cGUKKwlnc3RfbGlicmFyeV9lcnJvcl9xdWFyaworCWdzdF9tYXBfZmxhZ3NfZ2V0X3R5cGUKKwlnc3RfbWFyc2hhbF9CT09MRUFOX19CT1hFRAorCWdzdF9tYXJzaGFsX0JPT0xFQU5fX1BPSU5URVIKKwlnc3RfbWFyc2hhbF9CT09MRUFOX19WT0lECisJZ3N0X21hcnNoYWxfQk9YRURfX0JPWEVECisJZ3N0X21hcnNoYWxfUE9JTlRFUl9fUE9JTlRFUgorCWdzdF9tYXJzaGFsX1ZPSURfX0JPWEVEX09CSkVDVAorCWdzdF9tYXJzaGFsX1ZPSURfX0lOVDY0CisJZ3N0X21hcnNoYWxfVk9JRF9fSU5UX0lOVAorCWdzdF9tYXJzaGFsX1ZPSURfX09CSkVDVF9CT1hFRAorCWdzdF9tYXJzaGFsX1ZPSURfX09CSkVDVF9CT1hFRF9TVFJJTkcKKwlnc3RfbWFyc2hhbF9WT0lEX19PQkpFQ1RfT0JKRUNUCisJZ3N0X21hcnNoYWxfVk9JRF9fT0JKRUNUX09CSkVDVF9TVFJJTkcKKwlnc3RfbWFyc2hhbF9WT0lEX19PQkpFQ1RfUEFSQU0KKwlnc3RfbWFyc2hhbF9WT0lEX19PQkpFQ1RfUE9JTlRFUgorCWdzdF9tYXJzaGFsX1ZPSURfX09CSkVDVF9TVFJJTkcKKwlnc3RfbWFyc2hhbF9WT0lEX19QT0lOVEVSX09CSkVDVAorCWdzdF9tYXJzaGFsX1ZPSURfX1VJTlRfQk9YRUQKKwlnc3RfbWVtb3J5X2FsaWdubWVudCBEQVRBCisJZ3N0X21lbW9yeV9jb3B5CisJZ3N0X21lbW9yeV9mbGFnc19nZXRfdHlwZQorCWdzdF9tZW1vcnlfZ2V0X3NpemVzCisJZ3N0X21lbW9yeV9pc19zcGFuCisJZ3N0X21lbW9yeV9tYXAKKwlnc3RfbWVtb3J5X25ld193cmFwcGVkCisJZ3N0X21lbW9yeV9yZWYKKwlnc3RfbWVtb3J5X3Jlc2l6ZQorCWdzdF9tZW1vcnlfc2hhcmUKKwlnc3RfbWVtb3J5X3VubWFwCisJZ3N0X21lbW9yeV91bnJlZgorCWdzdF9tZXNzYWdlX2dldF9zZXFudW0KKwlnc3RfbWVzc2FnZV9nZXRfc3RyZWFtX3N0YXR1c19vYmplY3QKKwlnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlCisJZ3N0X21lc3NhZ2VfZ2V0X3R5cGUKKwlnc3RfbWVzc2FnZV9oYXNfbmFtZQorCWdzdF9tZXNzYWdlX25ld19hcHBsaWNhdGlvbgorCWdzdF9tZXNzYWdlX25ld19hc3luY19kb25lCisJZ3N0X21lc3NhZ2VfbmV3X2FzeW5jX3N0YXJ0CisJZ3N0X21lc3NhZ2VfbmV3X2J1ZmZlcmluZworCWdzdF9tZXNzYWdlX25ld19jbG9ja19sb3N0CisJZ3N0X21lc3NhZ2VfbmV3X2Nsb2NrX3Byb3ZpZGUKKwlnc3RfbWVzc2FnZV9uZXdfY3VzdG9tCisJZ3N0X21lc3NhZ2VfbmV3X2R1cmF0aW9uCisJZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQKKwlnc3RfbWVzc2FnZV9uZXdfZW9zCisJZ3N0X21lc3NhZ2VfbmV3X2Vycm9yCisJZ3N0X21lc3NhZ2VfbmV3X2luZm8KKwlnc3RfbWVzc2FnZV9uZXdfbGF0ZW5jeQorCWdzdF9tZXNzYWdlX25ld19uZXdfY2xvY2sKKwlnc3RfbWVzc2FnZV9uZXdfcHJvZ3Jlc3MKKwlnc3RfbWVzc2FnZV9uZXdfcW9zCisJZ3N0X21lc3NhZ2VfbmV3X3JlcXVlc3Rfc3RhdGUKKwlnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lCisJZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfc3RhcnQKKwlnc3RfbWVzc2FnZV9uZXdfc3RhdGVfY2hhbmdlZAorCWdzdF9tZXNzYWdlX25ld19zdGF0ZV9kaXJ0eQorCWdzdF9tZXNzYWdlX25ld19zdGVwX2RvbmUKKwlnc3RfbWVzc2FnZV9uZXdfc3RlcF9zdGFydAorCWdzdF9tZXNzYWdlX25ld19zdHJlYW1fc3RhdHVzCisJZ3N0X21lc3NhZ2VfbmV3X3N0cnVjdHVyZV9jaGFuZ2UKKwlnc3RfbWVzc2FnZV9uZXdfdGFnCisJZ3N0X21lc3NhZ2VfbmV3X3dhcm5pbmcKKwlnc3RfbWVzc2FnZV9wYXJzZV9hc3luY19kb25lCisJZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nCisJZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nX3N0YXRzCisJZ3N0X21lc3NhZ2VfcGFyc2VfY2xvY2tfbG9zdAorCWdzdF9tZXNzYWdlX3BhcnNlX2Nsb2NrX3Byb3ZpZGUKKwlnc3RfbWVzc2FnZV9wYXJzZV9kdXJhdGlvbgorCWdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yCisJZ3N0X21lc3NhZ2VfcGFyc2VfaW5mbworCWdzdF9tZXNzYWdlX3BhcnNlX25ld19jbG9jaworCWdzdF9tZXNzYWdlX3BhcnNlX3Byb2dyZXNzCisJZ3N0X21lc3NhZ2VfcGFyc2VfcW9zCisJZ3N0X21lc3NhZ2VfcGFyc2VfcW9zX3N0YXRzCisJZ3N0X21lc3NhZ2VfcGFyc2VfcW9zX3ZhbHVlcworCWdzdF9tZXNzYWdlX3BhcnNlX3JlcXVlc3Rfc3RhdGUKKwlnc3RfbWVzc2FnZV9wYXJzZV9zZWdtZW50X2RvbmUKKwlnc3RfbWVzc2FnZV9wYXJzZV9zZWdtZW50X3N0YXJ0CisJZ3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZAorCWdzdF9tZXNzYWdlX3BhcnNlX3N0ZXBfZG9uZQorCWdzdF9tZXNzYWdlX3BhcnNlX3N0ZXBfc3RhcnQKKwlnc3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1fc3RhdHVzCisJZ3N0X21lc3NhZ2VfcGFyc2Vfc3RydWN0dXJlX2NoYW5nZQorCWdzdF9tZXNzYWdlX3BhcnNlX3RhZworCWdzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmcKKwlnc3RfbWVzc2FnZV9zZXRfYnVmZmVyaW5nX3N0YXRzCisJZ3N0X21lc3NhZ2Vfc2V0X3Fvc19zdGF0cworCWdzdF9tZXNzYWdlX3NldF9xb3NfdmFsdWVzCisJZ3N0X21lc3NhZ2Vfc2V0X3NlcW51bQorCWdzdF9tZXNzYWdlX3NldF9zdHJlYW1fc3RhdHVzX29iamVjdAorCWdzdF9tZXNzYWdlX3R5cGVfZ2V0X25hbWUKKwlnc3RfbWVzc2FnZV90eXBlX2dldF90eXBlCisJZ3N0X21lc3NhZ2VfdHlwZV90b19xdWFyaworCWdzdF9tZXRhX2dldF9pbmZvCisJZ3N0X21ldGFfcmVnaXN0ZXIKKwlnc3RfbWV0YV90aW1pbmdfZ2V0X2luZm8KKwlnc3RfbWluaV9vYmplY3RfY29weQorCWdzdF9taW5pX29iamVjdF9mbGFnc19nZXRfdHlwZQorCWdzdF9taW5pX29iamVjdF9pbml0CisJZ3N0X21pbmlfb2JqZWN0X2lzX3dyaXRhYmxlCisJZ3N0X21pbmlfb2JqZWN0X21ha2Vfd3JpdGFibGUKKwlnc3RfbWluaV9vYmplY3RfcmVmCisJZ3N0X21pbmlfb2JqZWN0X3JlcGxhY2UKKwlnc3RfbWluaV9vYmplY3Rfc3RlYWwKKwlnc3RfbWluaV9vYmplY3RfdGFrZQorCWdzdF9taW5pX29iamVjdF91bnJlZgorCWdzdF9taW5pX29iamVjdF93ZWFrX3JlZgorCWdzdF9taW5pX29iamVjdF93ZWFrX3VucmVmCisJZ3N0X29iamVjdF9jaGVja191bmlxdWVuZXNzCisJZ3N0X29iamVjdF9kZWZhdWx0X2RlZXBfbm90aWZ5CisJZ3N0X29iamVjdF9kZWZhdWx0X2Vycm9yCisJZ3N0X29iamVjdF9mbGFnc19nZXRfdHlwZQorCWdzdF9vYmplY3RfZ2V0X25hbWUKKwlnc3Rfb2JqZWN0X2dldF9wYXJlbnQKKwlnc3Rfb2JqZWN0X2dldF9wYXRoX3N0cmluZworCWdzdF9vYmplY3RfZ2V0X3R5cGUKKwlnc3Rfb2JqZWN0X2hhc19hbmNlc3RvcgorCWdzdF9vYmplY3RfcmVmCisJZ3N0X29iamVjdF9yZWZfc2luaworCWdzdF9vYmplY3RfcmVwbGFjZQorCWdzdF9vYmplY3Rfc2V0X25hbWUKKwlnc3Rfb2JqZWN0X3NldF9wYXJlbnQKKwlnc3Rfb2JqZWN0X3VucGFyZW50CisJZ3N0X29iamVjdF91bnJlZgorCWdzdF9wYWRfYWNjZXB0X2NhcHMKKwlnc3RfcGFkX2FjdGl2YXRlX3B1bGwKKwlnc3RfcGFkX2FjdGl2YXRlX3B1c2gKKwlnc3RfcGFkX2FkZF9wcm9iZQorCWdzdF9wYWRfY2FuX2xpbmsKKwlnc3RfcGFkX2NoYWluCisJZ3N0X3BhZF9jaGFpbl9saXN0CisJZ3N0X3BhZF9jaGVja19yZWNvbmZpZ3VyZQorCWdzdF9wYWRfZGlyZWN0aW9uX2dldF90eXBlCisJZ3N0X3BhZF9ldmVudF9kZWZhdWx0CisJZ3N0X3BhZF9maXhhdGVfY2FwcworCWdzdF9wYWRfZmxhZ3NfZ2V0X3R5cGUKKwlnc3RfcGFkX2ZvcndhcmQKKwlnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHMKKwlnc3RfcGFkX2dldF9jYXBzCisJZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzCisJZ3N0X3BhZF9nZXRfZGlyZWN0aW9uCisJZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlCisJZ3N0X3BhZF9nZXRfb2Zmc2V0CisJZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlCisJZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMKKwlnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudAorCWdzdF9wYWRfZ2V0X3BlZXIKKwlnc3RfcGFkX2dldF9xdWVyeV90eXBlcworCWdzdF9wYWRfZ2V0X3F1ZXJ5X3R5cGVzX2RlZmF1bHQKKwlnc3RfcGFkX2dldF9yYW5nZQorCWdzdF9wYWRfZ2V0X3N0aWNreV9ldmVudAorCWdzdF9wYWRfZ2V0X3R5cGUKKwlnc3RfcGFkX2hhc19jdXJyZW50X2NhcHMKKwlnc3RfcGFkX2lzX2FjdGl2ZQorCWdzdF9wYWRfaXNfYmxvY2tlZAorCWdzdF9wYWRfaXNfYmxvY2tpbmcKKwlnc3RfcGFkX2lzX2xpbmtlZAorCWdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rcworCWdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19kZWZhdWx0CisJZ3N0X3BhZF9saW5rCisJZ3N0X3BhZF9saW5rX2NoZWNrX2dldF90eXBlCisJZ3N0X3BhZF9saW5rX2Z1bGwKKwlnc3RfcGFkX2xpbmtfcmV0dXJuX2dldF90eXBlCisJZ3N0X3BhZF9tYXJrX3JlY29uZmlndXJlCisJZ3N0X3BhZF9uZXcKKwlnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZQorCWdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUKKwlnc3RfcGFkX3BhdXNlX3Rhc2sKKwlnc3RfcGFkX3BlZXJfYWNjZXB0X2NhcHMKKwlnc3RfcGFkX3BlZXJfZ2V0X2NhcHMKKwlnc3RfcGFkX3BlZXJfcXVlcnkKKwlnc3RfcGFkX3ByZXNlbmNlX2dldF90eXBlCisJZ3N0X3BhZF9wcm94eV9nZXRjYXBzCisJZ3N0X3BhZF9wdWxsX3JhbmdlCisJZ3N0X3BhZF9wdXNoCisJZ3N0X3BhZF9wdXNoX2V2ZW50CisJZ3N0X3BhZF9wdXNoX2xpc3QKKwlnc3RfcGFkX3F1ZXJ5CisJZ3N0X3BhZF9xdWVyeV9jb252ZXJ0CisJZ3N0X3BhZF9xdWVyeV9kZWZhdWx0CisJZ3N0X3BhZF9xdWVyeV9kdXJhdGlvbgorCWdzdF9wYWRfcXVlcnlfcGVlcl9jb252ZXJ0CisJZ3N0X3BhZF9xdWVyeV9wZWVyX2R1cmF0aW9uCisJZ3N0X3BhZF9xdWVyeV9wZWVyX3Bvc2l0aW9uCisJZ3N0X3BhZF9xdWVyeV9wb3NpdGlvbgorCWdzdF9wYWRfcmVtb3ZlX3Byb2JlCisJZ3N0X3BhZF9zZW5kX2V2ZW50CisJZ3N0X3BhZF9zZXRfYWNjZXB0Y2Fwc19mdW5jdGlvbgorCWdzdF9wYWRfc2V0X2FjdGl2YXRlX2Z1bmN0aW9uCisJZ3N0X3BhZF9zZXRfYWN0aXZhdGVwdWxsX2Z1bmN0aW9uCisJZ3N0X3BhZF9zZXRfYWN0aXZhdGVwdXNoX2Z1bmN0aW9uCisJZ3N0X3BhZF9zZXRfYWN0aXZlCisJZ3N0X3BhZF9zZXRfY2FwcworCWdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uCisJZ3N0X3BhZF9zZXRfY2hhaW5fbGlzdF9mdW5jdGlvbgorCWdzdF9wYWRfc2V0X2VsZW1lbnRfcHJpdmF0ZQorCWdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uCisJZ3N0X3BhZF9zZXRfZml4YXRlY2Fwc19mdW5jdGlvbgorCWdzdF9wYWRfc2V0X2dldGNhcHNfZnVuY3Rpb24KKwlnc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbgorCWdzdF9wYWRfc2V0X2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZnVuY3Rpb24KKwlnc3RfcGFkX3NldF9saW5rX2Z1bmN0aW9uCisJZ3N0X3BhZF9zZXRfb2Zmc2V0CisJZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24KKwlnc3RfcGFkX3NldF9xdWVyeV90eXBlX2Z1bmN0aW9uCisJZ3N0X3BhZF9zZXRfdW5saW5rX2Z1bmN0aW9uCisJZ3N0X3BhZF9zdGFydF90YXNrCisJZ3N0X3BhZF9zdGlja3lfZXZlbnRzX2ZvcmVhY2gKKwlnc3RfcGFkX3N0b3BfdGFzaworCWdzdF9wYWRfdGVtcGxhdGVfZmxhZ3NfZ2V0X3R5cGUKKwlnc3RfcGFkX3RlbXBsYXRlX2dldF9jYXBzCisJZ3N0X3BhZF90ZW1wbGF0ZV9nZXRfdHlwZQorCWdzdF9wYWRfdGVtcGxhdGVfbmV3CisJZ3N0X3BhZF90ZW1wbGF0ZV9wYWRfY3JlYXRlZAorCWdzdF9wYWRfdW5saW5rCisJZ3N0X3BhZF91c2VfZml4ZWRfY2FwcworCWdzdF9wYXJhbV9zcGVjX2ZyYWN0aW9uCisJZ3N0X3BhcmFtX3NwZWNfZnJhY3Rpb25fZ2V0X3R5cGUKKwlnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb24KKwlnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb25fZnVsbAorCWdzdF9wYXJzZV9jb250ZXh0X2ZyZWUKKwlnc3RfcGFyc2VfY29udGV4dF9nZXRfbWlzc2luZ19lbGVtZW50cworCWdzdF9wYXJzZV9jb250ZXh0X2dldF90eXBlCisJZ3N0X3BhcnNlX2NvbnRleHRfbmV3CisJZ3N0X3BhcnNlX2Vycm9yX2dldF90eXBlCisJZ3N0X3BhcnNlX2Vycm9yX3F1YXJrCisJZ3N0X3BhcnNlX2ZsYWdzX2dldF90eXBlCisJZ3N0X3BhcnNlX2xhdW5jaAorCWdzdF9wYXJzZV9sYXVuY2hfZnVsbAorCWdzdF9wYXJzZV9sYXVuY2h2CisJZ3N0X3BhcnNlX2xhdW5jaHZfZnVsbAorCWdzdF9waXBlbGluZV9hdXRvX2Nsb2NrCisJZ3N0X3BpcGVsaW5lX2ZsYWdzX2dldF90eXBlCisJZ3N0X3BpcGVsaW5lX2dldF9hdXRvX2ZsdXNoX2J1cworCWdzdF9waXBlbGluZV9nZXRfYnVzCisJZ3N0X3BpcGVsaW5lX2dldF9jbG9jaworCWdzdF9waXBlbGluZV9nZXRfZGVsYXkKKwlnc3RfcGlwZWxpbmVfZ2V0X3R5cGUKKwlnc3RfcGlwZWxpbmVfbmV3CisJZ3N0X3BpcGVsaW5lX3NldF9hdXRvX2ZsdXNoX2J1cworCWdzdF9waXBlbGluZV9zZXRfY2xvY2sKKwlnc3RfcGlwZWxpbmVfc2V0X2RlbGF5CisJZ3N0X3BpcGVsaW5lX3VzZV9jbG9jaworCWdzdF9wbHVnaW5fYWRkX2RlcGVuZGVuY3kKKwlnc3RfcGx1Z2luX2FkZF9kZXBlbmRlbmN5X3NpbXBsZQorCWdzdF9wbHVnaW5fZGVwZW5kZW5jeV9mbGFnc19nZXRfdHlwZQorCWdzdF9wbHVnaW5fZXJyb3JfZ2V0X3R5cGUKKwlnc3RfcGx1Z2luX2Vycm9yX3F1YXJrCisJZ3N0X3BsdWdpbl9mZWF0dXJlX2NoZWNrX3ZlcnNpb24KKwlnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3JhbmsKKwlnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3R5cGUKKwlnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9jb3B5CisJZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZGVidWcKKwlnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlCisJZ3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQKKwlnc3RfcGx1Z2luX2ZlYXR1cmVfcmFua19jb21wYXJlX2Z1bmMKKwlnc3RfcGx1Z2luX2ZlYXR1cmVfc2V0X3JhbmsKKwlnc3RfcGx1Z2luX2ZlYXR1cmVfdHlwZV9uYW1lX2ZpbHRlcgorCWdzdF9wbHVnaW5fZmxhZ3NfZ2V0X3R5cGUKKwlnc3RfcGx1Z2luX2dldF9jYWNoZV9kYXRhCisJZ3N0X3BsdWdpbl9nZXRfZGVzY3JpcHRpb24KKwlnc3RfcGx1Z2luX2dldF9maWxlbmFtZQorCWdzdF9wbHVnaW5fZ2V0X2xpY2Vuc2UKKwlnc3RfcGx1Z2luX2dldF9tb2R1bGUKKwlnc3RfcGx1Z2luX2dldF9uYW1lCisJZ3N0X3BsdWdpbl9nZXRfb3JpZ2luCisJZ3N0X3BsdWdpbl9nZXRfcGFja2FnZQorCWdzdF9wbHVnaW5fZ2V0X3NvdXJjZQorCWdzdF9wbHVnaW5fZ2V0X3R5cGUKKwlnc3RfcGx1Z2luX2dldF92ZXJzaW9uCisJZ3N0X3BsdWdpbl9pc19sb2FkZWQKKwlnc3RfcGx1Z2luX2xpc3RfZnJlZQorCWdzdF9wbHVnaW5fbG9hZAorCWdzdF9wbHVnaW5fbG9hZF9ieV9uYW1lCisJZ3N0X3BsdWdpbl9sb2FkX2ZpbGUKKwlnc3RfcGx1Z2luX25hbWVfZmlsdGVyCisJZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWMKKwlnc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpY19mdWxsCisJZ3N0X3BsdWdpbl9zZXRfY2FjaGVfZGF0YQorCWdzdF9wb2xsX2FkZF9mZAorCWdzdF9wb2xsX2ZkX2Nhbl9yZWFkCisJZ3N0X3BvbGxfZmRfY2FuX3dyaXRlCisJZ3N0X3BvbGxfZmRfY3RsX3JlYWQKKwlnc3RfcG9sbF9mZF9jdGxfd3JpdGUKKwlnc3RfcG9sbF9mZF9oYXNfY2xvc2VkCisJZ3N0X3BvbGxfZmRfaGFzX2Vycm9yCisJZ3N0X3BvbGxfZmRfaWdub3JlZAorCWdzdF9wb2xsX2ZkX2luaXQKKwlnc3RfcG9sbF9mcmVlCisJZ3N0X3BvbGxfZ2V0X3JlYWRfZ3BvbGxmZAorCWdzdF9wb2xsX25ldworCWdzdF9wb2xsX25ld190aW1lcgorCWdzdF9wb2xsX3JlYWRfY29udHJvbAorCWdzdF9wb2xsX3JlbW92ZV9mZAorCWdzdF9wb2xsX3Jlc3RhcnQKKwlnc3RfcG9sbF9zZXRfY29udHJvbGxhYmxlCisJZ3N0X3BvbGxfc2V0X2ZsdXNoaW5nCisJZ3N0X3BvbGxfd2FpdAorCWdzdF9wb2xsX3dyaXRlX2NvbnRyb2wKKwlnc3RfcHJlc2V0X2RlbGV0ZV9wcmVzZXQKKwlnc3RfcHJlc2V0X2dldF9tZXRhCisJZ3N0X3ByZXNldF9nZXRfcHJlc2V0X25hbWVzCisJZ3N0X3ByZXNldF9nZXRfcHJvcGVydHlfbmFtZXMKKwlnc3RfcHJlc2V0X2dldF90eXBlCisJZ3N0X3ByZXNldF9sb2FkX3ByZXNldAorCWdzdF9wcmVzZXRfcmVuYW1lX3ByZXNldAorCWdzdF9wcmVzZXRfc2F2ZV9wcmVzZXQKKwlnc3RfcHJlc2V0X3NldF9tZXRhCisJZ3N0X3ByaW50X2VsZW1lbnRfYXJncworCWdzdF9wcmludF9wYWRfY2FwcworCWdzdF9wcm9iZV9yZXR1cm5fZ2V0X3R5cGUKKwlnc3RfcHJvYmVfdHlwZV9nZXRfdHlwZQorCWdzdF9wcm9ncmVzc190eXBlX2dldF90eXBlCisJZ3N0X3Byb3h5X3BhZF9hY2NlcHRjYXBzX2RlZmF1bHQKKwlnc3RfcHJveHlfcGFkX2NoYWluX2RlZmF1bHQKKwlnc3RfcHJveHlfcGFkX2NoYWluX2xpc3RfZGVmYXVsdAorCWdzdF9wcm94eV9wYWRfZXZlbnRfZGVmYXVsdAorCWdzdF9wcm94eV9wYWRfZml4YXRlY2Fwc19kZWZhdWx0CisJZ3N0X3Byb3h5X3BhZF9nZXRfaW50ZXJuYWwKKwlnc3RfcHJveHlfcGFkX2dldF90eXBlCisJZ3N0X3Byb3h5X3BhZF9nZXRjYXBzX2RlZmF1bHQKKwlnc3RfcHJveHlfcGFkX2dldHJhbmdlX2RlZmF1bHQKKwlnc3RfcHJveHlfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZGVmYXVsdAorCWdzdF9wcm94eV9wYWRfcXVlcnlfZGVmYXVsdAorCWdzdF9wcm94eV9wYWRfcXVlcnlfdHlwZV9kZWZhdWx0CisJZ3N0X3Byb3h5X3BhZF91bmxpbmtfZGVmYXVsdAorCWdzdF9xb3NfdHlwZV9nZXRfdHlwZQorCWdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9tZW1vcnkKKwlnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fbWV0YQorCWdzdF9xdWVyeV9hZGRfYnVmZmVyaW5nX3JhbmdlCisJZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fbWVtb3JpZXMKKwlnc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9tZXRhcworCWdzdF9xdWVyeV9nZXRfbl9idWZmZXJpbmdfcmFuZ2VzCisJZ3N0X3F1ZXJ5X2dldF9zdHJ1Y3R1cmUKKwlnc3RfcXVlcnlfZ2V0X3R5cGUKKwlnc3RfcXVlcnlfaGFzX2FsbG9jYXRpb25fbWV0YQorCWdzdF9xdWVyeV9uZXdfYWxsb2NhdGlvbgorCWdzdF9xdWVyeV9uZXdfYnVmZmVyaW5nCisJZ3N0X3F1ZXJ5X25ld19jb252ZXJ0CisJZ3N0X3F1ZXJ5X25ld19jdXN0b20KKwlnc3RfcXVlcnlfbmV3X2R1cmF0aW9uCisJZ3N0X3F1ZXJ5X25ld19mb3JtYXRzCisJZ3N0X3F1ZXJ5X25ld19sYXRlbmN5CisJZ3N0X3F1ZXJ5X25ld19wb3NpdGlvbgorCWdzdF9xdWVyeV9uZXdfc2NoZWR1bGluZworCWdzdF9xdWVyeV9uZXdfc2Vla2luZworCWdzdF9xdWVyeV9uZXdfc2VnbWVudAorCWdzdF9xdWVyeV9uZXdfdXJpCisJZ3N0X3F1ZXJ5X3BhcnNlX2FsbG9jYXRpb24KKwlnc3RfcXVlcnlfcGFyc2VfYWxsb2NhdGlvbl9wYXJhbXMKKwlnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3BlcmNlbnQKKwlnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3JhbmdlCisJZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19zdGF0cworCWdzdF9xdWVyeV9wYXJzZV9jb252ZXJ0CisJZ3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uCisJZ3N0X3F1ZXJ5X3BhcnNlX2xhdGVuY3kKKwlnc3RfcXVlcnlfcGFyc2Vfbl9mb3JtYXRzCisJZ3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX21lbW9yeQorCWdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9tZXRhCisJZ3N0X3F1ZXJ5X3BhcnNlX250aF9idWZmZXJpbmdfcmFuZ2UKKwlnc3RfcXVlcnlfcGFyc2VfbnRoX2Zvcm1hdAorCWdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbgorCWdzdF9xdWVyeV9wYXJzZV9zY2hlZHVsaW5nCisJZ3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmcKKwlnc3RfcXVlcnlfcGFyc2Vfc2VnbWVudAorCWdzdF9xdWVyeV9wYXJzZV91cmkKKwlnc3RfcXVlcnlfc2V0X2FsbG9jYXRpb25fcGFyYW1zCisJZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfcGVyY2VudAorCWdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3JhbmdlCisJZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfc3RhdHMKKwlnc3RfcXVlcnlfc2V0X2NvbnZlcnQKKwlnc3RfcXVlcnlfc2V0X2R1cmF0aW9uCisJZ3N0X3F1ZXJ5X3NldF9mb3JtYXRzCisJZ3N0X3F1ZXJ5X3NldF9mb3JtYXRzdgorCWdzdF9xdWVyeV9zZXRfbGF0ZW5jeQorCWdzdF9xdWVyeV9zZXRfcG9zaXRpb24KKwlnc3RfcXVlcnlfc2V0X3NjaGVkdWxpbmcKKwlnc3RfcXVlcnlfc2V0X3NlZWtpbmcKKwlnc3RfcXVlcnlfc2V0X3NlZ21lbnQKKwlnc3RfcXVlcnlfc2V0X3VyaQorCWdzdF9xdWVyeV90eXBlX2dldF9ieV9uaWNrCisJZ3N0X3F1ZXJ5X3R5cGVfZ2V0X2RldGFpbHMKKwlnc3RfcXVlcnlfdHlwZV9nZXRfbmFtZQorCWdzdF9xdWVyeV90eXBlX2dldF90eXBlCisJZ3N0X3F1ZXJ5X3R5cGVfaXRlcmF0ZV9kZWZpbml0aW9ucworCWdzdF9xdWVyeV90eXBlX3JlZ2lzdGVyCisJZ3N0X3F1ZXJ5X3R5cGVfdG9fcXVhcmsKKwlnc3RfcXVlcnlfdHlwZXNfY29udGFpbnMKKwlnc3RfcXVlcnlfd3JpdGFibGVfc3RydWN0dXJlCisJZ3N0X3JhbmtfZ2V0X3R5cGUKKwlnc3RfcmVnaXN0cnlfYWRkX2ZlYXR1cmUKKwlnc3RfcmVnaXN0cnlfYWRkX3BhdGgKKwlnc3RfcmVnaXN0cnlfYWRkX3BsdWdpbgorCWdzdF9yZWdpc3RyeV9mZWF0dXJlX2ZpbHRlcgorCWdzdF9yZWdpc3RyeV9maW5kX2ZlYXR1cmUKKwlnc3RfcmVnaXN0cnlfZmluZF9wbHVnaW4KKwlnc3RfcmVnaXN0cnlfZm9ya19pc19lbmFibGVkCisJZ3N0X3JlZ2lzdHJ5X2Zvcmtfc2V0X2VuYWJsZWQKKwlnc3RfcmVnaXN0cnlfZ2V0X2RlZmF1bHQKKwlnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdAorCWdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2J5X3BsdWdpbgorCWdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2Nvb2tpZQorCWdzdF9yZWdpc3RyeV9nZXRfcGF0aF9saXN0CisJZ3N0X3JlZ2lzdHJ5X2dldF9wbHVnaW5fbGlzdAorCWdzdF9yZWdpc3RyeV9nZXRfdHlwZQorCWdzdF9yZWdpc3RyeV9sb29rdXAKKwlnc3RfcmVnaXN0cnlfbG9va3VwX2ZlYXR1cmUKKwlnc3RfcmVnaXN0cnlfcGx1Z2luX2ZpbHRlcgorCWdzdF9yZWdpc3RyeV9yZW1vdmVfZmVhdHVyZQorCWdzdF9yZWdpc3RyeV9yZW1vdmVfcGx1Z2luCisJZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aAorCWdzdF9yZXNvdXJjZV9lcnJvcl9nZXRfdHlwZQorCWdzdF9yZXNvdXJjZV9lcnJvcl9xdWFyaworCWdzdF9zZWFyY2hfbW9kZV9nZXRfdHlwZQorCWdzdF9zZWVrX2ZsYWdzX2dldF90eXBlCisJZ3N0X3NlZWtfdHlwZV9nZXRfdHlwZQorCWdzdF9zZWdtZW50X2NsaXAKKwlnc3Rfc2VnbWVudF9jb3B5CisJZ3N0X3NlZ21lbnRfY29weV9pbnRvCisJZ3N0X3NlZ21lbnRfZG9fc2VlaworCWdzdF9zZWdtZW50X2ZsYWdzX2dldF90eXBlCisJZ3N0X3NlZ21lbnRfZnJlZQorCWdzdF9zZWdtZW50X2dldF90eXBlCisJZ3N0X3NlZ21lbnRfaW5pdAorCWdzdF9zZWdtZW50X25ldworCWdzdF9zZWdtZW50X3NldF9ydW5uaW5nX3RpbWUKKwlnc3Rfc2VnbWVudF90b19wb3NpdGlvbgorCWdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZQorCWdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lCisJZ3N0X3NlZ3RyYXBfaXNfZW5hYmxlZAorCWdzdF9zZWd0cmFwX3NldF9lbmFibGVkCisJZ3N0X3N0YXRlX2NoYW5nZV9nZXRfdHlwZQorCWdzdF9zdGF0ZV9jaGFuZ2VfcmV0dXJuX2dldF90eXBlCisJZ3N0X3N0YXRlX2dldF90eXBlCisJZ3N0X3N0YXRpY19jYXBzX2NsZWFudXAKKwlnc3Rfc3RhdGljX2NhcHNfZ2V0CisJZ3N0X3N0YXRpY19jYXBzX2dldF90eXBlCisJZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0CisJZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHMKKwlnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXRfdHlwZQorCWdzdF9zdHJlYW1fZXJyb3JfZ2V0X3R5cGUKKwlnc3Rfc3RyZWFtX2Vycm9yX3F1YXJrCisJZ3N0X3N0cmVhbV9zdGF0dXNfdHlwZV9nZXRfdHlwZQorCWdzdF9zdHJ1Y3R1cmVfY2FuX2ludGVyc2VjdAorCWdzdF9zdHJ1Y3R1cmVfY2hhbmdlX3R5cGVfZ2V0X3R5cGUKKwlnc3Rfc3RydWN0dXJlX2NvcHkKKwlnc3Rfc3RydWN0dXJlX2VtcHR5X25ldworCWdzdF9zdHJ1Y3R1cmVfZml4YXRlCisJZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGQKKwlnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9ib29sZWFuCisJZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9kb3VibGUKKwlnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ZyYWN0aW9uCisJZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9pbnQKKwlnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9zdHJpbmcKKwlnc3Rfc3RydWN0dXJlX2ZvcmVhY2gKKwlnc3Rfc3RydWN0dXJlX2ZyZWUKKwlnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nCisJZ3N0X3N0cnVjdHVyZV9nZXQKKwlnc3Rfc3RydWN0dXJlX2dldF9ib29sZWFuCisJZ3N0X3N0cnVjdHVyZV9nZXRfY2xvY2tfdGltZQorCWdzdF9zdHJ1Y3R1cmVfZ2V0X2RhdGUKKwlnc3Rfc3RydWN0dXJlX2dldF9kYXRlX3RpbWUKKwlnc3Rfc3RydWN0dXJlX2dldF9kb3VibGUKKwlnc3Rfc3RydWN0dXJlX2dldF9lbnVtCisJZ3N0X3N0cnVjdHVyZV9nZXRfZmllbGRfdHlwZQorCWdzdF9zdHJ1Y3R1cmVfZ2V0X2ZyYWN0aW9uCisJZ3N0X3N0cnVjdHVyZV9nZXRfaW50CisJZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZQorCWdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWVfaWQKKwlnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcKKwlnc3Rfc3RydWN0dXJlX2dldF91aW50CisJZ3N0X3N0cnVjdHVyZV9nZXRfdmFsaXN0CisJZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUKKwlnc3Rfc3RydWN0dXJlX2hhc19maWVsZAorCWdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkX3R5cGVkCisJZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZQorCWdzdF9zdHJ1Y3R1cmVfaWRfZW1wdHlfbmV3CisJZ3N0X3N0cnVjdHVyZV9pZF9nZXQKKwlnc3Rfc3RydWN0dXJlX2lkX2dldF92YWxpc3QKKwlnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZQorCWdzdF9zdHJ1Y3R1cmVfaWRfaGFzX2ZpZWxkCisJZ3N0X3N0cnVjdHVyZV9pZF9oYXNfZmllbGRfdHlwZWQKKwlnc3Rfc3RydWN0dXJlX2lkX25ldworCWdzdF9zdHJ1Y3R1cmVfaWRfc2V0CisJZ3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsaXN0CisJZ3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsdWUKKwlnc3Rfc3RydWN0dXJlX2lkX3Rha2VfdmFsdWUKKwlnc3Rfc3RydWN0dXJlX2ludGVyc2VjdAorCWdzdF9zdHJ1Y3R1cmVfaXNfZXF1YWwKKwlnc3Rfc3RydWN0dXJlX2lzX3N1YnNldAorCWdzdF9zdHJ1Y3R1cmVfbWFwX2luX3BsYWNlCisJZ3N0X3N0cnVjdHVyZV9uX2ZpZWxkcworCWdzdF9zdHJ1Y3R1cmVfbmV3CisJZ3N0X3N0cnVjdHVyZV9uZXdfdmFsaXN0CisJZ3N0X3N0cnVjdHVyZV9udGhfZmllbGRfbmFtZQorCWdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2FsbF9maWVsZHMKKwlnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZAorCWdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkcworCWdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkc192YWxpc3QKKwlnc3Rfc3RydWN0dXJlX3NldAorCWdzdF9zdHJ1Y3R1cmVfc2V0X25hbWUKKwlnc3Rfc3RydWN0dXJlX3NldF9wYXJlbnRfcmVmY291bnQKKwlnc3Rfc3RydWN0dXJlX3NldF92YWxpc3QKKwlnc3Rfc3RydWN0dXJlX3NldF92YWx1ZQorCWdzdF9zdHJ1Y3R1cmVfdGFrZV92YWx1ZQorCWdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nCisJZ3N0X3N5c3RlbV9jbG9ja19nZXRfdHlwZQorCWdzdF9zeXN0ZW1fY2xvY2tfb2J0YWluCisJZ3N0X3RhZ19leGlzdHMKKwlnc3RfdGFnX2ZsYWdfZ2V0X3R5cGUKKwlnc3RfdGFnX2dldF9kZXNjcmlwdGlvbgorCWdzdF90YWdfZ2V0X2ZsYWcKKwlnc3RfdGFnX2dldF9uaWNrCisJZ3N0X3RhZ19nZXRfdHlwZQorCWdzdF90YWdfaXNfZml4ZWQKKwlnc3RfdGFnX2xpc3RfYWRkCisJZ3N0X3RhZ19saXN0X2FkZF92YWxpc3QKKwlnc3RfdGFnX2xpc3RfYWRkX3ZhbGlzdF92YWx1ZXMKKwlnc3RfdGFnX2xpc3RfYWRkX3ZhbHVlCisJZ3N0X3RhZ19saXN0X2FkZF92YWx1ZXMKKwlnc3RfdGFnX2xpc3RfY29weQorCWdzdF90YWdfbGlzdF9jb3B5X3ZhbHVlCisJZ3N0X3RhZ19saXN0X2ZvcmVhY2gKKwlnc3RfdGFnX2xpc3RfZnJlZQorCWdzdF90YWdfbGlzdF9nZXRfYm9vbGVhbgorCWdzdF90YWdfbGlzdF9nZXRfYm9vbGVhbl9pbmRleAorCWdzdF90YWdfbGlzdF9nZXRfYnVmZmVyCisJZ3N0X3RhZ19saXN0X2dldF9idWZmZXJfaW5kZXgKKwlnc3RfdGFnX2xpc3RfZ2V0X2NoYXIKKwlnc3RfdGFnX2xpc3RfZ2V0X2NoYXJfaW5kZXgKKwlnc3RfdGFnX2xpc3RfZ2V0X2RhdGUKKwlnc3RfdGFnX2xpc3RfZ2V0X2RhdGVfaW5kZXgKKwlnc3RfdGFnX2xpc3RfZ2V0X2RhdGVfdGltZQorCWdzdF90YWdfbGlzdF9nZXRfZGF0ZV90aW1lX2luZGV4CisJZ3N0X3RhZ19saXN0X2dldF9kb3VibGUKKwlnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZV9pbmRleAorCWdzdF90YWdfbGlzdF9nZXRfZmxvYXQKKwlnc3RfdGFnX2xpc3RfZ2V0X2Zsb2F0X2luZGV4CisJZ3N0X3RhZ19saXN0X2dldF9pbnQKKwlnc3RfdGFnX2xpc3RfZ2V0X2ludDY0CisJZ3N0X3RhZ19saXN0X2dldF9pbnQ2NF9pbmRleAorCWdzdF90YWdfbGlzdF9nZXRfaW50X2luZGV4CisJZ3N0X3RhZ19saXN0X2dldF9sb25nCisJZ3N0X3RhZ19saXN0X2dldF9sb25nX2luZGV4CisJZ3N0X3RhZ19saXN0X2dldF9wb2ludGVyCisJZ3N0X3RhZ19saXN0X2dldF9wb2ludGVyX2luZGV4CisJZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcKKwlnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZ19pbmRleAorCWdzdF90YWdfbGlzdF9nZXRfdGFnX3NpemUKKwlnc3RfdGFnX2xpc3RfZ2V0X3R5cGUKKwlnc3RfdGFnX2xpc3RfZ2V0X3VjaGFyCisJZ3N0X3RhZ19saXN0X2dldF91Y2hhcl9pbmRleAorCWdzdF90YWdfbGlzdF9nZXRfdWludAorCWdzdF90YWdfbGlzdF9nZXRfdWludDY0CisJZ3N0X3RhZ19saXN0X2dldF91aW50NjRfaW5kZXgKKwlnc3RfdGFnX2xpc3RfZ2V0X3VpbnRfaW5kZXgKKwlnc3RfdGFnX2xpc3RfZ2V0X3Vsb25nCisJZ3N0X3RhZ19saXN0X2dldF91bG9uZ19pbmRleAorCWdzdF90YWdfbGlzdF9nZXRfdmFsdWVfaW5kZXgKKwlnc3RfdGFnX2xpc3RfaW5zZXJ0CisJZ3N0X3RhZ19saXN0X2lzX2VtcHR5CisJZ3N0X3RhZ19saXN0X21lcmdlCisJZ3N0X3RhZ19saXN0X25ldworCWdzdF90YWdfbGlzdF9uZXdfZnVsbAorCWdzdF90YWdfbGlzdF9uZXdfZnVsbF92YWxpc3QKKwlnc3RfdGFnX2xpc3RfcGVla19zdHJpbmdfaW5kZXgKKwlnc3RfdGFnX2xpc3RfcmVtb3ZlX3RhZworCWdzdF90YWdfbWVyZ2VfbW9kZV9nZXRfdHlwZQorCWdzdF90YWdfbWVyZ2Vfc3RyaW5nc193aXRoX2NvbW1hCisJZ3N0X3RhZ19tZXJnZV91c2VfZmlyc3QKKwlnc3RfdGFnX3JlZ2lzdGVyCisJZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWxpc3QKKwlnc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbGlzdF92YWx1ZXMKKwlnc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbHVlCisJZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWx1ZXMKKwlnc3RfdGFnX3NldHRlcl9hZGRfdGFncworCWdzdF90YWdfc2V0dGVyX2dldF90YWdfbGlzdAorCWdzdF90YWdfc2V0dGVyX2dldF90YWdfbWVyZ2VfbW9kZQorCWdzdF90YWdfc2V0dGVyX2dldF90eXBlCisJZ3N0X3RhZ19zZXR0ZXJfbWVyZ2VfdGFncworCWdzdF90YWdfc2V0dGVyX3Jlc2V0X3RhZ3MKKwlnc3RfdGFnX3NldHRlcl9zZXRfdGFnX21lcmdlX21vZGUKKwlnc3RfdGFza19jbGVhbnVwX2FsbAorCWdzdF90YXNrX2NyZWF0ZQorCWdzdF90YXNrX2dldF9wb29sCisJZ3N0X3Rhc2tfZ2V0X3N0YXRlCisJZ3N0X3Rhc2tfZ2V0X3R5cGUKKwlnc3RfdGFza19qb2luCisJZ3N0X3Rhc2tfcGF1c2UKKwlnc3RfdGFza19wb29sX2NsZWFudXAKKwlnc3RfdGFza19wb29sX2dldF90eXBlCisJZ3N0X3Rhc2tfcG9vbF9qb2luCisJZ3N0X3Rhc2tfcG9vbF9uZXcKKwlnc3RfdGFza19wb29sX3ByZXBhcmUKKwlnc3RfdGFza19wb29sX3B1c2gKKwlnc3RfdGFza19zZXRfbG9jaworCWdzdF90YXNrX3NldF9wb29sCisJZ3N0X3Rhc2tfc2V0X3ByaW9yaXR5CisJZ3N0X3Rhc2tfc2V0X3N0YXRlCisJZ3N0X3Rhc2tfc2V0X3RocmVhZF9jYWxsYmFja3MKKwlnc3RfdGFza19zdGFydAorCWdzdF90YXNrX3N0YXRlX2dldF90eXBlCisJZ3N0X3Rhc2tfc3RvcAorCWdzdF90cmFjZV9kZXN0cm95CisJZ3N0X3RyYWNlX2ZsdXNoCisJZ3N0X3RyYWNlX25ldworCWdzdF90cmFjZV9yZWFkX3RzYworCWdzdF90cmFjZV9zZXRfZGVmYXVsdAorCWdzdF90cmFjZV90ZXh0X2ZsdXNoCisJZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2NhbGxfZnVuY3Rpb24KKwlnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2NhcHMKKwlnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2V4dGVuc2lvbnMKKwlnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2xpc3QKKwlnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X3R5cGUKKwlnc3RfdHlwZV9maW5kX2dldF9sZW5ndGgKKwlnc3RfdHlwZV9maW5kX2dldF90eXBlCisJZ3N0X3R5cGVfZmluZF9wZWVrCisJZ3N0X3R5cGVfZmluZF9wcm9iYWJpbGl0eV9nZXRfdHlwZQorCWdzdF90eXBlX2ZpbmRfcmVnaXN0ZXIKKwlnc3RfdHlwZV9maW5kX3N1Z2dlc3QKKwlnc3RfdHlwZV9maW5kX3N1Z2dlc3Rfc2ltcGxlCisJZ3N0X3R5cGVfcmVnaXN0ZXJfc3RhdGljX2Z1bGwKKwlnc3RfdXBkYXRlX3JlZ2lzdHJ5CisJZ3N0X3VyaV9jb25zdHJ1Y3QKKwlnc3RfdXJpX2dldF9sb2NhdGlvbgorCWdzdF91cmlfZ2V0X3Byb3RvY29sCisJZ3N0X3VyaV9oYW5kbGVyX2dldF9wcm90b2NvbHMKKwlnc3RfdXJpX2hhbmRsZXJfZ2V0X3R5cGUKKwlnc3RfdXJpX2hhbmRsZXJfZ2V0X3VyaQorCWdzdF91cmlfaGFuZGxlcl9nZXRfdXJpX3R5cGUKKwlnc3RfdXJpX2hhbmRsZXJfbmV3X3VyaQorCWdzdF91cmlfaGFuZGxlcl9zZXRfdXJpCisJZ3N0X3VyaV9oYXNfcHJvdG9jb2wKKwlnc3RfdXJpX2lzX3ZhbGlkCisJZ3N0X3VyaV9wcm90b2NvbF9pc19zdXBwb3J0ZWQKKwlnc3RfdXJpX3Byb3RvY29sX2lzX3ZhbGlkCisJZ3N0X3VyaV90eXBlX2dldF90eXBlCisJZ3N0X3V0aWxfYXJyYXlfYmluYXJ5X3NlYXJjaAorCWdzdF91dGlsX2RvdWJsZV90b19mcmFjdGlvbgorCWdzdF91dGlsX2R1bXBfbWVtCisJZ3N0X3V0aWxfZnJhY3Rpb25fYWRkCisJZ3N0X3V0aWxfZnJhY3Rpb25fY29tcGFyZQorCWdzdF91dGlsX2ZyYWN0aW9uX211bHRpcGx5CisJZ3N0X3V0aWxfZnJhY3Rpb25fdG9fZG91YmxlCisJZ3N0X3V0aWxfZ2RvdWJsZV90b19ndWludDY0CisJZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcAorCWdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yCisJZ3N0X3V0aWxfZ3VpbnQ2NF90b19nZG91YmxlCisJZ3N0X3V0aWxfc2VxbnVtX2NvbXBhcmUKKwlnc3RfdXRpbF9zZXFudW1fbmV4dAorCWdzdF91dGlsX3NldF9vYmplY3RfYXJnCisJZ3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nCisJZ3N0X3V0aWxfdWludDY0X3NjYWxlCisJZ3N0X3V0aWxfdWludDY0X3NjYWxlX2NlaWwKKwlnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50CisJZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9jZWlsCisJZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZAorCWdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZAorCWdzdF92YWx1ZV9hcnJheV9hcHBlbmRfdmFsdWUKKwlnc3RfdmFsdWVfYXJyYXlfZ2V0X3NpemUKKwlnc3RfdmFsdWVfYXJyYXlfZ2V0X3R5cGUKKwlnc3RfdmFsdWVfYXJyYXlfZ2V0X3ZhbHVlCisJZ3N0X3ZhbHVlX2FycmF5X3ByZXBlbmRfdmFsdWUKKwlnc3RfdmFsdWVfY2FuX2NvbXBhcmUKKwlnc3RfdmFsdWVfY2FuX2ludGVyc2VjdAorCWdzdF92YWx1ZV9jYW5fc3VidHJhY3QKKwlnc3RfdmFsdWVfY2FuX3VuaW9uCisJZ3N0X3ZhbHVlX2NvbXBhcmUKKwlnc3RfdmFsdWVfZGVzZXJpYWxpemUKKwlnc3RfdmFsdWVfZml4YXRlCisJZ3N0X3ZhbHVlX2ZyYWN0aW9uX211bHRpcGx5CisJZ3N0X3ZhbHVlX2ZyYWN0aW9uX3N1YnRyYWN0CisJZ3N0X3ZhbHVlX2dldF9jYXBzCisJZ3N0X3ZhbHVlX2dldF9kYXRlCisJZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWF4CisJZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWluCisJZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9kZW5vbWluYXRvcgorCWdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fbnVtZXJhdG9yCisJZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9tYXgKKwlnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21pbgorCWdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWF4CisJZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9taW4KKwlnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXgKKwlnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW4KKwlnc3RfdmFsdWVfZ2V0X3N0cnVjdHVyZQorCWdzdF92YWx1ZV9pbml0X2FuZF9jb3B5CisJZ3N0X3ZhbHVlX2ludGVyc2VjdAorCWdzdF92YWx1ZV9pc19maXhlZAorCWdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZQorCWdzdF92YWx1ZV9saXN0X2NvbmNhdAorCWdzdF92YWx1ZV9saXN0X2dldF9zaXplCisJZ3N0X3ZhbHVlX2xpc3RfZ2V0X3R5cGUKKwlnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUKKwlnc3RfdmFsdWVfbGlzdF9tZXJnZQorCWdzdF92YWx1ZV9saXN0X3ByZXBlbmRfdmFsdWUKKwlnc3RfdmFsdWVfcmVnaXN0ZXIKKwlnc3RfdmFsdWVfcmVnaXN0ZXJfaW50ZXJzZWN0X2Z1bmMKKwlnc3RfdmFsdWVfcmVnaXN0ZXJfc3VidHJhY3RfZnVuYworCWdzdF92YWx1ZV9yZWdpc3Rlcl91bmlvbl9mdW5jCisJZ3N0X3ZhbHVlX3NlcmlhbGl6ZQorCWdzdF92YWx1ZV9zZXRfY2FwcworCWdzdF92YWx1ZV9zZXRfZGF0ZQorCWdzdF92YWx1ZV9zZXRfZG91YmxlX3JhbmdlCisJZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbgorCWdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2UKKwlnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlX2Z1bGwKKwlnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlCisJZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2UKKwlnc3RfdmFsdWVfc2V0X3N0cnVjdHVyZQorCWdzdF92YWx1ZV9zdWJ0cmFjdAorCWdzdF92YWx1ZV91bmlvbgorCWdzdF92ZXJzaW9uCisJZ3N0X3ZlcnNpb25fc3RyaW5nCmRpZmYgLS1naXQgYS93aW4zMi92czYvZ3JhbW1hci5kc3AgYi93aW4zMi92czYvZ3JhbW1hci5kc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg2MzM3NwotLS0gL2Rldi9udWxsCisrKyBiL3dpbjMyL3ZzNi9ncmFtbWFyLmRzcApAQCAtMCwwICsxLDI2MyBAQAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJncmFtbWFyIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KKyMgKiogRE8gTk9UIEVESVQgKioNCisNCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBHZW5lcmljIFByb2plY3QiIDB4MDEwYQ0KKw0KK0NGRz1ncmFtbWFyIC0gV2luMzIgRGVidWcNCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgTk1BS0UgL2YgImdyYW1tYXIubWFrIi4NCishTUVTU0FHRSANCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQorIU1FU1NBR0UgDQorIU1FU1NBR0UgTk1BS0UgL2YgImdyYW1tYXIubWFrIiBDRkc9ImdyYW1tYXIgLSBXaW4zMiBEZWJ1ZyINCishTUVTU0FHRSANCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCishTUVTU0FHRSANCishTUVTU0FHRSAiZ3JhbW1hciAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgR2VuZXJpYyBQcm9qZWN0IikNCishTUVTU0FHRSAiZ3JhbW1hciAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIEdlbmVyaWMgUHJvamVjdCIpDQorIU1FU1NBR0UgDQorDQorIyBCZWdpbiBQcm9qZWN0DQorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCisjIFBST1AgU2NjX1Byb2pOYW1lICIiDQorIyBQUk9QIFNjY19Mb2NhbFBhdGggIiINCitNVEw9bWlkbC5leGUNCisNCishSUYgICIkKENGRykiID09ICJncmFtbWFyIC0gV2luMzIgUmVsZWFzZSINCisNCisjIFBST1AgQkFTRSBVc2VfTUZDIDANCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KKyMgUFJPUCBVc2VfTUZDIDANCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIE91dHB1dF9EaXIgIlJlbGVhc2UiDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAiZ3JhbW1hciAtIFdpbjMyIERlYnVnIg0KKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBPdXRwdXRfRGlyICJEZWJ1ZyINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCisNCishRU5ESUYgDQorDQorIyBCZWdpbiBUYXJnZXQNCisNCisjIE5hbWUgImdyYW1tYXIgLSBXaW4zMiBSZWxlYXNlIg0KKyMgTmFtZSAiZ3JhbW1hciAtIFdpbjMyIERlYnVnIg0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XHBhcnNlXGdyYW1tYXIueQ0KKw0KKyFJRiAgIiQoQ0ZHKSIgPT0gImdyYW1tYXIgLSBXaW4zMiBSZWxlYXNlIg0KKw0KKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkDQorSW5wdXRQYXRoPS4uXC4uXGdzdFxwYXJzZVxncmFtbWFyLnkNCisNCitCdWlsZENtZHM9IFwNCisJY29weSAveSAuLlwuLlxnc3RccGFyc2VcZ3JhbW1hci50YWIucHJlLmMgLi5cLi5cZ3N0XHBhcnNlXGdyYW1tYXIudGFiLmMgXA0KKwljb3B5IC95IC4uXC4uXGdzdFxwYXJzZVxncmFtbWFyLnRhYi5wcmUuaCAuLlwuLlxnc3RccGFyc2VcZ3JhbW1hci50YWIuaCBcDQorCWNvcHkgL3kgLi5cLi5cZ3N0XHBhcnNlXGxleC5fZ3N0X3BhcnNlX3l5LnByZS5jIC4uXC4uXGdzdFxwYXJzZVxsZXguX2dzdF9wYXJzZV95eS5jIFwNCisJDQorDQorIi4uXC4uXGdzdFxwYXJzZVxsZXguX2dzdF9wYXJzZV95eS5jIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIg0KKyAgICQoQnVpbGRDbWRzKQ0KKw0KKyIuLlwuLlxnc3RccGFyc2VcZ3JhbW1hci50YWIuYyIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSINCisgICAkKEJ1aWxkQ21kcykNCisNCisiLi5cLi5cZ3N0XHBhcnNlXGdyYW1tYXIudGFiLmgiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiDQorICAgJChCdWlsZENtZHMpDQorIyBFbmQgQ3VzdG9tIEJ1aWxkDQorDQorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImdyYW1tYXIgLSBXaW4zMiBEZWJ1ZyINCisNCisjIEJlZ2luIEN1c3RvbSBCdWlsZA0KK0lucHV0UGF0aD0uLlwuLlxnc3RccGFyc2VcZ3JhbW1hci55DQorDQorQnVpbGRDbWRzPSBcDQorCWNvcHkgL3kgLi5cLi5cZ3N0XHBhcnNlXGdyYW1tYXIudGFiLnByZS5jIC4uXC4uXGdzdFxwYXJzZVxncmFtbWFyLnRhYi5jIFwNCisJY29weSAveSAuLlwuLlxnc3RccGFyc2VcZ3JhbW1hci50YWIucHJlLmggLi5cLi5cZ3N0XHBhcnNlXGdyYW1tYXIudGFiLmggXA0KKwljb3B5IC95IC4uXC4uXGdzdFxwYXJzZVxsZXguX2dzdF9wYXJzZV95eS5wcmUuYyAuLlwuLlxnc3RccGFyc2VcbGV4Ll9nc3RfcGFyc2VfeXkuYyBcDQorCQ0KKw0KKyIuLlwuLlxnc3RccGFyc2VcbGV4Ll9nc3RfcGFyc2VfeXkuYyIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSINCisgICAkKEJ1aWxkQ21kcykNCisNCisiLi5cLi5cZ3N0XHBhcnNlXGdyYW1tYXIudGFiLmMiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiDQorICAgJChCdWlsZENtZHMpDQorDQorIi4uXC4uXGdzdFxwYXJzZVxncmFtbWFyLnRhYi5oIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIg0KKyAgICQoQnVpbGRDbWRzKQ0KKyMgRW5kIEN1c3RvbSBCdWlsZA0KKw0KKyFFTkRJRiANCisNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XGdzdC5oDQorIyBQUk9QIEV4Y2x1ZGVfRnJvbV9CdWlsZCAxDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXGNvbW1vblxnc3Rjb25maWcuaA0KKw0KKyFJRiAgIiQoQ0ZHKSIgPT0gImdyYW1tYXIgLSBXaW4zMiBSZWxlYXNlIg0KKw0KKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkDQorSW5wdXRQYXRoPS4uXGNvbW1vblxnc3Rjb25maWcuaA0KKw0KKyIuLlwuLlxnc3Rjb25maWcuaCIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSINCisJY29weSAveSAuLlxjb21tb25cZ3N0Y29uZmlnLmggLi5cLi5cZ3N0DQorDQorIyBFbmQgQ3VzdG9tIEJ1aWxkDQorDQorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImdyYW1tYXIgLSBXaW4zMiBEZWJ1ZyINCisNCisjIEJlZ2luIEN1c3RvbSBCdWlsZA0KK0lucHV0UGF0aD0uLlxjb21tb25cZ3N0Y29uZmlnLmgNCisNCisiLi5cLi5cZ3N0Y29uZmlnLmgiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiDQorCWNvcHkgL3kgLi5cY29tbW9uXGdzdGNvbmZpZy5oIC4uXC4uXGdzdA0KKw0KKyMgRW5kIEN1c3RvbSBCdWlsZA0KKw0KKyFFTkRJRiANCisNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cY29tbW9uXGdzdGVudW10eXBlcy5jDQorDQorIUlGICAiJChDRkcpIiA9PSAiZ3JhbW1hciAtIFdpbjMyIFJlbGVhc2UiDQorDQorIyBCZWdpbiBDdXN0b20gQnVpbGQNCitJbnB1dFBhdGg9Li5cY29tbW9uXGdzdGVudW10eXBlcy5jDQorDQorQnVpbGRDbWRzPSBcDQorCWNvcHkgL3kgLi5cY29tbW9uXGdzdGVudW10eXBlcy5jIC4uXC4uXGdzdFxnc3RlbnVtdHlwZXMuYyBcDQorCWNvcHkgL3kgLi5cY29tbW9uXGdzdGVudW10eXBlcy5oIC4uXC4uXGdzdFxnc3RlbnVtdHlwZXMuaCBcDQorCQ0KKw0KKyIuLlwuLlxnc3RcZ3N0ZW51bXR5cGVzLmMiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiDQorICAgJChCdWlsZENtZHMpDQorDQorIi4uXC4uXGdzdFxnc3RlbnVtdHlwZXMuaCIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSINCisgICAkKEJ1aWxkQ21kcykNCisjIEVuZCBDdXN0b20gQnVpbGQNCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAiZ3JhbW1hciAtIFdpbjMyIERlYnVnIg0KKw0KKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkDQorSW5wdXRQYXRoPS4uXGNvbW1vblxnc3RlbnVtdHlwZXMuYw0KKw0KK0J1aWxkQ21kcz0gXA0KKwljb3B5IC95IC4uXGNvbW1vblxnc3RlbnVtdHlwZXMuYyAuLlwuLlxnc3RcZ3N0ZW51bXR5cGVzLmMgXA0KKwljb3B5IC95IC4uXGNvbW1vblxnc3RlbnVtdHlwZXMuaCAuLlwuLlxnc3RcZ3N0ZW51bXR5cGVzLmggXA0KKwkNCisNCisiLi5cLi5cZ3N0XGdzdGVudW10eXBlcy5jIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIg0KKyAgICQoQnVpbGRDbWRzKQ0KKw0KKyIuLlwuLlxnc3RcZ3N0ZW51bXR5cGVzLmgiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiDQorICAgJChCdWlsZENtZHMpDQorIyBFbmQgQ3VzdG9tIEJ1aWxkDQorDQorIUVORElGIA0KKw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0bWFyc2hhbC5saXN0DQorDQorIUlGICAiJChDRkcpIiA9PSAiZ3JhbW1hciAtIFdpbjMyIFJlbGVhc2UiDQorDQorIyBCZWdpbiBDdXN0b20gQnVpbGQNCitJbnB1dFBhdGg9Li5cLi5cZ3N0XGdzdG1hcnNoYWwubGlzdA0KKw0KK0J1aWxkQ21kcz0gXA0KKwllY2hvICNpbmNsdWRlICJnbGliLW9iamVjdC5oIiA+IGdzdG1hcnNoYWwuYy50bXAgXA0KKwllY2hvICNpbmNsdWRlICJnc3RtYXJzaGFsLmgiID4+IGdzdG1hcnNoYWwuYy50bXAgXA0KKwlnbGliLWdlbm1hcnNoYWwgLS1ib2R5IC0tcHJlZml4PWdzdF9tYXJzaGFsIC4uXC4uXGdzdFxnc3RtYXJzaGFsLmxpc3QgPj4gZ3N0bWFyc2hhbC5jLnRtcCBcDQorCW1vdmUgZ3N0bWFyc2hhbC5jLnRtcCAuLlwuLlxnc3RcZ3N0bWFyc2hhbC5jIFwNCisJZWNobyAjaW5jbHVkZSAiZ3N0L2dzdGNvbmZpZy5oIiA+IGdzdG1hcnNoYWwuaC50bXAgXA0KKwlnbGliLWdlbm1hcnNoYWwgLS1oZWFkZXIgLS1wcmVmaXg9Z3N0X21hcnNoYWwgLi5cLi5cZ3N0XGdzdG1hcnNoYWwubGlzdCA+PiBnc3RtYXJzaGFsLmgudG1wIFwNCisJbW92ZSBnc3RtYXJzaGFsLmgudG1wIC4uXC4uXGdzdFxnc3RtYXJzaGFsLmggXA0KKwkNCisNCisiLi5cLi5cZ3N0XGdzdG1hcnNoYWwuYyIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSINCisgICAkKEJ1aWxkQ21kcykNCisNCisiLi5cLi5cZ3N0XGdzdG1hcnNoYWwuaCIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSINCisgICAkKEJ1aWxkQ21kcykNCisjIEVuZCBDdXN0b20gQnVpbGQNCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAiZ3JhbW1hciAtIFdpbjMyIERlYnVnIg0KKw0KKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkDQorSW5wdXRQYXRoPS4uXC4uXGdzdFxnc3RtYXJzaGFsLmxpc3QNCisNCitCdWlsZENtZHM9IFwNCisJZWNobyAjaW5jbHVkZSAiZ2xpYi1vYmplY3QuaCIgPiBnc3RtYXJzaGFsLmMudG1wIFwNCisJZWNobyAjaW5jbHVkZSAiZ3N0bWFyc2hhbC5oIiA+PiBnc3RtYXJzaGFsLmMudG1wIFwNCisJZ2xpYi1nZW5tYXJzaGFsIC0tYm9keSAtLXByZWZpeD1nc3RfbWFyc2hhbCAuLlwuLlxnc3RcZ3N0bWFyc2hhbC5saXN0ID4+IGdzdG1hcnNoYWwuYy50bXAgXA0KKwltb3ZlIGdzdG1hcnNoYWwuYy50bXAgLi5cLi5cZ3N0XGdzdG1hcnNoYWwuYyBcDQorCWVjaG8gI2luY2x1ZGUgImdzdC9nc3Rjb25maWcuaCIgPiBnc3RtYXJzaGFsLmgudG1wIFwNCisJZ2xpYi1nZW5tYXJzaGFsIC0taGVhZGVyIC0tcHJlZml4PWdzdF9tYXJzaGFsIC4uXC4uXGdzdFxnc3RtYXJzaGFsLmxpc3QgPj4gZ3N0bWFyc2hhbC5oLnRtcCBcDQorCW1vdmUgZ3N0bWFyc2hhbC5oLnRtcCAuLlwuLlxnc3RcZ3N0bWFyc2hhbC5oIFwNCisJDQorDQorIi4uXC4uXGdzdFxnc3RtYXJzaGFsLmMiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiDQorICAgJChCdWlsZENtZHMpDQorDQorIi4uXC4uXGdzdFxnc3RtYXJzaGFsLmgiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiDQorICAgJChCdWlsZENtZHMpDQorIyBFbmQgQ3VzdG9tIEJ1aWxkDQorDQorIUVORElGIA0KKw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlxjb21tb25cZ3N0dmVyc2lvbi5oDQorDQorIUlGICAiJChDRkcpIiA9PSAiZ3JhbW1hciAtIFdpbjMyIFJlbGVhc2UiDQorDQorIyBCZWdpbiBDdXN0b20gQnVpbGQNCitJbnB1dFBhdGg9Li5cY29tbW9uXGdzdHZlcnNpb24uaA0KKw0KKyIuLlwuLlxnc3RcZ3N0dmVyc2lvbi5oIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIg0KKwljb3B5IC95IC4uXGNvbW1vblxnc3R2ZXJzaW9uLmggLi5cLi5cZ3N0DQorDQorIyBFbmQgQ3VzdG9tIEJ1aWxkDQorDQorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImdyYW1tYXIgLSBXaW4zMiBEZWJ1ZyINCisNCisjIEJlZ2luIEN1c3RvbSBCdWlsZA0KK0lucHV0UGF0aD0uLlxjb21tb25cZ3N0dmVyc2lvbi5oDQorDQorIi4uXC4uXGdzdFxnc3R2ZXJzaW9uLmgiIDogJChTT1VSQ0UpICIkKElOVERJUikiICIkKE9VVERJUikiDQorCWNvcHkgL3kgLi5cY29tbW9uXGdzdHZlcnNpb24uaCAuLlwuLlxnc3QNCisNCisjIEVuZCBDdXN0b20gQnVpbGQNCisNCishRU5ESUYgDQorDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEVuZCBUYXJnZXQNCisjIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvd2luMzIvdnM2L2dzdF9pbnNwZWN0LmRzcCBiL3dpbjMyL3ZzNi9nc3RfaW5zcGVjdC5kc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYwOGI0MwotLS0gL2Rldi9udWxsCisrKyBiL3dpbjMyL3ZzNi9nc3RfaW5zcGVjdC5kc3AKQEAgLTAsMCArMSwxMTQgQEAKKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iZ3N0X2luc3BlY3QiIC0gUGFja2FnZSBPd25lcj08ND4NCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQorIyAqKiBETyBOT1QgRURJVCAqKg0KKw0KKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIDB4MDEwMw0KKw0KK0NGRz1nc3RfaW5zcGVjdCAtIFdpbjMyIERlYnVnDQorIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIE5NQUtFIC9mICJnc3RfaW5zcGVjdC5tYWsiLg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCishTUVTU0FHRSANCishTUVTU0FHRSBOTUFLRSAvZiAiZ3N0X2luc3BlY3QubWFrIiBDRkc9ImdzdF9pbnNwZWN0IC0gV2luMzIgRGVidWciDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQorIU1FU1NBR0UgDQorIU1FU1NBR0UgImdzdF9pbnNwZWN0IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikNCishTUVTU0FHRSAiZ3N0X2luc3BlY3QgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikNCishTUVTU0FHRSANCisNCisjIEJlZ2luIFByb2plY3QNCisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KKyMgUFJPUCBTY2NfUHJvak5hbWUgIiINCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIg0KK0NQUD1jbC5leGUNCitSU0M9cmMuZXhlDQorDQorIUlGICAiJChDRkcpIiA9PSAiZ3N0X2luc3BlY3QgLSBXaW4zMiBSZWxlYXNlIg0KKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQorIyBQUk9QIFVzZV9NRkMgMA0KKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCisjIFBST1AgT3V0cHV0X0RpciAiUmVsZWFzZSINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KKyMgUFJPUCBUYXJnZXRfRGlyICIiDQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0kgIi4uLy4uIiAvSSAiLi4vLi4vbGlicyIgL0kgIi4uL2NvbW1vbiIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0QgIkhBVkVfQ09ORklHX0giIC9GRCAvYw0KKyMgU1VCVFJBQ1QgQ1BQIC9ZWA0KKyMgQUREIEJBU0UgUlNDIC9sIDB4YzBhIC9kICJOREVCVUciDQorIyBBREQgUlNDIC9sIDB4YzBhIC9kICJOREVCVUciDQorQlNDMzI9YnNjbWFrZS5leGUNCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCisjIEFERCBCU0MzMiAvbm9sb2dvDQorTElOSzMyPWxpbmsuZXhlDQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4Ng0KKyMgQUREIExJTkszMiBnbGliLTIuMC5saWIgZ29iamVjdC0yLjAubGliIGd0aHJlYWQtMi4wLmxpYiBnbW9kdWxlLTIuMC5saWIgaW50bC5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4NiAvb3V0OiJSZWxlYXNlL2dzdC1pbnNwZWN0LTAuMTAuZXhlIg0KKyMgQmVnaW4gU3BlY2lhbCBCdWlsZCBUb29sDQorVGFyZ2V0UGF0aD0uXFJlbGVhc2VcZ3N0LWluc3BlY3QtMC4xMC5leGUNCitTT1VSQ0U9IiQoSW5wdXRQYXRoKSINCitQb3N0QnVpbGRfQ21kcz1jb3B5IC9ZICQoVGFyZ2V0UGF0aCkgYzpcZ3N0cmVhbWVyXGJpbg0KKyMgRW5kIFNwZWNpYWwgQnVpbGQgVG9vbA0KKw0KKyFFTFNFSUYgICIkKENGRykiID09ICJnc3RfaW5zcGVjdCAtIFdpbjMyIERlYnVnIg0KKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBPdXRwdXRfRGlyICJEZWJ1ZyINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9HWiAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aSSAvT2QgL0kgIi4uLy4uIiAvSSAiLi4vLi4vbGlicyIgL0kgIi4uL2NvbW1vbiIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0QgIkhBVkVfQ09ORklHX0giIC9GRCAvR1ogL2MNCisjIFNVQlRSQUNUIENQUCAvWVgNCisjIEFERCBCQVNFIFJTQyAvbCAweGMwYSAvZCAiX0RFQlVHIg0KKyMgQUREIFJTQyAvbCAweGMwYSAvZCAiX0RFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJTkszMj1saW5rLmV4ZQ0KKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCisjIEFERCBMSU5LMzIgZ2xpYi0yLjBELmxpYiBnb2JqZWN0LTIuMEQubGliIGd0aHJlYWQtMi4wRC5saWIgZ21vZHVsZS0yLjBELmxpYiBpbnRsLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiJEZWJ1Zy9nc3QtaW5zcGVjdC0wLjEwLmV4ZSIgL3BkYnR5cGU6c2VwdA0KKyMgQmVnaW4gU3BlY2lhbCBCdWlsZCBUb29sDQorVGFyZ2V0UGF0aD0uXERlYnVnXGdzdC1pbnNwZWN0LTAuMTAuZXhlDQorU09VUkNFPSIkKElucHV0UGF0aCkiDQorUG9zdEJ1aWxkX0NtZHM9Y29weSAvWSAkKFRhcmdldFBhdGgpIGM6XGdzdHJlYW1lclxkZWJ1Z1xiaW4NCisjIEVuZCBTcGVjaWFsIEJ1aWxkIFRvb2wNCisNCishRU5ESUYgDQorDQorIyBCZWdpbiBUYXJnZXQNCisNCisjIE5hbWUgImdzdF9pbnNwZWN0IC0gV2luMzIgUmVsZWFzZSINCisjIE5hbWUgImdzdF9pbnNwZWN0IC0gV2luMzIgRGVidWciDQorIyBCZWdpbiBHcm91cCAiU291cmNlIEZpbGVzIg0KKw0KKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdCINCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPSIuLlwuLlx0b29sc1xnc3QtaW5zcGVjdC5jIg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBFbmQgR3JvdXANCisjIEJlZ2luIEdyb3VwICJIZWFkZXIgRmlsZXMiDQorDQorIyBQUk9QIERlZmF1bHRfRmlsdGVyICJoO2hwcDtoeHg7aG07aW5sIg0KKyMgRW5kIEdyb3VwDQorIyBCZWdpbiBHcm91cCAiUmVzb3VyY2UgRmlsZXMiDQorDQorIyBQUk9QIERlZmF1bHRfRmlsdGVyICJpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGUiDQorIyBFbmQgR3JvdXANCisjIEVuZCBUYXJnZXQNCisjIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvd2luMzIvdnM2L2dzdF9sYXVuY2guZHNwIGIvd2luMzIvdnM2L2dzdF9sYXVuY2guZHNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOTA4M2MKLS0tIC9kZXYvbnVsbAorKysgYi93aW4zMi92czYvZ3N0X2xhdW5jaC5kc3AKQEAgLTAsMCArMSwxMTQgQEAKKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iZ3N0X2xhdW5jaCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCisjICoqIERPIE5PVCBFRElUICoqDQorDQorIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgMHgwMTAzDQorDQorQ0ZHPWdzdF9sYXVuY2ggLSBXaW4zMiBEZWJ1Zw0KKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCishTUVTU0FHRSANCishTUVTU0FHRSBOTUFLRSAvZiAiZ3N0X2xhdW5jaC5tYWsiLg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCishTUVTU0FHRSANCishTUVTU0FHRSBOTUFLRSAvZiAiZ3N0X2xhdW5jaC5tYWsiIENGRz0iZ3N0X2xhdW5jaCAtIFdpbjMyIERlYnVnIg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFICJnc3RfbGF1bmNoIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikNCishTUVTU0FHRSAiZ3N0X2xhdW5jaCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQ0KKyFNRVNTQUdFIA0KKw0KKyMgQmVnaW4gUHJvamVjdA0KKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQorIyBQUk9QIFNjY19Qcm9qTmFtZSAiIg0KKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIiDQorQ1BQPWNsLmV4ZQ0KK1JTQz1yYy5leGUNCisNCishSUYgICIkKENGRykiID09ICJnc3RfbGF1bmNoIC0gV2luMzIgUmVsZWFzZSINCisNCisjIFBST1AgQkFTRSBVc2VfTUZDIDANCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KKyMgUFJPUCBVc2VfTUZDIDANCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIE91dHB1dF9EaXIgIlJlbGVhc2UiDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9JICIuLi8uLiIgL0kgIi4uLy4uL2xpYnMiIC9JICIuLi9jb21tb24iIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9EICJIQVZFX0NPTkZJR19IIiAvRkQgL2MNCisjIFNVQlRSQUNUIENQUCAvWVgNCisjIEFERCBCQVNFIFJTQyAvbCAweGMwYSAvZCAiTkRFQlVHIg0KKyMgQUREIFJTQyAvbCAweGMwYSAvZCAiTkRFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJTkszMj1saW5rLmV4ZQ0KKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCisjIEFERCBMSU5LMzIgZ2xpYi0yLjAubGliIGdvYmplY3QtMi4wLmxpYiBndGhyZWFkLTIuMC5saWIgZ21vZHVsZS0yLjAubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYgL291dDoiUmVsZWFzZS9nc3QtbGF1bmNoLTAuMTAuZXhlIg0KKyMgQmVnaW4gU3BlY2lhbCBCdWlsZCBUb29sDQorVGFyZ2V0UGF0aD0uXFJlbGVhc2VcZ3N0LWxhdW5jaC0wLjEwLmV4ZQ0KK1NPVVJDRT0iJChJbnB1dFBhdGgpIg0KK1Bvc3RCdWlsZF9DbWRzPWNvcHkgL1kgJChUYXJnZXRQYXRoKSBjOlxnc3RyZWFtZXJcYmluDQorIyBFbmQgU3BlY2lhbCBCdWlsZCBUb29sDQorDQorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImdzdF9sYXVuY2ggLSBXaW4zMiBEZWJ1ZyINCisNCisjIFBST1AgQkFTRSBVc2VfTUZDIDANCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQorIyBQUk9QIFVzZV9NRkMgMA0KKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCisjIFBST1AgT3V0cHV0X0RpciAiRGVidWciDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvR1ogL2MNCisjIEFERCBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWkkgL09kIC9JICIuLi8uLiIgL0kgIi4uLy4uL2xpYnMiIC9JICIuLi9jb21tb24iIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9EICJIQVZFX0NPTkZJR19IIiAvRkQgL0daIC9jDQorIyBTVUJUUkFDVCBDUFAgL1lYDQorIyBBREQgQkFTRSBSU0MgL2wgMHhjMGEgL2QgIl9ERUJVRyINCisjIEFERCBSU0MgL2wgMHhjMGEgL2QgIl9ERUJVRyINCitCU0MzMj1ic2NtYWtlLmV4ZQ0KKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KKyMgQUREIEJTQzMyIC9ub2xvZ28NCitMSU5LMzI9bGluay5leGUNCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQorIyBBREQgTElOSzMyIGdsaWItMi4wRC5saWIgZ29iamVjdC0yLjBELmxpYiBndGhyZWFkLTIuMEQubGliIGdtb2R1bGUtMi4wRC5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiRGVidWcvZ3N0LWxhdW5jaC0wLjEwLmV4ZSIgL3BkYnR5cGU6c2VwdA0KKyMgQmVnaW4gU3BlY2lhbCBCdWlsZCBUb29sDQorVGFyZ2V0UGF0aD0uXERlYnVnXGdzdC1sYXVuY2gtMC4xMC5leGUNCitTT1VSQ0U9IiQoSW5wdXRQYXRoKSINCitQb3N0QnVpbGRfQ21kcz1jb3B5IC9ZICQoVGFyZ2V0UGF0aCkgYzpcZ3N0cmVhbWVyXGRlYnVnXGJpbg0KKyMgRW5kIFNwZWNpYWwgQnVpbGQgVG9vbA0KKw0KKyFFTkRJRiANCisNCisjIEJlZ2luIFRhcmdldA0KKw0KKyMgTmFtZSAiZ3N0X2xhdW5jaCAtIFdpbjMyIFJlbGVhc2UiDQorIyBOYW1lICJnc3RfbGF1bmNoIC0gV2luMzIgRGVidWciDQorIyBCZWdpbiBHcm91cCAiU291cmNlIEZpbGVzIg0KKw0KKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdCINCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPSIuLlwuLlx0b29sc1xnc3QtbGF1bmNoLmMiDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEVuZCBHcm91cA0KKyMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyINCisNCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImg7aHBwO2h4eDtobTtpbmwiDQorIyBFbmQgR3JvdXANCisjIEJlZ2luIEdyb3VwICJSZXNvdXJjZSBGaWxlcyINCisNCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZSINCisjIEVuZCBHcm91cA0KKyMgRW5kIFRhcmdldA0KKyMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS93aW4zMi92czYvZ3N0cmVhbWVyLmRzdyBiL3dpbjMyL3ZzNi9nc3RyZWFtZXIuZHN3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYmJkNzQKLS0tIC9kZXYvbnVsbAorKysgYi93aW4zMi92czYvZ3N0cmVhbWVyLmRzdwpAQCAtMCwwICsxLDE1MiBAQAorTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gV29ya3NwYWNlIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCisjIFdBUk5JTkc6IERPIE5PVCBFRElUIE9SIERFTEVURSBUSElTIFdPUktTUEFDRSBGSUxFIQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAiZ3JhbW1hciI9Ii5cZ3JhbW1hci5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJnc3RfaW5zcGVjdCI9Ii5cZ3N0X2luc3BlY3QuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJnc3RyZWFtZXINCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAiZ3N0X2xhdW5jaCI9Ii5cZ3N0X2xhdW5jaC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYmdzdHJlYW1lcg0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJsaWJnc3RiYXNlIj0iLlxsaWJnc3RiYXNlLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGliZ3N0cmVhbWVyDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogImxpYmdzdGNvbnRyb2xsZXIiPSIuXGxpYmdzdGNvbnRyb2xsZXIuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJnc3RyZWFtZXINCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAibGliZ3N0Y29yZWVsZW1lbnRzIj0iLlxsaWJnc3Rjb3JlZWxlbWVudHMuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJnc3RyZWFtZXINCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJnc3RiYXNlDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogImxpYmdzdGRhdGFwcm90b2NvbCI9Ii5cbGliZ3N0ZGF0YXByb3RvY29sLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGliZ3N0cmVhbWVyDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogImxpYmdzdG5ldCI9Ii5cbGliZ3N0bmV0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGliZ3N0cmVhbWVyDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogImxpYmdzdHJlYW1lciI9Ii5cbGliZ3N0cmVhbWVyLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgZ3JhbW1hcg0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK0dsb2JhbDoNCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDM+DQore3t7DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KZGlmZiAtLWdpdCBhL3dpbjMyL3ZzNi9saWJnc3RiYXNlLmRzcCBiL3dpbjMyL3ZzNi9saWJnc3RiYXNlLmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjQzYWVmCi0tLSAvZGV2L251bGwKKysrIGIvd2luMzIvdnM2L2xpYmdzdGJhc2UuZHNwCkBAIC0wLDAgKzEsMTUxIEBACisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9ImxpYmdzdGJhc2UiIC0gUGFja2FnZSBPd25lcj08ND4NCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQorIyAqKiBETyBOT1QgRURJVCAqKg0KKw0KKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCisNCitDRkc9bGliZ3N0YmFzZSAtIFdpbjMyIERlYnVnDQorIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIE5NQUtFIC9mICJsaWJnc3RiYXNlLm1hayIuDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIE5NQUtFIC9mICJsaWJnc3RiYXNlLm1hayIgQ0ZHPSJsaWJnc3RiYXNlIC0gV2luMzIgRGVidWciDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQorIU1FU1NBR0UgDQorIU1FU1NBR0UgImxpYmdzdGJhc2UgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCishTUVTU0FHRSAibGliZ3N0YmFzZSAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCishTUVTU0FHRSANCisNCisjIEJlZ2luIFByb2plY3QNCisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KKyMgUFJPUCBTY2NfUHJvak5hbWUgIiINCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIg0KK0NQUD1jbC5leGUNCitNVEw9bWlkbC5leGUNCitSU0M9cmMuZXhlDQorDQorIUlGICAiJChDRkcpIiA9PSAibGliZ3N0YmFzZSAtIFdpbjMyIFJlbGVhc2UiDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBPdXRwdXRfRGlyICJSZWxlYXNlIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIkxJQkdTVEJBU0VfRVhQT1JUUyIgL1lYIC9GRCAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvSSAiLi4vLi4iIC9JICIuLi8uLi9saWJzIiAvSSAiLi4vY29tbW9uIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIkxJQkdTVEJBU0VfRVhQT1JUUyIgL0QgIkhBVkVfQ09ORklHX0giIC9GRCAvYw0KKyMgU1VCVFJBQ1QgQ1BQIC9ZWA0KKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KKyMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCisjIEFERCBCQVNFIFJTQyAvbCAweGMwYSAvZCAiTkRFQlVHIg0KKyMgQUREIFJTQyAvbCAweGMwYSAvZCAiTkRFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJTkszMj1saW5rLmV4ZQ0KKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvbWFjaGluZTpJMzg2DQorIyBBREQgTElOSzMyIGdsaWItMi4wLmxpYiBnb2JqZWN0LTIuMC5saWIgZ3RocmVhZC0yLjAubGliIGdtb2R1bGUtMi4wLmxpYiAvbm9sb2dvIC9kbGwgL21hY2hpbmU6STM4NiAvb3V0OiJSZWxlYXNlL2xpYmdzdGJhc2UtMC4xMC5kbGwiDQorIyBCZWdpbiBTcGVjaWFsIEJ1aWxkIFRvb2wNCitUYXJnZXRQYXRoPS5cUmVsZWFzZVxsaWJnc3RiYXNlLTAuMTAuZGxsDQorU09VUkNFPSIkKElucHV0UGF0aCkiDQorUG9zdEJ1aWxkX0NtZHM9Y29weSAvWSAkKFRhcmdldFBhdGgpIGM6XGdzdHJlYW1lclxiaW4NCisjIEVuZCBTcGVjaWFsIEJ1aWxkIFRvb2wNCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAibGliZ3N0YmFzZSAtIFdpbjMyIERlYnVnIg0KKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBPdXRwdXRfRGlyICJEZWJ1ZyINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTElCR1NUQkFTRV9FWFBPUlRTIiAvWVggL0ZEIC9HWiAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvSSAiLi4vLi4iIC9JICIuLi8uLi9saWJzIiAvSSAiLi4vY29tbW9uIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIkxJQkdTVEJBU0VfRVhQT1JUUyIgL0QgIkhBVkVfQ09ORklHX0giIC9GUiAvRkQgL0daIC9jDQorIyBTVUJUUkFDVCBDUFAgL1lYDQorIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQorIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KKyMgQUREIEJBU0UgUlNDIC9sIDB4YzBhIC9kICJfREVCVUciDQorIyBBREQgUlNDIC9sIDB4YzBhIC9kICJfREVCVUciDQorQlNDMzI9YnNjbWFrZS5leGUNCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCisjIEFERCBCU0MzMiAvbm9sb2dvDQorTElOSzMyPWxpbmsuZXhlDQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCisjIEFERCBMSU5LMzIgZ2xpYi0yLjBELmxpYiBnb2JqZWN0LTIuMEQubGliIGd0aHJlYWQtMi4wRC5saWIgZ21vZHVsZS0yLjBELmxpYiAvbm9sb2dvIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiRGVidWcvbGliZ3N0YmFzZS0wLjEwLmRsbCIgL3BkYnR5cGU6c2VwdA0KKyMgQmVnaW4gU3BlY2lhbCBCdWlsZCBUb29sDQorVGFyZ2V0UGF0aD0uXERlYnVnXGxpYmdzdGJhc2UtMC4xMC5kbGwNCitTT1VSQ0U9IiQoSW5wdXRQYXRoKSINCitQb3N0QnVpbGRfQ21kcz1jb3B5IC9ZICQoVGFyZ2V0UGF0aCkgYzpcZ3N0cmVhbWVyXGRlYnVnXGJpbg0KKyMgRW5kIFNwZWNpYWwgQnVpbGQgVG9vbA0KKw0KKyFFTkRJRiANCisNCisjIEJlZ2luIFRhcmdldA0KKw0KKyMgTmFtZSAibGliZ3N0YmFzZSAtIFdpbjMyIFJlbGVhc2UiDQorIyBOYW1lICJsaWJnc3RiYXNlIC0gV2luMzIgRGVidWciDQorIyBCZWdpbiBHcm91cCAiU291cmNlIEZpbGVzIg0KKw0KKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdCINCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNcZ3N0XGJhc2VcZ3N0YWRhcHRlci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNcZ3N0XGJhc2VcZ3N0YmFzZXNpbmsuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzXGdzdFxiYXNlXGdzdGJhc2VzcmMuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzXGdzdFxiYXNlXGdzdGJhc2V0cmFuc2Zvcm0uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzXGdzdFxiYXNlXGdzdGNvbGxlY3RwYWRzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic1xnc3RcYmFzZVxnc3RkYXRhcXVldWUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzXGdzdFxiYXNlXGdzdHB1c2hzcmMuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzXGdzdFxiYXNlXGdzdHR5cGVmaW5kaGVscGVyLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cY29tbW9uXGxpYmdzdGJhc2UuZGVmDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEVuZCBHcm91cA0KKyMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyINCisNCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImg7aHBwO2h4eDtobTtpbmwiDQorIyBFbmQgR3JvdXANCisjIEJlZ2luIEdyb3VwICJSZXNvdXJjZSBGaWxlcyINCisNCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZSINCisjIEVuZCBHcm91cA0KKyMgRW5kIFRhcmdldA0KKyMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS93aW4zMi92czYvbGliZ3N0Y29udHJvbGxlci5kc3AgYi93aW4zMi92czYvbGliZ3N0Y29udHJvbGxlci5kc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlkMmExMgotLS0gL2Rldi9udWxsCisrKyBiL3dpbjMyL3ZzNi9saWJnc3Rjb250cm9sbGVyLmRzcApAQCAtMCwwICsxLDE1NSBAQAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJsaWJnc3Rjb250cm9sbGVyIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KKyMgKiogRE8gTk9UIEVESVQgKioNCisNCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQorDQorQ0ZHPWxpYmdzdGNvbnRyb2xsZXIgLSBXaW4zMiBEZWJ1Zw0KKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCishTUVTU0FHRSANCishTUVTU0FHRSBOTUFLRSAvZiAibGliZ3N0Y29udHJvbGxlci5tYWsiLg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCishTUVTU0FHRSANCishTUVTU0FHRSBOTUFLRSAvZiAibGliZ3N0Y29udHJvbGxlci5tYWsiIENGRz0ibGliZ3N0Y29udHJvbGxlciAtIFdpbjMyIERlYnVnIg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFICJsaWJnc3Rjb250cm9sbGVyIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQorIU1FU1NBR0UgImxpYmdzdGNvbnRyb2xsZXIgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQorIU1FU1NBR0UgDQorDQorIyBCZWdpbiBQcm9qZWN0DQorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCisjIFBST1AgU2NjX1Byb2pOYW1lICIiDQorIyBQUk9QIFNjY19Mb2NhbFBhdGggIiINCitDUFA9Y2wuZXhlDQorTVRMPW1pZGwuZXhlDQorUlNDPXJjLmV4ZQ0KKw0KKyFJRiAgIiQoQ0ZHKSIgPT0gImxpYmdzdGNvbnRyb2xsZXIgLSBXaW4zMiBSZWxlYXNlIg0KKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQorIyBQUk9QIFVzZV9NRkMgMA0KKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCisjIFBST1AgT3V0cHV0X0RpciAiUmVsZWFzZSINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KKyMgUFJPUCBUYXJnZXRfRGlyICIiDQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJMSUJHU1RDT05UUk9MTEVSX0VYUE9SVFMiIC9ZWCAvRkQgL2MNCisjIEFERCBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0kgIi4uLy4uIiAvSSAiLi4vLi4vbGlicyIgL0kgIi4uL2NvbW1vbiIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJMSUJHU1RDT05UUk9MTEVSX0VYUE9SVFMiIC9EICJIQVZFX0NPTkZJR19IIiAvRkQgL2MNCisjIFNVQlRSQUNUIENQUCAvWVgNCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCisjIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCitCU0MzMj1ic2NtYWtlLmV4ZQ0KKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KKyMgQUREIEJTQzMyIC9ub2xvZ28NCitMSU5LMzI9bGluay5leGUNCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL21hY2hpbmU6STM4Ng0KKyMgQUREIExJTkszMiBnbGliLTIuMC5saWIgZ29iamVjdC0yLjAubGliIGd0aHJlYWQtMi4wLmxpYiBnbW9kdWxlLTIuMC5saWIgL25vbG9nbyAvZGxsIC9tYWNoaW5lOkkzODYgL291dDoiUmVsZWFzZS9saWJnc3Rjb250cm9sbGVyLTAuMTAuZGxsIg0KKyMgQmVnaW4gU3BlY2lhbCBCdWlsZCBUb29sDQorVGFyZ2V0UGF0aD0uXFJlbGVhc2VcbGliZ3N0Y29udHJvbGxlci0wLjEwLmRsbA0KK1NPVVJDRT0iJChJbnB1dFBhdGgpIg0KK1Bvc3RCdWlsZF9DbWRzPWNvcHkgL1kgJChUYXJnZXRQYXRoKSBjOlxnc3RyZWFtZXJcYmluDQorIyBFbmQgU3BlY2lhbCBCdWlsZCBUb29sDQorDQorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImxpYmdzdGNvbnRyb2xsZXIgLSBXaW4zMiBEZWJ1ZyINCisNCisjIFBST1AgQkFTRSBVc2VfTUZDIDANCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQorIyBQUk9QIFVzZV9NRkMgMA0KKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCisjIFBST1AgT3V0cHV0X0RpciAiRGVidWciDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIkxJQkdTVENPTlRST0xMRVJfRVhQT1JUUyIgL1lYIC9GRCAvR1ogL2MNCisjIEFERCBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aSSAvT2QgL0kgIi4uLy4uIiAvSSAiLi4vLi4vbGlicyIgL0kgIi4uL2NvbW1vbiIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJMSUJHU1RDT05UUk9MTEVSX0VYUE9SVFMiIC9EICJIQVZFX0NPTkZJR19IIiAvRkQgL0daIC9jDQorIyBTVUJUUkFDVCBDUFAgL1lYDQorIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQorIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQorQlNDMzI9YnNjbWFrZS5leGUNCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCisjIEFERCBCU0MzMiAvbm9sb2dvDQorTElOSzMyPWxpbmsuZXhlDQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCisjIEFERCBMSU5LMzIgZ2xpYi0yLjBELmxpYiBnb2JqZWN0LTIuMEQubGliIGd0aHJlYWQtMi4wRC5saWIgZ21vZHVsZS0yLjBELmxpYiAvbm9sb2dvIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiRGVidWcvbGliZ3N0Y29udHJvbGxlci0wLjEwLmRsbCIgL3BkYnR5cGU6c2VwdA0KKyMgQmVnaW4gU3BlY2lhbCBCdWlsZCBUb29sDQorVGFyZ2V0UGF0aD0uXERlYnVnXGxpYmdzdGNvbnRyb2xsZXItMC4xMC5kbGwNCitTT1VSQ0U9IiQoSW5wdXRQYXRoKSINCitQb3N0QnVpbGRfQ21kcz1jb3B5IC9ZICQoVGFyZ2V0UGF0aCkgYzpcZ3N0cmVhbWVyXGRlYnVnXGJpbg0KKyMgRW5kIFNwZWNpYWwgQnVpbGQgVG9vbA0KKw0KKyFFTkRJRiANCisNCisjIEJlZ2luIFRhcmdldA0KKw0KKyMgTmFtZSAibGliZ3N0Y29udHJvbGxlciAtIFdpbjMyIFJlbGVhc2UiDQorIyBOYW1lICJsaWJnc3Rjb250cm9sbGVyIC0gV2luMzIgRGVidWciDQorIyBCZWdpbiBHcm91cCAiU291cmNlIEZpbGVzIg0KKw0KKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdCINCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNcZ3N0XGNvbnRyb2xsZXJcZ3N0Y29udHJvbGxlci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNcZ3N0XGNvbnRyb2xsZXJcZ3N0Y29udHJvbGxlci5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNcZ3N0XGNvbnRyb2xsZXJcZ3N0Y29udHJvbHNvdXJjZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNcZ3N0XGNvbnRyb2xsZXJcZ3N0aGVscGVyLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic1xnc3RcY29udHJvbGxlclxnc3RpbnRlcnBvbGF0aW9uLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic1xnc3RcY29udHJvbGxlclxnc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNcZ3N0XGNvbnRyb2xsZXJcZ3N0bGZvY29udHJvbHNvdXJjZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNcZ3N0XGNvbnRyb2xsZXJcbGliLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cY29tbW9uXGxpYmdzdGNvbnRyb2xsZXIuZGVmDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEVuZCBHcm91cA0KKyMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyINCisNCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImg7aHBwO2h4eDtobTtpbmwiDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxsaWJzXGdzdFxjb250cm9sbGVyXGdzdGNvbnRyb2xsZXIuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBFbmQgR3JvdXANCisjIEJlZ2luIEdyb3VwICJSZXNvdXJjZSBGaWxlcyINCisNCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZSINCisjIEVuZCBHcm91cA0KKyMgRW5kIFRhcmdldA0KKyMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS93aW4zMi92czYvbGliZ3N0Y29yZWVsZW1lbnRzLmRzcCBiL3dpbjMyL3ZzNi9saWJnc3Rjb3JlZWxlbWVudHMuZHNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YTU2ODEKLS0tIC9kZXYvbnVsbAorKysgYi93aW4zMi92czYvbGliZ3N0Y29yZWVsZW1lbnRzLmRzcApAQCAtMCwwICsxLDE2MyBAQAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJsaWJnc3Rjb3JlZWxlbWVudHMiIC0gUGFja2FnZSBPd25lcj08ND4NCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQorIyAqKiBETyBOT1QgRURJVCAqKg0KKw0KKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCisNCitDRkc9bGliZ3N0Y29yZWVsZW1lbnRzIC0gV2luMzIgRGVidWcNCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgTk1BS0UgL2YgImxpYmdzdGNvcmVlbGVtZW50cy5tYWsiLg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCishTUVTU0FHRSANCishTUVTU0FHRSBOTUFLRSAvZiAibGliZ3N0Y29yZWVsZW1lbnRzLm1hayIgQ0ZHPSJsaWJnc3Rjb3JlZWxlbWVudHMgLSBXaW4zMiBEZWJ1ZyINCishTUVTU0FHRSANCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCishTUVTU0FHRSANCishTUVTU0FHRSAibGliZ3N0Y29yZWVsZW1lbnRzIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQorIU1FU1NBR0UgImxpYmdzdGNvcmVlbGVtZW50cyAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCishTUVTU0FHRSANCisNCisjIEJlZ2luIFByb2plY3QNCisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KKyMgUFJPUCBTY2NfUHJvak5hbWUgIiINCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIg0KK0NQUD1jbC5leGUNCitNVEw9bWlkbC5leGUNCitSU0M9cmMuZXhlDQorDQorIUlGICAiJChDRkcpIiA9PSAibGliZ3N0Y29yZWVsZW1lbnRzIC0gV2luMzIgUmVsZWFzZSINCisNCisjIFBST1AgQkFTRSBVc2VfTUZDIDANCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KKyMgUFJPUCBVc2VfTUZDIDANCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIE91dHB1dF9EaXIgIlJlbGVhc2UiDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTElCR1NURUxFTUVOVFNfRVhQT1JUUyIgL1lYIC9GRCAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvSSAiLi4vLi4iIC9JICIuLi8uLi9saWJzIiAvSSAiLi4vY29tbW9uIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIkxJQkdTVEVMRU1FTlRTX0VYUE9SVFMiIC9EICJIQVZFX0NPTkZJR19IIiAvRkQgL2MNCisjIFNVQlRSQUNUIENQUCAvWVgNCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCisjIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQorIyBBREQgQkFTRSBSU0MgL2wgMHhjMGEgL2QgIk5ERUJVRyINCisjIEFERCBSU0MgL2wgMHhjMGEgL2QgIk5ERUJVRyINCitCU0MzMj1ic2NtYWtlLmV4ZQ0KKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KKyMgQUREIEJTQzMyIC9ub2xvZ28NCitMSU5LMzI9bGluay5leGUNCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL21hY2hpbmU6STM4Ng0KKyMgQUREIExJTkszMiBnbGliLTIuMC5saWIgZ29iamVjdC0yLjAubGliIGd0aHJlYWQtMi4wLmxpYiBnbW9kdWxlLTIuMC5saWIgL25vbG9nbyAvZGxsIC9tYWNoaW5lOkkzODYNCisjIEJlZ2luIFNwZWNpYWwgQnVpbGQgVG9vbA0KK1RhcmdldFBhdGg9LlxSZWxlYXNlXGxpYmdzdGNvcmVlbGVtZW50cy5kbGwNCitTT1VSQ0U9IiQoSW5wdXRQYXRoKSINCitQb3N0QnVpbGRfQ21kcz1ta2RpciBjOlxnc3RyZWFtZXJcbGliCW1rZGlyIGM6XGdzdHJlYW1lclxsaWJcZ3N0cmVhbWVyLTAuMTAJY29weSAvWSAkKFRhcmdldFBhdGgpIGM6XGdzdHJlYW1lclxsaWJcZ3N0cmVhbWVyLTAuMTANCisjIEVuZCBTcGVjaWFsIEJ1aWxkIFRvb2wNCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAibGliZ3N0Y29yZWVsZW1lbnRzIC0gV2luMzIgRGVidWciDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KKyMgUFJPUCBVc2VfTUZDIDANCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQorIyBQUk9QIE91dHB1dF9EaXIgIkRlYnVnIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KKyMgUFJPUCBUYXJnZXRfRGlyICIiDQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJMSUJHU1RFTEVNRU5UU19FWFBPUlRTIiAvWVggL0ZEIC9HWiAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvSSAiLi4vLi4iIC9JICIuLi8uLi9saWJzIiAvSSAiLi4vY29tbW9uIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIkxJQkdTVEVMRU1FTlRTX0VYUE9SVFMiIC9EICJIQVZFX0NPTkZJR19IIiAvRkQgL0daIC9jDQorIyBTVUJUUkFDVCBDUFAgL1lYDQorIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQorIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KKyMgQUREIEJBU0UgUlNDIC9sIDB4YzBhIC9kICJfREVCVUciDQorIyBBREQgUlNDIC9sIDB4YzBhIC9kICJfREVCVUciDQorQlNDMzI9YnNjbWFrZS5leGUNCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCisjIEFERCBCU0MzMiAvbm9sb2dvDQorTElOSzMyPWxpbmsuZXhlDQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCisjIEFERCBMSU5LMzIgZ2xpYi0yLjBELmxpYiBnb2JqZWN0LTIuMEQubGliIGd0aHJlYWQtMi4wRC5saWIgZ21vZHVsZS0yLjBELmxpYiAvbm9sb2dvIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KKyMgQmVnaW4gU3BlY2lhbCBCdWlsZCBUb29sDQorVGFyZ2V0UGF0aD0uXERlYnVnXGxpYmdzdGNvcmVlbGVtZW50cy5kbGwNCitTT1VSQ0U9IiQoSW5wdXRQYXRoKSINCitQb3N0QnVpbGRfQ21kcz1ta2RpciBjOlxnc3RyZWFtZXJcZGVidWdcbGliCW1rZGlyIGM6XGdzdHJlYW1lclxkZWJ1Z1xsaWJcZ3N0cmVhbWVyLTAuMTAJY29weSAvWSAkKFRhcmdldFBhdGgpIGM6XGdzdHJlYW1lclxkZWJ1Z1xsaWJcZ3N0cmVhbWVyLTAuMTANCisjIEVuZCBTcGVjaWFsIEJ1aWxkIFRvb2wNCisNCishRU5ESUYgDQorDQorIyBCZWdpbiBUYXJnZXQNCisNCisjIE5hbWUgImxpYmdzdGNvcmVlbGVtZW50cyAtIFdpbjMyIFJlbGVhc2UiDQorIyBOYW1lICJsaWJnc3Rjb3JlZWxlbWVudHMgLSBXaW4zMiBEZWJ1ZyINCisjIEJlZ2luIEdyb3VwICJTb3VyY2UgRmlsZXMiDQorDQorIyBQUk9QIERlZmF1bHRfRmlsdGVyICJjcHA7YztjeHg7cmM7ZGVmO3I7b2RsO2lkbDtocGo7YmF0Ig0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5ccGx1Z2luc1xlbGVtZW50c1xnc3RidWZmZXJzdG9yZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXHBsdWdpbnNcZWxlbWVudHNcZ3N0Y2Fwc2ZpbHRlci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXHBsdWdpbnNcZWxlbWVudHNcZ3N0ZWxlbWVudHMuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxwbHVnaW5zXGVsZW1lbnRzXGdzdGZha2VzaW5rLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5ccGx1Z2luc1xlbGVtZW50c1xnc3RmYWtlc3JjLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5ccGx1Z2luc1xlbGVtZW50c1xnc3RmaWxlc2luay5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXHBsdWdpbnNcZWxlbWVudHNcZ3N0ZmlsZXNyYy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXHBsdWdpbnNcZWxlbWVudHNcZ3N0aWRlbnRpdHkuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxwbHVnaW5zXGVsZW1lbnRzXGdzdG11bHRpcXVldWUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxwbHVnaW5zXGVsZW1lbnRzXGdzdHF1ZXVlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5ccGx1Z2luc1xlbGVtZW50c1xnc3R0ZWUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxwbHVnaW5zXGVsZW1lbnRzXGdzdHR5cGVmaW5kZWxlbWVudC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEVuZCBHcm91cA0KKyMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyINCisNCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImg7aHBwO2h4eDtobTtpbmwiDQorIyBFbmQgR3JvdXANCisjIEJlZ2luIEdyb3VwICJSZXNvdXJjZSBGaWxlcyINCisNCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZSINCisjIEVuZCBHcm91cA0KKyMgRW5kIFRhcmdldA0KKyMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS93aW4zMi92czYvbGliZ3N0ZGF0YXByb3RvY29sLmRzcCBiL3dpbjMyL3ZzNi9saWJnc3RkYXRhcHJvdG9jb2wuZHNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NTg0OWEKLS0tIC9kZXYvbnVsbAorKysgYi93aW4zMi92czYvbGliZ3N0ZGF0YXByb3RvY29sLmRzcApAQCAtMCwwICsxLDEyNyBAQAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJsaWJnc3RkYXRhcHJvdG9jb2wiIC0gUGFja2FnZSBPd25lcj08ND4NCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQorIyAqKiBETyBOT1QgRURJVCAqKg0KKw0KKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCisNCitDRkc9bGliZ3N0ZGF0YXByb3RvY29sIC0gV2luMzIgRGVidWcNCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgTk1BS0UgL2YgImxpYmdzdGRhdGFwcm90b2NvbC5tYWsiLg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCishTUVTU0FHRSANCishTUVTU0FHRSBOTUFLRSAvZiAibGliZ3N0ZGF0YXByb3RvY29sLm1hayIgQ0ZHPSJsaWJnc3RkYXRhcHJvdG9jb2wgLSBXaW4zMiBEZWJ1ZyINCishTUVTU0FHRSANCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCishTUVTU0FHRSANCishTUVTU0FHRSAibGliZ3N0ZGF0YXByb3RvY29sIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQorIU1FU1NBR0UgImxpYmdzdGRhdGFwcm90b2NvbCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCishTUVTU0FHRSANCisNCisjIEJlZ2luIFByb2plY3QNCisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KKyMgUFJPUCBTY2NfUHJvak5hbWUgIiINCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIg0KK0NQUD1jbC5leGUNCitNVEw9bWlkbC5leGUNCitSU0M9cmMuZXhlDQorDQorIUlGICAiJChDRkcpIiA9PSAibGliZ3N0ZGF0YXByb3RvY29sIC0gV2luMzIgUmVsZWFzZSINCisNCisjIFBST1AgQkFTRSBVc2VfTUZDIDANCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KKyMgUFJPUCBVc2VfTUZDIDANCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIE91dHB1dF9EaXIgIlJlbGVhc2UiDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTElCR1NUREFUQVBST1RPQ09MX0VYUE9SVFMiIC9ZWCAvRkQgL2MNCisjIEFERCBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0kgIi4uLy4uIiAvSSAiLi4vLi4vbGlicyIgL0kgIi4uL2NvbW1vbiIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJMSUJHU1REQVRBUFJPVE9DT0xfRVhQT1JUUyIgL0QgIkhBVkVfQ09ORklHX0giIC9GRCAvYw0KKyMgU1VCVFJBQ1QgQ1BQIC9ZWA0KKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KKyMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJTkszMj1saW5rLmV4ZQ0KKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvbWFjaGluZTpJMzg2DQorIyBBREQgTElOSzMyIGdsaWItMi4wLmxpYiBnb2JqZWN0LTIuMC5saWIgZ3RocmVhZC0yLjAubGliIGdtb2R1bGUtMi4wLmxpYiAvbm9sb2dvIC9kbGwgL21hY2hpbmU6STM4NiAvb3V0OiJSZWxlYXNlL2xpYmdzdGRhdGFwcm90b2NvbC0wLjEwLmRsbCINCisjIEJlZ2luIFNwZWNpYWwgQnVpbGQgVG9vbA0KK1RhcmdldFBhdGg9LlxSZWxlYXNlXGxpYmdzdGRhdGFwcm90b2NvbC0wLjEwLmRsbA0KK1NPVVJDRT0iJChJbnB1dFBhdGgpIg0KK1Bvc3RCdWlsZF9DbWRzPWNvcHkgL1kgJChUYXJnZXRQYXRoKSBjOlxnc3RyZWFtZXJcYmluDQorIyBFbmQgU3BlY2lhbCBCdWlsZCBUb29sDQorDQorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImxpYmdzdGRhdGFwcm90b2NvbCAtIFdpbjMyIERlYnVnIg0KKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBPdXRwdXRfRGlyICJEZWJ1ZyINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTElCR1NUREFUQVBST1RPQ09MX0VYUE9SVFMiIC9ZWCAvRkQgL0daIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWkkgL09kIC9JICIuLi8uLiIgL0kgIi4uLy4uL2xpYnMiIC9JICIuLi9jb21tb24iIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTElCR1NUREFUQVBST1RPQ09MX0VYUE9SVFMiIC9EICJIQVZFX0NPTkZJR19IIiAvRkQgL0daIC9jDQorIyBTVUJUUkFDVCBDUFAgL1lYDQorIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQorIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQorQlNDMzI9YnNjbWFrZS5leGUNCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCisjIEFERCBCU0MzMiAvbm9sb2dvDQorTElOSzMyPWxpbmsuZXhlDQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCisjIEFERCBMSU5LMzIgZ2xpYi0yLjBELmxpYiBnb2JqZWN0LTIuMEQubGliIGd0aHJlYWQtMi4wRC5saWIgZ21vZHVsZS0yLjBELmxpYiAvbm9sb2dvIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiRGVidWcvbGliZ3N0ZGF0YXByb3RvY29sLTAuMTAuZGxsIiAvcGRidHlwZTpzZXB0DQorIyBCZWdpbiBTcGVjaWFsIEJ1aWxkIFRvb2wNCitUYXJnZXRQYXRoPS5cRGVidWdcbGliZ3N0ZGF0YXByb3RvY29sLTAuMTAuZGxsDQorU09VUkNFPSIkKElucHV0UGF0aCkiDQorUG9zdEJ1aWxkX0NtZHM9Y29weSAvWSAkKFRhcmdldFBhdGgpIGM6XGdzdHJlYW1lclxkZWJ1Z1xiaW4NCisjIEVuZCBTcGVjaWFsIEJ1aWxkIFRvb2wNCisNCishRU5ESUYgDQorDQorIyBCZWdpbiBUYXJnZXQNCisNCisjIE5hbWUgImxpYmdzdGRhdGFwcm90b2NvbCAtIFdpbjMyIFJlbGVhc2UiDQorIyBOYW1lICJsaWJnc3RkYXRhcHJvdG9jb2wgLSBXaW4zMiBEZWJ1ZyINCisjIEJlZ2luIEdyb3VwICJTb3VyY2UgRmlsZXMiDQorDQorIyBQUk9QIERlZmF1bHRfRmlsdGVyICJjcHA7YztjeHg7cmM7ZGVmO3I7b2RsO2lkbDtocGo7YmF0Ig0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic1xnc3RcZGF0YXByb3RvY29sXGRhdGFwcm90b2NvbC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXGNvbW1vblxsaWJnc3RkYXRhcHJvdG9jb2wuZGVmDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEVuZCBHcm91cA0KKyMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyINCisNCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImg7aHBwO2h4eDtobTtpbmwiDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzXGdzdFxkYXRhcHJvdG9jb2xcZGF0YXByb3RvY29sLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Ii4uXC4uXGxpYnNcZ3N0XGRhdGFwcm90b2NvbFxkcC1wcml2YXRlLmgiDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEVuZCBHcm91cA0KKyMgRW5kIFRhcmdldA0KKyMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS93aW4zMi92czYvbGliZ3N0bmV0LmRzcCBiL3dpbjMyL3ZzNi9saWJnc3RuZXQuZHNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NTE5NDgKLS0tIC9kZXYvbnVsbAorKysgYi93aW4zMi92czYvbGliZ3N0bmV0LmRzcApAQCAtMCwwICsxLDE0NyBAQAorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJsaWJnc3RuZXQiIC0gUGFja2FnZSBPd25lcj08ND4NCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQorIyAqKiBETyBOT1QgRURJVCAqKg0KKw0KKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCisNCitDRkc9bGliZ3N0bmV0IC0gV2luMzIgRGVidWcNCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgTk1BS0UgL2YgImxpYmdzdG5ldC5tYWsiLg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCishTUVTU0FHRSANCishTUVTU0FHRSBOTUFLRSAvZiAibGliZ3N0bmV0Lm1hayIgQ0ZHPSJsaWJnc3RuZXQgLSBXaW4zMiBEZWJ1ZyINCishTUVTU0FHRSANCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCishTUVTU0FHRSANCishTUVTU0FHRSAibGliZ3N0bmV0IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQorIU1FU1NBR0UgImxpYmdzdG5ldCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCishTUVTU0FHRSANCisNCisjIEJlZ2luIFByb2plY3QNCisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KKyMgUFJPUCBTY2NfUHJvak5hbWUgIiINCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIg0KK0NQUD1jbC5leGUNCitNVEw9bWlkbC5leGUNCitSU0M9cmMuZXhlDQorDQorIUlGICAiJChDRkcpIiA9PSAibGliZ3N0bmV0IC0gV2luMzIgUmVsZWFzZSINCisNCisjIFBST1AgQkFTRSBVc2VfTUZDIDANCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KKyMgUFJPUCBVc2VfTUZDIDANCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIE91dHB1dF9EaXIgIlJlbGVhc2UiDQorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTElCR1NUTkVUX0VYUE9SVFMiIC9ZWCAvRkQgL2MNCisjIEFERCBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0kgIi4uLy4uIiAvSSAiLi4vLi4vbGlicyIgL0kgIi4uL2NvbW1vbiIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJMSUJHU1RORVRfRVhQT1JUUyIgL0QgIkhBVkVfQ09ORklHX0giIC9GRCAvYw0KKyMgU1VCVFJBQ1QgQ1BQIC9ZWA0KKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KKyMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJTkszMj1saW5rLmV4ZQ0KKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvbWFjaGluZTpJMzg2DQorIyBBREQgTElOSzMyIGdsaWItMi4wLmxpYiBnb2JqZWN0LTIuMC5saWIgZ3RocmVhZC0yLjAubGliIGdtb2R1bGUtMi4wLmxpYiBXczJfMzIubGliIC9ub2xvZ28gL2RsbCAvbWFjaGluZTpJMzg2IC9vdXQ6IlJlbGVhc2UvbGliZ3N0bmV0LTAuMTAuZGxsIg0KKyMgQmVnaW4gU3BlY2lhbCBCdWlsZCBUb29sDQorVGFyZ2V0UGF0aD0uXFJlbGVhc2VcbGliZ3N0bmV0LTAuMTAuZGxsDQorU09VUkNFPSIkKElucHV0UGF0aCkiDQorUG9zdEJ1aWxkX0NtZHM9Y29weSAvWSAkKFRhcmdldFBhdGgpIGM6XGdzdHJlYW1lclxiaW4NCisjIEVuZCBTcGVjaWFsIEJ1aWxkIFRvb2wNCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAibGliZ3N0bmV0IC0gV2luMzIgRGVidWciDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KKyMgUFJPUCBVc2VfTUZDIDANCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQorIyBQUk9QIE91dHB1dF9EaXIgIkRlYnVnIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KKyMgUFJPUCBUYXJnZXRfRGlyICIiDQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJMSUJHU1RORVRfRVhQT1JUUyIgL1lYIC9GRCAvR1ogL2MNCisjIEFERCBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aSSAvT2QgL0kgIi4uLy4uIiAvSSAiLi4vLi4vbGlicyIgL0kgIi4uL2NvbW1vbiIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJMSUJHU1RORVRfRVhQT1JUUyIgL0QgIkhBVkVfQ09ORklHX0giIC9GRCAvR1ogL2MNCisjIFNVQlRSQUNUIENQUCAvWVgNCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCisjIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCitCU0MzMj1ic2NtYWtlLmV4ZQ0KKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KKyMgQUREIEJTQzMyIC9ub2xvZ28NCitMSU5LMzI9bGluay5leGUNCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KKyMgQUREIExJTkszMiBnbGliLTIuMEQubGliIGdvYmplY3QtMi4wRC5saWIgZ3RocmVhZC0yLjBELmxpYiBnbW9kdWxlLTIuMEQubGliIFdzMl8zMi5saWIgL25vbG9nbyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6IkRlYnVnL2xpYmdzdG5ldC0wLjEwLmRsbCIgL3BkYnR5cGU6c2VwdA0KKyMgQmVnaW4gU3BlY2lhbCBCdWlsZCBUb29sDQorVGFyZ2V0UGF0aD0uXERlYnVnXGxpYmdzdG5ldC0wLjEwLmRsbA0KK1NPVVJDRT0iJChJbnB1dFBhdGgpIg0KK1Bvc3RCdWlsZF9DbWRzPWNvcHkgL1kgJChUYXJnZXRQYXRoKSBjOlxnc3RyZWFtZXJcZGVidWdcYmluDQorIyBFbmQgU3BlY2lhbCBCdWlsZCBUb29sDQorDQorIUVORElGIA0KKw0KKyMgQmVnaW4gVGFyZ2V0DQorDQorIyBOYW1lICJsaWJnc3RuZXQgLSBXaW4zMiBSZWxlYXNlIg0KKyMgTmFtZSAibGliZ3N0bmV0IC0gV2luMzIgRGVidWciDQorIyBCZWdpbiBHcm91cCAiU291cmNlIEZpbGVzIg0KKw0KKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdCINCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNcZ3N0XG5ldFxnc3RuZXRjbGllbnRjbG9jay5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGxpYnNcZ3N0XG5ldFxnc3RuZXR0aW1lcGFja2V0LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic1xnc3RcbmV0XGdzdG5ldHRpbWVwcm92aWRlci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXGNvbW1vblxsaWJnc3RuZXQuZGVmDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEVuZCBHcm91cA0KKyMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyINCisNCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImg7aHBwO2h4eDtobTtpbmwiDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzXGdzdFxuZXRcZ3N0bmV0LmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic1xnc3RcbmV0XGdzdG5ldGNsaWVudGNsb2NrLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cbGlic1xnc3RcbmV0XGdzdG5ldHRpbWVwYWNrZXQuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxsaWJzXGdzdFxuZXRcZ3N0bmV0dGltZXByb3ZpZGVyLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgRW5kIEdyb3VwDQorIyBCZWdpbiBHcm91cCAiUmVzb3VyY2UgRmlsZXMiDQorDQorIyBQUk9QIERlZmF1bHRfRmlsdGVyICJpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGUiDQorIyBFbmQgR3JvdXANCisjIEVuZCBUYXJnZXQNCisjIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvd2luMzIvdnM2L2xpYmdzdHJlYW1lci5kc3AgYi93aW4zMi92czYvbGliZ3N0cmVhbWVyLmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGU4ODc3Ci0tLSAvZGV2L251bGwKKysrIGIvd2luMzIvdnM2L2xpYmdzdHJlYW1lci5kc3AKQEAgLTAsMCArMSw1NTUgQEAKKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0ibGliZ3N0cmVhbWVyIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KKyMgKiogRE8gTk9UIEVESVQgKioNCisNCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQorDQorQ0ZHPWxpYmdzdHJlYW1lciAtIFdpbjMyIERlYnVnDQorIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KKyFNRVNTQUdFIA0KKyFNRVNTQUdFIE5NQUtFIC9mICJsaWJnc3RyZWFtZXIubWFrIi4NCishTUVTU0FHRSANCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQorIU1FU1NBR0UgDQorIU1FU1NBR0UgTk1BS0UgL2YgImxpYmdzdHJlYW1lci5tYWsiIENGRz0ibGliZ3N0cmVhbWVyIC0gV2luMzIgRGVidWciDQorIU1FU1NBR0UgDQorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQorIU1FU1NBR0UgDQorIU1FU1NBR0UgImxpYmdzdHJlYW1lciAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KKyFNRVNTQUdFICJsaWJnc3RyZWFtZXIgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQorIU1FU1NBR0UgDQorDQorIyBCZWdpbiBQcm9qZWN0DQorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCisjIFBST1AgU2NjX1Byb2pOYW1lICIiDQorIyBQUk9QIFNjY19Mb2NhbFBhdGggIiINCitDUFA9Y2wuZXhlDQorTVRMPW1pZGwuZXhlDQorUlNDPXJjLmV4ZQ0KKw0KKyFJRiAgIiQoQ0ZHKSIgPT0gImxpYmdzdHJlYW1lciAtIFdpbjMyIFJlbGVhc2UiDQorDQorIyBQUk9QIEJBU0UgVXNlX01GQyAwDQorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KKyMgUFJPUCBPdXRwdXRfRGlyICJSZWxlYXNlIg0KKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQorIyBQUk9QIFRhcmdldF9EaXIgIiINCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIkxJQkdTVFJFQU1FUl9FWFBPUlRTIiAvWVggL0ZEIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvTzIgL0kgIi4iIC9JICIuLi8uLiIgL0kgIi4uL2NvbW1vbiIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJMSUJHU1RSRUFNRVJfRVhQT1JUUyIgL0QgIkhBVkVfQ09ORklHX0giIC9EICJIQVZFX1dJTjMyIiAvRkQgL2MNCisjIFNVQlRSQUNUIENQUCAvWVggL1ljIC9ZdQ0KKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KKyMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCisjIEFERCBCQVNFIFJTQyAvbCAweDQwYyAvZCAiTkRFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwYyAvZCAiTkRFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJTkszMj1saW5rLmV4ZQ0KKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvbWFjaGluZTpJMzg2DQorIyBBREQgTElOSzMyIGdsaWItMi4wLmxpYiBnb2JqZWN0LTIuMC5saWIgZ3RocmVhZC0yLjAubGliIGdtb2R1bGUtMi4wLmxpYiBsaWJ4bWwyLmxpYiAvbm9sb2dvIC9kbGwgL21hY2hpbmU6STM4NiAvb3V0OiJSZWxlYXNlL2xpYmdzdHJlYW1lci0wLjEwLmRsbCINCisjIEJlZ2luIFNwZWNpYWwgQnVpbGQgVG9vbA0KK1RhcmdldFBhdGg9LlxSZWxlYXNlXGxpYmdzdHJlYW1lci0wLjEwLmRsbA0KK1NPVVJDRT0iJChJbnB1dFBhdGgpIg0KK1Bvc3RCdWlsZF9DbWRzPW1rZGlyIGM6XGdzdHJlYW1lcglta2RpciBjOlxnc3RyZWFtZXJcYmluCWNvcHkgL1kgJChUYXJnZXRQYXRoKSBjOlxnc3RyZWFtZXJcYmluDQorIyBFbmQgU3BlY2lhbCBCdWlsZCBUb29sDQorDQorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImxpYmdzdHJlYW1lciAtIFdpbjMyIERlYnVnIg0KKw0KKyMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCisjIFBST1AgVXNlX01GQyAwDQorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KKyMgUFJPUCBPdXRwdXRfRGlyICJEZWJ1ZyINCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCisjIFBST1AgVGFyZ2V0X0RpciAiIg0KKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTElCR1NUUkVBTUVSX0VYUE9SVFMiIC9ZWCAvRkQgL0daIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9aSSAvT2QgL0kgIi4iIC9JICIuLi8uLiIgL0kgIi4uL2NvbW1vbiIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJMSUJHU1RSRUFNRVJfRVhQT1JUUyIgL0QgIkhBVkVfQ09ORklHX0giIC9EICJIQVZFX1dJTjMyIiAvRlIgL0ZEIC9HWiAvYw0KKyMgU1VCVFJBQ1QgQ1BQIC9ZWA0KKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KKyMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCisjIEFERCBCQVNFIFJTQyAvbCAweDQwYyAvZCAiX0RFQlVHIg0KKyMgQUREIFJTQyAvbCAweDQwYyAvZCAiX0RFQlVHIg0KK0JTQzMyPWJzY21ha2UuZXhlDQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQorIyBBREQgQlNDMzIgL25vbG9nbw0KK0xJTkszMj1saW5rLmV4ZQ0KKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQorIyBBREQgTElOSzMyIGdsaWItMi4wRC5saWIgZ29iamVjdC0yLjBELmxpYiBndGhyZWFkLTIuMEQubGliIGdtb2R1bGUtMi4wRC5saWIgbGlieG1sMkQubGliIC9ub2xvZ28gL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiJEZWJ1Zy9saWJnc3RyZWFtZXItMC4xMC5kbGwiIC9wZGJ0eXBlOnNlcHQNCisjIEJlZ2luIFNwZWNpYWwgQnVpbGQgVG9vbA0KK1RhcmdldFBhdGg9LlxEZWJ1Z1xsaWJnc3RyZWFtZXItMC4xMC5kbGwNCitTT1VSQ0U9IiQoSW5wdXRQYXRoKSINCitQb3N0QnVpbGRfQ21kcz1ta2RpciBjOlxnc3RyZWFtZXJcZGVidWcJbWtkaXIgYzpcZ3N0cmVhbWVyXGRlYnVnXGJpbgljb3B5IC9ZICQoVGFyZ2V0UGF0aCkgYzpcZ3N0cmVhbWVyXGRlYnVnXGJpbg0KKyMgRW5kIFNwZWNpYWwgQnVpbGQgVG9vbA0KKw0KKyFFTkRJRiANCisNCisjIEJlZ2luIFRhcmdldA0KKw0KKyMgTmFtZSAibGliZ3N0cmVhbWVyIC0gV2luMzIgUmVsZWFzZSINCisjIE5hbWUgImxpYmdzdHJlYW1lciAtIFdpbjMyIERlYnVnIg0KKyMgQmVnaW4gR3JvdXAgIlNvdXJjZSBGaWxlcyINCisNCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImNwcDtjO2N4eDtyYztkZWY7cjtvZGw7aWRsO2hwajtiYXQiDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlxjb21tb25cZGlyZW50LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XHBhcnNlXGdyYW1tYXIudGFiLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XGdzdC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3RiaW4uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0YnVmZmVyLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XGdzdGJ1cy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3RjYXBzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XGdzdGNoaWxkcHJveHkuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0Y2xvY2suYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0ZGVidWd1dGlscy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3RlbGVtZW50LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XGdzdGVsZW1lbnRmYWN0b3J5LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XGdzdGVudW10eXBlcy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3RlcnJvci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3RldmVudC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3RmaWx0ZXIuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0Zm9ybWF0LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XGdzdGdob3N0cGFkLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XGdzdGluZGV4LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XGdzdGluZGV4ZmFjdG9yeS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3RpbmZvLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XGdzdGludGVyZmFjZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3RpdGVyYXRvci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3RtYXJzaGFsLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XGdzdG1lc3NhZ2UuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0bWluaW9iamVjdC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3RvYmplY3QuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0cGFkLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XGdzdHBhZHRlbXBsYXRlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XGdzdHBhcmFtc3BlY3MuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0cGFyc2UuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0cGlwZWxpbmUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0cGx1Z2luLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XGdzdHBsdWdpbmZlYXR1cmUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0cXVhcmsuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0cXVlcnkuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0cmVnaXN0cnkuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0cmVnaXN0cnl4bWwuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0c2VnbWVudC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3RzdHJ1Y3R1cmUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0c3lzdGVtY2xvY2suYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0dGFnbGlzdC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3R0YWdzZXR0ZXIuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0dGFzay5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3R0cmFjZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3R0eXBlZmluZC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3R0eXBlZmluZGZhY3RvcnkuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0dXJpLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XGdzdHV0aWxzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XGdzdHZhbHVlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XGdzdHhtbC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxwYXJzZVxsZXguX2dzdF9wYXJzZV95eS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXGNvbW1vblxsaWJnc3RyZWFtZXIuZGVmDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEVuZCBHcm91cA0KKyMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyINCisNCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImg7aHBwO2h4eDtobTtpbmwiDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ2V0dGV4dC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPSIuLlwuLlxnc3RcZ2xpYi1jb21wYXQuaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Ii4uXC4uXGdzdFxnc3QtaTE4bi1hcHAuaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Ii4uXC4uXGdzdFxnc3QtaTE4bi1saWIuaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XGdzdC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3RfcHJpdmF0ZS5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3RiaW4uaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0YnVmZmVyLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XGdzdGJ1cy5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3RjYXBzLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XGdzdGNoaWxkcHJveHkuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0Y2xvY2suaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0Y29tcGF0LmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XGdzdGNvbmZpZy5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3Rjb25maWcuaC5pbg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0ZWxlbWVudC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3RlbGVtZW50ZmFjdG9yeS5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3RlbnVtdHlwZXMuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0ZXJyb3IuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0ZXZlbnQuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0ZmlsdGVyLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XGdzdGZvcm1hdC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3RnaG9zdHBhZC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3RpbmRleC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3RpbmRleGZhY3RvcnkuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0aW5mby5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3RpbnRlcmZhY2UuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0aXRlcmF0b3IuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0bWFjcm9zLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XGdzdG1hcnNoYWwuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0bWVtY2h1bmsuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0bWVzc2FnZS5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3RtaW5pb2JqZWN0LmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XGdzdG9iamVjdC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3RwYWQuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0cGFkdGVtcGxhdGUuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0cGFyc2UuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0cGlwZWxpbmUuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0cGx1Z2luLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XGdzdHBsdWdpbmZlYXR1cmUuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0cXVlcnkuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0cmVnaXN0cnkuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0c2VnbWVudC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3RzdHJ1Y3R1cmUuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0c3lzdGVtY2xvY2suaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0dGFnbGlzdC5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3R0YWdzZXR0ZXIuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0dGFzay5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3R0cmFjZS5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3R0cmFzaHN0YWNrLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XGdzdHR5cGVmaW5kLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cZ3N0XGdzdHR5cGVmaW5kZmFjdG9yeS5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3R1cmkuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0dXRpbHMuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0dmFsdWUuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxnc3RcZ3N0dmVyc2lvbi5oDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGdzdFxnc3R4bWwuaA0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBFbmQgR3JvdXANCisjIEJlZ2luIEdyb3VwICJSZXNvdXJjZSBGaWxlcyINCisNCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZSINCisjIEVuZCBHcm91cA0KKyMgRW5kIFRhcmdldA0KKyMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS93aW4zMi92czcvZ3JhbW1hci52Y3Byb2ogYi93aW4zMi92czcvZ3JhbW1hci52Y3Byb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNmZmE2NgotLS0gL2Rldi9udWxsCisrKyBiL3dpbjMyL3ZzNy9ncmFtbWFyLnZjcHJvagpAQCAtMCwwICsxLDE2MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUxIj8+Cis8VmlzdWFsU3R1ZGlvUHJvamVjdAorCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIgorCVZlcnNpb249IjcuMTAiCisJTmFtZT0iZ3JhbW1hciIKKwlQcm9qZWN0R1VJRD0iezZEN0VCM0Q0LTdFOTEtNEQ5OC04MEVBLTI4QThGMkUzNjVGN30iCisJUm9vdE5hbWVzcGFjZT0iZ3JhbW1hciIKKwlLZXl3b3JkPSJXaW4zMlByb2oiPgorCTxQbGF0Zm9ybXM+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0iV2luMzIiLz4KKwk8L1BsYXRmb3Jtcz4KKwk8Q29uZmlndXJhdGlvbnM+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCU91dHB1dERpcmVjdG9yeT0iRGVidWciCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IkRlYnVnIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEwIgorCQkJQ2hhcmFjdGVyU2V0PSIyIj4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rvcnk9IlJlbGVhc2UiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlJlbGVhc2UiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMTAiCisJCQlDaGFyYWN0ZXJTZXQ9IjIiPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCTwvQ29uZmlndXJhdGlvbnM+CisJPFJlZmVyZW5jZXM+CisJPC9SZWZlcmVuY2VzPgorCTxGaWxlcz4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XHBhcnNlXGdyYW1tYXIueSI+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiI+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkJCUNvbW1hbmRMaW5lPSJiaXNvbiAtZCAtdiAtcF9nc3RfcGFyc2VfX3l5IC4uXC4uXGdzdFxwYXJzZVxncmFtbWFyLnkgLW8gLi5cLi5cZ3N0XHBhcnNlXGdyYW1tYXIudGFiLmMKK2ZsZXggLVBfZ3N0X3BhcnNlX3l5IC1vLi5cLi5cZ3N0XHBhcnNlXGxleC5fZ3N0X3BhcnNlX3l5LmMgLi5cLi5cZ3N0XHBhcnNlXHBhcnNlLmwKKyIKKwkJCQkJT3V0cHV0cz0iLi5cLi5cZ3N0XHBhcnNlXGxleC5fZ3N0X3BhcnNlX3l5LmM7Li5cLi5cZ3N0XHBhcnNlXGdyYW1tYXIudGFiLmM7Li5cLi5cZ3N0XHBhcnNlXGdyYW1tYXIudGFiLmgiLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIj4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCQkJQ29tbWFuZExpbmU9ImJpc29uIC1kIC12IC1wX2dzdF9wYXJzZV9feXkgLi5cLi5cZ3N0XHBhcnNlXGdyYW1tYXIueSAtbyAuLlwuLlxnc3RccGFyc2VcZ3JhbW1hci50YWIuYworZmxleCAtUF9nc3RfcGFyc2VfeXkgLW8uLlwuLlxnc3RccGFyc2VcbGV4Ll9nc3RfcGFyc2VfeXkuYyAuLlwuLlxnc3RccGFyc2VccGFyc2UubAorIgorCQkJCQlPdXRwdXRzPSIuLlwuLlxnc3RccGFyc2VcbGV4Ll9nc3RfcGFyc2VfeXkuYzsuLlwuLlxnc3RccGFyc2VcZ3JhbW1hci50YWIuYzsuLlwuLlxnc3RccGFyc2VcZ3JhbW1hci50YWIuaCIvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlxjb21tb25cZ3N0Y29uZmlnLmgiPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJCQlDb21tYW5kTGluZT0iY29weSAveSAuLlxjb21tb25cZ3N0Y29uZmlnLmggLi5cLi5cZ3N0CisiCisJCQkJCU91dHB1dHM9Ii4uXC4uXGdzdGNvbmZpZy5oIi8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiI+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkJCUNvbW1hbmRMaW5lPSJjb3B5IC95IC4uXGNvbW1vblxnc3Rjb25maWcuaCAuLlwuLlxnc3QKKyIKKwkJCQkJT3V0cHV0cz0iLi5cLi5cZ3N0Y29uZmlnLmgiLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cY29tbW9uXGdzdGVudW10eXBlcy5jIj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIj4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCQkJQ29tbWFuZExpbmU9ImNvcHkgL3kgLi5cY29tbW9uXGdzdGVudW10eXBlcy5jIC4uXC4uXGdzdAorY29weSAveSAuLlxjb21tb25cZ3N0ZW51bXR5cGVzLmggLi5cLi5cZ3N0IgorCQkJCQlPdXRwdXRzPSIuLlwuLlxnc3RcZ3N0ZW51bXR5cGVzLmM7Li5cLi5cZ3N0XGdzdGVudW10eXBlcy5oIi8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiI+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkJCUNvbW1hbmRMaW5lPSJjb3B5IC95IC4uXGNvbW1vblxnc3RlbnVtdHlwZXMuYyAuLlwuLlxnc3QKK2NvcHkgL3kgLi5cY29tbW9uXGdzdGVudW10eXBlcy5oIC4uXC4uXGdzdCIKKwkJCQkJT3V0cHV0cz0iLi5cLi5cZ3N0XGdzdGVudW10eXBlcy5jOy4uXC4uXGdzdFxnc3RlbnVtdHlwZXMuaCIvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0bWFyc2hhbC5saXN0Ij4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIj4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCQkJQ29tbWFuZExpbmU9ImVjaG8gI2luY2x1ZGUgJnF1b3Q7Z2xpYi1vYmplY3QuaCZxdW90OyAmZ3Q7IGdzdG1hcnNoYWwuYy50bXAKK2VjaG8gI2luY2x1ZGUgJnF1b3Q7Z3N0bWFyc2hhbC5oJnF1b3Q7ICZndDsmZ3Q7IGdzdG1hcnNoYWwuYy50bXAKK2dsaWItZ2VubWFyc2hhbCAtLWJvZHkgLS1wcmVmaXg9Z3N0X21hcnNoYWwgLi5cLi5cZ3N0XGdzdG1hcnNoYWwubGlzdCAmZ3Q7Jmd0OyBnc3RtYXJzaGFsLmMudG1wCittb3ZlIGdzdG1hcnNoYWwuYy50bXAgLi5cLi5cZ3N0XGdzdG1hcnNoYWwuYworZWNobyAjaW5jbHVkZSAmcXVvdDtnc3QvZ3N0Y29uZmlnLmgmcXVvdDsgJmd0OyBnc3RtYXJzaGFsLmgudG1wCitnbGliLWdlbm1hcnNoYWwgLS1oZWFkZXIgLS1wcmVmaXg9Z3N0X21hcnNoYWwgLi5cLi5cZ3N0XGdzdG1hcnNoYWwubGlzdCAmZ3Q7Jmd0OyBnc3RtYXJzaGFsLmgudG1wCittb3ZlIGdzdG1hcnNoYWwuaC50bXAgLi5cLi5cZ3N0XGdzdG1hcnNoYWwuaAorIgorCQkJCQlPdXRwdXRzPSIuLlwuLlxnc3RcZ3N0bWFyc2hhbC5jIi8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiI+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkJCUNvbW1hbmRMaW5lPSJlY2hvICNpbmNsdWRlICZxdW90O2dsaWItb2JqZWN0LmgmcXVvdDsgJmd0OyBnc3RtYXJzaGFsLmMudG1wCitlY2hvICNpbmNsdWRlICZxdW90O2dzdG1hcnNoYWwuaCZxdW90OyAmZ3Q7Jmd0OyBnc3RtYXJzaGFsLmMudG1wCitnbGliLWdlbm1hcnNoYWwgLS1ib2R5IC0tcHJlZml4PWdzdF9tYXJzaGFsIC4uXC4uXGdzdFxnc3RtYXJzaGFsLmxpc3QgJmd0OyZndDsgZ3N0bWFyc2hhbC5jLnRtcAorbW92ZSBnc3RtYXJzaGFsLmMudG1wIC4uXC4uXGdzdFxnc3RtYXJzaGFsLmMKK2VjaG8gI2luY2x1ZGUgJnF1b3Q7Z3N0L2dzdGNvbmZpZy5oJnF1b3Q7ICZndDsgZ3N0bWFyc2hhbC5oLnRtcAorZ2xpYi1nZW5tYXJzaGFsIC0taGVhZGVyIC0tcHJlZml4PWdzdF9tYXJzaGFsIC4uXC4uXGdzdFxnc3RtYXJzaGFsLmxpc3QgJmd0OyZndDsgZ3N0bWFyc2hhbC5oLnRtcAorbW92ZSBnc3RtYXJzaGFsLmgudG1wIC4uXC4uXGdzdFxnc3RtYXJzaGFsLmgKKyIKKwkJCQkJT3V0cHV0cz0iLi5cLi5cZ3N0XGdzdG1hcnNoYWwuYyIvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlxjb21tb25cZ3N0dmVyc2lvbi5oIj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIj4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCQkJQ29tbWFuZExpbmU9ImNvcHkgL3kgLi5cY29tbW9uXGdzdHZlcnNpb24uaCAuLlwuLlxnc3QKKyIKKwkJCQkJT3V0cHV0cz0iLi5cLi5cZ3N0XGdzdHZlcnNpb24uaCIvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJCQlDb21tYW5kTGluZT0iY29weSAveSAuLlxjb21tb25cZ3N0dmVyc2lvbi5oIC4uXC4uXGdzdAorIgorCQkJCQlPdXRwdXRzPSIuLlwuLlxnc3RcZ3N0dmVyc2lvbi5oIi8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJPC9GaWxlcz4KKwk8R2xvYmFscz4KKwk8L0dsb2JhbHM+Cis8L1Zpc3VhbFN0dWRpb1Byb2plY3Q+CmRpZmYgLS1naXQgYS93aW4zMi92czcvZ3N0LWluc3BlY3QudmNwcm9qIGIvd2luMzIvdnM3L2dzdC1pbnNwZWN0LnZjcHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTU1MDUxCi0tLSAvZGV2L251bGwKKysrIGIvd2luMzIvdnM3L2dzdC1pbnNwZWN0LnZjcHJvagpAQCAtMCwwICsxLDEyOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUxIj8+Cis8VmlzdWFsU3R1ZGlvUHJvamVjdAorCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIgorCVZlcnNpb249IjcuMTAiCisJTmFtZT0iZ3N0LWluc3BlY3QiCisJUHJvamVjdEdVSUQ9Ins4MDY0QkI0MC0yMEJFLTRFREUtQTU1NS1DNTdEMzE0QjdDRTl9IgorCUtleXdvcmQ9IldpbjMyUHJvaiI+CisJPFBsYXRmb3Jtcz4KKwkJPFBsYXRmb3JtCisJCQlOYW1lPSJXaW4zMiIvPgorCTwvUGxhdGZvcm1zPgorCTxDb25maWd1cmF0aW9ucz4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJT3V0cHV0RGlyZWN0b3J5PSJEZWJ1ZyIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iRGVidWciCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMSIKKwkJCUNoYXJhY3RlclNldD0iMiI+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1pemF0aW9uPSIwIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uLy4uLC4uLy4uL2xpYnMsLi4vY29tbW9uIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X0NPTlNPTEU7SEFWRV9DT05GSUdfSCIKKwkJCQlNaW5pbWFsUmVidWlsZD0iVFJVRSIKKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCisJCQkJUnVudGltZUxpYnJhcnk9IjMiCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSI0Ii8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJCQlJZ25vcmVJbXBvcnRMaWJyYXJ5PSJUUlVFIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdsaWItMi4wLmxpYiBnb2JqZWN0LTIuMC5saWIgZ3RocmVhZC0yLjAubGliIGdtb2R1bGUtMi4wLmxpYiBsaWJ4bWwyLmxpYiB3c29jazMyLmxpYiBpbnRsLmxpYiIKKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvZ3N0LWluc3BlY3QtMC4xMC5leGUiCisJCQkJTGlua0luY3JlbWVudGFsPSIxIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikvZ3N0LWluc3BlY3QtMC4xMC5wZGIiCisJCQkJU3ViU3lzdGVtPSIxIgorCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCQlDb21tYW5kTGluZT0iY29weSAveSAmcXVvdDskKFRhcmdldFBhdGgpJnF1b3Q7IGM6XGdzdHJlYW1lclxkZWJ1Z1xiaW4iLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rvcnk9IlJlbGVhc2UiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlJlbGVhc2UiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMSIKKwkJCUNoYXJhY3RlclNldD0iMiI+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi4vLi4sLi4vLi4vbGlicywuLi9jb21tb24iCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfQ09OU09MRTtIQVZFX0NPTkZJR19IIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVdhcm5pbmdMZXZlbD0iMyIKKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2xpYi0yLjAubGliIGdvYmplY3QtMi4wLmxpYiBndGhyZWFkLTIuMC5saWIgZ21vZHVsZS0yLjAubGliIGxpYnhtbDIubGliIHdzb2NrMzIubGliIGludGwubGliIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9nc3QtaW5zcGVjdC0wLjEwLmV4ZSIKKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIgorCQkJCVN1YlN5c3RlbT0iMSIKKwkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiCisJCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMiIKKwkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkJQ29tbWFuZExpbmU9ImNvcHkgL3kgJnF1b3Q7JChUYXJnZXRQYXRoKSZxdW90OyBjOlxnc3RyZWFtZXJcYmluIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJPC9Db25maWd1cmF0aW9ucz4KKwk8UmVmZXJlbmNlcz4KKwk8L1JlZmVyZW5jZXM+CisJPEZpbGVzPgorCQk8RmlsdGVyCisJCQlOYW1lPSJTb3VyY2UgRmlsZXMiCisJCQlGaWx0ZXI9ImNwcDtjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214IgorCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHRvb2xzXGdzdC1pbnNwZWN0LmMiPgorCQkJPC9GaWxlPgorCQk8L0ZpbHRlcj4KKwk8L0ZpbGVzPgorCTxHbG9iYWxzPgorCTwvR2xvYmFscz4KKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3dpbjMyL3ZzNy9nc3QtbGF1bmNoLnZjcHJvaiBiL3dpbjMyL3ZzNy9nc3QtbGF1bmNoLnZjcHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Nzk3Y2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvd2luMzIvdnM3L2dzdC1sYXVuY2gudmNwcm9qCkBAIC0wLDAgKzEsMTI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTEiPz4KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0CisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiCisJVmVyc2lvbj0iNy4xMCIKKwlOYW1lPSJnc3QtbGF1bmNoIgorCVByb2plY3RHVUlEPSJ7NUU1OUU3OTYtQzA5Ny00RkI3LUE5NDQtOTA2M0NGOUJEMzAwfSIKKwlLZXl3b3JkPSJXaW4zMlByb2oiPgorCTxQbGF0Zm9ybXM+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0iV2luMzIiLz4KKwk8L1BsYXRmb3Jtcz4KKwk8Q29uZmlndXJhdGlvbnM+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCU91dHB1dERpcmVjdG9yeT0iRGVidWciCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IkRlYnVnIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiCisJCQlDaGFyYWN0ZXJTZXQ9IjIiPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCU9wdGltaXphdGlvbj0iMCIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLi8uLiwuLi9jb21tb24iCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfQ09OU09MRTtIQVZFX0NPTkZJR19IIgorCQkJCU1pbmltYWxSZWJ1aWxkPSJUUlVFIgorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKKwkJCQlSdW50aW1lTGlicmFyeT0iMyIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlXYXJuaW5nTGV2ZWw9IjMiCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjQiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdsaWItMi4wLmxpYiBnb2JqZWN0LTIuMC5saWIgZ3RocmVhZC0yLjAubGliIGdtb2R1bGUtMi4wLmxpYiBsaWJ4bWwyLmxpYiB3c29jazMyLmxpYiBpbnRsLmxpYiIKKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvZ3N0LWxhdW5jaC0wLjEwLmV4ZSIKKwkJCQlMaW5rSW5jcmVtZW50YWw9IjIiCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKS9nc3QtbGF1bmNoLTAuMTAucGRiIgorCQkJCVN1YlN5c3RlbT0iMSIKKwkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkJQ29tbWFuZExpbmU9ImNvcHkgL3kgJnF1b3Q7JChUYXJnZXRQYXRoKSZxdW90OyBjOlxnc3RyZWFtZXJcZGVidWdcYmluIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJT3V0cHV0RGlyZWN0b3J5PSJSZWxlYXNlIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJSZWxlYXNlIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiCisJCQlDaGFyYWN0ZXJTZXQ9IjIiPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uLy4uLC4uL2NvbW1vbiIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19DT05TT0xFO0hBVkVfQ09ORklHX0giCisJCQkJUnVudGltZUxpYnJhcnk9IjIiCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnbGliLTIuMC5saWIgZ29iamVjdC0yLjAubGliIGd0aHJlYWQtMi4wLmxpYiBnbW9kdWxlLTIuMC5saWIgbGlieG1sMi5saWIgd3NvY2szMi5saWIgaW50bC5saWIiCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL2dzdC1sYXVuY2gtMC4xMC5leGUiCisJCQkJTGlua0luY3JlbWVudGFsPSIxIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSIKKwkJCQlTdWJTeXN0ZW09IjEiCisJCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIgorCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiCisJCQkJVGFyZ2V0TWFjaGluZT0iMSIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJCUNvbW1hbmRMaW5lPSJjb3B5IC95ICZxdW90OyQoVGFyZ2V0UGF0aCkmcXVvdDsgYzpcZ3N0cmVhbWVyXGJpbiIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCTwvQ29uZmlndXJhdGlvbnM+CisJPFJlZmVyZW5jZXM+CisJPC9SZWZlcmVuY2VzPgorCTxGaWxlcz4KKwkJPEZpbHRlcgorCQkJTmFtZT0iU291cmNlIEZpbGVzIgorCQkJRmlsdGVyPSJjcHA7YztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteCIKKwkJCVVuaXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9Ij4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx0b29sc1xnc3QtbGF1bmNoLmMiPgorCQkJPC9GaWxlPgorCQk8L0ZpbHRlcj4KKwk8L0ZpbGVzPgorCTxHbG9iYWxzPgorCTwvR2xvYmFscz4KKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3dpbjMyL3ZzNy9nc3RyZWFtZXIuc2xuIGIvd2luMzIvdnM3L2dzdHJlYW1lci5zbG4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU1MjI0MwotLS0gL2Rldi9udWxsCisrKyBiL3dpbjMyL3ZzNy9nc3RyZWFtZXIuc2xuCkBAIC0wLDAgKzEsNzYgQEAKK01pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIFNvbHV0aW9uIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDguMDAKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiZ3JhbW1hciIsICJncmFtbWFyLnZjcHJvaiIsICJ7NkQ3RUIzRDQtN0U5MS00RDk4LTgwRUEtMjhBOEYyRTM2NUY3fSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiZ3N0LWluc3BlY3QiLCAiZ3N0LWluc3BlY3QudmNwcm9qIiwgIns4MDY0QkI0MC0yMEJFLTRFREUtQTU1NS1DNTdEMzE0QjdDRTl9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJe0Y5ODc4NzNCLTJCODgtNEIxQi1CNjI3LUY3MERGNEY5MUU0OX0gPSB7Rjk4Nzg3M0ItMkI4OC00QjFCLUI2MjctRjcwREY0RjkxRTQ5fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImdzdC1sYXVuY2giLCAiZ3N0LWxhdW5jaC52Y3Byb2oiLCAiezVFNTlFNzk2LUMwOTctNEZCNy1BOTQ0LTkwNjNDRjlCRDMwMH0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7Rjk4Nzg3M0ItMkI4OC00QjFCLUI2MjctRjcwREY0RjkxRTQ5fSA9IHtGOTg3ODczQi0yQjg4LTRCMUItQjYyNy1GNzBERjRGOTFFNDl9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibGliZ3N0YmFzZSIsICJsaWJnc3RiYXNlLnZjcHJvaiIsICJ7NEQ3QkM0MDMtNTgzQi00NzI1LUJEODctQTRBMkI3RkQ4MTU2fSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXtGOTg3ODczQi0yQjg4LTRCMUItQjYyNy1GNzBERjRGOTFFNDl9ID0ge0Y5ODc4NzNCLTJCODgtNEIxQi1CNjI3LUY3MERGNEY5MUU0OX0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJsaWJnc3Rjb250cm9sbGVyIiwgImxpYmdzdGNvbnRyb2xsZXIudmNwcm9qIiwgIns1QjI4RTUxNS1DOTJCLTRDRjItOTk2My1BQzZFRkI4QjJBNUN9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJe0Y5ODc4NzNCLTJCODgtNEIxQi1CNjI3LUY3MERGNEY5MUU0OX0gPSB7Rjk4Nzg3M0ItMkI4OC00QjFCLUI2MjctRjcwREY0RjkxRTQ5fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImxpYmdzdGNvcmVlbGVtZW50cyIsICJsaWJnc3Rjb3JlZWxlbWVudHMudmNwcm9qIiwgIns2MkQ3MzU4Qy02ODgwLTQwRUEtOTNGRi0yMUI2OTM3NkM3RjB9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezREN0JDNDAzLTU4M0ItNDcyNS1CRDg3LUE0QTJCN0ZEODE1Nn0gPSB7NEQ3QkM0MDMtNTgzQi00NzI1LUJEODctQTRBMkI3RkQ4MTU2fQorCQl7Rjk4Nzg3M0ItMkI4OC00QjFCLUI2MjctRjcwREY0RjkxRTQ5fSA9IHtGOTg3ODczQi0yQjg4LTRCMUItQjYyNy1GNzBERjRGOTFFNDl9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibGliZ3N0cmVhbWVyIiwgImxpYmdzdHJlYW1lci52Y3Byb2oiLCAie0Y5ODc4NzNCLTJCODgtNEIxQi1CNjI3LUY3MERGNEY5MUU0OX0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7NkQ3RUIzRDQtN0U5MS00RDk4LTgwRUEtMjhBOEYyRTM2NUY3fSA9IHs2RDdFQjNENC03RTkxLTREOTgtODBFQS0yOEE4RjJFMzY1Rjd9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK0dsb2JhbAorCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uKSA9IHByZVNvbHV0aW9uCisJCURlYnVnID0gRGVidWcKKwkJUmVsZWFzZSA9IFJlbGVhc2UKKwlFbmRHbG9iYWxTZWN0aW9uCisJR2xvYmFsU2VjdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvbikgPSBwb3N0U29sdXRpb24KKwkJezZEN0VCM0Q0LTdFOTEtNEQ5OC04MEVBLTI4QThGMkUzNjVGN30uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezZEN0VCM0Q0LTdFOTEtNEQ5OC04MEVBLTI4QThGMkUzNjVGN30uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXs2RDdFQjNENC03RTkxLTREOTgtODBFQS0yOEE4RjJFMzY1Rjd9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7NkQ3RUIzRDQtN0U5MS00RDk4LTgwRUEtMjhBOEYyRTM2NUY3fS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXs4MDY0QkI0MC0yMEJFLTRFREUtQTU1NS1DNTdEMzE0QjdDRTl9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs4MDY0QkI0MC0yMEJFLTRFREUtQTU1NS1DNTdEMzE0QjdDRTl9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7ODA2NEJCNDAtMjBCRS00RURFLUE1NTUtQzU3RDMxNEI3Q0U5fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezgwNjRCQjQwLTIwQkUtNEVERS1BNTU1LUM1N0QzMTRCN0NFOX0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7NUU1OUU3OTYtQzA5Ny00RkI3LUE5NDQtOTA2M0NGOUJEMzAwfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7NUU1OUU3OTYtQzA5Ny00RkI3LUE5NDQtOTA2M0NGOUJEMzAwfS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezVFNTlFNzk2LUMwOTctNEZCNy1BOTQ0LTkwNjNDRjlCRDMwMH0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs1RTU5RTc5Ni1DMDk3LTRGQjctQTk0NC05MDYzQ0Y5QkQzMDB9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezREN0JDNDAzLTU4M0ItNDcyNS1CRDg3LUE0QTJCN0ZEODE1Nn0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezREN0JDNDAzLTU4M0ItNDcyNS1CRDg3LUE0QTJCN0ZEODE1Nn0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXs0RDdCQzQwMy01ODNCLTQ3MjUtQkQ4Ny1BNEEyQjdGRDgxNTZ9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7NEQ3QkM0MDMtNTgzQi00NzI1LUJEODctQTRBMkI3RkQ4MTU2fS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXs1QjI4RTUxNS1DOTJCLTRDRjItOTk2My1BQzZFRkI4QjJBNUN9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs1QjI4RTUxNS1DOTJCLTRDRjItOTk2My1BQzZFRkI4QjJBNUN9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7NUIyOEU1MTUtQzkyQi00Q0YyLTk5NjMtQUM2RUZCOEIyQTVDfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezVCMjhFNTE1LUM5MkItNENGMi05OTYzLUFDNkVGQjhCMkE1Q30uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7NjJENzM1OEMtNjg4MC00MEVBLTkzRkYtMjFCNjkzNzZDN0YwfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7NjJENzM1OEMtNjg4MC00MEVBLTkzRkYtMjFCNjkzNzZDN0YwfS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezYyRDczNThDLTY4ODAtNDBFQS05M0ZGLTIxQjY5Mzc2QzdGMH0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs2MkQ3MzU4Qy02ODgwLTQwRUEtOTNGRi0yMUI2OTM3NkM3RjB9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJe0Y5ODc4NzNCLTJCODgtNEIxQi1CNjI3LUY3MERGNEY5MUU0OX0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJe0Y5ODc4NzNCLTJCODgtNEIxQi1CNjI3LUY3MERGNEY5MUU0OX0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXtGOTg3ODczQi0yQjg4LTRCMUItQjYyNy1GNzBERjRGOTFFNDl9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7Rjk4Nzg3M0ItMkI4OC00QjFCLUI2MjctRjcwREY0RjkxRTQ5fS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJRW5kR2xvYmFsU2VjdGlvbgorCUdsb2JhbFNlY3Rpb24oRXh0ZW5zaWJpbGl0eUdsb2JhbHMpID0gcG9zdFNvbHV0aW9uCisJRW5kR2xvYmFsU2VjdGlvbgorCUdsb2JhbFNlY3Rpb24oRXh0ZW5zaWJpbGl0eUFkZElucykgPSBwb3N0U29sdXRpb24KKwlFbmRHbG9iYWxTZWN0aW9uCitFbmRHbG9iYWwKZGlmZiAtLWdpdCBhL3dpbjMyL3ZzNy9saWJnc3RiYXNlLnZjcHJvaiBiL3dpbjMyL3ZzNy9saWJnc3RiYXNlLnZjcHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDc4N2JkCi0tLSAvZGV2L251bGwKKysrIGIvd2luMzIvdnM3L2xpYmdzdGJhc2UudmNwcm9qCkBAIC0wLDAgKzEsMTYyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTEiPz4KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0CisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiCisJVmVyc2lvbj0iNy4xMCIKKwlOYW1lPSJsaWJnc3RiYXNlIgorCVByb2plY3RHVUlEPSJ7NEQ3QkM0MDMtNTgzQi00NzI1LUJEODctQTRBMkI3RkQ4MTU2fSIKKwlLZXl3b3JkPSJXaW4zMlByb2oiPgorCTxQbGF0Zm9ybXM+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0iV2luMzIiLz4KKwk8L1BsYXRmb3Jtcz4KKwk8Q29uZmlndXJhdGlvbnM+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCU91dHB1dERpcmVjdG9yeT0iRGVidWciCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IkRlYnVnIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCisJCQlDaGFyYWN0ZXJTZXQ9IjIiPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCU9wdGltaXphdGlvbj0iMCIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLi8uLiwuLi8uLi9saWJzLC4uL2NvbW1vbiIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEw7TElCR1NUQkFTRV9FWFBPUlRTO0hBVkVfQ09ORklHX0giCisJCQkJTWluaW1hbFJlYnVpbGQ9IlRSVUUiCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVdhcm5pbmdMZXZlbD0iMyIKKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iNCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2xpYi0yLjAubGliIGdvYmplY3QtMi4wLmxpYiBndGhyZWFkLTIuMC5saWIgZ21vZHVsZS0yLjAubGliIGxpYnhtbDIubGliIHdzb2NrMzIubGliIGludGwubGliIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9saWJnc3RiYXNlLTAuMTAuZGxsIgorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMiIKKwkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0iLi5cY29tbW9uXGxpYmdzdGJhc2UuZGVmIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikvbGliZ3N0YmFzZS5wZGIiCisJCQkJU3ViU3lzdGVtPSIyIgorCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCQlDb21tYW5kTGluZT0iY29weSAvWSAmcXVvdDskKFRhcmdldFBhdGgpJnF1b3Q7IGM6XGdzdHJlYW1lclxkZWJ1Z1xiaW4KKyIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCU91dHB1dERpcmVjdG9yeT0iUmVsZWFzZSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iUmVsZWFzZSIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgorCQkJQ2hhcmFjdGVyU2V0PSIyIj4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLi8uLiwuLi8uLi9saWJzLC4uL2NvbW1vbiIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TElCR1NUQkFTRV9FWFBPUlRTO0hBVkVfQ09ORklHX0giCisJCQkJUnVudGltZUxpYnJhcnk9IjIiCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnbGliLTIuMC5saWIgZ29iamVjdC0yLjAubGliIGd0aHJlYWQtMi4wLmxpYiBnbW9kdWxlLTIuMC5saWIgbGlieG1sMi5saWIgd3NvY2szMi5saWIgaW50bC5saWIiCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL2xpYmdzdGJhc2UtMC4xMC5kbGwiCisJCQkJTGlua0luY3JlbWVudGFsPSIxIgorCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSIuLlxjb21tb25cbGliZ3N0YmFzZS5kZWYiCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIgorCQkJCVN1YlN5c3RlbT0iMiIKKwkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiCisJCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMiIKKwkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkJQ29tbWFuZExpbmU9ImNvcHkgL3kgJnF1b3Q7JChUYXJnZXRQYXRoKSZxdW90OyBjOlxnc3RyZWFtZXJcYmluIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJPC9Db25maWd1cmF0aW9ucz4KKwk8UmVmZXJlbmNlcz4KKwk8L1JlZmVyZW5jZXM+CisJPEZpbGVzPgorCQk8RmlsdGVyCisJCQlOYW1lPSJTb3VyY2UgRmlsZXMiCisJCQlGaWx0ZXI9ImNwcDtjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214IgorCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGxpYnNcZ3N0XGJhc2VcZ3N0YWRhcHRlci5jIj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxsaWJzXGdzdFxiYXNlXGdzdGJhc2VzaW5rLmMiPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGxpYnNcZ3N0XGJhc2VcZ3N0YmFzZXNyYy5jIj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxsaWJzXGdzdFxiYXNlXGdzdGJhc2V0cmFuc2Zvcm0uYyI+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cbGlic1xnc3RcYmFzZVxnc3Rjb2xsZWN0cGFkcy5jIj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxsaWJzXGdzdFxiYXNlXGdzdHB1c2hzcmMuYyI+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cbGlic1xnc3RcYmFzZVxnc3R0eXBlZmluZGhlbHBlci5jIj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxjb21tb25cbGliZ3N0YmFzZS5kZWYiPgorCQkJPC9GaWxlPgorCQk8L0ZpbHRlcj4KKwkJPEZpbHRlcgorCQkJTmFtZT0iSGVhZGVyIEZpbGVzIgorCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2luYzt4c2QiCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfSI+CisJCTwvRmlsdGVyPgorCQk8RmlsdGVyCisJCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyIKKwkJCUZpbHRlcj0icmM7aWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlO3Jlc3giCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7NjdEQTZBQjYtRjgwMC00YzA4LThCN0EtODNCQjEyMUFBRDAxfSI+CisJCTwvRmlsdGVyPgorCTwvRmlsZXM+CisJPEdsb2JhbHM+CisJPC9HbG9iYWxzPgorPC9WaXN1YWxTdHVkaW9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvd2luMzIvdnM3L2xpYmdzdGNvbnRyb2xsZXIudmNwcm9qIGIvd2luMzIvdnM3L2xpYmdzdGNvbnRyb2xsZXIudmNwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NTZiZTMKLS0tIC9kZXYvbnVsbAorKysgYi93aW4zMi92czcvbGliZ3N0Y29udHJvbGxlci52Y3Byb2oKQEAgLTAsMCArMSwxNTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MSI/PgorPFZpc3VhbFN0dWRpb1Byb2plY3QKKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKKwlWZXJzaW9uPSI3LjEwIgorCU5hbWU9ImxpYmdzdGNvbnRyb2xsZXIiCisJUHJvamVjdEdVSUQ9Ins1QjI4RTUxNS1DOTJCLTRDRjItOTk2My1BQzZFRkI4QjJBNUN9IgorCUtleXdvcmQ9IldpbjMyUHJvaiI+CisJPFBsYXRmb3Jtcz4KKwkJPFBsYXRmb3JtCisJCQlOYW1lPSJXaW4zMiIvPgorCTwvUGxhdGZvcm1zPgorCTxDb25maWd1cmF0aW9ucz4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJT3V0cHV0RGlyZWN0b3J5PSJEZWJ1ZyIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iRGVidWciCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKKwkJCUNoYXJhY3RlclNldD0iMiI+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1pemF0aW9uPSIwIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uLy4uLC4uLy4uL2xpYnMsLi4vY29tbW9uIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJHU1RDT05UUk9MTEVSX0VYUE9SVFM7SEFWRV9DT05GSUdfSCIKKwkJCQlNaW5pbWFsUmVidWlsZD0iVFJVRSIKKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCisJCQkJUnVudGltZUxpYnJhcnk9IjMiCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSI0Ii8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnbGliLTIuMC5saWIgZ29iamVjdC0yLjAubGliIGd0aHJlYWQtMi4wLmxpYiBnbW9kdWxlLTIuMC5saWIiCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL2xpYmdzdGNvbnRyb2xsZXItMC4xMC5kbGwiCisJCQkJTGlua0luY3JlbWVudGFsPSIyIgorCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSIuLlxjb21tb25cbGliZ3N0Y29udHJvbGxlci5kZWYiCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKS9saWJnc3Rjb250cm9sbGVyLnBkYiIKKwkJCQlTdWJTeXN0ZW09IjIiCisJCQkJVGFyZ2V0TWFjaGluZT0iMSIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJCUNvbW1hbmRMaW5lPSJta2RpciBjOlxnc3RyZWFtZXJcZGVidWcKK21rZGlyIGM6XGdzdHJlYW1lclxkZWJ1Z1xiaW4KK2NvcHkgL3kgJnF1b3Q7JChUYXJnZXRQYXRoKSZxdW90OyBjOlxnc3RyZWFtZXJcZGVidWdcYmluCisiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rvcnk9IlJlbGVhc2UiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlJlbGVhc2UiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKKwkJCUNoYXJhY3RlclNldD0iMiI+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi4vLi4sLi4vLi4vbGlicywuLi9jb21tb24iCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO0xJQkdTVENPTlRST0xMRVJfRVhQT1JUUztIQVZFX0NPTkZJR19IIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVdhcm5pbmdMZXZlbD0iMyIKKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2xpYi0yLjAubGliIGdvYmplY3QtMi4wLmxpYiBndGhyZWFkLTIuMC5saWIgZ21vZHVsZS0yLjAubGliIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9saWJnc3Rjb250cm9sbGVyLTAuMTAuZGxsIgorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKKwkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0iLi5cY29tbW9uXGxpYmdzdGNvbnRyb2xsZXIuZGVmIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSIKKwkJCQlTdWJTeXN0ZW09IjIiCisJCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIgorCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiCisJCQkJVGFyZ2V0TWFjaGluZT0iMSIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJCUNvbW1hbmRMaW5lPSJta2RpciBjOlxnc3RyZWFtZXIKK21rZGlyIGM6XGdzdHJlYW1lclxiaW4KK2NvcHkgL3kgJnF1b3Q7JChUYXJnZXRQYXRoKSZxdW90OyBjOlxnc3RyZWFtZXJcYmluCisiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwk8L0NvbmZpZ3VyYXRpb25zPgorCTxSZWZlcmVuY2VzPgorCTwvUmVmZXJlbmNlcz4KKwk8RmlsZXM+CisJCTxGaWx0ZXIKKwkJCU5hbWU9IlNvdXJjZSBGaWxlcyIKKwkJCUZpbHRlcj0iY3BwO2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXgiCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSI+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cbGlic1xnc3RcY29udHJvbGxlclxnc3Rjb250cm9sbGVyLmMiPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGxpYnNcZ3N0XGNvbnRyb2xsZXJcZ3N0aGVscGVyLmMiPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGxpYnNcZ3N0XGNvbnRyb2xsZXJcZ3N0aW50ZXJwb2xhdGlvbi5jIj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxsaWJzXGdzdFxjb250cm9sbGVyXGxpYi5jIj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxjb21tb25cbGliZ3N0Y29udHJvbGxlci5kZWYiPgorCQkJPC9GaWxlPgorCQk8L0ZpbHRlcj4KKwkJPEZpbHRlcgorCQkJTmFtZT0iSGVhZGVyIEZpbGVzIgorCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2luYzt4c2QiCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfSI+CisJCTwvRmlsdGVyPgorCQk8RmlsdGVyCisJCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyIKKwkJCUZpbHRlcj0icmM7aWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlO3Jlc3giCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7NjdEQTZBQjYtRjgwMC00YzA4LThCN0EtODNCQjEyMUFBRDAxfSI+CisJCTwvRmlsdGVyPgorCTwvRmlsZXM+CisJPEdsb2JhbHM+CisJPC9HbG9iYWxzPgorPC9WaXN1YWxTdHVkaW9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvd2luMzIvdnM3L2xpYmdzdGNvcmVlbGVtZW50cy52Y3Byb2ogYi93aW4zMi92czcvbGliZ3N0Y29yZWVsZW1lbnRzLnZjcHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGZmYzAzCi0tLSAvZGV2L251bGwKKysrIGIvd2luMzIvdnM3L2xpYmdzdGNvcmVlbGVtZW50cy52Y3Byb2oKQEAgLTAsMCArMSwxNzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MSI/PgorPFZpc3VhbFN0dWRpb1Byb2plY3QKKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKKwlWZXJzaW9uPSI3LjEwIgorCU5hbWU9ImxpYmdzdGNvcmVlbGVtZW50cyIKKwlQcm9qZWN0R1VJRD0iezYyRDczNThDLTY4ODAtNDBFQS05M0ZGLTIxQjY5Mzc2QzdGMH0iCisJS2V5d29yZD0iV2luMzJQcm9qIj4KKwk8UGxhdGZvcm1zPgorCQk8UGxhdGZvcm0KKwkJCU5hbWU9IldpbjMyIi8+CisJPC9QbGF0Zm9ybXM+CisJPENvbmZpZ3VyYXRpb25zPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rvcnk9IkRlYnVnIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJEZWJ1ZyIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgorCQkJQ2hhcmFjdGVyU2V0PSIyIj4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlPcHRpbWl6YXRpb249IjAiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi4vLi4sLi4vLi4vbGlicywuLi9jb21tb24iCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO0xJQkdTVEVMRU1FTlRTX0VYUE9SVFM7SEFWRV9DT05GSUdfSCIKKwkJCQlNaW5pbWFsUmVidWlsZD0iVFJVRSIKKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCisJCQkJUnVudGltZUxpYnJhcnk9IjMiCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSI0Ii8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnbGliLTIuMC5saWIgZ29iamVjdC0yLjAubGliIGd0aHJlYWQtMi4wLmxpYiBnbW9kdWxlLTIuMC5saWIgbGlieG1sMi5saWIgd3NvY2szMi5saWIgaW50bC5saWIiCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL2xpYmdzdGNvcmVlbGVtZW50cy5kbGwiCisJCQkJTGlua0luY3JlbWVudGFsPSIyIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikvbGliZ3N0Y29yZWVsZW1lbnRzLnBkYiIKKwkJCQlTdWJTeXN0ZW09IjIiCisJCQkJVGFyZ2V0TWFjaGluZT0iMSIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJCUNvbW1hbmRMaW5lPSJta2RpciBjOlxnc3RyZWFtZXJcZGVidWdcbGliCitta2RpciBjOlxnc3RyZWFtZXJcZGVidWdcbGliXGdzdHJlYW1lci0wLjEwCitjb3B5IC95ICZxdW90OyQoVGFyZ2V0UGF0aCkmcXVvdDsgYzpcZ3N0cmVhbWVyXGRlYnVnXGxpYlxnc3RyZWFtZXItMC4xMAorIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJT3V0cHV0RGlyZWN0b3J5PSJSZWxlYXNlIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJSZWxlYXNlIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCisJCQlDaGFyYWN0ZXJTZXQ9IjIiPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uLy4uLC4uLy4uL2xpYnMsLi4vY29tbW9uIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJHU1RFTEVNRU5UU19FWFBPUlRTO0hBVkVfQ09ORklHX0giCisJCQkJUnVudGltZUxpYnJhcnk9IjIiCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnbGliLTIuMC5saWIgZ29iamVjdC0yLjAubGliIGd0aHJlYWQtMi4wLmxpYiBnbW9kdWxlLTIuMC5saWIgbGlieG1sMi5saWIgd3NvY2szMi5saWIgaW50bC5saWIiCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL2xpYmdzdGNvcmVlbGVtZW50cy5kbGwiCisJCQkJTGlua0luY3JlbWVudGFsPSIxIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSIKKwkJCQlTdWJTeXN0ZW09IjIiCisJCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIgorCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiCisJCQkJVGFyZ2V0TWFjaGluZT0iMSIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJCUNvbW1hbmRMaW5lPSJta2RpciBjOlxnc3RyZWFtZXJcbGliCitta2RpciBjOlxnc3RyZWFtZXJcbGliXGdzdHJlYW1lci0wLjEwCitjb3B5IC95ICZxdW90OyQoVGFyZ2V0UGF0aCkmcXVvdDsgYzpcZ3N0cmVhbWVyXGxpYlxnc3RyZWFtZXItMC4xMAorIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJPC9Db25maWd1cmF0aW9ucz4KKwk8UmVmZXJlbmNlcz4KKwk8L1JlZmVyZW5jZXM+CisJPEZpbGVzPgorCQk8RmlsdGVyCisJCQlOYW1lPSJTb3VyY2UgRmlsZXMiCisJCQlGaWx0ZXI9ImNwcDtjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214IgorCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHBsdWdpbnNcZWxlbWVudHNcZ3N0YnVmZmVyc3RvcmUuYyI+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccGx1Z2luc1xlbGVtZW50c1xnc3RjYXBzZmlsdGVyLmMiPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHBsdWdpbnNcZWxlbWVudHNcZ3N0ZWxlbWVudHMuYyI+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccGx1Z2luc1xlbGVtZW50c1xnc3RmYWtlc2luay5jIj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwbHVnaW5zXGVsZW1lbnRzXGdzdGZha2VzcmMuYyI+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccGx1Z2luc1xlbGVtZW50c1xnc3RmaWxlc2luay5jIj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwbHVnaW5zXGVsZW1lbnRzXGdzdGZpbGVzcmMuYyI+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccGx1Z2luc1xlbGVtZW50c1xnc3RpZGVudGl0eS5jIj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwbHVnaW5zXGVsZW1lbnRzXGdzdHF1ZXVlLmMiPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHBsdWdpbnNcZWxlbWVudHNcZ3N0dGVlLmMiPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHBsdWdpbnNcZWxlbWVudHNcZ3N0dHlwZWZpbmRlbGVtZW50LmMiPgorCQkJPC9GaWxlPgorCQk8L0ZpbHRlcj4KKwkJPEZpbHRlcgorCQkJTmFtZT0iSGVhZGVyIEZpbGVzIgorCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2luYzt4c2QiCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfSI+CisJCTwvRmlsdGVyPgorCQk8RmlsdGVyCisJCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyIKKwkJCUZpbHRlcj0icmM7aWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlO3Jlc3giCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7NjdEQTZBQjYtRjgwMC00YzA4LThCN0EtODNCQjEyMUFBRDAxfSI+CisJCTwvRmlsdGVyPgorCTwvRmlsZXM+CisJPEdsb2JhbHM+CisJPC9HbG9iYWxzPgorPC9WaXN1YWxTdHVkaW9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvd2luMzIvdnM3L2xpYmdzdHJlYW1lci52Y3Byb2ogYi93aW4zMi92czcvbGliZ3N0cmVhbWVyLnZjcHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmQyYTZmCi0tLSAvZGV2L251bGwKKysrIGIvd2luMzIvdnM3L2xpYmdzdHJlYW1lci52Y3Byb2oKQEAgLTAsMCArMSwyOTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MSI/PgorPFZpc3VhbFN0dWRpb1Byb2plY3QKKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKKwlWZXJzaW9uPSI3LjEwIgorCU5hbWU9ImxpYmdzdHJlYW1lciIKKwlQcm9qZWN0R1VJRD0ie0Y5ODc4NzNCLTJCODgtNEIxQi1CNjI3LUY3MERGNEY5MUU0OX0iCisJS2V5d29yZD0iV2luMzJQcm9qIj4KKwk8UGxhdGZvcm1zPgorCQk8UGxhdGZvcm0KKwkJCU5hbWU9IldpbjMyIi8+CisJPC9QbGF0Zm9ybXM+CisJPENvbmZpZ3VyYXRpb25zPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rvcnk9IkRlYnVnIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJEZWJ1ZyIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgorCQkJQ2hhcmFjdGVyU2V0PSIyIj4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlPcHRpbWl6YXRpb249IjAiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi4vLi4sLi4vY29tbW9uIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJHU1RSRUFNRVJfRVhQT1JUUztIQVZFX0NPTkZJR19IO0hBVkVfV0lOMzIiCisJCQkJTWluaW1hbFJlYnVpbGQ9IlRSVUUiCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVdhcm5pbmdMZXZlbD0iMyIKKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iNCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2xpYi0yLjAubGliIGdvYmplY3QtMi4wLmxpYiBndGhyZWFkLTIuMC5saWIgZ21vZHVsZS0yLjAubGliIGxpYnhtbDIubGliIHdzb2NrMzIubGliIGludGwubGliIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9saWJnc3RyZWFtZXItMC4xMC5kbGwiCisJCQkJTGlua0luY3JlbWVudGFsPSIyIgorCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiZxdW90O0M6XFByb2dyYW0gRmlsZXNcTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gLk5FVCAyMDAzXFZjN1xjcnRcc3JjXGludGVsXGRsbF9saWImcXVvdDsiCisJCQkJTW9kdWxlRGVmaW5pdGlvbkZpbGU9Ii4uXGNvbW1vblxsaWJnc3RyZWFtZXIuZGVmIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikvbGliZ3N0cmVhbWVyLnBkYiIKKwkJCQlTdWJTeXN0ZW09IjIiCisJCQkJVGFyZ2V0TWFjaGluZT0iMSIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJCUNvbW1hbmRMaW5lPSJta2RpciBjOlxnc3RyZWFtZXJcZGVidWcKK21rZGlyIGM6XGdzdHJlYW1lclxkZWJ1Z1xiaW4KK2NvcHkgL3kgJnF1b3Q7JChUYXJnZXRQYXRoKSZxdW90OyBjOlxnc3RyZWFtZXJcZGVidWdcYmluCisiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rvcnk9IlJlbGVhc2UiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlJlbGVhc2UiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKKwkJCUNoYXJhY3RlclNldD0iMiI+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi4vLi4sLi4vY29tbW9uIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJHU1RSRUFNRVJfRVhQT1JUUztIQVZFX0NPTkZJR19IO0hBVkVfV0lOMzIiCisJCQkJUnVudGltZUxpYnJhcnk9IjIiCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnbGliLTIuMC5saWIgZ29iamVjdC0yLjAubGliIGd0aHJlYWQtMi4wLmxpYiBnbW9kdWxlLTIuMC5saWIgbGlieG1sMi5saWIgd3NvY2szMi5saWIgaW50bC5saWIiCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL2xpYmdzdHJlYW1lci0wLjEwLmRsbCIKKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCisJCQkJTW9kdWxlRGVmaW5pdGlvbkZpbGU9Ii4uXGNvbW1vblxsaWJnc3RyZWFtZXIuZGVmIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSIKKwkJCQlTdWJTeXN0ZW09IjIiCisJCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIgorCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiCisJCQkJVGFyZ2V0TWFjaGluZT0iMSIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJCUNvbW1hbmRMaW5lPSJta2RpciBjOlxnc3RyZWFtZXIKK21rZGlyIGM6XGdzdHJlYW1lclxiaW4KK2NvcHkgL3kgJnF1b3Q7JChUYXJnZXRQYXRoKSZxdW90OyBjOlxnc3RyZWFtZXJcYmluCisiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwk8L0NvbmZpZ3VyYXRpb25zPgorCTxSZWZlcmVuY2VzPgorCTwvUmVmZXJlbmNlcz4KKwk8RmlsZXM+CisJCTxGaWx0ZXIKKwkJCU5hbWU9IlNvdXJjZSBGaWxlcyIKKwkJCUZpbHRlcj0iY3BwO2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXgiCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSI+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cY29tbW9uXGRpcmVudC5jIj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RccGFyc2VcZ3JhbW1hci50YWIuYyI+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XGdzdC5jIj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0YmluLmMiPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RidWZmZXIuYyI+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XGdzdGJ1cy5jIj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0Y2Fwcy5jIj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0Y2hpbGRwcm94eS5jIj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0Y2xvY2suYyI+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XGdzdGVsZW1lbnQuYyI+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XGdzdGVsZW1lbnRmYWN0b3J5LmMiPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RlbnVtdHlwZXMuYyI+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XGdzdGVycm9yLmMiPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RldmVudC5jIj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0ZmlsdGVyLmMiPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3Rmb3JtYXQuYyI+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XGdzdGdob3N0cGFkLmMiPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RpbmRleC5jIj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0aW5kZXhmYWN0b3J5LmMiPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RpbmZvLmMiPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RpbnRlcmZhY2UuYyI+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XGdzdGl0ZXJhdG9yLmMiPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RtYXJzaGFsLmMiPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RtZXNzYWdlLmMiPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RtaW5pb2JqZWN0LmMiPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RvYmplY3QuYyI+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XGdzdHBhZC5jIj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0cGFkdGVtcGxhdGUuYyI+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XGdzdHBhcnNlLmMiPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RwaXBlbGluZS5jIj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0cGx1Z2luLmMiPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RwbHVnaW5mZWF0dXJlLmMiPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RxdWFyay5jIj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0cXVlcnkuYyI+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XGdzdHJlZ2lzdHJ5LmMiPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RyZWdpc3RyeXhtbC5jIj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0c2VnbWVudC5jIj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0c3RydWN0dXJlLmMiPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RzeXN0ZW1jbG9jay5jIj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0dGFnbGlzdC5jIj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0dGFnc2V0dGVyLmMiPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3R0YXNrLmMiPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3R0cmFjZS5jIj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0dHlwZWZpbmQuYyI+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XGdzdHR5cGVmaW5kZmFjdG9yeS5jIj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0dXJpLmMiPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3R1dGlscy5jIj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0dmFsdWUuYyI+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XGdzdHhtbC5jIj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RccGFyc2VcbGV4Ll9nc3RfcGFyc2VfeXkuYyI+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cY29tbW9uXGxpYmdzdHJlYW1lci5kZWYiPgorCQkJPC9GaWxlPgorCQk8L0ZpbHRlcj4KKwkJPEZpbHRlcgorCQkJTmFtZT0iSGVhZGVyIEZpbGVzIgorCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2luYzt4c2QiCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfSI+CisJCTwvRmlsdGVyPgorCQk8RmlsdGVyCisJCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyIKKwkJCUZpbHRlcj0icmM7aWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlO3Jlc3giCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7NjdEQTZBQjYtRjgwMC00YzA4LThCN0EtODNCQjEyMUFBRDAxfSI+CisJCTwvRmlsdGVyPgorCTwvRmlsZXM+CisJPEdsb2JhbHM+CisJPC9HbG9iYWxzPgorPC9WaXN1YWxTdHVkaW9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvd2luMzIvdnM4L2dyYW1tYXIudmNwcm9qIGIvd2luMzIvdnM4L2dyYW1tYXIudmNwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMjkyYzAKLS0tIC9kZXYvbnVsbAorKysgYi93aW4zMi92czgvZ3JhbW1hci52Y3Byb2oKQEAgLTAsMCArMSwxNzUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MSI/PgorPFZpc3VhbFN0dWRpb1Byb2plY3QKKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKKwlWZXJzaW9uPSI4LjAwIg0KKwlOYW1lPSJncmFtbWFyIgorCVByb2plY3RHVUlEPSJ7NkQ3RUIzRDQtN0U5MS00RDk4LTgwRUEtMjhBOEYyRTM2NUY3fSIKKwlSb290TmFtZXNwYWNlPSJncmFtbWFyIgorCUtleXdvcmQ9IldpbjMyUHJvaiIKKwk+CisJPFBsYXRmb3Jtcz4KKwkJPFBsYXRmb3JtCisJCQlOYW1lPSJXaW4zMiIKKwkJLz4KKwk8L1BsYXRmb3Jtcz4KKwk8VG9vbEZpbGVzPgorCTwvVG9vbEZpbGVzPgorCTxDb25maWd1cmF0aW9ucz4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxMCIKKwkJCUNoYXJhY3RlclNldD0iMiIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMTAiCisJCQlDaGFyYWN0ZXJTZXQ9IjIiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwk8L0NvbmZpZ3VyYXRpb25zPgorCTxSZWZlcmVuY2VzPgorCTwvUmVmZXJlbmNlcz4KKwk8RmlsZXM+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxwYXJzZVxncmFtbWFyLnkiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkJCUNvbW1hbmRMaW5lPSJiaXNvbiAtZCAtdiAtcF9nc3RfcGFyc2VfeXkgLi5cLi5cZ3N0XHBhcnNlXGdyYW1tYXIueSAtbyAuLlwuLlxnc3RccGFyc2VcZ3JhbW1hci50YWIuYyYjeDBEOyYjeDBBO2ZsZXggLVBfZ3N0X3BhcnNlX3l5IC1vLi5cLi5cZ3N0XHBhcnNlXGxleC5fZ3N0X3BhcnNlX3l5LmMgLi5cLi5cZ3N0XHBhcnNlXHBhcnNlLmwmI3gwRDsmI3gwQTsiCisJCQkJCU91dHB1dHM9Ii4uXC4uXGdzdFxwYXJzZVxsZXguX2dzdF9wYXJzZV95eS5jOy4uXC4uXGdzdFxwYXJzZVxncmFtbWFyLnRhYi5jOy4uXC4uXGdzdFxwYXJzZVxncmFtbWFyLnRhYi5oIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkJCUNvbW1hbmRMaW5lPSJiaXNvbiAtZCAtdiAtcF9nc3RfcGFyc2VfeXkgLi5cLi5cZ3N0XHBhcnNlXGdyYW1tYXIueSAtbyAuLlwuLlxnc3RccGFyc2VcZ3JhbW1hci50YWIuYyYjeDBEOyYjeDBBO2ZsZXggLVBfZ3N0X3BhcnNlX3l5IC1vLi5cLi5cZ3N0XHBhcnNlXGxleC5fZ3N0X3BhcnNlX3l5LmMgLi5cLi5cZ3N0XHBhcnNlXHBhcnNlLmwmI3gwRDsmI3gwQTsiCisJCQkJCU91dHB1dHM9Ii4uXC4uXGdzdFxwYXJzZVxsZXguX2dzdF9wYXJzZV95eS5jOy4uXC4uXGdzdFxwYXJzZVxncmFtbWFyLnRhYi5jOy4uXC4uXGdzdFxwYXJzZVxncmFtbWFyLnRhYi5oIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNvbW1vblxnc3Rjb25maWcuaCIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCQkJQ29tbWFuZExpbmU9ImNvcHkgL3kgLi5cY29tbW9uXGdzdGNvbmZpZy5oIC4uXC4uXGdzdCYjeDBEOyYjeDBBOyIKKwkJCQkJT3V0cHV0cz0iLi5cLi5cZ3N0Y29uZmlnLmgiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCQkJQ29tbWFuZExpbmU9ImNvcHkgL3kgLi5cY29tbW9uXGdzdGNvbmZpZy5oIC4uXC4uXGdzdCYjeDBEOyYjeDBBOyIKKwkJCQkJT3V0cHV0cz0iLi5cLi5cZ3N0Y29uZmlnLmgiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cY29tbW9uXGdzdGVudW10eXBlcy5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJCQlDb21tYW5kTGluZT0iY29weSAveSAuLlxjb21tb25cZ3N0ZW51bXR5cGVzLmMgLi5cLi5cZ3N0JiN4MEQ7JiN4MEE7Y29weSAveSAuLlxjb21tb25cZ3N0ZW51bXR5cGVzLmggLi5cLi5cZ3N0JiN4MEQ7JiN4MEE7IgorCQkJCQlPdXRwdXRzPSIuLlwuLlxnc3RcZ3N0ZW51bXR5cGVzLmM7Li5cLi5cZ3N0XGdzdGVudW10eXBlcy5oIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkJCUNvbW1hbmRMaW5lPSJjb3B5IC95IC4uXGNvbW1vblxnc3RlbnVtdHlwZXMuYyAuLlwuLlxnc3QmI3gwRDsmI3gwQTtjb3B5IC95IC4uXGNvbW1vblxnc3RlbnVtdHlwZXMuaCAuLlwuLlxnc3QmI3gwRDsmI3gwQTsiCisJCQkJCU91dHB1dHM9Ii4uXC4uXGdzdFxnc3RlbnVtdHlwZXMuYzsuLlwuLlxnc3RcZ3N0ZW51bXR5cGVzLmgiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XGdzdG1hcnNoYWwubGlzdCIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCQkJQ29tbWFuZExpbmU9ImdsaWItZ2VubWFyc2hhbCAmZ3Q7IE5VTCAyJmd0OyBOVUwmI3gwRDsmI3gwQTtpZiAlZXJyb3JsZXZlbCUgPT0gOTAwOSBnb3RvIE5PR0xJQkdFTk1BUlNIQUwmI3gwRDsmI3gwQTtyZW0gcmVzZXRzIGVycm9ybGV2ZWwgdG8gMCBiZWNhdXNlIGl0IGlzIDEgbm93OiYjeDBEOyYjeDBBO2RpciAmZ3Q7IE5VTCYjeDBEOyYjeDBBOyYjeDBEOyYjeDBBO2lmIGV4aXN0IC4uXC4uXGdzdFxnc3RtYXJzaGFsLmMgZ290byBIRUFERVImI3gwRDsmI3gwQTtlY2hvICNpbmNsdWRlICZxdW90O2dsaWItb2JqZWN0LmgmcXVvdDsgJmd0OyBnc3RtYXJzaGFsLmMudG1wJiN4MEQ7JiN4MEE7ZWNobyAjaW5jbHVkZSAmcXVvdDtnc3RtYXJzaGFsLmgmcXVvdDsgJmd0OyZndDsgZ3N0bWFyc2hhbC5jLnRtcCYjeDBEOyYjeDBBO2dsaWItZ2VubWFyc2hhbCAtLWJvZHkgLS1wcmVmaXg9Z3N0X21hcnNoYWwgLi5cLi5cZ3N0XGdzdG1hcnNoYWwubGlzdCAmZ3Q7Jmd0OyBnc3RtYXJzaGFsLmMudG1wJiN4MEQ7JiN4MEE7bW92ZSBnc3RtYXJzaGFsLmMudG1wIC4uXC4uXGdzdFxnc3RtYXJzaGFsLmMmI3gwRDsmI3gwQTs6SEVBREVSJiN4MEQ7JiN4MEE7aWYgZXhpc3QgLi5cLi5cZ3N0XGdzdG1hcnNoYWwuaCBnb3RvIEVORCYjeDBEOyYjeDBBO2VjaG8gI2luY2x1ZGUgJnF1b3Q7Z3N0L2dzdGNvbmZpZy5oJnF1b3Q7ICZndDsgZ3N0bWFyc2hhbC5oLnRtcCYjeDBEOyYjeDBBO2dsaWItZ2VubWFyc2hhbCAtLWhlYWRlciAtLXByZWZpeD1nc3RfbWFyc2hhbCAuLlwuLlxnc3RcZ3N0bWFyc2hhbC5saXN0ICZndDsmZ3Q7IGdzdG1hcnNoYWwuaC50bXAmI3gwRDsmI3gwQTttb3ZlIGdzdG1hcnNoYWwuaC50bXAgLi5cLi5cZ3N0XGdzdG1hcnNoYWwuaCYjeDBEOyYjeDBBO2dvdG8gRU5EJiN4MEQ7JiN4MEE7JiN4MEQ7JiN4MEE7Ok5PR0xJQkdFTk1BUlNIQUwmI3gwRDsmI3gwQTtlY2hvIEVSUk9SICVlcnJvcmxldmVsJSYjeDBEOyYjeDBBO2VjaG8gIyMjIFlPVSBETyBOT1QgSEFWRSBHTElCLUdFTk1BUlNIQUwuRVhFIElOIFlPVVIgUEFUSC4mI3gwRDsmI3gwQTtlY2hvICMjIyBJTlNUQUxMIEdMSUItREVWIEFORC9PUiBNQUtFIFNVUkUgSVQgSVMgSU4gWU9VUiBQQVRIISYjeDBEOyYjeDBBOyYjeDBEOyYjeDBBOzpFTkQmI3gwRDsmI3gwQTsmI3gwRDsmI3gwQTsiCisJCQkJCU91dHB1dHM9ImdzdG1hcnNoYWwudG1wIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkJCUNvbW1hbmRMaW5lPSJnbGliLWdlbm1hcnNoYWwgJmd0OyBOVUwgMiZndDsgTlVMJiN4MEQ7JiN4MEE7aWYgJWVycm9ybGV2ZWwlID09IDkwMDkgZ290byBOT0dMSUJHRU5NQVJTSEFMJiN4MEQ7JiN4MEE7cmVtIHJlc2V0cyBlcnJvcmxldmVsIHRvIDAgYmVjYXVzZSBpdCBpcyAxIG5vdzomI3gwRDsmI3gwQTtkaXIgJmd0OyBOVUwmI3gwRDsmI3gwQTsmI3gwRDsmI3gwQTtpZiBleGlzdCAuLlwuLlxnc3RcZ3N0bWFyc2hhbC5jIGdvdG8gSEVBREVSJiN4MEQ7JiN4MEE7ZWNobyAjaW5jbHVkZSAmcXVvdDtnbGliLW9iamVjdC5oJnF1b3Q7ICZndDsgZ3N0bWFyc2hhbC5jLnRtcCYjeDBEOyYjeDBBO2VjaG8gI2luY2x1ZGUgJnF1b3Q7Z3N0bWFyc2hhbC5oJnF1b3Q7ICZndDsmZ3Q7IGdzdG1hcnNoYWwuYy50bXAmI3gwRDsmI3gwQTtnbGliLWdlbm1hcnNoYWwgLS1ib2R5IC0tcHJlZml4PWdzdF9tYXJzaGFsIC4uXC4uXGdzdFxnc3RtYXJzaGFsLmxpc3QgJmd0OyZndDsgZ3N0bWFyc2hhbC5jLnRtcCYjeDBEOyYjeDBBO21vdmUgZ3N0bWFyc2hhbC5jLnRtcCAuLlwuLlxnc3RcZ3N0bWFyc2hhbC5jJiN4MEQ7JiN4MEE7OkhFQURFUiYjeDBEOyYjeDBBO2lmIGV4aXN0IC4uXC4uXGdzdFxnc3RtYXJzaGFsLmggZ290byBFTkQmI3gwRDsmI3gwQTtlY2hvICNpbmNsdWRlICZxdW90O2dzdC9nc3Rjb25maWcuaCZxdW90OyAmZ3Q7IGdzdG1hcnNoYWwuaC50bXAmI3gwRDsmI3gwQTtnbGliLWdlbm1hcnNoYWwgLS1oZWFkZXIgLS1wcmVmaXg9Z3N0X21hcnNoYWwgLi5cLi5cZ3N0XGdzdG1hcnNoYWwubGlzdCAmZ3Q7Jmd0OyBnc3RtYXJzaGFsLmgudG1wJiN4MEQ7JiN4MEE7bW92ZSBnc3RtYXJzaGFsLmgudG1wIC4uXC4uXGdzdFxnc3RtYXJzaGFsLmgmI3gwRDsmI3gwQTtnb3RvIEVORCYjeDBEOyYjeDBBOyYjeDBEOyYjeDBBOzpOT0dMSUJHRU5NQVJTSEFMJiN4MEQ7JiN4MEE7ZWNobyBFUlJPUiAlZXJyb3JsZXZlbCUmI3gwRDsmI3gwQTtlY2hvICMjIyBZT1UgRE8gTk9UIEhBVkUgR0xJQi1HRU5NQVJTSEFMLkVYRSBJTiBZT1VSIFBBVEguJiN4MEQ7JiN4MEE7ZWNobyAjIyMgSU5TVEFMTCBHTElCLURFViBBTkQvT1IgTUFLRSBTVVJFIElUIElTIElOIFlPVVIgUEFUSCEmI3gwRDsmI3gwQTsmI3gwRDsmI3gwQTs6RU5EJiN4MEQ7JiN4MEE7JiN4MEQ7JiN4MEE7IgorCQkJCQlPdXRwdXRzPSJnc3RtYXJzaGFsLnRtcCIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlxjb21tb25cZ3N0dmVyc2lvbi5oIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJCQlDb21tYW5kTGluZT0iY29weSAveSAuLlxjb21tb25cZ3N0dmVyc2lvbi5oIC4uXC4uXGdzdCYjeDBEOyYjeDBBOyIKKwkJCQkJT3V0cHV0cz0iLi5cLi5cZ3N0XGdzdHZlcnNpb24uaCIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJCQlDb21tYW5kTGluZT0iY29weSAveSAuLlxjb21tb25cZ3N0dmVyc2lvbi5oIC4uXC4uXGdzdCYjeDBEOyYjeDBBOyIKKwkJCQkJT3V0cHV0cz0iLi5cLi5cZ3N0XGdzdHZlcnNpb24uaCIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCTwvRmlsZXM+CisJPEdsb2JhbHM+CisJPC9HbG9iYWxzPgorPC9WaXN1YWxTdHVkaW9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvd2luMzIvdnM4L2dzdC1pbnNwZWN0LnZjcHJvaiBiL3dpbjMyL3ZzOC9nc3QtaW5zcGVjdC52Y3Byb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI2ZTA1NAotLS0gL2Rldi9udWxsCisrKyBiL3dpbjMyL3ZzOC9nc3QtaW5zcGVjdC52Y3Byb2oKQEAgLTAsMCArMSwxOTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MSI/PgorPFZpc3VhbFN0dWRpb1Byb2plY3QKKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKKwlWZXJzaW9uPSI4LDAwIgorCU5hbWU9ImdzdC1pbnNwZWN0IgorCVByb2plY3RHVUlEPSJ7ODA2NEJCNDAtMjBCRS00RURFLUE1NTUtQzU3RDMxNEI3Q0U5fSIKKwlLZXl3b3JkPSJXaW4zMlByb2oiCisJPgorCTxQbGF0Zm9ybXM+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0iV2luMzIiCisJCS8+CisJPC9QbGF0Zm9ybXM+CisJPFRvb2xGaWxlcz4KKwk8L1Rvb2xGaWxlcz4KKwk8Q29uZmlndXJhdGlvbnM+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMSIKKwkJCUNoYXJhY3RlclNldD0iMiIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCU9wdGltaXphdGlvbj0iMCIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLi8uLiwuLi8uLi9saWJzLC4uL2NvbW1vbiIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19DT05TT0xFO0hBVkVfQ09ORklHX0giCisJCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVdhcm5pbmdMZXZlbD0iMyIKKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9InRydWUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iNCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJCQlJZ25vcmVJbXBvcnRMaWJyYXJ5PSJ0cnVlIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdsaWItMi4wLmxpYiBnb2JqZWN0LTIuMC5saWIgZ3RocmVhZC0yLjAubGliIGdtb2R1bGUtMi4wLmxpYiBsaWJ4bWwyLmxpYiB3c29jazMyLmxpYiBpbnRsLmxpYiIKKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvZ3N0LWluc3BlY3QtMC4xMC5leGUiCisJCQkJTGlua0luY3JlbWVudGFsPSIxIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlTdWJTeXN0ZW09IjEiCisJCQkJVGFyZ2V0TWFjaGluZT0iMSIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkJQ29tbWFuZExpbmU9ImNvcHkgL3kgJnF1b3Q7JChUYXJnZXRQYXRoKSZxdW90OyBjOlxnc3RyZWFtZXJcZGVidWdcYmluIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMSIKKwkJCUNoYXJhY3RlclNldD0iMiIKKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uLy4uLC4uLy4uL2xpYnMsLi4vY29tbW9uIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0NPTlNPTEU7SEFWRV9DT05GSUdfSCIKKwkJCQlSdW50aW1lTGlicmFyeT0iMiIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlXYXJuaW5nTGV2ZWw9IjMiCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2xpYi0yLjAubGliIGdvYmplY3QtMi4wLmxpYiBndGhyZWFkLTIuMC5saWIgZ21vZHVsZS0yLjAubGliIGxpYnhtbDIubGliIHdzb2NrMzIubGliIGludGwubGliIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9nc3QtaW5zcGVjdC0wLjEwLmV4ZSIKKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgorCQkJCVN1YlN5c3RlbT0iMSIKKwkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiCisJCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMiIKKwkJCQlUYXJnZXRNYWNoaW5lPSIxIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCQlDb21tYW5kTGluZT0iY29weSAveSAmcXVvdDskKFRhcmdldFBhdGgpJnF1b3Q7IGM6XGdzdHJlYW1lclxiaW4iCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJPC9Db25maWd1cmF0aW9ucz4KKwk8UmVmZXJlbmNlcz4KKwk8L1JlZmVyZW5jZXM+CisJPEZpbGVzPgorCQk8RmlsdGVyCisJCQlOYW1lPSJTb3VyY2UgRmlsZXMiCisJCQlGaWx0ZXI9ImNwcDtjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214IgorCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iCisJCQk+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cdG9vbHNcZ3N0LWluc3BlY3QuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCTwvRmlsdGVyPgorCTwvRmlsZXM+CisJPEdsb2JhbHM+CisJPC9HbG9iYWxzPgorPC9WaXN1YWxTdHVkaW9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvd2luMzIvdnM4L2dzdC1sYXVuY2gudmNwcm9qIGIvd2luMzIvdnM4L2dzdC1sYXVuY2gudmNwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNzhlNmIKLS0tIC9kZXYvbnVsbAorKysgYi93aW4zMi92czgvZ3N0LWxhdW5jaC52Y3Byb2oKQEAgLTAsMCArMSwxOTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MSI/PgorPFZpc3VhbFN0dWRpb1Byb2plY3QKKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKKwlWZXJzaW9uPSI4LDAwIgorCU5hbWU9ImdzdC1sYXVuY2giCisJUHJvamVjdEdVSUQ9Ins1RTU5RTc5Ni1DMDk3LTRGQjctQTk0NC05MDYzQ0Y5QkQzMDB9IgorCUtleXdvcmQ9IldpbjMyUHJvaiIKKwk+CisJPFBsYXRmb3Jtcz4KKwkJPFBsYXRmb3JtCisJCQlOYW1lPSJXaW4zMiIKKwkJLz4KKwk8L1BsYXRmb3Jtcz4KKwk8VG9vbEZpbGVzPgorCTwvVG9vbEZpbGVzPgorCTxDb25maWd1cmF0aW9ucz4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIgorCQkJQ2hhcmFjdGVyU2V0PSIyIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1pemF0aW9uPSIwIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uLy4uLC4uL2NvbW1vbiIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19DT05TT0xFO0hBVkVfQ09ORklHX0giCisJCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVdhcm5pbmdMZXZlbD0iMyIKKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9InRydWUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iNCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnbGliLTIuMC5saWIgZ29iamVjdC0yLjAubGliIGd0aHJlYWQtMi4wLmxpYiBnbW9kdWxlLTIuMC5saWIgbGlieG1sMi5saWIgd3NvY2szMi5saWIgaW50bC5saWIiCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL2dzdC1sYXVuY2gtMC4xMC5leGUiCisJCQkJTGlua0luY3JlbWVudGFsPSIyIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlTdWJTeXN0ZW09IjEiCisJCQkJVGFyZ2V0TWFjaGluZT0iMSIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkJQ29tbWFuZExpbmU9ImNvcHkgL3kgJnF1b3Q7JChUYXJnZXRQYXRoKSZxdW90OyBjOlxnc3RyZWFtZXJcZGVidWdcYmluIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMSIKKwkJCUNoYXJhY3RlclNldD0iMiIKKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uLy4uLC4uL2NvbW1vbiIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19DT05TT0xFO0hBVkVfQ09ORklHX0giCisJCQkJUnVudGltZUxpYnJhcnk9IjIiCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0idHJ1ZSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdsaWItMi4wLmxpYiBnb2JqZWN0LTIuMC5saWIgZ3RocmVhZC0yLjAubGliIGdtb2R1bGUtMi4wLmxpYiBsaWJ4bWwyLmxpYiB3c29jazMyLmxpYiBpbnRsLmxpYiIKKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvZ3N0LWxhdW5jaC0wLjEwLmV4ZSIKKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgorCQkJCVN1YlN5c3RlbT0iMSIKKwkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiCisJCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMiIKKwkJCQlUYXJnZXRNYWNoaW5lPSIxIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCQlDb21tYW5kTGluZT0iY29weSAveSAmcXVvdDskKFRhcmdldFBhdGgpJnF1b3Q7IGM6XGdzdHJlYW1lclxiaW4iCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJPC9Db25maWd1cmF0aW9ucz4KKwk8UmVmZXJlbmNlcz4KKwk8L1JlZmVyZW5jZXM+CisJPEZpbGVzPgorCQk8RmlsdGVyCisJCQlOYW1lPSJTb3VyY2UgRmlsZXMiCisJCQlGaWx0ZXI9ImNwcDtjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214IgorCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iCisJCQk+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cdG9vbHNcZ3N0LWxhdW5jaC5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJPC9GaWx0ZXI+CisJPC9GaWxlcz4KKwk8R2xvYmFscz4KKwk8L0dsb2JhbHM+Cis8L1Zpc3VhbFN0dWRpb1Byb2plY3Q+CmRpZmYgLS1naXQgYS93aW4zMi92czgvZ3N0cmVhbWVyLnNsbiBiL3dpbjMyL3ZzOC9nc3RyZWFtZXIuc2xuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzODAzYWQKLS0tIC9kZXYvbnVsbAorKysgYi93aW4zMi92czgvZ3N0cmVhbWVyLnNsbgpAQCAtMCwwICsxLDc1IEBACivvu78KK01pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIFNvbHV0aW9uIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDkuMDAKKyMgVmlzdWFsIFN0dWRpbyAyMDA1CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImdyYW1tYXIiLCAiZ3JhbW1hci52Y3Byb2oiLCAiezZEN0VCM0Q0LTdFOTEtNEQ5OC04MEVBLTI4QThGMkUzNjVGN30iCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImdzdC1pbnNwZWN0IiwgImdzdC1pbnNwZWN0LnZjcHJvaiIsICJ7ODA2NEJCNDAtMjBCRS00RURFLUE1NTUtQzU3RDMxNEI3Q0U5fSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXtGOTg3ODczQi0yQjg4LTRCMUItQjYyNy1GNzBERjRGOTFFNDl9ID0ge0Y5ODc4NzNCLTJCODgtNEIxQi1CNjI3LUY3MERGNEY5MUU0OX0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJnc3QtbGF1bmNoIiwgImdzdC1sYXVuY2gudmNwcm9qIiwgIns1RTU5RTc5Ni1DMDk3LTRGQjctQTk0NC05MDYzQ0Y5QkQzMDB9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJe0Y5ODc4NzNCLTJCODgtNEIxQi1CNjI3LUY3MERGNEY5MUU0OX0gPSB7Rjk4Nzg3M0ItMkI4OC00QjFCLUI2MjctRjcwREY0RjkxRTQ5fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImxpYmdzdGJhc2UiLCAibGliZ3N0YmFzZS52Y3Byb2oiLCAiezREN0JDNDAzLTU4M0ItNDcyNS1CRDg3LUE0QTJCN0ZEODE1Nn0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdAorCQl7Rjk4Nzg3M0ItMkI4OC00QjFCLUI2MjctRjcwREY0RjkxRTQ5fSA9IHtGOTg3ODczQi0yQjg4LTRCMUItQjYyNy1GNzBERjRGOTFFNDl9CisJRW5kUHJvamVjdFNlY3Rpb24KK0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibGliZ3N0Y29udHJvbGxlciIsICJsaWJnc3Rjb250cm9sbGVyLnZjcHJvaiIsICJ7NUIyOEU1MTUtQzkyQi00Q0YyLTk5NjMtQUM2RUZCOEIyQTVDfSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXtGOTg3ODczQi0yQjg4LTRCMUItQjYyNy1GNzBERjRGOTFFNDl9ID0ge0Y5ODc4NzNCLTJCODgtNEIxQi1CNjI3LUY3MERGNEY5MUU0OX0KKwlFbmRQcm9qZWN0U2VjdGlvbgorRW5kUHJvamVjdAorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJsaWJnc3Rjb3JlZWxlbWVudHMiLCAibGliZ3N0Y29yZWVsZW1lbnRzLnZjcHJvaiIsICJ7NjJENzM1OEMtNjg4MC00MEVBLTkzRkYtMjFCNjkzNzZDN0YwfSIKKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0CisJCXs0RDdCQzQwMy01ODNCLTQ3MjUtQkQ4Ny1BNEEyQjdGRDgxNTZ9ID0gezREN0JDNDAzLTU4M0ItNDcyNS1CRDg3LUE0QTJCN0ZEODE1Nn0KKwkJe0Y5ODc4NzNCLTJCODgtNEIxQi1CNjI3LUY3MERGNEY5MUU0OX0gPSB7Rjk4Nzg3M0ItMkI4OC00QjFCLUI2MjctRjcwREY0RjkxRTQ5fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImxpYmdzdHJlYW1lciIsICJsaWJnc3RyZWFtZXIudmNwcm9qIiwgIntGOTg3ODczQi0yQjg4LTRCMUItQjYyNy1GNzBERjRGOTFFNDl9IgorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QKKwkJezZEN0VCM0Q0LTdFOTEtNEQ5OC04MEVBLTI4QThGMkUzNjVGN30gPSB7NkQ3RUIzRDQtN0U5MS00RDk4LTgwRUEtMjhBOEYyRTM2NUY3fQorCUVuZFByb2plY3RTZWN0aW9uCitFbmRQcm9qZWN0CitHbG9iYWwKKwlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwcmVTb2x1dGlvbgorCQlEZWJ1Z3xXaW4zMiA9IERlYnVnfFdpbjMyCisJCVJlbGVhc2V8V2luMzIgPSBSZWxlYXNlfFdpbjMyCisJRW5kR2xvYmFsU2VjdGlvbgorCUdsb2JhbFNlY3Rpb24oUHJvamVjdENvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcG9zdFNvbHV0aW9uCisJCXs2RDdFQjNENC03RTkxLTREOTgtODBFQS0yOEE4RjJFMzY1Rjd9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs2RDdFQjNENC03RTkxLTREOTgtODBFQS0yOEE4RjJFMzY1Rjd9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7NkQ3RUIzRDQtN0U5MS00RDk4LTgwRUEtMjhBOEYyRTM2NUY3fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezZEN0VCM0Q0LTdFOTEtNEQ5OC04MEVBLTI4QThGMkUzNjVGN30uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7ODA2NEJCNDAtMjBCRS00RURFLUE1NTUtQzU3RDMxNEI3Q0U5fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7ODA2NEJCNDAtMjBCRS00RURFLUE1NTUtQzU3RDMxNEI3Q0U5fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezgwNjRCQjQwLTIwQkUtNEVERS1BNTU1LUM1N0QzMTRCN0NFOX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs4MDY0QkI0MC0yMEJFLTRFREUtQTU1NS1DNTdEMzE0QjdDRTl9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezVFNTlFNzk2LUMwOTctNEZCNy1BOTQ0LTkwNjNDRjlCRDMwMH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezVFNTlFNzk2LUMwOTctNEZCNy1BOTQ0LTkwNjNDRjlCRDMwMH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXs1RTU5RTc5Ni1DMDk3LTRGQjctQTk0NC05MDYzQ0Y5QkQzMDB9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7NUU1OUU3OTYtQzA5Ny00RkI3LUE5NDQtOTA2M0NGOUJEMzAwfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXs0RDdCQzQwMy01ODNCLTQ3MjUtQkQ4Ny1BNEEyQjdGRDgxNTZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXs0RDdCQzQwMy01ODNCLTQ3MjUtQkQ4Ny1BNEEyQjdGRDgxNTZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7NEQ3QkM0MDMtNTgzQi00NzI1LUJEODctQTRBMkI3RkQ4MTU2fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJezREN0JDNDAzLTU4M0ItNDcyNS1CRDg3LUE0QTJCN0ZEODE1Nn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCQl7NUIyOEU1MTUtQzkyQi00Q0YyLTk5NjMtQUM2RUZCOEIyQTVDfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7NUIyOEU1MTUtQzkyQi00Q0YyLTk5NjMtQUM2RUZCOEIyQTVDfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezVCMjhFNTE1LUM5MkItNENGMi05OTYzLUFDNkVGQjhCMkE1Q30uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXs1QjI4RTUxNS1DOTJCLTRDRjItOTk2My1BQzZFRkI4QjJBNUN9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwkJezYyRDczNThDLTY4ODAtNDBFQS05M0ZGLTIxQjY5Mzc2QzdGMH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezYyRDczNThDLTY4ODAtNDBFQS05M0ZGLTIxQjY5Mzc2QzdGMH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXs2MkQ3MzU4Qy02ODgwLTQwRUEtOTNGRi0yMUI2OTM3NkM3RjB9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7NjJENzM1OEMtNjg4MC00MEVBLTkzRkYtMjFCNjkzNzZDN0YwfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJCXtGOTg3ODczQi0yQjg4LTRCMUItQjYyNy1GNzBERjRGOTFFNDl9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCisJCXtGOTg3ODczQi0yQjg4LTRCMUItQjYyNy1GNzBERjRGOTFFNDl9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMgorCQl7Rjk4Nzg3M0ItMkI4OC00QjFCLUI2MjctRjcwREY0RjkxRTQ5fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKKwkJe0Y5ODc4NzNCLTJCODgtNEIxQi1CNjI3LUY3MERGNEY5MUU0OX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgorCUVuZEdsb2JhbFNlY3Rpb24KKwlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uUHJvcGVydGllcykgPSBwcmVTb2x1dGlvbgorCQlIaWRlU29sdXRpb25Ob2RlID0gRkFMU0UKKwlFbmRHbG9iYWxTZWN0aW9uCitFbmRHbG9iYWwKZGlmZiAtLWdpdCBhL3dpbjMyL3ZzOC9saWJnc3RiYXNlLnZjcHJvaiBiL3dpbjMyL3ZzOC9saWJnc3RiYXNlLnZjcHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDRjODQ3Ci0tLSAvZGV2L251bGwKKysrIGIvd2luMzIvdnM4L2xpYmdzdGJhc2UudmNwcm9qCkBAIC0wLDAgKzEsMjM4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0CisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiCisJVmVyc2lvbj0iOC4wMCIKKwlOYW1lPSJsaWJnc3RiYXNlIgorCVByb2plY3RHVUlEPSJ7NEQ3QkM0MDMtNTgzQi00NzI1LUJEODctQTRBMkI3RkQ4MTU2fSIKKwlLZXl3b3JkPSJXaW4zMlByb2oiCisJPgorCTxQbGF0Zm9ybXM+CisJCTxQbGF0Zm9ybQorCQkJTmFtZT0iV2luMzIiCisJCS8+CisJPC9QbGF0Zm9ybXM+CisJPFRvb2xGaWxlcz4KKwk8L1Rvb2xGaWxlcz4KKwk8Q29uZmlndXJhdGlvbnM+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKKwkJCUNoYXJhY3RlclNldD0iMiIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCU9wdGltaXphdGlvbj0iMCIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLi8uLiwuLi8uLi9saWJzLC4uL2NvbW1vbiIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEw7TElCR1NUQkFTRV9FWFBPUlRTO0hBVkVfQ09ORklHX0giCisJCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiCisJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVdhcm5pbmdMZXZlbD0iMyIKKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9InRydWUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iNCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnbGliLTIuMC5saWIgZ29iamVjdC0yLjAubGliIGd0aHJlYWQtMi4wLmxpYiBnbW9kdWxlLTIuMC5saWIgbGlieG1sMi5saWIgd3NvY2szMi5saWIgaW50bC5saWIiCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL2xpYmdzdGJhc2UtMC4xMC5kbGwiCisJCQkJTGlua0luY3JlbWVudGFsPSIyIgorCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSIuLlxjb21tb25cbGliZ3N0YmFzZS5kZWYiCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgorCQkJCVN1YlN5c3RlbT0iMiIKKwkJCQlUYXJnZXRNYWNoaW5lPSIxIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCQlDb21tYW5kTGluZT0iY29weSAvWSAmcXVvdDskKFRhcmdldFBhdGgpJnF1b3Q7IGM6XGdzdHJlYW1lclxkZWJ1Z1xiaW4mI3gwRDsmI3gwQTsiCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgorCQkJQ2hhcmFjdGVyU2V0PSIyIgorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi4vLi4sLi4vLi4vbGlicywuLi9jb21tb24iCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO0xJQkdTVEJBU0VfRVhQT1JUUztIQVZFX0NPTkZJR19IIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVdhcm5pbmdMZXZlbD0iMyIKKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9InRydWUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnbGliLTIuMC5saWIgZ29iamVjdC0yLjAubGliIGd0aHJlYWQtMi4wLmxpYiBnbW9kdWxlLTIuMC5saWIgbGlieG1sMi5saWIgd3NvY2szMi5saWIgaW50bC5saWIiCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL2xpYmdzdGJhc2UtMC4xMC5kbGwiCisJCQkJTGlua0luY3JlbWVudGFsPSIxIgorCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSIuLlxjb21tb25cbGliZ3N0YmFzZS5kZWYiCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgorCQkJCVN1YlN5c3RlbT0iMiIKKwkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiCisJCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMiIKKwkJCQlUYXJnZXRNYWNoaW5lPSIxIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCQlDb21tYW5kTGluZT0iY29weSAveSAmcXVvdDskKFRhcmdldFBhdGgpJnF1b3Q7IGM6XGdzdHJlYW1lclxiaW4iCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJPC9Db25maWd1cmF0aW9ucz4KKwk8UmVmZXJlbmNlcz4KKwk8L1JlZmVyZW5jZXM+CisJPEZpbGVzPgorCQk8RmlsdGVyCisJCQlOYW1lPSJTb3VyY2UgRmlsZXMiCisJCQlGaWx0ZXI9ImNwcDtjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214IgorCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iCisJCQk+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cbGlic1xnc3RcYmFzZVxnc3RhZGFwdGVyLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGxpYnNcZ3N0XGJhc2VcZ3N0YmFzZXNpbmsuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cbGlic1xnc3RcYmFzZVxnc3RiYXNlc3JjLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGxpYnNcZ3N0XGJhc2VcZ3N0YmFzZXRyYW5zZm9ybS5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxsaWJzXGdzdFxiYXNlXGdzdGNvbGxlY3RwYWRzLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGxpYnNcZ3N0XGJhc2VcZ3N0ZGF0YXF1ZXVlLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGxpYnNcZ3N0XGJhc2VcZ3N0cHVzaHNyYy5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxsaWJzXGdzdFxiYXNlXGdzdHR5cGVmaW5kaGVscGVyLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQk8L0ZpbHRlcj4KKwkJPEZpbHRlcgorCQkJTmFtZT0iSGVhZGVyIEZpbGVzIgorCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2luYzt4c2QiCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfSIKKwkJCT4KKwkJPC9GaWx0ZXI+CisJCTxGaWx0ZXIKKwkJCU5hbWU9IlJlc291cmNlIEZpbGVzIgorCQkJRmlsdGVyPSJyYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGU7cmVzeCIKKwkJCVVuaXF1ZUlkZW50aWZpZXI9Ins2N0RBNkFCNi1GODAwLTRjMDgtOEI3QS04M0JCMTIxQUFEMDF9IgorCQkJPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNvbW1vblxsaWJnc3RiYXNlLmRlZiIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCTwvRmlsdGVyPgorCTwvRmlsZXM+CisJPEdsb2JhbHM+CisJPC9HbG9iYWxzPgorPC9WaXN1YWxTdHVkaW9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvd2luMzIvdnM4L2xpYmdzdGNvbnRyb2xsZXIudmNwcm9qIGIvd2luMzIvdnM4L2xpYmdzdGNvbnRyb2xsZXIudmNwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMTQzMzcKLS0tIC9kZXYvbnVsbAorKysgYi93aW4zMi92czgvbGliZ3N0Y29udHJvbGxlci52Y3Byb2oKQEAgLTAsMCArMSwyMzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MSI/PgorPFZpc3VhbFN0dWRpb1Byb2plY3QKKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKKwlWZXJzaW9uPSI4LjAwIgorCU5hbWU9ImxpYmdzdGNvbnRyb2xsZXIiCisJUHJvamVjdEdVSUQ9Ins1QjI4RTUxNS1DOTJCLTRDRjItOTk2My1BQzZFRkI4QjJBNUN9IgorCUtleXdvcmQ9IldpbjMyUHJvaiIKKwk+CisJPFBsYXRmb3Jtcz4KKwkJPFBsYXRmb3JtCisJCQlOYW1lPSJXaW4zMiIKKwkJLz4KKwk8L1BsYXRmb3Jtcz4KKwk8VG9vbEZpbGVzPgorCTwvVG9vbEZpbGVzPgorCTxDb25maWd1cmF0aW9ucz4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgorCQkJQ2hhcmFjdGVyU2V0PSIyIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1pemF0aW9uPSIwIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uLy4uLC4uLy4uL2xpYnMsLi4vY29tbW9uIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtMSUJHU1RDT05UUk9MTEVSX0VYUE9SVFM7SEFWRV9DT05GSUdfSCIKKwkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSIKKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCisJCQkJUnVudGltZUxpYnJhcnk9IjMiCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0idHJ1ZSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSI0IgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdsaWItMi4wLmxpYiBnb2JqZWN0LTIuMC5saWIgZ3RocmVhZC0yLjAubGliIGdtb2R1bGUtMi4wLmxpYiIKKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvbGliZ3N0Y29udHJvbGxlci0wLjEwLmRsbCIKKwkJCQlMaW5rSW5jcmVtZW50YWw9IjIiCisJCQkJTW9kdWxlRGVmaW5pdGlvbkZpbGU9Ii4uXGNvbW1vblxsaWJnc3Rjb250cm9sbGVyLmRlZiIKKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCisJCQkJU3ViU3lzdGVtPSIyIgorCQkJCVRhcmdldE1hY2hpbmU9IjEiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJCUNvbW1hbmRMaW5lPSJta2RpciBjOlxnc3RyZWFtZXJcZGVidWcmI3gwRDsmI3gwQTtta2RpciBjOlxnc3RyZWFtZXJcZGVidWdcYmluJiN4MEQ7JiN4MEE7Y29weSAveSAmcXVvdDskKFRhcmdldFBhdGgpJnF1b3Q7IGM6XGdzdHJlYW1lclxkZWJ1Z1xiaW4mI3gwRDsmI3gwQTsiCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgorCQkJQ2hhcmFjdGVyU2V0PSIyIgorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi4vLi4sLi4vLi4vbGlicywuLi9jb21tb24iCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO0xJQkdTVENPTlRST0xMRVJfRVhQT1JUUztIQVZFX0NPTkZJR19IIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVdhcm5pbmdMZXZlbD0iMyIKKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9InRydWUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnbGliLTIuMC5saWIgZ29iamVjdC0yLjAubGliIGd0aHJlYWQtMi4wLmxpYiBnbW9kdWxlLTIuMC5saWIiCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL2xpYmdzdGNvbnRyb2xsZXItMC4xMC5kbGwiCisJCQkJTGlua0luY3JlbWVudGFsPSIxIgorCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSIuLlxjb21tb25cbGliZ3N0Y29udHJvbGxlci5kZWYiCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgorCQkJCVN1YlN5c3RlbT0iMiIKKwkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiCisJCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMiIKKwkJCQlUYXJnZXRNYWNoaW5lPSIxIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCQlDb21tYW5kTGluZT0ibWtkaXIgYzpcZ3N0cmVhbWVyJiN4MEQ7JiN4MEE7bWtkaXIgYzpcZ3N0cmVhbWVyXGJpbiYjeDBEOyYjeDBBO2NvcHkgL3kgJnF1b3Q7JChUYXJnZXRQYXRoKSZxdW90OyBjOlxnc3RyZWFtZXJcYmluJiN4MEQ7JiN4MEE7IgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCTwvQ29uZmlndXJhdGlvbnM+CisJPFJlZmVyZW5jZXM+CisJPC9SZWZlcmVuY2VzPgorCTxGaWxlcz4KKwkJPEZpbHRlcgorCQkJTmFtZT0iU291cmNlIEZpbGVzIgorCQkJRmlsdGVyPSJjcHA7YztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteCIKKwkJCVVuaXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9IgorCQkJPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGxpYnNcZ3N0XGNvbnRyb2xsZXJcZ3N0Y29udHJvbGxlci5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxsaWJzXGdzdFxjb250cm9sbGVyXGdzdGNvbnRyb2xzb3VyY2UuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cbGlic1xnc3RcY29udHJvbGxlclxnc3RoZWxwZXIuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cbGlic1xnc3RcY29udHJvbGxlclxnc3RpbnRlcnBvbGF0aW9uLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGxpYnNcZ3N0XGNvbnRyb2xsZXJcZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cbGlic1xnc3RcY29udHJvbGxlclxnc3RsZm9jb250cm9sc291cmNlLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGxpYnNcZ3N0XGNvbnRyb2xsZXJcbGliLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQk8L0ZpbHRlcj4KKwkJPEZpbHRlcgorCQkJTmFtZT0iSGVhZGVyIEZpbGVzIgorCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2luYzt4c2QiCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfSIKKwkJCT4KKwkJPC9GaWx0ZXI+CisJCTxGaWx0ZXIKKwkJCU5hbWU9IlJlc291cmNlIEZpbGVzIgorCQkJRmlsdGVyPSJyYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGU7cmVzeCIKKwkJCVVuaXF1ZUlkZW50aWZpZXI9Ins2N0RBNkFCNi1GODAwLTRjMDgtOEI3QS04M0JCMTIxQUFEMDF9IgorCQkJPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNvbW1vblxsaWJnc3Rjb250cm9sbGVyLmRlZiIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCTwvRmlsdGVyPgorCTwvRmlsZXM+CisJPEdsb2JhbHM+CisJPC9HbG9iYWxzPgorPC9WaXN1YWxTdHVkaW9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvd2luMzIvdnM4L2xpYmdzdGNvcmVlbGVtZW50cy52Y3Byb2ogYi93aW4zMi92czgvbGliZ3N0Y29yZWVsZW1lbnRzLnZjcHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTNjZWE3Ci0tLSAvZGV2L251bGwKKysrIGIvd2luMzIvdnM4L2xpYmdzdGNvcmVlbGVtZW50cy52Y3Byb2oKQEAgLTAsMCArMSwyNDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/PgorPFZpc3VhbFN0dWRpb1Byb2plY3QKKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKKwlWZXJzaW9uPSI4LjAwIgorCU5hbWU9ImxpYmdzdGNvcmVlbGVtZW50cyIKKwlQcm9qZWN0R1VJRD0iezYyRDczNThDLTY4ODAtNDBFQS05M0ZGLTIxQjY5Mzc2QzdGMH0iCisJS2V5d29yZD0iV2luMzJQcm9qIgorCT4KKwk8UGxhdGZvcm1zPgorCQk8UGxhdGZvcm0KKwkJCU5hbWU9IldpbjMyIgorCQkvPgorCTwvUGxhdGZvcm1zPgorCTxUb29sRmlsZXM+CisJPC9Ub29sRmlsZXM+CisJPENvbmZpZ3VyYXRpb25zPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCisJCQlDaGFyYWN0ZXJTZXQ9IjIiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlPcHRpbWl6YXRpb249IjAiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi4vLi4sLi4vLi4vbGlicywuLi9jb21tb24iCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO0xJQkdTVEVMRU1FTlRTX0VYUE9SVFM7SEFWRV9DT05GSUdfSCIKKwkJCQlNaW5pbWFsUmVidWlsZD0idHJ1ZSIKKwkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCisJCQkJUnVudGltZUxpYnJhcnk9IjMiCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0idHJ1ZSIKKwkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSI0IgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdsaWItMi4wLmxpYiBnb2JqZWN0LTIuMC5saWIgZ3RocmVhZC0yLjAubGliIGdtb2R1bGUtMi4wLmxpYiBsaWJ4bWwyLmxpYiB3c29jazMyLmxpYiBpbnRsLmxpYiIKKwkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvbGliZ3N0Y29yZWVsZW1lbnRzLmRsbCIKKwkJCQlMaW5rSW5jcmVtZW50YWw9IjIiCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgorCQkJCVN1YlN5c3RlbT0iMiIKKwkJCQlUYXJnZXRNYWNoaW5lPSIxIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCQlDb21tYW5kTGluZT0ibWtkaXIgYzpcZ3N0cmVhbWVyXGRlYnVnXGxpYiYjeDBEOyYjeDBBO21rZGlyIGM6XGdzdHJlYW1lclxkZWJ1Z1xsaWJcZ3N0cmVhbWVyLTAuMTAmI3gwRDsmI3gwQTtjb3B5IC95ICZxdW90OyQoVGFyZ2V0UGF0aCkmcXVvdDsgYzpcZ3N0cmVhbWVyXGRlYnVnXGxpYlxnc3RyZWFtZXItMC4xMCYjeDBEOyYjeDBBOyIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCisJCQlDaGFyYWN0ZXJTZXQ9IjIiCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLi8uLiwuLi8uLi9saWJzLC4uL2NvbW1vbiIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TElCR1NURUxFTUVOVFNfRVhQT1JUUztIQVZFX0NPTkZJR19IIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVdhcm5pbmdMZXZlbD0iMyIKKwkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9InRydWUiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnbGliLTIuMC5saWIgZ29iamVjdC0yLjAubGliIGd0aHJlYWQtMi4wLmxpYiBnbW9kdWxlLTIuMC5saWIgbGlieG1sMi5saWIgd3NvY2szMi5saWIgaW50bC5saWIiCisJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL2xpYmdzdGNvcmVlbGVtZW50cy5kbGwiCisJCQkJTGlua0luY3JlbWVudGFsPSIxIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlTdWJTeXN0ZW09IjIiCisJCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIgorCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiCisJCQkJVGFyZ2V0TWFjaGluZT0iMSIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkJQ29tbWFuZExpbmU9Im1rZGlyIGM6XGdzdHJlYW1lclxsaWImI3gwRDsmI3gwQTtta2RpciBjOlxnc3RyZWFtZXJcbGliXGdzdHJlYW1lci0wLjEwJiN4MEQ7JiN4MEE7Y29weSAveSAmcXVvdDskKFRhcmdldFBhdGgpJnF1b3Q7IGM6XGdzdHJlYW1lclxsaWJcZ3N0cmVhbWVyLTAuMTAmI3gwRDsmI3gwQTsiCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJPC9Db25maWd1cmF0aW9ucz4KKwk8UmVmZXJlbmNlcz4KKwk8L1JlZmVyZW5jZXM+CisJPEZpbGVzPgorCQk8RmlsdGVyCisJCQlOYW1lPSJTb3VyY2UgRmlsZXMiCisJCQlGaWx0ZXI9ImNwcDtjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214IgorCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iCisJCQk+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccGx1Z2luc1xlbGVtZW50c1xnc3RidWZmZXJzdG9yZS5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwbHVnaW5zXGVsZW1lbnRzXGdzdGNhcHNmaWx0ZXIuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccGx1Z2luc1xlbGVtZW50c1xnc3RlbGVtZW50cy5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwbHVnaW5zXGVsZW1lbnRzXGdzdGZha2VzaW5rLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHBsdWdpbnNcZWxlbWVudHNcZ3N0ZmFrZXNyYy5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwbHVnaW5zXGVsZW1lbnRzXGdzdGZpbGVzaW5rLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHBsdWdpbnNcZWxlbWVudHNcZ3N0ZmlsZXNyYy5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwbHVnaW5zXGVsZW1lbnRzXGdzdGlkZW50aXR5LmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHBsdWdpbnNcZWxlbWVudHNcZ3N0bXVsdGlxdWV1ZS5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwbHVnaW5zXGVsZW1lbnRzXGdzdHF1ZXVlLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHBsdWdpbnNcZWxlbWVudHNcZ3N0dGVlLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHBsdWdpbnNcZWxlbWVudHNcZ3N0dHlwZWZpbmRlbGVtZW50LmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQk8L0ZpbHRlcj4KKwkJPEZpbHRlcgorCQkJTmFtZT0iSGVhZGVyIEZpbGVzIgorCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2luYzt4c2QiCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfSIKKwkJCT4KKwkJPC9GaWx0ZXI+CisJCTxGaWx0ZXIKKwkJCU5hbWU9IlJlc291cmNlIEZpbGVzIgorCQkJRmlsdGVyPSJyYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGU7cmVzeCIKKwkJCVVuaXF1ZUlkZW50aWZpZXI9Ins2N0RBNkFCNi1GODAwLTRjMDgtOEI3QS04M0JCMTIxQUFEMDF9IgorCQkJPgorCQk8L0ZpbHRlcj4KKwk8L0ZpbGVzPgorCTxHbG9iYWxzPgorCTwvR2xvYmFscz4KKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3dpbjMyL3ZzOC9saWJnc3RyZWFtZXIudmNwcm9qIGIvd2luMzIvdnM4L2xpYmdzdHJlYW1lci52Y3Byb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA4Mzc4MAotLS0gL2Rldi9udWxsCisrKyBiL3dpbjMyL3ZzOC9saWJnc3RyZWFtZXIudmNwcm9qCkBAIC0wLDAgKzEsNDE1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0CisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiCisJVmVyc2lvbj0iOC4wMCIKKwlOYW1lPSJsaWJnc3RyZWFtZXIiCisJUHJvamVjdEdVSUQ9IntGOTg3ODczQi0yQjg4LTRCMUItQjYyNy1GNzBERjRGOTFFNDl9IgorCUtleXdvcmQ9IldpbjMyUHJvaiIKKwk+CisJPFBsYXRmb3Jtcz4KKwkJPFBsYXRmb3JtCisJCQlOYW1lPSJXaW4zMiIKKwkJLz4KKwk8L1BsYXRmb3Jtcz4KKwk8VG9vbEZpbGVzPgorCTwvVG9vbEZpbGVzPgorCTxDb25maWd1cmF0aW9ucz4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgorCQkJQ2hhcmFjdGVyU2V0PSIyIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1pemF0aW9uPSIwIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uLy4uLC4uL2NvbW1vbiIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEw7TElCR1NUUkVBTUVSX0VYUE9SVFM7SEFWRV9DT05GSUdfSDtIQVZFX1dJTjMyO1lZX05PX1VOSVNURF9IIgorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgorCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKKwkJCQlSdW50aW1lTGlicmFyeT0iMyIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlXYXJuaW5nTGV2ZWw9IjMiCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjQiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2xpYi0yLjAubGliIGdvYmplY3QtMi4wLmxpYiBndGhyZWFkLTIuMC5saWIgZ21vZHVsZS0yLjAubGliIGxpYnhtbDIubGliIHdzb2NrMzIubGliIGludGwubGliIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9saWJnc3RyZWFtZXItMC4xMC5kbGwiCisJCQkJTGlua0luY3JlbWVudGFsPSIyIgorCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiZxdW90O0M6XFByb2dyYW0gRmlsZXNcTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gLk5FVCAyMDAzXFZjN1xjcnRcc3JjXGludGVsXGRsbF9saWImcXVvdDsiCisJCQkJTW9kdWxlRGVmaW5pdGlvbkZpbGU9Ii4uXGNvbW1vblxsaWJnc3RyZWFtZXIuZGVmIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlTdWJTeXN0ZW09IjIiCisJCQkJVGFyZ2V0TWFjaGluZT0iMSIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkJQ29tbWFuZExpbmU9Im1rZGlyIGM6XGdzdHJlYW1lclxkZWJ1ZyYjeDBEOyYjeDBBO21rZGlyIGM6XGdzdHJlYW1lclxkZWJ1Z1xiaW4mI3gwRDsmI3gwQTtjb3B5IC95ICZxdW90OyQoVGFyZ2V0UGF0aCkmcXVvdDsgYzpcZ3N0cmVhbWVyXGRlYnVnXGJpbiYjeDBEOyYjeDBBOyIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCisJCQlDaGFyYWN0ZXJTZXQ9IjIiCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLi8uLiwuLi9jb21tb24iCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO0xJQkdTVFJFQU1FUl9FWFBPUlRTO0hBVkVfQ09ORklHX0g7SEFWRV9XSU4zMjtZWV9OT19VTklTVERfSCIKKwkJCQlSdW50aW1lTGlicmFyeT0iMiIKKwkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKKwkJCQlXYXJuaW5nTGV2ZWw9IjMiCisJCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJ0cnVlIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2xpYi0yLjAubGliIGdvYmplY3QtMi4wLmxpYiBndGhyZWFkLTIuMC5saWIgZ21vZHVsZS0yLjAubGliIGxpYnhtbDIubGliIHdzb2NrMzIubGliIGludGwubGliIgorCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9saWJnc3RyZWFtZXItMC4xMC5kbGwiCisJCQkJTGlua0luY3JlbWVudGFsPSIxIgorCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSIuLlxjb21tb25cbGliZ3N0cmVhbWVyLmRlZiIKKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCisJCQkJU3ViU3lzdGVtPSIyIgorCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMiIKKwkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIyIgorCQkJCVRhcmdldE1hY2hpbmU9IjEiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJCUNvbW1hbmRMaW5lPSJta2RpciBjOlxnc3RyZWFtZXImI3gwRDsmI3gwQTtta2RpciBjOlxnc3RyZWFtZXJcYmluJiN4MEQ7JiN4MEE7Y29weSAveSAmcXVvdDskKFRhcmdldFBhdGgpJnF1b3Q7IGM6XGdzdHJlYW1lclxiaW4mI3gwRDsmI3gwQTsiCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJPC9Db25maWd1cmF0aW9ucz4KKwk8UmVmZXJlbmNlcz4KKwk8L1JlZmVyZW5jZXM+CisJPEZpbGVzPgorCQk8RmlsdGVyCisJCQlOYW1lPSJTb3VyY2UgRmlsZXMiCisJCQlGaWx0ZXI9ImNwcDtjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214IgorCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iCisJCQk+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cY29tbW9uXGRpcmVudC5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RccGFyc2VcZ3JhbW1hci50YWIuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XGdzdC5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0YmluLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RidWZmZXIuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XGdzdGJ1cy5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0Y2Fwcy5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0Y2hpbGRwcm94eS5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0Y2xvY2suYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XGdzdGRlYnVndXRpbHMuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XGdzdGVsZW1lbnQuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XGdzdGVsZW1lbnRmYWN0b3J5LmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RlbnVtdHlwZXMuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XGdzdGVycm9yLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RldmVudC5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0ZmlsdGVyLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3Rmb3JtYXQuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XGdzdGdob3N0cGFkLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RpbmRleC5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0aW5kZXhmYWN0b3J5LmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RpbmZvLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RpbnRlcmZhY2UuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XGdzdGl0ZXJhdG9yLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RtYXJzaGFsLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RtZXNzYWdlLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RtaW5pb2JqZWN0LmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RvYmplY3QuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XGdzdHBhZC5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0cGFkdGVtcGxhdGUuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XGdzdHBhcmFtc3BlY3MuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XGdzdHBhcnNlLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RwaXBlbGluZS5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0cGx1Z2luLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RwbHVnaW5mZWF0dXJlLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RxdWFyay5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0cXVlcnkuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XGdzdHJlZ2lzdHJ5LmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RyZWdpc3RyeXhtbC5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0c2VnbWVudC5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0c3RydWN0dXJlLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3RzeXN0ZW1jbG9jay5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0dGFnbGlzdC5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0dGFnc2V0dGVyLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3R0YXNrLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3R0cmFjZS5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0dHlwZWZpbmQuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XGdzdHR5cGVmaW5kZmFjdG9yeS5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0dXJpLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdzdFxnc3R1dGlscy5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RcZ3N0dmFsdWUuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cZ3N0XGdzdHhtbC5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxnc3RccGFyc2VcbGV4Ll9nc3RfcGFyc2VfeXkuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCTwvRmlsdGVyPgorCQk8RmlsdGVyCisJCQlOYW1lPSJIZWFkZXIgRmlsZXMiCisJCQlGaWx0ZXI9Img7aHBwO2h4eDtobTtpbmw7aW5jO3hzZCIKKwkJCVVuaXF1ZUlkZW50aWZpZXI9Ins5Mzk5NTM4MC04OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9IgorCQkJPgorCQk8L0ZpbHRlcj4KKwkJPEZpbHRlcgorCQkJTmFtZT0iUmVzb3VyY2UgRmlsZXMiCisJCQlGaWx0ZXI9InJjO2ljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZTtyZXN4IgorCQkJVW5pcXVlSWRlbnRpZmllcj0iezY3REE2QUI2LUY4MDAtNGMwOC04QjdBLTgzQkIxMjFBQUQwMX0iCisJCQk+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cY29tbW9uXGxpYmdzdHJlYW1lci5kZWYiCisJCQkJPgorCQkJPC9GaWxlPgorCQk8L0ZpbHRlcj4KKwk8L0ZpbGVzPgorCTxHbG9iYWxzPgorCTwvR2xvYmFscz4KKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4K